ZGlmZiAtLWdpdCBhL0NvbnRlbnRzIGIvQ29udGVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmYWE2ZQotLS0gL2Rldi9udWxsCisrKyBiL0NvbnRlbnRzCkBAIC0wLDAgKzEsMjMgQEAKK1ZpbQkJVmkgSU1wcm92ZWQuICBBIGNsb25lIG9mIHRoZSBVTklYIHRleHQgZWRpdG9yIFZpLiAgVmVyeSB1c2VmdWwKKwkJZm9yIGVkaXRpbmcgcHJvZ3JhbXMgYW5kIG90aGVyIHBsYWluIEFTQ0lJIHRleHQuICBGdWxsIFZpCisJCWNvbXBhdGliaWxpdHkgYW5kIGluY2x1ZGVzIGFsbCBFeCBjb21tYW5kcy4gIEV4dHJhIGZlYXR1cmVzCisJCWFib3ZlIFZpOiBNdWx0aWxldmVsIHVuZG8sIG11bHRpcGxlIHdpbmRvd3MsIHN5bnRheAorCQloaWdobGlnaHRpbmcsIGNvbW1hbmQgbGluZSBoaXN0b3J5LCBmb2xkaW5nLCBpbXByb3ZlZCBjb21tYW5kCisJCWxpbmUgZWRpdGluZywgY29tbWFuZCB0eXBlYWhlYWQgZGlzcGxheSwgY29tbWFuZCB0byBkaXNwbGF5CisJCXlhbmsgYnVmZmVycywgcG9zc2liaWxpdHkgdG8gZWRpdCBiaW5hcnkgZmlsZXMsIGZpbGUgbmFtZQorCQlzdGFjaywgc3VwcG9ydCBmb3IgTWFueCBRdWlja0ZpeCBhbmQgb3RoZXIgY29tcGlsZXIncyBlcnJvcgorCQltZXNzYWdlcywgc2hvd3MgY3VycmVudCBmaWxlIG5hbWUgaW4gd2luZG93IHRpdGxlLCBvbi1saW5lCisJCWhlbHAsIHJlY3Rhbmd1bGFyIGN1dC9wYXN0ZSwgZXRjLiwgZXRjLiwgZXRjLi4uCisKKwkJVmVyc2lvbiA3LjBhYS4gIEFsc28gcnVucyB1bmRlciBVTklYLCBNU0RPUyBhbmQgb3RoZXIgc3lzdGVtcy4KKwkJdmltNzBhYXJ0LnRneiAgY29udGFpbnMgdGhlIGRvY3VtZW50YXRpb24gYW5kIHN5bnRheCBmaWxlcy4KKwkJdmltNzBhYWJpbi50Z3ogY29udGFpbnMgdGhlIGJpbmFyaWVzLgorCQl2aW03MGFhc3JjLnRneiBjb250YWlucyB0aGUgc291cmNlcy4KKwkJQXV0aG9yOiBCcmFtIE1vb2xlbmFhciBldCBhbC4KKworCitYeGQJCUhleCBkdW1wZXIgYW5kIHJlYWRlci4gIENhbiBiZSB1c2VkIHRvIHZpZXcgZmlsZXMgYXMgaGV4LCBlZGl0CisJCXRoZW0gYW5kIHdyaXRlIHRoZW0gYmFjay4gIENhbiBhbHNvIGJlIHVzZWQgdG8gcGF0Y2ggZmlsZXMuCisKKwkJVmVyc2lvbiAxLjggKDE5OTcgTWF5IDIyKQorCQlBdXRob3I6IEp1ZXJnZW4gV2VpZ2VydApkaWZmIC0tZ2l0IGEvQ29udGVudHMuaW5mbyBiL0NvbnRlbnRzLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWU4NTVjNwotLS0gL2Rldi9udWxsCisrKyBiL0NvbnRlbnRzLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRmlsZWxpc3QgYi9GaWxlbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDQ4ZWUyCi0tLSAvZGV2L251bGwKKysrIGIvRmlsZWxpc3QKQEAgLTAsMCArMSw2NTcgQEAKKyMgTGlzdCBvZiBkaXN0cmlidXRlZCBWaW0gZmlsZXMuCisjIFVzZWQgYnkgTWFrZWZpbGUgYW5kIHVwbG9hZC5hYXAuCisKKyMgc291cmNlIGZpbGVzIGZvciBhbGwgc291cmNlIGFyY2hpdmVzCitTUkNfQUxMMSA9CVwKKwkJc3JjL1JFQURNRS50eHQgXAorCQlzcmMvYXJhYmljLmMgXAorCQlzcmMvYXJhYmljLmggXAorCQlzcmMvYXNjaWkuaCBcCisJCXNyYy9idWZmZXIuYyBcCisJCXNyYy9jaGFyc2V0LmMgXAorCQlzcmMvZGlmZi5jIFwKKwkJc3JjL2RpZ3JhcGguYyBcCisJCXNyYy9lZGl0LmMgXAorCQlzcmMvZXZhbC5jIFwKKwkJc3JjL2V4X2NtZHMuYyBcCisJCXNyYy9leF9jbWRzLmggXAorCQlzcmMvZXhfY21kczIuYyBcCisJCXNyYy9leF9kb2NtZC5jIFwKKwkJc3JjL2V4X2V2YWwuYyBcCisJCXNyYy9leF9nZXRsbi5jIFwKKwkJc3JjL2ZhcnNpLmMgXAorCQlzcmMvZmFyc2kuaCBcCisJCXNyYy9mZWF0dXJlLmggXAorCQlzcmMvZmlsZWlvLmMgXAorCQlzcmMvZm9sZC5jIFwKKwkJc3JjL2dldGNoYXIuYyBcCisJCXNyYy9nbG9iYWxzLmggXAorCQlzcmMvZ3VpLmMgXAorCQlzcmMvZ3VpLmggXAorCQlzcmMvZ3VpX2JldmFsLmMgXAorCQlzcmMvZ3VpX2JldmFsLmggXAorCQlzcmMva2V5bWFwLmggXAorCQlzcmMvbWFjcm9zLmggXAorCQlzcmMvbWFpbi5jIFwKKwkJc3JjL21hcmsuYyBcCisJCXNyYy9tYnl0ZS5jIFwKKwkJc3JjL21lbWZpbGUuYyBcCisJCXNyYy9tZW1saW5lLmMgXAorCQlzcmMvbWVudS5jIFwKKwkJc3JjL21lc3NhZ2UuYyBcCisJCXNyYy9taXNjMS5jIFwKKwkJc3JjL21pc2MyLmMgXAorCQlzcmMvbW92ZS5jIFwKKwkJc3JjL215c2lnbiBcCisJCXNyYy9uYmRlYnVnLmMgXAorCQlzcmMvbmJkZWJ1Zy5oIFwKKwkJc3JjL25ldGJlYW5zLmMgXAorCQlzcmMvbm9ybWFsLmMgXAorCQlzcmMvb3BzLmMgXAorCQlzcmMvb3B0aW9uLmMgXAorCQlzcmMvb3B0aW9uLmggXAorCQlzcmMvcXVpY2tmaXguYyBcCisJCXNyYy9yZWdleHAuYyBcCisJCXNyYy9yZWdleHAuaCBcCisJCXNyYy9zY3JlZW4uYyBcCisJCXNyYy9zZWFyY2guYyBcCisJCXNyYy9zdHJ1Y3RzLmggXAorCQlzcmMvc3ludGF4LmMgXAorCQlzcmMvdGFnLmMgXAorCQlzcmMvdGVybS5jIFwKKwkJc3JjL3Rlcm0uaCBcCisJCXNyYy90ZXJtbGliLmMgXAorCQlzcmMvdWkuYyBcCisJCXNyYy91bmRvLmMgXAorCQlzcmMvdmVyc2lvbi5jIFwKKwkJc3JjL3ZlcnNpb24uaCBcCisJCXNyYy92aW0uaCBcCisJCXNyYy93aW5kb3cuYyBcCisJCXNyYy94eGQveHhkLmMgXAorCitTUkNfQUxMMiA9CVwKKwkJc3JjL21haW4uYWFwIFwKKwkJc3JjL3Rlc3RkaXIvbWFpbi5hYXAgXAorCQlzcmMvdGVzdGRpci8qLmluIFwKKwkJc3JjL3Rlc3RkaXIvKi5vayBcCisJCXNyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0gXAorCQlzcmMvcHJvdG8uaCBcCisJCXNyYy9wcm90by9idWZmZXIucHJvIFwKKwkJc3JjL3Byb3RvL2NoYXJzZXQucHJvIFwKKwkJc3JjL3Byb3RvL2RpZmYucHJvIFwKKwkJc3JjL3Byb3RvL2RpZ3JhcGgucHJvIFwKKwkJc3JjL3Byb3RvL2VkaXQucHJvIFwKKwkJc3JjL3Byb3RvL2V2YWwucHJvIFwKKwkJc3JjL3Byb3RvL2V4X2NtZHMucHJvIFwKKwkJc3JjL3Byb3RvL2V4X2NtZHMyLnBybyBcCisJCXNyYy9wcm90by9leF9kb2NtZC5wcm8gXAorCQlzcmMvcHJvdG8vZXhfZXZhbC5wcm8gXAorCQlzcmMvcHJvdG8vZXhfZ2V0bG4ucHJvIFwKKwkJc3JjL3Byb3RvL2ZpbGVpby5wcm8gXAorCQlzcmMvcHJvdG8vZm9sZC5wcm8gXAorCQlzcmMvcHJvdG8vZ2V0Y2hhci5wcm8gXAorCQlzcmMvcHJvdG8vZ3VpLnBybyBcCisJCXNyYy9wcm90by9ndWlfYmV2YWwucHJvIFwKKwkJc3JjL3Byb3RvL21haW4ucHJvIFwKKwkJc3JjL3Byb3RvL21hcmsucHJvIFwKKwkJc3JjL3Byb3RvL21ieXRlLnBybyBcCisJCXNyYy9wcm90by9tZW1maWxlLnBybyBcCisJCXNyYy9wcm90by9tZW1saW5lLnBybyBcCisJCXNyYy9wcm90by9tZW51LnBybyBcCisJCXNyYy9wcm90by9tZXNzYWdlLnBybyBcCisJCXNyYy9wcm90by9taXNjMS5wcm8gXAorCQlzcmMvcHJvdG8vbWlzYzIucHJvIFwKKwkJc3JjL3Byb3RvL21vdmUucHJvIFwKKwkJc3JjL3Byb3RvL25ldGJlYW5zLnBybyBcCisJCXNyYy9wcm90by9ub3JtYWwucHJvIFwKKwkJc3JjL3Byb3RvL29wcy5wcm8gXAorCQlzcmMvcHJvdG8vb3B0aW9uLnBybyBcCisJCXNyYy9wcm90by9xdWlja2ZpeC5wcm8gXAorCQlzcmMvcHJvdG8vcmVnZXhwLnBybyBcCisJCXNyYy9wcm90by9zY3JlZW4ucHJvIFwKKwkJc3JjL3Byb3RvL3NlYXJjaC5wcm8gXAorCQlzcmMvcHJvdG8vc3ludGF4LnBybyBcCisJCXNyYy9wcm90by90YWcucHJvIFwKKwkJc3JjL3Byb3RvL3Rlcm0ucHJvIFwKKwkJc3JjL3Byb3RvL3Rlcm1saWIucHJvIFwKKwkJc3JjL3Byb3RvL3VpLnBybyBcCisJCXNyYy9wcm90by91bmRvLnBybyBcCisJCXNyYy9wcm90by92ZXJzaW9uLnBybyBcCisJCXNyYy9wcm90by93aW5kb3cucHJvIFwKKworCisjIHNvdXJjZSBmaWxlcyBmb3IgVW5peCBvbmx5CitTUkNfVU5JWCA9CVwKKwkJTWFrZWZpbGUgXAorCQlGaWxlbGlzdCBcCisJCVJFQURNRV9zcmMudHh0IFwKKwkJY29uZmlndXJlIFwKKwkJcGl4bWFwcy8qLnhwbSBcCisJCXBpeG1hcHMvZ2VuLWlubGluZS1waXhidWZzLnNoIFwKKwkJcGl4bWFwcy9zdG9ja19pY29ucy5oIFwKKwkJc3JjL0lOU1RBTEwgXAorCQlzcmMvTWFrZWZpbGUgXAorCQlzcmMvYXV0by9jb25maWd1cmUgXAorCQlzcmMvY29uZmlnLmFhcC5pbiBcCisJCXNyYy9jb25maWcuaC5pbiBcCisJCXNyYy9jb25maWcubWsuZGlzdCBcCisJCXNyYy9jb25maWcubWsuaW4gXAorCQlzcmMvY29uZmlndXJlIFwKKwkJc3JjL2NvbmZpZ3VyZS5pbiBcCisJCXNyYy9ndWlfYXRfZnMuYyBcCisJCXNyYy9ndWlfYXRfc2IuYyBcCisJCXNyYy9ndWlfYXRfc2IuaCBcCisJCXNyYy9ndWlfYXRoZW5hLmMgXAorCQlzcmMvZ3VpX2d0ay5jIFwKKwkJc3JjL2d1aV9ndGtfZi5jIFwKKwkJc3JjL2d1aV9ndGtfZi5oIFwKKwkJc3JjL2d1aV9ndGtfeDExLmMgXAorCQlzcmMvZ3VpX21vdGlmLmMgXAorCQlzcmMvZ3VpX3gxMS5jIFwKKwkJc3JjL2hhbmd1bGluLmMgXAorCQlzcmMvaWZfeGNtZHNydi5jIFwKKwkJc3JjL2ludGVncmF0aW9uLmMgXAorCQlzcmMvaW50ZWdyYXRpb24uaCBcCisJCXNyYy9saW5rLnNoIFwKKwkJc3JjL21raW5zdGFsbGRpcnMgXAorCQlzcmMvb3NfdW5peC5jIFwKKwkJc3JjL29zX3VuaXguaCBcCisJCXNyYy9vc191bml4eC5oIFwKKwkJc3JjL29zZGVmLnNoIFwKKwkJc3JjL29zZGVmMS5oLmluIFwKKwkJc3JjL29zZGVmMi5oLmluIFwKKwkJc3JjL3BhdGhkZWYuc2ggXAorCQlzcmMvcHJvdG8vZ3VpX2F0aGVuYS5wcm8gXAorCQlzcmMvcHJvdG8vZ3VpX2d0ay5wcm8gXAorCQlzcmMvcHJvdG8vZ3VpX2d0a194MTEucHJvIFwKKwkJc3JjL3Byb3RvL2d1aV9tb3RpZi5wcm8gXAorCQlzcmMvcHJvdG8vZ3VpX3gxMS5wcm8gXAorCQlzcmMvcHJvdG8vaGFuZ3VsaW4ucHJvIFwKKwkJc3JjL3Byb3RvL2lmX3hjbWRzcnYucHJvIFwKKwkJc3JjL3Byb3RvL29zX3VuaXgucHJvIFwKKwkJc3JjL3Byb3RvL3B0eS5wcm8gXAorCQlzcmMvcHJvdG8vd29ya3Nob3AucHJvIFwKKwkJc3JjL3B0eS5jIFwKKwkJc3JjL3Rlc3RkaXIvTWFrZWZpbGUgXAorCQlzcmMvdGVzdGRpci91bml4LnZpbSBcCisJCXNyYy90b29sY2hlY2sgXAorCQlzcmMvdmltX2ljb24ueGJtIFwKKwkJc3JjL3ZpbV9tYXNrLnhibSBcCisJCXNyYy92aW10dXRvciBcCisJCXNyYy93aGljaC5zaCBcCisJCXNyYy93b3Jrc2hvcC5jIFwKKwkJc3JjL3dvcmtzaG9wLmggXAorCQlzcmMvd3NkZWJ1Zy5jIFwKKwkJc3JjL3dzZGVidWcuaCBcCisJCXNyYy94eGQvTWFrZWZpbGUgXAorCisjIHNvdXJjZSBmaWxlcyBmb3IgYm90aCBET1MgYW5kIFVuaXgKK1NSQ19ET1NfVU5JWCA9CVwKKwkJc3JjL2lmX2NzY29wZS5jIFwKKwkJc3JjL2lmX2NzY29wZS5oIFwKKwkJc3JjL2lmX3BlcmwueHMgXAorCQlzcmMvaWZfcGVybHNmaW8uYyBcCisJCXNyYy9pZl9weXRob24uYyBcCisJCXNyYy9pZl9ydWJ5LmMgXAorCQlzcmMvaWZfdGNsLmMgXAorCQlzcmMvcHJvdG8vaWZfY3Njb3BlLnBybyBcCisJCXNyYy9wcm90by9pZl9wZXJsLnBybyBcCisJCXNyYy9wcm90by9pZl9wZXJsc2Zpby5wcm8gXAorCQlzcmMvcHJvdG8vaWZfcHl0aG9uLnBybyBcCisJCXNyYy9wcm90by9pZl9ydWJ5LnBybyBcCisJCXNyYy9wcm90by9pZl90Y2wucHJvIFwKKwkJc3JjL3R5cGVtYXAgXAorCisjIHNvdXJjZSBmaWxlcyBmb3IgRE9TIChhbHNvIGluIHRoZSBleHRyYSBhcmNoaXZlKQorU1JDX0RPUyA9CVwKKwkJc3JjL0d2aW1FeHQgXAorCQlSRUFETUVfc3JjZG9zLnR4dCBcCisJCXNyYy9JTlNUQUxMcGMudHh0IFwKKwkJc3JjL01ha2VfYmMzLm1hayBcCisJCXNyYy9NYWtlX2JjNS5tYWsgXAorCQlzcmMvTWFrZV9jeWcubWFrIFwKKwkJc3JjL01ha2VfZGpnLm1hayBcCisJCXNyYy9NYWtlX2l2Yy5tYWsgXAorCQlzcmMvTWFrZV9kdmMubWFrIFwKKwkJc3JjL01ha2VfbWluZy5tYWsgXAorCQlzcmMvTWFrZV9tdmMubWFrIFwKKwkJc3JjL01ha2VfdzE2Lm1hayBcCisJCXNyYy9iaWd2aW0uYmF0IFwKKwkJc3JjL2RpbW0uaWRsIFwKKwkJc3JjL2RsbGRhdGEuYyBcCisJCXNyYy9kb3NpbnN0LmMgXAorCQlzcmMvZG9zaW5zdC5oIFwKKwkJc3JjL2dsYmxfaW1lLmNwcCBcCisJCXNyYy9nbGJsX2ltZS5oIFwKKwkJc3JjL2d1aV93MTYuYyBcCisJCXNyYy9ndWlfdzMyLmMgXAorCQlzcmMvZ3VpX3c0OC5jIFwKKwkJc3JjL2d1aXcxNnJjLmggXAorCQlzcmMvZ3VpX3czMl9yYy5oIFwKKwkJc3JjL2lmX29sZS5jcHAgXAorCQlzcmMvaWZfb2xlLmggXAorCQlzcmMvaWZfb2xlLmlkbCBcCisJCXNyYy9paWRfb2xlLmMgXAorCQlzcmMvb3NfZG9zLmggXAorCQlzcmMvb3NfbXNkb3MuYyBcCisJCXNyYy9vc19tc2Rvcy5oIFwKKwkJc3JjL29zX3czMmRsbC5jIFwKKwkJc3JjL29zX3czMmV4ZS5jIFwKKwkJc3JjL29zX3dpbjE2LmMgXAorCQlzcmMvb3Nfd2luMzIuYyBcCisJCXNyYy9vc19tc3dpbi5jIFwKKwkJc3JjL29zX3dpbjE2LmggXAorCQlzcmMvb3Nfd2luMzIuaCBcCisJCXNyYy9wcm90by9ndWlfdzE2LnBybyBcCisJCXNyYy9wcm90by9ndWlfdzMyLnBybyBcCisJCXNyYy9wcm90by9pZl9vbGUucHJvIFwKKwkJc3JjL3Byb3RvL29zX21zZG9zLnBybyBcCisJCXNyYy9wcm90by9vc193aW4xNi5wcm8gXAorCQlzcmMvcHJvdG8vb3Nfd2luMzIucHJvIFwKKwkJc3JjL3Byb3RvL29zX21zd2luLnBybyBcCisJCXNyYy90ZXN0ZGlyL01ha2VfZG9zLm1hayBcCisJCXNyYy90ZXN0ZGlyL2Rvcy52aW0gXAorCQlzcmMvdW5pbnN0YWwuYyBcCisJCXNyYy92aW0uZGVmIFwKKwkJc3JjL3ZpbS5yYyBcCisJCXNyYy9ndmltLmV4ZS5tbmYgXAorCQlzcmMvdmltMTYuZGVmIFwKKwkJc3JjL3ZpbTE2LnJjIFwKKwkJc3JjL3ZpbXJ1bi5jIFwKKwkJc3JjL3ZpbXRiYXIuaCBcCisJCXNyYy94cG1fdzMyLmMgXAorCQlzcmMveHBtX3czMi5oIFwKKwkJc3JjL3h4ZC9NYWtlX2JjMy5tYWsgXAorCQlzcmMveHhkL01ha2VfYmM1Lm1hayBcCisJCXNyYy94eGQvTWFrZV9jeWcubWFrIFwKKwkJc3JjL3h4ZC9NYWtlX2RqZy5tYWsgXAorCQlzcmMveHhkL01ha2VfbXZjLm1hayBcCisJCW5zaXMvZ3ZpbS5uc2kgXAorCQluc2lzL1JFQURNRS50eHQgXAorCQl1bmluc3RhbC50eHQgXAorCQlzcmMvVmlzVmltL0NvbW1hbmRzLmNwcCBcCisJCXNyYy9WaXNWaW0vQ29tbWFuZHMuaCBcCisJCXNyYy9WaXNWaW0vRFNBZGRJbi5jcHAgXAorCQlzcmMvVmlzVmltL0RTQWRkSW4uaCBcCisJCXNyYy9WaXNWaW0vT2xlQXV0LmNwcCBcCisJCXNyYy9WaXNWaW0vT2xlQXV0LmggXAorCQlzcmMvVmlzVmltL1JFQURNRV9WaXNWaW0udHh0IFwKKwkJc3JjL1Zpc1ZpbS9SZWcuY3BwIFwKKwkJc3JjL1Zpc1ZpbS9SZWdpc3Rlci5iYXQgXAorCQlzcmMvVmlzVmltL1Jlc291cmNlLmggXAorCQlzcmMvVmlzVmltL1N0ZEFmeC5jcHAgXAorCQlzcmMvVmlzVmltL1N0ZEFmeC5oIFwKKwkJc3JjL1Zpc1ZpbS9VblJlZ2lzdC5iYXQgXAorCQlzcmMvVmlzVmltL1Zpc1ZpbS5jcHAgXAorCQlzcmMvVmlzVmltL1Zpc1ZpbS5kZWYgXAorCQlzcmMvVmlzVmltL1Zpc1ZpbS5tYWsgXAorCQlzcmMvVmlzVmltL1Zpc1ZpbS5oIFwKKwkJc3JjL1Zpc1ZpbS9WaXNWaW0ub2RsIFwKKwkJc3JjL1Zpc1ZpbS9WaXNWaW0ucmMgXAorCQlzcmMvVmlzVmltL1ZzUmVhZE1lLnR4dCBcCisKKyMgc291cmNlIGZpbGVzIGZvciBET1Mgd2l0aG91dCBDUi9MRiB0cmFuc2xhdGlvbiAoYWxzbyBpbiB0aGUgZXh0cmEgYXJjaGl2ZSkKK1NSQ19ET1NfQklOID0JXAorCQlzcmMvVmlzVmltL1JlcyBcCisJCXNyYy90ZWFyb2ZmLmJtcCBcCisJCXNyYy90b29scy5ibXAgXAorCQlzcmMvdG9vbHMxNi5ibXAgXAorCQlzcmMvdmltKi5pY28gXAorCQlzcmMvdmltLnRsYiBcCisJCXNyYy92aW10YmFyLmxpYiBcCisJCXNyYy92aW10YmFyLmRsbCBcCisJCW5zaXMvaWNvbnMgXAorCisjIHNvdXJjZSBmaWxlcyBmb3IgQW1pZ2EsIERPUywgZXRjLiAoYWxzbyBpbiB0aGUgZXh0cmEgYXJjaGl2ZSkKK1NSQ19BTUlfRE9TID0JXAorCisjIHNvdXJjZSBmaWxlcyBmb3IgQW1pZ2EgKGFsc28gaW4gdGhlIGV4dHJhIGFyY2hpdmUpCitTUkNfQU1JID0JXAorCQlSRUFETUVfYW1pc3JjLnR4dCBcCisJCVJFQURNRV9hbWlzcmMudHh0LmluZm8gXAorCQlzcmMuaW5mbyBcCisJCXNyYy9JTlNUQUxMYW1pLnR4dCBcCisJCXNyYy9NYWtlX2FndWkubWFrIFwKKwkJc3JjL01ha2VfYXJvcy5tYWsgXAorCQlzcmMvTWFrZV9kaWNlLm1hayBcCisJCXNyYy9NYWtlX21hbngubWFrIFwKKwkJc3JjL01ha2VfbW9ycGgubWFrIFwKKwkJc3JjL01ha2Vfc2FzLm1hayBcCisJCXNyYy9ndWlfYW1pZ2EuYyBcCisJCXNyYy9ndWlfYW1pZ2EuaCBcCisJCXNyYy9vc19hbWlnYS5jIFwKKwkJc3JjL29zX2FtaWdhLmggXAorCQlzcmMvcHJvdG8vZ3VpX2FtaWdhLnBybyBcCisJCXNyYy9wcm90by9vc19hbWlnYS5wcm8gXAorCQlzcmMvdGVzdGRpci9NYWtlX2FtaWdhLm1hayBcCisJCXNyYy90ZXN0ZGlyL2FtaWdhLnZpbSBcCisJCXNyYy94eGQvTWFrZV9hbWlnYS5tYWsgXAorCisjIHNvdXJjZSBmaWxlcyBmb3IgdGhlIE1hYyAoYWxzbyBpbiB0aGUgZXh0cmEgYXJjaGl2ZSkKK1NSQ19NQUMgPQlcCisJCXNyYy9JTlNUQUxMbWFjLnR4dCBcCisJCXNyYy9NYWtlX21wdy5tYWsgXAorCQlzcmMvZGVocXgucHkgXAorCQlzcmMvZ3VpX21hYy5jIFwKKwkJc3JjL2d1aV9tYWMuaWNucyBcCisJCXNyYy9ndWlfbWFjLnIgXAorCQlzcmMvb3NfbWFjKiBcCisJCXNyYy9wcm90by9ndWlfbWFjLnBybyBcCisJCXNyYy9wcm90by9vc19tYWMucHJvIFwKKworIyBzb3VyY2UgZmlsZXMgZm9yIFZNUyAoaW4gdGhlIGV4dHJhIGFyY2hpdmUpCitTUkNfVk1TID0JXAorCQlzcmMvSU5TVEFMTHZtcy50eHQgXAorCQlzcmMvTWFrZV92bXMubW1zIFwKKwkJc3JjL2d1aV9ndGtfdm1zLmggXAorCQlzcmMvb3Nfdm1zLmMgXAorCQlzcmMvb3Nfdm1zX2NvbmYuaCBcCisJCXNyYy9vc192bXNfbW1zLmMgXAorCQlzcmMvcHJvdG8vb3Nfdm1zLnBybyBcCisJCXNyYy90ZXN0ZGlyL01ha2Vfdm1zLm1tcyBcCisJCXNyYy90ZXN0ZGlyL3Ztcy52aW0gXAorCQlzcmMveHhkL01ha2Vfdm1zLm1tcyBcCisJCXZpbXR1dG9yLmNvbSBcCisKKyMgc291cmNlIGZpbGVzIGZvciBPUy8yIChpbiB0aGUgZXh0cmEgYXJjaGl2ZSkKK1NSQ19PUzIgPQlcCisJCXNyYy9NYWtlX29zMi5tYWsgXAorCQlzcmMvb3Nfb3MyX2NmZy5oIFwKKwkJc3JjL3Rlc3RkaXIvTWFrZV9vczIubWFrIFwKKwkJc3JjL3Rlc3RkaXIvdG9kb3MudmltIFwKKwkJc3JjL3Rlc3RkaXIvb3MyLnZpbSBcCisJCXNyYy94eGQvTWFrZV9vczIubWFrIFwKKworIyBzb3VyY2UgZmlsZXMgZm9yIFFOWCAoaW4gdGhlIGV4dHJhIGFyY2hpdmUpCitTUkNfUU5YID0JXAorCQlzcmMvb3NfcW54LmMgXAorCQlzcmMvb3NfcW54LmggXAorCQlzcmMvZ3VpX3Bob3Rvbi5jIFwKKwkJc3JjL3Byb3RvL2d1aV9waG90b24ucHJvIFwKKwkJc3JjL3Byb3RvL29zX3FueC5wcm8gXAorCisKKyMgc291cmNlIGZpbGVzIGZvciB0aGUgZXh0cmEgYXJjaGl2ZSAoYWxsIHNvdXJjZXMgdGhhdCBhcmUgbm90IGZvciBVbml4KQorU1JDX0VYVFJBID0JXAorCQkkKFNSQ19BTUkpIFwKKwkJJChTUkNfQU1JX0RPUykgXAorCQkkKFNSQ19ET1MpIFwKKwkJJChTUkNfRE9TX0JJTikgXAorCQkkKFNSQ19NQUMpIFwKKwkJJChTUkNfT1MyKSBcCisJCSQoU1JDX1FOWCkgXAorCQkkKFNSQ19WTVMpIFwKKwkJUkVBRE1FX29zMzkwLnR4dCBcCisJCXNyYy9NYWtlX21pbnQubWFrIFwKKwkJc3JjL01ha2Vfcm8ubWFrIFwKKwkJc3JjL2d1aV9iZW9zLmNjIFwKKwkJc3JjL2d1aV9iZW9zLmggXAorCQlzcmMvZ3VpX3Jpc2Nvcy5jIFwKKwkJc3JjL2d1aV9yaXNjb3MuaCBcCisJCXNyYy9pZl9zbmlmZi5jIFwKKwkJc3JjL2lmX3NuaWZmLmggXAorCQlzcmMvaW5mcGxpc3QueG1sIFwKKwkJc3JjL2xpbmsuMzkwIFwKKwkJc3JjL29zX2Jlb3MuYyBcCisJCXNyYy9vc19iZW9zLmggXAorCQlzcmMvb3NfYmVvcy5yc3JjIFwKKwkJc3JjL29zX21pbnQuaCBcCisJCXNyYy9vc19yaXNjb3MuYyBcCisJCXNyYy9vc19yaXNjb3MuaCBcCisJCXNyYy9wcm90by9ndWlfYmVvcy5wcm8gXAorCQlzcmMvcHJvdG8vZ3VpX3Jpc2Nvcy5wcm8gXAorCQlzcmMvcHJvdG8vb3NfYmVvcy5wcm8gXAorCQlzcmMvcHJvdG8vb3NfcmlzY29zLnBybyBcCisJCXNyYy9vc192bXNfZml4LmNvbSBcCisJCXNyYy90b29sYmFyLnBoaSBcCisKKyMgcnVudGltZSBmaWxlcyBmb3IgYWxsIGRpc3RyaWJ1dGlvbnMKK1JUX0FMTCA9CVwKKwkJUkVBRE1FLnR4dCBcCisJCXJ1bnRpbWUvYnVncmVwb3J0LnZpbSBcCisJCXJ1bnRpbWUvZG9jLyouYXdrIFwKKwkJcnVudGltZS9kb2MvKi5wbCBcCisJCXJ1bnRpbWUvZG9jLyoudHh0IFwKKwkJcnVudGltZS9kb2MvTWFrZWZpbGUgXAorCQlydW50aW1lL2RvYy9kb2N0YWdzLmMgXAorCQlydW50aW1lL2RvYy92aW0uMSBcCisJCXJ1bnRpbWUvZG9jL2V2aW0uMSBcCisJCXJ1bnRpbWUvZG9jL3ZpbWRpZmYuMSBcCisJCXJ1bnRpbWUvZG9jL3ZpbXR1dG9yLjEgXAorCQlydW50aW1lL2RvYy94eGQuMSBcCisJCXJ1bnRpbWUvZnRvZmYudmltIFwKKwkJcnVudGltZS9ndmltcmNfZXhhbXBsZS52aW0gXAorCQlydW50aW1lL21hY3Jvcy9SRUFETUUudHh0IFwKKwkJcnVudGltZS9tYWNyb3MvZHZvcmFrIFwKKwkJcnVudGltZS9tYWNyb3MvaGFub2kvY2xpY2subWUgXAorCQlydW50aW1lL21hY3Jvcy9oYW5vaS9oYW5vaS52aW0gXAorCQlydW50aW1lL21hY3Jvcy9oYW5vaS9wb3N0ZXIgXAorCQlydW50aW1lL21hY3Jvcy9qdXN0aWZ5LnZpbSBcCisJCXJ1bnRpbWUvbWFjcm9zL2xlc3Muc2ggXAorCQlydW50aW1lL21hY3Jvcy9sZXNzLnZpbSBcCisJCXJ1bnRpbWUvbWFjcm9zL2xpZmUvY2xpY2subWUgXAorCQlydW50aW1lL21hY3Jvcy9saWZlL2xpZmUudmltIFwKKwkJcnVudGltZS9tYWNyb3MvbWF0Y2hpdC52aW0gXAorCQlydW50aW1lL21hY3Jvcy9tYXRjaGl0LnR4dCBcCisJCXJ1bnRpbWUvbWFjcm9zL21hemUvUkVBRE1FLnR4dCBcCisJCXJ1bnRpbWUvbWFjcm9zL21hemUvW21NXWFrZWZpbGUgXAorCQlydW50aW1lL21hY3Jvcy9tYXplL21haW4uYWFwIFwKKwkJcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplLmMgXAorCQlydW50aW1lL21hY3Jvcy9tYXplL21hemVfNS43OCBcCisJCXJ1bnRpbWUvbWFjcm9zL21hemUvbWF6ZV9tYWMgXAorCQlydW50aW1lL21hY3Jvcy9tYXplL21hemVhbnNpLmMgXAorCQlydW50aW1lL21hY3Jvcy9tYXplL21hemVjbGVhbi5jIFwKKwkJcnVudGltZS9tYWNyb3MvbWF6ZS9wb3N0ZXIgXAorCQlydW50aW1lL21hY3Jvcy9zaGVsbG1lbnUudmltIFwKKwkJcnVudGltZS9tYWNyb3Mvc3dhcG1vdXMudmltIFwKKwkJcnVudGltZS9tYWNyb3MvdXJtL1JFQURNRS50eHQgXAorCQlydW50aW1lL21hY3Jvcy91cm0vZXhhbXBsZXMgXAorCQlydW50aW1lL21hY3Jvcy91cm0vdXJtIFwKKwkJcnVudGltZS9tYWNyb3MvdXJtL3VybS52aW0gXAorCQlydW50aW1lL21zd2luLnZpbSBcCisJCXJ1bnRpbWUvZXZpbS52aW0gXAorCQlydW50aW1lL29wdHdpbi52aW0gXAorCQlydW50aW1lL2Z0cGx1Z2luLnZpbSBcCisJCXJ1bnRpbWUvZnRwbHVnb2YudmltIFwKKwkJcnVudGltZS9pbmRlbnQudmltIFwKKwkJcnVudGltZS9pbmRvZmYudmltIFwKKwkJcnVudGltZS90ZXJtY2FwIFwKKwkJcnVudGltZS90b29scy9SRUFETUUudHh0IFwKKwkJcnVudGltZS90b29scy9bYS16XSpbYS16MC05XSBcCisJCXJ1bnRpbWUvdHV0b3IvUkVBRE1FLnR4dCBcCisJCXJ1bnRpbWUvdHV0b3IvdHV0b3IgXAorCQlydW50aW1lL3R1dG9yL3R1dG9yLnZpbSBcCisJCXJ1bnRpbWUvdmltcmNfZXhhbXBsZS52aW0gXAorCisjIHJ1bnRpbWUgZmlsZXMgZm9yIGFsbCBkaXN0cmlidXRpb25zIHdpdGhvdXQgQ1ItTkwgdHJhbnNsYXRpb24KK1JUX0FMTF9CSU4gPQlcCisJCXJ1bnRpbWUvZG9jL3RhZ3MgXAorCQlydW50aW1lL3ByaW50LyoucHMgXAorCisjIHJ1bnRpbWUgc2NyaXB0IGZpbGVzCitSVF9TQ1JJUFRTID0JXAorCQlydW50aW1lL2ZpbGV0eXBlLnZpbSBcCisJCXJ1bnRpbWUvc2NyaXB0cy52aW0gXAorCQlydW50aW1lL21lbnUudmltIFwKKwkJcnVudGltZS9kZWxtZW51LnZpbSBcCisJCXJ1bnRpbWUvc3lubWVudS52aW0gXAorCQlydW50aW1lL21ha2VtZW51LnZpbSBcCisJCXJ1bnRpbWUvY29sb3JzLyoudmltIFwKKwkJcnVudGltZS9jb2xvcnMvUkVBRE1FLnR4dCBcCisJCXJ1bnRpbWUvY29tcGlsZXIvKi52aW0gXAorCQlydW50aW1lL2NvbXBpbGVyL1JFQURNRS50eHQgXAorCQlydW50aW1lL2luZGVudC8qLnZpbSBcCisJCXJ1bnRpbWUvaW5kZW50L1JFQURNRS50eHQgXAorCQlydW50aW1lL2Z0cGx1Z2luLyoudmltIFwKKwkJcnVudGltZS9mdHBsdWdpbi9SRUFETUUudHh0IFwKKwkJcnVudGltZS9wbHVnaW4vKi52aW0gXAorCQlydW50aW1lL3BsdWdpbi9SRUFETUUudHh0IFwKKwkJcnVudGltZS9zeW50YXgvKi52aW0gXAorCQlydW50aW1lL3N5bnRheC9SRUFETUUudHh0IFwKKworIyBVbml4IHJ1bnRpbWUKK1JUX1VOSVggPQlcCisJCVJFQURNRV91bml4LnR4dCBcCisJCXJ1bnRpbWUvdmltMTZ4MTYucG5nIFwKKwkJcnVudGltZS92aW0xNngxNi54cG0gXAorCQlydW50aW1lL3ZpbTMyeDMyLnBuZyBcCisJCXJ1bnRpbWUvdmltMzJ4MzIueHBtIFwKKwkJcnVudGltZS92aW00OHg0OC5wbmcgXAorCQlydW50aW1lL3ZpbTQ4eDQ4LnhwbSBcCisKKyMgVW5peCBhbmQgRE9TIHJ1bnRpbWUgd2l0aG91dCBDUi1MRiB0cmFuc2xhdGlvbgorUlRfVU5JWF9ET1NfQklOID0JXAorCQlydW50aW1lL3ZpbTE2eDE2LmdpZiBcCisJCXJ1bnRpbWUvdmltMzJ4MzIuZ2lmIFwKKwkJcnVudGltZS92aW00OHg0OC5naWYgXAorCisjIHJ1bnRpbWUgbm90IGZvciB1bml4IG9yIGV4dHJhCitSVF9OT19VTklYID0JXAorCisjIHJ1bnRpbWUgZm9yIEFtaWdhIChhbHNvIGluIHRoZSBleHRyYSBhcmNoaXZlKQorUlRfQU1JX0RPUyA9CVwKKwkJcnVudGltZS9kb2MvdmltLm1hbiBcCisJCXJ1bnRpbWUvZG9jL3ZpbWRpZmYubWFuIFwKKwkJcnVudGltZS9kb2MvdmltdHV0b3IubWFuIFwKKwkJcnVudGltZS9kb2MveHhkLm1hbiBcCisKKyMgRE9TIHJ1bnRpbWUgKGFsc28gaW4gdGhlIGV4dHJhIGFyY2hpdmUpCitSVF9ET1MgPQlcCisJCVJFQURNRV9kb3MudHh0IFwKKwkJcnVudGltZS9yZ2IudHh0IFwKKwkJdmltdHV0b3IuYmF0IFwKKworIyBET1MgcnVudGltZSB3aXRob3V0IENSLUxGIHRyYW5zbGF0aW9uIChhbHNvIGluIHRoZSBleHRyYSBhcmNoaXZlKQorUlRfRE9TX0JJTiA9CVwKKwkJcnVudGltZS92aW1sb2dvLmNkciBcCisJCXJ1bnRpbWUvdmltbG9nby5lcHMgXAorCQlydW50aW1lL3ZpbWxvZ28uZ2lmIFwKKwkJcnVudGltZS92aW1sb2dvLnBkZiBcCisKKyMgQW1pZ2EgcnVudGltZSAoYWxzbyBpbiB0aGUgZXh0cmEgYXJjaGl2ZSkKK1JUX0FNSSA9CVwKKwkJUkVBRE1FLnR4dC5pbmZvIFwKKwkJUkVBRE1FX2FtaS50eHQgXAorCQlSRUFETUVfYW1pLnR4dC5pbmZvIFwKKwkJbGlicy9hcnAubGlicmFyeSBcCisJCXJ1bnRpbWUvZG9jLmluZm8gXAorCQlydW50aW1lL2RvYy8qLmluZm8gXAorCQlydW50aW1lL2ljb25zIFwKKwkJcnVudGltZS9pY29ucy5pbmZvIFwKKwkJcnVudGltZS9tYWNyb3MuaW5mbyBcCisJCXJ1bnRpbWUvbWFjcm9zLyouaW5mbyBcCisJCXJ1bnRpbWUvbWFjcm9zL2hhbm9pLyouaW5mbyBcCisJCXJ1bnRpbWUvbWFjcm9zL2xpZmUvKi5pbmZvIFwKKwkJcnVudGltZS9tYWNyb3MvbWF6ZS8qLmluZm8gXAorCQlydW50aW1lL21hY3Jvcy91cm0vKi5pbmZvIFwKKwkJcnVudGltZS90b29scy5pbmZvIFwKKwkJcnVudGltZS90dXRvci5pbmZvIFwKKwkJcnVudGltZS90dXRvci8qLmluZm8gXAorCisjIHJ1bnRpbWUgZmlsZXMgaW4gZXh0cmEgYXJjaGl2ZQorUlRfRVhUUkEgPQlcCisJCSQoUlRfQU1JKSBcCisJCSQoUlRfQU1JX0RPUykgXAorCQkkKFJUX0RPUykgXAorCQkkKFJUX0RPU19CSU4pIFwKKwkJUkVBRE1FX21hYy50eHQgXAorCisjIGluY2x1ZGVkIGluIGFsbCBBbWlnYSBhcmNoaXZlcworUk9PVF9BTUkgPQlcCisJCUNvbnRlbnRzIFwKKwkJQ29udGVudHMuaW5mbyBcCisJCXJ1bnRpbWUuaW5mbyBcCisJCXZpbWRpci5pbmZvIFwKKworIyByb290IGZpbGVzIGZvciB0aGUgZXh0cmEgYXJjaGl2ZQorUk9PVF9FWFRSQSA9CVwKKwkJJChST09UX0FNSSkgXAorCisjIGZpbGVzIGZvciBBbWlnYSBzbWFsbCBiaW5hcnkgKGFsc28gaW4gZXh0cmEgYXJjaGl2ZSkKK0JJTl9BTUkgPQlcCisJCVJFQURNRV9hbWliaW4udHh0IFwKKwkJUkVBRE1FX2FtaWJpbi50eHQuaW5mbyBcCisJCVZpbS5pbmZvIFwKKwkJWHhkLmluZm8gXAorCisjIGZpbGVzIGZvciBET1MgYmluYXJ5IChhbHNvIGluIGV4dHJhIGFyY2hpdmUpCitCSU5fRE9TID0JXAorCQlSRUFETUVfYmluZG9zLnR4dCBcCisJCXVuaW5zdGFsLnR4dCBcCisKKyMgZmlsZXMgZm9yIFdpbjMyIE9MRSBiaW5hcnkgKGFsc28gaW4gZXh0cmEgYXJjaGl2ZSkKK0JJTl9PTEUgPQlcCisJCVJFQURNRV9vbGUudHh0IFwKKworIyBmaWxlcyBmb3IgV2luMzJzIGJpbmFyeSAoYWxzbyBpbiBleHRyYSBhcmNoaXZlKQorQklOX1czMlMgPQlcCisJCVJFQURNRV93MzJzLnR4dCBcCisKKyMgZmlsZXMgZm9yIFZNUyBiaW5hcnkgKGFsc28gaW4gZXh0cmEgYXJjaGl2ZSkKK0JJTl9WTVMgPQlcCisJCVJFQURNRV92bXMudHh0IFwKKworIyBmaWxlcyBmb3IgT1MvMiBiaW5hcnkgKGFsc28gaW4gZXh0cmEgYXJjaGl2ZSkKK0JJTl9PUzIgPQlcCisJCVJFQURNRV9vczIudHh0IFwKKworIyBiaW5hcnkgZmlsZXMgZm9yIGV4dHJhIGFyY2hpdmUKK0JJTl9FWFRSQSA9CVwKKwkJJChCSU5fQU1JKSBcCisJCSQoQklOX0RPUykgXAorCQkkKEJJTl9PTEUpIFwKKwkJJChCSU5fVzMyUykgXAorCQkkKEJJTl9WTVMpIFwKKwkJJChCSU5fT1MyKSBcCisKKyMgYWxsIGZpbGVzIGZvciBleHRyYSBhcmNoaXZlCitFWFRSQSA9CQlcCisJCSQoQklOX0VYVFJBKSBcCisJCSQoUk9PVF9FWFRSQSkgXAorCQkkKFJUX0VYVFJBKSBcCisJCSQoU1JDX0VYVFJBKSBcCisJCVJFQURNRV9leHRyYS50eHQgXAorCQlzcmMvVmlzVmltL1Zpc1ZpbS5kbGwgXAorCQlmYXJzaSBcCisJCXJ1bnRpbWUvdmltbG9nby54cG0gXAorCQlzcmMvc3dpcy5zIFwKKwkJc3JjL3RlZS9NYWtlZmlsZSogXAorCQlzcmMvdGVlL3RlZS5jIFwKKwkJY3NkcG1pNGIuemlwIFwKKwkJZW14LmRsbCBcCisJCWVteGxpYmNzLmRsbCBcCisKKyMgZ2VuZXJpYyBsYW5ndWFnZSBmaWxlcworTEFOR19HRU4gPSBcCisJCVJFQURNRV9sYW5nLnR4dCBcCisJCXJ1bnRpbWUvbGFuZy9SRUFETUUudHh0IFwKKwkJcnVudGltZS9sYW5nL21lbnVfKi52aW0gXAorCQlydW50aW1lL2tleW1hcC9SRUFETUUudHh0IFwKKwkJcnVudGltZS9rZXltYXAvKi52aW0gXAorCQlydW50aW1lL3R1dG9yL1JFQURNRS4qLnR4dCBcCisJCXJ1bnRpbWUvdHV0b3IvTWFrZWZpbGUgXAorCQlydW50aW1lL3R1dG9yL3R1dG9yLj8/IFwKKwkJcnVudGltZS90dXRvci90dXRvci5nci4qIFwKKwkJcnVudGltZS90dXRvci90dXRvci5qYS4qIFwKKwkJcnVudGltZS90dXRvci90dXRvci5rby4qIFwKKwkJcnVudGltZS90dXRvci90dXRvci5wbC4qIFwKKwkJcnVudGltZS90dXRvci90dXRvci5ydS4qIFwKKwkJcnVudGltZS90dXRvci90dXRvci56aC4qIFwKKworIyBhbGwgZmlsZXMgZm9yIGxhbmcgYXJjaGl2ZQorTEFOR19TUkMgPSBcCisJCXNyYy9wby9SRUFETUUudHh0IFwKKwkJc3JjL3BvL1JFQURNRV9taW5ndy50eHQgXAorCQlzcmMvcG8vUkVBRE1FX212Yy50eHQgXAorCQlzcmMvcG8vY2xlYW51cC52aW0gXAorCQlzcmMvcG8vTWFrZWZpbGUgXAorCQlzcmMvcG8vTWFrZV9taW5nLm1hayBcCisJCXNyYy9wby9NYWtlX212Yy5tYWsgXAorCQlzcmMvcG8vc2ppc2NvcnIuYyBcCisJCXNyYy9wby8qLnBvIFwKKworIyB0aGUgbGFuZ3VhZ2UgZmlsZXMgZm9yIHRoZSBXaW4zMiBsYW5nIGFyY2hpdmUKK0xBTkdfRE9TID0gXAorCQlzcmMvcG8vKi5tbyBcCisKKyMgdmltOiBzZXQgZnQ9bWFrZToKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczNGNkOQotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsNjI5IEBACisjIFRoaXMgTWFrZWZpbGUgaGFzIHR3byBwdXJwb3NlczoKKyMgMS4gU3RhcnRpbmcgdGhlIGNvbXBpbGF0aW9uIG9mIFZpbSBmb3IgVW5peC4KKyMgMi4gQ3JlYXRpbmcgdGhlIHZhcmlvdXMgZGlzdHJpYnV0aW9uIGZpbGVzLgorCisKKyMgMS4gVXNpbmcgdGhpcyBNYWtlZmlsZSB3aXRob3V0IGFuIGFyZ3VtZW50IHdpbGwgY29tcGlsZSBWaW0gZm9yIFVuaXguCisjCisjICJtYWtlIGluc3RhbGwiIGlzIGFsc28gcG9zc2libGUuCisjCisjIE5PVEU6IElmIHRoaXMgZG9lc24ndCB3b3JrIHByb3Blcmx5LCBmaXJzdCBjaGFuZ2UgZGlyZWN0b3J5IHRvICJzcmMiIGFuZCB1c2UKKyMgdGhlIE1ha2VmaWxlIHRoZXJlOgorIwljZCBzcmMKKyMJbWFrZSBbYXJndW1lbnRzXQorIyBOb3RpY2VkIG9uIEFJWCBzeXN0ZW1zIHdoZW4gdXNpbmcgdGhpcyBNYWtlZmlsZTogVHJ5aW5nIHRvIHJ1biAiY3Byb3RvIiBvcgorIyBzb21ldGhpbmcgZWxzZSBhZnRlciBWaW0gaGFzIGJlZW4gY29tcGlsZWQuICBEb24ndCBrbm93IHdoeS4uLgorIyBOb3RpY2VkIG9uIE9TLzM5MCBVbml4OiBSZXN0YXJ0cyBjb25maWd1cmUuCisjCisjIFRoZSBmaXJzdCAoZGVmYXVsdCkgdGFyZ2V0IGlzICJmaXJzdCIuICBUaGlzIHdpbGwgcmVzdWx0IGluIHJ1bm5pbmcKKyMgIm1ha2UgZmlyc3QiLCBzbyB0aGF0IHRoZSB0YXJnZXQgZnJvbSAic3JjL2F1dG8vY29uZmlnLm1rIiBpcyBwaWNrZWQKKyMgdXAgcHJvcGVybHkgd2hlbiBjb25maWcgZGlkbid0IHJ1biB5ZXQuICBEb2luZyAibWFrZSBhbGwiIGJlZm9yZSBjb25maWd1cmUKKyMgaGFzIHJ1biBjYW4gcmVzdWx0IGluIGNvbXBpbGluZyB3aXRoICQoQ0MpIGVtcHR5LgorCitmaXJzdDoKKwlAZWNobyAiU3RhcnRpbmcgbWFrZSBpbiB0aGUgc3JjIGRpcmVjdG9yeS4iCisJQGVjaG8gIklmIHRoZXJlIGFyZSBwcm9ibGVtcywgY2QgdG8gdGhlIHNyYyBkaXJlY3RvcnkgYW5kIHJ1biBtYWtlIHRoZXJlIgorCWNkIHNyYyAmJiAkKE1BS0UpICRACisKKyMgU29tZSBtYWtlIHByb2dyYW1zIHVzZSB0aGUgbGFzdCB0YXJnZXQgZm9yIHRoZSAkQCBkZWZhdWx0OyBwdXQgdGhlIG90aGVyCisjIHRhcmdldHMgc2VwYXJhdGVseSB0byBhbHdheXMgbGV0ICRAIGV4cGFuZCB0byAiZmlyc3QiIGJ5IGRlZmF1bHQuCithbGwgaW5zdGFsbCB1bmluc3RhbGwgdG9vbHMgY29uZmlnIGNvbmZpZ3VyZSBwcm90byBkZXBlbmQgbGludCB0YWdzIHR5cGVzIHRlc3QgdGVzdGNsZWFuIGNsZWFuIGRpc3RjbGVhbjoKKwlAZWNobyAiU3RhcnRpbmcgbWFrZSBpbiB0aGUgc3JjIGRpcmVjdG9yeS4iCisJQGVjaG8gIklmIHRoZXJlIGFyZSBwcm9ibGVtcywgY2QgdG8gdGhlIHNyYyBkaXJlY3RvcnkgYW5kIHJ1biBtYWtlIHRoZXJlIgorCWNkIHNyYyAmJiAkKE1BS0UpICRACisKKworIyAyLiBDcmVhdGUgdGhlIHZhcmlvdXMgZGlzdHJpYnV0aW9uczoKKyMKKyMgVEFSR0VUCVBST0RVQ0VTCQlDT05UQUlOUworIyB1bml4YWxsCXZpbS0jLiMudGFyLmJ6MgkJUnVudGltZSBmaWxlcyBhbmQgU291cmNlcyBmb3IgVW5peAorIyAgICB1bml4cnQJdmltLSMuIy1ydFsxMl0udGFyLmd6CVJ1bnRpbWUgZmlsZXMgZm9yIFVuaXgKKyMgICAgdW5peHNyYwl2aW0tIy4jLXNyY1sxMl0udGFyLmd6CVNvdXJjZXMgZm9yIFVuaXgKKyMKKyMgZXh0cmEJCXZpbS0jLiMtZXh0cmEudGFyLmd6CUV4dHJhIHNvdXJjZSBhbmQgcnVudGltZSBmaWxlcworIyBsYW5nCQl2aW0tIy4jLWxhbmcudGFyLmd6CW11bHRpLWxhbmd1YWdlIGZpbGVzCisjCisjIGh0bWwJCXZpbSMjaHRtbC56aXAJCUhUTUwgZG9jcworIworIyBhbWlzcmMJdmltIyNzcmMudGd6CQlzb3VyY2VzIGZvciBBbWlnYQorIyBhbWlydAkJdmltIyNydC50Z3oJCXJ1bnRpbWUgZm9yIEFtaWdhCisjIGFtaWJpbgl2aW0jI2Jpbi50Z3oJCWJpbmFyeSBmb3IgQW1pZ2EKKyMKKyMgZG9zc3JjCXZpbSMjc3JjLnppcAkJc291cmNlcyBmb3IgTVMtRE9TCisjIGRvc3J0CQl2aW0jI3J0LnppcAkJcnVudGltZSBmb3IgTVMtRE9TCisjIGRvc2Jpbgl2aW0jI2QxNi56aXAJCWJpbmFyeSBmb3IgTVMtRE9TIDE2IGJpdHMKKyMJCXZpbSMjZDMyLnppcAkJYmluYXJ5IGZvciBNUy1ET1MgMzIgYml0cworIwkJdmltIyN3MzIuemlwCQliaW5hcnkgZm9yIFdpbjMyCisjCQlndmltIyMuemlwCQliaW5hcnkgZm9yIEdVSSBXaW4zMgorIwkJZ3ZpbSMjb2xlLnppcAkJT0xFIGV4ZSBmb3IgV2luMzIgR1VJCisjCQlndmltIyNfcy56aXAJCWV4ZSBmb3IgV2luMzJzIEdVSQorIyBkb3NsYW5nCXZpbSMjbGFuZy56aXAJCWxhbmd1YWdlIGZpbGVzIGZvciBXaW4zMgorIworIyBvczJiaW4JdmltIyNvczIuemlwCQliaW5hcnkgZm9yIE9TLzIKKyMJCQkJCSh1c2UgUlQgZnJvbSBkb3NydCkKKyMKKyMgZmFyc2kJCWZhcnNpIyMuemlwCQlGYXJzaSBmb250cworIworIyAgICBBbGwgb3V0cHV0IGZpbGVzIGFyZSBjcmVhdGVkIGluIHRoZSAiZGlzdCIgZGlyZWN0b3J5LiAgRXhpc3RpbmcgZmlsZXMgYXJlCisjICAgIG92ZXJ3cml0dGVuIQorIyAgICBUbyBkbyBhbGwgdGhpcyB5b3UgbmVlZCB0aGUgdW5peHJ0LCB1bml4c3JjLCBleHRyYSBhbmQgbGFuZyBhcmNoaXZlcywgYW5kCisjICAgIGNvbXBpbGVkIGJpbmFyaWVzLgorIyAgICBCZWZvcmUgY3JlYXRpbmcgYW4gYXJjaGl2ZSBmaXJzdCBkZWxldGUgYWxsIGJhY2t1cCBmaWxlcywgKi5vcmlnLCBldGMuCisKK01BSk9SID0gNgorTUlOT1IgPSAzCisKKyMgVW5jb21tZW50IHRoaXMgbGluZSBpZiB0aGUgV2luMzJzIHZlcnNpb24gaXMgdG8gYmUgaW5jbHVkZWQuCisjRE9TQklOX1MgPSAgZG9zYmluX3MKKworIyBDSEVDS0xJU1QgZm9yIGNyZWF0aW5nIGEgbmV3IHZlcnNpb246CisjCisjIC0gVXBkYXRlIFZpbSB2ZXJzaW9uIG51bWJlci4gIEZvciBhIHRlc3QgdmVyc2lvbiBpbjogc3JjL3ZlcnNpb24uaCwgQ29udGVudHMsCisjICAgTUFKT1IvTUlOT1IgYWJvdmUsIFZJTVJURElSIGFuZCBWRVJTSU9OIGluIHNyYy9NYWtlZmlsZSwgUkVBRE1FKi50eHQsCisjICAgcnVudGltZS9kb2MvKi50eHQgYW5kIG5zaXMvZ3ZpbS5uc2kuICBGb3IgYSBtaW5vci9tYWpvciB2ZXJzaW9uOgorIyAgIHNyYy9HdmltRXh0L0d2aW1FeHQucmVnLCBzcmMvdmltMTYuZGVmLgorIyAtIENvcnJlY3QgaW5jbHVkZWRfcGF0Y2hlc1tdIGluIHNyYy92ZXJzaW9uLmMuCisjIC0gQ29tcGlsZSBWaW0gd2l0aCBHVEssIFBlcmwsIFB5dGhvbiwgVENMLCBSdWJ5LCBDc2NvcGUgYW5kICJodWdlIiBmZWF0dXJlcy4KKyMgLSBXaXRoIHRoZXNlIGZlYXR1cmVzOiAibWFrZSBwcm90byIgKHJlcXVpcmVzIGNwcm90byBhbmQgTW90aWYgaW5zdGFsbGVkOworIyAgIGlnbm9yZSB3YXJuaW5ncyBmb3IgbWlzc2luZyBpbmNsdWRlIGZpbGVzLCBmaXggcHJvYmxlbXMgZm9yIHN5bnRheCBlcnJvcnMpLgorIyAtIFdpdGggdGhlc2UgZmVhdHVyZXM6ICJtYWtlIGRlcGVuZCIgKHdvcmtzIGJlc3Qgd2l0aCBnY2MpLgorIyAtICJtYWtlIGxpbnQiIGFuZCBjaGVjayB0aGUgb3V0cHV0IChpZ25vcmUgR1RLIHdhcm5pbmdzKS4KKyMgLSBFbmFibGUgdGhlIGVmZW5jZSBsaWJyYXJ5IGluICJzcmMvTWFrZWZpbGUiIGFuZCBydW4gIm1ha2UgdGVzdCIuICBNYXkKKyMgICByZXF1aXJlIGRpc2FibGluZyBQeXRob24gdG8gYXZvaWQgdHJvdWJsZSB3aXRoIHRocmVhZHMuCisjIC0gQ2hlY2sgZm9yIG1pc3NpbmcgZW50cmllcyBpbiBydW50aW1lL21ha2VtZW51LnZpbSAod2l0aCBjaGVja21lbnUgc2NyaXB0KS4KKyMgLSBDaGVjayBmb3IgbWlzc2luZyBvcHRpb25zIGluIHJ1bnRpbWUvb3B0d2luLnZpbSBldCBhbC4gKHdpdGggY2hlY2sudmltKS4KKyMgLSBEbyAibWFrZSBtZW51IiB0byB1cGRhdGUgdGhlIHJ1bnRpbWUvc3lubWVudS52aW0gZmlsZS4KKyMgLSBBZGQgcmVtYXJrcyBmb3IgY2hhbmdlcyB0byBydW50aW1lL2RvYy92ZXJzaW9uNi50eHQuCisjIC0gSW4gcnVudGltZS9kb2MgcnVuICJtYWtlIiBhbmQgIm1ha2UgaHRtbCIgdG8gY2hlY2sgZm9yIGVycm9ycy4KKyMgLSBDaGVjayBpZiBzcmMvTWFrZWZpbGUgYW5kIHNyYy9mZWF0dXJlLmggZG9uJ3QgY29udGFpbiBhbnkgcGVyc29uYWwKKyMgICBwcmVmZXJlbmNlcyBvciB0aGUgR1RLLCBQZXJsLCBldGMuIG1lbnRpb25lZCBhYm92ZS4KKyMgLSBDaGVjayB0aGF0IHJ1bnRpbWUvZG9jL2hlbHAudHh0IGRvZXNuJ3QgY29udGFpbiBlbnRyaWVzIGluICJMT0NBTAorIyAgIEFERElUSU9OUyIuCisjIC0gQ2hlY2sgZmlsZSBwcm90ZWN0aW9ucyB0byBiZSAiNjQ0IiBmb3IgdGV4dCBhbmQgIjc1NSIgZm9yIGV4ZWN1dGFibGVzIChydW4KKyMgICB0aGUgImNoZWNrIiBzY3JpcHQpLgorIyAtIENoZWNrIGNvbXBpbGluZyBvbiBBbWlnYSwgTVMtRE9TIGFuZCBNUy1XaW5kb3dzLgorIyAtIERlbGV0ZSBhbGwgKn4sICouc3c/LCAqLm9yaWcsICoucmVqIGZpbGVzCisjIC0gIm1ha2UgdW5peGFsbCIsICJtYWtlIGV4dHJhIiwgIm1ha2UgbGFuZyIsICJtYWtlIGh0bWwiCisjCisjIEFtaWdhOgorIyAtICJtYWtlIGFtaXNyYyIsIG1vdmUgdGhlIGFyY2hpdmUgdG8gdGhlIEFtaWdhIGFuZCBjb21waWxlOgorIyAgICJtYWtlIC1mIE1ha2VfbWFueC5tYWsiICh3aWxsIHVzZSAiYmlnIiBmZWF0dXJlcyBieSBkZWZhdWx0KS4KKyMgLSBSdW4gdGhlIHRlc3RzOiAibWFrZSAtZiBNYWtlX21hbngubWFrIHRlc3QiCisjIC0gUGxhY2UgdGhlIGV4ZWN1dGFibGVzIFZpbSBhbmQgWHhkIGluIHRoaXMgZGlyZWN0b3J5IChzZXQgdGhlIGV4ZWN1dGFibGUKKyMgICBmbGFnKS4KKyMgLSAibWFrZSBhbWlydCIsICJtYWtlIGFtaWJpbiIuCisjCisjIFBDOgorIyAtICJtYWtlIGRvc3NyYyIgYW5kICJtYWtlIGRvc3J0Ii4gIFVucGFjayB0aGUgYXJjaGl2ZXMgb24gYSBQQy4KKyMgMTYgYml0IERPUyB2ZXJzaW9uOgorIyAtIFNldCBlbnZpcm9ubWVudCBmb3IgY29tcGlsaW5nIHdpdGggQm9ybGFuZCBDKysgMy4xLgorIyAtICJibWFrZSAtZiBNYWtlX2JjMy5tYWsgQk9SPUU6XGJvcmxhbmRjIiAoY29tcGlsaW5nIHh4ZCBtaWdodCBmYWlsLCBpbiB0aGF0CisjICAgY2FzZSBzZXQgZW52aXJvbm1lbnQgZm9yIGNvbXBpbGluZyB3aXRoIEJvcmxhbmQgQysrIDQuMCBhbmQgZG8KKyMgICAibWFrZSAtZiBtYWtlX2JjMy5tYWsgQk9SPUU6XEJDNCB4eGQveHhkLmV4ZSIpLgorIyAtICJtYWtlIHRlc3QiIGFuZCBjaGVjayB0aGUgb3V0cHV0LgorIyAtIFJlbmFtZSB0aGUgZXhlY3V0YWJsZXMgdG8gInZpbWQxNi5leGUiLCAieHhkZDE2LmV4ZSIsICJpbnN0YWxsZDE2LmV4ZSIgYW5kCisjICAgInVuaW5zdGFsZDE2LmV4ZSIuCisjIDMyIGJpdCBET1MgdmVyc2lvbjoKKyMgLSBTZXQgZW52aXJvbm1lbnQgZm9yIGNvbXBpbGluZyB3aXRoIERKR1BQOyAiZ21ha2UgLWYgTWFrZV9kamcubWFrIi4KKyMgLSAicm0gdGVzdGRpci8qLm91dCIsICJtYWtlIC1mIE1ha2VfZGpnLm1hayB0ZXN0IiBhbmQgY2hlY2sgdGhlIG91dHB1dC4KKyMgLSBSZW5hbWUgdGhlIGV4ZWN1dGFibGVzIHRvICJ2aW1kMzIuZXhlIiwgInh4ZGQzMi5leGUiLCAiaW5zdGFsbGQzMi5leGUiIGFuZAorIyAgICJ1bmluc3RhbGQzMi5leGUiLgorIyBXaW4zMiBjb25zb2xlIHZlcnNpb246CisjIC0gU2V0IGVudmlyb25tZW50IGZvciBWaXN1YWwgQysrIDUuMDogInZjdmFyczMyIgorIyAtICJubWFrZSAtZiBNYWtlX212Yy5tYWsiCisjIC0gInJtIHRlc3RkaXIvKi5vdXQiLCAibm1ha2UgLWYgTWFrZV9tdmMubWFrIHRlc3QiIGFuZCBjaGVjayB0aGUgb3V0cHV0LgorIyAtIFJlbmFtZSB0aGUgZXhlY3V0YWJsZXMgdG8gInZpbXczMi5leGUiLCAieHhkdzMyLmV4ZSIuCisjIC0gV2hlbiBidWlsZGluZyB0aGUgV2luMzJzIHZlcnNpb24gbGF0ZXIsIGRlbGV0ZSB2aW1ydW4uZXhlLCBpbnN0YWxsLmV4ZSBhbmQKKyMgICB1bmluc3RhbC5leGUuICBPdGhlcndpc2UgcmVuYW1lIGV4ZWN1dGFibGVzIHRvIGluc3RhbGx3MzIuZXhlIGFuZAorIyAgIHVuaW5zdGFsdzMyLmV4ZS4KKyMgV2luMzIgR1VJIHZlcnNpb246CisjIC0gIm5tYWtlIC1mIE1ha2VfbXZjLm1hayBHVUk9eWVzLgorIyAtIG1vdmUgImd2aW0uZXhlIiB0byBoZXJlIChvdGhlcndpc2UgdGhlIE9MRSB2ZXJzaW9uIHdpbGwgb3ZlcndyaXRlIGl0KS4KKyMgLSBEZWxldGUgdmltcnVuLmV4ZSwgaW5zdGFsbC5leGUgYW5kIHVuaW5zdGFsbC5leGUuCisjIC0gQ29weSAiR3ZpbUV4dC9ndmltZXh0LmRsbCIgdG8gaGVyZS4KKyMgV2luMzIgR1VJIHZlcnNpb24gd2l0aCBPTEUsIFBFUkwsIFRDTCwgUFlUSE9OIGFuZCBkeW5hbWljIElNRToKKyMgLSBSdW4gc3JjL2JpZ3ZpbS5iYXQgKCJubWFrZSAtZiBNYWtlX212Yy5tYWsgR1VJPXllcyBPTEU9eWVzIElNRT15ZXMgLi4uKQorIyAtIFJlbmFtZSAiZ3ZpbS5leGUiIHRvICJndmltX29sZS5leGUiLgorIyAtIERlbGV0ZSBpbnN0YWxsLmV4ZSBhbmQgdW5pbnN0YWxsLmV4ZS4KKyMgLSBJZiBidWlsZGluZyB0aGUgV2luMzJzIHZlcnNpb24gZGVsZXRlIHZpbXJ1bi5leGUuCisjIFdpbjMycyBHVUkgdmVyc2lvbjoKKyMgLSBTZXQgZW52aXJvbm1lbnQgZm9yIFZpc3VhbCBDKysgNC4xIChyZXF1aXJlcyBhIG5ldyBjb25zb2xlIHdpbmRvdykKKyMgLSAidmN2YXJzMzIiICh1c2UgdGhlIHBhdGggZm9yIFZDIDQuMSBlOlxtc2RldlxiaW4pCisjIC0gIm5tYWtlIC1mIE1ha2VfbXZjLm1hayBHVUk9eWVzIElOVEw9bm8gY2xlYW4iICh1c2UgdGhlIHBhdGggZm9yIFZDIDQuMSkKKyMgLSAibm1ha2UgLWYgTWFrZV9tdmMubWFrIEdVST15ZXMgSU5UTD1ubyIgKHVzZSB0aGUgcGF0aCBmb3IgVkMgNC4xKQorIyAtIFJlbmFtZSAiZ3ZpbS5leGUiIHRvICJndmltX3czMnMuZXhlIi4KKyMgLSBSZW5hbWUgImluc3RhbGwuZXhlIiB0byAiaW5zdGFsbHczMi5leGUiCisjIC0gUmVuYW1lICJ1bmluc3RhbC5leGUiIHRvICJ1bmluc3RhbHczMi5leGUiCisjIC0gVGhlIHByb2R1Y2VkIHVuaW5zdGFsdzMyLmV4ZSBhbmQgdmltcnVuLmV4ZSBhcmUgdXNlZC4KKyMgQ3JlYXRlIHRoZSBhcmNoaXZlczoKKyMgLSBDb3B5IGFsbCB0aGUgIiouZXhlIiBmaWxlcyB0byB3aGVyZSB0aGlzIE1ha2VmaWxlIGlzLgorIyAtICJtYWtlIGRvc2JpbiIuCisjIC0gUnVuIG1ha2Ugb24gVW5peCB0byB1cGRhdGUgdGhlICIubW8iIGZpbGVzLgorIyAtICJtYWtlIGRvc2xhbmciLgorIyBOU0lTIHNlbGYgaW5zdGFsbGluZyBleGU6CisjIC0gVW5wYWNrIHRoZSBkb3NsYW5nIGFyY2hpdmUgb24gdGhlIFBDLgorIyAtIE1ha2Ugc3VyZSBndmltX29sZS5leGUsIHZpbWQzMi5leGUsIHZpbXczMi5leGUsIGluc3RhbGx3MzIuZXhlLAorIyAgIHVuaW5zdGFsdzMyLmV4ZSBhbmQgeHhkdzMyLmV4ZSBoYXZlIGJlZW4gYnVpbGQgYXMgbWVudGlvbmVkIGFib3ZlLgorIyAtIHB1dCBndmltZXh0LmRsbCBpbiBzcmMvR3ZpbUV4dCBhbmQgVmlzVmltLmRsbCBpbiBzcmMvVmlzVmltIChnZXQgdGhlbQorIyAgIGZyb20gYSBiaW5hcnkgYXJjaGl2ZSBvciBidWlsZCB0aGVtKQorIyAtIG1ha2Ugc3VyZSB0aGVyZSBpcyBhIGRpZmYuZXhlIHR3byBsZXZlbHMgdXAKKyMgLSBnbyB0byAuLi9uc2lzIGFuZCBkbyAibWFrZW5zaXMgZ3ZpbS5uc2kiLgorIyAtIENvcHkgZ3ZpbSMjLmV4ZSB0byB0aGUgZGlzdCBkaXJlY3RvcnkuCisjCisjIE9TLzI6CisjIC0gVW5wYWNrIHRoZSBVbml4ICJzcmMiLCAiZXh0cmEiIGFuZCAicnQiIGFyY2hpdmVzLgorIyAtICJtYWtlIC1mIE1ha2Vfb3MyLm1hayIuCisjIC0gUmVuYW1lIHRoZSBleGVjdXRhYmxlcyB0byB2aW1vczIuZXhlLCB4eGRvczIuZXhlIGFuZCB0ZWVvczIuZXhlIGFuZCBjb3B5CisjICAgdGhlbSB0byBoZXJlLgorIyAtICJtYWtlIG9zMmJpbiIuCisKK1ZJTVZFUgk9IHZpbS0kKE1BSk9SKS4kKE1JTk9SKQorVkVSU0lPTiA9ICQoTUFKT1IpJChNSU5PUikKK1ZET1QJPSAkKE1BSk9SKS4kKE1JTk9SKQorVklNUlRESVIgPSB2aW0kKFZFUlNJT04pCisKKyMgVmltIHVzZWQgZm9yIGNvbnZlcnNpb24gZnJvbSAidW5peCIgdG8gImRvcyIKK1ZJTQk9IHZpbQorCisjIEhvdyB0byBpbmNsdWRlIEZpbGVsaXN0IGRlcGVuZHMgb24gdGhlIHZlcnNpb24gb2YgIm1ha2UiIHlvdSBoYXZlLgorIyBJZiB0aGUgY3VycmVudCBjaG9pY2UgZG9lc24ndCB3b3JrLCB0cnkgdGhlIG90aGVyIG9uZS4KKworaW5jbHVkZSBGaWxlbGlzdAorIy5pbmNsdWRlICJGaWxlbGlzdCIKKworCisjIEFsbCBvdXRwdXQgaXMgcHV0IGluIHRoZSAiZGlzdCIgZGlyZWN0b3J5LgorZGlzdDoKKwlta2RpciBkaXN0CisKKyMgQ2xlYW4gdXAgc29tZSBmaWxlcyB0byBhdm9pZCB0aGV5IGFyZSBpbmNsdWRlZC4KK3ByZXBhcmU6CisJaWYgdGVzdCAtZiBydW50aW1lL2RvYy91Z2FuZGEubnNpcy50eHQ7IHRoZW4gXAorCQlybSBydW50aW1lL2RvYy91Z2FuZGEubnNpcy50eHQ7IGZpCisKKyMgRm9yIHRoZSB6aXAgZmlsZXMgd2UgbmVlZCB0byBjcmVhdGUgYSBmaWxlIHdpdGggdGhlIGNvbW1lbnQgbGluZQorZGlzdC9jb21tZW50OgorCW1rZGlyIGRpc3QvY29tbWVudAorCitDT01NRU5UX1JUID0gY29tbWVudC8kKFZFUlNJT04pLXJ0CitDT01NRU5UX1JUMSA9IGNvbW1lbnQvJChWRVJTSU9OKS1ydDEKK0NPTU1FTlRfUlQyID0gY29tbWVudC8kKFZFUlNJT04pLXJ0MgorQ09NTUVOVF9EMTYgPSBjb21tZW50LyQoVkVSU0lPTiktYmluLWQxNgorQ09NTUVOVF9EMzIgPSBjb21tZW50LyQoVkVSU0lPTiktYmluLWQzMgorQ09NTUVOVF9XMzIgPSBjb21tZW50LyQoVkVSU0lPTiktYmluLXczMgorQ09NTUVOVF9HVklNID0gY29tbWVudC8kKFZFUlNJT04pLWJpbi1ndmltCitDT01NRU5UX09MRSA9IGNvbW1lbnQvJChWRVJTSU9OKS1iaW4tb2xlCitDT01NRU5UX1czMlMgPSBjb21tZW50LyQoVkVSU0lPTiktYmluLXczMnMKK0NPTU1FTlRfU1JDID0gY29tbWVudC8kKFZFUlNJT04pLXNyYworQ09NTUVOVF9PUzIgPSBjb21tZW50LyQoVkVSU0lPTiktYmluLW9zMgorQ09NTUVOVF9IVE1MID0gY29tbWVudC8kKFZFUlNJT04pLWh0bWwKK0NPTU1FTlRfRkFSU0kgPSBjb21tZW50LyQoVkVSU0lPTiktZmFyc2kKK0NPTU1FTlRfTEFORyA9IGNvbW1lbnQvJChWRVJTSU9OKS1sYW5nCisKK2Rpc3QvJChDT01NRU5UX1JUKTogZGlzdC9jb21tZW50CisJZWNobyAiVmltIC0gVmkgSU1wcm92ZWQgLSB2JChWRE9UKSBydW50aW1lIGZpbGVzIGZvciBNUy1ET1MgYW5kIE1TLVdpbmRvd3MiID4gZGlzdC8kKENPTU1FTlRfUlQpCisKK2Rpc3QvJChDT01NRU5UX1JUMSk6IGRpc3QvY29tbWVudAorCWVjaG8gIlZpbSAtIFZpIElNcHJvdmVkIC0gdiQoVkRPVCkgcnVudGltZSBmaWxlcyAoUEFSVCAxKSBmb3IgTVMtRE9TIGFuZCBNUy1XaW5kb3dzIiA+IGRpc3QvJChDT01NRU5UX1JUMSkKKworZGlzdC8kKENPTU1FTlRfUlQyKTogZGlzdC9jb21tZW50CisJZWNobyAiVmltIC0gVmkgSU1wcm92ZWQgLSB2JChWRE9UKSBydW50aW1lIGZpbGVzIChQQVJUIDIpIGZvciBNUy1ET1MgYW5kIE1TLVdpbmRvd3MiID4gZGlzdC8kKENPTU1FTlRfUlQyKQorCitkaXN0LyQoQ09NTUVOVF9EMTYpOiBkaXN0L2NvbW1lbnQKKwllY2hvICJWaW0gLSBWaSBJTXByb3ZlZCAtIHYkKFZET1QpIGJpbmFyaWVzIGZvciBNUy1ET1MgMTYgYml0IHJlYWwgbW9kZSIgPiBkaXN0LyQoQ09NTUVOVF9EMTYpCisKK2Rpc3QvJChDT01NRU5UX0QzMik6IGRpc3QvY29tbWVudAorCWVjaG8gIlZpbSAtIFZpIElNcHJvdmVkIC0gdiQoVkRPVCkgYmluYXJpZXMgZm9yIE1TLURPUyAzMiBiaXQgcHJvdGVjdGVkIG1vZGUiID4gZGlzdC8kKENPTU1FTlRfRDMyKQorCitkaXN0LyQoQ09NTUVOVF9XMzIpOiBkaXN0L2NvbW1lbnQKKwllY2hvICJWaW0gLSBWaSBJTXByb3ZlZCAtIHYkKFZET1QpIGJpbmFyaWVzIGZvciBNUy1XaW5kb3dzIE5ULzk1IiA+IGRpc3QvJChDT01NRU5UX1czMikKKworZGlzdC8kKENPTU1FTlRfR1ZJTSk6IGRpc3QvY29tbWVudAorCWVjaG8gIlZpbSAtIFZpIElNcHJvdmVkIC0gdiQoVkRPVCkgR1VJIGJpbmFyaWVzIGZvciBNUy1XaW5kb3dzIE5ULzk1IiA+IGRpc3QvJChDT01NRU5UX0dWSU0pCisKK2Rpc3QvJChDT01NRU5UX09MRSk6IGRpc3QvY29tbWVudAorCWVjaG8gIlZpbSAtIFZpIElNcHJvdmVkIC0gdiQoVkRPVCkgTVMtV2luZG93cyBHVUkgYmluYXJpZXMgd2l0aCBPTEUgc3VwcG9ydCIgPiBkaXN0LyQoQ09NTUVOVF9PTEUpCisKK2Rpc3QvJChDT01NRU5UX1czMlMpOiBkaXN0L2NvbW1lbnQKKwllY2hvICJWaW0gLSBWaSBJTXByb3ZlZCAtIHYkKFZET1QpIEdVSSBiaW5hcmllcyBmb3IgTVMtV2luZG93cyAzLjEvMy4xMSIgPiBkaXN0LyQoQ09NTUVOVF9XMzJTKQorCitkaXN0LyQoQ09NTUVOVF9TUkMpOiBkaXN0L2NvbW1lbnQKKwllY2hvICJWaW0gLSBWaSBJTXByb3ZlZCAtIHYkKFZET1QpIHNvdXJjZXMgZm9yIE1TLURPUyBhbmQgTVMtV2luZG93cyIgPiBkaXN0LyQoQ09NTUVOVF9TUkMpCisKK2Rpc3QvJChDT01NRU5UX09TMik6IGRpc3QvY29tbWVudAorCWVjaG8gIlZpbSAtIFZpIElNcHJvdmVkIC0gdiQoVkRPVCkgYmluYXJpZXMgKyBydW50aW1lIGZpbGVzIGZvciBPUy8yIiA+IGRpc3QvJChDT01NRU5UX09TMikKKworZGlzdC8kKENPTU1FTlRfSFRNTCk6IGRpc3QvY29tbWVudAorCWVjaG8gIlZpbSAtIFZpIElNcHJvdmVkIC0gdiQoVkRPVCkgZG9jdW1lbnRhdGlvbiBpbiBIVE1MIiA+IGRpc3QvJChDT01NRU5UX0hUTUwpCisKK2Rpc3QvJChDT01NRU5UX0ZBUlNJKTogZGlzdC9jb21tZW50CisJZWNobyAiVmltIC0gVmkgSU1wcm92ZWQgLSB2JChWRE9UKSBGYXJzaSBsYW5ndWFnZSBmaWxlcyIgPiBkaXN0LyQoQ09NTUVOVF9GQVJTSSkKKworZGlzdC8kKENPTU1FTlRfTEFORyk6IGRpc3QvY29tbWVudAorCWVjaG8gIlZpbSAtIFZpIElNcHJvdmVkIC0gdiQoVkRPVCkgTVMtV2luZG93cyBsYW5ndWFnZSBmaWxlcyIgPiBkaXN0LyQoQ09NTUVOVF9MQU5HKQorCit1bml4cnQ6IGRpc3QgcHJlcGFyZQorCS1ybSAtZiBkaXN0LyQoVklNVkVSKS1ydDEudGFyLmd6CisJLXJtIC1mIGRpc3QvJChWSU1WRVIpLXJ0Mi50YXIuZ3oKKyMgZmlyc3QgcnVudGltZSBmaWxlCisJLXJtIC1yZiBkaXN0LyQoVklNUlRESVIpCisJbWtkaXIgZGlzdC8kKFZJTVJURElSKQorCXRhciBjZiAtIFwKKwkJJChSVF9BTEwpIFwKKwkJJChSVF9BTExfQklOKSBcCisJCSQoUlRfVU5JWCkgXAorCQkkKFJUX1VOSVhfRE9TX0JJTikgXAorCQl8IChjZCBkaXN0LyQoVklNUlRESVIpOyB0YXIgeGYgLSkKKwljZCBkaXN0ICYmIHRhciBjZiAkKFZJTVZFUiktcnQxLnRhciAkKFZJTVJURElSKQorCWd6aXAgLTkgZGlzdC8kKFZJTVZFUiktcnQxLnRhcgorIyBzZWNvbmQgcnVudGltZSBmaWxlIChzY3JpcHQgYW5kIGxhbmd1YWdlIGZpbGVzKQorCS1ybSAtcmYgZGlzdC8kKFZJTVJURElSKQorCW1rZGlyIGRpc3QvJChWSU1SVERJUikKKwl0YXIgY2YgLSBcCisJCSQoUlRfU0NSSVBUUykgXAorCQkkKExBTkdfR0VOKSBcCisJCXwgKGNkIGRpc3QvJChWSU1SVERJUik7IHRhciB4ZiAtKQorCWNkIGRpc3QgJiYgdGFyIGNmICQoVklNVkVSKS1ydDIudGFyICQoVklNUlRESVIpCisJZ3ppcCAtOSBkaXN0LyQoVklNVkVSKS1ydDIudGFyCisKK3VuaXhzcmM6IGRpc3QgcHJlcGFyZQorCS1ybSAtZiBkaXN0LyQoVklNVkVSKS1zcmMxLnRhci5negorCS1ybSAtZiBkaXN0LyQoVklNVkVSKS1zcmMyLnRhci5negorIyBmaXJzdCBzb3VyY2UgZmlsZQorCS1ybSAtcmYgZGlzdC8kKFZJTVJURElSKQorCW1rZGlyIGRpc3QvJChWSU1SVERJUikKKwl0YXIgY2YgLSBcCisJCSQoU1JDX0FMTDEpIFwKKwkJfCAoY2QgZGlzdC8kKFZJTVJURElSKTsgdGFyIHhmIC0pCisJY2QgZGlzdCAmJiB0YXIgY2YgJChWSU1WRVIpLXNyYzEudGFyICQoVklNUlRESVIpCisJZ3ppcCAtOSBkaXN0LyQoVklNVkVSKS1zcmMxLnRhcgorIyBzZWNvbmQgc291cmNlIGZpbGUKKwktcm0gLXJmIGRpc3QvJChWSU1SVERJUikKKwlta2RpciBkaXN0LyQoVklNUlRESVIpCisJdGFyIGNmIC0gXAorCQkkKFNSQ19BTEwyKSBcCisJCSQoU1JDX1VOSVgpIFwKKwkJJChTUkNfRE9TX1VOSVgpIFwKKwkJfCAoY2QgZGlzdC8kKFZJTVJURElSKTsgdGFyIHhmIC0pCisjIE5lZWQgdG8gdXNlIGEgImRpc3RjbGVhbiIgY29uZmlnLm1rIGZpbGUKKwljcCAtZiBzcmMvY29uZmlnLm1rLmRpc3QgZGlzdC8kKFZJTVJURElSKS9zcmMvYXV0by9jb25maWcubWsKKyMgQ3JlYXRlIGFuIGVtcHR5IGNvbmZpZy5oIGZpbGUsIG1ha2UgZGVwZW5kZW5jaWVzIHJlcXVpcmUgaXQKKwl0b3VjaCBkaXN0LyQoVklNUlRESVIpL3NyYy9hdXRvL2NvbmZpZy5oCisjIE1ha2Ugc3VyZSBjb25maWd1cmUgaXMgbmV3ZXIgdGhhbiBjb25maWcubWsgdG8gZm9yY2UgaXQgdG8gYmUgZ2VuZXJhdGVkCisJdG91Y2ggZGlzdC8kKFZJTVJURElSKS9zcmMvY29uZmlndXJlCisJY2QgZGlzdCAmJiB0YXIgY2YgJChWSU1WRVIpLXNyYzIudGFyICQoVklNUlRESVIpCisJZ3ppcCAtOSBkaXN0LyQoVklNVkVSKS1zcmMyLnRhcgorCit1bml4YWxsOiBkaXN0IHVuaXhzcmMgdW5peHJ0CisJLXJtIC1mIGRpc3QvJChWSU1WRVIpLnRhci5iejIKKwktcm0gLXJmIGRpc3QvJChWSU1SVERJUikKKwlta2RpciBkaXN0LyQoVklNUlRESVIpCisJY2QgZGlzdCAmJiB0YXIgeGZ6ICQoVklNVkVSKS1zcmMxLnRhci5negorCWNkIGRpc3QgJiYgdGFyIHhmeiAkKFZJTVZFUiktc3JjMi50YXIuZ3oKKwljZCBkaXN0ICYmIHRhciB4ZnogJChWSU1WRVIpLXJ0MS50YXIuZ3oKKwljZCBkaXN0ICYmIHRhciB4ZnogJChWSU1WRVIpLXJ0Mi50YXIuZ3oKKyMgQ3JlYXRlIGFuIGVtcHR5IGNvbmZpZy5oIGZpbGUsIG1ha2UgZGVwZW5kZW5jaWVzIHJlcXVpcmUgaXQKKwl0b3VjaCBkaXN0LyQoVklNUlRESVIpL3NyYy9hdXRvL2NvbmZpZy5oCisjIE1ha2Ugc3VyZSBjb25maWd1cmUgaXMgbmV3ZXIgdGhhbiBjb25maWcubWsgdG8gZm9yY2UgaXQgdG8gYmUgZ2VuZXJhdGVkCisJdG91Y2ggZGlzdC8kKFZJTVJURElSKS9zcmMvY29uZmlndXJlCisJY2QgZGlzdCAmJiB0YXIgY2YgJChWSU1WRVIpLnRhciAkKFZJTVJURElSKQorCWJ6aXAyIGRpc3QvJChWSU1WRVIpLnRhcgorCitleHRyYTogZGlzdCBwcmVwYXJlCisJLXJtIC1mIGRpc3QvJChWSU1WRVIpLWV4dHJhLnRhci5negorCS1ybSAtcmYgZGlzdC8kKFZJTVJURElSKQorCW1rZGlyIGRpc3QvJChWSU1SVERJUikKKwl0YXIgY2YgLSBcCisJCSQoRVhUUkEpIFwKKwkJfCAoY2QgZGlzdC8kKFZJTVJURElSKTsgdGFyIHhmIC0pCisJY2QgZGlzdCAmJiB0YXIgY2YgJChWSU1WRVIpLWV4dHJhLnRhciAkKFZJTVJURElSKQorCWd6aXAgLTkgZGlzdC8kKFZJTVZFUiktZXh0cmEudGFyCisKK2xhbmc6IGRpc3QgcHJlcGFyZQorCS1ybSAtZiBkaXN0LyQoVklNVkVSKS1sYW5nLnRhci5negorCS1ybSAtcmYgZGlzdC8kKFZJTVJURElSKQorCW1rZGlyIGRpc3QvJChWSU1SVERJUikKKwl0YXIgY2YgLSBcCisJCSQoTEFOR19TUkMpIFwKKwkJfCAoY2QgZGlzdC8kKFZJTVJURElSKTsgdGFyIHhmIC0pCisjIE1ha2Ugc3VyZSBqYS5zamlzLnBvIGlzIG5ld2VyIHRoYW4gamEucG8gdG8gYXZvaWQgaXQgYmVpbmcgcmVnZW5lcmF0ZWQuCisjIFNhbWUgZm9yIGNzLmNwMTI1MC5wbywgcGwuY3AxMjUwLnBvIGFuZCBzay5jcDEyNTAucG8uCisJdG91Y2ggZGlzdC8kKFZJTVJURElSKS9zcmMvcG8vamEuc2ppcy5wbworCXRvdWNoIGRpc3QvJChWSU1SVERJUikvc3JjL3BvL2NzLmNwMTI1MC5wbworCXRvdWNoIGRpc3QvJChWSU1SVERJUikvc3JjL3BvL3BsLmNwMTI1MC5wbworCXRvdWNoIGRpc3QvJChWSU1SVERJUikvc3JjL3BvL3NrLmNwMTI1MC5wbworCXRvdWNoIGRpc3QvJChWSU1SVERJUikvc3JjL3BvL3poX0NOLmNwOTM2LnBvCisJdG91Y2ggZGlzdC8kKFZJTVJURElSKS9zcmMvcG8vcnUuY3AxMjUxLnBvCisJY2QgZGlzdCAmJiB0YXIgY2YgJChWSU1WRVIpLWxhbmcudGFyICQoVklNUlRESVIpCisJZ3ppcCAtOSBkaXN0LyQoVklNVkVSKS1sYW5nLnRhcgorCithbWlydDogZGlzdCBwcmVwYXJlCisJLXJtIC1mIGRpc3QvdmltJChWRVJTSU9OKXJ0LnRhci5negorCS1ybSAtcmYgZGlzdC9WaW0KKwlta2RpciBkaXN0L1ZpbQorCW1rZGlyIGRpc3QvVmltLyQoVklNUlRESVIpCisJdGFyIGNmIC0gXAorCQkkKFJPT1RfQU1JKSBcCisJCSQoUlRfQUxMKSBcCisJCSQoUlRfQUxMX0JJTikgXAorCQkkKFJUX1NDUklQVFMpIFwKKwkJJChSVF9BTUkpIFwKKwkJJChSVF9OT19VTklYKSBcCisJCSQoUlRfQU1JX0RPUykgXAorCQl8IChjZCBkaXN0L1ZpbS8kKFZJTVJURElSKTsgdGFyIHhmIC0pCisJbXYgZGlzdC9WaW0vJChWSU1SVERJUikvdmltZGlyLmluZm8gZGlzdC9WaW0uaW5mbworCW12IGRpc3QvVmltLyQoVklNUlRESVIpL3J1bnRpbWUuaW5mbyBkaXN0L1ZpbS8kKFZJTVJURElSKS5pbmZvCisJbXYgZGlzdC9WaW0vJChWSU1SVERJUikvcnVudGltZS8qIGRpc3QvVmltLyQoVklNUlRESVIpCisJcm1kaXIgZGlzdC9WaW0vJChWSU1SVERJUikvcnVudGltZQorCWNkIGRpc3QgJiYgdGFyIGNmIHZpbSQoVkVSU0lPTilydC50YXIgVmltIFZpbS5pbmZvCisJZ3ppcCAtOSBkaXN0L3ZpbSQoVkVSU0lPTilydC50YXIKKwltdiBkaXN0L3ZpbSQoVkVSU0lPTilydC50YXIuZ3ogZGlzdC92aW0kKFZFUlNJT04pcnQudGd6CisKK2FtaWJpbjogZGlzdCBwcmVwYXJlCisJLXJtIC1mIGRpc3QvdmltJChWRVJTSU9OKWJpbi50YXIuZ3oKKwktcm0gLXJmIGRpc3QvVmltCisJbWtkaXIgZGlzdC9WaW0KKwlta2RpciBkaXN0L1ZpbS8kKFZJTVJURElSKQorCXRhciBjZiAtIFwKKwkJJChST09UX0FNSSkgXAorCQkkKEJJTl9BTUkpIFwKKwkJVmltIFwKKwkJWHhkIFwKKwkJfCAoY2QgZGlzdC9WaW0vJChWSU1SVERJUik7IHRhciB4ZiAtKQorCW12IGRpc3QvVmltLyQoVklNUlRESVIpL3ZpbWRpci5pbmZvIGRpc3QvVmltLmluZm8KKwltdiBkaXN0L1ZpbS8kKFZJTVJURElSKS9ydW50aW1lLmluZm8gZGlzdC9WaW0vJChWSU1SVERJUikuaW5mbworCWNkIGRpc3QgJiYgdGFyIGNmIHZpbSQoVkVSU0lPTiliaW4udGFyIFZpbSBWaW0uaW5mbworCWd6aXAgLTkgZGlzdC92aW0kKFZFUlNJT04pYmluLnRhcgorCW12IGRpc3QvdmltJChWRVJTSU9OKWJpbi50YXIuZ3ogZGlzdC92aW0kKFZFUlNJT04pYmluLnRnegorCithbWlzcmM6IGRpc3QgcHJlcGFyZQorCS1ybSAtZiBkaXN0L3ZpbSQoVkVSU0lPTilzcmMudGFyLmd6CisJLXJtIC1yZiBkaXN0L1ZpbQorCW1rZGlyIGRpc3QvVmltCisJbWtkaXIgZGlzdC9WaW0vJChWSU1SVERJUikKKwl0YXIgY2YgLSBcCisJCSQoUk9PVF9BTUkpIFwKKwkJJChTUkNfQUxMMSkgXAorCQkkKFNSQ19BTEwyKSBcCisJCSQoU1JDX0FNSSkgXAorCQkkKFNSQ19BTUlfRE9TKSBcCisJCXwgKGNkIGRpc3QvVmltLyQoVklNUlRESVIpOyB0YXIgeGYgLSkKKwltdiBkaXN0L1ZpbS8kKFZJTVJURElSKS92aW1kaXIuaW5mbyBkaXN0L1ZpbS5pbmZvCisJbXYgZGlzdC9WaW0vJChWSU1SVERJUikvcnVudGltZS5pbmZvIGRpc3QvVmltLyQoVklNUlRESVIpLmluZm8KKwljZCBkaXN0ICYmIHRhciBjZiB2aW0kKFZFUlNJT04pc3JjLnRhciBWaW0gVmltLmluZm8KKwlnemlwIC05IGRpc3QvdmltJChWRVJTSU9OKXNyYy50YXIKKwltdiBkaXN0L3ZpbSQoVkVSU0lPTilzcmMudGFyLmd6IGRpc3QvdmltJChWRVJTSU9OKXNyYy50Z3oKKworbm9fdGl0bGUudmltOiBNYWtlZmlsZQorCWVjaG8gInNldCBub3RpdGxlIG5vaWNvbiBub2NwIG5vbW9kZWxpbmUgdmltaW5mbz0iID5ub190aXRsZS52aW0KKworZG9zcnQ6IGRpc3QgZGlzdC8kKENPTU1FTlRfUlQpIGRvc3J0X3VuaXgyZG9zCisJLXJtIC1yZiBkaXN0L3ZpbSQoVkVSU0lPTilydC56aXAKKwljZCBkaXN0ICYmIHppcCAtOSAtckQgLXogdmltJChWRVJTSU9OKXJ0LnppcCB2aW0gPCQoQ09NTUVOVF9SVCkKKworZG9zcnRfdW5peDJkb3M6IGRpc3QgcHJlcGFyZSBub190aXRsZS52aW0KKwktcm0gLXJmIGRpc3QvdmltCisJbWtkaXIgZGlzdC92aW0KKwlta2RpciBkaXN0L3ZpbS8kKFZJTVJURElSKQorCXRhciBjZiAtIFwKKwkJJChSVF9BTEwpIFwKKwkJJChSVF9TQ1JJUFRTKSBcCisJCSQoUlRfRE9TKSBcCisJCSQoUlRfTk9fVU5JWCkgXAorCQkkKFJUX0FNSV9ET1MpIFwKKwkJJChMQU5HX0dFTikgXAorCQl8IChjZCBkaXN0L3ZpbS8kKFZJTVJURElSKTsgdGFyIHhmIC0pCisJZmluZCBkaXN0L3ZpbS8kKFZJTVJURElSKSAtdHlwZSBmIC1leGVjICQoVklNKSAtZSAtdSBub190aXRsZS52aW0gLWMgIjpzZXQgdHh8d3EiIHt9IFw7CisJdGFyIGNmIC0gXAorCQkkKFJUX1VOSVhfRE9TX0JJTikgXAorCQkkKFJUX0FMTF9CSU4pIFwKKwkJJChSVF9ET1NfQklOKSBcCisJCXwgKGNkIGRpc3QvdmltLyQoVklNUlRESVIpOyB0YXIgeGYgLSkKKwltdiBkaXN0L3ZpbS8kKFZJTVJURElSKS9ydW50aW1lLyogZGlzdC92aW0vJChWSU1SVERJUikKKwlybWRpciBkaXN0L3ZpbS8kKFZJTVJURElSKS9ydW50aW1lCisKKworIyBDb252ZXJ0IHJ1bnRpbWUgZmlsZXMgZnJvbSBVbml4IGZpbGVmb3JtYXQgdG8gZG9zIGZpbGVmb3JtYXQuCisjIFVzZWQgYmVmb3JlIHVwbG9hZGluZy4gIERvbid0IGRlbGV0ZSB0aGUgQUFQRElSL3NpZ24gZmlsZXMhCitydW50aW1lX3VuaXgyZG9zOiBkb3NydF91bml4MmRvcworCS1ybSAtcmYgYGZpbmQgcnVudGltZS9kb3MgLXR5cGUgZiAtcHJpbnQgfCBzZWQgLWUgL0FBUERJUi9kYAorCWNkIGRpc3QvdmltLyQoVklNUlRESVIpOyB0YXIgY2YgLSAqIFwKKwkJfCAoY2QgLi4vLi4vLi4vcnVudGltZS9kb3M7IHRhciB4ZiAtKQorCitkb3NiaW46IHByZXBhcmUgZG9zYmluX2d2aW0gZG9zYmluX3czMiBkb3NiaW5fZDMyIGRvc2Jpbl9kMTYgZG9zYmluX29sZSAkKERPU0JJTl9TKQorCisjIG1ha2UgV2luMzIgZ3ZpbQorZG9zYmluX2d2aW06IGRpc3Qgbm9fdGl0bGUudmltIGRpc3QvJChDT01NRU5UX0dWSU0pCisJLXJtIC1yZiBkaXN0L2d2aW0kKFZFUlNJT04pLnppcAorCS1ybSAtcmYgZGlzdC92aW0KKwlta2RpciBkaXN0L3ZpbQorCW1rZGlyIGRpc3QvdmltLyQoVklNUlRESVIpCisJdGFyIGNmIC0gXAorCQkkKEJJTl9ET1MpIFwKKwkJfCAoY2QgZGlzdC92aW0vJChWSU1SVERJUik7IHRhciB4ZiAtKQorCWZpbmQgZGlzdC92aW0vJChWSU1SVERJUikgLXR5cGUgZiAtZXhlYyAkKFZJTSkgLWUgLXUgbm9fdGl0bGUudmltIC1jICI6c2V0IHR4fHdxIiB7fSBcOworCWNwIGd2aW0uZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL2d2aW0uZXhlCisJY3AgeHhkdzMyLmV4ZSBkaXN0L3ZpbS8kKFZJTVJURElSKS94eGQuZXhlCisJY3AgdmltcnVuLmV4ZSBkaXN0L3ZpbS8kKFZJTVJURElSKS92aW1ydW4uZXhlCisJY3AgaW5zdGFsbHczMi5leGUgZGlzdC92aW0vJChWSU1SVERJUikvaW5zdGFsbC5leGUKKwljcCB1bmluc3RhbHczMi5leGUgZGlzdC92aW0vJChWSU1SVERJUikvdW5pbnN0YWwuZXhlCisJY3AgZ3ZpbWV4dC5kbGwgZGlzdC92aW0vJChWSU1SVERJUikvZ3ZpbWV4dC5kbGwKKwljZCBkaXN0ICYmIHppcCAtOSAtckQgLXogZ3ZpbSQoVkVSU0lPTikuemlwIHZpbSA8JChDT01NRU5UX0dWSU0pCisKKyMgbWFrZSBXaW4zMiBjb25zb2xlCitkb3NiaW5fdzMyOiBkaXN0IG5vX3RpdGxlLnZpbSBkaXN0LyQoQ09NTUVOVF9XMzIpCisJLXJtIC1yZiBkaXN0L3ZpbSQoVkVSU0lPTil3MzIuemlwCisJLXJtIC1yZiBkaXN0L3ZpbQorCW1rZGlyIGRpc3QvdmltCisJbWtkaXIgZGlzdC92aW0vJChWSU1SVERJUikKKwl0YXIgY2YgLSBcCisJCSQoQklOX0RPUykgXAorCQl8IChjZCBkaXN0L3ZpbS8kKFZJTVJURElSKTsgdGFyIHhmIC0pCisJZmluZCBkaXN0L3ZpbS8kKFZJTVJURElSKSAtdHlwZSBmIC1leGVjICQoVklNKSAtZSAtdSBub190aXRsZS52aW0gLWMgIjpzZXQgdHh8d3EiIHt9IFw7CisJY3AgdmltdzMyLmV4ZSBkaXN0L3ZpbS8kKFZJTVJURElSKS92aW0uZXhlCisJY3AgeHhkdzMyLmV4ZSBkaXN0L3ZpbS8kKFZJTVJURElSKS94eGQuZXhlCisJY3AgaW5zdGFsbHczMi5leGUgZGlzdC92aW0vJChWSU1SVERJUikvaW5zdGFsbC5leGUKKwljcCB1bmluc3RhbHczMi5leGUgZGlzdC92aW0vJChWSU1SVERJUikvdW5pbnN0YWwuZXhlCisJY2QgZGlzdCAmJiB6aXAgLTkgLXJEIC16IHZpbSQoVkVSU0lPTil3MzIuemlwIHZpbSA8JChDT01NRU5UX1czMikKKworIyBtYWtlIDMyYml0IERPUworZG9zYmluX2QzMjogZGlzdCBub190aXRsZS52aW0gZGlzdC8kKENPTU1FTlRfRDMyKQorCS1ybSAtcmYgZGlzdC92aW0kKFZFUlNJT04pZDMyLnppcAorCS1ybSAtcmYgZGlzdC92aW0KKwlta2RpciBkaXN0L3ZpbQorCW1rZGlyIGRpc3QvdmltLyQoVklNUlRESVIpCisJdGFyIGNmIC0gXAorCQkkKEJJTl9ET1MpIFwKKwkJfCAoY2QgZGlzdC92aW0vJChWSU1SVERJUik7IHRhciB4ZiAtKQorCWZpbmQgZGlzdC92aW0vJChWSU1SVERJUikgLXR5cGUgZiAtZXhlYyAkKFZJTSkgLWUgLXUgbm9fdGl0bGUudmltIC1jICI6c2V0IHR4fHdxIiB7fSBcOworCWNwIHZpbWQzMi5leGUgZGlzdC92aW0vJChWSU1SVERJUikvdmltLmV4ZQorCWNwIHh4ZGQzMi5leGUgZGlzdC92aW0vJChWSU1SVERJUikveHhkLmV4ZQorCWNwIGluc3RhbGxkMzIuZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL2luc3RhbGwuZXhlCisJY3AgdW5pbnN0YWxkMzIuZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL3VuaW5zdGFsLmV4ZQorCWNwIGNzZHBtaTRiLnppcCBkaXN0L3ZpbS8kKFZJTVJURElSKQorCWNkIGRpc3QgJiYgemlwIC05IC1yRCAteiB2aW0kKFZFUlNJT04pZDMyLnppcCB2aW0gPCQoQ09NTUVOVF9EMzIpCisKKyMgbWFrZSAxNmJpdCBET1MKK2Rvc2Jpbl9kMTY6IGRpc3Qgbm9fdGl0bGUudmltIGRpc3QvJChDT01NRU5UX0QxNikKKwktcm0gLXJmIGRpc3QvdmltJChWRVJTSU9OKWQxNi56aXAKKwktcm0gLXJmIGRpc3QvdmltCisJbWtkaXIgZGlzdC92aW0KKwlta2RpciBkaXN0L3ZpbS8kKFZJTVJURElSKQorCXRhciBjZiAtIFwKKwkJJChCSU5fRE9TKSBcCisJCXwgKGNkIGRpc3QvdmltLyQoVklNUlRESVIpOyB0YXIgeGYgLSkKKwlmaW5kIGRpc3QvdmltLyQoVklNUlRESVIpIC10eXBlIGYgLWV4ZWMgJChWSU0pIC1lIC11IG5vX3RpdGxlLnZpbSAtYyAiOnNldCB0eHx3cSIge30gXDsKKwljcCB2aW1kMTYuZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL3ZpbS5leGUKKwljcCB4eGRkMTYuZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL3h4ZC5leGUKKwljcCBpbnN0YWxsZDE2LmV4ZSBkaXN0L3ZpbS8kKFZJTVJURElSKS9pbnN0YWxsLmV4ZQorCWNwIHVuaW5zdGFsZDE2LmV4ZSBkaXN0L3ZpbS8kKFZJTVJURElSKS91bmluc3RhbC5leGUKKwljZCBkaXN0ICYmIHppcCAtOSAtckQgLXogdmltJChWRVJTSU9OKWQxNi56aXAgdmltIDwkKENPTU1FTlRfRDE2KQorCisjIG1ha2UgV2luMzIgZ3ZpbSB3aXRoIE9MRQorZG9zYmluX29sZTogZGlzdCBub190aXRsZS52aW0gZGlzdC8kKENPTU1FTlRfT0xFKQorCS1ybSAtcmYgZGlzdC9ndmltJChWRVJTSU9OKW9sZS56aXAKKwktcm0gLXJmIGRpc3QvdmltCisJbWtkaXIgZGlzdC92aW0KKwlta2RpciBkaXN0L3ZpbS8kKFZJTVJURElSKQorCXRhciBjZiAtIFwKKwkJJChCSU5fRE9TKSBcCisJCXwgKGNkIGRpc3QvdmltLyQoVklNUlRESVIpOyB0YXIgeGYgLSkKKwlmaW5kIGRpc3QvdmltLyQoVklNUlRESVIpIC10eXBlIGYgLWV4ZWMgJChWSU0pIC1lIC11IG5vX3RpdGxlLnZpbSAtYyAiOnNldCB0eHx3cSIge30gXDsKKwljcCBndmltX29sZS5leGUgZGlzdC92aW0vJChWSU1SVERJUikvZ3ZpbS5leGUKKwljcCB4eGR3MzIuZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL3h4ZC5leGUKKwljcCB2aW1ydW4uZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL3ZpbXJ1bi5leGUKKwljcCBpbnN0YWxsdzMyLmV4ZSBkaXN0L3ZpbS8kKFZJTVJURElSKS9pbnN0YWxsLmV4ZQorCWNwIHVuaW5zdGFsdzMyLmV4ZSBkaXN0L3ZpbS8kKFZJTVJURElSKS91bmluc3RhbC5leGUKKwljcCBndmltZXh0LmRsbCBkaXN0L3ZpbS8kKFZJTVJURElSKS9ndmltZXh0LmRsbAorCWNwIFJFQURNRV9vbGUudHh0IGRpc3QvdmltLyQoVklNUlRESVIpCisJY3Agc3JjL1Zpc1ZpbS9WaXNWaW0uZGxsIGRpc3QvdmltLyQoVklNUlRESVIpL1Zpc1ZpbS5kbGwKKwljcCBzcmMvVmlzVmltL1JFQURNRV9WaXNWaW0udHh0IGRpc3QvdmltLyQoVklNUlRESVIpCisJY2QgZGlzdCAmJiB6aXAgLTkgLXJEIC16IGd2aW0kKFZFUlNJT04pb2xlLnppcCB2aW0gPCQoQ09NTUVOVF9PTEUpCisKKyMgbWFrZSBXaW4zMnMgZ3ZpbQorZG9zYmluX3M6IGRpc3Qgbm9fdGl0bGUudmltIGRpc3QvJChDT01NRU5UX1czMlMpCisJLXJtIC1yZiBkaXN0L2d2aW0kKFZFUlNJT04pX3MuemlwCisJLXJtIC1yZiBkaXN0L3ZpbQorCW1rZGlyIGRpc3QvdmltCisJbWtkaXIgZGlzdC92aW0vJChWSU1SVERJUikKKwl0YXIgY2YgLSBcCisJCSQoQklOX0RPUykgXAorCQl8IChjZCBkaXN0L3ZpbS8kKFZJTVJURElSKTsgdGFyIHhmIC0pCisJZmluZCBkaXN0L3ZpbS8kKFZJTVJURElSKSAtdHlwZSBmIC1leGVjICQoVklNKSAtZSAtdSBub190aXRsZS52aW0gLWMgIjpzZXQgdHh8d3EiIHt9IFw7CisJY3AgZ3ZpbV93MzJzLmV4ZSBkaXN0L3ZpbS8kKFZJTVJURElSKS9ndmltLmV4ZQorCWNwIHh4ZGQzMi5leGUgZGlzdC92aW0vJChWSU1SVERJUikveHhkLmV4ZQorCWNwIFJFQURNRV93MzJzLnR4dCBkaXN0L3ZpbS8kKFZJTVJURElSKQorCWNwIGluc3RhbGx3MzIuZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL2luc3RhbGwuZXhlCisJY3AgdW5pbnN0YWx3MzIuZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL3VuaW5zdGFsLmV4ZQorCWNkIGRpc3QgJiYgemlwIC05IC1yRCAteiBndmltJChWRVJTSU9OKV9zLnppcCB2aW0gPCQoQ09NTUVOVF9XMzJTKQorCisjIG1ha2UgV2luMzIgbGFuZyBhcmNoaXZlCitkb3NsYW5nOiBkaXN0IHByZXBhcmUgbm9fdGl0bGUudmltIGRpc3QvJChDT01NRU5UX0xBTkcpCisJLXJtIC1yZiBkaXN0L3ZpbSQoVkVSU0lPTilsYW5nLnppcAorCS1ybSAtcmYgZGlzdC92aW0KKwlta2RpciBkaXN0L3ZpbQorCW1rZGlyIGRpc3QvdmltLyQoVklNUlRESVIpCisJbWtkaXIgZGlzdC92aW0vJChWSU1SVERJUikvbGFuZworCWNkIHNyYyAmJiBNQUtFTU89eWVzICQoTUFLRSkgbGFuZ3VhZ2VzCisJZmluZCBkaXN0L3ZpbS8kKFZJTVJURElSKSAtdHlwZSBmIC1leGVjICQoVklNKSAtZSAtdSBub190aXRsZS52aW0gLWMgIjpzZXQgdHh8d3EiIHt9IFw7CisjIEFkZCB0aGUgbWVzc2FnZSB0cmFuc2xhdGlvbnMuICBUcmljazogc2tpcCBqYS5tbyBhbmQgdXNlIGphLnNqaXMubW8gaW5zdGVhZC4KKyMgU2FtZSBmb3IgY3MubW8gLyBjcy5jcDEyNTAubW8sIHBsLm1vIC8gcGwuY3AxMjUwLm1vLCBzay5tbyAvIHNrLmNwMTI1MC5tbywKKyMgemhfQ04ubW8gLyB6aF9DTi5jcDkzNi5tbyBhbmQgcnUubW8gLyBydS5jcDEyNTEubW8uCisJZm9yIGkgaW4gJChMQU5HX0RPUyk7IGRvIFwKKwkgICAgICBpZiB0ZXN0ICIkJGkiICE9ICJzcmMvcG8vamEubW8iIC1hICIkJGkiICE9ICJzcmMvcG8vcGwubW8iIC1hICIkJGkiICE9ICJzcmMvcG8vY3MubW8iIC1hICIkJGkiICE9ICJzcmMvcG8vc2subW8iIC1hICIkJGkiICE9ICJzcmMvcG8vemhfQ04ubW8iIC1hICIkJGkiICE9ICJzcmMvcG8vcnUubW8iOyB0aGVuIFwKKwkJbj1gZWNobyAkJGkgfCBzZWQgLWUgInMrc3JjL3BvL1woWy1hLXpBLVowLTlfXSpcKC5VVEYtOFwpKlwpXCguc2ppc1wpKlwoLmNwMTI1MFwpKlwoLmNwMTI1MVwpKlwoLmNwOTM2XCkqLm1vK1wxKyJgOyBcCisJCW1rZGlyIGRpc3QvdmltLyQoVklNUlRESVIpL2xhbmcvJCRuOyBcCisJCW1rZGlyIGRpc3QvdmltLyQoVklNUlRESVIpL2xhbmcvJCRuL0xDX01FU1NBR0VTOyBcCisJCWNwICQkaSBkaXN0L3ZpbS8kKFZJTVJURElSKS9sYW5nLyQkbi9MQ19NRVNTQUdFUy92aW0ubW87IFwKKwkgICAgICBmaSBcCisJICAgIGRvbmUKKwljcCBsaWJpbnRsLmRsbCBkaXN0L3ZpbS8kKFZJTVJURElSKS8KKwljZCBkaXN0ICYmIHppcCAtOSAtckQgLXogdmltJChWRVJTSU9OKWxhbmcuemlwIHZpbSA8JChDT01NRU5UX0xBTkcpCisKKyMgTVMtRE9TIHNvdXJjZXMKK2Rvc3NyYzogZGlzdCBub190aXRsZS52aW0gZGlzdC8kKENPTU1FTlRfU1JDKSBydW50aW1lL2RvYy91Z2FuZGEubnNpcy50eHQKKwktcm0gLXJmIGRpc3QvdmltJChWRVJTSU9OKXNyYy56aXAKKwktcm0gLXJmIGRpc3QvdmltCisJbWtkaXIgZGlzdC92aW0KKwlta2RpciBkaXN0L3ZpbS8kKFZJTVJURElSKQorCXRhciBjZiAtIFwKKwkJJChTUkNfQUxMMSkgXAorCQkkKFNSQ19BTEwyKSBcCisJCSQoU1JDX0RPUykgXAorCQkkKFNSQ19BTUlfRE9TKSBcCisJCSQoU1JDX0RPU19VTklYKSBcCisJCXJ1bnRpbWUvZG9jL3VnYW5kYS5uc2lzLnR4dCBcCisJCXwgKGNkIGRpc3QvdmltLyQoVklNUlRESVIpOyB0YXIgeGYgLSkKKwltdiBkaXN0L3ZpbS8kKFZJTVJURElSKS9ydW50aW1lLyogZGlzdC92aW0vJChWSU1SVERJUikKKwlybWRpciBkaXN0L3ZpbS8kKFZJTVJURElSKS9ydW50aW1lCisJZmluZCBkaXN0L3ZpbS8kKFZJTVJURElSKSAtdHlwZSBmIC1leGVjICQoVklNKSAtZSAtdSBub190aXRsZS52aW0gLWMgIjpzZXQgdHh8d3EiIHt9IFw7CisJdGFyIGNmIC0gXAorCQkkKFNSQ19ET1NfQklOKSBcCisJCXwgKGNkIGRpc3QvdmltLyQoVklNUlRESVIpOyB0YXIgeGYgLSkKKwljZCBkaXN0ICYmIHppcCAtOSAtckQgLXogdmltJChWRVJTSU9OKXNyYy56aXAgdmltIDwkKENPTU1FTlRfU1JDKQorCitydW50aW1lL2RvYy91Z2FuZGEubnNpcy50eHQ6IHJ1bnRpbWUvZG9jL3VnYW5kYS50eHQKKwljZCBydW50aW1lL2RvYyAmJiAkKE1BS0UpIHVnYW5kYS5uc2lzLnR4dAorCitvczJiaW46IGRpc3Qgbm9fdGl0bGUudmltIGRpc3QvJChDT01NRU5UX09TMikKKwktcm0gLXJmIGRpc3QvdmltJChWRVJTSU9OKW9zMi56aXAKKwktcm0gLXJmIGRpc3QvdmltCisJbWtkaXIgZGlzdC92aW0KKwlta2RpciBkaXN0L3ZpbS8kKFZJTVJURElSKQorCXRhciBjZiAtIFwKKwkJJChCSU5fT1MyKSBcCisJCXwgKGNkIGRpc3QvdmltLyQoVklNUlRESVIpOyB0YXIgeGYgLSkKKwlmaW5kIGRpc3QvdmltLyQoVklNUlRESVIpIC10eXBlIGYgLWV4ZWMgJChWSU0pIC1lIC11IG5vX3RpdGxlLnZpbSAtYyAiOnNldCB0eHx3cSIge30gXDsKKwljcCB2aW1vczIuZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL3ZpbS5leGUKKwljcCB4eGRvczIuZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL3h4ZC5leGUKKwljcCB0ZWVvczIuZXhlIGRpc3QvdmltLyQoVklNUlRESVIpL3RlZS5leGUKKwljcCBlbXguZGxsIGVteGxpYmNzLmRsbCBkaXN0L3ZpbS8kKFZJTVJURElSKQorCWNkIGRpc3QgJiYgemlwIC05IC1yRCAteiB2aW0kKFZFUlNJT04pb3MyLnppcCB2aW0gPCQoQ09NTUVOVF9PUzIpCisKK2h0bWw6IGRpc3QgZGlzdC8kKENPTU1FTlRfSFRNTCkKKwktcm0gLXJmIGRpc3QvdmltJChWRVJTSU9OKWh0bWwuemlwCisJY2QgcnVudGltZS9kb2MgJiYgemlwIC05IC16IC4uLy4uL2Rpc3QvdmltJChWRVJTSU9OKWh0bWwuemlwICouaHRtbCA8Li4vLi4vZGlzdC8kKENPTU1FTlRfSFRNTCkKKworZmFyc2k6IGRpc3QgZGlzdC8kKENPTU1FTlRfRkFSU0kpCisJLXJtIC1mIGRpc3QvZmFyc2kkKFZFUlNJT04pLnppcAorCXppcCAtOSAtckQgLXogZGlzdC9mYXJzaSQoVkVSU0lPTikuemlwIGZhcnNpIDwgZGlzdC8kKENPTU1FTlRfRkFSU0kpCmRpZmYgLS1naXQgYS9SRUFETUUudHh0LmluZm8gYi9SRUFETUUudHh0LmluZm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTdmYTExNAotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS50eHQuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9SRUFETUVfYW1pLnR4dCBiL1JFQURNRV9hbWkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNTQyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUVfYW1pLnR4dApAQCAtMCwwICsxLDMyIEBACitSRUFETUVfYW1pLnR4dCBmb3IgdmVyc2lvbiA3LjBhYSBvZiBWaW06IFZpIElNcHJvdmVkLgorCitUaGlzIGZpbGUgZXhwbGFpbnMgdGhlIGluc3RhbGxhdGlvbiBvZiBWaW0gb24gQW1pZ2Egc3lzdGVtcy4KK1NlZSBSRUFETUUudHh0IGZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IFZpbS4KKworCitVbnBhY2sgdGhlIGRpc3RyaWJ1dGVkIGZpbGVzIGluIHRoZSBwbGFjZSB3aGVyZSB5b3Ugd2FudCB0byBrZWVwIHRoZW0uICBJdCBpcword2lzZSB0byBoYXZlIGEgInZpbSIgZGlyZWN0b3J5IHRvIGtlZXAgeW91ciB2aW1yYyBmaWxlIGFuZCBhbnkgb3RoZXIgZmlsZXMgeW91CitjaGFuZ2UuICBUaGUgZGlzdHJpYnV0ZWQgZmlsZXMgZ28gaW50byBhIHN1YmRpcmVjdG9yeS4gIFRoaXMgd2F5IHlvdSBjYW4KK2Vhc2lseSB1cGdyYWRlIHRvIGEgbmV3IHZlcnNpb24uICBGb3IgZXhhbXBsZToKKworICBkaDA6ZWRpdG9ycy92aW0JCWNvbnRhaW5zIHlvdXIgdmltcmMgYW5kIG1vZGlmaWVkIGZpbGVzCisgIGRoMDplZGl0b3JzL3ZpbS92aW01NAkJY29udGFpbnMgdGhlIFZpbSB2ZXJzaW9uIDUuNCBkaXN0cmlidXRlZCBmaWxlcworICBkaDA6ZWRpdG9ycy92aW0vdmltNTUJCWNvbnRhaW5zIHRoZSBWaW0gdmVyc2lvbiA1LjUgZGlzdHJpYnV0ZWQgZmlsZXMKKworWW91IHdvdWxkIHRoZW4gdW5wYWNrIHRoZSBhcmNoaXZlcyBsaWtlIHRoaXM6CisKKyAgY2QgZGgwOmVkaXRvcnMKKyAgdGFyIHhmIHQ6dmltNjBiaW4udGFyCisgIHRhciB4ZiB0OnZpbTYwcnQudGFyCisKK1NldCB0aGUgJFZJTSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwb2ludCB0byB0aGUgdG9wIGRpcmVjdG9yeSBvZiB5b3VyIFZpbQorZmlsZXMuICBGb3IgdGhlIGFib3ZlIGV4YW1wbGU6CisKKyAgc2V0IFZJTT1kaDA6ZWRpdG9ycy92aW0KKworVmltIHZlcnNpb24gNS40IHdpbGwgbG9vayBmb3IgeW91ciB2aW1yYyBmaWxlIGluICRWSU0sIGFuZCBmb3IgdGhlIHJ1bnRpbWUKK2ZpbGVzIGluICRWSU0vdmltNTQuICBTZWUgIjpoZWxwICRWSU0iIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitNYWtlIHN1cmUgdGhlIFZpbSBleGVjdXRhYmxlIGlzIGluIHlvdXIgc2VhcmNoIHBhdGguICBFaXRoZXIgY29weSB0aGUgVmltCitleGVjdXRhYmxlIHRvIGEgZGlyZWN0b3J5IHRoYXQgaXMgaW4geW91ciBzZWFyY2ggcGF0aCwgb3IgKHByZWZlcnJlZCkgbW9kaWZ5Cit0aGUgc2VhcmNoIHBhdGggdG8gaW5jbHVkZSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBWaW0gZXhlY3V0YWJsZSBpcy4KZGlmZiAtLWdpdCBhL1JFQURNRV9hbWkudHh0LmluZm8gYi9SRUFETUVfYW1pLnR4dC5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxMjQzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUVfYW1pLnR4dC5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1JFQURNRV9hbWliaW4udHh0IGIvUkVBRE1FX2FtaWJpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3ODRhMgotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRV9hbWliaW4udHh0CkBAIC0wLDAgKzEsMTIgQEAKK1JFQURNRV9hbWliaW4udHh0IGZvciB2ZXJzaW9uIDcuMGFhIG9mIFZpbTogVmkgSU1wcm92ZWQuCisKK1NlZSAiUkVBRE1FLnR4dCIgZm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgVmltLgorU2VlICJSRUFETUVfYW1pLnR4dCIgZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgZm9yIHRoZSBBbWlnYS4KK1RoZXNlIGZpbGVzIGFyZSBpbiB0aGUgcnVudGltZSBhcmNoaXZlICh2aW02MHJ0LnRneikuCisKKworVGhlIEFtaWdhICJiaW4iIGFyY2hpdmUgY29udGFpbnMgdGhlIFZpbSBleGVjdXRhYmxlIGZvciB0aGUgQW1pZ2EuICBJdCB3YXMKK2NvbXBpbGVkIHdpdGggImJpZyIgZmVhdHVyZXMuCisKK1Bvc3RzY3JpcHQgcHJpbnRpbmcgaXMgbm90IGluY2x1ZGVkIHRvIGF2b2lkIHJlcXVpcmluZyBmbG9hdGluZyBwb2ludAorY29tcHV0YXRpb25zLgpkaWZmIC0tZ2l0IGEvUkVBRE1FX2FtaWJpbi50eHQuaW5mbyBiL1JFQURNRV9hbWliaW4udHh0LmluZm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmRjM2YwMgotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRV9hbWliaW4udHh0LmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvUkVBRE1FX2FtaXNyYy50eHQgYi9SRUFETUVfYW1pc3JjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjQ3NjRlCi0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FX2FtaXNyYy50eHQKQEAgLTAsMCArMSwxMSBAQAorUkVBRE1FX2FtaXNyYy50eHQgZm9yIHZlcnNpb24gNy4wYWEgb2YgVmltOiBWaSBJTXByb3ZlZC4KKworU2VlICJSRUFETUUudHh0IiBmb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBWaW0uCitTZWUgIlJFQURNRV9hbWkudHh0IiBmb3IgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBmb3IgdGhlIEFtaWdhLgorVGhlc2UgZmlsZXMgYXJlIGluIHRoZSBydW50aW1lIGFyY2hpdmUgKHZpbTYwcnQudGd6KS4KKworCitUaGUgQW1pZ2Egc291cmNlIGFyY2hpdmUgY29udGFpbnMgdGhlIGZpbGVzIG5lZWRlZCB0byBjb21waWxlIFZpbSBvbiB0aGUKK0FtaWdhLgorCitTZWUgInNyYy9JTlNUQUxMYW1pLnR4dCIgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gY29tcGlsZSBWaW0gb24gdGhlIEFtaWdhLgpkaWZmIC0tZ2l0IGEvUkVBRE1FX2FtaXNyYy50eHQuaW5mbyBiL1JFQURNRV9hbWlzcmMudHh0LmluZm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDc2YWY5YQotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRV9hbWlzcmMudHh0LmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvUkVBRE1FX2JpbmRvcy50eHQgYi9SRUFETUVfYmluZG9zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDFmYzNjCi0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FX2JpbmRvcy50eHQKQEAgLTAsMCArMSwxOSBAQAorUkVBRE1FX2JpbmRvcy50eHQgZm9yIHZlcnNpb24gNy4wYWEgb2YgVmltOiBWaSBJTXByb3ZlZC4KKworU2VlICJSRUFETUUudHh0IiBmb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBWaW0uCitTZWUgIlJFQURNRV9kb3MudHh0IiBmb3IgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBmb3IgTVMtRE9TIGFuZCBNUy1XaW5kb3dzLgorVGhlc2UgZmlsZXMgYXJlIGluIHRoZSBydW50aW1lIGFyY2hpdmUgKHZpbTYwcnQuemlwKS4KKworCitUaGVyZSBhcmUgc2V2ZXJhbCBiaW5hcnkgZGlzdHJpYnV0aW9ucyBvZiBWaW0gZm9yIHRoZSBQQy4gIFlvdSB3b3VsZCBub3JtYWxseQorcGljayBvbmx5IG9uZSBvZiB0aGVtLCBidXQgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGluc3RhbGwgc2V2ZXJhbC4KK1RoZXNlIG9uZXMgYXJlIGF2YWlsYWJsZSAodGhlIHZlcnNpb24gbnVtYmVyIG1heSBkaWZmZXIpOgorCXZpbTYwZDE2LnppcAkxNiBiaXQgRE9TIHZlcnNpb24KKwl2aW02MGQzMi56aXAJMzIgYml0IERPUyB2ZXJzaW9uCisJdmltNjB3MzIuemlwCVdpbmRvd3MgOTUvOTgvTlQvZXRjLiBjb25zb2xlIHZlcnNpb24KKwlndmltNjAuemlwCVdpbmRvd3MgOTUvOTgvTlQvZXRjLiBHVUkgdmVyc2lvbgorCWd2aW02MG9sZS56aXAJV2luZG93cyA5NS85OC9OVC9ldGMuIEdVSSB2ZXJzaW9uIHdpdGggT0xFCisJZ3ZpbTYwX3MuemlwCVdpbmRvd3MgMy4xIEdVSSB2ZXJzaW9uCisKK1lvdSBNVVNUIGFsc28gZ2V0IHRoZSBydW50aW1lIGFyY2hpdmUgKHZpbTYwcnQuemlwKS4KK1RoZSBzb3VyY2VzIGFyZSBhbHNvIGF2YWlsYWJsZSAodmltNjBzcmMuemlwKS4KZGlmZiAtLWdpdCBhL1JFQURNRV9kb3MudHh0IGIvUkVBRE1FX2Rvcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkYzUzMgotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRV9kb3MudHh0CkBAIC0wLDAgKzEsMTU0IEBACitSRUFETUVfZG9zLnR4dCBmb3IgdmVyc2lvbiA3LjBhYSBvZiBWaW06IFZpIElNcHJvdmVkLgorCitUaGlzIGZpbGUgZXhwbGFpbnMgdGhlIGluc3RhbGxhdGlvbiBvZiBWaW0gb24gTVMtRE9TIGFuZCBNUy1XaW5kb3dzIHN5c3RlbXMuCitTZWUgIlJFQURNRS50eHQiIGZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IFZpbS4KKworVGhlcmUgYXJlIHR3byB3YXlzIHRvIGluc3RhbGwgVmltOgorQS4gVXNlIHRoZSBzZWxmLWluc3RhbGxpbmcgLmV4ZSBmaWxlLgorQi4gVW5wYWNrIC56aXAgZmlsZXMgYW5kIHJ1biB0aGUgaW5zdGFsbC5leGUgcHJvZ3JhbS4KKworCitBLiBVc2luZyB0aGUgc2VsZi1pbnN0YWxsaW5nIC5leGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIG1vc3RseSBzZWxmLWV4cGxhaW5pbmcuICBKdXN0IGZvbGxvdyB0aGUgcHJvbXB0cyBhbmQgbWFrZSB0aGUKK3NlbGVjdGlvbnMuICBBIGZldyB0aGluZ3MgdG8gd2F0Y2ggb3V0IGZvcjoKKworLSBXaGVuIGFuIGV4aXN0aW5nIGluc3RhbGxhdGlvbiBpcyBkZXRlY3RlZCwgeW91IGFyZSBvZmZlcmVkIHRvIGZpcnN0IHJlbW92ZQorICB0aGlzLiAgVGhlIHVuaW5zdGFsbCBwcm9ncmFtIGlzIHRoZW4gc3RhcnRlZCB3aGlsZSB0aGUgaW5zdGFsbCBwcm9ncmFtIHdhaXRzCisgIGZvciBpdCB0byBjb21wbGV0ZS4gIFNvbWV0aW1lcyB0aGUgd2luZG93cyBvdmVybGFwIGVhY2ggb3RoZXIsIHdoaWNoIGNhbiBiZQorICBjb25mdXNpbmcuICBCZSBzdXJlIHRoZSBjb21wbGV0ZSB0aGUgdW5pbnN0YWxsaW5nIGJlZm9yZSBjb250aW51aW5nIHRoZQorICBpbnN0YWxsYXRpb24uICBXYXRjaCB0aGUgdGFza2JhciBmb3IgdW5pbnN0YWxsIHdpbmRvd3MuCisKKy0gV2hlbiBzZWxlY3RpbmcgYSBkaXJlY3RvcnkgdG8gaW5zdGFsbCBWaW0sIHVzZSB0aGUgc2FtZSBwbGFjZSB3aGVyZSBvdGhlcgorICB2ZXJzaW9ucyBhcmUgbG9jYXRlZC4gIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGZpbmQgeW91ciBfdmltcmMgZmlsZS4gIEZvcgorICBleGFtcGxlICJDOlxQcm9ncmFtIEZpbGVzXHZpbSIgb3IgIkQ6XHZpbSIuICBBIG5hbWUgZW5kaW5nIGluICJ2aW0iIGlzCisgIHByZWZlcnJlZC4KKworLSBBZnRlciBzZWxlY3RpbmcgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBpbnN0YWxsIFZpbSwgY2xpY2tpbmcgb24gIk5leHQiIHdpbGwKKyAgc3RhcnQgdGhlIGluc3RhbGxhdGlvbi4KKworCitCLiBVc2luZyAuemlwIGZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGFyZSB0aGUgbm9ybWFsIHN0ZXBzIHRvIGluc3RhbGwgVmltIGZyb20gdGhlIC56aXAgYXJjaGl2ZXM6CisKKzEuIEdvIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdG8gcHV0IHRoZSBWaW0gZmlsZXMuICBFeGFtcGxlczoKKwljZCBDOlwKKwljZCBEOlxlZGl0b3JzCisgICBJZiB5b3UgYWxyZWFkeSBoYXZlIGEgInZpbSIgZGlyZWN0b3J5LCBnbyB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzCisgICBsb2NhdGVkLiAgQ2hlY2sgdGhlICRWSU0gc2V0dGluZyB0byBzZWUgd2hlcmUgaXQgcG9pbnRzIHRvOgorCXNldCBWSU0KKyAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZQorCUM6XHZpbVx2aW01NAorICAgZG8KKwljZCBDOlwKKyAgIEJpbmFyeSBhbmQgcnVudGltZSBWaW0gYXJjaGl2ZXMgYXJlIG5vcm1hbGx5IHVucGFja2VkIGluIHRoZSBzYW1lIGxvY2F0aW9uLAorICAgb24gdG9wIG9mIGVhY2ggb3RoZXIuCisKKzIuIFVucGFjayB0aGUgemlwIGFyY2hpdmVzLiAgVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgInZpbVx2aW02MCIsCisgICBpbiB3aGljaCBhbGwgdGhlIGRpc3RyaWJ1dGVkIFZpbSBmaWxlcyBhcmUgcGxhY2VkLiAgU2luY2UgdGhlIGRpcmVjdG9yeQorICAgbmFtZSBpbmNsdWRlcyB0aGUgdmVyc2lvbiBudW1iZXIsIGl0IGlzIHVubGlrZWx5IHRoYXQgeW91IG92ZXJ3cml0ZQorICAgZXhpc3RpbmcgZmlsZXMuCisgICBFeGFtcGxlczoKKwlwa3VuemlwIC1kIGd2aW02MC56aXAKKwl1bnppcCB2aW02MHczMi56aXAKKworICAgWW91IG5lZWQgdG8gdW5wYWNrIHRoZSBydW50aW1lIGFyY2hpdmUgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgYmluYXJ5CisgICBhcmNoaXZlcy4gIFdoZW4gdXNpbmcgbW9yZSB0aGFuIG9uZSBiaW5hcnkgdmVyc2lvbiwgYmUgY2FyZWZ1bCBub3QgdG8KKyAgIG92ZXJ3cml0ZSBvbmUgdmVyc2lvbiB3aXRoIHRoZSBvdGhlciwgdGhlIG5hbWVzIG9mIHRoZSBleGVjdXRhYmxlcworICAgInZpbS5leGUiIGFuZCAiZ3ZpbS5leGUiIGFyZSB0aGUgc2FtZS4KKworICAgQWZ0ZXIgeW91IHVucGFja2VkIHRoZSBmaWxlcywgeW91IGNhbiBzdGlsbCBtb3ZlIHRoZSB3aG9sZSBkaXJlY3RvcnkgdHJlZQorICAgdG8gYW5vdGhlciBsb2NhdGlvbi4gIFRoYXQgaXMgd2hlcmUgdGhleSB3aWxsIHN0YXksIHRoZSBpbnN0YWxsIHByb2dyYW0KKyAgIHdvbid0IG1vdmUgb3IgY29weSB0aGUgcnVudGltZSBmaWxlcy4KKworICAgT25seSBmb3IgdGhlIDMyIGJpdCBET1MgdmVyc2lvbiBvbiBNUy1ET1Mgd2l0aG91dCBEUE1JIHN1cHBvcnQgKHRyeWluZyB0bworICAgcnVuIGluc3RhbGwuZXhlIHdpbGwgcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlKTogVW5wYWNrIHRoZSBDU0RQTUk0Qi5aSVAKKyAgIGFyY2hpdmUgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCiszLiBDaGFuZ2UgdG8gdGhlIG5ldyBkaXJlY3Rvcnk6CisJY2QgdmltXHZpbTYwCisgICBSdW4gdGhlICJpbnN0YWxsLmV4ZSIgcHJvZ3JhbS4gIEl0IHdpbGwgYXNrIHlvdSBhIG51bWJlciBvZiBxdWVzdGlvbnMgYWJvdXQKKyAgIGhvdyB5b3Ugd291bGQgbGlrZSB0byBoYXZlIHlvdXIgVmltIHNldHVwLiAgQW1vbmcgdGhlc2UgYXJlOgorICAgLSBZb3UgY2FuIHRlbGwgaXQgdG8gd3JpdGUgYSAiX3ZpbXJjIiBmaWxlIHdpdGggeW91ciBwcmVmZXJlbmNlcyBpbiB0aGUKKyAgICAgcGFyZW50IGRpcmVjdG9yeS4KKyAgIC0gSXQgY2FuIGFsc28gaW5zdGFsbCBhbiAiRWRpdCB3aXRoIFZpbSIgZW50cnkgaW4gdGhlIFdpbmRvd3MgRXhwbG9yZXIKKyAgICAgcG9wdXAgbWVudS4KKyAgIC0gWW91IGNhbiBoYXZlIGl0IGNyZWF0ZSBiYXRjaCBmaWxlcywgc28gdGhhdCB5b3UgY2FuIHJ1biBWaW0gZnJvbSB0aGUKKyAgICAgY29uc29sZSBvciBpbiBhIHNoZWxsLiAgWW91IGNhbiBzZWxlY3Qgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBpbiB5b3VyCisgICAgICRQQVRILiAgSWYgeW91IHNraXAgdGhpcywgeW91IGNhbiBhZGQgVmltIHRvIHRoZSBzZWFyY2ggcGF0aCBtYW51YWxseToKKyAgICAgVGhlIHNpbXBsZXN0IGlzIHRvIGFkZCBhIGxpbmUgdG8geW91ciBhdXRvZXhlYy5iYXQuICBFeGFtcGxlczoKKwlzZXQgcGF0aD0lcGF0aCU7QzpcdmltXHZpbTYwCisJc2V0IHBhdGg9JXBhdGglO0Q6XGVkaXRvcnNcdmltXHZpbTYwCisgICAtIENyZWF0ZSBlbnRyaWVzIGZvciBWaW0gb24gdGhlIGRlc2t0b3AgYW5kIGluIHRoZSBTdGFydCBtZW51LgorCitUaGF0J3MgaXQhCisKKworUmVtYXJrczoKKworLSBJZiBWaW0gY2FuJ3QgZmluZCB0aGUgcnVudGltZSBmaWxlcywgIjpoZWxwIiB3b24ndCB3b3JrIGFuZCB0aGUgR1VJIHZlcnNpb24KKyAgd29uJ3Qgc2hvdyBhIG1lbnViYXIuICBUaGVuIHlvdSBuZWVkIHRvIHNldCB0aGUgJFZJTSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0bworICBwb2ludCB0byB0aGUgdG9wIGRpcmVjdG9yeSBvZiB5b3VyIFZpbSBmaWxlcy4gIEV4YW1wbGU6CisgICAgc2V0IFZJTT1DOlxlZGl0b3JzXHZpbQorICBWaW0gdmVyc2lvbiA2LjAgd2lsbCBsb29rIGZvciB5b3VyIHZpbXJjIGZpbGUgaW4gJFZJTSwgYW5kIGZvciB0aGUgcnVudGltZQorICBmaWxlcyBpbiAkVklNL3ZpbTYwLiAgU2VlICI6aGVscCAkVklNIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLSBUbyBhdm9pZCBjb25mdXNpb24gYmV0d2VlbiBkaXN0cmlidXRlZCBmaWxlcyBvZiBkaWZmZXJlbnQgdmVyc2lvbnMgYW5kIHlvdXIKKyAgb3duIG1vZGlmaWVkIHZpbSBzY3JpcHRzLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBkaXJlY3RvcnkgbGF5b3V0OgorICAoIkM6XHZpbSIgaXMgdXNlZCBoZXJlIGFzIHRoZSByb290LCByZXBsYWNlIGl0IHdpdGggdGhlIHBhdGggeW91IHVzZSkKKyAgWW91ciBvd24gZmlsZXM6CisJQzpcdmltXF92aW1yYwkJCVlvdXIgcGVyc29uYWwgdmltcmMuCisJQzpcdmltXF92aW1pbmZvCQkJRHluYW1pYyBpbmZvIGZvciAndmltaW5mbycuCisJQzpcdmltXHZpbWZpbGVzXGZ0cGx1Z2luXCoudmltCUZpbGV0eXBlIHBsdWdpbnMKKwlDOlx2aW1cLi4uCQkJT3RoZXIgZmlsZXMgeW91IG1hZGUuCisgIERpc3RyaWJ1dGVkIGZpbGVzOgorCUM6XHZpbVx2aW02MFx2aW0uZXhlCQlUaGUgVmltIHZlcnNpb24gNi4wIGV4ZWN1dGFibGUuCisJQzpcdmltXHZpbTYwXGRvY1wqLnR4dAkJVGhlIHZlcnNpb24gNi4wIGRvY3VtZW50YXRpb24gZmlsZXMuCisJQzpcdmltXHZpbTYwXGJ1Z3JlcG9ydC52aW0JQSBWaW0gdmVyc2lvbiA2LjAgc2NyaXB0LgorCUM6XHZpbVx2aW02MFwuLi4JCU90aGVyIHZlcnNpb24gNi4wIGRpc3RyaWJ1dGVkIGZpbGVzLgorICBJbiB0aGlzIGNhc2UgdGhlICRWSU0gZW52aXJvbm1lbnQgdmFyaWFibGUgd291bGQgYmUgc2V0IGxpa2UgdGhpczoKKwlzZXQgVklNPUM6XHZpbQorICBUaGVuICRWSU1SVU5USU1FIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gIiRWSU1cdmltNjAiLiAgRG9uJ3QgYWRkCisgICJ2aW02MCIgdG8gJFZJTSwgdGhhdCB3b24ndCB3b3JrLgorCistIFlvdSBjYW4gcHV0IHlvdXIgVmltIGV4ZWN1dGFibGUgYW55d2hlcmUgZWxzZS4gIElmIHRoZSBleGVjdXRhYmxlIGlzIG5vdAorICB3aXRoIHRoZSBvdGhlciBWaW0gZmlsZXMsIHlvdSBzaG91bGQgc2V0ICRWSU0uIFRoZSBzaW1wbGVzdCBpcyB0byBhZGQgYSBsaW5lCisgIHRvIHlvdXIgYXV0b2V4ZWMuYmF0LiAgRXhhbXBsZXM6CisJc2V0IFZJTT1jOlx2aW0KKwlzZXQgVklNPWQ6XGVkaXRvcnNcdmltCisKKy0gSWYgeW91IGhhdmUgdG9sZCB0aGUgImluc3RhbGwuZXhlIiBwcm9ncmFtIHRvIGFkZCB0aGUgIkVkaXQgd2l0aCBWaW0iIG1lbnUKKyAgZW50cnksIHlvdSBjYW4gcmVtb3ZlIGl0IGJ5IHJ1bm5pbmcgdGhlICJ1bmluc3RhbC5leGUiLiAgU2VlCisgICI6aGVscCB3aW4zMi1wb3B1cC1tZW51Ii4KKworLSBJbiBXaW5kb3dzIDk1Lzk4L05UIHlvdSBjYW4gY3JlYXRlIGEgc2hvcnRjdXQgdG8gVmltLiAgVGhpcyB3b3JrcyBmb3IgYWxsCisgIERPUyBhbmQgV2luMzIgY29uc29sZSB2ZXJzaW9ucy4gIEZvciB0aGUgY29uc29sZSB2ZXJzaW9uIHRoaXMgZ2l2ZXMgeW91IHRoZQorICBvcHBvcnR1bml0eSB0byBzZXQgZGVmYXVsdHMgZm9yIHRoZSBDb25zb2xlIHdoZXJlIFZpbSBydW5zIGluLgorCisgIDEuIE9uIHRoZSBkZXNrdG9wLCBjbGljayByaWdodCB0byBnZXQgYSBtZW51LiAgU2VsZWN0IE5ldy9TaG9ydGN1dC4KKyAgMi4gSW4gdGhlIGRpYWxvZywgZW50ZXIgQ29tbWFuZCBsaW5lOiAiQzpcY29tbWFuZC5jb20iLiAgQ2xpY2sgIk5leHQiLgorICAzLiBFbnRlciBhbnkgbmFtZS4gIENsaWNrICJGaW5pc2giLgorICAgICBUaGUgbmV3IHNob3J0Y3V0IHdpbGwgYXBwZWFyIG9uIHRoZSBkZXNrdG9wLgorICA0LiBXaXRoIHRoZSBtb3VzZSBwb2ludGVyIG9uIHRoZSBuZXcgc2hvcnRjdXQsIGNsaWNrIHJpZ2h0IHRvIGdldCBhIG1lbnUuCisgICAgIFNlbGVjdCBQcm9wZXJ0aWVzLgorICA1LiBJbiB0aGUgUHJvZ3JhbSB0YWIsIGNoYW5nZSB0aGUgIkNtZGxpbmUiIHRvIGFkZCAiL2MiIGFuZCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgVmltIGV4ZWN1dGFibGUuICBFeGFtcGxlczoKKwlDOlxjb21tYW5kLmNvbSAvYyBDOlx2aW1cdmltNjBcdmltLmV4ZQorCUM6XGNvbW1hbmQuY29tIC9jIEQ6XGVkaXRvcnNcdmltXHZpbTYwXHZpbS5leGUKKyAgNi4gU2VsZWN0IHRoZSBmb250LCB3aW5kb3cgc2l6ZSwgZXRjLiB0aGF0IHlvdSBsaWtlLiAgSWYgdGhpcyBpc24ndAorICAgICBwb3NzaWJsZSwgc2VsZWN0ICJBZHZhbmNlZCIgaW4gdGhlIFByb2dyYW0gdGFiLCBhbmQgZGVzZWxlY3QgIk1TLURPUworICAgICBtb2RlIi4KKyAgNy4gQ2xpY2sgT0suCisKKyAgRm9yIGd2aW0sIHlvdSBjYW4gdXNlIGEgbm9ybWFsIHNob3J0Y3V0IG9uIHRoZSBkZXNrdG9wLCBhbmQgc2V0IHRoZSBzaXplIG9mCisgIHRoZSBXaW5kb3cgaW4geW91ciAkVklNL19ndmltcmM6CisJc2V0IGxpbmVzPTMwIGNvbHVtbnM9OTAKKworCitGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgdHlwZSBvbmUgb2YgdGhlc2UgaW5zaWRlIFZpbToKKwk6aGVscCBkb3MKKwk6aGVscCBtc2RvcworCTpoZWxwIHdpbjMyCmRpZmYgLS1naXQgYS9SRUFETUVfZXh0cmEudHh0IGIvUkVBRE1FX2V4dHJhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTM1ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FX2V4dHJhLnR4dApAQCAtMCwwICsxLDYxIEBACitSRUFETUVfZXh0cmEudHh0IGZvciB2ZXJzaW9uIDcuMGFhIG9mIFZpbTogVmkgSU1wcm92ZWQuCisKK1RoZSBleHRyYSBhcmNoaXZlIG9mIFZpbSBpcyB0byBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIHNvdXJjZSBhcmNoaXZlCisodmltLTYuMC1zcmMudGFyLmd6KS4gIFRoZSBleHRyYSBhcmNoaXZlIGlzIHVzZWxlc3Mgd2l0aG91dCBpdC4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgIlJFQURNRS50eHQiIGZpbGUgdGhhdCBjb21lcyB3aXRoIHRoZSBydW50aW1lCithcmNoaXZlICh2aW0tNi4wLXJ0LnRhci5neikuICBUbyBiZSBhYmxlIHRvIHJ1biBWaW0geW91IE1VU1QgZ2V0IHRoZSBydW50aW1lCithcmNoaXZlIHRvbyEKKworVGhlIGV4dHJhIGFyY2hpdmUgcGx1cyB0aGUgc291cmNlIGFuZCBydW50aW1lIGFjaGl2ZXMgbWFrZSB1cCB0aGUgY29tcGxldGUKK3NvdXJjZXMgb2YgVmltIGZvciBhbGwgc3lzdGVtcy4KKworCitUaGUgZXh0cmEgYXJjaGl2ZSBjb250YWluczoKKworRmFyc2kJCUZpbGVzIGZvciB0aGUgRmFyc2kgKHBlcnNpYW4pIGxhbmd1YWdlLiAgSWYgeW91IGRvbid0IGtub3cKKwkJd2hhdCBGYXJzaSBpcywgdGhpcyBpcyBub3QgZm9yIHlvdS4KKworaWZfc25pZmYJSW50ZXJmYWNlIHRvIFNOaUZGLiAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBTTmlGRiBpcywgdGhpcyBpcworCQlub3QgZm9yIHlvdS4KKworZ3VpX2FtaWdhCitvc19hbWlnYQlGaWxlcyBmb3IgdGhlIEFtaWdhIHBvcnQuCisKK2d1aV9yaXNjb3MKK29zX3Jpc2NvcwlGaWxlcyBmb3IgdGhlIFJJU0MgT1MgcG9ydC4KKworZ3VpX2Jlb3MKK29zX2Jlb3MJCUZpbGVzIGZvciB0aGUgQmVPUyBwb3J0LgorCitvc19tc2Rvcworb3NfZG9zCQlGaWxlcyBmb3IgdGhlIE1TLURPUyBwb3J0LgorCitndWlfbWFjCitvc19tYWMJCUZpbGVzIGZvciB0aGUgTWFjIHBvcnQuCisKK29zX21pbnQJCUZpbGVzIGZvciB0aGUgQXRhcmkgTWludCBwb3J0LgorCitvc19vczIJCUZpbGVzIGZvciB0aGUgT1MvMiBwb3J0LgordGVlCQlFeHRyYSBwcm9ncmFtIGZvciBPUy8yLgorCitvc192bXMJCUZpbGVzIGZvciB0aGUgVk1TIHBvcnQuCisKK29zX3czMgorb3Nfd2luMzIJRmlsZXMgZm9yIHRoZSBXaW4zMiBwb3J0LgorCitndWlfdzMyCQlGaWxlcyBmb3IgdGhlIFdpbjMyIEdVSS4KK0d2aW1fdmMubWFrCU1TIFZpc3VhbCBDKysgbWFrZWZpbGUgZm9yIHRoZSBXaW4zMiBHVUkuCityZ2IudHh0CQlGaWxlIHdpdGggY29sb3IgZGVmaW5pdGlvbnMgZm9yIHRoZSBXaW4zMiBHVUkuCisKK2lmX29sZQkJT0xFIGF1dG9tYXRpb24gaW50ZXJmYWNlLCBmb3IgTVMgV2luZG93cyA5NSBhbmQgTlQuCisKK1Zpc1ZpbQkJSW50ZWdyYXRpb24gb2YgV2luMzIgR1VJIHdpdGggTVMgVmlzdWFsIERldmVsb3BlciBTdHVkaW8uCisKK0d2aW1FeHQJCURMTCBmb3IgdGhlICJFZGl0IHdpdGggVmltIiBjb250ZXh0IG1lbnUgZW50cnkKKworbnNpcwkJTlNJUyBzY3JpcHQgdG8gYnVpbGQgdGhlIHNlbGYtaW5zdGFsbGluZyBNUy1XaW5kb3dzIGV4ZQorCisqLm1hbgkJUHJlcHJvY2Vzc2VkIG1hbnVhbCBwYWdlcy4KKworZmlsZV9zZWxlY3QudmltCVZpbSBzY3JpcHQgdG8gYnJvd3NlIGRpcmVjdG9yaWVzIChVbml4IG9ubHkpLgpkaWZmIC0tZ2l0IGEvUkVBRE1FX2xhbmcudHh0IGIvUkVBRE1FX2xhbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YWUxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUVfbGFuZy50eHQKQEAgLTAsMCArMSw1IEBACitSRUFETUVfbGFuZy50eHQgZm9yIHZlcnNpb24gNy4wYWEgb2YgVmltOiBWaSBJTXByb3ZlZC4KKworVGhpcyBmaWxlIGNvbnRhaW5zIGZpbGVzIGZvciBub24tRW5nbGlzaCBsYW5ndWFnZXM6CistIFRyYW5zbGF0ZWQgbWVzc2FnZXMuCistIFRyYW5zbGF0ZWQgbWVudXMuCmRpZmYgLS1naXQgYS9SRUFETUVfbWFjLnR4dCBiL1JFQURNRV9tYWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTNjNjQKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUVfbWFjLnR4dApAQCAtMCwwICsxLDggQEAKK1JFQURNRV9tYWMudHh0IGZvciB2ZXJzaW9uIDcuMGFhIG9mIFZpbTogVmkgSU1wcm92ZWQuCisKK1RoaXMgZmlsZSBleHBsYWlucyB0aGUgaW5zdGFsbGF0aW9uIG9mIFZpbSBvbiBNYWNpbnRvc2ggc3lzdGVtcy4KK1NlZSAiUkVBRE1FLnR4dCIgZm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgVmltLgorCisKK1NvcnJ5LCB0aGlzIHRleHQgc3RpbGwgbmVlZHMgdG8gYmUgd3JpdHRlbiEKKwpkaWZmIC0tZ2l0IGEvUkVBRE1FX29sZS50eHQgYi9SRUFETUVfb2xlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGZjZmEwCi0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FX29sZS50eHQKQEAgLTAsMCArMSwyMCBAQAorUkVBRE1FX29sZS50eHQgZm9yIHZlcnNpb24gNy4wYWEgb2YgVmltOiBWaSBJTXByb3ZlZC4KKworVGhpcyBhcmNoaXZlIGNvbnRhaW5zIGd2aW0uZXhlIHdpdGggT0xFIGludGVyZmFjZSBhbmQgVmlzVmltLgorVGhpcyB2ZXJzaW9uIG9mIGd2aW0uZXhlIGNhbiBhbHNvIGxvYWQgYSBudW1iZXIgb2YgaW50ZXJmYWNlIGR5bmFtaWNhbGx5ICh5b3UKK2NhbiBvcHRpb25hbGx5IGluc3RhbGwgdGhlIC5kbGwgZmlsZXMgZm9yIGVhY2ggaW50ZXJmYWNlKS4KK0l0IGlzIG9ubHkgZm9yIE1TLVdpbmRvd3MgOTUvOTgvTUUvTlQvMjAwMC9YUC4KKworQWxzbyBzZWUgdGhlIFJFQURNRV9iaW5kb3MudHh0LCBSRUFETUVfZG9zLnR4dCBhbmQgUkVBRE1FLnR4dCBmaWxlcy4KKworQmUgY2FyZWZ1bCBub3QgdG8gb3ZlcndyaXRlIHRoZSBPTEUgZ3ZpbS5leGUgd2l0aCB0aGUgbm9uLU9MRSBndmltLmV4ZSB3aGVuCit1bnBhY2tpbmcgYW5vdGhlciBiaW5hcnkgYXJjaGl2ZSEgIENoZWNrIHRoZSBvdXRwdXQgb2YgIjp2ZXJzaW9uIjoKKwlXaW4zMnMgLSAiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCisJIFdpbjMyIC0gIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorV2luMzIgd2l0aCBPTEUgLSAiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24gd2l0aCBPTEUgc3VwcG9ydCIKKworRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHR5cGUgdGhpcyBpbnNpZGUgVmltOgorCTpoZWxwIGlmX29sZQorCitGdXRoZXJtb3JlLCB0aGlzIGFyY2hpdmUgY29udGFpbnMgVklTVklNLkRMTC4gIEl0IGNhbiBiZSB1c2VkIHRvIGludGVncmF0ZQordGhlIE9MRSBndmltIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBEZXZlbG9wZXIgU3R1ZGlvLiAgU2VlIFZpc1ZpbS9SRUFETUUudHh0LgpkaWZmIC0tZ2l0IGEvUkVBRE1FX29zMi50eHQgYi9SRUFETUVfb3MyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDlmMjQxCi0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FX29zMi50eHQKQEAgLTAsMCArMSw1OCBAQAorUkVBRE1FX29zMi50eHQgZm9yIHZlcnNpb24gNy4wYWEgb2YgVmltOiBWaSBJTXByb3ZlZC4KKworVGhpcyBmaWxlIGV4cGxhaW5zIHRoZSBpbnN0YWxsYXRpb24gb2YgVmltIG9uIE9TLzIgc3lzdGVtcy4KK1NlZSAiUkVBRE1FLnR4dCIgZm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgVmltLgorCisKK05PVEU6IFlvdSB3aWxsIG5lZWQgdHdvIGFyY2hpdmVzOgorICB2aW02MnJ0LnppcAljb250YWlucyB0aGUgcnVudGltZSBmaWxlcyAoc2FtZSBhcyBmb3IgdGhlIFBDIHZlcnNpb24pCisgIHZpbTYyb3MyLnppcAljb250YWlucyB0aGUgT1MvMiBleGVjdXRhYmxlcworCisxLiBHbyB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSB3YW50IHRvIHB1dCB0aGUgVmltIGZpbGVzLiAgRXhhbXBsZXM6CisJY2QgQzpcCisJY2QgRDpcZWRpdG9ycworCisyLiBVbnBhY2sgdGhlIHppcCBhcmNoaXZlcy4gIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgZGlyZWN0b3J5ICJ2aW0vdmltNjIiLAorICAgaW4gd2hpY2ggYWxsIHRoZSBkaXN0cmlidXRlZCBWaW0gZmlsZXMgYXJlIHBsYWNlZC4gIFNpbmNlIHRoZSBkaXJlY3RvcnkKKyAgIG5hbWUgaW5jbHVkZXMgdGhlIHZlcnNpb24gbnVtYmVyLCBpdCBpcyB1bmxpa2VseSB0aGF0IHlvdSBvdmVyd3JpdGUKKyAgIGV4aXN0aW5nIGZpbGVzLgorICAgRXhhbXBsZXM6CisJcGt1bnppcCAtZCB2aW02Mm9zMi56aXAKKwl1bnppcCB2aW02Mm9zMi56aXAKKworICAgQWZ0ZXIgeW91IHVucGFja2VkIHRoZSBmaWxlcywgeW91IGNhbiBzdGlsbCBtb3ZlIHRoZSB3aG9sZSBkaXJlY3RvcnkgdHJlZQorICAgdG8gYW5vdGhlciBsb2NhdGlvbi4KKworMy4gQWRkIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdmltLmV4ZSBpcyB0byB5b3VyIHBhdGguICBUaGUgc2ltcGxlc3QgaXMgdG8gYWRkIGEKKyAgIGxpbmUgdG8geW91ciBhdXRvZXhlYy5iYXQuICBFeGFtcGxlczoKKwlzZXQgcGF0aD0lcGF0aCU7QzpcdmltXHZpbTYyCisJc2V0IHBhdGg9JXBhdGglO0Q6XGVkaXRvcnNcdmltXHZpbTYyCisKK1RoYXQncyBpdCEKKworCitFeHRyYSByZW1hcmtzOgorCistIFRvIGF2b2lkIGNvbmZ1c2lvbiBiZXR3ZWVuIGRpc3RyaWJ1dGVkIGZpbGVzIG9mIGRpZmZlcmVudCB2ZXJzaW9ucyBhbmQgeW91cgorICBvd24gbW9kaWZpZWQgdmltIHNjcmlwdHMsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGRpcmVjdG9yeSBsYXlvdXQ6CisgICgiQzpcdmltIiBpcyB1c2VkIGhlcmUgYXMgdGhlIHJvb3QsIHJlcGxhY2Ugd2l0aCB0aGUgcGF0aCB5b3UgdXNlKQorICBZb3VyIG93biBmaWxlczoKKwlDOlx2aW1cX3ZpbXJjCQkJWW91ciBwZXJzb25hbCB2aW1yYy4KKwlDOlx2aW1cX3ZpbWluZm8JCQlEeW5hbWljIGluZm8gZm9yICd2aW1pbmZvJy4KKwlDOlx2aW1cLi4uCQkJT3RoZXIgZmlsZXMgeW91IG1hZGUuCisgIERpc3RyaWJ1dGVkIGZpbGVzOgorCUM6XHZpbVx2aW02Mlx2aW0uZXhlCQlUaGUgVmltIHZlcnNpb24gNi4yIGV4ZWN1dGFibGUuCisJQzpcdmltXHZpbTYyXGRvY1wqLnR4dAkJVGhlIHZlcnNpb24gNi4yIGRvY3VtZW50YXRpb24gZmlsZXMuCisJQzpcdmltXHZpbTYyXGJ1Z3JlcG9ydC52aW0JQSBWaW0gdmVyc2lvbiA2LjIgc2NyaXB0LgorCUM6XHZpbVx2aW02MlwuLi4JCU90aGVyIHZlcnNpb24gNi4yIGRpc3RyaWJ1dGVkIGZpbGVzLgorICBJbiB0aGlzIGNhc2UgdGhlICRWSU0gZW52aXJvbm1lbnQgdmFyaWFibGUgd291bGQgYmUgc2V0IGxpa2UgdGhpczoKKwlzZXQgVklNPUM6XHZpbQorCistIFlvdSBjYW4gcHV0IHlvdXIgVmltIGV4ZWN1dGFibGUgYW55d2hlcmUgZWxzZS4gIElmIHRoZSBleGVjdXRhYmxlIGlzIG5vdAorICB3aXRoIHRoZSBvdGhlciBkaXN0cmlidXRlZCBWaW0gZmlsZXMsIHlvdSBzaG91bGQgc2V0ICRWSU0uICBUaGUgc2ltcGxlc3QgaXMKKyAgdG8gYWRkIGEgbGluZSB0byB5b3VyIGF1dG9leGVjLmJhdC4gIEV4YW1wbGVzOgorCXNldCBWSU09YzpcdmltCisJc2V0IFZJTT1kOlxlZGl0b3JzXHZpbQorCitGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgdHlwZSB0aGlzIGluc2lkZSBWaW06CisJOmhlbHAgb3MyCmRpZmYgLS1naXQgYS9SRUFETUVfb3MzOTAudHh0IGIvUkVBRE1FX29zMzkwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTNlZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FX29zMzkwLnR4dApAQCAtMCwwICsxLDEzMCBAQAorUkVBRE1FX29zXzM5MC50eHQgZm9yIHZlcnNpb24gNy4wYWEgb2YgVmltOiBWaSBJTXByb3ZlZC4KKworV2VsY29tZSB0byB0aGUgT1MvMzkwIFVuaXggcG9ydCBvZiBWSU0uCisKK0FUVEVOVElPTjogVEhJUyBJUyBBTiBfQUxQSEFfIFZFUlNJT04hISEKK0kgZXhwZWN0IHlvdSB0byBrbm93IGhvdyB0byBoYW5kbGUgYWxwaGEgc29mdHdhcmUhCisKK1RoaXMgcG9ydCB3YXMgZG9uZSBieSBSYWxmIFNjaGFuZGwgPHNjaGFuZGxAZGUuaWJtLmNvbT4uCitUaGlzIHBvcnQgaXMgbm90IG1haW50YWluZWQgb3Igc3VwcG9ydGVkIGJ5IElCTSEhCisKKworRm9yIHRoZSBsaXN0IG9mIGNoYW5nZXMgc2VlIHJ1bnRpbWUvZG9jL29zXzM5MC50eHQuCisKKworQ29tcGlsaW5nOgorLS0tLS0tLS0tLQorCitOb3RlOiBBZnRlciB0aGUgZmlsZSBjb25maWd1cmUgd2FzIGNyZWF0ZWQgdmlhIGF1dG9jb25mLCBpdCBoYWQgYmVlbgorICAgICAgaGFuZGVkaXRlZCwgdG8gbWFrZSB0aGUgdGVzdCBmb3IgSUNFQ29ubmVjdGlvbk51bWJlciB3b3JrLgorICAgICAgRE8gTk9UIHJ1biBhdXRvY29uZiBhZ2FpbiEKKworV2l0aG91dCBYMTE6CisKK0lmIHlvdSBidWlsZCBWSU0gd2l0aG91dCBYMTEgc3VwcG9ydCwgY29tcGlsaW5nIGFuZCBidWlsZGluZyBpcyBuZWFybHkKK3N0cmFpZ2h0Zm9yd2FyZC4gVGhlIG9ubHkgcmVzdHJpY3Rpb24gaXMsIHRoYXQgeW91IGNhbid0IGNhbGwgbWFrZSBmcm9tIHRoZQorVklNIHRvcGxldmVsIGRpcmVjdG9yeS4gQ2hhbmdlIHRvIHRoZSBzcmMgZGlyZWN0b3J5IGZpcnN0IGFuZCBjYWxsIG1ha2UgZnJvbQordGhlcmUuIEhlcmUgaXMgYSB3aGF0IHRvIGRvOgorCisgICAgIyBEb24ndCB1c2UgYzg5IQorICAgICMgTWFrZSBhZGRpdGlvbmFsIHN5bWJvbHMgdmlzaWJsZS4KKyAgICAjIEFsbG93IGludGVybWl4aW5nIG9mIGNvbXBpbGVyIG9wdGlvbnMgYW5kIGZpbGVzLgorCisgICAgJCBleHBvcnQgQ0M9Y2MKKyAgICAkIGV4cG9ydCBDRkxBR1M9LURfQUxMX1NPVVJDRQorICAgICQgZXhwb3J0IF9DQ19DQ01PREU9MQorICAgICQuL2NvbmZpZ3VyZSAtLWVuYWJsZS1tYXgtZmVhdHVyZXMgLS13aXRob3V0LXggLS1lbmFibGUtZ3VpPW5vCisgICAgJCBjZCBzcmMKKyAgICAkIG1ha2UKKyAgICAkIG1ha2UgdGVzdAorCisgICAgICBOb3RlOiBUZXN0IDI4IHdpbGwgYmUgcmVwb3J0ZWQgYXMgZmFpbGVkLiBUaGlzIGlzIGJlY2F1c2UgZGlmZiBjYW4ndAorCSAgICBjb21wYXJlIGZpbGVzIGNvbnRhaW5pbmcgJ1wwJyBjaGFyYWN0ZXJzLiBUZXN0IDExIHdpbGwgZmFpbCBpZiB5b3UKKwkgICAgZG9uJ3QgaGF2ZSBnemlwLgorCisgICAgJCBtYWtlIGluc3RhbGwKKworCitXaXRoIFgxMToKKworVGhlcmUgYXJlIHR3byB3YXlzIGZvciBidWlsZGluZyBWSU0gd2l0aCBYMTEgc3VwcG9ydC4gVGhlIGZpcnN0IHdheSBpcyBzaW1wbGUKK2FuZCByZXN1bHRzIGluIGEgYmlnIGV4ZWN1dGFibGUgKH4xMyBNYiksIHRoZSBzZWNvbmQgbmVlZHMgYSBmZXcgYWRkaXRpb25hbAorc3RlcHMgYW5kIHJlc3VsdHMgaW4gYSBtdWNoIHNtYWxsZXIgZXhlY3V0YWJsZSAofjQuNSBNYikuIFRoaXMgZXhhbXBsZXMgYXNzdW1lCit5b3Ugd2FudCBNb3RpZi4KKworICBUaGUgZWFzeSB3YXk6CisgICAgJCBleHBvcnQgQ0M9Y2MKKyAgICAkIGV4cG9ydCBDRkxBR1M9Ii1EX0FMTF9TT1VSQ0UgLVcgYyxkbGwiCisgICAgJCBleHBvcnQgTERGTEFHUz0iLVcgbCxkbGwiCisgICAgJCBleHBvcnQgX0NDX0NDTU9ERT0xCisgICAgJCAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1tYXgtZmVhdHVyZXMgLS1lbmFibGUtZ3VpPW1vdGlmCisgICAgJCBjZCBzcmMKKyAgICAkIG1ha2UKKworICAgIFdpdGggdGhpcyBWSU0gaXMgbGlua2VkIHN0YXRpY2FsbHkgd2l0aCB0aGUgWDExIGxpYnJhcmllcy4KKworICBUaGUgc21hcnRlciB3YXk6CisgICAgTWFrZSBWSU0gYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGVuIGNyZWF0ZSBhIGZpbGUgbmFtZWQgJ2xpbmsuc2VkJyB3aXRoIHRoZQorICAgIGZvbGxvd2luZyBjb250ZW5zZToKKworCXMvLWxYZXh0ICAqLy9nCisJcy8tbFhtdSAgKi8vZworCXMvLWxYbQkqL1wvdXNyXC9saWJcL1htLnggL2cKKwlzLy1sWDExICAqL1wvdXNyXC9saWJcL1gxMS54IC9nCisJcy8tbFh0CSovL2cKKwlzLy1sU00JKi9cL3VzclwvbGliXC9TTS54IC9nCisJcy8tbElDRSAgKi9cL3VzclwvbGliXC9JQ0UueCAvZworCisgICAgVGhlbiBkbzoKKyAgICAkIHJtIHZpbQorICAgICQgbWFrZQorCisgICAgTm93IFZpbSBpcyBsaW5rZWQgd2l0aCB0aGUgWDExLURMTHMuCisKKyAgICBTZWUgdGhlIE1ha2VmaWxlIGFuZCB0aGUgZmlsZSBsaW5rLnNoIG9uIGhvdyBsaW5rLnNlZCBpcyB1c2VkLgorCisKK0hpbnQ6CistLS0tLQorVXNlIHRoZSBvbmxpbmUgaGVscCEgKFNlZSB3ZWFrbmVzc2VzIGJlbG93LikKKworRXhhbXBsZToKK0VudGVyICc6aGVscCBzeW50YXgnIGFuZCB0aGVuIHByZXNzIDxUQUI+IHNldmVyYWwgdGltZXMsIHlvdSB3aWxsIHN3aXRjaAordGhyb3VnaCBhbGwgaGVscCBpdGVtcyBjb250YWluaW5nICdzeW50YXgnLiBQcmVzcyA8RU5URVI+IG9uIHRoZSBvbmUgeW91IGFyZQoraW50ZXJlc3RlZCBhdC4gT3IgcHJlc3MgPEN0cmwtRD4gYW5kIHlvdSB3aWxsIGdldCBhIGxpc3Qgb2YgYWxsIGl0ZW1zIHByaW50ZWQKK3RoYXQgY29udGFpbiAnc3ludGF4Jy4KKworVGhlIGhlbHBmaWxlcyBjb250YWlucyBjcm9zcy1yZWZlcmVuY2VzLiBMaW5rcyBhcmUgYmV0d2VlbiAnfCcuIFBvc2l0aW9uIHRoZQorY3Vyc29yIG9uIHRoZW0gYW5kIHByZXNzIDxDdHJsLV0+IHRvIGZvbGxvdyB0aGlzIGxpbmsuIFVzZSA8Q3RybC1UPiB0byBqdW1wCitiYWNrLgorCitLbm93biB3ZWFrbmVzc2VzOgorLS0tLS0tLS0tLS0tLS0tLS0KKworLSBZb3UgY2FuJ3QgY2FsbCBtYWtlIGZyb20gdGhlIHRvcGxldmVsIGRpcmVjdG9yeSwgeW91IGhhdmUgdG8gZG8gYSAnY2Qgc3JjJworICBmaXJzdC4gIElmIHlvdSBkbyBpdCwgbWFrZSB3aWxsIGNhbGwgY29uZmlndXJlIGFnYWluLiBJIGRvbid0IGtub3cgd2h5IGFuZAorICBkaWRuJ3QgaW52ZXN0aWdhdGUgaXQsIHRoZXJlIHdlcmUgbW9yZSBpbXBvcnRhbnQgdGhpbmdzIHRvIGRvLiBJZiB5b3UgY2FuCisgIG1ha2UgaXQgd29yayBkcm9wIG1lIGEgbm90ZS4KKworLSBUaGUgZG9jdW1lbnRhdGlvbiB3YXMgbm90IHVwZGF0ZWQgZm9yIHRoaXMgYWxwaGEgcmVsZWFzZS4gSXQgY29udGFpbnMgbG90IG9mCisgIEFTQ0lJIGRlcGVuZGVuY2llcywgZXNwZWNpYWxseSBpbiBleGFtcGxlcy4KKworLSBEaWdyYXBocyBhcmUgZGVwZW5kZW50IG9uIGNvZGUgcGFnZSAxMDQ3LiBEaWdyYXBocyBhcmUgdXNlZCB0byBlbnRlcgorICBjaGFyYWN0ZXJzIHRoYXQgbm9ybWFsbHkgY2Fubm90IGJlIGVudGVyZWQgYnkgYW4gb3JkaW5hcnkga2V5Ym9hcmQuCisgIFNlZSAiOmhlbHAgZGlncmFwaHMiLgorCistIFVzaW5nICdnYScgdG8gc2hvdyB0aGUgY29kZSBvZiB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3Igc2hvd3MgdGhlCisgIGNvcnJlY3QgZGVjL2hleC9vY3QgdmFsdWVzLCBidXQgdGhlIG90aGVyIGluZm9ybWF0aW9ucyBtaWdodCBiZSBtaXNzaW5nIG9yCisgIHdyb25nLgorCistIFRoZSBzZWQgc3ludGF4IGZpbGUgZG9lc24ndCB3b3JrLCBpdCBpcyBBU0NJSSBkZXBlbmRlbnQuCisKK0J1Z3M6CistLS0tLQorSWYgeW91IGZpbmQgYSBidWcgcGxlYXNlIGluZm9ybSBtZSAoc2NoYW5kbEBkZS5pYm0uY29tKSwgZG9uJ3QgZGlzdHVyYiBCcmFtCitNb29sZW5hYXIuIEl0J3MgbW9zdCBsaWtlbHkgYSBidWcgSSBpbnRyb2R1Y2VkIGR1cmluZyBwb3J0aW5nIG9yIHNvbWUgQVNDSUkKK2RlcGVuZGVuY3kgSSBkaWRuJ3Qgbm90aWNlLgorCitGZWVkYmFjazoKKy0tLS0tLS0tLQorRmVlZGJhY2sgd2VsY29tZSEgSnVzdCBkcm9wIG1lIGEgbm90ZS4KZGlmZiAtLWdpdCBhL1JFQURNRV9zcmMudHh0IGIvUkVBRE1FX3NyYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhYTExOAotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRV9zcmMudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1JFQURNRV9zcmMudHh0IGZvciB2ZXJzaW9uIDcuMGFhIG9mIFZpbTogVmkgSU1wcm92ZWQuCisKK1RoZSBzb3VyY2UgYXJjaGl2ZSBjb250YWlucyB0aGUgZmlsZXMgbmVlZGVkIHRvIGNvbXBpbGUgVmltIG9uIFVuaXggc3lzdGVtcy4KK0l0IGlzIHBhY2tlZCBmb3IgVW5peCBzeXN0ZW1zIChOTCBsaW5lIHNlcGFyYXRvcikuICBJdCBpcyBhbHNvIHVzZWQgZm9yIG90aGVyCitzeXN0ZW1zIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGV4dHJhIGFyY2hpdmUgKHZpbS02LjAtZXh0cmEudGFyLmd6LCBpbiB0aGUKKyJleHRyYSIgZGlyZWN0b3J5IG9mIGZ0cC52aW0ub3JnKS4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgUkVBRE1FLnR4dCBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGUgcnVudGltZQorYXJjaGl2ZSAodmltLTYuMC1ydC50YXIuZ3opLiAgVG8gYmUgYWJsZSB0byBydW4gVmltIHlvdSBNVVNUIGdldCB0aGUgcnVudGltZQorYXJjaGl2ZSB0b28hCmRpZmYgLS1naXQgYS9SRUFETUVfc3JjZG9zLnR4dCBiL1JFQURNRV9zcmNkb3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTdlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUVfc3JjZG9zLnR4dApAQCAtMCwwICsxLDEyIEBACitSRUFETUVfc3JjZG9zLnR4dCBmb3IgdmVyc2lvbiA3LjBhYSBvZiBWaW06IFZpIElNcHJvdmVkLgorCitTZWUgIlJFQURNRS50eHQiIGZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IFZpbS4KK1NlZSAiUkVBRE1FX2Rvcy50eHQiIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBNUy1ET1MgYW5kIE1TLVdpbmRvd3MuCitUaGVzZSBmaWxlcyBhcmUgaW4gdGhlIHJ1bnRpbWUgYXJjaGl2ZSAodmltNjBydC56aXApLgorCisKK1RoZSBET1Mgc291cmNlIGFyY2hpdmUgY29udGFpbnMgdGhlIGZpbGVzIG5lZWRlZCB0byBjb21waWxlIFZpbSBvbiBNUy1ET1Mgb3IKK01TLVdpbmRvd3MuICBJdCBpcyBwYWNrZWQgZm9yIERPUyBzeXN0ZW1zLCB3aXRoIENSLUxGLiAgSXQgYWxzbyBpbmNsdWRlcyB0aGUKK1Zpc1ZpbSBzb3VyY2VzLgorCitTZWUgInNyYy9JTlNUQUxMcGMudHh0IiBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBjb21waWxlIFZpbSBvbiB0aGUgUEMuCmRpZmYgLS1naXQgYS9SRUFETUVfdW5peC50eHQgYi9SRUFETUVfdW5peC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwYzQwMwotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRV91bml4LnR4dApAQCAtMCwwICsxLDEwIEBACitSRUFETUVfdW5peC50eHQgZm9yIHZlcnNpb24gNy4wYWEgb2YgVmltOiBWaSBJTXByb3ZlZC4KKworVGhpcyBmaWxlIGV4cGxhaW5zIHRoZSBpbnN0YWxsYXRpb24gb2YgVmltIG9uIFVuaXggc3lzdGVtcy4KK1NlZSAiUkVBRE1FLnR4dCIgZm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgVmltLgorCisKK1doZW4geW91IHVzZSB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiwgIm1ha2UgaW5zdGFsbCIgaXMgdXNlZCB0byBpbnN0YWxsIFZpbS4KK1NlZSB0aGUgIklOU1RBTEwiIGZpbGUgaW4gdGhlICJzcmMiIGRpcmVjdG9yeS4KKworSWYgeW91IHVzZSBhIGNvbXBpbGVkIHBhY2thZ2UsIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgcGFja2FnZS4KZGlmZiAtLWdpdCBhL1JFQURNRV92bXMudHh0IGIvUkVBRE1FX3Ztcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyY2QwMwotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRV92bXMudHh0CkBAIC0wLDAgKzEsNDEgQEAKK1JFQURNRV92bXMudHh0IGZvciB2ZXJzaW9uIDcuMGFhIG9mIFZpbTogVmkgSU1wcm92ZWQuCisKK1RoaXMgZmlsZSBleHBsYWlucyB0aGUgaW5zdGFsbGF0aW9uIG9mIFZpbSBvbiBWTVMgc3lzdGVtcy4KK1NlZSAiUkVBRE1FLnR4dCIgaW4gdGhlIHJ1bnRpbWUgYXJjaGl2ZSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgVmltLgorCisKK01vc3QgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBvbi1saW5lIGRvY3VtZW50YXRpb24uICBVc2UgIjpoZWxwIHZtcyIKK2luc2lkZSBWaW0uICBPciBnZXQgdGhlIHJ1bnRpbWUgZmlsZXMgYW5kIHJlYWQgcnVudGltZS9kb2Mvb3Nfdm1zLnR4dCB0byBmaW5kCitvdXQgaG93IHRvIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSBWaW0gd2l0aCBydW50aW1lIGZpbGVzIGV0Yy4KKworVG8gY29tcGlsZSBWaW0geW91cnNlbGYgeW91IG5lZWQgdGhyZWUgYXJjaGl2ZXM6CisgIHZpbS1YLlgtcnQudGFyLmd6CXJ1bnRpbWUgZmlsZXMKKyAgdmltLVguWC1zcmMudGFyLmd6CXNvdXJjZSBmaWxlcworICB2aW0tWC5YLWV4dHJhLnRhci5neglleHRyYSBzb3VyY2UgZmlsZXMKKworQ29tcGlsYXRpb24gaXMgcmVjb21tZW5kZWQsIGluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb3JyZWN0CitsaWJyYXJpZXMgYXJlIHVzZWQgZm9yIHlvdXIgc3BlY2lmaWMgc3lzdGVtLiAgSG93ZXZlciwgeW91IG1pZ2h0IG5vdCBiZQorYWJsZSB0byBjb21waWxlIFZpbSwgcmVhZCBtb3JlIGZyb20gc3JjL0lOU1RBTEx2bXMudHh0LgorCitUbyB1c2UgdGhlIGJpbmFyeSB2ZXJzaW9uLCB5b3UgbmVlZCBvbmUgb2YgdGhlc2UgYXJjaGl2ZXM6CisKKyAgdmltLVhYLWV4ZS1hbHBoYS1ndWkuemlwCUFscGhhIEdVSS9Nb3RpZiBleGVjdXRhYmxlcworICB2aW0tWFgtZXhlLWFscGhhLWd0ay56aXAgICAgICBBbHBoYSBHVUkvR1RLIGV4ZWN1dGFibGVzCisgIHZpbS1YWC1leGUtYWxwaGEtdGVybS56aXAJQWxwaGEgY29uc29sZSBleGVjdXRhYmxlcworICB2aW0tWFgtZXhlLXZheC1ndWkuemlwCVZBWCBHVUkgZXhlY3V0YWJsZXMKKyAgdmltLVhYLWV4ZS12YXgtdGVybS56aXAJVkFYIGNvbnNvbGUgZXhlY3V0YWJsZXMKKworYW5kIG9mIGNvdXJzZQorICB2aW0tWFgtcnVudGltZS56aXAJCXJ1bnRpbWUgZmlsZXMKKworVGhlIGJpbmFyeSBhcmNoaXZlcyBjb250YWluOiB2aW0uZXhlLCBjdGFncy5leGUsIHh4ZC5leGUsIG1tc192aW0uZXhlIGZpbGVzLAorYnV0IHRoZXJlIGFyZSBhbHNvIHByZXBhcmVkICJkZXBsb3kgcmVhZHkiIGFyY2hpdmVzOgorCit2aW0tWFgtYWxwaGEuemlwCQlHVUkgYW5kIGNvbnNvbGUgZXhlY3V0YWJsZXMgd2l0aCBydW50aW1lIGFuZAorCQkJCWhlbHAgZmlsZXMgZm9yIEFscGhhIHN5c3RlbXMKK3ZpbS1YWC12YXguemlwCQkJR1VJIGFuZCBjb25zb2xlIGV4ZWN1dGFibGVzIHdpdGggcnVudGltZSBhbmQKKwkJCQloZWxwIGZpbGVzIGZvciBWQVggc3lzdGVtcworCitUaGVzZSBleGVjdXRhYmxlcyBhbmQgdXAgdG8gZGF0ZSBwYXRjaGVzIGZvciBPcGVuVk1TIHN5c3RlbSBhcmUgZG93bmxvYWRhYmxlCitmcm9tIGh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vIG9yIGZ0cDovL2Z0cC5wb2xhcmhvbWUuY29tL3B1Yi92aW0vCisKZGlmZiAtLWdpdCBhL1JFQURNRV93MzJzLnR4dCBiL1JFQURNRV93MzJzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWIwY2RjCi0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FX3czMnMudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1JFQURNRV93MzJzLnR4dCBmb3IgdmVyc2lvbiA3LjBhYSBvZiBWaW06IFZpIElNcHJvdmVkLgorCitUaGlzIGFyY2hpdmUgY29udGFpbnMgdGhlIGd2aW0uZXhlIHRoYXQgd2FzIHNwZWNpZmljYWxseSBjb21waWxlZCBmb3IgdXNlIGluCit0aGUgV2luMzJzIHN1YnN5c3RlbSBpbiBNUy1XaW5kb3dzIDMuMSBhbmQgMy4xMS4KKworQWxzbyBzZWUgdGhlIFJFQURNRV9iaW5kb3MudHh0LCBSRUFETUVfZG9zLnR4dCBhbmQgUkVBRE1FLnR4dCBmaWxlcy4KKworQmUgY2FyZWZ1bCBub3QgdG8gb3ZlcndyaXRlIHRoZSBXaW4zMnMgZ3ZpbS5leGUgd2l0aCB0aGUgYW5vdGhlciBndmltLmV4ZSB3aGVuCit1bnBhY2tpbmcgYW5vdGhlciBiaW5hcnkgYXJjaGl2ZSEgIENoZWNrIHRoZSBvdXRwdXQgb2YgIjp2ZXJzaW9uIjoKKwlXaW4zMnMgLSAiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCisJIFdpbjMyIC0gIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorV2luMzIgd2l0aCBPTEUgLSAiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24gd2l0aCBPTEUgc3VwcG9ydCIKKworRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHR5cGUgdGhpcyBpbnNpZGUgVmltOgorCTpoZWxwIHdpbjMycwpkaWZmIC0tZ2l0IGEvVmltLmluZm8gYi9WaW0uaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YzQ2NWZmCi0tLSAvZGV2L251bGwKKysrIGIvVmltLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvWHhkLmluZm8gYi9YeGQuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YWU3NjQzCi0tLSAvZGV2L251bGwKKysrIGIvWHhkLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI0ZjJiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUKQEAgLTAsMCArMSw2IEBACisjISAvYmluL3NoCisKKyMgVGhpcyBpcyBqdXN0IGEgc3R1YiBmb3IgdGhlIFVuaXggY29uZmlndXJlIHNjcmlwdCwgdG8gcHJvdmlkZSBzdXBwb3J0IGZvcgorIyBkb2luZyAiLi9jb25maWd1cmUiIGluIHRoZSB0b3AgVmltIGRpcmVjdG9yeS4KKworY2Qgc3JjICYmIC4vY29uZmlndXJlICIkQCIKZGlmZiAtLWdpdCBhL2NzZHBtaTRiLnppcCBiL2NzZHBtaTRiLnppcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTEzOTZmCi0tLSAvZGV2L251bGwKKysrIGIvY3NkcG1pNGIuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VteC5kbGwgYi9lbXguZGxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmYwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9lbXguZGxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VteGxpYmNzLmRsbCBiL2VteGxpYmNzLmRsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdmMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvZW14bGliY3MuZGxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYnMvYXJwLmxpYnJhcnkgYi9saWJzL2FycC5saWJyYXJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOTk1NjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2FycC5saWJyYXJ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL25zaXMvUkVBRE1FLnR4dCBiL25zaXMvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDIwOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbnNpcy9SRUFETUUudHh0CkBAIC0wLDAgKzEsNDIgQEAKK1RoaXMgYnVpbGRzIGEgb25lLWNsaWNrIGluc3RhbGwgZm9yIFZpbSBmb3IgV2luMzIgdXNpbmcgdGhlIE51bGxzb2Z0CitJbnN0YWxsYXRpb24gU3lzdGVtIChOU0lTKSwgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubnVsbHNvZnQuY29tL2ZyZWUvbnNpcy8KKworVG8gYnVpbGQgdGhlIGluc3RhbGxhYmxlIC5leGU6CisKKzEuICBVbnBhY2sgdGhyZWUgYXJjaGl2ZXM6CisJUEMgc291cmNlcworCVBDIHJ1bnRpbWUKKwlQQyBsYW5ndWFnZSBmaWxlcworICAgIFlvdSBjYW4gZ2VuZXJhdGUgdGhlc2UgZnJvbSB0aGUgVW5peCBzb3VyY2VzIGFuZCBydW50aW1lIHBsdXMgdGhlIGV4dHJhCisgICAgYXJjaGl2ZSAoc2VlIHRoZSBNYWtlZmlsZSBpbiB0aGUgdG9wIGRpcmVjdG9yeSkuCisKKzIuICBHbyB0byB0aGUgc3JjIGRpcmVjdG9yeSBhbmQgYnVpbGQ6CisJZ3ZpbS5leGUgKHRoZSBPTEUgdmVyc2lvbiksCisJdmltcnVuLmV4ZSwKKwlpbnN0YWxsLmV4ZSwKKwl1bmluc3RhbC5leGUsCisJeHhkL3h4ZC5leGUsCisKKzMuICBHbyB0byB0aGUgR3ZpbUV4dCBkaXJlY3RvcnkgYW5kIGJ1aWxkIGd2aW1leHQuZGxsIChvciBnZXQgaXQgZnJvbSBhIGJpbmFyeQorICAgIGFyY2hpdmUpLgorCis0LiAgR28gdG8gdGhlIFZpc1ZpbSBkaXJlY3RvcnkgYW5kIGJ1aWxkIFZpc1ZpbS5kbGwgKG9yIGdldCBpdCBmcm9tIGEgYmluYXJ5CisgICAgYXJjaGl2ZSkuCisKKzUuICBHbyB0byB0aGUgT2xlVmltIGRpcmVjdG9yeSBhbmQgYnVpbGQgT3BlbldpdGhWaW0uZXhlIGFuZCBTZW5kVG9WaW0uZXhlIChvcgorICAgIGdldCB0aGVtIGZyb20gYSBiaW5hcnkgYXJjaGl2ZSkuCisKKzYuICBHZXQgYSAiZGlmZi5leGUiIHByb2dyYW0gYW5kIHB1dCBpdCBpbiB0aGUgIi4uLy4uIiBkaXJlY3RvcnkgKGFib3ZlIHRoZQorICAgICJ2aW02MSIgZGlyZWN0b3J5LCBpdCdzIHRoZSBzYW1lIGZvciBhbGwgVmltIHZlcnNpb25zKS4KKyAgICBZb3UgY2FuIGZpbmQgb25lIGluIHByZXZpb3VzIFZpbSB2ZXJzaW9ucyBvciBpbiB0aGlzIGFyY2hpdmU6CisJCWh0dHA6Ly93d3cubW9zc2JheWVuZy5jb20vfnJvbi92aW0vZGlmZnV0aWxzLnRhci5negorCis3LiAgRG8gIm1ha2UgdWdhbmRhLm5zaXMudHh0IiBpbiBydW50aW1lL2RvYy4gIFRoaXMgcmVxdWlyZXMgc2VkLCB5b3UgbWF5IGhhdmUKKyAgICB0byBkbyB0aGlzIG9uIFVuaXguICBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgaW4gRE9TIGZpbGUgZm9ybWF0IQorCitJbnN0YWxsIE5TSVMgaWYgeW91IGRpZG4ndCBkbyB0aGF0IGFscmVhZHkuCitBbHNvIGluc3RhbGwgVVBYLCBpZiB5b3Ugd2FudCBhIGNvbXByZXNzZWQgZmlsZS4KKworVG8gYnVpbGQgdGhlbiwgZW50ZXI6CisKKwltYWtlbnNpcyBndmltLm5zaQpkaWZmIC0tZ2l0IGEvbnNpcy9ndmltLm5zaSBiL25zaXMvZ3ZpbS5uc2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4NDIzOQotLS0gL2Rldi9udWxsCisrKyBiL25zaXMvZ3ZpbS5uc2kKQEAgLTAsMCArMSw0NDIgQEAKKyMgTlNJUyBmaWxlIHRvIGNyZWF0ZSBhIHNlbGYtaW5zdGFsbGluZyBleGUgZm9yIFZpbS4KKyMgSXQgcmVxdWlyZXMgTlNJUyB2ZXJzaW9uIDIuMCBvciBsYXRlci4KKyMgTGFzdCBjaGFuZ2U6CTIwMDQgTWF5IDAyCisKKyMgV0FSTklORzogaWYgeW91IG1ha2UgY2hhbmdlcyB0byB0aGlzIHNjcmlwdCwgbG9vayBvdXQgZm9yICQwIHRvIGJlIHZhbGlkLAorIyBiZWNhdXNlIHVuaW5zdGFsbCBkZWxldGVzIG1vc3QgZmlsZXMgaW4gJDAuCisKKyMgTG9jYXRpb24gb2YgZ3ZpbV9vbGUuZXhlLCB2aW1kMzIuZXhlLCBHdmltRXh0LyosIGV0Yy4KKyFkZWZpbmUgVklNU1JDICIuLlxzcmMiCisKKyMgTG9jYXRpb24gb2YgcnVudGltZSBmaWxlcworIWRlZmluZSBWSU1SVCAiLi4iCisKKyMgTG9jYXRpb24gb2YgZXh0cmEgdG9vbHM6IGRpZmYuZXhlCishZGVmaW5lIFZJTVRPT0xTIC4uXC4uCisKKyMgQ29tbWVudCB0aGUgbmV4dCBsaW5lIGlmIHlvdSBkb24ndCBoYXZlIFVQWC4KKyMgR2V0IGl0IGF0IGh0dHA6Ly91cHguc291cmNlZm9yZ2UubmV0CishZGVmaW5lIEhBVkVfVVBYCisKKyMgY29tbWVudCB0aGUgbmV4dCBsaW5lIGlmIHlvdSBkbyBub3Qgd2FudCB0byBhZGQgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyFkZWZpbmUgSEFWRV9OTFMKKworIWRlZmluZSBWRVJfTUFKT1IgNworIWRlZmluZSBWRVJfTUlOT1IgMGFhCisKKyMgLS0tLS0tLS0tLS0gTm8gY29uZmlndXJhYmxlIHNldHRpbmdzIGJlbG93IHRoaXMgbGluZSAtLS0tLS0tLS0tLQorCishaW5jbHVkZSBVcGdyYWRlRExMLm5zaAkJIyBmb3IgVmlzVmltLmRsbAorCitOYW1lICJWaW0gJHtWRVJfTUFKT1J9LiR7VkVSX01JTk9SfSIKK091dEZpbGUgZ3ZpbSR7VkVSX01BSk9SfSR7VkVSX01JTk9SfS5leGUKK0NSQ0NoZWNrIGZvcmNlCitTZXRDb21wcmVzc29yIGx6bWEKK1NldERhdGFibG9ja09wdGltaXplIG9uCisKK0NvbXBvbmVudFRleHQgIlRoaXMgd2lsbCBpbnN0YWxsIFZpbSAke1ZFUl9NQUpPUn0uJHtWRVJfTUlOT1J9IG9uIHlvdXIgY29tcHV0ZXIuIgorRGlyVGV4dCAiQ2hvb3NlIGEgZGlyZWN0b3J5IHRvIGluc3RhbGwgVmltIChtdXN0IGVuZCBpbiAndmltJykiCitJY29uIGljb25zXHZpbV8xNmMuaWNvCisjIE5TSVMyIHVzZXMgYSBkaWZmZXJlbnQgc3RyYXRlZ3kgd2l0aCBzaXggZGlmZXJlbnQgaW1hZ2VzIGluIGEgc3RyaXAuLi4KKyNFbmFibGVkQml0bWFwIGljb25zXGVuYWJsZWQuYm1wCisjRGlzYWJsZWRCaXRtYXAgaWNvbnNcZGlzYWJsZWQuYm1wCitVbmluc3RhbGxUZXh0ICJUaGlzIHdpbGwgdW5pbnN0YWxsIFZpbSAke1ZFUl9NQUpPUn0uJHtWRVJfTUlOT1J9IGZyb20geW91ciBzeXN0ZW0uIgorVW5pbnN0YWxsSWNvbiBpY29uc1x2aW1fdW5pbnN0XzE2Yy5pY28KKworIyBPbiBOU0lTIDIgdXNpbmcgdGhlIEJHR3JhZGllbnQgY2F1c2VzIHRyb3VibGUgb24gV2luZG93cyA5OCwgaW4gY29tYmluYXRpb24KKyMgd2l0aCB0aGUgQnJpbmdUb0Zyb250LgorIyBCR0dyYWRpZW50IDAwNDAwMCAwMDgyMDAgRkZGRkZGCitMaWNlbnNlVGV4dCAiWW91IHNob3VsZCByZWFkIHRoZSBmb2xsb3dpbmcgYmVmb3JlIGluc3RhbGxpbmc6IgorTGljZW5zZURhdGEgJHtWSU1SVH1cZG9jXHVnYW5kYS5uc2lzLnR4dAorCishaWZkZWYgSEFWRV9VUFgKKyAgIXBhY2toZHIgdGVtcC5kYXQgInVweCAtLWJlc3QgLS1jb21wcmVzcy1pY29ucz0xIHRlbXAuZGF0IgorIWVuZGlmCisKKyMgVGhpcyBhZGRzICdcdmltJyB0byB0aGUgdXNlciBjaG9pY2UgYXV0b21hZ2ljYWxseS4gIFRoZSBhY3R1YWwgdmFsdWUgaXMKKyMgb2J0YWluZWQgYmVsb3cgd2l0aCBSZWFkSU5JU3RyLgorSW5zdGFsbERpciAiJFBST0dSQU1GSUxFU1xWaW0iCisKKyMgVHlwZXMgb2YgaW5zdGFsbHMgd2UgY2FuIHBlcmZvcm06CitJbnN0VHlwZSBUeXBpY2FsCitJbnN0VHlwZSBNaW5pbWFsCitJbnN0VHlwZSBGdWxsCisKK1NpbGVudEluc3RhbGwgbm9ybWFsCisKKyMgVGhlc2UgYXJlIHRoZSBwYWdlcyB3ZSB1c2UKK1BhZ2UgbGljZW5zZQorUGFnZSBjb21wb25lbnRzCitQYWdlIGRpcmVjdG9yeSAiIiAiIiBDaGVja0luc3RhbGxEaXIKK1BhZ2UgaW5zdGZpbGVzCitVbmluc3RQYWdlIHVuaW5zdENvbmZpcm0KK1VuaW5zdFBhZ2UgaW5zdGZpbGVzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRnVuY3Rpb25zCisKK0Z1bmN0aW9uIC5vbkluaXQKKyAgTWVzc2FnZUJveCBNQl9ZRVNOT3xNQl9JQ09OUVVFU1RJT04gXAorCSJUaGlzIHdpbGwgaW5zdGFsbCBWaW0gJHtWRVJfTUFKT1J9LiR7VkVSX01JTk9SfSBvbiB5b3VyIGNvbXB1dGVyLiRcbiBDb250aW51ZT8iIFwKKwlJRFlFUyBOb0Fib3J0CisJICAgIEFib3J0IDsgY2F1c2VzIGluc3RhbGxlciB0byBxdWl0LgorCU5vQWJvcnQ6CisKKyAgIyBydW4gdGhlIGluc3RhbGwgcHJvZ3JhbSB0byBjaGVjayBmb3IgYWxyZWFkeSBpbnN0YWxsZWQgdmVyc2lvbnMKKyAgU2V0T3V0UGF0aCAkVEVNUAorICBGaWxlIC9vbmFtZT1pbnN0YWxsLmV4ZSAke1ZJTVNSQ31caW5zdGFsbHczMi5leGUKKyAgRXhlY1dhaXQgIiRURU1QXGluc3RhbGwuZXhlIC11bmluc3RhbGwtY2hlY2siCisgIERlbGV0ZSAkVEVNUFxpbnN0YWxsLmV4ZQorCisgICMgV2UgbWF5IGhhdmUgYmVlbiBwdXQgdG8gdGhlIGJhY2tncm91bmQgd2hlbiB1bmluc3RhbGwgZGlkIHNvbWV0aGluZy4KKyAgQnJpbmdUb0Zyb250CisKKyAgIyBJbnN0YWxsIHdpbGwgaGF2ZSBjcmVhdGVkIGEgZmlsZSBmb3IgdXMgdGhhdCBjb250YWlucyB0aGUgZGlyZWN0b3J5IHdoZXJlCisgICMgd2Ugc2hvdWxkIGluc3RhbGwuICBUaGlzIGlzICRWSU0gaWYgaXQncyBzZXQuICBUaGlzIGFwcGVhcnMgdG8gYmUgdGhlIG9ubHkKKyAgIyB3YXkgdG8gZ2V0IHRoZSB2YWx1ZSBvZiAkVklNIGhlcmUhPworICBSZWFkSU5JU3RyICRJTlNURElSICRURU1QXHZpbWluaS5pbmkgdmltaW5pIGRpcgorICBEZWxldGUgJFRFTVBcdmltaW5pLmluaQorCisgICMgSWYgUmVhZElOSVN0ciBmYWlsZWQgb3IgZGlkIG5vdCBmaW5kIGEgcGF0aDogdXNlIHRoZSBkZWZhdWx0IGRpci4KKyAgU3RyQ21wICRJTlNURElSICIiIDAgSW5pT0sKKyAgU3RyQ3B5ICRJTlNURElSICIkUFJPR1JBTUZJTEVTXFZpbSIKKyAgSW5pT0s6CisKKyAgIyBTaG91bGQgY2hlY2sgZm9yIHRoZSB2YWx1ZSBvZiAkVklNIGFuZCB1c2UgaXQuICBVbmZvcnR1bmF0ZWx5IEkgZG9uJ3Qga25vdworICAjIGhvdyB0byBvYnRhaW4gdGhlIHZhbHVlIG9mICRWSU0KKyAgIyBJZkZpbGVFeGlzdHMgIiRWSU0iIDAgTm9fVmltCisgICMgICBTdHJDcHkgJElOU1RESVIgIiRWSU0iCisgICMgTm9fVmltOgorCisgICMgVXNlciB2YXJpYWJsZXM6CisgICMgJDAgLSBob2xkcyB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlcyBhcmUgaW5zdGFsbGVkIHRvCisgICMgJDEgLSBob2xkcyB0aGUgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gaW5zdGFsbC5leGUuICBTdGFydHMgd2l0aCBPTEUKKyAgIyAgICAgIHJlZ2lzdHJhdGlvbiAoc2luY2UgYSBub24tT0xFIGd2aW0gd2lsbCBub3QgY29tcGxhaW4sIGFuZCB3ZSB3YW50IHRvCisgICMgICAgICBhbHdheXMgcmVnaXN0ZXIgYW4gT0xFIGd2aW0pLgorICAjICQyIC0gaG9sZHMgdGhlIG5hbWVzIHRvIGNyZWF0ZSBiYXRjaCBmaWxlcyBmb3IKKyAgU3RyQ3B5ICQwICIkSU5TVERJUlx2aW0ke1ZFUl9NQUpPUn0ke1ZFUl9NSU5PUn0iCisgIFN0ckNweSAkMSAiLXJlZ2lzdGVyLU9MRSIKKyAgU3RyQ3B5ICQyICJndmltIGV2aW0gZ3ZpZXcgZ3ZpbWRpZmYiCisKK0Z1bmN0aW9uRW5kCisKK0Z1bmN0aW9uIC5vblVzZXJBYm9ydAorICBNZXNzYWdlQm94IE1CX1lFU05PfE1CX0lDT05RVUVTVElPTiAiQWJvcnQgaW5zdGFsbD8iIElEWUVTIE5vQ2FuY2VsQWJvcnQKKyAgICBBYm9ydCA7IGNhdXNlcyBpbnN0YWxsZXIgdG8gbm90IHF1aXQuCisgIE5vQ2FuY2VsQWJvcnQ6CitGdW5jdGlvbkVuZAorCisjIFdlIG9ubHkgYWNjZXB0IHRoZSBkaXJlY3RvcnkgaWYgaXQgZW5kcyBpbiAidmltIi4gIFVzaW5nIC5vblZlcmlmeUluc3REaXIgaGFzCisjIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCB0aGUgYnJvd3NlIGRpYWxvZyBpcyBkaWZmaWN1bHQgdG8gdXNlLgorRnVuY3Rpb24gQ2hlY2tJbnN0YWxsRGlyCisgIFN0ckNweSAkMCAkSU5TVERJUiAzIC0zCisgIFN0ckNtcCAkMCAidmltIiBQYXRoR29vZAorICAgIE1lc3NhZ2VCb3ggTUJfT0sgIlRoZSBwYXRoIG11c3QgZW5kIGluICd2aW0nLiIKKyAgICBBYm9ydAorICBQYXRoR29vZDoKK0Z1bmN0aW9uRW5kCisKK0Z1bmN0aW9uIC5vbkluc3RTdWNjZXNzCisgIFdyaXRlVW5pbnN0YWxsZXIgdmltJHtWRVJfTUFKT1J9JHtWRVJfTUlOT1J9XHVuaW5zdGFsbC1ndWkuZXhlCisgIE1lc3NhZ2VCb3ggTUJfWUVTTk98TUJfSUNPTlFVRVNUSU9OIFwKKwkiVGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzIGhhcyBiZWVuIHN1Y2Nlc3NmdWxsLiBIYXBweSBWaW1taW5nISBcCisJJFxuJFxuIERvIHlvdSB3YW50IHRvIHNlZSB0aGUgUkVBRE1FIGZpbGUgbm93PyIgSUROTyBOb1JlYWRtZQorICAgICAgRXhlYyAnJDBcZ3ZpbS5leGUgLVIgIiQwXFJFQURNRS50eHQiJworICBOb1JlYWRtZToKK0Z1bmN0aW9uRW5kCisKK0Z1bmN0aW9uIC5vbkluc3RGYWlsZWQKKyAgTWVzc2FnZUJveCBNQl9PS3xNQl9JQ09ORVhDTEFNQVRJT04gIkluc3RhbGxhdGlvbiBmYWlsZWQuIEJldHRlciBsdWNrIG5leHQgdGltZS4iCitGdW5jdGlvbkVuZAorCitGdW5jdGlvbiB1bi5vblVuSW5zdFN1Y2Nlc3MKKyAgTWVzc2FnZUJveCBNQl9PS3xNQl9JQ09OSU5GT1JNQVRJT04gXAorICAiVmltICR7VkVSX01BSk9SfS4ke1ZFUl9NSU5PUn0gaGFzIGJlZW4gKHBhcnRseSkgcmVtb3ZlZCBmcm9tIHlvdXIgc3lzdGVtIgorRnVuY3Rpb25FbmQKKworRnVuY3Rpb24gdW4uR2V0UGFyZW50CisgIEV4Y2ggJDAgOyBvbGQgJDAgaXMgb24gdG9wIG9mIHN0YWNrCisgIFB1c2ggJDEKKyAgUHVzaCAkMgorICBTdHJDcHkgJDEgLTEKKyAgbG9vcDoKKyAgICBTdHJDcHkgJDIgJDAgMSAkMQorICAgIFN0ckNtcCAkMiAiIiBleGl0CisgICAgU3RyQ21wICQyICJcIiBleGl0CisgICAgSW50T3AgJDEgJDEgLSAxCisgIEdvdG8gbG9vcAorICBleGl0OgorICAgIFN0ckNweSAkMCAkMCAkMQorICAgIFBvcCAkMgorICAgIFBvcCAkMQorICAgIEV4Y2ggJDAgOyBwdXQgJDAgb24gdG9wIG9mIHN0YWNrLCByZXN0b3JlICQwIHRvIG9yaWdpbmFsIHZhbHVlCitGdW5jdGlvbkVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitTZWN0aW9uICJWaW0gZXhlY3V0YWJsZXMgYW5kIHJ1bnRpbWUgZmlsZXMiCisJU2VjdGlvbkluIDEgMiAzCisKKwkjIHdlIG5lZWQgYWxzbyB0aGlzIGhlcmUgaWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgaW5zdGRpcgorCVN0ckNweSAkMCAiJElOU1RESVJcdmltJHtWRVJfTUFKT1J9JHtWRVJfTUlOT1J9IgorCisJU2V0T3V0UGF0aCAkMAorCUZpbGUgL29uYW1lPWd2aW0uZXhlICR7VklNU1JDfVxndmltX29sZS5leGUKKwlGaWxlIC9vbmFtZT1pbnN0YWxsLmV4ZSAke1ZJTVNSQ31caW5zdGFsbHczMi5leGUKKwlGaWxlIC9vbmFtZT11bmluc3RhbC5leGUgJHtWSU1TUkN9XHVuaW5zdGFsdzMyLmV4ZQorCUZpbGUgJHtWSU1TUkN9XHZpbXJ1bi5leGUKKwlGaWxlIC9vbmFtZT14eGQuZXhlICR7VklNU1JDfVx4eGR3MzIuZXhlCisJRmlsZSAke1ZJTVRPT0xTfVxkaWZmLmV4ZQorCUZpbGUgJHtWSU1SVH1cdmltdHV0b3IuYmF0CisJRmlsZSAke1ZJTVJUfVxSRUFETUUudHh0CisJRmlsZSAuLlx1bmluc3RhbC50eHQKKwlGaWxlICR7VklNUlR9XCoudmltCisJRmlsZSAke1ZJTVJUfVxyZ2IudHh0CisKKwlTZXRPdXRQYXRoICQwXGNvbG9ycworCUZpbGUgJHtWSU1SVH1cY29sb3JzXCouKgorCisJU2V0T3V0UGF0aCAkMFxjb21waWxlcgorCUZpbGUgJHtWSU1SVH1cY29tcGlsZXJcKi4qCisKKwlTZXRPdXRQYXRoICQwXGRvYworCUZpbGUgJHtWSU1SVH1cZG9jXCoudHh0CisJRmlsZSAke1ZJTVJUfVxkb2NcdGFncworCisJU2V0T3V0UGF0aCAkMFxmdHBsdWdpbgorCUZpbGUgJHtWSU1SVH1cZnRwbHVnaW5cKi4qCisKKwlTZXRPdXRQYXRoICQwXGluZGVudAorCUZpbGUgJHtWSU1SVH1caW5kZW50XCouKgorCisJU2V0T3V0UGF0aCAkMFxtYWNyb3MKKwlGaWxlICR7VklNUlR9XG1hY3Jvc1wqLioKKworCVNldE91dFBhdGggJDBccGx1Z2luCisJRmlsZSAke1ZJTVJUfVxwbHVnaW5cKi4qCisKKwlTZXRPdXRQYXRoICQwXHN5bnRheAorCUZpbGUgJHtWSU1SVH1cc3ludGF4XCouKgorCisJU2V0T3V0UGF0aCAkMFx0b29scworCUZpbGUgJHtWSU1SVH1cdG9vbHNcKi4qCisKKwlTZXRPdXRQYXRoICQwXHR1dG9yCisJRmlsZSAke1ZJTVJUfVx0dXRvclwqLioKK1NlY3Rpb25FbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworU2VjdGlvbiAiVmltIGNvbnNvbGUgcHJvZ3JhbSAodmltLmV4ZSkiCisJU2VjdGlvbkluIDEgMworCisJU2V0T3V0UGF0aCAkMAorCVJlYWRSZWdTdHIgJFIwIEhLTE0gXAorCSAgICJTT0ZUV0FSRVxNaWNyb3NvZnRcV2luZG93cyBOVFxDdXJyZW50VmVyc2lvbiIgQ3VycmVudFZlcnNpb24KKwlJZkVycm9ycyAwIGxibF93aW5udAorCSAgICAjIFdpbmRvd3MgOTUvOTgvTUUKKwkgICAgRmlsZSAvb25hbWU9dmltLmV4ZSAke1ZJTVNSQ31cdmltZDMyLmV4ZQorCSAgICBHb3RvIGxibF9kb25lCisJbGJsX3dpbm50OgorCSAgICAjIFdpbmRvd3MgTlQvMjAwMC9YVAorCSAgICBGaWxlIC9vbmFtZT12aW0uZXhlICR7VklNU1JDfVx2aW13MzIuZXhlCisJbGJsX2RvbmU6CisJU3RyQ3B5ICQyICIkMiB2aW0gdmlldyB2aW1kaWZmIgorU2VjdGlvbkVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitTZWN0aW9uICJDcmVhdGUgLmJhdCBmaWxlcyBmb3IgY29tbWFuZCBsaW5lIHVzZSIKKwlTZWN0aW9uSW4gMworCisJU3RyQ3B5ICQxICIkMSAtY3JlYXRlLWJhdGZpbGVzICQyIgorU2VjdGlvbkVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitTZWN0aW9uICJDcmVhdGUgaWNvbnMgb24gdGhlIERlc2t0b3AiCisJU2VjdGlvbkluIDEgMworCisJU3RyQ3B5ICQxICIkMSAtaW5zdGFsbC1pY29ucyIKK1NlY3Rpb25FbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworU2VjdGlvbiAiQWRkIFZpbSB0byB0aGUgU3RhcnQgTWVudSIKKwlTZWN0aW9uSW4gMSAzCisKKwlTdHJDcHkgJDEgIiQxIC1hZGQtc3RhcnQtbWVudSIKK1NlY3Rpb25FbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworU2VjdGlvbiAiQWRkIGFuIEVkaXQtd2l0aC1WaW0gY29udGV4dCBtZW51IGVudHJ5IgorCVNlY3Rpb25JbiAxIDMKKworCSMgQmUgYXdhcmUgb2YgdGhpcyBzZXF1ZW5jZSBvZiBldmVudHM6CisJIyAtIHVzZXIgdW5pbnN0YWxscyBWaW0sIGd2aW1leHQuZGxsIGNhbid0IGJlIHJlbW92ZWQgKGl0J3MgaW4gdXNlKSBhbmQKKwkjICAgaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQgYXQgbmV4dCByZWJvb3QuCisJIyAtIHVzZXIgaW5zdGFsbHMgVmltIGluIHNhbWUgZGlyZWN0b3J5LCBndmltZXh0LmRsbCBzdGlsbCBleGlzdHMuCisJIyBJZiB3ZSBub3cgc2tpcCBpbnN0YWxsaW5nIGd2aW1leHQuZGxsLCBpdCB3aWxsIGRpc2FwcGVhciBhdCB0aGUgbmV4dAorCSMgcmVib290LiAgVGh1cyB3aGVuIGNvcHlpbmcgZ3ZpbWV4dC5kbGwgZmFpbHMgYWx3YXlzIHNjaGVkdWxlIGl0IHRvIGJlCisJIyBpbnN0YWxsZWQgYXQgdGhlIG5leHQgcmVib290LiAgQ2FuJ3QgdXNlIFVwZ3JhZGVETEwhCisJIyBXZSBkb24ndCBhc2sgdGhlIHVzZXIgdG8gcmVib290LCB0aGUgb2xkIGRsbCB3aWxsIGtlZXAgb24gd29ya2luZy4KKwlTZXRPdXRQYXRoICQwCisJQ2xlYXJFcnJvcnMKKwlTZXRPdmVyd3JpdGUgdHJ5CisJRmlsZSAvb25hbWU9Z3ZpbWV4dC5kbGwgJHtWSU1TUkN9XEd2aW1FeHRcZ3ZpbWV4dC5kbGwKKwlJZkVycm9ycyAwIEd2aW1FeHREb25lCisKKwkjIENhbid0IGNvcHkgZ3ZpbWV4dC5kbGwsIGNyZWF0ZSBpdCB1bmRlciBhbm90aGVyIG5hbWUgYW5kIHJlbmFtZSBpdCBvbgorCSMgbmV4dCByZWJvb3QuCisJR2V0VGVtcEZpbGVOYW1lICQzICQwCisJRmlsZSAvb25hbWU9JDMgJHtWSU1TUkN9XEd2aW1FeHRcZ3ZpbWV4dC5kbGwKKwlSZW5hbWUgL1JFQk9PVE9LICQzICQwXGd2aW1leHQuZGxsCisKKwlHdmltRXh0RG9uZToKKwlTZXRPdmVyd3JpdGUgbGFzdHVzZWQKKworCSMgV2UgZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIGVudHJ5IGZvciB0aGUgIk9wZW4gV2l0aC4uLiIgbWVudSwgYXNzdW1lCisJIyB0aGUgdXNlciB3YW50cyBlaXRoZXIgYm90aCBvciBub25lLgorCVN0ckNweSAkMSAiJDEgLWluc3RhbGwtcG9wdXAgLWluc3RhbGwtb3BlbndpdGgiCitTZWN0aW9uRW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1NlY3Rpb24gIkNyZWF0ZSBhIF92aW1yYyBpZiBpdCBkb2Vzbid0IGV4aXN0IgorCVNlY3Rpb25JbiAxIDMKKworCVN0ckNweSAkMSAiJDEgLWNyZWF0ZS12aW1yYyIKK1NlY3Rpb25FbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworU2VjdGlvbiAiQ3JlYXRlIHBsdWdpbiBkaXJlY3RvcmllcyBpbiBIT01FIG9yIFZJTSIKKwlTZWN0aW9uSW4gMSAzCisKKwlTdHJDcHkgJDEgIiQxIC1jcmVhdGUtZGlyZWN0b3JpZXMgaG9tZSIKK1NlY3Rpb25FbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworU2VjdGlvbiAiQ3JlYXRlIHBsdWdpbiBkaXJlY3RvcmllcyBpbiBWSU0iCisJU2VjdGlvbkluIDMKKworCVN0ckNweSAkMSAiJDEgLWNyZWF0ZS1kaXJlY3RvcmllcyB2aW0iCitTZWN0aW9uRW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1NlY3Rpb24gIlZpc1ZpbSBFeHRlbnNpb24gZm9yIE1TIFZpc3VhbCBTdHVkaW8iCisJU2VjdGlvbkluIDMKKworCVNldE91dFBhdGggJDAKKwkhaW5zZXJ0bWFjcm8gVXBncmFkZURMTCAiJHtWSU1TUkN9XFZpc1ZpbVxWaXNWaW0uZGxsIiAiJDBcVmlzVmltLmRsbCIgIiQwIgorCUZpbGUgJHtWSU1TUkN9XFZpc1ZpbVxSRUFETUVfVmlzVmltLnR4dAorU2VjdGlvbkVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCishaWZkZWYgSEFWRV9OTFMKKwlTZWN0aW9uICJOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydCIKKwkJU2VjdGlvbkluIDEgMworCisJCVNldE91dFBhdGggJDBcbGFuZworCQlGaWxlIC9yICR7VklNUlR9XGxhbmdcKi4qCisJCVNldE91dFBhdGggJDBca2V5bWFwCisJCUZpbGUgJHtWSU1SVH1ca2V5bWFwXFJFQURNRS50eHQKKwkJRmlsZSAke1ZJTVJUfVxrZXltYXBcKi52aW0KKwkJU2V0T3V0UGF0aCAkMAorCQlGaWxlICR7VklNUlR9XGxpYmludGwuZGxsCisJU2VjdGlvbkVuZAorIWVuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1NlY3Rpb24gLWNhbGxfaW5zdGFsbF9leGUKKwlTZXRPdXRQYXRoICQwCisJRXhlY1dhaXQgIiQwXGluc3RhbGwuZXhlICQxIgorU2VjdGlvbkVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitTZWN0aW9uIC1wb3N0CisJQnJpbmdUb0Zyb250CitTZWN0aW9uRW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1NlY3Rpb24gVW5pbnN0YWxsCisJIyBBcHBhcmVudGx5ICRJTlNURElSIGlzIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSB1bmluc3RhbGxlciBpcworCSMgY3JlYXRlZC4gIFRodXMgdGhlICJ2aW02MSIgZGlyZWN0b3J5IGlzIGluY2x1ZGVkIGluIGl0LgorCVN0ckNweSAkMCAiJElOU1RESVIiCisKKwkjIElmIFZpc1ZpbSB3YXMgaW5zdGFsbGVkLCB1bnJlZ2lzdGVyIHRoZSBETEwuCisJSWZGaWxlRXhpc3RzICIkMFxWaXNWaW0uZGxsIiBIYXNfVmlzVmltIE5vX1Zpc1ZpbQorCUhhc19WaXNWaW06CisJICAgRXhlY1dhaXQgInJlZ3N2cjMyLmV4ZSAvdSAvcyAkMFxWaXNWaW0uZGxsIgorCisJTm9fVmlzVmltOgorCisJIyBkZWxldGUgdGhlIGNvbnRleHQgbWVudSBlbnRyeSBhbmQgYmF0Y2ggZmlsZXMKKwlFeGVjV2FpdCAiJDBcdW5pbnN0YWwuZXhlIC1uc2lzIgorCisJIyBXZSBtYXkgaGF2ZSBiZWVuIHB1dCB0byB0aGUgYmFja2dyb3VuZCB3aGVuIHVuaW5zdGFsbCBkaWQgc29tZXRoaW5nLgorCUJyaW5nVG9Gcm9udAorCisJIyBhc2sgdGhlIHVzZXIgaWYgdGhlIFZpbSB2ZXJzaW9uIGRpciBtdXN0IGJlIHJlbW92ZWQKKwlNZXNzYWdlQm94IE1CX1lFU05PfE1CX0lDT05RVUVTVElPTiBcCisJICAiV291bGQgeW91IGxpa2UgdG8gZGVsZXRlICQwPyRcbiBcCisJICAgJFxuSXQgY29udGFpbnMgdGhlIFZpbSBleGVjdXRhYmxlcyBhbmQgcnVudGltZSBmaWxlcy4iIElETk8gTm9SZW1vdmVFeGVzCisKKwlEZWxldGUgL1JFQk9PVE9LICQwXCouZGxsCisJQ2xlYXJFcnJvcnMKKwkjIFJlbW92ZSBldmVyeXRoaW5nIGJ1dCAqLmRsbCBmaWxlcy4gIEF2b2lkcyB0aGF0CisJIyBhIGxvdCByZW1haW5zIHdoZW4gZ3ZpbWV4dC5kbGwgY2Fubm90IGJlIGRlbGV0ZWQuCisJUk1EaXIgL3IgJDBcY29sb3JzCisJUk1EaXIgL3IgJDBcY29tcGlsZXIKKwlSTURpciAvciAkMFxkb2MKKwlSTURpciAvciAkMFxmdHBsdWdpbgorCVJNRGlyIC9yICQwXGluZGVudAorCVJNRGlyIC9yICQwXG1hY3JvcworCVJNRGlyIC9yICQwXHBsdWdpbgorCVJNRGlyIC9yICQwXHN5bnRheAorCVJNRGlyIC9yICQwXHRvb2xzCisJUk1EaXIgL3IgJDBcdHV0b3IKKwlSTURpciAvciAkMFxWaXNWaW0KKwlSTURpciAvciAkMFxsYW5nCisJUk1EaXIgL3IgJDBca2V5bWFwCisJRGVsZXRlICQwXCouZXhlCisJRGVsZXRlICQwXCouYmF0CisJRGVsZXRlICQwXCoudmltCisJRGVsZXRlICQwXCoudHh0CisKKwlJZkVycm9ycyBFcnJvck1lc3MgTm9FcnJvck1lc3MKKwkgIEVycm9yTWVzczoKKwkgICAgTWVzc2FnZUJveCBNQl9PS3xNQl9JQ09ORVhDTEFNQVRJT04gXAorCSAgICAgICJTb21lIGZpbGVzIGluICQwIGhhdmUgbm90IGJlZW4gZGVsZXRlZCEkXG5Zb3UgbXVzdCBkbyBpdCBtYW51YWxseS4iCisJICBOb0Vycm9yTWVzczoKKworCSMgTm8gZXJyb3IgbWVzc2FnZSBpZiB0aGUgInZpbTYyIiBkaXJlY3RvcnkgY2FuJ3QgYmUgcmVtb3ZlZCwgdGhlCisJIyBndmltZXh0LmRsbCBtYXkgc3RpbGwgYmUgdGhlcmUuCisJUk1EaXIgJDAKKworCU5vUmVtb3ZlRXhlczoKKwkjIGdldCB0aGUgcGFyZW50IGRpciBvZiB0aGUgaW5zdGFsbGF0aW9uCisJUHVzaCAkSU5TVERJUgorCUNhbGwgdW4uR2V0UGFyZW50CisJUG9wICQwCisJU3RyQ3B5ICQxICQwCisKKwkjIGlmIGEgcGx1Z2luIGRpciB3YXMgY3JlYXRlZCBhdCBpbnN0YWxsYXRpb24gYXNrIHRoZSB1c2VyIHRvIHJlbW92ZSBpdAorCSMgZmlyc3QgbG9vayBpbiB0aGUgcm9vdCBvZiB0aGUgaW5zdGFsbGF0aW9uIHRoZW4gaW4gSE9NRQorCUlmRmlsZUV4aXN0cyAkMVx2aW1maWxlcyBBc2tSZW1vdmUgMAorCSAgICBSZWFkRW52U3RyICQxICJIT01FIgorCSAgICBTdHJDbXAgJDEgIiIgTm9SZW1vdmUgMAorCisJICAgIElmRmlsZUV4aXN0cyAkMVx2aW1maWxlcyAwIE5vUmVtb3ZlCisKKwkgIEFza1JlbW92ZToKKwkgICAgTWVzc2FnZUJveCBNQl9ZRVNOT3xNQl9JQ09OUVVFU1RJT04gXAorCSAgICAgICJSZW1vdmUgYWxsIGZpbGVzIGluIHlvdXIgJDFcdmltZmlsZXMgZGlyZWN0b3J5PyBcCisJICAgICAgJFxuSWYgeW91IGhhdmUgY3JlYXRlZCBzb21ldGhpbmcgdGhlcmUgdGhhdCB5b3Ugd2FudCB0byBrZWVwLCBjbGljayBObyIgSUROTyBGaW4KKwkgICAgUk1EaXIgL3IgJDFcdmltZmlsZXMKKwkgIE5vUmVtb3ZlOgorCisJIyBhc2sgdGhlIHVzZXIgaWYgdGhlIFZpbSByb290IGRpciBtdXN0IGJlIHJlbW92ZWQKKwlNZXNzYWdlQm94IE1CX1lFU05PfE1CX0lDT05RVUVTVElPTiBcCisJICAiV291bGQgeW91IGxpa2UgdG8gcmVtb3ZlICQwPyRcbiBcCisJICAgJFxuSXQgY29udGFpbnMgeW91ciBWaW0gY29uZmlndXJhdGlvbiBmaWxlcyEiIElETk8gTm9EZWxldGUKKwkgICBSTURpciAvciAkMCA7IHNraXBwZWQgaWYgbm8KKwlOb0RlbGV0ZToKKworCUZpbjoKKwlDYWxsIHVuLm9uVW5JbnN0U3VjY2VzcworCitTZWN0aW9uRW5kCmRpZmYgLS1naXQgYS9waXhtYXBzL2FsZXJ0LnhwbSBiL3BpeG1hcHMvYWxlcnQueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Y2ZhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL2FsZXJ0LnhwbQpAQCAtMCwwICsxLDQ0IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogYWxlcnRfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjM0IDM0IDQgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorIlgJcyBpY29uQ29sb3I2CW0gd2hpdGUJYyAjRkZGRjAwIiwKKyJvCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgIC5YWFguICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgLlhYWFhYLm8gICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgLlhYWFhYLm9vICAgICAgICAgICAgICIsCisiICAgICAgICAgICAuWFhYWFhYWC5vbyAgICAgICAgICAgICIsCisiICAgICAgICAgICAuWFhYWFhYWC5vbyAgICAgICAgICAgICIsCisiICAgICAgICAgIC5YWFhYWFhYWFgub28gICAgICAgICAgICIsCisiICAgICAgICAgIC5YWFhYWFhYWFgub28gICAgICAgICAgICIsCisiICAgICAgICAgLlhYWFhYWFhYWFhYLm9vICAgICAgICAgICIsCisiICAgICAgICAgLlhYWFguLi5YWFhYLm9vICAgICAgICAgICIsCisiICAgICAgICAuWFhYWC4uLi4uWFhYWC5vbyAgICAgICAgICIsCisiICAgICAgICAuWFhYWC4uLi4uWFhYWC5vbyAgICAgICAgICIsCisiICAgICAgIC5YWFhYWC4uLi4uWFhYWFgub28gICAgICAgICIsCisiICAgICAgIC5YWFhYWC4uLi4uWFhYWFgub28gICAgICAgICIsCisiICAgICAgLlhYWFhYWC4uLi4uWFhYWFhYLm9vICAgICAgICIsCisiICAgICAgLlhYWFhYWC4uLi4uWFhYWFhYLm9vICAgICAgICIsCisiICAgICAuWFhYWFhYWFguLi5YWFhYWFhYWC5vbyAgICAgICIsCisiICAgICAuWFhYWFhYWFguLi5YWFhYWFhYWC5vbyAgICAgICIsCisiICAgIC5YWFhYWFhYWFguLi5YWFhYWFhYWFgub28gICAgICIsCisiICAgIC5YWFhYWFhYWFhYLlhYWFhYWFhYWFgub28gICAgICIsCisiICAgLlhYWFhYWFhYWFhYLlhYWFhYWFhYWFhYLm9vICAgICIsCisiICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYLm9vICAgICIsCisiICAuWFhYWFhYWFhYWFhYLi5YWFhYWFhYWFhYWC5vbyAgICIsCisiICAuWFhYWFhYWFhYWFguLi4uWFhYWFhYWFhYWC5vbyAgICIsCisiIC5YWFhYWFhYWFhYWFguLi4uWFhYWFhYWFhYWFgub28gICIsCisiIC5YWFhYWFhYWFhYWFhYLi5YWFhYWFhYWFhYWFgub28gICIsCisiIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgub29vICIsCisiIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgub29vICIsCisiICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWC5vb29vICIsCisiICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLm9vb29vICIsCisiICAgICBvb29vb29vb29vb29vb29vb29vb29vb29vb28gICIsCisiICAgICAgb29vb29vb29vb29vb29vb29vb29vb29vbyAgICIsCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy9lcnJvci54cG0gYi9waXhtYXBzL2Vycm9yLnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDY2ZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvcGl4bWFwcy9lcnJvci54cG0KQEAgLTAsMCArMSw0NCBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIGVycm9yX3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIzNCAzNCA0IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyBpY29uQ29sb3IzCW0gYmxhY2sJYyAjRkYwMDAwIiwKKyJYCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorIm8JcyBpY29uQ29sb3IyCW0gd2hpdGUJYyAjRkZGRkZGIiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgIC4uLi4uLi4uICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAuLi4uLi4uLi4uLi4gICAgICAgICAgICAiLAorIiAgICAgICAgLi4uLi4uLi4uLi4uLi4uLiAgICAgICAgICAiLAorIiAgICAgICAuLi4uLi4uLi4uLi4uLi4uLi4gICAgICAgICAiLAorIiAgICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uWCAgICAgICAiLAorIiAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlggICAgICAiLAorIiAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5YICAgICAiLAorIiAgIC4uLi4uLi5vLi4uLi4uLi4uLm8uLi4uLi4uWCAgICAiLAorIiAgIC4uLi4uLm9vby4uLi4uLi4ub29vLi4uLi4uWCAgICAiLAorIiAgLi4uLi4ub29vb28uLi4uLi5vb29vby4uLi4uLlggICAiLAorIiAgLi4uLi4uLm9vb29vLi4uLm9vb29vLi4uLi4uLlggICAiLAorIiAuLi4uLi4uLi5vb29vby4ub29vb28uLi4uLi4uLi5YICAiLAorIiAuLi4uLi4uLi4ub29vb29vb29vby4uLi4uLi4uLi5YICAiLAorIiAuLi4uLi4uLi4uLm9vb29vb29vLi4uLi4uLi4uLi5YWCAiLAorIiAuLi4uLi4uLi4uLi5vb29vb28uLi4uLi4uLi4uLi5YWCAiLAorIiAuLi4uLi4uLi4uLi5vb29vb28uLi4uLi4uLi4uLi5YWCAiLAorIiAuLi4uLi4uLi4uLm9vb29vb29vLi4uLi4uLi4uLi5YWCAiLAorIiAuLi4uLi4uLi4ub29vb29vb29vby4uLi4uLi4uLi5YWCAiLAorIiAuLi4uLi4uLi5vb29vby4ub29vb28uLi4uLi4uLi5YWCAiLAorIiAgLi4uLi4uLm9vb29vLi4uLm9vb29vLi4uLi4uLlhYICAiLAorIiAgLi4uLi4ub29vb28uLi4uLi5vb29vby4uLi4uLlhYICAiLAorIiAgIC4uLi4uLm9vby4uLi4uLi4ub29vLi4uLi4uWFhYICAiLAorIiAgIC4uLi4uLi5vLi4uLi4uLi4uLm8uLi4uLi4uWFggICAiLAorIiAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5YWFggICAiLAorIiAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlhYWCAgICAiLAorIiAgICAgWC4uLi4uLi4uLi4uLi4uLi4uLi4uWFhYICAgICAiLAorIiAgICAgIFguLi4uLi4uLi4uLi4uLi4uLi5YWFggICAgICAiLAorIiAgICAgICBYLi4uLi4uLi4uLi4uLi4uLlhYWCAgICAgICAiLAorIiAgICAgICAgWFguLi4uLi4uLi4uLi5YWFhYICAgICAgICAiLAorIiAgICAgICAgICBYWC4uLi4uLi4uWFhYWFggICAgICAgICAiLAorIiAgICAgICAgICAgIFhYWFhYWFhYWFhYICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgWFhYWFhYWCAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL3BpeG1hcHMvZ2VuLWlubGluZS1waXhidWZzLnNoIGIvcGl4bWFwcy9nZW4taW5saW5lLXBpeGJ1ZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxMWEyMwotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvZ2VuLWlubGluZS1waXhidWZzLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMhIC9iaW4vc2gKKworcHJlZml4PXN0b2NrXworbGlzdD0KKworZm9yIGZpbGUgaW4gIiRAIgorZG8KKyAgICBuYW1lPWBlY2hvICIkZmlsZSIgfCBzZWQgJ3N8LXxffGc7IHN8Xi4qL3x8OyBzfFwuLiokfHwnYAorICAgIGxpc3Q9IiRsaXN0ICRwcmVmaXgkbmFtZSAkZmlsZSIKK2RvbmUKKworZ2RrLXBpeGJ1Zi1jc291cmNlIC0tcmF3IC0tc3RhdGljIC0tYnVpbGQtbGlzdCAkbGlzdAorCmRpZmYgLS1naXQgYS9waXhtYXBzL2dlbmVyaWMueHBtIGIvcGl4bWFwcy9nZW5lcmljLnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTA2MTczCi0tLSAvZGV2L251bGwKKysrIGIvcGl4bWFwcy9nZW5lcmljLnhwbQpAQCAtMCwwICsxLDQ0IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogZ2VuZXJpY194cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMzQgMzQgNCAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgbm9uZQltIG5vbmUJYyBub25lIiwKKyIuCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorIlgJcyBpY29uQ29sb3IyCW0gd2hpdGUJYyAjRkZGRkZGIiwKKyJvCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAuLi4uLi4uLiAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAuLi5YWFhYWFhYWC4uLiAgICAgICAgICAgIiwKKyIgICAgICAgLi5YWFhYWFhYWFhYWFhYWC4uICAgICAgICAgIiwKKyIgICAgICAuWFhYWFhYWFhYWFhYWFhYWFhYLiAgICAgICAgIiwKKyIgICAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWG8gICAgICAgIiwKKyIgICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvICAgICAgIiwKKyIgICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYbyAgICAgIiwKKyIgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8gICAgIiwKKyIgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8uICAgIiwKKyIgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvLiAgIiwKKyIgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvLiAgIiwKKyIgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvLi4gIiwKKyIgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvLi4gIiwKKyIgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvLi4gIiwKKyIgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvLi4gIiwKKyIgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvLi4gIiwKKyIgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8uLi4gIiwKKyIgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8uLi4gIiwKKyIgICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYby4uLiAgIiwKKyIgICAgb1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhvLi4uLiAgIiwKKyIgICAgIG9YWFhYWFhYWFhYWFhYWFhYWFhYWG8uLi4uICAgIiwKKyIgICAgICBvWFhYWFhYWFhYWFhYWFhYWFhYby4uLi4gICAgIiwKKyIgICAgICAgb29YWFhYWFhYWFhYWFhYWG9vLi4uLiAgICAgIiwKKyIgICAgICAgIC5vb29YWFhYWFhYWG9vby4uLi4uICAgICAgIiwKKyIgICAgICAgICAuLi5vb29YWFhYby4uLi4uLi4gICAgICAgIiwKKyIgICAgICAgICAgIC4uLi5vWFhYby4uLi4uICAgICAgICAgIiwKKyIgICAgICAgICAgICAgIC5vWFhYby4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgb1hYby4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgIG9Yby4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICBvby4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAgIC4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL2luZm8ueHBtIGIvcGl4bWFwcy9pbmZvLnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmFjNzViCi0tLSAvZGV2L251bGwKKysrIGIvcGl4bWFwcy9pbmZvLnhwbQpAQCAtMCwwICsxLDQ0IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogaW5mb194cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMzQgMzQgNCAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgbm9uZQltIG5vbmUJYyBub25lIiwKKyIuCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorIlgJcyBpY29uQ29sb3IyCW0gd2hpdGUJYyAjRkZGRkZGIiwKKyJvCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAuLi4uLi4uLiAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAuLi5YWFhYWFhYWC4uLiAgICAgICAgICAgIiwKKyIgICAgICAgLi5YWFhYWFhYWFhYWFhYWC4uICAgICAgICAgIiwKKyIgICAgICAuWFhYWFhYWFhYWFhYWFhYWFhYLiAgICAgICAgIiwKKyIgICAgIC5YWFhYWFhYWG9vb29YWFhYWFhYWG8gICAgICAgIiwKKyIgICAgLlhYWFhYWFhYb29vb29vWFhYWFhYWFhvICAgICAgIiwKKyIgICAuWFhYWFhYWFhYb29vb29vWFhYWFhYWFhYbyAgICAgIiwKKyIgIC5YWFhYWFhYWFhYWG9vb29YWFhYWFhYWFhYWG8gICAgIiwKKyIgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8uICAgIiwKKyIgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvLiAgIiwKKyIgLlhYWFhYWFhYWFhvb29vb29vWFhYWFhYWFhYWFhvLiAgIiwKKyIgLlhYWFhYWFhYWFhYWG9vb29vWFhYWFhYWFhYWFhvLi4gIiwKKyIgLlhYWFhYWFhYWFhYWG9vb29vWFhYWFhYWFhYWFhvLi4gIiwKKyIgLlhYWFhYWFhYWFhYWG9vb29vWFhYWFhYWFhYWFhvLi4gIiwKKyIgLlhYWFhYWFhYWFhYWG9vb29vWFhYWFhYWFhYWFhvLi4gIiwKKyIgLlhYWFhYWFhYWFhYWG9vb29vWFhYWFhYWFhYWFhvLi4gIiwKKyIgIC5YWFhYWFhYWFhYWG9vb29vWFhYWFhYWFhYWG8uLi4gIiwKKyIgIC5YWFhYWFhYWFhYWG9vb29vWFhYWFhYWFhYWG8uLi4gIiwKKyIgICAuWFhYWFhYWFhYWG9vb29vWFhYWFhYWFhYby4uLiAgIiwKKyIgICAgb1hYWFhYWFhvb29vb29vb29YWFhYWFhvLi4uLiAgIiwKKyIgICAgIG9YWFhYWFhYWFhYWFhYWFhYWFhYWG8uLi4uICAgIiwKKyIgICAgICBvWFhYWFhYWFhYWFhYWFhYWFhYby4uLi4gICAgIiwKKyIgICAgICAgb29YWFhYWFhYWFhYWFhYWG9vLi4uLiAgICAgIiwKKyIgICAgICAgIC5vb29YWFhYWFhYWG9vby4uLi4uICAgICAgIiwKKyIgICAgICAgICAuLi5vb29YWFhYby4uLi4uLi4gICAgICAgIiwKKyIgICAgICAgICAgIC4uLi5vWFhYby4uLi4uICAgICAgICAgIiwKKyIgICAgICAgICAgICAgIC5vWFhYby4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgb1hYby4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgIG9Yby4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICBvby4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAgIC4uICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3F1ZXN0LnhwbSBiL3BpeG1hcHMvcXVlc3QueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NjRmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3F1ZXN0LnhwbQpAQCAtMCwwICsxLDQ0IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogcXVlc3RfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjM0IDM0IDQgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIGJvdHRvbVNoYWRvd0NvbG9yCW0gYmxhY2sJYyAjNUQ2MDY5IiwKKyJYCXMgaWNvbkNvbG9yMgltIHdoaXRlCWMgI0ZGRkZGRiIsCisibwlzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgLi4uLi4uLi4gICAgICAgICAgICAgICIsCisiICAgICAgICAgLi4uWFhYWFhYWFguLi4gICAgICAgICAgICIsCisiICAgICAgIC4uWFhYWFhYWFhYWFhYWFguLiAgICAgICAgICIsCisiICAgICAgLlhYWFhYWFhYWFhYWFhYWFhYWC4gICAgICAgICIsCisiICAgICAuWFhYWFhYWFhvb29vb1hYWFhYWFhvICAgICAgICIsCisiICAgIC5YWFhYWFhYWG9YWFhYb29YWFhYWFhYbyAgICAgICIsCisiICAgLlhYWFhYWFhYb29vWFhYWG9vWFhYWFhYWG8gICAgICIsCisiICAuWFhYWFhYWFhYb29vb1hYWG9vWFhYWFhYWFhvICAgICIsCisiICAuWFhYWFhYWFhYWG9vWFhYb29vWFhYWFhYWFhvLiAgICIsCisiIC5YWFhYWFhYWFhYWFhYWFhvb29vWFhYWFhYWFhYby4gICIsCisiIC5YWFhYWFhYWFhYWFhYWG9vb29YWFhYWFhYWFhYby4gICIsCisiIC5YWFhYWFhYWFhYWFhYb29vb29YWFhYWFhYWFhYby4uICIsCisiIC5YWFhYWFhYWFhYWFhvb29vb1hYWFhYWFhYWFhYby4uICIsCisiIC5YWFhYWFhYWFhYWFhvb29YWFhYWFhYWFhYWFhYby4uICIsCisiIC5YWFhYWFhYWFhYWFhvb1hYWFhYWFhYWFhYWFhYby4uICIsCisiIC5YWFhYWFhYWFhYWFhvWFhYWFhYWFhYWFhYWFhYby4uICIsCisiICAuWFhYWFhYWFhYWFhvWFhYWFhYWFhYWFhYWFhvLi4uICIsCisiICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvLi4uICIsCisiICAgLlhYWFhYWFhYWFhvb1hYWFhYWFhYWFhYWG8uLi4gICIsCisiICAgIG9YWFhYWFhYWG9vb29YWFhYWFhYWFhYby4uLi4gICIsCisiICAgICBvWFhYWFhYWFhvb1hYWFhYWFhYWFhvLi4uLiAgICIsCisiICAgICAgb1hYWFhYWFhYWFhYWFhYWFhYWG8uLi4uICAgICIsCisiICAgICAgIG9vWFhYWFhYWFhYWFhYWFhvby4uLi4gICAgICIsCisiICAgICAgICAub29vWFhYWFhYWFhvb28uLi4uLiAgICAgICIsCisiICAgICAgICAgLi4ub29vWFhYWG8uLi4uLi4uICAgICAgICIsCisiICAgICAgICAgICAuLi4ub1hYWG8uLi4uLiAgICAgICAgICIsCisiICAgICAgICAgICAgICAub1hYWG8uLiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgIG9YWG8uLiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICBvWG8uLiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgb28uLiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgICAuLiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy9zdG9ja19pY29ucy5oIGIvcGl4bWFwcy9zdG9ja19pY29ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzI4N2IKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3N0b2NrX2ljb25zLmgKQEAgLTAsMCArMSwxNzAwIEBACisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wICovCisKK3N0YXRpYyBjb25zdCBndWludDggc3RvY2tfdmltX2J1aWxkX3RhZ3NbXSA9Cit7ICIiCisgIC8qIFBpeGJ1ZiBtYWdpYyAoMHg0NzY0NmI1MCkgKi8KKyAgIkdka1AiCisgIC8qIGxlbmd0aDogaGVhZGVyICgyNCkgKyBwaXhlbF9kYXRhICgyMzA0KSAqLworICAiXDBcMFwxMVwzMCIKKyAgLyogcGl4ZGF0YV90eXBlICgweDEwMTAwMDIpICovCisgICJcMVwxXDBcMiIKKyAgLyogcm93c3RyaWRlICg5NikgKi8KKyAgIlwwXDBcMGAiCisgIC8qIHdpZHRoICgyNCkgKi8KKyAgIlwwXDBcMFwzMCIKKyAgLyogaGVpZ2h0ICgyNCkgKi8KKyAgIlwwXDBcMFwzMCIKKyAgLyogcGl4ZWxfZGF0YTogKi8KKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMCIKKyAgIlwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3MFwwXDBcMFwzNjZcMFwwXDBcMzYzIgorICAiXDBcMFwwXDM2MVwwXDBcMFwzNTdcMFwwXDBcMzU1XDBcMFwwXDM1M1wwXDBcMFwzNTFcMFwwXDBcMzQ3XDBcMFwwXDM0NSIKKyAgIlwwXDBcMFwzNzRcMFwwXDBcMzc0XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDI2MVwyNjFcMjYxXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDI3MlwyNzIiCisgICJcMjcyXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzQ0XDM0NFwzNDRcMzc3XDBcMFwwXDM0MVwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjUwXDI1MFwyNTBcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjU1XDI1NVwyNTVcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzEiCisgICJcMjcxXDI3MVwzNzdcMFwwXDBcMzQxXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wyNTNcMjUzXDI1M1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNTNcMjUzXDI1M1wzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwIgorICAiXDM3N1wwXDBcMFwzNDFcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wyNjUiCisgICJcMjY1XDI2NVwzNzdcMjUwXDI1MFwyNTBcMzc3XDI1MlwyNTJcMjUyXDM3N1wyNTJcMjUyXDI1MlwzNzdcMjUwXDI1MCIKKyAgIlwyNTBcMzc3XDIwNVwyMDVcMjA1XDM3N1wyNTBcMjUwXDI1MFwzNzdcMjUzXDI1M1wyNTNcMzc3XDI1M1wyNTNcMjUzIgorICAiXDM3N1wyNTNcMjUzXDI1M1wzNzdcMjUzXDI1M1wyNTNcMzc3XDIwMlwyMDJcMjAyXDM3N1wyNTBcMjUwXDI1MFwzNzciCisgICJcMjUzXDI1M1wyNTNcMzc3XDI1M1wyNTNcMjUzXDM3N1wyNTNcMjUzXDI1M1wzNzdwcHBcMzc3XDBcMFwwXDM0M1wwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0IgorICAiXDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjUzXDI1M1wyNTMiCisgICJcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMjUzXDI1M1wyNTNcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzRcMjc0XDI3NFwzNzdcMFwwXDBcMzQxXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNTNcMjUzXDI1M1wzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wyNTNcMjUzXDI1M1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3NFwyNzRcMjc0XDM3N1wwXDBcMFwzNDFcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI1M1wyNTNcMjUzXDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDI1M1wyNTNcMjUzXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMjc0XDI3NFwyNzRcMzc3XDBcMFwwXDM0MVwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMzc3XDI3MlwyNzJcMjcyXDM3N1wyNDdcMjQ3XDI0N1wzNzdcMjUzXDI1M1wyNTNcMzc3IgorICAiXDI1M1wyNTNcMjUzXDM3N1wyNTNcMjUzXDI1M1wzNzdcMjA1XDIwNVwyMDVcMzc3XDI1M1wyNTNcMjUzXDM3N1wyNTMiCisgICJcMjUzXDI1M1wzNzdcMjUzXDI1M1wyNTNcMzc3XDI1M1wyNTNcMjUzXDM3N1wyNTNcMjUzXDI1M1wzNzdcMjE1XDIxNSIKKyAgIlwyMTVcMzc3XDI1NVwyNTVcMjU1XDM3N1wyNTNcMjUzXDI1M1wzNzdcMjUzXDI1M1wyNTNcMzc3XDI1M1wyNTNcMjUzIgorICAiXDM3N3Nzc1wzNzdcMFwwXDBcMzM1XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NCIKKyAgIlwzNTRcMzU0XDM3N1wyNTNcMjUzXDI1M1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0IgorICAiXDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNTNcMjUzXDI1M1wzNzdcMzU0XDM1NFwzNTQiCisgICJcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3NFwyNzRcMjc0XDM3NyIKKyAgIlwwXDBcMFwzMzVcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTQiCisgICJcMzc3XDI1M1wyNTNcMjUzXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI1M1wyNTNcMjUzXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3MyIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjUzXDI1MyIKKyAgIlwyNTNcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMjUzXDI1M1wyNTNcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzRcMjc0XDI3NFwzNzdcMFwwXDBcMzczXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI1MFwyNTBcMjUwIgorICAiXDM3N1wyNTNcMjUzXDI1M1wzNzdcMjUzXDI1M1wyNTNcMzc3XDI1NFwyNTRcMjU0XDM3N1wyMDdcMjA3XDIwN1wzNzciCisgICJcMjUwXDI1MFwyNTBcMzc3XDI0N1wyNDdcMjQ3XDM3N1wyNTNcMjUzXDI1M1wzNzdcMjUzXDI1M1wyNTNcMzc3XDI1MCIKKyAgIlwyNTBcMjUwXDM3N1wyMDVcMjA1XDIwNVwzNzdcMjUwXDI1MFwyNTBcMzc3XDI1M1wyNTNcMjUzXDM3N1wyNTNcMjUzIgorICAiXDI1M1wzNzdcMjUzXDI1M1wyNTNcMzc3dHR0XDM3N1wwXDBcMFwzNzNcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI1M1wyNTNcMjUzXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI1M1wyNTMiCisgICJcMjUzXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3M1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjUwXDI1MFwyNTBcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjUxXDI1MVwyNTFcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzQiCisgICJcMjc0XDI3NFwzNzdcMFwwXDBcMzczXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwzNzdcMzUxXDM1MVwzNTFcMzc3XDMwM1wzMDNcMzAzXDM3N1wzMDNcMzAzXDMwM1wzNzdcMzAzXDMwM1wzMDNcMzc3IgorICAiXDI3N1wyNzdcMjc3XDM3N3V1dVwzNzdcMjc0XDI3NFwyNzRcMzc3XDI3NFwyNzRcMjc0XDM3N1wyNzRcMjc0XDI3NFwzNzciCisgICJcMjc0XDI3NFwyNzRcMzc3XDI3NFwyNzRcMjc0XDM3N35+flwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3NFwyNzRcMjc0XDM3NyIKKyAgIlwyNzRcMjc0XDI3NFwzNzdcMjczXDI3M1wyNzNcMzc3XDI0M1wyNDNcMjQzXDM3N1wwXDBcMFwzNzNcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzZcMFwwXDBcMzczXDBcMFwwXDM3M1wwXDBcMFwzNzMiCisgICJcMFwwXDBcMzczXDBcMFwwXDM3M1wwXDBcMFwzNzNcMFwwXDBcMzczXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3M1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAifTsKKworCisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wICovCisKK3N0YXRpYyBjb25zdCBndWludDggc3RvY2tfdmltX2ZpbmRfaGVscFtdID0KK3sgIiIKKyAgLyogUGl4YnVmIG1hZ2ljICgweDQ3NjQ2YjUwKSAqLworICAiR2RrUCIKKyAgLyogbGVuZ3RoOiBoZWFkZXIgKDI0KSArIHBpeGVsX2RhdGEgKDIzMDQpICovCisgICJcMFwwXDExXDMwIgorICAvKiBwaXhkYXRhX3R5cGUgKDB4MTAxMDAwMikgKi8KKyAgIlwxXDFcMFwyIgorICAvKiByb3dzdHJpZGUgKDk2KSAqLworICAiXDBcMFwwYCIKKyAgLyogd2lkdGggKDI0KSAqLworICAiXDBcMFwwXDMwIgorICAvKiBoZWlnaHQgKDI0KSAqLworICAiXDBcMFwwXDMwIgorICAvKiBwaXhlbF9kYXRhOiAqLworICAiXDBcMFwwXDBcMFwwXDBnXDBcMFwwXDI1N1wwXDBcMFwyNDdcMFwwXDBLXDBcMFwwXDBcMjA1XDIwM1wxNzdcMjVtbGkiCisgICJwRURCXDI2NlwzNVwzNVwzNFwzNDRcNFw0XDRcMzczXDRcNFw0XDM3M1wzM1wzM1wzM1wzNDU9PDpcMjcwXVtZdWNiYCIKKyAgIlwzMlwwXDBcMFw0XDBcMFwwXDE1XDBcMFwwU1wwXDBcMFtcMFwwXDBcMjdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBTXDBcMFwwXDM3M1wwXDBcMFwyMjNcMFwwXDBcMjQzXDBcMFwwXDM1M01MS1wyMjdcNFw0XDRcMzczLy8tXDM3NyIKKyAgIlwzMDFcMjc3XDI3M1wzNzdcMzU0XDM1MlwzNDdcMzc3XDM2NVwzNjNcMzYwXDM3N1wzNjJcMzYwXDM1NFwzNzdcMzQxIgorICAiXDMzN1wzMzRcMzc3XDI1N1wyNTVcMjUyXDM3NycnJlwzNzdcMlwyXDJcMzczXDc3Pj5cMjI3XDBcMFwwXDMzNVwwXDAiCisgICJcMFwzNDBcMFwwXDBcMzU3XDBcMFwwXDM0N1wwXDBcMFwyN1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMjQzXDBcMFwwXDIxMyIKKyAgIlwwXDBcMFwwXDIwN1wyMDVcMjAxKzYwLVwzMTdcMzBcMzBcMzBcMzc3XDM3M1wzNzBcMzY1XDM3N1wzNzZcMzc0XDM3MCIKKyAgIlwzNzdcMzcyXDM3MFwzNjVcMzc3XDM2NVwzNjRcMzYxXDM3N1wzNjJcMzYxXDM1NVwzNzdcMzYyXDM2MFwzNTRcMzc3IgorICAiXDM2MVwzNTdcMzUzXDM3N1wzNjFcMzU2XDM1M1wzNzdcMzUyXDM1MVwzNDZcMzc3XDMzMlwzMzBcMzI0XDM3N1wwXDAiCisgICJcMFwzNzdcMjBcMTZcMTZcMzQ2Q0NcNzc8XDBcMFwwXDIyXDBcMFwwXDMwM1wwXDBcMFwyMDNcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwc1wwXDBcMFwyMzNcMjA2XDIwMn4rXDM3XDIwXDE2XDM0NFwyNTc6XDM2XDM3N1wzNzNcMjUzXDIyM1wzNzciCisgICJcMzcyXDM1MVwzNDNcMzc3XDM2MFwzNTdcMzUzXDM3N1wzNTRcMzUyXDM0N1wzNzdcMzUxXDM1MFwzNDVcMzc3XDM1MiIKKyAgIlwzNTBcMzQ2XDM3N1wzNTRcMzUyXDM1MFwzNzdcMzU1XDM1M1wzNTFcMzc3XDM1NVwzNTNcMzUxXDM3N1wzNTVcMzUzIgorICAiXDM1MFwzNzdcMzUyXDMxN1wzMDZcMzc3XDMyNTRcMTJcMzc3dVwzMVw0XDM3N1wyMFwxMFw2XDM0Nzs7NztcMFwwXDAiCisgICJsXDBcMFwwXDMxN1wwXDBcMFwwXDBcMFwwXDBcMFwwXDAnXDBcMFwwXDIyNzRcMjZcMTVcMzE0XDI1NzxcNDBcMzc3XDM3NCIKKyAgIlwzMTRcMjc2XDM3N1wzNjdcMjc3XDI1NlwzNzdcMzQ2dVRcMzc3XDMzN1wzMzVcMzMzXDM3N1wzMzNcMzMxXDMyNlwzNzciCisgICJcMzMwXDMyN1wzMjNcMzc3XDMzM1wzMzJcMzI2XDM3N1wzNDNcMzQyXDMzNlwzNzdcMzUyXDM1MVwzNDZcMzc3XDM1NCIKKyAgIlwzNTNcMzUwXDM3N1wzNTVcMzUzXDM1MFwzNzdcMzQ1Vy1cMzc3XDM0MzpcMTNcMzc3XDMyNDRcMTJcMzc3aVwyNVw0IgorICAiXDM3N1wyMFw1XDRcMzI0XDBcMFwwXDIyNVwwXDBcMFwzMDFcMFwwXDBcMVwwXDBcMFwwXDBcMFwwXDBYLFwiXDIxNFwxNyIKKyAgIlwxN1wxN1wzNzdcMzc1XDMyNFwzMTBcMzc3XDM2N1wyNzdcMjU3XDM3N1wzNTB1VFwzNzdcMzI1UStcMzc3XDMwNlwyMDIiCisgICJwXDM3N1wyNzZcMjc1XDI3MlwzNzdcMjQ1XDI0M1wyNDBcMzc3XDIzNFwyMzJcMjI1XDM3N1wyNzFcMjY3XDI2MlwzNzciCisgICJcMzI3XDMyNlwzMjJcMzc3XDM0N1wzNDVcMzQyXDM3N1wzNDdcMjMyXDIwNVwzNzdcMzQ2RlwzMFwzNzdcMzQ0PFwxMyIKKyAgIlwzNzdcMzQyOlwxM1wzNzdcMzExMFwxMVwzNzdcMFwwXDBcMzc3XDFcMFwwXDM1MlwwXDBcMD1cMFwwXDBcNFwwXDBcMCIKKyAgIlwwXDIxNlwxNzd6XDI3XDRcMVwwXDM3M1wzNzJcMjYxXDIzNFwzNzdcMzcyXDMxNFwyNzZcMzc3R0dcNzdcMzc3XDEyIgorICAiXDEyXDExXDM3N1wxMlwxMlwxMVwzNzdLS0NcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcNFw0XDRcMzc3XDBcMFwwXDM3NyIKKyAgIlwyNFwyNFwyMlwzNzdcMjA1eXRcMzc3XDMzMjdcMTNcMzc3XDM1NHxbXDM3N1wzNTFbMlwzNzdcMzQ0PFwxM1wzNzdcMzM2IgorICAiOFwxM1wzNzdcMjM1I1w2XDM3N1wwXDBcMFwzNzRcNFwyXDIiIjFcMFwwXDBcMTNcMFwwXDBcMm1sanBiYmFcMzc3XDM1NSIKKyAgIlwzNDJcMzM3XDM3NzQ0LlwzNzdcMjM1XDIzNVwyMTVcMzc3XDMxN1wzMTdcMjcxXDM3N1wzMDRcMzA0XDI1N1wzNzdcMjE1IgorICAiXDIxNVwxNzdcMzc3KiomXDM3N1wwXDBcMGJcMFwwXDAiIjhcMFwwXDAiIjFcMFwwXDBVXDBcMFwwXDM3N2JcMjRcNFwzNzciCisgICJcMzQyUitcMzc3XDM2MlwyNDZcMjIwXDM3N1wzNDdOIVwzNzdcMzQyO1wxM1wzNzdcMzExXDIyMVwyMDFcMzc3XDJcMiIKKyAgIlwyXDM3N1wwXDBcMFwyMTBcMFwwXDBcMjRcMFwwXDBcNUVDQlwyNjdcMzQ1XDM0NFwzNDJcMzc3RkZcNzdcMzc3XDIzNCIKKyAgIlwyMzRcMjE0XDM3N1wzNDJcMzQyXDMyMFwzNzdcMzU1XDM1NVwzNDdcMzc3XDMwMFwzMDBcMjU0XDM3N1wyNjJcMjYyIgorICAiXDIzN1wzNzdcMjAyXDIwMnRcMzc3TExEXDM3N1wwXDBcMFwzNVwwXDBcMFwyNVwwXDBcMFwyNFwiXDQwXDQwJlwwXDAiCisgICJcMFwzNzdcMjM2LVwyMlwzNzdcMzU3XDIxNXFcMzc3XDM2MFwyMzNcMjAzXDM3N1wzNTJcMzM1XDMyN1wzNzdcMzMzXDMzMiIKKyAgIlwzMjZcMzc3JyckXDM3N1wwXDBcMFwzMDRcMFwwXDBcMzZcMFwwXDBcMTFcMzVcMzVcMzRcMzQ0XDM2MFwzNTZcMzU0IgorICAiXDM3N1wxMVwxMVwxMFwzNzdcMzI1XDMyNVwyNzdcMzc3XDM3M1wzNzNcMzcyXDM3N1wzMDNcMzAzXDI1NlwzNzdcMjY1IgorICAiXDI2NVwyNDJcMzc3XDI0NlwyNDZcMjI1XDM3N1wyMzRcMjM0XDIxN1wzNzdcMTBcMTBcN1wzNzdcMFwwXDBcMTFcMFwwIgorICAiXDBcNFwyMjZcMjI1XDIyNFwxM1wwXDBcMFwxMVlZVkJcNzdcMTVcMlwzNzdcMzYwXDI3MVwyNTFcMzc3XDM2NlwzNjUiCisgICJcMzY0XDM3N1wzNTBcMzQ3XDM0NFwzNzdcMzMyXDMzMFwzMjVcMzc3WFZSXDM3N1wwXDBcMFwzNTFcMFwwXDAlXDBcMCIKKyAgIlwwXDE1XDRcNFw0XDM3M1wzNjVcMzYzXDM2MFwzNzdcMTFcMTFcMTFcMzc3XDMxMlwzMTJcMjY1XDM3N1wzMzVcMzM1IgorICAiXDMyMFwzNzdcMjY3XDI2N1wyNDRcMzc3XDI1MlwyNTJcMjMwXDM3N1wyMzNcMjMzXDIxM1wzNzdcMjU2XDI1NlwyNDMiCisgICJcMzc3XDEyXDEyXDExXDM3N1wwXDBcMFwyXDBcMFwwXDBcMzUwXDM0N1wzNDVcMjRcMFwwXDBcMlwzMVwzMFwzMFwxMiIKKyAgIlwxMlwxMlwxMFwzNzdcMzY2XDM2NFwzNjJcMzc3XDM2NFwzNjNcMzYxXDM3N1wzNDRcMzQzXDM0MFwzNzdcMzIzXDMyMiIKKyAgIlwzMTZcMzc3Y2JdXDM3N1wwXDBcMFwzNzRcMFwwXDArXDBcMFwwXDIwXDRcNFw0XDM3M1wzNjJcMzYwXDM1NFwzNzdHIgorICAiR0BcMzc3XDIyMlwyMjJcMjAzXDM3N1wyNzJcMjcyXDI0N1wzNzdcMjU1XDI1NVwyMzNcMzc3XDIzN1wyMzdcMjE2XDM3NyIKKyAgIlwyNTRcMjU0XDI0MVwzNzdcMzE3XDMxN1wzMTNcMzc3TExFXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwIiIwLy5cNVwxMlwxMlwxMlwzNzdcMzcyXDM3MFwzNjZcMzc3XDM1N1wzNTVcMzUyXDM3N1wzMzVcMzM0XDMzMFwzNzciCisgICJcMzA2XDMwNFwzMDJcMzc3Pj45XDM3N1wwXDBcMFwzNzRcMFwwXDAtXDBcMFwwXDIxXDMzXDMzXDMxXDM0NVwzNDFcMzM3IgorICAiXDMzNFwzNzdcMzMxXDMyN1wzMjRcMzc3NDQvXDM3N1wyMDdcMjA3eVwzNzdcMjQwXDI0MFwyMjBcMzc3XDI1NlwyNTYiCisgICJcMjQyXDM3N1wzMDNcMzAzXDI3NlwzNzdcMVwxXDFcMzc3XDFcMVwxXDM3N1wyNjFcMjYwXDI1N1w3N1wwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwyMTFcMjA3XDIwNjRramdcMzc3XDM3NFwzNzJcMzcwXDM3N1wzNTRcMzUyXDM1MFwzNzdcMzI2IgorICAiXDMyNFwzMjJcMzc3XDI3NFwyNzJcMjY3XDM3N1wwXDBcMFwzNzdcMFwwXDBcMzUyXDBcMFwwLVwwXDBcMFwyMTw8OlwyNzEiCisgICJcMjU3XDI1NVwyNTJcMzc3XDM2MVwzNTZcMzUzXDM3N1wzNTFcMzUwXDM0NVwzNzdLS0NcMzc3XDEyXDEyXDExXDM3NyIKKyAgIlwxMlwxMlwxMVwzNzdBQUFcMzc3c3JxXDM3N1wxXDFcMVwzNzdcMVwxXDFcMzc3XDI0NFwyNDNcMjQxXDMxNVwzMzdcMzM2IgorICAiXDMzM1wxMFwzMTZcMzE0XDMxMiooKChcMzc3XDMxNlwyMzNcMjE3XDM3N1wzNzJcMzcyXDM2N1wzNzdcMzQ2XDM0NlwzNDIiCisgICJcMzc3XDMxNVwzMTRcMzEyXDM3N1wyNjBcMjYwXDI1NFwzNzdcMFwwXDBcMzc3XDBcMFwwXDMwNlwwXDBcMCtcMFwwXDAiCisgICJcMjBdW1l1JycmXDM3N1wzNTJcMzUxXDM0NlwzNzdcMzU1XDM1M1wzNTFcMzc3XDM1NVwzNDNcMzM3XDM3N1wzNDdcMjA0IgorICAiaFwzNzdcMzM3XTpcMzc3Y1wzMVwxMVwzNzdcMjM3XDIzN1wyMzVcMzc3XDFcMVwxXDM3N1wxXDFcMVwzNzdcMVwxXDEiCisgICJcMzc3XDI0MVwyMzdcMjM1YSkpKVwzNzdcMjcyXDE3N3FcMzc3XDM2N1wzMDZcMjY3XDM3N1wzNjFcMjQ2XDIyMVwzNzciCisgICJcMzM0XDMyMlwzMTRcMzc3XDMxMFwzMDZcMzAzXDM3N358eFwzNzdcMFwwXDBcMzc3XDBcMFwwXDIxNlwwXDBcMCVcMCIKKyAgIlwwXDBcMTVhYF5cMzNcMlwyXDJcMzczXDMzMlwzMzBcMzI0XDM3N1wzNTBcMjU1XDIzNFwzNzdcMzUxYTlcMzc3XDM1MyIKKyAgInRSXDM3N1wzNTdcMjE2clwzNzdcMzUyXDIwMGNcMzc3XDIzNi5cMjNcMzc3XDc3XDMwXDIxXDM3N1wwXDBcMFwzNzdcMSIKKyAgIlwxXDFcMzc3XDFcMVwxXDM3N1wyNzZcMjM2XDIyNFwzNzdcMzcxXDMyM1wzMTBcMzc3XDM2M1wyNTVcMjMxXDM3N1wzMzYiCisgICJTK1wzNzdcMzEwNFwxMVwzNzdcMjY0XDIwMnRcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzVcMFwwXDBEXDBcMFwwXDM2XDAiCisgICJcMFwwXDExXDBcMFwwXDQiIjg1NFwyMzZcMFwwXDBcMzc3XDMyNjRcMTJcMzc3XDM0ND1cMTdcMzc3XDM1MFguXDM3NyIKKyAgIlwzNTV5V1wzNzdcMzY0XDI2NlwyNDRcMzc3XDM2NFwyNjBcMjM1XDM3N1wzNjBcMzQ1XDM0MFwzNzdcMzY0XDM2M1wzNTciCisgICJcMzc3XDFcMVwxXDM3N1wxXDFcMVwzNzdcMVwxXDFcMzc3XDM1NFwyMjV8XDM3N1wzNDNPJVwzNzdcMzIzN1wxMlwzNzciCisgICJcMjc3L1wxMVwzNzcmXDEwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNTRcMFwwXDAtXDBcMFwwXDI0XDBcMFwwXDVMSyIKKyAgIkpcM1wwXDBcMFwyMjBcMzFcMTdcMTNcMzMydVwzMVw0XDM3N1wzMjU1XDEyXDM3N1wzNDI6XDEzXDM3N1wzNDQ9XDE0IgorICAiXDM3N1wzNDdMXDM3XDM3N1wzNTdcMjczXDI1M1wzNzdcMzY1XDM2NFwzNjNcMzc3XDM1N1wzNTVcMzUyXDM3N1wzNjUiCisgICJcMzYzXDM2MVwzNzdcMVwxXDFcMzc3XDFcMVwxXDM3N1wzMzZDXDI2XDM3N1wzMjM3XDEyXDM3N1wzMDQyXDE0XDM3NyIKKyAgIllcMjJcMlwzNzdcMFwwXDBcMzc3XDBcMFwwXDMzM1wwXDBcMFwzNzdcMFwwXDA7XDBcMFwwXDEzXDBcMFwwXDJcMFwwIgorICAiXDBcN1wwXDBcMFwyNjBKSkc3XDE2XDVcNFwzNDdpXDI1XDRcMzc3XDMxMDBcMTFcMzc3XDMzNjhcMTNcMzc3XDM0MFMiCisgICIrXDM3N1wzNDdcMzQ2XDM0M1wzNzdcMzQ3XDM0NlwzNDJcMzc3XDM0M1wzNDJcMzM2XDM3N1wzMzVcMzM0XDMzMVwzNzciCisgICJcMzI3XDMyNlwzMjNcMzc3XDMxN1wzMTZcMzEyXDM3N1wyNzRbPlwzNzdcMjU2KVw3XDM3NzRcMjZcMTVcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFwzNTJcMFwwXDBiXDBcMFwwXDM3NFwwXDBcMEFcMFwwXDBcNFwwXDBcMFwwXDBcMFwwXDEzXDBcMCIKKyAgIlwwXDIxN1wwXDBcMFwxMjs7NztcMTdcN1w1XDMyNVwwXDBcMFwzNzdcMjMzXCJcNVwzNzdcMzAxXDI1MFwyMzdcMzc3IgorICAiXDMyMVwzMjBcMzE0XDM3N1wzMjBcMzE2XDMxM1wzNzdcMzA3XDMwNlwzMDNcMzc3XDI3M1wyNzJcMjY3XDM3N1wyNjUiCisgICJcMjY0XDI2MVwzNzdcMjQ3XDI0NlwyNDJcMzc3cmReXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDMzMVwwXDAiCisgICJcMFlcMFwwXDBsXDBcMFwwXDM3MFwwXDBcMFwyMlwwXDBcMFwxXDBcMFwwXDBcMFwwXDBcMFwwXDBcMF9cMFwwXDBcMjMwIgorICAiXDBcMFwwXDI0MlwwXDBcMFwyNTNcMTNcMTFcMTBcMjMwXDBcMFwwXDM3NFwxXDFcMFwzNzdcIlwiIVwzNzdRUEtcMzc3IgorICAiXVxcV1wzNzc7OzdcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NVwwXDBcMFwzMjNcMFwwIgorICAiXDBFXDBcMFwwSFwwXDBcMFwzMTBcMFwwXDBcMjQ2XDBcMFwwXDJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwzN1wwXDBcMC1cMFwwXDBcMTJcMFwwXDBcMjFcMlwyXDIiIjFcMFwwXDBcMjE1XDBcMFwwXDMwNVwwXDAiCisgICJcMFwzNTFcMFwwXDBcMzc0XDBcMFwwXDM3NFwwXDBcMFwzNTNcMFwwXDBcMzA3XDBcMFwwXDIyNlwwXDBcMEtcMFwwXDAiCisgICJcMzA3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzExXDBcMFwwJVwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDFcMFwwXDBcNFwwXDBcMFwxM1wwXDBcMFwyNFwwXDBcMCIKKyAgIlwzNVwwXDBcMCVcMFwwXDArXDBcMFwwLVwwXDBcMC1cMFwwXDArXDBcMFwwJVwwXDBcMFwzNlwwXDBcMFwyN1wwXDBcMCIKKyAgIjBcMFwwXDBcMzNcMFwwXDBcNFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDJcMFwwXDBcNFwwXDBcMFwxMVwwXDBcMFwxNVwwXDAiCisgICJcMFwyMFwwXDBcMFwyMVwwXDBcMFwyMVwwXDBcMFwyMFwwXDBcMFwxNVwwXDBcMFwxMVwwXDBcMFw1XDBcMFwwXDJcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAifTsKKworCisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wICovCisKK3N0YXRpYyBjb25zdCBndWludDggc3RvY2tfdmltX3NhdmVfYWxsW10gPQoreyAiIgorICAvKiBQaXhidWYgbWFnaWMgKDB4NDc2NDZiNTApICovCisgICJHZGtQIgorICAvKiBsZW5ndGg6IGhlYWRlciAoMjQpICsgcGl4ZWxfZGF0YSAoMjMwNCkgKi8KKyAgIlwwXDBcMTFcMzAiCisgIC8qIHBpeGRhdGFfdHlwZSAoMHgxMDEwMDAyKSAqLworICAiXDFcMVwwXDIiCisgIC8qIHJvd3N0cmlkZSAoOTYpICovCisgICJcMFwwXDBgIgorICAvKiB3aWR0aCAoMjQpICovCisgICJcMFwwXDBcMzAiCisgIC8qIGhlaWdodCAoMjQpICovCisgICJcMFwwXDBcMzAiCisgIC8qIHBpeGVsX2RhdGE6ICovCisgICJcMFwwXDBVXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDAiCisgICJcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFlcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDMwM1wzMjdcMzY0XDM3N1wyNTFcMzE1XDM0NVwzNzd1dXpcMzc3IgorICAiXDM1N1wzMDVcMjczXDM3N1wzNjFcMzEwXDI3NlwzNzdcMzYwXDMwNlwyNzRcMzc3XDM1NlwyNzRcMjYyXDM3N1wzNTYiCisgICJcMjc2XDI2NVwzNzdcMzU2XDMwMVwyNzBcMzc3XDM1NVwyNzdcMjY2XDM3N1wzNTFcMjY3XDI1NVwzNzdcMzUxXDI3MCIKKyAgIlwyNTdcMzc3XDM1MVwyNjdcMjU1XDM3N1wzNTFcMjcwXDI1N1wzNzdcMzUxXDI3MVwyNjFcMzc3XDM0NVwyNzdcMjcyIgorICAiXDM3N3Nyd1wzNzdcMjYzXDMxNVwzNDNcMzc3XDI0MVwyNzZcMzI2XDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFw0IgorICAiXDBcMFwwXDFcMFwwXDBcMzc3XDI3M1wzMjZcMzUwXDM3N1wyMTJcMjUyXDMwNVwzNzdgX2hcMzc3XDM0MFwyMTV+XDM3NyIKKyAgIlwzNDBcMjAyblwzNzdcMzQwXDIwMG5cMzc3XDMzNHpoXDM3N1wzMzRcMjAxcVwzNzdcMzMyeGhcMzc3XDMyNFwyMDFzIgorICAiXDM3N1wzMjR9blwzNzdcMzE2cmVcMzc3XDMxN3JkXDM3N1wzMTZ1Z1wzNzdcMzA0Z1tcMzc3XDMwM2VYXDM3N2JhaVwzNzciCisgICJcMjA3XDI0M1wyNjdcMzc3VnFcMjA3XDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwxNVwwXDBcMFw0XDBcMFwwXDM3NyIKKyAgIlwyNzJcMzI1XDM1MVwzNzdcMjEwXDI0N1wzMDNcMzc3RURKXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBfXDBcMFwwXDM3N1wyNjZcMzIzXDM0N1wzNzdcMjA3XDI1M1wzMDFcMzc3IgorICAiXDBcMFwwXDM3N1wzMDNcMzI3XDM2NFwzNzdcMjUxXDMxNVwzNDVcMzc3dXV6XDM3N1wzNTdcMzA1XDI3M1wzNzdcMzYxIgorICAiXDMxMFwyNzZcMzc3XDM2MFwzMDZcMjc0XDM3N1wzNTZcMjc0XDI2MlwzNzdcMzU2XDI3NlwyNjVcMzc3XDM1NlwzMDEiCisgICJcMjcwXDM3N1wzNTVcMjc3XDI2NlwzNzdcMzUxXDI2N1wyNTVcMzc3XDM1MVwyNzBcMjU3XDM3N1wzNTFcMjY3XDI1NSIKKyAgIlwzNzdcMzUxXDI3MFwyNTdcMzc3XDM1MVwyNzFcMjYxXDM3N1wzNDVcMjc3XDI3MlwzNzdzcndcMzc3XDI2M1wzMTVcMzQzIgorICAiXDM3N1wyNDFcMjc2XDMyNlwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wyNzFcMzIzXDM0N1wzNzdcMjA1XDI0NFwyNzciCisgICJcMzc3XDBcMFwwXDM3N1wyNzNcMzI2XDM1MFwzNzdcMjEyXDI1MlwzMDVcMzc3YF9oXDM3N1wzNDBcMjE1flwzNzdcMzQwIgorICAiXDIwMm5cMzc3XDM0MFwyMDBuXDM3N1wzMzR6aFwzNzdcMzM0XDIwMXFcMzc3XDMzMnhoXDM3N1wzMjRcMjAxc1wzNzciCisgICJcMzI0fW5cMzc3XDMxNnJlXDM3N1wzMTdyZFwzNzdcMzE2dWdcMzc3XDMwNGdbXDM3N1wzMDNlWFwzNzdiYWlcMzc3XDIwNyIKKyAgIlwyNDNcMjY3XDM3N1ZxXDIwN1wzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wyNzFcMzIzXDM0NlwzNzdcMjA0XDI0M1wyNzciCisgICJcMzc3XDBcMFwwXDM3N1wyNzJcMzI1XDM1MVwzNzdcMjEwXDI0N1wzMDNcMzc3aGZwXDM3N1wzMTBcMjAxe1wzNzdcMzEzIgorICAifHRcMzc3XDMxM3pzXDM3N1wzMTN7c1wzNzdcMzE0fHJcMzc3XDMxM31zXDM3N1wyNzdrZFwzNzdcMzE0enBcMzc3XDMwMSIKKyAgImpiXDM3N1wzMTR8c1wzNzdcMzAyZVtcMzc3XDMwM2RZXDM3N1wyNzJsalwzNzdoZnBcMzc3XDIwMVwyMzZcMjY2XDM3NyIKKyAgIlRwXDIwNlwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wyNjdcMzIyXDM0N1wzNzdcMjAyXDI0MFwyNzNcMzc3XDBcMFwwIgorICAiXDM3N1wyNjZcMzIzXDM0N1wzNzdcMjA3XDI1M1wzMDFcMzc3c3NzXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdzc3NcMzc3XDIwM1wyNDBcMjcwXDM3N1IiCisgICJsXDIwMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wyNjVcMzEyXDM0NVwzNzdcMTc3XDI0MlwyNzFcMzc3XDBcMFwwXDM3NyIKKyAgIlwyNzFcMzIzXDM0N1wzNzdcMjA1XDI0NFwyNzdcMzc3c3NzXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdzc3NcMzc3XDIwM1wyNDBcMjcwXDM3N09pfFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wyNTZcMzE0XDM0NVwzNzd9XDI0MFwyNjZcMzc3XDBcMFwwXDM3N1wyNzFcMzIzXDM0NiIKKyAgIlwzNzdcMjA0XDI0M1wyNzdcMzc3c3NzXDM3N1wzMTZcMzE2XDMxNlwzNzdcMzE1XDMxNVwzMTVcMzc3XDMxNVwzMTVcMzE1IgorICAiXDM3N1wzMTVcMzE1XDMxNVwzNzdcMzE1XDMxNVwzMTVcMzc3XDMxNVwzMTVcMzE1XDM3N1wzMTVcMzE1XDMxNVwzNzciCisgICJcMzE1XDMxNVwzMTVcMzc3XDMxNVwzMTVcMzE1XDM3N1wzMTVcMzE1XDMxNVwzNzdcMzE1XDMxNVwzMTVcMzc3XDMxNSIKKyAgIlwzMTVcMzE1XDM3N1wyNzdcMjc3XDI3N1wzNzdzc3NcMzc3XDIxMFwyNDRcMjczXDM3N0hidlwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wyNjBcMzIxXDM0NFwzNzdcMjAzXDI0MVwyNjZcMzc3XDBcMFwwXDM3N1wyNjdcMzIyXDM0N1wzNzciCisgICJcMjAyXDI0MFwyNzNcMzc3Y2NjXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdzc3NcMzc3XDIxMFwyNDRcMjczXDM3N0ZecFwzNzdcMFwwXDBcMzc3XDBcMCIKKyAgIlwwXDM3N1wyNTJcMzE2XDM0M1wzNzd7XDIzM1wyNjJcMzc3XDBcMFwwXDM3N1wyNjVcMzEyXDM0NVwzNzdcMTc3XDI0MiIKKyAgIlwyNzFcMzc3c3NzXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdzc3NcMzc3XDIwN1wyNDNcMjcyXDM3N0VcXG1cMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMjUxIgorICAiXDMxMVwzNDJcMzc3dFwyMjRcMjU3XDM3N1wwXDBcMFwzNzdcMjU2XDMxNFwzNDVcMzc3fVwyNDBcMjY2XDM3N3Nzc1wzNzciCisgICJcMzE2XDMxNlwzMTZcMzc3XDMxNVwzMTVcMzE1XDM3N1wzMTVcMzE1XDMxNVwzNzdcMzE1XDMxNVwzMTVcMzc3XDMxNSIKKyAgIlwzMTVcMzE1XDM3N1wzMTVcMzE1XDMxNVwzNzdcMzE1XDMxNVwzMTVcMzc3XDMxNVwzMTVcMzE1XDM3N1wzMTVcMzE1IgorICAiXDMxNVwzNzdcMzE1XDMxNVwzMTVcMzc3XDMxNVwzMTVcMzE1XDM3N1wzMTVcMzE1XDMxNVwzNzdcMzA1XDMwNVwzMDUiCisgICJcMzc3c3NzXDM3N1wyMDdcMjQzXDI3MlwzNzdUYGlcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMjUzXDMwNFwzNDJcMzc3IgorICAiclwyMjRcMjU1XDM3N1wwXDBcMFwzNzdcMjYwXDMyMVwzNDRcMzc3XDIwM1wyNDFcMjY2XDM3N3NbW1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3c3NzXDM3NyIKKyAgIlwyMDNcMjQwXDI3MFwzNzdRXFxkXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDI1MlwzMTFcMzQyXDM3N3BcMjIxXDI1MiIKKyAgIlwzNzdcMFwwXDBcMzc3XDI1MlwzMTZcMzQzXDM3N3tcMjMzXDI2MlwzNzd6XDIxNlwyMzJcMzc3enp6XDM3N3Nzc1wzNzciCisgICJzc3NcMzc3c3NzXDM3N3Nzc1wzNzdzc3NcMzc3a29yXDM3N29vb1wzNzdzc3NcMzc3c3NzXDM3N3Nzc1wzNzdzc3NcMzc3IgorICAiaWlpXDM3N293flwzNzdcMjA2XDI0MlwyNzFcMzc3OlFdXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDI1MlwzMTFcMzQxIgorICAiXDM3N2xcMjE2XDI0NlwzNzdcMFwwXDBcMzc3XDI1MVwzMTFcMzQyXDM3N3RcMjI0XDI1N1wzNzdcMjAxXDIzNlwyNjYiCisgICJcMzc3XDIwM1wyNDBcMjcwXDM3N1wyMDZcMjQyXDI3MVwzNzdcMjAyXDIzN1wyNjdcMzc3XDE3N1wyMzVcMjY2XDM3NyIKKyAgIn5cMjM0XDI2NVwzNzdcMjAyXDIzN1wyNjdcMzc3eVwyMzBcMjYyXDM3N1wyMDZcMjQyXDI3MVwzNzdcMjA1XDI0MVwyNzAiCisgICJcMzc3XDIwNVwyNDFcMjcwXDM3N1wyMDdcMjQzXDI3MlwzNzdcMjAyXDIzN1wyNjdcMzc3XDIxNFwyNDdcMjc1XDM3NyIKKyAgIlwyMDNcMjQwXDI3MFwzNzdcMjEyXDI0NVwyNzNcMzc3NkpZXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDI1MFwzMTBcMzQxIgorICAiXDM3N2tcMjE1XDI0NlwzNzdcMFwwXDBcMzc3XDI1M1wzMDRcMzQyXDM3N3JcMjI0XDI1NVwzNzdvXDIyMFwyNTRcMzc3IgorICAicVwyMjJcMjU2XDM3N0FKTlwzNzdCSlFcMzc3UltjXDM3N2JveVwzNzdfbHZcMzc3XFxpcVwzNzdaZm9cMzc3WGNrXDM3NyIKKyAgIldjalwzNzdSW2NcMzc3O1NgXDM3NzlCS1wzNzd4XDIyN1wyNjNcMzc3XDI0NFwyNzFcMzEzXDM3NzZIU1wzNzdcMFwwIgorICAiXDBcMzc3XDBcMFwwXDM3N1wyNDRcMzA0XDMzNlwzNzdpXDIxM1wyNDNcMzc3XDBcMFwwXDM3N1wyNTJcMzExXDM0MlwzNzciCisgICJwXDIyMVwyNTJcMzc3b1wyMTdcMjQ3XDM3N0pTWVwzNzdcMjI3XDIyM1wyMTRcMzc3XDMzN1wzMzVcMzMyXDM3N1wzNDMiCisgICJcMzQxXDMzNlwzNzdcMzUzXDM1MlwzNTBcMzc3XDM1M1wzNTJcMzUwXDM3N1wzNTJcMzUxXDM0N1wzNzdcMzM3XDMzNSIKKyAgIlwzMzJcMzc3XDMxN1wzMTZcMzExXDM3N1wzMTFcMzA2XDMwMFwzNzdcMjMzXDIyNlwyMTZcMzc3VmFoXDM3N0tlelwzNzciCisgICJUc1wyMTRcMzc3XDI1MlwzMDZcMzM1XDM3NzRGTlwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N3dcMjExXDIzMVwzNzduXDIxMSIKKyAgIlwyMzZcMzc3XDBcMFwwXDM3N1wyNTJcMzExXDM0MVwzNzdsXDIxNlwyNDZcMzc3bFwyMTRcMjQ0XDM3N0BHTVwzNzdcMzMyIgorICAiXDMzMFwzMjNcMzc3XDM0N1wzNDZcMzQyXDM3N2dlXlwzNzdST0dcMzc3Uk9HXDM3N1wzMzFcMzI3XDMyNFwzNzdcMzA3IgorICAiXDMwNVwyNzdcMzc3XDMwMFwyNzRcMjY1XDM3N1wyNzBcMjYzXDI1M1wzNzdcMzE3XDMxNlwzMTFcMzc3Q0xUXDM3N00iCisgICJpXDE3N1wzNzdPb1wyMDRcMzc3XDI2M1wzMTJcMzM0XDM3NzE+SVwzNzdcMFwwXDBcMzc3XDBcMFwwIiI1XDE0XDE1XDE3IgorICAiXDM3N05ealwzNzdcMFwwXDBcMzc3XDI1MFwzMTBcMzQxXDM3N2tcMjE1XDI0NlwzNzdyXDIxN1wyNDRcMzc3QEdNXDM3NyIKKyAgIlwzNDJcMzQxXDMzNVwzNzdcMzYwXDM1N1wzNTRcMzc3Z2VeXDM3N1JPR1wzNzdST0dcMzc3XDMxNVwzMTJcMzA2XDM3NyIKKyAgIlwzMDJcMjc3XDI3MVwzNzdcMzAwXDI3NFwyNjVcMzc3XDMxMlwzMDZcMzAwXDM3N1wzMzRcMzMyXDMyN1wzNzdLVV1cMzc3IgorICAiTmlcMTc3XDM3N09vXDIwNFwzNzdcMjcyXDMxNFwzMzRcMzc3MT5JXDM3N1wwXDBcMFwzNzdcMFwwXDBcNFwwXDBcMCIiOSIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDI0NFwzMDRcMzM2XDM3N2lcMjEzXDI0M1wzNzdwXDIxMlwyNDFcMzc3OD5DXDM3NyIKKyAgIlwzNDBcMzM2XDMzMlwzNzdcMzUzXDM1MlwzNTBcMzc3UU5GXDM3N09MRFwzNzdPTERcMzc3XDMwN1wzMDRcMjc2XDM3NyIKKyAgIlwzMDBcMjc0XDI2NVwzNzdcMzEzXDMxMFwzMDJcMzc3XDM0MVwzNDBcMzM0XDM3N1wzNTFcMzUwXDM0NlwzNzdHUVhcMzc3IgorICAiTmh5XDM3N01sXDIwMFwzNzdcMjQzXDMwM1wzMzNcMzc3OFw3N0NcMzc3XDBcMFwwXDM3N1wwXDBcMFwxXDBcMFwwXDQiCisgICJcMFwwXDBcMTZcMFwwXDBcMzc3d1wyMTFcMjMxXDM3N25cMjExXDIzNlwzNzdlXDIwNVwyMzRcMzc3Mzg8XDM3N1wzMjciCisgICJcMzI0XDMyMFwzNzdcMzI2XDMyNFwzMjBcMzc3TkpDXDM3N01JQlwzNzdNSUJcMzc3XDMwMFwyNzRcMjY1XDM3N1wzMjEiCisgICJcMzE2XDMxMVwzNzdcMzQ2XDM0NVwzNDJcMzc3XDM1NVwzNTRcMzUyXDM3N1wzNDZcMzQ1XDM0MlwzNzdFT1VcMzc3SCIKKyAgImFzXDM3N01meFwzNzdcMjQxXDMwMVwzMzJcMzc3NzxAXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDAiIjVcMTRcMTVcMTdcMzc3Tl5qXDM3N1tufFwzNzdPW2JcMzc3XDI0NFwyNDBcMjMxXDM3N1wzMDBcMjc0IgorICAiXDI2NVwzNzdcMjcwXDI2M1wyNTNcMzc3XDMxNFwzMTFcMzAzXDM3N1wzMTRcMzExXDMwM1wzNzdcMzI3XDMyNVwzMjEiCisgICJcMzc3XDM0NFwzNDJcMzQwXDM3N1wzNTJcMzUxXDM0N1wzNzdcMzM1XDMzM1wzMjdcMzc3XDI3MFwyNjVcMjYwXDM3NyIKKyAgIj5HTVwzNzdKYXZcMzc3SmBwXDM3N1wyMzNcMzAzXDMzMFwzNzc2PEFcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMVwwXDBcMFwxMFwwXDBcMFw3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzcoMj5cMzc3XDBcMFwwXDM3N1wwIgorICAiXDBcMF4ifTsKKworCisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wICovCisKK3N0YXRpYyBjb25zdCBndWludDggc3RvY2tfdmltX3Nlc3Npb25fbG9hZFtdID0KK3sgIiIKKyAgLyogUGl4YnVmIG1hZ2ljICgweDQ3NjQ2YjUwKSAqLworICAiR2RrUCIKKyAgLyogbGVuZ3RoOiBoZWFkZXIgKDI0KSArIHBpeGVsX2RhdGEgKDIzMDQpICovCisgICJcMFwwXDExXDMwIgorICAvKiBwaXhkYXRhX3R5cGUgKDB4MTAxMDAwMikgKi8KKyAgIlwxXDFcMFwyIgorICAvKiByb3dzdHJpZGUgKDk2KSAqLworICAiXDBcMFwwYCIKKyAgLyogd2lkdGggKDI0KSAqLworICAiXDBcMFwwXDMwIgorICAvKiBoZWlnaHQgKDI0KSAqLworICAiXDBcMFwwXDMwIgorICAvKiBwaXhlbF9kYXRhOiAqLworICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDFcMFwwXDBcMzdcMFwwXDBcMzA2IgorICAiXDBcMFwwXDM0MlwwXDBcMFwzNTZcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwLlwwIgorICAiXDBcMFwyXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMlwwXDBcMFwzMTBcMjY1XDI3MCIKKyAgIlwyNDVcMzc3XDM0NFwzNDdcMzIyXDM3N1wzNDRcMzQ3XDMyMlwzNzdcMzQ0XDM0N1wzMjJcMzc3XDM0NFwzNDdcMzIyIgorICAiXDM3N1wzNDRcMzQ3XDMyMlwzNzdcMjA3XDIxMnZcMzc3MzQrXDM3N1wyMlwyMlwyMlw2XDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDAuLyVPXDEzXDEzXDEzXDM0NVwzNDJcMzQ1XDMxN1wzNzdcMzE3XDMyNFwyNTdcMzc3XDMxNyIKKyAgIlwzMjRcMjU3XDM3N1wzMTdcMzI0XDI1N1wzNzdcMzE2XDMyM1wyNTZcMzc3XDMxNlwzMjNcMjU2XDM3N1wyNjJcMjY2IgorICAiXDIyNlwzNzctLSVcMzc3XDVcNVw0QVwwXDBcMFwxXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXCIjXDM0XDI0MSIKKyAgIlwyMzVcMjM3XDIyMFwzNzdcMzQyXDM0NVwzMTdcMzc3XDMwNlwzMTJcMjQ2XDM3N1wzMDRcMzExXDI0NVwzNzdcMzA2IgorICAiXDMxM1wyNDdcMzc3XDMwN1wzMTRcMjUwXDM3N1wzMTFcMzE2XDI1MVwzNzdcMzExXDMxNlwyNTFcMzc3VVhHXDM3N1wzMSIKKyAgIlwzMlwyNVwyNDIqKlwyNVw0XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDQwXDQwXDMyXDM1NlwzMjRcMzI2XDMwMiIKKyAgIlwzNzdcMjc2XDMwMlwyNDBcMzc3XDI2M1wyNzBcMjI2XDM3N1wyNjBcMjY1XDIyNVwzNzdcMjYzXDI2N1wyMjdcMzc3IgorICAiXDI2NlwyNzNcMjMxXDM3N1wyNzNcMzAwXDIzNlwzNzdcMjc0XDMwMVwyMzdcMzc3XDIwMVwyMDVsXDM3Nz5cNzciIjIiCisgICJcMzQ1XDBcMFwwXDMwMlwwXDBcMFwzMjRcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFwzNzdcMFwwXDBRXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAjJFwzNVwzNzNcMzMyIgorICAiXDMzNVwzMTBcMzc3XDI1N1wyNjRcMjI0XDM3N1wyNTJcMjU3XDIxN1wzNzdcMjQzXDI0N1wyMTFcMzc3XDI0NlwyNTIiCisgICJcMjEzXDM3N1wyNTJcMjU3XDIxN1wzNzdcMjUxXDI1NVwyMTZcMzc3XDI0N1wyNTNcMjE1XDM3N1wyNDRcMjUwXDIxMiIKKyAgIlwzNzdcMjQxXDI0NVwyMTBcMzc3XDI1MlwyNTVcMjI2XDM3N1wyNjNcMjY1XDI0NVwzNzdcMjcwXDI3M1wyNTJcMzc3IgorICAiXDI3MlwyNzRcMjUzXDM3N1wzMDFcMzAzXDI2MlwzNzdcMzA3XDMxMlwyNjdcMzc3XDMxMlwzMTVcMjczXDM3N1wyNzIiCisgICJcMjc1XDI1MFwzNzdcMFwwXDBcMzc3XDM0XDM0XDM0XDNcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMTRcMTRcMTFcMzc3IgorICAiXDMzNVwzMzdcMzEzXDM3N1wyMjZcMjMzflwzNzdcMjM1XDI0MlwyMDZcMzc3XDIyNVwyMzB8XDM3N1wyMjZcMjMxflwzNzciCisgICJcMjMyXDIzNVwyMDFcMzc3XDIzMVwyMzVcMjAwXDM3N1wyMjZcMjMxflwzNzdcMjM1XDI0MVwyMDRcMzc3XDI0NVwyNTIiCisgICJcMjEzXDM3N1wyNDRcMjUxXDIxMlwzNzdcMjQzXDI1MFwyMTFcMzc3XDI0MlwyNDVcMjEwXDM3N1wyNDNcMjQ3XDIxMSIKKyAgIlwzNzdcMjQyXDI0NVwyMDdcMzc3XDIzN1wyNDNcMjA2XDM3N1wyMzNcMjM2XDIwM1wzNzdcMjExXDIxNXRcMzc3XDBcMCIKKyAgIlwwXDM3Ny8vJ1wxNFwwXDBcMFwxXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzMwXDMzM1wzMTFcMzc3XDIwNFwyMDYiCisgICJuXDM3N31cMjAxaVwzNzdcMjVcMjZcMjJcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDMyN1wwXDBcMFwzMDFcMFwwXDBXXDAiCisgICJcMFwwXDVcMFwwXDBcMzc3XDMyN1wzMzJcMzExXDM3N3l9Z1wzNzc9XDc3IiI0XDM3N1wzNDBcMzQwXDMzMVwzNzdcMzUzIgorICAiXDM1NVwzMzVcMzc3XDM1MFwzNTNcMzMxXDM3N1wzNTBcMzUzXDMzMVwzNzdcMzUwXDM1M1wzMzFcMzc3XDM1MFwzNTMiCisgICJcMzMxXDM3N1wzNTBcMzUzXDMzMVwzNzdcMzUwXDM1M1wzMzFcMzc3XDM1MFwzNTNcMzMxXDM3N1wzNTBcMzUzXDMzMSIKKyAgIlwzNzdcMzUwXDM1M1wzMzFcMzc3XDM1MFwzNTNcMzMxXDM3N1wzNTBcMzUzXDMzMVwzNzdcMzQ3XDM1MlwzMzBcMzc3IgorICAiXDM0M1wzNDZcMzI0XDM3N1wzMzZcMzQxXDMyMFwzNzdcMzMyXDMzNFwzMTRcMzc3XDMzMlwzMzRcMzIxXDM3NyssKFwzNzciCisgICIsLCNcMjNcMFwwXDBcMzc3XDMyN1wzMzJcMzA2XDM3N29zXlwzNzdcMTVcMTVcMTVcMzc3XDM2NFwzNjRcMzU0XDM3NyIKKyAgIlwzMTdcMzI0XDI1N1wzNzdcMzE3XDMyNFwyNTdcMzc3XDMxN1wzMjRcMjU3XDM3N1wzMTdcMzI0XDI1N1wzNzdcMzE3IgorICAiXDMyNFwyNTdcMzc3XDMxN1wzMjRcMjU3XDM3N1wzMTdcMzI0XDI1N1wzNzdcMzE3XDMyNFwyNTdcMzc3XDMxN1wzMjQiCisgICJcMjU3XDM3N1wzMTZcMzIzXDI1NlwzNzdcMVwxXDFcMzc3XDFcMVwxXDM3N1wxXDFcMVwzNzdcMzA2XDMxM1wyNTBcMzc3IgorICAiXDMwMlwzMDZcMjQ0XDM3N1wyNzNcMzAwXDIzNlwzNzdcMjUzXDI2MFwyMjFcMzc3IyVcMzZcMzc3MjInNVwwXDBcMFwzNzciCisgICJcMzI3XDMzMlwzMDZcMzc3SUs9XDM3N1wzMzRcMzM0XDMyNFwzNzdcMzUyXDM1NFwzMzVcMzc3XDMxNVwzMjJcMjU1XDM3NyIKKyAgIlwzMTZcMzIzXDI1NlwzNzdcMzE2XDMyM1wyNTZcMzc3XDMxNVwzMjJcMjU1XDM3N1wzMTZcMzIzXDI1NlwzNzdcMzE1IgorICAiXDMyMlwyNTVcMzc3XDI2MFwyNjVcMjI1XDM3N1wxMlwxMlwxMFwzNzdcMTJcMTJcMTBcMzc3XDI0NFwyNTBcMjEyXDM3NyIKKyAgIlw1XDVcNFwzNzdcMjcyXDI3MVwyNjZcMzc3XDVcNVw0XDM3N1wyMzNcMjM2XDIwM1wzNzdcMTFcMTFcMTBcMzc3XDExIgorICAiXDExXDdcMzc3b3FdXDM3N1wxMFwxMFw2XDI3NzEyKEpcMFwwXDBcMzc3XDMyNVwzMzBcMzA0XDM3N1wyNlwyNlwyNlwzNzciCisgICJcMzYyXDM2MlwzNTJcMzc3XDMxMlwzMTdcMjUzXDM3N1wzMTJcMzE3XDI1MlwzNzdcMzEyXDMxN1wyNTNcMzc3XDMxMiIKKyAgIlwzMTdcMjUyXDM3N1wzMTFcMzE2XDI1MlwzNzdcMzEyXDMxN1wyNTJcMzc3XDMxMVwzMTZcMjUyXDM3N1wxMlwxMlwxMCIKKyAgIlwzNzdcMjA3XDIxMFwyMDNcMzc3cnJwXDM3N1wxMlwxMlwxMFwzNzdIRkFcMzc3XDIzN1wyMzVcMjI2XDM3N0hGQVwzNzciCisgICJcMTFcMTFcN1wzNzdcMjEwXDIwN1wyMDFcMzc3IyRcMzZcMzc3XDRcNFwzXDM3N1wxNVwxNVwxMlwyNDEyMyk+XDBcMCIKKyAgIlwwXDM3N1wyNjZcMjcwXDI0N1wzNzd0dHBcMzc3XDM1NFwzNTRcMzQyXDM3N1wzMDNcMzEwXDI0NVwzNzdcMzAyXDMwNyIKKyAgIlwyNDRcMzc3XDMwMlwzMDdcMjQ0XDM3N1wzMDJcMzA2XDI0NFwzNzdcMzAwXDMwNVwyNDJcMzc3XDMwMlwzMDZcMjQ0IgorICAiXDM3N1wyNzdcMzA0XDI0MVwzNzdcMTFcMTFcMTBcMzc3XDMxMFwzMDdcMzAyXDM3N1wyNjZcMjY1XDI1N1wzNzdcMjM3IgorICAiXDIzNVwyMjZcMzc3XDIzN1wyMzVcMjI2XDM3N1wyMzdcMjM1XDIyNlwzNzdcMjIwXDIxNlwyMDZcMzc3XDIyN1wyMjUiCisgICJcMjE2XDM3N1wyMDB9dFwzNzdIRkFcMzc3XDBcMFwwXDM3NlwzNFwzNFwyNmUzMyYnXDBcMFwwXDM3N1wyNDZcMjUxXDIzMCIKKyAgIlwzNzdcMzM0XDMzNFwzMjRcMzc3XDI3MFwyNzRcMjMzXDM3N1wyNzBcMjc0XDIzM1wzNzdcMjY1XDI3MVwyMzFcMzc3IgorICAiXDI2M1wyNjdcMjI3XDM3N1wyNjNcMjY3XDIyN1wzNzdcMjYwXDI2NVwyMjVcMzc3XDI2MFwyNjVcMjI1XDM3N1wyNTciCisgICJcMjYzXDIyNFwzNzdcMjE0XDIxN3ZcMzc3XDEwXDExXDdcMzc3XDIzN1wyMzVcMjI2XDM3N1wyMzdcMjM1XDIyNlwzNzciCisgICJZWFRcMzc3YF5XXDM3N1wyMTFcMjEwXDIwM1wzNzdcMjAwfXRcMzc3dnRrXDM3N1wzXDNcM1wzNzZcNVw1XDRcMzA3MyIKKyAgIjMnMjAwJlwyNFwwXDBcMFwzNzdcMjM2XDIzN1wyMjFcMzc3XDM0NVwzNDZcMzMyXDM3N1wyNTVcMjYxXDIyMlwzNzdcMjUxIgorICAiXDI1NVwyMTdcMzc3XDI0NlwyNTJcMjE0XDM3N1wyNDVcMjUxXDIxNFwzNzdcMjQzXDI0N1wyMTJcMzc3XDI0M1wyNDciCisgICJcMjEyXDM3N1wyNDFcMjQ1XDIxMFwzNzdcMVwxXDFcMzc3XDFcMVwxXDM3N0hGQVwzNzdcMjM3XDIzNVwyMjZcMzc3YCIKKyAgIl5XXDM3N0NCXDc3XDM3NygnJFwzNzc2NDBcMzc3XDIzN1wyMzVcMjI2XDM3N21rY1wzNzdIRkFcMzc3XDFcMVwxXDM1NyIKKyAgIlwwXDBcMFwzNTYsLCFcMTBcMFwwXDBcMzc3XDM0M1wzNDVcMzMxXDM3N1wzMDBcMzAzXDI1N1wzNzdcMjI0XDIzMHxcMzc3IgorICAiXDIxN1wyMjN5XDM3N1wyMTNcMjE3dVwzNzdcMjEyXDIxNnRcMzc3XDIxMFwyMTRzXDM3N1wyMTBcMjE0c1wzNzdcMjA1IgorICAiXDIxMXBcMzc3XDFcMVwwXDM3N1wyMTRcMjEzXDIxMVwzNzdcMjY2XDI2NVwyNTdcMzc3XDIzN1wyMzVcMjI2XDM3N1kiCisgICJYVFwzNzchXDQwXDM2XDM3N1wxMlwxMVwxMFwzNzdcMzBcMzBcMjZcMzc3XDM0NlwzNDZcMzQ0XDM3N1wyMDB9dFwzNzciCisgICJlY1xcXDM3N2BeV1wzNzdcMFwwXDBcMzU0XDM0XDM0XDM0XDMiIjM0KVtcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMCIKKyAgIlwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwIgorICAiXDBcMzc3XDBcMFwwXDM3N0hGQVwzNzdcMjM3XDIzNVwyMjZcMzc3XDIxMVwyMTBcMjAzXDM3NzY0MFwzNzdcMjZcMjYiCisgICJcMjRcMzc3XDIxNFwyMTNcMjExXDM3N1wzMzdcMzM2XDMzNFwzNzdlY1xcXDM3N0hGQVwzNzdcMFwwXDBcMzU0XDBcMCIKKyAgIlwwXDM1MlwwXDBcMFwxIiIzNChKMzQpVDM0KVkzNChaNDUpWjQ1KVo0NSlaNDUpWjQ1KVo0NSlaNDUpWlwzNlwzN1wzMCIKKyAgIntcMVwxXDBcMzY3XDI2MFwyNTdcMjUxXDM3N1wyMDB9dFwzNzdcMjY2XDI2NVwyNTdcMzc3XDM0NlwzNDZcMzQ0XDM3NyIKKyAgIlwzMjVcMzI0XDMyMVwzNzdcMjIzXDIyMVwyMTNcMzc3ZWNcXFwzNzdcMFwwXDBcMzY0XDEyXDEyXDdBXDM0XDM0XDM0IgorICAiXDNcMFwwXDBcMCIiMjIoJTI0KDgzNClCMjMoQzM0KUQzNClEMzQpRDM0KUQzNClEMzQpRDM0KURcMFwwXDBcMzY1XDI2NiIKKyAgIlwyNjVcMjU3XDM3N1wyNTNcMjUxXDI0M1wzNzdcMjM3XDIzNVwyMjZcMzc3XDIwMH10XDM3N1wyMDB9dFwzNzd2dGtcMzc3IgorICAidnRrXDM3N11cXFVcMzc3SEZBXDM3N1wwXDBcMFwzNjJcMFwwXDBcMVwwXDBcMFwwIiIzM1wzNlwxMSIiMDAmXDI0IiIxIgorICAiMSZcMzEiIjAwJFwzMSIiMzMoXDMyIiIzMyhcMzIiIjMzKFwzMiIiMzMoXDMyIiIzMyhcMzIiIjMzKFwzMiIiMzMoXDMyIgorICAiXDBcMFwwXDM2M1wxXDFcMVwzMTNZWFRcMzc3XDBcMFwwXDM2NkhGQVwzNzd2dGtcMzc3SEZBXDM3N1wwXDBcMFwzNjMiCisgICJJSUNcMzc3XDBcMFwwXDMwN1wwXDBcMFwzNjJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDEqKlwwXDJcMzdcMzdcMFwzXDM3IgorICAiXDM3XDBcMyIiODhcMzRcMyIiODhcMzRcMyIiODhcMzRcMyIiODhcMzRcMyIiODhcMzRcMyIiODhcMzRcMyIiODhcMzQiCisgICJcM1w0XDRcMiZcMFwwXDBcMzYyXDBcMFwwXDM2MlwyXDJcMSIiNVwwXDBcMFwzNDNCQTxcMzc3XDBcMFwwXDM0M1wxXDEiCisgICJcMCIiNVwwXDBcMFwzNjJcMFwwXDBcMzYyXDBcMFwwI1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzUxXDBcMFwwXDM1M1wwXDBcMFwzNTNcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAifTsKKworCisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wICovCisKK3N0YXRpYyBjb25zdCBndWludDggc3RvY2tfdmltX3Nlc3Npb25fbmV3W10gPQoreyAiIgorICAvKiBQaXhidWYgbWFnaWMgKDB4NDc2NDZiNTApICovCisgICJHZGtQIgorICAvKiBsZW5ndGg6IGhlYWRlciAoMjQpICsgcGl4ZWxfZGF0YSAoMjMwNCkgKi8KKyAgIlwwXDBcMTFcMzAiCisgIC8qIHBpeGRhdGFfdHlwZSAoMHgxMDEwMDAyKSAqLworICAiXDFcMVwwXDIiCisgIC8qIHJvd3N0cmlkZSAoOTYpICovCisgICJcMFwwXDBgIgorICAvKiB3aWR0aCAoMjQpICovCisgICJcMFwwXDBcMzAiCisgIC8qIGhlaWdodCAoMjQpICovCisgICJcMFwwXDBcMzAiCisgIC8qIHBpeGVsX2RhdGE6ICovCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwWVwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwyMDIiCisgICJcMFwwXDBcM1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzIzXDMyM1wzMjNcMzc3XDM2NlwzNjZcMzY2XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3MVwzNzFcMzcxXDM3N1wzMzJcMzMyIgorICAiXDMzMlwzNzdYWFhcMzc3XDBcMFwwXDMwMVwwXDBcMFw2XDBcMFwwXDFcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzY2XDM2NlwzNjZcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzMDdcMzA3XDMwN1wzNzdcMzIxXDMyMVwzMjFcMzc3XDMyNlwzMjZcMzI2XDM3N1wwXDBcMFwzNzdcMCIKKyAgIlwwXDBcMTBcMFwwXDBcMVwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzZcMzc2XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc2XDM3NlwzNzZcMzc3XDM3NVwzNzVcMzc1XDM3N1wzMDBcMzAwXDMwMFwzNzdcMzQxXDM0MSIKKyAgIlwzNDFcMzc3XDM2MFwzNjBcMzYwXDM3N1wyMzNcMjMzXDIzM1wzNzdcMFwwXDBcMzc3XDBcMFwwXDExXDBcMFwwXDFcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzYiCisgICJcMzc2XDM3N1wzNzVcMzc1XDM3NVwzNzdcMzc0XDM3NFwzNzNcMzc3XDM3NVwzNzVcMzc1XDM3N1wzNzRcMzc0XDM3MyIKKyAgIlwzNzdcMzczXDM3M1wzNzNcMzc3XDI1N1wyNTdcMjU2XDM3N1wzNTFcMzUxXDM1MVwzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDMzN1wzMzdcMzM3XDM3N1wyMTdcMjE3XDIxN1wzNzdcMFwwXDBcMzc3XDBcMFwwXDExXDBcMFwwXDFcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc2XDM3NlwzNzZcMzc3XDM3NVwzNzVcMzc1XDM3N1wzNzRcMzc0XDM3M1wzNzdcMzczXDM3MyIKKyAgIlwzNzNcMzc3XDM3MlwzNzJcMzcxXDM3N1wzNzNcMzczXDM3M1wzNzdcMzcyXDM3MlwzNzFcMzc3XDM3MVwzNzFcMzcwIgorICAiXDM3N1wyNDRcMjQ0XDI0M1wzNzdcMzYwXDM2MFwzNjBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNjRcMzY0XDM2NFwzNzciCisgICJcMzE3XDMxN1wzMTdcMzc3XDI0MlwyNDJcMjQyXDM3N1wwXDBcMFwyNjRcMFwwXDBcMTBcMFwwXDBcMVwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzZcMzc2XDM3N1wzNzVcMzc1XDM3NSIKKyAgIlwzNzdcMzc0XDM3NFwzNzNcMzc3XDM3M1wzNzNcMzczXDM3N1wzNzJcMzcyXDM3MVwzNzdcMzcxXDM3MVwzNzBcMzc3IgorICAiXDM3MFwzNzBcMzY3XDM3N1wzNzFcMzcxXDM3MFwzNzdcMzcwXDM3MFwzNjdcMzc3XDM3MFwzNjdcMzY2XDM3N1wyMzYiCisgICJcMjM2XDIzNlwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMCIKKyAgIlwzNzdcMFwwXDBcMjAxXDBcMFwwXDVcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzRcMzc0XDM3M1wzNzdcMzczXDM3M1wzNzNcMzc3XDM3MlwzNzJcMzcxXDM3N1wzNzFcMzcxXDM3MFwzNzciCisgICJcMzcwXDM3MFwzNjdcMzc3XDM3MFwzNjdcMzY2XDM3N1wzNjdcMzY2XDM2NVwzNzdcMzcwXDM2N1wzNjZcMzc3XDM2NyIKKyAgIlwzNjZcMzY1XDM3N1wzNjZcMzY2XDM2NFwzNzdcMzY0XDM2M1wzNjJcMzc3XDMzNlwzMzVcMzM0XDM3N1wzMjNcMzIyIgorICAiXDMyMFwzNzdcMjY3XDI2N1wyNjVcMzc3XDIzN1wyMzZcMjM1XDM3N3Bvb1wzNzdlYlpcMzc3XDBcMFwwXDM3N1wwXDAiCisgICJcMFwyMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3MlwzNzJcMzcxXDM3NyIKKyAgIlwzNzFcMzcxXDM3MFwzNzdcMzcwXDM3MFwzNjdcMzc3XDM3MFwzNjdcMzY2XDM3N1wzNjdcMzY2XDM2NVwzNzdcMzY2IgorICAiXDM2NlwzNjRcMzc3XDM2NVwzNjRcMzYzXDM3N1wzNjZcMzY2XDM2NFwzNzdcMzY1XDM2NFwzNjNcMzc3XDM2NFwzNjMiCisgICJcMzYyXDM3N1wzNjJcMzYyXDM2MFwzNzdcMzQ0XDM0NFwzNDJcMzc3XDMzMlwzMzFcMzI3XDM3N1wzMzBcMzMwXDMyNiIKKyAgIlwzNzdcMzE1XDMxNFwzMTJcMzc3XDI1N1wyNTZcMjU0XDM3N1wyMTBcMjA0e1wzNzdcMFwwXDBcMzc3XDBcMFwwXDM1IgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzcwXDM3MFwzNjdcMzc3XDM3MCIKKyAgIlwzNjdcMzY2XDM3N1wzNjdcMzY2XDM2NVwzNzdcMzY2XDM2NlwzNjRcMzc3XDM2NVwzNjRcMzYzXDM3N1wzNjRcMzYzIgorICAiXDM2MlwzNzdcMzYzXDM2M1wzNjFcMzc3XDM2NFwzNjNcMzYyXDM3N1wzNjNcMzYzXDM2MVwzNzdcMzYyXDM2MlwzNjAiCisgICJcMzc3XDM1N1wzNTdcMzU1XDM3N1wzNTZcMzU1XDM1M1wzNzdcMzU1XDM1NFwzNTJcMzc3XDM1MVwzNTBcMzQ2XDM3NyIKKyAgIlwzMjVcMzI0XDMyM1wzNzdcMzA0XDMwM1wzMDJcMzc3XDIxN1wyMTJcMjAxXDM3N1wwXDBcMFwzNzdcMFwwXDBcNDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNjZcMzY1XDM2NFwzNzdcMVwxIgorICAiXDFcMzc3XDFcMVwxXDM3N1wxXDFcMVwzNzdcMzYzXDM2M1wzNjFcMzc3XDM2MlwzNjJcMzYwXDM3N1wzNjFcMzYxXDM1NyIKKyAgIlwzNzdcMzYyXDM2MlwzNjBcMzc3XDM2MVwzNjFcMzU3XDM3N1wzNjFcMzYwXDM1NlwzNzdcMzU2XDM1NVwzNTNcMzc3IgorICAiXDM1NFwzNTNcMzUxXDM3N1wzNTJcMzUxXDM0N1wzNzdcMzQ1XDM0NFwzNDJcMzc3XDM0NFwzNDNcMzQwXDM3N1wzMjIiCisgICJcMzIxXDMxNlwzNzdcMjE1XDIxMH5cMzc3XDBcMFwwXDM3N1wwXDBcMFw0MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAjXDAiCisgICJcMFwwXDM3N1wxNVwxNVwxNVwzNzdcMzAzXDMwMlwzMDFcMzc3XDZcNlw2XDM3N1wzMzVcMzM0XDMzMlwzNzdcNlw2XDYiCisgICJcMzc3XDI3N1wyNzdcMjc1XDM3N1wxNFwxNFwxNFwzNzdcMTRcMTRcMTRcMzc3XDMxN1wzMTdcMzE1XDM3N1wzNjBcMzU3IgorICAiXDM1NVwzNzdcMzU3XDM1NlwzNTRcMzc3XDM1NFwzNTNcMzUxXDM3N1wzNTBcMzQ3XDM0NVwzNzdcMzQ1XDM0NFwzNDEiCisgICJcMzc3XDM0NFwzNDNcMzQwXDM3N1wzNDJcMzQxXDMzNlwzNzdcMzQxXDMzN1wzMzRcMzc3XDIyN1wyMjJcMjEwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcNDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM2MlwzNTJcMzUyXDM1MlwzNzdcMjYyXDI2MiIKKyAgIlwyNjBcMzc3XDE0XDE0XDE0XDM3N0hGQVwzNzdcMjM3XDIzNVwyMjZcMzc3SEZBXDM3N1wxNFwxNFwxNFwzNzdcMjEwIgorICAiXDIwN1wyMDFcMzc3NjY1XDM3N1wxNFwxNFwxNFwzNzdcMzYwXDM1N1wzNTVcMzc3XDM1N1wzNTZcMzU0XDM3N1wzNTQiCisgICJcMzUzXDM1MVwzNzdcMzUwXDM0N1wzNDVcMzc3XDM0NVwzNDRcMzQxXDM3N1wzNDRcMzQzXDM0MFwzNzdcMzQyXDM0MSIKKyAgIlwzMzZcMzc3XDM0MVwzMzdcMzM0XDM3N1wyNDRcMjM2XDIyM1wzNzdcMFwwXDBcMzc3XDBcMFwwXDQwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwzNjJcMjM1XDIzNFwyMzBcMzc3XDIyMVwyMjBcMjEyXDM3N1wyMzdcMjM1XDIyNlwzNzdcMjM3IgorICAiXDIzNVwyMjZcMzc3XDIzN1wyMzVcMjI2XDM3N1wyMjBcMjE2XDIwNlwzNzdcMjI3XDIyNVwyMTZcMzc3XDIwMH10XDM3NyIKKyAgIkhGQVwzNzdcMTRcMTRcMTNcMzc3XDM1NVwzNTRcMzUyXDM3N1wzNTRcMzUzXDM1MVwzNzdcMzUwXDM0N1wzNDRcMzc3IgorICAiXDM0N1wzNDZcMzQzXDM3N1wzNDNcMzQyXDMzN1wzNzdcMzQyXDM0MFwzMzVcMzc3XDM0MVwzNDBcMzM0XDM3N1wzNDAiCisgICJcMzM3XDMzM1wzNzdcMjQxXDIzNFwyMjBcMzc3XDBcMFwwXDM3N1wwXDBcMFw0MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICIzXDBcMFwwXDM3N1wyMzdcMjM1XDIyNlwzNzdcMjM3XDIzNVwyMjZcMzc3WVhUXDM3N2BeV1wzNzdcMjExXDIxMFwyMDMiCisgICJcMzc3XDIwMH10XDM3N3Z0a1wzNzdcMTNcMTNcMTNcMzc3XDI3NFwyNzNcMjcxXDM3N1wzNTFcMzUwXDM0NVwzNzdcMzUxIgorICAiXDM1MFwzNDVcMzc3XDM0NVwzNDRcMzQxXDM3N1wzNDZcMzQ0XDM0MVwzNzdcMzQzXDM0MlwzMzZcMzc3XDMzN1wzMzYiCisgICJcMzMyXDM3N1wzMzZcMzM1XDMzMVwzNzdcMzM1XDMzNFwzMzBcMzc3XDI0MVwyMzNcMjIwXDM3N1wwXDBcMFwzNzdcMCIKKyAgIlwwXDBcNDBcMFwwXDBcMFwwXDBcMFwzNzVcMFwwXDBcMzc1SEZBXDM3N1wyMzdcMjM1XDIyNlwzNzdgXldcMzc3Q0JcNzciCisgICJcMzc3KCckXDM3NzY0MFwzNzdcMjM3XDIzNVwyMjZcMzc3bWtjXDM3N0hGQVwzNzdcMzFcMzFcMzFcMzc3XDIyXDIyXDIxIgorICAiXDM3N1wzNDdcMzQ1XDM0MlwzNzdcMzQ0XDM0M1wzMzdcMzc3XDM0M1wzNDJcMzM2XDM3N1wzNDBcMzM3XDMzM1wzNzciCisgICJcMzM2XDMzNVwzMzFcMzc3XDMzNVwzMzRcMzMwXDM3N1wzMzRcMzMzXDMyN1wzNzdcMjQxXDIzM1wyMjBcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFw0MFwwXDBcMFwwXDBcMFwwXDM3NVwzNTZcMzU2XDM1NVwzNzdcMjY2XDI2NVwyNTdcMzc3XDIzNyIKKyAgIlwyMzVcMjI2XDM3N1lYVFwzNzchXDQwXDM2XDM3N1wxMlwxMVwxMFwzNzdcMzBcMzBcMjZcMzc3XDM0NlwzNDZcMzQ0IgorICAiXDM3N1wyMDB9dFwzNzdlY1xcXDM3N2BeV1wzNzdcMjFcMjFcMjFcMzc3XDM0NFwzNDNcMzM3XDM3N1wzNDJcMzQxXDMzNSIKKyAgIlwzNzdcMzQwXDMzN1wzMzNcMzc3XDMzNlwzMzVcMzMxXDM3N1wzMzRcMzMzXDMyN1wzNzdcMzMzXDMzMVwzMjVcMzc3IgorICAiXDMzMVwzMjdcMzIzXDM3N1wyMzdcMjMxXDIxNVwzNzdcMFwwXDBcMzc3XDBcMFwwXDQwXDBcMFwwXDBcMFwwXDBcMzc1IgorICAiXDBcMFwwXDM3MEhGQVwzNzdcMjM3XDIzNVwyMjZcMzc3XDIxMVwyMTBcMjAzXDM3NzY0MFwzNzdcMjZcMjZcMjRcMzc3IgorICAiXDIxNFwyMTNcMjExXDM3N1wzMzdcMzM2XDMzNFwzNzdlY1xcXDM3N0hGQVwzNzdcMjNcMjNcMjNcMzc3XDIzXDIzXDIzIgorICAiXDM3N1wzNDFcMzQwXDMzNFwzNzdcMzQxXDM0MFwzMzRcMzc3XDMzNlwzMzVcMzMxXDM3N1wzMzVcMzMzXDMyN1wzNzciCisgICJcMzM0XDMzMlwzMjZcMzc3XDMzMVwzMjdcMzIzXDM3N1wzMzBcMzI2XDMyMlwzNzdcMjM2XDIzMFwyMTVcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFw0MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiIjNcMFwwXDBcMzc3XDI2MFwyNTdcMjUxXDM3N1wyMDAiCisgICJ9dFwzNzdcMjY2XDI2NVwyNTdcMzc3XDM0NlwzNDZcMzQ0XDM3N1wzMjVcMzI0XDMyMVwzNzdcMjIzXDIyMVwyMTNcMzc3IgorICAiZWNcXFwzNzdcMTNcMTNcMTNcMzc3XDI2M1wyNjJcMjU3XDM3N1wzNDFcMzQwXDMzNFwzNzdcMzM3XDMzNlwzMzJcMzc3IgorICAiXDM0MFwzMzZcMzMyXDM3N1wzMzVcMzMzXDMyN1wzNzdcMzM0XDMzMlwzMjZcMzc3XDMzMVwzMjdcMzIzXDM3N1wzMzAiCisgICJcMzI2XDMyMVwzNzdcMzI3XDMyNVwzMjFcMzc3XDIzNVwyMjdcMjEzXDM3N1wwXDBcMFwzNzdcMFwwXDBcNDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDM2MlwyNjZcMjY1XDI1N1wzNzdcMjUzXDI1MVwyNDNcMzc3XDIzN1wyMzVcMjI2XDM3NyIKKyAgIlwyMDB9dFwzNzdcMjAwfXRcMzc3dnRrXDM3N3Z0a1wzNzddXFxVXDM3N0hGQVwzNzdcMTNcMTNcMTNcMzc3XDM0MFwzMzYiCisgICJcMzMyXDM3N1wzMzZcMzM0XDMzMFwzNzdcMzM2XDMzNFwzMzBcMzc3XDMzNFwzMzJcMzI2XDM3N1wzMzRcMzMyXDMyNiIKKyAgIlwzNzdcMzMwXDMyNlwzMjJcMzc3XDMyN1wzMjZcMzIxXDM3N1wzMjVcMzIzXDMxNlwzNzdcMjMzXDIyNVwyMTJcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFw0MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzYyXDBcMFwwXDM3N1lYVFwzNzdcNlw2XDUiCisgICJcMzc3SEZBXDM3N3Z0a1wzNzdIRkFcMzc3XDEwXDEwXDdcMzc3SUlDXDM3NyQjXDQwXDM3N1wxMFw3XDdcMzc3XDI0MiIKKyAgIlwyMzRcMjIwXDM3N1wyNDFcMjMzXDIxN1wzNzdcMjQxXDIzM1wyMjBcMzc3XDIzN1wyMzFcMjE1XDM3N1wyMzdcMjMxIgorICAiXDIxNVwzNzdcMjM1XDIyN1wyMTRcMzc3XDIzNVwyMjdcMjE0XDM3N1wyMzNcMjI2XDIxMlwzNzdnY1lcMzc3XDBcMFwwIgorICAiXDM3N1wwXDBcMFw0MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAjXDBcMFwwXDM2N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDAiCisgICJcMFwwXDM3N0JBPFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDAiCisgICJcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMCIKKyAgIlwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMHFcMFwwXDBcMzBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMlwwIgorICAiXDBcMFwxN1wwXDBcMFwzNVwwXDBcMFwzNTRcMFwwXDBcMzU2XDBcMFwwXDM1NlwwXDBcMFw0MFwwXDBcMFw0MFwwXDAiCisgICJcMFw0MFwwXDBcMFw0MFwwXDBcMFw0MFwwXDBcMFw0MFwwXDBcMFw0MFwwXDBcMFw0MFwwXDBcMFw0MFwwXDBcMFw0MCIKKyAgIlwwXDBcMFw0MFwwXDBcMFw0MFwwXDBcMFw0MFwwXDBcMFwzMFwwXDBcMFwxMFwwXDBcMFwwIn07CisKKworLyogR2RrUGl4YnVmIFJHQkEgQy1Tb3VyY2UgaW1hZ2UgZHVtcCAqLworCitzdGF0aWMgY29uc3QgZ3VpbnQ4IHN0b2NrX3ZpbV9zZXNzaW9uX3NhdmVbXSA9Cit7ICIiCisgIC8qIFBpeGJ1ZiBtYWdpYyAoMHg0NzY0NmI1MCkgKi8KKyAgIkdka1AiCisgIC8qIGxlbmd0aDogaGVhZGVyICgyNCkgKyBwaXhlbF9kYXRhICgyMzA0KSAqLworICAiXDBcMFwxMVwzMCIKKyAgLyogcGl4ZGF0YV90eXBlICgweDEwMTAwMDIpICovCisgICJcMVwxXDBcMiIKKyAgLyogcm93c3RyaWRlICg5NikgKi8KKyAgIlwwXDBcMGAiCisgIC8qIHdpZHRoICgyNCkgKi8KKyAgIlwwXDBcMFwzMCIKKyAgLyogaGVpZ2h0ICgyNCkgKi8KKyAgIlwwXDBcMFwzMCIKKyAgLyogcGl4ZWxfZGF0YTogKi8KKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3NSIKKyAgIlwwXDBcMFwzNzVcMFwwXDBcMzc1XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCNcMFwwXDBcMzYyXDBcMFwwXDM2MlwwXDBcMCIiM1wwXDBcMFwzNzBcMjcyIgorICAiXDI3MVwyNjZcMzc3XDBcMFwwXDM3MFwwXDBcMCIiM1wwXDBcMFwzNjJcMFwwXDBcMzYyXDBcMFwwI1wwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBVXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDAiCisgICJcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdtbW1cMzc3cnJwXDM3NyIKKyAgIlwwXDBcMFwzNzdIRkFcMzc3XDIzN1wyMzVcMjI2XDM3N0hGQVwzNzdcMFwwXDBcMzc3XDIxMFwyMDdcMjAxXDM3N1wwIgorICAiXDBcMFwzMzFcMFwwXDBcMzYyXDBcMFwwXDFcMFwwXDBcMFwwXDBcMFwzNzdcMzAzXDMyN1wzNjRcMzc3XDI1MVwzMTUiCisgICJcMzQ1XDM3N3V1elwzNzdcMzU3XDMwNVwyNzNcMzc3XDM2MVwzMTBcMjc2XDM3N1wzNjBcMzA2XDI3NFwzNzdcMzU2XDI3NCIKKyAgIlwyNjJcMzc3XDM1NlwyNzZcMjY1XDM3N1wzNTZcMzAxXDI3MFwzNzdcMzU1XDI3N1wyNjZcMzc3XDEzXDExXDEwXDM3NyIKKyAgIlwzMTBcMzA3XDMwMlwzNzdcMjY2XDI2NVwyNTdcMzc3XDIzN1wyMzVcMjI2XDM3N1wyMzdcMjM1XDIyNlwzNzdcMjM3IgorICAiXDIzNVwyMjZcMzc3XDIyMFwyMTZcMjA2XDM3N1wyMjdcMjI1XDIxNlwzNzdcMjAwfXRcMzc3SEZBXDM3N1wwXDBcMFwzNjMiCisgICJcMFwwXDBcNFwwXDBcMFwwXDBcMFwwXDM3N1wyNzNcMzI2XDM1MFwzNzdcMjEyXDI1MlwzMDVcMzc3YF9oXDM3N1wzNDAiCisgICJcMjE1flwzNzdcMzQwXDIwMm5cMzc3XDM0MFwyMDBuXDM3N1wzMzR6aFwzNzdcMzM0XDIwMXFcMzc3XDMzMnhoXDM3NyIKKyAgIlwzMjRcMjAxc1wzNzdcMjUxZFhcMzc3XDEyXDVcNVwzNzdcMjM3XDIzNVwyMjZcMzc3XDIzN1wyMzVcMjI2XDM3N1lYIgorICAiVFwzNzdgXldcMzc3XDIxMVwyMTBcMjAzXDM3N1wyMDB9dFwzNzd2dGtcMzc3XDBcMFwwXDM3N1wwXDBcMEZcMFwwXDAiCisgICJcMTFcMFwwXDBcMFwwXDBcMFwzNzdcMjcyXDMyNVwzNTFcMzc3XDIxMFwyNDdcMzAzXDM3N2hmcFwzNzdcMzEwXDIwMSIKKyAgIntcMzc3XDMxM3x0XDM3N1wzMTN6c1wzNzdcMzEze3NcMzc3XDMxNHxyXDM3N1wzMTN9c1wzNzdcMVwwXDBcMzc3XDFcMCIKKyAgIlwwXDM3N0hGQVwzNzdcMjM3XDIzNVwyMjZcMzc3YF5XXDM3N0NCXDc3XDM3NygnJFwzNzc2NDBcMzc3XDIzN1wyMzVcMjI2IgorICAiXDM3N21rY1wzNzdIRkFcMzc3XDBcMFwwXDM0NlwwXDBcMFwzNTRcMFwwXDBcMFwwXDBcMFwzNzdcMjY2XDMyM1wzNDciCisgICJcMzc3XDIwN1wyNTNcMzAxXDM3N3Nzc1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMlwyXDJcMzc3XDIxNFwyMTMiCisgICJcMjExXDM3N1wyNjZcMjY1XDI1N1wzNzdcMjM3XDIzNVwyMjZcMzc3WVhUXDM3NyFcNDBcMzZcMzc3XDEyXDExXDEwXDM3NyIKKyAgIlwzMFwzMFwyNlwzNzdcMzQ2XDM0NlwzNDRcMzc3XDIwMH10XDM3N2VjXFxcMzc3YF5XXDM3N1wwXDBcMFwzNTRcMFwwIgorICAiXDBcMFwwXDBcMFwzNzdcMjcxXDMyM1wzNDdcMzc3XDIwNVwyNDRcMjc3XDM3N3Nzc1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMlwyXDJcMzc3XDdcN1w3XDM3N0hGQVwzNzdcMjM3XDIzNVwyMjZcMzc3XDIxMVwyMTBcMjAzXDM3NyIKKyAgIjY0MFwzNzdcMjZcMjZcMjRcMzc3XDIxNFwyMTNcMjExXDM3N1wzMzdcMzM2XDMzNFwzNzdlY1xcXDM3N0hGQVwzNzdcMCIKKyAgIlwwXDBcMzU0XDBcMFwwXDM1MlwwXDBcMFwwXDBcMFwwXDM3N1wyNzFcMzIzXDM0NlwzNzdcMjA0XDI0M1wyNzdcMzc3IgorICAic3NzXDM3N1wzMTZcMzE2XDMxNlwzNzdcMzE1XDMxNVwzMTVcMzc3XDMxNVwzMTVcMzE1XDM3N1wzMTVcMzE1XDMxNVwzNzciCisgICJcMzE1XDMxNVwzMTVcMzc3XDMxNVwzMTVcMzE1XDM3N1wzMTVcMzE1XDMxNVwzNzdcMjQ0XDI0NFwyNDRcMzc3XDEyXDEyIgorICAiXDEyXDM3N1wyNjBcMjU3XDI1MVwzNzdcMjAwfXRcMzc3XDI2NlwyNjVcMjU3XDM3N1wzNDZcMzQ2XDM0NFwzNzdcMzI1IgorICAiXDMyNFwzMjFcMzc3XDIyM1wyMjFcMjEzXDM3N2VjXFxcMzc3XDBcMFwwXDM3N1wwXDBcMEtcMFwwXDBcMTNcMFwwXDAiCisgICJcMFwwXDBcMFwzNzdcMjY3XDMyMlwzNDdcMzc3XDIwMlwyNDBcMjczXDM3N2NjY1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDE1XDE1XDE1XDM3N1wyNjZcMjY1XDI1N1wzNzdcMjUzXDI1MVwyNDNcMzc3IgorICAiXDIzN1wyMzVcMjI2XDM3N1wyMDB9dFwzNzdcMjAwfXRcMzc3dnRrXDM3N3Z0a1wzNzddXFxVXDM3N0hGQVwzNzdcMFwwIgorICAiXDBcMzY0XDBcMFwwXDEzXDBcMFwwXDBcMFwwXDBcMzc3XDI2NVwzMTJcMzQ1XDM3N1wxNzdcMjQyXDI3MVwzNzdzc3MiCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wxNVwxNVwxNVwzNzc6OjpcMzc3IgorICAiWVhUXDM3N1wxMlwxMlwxMlwzNzdIRkFcMzc3dnRrXDM3N0hGQVwzNzdcNlwxMFwxMVwzNzdJSUNcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNjRcMFwwXDBcMTNcMFwwXDBcMFwwXDBcMFwzNzdcMjU2XDMxNFwzNDVcMzc3fVwyNDBcMjY2XDM3N3NzIgorICAic1wzNzdcMzE2XDMxNlwzMTZcMzc3XDMxNVwzMTVcMzE1XDM3N1wzMTVcMzE1XDMxNVwzNzdcMzE1XDMxNVwzMTVcMzc3IgorICAiXDMxNVwzMTVcMzE1XDM3N1wzMTVcMzE1XDMxNVwzNzdcMzE1XDMxNVwzMTVcMzc3XDI2MFwyNjBcMjYwXDM3N1wxMlwxMiIKKyAgIlwxMlwzNzdcMTJcMTJcMTJcMzc3XDI0NFwyNDRcMjQ0XDM3N1wyNlwyNlwyNlwzNzdCQTxcMzc3XDE0XDE0XDE0XDM3NyIKKyAgImxcMjAyXDIyNFwzNzdcNFw0XDVcMzc3XDBcMFwwXDM3N1wwXDBcMD1cMFwwXDBcMTNcMFwwXDBcMFwwXDBcMFwzNzdcMjYwIgorICAiXDMyMVwzNDRcMzc3XDIwM1wyNDFcMjY2XDM3N3NbW1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wyNlwyNlwyNlwzNzdcMjRcMjRcMjRcMzc3XDExXDExXDExXDM3N1wyMDNcMjQwXDI3MFwzNzdRXFxkXDM3N1wwIgorICAiXDBcMFwzNzdcMFwwXDBcMzZcMFwwXDBcMTNcMFwwXDBcMFwwXDBcMFwzNzdcMjUyXDMxNlwzNDNcMzc3e1wyMzNcMjYyIgorICAiXDM3N3pcMjE2XDIzMlwzNzd6enpcMzc3c3NzXDM3N3Nzc1wzNzdzc3NcMzc3c3NzXDM3N3Nzc1wzNzdrb3JcMzc3b28iCisgICJvXDM3N3Nzc1wzNzdzc3NcMzc3c3NzXDM3N3Nzc1wzNzdpaWlcMzc3b3d+XDM3N1wyMDZcMjQyXDI3MVwzNzc6UV1cMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNlwwXDBcMFwxM1wwXDBcMFwwXDBcMFwwXDM3N1wyNTFcMzExXDM0MlwzNzd0XDIyNFwyNTciCisgICJcMzc3XDIwMVwyMzZcMjY2XDM3N1wyMDNcMjQwXDI3MFwzNzdcMjA2XDI0MlwyNzFcMzc3XDIwMlwyMzdcMjY3XDM3NyIKKyAgIlwxNzdcMjM1XDI2NlwzNzd+XDIzNFwyNjVcMzc3XDIwMlwyMzdcMjY3XDM3N3lcMjMwXDI2MlwzNzdcMjA2XDI0MlwyNzEiCisgICJcMzc3XDIwNVwyNDFcMjcwXDM3N1wyMDVcMjQxXDI3MFwzNzdcMjA3XDI0M1wyNzJcMzc3XDIwMlwyMzdcMjY3XDM3NyIKKyAgIlwyMTRcMjQ3XDI3NVwzNzdcMjAzXDI0MFwyNzBcMzc3XDIxMlwyNDVcMjczXDM3NzZKWVwzNzdcMFwwXDBcMzc3XDBcMCIKKyAgIlwwXDM2XDBcMFwwXDEzXDBcMFwwXDBcMFwwXDBcMzc3XDI1M1wzMDRcMzQyXDM3N3JcMjI0XDI1NVwzNzdvXDIyMFwyNTQiCisgICJcMzc3cVwyMjJcMjU2XDM3N0FKTlwzNzdCSlFcMzc3UltjXDM3N2JveVwzNzdfbHZcMzc3XFxpcVwzNzdaZm9cMzc3WCIKKyAgImNrXDM3N1djalwzNzdSW2NcMzc3O1NgXDM3NzlCS1wzNzd4XDIyN1wyNjNcMzc3XDI0NFwyNzFcMzEzXDM3NzZIU1wzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM2XDBcMFwwXDEzXDBcMFwwXDBcMFwwXDBcMzc3XDI1MlwzMTFcMzQyXDM3N3BcMjIxXDI1MiIKKyAgIlwzNzdvXDIxN1wyNDdcMzc3SlNZXDM3N1wyMjdcMjIzXDIxNFwzNzdcMzM3XDMzNVwzMzJcMzc3XDM0M1wzNDFcMzM2IgorICAiXDM3N1wzNTNcMzUyXDM1MFwzNzdcMzUzXDM1MlwzNTBcMzc3XDM1MlwzNTFcMzQ3XDM3N1wzMzdcMzM1XDMzMlwzNzciCisgICJcMzE3XDMxNlwzMTFcMzc3XDMxMVwzMDZcMzAwXDM3N1wyMzNcMjI2XDIxNlwzNzdWYWhcMzc3S2V6XDM3N1RzXDIxNCIKKyAgIlwzNzdcMjUyXDMwNlwzMzVcMzc3NEZOXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzZcMFwwXDBcMTNcMFwwXDBcMFwwXDBcMCIKKyAgIlwzNzdcMjUyXDMxMVwzNDFcMzc3bFwyMTZcMjQ2XDM3N2xcMjE0XDI0NFwzNzdAR01cMzc3XDMzMlwzMzBcMzIzXDM3NyIKKyAgIlwzNDdcMzQ2XDM0MlwzNzdnZV5cMzc3Uk9HXDM3N1JPR1wzNzdcMzMxXDMyN1wzMjRcMzc3XDMwN1wzMDVcMjc3XDM3NyIKKyAgIlwzMDBcMjc0XDI2NVwzNzdcMjcwXDI2M1wyNTNcMzc3XDMxN1wzMTZcMzExXDM3N0NMVFwzNzdNaVwxNzdcMzc3T29cMjA0IgorICAiXDM3N1wyNjNcMzEyXDMzNFwzNzcxPklcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNlwwXDBcMFwxM1wwXDBcMFwwXDBcMFwwIgorICAiXDM3N1wyNTBcMzEwXDM0MVwzNzdrXDIxNVwyNDZcMzc3clwyMTdcMjQ0XDM3N0BHTVwzNzdcMzQyXDM0MVwzMzVcMzc3IgorICAiXDM2MFwzNTdcMzU0XDM3N2dlXlwzNzdST0dcMzc3Uk9HXDM3N1wzMTVcMzEyXDMwNlwzNzdcMzAyXDI3N1wyNzFcMzc3IgorICAiXDMwMFwyNzRcMjY1XDM3N1wzMTJcMzA2XDMwMFwzNzdcMzM0XDMzMlwzMjdcMzc3S1VdXDM3N05pXDE3N1wzNzdPb1wyMDQiCisgICJcMzc3XDI3MlwzMTRcMzM0XDM3NzE+SVwzNzdcMFwwXDBcMzc3XDBcMFwwXDM2XDBcMFwwXDEzXDBcMFwwXDBcMFwwXDAiCisgICJcMzc3XDI0NFwzMDRcMzM2XDM3N2lcMjEzXDI0M1wzNzdwXDIxMlwyNDFcMzc3OD5DXDM3N1wzNDBcMzM2XDMzMlwzNzciCisgICJcMzUzXDM1MlwzNTBcMzc3UU5GXDM3N09MRFwzNzdPTERcMzc3XDMwN1wzMDRcMjc2XDM3N1wzMDBcMjc0XDI2NVwzNzciCisgICJcMzEzXDMxMFwzMDJcMzc3XDM0MVwzNDBcMzM0XDM3N1wzNTFcMzUwXDM0NlwzNzdHUVhcMzc3Tmh5XDM3N01sXDIwMCIKKyAgIlwzNzdcMjQzXDMwM1wzMzNcMzc3OFw3N0NcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNlwwXDBcMFwxM1wwXDBcMFwwXDBcMCIKKyAgIlwwXDM3N3dcMjExXDIzMVwzNzduXDIxMVwyMzZcMzc3ZVwyMDVcMjM0XDM3NzM4PFwzNzdcMzI3XDMyNFwzMjBcMzc3IgorICAiXDMyNlwzMjRcMzIwXDM3N05KQ1wzNzdNSUJcMzc3TUlCXDM3N1wzMDBcMjc0XDI2NVwzNzdcMzIxXDMxNlwzMTFcMzc3IgorICAiXDM0NlwzNDVcMzQyXDM3N1wzNTVcMzU0XDM1MlwzNzdcMzQ2XDM0NVwzNDJcMzc3RU9VXDM3N0hhc1wzNzdNZnhcMzc3IgorICAiXDI0MVwzMDFcMzMyXDM3Nzc8QFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM2XDBcMFwwXDEzXDBcMFwwXDBcMFwwXDAiIjUiCisgICJcMTRcMTVcMTdcMzc3Tl5qXDM3N1tufFwzNzdPW2JcMzc3XDI0NFwyNDBcMjMxXDM3N1wzMDBcMjc0XDI2NVwzNzdcMjcwIgorICAiXDI2M1wyNTNcMzc3XDMxNFwzMTFcMzAzXDM3N1wzMTRcMzExXDMwM1wzNzdcMzI3XDMyNVwzMjFcMzc3XDM0NFwzNDIiCisgICJcMzQwXDM3N1wzNTJcMzUxXDM0N1wzNzdcMzM1XDMzM1wzMjdcMzc3XDI3MFwyNjVcMjYwXDM3Nz5HTVwzNzdKYXZcMzc3IgorICAiSmBwXDM3N1wyMzNcMzAzXDMzMFwzNzc2PEFcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNVwwXDBcMFwxM1wwXDBcMFwwXDAiCisgICJcMFwwXDRcMFwwXDAiIjlcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDAiCisgICJcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMCIKKyAgIlwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3KDI+XDM3N1wwXDBcMFwzNzdcMFwwXDBdXDBcMFwwIgorICAiXDMwXDBcMFwwXDExXDBcMFwwXDBcMFwwXDBcMVwwXDBcMFw0XDBcMFwwXDE2XDBcMFwwXDMwXDBcMFwwXDM1XDBcMFwwIgorICAiXDM1XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDAiCisgICJcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM1XDBcMFwwXDMwIgorICAiXDBcMFwwXDE1XDBcMFwwXDQifTsKKworCisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wICovCisKK3N0YXRpYyBjb25zdCBndWludDggc3RvY2tfdmltX3NoZWxsW10gPQoreyAiIgorICAvKiBQaXhidWYgbWFnaWMgKDB4NDc2NDZiNTApICovCisgICJHZGtQIgorICAvKiBsZW5ndGg6IGhlYWRlciAoMjQpICsgcGl4ZWxfZGF0YSAoOTIxNikgKi8KKyAgIlwwXDAkXDMwIgorICAvKiBwaXhkYXRhX3R5cGUgKDB4MTAxMDAwMikgKi8KKyAgIlwxXDFcMFwyIgorICAvKiByb3dzdHJpZGUgKDE5MikgKi8KKyAgIlwwXDBcMFwzMDAiCisgIC8qIHdpZHRoICg0OCkgKi8KKyAgIlwwXDBcMCIiMCIKKyAgLyogaGVpZ2h0ICg0OCkgKi8KKyAgIlwwXDBcMCIiMCIKKyAgLyogcGl4ZWxfZGF0YTogKi8KKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDFcMFwwXDBcMlwwXDBcMFw0XDBcMFwwXDdcMFwwXDBcMTFcMFwwXDBcMTJcMFwwXDBcMTNcMFwwXDAiCisgICJcMTNcMFwwXDBcMTNcMFwwXDBcMTNcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMCIKKyAgIlwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTQiCisgICJcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDAiCisgICJcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTNcMCIKKyAgIlwwXDBcMTNcMFwwXDBcMTNcMFwwXDBcMTJcMFwwXDBcMTFcMFwwXDBcN1wwXDBcMFw0XDBcMFwwXDJcMFwwXDBcMVwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMlwwXDBcMCIiN1wyXDJcMlwzNzdcMVwxXDFcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBLXDBcMFwwXDE0XDBcMFwwXDdcMFwwXDBcMlwwXDBcMFwxXDBcMFwwXDBcMFwwXDBcNFwwIgorICAiXDBcMFwzNzdcMzQwXDMzNlwzMzRcMzMyXDM1MlwzNTFcMzQ2XDM3N1wzNTdcMzU2XDM1NFwzNzdcMzYwXDM1N1wzNTUiCisgICJcMzc3XDM2MVwzNjBcMzU2XDM3N1wzNjJcMzYxXDM1N1wzNzdcMzYwXDM2MFwzNTVcMzc3XDM2MVwzNjBcMzU1XDM3NyIKKyAgIlwzNjJcMzYyXDM1N1wzNzdcMzYyXDM2MlwzNTdcMzc3XDM2MlwzNjJcMzU3XDM3N1wzNjJcMzYyXDM1N1wzNzdcMzYyIgorICAiXDM2MlwzNTdcMzc3XDM2MlwzNjJcMzU3XDM3N1wzNjJcMzYyXDM1N1wzNzdcMzYxXDM2MVwzNTZcMzc3XDM1NlwzNTYiCisgICJcMzUzXDM3N1wzNTVcMzU0XDM1MFwzNzdcMzU0XDM1M1wzNTBcMzc3XDM1M1wzNTJcMzQ3XDM3N1wzNTJcMzUxXDM0NiIKKyAgIlwzNzdcMzUxXDM1MFwzNDRcMzc3XDM1MFwzNDdcMzQ0XDM3N1wzNDZcMzQ1XDM0MVwzNzdcMzQ2XDM0NFwzNDBcMzc3IgorICAiXDM0MVwzMzdcMzMzXDM3N1wzMzFcMzI3XDMyM1wzNzdcMzI2XDMyNFwzMTZcMzc3XDMyM1wzMjBcMzEzXDM3N1wzMjAiCisgICJcMzE1XDMwN1wzNzdcMzE0XDMxMVwzMDRcMzc3XDMxMVwzMDZcMzAxXDM3N1wzMDZcMzAzXDI3NlwzNzdcMzAyXDMwMCIKKyAgIlwyNzNcMzc3XDI3N1wyNzVcMjcwXDM3N1wyNzJcMjcwXDI2MVwzNzdcMjcwXDI2NVwyNTZcMzc3XDI2NlwyNjJcMjU0IgorICAiXDM3N1wyNjBcMjU0XDI0NlwzNzdcMjE1XDIxMVwyMDJcMzQwXDBcMFwwXDM3N1wwXDBcMFwzMlwwXDBcMFwxNlwwXDAiCisgICJcMFw2XDBcMFwwXDJcMFwwXDBcMFwwXDBcMFw3XDBcMFwwXDM3N1wzNTdcMzU2XDM1NVwzNzdcMzI1XDMyMlwzMTJcMzc3IgorICAiXDMyN1wzMjRcMzE0XDM3N1wzMzFcMzI2XDMxNlwzNzdcMzMyXDMyN1wzMTdcMzc3XDMzM1wzMzBcMzIxXDM3N1wzMzQiCisgICJcMzMyXDMyMlwzNzdcMzM1XDMzM1wzMjNcMzc3XDMzNlwzMzNcMzI0XDM3N1wzMzZcMzM0XDMyNFwzNzdcMzM2XDMzNCIKKyAgIlwzMjRcMzc3XDMzNlwzMzNcMzIzXDM3N1wzMzZcMzM0XDMyNFwzNzdcMzM2XDMzNFwzMjRcMzc3XDMzNlwzMzNcMzI0IgorICAiXDM3N1wzMzZcMzMzXDMyM1wzNzdcMzM1XDMzMlwzMjNcMzc3XDMzNFwzMzJcMzIyXDM3N1wzMzNcMzMwXDMyMVwzNzciCisgICJcMzMyXDMyNlwzMTZcMzc3XDMzMVwzMjVcMzE1XDM3N1wzMjdcMzIzXDMxM1wzNzdcMzI0XDMyMVwzMTFcMzc3XDMyMiIKKyAgIlwzMTZcMzA2XDM3N1wzMjBcMzE0XDMwNFwzNzdcMzE2XDMxMlwzMDJcMzc3XDMxMlwzMDZcMjc2XDM3N1wzMDdcMzAzIgorICAiXDI3M1wzNzdcMzAzXDI3N1wyNjZcMzc3XDMwMFwyNzNcMjYzXDM3N1wyNzNcMjY3XDI1N1wzNzdcMjY3XDI2M1wyNTMiCisgICJcMzc3XDI2NFwyNTdcMjQ3XDM3N1wyNjBcMjU0XDI0M1wzNzdcMjU1XDI1MFwyNDBcMzc3XDI0NlwyNDNcMjMxXDM3NyIKKyAgIlwyNDRcMjM3XDIyN1wzNzdcMjQxXDIzNFwyMjRcMzc3XDIzNlwyMzFcMjIwXDM3N1wyMDJ+d1wzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwKVwwXDBcMFwyNlwwXDBcMFwxMlwwXDBcMFwzXDBcMFwwXDBcMFwwXDBcMTFcMFwwXDBcMzc3XDM1N1wzNTYiCisgICJcMzU0XDM3N1wzMjZcMzI0XDMxM1wzNzdcMzMwXDMyNlwzMTVcMzc3XDMzMlwzMjdcMzE3XDM3N1wzMzNcMzMwXDMyMCIKKyAgIlwzNzdcMzM1XDMzMlwzMjJcMzc3XDMzNlwzMzNcMzIzXDM3N1wzMzZcMzM0XDMyNFwzNzdcMzM3XDMzNVwzMjVcMzc3IgorICAiXDMzN1wzMzVcMzI2XDM3N1wzMzdcMzM1XDMyNlwzNzdcMzM3XDMzNVwzMjZcMzc3XDM0MFwzMzVcMzI2XDM3N1wzMzciCisgICJcMzM1XDMyNVwzNzdcMzM3XDMzM1wzMjRcMzc3XDMzNlwzMzJcMzIzXDM3N1wzMzRcMzMxXDMyMlwzNzdcMzMzXDMzMCIKKyAgIlwzMjBcMzc3XDMzMlwzMjdcMzIwXDM3N1wzMzFcMzI2XDMxNlwzNzdcMzI3XDMyM1wzMTRcMzc3XDMyNVwzMjFcMzExIgorICAiXDM3N1wzMjNcMzE3XDMxMFwzNzdcMzIxXDMxNVwzMDVcMzc3XDMxNlwzMTNcMzAzXDM3N1wzMTVcMzEwXDMwMFwzNzciCisgICJcMzExXDMwNVwyNzVcMzc3XDMwNVwzMDJcMjcyXDM3N1wzMDFcMjc1XDI2NVwzNzdcMjc2XDI3MVwyNjFcMzc3XDI3MiIKKyAgIlwyNjZcMjU1XDM3N1wyNjZcMjYyXDI1MlwzNzdcMjYyXDI1NlwyNDVcMzc3XDI1NlwyNTJcMjQxXDM3N1wyNTFcMjQ1IgorICAiXDIzNFwzNzdcMjQ1XDI0MVwyMzBcMzc3XDI0MVwyMzRcMjI0XDM3N1wyMzZcMjMyXDIyMlwzNzdcMjMzXDIyN1wyMTYiCisgICJcMzc3e3hxXDM3N1wwXDBcMFwzNzdcMFwwXDAiIjdcMFwwXDBcMzdcMFwwXDBcMTVcMFwwXDBcNVwwXDBcMFwwXDBcMCIKKyAgIlwwXDEyXDBcMFwwXDM3N1wzNjBcMzU3XDM1NVwzNzdcMzI3XDMyNFwzMTVcMzc3XDMzMVwzMjZcMzE2XDM3N1wzMTBcMzA2IgorICAiXDI3NlwzNzdcMjcwXDI2NlwyNTdcMzc3XDI3MlwyNjdcMjYwXDM3N1wyNzNcMjcwXDI2MVwzNzdcMjc0XDI3MVwyNjIiCisgICJcMzc3XDI3NFwyNzFcMjYzXDM3N1wyNzRcMjcxXDI2M1wzNzdcMjc0XDI3MVwyNjJcMzc3XDI3M1wyNzBcMjYyXDM3NyIKKyAgIlwyNzNcMjcwXDI2MVwzNzdcMjczXDI2N1wyNjFcMzc3XDI3MVwyNjZcMjYwXDM3N1wyNzFcMjY1XDI1NlwzNzdcMjY3IgorICAiXDI2NFwyNTVcMzc3XDI2NlwyNjNcMjU0XDM3N1wyNjVcMjYyXDI1MlwzNzdcMjYzXDI2MFwyNTBcMzc3XDI2MVwyNTciCisgICJcMjQ3XDM3N1wyNTdcMjU0XDI0NFwzNzdcMjU2XDI1MlwyNDNcMzc3XDI1NFwyNTBcMjQxXDM3N1wyNTFcMjQ2XDIzNyIKKyAgIlwzNzdcMjQ3XDI0M1wyMzRcMzc3XDI0NFwyNDBcMjMwXDM3N1wyNDFcMjM1XDIyNVwzNzdcMjM1XDIzMVwyMjFcMzc3IgorICAiXDIzMFwyMjVcMjE2XDM3N1wyMjRcMjIxXDIxMlwzNzdcMjIxXDIxNlwyMDZcMzc3XDIxNlwyMTNcMjAyXDM3N1wyMTIiCisgICJcMjA3XDIwMFwzNzdcMjA2XDIwMntcMzc3XDIwNlwyMDJ7XDM3N1wyMzdcMjMyXDIyMVwzNzdcMjMzXDIzMFwyMTZcMzc3IgorICAiXDIzMFwyMjRcMjEzXDM3N3l2blwzNzdcMFwwXDBcMzc3XDBcMFwwQVwwXDBcMCVcMFwwXDBcMjBcMFwwXDBcNVwwXDAiCisgICJcMFwwXDBcMFwwXDE0XDBcMFwwXDM3N1wzNjBcMzYwXDM1NVwzNzdcMzMxXDMyNlwzMTZcMzc3XDMzMlwzMjdcMzE3XDM3NyIKKyAgIlwyNjdcMjY1XDI1NVwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwIgorICAiXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wyNTRcMjUwIgorICAiXDIzNlwzNzdcMjMwXDIyNVwyMTNcMzc3XDIyNVwyMjFcMjEwXDM3N3d0bFwzNzdcMFwwXDBcMzc3XDBcMFwwR1wwXDAiCisgICJcMChcMFwwXDBcMjJcMFwwXDBcNlwwXDBcMFwwXDBcMFwwXDE0XDBcMFwwXDM3N1wzNjFcMzYwXDM1NlwzNzdcMzMxXDMyNiIKKyAgIlwzMTZcMzc3XDMzMlwzMjdcMzE3XDM3N1wyNjdcMjY0XDI1NVwzNzdcMFwwXDBcMzc3PkM+XDM3N0JHQlwzNzdFSUVcMzc3IgorICAiSE1IXDM3N0pOSlwzNzdMUkxcMzc3UFRQXDM3N1FVUVwzNzdSWFJcMzc3UlhSXDM3N1NZU1wzNzdTWFNcMzc3U1dTXDM3NyIKKyAgIlFXUVwzNzdRV1FcMzc3TlROXDM3N01STVwzNzdMUUxcMzc3S1FLXDM3N0pOSlwzNzdIS0hcMzc3RUlFXDM3N0RIRFwzNzciCisgICJcNzdEXDc3XDM3NzxBPFwzNzc3OzdcMzc3MjYyXDM3Ny8yL1wzNzcoKyhcMzc3JCgkXDM3N1wwXDBcMFwzNzdcMjY0XDI1NyIKKyAgIlwyNDVcMzc3XDIyNlwyMjFcMjEwXDM3N1wyMjJcMjE1XDIwNFwzNzd0cWlcMzc3XDBcMFwwXDM3N1wwXDBcMElcMFwwIgorICAiXDAqXDBcMFwwXDIzXDBcMFwwXDdcMFwwXDBcMFwwXDBcMFwxNFwwXDBcMFwzNzdcMzYwXDM2MFwzNTVcMzc3XDMyN1wzMjQiCisgICJcMzE1XDM3N1wzMzFcMzI1XDMxNlwzNzdcMjY1XDI2MlwyNTNcMzc3XDBcMFwwXDM3NzU5NVwzNzdcMjM1XDIzNlwyMzUiCisgICJcMzc3XDIzNlwyNDBcMjM2XDM3N1wyMzdcMjQxXDIzN1wzNzdcMjQxXDI0M1wyNDFcMzc3XDI0MlwyNDRcMjQyXDM3NyIKKyAgIlwyNDNcMjQ1XDI0M1wzNzdcMjQxXDI0M1wyNDFcMzc3XDIzMVwyMzRcMjMxXDM3N1wyMjJcMjI1XDIyMlwzNzdcMjEzIgorICAiXDIxNlwyMTNcMzc3XDIwMlwyMDRcMjAyXDM3N3l9eVwzNzdwdHBcMzc3aWxpXDM3N15jXlwzNzdUWVRcMzc3S09LXDM3NyIKKyAgIkFGQVwzNzdAREBcMzc3XDc3Q1w3N1wzNzc9QT1cMzc3Oz47XDM3NzY7NlwzNzczODNcMzc3LzIvXDM3NysvK1wzNzckIgorICAiKCRcMzc3ISUhXDM3N1wzNVw0MFwzNVwzNzdcMFwwXDBcMzc3XDI2MVwyNTRcMjQyXDM3N1wyMjJcMjE1XDIwNFwzNzciCisgICJcMjE2XDIxMlwyMDFcMzc3cW5nXDM3N1wwXDBcMFwzNzdcMFwwXDBLXDBcMFwwK1wwXDBcMFwyNFwwXDBcMFw3XDBcMCIKKyAgIlwwXDBcMFwwXDBcMTRcMFwwXDBcMzc3XDM1NVwzNTRcMzUxXDM3N1wzMjVcMzIxXDMxMlwzNzdcMzI3XDMyM1wzMTRcMzc3IgorICAiXDI2M1wyNjBcMjUxXDM3N1wwXDBcMFwzNzdCSEJcMzc3XDI0NFwyNDZcMjQ0XDM3N1wyNDZcMjUxXDI0NlwzNzdcMjQ3IgorICAiXDI1MlwyNDdcMzc3XDI1MlwyNTVcMjUyXDM3N1wyNTRcMjU2XDI1NFwzNzdcMjQ1XDI1MFwyNDVcMzc3XDI0MFwyNDQiCisgICJcMjQwXDM3N1wyMzFcMjM1XDIzMVwzNzdcMjIzXDIyN1wyMjNcMzc3XDIxNFwyMjBcMjE0XDM3N1wyMDVcMjEyXDIwNSIKKyAgIlwzNzd8XDIwMXxcMzc3dXt1XDM3N2xwbFwzNzdkaWRcMzc3W19bXDM3N1hdWFwzNzdVW1VcMzc3U1pTXDM3N1FVUVwzNzciCisgICJRVVFcMzc3TFFMXDM3N0pQSlwzNzdDSENcMzc3PkM+XDM3Nzc8N1wzNzcwMjBcMzc3Ky8rXDM3NyYpJlwzNzdcMFwwXDAiCisgICJcMzc3XDI1N1wyNTFcMjQwXDM3N1wyMTZcMjExXDIwMFwzNzdcMjEyXDIwNn5cMzc3b2tkXDM3N1wwXDBcMFwzNzdcMCIKKyAgIlwwXDBLXDBcMFwwK1wwXDBcMFwyNFwwXDBcMFw3XDBcMFwwXDBcMFwwXDBcMTRcMFwwXDBcMzc3XDM1NFwzNTNcMzUxIgorICAiXDM3N1wzMjNcMzE3XDMwN1wzNzdcMzIzXDMyMVwzMTFcMzc3XDI2MVwyNTZcMjQ2XDM3N1wwXDBcMFwzNzc7PjtcMzc3IgorICAiXDIzN1wyNDJcMjM3XDM3N1wyNDJcMjQ0XDI0MlwzNzdcMjQzXDI0NVwyNDNcMzc3XDI0MFwyNDJcMjQwXDM3N1wyMzEiCisgICJcMjM0XDIzMVwzNzdcMjIzXDIyN1wyMjNcMzc3XDIxNlwyMjBcMjE2XDM3N1wyMDdcMjEzXDIwN1wzNzdcMjAyXDIwNiIKKyAgIlwyMDJcMzc3en16XDM3N3J2clwzNzdpbmlcMzc3YWZhXDM3N1lfWVwzNzdSVlJcMzc3UVVRXDM3N05STlwzNzdMUkxcMzc3IgorICAiS1BLXDM3N0lOSVwzNzdGS0ZcMzc3REhEXDM3N0FGQVwzNzc6PjpcMzc3Njs2XDM3NzA0MFwzNzcqLipcMzc3JSclXDM3NyIKKyAgIlwzN1wiXDM3XDM3N1wwXDBcMFwzNzdcMjU0XDI0N1wyMzRcMzc3XDIxMlwyMDV9XDM3N1wyMDZcMjAyelwzNzdraGFcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMEtcMFwwXDAsXDBcMFwwXDI0XDBcMFwwXDdcMFwwXDBcMFwwXDBcMFwxNFwwXDBcMFwzNzciCisgICJcMzU0XDM1MlwzNTBcMzc3XDMyMFwzMTRcMzA0XDM3N1wzMjFcMzE1XDMwNVwzNzdcMjU2XDI1M1wyNDRcMzc3XDBcMCIKKyAgIlwwXDM3N0pNSlwzNzdcMjUwXDI1MlwyNTBcMzc3XDI0N1wyNTJcMjQ3XDM3N1wyNDJcMjQ0XDI0MlwzNzdcMjM1XDI0MCIKKyAgIlwyMzVcMzc3XDIzMlwyMzRcMjMyXDM3N1wyMjRcMjMwXDIyNFwzNzdcMjIxXDIyNlwyMjFcMzc3XDIxNlwyMjJcMjE2IgorICAiXDM3N1wyMTBcMjE1XDIxMFwzNzdcMjAzXDIwN1wyMDNcMzc3e1wyMDB7XDM3N3N5c1wzNzdtcm1cMzc3anBqXDM3N2kiCisgICJuaVwzNzdlbGVcMzc3ZWplXDM3N2NoY1wzNzdeZF5cMzc3XFxjXFxcMzc3W2BbXDM3N1ddV1wzNzdSWVJcMzc3S05LXDM3NyIKKyAgIkVLRVwzNzc9Qz1cMzc3OTw5XDM3Ny80L1wzNzcoKihcMzc3XDBcMFwwXDM3N1wyNTFcMjQ0XDIzMVwzNzdcMjA2XDIwMiIKKyAgInlcMzc3XDIwM1wxNzd2XDM3N2hkXVwzNzdcMFwwXDBcMzc3XDBcMFwwS1wwXDBcMCxcMFwwXDBcMjRcMFwwXDBcN1wwIgorICAiXDBcMFwwXDBcMFwwXDE0XDBcMFwwXDM3N1wzNTJcMzUxXDM0NlwzNzdcMzE1XDMxMVwzMDBcMzc3XDMxNlwzMTJcMzAyIgorICAiXDM3N1wyNTRcMjUxXDI0MVwzNzdcMFwwXDBcMzc3QERAXDM3N1wyMzJcMjM0XDIzMlwzNzdcMjI0XDIyN1wyMjRcMzc3IgorICAiXDIxN1wyMjJcMjE3XDM3N1wyMTJcMjE1XDIxMlwzNzdcMjA2XDIxMlwyMDZcMzc3XDIwMVwyMDVcMjAxXDM3N35cMjAyIgorICAiflwzNzd5fnlcMzc3dXp1XDM3N25zblwzNzdnbWdcMzc3ZGpkXDM3N2NoY1wzNzdgZWBcMzc3XmReXDM3N1xcYlxcXDM3NyIKKyAgIlpfWlwzNzdXXVdcMzc3VlpWXDM3N1JYUlwzNzdQVlBcMzc3TVJNXDM3N0dMR1wzNzdDR0NcMzc3Olw3NzpcMzc3NTo1IgorICAiXDM3Ny0yLVwzNzcoKyhcMzc3ISUhXDM3N1wwXDBcMFwzNzdcMjQ2XDI0MVwyMjZcMzc3XDIwMn51XDM3N1wxNzd8c1wzNzciCisgICJlYltcMzc3XDBcMFwwXDM3N1wwXDBcMEtcMFwwXDAsXDBcMFwwXDI0XDBcMFwwXDdcMFwwXDBcMFwwXDBcMFwxNFwwXDAiCisgICJcMFwzNzdcMzUwXDM0N1wzNDVcMzc3XDMxMVwzMDVcMjc1XDM3N1wzMTJcMzA3XDI3N1wzNzdcMjUxXDI0NVwyMzZcMzc3IgorICAiXDBcMFwwXDM3N1FUUVwzNzdcMjI2XDIzMVwyMjZcMzc3XDIyMlwyMjVcMjIyXDM3N1wyMTVcMjIyXDIxNVwzNzdcMjEzIgorICAiXDIxN1wyMTNcMzc3XDIxMFwyMTVcMjEwXDM3N1wyMDZcMjEzXDIwNlwzNzdcMjA1XDIxM1wyMDVcMzc3XDIwMlwyMTEiCisgICJcMjAyXDM3N1wyMDJcMjExXDIwMlwzNzdcMjAwXDIwNlwyMDBcMzc3fVwyMDR9XDM3N3pcMjAxelwzNzd5XDIwMHlcMzc3IgorICAieH54XDM3N3Z8dlwzNzd0enRcMzc3cHVwXDM3N21zbVwzNzdqcWpcMzc3aG1oXDM3N2RqZFwzNzdgZmBcMzc3WV9ZXDM3NyIKKyAgIlRZVFwzNzdJTklcMzc3Q0pDXDM3Nzo+OlwzNzcyNjJcMzc3KS4pXDM3N1wwXDBcMFwzNzdcMjQzXDIzNlwyMjNcMzc3IgorICAifnpxXDM3N3t4b1wzNzdiX1dcMzc3XDBcMFwwXDM3N1wwXDBcMEtcMFwwXDAsXDBcMFwwXDI0XDBcMFwwXDdcMFwwXDAiCisgICJcMFwwXDBcMFwxNFwwXDBcMFwzNzdcMzQ2XDM0NFwzNDJcMzc3XDMwNFwzMDBcMjY3XDM3N1wzMDdcMzAzXDI3M1wzNzciCisgICJcMjQ1XDI0MVwyMzJcMzc3XDBcMFwwXDM3N0VKRVwzNzdcMjAxXDIwNVwyMDFcMzc3fVwyMDB9XDM3N3p+elwzNzd1eiIKKyAgInVcMzc3cndyXDM3N3B1cFwzNzdudG5cMzc3bnRuXDM3N3B2cFwzNzdwdnBcMzc3cXdxXDM3N3F3cVwzNzdudG5cMzc3IgorICAia3FrXDM3N2lwaVwzNzdpb2lcMzc3ZGtkXDM3N2FnYVwzNzdeY15cMzc3W2FbXDM3N1heWFwzNzdUWVRcMzc3TVNNXDM3NyIKKyAgIkZKRlwzNzdAREBcMzc3Nzw3XDM3Ny80L1wzNzcqLSpcMzc3XCImXCJcMzc3XDBcMFwwXDM3N1wyNDBcMjMyXDIxN1wzNzciCisgICJ5dm1cMzc3eHRrXDM3N19cXFVcMzc3XDBcMFwwXDM3N1wwXDBcMEtcMFwwXDAsXDBcMFwwXDI0XDBcMFwwXDdcMFwwXDAiCisgICJcMFwwXDBcMFwxNFwwXDBcMFwzNzdcMzM2XDMzNVwzMzFcMzc3XDMwMFwyNzVcMjY0XDM3N1wzMDNcMjc3XDI2N1wzNzciCisgICJcMjQxXDIzNVwyMjVcMzc3XDBcMFwwXDM3N1daV1wzNzdcMjAxXDIwNVwyMDFcMzc3fFwyMDJ8XDM3N3xcMjAxfFwzNzciCisgICJ7XDIwMHtcMzc3elwxNzd6XDM3N3h+eFwzNzd8XDIwM3xcMzc3XDIwMlwyMTBcMjAyXDM3N1wyMDVcMjEzXDIwNVwzNzciCisgICJcMjA3XDIxNVwyMDdcMzc3XDIxMFwyMTZcMjEwXDM3N1wyMDZcMjE0XDIwNlwzNzdcMjA1XDIxNFwyMDVcMzc3XDIwNCIKKyAgIlwyMTJcMjA0XDM3N1wyMDFcMjA2XDIwMVwzNzd8XDIwM3xcMzc3eVwyMDB5XDM3N3d8d1wzNzdyeHJcMzc3b3ZvXDM3NyIKKyAgImxxbFwzNzdkamRcMzc3YGZgXDM3N1dcXFdcMzc3TlVOXDM3N0VJRVwzNzc+Qz5cMzc3NDc0XDM3NysvK1wzNzdcMFwwIgorICAiXDBcMzc3XDIzNFwyMjZcMjEzXDM3N3VyaVwzNzdzcGdcMzc3XFxZUVwzNzdcMFwwXDBcMzc3XDBcMFwwS1wwXDBcMCwiCisgICJcMFwwXDBcMjRcMFwwXDBcN1wwXDBcMFwwXDBcMFwwXDE0XDBcMFwwXDM3N1wzMzRcMzMyXDMyNlwzNzdcMjc1XDI3MiIKKyAgIlwyNjBcMzc3XDI3N1wyNzJcMjYxXDM3N1wyMzVcMjMxXDIyMVwzNzdcMFwwXDBcMzc3R01HXDM3N2pualwzNzdmaWZcMzc3IgorICAiY2djXDM3N2JmYlwzNzdiaGJcMzc3Z21nXDM3N2xybFwzNzdyeHJcMzc3dXt1XDM3N3d9d1wzNzd4fnhcMzc3d353XDM3NyIKKyAgInd9d1wzNzd1fHVcMzc3c3hzXDM3N3F2cVwzNzdscmxcMzc3aW9pXDM3N2VrZVwzNzdiZ2JcMzc3XmReXDM3N1hdWFwzNzciCisgICJTV1NcMzc3SVBJXDM3N0NIQ1wzNzc6PjpcMzc3MzczXDM3NystK1wzNzdcIiZcIlwzNzdcMFwwXDBcMzc3XDIzMlwyMjQiCisgICJcMjExXDM3N3JuZVwzNzdwbGNcMzc3WVVOXDM3N1wwXDBcMFwzNzdcMFwwXDBLXDBcMFwwLFwwXDBcMFwyNFwwXDBcMCIKKyAgIlw3XDBcMFwwXDBcMFwwXDBcMTRcMFwwXDBcMzc3XDMzMFwzMjdcMzIzXDM3N1wyNzBcMjY0XDI1M1wzNzdcMjcyXDI2NiIKKyAgIlwyNTVcMzc3XDIzMVwyMjVcMjE1XDM3N1wwXDBcMFwzNzdXXFxXXDM3N2lvaVwzNzdmbGZcMzc3Zm1mXDM3N25zblwzNzciCisgICJzeXNcMzc3elwyMDF6XDM3N1wyMDBcMjA2XDIwMFwzNzdcMjA0XDIxMlwyMDRcMzc3XDIxMVwyMTdcMjExXDM3N1wyMTMiCisgICJcMjIxXDIxM1wzNzdcMjE0XDIyM1wyMTRcMzc3XDIxNFwyMjJcMjE0XDM3N1wyMTNcMjIxXDIxM1wzNzdcMjExXDIyMCIKKyAgIlwyMTFcMzc3XDIwN1wyMTVcMjA3XDM3N1wyMDRcMjEyXDIwNFwzNzdcMjAxXDIwN1wyMDFcMzc3fVwyMDV9XDM3N3lcMjAwIgorICAieVwzNzd2e3ZcMzc3cXdxXDM3N2pxalwzNzdiaGJcMzc3W2BbXDM3N1BUUFwzNzdITkhcMzc3O1w3NztcMzc3MjcyXDM3NyIKKyAgIisvK1wzNzdcMFwwXDBcMzc3XDIyN1wyMjFcMjA1XDM3N25qYVwzNzdtZ19cMzc3VlJLXDM3N1wwXDBcMFwzNzdcMFwwIgorICAiXDBLXDBcMFwwLFwwXDBcMFwyNFwwXDBcMFw3XDBcMFwwXDBcMFwwXDBcMTRcMFwwXDBcMzc3XDMyNlwzMjVcMzIxXDM3NyIKKyAgIlwyNjRcMjYwXDI0N1wzNzdcMjY1XDI2MVwyNTBcMzc3XDIyNFwyMjFcMjExXDM3N1wwXDBcMFwzNzdITUhcMzc3T1RPIgorICAiXDM3N1FXUVwzNzdXXFxXXDM3N15kXlwzNzdiaGJcMzc3aW9pXDM3N291b1wzNzdzeXNcMzc3dn12XDM3N3lcMTc3eVwzNzciCisgICJ7XDIwMntcMzc3e1wyMDF7XDM3N3pcMjAwelwzNzd5XDIwMHlcMzc3d353XDM3N3N6c1wzNzdxd3FcMzc3bnRuXDM3NyIKKyAgImpxalwzNzdmbGZcMzc3YGVgXDM3N1pgWlwzNzdTWVNcMzc3S1FLXDM3N0JHQlwzNzc7XDc3O1wzNzcxNjFcMzc3KiwqIgorICAiXDM3NyMlI1wzNzdcMFwwXDBcMzc3XDIyM1wyMTZcMjAzXDM3N2pmXVwzNzdpZVxcXDM3N1NQSVwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwS1wwXDBcMCxcMFwwXDBcMjRcMFwwXDBcN1wwXDBcMFwwXDBcMFwwXDE0XDBcMFwwXDM3N1wzMjNcMzIyXDMxNyIKKyAgIlwzNzdcMjYwXDI1M1wyNDJcMzc3XDI2MVwyNTVcMjQzXDM3N1wyMjFcMjE2XDIwNVwzNzdcMFwwXDBcMzc3WF5YXDM3NyIKKyAgIltiW1wzNzdiZmJcMzc3Zm1mXDM3N2xybFwzNzdyeHJcMzc3elwyMDB6XDM3N1wyMDBcMjA1XDIwMFwzNzdcMjA1XDIxMyIKKyAgIlwyMDVcMzc3XDIwN1wyMTZcMjA3XDM3N1wyMTJcMjIxXDIxMlwzNzdcMjE0XDIyMlwyMTRcMzc3XDIxNVwyMjJcMjE1IgorICAiXDM3N1wyMTNcMjIyXDIxM1wzNzdcMjEyXDIyMVwyMTJcMzc3XDIxMFwyMTdcMjEwXDM3N1wyMDdcMjE0XDIwN1wzNzciCisgICJcMjAzXDIxMlwyMDNcMzc3XDIwMFwyMDdcMjAwXDM3N3xcMjA0fFwzNzd3fHdcMzc3cXdxXDM3N2xwbFwzNzdjaWNcMzc3IgorICAiWl9aXDM3N1BVUFwzNzdHTEdcMzc3PUI9XDM3NzE3MVwzNzcsLyxcMzc3XDBcMFwwXDM3N1wyMjFcMjEzXDIwMFwzNzciCisgICJnY1pcMzc3ZWJZXDM3N1BORlwzNzdcMFwwXDBcMzc3XDBcMFwwS1wwXDBcMCxcMFwwXDBcMjRcMFwwXDBcN1wwXDBcMCIKKyAgIlwwXDBcMFwwXDE0XDBcMFwwXDM3N1wzMjFcMzE3XDMxM1wzNzdcMjUzXDI0NlwyMzVcMzc3XDI1NVwyNTBcMjM2XDM3NyIKKyAgIlwyMTVcMjExXDIwMVwzNzdcMFwwXDBcMzc3SE1IXDM3N0tPS1wzNzdcMzMxXDMzM1wzMzFcMzc3XDI0MVwyNDNcMjQxIgorICAiXDM3N2JnYlwzNzdgZmBcMzc3ZmxmXDM3N2txa1wzNzdwd3BcMzc3dHp0XDM3N3d9d1wzNzd3fndcMzc3eVwxNzd5XDM3NyIKKyAgInh+eFwzNzd3fXdcMzc3dXt1XDM3N3N5c1wzNzdwd3BcMzc3bnNuXDM3N2pvalwzNzdkaWRcMzc3X2VfXDM3N1lfWVwzNzciCisgICJSV1JcMzc3SE9IXDM3N0FFQVwzNzc5PjlcMzc3MzczXDM3NyktKVwzNzcjJyNcMzc3XDBcMFwwXDM3N1wyMTZcMjExfCIKKyAgIlwzNzdkYFdcMzc3Yl5VXDM3N05LRFwzNzdcMFwwXDBcMzc3XDBcMFwwS1wwXDBcMCxcMFwwXDBcMjRcMFwwXDBcN1wwIgorICAiXDBcMFwwXDBcMFwwXDE0XDBcMFwwXDM3N1wzMTVcMzEzXDMwN1wzNzdcMjQ2XDI0MVwyMzBcMzc3XDI1MFwyNDNcMjMxIgorICAiXDM3N1wyMTBcMjA1fVwzNzdcMFwwXDBcMzc3VFpUXDM3N1leWVwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNjBcMzYxXDM2MFwzNzdcMjc3XDMwMVwyNzdcMzc3XDIwNlwyMTNcMjA2XDM3N3pcMjAxelwzNzd+XDIwNX4iCisgICJcMzc3XDIwM1wyMTFcMjAzXDM3N1wyMDRcMjEzXDIwNFwzNzdcMjA2XDIxNVwyMDZcMzc3XDIwN1wyMTZcMjA3XDM3NyIKKyAgIlwyMDdcMjE1XDIwN1wzNzdcMjA1XDIxNFwyMDVcMzc3XDIwNVwyMTRcMjA1XDM3N1wyMDNcMjExXDIwM1wzNzdcMjAxIgorICAiXDIwN1wyMDFcMzc3fVwyMDR9XDM3N3hcMjAweFwzNzdzenNcMzc3bXNtXDM3N2dvZ1wzNzdfZl9cMzc3WF1YXDM3N00iCisgICJUTVwzNzdESkRcMzc3PEE8XDM3NzI3MlwzNzcrLytcMzc3XDBcMFwwXDM3N1wyMTRcMjA3elwzNzdhXVRcMzc3X1tSXDM3NyIKKyAgIktIQVwzNzdcMFwwXDBcMzc3XDBcMFwwS1wwXDBcMCxcMFwwXDBcMjRcMFwwXDBcN1wwXDBcMFwwXDBcMFwwXDE0XDBcMCIKKyAgIlwwXDM3N1wzMTJcMzExXDMwNFwzNzdcMjQwXDIzM1wyMjJcMzc3XDI0MlwyMzZcMjI0XDM3N1wyMDRcMjAweFwzNzdcMCIKKyAgIlwwXDBcMzc3RElEXDM3N0lPSVwzNzdtcG1cMzc3XDI0N1wyNTJcMjQ3XDM3N1wzMjdcMzMxXDMyN1wzNzdcMzc0XDM3NCIKKyAgIlwzNzRcMzc3XDM3M1wzNzNcMzczXDM3N1wzMTRcMzE2XDMxNFwzNzdcMjI2XDIzM1wyMjZcMzc3bHJsXDM3N291b1wzNzciCisgICJwdXBcMzc3cHdwXDM3N3B3cFwzNzdwdnBcMzc3b3VvXDM3N25zblwzNzdqcWpcMzc3Zm1mXDM3N2NpY1wzNzdfY19cMzc3IgorICAiWF9YXDM3N1RaVFwzNzdNU01cMzc3RUpFXDM3Nz1BPVwzNzc2OzZcMzc3MDQwXDM3NygrKFwzNzdcIiVcIlwzNzdcMFwwIgorICAiXDBcMzc3XDIxMlwyMDR4XDM3N15aUVwzNzdbWE9cMzc3SEZcNzdcMzc3XDBcMFwwXDM3N1wwXDBcMEtcMFwwXDAsXDAiCisgICJcMFwwXDI0XDBcMFwwXDdcMFwwXDBcMFwwXDBcMFwxNFwwXDBcMFwzNzdcMzA1XDMwM1wyNzZcMzc3XDIzM1wyMjZcMjE1IgorICAiXDM3N1wyMzRcMjMxXDIxNlwzNzdcMjAwfHNcMzc3XDBcMFwwXDM3N1FXUVwzNzdVWlVcMzc3Wl5aXDM3N11kXVwzNzciCisgICJiaGJcMzc3e1wyMDF7XDM3N1wzMTJcMzE0XDMxMlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N3d9dyIKKyAgIlwzNzd5fnlcMzc3eVwyMDF5XDM3N3tcMjAye1wzNzd6XDIwMnpcMzc3elwyMDJ6XDM3N3lcMjAweVwzNzd4fXhcMzc3IgorICAic3pzXDM3N3F3cVwzNzdtdG1cMzc3aXBpXDM3N2RpZFwzNzdcXGJcXFwzNzdYXFxYXDM3N1BVUFwzNzdFS0VcMzc3XDc3IgorICAiRFw3N1wzNzc6PTpcMzc3MTUxXDM3NyouKlwzNzdcMFwwXDBcMzc3XDIwN1wyMDJ1XDM3N1tXTlwzNzdZVUxcMzc3RkMiCisgICI8XDM3N1wwXDBcMFwzNzdcMFwwXDBLXDBcMFwwLFwwXDBcMFwyNFwwXDBcMFw3XDBcMFwwXDBcMFwwXDBcMTRcMFwwXDAiCisgICJcMzc3XDI3NFwyNzBcMjYyXDM3N1wyMjZcMjIyXDIxMFwzNzdcMjMwXDIyNFwyMTJcMzc3e3hvXDM3N1wwXDBcMFwzNzciCisgICJCRkJcMzc3REpEXDM3N2RnZFwzNzdcMjIzXDIyNlwyMjNcMzc3XDI3MlwyNzVcMjcyXDM3N1wzNjdcMzY3XDM2N1wzNzciCisgICJcMzczXDM3M1wzNzNcMzc3XDMwNFwzMDZcMzA0XDM3N1wxNzdcMjA0XDE3N1wzNzdgZWBcMzc3YWhhXDM3N2JoYlwzNzciCisgICJjaGNcMzc3YmhiXDM3N2JoYlwzNzdhZmFcMzc3X2RfXDM3N1thW1wzNzdZXVlcMzc3VFlUXDM3N1JXUlwzNzdNUU1cMzc3IgorICAiSE5IXDM3N0JIQlwzNzc+Qz5cMzc3Nzs3XDM3NzI2MlwzNzcrLytcMzc3JCckXDM3N1w0MFwiXDQwXDM3N1wwXDBcMFwzNzciCisgICJcMjA1XDE3N3JcMzc3V1RLXDM3N1VSSVwzNzdEQTpcMzc3XDBcMFwwXDM3N1wwXDBcMEtcMFwwXDAsXDBcMFwwXDI0XDAiCisgICJcMFwwXDdcMFwwXDBcMFwwXDBcMFwxNFwwXDBcMFwzNzdcMjY3XDI2M1wyNTZcMzc3XDIyMlwyMTZcMjA0XDM3N1wyMjMiCisgICJcMjE2XDIwNFwzNzd2c2pcMzc3XDBcMFwwXDM3N0xTTFwzNzdQVFBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzUxXDM1MVwzNTFcMzc3XDI0NFwyNTBcMjQ0XDM3N3B2cFwzNzdlamVcMzc3Zm5mXDM3N2hvaFwzNzdqcWpcMzc3IgorICAianBqXDM3N2lwaVwzNzdqcGpcMzc3aG5oXDM3N2dsZ1wzNzdmbGZcMzc3ZGlkXDM3N19lX1wzNzddY11cMzc3WV5ZXDM3NyIKKyAgIlNbU1wzNzdNUk1cMzc3SExIXDM3N0NKQ1wzNzc9Qj1cMzc3Nz43XDM3NzI2MlwzNzcuMC5cMzc3JiomXDM3N1wwXDBcMCIKKyAgIlwzNzdcMjAzfW9cMzc3VFFIXDM3N1JPRlwzNzdCPjdcMzc3XDBcMFwwXDM3N1wwXDBcMEtcMFwwXDAsXDBcMFwwXDI0IgorICAiXDBcMFwwXDdcMFwwXDBcMFwwXDBcMFwxNFwwXDBcMFwzNzdcMjYxXDI1NlwyNTFcMzc3XDIxNVwyMTBcMTc3XDM3N1wyMTYiCisgICJcMjExXDE3N1wzNzdzb2ZcMzc3XDBcMFwwXDM3NzpAOlwzNzc+Qz5cMzc3XDMyMFwzMjFcMzIwXDM3N1wyMDBcMjA0XDIwMCIKKyAgIlwzNzdLT0tcMzc3Sk9KXDM3N0xRTFwzNzdOU05cMzc3UFRQXDM3N1FWUVwzNzdSV1JcMzc3XDMyMlwzMjRcMzIyXDM3NyIKKyAgIlwzNjVcMzY1XDM2NVwzNzdcMzcyXDM3M1wzNzJcMzc3XDM3MlwzNzJcMzcyXDM3N1wzNzJcMzcyXDM3MlwzNzdcMzA3IgorICAiXDMxMVwzMDdcMzc3d3t3XDM3N0ZMRlwzNzdCSEJcMzc3QERAXDM3Nz5CPlwzNzc5PjlcMzc3NTk1XDM3NzI3MlwzNzciCisgICItMi1cMzc3KS4pXDM3NyYpJlwzNzdcIiVcIlwzNzdcMzRcNDBcMzRcMzc3XDBcMFwwXDM3N1wyMDF8blwzNzdRTURcMzc3IgorICAiT0xDXDM3N1w3Nzw1XDM3N1wwXDBcMFwzNzdcMFwwXDBLXDBcMFwwLFwwXDBcMFwyNFwwXDBcMFw3XDBcMFwwXDBcMFwwIgorICAiXDBcMTRcMFwwXDBcMzc3XDI1M1wyNTBcMjQyXDM3N1wyMDdcMjAzeVwzNzdcMjExXDIwNXpcMzc3b2tjXDM3N1wwXDAiCisgICJcMFwzNzdDSUNcMzc3RUtFXDM3N0pQSlwzNzdKUEpcMzc3TFNMXDM3N1BVUFwzNzdUWVRcMzc3VFtUXDM3N1hdWFwzNzciCisgICJYXlhcMzc3V11XXDM3N1heWFwzNzdYXVhcMzc3VVxcVVwzNzdSWFJcMzc3UVdRXDM3N05TTlwzNzdNUk1cMzc3SlBKXDM3NyIKKyAgIkhLSFwzNzdCSkJcMzc3QUVBXDM3Nz1BPVwzNzc5PTlcMzc3Njw2XDM3Ny81L1wzNzcuMS5cMzc3Ky4rXDM3NyYsJlwzNzciCisgICIhJCFcMzc3XDBcMFwwXDM3N1wxNzd5bFwzNzdNSkFcMzc3TElAXDM3Nz06M1wzNzdcMFwwXDBcMzc3XDBcMFwwS1wwXDAiCisgICJcMCxcMFwwXDBcMjRcMFwwXDBcN1wwXDBcMFwwXDBcMFwwXDE0XDBcMFwwXDM3N1wyNTFcMjQ2XDI0MFwzNzdcMjAyfiIKKyAgInVcMzc3XDIwNFwxNzd1XDM3N2pmXlwzNzdcMFwwXDBcMzc3NTg1XDM3NzQ6NFwzNzc2PDZcMzc3OD04XDM3Nzk+OVwzNzciCisgICI9QT1cMzc3PkM+XDM3N1w3N0NcNzdcMzc3PkI+XDM3N0BEQFwzNzdARUBcMzc3QENAXDM3Nz5DPlwzNzc8QTxcMzc3PSIKKyAgIkI9XDM3NzpcNzc6XDM3Nzk9OVwzNzc1OjVcMzc3MzkzXDM3NzM3M1wzNzcwMzBcMzc3LDAsXDM3NyotKlwzNzcpKylcMzc3IgorICAiJysnXDM3NyQnJFwzNzdcNDAkXDQwXDM3N1wzNVwiXDM1XDM3N1wzM1wzNlwzM1wzNzdcMzBcMzRcMzBcMzc3XDBcMFwwIgorICAiXDM3N314aFwzNzdLSFw3N1wzNzdLSD5cMzc3PDoyXDM3N1wwXDBcMFwzNzdcMFwwXDBLXDBcMFwwLFwwXDBcMFwyNFwwIgorICAiXDBcMFw3XDBcMFwwXDBcMFwwXDBcMTRcMFwwXDBcMzc3XDI0NFwyNDFcMjMyXDM3N315b1wzNzdcMTc3e3BcMzc3ZmMiCisgICJaXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDAiCisgICJcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMCIKKyAgIlwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3fHdnXDM3N0tIPlwzNzdLSD5cMzc3IgorICAiPDoyXDM3N1wwXDBcMFwzNzdcMFwwXDBLXDBcMFwwLFwwXDBcMFwyNFwwXDBcMFw3XDBcMFwwXDBcMFwwXDBcMTRcMFwwIgorICAiXDBcMzc3XDIzN1wyMzRcMjI2XDM3N3l0alwzNzd6dWtcMzc3XDIyNFwyMTdcMjAzXDM3N1wyNTZcMjUxXDIzM1wzNzciCisgICJcMjYwXDI1MVwyMzRcMzc3XDI1N1wyNTNcMjM1XDM3N1wyNjFcMjUzXDIzNVwzNzdcMjYxXDI1M1wyMzVcMzc3XDI2MSIKKyAgIlwyNTNcMjM2XDM3N1wyNjBcMjUzXDIzNVwzNzdcMjU3XDI1MVwyMzNcMzc3XDI1NlwyNTBcMjMyXDM3N1wyNTVcMjUwIgorICAiXDIzMVwzNzdcMjUzXDI0NVwyMzBcMzc3XDI1MlwyNDNcMjI1XDM3N1wyNTBcMjQyXDIyNFwzNzdcMjQ3XDI0MFwyMjIiCisgICJcMzc3XDI0NVwyMzZcMjIwXDM3N1wyNDJcMjM0XDIxNlwzNzdcMjM3XDIzMVwyMTJcMzc3XDIzNVwyMjdcMjEwXDM3NyIKKyAgIlwyMzNcMjI2XDIwNlwzNzdcMjMxXDIyM1wyMDRcMzc3XDIzMFwyMjJcMjAzXDM3N1wyMjVcMjE3XDIwMFwzNzdcMjIzIgorICAiXDIxNH1cMzc3XDIyMVwyMTF7XDM3N1wyMTZcMjExd1wzNzdcMjE1XDIwNnVcMzc3XDIxNFwyMDZ0XDM3N1wyMTJcMjA0IgorICAiclwzNzdcMjEwXDIwMnFcMzc3XDIwN1wyMDFvXDM3N1wyMDZcMjAwblwzNzdcMjA1XDE3N21cMzc3dnFhXDM3N0tIPlwzNzciCisgICJLSD5cMzc3PDoyXDM3N1wwXDBcMFwzNzdcMFwwXDBLXDBcMFwwLFwwXDBcMFwyNFwwXDBcMFw3XDBcMFwwXDBcMFwwXDAiCisgICJcMTRcMFwwXDBcMzc3XDIzNVwyMzJcMjI0XDM3N3RwZVwzNzd1cWdcMzc3dXFnXDM3N3VxZlwzNzd2cmdcMzc3dnJoXDM3NyIKKyAgInVxZ1wzNzd1cGZcMzc3dXBmXDM3N3RwZVwzNzdzb2RcMzc3cm5jXDM3N3BsYVwzNzdtaV9cMzc3bWheXDM3N2pmXFxcMzc3IgorICAiaGRZXDM3N2ZhV1wzNzdjX1VcMzc3YV1TXDM3N19aUVwzNzddWk9cMzc3W1hNXDM3N1lWS1wzNzdYVElcMzc3V1NIXDM3NyIKKyAgIlVSR1wzNzdUUEVcMzc3Uk5EXDM3N1BNQ1wzNzdQTEJcMzc3TktBXDM3N01KQFwzNzdNSVw3N1wzNzdMSVw3N1wzNzdLIgorICAiSD5cMzc3S0g+XDM3N0tIPlwzNzc8OTJcMzc3XDBcMFwwXDM3N1wwXDBcMEtcMFwwXDAsXDBcMFwwXDI0XDBcMFwwXDciCisgICJcMFwwXDBcMFwwXDBcMFwxNFwwXDBcMFwzNzdcMjI1XDIyM1wyMTRcMzc3b2thXDM3N3FtY1wzNzdxbWNcMzc3cWxiXDM3NyIKKyAgInJtY1wzNzdybmNcMzc3cm1iXDM3N3JsYlwzNzdxbGJcMzc3cGthXDM3N29rYFwzNzdual9cMzc3a2dcXFwzNzdqZVpcMzc3IgorICAiaWRZXDM3N2ZiV1wzNzdjYFVcMzc3Yl5UXDM3N2BcXFJcMzc3XlpPXDM3N1xcWE1cMzc3WldMXDM3N1lVSlwzNzdXU0kiCisgICJcMzc3VlNIXDM3N1VSR1wzNzdUUEVcMzc3U09EXDM3N1FOQ1wzNzdQTEJcMzc3T0tBXDM3N11ZUFwzNzdva2NcMzc3biIKKyAgImtjXDM3N1JPRlwzNzdLSD5cMzc3S0g+XDM3N0tIPlwzNzc9OzNcMzc3XDBcMFwwXDM3N1wwXDBcMEtcMFwwXDAsXDBcMCIKKyAgIlwwXDI0XDBcMFwwXDdcMFwwXDBcMFwwXDBcMFwxNFwwXDBcMFwzNzdcMjE3XDIxNFwyMDVcMzc1a2ddXDM3N2xoXlwzNzciCisgICJtaV9cMzc3bWheXDM3N21pX1wzNzdtaV5cMzc3bWleXDM3N25pX1wzNzdsaF1cMzc3a2dcXFwzNzdqZltcMzc3aWVaXDM3NyIKKyAgImdjWFwzNzdlYVZcMzc3ZGBVXDM3N2FdU1wzNzdgXFxRXDM3N15aT1wzNzddWU5cMzc3XFxYTFwzNzdaVkpcMzc3WVVKIgorICAiXDM3N1hUSVwzNzdWU0hcMzc3VVFHXDM3N1RQRVwzNzdTT0VcMzc3UU5DXDM3N1BNQ1wzNzdPTEJcMzc3T0tAXDM3N3ciCisgICJ0bFwzNzdNSVw3N1wzNzdMSVw3N1wzNzdBPjZcMzc3S0g+XDM3N0tIPlwzNzdLSD5cMzc3PDoyXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBKXDBcMFwwK1wwXDBcMFwyNFwwXDBcMFw3XDBcMFwwXDBcMFwwXDBcMTNcMFwwXDBcMzc3XDIxNVwyMTNcMjAyIgorICAiXDM3NGhlWlwzNzdpZltcMzc3amZcXFwzNzdrZlxcXDM3N2pmXFxcMzc3amZcXFwzNzdrZlxcXDM3N2pmXFxcMzc3aWYiCisgICJbXDM3N2lkWlwzNzdoY1pcMzc3Z2JYXDM3N2VhVlwzNzdjX1VcMzc3Yl5UXDM3N2BcXFFcMzc3XlpPXDM3N11YTlwzNzciCisgICJcXFhOXDM3N1pWTFwzNzdZVUpcMzc3V1RJXDM3N1dTSFwzNzdVUkdcMzc3VFBGXDM3N1NPRVwzNzdSTkRcMzc3UE1DXDM3NyIKKyAgIk9MQlwzNzdPS0BcMzc3TkpAXDM3N01JXDc3XDM3N0A8NFwzNzc+OzNcMzc3S0g+XDM3N0tIPlwzNzdLSD5cMzc3S0g+IgorICAiXDM3N0VCOlwzNzZcMFwwXDBcMzc3XDBcMFwwR1wwXDBcMClcMFwwXDBcMjNcMFwwXDBcN1wwXDBcMFwwXDBcMFwwXDEyIgorICAiXDBcMFwwXDM3N29tZlwzNDNOTENcMzc3UE1GXDM3N1FORlwzNzdRTkZcMzc3UU5GXDM3N1FNRVwzNzdRTkZcMzc3UU4iCisgICJGXDM3N1FNRVwzNzdRTUVcMzc3UExEXDM3N09MQ1wzNzdOSkJcMzc3TElBXDM3N0tJQFwzNzdKRz5cMzc3SEU9XDM3NyIKKyAgIkdDPFwzNzdHQzxcMzc3RUE6XDM3N0NAOFwzNzdCXDc3IiI4XDM3N0I+N1wzNzdBPjdcMzc3QD01XDM3N1w3Nzw0XDM3NyIKKyAgIj47M1wzNzc9OjJcMzc3PDkyXDM3Nzw5MVwzNzc7ODFcMzc3OjgwXDM3Nzo3MFwzNzc6NzBcMzc3OTcwXDM3Nzk3MFwzNzciCisgICI5NzBcMzc3OjgwXDM3N1w3Nzw0XDM2NFwwXDBcMFwzNzdcMFwwXDBBXDBcMFwwJVwwXDBcMFwyMVwwXDBcMFw2XDBcMCIKKyAgIlwwXDBcMFwwXDBcMTFcMFwwXDBZXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3dXRyXDM2NnNybFwzNzd4dnBcMzc3IgorICAieHdxXDM3N317dlwzNzdcMjAxXDE3N3pcMzc3XDIwNVwyMDNcMTc3XDM3N1wyMTFcMjA3XDIwMlwzNzdcMjEzXDIxMFwyMDQiCisgICJcMzc3XDIxN1wyMTZcMjEyXDM3N1wyMjFcMjE3XDIxM1wzNzdcMjIyXDIyMFwyMTRcMzc3XDIyMFwyMTZcMjEzXDM3NyIKKyAgIlwyMTdcMjE2XDIxMVwzNzdcMjE0XDIxMlwyMDdcMzc3XDIxM1wyMTBcMjA0XDM3N1wyMTBcMjA2XDIwMlwzNzdcMjA3IgorICAiXDIwNFwyMDFcMzc3XDIwM1wyMDF9XDM3N1wyMDFcMTc3elwzNzdcMTc3fXhcMzc3fXt3XDM3N3l3c1wzNzd3dXBcMzc3IgorICAic3JsXDM3N3BvaVwzNzdubGdcMzc3bGpmXDM3N2xpZFwzNzdsamRcMzc3bGtlXDM3N21qZFwzNzdua2RcMzc3R0Q+XDM3MiIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwyMDZcMFwwXDAiIjdcMFwwXDBcMzZcMFwwXDBcMTVcMCIKKyAgIlwwXDBcNVwwXDBcMFwwXDBcMFwwXDZcMFwwXDBcMjBcMFwwXDAhXDBcMFwwIiI5XDBcMFwwXDM3N2ZlY1wzNTZMSUNcMzc0IgorICAiTElCXDM3N09NRlwzNzdVU0xcMzc3WVdRXDM3N15cXFZcMzc3ZGJcXFwzNzdpZ2FcMzc3bmtnXDM3N3Fva1wzNzdxb2oiCisgICJcMzc3b21nXDM3N25rZVwzNzdqaGNcMzc3aWdiXDM3N2dlYFwzNzdlYl1cMzc3ZGFcXFwzNzdgXlhcMzc3XFxbVFwzNzciCisgICJZWFFcMzc3VlRNXDM3N1JQSVwzNzdNS0RcMzc3SUdAXDM3N0ZEPFwzNzdGQzxcMzc3REI6XDM3N0NBOFwzNzdEQThcMzc3IgorICAiREA4XDM3N0NAN1wzNzcuKyVcMzYyXDBcMFwwXDM3N1wwXDBcMGlcMFwwXDBVXDBcMFwwXDc3XDBcMFwwKFwwXDBcMFwyNSIKKyAgIlwwXDBcMFwxMVwwXDBcMFwzXDBcMFwwXDBcMFwwXDBcNFwwXDBcMFwxMlwwXDBcMFwyNVwwXDBcMCZcMFwwXDBuXDBcMCIKKyAgIlwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwIgorICAiXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwyMTQiCisgICJcMFwwXDBPXDBcMFwwPFwwXDBcMClcMFwwXDBcMzFcMFwwXDBcMTVcMFwwXDBcNVwwXDBcMFwyXDBcMFwwXDBcMFwwXDAiCisgICJcMlwwXDBcMFw1XDBcMFwwXDE0XDBcMFwwXDI1XDBcMFwwI1wwXDBcMCIiMlwwXDBcMEJcMFwwXDBOXDBcMFwwVlwwXDAiCisgICJcMFpcMFwwXDBcXFwwXDBcMFxcXDBcMFwwXFxcMFwwXDBcXFwwXDBcMFxcXDBcMFwwXFxcMFwwXDBcXFwwXDBcMF1cMCIKKyAgIlwwXDBdXDBcMFwwXVwwXDBcMF1cMFwwXDBdXDBcMFwwXVwwXDBcMF1cMFwwXDBdXDBcMFwwXVwwXDBcMF1cMFwwXDBdIgorICAiXDBcMFwwXVwwXDBcMF1cMFwwXDBdXDBcMFwwXFxcMFwwXDBcXFwwXDBcMFxcXDBcMFwwXFxcMFwwXDBcXFwwXDBcMFsiCisgICJcMFwwXDBXXDBcMFwwT1wwXDBcMENcMFwwXDAiIjRcMFwwXDAkXDBcMFwwXDI3XDBcMFwwXDE1XDBcMFwwXDZcMFwwXDAiCisgICJcMlwwXDBcMFwxXDBcMFwwXDBcMFwwXDBcMVwwXDBcMFwyXDBcMFwwXDVcMFwwXDBcMTJcMFwwXDBcMjJcMFwwXDBcMzQiCisgICJcMFwwXDAmXDBcMFwwL1wwXDBcMCIiNVwwXDBcMCIiOVwwXDBcMDpcMFwwXDA6XDBcMFwwOlwwXDBcMDpcMFwwXDA6XDAiCisgICJcMFwwOlwwXDBcMDpcMFwwXDA6XDBcMFwwOlwwXDBcMDpcMFwwXDA6XDBcMFwwOlwwXDBcMDpcMFwwXDA6XDBcMFwwOiIKKyAgIlwwXDBcMDpcMFwwXDA6XDBcMFwwOlwwXDBcMDpcMFwwXDA6XDBcMFwwOlwwXDBcMDpcMFwwXDA6XDBcMFwwOlwwXDBcMCIKKyAgIjpcMFwwXDA6XDBcMFwwIiI5XDBcMFwwIiI1XDBcMFwwIiIwXDBcMFwwKFwwXDBcMFwzNVwwXDBcMFwyM1wwXDBcMFwxMiIKKyAgIlwwXDBcMFw1XDBcMFwwXDJcMFwwXDBcMVwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwxXDBcMFwwXDFcMFwwIgorICAiXDBcNFwwXDBcMFw3XDBcMFwwXDE0XDBcMFwwXDIyXDBcMFwwXDI3XDBcMFwwXDMyXDBcMFwwXDM0XDBcMFwwXDM1XDAiCisgICJcMFwwXDM1XDBcMFwwXDM1XDBcMFwwXDM1XDBcMFwwXDM1XDBcMFwwXDM1XDBcMFwwXDM1XDBcMFwwXDM2XDBcMFwwXDM2IgorICAiXDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwIgorICAiXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM2XDBcMFwwXDM1XDBcMFwwXDM1XDBcMFwwXDM1XDAiCisgICJcMFwwXDM1XDBcMFwwXDM1XDBcMFwwXDM1XDBcMFwwXDMzXDBcMFwwXDI3XDBcMFwwXDIyXDBcMFwwXDE1XDBcMFwwXDEwIgorICAiXDBcMFwwXDRcMFwwXDBcMlwwXDBcMFwxXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDFcMFwwXDBcMlwwXDBcMFw0XDBcMFwwXDdcMFwwXDBcMTFcMFwwXDBcMTJcMFwwXDBcMTNcMFwwXDAiCisgICJcMTNcMFwwXDBcMTNcMFwwXDBcMTNcMFwwXDBcMTNcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMCIKKyAgIlwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTQiCisgICJcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDBcMTRcMFwwXDAiCisgICJcMTNcMFwwXDBcMTNcMFwwXDBcMTNcMFwwXDBcMTNcMFwwXDBcMTJcMFwwXDBcMTFcMFwwXDBcN1wwXDBcMFw0XDBcMCIKKyAgIlwwXDJcMFwwXDBcMVwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDFcMFwwXDBcMVwwXDBcMFwyXDBcMFwwXDJcMFwwXDBcMlwwXDAiCisgICJcMFwyXDBcMFwwXDJcMFwwXDBcMlwwXDBcMFwzXDBcMFwwXDNcMFwwXDBcM1wwXDBcMFwzXDBcMFwwXDNcMFwwXDBcMyIKKyAgIlwwXDBcMFwzXDBcMFwwXDNcMFwwXDBcM1wwXDBcMFwzXDBcMFwwXDNcMFwwXDBcM1wwXDBcMFwzXDBcMFwwXDNcMFwwIgorICAiXDBcM1wwXDBcMFwzXDBcMFwwXDNcMFwwXDBcM1wwXDBcMFwzXDBcMFwwXDNcMFwwXDBcM1wwXDBcMFwyXDBcMFwwXDIiCisgICJcMFwwXDBcMlwwXDBcMFwyXDBcMFwwXDJcMFwwXDBcMVwwXDBcMFwxXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwxXDBcMFwwXDFcMFwwXDBcMVwwXDBcMFwxXDBcMFwwXDFcMFwwXDBcMVwwXDBcMFwxXDBcMFwwXDFcMFwwXDBcMSIKKyAgIlwwXDBcMFwxXDBcMFwwXDFcMFwwXDBcMVwwXDBcMFwxXDBcMFwwXDFcMFwwXDBcMVwwXDBcMFwxXDBcMFwwXDFcMFwwIgorICAiXDBcMVwwXDBcMFwxXDBcMFwwXDFcMFwwXDBcMVwwXDBcMFwxXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn07CisKKworLyogR2RrUGl4YnVmIFJHQkEgQy1Tb3VyY2UgaW1hZ2UgZHVtcCAqLworCitzdGF0aWMgY29uc3QgZ3VpbnQ4IHN0b2NrX3ZpbV93aW5kb3dfbWF4aW1pemVbXSA9Cit7ICIiCisgIC8qIFBpeGJ1ZiBtYWdpYyAoMHg0NzY0NmI1MCkgKi8KKyAgIkdka1AiCisgIC8qIGxlbmd0aDogaGVhZGVyICgyNCkgKyBwaXhlbF9kYXRhICgyMzA0KSAqLworICAiXDBcMFwxMVwzMCIKKyAgLyogcGl4ZGF0YV90eXBlICgweDEwMTAwMDIpICovCisgICJcMVwxXDBcMiIKKyAgLyogcm93c3RyaWRlICg5NikgKi8KKyAgIlwwXDBcMGAiCisgIC8qIHdpZHRoICgyNCkgKi8KKyAgIlwwXDBcMFwzMCIKKyAgLyogaGVpZ2h0ICgyNCkgKi8KKyAgIlwwXDBcMFwzMCIKKyAgLyogcGl4ZWxfZGF0YTogKi8KKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwIgorICAiXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDAiCisgICJcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzUxIgorICAiXDM1MVwzNTFcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wwXDBcMFwzNzdcMzc3XDI2NlpcMzc3IgorICAiXDBcMFwwXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MCIKKyAgIlwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMFwwXDBcMzc3XDM3N3A4XDM3N1wzNzdcMzAyYVwzNzdcMzc3XDI2NVlcMzc3IgorICAiXDBcMFwwXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDBcMFwwIgorICAiXDM3N1wzNzdcXC5cMzc3XDM3N1wyNzVeXDM3N1wzNzdcMzA2YlwzNzdcMzc3XDMxMGNcMzc3XDM3N1wyNzdfXDM3N1wwIgorICAiXDBcMFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDBcMFwwXDM3N1wyNDRAXDQwXDM3N1wyNDQiCisgICJAXDQwXDM3N1wzNzdcMzEwY1wzNzdcMjI2XFwtXDM3N1wyMjNXK1wzNzdcMFwwXDBcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDBcMFwwXDM3N1wzNzdcMzA2IgorICAiY1wzNzdcMFwwXDBcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzAiCisgICJcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDAiCisgICJcMFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDIyMyIKKyAgIlcrXDBcMzc3XDI3N19cMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzAiCisgICJcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMzc3XFwuXDBcMjQ0QFw0MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMjI2XFwtXDBcMzc3XDMxMGNcMFwzNzdcMjY1WVwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDM3N3A4XDBcMzc3XDI3NV5cMFwyNDRAXDQwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDMwNmNcMFwzNzdcMzEwY1wwXDM3N1wzMDZiXDBcMzc3XDMwMmEiCisgICJcMFwzNzdcMjY2WlwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3NyIKKyAgIlwzNzdcMzAyYVwwXDM3N1wzMDZiXDBcMzc3XDMxMGNcMFwzNzdcMzA2Y1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDI0NEBcNDBcMFwzNzdcMjc1XlwwXDM3N3A4XDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMzc3XDI2NVlcMFwzNzdcMzEwY1wwXDIyNlxcLVwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMjQ0QFw0MFwwXDM3N1xcLlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwzNzdcMjc3X1wwXDIyM1crXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMFwwXDBcMzc3XDM3N1wzMDYiCisgICJjXDM3N1wwXDBcMFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MCIKKyAgIlwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMFwwXDBcMzc3XDIyM1crXDM3N1wyMjZcXC1cMzc3XDM3N1wzMTBjXDM3N1wyNDRAXDQwXDM3NyIKKyAgIlwyNDRAXDQwXDM3N1wwXDBcMFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDBcMFwwXDM3NyIKKyAgIlwzNzdcMjc3X1wzNzdcMzc3XDMxMGNcMzc3XDM3N1wzMDZiXDM3N1wzNzdcMjc1XlwzNzdcMzc3XFwuXDM3N1wwXDBcMCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wwXDBcMFwzNzdcMzc3IgorICAiXDI2NVlcMzc3XDM3N1wzMDJhXDM3N1wzNzdwOFwzNzdcMFwwXDBcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wwXDBcMFwzNzdcMzc3IgorICAiXDI2NlpcMzc3XDBcMFwwXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzAiCisgICJcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzQ0XDM0NFwzNDRcMzc3IgorICAiXDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDAiCisgICJcMFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3IgorICAiXDIwNVwyMDVcMjA1XDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wwXDBcMFwzNzdcMCIKKyAgIlwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAifTsKKworCisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wICovCisKK3N0YXRpYyBjb25zdCBndWludDggc3RvY2tfdmltX3dpbmRvd19tYXhpbWl6ZV93aWR0aFtdID0KK3sgIiIKKyAgLyogUGl4YnVmIG1hZ2ljICgweDQ3NjQ2YjUwKSAqLworICAiR2RrUCIKKyAgLyogbGVuZ3RoOiBoZWFkZXIgKDI0KSArIHBpeGVsX2RhdGEgKDIzMDQpICovCisgICJcMFwwXDExXDMwIgorICAvKiBwaXhkYXRhX3R5cGUgKDB4MTAxMDAwMikgKi8KKyAgIlwxXDFcMFwyIgorICAvKiByb3dzdHJpZGUgKDk2KSAqLworICAiXDBcMFwwYCIKKyAgLyogd2lkdGggKDI0KSAqLworICAiXDBcMFwwXDMwIgorICAvKiBoZWlnaHQgKDI0KSAqLworICAiXDBcMFwwXDMwIgorICAvKiBwaXhlbF9kYXRhOiAqLworICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDM3N1wzMDZjXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMjIzVytcMFwyMjYiCisgICJcXC1cMFwzNzdcMzEwY1wwXDI0NEBcNDBcMFwyNDRAXDQwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMjc3X1wwXDM3N1wzMTAiCisgICJjXDBcMzc3XDMwNmJcMFwzNzdcMjc1XlwwXDM3N1xcLlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMjY1WVwwIgorICAiXDM3N1wzMDJhXDBcMzc3cDhcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wyNjZaXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwIgorICAiXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzQ0XDM0NFwzNDRcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NCIKKyAgIlwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0IgorICAiXDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTQiCisgICJcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMFwwXDBcMzc3XDBcMFwwIgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwIgorICAiXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMFwwXDBcMzc3XDM3N1xcLlwzNzdcMjQ0QFw0MFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyMjNXK1wzNzdcMzc3XDI3N19cMzc3XDBcMFwwXDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMFwwXDBcMzc3XDM3N3A4XDM3N1wzNzdcMjc1XlwzNzdcMjQ0IgorICAiQFw0MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wyMjZcXC1cMzc3XDM3N1wzMTBjXDM3NyIKKyAgIlwzNzdcMjY1WVwzNzdcMFwwXDBcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMFwwXDBcMzc3XDM3N1wyNjZaXDM3N1wzNzdcMzAyYVwzNzdcMzc3XDMwNmJcMzc3IgorICAiXDM3N1wzMTBjXDM3N1wzNzdcMzA2Y1wzNzdcMFwwXDBcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wwXDBcMFwzNzdcMzc3XDMwNmNcMzc3XDM3N1wzMTBjXDM3NyIKKyAgIlwzNzdcMzA2YlwzNzdcMzc3XDMwMmFcMzc3XDM3N1wyNjZaXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wwXDBcMFwzNzdcMzc3XDI2NVlcMzc3IgorICAiXDM3N1wzMTBjXDM3N1wyMjZcXC1cMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMjQ0QFw0MCIKKyAgIlwzNzdcMzc3XDI3NV5cMzc3XDM3N3A4XDM3N1wwXDBcMFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDBcMFwwXDM3N1wzNzdcMjc3X1wzNzdcMjIzVytcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjQ0QFw0MFwzNzdcMzc3XFwuXDM3N1wwXDBcMFwzNzdcMzU0XDM1NFwzNTQiCisgICJcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMFwwXDBcMzc3XDBcMFwwIgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwIgorICAiXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNTFcMzUxXDM1MVwzNzdcMjcwIgorICAiXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzAiCisgICJcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MCIKKyAgIlwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3IgorICAiXDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDIwNVwyMDVcMjA1XDM3N1wwXDAiCisgICJcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3IgorICAicDhcMFwzNzdcMzAyYVwwXDM3N1wyNjVZXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1xcLlwwXDM3N1wyNzVeIgorICAiXDBcMzc3XDMwNmJcMFwzNzdcMzEwY1wwXDM3N1wyNzdfXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwyNDRAXDQwXDBcMjQ0QFw0MCIKKyAgIlwwXDM3N1wzMTBjXDBcMjI2XFwtXDBcMjIzVytcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzA2IgorICAiY1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMCJ9OworCisKKy8qIEdka1BpeGJ1ZiBSR0JBIEMtU291cmNlIGltYWdlIGR1bXAgKi8KKworc3RhdGljIGNvbnN0IGd1aW50OCBzdG9ja192aW1fd2luZG93X21pbmltaXplW10gPQoreyAiIgorICAvKiBQaXhidWYgbWFnaWMgKDB4NDc2NDZiNTApICovCisgICJHZGtQIgorICAvKiBsZW5ndGg6IGhlYWRlciAoMjQpICsgcGl4ZWxfZGF0YSAoMjMwNCkgKi8KKyAgIlwwXDBcMTFcMzAiCisgIC8qIHBpeGRhdGFfdHlwZSAoMHgxMDEwMDAyKSAqLworICAiXDFcMVwwXDIiCisgIC8qIHJvd3N0cmlkZSAoOTYpICovCisgICJcMFwwXDBgIgorICAvKiB3aWR0aCAoMjQpICovCisgICJcMFwwXDBcMzAiCisgIC8qIGhlaWdodCAoMjQpICovCisgICJcMFwwXDBcMzAiCisgIC8qIHBpeGVsX2RhdGE6ICovCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzA2Y1wzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMzc3XDIyM1crXDM3N1wyMjZcXC1cMzc3XDM3N1wzMTBjXDM3N1wyNDRAXDQwXDM3N1wyNDRAXDQwXDM3N1wwXDBcMCIKKyAgIlwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDM3N1wzNzdcMjc3X1wzNzdcMzc3XDMxMGNcMzc3XDM3N1wzMDZiXDM3N1wzNzdcMjc1XlwzNzdcMzc3IgorICAiXFwuXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wyNjVZXDM3N1wzNzdcMzAyYVwzNzdcMzc3cDhcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wyNjZaXDM3N1wwXDBcMFwzNzdcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDAiCisgICJcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMCIKKyAgIlwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNDRcMzQ0XDM0NFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NCIKKyAgIlwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0IgorICAiXDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTQiCisgICJcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTQiCisgICJcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NCIKKyAgIlwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwIgorICAiXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzciCisgICJcMzUxXDM1MVwzNTFcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MCIKKyAgIlwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwIgorICAiXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzAiCisgICJcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDIwNVwyMDVcMjA1XDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3NyIKKyAgIlwyNjZaXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdwOFwzNzdcMzc3XDMwMiIKKyAgImFcMzc3XDM3N1wyNjVZXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1xcLlwzNzdcMzc3XDI3NV5cMzc3IgorICAiXDM3N1wzMDZiXDM3N1wzNzdcMzEwY1wzNzdcMzc3XDI3N19cMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDI0NEBcNDBcMzc3IgorICAiXDI0NEBcNDBcMzc3XDM3N1wzMTBjXDM3N1wyMjZcXC1cMzc3XDIyM1crXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwzNzdcMzc3XDMwNmNcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn07CisKKworLyogR2RrUGl4YnVmIFJHQkEgQy1Tb3VyY2UgaW1hZ2UgZHVtcCAqLworCitzdGF0aWMgY29uc3QgZ3VpbnQ4IHN0b2NrX3ZpbV93aW5kb3dfbWluaW1pemVfd2lkdGhbXSA9Cit7ICIiCisgIC8qIFBpeGJ1ZiBtYWdpYyAoMHg0NzY0NmI1MCkgKi8KKyAgIkdka1AiCisgIC8qIGxlbmd0aDogaGVhZGVyICgyNCkgKyBwaXhlbF9kYXRhICgyMzA0KSAqLworICAiXDBcMFwxMVwzMCIKKyAgLyogcGl4ZGF0YV90eXBlICgweDEwMTAwMDIpICovCisgICJcMVwxXDBcMiIKKyAgLyogcm93c3RyaWRlICg5NikgKi8KKyAgIlwwXDBcMGAiCisgIC8qIHdpZHRoICgyNCkgKi8KKyAgIlwwXDBcMFwzMCIKKyAgLyogaGVpZ2h0ICgyNCkgKi8KKyAgIlwwXDBcMFwzMCIKKyAgLyogcGl4ZWxfZGF0YTogKi8KKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNTFcMzUxXDM1MVwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0IgorICAiXDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzAiCisgICJcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDIyM1crXDM3N1wzNzciCisgICJcMjc3X1wzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDM3N1wzNzdcXC5cMzc3XDI0NEBcNDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMFwwXDBcMzc3XDIyNlxcIgorICAiLVwzNzdcMzc3XDMxMGNcMzc3XDM3N1wyNjVZXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwIgorICAiXDBcMFwzNzdcMzc3cDhcMzc3XDM3N1wyNzVeXDM3N1wyNDRAXDQwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwIgorICAiXDM3N1wzNzdcMzA2Y1wzNzdcMzc3XDMxMGNcMzc3XDM3N1wzMDZiXDM3N1wzNzdcMzAyYVwzNzdcMzc3XDI2NlpcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MCIKKyAgIlwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDM3N1wyNjZaXDM3N1wzNzdcMzAyYVwzNzdcMzc3XDMwNmJcMzc3IgorICAiXDM3N1wzMTBjXDM3N1wzNzdcMzA2Y1wzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMjQ0QFw0MFwzNzciCisgICJcMzc3XDI3NV5cMzc3XDM3N3A4XDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NCIKKyAgIlwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0IgorICAiXDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwzNzciCisgICJcMzc3XDI2NVlcMzc3XDM3N1wzMTBjXDM3N1wyMjZcXC1cMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDAiCisgICJcMFwwXDI0NEBcNDBcMzc3XDM3N1xcLlwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMjc3X1wzNzdcMjIzVytcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTQiCisgICJcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzAiCisgICJcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDM3N1wzNDRcMzQ0XDM0NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzciCisgICJcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjA1XDIwNVwyMDVcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAifTsKKworCisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wICovCisKK3N0YXRpYyBjb25zdCBndWludDggc3RvY2tfdmltX3dpbmRvd19zcGxpdFtdID0KK3sgIiIKKyAgLyogUGl4YnVmIG1hZ2ljICgweDQ3NjQ2YjUwKSAqLworICAiR2RrUCIKKyAgLyogbGVuZ3RoOiBoZWFkZXIgKDI0KSArIHBpeGVsX2RhdGEgKDIzMDQpICovCisgICJcMFwwXDExXDMwIgorICAvKiBwaXhkYXRhX3R5cGUgKDB4MTAxMDAwMikgKi8KKyAgIlwxXDFcMFwyIgorICAvKiByb3dzdHJpZGUgKDk2KSAqLworICAiXDBcMFwwYCIKKyAgLyogd2lkdGggKDI0KSAqLworICAiXDBcMFwwXDMwIgorICAvKiBoZWlnaHQgKDI0KSAqLworICAiXDBcMFwwXDMwIgorICAvKiBwaXhlbF9kYXRhOiAqLworICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMzc3XDM3N1wzNzdcMFwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDAiCisgICJcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDBcMzQ0XDM0NFwzNDRcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzQ0XDM0NFwzNDRcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3IgorICAiXDM3N1wwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwIgorICAiXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwzNDRcMzQ0XDM0NFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NCIKKyAgIlwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0IgorICAiXDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTQiCisgICJcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMjcwXDI3MFwyNzBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3IgorICAiXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwwXDI3MFwyNzBcMjcwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwyNzBcMjcwXDI3MFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMFwwIgorICAiXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTQiCisgICJcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3NyIKKyAgIlwzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwIgorICAiXDBcMzc3XDBcMFwwXDBcMjcwXDI3MFwyNzBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDI3MFwyNzBcMjcwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wwXDBcMFwwIgorICAiXDM3N1wzNTFcMzUxXDM1MVwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzciCisgICJcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MCIKKyAgIlwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDIwNVwyMDVcMjA1XDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMFwyNzBcMjcwXDI3MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMzUxXDM1MVwzNTFcMFwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwIgorICAiXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDAiCisgICJcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMjA1XDIwNVwyMDVcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDBcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDM0NFwzNDRcMzQ0XDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wwXDBcMCIKKyAgIlwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM0NFwzNDRcMzQ0XDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMFwyNzBcMjcwXDI3MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMjcwXDI3MFwyNzBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDBcMFwwXDBcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0IgorICAiXDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTQiCisgICJcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMCIKKyAgIlwwXDI3MFwyNzBcMjcwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwzNzdcMzc3XDM3N1wwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwyNzBcMjcwXDI3MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMFwwXDBcMFwzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMjcwIgorICAiXDI3MFwyNzBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3NyIKKyAgIlwzNzdcMzc3XDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MCIKKyAgIlwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDI3MFwyNzBcMjcwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNTFcMzUxXDM1MVwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NCIKKyAgIlwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0IgorICAiXDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwyMDVcMjA1XDIwNSIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwzNzdcMzUxXDM1MVwzNTFcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzAiCisgICJcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3NyIKKyAgIlwyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyMDVcMjA1XDIwNVwzNzdcMFwwIgorICAiXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAifTsKKworCisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wICovCisKK3N0YXRpYyBjb25zdCBndWludDggc3RvY2tfdmltX3dpbmRvd19zcGxpdF92ZXJ0aWNhbFtdID0KK3sgIiIKKyAgLyogUGl4YnVmIG1hZ2ljICgweDQ3NjQ2YjUwKSAqLworICAiR2RrUCIKKyAgLyogbGVuZ3RoOiBoZWFkZXIgKDI0KSArIHBpeGVsX2RhdGEgKDIzMDQpICovCisgICJcMFwwXDExXDMwIgorICAvKiBwaXhkYXRhX3R5cGUgKDB4MTAxMDAwMikgKi8KKyAgIlwxXDFcMFwyIgorICAvKiByb3dzdHJpZGUgKDk2KSAqLworICAiXDBcMFwwYCIKKyAgLyogd2lkdGggKDI0KSAqLworICAiXDBcMFwwXDMwIgorICAvKiBoZWlnaHQgKDI0KSAqLworICAiXDBcMFwwXDMwIgorICAvKiBwaXhlbF9kYXRhOiAqLworICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wwXDBcMFwwXDBcMzc3XDM3N1wzNzciCisgICJcMFwzNzdcMzc3XDM3N1wwXDM3N1wzNzdcMzc3XDBcMzc3XDM3N1wzNzdcMFwzNzdcMzc3XDM3N1wwXDM3N1wzNzdcMzc3IgorICAiXDBcMzc3XDM3N1wzNzdcMFwzNTFcMzUxXDM1MVwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMFwzNzdcMzc3XDM3N1wwXDM3NyIKKyAgIlwzNzdcMzc3XDBcMzc3XDM3N1wzNzdcMFwzNzdcMzc3XDM3N1wwXDM3N1wzNzdcMzc3XDBcMzc3XDM3N1wzNzdcMFwzNTEiCisgICJcMzUxXDM1MVwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3NyIKKyAgIlwwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTFcMzUxIgorICAiXDM1MVwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM3N1wzNTFcMzUxXDM1MVwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3NyIKKyAgIlwzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDAiCisgICJcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwIgorICAiXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMzc3IgorICAiXDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3IgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NCIKKyAgIlwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0IgorICAiXDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NCIKKyAgIlwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MCIKKyAgIlwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzciCisgICJcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzciCisgICJcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0IgorICAiXDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzciCisgICJcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NCIKKyAgIlwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwIgorICAiXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MCIKKyAgIlwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTQiCisgICJcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMCIKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDI3MFwyNzBcMjcwXDM3N1wwXDAiCisgICJcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3IgorICAiXDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzciCisgICJcMzc3XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wyNzBcMjcwXDI3MFwzNzdcMFwwXDBcMzc3XDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NCIKKyAgIlwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzU0IgorICAiXDM1NFwzNTRcMzc3XDM1NFwzNTRcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMzU0XDM1NFwzNTRcMzc3XDM1NFwzNTQiCisgICJcMzU0XDM3N1wzNTRcMzU0XDM1NFwzNzdcMjcwXDI3MFwyNzBcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwzNzdcMzQ0XDM0NFwzNDRcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwIgorICAiXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDIwNVwyMDUiCisgICJcMjA1XDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwzNzdcMzQ0XDM0NFwzNDRcMzc3XDI3MFwyNzBcMjcwXDM3NyIKKyAgIlwyNzBcMjcwXDI3MFwzNzdcMjcwXDI3MFwyNzBcMzc3XDI3MFwyNzBcMjcwXDM3N1wyNzBcMjcwXDI3MFwzNzdcMjcwIgorICAiXDI3MFwyNzBcMzc3XDIwNVwyMDVcMjA1XDM3N1wwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMCIKKyAgIlwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwIgorICAiXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDBcMFwwXDM3N1wwXDBcMFwzNzdcMFwwXDBcMzc3XDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDM0NFwzNDRcMzQ0XDBcMFwwXDBcMFwzNDRcMzQ0XDM0NFwwXDI3MFwyNzBcMjcwXDBcMjcwIgorICAiXDI3MFwyNzBcMFwyNzBcMjcwXDI3MFwwXDI3MFwyNzBcMjcwXDBcMjcwXDI3MFwyNzBcMFwyNzBcMjcwXDI3MFwwXDIwNSIKKyAgIlwyMDVcMjA1XDBcMFwwXDBcMFwzNDRcMzQ0XDM0NFwwXDI3MFwyNzBcMjcwXDBcMjcwXDI3MFwyNzBcMFwyNzBcMjcwIgorICAiXDI3MFwwXDI3MFwyNzBcMjcwXDBcMjcwXDI3MFwyNzBcMFwyNzBcMjcwXDI3MFwwXDIwNVwyMDVcMjA1XDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCisgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKKyAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgorICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAifTsKKworCmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX2JsYW5rLnhwbSBiL3BpeG1hcHMvdGJfYmxhbmsueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOGQ2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX2JsYW5rLnhwbQpAQCAtMCwwICsxLDI4IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfYmxhbmtfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDQgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorIi4JcyBub25lCW0gbm9uZQljIG5vbmUiLAorIlgJcyB0b3BTaGFkb3dDb2xvcgltIG5vbmUJYyAjRENERUU1IiwKKyJvCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAuIiwKKyIgWFhYWFhYWFhYWFhYWFhYIC4iLAorIiBYLi4uLi4uLi4uLi4uLi4gbyIsCisiIFguLi4uLi4uLi4uLi4uLiBvIiwKKyIgWC4uLi4uLi4uLi4uLi4uIG8iLAorIiBYLi4uLi4uLi4uLi4uLi4gbyIsCisiIFguLi4uLi4uLi4uLi4uLiBvIiwKKyIgWC4uLi4uLi4uLi4uLi4uIG8iLAorIiBYLi4uLi4uLi4uLi4uLi4gbyIsCisiIFguLi4uLi4uLi4uLi4uLiBvIiwKKyIgWC4uLi4uLi4uLi4uLi4uIG8iLAorIiBYLi4uLi4uLi4uLi4uLi4gbyIsCisiIFguLi4uLi4uLi4uLi4uLiBvIiwKKyIgWC4uLi4uLi4uLi4uLi4uIG8iLAorIiBYLi4uLi4uLi4uLi4uLi4gbyIsCisiIFguLi4uLi4uLi4uLi4uLiBvIiwKKyIgICAgICAgICAgICAgICAgIG8iLAorIi4ub29vb29vb29vb29vb29vbyJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9jbG9zZS54cG0gYi9waXhtYXBzL3RiX2Nsb3NlLnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzZkYjQyCi0tLSAvZGV2L251bGwKKysrIGIvcGl4bWFwcy90Yl9jbG9zZS54cG0KQEAgLTAsMCArMSwzMSBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX2Nsb3NlX3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCA3IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JYyAjODgwMDAwCW0gYmxhY2siLAorIlgJcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJvCXMgaWNvbkNvbG9yMwltIGJsYWNrCWMgI0ZGMDAwMCIsCisiTwlzIHRvcFNoYWRvd0NvbG9yCW0gbm9uZQljICNEQ0RFRTUiLAorIisJcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIkAJcyBib3R0b21TaGFkb3dDb2xvcgltIGJsYWNrCWMgIzVENjA2OSIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAgICAgICAgICAiLAorIiAgLi5YWFhYWFhYWFguICAgICIsCisiIC5vby5PT09PT09PLm8uICAgIiwKKyIgIC5vby5PK09PTy5vby4gICAiLAorIiAgIC5vby5PT08ub28uQCAgICIsCisiICAgWC5vby5PLm9vLlhAICAgIiwKKyIgICBYTy5vby5vby4rWEAgICAiLAorIiAgIFhPTy5vb28uTytYQCAgICIsCisiICAgWE9PLm9vby5PK1hAICAgIiwKKyIgICBYTy5vby5vby4rWEAgICAiLAorIiAgIFgub28uTy5vby5YQCAgICIsCisiICAgLm9vLk9PTy5vby5AICAgIiwKKyIgIC5vby5PT09PTy5vby4gICAiLAorIiAub28uT09PT09PTy5vby4gICIsCisiICAuLisrKysrKysrKy5vLiAgIiwKKyIgICBYWFhYWFhYWFhYWC4gICAiLAorIiAgICAgIEBAQEBAQEBAQCAgICIsCisiICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX2NvcHkueHBtIGIvcGl4bWFwcy90Yl9jb3B5LnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FiNGRiCi0tLSAvZGV2L251bGwKKysrIGIvcGl4bWFwcy90Yl9jb3B5LnhwbQpAQCAtMCwwICsxLDI4IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfY29weV94cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMTggMTggNCAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgbm9uZQltIG5vbmUJYyBub25lIiwKKyIuCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisiWAlzIGljb25Db2xvcjIJbSBub25lCWMgI0ZGRkZGRiIsCisibwlzIGJvdHRvbVNoYWRvd0NvbG9yCW0gYmxhY2sJYyAjNUQ2MDY5IiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIiwKKyIgLi4uLi4uLi4uLiAgICAgICAiLAorIiAuWFhYWFhYWFgubyAgICAgICIsCisiIC5YLi4uLi4uLi4uLi4uLiAgIiwKKyIgLlhYWFguWFhYWFhYWFguICAiLAorIiAuWC4uLi5YLi4uLi4uWC5vICIsCisiIC5YWFhYLlhYWFhYWFhYLm8gIiwKKyIgLlguLi4uWC4uLi4uLlgubyAiLAorIiAuWFhYWC5YWFhYWFhYWC5vICIsCisiIC5YLi5YLlguLi4uLi5YLm8gIiwKKyIgLlhYWFguWFhYWFhYWFgubyAiLAorIiAuLi4uLi5YLi5YWFhYWC5vICIsCisiICBvb29vLlhYWFhYWFhYLm8gIiwKKyIgICAgICAuLi4uLi4uLi4ubyAiLAorIiAgICAgICAgb29vb29vb29vICIsCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL3BpeG1hcHMvdGJfY3RhZ3MueHBtIGIvcGl4bWFwcy90Yl9jdGFncy54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4ZDQ1MwotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfY3RhZ3MueHBtCkBAIC0wLDAgKzEsMzEgQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKiB0Yl9jdGFnc194cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMTggMTggNyAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgbm9uZQltIG5vbmUJYyBub25lIiwKKyIuCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisiWAlzIGljb25Db2xvcjIJbSBub25lCWMgI0ZGRkZGRiIsCisibwlzIGJvdHRvbVNoYWRvd0NvbG9yCW0gYmxhY2sJYyAjNUQ2MDY5IiwKKyJPCW0gYmxhY2sJYyAjODg4ODAwIiwKKyIrCXMgdG9wU2hhZG93Q29sb3IJbSBub25lCWMgI0RDREVFNSIsCisiQAlzIGljb25Db2xvcjYJbSBub25lCWMgI0ZGRkYwMCIsCisvKiBwaXhlbHMgKi8KKyIgICAgIC4uIC4uLi4uICAgICAiLAorIiAgICAuWFguWFhYWFguICAgICIsCisiICAgIC5YWFhYWFhYWFguICAgIiwKKyIgICAgLlhYLlhYWFguLlguICAiLAorIiAgICAgLi4gLi4uLm8gLi4gICIsCisiICAgT08rK08rLi4uK08rLisgIiwKKyIgIE9vQEBAQEAuLi5vQEBALm8iLAorIiBPb0BAQEBAQC4uLm9AQEAubyIsCisiT29AK28rQEBALi4ub0BAQC5vIiwKKyJPQEBvLm9AQEAuLi5vQEBALm8iLAorIm9AQCtvK0BAQC4uLm9AQEAubyIsCisiby5AQEBAQEBALi4ub0BAQC5vIiwKKyIgby5AQEBAQEAuLi5vQEBALm8iLAorIiAgby4uLi4uLi4uLm8uLi4ubyIsCisiICAgb29vb29vLi4ub29vb29vIiwKKyIgICAgICAgICAuLi5vICAgICAiLAorIiAgICAgICAgIC4uLm8gICAgICIsCisiICAgICAgICAgIG9vbyAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX2N1dC54cG0gYi9waXhtYXBzL3RiX2N1dC54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjZjk3NwotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfY3V0LnhwbQpAQCAtMCwwICsxLDI3IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfY3V0X3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCAzIDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJYCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgIC4gICAgIC5YICAgICAiLAorIiAgICAgLlggICAgLlggICAgICIsCisiICAgICAgLiAgIC5YICAgICAgIiwKKyIgICAgICAuWCAgLlggICAgICAiLAorIiAgICAgICAuIC5YICAgICAgICIsCisiICAgICAgIC5YLlggICAgICAgIiwKKyIgICAgICAgIC5YICAgICAgICAiLAorIiAgICAgICAuLi5YICAgICAgICIsCisiICAgICBYLlggIC5YICAgICAgIiwKKyIgICAgLi4uWCAgLi4uICAgICAiLAorIiAgIC5YWC5YICAuWCAuICAgICIsCisiICAgLiAgLlggIC5YIC5YICAgIiwKKyIgICAuICAuWCAgLlggLlggICAiLAorIiAgICAuLlhYICAgLi5YICAgICIsCisiICAgIFhYICAgICBYWCAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9leGl0LnhwbSBiL3BpeG1hcHMvdGJfZXhpdC54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkNThhMwotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfZXhpdC54cG0KQEAgLTAsMCArMSwzMyBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX2V4aXRfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDkgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorIlgJcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIm8JcyBib3R0b21TaGFkb3dDb2xvcgltIGJsYWNrCWMgIzVENjA2OSIsCisiTwlzIGljb25Db2xvcjMJbSBibGFjawljICNGRjAwMDAiLAorIisJcyBpY29uR3JheTMJbSBub25lCWMgI2FkYWRhZCIsCisiQAlzIGljb25HcmF5NAltIG5vbmUJYyAjOTQ5NDk0IiwKKyIjCXMgaWNvbkdyYXk1CW0gYmxhY2sJYyAjNzM3MzczIiwKKyIkCXMgaWNvbkdyYXk2CW0gYmxhY2sJYyAjNjM2MzYzIiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgIC4uLi4uLi4uICAiLAorIiAgICAgICAgLlhYWFhYWC5vICIsCisiICAgICAgICAuWFhYWFhYLm8gIiwKKyIgICAgICAuLi5YWFhYWFgubyAiLAorIiAgICAgIC5PLlhYWFhYWC5vICIsCisiIC4uLi4uLk9PLlhYLi5YLm8gIiwKKyIgLk9PT09PT09PLlguLlgubyAiLAorIiAuT09PT09PT08uWFhYWC5vICIsCisiIC4uLi4uLk9PLlhYWFhYLm8gIiwKKyIgICAgICAuTy5YWFhYWCsubyAiLAorIiAgICAgIC4uLlhYWFgrKy5vICIsCisiICAgICAgICAuWFgrK0AjLm8gIiwKKyIgICAgICAgIC5YK0AjIyQubyAiLAorIiAgICAgICAgLi4uLi4uLi5vICIsCisiICAgICAgICAgIG9vb29vb28gIiwKKyIgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL3BpeG1hcHMvdGJfZmluZC54cG0gYi9waXhtYXBzL3RiX2ZpbmQueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTRlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX2ZpbmQueHBtCkBAIC0wLDAgKzEsMjkgQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKiB0Yl9maW5kX3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCA1IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJYCXMgaWNvbkNvbG9yMgltIG5vbmUJYyAjRkZGRkZGIiwKKyJPCXMgaWNvbkdyYXkyCW0gbm9uZQljICNiZGJkYmQiLAorIisJcyBib3R0b21TaGFkb3dDb2xvcgltIGJsYWNrCWMgIzVENjA2OSIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAgICAgICAgICAiLAorIiAuLi4uLi4uLi4gICAgICAgICIsCisiIC5YWFhYWFhYLi4gICAgICAgIiwKKyIgLlhYWFhYWFguTy4gICAgICAiLAorIiAuWFhYWFhYWC4uLi4gICAgICIsCisiIC5YWFhYWFhYWFhYLiAgICAgIiwKKyIgLlhYWFhYWFguLi4uICAgICAiLAorIiAuWFhYWFhYLk9PT08uICAgICIsCisiIC5YWFhYWC5PWFhPT08uICAgIiwKKyIgLlhYWFhYLk9YT09PTy4gICAiLAorIiAuWFhYWFguT09PT09PLiAgICIsCisiIC5YWFhYWC5PT09YT08uICAgIiwKKyIgLlhYWFhYWC5PT09PLisgICAiLAorIiAuWFhYWFhYWC4uLi4rLi4gICIsCisiIC5YWFhYWFhYWFhYLisuLi4gIiwKKyIgLi4uLi4uLi4uLi4uKyAuLiAiLAorIiAgICArKysrKysrKysrICAgICIsCisiICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX2ZpbmRfaGVscC54cG0gYi9waXhtYXBzL3RiX2ZpbmRfaGVscC54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3MWUxZAotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfZmluZF9oZWxwLnhwbQpAQCAtMCwwICsxLDI5IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfZmluZF9oZWxwX3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCA1IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJYCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorIm8JcyBpY29uR3JheTIJbSBub25lCWMgI2JkYmRiZCIsCisiTwlzIGljb25Db2xvcjIJbSBub25lCWMgI0ZGRkZGRiIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICIsCisiICAgIC4uLi4uWCAgICAgICAgIiwKKyIgICAuLiAgWC4uWCAgICAgICAiLAorIiAgLi5YICAgLi4uICAgICAgICIsCisiICAuLlggICAuLi4uICAgICAgIiwKKyIgIFguLiAgLm9PT28uICAgICAiLAorIiAgICAgIC5vb29Pb28uICAgICIsCisiICAgICAgLk9PT09vTy4gICAgIiwKKyIgICAgIC4ub09Pb29vLiAgICAiLAorIiAgICAgLi4ub09Pby5YICAgICIsCisiICAgICAgICAuLi4uWC4uICAgIiwKKyIgICAgIC4uWCAgICAgLi4uICAiLAorIiAgICAgLi5YICAgICAgLi4gICIsCisiICAgICAuLlggICAgICAgICAgIiwKKyIgICAgICBYWCAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX2ZpbmRfbmV4dC54cG0gYi9waXhtYXBzL3RiX2ZpbmRfbmV4dC54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzNTk4YQotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfZmluZF9uZXh0LnhwbQpAQCAtMCwwICsxLDMxIEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfZmluZF9uZXh0X3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCA3IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJYCXMgaWNvbkNvbG9yMgltIG5vbmUJYyAjRkZGRkZGIiwKKyJvCXMgaWNvbkdyYXkyCW0gbm9uZQljICNiZGJkYmQiLAorIk8JbSBibGFjawljICM4ODAwMDAiLAorIisJcyBib3R0b21TaGFkb3dDb2xvcgltIGJsYWNrCWMgIzVENjA2OSIsCisiQAlzIGljb25Db2xvcjMJbSBibGFjawljICNGRjAwMDAiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgIiwKKyIgIC4uLi4uLi4uLiAgICAgICAiLAorIiAgLlhYWFhYWFguLiAgICAgICIsCisiICAuWFhYWFhYWC5vLiAgICAgIiwKKyIgIC5YT1hYWFhYLi4uLiAgICAiLAorIiAgK1hPT1hYWFhYWFguICAgICIsCisiT09PT09AT1hYWC4uLi4gICAgIiwKKyJPQEBAQEBAT1gub29vby4gICAiLAorIk9AQEBAQEBAT29YWG9vby4gICIsCisiT0BAQEBAQE8ub1hvb29vLiAgIiwKKyJPT09PT0BPWC5vb29vb28uICAiLAorIiAgK1hPT1hYLm9vb1hvby4gICIsCisiICAuWE9YWFhYLm9vb28uKyAgIiwKKyIgIC5YWFhYWFhYLi4uLisuLiAiLAorIiAgLlhYWFhYWFhYWFguKy4uLiIsCisiICAuLi4uLi4uLi4uLi4rIC4uIiwKKyIgICAgICsrKysrKysrKysgICAiLAorIiAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9maW5kX3ByZXYueHBtIGIvcGl4bWFwcy90Yl9maW5kX3ByZXYueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZmQ1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX2ZpbmRfcHJldi54cG0KQEAgLTAsMCArMSwzMSBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX2ZpbmRfcHJldl94cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMTggMTggNyAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgbm9uZQltIG5vbmUJYyBub25lIiwKKyIuCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisiWAlzIGljb25Db2xvcjIJbSBub25lCWMgI0ZGRkZGRiIsCisibwlzIGljb25HcmF5MgltIG5vbmUJYyAjYmRiZGJkIiwKKyJPCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorIisJbSBibGFjawljICM4ODAwMDAiLAorIkAJcyBpY29uQ29sb3IzCW0gYmxhY2sJYyAjRkYwMDAwIiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICIsCisiICAuLi4uLi4uLi4gICAgICAgIiwKKyIgIC5YWFhYWFhYLi4gICAgICAiLAorIiAgLlhYWFhYWFguby4gICAgICIsCisiICBPWCtYWFhYWC4uLi4gICAgIiwKKyIgIG8rK1hYWFhYWFhYLiAgICAiLAorIiAgK0ArKysrK1guLi4uICAgICIsCisiICtAQEBAQEArLm9vb28uICAgIiwKKyIrQEBAQEBAQC5vWFhvb28uICAiLAorIiArQEBAQEBALm9Yb29vby4gICIsCisiICArQCsrKysub29vb29vLiAgIiwKKyIgIG8rK1hYWC5vb29Yb28uICAiLAorIiAgT1grWFhYWC5vb29vLk8gICIsCisiICAuWFhYWFhYWC4uLi5PLi4gIiwKKyIgIC5YWFhYWFhYWFhYLk8uLi4iLAorIiAgLi4uLi4uLi4uLi4uTyAuLiIsCisiICAgICBPT09PT09PT09PICAgIiwKKyIgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL3BpeG1hcHMvdGJfaGVscC54cG0gYi9waXhtYXBzL3RiX2hlbHAueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NzZlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX2hlbHAueHBtCkBAIC0wLDAgKzEsMjcgQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKiB0Yl9oZWxwX3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCAzIDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJYCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgIC4uLi4uWCAgICAgICIsCisiICAgICAuLiAgWC4uWCAgICAgIiwKKyIgICAgLi5YICAgLi4uICAgICAiLAorIiAgICAuLlggICAuLi4gICAgICIsCisiICAgIFguLiAgWC4uWCAgICAgIiwKKyIgICAgICAgICAuLlggICAgICAiLAorIiAgICAgICAgLi4gICAgICAgICIsCisiICAgICAgIC4uWCAgICAgICAgIiwKKyIgICAgICAgLi5YICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICIsCisiICAgICAgIC4uWCAgICAgICAgIiwKKyIgICAgICAgLi5YICAgICAgICAiLAorIiAgICAgICAuLlggICAgICAgICIsCisiICAgICAgICBYWCAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9qdW1wLnhwbSBiL3BpeG1hcHMvdGJfanVtcC54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjZTVhNQotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfanVtcC54cG0KQEAgLTAsMCArMSwzMCBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX2p1bXBfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDYgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLgltIGJsYWNrCWMgIzg4ODgwMCIsCisiWAlzIGJvdHRvbVNoYWRvd0NvbG9yCW0gYmxhY2sJYyAjNUQ2MDY5IiwKKyJvCXMgaWNvbkNvbG9yNgltIG5vbmUJYyAjRkZGRjAwIiwKKyJPCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisiKwlzIHRvcFNoYWRvd0NvbG9yCW0gbm9uZQljICNEQ0RFRTUiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAuLi4uLi4uLi4uLi4uLiAiLAorIiAgLlhvb29vb29vb29vb29PWCIsCisiIC5Yb29vb29vb29vb29vb09YIiwKKyIuWG8rWCtvb29vb29vb29vT1giLAorIi5vb1hPWG9vb29vb29vb29PWCIsCisiWG9vK1grb29vb29vb29vb09YIiwKKyJYT29vb29vb29vb29vb29vT1giLAorIiBYT29vb29vb29vb29vb29PWCIsCisiICBYT09PT09PT09PT09PT09YIiwKKyIgICBYWFhYWFhYWFhYWFhYWFgiLAorIiAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9sb2FkX3Nlc3Npb24ueHBtIGIvcGl4bWFwcy90Yl9sb2FkX3Nlc3Npb24ueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlM2U5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX2xvYWRfc2Vzc2lvbi54cG0KQEAgLTAsMCArMSwzMyBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX2xvYWRfc2Vzc2lvbl94cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMTggMTggOSAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgbm9uZQltIG5vbmUJYyBub25lIiwKKyIuCW0gYmxhY2sJYyAjODgwMDAwIiwKKyJYCXMgaWNvbkNvbG9yMwltIGJsYWNrCWMgI0ZGMDAwMCIsCisibwlzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorIk8JcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIisJcyBpY29uR3JheTIJbSBub25lCWMgI2JkYmRiZCIsCisiQAlzIGljb25HcmF5NQltIGJsYWNrCWMgIzczNzM3MyIsCisiIwlzIGljb25HcmF5NAltIG5vbmUJYyAjOTQ5NDk0IiwKKyIkCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgICAuLiAgICAgICAgIiwKKyIgICAgICAgLlhYLiAgICAgICAiLAorIiAgICAgIC5YWFhYLiAgICAgICIsCisiICAgICAuLi5YWC4uLiAgICAgIiwKKyIgICAgICAgLlhYLiAgICAgICAiLAorIiAgICAgICAuWFguICAgICAgICIsCisiICAgICAgIC5YWC4gICAgICAgIiwKKyIgICAgICAgLi4uLiAgICAgICAiLAorIiAgIG9vb29vb29vb29vb28gICIsCisiICBvT09PT09PT09PTysrQG8gIiwKKyIgb09PT09PT09PT09PTyNAbyAiLAorIiBvTysrKysrKysrK1hYI0BvICIsCisiIG9PKysrKysrKysrKysjQG8gIiwKKyIgb09vb29vb29vb29vKyNAbyQiLAorIiBvT09PT09PT09PT08rI0BvJCIsCisiIG8rIyMjIyMjIyMjIyNAbyQgIiwKKyIgIG9vb29vb29vb29vb28kICAiLAorIiAgICAkJCQkJCQkJCQkJCAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9tYWNyby54cG0gYi9waXhtYXBzL3RiX21hY3JvLnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTdkMTFhCi0tLSAvZGV2L251bGwKKysrIGIvcGl4bWFwcy90Yl9tYWNyby54cG0KQEAgLTAsMCArMSwyOCBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX21hY3JvX3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCA0IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJYCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorIm8JcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorLyogcGl4ZWxzICovCisiICAgICAgIC4uWCAgICAgICAgIiwKKyIgICAgICAub28uWCAgICAgICAiLAorIiAgICAgLm9vb28uWCAgICAgICIsCisiICAgICAub29vby5YICAgICAgIiwKKyIgICAgICAub28uWFggICAgICAiLAorIiAgICAgICAuLlhYICAgICAgICIsCisiICAgLi4uLi5vLlggICAgICAgIiwKKyIgIC5vb29vb29vLlggICAgICAiLAorIiAgLm9vb29vb29vLlggICAgICIsCisiICAgLi4uLi5vb28uWCAgICAgIiwKKyIgICAgICAuLm9vby5YICAgICAiLAorIiAgICAgLm9vb29vLlggICAgICIsCisiICAgIC5vb29vb29vLlggICAgIiwKKyIgICAub29vLi4ub29vLlggICAiLAorIiAgLm9vby5YWC4ub29vLlggICIsCisiICAub28uWFggIFgub28uWCAgIiwKKyIgICAuLi5YICAgIFguLi5YICAiLAorIiAgICBYWCAgICAgICBYWFggICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9tYWtlLnhwbSBiL3BpeG1hcHMvdGJfbWFrZS54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4MTJlNgotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfbWFrZS54cG0KQEAgLTAsMCArMSwyOCBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX21ha2VfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDQgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorIlgJcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIm8JcyBib3R0b21TaGFkb3dDb2xvcgltIGJsYWNrCWMgIzVENjA2OSIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAuLiAuLi4uLiAgICAgICIsCisiICAgLlhYLlhYWFhYLiAgICAgIiwKKyIgICAuWFhYWFhYWFhYLiAgICAiLAorIiAgIC5Yby5YWFhYLi5YLiAgICIsCisiICAgIC4uIC4uLi5vIC4uICAgIiwKKyIgICAgICAgIC4uLiAgIC4gICAiLAorIiAgICAgICAgLi4ubyAgICAgICIsCisiICAgICAgICAuLi5vICAgICAgIiwKKyIgICAgICAgIC4uLm8gICAgICAiLAorIiAgICAgICAgLi4ubyAgICAgICIsCisiICAgICAgICAuLi5vICAgICAgIiwKKyIgICAgICAgIC4uLm8gICAgICAiLAorIiAgICAgICAgLi4ubyAgICAgICIsCisiICAgICAgICAuLi5vICAgICAgIiwKKyIgICAgICAgIC4uLm8gICAgICAiLAorIiAgICAgICAgIG9vbyAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX21heGltaXplLnhwbSBiL3BpeG1hcHMvdGJfbWF4aW1pemUueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjAxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX21heGltaXplLnhwbQpAQCAtMCwwICsxLDI5IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfbWF4aW1pemVfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDUgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIHRvcFNoYWRvd0NvbG9yCW0gbm9uZQljICNEQ0RFRTUiLAorIlgJcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJvCXMgaWNvbkNvbG9yMgltIG5vbmUJYyAjRkZGRkZGIiwKKyJPCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgIiwKKyIgIC5YWFhYWFhYWFhYWCAgICAiLAorIiAgLlguLi4uWC4uLm9YICAgICIsCisiICAuWC4ub1hYWC4ub1hPICAgIiwKKyIgIC5YLm9YWFhYWC5vWE8gICAiLAorIiAgLlguLi4uLi4uLm9YTyAgICIsCisiICAuWC4uLi4uLi4ub1hPICAgIiwKKyIgIC5YLi4uLi4uLi5vWE8gICAiLAorIiAgLlguLi4uLi4uLm9YTyAgICIsCisiICAuWC4uLi4uLi4ub1hPICAgIiwKKyIgIC5YLi4uLi4uLi5vWE8gICAiLAorIiAgLlguLi4uLi4uLm9YTyAgICIsCisiICAuWC4uWFhYWFgub1hPICAgIiwKKyIgIC5YLi4uWFhYLi5vWE8gICAiLAorIiAgLlhvb29vWG9vb29YTyAgICIsCisiICAuWFhYWFhYWFhYWFhPICAgIiwKKyIgICAgIE9PT09PT09PT08gICAiLAorIiAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9tYXh3aWR0aC54cG0gYi9waXhtYXBzL3RiX21heHdpZHRoLnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2U4OTFiCi0tLSAvZGV2L251bGwKKysrIGIvcGl4bWFwcy90Yl9tYXh3aWR0aC54cG0KQEAgLTAsMCArMSwyOSBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX21heHdpZHRoX3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCA1IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyB0b3BTaGFkb3dDb2xvcgltIG5vbmUJYyAjRENERUU1IiwKKyJYCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisibwlzIGljb25Db2xvcjIJbSBub25lCWMgI0ZGRkZGRiIsCisiTwlzIGJvdHRvbVNoYWRvd0NvbG9yCW0gYmxhY2sJYyAjNUQ2MDY5IiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICIsCisiLlhYWFhYWFhYWFhYWFhYWFggIiwKKyIuWC4uLi4uLi4uLi4uLi5vWCAiLAorIi5YLi5YLi4uLi4uLi5YLm9YTyIsCisiLlguWFguLi4uLi4uLlhYb1hPIiwKKyIuWFhYWC4uLi4uLi4uWFhYWE8iLAorIi5YLlhYLi4uLi4uLi5YWG9YTyIsCisiLlguLlguLi4uLi4uLlgub1hPIiwKKyIuWG9vb29vb29vb29vb29vWE8iLAorIi5YWFhYWFhYWFhYWFhYWFhYTyIsCisiICAgT09PT09PT09PT09PT09PIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL3BpeG1hcHMvdGJfbWluaW1pemUueHBtIGIvcGl4bWFwcy90Yl9taW5pbWl6ZS54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmOTBhOAotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfbWluaW1pemUueHBtCkBAIC0wLDAgKzEsMjkgQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKiB0Yl9taW5pbWl6ZV94cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMTggMTggNSAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgbm9uZQltIG5vbmUJYyBub25lIiwKKyIuCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisiWAlzIHRvcFNoYWRvd0NvbG9yCW0gbm9uZQljICNEQ0RFRTUiLAorIm8JcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIk8JcyBib3R0b21TaGFkb3dDb2xvcgltIGJsYWNrCWMgIzVENjA2OSIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgIC4uLi4uICAgICAgICIsCisiICAgICAgIC4uLiAgICAgICAgIiwKKyIgICAgICAgIC4gICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICIsCisiIFguLi4uLi4uLi4uLi4uICAgIiwKKyIgWC5YWFhYWFhYWFhYby4gICAiLAorIiBYLlhYb1hYWFhYWFhvLk8gICIsCisiIFguWFhYWFhYWFhYWG8uTyAgIiwKKyIgWC5YWFhYWFhYWFhvby5PICAiLAorIiBYLm9vb29vb29vb29vLk8gICIsCisiIFguLi4uLi4uLi4uLi4uTyAgIiwKKyIgICAgT09PT09PT09PT09PICAiLAorIiAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAuICAgICAgICAgIiwKKyIgICAgICAgLi4uICAgICAgICAiLAorIiAgICAgIC4uLi4uICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX21pbndpZHRoLnhwbSBiL3BpeG1hcHMvdGJfbWlud2lkdGgueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDQ5MjgKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX21pbndpZHRoLnhwbQpAQCAtMCwwICsxLDI5IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfbWlud2lkdGhfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDUgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIHRvcFNoYWRvd0NvbG9yCW0gbm9uZQljICNEQ0RFRTUiLAorIlgJcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJvCXMgaWNvbkNvbG9yMgltIG5vbmUJYyAjRkZGRkZGIiwKKyJPCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgLlhYWFhYWCAgICAgICIsCisiICAgICAuWC4uLm9YICAgICAgIiwKKyIgICAgIC5YLi4ub1ggICAgICAiLAorIiAgICAgLlguLi5vWCAgICAgICIsCisiIFggICAuWC5vLm9YTyAgIFggIiwKKyIgWFggIC5YLi4ub1hPICBYWCAiLAorIiBYWFggLlguLi5vWE8gWFhYICIsCisiIFhYICAuWC4uLm9YTyAgWFggIiwKKyIgWCAgIC5YLi4ub1hPICAgWCAiLAorIiAgICAgLlguLi5vWE8gICAgICIsCisiICAgICAuWC4ub29YTyAgICAgIiwKKyIgICAgIC5Yb29vb1hPICAgICAiLAorIiAgICAgLlhYWFhYWE8gICAgICIsCisiICAgICAgICBPT09PTyAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9uZXcueHBtIGIvcGl4bWFwcy90Yl9uZXcueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOGI2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX25ldy54cG0KQEAgLTAsMCArMSwyOSBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX25ld194cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMTggMTggNSAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgbm9uZQltIG5vbmUJYyBub25lIiwKKyIuCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorIlgJcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIm8JcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJPCXMgdG9wU2hhZG93Q29sb3IJbSBub25lCWMgI0RDREVFNSIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAuICAuWC4gICAiLAorIiAgICAgICAgIFguIC5YLiBYLiIsCisiICBvb29vb29vLlgub1hvWC5YIiwKKyIgIG9PT09PT09Pb1hYWFhvLi4iLAorIiAgb09PT09PT09YWFhYWFhYWCIsCisiICBvT09YT09PT29Yb1hYby4uIiwKKyIgIG9PWFhPT08uT1hvWG9YICAiLAorIiAgb09PT09PLk9PWG9YLi5YICIsCisiICBvT09PT09PT09Yb1guIC5YIiwKKyIgIG9PT09PT09PT1hvLiAgIC4iLAorIiAgb09PT09PT09PWG8uICAgICIsCisiICBvT09PT09PT09Yby4gICAgIiwKKyIgIG9PT09PT09PT1hvLiAgICAiLAorIiAgb09PT09PT09PWG8uICAgICIsCisiICBvT09PT09PT09Yby4gICAgIiwKKyIgIG9YWFhYWFhYWFhvLiAgICAiLAorIiAgb29vb29vb29vb28uICAgICIsCisiICAgIC4uLi4uLi4uLi4gICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX25ld19zZXNzaW9uLnhwbSBiL3BpeG1hcHMvdGJfbmV3X3Nlc3Npb24ueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MDE4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX25ld19zZXNzaW9uLnhwbQpAQCAtMCwwICsxLDMyIEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfbmV3X3Nlc3Npb25feHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDggMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIGJvdHRvbVNoYWRvd0NvbG9yCW0gYmxhY2sJYyAjNUQ2MDY5IiwKKyJYCXMgaWNvbkNvbG9yMgltIG5vbmUJYyAjRkZGRkZGIiwKKyJvCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisiTwlzIGljb25HcmF5MgltIG5vbmUJYyAjYmRiZGJkIiwKKyIrCXMgaWNvbkdyYXk1CW0gYmxhY2sJYyAjNzM3MzczIiwKKyJACXMgaWNvbkdyYXk0CW0gbm9uZQljICM5NDk0OTQiLAorIiMJcyBpY29uQ29sb3IzCW0gYmxhY2sJYyAjRkYwMDAwIiwKKy8qIHBpeGVscyAqLworIiAgICAuICAuWC4gIC4gICAgICIsCisiICAgICAuIG9YbyAuICAgICAgIiwKKyIgICAgLi5vWFhYby4uICAgICAiLAorIiAgICBYWFhYWFhYWFggICAgICIsCisiICAgIC4ub1hYWG8uLiAgICAgIiwKKyIgICAgIC4gb1hvIC4gICAgICAiLAorIiAgICAuICAuWC4gIC4gICAgICIsCisiICAgICAgICAuICAgICAgICAgIiwKKyIgICBvb29vb29vb29vb29vICAiLAorIiAgb1hYWFhYWFhYWFhPTytvICIsCisiIG9YWFhYWFhYWFhYWFhAK28gIiwKKyIgb1hPT09PT09PT08jI0ArbyAiLAorIiBvWE9PT09PT09PT09PQCtvICIsCisiIG9Yb29vb29vb29vb09AK28uIiwKKyIgb1hYWFhYWFhYWFhYT0Arby4iLAorIiBvT0BAQEBAQEBAQEBAK28uICIsCisiICBvb29vb29vb29vb29vLiAgIiwKKyIgICAgLi4uLi4uLi4uLi4gICAifTsKZGlmZiAtLWdpdCBhL3BpeG1hcHMvdGJfb3Blbi54cG0gYi9waXhtYXBzL3RiX29wZW4ueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MWE2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX29wZW4ueHBtCkBAIC0wLDAgKzEsMzEgQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKiB0Yl9vcGVuX3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCA3IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJYCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorIm8JcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIk8JcyBpY29uR3JheTEJbSBub25lCWMgI2RlZGVkZSIsCisiKwlzIGljb25HcmF5NQltIGJsYWNrCWMgIzczNzM3MyIsCisiQAlzIGljb25HcmF5MwltIG5vbmUJYyAjYWRhZGFkIiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICIsCisiICAgIC4uLi4uLi4uLlggICAgIiwKKyIgICAgLm9vb29vby5vLlggICAiLAorIiAgICAub29vb29vLm9vLlggICIsCisiICAgIC5vb29vb28uLi4uWCAgIiwKKyIgIC4uLm9vb29vb29vby4uLiAiLAorIiAgLk8uT09PT09PT09vLisuICIsCisiLi4uLi4uLi4uLi4uLk8uKy5YIiwKKyIub29vb29vb29vb29vLi4rLlgiLAorIiAub0BAQEBAQEBAQEArLisuWCIsCisiIC5vQEBAQEBAQEBAQEAuKy5YIiwKKyIgIC5vQEBAQEBAQEBAQCsuLlgiLAorIiAgLm9AQEBAQEBAQEBAQC4uWCIsCisiICAgLm8rKysrKysrKysrKy5YIiwKKyIgICAuLi4uLi4uLi4uLi4uLlgiLAorIiAgICAgWFhYWFhYWFhYWFhYWCIsCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL3BpeG1hcHMvdGJfcGFzdGUueHBtIGIvcGl4bWFwcy90Yl9wYXN0ZS54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlYTJiOQotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfcGFzdGUueHBtCkBAIC0wLDAgKzEsMzEgQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKiB0Yl9wYXN0ZV94cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMTggMTggNyAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgbm9uZQltIG5vbmUJYyBub25lIiwKKyIuCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisiWAlzIGljb25HcmF5NQltIGJsYWNrCWMgIzczNzM3MyIsCisibwlzIGljb25HcmF5MgltIG5vbmUJYyAjYmRiZGJkIiwKKyJPCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorIisJcyBpY29uR3JheTQJbSBub25lCWMgIzk0OTQ5NCIsCisiQAlzIGljb25Db2xvcjIJbSBub25lCWMgI0ZGRkZGRiIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgLi4uLiAgICAgICAgICIsCisiICAgICBYWFhYICAgICAgICAgIiwKKyIgIC4uLm9vb28uLi5PICAgICAiLAorIiAubysuLi4uLi4rKy5PICAgICIsCisiIC5vKysrKysrKysrLk8gICAgIiwKKyIgLm8rKysuLi4uLi4uLi4uICAiLAorIiAubysrKy5AQEBAQEBAQC4gICIsCisiIC5vKysrLkAuLi4uLi5ALk8gIiwKKyIgLm8rKysuQEBAQEBAQEAuTyAiLAorIiAubysrKy5AQEBAQEBAQC5PICIsCisiIC5vKysrLkAuLi4uLi5ALk8gIiwKKyIgLm8rKysuQEBAQEBAQEAuTyAiLAorIiAgLi4uLi5ALi5AQEBAQC5PICIsCisiICAgT09PLkBAQEBAQEBALk8gIiwKKyIgICAgICAuLi4uLi4uLi4uTyAiLAorIiAgICAgICAgT09PT09PT09PICIsCisiICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX3ByaW50LnhwbSBiL3BpeG1hcHMvdGJfcHJpbnQueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYTQ3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX3ByaW50LnhwbQpAQCAtMCwwICsxLDMxIEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfcHJpbnRfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDcgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorIlgJcyBpY29uQ29sb3IyCW0gbm9uZSAJYyAjRkZGRkZGIiwKKyJvCXMgaWNvbkdyYXkyCW0gbm9uZSAJYyAjYmRiZGJkIiwKKyJPCXMgaWNvbkdyYXk1CW0gYmxhY2sJYyAjNzM3MzczIiwKKyIrCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorIkAJYyAjRkYxMTQ0IiwKKy8qIHBpeGVscyAqLworIiAgIC4uLi4uLi4gICAgICAgICIsCisiICAgLlhYWFhYLi4gICAgICAgIiwKKyIgICAuWC4uLlguWC4gICAgICAiLAorIiAgIC5YWFhYWC4uLi4gICAgICIsCisiICAgLlguLi5YWFhYLk8gICAgIiwKKyIgICAuWFhYWFhYWFguTyAgICAiLAorIiAgIC5YLi4uLi5YWC5PICAgICIsCisiICAgLlhYWFhYWFhYLk8gICAgIiwKKyIuLi4uLi4uLi4uLi4uLi4uICAiLAorIi5YWFhYWFhYWFhYWFhYTy4gICIsCisiLlhAQG9vb29vb29vb29PLk8gIiwKKyIuWG9vb29vb29vb29vb08uTyAiLAorIi5Yb29vb29vb29vb29vTy5PICIsCisiLi4uLi4uLi4uLi4uLi4uLk8gIiwKKyIgLk9PT09PT09PT09PTy5PTyAiLAorIiAuLi4uLi4uLi4uLi4uLk8gICIsCisiICAgT09PT09PT09PT09PTyAgIiwKKyIgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL3BpeG1hcHMvdGJfcmVkby54cG0gYi9waXhtYXBzL3RiX3JlZG8ueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYzEwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX3JlZG8ueHBtCkBAIC0wLDAgKzEsMjggQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKiB0Yl9yZWRvX3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCA0IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJYCXMgaWNvbkNvbG9yMgltIG5vbmUJYyAjRkZGRkZGIiwKKyJvCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgIC4uLi4uICAuLiAgICIsCisiICAgIC4uWFhYWFguLlgubyAgIiwKKyIgICAuWFhYWFhYWFhYWC5vICAiLAorIiAgIC5YWC4uLi5YWFhYLm8gICIsCisiICAuWFgub29vLlhYWFgubyAgIiwKKyIgIC5YWC5vIC5YWFhYWC5vICAiLAorIiAgLlhYLm8gLi4uLi4uLm8gICIsCisiICAuWFgubyAgb29vLm9vbyAgIiwKKyIgIC5YWC5vICAgIC5YLiAgICAiLAorIiAgIC5YWC4uLi4uWFgubyAgICIsCisiICAgLlhYWFhYWFhYLm9vICAgIiwKKyIgICAgLi5YWFhYWC5vbyAgICAiLAorIiAgICAgIC4uLi4ub28gICAgICIsCisiICAgICAgIG9vb29vICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9yZXBsYWNlLnhwbSBiL3BpeG1hcHMvdGJfcmVwbGFjZS54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5Y2Y4ZQotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfcmVwbGFjZS54cG0KQEAgLTAsMCArMSwzMyBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX3JlcGxhY2VfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDkgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorIlgJcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIm8JcyBib3R0b21TaGFkb3dDb2xvcgltIGJsYWNrCWMgIzVENjA2OSIsCisiKwlzIGljb25HcmF5NAltIG5vbmUJYyAjOTQ5NDk0IiwKKyJACXMgaWNvbkNvbG9yMwltIGJsYWNrCWMgI0ZGMDAwMCIsCisiIwlzIGljb25HcmF5MwltIG5vbmUJYyAjYWRhZGFkIiwKKyIkCXMgaWNvbkdyYXkxCW0gbm9uZQljICNkZWRlZGUiLAorIiUJcyBpY29uR3JheTcJbSBibGFjawljICM0MjQyNDIiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgIiwKKyIgIC4uLi4uLi4uLiAgICAgICAiLAorIiAgLlhYWFhYWFguLiAgICAgICIsCisiICAuWC4uWFhYWC5YLiAgICAgIiwKKyIgIG9YLi5vWFhYLi4uLiAgICAiLAorIiAgby5YLi5YWFhYWFguICAgICIsCisiICArLi4uLm9YWFhYWC5vICAgIiwKKyIgIC5YWFguLlhYWFhYLm8gICAiLAorIiAuLm9Yby4uLlhYWFgubyAgICIsCisiICArWFhYWFhYWFhYWCtvICAgIiwKKyIgIC5YQEBYWEBYWFguLi4uICAiLAorIiAgLlhvQFhYQEBYWC4jJC4uICIsCisiICAuWFhvQEBAQEBYLi4uLiAgIiwKKyIgIC5YWFhYWEBAWFguIyQuLiAiLAorIiAgLlhYWFhYQFhYWC4jJC4uICIsCisiICAuLi4uLi5vLi4lLi4uLiAgIiwKKyIgICAgIG9vb29vb29vbyAgICAiLAorIiAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9zYXZlLnhwbSBiL3BpeG1hcHMvdGJfc2F2ZS54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzYTg0MQotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfc2F2ZS54cG0KQEAgLTAsMCArMSwyOSBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX3NhdmVfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDUgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorIlgJcyBpY29uR3JheTIJbSBub25lCWMgI2JkYmRiZCIsCisibwlzIGljb25Db2xvcjIJbSBub25lCWMgI0ZGRkZGRiIsCisiTwlzIGJvdHRvbVNoYWRvd0NvbG9yCW0gYmxhY2sJYyAjNUQ2MDY5IiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICIsCisiIC4uLi4uLi4uLi4uLi4uICAgIiwKKyIgLlgub29vb29vb28uby4gICAiLAorIiAuWC5vb29vb29vby4uLk8gICIsCisiIC5YLm9vb29vb29vLlguTyAgIiwKKyIgLlgub29vb29vb28uWC5PICAiLAorIiAuWC5vb29vb29vby5YLk8gICIsCisiIC5YLm9vb29vb29vLlguTyAgIiwKKyIgLlhYLi4uLi4uLi5YWC5PICAiLAorIiAuWFhYWFhYWFhYWFhYLk8gICIsCisiIC5YWC4uLi4uLi4uLlguTyAgIiwKKyIgLlhYLi4uLi4ub28uWC5PICAiLAorIiAuWFguLi4uLi5vby5YLk8gICIsCisiIC5YWC4uLi4uLm9vLlguTyAgIiwKKyIgIC4uLi4uLi4uLi4uLi5PICAiLAorIiAgIE9PT09PT09PT09PT08gICIsCisiICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL3BpeG1hcHMvdGJfc2F2ZV9hbGwueHBtIGIvcGl4bWFwcy90Yl9zYXZlX2FsbC54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiNDEzMAotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfc2F2ZV9hbGwueHBtCkBAIC0wLDAgKzEsMjkgQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKiB0Yl9zYXZlX2FsbF94cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMTggMTggNSAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisiLglzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiWAlzIGljb25HcmF5MgltIG5vbmUJYyAjYmRiZGJkIiwKKyJvCXMgaWNvbkNvbG9yMgltIG5vbmUJYyAjRkZGRkZGIiwKKyJPCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAuLi4uIiwKKyIgWCBvb29vb29vbyBvIC4uLi4iLAorIiBYIG9vb29vb29vICAgTy4uLiIsCisiIFggICAgICAgICAgICAgICAuIiwKKyIgWCAgWCBvb29vb29vbyBvIC4iLAorIiBYICBYIG9vb29vb29vICAgTyIsCisiIFggIFggb29vb29vb28gWCBPIiwKKyIgWFggWCBvb29vb29vbyBYIE8iLAorIiBYWCBYIG9vb29vb29vIFggTyIsCisiIFhYIFggb29vb29vb28gWCBPIiwKKyIgWFggWFggICAgICAgIFhYIE8iLAorIiBYWCBYWFhYWFhYWFhYWFggTyIsCisiIFhYIFhYICAgICAgICAgWCBPIiwKKyIuICAgWFggICAgICBvbyBYIE8iLAorIi4uTyBYWCAgICAgIG9vIFggTyIsCisiLi4uIFhYICAgICAgb28gWCBPIiwKKyIuLi4uICAgICAgICAgICAgIE8iLAorIi4uLi4uT09PT09PT09PT09PLiJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9zYXZlX3Nlc3Npb24ueHBtIGIvcGl4bWFwcy90Yl9zYXZlX3Nlc3Npb24ueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYWNkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX3NhdmVfc2Vzc2lvbi54cG0KQEAgLTAsMCArMSwzMyBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX3NhdmVfc2Vzc2lvbl94cG1bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNwcCBbeF9ob3QgeV9ob3RdICovCisiMTggMTggOSAxIDAgMCIsCisvKiBjb2xvcnMgKi8KKyIgCXMgbm9uZQltIG5vbmUJYyBub25lIiwKKyIuCW0gYmxhY2sJYyAjODgwMDAwIiwKKyJYCXMgaWNvbkNvbG9yMwltIGJsYWNrCWMgI0ZGMDAwMCIsCisibwlzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorIk8JcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIisJcyBpY29uR3JheTIJbSBub25lCWMgI2JkYmRiZCIsCisiQAlzIGljb25HcmF5NQltIGJsYWNrCWMgIzczNzM3MyIsCisiIwlzIGljb25HcmF5NAltIG5vbmUJYyAjOTQ5NDk0IiwKKyIkCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgIC4uLi4gICAgICAgIiwKKyIgICAgICAgLlhYLiAgICAgICAiLAorIiAgICAgICAuWFguICAgICAgICIsCisiICAgICAgIC5YWC4gICAgICAgIiwKKyIgICAgIC4uLlhYLi4uICAgICAiLAorIiAgICAgIC5YWFhYLiAgICAgICIsCisiICAgICAgIC5YWC4gICAgICAgIiwKKyIgICAgICAgIC4uICAgICAgICAiLAorIiAgIG9vb29vb29vb29vb28gICIsCisiICBvT09PT09PT09PTysrQG8gIiwKKyIgb09PT09PT09PT09PTyNAbyAiLAorIiBvTysrKysrKysrK1hYI0BvICIsCisiIG9PKysrKysrKysrKysjQG8gIiwKKyIgb09vb29vb29vb29vKyNAbyQiLAorIiBvT09PT09PT09PT08rI0BvJCIsCisiIG8rIyMjIyMjIyMjIyNAbyQgIiwKKyIgIG9vb29vb29vb29vb28kICAiLAorIiAgICAkJCQkJCQkJCQkJCAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl9zaGVsbC54cG0gYi9waXhtYXBzL3RiX3NoZWxsLnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWM2YmRlCi0tLSAvZGV2L251bGwKKysrIGIvcGl4bWFwcy90Yl9zaGVsbC54cG0KQEAgLTAsMCArMSwzMCBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX3NoZWxsX3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCA2IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJYCXMgaWNvbkdyYXk2CW0gYmxhY2sJYyAjNjM2MzYzIiwKKyJvCXMgaWNvbkdyYXkyCW0gbm9uZQljICNiZGJkYmQiLAorIk8JcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIisJcyBib3R0b21TaGFkb3dDb2xvcgltIGJsYWNrCWMgIzVENjA2OSIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgLi4uIC4uLiAgICAgICIsCisiICAgIC5Yb1hYWG9YLiAgICAgIiwKKyIgICAub09vWC5Yb09vLiAgICAiLAorIiAgIC5Yb09vWG9Pb1guICAgICIsCisiICAuWG9vb28ub29vb1guICAgIiwKKyIgLlhvLlhPb1hvT1gub1guICAiLAorIiAub29vWE9vLm9PWG9vby4gICIsCisiIC5vT28uWE9YT1gub09vLisgIiwKKyIgLlhvT28uby5vLm9Pb1guKyAiLAorIiAgLlhvb1hvb29Yb09YLisgICIsCisiICAgLlhvb29Pb29vWC4rICAgIiwKKyIgICAgLm9vT09Pb28uKyAgICAiLAorIiAgICAuLlhvb29YLi4rICAgICIsCisiICAgLlhvb29vb29vWC4rICAgIiwKKyIgICAuLi4uLi4uLi4uLisgICAiLAorIiAgICAgKysrKysrKysrKyAgICIsCisiICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX3NwbGl0LnhwbSBiL3BpeG1hcHMvdGJfc3BsaXQueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NDBkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9waXhtYXBzL3RiX3NwbGl0LnhwbQpAQCAtMCwwICsxLDI5IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfc3BsaXRfeHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDUgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIHRvcFNoYWRvd0NvbG9yCW0gbm9uZQljICNEQ0RFRTUiLAorIlgJcyBpY29uQ29sb3IxCW0gYmxhY2sJYyAjMDAwMDAwIiwKKyJvCXMgaWNvbkNvbG9yMgltIG5vbmUJYyAjRkZGRkZGIiwKKyJPCXMgYm90dG9tU2hhZG93Q29sb3IJbSBibGFjawljICM1RDYwNjkiLAorLyogcGl4ZWxzICovCisiICAgICAgICAgICAgICAgICAgIiwKKyIgIC5YWFhYWFhYWFhYWCAgICAiLAorIiAgLlguLi4uLi4uLm9YICAgICIsCisiICAuWC4uby4uLi4ub1hPICAgIiwKKyIgIC5YLm9vLi4uLi5vWE8gICAiLAorIiAgLlguLi4uLi4uLm9YTyAgICIsCisiICAuWC4uLi4uLi4ub1hPICAgIiwKKyIgIC5Yb29vb29vb29vWE8gICAiLAorIiAgLlhYWFhYWFhYWFhYTyAgICIsCisiICAuWE9PT09PT09Pb1hPICAgIiwKKyIgIC5YLi5vLi4uLi5vWE8gICAiLAorIiAgLlgub28uLi4uLm9YTyAgICIsCisiICAuWC4uLi4uLi4ub1hPICAgIiwKKyIgIC5YLi4uLi4uLi5vWE8gICAiLAorIiAgLlhvb29vb29vb29YTyAgICIsCisiICAuWFhYWFhYWFhYWFhPICAgIiwKKyIgICAgIE9PT09PT09PT08gICAiLAorIiAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcGl4bWFwcy90Yl91bmRvLnhwbSBiL3BpeG1hcHMvdGJfdW5kby54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0ZWNhYwotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfdW5kby54cG0KQEAgLTAsMCArMSwyOCBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIHRiX3VuZG9feHBtW10gPSB7CisvKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjcHAgW3hfaG90IHlfaG90XSAqLworIjE4IDE4IDQgMSAwIDAiLAorLyogY29sb3JzICovCisiIAlzIG5vbmUJbSBub25lCWMgbm9uZSIsCisiLglzIGljb25Db2xvcjEJbSBibGFjawljICMwMDAwMDAiLAorIlgJcyBpY29uQ29sb3IyCW0gbm9uZQljICNGRkZGRkYiLAorIm8JcyBib3R0b21TaGFkb3dDb2xvcgltIGJsYWNrCWMgIzVENjA2OSIsCisvKiBwaXhlbHMgKi8KKyIgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICIsCisiICAuLiAgLi4uLi4gICAgICAgIiwKKyIgIC5YLi5YWFhYWC4uICAgICAiLAorIiAgLlhYWFhYWFhYWFguICAgICIsCisiICAuWFhYWC4uLi5YWC5vICAgIiwKKyIgIC5YWFhYLm9vby5YWC4gICAiLAorIiAgLlhYWFhYLiAgLlhYLm8gICIsCisiICAuLi4uLi4ubyAuWFgubyAgIiwKKyIgICBvLm9vb29vIC5YWC5vICAiLAorIiAgIC5YLiAgICAgLlhYLm8gICIsCisiICAgLlhYLi4uLi5YWC5vbyAgIiwKKyIgICAgLlhYWFhYWFhYLm8gICAiLAorIiAgICAgLlhYWFhYLi5vbyAgICIsCisiICAgICAgLi4uLi5vb28gICAgIiwKKyIgICAgICAgb29vb28gICAgICAiLAorIiAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9waXhtYXBzL3RiX3ZzcGxpdC54cG0gYi9waXhtYXBzL3RiX3ZzcGxpdC54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3NGFmYwotLS0gL2Rldi9udWxsCisrKyBiL3BpeG1hcHMvdGJfdnNwbGl0LnhwbQpAQCAtMCwwICsxLDI5IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdGJfdnNwbGl0X3hwbVtdID0geworLyogd2lkdGggaGVpZ2h0IG5jb2xvcnMgY3BwIFt4X2hvdCB5X2hvdF0gKi8KKyIxOCAxOCA1IDEgMCAwIiwKKy8qIGNvbG9ycyAqLworIiAJcyBub25lCW0gbm9uZQljIG5vbmUiLAorIi4JcyB0b3BTaGFkb3dDb2xvcgltIG5vbmUJYyAjRENERUU1IiwKKyJYCXMgaWNvbkNvbG9yMQltIGJsYWNrCWMgIzAwMDAwMCIsCisibwlzIGljb25Db2xvcjIJbSBub25lCWMgI0ZGRkZGRiIsCisiTwlzIGJvdHRvbVNoYWRvd0NvbG9yCW0gYmxhY2sJYyAjNUQ2MDY5IiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICIsCisiIC5YWFhYWFhYWFhYWFhYWCAgIiwKKyIgLlguLi4ub1hPLi4uLm9YICAiLAorIiAuWC4uby5vWE8uLm8ub1hPICIsCisiIC5YLm9vLm9YTy5vby5vWE8gIiwKKyIgLlguLi4ub1hPLi4uLm9YTyAiLAorIiAuWC4uLi5vWE8uLi4ub1hPICIsCisiIC5YLi4uLm9YTy4uLi5vWE8gIiwKKyIgLlguLi4ub1hPLi4uLm9YTyAiLAorIiAuWC4uLi5vWE8uLi4ub1hPICIsCisiIC5YLi4uLm9YTy4uLi5vWE8gIiwKKyIgLlguLi4ub1hPLi4uLm9YTyAiLAorIiAuWC4uLi5vWE8uLi4ub1hPICIsCisiIC5YLi4uLm9YTy4uLi5vWE8gIiwKKyIgLlhvb29vb1hvb29vb29YTyAiLAorIiAuWFhYWFhYWFhYWFhYWFhPICIsCisiICAgIE9PT09PT09PT09PT08gIiwKKyIgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL3J1bnRpbWUuaW5mbyBiL3J1bnRpbWUuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZmYwNDY4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvYnVncmVwb3J0LnZpbSBiL3J1bnRpbWUvYnVncmVwb3J0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmMzNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9idWdyZXBvcnQudmltCkBAIC0wLDAgKzEsODYgQEAKKzoiIFVzZSB0aGlzIHNjcmlwdCB0byBjcmVhdGUgdGhlIGZpbGUgImJ1Z3JlcG9ydC50eHQiLCB3aGljaCBjb250YWlucworOiIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudmlyb25tZW50IG9mIGEgcG9zc2libGUgYnVnIGluIFZpbS4KKzoiCis6IiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorOiIgTGFzdCBjaGFuZ2U6CTIwMDEgRmViIDAyCis6IgorOiIgVG8gdXNlIGluc2lkZSBWaW06Cis6Igk6c28gJFZJTVJVTlRJTUUvYnVncmVwb3J0LnZpbQorOiIgT3IsIGZyb20gdGhlIGNvbW1hbmQgbGluZToKKzoiCXZpbSAtcyAkVklNUlVOVElNRS9idWdyZXBvcnQudmltCis6IgorOiIgVGhlICJpZiAxIiBsaW5lcyBhcmUgdG8gYXZvaWQgZXJyb3IgbWVzc2FnZXMgd2hlbiBleHByZXNzaW9uIGV2YWx1YXRpb24gaXMKKzoiIG5vdCBjb21waWxlZCBpbi4KKzoiCis6aWYgMQorOiAgbGV0IG1vcmVfc2F2ZSA9ICZtb3JlCis6ZW5kaWYKKzpzZXQgbm9tb3JlCis6aWYgaGFzKCJ1bml4IikKKzogICFlY2hvICJ1bmFtZSAtYSIgPmJ1Z3JlcG9ydC50eHQKKzogICF1bmFtZSAtYSA+PmJ1Z3JlcG9ydC50eHQKKzplbmRpZgorOnJlZGlyID4+YnVncmVwb3J0LnR4dAorOnZlcnNpb24KKzppZiAxCis6ICBmdW5jIDxTSUQ+Q2hlY2tEaXIobikKKzogICAgaWYgaXNkaXJlY3RvcnkoYTpuKQorOiAgICAgIGVjaG8gJ2RpcmVjdG9yeSAiJyAuIGE6biAuICciIGV4aXN0cycKKzogICAgZWxzZQorOiAgICAgIGVjaG8gJ2RpcmVjdG9yeSAiJyAuIGE6biAuICciIGRvZXMgTk9UIGV4aXN0JworOiAgICBlbmRpZgorOiAgZW5kZnVuCis6ICBmdW5jIDxTSUQ+Q2hlY2tGaWxlKG4pCis6ICAgIGlmIGZpbGVyZWFkYWJsZShhOm4pCis6ICAgICAgZWNobyAnIicgLiBhOm4gLiAnIiBpcyByZWFkYWJsZScKKzogICAgZWxzZQorOiAgICAgIGVjaG8gJyInIC4gYTpuIC4gJyIgaXMgTk9UIHJlYWRhYmxlJworOiAgICBlbmRpZgorOiAgZW5kZnVuCis6ICBlY2hvICItLS0gRGlyZWN0b3JpZXMgYW5kIEZpbGVzIC0tLSIKKzogIGVjaG8gJyRWSU0gPSAiJyAuICRWSU0gLiAnIicKKzogIGNhbGwgPFNJRD5DaGVja0RpcigkVklNKQorOiAgZWNobyAnJFZJTVJVTlRJTUUgPSAiJyAuICRWSU1SVU5USU1FIC4gJyInCis6ICBjYWxsIDxTSUQ+Q2hlY2tEaXIoJFZJTVJVTlRJTUUpCis6ICBjYWxsIDxTSUQ+Q2hlY2tGaWxlKCZoZWxwZmlsZSkKKzogIGNhbGwgPFNJRD5DaGVja0ZpbGUoZm5hbWVtb2RpZnkoJmhlbHBmaWxlLCAiOmgiKSAuICIvdGFncyIpCis6ICBjYWxsIDxTSUQ+Q2hlY2tGaWxlKCRWSU1SVU5USU1FIC4gIi9tZW51LnZpbSIpCis6ICBjYWxsIDxTSUQ+Q2hlY2tGaWxlKCRWSU1SVU5USU1FIC4gIi9maWxldHlwZS52aW0iKQorOiAgY2FsbCA8U0lEPkNoZWNrRmlsZSgkVklNUlVOVElNRSAuICIvc3ludGF4L3N5bmxvYWQudmltIikKKzogIGRlbGZ1biA8U0lEPkNoZWNrRGlyCis6ICBkZWxmdW4gPFNJRD5DaGVja0ZpbGUKKzplbmRpZgorOnNldCBhbGwKKzpzZXQgdGVybWNhcAorOmlmIGhhcygiYXV0b2NtZCIpCis6ICBhdQorOmVuZGlmCis6aWYgMQorOiAgZWNobyAiLS0tIE5vcm1hbC9WaXN1YWwgbW9kZSBtYXBwaW5ncyAtLS0iCis6ZW5kaWYKKzptYXAKKzppZiAxCis6ICBlY2hvICItLS0gSW5zZXJ0L0NvbW1hbmQtbGluZSBtb2RlIG1hcHBpbmdzIC0tLSIKKzplbmRpZgorOm1hcCEKKzppZiAxCis6ICBlY2hvICItLS0gQWJicmV2aWF0aW9ucyAtLS0iCis6ZW5kaWYKKzphYgorOmlmIDEKKzogIGVjaG8gIi0tLSBIaWdobGlnaHRpbmcgLS0tIgorOmVuZGlmCis6aGlnaGxpZ2h0Cis6aWYgMQorOiAgZWNobyAiLS0tIFZhcmlhYmxlcyAtLS0iCis6ZW5kaWYKKzppZiAxCis6ICBsZXQKKzplbmRpZgorOnJlZGlyIEVORAorOnNldCBtb3JlJgorOmlmIDEKKzogIGxldCAmbW9yZSA9IG1vcmVfc2F2ZQorOiAgdW5sZXQgbW9yZV9zYXZlCis6ZW5kaWYKKzplIGJ1Z3JlcG9ydC50eHQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29sb3JzL1JFQURNRS50eHQgYi9ydW50aW1lL2NvbG9ycy9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZDg0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbG9ycy9SRUFETUUudHh0CkBAIC0wLDAgKzEsNjEgQEAKK1JFQURNRS50eHQgZm9yIGNvbG9yIHNjaGVtZSBmaWxlcworCitUaGVzZSBmaWxlcyBhcmUgdXNlZCBmb3IgdGhlICI6Y29sb3JzY2hlbWUiIGNvbW1hbmQuICBUaGV5IGFwcGVhciBpbiB0aGUKK0VkaXQvQ29sb3IgU2NoZW1lIG1lbnUgaW4gdGhlIEdVSS4KKworCitIaW50cyBmb3Igd3JpdGluZyBhIGNvbG9yIHNjaGVtZSBmaWxlOgorCitUaGVyZSBhcmUgdHdvIGJhc2ljIHdheXMgdG8gZGVmaW5lIGEgY29sb3Igc2NoZW1lOgorCisxLiBEZWZpbmUgYSBuZXcgTm9ybWFsIGNvbG9yIGFuZCBzZXQgdGhlICdiYWNrZ3JvdW5kJyBvcHRpb24gYWNjb3JkaW5nbHkuCisJc2V0IGJhY2tncm91bmQ9e2xpZ2h0IG9yIGRhcmt9CisJaGlnaGxpZ2h0IGNsZWFyCisJaGlnaGxpZ2h0IE5vcm1hbCAuLi4KKwkuLi4KKworMi4gVXNlIHRoZSBkZWZhdWx0IE5vcm1hbCBjb2xvciBhbmQgYXV0b21hdGljYWxseSBhZGp1c3QgdG8gdGhlIHZhbHVlIG9mCisgICAnYmFja2dyb3VuZCcuCisJaGlnaGxpZ2h0IGNsZWFyIE5vcm1hbAorCXNldCBiYWNrZ3JvdW5kJgorCWhpZ2hsaWdodCBjbGVhcgorCWlmICZiYWNrZ3JvdW5kID09ICJsaWdodCIKKwkgIGhpZ2hsaWdodCBFcnJvciAuLi4KKwkgIC4uLgorCWVsc2UKKwkgIGhpZ2hsaWdodCBFcnJvciAuLi4KKwkgIC4uLgorCWVuZGlmCisKK1lvdSBjYW4gdXNlICI6aGlnaGxpZ2h0IGNsZWFyIiB0byByZXNldCBldmVyeXRoaW5nIHRvIHRoZSBkZWZhdWx0cywgYW5kIHRoZW4KK2NoYW5nZSB0aGUgZ3JvdXBzIHRoYXQgeW91IHdhbnQgZGlmZmVyZW50bHkuICBUaGlzIGFsc28gd2lsbCB3b3JrIGZvciBncm91cHMKK3RoYXQgYXJlIGFkZGVkIGluIGxhdGVyIHZlcnNpb25zIG9mIFZpbS4KK05vdGUgdGhhdCAiOmhpZ2hsaWdodCBjbGVhciIgdXNlcyB0aGUgdmFsdWUgb2YgJ2JhY2tncm91bmQnLCB0aHVzIHNldCBpdAorYmVmb3JlIHRoaXMgY29tbWFuZC4KK1NvbWUgYXR0cmlidXRlcyAoZS5nLiwgYm9sZCkgbWlnaHQgYmUgc2V0IGluIHRoZSBkZWZhdWx0cyB0aGF0IHlvdSB3YW50CityZW1vdmVkIGluIHlvdXIgY29sb3Igc2NoZW1lLiAgVXNlIHNvbWV0aGluZyBsaWtlICJndWk9Tk9ORSIgdG8gcmVtb3ZlIHRoZQorYXR0cmlidXRlcy4KKworVG8gc2VlIHdoaWNoIGhpZ2hsaWdodCBncm91cCBpcyB1c2VkIHdoZXJlLCBmaW5kIHRoZSBoZWxwIGZvcgorImhpZ2hsaWdodC1ncm91cHMiIGFuZCAiZ3JvdXAtbmFtZSIuCisKK1lvdSBjYW4gdXNlICI6aGlnaGxpZ2h0IiB0byBmaW5kIG91dCB0aGUgY3VycmVudCBjb2xvcnMuICBFeGNlcHRpb246IHRoZQorY3Rlcm1mZyBhbmQgY3Rlcm1iZyB2YWx1ZXMgYXJlIG51bWJlcnMsIHdoaWNoIGFyZSBvbmx5IHZhbGlkIGZvciB0aGUgY3VycmVudAordGVybWluYWwuICBVc2UgdGhlIGNvbG9yIG5hbWVzIGluc3RlYWQuICBTZWUgIjpoZWxwIGN0ZXJtLWNvbG9ycyIuCisKK1RoZSBkZWZhdWx0IGNvbG9yIHNldHRpbmdzIGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlIGZpbGUgc3JjL3N5bnRheC5jLgorU2VhcmNoIGZvciAiaGlnaGxpZ2h0X2luaXQiLgorCitJZiB5b3UgdGhpbmsgeW91IGhhdmUgYSBjb2xvciBzY2hlbWUgdGhhdCBpcyBnb29kIGVub3VnaCB0byBiZSB1c2VkIGJ5IG90aGVycywKK3BsZWFzZSBjaGVjayB0aGUgZm9sbG93aW5nIGl0ZW1zOgorCistIERvZXMgaXQgd29yayBpbiBhIGNvbG9yIHRlcm1pbmFsIGFzIHdlbGwgYXMgaW4gdGhlIEdVST8KKy0gSXMgJ2JhY2tncm91bmQnIGVpdGhlciB1c2VkIG9yIGFwcHJvcHJpYXRlbHkgc2V0IHRvICJsaWdodCIgb3IgImRhcmsiPworLSBUcnkgc2V0dGluZyAnaGxzZWFyY2gnIGFuZCBzZWFyY2hpbmcgZm9yIGEgcGF0dGVybiwgaXMgdGhlIG1hdGNoIGVhc3kgdG8KKyAgc3BvdD8KKy0gU3BsaXQgYSB3aW5kb3cgd2l0aCAiOnNwbGl0IiBhbmQgIjp2c3BsaXQiLiAgQXJlIHRoZSBzdGF0dXMgbGluZXMgYW5kCisgIHZlcnRpY2FsIHNlcGFyYXRvcnMgY2xlYXJseSB2aXNpYmxlPworLSBJbiB0aGUgR1VJLCBpcyBpdCBlYXN5IHRvIGZpbmQgdGhlIGN1cnNvciwgYWxzbyBpbiBhIGZpbGUgd2l0aCBsb3RzIG9mCisgIHN5bnRheCBoaWdobGlnaHRpbmc/CistIERvIG5vdCB1c2UgaGFyZCBjb2RlZCBlc2NhcGUgc2VxdWVuY2VzLCB0aGVzZSB3aWxsIG5vdCB3b3JrIGluIG90aGVyCisgIHRlcm1pbmFscy4gIEFsd2F5cyB1c2UgY29sb3IgbmFtZXMgb3IgI1JSR0dCQiBmb3IgdGhlIEdVSS4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29sb3JzL2JsdWUudmltIGIvcnVudGltZS9jb2xvcnMvYmx1ZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmZTNkNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29sb3JzL2JsdWUudmltCkBAIC0wLDAgKzEsNzcgQEAKKyIgbG9jYWwgc3ludGF4IGZpbGUgLSBzZXQgY29sb3JzIG9uIGEgcGVyLW1hY2hpbmUgYmFzaXM6CisiIHZpbTogdHc9MCB0cz00IHN3PTQKKyIgVmltIGNvbG9yIGZpbGUKKyIgTWFpbnRhaW5lcjoJU3RldmVuIFZlcnRpZ2FuIDxzdGV2ZW5AdmVydGlnYW4ud2F0dGxlLmlkLmF1PgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMTEKKyIgUmV2aXNpb24gIzQ6IFN1cHBvcnQgZm9yIG5ldyAiVW5kZXJsaW5lIiBncm91cC4gUmVtb3ZlZCBzdXBlcmZsdW91cyBodG1sCisiCQkJICAgZm9ybWF0dGluZy4KKworc2V0IGJhY2tncm91bmQ9ZGFyaworaGkgY2xlYXIKK2lmIGV4aXN0cygic3ludGF4X29uIikKKyAgc3ludGF4IHJlc2V0CitlbmRpZgorbGV0IGc6Y29sb3JzX25hbWUgPSAiYmx1ZSIKK2hpIE5vcm1hbAkJZ3VpZmc9d2hpdGUJCWd1aWJnPWRhcmtCbHVlCitoaSBOb3JtYWwJCWN0ZXJtZmc9d2hpdGUJY3Rlcm1iZz1kYXJrQmx1ZQoraGkgTm9uVGV4dAkJZ3VpZmc9bWFnZW50YQljdGVybWZnPWxpZ2h0TWFnZW50YQoraGkgY29tbWVudAkJZ3VpZmc9Z3JheQkJZ3VpPWJvbGQKK2hpIGNvbW1lbnQJCWN0ZXJtZmc9Z3JheQoraGkgY29uc3RhbnQJCWd1aWZnPWN5YW4JCWN0ZXJtZmc9Y3lhbgoraGkgaWRlbnRpZmllcglndWlmZz1ncmF5CQljdGVybWZnPWdyYXkKK2hpIHN0YXRlbWVudAlndWlmZz15ZWxsb3cJZ3VpPW5vbmUJY3Rlcm1mZz15ZWxsb3cKK2hpIHByZXByb2MJCWd1aWZnPWdyZWVuCQljdGVybWZnPWdyZWVuCitoaSB0eXBlCQkJZ3VpZmc9b3JhbmdlCWN0ZXJtZmc9ZGFya1llbGxvdworaGkgc3BlY2lhbAkJZ3VpZmc9bWFnZW50YQljdGVybWZnPWxpZ2h0TWFnZW50YQoraGkgVW5kZXJsaW5lZAlndWlmZz1jeWFuCQljdGVybWZnPWN5YW4KK2hpIFVuZGVybGluZWQJZ3VpPXVuZGVybGluZQljdGVybT11bmRlcmxpbmUKKworaGkgRXJyb3JNc2cJCWd1aWZnPW9yYW5nZQlndWliZz1kYXJrQmx1ZQoraGkgRXJyb3JNc2cJCWN0ZXJtZmc9bGlnaHRSZWQKK2hpIFdhcm5pbmdNc2cJZ3VpZmc9Y3lhbgkJZ3VpYmc9ZGFya0JsdWUJZ3VpPWJvbGQKK2hpIFdhcm5pbmdNc2cJY3Rlcm1mZz1jeWFuCitoaSBNb2RlTXNnCQlndWlmZz15ZWxsb3cJZ3VpPU5PTkUKK2hpIE1vZGVNc2cJCWN0ZXJtZmc9eWVsbG93CitoaSBNb3JlTXNnCQlndWlmZz15ZWxsb3cJZ3VpPU5PTkUKK2hpIE1vcmVNc2cJCWN0ZXJtZmc9eWVsbG93CitoaSBFcnJvcgkJZ3VpZmc9cmVkCQlndWliZz1kYXJrQmx1ZQlndWk9dW5kZXJsaW5lCitoaSBFcnJvcgkJY3Rlcm1mZz1yZWQKKworaGkgVG9kbwkJCWd1aWZnPWJsYWNrCQlndWliZz1vcmFuZ2UKK2hpIFRvZG8JCQljdGVybWZnPWJsYWNrCWN0ZXJtYmc9ZGFya1llbGxvdworaGkgQ3Vyc29yCQlndWlmZz1ibGFjawkJZ3VpYmc9d2hpdGUKK2hpIEN1cnNvcgkJY3Rlcm1mZz1ibGFjawljdGVybWJnPXdoaXRlCitoaSBTZWFyY2gJCWd1aWZnPWJsYWNrCQlndWliZz1vcmFuZ2UKK2hpIFNlYXJjaAkJY3Rlcm1mZz1ibGFjawljdGVybWJnPWRhcmtZZWxsb3cKK2hpIEluY1NlYXJjaAlndWlmZz1ibGFjawkJZ3VpYmc9eWVsbG93CitoaSBJbmNTZWFyY2gJY3Rlcm1mZz1ibGFjawljdGVybWJnPWRhcmtZZWxsb3cKK2hpIExpbmVOcgkJZ3VpZmc9cGluawkJY3Rlcm1mZz1saWdodE1hZ2VudGEKK2hpIHRpdGxlCQlndWlmZz13aGl0ZQlndWk9Ym9sZAljdGVybT1ib2xkCisKK2hpIFN0YXR1c0xpbmVOQwlndWk9Tk9ORQlndWlmZz1ibGFjayBndWliZz1ibHVlCitoaSBTdGF0dXNMaW5lTkMJY3Rlcm1mZz1ibGFjayAgY3Rlcm1iZz1ibHVlCitoaSBTdGF0dXNMaW5lCWd1aT1ib2xkCWd1aWZnPWN5YW4JZ3VpYmc9Ymx1ZQoraGkgU3RhdHVzTGluZQljdGVybWZnPWN5YW4gICBjdGVybWJnPWJsdWUKKworaGkgbGFiZWwJCWd1aWZnPXllbGxvdwljdGVybWZnPXllbGxvdworaGkgb3BlcmF0b3IJCWd1aWZnPW9yYW5nZQlndWk9Ym9sZAljdGVybWZnPWRhcmtZZWxsb3cKK2hpIGNsZWFyIFZpc3VhbAoraGkgVmlzdWFsCQl0ZXJtPXJldmVyc2UKK2hpIFZpc3VhbAkJY3Rlcm1mZz1ibGFjawljdGVybWJnPWRhcmtDeWFuCitoaSBWaXN1YWwJCWd1aWZnPWJsYWNrCQlndWliZz1kYXJrQ3lhbgorCitoaSBEaWZmQ2hhbmdlCWd1aWJnPWRhcmtHcmVlbgkJZ3VpZmc9YmxhY2sKK2hpIERpZmZDaGFuZ2UJY3Rlcm1iZz1kYXJrR3JlZW4JY3Rlcm1mZz1ibGFjaworaGkgRGlmZlRleHQJCWd1aWJnPW9saXZlZHJhYgkJZ3VpZmc9YmxhY2sKK2hpIERpZmZUZXh0CQljdGVybWJnPWxpZ2h0R3JlZW4JY3Rlcm1mZz1ibGFjaworaGkgRGlmZkFkZAkJZ3VpYmc9c2xhdGVibHVlCQlndWlmZz1ibGFjaworaGkgRGlmZkFkZAkJY3Rlcm1iZz1ibHVlCQljdGVybWZnPWJsYWNrCitoaSBEaWZmRGVsZXRlICAgZ3VpYmc9Y29yYWwJCQlndWlmZz1ibGFjaworaGkgRGlmZkRlbGV0ZQljdGVybWJnPWN5YW4JCWN0ZXJtZmc9YmxhY2sKKworaGkgRm9sZGVkCQlndWliZz1vcmFuZ2UJCWd1aWZnPWJsYWNrCitoaSBGb2xkZWQJCWN0ZXJtYmc9eWVsbG93CQljdGVybWZnPWJsYWNrCitoaSBGb2xkQ29sdW1uCWd1aWJnPWdyYXkzMAkJZ3VpZmc9YmxhY2sKK2hpIEZvbGRDb2x1bW4JY3Rlcm1iZz1ncmF5CQljdGVybWZnPWJsYWNrCitoaSBjSWYwCQkJZ3VpZmc9Z3JheQkJCWN0ZXJtZmc9Z3JheQorCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbG9ycy9kYXJrYmx1ZS52aW0gYi9ydW50aW1lL2NvbG9ycy9kYXJrYmx1ZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUwMDRkMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29sb3JzL2RhcmtibHVlLnZpbQpAQCAtMCwwICsxLDYyIEBACisiIFZpbSBjb2xvciBmaWxlCisiIE1haW50YWluZXI6CUJvaGRhbiBWbGFzeXVrIDxib2hkYW5AdnN0dS5lZHUudWE+CisiIExhc3QgQ2hhbmdlOgkyMDAyIE1hciAwOQorCisiIGRhcmtibHVlIC0tIGZvciB0aG9zZSB3aG8gcHJlZmVyIGRhcmsgYmFja2dyb3VuZAorIiBbbm90ZTogbG9va3MgYml0IHVnbGllciB3aXRoIGNvbWUgdGVybWluYWwgcGFsZXR0ZXMsCisiIGJ1dCBpcyBmaW5lIG9uIGRlZmF1bHQgbGludXggY29uc29sZSBwYWxldHRlLl0KKworc2V0IGJnPWRhcmsKK2hpIGNsZWFyCitpZiBleGlzdHMoInN5bnRheF9vbiIpCisJc3ludGF4IHJlc2V0CitlbmRpZgorCitsZXQgY29sb3JzX25hbWUgPSAiZGFya2JsdWUiCisKK2hpIE5vcm1hbAkJZ3VpZmc9I2MwYzBjMCBndWliZz0jMDAwMDQwCQkJCQkJY3Rlcm1mZz1ncmF5IGN0ZXJtYmc9YmxhY2sKK2hpIEVycm9yTXNnCQlndWlmZz0jZmZmZmZmIGd1aWJnPSMyODdlZmYJCQkJCQljdGVybWZnPXdoaXRlIGN0ZXJtYmc9bGlnaHRibHVlCitoaSBWaXN1YWwJCWd1aWZnPSM4MDgwZmYgZ3VpYmc9ZmcJCWd1aT1yZXZlcnNlCQkJCWN0ZXJtZmc9bGlnaHRibHVlIGN0ZXJtYmc9ZmcgY3Rlcm09cmV2ZXJzZQoraGkgVmlzdWFsTk9TCWd1aWZnPSM4MDgwZmYgZ3VpYmc9ZmcJCWd1aT1yZXZlcnNlLHVuZGVybGluZQljdGVybWZnPWxpZ2h0Ymx1ZSBjdGVybWJnPWZnIGN0ZXJtPXJldmVyc2UsdW5kZXJsaW5lCitoaSBUb2RvCQkJZ3VpZmc9I2QxNGExNCBndWliZz0jMTI0OGQxCQkJCQkJY3Rlcm1mZz1yZWQJY3Rlcm1iZz1kYXJrYmx1ZQoraGkgU2VhcmNoCQlndWlmZz0jOTBmZmYwIGd1aWJnPSMyMDUwZDAJCQkJCQljdGVybWZnPXdoaXRlIGN0ZXJtYmc9ZGFya2JsdWUgY3Rlcm09dW5kZXJsaW5lIHRlcm09dW5kZXJsaW5lCitoaSBJbmNTZWFyY2gJZ3VpZmc9I2IwZmZmZiBndWliZz0jMjA1MGQwCQkJCQkJCWN0ZXJtZmc9ZGFya2JsdWUgY3Rlcm1iZz1ncmF5CisKK2hpIFNwZWNpYWxLZXkJCWd1aWZnPWN5YW4JCQljdGVybWZnPWRhcmtjeWFuCitoaSBEaXJlY3RvcnkJCWd1aWZnPWN5YW4JCQljdGVybWZnPWN5YW4KK2hpIFRpdGxlCQkJZ3VpZmc9bWFnZW50YSBndWk9bm9uZSBjdGVybWZnPW1hZ2VudGEgY3Rlcm09Ym9sZAoraGkgV2FybmluZ01zZwkJZ3VpZmc9cmVkCQkJY3Rlcm1mZz1yZWQKK2hpIFdpbGRNZW51CQkJZ3VpZmc9eWVsbG93IGd1aWJnPWJsYWNrIGN0ZXJtZmc9eWVsbG93IGN0ZXJtYmc9YmxhY2sgY3Rlcm09bm9uZSB0ZXJtPW5vbmUKK2hpIE1vZGVNc2cJCQlndWlmZz0jMjJjY2UyCQljdGVybWZnPWxpZ2h0Ymx1ZQoraGkgTW9yZU1zZwkJCWN0ZXJtZmc9ZGFya2dyZWVuCWN0ZXJtZmc9ZGFya2dyZWVuCitoaSBRdWVzdGlvbgkJCWd1aWZnPWdyZWVuIGd1aT1ub25lIGN0ZXJtZmc9Z3JlZW4gY3Rlcm09bm9uZQoraGkgTm9uVGV4dAkJCWd1aWZnPSMwMDMwZmYJCWN0ZXJtZmc9ZGFya2JsdWUKKworaGkgU3RhdHVzTGluZQkJZ3VpZmc9Ymx1ZSBndWliZz1kYXJrZ3JheSBndWk9bm9uZQkJY3Rlcm1mZz1ibHVlIGN0ZXJtYmc9Z3JheSB0ZXJtPW5vbmUgY3Rlcm09bm9uZQoraGkgU3RhdHVzTGluZU5DCQlndWlmZz1ibGFjayBndWliZz1kYXJrZ3JheSBndWk9bm9uZQkJY3Rlcm1mZz1ibGFjayBjdGVybWJnPWdyYXkgdGVybT1ub25lIGN0ZXJtPW5vbmUKK2hpIFZlcnRTcGxpdAkJZ3VpZmc9YmxhY2sgZ3VpYmc9ZGFya2dyYXkgZ3VpPW5vbmUJCWN0ZXJtZmc9YmxhY2sgY3Rlcm1iZz1ncmF5IHRlcm09bm9uZSBjdGVybT1ub25lCisKK2hpIEZvbGRlZAkJCWd1aWZnPSM4MDgwODAgZ3VpYmc9IzAwMDA0MAkJCWN0ZXJtZmc9ZGFya2dyZXkgY3Rlcm1iZz1ibGFjayBjdGVybT1ib2xkIHRlcm09Ym9sZAoraGkgRm9sZENvbHVtbgkJZ3VpZmc9IzgwODA4MCBndWliZz0jMDAwMDQwCQkJY3Rlcm1mZz1kYXJrZ3JleSBjdGVybWJnPWJsYWNrIGN0ZXJtPWJvbGQgdGVybT1ib2xkCitoaSBMaW5lTnIJCQlndWlmZz0jOTBmMDIwCQkJY3Rlcm1mZz1ncmVlbiBjdGVybT1ub25lCisKK2hpIERpZmZBZGQJCQlndWliZz1kYXJrYmx1ZQljdGVybWJnPWRhcmtibHVlIHRlcm09bm9uZSBjdGVybT1ub25lCitoaSBEaWZmQ2hhbmdlCQlndWliZz1kYXJrbWFnZW50YSBjdGVybWJnPW1hZ2VudGEgY3Rlcm09bm9uZQoraGkgRGlmZkRlbGV0ZQkJY3Rlcm1mZz1ibHVlIGN0ZXJtYmc9Y3lhbiBndWk9Ym9sZCBndWlmZz1CbHVlIGd1aWJnPURhcmtDeWFuCitoaSBEaWZmVGV4dAkJCWN0ZXJtPWJvbGQgY3Rlcm1iZz1yZWQgZ3VpPWJvbGQgZ3VpYmc9UmVkCisKK2hpIEN1cnNvcgkJCWd1aWZnPSMwMDAwMjAgZ3VpYmc9I2ZmYWYzOCBjdGVybWZnPWJnIGN0ZXJtYmc9YnJvd24KK2hpIGxDdXJzb3IJCQlndWlmZz0jZmZmZmZmIGd1aWJnPSMwMDAwMDAgY3Rlcm1mZz1iZyBjdGVybWJnPWRhcmtncmVlbgorCisKK2hpIENvbW1lbnQJCQlndWlmZz0jODBhMGZmIGN0ZXJtZmc9ZGFya3JlZAoraGkgQ29uc3RhbnQJCQljdGVybWZnPW1hZ2VudGEgZ3VpZmc9I2ZmYTBhMCBjdGVybT1ub25lCitoaSBTcGVjaWFsCQkJY3Rlcm1mZz1icm93biBndWlmZz1PcmFuZ2UgY3Rlcm09bm9uZSBndWk9bm9uZQoraGkgSWRlbnRpZmllcgkJY3Rlcm1mZz1jeWFuIGd1aWZnPSM0MGZmZmYgY3Rlcm09bm9uZQoraGkgU3RhdGVtZW50CQljdGVybWZnPXllbGxvdyBjdGVybT1ub25lIGd1aWZnPSNmZmZmNjAgZ3VpPW5vbmUKK2hpIFByZVByb2MJCQljdGVybWZnPW1hZ2VudGEgZ3VpZmc9I2ZmODBmZiBndWk9bm9uZSBjdGVybT1ub25lCitoaSB0eXBlCQkJCWN0ZXJtZmc9Z3JlZW4gZ3VpZmc9IzYwZmY2MCBndWk9bm9uZSBjdGVybT1ub25lCitoaSBVbmRlcmxpbmVkCQljdGVybT11bmRlcmxpbmUgdGVybT11bmRlcmxpbmUKK2hpIElnbm9yZQkJCWd1aWZnPWJnIGN0ZXJtZmc9YmcKKworCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbG9ycy9kZWZhdWx0LnZpbSBiL3J1bnRpbWUvY29sb3JzL2RlZmF1bHQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMzExNTcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbG9ycy9kZWZhdWx0LnZpbQpAQCAtMCwwICsxLDIzIEBACisiIFZpbSBjb2xvciBmaWxlCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAxIEp1bCAyMworCisiIFRoaXMgaXMgdGhlIGRlZmF1bHQgY29sb3Igc2NoZW1lLiAgSXQgZG9lc24ndCBkZWZpbmUgdGhlIE5vcm1hbAorIiBoaWdobGlnaHRpbmcsIGl0IHVzZXMgd2hhdGV2ZXIgdGhlIGNvbG9ycyB1c2VkIHRvIGJlLgorCisiIFNldCAnYmFja2dyb3VuZCcgYmFjayB0byB0aGUgZGVmYXVsdC4gIFRoZSB2YWx1ZSBjYW4ndCBhbHdheXMgYmUgZXN0aW1hdGVkCisiIGFuZCBpcyB0aGVuIGd1ZXNzZWQuCitoaSBjbGVhciBOb3JtYWwKK3NldCBiZyYKKworIiBSZW1vdmUgYWxsIGV4aXN0aW5nIGhpZ2hsaWdodGluZyBhbmQgc2V0IHRoZSBkZWZhdWx0cy4KK2hpIGNsZWFyCisKKyIgTG9hZCB0aGUgc3ludGF4IGhpZ2hsaWdodGluZyBkZWZhdWx0cywgaWYgaXQncyBlbmFibGVkLgoraWYgZXhpc3RzKCJzeW50YXhfb24iKQorICBzeW50YXggcmVzZXQKK2VuZGlmCisKK2xldCBjb2xvcnNfbmFtZSA9ICJkZWZhdWx0IgorCisiIHZpbTogc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb2xvcnMvZGVsZWsudmltIGIvcnVudGltZS9jb2xvcnMvZGVsZWsudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNzA2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbG9ycy9kZWxlay52aW0KQEAgLTAsMCArMSw1NyBAQAorIiBWaW0gY29sb3IgZmlsZQorIiBNYWludGFpbmVyOglEYXZpZCBTY2h3ZWlrZXJ0IDxkd3NAZWUuZXRoei5jaD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDE2CisKKyIgRmlyc3QgcmVtb3ZlIGFsbCBleGlzdGluZyBoaWdobGlnaHRpbmcuCitoaSBjbGVhcgorCitsZXQgY29sb3JzX25hbWUgPSAiZGVsZWsiCisKK2hpIE5vcm1hbCBndWlmZz1CbGFjayBndWliZz13aGl0ZQorCisiIEdyb3VwcyB1c2VkIGluIHRoZSAnaGlnaGxpZ2h0JyBhbmQgJ2d1aWN1cnNvcicgb3B0aW9ucyBkZWZhdWx0IHZhbHVlLgoraGkgRXJyb3JNc2cgdGVybT1zdGFuZG91dCBjdGVybWJnPURhcmtSZWQgY3Rlcm1mZz1XaGl0ZSBndWliZz1SZWQgZ3VpZmc9V2hpdGUKK2hpIEluY1NlYXJjaCB0ZXJtPXJldmVyc2UgY3Rlcm09cmV2ZXJzZSBndWk9cmV2ZXJzZQoraGkgTW9kZU1zZyB0ZXJtPWJvbGQgY3Rlcm09Ym9sZCBndWk9Ym9sZAoraGkgVmVydFNwbGl0IHRlcm09cmV2ZXJzZSBjdGVybT1yZXZlcnNlIGd1aT1yZXZlcnNlCitoaSBWaXN1YWwgdGVybT1yZXZlcnNlIGN0ZXJtPXJldmVyc2UgZ3VpPXJldmVyc2UgZ3VpZmc9R3JleSBndWliZz1mZworaGkgVmlzdWFsTk9TIHRlcm09dW5kZXJsaW5lLGJvbGQgY3Rlcm09dW5kZXJsaW5lLGJvbGQgZ3VpPXVuZGVybGluZSxib2xkCitoaSBEaWZmVGV4dCB0ZXJtPXJldmVyc2UgY3Rlcm09Ym9sZCBjdGVybWJnPVJlZCBndWk9Ym9sZCBndWliZz1SZWQKK2hpIEN1cnNvciBndWliZz1HcmVlbiBndWlmZz1OT05FCitoaSBsQ3Vyc29yIGd1aWJnPUN5YW4gZ3VpZmc9Tk9ORQoraGkgRGlyZWN0b3J5IHRlcm09Ym9sZCBjdGVybWZnPURhcmtCbHVlIGd1aWZnPUJsdWUKK2hpIExpbmVOciB0ZXJtPXVuZGVybGluZSBjdGVybWZnPUJyb3duIGd1aWZnPUJyb3duCitoaSBNb3JlTXNnIHRlcm09Ym9sZCBjdGVybWZnPURhcmtHcmVlbiBndWk9Ym9sZCBndWlmZz1TZWFHcmVlbgoraGkgUXVlc3Rpb24gdGVybT1zdGFuZG91dCBjdGVybWZnPURhcmtHcmVlbiBndWk9Ym9sZCBndWlmZz1TZWFHcmVlbgoraGkgU2VhcmNoIHRlcm09cmV2ZXJzZSBjdGVybWJnPVllbGxvdyBjdGVybWZnPU5PTkUgZ3VpYmc9WWVsbG93IGd1aWZnPU5PTkUKK2hpIFNwZWNpYWxLZXkgdGVybT1ib2xkIGN0ZXJtZmc9RGFya0JsdWUgZ3VpZmc9Qmx1ZQoraGkgVGl0bGUgdGVybT1ib2xkIGN0ZXJtZmc9RGFya01hZ2VudGEgZ3VpPWJvbGQgZ3VpZmc9TWFnZW50YQoraGkgV2FybmluZ01zZyB0ZXJtPXN0YW5kb3V0IGN0ZXJtZmc9RGFya1JlZCBndWlmZz1SZWQKK2hpIFdpbGRNZW51IHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1ZZWxsb3cgY3Rlcm1mZz1CbGFjayBndWliZz1ZZWxsb3cgZ3VpZmc9QmxhY2sKK2hpIEZvbGRlZCB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9R3JleSBjdGVybWZnPURhcmtCbHVlIGd1aWJnPUxpZ2h0R3JleSBndWlmZz1EYXJrQmx1ZQoraGkgRm9sZENvbHVtbiB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9R3JleSBjdGVybWZnPURhcmtCbHVlIGd1aWJnPUdyZXkgZ3VpZmc9RGFya0JsdWUKK2hpIERpZmZBZGQgdGVybT1ib2xkIGN0ZXJtYmc9TGlnaHRCbHVlIGd1aWJnPUxpZ2h0Qmx1ZQoraGkgRGlmZkNoYW5nZSB0ZXJtPWJvbGQgY3Rlcm1iZz1MaWdodE1hZ2VudGEgZ3VpYmc9TGlnaHRNYWdlbnRhCitoaSBEaWZmRGVsZXRlIHRlcm09Ym9sZCBjdGVybWZnPUJsdWUgY3Rlcm1iZz1MaWdodEN5YW4gZ3VpPWJvbGQgZ3VpZmc9Qmx1ZSBndWliZz1MaWdodEN5YW4KKworaGkgU3RhdHVzTGluZQljdGVybT1ib2xkIGN0ZXJtYmc9Ymx1ZSBjdGVybWZnPXllbGxvdyBndWliZz1nb2xkIGd1aWZnPWJsdWUKK2hpIFN0YXR1c0xpbmVOQwljdGVybT1ib2xkIGN0ZXJtYmc9Ymx1ZSBjdGVybWZnPWJsYWNrICBndWliZz1nb2xkIGd1aWZnPWJsdWUKK2hpIE5vblRleHQgdGVybT1ib2xkIGN0ZXJtZmc9Qmx1ZSBndWk9Ym9sZCBndWlmZz1ncmF5IGd1aWJnPXdoaXRlCitoaSBDdXJzb3IgZ3VpYmc9ZmcgZ3VpZmc9YmcKKworIiBzeW50YXggaGlnaGxpZ2h0aW5nCitoaSBQcmVQcm9jICAgIHRlcm09dW5kZXJsaW5lIGN0ZXJtPU5PTkUgY3Rlcm1mZz1kYXJrbWFnZW50YSAgZ3VpPU5PTkUgZ3VpZmc9bWFnZW50YTMKK2hpIElkZW50aWZpZXIgdGVybT11bmRlcmxpbmUgY3Rlcm09Tk9ORSBjdGVybWZnPWRhcmtjeWFuICAgICBndWk9Tk9ORSBndWlmZz1jeWFuNAoraGkgQ29tbWVudCAgICB0ZXJtPU5PTkUgICAgICBjdGVybT1OT05FIGN0ZXJtZmc9ZGFya3JlZCAgICAgIGd1aT1OT05FIGd1aWZnPXJlZDIKK2hpIENvbnN0YW50ICAgdGVybT11bmRlcmxpbmUgY3Rlcm09Tk9ORSBjdGVybWZnPWRhcmtncmVlbiAgICBndWk9Tk9ORSBndWlmZz1ncmVlbjMKK2hpIFNwZWNpYWwgICAgdGVybT1ib2xkICAgICAgY3Rlcm09Tk9ORSBjdGVybWZnPWxpZ2h0cmVkICAgICBndWk9Tk9ORSBndWlmZz1kZWVwcGluaworaGkgU3RhdGVtZW50ICB0ZXJtPWJvbGQgICAgICBjdGVybT1ib2xkIGN0ZXJtZmc9Ymx1ZQkgICAgIGd1aT1ib2xkIGd1aWZnPWJsdWUKK2hpIFR5cGUJICAgICAgdGVybT11bmRlcmxpbmUgY3Rlcm09Tk9ORSBjdGVybWZnPWJsdWUJICAgICBndWk9Ym9sZCBndWlmZz1ibHVlCisKK2lmIGV4aXN0cygic3ludGF4X29uIikKKyAgbGV0IHN5bnRheF9jbWQgPSAiZW5hYmxlIgorICBydW50aW1lIHN5bnRheC9zeW5jb2xvci52aW0KKyAgdW5sZXQgc3ludGF4X2NtZAorZW5kaWYKKworIiB2aW06IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29sb3JzL2Rlc2VydC52aW0gYi9ydW50aW1lL2NvbG9ycy9kZXNlcnQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZGU2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbG9ycy9kZXNlcnQudmltCkBAIC0wLDAgKzEsMTA4IEBACisiIFZpbSBjb2xvciBmaWxlCisiIE1haW50YWluZXI6CUhhbnMgRnVnYWwgPGhhbnNAZnVnYWwubmV0PgorIiBMYXN0IENoYW5nZToJJERhdGUkCisiIExhc3QgQ2hhbmdlOgkkRGF0ZSQKKyIgVVJMOgkJaHR0cDovL2hhbnMuZnVnYWwubmV0L3ZpbS9jb2xvcnMvZGVzZXJ0LnZpbQorIiBWZXJzaW9uOgkkSWQkCisKKyIgY29vbCBoZWxwIHNjcmVlbnMKKyIgOmhlIGdyb3VwLW5hbWUKKyIgOmhlIGhpZ2hsaWdodC1ncm91cHMKKyIgOmhlIGN0ZXJtLWNvbG9ycworCitzZXQgYmFja2dyb3VuZD1kYXJrCitpZiB2ZXJzaW9uID4gNTgwCisgICAgIiBubyBndWFyYW50ZWVzIGZvciB2ZXJzaW9uIDUuOCBhbmQgYmVsb3csIGJ1dCB0aGlzIG1ha2VzIGl0IHN0b3AKKyAgICAiIGNvbXBsYWluaW5nCisgICAgaGkgY2xlYXIKKyAgICBpZiBleGlzdHMoInN5bnRheF9vbiIpCisJc3ludGF4IHJlc2V0CisgICAgZW5kaWYKK2VuZGlmCitsZXQgZzpjb2xvcnNfbmFtZT0iZGVzZXJ0IgorCitoaSBOb3JtYWwJZ3VpZmc9V2hpdGUgZ3VpYmc9Z3JleTIwCisKKyIgaGlnaGxpZ2h0IGdyb3VwcworaGkgQ3Vyc29yCWd1aWJnPWtoYWtpIGd1aWZnPXNsYXRlZ3JleQorImhpIEN1cnNvcklNCisiaGkgRGlyZWN0b3J5CisiaGkgRGlmZkFkZAorImhpIERpZmZDaGFuZ2UKKyJoaSBEaWZmRGVsZXRlCisiaGkgRGlmZlRleHQKKyJoaSBFcnJvck1zZworaGkgVmVydFNwbGl0CWd1aWJnPSNjMmJmYTUgZ3VpZmc9Z3JleTUwIGd1aT1ub25lCitoaSBGb2xkZWQJZ3VpYmc9Z3JleTMwIGd1aWZnPWdvbGQKK2hpIEZvbGRDb2x1bW4JZ3VpYmc9Z3JleTMwIGd1aWZnPXRhbgoraGkgSW5jU2VhcmNoCWd1aWZnPXNsYXRlZ3JleSBndWliZz1raGFraQorImhpIExpbmVOcgoraGkgTW9kZU1zZwlndWlmZz1nb2xkZW5yb2QKK2hpIE1vcmVNc2cJZ3VpZmc9U2VhR3JlZW4KK2hpIE5vblRleHQJZ3VpZmc9TGlnaHRCbHVlIGd1aWJnPWdyZXkzMAoraGkgUXVlc3Rpb24JZ3VpZmc9c3ByaW5nZ3JlZW4KK2hpIFNlYXJjaAlndWliZz1wZXJ1IGd1aWZnPXdoZWF0CitoaSBTcGVjaWFsS2V5CWd1aWZnPXllbGxvd2dyZWVuCitoaSBTdGF0dXNMaW5lCWd1aWJnPSNjMmJmYTUgZ3VpZmc9YmxhY2sgZ3VpPW5vbmUKK2hpIFN0YXR1c0xpbmVOQwlndWliZz0jYzJiZmE1IGd1aWZnPWdyZXk1MCBndWk9bm9uZQoraGkgVGl0bGUJZ3VpZmc9aW5kaWFucmVkCitoaSBWaXN1YWwJZ3VpPW5vbmUgZ3VpZmc9a2hha2kgZ3VpYmc9b2xpdmVkcmFiCisiaGkgVmlzdWFsTk9TCitoaSBXYXJuaW5nTXNnCWd1aWZnPXNhbG1vbgorImhpIFdpbGRNZW51CisiaGkgTWVudQorImhpIFNjcm9sbGJhcgorImhpIFRvb2x0aXAKKworIiBzeW50YXggaGlnaGxpZ2h0aW5nIGdyb3VwcworaGkgQ29tbWVudAlndWlmZz1Ta3lCbHVlCitoaSBDb25zdGFudAlndWlmZz0jZmZhMGEwCitoaSBJZGVudGlmaWVyCWd1aWZnPXBhbGVncmVlbgoraGkgU3RhdGVtZW50CWd1aWZnPWtoYWtpCitoaSBQcmVQcm9jCWd1aWZnPWluZGlhbnJlZAoraGkgVHlwZQkJZ3VpZmc9ZGFya2toYWtpCitoaSBTcGVjaWFsCWd1aWZnPW5hdmFqb3doaXRlCisiaGkgVW5kZXJsaW5lZAoraGkgSWdub3JlCWd1aWZnPWdyZXk0MAorImhpIEVycm9yCitoaSBUb2RvCQlndWlmZz1vcmFuZ2VyZWQgZ3VpYmc9eWVsbG93MgorCisiIGNvbG9yIHRlcm1pbmFsIGRlZmluaXRpb25zCitoaSBTcGVjaWFsS2V5CWN0ZXJtZmc9ZGFya2dyZWVuCitoaSBOb25UZXh0CWN0ZXJtPWJvbGQgY3Rlcm1mZz1kYXJrYmx1ZQoraGkgRGlyZWN0b3J5CWN0ZXJtZmc9ZGFya2N5YW4KK2hpIEVycm9yTXNnCWN0ZXJtPWJvbGQgY3Rlcm1mZz03IGN0ZXJtYmc9MQoraGkgSW5jU2VhcmNoCWN0ZXJtPU5PTkUgY3Rlcm1mZz15ZWxsb3cgY3Rlcm1iZz1ncmVlbgoraGkgU2VhcmNoCWN0ZXJtPU5PTkUgY3Rlcm1mZz1ncmV5IGN0ZXJtYmc9Ymx1ZQoraGkgTW9yZU1zZwljdGVybWZnPWRhcmtncmVlbgoraGkgTW9kZU1zZwljdGVybT1OT05FIGN0ZXJtZmc9YnJvd24KK2hpIExpbmVOcgljdGVybWZnPTMKK2hpIFF1ZXN0aW9uCWN0ZXJtZmc9Z3JlZW4KK2hpIFN0YXR1c0xpbmUJY3Rlcm09Ym9sZCxyZXZlcnNlCitoaSBTdGF0dXNMaW5lTkMgY3Rlcm09cmV2ZXJzZQoraGkgVmVydFNwbGl0CWN0ZXJtPXJldmVyc2UKK2hpIFRpdGxlCWN0ZXJtZmc9NQoraGkgVmlzdWFsCWN0ZXJtPXJldmVyc2UKK2hpIFZpc3VhbE5PUwljdGVybT1ib2xkLHVuZGVybGluZQoraGkgV2FybmluZ01zZwljdGVybWZnPTEKK2hpIFdpbGRNZW51CWN0ZXJtZmc9MCBjdGVybWJnPTMKK2hpIEZvbGRlZAljdGVybWZnPWRhcmtncmV5IGN0ZXJtYmc9Tk9ORQoraGkgRm9sZENvbHVtbgljdGVybWZnPWRhcmtncmV5IGN0ZXJtYmc9Tk9ORQoraGkgRGlmZkFkZAljdGVybWJnPTQKK2hpIERpZmZDaGFuZ2UJY3Rlcm1iZz01CitoaSBEaWZmRGVsZXRlCWN0ZXJtPWJvbGQgY3Rlcm1mZz00IGN0ZXJtYmc9NgoraGkgRGlmZlRleHQJY3Rlcm09Ym9sZCBjdGVybWJnPTEKK2hpIENvbW1lbnQJY3Rlcm1mZz1kYXJrY3lhbgoraGkgQ29uc3RhbnQJY3Rlcm1mZz1icm93bgoraGkgU3BlY2lhbAljdGVybWZnPTUKK2hpIElkZW50aWZpZXIJY3Rlcm1mZz02CitoaSBTdGF0ZW1lbnQJY3Rlcm1mZz0zCitoaSBQcmVQcm9jCWN0ZXJtZmc9NQoraGkgVHlwZQkJY3Rlcm1mZz0yCitoaSBVbmRlcmxpbmVkCWN0ZXJtPXVuZGVybGluZSBjdGVybWZnPTUKK2hpIElnbm9yZQljdGVybT1ib2xkIGN0ZXJtZmc9NworaGkgSWdub3JlCWN0ZXJtZmc9ZGFya2dyZXkKK2hpIEVycm9yCWN0ZXJtPWJvbGQgY3Rlcm1mZz03IGN0ZXJtYmc9MQorCisKKyJ2aW06IHN3PTQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29sb3JzL2VsZmxvcmQudmltIGIvcnVudGltZS9jb2xvcnMvZWxmbG9yZC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0YTgyOAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29sb3JzL2VsZmxvcmQudmltCkBAIC0wLDAgKzEsNTAgQEAKKyIgbG9jYWwgc3ludGF4IGZpbGUgLSBzZXQgY29sb3JzIG9uIGEgcGVyLW1hY2hpbmUgYmFzaXM6CisiIHZpbTogdHc9MCB0cz00IHN3PTQKKyIgVmltIGNvbG9yIGZpbGUKKyIgTWFpbnRhaW5lcjoJUm9uIEFhcm9uIDxyb25Acm9ud2FyZS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAwMgorCitzZXQgYmFja2dyb3VuZD1kYXJrCitoaSBjbGVhcgoraWYgZXhpc3RzKCJzeW50YXhfb24iKQorICBzeW50YXggcmVzZXQKK2VuZGlmCitsZXQgZzpjb2xvcnNfbmFtZSA9ICJlbGZsb3JkIgoraGkgTm9ybWFsCQlndWlmZz1jeWFuCQkJZ3VpYmc9YmxhY2sKK2hpIENvbW1lbnQJdGVybT1ib2xkCQljdGVybWZnPURhcmtDeWFuCQlndWlmZz0jODBhMGZmCitoaSBDb25zdGFudAl0ZXJtPXVuZGVybGluZQljdGVybWZnPU1hZ2VudGEJCWd1aWZnPU1hZ2VudGEKK2hpIFNwZWNpYWwJdGVybT1ib2xkCQljdGVybWZnPURhcmtNYWdlbnRhCWd1aWZnPVJlZAoraGkgSWRlbnRpZmllciB0ZXJtPXVuZGVybGluZQljdGVybT1ib2xkCQkJY3Rlcm1mZz1DeWFuIGd1aWZnPSM0MGZmZmYKK2hpIFN0YXRlbWVudCB0ZXJtPWJvbGQJCWN0ZXJtZmc9WWVsbG93IGd1aT1ib2xkCWd1aWZnPSNhYTQ0NDQKK2hpIFByZVByb2MJdGVybT11bmRlcmxpbmUJY3Rlcm1mZz1MaWdodEJsdWUJZ3VpZmc9I2ZmODBmZgoraGkgVHlwZQl0ZXJtPXVuZGVybGluZQkJY3Rlcm1mZz1MaWdodEdyZWVuCWd1aWZnPSM2MGZmNjAgZ3VpPWJvbGQKK2hpIEZ1bmN0aW9uCXRlcm09Ym9sZAkJY3Rlcm1mZz1XaGl0ZSBndWlmZz1XaGl0ZQoraGkgUmVwZWF0CXRlcm09dW5kZXJsaW5lCWN0ZXJtZmc9V2hpdGUJCWd1aWZnPXdoaXRlCitoaSBPcGVyYXRvcgkJCQljdGVybWZnPVJlZAkJCWd1aWZnPVJlZAoraGkgSWdub3JlCQkJCWN0ZXJtZmc9YmxhY2sJCWd1aWZnPWJnCitoaSBFcnJvcgl0ZXJtPXJldmVyc2UgY3Rlcm1iZz1SZWQgY3Rlcm1mZz1XaGl0ZSBndWliZz1SZWQgZ3VpZmc9V2hpdGUKK2hpIFRvZG8JdGVybT1zdGFuZG91dCBjdGVybWJnPVllbGxvdyBjdGVybWZnPUJsYWNrIGd1aWZnPUJsdWUgZ3VpYmc9WWVsbG93CisKKyIgQ29tbW9uIGdyb3VwcyB0aGF0IGxpbmsgdG8gZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIFlvdSBjYW4gc3BlY2lmeSBvdGhlciBoaWdobGlnaHRpbmcgZWFzaWx5LgoraGkgbGluayBTdHJpbmcJQ29uc3RhbnQKK2hpIGxpbmsgQ2hhcmFjdGVyCUNvbnN0YW50CitoaSBsaW5rIE51bWJlcglDb25zdGFudAoraGkgbGluayBCb29sZWFuCUNvbnN0YW50CitoaSBsaW5rIEZsb2F0CQlOdW1iZXIKK2hpIGxpbmsgQ29uZGl0aW9uYWwJUmVwZWF0CitoaSBsaW5rIExhYmVsCQlTdGF0ZW1lbnQKK2hpIGxpbmsgS2V5d29yZAlTdGF0ZW1lbnQKK2hpIGxpbmsgRXhjZXB0aW9uCVN0YXRlbWVudAoraGkgbGluayBJbmNsdWRlCVByZVByb2MKK2hpIGxpbmsgRGVmaW5lCVByZVByb2MKK2hpIGxpbmsgTWFjcm8JCVByZVByb2MKK2hpIGxpbmsgUHJlQ29uZGl0CVByZVByb2MKK2hpIGxpbmsgU3RvcmFnZUNsYXNzCVR5cGUKK2hpIGxpbmsgU3RydWN0dXJlCVR5cGUKK2hpIGxpbmsgVHlwZWRlZglUeXBlCitoaSBsaW5rIFRhZwkJU3BlY2lhbAoraGkgbGluayBTcGVjaWFsQ2hhcglTcGVjaWFsCitoaSBsaW5rIERlbGltaXRlcglTcGVjaWFsCitoaSBsaW5rIFNwZWNpYWxDb21tZW50IFNwZWNpYWwKK2hpIGxpbmsgRGVidWcJCVNwZWNpYWwKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29sb3JzL2V2ZW5pbmcudmltIGIvcnVudGltZS9jb2xvcnMvZXZlbmluZy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyZjAwZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29sb3JzL2V2ZW5pbmcudmltCkBAIC0wLDAgKzEsNTQgQEAKKyIgVmltIGNvbG9yIGZpbGUKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWF5IDIxCisKKyIgVGhpcyBjb2xvciBzY2hlbWUgdXNlcyBhIGRhcmsgZ3JleSBiYWNrZ3JvdW5kLgorCisiIEZpcnN0IHJlbW92ZSBhbGwgZXhpc3RpbmcgaGlnaGxpZ2h0aW5nLgorc2V0IGJhY2tncm91bmQ9ZGFyaworaGkgY2xlYXIKK2lmIGV4aXN0cygic3ludGF4X29uIikKKyAgc3ludGF4IHJlc2V0CitlbmRpZgorCitsZXQgY29sb3JzX25hbWUgPSAiZXZlbmluZyIKKworaGkgTm9ybWFsIGN0ZXJtYmc9RGFya0dyZXkgY3Rlcm1mZz1XaGl0ZSBndWlmZz1XaGl0ZSBndWliZz1ncmV5MjAKKworIiBHcm91cHMgdXNlZCBpbiB0aGUgJ2hpZ2hsaWdodCcgYW5kICdndWljdXJzb3InIG9wdGlvbnMgZGVmYXVsdCB2YWx1ZS4KK2hpIEVycm9yTXNnIHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1EYXJrUmVkIGN0ZXJtZmc9V2hpdGUgZ3VpYmc9UmVkIGd1aWZnPVdoaXRlCitoaSBJbmNTZWFyY2ggdGVybT1yZXZlcnNlIGN0ZXJtPXJldmVyc2UgZ3VpPXJldmVyc2UKK2hpIE1vZGVNc2cgdGVybT1ib2xkIGN0ZXJtPWJvbGQgZ3VpPWJvbGQKK2hpIFN0YXR1c0xpbmUgdGVybT1yZXZlcnNlLGJvbGQgY3Rlcm09cmV2ZXJzZSxib2xkIGd1aT1yZXZlcnNlLGJvbGQKK2hpIFN0YXR1c0xpbmVOQyB0ZXJtPXJldmVyc2UgY3Rlcm09cmV2ZXJzZSBndWk9cmV2ZXJzZQoraGkgVmVydFNwbGl0IHRlcm09cmV2ZXJzZSBjdGVybT1yZXZlcnNlIGd1aT1yZXZlcnNlCitoaSBWaXN1YWwgdGVybT1yZXZlcnNlIGN0ZXJtPXJldmVyc2UgZ3VpPXJldmVyc2UgZ3VpZmc9R3JleSBndWliZz1mZworaGkgVmlzdWFsTk9TIHRlcm09dW5kZXJsaW5lLGJvbGQgY3Rlcm09dW5kZXJsaW5lLGJvbGQgZ3VpPXVuZGVybGluZSxib2xkCitoaSBEaWZmVGV4dCB0ZXJtPXJldmVyc2UgY3Rlcm09Ym9sZCBjdGVybWJnPVJlZCBndWk9Ym9sZCBndWliZz1SZWQKK2hpIEN1cnNvciBndWliZz1HcmVlbiBndWlmZz1CbGFjaworaGkgbEN1cnNvciBndWliZz1DeWFuIGd1aWZnPUJsYWNrCitoaSBEaXJlY3RvcnkgdGVybT1ib2xkIGN0ZXJtZmc9TGlnaHRDeWFuIGd1aWZnPUN5YW4KK2hpIExpbmVOciB0ZXJtPXVuZGVybGluZSBjdGVybWZnPVllbGxvdyBndWlmZz1ZZWxsb3cKK2hpIE1vcmVNc2cgdGVybT1ib2xkIGN0ZXJtZmc9TGlnaHRHcmVlbiBndWk9Ym9sZCBndWlmZz1TZWFHcmVlbgoraGkgTm9uVGV4dCB0ZXJtPWJvbGQgY3Rlcm1mZz1MaWdodEJsdWUgZ3VpPWJvbGQgZ3VpZmc9TGlnaHRCbHVlIGd1aWJnPWdyZXkzMAoraGkgUXVlc3Rpb24gdGVybT1zdGFuZG91dCBjdGVybWZnPUxpZ2h0R3JlZW4gZ3VpPWJvbGQgZ3VpZmc9R3JlZW4KK2hpIFNlYXJjaCB0ZXJtPXJldmVyc2UgY3Rlcm1iZz1ZZWxsb3cgY3Rlcm1mZz1CbGFjayBndWliZz1ZZWxsb3cgZ3VpZmc9QmxhY2sKK2hpIFNwZWNpYWxLZXkgdGVybT1ib2xkIGN0ZXJtZmc9TGlnaHRCbHVlIGd1aWZnPUN5YW4KK2hpIFRpdGxlIHRlcm09Ym9sZCBjdGVybWZnPUxpZ2h0TWFnZW50YSBndWk9Ym9sZCBndWlmZz1NYWdlbnRhCitoaSBXYXJuaW5nTXNnIHRlcm09c3RhbmRvdXQgY3Rlcm1mZz1MaWdodFJlZCBndWlmZz1SZWQKK2hpIFdpbGRNZW51IHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1ZZWxsb3cgY3Rlcm1mZz1CbGFjayBndWliZz1ZZWxsb3cgZ3VpZmc9QmxhY2sKK2hpIEZvbGRlZCB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9TGlnaHRHcmV5IGN0ZXJtZmc9RGFya0JsdWUgZ3VpYmc9TGlnaHRHcmV5IGd1aWZnPURhcmtCbHVlCitoaSBGb2xkQ29sdW1uIHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1MaWdodEdyZXkgY3Rlcm1mZz1EYXJrQmx1ZSBndWliZz1HcmV5IGd1aWZnPURhcmtCbHVlCitoaSBEaWZmQWRkIHRlcm09Ym9sZCBjdGVybWJnPURhcmtCbHVlIGd1aWJnPURhcmtCbHVlCitoaSBEaWZmQ2hhbmdlIHRlcm09Ym9sZCBjdGVybWJnPURhcmtNYWdlbnRhIGd1aWJnPURhcmtNYWdlbnRhCitoaSBEaWZmRGVsZXRlIHRlcm09Ym9sZCBjdGVybWZnPUJsdWUgY3Rlcm1iZz1EYXJrQ3lhbiBndWk9Ym9sZCBndWlmZz1CbHVlIGd1aWJnPURhcmtDeWFuCisKKyIgR3JvdXBzIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nCitoaSBDb25zdGFudCB0ZXJtPXVuZGVybGluZSBjdGVybWZnPU1hZ2VudGEgZ3VpZmc9I2ZmYTBhMCBndWliZz1ncmV5NQoraGkgU3BlY2lhbCB0ZXJtPWJvbGQgY3Rlcm1mZz1MaWdodFJlZCBndWlmZz1PcmFuZ2UgZ3VpYmc9Z3JleTUKK2lmICZ0X0NvID4gOAorICBoaSBTdGF0ZW1lbnQgdGVybT1ib2xkIGN0ZXJtPWJvbGQgY3Rlcm1mZz1ZZWxsb3cgZ3VpZmc9I2ZmZmY2MCBndWk9Ym9sZAorZW5kaWYKK2hpIElnbm9yZSBjdGVybWZnPURhcmtHcmV5IGd1aWZnPWdyZXkyMAorCisiIHZpbTogc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb2xvcnMva29laGxlci52aW0gYi9ydW50aW1lL2NvbG9ycy9rb2VobGVyLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTg4MDAxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb2xvcnMva29laGxlci52aW0KQEAgLTAsMCArMSw2NCBAQAorIiBsb2NhbCBzeW50YXggZmlsZSAtIHNldCBjb2xvcnMgb24gYSBwZXItbWFjaGluZSBiYXNpczoKKyIgdmltOiB0dz0wIHRzPTQgc3c9NAorIiBWaW0gY29sb3IgZmlsZQorIiBNYWludGFpbmVyOglSb24gQWFyb24gPHJvbkByb253YXJlLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDAyCisKK2hpIGNsZWFyCitzZXQgYmFja2dyb3VuZD1kYXJrCitpZiBleGlzdHMoInN5bnRheF9vbiIpCisgIHN5bnRheCByZXNldAorZW5kaWYKK2xldCBnOmNvbG9yc19uYW1lID0gImtvZWhsZXIiCitoaSBOb3JtYWwJCSAgZ3VpZmc9d2hpdGUgIGd1aWJnPWJsYWNrCitoaSBTY3JvbGxiYXIJICBndWlmZz1kYXJrY3lhbiBndWliZz1jeWFuCitoaSBNZW51CQkJICBndWlmZz1ibGFjayBndWliZz1jeWFuCitoaSBTcGVjaWFsS2V5CSAgdGVybT1ib2xkICBjdGVybT1ib2xkICBjdGVybWZnPWRhcmtyZWQgIGd1aWZnPUJsdWUKK2hpIE5vblRleHQJCSAgdGVybT1ib2xkICBjdGVybT1ib2xkICBjdGVybWZnPWRhcmtyZWQgIGd1aT1ib2xkCWd1aWZnPUJsdWUKK2hpIERpcmVjdG9yeQkgIHRlcm09Ym9sZCAgY3Rlcm09Ym9sZCAgY3Rlcm1mZz1icm93bglndWlmZz1CbHVlCitoaSBFcnJvck1zZwkJICB0ZXJtPXN0YW5kb3V0ICBjdGVybT1ib2xkICBjdGVybWZnPWdyZXkgIGN0ZXJtYmc9Ymx1ZSAgZ3VpZmc9V2hpdGUgIGd1aWJnPVJlZAoraGkgU2VhcmNoCQkgIHRlcm09cmV2ZXJzZQljdGVybWZnPXdoaXRlICBjdGVybWJnPXJlZAlndWlmZz13aGl0ZSAgZ3VpYmc9UmVkCitoaSBNb3JlTXNnCQkgIHRlcm09Ym9sZCAgY3Rlcm09Ym9sZCAgY3Rlcm1mZz1kYXJrZ3JlZW4JZ3VpPWJvbGQgIGd1aWZnPVNlYUdyZWVuCitoaSBNb2RlTXNnCQkgIHRlcm09Ym9sZCAgY3Rlcm09Ym9sZCAgZ3VpPWJvbGQgIGd1aWZnPVdoaXRlCWd1aWJnPUJsdWUKK2hpIExpbmVOcgkJICB0ZXJtPXVuZGVybGluZSAgY3Rlcm09Ym9sZCAgY3Rlcm1mZz1kYXJrY3lhbglndWlmZz1ZZWxsb3cKK2hpIFF1ZXN0aW9uCQkgIHRlcm09c3RhbmRvdXQgIGN0ZXJtPWJvbGQgIGN0ZXJtZmc9ZGFya2dyZWVuCWd1aT1ib2xkICBndWlmZz1HcmVlbgoraGkgU3RhdHVzTGluZQkgIHRlcm09Ym9sZCxyZXZlcnNlICBjdGVybT1ib2xkIGN0ZXJtZmc9bGlnaHRibHVlIGN0ZXJtYmc9d2hpdGUgZ3VpPWJvbGQgZ3VpZmc9Ymx1ZSBndWliZz13aGl0ZQoraGkgU3RhdHVzTGluZU5DICAgdGVybT1yZXZlcnNlCWN0ZXJtZmc9d2hpdGUgY3Rlcm1iZz1saWdodGJsdWUgZ3VpZmc9d2hpdGUgZ3VpYmc9Ymx1ZQoraGkgVGl0bGUJCSAgdGVybT1ib2xkICBjdGVybT1ib2xkICBjdGVybWZnPWRhcmttYWdlbnRhICBndWk9Ym9sZAlndWlmZz1NYWdlbnRhCitoaSBWaXN1YWwJCSAgdGVybT1yZXZlcnNlCWN0ZXJtPXJldmVyc2UgIGd1aT1yZXZlcnNlCitoaSBXYXJuaW5nTXNnCSAgdGVybT1zdGFuZG91dCAgY3Rlcm09Ym9sZCAgY3Rlcm1mZz1kYXJrYmx1ZSAgZ3VpZmc9UmVkCitoaSBDdXJzb3IJCSAgZ3VpZmc9YmcJZ3VpYmc9R3JlZW4KK2hpIENvbW1lbnQJCSAgdGVybT1ib2xkICBjdGVybT1ib2xkIGN0ZXJtZmc9Y3lhbiAgZ3VpZmc9IzgwYTBmZgoraGkgQ29uc3RhbnQJCSAgdGVybT11bmRlcmxpbmUgIGN0ZXJtPWJvbGQgY3Rlcm1mZz1tYWdlbnRhICBndWlmZz0jZmZhMGEwCitoaSBTcGVjaWFsCQkgIHRlcm09Ym9sZCAgY3Rlcm09Ym9sZCBjdGVybWZnPXJlZCAgZ3VpZmc9T3JhbmdlCitoaSBJZGVudGlmaWVyCSAgdGVybT11bmRlcmxpbmUgICBjdGVybWZnPWJyb3duICBndWlmZz0jNDBmZmZmCitoaSBTdGF0ZW1lbnQJICB0ZXJtPWJvbGQgIGN0ZXJtPWJvbGQgY3Rlcm1mZz15ZWxsb3cJZ3VpPWJvbGQgIGd1aWZnPSNmZmZmNjAKK2hpIFByZVByb2MJCSAgdGVybT11bmRlcmxpbmUgIGN0ZXJtZmc9ZGFya2JsdWUJZ3VpZmc9I2ZmODBmZgoraGkgVHlwZQkJCSAgdGVybT11bmRlcmxpbmUgIGN0ZXJtPWJvbGQgY3Rlcm1mZz1saWdodGdyZWVuICBndWk9Ym9sZCAgZ3VpZmc9IzYwZmY2MAoraGkgRXJyb3IJCSAgdGVybT1yZXZlcnNlCWN0ZXJtZmc9ZGFya2N5YW4gIGN0ZXJtYmc9YmxhY2sgIGd1aWZnPVJlZAlndWliZz1CbGFjaworaGkgVG9kbwkJCSAgdGVybT1zdGFuZG91dCAgY3Rlcm1mZz1ibGFjawljdGVybWJnPWRhcmtjeWFuICBndWlmZz1CbHVlICBndWliZz1ZZWxsb3cKK2hpIGxpbmsgSW5jU2VhcmNoCQlWaXN1YWwKK2hpIGxpbmsgU3RyaW5nCQkJQ29uc3RhbnQKK2hpIGxpbmsgQ2hhcmFjdGVyCQlDb25zdGFudAoraGkgbGluayBOdW1iZXIJCQlDb25zdGFudAoraGkgbGluayBCb29sZWFuCQkJQ29uc3RhbnQKK2hpIGxpbmsgRmxvYXQJCQlOdW1iZXIKK2hpIGxpbmsgRnVuY3Rpb24JCUlkZW50aWZpZXIKK2hpIGxpbmsgQ29uZGl0aW9uYWwJCVN0YXRlbWVudAoraGkgbGluayBSZXBlYXQJCQlTdGF0ZW1lbnQKK2hpIGxpbmsgTGFiZWwJCQlTdGF0ZW1lbnQKK2hpIGxpbmsgT3BlcmF0b3IJCVN0YXRlbWVudAoraGkgbGluayBLZXl3b3JkCQkJU3RhdGVtZW50CitoaSBsaW5rIEV4Y2VwdGlvbgkJU3RhdGVtZW50CitoaSBsaW5rIEluY2x1ZGUJCQlQcmVQcm9jCitoaSBsaW5rIERlZmluZQkJCVByZVByb2MKK2hpIGxpbmsgTWFjcm8JCQlQcmVQcm9jCitoaSBsaW5rIFByZUNvbmRpdAkJUHJlUHJvYworaGkgbGluayBTdG9yYWdlQ2xhc3MJVHlwZQoraGkgbGluayBTdHJ1Y3R1cmUJCVR5cGUKK2hpIGxpbmsgVHlwZWRlZgkJCVR5cGUKK2hpIGxpbmsgVGFnCQkJCVNwZWNpYWwKK2hpIGxpbmsgU3BlY2lhbENoYXIJCVNwZWNpYWwKK2hpIGxpbmsgRGVsaW1pdGVyCQlTcGVjaWFsCitoaSBsaW5rIFNwZWNpYWxDb21tZW50CVNwZWNpYWwKK2hpIGxpbmsgRGVidWcJCQlTcGVjaWFsCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbG9ycy9tb3JuaW5nLnZpbSBiL3J1bnRpbWUvY29sb3JzL21vcm5pbmcudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZGFhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbG9ycy9tb3JuaW5nLnZpbQpAQCAtMCwwICsxLDU0IEBACisiIFZpbSBjb2xvciBmaWxlCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAyMQorCisiIFRoaXMgY29sb3Igc2NoZW1lIHVzZXMgYSBsaWdodCBncmV5IGJhY2tncm91bmQuCisKKyIgRmlyc3QgcmVtb3ZlIGFsbCBleGlzdGluZyBoaWdobGlnaHRpbmcuCitzZXQgYmFja2dyb3VuZD1saWdodAoraGkgY2xlYXIKK2lmIGV4aXN0cygic3ludGF4X29uIikKKyAgc3ludGF4IHJlc2V0CitlbmRpZgorCitsZXQgY29sb3JzX25hbWUgPSAibW9ybmluZyIKKworaGkgTm9ybWFsIGN0ZXJtZmc9QmxhY2sgY3Rlcm1iZz1MaWdodEdyZXkgZ3VpZmc9QmxhY2sgZ3VpYmc9Z3JleTkwCisKKyIgR3JvdXBzIHVzZWQgaW4gdGhlICdoaWdobGlnaHQnIGFuZCAnZ3VpY3Vyc29yJyBvcHRpb25zIGRlZmF1bHQgdmFsdWUuCitoaSBFcnJvck1zZyB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9RGFya1JlZCBjdGVybWZnPVdoaXRlIGd1aWJnPVJlZCBndWlmZz1XaGl0ZQoraGkgSW5jU2VhcmNoIHRlcm09cmV2ZXJzZSBjdGVybT1yZXZlcnNlIGd1aT1yZXZlcnNlCitoaSBNb2RlTXNnIHRlcm09Ym9sZCBjdGVybT1ib2xkIGd1aT1ib2xkCitoaSBTdGF0dXNMaW5lIHRlcm09cmV2ZXJzZSxib2xkIGN0ZXJtPXJldmVyc2UsYm9sZCBndWk9cmV2ZXJzZSxib2xkCitoaSBTdGF0dXNMaW5lTkMgdGVybT1yZXZlcnNlIGN0ZXJtPXJldmVyc2UgZ3VpPXJldmVyc2UKK2hpIFZlcnRTcGxpdCB0ZXJtPXJldmVyc2UgY3Rlcm09cmV2ZXJzZSBndWk9cmV2ZXJzZQoraGkgVmlzdWFsIHRlcm09cmV2ZXJzZSBjdGVybT1yZXZlcnNlIGd1aT1yZXZlcnNlIGd1aWZnPUdyZXkgZ3VpYmc9ZmcKK2hpIFZpc3VhbE5PUyB0ZXJtPXVuZGVybGluZSxib2xkIGN0ZXJtPXVuZGVybGluZSxib2xkIGd1aT11bmRlcmxpbmUsYm9sZAoraGkgRGlmZlRleHQgdGVybT1yZXZlcnNlIGN0ZXJtPWJvbGQgY3Rlcm1iZz1SZWQgZ3VpPWJvbGQgZ3VpYmc9UmVkCitoaSBDdXJzb3IgZ3VpYmc9R3JlZW4gZ3VpZmc9Tk9ORQoraGkgbEN1cnNvciBndWliZz1DeWFuIGd1aWZnPU5PTkUKK2hpIERpcmVjdG9yeSB0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrQmx1ZSBndWlmZz1CbHVlCitoaSBMaW5lTnIgdGVybT11bmRlcmxpbmUgY3Rlcm1mZz1Ccm93biBndWlmZz1Ccm93bgoraGkgTW9yZU1zZyB0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrR3JlZW4gZ3VpPWJvbGQgZ3VpZmc9U2VhR3JlZW4KK2hpIE5vblRleHQgdGVybT1ib2xkIGN0ZXJtZmc9Qmx1ZSBndWk9Ym9sZCBndWlmZz1CbHVlIGd1aWJnPWdyZXk4MAoraGkgUXVlc3Rpb24gdGVybT1zdGFuZG91dCBjdGVybWZnPURhcmtHcmVlbiBndWk9Ym9sZCBndWlmZz1TZWFHcmVlbgoraGkgU2VhcmNoIHRlcm09cmV2ZXJzZSBjdGVybWJnPVllbGxvdyBjdGVybWZnPU5PTkUgZ3VpYmc9WWVsbG93IGd1aWZnPU5PTkUKK2hpIFNwZWNpYWxLZXkgdGVybT1ib2xkIGN0ZXJtZmc9RGFya0JsdWUgZ3VpZmc9Qmx1ZQoraGkgVGl0bGUgdGVybT1ib2xkIGN0ZXJtZmc9RGFya01hZ2VudGEgZ3VpPWJvbGQgZ3VpZmc9TWFnZW50YQoraGkgV2FybmluZ01zZyB0ZXJtPXN0YW5kb3V0IGN0ZXJtZmc9RGFya1JlZCBndWlmZz1SZWQKK2hpIFdpbGRNZW51IHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1ZZWxsb3cgY3Rlcm1mZz1CbGFjayBndWliZz1ZZWxsb3cgZ3VpZmc9QmxhY2sKK2hpIEZvbGRlZCB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9R3JleSBjdGVybWZnPURhcmtCbHVlIGd1aWJnPUxpZ2h0R3JleSBndWlmZz1EYXJrQmx1ZQoraGkgRm9sZENvbHVtbiB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9R3JleSBjdGVybWZnPURhcmtCbHVlIGd1aWJnPUdyZXkgZ3VpZmc9RGFya0JsdWUKK2hpIERpZmZBZGQgdGVybT1ib2xkIGN0ZXJtYmc9TGlnaHRCbHVlIGd1aWJnPUxpZ2h0Qmx1ZQoraGkgRGlmZkNoYW5nZSB0ZXJtPWJvbGQgY3Rlcm1iZz1MaWdodE1hZ2VudGEgZ3VpYmc9TGlnaHRNYWdlbnRhCitoaSBEaWZmRGVsZXRlIHRlcm09Ym9sZCBjdGVybWZnPUJsdWUgY3Rlcm1iZz1MaWdodEN5YW4gZ3VpPWJvbGQgZ3VpZmc9Qmx1ZSBndWliZz1MaWdodEN5YW4KKworIiBDb2xvcnMgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcKK2hpIENvbnN0YW50IHRlcm09dW5kZXJsaW5lIGN0ZXJtZmc9RGFya1JlZCBndWlmZz1NYWdlbnRhIGd1aWJnPWdyZXk5NQoraGkgU3BlY2lhbCB0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrTWFnZW50YSBndWlmZz1TbGF0ZUJsdWUgZ3VpYmc9Z3JleTk1CitpZiAmdF9DbyA+IDgKKyAgaGkgU3RhdGVtZW50IHRlcm09Ym9sZCBjdGVybT1ib2xkIGN0ZXJtZmc9QnJvd24gZ3VpPWJvbGQgZ3VpZmc9QnJvd24KK2VuZGlmCitoaSBJZ25vcmUgY3Rlcm1mZz1MaWdodEdyZXkgZ3VpZmc9Z3JleTkwCisKKyIgdmltOiBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbG9ycy9tdXJwaHkudmltIGIvcnVudGltZS9jb2xvcnMvbXVycGh5LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQzOTk2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb2xvcnMvbXVycGh5LnZpbQpAQCAtMCwwICsxLDQxIEBACisiIGxvY2FsIHN5bnRheCBmaWxlIC0gc2V0IGNvbG9ycyBvbiBhIHBlci1tYWNoaW5lIGJhc2lzOgorIiB2aW06IHR3PTAgdHM9NCBzdz00CisiIFZpbSBjb2xvciBmaWxlCisiIE1haW50YWluZXI6CVJvbiBBYXJvbiA8cm9uQHJvbndhcmUub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMDIKKworaGkgY2xlYXIKK3NldCBiYWNrZ3JvdW5kPWRhcmsKK2lmIGV4aXN0cygic3ludGF4X29uIikKKyAgc3ludGF4IHJlc2V0CitlbmRpZgorbGV0IGc6Y29sb3JzX25hbWUgPSAibXVycGh5IgorCitoaSBOb3JtYWwJCWN0ZXJtYmc9QmxhY2sgIGN0ZXJtZmc9bGlnaHRncmVlbiBndWliZz1CbGFjawkJIGd1aWZnPWxpZ2h0Z3JlZW4KK2hpIENvbW1lbnQJCXRlcm09Ym9sZAkgICBjdGVybWZnPUxpZ2h0UmVkICAgZ3VpZmc9T3JhbmdlCitoaSBDb25zdGFudAkJdGVybT11bmRlcmxpbmUgY3Rlcm1mZz1MaWdodEdyZWVuIGd1aWZnPVdoaXRlCWd1aT1OT05FCitoaSBJZGVudGlmaWVyCXRlcm09dW5kZXJsaW5lIGN0ZXJtZmc9TGlnaHRDeWFuICBndWlmZz0jMDBmZmZmCitoaSBJZ25vcmUJCQkJCSAgIGN0ZXJtZmc9YmxhY2sJICBndWlmZz1iZworaGkgUHJlUHJvYwkJdGVybT11bmRlcmxpbmUgY3Rlcm1mZz1MaWdodEJsdWUgIGd1aWZnPVdoZWF0CitoaSBTZWFyY2gJCXRlcm09cmV2ZXJzZQkJCQkJICBndWlmZz13aGl0ZQlndWliZz1CbHVlCitoaSBTcGVjaWFsCQl0ZXJtPWJvbGQJICAgY3Rlcm1mZz1MaWdodFJlZCAgIGd1aWZnPW1hZ2VudGEKK2hpIFN0YXRlbWVudAl0ZXJtPWJvbGQJICAgY3Rlcm1mZz1ZZWxsb3cJICBndWlmZz0jZmZmZjAwIGd1aT1OT05FCitoaSBUeXBlCQkJCQkJICAgY3Rlcm1mZz1MaWdodEdyZWVuIGd1aWZnPWdyZXkJZ3VpPW5vbmUKK2hpIEVycm9yCQl0ZXJtPXJldmVyc2UgICBjdGVybWJnPVJlZAkgIGN0ZXJtZmc9V2hpdGUgZ3VpYmc9UmVkICBndWlmZz1XaGl0ZQoraGkgVG9kbwkJCXRlcm09c3RhbmRvdXQgIGN0ZXJtYmc9WWVsbG93IGN0ZXJtZmc9QmxhY2sgZ3VpZmc9Qmx1ZSBndWliZz1ZZWxsb3cKKyIgRnJvbSB0aGUgc291cmNlOgoraGkgQ3Vyc29yCQkJCQkJCQkJCSAgZ3VpZmc9T3JjaGlkCWd1aWJnPWZnCitoaSBEaXJlY3RvcnkJdGVybT1ib2xkCSAgIGN0ZXJtZmc9TGlnaHRDeWFuICBndWlmZz1DeWFuCitoaSBFcnJvck1zZwkJdGVybT1zdGFuZG91dCAgY3Rlcm1iZz1EYXJrUmVkCSAgY3Rlcm1mZz1XaGl0ZSBndWliZz1SZWQgZ3VpZmc9V2hpdGUKK2hpIEluY1NlYXJjaAl0ZXJtPXJldmVyc2UgICBjdGVybT1yZXZlcnNlCSAgZ3VpPXJldmVyc2UKK2hpIExpbmVOcgkJdGVybT11bmRlcmxpbmUgY3Rlcm1mZz1ZZWxsb3cJCQkJCWd1aWZnPVllbGxvdworaGkgTW9kZU1zZwkJdGVybT1ib2xkCSAgIGN0ZXJtPWJvbGQJCSAgZ3VpPWJvbGQKK2hpIE1vcmVNc2cJCXRlcm09Ym9sZAkgICBjdGVybWZnPUxpZ2h0R3JlZW4gZ3VpPWJvbGQJCWd1aWZnPVNlYUdyZWVuCitoaSBOb25UZXh0CQl0ZXJtPWJvbGQJICAgY3Rlcm1mZz1CbHVlCQkgIGd1aT1ib2xkCQlndWlmZz1CbHVlCitoaSBRdWVzdGlvbgkJdGVybT1zdGFuZG91dCAgY3Rlcm1mZz1MaWdodEdyZWVuIGd1aT1ib2xkCQlndWlmZz1DeWFuCitoaSBTcGVjaWFsS2V5CXRlcm09Ym9sZAkgICBjdGVybWZnPUxpZ2h0Qmx1ZSAgZ3VpZmc9Q3lhbgoraGkgU3RhdHVzTGluZQl0ZXJtPXJldmVyc2UsYm9sZCBjdGVybT1yZXZlcnNlICAgZ3VpPU5PTkUJCWd1aWZnPVdoaXRlIGd1aWJnPWRhcmtibHVlCitoaSBTdGF0dXNMaW5lTkMgdGVybT1yZXZlcnNlICAgY3Rlcm09cmV2ZXJzZQkgIGd1aT1OT05FCQlndWlmZz13aGl0ZSBndWliZz0jMzMzMzMzCitoaSBUaXRsZQkJdGVybT1ib2xkCSAgIGN0ZXJtZmc9TGlnaHRNYWdlbnRhIGd1aT1ib2xkCWd1aWZnPVBpbmsKK2hpIFdhcm5pbmdNc2cJdGVybT1zdGFuZG91dCAgY3Rlcm1mZz1MaWdodFJlZCAgIGd1aWZnPVJlZAoraGkgVmlzdWFsCQl0ZXJtPXJldmVyc2UgICBjdGVybT1yZXZlcnNlCSAgZ3VpPU5PTkUJCWd1aWZnPXdoaXRlIGd1aWJnPWRhcmtncmVlbgpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb2xvcnMvcGFibG8udmltIGIvcnVudGltZS9jb2xvcnMvcGFibG8udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YmY3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbG9ycy9wYWJsby52aW0KQEAgLTAsMCArMSwyNiBAQAorIiBsb2NhbCBzeW50YXggZmlsZSAtIHNldCBjb2xvcnMgb24gYSBwZXItbWFjaGluZSBiYXNpczoKKyIgdmltOiB0dz0wIHRzPTQgc3c9NAorIiBWaW0gY29sb3IgZmlsZQorIiBNYWludGFpbmVyOglSb24gQWFyb24gPHJvbkByb253YXJlLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDAyCisKK2hpIGNsZWFyCitzZXQgYmFja2dyb3VuZD1kYXJrCitpZiBleGlzdHMoInN5bnRheF9vbiIpCisgIHN5bnRheCByZXNldAorZW5kaWYKK2xldCBnOmNvbG9yc19uYW1lID0gInBhYmxvIgorCitoaWdobGlnaHQgQ29tbWVudAkgY3Rlcm1mZz04CQkJCQkJICBndWlmZz0jODA4MDgwCitoaWdobGlnaHQgQ29uc3RhbnQJIGN0ZXJtZmc9MTQJCQkgICBjdGVybT1ub25lIGd1aWZnPSMwMGZmZmYJCQkJICBndWk9bm9uZQoraGlnaGxpZ2h0IElkZW50aWZpZXIgY3Rlcm1mZz02CQkJCQkJICBndWlmZz0jMDBjMGMwCitoaWdobGlnaHQgU3RhdGVtZW50ICBjdGVybWZnPTMJCQkgICBjdGVybT1ib2xkIGd1aWZnPSNjMGMwMDAJCQkJICBndWk9Ym9sZAoraGlnaGxpZ2h0IFByZVByb2MJIGN0ZXJtZmc9MTAJCQkJCQkgIGd1aWZnPSMwMGZmMDAKK2hpZ2hsaWdodCBUeXBlCQkgY3Rlcm1mZz0yCQkJCQkJICBndWlmZz0jMDBjMDAwCitoaWdobGlnaHQgU3BlY2lhbAkgY3Rlcm1mZz0xMgkJCQkJCSAgZ3VpZmc9IzAwMDBmZgoraGlnaGxpZ2h0IEVycm9yCQkJCQljdGVybWJnPTkJCQkJCQkJZ3VpYmc9I2ZmMDAwMAoraGlnaGxpZ2h0IFRvZG8JCSBjdGVybWZnPTQJY3Rlcm1iZz0zCQkJICBndWlmZz0jMDAwMDgwIGd1aWJnPSNjMGMwMDAKK2hpZ2hsaWdodCBEaXJlY3RvcnkgIGN0ZXJtZmc9MgkJCQkJCSAgZ3VpZmc9IzAwYzAwMAoraGlnaGxpZ2h0IFN0YXR1c0xpbmUgY3Rlcm1mZz0xMSBjdGVybWJnPTEyIGN0ZXJtPW5vbmUgZ3VpZmc9I2ZmZmYwMCBndWliZz0jMDAwMGZmIGd1aT1ub25lCitoaWdobGlnaHQgTm9ybWFsCQkJCQkJCQkJICBndWlmZz0jZmZmZmZmIGd1aWJnPSMwMDAwMDAKK2hpZ2hsaWdodCBTZWFyY2gJCQkJY3Rlcm1iZz0zCQkJCQkJCWd1aWJnPSNjMGMwMDAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29sb3JzL3BlYWNocHVmZi52aW0gYi9ydW50aW1lL2NvbG9ycy9wZWFjaHB1ZmYudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMTUzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbG9ycy9wZWFjaHB1ZmYudmltCkBAIC0wLDAgKzEsNjAgQEAKKyIgVmltIGNvbG9yIGZpbGUKKyIgTWFpbnRhaW5lcjogRGF2aWQgTmVcdntjfWFzIChZZXRpKSA8eWV0aUBwaHlzaWNzLm11bmkuY3o+CisiIExhc3QgQ2hhbmdlOiAyMDAzLTA0LTIzCisiIFVSTDogaHR0cDovL3RyaWZpYy5hdGguY3gvRnRwL3ZpbS9jb2xvcnMvcGVhY2hwdWZmLnZpbQorCisiIFRoaXMgY29sb3Igc2NoZW1lIHVzZXMgYSBwZWFjaHB1ZmYgYmFja2dyb3VuZCAod2hhdCB5b3UndmUgZXhwZWN0ZWQgd2hlbiBpdCdzCisiIGNhbGxlZCBwZWFjaHB1ZmY/KS4KKyIKKyIgTm90ZTogT25seSBHVUkgY29sb3JzIGRpZmZlciBmcm9tIGRlZmF1bHQsIG9uIHRlcm1pbmFsIGl0J3MganVzdCBgbGlnaHQnLgorCisiIEZpcnN0IHJlbW92ZSBhbGwgZXhpc3RpbmcgaGlnaGxpZ2h0aW5nLgorc2V0IGJhY2tncm91bmQ9bGlnaHQKK2hpIGNsZWFyCitpZiBleGlzdHMoInN5bnRheF9vbiIpCisgIHN5bnRheCByZXNldAorZW5kaWYKKworbGV0IGNvbG9yc19uYW1lID0gInBlYWNocHVmZiIKKworaGkgTm9ybWFsIGd1aWJnPVBlYWNoUHVmZiBndWlmZz1CbGFjaworCitoaSBTcGVjaWFsS2V5IHRlcm09Ym9sZCBjdGVybWZnPTQgZ3VpZmc9Qmx1ZQoraGkgTm9uVGV4dCB0ZXJtPWJvbGQgY3Rlcm09Ym9sZCBjdGVybWZnPTQgZ3VpPWJvbGQgZ3VpZmc9Qmx1ZQoraGkgRGlyZWN0b3J5IHRlcm09Ym9sZCBjdGVybWZnPTQgZ3VpZmc9Qmx1ZQoraGkgRXJyb3JNc2cgdGVybT1zdGFuZG91dCBjdGVybT1ib2xkIGN0ZXJtZmc9NyBjdGVybWJnPTEgZ3VpPWJvbGQgZ3VpZmc9V2hpdGUgZ3VpYmc9UmVkCitoaSBJbmNTZWFyY2ggdGVybT1yZXZlcnNlIGN0ZXJtPXJldmVyc2UgZ3VpPXJldmVyc2UKK2hpIFNlYXJjaCB0ZXJtPXJldmVyc2UgY3Rlcm1iZz0zIGd1aWJnPUdvbGQyCitoaSBNb3JlTXNnIHRlcm09Ym9sZCBjdGVybWZnPTIgZ3VpPWJvbGQgZ3VpZmc9U2VhR3JlZW4KK2hpIE1vZGVNc2cgdGVybT1ib2xkIGN0ZXJtPWJvbGQgZ3VpPWJvbGQKK2hpIExpbmVOciB0ZXJtPXVuZGVybGluZSBjdGVybWZnPTMgZ3VpZmc9UmVkMworaGkgUXVlc3Rpb24gdGVybT1zdGFuZG91dCBjdGVybWZnPTIgZ3VpPWJvbGQgZ3VpZmc9U2VhR3JlZW4KK2hpIFN0YXR1c0xpbmUgdGVybT1ib2xkLHJldmVyc2UgY3Rlcm09Ym9sZCxyZXZlcnNlIGd1aT1ib2xkIGd1aWZnPVdoaXRlIGd1aWJnPUJsYWNrCitoaSBTdGF0dXNMaW5lTkMgdGVybT1yZXZlcnNlIGN0ZXJtPXJldmVyc2UgZ3VpPWJvbGQgZ3VpZmc9UGVhY2hQdWZmIGd1aWJnPUdyYXk0NQoraGkgVmVydFNwbGl0IHRlcm09cmV2ZXJzZSBjdGVybT1yZXZlcnNlIGd1aT1ib2xkIGd1aWZnPVdoaXRlIGd1aWJnPUdyYXk0NQoraGkgVGl0bGUgdGVybT1ib2xkIGN0ZXJtZmc9NSBndWk9Ym9sZCBndWlmZz1EZWVwUGluazMKK2hpIFZpc3VhbCB0ZXJtPXJldmVyc2UgY3Rlcm09cmV2ZXJzZSBndWk9cmV2ZXJzZSBndWlmZz1HcmV5ODAgZ3VpYmc9ZmcKK2hpIFZpc3VhbE5PUyB0ZXJtPWJvbGQsdW5kZXJsaW5lIGN0ZXJtPWJvbGQsdW5kZXJsaW5lIGd1aT1ib2xkLHVuZGVybGluZQoraGkgV2FybmluZ01zZyB0ZXJtPXN0YW5kb3V0IGN0ZXJtZmc9MSBndWk9Ym9sZCBndWlmZz1SZWQKK2hpIFdpbGRNZW51IHRlcm09c3RhbmRvdXQgY3Rlcm1mZz0wIGN0ZXJtYmc9MyBndWlmZz1CbGFjayBndWliZz1ZZWxsb3cKK2hpIEZvbGRlZCB0ZXJtPXN0YW5kb3V0IGN0ZXJtZmc9NCBjdGVybWJnPTcgZ3VpZmc9QmxhY2sgZ3VpYmc9I2UzYzFhNQoraGkgRm9sZENvbHVtbiB0ZXJtPXN0YW5kb3V0IGN0ZXJtZmc9NCBjdGVybWJnPTcgZ3VpZmc9RGFya0JsdWUgZ3VpYmc9R3JheTgwCitoaSBEaWZmQWRkIHRlcm09Ym9sZCBjdGVybWJnPTQgZ3VpYmc9V2hpdGUKK2hpIERpZmZDaGFuZ2UgdGVybT1ib2xkIGN0ZXJtYmc9NSBndWliZz0jZWRiNWNkCitoaSBEaWZmRGVsZXRlIHRlcm09Ym9sZCBjdGVybT1ib2xkIGN0ZXJtZmc9NCBjdGVybWJnPTYgZ3VpPWJvbGQgZ3VpZmc9TGlnaHRCbHVlIGd1aWJnPSNmNmU4ZDAKK2hpIERpZmZUZXh0IHRlcm09cmV2ZXJzZSBjdGVybT1ib2xkIGN0ZXJtYmc9MSBndWk9Ym9sZCBndWliZz0jZmY4MDYwCitoaSBDdXJzb3IgZ3VpZmc9YmcgZ3VpYmc9ZmcKK2hpIGxDdXJzb3IgZ3VpZmc9YmcgZ3VpYmc9ZmcKKworIiBDb2xvcnMgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcKK2hpIENvbW1lbnQgdGVybT1ib2xkIGN0ZXJtZmc9NCBndWlmZz0jNDA2MDkwCitoaSBDb25zdGFudCB0ZXJtPXVuZGVybGluZSBjdGVybWZnPTEgZ3VpZmc9I2MwMDA1OAoraGkgU3BlY2lhbCB0ZXJtPWJvbGQgY3Rlcm1mZz01IGd1aWZnPVNsYXRlQmx1ZQoraGkgSWRlbnRpZmllciB0ZXJtPXVuZGVybGluZSBjdGVybWZnPTYgZ3VpZmc9RGFya0N5YW4KK2hpIFN0YXRlbWVudCB0ZXJtPWJvbGQgY3Rlcm1mZz0zIGd1aT1ib2xkIGd1aWZnPUJyb3duCitoaSBQcmVQcm9jIHRlcm09dW5kZXJsaW5lIGN0ZXJtZmc9NSBndWlmZz1NYWdlbnRhMworaGkgVHlwZSB0ZXJtPXVuZGVybGluZSBjdGVybWZnPTIgZ3VpPWJvbGQgZ3VpZmc9U2VhR3JlZW4KK2hpIElnbm9yZSBjdGVybT1ib2xkIGN0ZXJtZmc9NyBndWlmZz1iZworaGkgRXJyb3IgdGVybT1yZXZlcnNlIGN0ZXJtPWJvbGQgY3Rlcm1mZz03IGN0ZXJtYmc9MSBndWk9Ym9sZCBndWlmZz1XaGl0ZSBndWliZz1SZWQKK2hpIFRvZG8gdGVybT1zdGFuZG91dCBjdGVybWZnPTAgY3Rlcm1iZz0zIGd1aWZnPUJsdWUgZ3VpYmc9WWVsbG93CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29sb3JzL3Jvbi52aW0gYi9ydW50aW1lL2NvbG9ycy9yb24udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDY0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbG9ycy9yb24udmltCkBAIC0wLDAgKzEsNDMgQEAKKyIgbG9jYWwgc3ludGF4IGZpbGUgLSBzZXQgY29sb3JzIG9uIGEgcGVyLW1hY2hpbmUgYmFzaXM6CisiIHZpbTogdHc9MCB0cz00IHN3PTQKKyIgVmltIGNvbG9yIGZpbGUKKyIgTWFpbnRhaW5lcjoJUm9uIEFhcm9uIDxyb25Acm9ud2FyZS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAwMgorCitzZXQgYmFja2dyb3VuZD1kYXJrCitoaSBjbGVhcgoraWYgZXhpc3RzKCJzeW50YXhfb24iKQorICBzeW50YXggcmVzZXQKK2VuZGlmCitsZXQgZzpjb2xvcnNfbmFtZSA9ICJyb24iCitoaSBOb3JtYWwJCWd1aWZnPWN5YW4JZ3VpYmc9YmxhY2sKK2hpIE5vblRleHQJCWd1aWZnPWJyb3duCitoaSBjb21tZW50CQlndWlmZz1ncmVlbgoraGkgY29uc3RhbnQJCWd1aWZnPWN5YW4JZ3VpPWJvbGQKK2hpIGlkZW50aWZpZXIJZ3VpZmc9Y3lhbglndWk9Tk9ORQoraGkgc3RhdGVtZW50CWd1aWZnPWxpZ2h0Ymx1ZQlndWk9Tk9ORQoraGkgcHJlcHJvYwkJZ3VpZmc9UGluazIKK2hpIHR5cGUJCQlndWlmZz1zZWFncmVlbglndWk9Ym9sZAoraGkgc3BlY2lhbAkJZ3VpZmc9eWVsbG93CitoaSBFcnJvck1zZwkJZ3VpZmc9QmxhY2sJZ3VpYmc9UmVkCitoaSBXYXJuaW5nTXNnCWd1aWZnPUJsYWNrCWd1aWJnPUdyZWVuCitoaSBFcnJvcgkJZ3VpYmc9UmVkCitoaSBUb2RvCQkJZ3VpZmc9QmxhY2sJZ3VpYmc9b3JhbmdlCitoaSBDdXJzb3IJCWd1aWJnPSM2MGEwNjAgZ3VpZmc9IzAwZmYwMAoraGkgU2VhcmNoCQlndWliZz1saWdodHNsYXRlYmx1ZQoraGkgSW5jU2VhcmNoCWd1aT1OT05FIGd1aWJnPXN0ZWVsYmx1ZQoraGkgTGluZU5yCQlndWlmZz1kYXJrZ3JleQoraGkgdGl0bGUJCWd1aWZnPWRhcmtncmV5CitoaSBTdGF0dXNMaW5lTkMJZ3VpPU5PTkUgZ3VpZmc9bGlnaHRibHVlIGd1aWJnPWRhcmtibHVlCitoaSBTdGF0dXNMaW5lCWd1aT1ib2xkCWd1aWZnPWN5YW4JZ3VpYmc9Ymx1ZQoraGkgbGFiZWwJCWd1aWZnPWdvbGQyCitoaSBvcGVyYXRvcgkJZ3VpZmc9b3JhbmdlCitoaSBjbGVhciBWaXN1YWwKK2hpIFZpc3VhbAkJdGVybT1yZXZlcnNlIGN0ZXJtPXJldmVyc2UgZ3VpPXJldmVyc2UKK2hpIERpZmZDaGFuZ2UgICBndWliZz1kYXJrZ3JlZW4KK2hpIERpZmZUZXh0CQlndWliZz1vbGl2ZWRyYWIKK2hpIERpZmZBZGQJCWd1aWJnPXNsYXRlYmx1ZQoraGkgRGlmZkRlbGV0ZSAgIGd1aWJnPWNvcmFsCitoaSBGb2xkZWQJCWd1aWJnPWdyYXkzMAoraGkgRm9sZENvbHVtbglndWliZz1ncmF5MzAgZ3VpZmc9d2hpdGUKK2hpIGNJZjAJCQlndWlmZz1ncmF5CmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbG9ycy9zaGluZS52aW0gYi9ydW50aW1lL2NvbG9ycy9zaGluZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjNzJiMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29sb3JzL3NoaW5lLnZpbQpAQCAtMCwwICsxLDYwIEBACisiIFZpbSBjb2xvciBmaWxlCisiIE1haW50YWluZXI6CVlhc3VoaXJvIE1hdHN1bW90byA8bWF0dG5AbWFpbC5nb28ubmUuanA+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAyNQorCisiIFRoaXMgbG9vayBsaWtlIG5vcm1hbCB0ZXh0IGVkaXRvci4KKyIgVGhpcyBjb2xvciBzY2hlbWUgdXNlcyBhIGxpZ2h0IGJhY2tncm91bmQuCisKKyIgRmlyc3QgcmVtb3ZlIGFsbCBleGlzdGluZyBoaWdobGlnaHRpbmcuCitzZXQgYmFja2dyb3VuZD1saWdodAoraGkgY2xlYXIKK2lmIGV4aXN0cygic3ludGF4X29uIikKKyAgc3ludGF4IHJlc2V0CitlbmRpZgorCitsZXQgY29sb3JzX25hbWUgPSAic2hpbmUiCisKK2hpIE5vcm1hbCBjdGVybWJnPVdoaXRlIGN0ZXJtZmc9QmxhY2sgZ3VpZmc9QmxhY2sgZ3VpYmc9V2hpdGUKKworIiBHcm91cHMgdXNlZCBpbiB0aGUgJ2hpZ2hsaWdodCcgYW5kICdndWljdXJzb3InIG9wdGlvbnMgZGVmYXVsdCB2YWx1ZS4KK2hpIEVycm9yTXNnIHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1EYXJrUmVkIGN0ZXJtZmc9V2hpdGUgZ3VpYmc9UmVkIGd1aWZnPVdoaXRlCitoaSBJbmNTZWFyY2ggdGVybT1yZXZlcnNlIGN0ZXJtPXJldmVyc2UgZ3VpPXJldmVyc2UKK2hpIE1vZGVNc2cgdGVybT1ib2xkIGN0ZXJtPWJvbGQgZ3VpPWJvbGQKK2hpIFN0YXR1c0xpbmUgdGVybT1yZXZlcnNlLGJvbGQgY3Rlcm09cmV2ZXJzZSxib2xkIGd1aT1yZXZlcnNlLGJvbGQKK2hpIFN0YXR1c0xpbmVOQyB0ZXJtPXJldmVyc2UgY3Rlcm09cmV2ZXJzZSBndWk9cmV2ZXJzZQoraGkgVmVydFNwbGl0IHRlcm09cmV2ZXJzZSBjdGVybT1yZXZlcnNlIGd1aT1yZXZlcnNlCitoaSBWaXN1YWwgdGVybT1yZXZlcnNlIGN0ZXJtPXJldmVyc2UgZ3VpPXJldmVyc2UgZ3VpZmc9R3JleSBndWliZz1mZworaGkgVmlzdWFsTk9TIHRlcm09dW5kZXJsaW5lLGJvbGQgY3Rlcm09dW5kZXJsaW5lLGJvbGQgZ3VpPXVuZGVybGluZSxib2xkCitoaSBEaWZmVGV4dCB0ZXJtPXJldmVyc2UgY3Rlcm09Ym9sZCBjdGVybWJnPVJlZCBndWk9Ym9sZCBndWliZz1SZWQKK2hpIEN1cnNvciBjdGVybWJnPUdyZWVuIGd1aWJnPUdyZWVuIGd1aWZnPUJsYWNrCitoaSBsQ3Vyc29yIGd1aWJnPUN5YW4gZ3VpZmc9QmxhY2sKK2hpIERpcmVjdG9yeSB0ZXJtPWJvbGQgY3Rlcm1mZz1MaWdodFJlZCBndWlmZz1SZWQKK2hpIExpbmVOciB0ZXJtPXVuZGVybGluZSBjdGVybWZnPVllbGxvdyBndWlmZz1ZZWxsb3cKK2hpIE1vcmVNc2cgdGVybT1ib2xkIGN0ZXJtZmc9TGlnaHRHcmVlbiBndWk9Ym9sZCBndWlmZz1TZWFHcmVlbgoraGkgTm9uVGV4dCB0ZXJtPWJvbGQgY3Rlcm1mZz1MaWdodEJsdWUgZ3VpPWJvbGQgZ3VpZmc9TGlnaHRCbHVlIGd1aWJnPWdyZXk5MAoraGkgUXVlc3Rpb24gdGVybT1zdGFuZG91dCBjdGVybWZnPUxpZ2h0R3JlZW4gZ3VpPWJvbGQgZ3VpZmc9R3JlZW4KK2hpIFNlYXJjaCB0ZXJtPXJldmVyc2UgY3Rlcm1iZz1ZZWxsb3cgY3Rlcm1mZz1CbGFjayBndWliZz1ZZWxsb3cgZ3VpZmc9QmxhY2sKK2hpIFNwZWNpYWxLZXkgdGVybT1ib2xkIGN0ZXJtZmc9TGlnaHRCbHVlIGd1aWZnPUJsdWUKK2hpIFRpdGxlIHRlcm09Ym9sZCBjdGVybWZnPUxpZ2h0TWFnZW50YSBndWk9Ym9sZCBndWlmZz1NYWdlbnRhCitoaSBXYXJuaW5nTXNnIHRlcm09c3RhbmRvdXQgY3Rlcm1mZz1MaWdodFJlZCBndWlmZz1SZWQKK2hpIFdpbGRNZW51IHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1ZZWxsb3cgY3Rlcm1mZz1CbGFjayBndWliZz1ZZWxsb3cgZ3VpZmc9QmxhY2sKK2hpIEZvbGRlZCB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9TGlnaHRHcmV5IGN0ZXJtZmc9RGFya0JsdWUgZ3VpYmc9TGlnaHRHcmV5IGd1aWZnPURhcmtCbHVlCitoaSBGb2xkQ29sdW1uIHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1MaWdodEdyZXkgY3Rlcm1mZz1EYXJrQmx1ZSBndWliZz1HcmV5IGd1aWZnPURhcmtCbHVlCitoaSBEaWZmQWRkIHRlcm09Ym9sZCBjdGVybWJnPURhcmtCbHVlIGd1aWJnPURhcmtCbHVlCitoaSBEaWZmQ2hhbmdlIHRlcm09Ym9sZCBjdGVybWJnPURhcmtNYWdlbnRhIGd1aWJnPURhcmtNYWdlbnRhCitoaSBEaWZmRGVsZXRlIHRlcm09Ym9sZCBjdGVybWZnPUJsdWUgY3Rlcm1iZz1EYXJrQ3lhbiBndWk9Ym9sZCBndWlmZz1CbHVlIGd1aWJnPURhcmtDeWFuCisKK2hpIENvbW1lbnQgY3Rlcm1mZz1EYXJrR3JleSBjdGVybWJnPVdoaXRlIGd1aWZnPURhcmtHcmV5IGd1aT1ib2xkCitoaSBTcGVjaWFsQ2hhciBjdGVybWZnPURhcmtHcmV5IGN0ZXJtYmc9V2hpdGUgZ3VpZmc9RGFya0dyZXkgZ3VpPWJvbGQKK2hpIFN0b3JhZ2VDbGFzcyBjdGVybWZnPVJlZCBjdGVybWJnPVdoaXRlIGd1aWZnPVJlZCBndWk9Ym9sZAoraGkgTnVtYmVyIGN0ZXJtZmc9TGlnaHRSZWQgY3Rlcm1iZz1XaGl0ZSBndWlmZz1MaWdodFJlZCBndWk9Ym9sZAorCisiIEdyb3VwcyBmb3Igc3ludGF4IGhpZ2hsaWdodGluZworaGkgQ29uc3RhbnQgdGVybT11bmRlcmxpbmUgY3Rlcm1mZz1NYWdlbnRhIGd1aWZnPSNhMDcwNzAgZ3VpYmc9Z3JleTgwCitoaSBTcGVjaWFsIHRlcm09Ym9sZCBjdGVybWZnPUxpZ2h0UmVkIGd1aWZnPURhcmtPcmFuZ2UgZ3VpYmc9Z3JleTgwCitpZiAmdF9DbyA+IDgKKyAgaGkgU3RhdGVtZW50IHRlcm09Ym9sZCBjdGVybT1ib2xkIGN0ZXJtZmc9RGFya0dyZWVuIGN0ZXJtYmc9V2hpdGUgZ3VpZmc9I2ZmZmY2MCBndWk9Ym9sZAorZW5kaWYKK2hpIElnbm9yZSBjdGVybWZnPUxpZ2h0R3JleSBndWlmZz1ncmV5OTAKKworIiB2aW06IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29sb3JzL3RvcnRlLnZpbSBiL3J1bnRpbWUvY29sb3JzL3RvcnRlLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWQ0YjNmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb2xvcnMvdG9ydGUudmltCkBAIC0wLDAgKzEsNTAgQEAKKyIgVmltIGNvbG9yIGZpbGUKKyIgTWFpbnRhaW5lcjoJVGhvcnN0ZW4gTWFlcnogPGluZm9AbmV0enRvcnRlLmRlPgorIiBMYXN0IENoYW5nZToJMjAwMSBKdWwgMjMKKyIgZ3JleSBvbiBibGFjaworIiBvcHRpbWl6ZWQgZm9yIFRGVCBwYW5lbHMKKworc2V0IGJhY2tncm91bmQ9ZGFyaworaGkgY2xlYXIKK2lmIGV4aXN0cygic3ludGF4X29uIikKKyAgc3ludGF4IHJlc2V0CitlbmRpZgorImNvbG9yc2NoZW1lIGRlZmF1bHQKK2xldCBnOmNvbG9yc19uYW1lID0gInRvcnRlIgorCisiIGhhcmRjb2RlZCBjb2xvcnMgOgorIiBHVUkgQ29tbWVudCA6ICM4MGEwZmYgPSBMaWdodCBibHVlCisKKyIgR1VJCitoaWdobGlnaHQgTm9ybWFsICAgICBndWlmZz1HcmV5ODAJZ3VpYmc9QmxhY2sKK2hpZ2hsaWdodCBTZWFyY2ggICAgIGd1aWZnPUJsYWNrCWd1aWJnPVJlZAlndWk9Ym9sZAoraGlnaGxpZ2h0IFZpc3VhbCAgICAgZ3VpZmc9R3JleTI1CQkJZ3VpPWJvbGQKK2hpZ2hsaWdodCBDdXJzb3IgICAgIGd1aWZnPUJsYWNrCWd1aWJnPUdyZWVuCWd1aT1ib2xkCitoaWdobGlnaHQgU3BlY2lhbCAgICBndWlmZz1PcmFuZ2UKK2hpZ2hsaWdodCBDb21tZW50ICAgIGd1aWZnPSM4MGEwZmYKK2hpZ2hsaWdodCBTdGF0dXNMaW5lIGd1aWZnPWJsdWUJCWd1aWJnPXdoaXRlCitoaWdobGlnaHQgU3RhdGVtZW50ICBndWlmZz1ZZWxsb3cJCQlndWk9Tk9ORQoraGlnaGxpZ2h0IFR5cGUJCQkJCQlndWk9Tk9ORQorCisiIENvbnNvbGUKK2hpZ2hsaWdodCBOb3JtYWwgICAgIGN0ZXJtZmc9TGlnaHRHcmV5CWN0ZXJtYmc9QmxhY2sKK2hpZ2hsaWdodCBTZWFyY2ggICAgIGN0ZXJtZmc9QmxhY2sJY3Rlcm1iZz1SZWQJY3Rlcm09Tk9ORQoraGlnaGxpZ2h0IFZpc3VhbAkJCQkJY3Rlcm09cmV2ZXJzZQoraGlnaGxpZ2h0IEN1cnNvciAgICAgY3Rlcm1mZz1CbGFjawljdGVybWJnPUdyZWVuCWN0ZXJtPWJvbGQKK2hpZ2hsaWdodCBTcGVjaWFsICAgIGN0ZXJtZmc9QnJvd24KK2hpZ2hsaWdodCBDb21tZW50ICAgIGN0ZXJtZmc9Qmx1ZQoraGlnaGxpZ2h0IFN0YXR1c0xpbmUgY3Rlcm1mZz1ibHVlCWN0ZXJtYmc9d2hpdGUKK2hpZ2hsaWdodCBTdGF0ZW1lbnQgIGN0ZXJtZmc9WWVsbG93CQkJY3Rlcm09Tk9ORQoraGlnaGxpZ2h0IFR5cGUJCQkJCQljdGVybT1OT05FCisKKyIgb25seSBmb3IgdmltIDUKK2lmIGhhcygidW5peCIpCisgIGlmIHY6dmVyc2lvbjw2MDAKKyAgICBoaWdobGlnaHQgTm9ybWFsICBjdGVybWZnPUdyZXkJY3Rlcm1iZz1CbGFjawljdGVybT1OT05FCWd1aWZnPUdyZXk4MCAgICAgIGd1aWJnPUJsYWNrCWd1aT1OT05FCisgICAgaGlnaGxpZ2h0IFNlYXJjaCAgY3Rlcm1mZz1CbGFjawljdGVybWJnPVJlZAljdGVybT1ib2xkCWd1aWZnPUJsYWNrICAgICAgIGd1aWJnPVJlZAlndWk9Ym9sZAorICAgIGhpZ2hsaWdodCBWaXN1YWwgIGN0ZXJtZmc9QmxhY2sJY3Rlcm1iZz15ZWxsb3cJY3Rlcm09Ym9sZAlndWlmZz1HcmV5MjUJCQlndWk9Ym9sZAorICAgIGhpZ2hsaWdodCBTcGVjaWFsIGN0ZXJtZmc9TGlnaHRCbHVlCQkJY3Rlcm09Tk9ORQlndWlmZz1MaWdodEJsdWUJCQlndWk9Tk9ORQorICAgIGhpZ2hsaWdodCBDb21tZW50IGN0ZXJtZmc9Q3lhbgkJCWN0ZXJtPU5PTkUJZ3VpZmc9TGlnaHRCbHVlCQkJZ3VpPU5PTkUKKyAgZW5kaWYKK2VuZGlmCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29sb3JzL3plbGxuZXIudmltIGIvcnVudGltZS9jb2xvcnMvemVsbG5lci52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI4NzU4MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29sb3JzL3plbGxuZXIudmltCkBAIC0wLDAgKzEsNTQgQEAKKyIgbG9jYWwgc3ludGF4IGZpbGUgLSBzZXQgY29sb3JzIG9uIGEgcGVyLW1hY2hpbmUgYmFzaXM6CisiIHZpbTogdHc9MCB0cz00IHN3PTQKKyIgVmltIGNvbG9yIGZpbGUKKyIgTWFpbnRhaW5lcjoJUm9uIEFhcm9uIDxyb25Acm9ud2FyZS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAwMgorCitzZXQgYmFja2dyb3VuZD1saWdodAoraGkgY2xlYXIKK2lmIGV4aXN0cygic3ludGF4X29uIikKKyAgc3ludGF4IHJlc2V0CitlbmRpZgorbGV0IGc6Y29sb3JzX25hbWUgPSAiemVsbG5lciIKKworaGkgQ29tbWVudCB0ZXJtPWJvbGQgY3Rlcm1mZz1SZWQgZ3VpZmc9UmVkCitoaSBOb3JtYWwgZ3VpZmc9YmxhY2sgZ3VpYmc9d2hpdGUKK2hpIENvbnN0YW50IHRlcm09dW5kZXJsaW5lIGN0ZXJtZmc9TWFnZW50YSBndWlmZz1NYWdlbnRhCitoaSBTcGVjaWFsIHRlcm09Ym9sZCBjdGVybWZnPU1hZ2VudGEgZ3VpZmc9TWFnZW50YQoraGkgSWRlbnRpZmllciB0ZXJtPXVuZGVybGluZSBjdGVybWZnPUJsdWUgZ3VpZmc9Qmx1ZQoraGkgU3RhdGVtZW50IHRlcm09Ym9sZCBjdGVybWZnPURhcmtSZWQgZ3VpPU5PTkUgZ3VpZmc9QnJvd24KK2hpIFByZVByb2MgdGVybT11bmRlcmxpbmUgY3Rlcm1mZz1NYWdlbnRhIGd1aWZnPVB1cnBsZQoraGkgVHlwZSB0ZXJtPXVuZGVybGluZSBjdGVybWZnPUJsdWUgZ3VpPU5PTkUgZ3VpZmc9Qmx1ZQoraGkgVmlzdWFsIHRlcm09cmV2ZXJzZSBjdGVybWZnPVllbGxvdyBjdGVybWJnPVJlZCBndWk9Tk9ORSBndWlmZz1CbGFjayBndWliZz1ZZWxsb3cKK2hpIFNlYXJjaCB0ZXJtPXJldmVyc2UgY3Rlcm1mZz1CbGFjayBjdGVybWJnPUN5YW4gZ3VpPU5PTkUgZ3VpZmc9QmxhY2sgZ3VpYmc9Q3lhbgoraGkgVGFnIHRlcm09Ym9sZCBjdGVybWZnPURhcmtHcmVlbiBndWlmZz1EYXJrR3JlZW4KK2hpIEVycm9yIHRlcm09cmV2ZXJzZSBjdGVybWZnPTE1IGN0ZXJtYmc9OSBndWliZz1SZWQgZ3VpZmc9V2hpdGUKK2hpIFRvZG8gdGVybT1zdGFuZG91dCBjdGVybWJnPVllbGxvdyBjdGVybWZnPUJsYWNrIGd1aWZnPUJsdWUgZ3VpYmc9WWVsbG93CitoaSAgU3RhdHVzTGluZSB0ZXJtPWJvbGQscmV2ZXJzZSBjdGVybT1OT05FIGN0ZXJtZmc9WWVsbG93IGN0ZXJtYmc9RGFya0dyYXkgZ3VpPU5PTkUgZ3VpZmc9WWVsbG93IGd1aWJnPURhcmtHcmF5CitoaSEgbGluayBNb3JlTXNnIENvbW1lbnQKK2hpISBsaW5rIEVycm9yTXNnIFZpc3VhbAoraGkhIGxpbmsgV2FybmluZ01zZyBFcnJvck1zZworaGkhIGxpbmsgUXVlc3Rpb24gQ29tbWVudAoraGkgbGluayBTdHJpbmcJQ29uc3RhbnQKK2hpIGxpbmsgQ2hhcmFjdGVyCUNvbnN0YW50CitoaSBsaW5rIE51bWJlcglDb25zdGFudAoraGkgbGluayBCb29sZWFuCUNvbnN0YW50CitoaSBsaW5rIEZsb2F0CQlOdW1iZXIKK2hpIGxpbmsgRnVuY3Rpb24JSWRlbnRpZmllcgoraGkgbGluayBDb25kaXRpb25hbAlTdGF0ZW1lbnQKK2hpIGxpbmsgUmVwZWF0CVN0YXRlbWVudAoraGkgbGluayBMYWJlbAkJU3RhdGVtZW50CitoaSBsaW5rIE9wZXJhdG9yCVN0YXRlbWVudAoraGkgbGluayBLZXl3b3JkCVN0YXRlbWVudAoraGkgbGluayBFeGNlcHRpb24JU3RhdGVtZW50CitoaSBsaW5rIEluY2x1ZGUJUHJlUHJvYworaGkgbGluayBEZWZpbmUJUHJlUHJvYworaGkgbGluayBNYWNybwkJUHJlUHJvYworaGkgbGluayBQcmVDb25kaXQJUHJlUHJvYworaGkgbGluayBTdG9yYWdlQ2xhc3MJVHlwZQoraGkgbGluayBTdHJ1Y3R1cmUJVHlwZQoraGkgbGluayBUeXBlZGVmCVR5cGUKK2hpIGxpbmsgU3BlY2lhbENoYXIJU3BlY2lhbAoraGkgbGluayBEZWxpbWl0ZXIJU3BlY2lhbAoraGkgbGluayBTcGVjaWFsQ29tbWVudCBTcGVjaWFsCitoaSBsaW5rIERlYnVnCQlTcGVjaWFsCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL1JFQURNRS50eHQgYi9ydW50aW1lL2NvbXBpbGVyL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwYjk3YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvUkVBRE1FLnR4dApAQCAtMCwwICsxLDExIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBWaW0gc2NyaXB0cyB0byBiZSB1c2VkIHdpdGggYSBzcGVjaWZpYyBjb21waWxlci4KK1RoZXkgYXJlIHVzZWQgd2l0aCB0aGUgIjpjb21waWxlciIgY29tbWFuZC4KKworVGhlc2Ugc2NyaXB0cyB1c3VhbGx5IHNldCBvcHRpb25zLCBmb3IgZXhhbXBsZSAnZXJyb3Jmb3JtYXQnLgorU2VlICI6aGVscCB3cml0ZS1jb21waWxlci1wbHVnaW4iLgorCitJZiB5b3Ugd2FudCB0byB3cml0ZSB5b3VyIG93biBjb21waWxlciBwbHVnaW4sIGhhdmUgYSBsb29rIGF0IHRoZSBvdGhlciBmaWxlcworZm9yIGhvdyB0byBkbyBpdCwgdGhlIGZvcm1hdCBpcyBzaW1wbGUuCisKK0lmIHlvdSB0aGluayBhIGNvbXBpbGVyIHBsdWdpbiB5b3UgaGF2ZSB3cml0dGVuIGlzIHVzZWZ1bCBmb3Igb3RoZXJzLCBwbGVhc2UKK3NlbmQgaXQgdG8gQnJhbUB2aW0ub3JnLgpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9hbnQudmltIGIvcnVudGltZS9jb21waWxlci9hbnQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxY2Q5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL2FudC52aW0KQEAgLTAsMCArMSwzOCBAQAorIiBWaW0gQ29tcGlsZXIgRmlsZQorIiBDb21waWxlcjoJYW50CisiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgorIiBMYXN0IENoYW5nZToJVHVlLCAyNyBBcHIgMjAwNCAxNTowMTo0NSBDRVNUCisKK2lmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisgICAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAiYW50IgorCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworbGV0IHM6Y3BvX3NhdmUgPSAmY3BvCitzZXQgY3BvJnZpbQorCitDb21waWxlclNldCBtYWtlcHJnPWFudAorCisiIGZpcnN0ICBsaW5lOgorIiAgICAgYW50IHdpdGggamlrZXMgK0UsIHdoaWNoIGFzc3VtZXMgIHRoZSBmb2xsb3dpbmcKKyIgICAgIHR3byBwcm9wZXJ0eSBsaW5lcyBpbiB5b3VyICdidWlsZC54bWwnOgorIgorIgkgIDxwcm9wZXJ0eSBuYW1lID0gImJ1aWxkLmNvbXBpbGVyIgkgIHZhbHVlID0gImppa2VzIi8+CisiCSAgPHByb3BlcnR5IG5hbWUgPSAiYnVpbGQuY29tcGlsZXIuZW1hY3MiIHZhbHVlID0gInRydWUiLz4KKyIKKyIgc2Vjb25kIGxpbmU6CisiICAgICBhbnQgd2l0aCBqYXZhYworIgorIiBub3RlIHRoYXQgdGhpcyB3aWxsIHdvcmsgYWxzbyBmb3IgdGFza3MgbGlrZSBbd3RrYnVpbGRdCisiCitzZXRsb2NhbCBlcnJvcmZvcm1hdD1cICUjWyUuJSNdXCAlIyVmOiVsOiV2OiUqXFxkOiUqXFxkOlwgJXQlWyVeOl0lIzolbSwKKyAgICBcJUFcICUjWyUuJSNdXCAlZjolbDpcICVtLCUtWlwgJSNbJS4lI11cICVwXiwlQ1wgJSNbJS4lI11cICUjJW0KKworIiAsJS1DJS4lIworCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvYmNjLnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvYmNjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmQyODRhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci9iY2MudmltCkBAIC0wLDAgKzEsMTkgQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6CQliY2MgLSBCb3JsYW5kIEMKKyIgTWFpbnRhaW5lcjoJRW1pbGUgdmFuIFJhYWlqIChlcmFhaWpAeHM0YWxsLm5sKQorIiBMYXN0IENoYW5nZToJMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAiYmNjIgorCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworIiBBIHdvcmthYmxlIGVycm9yZm9ybWF0IGZvciBCb3JsYW5kIEMKK0NvbXBpbGVyU2V0IGVycm9yZm9ybWF0PSUqW14wLTldJW5cICVmXCAlbDpcICVtCisKKyIgZGVmYXVsdCBtYWtlCitDb21waWxlclNldCBtYWtlcHJnPW1ha2UKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvYmRmLnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvYmRmLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTJkYTc1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci9iZGYudmltCkBAIC0wLDAgKzEsMzAgQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6CSAgICBCREYgdG8gUENGIENvbnZlcnNpb24KKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vY29tcGlsZXIvcGNwL2JkZi8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNS0yMgorIiBhcmNoLXRhZzoJICAgIDJlMmYzYTU1LTE5OWItNDY4Yy1hYTJlLWQ2YjFhN2I4NzgwNgorCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgY3VycmVudF9jb21waWxlciA9ICJiZGYiCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMiAgICAgICAgICAiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK2xldCBzOmNwb19zYXZlID0gJmNwbworc2V0IGNwby09QworCitDb21waWxlclNldCBtYWtlcHJnPWJkZnRvcGNmXCAkKgorCitDb21waWxlclNldCBlcnJvcmZvcm1hdD0lQUJERlwgJXRycm9yXCBvblwgbGluZVwgJWw6XCAlbSwKKyAgICAgIFwlLVolcF4sCisgICAgICBcJUNiZGZ0b3BjZjpcIGJkZlwgaW5wdXRcXCxcICVmXFwsXCBjb3JydXB0LAorICAgICAgXCUtRyUuJSMKKworbGV0ICZjcG8gPSBzOmNwb19zYXZlCit1bmxldCBzOmNwb19zYXZlCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvY2hlY2tzdHlsZS52aW0gYi9ydW50aW1lL2NvbXBpbGVyL2NoZWNrc3R5bGUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjk2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL2NoZWNrc3R5bGUudmltCkBAIC0wLDAgKzEsMjAgQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6CUNoZWNrc3R5bGUKKyIgTWFpbnRhaW5lcjoJRG91ZyBLZWFybnMgPGRqa2VhMkBtdWdjYS5pdHMubW9uYXNoLmVkdS5hdT4KKyIgVVJMOgkJaHR0cDovL211Z2NhLml0cy5tb25hc2guZWR1LmF1L35kamtlYTIvdmltL2NvbXBpbGVyL2NoZWNrc3R5bGUudmltCisiIExhc3QgQ2hhbmdlOgkyMDA0IE1hciAyNworCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgY3VycmVudF9jb21waWxlciA9ICJjaGVja3N0eWxlIgorCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworQ29tcGlsZXJTZXQgbWFrZXByZz1qYXZhXCBjb20ucHVwcHljcmF3bC50b29scy5jaGVja3N0eWxlLk1haW5cIC1mXCBwbGFpbgorCisiIHNhbXBsZSBlcnJvcjogV2ViVGFibGUuamF2YToyODI6ICcrPScgaXMgbm90IHByZWNlZWRlZCB3aXRoIHdoaXRlc3BhY2UuCisiCQlXZWJUYWJsZS5qYXZhOjIwMToxOiAneycgc2hvdWxkIGJlIG9uIHRoZSBwcmV2aW91cyBsaW5lLgorQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9JWY6JWw6XCAlbSwlZjolbDoldjpcICVtLCUtRyUuJSMKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvY3MudmltIGIvcnVudGltZS9jb21waWxlci9jcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3NWQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvY3MudmltCkBAIC0wLDAgKzEsMTkgQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6CW1zIEMjCisiIE1haW50YWluZXI6CUpvc2VwaCBILiBZYW8gKGh5YW9Ac2luYS5jb20pCisiIExhc3QgQ2hhbmdlOgkyMDA0IE1hciAyNworCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgY3VycmVudF9jb21waWxlciA9ICJjcyIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKKyIgZGVmYXVsdCBlcnJvcmZvcm1hdAorQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQmCisKKyIgZGVmYXVsdCBtYWtlCitDb21waWxlclNldCBtYWtlcHJnPWNzY1wgJQpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9kb3QudmltIGIvcnVudGltZS9jb21waWxlci9kb3QudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMjc3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL2RvdC52aW0KQEAgLTAsMCArMSwxNSBAQAorIiBWaW0gY29tcGlsZXIgZmlsZQorIiBDb21waWxlcjogICAgIEFUVCBkb3QKKyIgTWFpbnRhaW5lcjoJTWFyY29zIE1hY2VkbyA8YmFyNGthQGJvbC5jb20uYnI+CisiIExhc3QgQ2hhbmdlOgkyMDA0IE1heSAxNgorCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgY3VycmVudF9jb21waWxlciA9ICJkb3QiCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCitDb21waWxlclNldCBtYWtlcHJnPWRvdFwgLVQkKlwgXCIlOnBcIlwgLW9cIFwiJTpwOnIuJCpcIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9mb3J0cmFuX0YudmltIGIvcnVudGltZS9jb21waWxlci9mb3J0cmFuX0YudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Y2I0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL2ZvcnRyYW5fRi52aW0KQEAgLTAsMCArMSwyNyBAQAorIiBWaW0gY29tcGlsZXIgZmlsZQorIiBDb21waWxlcjoJRm9ydHJhbiBDb21wYW55L05BR1dhcmUgRiBjb21waWxlcgorIiBVUkw6CQlodHRwOi8vd3d3LnVuYi5jYS9jaGVtL2FqaXQvY29tcGlsZXIvZm9ydHJhbl9GLnZpbQorIiBNYWludGFpbmVyOglBaml0IEouIFRoYWtrYXIgKGFqaXQgQVQgdW5iLmNhKTsgPGh0dHA6Ly93d3cudW5iLmNhL2NoZW0vYWppdC8+CisiIFZlcnNpb246CTAuMgorIiBMYXN0IENoYW5nZTogMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAiZm9ydHJhbl9GIgorCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworbGV0IHM6Y3Bvc2V0PSZjcG9wdGlvbnMKK3NldCBjcG9wdGlvbnMtPUMKKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9JXRycm9yOlwgJWZcXCxcIGxpbmVcICVsOiVtLAorICAgICAgXCV0YXJuaW5nOlwgJWZcXCxcIGxpbmVcICVsOiVtLAorICAgICAgXCV0YXRhbFwgRXJyb3I6XCAlZlxcLFwgbGluZVwgJWw6JW0sCisgICAgICBcJS1HJS4lIworQ29tcGlsZXJTZXQgbWFrZXByZz1GCisKK2xldCAmY3BvcHRpb25zPXM6Y3Bvc2V0Cit1bmxldCBzOmNwb3NldApkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9mb3J0cmFuX2N2LnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvZm9ydHJhbl9jdi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5ZDNiMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvZm9ydHJhbl9jdi52aW0KQEAgLTAsMCArMSwzMCBAQAorIiBWaW0gY29tcGlsZXIgZmlsZQorIiBDb21waWxlcjoJQ29tcGFxIFZpc3VhbCBGb3J0cmFuCisiIE1haW50YWluZXI6CUpvaC4tRy4gU2ltb24gKGpvaGFubi1ndWVudGVyLnNpbW9uQGxpbmRlLWxlLmNvbSkKKyIgTGFzdCBDaGFuZ2U6CTExLzA1LzIwMDIKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAiZm9ydHJhbl9jdiIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK2xldCBzOmNwb3NldCA9ICZjcG9wdGlvbnMKK3NldCBjcG9wdGlvbnMtPUMKKworIiBBIHdvcmthYmxlIGVycm9yZm9ybWF0IGZvciBDb21wYXEgVmlzdWFsIEZvcnRyYW4KK0NvbXBpbGVyU2V0IGVycm9yZm9ybWF0PQorCQlcJUUlZiglbClcIDpcIEVycm9yOiVtLAorCQlcJVclZiglbClcIDpcIFdhcm5pbmc6JW0sCisJCVwlLVolcCVeJS4lIywKKwkJXCUtRyUuJSMsCisiIENvbXBpbGVyIGNhbGwKK0NvbXBpbGVyU2V0IG1ha2Vwcmc9ZGZcIC9ub2xvZ29cIC9ub29ialwgL2NcICUKKyIgVmlzdWFsIGZvcnRyYW4gZGVmYXVsdHMgdG8gcHJpbnRpbmcgb3V0cHV0IG9uIHN0ZGVycgorIiBBZGp1c3Qgb3B0aW9uIHNoZWxscGlwZSBhY2NvcmRpbmdseQorCitsZXQgJmNwb3B0aW9ucyA9IHM6Y3Bvc2V0Cit1bmxldCBzOmNwb3NldApkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9mb3J0cmFuX2VsZjkwLnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvZm9ydHJhbl9lbGY5MC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjMzNjZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvZm9ydHJhbl9lbGY5MC52aW0KQEAgLTAsMCArMSwzMyBAQAorIiBWaW0gY29tcGlsZXIgZmlsZQorIiBDb21waWxlcjoJRXNzZW50aWFsIExhaGV5IEZvcnRyYW4gOTAKKyIJCVByb2JhYmx5IGFsc28gd29ya3MgZm9yIExhaGV5IEZvcnRyYW4gOTAKKyIgVVJMOgkJaHR0cDovL3d3dy51bmIuY2EvY2hlbS9haml0L2NvbXBpbGVyL2ZvcnRyYW5fZWxmOTAudmltCisiIE1haW50YWluZXI6CUFqaXQgSi4gVGhha2thciAoYWppdCBBVCB1bmIuY2EpOyA8aHR0cDovL3d3dy51bmIuY2EvY2hlbS9haml0Lz4KKyIgVmVyc2lvbjoJMC4yCisiIExhc3QgQ2hhbmdlOiAyMDA0IE1hciAyNworCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgY3VycmVudF9jb21waWxlciA9ICJmb3J0cmFuX2VsZjkwIgorCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworbGV0IHM6Y3Bvc2V0PSZjcG9wdGlvbnMKK3NldCBjcG9wdGlvbnMtPUMKKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9XCVBTGluZVwgJWxcXCxcIGZpbGVcICVmLAorICAgICAgXCVDJXRBUk5JTkdcIC0tJW0sCisgICAgICBcJUMldEFUQUxcIC0tJW0sCisgICAgICBcJUMldEJPUlRcIC0tJW0sCisgICAgICBcJStDJVxcbCUuJSNcLiwKKyAgICAgIFwlQyVwXHwsCisgICAgICBcJUMlLiUjLAorICAgICAgXCVaJSQsCisgICAgICBcJS1HJS4lIworQ29tcGlsZXJTZXQgbWFrZXByZz1lbGY5MAorCitsZXQgJmNwb3B0aW9ucz1zOmNwb3NldAordW5sZXQgczpjcG9zZXQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvZm9ydHJhbl9nNzcudmltIGIvcnVudGltZS9jb21waWxlci9mb3J0cmFuX2c3Ny52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwMThlNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvZm9ydHJhbl9nNzcudmltCkBAIC0wLDAgKzEsNDggQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6ICAgICBnNzcgKEdOVSBGb3J0cmFuKQorIiBNYWludGFpbmVyOiAgIFJhbGYgV2lsZGVuaHVlcyA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKyIgTGFzdCBDaGFuZ2U6ICAkRGF0ZSQKKyIgJFJldmlzaW9uJAorCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgY3VycmVudF9jb21waWxlciA9ICJmb3J0cmFuX2c3NyIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK2xldCBzOmNwb19zYXZlID0gJmNwbworc2V0IGNwby09QworCisiIE5vdGU6IFRoZSBlcnJvcmZvcm1hdCBhc3N1bWVzIEdOVSBtYWtlCisKKyIgc2FtcGxlIG11bHRpbGluZSBlcnJvcnMgKGJlc2lkZXMgZ2NjIGJhY2tlbmQgb25lLWxpbmVycyk6CisiIGdldi5mOjE0OgorIgkgICBwYXJhbWV0ZXIgVVBMTyA9ICdVcHBlci10cmlhbmdsZScKKyIJICAgXgorIiBVbnN1cHBvcnRlZCBWWFQgc3RhdGVtZW50IGF0ICheKQorIiBnZXYuZjo2OgorIgkgICBpbnRlZ2VyCSAgIGRlc2NhKCAqICksIGRlc2NiKCAqICkKKyIJCQkgICAxCisiIGdldi5mOjE5OiAoY29udGludWVkKToKKyIJICAgZW5kIHN1YnJvdXRpbmUKKyIJICAgMgorIiBJbnZhbGlkIGRlY2xhcmF0aW9uIG9mIG9yIHJlZmVyZW5jZSB0byBzeW1ib2wgYGRlc2NhJyBhdCAoMikgW2luaXRpYWxseSBzZWVuIGF0ICgxKV0KKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9CisJXCVPbWFrZTpcICVyLAorCVwlZjolbDpcIHdhcm5pbmc6XCAlbSwKKwlcJUElZjolbDpcIChjb250aW51ZWQpOiwKKwlcJVclZjolbDpcIHdhcm5pbmc6LAorCVwlQSVmOiVsOlwgLAorCVwlLUNcIFwgXCAlcCUqWzAxMjM0NTY3ODleXSUuJSMsCisJXCUtQ1wgXCBcICUuJSMsCisJXCVEJSpcXGFbJSpcXGRdOlwgRW50ZXJpbmdcIGRpcmVjdG9yeVwgYCVmJywKKwlcJVglKlxcYVslKlxcZF06XCBMZWF2aW5nXCBkaXJlY3RvcnlcIGAlZicsCisJXCVETWFraW5nXCAlKlxcYVwgaW5cICVmLAorCVwlWiVtCisKK2xldCAmY3BvID0gczpjcG9fc2F2ZQordW5sZXQgczpjcG9fc2F2ZQpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9mb3J0cmFuX2xmOTUudmltIGIvcnVudGltZS9jb21waWxlci9mb3J0cmFuX2xmOTUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NWZlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL2ZvcnRyYW5fbGY5NS52aW0KQEAgLTAsMCArMSwyNyBAQAorIiBWaW0gY29tcGlsZXIgZmlsZQorIiBDb21waWxlcjoJTGFoZXkvRnVqaXRzdSBGb3J0cmFuIDk1CisiIFVSTDoJCWh0dHA6Ly93d3cudW5iLmNhL2NoZW0vYWppdC9jb21waWxlci9mb3J0cmFuX2xmOTUudmltCisiIE1haW50YWluZXI6CUFqaXQgSi4gVGhha2thciAoYWppdCBBVCB1bmIuY2EpOyA8aHR0cDovL3d3dy51bmIuY2EvY2hlbS9haml0Lz4KKyIgVmVyc2lvbjoJMC4yCisiIExhc3QgQ2hhbmdlOiAyMDA0IE1hciAyNworCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgY3VycmVudF9jb21waWxlciA9ICJmb3J0cmFuX2xmOTUiCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCitsZXQgczpjcG9zZXQ9JmNwb3B0aW9ucworc2V0IGNwb3B0aW9ucy09QworCitDb21waWxlclNldCBlcnJvcmZvcm1hdD1cICUjJW4tJXQ6XCBcIiVmXCJcXCxcIGxpbmVcICVsOiVtLAorICAgICAgXEVycm9yXCBMSU5LXC4lbjolbSwKKyAgICAgIFxXYXJuaW5nXCBMSU5LXC4lbjolbSwKKyAgICAgIFwlLUclLiUjCitDb21waWxlclNldCBtYWtlcHJnPWxmOTUKKworbGV0ICZjcG9wdGlvbnM9czpjcG9zZXQKK3VubGV0IHM6Y3Bvc2V0CmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL2hwX2FjYy52aW0gYi9ydW50aW1lL2NvbXBpbGVyL2hwX2FjYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmNjFiMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvaHBfYWNjLnZpbQpAQCAtMCwwICsxLDI4IEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOglIUCBhQ0MKKyIgTWFpbnRhaW5lcjoJTWF0dGhpYXMgVWxyaWNoIDxtYXR0aGlhcy11bHJpY2hAd2ViLmRlPgorIiBVUkw6CQlodHRwOi8vd3d3LnN1YmhvbWUuZGUvdmltL2hwX2FjYy52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWFyIDI3CisiCisiICBhQ0MgLS12ZXJzaW9uIHNheXM6ICJIUCBBTlNJIEMrKyBCMzkxMEIgQS4wMy4xMyIKKyIgIFRoaXMgY29tcGlsZXIgaGFzIGJlZW4gdGVzdGVkIG9uOgorIiAgICAgICBocC11eCAxMC4yMCwgaHAtdXggMTEuMCBhbmQgaHAtdXggMTEuMTEgKDY0Yml0KQorIgorIiAgVGltIEJyb3duJ3MgYUNDIGlzOiAiSFAgQU5TSSBDKysgQjM5MTBCIEEuMDMuMzMiCisiICBhbmQgaXQgYWxzbyB3b3JrcyBmaW5lLi4uCisKK2lmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBjdXJyZW50X2NvbXBpbGVyID0gImhwX2FjYyIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK0NvbXBpbGVyU2V0IGVycm9yZm9ybWF0PSVBJXRycm9yXCAlblw6XCBcIiVmXCJcXCxcIGxpbmVcICVsXCBcI1wgJW0sCisgICAgICAgICBcJUEldGFybmluZ1wgJW5cOlwgXCIlZlwiXFwsXCBsaW5lXCAlbFwgXCNcICVtXCAlIywKKyAgICAgICAgIFwlWlwgXCBcIFwgJXBeJS4lIywKKyAgICAgICAgIFwlLUMlLiUjCisKKyIgdmltOnRzPTg6c3c9NDpjaW5kZW50CmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL2ljYy52aW0gYi9ydW50aW1lL2NvbXBpbGVyL2ljYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxZmJhNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvaWNjLnZpbQpAQCAtMCwwICsxLDE4IEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOgkJaWNjIC0gSW50ZWwgQysrCisiIE1haW50YWluZXI6IFBldGVyIFB1Y2sgPFB0clBja0BuZXRzY2FwZS5uZXQ+CisiIExhc3QgQ2hhbmdlOiAyMDA0IE1hciAyNworCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgY3VycmVudF9jb21waWxlciA9ICJpY2MiCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCisiIEkgdGhpbmsgdGhhdCBJbnRlbCBpcyBjYWxsaW5nIHRoZSBjb21waWxlciBpY2wgdW5kZXIgV2luZG93cworCitDb21waWxlclNldCBlcnJvcmZvcm1hdD0lLVolcF4sJWYoJWwpOlwgcmVtYXJrXCAjJW46JW0sJWYoJWwpXCA6XCAoY29sLlwgJWMpXCByZW1hcms6XCAlbSwlRSVmKCVsKTpcIGVycm9yOlwgJW0sJUUlZiglbCk6XCBlcnJvcjpcICMlbjpcICVtLCVXJWYoJWwpOlwgd2FybmluZ1wgIyVuOlwgJW0sJVclZiglbCk6XCB3YXJuaW5nOlwgJW0sJS1DJS4lIworCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL2ludGVsLnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvaW50ZWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODM4MjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL2ludGVsLnZpbQpAQCAtMCwwICsxLDIxIEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOiAgICAgSW50ZWwgQysrIDcuMQorIiBNYWludGFpbmVyOiAgIERhdmlkIEhhcnJpc29uIDxkYXZpZF9qckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisiIExhc3QgQ2hhbmdlOiAgMjAwNCBNYXkgMTYKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAiaW50ZWwiCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCitDb21waWxlclNldCBlcnJvcmZvcm1hdD0lRSVmKCVsKTpcIGVycm9yOlwgJW0sCisJCSAgICBcJVclZiglbCk6XCB3YXJuaW5nOlwgJW0sCisJCSAgICBcJUklZiglbCk6XCByZW1hcmtcICMlbjpcICVtLAorCQkgICAgXCUrQ1wgXCAlbS4sCisJCSAgICBcJS1aXCBcICVwXiwKKwkJICAgIFwlLUdcXHMlIywKKwkJICAgIFwlLUclLiUjCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL2lyaXg1X2MudmltIGIvcnVudGltZS9jb21waWxlci9pcml4NV9jLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2JiOWUxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci9pcml4NV9jLnZpbQpAQCAtMCwwICsxLDIxIEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOglTR0kgSVJJWCA1LjMgY2MKKyIgTWFpbnRhaW5lcjoJRGF2aWQgSGFycmlzb24gPGRhdmlkX2pyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWFyIDI3CisKK2lmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBjdXJyZW50X2NvbXBpbGVyID0gImlyaXg1X2MiCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCitDb21waWxlclNldCBlcnJvcmZvcm1hdD1cJUVjZmU6XCBFcnJvcjpcICVmXFwsXCBsaW5lXCAlbDpcICVtLAorCQkgICAgIFwlV2NmZTpcIFdhcm5pbmc6XCAlbjpcICVmXFwsXCBsaW5lXCAlbDpcICVtLAorCQkgICAgIFwlV2NmZTpcIFdhcm5pbmdcICVuOlwgJWZcXCxcIGxpbmVcICVsOlwgJW0sCisJCSAgICAgXCVXKCVsKVwgXCBXYXJuaW5nXCAlbjpcICVtLAorCQkgICAgIFwlLVpcICVwXiwKKwkJICAgICBcLUdcXHMlIywKKwkJICAgICBcJS1HJS4lIwpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9pcml4NV9jcHAudmltIGIvcnVudGltZS9jb21waWxlci9pcml4NV9jcHAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MDU3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL2lyaXg1X2NwcC52aW0KQEAgLTAsMCArMSwyMSBAQAorIiBWaW0gY29tcGlsZXIgZmlsZQorIiBDb21waWxlcjoJU0dJIElSSVggNS4zIENDIG9yIE5DQworIiBNYWludGFpbmVyOglEYXZpZCBIYXJyaXNvbiA8ZGF2aWRfanJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAiaXJpeDVfY3BwIgorCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9JUVcIiVmXCJcXCxcIGxpbmVcICVsOlwgZXJyb3IoJW4pOlwgLAorCQkgICAgXCVFXCIlZlwiXFwsXCBsaW5lXCAlbDpcIGVycm9yKCVuKTpcICVtLAorCQkgICAgXCVXXCIlZlwiXFwsXCBsaW5lXCAlbDpcIHdhcm5pbmcoJW4pOlwgJW0sCisJCSAgICBcJStJQysrXCBwcmVsaW5rZXI6XCAlbSwKKwkJICAgICAgXCUtWlwgXCAlcCVeLAorCQkgICAgICBcJStDXCAlXFx7MTB9JS4lIywKKwkJICAgICAgXCUtRyUuJSMKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvamF2YWMudmltIGIvcnVudGltZS9jb21waWxlci9qYXZhYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2Zjc2NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvamF2YWMudmltCkBAIC0wLDAgKzEsMTggQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6ICAgICBqYXZhYworIiBNYWludGFpbmVyOiAgIERvdWcgS2Vhcm5zIDxkamtlYTJAbXVnY2EuaXRzLm1vbmFzaC5lZHUuYXU+CisiIFVSTDoJCWh0dHA6Ly9tdWdjYS5pdHMubW9uYXNoLmVkdS5hdS9+ZGprZWEyL3ZpbS9jb21waWxlci9qYXZhYy52aW0KKyIgTGFzdCBDaGFuZ2U6ICAyMDA0IEFwciAxNQorCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgY3VycmVudF9jb21waWxlciA9ICJqYXZhYyIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK0NvbXBpbGVyU2V0IG1ha2Vwcmc9amF2YWMKKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9JUUlZjolbDpcICVtLCUtWiVwXiwlLUMlLiUjLCUtRyUuJSMKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvamlrZXMudmltIGIvcnVudGltZS9jb21waWxlci9qaWtlcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU2Njk2OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvamlrZXMudmltCkBAIC0wLDAgKzEsMTggQEAKKyIgVmltIENvbXBpbGVyIEZpbGUKKyIgQ29tcGlsZXI6CUppa2VzCisiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlOgkyMDA0IE1hciAyNworIiBVUkw6CQlodHRwOi8vbXl3ZWJwYWdlLm5ldHNjYXBlLmNvbS9zaGFycHBlb3BsZS92aW0vY29tcGlsZXIKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAiamlrZXMiCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCisiIEppa2VzIGRlZmF1bHRzIHRvIHByaW50aW5nIG91dHB1dCBvbiBzdGRlcnIKK0NvbXBpbGVyU2V0IG1ha2Vwcmc9amlrZXNcIC1Yc3Rkb3V0XCArRVwgXCIlXCIKK0NvbXBpbGVyU2V0IGVycm9yZm9ybWF0PSVmOiVsOiV2OiUqXFxkOiUqXFxkOiUqXFxzJW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvbWlwc19jLnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvbWlwc19jLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlYWMwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci9taXBzX2MudmltCkBAIC0wLDAgKzEsMjEgQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6CVNHSSBJUklYIDYuNSBNSVBTIEMgKGNjKQorIiBNYWludGFpbmVyOglEYXZpZCBIYXJyaXNvbiA8ZGF2aWRfanJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAibWlwc19jIgorCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9JUVjY1wtJW5cICUuJSM6XCBFUlJPUlwgRmlsZVwgPVwgJWZcJVxcLFwgTGluZVwgPVwgJWwsCisJCSAgICBcJVdjY1wtJW5cICUuJSM6XCBXQVJOSU5HXCBGaWxlXCA9XCAlZlwlXFwsXCBMaW5lXCA9XCAlbCwKKwkJICAgIFwlSWNjXC0lblwgJS4lIzpcIFJFTUFSS1wgRmlsZVwgPVwgJWZcJVxcLFwgTGluZVwgPVwgJWwsCisJCSAgICBcJStDXCBcICVtLiwKKwkJICAgIFwlLVpcIFwgJXBeLAorCQkgICAgXCUtR1xccyUjLAorCQkgICAgXCUtRyUuJSMKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvbWlwc3Byb19jODkudmltIGIvcnVudGltZS9jb21waWxlci9taXBzcHJvX2M4OS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4YTgwMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvbWlwc3Byb19jODkudmltCkBAIC0wLDAgKzEsMjIgQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6CVNHSSBJUklYIDYuNSBNSVBTUHJvIEMgKGM4OSkKKyIgTWFpbnRhaW5lcjoJRGF2aWQgSGFycmlzb24gPGRhdmlkX2pyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWFyIDI3CisKK2lmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBjdXJyZW50X2NvbXBpbGVyID0gIm1pcHNwcm9fYzg5IgorCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9JUVjY1wtJW5cICUuJSM6XCBFUlJPUlwgRmlsZVwgPVwgJWZcJVxcLFwgTGluZVwgPVwgJWwsCisJCSAgICBcJVdjY1wtJW5cICUuJSM6XCBXQVJOSU5HXCBGaWxlXCA9XCAlZlwlXFwsXCBMaW5lXCA9XCAlbCwKKwkJICAgIFwlSWNjXC0lblwgJS4lIzpcIFJFTUFSS1wgRmlsZVwgPVwgJWZcJVxcLFwgTGluZVwgPVwgJWwsCisJCSAgICBcJS1aJXAlXiwKKwkJICAgIFwlK0NcICVcXHsxMH0lbSUuLAorCQkgICAgXCUrQ1wgXCAlbSwKKwkJICAgIFwlLUdcXHMlIywKKwkJICAgIFwlLUclLiUjCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL21pcHNwcm9fY3BwLnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvbWlwc3Byb19jcHAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNjA3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL21pcHNwcm9fY3BwLnZpbQpAQCAtMCwwICsxLDIxIEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOglTR0kgSVJJWCA2LjUgTUlQU1BybyBDKysgKENDKQorIiBNYWludGFpbmVyOglEYXZpZCBIYXJyaXNvbiA8ZGF2aWRfanJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAibWlwc3Byb19jcHAiCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCitDb21waWxlclNldCBlcnJvcmZvcm1hdD0lRWNjXC0lblwgJS4lIzpcIEVSUk9SXCBGaWxlXCA9XCAlZlwlXFwsXCBMaW5lXCA9XCAlbCwKKwkJICAgIFwlV2NjXC0lblwgJS4lIzpcIFdBUk5JTkdcIEZpbGVcID1cICVmXCVcXCxcIExpbmVcID1cICVsLAorCQkgICAgXCVJY2NcLSVuXCAlLiUjOlwgUkVNQVJLXCBGaWxlXCA9XCAlZlwlXFwsXCBMaW5lXCA9XCAlbCwKKwkJICAgIFwlK0NcIFwgJW0uLAorCQkgICAgXCUtWlwgXCAlcF4sCisJCSAgICBcJS1HXFxzJSMsCisJCSAgICBcJS1HJS4lIwpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9tb2RlbHNpbV92Y29tLnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvbW9kZWxzaW1fdmNvbS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhMWJkZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvbW9kZWxzaW1fdmNvbS52aW0KQEAgLTAsMCArMSwyMCBAQAorIiBWaW0gQ29tcGlsZXIgRmlsZQorIiBDb21waWxlcjoJTW9kZWxzaW0gVmNvbQorIiBNYWludGFpbmVyOglQYXVsIEJhbGVtZSA8cGJhbGVtZUBtYWlsLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CVNlcHRlbWJlciA4LCAyMDAzCisiIFRoYW5rcyB0bzogICAgYWxsYW5oZXJyaW1hbkBob3RtYWlsLmNvbQorCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgY3VycmVudF9jb21waWxlciA9ICJtb2RlbHNpbV92Y29tIgorCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworInNldGxvY2FsIGVycm9yZm9ybWF0PVwqXCpcICV0UlJPUjpcICVmKCVsKTpcICVtLCV0UlJPUjpcICVmKCVsKTpcICVtLCV0QVJOSU5HXFslKlswLTldXF06XCAlZiglbCk6XCAlbSxcKlwqXCAldFJST1I6XCAlbSwldFJST1I6XCAlbSwldEFSTklOR1xbJSpbMC05XVxdOlwgJW0KKworInNldGxvY2FsIGVycm9yZm9ybWF0PSV0UlJPUjpcICVmKCVsKTpcICVtLCV0QVJOSU5HXFslKlswLTldXF06XCAlbQorQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9XCpcKlwgJXRSUk9SOlwgJWYoJWwpOlwgJW0sXCpcKlwgJXRSUk9SOlwgJW0sXCpcKlwgJXRBUk5JTkc6XCAlbSxcKlwqXCAldE9URTpcICVtLCV0UlJPUjpcICVmKCVsKTpcICVtLCV0QVJOSU5HXFslKlswLTldXF06XCAlZiglbCk6XCAlbSwldFJST1I6XCAlbSwldEFSTklOR1xbJSpbMC05XVxdOlwgJW0KKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9tc3ZjLnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvbXN2Yy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiMWYyNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvbXN2Yy52aW0KQEAgLTAsMCArMSwxNyBAQAorIiBWaW0gY29tcGlsZXIgZmlsZQorIiBDb21waWxlcjoJTWlzY3Jvc29mdCBWaXN1YWwgQworIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXIgMTkKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAibXN2YyIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKKyIgVGhlIGVycm9yZm9ybWF0IGZvciBNU1ZDIGlzIHRoZSBkZWZhdWx0LgorQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQmCitDb21waWxlclNldCBtYWtlcHJnPW5tYWtlCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL25lYXRvLnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvbmVhdG8udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMTg0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL25lYXRvLnZpbQpAQCAtMCwwICsxLDE1IEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOiAgICAgQVRUIG5lYXRvCisiIE1haW50YWluZXI6CU1hcmNvcyBNYWNlZG8gPGJhcjRrYUBib2wuY29tLmJyPgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXkgMTYKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAibmVhdG8iCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCitDb21waWxlclNldCBtYWtlcHJnPW5lYXRvXCAtVCQqXCBcIiU6cFwiXCAtb1wgXCIlOnA6ci4kKlwiCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL29uc2dtbHMudmltIGIvcnVudGltZS9jb21waWxlci9vbnNnbWxzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzBkM2UyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci9vbnNnbWxzLnZpbQpAQCAtMCwwICsxLDI0IEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOglvbnNnbWxzCisiIE1haW50YWluZXI6CVJvYmVydCBSb3dzb21lIDxyb3dzb21lQHdhbS51bWQuZWR1PgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAib25zZ21scyIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK2xldCBzOmNwb19zYXZlID0gJmNwbworc2V0IGNwby09QworCitDb21waWxlclNldCBtYWtlcHJnPW9uc2dtbHNcIC1zXCAlCisKK0NvbXBpbGVyU2V0IGVycm9yZm9ybWF0PW9uc2dtbHM6JWY6JWw6JWM6JXQ6JW0sCisJCSAgICBcb25zZ21sczolZjolbDolYzolbQorCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvcGJ4LnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvcGJ4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgxZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci9wYngudmltCkBAIC0wLDAgKzEsMjAgQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6CUFwcGxlIFByb2plY3QgQnVpbGRlcgorIiBNYWludGFpbmVyOglBbGV4YW5kZXIgdm9uIEJlbG93IChwdWJsaWNAdm9uQmVsb3cuQ29tKQorIiBMYXN0IENoYW5nZToJMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgIGZpbmlzaAorZW5kaWYKK2xldCBjdXJyZW50X2NvbXBpbGVyID0gInBieCIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKKyIgVGhlIGNvbXBpbGVyIGFjdHVhbGx5IGlzIGdjYywgc28gdGhlIGVycm9yZm9ybWF0IGlzIHVuY2hhbmdlZAorQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQmCisKKyIgZGVmYXVsdCBtYWtlCitDb21waWxlclNldCBtYWtlcHJnPXBieGJ1aWxkCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvcGVybC52aW0gYi9ydW50aW1lL2NvbXBpbGVyL3BlcmwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMzA0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL3BlcmwudmltCkBAIC0wLDAgKzEsMzkgQEAKKyIgVmltIENvbXBpbGVyIEZpbGUKKyIgQ29tcGlsZXI6ICAgICBQZXJsIHN5bnRheCBjaGVja3MgKHBlcmwgLVdjKQorIiBNYWludGFpbmVyOiAgIENocmlzdGlhbiBKLiBSb2JpbnNvbiA8aW5meW5pdHlAb25ld2VzdC5uZXQ+CisiIExhc3QgQ2hhbmdlOiAgMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAicGVybCIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK2xldCBzOnNhdmVjcG8gPSAmY3BvCitzZXQgY3BvJnZpbQorCitpZiBnZXRsaW5lKDEpID1+IyAnLVteIF0qVCcKKwlDb21waWxlclNldCBtYWtlcHJnPXBlcmxcIC1XVGNcICUKK2Vsc2UKKwlDb21waWxlclNldCBtYWtlcHJnPXBlcmxcIC1XY1wgJQorZW5kaWYKKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9CisJXCUtRyUuJSNoYWRcIGNvbXBpbGF0aW9uXCBlcnJvcnMuLAorCVwlLUclLiUjc3ludGF4XCBPSywKKwlcJW1cIGF0XCAlZlwgbGluZVwgJWwuLAorCVwlK0ElLiUjXCBhdFwgJWZcIGxpbmVcICVsXFwsJS4lIywKKwlcJStDJS4lIworCisiIEV4cGxhbmF0aW9uOgorIiAlLUclLiUjaGFkXCBjb21waWxhdGlvblwgZXJyb3JzLiwgIC0gSWdub3JlIHRoZSBvYnZpb3VzLgorIiAlLUclLiUjc3ludGF4XCBPSywgICAgICAgICAgICAgICAgIC0gRG9uJ3QgaW5jbHVkZSB0aGUgJ2Etb2theScgbWVzc2FnZS4KKyIgJW1cIGF0XCAlZlwgbGluZVwgJWwuLCAgICAgICAgICAgICAtIE1vc3QgZXJyb3JzLi4uCisiICUrQSUuJSNcIGF0XCAlZlwgbGluZVwgJWxcXCwlLiUjLCAgLSBBcyBhYm92ZSwgaW5jbHVkaW5nICcsIG5lYXIgLi4uJworIiAlK0MlLiUjICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAuLi4gV2hpY2ggY2FuIGJlIG11bHRpLWxpbmUuCisKK2xldCAmY3BvID0gczpzYXZlY3BvCit1bmxldCBzOnNhdmVjcG8KZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvcHl1bml0LnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvcHl1bml0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTRlYTkyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci9weXVuaXQudmltCkBAIC0wLDAgKzEsMTYgQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6CVVuaXQgdGVzdGluZyB0b29sIGZvciBQeXRob24KKyIgTWFpbnRhaW5lcjoJTWF4IElzY2hlbmtvIDxtZmlAdWtyLm5ldD4KKyIgTGFzdCBDaGFuZ2U6IDIwMDQgTWFyIDI3CisKK2lmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBjdXJyZW50X2NvbXBpbGVyID0gInB5dW5pdCIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK0NvbXBpbGVyU2V0IGVmbT0lQ1wgJS4lIywlQVwgXCBGaWxlXCBcIiVmXCJcXCxcIGxpbmVcICVsJS4lIywlWiVbJV5cIF0lXFxAPSVtCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvcnN0LnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvcnN0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWU1YmUxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci9yc3QudmltCkBAIC0wLDAgKzEsMzMgQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6CSAgICByZVN0cnVjdHVyZWRUZXh0IERvY3VtZW50YXRpb24gRm9ybWF0CisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9jb21waWxlci9wY3AvcnN0LworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTIyCisiIGFyY2gtdGFnOgkgICAgYWM2NGE5NWEtNWQ0NS00OTNkLWE5ZjktZjk2ZmM4NTY4NjU3CisKK2lmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBjdXJyZW50X2NvbXBpbGVyID0gInJzdCIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyICAgICAgICAgICIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworbGV0IHM6Y3BvX3NhdmUgPSAmY3BvCitzZXQgY3BvLT1DCisKK0NvbXBpbGVyU2V0IGVycm9yZm9ybWF0PQorICAgICAgXCVmOiVsOlwgKCV0RUJVRy8wKVwgJW0sCisgICAgICBcJWY6JWw6XCAoJXRORk8vMSlcICVtLAorICAgICAgXCVmOiVsOlwgKCV0QVJOSU5HLzIpXCAlbSwKKyAgICAgIFwlZjolbDpcICgldFJST1IvMylcICVtLAorICAgICAgXCVmOiVsOlwgKCV0RVZFUkUvMylcICVtLAorICAgICAgXCVEJSpcXGFbJSpcXGRdOlwgRW50ZXJpbmdcIGRpcmVjdG9yeVwgYCVmJywKKyAgICAgIFwlWCUqXFxhWyUqXFxkXTpcIExlYXZpbmdcIGRpcmVjdG9yeVwgYCVmJywKKyAgICAgIFwlRE1ha2luZ1wgJSpcXGFcIGluXCAlZgorCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9ydWJ5LnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvcnVieS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyNGVkMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvcnVieS52aW0KQEAgLTAsMCArMSw2MiBAQAorIiBWaW0gY29tcGlsZXIgZmlsZQorIiBDb21waWxlcjogICAgIFJ1Ynkgc3ludGF4IGNoZWNrIGFuZC9vciBlcnJvciByZXBvcnRpbmcKKyIgTWFpbnRhaW5lcjogICBUaW0gSGFtbWVycXVpc3QgPHRpbW15QGNwYW4ub3JnPgorIiBMYXN0IENoYW5nZTogIFR1ZSBKdWwgMTYgMDA6Mzg6MDAgUERUIDIwMDIKKyIKKyIgQ2hhbmdlbG9nOgorIiAwLjI6ICBzY3JpcHQgc2F2ZXMgYW5kIHJlc3RvcmVzICdjcG9wdGlvbnMnIHZhbHVlIHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aAorIiAgICAgICBsaW5lIGNvbnRpbnVhdGlvbnMKKyIgMC4xOiAgaW5pdGlhbCByZWxlYXNlCisiCisiIENvbnRyaWJ1dG9yczoKKyIgICBIdWdoIFNhc3NlIDxoZ3NAZG11LmFjLnVrPgorIiAgIERvdWcgS2Vhcm5zIDxkamtlYTJAbXVnY2EuaXRzLm1vbmFzaC5lZHUuYXU+CisiCisiIFRvZG86CisiICAgbWF0Y2ggZXJyb3IgdHlwZSAlbQorIgorIiBDb21tZW50czoKKyIgICBJIGtub3cgdGhpcyBmaWxlIGlzbid0IHBlcmZlY3QuICBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBzdWdnZXN0aW9ucywKKyIgICBwYXRjaGVzLCBldGMuLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gbGV0IG1lIGtub3cuCisiCisiICAgVGhpcyBpcyBteSBmaXJzdCBleHBlcmllbmNlIHdpdGggJ2Vycm9yZm9ybWF0JyBhbmQgY29tcGlsZXIgcGx1Z2lucyBhbmQKKyIgICBJIHdlbGNvbWUgYW55IGlucHV0IGZyb20gbW9yZSBleHBlcmllbmNlZCAob3IgY2xlYXJlci10aGlua2luZykKKyIgICBpbmRpdmlkdWFscy4KKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAicnVieSIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK2xldCBzOmNwb19zYXZlID0gJmNwbworc2V0IGNwby09QworCisiIGRlZmF1bHQgc2V0dGluZ3MgcnVucyBzY3JpcHQgbm9ybWFsbHkKKyIgYWRkICctYycgc3dpdGNoIHRvIHJ1biBzeW50YXggY2hlY2sgb25seToKKyIKKyIgICBDb21waWxlclNldCBtYWtlcHJnPXJ1YnlcIC13Y1wgJCoKKyIKKyIgb3IgYWRkICctYycgYXQgOm1ha2UgY29tbWFuZCBsaW5lOgorIgorIiAgIDptYWtlIC1jICU8Q1I+CisiCitDb21waWxlclNldCBtYWtlcHJnPXJ1YnlcIC13XCAkKgorCitDb21waWxlclNldCBlcnJvcmZvcm1hdD0KKyAgICBcJStFJWY6JWw6XCBwYXJzZVwgZXJyb3IsCisgICAgXCVXJWY6JWw6XCB3YXJuaW5nOlwgJW0sCisgICAgXCVFJWY6JWw6aW5cICUqW146XTpcICVtLAorICAgIFwlRSVmOiVsOlwgJW0sCisgICAgXCUtQyVcdGZyb21cICVmOiVsOmluXCAlLiUjLAorICAgIFwlLVolXHRmcm9tXCAlZjolbCwKKyAgICBcJS1aJXBeLAorICAgIFwlLUclLiUjCisKK2xldCAmY3BvID0gczpjcG9fc2F2ZQordW5sZXQgczpjcG9fc2F2ZQorCisiIHZpbTogZnQ9dmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL3NlLnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvc2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMGFhYjgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL3NlLnZpbQpAQCAtMCwwICsxLDI4IEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOglzZSAoU21hcnRFaWZmZWwgQ29tcGlsZXIpCisiIE1haW50YWluZXI6CURvdWcgS2Vhcm5zIDxkamtlYTJAbXVnY2EuaXRzLm1vbmFzaC5lZHUuYXU+CisiIFVSTDoJCWh0dHA6Ly9tdWdjYS5pdHMubW9uYXNoLmVkdS5hdS9+ZGprZWEyL3ZpbS9jb21waWxlci9zZS52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDE2CisKK2lmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBjdXJyZW50X2NvbXBpbGVyID0gInNlIgorCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworbGV0IHM6Y3BvX3NhdmUgPSAmY3BvCitzZXQgY3BvLT1DCisKK0NvbXBpbGVyU2V0IG1ha2Vwcmc9Y29tcGlsZVwgJQorCitDb21waWxlclNldCBlcnJvcmZvcm1hdD0lVyoqKioqKlwgV2FybmluZzpcICVtLAorCQkgICAgXCVFKioqKioqXCBGYXRhbFwgRXJyb3I6XCAlbSwKKwkJICAgIFwlRSoqKioqKlwgRXJyb3I6XCAlbSwKKwkJICAgIFwlQ0xpbmVcICVsXCBjb2x1bW5cICVjXCBpblwgJVxcdyVcXCtcICglZilcIDosCisJCSAgICBcJS1HJS4lIworCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvc3BsaW50LnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvc3BsaW50LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmE5Yzk3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci9zcGxpbnQudmltCkBAIC0wLDAgKzEsNzAgQEAKKyIgVmltIGNvbXBpbGVyIGZpbGUKKyIgQ29tcGlsZXI6ICAgICBzcGxpbnQvbGNsaW50IChDIHNvdXJjZSBjb2RlIGNoZWNrZXIpCisiIE1haW50YWluZXI6ICAgUmFsZiBXaWxkZW5odWVzIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorIiBTcGxpbnQgSG9tZToJaHR0cDovL3d3dy5zcGxpbnQub3JnLworIiBMYXN0IENoYW5nZTogICREYXRlJAorIiAkUmV2aXNpb24kCisKK2lmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBjdXJyZW50X2NvbXBpbGVyID0gInNwbGludCIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK2xldCBzOmNwb19zYXZlID0gJmNwbworc2V0IGNwby09QworCisiIGFkYXB0IHRoaXMgaWYgeW91IHdhbnQgdG8gY2hlY2sgbW9yZSB0aGFuIG9uZSBmaWxlIGF0IGEgdGltZS4KKyIgcHV0IGNvbW1hbmQgbGluZSBvcHRpb25zIGluIC5zcGxpbnRyYyBvciB+Ly5zcGxpbnRyYworQ29tcGlsZXJTZXQgbWFrZXByZz1zcGxpbnRcICUKKworIiBOb3RlOiB3aGVuIHVzaW5nIHRoZSBuZXcgYXJyYXkgYm91bmRzIGNoZWNraW5nIGZsYWdzOiAgRWFjaCB3YXJuaW5nCisiIHVzdWFsbHkgaGFzIHNldmVyYWwgbGluZXMgYW5kIHNldmVyYWwgcmVmZXJlbmNlcyB0byBzb3VyY2UgY29kZSBtb3N0bHkKKyIgd2l0aGluIG9uZSBvciB0d28gbGluZXMgKHNlZSBzYW1wbGUgd2FybmluZyBiZWxvdykuICBUaGUgZWFzaWVzdCB3YXkKKyIgbm90IHRvIG1lc3MgdXAgZmlsZSBuYW1lIGRldGVjdGlvbiBhbmQgbm90IHRvIGp1bXAgdG8gYWxsIHBvc2l0aW9ucyBpcworIiB0byBhZGQgc29tZXRoaW5nIGxpa2UKKyIJLWxpbmVsZW4gNTAwICtib3VuZHNjb21wYWN0ZXJyb3JtZXNzYWdlcworIiB0byB5b3VyIC5zcGxpbnRyYyBhbmQgJ3NldCBjbWRoZWlnaHQ9NCcgb3IgbW9yZS4KKyIgVE9ETzogcmVsaWFibGUgd2F5IHRvIGRpc3Rpbmd1aXNoIGZpbGUgbmFtZXMgYW5kIGNvbnN0cmFpbnRzLgorIgorIiBzYW1wbGUgd2FybmluZyAoZ2VuZXJpYyk6CisiCisiZm9vLmM6MTAwNjoxMjogQ2xhdXNlcyBleGl0IHdpdGggdmFyIHJlZmVyZW5jaW5nIGxvY2FsIHN0b3JhZ2UgaW4gb25lCisiCQkgICAgICAgY2FzZSwgZnJlc2ggc3RvcmFnZSBpbiBvdGhlciBjYXNlCisiICAgZm9vLmM6MTAwMzoyOiBGcmVzaCBzdG9yYWdlIHZhciBhbGxvY2F0ZWQKKyIKKyIgc2FtcGxlIHdhcm5pbmcgKGJvdW5kcyBjaGVja2luZyk6CisiCisiYm91bmRzLmM6IChpbiBmdW5jdGlvbiB1cGRhdGVFbnYpCisiYm91bmRzLmM6MTA6NTogUG9zc2libGUgb3V0LW9mLWJvdW5kcyBzdG9yZToKKyIgICAgc3RyY3B5KHN0ciwgdG1wKQorIiAgICBVbmFibGUgdG8gcmVzb2x2ZSBjb25zdHJhaW50OgorIiAgICByZXF1aXJlcyBtYXhTZXQoc3RyIEAgYm91bmRzLmM6MTA6MTMpID49IG1heFJlYWQoZ2V0ZW52KCJNWUVOViIpIEAKKyIgICAgYm91bmRzLmM6Njo5KQorIiAgICAgbmVlZGVkIHRvIHNhdGlzZnkgcHJlY29uZGl0aW9uOgorIiAgICByZXF1aXJlcyBtYXhTZXQoc3RyIEAgYm91bmRzLmM6MTA6MTMpID49IG1heFJlYWQodG1wIEAgYm91bmRzLmM6MTA6MTgpCisiICAgICBkZXJpdmVkIGZyb20gc3RyY3B5IHByZWNvbmRpdGlvbjogcmVxdWlyZXMgbWF4U2V0KDxwYXJhbWV0ZXIgMT4pID49CisiICAgIG1heFJlYWQoPHBhcmFtZXRlciAyPikKKyIgIEEgbWVtb3J5IHdyaXRlIG1heSB3cml0ZSB0byBhbiBhZGRyZXNzIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gKFVzZQorIiAgLWJvdW5kc3dyaXRlIHRvIGluaGliaXQgd2FybmluZykKKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9JU9MQ0xpbnQqbSwKKwlcJU9TcGxpbnQqbSwKKwlcJSpbXCBdJWY6JWw6JWM6XCAlbSwKKwlcJSpbXCBdJWY6JWw6XCAlbSwKKwlcJSpbXlwiXVwiJWZcIiUqXFxEJWw6XCAlbSwKKwlcXCIlZlwiJSpcXEQlbDpcICVtLAorCVwlQSVmOiVsOiVjOlwgJW0sCisJXCVBJWY6JWw6JW0sCisJXFwiJWZcIlxcLAorCVxcIGxpbmVcICVsJSpcXEQlYyUqW15cIF1cICVtLAorCVwlRCUqXFxhWyUqXFxkXTpcIEVudGVyaW5nXCBkaXJlY3RvcnlcIGAlZicsCisJXCVYJSpcXGFbJSpcXGRdOlwgTGVhdmluZ1wgZGlyZWN0b3J5XCBgJWYnLAorCVwlRE1ha2luZ1wgJSpcXGFcIGluXCAlZiwKKwlcJUNcIFwgJW0KKworbGV0ICZjcG8gPSBzOmNwb19zYXZlCit1bmxldCBzOmNwb19zYXZlCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL3RjbC52aW0gYi9ydW50aW1lL2NvbXBpbGVyL3RjbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkM2VkZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvdGNsLnZpbQpAQCAtMCwwICsxLDE4IEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOgl0Y2wKKyIgTWFpbnRhaW5lcjoJRG91ZyBLZWFybnMgPGRqa2VhMkBtdWdjYS5pdHMubW9uYXNoLmVkdS5hdT4KKyIgVVJMOgkJaHR0cDovL211Z2NhLml0cy5tb25hc2guZWR1LmF1L35kamtlYTIvdmltL2NvbXBpbGVyL3RjbC52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWFyIDI3CisKK2lmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBjdXJyZW50X2NvbXBpbGVyID0gInRjbCIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK0NvbXBpbGVyU2V0IG1ha2Vwcmc9dGNsCisKK0NvbXBpbGVyU2V0IGVycm9yZm9ybWF0PSVFRXJyb3I6XCAlbSwlK1pcICVcXHs0fShmaWxlXCBcIiVmXCJcIGxpbmVcICVsKSwlLUclLiUjCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL3RleC52aW0gYi9ydW50aW1lL2NvbXBpbGVyL3RleC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyOGE5MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvdGV4LnZpbQpAQCAtMCwwICsxLDY4IEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOiAgICAgVGVYCisiIE1haW50YWluZXI6ICAgQXJ0ZW0gQ2h1cHJpbmEgPHJhbkByYW4ucHAucnU+CisiIExhc3QgQ2hhbmdlOiAgMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKwlmaW5pc2gKK2VuZGlmCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCisiIElmIG1ha2VmaWxlIGV4aXN0cyBhbmQgd2UgYXJlIG5vdCBhc2tlZCB0byBpZ25vcmUgaXQsIHdlIHVzZSBzdGFuZGFyZCBtYWtlCisiIChkbyBub3QgcmVkZWZpbmUgbWFrZXByZykKK2lmIGV4aXN0cygnYjp0ZXhfaWdub3JlX21ha2VmaWxlJykgfHwgZXhpc3RzKCdnOnRleF9pZ25vcmVfbWFrZWZpbGUnKSB8fAorCQkJXCghZmlsZXJlYWRhYmxlKCdNYWtlZmlsZScpICYmICFmaWxlcmVhZGFibGUoJ21ha2VmaWxlJykpCisJIiBJZiBidWZmZXItbG9jYWwgdmFyaWFibGUgJ3RleF9mbGF2b3InIGV4aXN0cywgaXQgZGVmaW5lcyBUZVggZmxhdm9yLAorCSIgb3RoZXJ3aXplIHRoZSBzYW1lIGZvciBnbG9iYWwgdmFyaWFibGUgd2l0aCBzYW1lIG5hbWUsIGVsc2UgaXQgd2lsbCBiZQorCSIgTGFUZVgKKwlpZiBleGlzdHMoImI6dGV4X2ZsYXZvciIpCisJCWxldCBjdXJyZW50X2NvbXBpbGVyID0gYjp0ZXhfZmxhdm9yCisJZWxzZWlmIGV4aXN0cygiZzp0ZXhfZmxhdm9yIikKKwkJbGV0IGN1cnJlbnRfY29tcGlsZXIgPSBnOnRleF9mbGF2b3IKKwllbHNlCisJCWxldCBjdXJyZW50X2NvbXBpbGVyID0gImxhdGV4IgorCWVuZGlmCisJbGV0ICZsOm1ha2Vwcmc9Y3VycmVudF9jb21waWxlci4nIC1pbnRlcmFjdGlvbj1ub25zdG9wbW9kZScKK2Vsc2UKKwlsZXQgY3VycmVudF9jb21waWxlciA9ICdtYWtlJworZW5kaWYKKworbGV0IHM6Y3BvX3NhdmUgPSAmY3BvCitzZXQgY3BvLT1DCisKKyIgVmFsdWUgZXJyb3Jmb3JtYXQgYXJlIHRha2VuIGZyb20gdmltIGhlbHAsIHNlZSA6aGVscCBlcnJvcmZvcm1hdC1MYVRlWCwgd2l0aAorIiBhZGRpdGlvbiBmcm9tIFNyaW5hdGggQXZhZGhhbnVsYSA8c3JpbmF0aEBmYXN0bWFpbC5mbT4KK0NvbXBpbGVyU2V0IGVycm9yZm9ybWF0PSVFIVwgTGFUZVhcICV0cnJvcjpcICVtLAorCVwlRSFcICVtLAorCVwlK1dMYVRlWFwgJS4lI1dhcm5pbmc6XCAlLiUjbGluZVwgJWwlLiUjLAorCVwlK1clLiUjXCBhdFwgbGluZXNcICVsLS0lKlxcZCwKKwlcJVdMYVRlWFwgJS4lI1dhcm5pbmc6XCAlbSwKKwlcJUNsLiVsXCAlbSwKKwlcJStDXCBcICVtLiwKKwlcJStDJS4lIy0lLiUjLAorCVwlK0MlLiUjW10lLiUjLAorCVwlK0NbXSUuJSMsCisJXCUrQyUuJSMlW3t9XFxdJS4lIywKKwlcJStDPCUuJSM+JS4lIywKKwlcJUNcIFwgJW0sCisJXCUtR1NlZVwgdGhlXCBMYVRlWCVtLAorCVwlLUdUeXBlXCBcIEhcIDxyZXR1cm4+JW0sCisJXCUtR1wgLi4uJS4lIywKKwlcJS1HJS4lI1wgKEMpXCAlLiUjLAorCVwlLUcoc2VlXCB0aGVcIHRyYW5zY3JpcHQlLiUjKSwKKwlcJS1HXFxzJSMsCisJXCUrTyglKlteKCldKSVyLAorCVwlK08lKlteKCldKCUqW14oKV0pJXIsCisJXCUrUCglZiVyLAorCVwlK1BcICVcXD0oJWYlciwKKwlcJStQJSpbXigpXSglZiVyLAorCVwlK1BbJVxcZCVbXigpXSUjKCVmJXIsCisJXCUrUSklciwKKwlcJStRJSpbXigpXSklciwKKwlcJStRWyVcXGQlKlteKCldKSVyCisKK2xldCAmY3BvID0gczpjcG9fc2F2ZQordW5sZXQgczpjcG9fc2F2ZQpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci90aWR5LnZpbSBiL3J1bnRpbWUvY29tcGlsZXIvdGlkeS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0MTZlYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvdGlkeS52aW0KQEAgLTAsMCArMSwyOSBAQAorIiBWaW0gY29tcGlsZXIgZmlsZQorIiBDb21waWxlcjoJSFRNTCBUaWR5CisiIE1haW50YWluZXI6CURvdWcgS2Vhcm5zIDxkamtlYTJAbXVnY2EuaXRzLm1vbmFzaC5lZHUuYXU+CisiIFVSTDoJCWh0dHA6Ly9tdWdjYS5pdHMubW9uYXNoLmVkdS5hdS9+ZGprZWEyL3ZpbS9jb21waWxlci90aWR5LnZpbQorIiBMYXN0IENoYW5nZToJMjAwNCBNYXIgMjcKKworIiBOT1RFOiBzZXQgJ3RpZHlfY29tcGlsZXJfMDQwODAwJyBpZiB5b3UgYXJlIHVzaW5nIHRoZSA0dGggQXVndXN0IDIwMDAgcmVsZWFzZQorIiAgICAgICBvZiBIVE1MIFRpZHkuCisKK2lmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBjdXJyZW50X2NvbXBpbGVyID0gInRpZHkiCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCisiIHRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIHRoZSAwNC8wOC8wMCByZWxlYXNlIG9mIHRpZHkgd2hpY2gKKyIgZmFpbGVkIHRvIHNldCB0aGUgZmlsZW5hbWUgaWYgdGhlIC1xdWlldCBvcHRpb24gd2FzIHVzZWQKK2lmIGV4aXN0cygidGlkeV9jb21waWxlcl8wNDA4MDAiKQorICBDb21waWxlclNldCBtYWtlcHJnPXRpZHlcIC1lcnJvcnNcIC0tZ251LWVtYWNzXCB5ZXNcICUKK2Vsc2UKKyAgQ29tcGlsZXJTZXQgbWFrZXByZz10aWR5XCAtcXVpZXRcIC1lcnJvcnNcIC0tZ251LWVtYWNzXCB5ZXNcICUKK2VuZGlmCisKKyIgc2FtcGxlIHdhcm5pbmc6IGZvby5odG1sOjg6MTogV2FybmluZzogaW5zZXJ0aW5nIG1pc3NpbmcgJ2Zvb2JhcicgZWxlbWVudAorIiBzYW1wbGUgZXJyb3I6ICAgZm9vLmh0bWw6OToyOiBFcnJvcjogPGZvb2Jhcj4gaXMgbm90IHJlY29nbml6ZWQhCitDb21waWxlclNldCBlcnJvcmZvcm1hdD0lZjolbDolYzpcIEVycm9yOiVtLCVmOiVsOiVjOlwgV2FybmluZzolbSwlLUclLiUjCmRpZmYgLS1naXQgYS9ydW50aW1lL2NvbXBpbGVyL3htbGxpbnQudmltIGIvcnVudGltZS9jb21waWxlci94bWxsaW50LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzExMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci94bWxsaW50LnZpbQpAQCAtMCwwICsxLDI5IEBACisiIFZpbSBjb21waWxlciBmaWxlCisiIENvbXBpbGVyOgl4bWxsaW50CisiIE1haW50YWluZXI6CURvdWcgS2Vhcm5zIDxkamtlYTJAbXVnY2EuaXRzLm1vbmFzaC5lZHUuYXU+CisiIFVSTDoJCWh0dHA6Ly9tdWdjYS5pdHMubW9uYXNoLmVkdS5hdS9+ZGprZWEyL3ZpbS9jb21waWxlci94bWxsaW50LnZpbQorIiBMYXN0IENoYW5nZToJMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAieG1sbGludCIKKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK2xldCBzOmNwb19zYXZlID0gJmNwbworc2V0IGNwby09QworCitDb21waWxlclNldCBtYWtlcHJnPXhtbGxpbnRcIC0tdmFsaWRcIC0tbm9vdXRcIAorCitDb21waWxlclNldCBlcnJvcmZvcm1hdD0lRSVmOiVsOlwgZXJyb3I6XCAlbSwKKwkJICAgIFwlVyVmOiVsOlwgd2FybmluZzpcICVtLAorCQkgICAgXCVFJWY6JWw6XCB2YWxpZGl0eVwgZXJyb3I6XCAlbSwKKwkJICAgIFwlVyVmOiVsOlwgdmFsaWRpdHlcIHdhcm5pbmc6XCAlbSwKKwkJICAgIFwlLVolcF4sCisJCSAgICBcJS1HJS4lIworCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIveG1sd2YudmltIGIvcnVudGltZS9jb21waWxlci94bWx3Zi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyZTJiYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIveG1sd2YudmltCkBAIC0wLDAgKzEsMjMgQEAKKyIgVmltIENvbXBpbGVyIEZpbGUKKyIgQ29tcGlsZXI6CXhtbHdmCisiIE1haW50YWluZXI6CVJvYmVydCBSb3dzb21lIDxyb3dzb21lQHdhbS51bWQuZWR1PgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXIgMjcKKworaWYgZXhpc3RzKCJjdXJyZW50X2NvbXBpbGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAieG1sd2YiCisKK2xldCBzOmNwb19zYXZlID0gJmNwbworc2V0IGNwbyZ2aW0KKworaWYgZXhpc3RzKCI6Q29tcGlsZXJTZXQiKSAhPSAyCQkiIG9sZGVyIFZpbSBhbHdheXMgdXNlZCA6c2V0bG9jYWwKKyAgY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4KK2VuZGlmCisKK0NvbXBpbGVyU2V0IG1ha2Vwcmc9eG1sd2ZcICUKKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9JWY6JWwlYzolbQorCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZGVsbWVudS52aW0gYi9ydW50aW1lL2RlbG1lbnUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZGY4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RlbG1lbnUudmltCkBAIC0wLDAgKzEsMjUgQEAKKyIgVGhpcyBWaW0gc2NyaXB0IGRlbGV0ZXMgYWxsIHRoZSBtZW51cywgc28gdGhhdCB0aGV5IGNhbiBiZSByZWRlZmluZWQuCisiIFdhcm5pbmc6IFRoaXMgYWxzbyBkZWxldGVzIGFsbCBtZW51cyBkZWZpbmVkIGJ5IHRoZSB1c2VyIQorIgorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMSBNYXkgMjcKKworYXVubWVudSAqCisKK3NpbGVudCEgdW5sZXQgZGlkX2luc3RhbGxfZGVmYXVsdF9tZW51cworc2lsZW50ISB1bmxldCBkaWRfaW5zdGFsbF9zeW50YXhfbWVudQoraWYgZXhpc3RzKCJkaWRfbWVudV90cmFucyIpCisgIG1lbnV0cmFucyBjbGVhcgorICB1bmxldCBkaWRfbWVudV90cmFucworZW5kaWYKKworc2lsZW50ISB1bmxldCBmaW5kX2hlbHBfZGlhbG9nCisKK3NpbGVudCEgdW5sZXQgbWVudXRyYW5zX2hlbHBfZGlhbG9nCitzaWxlbnQhIHVubGV0IG1lbnV0cmFuc19wYXRoX2RpYWxvZworc2lsZW50ISB1bmxldCBtZW51dHJhbnNfdGFnc19kaWFsb2cKK3NpbGVudCEgdW5sZXQgbWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cKK3NpbGVudCEgdW5sZXQgbWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nCitzaWxlbnQhIHVubGV0IG1lbnV0cmFuc19ub19maWxlCisKKyIgdmltOiBzZXQgc3c9MiA6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy5pbmZvIGIvcnVudGltZS9kb2MuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hODM2MDMxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9NYWtlZmlsZSBiL3J1bnRpbWUvZG9jL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NzU2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9NYWtlZmlsZQpAQCAtMCwwICsxLDM2MyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIFZpbSBkb2N1bWVudGF0aW9uIG9uIFVuaXgKKyMKKyMgSWYgeW91IGdldCAiZG9uJ3Qga25vdyBob3cgdG8gbWFrZSBzY3JhdGNoIiwgZmlyc3QgcnVuIG1ha2UgaW4gdGhlIHNvdXJjZQorIyBkaXJlY3RvcnkuICBPciByZW1vdmUgdGhlIGluY2x1ZGUgYmVsb3cuCisKK0FXSyA9IGF3aworCisjIFNldCB0byAkKFZJTVRBUkdFVCkgd2hlbiBleGVjdXRlZCBmcm9tIHNyYy9NYWtlZmlsZS4KK1ZJTUVYRSA9IHZpbQorCisjIGluY2x1ZGUgdGhlIGNvbmZpZy5tayBmcm9tIHRoZSBzb3VyY2UgZGlyZWN0b3J5LiAgSXQncyBvbmx5IG5lZWRlZCB0byBzZXQKKyMgQVdLLCB1c2VkIGZvciAibWFrZSBodG1sIi4gIENvbW1lbnQgdGhpcyBvdXQgaWYgdGhlIGluY2x1ZGUgZ2l2ZXMgcHJvYmxlbXMuCitpbmNsdWRlIC4uLy4uL3NyYy9hdXRvL2NvbmZpZy5taworCitET0NTID0gXAorCWFyYWJpYy50eHQgXAorCWF1dG9jbWQudHh0IFwKKwljaGFuZ2UudHh0IFwKKwljbWRsaW5lLnR4dCBcCisJZGVidWdnZXIudHh0IFwKKwlkZXZlbG9wLnR4dCBcCisJZGlmZi50eHQgXAorCWRpZ3JhcGgudHh0IFwKKwllZGl0aW5nLnR4dCBcCisJZXZhbC50eHQgXAorCWZhcnNpLnR4dCBcCisJZmlsZXR5cGUudHh0IFwKKwlmb2xkLnR4dCBcCisJZ3VpLnR4dCBcCisJZ3VpX3cxNi50eHQgXAorCWd1aV93MzIudHh0IFwKKwlndWlfeDExLnR4dCBcCisJaGFuZ3VsaW4udHh0IFwKKwloZWJyZXcudHh0IFwKKwloZWxwLnR4dCBcCisJaG93dG8udHh0IFwKKwlpZl9jc2NvcC50eHQgXAorCWlmX29sZS50eHQgXAorCWlmX3BlcmwudHh0IFwKKwlpZl9weXRoLnR4dCBcCisJaWZfcnVieS50eHQgXAorCWlmX3NuaWZmLnR4dCBcCisJaWZfdGNsLnR4dCBcCisJaW5kZW50LnR4dCBcCisJaW5kZXgudHh0IFwKKwlpbnNlcnQudHh0IFwKKwlpbnRyby50eHQgXAorCW1hcC50eHQgXAorCW1lc3NhZ2UudHh0IFwKKwltb3Rpb24udHh0IFwKKwltYnl0ZS50eHQgXAorCW1sYW5nLnR4dCBcCisJbmV0YmVhbnMudHh0IFwKKwlvcHRpb25zLnR4dCBcCisJb3NfMzkwLnR4dCBcCisJb3NfYW1pZ2EudHh0IFwKKwlvc19iZW9zLnR4dCBcCisJb3NfZG9zLnR4dCBcCisJb3NfbWFjLnR4dCBcCisJb3NfbWludC50eHQgXAorCW9zX21zZG9zLnR4dCBcCisJb3Nfb3MyLnR4dCBcCisJb3NfcW54LnR4dCBcCisJb3NfcmlzYy50eHQgXAorCW9zX3VuaXgudHh0IFwKKwlvc192bXMudHh0IFwKKwlvc193aW4zMi50eHQgXAorCXBhdHRlcm4udHh0IFwKKwlwaV9leHBsLnR4dCBcCisJcGlfZ3ppcC50eHQgXAorCXBpX25ldHJ3LnR4dCBcCisJcGlfc3BlYy50eHQgXAorCXF1aWNrZml4LnR4dCBcCisJcXVpY2tyZWYudHh0IFwKKwlxdW90ZXMudHh0IFwKKwlyZWNvdmVyLnR4dCBcCisJcmVtb3RlLnR4dCBcCisJcmVwZWF0LnR4dCBcCisJcmlsZWZ0LnR4dCBcCisJcnVzc2lhbi50eHQgXAorCXNjcm9sbC50eHQgXAorCXNpZ24udHh0IFwKKwlzcG9uc29yLnR4dCBcCisJc3RhcnRpbmcudHh0IFwKKwlzeW50YXgudHh0IFwKKwl0YWdzcmNoLnR4dCBcCisJdGVybS50eHQgXAorCXRpcHMudHh0IFwKKwl0b2RvLnR4dCBcCisJdWdhbmRhLnR4dCBcCisJdW5kby50eHQgXAorCXVzcl8wMS50eHQgXAorCXVzcl8wMi50eHQgXAorCXVzcl8wMy50eHQgXAorCXVzcl8wNC50eHQgXAorCXVzcl8wNS50eHQgXAorCXVzcl8wNi50eHQgXAorCXVzcl8wNy50eHQgXAorCXVzcl8wOC50eHQgXAorCXVzcl8wOS50eHQgXAorCXVzcl8xMC50eHQgXAorCXVzcl8xMS50eHQgXAorCXVzcl8xMi50eHQgXAorCXVzcl8yMC50eHQgXAorCXVzcl8yMS50eHQgXAorCXVzcl8yMi50eHQgXAorCXVzcl8yMy50eHQgXAorCXVzcl8yNC50eHQgXAorCXVzcl8yNS50eHQgXAorCXVzcl8yNi50eHQgXAorCXVzcl8yNy50eHQgXAorCXVzcl8yOC50eHQgXAorCXVzcl8yOS50eHQgXAorCXVzcl8zMC50eHQgXAorCXVzcl8zMS50eHQgXAorCXVzcl80MC50eHQgXAorCXVzcl80MS50eHQgXAorCXVzcl80Mi50eHQgXAorCXVzcl80My50eHQgXAorCXVzcl80NC50eHQgXAorCXVzcl80NS50eHQgXAorCXVzcl85MC50eHQgXAorCXVzcl90b2MudHh0IFwKKwl2YXJpb3VzLnR4dCBcCisJdmVyc2lvbjQudHh0IFwKKwl2ZXJzaW9uNS50eHQgXAorCXZlcnNpb242LnR4dCBcCisJdmlfZGlmZi50eHQgXAorCXZpc3VhbC50eHQgXAorCXdpbmRvd3MudHh0IFwKKwl3b3Jrc2hvcC50eHQKKworSFRNTFMgPSBcCisJYXJhYmljLmh0bWwgXAorCWF1dG9jbWQuaHRtbCBcCisJY2hhbmdlLmh0bWwgXAorCWNtZGxpbmUuaHRtbCBcCisJZGVidWdnZXIuaHRtbCBcCisJZGV2ZWxvcC5odG1sIFwKKwlkaWZmLmh0bWwgXAorCWRpZ3JhcGguaHRtbCBcCisJZWRpdGluZy5odG1sIFwKKwlldmFsLmh0bWwgXAorCWZhcnNpLmh0bWwgXAorCWZpbGV0eXBlLmh0bWwgXAorCWZvbGQuaHRtbCBcCisJZ3VpLmh0bWwgXAorCWd1aV93MTYuaHRtbCBcCisJZ3VpX3czMi5odG1sIFwKKwlndWlfeDExLmh0bWwgXAorCWhhbmd1bGluLmh0bWwgXAorCWhlYnJldy5odG1sIFwKKwloZWxwLmh0bWwgXAorCWhvd3RvLmh0bWwgXAorCWlmX2NzY29wLmh0bWwgXAorCWlmX29sZS5odG1sIFwKKwlpZl9wZXJsLmh0bWwgXAorCWlmX3B5dGguaHRtbCBcCisJaWZfcnVieS5odG1sIFwKKwlpZl9zbmlmZi5odG1sIFwKKwlpZl90Y2wuaHRtbCBcCisJaW5kZW50Lmh0bWwgXAorCWluZGV4Lmh0bWwgXAorCWluc2VydC5odG1sIFwKKwlpbnRyby5odG1sIFwKKwltYXAuaHRtbCBcCisJbWVzc2FnZS5odG1sIFwKKwltb3Rpb24uaHRtbCBcCisJbWJ5dGUuaHRtbCBcCisJbWxhbmcuaHRtbCBcCisJbmV0YmVhbnMuaHRtbCBcCisJb3B0aW9ucy5odG1sIFwKKwlvc18zOTAuaHRtbCBcCisJb3NfYW1pZ2EuaHRtbCBcCisJb3NfYmVvcy5odG1sIFwKKwlvc19kb3MuaHRtbCBcCisJb3NfbWFjLmh0bWwgXAorCW9zX21pbnQuaHRtbCBcCisJb3NfbXNkb3MuaHRtbCBcCisJb3Nfb3MyLmh0bWwgXAorCW9zX3FueC5odG1sIFwKKwlvc19yaXNjLmh0bWwgXAorCW9zX3VuaXguaHRtbCBcCisJb3Nfdm1zLmh0bWwgXAorCW9zX3dpbjMyLmh0bWwgXAorCXBhdHRlcm4uaHRtbCBcCisJcGlfZXhwbC5odG1sIFwKKwlwaV9nemlwLmh0bWwgXAorCXBpX25ldHJ3Lmh0bWwgXAorCXBpX3NwZWMuaHRtbCBcCisJcXVpY2tmaXguaHRtbCBcCisJcXVpY2tyZWYuaHRtbCBcCisJcXVvdGVzLmh0bWwgXAorCXJlY292ZXIuaHRtbCBcCisJcmVtb3RlLmh0bWwgXAorCXJlcGVhdC5odG1sIFwKKwlyaWxlZnQuaHRtbCBcCisJcnVzc2lhbi5odG1sIFwKKwlzY3JvbGwuaHRtbCBcCisJc2lnbi5odG1sIFwKKwlzcG9uc29yLmh0bWwgXAorCXN0YXJ0aW5nLmh0bWwgXAorCXN5bnRheC5odG1sIFwKKwl0YWdzcmNoLmh0bWwgXAorCXRhZ3MuaHRtbCBcCisJdGVybS5odG1sIFwKKwl0aXBzLmh0bWwgXAorCXRvZG8uaHRtbCBcCisJdWdhbmRhLmh0bWwgXAorCXVuZG8uaHRtbCBcCisJdXNyXzAxLmh0bWwgXAorCXVzcl8wMi5odG1sIFwKKwl1c3JfMDMuaHRtbCBcCisJdXNyXzA0Lmh0bWwgXAorCXVzcl8wNS5odG1sIFwKKwl1c3JfMDYuaHRtbCBcCisJdXNyXzA3Lmh0bWwgXAorCXVzcl8wOC5odG1sIFwKKwl1c3JfMDkuaHRtbCBcCisJdXNyXzEwLmh0bWwgXAorCXVzcl8xMS5odG1sIFwKKwl1c3JfMTIuaHRtbCBcCisJdXNyXzIwLmh0bWwgXAorCXVzcl8yMS5odG1sIFwKKwl1c3JfMjIuaHRtbCBcCisJdXNyXzIzLmh0bWwgXAorCXVzcl8yNC5odG1sIFwKKwl1c3JfMjUuaHRtbCBcCisJdXNyXzI2Lmh0bWwgXAorCXVzcl8yNy5odG1sIFwKKwl1c3JfMjguaHRtbCBcCisJdXNyXzI5Lmh0bWwgXAorCXVzcl8zMC5odG1sIFwKKwl1c3JfMzEuaHRtbCBcCisJdXNyXzQwLmh0bWwgXAorCXVzcl80MS5odG1sIFwKKwl1c3JfNDIuaHRtbCBcCisJdXNyXzQzLmh0bWwgXAorCXVzcl80NC5odG1sIFwKKwl1c3JfNDUuaHRtbCBcCisJdXNyXzkwLmh0bWwgXAorCXVzcl90b2MuaHRtbCBcCisJdmFyaW91cy5odG1sIFwKKwl2ZXJzaW9uNC5odG1sIFwKKwl2ZXJzaW9uNS5odG1sIFwKKwl2ZXJzaW9uNi5odG1sIFwKKwl2aV9kaWZmLmh0bWwgXAorCXZpc3VhbC5odG1sIFwKKwl3aW5kb3dzLmh0bWwgXAorCXdvcmtzaG9wLmh0bWwKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubyAudHh0IC5odG1sCisKK2FsbDogdGFncyB2aW0ubWFuIHZpbWRpZmYubWFuIHZpbXR1dG9yLm1hbiB4eGQubWFuCisKKyMgVXNlIFZpbSB0byBnZW5lcmF0ZSB0aGUgdGFncyBmaWxlLiAgQ2FuIG9ubHkgYmUgdXNlZCB3aGVuIFZpbSBoYXMgYmVlbgorIyBjb21waWxlZCBhbmQgaW5zdGFsbGVkLiAgU3VwcG9ydHMgbXVsdGlwbGUgbGFuZ3VhZ2VzLgordmltdGFnczogJChET0NTKQorCSQoVklNRVhFKSAtdSBOT05FIC1lc1ggLWMgImhlbHB0YWdzIC4iIC1jIHF1aXQKKworIyBVc2UgImRvY3RhZ3MiIHRvIGdlbmVyYXRlIHRoZSB0YWdzIGZpbGUuICBPbmx5IHdvcmtzIGZvciBFbmdsaXNoIQordGFnczogZG9jdGFncyAkKERPQ1MpCisJLi9kb2N0YWdzICQoRE9DUykgfCBMQU5HPUMgTENfQUxMPUMgc29ydCA+dGFncworCXVuaXEgLWQgLTIgdGFncworCitkb2N0YWdzOiBkb2N0YWdzLmMKKwkkKENDKSBkb2N0YWdzLmMgLW8gZG9jdGFncworCit2aW0ubWFuOiB2aW0uMQorCW5yb2ZmIC1tYW4gdmltLjEgfCBzZWQgLWUgcy8uCC8vZyA+IHZpbS5tYW4KKwordmltZGlmZi5tYW46IHZpbWRpZmYuMQorCW5yb2ZmIC1tYW4gdmltZGlmZi4xIHwgc2VkIC1lIHMvLggvL2cgPiB2aW1kaWZmLm1hbgorCit2aW10dXRvci5tYW46IHZpbXR1dG9yLjEKKwlucm9mZiAtbWFuIHZpbXR1dG9yLjEgfCBzZWQgLWUgcy8uCC8vZyA+IHZpbXR1dG9yLm1hbgorCit4eGQubWFuOiB4eGQuMQorCW5yb2ZmIC1tYW4geHhkLjEgfCBzZWQgLWUgcy8uCC8vZyA+IHh4ZC5tYW4KKwordWdhbmRhLm5zaXMudHh0OiB1Z2FuZGEudHh0CisJc2VkIC1lICdzL1sgCV0qXCpbLWEtekEtWjAtOS5dKlwqLy9nJyAtZSAncy92aW06dHc9Nzg6Ly8nIFwKKwkJdWdhbmRhLnR4dCB8IHVuaXEgPnVnYW5kYS5uc2lzLnR4dAorCisjIEF3ayB2ZXJzaW9uIG9mIC50eHQgdG8gLmh0bWwgY29udmVyc2lvbi4KK2h0bWw6IG5vZXJyb3JzIHRhZ3MgdGFncy5yZWYgJChIVE1MUykKKwlAaWYgdGVzdCAtZiBlcnJvcnMubG9nOyB0aGVuIG1vcmUgZXJyb3JzLmxvZzsgZmkKKworbm9lcnJvcnM6CisJLXJtIC1mIGVycm9ycy5sb2cKKworLnR4dC5odG1sOgorCSQoQVdLKSAtZiBtYWtlaHRtbC5hd2sgJDwgPiRACisKK3RhZ3MucmVmIHRhZ3MuaHRtbDogdGFncworCSQoQVdLKSAtZiBtYWtldGFncy5hd2sgdGFncyA+dGFncy5odG1sCisKKyMgUGVybCB2ZXJzaW9uIG9mIC50eHQgdG8gLmh0bWwgY29udmVyc2lvbi4KKyMgVGhlcmUgY2FuJ3QgYmUgdHdvIHJ1bGVzIHRvIHByb2R1Y2UgYSAuaHRtbCBmcm9tIGEgLnR4dCBmaWxlLgorIyBKdXN0IHJ1biBvdmVyIGFsbCAudHh0IGZpbGVzIGVhY2ggdGltZSBvbmUgY2hhbmdlcy4gIEl0J3MgZmFzdCBhbnl3YXkuCitwZXJsaHRtbDogdGFncyAkKERPQ1MpCisJLi92aW0yaHRtbC5wbCB0YWdzICQoRE9DUykKKworY2xlYW46CisJLXJtIGRvY3RhZ3MgKi5odG1sIHRhZ3MucmVmCisKKyMgVGhlc2UgZmlsZXMgYXJlIGluIHRoZSBleHRyYSBhcmNoaXZlLCBza2lwIGlmIG5vdCBwcmVzZW50CisKK2FyYWJpYy50eHQ6CisJdG91Y2ggYXJhYmljLnR4dAorCitmYXJzaS50eHQ6CisJdG91Y2ggZmFyc2kudHh0CisKK2hlYnJldy50eHQ6CisJdG91Y2ggaGVicmV3LnR4dAorCitydXNzaWFuLnR4dDoKKwl0b3VjaCBydXNzaWFuLnR4dAorCitndWlfdzE2LnR4dDoKKwl0b3VjaCBndWlfdzE2LnR4dAorCitndWlfdzMyLnR4dDoKKwl0b3VjaCBndWlfdzMyLnR4dAorCitpZl9vbGUudHh0OgorCXRvdWNoIGlmX29sZS50eHQKKworb3NfMzkwLnR4dDoKKwl0b3VjaCBvc18zOTAudHh0CisKK29zX2FtaWdhLnR4dDoKKwl0b3VjaCBvc19hbWlnYS50eHQKKworb3NfYmVvcy50eHQ6CisJdG91Y2ggb3NfYmVvcy50eHQKKworb3NfZG9zLnR4dDoKKwl0b3VjaCBvc19kb3MudHh0CisKK29zX21hYy50eHQ6CisJdG91Y2ggb3NfbWFjLnR4dAorCitvc19taW50LnR4dDoKKwl0b3VjaCBvc19taW50LnR4dAorCitvc19tc2Rvcy50eHQ6CisJdG91Y2ggb3NfbXNkb3MudHh0CisKK29zX29zMi50eHQ6CisJdG91Y2ggb3Nfb3MyLnR4dAorCitvc19xbngudHh0OgorCXRvdWNoIG9zX3FueC50eHQKKworb3NfcmlzYy50eHQ6CisJdG91Y2ggb3NfcmlzYy50eHQKKworb3Nfd2luMzIudHh0OgorCXRvdWNoIG9zX3dpbjMyLnR4dApkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvYXJhYmljLnR4dCBiL3J1bnRpbWUvZG9jL2FyYWJpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5NjE0OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2FyYWJpYy50eHQKQEAgLTAsMCArMSwzMjMgQEAKKyphcmFiaWMudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMDkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBOYWRpbSBTaGFpa2xpCisKKworQXJhYmljIExhbmd1YWdlIHN1cHBvcnQgKG9wdGlvbnMgJiBtYXBwaW5ncykgZm9yIFZpbQkJKkFyYWJpYyoKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCisJCQkJCQkJCSpFODAwKgorSW4gb3JkZXIgdG8gdXNlIHJpZ2h0LXRvLWxlZnQgYW5kIEFyYWJpYyBtYXBwaW5nIHN1cHBvcnQsIGl0IGlzCituZWNlc3NhcnkgdG8gY29tcGlsZSBWSU0gd2l0aCB0aGUgfCthcmFiaWN8IGZlYXR1cmUuCisKK1RoZXNlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gY3JlYXRlZCBieSBOYWRpbSBTaGFpa2xpIDxuYWRpbS1hdC1hcmFiZXllcy5vcmc+CisKK0l0IGlzIGJlc3QgdG8gdmlldyB0aGlzIGZpbGUgd2l0aCB0aGVzZSBzZXR0aW5ncyB3aXRoaW4gVklNJ3MgR1VJOiA+CisKKwk6c2V0IGVuY29kaW5nPXV0Zi04CisJOnNldCBhcmFiaWNzaGFwZQorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCitBcmFiaWMgaXMgYSByYXRoZXIgZGVtYW5kaW5nIGxhbmd1YWdlIGluIHdoaWNoIGEgbnVtYmVyIG9mIHNwZWNpYWwKK2ZlYXR1cmVzIGFyZSByZXF1aXJlZC4JQ2hhcmFjdGVycyBhcmUgcmlnaHQtdG8tbGVmdCBvcmllbnRlZCBhbmQKK291Z2h0IHRvIGFwcGVhciBhcyBzdWNoIG9uIHRoZSBzY3JlZW4gKGllLiBmcm9tIHJpZ2h0IHRvIGxlZnQpLgorQXJhYmljIGFsc28gcmVxdWlyZXMgc2hhcGluZyBvZiBpdHMgY2hhcmFjdGVycywgbWVhbmluZyB0aGUgc2FtZQorY2hhcmFjdGVyIGhhcyBhIGRpZmZlcmVudCB2aXN1YWwgZm9ybSBiYXNlZCBvbiBpdHMgcmVsYXRpdmUgbG9jYXRpb24KK3dpdGhpbiBhIHdvcmQgKGluaXRpYWwsIG1lZGlhbCwgZmluYWwgb3Igc3RhbmQtYWxvbmUpLglBcmFiaWMgYWxzbworcmVxdWlyZXMgdHdvIGRpZmZlcmVudCBmb3JtcyBvZiBjb21iaW5pbmcgYW5kIHRoZSBhYmlsaXR5LCBpbgorY2VydGFpbiBpbnN0YW5jZXMsIHRvIGVpdGhlciBzdXBlcmltcG9zZSB1cCB0byB0d28gY2hhcmFjdGVycyBvbiB0b3AKK29mIGFub3RoZXIgKGNvbXBvc2luZykgb3IgdGhlIGFjdHVhbCBzdWJzdGl0dXRpb24gb2YgdHdvIGNoYXJhY3RlcnMKK2ludG8gb25lIChjb21iaW5pbmcpLiAgTGFzdGx5LCB0byBkaXNwbGF5IEFyYWJpYyBwcm9wZXJseSBvbmUgd2lsbAorcmVxdWlyZSBub3Qgb25seSBJU08tODg1OS02IChVKzA2MDAtVSswNkZGKSBmb250cywgYnV0IHdpbGwgYWxzbworcmVxdWlyZSBQcmVzZW50YXRpb24gRm9ybS1CIChVK0ZFNzAtVStGRUZGKSBmb250cyBib3RoIG9mIHdoaWNoIGFyZQorc3Vic2V0cyB3aXRoaW4gYSBzby1jYWxsZWQgSVNPLTEwNjQ2LTEgZm9udC4KKworVGhlIGNvbW1hbmRzLCBwcm9tcHRzIGFuZCBoZWxwIGZpbGVzIGFyZSBub3QgaW4gQXJhYmljLCB0aGVyZWZvcmUKK3RoZSB1c2VyIGludGVyZmFjZSByZW1haW5zIHRoZSBzdGFuZGFyZCBWaSBpbnRlcmZhY2UuCisKKworSGlnaGxpZ2h0cworLS0tLS0tLS0tLQorbyAgRWRpdGluZyBsZWZ0LXRvLXJpZ2h0IGZpbGVzIGFzIGluIHRoZSBvcmlnaW5hbCBWSU0gaGFzbid0IGNoYW5nZWQuCisKK28gIFZpZXdpbmcgYW5kIGVkaXRpbmcgZmlsZXMgaW4gcmlnaHQtdG8tbGVmdCB3aW5kb3dzLgkgRmlsZQorICAgb3JpZW50YXRpb24gaXMgcGVyIHdpbmRvdywgc28gaXQgaXMgcG9zc2libGUgdG8gdmlldyB0aGUgc2FtZQorICAgZmlsZSBpbiByaWdodC10by1sZWZ0IGFuZCBsZWZ0LXRvLXJpZ2h0IG1vZGVzLCBzaW11bHRhbmVvdXNseS4KKworbyAgTm8gc3BlY2lhbCB0ZXJtaW5hbCB3aXRoIHJpZ2h0LXRvLWxlZnQgY2FwYWJpbGl0aWVzIGlzIHJlcXVpcmVkLgorICAgVGhlIHJpZ2h0LXRvLWxlZnQgY2hhbmdlcyBhcmUgY29tcGxldGVseSBoYXJkd2FyZSBpbmRlcGVuZGVudC4KKyAgIE9ubHkgQXJhYmljIGZvbnRzIGFyZSBuZWNlc3NhcnkuCisKK28gIENvbXBhdGlibGUgd2l0aCB0aGUgb3JpZ2luYWwgVklNLiAgIEFsbW9zdCBhbGwgZmVhdHVyZXMgd29yayBpbgorICAgcmlnaHQtdG8tbGVmdCBtb2RlICh0aGVyZSBhcmUgbGlhYmxlIHRvIGJlIGJ1Z3MpLgorCitvICBDaGFuZ2luZyBrZXlib2FyZCBtYXBwaW5nIGFuZCByZXZlcnNlIGluc2VydCBtb2RlcyB1c2luZyBhIHNpbmdsZQorICAgY29tbWFuZC4KKworbyAgVG9nZ2xpbmcgY29tcGxldGUgQXJhYmljIHN1cHBvcnQgdmlhIGEgc2luZ2xlIGNvbW1hbmQuCisKK28gIFdoaWxlIGluIEFyYWJpYyBtb2RlLCBudW1iZXJzIGFyZSBlbnRlcmVkIGZyb20gbGVmdCB0byByaWdodC4gVXBvbgorICAgZW50ZXJpbmcgYSBub25lIG51bWJlciBjaGFyYWN0ZXIsIHRoYXQgY2hhcmFjdGVyIHdpbGwgYmUgaW5zZXJ0ZWQKKyAgIGp1c3QgaW50byB0aGUgbGVmdCBvZiB0aGUgbGFzdCBudW1iZXIuCisKK28gIEFyYWJpYyBrZXltYXBwaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgaW4gcmV2ZXJzZSBpbnNlcnQgbW9kZS4KKworbyAgUHJvcGVyIEJpZGlyZWN0aW9uYWwgZnVuY3Rpb25hbGl0eSBpcyBwb3NzaWJsZSBnaXZlbiBWSU0gaXMKKyAgIHN0YXJ0ZWQgd2l0aGluIGEgQmlkaSBjYXBhYmxlIHRlcm1pbmFsIGVtdWxhdG9yLgorCisKK0FyYWJpYyBGb250cwkJCQkJCSphcmFiaWNmb250cyoKKy0tLS0tLS0tLS0tLQorCitWSU0gcmVxdWlyZXMgbW9ub3NwYWNlZCBmb250cyBvZiB3aGljaCB0aGVyZSBhcmUgbWFueSBvdXQgdGhlcmUuCitBcmFiaWMgcmVxdWlyZXMgSVNPLTg4NTktNiBhcyB3ZWxsIGFzIFByZXNlbnRhdGlvbiBGb3JtLUIgZm9udHMKKyh3aXRob3V0IEZvcm0tQiwgQXJhYmljIHdpbGwgX05PVF8gYmUgdXNhYmxlKS4JSXQgaXMgaGlnaGx5CityZWNvbW1lbmRlZCB0aGF0IHVzZXJzIHNlYXJjaCBmb3Igc28tY2FsbGVkICdJU08tMTA2NDYtMScgZm9udHMuCitEbyBhbiBJbnRlcm5ldCBzZWFyY2ggb3IgY2hlY2sgd3d3LmFyYWJleWVzLm9yZyBmb3IgZnVydGhlcgoraW5mbyBvbiB3aGVyZSB0byBhdHRhaW4gdGhlIG5lY2Vzc2FyeSBBcmFiaWMgZm9udHMuCisKKworRm9udCBJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKK28gIEluc3RhbGxhdGlvbiBvZiBmb250cyBmb3IgWCBXaW5kb3cgc3lzdGVtcyAoVW5peC9MaW51eCkKKworICAgRGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtLCBjb3B5IHlvdXJfQVJBQklDX0ZPTlQgZmlsZSBpbnRvIGEKKyAgIGRpcmVjdG9yeSBvZiB5b3VyIGNob2ljZS4gIENoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcKKyAgIHRoZSBBcmFiaWMgZm9udHMgYW5kIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworICAgICAlCW1rZm9udGRpcgorICAgICAlCXhzZXQgK2ZwIHBhdGhfbmFtZV9vZl9hcmFiaWNfZm9udHNfZGlyZWN0b3J5CisKKworVXNhZ2UKKy0tLS0tCitQcmlvciB0byB0aGUgYWN0dWFsIHVzYWdlIG9mIEFyYWJpYyB3aXRoaW4gVklNLCBhIG51bWJlciBvZiBzZXR0aW5ncworbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yIGFuZCBpbnZva2VkLgorCitvICBTZXR0aW5nIHRoZSBBcmFiaWMgZm9udHMKKworICAgKyAgRm9yIFZJTSBHVUkgc2V0IHRoZSAnZ3VpZm9udCcgdG8geW91cl9BUkFCSUNfRk9OVC4gVGhpcyBpcyBkb25lCisgICAgICBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFZJTSB3aW5kb3cuCis+CisJCTpzZXQgZ3VpZm9udD15b3VyX0FSQUJJQ19GT05UCis8CisgICAgICBOT1RFOiB0aGUgc3RyaW5nICd5b3VyX0FSQUJJQ19GT05UJyBpcyB1c2VkIHRvIGRlbm90ZSBhIGNvbXBsZXRlCisJICAgIGZvbnQgbmFtZSBha2luIHRvIHRoYXQgdXNlZCBpbiBsaW51eC91bml4IHN5c3RlbS4KKwkgICAgKGVnLiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc28xMDY0Ni0xKQorCisgICAgICBZb3UgY2FuIGFwcGVuZCB0aGUgJ2d1aWZvbnQnIHNldCBjb21tYW5kIHRvIHlvdXIgLnZpbXJjIGZpbGUKKyAgICAgIGluIG9yZGVyIHRvIGdldCB0aGUgc2FtZSBhYm92ZSBub3RlZCByZXN1bHRzLiAgSW4gb3RoZXIgd29yZHMsCisgICAgICB5b3UgY2FuIGluY2x1ZGUgJzpzZXQgZ3VpZm9udD15b3VyX0FSQUJJQ19GT05UJyB0byB5b3VyIC52aW1yYworICAgICAgZmlsZS4KKworICAgKyAgVW5kZXIgdGhlIFggV2luZG93IGVudmlyb25tZW50LCB5b3UgY2FuIGFsc28gc3RhcnQgVklNIHdpdGgKKyAgICAgICctZm4geW91cl9BUkFCSUNfRk9OVCcgb3B0aW9uLgorCitvICBTZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgRW5jb2RpbmcKKyAgIFRvIGVuYWJsZSB0aGUgY29ycmVjdCBBcmFiaWMgZW5jb2RpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIG5lZWRzCisgICB0byBiZSBhcHBlbmRlZCwKKz4KKwkJOnNldCBlbmNvZGluZz11dGYtOAorPAorICAgdG8geW91ciAudmltcmMgZmlsZSAoZW50ZXJpbmcgdGhlIGNvbW1hbmQgbWFudWFsbHkgaW50byB5b3UgVklNCisgICB3aW5kb3cgaXMgaGlnaGx5IGRpc2NvdXJhZ2VkKS4gIEluIHNob3J0LCBpbmNsdWRlICc6c2V0CisgICBlbmNvZGluZz11dGYtOCcgdG8geW91ciAudmltcmMgZmlsZS4KKworICAgQXR0ZW1wdHMgdG8gdXNlIEFyYWJpYyB3aXRob3V0IFVURi04IHdpbGwgcmVzdWx0IHRoZSBmb2xsb3dpbmcKKyAgIHdhcm5pbmcgbWVzc2FnZSwKKworCQkJCQkJCQkqVzE3KiAgPgorICAgICBBcmFiaWMgcmVxdWlyZXMgVVRGLTgsIGRvICc6c2V0IGVuY29kaW5nPXV0Zi04JworCitvICBFbmFibGUgQXJhYmljIHNldHRpbmdzIFtzaG9ydC1jdXRdCisKKyAgIEluIG9yZGVyIHRvIHNpbXBsaWZ5IGFuZCBzdHJlYW1saW5lIHRoaW5ncywgeW91IGNhbiBlaXRoZXIgaW52b2tlCisgICBWSU0gd2l0aCB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiwKKworICAgICAlIHZpbSAtQSBteV91dGY4X2FyYWJpY19maWxlIC4uLgorCisgICBvciBlbmFibGUgJ2FyYWJpYycgdmlhIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3aXRoaW4gVklNCis+CisJCTpzZXQgYXJhYmljCis8CisgICBUaGUgdHdvIGFib3ZlIG5vdGVkIHBvc3NpYmxlIGludm9jYXRpb25zIGFyZSB0aGUgcHJlZmVycmVkIG1hbm5lcgorICAgaW4gd2hpY2ggdXNlcnMgYXJlIGluc3RydWN0ZWQgdG8gcHJvY2VlZC4gIEJhcmluZyBhbiBlbmFibGVkICd0ZXJtYmlkaScKKyAgIHNldHRpbmcsIGJvdGggY29tbWFuZCBvcHRpb25zOgorCisgICAgIDEuIHNldCB0aGUgYXBwcm9wcmlhdGUga2V5bWFwCisgICAgIDIuIGVuYWJsZSB0aGUgZGVsZXRpb24gb2YgYSBzaW5nbGUgY29tYmluZWQgcGFpciBjaGFyYWN0ZXIKKyAgICAgMy4gZW5hYmxlIHJpZ2h0bGVmdCAgICBtb2RlCisgICAgIDQuIGVuYWJsZSByaWdodGxlZnRjbWQgbW9kZSAoYWZmZWN0aW5nIHRoZSBjb21tYW5kLWxpbmUpCisgICAgIDUuIGVuYWJsZSBhcmFiaWNzaGFwZSAgbW9kZSAoZG8gdmlzdWFsIGNoYXJhY3RlciBhbHRlcmF0aW9ucykKKworICAgWW91IG1heSBhbHNvIGFwcGVuZCB0aGUgY29tbWFuZCB0byB5b3VyIC52aW1yYyBmaWxlIGFuZCBzaW1wbHkKKyAgIGluY2x1ZGUgJzpzZXQgYXJhYmljJyB0byBpdC4KKworICAgWW91IGFyZSBhbHNvIGNhcGFibGUgb2YgZGlzYWJsaW5nIEFyYWJpYyBzdXBwb3J0IHZpYQorPgorCQk6c2V0IG5vYXJhYmljCis8CisgICB3aGljaCByZXNldHMgZXZlcnl0aGluZyB0aGF0IHRoZSBjb21tYW5kIGhhZCBlbmFibGVkIHdpdGhvdXQgdG91Y2hpbmcKKyAgIHRoZSBnbG9iYWwgc2V0dGluZ3MgYXMgdGhleSBjb3VsZCBhZmZlY3Qgb3RoZXIgcG9zc2libGUgb3BlbiBidWZmZXJzLgorICAgSW4gc2hvcnQgdGhlICdub2FyYWJpYycgY29tbWFuZCwKKworICAgICAxLiByZXNldHMgdG8gdGhlIGFsdGVybmF0ZSBrZXltYXAKKyAgICAgMi4gZGlzYWJsZXMgdGhlIGRlbGV0aW9uIG9mIGEgc2luZ2xlIGNvbWJpbmVkIHBhaXIgY2hhcmFjdGVyCisgICAgIDMuIGRpc2FibGVzIHJpZ2h0bGVmdCBtb2RlCisKKyAgIE5PVEU6IHRoZSAnYXJhYmljJyBjb21tYW5kIHRha2VzIGludG8gY29uc2lkZXJhdGlvbiAndGVybWJpZGknIGZvcgorCSBwb3NzaWJsZSBleHRlcm5hbCBiaS1kaXJlY3Rpb25hbCAoYmlkaSkgc3VwcG9ydCBmcm9tIHRoZQorCSB0ZXJtaW5hbCAoIm1sdGVybSIgZm9yIGluc3RhbmNlIG9mZmVycyBzdWNoIHN1cHBvcnQpLgorCSAndGVybWJpZGknLCBpZiBhdmFpbGFibGUsIGlzIHN1cGVyaW9yIHRvIHJpZ2h0bGVmdCBzdXBwb3J0CisJIGFuZCBpdHMgc3VwcG9ydCBpcyBwcmVmZXJyZWQgZHVlIHRvIGl0cyBsZXZlbCBvZiBvZmZlcmluZ3MuCisJICdhcmFiaWMnIHdoZW4gJ3Rlcm1iaWRpJyBpcyBlbmFibGVkIG9ubHkgc2V0cyB0aGUga2V5bWFwLgorCisgICBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHlvdSdkIGxpa2UgdG8gYmUgdmVyYm9zZSBhbmQgZXhwbGljaXQgYW5kCisgICBhcmUgb3B0aW5nIG5vdCB0byB1c2UgdGhlICdhcmFiaWMnIHNob3J0LWN1dCBjb21tYW5kLCBoZXJlJ3Mgd2hhdAorICAgaXMgbmVlZGVkIChpZS4gaWYgeW91IHVzZSAnOnNldCBhcmFiaWMnIHlvdSBjYW4gc2tpcCB0aGlzIHNlY3Rpb24pIC0KKworICAgKyAgQXJhYmljIEtleW1hcHBpbmcgQWN0aXZhdGlvbgorCisgICAgICBUbyBhY3RpdmF0ZSB0aGUgQXJhYmljIGtleW1hcCAoaWUuIHRvIHJlbWFwIHlvdXIgRW5nbGlzaC9MYXRpbgorICAgICAga2V5Ym9hcmQgdG8gbG9vay1uLWZlZWwgbGlrZSBhIHN0YW5kYXJkIEFyYWJpYyBvbmUpLCBzZXQgdGhlCisgICAgICAna2V5bWFwJyBjb21tYW5kIHRvICJhcmFiaWMiLiAgVGhpcyBpcyBkb25lIGJ5IGVudGVyaW5nCis+CisJCTpzZXQga2V5bWFwPWFyYWJpYworPAorICAgICAgaW4geW91ciBWSU0gd2luZG93LiAgWW91IGNhbiBhbHNvIGFwcGVuZCB0aGUgJ2tleW1hcCcgc2V0IGNvbW1hbmQgdG8KKyAgICAgIHlvdXIgLnZpbXJjIGZpbGUuICBJbiBvdGhlciB3b3JkcywgeW91IGNhbiBpbmNsdWRlICc6c2V0IGtleW1hcD1hcmFiaWMnCisgICAgICB0byB5b3VyIC52aW1yYyBmaWxlLgorCisgICAgICBUbyB0dXJuIHRvZ2dsZSAob3Igc3dpdGNoKSB5b3VyIGtleW1hcHBpbmcgYmV0d2VlbiBBcmFiaWMgYW5kIHRoZQorICAgICAgZGVmYXVsdCBtYXBwaW5nIChFbmdsaXNoKSwgaXQgaXMgYWR2aXNlZCB0aGF0IHVzZXJzIHVzZSB0aGUgJ0NUUkwtXicKKyAgICAgIGtleSBwcmVzcyB3aGlsZSBpbiBpbnNlcnQgKG9yIGFkZC9yZXBsYWNlKSBtb2RlLglUaGUgY29tbWFuZC1saW5lCisgICAgICB3aWxsIGRpc3BsYXkgeW91ciBjdXJyZW50IG1hcHBpbmcgYnkgZGlzcGxheWluZyBhbiAiQXJhYmljIiBzdHJpbmcKKyAgICAgIG5leHQgdG8geW91ciBpbnNlcnRpb24gbW9kZSAoZWcuIC0tIElOU0VSVCBBcmFiaWMgLS0pIGluZGljYXRpbmcKKyAgICAgIHlvdXIgY3VycmVudCBrZXltYXAuCisKKyAgICsgIEFyYWJpYyBkZWxldGlvbiBvZiBhIGNvbWJpbmVkIHBhaXIgY2hhcmFjdGVyCisKKyAgICAgIEJ5IGRlZmF1bHQgVklNIGhhcyB0aGUgJ2RlbGNvbWJpbmUnIG9wdGlvbiBkaXNhYmxlZC4gIFRoaXMgb3B0aW9uCisgICAgICBhbGxvd3MgdGhlIGRlbGV0aW9uIG9mIEFMRUYgaW4gYSBMQU1fQUxFRiAoTEFBKSBjb21iaW5lZCBjaGFyYWN0ZXIKKyAgICAgIGFuZCBzdGlsbCByZXRhaW4gdGhlIExBTSAoaWUuIGl0IHJldmVydHMgdG8gdHJlYXRpbmcgdGhlIGNvbWJpbmVkCisgICAgICBjaGFyYWN0ZXIgYXMgaXRzIG5hdHVyYWwgdHdvIGNoYXJhY3RlcnMgZm9ybSAtLSB0aGlzIGFsc28gcGVydGFpbnMKKyAgICAgIHRvIGhhcmFrYXQgYW5kIHRoZWlyIGNvbWJpbmVkIGZvcm1zKS4gIFlvdSBjYW4gZW5hYmxlIHRoaXMgb3B0aW9uCisgICAgICBieSBlbnRlcmluZworPgorCQk6c2V0IGRlbGNvbWJpbmUKKzwKKyAgICAgIGluIG91ciBWSU0gd2luZG93LiAgWW91IGNhbiBhbHNvIGFwcGVuZCB0aGUgJ2RlbGNvbWJpbmUnIHNldCBjb21tYW5kCisgICAgICB0byB5b3VyIC52aW1yYyBmaWxlLiAgSW4gb3RoZXIgd29yZHMsIHlvdSBjYW4gaW5jbHVkZSAnOnNldCBkZWxjb21iaW5lJworICAgICAgdG8geW91ciAudmltcmMgZmlsZS4KKworICAgKyAgQXJhYmljIHJpZ2h0LXRvLWxlZnQgTW9kZQorCisgICAgICBCeSBkZWZhdWx0IFZJTSBzdGFydHMgaW4gTGVmdC10by1yaWdodCBtb2RlLiAgJ3JpZ2h0bGVmdCcgaXMgdGhlCisgICAgICBjb21tYW5kIHRoYXQgYWxsb3dzIG9uZSB0byBhbHRlciBhIHdpbmRvdydzIG9yaWVudGF0aW9uIC0gdGhhdCBjYW4KKyAgICAgIGJlIGFjY29tcGxpc2hlZCB2aWEsCisKKyAgICAgIC0gVG9nZ2xpbmcgYmV0d2VlbiBsZWZ0LXRvLXJpZ2h0IGFuZCByaWdodC10by1sZWZ0IG1vZGVzIGlzCisJYWNjb21wbGlzaGVkIHRocm91Z2ggJzpzZXQgcmlnaHRsZWZ0JyBhbmQgJzpzZXQgbm9yaWdodGxlZnQnLgorCisgICAgICAtIFdoaWxlIGluIExlZnQtdG8tcmlnaHQgbW9kZSwgZW50ZXIgJzpzZXQgcmwnIGluIHRoZSBjb21tYW5kIGxpbmUKKwkoJ3JsJyBpcyB0aGUgYWJicmV2aWF0aW9uIGZvciByaWdodGxlZnQpLgorCisgICAgICAtIFB1dCB0aGUgJzpzZXQgcmwnIGxpbmUgaW4geW91ciAnLnZpbXJjJyBmaWxlIHRvIHN0YXJ0IHRoZSBWSU0gaW4KKwlyaWdodC10by1sZWZ0IG1vZGUgcGVybWFuZW50bHkuCisKKyAgICsgIEFyYWJpYyByaWdodC10by1sZWZ0IGNvbW1hbmQtbGluZSBNb2RlCisKKyAgICAgIEZvciBjZXJ0YWluIGNvbW1hbmRzIHRoZSBlZGl0aW5nIGNhbiBiZSBkb25lIGluIHJpZ2h0LXRvLWxlZnQgbW9kZS4KKyAgICAgIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgYXBwbGljYWJsZSB0byBzZWFyY2ggY29tbWFuZHMuCisKKyAgICAgIFRoaXMgaXMgY29udHJvbGxlZCB3aXRoIHRoZSAncmlnaHRsZWZ0Y21kJyBvcHRpb24uICBUaGUgZGVmYXVsdCBpcworICAgICAgInNlYXJjaCIsIHdoaWNoIG1lYW5zIHRoYXQgd2luZG93cyBpbiB3aGljaCAncmlnaHRsZWZ0JyBpcyBzZXQgd2lsbAorICAgICAgZWRpdCBzZWFyY2ggY29tbWFuZHMgaW4gcmlnaHQtbGVmdCBtb2RlLglUbyBkaXNhYmxlIHRoaXMgYmVoYXZpb3IsCis+CisJCTpzZXQgcmlnaHRsZWZ0Y21kPQorPAorICAgICAgVG8gZW5hYmxlIHJpZ2h0LWxlZnQgZWRpdGluZyBvZiBzZWFyY2ggY29tbWFuZHMgYWdhaW4sCis+CisJCTpzZXQgcmlnaHRsZWZ0Y21kJgorPAorICAgKyAgQXJhYmljIFNoYXBpbmcgTW9kZQorCisgICAgICBUbyBhY3RpdmF0ZSB0aGUgcmVxdWlyZWQgdmlzdWFsIGNoYXJhY3RlcnMgYWx0ZXJhdGlvbnMgKHNoYXBpbmcsCisgICAgICBjb21wb3NpbmcsIGNvbWJpbmluZykgd2hpY2ggdGhlIEFyYWJpYyBsYW5ndWFnZSByZXF1aXJlcywgZW5hYmxlCisgICAgICB0aGUgJ2FyYWJpY3NoYXBlJyBjb21tYW5kLiAgVGhpcyBpcyBkb25lIGJ5IGVudGVyaW5nCis+CisJCTpzZXQgYXJhYmljc2hhcGUKKzwKKyAgICAgIGluIG91ciBWSU0gd2luZG93LiAgWW91IGNhbiBhbHNvIGFwcGVuZCB0aGUgJ2FyYWJpY3NoYXBlJyBzZXQKKyAgICAgIGNvbW1hbmQgdG8geW91ciAudmltcmMgZmlsZS4gIEluIG90aGVyIHdvcmRzLCB5b3UgY2FuIGluY2x1ZGUKKyAgICAgICc6c2V0IGFyYWJpY3NoYXBlJyB0byB5b3VyIC52aW1yYyBmaWxlLgorCisKK0tleW1hcC9LZXlib2FyZAkJCQkJCSphcmFiaWNrZXltYXAqCistLS0tLS0tLS0tLS0tLS0KKworVGhlIGNoYXJhY3Rlci9sZXR0ZXIgZW5jb2RpbmcgdXNlZCBpbiBWSU0gaXMgdGhlIHN0YW5kYXJkIFVURi04LgorSXQgaXMgd2lkZWx5IGRpc2NvdXJhZ2VkIHRoYXQgYW55IG90aGVyIGVuY29kaW5nIGJlIHVzZWQgb3IgZXZlbgorYXR0ZW1wdGVkLgorCitOb3RlOiBVVEYtOCBpcyBhbiBhbGwgZW5jb21wYXNzaW5nIGVuY29kaW5nIGFuZCBhcyBzdWNoIGlzCisgICAgICB0aGUgb25seSBzdXBwb3J0ZWQgKGFuZCBlbmNvdXJhZ2VkKSBlbmNvZGluZyB3aXRoCisgICAgICByZWdhcmQgdG8gQXJhYmljIChhbGwgb3RoZXIgcHJvcHJpZXRhcnkgZW5jb2RpbmdzCisgICAgICBzaG91bGQgYmUgZGlzY291cmFnZWQgYW5kIGZyb3duZWQgdXBvbikuCisKK28gIEtleWJvYXJkCisKKyAgICsgIENUUkwtXiBpbiBpbnNlcnQvcmVwbGFjZSBtb2RlIHRvZ2dsZXMgYmV0d2VlbiBBcmFiaWMvTGF0aW4gbW9kZQorCisgICArICBLZXlib2FyZCBtYXBwaW5nIGlzIGJhc2VkIG9uIHRoZSBNaWNyb3NvZnQncyBBcmFiaWMga2V5bWFwICh0aGUKKyAgICAgIGRlZmFjdG8gc3RhbmRhcmQgaW4gdGhlIEFyYWIgd29ybGQpOgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwhICAgfEAgICB8IyAgIHwkICAgfCUgICB8XiAgIHwmICAgfCogICB8KCAgIHwpICAgfF8gICB8KyAgIHx8ICAgfH4gINmRIHwKKyAgfDEg2aEgfDIg2aIgfDMg2aMgfDQg2aQgfDUg2aUgfDYg2aYgfDcg2acgfDgg2aggfDkg2akgfDAg2aAgfC0gICB8PSAgIHxcICAgfGAg2LAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgIHxRICDZjiB8VyAg2YsgfEUgINmPIHxSICDZjCB8VCDZhNilIHxZINilIHxVIGAgfEkgw7cgfE8geCB8UCDYmyB8eyA8IHx9ID4gfAorICAgICAgIHxxINi2IHx3INi1IHxlINirIHxyINmCIHx0INmBIHx5INi6IHx1INi5IHxpINmHIHxvINiuIHxwINitIHxbINisIHxdINivIHwKKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJIHxBICDZkCB8UyAg2Y0gfEQgWyB8RiBdIHxHINmE2KMgfEgg2KMgfEog2YAgfEsg2IwgfEwgLyB8OiAgIHwiICAgfAorCSB8YSDYtCB8cyDYsyB8ZCDZiiB8ZiDYqCB8ZyDZhCB8aCDYpyB8aiDYqiB8ayDZhiB8bCDZhSB8OyDZgyB8JyDYtyB8CisJICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfFogfiB8WCAg2ZIgfEMgeyB8ViB9IHxCINmE2KIgfE4g2KIgfE0gJyB8PCAsIHw+IC4gfD8g2J8gfAorCSAgIHx6INimIHx4INihIHxjINikIHx2INixIHxiINmE2KcgfG4g2YkgfG0g2KkgfCwg2YggfC4g2LIgfC8g2LggfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitSZXN0cmljdGlvbnMKKy0tLS0tLS0tLS0tLQorCitvICBWSU0gaW4gaXRzIEdVSSBmb3JtIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IEJpLWRpcmVjdGlvbmFsaXR5CisgICAoaWUuIHRoZSBhYmlsaXR5IHRvIHNlZSBib3RoIEFyYWJpYyBhbmQgTGF0aW4gaW50ZXJtaXhlZCB3aXRoaW4KKyAgIHRoZSBzYW1lIGxpbmUpLgorCisKK0tub3duIEJ1Z3MKKy0tLS0tLS0tLS0KKworVGhlcmUgaXMgb25lIGtub3duIG1pbm9yIGJ1ZywKKworIDEuIElmIHlvdSBpbnNlcnQgYSBoYXJha2EgKGVnLiBGYXRoYSAoVSswNjRFKSkgYWZ0ZXIgYSBMQU0gKFUrMDY0NCkKKyAgICBhbmQgdGhlbiBpbnNlcnQgYW4gQUxFRiAoVSswNjI3KSwgdGhlIGFwcHJvcHJpYXRlIGNvbWJpbmluZyB3aWxsCisgICAgbm90IGhhcHBlbiBkdWUgdG8gdGhlIHNhbmR3aWNoZWQgaGFyYWthIHJlc3VsdGluZyBpbiBzb21ldGhpbmcKKyAgICB0aGF0IHdpbGwgTk9UIGJlIGRpc3BsYXllZCBjb3JyZWN0bHkuCisKKyAgICBXT1JLLUFST1VORDogRG9uJ3QgaW5jbHVkZSBoYXJha2F0cyBiZXR3ZWVuIExBTSBhbmQgQUxFRiBjb21ib3MuCisJCSBJbiBnZW5lcmFsLCBkb24ndCBhbnRpY2lwYXRlIHRvIHNlZSBjb3JyZWN0IHZpc3VhbAorCQkgcmVwcmVzZW50YXRpb24gd2l0aCByZWdhcmQgdG8gaGFyYWthdHMgYW5kIExBTStBTEVGCisJCSBjb21iaW5lZCBjaGFyYWN0ZXJzIChldmVuIHRob3NlIGVudGVyZWQgYWZ0ZXIgYm90aAorCQkgY2hhcmFjdGVycykuICBUaGUgcHJvYmxlbSBub3RlZCBpcyBzdHJpY3RseSBhIHZpc3VhbAorCQkgb25lLCBtZWFuaW5nIHNhdmluZyBzdWNoIGEgZmlsZSB3aWxsIGNvbnRhaW4gYWxsIHRoZQorCQkgYXBwcm9wcmlhdGUgaW5mby9lbmNvZGluZ3MgLSBub3RoaW5nIGlzIGxvc3QuCisKK05vIG90aGVyIGJ1Z3MgYXJlIGtub3duIHRvIGV4aXN0LgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgorCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9hdXRvY21kLnR4dCBiL3J1bnRpbWUvZG9jL2F1dG9jbWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzc0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9hdXRvY21kLnR4dApAQCAtMCwwICsxLDkwNCBAQAorKmF1dG9jbWQudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAyMAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK0F1dG9tYXRpYyBjb21tYW5kcwkJCQkJKmF1dG9jb21tYW5kKgorCitGb3IgYSBiYXNpYyBleHBsYW5hdGlvbiwgc2VlIHNlY3Rpb24gfDQwLjN8IGluIHRoZSB1c2VyIG1hbnVhbC4KKworMS4gIEludHJvZHVjdGlvbgkJfGF1dG9jbWQtaW50cm98CisyLiAgRGVmaW5pbmcgYXV0b2NvbW1hbmRzCXxhdXRvY21kLWRlZmluZXwKKzMuICBSZW1vdmluZyBhdXRvY29tbWFuZHMJfGF1dG9jbWQtcmVtb3ZlfAorNC4gIExpc3RpbmcgYXV0b2NvbW1hbmRzCXxhdXRvY21kLWxpc3R8Cis1LiAgRXZlbnRzCQkJfGF1dG9jbWQtZXZlbnRzfAorNi4gIFBhdHRlcm5zCQkJfGF1dG9jbWQtcGF0dGVybnN8Cis3LiAgR3JvdXBzCQkJfGF1dG9jbWQtZ3JvdXBzfAorOC4gIEV4ZWN1dGluZyBhdXRvY29tbWFuZHMJfGF1dG9jbWQtZXhlY3V0ZXwKKzkuICBVc2luZyBhdXRvY29tbWFuZHMJCXxhdXRvY21kLXVzZXwKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQore29ubHkgd2hlbiB0aGUgfCthdXRvY21kfCBmZWF0dXJlIGhhcyBub3QgYmVlbiBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWV9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW50cm9kdWN0aW9uCQkJCQkJKmF1dG9jbWQtaW50cm8qCisKK1lvdSBjYW4gc3BlY2lmeSBjb21tYW5kcyB0byBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGZvciB3aGVuIHJlYWRpbmcgb3IKK3dyaXRpbmcgYSBmaWxlLCB3aGVuIGVudGVyaW5nIG9yIGxlYXZpbmcgYSBidWZmZXIgb3Igd2luZG93LCBhbmQgd2hlbiBleGl0aW5nCitWaW0uICBGb3IgZXhhbXBsZSwgeW91IGNhbiBjcmVhdGUgYW4gYXV0b2NvbW1hbmQgdG8gc2V0IHRoZSAnY2luZGVudCcgb3B0aW9uCitmb3IgZmlsZXMgbWF0Y2hpbmcgKi5jLiAgWW91IGNhbiBhbHNvIHVzZSBhdXRvY29tbWFuZHMgdG8gaW1wbGVtZW50IGFkdmFuY2VkCitmZWF0dXJlcywgc3VjaCBhcyBlZGl0aW5nIGNvbXByZXNzZWQgZmlsZXMgKHNlZSB8Z3ppcC1leGFtcGxlfCkuICBUaGUgdXN1YWwKK3BsYWNlIHRvIHB1dCBhdXRvY29tbWFuZHMgaXMgaW4geW91ciAudmltcmMgb3IgLmV4cmMgZmlsZS4KKworCQkJCQkJCSpFMjAzKiAqRTIwNCogKkUxNDMqCitXQVJOSU5HOiBVc2luZyBhdXRvY29tbWFuZHMgaXMgdmVyeSBwb3dlcmZ1bCwgYW5kIG1heSBsZWFkIHRvIHVuZXhwZWN0ZWQgc2lkZQorZWZmZWN0cy4gIEJlIGNhcmVmdWwgbm90IHRvIGRlc3Ryb3kgeW91ciB0ZXh0LgorLSBJdCdzIGEgZ29vZCBpZGVhIHRvIGRvIHNvbWUgdGVzdGluZyBvbiBhbiBleHBlbmRhYmxlIGNvcHkgb2YgYSBmaWxlIGZpcnN0LgorICBGb3IgZXhhbXBsZTogSWYgeW91IHVzZSBhdXRvY29tbWFuZHMgdG8gZGVjb21wcmVzcyBhIGZpbGUgd2hlbiBzdGFydGluZyB0bworICBlZGl0IGl0LCBtYWtlIHN1cmUgdGhhdCB0aGUgYXV0b2NvbW1hbmRzIGZvciBjb21wcmVzc2luZyB3aGVuIHdyaXRpbmcgd29yaworICBjb3JyZWN0bHkuCistIEJlIHByZXBhcmVkIGZvciBhbiBlcnJvciBoYWxmd2F5IHRocm91Z2ggKGUuZy4sIGRpc2sgZnVsbCkuICBWaW0gd2lsbCBtb3N0bHkKKyAgYmUgYWJsZSB0byB1bmRvIHRoZSBjaGFuZ2VzIHRvIHRoZSBidWZmZXIsIGJ1dCB5b3UgbWF5IGhhdmUgdG8gY2xlYW4gdXAgdGhlCisgIGNoYW5nZXMgdG8gb3RoZXIgZmlsZXMgYnkgaGFuZCAoZS5nLiwgY29tcHJlc3MgYSBmaWxlIHRoYXQgaGFzIGJlZW4KKyAgZGVjb21wcmVzc2VkKS4KKy0gSWYgdGhlIEJ1ZlJlYWQqIGV2ZW50cyBhbGxvdyB5b3UgdG8gZWRpdCBhIGNvbXByZXNzZWQgZmlsZSwgdGhlIEZpbGVSZWFkKgorICBldmVudHMgc2hvdWxkIGRvIHRoZSBzYW1lICh0aGlzIG1ha2VzIHJlY292ZXJ5IHBvc3NpYmxlIGluIHNvbWUgcmFyZSBjYXNlcykuCisgIEl0J3MgYSBnb29kIGlkZWEgdG8gdXNlIHRoZSBzYW1lIGF1dG9jb21tYW5kcyBmb3IgdGhlIEZpbGUqIGFuZCBCdWYqIGV2ZW50cworICB3aGVuIHBvc3NpYmxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIERlZmluaW5nIGF1dG9jb21tYW5kcwkJCQkqYXV0b2NtZC1kZWZpbmUqCisKK05vdGU6IFRoZSAiOmF1dG9jbWQiIGNvbW1hbmQgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgY29tbWFuZCwgc2luY2UgYW55CisnfCcgaXMgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBjb21tYW5kLgorCisJCQkJCQkJKjphdSogKjphdXRvY21kKgorOmF1W3RvY21kXSBbZ3JvdXBdIHtldmVudH0ge3BhdH0gW25lc3RlZF0ge2NtZH0KKwkJCUFkZCB7Y21kfSB0byB0aGUgbGlzdCBvZiBjb21tYW5kcyB0aGF0IFZpbSB3aWxsCisJCQlleGVjdXRlIGF1dG9tYXRpY2FsbHkgb24ge2V2ZW50fSBmb3IgYSBmaWxlIG1hdGNoaW5nCisJCQl7cGF0fS4gIFZpbSBhbHdheXMgYWRkcyB0aGUge2NtZH0gYWZ0ZXIgZXhpc3RpbmcKKwkJCWF1dG9jb21tYW5kcywgc28gdGhhdCB0aGUgYXV0b2NvbW1hbmRzIGV4ZWN1dGUgaW4gdGhlCisJCQlvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgZ2l2ZW4uICBTZWUgfGF1dG9jbWQtbmVzdGVkfAorCQkJZm9yIFtuZXN0ZWRdLgorCitOb3RlIHRoYXQgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCAiJSIsICI8Y3dvcmQ+IikgaW4gdGhlICI6YXV0b2NtZCIKK2FyZ3VtZW50cyBhcmUgbm90IGV4cGFuZGVkIHdoZW4gdGhlIGF1dG9jb21tYW5kIGlzIGRlZmluZWQuICBUaGVzZSB3aWxsIGJlCitleHBhbmRlZCB3aGVuIHRoZSBFdmVudCBpcyByZWNvZ25pemVkLCBhbmQgdGhlIHtjbWR9IGlzIGV4ZWN1dGVkLiAgVGhlIG9ubHkKK2V4Y2VwdGlvbiBpcyB0aGF0ICI8c2ZpbGU+IiBpcyBleHBhbmRlZCB3aGVuIHRoZSBhdXRvY21kIGlzIGRlZmluZWQuICBFeGFtcGxlOgorPgorCTphdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5odG1sIHNvIDxzZmlsZT46aC9odG1sLnZpbQorCitIZXJlIFZpbSBleHBhbmRzIDxzZmlsZT4gdG8gdGhlIG5hbWUgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGlzIGxpbmUuCisKK1doZW4geW91ciAudmltcmMgZmlsZSBpcyBzb3VyY2VkIHR3aWNlLCB0aGUgYXV0b2NvbW1hbmRzIHdpbGwgYXBwZWFyIHR3aWNlLgorVG8gYXZvaWQgdGhpcywgcHV0IHRoaXMgY29tbWFuZCBpbiB5b3VyIC52aW1yYyBmaWxlLCBiZWZvcmUgZGVmaW5pbmcKK2F1dG9jb21tYW5kczogPgorCisJOmF1dG9jbWQhCSIgUmVtb3ZlIEFMTCBhdXRvY29tbWFuZHMgZm9yIHRoZSBjdXJyZW50IGdyb3VwLgorCitJZiB5b3UgZG9uJ3Qgd2FudCB0byByZW1vdmUgYWxsIGF1dG9jb21tYW5kcywgeW91IGNhbiBpbnN0ZWFkIHVzZSBhIHZhcmlhYmxlCit0byBlbnN1cmUgdGhhdCBWaW0gaW5jbHVkZXMgdGhlIGF1dG9jb21tYW5kcyBvbmx5IG9uY2U6ID4KKworCTppZiAhZXhpc3RzKCJhdXRvY29tbWFuZHNfbG9hZGVkIikKKwk6ICBsZXQgYXV0b2NvbW1hbmRzX2xvYWRlZCA9IDEKKwk6ICBhdSAuLi4KKwk6ZW5kaWYKKworV2hlbiB0aGUgW2dyb3VwXSBhcmd1bWVudCBpcyBub3QgZ2l2ZW4sIFZpbSB1c2VzIHRoZSBjdXJyZW50IGdyb3VwIChhcyBkZWZpbmVkCit3aXRoICI6YXVncm91cCIpOyBvdGhlcndpc2UsIFZpbSB1c2VzIHRoZSBncm91cCBkZWZpbmVkIHdpdGggW2dyb3VwXS4gIE5vdGUKK3RoYXQgW2dyb3VwXSBtdXN0IGhhdmUgYmVlbiBkZWZpbmVkIGJlZm9yZS4gIFlvdSBjYW5ub3QgZGVmaW5lIGEgbmV3IGdyb3VwCit3aXRoICI6YXUgZ3JvdXAgLi4uIjsgdXNlICI6YXVncm91cCIgZm9yIHRoYXQuCisKK1doaWxlIHRlc3RpbmcgYXV0b2NvbW1hbmRzLCB5b3UgbWlnaHQgZmluZCB0aGUgJ3ZlcmJvc2UnIG9wdGlvbiB0byBiZSB1c2VmdWw6ID4KKwk6c2V0IHZlcmJvc2U9OQorVGhpcyBzZXR0aW5nIG1ha2VzIFZpbSBlY2hvIHRoZSBhdXRvY29tbWFuZHMgYXMgaXQgZXhlY3V0ZXMgdGhlbS4KKworV2hlbiBkZWZpbmluZyBhbiBhdXRvY29tbWFuZCBpbiBhIHNjcmlwdCwgaXQgd2lsbCBiZSBhYmxlIHRvIGNhbGwgZnVuY3Rpb25zCitsb2NhbCB0byB0aGUgc2NyaXB0IGFuZCB1c2UgbWFwcGluZ3MgbG9jYWwgdG8gdGhlIHNjcmlwdC4gIFdoZW4gdGhlIGV2ZW50IGlzCit0cmlnZ2VyZWQgYW5kIHRoZSBjb21tYW5kIGV4ZWN1dGVkLCBpdCB3aWxsIHJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2NyaXB0CitpdCB3YXMgZGVmaW5lZCBpbi4gIFRoaXMgbWF0dGVycyBpZiB8PFNJRD58IGlzIHVzZWQgaW4gYSBjb21tYW5kLgorCitXaGVuIGV4ZWN1dGluZyB0aGUgY29tbWFuZHMsIHRoZSBtZXNzYWdlcyBmcm9tIG9uZSBjb21tYW5kIG92ZXJ3cml0ZXMgYQorcHJldmlvdXMgbWVzc2FnZS4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gd2hlbiBleGVjdXRpbmcgdGhlIGNvbW1hbmRzCittYW51YWxseS4gIE1vc3RseSB0aGUgc2NyZWVuIHdpbGwgbm90IHNjcm9sbCB1cCwgdGh1cyB0aGVyZSBpcyBubyBoaXQtZW50ZXIKK3Byb21wdC4gIFdoZW4gb25lIGNvbW1hbmQgb3V0cHV0cyB0d28gbWVzc2FnZXMgdGhpcyBjYW4gaGFwcGVuIGFueXdheS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBSZW1vdmluZyBhdXRvY29tbWFuZHMJCQkJKmF1dG9jbWQtcmVtb3ZlKgorCis6YXVbdG9jbWRdISBbZ3JvdXBdIHtldmVudH0ge3BhdH0gW25lc3RlZF0ge2NtZH0KKwkJCVJlbW92ZSBhbGwgYXV0b2NvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB7ZXZlbnR9IGFuZAorCQkJe3BhdH0sIGFuZCBhZGQgdGhlIGNvbW1hbmQge2NtZH0uICBTZWUKKwkJCXxhdXRvY21kLW5lc3RlZHwgZm9yIFtuZXN0ZWRdLgorCis6YXVbdG9jbWRdISBbZ3JvdXBdIHtldmVudH0ge3BhdH0KKwkJCVJlbW92ZSBhbGwgYXV0b2NvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB7ZXZlbnR9IGFuZAorCQkJe3BhdH0uCisKKzphdVt0b2NtZF0hIFtncm91cF0gKiB7cGF0fQorCQkJUmVtb3ZlIGFsbCBhdXRvY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIHtwYXR9IGZvciBhbGwKKwkJCWV2ZW50cy4KKworOmF1W3RvY21kXSEgW2dyb3VwXSB7ZXZlbnR9CisJCQlSZW1vdmUgQUxMIGF1dG9jb21tYW5kcyBmb3Ige2V2ZW50fS4KKworOmF1W3RvY21kXSEgW2dyb3VwXQlSZW1vdmUgQUxMIGF1dG9jb21tYW5kcy4KKworV2hlbiB0aGUgW2dyb3VwXSBhcmd1bWVudCBpcyBub3QgZ2l2ZW4sIFZpbSB1c2VzIHRoZSBjdXJyZW50IGdyb3VwIChhcyBkZWZpbmVkCit3aXRoICI6YXVncm91cCIpOyBvdGhlcndpc2UsIFZpbSB1c2VzIHRoZSBncm91cCBkZWZpbmVkIHdpdGggW2dyb3VwXS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBMaXN0aW5nIGF1dG9jb21tYW5kcwkJCQkJKmF1dG9jbWQtbGlzdCoKKworOmF1W3RvY21kXSBbZ3JvdXBdIHtldmVudH0ge3BhdH0KKwkJCVNob3cgdGhlIGF1dG9jb21tYW5kcyBhc3NvY2lhdGVkIHdpdGgge2V2ZW50fSBhbmQKKwkJCXtwYXR9LgorCis6YXVbdG9jbWRdIFtncm91cF0gKiB7cGF0fQorCQkJU2hvdyB0aGUgYXV0b2NvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB7cGF0fSBmb3IgYWxsCisJCQlldmVudHMuCisKKzphdVt0b2NtZF0gW2dyb3VwXSB7ZXZlbnR9CisJCQlTaG93IGFsbCBhdXRvY29tbWFuZHMgZm9yIHtldmVudH0uCisKKzphdVt0b2NtZF0gW2dyb3VwXQlTaG93IGFsbCBhdXRvY29tbWFuZHMuCisKK0lmIHlvdSBwcm92aWRlIHRoZSBbZ3JvdXBdIGFyZ3VtZW50LCBWaW0gbGlzdHMgb25seSB0aGUgYXV0b2NvbW1hbmRzIGZvcgorW2dyb3VwXTsgb3RoZXJ3aXNlLCBWaW0gbGlzdHMgdGhlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGdyb3Vwcy4gIE5vdGUgdGhhdCB0aGlzCithcmd1bWVudCBiZWhhdmlvciBkaWZmZXJzIGZyb20gdGhhdCBmb3IgZGVmaW5pbmcgYW5kIHJlbW92aW5nIGF1dG9jb21tYW5kcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBFdmVudHMJCQkJCSphdXRvY21kLWV2ZW50cyogKkUyMTUqICpFMjE2KgorCisJCQkJCSphdXRvY29tbWFuZC1ldmVudHMqICp7ZXZlbnR9KgorVmltIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBldmVudHMuICBWaW0gaWdub3JlcyB0aGUgY2FzZSBvZiBldmVudCBuYW1lcworKGUuZy4sIHlvdSBjYW4gdXNlICJCVUZyZWFkIiBvciAiYnVmcmVhZCIgaW5zdGVhZCBvZiAiQnVmUmVhZCIpLgorCisJCQkJCQkJKkJ1Zk5ld0ZpbGUqCitCdWZOZXdGaWxlCQkJV2hlbiBzdGFydGluZyB0byBlZGl0IGEgZmlsZSB0aGF0IGRvZXNuJ3QKKwkJCQlleGlzdC4gIENhbiBiZSB1c2VkIHRvIHJlYWQgaW4gYSBza2VsZXRvbgorCQkJCWZpbGUuCisJCQkJCQkqQnVmUmVhZFByZSogKkUyMDAqICpFMjAxKgorQnVmUmVhZFByZQkJCVdoZW4gc3RhcnRpbmcgdG8gZWRpdCBhIG5ldyBidWZmZXIsIGJlZm9yZQorCQkJCXJlYWRpbmcgdGhlIGZpbGUgaW50byB0aGUgYnVmZmVyLiAgTm90IHVzZWQKKwkJCQlpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LgorCQkJCQkJKkJ1ZlJlYWQqICpCdWZSZWFkUG9zdCoKK0J1ZlJlYWQgb3IgQnVmUmVhZFBvc3QJCVdoZW4gc3RhcnRpbmcgdG8gZWRpdCBhIG5ldyBidWZmZXIsIGFmdGVyCisJCQkJcmVhZGluZyB0aGUgZmlsZSBpbnRvIHRoZSBidWZmZXIsIGJlZm9yZQorCQkJCWV4ZWN1dGluZyB0aGUgbW9kZWxpbmVzLiAgU2VlIHxCdWZXaW5FbnRlcnwKKwkJCQlmb3Igd2hlbiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgYWZ0ZXIKKwkJCQlwcm9jZXNzaW5nIHRoZSBtb2RlbGluZXMuCisJCQkJVGhpcyBkb2VzIE5PVCB3b3JrIGZvciAiOnIgZmlsZSIuICBOb3QgdXNlZAorCQkJCXdoZW4gdGhlIGZpbGUgZG9lc24ndCBleGlzdC4gIEFsc28gdXNlZCBhZnRlcgorCQkJCXN1Y2Nlc3NmdWxseSByZWNvdmVyaW5nIGEgZmlsZS4KKwkJCQkJCQkqQnVmUmVhZENtZCoKK0J1ZlJlYWRDbWQJCQlCZWZvcmUgc3RhcnRpbmcgdG8gZWRpdCBhIG5ldyBidWZmZXIuICBTaG91bGQKKwkJCQlyZWFkIHRoZSBmaWxlIGludG8gdGhlIGJ1ZmZlci4gfENtZC1ldmVudHwKKwkJCQkJCQkqQnVmRmlsZVByZSoKK0J1ZkZpbGVQcmUJCQlCZWZvcmUgY2hhbmdpbmcgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyCisJCQkJd2l0aCB0aGUgIjpmaWxlIiBvciAiOnNhdmVhcyIgY29tbWFuZC4KKwkJCQkJCQkqQnVmRmlsZVBvc3QqCitCdWZGaWxlUG9zdAkJCUFmdGVyIGNoYW5naW5nIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJ1ZmZlcgorCQkJCXdpdGggdGhlICI6ZmlsZSIgb3IgIjpzYXZlYXMiIGNvbW1hbmQuCisJCQkJCQkJKkZpbGVSZWFkUHJlKgorRmlsZVJlYWRQcmUJCQlCZWZvcmUgcmVhZGluZyBhIGZpbGUgd2l0aCBhICI6cmVhZCIgY29tbWFuZC4KKwkJCQkJCQkqRmlsZVJlYWRQb3N0KgorRmlsZVJlYWRQb3N0CQkJQWZ0ZXIgcmVhZGluZyBhIGZpbGUgd2l0aCBhICI6cmVhZCIgY29tbWFuZC4KKwkJCQlOb3RlIHRoYXQgVmltIHNldHMgdGhlICdbIGFuZCAnXSBtYXJrcyB0byB0aGUKKwkJCQlmaXJzdCBhbmQgbGFzdCBsaW5lIG9mIHRoZSByZWFkLiAgVGhpcyBjYW4gYmUKKwkJCQl1c2VkIHRvIG9wZXJhdGUgb24gdGhlIGxpbmVzIGp1c3QgcmVhZC4KKwkJCQkJCQkqRmlsZVJlYWRDbWQqCitGaWxlUmVhZENtZAkJCUJlZm9yZSByZWFkaW5nIGEgZmlsZSB3aXRoIGEgIjpyZWFkIiBjb21tYW5kLgorCQkJCVNob3VsZCBkbyB0aGUgcmVhZGluZyBvZiB0aGUgZmlsZS4gfENtZC1ldmVudHwKKwkJCQkJCQkqRmlsdGVyUmVhZFByZSogKkUxMzUqCitGaWx0ZXJSZWFkUHJlCQkJQmVmb3JlIHJlYWRpbmcgYSBmaWxlIGZyb20gYSBmaWx0ZXIgY29tbWFuZC4KKwkJCQlWaW0gY2hlY2tzIHRoZSBwYXR0ZXJuIGFnYWluc3QgdGhlIG5hbWUgb2YKKwkJCQl0aGUgY3VycmVudCBidWZmZXIsIG5vdCB0aGUgbmFtZSBvZiB0aGUKKwkJCQl0ZW1wb3JhcnkgZmlsZSB0aGF0IGlzIHRoZSBvdXRwdXQgb2YgdGhlCisJCQkJZmlsdGVyIGNvbW1hbmQuCisJCQkJCQkJKkZpbHRlclJlYWRQb3N0KgorRmlsdGVyUmVhZFBvc3QJCQlBZnRlciByZWFkaW5nIGEgZmlsZSBmcm9tIGEgZmlsdGVyIGNvbW1hbmQuCisJCQkJVmltIGNoZWNrcyB0aGUgcGF0dGVybiBhZ2FpbnN0IHRoZSBuYW1lIG9mCisJCQkJdGhlIGN1cnJlbnQgYnVmZmVyIGFzIHdpdGggRmlsdGVyUmVhZFByZS4KKwkJCQkJCQkqRmlsZVR5cGUqCitGaWxlVHlwZQkJCVdoZW4gdGhlICdmaWxldHlwZScgb3B0aW9uIGhhcyBiZWVuIHNldC4KKwkJCQk8YWZpbGU+IGNhbiBiZSB1c2VkIGZvciB0aGUgbmFtZSBvZiB0aGUgZmlsZQorCQkJCXdoZXJlIHRoaXMgb3B0aW9uIHdhcyBzZXQsIGFuZCA8YW1hdGNoPiBmb3IKKwkJCQl0aGUgbmV3IHZhbHVlIG9mICdmaWxldHlwZScuCisJCQkJU2VlIHxmaWxldHlwZXN8LgorCQkJCQkJCSpTeW50YXgqCitTeW50YXgJCQkJV2hlbiB0aGUgJ3N5bnRheCcgb3B0aW9uIGhhcyBiZWVuIHNldC4KKwkJCQk8YWZpbGU+IGNhbiBiZSB1c2VkIGZvciB0aGUgbmFtZSBvZiB0aGUgZmlsZQorCQkJCXdoZXJlIHRoaXMgb3B0aW9uIHdhcyBzZXQsIGFuZCA8YW1hdGNoPiBmb3IKKwkJCQl0aGUgbmV3IHZhbHVlIG9mICdzeW50YXgnLgorCQkJCVNlZSB8OnN5bi1vbnwuCisJCQkJCQkJKlN0ZGluUmVhZFByZSoKK1N0ZGluUmVhZFByZQkJCUJlZm9yZSByZWFkaW5nIGZyb20gc3RkaW4gaW50byB0aGUgYnVmZmVyLgorCQkJCU9ubHkgdXNlZCB3aGVuIHRoZSAiLSIgYXJndW1lbnQgd2FzIHVzZWQgd2hlbgorCQkJCVZpbSB3YXMgc3RhcnRlZCB8LS18LgorCQkJCQkJCSpTdGRpblJlYWRQb3N0KgorU3RkaW5SZWFkUG9zdAkJCUFmdGVyIHJlYWRpbmcgZnJvbSB0aGUgc3RkaW4gaW50byB0aGUgYnVmZmVyLAorCQkJCWJlZm9yZSBleGVjdXRpbmcgdGhlIG1vZGVsaW5lcy4gIE9ubHkgdXNlZAorCQkJCXdoZW4gdGhlICItIiBhcmd1bWVudCB3YXMgdXNlZCB3aGVuIFZpbSB3YXMKKwkJCQlzdGFydGVkIHwtLXwuCisJCQkJCQkqQnVmV3JpdGUqICpCdWZXcml0ZVByZSoKK0J1ZldyaXRlIG9yIEJ1ZldyaXRlUHJlCQlCZWZvcmUgd3JpdGluZyB0aGUgd2hvbGUgYnVmZmVyIHRvIGEgZmlsZS4KKwkJCQkJCQkqQnVmV3JpdGVQb3N0KgorQnVmV3JpdGVQb3N0CQkJQWZ0ZXIgd3JpdGluZyB0aGUgd2hvbGUgYnVmZmVyIHRvIGEgZmlsZQorCQkJCShzaG91bGQgdW5kbyB0aGUgY29tbWFuZHMgZm9yIEJ1ZldyaXRlUHJlKS4KKwkJCQkJCQkqQnVmV3JpdGVDbWQqCitCdWZXcml0ZUNtZAkJCUJlZm9yZSB3cml0aW5nIHRoZSB3aG9sZSBidWZmZXIgdG8gYSBmaWxlLgorCQkJCVNob3VsZCBkbyB0aGUgd3JpdGluZyBvZiB0aGUgZmlsZSBhbmQgcmVzZXQKKwkJCQknbW9kaWZpZWQnIGlmIHN1Y2Nlc3NmdWwuICBUaGUgYnVmZmVyIGNvbnRlbnRzCisJCQkJc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAgfENtZC1ldmVudHwKKwkJCQkJCQkqRmlsZVdyaXRlUHJlKgorRmlsZVdyaXRlUHJlCQkJQmVmb3JlIHdyaXRpbmcgdG8gYSBmaWxlLCB3aGVuIG5vdCB3cml0aW5nIHRoZQorCQkJCXdob2xlIGJ1ZmZlci4KKwkJCQkJCQkqRmlsZVdyaXRlUG9zdCoKK0ZpbGVXcml0ZVBvc3QJCQlBZnRlciB3cml0aW5nIHRvIGEgZmlsZSwgd2hlbiBub3Qgd3JpdGluZyB0aGUKKwkJCQl3aG9sZSBidWZmZXIuCisJCQkJCQkJKkZpbGVXcml0ZUNtZCoKK0ZpbGVXcml0ZUNtZAkJCUJlZm9yZSB3cml0aW5nIHRvIGEgZmlsZSwgd2hlbiBub3Qgd3JpdGluZyB0aGUKKwkJCQl3aG9sZSBidWZmZXIuICBTaG91bGQgZG8gdGhlIHdyaXRpbmcgdG8gdGhlCisJCQkJZmlsZS4gIFNob3VsZCBub3QgY2hhbmdlIHRoZSBidWZmZXIuCisJCQkJfENtZC1ldmVudHwKKwkJCQkJCQkqRmlsZUFwcGVuZFByZSoKK0ZpbGVBcHBlbmRQcmUJCQlCZWZvcmUgYXBwZW5kaW5nIHRvIGEgZmlsZS4KKwkJCQkJCQkqRmlsZUFwcGVuZFBvc3QqCitGaWxlQXBwZW5kUG9zdAkJCUFmdGVyIGFwcGVuZGluZyB0byBhIGZpbGUuCisJCQkJCQkJKkZpbGVBcHBlbmRDbWQqCitGaWxlQXBwZW5kQ21kCQkJQmVmb3JlIGFwcGVuZGluZyB0byBhIGZpbGUuICBTaG91bGQgZG8gdGhlCisJCQkJYXBwZW5kaW5nIHRvIHRoZSBmaWxlLiB8Q21kLWV2ZW50fAorCQkJCQkJCSpGaWx0ZXJXcml0ZVByZSoKK0ZpbHRlcldyaXRlUHJlCQkJQmVmb3JlIHdyaXRpbmcgYSBmaWxlIGZvciBhIGZpbHRlciBjb21tYW5kIG9yCisJCQkJbWFraW5nIGEgZGlmZi4KKwkJCQlWaW0gY2hlY2tzIHRoZSBwYXR0ZXJuIGFnYWluc3QgdGhlIG5hbWUgb2YKKwkJCQl0aGUgY3VycmVudCBidWZmZXIsIG5vdCB0aGUgbmFtZSBvZiB0aGUKKwkJCQl0ZW1wb3JhcnkgZmlsZSB0aGF0IGlzIHRoZSBvdXRwdXQgb2YgdGhlCisJCQkJZmlsdGVyIGNvbW1hbmQuCisJCQkJCQkJKkZpbHRlcldyaXRlUG9zdCoKK0ZpbHRlcldyaXRlUG9zdAkJCUFmdGVyIHdyaXRpbmcgYSBmaWxlIGZvciBhIGZpbHRlciBjb21tYW5kIG9yCisJCQkJbWFraW5nIGEgZGlmZi4KKwkJCQlWaW0gY2hlY2tzIHRoZSBwYXR0ZXJuIGFnYWluc3QgdGhlIG5hbWUgb2YKKwkJCQl0aGUgY3VycmVudCBidWZmZXIgYXMgd2l0aCBGaWx0ZXJXcml0ZVByZS4KKwkJCQkJCQkqRmlsZUNoYW5nZWRTaGVsbCoKK0ZpbGVDaGFuZ2VkU2hlbGwJCVdoZW4gVmltIG5vdGljZXMgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YKKwkJCQlhIGZpbGUgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkLgorCQkJCUFsc28gd2hlbiB0aGUgZmlsZSBhdHRyaWJ1dGVzIG9mIHRoZSBmaWxlCisJCQkJY2hhbmdlLiB8dGltZXN0YW1wfAorCQkJCU1vc3RseSB0cmlnZ2VyZWQgYWZ0ZXIgZXhlY3V0aW5nIGEgc2hlbGwKKwkJCQljb21tYW5kLCBidXQgYWxzbyB3aXRoIGEgfDpjaGVja3RpbWV8IGNvbW1hbmQKKwkJCQlvciB3aGVuIFZpbSByZWdhaW5zIGlucHV0IGZvY3VzLgorCQkJCVRoaXMgYXV0b2NvbW1hbmQgaXMgdHJpZ2dlcmVkIGZvciBlYWNoIGNoYW5nZWQKKwkJCQlmaWxlLiAgSXQgaXMgbm90IHVzZWQgd2hlbiAnYXV0b3JlYWQnIGlzIHNldAorCQkJCWFuZCB0aGUgYnVmZmVyIHdhcyBub3QgY2hhbmdlZC4gIElmIGEKKwkJCQlGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGlzIHByZXNlbnQgdGhlCisJCQkJd2FybmluZyBtZXNzYWdlIGFuZCBwcm9tcHQgaXMgbm90IGdpdmVuLgorCQkJCVRoaXMgaXMgdXNlZnVsIGZvciByZWxvYWRpbmcgcmVsYXRlZCBidWZmZXJzCisJCQkJd2hpY2ggYXJlIGFmZmVjdGVkIGJ5IGEgc2luZ2xlIGNvbW1hbmQuCisJCQkJTk9URTogV2hlbiB0aGlzIGF1dG9jb21tYW5kIGlzIGV4ZWN1dGVkLCB0aGUKKwkJCQljdXJyZW50IGJ1ZmZlciAiJSIgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZQorCQkJCWJ1ZmZlciB0aGF0IHdhcyBjaGFuZ2VkICI8YWZpbGU+Ii4KKwkJCQlOT1RFOiBUaGUgY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIHRoZSBjdXJyZW50CisJCQkJYnVmZmVyLCBqdW1wIHRvIGFub3RoZXIgYnVmZmVyIG9yIGRlbGV0ZSBhCisJCQkJYnVmZmVyLiAgKkUyNDYqCisJCQkJTk9URTogVGhpcyBldmVudCBuZXZlciBuZXN0cywgdG8gYXZvaWQgYW4KKwkJCQllbmRsZXNzIGxvb3AuICBUaGlzIG1lYW5zIHRoYXQgd2hpbGUgZXhlY3V0aW5nCisJCQkJY29tbWFuZHMgZm9yIHRoZSBGaWxlQ2hhbmdlZFNoZWxsIGV2ZW50IG5vCisJCQkJb3RoZXIgRmlsZUNoYW5nZWRTaGVsbCBldmVudCB3aWxsIGJlCisJCQkJdHJpZ2dlcmVkLgorCQkJCQkJCSpGaWxlQ2hhbmdlZFJPKgorRmlsZUNoYW5nZWRSTwkJCUJlZm9yZSBtYWtpbmcgdGhlIGZpcnN0IGNoYW5nZSB0byBhIHJlYWQtb25seQorCQkJCWZpbGUuICBDYW4gYmUgdXNlZCB0byBjaGVjay1vdXQgdGhlIGZpbGUgZnJvbQorCQkJCWEgc291cmNlIGNvbnRyb2wgc3lzdGVtLiAgTm90IHRyaWdnZXJlZCB3aGVuCisJCQkJdGhlIGNoYW5nZSB3YXMgY2F1c2VkIGJ5IGFuIGF1dG9jb21tYW5kLgorCQkJCVdBUk5JTkc6IFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gbWFraW5nIGEKKwkJCQljaGFuZ2UsIGp1c3QgYmVmb3JlIHRoZSBjaGFuZ2UgaXMgYXBwbGllZCB0bworCQkJCXRoZSB0ZXh0LiAgSWYgdGhlIGF1dG9jb21tYW5kIG1vdmVzIHRoZSBjdXJzb3IKKwkJCQl0aGUgZWZmZWN0IG9mIHRoZSBjaGFuZ2UgaXMgdW5kZWZpbmVkLgorCQkJCQkJCSpGb2N1c0dhaW5lZCoKK0ZvY3VzR2FpbmVkCQkJV2hlbiBWaW0gZ290IGlucHV0IGZvY3VzLiAgT25seSBmb3IgdGhlIEdVSQorCQkJCXZlcnNpb24gYW5kIGEgZmV3IGNvbnNvbGUgdmVyc2lvbnMgd2hlcmUgdGhpcworCQkJCWNhbiBiZSBkZXRlY3RlZC4KKwkJCQkJCQkqRm9jdXNMb3N0KgorRm9jdXNMb3N0CQkJV2hlbiBWaW0gbG9zdCBpbnB1dCBmb2N1cy4gIE9ubHkgZm9yIHRoZSBHVUkKKwkJCQl2ZXJzaW9uIGFuZCBhIGZldyBjb25zb2xlIHZlcnNpb25zIHdoZXJlIHRoaXMKKwkJCQljYW4gYmUgZGV0ZWN0ZWQuCisJCQkJCQkJKkZ1bmNVbmRlZmluZWQqCitGdW5jVW5kZWZpbmVkCQkJV2hlbiBhIHVzZXIgZnVuY3Rpb24gaXMgdXNlZCBidXQgaXQgaXNuJ3QKKwkJCQlkZWZpbmVkLiAgVXNlZnVsIGZvciBkZWZpbmluZyBhIGZ1bmN0aW9uIG9ubHkKKwkJCQl3aGVuIGl0J3MgdXNlZC4gIEJvdGggPGFtYXRjaD4gYW5kIDxhZmlsZT4gYXJlCisJCQkJc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4KKwkJCQkJCQkqQ3Vyc29ySG9sZCoKK0N1cnNvckhvbGQJCQlXaGVuIHRoZSB1c2VyIGRvZXNuJ3QgcHJlc3MgYSBrZXkgZm9yIHRoZSB0aW1lCisJCQkJc3BlY2lmaWVkIHdpdGggJ3VwZGF0ZXRpbWUnLiAgTm90IHJlLXRyaWdnZXJlZAorCQkJCXVudGlsIHRoZSB1c2VyIGhhcyBwcmVzc2VkIGEga2V5IChpLmUuIGRvZXNuJ3QKKwkJCQlmaXJlIGV2ZXJ5ICd1cGRhdGV0aW1lJyBtcyBpZiB5b3UgbGVhdmUgVmltIHRvCisJCQkJbWFrZSBzb21lIGNvZmZlZS4gOikgIFNlZSB8Q3Vyc29ySG9sZC1leGFtcGxlfAorCQkJCWZvciBwcmV2aWV3aW5nIHRhZ3MuCisJCQkJVGhpcyBldmVudCBpcyBvbmx5IHRyaWdnZXJlZCBpbiBOb3JtYWwgbW9kZS4KKwkJCQlOb3RlOiBJbnRlcmFjdGl2ZSBjb21tYW5kcyBjYW5ub3QgYmUgdXNlZCBmb3IKKwkJCQl0aGlzIGV2ZW50LiAgVGhlcmUgaXMgbm8gaGl0LWVudGVyIHByb21wdCwKKwkJCQl0aGUgc2NyZWVuIGlzIHVwZGF0ZWQgZGlyZWN0bHkgKHdoZW4gbmVlZGVkKS4KKwkJCQlOb3RlOiBJbiB0aGUgZnV0dXJlIHRoZXJlIHdpbGwgcHJvYmFibHkgYmUKKwkJCQlhbm90aGVyIG9wdGlvbiB0byBzZXQgdGhlIHRpbWUuCisJCQkJSGludDogdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSBzdGF0dXMgbGluZXMKKwkJCQl1c2U6ID4KKwkJCQkJOmxldCAmcm8gPSAmcm8KKzwJCQkJe29ubHkgb24gQW1pZ2EsIFVuaXgsIFdpbjMyLCBNU0RPUyBhbmQgYWxsIEdVSQorCQkJCXZlcnNpb25zfQorCQkJCQkJCSpCdWZFbnRlcioKK0J1ZkVudGVyCQkJQWZ0ZXIgZW50ZXJpbmcgYSBidWZmZXIuICBVc2VmdWwgZm9yIHNldHRpbmcKKwkJCQlvcHRpb25zIGZvciBhIGZpbGUgdHlwZS4gIEFsc28gZXhlY3V0ZWQgd2hlbgorCQkJCXN0YXJ0aW5nIHRvIGVkaXQgYSBidWZmZXIsIGFmdGVyIHRoZQorCQkJCUJ1ZlJlYWRQb3N0IGF1dG9jb21tYW5kcy4KKwkJCQkJCQkqQnVmTGVhdmUqCitCdWZMZWF2ZQkJCUJlZm9yZSBsZWF2aW5nIHRvIGFub3RoZXIgYnVmZmVyLiAgQWxzbyB3aGVuCisJCQkJbGVhdmluZyBvciBjbG9zaW5nIHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgdGhlCisJCQkJbmV3IGN1cnJlbnQgd2luZG93IGlzIG5vdCBmb3IgdGhlIHNhbWUgYnVmZmVyLgorCQkJCU5vdCB1c2VkIGZvciAiOnFhIiBvciAiOnEiIHdoZW4gZXhpdGluZyBWaW0uCisJCQkJCQkJKkJ1ZldpbkVudGVyKgorQnVmV2luRW50ZXIJCQlBZnRlciBhIGJ1ZmZlciBpcyBkaXNwbGF5ZWQgaW4gYSB3aW5kb3cuICBUaGlzCisJCQkJY2FuIGJlIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQgKGFmdGVyCisJCQkJcHJvY2Vzc2luZyB0aGUgbW9kZWxpbmVzKSwgd2hlbiBhIGhpZGRlbgorCQkJCWJ1ZmZlciBpcyBkaXNwbGF5ZWQgaW4gYSB3aW5kb3cgKGFuZCBpcyBubworCQkJCWxvbmdlciBoaWRkZW4pIG9yIGEgYnVmZmVyIGFscmVhZHkgdmlzaWJsZSBpbgorCQkJCWEgd2luZG93IGlzIGFsc28gZGlzcGxheWVkIGluIGFub3RoZXIgd2luZG93LgorCQkJCQkJCSpCdWZXaW5MZWF2ZSoKK0J1ZldpbkxlYXZlCQkJQmVmb3JlIGEgYnVmZmVyIGlzIHJlbW92ZWQgZnJvbSBhIHdpbmRvdy4KKwkJCQlOb3Qgd2hlbiBpdCdzIHN0aWxsIHZpc2libGUgaW4gYW5vdGhlciB3aW5kb3cuCisJCQkJQWxzbyB0cmlnZ2VyZWQgd2hlbiBleGl0aW5nLiAgSXQncyB0cmlnZ2VyZWQKKwkJCQliZWZvcmUgQnVmVW5sb2FkIG9yIEJ1ZkhpZGRlbi4KKwkJCQlOT1RFOiBXaGVuIHRoaXMgYXV0b2NvbW1hbmQgaXMgZXhlY3V0ZWQsIHRoZQorCQkJCWN1cnJlbnQgYnVmZmVyICIlIiBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisJCQkJYnVmZmVyIGJlaW5nIHVubG9hZGVkICI8YWZpbGU+Ii4KKwkJCQkJCQkqQnVmVW5sb2FkKgorQnVmVW5sb2FkCQkJQmVmb3JlIHVubG9hZGluZyBhIGJ1ZmZlci4gIFRoaXMgaXMgd2hlbiB0aGUKKwkJCQl0ZXh0IGluIHRoZSBidWZmZXIgaXMgZ29pbmcgdG8gYmUgZnJlZWQuICBUaGlzCisJCQkJbWF5IGJlIGFmdGVyIGEgQnVmV3JpdGVQb3N0IGFuZCBiZWZvcmUgYQorCQkJCUJ1ZkRlbGV0ZS4gIEFsc28gdXNlZCBmb3IgYWxsIGJ1ZmZlcnMgdGhhdCBhcmUKKwkJCQlsb2FkZWQgd2hlbiBWaW0gaXMgZ29pbmcgdG8gZXhpdC4KKwkJCQlOT1RFOiBXaGVuIHRoaXMgYXV0b2NvbW1hbmQgaXMgZXhlY3V0ZWQsIHRoZQorCQkJCWN1cnJlbnQgYnVmZmVyICIlIiBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisJCQkJYnVmZmVyIGJlaW5nIHVubG9hZGVkICI8YWZpbGU+Ii4KKwkJCQkJCQkqQnVmSGlkZGVuKgorQnVmSGlkZGVuCQkJSnVzdCBhZnRlciBhIGJ1ZmZlciBoYXMgYmVjb21lIGhpZGRlbi4gIFRoYXQKKwkJCQlpcywgd2hlbiB0aGVyZSBhcmUgbm8gbG9uZ2VyIHdpbmRvd3MgdGhhdCBzaG93CisJCQkJdGhlIGJ1ZmZlciwgYnV0IHRoZSBidWZmZXIgaXMgbm90IHVubG9hZGVkIG9yCisJCQkJZGVsZXRlZC4gIE5vdCB1c2VkIGZvciAiOnFhIiBvciAiOnEiIHdoZW4KKwkJCQlleGl0aW5nIFZpbS4KKwkJCQlOT1RFOiBXaGVuIHRoaXMgYXV0b2NvbW1hbmQgaXMgZXhlY3V0ZWQsIHRoZQorCQkJCWN1cnJlbnQgYnVmZmVyICIlIiBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisJCQkJYnVmZmVyIGJlaW5nIHVubG9hZGVkICI8YWZpbGU+Ii4KKwkJCQkJCQkqQnVmTmV3KgorQnVmTmV3CQkJCUp1c3QgYWZ0ZXIgY3JlYXRpbmcgYSBuZXcgYnVmZmVyLiAgQWxzbyB1c2VkCisJCQkJanVzdCBhZnRlciBhIGJ1ZmZlciBoYXMgYmVlbiByZW5hbWVkLiAgV2hlbgorCQkJCXRoZSBidWZmZXIgaXMgYWRkZWQgdG8gdGhlIGJ1ZmZlciBsaXN0IEJ1ZkFkZAorCQkJCXdpbGwgYmUgdHJpZ2dlcmVkIHRvby4KKwkJCQlOT1RFOiBXaGVuIHRoaXMgYXV0b2NvbW1hbmQgaXMgZXhlY3V0ZWQsIHRoZQorCQkJCWN1cnJlbnQgYnVmZmVyICIlIiBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisJCQkJYnVmZmVyIGJlaW5nIGNyZWF0ZWQgIjxhZmlsZT4iLgorCQkJCQkJCSpCdWZDcmVhdGUqICpCdWZBZGQqCitCdWZBZGQgb3IgQnVmQ3JlYXRlCQlKdXN0IGFmdGVyIGNyZWF0aW5nIGEgbmV3IGJ1ZmZlciB3aGljaCBpcworCQkJCWFkZGVkIHRvIHRoZSBidWZmZXIgbGlzdCwgb3IgYWRkaW5nIGEgYnVmZmVyCisJCQkJdG8gdGhlIGJ1ZmZlciBsaXN0LgorCQkJCUFsc28gdXNlZCBqdXN0IGFmdGVyIGEgYnVmZmVyIGluIHRoZSBidWZmZXIKKwkJCQlsaXN0IGhhcyBiZWVuIHJlbmFtZWQuCisJCQkJVGhlIEJ1ZkNyZWF0ZSBldmVudCBpcyBmb3IgaGlzdG9yaWMgcmVhc29ucy4KKwkJCQlOT1RFOiBXaGVuIHRoaXMgYXV0b2NvbW1hbmQgaXMgZXhlY3V0ZWQsIHRoZQorCQkJCWN1cnJlbnQgYnVmZmVyICIlIiBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisJCQkJYnVmZmVyIGJlaW5nIGNyZWF0ZWQgIjxhZmlsZT4iLgorCQkJCQkJCSpCdWZEZWxldGUqCitCdWZEZWxldGUJCQlCZWZvcmUgZGVsZXRpbmcgYSBidWZmZXIgZnJvbSB0aGUgYnVmZmVyIGxpc3QuCisJCQkJVGhlIEJ1ZlVubG9hZCBtYXkgYmUgY2FsbGVkIGZpcnN0IChpZiB0aGUKKwkJCQlidWZmZXIgd2FzIGxvYWRlZCkuCisJCQkJQWxzbyB1c2VkIGp1c3QgYmVmb3JlIGEgYnVmZmVyIGluIHRoZSBidWZmZXIKKwkJCQlsaXN0IGlzIHJlbmFtZWQuCisJCQkJTk9URTogV2hlbiB0aGlzIGF1dG9jb21tYW5kIGlzIGV4ZWN1dGVkLCB0aGUKKwkJCQljdXJyZW50IGJ1ZmZlciAiJSIgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZQorCQkJCWJ1ZmZlciBiZWluZyBkZWxldGVkICI8YWZpbGU+Ii4KKwkJCQkJCQkqQnVmV2lwZW91dCoKK0J1ZldpcGVvdXQJCQlCZWZvcmUgY29tcGxldGVseSBkZWxldGluZyBhIGJ1ZmZlci4gIFRoZQorCQkJCUJ1ZlVubG9hZCBhbmQgQnVmRGVsZXRlIGV2ZW50cyBtYXkgYmUgY2FsbGVkCisJCQkJZmlyc3QgKGlmIHRoZSBidWZmZXIgd2FzIGxvYWRlZCBhbmQgd2FzIGluIHRoZQorCQkJCWJ1ZmZlciBsaXN0KS4gIEFsc28gdXNlZCBqdXN0IGJlZm9yZSBhIGJ1ZmZlcgorCQkJCWlzIHJlbmFtZWQgKGFsc28gd2hlbiBpdCdzIG5vdCBpbiB0aGUgYnVmZmVyCisJCQkJbGlzdCkuCisJCQkJTk9URTogV2hlbiB0aGlzIGF1dG9jb21tYW5kIGlzIGV4ZWN1dGVkLCB0aGUKKwkJCQljdXJyZW50IGJ1ZmZlciAiJSIgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZQorCQkJCWJ1ZmZlciBiZWluZyBkZWxldGVkICI8YWZpbGU+Ii4KKwkJCQkJCQkqV2luRW50ZXIqCitXaW5FbnRlcgkJCUFmdGVyIGVudGVyaW5nIGFub3RoZXIgd2luZG93LiAgTm90IGRvbmUgZm9yCisJCQkJdGhlIGZpcnN0IHdpbmRvdywgd2hlbiBWaW0gaGFzIGp1c3Qgc3RhcnRlZC4KKwkJCQlVc2VmdWwgZm9yIHNldHRpbmcgdGhlIHdpbmRvdyBoZWlnaHQuCisJCQkJSWYgdGhlIHdpbmRvdyBpcyBmb3IgYW5vdGhlciBidWZmZXIsIFZpbQorCQkJCWV4ZWN1dGVzIHRoZSBCdWZFbnRlciBhdXRvY29tbWFuZHMgYWZ0ZXIgdGhlCisJCQkJV2luRW50ZXIgYXV0b2NvbW1hbmRzLgorCQkJCU5vdGU6IFdoZW4gdXNpbmcgIjpzcGxpdCBmbmFtZSIgdGhlIFdpbkVudGVyCisJCQkJZXZlbnQgaXMgdHJpZ2dlcmVkIGFmdGVyIHRoZSBzcGxpdCBidXQgYmVmb3JlCisJCQkJdGhlIGZpbGUgImZuYW1lIiBpcyBsb2FkZWQuCisJCQkJCQkJKldpbkxlYXZlKgorV2luTGVhdmUJCQlCZWZvcmUgbGVhdmluZyBhIHdpbmRvdy4gIElmIHRoZSB3aW5kb3cgdG8gYmUKKwkJCQllbnRlcmVkIG5leHQgaXMgZm9yIGEgZGlmZmVyZW50IGJ1ZmZlciwgVmltCisJCQkJZXhlY3V0ZXMgdGhlIEJ1ZkxlYXZlIGF1dG9jb21tYW5kcyBiZWZvcmUgdGhlCisJCQkJV2luTGVhdmUgYXV0b2NvbW1hbmRzIChidXQgbm90IGZvciAiOm5ldyIpLgorCQkJCU5vdCB1c2VkIGZvciAiOnFhIiBvciAiOnEiIHdoZW4gZXhpdGluZyBWaW0uCisJCQkJCQkJKkNtZHdpbkVudGVyKgorQ21kd2luRW50ZXIJCQlBZnRlciBlbnRlcmluZyB0aGUgY29tbWFuZC1saW5lIHdpbmRvdy4KKwkJCQlVc2VmdWwgZm9yIHNldHRpbmcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgZm9yCisJCQkJdGhpcyBzcGVjaWFsIHR5cGUgb2Ygd2luZG93LiAgVGhpcyBpcworCQkJCXRyaWdnZXJlZCBfaW5zdGVhZF8gb2YgQnVmRW50ZXIgYW5kIFdpbkVudGVyLgorCQkJCTxhZmlsZT4gaXMgc2V0IHRvIGEgc2luZ2xlIGNoYXJhY3RlciwKKwkJCQlpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIGNvbW1hbmQtbGluZS4KKwkJCQl8Y21kd2luLWNoYXJ8CisJCQkJCQkJKkNtZHdpbkxlYXZlKgorQ21kd2luTGVhdmUJCQlCZWZvcmUgbGVhdmluZyB0aGUgY29tbWFuZC1saW5lIHdpbmRvdy4KKwkJCQlVc2VmdWwgdG8gY2xlYW4gdXAgYW55IGdsb2JhbCBzZXR0aW5nIGRvbmUKKwkJCQl3aXRoIENtZHdpbkVudGVyLiAgVGhpcyBpcyB0cmlnZ2VyZWQgX2luc3RlYWRfCisJCQkJb2YgQnVmTGVhdmUgYW5kIFdpbkxlYXZlLgorCQkJCTxhZmlsZT4gaXMgc2V0IHRvIGEgc2luZ2xlIGNoYXJhY3RlciwKKwkJCQlpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIGNvbW1hbmQtbGluZS4KKwkJCQl8Y21kd2luLWNoYXJ8CisJCQkJCQkJKkdVSUVudGVyKgorR1VJRW50ZXIJCQlBZnRlciBzdGFydGluZyB0aGUgR1VJIHN1Y2Nlc3NmdWxseSwgYW5kIGFmdGVyCisJCQkJb3BlbmluZyB0aGUgd2luZG93LiAgSXQgaXMgdHJpZ2dlcmVkIGJlZm9yZQorCQkJCVZpbUVudGVyIHdoZW4gdXNpbmcgZ3ZpbS4gIENhbiBiZSB1c2VkIHRvCisJCQkJcG9zaXRpb24gdGhlIHdpbmRvdyBmcm9tIGEgLmd2aW1yYyBmaWxlOiA+CisJOmF1dG9jbWQgR1VJRW50ZXIgKiB3aW5wb3MgMTAwIDUwCis8CQkJCQkJCSpWaW1FbnRlcioKK1ZpbUVudGVyCQkJQWZ0ZXIgZG9pbmcgYWxsIHRoZSBzdGFydHVwIHN0dWZmLCBpbmNsdWRpbmcKKwkJCQlsb2FkaW5nIC52aW1yYyBmaWxlcywgZXhlY3V0aW5nIHRoZSAiLWMgY21kIgorCQkJCWFyZ3VtZW50cywgY3JlYXRpbmcgYWxsIHdpbmRvd3MgYW5kIGxvYWRpbmcKKwkJCQl0aGUgYnVmZmVycyBpbiB0aGVtLgorCQkJCQkJCSpWaW1MZWF2ZVByZSoKK1ZpbUxlYXZlUHJlCQkJQmVmb3JlIGV4aXRpbmcgVmltLCBqdXN0IGJlZm9yZSB3cml0aW5nIHRoZQorCQkJCS52aW1pbmZvIGZpbGUuICBUaGlzIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSwKKwkJCQlpZiB0aGVyZSBpcyBhIG1hdGNoIHdpdGggdGhlIG5hbWUgb2Ygd2hhdAorCQkJCWhhcHBlbnMgdG8gYmUgdGhlIGN1cnJlbnQgYnVmZmVyIHdoZW4gZXhpdGluZy4KKwkJCQlNb3N0bHkgdXNlZnVsIHdpdGggYSAiKiIgcGF0dGVybi4gPgorCTphdXRvY21kIFZpbUxlYXZlUHJlICogY2FsbCBDbGVhbnVwU3R1ZmYoKQorPAkJCQlUbyBkZXRlY3QgYW4gYWJub3JtYWwgZXhpdCB1c2UgfHY6ZHlpbmd8LgorCQkJCQkJCSpWaW1MZWF2ZSoKK1ZpbUxlYXZlCQkJQmVmb3JlIGV4aXRpbmcgVmltLCBqdXN0IGFmdGVyIHdyaXRpbmcgdGhlCisJCQkJLnZpbWluZm8gZmlsZS4gIEV4ZWN1dGVkIG9ubHkgb25jZSwgbGlrZQorCQkJCVZpbUxlYXZlUHJlLgorCQkJCVRvIGRldGVjdCBhbiBhYm5vcm1hbCBleGl0IHVzZSB8djpkeWluZ3wuCisJCQkJCQkJKkVuY29kaW5nQ2hhbmdlZCoKK0VuY29kaW5nQ2hhbmdlZAkJCUZpcmVzIG9mZiB3aGVuIHRoZSAnZW5jb2RpbmcnIG9wdGlvbiBpcworCQkJCWNoYW5nZWQuICBVc2VmdWwgdG8gc2V0IHVwIGZvbnRzLCBmb3IgZXhhbXBsZS4KKwkJCQkJCQkqRmlsZUVuY29kaW5nKgorRmlsZUVuY29kaW5nCQkJT2Jzb2xldGUuICBJdCBzdGlsbCB3b3JrcyBhbmQgaXMgZXF1aXZhbGVudAorCQkJCXRvIHxFbmNvZGluZ0NoYW5nZWR8LgorCQkJCQkJCSpSZW1vdGVSZXBseSoKK1JlbW90ZVJlcGx5CQkJV2hlbiBhIHJlcGx5IGZyb20gYSBWaW0gdGhhdCBmdW5jdGlvbnMgYXMKKwkJCQlzZXJ2ZXIgd2FzIHJlY2VpdmVkIHxzZXJ2ZXIyY2xpZW50KCl8LgorCQkJCTxhbWF0Y2g+IGlzIGVxdWFsIHRvIHRoZSB7c2VydmVyaWR9IGZyb20gd2hpY2gKKwkJCQl0aGUgcmVwbHkgd2FzIHNlbnQsIGFuZCA8YWZpbGU+IGlzIHRoZSBhY3R1YWwKKwkJCQlyZXBseSBzdHJpbmcuCisJCQkJTm90ZSB0aGF0IGV2ZW4gaWYgYW4gYXV0b2NvbW1hbmQgaXMgZGVmaW5lZCwKKwkJCQl0aGUgcmVwbHkgc2hvdWxkIGJlIHJlYWQgd2l0aCB8cmVtb3RlX3JlYWQoKXwKKwkJCQl0byBjb25zdW1lIGl0LgorCQkJCQkJCSpUZXJtQ2hhbmdlZCoKK1Rlcm1DaGFuZ2VkCQkJQWZ0ZXIgdGhlIHZhbHVlIG9mICd0ZXJtJyBoYXMgY2hhbmdlZC4gIFVzZWZ1bAorCQkJCWZvciByZS1sb2FkaW5nIHRoZSBzeW50YXggZmlsZSB0byB1cGRhdGUgdGhlCisJCQkJY29sb3JzLCBmb250cyBhbmQgb3RoZXIgdGVybWluYWwtZGVwZW5kZW50CisJCQkJc2V0dGluZ3MuICBFeGVjdXRlZCBmb3IgYWxsIGxvYWRlZCBidWZmZXJzLgorCQkJCQkJCSpUZXJtUmVzcG9uc2UqCitUZXJtUmVzcG9uc2UJCQlBZnRlciB0aGUgcmVzcG9uc2UgdG8gfHRfUlZ8IGlzIHJlY2VpdmVkIGZyb20KKwkJCQl0aGUgdGVybWluYWwuICBUaGUgdmFsdWUgb2YgfHY6dGVybXJlc3BvbnNlfAorCQkJCWNhbiBiZSB1c2VkIHRvIGRvIHRoaW5ncyBkZXBlbmRpbmcgb24gdGhlCisJCQkJdGVybWluYWwgdmVyc2lvbi4KKwkJCQkJCQkqVXNlckdldHRpbmdCb3JlZCoKK1VzZXJHZXR0aW5nQm9yZWQJCVdoZW4gdGhlIHVzZXIgaGl0cyBDVFJMLUMuICBKdXN0IGtpZGRpbmchIDotKQorCQkJCQkJCSpVc2VyKgorVXNlcgkJCQlOZXZlciBleGVjdXRlZCBhdXRvbWF0aWNhbGx5LiAgVG8gYmUgdXNlZCBmb3IKKwkJCQlhdXRvY29tbWFuZHMgdGhhdCBhcmUgb25seSBleGVjdXRlZCB3aXRoCisJCQkJIjpkb2F1dG9jbWQiLgorCitZb3UgY2FuIHNwZWNpZnkgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBldmVudCBuYW1lcy4gIE5vIHdoaXRlIHNwYWNlIGNhbiBiZQordXNlZCBpbiB0aGlzIGxpc3QuICBUaGUgY29tbWFuZCBhcHBsaWVzIHRvIGFsbCB0aGUgZXZlbnRzIGluIHRoZSBsaXN0LgorCitGb3IgUkVBRElORyBGSUxFUyB0aGVyZSBhcmUgZm91ciBraW5kcyBvZiBldmVudHMgcG9zc2libGU6CisJQnVmTmV3RmlsZQkJCXN0YXJ0aW5nIHRvIGVkaXQgYSBub24tZXhpc3RlbnQgZmlsZQorCUJ1ZlJlYWRQcmUJQnVmUmVhZFBvc3QJc3RhcnRpbmcgdG8gZWRpdCBhbiBleGlzdGluZyBmaWxlCisJRmlsdGVyUmVhZFByZQlGaWx0ZXJSZWFkUG9zdAlyZWFkIHRoZSB0ZW1wIGZpbGUgd2l0aCBmaWx0ZXIgb3V0cHV0CisJRmlsZVJlYWRQcmUJRmlsZVJlYWRQb3N0CWFueSBvdGhlciBmaWxlIHJlYWQKK1ZpbSB1c2VzIG9ubHkgb25lIG9mIHRoZXNlIGZvdXIga2luZHMgd2hlbiByZWFkaW5nIGEgZmlsZS4gIFRoZSAiUHJlIiBhbmQKKyJQb3N0IiBldmVudHMgYXJlIGJvdGggdHJpZ2dlcmVkLCBiZWZvcmUgYW5kIGFmdGVyIHJlYWRpbmcgdGhlIGZpbGUuCisKK05vdGUgdGhhdCB0aGUgYXV0b2NvbW1hbmRzIGZvciB0aGUgKlJlYWRQcmUgZXZlbnRzIGFuZCBhbGwgdGhlIEZpbHRlciBldmVudHMKK2FyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgYnVmZmVyICh5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZSBpZgordGhpcyBoYXBwZW5zKS4gIFRoaXMgaXMgdG8gcHJldmVudCB0aGUgZmlsZSB0byBiZSByZWFkIGludG8gdGhlIHdyb25nIGJ1ZmZlci4KKworTm90ZSB0aGF0IHRoZSAnbW9kaWZpZWQnIGZsYWcgaXMgcmVzZXQgQUZURVIgZXhlY3V0aW5nIHRoZSBCdWZSZWFkUG9zdAorYW5kIEJ1Zk5ld0ZpbGUgYXV0b2NvbW1hbmRzLiAgQnV0IHdoZW4gdGhlICdtb2RpZmllZCcgb3B0aW9uIHdhcyBzZXQgYnkgdGhlCithdXRvY29tbWFuZHMsIHRoaXMgZG9lc24ndCBoYXBwZW4uCisKK1lvdSBjYW4gdXNlIHRoZSAnZXZlbnRpZ25vcmUnIG9wdGlvbiB0byBpZ25vcmUgYSBudW1iZXIgb2YgZXZlbnRzIG9yIGFsbAorZXZlbnRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFBhdHRlcm5zCQkJCQkqYXV0b2NtZC1wYXR0ZXJucyogKntwYXR9KgorCitUaGUgZmlsZSBwYXR0ZXJuIHtwYXR9IGlzIHRlc3RlZCBmb3IgYSBtYXRjaCBhZ2FpbnN0IHRoZSBmaWxlIG5hbWUgaW4gb25lIG9mCit0d28gd2F5czoKKzEuIFdoZW4gdGhlcmUgaXMgbm8gJy8nIGluIHRoZSBwYXR0ZXJuLCBWaW0gY2hlY2tzIGZvciBhIG1hdGNoIGFnYWluc3Qgb25seQorICAgdGhlIHRhaWwgcGFydCBvZiB0aGUgZmlsZSBuYW1lICh3aXRob3V0IGl0cyBsZWFkaW5nIGRpcmVjdG9yeSBwYXRoKS4KKzIuIFdoZW4gdGhlcmUgaXMgYSAnLycgaW4gdGhlIHBhdHRlcm4sICBWaW0gY2hlY2tzIGZvciBhIG1hdGNoIGFnYWluc3QgdGhlCisgICBib3RoIHNob3J0IGZpbGUgbmFtZSAoYXMgeW91IHR5cGVkIGl0KSBhbmQgdGhlIGZ1bGwgZmlsZSBuYW1lIChhZnRlcgorICAgZXhwYW5kaW5nIGl0IHRvIGEgZnVsbCBwYXRoIGFuZCByZXNvbHZpbmcgc3ltYm9saWMgbGlua3MpLgorCitFeGFtcGxlczogPgorCTphdXRvY21kIEJ1ZlJlYWQgKi50eHQJCXNldCBldAorU2V0IHRoZSAnZXQnIG9wdGlvbiBmb3IgYWxsIHRleHQgZmlsZXMuID4KKworCTphdXRvY21kIEJ1ZlJlYWQgL3ZpbS9zcmMvKi5jCXNldCBjaW5kZW50CitTZXQgdGhlICdjaW5kZW50JyBvcHRpb24gZm9yIEMgZmlsZXMgaW4gdGhlIC92aW0vc3JjIGRpcmVjdG9yeS4gPgorCisJOmF1dG9jbWQgQnVmUmVhZCAvdG1wLyouYwlzZXQgdHM9NQorSWYgeW91IGhhdmUgYSBsaW5rIGZyb20gIi90bXAvdGVzdC5jIiB0byAiL2hvbWUvbm9ib2R5L3ZpbS9zcmMvdGVzdC5jIiwgYW5kCit5b3Ugc3RhcnQgZWRpdGluZyAiL3RtcC90ZXN0LmMiLCB0aGlzIGF1dG9jb21tYW5kIHdpbGwgbWF0Y2guCisKK05vdGU6ICBUbyBtYXRjaCBwYXJ0IG9mIGEgcGF0aCwgYnV0IG5vdCBmcm9tIHRoZSByb290IGRpcmVjdG9yeSwgdXNlIGEgJyonIGFzCit0aGUgZmlyc3QgY2hhcmFjdGVyLiAgRXhhbXBsZTogPgorCTphdXRvY21kIEJ1ZlJlYWQgKi9kb2MvKi50eHQJc2V0IHR3PTc4CitUaGlzIGF1dG9jb21tYW5kIHdpbGwgZm9yIGV4YW1wbGUgYmUgZXhlY3V0ZWQgZm9yICIvdG1wL2RvYy94eC50eHQiIGFuZAorIi91c3IvaG9tZS9waWV0L2RvYy95eS50eHQiLiAgVGhlIG51bWJlciBvZiBkaXJlY3RvcmllcyBkb2VzIG5vdCBtYXR0ZXIgaGVyZS4KKworCitUaGUgZmlsZSBuYW1lIHRoYXQgdGhlIHBhdHRlcm4gaXMgbWF0Y2hlZCBhZ2FpbnN0IGlzIGFmdGVyIGV4cGFuZGluZword2lsZGNhcmRzLiAgVGh1cyBpcyB5b3UgaXNzdWUgdGhpcyBjb21tYW5kOiA+CisJOmUgJFJPT1RESVIvbWFpbi4kRVhUCitUaGUgYXJndW1lbnQgaXMgZmlyc3QgZXhwYW5kZWQgdG86ID4KKwkvdXNyL3Jvb3QvbWFpbi5weQorQmVmb3JlIGl0J3MgbWF0Y2hlZCB3aXRoIHRoZSBwYXR0ZXJuIG9mIHRoZSBhdXRvY29tbWFuZC4gIENhcmVmdWwgd2l0aCB0aGlzCit3aGVuIHVzaW5nIGV2ZW50cyBsaWtlIEZpbGVSZWFkQ21kLCB0aGUgdmFsdWUgb2YgPGFtYXRjaD4gbWF5IG5vdCBiZSB3aGF0IHlvdQorZXhwZWN0LgorCisKK0Vudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUgdXNlZCBpbiBhIHBhdHRlcm46ID4KKwk6YXV0b2NtZCBCdWZSZWFkICRWSU1SVU5USU1FL2RvYy8qLnR4dCAgc2V0IGV4cGFuZHRhYgorQW5kIH4gY2FuIGJlIHVzZWQgZm9yIHRoZSBob21lIGRpcmVjdG9yeSAoaWYgJEhPTUUgaXMgZGVmaW5lZCk6ID4KKwk6YXV0b2NtZCBCdWZXcml0ZVBvc3Qgfi8udmltcmMgICBzbyB+Ly52aW1yYworCTphdXRvY21kIEJ1ZlJlYWQgfmFyY2hpdmUvKiAgICAgIHNldCByZWFkb25seQorVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGV4cGFuZGVkIHdoZW4gdGhlIGF1dG9jb21tYW5kIGlzIGRlZmluZWQsIG5vdCB3aGVuCit0aGUgYXV0b2NvbW1hbmQgaXMgZXhlY3V0ZWQuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjb21tYW5kIQorCisJCQkJCQkJKmZpbGUtcGF0dGVybioKK1RoZSBwYXR0ZXJuIGlzIGludGVycHJldGVkIGxpa2UgbW9zdGx5IHVzZWQgaW4gZmlsZSBuYW1lczoKKwkqCW1hdGNoZXMgYW55IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMKKwk/CW1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIKKwlcPwltYXRjaGVzIGEgJz8nCisJLgltYXRjaGVzIGEgJy4nCisJfgltYXRjaGVzIGEgJ34nCisJLAlzZXBhcmF0ZXMgcGF0dGVybnMKKwlcLAltYXRjaGVzIGEgJywnCisJeyB9CWxpa2UgXCggXCkgaW4gYSB8cGF0dGVybnwKKwksCWluc2lkZSB7IH06IGxpa2UgXHwgaW4gYSB8cGF0dGVybnwKKwlcCXNwZWNpYWwgbWVhbmluZyBsaWtlIGluIGEgfHBhdHRlcm58CisJW2NoXQltYXRjaGVzICdjJyBvciAnaCcKKwlbXmNoXSAgIG1hdGNoIGFueSBjaGFyYWN0ZXIgYnV0ICdjJyBhbmQgJ2gnCisKK05vdGUgdGhhdCBmb3IgYWxsIHN5c3RlbXMgdGhlICcvJyBjaGFyYWN0ZXIgaXMgdXNlZCBmb3IgcGF0aCBzZXBhcmF0b3IgKGV2ZW4KK01TLURPUyBhbmQgT1MvMikuICBUaGlzIHdhcyBkb25lIGJlY2F1c2UgdGhlIGJhY2tzbGFzaCBpcyBkaWZmaWN1bHQgdG8gdXNlCitpbiBhIHBhdHRlcm4gYW5kIHRvIG1ha2UgdGhlIGF1dG9jb21tYW5kcyBwb3J0YWJsZSBhY3Jvc3MgZGlmZmVyZW50IHN5c3RlbXMuCisKKworTWF0Y2hpbmcgd2l0aCB0aGUgcGF0dGVybiBpcyBkb25lIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLiAgQ2hhbmdpbmcgdGhlCitidWZmZXIgbmFtZSBpbiBvbmUgb2YgdGhlIGF1dG9jb21tYW5kcywgb3IgZXZlbiBkZWxldGluZyB0aGUgYnVmZmVyLCBkb2VzIG5vdAorY2hhbmdlIHdoaWNoIGF1dG9jb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkLiAgRXhhbXBsZTogPgorCisJYXUgQnVmRW50ZXIgKi5mb28gIGJkZWwKKwlhdSBCdWZFbnRlciAqLmZvbyAgc2V0IG1vZGlmaWVkCisKK1RoaXMgd2lsbCBkZWxldGUgdGhlIGN1cnJlbnQgYnVmZmVyIGFuZCB0aGVuIHNldCAnbW9kaWZpZWQnIGluIHdoYXQgaGFzIGJlY29tZQordGhlIGN1cnJlbnQgYnVmZmVyIGluc3RlYWQuICBWaW0gZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0aGF0ICIqLmZvbyIKK2RvZXNuJ3QgbWF0Y2ggd2l0aCB0aGF0IGJ1ZmZlciBuYW1lLiAgSXQgbWF0Y2hlcyAiKi5mb28iIHdpdGggdGhlIG5hbWUgb2YgdGhlCitidWZmZXIgYXQgdGhlIG1vbWVudCB0aGUgZXZlbnQgd2FzIHRyaWdnZXJlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBHcm91cHMJCQkJCQkqYXV0b2NtZC1ncm91cHMqCisKK0F1dG9jb21tYW5kcyBjYW4gYmUgcHV0IHRvZ2V0aGVyIGluIGEgZ3JvdXAuICBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVtb3Zpbmcgb3IKK2V4ZWN1dGluZyBhIGdyb3VwIG9mIGF1dG9jb21tYW5kcy4gIEZvciBleGFtcGxlLCBhbGwgdGhlIGF1dG9jb21tYW5kcyBmb3IKK3N5bnRheCBoaWdobGlnaHRpbmcgYXJlIHB1dCBpbiB0aGUgImhpZ2hsaWdodCIgZ3JvdXAsIHRvIGJlIGFibGUgdG8gZXhlY3V0ZQorIjpkb2F1dG9hbGwgaGlnaGxpZ2h0IEJ1ZlJlYWQiIHdoZW4gdGhlIEdVSSBzdGFydHMuCisKK1doZW4gbm8gc3BlY2lmaWMgZ3JvdXAgaXMgc2VsZWN0ZWQsIFZpbSB1c2VzIHRoZSBkZWZhdWx0IGdyb3VwLiAgVGhlIGRlZmF1bHQKK2dyb3VwIGRvZXMgbm90IGhhdmUgYSBuYW1lLiAgWW91IGNhbm5vdCBleGVjdXRlIHRoZSBhdXRvY29tbWFuZHMgZnJvbSB0aGUKK2RlZmF1bHQgZ3JvdXAgc2VwYXJhdGVseTsgeW91IGNhbiBleGVjdXRlIHRoZW0gb25seSBieSBleGVjdXRpbmcgYXV0b2NvbW1hbmRzCitmb3IgYWxsIGdyb3Vwcy4KKworTm9ybWFsbHksIHdoZW4gZXhlY3V0aW5nIGF1dG9jb21tYW5kcyBhdXRvbWF0aWNhbGx5LCBWaW0gdXNlcyB0aGUgYXV0b2NvbW1hbmRzCitmb3IgYWxsIGdyb3Vwcy4gIFRoZSBncm91cCBvbmx5IG1hdHRlcnMgd2hlbiBleGVjdXRpbmcgYXV0b2NvbW1hbmRzIHdpdGgKKyI6ZG9hdXRvY21kIiBvciAiOmRvYXV0b2FsbCIsIG9yIHdoZW4gZGVmaW5pbmcgb3IgZGVsZXRpbmcgYXV0b2NvbW1hbmRzLgorCitUaGUgZ3JvdXAgbmFtZSBjYW4gY29udGFpbiBhbnkgY2hhcmFjdGVycyBleGNlcHQgd2hpdGUgc3BhY2UuICBUaGUgZ3JvdXAgbmFtZQorImVuZCIgaXMgcmVzZXJ2ZWQgKGFsc28gaW4gdXBwZXJjYXNlKS4KKworVGhlIGdyb3VwIG5hbWUgaXMgY2FzZSBzZW5zaXRpdmUuICBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZXZlbnQKK25hbWUhCisKKwkJCQkJCQkqOmF1ZyogKjphdWdyb3VwKgorOmF1Z1tyb3VwXSB7bmFtZX0JCURlZmluZSB0aGUgYXV0b2NtZCBncm91cCBuYW1lIGZvciB0aGUKKwkJCQlmb2xsb3dpbmcgIjphdXRvY21kIiBjb21tYW5kcy4gIFRoZSBuYW1lICJlbmQiCisJCQkJb3IgIkVORCIgc2VsZWN0cyB0aGUgZGVmYXVsdCBncm91cC4KKworCQkJCQkJKjphdWdyb3VwLWRlbGV0ZSogKkUzNjcqCis6YXVnW3JvdXBdISB7bmFtZX0JCURlbGV0ZSB0aGUgYXV0b2NtZCBncm91cCB7bmFtZX0uICBEb24ndCB1c2UKKwkJCQl0aGlzIGlmIHRoZXJlIGlzIHN0aWxsIGFuIGF1dG9jb21tYW5kIHVzaW5nCisJCQkJdGhpcyBncm91cCEgIFRoaXMgaXMgbm90IGNoZWNrZWQuCisKK1RvIGVudGVyIGF1dG9jb21tYW5kcyBmb3IgYSBzcGVjaWZpYyBncm91cCwgdXNlIHRoaXMgbWV0aG9kOgorMS4gU2VsZWN0IHRoZSBncm91cCB3aXRoICI6YXVncm91cCB7bmFtZX0iLgorMi4gRGVsZXRlIGFueSBvbGQgYXV0b2NvbW1hbmRzIHdpdGggIjphdSEiLgorMy4gRGVmaW5lIHRoZSBhdXRvY29tbWFuZHMuCis0LiBHbyBiYWNrIHRvIHRoZSBkZWZhdWx0IGdyb3VwIHdpdGggImF1Z3JvdXAgRU5EIi4KKworRXhhbXBsZTogPgorCTphdWdyb3VwIHVuY29tcHJlc3MKKwk6ICBhdSEKKwk6ICBhdSBCdWZFbnRlciAqLmd6CSUhZ3VuemlwCisJOmF1Z3JvdXAgRU5ECisKK1RoaXMgcHJldmVudHMgaGF2aW5nIHRoZSBhdXRvY29tbWFuZHMgZGVmaW5lZCB0d2ljZSAoZS5nLiwgYWZ0ZXIgc291cmNpbmcgdGhlCisudmltcmMgZmlsZSBhZ2FpbikuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gRXhlY3V0aW5nIGF1dG9jb21tYW5kcwkJCQkqYXV0b2NtZC1leGVjdXRlKgorCitWaW0gY2FuIGFsc28gZXhlY3V0ZSBBdXRvY29tbWFuZHMgbm9uLWF1dG9tYXRpY2FsbHkuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UKK2hhdmUgY2hhbmdlZCBhdXRvY29tbWFuZHMsIG9yIHdoZW4gVmltIGhhcyBleGVjdXRlZCB0aGUgd3JvbmcgYXV0b2NvbW1hbmRzCisoZS5nLiwgdGhlIGZpbGUgcGF0dGVybiBtYXRjaCB3YXMgd3JvbmcpLgorCitOb3RlIHRoYXQgdGhlICdldmVudGlnbm9yZScgb3B0aW9uIGFwcGxpZXMgaGVyZSB0b28uICBFdmVudHMgbGlzdGVkIGluIHRoaXMKK29wdGlvbiB3aWxsIG5vdCBjYXVzZSBhbnkgY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQuCisKKwkJCQkJKjpkbyogKjpkb2F1KiAqOmRvYXV0b2NtZCogKkUyMTcqCis6ZG9bYXV0b2NtZF0gW2dyb3VwXSB7ZXZlbnR9IFtmbmFtZV0KKwkJCUFwcGx5IHRoZSBhdXRvY29tbWFuZHMgbWF0Y2hpbmcgW2ZuYW1lXSAoZGVmYXVsdDoKKwkJCWN1cnJlbnQgZmlsZSBuYW1lKSBmb3Ige2V2ZW50fSB0byB0aGUgY3VycmVudCBidWZmZXIuCisJCQlZb3UgY2FuIHVzZSB0aGlzIHdoZW4gdGhlIGN1cnJlbnQgZmlsZSBuYW1lIGRvZXMgbm90CisJCQltYXRjaCB0aGUgcmlnaHQgcGF0dGVybiwgYWZ0ZXIgY2hhbmdpbmcgc2V0dGluZ3MsIG9yCisJCQl0byBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgYSBjZXJ0YWluIGV2ZW50LgorCQkJSXQncyBwb3NzaWJsZSB0byB1c2UgdGhpcyBpbnNpZGUgYW4gYXV0b2NvbW1hbmQgdG9vLAorCQkJc28geW91IGNhbiBiYXNlIHRoZSBhdXRvY29tbWFuZHMgZm9yIG9uZSBleHRlbnNpb24gb24KKwkJCWFub3RoZXIgZXh0ZW5zaW9uLiAgRXhhbXBsZTogPgorCQkJCTphdSBCdWZlbnRlciAqLmNwcCBzbyB+Ly52aW1yY19jcHAKKwkJCQk6YXUgQnVmZW50ZXIgKi5jcHAgZG9hdSBCdWZFbnRlciB4LmMKKzwJCQlCZSBjYXJlZnVsIHRvIGF2b2lkIGVuZGxlc3MgbG9vcHMuICBTZWUKKwkJCXxhdXRvY21kLW5lc3RlZHwuCisKKwkJCVdoZW4gdGhlIFtncm91cF0gYXJndW1lbnQgaXMgbm90IGdpdmVuLCBWaW0gZXhlY3V0ZXMKKwkJCXRoZSBhdXRvY29tbWFuZHMgZm9yIGFsbCBncm91cHMuICBXaGVuIHRoZSBbZ3JvdXBdCisJCQlhcmd1bWVudCBpcyBpbmNsdWRlZCwgVmltIGV4ZWN1dGVzIG9ubHkgdGhlIG1hdGNoaW5nCisJCQlhdXRvY29tbWFuZHMgZm9yIHRoYXQgZ3JvdXAuICBOb3RlOiBpZiB5b3UgdXNlIGFuCisJCQl1bmRlZmluZWQgZ3JvdXAgbmFtZSwgVmltIGdpdmVzIHlvdSBhbiBlcnJvciBtZXNzYWdlLgorCisJCQkJCQkqOmRvYXV0b2EqICo6ZG9hdXRvYWxsKgorOmRvYXV0b2FbbGxdIFtncm91cF0ge2V2ZW50fSBbZm5hbWVdCisJCQlMaWtlICI6ZG9hdXRvY21kIiwgYnV0IGFwcGx5IHRoZSBhdXRvY29tbWFuZHMgdG8gZWFjaAorCQkJbG9hZGVkIGJ1ZmZlci4gIE5vdGUgdGhhdCB7Zm5hbWV9IGlzIHVzZWQgdG8gc2VsZWN0CisJCQl0aGUgYXV0b2NvbW1hbmRzLCBub3QgdGhlIGJ1ZmZlcnMgdG8gd2hpY2ggdGhleSBhcmUKKwkJCWFwcGxpZWQuCisJCQlDYXJlZnVsOiBEb24ndCB1c2UgdGhpcyBmb3IgYXV0b2NvbW1hbmRzIHRoYXQgZGVsZXRlIGEKKwkJCWJ1ZmZlciwgY2hhbmdlIHRvIGFub3RoZXIgYnVmZmVyIG9yIGNoYW5nZSB0aGUKKwkJCWNvbnRlbnRzIG9mIGEgYnVmZmVyOyB0aGUgcmVzdWx0IGlzIHVucHJlZGljdGFibGUuCisJCQlUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIGF1dG9jb21tYW5kcyB0aGF0IHNldAorCQkJb3B0aW9ucywgY2hhbmdlIGhpZ2hsaWdodGluZywgYW5kIHRoaW5ncyBsaWtlIHRoYXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gVXNpbmcgYXV0b2NvbW1hbmRzCQkJCQkqYXV0b2NtZC11c2UqCisKK0ZvciBXUklUSU5HIEZJTEVTIHRoZXJlIGFyZSBmb3VyIHBvc3NpYmxlIHNldHMgb2YgZXZlbnRzLiAgVmltIHVzZXMgb25seSBvbmUKK29mIHRoZXNlIHNldHMgZm9yIGEgd3JpdGUgY29tbWFuZDoKKworQnVmV3JpdGVDbWQJQnVmV3JpdGVQcmUJQnVmV3JpdGVQb3N0CXdyaXRpbmcgdGhlIHdob2xlIGJ1ZmZlcgorCQlGaWx0ZXJXcml0ZVByZQlGaWx0ZXJXcml0ZVBvc3QJd3JpdGluZyB0byBmaWx0ZXIgdGVtcCBmaWxlCitGaWxlQXBwZW5kQ21kCUZpbGVBcHBlbmRQcmUJRmlsZUFwcGVuZFBvc3QJYXBwZW5kaW5nIHRvIGEgZmlsZQorRmlsZVdyaXRlQ21kCUZpbGVXcml0ZVByZQlGaWxlV3JpdGVQb3N0CWFueSBvdGhlciBmaWxlIHdyaXRlCisKK1doZW4gdGhlcmUgaXMgYSBtYXRjaGluZyAiKkNtZCIgYXV0b2NvbW1hbmQsIGl0IGlzIGFzc3VtZWQgaXQgd2lsbCBkbyB0aGUKK3dyaXRpbmcuICBObyBmdXJ0aGVyIHdyaXRpbmcgaXMgZG9uZSBhbmQgdGhlIG90aGVyIGV2ZW50cyBhcmUgbm90IHRyaWdnZXJlZC4KK3xDbWQtZXZlbnR8CisKK05vdGUgdGhhdCB0aGUgKldyaXRlUG9zdCBjb21tYW5kcyBzaG91bGQgdW5kbyBhbnkgY2hhbmdlcyB0byB0aGUgYnVmZmVyIHRoYXQKK3dlcmUgY2F1c2VkIGJ5IHRoZSAqV3JpdGVQcmUgY29tbWFuZHM7IG90aGVyd2lzZSwgd3JpdGluZyB0aGUgZmlsZSB3aWxsIGhhdmUKK3RoZSBzaWRlIGVmZmVjdCBvZiBjaGFuZ2luZyB0aGUgYnVmZmVyLgorCitCZWZvcmUgZXhlY3V0aW5nIHRoZSBhdXRvY29tbWFuZHMsIHRoZSBidWZmZXIgZnJvbSB3aGljaCB0aGUgbGluZXMgYXJlIHRvIGJlCit3cml0dGVuIHRlbXBvcmFyaWx5IGJlY29tZXMgdGhlIGN1cnJlbnQgYnVmZmVyLiAgVW5sZXNzIHRoZSBhdXRvY29tbWFuZHMKK2NoYW5nZSB0aGUgY3VycmVudCBidWZmZXIgb3IgZGVsZXRlIHRoZSBwcmV2aW91c2x5IGN1cnJlbnQgYnVmZmVyLCB0aGUKK3ByZXZpb3VzbHkgY3VycmVudCBidWZmZXIgaXMgbWFkZSB0aGUgY3VycmVudCBidWZmZXIgYWdhaW4uCisKK1RoZSAqV3JpdGVQcmUgYW5kICpBcHBlbmRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGRlbGV0ZSB0aGUgYnVmZmVyIGZyb20KK3doaWNoIHRoZSBsaW5lcyBhcmUgdG8gYmUgd3JpdHRlbi4KKworVGhlICdbIGFuZCAnXSBtYXJrcyBoYXZlIGEgc3BlY2lhbCBwb3NpdGlvbjoKKy0gQmVmb3JlIHRoZSAqUmVhZFByZSBldmVudCB0aGUgJ1sgbWFyayBpcyBzZXQgdG8gdGhlIGxpbmUganVzdCBhYm92ZSB3aGVyZQorICB0aGUgbmV3IGxpbmVzIHdpbGwgYmUgaW5zZXJ0ZWQuCistIEJlZm9yZSB0aGUgKlJlYWRQb3N0IGV2ZW50IHRoZSAnWyBtYXJrIGlzIHNldCB0byB0aGUgZmlyc3QgbGluZSB0aGF0IHdhcworICBqdXN0IHJlYWQsIHRoZSAnXSBtYXJrIHRvIHRoZSBsYXN0IGxpbmUuCistIEJlZm9yZSBleGVjdXRpbmcgdGhlICpXcml0ZVByZSBhbmQgKkFwcGVuZFByZSBhdXRvY29tbWFuZHMgdGhlICdbIG1hcmsgaXMKKyAgc2V0IHRvIHRoZSBmaXJzdCBsaW5lIHRoYXQgd2lsbCBiZSB3cml0dGVuLCB0aGUgJ10gbWFyayB0byB0aGUgbGFzdCBsaW5lLgorQ2FyZWZ1bDogJ1sgYW5kICddIGNoYW5nZSB3aGVuIHVzaW5nIGNvbW1hbmRzIHRoYXQgY2hhbmdlIHRoZSBidWZmZXIuCisKK0luIGNvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIGZpbGUgbmFtZSwgeW91IGNhbiB1c2UgIjxhZmlsZT4iIGZvciB0aGUgZmlsZSBuYW1lCit0aGF0IGlzIGJlaW5nIHJlYWQgfDo8YWZpbGU+fCAoeW91IGNhbiBhbHNvIHVzZSAiJSIgZm9yIHRoZSBjdXJyZW50IGZpbGUKK25hbWUpLiAgIjxhYnVmPiIgY2FuIGJlIHVzZWQgZm9yIHRoZSBidWZmZXIgbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgZWZmZWN0aXZlCitidWZmZXIuICBUaGlzIGFsc28gd29ya3MgZm9yIGJ1ZmZlcnMgdGhhdCBkb2Vzbid0IGhhdmUgYSBuYW1lLiAgQnV0IGl0IGRvZXNuJ3QKK3dvcmsgZm9yIGZpbGVzIHdpdGhvdXQgYSBidWZmZXIgKGUuZy4sIHdpdGggIjpyIGZpbGUiKS4KKworCQkJCQkJCSpnemlwLWV4YW1wbGUqCitFeGFtcGxlcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBjb21wcmVzc2VkIGZpbGVzOiA+CisgIDphdWdyb3VwIGd6aXAKKyAgOiAgYXV0b2NtZCEKKyAgOiAgYXV0b2NtZCBCdWZSZWFkUHJlLEZpbGVSZWFkUHJlCSouZ3ogc2V0IGJpbgorICA6ICBhdXRvY21kIEJ1ZlJlYWRQb3N0LEZpbGVSZWFkUG9zdAkqLmd6ICdbLCddIWd1bnppcAorICA6ICBhdXRvY21kIEJ1ZlJlYWRQb3N0LEZpbGVSZWFkUG9zdAkqLmd6IHNldCBub2JpbgorICA6ICBhdXRvY21kIEJ1ZlJlYWRQb3N0LEZpbGVSZWFkUG9zdAkqLmd6IGV4ZWN1dGUgIjpkb2F1dG9jbWQgQnVmUmVhZFBvc3QgIiAuIGV4cGFuZCgiJTpyIikKKyAgOiAgYXV0b2NtZCBCdWZXcml0ZVBvc3QsRmlsZVdyaXRlUG9zdAkqLmd6ICFtdiA8YWZpbGU+IDxhZmlsZT46cgorICA6ICBhdXRvY21kIEJ1ZldyaXRlUG9zdCxGaWxlV3JpdGVQb3N0CSouZ3ogIWd6aXAgPGFmaWxlPjpyCisKKyAgOiAgYXV0b2NtZCBGaWxlQXBwZW5kUHJlCQkqLmd6ICFndW56aXAgPGFmaWxlPgorICA6ICBhdXRvY21kIEZpbGVBcHBlbmRQcmUJCSouZ3ogIW12IDxhZmlsZT46ciA8YWZpbGU+CisgIDogIGF1dG9jbWQgRmlsZUFwcGVuZFBvc3QJCSouZ3ogIW12IDxhZmlsZT4gPGFmaWxlPjpyCisgIDogIGF1dG9jbWQgRmlsZUFwcGVuZFBvc3QJCSouZ3ogIWd6aXAgPGFmaWxlPjpyCisgIDphdWdyb3VwIEVORAorCitUaGUgImd6aXAiIGdyb3VwIGlzIHVzZWQgdG8gYmUgYWJsZSB0byBkZWxldGUgYW55IGV4aXN0aW5nIGF1dG9jb21tYW5kcyB3aXRoCisiOmF1dG9jbWQhIiwgZm9yIHdoZW4gdGhlIGZpbGUgaXMgc291cmNlZCB0d2ljZS4KKworKCI8YWZpbGU+OnIiIGlzIHRoZSBmaWxlIG5hbWUgd2l0aG91dCB0aGUgZXh0ZW5zaW9uLCBzZWUgfDpfJTp8KQorCitUaGUgY29tbWFuZHMgZXhlY3V0ZWQgZm9yIHRoZSBCdWZOZXdGaWxlLCBCdWZSZWFkL0J1ZlJlYWRQb3N0LCBCdWZXcml0ZVBvc3QsCitGaWxlQXBwZW5kUG9zdCBhbmQgVmltTGVhdmUgZXZlbnRzIGRvIG5vdCBzZXQgb3IgcmVzZXQgdGhlIGNoYW5nZWQgZmxhZyBvZiB0aGUKK2J1ZmZlci4gIFdoZW4geW91IGRlY29tcHJlc3MgdGhlIGJ1ZmZlciB3aXRoIHRoZSBCdWZSZWFkUG9zdCBhdXRvY29tbWFuZHMsIHlvdQorY2FuIHN0aWxsIGV4aXQgd2l0aCAiOnEiLiAgV2hlbiB5b3UgdXNlICI6dW5kbyIgaW4gQnVmV3JpdGVQb3N0IHRvIHVuZG8gdGhlCitjaGFuZ2VzIG1hZGUgYnkgQnVmV3JpdGVQcmUgY29tbWFuZHMsIHlvdSBjYW4gc3RpbGwgZG8gIjpxIiAodGhpcyBhbHNvIG1ha2VzCisiWloiIHdvcmspLiAgSWYgeW91IGRvIHdhbnQgdGhlIGJ1ZmZlciB0byBiZSBtYXJrZWQgYXMgbW9kaWZpZWQsIHNldCB0aGUKKydtb2RpZmllZCcgb3B0aW9uLgorCitUbyBleGVjdXRlIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGZyb20gYW4gYXV0b2NvbW1hbmQsIHVzZSB0aGUgIjpub3JtYWwiCitjb21tYW5kLiAgVXNlIHdpdGggY2FyZSEgIElmIHRoZSBOb3JtYWwgbW9kZSBjb21tYW5kIGlzIG5vdCBmaW5pc2hlZCwgdGhlIHVzZXIKK25lZWRzIHRvIHR5cGUgY2hhcmFjdGVycyAoZS5nLiwgYWZ0ZXIgIjpub3JtYWwgbSIgeW91IG5lZWQgdG8gdHlwZSBhIG1hcmsKK25hbWUpLgorCitJZiB5b3Ugd2FudCB0aGUgYnVmZmVyIHRvIGJlIHVubW9kaWZpZWQgYWZ0ZXIgY2hhbmdpbmcgaXQsIHJlc2V0IHRoZQorJ21vZGlmaWVkJyBvcHRpb24uICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGV4aXQgdGhlIGJ1ZmZlciB3aXRoICI6cSIKK2luc3RlYWQgb2YgIjpxISIuCisKKwkJCQkJCQkqYXV0b2NtZC1uZXN0ZWQqICpFMjE4KgorQnkgZGVmYXVsdCwgYXV0b2NvbW1hbmRzIGRvIG5vdCBuZXN0LiAgSWYgeW91IHVzZSAiOmUiIG9yICI6dyIgaW4gYW4KK2F1dG9jb21tYW5kLCBWaW0gZG9lcyBub3QgZXhlY3V0ZSB0aGUgQnVmUmVhZCBhbmQgQnVmV3JpdGUgYXV0b2NvbW1hbmRzIGZvcgordGhvc2UgY29tbWFuZHMuICBJZiB5b3UgZG8gd2FudCB0aGlzLCB1c2UgdGhlICJuZXN0ZWQiIGZsYWcgZm9yIHRob3NlIGNvbW1hbmRzCitpbiB3aGljaCB5b3Ugd2FudCBuZXN0aW5nLiAgRm9yIGV4YW1wbGU6ID4KKyAgOmF1dG9jbWQgRmlsZUNoYW5nZWRTaGVsbCAqLmMgbmVzdGVkIGUhCitUaGUgbmVzdGluZyBpcyBsaW1pdGVkIHRvIDEwIGxldmVscyB0byBnZXQgb3V0IG9mIHJlY3Vyc2l2ZSBsb29wcy4KKworSXQncyBwb3NzaWJsZSB0byB1c2UgdGhlICI6YXUiIGNvbW1hbmQgaW4gYW4gYXV0b2NvbW1hbmQuICBUaGlzIGNhbiBiZSBhCitzZWxmLW1vZGlmeWluZyBjb21tYW5kISAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBhbiBhdXRvY29tbWFuZCB0aGF0IHNob3VsZAorZXhlY3V0ZSBvbmx5IG9uY2UuCisKK1RoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gZGlzYWJsZSB0aGUgYXV0b2NvbW1hbmRzLiAgSWYgeW91IHdhbnQgdG8gd3JpdGUgYQorZmlsZSB3aXRob3V0IGV4ZWN1dGluZyB0aGUgYXV0b2NvbW1hbmRzIGZvciB0aGF0IHR5cGUgb2YgZmlsZSwgd3JpdGUgaXQgdW5kZXIKK2Fub3RoZXIgbmFtZSBhbmQgcmVuYW1lIGl0IHdpdGggYSBzaGVsbCBjb21tYW5kLiAgSW4gc29tZSBzaXR1YXRpb25zIHlvdSBjYW4KK3VzZSB0aGUgJ2V2ZW50aWdub3JlJyBvcHRpb24uCisKK05vdGU6IFdoZW4gcmVhZGluZyBhIGZpbGUgKHdpdGggIjpyZWFkIGZpbGUiIG9yIHdpdGggYSBmaWx0ZXIgY29tbWFuZCkgYW5kIHRoZQorbGFzdCBsaW5lIGluIHRoZSBmaWxlIGRvZXMgbm90IGhhdmUgYW4gPEVPTD4sIFZpbSByZW1lbWJlcnMgdGhpcy4gIEF0IHRoZSBuZXh0Cit3cml0ZSAod2l0aCAiOndyaXRlIGZpbGUiIG9yIHdpdGggYSBmaWx0ZXIgY29tbWFuZCksIGlmIHRoZSBzYW1lIGxpbmUgaXMKK3dyaXR0ZW4gYWdhaW4gYXMgdGhlIGxhc3QgbGluZSBpbiBhIGZpbGUgQU5EICdiaW5hcnknIGlzIHNldCwgVmltIGRvZXMgbm90CitzdXBwbHkgYW4gPEVPTD4uICBUaGlzIG1ha2VzIGEgZmlsdGVyIGNvbW1hbmQgb24gdGhlIGp1c3QgcmVhZCBsaW5lcyB3cml0ZSB0aGUKK3NhbWUgZmlsZSBhcyB3YXMgcmVhZCwgYW5kIG1ha2VzIGEgd3JpdGUgY29tbWFuZCBvbiBqdXN0IGZpbHRlcmVkIGxpbmVzIHdyaXRlCit0aGUgc2FtZSBmaWxlIGFzIHdhcyByZWFkIGZyb20gdGhlIGZpbHRlci4gIEZvciBleGFtcGxlLCBhbm90aGVyIHdheSB0byB3cml0ZQorYSBjb21wcmVzc2VkIGZpbGU6ID4KKworICA6YXV0b2NtZCBGaWxlV3JpdGVQcmUgKi5neiAgIHNldCBiaW58J1ssJ10hZ3ppcAorICA6YXV0b2NtZCBGaWxlV3JpdGVQb3N0ICouZ3ogIHVuZG98c2V0IG5vYmluCis8CisJCQkJCQkJKmF1dG9jb21tYW5kLXBhdHRlcm4qCitZb3UgY2FuIHNwZWNpZnkgbXVsdGlwbGUgcGF0dGVybnMsIHNlcGFyYXRlZCBieSBjb21tYXMuICBIZXJlIGFyZSBzb21lCitleGFtcGxlczogPgorCisgIDphdXRvY21kIEJ1ZlJlYWQgICAqCQlzZXQgdHc9Nzkgbm9jaW4gaWMgaW5mZXJjYXNlIGZvPTJjcm9xCisgIDphdXRvY21kIEJ1ZlJlYWQgICAubGV0dGVyCXNldCB0dz03MiBmbz0ydGNycQorICA6YXV0b2NtZCBCdWZFbnRlciAgLmxldHRlcglzZXQgZGljdD0vdXNyL2xpYi9kaWN0L3dvcmRzCisgIDphdXRvY21kIEJ1ZkxlYXZlICAubGV0dGVyCXNldCBkaWN0PQorICA6YXV0b2NtZCBCdWZSZWFkLEJ1Zk5ld0ZpbGUgICAqLmMsKi5oCXNldCB0dz0wIGNpbiBub2ljCisgIDphdXRvY21kIEJ1ZkVudGVyICAqLmMsKi5oCWFiYnIgRk9SIGZvciAoaSA9IDA7IGkgPCAzOyArK2kpPENSPns8Q1I+fTxFc2M+TworICA6YXV0b2NtZCBCdWZMZWF2ZSAgKi5jLCouaAl1bmFiYnIgRk9SCisKK0ZvciBtYWtlZmlsZXMgKG1ha2VmaWxlLCBNYWtlZmlsZSwgaW1ha2VmaWxlLCBtYWtlZmlsZS51bml4LCBldGMuKTogPgorCisgIDphdXRvY21kIEJ1ZkVudGVyICA/YWtlZmlsZSoJc2V0IGluY2x1ZGU9XnNcPWluY2x1ZGUKKyAgOmF1dG9jbWQgQnVmTGVhdmUgID9ha2VmaWxlKglzZXQgaW5jbHVkZSYKKworVG8gYWx3YXlzIHN0YXJ0IGVkaXRpbmcgQyBmaWxlcyBhdCB0aGUgZmlyc3QgZnVuY3Rpb246ID4KKworICA6YXV0b2NtZCBCdWZSZWFkICAgKi5jLCouaAkxOy9eeworCitXaXRob3V0IHRoZSAiMTsiIGFib3ZlLCB0aGUgc2VhcmNoIHdvdWxkIHN0YXJ0IGZyb20gd2hlcmV2ZXIgdGhlIGZpbGUgd2FzCitlbnRlcmVkLCByYXRoZXIgdGhhbiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlsZS4KKworCQkJCQkJKnNrZWxldG9uKiAqdGVtcGxhdGUqCitUbyByZWFkIGEgc2tlbGV0b24gKHRlbXBsYXRlKSBmaWxlIHdoZW4gb3BlbmluZyBhIG5ldyBmaWxlOiA+CisKKyAgOmF1dG9jbWQgQnVmTmV3RmlsZSAgKi5jCTByIH4vdmltL3NrZWxldG9uLmMKKyAgOmF1dG9jbWQgQnVmTmV3RmlsZSAgKi5oCTByIH4vdmltL3NrZWxldG9uLmgKKyAgOmF1dG9jbWQgQnVmTmV3RmlsZSAgKi5qYXZhCTByIH4vdmltL3NrZWxldG9uLmphdmEKKworVG8gaW5zZXJ0IHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgaW4gYSAqLmh0bWwgZmlsZSB3aGVuIHdyaXRpbmcgaXQ6ID4KKworICA6YXV0b2NtZCBCdWZXcml0ZVByZSxGaWxlV3JpdGVQcmUgKi5odG1sICAga3N8Y2FsbCBMYXN0TW9kKCl8J3MKKyAgOmZ1biBMYXN0TW9kKCkKKyAgOiAgaWYgbGluZSgiJCIpID4gMjAKKyAgOiAgICBsZXQgbCA9IDIwCisgIDogIGVsc2UKKyAgOiAgICBsZXQgbCA9IGxpbmUoIiQiKQorICA6ICBlbmRpZgorICA6ICBleGUgIjEsIiAuIGwgLiAiZy9MYXN0IG1vZGlmaWVkOiAvcy9MYXN0IG1vZGlmaWVkOiAuKi9MYXN0IG1vZGlmaWVkOiAiIC4KKyAgOiAgXCBzdHJmdGltZSgiJVkgJWIgJWQiKQorICA6ZW5kZnVuCisKK1lvdSBuZWVkIHRvIGhhdmUgYSBsaW5lICJMYXN0IG1vZGlmaWVkOiA8ZGF0ZSB0aW1lPiIgaW4gdGhlIGZpcnN0IDIwIGxpbmVzCitvZiB0aGUgZmlsZSBmb3IgdGhpcyB0byB3b3JrLiAgVmltIHJlcGxhY2VzIDxkYXRlIHRpbWU+IChhbmQgYW55dGhpbmcgaW4gdGhlCitzYW1lIGxpbmUgYWZ0ZXIgaXQpIHdpdGggdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4gIEV4cGxhbmF0aW9uOgorCWtzCQltYXJrIGN1cnJlbnQgcG9zaXRpb24gd2l0aCBtYXJrICdzJworCWNhbGwgTGFzdE1vZCgpICBjYWxsIHRoZSBMYXN0TW9kKCkgZnVuY3Rpb24gdG8gZG8gdGhlIHdvcmsKKwkncwkJcmV0dXJuIHRoZSBjdXJzb3IgdG8gdGhlIG9sZCBwb3NpdGlvbgorVGhlIExhc3RNb2QoKSBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGZpbGUgaXMgc2hvcnRlciB0aGFuIDIwIGxpbmVzLCBhbmQgdGhlbgordXNlcyB0aGUgIjpnIiBjb21tYW5kIHRvIGZpbmQgbGluZXMgdGhhdCBjb250YWluICJMYXN0IG1vZGlmaWVkOiAiLiAgRm9yIHRob3NlCitsaW5lcyB0aGUgIjpzIiBjb21tYW5kIGlzIGV4ZWN1dGVkIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIGRhdGUgd2l0aCB0aGUKK2N1cnJlbnQgb25lLiAgVGhlICI6ZXhlY3V0ZSIgY29tbWFuZCBpcyB1c2VkIHRvIGJlIGFibGUgdG8gdXNlIGFuIGV4cHJlc3Npb24KK2ZvciB0aGUgIjpnIiBhbmQgIjpzIiBjb21tYW5kcy4gIFRoZSBkYXRlIGlzIG9idGFpbmVkIHdpdGggdGhlIHN0cmZ0aW1lKCkKK2Z1bmN0aW9uLiAgWW91IGNhbiBjaGFuZ2UgaXRzIGFyZ3VtZW50IHRvIGdldCBhbm90aGVyIGRhdGUgc3RyaW5nLgorCitXaGVuIGVudGVyaW5nIDphdXRvY21kIG9uIHRoZSBjb21tYW5kLWxpbmUsIGNvbXBsZXRpb24gb2YgZXZlbnRzIGFuZCBjb21tYW5kCituYW1lcyBtYXkgYmUgZG9uZSAod2l0aCA8VGFiPiwgQ1RSTC1ELCBldGMuKSB3aGVyZSBhcHByb3ByaWF0ZS4KKworVmltIGV4ZWN1dGVzIGFsbCBtYXRjaGluZyBhdXRvY29tbWFuZHMgaW4gdGhlIG9yZGVyIHRoYXQgeW91IHNwZWNpZnkgdGhlbS4KK0l0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91ciBmaXJzdCBhdXRvY29tbWFuZCBiZSB1c2VkIGZvciBhbGwgZmlsZXMgYnkgdXNpbmcKKyIqIiBhcyB0aGUgZmlsZSBwYXR0ZXJuLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gZGVmaW5lIGRlZmF1bHRzIHlvdSBsaWtlCitoZXJlIGZvciBhbnkgc2V0dGluZ3MsIGFuZCBpZiB0aGVyZSBpcyBhbm90aGVyIG1hdGNoaW5nIGF1dG9jb21tYW5kIGl0IHdpbGwKK292ZXJyaWRlIHRoZXNlLiAgQnV0IGlmIHRoZXJlIGlzIG5vIG90aGVyIG1hdGNoaW5nIGF1dG9jb21tYW5kLCB0aGVuIGF0IGxlYXN0Cit5b3VyIGRlZmF1bHQgc2V0dGluZ3MgYXJlIHJlY292ZXJlZCAoaWYgZW50ZXJpbmcgdGhpcyBmaWxlIGZyb20gYW5vdGhlciBmb3IKK3doaWNoIGF1dG9jb21tYW5kcyBkaWQgbWF0Y2gpLiAgTm90ZSB0aGF0ICIqIiB3aWxsIGFsc28gbWF0Y2ggZmlsZXMgc3RhcnRpbmcKK3dpdGggIi4iLCB1bmxpa2UgVW5peCBzaGVsbHMuCisKKwkJCQkJCSAgICAqYXV0b2NtZC1zZWFyY2hwYXQqCitBdXRvY29tbWFuZHMgZG8gbm90IGNoYW5nZSB0aGUgY3VycmVudCBzZWFyY2ggcGF0dGVybnMuICBWaW0gc2F2ZXMgdGhlIGN1cnJlbnQKK3NlYXJjaCBwYXR0ZXJucyBiZWZvcmUgZXhlY3V0aW5nIGF1dG9jb21tYW5kcyB0aGVuIHJlc3RvcmVzIHRoZW0gYWZ0ZXIgdGhlCithdXRvY29tbWFuZHMgZmluaXNoLiAgVGhpcyBtZWFucyB0aGF0IGF1dG9jb21tYW5kcyBkbyBub3QgYWZmZWN0IHRoZSBzdHJpbmdzCitoaWdobGlnaHRlZCB3aXRoIHRoZSAnaGxzZWFyY2gnIG9wdGlvbi4gIFdpdGhpbiBhdXRvY29tbWFuZHMsIHlvdSBjYW4gc3RpbGwKK3VzZSBzZWFyY2ggcGF0dGVybnMgbm9ybWFsbHksIGUuZy4sIHdpdGggdGhlICJuIiBjb21tYW5kLgorSWYgeW91IHdhbnQgYW4gYXV0b2NvbW1hbmQgdG8gc2V0IHRoZSBzZWFyY2ggcGF0dGVybiwgc3VjaCB0aGF0IGl0IGlzIHVzZWQKK2FmdGVyIHRoZSBhdXRvY29tbWFuZCBmaW5pc2hlcywgdXNlIHRoZSAiOmxldCBALyA9IiBjb21tYW5kLgorVGhlIHNlYXJjaC1oaWdobGlnaHRpbmcgY2Fubm90IGJlIHN3aXRjaGVkIG9mZiB3aXRoICI6bm9obHNlYXJjaCIgaW4gYW4KK2F1dG9jb21tYW5kLiAgVXNlIHRoZSAnaCcgZmxhZyBpbiB0aGUgJ3ZpbWluZm8nIG9wdGlvbiB0byBkaXNhYmxlIHNlYXJjaC0KK2hpZ2hsaWdodGluZyB3aGVuIHN0YXJ0aW5nIFZpbS4KKworCQkJCQkJCSpDbWQtZXZlbnQqCitXaGVuIHVzaW5nIG9uZSBvZiB0aGUgIipDbWQiIGV2ZW50cywgdGhlIG1hdGNoaW5nIGF1dG9jb21tYW5kcyBhcmUgZXhwZWN0ZWQgdG8KK2RvIHRoZSBmaWxlIHJlYWRpbmcgb3Igd3JpdGluZy4gIFRoaXMgY2FuIGJlIHVzZWQgd2hlbiB3b3JraW5nIHdpdGggYSBzcGVjaWFsCitraW5kIG9mIGZpbGUsIGZvciBleGFtcGxlIG9uIGEgcmVtb3RlIHN5c3RlbS4KK0NBUkVGVUw6IElmIHlvdSB1c2UgdGhlc2UgZXZlbnRzIGluIGEgd3Jvbmcgd2F5LCBpdCBtYXkgaGF2ZSB0aGUgZWZmZWN0IG9mCittYWtpbmcgaXQgaW1wb3NzaWJsZSB0byByZWFkIG9yIHdyaXRlIHRoZSBtYXRjaGluZyBmaWxlcyEgIE1ha2Ugc3VyZSB5b3UgdGVzdAoreW91ciBhdXRvY29tbWFuZHMgcHJvcGVybHkuICBCZXN0IGlzIHRvIHVzZSBhIHBhdHRlcm4gdGhhdCB3aWxsIG5ldmVyIG1hdGNoIGEKK25vcm1hbCBmaWxlIG5hbWUsIGZvciBleGFtcGxlICJmdHA6Ly8qIi4KKworV2hlbiBkZWZpbmluZyBhIEJ1ZlJlYWRDbWQgaXQgd2lsbCBiZSBkaWZmaWN1bHQgZm9yIFZpbSB0byByZWNvdmVyIGEgY3Jhc2hlZAorZWRpdGluZyBzZXNzaW9uLiAgV2hlbiByZWNvdmVyaW5nIGZyb20gdGhlIG9yaWdpbmFsIGZpbGUsIFZpbSByZWFkcyBvbmx5IHRob3NlCitwYXJ0cyBvZiBhIGZpbGUgdGhhdCBhcmUgbm90IGZvdW5kIGluIHRoZSBzd2FwIGZpbGUuICBTaW5jZSB0aGF0IGlzIG5vdAorcG9zc2libGUgd2l0aCBhIEJ1ZlJlYWRDbWQsIHVzZSB0aGUgfDpwcmVzZXJ2ZXwgY29tbWFuZCB0byBtYWtlIHN1cmUgdGhlCitvcmlnaW5hbCBmaWxlIGlzbid0IG5lZWRlZCBmb3IgcmVjb3ZlcnkuICBZb3UgbWlnaHQgd2FudCB0byBkbyB0aGlzIG9ubHkgd2hlbgoreW91IGV4cGVjdCB0aGUgZmlsZSB0byBiZSBtb2RpZmllZC4KKworVGhlIHx2OmNtZGFyZ3wgdmFyaWFibGUgaG9sZHMgdGhlICIrK2VuYz0iIGFuZCAiKytmZj0iIGFyZ3VtZW50IHRoYXQgYXJlCitlZmZlY3RpdmUuICBUaGVzZSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIGNvbW1hbmQgdGhhdCByZWFkcy93cml0ZXMgdGhlIGZpbGUuCitUaGUgfHY6Y21kYmFuZ3wgdmFyaWFibGUgaXMgb25lIHdoZW4gIiEiIHdhcyB1c2VkLCB6ZXJvIG90aGVyd2lzZS4KKworU2VlIHRoZSAkVklNUlVOVElNRS9wbHVnaW4vbmV0cncudmltIGZvciBleGFtcGxlcy4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2NoYW5nZS50eHQgYi9ydW50aW1lL2RvYy9jaGFuZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTZjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9jaGFuZ2UudHh0CkBAIC0wLDAgKzEsMTQyNSBAQAorKmNoYW5nZS50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwOAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1RoaXMgZmlsZSBkZXNjcmliZXMgY29tbWFuZHMgdGhhdCBkZWxldGUgb3IgY2hhbmdlIHRleHQuICBJbiB0aGlzIGNvbnRleHQsCitjaGFuZ2luZyB0ZXh0IG1lYW5zIGRlbGV0aW5nIHRoZSB0ZXh0IGFuZCByZXBsYWNpbmcgaXQgd2l0aCBvdGhlciB0ZXh0IHVzaW5nCitvbmUgY29tbWFuZC4gIFlvdSBjYW4gdW5kbyBhbGwgb2YgdGhlc2UgY29tbWFuZHMuICBZb3UgY2FuIHJlcGVhdCB0aGUgbm9uLUV4Citjb21tYW5kcyB3aXRoIHRoZSAiLiIgY29tbWFuZC4KKworMS4gRGVsZXRpbmcgdGV4dAkJfGRlbGV0aW5nfAorMi4gRGVsZXRlIGFuZCBpbnNlcnQJCXxkZWxldGUtaW5zZXJ0fAorMy4gU2ltcGxlIGNoYW5nZXMJCXxzaW1wbGUtY2hhbmdlfAkJKmNoYW5naW5nKgorNC4gQ29tcGxleCBjaGFuZ2VzCQl8Y29tcGxleC1jaGFuZ2V8Cis1LiBDb3B5aW5nIGFuZCBtb3ZpbmcgdGV4dAl8Y29weS1tb3ZlfAorNi4gRm9ybWF0dGluZyB0ZXh0CQl8Zm9ybWF0dGluZ3wKKworRm9yIGluc2VydGluZyB0ZXh0IHNlZSB8aW5zZXJ0LnR4dHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gRGVsZXRpbmcgdGV4dAkJCQkJKmRlbGV0aW5nKiAqRTQ3MCoKKworWyJ4XTxEZWw+CW9yCQkJCQkqPERlbD4qICp4KiAqZGwqCitbInhdeAkJCURlbGV0ZSBbY291bnRdIGNoYXJhY3RlcnMgdW5kZXIgYW5kIGFmdGVyIHRoZSBjdXJzb3IKKwkJCVtpbnRvIHJlZ2lzdGVyIHhdIChub3QgfGxpbmV3aXNlfCkuICBEb2VzIHRoZSBzYW1lIGFzCisJCQkiZGwiLgorCQkJVGhlIDxEZWw+IGtleSBkb2VzIG5vdCB0YWtlIGEgW2NvdW50XS4gIEluc3RlYWQsIGl0CisJCQlkZWxldGVzIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgY291bnQuCisJCQlTZWUgfDpmaXhkZWx8IGlmIHRoZSA8RGVsPiBrZXkgZG9lcyBub3QgZG8gd2hhdCB5b3UKKwkJCXdhbnQuICBTZWUgfCd3aGljaHdyYXAnfCBmb3IgZGVsZXRpbmcgYSBsaW5lIGJyZWFrCisJCQkoam9pbiBsaW5lcykuICB7VmkgZG9lcyBub3Qgc3VwcG9ydCA8RGVsPn0KKworCQkJCQkJCSpYKiAqZGgqCitbInhdWAkJCURlbGV0ZSBbY291bnRdIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBjdXJzb3IgW2ludG8KKwkJCXJlZ2lzdGVyIHhdIChub3QgfGxpbmV3aXNlfCkuICBEb2VzIHRoZSBzYW1lIGFzICJkaCIuCisJCQlBbHNvIHNlZSB8J3doaWNod3JhcCd8LgorCisJCQkJCQkJKmQqCitbInhdZHttb3Rpb259CQlEZWxldGUgdGV4dCB0aGF0IHttb3Rpb259IG1vdmVzIG92ZXIgW2ludG8gcmVnaXN0ZXIKKwkJCXhdLiAgU2VlIGJlbG93IGZvciBleGNlcHRpb25zLgorCisJCQkJCQkJKmRkKgorWyJ4XWRkCQkJRGVsZXRlIFtjb3VudF0gbGluZXMgW2ludG8gcmVnaXN0ZXIgeF0gfGxpbmV3aXNlfC4KKworCQkJCQkJCSpEKgorWyJ4XUQJCQlEZWxldGUgdGhlIGNoYXJhY3RlcnMgdW5kZXIgdGhlIGN1cnNvciB1bnRpbCB0aGUgZW5kCisJCQlvZiB0aGUgbGluZSBhbmQgW2NvdW50XS0xIG1vcmUgbGluZXMgW2ludG8gcmVnaXN0ZXIKKwkJCXhdOyBzeW5vbnltIGZvciAiZCQiLgorCQkJKG5vdCB8bGluZXdpc2V8KQorCit7VmlzdWFsfVsieF14CW9yCQkJCQkqdl94KiAqdl9kKiAqdl88RGVsPioKK3tWaXN1YWx9WyJ4XWQgICBvcgore1Zpc3VhbH1bInhdPERlbD4JRGVsZXRlIHRoZSBoaWdobGlnaHRlZCB0ZXh0IFtpbnRvIHJlZ2lzdGVyIHhdIChmb3IKKwkJCXtWaXN1YWx9IHNlZSB8VmlzdWFsLW1vZGV8KS4gIHtub3QgaW4gVml9CisKK3tWaXN1YWx9WyJ4XUNUUkwtSCAgIG9yCQkJCQkqdl9DVFJMLUgqICp2XzxCUz4qCit7VmlzdWFsfVsieF08QlM+CVdoZW4gaW4gU2VsZWN0IG1vZGU6IERlbGV0ZSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBbaW50bworCQkJcmVnaXN0ZXIgeF0uCisKK3tWaXN1YWx9WyJ4XVgJb3IJCQkJCSp2X1gqICp2X0QqICp2X2JfRCoKK3tWaXN1YWx9WyJ4XUQJCURlbGV0ZSB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgW2ludG8gcmVnaXN0ZXIgeF0gKGZvcgorCQkJe1Zpc3VhbH0gc2VlIHxWaXN1YWwtbW9kZXwpLiAgSW4gVmlzdWFsIGJsb2NrIG1vZGUsCisJCQkiRCIgZGVsZXRlcyB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBwbHVzIGFsbCB0ZXh0IHVudGlsCisJCQl0aGUgZW5kIG9mIHRoZSBsaW5lLiAge25vdCBpbiBWaX0KKworCQkJCQkJKjpkKiAqOmRlKiAqOmRlbCogKjpkZWxldGUqCis6W3JhbmdlXWRbZWxldGVdIFt4XQlEZWxldGUgW3JhbmdlXSBsaW5lcyAoZGVmYXVsdDogY3VycmVudCBsaW5lKSBbaW50bworCQkJcmVnaXN0ZXIgeF0uCisKKzpbcmFuZ2VdZFtlbGV0ZV0gW3hdIHtjb3VudH0KKwkJCURlbGV0ZSB7Y291bnR9IGxpbmVzLCBzdGFydGluZyB3aXRoIFtyYW5nZV0KKwkJCShkZWZhdWx0OiBjdXJyZW50IGxpbmUgfGNtZGxpbmUtcmFuZ2VzfCkgW2ludG8KKwkJCXJlZ2lzdGVyIHhdLgorCitUaGVzZSBjb21tYW5kcyBkZWxldGUgdGV4dC4gIFlvdSBjYW4gcmVwZWF0IHRoZW0gd2l0aCB0aGUgIi4iIGNvbW1hbmQKKyhleGNlcHQgIjpkIikgYW5kIHVuZG8gdGhlbS4gIFVzZSBWaXN1YWwgbW9kZSB0byBkZWxldGUgYmxvY2tzIG9mIHRleHQuICBTZWUKK3xyZWdpc3RlcnN8IGZvciBhbiBleHBsYW5hdGlvbiBvZiByZWdpc3RlcnMuCisKK0FuIGV4Y2VwdGlvbiBmb3IgdGhlIGR7bW90aW9ufSBjb21tYW5kOiBJZiB0aGUgbW90aW9uIGlzIG5vdCBsaW5ld2lzZSwgdGhlCitzdGFydCBhbmQgZW5kIG9mIHRoZSBtb3Rpb24gYXJlIG5vdCBpbiB0aGUgc2FtZSBsaW5lLCBhbmQgdGhlcmUgYXJlIG9ubHkKK2JsYW5rcyBiZWZvcmUgdGhlIHN0YXJ0IGFuZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBtb3Rpb24sIHRoZSBkZWxldGUgYmVjb21lcworbGluZXdpc2UuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGRlbGV0ZSBhbHNvIHJlbW92ZXMgdGhlIGxpbmUgb2YgYmxhbmtzIHRoYXQgeW91CittaWdodCBleHBlY3QgdG8gcmVtYWluLgorCitUcnlpbmcgdG8gZGVsZXRlIGFuIGVtcHR5IHJlZ2lvbiBvZiB0ZXh0IChlLmcuLCAiZDAiIGluIHRoZSBmaXJzdCBjb2x1bW4pCitpcyBhbiBlcnJvciB3aGVuICdjcG9wdGlvbnMnIGluY2x1ZGVzIHRoZSAnRScgZmxhZy4KKworCQkJCQkJCSpKKgorSgkJCUpvaW4gW2NvdW50XSBsaW5lcywgd2l0aCBhIG1pbmltdW0gb2YgdHdvIGxpbmVzLgorCQkJUmVtb3ZlIHRoZSBpbmRlbnQgYW5kIGluc2VydCB1cCB0byB0d28gc3BhY2VzIChzZWUKKwkJCWJlbG93KS4KKworCQkJCQkJCSp2X0oqCit7VmlzdWFsfUoJCUpvaW4gdGhlIGhpZ2hsaWdodGVkIGxpbmVzLCB3aXRoIGEgbWluaW11bSBvZiB0d28KKwkJCWxpbmVzLiAgUmVtb3ZlIHRoZSBpbmRlbnQgYW5kIGluc2VydCB1cCB0byB0d28gc3BhY2VzCisJCQkoc2VlIGJlbG93KS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZ0oqCitnSgkJCUpvaW4gW2NvdW50XSBsaW5lcywgd2l0aCBhIG1pbmltdW0gb2YgdHdvIGxpbmVzLgorCQkJRG9uJ3QgaW5zZXJ0IG9yIHJlbW92ZSBhbnkgc3BhY2VzLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSp2X2dKKgore1Zpc3VhbH1nSgkJSm9pbiB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMsIHdpdGggYSBtaW5pbXVtIG9mIHR3bworCQkJbGluZXMuICBEb24ndCBpbnNlcnQgb3IgcmVtb3ZlIGFueSBzcGFjZXMuICB7bm90IGluCisJCQlWaX0KKworCQkJCQkJCSo6aiogKjpqb2luKgorOltyYW5nZV1qW29pbl1bIV0JSm9pbiBbcmFuZ2VdIGxpbmVzLiAgU2FtZSBhcyAiSiIsIGV4Y2VwdCB3aXRoIFshXQorCQkJdGhlIGpvaW4gZG9lcyBub3QgaW5zZXJ0IG9yIGRlbGV0ZSBhbnkgc3BhY2VzLgorCQkJSWYgYSBbcmFuZ2VdIGhhcyBlcXVhbCBzdGFydCBhbmQgZW5kIHZhbHVlcywgdGhpcworCQkJY29tbWFuZCBkb2VzIG5vdGhpbmcuICBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0bworCQkJam9pbiB0aGUgY3VycmVudCBsaW5lIHdpdGggdGhlIGxpbmUgYmVsb3cgaXQuCisJCQl7bm90IGluIFZpOiAhfQorCis6W3JhbmdlXWpbb2luXVshXSB7Y291bnR9CisJCQlKb2luIHtjb3VudH0gbGluZXMsIHN0YXJ0aW5nIHdpdGggW3JhbmdlXSAoZGVmYXVsdDoKKwkJCWN1cnJlbnQgbGluZSB8Y21kbGluZS1yYW5nZXN8KS4gIFNhbWUgYXMgIkoiLCBleGNlcHQKKwkJCXdpdGggWyFdIHRoZSBqb2luIGRvZXMgbm90IGluc2VydCBvciBkZWxldGUgYW55CisJCQlzcGFjZXMuCisJCQl7bm90IGluIFZpOiAhfQorCitUaGVzZSBjb21tYW5kcyBkZWxldGUgdGhlIDxFT0w+IGJldHdlZW4gbGluZXMuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGpvaW5pbmcKK211bHRpcGxlIGxpbmVzIGludG8gb25lIGxpbmUuICBZb3UgY2FuIHJlcGVhdCB0aGVzZSBjb21tYW5kcyAoZXhjZXB0ICI6aiIpIGFuZAordW5kbyB0aGVtLgorCitUaGVzZSBjb21tYW5kcywgZXhjZXB0ICJnSiIsIGluc2VydCBvbmUgc3BhY2UgaW4gcGxhY2Ugb2YgdGhlIDxFT0w+IHVubGVzcwordGhlcmUgaXMgdHJhaWxpbmcgd2hpdGUgc3BhY2Ugb3IgdGhlIG5leHQgbGluZSBzdGFydHMgd2l0aCBhICcpJy4gIFRoZXNlCitjb21tYW5kcywgZXhjZXB0ICJnSiIsIGRlbGV0ZSBhbnkgbGVhZGluZyB3aGl0ZSBzcGFjZSBvbiB0aGUgbmV4dCBsaW5lLiAgSWYKK3RoZSAnam9pbnNwYWNlcycgb3B0aW9uIGlzIG9uLCB0aGVzZSBjb21tYW5kcyBpbnNlcnQgdHdvIHNwYWNlcyBhZnRlciBhICcuJywKKychJyBvciAnPycgKGJ1dCBpZiAnY3BvcHRpb25zJyBpbmNsdWRlcyB0aGUgJ2onIGZsYWcsIHRoZXkgaW5zZXJ0IHR3byBzcGFjZXMKK29ubHkgYWZ0ZXIgYSAnLicpLgorVGhlICdCJyBhbmQgJ00nIGZsYWdzIGluICdmb3JtYXRvcHRpb25zJyBjaGFuZ2UgdGhlIGJlaGF2aW9yIGZvciBpbnNlcnRpbmcKK3NwYWNlcyBiZWZvcmUgYW5kIGFmdGVyIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgfGZvLXRhYmxlfC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIERlbGV0ZSBhbmQgaW5zZXJ0CQkJCSpkZWxldGUtaW5zZXJ0KiAqcmVwbGFjaW5nKgorCisJCQkJCQkJKlIqCitSCQkJRW50ZXIgUmVwbGFjZSBtb2RlOiBFYWNoIGNoYXJhY3RlciB5b3UgdHlwZSByZXBsYWNlcworCQkJYW4gZXhpc3RpbmcgY2hhcmFjdGVyLCBzdGFydGluZyB3aXRoIHRoZSBjaGFyYWN0ZXIKKwkJCXVuZGVyIHRoZSBjdXJzb3IuICBSZXBlYXQgdGhlIGVudGVyZWQgdGV4dCBbY291bnRdLTEKKwkJCXRpbWVzLiAgU2VlIHxSZXBsYWNlLW1vZGV8IGZvciBtb3JlIGRldGFpbHMuCisKKwkJCQkJCQkqZ1IqCitnUgkJCUVudGVyIFZpcnR1YWwgUmVwbGFjZSBtb2RlOiBFYWNoIGNoYXJhY3RlciB5b3UgdHlwZQorCQkJcmVwbGFjZXMgZXhpc3RpbmcgY2hhcmFjdGVycyBpbiBzY3JlZW4gc3BhY2UuICBTbyBhCisJCQk8VGFiPiBtYXkgcmVwbGFjZSBzZXZlcmFsIGNoYXJhY3RlcnMgYXQgb25jZS4KKwkJCVJlcGVhdCB0aGUgZW50ZXJlZCB0ZXh0IFtjb3VudF0tMSB0aW1lcy4gIFNlZQorCQkJfFZpcnR1YWwtUmVwbGFjZS1tb2RlfCBmb3IgbW9yZSBkZXRhaWxzLgorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArdnJlcGxhY2UKKwkJCWZlYXR1cmV9CisKKwkJCQkJCQkqYyoKK1sieF1je21vdGlvbn0JCURlbGV0ZSB7bW90aW9ufSB0ZXh0IFtpbnRvIHJlZ2lzdGVyIHhdIGFuZCBzdGFydAorCQkJaW5zZXJ0LiAgV2hlbiAgJ2Nwb3B0aW9ucycgaW5jbHVkZXMgdGhlICdFJyBmbGFnIGFuZAorCQkJdGhlcmUgaXMgbm8gdGV4dCB0byBkZWxldGUgKGUuZy4sIHdpdGggImNUeCIgd2hlbiB0aGUKKwkJCWN1cnNvciBpcyBqdXN0IGFmdGVyIGFuICd4JyksIGFuIGVycm9yIG9jY3VycyBhbmQKKwkJCWluc2VydCBtb2RlIGRvZXMgbm90IHN0YXJ0ICh0aGlzIGlzIFZpIGNvbXBhdGlibGUpLgorCQkJV2hlbiAgJ2Nwb3B0aW9ucycgZG9lcyBub3QgaW5jbHVkZSB0aGUgJ0UnIGZsYWcsIHRoZQorCQkJImMiIGNvbW1hbmQgYWx3YXlzIHN0YXJ0cyBpbnNlcnQgbW9kZSwgZXZlbiBpZiB0aGVyZQorCQkJaXMgbm8gdGV4dCB0byBkZWxldGUuCisKKwkJCQkJCQkqY2MqCitbInhdY2MJCQlEZWxldGUgW2NvdW50XSBsaW5lcyBbaW50byByZWdpc3RlciB4XSBhbmQgc3RhcnQKKwkJCWluc2VydCB8bGluZXdpc2V8LiAgSWYgJ2F1dG9pbmRlbnQnIGlzIG9uLCBwcmVzZXJ2ZQorCQkJdGhlIGluZGVudCBvZiB0aGUgZmlyc3QgbGluZS4KKworCQkJCQkJCSpDKgorWyJ4XUMJCQlEZWxldGUgZnJvbSB0aGUgY3Vyc29yIHBvc2l0aW9uIHRvIHRoZSBlbmQgb2YgdGhlCisJCQlsaW5lIGFuZCBbY291bnRdLTEgbW9yZSBsaW5lcyBbaW50byByZWdpc3RlciB4XSwgYW5kCisJCQlzdGFydCBpbnNlcnQuICBTeW5vbnltIGZvciBjJCAobm90IHxsaW5ld2lzZXwpLgorCisJCQkJCQkJKnMqCitbInhdcwkJCURlbGV0ZSBbY291bnRdIGNoYXJhY3RlcnMgW2ludG8gcmVnaXN0ZXIgeF0gYW5kIHN0YXJ0CisJCQlpbnNlcnQgKHMgc3RhbmRzIGZvciBTdWJzdGl0dXRlKS4gIFN5bm9ueW0gZm9yICJjbCIKKwkJCShub3QgfGxpbmV3aXNlfCkuCisKKwkJCQkJCQkqUyoKK1sieF1TCQkJRGVsZXRlIFtjb3VudF0gbGluZXMgW2ludG8gcmVnaXN0ZXIgeF0gYW5kIHN0YXJ0CisJCQlpbnNlcnQuICBTeW5vbnltIGZvciAiY2MiIHxsaW5ld2lzZXwuCisKK3tWaXN1YWx9WyJ4XWMJb3IJCQkJCSp2X2MqICp2X3MqCit7VmlzdWFsfVsieF1zCQlEZWxldGUgdGhlIGhpZ2hsaWdodGVkIHRleHQgW2ludG8gcmVnaXN0ZXIgeF0gYW5kCisJCQlzdGFydCBpbnNlcnQgKGZvciB7VmlzdWFsfSBzZWUgfFZpc3VhbC1tb2RlfCkuICB7bm90CisJCQlpbiBWaX0KKworCQkJCQkJCSp2X3IqCit7VmlzdWFsfVsieF1ye2NoYXJ9CVJlcGxhY2UgYWxsIHNlbGVjdGVkIGNoYXJhY3RlcnMgYnkge2NoYXJ9LgorCisJCQkJCQkJKnZfQyoKK3tWaXN1YWx9WyJ4XUMJCURlbGV0ZSB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgW2ludG8gcmVnaXN0ZXIgeF0gYW5kCisJCQlzdGFydCBpbnNlcnQuICBJbiBWaXN1YWwgYmxvY2sgbW9kZSBpdCB3b3JrcworCQkJZGlmZmVyZW50bHkgfHZfYl9DfC4gIHtub3QgaW4gVml9CisJCQkJCQkJKnZfUyoKK3tWaXN1YWx9WyJ4XVMJCURlbGV0ZSB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgW2ludG8gcmVnaXN0ZXIgeF0gYW5kCisJCQlzdGFydCBpbnNlcnQgKGZvciB7VmlzdWFsfSBzZWUgfFZpc3VhbC1tb2RlfCkuICB7bm90CisJCQlpbiBWaX0KKwkJCQkJCQkqdl9SKgore1Zpc3VhbH1bInhdUgkJQ3VycmVudGx5IGp1c3QgbGlrZSB7VmlzdWFsfVsieF1TLiAgSW4gYSBuZXh0IHZlcnNpb24KKwkJCWl0IG1pZ2h0IHdvcmsgZGlmZmVyZW50bHkuIHtub3QgaW4gVml9CisKK05vdGVzOgorLSBZb3UgY2FuIGVuZCBJbnNlcnQgYW5kIFJlcGxhY2UgbW9kZSB3aXRoIDxFc2M+LgorLSBTZWUgdGhlIHNlY3Rpb24gIkluc2VydCBhbmQgUmVwbGFjZSBtb2RlIiB8bW9kZS1pbnMtcmVwbHwgZm9yIHRoZSBvdGhlcgorICBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlc2UgbW9kZXMuCistIFRoZSBlZmZlY3Qgb2YgW2NvdW50XSB0YWtlcyBwbGFjZSBhZnRlciBWaW0gZXhpdHMgSW5zZXJ0IG9yIFJlcGxhY2UgbW9kZS4KKy0gV2hlbiB0aGUgJ2Nwb3B0aW9ucycgb3B0aW9uIGNvbnRhaW5zICckJyBhbmQgdGhlIGNoYW5nZSBpcyB3aXRoaW4gb25lIGxpbmUsCisgIFZpbSBjb250aW51ZXMgdG8gc2hvdyB0aGUgdGV4dCB0byBiZSBkZWxldGVkIGFuZCBwdXRzIGEgJyQnIGF0IHRoZSBsYXN0CisgIGRlbGV0ZWQgY2hhcmFjdGVyLgorCitTZWUgfHJlZ2lzdGVyc3wgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHJlZ2lzdGVycy4KKworUmVwbGFjZSBtb2RlIGlzIGp1c3QgbGlrZSBJbnNlcnQgbW9kZSwgZXhjZXB0IHRoYXQgZXZlcnkgY2hhcmFjdGVyIHlvdSBlbnRlcgorZGVsZXRlcyBvbmUgY2hhcmFjdGVyLiAgSWYgeW91IHJlYWNoIHRoZSBlbmQgb2YgYSBsaW5lLCBWaW0gYXBwZW5kcyBhbnkKK2Z1cnRoZXIgY2hhcmFjdGVycyAoanVzdCBsaWtlIEluc2VydCBtb2RlKS4gIEluIFJlcGxhY2UgbW9kZSwgdGhlIGJhY2tzcGFjZQora2V5IHJlc3RvcmVzIHRoZSBvcmlnaW5hbCB0ZXh0IChpZiB0aGVyZSB3YXMgYW55KS4gIChTZWUgc2VjdGlvbiAiSW5zZXJ0IGFuZAorUmVwbGFjZSBtb2RlIiB8bW9kZS1pbnMtcmVwbHwpLgorCisJCQkJCQkqY3cqICpjVyoKK1NwZWNpYWwgY2FzZTogImN3IiBhbmQgImNXIiB3b3JrIHRoZSBzYW1lIGFzICJjZSIgYW5kICJjRSIgaWYgdGhlIGN1cnNvciBpcworb24gYSBub24tYmxhbmsuICBUaGlzIGlzIGJlY2F1c2UgVmltIGludGVycHJldHMgImN3IiBhcyBjaGFuZ2Utd29yZCwgYW5kIGEKK3dvcmQgZG9lcyBub3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHdoaXRlIHNwYWNlLiAge1ZpOiAiY3ciIHdoZW4gb24gYSBibGFuaworZm9sbG93ZWQgYnkgb3RoZXIgYmxhbmtzIGNoYW5nZXMgb25seSB0aGUgZmlyc3QgYmxhbms7IHRoaXMgaXMgcHJvYmFibHkgYQorYnVnLCBiZWNhdXNlICJkdyIgZGVsZXRlcyBhbGwgdGhlIGJsYW5rczsgdXNlIHRoZSAndycgZmxhZyBpbiAnY3BvcHRpb25zJyB0bworbWFrZSBpdCB3b3JrIGxpa2UgVmkgYW55d2F5fQorCitJZiB5b3UgcHJlZmVyICJjdyIgdG8gaW5jbHVkZSB0aGUgc3BhY2UgYWZ0ZXIgYSB3b3JkLCB1c2UgdGhpcyBtYXBwaW5nOiA+CisJOm1hcCBjdyBkd2kKKzwKKwkJCQkJCQkqOmMqICo6Y2gqICo6Y2hhbmdlKgorOntyYW5nZX1jW2hhbmdlXQlSZXBsYWNlIGxpbmVzIG9mIHRleHQgd2l0aCBzb21lIGRpZmZlcmVudCB0ZXh0LgorCQkJVHlwZSBhIGxpbmUgY29udGFpbmluZyBvbmx5ICIuIiB0byBzdG9wIHJlcGxhY2luZy4KKwkJCVdpdGhvdXQge3JhbmdlfSwgdGhpcyBjb21tYW5kIGNoYW5nZXMgb25seSB0aGUgY3VycmVudAorCQkJbGluZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBTaW1wbGUgY2hhbmdlcwkJCQkJKnNpbXBsZS1jaGFuZ2UqCisKKwkJCQkJCQkqcioKK3J7Y2hhcn0JCQlSZXBsYWNlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciB3aXRoIHtjaGFyfS4KKwkJCUlmIHtjaGFyfSBpcyBhIDxDUj4gb3IgPE5MPiwgYSBsaW5lIGJyZWFrIHJlcGxhY2VzIHRoZQorCQkJY2hhcmFjdGVyLiAgVG8gcmVwbGFjZSB3aXRoIGEgcmVhbCA8Q1I+LCB1c2UgQ1RSTC1WCisJCQk8Q1I+LiAgQ1RSTC1WIDxOTD4gcmVwbGFjZXMgd2l0aCBhIDxOdWw+LgorCQkJe1ZpOiBDVFJMLVYgPENSPiBzdGlsbCByZXBsYWNlcyB3aXRoIGEgbGluZSBicmVhaywKKwkJCWNhbm5vdCByZXBsYWNlIHNvbWV0aGluZyB3aXRoIGEgPENSPn0KKwkJCUlmIHlvdSBnaXZlIGEgW2NvdW50XSwgVmltIHJlcGxhY2VzIFtjb3VudF0gY2hhcmFjdGVycworCQkJd2l0aCBbY291bnRdIHtjaGFyfXMuICBXaGVuIHtjaGFyfSBpcyBhIDxDUj4gb3IgPE5MPiwKKwkJCWhvd2V2ZXIsIFZpbSBpbnNlcnRzIG9ubHkgb25lIDxDUj46ICI1cjxDUj4iIHJlcGxhY2VzCisJCQlmaXZlIGNoYXJhY3RlcnMgd2l0aCBhIHNpbmdsZSBsaW5lIGJyZWFrLgorCQkJV2hlbiB7Y2hhcn0gaXMgYSA8Q1I+IG9yIDxOTD4sIFZpbSBwZXJmb3JtcworCQkJYXV0b2luZGVudGluZy4gIFRoaXMgd29ya3MganVzdCBsaWtlIGRlbGV0aW5nIHRoZQorCQkJY2hhcmFjdGVycyB0aGF0IGFyZSByZXBsYWNlZCBhbmQgdGhlbiBkb2luZworCQkJImk8Q1I+PEVzYz4iLgorCQkJe2NoYXJ9IGNhbiBiZSBlbnRlcmVkIGFzIGEgZGlncmFwaCB8ZGlncmFwaC1hcmd8LgorCQkJfDpsbWFwfCBtYXBwaW5ncyBhcHBseSB0byB7Y2hhcn0uICBUaGUgQ1RSTC1eIGNvbW1hbmQKKwkJCWluIEluc2VydCBtb2RlIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCB0aGlzIG9uL29mZgorCQkJfGlfQ1RSTC1efC4gIFNlZSB8dXRmLTgtY2hhci1hcmd8IGFib3V0IHVzaW5nCisJCQljb21wb3NpbmcgY2hhcmFjdGVycyB3aGVuICdlbmNvZGluZycgaXMgVW5pY29kZS4KKworCQkJCQkJCSpncioKK2dye2NoYXJ9CQlSZXBsYWNlIHRoZSB2aXJ0dWFsIGNoYXJhY3RlcnMgdW5kZXIgdGhlIGN1cnNvciB3aXRoCisJCQl7Y2hhcn0uICBUaGlzIHJlcGxhY2VzIGluIHNjcmVlbiBzcGFjZSwgbm90IGZpbGUKKwkJCXNwYWNlLiAgU2VlIHxnUnwgYW5kIHxWaXJ0dWFsLVJlcGxhY2UtbW9kZXwgZm9yIG1vcmUKKwkJCWRldGFpbHMuICBBcyB3aXRoIHxyfCBhIGNvdW50IG1heSBiZSBnaXZlbi4KKwkJCXtjaGFyfSBjYW4gYmUgZW50ZXJlZCBsaWtlIHdpdGggfHJ8LgorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArdnJlcGxhY2UKKwkJCWZlYXR1cmV9CisKKwkJCQkJCSpkaWdyYXBoLWFyZyoKK1RoZSBhcmd1bWVudCBmb3IgTm9ybWFsIG1vZGUgY29tbWFuZHMgbGlrZSB8cnwgYW5kIHx0fCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIuCitXaGVuICdjcG8nIGRvZXNuJ3QgY29udGFpbiB0aGUgJ0QnIGZsYWcsIHRoaXMgY2hhcmFjdGVyIGNhbiBhbHNvIGJlIGVudGVyZWQKK2xpa2UgfGRpZ3JhcGhzfC4gIEZpcnN0IHR5cGUgQ1RSTC1LIGFuZCB0aGVuIHRoZSB0d28gZGlncmFwaCBjaGFyYWN0ZXJzLgore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2RpZ3JhcGhzfCBmZWF0dXJlfQorCisJCQkJCQkqY2FzZSoKK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgY2hhbmdlIHRoZSBjYXNlIG9mIGxldHRlcnMuICBUaGUgY3VycmVudGx5IGFjdGl2ZQorfGxvY2FsZXwgaXMgdXNlZC4gIFNlZSB8Omxhbmd1YWdlfC4gIFRoZSBMQ19DVFlQRSB2YWx1ZSBtYXR0ZXJzIGhlcmUuCisKKwkJCQkJCQkqfioKK34JCQknbm90aWxkZW9wJyBvcHRpb246IFN3aXRjaCBjYXNlIG9mIHRoZSBjaGFyYWN0ZXIKKwkJCXVuZGVyIHRoZSBjdXJzb3IgYW5kIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmlnaHQuCisJCQlJZiBhIFtjb3VudF0gaXMgZ2l2ZW4sIGRvIHRoYXQgbWFueSBjaGFyYWN0ZXJzLiB7Vmk6CisJCQlubyBjb3VudH0KKworfnttb3Rpb259CQkndGlsZGVvcCcgb3B0aW9uOiBzd2l0Y2ggY2FzZSBvZiB7bW90aW9ufSB0ZXh0LiB7Vmk6CisJCQl0aWxkZSBjYW5ub3QgYmUgdXNlZCBhcyBhbiBvcGVyYXRvcn0KKworCQkJCQkJCSpnfioKK2d+e21vdGlvbn0JCVN3aXRjaCBjYXNlIG9mIHttb3Rpb259IHRleHQuIHtub3QgaW4gVml9CisKK2d+Z34JCQkJCQkJKmd+Z34qICpnfn4qCitnfn4JCQlTd2l0Y2ggY2FzZSBvZiBjdXJyZW50IGxpbmUuIHtub3QgaW4gVml9LgorCisJCQkJCQkJKnZffioKK3tWaXN1YWx9fgkJU3dpdGNoIGNhc2Ugb2YgaGlnaGxpZ2h0ZWQgdGV4dCAoZm9yIHtWaXN1YWx9IHNlZQorCQkJfFZpc3VhbC1tb2RlfCkuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqdl9VKgore1Zpc3VhbH1VCQlNYWtlIGhpZ2hsaWdodGVkIHRleHQgdXBwZXJjYXNlIChmb3Ige1Zpc3VhbH0gc2VlCisJCQl8VmlzdWFsLW1vZGV8KS4ge25vdCBpbiBWaX0KKworCQkJCQkJCSpnVSogKnVwcGVyY2FzZSoKK2dVe21vdGlvbn0JCU1ha2Uge21vdGlvbn0gdGV4dCB1cHBlcmNhc2UuIHtub3QgaW4gVml9CisJCQlFeGFtcGxlOiA+CisJCQkJOm1hcCEgPEMtRj4gPEVzYz5nVWl3YF1hCis8CQkJVGhpcyB3b3JrcyBpbiBJbnNlcnQgbW9kZTogcHJlc3MgQ1RSTC1GIHRvIG1ha2UgdGhlCisJCQl3b3JkIGJlZm9yZSB0aGUgY3Vyc29yIHVwcGVyY2FzZS4gIEhhbmR5IHRvIHR5cGUKKwkJCXdvcmRzIGluIGxvd2VyY2FzZSBhbmQgdGhlbiBtYWtlIHRoZW0gdXBwZXJjYXNlLgorCisKK2dVZ1UJCQkJCQkJKmdVZ1UqICpnVVUqCitnVVUJCQlNYWtlIGN1cnJlbnQgbGluZSB1cHBlcmNhc2UuIHtub3QgaW4gVml9LgorCisJCQkJCQkJKnZfdSoKK3tWaXN1YWx9dQkJTWFrZSBoaWdobGlnaHRlZCB0ZXh0IGxvd2VyY2FzZSAoZm9yIHtWaXN1YWx9IHNlZQorCQkJfFZpc3VhbC1tb2RlfCkuICB7bm90IGluIFZpfQorCisJCQkJCQkJKmd1KiAqbG93ZXJjYXNlKgorZ3V7bW90aW9ufQkJTWFrZSB7bW90aW9ufSB0ZXh0IGxvd2VyY2FzZS4ge25vdCBpbiBWaX0KKworZ3VndQkJCQkJCQkqZ3VndSogKmd1dSoKK2d1dQkJCU1ha2UgY3VycmVudCBsaW5lIGxvd2VyY2FzZS4ge25vdCBpbiBWaX0uCisKKwkJCQkJCQkqZz8qICpyb3QxMyoKK2c/e21vdGlvbn0JCVJvdDEzIGVuY29kZSB7bW90aW9ufSB0ZXh0LiB7bm90IGluIFZpfQorCisJCQkJCQkJKnZfZz8qCit7VmlzdWFsfWc/CQlSb3QxMyBlbmNvZGUgdGhlIGhpZ2hsaWdodGVkIHRleHQgKGZvciB7VmlzdWFsfSBzZWUKKwkJCXxWaXN1YWwtbW9kZXwpLiAge25vdCBpbiBWaX0KKworZz9nPwkJCQkJCQkqZz9nPyogKmc/PyoKK2c/PwkJCVJvdDEzIGVuY29kZSBjdXJyZW50IGxpbmUuIHtub3QgaW4gVml9LgorCisKK0FkZGluZyBhbmQgc3VidHJhY3RpbmcgfgorCQkJCQkJCSpDVFJMLUEqCitDVFJMLUEJCQlBZGQgW2NvdW50XSB0byB0aGUgbnVtYmVyIG9yIGFscGhhYmV0aWMgY2hhcmFjdGVyIGF0CisJCQlvciBhZnRlciB0aGUgY3Vyc29yLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpDVFJMLVgqCitDVFJMLVgJCQlTdWJ0cmFjdCBbY291bnRdIGZyb20gdGhlIG51bWJlciBvciBhbHBoYWJldGljCisJCQljaGFyYWN0ZXIgYXQgb3IgYWZ0ZXIgdGhlIGN1cnNvci4gIHtub3QgaW4gVml9CisKK1RoZSBDVFJMLUEgYW5kIENUUkwtWCBjb21tYW5kcyB3b3JrIGZvciAoc2lnbmVkKSBkZWNpbWFsIG51bWJlcnMsIHVuc2lnbmVkCitvY3RhbCBhbmQgaGV4YWRlY2ltYWwgbnVtYmVycyBhbmQgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzLiAgVGhpcyBkZXBlbmRzIG9uIHRoZQorJ25yZm9ybWF0cycgb3B0aW9uLgorLSBXaGVuICducmZvcm1hdHMnIGluY2x1ZGVzICJhbHBoYSIsIFZpbSB3aWxsIGNoYW5nZSB0aGUgYWxwaGFiZXRpYyBjaGFyYWN0ZXIKKyAgdW5kZXIgb3IgYWZ0ZXIgdGhlIGN1cnNvci4gIFRoaXMgaXMgdXNlZnVsIHRvIG1ha2UgbGlzdHMgd2l0aCBhbiBhbHBoYWJldGljCisgIGluZGV4LgorLSBXaGVuICducmZvcm1hdHMnIGluY2x1ZGVzICJoZXgiLCBWaW0gYXNzdW1lcyBudW1iZXJzIHN0YXJ0aW5nIHdpdGggJzB4JyBvcgorICAnMFgnIGFyZSBoZXhhZGVjaW1hbC4gIFRoZSBjYXNlIG9mIHRoZSByaWdodG1vc3QgbGV0dGVyIGluIHRoZSBudW1iZXIKKyAgZGV0ZXJtaW5lcyB0aGUgY2FzZSBvZiB0aGUgcmVzdWx0aW5nIGhleGFkZWNpbWFsIG51bWJlci4gIElmIHRoZXJlIGlzIG5vCisgIGxldHRlciBpbiB0aGUgY3VycmVudCBudW1iZXIsIFZpbSB1c2VzIHRoZSBwcmV2aW91c2x5IGRldGVjdGVkIGNhc2UuCistIFdoZW4gJ25yZm9ybWF0cycgaW5jbHVkZXMgIm9jdGFsIiwgVmltIGNvbnNpZGVycyBudW1iZXJzIHN0YXJ0aW5nIHdpdGggYSAnMCcKKyAgdG8gYmUgb2N0YWwuICBPdGhlciBudW1iZXJzIGFyZSBkZWNpbWFsIGFuZCBtYXkgaGF2ZSBhIHByZWNlZGluZyBtaW51cyBzaWduLgorICBJZiB0aGUgY3Vyc29yIGlzIG9uIGEgbnVtYmVyLCB0aGUgY29tbWFuZHMgYXBwbHkgdG8gdGhhdCBudW1iZXI7IG90aGVyd2lzZQorICBWaW0gdXNlcyB0aGUgbnVtYmVyIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yLgorCitGb3IgbnVtYmVycyB3aXRoIGxlYWRpbmcgemVyb3MgKGluY2x1ZGluZyBhbGwgb2N0YWwgYW5kIGhleGFkZWNpbWFsIG51bWJlcnMpLAorVmltIHByZXNlcnZlcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIG51bWJlciB3aGVuIHBvc3NpYmxlLiAgQ1RSTC1BIG9uCisiMDA3NyIgcmVzdWx0cyBpbiAiMDEwMCIsIENUUkwtWCBvbiAiMHgxMDAiIHJlc3VsdHMgaW4gIjB4MGZmIi4gIE5vdGUgdGhhdAord2hlbiAnbnJmb3JtYXRzJyBpbmNsdWRlcyAib2N0YWwiLCBkZWNpbWFsIG51bWJlcnMgd2l0aCBsZWFkaW5nIHplcm9zIGFyZQoraW1wb3NzaWJsZSBiZWNhdXNlIHRoZXkgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gb2N0YWwgbnVtYmVycy4KKworVGhlIENUUkwtQSBjb21tYW5kIGlzIHZlcnkgdXNlZnVsIGluIGEgbWFjcm8uICBFeGFtcGxlOiBVc2UgdGhlIGZvbGxvd2luZworc3RlcHMgdG8gbWFrZSBhIG51bWJlcmVkIGxpc3QuCisKKzEuIENyZWF0ZSB0aGUgZmlyc3QgbGlzdCBlbnRyeSwgbWFrZSBzdXJlIGl0IHN0YXJ0cyB3aXRoIGEgbnVtYmVyLgorMi4gcWEJICAgICAtIHN0YXJ0IHJlY29yZGluZyBpbnRvIGJ1ZmZlciAnYScKKzMuIFkJICAgICAtIHlhbmsgdGhlIGVudHJ5Cis0LiBwCSAgICAgLSBwdXQgYSBjb3B5IG9mIHRoZSBlbnRyeSBiZWxvdyB0aGUgZmlyc3Qgb25lCis1LiBDVFJMLUEgICAgLSBpbmNyZW1lbnQgdGhlIG51bWJlcgorNi4gcQkgICAgIC0gc3RvcCByZWNvcmRpbmcKKzcuIDxjb3VudD5AYSAtIHJlcGVhdCB0aGUgeWFuaywgcHV0IGFuZCBpbmNyZW1lbnQgPGNvdW50PiB0aW1lcworCisKK1NISUZUSU5HIExJTkVTIExFRlQgT1IgUklHSFQJCQkJKnNoaWZ0LWxlZnQtcmlnaHQqCisKKwkJCQkJCQkqPCoKKzx7bW90aW9ufQkJU2hpZnQge21vdGlvbn0gbGluZXMgb25lICdzaGlmdHdpZHRoJyBsZWZ0d2FyZHMuCisKKwkJCQkJCQkqPDwqCis8PAkJCVNoaWZ0IFtjb3VudF0gbGluZXMgb25lICdzaGlmdHdpZHRoJyBsZWZ0d2FyZHMuCisKKwkJCQkJCQkqdl88Kgore1Zpc3VhbH1bY291bnRdPAlTaGlmdCB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgW2NvdW50XSAnc2hpZnR3aWR0aCcKKwkJCWxlZnR3YXJkcyAoZm9yIHtWaXN1YWx9IHNlZSB8VmlzdWFsLW1vZGV8KS4gIHtub3QgaW4KKwkJCVZpfQorCisJCQkJCQkJKj4qCisgPnttb3Rpb259CQlTaGlmdCB7bW90aW9ufSBsaW5lcyBvbmUgJ3NoaWZ0d2lkdGgnIHJpZ2h0d2FyZHMuCisKKwkJCQkJCQkqPj4qCisgPj4JCQlTaGlmdCBbY291bnRdIGxpbmVzIG9uZSAnc2hpZnR3aWR0aCcgcmlnaHR3YXJkcy4KKworCQkJCQkJCSp2Xz4qCit7VmlzdWFsfVtjb3VudF0+CVNoaWZ0IHRoZSBoaWdobGlnaHRlZCBsaW5lcyBbY291bnRdICdzaGlmdHdpZHRoJworCQkJcmlnaHR3YXJkcyAoZm9yIHtWaXN1YWx9IHNlZSB8VmlzdWFsLW1vZGV8KS4gIHtub3QgaW4KKwkJCVZpfQorCisJCQkJCQkJKjo8KgorOltyYW5nZV08CQlTaGlmdCBbcmFuZ2VdIGxpbmVzIG9uZSAnc2hpZnR3aWR0aCcgbGVmdC4gIFJlcGVhdCAnPCcKKwkJCWZvciBzaGlmdGluZyBtdWx0aXBsZSAnc2hpZnR3aWR0aCdzLgorCis6W3JhbmdlXTwge2NvdW50fQlTaGlmdCB7Y291bnR9IGxpbmVzIG9uZSAnc2hpZnR3aWR0aCcgbGVmdCwgc3RhcnRpbmcKKwkJCXdpdGggW3JhbmdlXSAoZGVmYXVsdCBjdXJyZW50IGxpbmUgfGNtZGxpbmUtcmFuZ2VzfCkuCisJCQlSZXBlYXQgJzwnIGZvciBzaGlmdGluZyBtdWx0aXBsZSAnc2hpZnR3aWR0aCdzLgorCis6W3JhbmdlXWxlW2Z0XSBbaW5kZW50XQlsZWZ0IGFsaWduIGxpbmVzIGluIFtyYW5nZV0uICBTZXRzIHRoZSBpbmRlbnQgaW4gdGhlCisJCQlsaW5lcyB0byBbaW5kZW50XSAoZGVmYXVsdCAwKS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOj4qCis6W3JhbmdlXT4JCVNoaWZ0IHtjb3VudH0gW3JhbmdlXSBsaW5lcyBvbmUgJ3NoaWZ0d2lkdGgnIHJpZ2h0LgorCQkJUmVwZWF0ICc+JyBmb3Igc2hpZnRpbmcgbXVsdGlwbGUgJ3NoaWZ0d2lkdGgncy4KKworOltyYW5nZV0+IHtjb3VudH0JU2hpZnQge2NvdW50fSBsaW5lcyBvbmUgJ3NoaWZ0d2lkdGgnIHJpZ2h0LCBzdGFydGluZworCQkJd2l0aCBbcmFuZ2VdIChkZWZhdWx0IGN1cnJlbnQgbGluZSB8Y21kbGluZS1yYW5nZXN8KS4KKwkJCVJlcGVhdCAnPicgZm9yIHNoaWZ0aW5nIG11bHRpcGxlICdzaGlmdHdpZHRoJ3MuCisKK1RoZSAiPiIgYW5kICI8IiBjb21tYW5kcyBhcmUgaGFuZHkgZm9yIGNoYW5naW5nIHRoZSBpbmRlbnRhdGlvbiB3aXRoaW4KK3Byb2dyYW1zLiAgVXNlIHRoZSAnc2hpZnR3aWR0aCcgb3B0aW9uIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgd2hpdGUgc3BhY2UKK3doaWNoIHRoZXNlIGNvbW1hbmRzIGluc2VydCBvciBkZWxldGUuICBOb3JtYWxseSB0aGUgJ3NoaWZ0d2lkdGgnIG9wdGlvbiBpcyA4LAorYnV0IHlvdSBjYW4gc2V0IGl0IHRvLCBzYXksIDMgdG8gbWFrZSBzbWFsbGVyIGluZGVudHMuICBUaGUgc2hpZnQgbGVmdHdhcmRzCitzdG9wcyB3aGVuIHRoZXJlIGlzIG5vIGluZGVudC4gIFRoZSBzaGlmdCByaWdodCBkb2VzIG5vdCBhZmZlY3QgZW1wdHkgbGluZXMuCisKK0lmIHRoZSAnc2hpZnRyb3VuZCcgb3B0aW9uIGlzIG9uLCB0aGUgaW5kZW50IGlzIHJvdW5kZWQgdG8gYSBtdWx0aXBsZSBvZgorJ3NoaWZ0d2lkdGgnLgorCitJZiB0aGUgJ3NtYXJ0aW5kZW50JyBvcHRpb24gaXMgb24sIG9yICdjaW5kZW50JyBpcyBvbiBhbmQgJ2NpbmtleXMnIGNvbnRhaW5zCisnIycsIHNoaWZ0IHJpZ2h0IGRvZXMgbm90IGFmZmVjdCBsaW5lcyBzdGFydGluZyB3aXRoICcjJyAodGhlc2UgYXJlIHN1cHBvc2VkCit0byBiZSBDIHByZXByb2Nlc3NvciBsaW5lcyB0aGF0IG11c3Qgc3RheSBpbiBjb2x1bW4gMSkuCisKK1doZW4gdGhlICdleHBhbmR0YWInIG9wdGlvbiBpcyBvZmYgKHRoaXMgaXMgdGhlIGRlZmF1bHQpIFZpbSB1c2VzIDxUYWI+cyBhcworbXVjaCBhcyBwb3NzaWJsZSB0byBtYWtlIHRoZSBpbmRlbnQuICBZb3UgY2FuIHVzZSAiPj48PCIgdG8gcmVwbGFjZSBhbiBpbmRlbnQKK21hZGUgb3V0IG9mIHNwYWNlcyB3aXRoIHRoZSBzYW1lIGluZGVudCBtYWRlIG91dCBvZiA8VGFiPnMgKGFuZCBhIGZldyBzcGFjZXMKK2lmIG5lY2Vzc2FyeSkuICBJZiB0aGUgJ2V4cGFuZHRhYicgb3B0aW9uIGlzIG9uLCBWaW0gdXNlcyBvbmx5IHNwYWNlcy4gIFRoZW4KK3lvdSBjYW4gdXNlICI+Pjw8IiB0byByZXBsYWNlIDxUYWI+cyBpbiB0aGUgaW5kZW50IGJ5IHNwYWNlcyAob3IgdXNlCisiOnJldGFiISIpLgorCitUbyBtb3ZlIGEgbGluZSBzZXZlcmFsICdzaGlmdHdpZHRoJ3MsIHVzZSBWaXN1YWwgbW9kZSBvciB0aGUgIjoiIGNvbW1hbmRzLgorRm9yIGV4YW1wbGU6ID4KKwlWamo0PgkJbW92ZSB0aHJlZSBsaW5lcyA0IGluZGVudHMgdG8gdGhlIHJpZ2h0CisJOjw8PAkJbW92ZSBjdXJyZW50IGxpbmUgMyBpbmRlbnRzIHRvIHRoZSBsZWZ0CisJOj4+IDUJCW1vdmUgNSBsaW5lcyAyIGluZGVudHMgdG8gdGhlIHJpZ2h0CisJOjU+PgkJbW92ZSBsaW5lIDUgMiBpbmRlbnRzIHRvIHRoZSByaWdodAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIENvbXBsZXggY2hhbmdlcwkJCQkJKmNvbXBsZXgtY2hhbmdlKgorCisJCQkJCQkJKiEqICpmaWx0ZXIqCishe21vdGlvbn17ZmlsdGVyfQlGaWx0ZXIge21vdGlvbn0gdGV4dCBsaW5lcyB0aHJvdWdoIHRoZSBleHRlcm5hbAorCQkJcHJvZ3JhbSB7ZmlsdGVyfS4KKworCQkJCQkJCSohISoKKyEhe2ZpbHRlcn0JCUZpbHRlciBbY291bnRdIGxpbmVzIHRocm91Z2ggdGhlIGV4dGVybmFsIHByb2dyYW0KKwkJCXtmaWx0ZXJ9LgorCisJCQkJCQkJKnZfISoKK3tWaXN1YWx9IXtmaWx0ZXJ9CUZpbHRlciB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgdGhyb3VnaCB0aGUgZXh0ZXJuYWwKKwkJCXByb2dyYW0ge2ZpbHRlcn0gKGZvciB7VmlzdWFsfSBzZWUgfFZpc3VhbC1tb2RlfCkuCisJCQl7bm90IGluIFZpfQorCis6e3JhbmdlfSFbIV17ZmlsdGVyfSBbIV1bYXJnXQkJCQkqOnJhbmdlISoKKwkJCUZpbHRlciB7cmFuZ2V9IGxpbmVzIHRocm91Z2ggdGhlIGV4dGVybmFsIHByb2dyYW0KKwkJCXtmaWx0ZXJ9LiAgVmltIHJlcGxhY2VzIHRoZSBvcHRpb25hbCBiYW5ncyB3aXRoIHRoZQorCQkJbGF0ZXN0IGdpdmVuIGNvbW1hbmQgYW5kIGFwcGVuZHMgdGhlIG9wdGlvbmFsIFthcmddLgorCQkJVmltIHNhdmVzIHRoZSBvdXRwdXQgb2YgdGhlIGZpbHRlciBjb21tYW5kIGluIGEKKwkJCXRlbXBvcmFyeSBmaWxlIGFuZCB0aGVuIHJlYWRzIHRoZSBmaWxlIGludG8gdGhlCisJCQlidWZmZXIuICBWaW0gdXNlcyB0aGUgJ3NoZWxscmVkaXInIG9wdGlvbiB0byByZWRpcmVjdAorCQkJdGhlIGZpbHRlciBvdXRwdXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlLgorCQkJV2hlbiB0aGUgJ1InIGZsYWcgaXMgaW5jbHVkZWQgaW4gJ2Nwb3B0aW9ucycgbWFya3MgaW4KKwkJCXRoZSBmaWx0ZXJlZCBsaW5lcyBhcmUgZGVsZXRlZCwgdW5sZXNzIHRoZQorCQkJfDprZWVwbWFya3N8IGNvbW1hbmQgaXMgdXNlZC4gIEV4YW1wbGU6ID4KKwkJCQk6a2VlcG1hcmtzICc8LCc+IXNvcnQKKzwJCQlXaGVuIHRoZSBudW1iZXIgb2YgbGluZXMgYWZ0ZXIgZmlsdGVyaW5nIGlzIGxlc3MgdGhhbgorCQkJYmVmb3JlLCBtYXJrcyBpbiB0aGUgbWlzc2luZyBsaW5lcyBhcmUgZGVsZXRlZCBhbnl3YXkuCisKKwkJCQkJCQkqPSoKKz17bW90aW9ufQkJRmlsdGVyIHttb3Rpb259IGxpbmVzIHRocm91Z2ggdGhlIGV4dGVybmFsIHByb2dyYW0KKwkJCWdpdmVuIHdpdGggdGhlICdlcXVhbHByZycgb3B0aW9uLiAgV2hlbiB0aGUgJ2VxdWFscHJnJworCQkJb3B0aW9uIGlzIGVtcHR5ICh0aGlzIGlzIHRoZSBkZWZhdWx0KSwgdXNlIHRoZQorCQkJaW50ZXJuYWwgZm9ybWF0dGluZyBmdW5jdGlvbiB8Qy1pbmRlbnRpbmd8LiAgQnV0IHdoZW4KKwkJCSdpbmRlbnRleHByJyBpcyBub3QgZW1wdHksIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkCisJCQl8aW5kZW50LWV4cHJlc3Npb258LgorCisJCQkJCQkJKj09KgorPT0JCQlGaWx0ZXIgW2NvdW50XSBsaW5lcyBsaWtlIHdpdGggPXttb3Rpb259LgorCisJCQkJCQkJKnZfPSoKK3tWaXN1YWx9PQkJRmlsdGVyIHRoZSBoaWdobGlnaHRlZCBsaW5lcyBsaWtlIHdpdGggPXttb3Rpb259LgorCQkJe25vdCBpbiBWaX0KKworQSBmaWx0ZXIgaXMgYSBwcm9ncmFtIHRoYXQgYWNjZXB0cyB0ZXh0IGF0IHN0YW5kYXJkIGlucHV0LCBjaGFuZ2VzIGl0IGluIHNvbWUKK3dheSwgYW5kIHNlbmRzIGl0IHRvIHN0YW5kYXJkIG91dHB1dC4gIFlvdSBjYW4gdXNlIHRoZSBjb21tYW5kcyBhYm92ZSB0byBzZW5kCitzb21lIHRleHQgdGhyb3VnaCBhIGZpbHRlci4gIEV4YW1wbGVzIG9mIGZpbHRlcnMgYXJlICJzb3J0Iiwgd2hpY2ggc29ydHMgbGluZXMKK2FscGhhYmV0aWNhbGx5LCBhbmQgImluZGVudCIsIHdoaWNoIGZvcm1hdHMgQyBwcm9ncmFtIGZpbGVzICh5b3UgbmVlZCBhCit2ZXJzaW9uIG9mIGluZGVudCB0aGF0IHdvcmtzIGxpa2UgYSBmaWx0ZXI7IG5vdCBhbGwgdmVyc2lvbnMgZG8pLiAgVGhlICdzaGVsbCcKK29wdGlvbiBzcGVjaWZpZXMgdGhlIHNoZWxsIFZpbSB1c2VzIHRvIGV4ZWN1dGUgdGhlIGZpbHRlciBjb21tYW5kIChTZWUgYWxzbwordGhlICdzaGVsbHR5cGUnIG9wdGlvbikuICBZb3UgY2FuIHJlcGVhdCBmaWx0ZXIgY29tbWFuZHMgd2l0aCAiLiIuICBWaW0gZG9lcworbm90IHJlY29nbml6ZSBhIGNvbW1lbnQgKHN0YXJ0aW5nIHdpdGggJyInKSBhZnRlciB0aGUgIjohIiBjb21tYW5kLgorCisKKwkJCQkJCSo6cyogKjpzdSogKjpzdWJzdGl0dXRlKgorOltyYW5nZV1zW3Vic3RpdHV0ZV0ve3BhdHRlcm59L3tzdHJpbmd9L1smXVtjXVtlXVtnXVtwXVtyXVtpXVtJXSBbY291bnRdCisJCQlGb3IgZWFjaCBsaW5lIGluIFtyYW5nZV0gcmVwbGFjZSBhIG1hdGNoIG9mIHtwYXR0ZXJufQorCQkJd2l0aCB7c3RyaW5nfS4KKwkJCUZvciB0aGUge3BhdHRlcm59IHNlZSB8cGF0dGVybnwuCisJCQl7c3RyaW5nfSBjYW4gYmUgYSBsaXRlcmFsIHN0cmluZywgb3Igc29tZXRoaW5nCisJCQlzcGVjaWFsOyBzZWUgfHN1Yi1yZXBsYWNlLXNwZWNpYWx8LgorCQkJV2hlbiBbcmFuZ2VdIGFuZCBbY291bnRdIGFyZSBvbWl0dGVkLCByZXBsYWNlIGluIHRoZQorCQkJY3VycmVudCBsaW5lIG9ubHkuCisJCQlXaGVuIFtjb3VudF0gaXMgZ2l2ZW4sIHJlcGxhY2UgaW4gW2NvdW50XSBsaW5lcywKKwkJCXN0YXJ0aW5nIHdpdGggdGhlIGxhc3QgbGluZSBpbiBbcmFuZ2VdLiAgV2hlbiBbcmFuZ2VdCisJCQlpcyBvbWl0dGVkIHN0YXJ0IGluIHRoZSBjdXJyZW50IGxpbmUuCisJCQlBbHNvIHNlZSB8Y21kbGluZS1yYW5nZXN8LgorCQkJU2VlIHw6c19mbGFnc3wgZm9yIHRoZSBmbGFncy4KKworOltyYW5nZV1zW3Vic3RpdHV0ZV0gW2NdW2VdW2ddW3BdW3JdW2ldW0ldIFtjb3VudF0KKzpbcmFuZ2VdJlsmXVtjXVtlXVtnXVtwXVtyXVtpXVtJXSBbY291bnRdCQkJKjomKgorCQkJUmVwZWF0IGxhc3QgOnN1YnN0aXR1dGUgd2l0aCBzYW1lIHNlYXJjaCBwYXR0ZXJuIGFuZAorCQkJc3Vic3RpdHV0ZSBzdHJpbmcsIGJ1dCB3aXRob3V0IHRoZSBzYW1lIGZsYWdzLiAgWW91CisJCQltYXkgYWRkIGV4dHJhIGZsYWdzIChzZWUgfDpzX2ZsYWdzfCkuCisJCQlOb3RlIHRoYXQgYWZ0ZXIgIjpzdWJzdGl0dXRlIiB0aGUgJyYnIGZsYWcgY2FuJ3QgYmUKKwkJCXVzZWQsIGl0J3MgcmVjb2duaXplZCBhcyBhIHBhdHRlcm4gc2VwYXJhdG9yLgorCQkJVGhlIHNwYWNlIGJldHdlZW4gIjpzdWJzdGl0dXRlIiBhbmQgdGhlICdjJywgJ2cnIGFuZAorCQkJJ3InIGZsYWdzIGlzbid0IHJlcXVpcmVkLCBidXQgaW4gc2NyaXB0cyBpdCdzIGEgZ29vZAorCQkJaWRlYSB0byBrZWVwIGl0IHRvIGF2b2lkIGNvbmZ1c2lvbi4KKworOltyYW5nZV1+WyZdW2NdW2VdW2ddW3BdW3JdW2ldW0ldIFtjb3VudF0JCQkqOn4qCisJCQlSZXBlYXQgbGFzdCBzdWJzdGl0dXRlIHdpdGggc2FtZSBzdWJzdGl0dXRlIHN0cmluZworCQkJYnV0IHdpdGggbGFzdCB1c2VkIHNlYXJjaCBwYXR0ZXJuLiAgVGhpcyBpcyBsaWtlCisJCQkiOiZyIi4gIFNlZSB8OnNfZmxhZ3N8IGZvciB0aGUgZmxhZ3MuCisKKwkJCQkJCSomKgorJgkJCVN5bm9ueW0gZm9yICI6cy8vfi8iIChyZXBlYXQgbGFzdCBzdWJzdGl0dXRlKS4gIE5vdGUKKwkJCXRoYXQgdGhlIGZsYWdzIGFyZSBub3QgcmVtZW1iZXJlZCwgdGh1cyBpdCBtaWdodAorCQkJYWN0dWFsbHkgd29yayBkaWZmZXJlbnRseS4gIFlvdSBjYW4gdXNlICI6JiYiIHRvIGtlZXAKKwkJCXRoZSBmbGFncy4KKworCQkJCQkJKmcmKgorZyYJCQlTeW5vbnltIGZvciAiOiVzLy9+LyYiIChyZXBlYXQgbGFzdCBzdWJzdGl0dXRlIG9uIGFsbAorCQkJbGluZXMgd2l0aCB0aGUgc2FtZSBmbGFncykuCisJCQlNbmVtb25pYzogZ2xvYmFsIHN1YnN0aXR1dGUuIHtub3QgaW4gVml9CisKKwkJCQkJCSo6c25vbWFnaWMqICo6c25vKgorOltyYW5nZV1zbm9bbWFnaWNdIC4uLglTYW1lIGFzICI6c3Vic3RpdHV0ZSIsIGJ1dCBhbHdheXMgdXNlICdub21hZ2ljJy4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCSo6c21hZ2ljKiAqOnNtKgorOltyYW5nZV1zbVthZ2ljXSAuLi4JU2FtZSBhcyAiOnN1YnN0aXR1dGUiLCBidXQgYWx3YXlzIHVzZSAnbWFnaWMnLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6c19mbGFncyoKK1RoZSBmbGFncyB0aGF0IHlvdSBjYW4gdXNlIGZvciB0aGUgc3Vic3RpdHV0ZSBjb21tYW5kczoKKworWyZdCU11c3QgYmUgdGhlIGZpcnN0IG9uZTogS2VlcCB0aGUgZmxhZ3MgZnJvbSB0aGUgcHJldmlvdXMgc3Vic3RpdHV0ZQorCWNvbW1hbmQuICBFeGFtcGxlczogPgorCQk6JiYKKwkJOnMvdGhpcy90aGF0LyYKKzwJTm90ZSB0aGF0ICI6cyIgYW5kICI6JiIgZG9uJ3Qga2VlcCB0aGUgZmxhZ3MuCisJe25vdCBpbiBWaX0KKworW2NdCUNvbmZpcm0gZWFjaCBzdWJzdGl0dXRpb24uICBWaW0gaGlnaGxpZ2h0cyB0aGUgbWF0Y2hpbmcgc3RyaW5nICh3aXRoCisJfGhsLUluY1NlYXJjaHwpLiAgWW91IGNhbiB0eXBlOgkJCQkqOnNfYyoKKwkgICAgJ3knCSAgICB0byBzdWJzdGl0dXRlIHRoaXMgbWF0Y2gKKwkgICAgJ2wnCSAgICB0byBzdWJzdGl0dXRlIHRoaXMgbWF0Y2ggYW5kIHRoZW4gcXVpdCAoImxhc3QiKQorCSAgICAnbicJICAgIHRvIHNraXAgdGhpcyBtYXRjaAorCSAgICA8RXNjPiAgIHRvIHF1aXQgc3Vic3RpdHV0aW5nCisJICAgICdhJwkgICAgdG8gc3Vic3RpdHV0ZSB0aGlzIGFuZCBhbGwgcmVtYWluaW5nIG1hdGNoZXMge25vdCBpbiBWaX0KKwkgICAgJ3EnCSAgICB0byBxdWl0IHN1YnN0aXR1dGluZyB7bm90IGluIFZpfQorCSAgICBDVFJMLUUgIHRvIHNjcm9sbCB0aGUgc2NyZWVuIHVwIHtub3QgaW4gVmksIG5vdCBhdmFpbGFibGUgd2hlbgorCQkJY29tcGlsZWQgd2l0aG91dCB0aGUgK2luc2VydF9leHBhbmQgZmVhdHVyZX0KKwkgICAgQ1RSTC1ZICB0byBzY3JvbGwgdGhlIHNjcmVlbiBkb3duIHtub3QgaW4gVmksIG5vdCBhdmFpbGFibGUgd2hlbgorCQkJY29tcGlsZWQgd2l0aG91dCB0aGUgK2luc2VydF9leHBhbmQgZmVhdHVyZX0KKwlJZiB0aGUgJ2VkY29tcGF0aWJsZScgb3B0aW9uIGlzIG9uLCBWaW0gcmVtZW1iZXJzIHRoZSBbY10gZmxhZyBhbmQKKwl0b2dnbGVzIGl0IGVhY2ggdGltZSB5b3UgdXNlIGl0LCBidXQgcmVzZXRzIGl0IHdoZW4geW91IGdpdmUgYSBuZXcKKwlzZWFyY2ggcGF0dGVybi4KKwl7bm90IGluIFZpOiBoaWdobGlnaHRpbmcgb2YgdGhlIG1hdGNoLCBvdGhlciByZXNwb25zZXMgdGhhbiAneScgb3IgJ24nfQorCitbZV0gICAgIFdoZW4gdGhlIHNlYXJjaCBwYXR0ZXJuIGZhaWxzLCBkbyBub3QgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZSBhbmQsIGluCisJcGFydGljdWxhciwgY29udGludWUgaW4gbWFwcyBhcyBpZiBubyBlcnJvciBvY2N1cnJlZC4gIFRoaXMgaXMgbW9zdAorCXVzZWZ1bCB0byBwcmV2ZW50IHRoZSAiTm8gbWF0Y2giIGVycm9yIGZyb20gYnJlYWtpbmcgYSBtYXBwaW5nLiAgVmltCisJZG9lcyBub3Qgc3VwcHJlc3MgdGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlcywgaG93ZXZlcjoKKwkJUmVndWxhciBleHByZXNzaW9ucyBjYW4ndCBiZSBkZWxpbWl0ZWQgYnkgbGV0dGVycworCQlcIHNob3VsZCBiZSBmb2xsb3dlZCBieSAvLCA/IG9yICYKKwkJTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24KKwkJVHJhaWxpbmcgY2hhcmFjdGVycworCQlJbnRlcnJ1cHRlZAorCXtub3QgaW4gVml9CisKK1tnXQlSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgbGluZS4gIFdpdGhvdXQgdGhpcyBhcmd1bWVudCwKKwlyZXBsYWNlbWVudCBvY2N1cnMgb25seSBmb3IgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gZWFjaCBsaW5lLiAgSWYKKwl0aGUgJ2VkY29tcGF0aWJsZScgb3B0aW9uIGlzIG9uLCBWaW0gcmVtZW1iZXJzIHRoaXMgZmxhZyBhbmQgdG9nZ2xlcworCWl0IGVhY2ggdGltZSB5b3UgdXNlIGl0LCBidXQgcmVzZXRzIGl0IHdoZW4geW91IGdpdmUgYSBuZXcgc2VhcmNoCisJcGF0dGVybi4gIElmIHRoZSAnZ2RlZmF1bHQnIG9wdGlvbiBpcyBvbiwgdGhpcyBmbGFnIGlzIG9uIGJ5IGRlZmF1bHQKKwlhbmQgdGhlIFtnXSBhcmd1bWVudCBzd2l0Y2hlcyBpdCBvZmYuCisKK1tpXQlJZ25vcmUgY2FzZSBmb3IgdGhlIHBhdHRlcm4uICBUaGUgJ2lnbm9yZWNhc2UnIGFuZCAnc21hcnRjYXNlJyBvcHRpb25zCisJYXJlIG5vdCB1c2VkLgorCXtub3QgaW4gVml9CisKK1tJXQlEb24ndCBpZ25vcmUgY2FzZSBmb3IgdGhlIHBhdHRlcm4uICBUaGUgJ2lnbm9yZWNhc2UnIGFuZCAnc21hcnRjYXNlJworCW9wdGlvbnMgYXJlIG5vdCB1c2VkLgorCXtub3QgaW4gVml9CisKK1twXQlQcmludCB0aGUgbGluZSBjb250YWluaW5nIHRoZSBsYXN0IHN1YnN0aXR1dGUuCisJe25vdCBpbiBWaX0KKworW3JdCU9ubHkgdXNlZnVsIGluIGNvbWJpbmF0aW9uIHdpdGggIjomIiBvciAiOnMiIHdpdGhvdXQgYXJndW1lbnRzLiAgIjomciIKKwl3b3JrcyB0aGUgc2FtZSB3YXkgYXMgIjp+IjogIFdoZW4gdGhlIHNlYXJjaCBwYXR0ZXJuIGlzIGVtcHR5LCB1c2UgdGhlCisJcHJldmlvdXNseSB1c2VkIHNlYXJjaCBwYXR0ZXJuIGluc3RlYWQgb2YgdGhlIHNlYXJjaCBwYXR0ZXJuIGZyb20gdGhlCisJbGFzdCBzdWJzdGl0dXRlIG9yICI6Z2xvYmFsIi4gIElmIHRoZSBsYXN0IGNvbW1hbmQgdGhhdCBkaWQgYSBzZWFyY2gKKwl3YXMgYSBzdWJzdGl0dXRlIG9yICI6Z2xvYmFsIiwgdGhlcmUgaXMgbm8gZWZmZWN0LiAgSWYgdGhlIGxhc3QKKwljb21tYW5kIHdhcyBhIHNlYXJjaCBjb21tYW5kIHN1Y2ggYXMgIi8iLCB1c2UgdGhlIHBhdHRlcm4gZnJvbSB0aGF0CisJY29tbWFuZC4KKwlGb3IgIjpzIiB3aXRoIGFuIGFyZ3VtZW50IHRoaXMgYWxyZWFkeSBoYXBwZW5zOiA+CisJCTpzL2JsdWUvcmVkLworCQkvZ3JlZW4KKwkJOnMvL3JlZC8gICBvciAgOn4gICBvciAgOiZyCis8CVRoZSBsYXN0IGNvbW1hbmRzIHdpbGwgcmVwbGFjZSAiZ3JlZW4iIHdpdGggInJlZCIuID4KKwkJOnMvYmx1ZS9yZWQvCisJCS9ncmVlbgorCQk6JgorPAlUaGUgbGFzdCBjb21tYW5kIHdpbGwgcmVwbGFjZSAiYmx1ZSIgd2l0aCAicmVkIi4KKwl7bm90IGluIFZpfQorCitOb3RlIHRoYXQgdGhlcmUgaXMgbm8gZmxhZyB0byBjaGFuZ2UgdGhlICJtYWdpY25lc3MiIG9mIHRoZSBwYXR0ZXJuLiAgQQorZGlmZmVyZW50IGNvbW1hbmQgaXMgdXNlZCBpbnN0ZWFkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IHRoZSBmbGFncyBjYW4gb25seSBiZQorZm91bmQgYnkgc2tpcHBpbmcgdGhlIHBhdHRlcm4sIGFuZCBpbiBvcmRlciB0byBza2lwIHRoZSBwYXR0ZXJuIHRoZQorIm1hZ2ljbmVzcyIgbXVzdCBiZSBrbm93bi4gIENhdGNoIDIyIQorCitJZiB0aGUge3BhdHRlcm59IGZvciB0aGUgc3Vic3RpdHV0ZSBjb21tYW5kIGlzIGVtcHR5LCB0aGUgY29tbWFuZCB1c2VzIHRoZQorcGF0dGVybiBmcm9tIHRoZSBsYXN0IHN1YnN0aXR1dGUgb3IgIjpnbG9iYWwiIGNvbW1hbmQuICBXaXRoIHRoZSBbcl0gZmxhZywgdGhlCitjb21tYW5kIHVzZXMgdGhlIHBhdHRlcm4gZnJvbSB0aGUgbGFzdCBzdWJzdGl0dXRlLCAiOmdsb2JhbCIsIG9yIHNlYXJjaAorY29tbWFuZC4KKworRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBWaSB0aGVzZSB0d28gZXhjZXB0aW9ucyBhcmUgYWxsb3dlZDoKKyJcL3tzdHJpbmd9LyIgYW5kICJcP3tzdHJpbmd9PyIgZG8gdGhlIHNhbWUgYXMgIi8ve3N0cmluZ30vciIuCisiXCZ7c3RyaW5nfSYiIGRvZXMgdGhlIHNhbWUgYXMgIi8ve3N0cmluZ30vIi4KKwkJCQkJCQkqRTE0NioKK0luc3RlYWQgb2YgdGhlICcvJyB3aGljaCBzdXJyb3VuZHMgdGhlIHBhdHRlcm4gYW5kIHJlcGxhY2VtZW50IHN0cmluZywgeW91CitjYW4gdXNlIGFueSBvdGhlciBjaGFyYWN0ZXIsIGJ1dCBub3QgYW4gYWxwaGFudW1lcmljIGNoYXJhY3RlciwgJ1wnLCAnIicgb3IKKyd8Jy4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgYSAnLycgaW4gdGhlIHNlYXJjaCBwYXR0ZXJuIG9yCityZXBsYWNlbWVudCBzdHJpbmcuICBFeGFtcGxlOiA+CisJOnMrLysvLysKKworRm9yIHRoZSBkZWZpbml0aW9uIG9mIGEgcGF0dGVybiwgc2VlIHxwYXR0ZXJufC4KKworCQkJCQkqc3ViLXJlcGxhY2Utc3BlY2lhbCogKjpzXD0qCitXaGVuIHRoZSB7c3RyaW5nfSBzdGFydHMgd2l0aCAiXD0iIGl0IGlzIGV2YWx1YXRlZCBhcyBhbiBleHByZXNzaW9uLCBzZWUKK3xzdWItcmVwbGFjZS1leHByZXNzaW9ufC4gIE90aGVyd2lzZSB0aGVzZSBjaGFyYWN0ZXJzIGluIHtzdHJpbmd9IGhhdmUgYQorc3BlY2lhbCBtZWFuaW5nOgorCittYWdpYwlub21hZ2ljCSAgYWN0aW9uICAgIH4KKyAgJgkgIFwmCSAgcmVwbGFjZWQgd2l0aCB0aGUgd2hvbGUgbWF0Y2hlZCBwYXR0ZXJuCSAgICAgKnMvXCYqCisgXCYJICAgJgkgIHJlcGxhY2VkIHdpdGggJgorICAgICAgXDAJICByZXBsYWNlZCB3aXRoIHRoZSB3aG9sZSBtYXRjaGVkIHBhdHRlcm4JICAgKlwwKiAqcy9cMCoKKyAgICAgIFwxCSAgcmVwbGFjZWQgd2l0aCB0aGUgbWF0Y2hlZCBwYXR0ZXJuIGluIHRoZSBmaXJzdAorCQkgIHBhaXIgb2YgKCkJCQkJCSAgICAgKnMvXDEqCisgICAgICBcMgkgIHJlcGxhY2VkIHdpdGggdGhlIG1hdGNoZWQgcGF0dGVybiBpbiB0aGUgZmlyc3QKKwkJICBwYWlyIG9mICgpCQkJCQkgICAgICpzL1wyKgorICAgICAgLi4JICAuLgkJCQkJCSAgICAgKnMvXDMqCisgICAgICBcOQkgIHJlcGxhY2VkIHdpdGggdGhlIG1hdGNoZWQgcGF0dGVybiBpbiB0aGUgbmludGgKKwkJICBwYWlyIG9mICgpCQkJCQkgICAgICpzL1w5KgorICB+CSAgXH4JICByZXBsYWNlZCB3aXRoIHRoZSB7c3RyaW5nfSBvZiB0aGUgcHJldmlvdXMKKwkJICBzdWJzdGl0dXRlCQkJCQkgICAgICpzfioKKyBcfgkgICB+CSAgcmVwbGFjZWQgd2l0aCB+CQkJCSAgICAgKnMvXH4qCisgICAgICBcdQkgIG5leHQgY2hhcmFjdGVyIG1hZGUgdXBwZXJjYXNlCQkJICAgICAqcy9cdSoKKyAgICAgIFxVCSAgZm9sbG93aW5nIGNoYXJhY3RlcnMgbWFkZSB1cHBlcmNhc2UsIHVudGlsIFxFICAgICAgKnMvXFUqCisgICAgICBcbAkgIG5leHQgY2hhcmFjdGVyIG1hZGUgbG93ZXJjYXNlCQkJICAgICAqcy9cbCoKKyAgICAgIFxMCSAgZm9sbG93aW5nIGNoYXJhY3RlcnMgbWFkZSBsb3dlcmNhc2UsIHVudGlsIFxFICAgICAgKnMvXEwqCisgICAgICBcZQkgIGVuZCBvZiBcdSwgXFUsIFxsIGFuZCBcTCAoTk9URTogbm90IDxFc2M+ISkJICAgICAqcy9cZSoKKyAgICAgIFxFCSAgZW5kIG9mIFx1LCBcVSwgXGwgYW5kIFxMCQkJICAgICAqcy9cRSoKKyAgICAgIDxDUj4JICBzcGxpdCBsaW5lIGluIHR3byBhdCB0aGlzIHBvaW50CisJCSAgKFR5cGUgdGhlIDxDUj4gYXMgQ1RSTC1WIDxFbnRlcj4pCQkgICAgICpzPENSPioKKyAgICAgIFxyCSAgaWRlbQkJCQkJCSAgICAgKnMvXHIqCisgICAgICBcPENSPgkgIGluc2VydCBhIGNhcnJpYWdlLXJldHVybiAoQ1RSTC1NKQorCQkgIChUeXBlIHRoZSA8Q1I+IGFzIENUUkwtViA8RW50ZXI+KQkJICAgICAqcy9cPENSPioKKyAgICAgIFxuCSAgaW5zZXJ0IGEgPE5MPiAoPE5VTD4gaW4gdGhlIGZpbGUpCisJCSAgKGRvZXMgTk9UIGJyZWFrIHRoZSBsaW5lKQkJCSAgICAgKnMvXG4qCisgICAgICBcYgkgIGluc2VydCBhIDxCUz4JCQkJCSAgICAgKnMvXGIqCisgICAgICBcdAkgIGluc2VydCBhIDxUYWI+CQkJCSAgICAgKnMvXHQqCisgICAgICBcXAkgIGluc2VydCBhIHNpbmdsZSBiYWNrc2xhc2gJCQkgICAgICpzL1xcKgorICAgICAgXHgJICB3aGVyZSB4IGlzIGFueSBjaGFyYWN0ZXIgbm90IG1lbnRpb25lZCBhYm92ZToKKwkJICBSZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbgorCitFeGFtcGxlczogPgorICA6cy9hXHxiL3h4eFwweHh4L2cJCSBtb2RpZmllcyAiYSBiIgkgICAgIHRvICJ4eHhheHh4IHh4eGJ4eHgiCisgIDpzL1woW2FiY11cKVwoW2VmZ11cKS9cMlwxL2cJIG1vZGlmaWVzICJhZiBmYSBiZyIgdG8gImZhIGZhIGdiIgorICA6cy9hYmNkZS9hYmNeTWRlLwkJIG1vZGlmaWVzICJhYmNkZSIgICAgdG8gImFiYyIsICJkZSIgKHR3byBsaW5lcykKKyAgOnMvJC9cXk0vCQkJIG1vZGlmaWVzICJhYmNkZSIgICAgdG8gImFiY2RlXk0iCisKK05vdGU6IEluIHByZXZpb3VzIHZlcnNpb25zIENUUkwtViB3YXMgaGFuZGxlZCBpbiBhIHNwZWNpYWwgd2F5LiAgU2luY2UgdGhpcyBpcworbm90IFZpIGNvbXBhdGlibGUsIHRoaXMgd2FzIHJlbW92ZWQuICBVc2UgYSBiYWNrc2xhc2ggaW5zdGVhZC4KKworY29tbWFuZAkJdGV4dAlyZXN1bHQgfgorOnMvYWEvYV5NYS8JYWEJYTxsaW5lLWJyZWFrPmEKKzpzL2FhL2FcXk1hLwlhYQlhXk1hCis6cy9hYS9hXFxeTWEvCWFhCWFcPGxpbmUtYnJlYWs+YQorCisoeW91IG5lZWQgdG8gdHlwZSBDVFJMLVYgPENSPiB0byBnZXQgYSBeTSBoZXJlKQorCitUaGUgbnVtYmVyaW5nIG9mICJcMSIsICJcMiIgZXRjLiBpcyBkb25lIGJhc2VkIG9uIHdoaWNoICJcKCIgY29tZXMgZmlyc3QgaW4KK3RoZSBwYXR0ZXJuIChnb2luZyBsZWZ0IHRvIHJpZ2h0KS4gIFdoZW4gYSBwYXJlbnRoZXNlcyBncm91cCBtYXRjaGVzIHNldmVyYWwKK3RpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkIGZvciAiXDEiLCAiXDIiLCBldGMuICBFeGFtcGxlOiA+CisgIDpzL1woXChhW2EtZF0gXCkqXCkvXDIvICAgICAgbW9kaWZpZXMgImFhIGFiIHgiIHRvICJhYiB4IgorCitXaGVuIHVzaW5nIHBhcmVudGhlc2VzIGluIGNvbWJpbmF0aW9uIHdpdGggJ3wnLCBsaWtlIGluIFwoW2FiXVwpXHxcKFtjZF1cKSwKK2VpdGhlciB0aGUgZmlyc3Qgb3Igc2Vjb25kIHBhdHRlcm4gaW4gcGFyZW50aGVzZXMgZGlkIG5vdCBtYXRjaCwgc28gZWl0aGVyCitcMSBvciBcMiBpcyBlbXB0eS4gIEV4YW1wbGU6ID4KKyAgOnMvXChbYWJdXClcfFwoW2NkXVwpL1wxeC9nICAgbW9kaWZpZXMgImEgYiBjIGQiICB0byAiYXggYnggeCB4IgorPAorCitTdWJzdGl0dXRlIHdpdGggYW4gZXhwcmVzc2lvbgkJCSpzdWItcmVwbGFjZS1leHByZXNzaW9uKgorCitXaGVuIHRoZSBzdWJzdGl0dXRlIHN0cmluZyBzdGFydHMgd2l0aCAiXD0iIHRoZSByZW1haW5lciBpcyBpbnRlcnByZXRlZCBhcyBhbgorZXhwcmVzc2lvbi4gIFRoaXMgZG9lcyBub3Qgd29yayByZWN1cnNpdmVseTogYSBzdWJzdGl0dXRlKCkgZnVuY3Rpb24gaW5zaWRlCit0aGUgZXhwcmVzc2lvbiBjYW5ub3QgdXNlICJcPSIgZm9yIHRoZSBzdWJzdGl0dXRlIHN0cmluZy4KKworVGhlIHNwZWNpYWwgbWVhbmluZyBmb3IgY2hhcmFjdGVycyBhcyBtZW50aW9uZWQgYXQgfHN1Yi1yZXBsYWNlLXNwZWNpYWx8IGRvZXMKK25vdCBhcHBseSBleGNlcHQgIjxDUj4iLCAiXDxDUj4iIGFuZCAiXFwiLiAgVGh1cyBpbiB0aGUgcmVzdWx0IG9mIHRoZQorZXhwcmVzc2lvbiB5b3UgbmVlZCB0byB1c2UgdHdvIGJhY2tzbGFzaGVzIGdldCBvbmUsIHB1dCBhIGJhY2tzbGFzaCBiZWZvcmUgYQorPENSPiB5b3Ugd2FudCB0byBpbnNlcnQgYW5kIHVzZSBhIDxDUj4gd2l0aG91dCBhIGJhY2tzbGFzaCB3aGVyZSB5b3Ugd2FudCB0bworYnJlYWsgdGhlIGxpbmUuCisKK0ZvciBjb252ZW5pZW5jZSBhIDxOTD4gY2hhcmFjdGVyIGlzIGFsc28gdXNlZCBhcyBhIGxpbmUgYnJlYWsuICBQcmVwZW5kIGEKK2JhY2tzbGFzaCB0byBnZXQgYSByZWFsIDxOTD4gY2hhcmFjdGVyICh3aGljaCB3aWxsIGJlIGEgTlVMIGluIHRoZSBmaWxlKS4KKworVGhlIHdob2xlIG1hdGNoZWQgdGV4dCBjYW4gYmUgYWNjZXNzZWQgd2l0aCAic3VibWF0Y2goMCkiLiAgVGhlIHRleHQgbWF0Y2hlZAord2l0aCB0aGUgZmlyc3QgcGFpciBvZiAoKSB3aXRoICJzdWJtYXRjaCgxKSIuICBMaWtld2lzZSBmb3IgZnVydGhlcgorc3ViLW1hdGNoZXMgaW4gKCkuCisKK0JlIGNhcmVmdWw6IFRoZSBzZXBhcmF0aW9uIGNoYXJhY3RlciBtdXN0IG5vdCBhcHBlYXIgaW4gdGhlIGV4cHJlc3Npb24hCitDb25zaWRlciB1c2luZyBhIGNoYXJhY3RlciBsaWtlICJAIiBvciAiOiIuICBUaGVyZSBpcyBubyBwcm9ibGVtIGlmIHRoZSByZXN1bHQKK29mIHRoZSBleHByZXNzaW9uIGNvbnRhaW5zIHRoZSBzZXBhcmF0aW9uIGNoYXJhY3Rlci4KKworRXhhbXBsZTogPgorCTpzQFxuQFw9IlxyIiAuIGV4cGFuZCgiJEhPTUUiKSAuICJcciJACitUaGlzIHJlcGxhY2VzIGFuIGVuZC1vZi1saW5lIHdpdGggYSBuZXcgbGluZSBjb250YWluaW5nIHRoZSB2YWx1ZSBvZiAkSE9NRS4KKworCisJCQkJCQkqOnBybyogKjpwcm9tcHRmaW5kKgorOnByb21wdGZbaW5kXSBbc3RyaW5nXQorCQkJUHV0IHVwIGEgU2VhcmNoIGRpYWxvZy4gIFdoZW4gW3N0cmluZ10gaXMgZ2l2ZW4sIGl0IGlzCisJCQl1c2VkIGFzIHRoZSBpbml0aWFsIHNlYXJjaCBzdHJpbmcuCisJCQl7b25seSBmb3IgV2luMzIsIE1vdGlmIGFuZCBHVEsgR1VJfQorCisJCQkJCQkqOnByb21wdHIqICo6cHJvbXB0cmVwbCoKKzpwcm9tcHRyW2VwbF0gW3N0cmluZ10KKwkJCVB1dCB1cCBhIFNlYXJjaC9SZXBsYWNlIGRpYWxvZy4gIFdoZW4gW3N0cmluZ10gaXMKKwkJCWdpdmVuLCBpdCBpcyB1c2VkIGFzIHRoZSBpbml0aWFsIHNlYXJjaCBzdHJpbmcuCisJCQl7b25seSBmb3IgV2luMzIsIE1vdGlmIGFuZCBHVEsgR1VJfQorCisJCQkJCQkJKjpyZXQqICo6cmV0YWIqCis6W3JhbmdlXXJldFthYl1bIV0gW25ld190YWJzdG9wXQorCQkJUmVwbGFjZSBhbGwgc2VxdWVuY2VzIG9mIHdoaXRlLXNwYWNlIGNvbnRhaW5pbmcgYQorCQkJPFRhYj4gd2l0aCBuZXcgc3RyaW5ncyBvZiB3aGl0ZS1zcGFjZSB1c2luZyB0aGUgbmV3CisJCQl0YWJzdG9wIHZhbHVlIGdpdmVuLiAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgbmV3CisJCQl0YWJzdG9wIHNpemUgb3IgaXQgaXMgemVybywgVmltIHVzZXMgdGhlIGN1cnJlbnQgdmFsdWUKKwkJCW9mICd0YWJzdG9wJy4KKwkJCVRoZSBjdXJyZW50IHZhbHVlIG9mICd0YWJzdG9wJyBpcyBhbHdheXMgdXNlZCB0bworCQkJY29tcHV0ZSB0aGUgd2lkdGggb2YgZXhpc3RpbmcgdGFicy4KKwkJCVdpdGggISwgVmltIGFsc28gcmVwbGFjZXMgc3RyaW5ncyBvZiBvbmx5IG5vcm1hbAorCQkJc3BhY2VzIHdpdGggdGFicyB3aGVyZSBhcHByb3ByaWF0ZS4KKwkJCVdpdGggJ2V4cGFuZHRhYicgb24sIFZpbSByZXBsYWNlcyBhbGwgdGFicyB3aXRoIHRoZQorCQkJYXBwcm9wcmlhdGUgbnVtYmVyIG9mIHNwYWNlcy4KKwkJCVRoaXMgY29tbWFuZCBzZXRzICd0YWJzdG9wJyB0byB0aGUgbmV3IHZhbHVlIGdpdmVuLAorCQkJYW5kIGlmIHBlcmZvcm1lZCBvbiB0aGUgd2hvbGUgZmlsZSwgd2hpY2ggaXMgZGVmYXVsdCwKKwkJCXNob3VsZCBub3QgbWFrZSBhbnkgdmlzaWJsZSBjaGFuZ2UuCisJCQlDYXJlZnVsOiBUaGlzIGNvbW1hbmQgbW9kaWZpZXMgYW55IDxUYWI+IGNoYXJhY3RlcnMKKwkJCWluc2lkZSBvZiBzdHJpbmdzIGluIGEgQyBwcm9ncmFtLiAgVXNlICJcdCIgdG8gYXZvaWQKKwkJCXRoaXMgKHRoYXQncyBhIGdvb2QgaGFiaXQgYW55d2F5KS4KKwkJCSI6cmV0YWIhIiBtYXkgYWxzbyBjaGFuZ2UgYSBzZXF1ZW5jZSBvZiBzcGFjZXMgYnkKKwkJCTxUYWI+IGNoYXJhY3RlcnMsIHdoaWNoIGNhbiBtZXNzIHVwIGEgcHJpbnRmKCkuCisJCQl7bm90IGluIFZpfQorCQkJTm90IGF2YWlsYWJsZSB3aGVuIHwrZXhfZXh0cmF8IGZlYXR1cmUgd2FzIGRpc2FibGVkIGF0CisJCQljb21waWxlIHRpbWUuCisKKwkJCQkJCQkqcmV0YWItZXhhbXBsZSoKK0V4YW1wbGUgZm9yIHVzaW5nIGF1dG9jb21tYW5kcyBhbmQgIjpyZXRhYiIgdG8gZWRpdCBhIGZpbGUgd2hpY2ggaXMgc3RvcmVkCit3aXRoIHRhYnN0b3BzIGF0IDggYnV0IGVkaXRlZCB3aXRoIHRhYnN0b3BzIHNldCBhdCA0LiAgV2FybmluZzogd2hpdGUgc3BhY2UKK2luc2lkZSBvZiBzdHJpbmdzIGNhbiBjaGFuZ2UhICBBbHNvIHNlZSAnc29mdHRhYnN0b3AnIG9wdGlvbi4gPgorCisgIDphdXRvIEJ1ZlJlYWRQb3N0CSoueHgJcmV0YWIhIDQKKyAgOmF1dG8gQnVmV3JpdGVQcmUJKi54eAlyZXRhYiEgOAorICA6YXV0byBCdWZXcml0ZVBvc3QJKi54eAlyZXRhYiEgNAorICA6YXV0byBCdWZOZXdGaWxlCSoueHgJc2V0IHRzPTQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBDb3B5aW5nIGFuZCBtb3ZpbmcgdGV4dAkJCQkqY29weS1tb3ZlKgorCisJCQkJCQkJKnF1b3RlKgorInthLXpBLVowLTkuJSM6LSJ9CVVzZSByZWdpc3RlciB7YS16QS1aMC05LiUjOi0ifSBmb3IgbmV4dCBkZWxldGUsIHlhbmsKKwkJCW9yIHB1dCAodXNlIHVwcGVyY2FzZSBjaGFyYWN0ZXIgdG8gYXBwZW5kIHdpdGgKKwkJCWRlbGV0ZSBhbmQgeWFuaykgKHsuJSM6fSBvbmx5IHdvcmsgd2l0aCBwdXQpLgorCisJCQkJCQkJKjpyZWcqICo6cmVnaXN0ZXJzKgorOnJlZ1tpc3RlcnNdCQlEaXNwbGF5IHRoZSBjb250ZW50cyBvZiBhbGwgbnVtYmVyZWQgYW5kIG5hbWVkCisJCQlyZWdpc3RlcnMuICB7bm90IGluIFZpfQorCis6cmVnW2lzdGVyc10ge2FyZ30JRGlzcGxheSB0aGUgY29udGVudHMgb2YgdGhlIG51bWJlcmVkIGFuZCBuYW1lZAorCQkJcmVnaXN0ZXJzIHRoYXQgYXJlIG1lbnRpb25lZCBpbiB7YXJnfS4gIEZvciBleGFtcGxlOiA+CisJCQkJOmRpcyAxYQorPAkJCXRvIGRpc3BsYXkgcmVnaXN0ZXJzICcxJyBhbmQgJ2EnLiAgU3BhY2VzIGFyZSBhbGxvd2VkCisJCQlpbiB7YXJnfS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmRpKiAqOmRpc3BsYXkqCis6ZGlbc3BsYXldIFthcmddCVNhbWUgYXMgOnJlZ2lzdGVycy4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqeSogKnlhbmsqCitbInhdeXttb3Rpb259CQlZYW5rIHttb3Rpb259IHRleHQgW2ludG8gcmVnaXN0ZXIgeF0uICBXaGVuIG5vCisJCQljaGFyYWN0ZXJzIGFyZSB0byBiZSB5YW5rZWQgKGUuZy4sICJ5MCIgaW4gY29sdW1uIDEpLAorCQkJdGhpcyBpcyBhbiBlcnJvciB3aGVuICdjcG9wdGlvbnMnIGluY2x1ZGVzIHRoZSAnRScKKwkJCWZsYWcuCisKKwkJCQkJCQkqeXkqCitbInhdeXkJCQlZYW5rIFtjb3VudF0gbGluZXMgW2ludG8gcmVnaXN0ZXIgeF0gfGxpbmV3aXNlfC4KKworCQkJCQkJCSpZKgorWyJ4XVkJCQl5YW5rIFtjb3VudF0gbGluZXMgW2ludG8gcmVnaXN0ZXIgeF0gKHN5bm9ueW0gZm9yCisJCQl5eSwgfGxpbmV3aXNlfCkuICBJZiB5b3UgbGlrZSAiWSIgdG8gd29yayBmcm9tIHRoZQorCQkJY3Vyc29yIHRvIHRoZSBlbmQgb2YgbGluZSAod2hpY2ggaXMgbW9yZSBsb2dpY2FsLAorCQkJYnV0IG5vdCBWaS1jb21wYXRpYmxlKSB1c2UgIjptYXAgWSB5JCIuCisKKwkJCQkJCQkqdl95Kgore1Zpc3VhbH1bInhdeQkJWWFuayB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBbaW50byByZWdpc3RlciB4XSAoZm9yCisJCQl7VmlzdWFsfSBzZWUgfFZpc3VhbC1tb2RlfCkuICB7bm90IGluIFZpfQorCisJCQkJCQkJKnZfWSoKK3tWaXN1YWx9WyJ4XVkJCVlhbmsgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIFtpbnRvIHJlZ2lzdGVyIHhdIChmb3IKKwkJCXtWaXN1YWx9IHNlZSB8VmlzdWFsLW1vZGV8KS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnkqICo6eWFuayoKKzpbcmFuZ2VdeVthbmtdIFt4XQlZYW5rIFtyYW5nZV0gbGluZXMgW2ludG8gcmVnaXN0ZXIgeF0uCisKKzpbcmFuZ2VdeVthbmtdIFt4XSB7Y291bnR9CisJCQlZYW5rIHtjb3VudH0gbGluZXMsIHN0YXJ0aW5nIHdpdGggbGFzdCBsaW5lIG51bWJlcgorCQkJaW4gW3JhbmdlXSAoZGVmYXVsdDogY3VycmVudCBsaW5lIHxjbWRsaW5lLXJhbmdlc3wpLAorCQkJW2ludG8gcmVnaXN0ZXIgeF0uCisKKwkJCQkJCQkqcCogKnB1dCogKkUzNTMqCitbInhdcAkJCVB1dCB0aGUgdGV4dCBbZnJvbSByZWdpc3RlciB4XSBhZnRlciB0aGUgY3Vyc29yCisJCQlbY291bnRdIHRpbWVzLiAge1ZpOiBubyBjb3VudH0KKworCQkJCQkJCSpQKgorWyJ4XVAJCQlQdXQgdGhlIHRleHQgW2Zyb20gcmVnaXN0ZXIgeF0gYmVmb3JlIHRoZSBjdXJzb3IKKwkJCVtjb3VudF0gdGltZXMuICB7Vmk6IG5vIGNvdW50fQorCisJCQkJCQkJKjxNaWRkbGVNb3VzZT4qCitbInhdPE1pZGRsZU1vdXNlPglQdXQgdGhlIHRleHQgZnJvbSBhIHJlZ2lzdGVyIGJlZm9yZSB0aGUgY3Vyc29yIFtjb3VudF0KKwkJCXRpbWVzLiAgVXNlcyB0aGUgIiogcmVnaXN0ZXIsIHVubGVzcyBhbm90aGVyIGlzCisJCQlzcGVjaWZpZWQuICBVc2luZyB0aGUgbW91c2Ugb25seSB3b3JrcyB3aGVuICdtb3VzZScKKwkJCWNvbnRhaW5zICduJyBvciAnYScuCisJCQl7bm90IGluIFZpfQorCQkJSWYgeW91IGhhdmUgYSBzY3JvbGx3aGVlbCBhbmQgb2Z0ZW4gYWNjaWRlbnRhbGx5IHBhc3RlCisJCQl0ZXh0LCB5b3UgY2FuIHVzZSB0aGVzZSBtYXBwaW5ncyB0byBkaXNhYmxlIHRoZQorCQkJcGFzdGluZyB3aXRoIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uOiA+CisJCQkJOm1hcCA8TWlkZGxlTW91c2U+IDxOb3A+CisJCQkJOmltYXAgPE1pZGRsZU1vdXNlPiA8Tm9wPgorPAkJCVlvdSBtaWdodCB3YW50IHRvIGRpc2FibGUgdGhlIG11bHRpLWNsaWNrIHZlcnNpb25zCisJCQl0b28sIHNlZSB8ZG91YmxlLWNsaWNrfC4KKworCQkJCQkJCSpncCoKK1sieF1ncAkJCUp1c3QgbGlrZSAicCIsIGJ1dCBsZWF2ZSB0aGUgY3Vyc29yIGp1c3QgYWZ0ZXIgdGhlIG5ldworCQkJdGV4dC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZ1AqCitbInhdZ1AJCQlKdXN0IGxpa2UgIlAiLCBidXQgbGVhdmUgdGhlIGN1cnNvciBqdXN0IGFmdGVyIHRoZSBuZXcKKwkJCXRleHQuICB7bm90IGluIFZpfQorCisJCQkJCQkJKjpwdSogKjpwdXQqCis6W2xpbmVdcHVbdF0gW3hdCVB1dCB0aGUgdGV4dCBbZnJvbSByZWdpc3RlciB4XSBhZnRlciBbbGluZV0gKGRlZmF1bHQKKwkJCWN1cnJlbnQgbGluZSkuICBUaGlzIGFsd2F5cyB3b3JrcyB8bGluZXdpc2V8LCB0aHVzCisJCQl0aGlzIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcHV0IGEgeWFua2VkIGJsb2NrIGFzIG5ldworCQkJbGluZXMuCisJCQlUaGUgcmVnaXN0ZXIgY2FuIGFsc28gYmUgJz0nIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsCisJCQlleHByZXNzaW9uLiAgVGhlIGV4cHJlc3Npb24gY29udGludWVzIHVudGlsIHRoZSBlbmQgb2YKKwkJCXRoZSBjb21tYW5kLiAgWW91IG5lZWQgdG8gZXNjYXBlIHRoZSAnfCcgYW5kICciJworCQkJY2hhcmFjdGVycyB0byBwcmV2ZW50IHRoZW0gZnJvbSB0ZXJtaW5hdGluZyB0aGUKKwkJCWNvbW1hbmQuICBFeGFtcGxlOiA+CisJCQkJOnB1dCA9J3BhdGgnIC4gXCIsL3Rlc3RcIgorPAkJCUlmIHRoZXJlIGlzIG5vIGV4cHJlc3Npb24gYWZ0ZXIgJz0nLCBWaW0gdXNlcyB0aGUKKwkJCXByZXZpb3VzIGV4cHJlc3Npb24uICBZb3UgY2FuIHNlZSBpdCB3aXRoICI6ZGlzID0iLgorCis6W2xpbmVdcHVbdF0hIFt4XQlQdXQgdGhlIHRleHQgW2Zyb20gcmVnaXN0ZXIgeF0gYmVmb3JlIFtsaW5lXSAoZGVmYXVsdAorCQkJY3VycmVudCBsaW5lKS4KKworWyJ4XV1wCQkgICAgb3IJCQkJCSpdcCogKl08TWlkZGxlTW91c2U+KgorWyJ4XV08TWlkZGxlTW91c2U+CUxpa2UgInAiLCBidXQgYWRqdXN0IHRoZSBpbmRlbnQgdG8gdGhlIGN1cnJlbnQgbGluZS4KKwkJCVVzaW5nIHRoZSBtb3VzZSBvbmx5IHdvcmtzIHdoZW4gJ21vdXNlJyBjb250YWlucyAnbicKKwkJCW9yICdhJy4gIHtub3QgaW4gVml9CisKK1sieF1bUAkJICAgIG9yCQkJCQkqW1AqCitbInhdXVAJCSAgICBvcgkJCQkJKl1QKgorWyJ4XVtwCQkgICAgb3IJCQkJCSpbcCogKls8TWlkZGxlTW91c2U+KgorWyJ4XVs8TWlkZGxlTW91c2U+CUxpa2UgIlAiLCBidXQgYWRqdXN0IHRoZSBpbmRlbnQgdG8gdGhlIGN1cnJlbnQgbGluZS4KKwkJCVVzaW5nIHRoZSBtb3VzZSBvbmx5IHdvcmtzIHdoZW4gJ21vdXNlJyBjb250YWlucyAnbicKKwkJCW9yICdhJy4gIHtub3QgaW4gVml9CisKK1lvdSBjYW4gdXNlIHRoZXNlIGNvbW1hbmRzIHRvIGNvcHkgdGV4dCBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyLiAgRG8gdGhpcworYnkgZmlyc3QgZ2V0dGluZyB0aGUgdGV4dCBpbnRvIGEgcmVnaXN0ZXIgd2l0aCBhIHlhbmssIGRlbGV0ZSBvciBjaGFuZ2UKK2NvbW1hbmQsIHRoZW4gaW5zZXJ0aW5nIHRoZSByZWdpc3RlciBjb250ZW50cyB3aXRoIGEgcHV0IGNvbW1hbmQuICBZb3UgY2FuCithbHNvIHVzZSB0aGVzZSBjb21tYW5kcyB0byBtb3ZlIHRleHQgZnJvbSBvbmUgZmlsZSB0byBhbm90aGVyLCBiZWNhdXNlIFZpbQorcHJlc2VydmVzIGFsbCByZWdpc3RlcnMgd2hlbiBjaGFuZ2luZyBidWZmZXJzICh0aGUgQ1RSTC1eIGNvbW1hbmQgaXMgYSBxdWljaword2F5IHRvIHRvZ2dsZSBiZXR3ZWVuIHR3byBmaWxlcykuCisKKwkJCQkqbGluZXdpc2UtcmVnaXN0ZXIqICpjaGFyYWN0ZXJ3aXNlLXJlZ2lzdGVyKgorWW91IGNhbiByZXBlYXQgdGhlIHB1dCBjb21tYW5kcyB3aXRoICIuIiAoZXhjZXB0IGZvciA6cHV0KSBhbmQgdW5kbyB0aGVtLiAgSWYKK3RoZSBjb21tYW5kIHRoYXQgd2FzIHVzZWQgdG8gZ2V0IHRoZSB0ZXh0IGludG8gdGhlIHJlZ2lzdGVyIHdhcyB8bGluZXdpc2V8LAorVmltIGluc2VydHMgdGhlIHRleHQgYmVsb3cgKCJwIikgb3IgYWJvdmUgKCJQIikgdGhlIGxpbmUgd2hlcmUgdGhlIGN1cnNvciBpcy4KK090aGVyd2lzZSBWaW0gaW5zZXJ0cyB0aGUgdGV4dCBhZnRlciAoInAiKSBvciBiZWZvcmUgKCJQIikgdGhlIGN1cnNvci4gIFdpdGgKK3RoZSAiOnB1dCIgY29tbWFuZCwgVmltIGFsd2F5cyBpbnNlcnRzIHRoZSB0ZXh0IGluIHRoZSBuZXh0IGxpbmUuICBZb3UgY2FuCitleGNoYW5nZSB0d28gY2hhcmFjdGVycyB3aXRoIHRoZSBjb21tYW5kIHNlcXVlbmNlICJ4cCIuICBZb3UgY2FuIGV4Y2hhbmdlIHR3bworbGluZXMgd2l0aCB0aGUgY29tbWFuZCBzZXF1ZW5jZSAiZGRwIi4gIFlvdSBjYW4gZXhjaGFuZ2UgdHdvIHdvcmRzIHdpdGggdGhlCitjb21tYW5kIHNlcXVlbmNlICJkZWVwIiAoc3RhcnQgd2l0aCB0aGUgY3Vyc29yIGluIHRoZSBibGFuayBzcGFjZSBiZWZvcmUgdGhlCitmaXJzdCB3b3JkKS4gIFlvdSBjYW4gdXNlIHRoZSAiJ10iIG9yICJgXSIgY29tbWFuZCBhZnRlciB0aGUgcHV0IGNvbW1hbmQgdG8KK21vdmUgdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBpbnNlcnRlZCB0ZXh0LCBvciB1c2UgIidbIiBvciAiYFsiIHRvIG1vdmUKK3RoZSBjdXJzb3IgdG8gdGhlIHN0YXJ0LgorCisJCQkJCQkqcHV0LVZpc3VhbC1tb2RlKiAqdl9wKiAqdl9QKgorV2hlbiB1c2luZyBhIHB1dCBjb21tYW5kIGxpa2UgfHB8IG9yIHxQfCBpbiBWaXN1YWwgbW9kZSwgVmltIHdpbGwgdHJ5IHRvCityZXBsYWNlIHRoZSBzZWxlY3RlZCB0ZXh0IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3Rlci4gIFdoZXRoZXIgdGhpcword29ya3Mgd2VsbCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIHNlbGVjdGlvbiBhbmQgdGhlIHR5cGUgb2YgdGhlIHRleHQgaW4gdGhlCityZWdpc3Rlci4gIFdpdGggYmxvY2t3aXNlIHNlbGVjdGlvbiBpdCBhbHNvIGRlcGVuZHMgb24gdGhlIHNpemUgb2YgdGhlIGJsb2NrCithbmQgd2hldGhlciB0aGUgY29ybmVycyBhcmUgb24gYW4gZXhpc3RpbmcgY2hhcmFjdGVyLiAoaW1wbGVtZW50YXRpb24gZGV0YWlsOgoraXQgYWN0dWFsbHkgd29ya3MgYnkgZmlyc3QgcHV0dGluZyB0aGUgcmVnaXN0ZXIgYWZ0ZXIgdGhlIHNlbGVjdGlvbiBhbmQgdGhlbgorZGVsZXRpbmcgdGhlIHNlbGVjdGlvbikuCisKKwkJCQkJCQkqYmxvY2t3aXNlLXJlZ2lzdGVyKgorSWYgeW91IHVzZSBhIGJsb2Nrd2lzZSBWaXN1YWwgbW9kZSBjb21tYW5kIHRvIGdldCB0aGUgdGV4dCBpbnRvIHRoZSByZWdpc3RlciwKK3RoZSBibG9jayBvZiB0ZXh0IHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlICgiUCIpIG9yIGFmdGVyICgicCIpIHRoZSBjdXJzb3IKK2NvbHVtbiBpbiB0aGUgY3VycmVudCBhbmQgbmV4dCBsaW5lcy4gIFZpbSBtYWtlcyB0aGUgd2hvbGUgYmxvY2sgb2YgdGV4dCBzdGFydAoraW4gdGhlIHNhbWUgY29sdW1uLiAgVGh1cyB0aGUgaW5zZXJ0ZWQgdGV4dCBsb29rcyB0aGUgc2FtZSBhcyB3aGVuIGl0IHdhcworeWFua2VkIG9yIGRlbGV0ZWQuICBWaW0gbWF5IHJlcGxhY2Ugc29tZSA8VGFiPiBjaGFyYWN0ZXJzIHdpdGggc3BhY2VzIHRvIG1ha2UKK3RoaXMgaGFwcGVuLiAgSG93ZXZlciwgaWYgdGhlIHdpZHRoIG9mIHRoZSBibG9jayBpcyBub3QgYSBtdWx0aXBsZSBvZiBhIDxUYWI+Cit3aWR0aCBhbmQgdGhlIHRleHQgYWZ0ZXIgdGhlIGluc2VydGVkIGJsb2NrIGNvbnRhaW5zIDxUYWI+cywgdGhhdCB0ZXh0IG1heSBiZQorbWlzYWxpZ25lZC4KKworTm90ZSB0aGF0IGFmdGVyIGEgY2hhcmFjdGVyd2lzZSB5YW5rIGNvbW1hbmQsIFZpbSBsZWF2ZXMgdGhlIGN1cnNvciBvbiB0aGUKK2ZpcnN0IHlhbmtlZCBjaGFyYWN0ZXIgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLiAgVGhpcyBtZWFucwordGhhdCAieWwiIGRvZXNuJ3QgbW92ZSB0aGUgY3Vyc29yLCBidXQgInloIiBtb3ZlcyB0aGUgY3Vyc29yIG9uZSBjaGFyYWN0ZXIKK2xlZnQuCitSYXRpb25hbGU6CUluIFZpIHRoZSAieSIgY29tbWFuZCBmb2xsb3dlZCBieSBhIGJhY2t3YXJkcyBtb3Rpb24gd291bGQKKwkJc29tZXRpbWVzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IHlhbmtlZCBjaGFyYWN0ZXIsCisJCWJlY2F1c2UgcmVkaXNwbGF5aW5nIHdhcyBza2lwcGVkLiAgSW4gVmltIGl0IGFsd2F5cyBtb3ZlcyB0bworCQl0aGUgZmlyc3QgY2hhcmFjdGVyLCBhcyBzcGVjaWZpZWQgYnkgUG9zaXguCitXaXRoIGEgbGluZXdpc2UgeWFuayBjb21tYW5kIHRoZSBjdXJzb3IgaXMgcHV0IGluIHRoZSBmaXJzdCBsaW5lLCBidXQgdGhlCitjb2x1bW4gaXMgdW5tb2RpZmllZCwgdGh1cyBpdCBtYXkgbm90IGJlIG9uIHRoZSBmaXJzdCB5YW5rZWQgY2hhcmFjdGVyLgorCitUaGVyZSBhcmUgbmluZSB0eXBlcyBvZiByZWdpc3RlcnM6CQkJKnJlZ2lzdGVycyogKkUzNTQqCisxLiBUaGUgdW5uYW1lZCByZWdpc3RlciAiIgorMi4gMTAgbnVtYmVyZWQgcmVnaXN0ZXJzICIwIHRvICI5CiszLiBUaGUgc21hbGwgZGVsZXRlIHJlZ2lzdGVyICItCis0LiAyNiBuYW1lZCByZWdpc3RlcnMgImEgdG8gInogb3IgIkEgdG8gIloKKzUuIGZvdXIgcmVhZC1vbmx5IHJlZ2lzdGVycyAiOiwgIi4sICIlIGFuZCAiIworNi4gdGhlIGV4cHJlc3Npb24gcmVnaXN0ZXIgIj0KKzcuIFRoZSBzZWxlY3Rpb24gYW5kIGRyb3AgcmVnaXN0ZXJzICIqLCAiKyBhbmQgIn4gCis4LiBUaGUgYmxhY2sgaG9sZSByZWdpc3RlciAiXworOS4gTGFzdCBzZWFyY2ggcGF0dGVybiByZWdpc3RlciAiLworCisxLiBVbm5hbWVkIHJlZ2lzdGVyICIiCQkJCSpxdW90ZV9xdW90ZSogKnF1b3RlcXVvdGUqCitWaW0gZmlsbHMgdGhpcyByZWdpc3RlciB3aXRoIHRleHQgZGVsZXRlZCB3aXRoIHRoZSAiZCIsICJjIiwgInMiLCAieCIgY29tbWFuZHMKK29yIGNvcGllZCB3aXRoIHRoZSB5YW5rICJ5IiBjb21tYW5kLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IGEgc3BlY2lmaWMKK3JlZ2lzdGVyIHdhcyB1c2VkIChlLmcuICAieGRkKS4gIEFuIGV4Y2VwdGlvbiBpcyB0aGUgJ18nIHJlZ2lzdGVyOiAiX2RkIGRvZXMKK25vdCBzdG9yZSB0aGUgZGVsZXRlZCB0ZXh0IGluIGFueSByZWdpc3Rlci4gIFZpbSB1c2VzIHRoZSBjb250ZW50cyBvZiB0aGlzCityZWdpc3RlciBmb3IgYW55IHB1dCBjb21tYW5kIChwIG9yIFApIHdoaWNoIGRvZXMgbm90IHNwZWNpZnkgYSByZWdpc3Rlci4KK0FkZGl0aW9uYWxseSB5b3UgY2FuIGFjY2VzcyBpdCB3aXRoIHRoZSBuYW1lICciJy4gIFRoaXMgbWVhbnMgeW91IGhhdmUgdG8gdHlwZQordHdvIGRvdWJsZSBxdW90ZXMuICBXcml0aW5nIHRvIHRoZSAiIiByZWdpc3RlciB3cml0ZXMgdG8gcmVnaXN0ZXIgIjAuCit7Vmk6IHJlZ2lzdGVyIGNvbnRlbnRzIGFyZSBsb3N0IHdoZW4gY2hhbmdpbmcgZmlsZXMsIG5vICciJ30KKworMi4gTnVtYmVyZWQgcmVnaXN0ZXJzICIwIHRvICI5CQkqcXVvdGVfbnVtYmVyKiAqcXVvdGUwKgkqcXVvdGUxKgorCQkJCQkqcXVvdGUyKiAqcXVvdGUzKiAqcXVvdGU0KiAqcXVvdGU5KgorVmltIGZpbGxzIHRoZXNlIHJlZ2lzdGVycyB3aXRoIHRleHQgZnJvbSB5YW5rIGFuZCBkZWxldGUgY29tbWFuZHMuCisgICBOdW1iZXJlZCByZWdpc3RlciAwIGNvbnRhaW5zIHRoZSB0ZXh0IGZyb20gdGhlIG1vc3QgcmVjZW50IHlhbmsgY29tbWFuZCwKK3VubGVzcyB0aGUgY29tbWFuZCBzcGVjaWZpZWQgYW5vdGhlciByZWdpc3RlciB3aXRoIFsieF0uCisgICBOdW1iZXJlZCByZWdpc3RlciAxIGNvbnRhaW5zIHRoZSB0ZXh0IGRlbGV0ZWQgYnkgdGhlIG1vc3QgcmVjZW50IGRlbGV0ZSBvcgorY2hhbmdlIGNvbW1hbmQsIHVubGVzcyB0aGUgY29tbWFuZCBzcGVjaWZpZWQgYW5vdGhlciByZWdpc3RlciBvciB0aGUgdGV4dCBpcworbGVzcyB0aGFuIG9uZSBsaW5lICh0aGUgc21hbGwgZGVsZXRlIHJlZ2lzdGVyIGlzIHVzZWQgdGhlbikuICBBbiBleGNlcHRpb24gaXMKK21hZGUgZm9yIHRoZXNlIGNvbW1hbmRzOiB8JXwsIHwofCwgfCl8LCB8YHwsIHwvfCwgfD98LCB8bnwsIHxOfCwgfHt8IGFuZCB8fXwuCitSZWdpc3RlciAiMSBpcyBhbHdheXMgdXNlZCB0aGVuICh0aGlzIGlzIFZpIGNvbXBhdGlibGUpLiAgVGhlICItIHJlZ2lzdGVyIGlzCit1c2VkIGFzIHdlbGwgaWYgdGhlIGRlbGV0ZSBpcyB3aXRoaW4gYSBsaW5lLgorICAgV2l0aCBlYWNoIHN1Y2Nlc3NpdmUgZGVsZXRpb24gb3IgY2hhbmdlLCBWaW0gc2hpZnRzIHRoZSBwcmV2aW91cyBjb250ZW50cworb2YgcmVnaXN0ZXIgMSBpbnRvIHJlZ2lzdGVyIDIsIDIgaW50byAzLCBhbmQgc28gZm9ydGgsIGxvc2luZyB0aGUgcHJldmlvdXMKK2NvbnRlbnRzIG9mIHJlZ2lzdGVyIDkuCit7Vmk6IG51bWJlcmVkIHJlZ2lzdGVyIGNvbnRlbnRzIGFyZSBsb3N0IHdoZW4gY2hhbmdpbmcgZmlsZXM7IHJlZ2lzdGVyIDAgZG9lcworbm90IGV4aXN0fQorCiszLiBTbWFsbCBkZWxldGUgcmVnaXN0ZXIgIi0JCQkJKnF1b3RlXy0qICpxdW90ZS0qCitUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRleHQgZnJvbSBjb21tYW5kcyB0aGF0IGRlbGV0ZSBsZXNzIHRoYW4gb25lIGxpbmUsCitleGNlcHQgd2hlbiB0aGUgY29tbWFuZCBzcGVjaWZpZXMgYSByZWdpc3RlciB3aXRoIFsieF0uCit7bm90IGluIFZpfQorCis0LiBOYW1lZCByZWdpc3RlcnMgImEgdG8gInogb3IgIkEgdG8gIloJCQkqcXVvdGVfYWxwaGEqICpxdW90ZWEqCitWaW0gZmlsbHMgdGhlc2UgcmVnaXN0ZXJzIG9ubHkgd2hlbiB5b3Ugc2F5IHNvLiAgU3BlY2lmeSB0aGVtIGFzIGxvd2VyY2FzZQorbGV0dGVycyB0byByZXBsYWNlIHRoZWlyIHByZXZpb3VzIGNvbnRlbnRzIG9yIGFzIHVwcGVyY2FzZSBsZXR0ZXJzIHRvIGFwcGVuZAordG8gdGhlaXIgcHJldmlvdXMgY29udGVudHMuCisKKzUuIFJlYWQtb25seSByZWdpc3RlcnMgIjosICIuLCAiJSBhbmQgIiMKK1RoZXNlIGFyZSAnJScsICcjJywgJzonIGFuZCAnLicuICBZb3UgY2FuIHVzZSB0aGVtIG9ubHkgd2l0aCB0aGUgInAiLCAiUCIsCithbmQgIjpwdXQiIGNvbW1hbmRzIGFuZCB3aXRoIENUUkwtUi4gIHtub3QgaW4gVml9CisJCQkJCQkqcXVvdGVfLiogKnF1b3RlLiogKkUyOSoKKwkiLglDb250YWlucyB0aGUgbGFzdCBpbnNlcnRlZCB0ZXh0ICh0aGUgc2FtZSBhcyB3aGF0IGlzIGluc2VydGVkCisJCXdpdGggdGhlIGluc2VydCBtb2RlIGNvbW1hbmRzIENUUkwtQSBhbmQgQ1RSTC1AKS4gIE5vdGU6IHRoaXMKKwkJZG9lc24ndCB3b3JrIHdpdGggQ1RSTC1SIG9uIHRoZSBjb21tYW5kLWxpbmUuICBJdCB3b3JrcyBhIGJpdAorCQlkaWZmZXJlbnRseSwgbGlrZSBpbnNlcnRpbmcgdGhlIHRleHQgaW5zdGVhZCBvZiBwdXR0aW5nIGl0CisJCSgndGV4dHdpZHRoJyBhbmQgb3RoZXIgb3B0aW9ucyBhZmZlY3Qgd2hhdCBpcyBpbnNlcnRlZCkuCisJCQkJCQkJKnF1b3RlXyUqICpxdW90ZSUqCisJIiUJQ29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKwkJCQkJCQkqcXVvdGVfIyogKnF1b3RlIyoKKwkiIwlDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYWx0ZXJuYXRlIGZpbGUuCisJCQkJCQkqcXVvdGVfOiogKnF1b3RlOiogKkUzMCoKKwkiOglDb250YWlucyB0aGUgbW9zdCByZWNlbnQgZXhlY3V0ZWQgY29tbWFuZC1saW5lLiAgRXhhbXBsZTogVXNlCisJCSJAOiIgdG8gcmVwZWF0IHRoZSBwcmV2aW91cyBjb21tYW5kLWxpbmUgY29tbWFuZC4KKwkJVGhlIGNvbW1hbmQtbGluZSBpcyBvbmx5IHN0b3JlZCBpbiB0aGlzIHJlZ2lzdGVyIHdoZW4gYXQgbGVhc3QKKwkJb25lIGNoYXJhY3RlciBvZiBpdCB3YXMgdHlwZWQuICBUaHVzIGl0IHJlbWFpbnMgdW5jaGFuZ2VkIGlmCisJCXRoZSBjb21tYW5kIHdhcyBjb21wbGV0ZWx5IGZyb20gYSBtYXBwaW5nLgorCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY21kbGluZV9oaXN0fAorCQlmZWF0dXJlfQorCis2LiBFeHByZXNzaW9uIHJlZ2lzdGVyICI9CQkJCSpxdW90ZV89KiAqcXVvdGU9KgorVGhpcyBpcyBub3QgcmVhbGx5IGEgcmVnaXN0ZXIgdGhhdCBzdG9yZXMgdGV4dCwgYnV0IGlzIGEgd2F5IHRvIHVzZSBhbgorZXhwcmVzc2lvbiBpbiBjb21tYW5kcyB3aGljaCB1c2UgYSByZWdpc3Rlci4gIFRoZSBleHByZXNzaW9uIHJlZ2lzdGVyIGlzCityZWFkLW9ubHk7IHlvdSBjYW5ub3QgcHV0IHRleHQgaW50byBpdC4gIEFmdGVyIHRoZSAnPScsIHRoZSBjdXJzb3IgbW92ZXMgdG8KK3RoZSBjb21tYW5kLWxpbmUsIHdoZXJlIHlvdSBjYW4gZW50ZXIgYW55IGV4cHJlc3Npb24gKHNlZSB8ZXhwcmVzc2lvbnwpLiAgQWxsCitub3JtYWwgY29tbWFuZC1saW5lIGVkaXRpbmcgY29tbWFuZHMgYXJlIGF2YWlsYWJsZSwgaW5jbHVkaW5nIGEgc3BlY2lhbAoraGlzdG9yeSBmb3IgZXhwcmVzc2lvbnMuICBXaGVuIHlvdSBlbmQgdGhlIGNvbW1hbmQtbGluZSBieSB0eXBpbmcgPENSPiwgVmltCitjb21wdXRlcyB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uLiAgSWYgeW91IGVuZCBpdCB3aXRoIDxFc2M+LCBWaW0gYWJhbmRvbnMKK3RoZSBleHByZXNzaW9uLiAgSWYgeW91IGRvIG5vdCBlbnRlciBhbiBleHByZXNzaW9uLCBWaW0gdXNlcyB0aGUgcHJldmlvdXMKK2V4cHJlc3Npb24gKGxpa2Ugd2l0aCB0aGUgIi8iIGNvbW1hbmQpLiAgSWYgdGhlICI9IHJlZ2lzdGVyIGlzIHVzZWQgZm9yIHRoZQorInAiIGNvbW1hbmQsIHRoZSBzdHJpbmcgaXMgc3BsaXQgdXAgYXQgPE5MPiBjaGFyYWN0ZXJzLiAgSWYgdGhlIHN0cmluZyBlbmRzIGluCithIDxOTD4sIGl0IGlzIHJlZ2FyZGVkIGFzIGEgbGluZXdpc2UgcmVnaXN0ZXIuICB7bm90IGluIFZpfQorCis3LiBTZWxlY3Rpb24gYW5kIGRyb3AgcmVnaXN0ZXJzICIqLCAiKyBhbmQgIn4gCitVc2UgdGhlc2UgcmVnaXN0ZXIgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgdGhlIHNlbGVjdGVkIHRleHQgZm9yIHRoZSBHVUkuCitTZWUgfHF1b3Rlc3RhcnwgYW5kIHxxdW90ZXBsdXN8LiAgV2hlbiB0aGUgY2xpcGJvYXJkIGlzIG5vdCBhdmFpbGFibGUgb3Igbm90Cit3b3JraW5nLCB0aGUgdW5uYW1lZCByZWdpc3RlciBpcyB1c2VkIGluc3RlYWQuICB7bm90IGluIFZpfQorCitOb3RlIHRoYXQgdGhlcmUgaXMgb25seSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gIiogYW5kICIrIGZvciBYMTEgc3lzdGVtcy4gIEZvcgorYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRpZmZlcmVuY2UsIHNlZSB8eDExLXNlbGVjdGlvbnwuICBVbmRlciBNUy1XaW5kb3dzLCB1c2UKK29mICIqIGFuZCAiKyBpcyBhY3R1YWxseSBzeW5vbnltb3VzIGFuZCByZWZlcnMgdG8gdGhlIHxndWktY2xpcGJvYXJkfC4KKworCQkJCQkJKnF1b3RlX34qICpxdW90ZX4qICo8RHJvcD4qCitUaGUgcmVhZC1vbmx5ICJ+IHJlZ2lzdGVyIHN0b3JlcyB0aGUgZHJvcHBlZCB0ZXh0IGZyb20gdGhlIGxhc3QgZHJhZyduJ2Ryb3AKK29wZXJhdGlvbi4gIFdoZW4gc29tZXRoaW5nIGhhcyBiZWVuIGRyb3BwZWQgb250byBWaW0sIHRoZSAifiByZWdpc3RlciBpcworZmlsbGVkIGluIGFuZCB0aGUgPERyb3A+IHBzZXVkbyBrZXkgaXMgc2VudCBmb3Igbm90aWZpY2F0aW9uLiAgWW91IGNhbiByZW1hcAordGhpcyBrZXkgaWYgeW91IHdhbnQ7IHRoZSBkZWZhdWx0IGFjdGlvbiAoZm9yIGFsbCBtb2RlcykgaXMgdG8gaW5zZXJ0IHRoZQorY29udGVudHMgb2YgdGhlICJ+IHJlZ2lzdGVyIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24uICB7bm90IGluIFZpfQore29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtkbmR8IGZlYXR1cmUsIGN1cmVudGx5IG9ubHkgd2l0aCB0aGUKK0dUSyBHVUl9CisKK05vdGU6IFRoZSAifiByZWdpc3RlciBpcyBvbmx5IHVzZWQgd2hlbiBkcm9wcGluZyBwbGFpbiB0ZXh0IG9udG8gVmltLgorRHJhZyduJ2Ryb3Agb2YgVVJJIGxpc3RzIGlzIGhhbmRsZWQgaW50ZXJuYWxseS4KKworOC4gQmxhY2sgaG9sZSByZWdpc3RlciAiXwkJCQkqcXVvdGVfKgorV2hlbiB3cml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIsIG5vdGhpbmcgaGFwcGVucy4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGVsZXRlCit0ZXh0IHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBub3JtYWwgcmVnaXN0ZXJzLiAgV2hlbiByZWFkaW5nIGZyb20gdGhpcyByZWdpc3RlciwKK25vdGhpbmcgaXMgcmV0dXJuZWQuICB7bm90IGluIFZpfQorCis5LiBMYXN0IHNlYXJjaCBwYXR0ZXJuIHJlZ2lzdGVyCSIvCQkJKnF1b3RlXy8qICpxdW90ZS8qCitDb250YWlucyB0aGUgbW9zdCByZWNlbnQgc2VhcmNoLXBhdHRlcm4uICBUaGlzIGlzIHVzZWQgZm9yICJuIiBhbmQgJ2hsc2VhcmNoJy4KK0l0IGlzIHdyaXRhYmxlIHdpdGggIjpsZXQiLCB5b3UgY2FuIGNoYW5nZSBpdCB0byBoYXZlICdobHNlYXJjaCcgaGlnaGxpZ2h0CitvdGhlciBtYXRjaGVzIHdpdGhvdXQgYWN0dWFsbHkgc2VhcmNoaW5nLiAgWW91IGNhbid0IHlhbmsgb3IgZGVsZXRlIGludG8gdGhpcworcmVnaXN0ZXIuICB7bm90IGluIFZpfQorCisJCQkJCQkJKkAvKgorWW91IGNhbiB3cml0ZSB0byBhIHJlZ2lzdGVyIHdpdGggYSAiOmxldCIgY29tbWFuZCB8OmxldC1AfC4gIEV4YW1wbGU6ID4KKwk6bGV0IEAvID0gInRoZSIKKworSWYgeW91IHVzZSBhIHB1dCBjb21tYW5kIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJlZ2lzdGVyLCBWaW0gdXNlcyB0aGUgcmVnaXN0ZXIKK3RoYXQgd2FzIGxhc3QgZmlsbGVkICh0aGlzIGlzIGFsc28gdGhlIGNvbnRlbnRzIG9mIHRoZSB1bm5hbWVkIHJlZ2lzdGVyKS4gIElmCit5b3UgYXJlIGNvbmZ1c2VkLCB1c2UgdGhlICI6ZGlzIiBjb21tYW5kIHRvIGZpbmQgb3V0IHdoYXQgVmltIHdpbGwgcHV0ICh0aGlzCitjb21tYW5kIGRpc3BsYXlzIGFsbCBuYW1lZCBhbmQgbnVtYmVyZWQgcmVnaXN0ZXJzOyB0aGUgdW5uYW1lZCByZWdpc3RlciBpcworbGFiZWxsZWQgJyInKS4KKworVGhlIG5leHQgdGhyZWUgY29tbWFuZHMgYWx3YXlzIHdvcmsgb24gd2hvbGUgbGluZXMuCisKKzpbcmFuZ2VdY29bcHldIHthZGRyZXNzfQkJCQkqOmNvKiAqOmNvcHkqCisJCQlDb3B5IHRoZSBsaW5lcyBnaXZlbiBieSBbcmFuZ2VdIHRvIGJlbG93IHRoZSBsaW5lCisJCQlnaXZlbiBieSB7YWRkcmVzc30uCisKKwkJCQkJCQkqOnQqCis6dAkJCVN5bm9ueW0gZm9yIGNvcHkuCisKKzpbcmFuZ2VdbVtvdmVdIHthZGRyZXNzfQkJCSo6bSogKjptbyogKjptb3ZlKiAqRTEzNCoKKwkJCU1vdmUgdGhlIGxpbmVzIGdpdmVuIGJ5IFtyYW5nZV0gdG8gYmVsb3cgdGhlIGxpbmUKKwkJCWdpdmVuIGJ5IHthZGRyZXNzfS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBGb3JtYXR0aW5nIHRleHQJCQkJCSpmb3JtYXR0aW5nKgorCis6W3JhbmdlXWNlW250ZXJdIFt3aWR0aF0JCQkJKjpjZSogKjpjZW50ZXIqCisJCQlDZW50ZXIgbGluZXMgaW4gW3JhbmdlXSBiZXR3ZWVuIFt3aWR0aF0gY29sdW1ucworCQkJKGRlZmF1bHQgJ3RleHR3aWR0aCcgb3IgODAgd2hlbiAndGV4dHdpZHRoJyBpcyAwKS4KKwkJCXtub3QgaW4gVml9CisJCQlOb3QgYXZhaWxhYmxlIHdoZW4gfCtleF9leHRyYXwgZmVhdHVyZSB3YXMgZGlzYWJsZWQgYXQKKwkJCWNvbXBpbGUgdGltZS4KKworOltyYW5nZV1yaVtnaHRdIFt3aWR0aF0JCQkJCSo6cmkqICo6cmlnaHQqCisJCQlSaWdodC1hbGlnbiBsaW5lcyBpbiBbcmFuZ2VdIGF0IFt3aWR0aF0gY29sdW1ucworCQkJKGRlZmF1bHQgJ3RleHR3aWR0aCcgb3IgODAgd2hlbiAndGV4dHdpZHRoJyBpcyAwKS4KKwkJCXtub3QgaW4gVml9CisJCQlOb3QgYXZhaWxhYmxlIHdoZW4gfCtleF9leHRyYXwgZmVhdHVyZSB3YXMgZGlzYWJsZWQgYXQKKwkJCWNvbXBpbGUgdGltZS4KKworCQkJCQkJCSo6bGUqICo6bGVmdCoKKzpbcmFuZ2VdbGVbZnRdIFtpbmRlbnRdCisJCQlMZWZ0LWFsaWduIGxpbmVzIGluIFtyYW5nZV0uICBTZXRzIHRoZSBpbmRlbnQgaW4gdGhlCisJCQlsaW5lcyB0byBbaW5kZW50XSAoZGVmYXVsdCAwKS4gIHtub3QgaW4gVml9CisJCQlOb3QgYXZhaWxhYmxlIHdoZW4gfCtleF9leHRyYXwgZmVhdHVyZSB3YXMgZGlzYWJsZWQgYXQKKwkJCWNvbXBpbGUgdGltZS4KKworCQkJCQkJCSpncSoKK2dxe21vdGlvbn0JCUZvcm1hdCB0aGUgbGluZXMgdGhhdCB7bW90aW9ufSBtb3ZlcyBvdmVyLiAgVGhlCisJCQkndGV4dHdpZHRoJyBvcHRpb24gY29udHJvbHMgdGhlIGxlbmd0aCBvZiBlYWNoCisJCQlmb3JtYXR0ZWQgbGluZSAoc2VlIGJlbG93KS4gIElmIHRoZSAndGV4dHdpZHRoJyBvcHRpb24KKwkJCWlzIDAsIHRoZSBmb3JtYXR0ZWQgbGluZSBsZW5ndGggaXMgdGhlIHNjcmVlbiB3aWR0aAorCQkJKHdpdGggYSBtYXhpbXVtIHdpZHRoIG9mIDc5KS4gIHtub3QgaW4gVml9CisJCQlUaGUgJ2Zvcm1hdG9wdGlvbnMnIG9wdGlvbiBjb250cm9scyB0aGUgdHlwZSBvZgorCQkJZm9ybWF0dGluZyB8Zm8tdGFibGV8LgorCQkJTk9URTogVGhlICJRIiBjb21tYW5kIGZvcm1lcmx5IHBlcmZvcm1lZCB0aGlzCisJCQlmdW5jdGlvbi4gIElmIHlvdSBzdGlsbCB3YW50IHRvIHVzZSAiUSIgZm9yCisJCQlmb3JtYXR0aW5nLCB1c2UgdGhpcyBtYXBwaW5nOiA+CisJCQkJOm5ub3JlbWFwIFEgZ3EKKworZ3FncQkJCQkJCQkqZ3FncSogKmdxcSoKK2dxcQkJCUZvcm1hdCB0aGUgY3VycmVudCBsaW5lLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSp2X2dxKgore1Zpc3VhbH1ncQkJRm9ybWF0IHRoZSBoaWdobGlnaHRlZCB0ZXh0LiAgKGZvciB7VmlzdWFsfSBzZWUKKwkJCXxWaXN1YWwtbW9kZXwpLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpndyoKK2d3e21vdGlvbn0JCUZvcm1hdCB0aGUgbGluZXMgdGhhdCB7bW90aW9ufSBtb3ZlcyBvdmVyLiAgU2ltaWxhciB0bworCQkJfGdxfCBidXQgcHV0cyB0aGUgY3Vyc29yIGJhY2sgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4KKwkJCXRoZSB0ZXh0LiAgSG93ZXZlciwgJ2Zvcm1hdHByZycgaXMgbm90IHVzZWQuCisJCQl7bm90IGluIFZpfQorCitFeGFtcGxlOiBUbyBmb3JtYXQgdGhlIGN1cnJlbnQgcGFyYWdyYXBoIHVzZToJCQkqZ3FhcCogID4KKwlncWFwCisKK1RoZSAiZ3EiIGNvbW1hbmQgbGVhdmVzIHRoZSBjdXJzb3IgaW4gdGhlIGxpbmUgd2hlcmUgdGhlIG1vdGlvbiBjb21tYW5kIHRha2VzCit0aGUgY3Vyc29yLiAgVGhpcyBhbGxvd3MgeW91IHRvIHJlcGVhdCBmb3JtYXR0aW5nIHJlcGVhdGVkIHdpdGggIi4iLiAgVGhpcword29ya3Mgd2VsbCB3aXRoICJncWoiIChmb3JtYXQgY3VycmVudCBhbmQgbmV4dCBsaW5lKSBhbmQgImdxfSIgKGZvcm1hdCB1bnRpbAorZW5kIG9mIHBhcmFncmFwaCkuICBOb3RlOiBXaGVuICdmb3JtYXRwcmcnIGlzIHNldCwgImdxIiBsZWF2ZXMgdGhlIGN1cnNvciBvbgordGhlIGZpcnN0IGZvcm1hdHRlZCBsaW5lIChhcyB3aXRoIHVzaW5nIGEgZmlsdGVyIGNvbW1hbmQpLgorCitJZiB5b3Ugd2FudCB0byBmb3JtYXQgdGhlIGN1cnJlbnQgcGFyYWdyYXBoIGFuZCBjb250aW51ZSB3aGVyZSB5b3Ugd2VyZSwgdXNlOiA+CisJZ3dhcAorSWYgeW91IGFsd2F5cyB3YW50IHRvIGtlZXAgcGFyYWdyYXBocyBmb3JtYXR0ZWQgeW91IG1heSB3YW50IHRvIGFkZCB0aGUgJ2EnCitmbGFnIHRvICdmb3JtYXRvcHRpb25zJy4gIFNlZSB8YXV0by1mb3JtYXR8LgorCitJZiB0aGUgJ2F1dG9pbmRlbnQnIG9wdGlvbiBpcyBvbiwgVmltIHVzZXMgdGhlIGluZGVudCBvZiB0aGUgZmlyc3QgbGluZSBmb3IKK3RoZSBmb2xsb3dpbmcgbGluZXMuCisKK0Zvcm1hdHRpbmcgZG9lcyBub3QgY2hhbmdlIGVtcHR5IGxpbmVzIChidXQgaXQgZG9lcyBjaGFuZ2UgbGluZXMgd2l0aCBvbmx5Cit3aGl0ZSBzcGFjZSEpLgorCitUaGUgJ2pvaW5zcGFjZXMnIG9wdGlvbiBpcyB1c2VkIHdoZW4gbGluZXMgYXJlIGpvaW5lZCB0b2dldGhlci4KKworWW91IGNhbiBzZXQgdGhlICdmb3JtYXRwcmcnIG9wdGlvbiB0byB0aGUgbmFtZSBvZiBhbiBleHRlcm5hbCBwcm9ncmFtIGZvciBWaW0KK3RvIHVzZSBmb3IgdGV4dCBmb3JtYXR0aW5nLiAgVGhlICd0ZXh0d2lkdGgnIGFuZCBvdGhlciBvcHRpb25zIGhhdmUgbm8gZWZmZWN0CitvbiBmb3JtYXR0aW5nIGJ5IGFuIGV4dGVybmFsIHByb2dyYW0uCisKKwkJCQkJCQkqcmlnaHQtanVzdGlmeSoKK1RoZXJlIGlzIG5vIGNvbW1hbmQgaW4gVmltIHRvIHJpZ2h0IGp1c3RpZnkgdGV4dC4gIFlvdSBjYW4gZG8gaXQgd2l0aAorYW4gZXh0ZXJuYWwgY29tbWFuZCwgbGlrZSAicGFyIiAoZS5nLjogIiF9cGFyIiB0byBmb3JtYXQgdW50aWwgdGhlIGVuZCBvZiB0aGUKK3BhcmFncmFwaCkgb3Igc2V0ICdmb3JtYXRwcmcnIHRvICJwYXIiLgorCisJCQkJCQkJKmZvcm1hdC1jb21tZW50cyoKK1ZpbSBjYW4gZm9ybWF0IGNvbW1lbnRzIGluIGEgc3BlY2lhbCB3YXkuICBWaW0gcmVjb2duaXplcyBhIGNvbW1lbnQgYnkgYQorc3BlY2lmaWMgc3RyaW5nIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSAoaWdub3Jpbmcgd2hpdGUgc3BhY2UpLiAgVGhyZWUgdHlwZXMKK29mIGNvbW1lbnRzIGNhbiBiZSB1c2VkOgorCistIEEgY29tbWVudCBzdHJpbmcgdGhhdCByZXBlYXRzIGF0IHRoZSBzdGFydCBvZiBlYWNoIGxpbmUuICBBbiBleGFtcGxlIGlzIHRoZQorICB0eXBlIG9mIGNvbW1lbnQgdXNlZCBpbiBzaGVsbCBzY3JpcHRzLCBzdGFydGluZyB3aXRoICIjIi4KKy0gQSBjb21tZW50IHN0cmluZyB0aGF0IG9jY3VycyBvbmx5IGluIHRoZSBmaXJzdCBsaW5lLCBub3QgaW4gdGhlIGZvbGxvd2luZworICBsaW5lcy4gIEFuIGV4YW1wbGUgaXMgdGhpcyBsaXN0IHdpdGggZGFzaGVzLgorLSBUaHJlZS1waWVjZSBjb21tZW50cyB0aGF0IGhhdmUgYSBzdGFydCBzdHJpbmcsIGFuIGVuZCBzdHJpbmcsIGFuZCBvcHRpb25hbAorICBsaW5lcyBpbiBiZXR3ZWVuLiAgVGhlIHN0cmluZ3MgZm9yIHRoZSBzdGFydCwgbWlkZGxlIGFuZCBlbmQgYXJlIGRpZmZlcmVudC4KKyAgQW4gZXhhbXBsZSBpcyB0aGUgQy1zdHlsZSBjb21tZW50OgorCS8qCisJICogdGhpcyBpcyBhIEMgY29tbWVudAorCSAqLworCitUaGUgJ2NvbW1lbnRzJyBvcHRpb24gaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwYXJ0cy4gIEVhY2ggcGFydCBkZWZpbmVzIGEKK3R5cGUgb2YgY29tbWVudCBzdHJpbmcuICBBIHBhcnQgY29uc2lzdHMgb2Y6CisJe2ZsYWdzfTp7c3RyaW5nfQorCit7c3RyaW5nfSBpcyB0aGUgbGl0ZXJhbCB0ZXh0IHRoYXQgbXVzdCBhcHBlYXIuCisKK3tmbGFnc306CisgIG4JTmVzdGVkIGNvbW1lbnQuICBOZXN0aW5nIHdpdGggbWl4ZWQgcGFydHMgaXMgYWxsb3dlZC4gIElmICdjb21tZW50cycKKwlpcyAibjopLG46PiIgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIj4gKSA+IiBpcyBhIGNvbW1lbnQuCisKKyAgYglCbGFuayAoPFNwYWNlPiwgPFRhYj4gb3IgPEVPTD4pIHJlcXVpcmVkIGFmdGVyIHtzdHJpbmd9LgorCisgIGYJT25seSB0aGUgZmlyc3QgbGluZSBoYXMgdGhlIGNvbW1lbnQgc3RyaW5nLiAgRG8gbm90IHJlcGVhdCBjb21tZW50IG9uCisJdGhlIG5leHQgbGluZSwgYnV0IHByZXNlcnZlIGluZGVudGF0aW9uIChlLmcuLCBhIGJ1bGxldC1saXN0KS4KKworICBzCVN0YXJ0IG9mIHRocmVlLXBpZWNlIGNvbW1lbnQKKworICBtCU1pZGRsZSBvZiBhIHRocmVlLXBpZWNlIGNvbW1lbnQKKworICBlCUVuZCBvZiBhIHRocmVlLXBpZWNlIGNvbW1lbnQKKworICBsCUxlZnQgYWRqdXN0IG1pZGRsZSB3aXRoIHN0YXJ0IG9yIGVuZCAoZGVmYXVsdCkuICBPbmx5IHJlY29nbml6ZWQgd2hlbgorCXVzZWQgdG9nZXRoZXIgd2l0aCAncycgb3IgJ2UnLgorCisgIHIJUmlnaHQgYWRqdXN0IG1pZGRsZSB3aXRoIHN0YXJ0IG9yIGVuZC4gIE9ubHkgcmVjb2duaXplZCB3aGVuIHVzZWQKKwl0b2dldGhlciB3aXRoICdzJyBvciAnZScuCisKKyAgTwlEb24ndCB1c2UgdGhpcyBvbmUgZm9yIHRoZSAiTyIgY29tbWFuZC4KKworICB4CUFsbG93cyB0aHJlZS1waWVjZSBjb21tZW50cyB0byBiZSBlbmRlZCBieSBqdXN0IHR5cGluZyB0aGUgbGFzdAorCWNoYXJhY3RlciBvZiB0aGUgZW5kLWNvbW1lbnQgc3RyaW5nIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gYSBuZXcKKwlsaW5lLCB3aGVuIHRoZSBtaWRkbGUtY29tbWVudCBzdHJpbmcgaGFzIGFscmVhZHkgYmVlbiBpbnNlcnRlZAorCWF1dG9tYXRpY2FsbHkuICBTZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KKworICB7ZGlnaXRzfQorCVdoZW4gdG9nZXRoZXIgd2l0aCAncycgb3IgJ2UnOiBhZGQgZXh0cmEgaW5kZW50IGZvciB0aGUgbWlkZGxlIHBhcnQuCisJVGhpcyBjYW4gYmUgdXNlZCB0byBsZWZ0LWFsaWduIHRoZSBtaWRkbGUgcGFydCB3aXRoIHRoZSBzdGFydCBvciBlbmQKKwlhbmQgdGhlbiBhZGQgYW4gb2Zmc2V0LgorCisgIC17ZGlnaXRzfQorCUxpa2Uge2RpZ2l0c30gYnV0IHJlZHVjZSB0aGUgaW5kZW50LiAgVGhpcyBvbmx5IHdvcmtzIHdoZW4gdGhlcmUgaXMKKwlzb21lIGluZGVudCBmb3IgdGhlIHN0YXJ0IG9yIGVuZCBwYXJ0IHRoYXQgY2FuIGJlIHJlbW92ZWQuCisKK1doZW4gYSBzdHJpbmcgaGFzIG5vbmUgb2YgdGhlICdmJywgJ3MnLCAnbScgb3IgJ2UnIGZsYWdzLCBWaW0gYXNzdW1lcyB0aGUKK2NvbW1lbnQgc3RyaW5nIHJlcGVhdHMgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggbGluZS4gIFRoZSBmbGFncyBmaWVsZCBtYXkgYmUKK2VtcHR5LgorCitBbnkgYmxhbmsgc3BhY2UgaW4gdGhlIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUge3N0cmluZ30gaXMgcGFydCBvZiB0aGUKK3tzdHJpbmd9LCBzbyBkbyBub3QgaW5jbHVkZSBsZWFkaW5nIG9yIHRyYWlsaW5nIGJsYW5rcyB1bmxlc3MgdGhlIGJsYW5rcyBhcmUgYQorcmVxdWlyZWQgcGFydCBvZiB0aGUgY29tbWVudCBzdHJpbmcuCisKK1doZW4gb25lIGNvbW1lbnQgbGVhZGVyIGlzIHBhcnQgb2YgYW5vdGhlciwgc3BlY2lmeSB0aGUgcGFydCBhZnRlciB0aGUgd2hvbGUuCitGb3IgZXhhbXBsZSwgdG8gaW5jbHVkZSBib3RoICItIiBhbmQgIi0+IiwgdXNlID4KKwk6c2V0IGNvbW1lbnRzPWY6LT4sZjotCisKK0EgdGhyZWUtcGllY2UgY29tbWVudCBtdXN0IGFsd2F5cyBiZSBnaXZlbiBhcyBzdGFydCxtaWRkbGUsZW5kLCB3aXRoIG5vIG90aGVyCitwYXJ0cyBpbiBiZXR3ZWVuLiAgQW4gZXhhbXBsZSBvZiBhIHRocmVlLXBpZWNlIGNvbW1lbnQgaXMgPgorCXNyOi8qLG1iOiosZXg6Ki8KK2ZvciBDLWNvbW1lbnRzLiAgVG8gYXZvaWQgcmVjb2duaXppbmcgIipwdHIiIGFzIGEgY29tbWVudCwgdGhlIG1pZGRsZSBzdHJpbmcKK2luY2x1ZGVzIHRoZSAnYicgZmxhZy4gIEZvciB0aHJlZS1waWVjZSBjb21tZW50cywgVmltIGNoZWNrcyB0aGUgdGV4dCBhZnRlcgordGhlIHN0YXJ0IGFuZCBtaWRkbGUgc3RyaW5ncyBmb3IgdGhlIGVuZCBzdHJpbmcuICBJZiBWaW0gZmluZHMgdGhlIGVuZCBzdHJpbmcsCit0aGUgY29tbWVudCBkb2VzIG5vdCBjb250aW51ZSBvbiB0aGUgbmV4dCBsaW5lLiAgVGhyZWUtcGllY2UgY29tbWVudHMgbXVzdAoraGF2ZSBhIG1pZGRsZSBzdHJpbmcgYmVjYXVzZSBvdGhlcndpc2UgVmltIGNhbid0IHJlY29nbml6ZSB0aGUgbWlkZGxlIGxpbmVzLgorCitOb3RpY2UgdGhlIHVzZSBvZiB0aGUgIngiIGZsYWcgaW4gdGhlIGFib3ZlIHRocmVlLXBpZWNlIGNvbW1lbnQgZGVmaW5pdGlvbi4KK1doZW4geW91IGhpdCBSZXR1cm4gaW4gYSBDLWNvbW1lbnQsIFZpbSB3aWxsIGluc2VydCB0aGUgbWlkZGxlIGNvbW1lbnQgbGVhZGVyCitmb3IgdGhlIG5ldyBsaW5lLCBlLmcuICIgKiAiLiAgVG8gY2xvc2UgdGhpcyBjb21tZW50IHlvdSBqdXN0IGhhdmUgdG8gdHlwZSAiLyIKK2JlZm9yZSB0eXBpbmcgYW55dGhpbmcgZWxzZSBvbiB0aGUgbmV3IGxpbmUuICBUaGlzIHdpbGwgcmVwbGFjZSB0aGUKK21pZGRsZS1jb21tZW50IGxlYWRlciB3aXRoIHRoZSBlbmQtY29tbWVudCBsZWFkZXIsIGxlYXZpbmcganVzdCAiICovIi4gIFRoZXJlCitpcyBubyBuZWVkIHRvIGhpdCBCYWNrU3BhY2UgZmlyc3QuCisKK0V4YW1wbGVzOiA+CisgICAiYjoqIglJbmNsdWRlcyBsaW5lcyBzdGFydGluZyB3aXRoICIqIiwgYnV0IG5vdCBpZiB0aGUgIioiIGlzCisJCWZvbGxvd2VkIGJ5IGEgbm9uLWJsYW5rLiAgVGhpcyBhdm9pZHMgYSBwb2ludGVyIGRlcmVmZXJlbmNlCisJCWxpa2UgIipzdHIiIHRvIGJlIHJlY29nbml6ZWQgYXMgYSBjb21tZW50LgorICAgIm46PiIJSW5jbHVkZXMgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIj4iLCAiPj4iLCAiPj4+IiwgZXRjLgorICAgImZiOi0iCUZvcm1hdCBhIGxpc3QgdGhhdCBzdGFydHMgd2l0aCAiLSAiLgorCitCeSBkZWZhdWx0LCAiYjojIiBpcyBpbmNsdWRlZC4gIFRoaXMgbWVhbnMgdGhhdCBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aAorIiNpbmNsdWRlIiBpcyBub3QgcmVjb2duaXplZCBhcyBhIGNvbW1lbnQgbGluZS4gIEJ1dCBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aAorIiMgZGVmaW5lIiBpcyByZWNvZ25pemVkLiAgVGhpcyBpcyBhIGNvbXByb21pc2UuCisKK09mdGVuIHRoZSBhbGlnbm1lbnQgY2FuIGJlIGNoYW5nZWQgZnJvbSByaWdodCBhbGlnbm1lbnQgdG8gYSBsZWZ0IGFsaWdubWVudAord2l0aCBhbiBhZGRpdGlvbmFsIHNwYWNlLiAgRm9yIGV4YW1wbGUsIGZvciBKYXZhZG9jIGNvbW1lbnRzLCB0aGlzIGNhbiBiZQordXNlZCAoaW5zZXJ0IGEgYmFja3NsYXNoIGJlZm9yZSB0aGUgc3BhY2Ugd2hlbiB1c2luZyAiOnNldCIpOiA+CisJczE6LyosbWI6KixleDoqLworTm90ZSB0aGF0IGFuIG9mZnNldCBpcyBpbmNsdWRlZCB3aXRoIHN0YXJ0LCBzbyB0aGF0IHRoZSBtaWRkbGUgcGFydCBpcyBsZWZ0CithbGlnbmVkIHdpdGggdGhlIHN0YXJ0IGFuZCB0aGVuIGFuIG9mZnNldCBvZiBvbmUgY2hhcmFjdGVyIGFkZGVkLiAgVGhpcyBtYWtlcworaXQgcG9zc2libGUgdG8gbGVmdCBhbGlnbiB0aGUgc3RhcnQgYW5kIG1pZGRsZSBmb3IgdGhpcyBjb25zdHJ1Y3Rpb246ID4KKwkvKioKKwkgKiBjb21tZW50CisJICovCisKK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjb21tZW50c3wgZmVhdHVyZX0KKworCQkJCQkJCSpmby10YWJsZSoKK1lvdSBjYW4gdXNlIHRoZSAnZm9ybWF0b3B0aW9ucycgb3B0aW9uICB0byBpbmZsdWVuY2UgaG93IFZpbSBmb3JtYXRzIHRleHQuCisnZm9ybWF0b3B0aW9ucycgaXMgYSBzdHJpbmcgdGhhdCBjYW4gY29udGFpbiBhbnkgb2YgdGhlIGxldHRlcnMgYmVsb3cuICBUaGUKK2RlZmF1bHQgc2V0dGluZyBpcyAidGNxIi4gIFlvdSBjYW4gc2VwYXJhdGUgdGhlIG9wdGlvbiBsZXR0ZXJzIHdpdGggY29tbWFzIGZvcgorcmVhZGFiaWxpdHkuCisKK2xldHRlcgkgbWVhbmluZyB3aGVuIHByZXNlbnQgaW4gJ2Zvcm1hdG9wdGlvbnMnICAgIH4KKwordAlBdXRvLXdyYXAgdGV4dCB1c2luZyB0ZXh0d2lkdGggKGRvZXMgbm90IGFwcGx5IHRvIGNvbW1lbnRzKQorYwlBdXRvLXdyYXAgY29tbWVudHMgdXNpbmcgdGV4dHdpZHRoLCBpbnNlcnRpbmcgdGhlIGN1cnJlbnQgY29tbWVudAorCWxlYWRlciBhdXRvbWF0aWNhbGx5LgorcglBdXRvbWF0aWNhbGx5IGluc2VydCB0aGUgY3VycmVudCBjb21tZW50IGxlYWRlciBhZnRlciBoaXR0aW5nCisJPEVudGVyPiBpbiBJbnNlcnQgbW9kZS4KK28JQXV0b21hdGljYWxseSBpbnNlcnQgdGhlIGN1cnJlbnQgY29tbWVudCBsZWFkZXIgYWZ0ZXIgaGl0dGluZyAnbycgb3IKKwknTycgaW4gTm9ybWFsIG1vZGUuCitxCUFsbG93IGZvcm1hdHRpbmcgb2YgY29tbWVudHMgd2l0aCAiZ3EiLgorCU5vdGUgdGhhdCBmb3JtYXR0aW5nIHdpbGwgbm90IGNoYW5nZSBibGFuayBsaW5lcyBvciBsaW5lcyBjb250YWluaW5nCisJb25seSB0aGUgY29tbWVudCBsZWFkZXIuICBBIG5ldyBwYXJhZ3JhcGggc3RhcnRzIGFmdGVyIHN1Y2ggYSBsaW5lLAorCW9yIHdoZW4gdGhlIGNvbW1lbnQgbGVhZGVyIGNoYW5nZXMuCit3CVRyYWlsaW5nIHdoaXRlIHNwYWNlIGluZGljYXRlcyBhIHBhcmFncmFwaCBjb250aW51ZXMgaW4gdGhlIG5leHQgbGluZS4KKwlBIGxpbmUgdGhhdCBlbmRzIGluIGEgbm9uLXdoaXRlIGNoYXJhY3RlciBlbmRzIGEgcGFyYWdyYXBoLgorYQlBdXRvbWF0aWMgZm9ybWF0dGluZyBvZiBwYXJhZ3JhcGhzLiAgRXZlcnkgdGltZSB0ZXh0IGlzIGluc2VydGVkIG9yCisJZGVsZXRlZCB0aGUgcGFyYWdyYXBoIHdpbGwgYmUgcmVmb3JtYXR0ZWQuICBTZWUgfGF1dG8tZm9ybWF0fC4KKwlXaGVuIHRoZSAnYycgZmxhZyBpcyBwcmVzZW50IHRoaXMgb25seSBoYXBwZW5zIGZvciByZWNvZ25pemVkCisJY29tbWVudHMuCituCVdoZW4gZm9ybWF0dGluZyB0ZXh0LCByZWNvZ25pemUgbnVtYmVyZWQgbGlzdHMuICBUaGUgaW5kZW50IG9mIHRoZQorCXRleHQgYWZ0ZXIgdGhlIG51bWJlciBpcyB1c2VkIGZvciB0aGUgbmV4dCBsaW5lLiAgVGhlIG51bWJlciBtYXkKKwlvcHRpb25hbGx5IGJlIGZvbGxvd2VkIGJ5ICcuJywgJzonLCAnKScsICddJyBvciAnfScuICBOb3RlIHRoYXQKKwknYXV0b2luZGVudCcgbXVzdCBiZSBzZXQgdG9vLiAgRG9lc24ndCB3b3JrIHdlbGwgdG9nZXRoZXIgd2l0aCAiMiIuCisJRXhhbXBsZTogPgorCQkxLiB0aGUgZmlyc3QgaXRlbQorCQkgICB3cmFwcworCQkyLiB0aGUgc2Vjb25kIGl0ZW0KKzIJV2hlbiBmb3JtYXR0aW5nIHRleHQsIHVzZSB0aGUgaW5kZW50IG9mIHRoZSBzZWNvbmQgbGluZSBvZiBhIHBhcmFncmFwaAorCWZvciB0aGUgcmVzdCBvZiB0aGUgcGFyYWdyYXBoLCBpbnN0ZWFkIG9mIHRoZSBpbmRlbnQgb2YgdGhlIGZpcnN0CisJbGluZS4gIFRoaXMgc3VwcG9ydHMgcGFyYWdyYXBocyBpbiB3aGljaCB0aGUgZmlyc3QgbGluZSBoYXMgYQorCWRpZmZlcmVudCBpbmRlbnQgdGhhbiB0aGUgcmVzdC4gIE5vdGUgdGhhdCAnYXV0b2luZGVudCcgbXVzdCBiZSBzZXQKKwl0b28uICBFeGFtcGxlOiA+CisJCQlmaXJzdCBsaW5lIG9mIGEgcGFyYWdyYXBoCisJCXNlY29uZCBsaW5lIG9mIHRoZSBzYW1lIHBhcmFncmFwaAorCQl0aGlyZCBsaW5lLgordglWaS1jb21wYXRpYmxlIGF1dG8td3JhcHBpbmcgaW4gaW5zZXJ0IG1vZGU6IE9ubHkgYnJlYWsgYSBsaW5lIGF0IGEKKwlibGFuayB0aGF0IHlvdSBoYXZlIGVudGVyZWQgZHVyaW5nIHRoZSBjdXJyZW50IGluc2VydCBjb21tYW5kLiAgKE5vdGU6CisJdGhpcyBpcyBub3QgMTAwJSBWaSBjb21wYXRpYmxlLiAgVmkgaGFzIHNvbWUgInVuZXhwZWN0ZWQgZmVhdHVyZXMiIG9yCisJYnVncyBpbiB0aGlzIGFyZWEuICBJdCB1c2VzIHRoZSBzY3JlZW4gY29sdW1uIGluc3RlYWQgb2YgdGhlIGxpbmUKKwljb2x1bW4uKQorYglMaWtlICd2JywgYnV0IG9ubHkgYXV0by13cmFwIGlmIHlvdSBlbnRlciBhIGJsYW5rIGF0IG9yIGJlZm9yZQorCXRoZSB3cmFwIG1hcmdpbi4gIElmIHRoZSBsaW5lIHdhcyBsb25nZXIgdGhhbiAndGV4dHdpZHRoJyB3aGVuIHlvdQorCXN0YXJ0ZWQgdGhlIGluc2VydCwgb3IgeW91IGRvIG5vdCBlbnRlciBhIGJsYW5rIGluIHRoZSBpbnNlcnQgYmVmb3JlCisJcmVhY2hpbmcgJ3RleHR3aWR0aCcsIFZpbSBkb2VzIG5vdCBwZXJmb3JtIGF1dG8td3JhcHBpbmcuCitsCUxvbmcgbGluZXMgYXJlIG5vdCBicm9rZW4gaW4gaW5zZXJ0IG1vZGU6IFdoZW4gYSBsaW5lIHdhcyBsb25nZXIgdGhhbgorCSd0ZXh0d2lkdGgnIHdoZW4gdGhlIGluc2VydCBjb21tYW5kIHN0YXJ0ZWQsIFZpbSBkb2VzIG5vdAorCWF1dG9tYXRpY2FsbHkgZm9ybWF0IGl0LgorbQlBbHNvIGJyZWFrIGF0IGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgYWJvdmUgMjU1LiAgVGhpcyBpcyB1c2VmdWwgZm9yCisJQXNpYW4gdGV4dCB3aGVyZSBldmVyeSBjaGFyYWN0ZXIgaXMgYSB3b3JkIG9uIGl0cyBvd24uCitNCVdoZW4gam9pbmluZyBsaW5lcywgZG9uJ3QgaW5zZXJ0IGEgc3BhY2UgYmVmb3JlIG9yIGFmdGVyIGEgbXVsdGktYnl0ZQorCWNoYXJhY3Rlci4gIE92ZXJydWxlcyB0aGUgJ0InIGZsYWcuCitCCVdoZW4gam9pbmluZyBsaW5lcywgZG9uJ3QgaW5zZXJ0IGEgc3BhY2UgYmV0d2VlbiB0d28gbXVsdGktYnl0ZQorCWNoYXJhY3RlcnMuICBPdmVycnVsZWQgYnkgdGhlICdNJyBmbGFnLgorMQlEb24ndCBicmVhayBhIGxpbmUgYWZ0ZXIgYSBvbmUtbGV0dGVyIHdvcmQuICBJdCdzIGJyb2tlbiBiZWZvcmUgaXQKKwlpbnN0ZWFkIChpZiBwb3NzaWJsZSkuCisKKworV2l0aCAndCcgYW5kICdjJyB5b3UgY2FuIHNwZWNpZnkgd2hlbiBWaW0gcGVyZm9ybXMgYXV0by13cmFwcGluZzoKK3ZhbHVlCWFjdGlvbgl+CisiIglubyBhdXRvbWF0aWMgZm9ybWF0dGluZyAoeW91IGNhbiB1c2UgImdxIiBmb3IgbWFudWFsIGZvcm1hdHRpbmcpCisidCIJYXV0b21hdGljIGZvcm1hdHRpbmcgb2YgdGV4dCwgYnV0IG5vdCBjb21tZW50cworImMiCWF1dG9tYXRpYyBmb3JtYXR0aW5nIGZvciBjb21tZW50cywgYnV0IG5vdCB0ZXh0IChnb29kIGZvciBDIGNvZGUpCisidGMiCWF1dG9tYXRpYyBmb3JtYXR0aW5nIGZvciB0ZXh0IGFuZCBjb21tZW50cworCitOb3RlIHRoYXQgd2hlbiAndGV4dHdpZHRoJyBpcyAwLCBWaW0gZG9lcyBubyBmb3JtYXR0aW5nIGFueXdheSAoYnV0IGRvZXMKK2luc2VydCBjb21tZW50IGxlYWRlcnMgYWNjb3JkaW5nIHRvIHRoZSAnY29tbWVudHMnIG9wdGlvbikuCisKK05vdGUgdGhhdCB3aGVuICdwYXN0ZScgaXMgb24sIFZpbSBkb2VzIG5vIGZvcm1hdHRpbmcgYXQgYWxsLgorCitOb3RlIHRoYXQgJ3RleHR3aWR0aCcgY2FuIGJlIG5vbi16ZXJvIGV2ZW4gaWYgVmltIG5ldmVyIHBlcmZvcm1zIGF1dG8td3JhcHBpbmc7CisndGV4dHdpZHRoJyBpcyBzdGlsbCB1c2VmdWwgZm9yIGZvcm1hdHRpbmcgd2l0aCAiZ3EiLgorCitJZiB0aGUgJ2NvbW1lbnRzJyBvcHRpb24gaW5jbHVkZXMgIi8qIiwgIioiIGFuZC9vciAiKi8iLCB0aGVuIFZpbSBoYXMgc29tZQorYnVpbHQgaW4gc3R1ZmYgdG8gdHJlYXQgdGhlc2UgdHlwZXMgb2YgY29tbWVudHMgYSBiaXQgbW9yZSBjbGV2ZXJseS4KK09wZW5pbmcgYSBuZXcgbGluZSBiZWZvcmUgb3IgYWZ0ZXIgIi8qIiBvciAiKi8iICh3aXRoICdyJyBvciAnbycgcHJlc2VudCBpbgorJ2Zvcm1hdG9wdGlvbnMnKSBnaXZlcyB0aGUgY29ycmVjdCBzdGFydCBvZiB0aGUgbGluZSBhdXRvbWF0aWNhbGx5LiAgVGhlIHNhbWUKK2hhcHBlbnMgd2l0aCBmb3JtYXR0aW5nIGFuZCBhdXRvLXdyYXBwaW5nLiBPcGVuaW5nIGEgbGluZSBhZnRlciBhIGxpbmUKK3N0YXJ0aW5nIHdpdGggIi8qIiBvciAiKiIgYW5kIGNvbnRhaW5pbmcgIiovIiwgd2lsbCBjYXVzZSBubyBjb21tZW50IGxlYWRlciB0bworYmUgaW5zZXJ0ZWQsIGFuZCB0aGUgaW5kZW50IG9mIHRoZSBuZXcgbGluZSBpcyB0YWtlbiBmcm9tIHRoZSBsaW5lIGNvbnRhaW5pbmcKK3RoZSBzdGFydCBvZiB0aGUgY29tbWVudC4KK0UuZy46CisgICAgLyogfgorICAgICAqIFlvdXIgdHlwaWNhbCBjb21tZW50LiB+CisgICAgICovIH4KKyAgICBUaGUgaW5kZW50IG9uIHRoaXMgbGluZSBpcyB0aGUgc2FtZSBhcyB0aGUgc3RhcnQgb2YgdGhlIGFib3ZlCisgICAgY29tbWVudC4KKworQWxsIG9mIHRoaXMgc2hvdWxkIGJlIHJlYWxseSBjb29sLCBlc3BlY2lhbGx5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG5ldworOmF1dG9jbWQgY29tbWFuZCB0byBwcmVwYXJlIGRpZmZlcmVudCBzZXR0aW5ncyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIGZpbGUuCisKK1NvbWUgZXhhbXBsZXM6CisgIGZvciBDIGNvZGUgKG9ubHkgZm9ybWF0IGNvbW1lbnRzKTogPgorCTpzZXQgZm89Y3JvcQorPCBmb3IgTWFpbC9uZXdzCShmb3JtYXQgYWxsLCBkb24ndCBzdGFydCBjb21tZW50IHdpdGggIm8iIGNvbW1hbmQpOiA+CisJOnNldCBmbz10Y3JxCis8CisKK0F1dG9tYXRpYyBmb3JtYXR0aW5nCQkJCQkqYXV0by1mb3JtYXQqCisKK1doZW4gdGhlICdhJyBmbGFnIGlzIHByZXNlbnQgaW4gJ2Zvcm1hdG9wdGlvbnMnIHRleHQgaXMgZm9ybWF0dGVkCithdXRvbWF0aWNhbGx5IHdoZW4gaW5zZXJ0aW5nIHRleHQgb3IgZGVsZXRpbmcgdGV4dC4gIFRoaXMgd29ya3MgbmljZSBmb3IKK2VkaXRpbmcgdGV4dCBwYXJhZ3JhcGhzLiAgQSBmZXcgaGludHMgb24gaG93IHRvIHVzZSB0aGlzOgorCistIFlvdSBuZWVkIHRvIHByb3Blcmx5IGRlZmluZSBwYXJhZ3JhcGhzLiAgVGhlIHNpbXBsZXN0IGlzIHBhcmFncmFwaHMgdGhhdCBhcmUKKyAgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgbGluZS4gIFdoZW4gdGhlcmUgaXMgbm8gc2VwYXJhdGluZyBibGFuayBsaW5lLCBjb25zaWRlcgorICB1c2luZyB0aGUgJ3cnIGZsYWcgYW5kIGFkZGluZyBhIHNwYWNlIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lIGluIHRoZQorICBwYXJhZ3JhcGhzIGV4Y2VwdCB0aGUgbGFzdCBvbmUuCisKKy0gWW91IGNhbiBzZXQgdGhlICdmb3JtYXRvcHRpb25zJyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBmaWxlIHxmaWxldHlwZXwgb3IKKyAgc3BlY2lmaWNhbGx5IGZvciBvbmUgZmlsZSB3aXRoIGEgfG1vZGVsaW5lfC4KKworLSBTZXQgJ2Zvcm1hdG9wdGlvbnMnIHRvICJhdzJ0cSIgdG8gbWFrZSB0ZXh0IHdpdGggaW5kZW50cyBsaWtlIHRoaXM6CisKKwkgICAgYmxhIGJsYSBmb29iYXIgYmxhIAorCWJsYSBmb29iYXIgYmxhIGZvb2JhciBibGEKKwkgICAgYmxhIGJsYSBmb29iYXIgYmxhIAorCWJsYSBmb29iYXIgYmxhIGJsYSBmb29iYXIKKworLSBBZGQgdGhlICdjJyBmbGFnIHRvIG9ubHkgYXV0by1mb3JtYXQgY29tbWVudHMuICBVc2VmdWwgaW4gc291cmNlIGNvZGUuCisKK0FuZCBhIGZldyB3YXJuaW5nczoKKworLSBXaGVuIHBhcnQgb2YgdGhlIHRleHQgaXMgbm90IHByb3Blcmx5IHNlcGFyYXRlZCBpbiBwYXJhZ3JhcGhzLCBtYWtpbmcKKyAgY2hhbmdlcyBpbiB0aGlzIHRleHQgd2lsbCBjYXVzZSBpdCB0byBiZSBmb3JtYXR0ZWQgYW55d2F5LiAgQ29uc2lkZXIgZG9pbmcgPgorCisJOnNldCBmby09YQorCistIFdoZW4gdXNpbmcgdGhlICd3JyBmbGFnICh0cmFpbGluZyBzcGFjZSBtZWFucyBwYXJhZ3JhcGggY29udGludWVzKSBhbmQKKyAgZGVsZXRpbmcgdGhlIGxhc3QgbGluZSBvZiBhIHBhcmFncmFwaCB3aXRoIHxkZHwsIHRoZSBwYXJhZ3JhcGggd2lsbCBiZQorICBqb2luZWQgd2l0aCB0aGUgbmV4dCBvbmUuCisKKy0gQ2hhbmdlZCB0ZXh0IGlzIHNhdmVkIGZvciB1bmRvLiAgRm9ybWF0dGluZyBpcyBhbHNvIGEgY2hhbmdlLiAgVGh1cyBlYWNoCisgIGZvcm1hdCBhY3Rpb24gc2F2ZXMgdGV4dCBmb3IgdW5kby4gIFRoaXMgbWF5IGNvbnN1bWUgcXVpdGUgYSBsb3Qgb2YgbWVtb3J5LgorCistIEZvcm1hdHRpbmcgYSBsb25nIHBhcmFncmFwaCBhbmQvb3Igd2l0aCBjb21wbGljYXRlZCBpbmRlbnRpbmcgbWF5IGJlIHNsb3cuCisKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2NtZGxpbmUudHh0IGIvcnVudGltZS9kb2MvY21kbGluZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiMzViNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2NtZGxpbmUudHh0CkBAIC0wLDAgKzEsOTkyIEBACisqY21kbGluZS50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWFyIDMxCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworCQkJCSpDbWRsaW5lLW1vZGUqICpDb21tYW5kLWxpbmUtbW9kZSoKK0NvbW1hbmQtbGluZSBtb2RlCQkqQ21kbGluZSogKkNvbW1hbmQtbGluZSogKm1vZGUtY21kbGluZSogKjoqCisKK0NvbW1hbmQtbGluZSBtb2RlIGlzIHVzZWQgdG8gZW50ZXIgRXggY29tbWFuZHMgKCI6IiksIHNlYXJjaCBwYXR0ZXJucworKCIvIiBhbmQgIj8iKSwgYW5kIGZpbHRlciBjb21tYW5kcyAoIiEiKS4KKworQmFzaWMgY29tbWFuZCBsaW5lIGVkaXRpbmcgaXMgZXhwbGFpbmVkIGluIGNoYXB0ZXIgMjAgb2YgdGhlIHVzZXIgbWFudWFsCit8dXNyXzIwLnR4dHwuCisKKzEuIENvbW1hbmQtbGluZSBlZGl0aW5nCQl8Y21kbGluZS1lZGl0aW5nfAorMi4gQ29tbWFuZC1saW5lIGNvbXBsZXRpb24JfGNtZGxpbmUtY29tcGxldGlvbnwKKzMuIEV4IGNvbW1hbmQtbGluZXMJCXxjbWRsaW5lLWxpbmVzfAorNC4gRXggY29tbWFuZC1saW5lIHJhbmdlcwl8Y21kbGluZS1yYW5nZXN8Cis1LiBFeCBzcGVjaWFsIGNoYXJhY3RlcnMJfGNtZGxpbmUtc3BlY2lhbHwKKzYuIENvbW1hbmQtbGluZSB3aW5kb3cJCXxjbWRsaW5lLXdpbmRvd3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBDb21tYW5kLWxpbmUgZWRpdGluZwkJCQkJKmNtZGxpbmUtZWRpdGluZyoKKworTm9ybWFsbHkgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvciBwb3NpdGlvbi4gIFlvdSBjYW4KK21vdmUgYXJvdW5kIGluIHRoZSBjb21tYW5kLWxpbmUgd2l0aCB0aGUgbGVmdCBhbmQgcmlnaHQgY3Vyc29yIGtleXMuICBXaXRoIHRoZQorPEluc2VydD4ga2V5LCB5b3UgY2FuIHRvZ2dsZSBiZXR3ZWVuIGluc2VydGluZyBhbmQgb3ZlcnN0cmlraW5nIGNoYXJhY3RlcnMuCit7Vmk6IGNhbiBvbmx5IGFsdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgbGluZX0KKworTm90ZSB0aGF0IGlmIHlvdXIga2V5Ym9hcmQgZG9lcyBub3QgaGF2ZSB3b3JraW5nIGN1cnNvciBrZXlzIG9yIGFueSBvZiB0aGUKK290aGVyIHNwZWNpYWwga2V5cywgeW91IGNhbiB1c2UgIjpjbm9yZW1hcCIgdG8gZGVmaW5lIGFub3RoZXIga2V5IGZvciB0aGVtLgorRm9yIGV4YW1wbGUsIHRvIGRlZmluZSB0Y3NoIHN0eWxlIGVkaXRpbmcga2V5czoJCSp0Y3NoLXN0eWxlKiAgPgorCTpjbm9yZW1hcCA8Qy1BPiA8SG9tZT4KKwk6Y25vcmVtYXAgPEMtRj4gPFJpZ2h0PgorCTpjbm9yZW1hcCA8Qy1CPiA8TGVmdD4KKwk6Y25vcmVtYXAgPEVzYz5iIDxTLUxlZnQ+CisJOmNub3JlbWFwIDxFc2M+ZiA8Uy1SaWdodD4KKyg8PiBub3RhdGlvbiB8PD58OyB0eXBlIGFsbCB0aGlzIGxpdGVyYWxseSkKKworCQkJCQkJCSpjbWRsaW5lLXRvby1sb25nKgorV2hlbiB0aGUgY29tbWFuZCBsaW5lIGlzIGdldHRpbmcgbG9uZ2VyIHRoYW4gd2hhdCBmaXRzIG9uIHRoZSBzY3JlZW4sIG9ubHkgdGhlCitwYXJ0IHRoYXQgZml0cyB3aWxsIGJlIHNob3duLiAgVGhlIGN1cnNvciBjYW4gb25seSBtb3ZlIGluIHRoaXMgdmlzaWJsZSBwYXJ0LAordGh1cyB5b3UgY2Fubm90IGVkaXQgYmV5b25kIHRoYXQuCisKKwkJCQkJCSpjbWRsaW5lLWhpc3RvcnkqICpoaXN0b3J5KgorVGhlIGNvbW1hbmQtbGluZXMgdGhhdCB5b3UgZW50ZXIgYXJlIHJlbWVtYmVyZWQgaW4gYSBoaXN0b3J5IHRhYmxlLiAgWW91IGNhbgorcmVjYWxsIHRoZW0gd2l0aCB0aGUgdXAgYW5kIGRvd24gY3Vyc29yIGtleXMuICBUaGVyZSBhcmUgYWN0dWFsbHkgZm91cgoraGlzdG9yeSB0YWJsZXM6CistIG9uZSBmb3IgJzonIGNvbW1hbmRzCistIG9uZSBmb3Igc2VhcmNoIHN0cmluZ3MKKy0gb25lIGZvciBleHByZXNzaW9ucworLSBvbmUgZm9yIGlucHV0IGxpbmVzLCB0eXBlZCBmb3IgdGhlIHxpbnB1dCgpfCBmdW5jdGlvbi4KK1RoZXNlIGFyZSBjb21wbGV0ZWx5IHNlcGFyYXRlLiAgRWFjaCBoaXN0b3J5IGNhbiBvbmx5IGJlIGFjY2Vzc2VkIHdoZW4KK2VudGVyaW5nIHRoZSBzYW1lIHR5cGUgb2YgbGluZS4KK1VzZSB0aGUgJ2hpc3RvcnknIG9wdGlvbiB0byBzZXQgdGhlIG51bWJlciBvZiBsaW5lcyB0aGF0IGFyZSByZW1lbWJlcmVkCisoZGVmYXVsdDogMjApLgorTm90ZXM6CistIFdoZW4geW91IGVudGVyIGEgY29tbWFuZC1saW5lIHRoYXQgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBhbiBvbGRlciBvbmUsIHRoZQorICBvbGQgb25lIGlzIHJlbW92ZWQgKHRvIGF2b2lkIHJlcGVhdGVkIGNvbW1hbmRzIG1vdmluZyBvbGRlciBjb21tYW5kcyBvdXQgb2YKKyAgdGhlIGhpc3RvcnkpLgorLSBPbmx5IGNvbW1hbmRzIHRoYXQgYXJlIHR5cGVkIGFyZSByZW1lbWJlcmVkLiAgT25lcyB0aGF0IGNvbXBsZXRlbHkgY29tZSBmcm9tCisgIG1hcHBpbmdzIGFyZSBub3QgcHV0IGluIHRoZSBoaXN0b3J5CistIEFsbCBzZWFyY2hlcyBhcmUgcHV0IGluIHRoZSBzZWFyY2ggaGlzdG9yeSwgaW5jbHVkaW5nIHRoZSBvbmVzIHRoYXQgY29tZQorICBmcm9tIGNvbW1hbmRzIGxpa2UgIioiIGFuZCAiIyIuICBCdXQgZm9yIGEgbWFwcGluZywgb25seSB0aGUgbGFzdCBzZWFyY2ggaXMKKyAgcmVtZW1iZXJlZCAodG8gYXZvaWQgdGhhdCBsb25nIG1hcHBpbmdzIHRyYXNoIHRoZSBoaXN0b3J5KS4KK3tWaTogbm8gaGlzdG9yeX0KK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjbWRsaW5lX2hpc3R8IGZlYXR1cmV9CisKK1RoZXJlIGlzIGFuIGF1dG9tYXRpYyBjb21wbGV0aW9uIG9mIG5hbWVzIG9uIHRoZSBjb21tYW5kLWxpbmU7IHNlZQorfGNtZGxpbmUtY29tcGxldGlvbnwuCisKKwkJCQkJCQkqY19DVFJMLVYqCitDVFJMLVYJCUluc2VydCBuZXh0IG5vbi1kaWdpdCBsaXRlcmFsbHkuICBVcCB0byB0aHJlZSBkaWdpdHMgZm9ybSB0aGUKKwkJZGVjaW1hbCB2YWx1ZSBvZiBhIHNpbmdsZSBieXRlLiAgVGhlIG5vbi1kaWdpdCBhbmQgdGhlIHRocmVlCisJCWRpZ2l0cyBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIG1hcHBpbmcuICBUaGlzIHdvcmtzIHRoZSBzYW1lCisJCXdheSBhcyBpbiBJbnNlcnQgbW9kZSAoc2VlIGFib3ZlLCB8aV9DVFJMLVZ8KS4KKwkJTm90ZTogVW5kZXIgV2luZG93cyBDVFJMLVYgaXMgb2Z0ZW4gbWFwcGVkIHRvIHBhc3RlIHRleHQuCisJCVVzZSBDVFJMLVEgaW5zdGVhZCB0aGVuLgorCQkJCQkJCSpjX0NUUkwtUSoKK0NUUkwtUQkJU2FtZSBhcyBDVFJMLVYuICBCdXQgd2l0aCBzb21lIHRlcm1pbmFscyBpdCBpcyB1c2VkIGZvcgorCQljb250cm9sIGZsb3csIGl0IGRvZXNuJ3Qgd29yayB0aGVuLgorCisJCQkJCQkJKmNfPExlZnQ+KgorPExlZnQ+CQljdXJzb3IgbGVmdAorCQkJCQkJCSpjXzxSaWdodD4qCis8UmlnaHQ+CQljdXJzb3IgcmlnaHQKKwkJCQkJCQkqY188Uy1MZWZ0PioKKzxTLUxlZnQ+IG9yIDxDLUxlZnQ+CQkJCQkqY188Qy1MZWZ0PioKKwkJY3Vyc29yIG9uZSBXT1JEIGxlZnQKKwkJCQkJCQkqY188Uy1SaWdodD4qCis8Uy1SaWdodD4gb3IgPEMtUmlnaHQ+CQkJCQkqY188Qy1SaWdodD4qCisJCWN1cnNvciBvbmUgV09SRCByaWdodAorQ1RSTC1CIG9yIDxIb21lPgkJCQkJKmNfQ1RSTC1CKiAqY188SG9tZT4qCisJCWN1cnNvciB0byBiZWdpbm5pbmcgb2YgY29tbWFuZC1saW5lCitDVFJMLUUgb3IgPEVuZD4JCQkJCQkqY19DVFJMLUUqICpjXzxFbmQ+KgorCQljdXJzb3IgdG8gZW5kIG9mIGNvbW1hbmQtbGluZQorCisJCQkJCQkJKmNfPExlZnRNb3VzZT4qCis8TGVmdE1vdXNlPgljdXJzb3IgdG8gcG9zaXRpb24gb2YgbW91c2UgY2xpY2suCisKK0NUUkwtSAkJCQkJCQkqY188QlM+KiAqY19DVFJMLUgqCis8QlM+CQlkZWxldGUgdGhlIGNoYXJhY3RlciBpbiBmcm9udCBvZiB0aGUgY3Vyc29yIChzZWUgfDpmaXhkZWx8IGlmCisJCXlvdXIgPEJTPiBrZXkgZG9lcyBub3QgZG8gd2hhdCB5b3Ugd2FudCkuCisJCQkJCQkJKmNfPERlbD4qCis8RGVsPgkJZGVsZXRlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciAoYXQgZW5kIG9mIGxpbmU6CisJCWNoYXJhY3RlciBiZWZvcmUgdGhlIGN1cnNvcikgKHNlZSB8OmZpeGRlbHwgaWYgeW91ciA8RGVsPgorCQlrZXkgZG9lcyBub3QgZG8gd2hhdCB5b3Ugd2FudCkuCisJCQkJCQkJKmNfQ1RSTC1XKgorQ1RSTC1XCQlkZWxldGUgdGhlIHdvcmQgYmVmb3JlIHRoZSBjdXJzb3IKKwkJCQkJCQkqY19DVFJMLVUqCitDVFJMLVUJCXJlbW92ZSBhbGwgY2hhcmFjdGVycyBiZXR3ZWVuIHRoZSBjdXJzb3IgcG9zaXRpb24gYW5kCisJCXRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuICBQcmV2aW91cyB2ZXJzaW9ucyBvZiB2aW0KKwkJZGVsZXRlZCBhbGwgY2hhcmFjdGVycyBvbiB0aGUgbGluZS4gIElmIHRoYXQgaXMgdGhlCisJCXByZWZlcnJlZCBiZWhhdmlvciwgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciAudmltcmM6ID4KKwkJCTpjbm9yZW1hcCA8Qy1VPiA8Qy1FPjxDLVU+Cis8CisJCU5vdGU6IGlmIHRoZSBjb21tYW5kLWxpbmUgYmVjb21lcyBlbXB0eSB3aXRoIG9uZSBvZiB0aGUKKwkJZGVsZXRlIGNvbW1hbmRzLCBDb21tYW5kLWxpbmUgbW9kZSBpcyBxdWl0LgorCQkJCQkJCSpjXzxJbnNlcnQ+KgorPEluc2VydD4JVG9nZ2xlIGJldHdlZW4gaW5zZXJ0IGFuZCBvdmVyc3RyaWtlLiAge25vdCBpbiBWaX0KKwore2NoYXIxfSA8QlM+IHtjaGFyMn0Jb3IJCQkJKmNfZGlncmFwaCoKK0NUUkwtSyB7Y2hhcjF9IHtjaGFyMn0JCQkJCSpjX0NUUkwtSyoKKwkJZW50ZXIgZGlncmFwaCAoc2VlIHxkaWdyYXBoc3wpLiAgV2hlbiB7Y2hhcjF9IGlzIGEgc3BlY2lhbAorCQlrZXksIHRoZSBjb2RlIGZvciB0aGF0IGtleSBpcyBpbnNlcnRlZCBpbiA8PiBmb3JtLiAge25vdCBpbiBWaX0KKworQ1RSTC1SIHswLTlhLXoiJSM6LT0ufQkJCQkJKmNfQ1RSTC1SKiAqY188Qy1SPioKKwkJSW5zZXJ0IHRoZSBjb250ZW50cyBvZiBhIG51bWJlcmVkIG9yIG5hbWVkIHJlZ2lzdGVyLiAgQmV0d2VlbgorCQl0eXBpbmcgQ1RSTC1SIGFuZCB0aGUgc2Vjb25kIGNoYXJhY3RlciAnIicgd2lsbCBiZSBkaXNwbGF5ZWQKKwkJdG8gaW5kaWNhdGUgdGhhdCB5b3UgYXJlIGV4cGVjdGVkIHRvIGVudGVyIHRoZSBuYW1lIG9mIGEKKwkJcmVnaXN0ZXIuCisJCVRoZSB0ZXh0IGlzIGluc2VydGVkIGFzIGlmIHlvdSB0eXBlZCBpdCwgYnV0IG1hcHBpbmdzIGFuZAorCQlhYmJyZXZpYXRpb25zIGFyZSBub3QgdXNlZC4gIENvbW1hbmQtbGluZSBjb21wbGV0aW9uIHRocm91Z2gKKwkJJ3dpbGRjaGFyJyBpcyBub3QgdHJpZ2dlcmVkIHRob3VnaC4gIEFuZCBjaGFyYWN0ZXJzIHRoYXQgZW5kCisJCXRoZSBjb21tYW5kIGxpbmUgYXJlIGluc2VydGVkIGxpdGVyYWxseSAoPEVzYz4sIDxDUj4sIDxOTD4sCisJCTxDLUM+KS4gIEEgPEJTPiBvciBDVFJMLVcgY291bGQgc3RpbGwgZW5kIHRoZSBjb21tYW5kIGxpbmUKKwkJdGhvdWdoLCBhbmQgcmVtYWluaW5nIGNoYXJhY3RlcnMgd2lsbCB0aGVuIGJlIGludGVycHJldGVkIGluCisJCWFub3RoZXIgbW9kZSwgd2hpY2ggbWlnaHQgbm90IGJlIHdoYXQgeW91IGludGVuZGVkLgorCQlTcGVjaWFsIHJlZ2lzdGVyczoKKwkJCSciJwl0aGUgdW5uYW1lZCByZWdpc3RlciwgY29udGFpbmluZyB0aGUgdGV4dCBvZgorCQkJCXRoZSBsYXN0IGRlbGV0ZSBvciB5YW5rCisJCQknJScJdGhlIGN1cnJlbnQgZmlsZSBuYW1lCisJCQknIycJdGhlIGFsdGVybmF0ZSBmaWxlIG5hbWUKKwkJCScqJwl0aGUgY2xpcGJvYXJkIGNvbnRlbnRzIChYMTE6IHByaW1hcnkgc2VsZWN0aW9uKQorCQkJJysnCXRoZSBjbGlwYm9hcmQgY29udGVudHMKKwkJCScvJwl0aGUgbGFzdCBzZWFyY2ggcGF0dGVybgorCQkJJzonCXRoZSBsYXN0IGNvbW1hbmQtbGluZQorCQkJJy0nCXRoZSBsYXN0IHNtYWxsIChsZXNzIHRoYW4gYSBsaW5lKSBkZWxldGUKKwkJCScuJwl0aGUgbGFzdCBpbnNlcnRlZCB0ZXh0CisJCQkJCQkJKmNfQ1RSTC1SXz0qCisJCQknPScJdGhlIGV4cHJlc3Npb24gcmVnaXN0ZXI6IHlvdSBhcmUgcHJvbXB0ZWQgdG8KKwkJCQllbnRlciBhbiBleHByZXNzaW9uIChzZWUgfGV4cHJlc3Npb258KQorCQlTZWUgfHJlZ2lzdGVyc3wgYWJvdXQgcmVnaXN0ZXJzLiAge25vdCBpbiBWaX0KKworQ1RSTC1SIENUUkwtRgkJCQkqY19DVFJMLVJfQ1RSTC1GKiAqY188Qy1SPl88Qy1GPioKK0NUUkwtUiBDVFJMLVAJCQkJKmNfQ1RSTC1SX0NUUkwtUCogKmNfPEMtUj5fPEMtUD4qCitDVFJMLVIgQ1RSTC1XCQkJCSpjX0NUUkwtUl9DVFJMLVcqICpjXzxDLVI+XzxDLVc+KgorQ1RSTC1SIENUUkwtQQkJCQkqY19DVFJMLVJfQ1RSTC1BKiAqY188Qy1SPl88Qy1BPioKKwkJSW5zZXJ0IHRoZSBvYmplY3QgdW5kZXIgdGhlIGN1cnNvcjoKKwkJCUNUUkwtRgl0aGUgRmlsZW5hbWUgdW5kZXIgdGhlIGN1cnNvcgorCQkJQ1RSTC1QCXRoZSBGaWxlbmFtZSB1bmRlciB0aGUgY3Vyc29yLCBleHBhbmRlZCB3aXRoCisJCQkJJ3BhdGgnIGFzIGluIHxnZnwKKwkJCUNUUkwtVwl0aGUgV29yZCB1bmRlciB0aGUgY3Vyc29yCisJCQlDVFJMLUEJdGhlIFdPUkQgdW5kZXIgdGhlIGN1cnNvcjsgc2VlIHxXT1JEfAorCQl7bm90IGluIFZpfQorCQlDVFJMLUYgYW5kIENUUkwtUDoge29ubHkgd2hlbiArZmlsZV9pbl9wYXRoIGZlYXR1cmUgaXMKKwkJaW5jbHVkZWR9CisKKwkJCQkJKmNfQ1RSTC1SX0NUUkwtUiogKmNfPEMtUj5fPEMtUj4qCisJCQkJCSpjX0NUUkwtUl9DVFJMLU8qICpjXzxDLVI+XzxDLU8+KgorQ1RSTC1SIENUUkwtUiB7MC05YS16IiUjOi09LiBDVFJMLUYgQ1RSTC1QIENUUkwtVyBDVFJMLUF9CitDVFJMLVIgQ1RSTC1PIHswLTlhLXoiJSM6LT0uIENUUkwtRiBDVFJMLVAgQ1RSTC1XIENUUkwtQX0KKwkJSW5zZXJ0IHJlZ2lzdGVyIG9yIG9iamVjdCB1bmRlciB0aGUgY3Vyc29yLiAgV29ya3MgbGlrZQorCQl8Y19DVFJMLVJ8IGJ1dCBpbnNlcnRzIHRoZSB0ZXh0IGxpdGVyYWxseS4gIEZvciBleGFtcGxlLCBpZgorCQlyZWdpc3RlciBhIGNvbnRhaW5zICJ4eV5IeiIgKHdoZXJlIF5IIGlzIGEgYmFja3NwYWNlKSwKKwkJIkNUUkwtUiBhIiB3aWxsIGluc2VydCAieHoiIHdoaWxlICJDVFJMLVIgQ1RSTC1SIGEiIHdpbGwKKwkJaW5zZXJ0ICJ4eV5IeiIuCisKK0NUUkwtXCBlIHtleHByfQkJCQkJCSpjX0NUUkwtXF9lKgorCQlFdmFsdWF0ZSB7ZXhwcn0gYW5kIHJlcGxhY2UgdGhlIHdob2xlIGNvbW1hbmQgbGluZSB3aXRoIHRoZQorCQlyZXN1bHQuICBZb3Ugd2lsbCBiZSBwcm9tcHRlZCBmb3IgdGhlIGV4cHJlc3Npb24sIHR5cGUgPEVudGVyPgorCQl0byBmaW5pc2ggaXQuICBJdCdzIG1vc3QgdXNlZnVsIGluIG1hcHBpbmdzIHRob3VnaC4gIFNlZQorCQl8ZXhwcmVzc2lvbnwuCisJCVNlZSB8Y19DVFJMLVJfPXwgZm9yIGluc2VydGluZyB0aGUgcmVzdWx0IG9mIGFuIGV4cHJlc3Npb24uCisJCVVzZWZ1bCBmdW5jdGlvbnMgYXJlIHxnZXRjbWRsaW5lKCl8IGFuZCB8Z2V0Y21kcG9zKCl8LgorCQlUaGUgY3Vyc29yIHBvc2l0aW9uIGlzIHVuY2hhbmdlZCwgZXhjZXB0IHdoZW4gdGhlIGN1cnNvciB3YXMKKwkJYXQgdGhlIGVuZCBvZiB0aGUgbGluZSwgdGhlbiBpdCBzdGF5cyBhdCB0aGUgZW5kLgorCQl8c2V0Y21kcG9zKCl8IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgY3Vyc29yIHBvc2l0aW9uLgorCQlFeGFtcGxlOiA+CisJCQk6Y21hcCA8Rjc+IDxDLVw+ZUFwcGVuZFNvbWUoKTxDUj4KKwkJCTpmdW5jIEFwcGVuZFNvbWUoKQorCQkJICAgOmxldCBjbWQgPSBnZXRjbWRsaW5lKCkgLiAiIFNvbWUoKSIKKwkJCSAgIDoiIHBsYWNlIHRoZSBjdXJzb3Igb24gdGhlICkKKwkJCSAgIDpjYWxsIHNldGNtZHBvcyhzdHJsZW4oY21kKSkKKwkJCSAgIDpyZXR1cm4gY21kCisJCQk6ZW5kZnVuYworPAorCQkJCQkJCSpjX0NUUkwtWSoKK0NUUkwtWQkJV2hlbiB0aGVyZSBpcyBhIG1vZGVsZXNzIHNlbGVjdGlvbiwgY29weSB0aGUgc2VsZWN0aW9uIGludG8KKwkJdGhlIGNsaXBib2FyZC4gfG1vZGVsZXNzLXNlbGVjdGlvbnwKKwkJSWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uIENUUkwtWSBpcyBpbnNlcnRlZCBhcyBhIGNoYXJhY3Rlci4KKworQ1RSTC1KCQkJCQkJKmNfQ1RSTC1KKiAqY188Tkw+KiAqY188Q1I+KgorPENSPiBvciA8Tkw+CXN0YXJ0IGVudGVyZWQgY29tbWFuZAorCQkJCQkJCSpjXzxFc2M+KgorPEVzYz4JCVdoZW4gdHlwZWQgYW5kICd4JyBub3QgcHJlc2VudCBpbiAnY3BvcHRpb25zJywgcXVpdAorCQlDb21tYW5kLWxpbmUgbW9kZSB3aXRob3V0IGV4ZWN1dGluZy4gIEluIG1hY3JvcyBvciB3aGVuICd4JworCQlwcmVzZW50IGluICdjcG9wdGlvbnMnLCBzdGFydCBlbnRlcmVkIGNvbW1hbmQuCisJCQkJCQkJKmNfQ1RSTC1DKgorQ1RSTC1DCQlxdWl0IGNvbW1hbmQtbGluZSB3aXRob3V0IGV4ZWN1dGluZworCisJCQkJCQkJKmNfPFVwPioKKzxVcD4JCXJlY2FsbCBvbGRlciBjb21tYW5kLWxpbmUgZnJvbSBoaXN0b3J5LCB3aG9zZSBiZWdpbm5pbmcKKwkJbWF0Y2hlcyB0aGUgY3VycmVudCBjb21tYW5kLWxpbmUgKHNlZSBiZWxvdykuCisJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjbWRsaW5lX2hpc3R8CisJCWZlYXR1cmV9CisJCQkJCQkJKmNfPERvd24+KgorPERvd24+CQlyZWNhbGwgbW9yZSByZWNlbnQgY29tbWFuZC1saW5lIGZyb20gaGlzdG9yeSwgd2hvc2UgYmVnaW5uaW5nCisJCW1hdGNoZXMgdGhlIGN1cnJlbnQgY29tbWFuZC1saW5lIChzZWUgYmVsb3cpLgorCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY21kbGluZV9oaXN0fAorCQlmZWF0dXJlfQorCisJCQkJCQkJKmNfPFMtVXA+KiAqY188UGFnZVVwPioKKzxTLVVwPiBvciA8UGFnZVVwPgorCQlyZWNhbGwgb2xkZXIgY29tbWFuZC1saW5lIGZyb20gaGlzdG9yeQorCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY21kbGluZV9oaXN0fAorCQlmZWF0dXJlfQorCQkJCQkJKmNfPFMtRG93bj4qICpjXzxQYWdlRG93bj4qCis8Uy1Eb3duPiBvciA8UGFnZURvd24+CisJCXJlY2FsbCBtb3JlIHJlY2VudCBjb21tYW5kLWxpbmUgZnJvbSBoaXN0b3J5CisJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjbWRsaW5lX2hpc3R8CisJCWZlYXR1cmV9CisKK0NUUkwtRAkJY29tbWFuZC1saW5lIGNvbXBsZXRpb24gKHNlZSB8Y21kbGluZS1jb21wbGV0aW9ufCkKKyd3aWxkY2hhcicgb3B0aW9uCisJCWNvbW1hbmQtbGluZSBjb21wbGV0aW9uIChzZWUgfGNtZGxpbmUtY29tcGxldGlvbnwpCitDVFJMLU4JCWNvbW1hbmQtbGluZSBjb21wbGV0aW9uIChzZWUgfGNtZGxpbmUtY29tcGxldGlvbnwpCitDVFJMLVAJCWNvbW1hbmQtbGluZSBjb21wbGV0aW9uIChzZWUgfGNtZGxpbmUtY29tcGxldGlvbnwpCitDVFJMLUEJCWNvbW1hbmQtbGluZSBjb21wbGV0aW9uIChzZWUgfGNtZGxpbmUtY29tcGxldGlvbnwpCitDVFJMLUwJCWNvbW1hbmQtbGluZSBjb21wbGV0aW9uIChzZWUgfGNtZGxpbmUtY29tcGxldGlvbnwpCisKKwkJCQkJCQkqY19DVFJMLV8qCitDVFJMLV8JCWEgLSBzd2l0Y2ggYmV0d2VlbiBIZWJyZXcgYW5kIEVuZ2xpc2gga2V5Ym9hcmQgbW9kZSwgd2hpY2ggaXMKKwkJcHJpdmF0ZSB0byB0aGUgY29tbWFuZC1saW5lIGFuZCBub3QgcmVsYXRlZCB0byBoa21hcC4KKwkJVGhpcyBpcyB1c2VmdWwgd2hlbiBIZWJyZXcgdGV4dCBlbnRyeSBpcyByZXF1aXJlZCBpbiB0aGUKKwkJY29tbWFuZC1saW5lLCBzZWFyY2hlcywgYWJicmV2aWF0aW9ucywgZXRjLiAgQXBwbGllcyBvbmx5IGlmCisJCVZpbSBpcyBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwgZmVhdHVyZSBhbmQgdGhlCisJCSdhbGxvd3Jldmlucycgb3B0aW9uIGlzIHNldC4KKwkJU2VlIHxyaWxlZnQudHh0fC4KKworCQliIC0gc3dpdGNoIGJldHdlZW4gRmFyc2kgYW5kIEVuZ2xpc2gga2V5Ym9hcmQgbW9kZSwgd2hpY2ggaXMKKwkJcHJpdmF0ZSB0byB0aGUgY29tbWFuZC1saW5lIGFuZCBub3QgcmVsYXRlZCB0byBma21hcC4gIEluCisJCUZhcnNpIGtleWJvYXJkIG1vZGUgdGhlIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGluIHJldmVyc2UKKwkJaW5zZXJ0IG1hbm5lci4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gRmFyc2kgdGV4dCBlbnRyeSBpcworCQlyZXF1aXJlZCBpbiB0aGUgY29tbWFuZC1saW5lLCBzZWFyY2hlcywgYWJicmV2aWF0aW9ucywgZXRjLgorCQlBcHBsaWVzIG9ubHkgaWYgVmltIGlzIGNvbXBpbGVkIHdpdGggdGhlIHwrZmFyc2l8IGZlYXR1cmUuCisJCVNlZSB8ZmFyc2kudHh0fC4KKworCQkJCQkJCSpjX0NUUkwtXioKK0NUUkwtXgkJVG9nZ2xlIHRoZSB1c2Ugb2YgbGFuZ3VhZ2UgfDpsbWFwfCBtYXBwaW5ncyBhbmQvb3IgSW5wdXQKKwkJTWV0aG9kLgorCQlXaGVuIHR5cGluZyBhIHBhdHRlcm4gZm9yIGEgc2VhcmNoIGNvbW1hbmQgYW5kICdpbXNlYXJjaCcgaXMKKwkJbm90IC0xLCBWQUwgaXMgdGhlIHZhbHVlIG9mICdpbXNlYXJjaCcsIG90aGVyd2lzZSBWQUwgaXMgdGhlCisJCXZhbHVlIG9mICdpbWluc2VydCcuCisJCVdoZW4gbGFuZ3VhZ2UgbWFwcGluZ3MgYXJlIGRlZmluZWQ6CisJCS0gSWYgVkFMIGlzIDEgKGxhbmdtYXAgbWFwcGluZ3MgdXNlZCkgaXQgYmVjb21lcyAwIChubyBsYW5nbWFwCisJCSAgbWFwcGluZ3MgdXNlZCkuCisJCS0gSWYgVkFMIHdhcyBub3QgMSBpdCBiZWNvbWVzIDEsIHRodXMgbGFuZ21hcCBtYXBwaW5ncyBhcmUKKwkJICBlbmFibGVkLgorCQlXaGVuIG5vIGxhbmd1YWdlIG1hcHBpbmdzIGFyZSBkZWZpbmVkOgorCQktIElmIFZBTCBpcyAyIChJbnB1dCBNZXRob2QgaXMgdXNlZCkgaXQgYmVjb21lcyAwIChubyBpbnB1dAorCQkgIG1ldGhvZCB1c2VkKQorCQktIElmIFZBTCBoYXMgYW5vdGhlciB2YWx1ZSBpdCBiZWNvbWVzIDIsIHRodXMgdGhlIElucHV0IE1ldGhvZAorCQkgIGlzIGVuYWJsZWQuCisJCVRoZXNlIGxhbmd1YWdlIG1hcHBpbmdzIGFyZSBub3JtYWxseSB1c2VkIHRvIHR5cGUgY2hhcmFjdGVycworCQl0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSB3aGF0IHRoZSBrZXlib2FyZCBwcm9kdWNlcy4gIFRoZQorCQkna2V5bWFwJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gaW5zdGFsbCBhIHdob2xlIG51bWJlciBvZiB0aGVtLgorCQlXaGVuIGVudGVyaW5nIGEgY29tbWFuZCBsaW5lLCBsYW5nbWFwIG1hcHBpbmdzIGFyZSBzd2l0Y2hlZAorCQlvZmYsIHNpbmNlIHlvdSBhcmUgZXhwZWN0ZWQgdG8gdHlwZSBhIGNvbW1hbmQuICBBZnRlcgorCQlzd2l0Y2hpbmcgaXQgb24gd2l0aCBDVFJMLV4sIHRoZSBuZXcgc3RhdGUgaXMgbm90IHVzZWQgYWdhaW4KKwkJZm9yIHRoZSBuZXh0IGNvbW1hbmQgb3IgU2VhcmNoIHBhdHRlcm4uCisJCXtub3QgaW4gVml9CisKK0ZvciBFbWFjcy1zdHlsZSBlZGl0aW5nIG9uIHRoZSBjb21tYW5kLWxpbmUgc2VlIHxlbWFjcy1rZXlzfC4KKworVGhlIDxVcD4gYW5kIDxEb3duPiBrZXlzIHRha2UgdGhlIGN1cnJlbnQgY29tbWFuZC1saW5lIGFzIGEgc2VhcmNoIHN0cmluZy4KK1RoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQvcHJldmlvdXMgY29tbWFuZC1saW5lcyBhcmUgY29tcGFyZWQgd2l0aCB0aGlzCitzdHJpbmcuICBUaGUgZmlyc3QgbGluZSB0aGF0IG1hdGNoZXMgaXMgdGhlIG5ldyBjb21tYW5kLWxpbmUuICBXaGVuIHR5cGluZwordGhlc2UgdHdvIGtleXMgcmVwZWF0ZWRseSwgdGhlIHNhbWUgc3RyaW5nIGlzIHVzZWQgYWdhaW4uICBGb3IgZXhhbXBsZSwgdGhpcworY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgcHJldmlvdXMgc3Vic3RpdHV0ZSBjb21tYW5kOiBUeXBlICI6cyIgYW5kIHRoZW4gPFVwPi4KK1RoZSBzYW1lIGNvdWxkIGJlIGRvbmUgYnkgdHlwaW5nIDxTLVVwPiBhIG51bWJlciBvZiB0aW1lcyB1bnRpbCB0aGUgZGVzaXJlZAorY29tbWFuZC1saW5lIGlzIHNob3duLiAgKE5vdGU6IHRoZSBzaGlmdGVkIGFycm93IGtleXMgZG8gbm90IHdvcmsgb24gYWxsCit0ZXJtaW5hbHMpCisKKwkJCQkJCQkqaGlzKiAqOmhpc3RvcnkqCis6aGlzW3RvcnldCVByaW50IHRoZSBoaXN0b3J5IG9mIGxhc3QgZW50ZXJlZCBjb21tYW5kcy4KKwkJe25vdCBpbiBWaX0KKwkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NtZGxpbmVfaGlzdHwKKwkJZmVhdHVyZX0KKworOmhpc1t0b3J5XSBbe25hbWV9XSBbe2ZpcnN0fV1bLCBbe2xhc3R9XV0KKwkJTGlzdCB0aGUgY29udGVudHMgb2YgaGlzdG9yeSB7bmFtZX0gd2hpY2ggY2FuIGJlOgorCQljW21kXQkgb3IgOgljb21tYW5kLWxpbmUgaGlzdG9yeQorCQlzW2VhcmNoXSBvciAvCXNlYXJjaCBzdHJpbmcgaGlzdG9yeQorCQllW3hwcl0JIG9yID0JZXhwcmVzc2lvbiByZWdpc3RlciBoaXN0b3J5CisJCWlbbnB1dF0JIG9yIEAJaW5wdXQgbGluZSBoaXN0b3J5CisJCWFbbGxdCQlhbGwgb2YgdGhlIGFib3ZlCisJCXtub3QgaW4gVml9CisKKwkJSWYgdGhlIG51bWJlcnMge2ZpcnN0fSBhbmQvb3Ige2xhc3R9IGFyZSBnaXZlbiwgdGhlIHJlc3BlY3RpdmUKKwkJcmFuZ2Ugb2YgZW50cmllcyBmcm9tIGEgaGlzdG9yeSBpcyBsaXN0ZWQuICBUaGVzZSBudW1iZXJzIGNhbgorCQliZSBzcGVjaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBmb3JtOgorCQkJCQkJCSo6aGlzdG9yeS1pbmRleGluZyoKKwkJQSBwb3NpdGl2ZSBudW1iZXIgcmVwcmVzZW50cyB0aGUgYWJzb2x1dGUgaW5kZXggb2YgYW4gZW50cnkKKwkJYXMgaXQgaXMgZ2l2ZW4gaW4gdGhlIGZpcnN0IGNvbHVtbiBvZiBhIDpoaXN0b3J5IGxpc3RpbmcuCisJCVRoaXMgbnVtYmVyIHJlbWFpbnMgZml4ZWQgZXZlbiBpZiBvdGhlciBlbnRyaWVzIGFyZSBkZWxldGVkLgorCisJCUEgbmVnYXRpdmUgbnVtYmVyIG1lYW5zIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiBhbiBlbnRyeSwKKwkJY291bnRlZCBmcm9tIHRoZSBuZXdlc3QgZW50cnkgKHdoaWNoIGhhcyBpbmRleCAtMSkgYmFja3dhcmRzLgorCisJCUV4YW1wbGVzOgorCQlMaXN0IGVudHJpZXMgNiB0byAxMiBmcm9tIHRoZSBzZWFyY2ggaGlzdG9yeTogPgorCQkJOmhpc3RvcnkgLyA2LDEyCis8CisJCUxpc3QgdGhlIHJlY2VudCBmaXZlIGVudHJpZXMgZnJvbSBhbGwgaGlzdG9yaWVzOiA+CisJCQk6aGlzdG9yeSBhbGwgLTUsCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gQ29tbWFuZC1saW5lIGNvbXBsZXRpb24JCQkJKmNtZGxpbmUtY29tcGxldGlvbioKKworV2hlbiBlZGl0aW5nIHRoZSBjb21tYW5kLWxpbmUsIGEgZmV3IGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGNvbXBsZXRlIHRoZQord29yZCBiZWZvcmUgdGhlIGN1cnNvci4gIFRoaXMgaXMgYXZhaWxhYmxlIGZvcjoKKworLSBDb21tYW5kIG5hbWVzOiBBdCB0aGUgc3RhcnQgb2YgdGhlIGNvbW1hbmQtbGluZS4KKy0gVGFnczogT25seSBhZnRlciB0aGUgIjp0YWciIGNvbW1hbmQuCistIEZpbGUgbmFtZXM6IE9ubHkgYWZ0ZXIgYSBjb21tYW5kIHRoYXQgYWNjZXB0cyBhIGZpbGUgbmFtZSBvciBhIHNldHRpbmcgZm9yCisgIGFuIG9wdGlvbiB0aGF0IGNhbiBiZSBzZXQgdG8gYSBmaWxlIG5hbWUuICBUaGlzIGlzIGNhbGxlZCBmaWxlIG5hbWUKKyAgY29tcGxldGlvbi4KKy0gT3B0aW9uczogT25seSBhZnRlciB0aGUgIjpzZXQiIGNvbW1hbmQuCistIE1hcHBpbmdzOiBPbmx5IGFmdGVyIGEgIjptYXAiIG9yIHNpbWlsYXIgY29tbWFuZC4KKy0gVmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzOiBPbmx5IGFmdGVyIGEgIjppZiIsICI6Y2FsbCIgb3Igc2ltaWxhciBjb21tYW5kLgorCitXaGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCB0aGUgfCtjbWRsaW5lX2NvbXBsfCBmZWF0dXJlIGRpc2FibGVkLCBvbmx5IGZpbGUKK25hbWVzLCBkaXJlY3RvcmllcyBhbmQgaGVscCBpdGVtcyBjYW4gYmUgY29tcGxldGVkLgorCitUaGVzZSBhcmUgdGhlIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHVzZWQ6CisKKwkJCQkJCQkqY19DVFJMLUQqCitDVFJMLUQJCUxpc3QgbmFtZXMgdGhhdCBtYXRjaCB0aGUgcGF0dGVybiBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLgorCQlXaGVuIHNob3dpbmcgZmlsZSBuYW1lcywgZGlyZWN0b3JpZXMgYXJlIGhpZ2hsaWdodGVkIChzZWUKKwkJJ2hpZ2hsaWdodCcgb3B0aW9uKS4gIE5hbWVzIHdoZXJlICdzdWZmaXhlcycgbWF0Y2hlcyBhcmUgbW92ZWQKKwkJdG8gdGhlIGVuZC4KKwkJCQkJKmNfQ1RSTC1JKiAqY193aWxkY2hhciogKmNfPFRhYj4qCisnd2lsZGNoYXInIG9wdGlvbgorCQlBIG1hdGNoIGlzIGRvbmUgb24gdGhlIHBhdHRlcm4gaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4gIFRoZQorCQltYXRjaCAoaWYgdGhlcmUgYXJlIHNldmVyYWwsIHRoZSBmaXJzdCBtYXRjaCkgaXMgaW5zZXJ0ZWQKKwkJaW4gcGxhY2Ugb2YgdGhlIHBhdHRlcm4uICAoTm90ZTogZG9lcyBub3Qgd29yayBpbnNpZGUgYQorCQltYWNybywgYmVjYXVzZSA8VGFiPiBvciA8RXNjPiBhcmUgbW9zdGx5IHVzZWQgYXMgJ3dpbGRjaGFyJywKKwkJYW5kIHRoZXNlIGhhdmUgYSBzcGVjaWFsIG1lYW5pbmcgaW4gc29tZSBtYWNyb3MuKSBXaGVuIHR5cGVkCisJCWFnYWluIGFuZCB0aGVyZSB3ZXJlIG11bHRpcGxlIG1hdGNoZXMsIHRoZSBuZXh0CisJCW1hdGNoIGlzIGluc2VydGVkLiAgQWZ0ZXIgdGhlIGxhc3QgbWF0Y2gsIHRoZSBmaXJzdCBpcyB1c2VkCisJCWFnYWluICh3cmFwIGFyb3VuZCkuCisJCVRoZSBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZSAnd2lsZG1vZGUnIG9wdGlvbi4KKwkJCQkJCQkqY19DVFJMLU4qCitDVFJMLU4JCUFmdGVyIHVzaW5nICd3aWxkY2hhcicgd2hpY2ggZ290IG11bHRpcGxlIG1hdGNoZXMsIGdvIHRvIG5leHQKKwkJbWF0Y2guICBPdGhlcndpc2UgcmVjYWxsIG1vcmUgcmVjZW50IGNvbW1hbmQtbGluZSBmcm9tIGhpc3RvcnkuCis8Uy1UYWI+CQkJCQkJCSpjX0NUUkwtUCogKmNfPFMtVGFiPioKK0NUUkwtUAkJQWZ0ZXIgdXNpbmcgJ3dpbGRjaGFyJyB3aGljaCBnb3QgbXVsdGlwbGUgbWF0Y2hlcywgZ28gdG8KKwkJcHJldmlvdXMgbWF0Y2guICBPdGhlcndpc2UgcmVjYWxsIG9sZGVyIGNvbW1hbmQtbGluZSBmcm9tCisJCWhpc3RvcnkuICA8Uy1UYWI+IG9ubHkgd29ya3Mgd2l0aCB0aGUgR1VJLCBvbiB0aGUgQW1pZ2EgYW5kCisJCXdpdGggTVMtRE9TLgorCQkJCQkJCSpjX0NUUkwtQSoKK0NUUkwtQQkJQWxsIG5hbWVzIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4gaW4gZnJvbnQgb2YgdGhlIGN1cnNvciBhcmUKKwkJaW5zZXJ0ZWQuCisJCQkJCQkJKmNfQ1RSTC1MKgorQ1RSTC1MCQlBIG1hdGNoIGlzIGRvbmUgb24gdGhlIHBhdHRlcm4gaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4gIElmCisJCXRoZXJlIGlzIG9uZSBtYXRjaCwgaXQgaXMgaW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIHBhdHRlcm4uCisJCUlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtYXRjaGVzIHRoZSBsb25nZXN0IGNvbW1vbiBwYXJ0IGlzCisJCWluc2VydGVkIGluIHBsYWNlIG9mIHRoZSBwYXR0ZXJuLiAgSWYgdGhlIHJlc3VsdCBpcyBzaG9ydGVyCisJCXRoYW4gdGhlIHBhdHRlcm4sIG5vIGNvbXBsZXRpb24gaXMgZG9uZS4KKworVGhlICd3aWxkY2hhcicgb3B0aW9uIGRlZmF1bHRzIHRvIDxUYWI+IChDVFJMLUUgd2hlbiBpbiBWaSBjb21wYXRpYmxlIG1vZGU7IGluCithIHByZXZpb3VzIHZlcnNpb24gPEVzYz4gd2FzIHVzZWQpLiAgSW4gdGhlIHBhdHRlcm4gc3RhbmRhcmQgd2lsZGNhcmRzICcqJyBhbmQKKyc/JyBhcmUgYWNjZXB0ZWQuICAnKicgbWF0Y2hlcyBhbnkgc3RyaW5nLCAnPycgbWF0Y2hlcyBleGFjdGx5IG9uZSBjaGFyYWN0ZXIuCisKK0lmIHlvdSBsaWtlIHRjc2gncyBhdXRvbGlzdCBjb21wbGV0aW9uLCB5b3UgY2FuIHVzZSB0aGlzIG1hcHBpbmc6CisJOmNub3JlbWFwIFggPEMtTD48Qy1EPgorKFdoZXJlIFggaXMgdGhlIGNvbW1hbmQga2V5IHRvIHVzZSwgPEMtTD4gaXMgQ1RSTC1MIGFuZCA8Qy1EPiBpcyBDVFJMLUQpCitUaGlzIHdpbGwgZmluZCB0aGUgbG9uZ2VzdCBtYXRjaCBhbmQgdGhlbiBsaXN0IGFsbCBtYXRjaGluZyBmaWxlcy4KKworSWYgeW91IGxpa2UgdGNzaCdzIGF1dG9saXN0IGNvbXBsZXRpb24sIHlvdSBjYW4gdXNlIHRoZSAnd2lsZG1vZGUnIG9wdGlvbiB0bworZW11bGF0ZSBpdC4gIEZvciBleGFtcGxlLCB0aGlzIG1pbWljcyBhdXRvbGlzdD1hbWJpZ3VvdXM6CisJOnNldCB3aWxkbW9kZT1sb25nZXN0LGxpc3QKK1RoaXMgd2lsbCBmaW5kIHRoZSBsb25nZXN0IG1hdGNoIHdpdGggdGhlIGZpcnN0ICd3aWxkY2hhcicsIHRoZW4gbGlzdCBhbGwKK21hdGNoaW5nIGZpbGVzIHdpdGggdGhlIG5leHQuCisKKwkJCQkJCQkqc3VmZml4ZXMqCitGb3IgZmlsZSBuYW1lIGNvbXBsZXRpb24geW91IGNhbiB1c2UgdGhlICdzdWZmaXhlcycgb3B0aW9uIHRvIHNldCBhIHByaW9yaXR5CitiZXR3ZWVuIGZpbGVzIHdpdGggYWxtb3N0IHRoZSBzYW1lIG5hbWUuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgbWF0Y2hlcywKK3Rob3NlIGZpbGVzIHdpdGggYW4gZXh0ZW5zaW9uIHRoYXQgaXMgaW4gdGhlICdzdWZmaXhlcycgb3B0aW9uIGFyZSBpZ25vcmVkLgorVGhlIGRlZmF1bHQgaXMgIi5iYWssfiwubywuaCwuaW5mbywuc3dwLC5vYmoiLCB3aGljaCBtZWFucyB0aGF0IGZpbGVzIGVuZGluZworaW4gIi5iYWsiLCAifiIsICIubyIsICIuaCIsICIuaW5mbyIsICIuc3dwIiBhbmQgIi5vYmoiIGFyZSBzb21ldGltZXMgaWdub3JlZC4KK0l0IGlzIGltcG9zc2libGUgdG8gaWdub3JlIHN1ZmZpeGVzIHdpdGggdHdvIGRvdHMuICBFeGFtcGxlczoKKworICBwYXR0ZXJuOglmaWxlczoJCQkJbWF0Y2g6CX4KKyAgIHRlc3QqCXRlc3QuYyB0ZXN0LmggdGVzdC5vCQl0ZXN0LmMKKyAgIHRlc3QqCXRlc3QuaCB0ZXN0Lm8JCQl0ZXN0LmggYW5kIHRlc3QubworICAgdGVzdCoJdGVzdC5pIHRlc3QuaCB0ZXN0LmMJCXRlc3QuaSBhbmQgdGVzdC5jCisKK0lmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgZmlsZSAoYWZ0ZXIgaWdub3JpbmcgdGhlIG9uZXMgbWF0Y2hpbmcKK3RoZSAnc3VmZml4ZXMnIG9wdGlvbikgdGhlIGZpcnN0IGZpbGUgbmFtZSBpcyBpbnNlcnRlZC4gIFlvdSBjYW4gc2VlIHRoYXQKK3RoZXJlIGlzIG9ubHkgb25lIG1hdGNoIHdoZW4geW91IHR5cGUgJ3dpbGRjaGFyJyB0d2ljZSBhbmQgdGhlIGNvbXBsZXRlZAorbWF0Y2ggc3RheXMgdGhlIHNhbWUuICBZb3UgY2FuIGdldCB0byB0aGUgb3RoZXIgbWF0Y2hlcyBieSBlbnRlcmluZworJ3dpbGRjaGFyJywgQ1RSTC1OIG9yIENUUkwtUC4gIEFsbCBmaWxlcyBhcmUgaW5jbHVkZWQsIGFsc28gdGhlIG9uZXMgd2l0aAorZXh0ZW5zaW9ucyBtYXRjaGluZyB0aGUgJ3N1ZmZpeGVzJyBvcHRpb24uCisKK1RvIGNvbXBsZXRlbHkgaWdub3JlIGZpbGVzIHdpdGggc29tZSBleHRlbnNpb24gdXNlICd3aWxkaWdub3JlJy4KKworVGhlIG9sZCB2YWx1ZSBvZiBhbiBvcHRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGhpdHRpbmcgJ3dpbGRjaGFyJyBqdXN0IGFmdGVyCit0aGUgJz0nLiAgRm9yIGV4YW1wbGUsIHR5cGluZyAnd2lsZGNoYXInIGFmdGVyICI6c2V0IGRpcj0iIHdpbGwgaW5zZXJ0IHRoZQorY3VycmVudCB2YWx1ZSBvZiAnZGlyJy4gIFRoaXMgb3ZlcnJ1bGVzIGZpbGUgbmFtZSBjb21wbGV0aW9uIGZvciB0aGUgb3B0aW9ucwordGhhdCB0YWtlIGEgZmlsZSBuYW1lLgorCitJZiB5b3Ugd291bGQgbGlrZSB1c2luZyA8Uy1UYWI+IGZvciBDVFJMLVAgaW4gYW4geHRlcm0sIHB1dCB0aGlzIGNvbW1hbmQgaW4KK3lvdXIgLmNzaHJjOiA+CisJeG1vZG1hcCAtZSAia2V5c3ltIFRhYiA9IFRhYiBGaW5kIgorQW5kIHRoaXMgaW4geW91ciAudmltcmM6ID4KKwk6Y21hcCA8RXNjPlsxfiA8Qy1QPgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIEV4IGNvbW1hbmQtbGluZXMJCQkJCSpjbWRsaW5lLWxpbmVzKgorCitUaGUgRXggY29tbWFuZHMgaGF2ZSBhIGZldyBzcGVjaWFsdGllczoKKworCQkJCQkJCSo6cXVvdGUqCisnIicgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSBjYXVzZXMgdGhlIHdob2xlIGxpbmUgdG8gYmUgaWdub3JlZC4gICciJworYWZ0ZXIgYSBjb21tYW5kIGNhdXNlcyB0aGUgcmVzdCBvZiB0aGUgbGluZSB0byBiZSBpZ25vcmVkLiAgVGhpcyBjYW4gYmUgdXNlZAordG8gYWRkIGNvbW1lbnRzLiAgRXhhbXBsZTogPgorCTpzZXQgYWkJCSJzZXQgJ2F1dG9pbmRlbnQnIG9wdGlvbgorSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFkZCBhIGNvbW1lbnQgdG8gYSBzaGVsbCBjb21tYW5kICI6IWNtZCIgb3IgdG8gdGhlCisiOm1hcCIgY29tbWFuZCBhbmQgZnJpZW5kcywgYmVjYXVzZSB0aGV5IHNlZSB0aGUgJyInIGFzIHBhcnQgb2YgdGhlaXIKK2FyZ3VtZW50LgorCisJCQkJCQkJKjpiYXIqICo6XGJhcioKKyd8JyBjYW4gYmUgdXNlZCB0byBzZXBhcmF0ZSBjb21tYW5kcywgc28geW91IGNhbiBnaXZlIG11bHRpcGxlIGNvbW1hbmRzIGluIG9uZQorbGluZS4gIElmIHlvdSB3YW50IHRvIHVzZSAnfCcgaW4gYW4gYXJndW1lbnQsIHByZWNlZGUgaXQgd2l0aCAnXCcuCisKK1RoZXNlIGNvbW1hbmRzIHNlZSB0aGUgJ3wnIGFzIHRoZWlyIGFyZ3VtZW50LCBhbmQgY2FuIHRoZXJlZm9yZSBub3QgYmUKK2ZvbGxvd2VkIGJ5IGFub3RoZXIgY29tbWFuZDoKKyAgICA6YXJnZG8KKyAgICA6YXV0b2NtZAorICAgIDpidWZkbworICAgIDpjb21tYW5kCisgICAgOmNzY29wZQorICAgIDpkZWJ1ZworICAgIDpmb2xkZG9vcGVuCisgICAgOmZvbGRkb2Nsb3NlZAorICAgIDpmdW5jdGlvbgorICAgIDpnbG9iYWwKKyAgICA6aGVscAorICAgIDpoZWxwZmluZAorICAgIDptYWtlCisgICAgOm5vcm1hbAorICAgIDpwZXJsCisgICAgOnBlcmxkbworICAgIDpwcm9tcHRmaW5kCisgICAgOnByb21wdHJlcGwKKyAgICA6cHlmaWxlCisgICAgOnB5dGhvbgorICAgIDpyZWdpc3RlcnMKKyAgICA6cmVhZCAhCisgICAgOnNjc2NvcGUKKyAgICA6dGNsCisgICAgOnRjbGRvCisgICAgOnRjbGZpbGUKKyAgICA6dmdsb2JhbAorICAgIDp3aW5kbworICAgIDp3cml0ZSAhCisgICAgOltyYW5nZV0hCisgICAgYSB1c2VyIGRlZmluZWQgY29tbWFuZCB3aXRob3V0IHRoZSAiLWJhciIgYXJndW1lbnQgfDpjb21tYW5kfAorCitOb3RlIHRoYXQgdGhpcyBpcyBjb25mdXNpbmcgKGluaGVyaXRlZCBmcm9tIFZpKTogV2l0aCAiOmciIHRoZSAnfCcgaXMgaW5jbHVkZWQKK2luIHRoZSBjb21tYW5kLCB3aXRoICI6cyIgaXQgaXMgbm90LgorCitUbyBiZSBhYmxlIHRvIHVzZSBhbm90aGVyIGNvbW1hbmQgYW55d2F5LCB1c2UgdGhlICI6ZXhlY3V0ZSIgY29tbWFuZC4KK0V4YW1wbGUgKGFwcGVuZCB0aGUgb3V0cHV0IG9mICJscyIgYW5kIGp1bXAgdG8gdGhlIGZpcnN0IGxpbmUpOiA+CisJOmV4ZWN1dGUgJ3IgIWxzJyB8ICdbCisKK1RoZXJlIGlzIG9uZSBleGNlcHRpb246IFdoZW4gdGhlICdiJyBmbGFnIGlzIHByZXNlbnQgaW4gJ2Nwb3B0aW9ucycsIHdpdGggdGhlCisiOm1hcCIgYW5kICI6YWJiciIgY29tbWFuZHMgYW5kIGZyaWVuZHMgQ1RSTC1WIG5lZWRzIHRvIGJlIHVzZWQgaW5zdGVhZCBvZgorJ1wnLiAgWW91IGNhbiBhbHNvIHVzZSAiPEJhcj4iIGluc3RlYWQuICBTZWUgYWxzbyB8bWFwX2JhcnwuCisKK0V4YW1wbGVzOiA+CisJOiFscyB8IHdjCQl2aWV3IHRoZSBvdXRwdXQgb2YgdHdvIGNvbW1hbmRzCisJOnIgIWxzIHwgd2MJCWluc2VydCB0aGUgc2FtZSBvdXRwdXQgaW4gdGhlIHRleHQKKwk6JWcvZm9vL3B8PgkJbW92ZXMgYWxsIG1hdGNoaW5nIGxpbmVzIG9uZSBzaGlmdHdpZHRoCisJOiVzL2Zvby9iYXIvfD4JCW1vdmVzIG9uZSBsaW5lIG9uZSBzaGlmdHdpZHRoCisJOm1hcCBxIDEwXlZ8CQltYXAgInEiIHRvICIxMHwiCisJOm1hcCBxIDEwXHwgbWFwIFwgbAltYXAgInEiIHRvICIxMFwiIGFuZCBtYXAgIlwiIHRvICJsIgorCQkJCQkod2hlbiAnYicgaXMgcHJlc2VudCBpbiAnY3BvcHRpb25zJykKKworWW91IGNhbiBhbHNvIHVzZSA8Tkw+IHRvIHNlcGFyYXRlIGNvbW1hbmRzIGluIHRoZSBzYW1lIHdheSBhcyB3aXRoICd8Jy4gIFRvCitpbnNlcnQgYSA8Tkw+IHVzZSBDVFJMLVYgQ1RSTC1KLiAgIl5AIiB3aWxsIGJlIHNob3duLiAgVXNpbmcgJ3wnIGlzIHRoZQorcHJlZmVycmVkIG1ldGhvZC4gIEJ1dCBmb3IgZXh0ZXJuYWwgY29tbWFuZHMgYSA8Tkw+IG11c3QgYmUgdXNlZCwgYmVjYXVzZSBhCisnfCcgaXMgaW5jbHVkZWQgaW4gdGhlIGV4dGVybmFsIGNvbW1hbmQuICBUbyBhdm9pZCB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mIDxOTD4KK2l0IG11c3QgYmUgcHJlY2VkZWQgd2l0aCBhIGJhY2tzbGFzaC4gIEV4YW1wbGU6ID4KKwk6ciAhZGF0ZTxOTD4tam9pbgorVGhpcyByZWFkcyB0aGUgY3VycmVudCBkYXRlIGludG8gdGhlIGZpbGUgYW5kIGpvaW5zIGl0IHdpdGggdGhlIHByZXZpb3VzIGxpbmUuCisKK05vdGUgdGhhdCB3aGVuIHRoZSBjb21tYW5kIGJlZm9yZSB0aGUgJ3wnIGdlbmVyYXRlcyBhbiBlcnJvciwgdGhlIGZvbGxvd2luZworY29tbWFuZHMgd2lsbCBub3QgYmUgZXhlY3V0ZWQuCisKKworQmVjYXVzZSBvZiBWaSBjb21wYXRpYmlsaXR5IHRoZSBmb2xsb3dpbmcgc3RyYW5nZSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkOiA+CisJOnwJCQlwcmludCBjdXJyZW50IGxpbmUgKGxpa2UgIjpwIikKKwk6M3wJCQlwcmludCBsaW5lIDMgKGxpa2UgIjozcCIpCisJOjMJCQlnb3RvIGxpbmUgMworCitBIGNvbG9uIGlzIGFsbG93ZWQgYmV0d2VlbiB0aGUgcmFuZ2UgYW5kIHRoZSBjb21tYW5kIG5hbWUuICBJdCBpcyBpZ25vcmVkCisodGhpcyBpcyBWaSBjb21wYXRpYmxlKS4gIEZvciBleGFtcGxlOiA+CisJOjEsJDpzL3BhdC9zdHJpbmcKKworV2hlbiB0aGUgY2hhcmFjdGVyICclJyBvciAnIycgaXMgdXNlZCB3aGVyZSBhIGZpbGUgbmFtZSBpcyBleHBlY3RlZCwgdGhleSBhcmUKK2V4cGFuZGVkIHRvIHRoZSBjdXJyZW50IGFuZCBhbHRlcm5hdGUgZmlsZSBuYW1lIChzZWUgdGhlIGNoYXB0ZXIgImVkaXRpbmcKK2ZpbGVzIiB8Ol8lfCB8Ol8jfCkuCisKK0VtYmVkZGVkIHNwYWNlcyBpbiBmaWxlIG5hbWVzIGFyZSBhbGxvd2VkIG9uIHRoZSBBbWlnYSBpZiBvbmUgZmlsZSBuYW1lIGlzCitleHBlY3RlZCBhcyBhcmd1bWVudC4gIFRyYWlsaW5nIHNwYWNlcyB3aWxsIGJlIGlnbm9yZWQsIHVubGVzcyBlc2NhcGVkIHdpdGggYQorYmFja3NsYXNoIG9yIENUUkwtVi4gIE5vdGUgdGhhdCB0aGUgIjpuZXh0IiBjb21tYW5kIHVzZXMgc3BhY2VzIHRvIHNlcGFyYXRlCitmaWxlIG5hbWVzLiAgRXNjYXBlIHRoZSBzcGFjZXMgdG8gaW5jbHVkZSB0aGVtIGluIGEgZmlsZSBuYW1lLiAgRXhhbXBsZTogPgorCTpuZXh0IGZvb1wgYmFyIGdvZXNcIHRvIHNjaG9vbFwKK3N0YXJ0cyBlZGl0aW5nIHRoZSB0aHJlZSBmaWxlcyAiZm9vIGJhciIsICJnb2VzIHRvIiBhbmQgInNjaG9vbCAiLgorCitXaGVuIHlvdSB3YW50IHRvIHVzZSB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzICciJyBvciAnfCcgaW4gYSBjb21tYW5kLCBvciB3YW50Cit0byB1c2UgJyUnIG9yICcjJyBpbiBhIGZpbGUgbmFtZSwgcHJlY2VkZSB0aGVtIHdpdGggYSBiYWNrc2xhc2guICBUaGUKK2JhY2tzbGFzaCBpcyBub3QgcmVxdWlyZWQgaW4gYSByYW5nZSBhbmQgaW4gdGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZC4KKworCQkJCQkJCSo6XyEqCitUaGUgJyEnIChiYW5nKSBjaGFyYWN0ZXIgYWZ0ZXIgYW4gRXggY29tbWFuZCBtYWtlcyB0aGUgY29tbWFuZCBiZWhhdmUgaW4gYQorZGlmZmVyZW50IHdheS4gIFRoZSAnIScgc2hvdWxkIGJlIHBsYWNlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29tbWFuZCwgd2l0aG91dAorYW55IGJsYW5rcyBpbiBiZXR3ZWVuLiAgSWYgeW91IGluc2VydCBibGFua3MgdGhlICchJyB3aWxsIGJlIHNlZW4gYXMgYW4KK2FyZ3VtZW50IGZvciB0aGUgY29tbWFuZCwgd2hpY2ggaGFzIGEgZGlmZmVyZW50IG1lYW5pbmcuICBGb3IgZXhhbXBsZToKKwk6dyEgbmFtZQl3cml0ZSB0aGUgY3VycmVudCBidWZmZXIgdG8gZmlsZSAibmFtZSIsIG92ZXJ3cml0aW5nCisJCQlhbnkgZXhpc3RpbmcgZmlsZQorCTp3ICFuYW1lCXNlbmQgdGhlIGN1cnJlbnQgYnVmZmVyIGFzIHN0YW5kYXJkIGlucHV0IHRvIGNvbW1hbmQKKwkJCSJuYW1lIgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIEV4IGNvbW1hbmQtbGluZSByYW5nZXMJKmNtZGxpbmUtcmFuZ2VzKiAqW3JhbmdlXSogKkUxNiogKkU0OTMqCisKK1NvbWUgRXggY29tbWFuZHMgYWNjZXB0IGEgbGluZSByYW5nZSBpbiBmcm9udCBvZiB0aGVtLiAgVGhpcyBpcyBub3RlZCBhcworW3JhbmdlXS4gIEl0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGxpbmUgc3BlY2lmaWVycywgc2VwYXJhdGVkIHdpdGggJywnIG9yCisnOycuCisKK1RoZSBiYXNpY3MgYXJlIGV4cGxhaW5lZCBpbiBzZWN0aW9uIHwxMC4zfCBvZiB0aGUgdXNlciBtYW51YWwuCisKKwkJCQkJCSo6LCogKjo7KgorV2hlbiBzZXBhcmF0ZWQgd2l0aCAnOycgdGhlIGN1cnNvciBwb3NpdGlvbiB3aWxsIGJlIHNldCB0byB0aGF0IGxpbmUKK2JlZm9yZSBpbnRlcnByZXRpbmcgdGhlIG5leHQgbGluZSBzcGVjaWZpZXIuICBUaGlzIGRvZXNuJ3QgaGFwcGVuIGZvciAnLCcuCitFeGFtcGxlczogPgorICAgNCwvdGhpcyBsaW5lLworPAlmcm9tIGxpbmUgNCB0aWxsIG1hdGNoIHdpdGggInRoaXMgbGluZSIgYWZ0ZXIgdGhlIGN1cnNvciBsaW5lLiA+CisgICA1Oy90aGF0IGxpbmUvCis8CWZyb20gbGluZSA1IHRpbGwgbWF0Y2ggd2l0aCAidGhhdCBsaW5lIiBhZnRlciBsaW5lIDUuCisKK1RoZSBkZWZhdWx0IGxpbmUgc3BlY2lmaWVyIGZvciBtb3N0IGNvbW1hbmRzIGlzIHRoZSBjdXJzb3IgcG9zaXRpb24sIGJ1dCB0aGUKK2NvbW1hbmRzICI6d3JpdGUiIGFuZCAiOmdsb2JhbCIgaGF2ZSB0aGUgd2hvbGUgZmlsZSAoMSwkKSBhcyBkZWZhdWx0LgorCitJZiBtb3JlIGxpbmUgc3BlY2lmaWVycyBhcmUgZ2l2ZW4gdGhhbiByZXF1aXJlZCBmb3IgdGhlIGNvbW1hbmQsIHRoZSBmaXJzdAorb25lKHMpIHdpbGwgYmUgaWdub3JlZC4KKworTGluZSBudW1iZXJzIG1heSBiZSBzcGVjaWZpZWQgd2l0aDoJCSo6cmFuZ2UqICpFMTQqICp7YWRkcmVzc30qCisJe251bWJlcn0JYW4gYWJzb2x1dGUgbGluZSBudW1iZXIKKwkuCQl0aGUgY3VycmVudCBsaW5lCQkJICAqOi4qCisJJAkJdGhlIGxhc3QgbGluZSBpbiB0aGUgZmlsZQkJICAqOiQqCisJJQkJZXF1YWwgdG8gMSwkICh0aGUgZW50aXJlIGZpbGUpCQkgICo6JSoKKwkndAkJcG9zaXRpb24gb2YgbWFyayB0IChsb3dlcmNhc2UpCQkgICo6JyoKKwknVAkJcG9zaXRpb24gb2YgbWFyayBUICh1cHBlcmNhc2UpOyB3aGVuIHRoZSBtYXJrIGlzIGluCisJCQlhbm90aGVyIGZpbGUgaXQgY2Fubm90IGJlIHVzZWQgaW4gYSByYW5nZQorCS97cGF0dGVybn1bL10JdGhlIG5leHQgbGluZSB3aGVyZSB7cGF0dGVybn0gbWF0Y2hlcwkgICo6LyoKKwk/e3BhdHRlcm59Wz9dCXRoZSBwcmV2aW91cyBsaW5lIHdoZXJlIHtwYXR0ZXJufSBtYXRjaGVzICo6PyoKKwlcLwkJdGhlIG5leHQgbGluZSB3aGVyZSB0aGUgcHJldmlvdXNseSB1c2VkIHNlYXJjaAorCQkJcGF0dGVybiBtYXRjaGVzCisJXD8JCXRoZSBwcmV2aW91cyBsaW5lIHdoZXJlIHRoZSBwcmV2aW91c2x5IHVzZWQgc2VhcmNoCisJCQlwYXR0ZXJuIG1hdGNoZXMKKwlcJgkJdGhlIG5leHQgbGluZSB3aGVyZSB0aGUgcHJldmlvdXNseSB1c2VkIHN1YnN0aXR1dGUKKwkJCXBhdHRlcm4gbWF0Y2hlcworCitFYWNoIG1heSBiZSBmb2xsb3dlZCAoc2V2ZXJhbCB0aW1lcykgYnkgJysnIG9yICctJyBhbmQgYW4gb3B0aW9uYWwgbnVtYmVyLgorVGhpcyBudW1iZXIgaXMgYWRkZWQgb3Igc3VidHJhY3RlZCBmcm9tIHRoZSBwcmVjZWRpbmcgbGluZSBudW1iZXIuICBJZiB0aGUKK251bWJlciBpcyBvbWl0dGVkLCAxIGlzIHVzZWQuCisKK1RoZSAiLyIgYW5kICI/IiBhZnRlciB7cGF0dGVybn0gYXJlIHJlcXVpcmVkIHRvIHNlcGFyYXRlIHRoZSBwYXR0ZXJuIGZyb20KK2FueXRoaW5nIHRoYXQgZm9sbG93cy4KKworVGhlICIvIiBhbmQgIj8iIG1heSBiZSBwcmVjZWRlZCB3aXRoIGFub3RoZXIgYWRkcmVzcy4gIFRoZSBzZWFyY2ggc3RhcnRzIGZyb20KK3RoZXJlLiAgVGhlIGRpZmZlcmVuY2UgZnJvbSB1c2luZyAnOycgaXMgdGhhdCB0aGUgY3Vyc29yIGlzbid0IG1vdmVkLgorRXhhbXBsZXM6ID4KKwkvcGF0MS8vcGF0Mi8JRmluZCBsaW5lIGNvbnRhaW5pbmcgInBhdDIiIGFmdGVyIGxpbmUgY29udGFpbmluZworCQkJInBhdDEiLCB3aXRob3V0IG1vdmluZyB0aGUgY3Vyc29yLgorCTc7L3BhdDIvCUZpbmQgbGluZSBjb250YWluaW5nICJwYXQyIiwgYWZ0ZXIgbGluZSA3LCBsZWF2aW5nCisJCQl0aGUgY3Vyc29yIGluIGxpbmUgNy4KKworVGhlIHtudW1iZXJ9IG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBmaWxlLiAgV2hlbgordXNpbmcgYSAwICh6ZXJvKSB0aGlzIGlzIGludGVycHJldGVkIGFzIGEgMSBieSBtb3N0IGNvbW1hbmRzLiAgQ29tbWFuZHMgdGhhdAordXNlIGl0IGFzIGEgY291bnQgZG8gdXNlIGl0IGFzIGEgemVybyAofDp0YWd8LCB8OnBvcHwsIGV0YykuICBTb21lIGNvbW1hbmRzCitpbnRlcnByZXQgdGhlIHplcm8gYXMgImJlZm9yZSB0aGUgZmlyc3QgbGluZSIgKHw6cmVhZHwsIHNlYXJjaCBwYXR0ZXJuLCBldGMpLgorCitFeGFtcGxlczogPgorCS4rMwkJdGhyZWUgbGluZXMgYmVsb3cgdGhlIGN1cnNvcgorCS90aGF0LysxCXRoZSBsaW5lIGJlbG93IHRoZSBuZXh0IGxpbmUgY29udGFpbmluZyAidGhhdCIKKwkuLCQJCWZyb20gY3VycmVudCBsaW5lIHVudGlsIGVuZCBvZiBmaWxlCisJMDsvdGhhdAkJdGhlIGZpcnN0IGxpbmUgY29udGFpbmluZyAidGhhdCIsIGFsc28gbWF0Y2hlcyBpbiB0aGUKKwkJCWZpcnN0IGxpbmUuCisJMTsvdGhhdAkJdGhlIGZpcnN0IGxpbmUgYWZ0ZXIgbGluZSAxIGNvbnRhaW5pbmcgInRoYXQiCisKK1NvbWUgY29tbWFuZHMgYWxsb3cgZm9yIGEgY291bnQgYWZ0ZXIgdGhlIGNvbW1hbmQuICBUaGlzIGNvdW50IGlzIHVzZWQgYXMgdGhlCitudW1iZXIgb2YgbGluZXMgdG8gYmUgdXNlZCwgc3RhcnRpbmcgd2l0aCB0aGUgbGluZSBnaXZlbiBpbiB0aGUgbGFzdCBsaW5lCitzcGVjaWZpZXIgKHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJzb3IgbGluZSkuICBUaGUgY29tbWFuZHMgdGhhdCBhY2NlcHQgYSBjb3VudAorYXJlIHRoZSBvbmVzIHRoYXQgdXNlIGEgcmFuZ2UgYnV0IGRvIG5vdCBoYXZlIGEgZmlsZSBuYW1lIGFyZ3VtZW50IChiZWNhdXNlCithIGZpbGUgbmFtZSBjYW4gYWxzbyBiZSBhIG51bWJlcikuCisKK0V4YW1wbGVzOiA+CisJOnMveC9YL2cgNQlzdWJzdGl0dXRlICd4JyBieSAnWCcgaW4gdGhlIGN1cnJlbnQgbGluZSBhbmQgZm91cgorCQkJZm9sbG93aW5nIGxpbmVzCisJOjIzZCA0CQlkZWxldGUgbGluZXMgMjMsIDI0LCAyNSBhbmQgMjYKKworCitGb2xkcyBhbmQgUmFuZ2UKKworV2hlbiBmb2xkcyBhcmUgYWN0aXZlIHRoZSBsaW5lIG51bWJlcnMgYXJlIHJvdW5kZWQgb2ZmIHRvIGluY2x1ZGUgdGhlIHdob2xlCitjbG9zZWQgZm9sZC4gIFNlZSB8Zm9sZC1iZWhhdmlvcnwuCisKKworUmV2ZXJzZSBSYW5nZQorCitBIHJhbmdlIHNob3VsZCBoYXZlIHRoZSBsb3dlciBsaW5lIG51bWJlciBmaXJzdC4gIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBWaW0KK3dpbGwgYXNrIHlvdSBpZiBpdCBzaG91bGQgc3dhcCB0aGUgbGluZSBudW1iZXJzLiAgVGhpcyBpcyBub3QgZG9uZSB3aXRoaW4gdGhlCitnbG9iYWwgY29tbWFuZCAiOmciLgorCisKK0NvdW50IGFuZCBSYW5nZQkJCQkJCSpOOioKKworV2hlbiBnaXZpbmcgYSBjb3VudCBiZWZvcmUgZW50ZXJpbmcgIjoiLCB0aGlzIGlzIHRyYW5zbGF0ZWQgaW50bzoKKwkJOi4sLisoY291bnQgLSAxKQorSW4gd29yZHM6IFRoZSAnY291bnQnIGxpbmVzIGF0IGFuZCBhZnRlciB0aGUgY3Vyc29yLiAgRXhhbXBsZTogVG8gZGVsZXRlCit0aHJlZSBsaW5lczogPgorCQkzOmQ8Q1I+CQlpcyB0cmFuc2xhdGVkIGludG86IC4sLisyZDxDUj4KKzwKKworVmlzdWFsIE1vZGUgYW5kIFJhbmdlCQkJCQkqdl86KgorCit7VmlzdWFsfToJU3RhcnRzIGEgY29tbWFuZC1saW5lIHdpdGggdGhlIFZpc3VhbCBzZWxlY3RlZCBsaW5lcyBhcyBhCisJCXJhbmdlLiAgVGhlIGNvZGUgIjonPCwnPiIgaXMgdXNlZCBmb3IgdGhpcyByYW5nZSwgd2hpY2ggbWFrZXMKKwkJaXQgcG9zc2libGUgdG8gc2VsZWN0IGEgc2ltaWxhciBsaW5lIGZyb20gdGhlIGNvbW1hbmQtbGluZQorCQloaXN0b3J5IGZvciByZXBlYXRpbmcgYSBjb21tYW5kIG9uIGRpZmZlcmVudCBWaXN1YWxseSBzZWxlY3RlZAorCQlsaW5lcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBFeCBzcGVjaWFsIGNoYXJhY3RlcnMJCQkJKmNtZGxpbmUtc3BlY2lhbCoKKworSW4gRXggY29tbWFuZHMsIGF0IHBsYWNlcyB3aGVyZSBhIGZpbGUgbmFtZSBjYW4gYmUgdXNlZCwgdGhlIGZvbGxvd2luZworY2hhcmFjdGVycyBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nLiAgVGhlc2UgY2FuIGFsc28gYmUgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbgorZnVuY3Rpb24gZXhwYW5kKCkgfGV4cGFuZCgpfC4KKwklCWlzIHJlcGxhY2VkIHdpdGggdGhlIGN1cnJlbnQgZmlsZSBuYW1lCQkJKjpfJSoKKwkjCWlzIHJlcGxhY2VkIHdpdGggdGhlIGFsdGVybmF0ZSBmaWxlIG5hbWUJCSo6XyMqCisJI24JKHdoZXJlIG4gaXMgYSBudW1iZXIpIGlzIHJlcGxhY2VkIHdpdGggdGhlIGZpbGUgbmFtZSBvZgorCQlidWZmZXIgbi4gICIjMCIgaXMgdGhlIHNhbWUgYXMgIiMiCisJIyMJaXMgcmVwbGFjZWQgd2l0aCBhbGwgbmFtZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QJCSo6XyMjKgorCQljb25jYXRlbmF0ZWQsIHNlcGFyYXRlZCBieSBzcGFjZXMuICBFYWNoIHNwYWNlIGluIGEgbmFtZQorCQlpcyBwcmVjZWRlZCB3aXRoIGEgYmFja3NsYXNoLgorTm90ZSB0aGF0IHRoZXNlIGdpdmUgdGhlIGZpbGUgbmFtZSBhcyBpdCB3YXMgdHlwZWQuICBJZiBhbiBhYnNvbHV0ZSBwYXRoIGlzCituZWVkZWQgKHdoZW4gdXNpbmcgdGhlIGZpbGUgbmFtZSBmcm9tIGEgZGlmZmVyZW50IGRpcmVjdG9yeSksIHlvdSBuZWVkIHRvIGFkZAorIjpwIi4gIFNlZSB8ZmlsZW5hbWUtbW9kaWZpZXJzfC4KK05vdGUgdGhhdCBiYWNrc2xhc2hlcyBhcmUgaW5zZXJ0ZWQgYmVmb3JlIHNwYWNlcywgc28gdGhhdCB0aGUgY29tbWFuZCB3aWxsCitjb3JyZWN0bHkgaW50ZXJwcmV0IHRoZSBmaWxlIG5hbWUuICBCdXQgdGhpcyBkb2Vzbid0IGhhcHBlbiBmb3Igc2hlbGwKK2NvbW1hbmRzLiAgRm9yIHRob3NlIHlvdSBwcm9iYWJseSBoYXZlIHRvIHVzZSBxdW90ZXM6ID4KKwk6IWxzICIlIgorCTpyICFzcGVsbCAiJSIKKworVG8gYXZvaWQgdGhlIHNwZWNpYWwgbWVhbmluZyBvZiAnJScgYW5kICcjJyBpbnNlcnQgYSBiYWNrc2xhc2ggYmVmb3JlIGl0LgorRGV0YWlsOiBUaGUgc3BlY2lhbCBtZWFuaW5nIGlzIGFsd2F5cyBlc2NhcGVkIHdoZW4gdGhlcmUgaXMgYSBiYWNrc2xhc2ggYmVmb3JlCitpdCwgbm8gbWF0dGVyIGhvdyBtYW55IGJhY2tzbGFzaGVzLgorCXlvdSB0eXBlOgkJcmVzdWx0CX4KKwkgICAjCQkJYWx0ZXJuYXRlLmZpbGUKKwkgICBcIwkJCSMKKwkgICBcXCMJCQlcIworCisJCQkgICAgICAgKjo8Y3dvcmQ+KiAqOjxjV09SRD4qICo6PGNmaWxlPiogKjxjZmlsZT4qCisJCQkgICAgICAgKjo8c2ZpbGU+KiAqPHNmaWxlPiogKjo8YWZpbGU+KiAqPGFmaWxlPioKKwkJCSAgICAgICAqOjxhYnVmPiogKjxhYnVmPiogKjo8YW1hdGNoPiogKjxhbWF0Y2g+KgorCQkJICAgICAgICpFNDk1KiAqRTQ5NiogKkU0OTcqICpFNDk4KiAqRTQ5OSogKkU1MDAqCitOb3RlOiB0aGVzZSBhcmUgdHlwZWQgbGl0ZXJhbGx5LCB0aGV5IGFyZSBub3Qgc3BlY2lhbCBrZXlzIQorCTxjd29yZD4gICAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yIChsaWtlIHxzdGFyfCkKKwk8Y1dPUkQ+ICAgIGlzIHJlcGxhY2VkIHdpdGggdGhlIFdPUkQgdW5kZXIgdGhlIGN1cnNvciAoc2VlIHxXT1JEfCkKKwk8Y2ZpbGU+ICAgIGlzIHJlcGxhY2VkIHdpdGggdGhlIHBhdGggbmFtZSB1bmRlciB0aGUgY3Vyc29yIChsaWtlIHdoYXQKKwkJICAgfGdmfCB1c2VzKQorCTxhZmlsZT4gICAgd2hlbiBleGVjdXRpbmcgYXV0b2NvbW1hbmRzLCBpcyByZXBsYWNlZCB3aXRoIHRoZSBmaWxlIG5hbWUKKwkJICAgZm9yIGEgZmlsZSByZWFkIG9yIHdyaXRlCisJPGFidWY+ICAgICB3aGVuIGV4ZWN1dGluZyBhdXRvY29tbWFuZHMsIGlzIHJlcGxhY2VkIHdpdGggdGhlIGN1cnJlbnRseQorCQkgICBlZmZlY3RpdmUgYnVmZmVyIG51bWJlciAoZm9yICI6ciBmaWxlIiBpdCBpcyB0aGUgY3VycmVudAorCQkgICBidWZmZXIsIHRoZSBmaWxlIGJlaW5nIHJlYWQgaXMgbm90IGluIGEgYnVmZmVyKS4KKwk8YW1hdGNoPiAgIHdoZW4gZXhlY3V0aW5nIGF1dG9jb21tYW5kcywgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbWF0Y2ggZm9yCisJCSAgIHdoaWNoIHRoaXMgYXV0b2NvbW1hbmQgd2FzIGV4ZWN1dGVkLiAgSXQgZGlmZmVycyBmb3JtCisJCSAgIDxhZmlsZT4gb25seSB3aGVuIHRoZSBmaWxlIG5hbWUgaXNuJ3QgdXNlZCB0byBtYXRjaCB3aXRoCisJCSAgIChmb3IgRmlsZVR5cGUgYW5kIFN5bnRheCBldmVudHMpLgorCTxzZmlsZT4gICAgd2hlbiBleGVjdXRpbmcgYSAiOnNvdXJjZSIgY29tbWFuZCwgaXMgcmVwbGFjZWQgd2l0aCB0aGUKKwkJICAgZmlsZSBuYW1lIG9mIHRoZSBzb3VyY2VkIGZpbGU7CisJCSAgIHdoZW4gZXhlY3V0aW5nIGEgZnVuY3Rpb24sIGlzIHJlcGxhY2VkIHdpdGgKKwkJICAgImZ1bmN0aW9uIHtmdW5jdGlvbi1uYW1lfSI7IGZ1bmN0aW9uIGNhbGwgbmVzdGluZyBpcworCQkgICBpbmRpY2F0ZWQgbGlrZSB0aGlzOgorCQkgICAiZnVuY3Rpb24ge2Z1bmN0aW9uLW5hbWUxfS4ue2Z1bmN0aW9uLW5hbWUyfSIuICBOb3RlIHRoYXQKKwkJICAgZmlsZW5hbWUtbW9kaWZpZXJzIGFyZSB1c2VsZXNzIHdoZW4gPHNmaWxlPiBpcyB1c2VkIGluc2lkZQorCQkgICBhIGZ1bmN0aW9uLgorCisJCQkJCQkJICpmaWxlbmFtZS1tb2RpZmllcnMqCisJICo6XyU6KiAqOjo4KiAqOjpwKiAqOjouKiAqOjp+KiAqOjpoKiAqOjp0KiAqOjpyKiAqOjplKiAqOjpzKiAqOjpncyoKK1RoZSBmaWxlIG5hbWUgbW9kaWZpZXJzIGNhbiBiZSB1c2VkIGFmdGVyICIlIiwgIiMiLCAiI24iLCAiPGNmaWxlPiIsICI8c2ZpbGU+IiwKKyI8YWZpbGU+IiBvciAiPGFidWY+Ii4gIFRoZXkgYXJlIGFsc28gdXNlZCB3aXRoIHRoZSB8Zm5hbWVtb2RpZnkoKXwgZnVuY3Rpb24uCitUaGVzZSBhcmUgbm90IGF2YWlsYWJsZSB3aGVuIFZpbSBoYXMgYmVlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K21vZGlmeV9mbmFtZXwKK2ZlYXR1cmUuCitUaGVzZSBtb2RpZmllcnMgY2FuIGJlIGdpdmVuLCBpbiB0aGlzIG9yZGVyOgorCTpwCU1ha2UgZmlsZSBuYW1lIGEgZnVsbCBwYXRoLiAgTXVzdCBiZSB0aGUgZmlyc3QgbW9kaWZpZXIuICBBbHNvCisJCWNoYW5nZXMgIn4vIiAoYW5kICJ+dXNlci8iIGZvciBVbml4IGFuZCBWTVMpIHRvIHRoZSBwYXRoIGZvcgorCQl0aGUgaG9tZSBkaXJlY3RvcnkuICBJZiB0aGUgbmFtZSBpcyBhIGRpcmVjdG9yeSBhIHBhdGgKKwkJc2VwYXJhdG9yIGlzIGFkZGVkIGF0IHRoZSBlbmQuICBGb3IgYSBmaWxlIG5hbWUgdGhhdCBkb2VzIG5vdAorCQlleGlzdCBhbmQgZG9lcyBub3QgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIHRoZSByZXN1bHQgaXMKKwkJdW5wcmVkaWN0YWJsZS4KKwk6OAlDb252ZXJ0cyB0aGUgcGF0aCB0byA4LjMgc2hvcnQgZm9ybWF0IChjdXJyZW50bHkgb25seSBvbgorCQl3aW4zMikuICBXaWxsIGFjdCBvbiBhcyBtdWNoIG9mIGEgcGF0aCB0aGF0IGlzIGFuIGV4aXN0aW5nCisJCXBhdGguCisJOn4JUmVkdWNlIGZpbGUgbmFtZSB0byBiZSByZWxhdGl2ZSB0byB0aGUgaG9tZSBkaXJlY3RvcnksIGlmCisJCXBvc3NpYmxlLiAgRmlsZSBuYW1lIGlzIHVubW9kaWZpZWQgaWYgaXQgaXMgbm90IGJlbG93IHRoZSBob21lCisJCWRpcmVjdG9yeS4KKwk6LglSZWR1Y2UgZmlsZSBuYW1lIHRvIGJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgZGlyZWN0b3J5LCBpZgorCQlwb3NzaWJsZS4gIEZpbGUgbmFtZSBpcyB1bm1vZGlmaWVkIGlmIGl0IGlzIG5vdCBiZWxvdyB0aGUKKwkJY3VycmVudCBkaXJlY3RvcnkuCisJCUZvciBtYXhpbXVtIHNob3J0bmVzcywgdXNlICI6fjouIi4KKwk6aAlIZWFkIG9mIHRoZSBmaWxlIG5hbWUgKHRoZSBsYXN0IGNvbXBvbmVudCBhbmQgYW55IHNlcGFyYXRvcnMKKwkJcmVtb3ZlZCkuICBDYW5ub3QgYmUgdXNlZCB3aXRoIDplLCA6ciBvciA6dC4KKwkJQ2FuIGJlIHJlcGVhdGVkIHRvIHJlbW92ZSBzZXZlcmFsIGNvbXBvbmVudHMgYXQgdGhlIGVuZC4KKwkJV2hlbiB0aGUgZmlsZSBuYW1lIGVuZHMgaW4gYSBwYXRoIHNlcGFyYXRvciwgb25seSB0aGUgcGF0aAorCQlzZXBhcmF0b3IgaXMgcmVtb3ZlZC4gIFRodXMgIjpwOmgiIG9uIGEgZGlyZWN0b3J5IG5hbWUgcmVzdWx0cworCQlvbiB0aGUgZGlyZWN0b3J5IG5hbWUgaXRzZWxmICh3aXRob3V0IHRyYWlsaW5nIHNsYXNoKS4KKwkJV2hlbiB0aGUgZmlsZSBuYW1lIGlzIGFuIGFic29sdXRlIHBhdGggKHN0YXJ0cyB3aXRoICIvIiBmb3IKKwkJVW5peDsgIng6XCIgZm9yIE1TLURPUywgV0lOMzIsIE9TLzI7ICJkcml2ZToiIGZvciBBbWlnYSksIHRoYXQKKwkJcGFydCBpcyBub3QgcmVtb3ZlZC4gIFdoZW4gdGhlcmUgaXMgbm8gaGVhZCAocGF0aCBpcyByZWxhdGl2ZQorCQl0byBjdXJyZW50IGRpcmVjdG9yeSkgdGhlIHJlc3VsdCBpcyBlbXB0eS4KKwk6dAlUYWlsIG9mIHRoZSBmaWxlIG5hbWUgKGxhc3QgY29tcG9uZW50IG9mIHRoZSBuYW1lKS4gIE11c3QKKwkJcHJlY2VkZSBhbnkgOnIgb3IgOmUuCisJOnIJUm9vdCBvZiB0aGUgZmlsZSBuYW1lICh0aGUgbGFzdCBleHRlbnNpb24gcmVtb3ZlZCkuICBXaGVuCisJCXRoZXJlIGlzIG9ubHkgYW4gZXh0ZW5zaW9uIChmaWxlIG5hbWUgdGhhdCBzdGFydHMgd2l0aCAnLicsCisJCWUuZy4sICIudmltcmMiKSwgaXQgaXMgbm90IHJlbW92ZWQuICBDYW4gYmUgcmVwZWF0ZWQgdG8gcmVtb3ZlCisJCXNldmVyYWwgZXh0ZW5zaW9ucyAobGFzdCBvbmUgZmlyc3QpLgorCTplCUV4dGVuc2lvbiBvZiB0aGUgZmlsZSBuYW1lLiAgT25seSBtYWtlcyBzZW5zZSB3aGVuIHVzZWQgYWxvbmUuCisJCVdoZW4gdGhlcmUgaXMgbm8gZXh0ZW5zaW9uIHRoZSByZXN1bHQgaXMgZW1wdHkuCisJCVdoZW4gdGhlcmUgaXMgb25seSBhbiBleHRlbnNpb24gKGZpbGUgbmFtZSB0aGF0IHN0YXJ0cyB3aXRoCisJCScuJyksIHRoZSByZXN1bHQgaXMgZW1wdHkuICBDYW4gYmUgcmVwZWF0ZWQgdG8gaW5jbHVkZSBtb3JlCisJCWV4dGVuc2lvbnMuICBJZiB0aGVyZSBhcmUgbm90IGVub3VnaCBleHRlbnNpb25zIChidXQgYXQgbGVhc3QKKwkJb25lKSBhcyBtdWNoIGFzIHBvc3NpYmxlIGFyZSBpbmNsdWRlZC4KKwk6cz9wYXQ/c3ViPworCQlTdWJzdGl0dXRlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICJwYXQiIHdpdGggInN1YiIuICBUaGlzCisJCXdvcmtzIGxpa2UgdGhlIHw6c3wgY29tbWFuZC4gICJwYXQiIGlzIGEgcmVndWxhciBleHByZXNzaW9uLgorCQlBbnkgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIGZvciAnPycsIGJ1dCBpdCBtdXN0IG5vdCBvY2N1ciBpbgorCQkicGF0IiBvciAic3ViIi4KKwkJQWZ0ZXIgdGhpcywgdGhlIHByZXZpb3VzIG1vZGlmaWVycyBjYW4gYmUgdXNlZCBhZ2Fpbi4gIEZvcgorCQlleGFtcGxlICI6cCIsIHRvIG1ha2UgYSBmdWxsIHBhdGggYWZ0ZXIgdGhlIHN1YnN0aXR1dGlvbi4KKwk6Z3M/cGF0P3N1Yj8KKwkJU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMgb2YgInBhdGgiIHdpdGggInN1YiIuICBPdGhlcndpc2UKKwkJdGhpcyB3b3JrcyBsaWtlICI6cyIuCisKK0V4YW1wbGVzLCB3aGVuIHRoZSBmaWxlIG5hbWUgaXMgInNyYy92ZXJzaW9uLmMiLCBjdXJyZW50IGRpcgorIi9ob21lL21vb2wvdmltIjogPgorICA6cAkJCS9ob21lL21vb2wvdmltL3NyYy92ZXJzaW9uLmMKKyAgOnA6LgkJCQkgICAgICAgc3JjL3ZlcnNpb24uYworICA6cDp+CQkJCSB+L3ZpbS9zcmMvdmVyc2lvbi5jCisgIDpoCQkJCSAgICAgICBzcmMKKyAgOnA6aAkJCS9ob21lL21vb2wvdmltL3NyYworICA6cDpoOmgJCS9ob21lL21vb2wvdmltCisgIDp0CQkJCQkgICB2ZXJzaW9uLmMKKyAgOnA6dAkJCQkJICAgdmVyc2lvbi5jCisgIDpyCQkJCSAgICAgICBzcmMvdmVyc2lvbgorICA6cDpyCQkJL2hvbWUvbW9vbC92aW0vc3JjL3ZlcnNpb24KKyAgOnQ6cgkJCQkJICAgdmVyc2lvbgorICA6ZQkJCQkJCSAgIGMKKyAgOnM/dmVyc2lvbj9tYWluPwkJICAgICAgIHNyYy9tYWluLmMKKyAgOnM/dmVyc2lvbj9tYWluPzpwCS9ob21lL21vb2wvdmltL3NyYy9tYWluLmMKKyAgOnA6Z3M/Lz9cXD8JCVxob21lXG1vb2xcdmltXHNyY1x2ZXJzaW9uLmMKKworRXhhbXBsZXMsIHdoZW4gdGhlIGZpbGUgbmFtZSBpcyAic3JjL3ZlcnNpb24uYy5neiI6ID4KKyAgOnAJCQkvaG9tZS9tb29sL3ZpbS9zcmMvdmVyc2lvbi5jLmd6CisgIDplCQkJCQkJICAgICBnegorICA6ZTplCQkJCQkJICAgYy5negorICA6ZTplOmUJCQkJCSAgIGMuZ3oKKyAgOmU6ZTpyCQkJCQkgICBjCisgIDpyCQkJCSAgICAgICBzcmMvdmVyc2lvbi5jCisgIDpyOmUJCQkJCQkgICBjCisgIDpyOnIJCQkJICAgICAgIHNyYy92ZXJzaW9uCisgIDpyOnI6cgkJCSAgICAgICBzcmMvdmVyc2lvbgorPAorCQkJCQkqZXh0ZW5zaW9uLXJlbW92YWwqICo6XyU8KgorSWYgYSAiPCIgaXMgYXBwZW5kZWQgdG8gIiUiLCAiIyIsICIjbiIgb3IgIkNUUkwtViBwIiB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlCituYW1lIGlzIHJlbW92ZWQgKGV2ZXJ5dGhpbmcgYWZ0ZXIgYW5kIGluY2x1ZGluZyB0aGUgbGFzdCAnLicgaW4gdGhlIGZpbGUKK25hbWUpLiAgVGhpcyBpcyBpbmNsdWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9uIDMuMCwgdGhlCisiOnIiIGZvcm0gaXMgcHJlZmVycmVkLiAgRXhhbXBsZXM6ID4KKworCSUJCWN1cnJlbnQgZmlsZSBuYW1lCisJJTwJCWN1cnJlbnQgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uCisJIwkJYWx0ZXJuYXRlIGZpbGUgbmFtZSBmb3IgY3VycmVudCB3aW5kb3cKKwkjPAkJaWRlbSwgd2l0aG91dCBleHRlbnNpb24KKwkjMzEJCWFsdGVybmF0ZSBmaWxlIG51bWJlciAzMQorCSMzMTwJCWlkZW0sIHdpdGhvdXQgZXh0ZW5zaW9uCisJPGN3b3JkPgkJd29yZCB1bmRlciB0aGUgY3Vyc29yCisJPGNXT1JEPgkJV09SRCB1bmRlciB0aGUgY3Vyc29yIChzZWUgfFdPUkR8KQorCTxjZmlsZT4JCXBhdGggbmFtZSB1bmRlciB0aGUgY3Vyc29yCisJPGNmaWxlPjwJaWRlbSwgd2l0aG91dCBleHRlbnNpb24KKworTm90ZTogV2hlcmUgYSBmaWxlIG5hbWUgaXMgZXhwZWN0ZWQgd2lsZGNhcmRzIGV4cGFuc2lvbiBpcyBkb25lLiAgT24gVW5peCB0aGUKK3NoZWxsIGlzIHVzZWQgZm9yIHRoaXMsIHVubGVzcyBpdCBjYW4gYmUgZG9uZSBpbnRlcm5hbGx5IChmb3Igc3BlZWQpLgorQmFja3RpY2tzIGFsc28gd29yaywgbGlrZSBpbiA+CisJOm4gYGVjaG8gKi5jYAorKGJhY2t0aWNrIGV4cGFuc2lvbiBpcyBub3QgcG9zc2libGUgaW4gfHJlc3RyaWN0ZWQtbW9kZXwpCitCdXQgZXhwYW5zaW9uIGlzIG9ubHkgZG9uZSBpZiB0aGVyZSBhcmUgYW55IHdpbGRjYXJkcyBiZWZvcmUgZXhwYW5kaW5nIHRoZQorJyUnLCAnIycsIGV0Yy4uICBUaGlzIGF2b2lkcyBleHBhbmRpbmcgd2lsZGNhcmRzIGluc2lkZSBhIGZpbGUgbmFtZS4gIElmIHlvdQord2FudCB0byBleHBhbmQgdGhlIHJlc3VsdCBvZiA8Y2ZpbGU+LCBhZGQgYSB3aWxkY2FyZCBjaGFyYWN0ZXIgdG8gaXQuCitFeGFtcGxlczogKGFsdGVybmF0ZSBmaWxlIG5hbWUgaXMgIj9yZWFkbWU/IikKKwljb21tYW5kCQlleHBhbmRzIHRvICB+CisJOmUgIwkJOmUgP3JlYWRtZT8KKwk6ZSBgbHMgI2AJOmUge2ZpbGVzIG1hdGNoaW5nICI/cmVhZG1lPyJ9CisJOmUgIy4qCQk6ZSB7ZmlsZXMgbWF0Y2hpbmcgIj9yZWFkbWU/LioifQorCTpjZCA8Y2ZpbGU+CTpjZCB7ZmlsZSBuYW1lIHVuZGVyIGN1cnNvcn0KKwk6Y2QgPGNmaWxlPioJOmNkIHtmaWxlIG5hbWUgdW5kZXIgY3Vyc29yIHBsdXMgIioiIGFuZCB0aGVuIGV4cGFuZGVkfQorCitXaGVuIHRoZSBleHBhbmRlZCBhcmd1bWVudCBjb250YWlucyBhICIhIiBhbmQgaXQgaXMgdXNlZCBmb3IgYSBzaGVsbCBjb21tYW5kCisoIjohY21kIiwgIjpyICFjbWQiIG9yICI6dyAhY21kIiksIGl0IGlzIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCB0byBhdm9pZCBpdAorYmVpbmcgZXhwYW5kZWQgaW50byBhIHByZXZpb3VzbHkgdXNlZCBjb21tYW5kLiAgV2hlbiB0aGUgJ3NoZWxsJyBvcHRpb24KK2NvbnRhaW5zICJzaCIsIHRoaXMgaXMgZG9uZSB0d2ljZSwgdG8gYXZvaWQgdGhlIHNoZWxsIHRyeWluZyB0byBleHBhbmQgdGhlCisiISIuCisKKwkJCQkJCQkqZmlsZW5hbWUtYmFja3NsYXNoKgorRm9yIGZpbGVzeXN0ZW1zIHRoYXQgdXNlIGEgYmFja3NsYXNoIGFzIGRpcmVjdG9yeSBzZXBhcmF0b3IgKE1TLURPUywgV2luZG93cywKK09TLzIpLCBpdCdzIGEgYml0IGRpZmZpY3VsdCB0byByZWNvZ25pemUgYSBiYWNrc2xhc2ggdGhhdCBpcyB1c2VkIHRvIGVzY2FwZQordGhlIHNwZWNpYWwgbWVhbmluZyBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIuICBUaGUgZ2VuZXJhbCBydWxlIGlzOiBJZiB0aGUKK2JhY2tzbGFzaCBpcyBmb2xsb3dlZCBieSBhIG5vcm1hbCBmaWxlIG5hbWUgY2hhcmFjdGVyLCBpdCBkb2VzIG5vdCBoYXZlIGEKK3NwZWNpYWwgbWVhbmluZy4gIFRoZXJlZm9yZSAiXGZpbGVcZm9vIiBpcyBhIHZhbGlkIGZpbGUgbmFtZSwgeW91IGRvbid0IGhhdmUKK3RvIHR5cGUgdGhlIGJhY2tzbGFzaCB0d2ljZS4KKworQW4gZXhjZXB0aW9uIGlzIHRoZSAnJCcgc2lnbi4gIEl0IGlzIGEgdmFsaWQgY2hhcmFjdGVyIGluIGEgZmlsZSBuYW1lLiAgQnV0Cit0byBhdm9pZCBhIGZpbGUgbmFtZSBsaWtlICIkaG9tZSIgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsCitpdCBuZWVkcyB0byBiZSBwcmVjZWRlZCBieSBhIGJhY2tzbGFzaC4gIFRoZXJlZm9yZSB5b3UgbmVlZCB0byB1c2UgIi9cJGhvbWUiCitmb3IgdGhlIGZpbGUgIiRob21lIiBpbiB0aGUgcm9vdCBkaXJlY3RvcnkuICBBIGZldyBleGFtcGxlczoKKworCUZJTEUgTkFNRQlJTlRFUlBSRVRFRCBBUwl+CisJJGhvbWUJCWV4cGFuZGVkIHRvIHZhbHVlIG9mIGVudmlyb25tZW50IHZhciAkaG9tZQorCVwkaG9tZQkJZmlsZSAiJGhvbWUiIGluIGN1cnJlbnQgZGlyZWN0b3J5CisJL1wkaG9tZQkJZmlsZSAiJGhvbWUiIGluIHJvb3QgZGlyZWN0b3J5CisJXFwkaG9tZQkJZmlsZSAiXFwiLCBmb2xsb3dlZCBieSBleHBhbmRlZCAkaG9tZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIENvbW1hbmQtbGluZSB3aW5kb3cJCQkJKmNtZGxpbmUtd2luZG93KiAqY21kd2luKgorCitJbiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdyB0aGUgY29tbWFuZCBsaW5lIGNhbiBiZSBlZGl0ZWQganVzdCBsaWtlIGVkaXRpbmcKK3RleHQgaW4gYW55IHdpbmRvdy4gIEl0IGlzIGEgc3BlY2lhbCBraW5kIG9mIHdpbmRvdywgYmVjYXVzZSB5b3UgY2Fubm90IGxlYXZlCitpdCBpbiBhIG5vcm1hbCB3YXkuCit7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY21kbGluZV9oaXN0fCBvciB8K3ZlcnRzcGxpdHwKK2ZlYXR1cmV9CisKKworT1BFTgorCitUaGVyZSBhcmUgdHdvIHdheXMgdG8gb3BlbiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdzoKKzEuIEZyb20gQ29tbWFuZC1saW5lIG1vZGUsIHVzZSB0aGUga2V5IHNwZWNpZmllZCB3aXRoIHRoZSAnY2VkaXQnIG9wdGlvbi4KKyAgIFRoZSBkZWZhdWx0IGlzIENUUkwtRiB3aGVuICdjb21wYXRpYmxlJyBpcyBub3Qgc2V0LgorMi4gRnJvbSBOb3JtYWwgbW9kZSwgdXNlIHRoZSAicToiLCAicS8iIG9yICJxPyIgY29tbWFuZC4gICpxOiogKnEvKiAqcT8qCisgICBUaGlzIHN0YXJ0cyBlZGl0aW5nIGFuIEV4IGNvbW1hbmQtbGluZSAoInE6Iikgb3Igc2VhcmNoIHN0cmluZyAoInEvIiBvcgorICAgInE/IikuICBOb3RlIHRoYXQgdGhpcyBpcyBub3QgcG9zc2libGUgd2hpbGUgcmVjb3JkaW5nIGlzIGluIHByb2dyZXNzICh0aGUKKyAgICJxIiBzdG9wcyByZWNvcmRpbmcgdGhlbikuCisKK1doZW4gdGhlIHdpbmRvdyBvcGVucyBpdCBpcyBmaWxsZWQgd2l0aCB0aGUgY29tbWFuZC1saW5lIGhpc3RvcnkuICBUaGUgbGFzdAorbGluZSBjb250YWlucyB0aGUgY29tbWFuZCBhcyB0eXBlZCBzbyBmYXIuICBUaGUgbGVmdCBjb2x1bW4gd2lsbCBzaG93IGEKK2NoYXJhY3RlciB0aGF0IGluZGljYXRlcyB0aGUgdHlwZSBvZiBjb21tYW5kLWxpbmUgYmVpbmcgZWRpdGVkLCBzZWUKK3xjbWR3aW4tY2hhcnwuCisKK1ZpbSB3aWxsIGJlIGluIE5vcm1hbCBtb2RlIHdoZW4gdGhlIGVkaXRvciBpcyBvcGVuZWQsIGV4Y2VwdCB3aGVuICdpbnNlcnRtb2RlJworaXMgc2V0LgorCitUaGUgaGVpZ2h0IG9mIHRoZSB3aW5kb3cgaXMgc3BlY2lmaWVkIHdpdGggJ2NtZHdpbmhlaWdodCcgKG9yIHNtYWxsZXIgaWYgdGhlcmUKK2lzIG5vIHJvb20pLiAgVGhlIHdpbmRvdyBpcyBhbHdheXMgZnVsbCB3aWR0aCBhbmQgaXMgcG9zaXRpb25lZCBqdXN0IGFib3ZlIHRoZQorY29tbWFuZC1saW5lLgorCisKK0VESVQKKworWW91IGNhbiBub3cgdXNlIGNvbW1hbmRzIHRvIG1vdmUgYXJvdW5kIGFuZCBlZGl0IHRoZSB0ZXh0IGluIHRoZSB3aW5kb3cuICBCb3RoCitpbiBOb3JtYWwgbW9kZSBhbmQgSW5zZXJ0IG1vZGUuCisKK0l0IGlzIHBvc3NpYmxlIHRvIHVzZSAiOiIsICIvIiBhbmQgb3RoZXIgY29tbWFuZHMgdGhhdCB1c2UgdGhlIGNvbW1hbmQtbGluZSwKK2J1dCBpdCdzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFub3RoZXIgY29tbWFuZC1saW5lIHdpbmRvdyB0aGVuLiAgVGhlcmUgaXMgbm8KK25lc3RpbmcuCisJCQkJCQkJKkUxMSoKK1RoZSBjb21tYW5kLWxpbmUgd2luZG93IGlzIG5vdCBhIG5vcm1hbCB3aW5kb3cuICBJdCBpcyBub3QgcG9zc2libGUgdG8gbW92ZSB0bworYW5vdGhlciB3aW5kb3cgb3IgZWRpdCBhbm90aGVyIGJ1ZmZlci4gIEFsbCBjb21tYW5kcyB0aGF0IHdvdWxkIGRvIHRoaXMgYXJlCitkaXNhYmxlZCBpbiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdy4gIE9mIGNvdXJzZSBpdCBfaXNfIHBvc3NpYmxlIHRvIGV4ZWN1dGUKK2FueSBjb21tYW5kIHRoYXQgeW91IGVudGVyZWQgaW4gdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cuCisKKworQ0xPU0UJCQkJCQkJKkUxOTkqCisKK1RoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gbGVhdmUgdGhlIGNvbW1hbmQtbGluZSB3aW5kb3c6CisKKzxDUj4JCUV4ZWN1dGUgdGhlIGNvbW1hbmQtbGluZSB1bmRlciB0aGUgY3Vyc29yLiAgV29ya3MgYm90aCBpbgorCQlJbnNlcnQgYW5kIGluIE5vcm1hbCBtb2RlLgorQ1RSTC1DCQlDb250aW51ZSBpbiBDb21tYW5kLWxpbmUgbW9kZS4gIFRoZSBjb21tYW5kLWxpbmUgdW5kZXIgdGhlCisJCWN1cnNvciBpcyB1c2VkIGFzIHRoZSBjb21tYW5kLWxpbmUuICBXb3JrcyBib3RoIGluIEluc2VydCBhbmQKKwkJaW4gTm9ybWFsIG1vZGUuICAiOmNsb3NlIiBhbHNvIHdvcmtzLiAgVGhlcmUgaXMgbm8gcmVkcmF3LAorCQl0aHVzIHRoZSB3aW5kb3cgd2lsbCByZW1haW4gdmlzaWJsZS4KKzpxdWl0CQlEaXNjYXJkIHRoZSBjb21tYW5kIGxpbmUgYW5kIGdvIGJhY2sgdG8gTm9ybWFsIG1vZGUuCisJCSI6ZXhpdCIsICI6eGl0IiBhbmQgQ1RSTC1cIENUUkwtTiBhbHNvIHdvcmsuCis6cWFsbAkJUXVpdCBWaW0sIHVubGVzcyB0aGVyZSBhcmUgY2hhbmdlcyBpbiBzb21lIGJ1ZmZlci4KKzpxYWxsIQkJUXVpdCBWaW0sIGRpc2NhcmRpbmcgY2hhbmdlcyB0byBhbnkgYnVmZmVyLgorCitPbmNlIHRoZSBjb21tYW5kLWxpbmUgd2luZG93IGlzIGNsb3NlZCB0aGUgb2xkIHdpbmRvdyBzaXplcyBhcmUgcmVzdG9yZWQuICBUaGUKK2V4ZWN1dGVkIGNvbW1hbmQgYXBwbGllcyB0byB0aGUgd2luZG93IGFuZCBidWZmZXIgd2hlcmUgdGhlIGNvbW1hbmQtbGluZSB3YXMKK3N0YXJ0ZWQgZnJvbS4gIFRoaXMgd29ya3MgYXMgaWYgdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgd2FzIG5vdCB0aGVyZSwgZXhjZXB0Cit0aGF0IHRoZXJlIHdpbGwgYmUgYW4gZXh0cmEgc2NyZWVuIHJlZHJhdy4KK1RoZSBidWZmZXIgdXNlZCBmb3IgdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgaXMgZGVsZXRlZC4gIEFueSBjaGFuZ2VzIHRvIGxpbmVzCitvdGhlciB0aGFuIHRoZSBvbmUgdGhhdCBpcyBleGVjdXRlZCB3aXRoIDxDUj4gYXJlIGxvc3QuCisKKworVkFSSU9VUworCitUaGUgY29tbWFuZC1saW5lIHdpbmRvdyBjYW5ub3QgYmUgdXNlZDoKKy0gd2hlbiB0aGVyZSBhbHJlYWR5IGlzIGEgY29tbWFuZC1saW5lIHdpbmRvdyAobm8gbmVzdGluZykKKy0gZm9yIGVudGVyaW5nIGEgZW5jcnlwdGlvbiBrZXkgb3Igd2hlbiB1c2luZyBpbnB1dHNlY3JldCgpCistIHdoZW4gVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgK3ZlcnRzcGxpdCBmZWF0dXJlCisKK1NvbWUgb3B0aW9ucyBhcmUgc2V0IHdoZW4gdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgaXMgb3BlbmVkOgorJ2ZpbGV0eXBlJwkidmltIiwgd2hlbiBlZGl0aW5nIGFuIEV4IGNvbW1hbmQtbGluZTsgdGhpcyBzdGFydHMgVmltIHN5bnRheAorCQloaWdobGlnaHRpbmcgaWYgaXQgd2FzIGVuYWJsZWQKKydyaWdodGxlZnQnCW9mZgorJ21vZGlmaWFibGUnCW9uCisnYnVmdHlwZScJIm5vZmlsZSIKKydzd2FwZmlsZScJb2ZmCisKK0l0IGlzIGFsbG93ZWQgdG8gd3JpdGUgdGhlIGJ1ZmZlciBjb250ZW50cyB0byBhIGZpbGUuICBUaGlzIGlzIGFuIGVhc3kgd2F5IHRvCitzYXZlIHRoZSBjb21tYW5kLWxpbmUgaGlzdG9yeSBhbmQgcmVhZCBpdCBiYWNrIGxhdGVyLgorCitJZiB0aGUgJ3dpbGRjaGFyJyBvcHRpb24gaXMgc2V0IHRvIDxUYWI+LCBhbmQgdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgaXMgdXNlZAorZm9yIGFuIEV4IGNvbW1hbmQsIHRoZW4gdHdvIG1hcHBpbmdzIHdpbGwgYmUgYWRkZWQgdG8gdXNlIDxUYWI+IGZvciBjb21wbGV0aW9uCitpbiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdywgbGlrZSB0aGlzOiA+CisJOmltYXAgPGJ1ZmZlcj4gPFRhYj4gPEMtWD48Qy1WPgorCTpubWFwIDxidWZmZXI+IDxUYWI+IGE8Qy1YPjxDLVY+CitOb3RlIHRoYXQgaGl0dGluZyA8VGFiPiBpbiBOb3JtYWwgbW9kZSB3aWxsIGRvIGNvbXBsZXRpb24gb24gdGhlIG5leHQKK2NoYXJhY3Rlci4gIFRoYXQgd2F5IGl0IHdvcmtzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuCitJZiB5b3UgZG9uJ3Qgd2FudCB0aGVzZSBtYXBwaW5ncywgZGlzYWJsZSB0aGVtIHdpdGg6ID4KKwlhdSBDbWR3aW5FbnRlciBbOj5dIGl1bm1hcCA8VGFiPgorCWF1IENtZHdpbkVudGVyIFs6Pl0gbnVubWFwIDxUYWI+CitZb3UgY291bGQgcHV0IHRoZXNlIGxpbmVzIGluIHlvdXIgdmltcmMgZmlsZS4KKworV2hpbGUgaW4gdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgeW91IGNhbm5vdCB1c2UgdGhlIG1vdXNlIHRvIHB1dCB0aGUgY3Vyc29yIGluCithbm90aGVyIHdpbmRvdywgb3IgZHJhZyBzdGF0dXNsaW5lcyBvZiBvdGhlciB3aW5kb3dzLiAgWW91IGNhbiBkcmFnIHRoZQorc3RhdHVzbGluZSBvZiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdyBpdHNlbGYgYW5kIHRoZSBzdGF0dXNsaW5lIGFib3ZlIGl0LgorVGh1cyB5b3UgY2FuIHJlc2l6ZSB0aGUgY29tbWFuZC1saW5lIHdpbmRvdywgYnV0IG5vdCBvdGhlcnMuCisKKworQVVUT0NPTU1BTkRTCisKK1R3byBhdXRvY29tbWFuZCBldmVudHMgYXJlIHVzZWQ6IHxDbWR3aW5FbnRlcnwgYW5kIHxDbWR3aW5MZWF2ZXwuICBTaW5jZSB0aGlzCit3aW5kb3cgaXMgb2YgYSBzcGVjaWFsIHR5cGUsIHRoZSBXaW5FbnRlciwgV2luTGVhdmUsIEJ1ZkVudGVyIGFuZCBCdWZMZWF2ZQorZXZlbnRzIGFyZSBub3QgdHJpZ2dlcmVkLiAgWW91IGNhbiB1c2UgdGhlIENtZHdpbiBldmVudHMgdG8gZG8gc2V0dGluZ3MKK3NwZWNpZmljYWxseSBmb3IgdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cuICBCZSBjYXJlZnVsIG5vdCB0byBjYXVzZSBzaWRlCitlZmZlY3RzIQorRXhhbXBsZTogPgorCTphdSBDbWR3aW5FbnRlciA6ICBsZXQgYjpjcHRfc2F2ZSA9ICZjcHQgfCBzZXQgY3B0PXYKKwk6YXUgQ21kd2luTGVhdmUgOiAgbGV0ICZjcHQgPSBiOmNwdF9zYXZlCitUaGlzIHNldHMgJ2NvbXBsZXRlJyB0byB1c2UgY29tbWFuZC1saW5lIGNvbXBsZXRpb24gaW4gSW5zZXJ0IG1vZGUgZm9yIENUUkwtTi4KK0Fub3RoZXIgZXhhbXBsZTogPgorCTphdSBDbWR3aW5FbnRlciBbLz9dICBzdGFydGluc2VydAorVGhpcyB3aWxsIG1ha2UgVmltIHN0YXJ0IGluIEluc2VydCBtb2RlIGluIHRoZSBjb21tYW5kLWxpbmUgd2luZG93LgorCisJCQkJCQkqY21kd2luLWNoYXIqCitUaGUgY2hhcmFjdGVyIHVzZWQgZm9yIHRoZSBwYXR0ZXJuIGluZGljYXRlcyB0aGUgdHlwZSBvZiBjb21tYW5kLWxpbmU6CisJOglub3JtYWwgRXggY29tbWFuZAorCT4JZGVidWcgbW9kZSBjb21tYW5kIHxkZWJ1Zy1tb2RlfAorCS8JZm9yd2FyZCBzZWFyY2ggc3RyaW5nCisJPwliYWNrd2FyZCBzZWFyY2ggc3RyaW5nCisJPQlleHByZXNzaW9uIGZvciAiPSB8ZXhwci1yZWdpc3RlcnwKKwlACXN0cmluZyBmb3IgfGlucHV0KCl8CisJLQl0ZXh0IGZvciB8Omluc2VydHwgb3IgfDphcHBlbmR8CisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9kZWJ1Z2dlci50eHQgYi9ydW50aW1lL2RvYy9kZWJ1Z2dlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxYTE4OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2RlYnVnZ2VyLnR4dApAQCAtMCwwICsxLDEzNSBAQAorKmRlYnVnZ2VyLnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAxIERlYyAyMgorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBHb3Jkb24gUHJpZXVyCisKKworRGVidWdnZXIgU3VwcG9ydCBGZWF0dXJlcwkJCQkqZGVidWdnZXItc3VwcG9ydCoKKworMS4gRGVidWdnZXIgRmVhdHVyZXMJCXxkZWJ1Z2dlci1mZWF0dXJlc3wKKzIuIFZpbSBDb21waWxlIE9wdGlvbnMJCXxkZWJ1Z2dlci1jb21waWxhdGlvbnwKKzMuIEludGVncmF0ZWQgRGVidWdnZXJzCQl8ZGVidWdnZXItaW50ZWdyYXRpb258CisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBmZWF0dXJlc30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBEZWJ1Z2dlciBGZWF0dXJlcwkJCQkJKmRlYnVnZ2VyLWZlYXR1cmVzKgorCitUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgZm9yIGFuIGludGVncmF0aW9uIHdpdGggYSBkZWJ1Z2dlciBvcgorYW4gSW50ZWdyYXRlZCBQcm9ncmFtbWluZyBFbnZpcm9ubWVudCAoSVBFKSBvciBJbnRlZ3JhdGVkIERldmVsb3BtZW50CitFbnZpcm9ubWVudCAoSURFKToKKworCUFsdGVybmF0ZSBDb21tYW5kIElucHV0CQkJCXxhbHQtaW5wdXR8CisJRGVidWcgU2lnbnMJCQkJCXxkZWJ1Zy1zaWduc3wKKwlEZWJ1ZyBTb3VyY2UgSGlnaGxpZ2h0CQkJCXxkZWJ1Zy1oaWdobGlnaHR8CisJTWVzc2FnZSBGb290ZXIJCQkJCXxndWktZm9vdGVyfAorCUJhbGxvb24gRXZhbHVhdGlvbgkJCQl8YmFsbG9vbi1ldmFsfAorCitUaGVzZSBmZWF0dXJlcyB3ZXJlIGFkZGVkIHNwZWNpZmljYWxseSBmb3IgdXNlIGluIHRoZSBNb3RpZiB2ZXJzaW9uIG9mIGd2aW0uCitIb3dldmVyLCB0aGUgfGFsdC1pbnB1dHwgYW5kIHxkZWJ1Zy1oaWdobGlnaHR8IHdlcmUgd3JpdHRlbiB0byBiZSB1c2FibGUgaW4KK2JvdGggdmltIGFuZCBndmltLiBTb21lIG9mIHRoZSBvdGhlciBmZWF0dXJlcyBjb3VsZCBiZSB1c2VkIGluIHRoZSBub24tR1VJCit2aW0gd2l0aCBzbGlnaHQgbW9kaWZpY2F0aW9ucy4gSG93ZXZlciwgSSBkaWQgbm90IGRvIHRoaXMgbm9yIGRpZCBJIHRlc3QgdGhlCityZWxpYWJpbGl0eSBvZiBidWlsZGluZyBmb3IgdmltIG9yIG5vbiBNb3RpZiBHVUkgdmVyc2lvbnMuCisKKworMS4xIEFsdGVybmF0ZSBDb21tYW5kIElucHV0CQkJCSphbHQtaW5wdXQqCisKK0ZvciBWaW0gdG8gd29yayB3aXRoIGEgZGVidWdnZXIgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBhbiBpbnB1dCBjb25uZWN0aW9uCit3aXRoIGEgZGVidWdnZXIgb3IgZXh0ZXJuYWwgdG9vbC4gSW4gbWFueSBjYXNlcyB0aGVyZSB3aWxsIGFsc28gYmUgYW4gb3V0cHV0Citjb25uZWN0aW9uIGJ1dCB0aGlzIGlzbid0IGFic29sdXRlbHkgbmVjZXNzYXJ5LgorCitUaGUgcHVycG9zZSBvZiB0aGUgaW5wdXQgY29ubmVjdGlvbiBpcyB0byBsZXQgdGhlIGV4dGVybmFsIGRlYnVnZ2VyIHNlbmQKK2NvbW1hbmRzIHRvIFZpbS4gVGhlIGNvbW1hbmRzIHNlbnQgYnkgdGhlIGRlYnVnZ2VyIHNob3VsZCBnaXZlIHRoZSBkZWJ1Z2dlcgorZW5vdWdoIGNvbnRyb2wgdG8gZGlzcGxheSB0aGUgY3VycmVudCBkZWJ1ZyBlbnZpcm9ubWVudCBhbmQgc3RhdGUuCisKK1RoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBYIFRvb2xraXQgZGlzcGF0Y2ggbG9vcCBhbmQgdGhlCitYdEFkZElucHV0KCkgZnVuY3Rpb24gY2FsbC4KKworCisxLjIgRGVidWcgU2lnbnMJCQkJCQkqZGVidWctc2lnbnMqCisKK01hbnkgZGVidWdnZXJzIG1hcmsgc3BlY2lmaWMgbGluZXMgYnkgcGxhY2luZyBhIHNtYWxsIHNpZ24gb3IgY29sb3IgaGlnaGxpZ2h0CitvbiB0aGUgbGluZS4gVGhlIHw6c2lnbnwgY29tbWFuZCBsZXRzIHRoZSBkZWJ1Z2dlciBzZXQgdGhpcyBncmFwaGljIG1hcmsuIFNvbWUKK2V4YW1wbGVzIHdoZXJlIHRoaXMgZmVhdHVyZSB3b3VsZCBiZSB1c2VkIHdvdWxkIGJlIGEgZGVidWdnZXIgc2hvd2luZyBhbiBhcnJvdworcmVwcmVzZW50aW5nIHRoZSBQcm9ncmFtIENvdW50ZXIgKFBDKSBvZiB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZC4gQW5vdGhlcgorZXhhbXBsZSB3b3VsZCBiZSBhIHNtYWxsIHN0b3Agc2lnbiBmb3IgYSBsaW5lIHdpdGggYSBicmVha3BvaW50LiBUaGVzZSB2aXNpYmxlCitoaWdobGlnaHRzIGxldCB0aGUgdXNlciBrZWVwIHRyYWNrIG9mIGNlcnRhaW4gcGFydHMgb2YgdGhlIHN0YXRlIG9mIHRoZQorZGVidWdnZXIuCisKK1RoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZCB3aXRoIG1vcmUgdGhhbiBkZWJ1Z2dlcnMsIHRvby4gQW4gSVBFIGNhbiB1c2UgYSBzaWduCit0byBoaWdobGlnaHQgYnVpbGQgZXJyb3JzLCBzZWFyY2hlZCB0ZXh0LCBvciBvdGhlciB0aGluZ3MuIFRoZSBzaWduIGZlYXR1cmUKK2NhbiBhbHNvIHdvcmsgdG9nZXRoZXIgd2l0aCB0aGUgfGRlYnVnLWhpZ2hsaWdodHwgdG8gZW5zdXJlIHRoZSBtYXJrIGlzCitoaWdobHkgdmlzaWJsZS4KKworRGVidWcgc2lnbnMgYXJlIGRlZmluZWQgYW5kIHBsYWNlZCB1c2luZyB0aGUgfDpzaWdufCBjb21tYW5kLgorCisKKzEuMyBEZWJ1ZyBTb3VyY2UgSGlnaGxpZ2h0CQkJCSpkZWJ1Zy1oaWdobGlnaHQqCisKK1RoaXMgZmVhdHVyZSBhbGxvd3MgYSBsaW5lIHRvIGhhdmUgYSBwcmVkb21pbmFudCBoaWdobGlnaHQuIFRoZSBoaWdobGlnaHQgaXMKK2ludGVuZGVkIHRvIG1ha2UgYSBzcGVjaWZpYyBsaW5lIHN0YW5kIG91dC4gVGhlIGhpZ2hsaWdodCBjb3VsZCBiZSBtYWRlIHRvCit3b3JrIGZvciBib3RoIHZpbSBhbmQgZ3ZpbSwgd2hlcmVhcyB0aGUgZGVidWcgc2lnbiBpcywgaW4gbW9zdCBjYXNlcywgbGltaXRlZAordG8gZ3ZpbS4gVGhlIG9uZSBleGNlcHRpb24gdG8gdGhpcyBpcyBTdW4gTWljcm9zeXN0ZW0ncyBkdHRlcm0uIFRoZSBkdHRlcm0KK2Zyb20gU3VuIGhhcyBhICJzaWduIGd1dHRlciIgZm9yIHNob3dpbmcgc2lnbnMuCisKKworMS40IE1lc3NhZ2UgRm9vdGVyCQkJCQkqZ3VpLWZvb3RlcioKKworVGhlIG1lc3NhZ2UgZm9vdGVyIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgbWVzc2FnZXMgZnJvbSBhIGRlYnVnZ2VyIG9yIElQRS4gSXQKK2NhbiBhbHNvIGJlIHVzZWQgdG8gZGlzcGxheSBtZW51IGFuZCB0b29sYmFyIHRpcHMuIFRoZSBmb290ZXIgYXJlYSBpcyBhdCB0aGUKK2JvdHRvbSBvZiB0aGUgR1VJIHdpbmRvdywgYmVsb3cgdGhlIGxpbmUgdXNlZCB0byBkaXNwbGF5IGNvbG9uIGNvbW1hbmRzLgorCitUaGUgZGlzcGxheSBvZiB0aGUgZm9vdGVyIGlzIGNvbnRyb2xsZWQgYnkgdGhlICdndWlvcHRpb25zJyBsZXR0ZXIgJ0YnLgorCisKKzEuNSBCYWxsb29uIEV2YWx1YXRpb24JCQkJCSpiYWxsb29uLWV2YWwqCisKK1RoaXMgZmVhdHVyZSBhbGxvd3MgYSBkZWJ1Z2dlciwgb3Igb3RoZXIgZXh0ZXJuYWwgdG9vbCwgdG8gZGlzcGxheSBkeW5hbWljCitpbmZvcm1hdGlvbiBiYXNlZCBvbiB3aGVyZSB0aGUgbW91c2UgaXMgcG9pbnRpbmcuIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmVhdHVyZQord2FzIHRvIGFsbG93IFN1bidzIFZpc3VhbCBXb3JrU2hvcCBkZWJ1Z2dlciB0byBkaXNwbGF5IGV4cHJlc3Npb24gZXZhbHVhdGlvbnMuCitIb3dldmVyLCB0aGUgZmVhdHVyZSB3YXMgaW1wbGVtZW50ZWQgaW4gYXMgZ2VuZXJhbCBhIG1hbm5lciBhcyBwb3NzaWJsZSBhbmQKK2NvdWxkIGJlIHVzZWQgZm9yIGRpc3BsYXlpbmcgb3RoZXIgaW5mb3JtYXRpb24gYXMgd2VsbC4KKworVGhlIEJhbGxvb24gRXZhbHVhdGlvbiBoYXMgc29tZSBzZXR0YWJsZSBwYXJhbWV0ZXJzIHRvby4gIFRoZSBmb250IGxpc3QgYW5kCitjb2xvcnMgY2FuIGJlIHNldCB2aWEgWCByZXNvdXJjZXMgKFhtTmJhbGxvb25FdmFsRm9udExpc3QsCitYbU5iYWxsb29uRXZhbEJhY2tncm91bmQsIGFuZCBYbU5iYWxsb29uRXZhbEZvcmVncm91bmQpLgorVGhlICdiYWxsb29uZGVsYXknIG9wdGlvbiBzZXRzIHRoZSBkZWxheSBiZWZvcmUgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHNob3cgYQorYmFsbG9vbi4KK1RoZSAnYmFsbG9vbmV2YWwnIG9wdGlvbiBuZWVkcyB0byBiZSBzZXQgdG8gc3dpdGNoIGl0IG9uLgorCitCYWxsb29uIGV2YWx1YXRpb24gaXMgb25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2JhbGxvb25fZXZhbHwKK2FuZCB8K3N1bl93b3Jrc2hvcHwgZmVhdHVyZXMuCisKK1RoZSBCYWxsb29uIGV2YWx1YXRpb24gZnVuY3Rpb25zIGFyZSBhbHNvIHVzZWQgdG8gc2hvdyBhIHRvb2x0aXAgZm9yIHRoZQordG9vbGJhci4gIFRoZSAnYmFsbG9vbmV2YWwnIG9wdGlvbiBkb2VzIG5vdCBuZWVkIHRvIGJlIHNldCBmb3IgdGhpcy4gIEJ1dCB0aGUKK290aGVyIHNldHRpbmdzIGFwcGx5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFZpbSBDb21waWxlIE9wdGlvbnMJCQkJCSpkZWJ1Z2dlci1jb21waWxhdGlvbioKKworVGhlIGRlYnVnZ2VyIGZlYXR1cmVzIHdlcmUgYWRkZWQgZXhwbGljaXRseSBmb3IgdXNlIHdpdGggU3VuJ3MgVmlzdWFsCitXb3JrU2hvcCBJbnRlZ3JhdGVkIFByb2dyYW1taW5nIEVudmlyb25tZW50IChpcGUpLiBIb3dldmVyLCB0aGV5IHdlcmUgZG9uZQoraW4gYXMgZ2VuZXJpYyBhIG1hbm5lciBhcyBwb3NzaWJsZSBzbyB0aGF0IGludGVncmF0aW9uIHdpdGggb3RoZXIgZGVidWdnZXJzCitjb3VsZCBhbHNvIHVzZSBzb21lIG9yIGFsbCBvZiB0aGUgdG9vbHMgdXNlZCB3aXRoIFN1bidzIGlwZS4KKworVGhlIGZvbGxvd2luZyBjb21waWxlIHRpbWUgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcyBjb250cm9sIHRoZSBmZWF0dXJlczoKKworICAgIEFsdGVybmF0ZSBDb21tYW5kIElucHV0CQkJQUxUX1hfSU5QVVQKKyAgICBEZWJ1ZyBHbHlwaHMJCQkJRkVBVF9TSUdOUworICAgIERlYnVnIEhpZ2hsaWdodHMJCQkJRkVBVF9TSUdOUworICAgIE1lc3NhZ2UgRm9vdGVyCQkJCUZFQVRfRk9PVEVSCisgICAgQmFsbG9vbiBFdmFsdWF0aW9uCQkJCUZFQVRfQkVWQUwKKworVGhlIGZpcnN0IGludGVncmF0aW9uIHdpdGggYSBmdWxsIElQRS9JREUgd2FzIHdpdGggU3VuIFZpc3VhbCBXb3JrU2hvcC4gVG8KK2NvbXBpbGUgYSBndmltIHdoaWNoIGludGVyZmFjZXMgd2l0aCBWV1Mgc2V0IHRoZSBmb2xsb3dpbmcgZmxhZywgd2hpY2ggc2V0cworYWxsIHRoZSBhYm92ZSBmbGFnczoKKworICAgIFN1biBWaXN1YWwgV29ya1Nob3AJCQkJRkVBVF9TVU5fV09SS1NIT1AKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBJbnRlZ3JhdGVkIERlYnVnZ2VycwkJCQkJKmRlYnVnZ2VyLWludGVncmF0aW9uKgorCitDdXJyZW50bHkgdGhlIG9ubHkgZnVsbHkgaW50ZWdyYXRlZCBkZWJ1Z2dlci9JUEUvSURFIGlzIFN1bidzIFZpc3VhbCBXb3JrU2hvcAorSW50ZWdyYXRlZCBQcm9ncmFtbWluZyBFbnZpcm9ubWVudC4KKworIHZpbTp0dz03ODpzdz00OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZGV2ZWxvcC50eHQgYi9ydW50aW1lL2RvYy9kZXZlbG9wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTRmNGUzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvZGV2ZWxvcC50eHQKQEAgLTAsMCArMSwzODQgQEAKKypkZXZlbG9wLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKYW4gMTcKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitEZXZlbG9wbWVudCBvZiBWaW0uCQkJCQkqZGV2ZWxvcG1lbnQqCisKK1RoaXMgdGV4dCBpcyBpbXBvcnRhbnQgZm9yIHRob3NlIHdobyB3YW50IHRvIGJlIGludm9sdmVkIGluIGZ1cnRoZXIgZGV2ZWxvcGluZworVmltLgorCisxLiBEZXNpZ24gZ29hbHMJCXxkZXNpZ24tZ29hbHN8CisyLiBDb2Rpbmcgc3R5bGUJCXxjb2Rpbmctc3R5bGV8CiszLiBEZXNpZ24gZGVjaXNpb25zCXxkZXNpZ24tZGVjaXNpb25zfAorNC4gQXNzdW1wdGlvbnMJCXxkZXNpZ24tYXNzdW1wdGlvbnN8CisKK1NlZSB0aGUgZmlsZSBSRUFETUUudHh0IGluIHRoZSAic3JjIiBkaXJlY3RvcnkgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBzb3VyY2UKK2NvZGUuCisKK1ZpbSBpcyBvcGVuIHNvdXJjZSBzb2Z0d2FyZS4gIEV2ZXJ5Ym9keSBpcyBlbmNvdXJhZ2VkIHRvIGNvbnRyaWJ1dGUgdG8gaGVscAoraW1wcm92aW5nIFZpbS4gIEZvciBzZW5kaW5nIHBhdGNoZXMgYSBjb250ZXh0IGRpZmYgImRpZmYgLWMiIGlzIHByZWZlcnJlZC4KK0Fsc28gc2VlIGh0dHA6Ly93d3cudmltLm9yZy90aXBzL3RpcC5waHA/dGlwX2lkPTYxOC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBEZXNpZ24gZ29hbHMJCQkJCQkqZGVzaWduLWdvYWxzKgorCitNb3N0IGltcG9ydGFudCB0aGluZ3MgY29tZSBmaXJzdCAocm91Z2hseSkuCisKK05vdGUgdGhhdCBxdWl0ZSBhIGZldyBpdGVtcyBhcmUgY29udHJhZGljdGluZy4gIFRoaXMgaXMgaW50ZW50aW9uYWwuICBBCitiYWxhbmNlIG11c3QgYmUgZm91bmQgYmV0d2VlbiB0aGVtLgorCisKK1ZJTSBJUy4uLiBWSSBDT01QQVRJQkxFCQkJCQkqZGVzaWduLWNvbXBhdGlibGUqCisKK0ZpcnN0IG9mIGFsbCwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHVzZSBWaW0gYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvcgorVmkuICBXaGVuIHRoZSB1c2VyIHdhbnRzIHRvLCBoZSBjYW4gdXNlIFZpbSBpbiBjb21wYXRpYmxlIG1vZGUgYW5kIGhhcmRseQorbm90aWNlIGFueSBkaWZmZXJlbmNlIHdpdGggdGhlIG9yaWdpbmFsIFZpLgorCitFeGNlcHRpb25zOgorLSBXZSBkb24ndCByZXByb2R1Y2Ugb2J2aW91cyBWaSBidWdzIGluIFZpbS4KKy0gVGhlcmUgYXJlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBWaS4gIEkgYW0gdXNpbmcgVmVyc2lvbiAzLjcgKDYvNy84NSkgYXMgYQorICByZWZlcmVuY2UuICBCdXQgc3VwcG9ydCBmb3Igb3RoZXIgdmVyc2lvbnMgaXMgYWxzbyBpbmNsdWRlZCB3aGVuIHBvc3NpYmxlLgorICBUaGUgVmkgcGFydCBvZiBQT1NJWCBpcyBub3QgY29uc2lkZXJlZCBhIGRlZmluaXRpdmUgc291cmNlLgorLSBWaW0gYWRkcyBuZXcgY29tbWFuZHMsIHlvdSBjYW5ub3QgcmVseSBvbiBzb21lIGNvbW1hbmQgdG8gZmFpbCBiZWNhdXNlIGl0CisgIGRpZG4ndCBleGlzdCBpbiBWaS4KKy0gVmltIHdpbGwgaGF2ZSBhIGxvdCBvZiBmZWF0dXJlcyB0aGF0IFZpIGRvZXNuJ3QgaGF2ZS4gIEdvaW5nIGJhY2sgZnJvbSBWaW0KKyAgdG8gVmkgd2lsbCBiZSBhIHByb2JsZW0sIHRoaXMgY2Fubm90IGJlIGF2b2lkZWQuCistIFNvbWUgdGhpbmdzIGFyZSBoYXJkbHkgZXZlciB1c2VkIChvcGVuIG1vZGUsIHNlbmRpbmcgYW4gZS1tYWlsIHdoZW4KKyAgY3Jhc2hpbmcsIGV0Yy4pLiAgVGhvc2Ugd2lsbCBvbmx5IGJlIGluY2x1ZGVkIHdoZW4gc29tZW9uZSBoYXMgYSBnb29kIHJlYXNvbgorICB3aHkgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGFuZCBpdCdzIG5vdCB0b28gbXVjaCB3b3JrLgorLSBGb3Igc29tZSBpdGVtcyBpdCBpcyBkZWJhdGFibGUgd2hldGhlciBWaSBjb21wYXRpYmlsaXR5IHNob3VsZCBiZQorICBtYWludGFpbmVkLiAgVGhlcmUgd2lsbCBiZSBhbiBvcHRpb24gZmxhZyBmb3IgdGhlc2UuCisKKworVklNIElTLi4uIElNUFJPVkVECQkJCQkqZGVzaWduLWltcHJvdmVkKgorCitUaGUgSU1wcm92ZWQgYml0cyBvZiBWaW0gc2hvdWxkIG1ha2UgaXQgYSBiZXR0ZXIgVmksIHdpdGhvdXQgYmVjb21pbmcgYQorY29tcGxldGVseSBkaWZmZXJlbnQgZWRpdG9yLiAgRXh0ZW5zaW9ucyBhcmUgZG9uZSB3aXRoIGEgIlZpIHNwaXJpdCIuCistIFVzZSB0aGUga2V5Ym9hcmQgYXMgbXVjaCBhcyBmZWFzaWJsZS4gIFRoZSBtb3VzZSByZXF1aXJlcyBhIHRoaXJkIGhhbmQsCisgIHdoaWNoIHdlIGRvbid0IGhhdmUuICBNYW55IHRlcm1pbmFscyBkb24ndCBoYXZlIGEgbW91c2UuCistIFdoZW4gdGhlIG1vdXNlIGlzIHVzZWQgYW55d2F5LCBhdm9pZCB0aGUgbmVlZCB0byBzd2l0Y2ggYmFjayB0byB0aGUKKyAga2V5Ym9hcmQuICBBdm9pZCBtaXhpbmcgbW91c2UgYW5kIGtleWJvYXJkIGhhbmRsaW5nLgorLSBBZGQgY29tbWFuZHMgYW5kIG9wdGlvbnMgaW4gYSBjb25zaXN0ZW50IHdheS4gIE90aGVyd2lzZSBwZW9wbGUgd2lsbCBoYXZlIGEKKyAgaGFyZCB0aW1lIGZpbmRpbmcgYW5kIHJlbWVtYmVyaW5nIHRoZW0uICBLZWVwIGluIG1pbmQgdGhhdCBtb3JlIGNvbW1hbmRzIGFuZAorICBvcHRpb25zIHdpbGwgYmUgYWRkZWQgbGF0ZXIuCistIEEgZmVhdHVyZSB0aGF0IHBlb3BsZSBkbyBub3Qga25vdyBhYm91dCBpcyBhIHVzZWxlc3MgZmVhdHVyZS4gIERvbid0IGFkZAorICBvYnNjdXJlIGZlYXR1cmVzLCBvciBhdCBsZWFzdCBhZGQgaGludHMgaW4gZG9jdW1lbnRhdGlvbiB0aGF0IHRoZXkgZXhpc3RzLgorLSBNaW5pbWl6ZSB1c2luZyBDVFJMIGFuZCBvdGhlciBtb2RpZmllcnMsIHRoZXkgYXJlIG1vcmUgZGlmZmljdWx0IHRvIHR5cGUuCistIFRoZXJlIGFyZSBtYW55IGZpcnN0LXRpbWUgYW5kIGluZXhwZXJpZW5jZWQgVmltIHVzZXJzLiAgTWFrZSBpdCBlYXN5IGZvcgorICB0aGVtIHRvIHN0YXJ0IHVzaW5nIFZpbSBhbmQgbGVhcm4gbW9yZSBvdmVyIHRpbWUuCistIFRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSBmZWF0dXJlcyB0aGF0IGNhbiBiZSBhZGRlZC4gIFNlbGVjdGluZyBuZXcgZmVhdHVyZXMKKyAgaXMgb25lIGJhc2VkIG9uICgxKSB3aGF0IHVzZXJzIGFzayBmb3IsICgyKSBob3cgbXVjaCBlZmZvcnQgaXQgdGFrZXMgdG8KKyAgaW1wbGVtZW50IGFuZCAoMykgc29tZW9uZSBhY3R1YWxseSBpbXBsZW1lbnRpbmcgaXQuCisKKworVklNIElTLi4uIE1VTFRJIFBMQVRGT1JNCQkJCSpkZXNpZ24tbXVsdGktcGxhdGZvcm0qCisKK1ZpbSB0cmllcyB0byBoZWxwIGFzIG1hbnkgdXNlcnMgb24gYXMgbWFueSBwbGF0Zm9ybXMgYXMgcG9zc2libGUuCistIFN1cHBvcnQgbWFueSBraW5kcyBvZiB0ZXJtaW5hbHMuICBUaGUgbWluaW1hbCBkZW1hbmRzIGFyZSBjdXJzb3IgcG9zaXRpb25pbmcKKyAgYW5kIGNsZWFyLXNjcmVlbi4gIENvbW1hbmRzIHNob3VsZCBvbmx5IHVzZSBrZXkgc3Ryb2tlcyB0aGF0IG1vc3Qga2V5Ym9hcmRzCisgIGhhdmUuICBTdXBwb3J0IGFsbCB0aGUga2V5cyBvbiB0aGUga2V5Ym9hcmQgZm9yIG1hcHBpbmcuCistIFN1cHBvcnQgbWFueSBwbGF0Zm9ybXMuICBBIGNvbmRpdGlvbiBpcyB0aGF0IHRoZXJlIGlzIHNvbWVvbmUgd2lsbGluZyB0byBkbworICBWaW0gZGV2ZWxvcG1lbnQgb24gdGhhdCBwbGF0Zm9ybSwgYW5kIGl0IGRvZXNuJ3QgbWVhbiBtZXNzaW5nIHVwIHRoZSBjb2RlLgorLSBTdXBwb3J0IG1hbnkgY29tcGlsZXJzIGFuZCBsaWJyYXJpZXMuICBOb3QgZXZlcnlib2R5IGlzIGFibGUgb3IgYWxsb3dlZCB0bworICBpbnN0YWxsIGFub3RoZXIgY29tcGlsZXIgb3IgR1VJIGxpYnJhcnkuCistIFBlb3BsZSBzd2l0Y2ggZnJvbSBvbmUgcGxhdGZvcm0gdG8gYW5vdGhlciwgYW5kIGZyb20gR1VJIHRvIHRlcm1pbmFsCisgIHZlcnNpb24uICBGZWF0dXJlcyBzaG91bGQgYmUgcHJlc2VudCBpbiBhbGwgdmVyc2lvbnMsIG9yIGF0IGxlYXN0IGluIGFzIG1hbnkKKyAgYXMgcG9zc2libGUgd2l0aCBhIHJlYXNvbmFibGUgZWZmb3J0LiAgVHJ5IHRvIGF2b2lkIHRoYXQgdXNlcnMgbXVzdCBzd2l0Y2gKKyAgYmV0d2VlbiBwbGF0Zm9ybXMgdG8gYWNjb21wbGlzaCB0aGVpciB3b3JrIGVmZmljaWVudGx5LgorLSBUaGF0IGEgZmVhdHVyZSBpcyBub3QgcG9zc2libGUgb24gc29tZSBwbGF0Zm9ybXMsIG9yIG9ubHkgcG9zc2libGUgb24gb25lCisgIHBsYXRmb3JtLCBkb2VzIG5vdCBtZWFuIGl0IGNhbm5vdCBiZSBpbXBsZW1lbnRlZC4gIFtUaGlzIGludGVudGlvbmFsbHkKKyAgY29udHJhZGljdHMgdGhlIHByZXZpb3VzIGl0ZW0sIHRoZXNlIHR3byBtdXN0IGJlIGJhbGFuY2VkLl0KKworCitWSU0gSVMuLi4gV0VMTCBET0NVTUVOVEVECQkJCSpkZXNpZ24tZG9jdW1lbnRlZCoKKworLSBBIGZlYXR1cmUgdGhhdCBpc24ndCBkb2N1bWVudGVkIGlzIGEgdXNlbGVzcyBmZWF0dXJlLiAgQSBwYXRjaCBmb3IgYSBuZXcKKyAgZmVhdHVyZSBtdXN0IGluY2x1ZGUgdGhlIGRvY3VtZW50YXRpb24uCistIERvY3VtZW50YXRpb24gc2hvdWxkIGJlIGNvbXByZWhlbnNpdmUgYW5kIHVuZGVyc3RhbmRhYmxlLiAgVXNpbmcgZXhhbXBsZXMgaXMKKyAgcmVjb21tZW5kZWQuCistIERvbid0IG1ha2UgdGhlIHRleHQgdW5uZWNlc3NhcmlseSBsb25nLiAgTGVzcyBkb2N1bWVudGF0aW9uIG1lYW5zIHRoYXQgYW4KKyAgaXRlbSBpcyBlYXNpZXIgdG8gZmluZC4KKworCitWSU0gSVMuLi4gSElHSCBTUEVFRCBBTkQgU01BTEwgSU4gU0laRQkJCSpkZXNpZ24tc3BlZWQtc2l6ZSoKKworVXNpbmcgVmltIG11c3Qgbm90IGJlIGEgYmlnIGF0dGFjayBvbiBzeXN0ZW0gcmVzb3VyY2VzLiAgS2VlcCBpdCBzbWFsbCBhbmQKK2Zhc3QuCistIENvbXB1dGVycyBhcmUgYmVjb21pbmcgZmFzdGVyIGFuZCBiaWdnZXIgZWFjaCB5ZWFyLiAgVmltIGNhbiBncm93IHRvbywgYnV0CisgIG5vIGZhc3RlciB0aGFuIGNvbXB1dGVycyBhcmUgZ3Jvd2luZy4gIEtlZXAgVmltIHVzYWJsZSBvbiBvbGRlciBzeXN0ZW1zLgorLSBNYW55IHVzZXJzIHN0YXJ0IFZpbSBmcm9tIGEgc2hlbGwgdmVyeSBvZnRlbi4gIFN0YXJ0dXAgdGltZSBtdXN0IGJlIHNob3J0LgorLSBDb21tYW5kcyBtdXN0IHdvcmsgZWZmaWNpZW50bHkuICBUaGUgdGltZSB0aGV5IGNvbnN1bWUgbXVzdCBiZSBhcyBzbWFsbCBhcworICBwb3NzaWJsZS4gIFVzZWZ1bCBjb21tYW5kcyBtYXkgdGFrZSBsb25nZXIuCistIERvbid0IGZvcmdldCB0aGF0IHNvbWUgcGVvcGxlIHVzZSBWaW0gb3ZlciBhIHNsb3cgY29ubmVjdGlvbi4gIE1pbmltaXplIHRoZQorICBjb21tdW5pY2F0aW9uIG92ZXJoZWFkLgorLSBJdGVtcyB0aGF0IGFkZCBjb25zaWRlcmFibHkgdG8gdGhlIHNpemUgYW5kIGFyZSBub3QgdXNlZCBieSBtYW55IHBlb3BsZQorICBzaG91bGQgYmUgYSBmZWF0dXJlIHRoYXQgY2FuIGJlIGRpc2FibGVkLgorLSBWaW0gaXMgYSBjb21wb25lbnQgYW1vbmcgb3RoZXIgY29tcG9uZW50cy4gIERvbid0IHR1cm4gaXQgaW50byBhIG1hc3NpdmUKKyAgYXBwbGljYXRpb24sIGJ1dCBoYXZlIGl0IHdvcmsgd2VsbCB0b2dldGhlciB3aXRoIG90aGVyIHByb2dyYW1zLgorCisKK1ZJTSBJUy4uLiBNQUlOVEFJTkFCTEUJCQkJCSpkZXNpZ24tbWFpbnRhaW4qCisKKy0gVGhlIHNvdXJjZSBjb2RlIHNob3VsZCBub3QgYmVjb21lIGEgbWVzcy4gIEl0IHNob3VsZCBiZSByZWxpYWJsZSBjb2RlLgorLSBVc2UgdGhlIHNhbWUgbGF5b3V0IGluIGFsbCBmaWxlcyB0byBtYWtlIGl0IGVhc3kgdG8gcmVhZCB8Y29kaW5nLXN0eWxlfC4KKy0gVXNlIGNvbW1lbnRzIGluIGEgdXNlZnVsIHdheSEKKy0gUG9ydGluZyB0byBhbm90aGVyIHBsYXRmb3JtIHNob3VsZCBiZSBtYWRlIGVhc3ksIHdpdGhvdXQgaGF2aW5nIHRvIGNoYW5nZQorICB0b28gbXVjaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBjb2RlLgorLSBVc2UgdGhlIG9iamVjdC1vcmllbnRlZCBzcGlyaXQ6IFB1dCBkYXRhIGFuZCBjb2RlIHRvZ2V0aGVyLiAgTWluaW1pemUgdGhlCisgIGtub3dsZWRnZSBzcHJlYWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuCisKKworVklNIElTLi4uIEZMRVhJQkxFCQkJCQkqZGVzaWduLWZsZXhpYmxlKgorCitWaW0gc2hvdWxkIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gd29yayBpbiB0aGVpciBwcmVmZXJyZWQgc3R5bGVzIHJhdGhlcgordGhhbiBjb2VyY2luZyBpdHMgdXNlcnMgaW50byBwYXJ0aWN1bGFyIHBhdHRlcm5zIG9mIHdvcmsuICBUaGlzIGNhbiBiZSBmb3IKK2l0ZW1zIHdpdGggYSBsYXJnZSBpbXBhY3QgKGUuZy4sIHRoZSAnY29tcGF0aWJsZScgb3B0aW9uKSBvciBmb3IgZGV0YWlscy4gIFRoZQorZGVmYXVsdHMgYXJlIGNhcmVmdWxseSBjaG9zZW4gc3VjaCB0aGF0IG1vc3QgdXNlcnMgd2lsbCBlbmpveSB1c2luZyBWaW0gYXMgaXQKK2lzLiAgQ29tbWFuZHMgYW5kIG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gYWRqdXN0IFZpbSB0byB0aGUgZGVzaXJlIG9mIHRoZSB1c2VyCithbmQgaXRzIGVudmlyb25tZW50LgorCisKK1ZJTSBJUy4uLiBOT1QJCQkJCQkqZGVzaWduLW5vdCoKKworLSBWaW0gaXMgbm90IGEgc2hlbGwgb3IgYW4gT3BlcmF0aW5nIFN5c3RlbS4gIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJ1biBhCisgIHNoZWxsIGluc2lkZSBWaW0gb3IgdXNlIGl0IHRvIGNvbnRyb2wgYSBkZWJ1Z2dlci4gIFRoaXMgc2hvdWxkIHdvcmsgdGhlCisgIG90aGVyIHdheSBhcm91bmQ6IFVzZSBWaW0gYXMgYSBjb21wb25lbnQgZnJvbSBhIHNoZWxsIG9yIGluIGFuIElERS4KKyAgQSBzYXRpcmljYWwgd2F5IHRvIHNheSB0aGlzOiAiVW5saWtlIEVtYWNzLCBWaW0gZG9lcyBub3QgYXR0ZW1wdCB0byBpbmNsdWRlCisgIGV2ZXJ5dGhpbmcgYnV0IHRoZSBraXRjaGVuIHNpbmssIGJ1dCBzb21lIHBlb3BsZSBzYXkgdGhhdCB5b3UgY2FuIGNsZWFuIG9uZQorICB3aXRoIGl0LiAgOy0pIgorLSBWaW0gaXMgbm90IGEgZmFuY3kgR1VJIGVkaXRvciB0aGF0IHRyaWVzIHRvIGxvb2sgbmljZSBhdCB0aGUgY29zdCBvZgorICBiZWluZyBsZXNzIGNvbnNpc3RlbnQgb3ZlciBhbGwgcGxhdGZvcm1zLiAgQnV0IGZ1bmN0aW9uYWwgR1VJIGZlYXR1cmVzIGFyZQorICB3ZWxjb21lZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBDb2Rpbmcgc3R5bGUJCQkJCQkqY29kaW5nLXN0eWxlKgorCitUaGVzZSBhcmUgdGhlIHJ1bGVzIHRvIHVzZSB3aGVuIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBWaW0gc291cmNlIGNvZGUuICBQbGVhc2UKK3N0aWNrIHRvIHRoZXNlIHJ1bGVzLCB0byBrZWVwIHRoZSBzb3VyY2VzIHJlYWRhYmxlIGFuZCBtYWludGFpbmFibGUuCisKK1RoaXMgbGlzdCBpcyBub3QgY29tcGxldGUuICBMb29rIGluIHRoZSBzb3VyY2UgY29kZSBmb3IgbW9yZSBleGFtcGxlcy4KKworCitNQUtJTkcgQ0hBTkdFUwkJCQkJCSpzdHlsZS1jaGFuZ2VzKgorCitUaGUgYmFzaWMgc3RlcHMgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZSBjb2RlOgorMS4gQWRqdXN0IHRoZSBkb2N1bWVudGF0aW9uLiAgRG9pbmcgdGhpcyBmaXJzdCBnaXZlcyB5b3UgYW4gaW1wcmVzc2lvbiBvZiBob3cKKyAgIHlvdXIgY2hhbmdlcyBhZmZlY3QgdGhlIHVzZXIuCisyLiBNYWtlIHRoZSBzb3VyY2UgY29kZSBjaGFuZ2VzLgorMy4gQ2hlY2sgLi4vZG9jL3RvZG8udHh0IGlmIHRoZSBjaGFuZ2UgYWZmZWN0cyBhbnkgbGlzdGVkIGl0ZW0uCis0LiBNYWtlIGEgcGF0Y2ggd2l0aCAiZGlmZiAtYyIgYWdhaW5zdCB0aGUgdW5tb2RpZmllZCBjb2RlIGFuZCBkb2NzLgorNS4gTWFrZSBhIG5vdGUgYWJvdXQgd2hhdCBjaGFuZ2VkIGFuZCBpbmNsdWRlIGl0IHdpdGggdGhlIHBhdGNoLgorCisKK1VTRSBPRiBDT01NT04gRlVOQ1RJT05TCQkJCQkqc3R5bGUtZnVuY3Rpb25zKgorCitTb21lIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gdXNlLCBoYXZlIGEgc3BlY2lhbCBWaW0gdmVyc2lvbi4gIEFsd2F5cworY29uc2lkZXIgdXNpbmcgdGhlIFZpbSB2ZXJzaW9uLCBiZWNhdXNlIHRoZXkgd2VyZSBpbnRyb2R1Y2VkIHdpdGggYSByZWFzb24uCisKK05PUk1BTCBOQU1FCVZJTSBOQU1FCURJRkZFUkVOQ0UgT0YgVklNIFZFUlNJT04KK2ZyZWUoKQkJdmltX2ZyZWUoKQlDaGVja3MgZm9yIGZyZWVpbmcgTlVMTAorbWFsbG9jKCkJYWxsb2MoKQkJQ2hlY2tzIGZvciBvdXQgb2YgbWVtb3J5IHNpdHVhdGlvbgorbWFsbG9jKCkJbGFsbG9jKCkJTGlrZSBhbGxvYygpLCBidXQgaGFzIGxvbmcgYXJndW1lbnQKK3N0cmNweSgpCVNUUkNQWSgpCUluY2x1ZGVzIGNhc3QgdG8gKGNoYXIgKiksIGZvciBjaGFyX3UgKiBhcmdzCitzdHJjaHIoKQl2aW1fc3RyY2hyKCkJQWNjZXB0cyBzcGVjaWFsIGNoYXJhY3RlcnMKK3N0cnJjaHIoKQl2aW1fc3RycmNocigpCUFjY2VwdHMgc3BlY2lhbCBjaGFyYWN0ZXJzCitpc3NwYWNlKCkJdmltX2lzc3BhY2UoKQlDYW4gaGFuZGxlIGNoYXJhY3RlcnMgPiAxMjgKK2lzd2hpdGUoKQl2aW1faXN3aGl0ZSgpCU9ubHkgVFJVRSBmb3IgVGFiIGFuZCBzcGFjZQorbWVtY3B5KCkJdmltX21lbW1vdmUoKQlIYW5kbGVzIG92ZXJsYXBwZWQgY29waWVzCitiY29weSgpCQl2aW1fbWVtbW92ZSgpCUhhbmRsZXMgb3ZlcmxhcHBlZCBjb3BpZXMKK21lbXNldCgpCXZpbV9tZW1zZXQoKQlVbmlmb3JtIGZvciBhbGwgc3lzdGVtcworCisKK05BTUVTCQkJCQkJCSpzdHlsZS1uYW1lcyoKKworRnVuY3Rpb24gbmFtZXMgY2FuIG5vdCBiZSBtb3JlIHRoYW4gMzEgY2hhcmFjdGVycyBsb25nIChiZWNhdXNlIG9mIFZNUykuCisKK0Rvbid0IHVzZSAiZGVsZXRlIiBhcyBhIHZhcmlhYmxlIG5hbWUsIEMrKyBkb2Vzbid0IGxpa2UgaXQuCisKK0JlY2F1c2Ugb2YgdGhlIHJlcXVpcmVtZW50IHRoYXQgVmltIHJ1bnMgb24gYXMgbWFueSBzeXN0ZW1zIGFzIHBvc3NpYmxlLCB3ZQorbmVlZCB0byBhdm9pZCB1c2luZyBuYW1lcyB0aGF0IGFyZSBhbHJlYWR5IGRlZmluZWQgYnkgdGhlIHN5c3RlbS4gIFRoaXMgaXMgYQorbGlzdCBvZiBuYW1lcyB0aGF0IGFyZSBrbm93biB0byBjYXVzZSB0cm91YmxlLiAgVGhlIG5hbWUgaXMgZ2l2ZW4gYXMgYSByZWdleHAKK3BhdHRlcm4uCisKK2lzLiooKQkJUE9TSVgsIGN0eXBlLmgKK3RvLiooKQkJUE9TSVgsIGN0eXBlLmgKKworZF8uKgkJUE9TSVgsIGRpcmVudC5oCitsXy4qCQlQT1NJWCwgZmNudGwuaAorZ3JfLioJCVBPU0lYLCBncnAuaAorcHdfLioJCVBPU0lYLCBwd2QuaAorc2FfLioJCVBPU0lYLCBzaWduYWwuaAorbWVtLioJCVBPU0lYLCBzdHJpbmcuaAorc3RyLioJCVBPU0lYLCBzdHJpbmcuaAord2NzLioJCVBPU0lYLCBzdHJpbmcuaAorc3RfLioJCVBPU0lYLCBzdGF0LmgKK3Rtc18uKgkJUE9TSVgsIHRpbWVzLmgKK3RtXy4qCQlQT1NJWCwgdGltZS5oCitjXy4qCQlQT1NJWCwgdGVybWlvcy5oCitNQVguKgkJUE9TSVgsIGxpbWl0cy5oCitfXy4qCQlQT1NJWCwgc3lzdGVtCitfW0EtWl0uKglQT1NJWCwgc3lzdGVtCitFW0EtWjAtOV0qCVBPU0lYLCBlcnJuby5oCisKKypfdAkJUE9TSVgsIGZvciB0eXBlZGVmcy4gIFVzZSAqX1QgaW5zdGVhZC4KKword2FpdAkJZG9uJ3QgdXNlIGFzIGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24sIGNvbmZsaWN0cyB3aXRoIHR5cGVzLmgKK2luZGV4CQlzaGFkb3dzIGdsb2JhbCBkZWNsYXJhdGlvbgordGltZQkJc2hhZG93cyBnbG9iYWwgZGVjbGFyYXRpb24KK25ldwkJQysrIHJlc2VydmVkIGtleXdvcmQKK3RyeQkJQm9ybGFuZCBDKysgZG9lc24ndCBsaWtlIGl0IHRvIGJlIHVzZWQgYXMgYSB2YXJpYWJsZS4KKworYmFzZW5hbWUoKQlHTlUgc3RyaW5nIGZ1bmN0aW9uCitkaXJuYW1lKCkJR05VIHN0cmluZyBmdW5jdGlvbgorZ2V0X2Vudl92YWx1ZSgpCUxpbnV4IHN5c3RlbSBmdW5jdGlvbgorCisKK1ZBUklPVVMJCQkJCQkJKnN0eWxlLXZhcmlvdXMqCisKK1R5cGVkZWYnZWQgbmFtZXMgc2hvdWxkIGVuZCBpbiAiX3QiOiA+CisgICAgdHlwZWRlZiBpbnQgc29tZV90OworRGVmaW5lJ2VkIG5hbWVzIHNob3VsZCBiZSB1cHBlcmNhc2U6ID4KKyAgICAjZGVmaW5lIFNPTUVfVEhJTkcKK0ZlYXR1cmVzIGFsd2F5cyBzdGFydCB3aXRoICJGRUFUXyI6ID4KKyAgICAjZGVmaW5lIEZFQVRfRk9PCisKK0Rvbid0IHVzZSAnXCInLCBzb21lIGNvbXBpbGVycyBjYW4ndCBoYW5kbGUgaXQuICAnIicgd29ya3MgZmluZS4KKworRG9uJ3QgdXNlOgorICAgICNpZiBIQVZFX1NPTUUKK1NvbWUgY29tcGlsZXJzIGNhbid0IGhhbmRsZSB0aGF0IGFuZCBjb21wbGFpbiB0aGF0ICJIQVZFX1NPTUUiIGlzIG5vdCBkZWZpbmVkLgorVXNlCisgICAgI2lmZGVmIEhBVkVfU09NRQorb3IKKyAgICAjaWYgZGVmaW5lZChIQVZFX1NPTUUpCisKKworU1RZTEUJCQkJCQkJKnN0eWxlLWV4YW1wbGVzKgorCitHZW5lcmFsIHJ1bGU6IE9uZSBzdGF0ZW1lbnQgcGVyIGxpbmUuCisKK1dyb25nOgkgICAgaWYgKGNvbmQpIGEgPSAxOworCitPSzoJICAgIGlmIChjb25kKQorCQlhID0gMTsKKworV3Jvbmc6CSAgICB3aGlsZSAoY29uZCk7CisKK09LOgkgICAgd2hpbGUgKGNvbmQpCisJCTsKKworV3Jvbmc6CSAgICBkbyBhID0gMTsgd2hpbGUgKGNvbmQpOworCitPSzoJICAgIGRvCisJCWEgPSAxOworCSAgICB3aGlsZSAoY29uZCk7CisKKworRnVuY3Rpb25zIHN0YXJ0IHdpdGg6CisKK1dyb25nOglpbnQgZnVuY3Rpb25fbmFtZShpbnQgYXJnMSwgaW50IGFyZzIpCisKK09LOgkvKgorCSAqIEV4cGxhbmF0aW9uIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvci4KKwkgKgorCSAqIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbi4KKwkgKi8KKwkgICAgaW50CisJZnVuY3Rpb25fbmFtZShhcmcxLCBhcmcyKQorCSAgICBpbnQJCWFyZzE7CQkvKiBzaG9ydCBjb21tZW50IGFib3V0IGFyZzEgKi8KKwkgICAgaW50CQlhcmcyOwkJLyogc2hvcnQgY29tbWVudCBhYm91dCBhcmcyICovCisJeworCSAgICBpbnQJCWxvY2FsOwkJLyogY29tbWVudCBhYm91dCBsb2NhbCAqLworCisJICAgIGxvY2FsID0gYXJnMSAqIGFyZzI7CisKK05PVEU6IERvbid0IHVzZSBBTlNJIHN0eWxlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gIEEgZmV3IHBlb3BsZSBzdGlsbCBoYXZlIHRvCit1c2UgYSBjb21waWxlciB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKworCitTUEFDRVMgQU5EIFBVTkNUVUFUSU9OCQkJCQkqc3R5bGUtc3BhY2VzKgorCitObyBzcGFjZSBiZXR3ZWVuIGEgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIGJyYWNrZXQ6CisKK1dyb25nOiAgZnVuYyAoYXJnKTsKK09LOglmdW5jKGFyZyk7CisKK0RvIHVzZSBhIHNwYWNlIGFmdGVyIGlmLCB3aGlsZSwgc3dpdGNoLCBldGMuCisKK1dyb25nOglpZihhcmcpCQlmb3IoOzspCitPSzoJaWYgKGFyZykJZm9yICg7OykKKworVXNlIGEgc3BhY2UgYWZ0ZXIgYSBjb21tYSBhbmQgc2VtaWNvbG9uOgorCitXcm9uZzogIGZ1bmMoYXJnMSxhcmcyKTsJZm9yIChpID0gMDtpIDwgMjsrK2kpCitPSzoJZnVuYyhhcmcxLCBhcmcyKTsJZm9yIChpID0gMDsgaSA8IDI7ICsraSkKKworVXNlIGEgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciAnPScsICcrJywgJy8nLCBldGMuCisKK1dyb25nOgl2YXI9YSo1OworT0s6CXZhciA9IGEgKiA1OworCitJbiBnZW5lcmFsOiBVc2UgZW1wdHkgbGluZXMgdG8gZ3JvdXAgbGluZXMgb2YgY29kZSB0b2dldGhlci4gIFB1dCBhIGNvbW1lbnQKK2p1c3QgYWJvdmUgdGhlIGdyb3VwIG9mIGxpbmVzLiAgVGhpcyBtYWtlcyBpdCBtb3JlIGVhc3kgdG8gcXVpY2tseSBzZWUgd2hhdCBpcworYmVpbmcgZG9uZS4KKworT0s6CS8qIFByZXBhcmUgZm9yIGJ1aWxkaW5nIHRoZSB0YWJsZS4gKi8KKwlnZXRfZmlyc3RfaXRlbSgpOworCXRhYmxlX2lkeCA9IDA7CisKKwkvKiBCdWlsZCB0aGUgdGFibGUgKi8KKwl3aGlsZSAoaGFzX2l0ZW0oKSkKKwkgICAgdGFibGVbdGFibGVfaWR4KytdID0gbmV4dF9pdGVtKCk7CisKKwkvKiBGaW5pc2ggdXAuICovCisJY2xlYW51cF9pdGVtcygpOworCWdlbmVyYXRlX2hhc2godGFibGUpOworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIERlc2lnbiBkZWNpc2lvbnMJCQkJCSpkZXNpZ24tZGVjaXNpb25zKgorCitGb2xkaW5nCisKK1NldmVyYWwgZm9ybXMgb2YgZm9sZGluZyBzaG91bGQgYmUgcG9zc2libGUgZm9yIHRoZSBzYW1lIGJ1ZmZlci4gIEZvciBleGFtcGxlLAoraGF2ZSBvbmUgd2luZG93IHRoYXQgc2hvd3MgdGhlIHRleHQgd2l0aCBmdW5jdGlvbiBib2RpZXMgZm9sZGVkLCBhbm90aGVyCit3aW5kb3cgdGhhdCBzaG93cyBhIGZ1bmN0aW9uIGJvZHkuCisKK0ZvbGRpbmcgaXMgYSB3YXkgdG8gZGlzcGxheSB0aGUgdGV4dC4gIEl0IHNob3VsZCBub3QgY2hhbmdlIHRoZSB0ZXh0IGl0c2VsZi4KK1RoZXJlZm9yZSB0aGUgZm9sZGluZyBoYXMgYmVlbiBpbXBsZW1lbnRlZCBhcyBhIGZpbHRlciBiZXR3ZWVuIHRoZSB0ZXh0IHN0b3JlZAoraW4gYSBidWZmZXIgKGJ1ZmZlciBsaW5lcykgYW5kIHRoZSB0ZXh0IGRpc3BsYXllZCBpbiBhIHdpbmRvdyAobG9naWNhbCBsaW5lcykuCisKKworTmFtaW5nIHRoZSB3aW5kb3cKKworVGhlIHdvcmQgIndpbmRvdyIgaXMgY29tbW9ubHkgdXNlZCBmb3Igc2V2ZXJhbCB0aGluZ3M6IEEgd2luZG93IG9uIHRoZSBzY3JlZW4sCit0aGUgeHRlcm0gd2luZG93LCBhIHdpbmRvdyBpbnNpZGUgVmltIHRvIHZpZXcgYSBidWZmZXIuCitUbyBhdm9pZCBjb25mdXNpb24sIG90aGVyIGl0ZW1zIHRoYXQgYXJlIHNvbWV0aW1lcyBjYWxsZWQgd2luZG93IGhhdmUgYmVlbgorZ2l2ZW4gYW5vdGhlciBuYW1lLiAgSGVyZSBpcyBhbiBvdmVydmlldyBvZiB0aGUgcmVsYXRlZCBpdGVtczoKKworc2NyZWVuCQlUaGUgd2hvbGUgZGlzcGxheS4gIEZvciB0aGUgR1VJIGl0J3Mgc29tZXRoaW5nIGxpa2UgMTAyNHg3NjgKKwkJcGl4ZWxzLiAgVGhlIFZpbSBzaGVsbCBjYW4gdXNlIHRoZSB3aG9sZSBzY3JlZW4gb3IgcGFydCBvZiBpdC4KK3NoZWxsCQlUaGUgVmltIGFwcGxpY2F0aW9uLiAgVGhpcyBjYW4gY292ZXIgdGhlIHdob2xlIHNjcmVlbiAoZS5nLiwKKwkJd2hlbiBydW5uaW5nIGluIGEgY29uc29sZSkgb3IgcGFydCBvZiBpdCAoeHRlcm0gb3IgR1VJKS4KK3dpbmRvdwkJVmlldyBvbiBhIGJ1ZmZlci4gIFRoZXJlIGNhbiBiZSBzZXZlcmFsIHdpbmRvd3MgaW4gVmltLAorCQl0b2dldGhlciB3aXRoIHRoZSBjb21tYW5kIGxpbmUsIG1lbnViYXIsIHRvb2xiYXIsIGV0Yy4gdGhleQorCQlmaXQgaW4gdGhlIHNoZWxsLgorCisKK1RvIGJlIGNvbnRpbnVlZC4uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIEFzc3VtcHRpb25zCQkJCQkJKmRlc2lnbi1hc3N1bXB0aW9ucyoKKworU2l6ZSBvZiB2YXJpYWJsZXM6CitjaGFyCSAgICA4IGJpdCBzaWduZWQKK2NoYXJfdQkgICAgOCBiaXQgdW5zaWduZWQKK2ludAkgICAgMTYsIDMyIG9yIDY0IGJpdCBzaWduZWQKK3Vuc2lnbmVkICAgIDE2LCAzMiBvciA2NCBiaXQgdW5zaWduZWQKK2xvbmcJICAgIDMyIG9yIDY0IGJpdCBzaWduZWQsIGNhbiBob2xkIGEgcG9pbnRlcgorCitOb3RlIHRoYXQgc29tZSBjb21waWxlcnMgY2Fubm90IGhhbmRsZSBsb25nIGxpbmVzIG9yIHN0cmluZ3MuICBUaGUgQzg5CitzdGFuZGFyZCBzcGVjaWZpZXMgYSBsaW1pdCBvZiA1MDkgY2hhcmFjdGVycy4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2RpZmYudHh0IGIvcnVudGltZS9kb2MvZGlmZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyMDcyMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2RpZmYudHh0CkBAIC0wLDAgKzEsMzcxIEBACisqZGlmZi50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDAxCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworCQkJCSpkaWZmKiAqdmltZGlmZiogKmd2aW1kaWZmKiAqZGlmZi1tb2RlKgorVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgK2RpZmYgZmVhdHVyZTogU2hvd2luZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBvcgordGhyZWUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZmlsZS4KKworVGhlIGJhc2ljcyBhcmUgZXhwbGFpbmVkIGluIHNlY3Rpb24gfDA4Ljd8IG9mIHRoZSB1c2VyIG1hbnVhbC4KKworMS4gU3RhcnRpbmcgZGlmZiBtb2RlCQl8dmltZGlmZnwKKzIuIFZpZXdpbmcgZGlmZnMJCXx2aWV3LWRpZmZzfAorMy4gSnVtcGluZyB0byBkaWZmcwkJfGp1bXB0by1kaWZmc3wKKzQuIENvcHlpbmcgZGlmZnMJCXxjb3B5LWRpZmZzfAorNS4gRGlmZiBvcHRpb25zCQkJfGRpZmYtb3B0aW9uc3wKKwore25vdCBpbiBWaX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTdGFydGluZyBkaWZmIG1vZGUKKworVGhlIGVhc2llc3Qgd2F5IHRvIHN0YXJ0IGVkaXRpbmcgaW4gZGlmZiBtb2RlIGlzIHdpdGggdGhlICJ2aW1kaWZmIiBjb21tYW5kLgorVGhpcyBzdGFydHMgVmltIGFzIHVzdWFsLCBhbmQgYWRkaXRpb25hbGx5IHNldHMgdXAgZm9yIHZpZXdpbmcgdGhlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHRoZSBhcmd1bWVudHMuID4KKworCXZpbWRpZmYgZmlsZTEgZmlsZTIgW2ZpbGUzIFtmaWxlNF1dCisKK1RoaXMgaXMgZXF1aXZhbGVudCB0bzogPgorCisJdmltIC1kIGZpbGUxIGZpbGUyIFtmaWxlMyBbZmlsZTRdXQorCitZb3UgbWF5IGFsc28gdXNlICJndmltZGlmZiIgb3IgInZpbSAtZCAtZyIuICBUaGUgR1VJIGlzIHN0YXJ0ZWQgdGhlbi4KK1lvdSBtYXkgYWxzbyB1c2UgInZpZXdkaWZmIiBvciAiZ3ZpZXdkaWZmIi4gIFZpbSBzdGFydHMgaW4gcmVhZG9ubHkgbW9kZSB0aGVuLgorInIiIG1heSBiZSBwcmVwZW5kZWQgZm9yIHJlc3RyaWN0ZWQgbW9kZSAoc2VlIHwtWnwpLgorCitUaGUgc2Vjb25kIGFuZCBmb2xsb3dpbmcgYXJndW1lbnRzIG1heSBhbHNvIGJlIGEgZGlyZWN0b3J5IG5hbWUuICBWaW0gd2lsbAordGhlbiBhcHBlbmQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGRpcmVjdG9yeSBuYW1lIHRvIGZpbmQKK3RoZSBmaWxlLgorCitUaGlzIG9ubHkgd29ya3Mgd2hlbiBhIHN0YW5kYXJkICJkaWZmIiBjb21tYW5kIGlzIGF2YWlsYWJsZS4gIFNlZSAnZGlmZmV4cHInLgorCitXaGF0IGhhcHBlbnMgaXMgdGhhdCBWaW0gb3BlbnMgYSB3aW5kb3cgZm9yIGVhY2ggb2YgdGhlIGZpbGVzLiAgVGhpcyBpcyBsaWtlCit1c2luZyB0aGUgfC1PfCBhcmd1bWVudC4gIFRoaXMgdXNlcyB2ZXJ0aWNhbCBzcGxpdHMuICBJZiB5b3UgcHJlZmVyIGhvcml6b250YWwKK3NwbGl0cyBhZGQgdGhlIHwtb3wgYXJndW1lbnQ6ID4KKworCXZpbWRpZmYgLW8gZmlsZTEgZmlsZTIgW2ZpbGUzXQorCitJbiBlYWNoIG9mIHRoZSBlZGl0ZWQgZmlsZXMgdGhlc2Ugb3B0aW9ucyBhcmUgc2V0OgorCisJJ2RpZmYnCQlvbgorCSdzY3JvbGxiaW5kJwlvbgorCSdzY3JvbGxvcHQnCWluY2x1ZGVzICJob3IiCisJJ3dyYXAnCQlvZmYKKwknZm9sZG1ldGhvZCcJImRpZmYiCisJJ2ZvbGRjb2x1bW4nCTIKKworVGhlc2Ugb3B0aW9ucyBhcmUgc2V0IGxvY2FsIHRvIHRoZSB3aW5kb3cuICBXaGVuIGVkaXRpbmcgYW5vdGhlciBmaWxlIHRoZXkgYXJlCityZXNldCB0byB0aGUgZ2xvYmFsIHZhbHVlLgorCitUaGUgZGlmZmVyZW5jZXMgc2hvd24gYXJlIGFjdHVhbGx5IHRoZSBkaWZmZXJlbmNlcyBpbiB0aGUgYnVmZmVyLiAgVGh1cyBpZiB5b3UKK21ha2UgY2hhbmdlcyBhZnRlciBsb2FkaW5nIGEgZmlsZSwgdGhlc2Ugd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZGlzcGxheWVkCitkaWZmcy4gIFlvdSBtaWdodCBoYXZlIHRvIGRvICI6ZGlmZnVwZGF0ZSIgbm93IGFuZCB0aGVuLCBub3QgYWxsIGNoYW5nZXMgYXJlCitpbW1lZGlhdGVseSB0YWtlbiBpbnRvIGFjY291bnQuCisKK0luIHlvdXIgLnZpbXJjIGZpbGUgeW91IGNvdWxkIGRvIHNvbWV0aGluZyBzcGVjaWFsIHdoZW4gVmltIHdhcyBzdGFydGVkIGluCitkaWZmIG1vZGUuICBZb3UgY291bGQgdXNlIGEgY29uc3RydWN0IGxpa2UgdGhpczogPgorCisJaWYgJmRpZmYKKwkgICBzZXR1cCBmb3IgZGlmZiBtb2RlCisJZWxzZQorCSAgIHNldHVwIGZvciBub24tZGlmZiBtb2RlCisJZW5kaWYKKworV2hpbGUgYWxyZWFkeSBpbiBWaW0geW91IGNhbiBzdGFydCBkaWZmIG1vZGUgaW4gdGhyZWUgd2F5cy4KKworCQkJCQkJCSpFOTgqCis6ZGlmZnNwbGl0IHtmaWxlbmFtZX0JCQkJCSo6ZGlmZnMqICo6ZGlmZnNwbGl0KgorCQlPcGVuIGEgbmV3IHdpbmRvdyBvbiB0aGUgZmlsZSB7ZmlsZW5hbWV9LiAgVGhlIG9wdGlvbnMgYXJlIHNldAorCQlhcyBmb3IgInZpbWRpZmYiIGZvciB0aGUgY3VycmVudCBhbmQgdGhlIG5ld2x5IG9wZW5lZCB3aW5kb3cuCisJCUFsc28gc2VlICdkaWZmZXhwcicuCisKKwkJCQkJCQkqOmRpZmZ0KiAqOmRpZmZ0aGlzKgorOmRpZmZ0aGlzCU1ha2UgdGhlIGN1cnJlbnQgd2luZG93IHBhcnQgb2YgdGhlIGRpZmYgd2luZG93cy4gIFRoaXMgc2V0cworCQl0aGUgb3B0aW9uIGxpa2UgZm9yICJ2aW1kaWZmIi4KKworOmRpZmZwYXRjaCB7cGF0Y2hmaWxlfQkJCQkJKjpkaWZmcCogKjpkaWZmcGF0Y2gqCisJCVVzZSB0aGUgY3VycmVudCBidWZmZXIsIHBhdGNoIGl0IHdpdGggdGhlIGRpZmYgZm91bmQgaW4KKwkJe3BhdGNoZmlsZX0gYW5kIG9wZW4gYSBidWZmZXIgb24gdGhlIHJlc3VsdC4gIFRoZSBvcHRpb25zIGFyZQorCQlzZXQgYXMgZm9yICJ2aW1kaWZmIi4KKwkJe3BhdGNoZmlsZX0gY2FuIGJlIGluIGFueSBmb3JtYXQgdGhhdCB0aGUgInBhdGNoIiBwcm9ncmFtCisJCXVuZGVyc3RhbmRzIG9yICdwYXRjaGV4cHInIGNhbiBoYW5kbGUuCisJCU5vdGUgdGhhdCB7cGF0Y2hmaWxlfSBzaG91bGQgb25seSBjb250YWluIGEgZGlmZiBmb3Igb25lIGZpbGUsCisJCXRoZSBjdXJyZW50IGZpbGUuICBJZiB7cGF0Y2hmaWxlfSBjb250YWlucyBkaWZmcyBmb3Igb3RoZXIKKwkJZmlsZXMgYXMgd2VsbCwgdGhlIHJlc3VsdHMgYXJlIHVucHJlZGljdGFibGUuICBWaW0gY2hhbmdlcworCQlkaXJlY3RvcnkgdG8gL3RtcCB0byBhdm9pZCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKwkJYWNjaWRlbnRhbGx5IGJlaW5nIHBhdGNoZWQuICBCdXQgaXQgbWF5IHN0aWxsIHJlc3VsdCBpbgorCQl2YXJpb3VzICIucmVqIiBmaWxlcyB0byBiZSBjcmVhdGVkLiAgQW5kIHdoZW4gYWJzb2x1dGUgcGF0aAorCQluYW1lcyBhcmUgcHJlc2VudCB0aGVzZSBmaWxlcyBtYXkgZ2V0IHBhdGNoZWQgYW55d2F5LgorCitUbyBtYWtlIHRoZXNlIGNvbW1hbmRzIHVzZSBhIHZlcnRpY2FsIHNwbGl0LCBwcmVwZW5kIHw6dmVydGljYWx8LiAgRXhhbXBsZXM6ID4KKworCTp2ZXJ0IGRpZmZzcGxpdCBtYWluLmN+CisJOnZlcnQgZGlmZnBhdGNoIC90bXAvZGlmZgorPAorCQkJCQkJCSpFOTYqCitUaGVyZSBjYW4gYmUgdXAgdG8gZm91ciBidWZmZXJzIHdpdGggJ2RpZmYnIHNldC4KKworU2luY2UgdGhlIG9wdGlvbiB2YWx1ZXMgYXJlIHJlbWVtYmVyZWQgd2l0aCB0aGUgYnVmZmVyLCB5b3UgY2FuIGVkaXQgYW5vdGhlcgorZmlsZSBmb3IgYSBtb21lbnQgYW5kIGNvbWUgYmFjayB0byB0aGUgc2FtZSBmaWxlIGFuZCBiZSBpbiBkaWZmIG1vZGUgYWdhaW4uCitJZiB5b3UgZG9uJ3Qgd2FudCBkaWZmIG1vZGUsIHJlc2V0IHRoZSAnZGlmZicgb3B0aW9uLiAgQW5kIHlvdSBwcm9iYWJseSB3YW50Cit0byBnZXQgcmlkIG9mIHRoZSBmb2xkIGNvbHVtbjogPgorCisJOnNldCBub2RpZmYgZm9sZGNvbHVtbj0wCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVmlld2luZyBkaWZmcwkJCQkJCSp2aWV3LWRpZmZzKgorCitUaGUgZWZmZWN0IGlzIHRoYXQgdGhlIGRpZmYgd2luZG93cyBzaG93IHRoZSBzYW1lIHRleHQsIHdpdGggdGhlIGRpZmZlcmVuY2VzCitoaWdobGlnaHRlZC4gIFdoZW4gc2Nyb2xsaW5nIHRoZSB0ZXh0LCB0aGUgJ3Njcm9sbGJpbmQnIG9wdGlvbiB3aWxsIG1ha2UgdGhlCit0ZXh0IGluIG90aGVyIHdpbmRvd3MgdG8gYmUgc2Nyb2xsZWQgYXMgd2VsbC4gIFdpdGggdmVydGljYWwgc3BsaXRzIHRoZSB0ZXh0CitzaG91bGQgYmUgYWxpZ25lZCBwcm9wZXJseS4KKworVGhlIGFsaWdubWVudCBvZiB0ZXh0IHdpbGwgZ28gd3Jvbmcgd2hlbjoKKy0gJ3dyYXAnIGlzIG9uLCBzb21lIGxpbmVzIHdpbGwgYmUgd3JhcHBlZCBhbmQgb2NjdXB5IHR3byBvciBtb3JlIHNjcmVlbgorICBsaW5lcworLSBmb2xkcyBhcmUgb3BlbiBpbiBvbmUgd2luZG93IGJ1dCBub3QgYW5vdGhlcgorLSAnc2Nyb2xsYmluZCcgaXMgb2ZmCistIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHRleHQKKy0gImZpbGxlciIgaXMgbm90IHByZXNlbnQgaW4gJ2RpZmZvcHQnLCBkZWxldGVkL2luc2VydGVkIGxpbmVzIG1ha2VzIHRoZQorICBhbGlnbm1lbnQgZ28gd3JvbmcKKworQWxsIHRoZSBidWZmZXJzIGVkaXRlZCBpbiBhIHdpbmRvdyB3aGVyZSB0aGUgJ2RpZmYnIG9wdGlvbiBpcyBzZXQgd2lsbCBqb2luIGluCit0aGUgZGlmZi4gIFRoaXMgaXMgYWxzbyBwb3NzaWJsZSBmb3IgaGlkZGVuIGJ1ZmZlcnMuICBUaGV5IG11c3QgaGF2ZSBiZWVuCitlZGl0ZWQgaW4gYSB3aW5kb3cgZmlyc3QgZm9yIHRoaXMgdG8gYmUgcG9zc2libGUuCisKK1NpbmNlICdkaWZmJyBpcyBhIHdpbmRvdy1sb2NhbCBvcHRpb24sIGl0J3MgcG9zc2libGUgdG8gdmlldyB0aGUgc2FtZSBidWZmZXIKK2luIGRpZmYgbW9kZSBpbiBvbmUgd2luZG93IGFuZCAibm9ybWFsIiBpbiBhbm90aGVyIHdpbmRvdy4gIEl0IGlzIGFsc28KK3Bvc3NpYmxlIHRvIHZpZXcgdGhlIGNoYW5nZXMgeW91IGhhdmUgbWFkZSB0byBhIGJ1ZmZlciwgYnV0IHNpbmNlIFZpbSBkb2Vzbid0CithbGxvdyBoYXZpbmcgdHdvIGJ1ZmZlcnMgZm9yIHRoZSBzYW1lIGZpbGUsIHlvdSBuZWVkIHRvIG1ha2UgYSBjb3B5IG9mIHRoZQorb3JpZ2luYWwgZmlsZSBhbmQgZGlmZiB3aXRoIHRoYXQuICBGb3IgZXhhbXBsZTogPgorCTohY3AgJSB0ZW1wZmlsZQorCTpkaWZmc3BsaXQgdGVtcGZpbGUKKworQSBidWZmZXIgdGhhdCBpcyB1bmxvYWRlZCBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIGRpZmYuICBCdXQgaXQgZG9lcyB3b3JrIGZvcgoraGlkZGVuIGJ1ZmZlcnMuICBZb3UgY2FuIHVzZSAiOmhpZGUiIHRvIGNsb3NlIGEgd2luZG93IHdpdGhvdXQgdW5sb2FkaW5nIHRoZQorYnVmZmVyLgorCisKKwkJCQkJCQkqOmRpZmZ1KiAqOmRpZmZ1cGRhdGUqCitWaW0gYXR0ZW1wdHMgdG8ga2VlcCB0aGUgZGlmZmVyZW5jZXMgdXBkYXRlZCB3aGVuIHlvdSBtYWtlIGNoYW5nZXMgdG8gdGhlCit0ZXh0LiAgVGhpcyBtb3N0bHkgdGFrZXMgY2FyZSBvZiBpbnNlcnRlZCBhbmQgZGVsZXRlZCBsaW5lcy4gIENoYW5nZXMgd2l0aGluIGEKK2xpbmUgYW5kIG1vcmUgY29tcGxpY2F0ZWQgY2hhbmdlcyBkbyBub3QgY2F1c2UgdGhlIGRpZmZlcmVuY2VzIHRvIGJlIHVwZGF0ZWQuCitUbyBmb3JjZSB0aGUgZGlmZmVyZW5jZXMgdG8gYmUgdXBkYXRlZCB1c2U6ID4KKworCTpkaWZmdXBkYXRlCisKKworVmltIHdpbGwgc2hvdyBmaWxsZXIgbGluZXMgZm9yIGxpbmVzIHRoYXQgYXJlIG1pc3NpbmcgaW4gb25lIHdpbmRvdyBidXQgYXJlCitwcmVzZW50IGluIGFub3RoZXIuICBUaGVzZSBsaW5lcyB3ZXJlIGluc2VydGVkIGluIGFub3RoZXIgZmlsZSBvciBkZWxldGVkIGluCit0aGlzIGZpbGUuICBSZW1vdmluZyAiZmlsbGVyIiBmcm9tIHRoZSAnZGlmZm9wdCcgb3B0aW9uIHdpbGwgbWFrZSBWaW0gbm90CitkaXNwbGF5IHRoZXNlIGZpbGxlciBsaW5lcy4KKworCitGb2xkcyBhcmUgdXNlZCB0byBoaWRlIHRoZSB0ZXh0IHRoYXQgd2Fzbid0IGNoYW5nZWQuICBTZWUgfGZvbGRpbmd8IGZvciBhbGwKK3RoZSBjb21tYW5kcyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggZm9sZHMuCisKK1RoZSBjb250ZXh0IG9mIGxpbmVzIGFib3ZlIGEgZGlmZmVyZW5jZSB0aGF0IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGZvbGQgY2FuCitiZSBzZXQgd2l0aCB0aGUgJ2RpZmZvcHQnIG9wdGlvbi4gIEZvciBleGFtcGxlLCB0byBzZXQgdGhlIGNvbnRleHQgdG8gdGhyZWUKK2xpbmVzOiA+CisKKwk6c2V0IGRpZmZvcHQ9ZmlsbGVyLGNvbnRleHQ6MworCisKK1RoZSBkaWZmcyBhcmUgaGlnaGxpZ2h0ZWQgd2l0aCB0aGVzZSBncm91cHM6CisKK3xobC1EaWZmQWRkfAlEaWZmQWRkCQlBZGRlZCAoaW5zZXJ0ZWQpIGxpbmVzLiAgVGhlc2UgbGluZXMgZXhpc3QgaW4KKwkJCQl0aGlzIGJ1ZmZlciBidXQgbm90IGluIGFub3RoZXIuCit8aGwtRGlmZkNoYW5nZXwJRGlmZkNoYW5nZQlDaGFuZ2VkIGxpbmVzLgorfGhsLURpZmZUZXh0fAlEaWZmVGV4dAlDaGFuZ2VkIHRleHQgaW5zaWRlIGEgQ2hhbmdlZCBsaW5lLiAgVmltCisJCQkJZmluZHMgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGlzIGRpZmZlcmVudCwKKwkJCQlhbmQgdGhlIGxhc3QgY2hhcmFjdGVyIHRoYXQgaXMgZGlmZmVyZW50CisJCQkJKHNlYXJjaGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpbmUpLiAgVGhlCisJCQkJdGV4dCBpbiBiZXR3ZWVuIGlzIGhpZ2hsaWdodGVkLiAgVGhpcyBtZWFucworCQkJCXRoYXQgcGFydHMgaW4gdGhlIG1pZGRsZSB0aGF0IGFyZSBzdGlsbCB0aGUKKwkJCQlzYW1lIGFyZSBoaWdobGlnaHRlZCBhbnl3YXkuCit8aGwtRGlmZkRlbGV0ZXwgRGlmZkRlbGV0ZQlEZWxldGVkIGxpbmVzLiAgQWxzbyBjYWxsZWQgZmlsbGVyIGxpbmVzLAorCQkJCWJlY2F1c2UgdGhleSBkb24ndCByZWFsbHkgZXhpc3QgaW4gdGhpcworCQkJCWJ1ZmZlci4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBKdW1waW5nIHRvIGRpZmZzCQkJCQkqanVtcHRvLWRpZmZzKgorCitUd28gY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8ganVtcCB0byBkaWZmczoKKwkJCQkJCQkJKltjKgorCVtjCQlKdW1wIGJhY2t3YXJkcyB0byB0aGUgcHJldmlvdXMgc3RhcnQgb2YgYSBjaGFuZ2UuCisJCQlXaGVuIGEgY291bnQgaXMgdXNlZCwgZG8gaXQgdGhhdCBtYW55IHRpbWVzLgorCQkJCQkJCQkqXWMqCisJXWMJCUp1bXAgZm9yd2FyZHMgdG8gdGhlIG5leHQgc3RhcnQgb2YgYSBjaGFuZ2UuCisJCQlXaGVuIGEgY291bnQgaXMgdXNlZCwgZG8gaXQgdGhhdCBtYW55IHRpbWVzLgorCitJdCBpcyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBjaGFuZ2UgZm9yIHRoZSBjdXJzb3IgdG8gbW92ZSB0by4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBEaWZmIGNvcHlpbmcJCQkqY29weS1kaWZmcyogKkU5OSogKkUxMDAqICpFMTAxKiAqRTEwMiogKkUxMDMqCisKK1RoZXJlIGFyZSB0d28gY29tbWFuZHMgdG8gY29weSB0ZXh0IGZyb20gb25lIGJ1ZmZlciB0byBhbm90aGVyLiAgVGhlIHJlc3VsdCBpcwordGhhdCB0aGUgYnVmZmVycyB3aWxsIGJlIGVxdWFsIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJhbmdlLgorCisJCQkJCQkJKjpkaWZmZyogKjpkaWZmZ2V0KgorOltyYW5nZV1kaWZmZ1tldF0gW2J1ZnNwZWNdCisJCU1vZGlmeSB0aGUgY3VycmVudCBidWZmZXIgdG8gdW5kbyBkaWZmZXJlbmNlIHdpdGggYW5vdGhlcgorCQlidWZmZXIuICBJZiBbYnVmc3BlY10gaXMgZ2l2ZW4sIHRoYXQgYnVmZmVyIGlzIHVzZWQuCisJCU90aGVyd2lzZSB0aGlzIG9ubHkgd29ya3MgaWYgdGhlcmUgaXMgb25lIG90aGVyIGJ1ZmZlciBpbiBkaWZmCisJCW1vZGUuCisJCVNlZSBiZWxvdyBmb3IgW3JhbmdlXS4KKworCQkJCQkJCSo6ZGlmZnB1KiAqOmRpZmZwdXQqCis6W3JhbmdlXWRpZmZwdVt0XSBbYnVmc3BlY10KKwkJTW9kaWZ5IGFub3RoZXIgYnVmZmVyIHRvIHVuZG8gZGlmZmVyZW5jZSB3aXRoIHRoZSBjdXJyZW50CisJCWJ1ZmZlci4gIEp1c3QgbGlrZSAiOmRpZmZnZXQiIGJ1dCB0aGUgb3RoZXIgYnVmZmVyIGlzIG1vZGlmaWVkCisJCWluc3RlYWQgb2YgdGhlIGN1cnJlbnQgb25lLgorCQlTZWUgYmVsb3cgZm9yIFtyYW5nZV0uCisKKwkJCQkJCQkqZG8qCitkbwkJU2FtZSBhcyAiOmRpZmZnZXQiIHdpdGhvdXQgYXJndW1lbnQgb3IgcmFuZ2UuICBUaGUgIm8iIHN0YW5kcworCQlmb3IgIm9idGFpbiIgKCJkZyIgY2FuJ3QgYmUgdXNlZCwgaXQgY291bGQgYmUgdGhlIHN0YXJ0IG9mCisJCSJkZ2ciISkuCisKKwkJCQkJCQkqZHAqCitkcAkJU2FtZSBhcyAiOmRpZmZwdXQiIHdpdGhvdXQgYXJndW1lbnQgb3IgcmFuZ2UuCisKK1doZW4gbm8gW3JhbmdlXSBpcyBnaXZlbiwgdGhlIGRpZmYgYXQgdGhlIGN1cnNvciBwb3NpdGlvbiBvciBqdXN0IGFib3ZlIGl0IGlzCithZmZlY3RlZC4gIFdoZW4gW3JhbmdlXSBpcyB1c2VkLCBWaW0gdHJpZXMgdG8gb25seSBwdXQgb3IgZ2V0IHRoZSBzcGVjaWZpZWQKK2xpbmVzLiAgV2hlbiB0aGVyZSBhcmUgZGVsZXRlZCBsaW5lcywgdGhpcyBtYXkgbm90IGFsd2F5cyBiZSBwb3NzaWJsZS4KKworVGhlcmUgY2FuIGJlIGRlbGV0ZWQgbGluZXMgYmVsb3cgdGhlIGxhc3QgbGluZSBvZiB0aGUgYnVmZmVyLiAgV2hlbiB0aGUgY3Vyc29yCitpcyBvbiB0aGUgbGFzdCBsaW5lIGluIHRoZSBidWZmZXIgYW5kIHRoZXJlIGlzIG5vIGRpZmYgYWJvdmUgdGhpcyBsaW5lLCB0aGUKKyI6ZGlmZmdldCIgYW5kICJkbyIgY29tbWFuZHMgd2lsbCBvYnRhaW4gbGluZXMgZnJvbSB0aGUgb3RoZXIgYnVmZmVyLgorCitUbyBiZSBhYmxlIHRvIGdldCB0aG9zZSBsaW5lcyBmcm9tIGFub3RoZXIgYnVmZmVyIGluIGEgW3JhbmdlXSBpdCdzIGFsbG93ZWQgdG8KK3VzZSB0aGUgbGFzdCBsaW5lIG51bWJlciBwbHVzIG9uZS4gIFRoaXMgY29tbWFuZCBnZXRzIGFsbCBkaWZmcyBmcm9tIHRoZSBvdGhlcgorYnVmZmVyOiA+CisKKwk6MSwkKzFkaWZmZ2V0CisKK05vdGUgdGhhdCBkZWxldGVkIGxpbmVzIGFyZSBkaXNwbGF5ZWQsIGJ1dCBub3QgY291bnRlZCBhcyB0ZXh0IGxpbmVzLiAgWW91CitjYW4ndCBtb3ZlIHRoZSBjdXJzb3IgaW50byB0aGVtLiAgVG8gZmlsbCB0aGUgZGVsZXRlZCBsaW5lcyB3aXRoIHRoZSBsaW5lcworZnJvbSBhbm90aGVyIGJ1ZmZlciB1c2UgIjpkaWZmZ2V0IiBvbiB0aGUgbGluZSBiZWxvdyB0aGVtLgorCitUaGUgW2J1ZnNwZWNdIGFyZ3VtZW50IGFib3ZlIGNhbiBiZSBhIGJ1ZmZlciBudW1iZXIsIGEgcGF0dGVybiBmb3IgYSBidWZmZXIKK25hbWUgb3IgYSBwYXJ0IG9mIGEgYnVmZmVyIG5hbWUuICBFeGFtcGxlczoKKworCTpkaWZmZ2V0CQlVc2UgdGhlIG90aGVyIGJ1ZmZlciB3aGljaCBpcyBpbiBkaWZmIG1vZGUKKwk6ZGlmZmdldCAzCQlVc2UgYnVmZmVyIDMKKwk6ZGlmZmdldCB2MgkJVXNlIHRoZSBidWZmZXIgd2hpY2ggbWF0Y2hlcyAidjIiIGFuZCBpcyBpbgorCQkJCWRpZmYgbW9kZSAoZS5nLiwgImZpbGUuYy52MiIpCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gRGlmZiBvcHRpb25zCQkJCQkJKmRpZmYtb3B0aW9ucyoKKworQWxzbyBzZWUgfCdkaWZmb3B0J3wgYW5kIHRoZSAiZGlmZiIgaXRlbSBvZiB8J2ZpbGxjaGFycyd8LgorCisKK0ZJTkRJTkcgVEhFIERJRkZFUkVOQ0VTCQkJCQkqZGlmZi1kaWZmZXhwcioKKworVGhlICdkaWZmZXhwcicgb3B0aW9uIGNhbiBiZSBzZXQgdG8gdXNlIHNvbWV0aGluZyBlbHNlIHRoYW4gdGhlIHN0YW5kYXJkCisiZGlmZiIgcHJvZ3JhbSB0byBjb21wYXJlIHR3byBmaWxlcyBhbmQgZmluZCB0aGUgZGlmZmVyZW5jZXMuCisKK1doZW4gJ2RpZmZleHByJyBpcyBlbXB0eSwgVmltIHVzZXMgdGhpcyBjb21tYW5kIHRvIGZpbmQgdGhlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIGZpbGUxIGFuZCBmaWxlMjogPgorCisJZGlmZiBmaWxlMSBmaWxlMiA+IG91dGZpbGUKKworVGhlICI+IiBpcyByZXBsYWNlZCB3aXRoIHRoZSB2YWx1ZSBvZiAnc2hlbGxyZWRpcicuCisKK1RoZSBvdXRwdXQgb2YgImRpZmYiIG11c3QgYmUgYSBub3JtYWwgImVkIiBzdHlsZSBkaWZmLiAgRG8gTk9UIHVzZSBhIGNvbnRleHQKK2RpZmYuICBUaGlzIGV4YW1wbGUgZXhwbGFpbnMgdGhlIGZvcm1hdCB0aGF0IFZpbSBleHBlY3RzOiA+CisKKwkxYTIKKwk+IGJiYgorCTRkNAorCTwgMTExCisJN2M3CisJPCBHR0cKKwktLS0KKwk+IGdnZworCitUaGUgIjFhMiIgaXRlbSBhcHBlbmRzIHRoZSBsaW5lICJiYmIiLgorVGhlICI0ZDQiIGl0ZW0gZGVsZXRlcyB0aGUgbGluZSAiMTExIi4KK1RoZSAnN2M3IiBpdGVtIHJlcGxhY2VzIHRoZSBsaW5lICJHR0ciIHdpdGggImdnZyIuCisKK1doZW4gJ2RpZmZleHByJyBpcyBub3QgZW1wdHksIFZpbSBldmFsdWF0ZXMgdG8gb2J0YWluIGEgZGlmZiBmaWxlIGluIHRoZQorZm9ybWF0IG1lbnRpb25lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc2V0IHRvIHRoZSBmaWxlIG5hbWVzIHVzZWQ6CisKKwl2OmZuYW1lX2luCQlvcmlnaW5hbCBmaWxlCisJdjpmbmFtZV9uZXcJCW5ldyB2ZXJzaW9uIG9mIHRoZSBzYW1lIGZpbGUKKwl2OmZuYW1lX291dAkJcmVzdWx0aW5nIGRpZmYgZmlsZQorCitBZGRpdGlvbmFsbHksICdkaWZmZXhwcicgc2hvdWxkIHRha2UgY2FyZSBvZiAiaWNhc2UiIGFuZCAiaXdoaXRlIiBpbiB0aGUKKydkaWZmb3B0JyBvcHRpb24uICAnZGlmZmV4cHInIGNhbm5vdCBjaGFuZ2UgdGhlIHZhbHVlIG9mICdsaW5lcycgYW5kCisnY29sdW1ucycuCisKK0V4YW1wbGUgKHRoaXMgZG9lcyBhbG1vc3QgdGhlIHNhbWUgYXMgJ2RpZmZleHByJyBiZWluZyBlbXB0eSk6ID4KKworCXNldCBkaWZmZXhwcj1NeURpZmYoKQorCWZ1bmN0aW9uIE15RGlmZigpCisJICAgbGV0IG9wdCA9ICIiCisJICAgaWYgJmRpZmZvcHQgPX4gImljYXNlIgorCSAgICAgbGV0IG9wdCA9IG9wdCAuICItaSAiCisJICAgZW5kaWYKKwkgICBpZiAmZGlmZm9wdCA9fiAiaXdoaXRlIgorCSAgICAgbGV0IG9wdCA9IG9wdCAuICItYiAiCisJICAgZW5kaWYKKwkgICBzaWxlbnQgZXhlY3V0ZSAiIWRpZmYgLWEgLS1iaW5hcnkgIiAuIG9wdCAuIHY6Zm5hbWVfaW4gLiAiICIgLiB2OmZuYW1lX25ldyAuCisJCVwgICIgPiAiIC4gdjpmbmFtZV9vdXQKKwllbmRmdW5jdGlvbgorCitUaGUgIi1hIiBhcmd1bWVudCBpcyB1c2VkIHRvIGZvcmNlIGNvbXBhcmluZyB0aGUgZmlsZXMgYXMgdGV4dCwgY29tcGFyaW5nIGFzCitiaW5hcmllcyBpc24ndCB1c2VmdWwuICBUaGUgIi0tYmluYXJ5IiBhcmd1bWVudCBtYWtlcyB0aGUgZmlsZXMgcmVhZCBpbiBiaW5hcnkKK21vZGUsIHNvIHRoYXQgYSBDVFJMLVogZG9lc24ndCBlbmQgdGhlIHRleHQgb24gRE9TLgorCisJCQkJCQkqRTk3KgorVmltIHdpbGwgZG8gYSB0ZXN0IGlmIHRoZSBkaWZmIG91dHB1dCBsb29rcyBhbHJpZ2h0LiAgSWYgaXQgZG9lc24ndCwgeW91IHdpbGwKK2dldCBhbiBlcnJvciBtZXNzYWdlLiAgUG9zc2libGUgY2F1c2VzOgorLSAgVGhlICJkaWZmIiBwcm9ncmFtIGNhbm5vdCBiZSBleGVjdXRlZC4KKy0gIFRoZSAiZGlmZiIgcHJvZ3JhbSBkb2Vzbid0IHByb2R1Y2Ugbm9ybWFsICJlZCIgc3R5bGUgZGlmZnMgKHNlZSBhYm92ZSkuCistICBUaGUgJ3NoZWxsJyBhbmQgYXNzb2NpYXRlZCBvcHRpb25zIGFyZSBub3Qgc2V0IGNvcnJlY3RseS4gIFRyeSBpZiBmaWx0ZXJpbmcKKyAgIHdvcmtzIHdpdGggYSBjb21tYW5kIGxpa2UgIjohc29ydCIuCistICBZb3UgYXJlIHVzaW5nICdkaWZmZXhwcicgYW5kIGl0IGRvZXNuJ3Qgd29yay4KK0lmIGl0J3Mgbm90IGNsZWFyIHdoYXQgdGhlIHByb2JsZW0gaXMgc2V0IHRoZSAndmVyYm9zZScgb3B0aW9uIHRvIHNlZSBtb3JlCittZXNzYWdlcy4KKworCitVU0lORyBQQVRDSEVTCQkJCQkqZGlmZi1wYXRjaGV4cHIqCisKK1RoZSAncGF0Y2hleHByJyBvcHRpb24gY2FuIGJlIHNldCB0byB1c2Ugc29tZXRoaW5nIGVsc2UgdGhhbiB0aGUgc3RhbmRhcmQKKyJwYXRjaCIgcHJvZ3JhbS4KKworV2hlbiAncGF0Y2hleHByJyBpcyBlbXB0eSwgVmltIHdpbGwgY2FsbCB0aGUgInBhdGNoIiBwcm9ncmFtIGxpa2UgdGhpczogPgorCisJcGF0Y2ggLW8gb3V0ZmlsZSBvcmlnZmlsZSA8IHBhdGNoZmlsZQorCitUaGlzIHNob3VsZCB3b3JrIGZpbmUgd2l0aCBtb3N0IHZlcnNpb25zIG9mIHRoZSAicGF0Y2giIHByb2dyYW0uICBOb3RlIHRoYXQgYQorQ1IgaW4gdGhlIG1pZGRsZSBvZiBhIGxpbmUgbWF5IGNhdXNlIHByb2JsZW1zLCBpdCBpcyBzZWVuIGFzIGEgbGluZSBicmVhay4KKworSWYgdGhlIGRlZmF1bHQgZG9lc24ndCB3b3JrIGZvciB5b3UsIHNldCB0aGUgJ3BhdGNoZXhwcicgdG8gYW4gZXhwcmVzc2lvbiB0aGF0Cit3aWxsIGhhdmUgdGhlIHNhbWUgZWZmZWN0LiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzZXQgdG8gdGhlIGZpbGUgbmFtZXMgdXNlZDoKKworCXY6Zm5hbWVfaW4JCW9yaWdpbmFsIGZpbGUKKwl2OmZuYW1lX2RpZmYJCXBhdGNoIGZpbGUKKwl2OmZuYW1lX291dAkJcmVzdWx0aW5nIHBhdGNoZWQgZmlsZQorCitFeGFtcGxlICh0aGlzIGRvZXMgdGhlIHNhbWUgYXMgJ3BhdGNoZXhwcicgYmVpbmcgZW1wdHkpOiA+CisKKwlsZXQgcGF0Y2hleHByPU15UGF0Y2gKKwlmdW5jdGlvbiBNeVBhdGNoCisJICAgOmNhbGwgc3lzdGVtKCJwYXRjaCAtbyAiIC4gdjpmbmFtZV9vdXQgLiAiICIgLiB2OmZuYW1lX2luIC4KKwkgICBcICAiIDwgIiAuIHY6Zm5hbWVfZGlmZikKKwllbmRmdW5jdGlvbgorCitNYWtlIHN1cmUgdGhhdCB1c2luZyB0aGUgInBhdGNoIiBwcm9ncmFtIGRvZXNuJ3QgaGF2ZSB1bndhbnRlZCBzaWRlIGVmZmVjdHMuCitGb3IgZXhhbXBsZSwgd2F0Y2ggb3V0IGZvciBhZGRpdGlvbmFsbHkgZ2VuZXJhdGVkIGZpbGVzLCB3aGljaCBzaG91bGQgYmUKK2RlbGV0ZWQuICBJdCBzaG91bGQganVzdCBwYXRjaCB0aGUgZmlsZSBhbmQgbm90aGluZyBlbHNlLgorICAgVmltIHdpbGwgY2hhbmdlIGRpcmVjdG9yeSB0byAiL3RtcCIgb3IgYW5vdGhlciB0ZW1wIGRpcmVjdG9yeSBiZWZvcmUKK2V2YWx1YXRpbmcgJ3BhdGNoZXhwcicuICBUaGlzIGhvcGVmdWxseSBhdm9pZHMgdGhhdCBmaWxlcyBpbiB0aGUgY3VycmVudAorZGlyZWN0b3J5IGFyZSBhY2NpZGVudGFsbHkgcGF0Y2hlZC4gIFZpbSB3aWxsIGFsc28gZGVsZXRlIGZpbGVzIHN0YXJ0aW5nIHdpdGgKK3Y6Zm5hbWVfaW4gYW5kIGVuZGluZyBpbiAiLnJlaiIgYW5kICIub3JpZyIuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9kaWdyYXBoLnR4dCBiL3J1bnRpbWUvZG9jL2RpZ3JhcGgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOWIzMGQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9kaWdyYXBoLnR4dApAQCAtMCwwICsxLDMyMiBAQAorKmRpZ3JhcGgudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAxIFNlcCAwMworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK0RpZ3JhcGhzCQkJCQkJKmRpZ3JhcGhzKiAqRGlncmFwaHMqCisKK0RpZ3JhcGhzIGFyZSB1c2VkIHRvIGVudGVyIGNoYXJhY3RlcnMgdGhhdCBub3JtYWxseSBjYW5ub3QgYmUgZW50ZXJlZCBieQorYW4gb3JkaW5hcnkga2V5Ym9hcmQuICBUaGVzZSBhcmUgbW9zdGx5IGFjY2VudGVkIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSB0aGUKK2VpZ2h0aCBiaXQgc2V0LiAgVGhlIGRpZ3JhcGhzIGFyZSBlYXNpZXIgdG8gcmVtZW1iZXIgdGhhbiB0aGUgZGVjaW1hbCBudW1iZXIKK3RoYXQgY2FuIGJlIGVudGVyZWQgd2l0aCBDVFJMLVYgKHNlZSB8aV9DVFJMLVZ8KS4KKworVGhlcmUgaXMgYSBicmllZiBpbnRyb2R1Y3Rpb24gb24gZGlncmFwaHMgaW4gdGhlIHVzZXIgbWFudWFsOiB8MjQuOXwKK0FuIGFsdGVybmF0aXZlIGlzIHVzaW5nIHRoZSAna2V5bWFwJyBvcHRpb24uCisKKzEuIERlZmluaW5nIGRpZ3JhcGhzCXxkaWdyYXBocy1kZWZpbmV8CisyLiBVc2luZyBkaWdyYXBocwl8ZGlncmFwaHMtdXNlfAorMy4gRGVmYXVsdCBkaWdyYXBocwl8ZGlncmFwaHMtZGVmYXVsdHwKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIERlZmluaW5nIGRpZ3JhcGhzCQkJCQkqZGlncmFwaHMtZGVmaW5lKgorCisJCQkJCQkqOmRpZyogKjpkaWdyYXBocyoKKzpkaWdbcmFwaHNdCQlzaG93IGN1cnJlbnRseSBkZWZpbmVkIGRpZ3JhcGhzLgorCQkJCQkJCSpFMTA0KiAqRTM5KgorOmRpZ1tyYXBoc10ge2NoYXIxfXtjaGFyMn0ge251bWJlcn0gLi4uCisJCQlBZGQgZGlncmFwaCB7Y2hhcjF9e2NoYXIyfSB0byB0aGUgbGlzdC4gIHtudW1iZXJ9IGlzCisJCQl0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2hhcmFjdGVyLgorCQkJRXhhbXBsZTogPgorCTpkaWdyIGU6IDIzNSBhOiAyMjgKKzwJCQlBdm9pZCBkZWZpbmluZyBhIGRpZ3JhcGggd2l0aCAnXycgKHVuZGVyc2NvcmUpIGFzIHRoZQorCQkJZmlyc3QgY2hhcmFjdGVyLCBpdCBoYXMgYSBzcGVjaWFsIG1lYW5pbmcgaW4gdGhlCisJCQlmdXR1cmUuCisKK1ZpbSBpcyBub3JtYWxseSBjb21waWxlZCB3aXRoIHRoZSB8K2RpZ3JhcGhzfCBmZWF0dXJlLiAgSWYgdGhlIGZlYXR1cmUgaXMKK2Rpc2FibGVkLCB0aGUgIjpkaWdyYXBoIiBjb21tYW5kIHdpbGwgZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlLgorCitFeGFtcGxlIG9mIHRoZSBvdXRwdXQgb2YgIjpkaWdyYXBocyI6ID4KKyBUSCDeICAyMjIgIHNzIN8gIDIyMyAgYSEg4CAgMjI0ICBhJyDhICAyMjUgIGE+IOIgIDIyNiAgYT8g4yAgMjI3ICBhOiDkICAyMjgKKworVGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIGluIGVhY2ggY29sdW1uIGFyZSB0aGUgY2hhcmFjdGVycyB5b3UgaGF2ZSB0byB0eXBlIHRvCitlbnRlciB0aGUgZGlncmFwaC4KKworSW4gdGhlIG1pZGRsZSBvZiBlYWNoIGNvbHVtbiBpcyB0aGUgcmVzdWx0aW5nIGNoYXJhY3Rlci4gIFRoaXMgbWF5IGJlIG1hbmdsZWQKK2lmIHlvdSBsb29rIGF0IGl0IG9uIGEgc3lzdGVtIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBkaWdyYXBocyBvciBpZiB5b3UgcHJpbnQKK3RoaXMgZmlsZS4KKworVGhlIGRlY2ltYWwgbnVtYmVyIGlzIHRoZSBudW1iZXIgb2YgdGhlIGNoYXJhY3Rlci4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBVc2luZyBkaWdyYXBocwkJCQkJKmRpZ3JhcGhzLXVzZSoKKworVGhlcmUgYXJlIHR3byBtZXRob2RzIHRvIGVudGVyIGRpZ3JhcGhzOgkJCSppX2RpZ3JhcGgqCisJQ1RSTC1LIHtjaGFyMX0ge2NoYXIyfQkJb3IKKwl7Y2hhcjF9IDxCUz4ge2NoYXIyfQorVGhlIGZpcnN0IGlzIGFsd2F5cyBhdmFpbGFibGU7IHRoZSBzZWNvbmQgb25seSB3aGVuIHRoZSAnZGlncmFwaCcgb3B0aW9uIGlzCitzZXQuCisKK0lmIGEgZGlncmFwaCB3aXRoIHtjaGFyMX17Y2hhcjJ9IGRvZXMgbm90IGV4aXN0LCBWaW0gc2VhcmNoZXMgZm9yIGEgZGlncmFwaAore2NoYXIyfXtjaGFyMX0uICBUaGlzIGhlbHBzIHdoZW4geW91IGRvbid0IHJlbWVtYmVyIHdoaWNoIGNoYXJhY3RlciBjb21lcworZmlyc3QuCisKK05vdGUgdGhhdCB3aGVuIHlvdSBlbnRlciBDVFJMLUsge2NoYXIxfSwgd2hlcmUge2NoYXIxfSBpcyBhIHNwZWNpYWwga2V5LCBWaW0KK2VudGVycyB0aGUgY29kZSBmb3IgdGhhdCBzcGVjaWFsIGtleS4gIFRoaXMgaXMgbm90IGEgZGlncmFwaC4KKworT25jZSB5b3UgaGF2ZSBlbnRlcmVkIHRoZSBkaWdyYXBoLCBWaW0gdHJlYXRzIHRoZSBjaGFyYWN0ZXIgbGlrZSBhIG5vcm1hbAorY2hhcmFjdGVyIHRoYXQgb2NjdXBpZXMgb25seSBvbmUgY2hhcmFjdGVyIGluIHRoZSBmaWxlIGFuZCBvbiB0aGUgc2NyZWVuLgorRXhhbXBsZTogPgorCSdCJyA8QlM+ICdCJwl3aWxsIGVudGVyIHRoZSBicm9rZW4gJ3wnIGNoYXJhY3RlciAoMTY2KQorCSdhJyA8QlM+ICc+Jwl3aWxsIGVudGVyIGFuICdhJyB3aXRoIGEgY2lyY3VtZmxleCAoMjI2KQorCUNUUkwtSyAnLScgJy0nCXdpbGwgZW50ZXIgYSBzb2Z0IGh5cGhlbiAoMTczKQorCitUaGUgY3VycmVudCBkaWdyYXBocyBhcmUgbGlzdGVkIHdpdGggdGhlICI6ZGlncmFwaHMiIGNvbW1hbmQuICBTb21lIG9mIHRoZQorZGVmYXVsdCBvbmVzIGFyZSBsaXN0ZWQgYmVsb3cgfGRpZ3JhcGgtdGFibGV8LgorCitGb3IgQ1RSTC1LLCB0aGVyZSBpcyBvbmUgZ2VuZXJhbCBkaWdyYXBoOiBDVFJMLUsgPFNwYWNlPiB7Y2hhcn0gd2lsbCBlbnRlcgore2NoYXJ9IHdpdGggdGhlIGhpZ2hlc3QgYml0IHNldC4gIFlvdSBjYW4gdXNlIHRoaXMgdG8gZW50ZXIgbWV0YS1jaGFyYWN0ZXJzLgorCitUaGUgPEVzYz4gY2hhcmFjdGVyIGNhbm5vdCBiZSBwYXJ0IG9mIGEgZGlncmFwaC4gIFdoZW4gaGl0dGluZyA8RXNjPiwgVmltCitzdG9wcyBkaWdyYXBoIGVudHJ5IGFuZCBlbmRzIEluc2VydCBtb2RlIG9yIENvbW1hbmQtbGluZSBtb2RlLCBqdXN0IGxpa2UKK2hpdHRpbmcgYW4gPEVzYz4gb3V0IG9mIGRpZ3JhcGggY29udGV4dC4gIFVzZSBDVFJMLVYgMTU1IHRvIGVudGVyIG1ldGEtRVNDCisoQ1NJKS4KKworSWYgeW91IGFjY2lkZW50YWxseSB0eXBlZCBhbiAnYScgdGhhdCBzaG91bGQgYmUgYW4gJ2UnLCB5b3Ugd2lsbCB0eXBlICdhJyA8QlM+CisnZScuICBCdXQgdGhhdCBpcyBhIGRpZ3JhcGgsIHNvIHlvdSB3aWxsIG5vdCBnZXQgd2hhdCB5b3Ugd2FudC4gIFRvIGNvcnJlY3QKK3RoaXMsIHlvdSB3aWxsIGhhdmUgdG8gdHlwZSA8QlM+IGUgYWdhaW4uICBUbyBhdm9pZCB0aGlzIGRvbid0IHNldCB0aGUKKydkaWdyYXBoJyBvcHRpb24gYW5kIHVzZSBDVFJMLUsgdG8gZW50ZXIgZGlncmFwaHMuCisKK1lvdSBtYXkgaGF2ZSBwcm9ibGVtcyB1c2luZyBWaW0gd2l0aCBjaGFyYWN0ZXJzIHdoaWNoIGhhdmUgYW4gQVNDSUkgdmFsdWUKK2Fib3ZlIDEyOC4gIEZvciBleGFtcGxlOiBZb3UgaW5zZXJ0IHVlICh1LXVtbGF1dCkgYW5kIHRoZSBlZGl0b3IgZWNob2VzIFwzMzQKK2luIEluc2VydCBtb2RlLiAgQWZ0ZXIgbGVhdmluZyB0aGUgSW5zZXJ0IG1vZGUgZXZlcnl0aGluZyBpcyBmaW5lLiAgTm90ZSB0aGF0CitmbXQgcmVtb3ZlcyBhbGwgY2hhcmFjdGVycyB3aXRoIEFTQ0lJIGNvZGVzIGFib3ZlIDEyOCBmcm9tIHRoZSB0ZXh0IGJlaW5nCitmb3JtYXR0ZWQuICBPbiBzb21lIFVuaXggc3lzdGVtcyB0aGlzIG1lYW5zIHlvdSBoYXZlIHRvIGRlZmluZSB0aGUKK2Vudmlyb25tZW50LXZhcmlhYmxlIExDX0NUWVBFLiAgSWYgeW91IGFyZSB1c2luZyBjc2gsIHRoZW4gcHV0IHRoZSBmb2xsb3dpbmcKK2xpbmUgaW4geW91ciAuY3NocmM6ID4KKwlzZXRlbnYgTENfQ1RZUEUgaXNvXzg4NTlfMQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIERlZmF1bHQgZGlncmFwaHMJCQkJCSpkaWdyYXBocy1kZWZhdWx0KgorCitWaW0gY29tZXMgd2l0aCBhIHNldCBvZiBkZWZhdWx0IGRpZ3JhcGhzLiAgQ2hlY2sgdGhlIG91dHB1dCBvZiAiOmRpZ3JhcGhzIiB0bworc2VlIHRoZW0uCisKK09uIG1vc3Qgc3lzdGVtcyBWaW0gdXNlcyB0aGUgc2FtZSBkaWdyYXBocy4gIFRoZXkgd29yayBmb3IgdGhlIFVuaWNvZGUgYW5kCitJU08tODg1OS0xIGNoYXJhY3RlciBzZXRzLiAgVGhlc2UgZGVmYXVsdCBkaWdyYXBocyBhcmUgdGFrZW4gZnJvbSB0aGUgUkZDMTM0NQorbW5lbW9uaWNzLiAgVG8gbWFrZSBpdCBlYXN5IHRvIHJlbWVtYmVyIHRoZSBtbmVtb25pYywgdGhlIHNlY29uZCBjaGFyYWN0ZXIgaGFzCithIHN0YW5kYXJkIG1lYW5pbmc6CisKKwljaGFyIG5hbWUJCWNoYXIJbWVhbmluZyB+CisJRXhjbGFtYXRpb24gbWFyawkhCUdyYXZlCisJQXBvc3Ryb3BoZQkJJwlBY3V0ZSBhY2NlbnQKKwlHcmVhdGVyLVRoYW4gc2lnbgk+CUNpcmN1bWZsZXggYWNjZW50CisJUXVlc3Rpb24gTWFyawkJPwl0aWxkZQorCUh5cGhlbi1NaW51cwkJLQlNYWNyb24KKwlMZWZ0IHBhcmVudGhlc2lzCSgJQnJldmUKKwlGdWxsIFN0b3AJCS4JRG90IEFib3ZlCisJQ29sb24JCQk6CURpYWVyZXNpcworCUNvbW1hCQkJLAlDZWRpbGxhCisJVW5kZXJsaW5lCQlfCVVuZGVybGluZQorCVNvbGlkdXMJCQkvCVN0cm9rZQorCVF1b3RhdGlvbiBtYXJrCQkiCURvdWJsZSBhY3V0ZSBhY2NlbnQKKwlTZW1pY29sb24JCTsJT2dvbmVrCisJTGVzcy1UaGFuIHNpZ24JCTwJQ2Fyb24KKwlaZXJvCQkJMAlSaW5nIGFib3ZlCisJVHdvCQkJMglIb29rCisJTmluZQkJCTkJSG9ybgorCisJRXF1YWxzCQkJPQlDeXJpbGxpYworCUFzdGVyaXNrCQkqCUdyZWVrCisJUGVyY2VudCBzaWduCQklCUdyZWVrL0N5cmlsbGljIHNwZWNpYWwKKwlQbHVzCQkJKwlzbWFsbHM6IEFyYWJpYywgY2FwaXRhbHM6IEhlYnJldworCVRocmVlCQkJMwlzb21lIExhdGluL0dyZWVrL0N5cmlsbGljIGxldHRlcnMKKwlGb3VyCQkJNAlCb3BvbW9mbworCUZpdmUJCQk1CUhpcmFnYW5hCisJU2l4CQkJNglLYXRha2FuYQorCitFeGFtcGxlOiBhOiBpcyDkICBhbmQgbzogaXMg9gorCitUaGVzZSBhcmUgdGhlIFJGQzEzNDUgZGlncmFwaHMgZm9yIHRoZSBvbmUtYnl0ZSBjaGFyYWN0ZXJzLiAgU2VlIHRoZSBvdXRwdXQgb2YKKyI6ZGlncmFwaHMiIGZvciB0aGUgb3RoZXJzLiAgVGhlIGNoYXJhY3RlcnMgYWJvdmUgMjU1IGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuCitWaW0gd2FzIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfYnl0ZXwgZmVhdHVyZS4KKwkJCQkJCQkqZGlncmFwaC10YWJsZSoKK2NoYXIgIGRpZ3JhcGgJaGV4CWRlYwlvZmZpY2lhbCBuYW1lIH4KK15ACU5VCTB4MDAJICAwCU5VTEwgKE5VTCkKK15BCVNICTB4MDEJICAxCVNUQVJUIE9GIEhFQURJTkcgKFNPSCkKK15CCVNYCTB4MDIJICAyCVNUQVJUIE9GIFRFWFQgKFNUWCkKK15DCUVYCTB4MDMJICAzCUVORCBPRiBURVhUIChFVFgpCiteRAlFVAkweDA0CSAgNAlFTkQgT0YgVFJBTlNNSVNTSU9OIChFT1QpCiteRQlFUQkweDA1CSAgNQlFTlFVSVJZIChFTlEpCiteRglBSwkweDA2CSAgNglBQ0tOT1dMRURHRSAoQUNLKQorXkcJQkwJMHgwNwkgIDcJQkVMTCAoQkVMKQorXkgJQlMJMHgwOAkgIDgJQkFDS1NQQUNFIChCUykKK15JCUhUCTB4MDkJICA5CUNIQVJBQ1RFUiBUQUJVTEFUSU9OIChIVCkKK15ACUxGCTB4MGEJIDEwCUxJTkUgRkVFRCAoTEYpCiteSwlWVAkweDBiCSAxMQlMSU5FIFRBQlVMQVRJT04gKFZUKQorXkwJRkYJMHgwYwkgMTIJRk9STSBGRUVEIChGRikKK15NCUNSCTB4MGQJIDEzCUNBUlJJQUdFIFJFVFVSTiAoQ1IpCiteTglTTwkweDBlCSAxNAlTSElGVCBPVVQgKFNPKQorXk8JU0kJMHgwZgkgMTUJU0hJRlQgSU4gKFNJKQorXlAJREwJMHgxMAkgMTYJREFUQUxJTksgRVNDQVBFIChETEUpCiteUQlEMQkweDExCSAxNwlERVZJQ0UgQ09OVFJPTCBPTkUgKERDMSkKK15SCUQyCTB4MTIJIDE4CURFVklDRSBDT05UUk9MIFRXTyAoREMyKQorXlMJRDMJMHgxMwkgMTkJREVWSUNFIENPTlRST0wgVEhSRUUgKERDMykKK15UCUQ0CTB4MTQJIDIwCURFVklDRSBDT05UUk9MIEZPVVIgKERDNCkKK15VCU5LCTB4MTUJIDIxCU5FR0FUSVZFIEFDS05PV0xFREdFIChOQUspCiteVglTWQkweDE2CSAyMglTWU5DUk9OT1VTIElETEUgKFNZTikKK15XCUVCCTB4MTcJIDIzCUVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sgKEVUQikKK15YCUNOCTB4MTgJIDI0CUNBTkNFTCAoQ0FOKQorXlkJRU0JMHgxOQkgMjUJRU5EIE9GIE1FRElVTSAoRU0pCiteWglTQgkweDFhCSAyNglTVUJTVElUVVRFIChTVUIpCiteWwlFQwkweDFiCSAyNwlFU0NBUEUgKEVTQykKK15cCUZTCTB4MWMJIDI4CUZJTEUgU0VQQVJBVE9SIChJUzQpCiteXQlHUwkweDFkCSAyOQlHUk9VUCBTRVBBUkFUT1IgKElTMykKK15eCVJTCTB4MWUJIDMwCVJFQ09SRCBTRVBBUkFUT1IgKElTMikKK15fCVVTCTB4MWYJIDMxCVVOSVQgU0VQQVJBVE9SIChJUzEpCisJU1AJMHgyMAkgMzIJU1BBQ0UKKyMJTmIJMHgyMwkgMzUJTlVNQkVSIFNJR04KKyQJRE8JMHgyNAkgMzYJRE9MTEFSIFNJR04KK0AJQXQJMHg0MAkgNjQJQ09NTUVSQ0lBTCBBVAorWwk8KAkweDViCSA5MQlMRUZUIFNRVUFSRSBCUkFDS0VUCitcCS8vCTB4NWMJIDkyCVJFVkVSU0UgU09MSURVUworXQkpPgkweDVkCSA5MwlSSUdIVCBTUVVBUkUgQlJBQ0tFVAorXgknPgkweDVlCSA5NAlDSVJDVU1GTEVYIEFDQ0VOVAorYAknIQkweDYwCSA5NglHUkFWRSBBQ0NFTlQKK3sJKCEJMHg3YgkxMjMJTEVGVCBDVVJMWSBCUkFDS0VUCit8CSEhCTB4N2MJMTI0CVZFUlRJQ0FMIExJTkUKK30JISkJMHg3ZAkxMjUJUklHSFQgQ1VSTFkgQlJBQ0tFVAorfgknPwkweDdlCTEyNglUSUxERQorXj8JRFQJMHg3ZgkxMjcJREVMRVRFIChERUwpCit+QAlQQQkweDgwCTEyOAlQQURESU5HIENIQVJBQ1RFUiAoUEFEKQorfkEJSE8JMHg4MQkxMjkJSElHSCBPQ1RFVCBQUkVTRVQgKEhPUCkKK35CCUJICTB4ODIJMTMwCUJSRUFLIFBFUk1JVFRFRCBIRVJFIChCUEgpCit+QwlOSAkweDgzCTEzMQlOTyBCUkVBSyBIRVJFIChOQkgpCit+RAlJTgkweDg0CTEzMglJTkRFWCAoSU5EKQorfkUJTkwJMHg4NQkxMzMJTkVYVCBMSU5FIChORUwpCit+RglTQQkweDg2CTEzNAlTVEFSVCBPRiBTRUxFQ1RFRCBBUkVBIChTU0EpCit+RwlFUwkweDg3CTEzNQlFTkQgT0YgU0VMRUNURUQgQVJFQSAoRVNBKQorfkgJSFMJMHg4OAkxMzYJQ0hBUkFDVEVSIFRBQlVMQVRJT04gU0VUIChIVFMpCit+SQlISgkweDg5CTEzNwlDSEFSQUNURVIgVEFCVUxBVElPTiBXSVRIIEpVU1RJRklDQVRJT04gKEhUSikKK35KCVZTCTB4OGEJMTM4CUxJTkUgVEFCVUxBVElPTiBTRVQgKFZUUykKK35LCVBECTB4OGIJMTM5CVBBUlRJQUwgTElORSBGT1JXQVJEIChQTEQpCit+TAlQVQkweDhjCTE0MAlQQVJUSUFMIExJTkUgQkFDS1dBUkQgKFBMVSkKK35NCVJJCTB4OGQJMTQxCVJFVkVSU0UgTElORSBGRUVEIChSSSkKK35OCVMyCTB4OGUJMTQyCVNJTkdMRS1TSElGVCBUV08gKFNTMikKK35PCVMzCTB4OGYJMTQzCVNJTkdMRS1TSElGVCBUSFJFRSAoU1MzKQorflAJREMJMHg5MAkxNDQJREVWSUNFIENPTlRST0wgU1RSSU5HIChEQ1MpCit+UQlQMQkweDkxCTE0NQlQUklWQVRFIFVTRSBPTkUgKFBVMSkKK35SCVAyCTB4OTIJMTQ2CVBSSVZBVEUgVVNFIFRXTyAoUFUyKQorflMJVFMJMHg5MwkxNDcJU0VUIFRSQU5TTUlUIFNUQVRFIChTVFMpCit+VAlDQwkweDk0CTE0OAlDQU5DRUwgQ0hBUkFDVEVSIChDQ0gpCit+VQlNVwkweDk1CTE0OQlNRVNTQUdFIFdBSVRJTkcgKE1XKQorflYJU0cJMHg5NgkxNTAJU1RBUlQgT0YgR1VBUkRFRCBBUkVBIChTUEEpCit+VwlFRwkweDk3CTE1MQlFTkQgT0YgR1VBUkRFRCBBUkVBIChFUEEpCit+WAlTUwkweDk4CTE1MglTVEFSVCBPRiBTVFJJTkcgKFNPUykKK35ZCUdDCTB4OTkJMTUzCVNJTkdMRSBHUkFQSElDIENIQVJBQ1RFUiBJTlRST0RVQ0VSIChTR0NJKQorfloJU0MJMHg5YQkxNTQJU0lOR0xFIENIQVJBQ1RFUiBJTlRST0RVQ0VSIChTQ0kpCit+WwlDSQkweDliCTE1NQlDT05UUk9MIFNFUVVFTkNFIElOVFJPRFVDRVIgKENTSSkKK35cCVNUCTB4OWMJMTU2CVNUUklORyBURVJNSU5BVE9SIChTVCkKK35dCU9DCTB4OWQJMTU3CU9QRVJBVElORyBTWVNURU0gQ09NTUFORCAoT1NDKQorfl4JUE0JMHg5ZQkxNTgJUFJJVkFDWSBNRVNTQUdFIChQTSkKK35fCUFDCTB4OWYJMTU5CUFQUExJQ0FUSU9OIFBST0dSQU0gQ09NTUFORCAoQVBDKQorfAlOUwkweGEwCTE2MAlOTy1CUkVBSyBTUEFDRQoroQkhSQkweGExCTE2MQlJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLCiuiCUN0CTB4YTIJMTYyCUNFTlQgU0lHTgorowlQZAkweGEzCTE2MwlQT1VORCBTSUdOCiukCUN1CTB4YTQJMTY0CUNVUlJFTkNZIFNJR04KK6UJWWUJMHhhNQkxNjUJWUVOIFNJR04KK6YJQkIJMHhhNgkxNjYJQlJPS0VOIEJBUgorpwlTRQkweGE3CTE2NwlTRUNUSU9OIFNJR04KK6gJJzoJMHhhOAkxNjgJRElBRVJFU0lTCiupCUNvCTB4YTkJMTY5CUNPUFlSSUdIVCBTSUdOCiuqCS1hCTB4YWEJMTcwCUZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SCiurCTw8CTB4YWIJMTcxCUxFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCiusCU5PCTB4YWMJMTcyCU5PVCBTSUdOCiutCS0tCTB4YWQJMTczCVNPRlQgSFlQSEVOCiuuCVJnCTB4YWUJMTc0CVJFR0lTVEVSRUQgU0lHTgorrwknbQkweGFmCTE3NQlNQUNST04KK7AJREcJMHhiMAkxNzYJREVHUkVFIFNJR04KK7EJKy0JMHhiMQkxNzcJUExVUy1NSU5VUyBTSUdOCiuyCTJTCTB4YjIJMTc4CVNVUEVSU0NSSVBUIFRXTworswkzUwkweGIzCTE3OQlTVVBFUlNDUklQVCBUSFJFRQortAknJwkweGI0CTE4MAlBQ1VURSBBQ0NFTlQKK7UJTXkJMHhiNQkxODEJTUlDUk8gU0lHTgortglQSQkweGI2CTE4MglQSUxDUk9XIFNJR04KK7cJLk0JMHhiNwkxODMJTUlERExFIERPVAoruAknLAkweGI4CTE4NAlDRURJTExBCiu5CTFTCTB4YjkJMTg1CVNVUEVSU0NSSVBUIE9ORQorugktbwkweGJhCTE4NglNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKK7sJPj4JMHhiYgkxODcJUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCiu8CTE0CTB4YmMJMTg4CVZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgorvQkxMgkweGJkCTE4OQlWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEYKK74JMzQJMHhiZQkxOTAJVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTCiu/CT9JCTB4YmYJMTkxCUlOVkVSVEVEIFFVRVNUSU9OIE1BUksKK8AJQSEJMHhjMAkxOTIJTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFCivBCUEnCTB4YzEJMTkzCUxBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURQorwglBPgkweGMyCTE5NAlMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorwwlBPwkweGMzCTE5NQlMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREUKK8QJQToJMHhjNAkxOTYJTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworxQlBQQkweGM1CTE5NwlMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorxglBRQkweGM2CTE5OAlMQVRJTiBDQVBJVEFMIExFVFRFUiBBRQorxwlDLAkweGM3CTE5OQlMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQQoryAlFIQkweGM4CTIwMAlMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKK8kJRScJMHhjOQkyMDEJTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFCivKCUU+CTB4Y2EJMjAyCUxBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCivLCUU6CTB4Y2IJMjAzCUxBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKK8wJSSEJMHhjYwkyMDQJTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFCivNCUknCTB4Y2QJMjA1CUxBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURQorzglJPgkweGNlCTIwNglMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorzwlJOgkweGNmCTIwNwlMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCivQCUQtCTB4ZDAJMjA4CUxBVElOIENBUElUQUwgTEVUVEVSIEVUSCAoSWNlbGFuZGljKQor0QlOPwkweGQxCTIwOQlMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREUKK9IJTyEJMHhkMgkyMTAJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCivTCU8nCTB4ZDMJMjExCUxBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURQor1AlPPgkweGQ0CTIxMglMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAor1QlPPwkweGQ1CTIxMwlMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUKK9YJTzoJMHhkNgkyMTQJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUwor1wkqWAkweGQ3CTIxNQlNVUxUSVBMSUNBVElPTiBTSUdOCivYCU8vCTB4ZDgJMjE2CUxBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKK9kJVSEJMHhkOQkyMTcJTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCivaCVUnCTB4ZGEJMjE4CUxBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQor2wlVPgkweGRiCTIxOQlMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAor3AlVOgkweGRjCTIyMAlMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCivdCVknCTB4ZGQJMjIxCUxBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURQor3glUSAkweGRlCTIyMglMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQor3wlzcwkweGRmCTIyMwlMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgUyAoR2VybWFuKQor4AlhIQkweGUwCTIyNAlMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFCivhCWEnCTB4ZTEJMjI1CUxBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUKK+IJYT4JMHhlMgkyMjYJTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCivjCWE/CTB4ZTMJMjI3CUxBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREUKK+QJYToJMHhlNAkyMjgJTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKK+UJYWEJMHhlNQkyMjkJTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCivmCWFlCTB4ZTYJMjMwCUxBVElOIFNNQUxMIExFVFRFUiBBRQor5wljLAkweGU3CTIzMQlMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKK+gJZSEJMHhlOAkyMzIJTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQor6QllJwkweGU5CTIzMwlMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFCivqCWU+CTB4ZWEJMjM0CUxBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAor6wllOgkweGViCTIzNQlMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUwor7AlpIQkweGVjCTIzNglMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFCivtCWknCTB4ZWQJMjM3CUxBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKK+4JaT4JMHhlZQkyMzgJTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCivvCWk6CTB4ZWYJMjM5CUxBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCivwCWQtCTB4ZjAJMjQwCUxBVElOIFNNQUxMIExFVFRFUiBFVEggKEljZWxhbmRpYykKK/EJbj8JMHhmMQkyNDEJTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERQor8glvIQkweGYyCTI0MglMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCivzCW8nCTB4ZjMJMjQzCUxBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUKK/QJbz4JMHhmNAkyNDQJTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCiv1CW8/CTB4ZjUJMjQ1CUxBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUKK/YJbzoJMHhmNgkyNDYJTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKK/cJLToJMHhmNwkyNDcJRElWSVNJT04gU0lHTgor+AlvLwkweGY4CTI0OAlMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRQor+Ql1IQkweGY5CTI0OQlMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCiv6CXUnCTB4ZmEJMjUwCUxBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEUKK/sJdT4JMHhmYgkyNTEJTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCiv8CXU6CTB4ZmMJMjUyCUxBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCiv9CXknCTB4ZmQJMjUzCUxBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUKK/4JdGgJMHhmZQkyNTQJTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCiv/CXk6CTB4ZmYJMjU1CUxBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9kb2N0YWdzLmMgYi9ydW50aW1lL2RvYy9kb2N0YWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIxM2RkOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2RvY3RhZ3MuYwpAQCAtMCwwICsxLDgzIEBACisvKiB2aW06c2V0IHRzPTQgc3c9NDoKKyAqIHRoaXMgcHJvZ3JhbSBtYWtlcyBhIHRhZ3MgZmlsZSBmb3IgdmltX3JlZi50eHQKKyAqCisgKiBVc2FnZTogZG9jdGFncyB2aW1fcmVmLnR4dCB2aW1fd2luLnR4dCAuLi4gPnRhZ3MKKyAqCisgKiBBIHRhZyBpbiB0aGlzIGNvbnRleHQgaXMgYW4gaWRlbnRpZmllciBiZXR3ZWVuIHN0YXJzLCBlLmcuICpjX2ZpbGVzKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgTElORUxFTiAyMDAKKworCWludAorbWFpbihhcmdjLCBhcmd2KQorCWludAkJYXJnYzsKKwljaGFyCSoqYXJndjsKK3sKKwljaGFyCWxpbmVbTElORUxFTl07CisJY2hhcgkqcDEsICpwMjsKKwljaGFyCSpwOworCUZJTEUJKmZkOworCisJaWYgKGFyZ2MgPD0gMSkKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGRvY3RhZ3MgZG9jZmlsZSAuLi4gPnRhZ3NcbiIpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoImhlbHAtdGFnc1x0dGFnc1x0MVxuIik7CisJd2hpbGUgKC0tYXJnYyA+IDApCisJeworCQkrK2FyZ3Y7CisJCWZkID0gZm9wZW4oYXJndlswXSwgInIiKTsKKwkJaWYgKGZkID09IE5VTEwpCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmdcbiIsIGFyZ3ZbMF0pOworCQkJY29udGludWU7CisJCX0KKwkJd2hpbGUgKGZnZXRzKGxpbmUsIExJTkVMRU4sIGZkKSAhPSBOVUxMKQorCQl7CisJCQlwMSA9IHN0cmNocihsaW5lLCAnKicpOwkJCQkvKiBmaW5kIGZpcnN0ICcqJyAqLworCQkJd2hpbGUgKHAxICE9IE5VTEwpCisJCQl7CisJCQkJcDIgPSBzdHJjaHIocDEgKyAxLCAnKicpOwkJLyogZmluZCBzZWNvbmQgJyonICovCisJCQkJaWYgKHAyICE9IE5VTEwgJiYgcDIgPiBwMSArIDEpCS8qIHNraXAgIioiIGFuZCAiKioiICovCisJCQkJeworCQkJCQlmb3IgKHAgPSBwMSArIDE7IHAgPCBwMjsgKytwKQorCQkJCQkJaWYgKCpwID09ICcgJyB8fCAqcCA9PSAnXHQnIHx8ICpwID09ICd8JykKKwkJCQkJCQlicmVhazsKKwkJCQkJLyoKKwkJCQkJICogT25seSBhY2NlcHQgYSAqdGFnKiB3aGVuIGl0IGNvbnNpc3RzIG9mIHZhbGlkCisJCQkJCSAqIGNoYXJhY3RlcnMsIHRoZXJlIGlzIHdoaXRlIHNwYWNlIGJlZm9yZSBpdCBhbmQgaXMKKwkJCQkJICogZm9sbG93ZWQgYnkgYSB3aGl0ZSBjaGFyYWN0ZXIgb3IgZW5kLW9mLWxpbmUuCisJCQkJCSAqLworCQkJCQlpZiAocCA9PSBwMgorCQkJCQkJCSYmIChwMSA9PSBsaW5lIHx8IHAxWy0xXSA9PSAnICcgfHwgcDFbLTFdID09ICdcdCcpCisJCQkJCQkJCSYmIChzdHJjaHIoIiBcdFxuXHIiLCBwWzFdKSAhPSBOVUxMCisJCQkJCQkJCQl8fCBwWzFdID09ICdcMCcpKQorCQkJCQl7CisJCQkJCQkqcDIgPSAnXDAnOworCQkJCQkJKytwMTsKKwkJCQkJCXByaW50ZigiJXNcdCVzXHQvKiIsIHAxLCBhcmd2WzBdKTsKKwkJCQkJCXdoaWxlICgqcDEpCisJCQkJCQl7CisJCQkJCQkJLyogaW5zZXJ0IGJhY2tzbGFzaCBiZWZvcmUgJ1xcJyBhbmQgJy8nICovCisJCQkJCQkJaWYgKCpwMSA9PSAnXFwnIHx8ICpwMSA9PSAnLycpCisJCQkJCQkJCXB1dGNoYXIoJ1xcJyk7CisJCQkJCQkJcHV0Y2hhcigqcDEpOworCQkJCQkJCSsrcDE7CisJCQkJCQl9CisJCQkJCQlwcmludGYoIipcbiIpOworCQkJCQkJcDIgPSBzdHJjaHIocDIgKyAxLCAnKicpOwkJLyogZmluZCBuZXh0ICcqJyAqLworCQkJCQl9CisJCQkJfQorCQkJCXAxID0gcDI7CisJCQl9CisJCX0KKwkJZmNsb3NlKGZkKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9lZGl0aW5nLnR4dCBiL3J1bnRpbWUvZG9jL2VkaXRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNWMzNGEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9lZGl0aW5nLnR4dApAQCAtMCwwICsxLDE0MzIgQEAKKyplZGl0aW5nLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBBcHIgMjgKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitFZGl0aW5nIGZpbGVzCQkJCQkJKmVkaXQtZmlsZXMqCisKKzEuICBJbnRyb2R1Y3Rpb24JCXxlZGl0LWludHJvfAorMi4gIEVkaXRpbmcgYSBmaWxlCQl8ZWRpdC1hLWZpbGV8CiszLiAgRGlhbG9ncwkJCXxlZGl0LWRpYWxvZ3N8Cis0LiAgVGhlIGN1cnJlbnQgZGlyZWN0b3J5CXxjdXJyZW50LWRpcmVjdG9yeXwKKzUuICBUaGUgYXJndW1lbnQgbGlzdAkJfGFyZ3VtZW50LWxpc3R8Cis2LiAgV3JpdGluZwkJCXx3cml0aW5nfAorNy4gIFdyaXRpbmcgYW5kIHF1aXR0aW5nCXx3cml0ZS1xdWl0fAorOC4gIEVkaXRpbmcgYmluYXJ5IGZpbGVzCXxlZGl0LWJpbmFyeXwKKzkuICBFbmNyeXB0aW9uCQkJfGVuY3J5cHRpb258CisxMC4gVGltZXN0YW1wcwkJCXx0aW1lc3RhbXBzfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEludHJvZHVjdGlvbgkJCQkJCSplZGl0LWludHJvKgorCitFZGl0aW5nIGEgZmlsZSB3aXRoIFZpbSBtZWFuczoKKworMS4gcmVhZGluZyB0aGUgZmlsZSBpbnRvIHRoZSBpbnRlcm5hbCBidWZmZXIKKzIuIGNoYW5naW5nIHRoZSBidWZmZXIgd2l0aCBlZGl0b3IgY29tbWFuZHMKKzMuIHdyaXRpbmcgdGhlIGJ1ZmZlciBpbnRvIGEgZmlsZQorCisJCQkJCQkJKmN1cnJlbnQtZmlsZSoKK0FzIGxvbmcgYXMgeW91IGRvbid0IHdyaXRlIHRoZSBidWZmZXIsIHRoZSBvcmlnaW5hbCBmaWxlIHJlbWFpbnMgdW5jaGFuZ2VkLgorSWYgeW91IHN0YXJ0IGVkaXRpbmcgYSBmaWxlIChyZWFkIGEgZmlsZSBpbnRvIHRoZSBidWZmZXIpLCB0aGUgZmlsZSBuYW1lIGlzCityZW1lbWJlcmVkIGFzIHRoZSAiY3VycmVudCBmaWxlIG5hbWUiLgorCisJCQkJCQkJKmFsdGVybmF0ZS1maWxlKgorSWYgdGhlcmUgYWxyZWFkeSB3YXMgYSBjdXJyZW50IGZpbGUgbmFtZSwgdGhlbiB0aGF0IG9uZSBiZWNvbWVzIHRoZSBhbHRlcm5hdGUKK2ZpbGUgbmFtZS4gIEFsbCBmaWxlIG5hbWVzIGFyZSByZW1lbWJlcmVkIGluIHRoZSBmaWxlIGxpc3QuICBXaGVuIHlvdSBlbnRlciBhCitmaWxlIG5hbWUsIGZvciBlZGl0aW5nIChlLmcuLCB3aXRoICI6ZSBmaWxlbmFtZSIpIG9yIHdyaXRpbmcgKGUuZy4sIHdpdGggKDp3CitmaWxlIG5hbWUiKSwgdGhlIGZpbGUgbmFtZSBpcyBhZGRlZCB0byB0aGUgbGlzdC4gIFlvdSBjYW4gdXNlIHRoaXMgbGlzdCB0bworcmVtZW1iZXIgd2hpY2ggZmlsZXMgeW91IGVkaXRlZCBhbmQgdG8gcXVpY2tseSBzd2l0Y2ggZnJvbSBvbmUgZmlsZSB0bworYW5vdGhlciB3aXRoIHRoZSBDVFJMLV4gY29tbWFuZCAoZS5nLiwgdG8gY29weSB0ZXh0KS4gIEZpcnN0IHR5cGUgdGhlIG51bWJlcgorb2YgdGhlIGZpbGUgYW5kIHRoZW4gaGl0IENUUkwtXi4gIHtWaTogb25seSBvbmUgYWx0ZXJuYXRlIGZpbGUgbmFtZX0KKworQ1RSTC1HCQlvcgkJCQkqQ1RSTC1HKiAqOmYqICo6ZmkqICo6ZmlsZSoKKzpmW2lsZV0JCQlQcmludHMgdGhlIGN1cnJlbnQgZmlsZSBuYW1lIChhcyB0eXBlZCksIHRoZQorCQkJY3Vyc29yIHBvc2l0aW9uICh1bmxlc3MgdGhlICdydWxlcicgb3B0aW9uIGlzIHNldCksCisJCQlhbmQgdGhlIGZpbGUgc3RhdHVzIChyZWFkb25seSwgbW9kaWZpZWQsIHJlYWQgZXJyb3JzLAorCQkJbmV3IGZpbGUpKS4gIFNlZSB0aGUgJ3Nob3J0bWVzcycgb3B0aW9uIGFib3V0IGhvdyB0aG8KKwkJCW1ha2UgdGhpcyBtZXNzYWdlIHNob3J0ZXIuICB7VmkgZG9lcyBub3QgaW5jbHVkZQorCQkJY29sdW1uIG51bWJlcn0KKwore2NvdW50fUNUUkwtRwkJTGlrZSBDVFJMLUcsIGJ1dCBwcmludHMgdGhlIGN1cnJlbnQgZmlsZSBuYW1lIHdpdGgKKwkJCWZ1bGwgcGF0aC4gIElmIHRoZSBjb3VudCBpcyBoaWdoZXIgdGhhbiAxIHRoZSBjdXJyZW50CisJCQlidWZmZXIgbnVtYmVyIGlzIGFsc28gZ2l2ZW4uICB7bm90IGluIFZpfQorCisJCQkJCSpnX0NUUkwtRyogKndvcmQtY291bnQqICpieXRlLWNvdW50KgorZyBDVFJMLUcJCVByaW50cyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yIGluIGZvdXIKKwkJCXdheXM6IENvbHVtbiwgTGluZSwgV29yZCBhbmQgQnl0ZS4gIElmIHRoZXJlIGFyZQorCQkJY2hhcmFjdGVycyBpbiB0aGUgbGluZSB0aGF0IHRha2UgbW9yZSB0aGFuIG9uZQorCQkJcG9zaXRpb24gb24gdGhlIHNjcmVlbiAoPFRhYj4gb3Igc3BlY2lhbCBjaGFyYWN0ZXIpLAorCQkJYm90aCB0aGUgInJlYWwiIGNvbHVtbiBhbmQgdGhlIHNjcmVlbiBjb2x1bW4gYXJlCisJCQlzaG93biwgc2VwYXJhdGVkIHdpdGggYSBkYXNoLiAgU2VlIGFsc28gJ3J1bGVyJworCQkJb3B0aW9uLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSp2X2dfQ1RSTC1HKgore1Zpc3VhbH1nIENUUkwtRwlTaW1pbGFyIHRvICJnIENUUkwtRyIsIGJ1dCBXb3JkLCBMaW5lLCBhbmQgQnl0ZSBjb3VudHMKKwkJCWZvciB0aGUgdmlzdWFsbHkgc2VsZWN0ZWQgcmVnaW9uIGFyZSBkaXNwbGF5ZWQuICBJbgorCQkJQmxvY2t3aXNlIG1vZGUsIENvbHVtbiBjb3VudCBpcyBhbHNvIHNob3duLiAgKEZvcgorCQkJe1Zpc3VhbH0gc2VlIHxWaXN1YWwtbW9kZXwuKQorCQkJe25vdCBpbiBWSX0KKworCQkJCQkJCSo6ZmlsZV9mKgorOmZbaWxlXSB7bmFtZX0JCVNldHMgdGhlIGN1cnJlbnQgZmlsZSBuYW1lIHRvIHtuYW1lfS4KKworOmJ1ZmZlcnMKKzpmaWxlcworOmxzCQkJTGlzdCBhbGwgdGhlIGN1cnJlbnRseSBrbm93biBmaWxlIG5hbWVzLiAgU2VlCisJCQknd2luZG93cy50eHQnIHw6ZmlsZXN8IHw6YnVmZmVyc3wgfDpsc3wuICB7bm90IGluCisJCQlWaX0KKworVmltIHdpbGwgcmVtZW1iZXIgdGhlIGZ1bGwgcGF0aCBuYW1lIG9mIGEgZmlsZSBuYW1lIHRoYXQgeW91IGVudGVyLiAgSW4gbW9zdAorY2FzZXMgd2hlbiB0aGUgZmlsZSBuYW1lIGlzIGRpc3BsYXllZCBvbmx5IHRoZSBuYW1lIHlvdSB0eXBlZCBpcyBzaG93biwgYnV0Cit0aGUgZnVsbCBwYXRoIG5hbWUgaXMgYmVpbmcgdXNlZCBpZiB5b3UgdXNlZCB0aGUgIjpjZCIgY29tbWFuZCB8OmNkfC4KKworCQkJCQkJCSpob21lLXJlcGxhY2UqCitJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJEhPTUUgaXMgc2V0LCBhbmQgdGhlIGZpbGUgbmFtZSBzdGFydHMgd2l0aCB0aGF0CitzdHJpbmcsIGl0IGlzIG9mdGVuIGRpc3BsYXllZCB3aXRoIEhPTUUgcmVwbGFjZWQgd2l0aCAifiIuICBUaGlzIHdhcyBkb25lIHRvCitrZWVwIGZpbGUgbmFtZXMgc2hvcnQuICBXaGVuIHJlYWRpbmcgb3Igd3JpdGluZyBmaWxlcyB0aGUgZnVsbCBuYW1lIGlzIHN0aWxsCit1c2VkLCB0aGUgIn4iIGlzIG9ubHkgdXNlZCB3aGVuIGRpc3BsYXlpbmcgZmlsZSBuYW1lcy4gIFdoZW4gcmVwbGFjaW5nIHRoZQorZmlsZSBuYW1lIHdvdWxkIHJlc3VsdCBpbiBqdXN0ICJ+IiwgIn4vIiBpcyB1c2VkIGluc3RlYWQgKHRvIGF2b2lkIGNvbmZ1c2lvbgord2l0aCAnYmFja3VwZXh0JyBzZXQgdG8gIn4iKS4KKworV2hlbiB3cml0aW5nIHRoZSBidWZmZXIsIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgY3VycmVudCBmaWxlIG5hbWUuICBUaHVzCit3aGVuIHlvdSBnaXZlIHRoZSAiWloiIG9yICI6d3EiIGNvbW1hbmQsIHRoZSBvcmlnaW5hbCBmaWxlIHdpbGwgYmUKK292ZXJ3cml0dGVuLiAgSWYgeW91IGRvIG5vdCB3YW50IHRoaXMsIHRoZSBidWZmZXIgY2FuIGJlIHdyaXR0ZW4gaW50byBhbm90aGVyCitmaWxlIGJ5IGdpdmluZyBhIGZpbGUgbmFtZSBhcmd1bWVudCB0byB0aGUgIjp3cml0ZSIgY29tbWFuZC4gIEZvciBleGFtcGxlOiA+CisKKwl2aW0gdGVzdGZpbGUKKwlbY2hhbmdlIHRoZSBidWZmZXIgd2l0aCBlZGl0b3IgY29tbWFuZHNdCisJOncgbmV3ZmlsZQorCTpxCisKK1RoaXMgd2lsbCBjcmVhdGUgYSBmaWxlICJuZXdmaWxlIiwgdGhhdCBpcyBhIG1vZGlmaWVkIGNvcHkgb2YgInRlc3RmaWxlIi4KK1RoZSBmaWxlICJ0ZXN0ZmlsZSIgd2lsbCByZW1haW4gdW5jaGFuZ2VkLiAgQW55d2F5LCBpZiB0aGUgJ2JhY2t1cCcgb3B0aW9uIGlzCitzZXQsIFZpbSByZW5hbWVzIG9yIGNvcGllcyB0aGUgb3JpZ2luYWwgZmlsZSBiZWZvcmUgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi4KK1lvdSBjYW4gdXNlIHRoaXMgZmlsZSBpZiB5b3UgZGlzY292ZXIgdGhhdCB5b3UgbmVlZCB0aGUgb3JpZ2luYWwgZmlsZS4gIFNlZQorYWxzbyB0aGUgJ3BhdGNobW9kZScgb3B0aW9uLiAgVGhlIG5hbWUgb2YgdGhlIGJhY2t1cCBmaWxlIGlzIG5vcm1hbGx5IHRoZSBzYW1lCithcyB0aGUgb3JpZ2luYWwgZmlsZSB3aXRoICdiYWNrdXBleHQnIGFwcGVuZGVkLiAgVGhlIGRlZmF1bHQgIn4iIGlzIGEgYml0CitzdHJhbmdlIHRvIGF2b2lkIGFjY2lkZW50YWxseSBvdmVyd3JpdGluZyBleGlzdGluZyBmaWxlcy4gIElmIHlvdSBwcmVmZXIgIi5iYWsiCitjaGFuZ2UgdGhlICdiYWNrdXBleHQnIG9wdGlvbi4gIEV4dHJhIGRvdHMgYXJlIHJlcGxhY2VkIHdpdGggJ18nIG9uIE1TLURPUworbWFjaGluZXMsIHdoZW4gVmltIGhhcyBkZXRlY3RlZCB0aGF0IGFuIE1TLURPUy1saWtlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgdXNlZAorKGUuZy4sIG1lc3N5ZG9zIG9yIGNyb3NzZG9zKSBvciB3aGVuIHRoZSAnc2hvcnRuYW1lJyBvcHRpb24gaXMgb24uICBUaGUKK2JhY2t1cCBmaWxlIGNhbiBiZSBwbGFjZWQgaW4gYW5vdGhlciBkaXJlY3RvcnkgYnkgc2V0dGluZyAnYmFja3VwZGlyJy4KKworCQkJCQkJCSphdXRvLXNob3J0bmFtZSoKK1RlY2huaWNhbDogT24gdGhlIEFtaWdhIHlvdSBjYW4gdXNlIDMwIGNoYXJhY3RlcnMgZm9yIGEgZmlsZSBuYW1lLiAgQnV0IG9uIGFuCisJICAgTVMtRE9TLWNvbXBhdGlibGUgZmlsZXN5c3RlbSBvbmx5IDggcGx1cyAzIGNoYXJhY3RlcnMgYXJlCisJICAgYXZhaWxhYmxlLiAgVmltIHRyaWVzIHRvIGRldGVjdCB0aGUgdHlwZSBvZiBmaWxlc3lzdGVtIHdoZW4gaXQgaXMKKwkgICBjcmVhdGluZyB0aGUgLnN3cCBmaWxlLiAgSWYgYW4gTVMtRE9TLWxpa2UgZmlsZXN5c3RlbSBpcyBzdXNwZWN0ZWQsCisJICAgYSBmbGFnIGlzIHNldCB0aGF0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc2V0dGluZyB0aGUgJ3Nob3J0bmFtZScKKwkgICBvcHRpb24uICBUaGlzIGZsYWcgd2lsbCBiZSByZXNldCBhcyBzb29uIGFzIHlvdSBzdGFydCBlZGl0aW5nIGEKKwkgICBuZXcgZmlsZS4gIFRoZSBmbGFnIHdpbGwgYmUgdXNlZCB3aGVuIG1ha2luZyB0aGUgZmlsZSBuYW1lIGZvciB0aGUKKwkgICAiLnN3cCIgYW5kICIufiIgZmlsZXMgZm9yIHRoZSBjdXJyZW50IGZpbGUuICBCdXQgd2hlbiB5b3UgYXJlCisJICAgZWRpdGluZyBhIGZpbGUgaW4gYSBub3JtYWwgZmlsZXN5c3RlbSBhbmQgd3JpdGUgdG8gYW4gTVMtRE9TLWxpa2UKKwkgICBmaWxlc3lzdGVtIHRoZSBmbGFnIHdpbGwgbm90IGhhdmUgYmVlbiBzZXQuICBJbiB0aGF0IGNhc2UgdGhlCisJICAgY3JlYXRpb24gb2YgdGhlICIufiIgZmlsZSBtYXkgZmFpbCBhbmQgeW91IHdpbGwgZ2V0IGFuIGVycm9yCisJICAgbWVzc2FnZS4gIFVzZSB0aGUgJ3Nob3J0bmFtZScgb3B0aW9uIGluIHRoaXMgY2FzZS4KKworV2hlbiB5b3Ugc3RhcnRlZCBlZGl0aW5nIHdpdGhvdXQgZ2l2aW5nIGEgZmlsZSBuYW1lLCAiTm8gRmlsZSIgaXMgZGlzcGxheWVkIGluCittZXNzYWdlcy4gIElmIHRoZSAiOndyaXRlIiBjb21tYW5kIGlzIHVzZWQgd2l0aCBhIGZpbGUgbmFtZSBhcmd1bWVudCwgdGhlIGZpbGUKK25hbWUgZm9yIHRoZSBjdXJyZW50IGZpbGUgaXMgc2V0IHRvIHRoYXQgZmlsZSBuYW1lLiAgVGhpcyBvbmx5IGhhcHBlbnMgd2hlbgordGhlICdGJyBmbGFnIGlzIGluY2x1ZGVkIGluICdjcG9wdGlvbnMnIChieSBkZWZhdWx0IGl0IGlzIGluY2x1ZGVkKS4gIFRoaXMgaXMKK3VzZWZ1bCB3aGVuIGVudGVyaW5nIHRleHQgaW4gYW4gZW1wdHkgYnVmZmVyIGFuZCB0aGVuIHdyaXRpbmcgaXQgdG8gYSBmaWxlLgorSWYgJ2Nwb3B0aW9ucycgY29udGFpbnMgdGhlICdmJyBmbGFnIChieSBkZWZhdWx0IGl0IGlzIE5PVCBpbmNsdWRlZCkgdGhlIGZpbGUKK25hbWUgaXMgc2V0IGZvciB0aGUgIjpyZWFkIGZpbGUiIGNvbW1hbmQuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHN0YXJ0aW5nIFZpbQord2l0aG91dCBhbiBhcmd1bWVudCBhbmQgdGhlbiBkb2luZyAiOnJlYWQgZmlsZSIgdG8gc3RhcnQgZWRpdGluZyBhIGZpbGUuCisJCQkJCQkJKm5vdC1lZGl0ZWQqCitCZWNhdXNlIHRoZSBmaWxlIG5hbWUgd2FzIHNldCB3aXRob3V0IHJlYWxseSBzdGFydGluZyB0byBlZGl0IHRoYXQgZmlsZSwgeW91CithcmUgcHJvdGVjdGVkIGZyb20gb3ZlcndyaXRpbmcgdGhhdCBmaWxlLiAgVGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgdGhlCisibm90ZWRpdGVkIiBmbGFnLiAgWW91IGNhbiBzZWUgaWYgdGhpcyBmbGFnIGlzIHNldCB3aXRoIHRoZSBDVFJMLUcgb3IgIjpmaWxlIgorY29tbWFuZC4gIEl0IHdpbGwgaW5jbHVkZSAiW05vdCBlZGl0ZWRdIiB3aGVuIHRoZSAibm90ZWRpdGVkIiBmbGFnIGlzIHNldC4KK1doZW4gd3JpdGluZyB0aGUgYnVmZmVyIHRvIHRoZSBjdXJyZW50IGZpbGUgbmFtZSAod2l0aCAiOnchIiksIHRoZSAibm90ZWRpdGVkIgorZmxhZyBpcyByZXNldC4KKworCQkJCQkJCSphYmFuZG9uKgorVmltIHJlbWVtYmVycyB3aGV0aGVyIHlvdSBoYXZlIGNoYW5nZWQgdGhlIGJ1ZmZlci4gIFlvdSBhcmUgcHJvdGVjdGVkIGZyb20KK2xvc2luZyB0aGUgY2hhbmdlcyB5b3UgbWFkZS4gIElmIHlvdSB0cnkgdG8gcXVpdCB3aXRob3V0IHdyaXRpbmcsIG9yIHdhbnQgdG8KK3N0YXJ0IGVkaXRpbmcgYW5vdGhlciBmaWxlLCBWaW0gd2lsbCByZWZ1c2UgdGhpcy4gIEluIG9yZGVyIHRvIG92ZXJydWxlIHRoaXMKK3Byb3RlY3Rpb24sIGFkZCBhICchJyB0byB0aGUgY29tbWFuZC4gIFRoZSBjaGFuZ2VzIHdpbGwgdGhlbiBiZSBsb3N0LiAgRm9yCitleGFtcGxlOiAiOnEiIHdpbGwgbm90IHdvcmsgaWYgdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCwgYnV0ICI6cSEiIHdpbGwuICBUbyBzZWUKK3doZXRoZXIgdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCB1c2UgdGhlICJDVFJMLUciIGNvbW1hbmQuICBUaGUgbWVzc2FnZSBpbmNsdWRlcwordGhlIHN0cmluZyAiW01vZGlmaWVkXSIgaWYgdGhlIGJ1ZmZlciBoYXMgYmVlbiBjaGFuZ2VkLgorCitJZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHNhdmUgdGhlIGNoYW5nZXMgd2l0aG91dCBhc2tpbmcsIHN3aXRjaCBvbiB0aGUKKydhdXRvd3JpdGVhbGwnIG9wdGlvbi4gICdhdXRvd3JpdGUnIGlzIHRoZSBhc3NvY2lhdGVkIFZpLWNvbXBhdGlibGUgb3B0aW9uCit0aGF0IGRvZXMgbm90IHdvcmsgZm9yIGFsbCBjb21tYW5kcy4KKworSWYgeW91IHdhbnQgdG8ga2VlcCB0aGUgY2hhbmdlZCBidWZmZXIgd2l0aG91dCBzYXZpbmcgaXQsIHN3aXRjaCBvbiB0aGUKKydoaWRkZW4nIG9wdGlvbi4gIFNlZSB8aGlkZGVuLWJ1ZmZlcnwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gRWRpdGluZyBhIGZpbGUJCQkJCSplZGl0LWEtZmlsZSoKKworCQkJCQkJCSo6ZSogKjplZGl0KgorOmVbZGl0XSBbKytvcHRdIFsrY21kXQlFZGl0IHRoZSBjdXJyZW50IGZpbGUuICBUaGlzIGlzIHVzZWZ1bCB0byByZS1lZGl0IHRoZQorCQkJY3VycmVudCBmaWxlLCB3aGVuIGl0IGhhcyBiZWVuIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0uCisJCQlUaGlzIGZhaWxzIHdoZW4gY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgY3VycmVudAorCQkJYnVmZmVyIGFuZCAnYXV0b3dyaXRlYWxsJyBpc24ndCBzZXQgb3IgdGhlIGZpbGUgY2FuJ3QKKwkJCWJlIHdyaXR0ZW4uCisJCQlBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisJCQl7Vmk6IG5vICsrb3B0fQorCisJCQkJCQkJKjplZGl0ISoKKzplW2RpdF0hIFsrK29wdF0gWytjbWRdCisJCQlFZGl0IHRoZSBjdXJyZW50IGZpbGUgYWx3YXlzLiAgRGlzY2FyZCBhbnkgY2hhbmdlcyB0bworCQkJdGhlIGN1cnJlbnQgYnVmZmVyLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8KKwkJCXN0YXJ0IGFsbCBvdmVyIGFnYWluLgorCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCQkJe1ZpOiBubyArK29wdH0KKworCQkJCQkJCSo6ZWRpdF9mKgorOmVbZGl0XSBbKytvcHRdIFsrY21kXSB7ZmlsZX0KKwkJCUVkaXQge2ZpbGV9LgorCQkJVGhpcyBmYWlscyB3aGVuIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIGN1cnJlbnQKKwkJCWJ1ZmZlciwgdW5sZXNzICdoaWRkZW4nIGlzIHNldCBvciAnYXV0b3dyaXRlYWxsJyBpcworCQkJc2V0IGFuZCB0aGUgZmlsZSBjYW4gYmUgd3JpdHRlbi4KKwkJCUFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKwkJCXtWaTogbm8gKytvcHR9CisKKwkJCQkJCQkqOmVkaXQhX2YqCis6ZVtkaXRdISBbKytvcHRdIFsrY21kXSB7ZmlsZX0KKwkJCUVkaXQge2ZpbGV9IGFsd2F5cy4gIERpc2NhcmQgYW55IGNoYW5nZXMgdG8gdGhlCisJCQljdXJyZW50IGJ1ZmZlci4KKwkJCUFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKwkJCXtWaTogbm8gKytvcHR9CisKKzplW2RpdF0gWysrb3B0XSBbK2NtZF0gI1tjb3VudF0KKwkJCUVkaXQgdGhlIFtjb3VudF10aCBhbHRlcm5hdGUgZmlsZSBuYW1lIChhcyBzaG93biBieQorCQkJOmZpbGVzKS4gIFRoaXMgY29tbWFuZCBkb2VzIHRoZSBzYW1lIGFzCisJCQlbY291bnRdIENUUkwtXi4gIEJ1dCAiOmUgIyIgZG9lc24ndCB3b3JrIGlmIHRoZQorCQkJYWx0ZXJuYXRlIGJ1ZmZlciBkb2Vzbid0IGhhdmUgYSBmaWxlIG5hbWUsIHdoaWxlCisJCQlDVFJMLV4gc3RpbGwgd29ya3MgdGhlbi4KKwkJCUFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKwkJCXtWaTogbm8gKytvcHR9CisKKwkJCQkJCQkqOmVuZSogKjplbmV3KgorOmVuZVt3XQkJCUVkaXQgYSBuZXcsIHVubmFtZWQgYnVmZmVyLiAgVGhpcyBmYWlscyB3aGVuIGNoYW5nZXMKKwkJCWhhdmUgYmVlbiBtYWRlIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciwgdW5sZXNzICdoaWRkZW4nCisJCQlpcyBzZXQgb3IgJ2F1dG93cml0ZWFsbCcgaXMgc2V0IGFuZCB0aGUgZmlsZSBjYW4gYmUKKwkJCXdyaXR0ZW4uCisJCQlJZiAnZmlsZWZvcm1hdHMnIGlzIG5vdCBlbXB0eSwgdGhlIGZpcnN0IGZvcm1hdCBnaXZlbgorCQkJd2lsbCBiZSB1c2VkIGZvciB0aGUgbmV3IGJ1ZmZlci4gIElmICdmaWxlZm9ybWF0cycgaXMKKwkJCWVtcHR5LCB0aGUgJ2ZpbGVmb3JtYXQnIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyB1c2VkLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6ZW5lISogKjplbmV3ISoKKzplbmVbd10hCQlFZGl0IGEgbmV3LCB1bm5hbWVkIGJ1ZmZlci4gIERpc2NhcmQgYW55IGNoYW5nZXMgdG8KKwkJCXRoZSBjdXJyZW50IGJ1ZmZlci4KKwkJCVNldCAnZmlsZWZvcm1hdCcgbGlrZSB8OmVuZXd8LgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6ZmluKiAqOmZpbmQqCis6ZmluW2RdWyFdIFsrK29wdF0gWytjbWRdIHtmaWxlfQorCQkJRmluZCB7ZmlsZX0gaW4gJ3BhdGgnIGFuZCB0aGVuIHw6ZWRpdHwgaXQuCisJCQl7bm90IGluIFZpfSB7bm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K2ZpbGVfaW5fcGF0aHwKKwkJCWZlYXR1cmUgd2FzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZX0KKworOntjb3VudH1maW5bZF1bIV0gWysrb3B0XSBbK2NtZF0ge2ZpbGV9CisJCQlKdXN0IGxpa2UgIjpmaW5kIiwgYnV0IHVzZSB0aGUge2NvdW50fSBtYXRjaCBpbgorCQkJJ3BhdGgnLiAgVGh1cyAiOjJmaW5kIGZpbGUiIHdpbGwgZmluZCB0aGUgc2Vjb25kCisJCQkiZmlsZSIgZm91bmQgaW4gJ3BhdGgnLiAgV2hlbiB0aGVyZSBhcmUgZmV3ZXIgbWF0Y2hlcworCQkJZm9yIHRoZSBmaWxlIGluICdwYXRoJyB0aGFuIGFza2VkIGZvciwgeW91IGdldCBhbgorCQkJZXJyb3IgbWVzc2FnZS4KKworCQkJCQkJCSo6ZXgqCis6ZXggWysrb3B0XSBbK2NtZF0gW2ZpbGVdCisJCQlTYW1lIGFzIHw6ZWRpdHwuCisKKwkJCQkJCQkqOnZpKiAqOnZpc3VhbCoKKzp2aVtzdWFsXVshXSBbKytvcHRdIFsrY21kXSBbZmlsZV0KKwkJCVdoZW4gZW50ZXJlZCBpbiBFeCBtb2RlOiBMZWF2ZSB8RXgtbW9kZXwsIGdvIGJhY2sgdG8KKwkJCU5vcm1hbCBtb2RlLiAgT3RoZXJ3aXNlIHNhbWUgYXMgfDplZGl0fC4KKworCQkJCQkJCSo6dmllKiAqOnZpZXcqCis6dmllW3ddIFsrK29wdF0gWytjbWRdIGZpbGUKKwkJCVdoZW4gZW50ZXJlZCBpbiBFeCBtb2RlOiBMZWF2ZSBFeCBtb2RlLCBnbyBiYWNrIHRvCisJCQlOb3JtYWwgbW9kZS4gIE90aGVyd2lzZSBzYW1lIGFzIHw6ZWRpdHwsIGJ1dCBzZXQKKwkJCSdyZWFkb25seScgb3B0aW9uIGZvciB0aGlzIGJ1ZmZlci4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqQ1RSTC1eKiAqQ1RSTC02KgorW2NvdW50XUNUUkwtXgkJRWRpdCBbY291bnRddGggYWx0ZXJuYXRlIGZpbGUgKGVxdWl2YWxlbnQgdG8gIjplCisJCQkjW2NvdW50XSIpLiAgV2l0aG91dCBjb3VudCB0aGlzIGdldHMgeW91IHRvIHRoZQorCQkJcHJldmlvdXNseSBlZGl0ZWQgZmlsZS4gIFRoaXMgaXMgYSBxdWljayB3YXkgdG8gdG9nZ2xlCisJCQliZXR3ZWVuIHR3byAob3IgbW9yZSkgZmlsZXMuCisJCQlJZiB0aGUgJ2F1dG93cml0ZScgb3IgJ2F1dG93cml0ZWFsbCcgb3B0aW9uIGlzIG9uIGFuZAorCQkJdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCwgd3JpdGUgaXQuCisJCQlNb3N0bHkgdGhlIF4gY2hhcmFjdGVyIGlzIHBvc2l0aW9uZWQgb24gdGhlIDYga2V5LAorCQkJcHJlc3NpbmcgQ1RSTCBhbmQgNiB0aGVuIGdldHMgeW91IHdoYXQgd2UgY2FsbCBDVFJMLV4uCisJCQlCdXQgb24gc29tZSBub24tVVMga2V5Ym9hcmRzIENUUkwtXiBpcyBwcm9kdWNlZCBpbgorCQkJYW5vdGhlciB3YXkuCisKK1tjb3VudF1dZgkJCQkJCSpdZiogKltmKgorW2NvdW50XVtmCQlTYW1lIGFzICJnZiIuICBEZXByZWNhdGVkLgorCisJCQkJCQkJKmdmKiAqRTQ0NiogKkU0NDcqCitbY291bnRdZ2YJCUVkaXQgdGhlIGZpbGUgd2hvc2UgbmFtZSBpcyB1bmRlciBvciBhZnRlciB0aGUgY3Vyc29yLgorCQkJTW5lbW9uaWM6ICJnb3RvIGZpbGUiLgorCQkJVXNlcyB0aGUgJ2lzZm5hbWUnIG9wdGlvbiB0byBmaW5kIG91dCB3aGljaCBjaGFyYWN0ZXJzCisJCQlhcmUgc3VwcG9zZWQgdG8gYmUgaW4gYSBmaWxlIG5hbWUuICBUcmFpbGluZworCQkJcHVuY3R1YXRpb24gY2hhcmFjdGVycyAiLiw6OyEiIGFyZSBpZ25vcmVkLgorCQkJVXNlcyB0aGUgJ3BhdGgnIG9wdGlvbiBhcyBhIGxpc3Qgb2YgZGlyZWN0b3J5IG5hbWVzCisJCQl0byBsb29rIGZvciB0aGUgZmlsZS4gIEFsc28gbG9va3MgZm9yIHRoZSBmaWxlCisJCQlyZWxhdGl2ZSB0byB0aGUgY3VycmVudCBmaWxlLgorCQkJVXNlcyB0aGUgJ3N1ZmZpeGVzYWRkJyBvcHRpb24gdG8gY2hlY2sgZm9yIGZpbGUgbmFtZXMKKwkJCXdpdGggYSBzdWZmaXggYWRkZWQuCisJCQlJZiB0aGUgZmlsZSBjYW4ndCBiZSBmb3VuZCwgJ2luY2x1ZGVleHByJyBpcyB1c2VkIHRvCisJCQltb2RpZnkgdGhlIG5hbWUgYW5kIGFub3RoZXIgYXR0ZW1wdCBpcyBkb25lLgorCQkJSWYgYSBbY291bnRdIGlzIGdpdmVuLCB0aGUgY291bnQndGggZmlsZSB0aGF0IGlzIGZvdW5kCisJCQlpbiB0aGUgJ3BhdGgnIGlzIGVkaXRlZC4KKwkJCVRoaXMgY29tbWFuZCBmYWlscyBpZiBWaW0gcmVmdXNlcyB0byB8YWJhbmRvbnwgdGhlCisJCQljdXJyZW50IGZpbGUuCisJCQlJZiB5b3UgZG8gd2FudCB0byBlZGl0IGEgbmV3IGZpbGUsIHVzZTogPgorCQkJCTplIDxjZmlsZT4KKzwJCQlUbyBtYWtlIGdmIGFsd2F5cyB3b3JrIGxpa2UgdGhhdDogPgorCQkJCTptYXAgZ2YgOmUgPGNmaWxlPjxDUj4KKzwJCQlJZiB0aGUgbmFtZSBpcyBhIGh5cGVydGV4dCBsaW5rLCB0aGF0IGxvb2tzIGxpa2UKKwkJCSJ0eXBlOi8vbWFjaGluZS9wYXRoIiwgeW91IG5lZWQgdGhlIHxuZXRyd3wgcGx1Z2luLgorCQkJRm9yIFVuaXggdGhlICd+JyBjaGFyYWN0ZXIgaXMgZXhwYW5kZWQsIGxpa2UgaW4KKwkJCSJ+dXNlci9maWxlIi4gIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgdG9vCisJCQl8ZXhwYW5kLWVudnwuCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiB0aGUgfCtmaWxlX2luX3BhdGh8IGZlYXR1cmUgd2FzCisJCQlkaXNhYmxlZCBhdCBjb21waWxlIHRpbWV9CisKKwkJCQkJCQkqdl9nZioKK3tWaXN1YWx9W2NvdW50XWdmCVNhbWUgYXMgImdmIiwgYnV0IHRoZSBoaWdobGlnaHRlZCB0ZXh0IGlzIHVzZWQgYXMgdGhlCisJCQluYW1lIG9mIHRoZSBmaWxlIHRvIGVkaXQuICAnaXNmbmFtZScgaXMgaWdub3JlZC4KKwkJCUxlYWRpbmcgYmxhbmtzIGFyZSBza2lwcGVkLCBvdGhlcndpc2UgYWxsIGJsYW5rcyBhbmQKKwkJCXNwZWNpYWwgY2hhcmFjdGVycyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZpbGUgbmFtZS4KKwkJCShGb3Ige1Zpc3VhbH0gc2VlIHxWaXN1YWwtbW9kZXwuKQorCQkJe25vdCBpbiBWSX0KKworVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gc3RhcnQgZWRpdGluZyBhIHNpbmdsZSBmaWxlLiAgVGhpcyBtZWFucyB0aGF0IHRoZQorZmlsZSBpcyByZWFkIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlIGN1cnJlbnQgZmlsZSBuYW1lIGlzIHNldC4gIFRoZSBmaWxlIHRoYXQKK2lzIG9wZW5lZCBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgc2VlIHw6Y2R8LgorCitTZWUgfHJlYWQtbWVzc2FnZXN8IGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgbWVzc2FnZSB0aGF0IGlzIGdpdmVuIGFmdGVyIHRoZQorZmlsZSBoYXMgYmVlbiByZWFkLgorCitZb3UgY2FuIHVzZSB0aGUgIjplISIgY29tbWFuZCBpZiB5b3UgbWVzc2VkIHVwIHRoZSBidWZmZXIgYW5kIHdhbnQgdG8gc3RhcnQKK2FsbCBvdmVyIGFnYWluLiAgVGhlICI6ZSIgY29tbWFuZCBpcyBvbmx5IHVzZWZ1bCBpZiB5b3UgaGF2ZSBjaGFuZ2VkIHRoZQorY3VycmVudCBmaWxlIG5hbWUuCisKKwkJCQkJCQkqOmZpbGVuYW1lKiAqe2ZpbGV9KgorTm90ZSBmb3Igc3lzdGVtcyBvdGhlciB0aGFuIFVuaXggYW5kIE1TLURPUzogV2hlbiB1c2luZyBhIGNvbW1hbmQgdGhhdAorYWNjZXB0cyBhIHNpbmdsZSBmaWxlIG5hbWUgKGxpa2UgIjplZGl0IGZpbGUiKSBzcGFjZXMgaW4gdGhlIGZpbGUgbmFtZSBhcmUKK2FsbG93ZWQsIGJ1dCB0cmFpbGluZyBzcGFjZXMgYXJlIGlnbm9yZWQuICBUaGlzIGlzIHVzZWZ1bCBvbiBzeXN0ZW1zIHRoYXQKK2FsbG93IGZpbGUgbmFtZXMgd2l0aCBlbWJlZGRlZCBzcGFjZXMgKGxpa2UgdGhlIEFtaWdhKS4gIEV4YW1wbGU6IFRoZSBjb21tYW5kCisiOmUgICBMb25nIEZpbGUgTmFtZSAiIHdpbGwgZWRpdCB0aGUgZmlsZSAiTG9uZyBGaWxlIE5hbWUiLiAgV2hlbiB1c2luZyBhCitjb21tYW5kIHRoYXQgYWNjZXB0cyBtb3JlIHRoYW4gb25lIGZpbGUgbmFtZSAobGlrZSAiOm5leHQgZmlsZTEgZmlsZTIiKQorZW1iZWRkZWQgc3BhY2VzIG11c3QgYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLgorCitXaWxkY2FyZHMgaW4ge2ZpbGV9IGFyZSBleHBhbmRlZC4gIFdoaWNoIHdpbGRjYXJkcyBhcmUgc3VwcG9ydGVkIGRlcGVuZHMgb24KK3RoZSBzeXN0ZW0uICBUaGVzZSBhcmUgdGhlIGNvbW1vbiBvbmVzOgorCSoJbWF0Y2hlcyBhbnl0aGluZywgaW5jbHVkaW5nIG5vdGhpbmcKKwk/CW1hdGNoZXMgb25lIGNoYXJhY3RlcgorCVthYmNdCW1hdGNoICdhJywgJ2InIG9yICdjJworVG8gYXZvaWQgdGhlIHNwZWNpYWwgbWVhbmluZyBvZiB0aGUgd2lsZGNhcmRzIHByZXBlbmQgYSBiYWNrc2xhc2guICBIb3dldmVyLAorb24gTVMtV2luZG93cyB0aGUgYmFja3NsYXNoIGlzIGEgcGF0aCBzZXBhcmF0b3IgYW5kICJwYXRoXFthYmNdIiBpcyBzdGlsbCBzZWVuCithcyBhIHdpbGRjYXJkIHdoZW4gIlsiIGlzIGluIHRoZSAnaXNmbmFtZScgb3B0aW9uLiAgQSBzaW1wbGUgd2F5IHRvIGF2b2lkIHRoaXMKK2lzIHRvIHVzZSAicGF0aFxbW11hYmNdIi4gIFRoZW4gdGhlIGZpbGUgInBhdGhbYWJjXSIgbGl0ZXJhbGx5LgorCisJCQkJCSpiYWNrdGljay1leHBhbnNpb24qICpgLWV4cGFuc2lvbioKK09uIFVuaXggeW91IGNhbiBhbHNvIHVzZSBiYWNrdGlja3MgaW4gdGhlIGZpbGUgbmFtZSwgZm9yIGV4YW1wbGU6ID4KKwk6ZSBgZmluZCAuIC1uYW1lIHZlclxcKi5jIC1wcmludGAKK1RoZSBiYWNrc2xhc2hlcyBiZWZvcmUgdGhlIHN0YXIgYXJlIHJlcXVpcmVkIHRvIHByZXZlbnQgInZlciouYyIgdG8gYmUKK2V4cGFuZGVkIGJ5IHRoZSBzaGVsbCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBmaW5kIHByb2dyYW0uCitUaGlzIGFsc28gd29ya3MgZm9yIG1vc3Qgb3RoZXIgc3lzdGVtcywgd2l0aCB0aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGUKK2JhY2t0aWNrcyBtdXN0IGJlIGFyb3VuZCB0aGUgd2hvbGUgaXRlbS4gIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIHRleHQKK2RpcmVjdGx5IGJlZm9yZSB0aGUgZmlyc3Qgb3IganVzdCBhZnRlciB0aGUgbGFzdCBiYWNrdGljay4KKworWW91IGNhbiBoYXZlIHRoZSBiYWNrdGlja3MgZXhwYW5kZWQgYXMgYSBWaW0gZXhwcmVzc2lvbiwgaW5zdGVhZCBvZgorYW4gZXh0ZXJuYWwgY29tbWFuZCwgYnkgdXNpbmcgdGhlIHN5bnRheCBgPXtleHByfWAgZS5nLiA+CisJOmxldCBmb289J2JhcicKKwk6ZSBgPWZvbyAuICIuYyIgYAorZWRpdHMgImJhci5jIi4gIE5vdGUgdGhhdCB0aGUgZXhwcmVzc2lvbiBjYW5ub3QgY29udGFpbiBhIGJhY2t0aWNrLgorCisJCQkJCQkJKisrb3B0KiAqWysrb3B0XSoKK1RoZSBbKytvcHRdIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIGZvcmNlIHRoZSB2YWx1ZSBvZiAnZmlsZWZvcm1hdCcgb3IKKydmaWxlZW5jb2RpbmcnIHRvIGEgdmFsdWUgZm9yIG9uZSBjb21tYW5kLiAgVGhlIGZvcm0gaXM6ID4KKwkrK3tvcHRuYW1lfT17dmFsdWV9CisKK1doZXJlIHtvcHRuYW1lfSBpcyBvbmUgb2Y6CQkqKytmZiogKisrZW5jKiAqKytiaW4qICorK25vYmluKgorICAgIGZmICAgICBvciAgZmlsZWZvcm1hdCAgIG92ZXJyaWRlcyAnZmlsZWZvcm1hdCcKKyAgICBlbmMgICAgb3IgIGVuY29kaW5nCSAgICBvdmVycmlkZXMgJ2ZpbGVlbmNvZGluZycKKyAgICBiaW4gICAgb3IgIGJpbmFyeQkgICAgc2V0cyAnYmluYXJ5JworICAgIG5vYmluICBvciAgbm9iaW5hcnkJICAgIHJlc2V0cyAnYmluYXJ5JworCit7dmFsdWV9IGNhbm5vdCBjb250YWluIHdoaXRlIHNwYWNlLiAgSXQgY2FuIGJlIGFueSB2YWxpZCB2YWx1ZSBmb3IgdGhlc2UKK29wdGlvbnMuICBFeGFtcGxlczogPgorCTplICsrZmY9dW5peAorVGhpcyBlZGl0cyB0aGUgc2FtZSBmaWxlIGFnYWluIHdpdGggJ2ZpbGVmb3JtYXQnIHNldCB0byAidW5peCIuID4KKworCTp3ICsrZW5jPWxhdGluMSBuZXdmaWxlCitUaGlzIHdyaXRlcyB0aGUgY3VycmVudCBidWZmZXIgdG8gIm5ld2ZpbGUiIGluIGxhdGluMSBmb3JtYXQuCisKK05vdGUgdGhhdCB3aGVuIHJlYWRpbmcsIHRoZSAnZmlsZWZvcm1hdCcgYW5kICdmaWxlZW5jb2RpbmcnIG9wdGlvbnMgd2lsbCBiZQorc2V0IHRvIHRoZSB1c2VkIGZvcm1hdC4gIFdoZW4gd3JpdGluZyB0aGlzIGRvZXNuJ3QgaGFwcGVuLCB0aHVzIGEgbmV4dCB3cml0ZQord2lsbCB1c2UgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgb3B0aW9uLiAgU2FtZSBmb3IgdGhlICdiaW5hcnknIG9wdGlvbi4KKworVGhlcmUgbWF5IGJlIHNldmVyYWwgKytvcHQgYXJndW1lbnRzLCBzZXBhcmF0ZWQgYnkgd2hpdGUgc3BhY2UuICBUaGV5IG11c3QgYWxsCithcHBlYXIgYmVmb3JlIGFueSB8K2NtZHwgYXJndW1lbnQuCisKKwkJCQkJCQkqK2NtZCogKlsrY21kXSoKK1RoZSBbK2NtZF0gYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBpbiB0aGUgbmV3bHkgb3BlbmVkCitmaWxlLCBvciBleGVjdXRlIGFueSBvdGhlciBjb21tYW5kOgorCSsJCVN0YXJ0IGF0IHRoZSBsYXN0IGxpbmUuCisJK3tudW19CQlTdGFydCBhdCBsaW5lIHtudW19LgorCSsve3BhdH0JCVN0YXJ0IGF0IGZpcnN0IGxpbmUgY29udGFpbmluZyB7cGF0fS4KKwkre2NvbW1hbmR9CUV4ZWN1dGUge2NvbW1hbmR9IGFmdGVyIG9wZW5pbmcgdGhlIG5ldyBmaWxlLgorCQkJe2NvbW1hbmR9IGlzIGFueSBFeCBjb21tYW5kLgorVG8gaW5jbHVkZSBhIHdoaXRlIHNwYWNlIGluIHRoZSB7cGF0fSBvciB7Y29tbWFuZH0sIHByZWNlZGUgaXQgd2l0aCBhCitiYWNrc2xhc2guICBEb3VibGUgdGhlIG51bWJlciBvZiBiYWNrc2xhc2hlcy4gPgorCTplZGl0ICArL1RoZVwgYm9vawkgICAgIGZpbGUKKwk6ZWRpdCAgKy9kaXJcIGRpcm5hbWVcXCAgICAgIGZpbGUKKwk6ZWRpdCAgK3NldFwgZGlyPWM6XFxcXHRlbXAgIGZpbGUKK05vdGUgdGhhdCBpbiB0aGUgbGFzdCBleGFtcGxlIHRoZSBudW1iZXIgb2YgYmFja3NsYXNoZXMgaXMgaGFsdmVkIHR3aWNlOiBPbmNlCitmb3IgdGhlICIrY21kIiBhcmd1bWVudCBhbmQgb25jZSBmb3IgdGhlICI6c2V0IiBjb21tYW5kLgorCisJCQkJCQkJKmZpbGUtZm9ybWF0cyoKK1RoZSAnZmlsZWZvcm1hdCcgb3B0aW9uIHNldHMgdGhlIDxFT0w+IHN0eWxlIGZvciBhIGZpbGU6CisnZmlsZWZvcm1hdCcgICAgY2hhcmFjdGVycwkgICBuYW1lCQkJCX4KKyAgImRvcyIJCTxDUj48Tkw+IG9yIDxOTD4gICBET1MgZm9ybWF0CQkqRE9TLWZvcm1hdCoKKyAgInVuaXgiCTxOTD4JCSAgIFVuaXggZm9ybWF0CQkqVW5peC1mb3JtYXQqCisgICJtYWMiCQk8Q1I+CQkgICBNYWMgZm9ybWF0CQkqTWFjLWZvcm1hdCoKK1ByZXZpb3VzbHkgJ3RleHRtb2RlJyB3YXMgdXNlZC4gIEl0IGlzIG9ic29sZXRlIG5vdy4KKworV2hlbiByZWFkaW5nIGEgZmlsZSwgdGhlIG1lbnRpb25lZCBjaGFyYWN0ZXJzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgPEVPTD4uCitJbiBET1MgZm9ybWF0IChkZWZhdWx0IGZvciBNUy1ET1MsIE9TLzIgYW5kIFdpbjMyKSwgPENSPjxOTD4gYW5kIDxOTD4gYXJlIGJvdGgKK2ludGVycHJldGVkIGFzIHRoZSA8RU9MPi4gIE5vdGUgdGhhdCB3aGVuIHdyaXRpbmcgdGhlIGZpbGUgaW4gRE9TIGZvcm1hdCwKKzxDUj4gY2hhcmFjdGVycyB3aWxsIGJlIGFkZGVkIGZvciBlYWNoIHNpbmdsZSA8Tkw+LiAgQWxzbyBzZWUgfGZpbGUtcmVhZHwuCisKK1doZW4gd3JpdGluZyBhIGZpbGUsIHRoZSBtZW50aW9uZWQgY2hhcmFjdGVycyBhcmUgdXNlZCBmb3IgPEVPTD4uICBGb3IgRE9TCitmb3JtYXQgPENSPjxOTD4gaXMgdXNlZC4gIEFsc28gc2VlIHxET1MtZm9ybWF0LXdyaXRlfC4KKworWW91IGNhbiByZWFkIGEgZmlsZSBpbiBET1MgZm9ybWF0IGFuZCB3cml0ZSBpdCBpbiBVbml4IGZvcm1hdC4gIFRoaXMgd2lsbAorcmVwbGFjZSBhbGwgPENSPjxOTD4gcGFpcnMgYnkgPE5MPiAoYXNzdW1pbmcgJ2ZpbGVmb3JtYXRzJyBpbmNsdWRlcyAiZG9zIik6ID4KKwk6ZSBmaWxlCisJOnNldCBmaWxlZm9ybWF0PXVuaXgKKwk6dworSWYgeW91IHJlYWQgYSBmaWxlIGluIFVuaXggZm9ybWF0IGFuZCB3cml0ZSB3aXRoIERPUyBmb3JtYXQsIGFsbCA8Tkw+CitjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCA8Q1I+PE5MPiAoYXNzdW1pbmcgJ2ZpbGVmb3JtYXRzJyBpbmNsdWRlcworInVuaXgiKTogPgorCTplIGZpbGUKKwk6c2V0IGZpbGVmb3JtYXQ9ZG9zCisJOncKKworSWYgeW91IHN0YXJ0IGVkaXRpbmcgYSBuZXcgZmlsZSBhbmQgdGhlICdmaWxlZm9ybWF0cycgb3B0aW9uIGlzIG5vdCBlbXB0eQorKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgVmltIHdpbGwgdHJ5IHRvIGRldGVjdCB3aGV0aGVyIHRoZSBsaW5lcyBpbiB0aGUgZmlsZQorYXJlIHNlcGFyYXRlZCBieSB0aGUgc3BlY2lmaWVkIGZvcm1hdHMuICBXaGVuIHNldCB0byAidW5peCxkb3MiLCBWaW0gd2lsbAorY2hlY2sgZm9yIGxpbmVzIHdpdGggYSBzaW5nbGUgPE5MPiAoYXMgdXNlZCBvbiBVbml4IGFuZCBBbWlnYSkgb3IgYnkgYSA8Q1I+Cis8Tkw+IHBhaXIgKE1TLURPUykuICBPbmx5IHdoZW4gQUxMIGxpbmVzIGVuZCBpbiA8Q1I+PE5MPiwgJ2ZpbGVmb3JtYXQnIGlzIHNldAordG8gImRvcyIsIG90aGVyd2lzZSBpdCBpcyBzZXQgdG8gInVuaXgiLiAgV2hlbiAnZmlsZWZvcm1hdHMnIGluY2x1ZGVzICJtYWMiLAorYW5kIG5vIDxOTD4gY2hhcmFjdGVycyBhcmUgZm91bmQgaW4gdGhlIGZpbGUsICdmaWxlZm9ybWF0JyBpcyBzZXQgdG8gIm1hYyIuCisKK0lmIHRoZSAnZmlsZWZvcm1hdCcgb3B0aW9uIGlzIHNldCB0byAiZG9zIiBvbiBub24tTVMtRE9TIHN5c3RlbXMgdGhlIG1lc3NhZ2UKKyJbZG9zIGZvcm1hdF0iIGlzIHNob3duIHRvIHJlbWluZCB5b3UgdGhhdCBzb21ldGhpbmcgdW51c3VhbCBpcyBoYXBwZW5pbmcuICBPbgorTVMtRE9TIHN5c3RlbXMgeW91IGdldCB0aGUgbWVzc2FnZSAiW3VuaXggZm9ybWF0XSIgaWYgJ2ZpbGVmb3JtYXQnIGlzIHNldCB0bworInVuaXgiLiAgT24gYWxsIHN5c3RlbXMgYnV0IHRoZSBNYWNpbnRvc2ggeW91IGdldCB0aGUgbWVzc2FnZSAiW21hYyBmb3JtYXRdIgoraWYgJ2ZpbGVmb3JtYXQnIGlzIHNldCB0byAibWFjIi4KKworSWYgdGhlICdmaWxlZm9ybWF0cycgb3B0aW9uIGlzIGVtcHR5IGFuZCBET1MgZm9ybWF0IGlzIHVzZWQsIGJ1dCB3aGlsZSByZWFkaW5nCithIGZpbGUgc29tZSBsaW5lcyBkaWQgbm90IGVuZCBpbiA8Q1I+PE5MPiwgIltDUiBtaXNzaW5nXSIgd2lsbCBiZSBpbmNsdWRlZCBpbgordGhlIGZpbGUgbWVzc2FnZS4KK0lmIHRoZSAnZmlsZWZvcm1hdHMnIG9wdGlvbiBpcyBlbXB0eSBhbmQgTWFjIGZvcm1hdCBpcyB1c2VkLCBidXQgd2hpbGUgcmVhZGluZworYSBmaWxlIGEgPE5MPiB3YXMgZm91bmQsICJbTkwgbWlzc2luZ10iIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbGUgbWVzc2FnZS4KKworSWYgdGhlIG5ldyBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgJ2ZpbGVmb3JtYXQnIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyB1c2VkCit3aGVuICdmaWxlZm9ybWF0cycgaXMgZW1wdHkuICBPdGhlcndpc2UgdGhlIGZpcnN0IGZvcm1hdCBmcm9tICdmaWxlZm9ybWF0cycgaXMKK3VzZWQgZm9yIHRoZSBuZXcgZmlsZS4KKworQmVmb3JlIGVkaXRpbmcgYmluYXJ5LCBleGVjdXRhYmxlIG9yIFZpbSBzY3JpcHQgZmlsZXMgeW91IHNob3VsZCBzZXQgdGhlCisnYmluYXJ5JyBvcHRpb24uICBBIHNpbXBsZSB3YXkgdG8gZG8gdGhpcyBpcyBieSBzdGFydGluZyBWaW0gd2l0aCB0aGUgIi1iIgorb3B0aW9uLiAgVGhpcyB3aWxsIGF2b2lkIHRoZSB1c2Ugb2YgJ2ZpbGVmb3JtYXQnLiAgV2l0aG91dCB0aGlzIHlvdSByaXNrIHRoYXQKK3NpbmdsZSA8Tkw+IGNoYXJhY3RlcnMgYXJlIHVuZXhwZWN0ZWRseSByZXBsYWNlZCB3aXRoIDxDUj48Tkw+LgorCitZb3UgY2FuIGVuY3J5cHQgZmlsZXMgdGhhdCBhcmUgd3JpdHRlbiBieSBzZXR0aW5nIHRoZSAna2V5JyBvcHRpb24uICBUaGlzCitwcm92aWRlcyBzb21lIHNlY3VyaXR5IGFnYWluc3Qgb3RoZXJzIHJlYWRpbmcgeW91ciBmaWxlcy4gfGVuY3J5cHRpb258CisKKworRmlsZSBTZWFyY2hpbmcJCQkJCQkqZmlsZS1zZWFyY2hpbmcqCisKK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtwYXRoX2V4dHJhfCBmZWF0dXJlfQorCitUaGUgZmlsZSBzZWFyY2hpbmcgaXMgY3VycmVudGx5IHVzZWQgZm9yIHRoZSAncGF0aCcsICdjZHBhdGgnIGFuZCAndGFncycKK29wdGlvbnMuICBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mIHNlYXJjaGluZzoKKworMSkgRG93bndhcmQgc2VhcmNoOgorICAgRG93bndhcmQgc2VhcmNoIHVzZXMgdGhlIHdpbGRjYXJkcyAnKicsICcqKicgYW5kIHBvc3NpYmx5IG90aGVycworICAgc3VwcG9ydGVkIGJ5IHlvdXIgb3BlcmF0aW5nIHN5c3RlbS4gJyonIGFuZCAnKionIGFyZSBoYW5kbGVkIGluc2lkZSBWaW0sIHNvCisgICB0aGV5IHdvcmsgb24gYWxsIG9wZXJhdGluZyBzeXN0ZW1zLgorCisgICBUaGUgdXNhZ2Ugb2YgJyonIGlzIHF1aXRlIHNpbXBsZTogSXQgbWF0Y2hlcyAwIG9yIG1vcmUgY2hhcmFjdGVycy4KKworICAgJyoqJyBpcyBtb3JlIHNvcGhpc3RpY2F0ZWQ6CisgICAgICAtIEl0IE9OTFkgbWF0Y2hlcyBkaXJlY3Rvcmllcy4KKyAgICAgIC0gSXQgbWF0Y2hlcyB1cCB0byAzMCAgZGlyZWN0b3JpZXMgZGVlcCwgc28geW91IGNhbiB1c2UgaXQgdG8gc2VhcmNoIGFuCisJZW50aXJlIGRpcmVjdG9yeSB0cmVlCisgICAgICAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsZXZlbHMgbWF0Y2hlZCBjYW4gYmUgZ2l2ZW4gYnkgYXBwZW5kaW5nIGEgbnVtYmVyCisJdG8gJyoqJy4KKwlUaHVzICcvdXNyLyoqMicgY2FuIG1hdGNoOiA+CisJCS91c3IKKwkJL3Vzci9pbmNsdWRlCisJCS91c3IvaW5jbHVkZS9zeXMKKwkJL3Vzci9pbmNsdWRlL2crKworCQkvdXNyL2xpYgorCQkvdXNyL2xpYi9YMTEKKwkJLi4uLgorPAlJdCBkb2VzIE5PVCBtYXRjaCAnL3Vzci9pbmNsdWRlL2crKy9zdGQnIGFzIHRoaXMgd291bGQgYmUgdGhyZWUKKwlsZXZlbHMuCisJVGhlIGFsbG93ZWQgbnVtYmVyIHJhbmdlIGlzIDAgKCcqKjAnIGlzIHJlbW92ZWQpIHRvIDI1NS4KKwlJZiB0aGUgZ2l2ZW4gbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiAwIGl0IGRlZmF1bHRzIHRvIDMwLCBpZiBpdCdzCisJYmlnZ2VyIHRoYW4gMjU1IGl0IGRlZmF1bHRzIHRvIDI1NS4KKyAgICAgIC0gJyoqJyBjYW4gb25seSBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIG9yIGJlIGZvbGxvd2VkIGJ5IGEgcGF0aAorCXNlcGFyYXRvciBvciBieSBhIG51bWJlciBhbmQgYSBwYXRoIHNlcGFyYXRvci4KKworICAgWW91IGNhbiBjb21iaW5lICcqJyBhbmQgJyoqJyBpbiBhbnkgb3JkZXI6ID4KKwkvdXNyLyoqL3N5cy8qCisJL3Vzci8qL3N5cy8qKgorCS91c3IvKioyL3N5cy8qCisKKzIpIFVwd2FyZCBzZWFyY2g6CisgICBIZXJlIHlvdSBjYW4gZ2l2ZSBhIGRpcmVjdG9yeSBhbmQgdGhlbiBzZWFyY2ggdGhlIGRpcmVjdG9yeSB0cmVlIHVwd2FyZCBmb3IKKyAgIGEgZmlsZS4gWW91IGNvdWxkIGdpdmUgc3RvcC1kaXJlY3RvcmllcyB0byBsaW1pdCB0aGUgdXB3YXJkIHNlYXJjaC4gVGhlCisgICBzdG9wLWRpcmVjdG9yaWVzIGFyZSBhcHBlbmRlZCB0byB0aGUgcGF0aCAoZm9yIHRoZSAncGF0aCcgb3B0aW9uKSBvciB0bworICAgdGhlIGZpbGVuYW1lIChmb3IgdGhlICd0YWdzJyBvcHRpb24pIHdpdGggYSAnOycuIElmIHlvdSB3YW50IHNldmVyYWwKKyAgIHN0b3AtZGlyZWN0b3JpZXMgc2VwYXJhdGUgdGhlbSB3aXRoICc7Jy4gSWYgeW91IHdhbnQgbm8gc3RvcC1kaXJlY3RvcnkKKyAgICgic2VhcmNoIHVwd2FyZCB0aWxsIHRoZSByb290IGRpcmVjdG9yeSkganVzdCB1c2UgJzsnLiA+CisJL3Vzci9pbmNsdWRlL3N5czsvdXNyCis8ICAgd2lsbCBzZWFyY2ggaW46ID4KKwkgICAvdXNyL2luY2x1ZGUvc3lzCisJICAgL3Vzci9pbmNsdWRlCisJICAgL3VzcgorPAorICAgSWYgeW91IHVzZSBhIHJlbGF0aXZlIHBhdGggdGhlIHVwd2FyZCBzZWFyY2ggaXMgc3RhcnRlZCBpbiBWaW0ncyBjdXJyZW50CisgICBkaXJlY3Rvcnkgb3IgaW4gdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBmaWxlIChpZiB0aGUgcmVsYXRpdmUgcGF0aAorICAgc3RhcnRzIHdpdGggJy4vJyBhbmQgJ2QnIGlzIG5vdCBpbmNsdWRlZCBpbiAnY3BvcHRpb25zJykuCisKKyAgIElmIFZpbSdzIGN1cnJlbnQgcGF0aCBpcyAvdS91c2VyX3gvd29yay9yZWxlYXNlIGFuZCB5b3UgZG8gPgorCTpzZXQgcGF0aD1pbmNsdWRlOy91L3VzZXJfeAorPCAgYW5kIHRoZW4gc2VhcmNoIGZvciBhIGZpbGUgd2l0aCB8Z2Z8IHRoZSBmaWxlIGlzIHNlYXJjaGVkIGluOiA+CisJL3UvdXNlcl94L3dvcmsvcmVsZWFzZS9pbmNsdWRlCisJL3UvdXNlcl94L3dvcmsvaW5jbHVkZQorCS91L3VzZXJfeC9pbmNsdWRlCisKKzMpIENvbWJpbmVkIHVwL2Rvd253YXJkIHNlYXJjaAorICAgSWYgVmltJ3MgY3VycmVudCBwYXRoIGlzIC91L3VzZXJfeC93b3JrL3JlbGVhc2UgYW5kIHlvdSBkbyA+CisJc2V0IHBhdGg9Kio7L3UvdXNlcl94Cis8ICBhbmQgdGhlbiBzZWFyY2ggZm9yIGEgZmlsZSB3aXRoIHxnZnwgdGhlIGZpbGUgaXMgc2VhcmNoZWQgaW46ID4KKwkvdS91c2VyX3gvd29yay9yZWxlYXNlLyoqCisJL3UvdXNlcl94L3dvcmsvKioKKwkvdS91c2VyX3gvKioKKzwKKyAgIEJFIENBUkVGVUwhIFRoaXMgbWlnaHQgY29uc3VtZSBhIGxvdCBvZiB0aW1lLCBhcyB0aGUgc2VhcmNoIG9mCisgICAnL3UvdXNlcl94LyoqJyBpbmNsdWRlcyAnL3UvdXNlcl94L3dvcmsvKionIGFuZAorICAgJy91L3VzZXJfeC93b3JrL3JlbGVhc2UvKionLiAgU28gJy91L3VzZXJfeC93b3JrL3JlbGVhc2UvKionIGlzIHNlYXJjaGVkCisgICB0aHJlZSBhbmQgJy91L3VzZXJfeC93b3JrLyoqJyBpcyBzZWFyY2hlZCB0d28gdGltZXMuCisKKyAgIEluIHRoZSBhYm92ZSBleGFtcGxlIHlvdSBtaWdodCB3YW50IHRvIHNldCBwYXRoIHRvOiA+CisJOnNldCBwYXRoPSoqLC91L3VzZXJfeC8qKgorPCAgIFRoaXMgc2VhcmNoZXM6ID4KKwkvdS91c2VyX3gvd29yay9yZWxlYXNlLyoqCisJL3UvdXNlcl94LyoqCis8ICAgVGhpcyBzZWFyY2hlcyB0aGUgc2FtZSBkaXJlY3RvcmllcywgYnV0IGluIGEgZGlmZmVyZW50IG9yZGVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIERpYWxvZ3MJCQkJCQkqZWRpdC1kaWFsb2dzKgorCisJCQkJCQkJKjpjb25maXJtKiAqOmNvbmYqCis6Y29uZltpcm1dIHtjb21tYW5kfQlFeGVjdXRlIHtjb21tYW5kfSwgYW5kIHVzZSBhIGRpYWxvZyB3aGVuIGFuCisJCQlvcGVyYXRpb24gaGFzIHRvIGJlIGNvbmZpcm1lZC4gIENhbiBiZSB1c2VkIG9uIHRoZQorCQkJIjpxIiwgIjpxYSIgYW5kICI6dyIgY29tbWFuZHMgKHRoZSBsYXR0ZXIgdG8gb3Zlci1yaWRlCisJCQlhIHJlYWQtb25seSBzZXR0aW5nKS4KKworRXhhbXBsZXM6ID4KKyAgOmNvbmZpcm0gdyBmb28KKzwJV2lsbCBhc2sgZm9yIGNvbmZpcm1hdGlvbiB3aGVuICJmb28iIGFscmVhZHkgZXhpc3RzLiA+CisgIDpjb25maXJtIHEKKzwJV2lsbCBhc2sgZm9yIGNvbmZpcm1hdGlvbiB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzLiA+CisgIDpjb25maXJtIHFhCis8CUlmIGFueSBtb2RpZmllZCwgdW5zYXZlZCBidWZmZXJzIGV4aXN0LCB5b3Ugd2lsbCBiZSBwcm9tcHRlZCB0byBzYXZlCisJb3IgYWJhbmRvbiBlYWNoIG9uZS4gIFRoZXJlIGFyZSBhbHNvIGNob2ljZXMgdG8gInNhdmUgYWxsIiBvciAiYWJhbmRvbgorCWFsbCIuCisKK0lmIHlvdSB3YW50IHRvIGFsd2F5cyB1c2UgIjpjb25maXJtIiwgc2V0IHRoZSAnY29uZmlybScgb3B0aW9uLgorCisJCQkqOmJyb3dzZSogKjpicm8qICpFMzM4KiAqRTYxNCogKkU2MTUqICpFNjE2KiAqRTU3OCoKKzpicm9bd3NlXSB7Y29tbWFuZH0JT3BlbiBhIGZpbGUgc2VsZWN0aW9uIGRpYWxvZyBmb3IgYW4gYXJndW1lbnQgdG8KKwkJCXtjb21tYW5kfS4gIEF0IHByZXNlbnQgdGhpcyB3b3JrcyBmb3IgfDplfCwgfDp3fCwKKwkJCXw6cnwsIHw6c2F2ZWFzfCwgfDpzcHwsIHw6bWtleHJjfCwgfDpta3ZpbXJjfCBhbmQKKwkJCXw6bWtzZXNzaW9ufC4KKwkJCXtvbmx5IGluIFdpbjMyLCBBdGhlbmEsIE1vdGlmLCBHVEsgYW5kIE1hYyBHVUl9CisJCQlXaGVuICI6YnJvd3NlIiBpcyBub3QgcG9zc2libGUgeW91IGdldCBhbiBlcnJvcgorCQkJbWVzc2FnZS4gIElmIHRoZSB8K2Jyb3dzZXwgZmVhdHVyZSBpcyBtaXNzaW5nIG9yIHRoZQorCQkJe2NvbW1hbmR9IGRvZXNuJ3Qgc3VwcG9ydCBicm93c2luZywgdGhlIHtjb21tYW5kfSBpcworCQkJZXhlY3V0ZWQgd2l0aG91dCBhIGRpYWxvZy4KKwkJCSI6YnJvd3NlIHNldCIgd29ya3MgbGlrZSB8Om9wdGlvbnN8LgorCitUaGUgc3ludGF4IGlzIGJlc3Qgc2hvd24gdmlhIHNvbWUgZXhhbXBsZXM6ID4KKwk6YnJvd3NlIGUgJHZpbS9mb28KKzwJCU9wZW4gdGhlIGJyb3dzZXIgaW4gdGhlICR2aW0vZm9vIGRpcmVjdG9yeSwgYW5kIGVkaXQgdGhlCisJCWZpbGUgY2hvc2VuLiA+CisJOmJyb3dzZSBlCis8CQlPcGVuIHRoZSBicm93c2VyIGluIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIHdpdGggJ2Jyb3dzZWRpcicsCisJCWFuZCBlZGl0IHRoZSBmaWxlIGNob3Nlbi4gPgorCTpicm93c2UgdworPAkJT3BlbiB0aGUgYnJvd3NlciBpbiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwKKwkJd2l0aCB0aGUgY3VycmVudCBidWZmZXIgZmlsZW5hbWUgYXMgZGVmYXVsdCwgYW5kIHNhdmUgdGhlCisJCWJ1ZmZlciB1bmRlciB0aGUgZmlsZW5hbWUgY2hvc2VuLiA+CisJOmJyb3dzZSB3IEM6L2JhcgorPAkJT3BlbiB0aGUgYnJvd3NlciBpbiB0aGUgQzovYmFyIGRpcmVjdG9yeSwgd2l0aCB0aGUgY3VycmVudAorCQlidWZmZXIgZmlsZW5hbWUgYXMgZGVmYXVsdCwgYW5kIHNhdmUgdGhlIGJ1ZmZlciB1bmRlciB0aGUKKwkJZmlsZW5hbWUgY2hvc2VuLgorQWxzbyBzZWUgdGhlIHwnYnJvd3NlZGlyJ3wgb3B0aW9uLgorRm9yIHZlcnNpb25zIG9mIFZpbSB3aGVyZSBicm93c2luZyBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgY29tbWFuZCBpcyBleGVjdXRlZAordW5tb2RpZmllZC4KKworCQkJCQkJCSpicm93c2VmaWx0ZXIqCitGb3IgTVMgV2luZG93cywgeW91IGNhbiBtb2RpZnkgdGhlIGZpbHRlcnMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgYnJvd3NlIGRpYWxvZy4KK0J5IHNldHRpbmcgdGhlIGc6YnJvd3NlZmlsdGVyIG9yIGI6YnJvd3NlZmlsdGVyIHZhcmlhYmxlcywgeW91IGNhbiBjaGFuZ2UgdGhlCitmaWx0ZXJzIGdsb2JhbGx5IG9yIGxvY2FsbHkgdG8gdGhlIGJ1ZmZlci4gIFRoZSB2YXJpYWJsZSBpcyBzZXQgdG8gYSBzdHJpbmcgaW4KK3RoZSBmb3JtYXQgIntmaWx0ZXIgbGFiZWx9XHR7cGF0dGVybn07e3BhdHRlcm59XG4iIHdoZXJlIHtmaWx0ZXIgbGFiZWx9IGlzIHRoZQordGV4dCB0aGF0IGFwcGVhcnMgaW4gdGhlICJGaWxlcyBvZiBUeXBlIiBjb21ib0JveCwgYW5kIHtwYXR0ZXJufSBpcyB0aGUKK3BhdHRlcm4gd2hpY2ggZmlsdGVycyB0aGUgZmlsZW5hbWVzLiAgU2V2ZXJhbCBwYXR0ZXJucyBjYW4gYmUgZ2l2ZW4sIHNlcGFyYXRlZAorYnkgJzsnLgorCitGb3IgTW90aWYgdGhlIHNhbWUgZm9ybWF0IGlzIHVzZWQsIGJ1dCBvbmx5IHRoZSB2ZXJ5IGZpcnN0IHBhdHRlcm4gaXMgYWN0dWFsbHkKK3VzZWQgKE1vdGlmIG9ubHkgb2ZmZXJzIG9uZSBwYXR0ZXJuLCBidXQgeW91IGNhbiBlZGl0IGl0KS4KKworRm9yIGV4YW1wbGUsIHRvIGhhdmUgb25seSBWaW0gZmlsZXMgaW4gdGhlIGRpYWxvZywgeW91IGNvdWxkIHVzZSB0aGUgZm9sbG93aW5nCitjb21tYW5kOiA+CisKKyAgICAgbGV0IGc6YnJvd3NlZmlsdGVyPSJWaW0gU2NyaXB0c1x0Ki52aW1cblZpbSBTdGFydHVwIEZpbGVzXHQqdmltcmNcbiIKKworWW91IGNhbiBvdmVycmlkZSB0aGUgZmlsdGVyIHNldHRpbmcgb24gYSBwZXItYnVmZmVyIGJhc2lzIGJ5IHNldHRpbmcgdGhlCitiOmJyb3dzZWZpbHRlciB2YXJpYWJsZS4gIFlvdSB3b3VsZCBtb3N0IGxpa2VseSBzZXQgYjpicm93c2VmaWx0ZXIgaW4gYQorZmlsZXR5cGUgcGx1Z2luLCBzbyB0aGF0IHRoZSBicm93c2UgZGlhbG9nIHdvdWxkIGNvbnRhaW4gZW50cmllcyByZWxhdGVkIHRvCit0aGUgdHlwZSBvZiBmaWxlIHlvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcuICBEaXNhZHZhbnRhZ2U6IFRoaXMgbWFrZXMgaXQKK2RpZmZpY3VsdCB0byBzdGFydCBlZGl0aW5nIGEgZmlsZSBvZiBhIGRpZmZlcmVudCB0eXBlLiAgVG8gb3ZlcmNvbWUgdGhpcywgeW91CittYXkgd2FudCB0byBhZGQgIkFsbCBGaWxlc1x0Ki4qXG4iIGFzIHRoZSBmaW5hbCBmaWx0ZXIsIHNvIHRoYXQgdGhlIHVzZXIgY2FuCitzdGlsbCBhY2Nlc3MgYW55IGRlc2lyZWQgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBUaGUgY3VycmVudCBkaXJlY3RvcnkJCQkJKmN1cnJlbnQtZGlyZWN0b3J5KgorCitZb3UgbWF5IHVzZSB0aGUgfDpjZHwgYW5kIHw6bGNkfCBjb21tYW5kcyB0byBjaGFuZ2UgdG8gYW5vdGhlciBkaXJlY3RvcnksIHNvCit5b3Ugd2lsbCBub3QgaGF2ZSB0byB0eXBlIHRoYXQgZGlyZWN0b3J5IG5hbWUgaW4gZnJvbnQgb2YgdGhlIGZpbGUgbmFtZXMuICBJdAorYWxzbyBtYWtlcyBhIGRpZmZlcmVuY2UgZm9yIGV4ZWN1dGluZyBleHRlcm5hbCBjb21tYW5kcywgZS5nLiAiOiFscyIuCisKKwkJCQkJCQkqOmNkKiAqRTQ3MioKKzpjZAkJCU9uIG5vbi1Vbml4IHN5c3RlbXM6IFByaW50IHRoZSBjdXJyZW50IGRpcmVjdG9yeQorCQkJbmFtZS4gIE9uIFVuaXggc3lzdGVtczogQ2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorCQkJdG8gdGhlIGhvbWUgZGlyZWN0b3J5LiAgVXNlIHw6cHdkfCB0byBwcmludCB0aGUKKwkJCWN1cnJlbnQgZGlyZWN0b3J5IG9uIGFsbCBzeXN0ZW1zLgorCis6Y2Qge3BhdGh9CQlDaGFuZ2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRvIHtwYXRofS4KKwkJCUlmIHtwYXRofSBpcyByZWxhdGl2ZSwgaXQgaXMgc2VhcmNoZWQgZm9yIGluIHRoZQorCQkJZGlyZWN0b3JpZXMgbGlzdGVkIGluIHwnY2RwYXRoJ3wuCisJCQlEb2VzIG5vdCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYW4gYWxyZWFkeSBvcGVuZWQgZmlsZSwKKwkJCWJlY2F1c2UgaXRzIGZ1bGwgcGF0aCBuYW1lIGlzIHJlbWVtYmVyZWQuICBGaWxlcyBmcm9tCisJCQl0aGUgfGFyZ2xpc3R8IG1heSBjaGFuZ2UgdGhvdWdoIQorCQkJT24gTVMtRE9TIHRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBhY3RpdmUgZHJpdmUuCisJCQlUbyBjaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBmaWxlOiA+CisJCQkJOmNkICU6aAorPAorCQkJCQkJCSo6Y2QtKiAqRTE4NioKKzpjZCAtCQkJQ2hhbmdlIHRvIHRoZSBwcmV2aW91cyBjdXJyZW50IGRpcmVjdG9yeSAoYmVmb3JlIHRoZQorCQkJcHJldmlvdXMgIjpjZCB7cGF0aH0iIGNvbW1hbmQpLiB7bm90IGluIFZpfQorCisJCQkJCQkJKjpjaGQqICo6Y2hkaXIqCis6Y2hkW2lyXSBbcGF0aF0JCVNhbWUgYXMgfDpjZHwuCisKKwkJCQkJCQkqOmxjKiAqOmxjZCoKKzpsY1tkXSB7cGF0aH0JCUxpa2UgfDpjZHwsIGJ1dCBvbmx5IHNldCB0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIHRoZQorCQkJY3VycmVudCB3aW5kb3cuICBUaGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIG90aGVyCisJCQl3aW5kb3dzIGlzIG5vdCBjaGFuZ2VkLiB7bm90IGluIFZpfQorCisJCQkJCQkJKjpsY2gqICo6bGNoZGlyKgorOmxjaFtkaXJdCQlTYW1lIGFzIHw6bGNkfC4ge25vdCBpbiBWaX0KKworCQkJCQkJCSo6cHcqICo6cHdkKiAqRTE4NyoKKzpwd1tkXQkJCVByaW50IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBuYW1lLiAge1ZpOiBubyBwd2R9CisJCQlBbHNvIHNlZSB8Z2V0Y3dkKCl8LgorCitTbyBsb25nIGFzIG5vIHw6bGNkfCBjb21tYW5kIGhhcyBiZWVuIHVzZWQsIGFsbCB3aW5kb3dzIHNoYXJlIHRoZSBzYW1lIGN1cnJlbnQKK2RpcmVjdG9yeS4gIFVzaW5nIGEgY29tbWFuZCB0byBqdW1wIHRvIGFub3RoZXIgd2luZG93IGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nCitmb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorV2hlbiBhIHw6bGNkfCBjb21tYW5kIGhhcyBiZWVuIHVzZWQgZm9yIGEgd2luZG93LCB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeQorYmVjb21lcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIHRoYXQgd2luZG93LiAgV2luZG93cyB3aGVyZSB0aGUgfDpsY2R8Citjb21tYW5kIGhhcyBub3QgYmVlbiB1c2VkIHN0aWNrIHRvIHRoZSBnbG9iYWwgY3VycmVudCBkaXJlY3RvcnkuICBXaGVuIGp1bXBpbmcKK3RvIGFub3RoZXIgd2luZG93IHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlY29tZSB0aGUgbGFzdCBzcGVjaWZpZWQgbG9jYWwKK2N1cnJlbnQgZGlyZWN0b3J5LiAgSWYgbm9uZSB3YXMgc3BlY2lmaWVkLCB0aGUgZ2xvYmFsIGN1cnJlbnQgZGlyZWN0b3J5IGlzCit1c2VkLgorV2hlbiBhIHw6Y2R8IGNvbW1hbmQgaXMgdXNlZCwgdGhlIGN1cnJlbnQgd2luZG93IHdpbGwgbG9zZSBoaXMgbG9jYWwgY3VycmVudAorZGlyZWN0b3J5IGFuZCB3aWxsIHVzZSB0aGUgZ2xvYmFsIGN1cnJlbnQgZGlyZWN0b3J5IGZyb20gbm93IG9uLgorCitBZnRlciB1c2luZyB8OmNkfCB0aGUgZnVsbCBwYXRoIG5hbWUgd2lsbCBiZSB1c2VkIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCitmaWxlcy4gIE9uIHNvbWUgbmV0d29ya2VkIGZpbGUgc3lzdGVtcyB0aGlzIG1heSBjYXVzZSBwcm9ibGVtcy4gIFRoZSByZXN1bHQgb2YKK3VzaW5nIHRoZSBmdWxsIHBhdGggbmFtZSBpcyB0aGF0IHRoZSBmaWxlIG5hbWVzIGN1cnJlbnRseSBpbiB1c2Ugd2lsbCByZW1haW4KK3JlZmVycmluZyB0byB0aGUgc2FtZSBmaWxlLiAgRXhhbXBsZTogSWYgeW91IGhhdmUgYSBmaWxlIGE6dGVzdCBhbmQgYQorZGlyZWN0b3J5IGE6dmltIHRoZSBjb21tYW5kcyAiOmUgdGVzdCIgIjpjZCB2aW0iICI6dyIgd2lsbCBvdmVyd3JpdGUgdGhlIGZpbGUKK2E6dGVzdCBhbmQgbm90IHdyaXRlIGE6dmltL3Rlc3QuICBCdXQgaWYgeW91IGRvICI6dyB0ZXN0IiB0aGUgZmlsZSBhOnZpbS90ZXN0Cit3aWxsIGJlIHdyaXR0ZW4sIGJlY2F1c2UgeW91IGdhdmUgYSBuZXcgZmlsZSBuYW1lIGFuZCBkaWQgbm90IHJlZmVyIHRvIGEKK2ZpbGVuYW1lIGJlZm9yZSB0aGUgIjpjZCIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gVGhlIGFyZ3VtZW50IGxpc3QJCQkJKmFyZ3VtZW50LWxpc3QqICphcmdsaXN0KgorCitJZiB5b3UgZ2l2ZSBtb3JlIHRoYW4gb25lIGZpbGUgbmFtZSB3aGVuIHN0YXJ0aW5nIFZpbSwgdGhpcyBsaXN0IGlzIHJlbWVtYmVyZWQKK2FzIHRoZSBhcmd1bWVudCBsaXN0LiAgWW91IGNhbiBqdW1wIHRvIGVhY2ggZmlsZSBpbiB0aGlzIGxpc3QuCisKK0RvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgYnVmZmVyIGxpc3QsIHdoaWNoIHlvdSBjYW4gc2VlIHdpdGggdGhlCit8OmJ1ZmZlcnN8IGNvbW1hbmQuICBUaGUgYXJndW1lbnQgbGlzdCB3YXMgYWxyZWFkeSBwcmVzZW50IGluIFZpLCB0aGUgYnVmZmVyCitsaXN0IGlzIG5ldyBpbiBWaW0uICBBIGZpbGUgbmFtZSBpbiB0aGUgYXJndW1lbnQgbGlzdCB3aWxsIGFsc28gYmUgcHJlc2VudCBpbgordGhlIGJ1ZmZlciBsaXN0ICh1bmxlc3MgaXQgd2FzIGRlbGV0ZWQgd2l0aCAiOmJkZWwiKS4KKworVGhpcyBzdWJqZWN0IGlzIGludHJvZHVjZWQgaW4gc2VjdGlvbiB8MDcuMnwgb2YgdGhlIHVzZXIgbWFudWFsLgorCitUaGVyZSBpcyBvbmUgZ2xvYmFsIGFyZ3VtZW50IGxpc3QsIHdoaWNoIGlzIHVzZWQgZm9yIGFsbCB3aW5kb3dzIGJ5IGRlZmF1bHQuCitJdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgYSBuZXcgYXJndW1lbnQgbGlzdCBsb2NhbCB0byBhIHdpbmRvdywgc2VlCit8OmFyZ2xvY2FsfC4KKworWW91IGNhbiB1c2UgdGhlIGFyZ3VtZW50IGxpc3Qgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLCBhbmQgd2l0aCB0aGUKK2V4cHJlc3Npb24gZnVuY3Rpb25zIHxhcmdjKCl8IGFuZCB8YXJndigpfC4gIFRoZXNlIGFsbCB3b3JrIG9uIHRoZSBhcmd1bWVudAorbGlzdCBvZiB0aGUgY3VycmVudCB3aW5kb3cuCisKKwkJCQkJCQkqOmFyKiAqOmFyZ3MqCis6YXJbZ3NdCQkJUHJpbnQgdGhlIGFyZ3VtZW50IGxpc3QsIHdpdGggdGhlIGN1cnJlbnQgZmlsZSBpbgorCQkJc3F1YXJlIGJyYWNrZXRzLgorCis6YXJbZ3NdIFsrK29wdF0gWytjbWRdIHthcmdsaXN0fQkJCSo6YXJnc19mKgorCQkJRGVmaW5lIHthcmdsaXN0fSBhcyB0aGUgbmV3IGFyZ3VtZW50IGxpc3QgYW5kIGVkaXQKKwkJCXRoZSBmaXJzdCBvbmUuICBUaGlzIGZhaWxzIHdoZW4gY2hhbmdlcyBoYXZlIGJlZW4gbWFkZQorCQkJYW5kIFZpbSBkb2VzIG5vdCB3YW50IHRvIHxhYmFuZG9ufCB0aGUgY3VycmVudCBidWZmZXIuCisJCQlBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisJCQl7Vmk6IG5vICsrb3B0fQorCis6YXJbZ3NdISBbKytvcHRdIFsrY21kXSB7YXJnbGlzdH0JCQkqOmFyZ3NfZiEqCisJCQlEZWZpbmUge2FyZ2xpc3R9IGFzIHRoZSBuZXcgYXJndW1lbnQgbGlzdCBhbmQgZWRpdAorCQkJdGhlIGZpcnN0IG9uZS4gIERpc2NhcmQgYW55IGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQKKwkJCWJ1ZmZlci4KKwkJCUFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKwkJCXtWaTogbm8gKytvcHR9CisKKzpbY291bnRdYXJnZVtkaXRdWyFdIFsrK29wdF0gWytjbWRdIHtuYW1lfQkJKjphcmdlKiAqOmFyZ2VkaXQqCisJCQlBZGQge25hbWV9IHRvIHRoZSBhcmd1bWVudCBsaXN0IGFuZCBlZGl0IGl0LgorCQkJV2hlbiB7bmFtZX0gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGFyZ3VtZW50IGxpc3QsIHRoaXMKKwkJCWVudHJ5IGlzIGVkaXRlZC4KKwkJCVRoaXMgaXMgbGlrZSB1c2luZyB8OmFyZ2FkZHwgYW5kIHRoZW4gfDplZGl0fC4KKwkJCU5vdGUgdGhhdCBvbmx5IG9uZSBmaWxlIG5hbWUgaXMgYWxsb3dlZCwgYW5kIHNwYWNlcworCQkJaW5zaWRlIHRoZSBmaWxlIG5hbWUgYXJlIGFsbG93ZWQsIGxpa2Ugd2l0aCB8OmVkaXR8LgorCQkJW2NvdW50XSBpcyB1c2VkIGxpa2Ugd2l0aCB8OmFyZ2FkZHwuCisJCQlbIV0gaXMgcmVxdWlyZWQgaWYgdGhlIGN1cnJlbnQgZmlsZSBjYW5ub3QgYmUKKwkJCXxhYmFuZG9ufGVkLgorCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCQkJe25vdCBpbiBWaX0KKworOltjb3VudF1hcmdhW2RkXSB7bmFtZX0gLi4JCQkqOmFyZ2EqICo6YXJnYWRkKiAqRTQ3OSoKKwkJCUFkZCB0aGUge25hbWV9cyB0byB0aGUgYXJndW1lbnQgbGlzdC4KKwkJCUlmIFtjb3VudF0gaXMgb21pdHRlZCwgdGhlIHtuYW1lfXMgYXJlIGFkZGVkIGp1c3QKKwkJCWFmdGVyIHRoZSBjdXJyZW50IGVudHJ5IGluIHRoZSBhcmd1bWVudCBsaXN0LgorCQkJT3RoZXJ3aXNlIHRoZXkgYXJlIGFkZGVkIGFmdGVyIHRoZSBbY291bnRdJ3RoIGZpbGUuCisJCQlJZiB0aGUgYXJndW1lbnQgbGlzdCBpcyAiYSBiIGMiLCBhbmQgImIiIGlzIHRoZQorCQkJY3VycmVudCBhcmd1bWVudCwgdGhlbiB0aGVzZSBjb21tYW5kcyByZXN1bHQgaW46CisJCQkJY29tbWFuZAkJbmV3IGFyZ3VtZW50IGxpc3QgfgorCQkJCTphcmdhZGQgeAlhIGIgeCBjCisJCQkJOjBhcmdhZGQgeAl4IGEgYiBjCisJCQkJOjFhcmdhZGQgeAlhIHggYiBjCisJCQkJOjk5YXJnYWRkIHgJYSBiIGMgeAorCQkJVGhlcmUgaXMgbm8gY2hlY2sgZm9yIGR1cGxpY2F0ZXMsIGl0IGlzIHBvc3NpYmxlIHRvCisJCQlhZGQgYSBmaWxlIHRvIHRoZSBhcmd1bWVudCBsaXN0IHR3aWNlLgorCQkJVGhlIGN1cnJlbnRseSBlZGl0ZWQgZmlsZSBpcyBub3QgY2hhbmdlZC4KKwkJCXtub3QgaW4gVml9IHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrbGlzdGNtZHN8IGZlYXR1cmV9CisJCQlOb3RlOiB5b3UgY2FuIGFsc28gdXNlIHRoaXMgbWV0aG9kOiA+CisJCQkJOmFyZ3MgIyMgeAorPAkJCVRoaXMgd2lsbCBhZGQgdGhlICJ4IiBpdGVtIGFuZCBzb3J0IHRoZSBuZXcgbGlzdC4KKworOmFyZ2RbZWxldGVdIHtwYXR0ZXJufSAuLgkJCSo6YXJnZCogKjphcmdkZWxldGUqICpFNDgwKgorCQkJRGVsZXRlIGZpbGVzIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QgdGhhdCBtYXRjaCB0aGUKKwkJCXtwYXR0ZXJufXMuICB7cGF0dGVybn0gaXMgdXNlZCBsaWtlIGEgZmlsZSBwYXR0ZXJuLAorCQkJc2VlIHxmaWxlLXBhdHRlcm58LiAgIiUiIGNhbiBiZSB1c2VkIHRvIGRlbGV0ZSB0aGUKKwkJCWN1cnJlbnQgZW50cnkuCisJCQlUaGlzIGNvbW1hbmQga2VlcHMgdGhlIGN1cnJlbnRseSBlZGl0ZWQgZmlsZSwgYWxzbworCQkJd2hlbiBpdCdzIGRlbGV0ZWQgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4KKwkJCXtub3QgaW4gVml9IHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrbGlzdGNtZHN8IGZlYXR1cmV9CisKKzp7cmFuZ2V9YXJnZFtlbGV0ZV0JRGVsZXRlIHRoZSB7cmFuZ2V9IGZpbGVzIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QuCisJCQlXaGVuIHRoZSBsYXN0IG51bWJlciBpbiB0aGUgcmFuZ2UgaXMgdG9vIGhpZ2gsIHVwIHRvCisJCQl0aGUgbGFzdCBhcmd1bWVudCBpcyBkZWxldGVkLiAgRXhhbXBsZTogPgorCQkJCToxMCwxMDAwYXJnZGVsCis8CQkJRGVsZXRlcyBhcmd1bWVudHMgMTAgYW5kIGZ1cnRoZXIsIGtlZXBpbmcgMS05LgorCQkJe25vdCBpbiBWaX0ge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtsaXN0Y21kc3wgZmVhdHVyZX0KKworCQkJCQkJCSo6YXJndSogKjphcmd1bWVudCoKKzpbY291bnRdYXJndVttZW50XSBbY291bnRdIFsrK29wdF0gWytjbWRdCisJCQlFZGl0IGZpbGUgW2NvdW50XSBpbiB0aGUgYXJndW1lbnQgbGlzdC4gIFdoZW4gW2NvdW50XQorCQkJaXMgb21pdHRlZCB0aGUgY3VycmVudCBlbnRyeSBpcyB1c2VkLiAgVGhpcyBmYWlscworCQkJd2hlbiBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGFuZCBWaW0gZG9lcyBub3Qgd2FudCB0bworCQkJfGFiYW5kb258IHRoZSBjdXJyZW50IGJ1ZmZlci4KKwkJCUFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKwkJCXtub3QgaW4gVml9IHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrbGlzdGNtZHN8IGZlYXR1cmV9CisKKzpbY291bnRdYXJndVttZW50XSEgW2NvdW50XSBbKytvcHRdIFsrY21kXQorCQkJRWRpdCBmaWxlIFtjb3VudF0gaW4gdGhlIGFyZ3VtZW50IGxpc3QsIGRpc2NhcmQgYW55CisJCQljaGFuZ2VzIHRvIHRoZSBjdXJyZW50IGJ1ZmZlci4gIFdoZW4gW2NvdW50XSBpcworCQkJb21pdHRlZCB0aGUgY3VycmVudCBlbnRyeSBpcyB1c2VkLgorCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCQkJe25vdCBpbiBWaX0ge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtsaXN0Y21kc3wgZmVhdHVyZX0KKworOltjb3VudF1uW2V4dF0gWysrb3B0XSBbK2NtZF0JCQkqOm4qICo6bmUqICo6bmV4dCogKkUxNjUqICpFMTYzKgorCQkJRWRpdCBbY291bnRdIG5leHQgZmlsZS4gIFRoaXMgZmFpbHMgd2hlbiBjaGFuZ2VzIGhhdmUKKwkJCWJlZW4gbWFkZSBhbmQgVmltIGRvZXMgbm90IHdhbnQgdG8gfGFiYW5kb258IHRoZQorCQkJY3VycmVudCBidWZmZXIuICBBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuICB7Vmk6IG5vCisJCQljb3VudCBvciArK29wdH0uCisKKzpbY291bnRdbltleHRdISBbKytvcHRdIFsrY21kXQorCQkJRWRpdCBbY291bnRdIG5leHQgZmlsZSwgZGlzY2FyZCBhbnkgY2hhbmdlcyB0byB0aGUKKwkJCWJ1ZmZlci4gIEFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4gIHtWaTogbm8gY291bnQKKwkJCW9yICsrb3B0fS4KKworOm5bZXh0XSBbKytvcHRdIFsrY21kXSB7YXJnbGlzdH0JCQkqOm5leHRfZioKKwkJCVNhbWUgYXMgfDphcmdzX2Z8LgorCis6bltleHRdISBbKytvcHRdIFsrY21kXSB7YXJnbGlzdH0KKwkJCVNhbWUgYXMgfDphcmdzX2YhfC4KKworOltjb3VudF1OW2V4dF0gW2NvdW50XSBbKytvcHRdIFsrY21kXQkJCSo6TmV4dCogKjpOKiAqRTE2NCoKKwkJCUVkaXQgW2NvdW50XSBwcmV2aW91cyBmaWxlIGluIGFyZ3VtZW50IGxpc3QuICBUaGlzCisJCQlmYWlscyB3aGVuIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgYW5kIFZpbSBkb2VzIG5vdAorCQkJd2FudCB0byB8YWJhbmRvbnwgdGhlIGN1cnJlbnQgYnVmZmVyLgorCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LiAge1ZpOiBubyBjb3VudCBvciArK29wdH0uCisKKzpbY291bnRdTltleHRdISBbY291bnRdIFsrK29wdF0gWytjbWRdCisJCQlFZGl0IFtjb3VudF0gcHJldmlvdXMgZmlsZSBpbiBhcmd1bWVudCBsaXN0LiAgRGlzY2FyZAorCQkJYW55IGNoYW5nZXMgdG8gdGhlIGJ1ZmZlci4gIEFsc28gc2VlIHwrK29wdHwgYW5kCisJCQl8K2NtZHwuICB7Vmk6IG5vIGNvdW50IG9yICsrb3B0fS4KKworOltjb3VudF1wcmV2W2lvdXNdIFtjb3VudF0gWysrb3B0XSBbK2NtZF0JCSo6cHJldiogKjpwcmV2aW91cyoKKwkJCVNhbWUgYXMgOk5leHQuICBBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuICB7Vmk6CisJCQlvbmx5IGluIHNvbWUgdmVyc2lvbnN9CisKKwkJCQkJCQkqOnJldyogKjpyZXdpbmQqCis6cmV3W2luZF0gWysrb3B0XSBbK2NtZF0KKwkJCVN0YXJ0IGVkaXRpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisJCQlUaGlzIGZhaWxzIHdoZW4gY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSBhbmQgVmltIGRvZXMKKwkJCW5vdCB3YW50IHRvIHxhYmFuZG9ufCB0aGUgY3VycmVudCBidWZmZXIuCisJCQlBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuIHtWaTogbm8gKytvcHR9CisKKzpyZXdbaW5kXSEgWysrb3B0XSBbK2NtZF0KKwkJCVN0YXJ0IGVkaXRpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisJCQlEaXNjYXJkIGFueSBjaGFuZ2VzIHRvIHRoZSBidWZmZXIuICBBbHNvIHNlZSB8KytvcHR8CisJCQlhbmQgfCtjbWR8LiB7Vmk6IG5vICsrb3B0fQorCisJCQkJCQkJKjpmaXIqICo6Zmlyc3QqCis6ZmlyW3N0XVshXSBbKytvcHRdIFsrY21kXQorCQkJT3RoZXIgbmFtZSBmb3IgIjpyZXdpbmQiLiB7bm90IGluIFZpfQorCisJCQkJCQkJKjpsYSogKjpsYXN0KgorOmxhW3N0XSBbKytvcHRdIFsrY21kXQorCQkJU3RhcnQgZWRpdGluZyB0aGUgbGFzdCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0LgorCQkJVGhpcyBmYWlscyB3aGVuIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgYW5kIFZpbSBkb2VzCisJCQlub3Qgd2FudCB0byB8YWJhbmRvbnwgdGhlIGN1cnJlbnQgYnVmZmVyLgorCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LiAge25vdCBpbiBWaX0KKworOmxhW3N0XSEgWysrb3B0XSBbK2NtZF0KKwkJCVN0YXJ0IGVkaXRpbmcgdGhlIGxhc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdC4KKwkJCURpc2NhcmQgYW55IGNoYW5nZXMgdG8gdGhlIGJ1ZmZlci4gIEFsc28gc2VlIHwrK29wdHwKKwkJCWFuZCB8K2NtZHwuICB7bm90IGluIFZpfQorCisJCQkJCQkJKjp3biogKjp3bmV4dCoKKzpbY291bnRdd25bZXh0XSBbKytvcHRdIFsrY21kXQorCQkJV3JpdGUgY3VycmVudCBmaWxlIGFuZCBzdGFydCBlZGl0aW5nIHRoZSBbY291bnRdCisJCQluZXh0IGZpbGUuICBBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuICB7bm90IGluIFZpfQorCis6W2NvdW50XXduW2V4dF0gWysrb3B0XSBbK2NtZF0ge2ZpbGV9CisJCQlXcml0ZSBjdXJyZW50IGZpbGUgdG8ge2ZpbGV9IGFuZCBzdGFydCBlZGl0aW5nIHRoZQorCQkJW2NvdW50XSBuZXh0IGZpbGUsIHVubGVzcyB7ZmlsZX0gYWxyZWFkeSBleGlzdHMgYW5kCisJCQl0aGUgJ3dyaXRlYW55JyBvcHRpb24gaXMgb2ZmLiAgQWxzbyBzZWUgfCsrb3B0fCBhbmQKKwkJCXwrY21kfC4gIHtub3QgaW4gVml9CisKKzpbY291bnRdd25bZXh0XSEgWysrb3B0XSBbK2NtZF0ge2ZpbGV9CisJCQlXcml0ZSBjdXJyZW50IGZpbGUgdG8ge2ZpbGV9IGFuZCBzdGFydCBlZGl0aW5nIHRoZQorCQkJW2NvdW50XSBuZXh0IGZpbGUuICBBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuICB7bm90CisJCQlpbiBWaX0KKworOltjb3VudF13TltleHRdWyFdIFsrK29wdF0gWytjbWRdIFtmaWxlXQkJKjp3TiogKjp3TmV4dCoKKzpbY291bnRdd3BbcmV2b3VzXVshXSBbKytvcHRdIFsrY21kXSBbZmlsZV0JCSo6d3AqICo6d3ByZXZpb3VzKgorCQkJU2FtZSBhcyA6d25leHQsIGJ1dCBnbyB0byBwcmV2aW91cyBmaWxlIGluc3RlYWQgb2YKKwkJCW5leHQuICB7bm90IGluIFZpfQorCitUaGUgW2NvdW50XSBpbiB0aGUgY29tbWFuZHMgYWJvdmUgZGVmYXVsdHMgdG8gb25lLiAgRm9yIHNvbWUgY29tbWFuZHMgaXQgaXMKK3Bvc3NpYmxlIHRvIHVzZSB0d28gY291bnRzLiAgVGhlIGxhc3Qgb25lIChyaWdodG1vc3Qgb25lKSBpcyB1c2VkLgorCitJZiBubyBbK2NtZF0gYXJndW1lbnQgaXMgcHJlc2VudCwgdGhlIGN1cnNvciBpcyBwb3NpdGlvbmVkIGF0IHRoZSBsYXN0IGtub3duCitjdXJzb3IgcG9zaXRpb24gZm9yIHRoZSBmaWxlLiAgSWYgJ3N0YXJ0b2ZsaW5lJyBpcyBzZXQsIHRoZSBjdXJzb3Igd2lsbCBiZQorcG9zaXRpb25lZCBhdCB0aGUgZmlyc3Qgbm9uLWJsYW5rIGluIHRoZSBsaW5lLCBvdGhlcndpc2UgdGhlIGxhc3Qga25vdyBjb2x1bW4KK2lzIHVzZWQuICBJZiB0aGVyZSBpcyBubyBsYXN0IGtub3duIGN1cnNvciBwb3NpdGlvbiB0aGUgY3Vyc29yIHdpbGwgYmUgaW4gdGhlCitmaXJzdCBsaW5lICh0aGUgbGFzdCBsaW5lIGluIEV4IG1vZGUpLgorCitUaGUgd2lsZGNhcmRzIGluIHRoZSBhcmd1bWVudCBsaXN0IGFyZSBleHBhbmRlZCBhbmQgdGhlIGZpbGUgbmFtZXMgYXJlIHNvcnRlZC4KK1RodXMgeW91IGNhbiB1c2UgdGhlIGNvbW1hbmQgInZpbSAqLmMiIHRvIGVkaXQgYWxsIHRoZSBDIGZpbGVzLiAgRnJvbSB3aXRoaW4KK1ZpbSB0aGUgY29tbWFuZCAiOm4gKi5jIiBkb2VzIHRoZSBzYW1lLiAgT24gVW5peCB5b3UgY2FuIGFsc28gdXNlIGJhY2t0aWNrcywKK2ZvciBleGFtcGxlOiA+CisJOm4gYGZpbmQgLiAtbmFtZSBcXCouYyAtcHJpbnRgCitUaGUgYmFja3NsYXNoZXMgYmVmb3JlIHRoZSBzdGFyIGFyZSByZXF1aXJlZCB0byBwcmV2ZW50ICIqLmMiIHRvIGJlIGV4cGFuZGVkCitieSB0aGUgc2hlbGwgYmVmb3JlIGV4ZWN1dGluZyB0aGUgZmluZCBwcm9ncmFtLgorCisJCQkJCQkJKmFyZ2xpc3QtcG9zaXRpb24qCitXaGVuIHRoZXJlIGlzIGFuIGFyZ3VtZW50IGxpc3QgeW91IGNhbiBzZWUgd2hpY2ggZmlsZSB5b3UgYXJlIGVkaXRpbmcgaW4gdGhlCit0aXRsZSBvZiB0aGUgd2luZG93IChpZiB0aGVyZSBpcyBvbmUgYW5kICd0aXRsZScgaXMgb24pIGFuZCB3aXRoIHRoZSBmaWxlCittZXNzYWdlIHlvdSBnZXQgd2l0aCB0aGUgIkNUUkwtRyIgY29tbWFuZC4gIFlvdSB3aWxsIHNlZSBzb21ldGhpbmcgbGlrZQorCShmaWxlIDQgb2YgMTEpCitJZiAnc2hvcnRtZXNzJyBjb250YWlucyAnZicgaXQgd2lsbCBiZQorCSg0IG9mIDExKQorSWYgeW91IGFyZSBub3QgcmVhbGx5IGVkaXRpbmcgdGhlIGZpbGUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGFyZ3VtZW50CitsaXN0IGl0IHdpbGwgYmUKKwkoZmlsZSAoNCkgb2YgMTEpCitUaGlzIG1lYW5zIHRoYXQgeW91IGFyZSBwb3NpdGlvbiA0IGluIHRoZSBhcmd1bWVudCBsaXN0LCBidXQgbm90IGVkaXRpbmcgdGhlCitmb3VydGggZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdC4gIFRoaXMgaGFwcGVucyB3aGVuIHlvdSBkbyAiOmUgZmlsZSIuCisKKworTE9DQUwgQVJHVU1FTlQgTElTVAorCit7bm90IGluIFZpfQore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3dpbmRvd3N8IG9yIHwrbGlzdGNtZHN8IGZlYXR1cmV9CisKKwkJCQkJCQkqOmFyZ2xvY2FsKgorOmFyZ2xbb2NhbF0JCU1ha2UgYSBsb2NhbCBjb3B5IG9mIHRoZSBnbG9iYWwgYXJndW1lbnQgbGlzdC4KKwkJCURvZXNuJ3Qgc3RhcnQgZWRpdGluZyBhbm90aGVyIGZpbGUuCisKKzphcmdsW29jYWxdWyFdIFsrK29wdF0gWytjbWRdIHthcmdsaXN0fQorCQkJRGVmaW5lIGEgbmV3IGFyZ3VtZW50IGxpc3QsIHdoaWNoIGlzIGxvY2FsIHRvIHRoZQorCQkJY3VycmVudCB3aW5kb3cuICBXb3JrcyBsaWtlIHw6YXJnc19mfCBvdGhlcndpc2UuCisKKwkJCQkJCQkqOmFyZ2dsb2JhbCoKKzphcmdnW2xvYmFsXQkJVXNlIHRoZSBnbG9iYWwgYXJndW1lbnQgbGlzdCBmb3IgdGhlIGN1cnJlbnQgd2luZG93LgorCQkJRG9lc24ndCBzdGFydCBlZGl0aW5nIGFub3RoZXIgZmlsZS4KKworOmFyZ2dbbG9iYWxdWyFdIFsrK29wdF0gWytjbWRdIHthcmdsaXN0fQorCQkJVXNlIHRoZSBnbG9iYWwgYXJndW1lbnQgbGlzdCBmb3IgdGhlIGN1cnJlbnQgd2luZG93LgorCQkJRGVmaW5lIGEgbmV3IGdsb2JhbCBhcmd1bWVudCBsaXN0IGxpa2UgfDphcmdzX2Z8LgorCQkJQWxsIHdpbmRvd3MgdXNpbmcgdGhlIGdsb2JhbCBhcmd1bWVudCBsaXN0IHdpbGwgc2VlCisJCQl0aGlzIG5ldyBsaXN0LgorCitUaGVyZSBjYW4gYmUgc2V2ZXJhbCBhcmd1bWVudCBsaXN0cy4gIFRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHdpbmRvd3MuCitXaGVuIHRoZXkgYXJlIHNoYXJlZCwgY2hhbmdpbmcgdGhlIGFyZ3VtZW50IGxpc3QgaW4gb25lIHdpbmRvdyB3aWxsIGFsc28KK2NoYW5nZSBpdCBpbiB0aGUgb3RoZXIgd2luZG93LgorCitXaGVuIGEgd2luZG93IGlzIHNwbGl0IHRoZSBuZXcgd2luZG93IGluaGVyaXRzIHRoZSBhcmd1bWVudCBsaXN0IGZyb20gdGhlCitjdXJyZW50IHdpbmRvdy4gIFRoZSB0d28gd2luZG93cyB0aGVuIHNoYXJlIHRoaXMgbGlzdCwgdW50aWwgb25lIG9mIHRoZW0gdXNlcworfDphcmdsb2NhbHwgb3IgfDphcmdnbG9iYWx8IHRvIHVzZSBhbm90aGVyIGFyZ3VtZW50IGxpc3QuCisKKworVVNJTkcgVEhFIEFSR1VNRU5UIExJU1QKKworCQkJCQkJKjphcmdkbyoKKzphcmdkb1shXSB7Y21kfQkJRXhlY3V0ZSB7Y21kfSBmb3IgZWFjaCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0LgorCQkJSXQgd29ya3MgbGlrZSBkb2luZyB0aGlzOiA+CisJCQkJOnJld2luZAorCQkJCTp7Y21kfQorCQkJCTpuZXh0CisJCQkJOntjbWR9CisJCQkJZXRjLgorPAkJCVdoZW4gdGhlIGN1cnJlbnQgZmlsZSBjYW4ndCBiZSB8YWJhbmRvbnxlZCBhbmQgdGhlIFshXQorCQkJaXMgbm90IHByZXNlbnQsIHRoZSBjb21tYW5kIGZhaWxzLgorCQkJV2hlbiBhbiBlcnJvciBpcyBkZXRlY3RlZCBvbiBvbmUgZmlsZSwgZnVydGhlciBmaWxlcworCQkJaW4gdGhlIGFyZ3VtZW50IGxpc3Qgd2lsbCBub3QgYmUgdmlzaXRlZC4KKwkJCVRoZSBsYXN0IGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QgKG9yIHdoZXJlIGFuIGVycm9yCisJCQlvY2N1cnJlZCkgYmVjb21lcyB0aGUgY3VycmVudCBmaWxlLgorCQkJe2NtZH0gY2FuIGNvbnRhaW4gJ3wnIHRvIGNvbmNhdGVuYXRlIHNldmVyYWwgY29tbWFuZHMuCisJCQl7Y21kfSBtdXN0IG5vdCBjaGFuZ2UgdGhlIGFyZ3VtZW50IGxpc3QuCisJCQlOb3RlOiBXaGlsZSB0aGlzIGNvbW1hbmQgaXMgZXhlY3V0aW5nLCB0aGUgU3ludGF4CisJCQlhdXRvY29tbWFuZCBldmVudCBpcyBkaXNhYmxlZCBieSBhZGRpbmcgaXQgdG8KKwkJCSdldmVudGlnbm9yZScuICBUaGlzIGNvbnNpZGVyYWJseSBzcGVlZHMgdXAgZWRpdGluZworCQkJZWFjaCBmaWxlLgorCQkJe25vdCBpbiBWaX0ge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtsaXN0Y21kc3wgZmVhdHVyZX0KKwkJCUFsc28gc2VlIHw6d2luZG98IGFuZCB8OmJ1ZmRvfC4KKworRXhhbXBsZTogPgorCTphcmdzICouYworCTphcmdkbyBzZXQgZmY9dW5peCB8IHVwZGF0ZQorVGhpcyBzZXRzIHRoZSAnZmlsZWZvcm1hdCcgb3B0aW9uIHRvICJ1bml4IiBhbmQgd3JpdGVzIHRoZSBmaWxlIGlmIGlzIG5vdworY2hhbmdlZC4gIFRoaXMgaXMgZG9uZSBmb3IgYWxsICouYyBmaWxlcy4KKworRXhhbXBsZTogPgorCTphcmdzICouW2NoXQorCTphcmdkbyAlcy9cPG15X2Zvb1w+L015X0Zvby9nZSB8IHVwZGF0ZQorVGhpcyBjaGFuZ2VzIHRoZSB3b3JkICJteV9mb28iIHRvICJNeV9Gb28iIGluIGFsbCAqLmMgYW5kICouaCBmaWxlcy4gIFRoZSAiZSIKK2ZsYWcgaXMgdXNlZCBmb3IgdGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZCB0byBhdm9pZCBhbiBlcnJvciBmb3IgZmlsZXMgd2hlcmUKKyJteV9mb28iIGlzbid0IHVzZWQuICAiOnVwZGF0ZSIgd3JpdGVzIHRoZSBmaWxlIG9ubHkgaWYgY2hhbmdlcyB3ZXJlIG1hZGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gV3JpdGluZwkJCQkJKndyaXRpbmcqICpzYXZlLWZpbGUqCisKK05vdGU6IFdoZW4gdGhlICd3cml0ZScgb3B0aW9uIGlzIG9mZiwgeW91IGFyZSBub3QgYWJsZSB0byB3cml0ZSBhbnkgZmlsZS4KKworCQkJCQkJCSo6dyogKjp3cml0ZSoKKwkJCQkJCSpFNTAyKiAqRTUwMyogKkU1MDQqICpFNTA1KgorCQkJCQkJKkU1MTIqICpFNTE0KiAqRTY2NyoKKzp3W3JpdGVdCQlXcml0ZSB0aGUgd2hvbGUgYnVmZmVyIHRvIHRoZSBjdXJyZW50IGZpbGUuICBUaGlzIGlzCisJCQl0aGUgbm9ybWFsIHdheSB0byBzYXZlIGNoYW5nZXMgdG8gYSBmaWxlLiAgSXQgZmFpbHMKKwkJCXdoZW4gdGhlICdyZWFkb25seScgb3B0aW9uIGlzIHNldCBvciB3aGVuIHRoZXJlIGlzCisJCQlhbm90aGVyIHJlYXNvbiB3aHkgdGhlIGZpbGUgY2FuJ3QgYmUgd3JpdHRlbi4KKworOndbcml0ZV0hCQlMaWtlICI6d3JpdGUiLCBidXQgZm9yY2VmdWxseSB3cml0ZSB3aGVuICdyZWFkb25seScgaXMKKwkJCXNldCBvciB0aGVyZSBpcyBhbm90aGVyIHJlYXNvbiB3aHkgd3JpdGluZyB3YXMKKwkJCXJlZnVzZWQuCisJCQlOb3RlOiBUaGlzIG1heSBjaGFuZ2UgdGhlIHBlcm1pc3Npb24gYW5kIG93bmVyc2hpcCBvZgorCQkJdGhlIGZpbGUgYW5kIGJyZWFrIChzeW1ib2xpYykgbGlua3MuICBBZGQgdGhlICdXJyBmbGFnCisJCQl0byAnY3BvcHRpb25zJyB0byBhdm9pZCB0aGlzLgorCis6W3JhbmdlXXdbcml0ZV1bIV0JV3JpdGUgdGhlIHNwZWNpZmllZCBsaW5lcyB0byB0aGUgY3VycmVudCBmaWxlLiAgVGhpcworCQkJaXMgdW51c3VhbCwgYmVjYXVzZSB0aGUgZmlsZSB3aWxsIG5vdCBjb250YWluIGFsbAorCQkJbGluZXMgaW4gdGhlIGJ1ZmZlci4KKworCQkJCQkJCSo6d19mKiAqOndyaXRlX2YqCis6W3JhbmdlXXdbcml0ZV0Je2ZpbGV9CVdyaXRlIHRoZSBzcGVjaWZpZWQgbGluZXMgdG8ge2ZpbGV9LCB1bmxlc3MgaXQKKwkJCWFscmVhZHkgZXhpc3RzIGFuZCB0aGUgJ3dyaXRlYW55JyBvcHRpb24gaXMgb2ZmLgorCisJCQkJCQkJKjp3ISoKKzpbcmFuZ2Vdd1tyaXRlXSEge2ZpbGV9CVdyaXRlIHRoZSBzcGVjaWZpZWQgbGluZXMgdG8ge2ZpbGV9LiAgT3ZlcndyaXRlIGFuCisJCQlleGlzdGluZyBmaWxlLgorCisJCQkJCQkqOndfYSogKjp3cml0ZV9hKiAqRTQ5NCoKKzpbcmFuZ2Vdd1tyaXRlXVshXSA+PglBcHBlbmQgdGhlIHNwZWNpZmllZCBsaW5lcyB0byB0aGUgY3VycmVudCBmaWxlLgorCis6W3JhbmdlXXdbcml0ZV1bIV0gPj4ge2ZpbGV9CisJCQlBcHBlbmQgdGhlIHNwZWNpZmllZCBsaW5lcyB0byB7ZmlsZX0uICAnIScgZm9yY2VzIHRoZQorCQkJd3JpdGUgZXZlbiBpZiBmaWxlIGRvZXMgbm90IGV4aXN0LgorCisJCQkJCQkJKjp3X2MqICo6d3JpdGVfYyoKKzpbcmFuZ2Vdd1tyaXRlXSAhe2NtZH0JRXhlY3V0ZSB7Y21kfSB3aXRoIFtyYW5nZV0gbGluZXMgYXMgc3RhbmRhcmQgaW5wdXQKKwkJCShub3RlIHRoZSBzcGFjZSBpbiBmcm9udCBvZiB0aGUgJyEnKS4gIHtjbWR9IGlzCisJCQlleGVjdXRlZCBsaWtlIHdpdGggIjohe2NtZH0iLCBhbnkgJyEnIGlzIHJlcGxhY2VkIHdpdGgKKwkJCXRoZSBwcmV2aW91cyBjb21tYW5kIHw6IXwuCisKK1RoZSBkZWZhdWx0IFtyYW5nZV0gZm9yIHRoZSAiOnciIGNvbW1hbmQgaXMgdGhlIHdob2xlIGJ1ZmZlciAoMSwkKS4KK0lmIGEgZmlsZSBuYW1lIGlzIGdpdmVuIHdpdGggIjp3IiBpdCBiZWNvbWVzIHRoZSBhbHRlcm5hdGUgZmlsZS4gIFRoaXMgY2FuIGJlCit1c2VkLCBmb3IgZXhhbXBsZSwgd2hlbiB0aGUgd3JpdGUgZmFpbHMgYW5kIHlvdSB3YW50IHRvIHRyeSBhZ2FpbiBsYXRlciB3aXRoCisiOncgIyIuICBUaGlzIGNhbiBiZSBzd2l0Y2hlZCBvZmYgYnkgcmVtb3ZpbmcgdGhlICdBJyBmbGFnIGZyb20gdGhlCisnY3BvcHRpb25zJyBvcHRpb24uCisKKwkJCQkJCQkqOnNhdiogKjpzYXZlYXMqCis6c2F2W2Vhc11bIV0ge2ZpbGV9CVNhdmUgdGhlIGN1cnJlbnQgYnVmZmVyIHVuZGVyIHRoZSBuYW1lIHtmaWxlfSBhbmQgc2V0CisJCQl0aGUgZmlsZW5hbWUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIHRvIHtmaWxlfS4gIFRoZQorCQkJcHJldmlvdXMgbmFtZSBpcyB1c2VkIGZvciB0aGUgYWx0ZXJuYXRlIGZpbGUgbmFtZS4KKwkJCVRoZSBbIV0gaXMgbmVlZGVkIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6dXAqICo6dXBkYXRlKgorOltyYW5nZV11cFtkYXRlXVshXSBbPj5dIFtmaWxlXQorCQkJTGlrZSAiOndyaXRlIiwgYnV0IG9ubHkgd3JpdGUgd2hlbiB0aGUgYnVmZmVyIGhhcyBiZWVuCisJCQltb2RpZmllZC4gIHtub3QgaW4gVml9CisKKworV1JJVElORyBXSVRIIE1VTFRJUExFIEJVRkZFUlMJCQkJKmJ1ZmZlci13cml0ZSoKKworCQkJCQkJCSo6d2EqICo6d2FsbCoKKzp3YVtsbF0JCQlXcml0ZSBhbGwgY2hhbmdlZCBidWZmZXJzLiAgQnVmZmVycyB3aXRob3V0IGEgZmlsZQorCQkJbmFtZSBvciB3aGljaCBhcmUgcmVhZG9ubHkgYXJlIG5vdCB3cml0dGVuLiB7bm90IGluCisJCQlWaX0KKworOndhW2xsXSEJCVdyaXRlIGFsbCBjaGFuZ2VkIGJ1ZmZlcnMsIGV2ZW4gdGhlIG9uZXMgdGhhdCBhcmUKKwkJCXJlYWRvbmx5LiAgQnVmZmVycyB3aXRob3V0IGEgZmlsZSBuYW1lIGFyZSBub3QKKwkJCXdyaXR0ZW4uIHtub3QgaW4gVml9CisKKworVmltIHdpbGwgd2FybiB5b3UgaWYgeW91IHRyeSB0byBvdmVyd3JpdGUgYSBmaWxlIHRoYXQgaGFzIGJlZW4gY2hhbmdlZAorZWxzZXdoZXJlLiAgU2VlIHx0aW1lc3RhbXB8LgorCisJCQkgICAgKmJhY2t1cCogKkUyMDcqICpFNTA2KiAqRTUwNyogKkU1MDgqICpFNTA5KiAqRTUxMCoKK0lmIHlvdSB3cml0ZSB0byBhbiBleGlzdGluZyBmaWxlIChidXQgZG8gbm90IGFwcGVuZCkgd2hpbGUgdGhlICdiYWNrdXAnLAorJ3dyaXRlYmFja3VwJyBvciAncGF0Y2htb2RlJyBvcHRpb24gaXMgb24sIGEgYmFja3VwIG9mIHRoZSBvcmlnaW5hbCBmaWxlIGlzCittYWRlLiAgVGhlIGZpbGUgaXMgZWl0aGVyIGNvcGllZCBvciByZW5hbWVkIChzZWUgJ2JhY2t1cGNvcHknKS4gIEFmdGVyIHRoZQorZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBhbmQgd2hlbiB0aGUgJ3dyaXRlYmFja3VwJyBvcHRpb24gaXMgb24gYW5kCit0aGUgJ2JhY2t1cCcgb3B0aW9uIGlzIG9mZiwgdGhlIGJhY2t1cCBmaWxlIGlzIGRlbGV0ZWQuICBXaGVuIHRoZSAncGF0Y2htb2RlJworb3B0aW9uIGlzIG9uIHRoZSBiYWNrdXAgZmlsZSBtYXkgYmUgcmVuYW1lZC4KKworCQkJCQkJCSpiYWNrdXAtdGFibGUqCisnYmFja3VwJyAnd3JpdGViYWNrdXAnCWFjdGlvbgl+CisgICBvZmYJICAgICBvZmYJbm8gYmFja3VwIG1hZGUKKyAgIG9mZgkgICAgIG9uCQliYWNrdXAgY3VycmVudCBmaWxlLCBkZWxldGVkIGFmdGVyd2FyZHMgKGRlZmF1bHQpCisgICBvbgkgICAgIG9mZglkZWxldGUgb2xkIGJhY2t1cCwgYmFja3VwIGN1cnJlbnQgZmlsZQorICAgb24JICAgICBvbgkJZGVsZXRlIG9sZCBiYWNrdXAsIGJhY2t1cCBjdXJyZW50IGZpbGUKKworV2hlbiB0aGUgJ2JhY2t1cHNraXAnIHBhdHRlcm4gbWF0Y2hlcyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdoaWNoIGlzCit3cml0dGVuLCBubyBiYWNrdXAgZmlsZSBpcyBtYWRlLiAgVGhlIHZhbHVlcyBvZiAnYmFja3VwJyBhbmQgJ3dyaXRlYmFja3VwJyBhcmUKK2lnbm9yZWQgdGhlbi4KKworV2hlbiB0aGUgJ2JhY2t1cCcgb3B0aW9uIGlzIG9uLCBhbiBvbGQgYmFja3VwIGZpbGUgKHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUKK25ldyBiYWNrdXAgZmlsZSkgd2lsbCBiZSBkZWxldGVkLiAgSWYgJ2JhY2t1cCcgaXMgbm90IHNldCwgYnV0ICd3cml0ZWJhY2t1cCcKK2lzIHNldCwgYW4gZXhpc3RpbmcgYmFja3VwIGZpbGUgd2lsbCBub3QgYmUgZGVsZXRlZC4gIFRoZSBiYWNrdXAgZmlsZSB0aGF0IGlzCittYWRlIHdoaWxlIHRoZSBmaWxlIGlzIGJlaW5nIHdyaXR0ZW4gd2lsbCBoYXZlIGEgZGlmZmVyZW50IG5hbWUuCisKK09uIHNvbWUgZmlsZXN5c3RlbXMgaXQncyBwb3NzaWJsZSB0aGF0IGluIGEgY3Jhc2ggeW91IGxvc2UgYm90aCB0aGUgYmFja3VwIGFuZAordGhlIG5ld2x5IHdyaXR0ZW4gZmlsZSAoaXQgbWlnaHQgYmUgdGhlcmUgYnV0IGNvbnRhaW4gYm9ndXMgZGF0YSkuICBJbiB0aGF0CitjYXNlIHRyeSByZWNvdmVyeSwgYmVjYXVzZSB0aGUgc3dhcCBmaWxlIGlzIHN5bmNlZCB0byBkaXNrIGFuZCBtaWdodCBzdGlsbCBiZQordGhlcmUuIHw6cmVjb3ZlcnwKKworVGhlIGRpcmVjdG9yaWVzIGdpdmVuIHdpdGggdGhlICdiYWNrdXBkaXInIG9wdGlvbiBpcyB1c2VkIHRvIHB1dCB0aGUgYmFja3VwCitmaWxlIGluLiAgKGRlZmF1bHQ6IHNhbWUgZGlyZWN0b3J5IGFzIHRoZSB3cml0dGVuIGZpbGUpLgorCitXaGV0aGVyIHRoZSBiYWNrdXAgaXMgYSBuZXcgZmlsZSwgd2hpY2ggaXMgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBvciB0aGUKK29yaWdpbmFsIGZpbGUgcmVuYW1lZCBkZXBlbmRzIG9uIHRoZSAnYmFja3VwY29weScgb3B0aW9uLiAgU2VlIHRoZXJlIGZvciBhbgorZXhwbGFuYXRpb24gb2Ygd2hlbiB0aGUgY29weSBpcyBtYWRlIGFuZCB3aGVuIHRoZSBmaWxlIGlzIHJlbmFtZWQuCisKK0lmIHRoZSBjcmVhdGlvbiBvZiBhIGJhY2t1cCBmaWxlIGZhaWxzLCB0aGUgd3JpdGUgaXMgbm90IGRvbmUuICBJZiB5b3Ugd2FudAordG8gd3JpdGUgYW55d2F5IGFkZCBhICchJyB0byB0aGUgY29tbWFuZC4KKworCQkJCQkJCSp3cml0ZS1yZWFkb25seSoKK1doZW4gdGhlICdjcG9wdGlvbnMnIG9wdGlvbiBjb250YWlucyAnVycsIFZpbSB3aWxsIHJlZnVzZSB0byBvdmVyd3JpdGUgYQorcmVhZG9ubHkgZmlsZS4gIFdoZW4gJ1cnIGlzIG5vdCBwcmVzZW50LCAiOnchIiB3aWxsIG92ZXJ3cml0ZSBhIHJlYWRvbmx5IGZpbGUsCitpZiB0aGUgc3lzdGVtIGFsbG93cyBpdCAodGhlIGRpcmVjdG9yeSBtdXN0IGJlIHdyaXRhYmxlKS4KKworCQkJCQkJCSp3cml0ZS1mYWlsKgorSWYgdGhlIHdyaXRpbmcgb2YgdGhlIG5ldyBmaWxlIGZhaWxzLCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBsb3NlCit5b3VyIGNoYW5nZXMgQU5EIHRoZSBvcmlnaW5hbCBmaWxlLiAgSWYgdGhlcmUgaXMgbm8gYmFja3VwIGZpbGUgYW5kIHdyaXRpbmcKK3RoZSBuZXcgZmlsZSBmYWlsZWQsIHlvdSBoYXZlIGFscmVhZHkgbG9zdCB0aGUgb3JpZ2luYWwgZmlsZSEgRE9OJ1QgRVhJVCBWSU0KK1VOVElMIFlPVSBXUklURSBPVVQgVEhFIEZJTEUhIElmIGEgYmFja3VwIHdhcyBtYWRlLCBpdCBpcyBwdXQgYmFjayBpbiBwbGFjZQorb2YgdGhlIG9yaWdpbmFsIGZpbGUgKGlmIHBvc3NpYmxlKS4gIElmIHlvdSBleGl0IFZpbSwgYW5kIGxvc2UgdGhlIGNoYW5nZXMKK3lvdSBtYWRlLCB0aGUgb3JpZ2luYWwgZmlsZSB3aWxsIG1vc3RseSBzdGlsbCBiZSB0aGVyZS4gIElmIHB1dHRpbmcgYmFjayB0aGUKK29yaWdpbmFsIGZpbGUgZmFpbHMsIHRoZXJlIHdpbGwgYmUgYW4gZXJyb3IgbWVzc2FnZSB0ZWxsaW5nIHlvdSB0aGF0IHlvdQorbG9zdCB0aGUgb3JpZ2luYWwgZmlsZS4KKworCQkJCQkJKkRPUy1mb3JtYXQtd3JpdGUqCitJZiB0aGUgJ2ZpbGVmb3JtYXQnIGlzICJkb3MiLCA8Q1I+IDxOTD4gaXMgdXNlZCBmb3IgPEVPTD4uICBUaGlzIGlzIGRlZmF1bHQKK2ZvciBNUy1ET1MsIFdpbjMyIGFuZCBPUy8yLiAgT24gb3RoZXIgc3lzdGVtcyB0aGUgbWVzc2FnZSAiW2RvcyBmb3JtYXRdIiBpcworc2hvd24gdG8gcmVtaW5kIHlvdSB0aGF0IGFuIHVudXN1YWwgPEVPTD4gd2FzIHVzZWQuCisJCQkJCQkqVW5peC1mb3JtYXQtd3JpdGUqCitJZiB0aGUgJ2ZpbGVmb3JtYXQnIGlzICJ1bml4IiwgPE5MPiBpcyB1c2VkIGZvciA8RU9MPi4gIE9uIE1TLURPUywgV2luMzIgYW5kCitPUy8yIHRoZSBtZXNzYWdlICJbdW5peCBmb3JtYXRdIiBpcyBzaG93bi4KKwkJCQkJCSpNYWMtZm9ybWF0LXdyaXRlKgorSWYgdGhlICdmaWxlZm9ybWF0JyBpcyAibWFjIiwgPENSPiBpcyB1c2VkIGZvciA8RU9MPi4gIE9uIG5vbi1NYWMgc3lzdGVtcyB0aGUKK21lc3NhZ2UgIlttYWMgZm9ybWF0XSIgaXMgc2hvd24uCisKK1NlZSBhbHNvIHxmaWxlLWZvcm1hdHN8IGFuZCB0aGUgJ2ZpbGVmb3JtYXQnIGFuZCAnZmlsZWZvcm1hdHMnIG9wdGlvbnMuCisKKwkJCQkJCSpBQ0wqCitBQ0wgc3RhbmRzIGZvciBBY2Nlc3MgQ29udHJvbCBMaXN0LiAgSXQgaXMgYW4gYWR2YW5jZWQgd2F5IHRvIGNvbnRyb2wgYWNjZXNzCityaWdodHMgZm9yIGEgZmlsZS4gIEl0IGlzIHVzZWQgb24gbmV3IE1TLVdpbmRvd3MgYW5kIFVuaXggc3lzdGVtcywgYnV0IG9ubHkKK3doZW4gdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgaXQuCisgICBWaW0gYXR0ZW1wdHMgdG8gcHJlc2VydmUgdGhlIEFDTCBpbmZvIHdoZW4gd3JpdGluZyBhIGZpbGUuICBUaGUgYmFja3VwIGZpbGUKK3dpbGwgZ2V0IHRoZSBBQ0wgaW5mbyBvZiB0aGUgb3JpZ2luYWwgZmlsZS4KKyAgIFRoZSBBQ0wgaW5mbyBpcyBhbHNvIHVzZWQgdG8gY2hlY2sgaWYgYSBmaWxlIGlzIHJlYWQtb25seSAod2hlbiBvcGVuaW5nIHRoZQorZmlsZSkuCisKKwkJCQkJCSpyZWFkLW9ubHktc2hhcmUqCitXaGVuIE1TLVdpbmRvd3Mgc2hhcmVzIGEgZHJpdmUgb24gdGhlIG5ldHdvcmsgaXQgY2FuIGJlIG1hcmtlZCBhcyByZWFkLW9ubHkuCitUaGlzIG1lYW5zIHRoYXQgZXZlbiBpZiB0aGUgZmlsZSByZWFkLW9ubHkgYXR0cmlidXRlIGlzIGFic2VudCwgYW5kIHRoZSBBQ0wKK3NldHRpbmdzIG9uIE5UIG5ldHdvcmsgc2hhcmVkIGRyaXZlcyBhbGxvdyB3cml0aW5nIHRvIHRoZSBmaWxlLCB5b3UgY2FuIHN0aWxsCitub3Qgd3JpdGUgdG8gdGhlIGZpbGUuICBWaW0gb24gV2luMzIgcGxhdGZvcm1zIHdpbGwgZGV0ZWN0IHJlYWQtb25seSBuZXR3b3JrCitkcml2ZXMgYW5kIHdpbGwgbWFyayB0aGUgZmlsZSBhcyByZWFkLW9ubHkuICBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byBvdmVycmlkZQoraXQgd2l0aCB8OndyaXRlfC4KKworCQkJCQkJKndyaXRlLWRldmljZSoKK1doZW4gdGhlIGZpbGUgbmFtZSBpcyBhY3R1YWxseSBhIGRldmljZSBuYW1lLCBWaW0gd2lsbCBub3QgbWFrZSBhIGJhY2t1cCAodGhhdAord291bGQgYmUgaW1wb3NzaWJsZSkuICBZb3UgbmVlZCB0byB1c2UgIiEiLCBzaW5jZSB0aGUgZGV2aWNlIGFscmVhZHkgZXhpc3RzLgorRXhhbXBsZSBmb3IgVW5peDogPgorCTp3ISAvZGV2L2xwdDAKK2FuZCBmb3IgTVMtRE9TIG9yIE1TLVdpbmRvd3M6ID4KKwk6dyEgbHB0MAorRm9yIFVuaXggYSBkZXZpY2UgaXMgZGV0ZWN0ZWQgd2hlbiB0aGUgbmFtZSBkb2Vzbid0IHJlZmVyIHRvIGEgbm9ybWFsIGZpbGUgb3IKK2EgZGlyZWN0b3J5LiAgQSBmaWZvIG9yIG5hbWVkIHBpcGUgYWxzbyBsb29rcyBsaWtlIGEgZGV2aWNlIHRvIFZpbS4KK0ZvciBNUy1ET1MgYW5kIE1TLVdpbmRvd3MgdGhlIGRldmljZSBpcyBkZXRlY3RlZCBieSBpdHMgbmFtZToKKwlBVVgKKwlDT04KKwlDTE9DSyQKKwlOVUwKKwlQUk4KKwlDT01uCW49MSwyLDMuLi4gZXRjCisJTFBUbgluPTEsMiwzLi4uIGV0YworVGhlIG5hbWVzIGNhbiBiZSBpbiB1cHBlci0gb3IgbG93ZXJjYXNlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIFdyaXRpbmcgYW5kIHF1aXR0aW5nCQkJCQkqd3JpdGUtcXVpdCoKKworCQkJCQkJCSo6cSogKjpxdWl0KgorOnFbdWl0XQkJCVF1aXQgdGhlIGN1cnJlbnQgd2luZG93LiAgUXVpdCBWaW0gaWYgdGhpcyBpcyB0aGUgbGFzdAorCQkJd2luZG93LiAgVGhpcyBmYWlscyB3aGVuIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgYW5kCisJCQlWaW0gcmVmdXNlcyB0byB8YWJhbmRvbnwgdGhlIGN1cnJlbnQgYnVmZmVyLCBhbmQgd2hlbgorCQkJdGhlIGxhc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdCBoYXMgbm90IGJlZW4KKwkJCWVkaXRlZC4KKworOmNvbmZbaXJtXSBxW3VpdF0JUXVpdCwgYnV0IGdpdmUgcHJvbXB0IHdoZW4gY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSwgb3IKKwkJCXRoZSBsYXN0IGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QgaGFzIG5vdCBiZWVuCisJCQllZGl0ZWQuICBTZWUgfDpjb25maXJtfCBhbmQgJ2NvbmZpcm0nLiAge25vdCBpbiBWaX0KKworOnFbdWl0XSEJCVF1aXQgd2l0aG91dCB3cml0aW5nLCBhbHNvIHdoZW4gdmlzaWJsZSBidWZmZXJzIGhhdmUKKwkJCWNoYW5nZXMuICBEb2VzIG5vdCBleGl0IHdoZW4gdGhlcmUgYXJlIGNoYW5nZWQgaGlkZGVuCisJCQlidWZmZXJzLiAgVXNlICI6cWFsbCEiIHRvIGV4aXQgYWx3YXlzLgorCis6Y3FbdWl0XQkJUXVpdCBhbHdheXMsIHdpdGhvdXQgd3JpdGluZywgYW5kIHJldHVybiBhbiBlcnJvcgorCQkJY29kZS4gIFNlZSB8OmNxfC4gIFVzZWQgZm9yIE1hbngncyBRdWlja0ZpeCBtb2RlIChzZWUKKwkJCXxxdWlja2ZpeHwpLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6d3EqCis6d3EJCQlXcml0ZSB0aGUgY3VycmVudCBmaWxlIGFuZCBxdWl0LiAgV3JpdGluZyBmYWlscyB3aGVuCisJCQl0aGUgZmlsZSBpcyByZWFkLW9ubHkgb3IgdGhlIGJ1ZmZlciBkb2VzIG5vdCBoYXZlIGEKKwkJCW5hbWUuICBRdWl0dGluZyBmYWlscyB3aGVuIHRoZSBsYXN0IGZpbGUgaW4gdGhlCisJCQlhcmd1bWVudCBsaXN0IGhhcyBub3QgYmVlbiBlZGl0ZWQuCisKKzp3cSEJCQlXcml0ZSB0aGUgY3VycmVudCBmaWxlIGFuZCBxdWl0LiAgV3JpdGluZyBmYWlscyB3aGVuCisJCQl0aGUgY3VycmVudCBidWZmZXIgZG9lcyBub3QgaGF2ZSBhIG5hbWUuCisKKzp3cSB7ZmlsZX0JCVdyaXRlIHRvIHtmaWxlfSBhbmQgcXVpdC4gIFF1aXR0aW5nIGZhaWxzIHdoZW4gdGhlCisJCQlsYXN0IGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QgaGFzIG5vdCBiZWVuIGVkaXRlZC4KKworOndxISB7ZmlsZX0JCVdyaXRlIHRvIHtmaWxlfSBhbmQgcXVpdC4KKworOltyYW5nZV13cVshXSBbZmlsZV0JU2FtZSBhcyBhYm92ZSwgYnV0IG9ubHkgd3JpdGUgdGhlIGxpbmVzIGluIFtyYW5nZV0uCisKKwkJCQkJCQkqOngqICo6eGl0KgorOltyYW5nZV14W2l0XVshXSBbZmlsZV0KKwkJCUxpa2UgIjp3cSIsIGJ1dCB3cml0ZSBvbmx5IHdoZW4gY2hhbmdlcyBoYXZlIGJlZW4KKwkJCW1hZGUuCisJCQlXaGVuICdoaWRkZW4nIGlzIHNldCBhbmQgdGhlcmUgYXJlIG1vcmUgd2luZG93cywgdGhlCisJCQljdXJyZW50IGJ1ZmZlciBiZWNvbWVzIGhpZGRlbiwgYWZ0ZXIgd3JpdGluZyB0aGUgZmlsZS4KKworCQkJCQkJCSo6ZXhpKiAqOmV4aXQqCis6W3JhbmdlXWV4aVt0XVshXSBbZmlsZV0KKwkJCVNhbWUgYXMgOnhpdC4KKworCQkJCQkJCSpaWioKK1paCQkJV3JpdGUgY3VycmVudCBmaWxlLCBpZiBtb2RpZmllZCwgYW5kIHF1aXQgKHNhbWUgYXMKKwkJCSI6eCIpLiAgKE5vdGU6IElmIHRoZXJlIGFyZSBzZXZlcmFsIHdpbmRvd3MgZm9yIHRoZQorCQkJY3VycmVudCBmaWxlLCB0aGUgZmlsZSBpcyB3cml0dGVuIGlmIGl0IHdhcyBtb2RpZmllZAorCQkJYW5kIHRoZSB3aW5kb3cgaXMgY2xvc2VkKS4KKworCQkJCQkJCSpaUSoKK1pRCQkJUXVpdCB3aXRob3V0IGNoZWNraW5nIGZvciBjaGFuZ2VzIChzYW1lIGFzICI6cSEiKS4KKwkJCXtub3QgaW4gVml9CisKK01VTFRJUExFIFdJTkRPV1MgQU5EIEJVRkZFUlMJCQkJKndpbmRvdy1leGl0KgorCisJCQkJCQkJKjpxYSogKjpxYWxsKgorOnFhW2xsXQkJRXhpdCBWaW0sIHVubGVzcyB0aGVyZSBhcmUgc29tZSBidWZmZXJzIHdoaWNoIGhhdmUgYmVlbgorCQljaGFuZ2VkLiAgKFVzZSAiOmJtb2QiIHRvIGdvIHRvIHRoZSBuZXh0IG1vZGlmaWVkIGJ1ZmZlcikuCisJCVdoZW4gJ2F1dG93cml0ZWFsbCcgaXMgc2V0IGFsbCBjaGFuZ2VkIGJ1ZmZlcnMgd2lsbCBiZQorCQl3cml0dGVuLCBsaWtlIHw6d3FhbGx8LiB7bm90IGluIFZpfQorCis6Y29uZltpcm1dIHFhW2xsXQorCQlFeGl0IFZpbS4gIEJyaW5nIHVwIGEgcHJvbXB0IHdoZW4gc29tZSBidWZmZXJzIGhhdmUgYmVlbgorCQljaGFuZ2VkLiAgU2VlIHw6Y29uZmlybXwuIHtub3QgaW4gVml9CisKKzpxYVtsbF0hCUV4aXQgVmltLiAgQW55IGNoYW5nZXMgdG8gYnVmZmVycyBhcmUgbG9zdC4ge25vdCBpbiBWaX0KKworCQkJCQkJCSo6cXVpdGEqICo6cXVpdGFsbCoKKzpxdWl0YVtsbF1bIV0JU2FtZSBhcyAiOnFhbGwiLiB7bm90IGluIFZpfQorCis6d3FhW2xsXQkJCQkJKjp3cWEqICo6d3FhbGwqICo6eGEqICo6eGFsbCoKKzp4YVtsbF0JCVdyaXRlIGFsbCBjaGFuZ2VkIGJ1ZmZlcnMgYW5kIGV4aXQgVmltLiAgSWYgdGhlcmUgYXJlIGJ1ZmZlcnMKKwkJd2l0aG91dCBhIGZpbGUgbmFtZSwgd2hpY2ggYXJlIHJlYWRvbmx5IG9yIHdoaWNoIGNhbm5vdCBiZQorCQl3cml0dGVuIGZvciBhbm90aGVyIHJlYXNvbiwgVmltIHdpbGwgbm90IHF1aXQuIHtub3QgaW4gVml9CisKKzpjb25mW2lybV0gd3FhW2xsXQorOmNvbmZbaXJtXSB4YVtsbF0KKwkJV3JpdGUgYWxsIGNoYW5nZWQgYnVmZmVycyBhbmQgZXhpdCBWaW0uICBCcmluZyB1cCBhIHByb21wdAorCQl3aGVuIHNvbWUgYnVmZmVycyBhcmUgcmVhZG9ubHkgb3IgY2Fubm90IGJlIHdyaXR0ZW4gZm9yCisJCWFub3RoZXIgcmVhc29uLiAgU2VlIHw6Y29uZmlybXwuIHtub3QgaW4gVml9CisKKzp3cWFbbGxdIQorOnhhW2xsXSEJV3JpdGUgYWxsIGNoYW5nZWQgYnVmZmVycywgZXZlbiB0aGUgb25lcyB0aGF0IGFyZSByZWFkb25seSwKKwkJYW5kIGV4aXQgVmltLiAgSWYgdGhlcmUgYXJlIGJ1ZmZlcnMgd2l0aG91dCBhIGZpbGUgbmFtZSBvcgorCQl3aGljaCBjYW5ub3QgYmUgd3JpdHRlbiBmb3IgYW5vdGhlciByZWFzb24sIFZpbSB3aWxsIG5vdCBxdWl0LgorCQl7bm90IGluIFZpfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIEVkaXRpbmcgYmluYXJ5IGZpbGVzCQkJCQkqZWRpdC1iaW5hcnkqCisKK0FsdGhvdWdoIFZpbSB3YXMgbWFkZSB0byBlZGl0IHRleHQgZmlsZXMsIGl0IGlzIHBvc3NpYmxlIHRvIGVkaXQgYmluYXJ5CitmaWxlcy4gIFRoZSB8LWJ8IFZpbSBhcmd1bWVudCAoYiBmb3IgYmluYXJ5KSBtYWtlcyBWaW0gZG8gZmlsZSBJL08gaW4gYmluYXJ5Cittb2RlLCBhbmQgc2V0cyBzb21lIG9wdGlvbnMgZm9yIGVkaXRpbmcgYmluYXJ5IGZpbGVzICgnYmluYXJ5JyBvbiwgJ3RleHR3aWR0aCcKK3RvIDAsICdtb2RlbGluZScgb2ZmLCAnZXhwYW5kdGFiJyBvZmYpLiAgU2V0dGluZyB0aGUgJ2JpbmFyeScgb3B0aW9uIGhhcyB0aGUKK3NhbWUgZWZmZWN0LiAgRG9uJ3QgZm9yZ2V0IHRvIGRvIHRoaXMgYmVmb3JlIHJlYWRpbmcgdGhlIGZpbGUuCisKK1RoZXJlIGFyZSBhIGZldyB0aGluZ3MgdG8gcmVtZW1iZXIgd2hlbiBlZGl0aW5nIGJpbmFyeSBmaWxlczoKKy0gV2hlbiBlZGl0aW5nIGV4ZWN1dGFibGUgZmlsZXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIG11c3Qgbm90IGNoYW5nZS4KKyAgVXNlIG9ubHkgdGhlICJSIiBvciAiciIgY29tbWFuZCB0byBjaGFuZ2UgdGV4dC4gIERvIG5vdCBkZWxldGUgY2hhcmFjdGVycworICB3aXRoICJ4IiBvciBieSBiYWNrc3BhY2luZy4KKy0gU2V0IHRoZSAndGV4dHdpZHRoJyBvcHRpb24gdG8gMC4gIE90aGVyd2lzZSBsaW5lcyB3aWxsIHVuZXhwZWN0ZWRseSBiZQorICBzcGxpdCBpbiB0d28uCistIFdoZW4gdGhlcmUgYXJlIG5vdCBtYW55IDxFT0w+cywgdGhlIGxpbmVzIHdpbGwgYmVjb21lIHZlcnkgbG9uZy4gIElmIHlvdQorICB3YW50IHRvIGVkaXQgYSBsaW5lIHRoYXQgZG9lcyBub3QgZml0IG9uIHRoZSBzY3JlZW4gcmVzZXQgdGhlICd3cmFwJyBvcHRpb24uCisgIEhvcml6b250YWwgc2Nyb2xsaW5nIGlzIHVzZWQgdGhlbi4gIElmIGEgbGluZSBiZWNvbWVzIHRvbyBsb25nIChtb3JlIHRoYW4KKyAgYWJvdXQgMzI3NjcgY2hhcmFjdGVycyBvbiB0aGUgQW1pZ2EsIG11Y2ggbW9yZSBvbiAzMi1iaXQgc3lzdGVtcywgc2VlCisgIHxsaW1pdHN8KSB5b3UgY2Fubm90IGVkaXQgdGhhdCBsaW5lLiAgVGhlIGxpbmUgd2lsbCBiZSBzcGxpdCB3aGVuIHJlYWRpbmcKKyAgdGhlIGZpbGUuICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgeW91IGdldCBhbiAib3V0IG9mIG1lbW9yeSIgZXJyb3Igd2hlbgorICByZWFkaW5nIHRoZSBmaWxlLgorLSBNYWtlIHN1cmUgdGhlICdiaW5hcnknIG9wdGlvbiBpcyBzZXQgQkVGT1JFIGxvYWRpbmcgdGhlCisgIGZpbGUuICBPdGhlcndpc2UgYm90aCA8Q1I+IDxOTD4gYW5kIDxOTD4gYXJlIGNvbnNpZGVyZWQgdG8gZW5kIGEgbGluZQorICBhbmQgd2hlbiB0aGUgZmlsZSBpcyB3cml0dGVuIHRoZSA8Tkw+IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCA8Q1I+IDxOTD4uCistIDxOdWw+IGNoYXJhY3RlcnMgYXJlIHNob3duIG9uIHRoZSBzY3JlZW4gYXMgXkAuICBZb3UgY2FuIGVudGVyIHRoZW0gd2l0aAorICAiQ1RSTC1WIENUUkwtQCIgb3IgIkNUUkwtViAwMDAiIHtWaSBjYW5ub3QgaGFuZGxlIDxOdWw+IGNoYXJhY3RlcnMgaW4gdGhlCisgIGZpbGV9CistIFRvIGluc2VydCBhIDxOTD4gY2hhcmFjdGVyIGluIHRoZSBmaWxlIHNwbGl0IHVwIGEgbGluZS4gIFdoZW4gd3JpdGluZyB0aGUKKyAgYnVmZmVyIHRvIGEgZmlsZSBhIDxOTD4gd2lsbCBiZSB3cml0dGVuIGZvciB0aGUgPEVPTD4uCistIFZpbSBub3JtYWxseSBhcHBlbmRzIGFuIDxFT0w+IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgaWYgdGhlcmUgaXMgbm9uZS4KKyAgU2V0dGluZyB0aGUgJ2JpbmFyeScgb3B0aW9uIHByZXZlbnRzIHRoaXMuICBJZiB5b3Ugd2FudCB0byBhZGQgdGhlIGZpbmFsCisgIDxFT0w+LCBzZXQgdGhlICdlbmRvZmxpbmUnIG9wdGlvbi4gIFlvdSBjYW4gYWxzbyByZWFkIHRoZSB2YWx1ZSBvZiB0aGlzCisgIG9wdGlvbiB0byBzZWUgaWYgdGhlcmUgd2FzIGFuIDxFT0w+IGZvciB0aGUgbGFzdCBsaW5lICh5b3UgY2Fubm90IHNlZSB0aGlzCisgIGluIHRoZSB0ZXh0KS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBFbmNyeXB0aW9uCQkJCQkJKmVuY3J5cHRpb24qCisKK1ZpbSBpcyBhYmxlIHRvIHdyaXRlIGZpbGVzIGVuY3J5cHRlZCwgYW5kIHJlYWQgdGhlbSBiYWNrLiAgVGhlIGVuY3J5cHRlZCB0ZXh0CitjYW5ub3QgYmUgcmVhZCB3aXRob3V0IHRoZSByaWdodCBrZXkuCisKK05vdGU6IFRoZSBzd2FwZmlsZSBhbmQgdGV4dCBpbiBtZW1vcnkgaXMgbm90IGVuY3J5cHRlZC4gIEEgc3lzdGVtCithZG1pbmlzdHJhdG9yIHdpbGwgYmUgYWJsZSB0byBzZWUgeW91ciB0ZXh0IHdoaWxlIHlvdSBhcmUgZWRpdGluZyBpdC4KK1doZW4gZmlsdGVyaW5nIHRleHQgd2l0aCAiOiFmaWx0ZXIiIG9yIHVzaW5nICI6dyAhY29tbWFuZCIgdGhlIHRleHQgaXMgbm90CitlbmNyeXB0ZWQsIHRoaXMgbWF5IHJldmVhbCBpdCB0byBvdGhlcnMuCisKK1dBUk5JTkc6IElmIHlvdSBtYWtlIGEgdHlwbyB3aGVuIGVudGVyaW5nIHRoZSBrZXkgYW5kIHRoZW4gd3JpdGUgdGhlIGZpbGUgYW5kCitleGl0LCB0aGUgdGV4dCB3aWxsIGJlIGxvc3QhCisKK1RoZSBub3JtYWwgd2F5IHRvIHdvcmsgd2l0aCBlbmNyeXB0aW9uLCBpcyB0byB1c2UgdGhlICI6WCIgY29tbWFuZCwgd2hpY2ggd2lsbAorYXNrIHlvdSB0byBlbnRlciBhIGtleS4gIEEgZm9sbG93aW5nIHdyaXRlIGNvbW1hbmQgd2lsbCB1c2UgdGhhdCBrZXkgdG8KK2VuY3J5cHQgdGhlIGZpbGUuICBJZiB5b3UgbGF0ZXIgZWRpdCB0aGUgc2FtZSBmaWxlLCBWaW0gd2lsbCBhc2sgeW91IHRvIGVudGVyCithIGtleS4gIElmIHlvdSB0eXBlIHRoZSBzYW1lIGtleSBhcyB0aGF0IHdhcyB1c2VkIGZvciB3cml0aW5nLCB0aGUgdGV4dCB3aWxsCitiZSByZWFkYWJsZSBhZ2Fpbi4gIElmIHlvdSB1c2UgYSB3cm9uZyBrZXksIGl0IHdpbGwgYmUgYSBtZXNzLgorCisJCQkJCQkJKjpYKgorOlgJUHJvbXB0IGZvciBhbiBlbmNyeXB0aW9uIGtleS4gIFRoZSB0eXBpbmcgaXMgZG9uZSB3aXRob3V0IHNob3dpbmcgdGhlCisJYWN0dWFsIHRleHQsIHNvIHRoYXQgc29tZW9uZSBsb29raW5nIGF0IHRoZSBkaXNwbGF5IHdvbid0IHNlZSBpdC4KKwlUaGUgdHlwZWQga2V5IGlzIHN0b3JlZCBpbiB0aGUgJ2tleScgb3B0aW9uLCB3aGljaCBpcyB1c2VkIHRvIGVuY3J5cHQKKwl0aGUgZmlsZSB3aGVuIGl0IGlzIHdyaXR0ZW4uICBUaGUgZmlsZSB3aWxsIHJlbWFpbiB1bmNoYW5nZWQgdW50aWwgeW91CisJd3JpdGUgaXQuICBTZWUgYWxzbyB8LXh8LgorCitUaGUgdmFsdWUgb2YgdGhlICdrZXknIG9wdGlvbnMgaXMgdXNlZCB3aGVuIHRleHQgaXMgd3JpdHRlbi4gIFdoZW4gdGhlIG9wdGlvbgoraXMgbm90IGVtcHR5LCB0aGUgd3JpdHRlbiBmaWxlIHdpbGwgYmUgZW5jcnlwdGVkLCB1c2luZyB0aGUgdmFsdWUgYXMgdGhlCitlbmNyeXB0aW9uIGtleS4gIEEgbWFnaWMgbnVtYmVyIGlzIHByZXBlbmRlZCwgc28gdGhhdCBWaW0gY2FuIHJlY29nbml6ZSB0aGF0Cit0aGUgZmlsZSBpcyBlbmNyeXB0ZWQuCisKK1RvIGRpc2FibGUgdGhlIGVuY3J5cHRpb24sIHJlc2V0IHRoZSAna2V5JyBvcHRpb24gdG8gYW4gZW1wdHkgdmFsdWU6ID4KKwk6c2V0IGtleT0KKworV2hlbiByZWFkaW5nIGEgZmlsZSB0aGF0IGhhcyBiZWVuIGVuY3J5cHRlZCBhbmQgdGhpcyBvcHRpb24gaXMgbm90IGVtcHR5LCBpdAord2lsbCBiZSB1c2VkIGZvciBkZWNyeXB0aW9uLiAgSWYgdGhlIHZhbHVlIGlzIGVtcHR5LCB5b3Ugd2lsbCBiZSBwcm9tcHRlZCB0bworZW50ZXIgdGhlIGtleS4gIElmIHlvdSBkb24ndCBlbnRlciBhIGtleSwgdGhlIGZpbGUgaXMgZWRpdGVkIHdpdGhvdXQgYmVpbmcKK2RlY3J5cHRlZC4KKworSWYgd2FudCB0byBzdGFydCByZWFkaW5nIGEgZmlsZSB0aGF0IHVzZXMgYSBkaWZmZXJlbnQga2V5LCBzZXQgdGhlICdrZXknCitvcHRpb24gdG8gYW4gZW1wdHkgc3RyaW5nLCBzbyB0aGF0IFZpbSB3aWxsIHByb21wdCBmb3IgYSBuZXcgb25lLiAgRG9uJ3QgdXNlCit0aGUgIjpzZXQiIGNvbW1hbmQgdG8gZW50ZXIgdGhlIHZhbHVlLCBvdGhlciBwZW9wbGUgY2FuIHJlYWQgdGhlIGNvbW1hbmQgb3ZlcgoreW91ciBzaG91bGRlci4KKworU2luY2UgdGhlIHZhbHVlIG9mIHRoZSAna2V5JyBvcHRpb24gaXMgc3VwcG9zZWQgdG8gYmUgYSBzZWNyZXQsIGl0cyB2YWx1ZSBjYW4KK25ldmVyIGJlIHZpZXdlZC4gIFlvdSBzaG91bGQgbm90IHNldCB0aGlzIG9wdGlvbiBpbiBhIHZpbXJjIGZpbGUuCisKK0FuIGVuY3J5cHRlZCBmaWxlIGNhbiBiZSByZWNvZ25pemVkIGJ5IHRoZSAiZmlsZSIgY29tbWFuZCwgaWYgeW91IGFkZCB0aGlzCitsaW5lIHRvICIvZXRjL21hZ2ljIiwgIi91c3Ivc2hhcmUvbWlzYy9tYWdpYyIgb3Igd2hlcmV2ZXIgeW91ciBzeXN0ZW0gaGFzIHRoZQorIm1hZ2ljIiBmaWxlOiA+CisgICAgIDAJc3RyaW5nCVZpbUNyeXB0fglWaW0gZW5jcnlwdGVkIGZpbGUKKworTm90ZXM6CistIEVuY3J5cHRpb24gaXMgbm90IHBvc3NpYmxlIHdoZW4gZG9pbmcgY29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcuCistIFRleHQgeW91IGNvcHkgb3IgZGVsZXRlIGdvZXMgdG8gdGhlIG51bWJlcmVkIHJlZ2lzdGVycy4gIFRoZSByZWdpc3RlcnMgY2FuCisgIGJlIHNhdmVkIGluIHRoZSAudmltaW5mbyBmaWxlLCB3aGVyZSB0aGV5IGNvdWxkIGJlIHJlYWQuICBDaGFuZ2UgeW91cgorICAndmltaW5mbycgb3B0aW9uIHRvIGJlIHNhZmUuCistIFNvbWVvbmUgY2FuIHR5cGUgY29tbWFuZHMgaW4gVmltIHdoZW4geW91IHdhbGsgYXdheSBmb3IgYSBtb21lbnQsIGhlIHNob3VsZAorICBub3QgYmUgYWJsZSB0byBnZXQgdGhlIGtleS4KKy0gSWYgeW91IG1ha2UgYSB0eXBpbmcgbWlzdGFrZSB3aGVuIGVudGVyaW5nIHRoZSBrZXksIHlvdSBtaWdodCBub3QgYmUgYWJsZSB0bworICBnZXQgeW91ciB0ZXh0IGJhY2shCistIElmIHlvdSB0eXBlIHRoZSBrZXkgd2l0aCBhICI6c2V0IGtleT12YWx1ZSIgY29tbWFuZCwgaXQgY2FuIGJlIGtlcHQgaW4gdGhlCisgIGhpc3RvcnksIHNob3dpbmcgdGhlICdrZXknIHZhbHVlIGluIGEgdmltaW5mbyBmaWxlLgorLSBUaGVyZSBpcyBuZXZlciAxMDAlIHNhZmV0eS4gIFRoZSBlbmNyeXB0aW9uIGluIFZpbSBoYXMgbm90IGJlZW4gdGVzdGVkIGZvcgorICByb2J1c3RuZXNzLgorLSBUaGUgYWxnb3JpdGhtIHVzZWQgaXMgYnJlYWthYmxlLiAgQSA0IGNoYXJhY3RlciBrZXkgaW4gYWJvdXQgb25lIGhvdXIsIGEgNgorICBjaGFyYWN0ZXIga2V5IGluIG9uZSBkYXkgKG9uIGEgUGVudGl1bSAxMzMgUEMpLiAgVGhpcyByZXF1aXJlcyB0aGF0IHlvdSBrbm93CisgIHNvbWUgdGV4dCB0aGF0IG11c3QgYXBwZWFyIGluIHRoZSBmaWxlLiAgQW4gZXhwZXJ0IGNhbiBicmVhayBpdCBmb3IgYW55IGtleS4KKyAgV2hlbiB0aGUgdGV4dCBoYXMgYmVlbiBkZWNyeXB0ZWQsIHRoaXMgYWxzbyBtZWFucyB0aGF0IHRoZSBrZXkgY2FuIGJlCisgIHJldmVhbGVkLCBhbmQgb3RoZXIgZmlsZXMgZW5jcnlwdGVkIHdpdGggdGhlIHNhbWUga2V5IGNhbiBiZSBkZWNyeXB0ZWQuCistIFBremlwIHVzZXMgdGhlIHNhbWUgZW5jcnlwdGlvbiwgYW5kIFVTIEdvdnQgaGFzIG5vIG9iamVjdGlvbiB0byBpdHMgZXhwb3J0LgorICBQa3ppcCdzIHB1YmxpYyBmaWxlIEFQUE5PVEUuVFhUIGRlc2NyaWJlcyB0aGlzIGFsZ29yaXRobSBpbiBkZXRhaWwuCistIFZpbSBvcmlnaW5hdGVzIGZyb20gdGhlIE5ldGhlcmxhbmRzLiAgVGhhdCBpcyB3aGVyZSB0aGUgc291cmNlcyBjb21lIGZyb20uCisgIFRodXMgdGhlIGVuY3J5cHRpb24gY29kZSBpcyBub3QgZXhwb3J0ZWQgZnJvbSB0aGUgVVNBLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEwLiBUaW1lc3RhbXBzCQkJCQkqdGltZXN0YW1wKiAqdGltZXN0YW1wcyoKKworVmltIHJlbWVtYmVycyB0aGUgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcCBvZiBhIGZpbGUgd2hlbiB5b3UgYmVnaW4gZWRpdGluZyBpdC4KK1RoaXMgaXMgdXNlZCB0byBhdm9pZCB0aGF0IHlvdSBoYXZlIHR3byBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZmlsZQorKHdpdGhvdXQgeW91IGtub3dpbmcgdGhpcykuCisKK0FmdGVyIGEgc2hlbGwgY29tbWFuZCBpcyBydW4gKHw6IWNtZHwgfHN1c3BlbmR8IHw6cmVhZCF8IHxLfCkgdGltZXN0YW1wcyBhcmUKK2NvbXBhcmVkIGZvciBhbGwgYnVmZmVycyBpbiBhIHdpbmRvdy4gICBWaW0gd2lsbCBydW4gYW55IGFzc29jaWF0ZWQKK3xGaWxlQ2hhbmdlZFNoZWxsfCBhdXRvY29tbWFuZHMgb3IgZGlzcGxheSBhIHdhcm5pbmcgZm9yIGFueSBmaWxlcyB0aGF0IGhhdmUKK2NoYW5nZWQuICBJbiB0aGUgR1VJIHRoaXMgaGFwcGVucyB3aGVuIFZpbSByZWdhaW5zIGlucHV0IGZvY3VzLgorCisJCQkJCQkJKkUzMjEqICpFNDYyKgorSWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseSByZWxvYWQgYSBmaWxlIHdoZW4gaXQgaGFzIGJlZW4gY2hhbmdlZCBvdXRzaWRlIG9mCitWaW0sIHNldCB0aGUgJ2F1dG9yZWFkJyBvcHRpb24uICBUaGlzIGRvZXNuJ3Qgd29yayBhdCB0aGUgbW9tZW50IHlvdSB3cml0ZSB0aGUKK2ZpbGUgdGhvdWdoLCBvbmx5IHdoZW4gdGhlIGZpbGUgd2Fzbid0IGNoYW5nZWQgaW5zaWRlIG9mIFZpbS4KKworTm90ZSB0aGF0IGlmIGEgRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCBpcyBkZWZpbmVkIHlvdSB3aWxsIG5vdCBnZXQgYQord2FybmluZyBtZXNzYWdlIG9yIHByb21wdC4gIFRoZSBhdXRvY29tbWFuZCBpcyBleHBlY3RlZCB0byBoYW5kbGUgdGhpcy4KKworVGhlcmUgaXMgbm8gd2FybmluZyBmb3IgYSBkaXJlY3RvcnkgKGUuZy4sIGluIHRoZSB8ZmlsZS1leHBsb3JlcnwpLiAgQnV0IHlvdQorZG8gZ2V0IHdhcm5lZCBpZiB5b3Ugc3RhcnRlZCBlZGl0aW5nIGEgbmV3IGZpbGUgYW5kIGl0IHdhcyBjcmVhdGVkIGFzIGEKK2RpcmVjdG9yeSBsYXRlci4KKworV2hlbiBWaW0gbm90aWNlcyB0aGUgdGltZXN0YW1wIG9mIGEgZmlsZSBoYXMgY2hhbmdlZCwgYW5kIHRoZSBmaWxlIGlzIGJlaW5nCitlZGl0ZWQgaW4gYSBidWZmZXIgYnV0IGhhcyBub3QgY2hhbmdlZCwgVmltIGNoZWNrcyBpZiB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUKK2lzIGVxdWFsLiAgVGhpcyBpcyBkb25lIGJ5IHJlYWRpbmcgdGhlIGZpbGUgYWdhaW4gKGludG8gYSBoaWRkZW4gYnVmZmVyLCB3aGljaAoraXMgaW1tZWRpYXRlbHkgZGVsZXRlZCBhZ2FpbikgYW5kIGNvbXBhcmluZyB0aGUgdGV4dC4gIElmIHRoZSB0ZXh0IGlzIGVxdWFsLAoreW91IHdpbGwgZ2V0IG5vIHdhcm5pbmcuCisKK0lmIHlvdSBkb24ndCBnZXQgd2FybmVkIG9mdGVuIGVub3VnaCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQuCisKKwkJCQkJCQkqOmNoZWNrdCogKjpjaGVja3RpbWUqCis6Y2hlY2t0W2ltZV0JCUNoZWNrIGlmIGFueSBidWZmZXJzIHdlcmUgY2hhbmdlZCBvdXRzaWRlIG9mIFZpbS4KKwkJCVRoaXMgY2hlY2tzIGFuZCB3YXJucyB5b3UgaWYgeW91IHdvdWxkIGVuZCB1cCB3aXRoIHR3bworCQkJdmVyc2lvbnMgb2YgYSBmaWxlLgorCQkJSWYgdGhpcyBpcyBjYWxsZWQgZnJvbSBhbiBhdXRvY29tbWFuZCwgYSAiOmdsb2JhbCIKKwkJCWNvbW1hbmQgb3IgaXMgbm90IHR5cGVkIHRoZSBhY3R1YWwgY2hlY2sgaXMgcG9zdHBvbmVkCisJCQl1bnRpbCBhIG1vbWVudCB0aGUgc2lkZSBlZmZlY3RzIChyZWxvYWRpbmcgdGhlIGZpbGUpCisJCQl3b3VsZCBiZSBoYXJtbGVzcy4KKwkJCUVhY2ggbG9hZGVkIGJ1ZmZlciBpcyBjaGVja2VkIGZvciBpdHMgYXNzb2NpYXRlZCBmaWxlCisJCQliZWluZyBjaGFuZ2VkLiAgSWYgdGhlIGZpbGUgd2FzIGNoYW5nZWQgVmltIHdpbGwgdGFrZQorCQkJYWN0aW9uLiAgSWYgdGhlcmUgYXJlIG5vIGNoYW5nZXMgaW4gdGhlIGJ1ZmZlciBhbmQKKwkJCSdhdXRvcmVhZCcgaXMgc2V0LCB0aGUgYnVmZmVyIGlzIHJlbG9hZGVkLiAgT3RoZXJ3aXNlLAorCQkJeW91IGFyZSBvZmZlcmVkIHRoZSBjaG9pY2Ugb2YgcmVsb2FkaW5nIHRoZSBmaWxlLiAgSWYKKwkJCXRoZSBmaWxlIHdhcyBkZWxldGVkIHlvdSBnZXQgYW4gZXJyb3IgbWVzc2FnZS4KKwkJCUlmIHRoZSBmaWxlIHByZXZpb3VzbHkgZGlkbid0IGV4aXN0IHlvdSBnZXQgYSB3YXJuaW5nCisJCQlpZiBpdCBleGlzdHMgbm93LgorCQkJT25jZSBhIGZpbGUgaGFzIGJlZW4gY2hlY2tlZCB0aGUgdGltZXN0YW1wIGlzIHJlc2V0LAorCQkJeW91IHdpbGwgbm90IGJlIHdhcm5lZCBhZ2Fpbi4KKworOltOXWNoZWNrdFtpbWVdIHtmaWxlbmFtZX0KKzpbTl1jaGVja3RbaW1lXSBbTl0KKwkJCUNoZWNrIHRoZSB0aW1lc3RhbXAgb2YgYSBzcGVjaWZpYyBidWZmZXIuICBUaGUgYnVmZmVyCisJCQltYXkgYmUgc3BlY2lmaWVkIGJ5IG5hbWUsIG51bWJlciBvciB3aXRoIGEgcGF0dGVybi4KKworCitCZWZvcmUgd3JpdGluZyBhIGZpbGUgdGhlIHRpbWVzdGFtcCBpcyBjaGVja2VkLiAgSWYgaXQgaGFzIGNoYW5nZWQsIFZpbSB3aWxsCithc2sgaWYgeW91IHJlYWxseSB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgZmlsZToKKworCVdBUk5JTkc6IFRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgcmVhZGluZyBpdCEhIQorCURvIHlvdSByZWFsbHkgd2FudCB0byB3cml0ZSB0byBpdCAoeS9uKT8KKworSWYgeW91IGhpdCAneScgVmltIHdpbGwgY29udGludWUgd3JpdGluZyB0aGUgZmlsZS4gIElmIHlvdSBoaXQgJ24nIHRoZSB3cml0ZSBpcworYWJvcnRlZC4gIElmIHlvdSB1c2VkICI6d3EiIG9yICJaWiIgVmltIHdpbGwgbm90IGV4aXQsIHlvdSB3aWxsIGdldCBhbm90aGVyCitjaGFuY2UgdG8gd3JpdGUgdGhlIGZpbGUuCisKK1RoZSBtZXNzYWdlIHdvdWxkIG5vcm1hbGx5IG1lYW4gdGhhdCBzb21lYm9keSBoYXMgd3JpdHRlbiB0byB0aGUgZmlsZSBhZnRlcgordGhlIGVkaXQgc2Vzc2lvbiBzdGFydGVkLiAgVGhpcyBjb3VsZCBiZSBhbm90aGVyIHBlcnNvbiwgaW4gd2hpY2ggY2FzZSB5b3UKK3Byb2JhYmx5IHdhbnQgdG8gY2hlY2sgaWYgeW91ciBjaGFuZ2VzIHRvIHRoZSBmaWxlIGFuZCB0aGUgY2hhbmdlcyBmcm9tIHRoZQorb3RoZXIgcGVyc29uIHNob3VsZCBiZSBtZXJnZWQuICBXcml0ZSB0aGUgZmlsZSB1bmRlciBhbm90aGVyIG5hbWUgYW5kIGNoZWNrIGZvcgorZGlmZmVyZW5jZXMgKHRoZSAiZGlmZiIgcHJvZ3JhbSBjYW4gYmUgdXNlZCBmb3IgdGhpcykuCisKK0l0IGlzIGFsc28gcG9zc2libGUgdGhhdCB5b3UgbW9kaWZpZWQgdGhlIGZpbGUgeW91cnNlbGYsIGZyb20gYW5vdGhlciBlZGl0CitzZXNzaW9uIG9yIHdpdGggYW5vdGhlciBjb21tYW5kIChlLmcuLCBhIGZpbHRlciBjb21tYW5kKS4gIFRoZW4geW91IHdpbGwga25vdword2hpY2ggdmVyc2lvbiBvZiB0aGUgZmlsZSB5b3Ugd2FudCB0byBrZWVwLgorCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9ldmFsLnR4dCBiL3J1bnRpbWUvZG9jL2V2YWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ODVmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9ldmFsLnR4dApAQCAtMCwwICsxLDQ1ODMgQEAKKypldmFsLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMTgKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitFeHByZXNzaW9uIGV2YWx1YXRpb24JCQkqZXhwcmVzc2lvbiogKmV4cHIqICpFMTUqICpldmFsKgorCitVc2luZyBleHByZXNzaW9ucyBpcyBpbnRyb2R1Y2VkIGluIGNoYXB0ZXIgNDEgb2YgdGhlIHVzZXIgbWFudWFsIHx1c3JfNDEudHh0fC4KKworTm90ZTogRXhwcmVzc2lvbiBldmFsdWF0aW9uIGNhbiBiZSBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuICBJZiB0aGlzIGhhcyBiZWVuCitkb25lLCB0aGUgZmVhdHVyZXMgaW4gdGhpcyBkb2N1bWVudCBhcmUgbm90IGF2YWlsYWJsZS4gIFNlZSB8K2V2YWx8IGFuZCB0aGUKK2xhc3QgY2hhcHRlciBiZWxvdy4KKworMS4gIFZhcmlhYmxlcwkJfHZhcmlhYmxlc3wKKzIuICBFeHByZXNzaW9uIHN5bnRheAl8ZXhwcmVzc2lvbi1zeW50YXh8CiszLiAgSW50ZXJuYWwgdmFyaWFibGUJfGludGVybmFsLXZhcmlhYmxlc3wKKzQuICBCdWlsdGluIEZ1bmN0aW9ucwl8ZnVuY3Rpb25zfAorNS4gIERlZmluaW5nIGZ1bmN0aW9ucwl8dXNlci1mdW5jdGlvbnN8Cis2LiAgQ3VybHkgYnJhY2VzIG5hbWVzCXxjdXJseS1icmFjZXMtbmFtZXN8Cis3LiAgQ29tbWFuZHMJCXxleHByZXNzaW9uLWNvbW1hbmRzfAorOC4gIEV4Y2VwdGlvbiBoYW5kbGluZwl8ZXhjZXB0aW9uLWhhbmRsaW5nfAorOS4gIEV4YW1wbGVzCQl8ZXZhbC1leGFtcGxlc3wKKzEwLiBObyArZXZhbCBmZWF0dXJlCXxuby1ldmFsLWZlYXR1cmV8CisxMS4gVGhlIHNhbmRib3gJCXxldmFsLXNhbmRib3h8CisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBWYXJpYWJsZXMJCQkJCQkqdmFyaWFibGVzKgorCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIHZhcmlhYmxlczoKKworTnVtYmVyCQlhIDMyIGJpdCBzaWduZWQgbnVtYmVyLgorU3RyaW5nCQlhIE5VTCB0ZXJtaW5hdGVkIHN0cmluZyBvZiA4LWJpdCB1bnNpZ25lZCBjaGFyYWN0ZXJzLgorCitUaGVzZSBhcmUgY29udmVydGVkIGF1dG9tYXRpY2FsbHksIGRlcGVuZGluZyBvbiBob3cgdGhleSBhcmUgdXNlZC4KKworQ29udmVyc2lvbiBmcm9tIGEgTnVtYmVyIHRvIGEgU3RyaW5nIGlzIGJ5IG1ha2luZyB0aGUgQVNDSUkgcmVwcmVzZW50YXRpb24gb2YKK3RoZSBOdW1iZXIuICBFeGFtcGxlczogPgorCU51bWJlciAxMjMJLS0+CVN0cmluZyAiMTIzIgorCU51bWJlciAwCS0tPglTdHJpbmcgIjAiCisJTnVtYmVyIC0xCS0tPglTdHJpbmcgIi0xIgorCitDb252ZXJzaW9uIGZyb20gYSBTdHJpbmcgdG8gYSBOdW1iZXIgaXMgZG9uZSBieSBjb252ZXJ0aW5nIHRoZSBmaXJzdCBkaWdpdHMKK3RvIGEgbnVtYmVyLiAgSGV4YWRlY2ltYWwgIjB4ZjkiIGFuZCBPY3RhbCAiMDE3IiBudW1iZXJzIGFyZSByZWNvZ25pemVkLiAgSWYKK3RoZSBTdHJpbmcgZG9lc24ndCBzdGFydCB3aXRoIGRpZ2l0cywgdGhlIHJlc3VsdCBpcyB6ZXJvLiAgRXhhbXBsZXM6ID4KKwlTdHJpbmcgIjQ1NiIJLS0+CU51bWJlciA0NTYKKwlTdHJpbmcgIjZiYXIiCS0tPglOdW1iZXIgNgorCVN0cmluZyAiZm9vIgktLT4JTnVtYmVyIDAKKwlTdHJpbmcgIjB4ZjEiCS0tPglOdW1iZXIgMjQxCisJU3RyaW5nICIwMTAwIgktLT4JTnVtYmVyIDY0CisJU3RyaW5nICItOCIJLS0+CU51bWJlciAtOAorCVN0cmluZyAiKzgiCS0tPglOdW1iZXIgMAorCitUbyBmb3JjZSBjb252ZXJzaW9uIGZyb20gU3RyaW5nIHRvIE51bWJlciwgYWRkIHplcm8gdG8gaXQ6ID4KKwk6ZWNobyAiMDEwMCIgKyAwCisKK0ZvciBib29sZWFuIG9wZXJhdG9ycyBOdW1iZXJzIGFyZSB1c2VkLiAgWmVybyBpcyBGQUxTRSwgbm9uLXplcm8gaXMgVFJVRS4KKworTm90ZSB0aGF0IGluIHRoZSBjb21tYW5kID4KKwk6aWYgImZvbyIKKyJmb28iIGlzIGNvbnZlcnRlZCB0byAwLCB3aGljaCBtZWFucyBGQUxTRS4gIFRvIHRlc3QgZm9yIGEgbm9uLWVtcHR5IHN0cmluZywKK3VzZSBzdHJsZW4oKTogPgorCTppZiBzdHJsZW4oImZvbyIpCisKK0lmIHlvdSBuZWVkIHRvIGtub3cgdGhlIHR5cGUgb2YgYSB2YXJpYWJsZSBvciBleHByZXNzaW9uLCB1c2UgdGhlIHx0eXBlKCl8CitmdW5jdGlvbi4KKworV2hlbiB0aGUgJyEnIGZsYWcgaXMgaW5jbHVkZWQgaW4gdGhlICd2aW1pbmZvJyBvcHRpb24sIGdsb2JhbCB2YXJpYWJsZXMgdGhhdAorc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyLCBhbmQgZG9uJ3QgY29udGFpbiBhIGxvd2VyY2FzZSBsZXR0ZXIsIGFyZQorc3RvcmVkIGluIHRoZSB2aW1pbmZvIGZpbGUgfHZpbWluZm8tZmlsZXwuCisKK1doZW4gdGhlICdzZXNzaW9ub3B0aW9ucycgb3B0aW9uIGNvbnRhaW5zICJnbG9iYWwiLCBnbG9iYWwgdmFyaWFibGVzIHRoYXQKK3N0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciBhbmQgY29udGFpbiBhdCBsZWFzdCBvbmUgbG93ZXJjYXNlIGxldHRlciBhcmUKK3N0b3JlZCBpbiB0aGUgc2Vzc2lvbiBmaWxlIHxzZXNzaW9uLWZpbGV8LgorCit2YXJpYWJsZSBuYW1lCQljYW4gYmUgc3RvcmVkIHdoZXJlIH4KK215X3Zhcl82CQlub3QKK015X1Zhcl82CQlzZXNzaW9uIGZpbGUKK01ZX1ZBUl82CQl2aW1pbmZvIGZpbGUKKworCitJdCdzIHBvc3NpYmxlIHRvIGZvcm0gYSB2YXJpYWJsZSBuYW1lIHdpdGggY3VybHkgYnJhY2VzLCBzZWUKK3xjdXJseS1icmFjZXMtbmFtZXN8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIEV4cHJlc3Npb24gc3ludGF4CQkJCQkqZXhwcmVzc2lvbi1zeW50YXgqCisKK0V4cHJlc3Npb24gc3ludGF4IHN1bW1hcnksIGZyb20gbGVhc3QgdG8gbW9zdCBzaWduaWZpY2FudDoKKworfGV4cHIxfCBleHByMiA/IGV4cHIxIDogZXhwcjEJaWYtdGhlbi1lbHNlCisKK3xleHByMnwJZXhwcjMgfHwgZXhwcjMgLi4JbG9naWNhbCBPUgorCit8ZXhwcjN8CWV4cHI0ICYmIGV4cHI0IC4uCWxvZ2ljYWwgQU5ECisKK3xleHByNHwJZXhwcjUgPT0gZXhwcjUJCWVxdWFsCisJZXhwcjUgIT0gZXhwcjUJCW5vdCBlcXVhbAorCWV4cHI1ID4JIGV4cHI1CQlncmVhdGVyIHRoYW4KKwlleHByNSA+PSBleHByNQkJZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisJZXhwcjUgPAkgZXhwcjUJCXNtYWxsZXIgdGhhbgorCWV4cHI1IDw9IGV4cHI1CQlzbWFsbGVyIHRoYW4gb3IgZXF1YWwKKwlleHByNSA9fiBleHByNQkJcmVnZXhwIG1hdGNoZXMKKwlleHByNSAhfiBleHByNQkJcmVnZXhwIGRvZXNuJ3QgbWF0Y2gKKworCWV4cHI1ID09PyBleHByNQkJZXF1YWwsIGlnbm9yaW5nIGNhc2UKKwlleHByNSA9PSMgZXhwcjUJCWVxdWFsLCBtYXRjaCBjYXNlCisJZXRjLgkJCUFzIGFib3ZlLCBhcHBlbmQgPyBmb3IgaWdub3JpbmcgY2FzZSwgIyBmb3IKKwkJCQltYXRjaGluZyBjYXNlCisKK3xleHByNXwJZXhwcjYgKwkgZXhwcjYgLi4JbnVtYmVyIGFkZGl0aW9uCisJZXhwcjYgLQkgZXhwcjYgLi4JbnVtYmVyIHN1YnRyYWN0aW9uCisJZXhwcjYgLgkgZXhwcjYgLi4Jc3RyaW5nIGNvbmNhdGVuYXRpb24KKworfGV4cHI2fAlleHByNyAqCSBleHByNyAuLgludW1iZXIgbXVsdGlwbGljYXRpb24KKwlleHByNyAvCSBleHByNyAuLgludW1iZXIgZGl2aXNpb24KKwlleHByNyAlCSBleHByNyAuLgludW1iZXIgbW9kdWxvCisKK3xleHByN3wJISBleHByNwkJCWxvZ2ljYWwgTk9UCisJLSBleHByNwkJCXVuYXJ5IG1pbnVzCisJKyBleHByNwkJCXVuYXJ5IHBsdXMKKwlleHByOAorCit8ZXhwcjh8CWV4cHI5W2V4cHIxXQkJaW5kZXggaW4gU3RyaW5nCisKK3xleHByOXwJbnVtYmVyCQkJbnVtYmVyIGNvbnN0YW50CisJInN0cmluZyIJCXN0cmluZyBjb25zdGFudAorCSdzdHJpbmcnCQlsaXRlcmFsIHN0cmluZyBjb25zdGFudAorCSZvcHRpb24JCQlvcHRpb24gdmFsdWUKKwkoZXhwcjEpCQkJbmVzdGVkIGV4cHJlc3Npb24KKwl2YXJpYWJsZQkJaW50ZXJuYWwgdmFyaWFibGUKKwl2YXtyaWF9YmxlCQlpbnRlcm5hbCB2YXJpYWJsZSB3aXRoIGN1cmx5IGJyYWNlcworCSRWQVIJCQllbnZpcm9ubWVudCB2YXJpYWJsZQorCUByCQkJY29udGVudHMgb2YgcmVnaXN0ZXIgJ3InCisJZnVuY3Rpb24oZXhwcjEsIC4uLikJZnVuY3Rpb24gY2FsbAorCWZ1bmN7dGl9b24oZXhwcjEsIC4uLikJZnVuY3Rpb24gY2FsbCB3aXRoIGN1cmx5IGJyYWNlcworCisKKyIuLiIgaW5kaWNhdGVzIHRoYXQgdGhlIG9wZXJhdGlvbnMgaW4gdGhpcyBsZXZlbCBjYW4gYmUgY29uY2F0ZW5hdGVkLgorRXhhbXBsZTogPgorCSZudSB8fCAmbGlzdCAmJiAmc2hlbGwgPT0gImNzaCIKKworQWxsIGV4cHJlc3Npb25zIHdpdGhpbiBvbmUgbGV2ZWwgYXJlIHBhcnNlZCBmcm9tIGxlZnQgdG8gcmlnaHQuCisKKworZXhwcjEJCQkJCQkJKmV4cHIxKiAqRTEwOSoKKy0tLS0tCisKK2V4cHIyID8gZXhwcjEgOiBleHByMQorCitUaGUgZXhwcmVzc2lvbiBiZWZvcmUgdGhlICc/JyBpcyBldmFsdWF0ZWQgdG8gYSBudW1iZXIuICBJZiBpdCBldmFsdWF0ZXMgdG8KK25vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBiZXR3ZWVuIHRoZSAnPycgYW5kICc6JywKK290aGVyd2lzZSB0aGUgcmVzdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBhZnRlciB0aGUgJzonLgorRXhhbXBsZTogPgorCTplY2hvIGxudW0gPT0gMSA/ICJ0b3AiIDogbG51bQorCitTaW5jZSB0aGUgZmlyc3QgZXhwcmVzc2lvbiBpcyBhbiAiZXhwcjIiLCBpdCBjYW5ub3QgY29udGFpbiBhbm90aGVyID86LiAgVGhlCitvdGhlciB0d28gZXhwcmVzc2lvbnMgY2FuLCB0aHVzIGFsbG93IGZvciByZWN1cnNpdmUgdXNlIG9mID86LgorRXhhbXBsZTogPgorCTplY2hvIGxudW0gPT0gMSA/ICJ0b3AiIDogbG51bSA9PSAxMDAwID8gImxhc3QiIDogbG51bQorCitUbyBrZWVwIHRoaXMgcmVhZGFibGUsIHVzaW5nIHxsaW5lLWNvbnRpbnVhdGlvbnwgaXMgc3VnZ2VzdGVkOiA+CisJOmVjaG8gbG51bSA9PSAxCisJOlwJPyAidG9wIgorCTpcCTogbG51bSA9PSAxMDAwCisJOlwJCT8gImxhc3QiCisJOlwJCTogbG51bQorCisKK2V4cHIyIGFuZCBleHByMwkJCQkJCSpleHByMiogKmV4cHIzKgorLS0tLS0tLS0tLS0tLS0tCisKKwkJCQkJKmV4cHItYmFyYmFyKiAqZXhwci0mJioKK1RoZSAifHwiIGFuZCAiJiYiIG9wZXJhdG9ycyB0YWtlIG9uZSBhcmd1bWVudCBvbiBlYWNoIHNpZGUuICBUaGUgYXJndW1lbnRzCithcmUgKGNvbnZlcnRlZCB0bykgTnVtYmVycy4gIFRoZSByZXN1bHQgaXM6CisKKwkgaW5wdXQJCQkJIG91dHB1dCB+CituMQkJbjIJCW4xIHx8IG4yCW4xICYmIG4yIH4KK3plcm8JCXplcm8JCXplcm8JCXplcm8KK3plcm8JCW5vbi16ZXJvCW5vbi16ZXJvCXplcm8KK25vbi16ZXJvCXplcm8JCW5vbi16ZXJvCXplcm8KK25vbi16ZXJvCW5vbi16ZXJvCW5vbi16ZXJvCW5vbi16ZXJvCisKK1RoZSBvcGVyYXRvcnMgY2FuIGJlIGNvbmNhdGVuYXRlZCwgZm9yIGV4YW1wbGU6ID4KKworCSZudSB8fCAmbGlzdCAmJiAmc2hlbGwgPT0gImNzaCIKKworTm90ZSB0aGF0ICImJiIgdGFrZXMgcHJlY2VkZW5jZSBvdmVyICJ8fCIsIHNvIHRoaXMgaGFzIHRoZSBtZWFuaW5nIG9mOiA+CisKKwkmbnUgfHwgKCZsaXN0ICYmICZzaGVsbCA9PSAiY3NoIikKKworT25jZSB0aGUgcmVzdWx0IGlzIGtub3duLCB0aGUgZXhwcmVzc2lvbiAic2hvcnQtY2lyY3VpdHMiLCB0aGF0IGlzLCBmdXJ0aGVyCithcmd1bWVudHMgYXJlIG5vdCBldmFsdWF0ZWQuICBUaGlzIGlzIGxpa2Ugd2hhdCBoYXBwZW5zIGluIEMuICBGb3IgZXhhbXBsZTogPgorCisJbGV0IGEgPSAxCisJZWNobyBhIHx8IGIKKworVGhpcyBpcyB2YWxpZCBldmVuIGlmIHRoZXJlIGlzIG5vIHZhcmlhYmxlIGNhbGxlZCAiYiIgYmVjYXVzZSAiYSIgaXMgbm9uLXplcm8sCitzbyB0aGUgcmVzdWx0IG11c3QgYmUgbm9uLXplcm8uICBTaW1pbGFybHkgYmVsb3c6ID4KKworCWVjaG8gZXhpc3RzKCJiIikgJiYgYiA9PSAieWVzIgorCitUaGlzIGlzIHZhbGlkIHdoZXRoZXIgImIiIGhhcyBiZWVuIGRlZmluZWQgb3Igbm90LiAgVGhlIHNlY29uZCBjbGF1c2Ugd2lsbAorb25seSBiZSBldmFsdWF0ZWQgaWYgImIiIGhhcyBiZWVuIGRlZmluZWQuCisKKworZXhwcjQJCQkJCQkJKmV4cHI0KgorLS0tLS0KKworZXhwcjUge2NtcH0gZXhwcjUKKworQ29tcGFyZSB0d28gZXhwcjUgZXhwcmVzc2lvbnMsIHJlc3VsdGluZyBpbiBhIDAgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNlLCBvciAxCitpZiBpdCBldmFsdWF0ZXMgdG8gdHJ1ZS4KKworCQkJKmV4cHItPT0qICAqZXhwci0hPSogICpleHByLT4qICAgKmV4cHItPj0qCisJCQkqZXhwci08KiAgICpleHByLTw9KiAgKmV4cHItPX4qICAqZXhwci0hfioKKwkJCSpleHByLT09IyogKmV4cHItIT0jKiAqZXhwci0+IyogICpleHByLT49IyoKKwkJCSpleHByLTwjKiAgKmV4cHItPD0jKiAqZXhwci09fiMqICpleHByLSF+IyoKKwkJCSpleHByLT09PyogKmV4cHItIT0/KiAqZXhwci0+PyogICpleHByLT49PyoKKwkJCSpleHByLTw/KiAgKmV4cHItPD0/KiAqZXhwci09fj8qICpleHByLSF+PyoKKwkJdXNlICdpZ25vcmVjYXNlJyAgICBtYXRjaCBjYXNlCSAgIGlnbm9yZSBjYXNlIH4KK2VxdWFsCQkJPT0JCT09IwkJPT0/Citub3QgZXF1YWwJCSE9CQkhPSMJCSE9PworZ3JlYXRlciB0aGFuCQk+CQk+IwkJPj8KK2dyZWF0ZXIgdGhhbiBvciBlcXVhbAk+PQkJPj0jCQk+PT8KK3NtYWxsZXIgdGhhbgkJPAkJPCMJCTw/CitzbWFsbGVyIHRoYW4gb3IgZXF1YWwJPD0JCTw9IwkJPD0/CityZWdleHAgbWF0Y2hlcwkJPX4JCT1+IwkJPX4/CityZWdleHAgZG9lc24ndCBtYXRjaAkhfgkJIX4jCQkhfj8KKworRXhhbXBsZXM6CisiYWJjIiA9PSMgIkFiYyIJICBldmFsdWF0ZXMgdG8gMAorImFiYyIgPT0/ICJBYmMiCSAgZXZhbHVhdGVzIHRvIDEKKyJhYmMiID09ICJBYmMiCSAgZXZhbHVhdGVzIHRvIDEgaWYgJ2lnbm9yZWNhc2UnIGlzIHNldCwgMCBvdGhlcndpc2UKKworV2hlbiBjb21wYXJpbmcgYSBTdHJpbmcgd2l0aCBhIE51bWJlciwgdGhlIFN0cmluZyBpcyBjb252ZXJ0ZWQgdG8gYSBOdW1iZXIsCithbmQgdGhlIGNvbXBhcmlzb24gaXMgZG9uZSBvbiBOdW1iZXJzLiAgVGhpcyBtZWFucyB0aGF0ICIwID09ICd4JyIgaXMgVFJVRSwKK2JlY2F1c2UgJ3gnIGNvbnZlcnRlZCB0byBhIE51bWJlciBpcyB6ZXJvLgorCitXaGVuIGNvbXBhcmluZyB0d28gU3RyaW5ncywgdGhpcyBpcyBkb25lIHdpdGggc3RyY21wKCkgb3Igc3RyaWNtcCgpLiAgVGhpcworcmVzdWx0cyBpbiB0aGUgbWF0aGVtYXRpY2FsIGRpZmZlcmVuY2UgKGNvbXBhcmluZyBieXRlIHZhbHVlcyksIG5vdAorbmVjZXNzYXJpbHkgdGhlIGFscGhhYmV0aWNhbCBkaWZmZXJlbmNlIGluIHRoZSBsb2NhbCBsYW5ndWFnZS4KKworV2hlbiB1c2luZyB0aGUgb3BlcmF0b3JzIHdpdGggYSB0cmFpbGluZyAnIyIsIG9yIHRoZSBzaG9ydCB2ZXJzaW9uIGFuZAorJ2lnbm9yZWNhc2UnIGlzIG9mZiwgdGhlIGNvbXBhcmluZyBpcyBkb25lIHdpdGggc3RyY21wKCkuCisKK1doZW4gdXNpbmcgdGhlIG9wZXJhdG9ycyB3aXRoIGEgdHJhaWxpbmcgJz8nLCBvciB0aGUgc2hvcnQgdmVyc2lvbiBhbmQKKydpZ25vcmVjYXNlJyBpcyBzZXQsIHRoZSBjb21wYXJpbmcgaXMgZG9uZSB3aXRoIHN0cmljbXAoKS4KKworVGhlICI9fiIgYW5kICIhfiIgb3BlcmF0b3JzIG1hdGNoIHRoZSBsZWZ0aGFuZCBhcmd1bWVudCB3aXRoIHRoZSByaWdodGhhbmQKK2FyZ3VtZW50LCB3aGljaCBpcyB1c2VkIGFzIGEgcGF0dGVybi4gIFNlZSB8cGF0dGVybnwgZm9yIHdoYXQgYSBwYXR0ZXJuIGlzLgorVGhpcyBtYXRjaGluZyBpcyBhbHdheXMgZG9uZSBsaWtlICdtYWdpYycgd2FzIHNldCBhbmQgJ2Nwb3B0aW9ucycgaXMgZW1wdHksIG5vCittYXR0ZXIgd2hhdCB0aGUgYWN0dWFsIHZhbHVlIG9mICdtYWdpYycgb3IgJ2Nwb3B0aW9ucycgaXMuICBUaGlzIG1ha2VzIHNjcmlwdHMKK3BvcnRhYmxlLiAgVG8gYXZvaWQgYmFja3NsYXNoZXMgaW4gdGhlIHJlZ2V4cCBwYXR0ZXJuIHRvIGJlIGRvdWJsZWQsIHVzZSBhCitzaW5nbGUtcXVvdGUgc3RyaW5nLCBzZWUgfGxpdGVyYWwtc3RyaW5nfC4KK1NpbmNlIGEgc3RyaW5nIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzaW5nbGUgbGluZSwgYSBtdWx0aS1saW5lIHBhdHRlcm4KKyhjb250YWluaW5nIFxuLCBiYWNrc2xhc2gtbikgd2lsbCBub3QgbWF0Y2guICBIb3dldmVyLCBhIGxpdGVyYWwgTkwgY2hhcmFjdGVyCitjYW4gYmUgbWF0Y2hlZCBsaWtlIGFuIG9yZGluYXJ5IGNoYXJhY3Rlci4gIEV4YW1wbGVzOgorCSJmb29cbmJhciIgPX4gIlxuIglldmFsdWF0ZXMgdG8gMQorCSJmb29cbmJhciIgPX4gIlxcbiIJZXZhbHVhdGVzIHRvIDAKKworCitleHByNSBhbmQgZXhwcjYJCQkJCQkqZXhwcjUqICpleHByNioKKy0tLS0tLS0tLS0tLS0tLQorZXhwcjYgKwkgZXhwcjYgLi4JbnVtYmVyIGFkZGl0aW9uCQkqZXhwci0rKgorZXhwcjYgLQkgZXhwcjYgLi4JbnVtYmVyIHN1YnRyYWN0aW9uCSpleHByLS0qCitleHByNiAuCSBleHByNiAuLglzdHJpbmcgY29uY2F0ZW5hdGlvbgkqZXhwci0uKgorCitleHByNyAqCSBleHByNyAuLgludW1iZXIgbXVsdGlwbGljYXRpb24JKmV4cHItc3RhcioKK2V4cHI3IC8JIGV4cHI3IC4uCW51bWJlciBkaXZpc2lvbgkJKmV4cHItLyoKK2V4cHI3ICUJIGV4cHI3IC4uCW51bWJlciBtb2R1bG8JCSpleHByLSUqCisKK0ZvciBhbGwsIGV4Y2VwdCAiLiIsIFN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBOdW1iZXJzLgorCitOb3RlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gIisiIGFuZCAiLiI6CisJIjEyMyIgKyAiNDU2IiA9IDU3OQorCSIxMjMiIC4gIjQ1NiIgPSAiMTIzNDU2IgorCitXaGVuIHRoZSByaWdodGhhbmQgc2lkZSBvZiAnLycgaXMgemVybywgdGhlIHJlc3VsdCBpcyAweDdmZmZmZmZmLgorV2hlbiB0aGUgcmlnaHRoYW5kIHNpZGUgb2YgJyUnIGlzIHplcm8sIHRoZSByZXN1bHQgaXMgMC4KKworCitleHByNwkJCQkJCQkqZXhwcjcqCistLS0tLQorISBleHByNwkJCWxvZ2ljYWwgTk9UCQkqZXhwci0hKgorLSBleHByNwkJCXVuYXJ5IG1pbnVzCQkqZXhwci11bmFyeS0tKgorKyBleHByNwkJCXVuYXJ5IHBsdXMJCSpleHByLXVuYXJ5LSsqCisKK0ZvciAnIScgbm9uLXplcm8gYmVjb21lcyB6ZXJvLCB6ZXJvIGJlY29tZXMgb25lLgorRm9yICctJyB0aGUgc2lnbiBvZiB0aGUgbnVtYmVyIGlzIGNoYW5nZWQuCitGb3IgJysnIHRoZSBudW1iZXIgaXMgdW5jaGFuZ2VkLgorCitBIFN0cmluZyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIE51bWJlciBmaXJzdC4KKworVGhlc2UgdGhyZWUgY2FuIGJlIHJlcGVhdGVkIGFuZCBtaXhlZC4gIEV4YW1wbGVzOgorCSEtMQkgICAgPT0gMAorCSEhOAkgICAgPT0gMQorCS0tOQkgICAgPT0gOQorCisKK2V4cHI4CQkJCQkJCSpleHByOCoKKy0tLS0tCitleHByOVtleHByMV0JCWluZGV4IGluIFN0cmluZwkJKmV4cHItW10qICpFMTExKgorCitUaGlzIHJlc3VsdHMgaW4gYSBTdHJpbmcgdGhhdCBjb250YWlucyB0aGUgZXhwcjEndGggc2luZ2xlIGJ5dGUgZnJvbSBleHByOS4KK2V4cHI5IGlzIHVzZWQgYXMgYSBTdHJpbmcsIGV4cHIxIGFzIGEgTnVtYmVyLiAgTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB3b3JrIGZvcgorbXVsdGktYnl0ZSBlbmNvZGluZ3MuCisKK05vdGUgdGhhdCBpbmRleCB6ZXJvIGdpdmVzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuICBUaGlzIGlzIGxpa2UgaXQgd29ya3MgaW4gQy4KK0NhcmVmdWw6IHRleHQgY29sdW1uIG51bWJlcnMgc3RhcnQgd2l0aCBvbmUhICBFeGFtcGxlLCB0byBnZXQgdGhlIGNoYXJhY3RlcgordW5kZXIgdGhlIGN1cnNvcjogPgorCTpsZXQgYyA9IGdldGxpbmUobGluZSgiLiIpKVtjb2woIi4iKSAtIDFdCisKK0lmIHRoZSBsZW5ndGggb2YgdGhlIFN0cmluZyBpcyBsZXNzIHRoYW4gdGhlIGluZGV4LCB0aGUgcmVzdWx0IGlzIGFuIGVtcHR5CitTdHJpbmcuCisKKwkJCQkJCSpleHByOSoKK251bWJlcgorLS0tLS0tCitudW1iZXIJCQludW1iZXIgY29uc3RhbnQJCSpleHByLW51bWJlcioKKworRGVjaW1hbCwgSGV4YWRlY2ltYWwgKHN0YXJ0aW5nIHdpdGggMHggb3IgMFgpLCBvciBPY3RhbCAoc3RhcnRpbmcgd2l0aCAwKS4KKworCitzdHJpbmcJCQkJCQkJKmV4cHItc3RyaW5nKiAqRTExNCoKKy0tLS0tLQorInN0cmluZyIJCXN0cmluZyBjb25zdGFudAkJKmV4cHItcXVvdGUqCisKK05vdGUgdGhhdCBkb3VibGUgcXVvdGVzIGFyZSB1c2VkLgorCitBIHN0cmluZyBjb25zdGFudCBhY2NlcHRzIHRoZXNlIHNwZWNpYWwgY2hhcmFjdGVyczoKK1wuLi4JdGhyZWUtZGlnaXQgb2N0YWwgbnVtYmVyIChlLmcuLCAiXDMxNiIpCitcLi4JdHdvLWRpZ2l0IG9jdGFsIG51bWJlciAobXVzdCBiZSBmb2xsb3dlZCBieSBub24tZGlnaXQpCitcLglvbmUtZGlnaXQgb2N0YWwgbnVtYmVyIChtdXN0IGJlIGZvbGxvd2VkIGJ5IG5vbi1kaWdpdCkKK1x4Li4JYnl0ZSBzcGVjaWZpZWQgd2l0aCB0d28gaGV4IG51bWJlcnMgKGUuZy4sICJceDFmIikKK1x4LglieXRlIHNwZWNpZmllZCB3aXRoIG9uZSBoZXggbnVtYmVyIChtdXN0IGJlIGZvbGxvd2VkIGJ5IG5vbi1oZXggY2hhcikKK1xYLi4Jc2FtZSBhcyBceC4uCitcWC4Jc2FtZSBhcyBceC4KK1x1Li4uLiAgY2hhcmFjdGVyIHNwZWNpZmllZCB3aXRoIHVwIHRvIDQgaGV4IG51bWJlcnMsIHN0b3JlZCBhY2NvcmRpbmcgdG8gdGhlCisJY3VycmVudCB2YWx1ZSBvZiAnZW5jb2RpbmcnIChlLmcuLCAiXHUwMmE0IikKK1xVLi4uLglzYW1lIGFzIFx1Li4uLgorXGIJYmFja3NwYWNlIDxCUz4KK1xlCWVzY2FwZSA8RXNjPgorXGYJZm9ybWZlZWQgPEZGPgorXG4JbmV3bGluZSA8Tkw+CitccglyZXR1cm4gPENSPgorXHQJdGFiIDxUYWI+CitcXAliYWNrc2xhc2gKK1wiCWRvdWJsZSBxdW90ZQorXDx4eHg+CVNwZWNpYWwga2V5IG5hbWVkICJ4eHgiLiAgZS5nLiAiXDxDLVc+IiBmb3IgQ1RSTC1XLgorCitOb3RlIHRoYXQgIlwwMDAiIGFuZCAiXHgwMCIgZm9yY2UgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorCisKK2xpdGVyYWwtc3RyaW5nCQkJCQkJKmxpdGVyYWwtc3RyaW5nKiAqRTExNSoKKy0tLS0tLS0tLS0tLS0tLQorJ3N0cmluZycJCWxpdGVyYWwgc3RyaW5nIGNvbnN0YW50CQkqZXhwci0nKgorCitOb3RlIHRoYXQgc2luZ2xlIHF1b3RlcyBhcmUgdXNlZC4KKworVGhpcyBzdHJpbmcgaXMgdGFrZW4gbGl0ZXJhbGx5LiAgTm8gYmFja3NsYXNoZXMgYXJlIHJlbW92ZWQgb3IgaGF2ZSBhIHNwZWNpYWwKK21lYW5pbmcuICBBIGxpdGVyYWwtc3RyaW5nIGNhbm5vdCBjb250YWluIGEgc2luZ2xlIHF1b3RlLiAgVXNlIGEgbm9ybWFsIHN0cmluZworZm9yIHRoYXQuCisKKworb3B0aW9uCQkJCQkJKmV4cHItb3B0aW9uKiAqRTExMiogKkUxMTMqCistLS0tLS0KKyZvcHRpb24JCQlvcHRpb24gdmFsdWUsIGxvY2FsIHZhbHVlIGlmIHBvc3NpYmxlCismZzpvcHRpb24JCWdsb2JhbCBvcHRpb24gdmFsdWUKKyZsOm9wdGlvbgkJbG9jYWwgb3B0aW9uIHZhbHVlCisKK0V4YW1wbGVzOiA+CisJZWNobyAidGFic3RvcCBpcyAiIC4gJnRhYnN0b3AKKwlpZiAmaW5zZXJ0bW9kZQorCitBbnkgb3B0aW9uIG5hbWUgY2FuIGJlIHVzZWQgaGVyZS4gIFNlZSB8b3B0aW9uc3wuICBXaGVuIHVzaW5nIHRoZSBsb2NhbCB2YWx1ZQorYW5kIHRoZXJlIGlzIG5vIGJ1ZmZlci1sb2NhbCBvciB3aW5kb3ctbG9jYWwgdmFsdWUsIHRoZSBnbG9iYWwgdmFsdWUgaXMgdXNlZAorYW55d2F5LgorCisKK3JlZ2lzdGVyCQkJCQkJKmV4cHItcmVnaXN0ZXIqCistLS0tLS0tLQorQHIJCQljb250ZW50cyBvZiByZWdpc3RlciAncicKKworVGhlIHJlc3VsdCBpcyB0aGUgY29udGVudHMgb2YgdGhlIG5hbWVkIHJlZ2lzdGVyLCBhcyBhIHNpbmdsZSBzdHJpbmcuCitOZXdsaW5lcyBhcmUgaW5zZXJ0ZWQgd2hlcmUgcmVxdWlyZWQuICBUbyBnZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1bm5hbWVkCityZWdpc3RlciB1c2UgQCIgb3IgQEAuICBUaGUgJz0nIHJlZ2lzdGVyIGNhbiBub3QgYmUgdXNlZCBoZXJlLiAgU2VlCit8cmVnaXN0ZXJzfCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGF2YWlsYWJsZSByZWdpc3RlcnMuCisKKworbmVzdGluZwkJCQkJCQkqZXhwci1uZXN0aW5nKiAqRTExMCoKKy0tLS0tLS0KKyhleHByMSkJCQluZXN0ZWQgZXhwcmVzc2lvbgorCisKK2Vudmlyb25tZW50IHZhcmlhYmxlCQkJCQkqZXhwci1lbnYqCistLS0tLS0tLS0tLS0tLS0tLS0tLQorJFZBUgkJCWVudmlyb25tZW50IHZhcmlhYmxlCisKK1RoZSBTdHJpbmcgdmFsdWUgb2YgYW55IGVudmlyb25tZW50IHZhcmlhYmxlLiAgV2hlbiBpdCBpcyBub3QgZGVmaW5lZCwgdGhlCityZXN1bHQgaXMgYW4gZW1wdHkgc3RyaW5nLgorCQkJCQkJKmV4cHItZW52LWV4cGFuZCoKK05vdGUgdGhhdCB0aGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2luZyAkVkFSIGRpcmVjdGx5IGFuZCB1c2luZworZXhwYW5kKCIkVkFSIikuICBVc2luZyBpdCBkaXJlY3RseSB3aWxsIG9ubHkgZXhwYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0CithcmUga25vd24gaW5zaWRlIHRoZSBjdXJyZW50IFZpbSBzZXNzaW9uLiAgVXNpbmcgZXhwYW5kKCkgd2lsbCBmaXJzdCB0cnkgdXNpbmcKK3RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMga25vd24gaW5zaWRlIHRoZSBjdXJyZW50IFZpbSBzZXNzaW9uLiAgSWYgdGhhdAorZmFpbHMsIGEgc2hlbGwgd2lsbCBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgdmFyaWFibGUuICBUaGlzIGNhbiBiZSBzbG93LCBidXQgaXQKK2RvZXMgZXhwYW5kIGFsbCB2YXJpYWJsZXMgdGhhdCB0aGUgc2hlbGwga25vd3MgYWJvdXQuICBFeGFtcGxlOiA+CisJOmVjaG8gJHZlcnNpb24KKwk6ZWNobyBleHBhbmQoIiR2ZXJzaW9uIikKK1RoZSBmaXJzdCBvbmUgcHJvYmFibHkgZG9lc24ndCBlY2hvIGFueXRoaW5nLCB0aGUgc2Vjb25kIGVjaG9lcyB0aGUgJHZlcnNpb24KK3ZhcmlhYmxlIChpZiB5b3VyIHNoZWxsIHN1cHBvcnRzIGl0KS4KKworCitpbnRlcm5hbCB2YXJpYWJsZQkJCQkJKmV4cHItdmFyaWFibGUqCistLS0tLS0tLS0tLS0tLS0tLQordmFyaWFibGUJCWludGVybmFsIHZhcmlhYmxlCitTZWUgYmVsb3cgfGludGVybmFsLXZhcmlhYmxlc3wuCisKKworZnVuY3Rpb24gY2FsbAkJKmV4cHItZnVuY3Rpb24qICpFMTE2KiAqRTExNyogKkUxMTgqICpFMTE5KiAqRTEyMCoKKy0tLS0tLS0tLS0tLS0KK2Z1bmN0aW9uKGV4cHIxLCAuLi4pCWZ1bmN0aW9uIGNhbGwKK1NlZSBiZWxvdyB8ZnVuY3Rpb25zfC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIEludGVybmFsIHZhcmlhYmxlCQkJCSppbnRlcm5hbC12YXJpYWJsZXMqICpFMTIxKgorCQkJCQkJCQkJKkU0NjEqCitBbiBpbnRlcm5hbCB2YXJpYWJsZSBuYW1lIGNhbiBiZSBtYWRlIHVwIG9mIGxldHRlcnMsIGRpZ2l0cyBhbmQgJ18nLiAgQnV0IGl0CitjYW5ub3Qgc3RhcnQgd2l0aCBhIGRpZ2l0LiAgSXQncyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBjdXJseSBicmFjZXMsIHNlZQorfGN1cmx5LWJyYWNlcy1uYW1lc3wuCisKK0FuIGludGVybmFsIHZhcmlhYmxlIGlzIGNyZWF0ZWQgd2l0aCB0aGUgIjpsZXQiIGNvbW1hbmQgfDpsZXR8LgorQW4gaW50ZXJuYWwgdmFyaWFibGUgaXMgZGVzdHJveWVkIHdpdGggdGhlICI6dW5sZXQiIGNvbW1hbmQgfDp1bmxldHwuCitVc2luZyBhIG5hbWUgdGhhdCBpc24ndCBhbiBpbnRlcm5hbCB2YXJpYWJsZSwgb3IgYW4gaW50ZXJuYWwgdmFyaWFibGUgdGhhdCBoYXMKK2JlZW4gZGVzdHJveWVkLCByZXN1bHRzIGluIGFuIGVycm9yLgorCitUaGVyZSBhcmUgc2V2ZXJhbCBuYW1lIHNwYWNlcyBmb3IgdmFyaWFibGVzLiAgV2hpY2ggb25lIGlzIHRvIGJlIHVzZWQgaXMKK3NwZWNpZmllZCBieSB3aGF0IGlzIHByZXBlbmRlZDoKKworCQkobm90aGluZykgSW4gYSBmdW5jdGlvbjogbG9jYWwgdG8gYSBmdW5jdGlvbjsgb3RoZXJ3aXNlOiBnbG9iYWwKK3xidWZmZXItdmFyaWFibGV8ICAgIGI6CSAgTG9jYWwgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLgorfHdpbmRvdy12YXJpYWJsZXwgICAgdzoJICBMb2NhbCB0byB0aGUgY3VycmVudCB3aW5kb3cuCit8Z2xvYmFsLXZhcmlhYmxlfCAgICBnOgkgIEdsb2JhbC4KK3xsb2NhbC12YXJpYWJsZXwgICAgIGw6CSAgTG9jYWwgdG8gYSBmdW5jdGlvbi4KK3xzY3JpcHQtdmFyaWFibGV8ICAgIHM6CSAgTG9jYWwgdG8gYSB8OnNvdXJjZXwnZWQgVmltIHNjcmlwdC4KK3xmdW5jdGlvbi1hcmd1bWVudHwgIGE6CSAgRnVuY3Rpb24gYXJndW1lbnQgKG9ubHkgaW5zaWRlIGEgZnVuY3Rpb24pLgorfHZpbS12YXJpYWJsZXwgICAgICAgdjoJICBHbG9iYWwsIHByZWRlZmluZWQgYnkgVmltLgorCisJCQkJCQkqYnVmZmVyLXZhcmlhYmxlKiAqYjp2YXIqCitBIHZhcmlhYmxlIG5hbWUgdGhhdCBpcyBwcmVjZWRlZCB3aXRoICJiOiIgaXMgbG9jYWwgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLgorVGh1cyB5b3UgY2FuIGhhdmUgc2V2ZXJhbCAiYjpmb28iIHZhcmlhYmxlcywgb25lIGZvciBlYWNoIGJ1ZmZlci4KK1RoaXMga2luZCBvZiB2YXJpYWJsZSBpcyBkZWxldGVkIHdoZW4gdGhlIGJ1ZmZlciBpcyB3aXBlZCBvdXQgb3IgZGVsZXRlZCB3aXRoCit8OmJkZWxldGV8LgorCitPbmUgbG9jYWwgYnVmZmVyIHZhcmlhYmxlIGlzIHByZWRlZmluZWQ6CisJCQkJCSpiOmNoYW5nZWR0aWNrLXZhcmlhYmxlKiAqY2hhbmdldGljayoKK2I6Y2hhbmdlZHRpY2sJVGhlIHRvdGFsIG51bWJlciBvZiBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IGJ1ZmZlci4gIEl0IGlzCisJCWluY3JlbWVudGVkIGZvciBlYWNoIGNoYW5nZS4gIEFuIHVuZG8gY29tbWFuZCBpcyBhbHNvIGEgY2hhbmdlCisJCWluIHRoaXMgY2FzZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBhbiBhY3Rpb24gb25seSB3aGVuCisJCXRoZSBidWZmZXIgaGFzIGNoYW5nZWQuICBFeGFtcGxlOiA+CisJCSAgICA6aWYgbXlfY2hhbmdlZHRpY2sgIT0gYjpjaGFuZ2VkdGljaworCQkgICAgOiAgIGxldCBteV9jaGFuZ2VkdGljayA9IGI6Y2hhbmdlZHRpY2sKKwkJICAgIDogICBjYWxsIE15X1VwZGF0ZSgpCisJCSAgICA6ZW5kaWYKKzwKKwkJCQkJCSp3aW5kb3ctdmFyaWFibGUqICp3OnZhcioKK0EgdmFyaWFibGUgbmFtZSB0aGF0IGlzIHByZWNlZGVkIHdpdGggInc6IiBpcyBsb2NhbCB0byB0aGUgY3VycmVudCB3aW5kb3cuICBJdAoraXMgZGVsZXRlZCB3aGVuIHRoZSB3aW5kb3cgaXMgY2xvc2VkLgorCisJCQkJCQkqZ2xvYmFsLXZhcmlhYmxlKiAqZzp2YXIqCitJbnNpZGUgZnVuY3Rpb25zIGdsb2JhbCB2YXJpYWJsZXMgYXJlIGFjY2Vzc2VkIHdpdGggImc6Ii4gIE9taXR0aW5nIHRoaXMgd2lsbAorYWNjZXNzIGEgdmFyaWFibGUgbG9jYWwgdG8gYSBmdW5jdGlvbi4gIEJ1dCAiZzoiIGNhbiBhbHNvIGJlIHVzZWQgaW4gYW55IG90aGVyCitwbGFjZSBpZiB5b3UgbGlrZS4KKworCQkJCQkJKmxvY2FsLXZhcmlhYmxlKiAqbDp2YXIqCitJbnNpZGUgZnVuY3Rpb25zIGxvY2FsIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgd2l0aG91dCBwcmVwZW5kaW5nIGFueXRoaW5nLgorQnV0IHlvdSBjYW4gYWxzbyBwcmVwZW5kICJsOiIgaWYgeW91IGxpa2UuCisKKwkJCQkJCSpzY3JpcHQtdmFyaWFibGUqICpzOnZhcioKK0luIGEgVmltIHNjcmlwdCB2YXJpYWJsZXMgc3RhcnRpbmcgd2l0aCAiczoiIGNhbiBiZSB1c2VkLiAgVGhleSBjYW5ub3QgYmUKK2FjY2Vzc2VkIGZyb20gb3V0c2lkZSBvZiB0aGUgc2NyaXB0cywgdGh1cyBhcmUgbG9jYWwgdG8gdGhlIHNjcmlwdC4KKworVGhleSBjYW4gYmUgdXNlZCBpbjoKKy0gY29tbWFuZHMgZXhlY3V0ZWQgd2hpbGUgdGhlIHNjcmlwdCBpcyBzb3VyY2VkCistIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBzY3JpcHQKKy0gYXV0b2NvbW1hbmRzIGRlZmluZWQgaW4gdGhlIHNjcmlwdAorLSBmdW5jdGlvbnMgYW5kIGF1dG9jb21tYW5kcyBkZWZpbmVkIGluIGZ1bmN0aW9ucyBhbmQgYXV0b2NvbW1hbmRzIHdoaWNoIHdlcmUKKyAgZGVmaW5lZCBpbiB0aGUgc2NyaXB0IChyZWN1cnNpdmVseSkKKy0gdXNlciBkZWZpbmVkIGNvbW1hbmRzIGRlZmluZWQgaW4gdGhlIHNjcmlwdAorVGh1cyBub3QgaW46CistIG90aGVyIHNjcmlwdHMgc291cmNlZCBmcm9tIHRoaXMgb25lCistIG1hcHBpbmdzCistIGV0Yy4KKworc2NyaXB0IHZhcmlhYmxlcyBjYW4gYmUgdXNlZCB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBnbG9iYWwgdmFyaWFibGUgbmFtZXMuCitUYWtlIHRoaXMgZXhhbXBsZToKKworCWxldCBzOmNvdW50ZXIgPSAwCisJZnVuY3Rpb24gTXlDb3VudGVyKCkKKwkgIGxldCBzOmNvdW50ZXIgPSBzOmNvdW50ZXIgKyAxCisJICBlY2hvIHM6Y291bnRlcgorCWVuZGZ1bmN0aW9uCisJY29tbWFuZCBUaWNrIGNhbGwgTXlDb3VudGVyKCkKKworWW91IGNhbiBub3cgaW52b2tlICJUaWNrIiBmcm9tIGFueSBzY3JpcHQsIGFuZCB0aGUgInM6Y291bnRlciIgdmFyaWFibGUgaW4KK3RoYXQgc2NyaXB0IHdpbGwgbm90IGJlIGNoYW5nZWQsIG9ubHkgdGhlICJzOmNvdW50ZXIiIGluIHRoZSBzY3JpcHQgd2hlcmUKKyJUaWNrIiB3YXMgZGVmaW5lZCBpcyB1c2VkLgorCitBbm90aGVyIGV4YW1wbGUgdGhhdCBkb2VzIHRoZSBzYW1lOiA+CisKKwlsZXQgczpjb3VudGVyID0gMAorCWNvbW1hbmQgVGljayBsZXQgczpjb3VudGVyID0gczpjb3VudGVyICsgMSB8IGVjaG8gczpjb3VudGVyCisKK1doZW4gY2FsbGluZyBhIGZ1bmN0aW9uIGFuZCBpbnZva2luZyBhIHVzZXItZGVmaW5lZCBjb21tYW5kLCB0aGUgY29udGV4dCBmb3IKK3NjcmlwdCB2YXJpYWxiZXMgaXMgc2V0IHRvIHRoZSBzY3JpcHQgd2hlcmUgdGhlIGZ1bmN0aW9uIG9yIGNvbW1hbmQgd2FzCitkZWZpbmVkLgorCitUaGUgc2NyaXB0IHZhcmlhYmxlcyBhcmUgYWxzbyBhdmFpbGFibGUgd2hlbiBhIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW5zaWRlIGEKK2Z1bmN0aW9uIHRoYXQgaXMgZGVmaW5lZCBpbiBhIHNjcmlwdC4gIEV4YW1wbGU6ID4KKworCWxldCBzOmNvdW50ZXIgPSAwCisJZnVuY3Rpb24gU3RhcnRDb3VudGluZyhpbmNyKQorCSAgaWYgYTppbmNyCisJICAgIGZ1bmN0aW9uIE15Q291bnRlcigpCisJICAgICAgbGV0IHM6Y291bnRlciA9IHM6Y291bnRlciArIDEKKwkgICAgZW5kZnVuY3Rpb24KKwkgIGVsc2UKKwkgICAgZnVuY3Rpb24gTXlDb3VudGVyKCkKKwkgICAgICBsZXQgczpjb3VudGVyID0gczpjb3VudGVyIC0gMQorCSAgICBlbmRmdW5jdGlvbgorCSAgZW5kaWYKKwllbmRmdW5jdGlvbgorCitUaGlzIGRlZmluZXMgdGhlIE15Q291bnRlcigpIGZ1bmN0aW9uIGVpdGhlciBmb3IgY291bnRpbmcgdXAgb3IgY291bnRpbmcgZG93bgord2hlbiBjYWxsaW5nIFN0YXJ0Q291bnRpbmcoKS4gIEl0IGRvZXNuJ3QgbWF0dGVyIGZyb20gd2hlcmUgU3RhcnRDb3VudGluZygpIGlzCitjYWxsZWQsIHRoZSBzOmNvdW50ZXIgdmFyaWFibGUgd2lsbCBiZSBhY2Nlc3NpYmxlIGluIE15Q291bnRlcigpLgorCitXaGVuIHRoZSBzYW1lIHNjcmlwdCBpcyBzb3VyY2VkIGFnYWluIGl0IHdpbGwgdXNlIHRoZSBzYW1lIHNjcmlwdCB2YXJpYWJsZXMuCitUaGV5IHdpbGwgcmVtYWluIHZhbGlkIGFzIGxvbmcgYXMgVmltIGlzIHJ1bm5pbmcuICBUaGlzIGNhbiBiZSB1c2VkIHRvCittYWludGFpbiBhIGNvdW50ZXI6ID4KKworCWlmICFleGlzdHMoInM6Y291bnRlciIpCisJICBsZXQgczpjb3VudGVyID0gMQorCSAgZWNobyAic2NyaXB0IGV4ZWN1dGVkIGZvciB0aGUgZmlyc3QgdGltZSIKKwllbHNlCisJICBsZXQgczpjb3VudGVyID0gczpjb3VudGVyICsgMQorCSAgZWNobyAic2NyaXB0IGV4ZWN1dGVkICIgLiBzOmNvdW50ZXIgLiAiIHRpbWVzIG5vdyIKKwllbmRpZgorCitOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IGZpbGV0eXBlIHBsdWdpbnMgZG9uJ3QgZ2V0IGEgZGlmZmVyZW50IHNldCBvZiBzY3JpcHQKK3ZhcmlhYmxlcyBmb3IgZWFjaCBidWZmZXIuICBVc2UgbG9jYWwgYnVmZmVyIHZhcmlhYmxlcyBpbnN0ZWFkIHxiOnZhcnwuCisKKworUHJlZGVmaW5lZCBWaW0gdmFyaWFibGVzOgkJCSp2aW0tdmFyaWFibGUqICp2OnZhcioKKworCQkJKnY6Y2hhcmNvbnZlcnRfZnJvbSogKmNoYXJjb252ZXJ0X2Zyb20tdmFyaWFibGUqCit2OmNoYXJjb252ZXJ0X2Zyb20KKwkJVGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBvZiBhIGZpbGUgdG8gYmUgY29udmVydGVkLgorCQlPbmx5IHZhbGlkIHdoaWxlIGV2YWx1YXRpbmcgdGhlICdjaGFyY29udmVydCcgb3B0aW9uLgorCisJCQkqdjpjaGFyY29udmVydF90byogKmNoYXJjb252ZXJ0X3RvLXZhcmlhYmxlKgordjpjaGFyY29udmVydF90bworCQlUaGUgbmFtZSBvZiB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIG9mIGEgZmlsZSBhZnRlciBjb252ZXJzaW9uLgorCQlPbmx5IHZhbGlkIHdoaWxlIGV2YWx1YXRpbmcgdGhlICdjaGFyY29udmVydCcgb3B0aW9uLgorCisJCQkJCSp2OmNtZGFyZyogKmNtZGFyZy12YXJpYWJsZSoKK3Y6Y21kYXJnCVRoaXMgdmFyaWFibGUgaXMgdXNlZCBmb3IgdHdvIHB1cnBvc2VzOgorCQkxLiBUaGUgZXh0cmEgYXJndW1lbnRzIGdpdmVuIHRvIGEgZmlsZSByZWFkL3dyaXRlIGNvbW1hbmQuCisJCSAgIEN1cnJlbnRseSB0aGVzZSBhcmUgIisrZW5jPSIgYW5kICIrK2ZmPSIuICBUaGlzIHZhcmlhYmxlIGlzCisJCSAgIHNldCBiZWZvcmUgYW4gYXV0b2NvbW1hbmQgZXZlbnQgZm9yIGEgZmlsZSByZWFkL3dyaXRlCisJCSAgIGNvbW1hbmQgaXMgdHJpZ2dlcmVkLiAgVGhlcmUgaXMgYSBsZWFkaW5nIHNwYWNlIHRvIG1ha2UgaXQKKwkJICAgcG9zc2libGUgdG8gYXBwZW5kIHRoaXMgdmFyaWFibGUgZGlyZWN0bHkgYWZ0ZXIgdGhlCisJCSAgIHJlYWQvd3JpdGUgY29tbWFuZC4gIE5vdGU6IFRoZSAiK2NtZCIgYXJndW1lbnQgaXNuJ3QKKwkJICAgaW5jbHVkZWQgaGVyZSwgYmVjYXVzZSBpdCB3aWxsIGJlIGV4ZWN1dGVkIGFueXdheS4KKwkJMi4gV2hlbiBwcmludGluZyBhIFBvc3RTY3JpcHQgZmlsZSB3aXRoICI6aGFyZGNvcHkiIHRoaXMgaXMKKwkJICAgdGhlIGFyZ3VtZW50IGZvciB0aGUgIjpoYXJkY29weSIgY29tbWFuZC4gIFRoaXMgY2FuIGJlIHVzZWQKKwkJICAgaW4gJ3ByaW50ZXhwcicuCisKKwkJCQkJKnY6Y21kYmFuZyogKmNtZGJhbmctdmFyaWFibGUqCit2OmNtZGJhbmcJU2V0IGxpa2UgdjpjbWRhcmcgZm9yIGEgZmlsZSByZWFkL3dyaXRlIGNvbW1hbmQuICBXaGVuIGEgIiEiCisJCXdhcyB1c2VkIHRoZSB2YWx1ZSBpcyAxLCBvdGhlcndpc2UgaXQgaXMgMC4gIE5vdGUgdGhhdCB0aGlzCisJCWNhbiBvbmx5IGJlIHVzZWQgaW4gYXV0b2NvbW1hbmRzLiAgRm9yIHVzZXIgY29tbWFuZHMgfDxiYW5nPnwKKwkJY2FuIGJlIHVzZWQuCisKKwkJCQkJKnY6Y291bnQqICpjb3VudC12YXJpYWJsZSoKK3Y6Y291bnQJCVRoZSBjb3VudCBnaXZlbiBmb3IgdGhlIGxhc3QgTm9ybWFsIG1vZGUgY29tbWFuZC4gIENhbiBiZSB1c2VkCisJCXRvIGdldCB0aGUgY291bnQgYmVmb3JlIGEgbWFwcGluZy4gIFJlYWQtb25seS4gIEV4YW1wbGU6ID4KKwk6bWFwIF94IDo8Qy1VPmVjaG8gInRoZSBjb3VudCBpcyAiIC4gdjpjb3VudDxDUj4KKzwJCU5vdGU6IFRoZSA8Qy1VPiBpcyByZXF1aXJlZCB0byByZW1vdmUgdGhlIGxpbmUgcmFuZ2UgdGhhdCB5b3UKKwkJZ2V0IHdoZW4gdHlwaW5nICc6JyBhZnRlciBhIGNvdW50LgorCQkiY291bnQiIGFsc28gd29ya3MsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworCQkJCQkqdjpjb3VudDEqICpjb3VudDEtdmFyaWFibGUqCit2OmNvdW50MQlKdXN0IGxpa2UgInY6Y291bnQiLCBidXQgZGVmYXVsdHMgdG8gb25lIHdoZW4gbm8gY291bnQgaXMKKwkJdXNlZC4KKworCQkJCQkJKnY6Y3R5cGUqICpjdHlwZS12YXJpYWJsZSoKK3Y6Y3R5cGUJCVRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIGZvciBjaGFyYWN0ZXJzIG9mIHRoZSBydW50aW1lCisJCWVudmlyb25tZW50LiAgVGhpcyBhbGxvd3MgVmltIHNjcmlwdHMgdG8gYmUgYXdhcmUgb2YgdGhlCisJCWN1cnJlbnQgbG9jYWxlIGVuY29kaW5nLiAgVGVjaG5pY2FsOiBpdCdzIHRoZSB2YWx1ZSBvZgorCQlMQ19DVFlQRS4gIFdoZW4gbm90IHVzaW5nIGEgbG9jYWxlIHRoZSB2YWx1ZSBpcyAiQyIuCisJCVRoaXMgdmFyaWFibGUgY2FuIG5vdCBiZSBzZXQgZGlyZWN0bHksIHVzZSB0aGUgfDpsYW5ndWFnZXwKKwkJY29tbWFuZC4KKwkJU2VlIHxtdWx0aS1sYW5nfC4KKworCQkJCQkqdjpkeWluZyogKmR5aW5nLXZhcmlhYmxlKgordjpkeWluZwkJTm9ybWFsbHkgemVyby4gIFdoZW4gYSBkZWFkbHkgc2lnbmFsIGlzIGNhdWdodCBpdCdzIHNldCB0bworCQlvbmUuICBXaGVuIG11bHRpcGxlIHNpZ25hbHMgYXJlIGNhdWdodCB0aGUgbnVtYmVyIGluY3JlYXNlcy4KKwkJQ2FuIGJlIHVzZWQgaW4gYW4gYXV0b2NvbW1hbmQgdG8gY2hlY2sgaWYgVmltIGRpZG4ndAorCQl0ZXJtaW5hdGUgbm9ybWFsbHkuIHtvbmx5IHdvcmtzIG9uIFVuaXh9CisJCUV4YW1wbGU6ID4KKwk6YXUgVmltTGVhdmUgKiBpZiB2OmR5aW5nIHwgZWNobyAiXG5BQUFBYWFhYXJycmdnZ2hoaGghISFcbiIgfCBlbmRpZgorPAorCQkJCQkqdjplcnJtc2cqICplcnJtc2ctdmFyaWFibGUqCit2OmVycm1zZwlMYXN0IGdpdmVuIGVycm9yIG1lc3NhZ2UuICBJdCdzIGFsbG93ZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUuCisJCUV4YW1wbGU6ID4KKwk6bGV0IHY6ZXJybXNnID0gIiIKKwk6c2lsZW50ISBuZXh0CisJOmlmIHY6ZXJybXNnICE9ICIiCisJOiAgLi4uIGhhbmRsZSBlcnJvcgorPAkJImVycm1zZyIgYWxzbyB3b3JrcywgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisJCQkJCSp2OmV4Y2VwdGlvbiogKmV4Y2VwdGlvbi12YXJpYWJsZSoKK3Y6ZXhjZXB0aW9uCVRoZSB2YWx1ZSBvZiB0aGUgZXhjZXB0aW9uIG1vc3QgcmVjZW50bHkgY2F1Z2h0IGFuZCBub3QKKwkJZmluaXNoZWQuICBTZWUgYWxzbyB8djp0aHJvd3BvaW50fCBhbmQgfHRocm93LXZhcmlhYmxlc3wuCisJCUV4YW1wbGU6ID4KKwk6dHJ5CisJOiAgdGhyb3cgIm9vcHMiCisJOmNhdGNoIC8uKi8KKwk6ICBlY2hvICJjYXVnaHQiIHY6ZXhjZXB0aW9uCisJOmVuZHRyeQorPAkJT3V0cHV0OiAiY2F1Z2h0IG9vcHMiLgorCisJCQkJCSp2OmZuYW1lX2luKiAqZm5hbWVfaW4tdmFyaWFibGUqCit2OmZuYW1lX2luCVRoZSBuYW1lIG9mIHRoZSBpbnB1dCBmaWxlLiAgT25seSB2YWxpZCB3aGlsZSBldmFsdWF0aW5nOgorCQkJb3B0aW9uCQl1c2VkIGZvciB+CisJCQknY2hhcmNvbnZlcnQnCWZpbGUgdG8gYmUgY29udmVydGVkCisJCQknZGlmZmV4cHInCW9yaWdpbmFsIGZpbGUKKwkJCSdwYXRjaGV4cHInCW9yaWdpbmFsIGZpbGUKKwkJCSdwcmludGV4cHInCWZpbGUgdG8gYmUgcHJpbnRlZAorCisJCQkJCSp2OmZuYW1lX291dCogKmZuYW1lX291dC12YXJpYWJsZSoKK3Y6Zm5hbWVfb3V0CVRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgZmlsZS4gIE9ubHkgdmFsaWQgd2hpbGUKKwkJZXZhbHVhdGluZzoKKwkJCW9wdGlvbgkJdXNlZCBmb3IgfgorCQkJJ2NoYXJjb252ZXJ0JwlyZXN1bHRpbmcgY29udmVydGVkIGZpbGUgKCopCisJCQknZGlmZmV4cHInCW91dHB1dCBvZiBkaWZmCisJCQkncGF0Y2hleHByJwlyZXN1bHRpbmcgcGF0Y2hlZCBmaWxlCisJCSgqKSBXaGVuIGRvaW5nIGNvbnZlcnNpb24gZm9yIGEgd3JpdGUgY29tbWFuZCAoZS5nLiwgIjp3CisJCWZpbGUiKSBpdCB3aWxsIGJlIGVxdWFsIHRvIHY6Zm5hbWVfaW4uICBXaGVuIGRvaW5nIGNvbnZlcnNpb24KKwkJZm9yIGEgcmVhZCBjb21tYW5kIChlLmcuLCAiOmUgZmlsZSIpIGl0IHdpbGwgYmUgYSB0ZW1wb3JhcnkKKwkJZmlsZSBhbmQgZGlmZmVyZW50IGZyb20gdjpmbmFtZV9pbi4KKworCQkJCQkqdjpmbmFtZV9uZXcqICpmbmFtZV9uZXctdmFyaWFibGUqCit2OmZuYW1lX25ldwlUaGUgbmFtZSBvZiB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIGZpbGUuICBPbmx5IHZhbGlkIHdoaWxlCisJCWV2YWx1YXRpbmcgJ2RpZmZleHByJy4KKworCQkJCQkqdjpmbmFtZV9kaWZmKiAqZm5hbWVfZGlmZi12YXJpYWJsZSoKK3Y6Zm5hbWVfZGlmZglUaGUgbmFtZSBvZiB0aGUgZGlmZiAocGF0Y2gpIGZpbGUuICBPbmx5IHZhbGlkIHdoaWxlCisJCWV2YWx1YXRpbmcgJ3BhdGNoZXhwcicuCisKKwkJCQkJKnY6Zm9sZGRhc2hlcyogKmZvbGRkYXNoZXMtdmFyaWFibGUqCit2OmZvbGRkYXNoZXMJVXNlZCBmb3IgJ2ZvbGR0ZXh0JzogZGFzaGVzIHJlcHJlc2VudGluZyBmb2xkbGV2ZWwgb2YgYSBjbG9zZWQKKwkJZm9sZC4KKwkJUmVhZC1vbmx5LiB8Zm9sZC1mb2xkdGV4dHwKKworCQkJCQkqdjpmb2xkbGV2ZWwqICpmb2xkbGV2ZWwtdmFyaWFibGUqCit2OmZvbGRsZXZlbAlVc2VkIGZvciAnZm9sZHRleHQnOiBmb2xkbGV2ZWwgb2YgY2xvc2VkIGZvbGQuCisJCVJlYWQtb25seS4gfGZvbGQtZm9sZHRleHR8CisKKwkJCQkJKnY6Zm9sZGVuZCogKmZvbGRlbmQtdmFyaWFibGUqCit2OmZvbGRlbmQJVXNlZCBmb3IgJ2ZvbGR0ZXh0JzogbGFzdCBsaW5lIG9mIGNsb3NlZCBmb2xkLgorCQlSZWFkLW9ubHkuIHxmb2xkLWZvbGR0ZXh0fAorCisJCQkJCSp2OmZvbGRzdGFydCogKmZvbGRzdGFydC12YXJpYWJsZSoKK3Y6Zm9sZHN0YXJ0CVVzZWQgZm9yICdmb2xkdGV4dCc6IGZpcnN0IGxpbmUgb2YgY2xvc2VkIGZvbGQuCisJCVJlYWQtb25seS4gfGZvbGQtZm9sZHRleHR8CisKKwkJCQkJCSp2OmxhbmcqICpsYW5nLXZhcmlhYmxlKgordjpsYW5nCQlUaGUgY3VycmVudCBsb2NhbGUgc2V0dGluZyBmb3IgbWVzc2FnZXMgb2YgdGhlIHJ1bnRpbWUKKwkJZW52aXJvbm1lbnQuICBUaGlzIGFsbG93cyBWaW0gc2NyaXB0cyB0byBiZSBhd2FyZSBvZiB0aGUKKwkJY3VycmVudCBsYW5ndWFnZS4gIFRlY2huaWNhbDogaXQncyB0aGUgdmFsdWUgb2YgTENfTUVTU0FHRVMuCisJCVRoZSB2YWx1ZSBpcyBzeXN0ZW0gZGVwZW5kZW50LgorCQlUaGlzIHZhcmlhYmxlIGNhbiBub3QgYmUgc2V0IGRpcmVjdGx5LCB1c2UgdGhlIHw6bGFuZ3VhZ2V8CisJCWNvbW1hbmQuCisJCUl0IGNhbiBiZSBkaWZmZXJlbnQgZnJvbSB8djpjdHlwZXwgd2hlbiBtZXNzYWdlcyBhcmUgZGVzaXJlZAorCQlpbiBhIGRpZmZlcmVudCBsYW5ndWFnZSB0aGFuIHdoYXQgaXMgdXNlZCBmb3IgY2hhcmFjdGVyCisJCWVuY29kaW5nLiAgU2VlIHxtdWx0aS1sYW5nfC4KKworCQkJCQkJKnY6bGNfdGltZSogKmxjX3RpbWUtdmFyaWFibGUqCit2OmxjX3RpbWUJVGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgZm9yIHRpbWUgbWVzc2FnZXMgb2YgdGhlIHJ1bnRpbWUKKwkJZW52aXJvbm1lbnQuICBUaGlzIGFsbG93cyBWaW0gc2NyaXB0cyB0byBiZSBhd2FyZSBvZiB0aGUKKwkJY3VycmVudCBsYW5ndWFnZS4gIFRlY2huaWNhbDogaXQncyB0aGUgdmFsdWUgb2YgTENfVElNRS4KKwkJVGhpcyB2YXJpYWJsZSBjYW4gbm90IGJlIHNldCBkaXJlY3RseSwgdXNlIHRoZSB8Omxhbmd1YWdlfAorCQljb21tYW5kLiAgU2VlIHxtdWx0aS1sYW5nfC4KKworCQkJCQkJKnY6bG51bSogKmxudW0tdmFyaWFibGUqCit2OmxudW0JCUxpbmUgbnVtYmVyIGZvciB0aGUgJ2ZvbGRleHByJyBhbmQgJ2luZGVudGV4cHInIGV4cHJlc3Npb25zLgorCQlPbmx5IHZhbGlkIHdoaWxlIG9uZSBvZiB0aGVzZSBleHByZXNzaW9ucyBpcyBiZWluZyBldmFsdWF0ZWQuCisJCVJlYWQtb25seS4gfGZvbGQtZXhwcnwgJ2luZGVudGV4cHInCisKKwkJCQkJKnY6cHJldmNvdW50KiAqcHJldmNvdW50LXZhcmlhYmxlKgordjpwcmV2Y291bnQJVGhlIGNvdW50IGdpdmVuIGZvciB0aGUgbGFzdCBidXQgb25lIE5vcm1hbCBtb2RlIGNvbW1hbmQuCisJCVRoaXMgaXMgdGhlIHY6Y291bnQgdmFsdWUgb2YgdGhlIHByZXZpb3VzIGNvbW1hbmQuICBVc2VmdWwgaWYKKwkJeW91IHdhbnQgdG8gY2FuY2VsIFZpc3VhbCBtb2RlIGFuZCB0aGVuIHVzZSB0aGUgY291bnQuID4KKwkJCTp2bWFwICUgPEVzYz46Y2FsbCBNeUZpbHRlcih2OnByZXZjb3VudCk8Q1I+Cis8CQlSZWFkLW9ubHkuCisKKwkJCQkJKnY6cHJvZ25hbWUqICpwcm9nbmFtZS12YXJpYWJsZSoKK3Y6cHJvZ25hbWUJQ29udGFpbnMgdGhlIG5hbWUgKHdpdGggcGF0aCByZW1vdmVkKSB3aXRoIHdoaWNoIFZpbSB3YXMKKwkJaW52b2tlZC4gIEFsbG93cyB5b3UgdG8gZG8gc3BlY2lhbCBpbml0aWFsaXNhdGlvbnMgZm9yICJ2aWV3IiwKKwkJImV2aW0iIGV0Yy4sIG9yIGFueSBvdGhlciBuYW1lIHlvdSBtaWdodCBzeW1saW5rIHRvIFZpbS4KKwkJUmVhZC1vbmx5LgorCisJCQkJCSp2OnJlZ2lzdGVyKiAqcmVnaXN0ZXItdmFyaWFibGUqCit2OnJlZ2lzdGVyCVRoZSBuYW1lIG9mIHRoZSByZWdpc3RlciBzdXBwbGllZCB0byB0aGUgbGFzdCBub3JtYWwgbW9kZQorCQljb21tYW5kLiAgRW1wdHkgaWYgbm9uZSB3ZXJlIHN1cHBsaWVkLiB8Z2V0cmVnKCl8IHxzZXRyZWcoKXwKKworCQkJCQkqdjpzZXJ2ZXJuYW1lKiAqc2VydmVybmFtZS12YXJpYWJsZSoKK3Y6c2VydmVybmFtZQlUaGUgcmVzdWx0aW5nIHJlZ2lzdGVyZWQgfHgxMS1jbGllbnRzZXJ2ZXJ8IG5hbWUgaWYgYW55LgorCQlSZWFkLW9ubHkuCisKKwkJCQkJKnY6c2hlbGxfZXJyb3IqICpzaGVsbF9lcnJvci12YXJpYWJsZSoKK3Y6c2hlbGxfZXJyb3IJUmVzdWx0IG9mIHRoZSBsYXN0IHNoZWxsIGNvbW1hbmQuICBXaGVuIG5vbi16ZXJvLCB0aGUgbGFzdAorCQlzaGVsbCBjb21tYW5kIGhhZCBhbiBlcnJvci4gIFdoZW4gemVybywgdGhlcmUgd2FzIG5vIHByb2JsZW0uCisJCVRoaXMgb25seSB3b3JrcyB3aGVuIHRoZSBzaGVsbCByZXR1cm5zIHRoZSBlcnJvciBjb2RlIHRvIFZpbS4KKwkJVGhlIHZhbHVlIC0xIGlzIG9mdGVuIHVzZWQgd2hlbiB0aGUgY29tbWFuZCBjb3VsZCBub3QgYmUKKwkJZXhlY3V0ZWQuICBSZWFkLW9ubHkuCisJCUV4YW1wbGU6ID4KKwk6IW12IGZvbyBiYXIKKwk6aWYgdjpzaGVsbF9lcnJvcgorCTogIGVjaG8gJ2NvdWxkIG5vdCByZW5hbWUgImZvbyIgdG8gImJhciIhJworCTplbmRpZgorPAkJInNoZWxsX2Vycm9yIiBhbHNvIHdvcmtzLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKwkJCQkJKnY6c3RhdHVzbXNnKiAqc3RhdHVzbXNnLXZhcmlhYmxlKgordjpzdGF0dXNtc2cJTGFzdCBnaXZlbiBzdGF0dXMgbWVzc2FnZS4gIEl0J3MgYWxsb3dlZCB0byBzZXQgdGhpcyB2YXJpYWJsZS4KKworCQkJCSp2OnRlcm1yZXNwb25zZSogKnRlcm1yZXNwb25zZS12YXJpYWJsZSoKK3Y6dGVybXJlc3BvbnNlCVRoZSBlc2NhcGUgc2VxdWVuY2UgcmV0dXJuZWQgYnkgdGhlIHRlcm1pbmFsIGZvciB0aGUgfHRfUlZ8CisJCXRlcm1jYXAgZW50cnkuICBJdCBpcyBzZXQgd2hlbiBWaW0gcmVjZWl2ZXMgYW4gZXNjYXBlIHNlcXVlbmNlCisJCXRoYXQgc3RhcnRzIHdpdGggRVNDIFsgb3IgQ1NJIGFuZCBlbmRzIGluIGEgJ2MnLCB3aXRoIG9ubHkKKwkJZGlnaXRzLCAnOycgYW5kICcuJyBpbiBiZXR3ZWVuLgorCQlXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIFRlcm1SZXNwb25zZSBhdXRvY29tbWFuZCBldmVudCBpcworCQlmaXJlZCwgc28gdGhhdCB5b3UgY2FuIHJlYWN0IHRvIHRoZSByZXNwb25zZSBmcm9tIHRoZQorCQl0ZXJtaW5hbC4KKwkJVGhlIHJlc3BvbnNlIGZyb20gYSBuZXcgeHRlcm0gaXM6ICI8RXNjPlsgUHAgOyBQdiA7IFBjIGMiLiAgUHAKKwkJaXMgdGhlIHRlcm1pbmFsIHR5cGU6IDAgZm9yIHZ0MTAwIGFuZCAxIGZvciB2dDIyMC4gIFB2IGlzIHRoZQorCQlwYXRjaCBsZXZlbCAoc2luY2UgdGhpcyB3YXMgaW50cm9kdWNlZCBpbiBwYXRjaCA5NSwgaXQncworCQlhbHdheXMgOTUgb3IgYmlnZ2VyKS4gIFBjIGlzIGFsd2F5cyB6ZXJvLgorCQl7b25seSB3aGVuIGNvbXBpbGVkIHdpdGggfCt0ZXJtcmVzcG9uc2V8IGZlYXR1cmV9CisKKwkJCQkqdjp0aGlzX3Nlc3Npb24qICp0aGlzX3Nlc3Npb24tdmFyaWFibGUqCit2OnRoaXNfc2Vzc2lvbglGdWxsIGZpbGVuYW1lIG9mIHRoZSBsYXN0IGxvYWRlZCBvciBzYXZlZCBzZXNzaW9uIGZpbGUuICBTZWUKKwkJfDpta3Nlc3Npb258LiAgSXQgaXMgYWxsb3dlZCB0byBzZXQgdGhpcyB2YXJpYWJsZS4gIFdoZW4gbm8KKwkJc2Vzc2lvbiBmaWxlIGhhcyBiZWVuIHNhdmVkLCB0aGlzIHZhcmlhYmxlIGlzIGVtcHR5LgorCQkidGhpc19zZXNzaW9uIiBhbHNvIHdvcmtzLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKwkJCQkJKnY6dGhyb3dwb2ludCogKnRocm93cG9pbnQtdmFyaWFibGUqCit2OnRocm93cG9pbnQJVGhlIHBvaW50IHdoZXJlIHRoZSBleGNlcHRpb24gbW9zdCByZWNlbnRseSBjYXVnaHQgYW5kIG5vdAorCQlmaW5pc2hlZCB3YXMgdGhyb3duLiAgTm90IHNldCB3aGVuIGNvbW1hbmRzIGFyZSB0eXBlZC4gIFNlZQorCQlhbHNvIHx2OmV4Y2VwdGlvbnwgYW5kIHx0aHJvdy12YXJpYWJsZXN8LgorCQlFeGFtcGxlOiA+CisJOnRyeQorCTogIHRocm93ICJvb3BzIgorCTpjYXRjaCAvLiovCisJOiAgZWNobyAiRXhjZXB0aW9uIGZyb20iIHY6dGhyb3dwb2ludAorCTplbmR0cnkKKzwJCU91dHB1dDogIkV4Y2VwdGlvbiBmcm9tIHRlc3QudmltLCBsaW5lIDIiCisKKwkJCQkJKnY6dmVyc2lvbiogKnZlcnNpb24tdmFyaWFibGUqCit2OnZlcnNpb24JVmVyc2lvbiBudW1iZXIgb2YgVmltOiBNYWpvciB2ZXJzaW9uIG51bWJlciB0aW1lcyAxMDAgcGx1cworCQltaW5vciB2ZXJzaW9uIG51bWJlci4gIFZlcnNpb24gNS4wIGlzIDUwMC4gIFZlcnNpb24gNS4xICg1LjAxKQorCQlpcyA1MDEuICBSZWFkLW9ubHkuICAidmVyc2lvbiIgYWxzbyB3b3JrcywgZm9yIGJhY2t3YXJkcworCQljb21wYXRpYmlsaXR5LgorCQlVc2UgfGhhcygpfCB0byBjaGVjayBpZiBhIGNlcnRhaW4gcGF0Y2ggd2FzIGluY2x1ZGVkLCBlLmcuOiA+CisJCQlpZiBoYXMoInBhdGNoMTIzIikKKzwJCU5vdGUgdGhhdCBwYXRjaCBudW1iZXJzIGFyZSBzcGVjaWZpYyB0byB0aGUgdmVyc2lvbiwgdGh1cyBib3RoCisJCXZlcnNpb24gNS4wIGFuZCA1LjEgbWF5IGhhdmUgYSBwYXRjaCAxMjMsIGJ1dCB0aGVzZSBhcmUKKwkJY29tcGxldGVseSBkaWZmZXJlbnQuCisKKwkJCQkJKnY6d2FybmluZ21zZyogKndhcm5pbmdtc2ctdmFyaWFibGUqCit2Ondhcm5pbmdtc2cJTGFzdCBnaXZlbiB3YXJuaW5nIG1lc3NhZ2UuICBJdCdzIGFsbG93ZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gQnVpbHRpbiBGdW5jdGlvbnMJCQkJCSpmdW5jdGlvbnMqCisKK1NlZSB8ZnVuY3Rpb24tbGlzdHwgZm9yIGEgbGlzdCBncm91cGVkIGJ5IHdoYXQgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yLgorCisoVXNlIENUUkwtXSBvbiB0aGUgZnVuY3Rpb24gbmFtZSB0byBqdW1wIHRvIHRoZSBmdWxsIGV4cGxhbmF0aW9uKQorCitVU0FHRQkJCQlSRVNVTFQJREVTQ1JJUFRJT04JfgorCithcHBlbmQoIHtsbnVtfSwge3N0cmluZ30pCU51bWJlciAgYXBwZW5kIHtzdHJpbmd9IGJlbG93IGxpbmUge2xudW19CithcmdjKCkJCQkJTnVtYmVyCW51bWJlciBvZiBmaWxlcyBpbiB0aGUgYXJndW1lbnQgbGlzdAorYXJnaWR4KCkJCQlOdW1iZXIgIGN1cnJlbnQgaW5kZXggaW4gdGhlIGFyZ3VtZW50IGxpc3QKK2FyZ3YoIHtucn0pCQkJU3RyaW5nCXtucn0gZW50cnkgb2YgdGhlIGFyZ3VtZW50IGxpc3QKK2Jyb3dzZSgge3NhdmV9LCB7dGl0bGV9LCB7aW5pdGRpcn0sIHtkZWZhdWx0fSkKKwkJCQlTdHJpbmcJcHV0IHVwIGEgZmlsZSByZXF1ZXN0ZXIKK2J1ZmV4aXN0cygge2V4cHJ9KQkJTnVtYmVyCVRSVUUgaWYgYnVmZmVyIHtleHByfSBleGlzdHMKK2J1Zmxpc3RlZCgge2V4cHJ9KQkJTnVtYmVyICBUUlVFIGlmIGJ1ZmZlciB7ZXhwcn0gaXMgbGlzdGVkCitidWZsb2FkZWQoIHtleHByfSkJCU51bWJlciAgVFJVRSBpZiBidWZmZXIge2V4cHJ9IGlzIGxvYWRlZAorYnVmbmFtZSgge2V4cHJ9KQkJU3RyaW5nCU5hbWUgb2YgdGhlIGJ1ZmZlciB7ZXhwcn0KK2J1Zm5yKCB7ZXhwcn0pCQkJTnVtYmVyCU51bWJlciBvZiB0aGUgYnVmZmVyIHtleHByfQorYnVmd2lubnIoIHtleHByfSkJCU51bWJlcgl3aW5kb3cgbnVtYmVyIG9mIGJ1ZmZlciB7ZXhwcn0KK2J5dGUybGluZSgge2J5dGV9KQkJTnVtYmVyCWxpbmUgbnVtYmVyIGF0IGJ5dGUgY291bnQge2J5dGV9CitjaGFyMm5yKCB7ZXhwcn0pCQlOdW1iZXIJQVNDSUkgdmFsdWUgb2YgZmlyc3QgY2hhciBpbiB7ZXhwcn0KK2NpbmRlbnQoIHtsbnVtfSkJCU51bWJlciAgQyBpbmRlbnQgZm9yIGxpbmUge2xudW19Citjb2woIHtleHByfSkJCQlOdW1iZXIJY29sdW1uIG5yIG9mIGN1cnNvciBvciBtYXJrCitjb25maXJtKCB7bXNnfSBbLCB7Y2hvaWNlc30gWywge2RlZmF1bHR9IFssIHt0eXBlfV1dXSkKKwkJCQlOdW1iZXIJbnVtYmVyIG9mIGNob2ljZSBwaWNrZWQgYnkgdXNlcgorY3Njb3BlX2Nvbm5lY3Rpb24oIFt7bnVtfSAsIHtkYnBhdGh9IFssIHtwcmVwZW5kfV1dKQorCQkJCU51bWJlcgljaGVja3MgZXhpc3RlbmNlIG9mIGNzY29wZSBjb25uZWN0aW9uCitjdXJzb3IoIHtsbnVtfSwge2NvbH0pCQlOdW1iZXIgIHBvc2l0aW9uIGN1cnNvciBhdCB7bG51bX0sIHtjb2x9CitkZWxldGUoIHtmbmFtZX0pCQlOdW1iZXIJZGVsZXRlIGZpbGUge2ZuYW1lfQorZGlkX2ZpbGV0eXBlKCkJCQlOdW1iZXIJVFJVRSBpZiBGaWxlVHlwZSBhdXRvY29tbWFuZCBldmVudCB1c2VkCitlc2NhcGUoIHtzdHJpbmd9LCB7Y2hhcnN9KQlTdHJpbmcJZXNjYXBlIHtjaGFyc30gaW4ge3N0cmluZ30gd2l0aCAnXCcKK2V2ZW50aGFuZGxlciggKQkJCU51bWJlciAgVFJVRSBpZiBpbnNpZGUgYW4gZXZlbnQgaGFuZGxlcgorZXhlY3V0YWJsZSgge2V4cHJ9KQkJTnVtYmVyCTEgaWYgZXhlY3V0YWJsZSB7ZXhwcn0gZXhpc3RzCitleGlzdHMoIHtleHByfSkJCQlOdW1iZXIJVFJVRSBpZiB7ZXhwcn0gZXhpc3RzCitleHBhbmQoIHtleHByfSkJCQlTdHJpbmcJZXhwYW5kIHNwZWNpYWwga2V5d29yZHMgaW4ge2V4cHJ9CitmaWxlcmVhZGFibGUoIHtmaWxlfSkJCU51bWJlcglUUlVFIGlmIHtmaWxlfSBpcyBhIHJlYWRhYmxlIGZpbGUKK2ZpbGV3cml0YWJsZSgge2ZpbGV9KQkJTnVtYmVyCVRSVUUgaWYge2ZpbGV9IGlzIGEgd3JpdGFibGUgZmlsZQorZm5hbWVtb2RpZnkoIHtmbmFtZX0sIHttb2RzfSkJU3RyaW5nCW1vZGlmeSBmaWxlIG5hbWUKK2ZvbGRjbG9zZWQoIHtsbnVtfSkJCU51bWJlciAgZmlyc3QgbGluZSBvZiBmb2xkIGF0IHtsbnVtfSBpZiBjbG9zZWQKK2ZvbGRjbG9zZWRlbmQoIHtsbnVtfSkJCU51bWJlciAgbGFzdCBsaW5lIG9mIGZvbGQgYXQge2xudW19IGlmIGNsb3NlZAorZm9sZGxldmVsKCB7bG51bX0pCQlOdW1iZXIJZm9sZCBsZXZlbCBhdCB7bG51bX0KK2ZvbGR0ZXh0KCApCQkJU3RyaW5nICBsaW5lIGRpc3BsYXllZCBmb3IgY2xvc2VkIGZvbGQKK2ZvcmVncm91bmQoICkJCQlOdW1iZXIJYnJpbmcgdGhlIFZpbSB3aW5kb3cgdG8gdGhlIGZvcmVncm91bmQKK2dldGNoYXIoIFtleHByXSkJCU51bWJlciAgZ2V0IG9uZSBjaGFyYWN0ZXIgZnJvbSB0aGUgdXNlcgorZ2V0Y2hhcm1vZCggKQkJCU51bWJlciAgbW9kaWZpZXJzIGZvciB0aGUgbGFzdCB0eXBlZCBjaGFyYWN0ZXIKK2dldGJ1ZnZhcigge2V4cHJ9LCB7dmFybmFtZX0pCQl2YXJpYWJsZSB7dmFybmFtZX0gaW4gYnVmZmVyIHtleHByfQorZ2V0Y21kbGluZSgpCQkJU3RyaW5nCXJldHVybiB0aGUgY3VycmVudCBjb21tYW5kLWxpbmUKK2dldGNtZHBvcygpCQkJTnVtYmVyCXJldHVybiBjdXJzb3IgcG9zaXRpb24gaW4gY29tbWFuZC1saW5lCitnZXRjd2QoKQkJCVN0cmluZwl0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorZ2V0ZnNpemUoIHtmbmFtZX0pCQlOdW1iZXIJc2l6ZSBpbiBieXRlcyBvZiBmaWxlCitnZXRmdGltZSgge2ZuYW1lfSkJCU51bWJlcglsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGZpbGUKK2dldGxpbmUoIHtsbnVtfSkJCVN0cmluZwlsaW5lIHtsbnVtfSBmcm9tIGN1cnJlbnQgYnVmZmVyCitnZXRyZWcoIFt7cmVnbmFtZX1dKQkJU3RyaW5nICBjb250ZW50cyBvZiByZWdpc3RlcgorZ2V0cmVndHlwZSggW3tyZWduYW1lfV0pCVN0cmluZyAgdHlwZSBvZiByZWdpc3RlcgorZ2V0d2lucG9zeCgpCQkJTnVtYmVyCVggY29vcmQgaW4gcGl4ZWxzIG9mIEdVSSBWaW0gd2luZG93CitnZXR3aW5wb3N5KCkJCQlOdW1iZXIJWSBjb29yZCBpbiBwaXhlbHMgb2YgR1VJIFZpbSB3aW5kb3cKK2dldHdpbnZhcigge25yfSwge3Zhcm5hbWV9KQkJdmFyaWFibGUge3Zhcm5hbWV9IGluIHdpbmRvdyB7bnJ9CitnbG9iKCB7ZXhwcn0pCQkJU3RyaW5nCWV4cGFuZCBmaWxlIHdpbGRjYXJkcyBpbiB7ZXhwcn0KK2dsb2JwYXRoKCB7cGF0aH0sIHtleHByfSkJU3RyaW5nCWRvIGdsb2Ioe2V4cHJ9KSBmb3IgYWxsIGRpcnMgaW4ge3BhdGh9CitoYXMoIHtmZWF0dXJlfSkJCQlOdW1iZXIJVFJVRSBpZiBmZWF0dXJlIHtmZWF0dXJlfSBzdXBwb3J0ZWQKK2hhc21hcHRvKCB7d2hhdH0gWywge21vZGV9XSkJTnVtYmVyCVRSVUUgaWYgbWFwcGluZyB0byB7d2hhdH0gZXhpc3RzCitoaXN0YWRkKCB7aGlzdG9yeX0se2l0ZW19KQlTdHJpbmcJYWRkIGFuIGl0ZW0gdG8gYSBoaXN0b3J5CitoaXN0ZGVsKCB7aGlzdG9yeX0gWywge2l0ZW19XSkJU3RyaW5nCXJlbW92ZSBhbiBpdGVtIGZyb20gYSBoaXN0b3J5CitoaXN0Z2V0KCB7aGlzdG9yeX0gWywge2luZGV4fV0pCVN0cmluZwlnZXQgdGhlIGl0ZW0ge2luZGV4fSBmcm9tIGEgaGlzdG9yeQoraGlzdG5yKCB7aGlzdG9yeX0pCQlOdW1iZXIJaGlnaGVzdCBpbmRleCBvZiBhIGhpc3RvcnkKK2hsZXhpc3RzKCB7bmFtZX0pCQlOdW1iZXIJVFJVRSBpZiBoaWdobGlnaHQgZ3JvdXAge25hbWV9IGV4aXN0cworaGxJRCgge25hbWV9KQkJCU51bWJlcglzeW50YXggSUQgb2YgaGlnaGxpZ2h0IGdyb3VwIHtuYW1lfQoraG9zdG5hbWUoKQkJCVN0cmluZwluYW1lIG9mIHRoZSBtYWNoaW5lIFZpbSBpcyBydW5uaW5nIG9uCitpY29udigge2V4cHJ9LCB7ZnJvbX0sIHt0b30pCVN0cmluZyAgY29udmVydCBlbmNvZGluZyBvZiB7ZXhwcn0KK2luZGVudCgge2xudW19KQkJCU51bWJlciAgaW5kZW50IG9mIGxpbmUge2xudW19CitpbnB1dCgge3Byb21wdH0gWywge3RleHR9XSkJU3RyaW5nCWdldCBpbnB1dCBmcm9tIHRoZSB1c2VyCitpbnB1dGRpYWxvZygge3B9IFssIHt0fSBbLCB7Y31dXSkgU3RyaW5nICBsaWtlIGlucHV0KCkgYnV0IGluIGEgR1VJIGRpYWxvZworaW5wdXRyZXN0b3JlKCkJCQlOdW1iZXIgIHJlc3RvcmUgdHlwZWFoZWFkCitpbnB1dHNhdmUoKQkJCU51bWJlciAgc2F2ZSBhbmQgY2xlYXIgdHlwZWFoZWFkCitpbnB1dHNlY3JldCgge3Byb21wdH0gWywge3RleHR9XSkgU3RyaW5nICBsaWtlIGlucHV0KCkgYnV0IGhpZGluZyB0aGUgdGV4dAoraXNkaXJlY3RvcnkoIHtkaXJlY3Rvcnl9KQlOdW1iZXIJVFJVRSBpZiB7ZGlyZWN0b3J5fSBpcyBhIGRpcmVjdG9yeQorbGliY2FsbCgge2xpYn0sIHtmdW5jfSwge2FyZ30pCVN0cmluZyAgY2FsbCB7ZnVuY30gaW4gbGlicmFyeSB7bGlifSB3aXRoIHthcmd9CitsaWJjYWxsbnIoIHtsaWJ9LCB7ZnVuY30sIHthcmd9KSAgTnVtYmVyICBpZGVtLCBidXQgcmV0dXJuIGEgTnVtYmVyCitsaW5lKCB7ZXhwcn0pCQkJTnVtYmVyCWxpbmUgbnIgb2YgY3Vyc29yLCBsYXN0IGxpbmUgb3IgbWFyaworbGluZTJieXRlKCB7bG51bX0pCQlOdW1iZXIJYnl0ZSBjb3VudCBvZiBsaW5lIHtsbnVtfQorbGlzcGluZGVudCgge2xudW19KQkJTnVtYmVyICBMaXNwIGluZGVudCBmb3IgbGluZSB7bG51bX0KK2xvY2FsdGltZSgpCQkJTnVtYmVyCWN1cnJlbnQgdGltZQorbWFwYXJnKCB7bmFtZX1bLCB7bW9kZX1dKQlTdHJpbmcJcmhzIG9mIG1hcHBpbmcge25hbWV9IGluIG1vZGUge21vZGV9CittYXBjaGVjaygge25hbWV9Wywge21vZGV9XSkJU3RyaW5nCWNoZWNrIGZvciBtYXBwaW5ncyBtYXRjaGluZyB7bmFtZX0KK21hdGNoKCB7ZXhwcn0sIHtwYXR9Wywge3N0YXJ0fV0pCisJCQkJTnVtYmVyCXBvc2l0aW9uIHdoZXJlIHtwYXR9IG1hdGNoZXMgaW4ge2V4cHJ9CittYXRjaGVuZCgge2V4cHJ9LCB7cGF0fVssIHtzdGFydH1dKQorCQkJCU51bWJlcglwb3NpdGlvbiB3aGVyZSB7cGF0fSBlbmRzIGluIHtleHByfQorbWF0Y2hzdHIoIHtleHByfSwge3BhdH1bLCB7c3RhcnR9XSkKKwkJCQlTdHJpbmcJbWF0Y2ggb2Yge3BhdH0gaW4ge2V4cHJ9Cittb2RlKCkJCQkJU3RyaW5nICBjdXJyZW50IGVkaXRpbmcgbW9kZQorbmV4dG5vbmJsYW5rKCB7bG51bX0pCQlOdW1iZXIJbGluZSBuciBvZiBub24tYmxhbmsgbGluZSA+PSB7bG51bX0KK25yMmNoYXIoIHtleHByfSkJCVN0cmluZwlzaW5nbGUgY2hhciB3aXRoIEFTQ0lJIHZhbHVlIHtleHByfQorcHJldm5vbmJsYW5rKCB7bG51bX0pCQlOdW1iZXIJbGluZSBuciBvZiBub24tYmxhbmsgbGluZSA8PSB7bG51bX0KK3JlbW90ZV9leHByKCB7c2VydmVyfSwge3N0cmluZ30gWywge2lkdmFyfV0pCisJCQkJU3RyaW5nCXNlbmQgZXhwcmVzc2lvbgorcmVtb3RlX2ZvcmVncm91bmQoIHtzZXJ2ZXJ9KQlOdW1iZXIJYnJpbmcgVmltIHNlcnZlciB0byB0aGUgZm9yZWdyb3VuZAorcmVtb3RlX3BlZWsoIHtzZXJ2ZXJpZH0gWywge3JldHZhcn1dKQorCQkJCU51bWJlcgljaGVjayBmb3IgcmVwbHkgc3RyaW5nCityZW1vdGVfcmVhZCgge3NlcnZlcmlkfSkJU3RyaW5nCXJlYWQgcmVwbHkgc3RyaW5nCityZW1vdGVfc2VuZCgge3NlcnZlcn0sIHtzdHJpbmd9IFssIHtpZHZhcn1dKQorCQkJCVN0cmluZwlzZW5kIGtleSBzZXF1ZW5jZQorcmVuYW1lKCB7ZnJvbX0sIHt0b30pCQlOdW1iZXIgIHJlbmFtZSAobW92ZSkgZmlsZSBmcm9tIHtmcm9tfSB0byB7dG99CityZXNvbHZlKCB7ZmlsZW5hbWV9KQkJU3RyaW5nICBnZXQgZmlsZW5hbWUgYSBzaG9ydGN1dCBwb2ludHMgdG8KK3NlYXJjaCgge3BhdHRlcm59IFssIHtmbGFnc31dKQlOdW1iZXIgIHNlYXJjaCBmb3Ige3BhdHRlcm59CitzZWFyY2hwYWlyKCB7c3RhcnR9LCB7bWlkZGxlfSwge2VuZH0gWywge2ZsYWdzfSBbLCB7c2tpcH1dXSkKKwkJCQlOdW1iZXIgIHNlYXJjaCBmb3Igb3RoZXIgZW5kIG9mIHN0YXJ0L2VuZCBwYWlyCitzZXJ2ZXIyY2xpZW50KCB7Y2xpZW50aWR9LCB7c3RyaW5nfSkKKwkJCQlOdW1iZXIJc2VuZCByZXBseSBzdHJpbmcKK3NlcnZlcmxpc3QoKQkJCVN0cmluZwlnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBzZXJ2ZXJzCitzZXRidWZ2YXIoIHtleHByfSwge3Zhcm5hbWV9LCB7dmFsfSkJc2V0IHt2YXJuYW1lfSBpbiBidWZmZXIge2V4cHJ9IHRvIHt2YWx9CitzZXRjbWRwb3MoIHtwb3N9KQkJTnVtYmVyCXNldCBjdXJzb3IgcG9zaXRpb24gaW4gY29tbWFuZC1saW5lCitzZXRsaW5lKCB7bG51bX0sIHtsaW5lfSkJTnVtYmVyCXNldCBsaW5lIHtsbnVtfSB0byB7bGluZX0KK3NldHJlZygge259LCB7dn1bLCB7b3B0fV0pCU51bWJlciAgc2V0IHJlZ2lzdGVyIHRvIHZhbHVlIGFuZCB0eXBlCitzZXR3aW52YXIoIHtucn0sIHt2YXJuYW1lfSwge3ZhbH0pCXNldCB7dmFybmFtZX0gaW4gd2luZG93IHtucn0gdG8ge3ZhbH0KK3NpbXBsaWZ5KCB7ZmlsZW5hbWV9KQkJU3RyaW5nICBzaW1wbGlmeSBmaWxlbmFtZSBhcyBtdWNoIGFzIHBvc3NpYmxlCitzdHJmdGltZSgge2Zvcm1hdH1bLCB7dGltZX1dKQlTdHJpbmcJdGltZSBpbiBzcGVjaWZpZWQgZm9ybWF0CitzdHJpZHgoIHtoYXlzdGFja30sIHtuZWVkbGV9KQlOdW1iZXIJZmlyc3QgaW5kZXggb2Yge25lZWRsZX0gaW4ge2hheXN0YWNrfQorc3RybGVuKCB7ZXhwcn0pCQkJTnVtYmVyCWxlbmd0aCBvZiB0aGUgU3RyaW5nIHtleHByfQorc3RycGFydCgge3NyY30sIHtzdGFydH1bLCB7bGVufV0pCisJCQkJU3RyaW5nCXtsZW59IGNoYXJhY3RlcnMgb2Yge3NyY30gYXQge3N0YXJ0fQorc3RycmlkeCgge2hheXN0YWNrfSwge25lZWRsZX0pCU51bWJlcglsYXN0IGluZGV4IG9mIHtuZWVkbGV9IGluIHtoYXlzdGFja30KK3N0cnRyYW5zKCB7ZXhwcn0pCQlTdHJpbmcJdHJhbnNsYXRlIHN0cmluZyB0byBtYWtlIGl0IHByaW50YWJsZQorc3VibWF0Y2goIHtucn0pCQkJU3RyaW5nICBzcGVjaWZpYyBtYXRjaCBpbiAiOnN1YnN0aXR1dGUiCitzdWJzdGl0dXRlKCB7ZXhwcn0sIHtwYXR9LCB7c3VifSwge2ZsYWdzfSkKKwkJCQlTdHJpbmcJYWxsIHtwYXR9IGluIHtleHByfSByZXBsYWNlZCB3aXRoIHtzdWJ9CitzeW5JRCgge2xpbmV9LCB7Y29sfSwge3RyYW5zfSkJTnVtYmVyCXN5bnRheCBJRCBhdCB7bGluZX0gYW5kIHtjb2x9CitzeW5JRGF0dHIoIHtzeW5JRH0sIHt3aGF0fSBbLCB7bW9kZX1dKQorCQkJCVN0cmluZwlhdHRyaWJ1dGUge3doYXR9IG9mIHN5bnRheCBJRCB7c3luSUR9CitzeW5JRHRyYW5zKCB7c3luSUR9KQkJTnVtYmVyCXRyYW5zbGF0ZWQgc3ludGF4IElEIG9mIHtzeW5JRH0KK3N5c3RlbSgge2V4cHJ9KQkJCVN0cmluZwlvdXRwdXQgb2Ygc2hlbGwgY29tbWFuZCB7ZXhwcn0KK3RlbXBuYW1lKCkJCQlTdHJpbmcJbmFtZSBmb3IgYSB0ZW1wb3JhcnkgZmlsZQordG9sb3dlcigge2V4cHJ9KQkJU3RyaW5nCXRoZSBTdHJpbmcge2V4cHJ9IHN3aXRjaGVkIHRvIGxvd2VyY2FzZQordG91cHBlcigge2V4cHJ9KQkJU3RyaW5nCXRoZSBTdHJpbmcge2V4cHJ9IHN3aXRjaGVkIHRvIHVwcGVyY2FzZQordHlwZSgge25hbWV9KQkJCU51bWJlcgl0eXBlIG9mIHZhcmlhYmxlIHtuYW1lfQordmlydGNvbCgge2V4cHJ9KQkJTnVtYmVyCXNjcmVlbiBjb2x1bW4gb2YgY3Vyc29yIG9yIG1hcmsKK3Zpc3VhbG1vZGUoIFtleHByXSkJCVN0cmluZwlsYXN0IHZpc3VhbCBtb2RlIHVzZWQKK3dpbmJ1Zm5yKCB7bnJ9KQkJCU51bWJlcglidWZmZXIgbnVtYmVyIG9mIHdpbmRvdyB7bnJ9Cit3aW5jb2woKQkJCU51bWJlcgl3aW5kb3cgY29sdW1uIG9mIHRoZSBjdXJzb3IKK3dpbmhlaWdodCgge25yfSkJCU51bWJlcgloZWlnaHQgb2Ygd2luZG93IHtucn0KK3dpbmxpbmUoKQkJCU51bWJlcgl3aW5kb3cgbGluZSBvZiB0aGUgY3Vyc29yCit3aW5ucigpCQkJCU51bWJlcgludW1iZXIgb2YgY3VycmVudCB3aW5kb3cKK3dpbnJlc3RjbWQoKQkJCVN0cmluZyAgcmV0dXJucyBjb21tYW5kIHRvIHJlc3RvcmUgd2luZG93IHNpemVzCit3aW53aWR0aCgge25yfSkJCQlOdW1iZXIJd2lkdGggb2Ygd2luZG93IHtucn0KKworYXBwZW5kKHtsbnVtfSwge3N0cmluZ30pCQkJCSphcHBlbmQoKSoKKwkJQXBwZW5kIHRoZSB0ZXh0IHtzdHJpbmd9IGFmdGVyIGxpbmUge2xudW19IGluIHRoZSBjdXJyZW50CisJCWJ1ZmZlci4gIHtsbnVtfSBjYW4gYmUgemVybywgdG8gaW5zZXJ0IGEgbGluZSBiZWZvcmUgdGhlIGZpcnN0CisJCW9uZS4gIFJldHVybnMgMSBmb3IgZmFpbHVyZSAoe2xudW19IG91dCBvZiByYW5nZSkgb3IgMCBmb3IKKwkJc3VjY2Vzcy4KKworCQkJCQkJCSphcmdjKCkqCithcmdjKCkJCVRoZSByZXN1bHQgaXMgdGhlIG51bWJlciBvZiBmaWxlcyBpbiB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUKKwkJY3VycmVudCB3aW5kb3cuICBTZWUgfGFyZ2xpc3R8LgorCisJCQkJCQkJKmFyZ2lkeCgpKgorYXJnaWR4KCkJVGhlIHJlc3VsdCBpcyB0aGUgY3VycmVudCBpbmRleCBpbiB0aGUgYXJndW1lbnQgbGlzdC4gIDAgaXMKKwkJdGhlIGZpcnN0IGZpbGUuICBhcmdjKCkgLSAxIGlzIHRoZSBsYXN0IG9uZS4gIFNlZSB8YXJnbGlzdHwuCisKKwkJCQkJCQkqYXJndigpKgorYXJndih7bnJ9KQlUaGUgcmVzdWx0IGlzIHRoZSB7bnJ9dGggZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUKKwkJY3VycmVudCB3aW5kb3cuICBTZWUgfGFyZ2xpc3R8LiAgImFyZ3YoMCkiIGlzIHRoZSBmaXJzdCBvbmUuCisJCUV4YW1wbGU6ID4KKwk6bGV0IGkgPSAwCisJOndoaWxlIGkgPCBhcmdjKCkKKwk6ICBsZXQgZiA9IGVzY2FwZShhcmd2KGkpLCAnLiAnKQorCTogIGV4ZSAnYW1lbnUgQXJnLicgLiBmIC4gJyA6ZSAnIC4gZiAuICc8Q1I+JworCTogIGxldCBpID0gaSArIDEKKwk6ZW5kd2hpbGUKKzwKKwkJCQkJCQkqYnJvd3NlKCkqCiticm93c2Uoe3NhdmV9LCB7dGl0bGV9LCB7aW5pdGRpcn0sIHtkZWZhdWx0fSkKKwkJUHV0IHVwIGEgZmlsZSByZXF1ZXN0ZXIuICBUaGlzIG9ubHkgd29ya3Mgd2hlbiAiaGFzKCJicm93c2UiKSIKKwkJcmV0dXJucyBub24temVybyAob25seSBpbiBzb21lIEdVSSB2ZXJzaW9ucykuCisJCVRoZSBpbnB1dCBmaWVsZHMgYXJlOgorCQkgICAge3NhdmV9CXdoZW4gbm9uLXplcm8sIHNlbGVjdCBmaWxlIHRvIHdyaXRlCisJCSAgICB7dGl0bGV9CXRpdGxlIGZvciB0aGUgcmVxdWVzdGVyCisJCSAgICB7aW5pdGRpcn0JZGlyZWN0b3J5IHRvIHN0YXJ0IGJyb3dzaW5nIGluCisJCSAgICB7ZGVmYXVsdH0JZGVmYXVsdCBmaWxlIG5hbWUKKwkJV2hlbiB0aGUgIkNhbmNlbCIgYnV0dG9uIGlzIGhpdCwgc29tZXRoaW5nIHdlbnQgd3JvbmcsIG9yCisJCWJyb3dzaW5nIGlzIG5vdCBwb3NzaWJsZSwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorCitidWZleGlzdHMoe2V4cHJ9KQkJCQkJKmJ1ZmV4aXN0cygpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyBub24temVybyBpZiBhIGJ1ZmZlciBjYWxsZWQKKwkJe2V4cHJ9IGV4aXN0cy4KKwkJSWYgdGhlIHtleHByfSBhcmd1bWVudCBpcyBhIHN0cmluZyBpdCBtdXN0IG1hdGNoIGEgYnVmZmVyIG5hbWUKKwkJZXhhY3RseS4KKwkJSWYgdGhlIHtleHByfSBhcmd1bWVudCBpcyBhIG51bWJlciBidWZmZXIgbnVtYmVycyBhcmUgdXNlZC4KKwkJVW5saXN0ZWQgYnVmZmVycyB3aWxsIGJlIGZvdW5kLgorCQlOb3RlIHRoYXQgaGVscCBmaWxlcyBhcmUgbGlzdGVkIGJ5IHRoZWlyIHNob3J0IG5hbWUgaW4gdGhlCisJCW91dHB1dCBvZiB8OmJ1ZmZlcnN8LCBidXQgYnVmZXhpc3RzKCkgcmVxdWlyZXMgdXNpbmcgdGhlaXIKKwkJbG9uZyBuYW1lIHRvIGJlIGFibGUgdG8gZmluZCB0aGVtLgorCQlVc2UgImJ1ZmV4aXN0cygwKSIgdG8gdGVzdCBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhbiBhbHRlcm5hdGUKKwkJZmlsZSBuYW1lLgorCQkJCQkJCSpidWZmZXJfZXhpc3RzKCkqCisJCU9ic29sZXRlIG5hbWU6IGJ1ZmZlcl9leGlzdHMoKS4KKworYnVmbGlzdGVkKHtleHByfSkJCQkJCSpidWZsaXN0ZWQoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgbm9uLXplcm8gaWYgYSBidWZmZXIgY2FsbGVkCisJCXtleHByfSBleGlzdHMgYW5kIGlzIGxpc3RlZCAoaGFzIHRoZSAnYnVmbGlzdGVkJyBvcHRpb24gc2V0KS4KKwkJVGhlIHtleHByfSBhcmd1bWVudCBpcyB1c2VkIGxpa2Ugd2l0aCBidWZleGlzdHMoKS4KKworYnVmbG9hZGVkKHtleHByfSkJCQkJCSpidWZsb2FkZWQoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgbm9uLXplcm8gaWYgYSBidWZmZXIgY2FsbGVkCisJCXtleHByfSBleGlzdHMgYW5kIGlzIGxvYWRlZCAoc2hvd24gaW4gYSB3aW5kb3cgb3IgaGlkZGVuKS4KKwkJVGhlIHtleHByfSBhcmd1bWVudCBpcyB1c2VkIGxpa2Ugd2l0aCBidWZleGlzdHMoKS4KKworYnVmbmFtZSh7ZXhwcn0pCQkJCQkJKmJ1Zm5hbWUoKSoKKwkJVGhlIHJlc3VsdCBpcyB0aGUgbmFtZSBvZiBhIGJ1ZmZlciwgYXMgaXQgaXMgZGlzcGxheWVkIGJ5IHRoZQorCQkiOmxzIiBjb21tYW5kLgorCQlJZiB7ZXhwcn0gaXMgYSBOdW1iZXIsIHRoYXQgYnVmZmVyIG51bWJlcidzIG5hbWUgaXMgZ2l2ZW4uCisJCU51bWJlciB6ZXJvIGlzIHRoZSBhbHRlcm5hdGUgYnVmZmVyIGZvciB0aGUgY3VycmVudCB3aW5kb3cuCisJCUlmIHtleHByfSBpcyBhIFN0cmluZywgaXQgaXMgdXNlZCBhcyBhIHxmaWxlLXBhdHRlcm58IHRvIG1hdGNoCisJCXdpdGggdGhlIGJ1ZmZlciBuYW1lcy4gIFRoaXMgaXMgYWx3YXlzIGRvbmUgbGlrZSAnbWFnaWMnIGlzCisJCXNldCBhbmQgJ2Nwb3B0aW9ucycgaXMgZW1wdHkuICBXaGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUKKwkJbWF0Y2ggYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorCQkiIiBvciAiJSIgY2FuIGJlIHVzZWQgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciwgIiMiIGZvciB0aGUKKwkJYWx0ZXJuYXRlIGJ1ZmZlci4KKwkJQSBmdWxsIG1hdGNoIGlzIHByZWZlcnJlZCwgb3RoZXJ3aXNlIGEgbWF0Y2ggYXQgdGhlIHN0YXJ0LCBlbmQKKwkJb3IgbWlkZGxlIG9mIHRoZSBidWZmZXIgbmFtZSBpcyBhY2NlcHRlZC4KKwkJTGlzdGVkIGJ1ZmZlcnMgYXJlIGZvdW5kIGZpcnN0LiAgSWYgdGhlcmUgaXMgYSBzaW5nbGUgbWF0Y2gKKwkJd2l0aCBhIGxpc3RlZCBidWZmZXIsIHRoYXQgb25lIGlzIHJldHVybmVkLiAgTmV4dCB1bmxpc3RlZAorCQlidWZmZXJzIGFyZSBzZWFyY2hlZCBmb3IuCisJCUlmIHRoZSB7ZXhwcn0gaXMgYSBTdHJpbmcsIGJ1dCB5b3Ugd2FudCB0byB1c2UgaXQgYXMgYSBidWZmZXIKKwkJbnVtYmVyLCBmb3JjZSBpdCB0byBiZSBhIE51bWJlciBieSBhZGRpbmcgemVybyB0byBpdDogPgorCQkJOmVjaG8gYnVmbmFtZSgiMyIgKyAwKQorPAkJSWYgdGhlIGJ1ZmZlciBkb2Vzbid0IGV4aXN0LCBvciBkb2Vzbid0IGhhdmUgYSBuYW1lLCBhbiBlbXB0eQorCQlzdHJpbmcgaXMgcmV0dXJuZWQuID4KKwlidWZuYW1lKCIjIikJCWFsdGVybmF0ZSBidWZmZXIgbmFtZQorCWJ1Zm5hbWUoMykJCW5hbWUgb2YgYnVmZmVyIDMKKwlidWZuYW1lKCIlIikJCW5hbWUgb2YgY3VycmVudCBidWZmZXIKKwlidWZuYW1lKCJmaWxlMiIpCW5hbWUgb2YgYnVmZmVyIHdoZXJlICJmaWxlMiIgbWF0Y2hlcy4KKzwJCQkJCQkJKmJ1ZmZlcl9uYW1lKCkqCisJCU9ic29sZXRlIG5hbWU6IGJ1ZmZlcl9uYW1lKCkuCisKKwkJCQkJCQkqYnVmbnIoKSoKK2J1Zm5yKHtleHByfSkJVGhlIHJlc3VsdCBpcyB0aGUgbnVtYmVyIG9mIGEgYnVmZmVyLCBhcyBpdCBpcyBkaXNwbGF5ZWQgYnkKKwkJdGhlICI6bHMiIGNvbW1hbmQuICBGb3IgdGhlIHVzZSBvZiB7ZXhwcn0sIHNlZSB8YnVmbmFtZSgpfAorCQlhYm92ZS4gIElmIHRoZSBidWZmZXIgZG9lc24ndCBleGlzdCwgLTEgaXMgcmV0dXJuZWQuCisJCWJ1Zm5yKCIkIikgaXMgdGhlIGxhc3QgYnVmZmVyOiA+CisJOmxldCBsYXN0X2J1ZmZlciA9IGJ1Zm5yKCIkIikKKzwJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBoaWdoZXN0IGJ1ZmZlciBudW1iZXIKKwkJb2YgZXhpc3RpbmcgYnVmZmVycy4gIE5vdGUgdGhhdCBub3QgYWxsIGJ1ZmZlcnMgd2l0aCBhIHNtYWxsZXIKKwkJbnVtYmVyIG5lY2Vzc2FyaWx5IGV4aXN0LCBiZWNhdXNlICI6YndpcGVvdXQiIG1heSBoYXZlIHJlbW92ZWQKKwkJdGhlbS4gIFVzZSBidWZleGlzdHMoKSB0byB0ZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mIGEgYnVmZmVyLgorCQkJCQkJCSpidWZmZXJfbnVtYmVyKCkqCisJCU9ic29sZXRlIG5hbWU6IGJ1ZmZlcl9udW1iZXIoKS4KKwkJCQkJCQkqbGFzdF9idWZmZXJfbnIoKSoKKwkJT2Jzb2xldGUgbmFtZSBmb3IgYnVmbnIoIiQiKTogbGFzdF9idWZmZXJfbnIoKS4KKworYnVmd2lubnIoe2V4cHJ9KQkJCQkJKmJ1Zndpbm5yKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0CisJCXdpbmRvdyBhc3NvY2lhdGVkIHdpdGggYnVmZmVyIHtleHByfS4gIEZvciB0aGUgdXNlIG9mIHtleHByfSwKKwkJc2VlIHxidWZuYW1lKCl8IGFib3ZlLiAgSWYgYnVmZmVyIHtleHByfSBkb2Vzbid0IGV4aXN0IG9yCisJCXRoZXJlIGlzIG5vIHN1Y2ggd2luZG93LCAtMSBpcyByZXR1cm5lZC4gIEV4YW1wbGU6ID4KKworCWVjaG8gIkEgd2luZG93IGNvbnRhaW5pbmcgYnVmZmVyIDEgaXMgIiAuIChidWZ3aW5ucigxKSkKKworPAkJVGhlIG51bWJlciBjYW4gYmUgdXNlZCB3aXRoIHxDVFJMLVdfd3wgYW5kICI6d2luY21kIHciCisJCXw6d2luY21kfC4KKworCitieXRlMmxpbmUoe2J5dGV9KQkJCQkJKmJ5dGUybGluZSgpKgorCQlSZXR1cm4gdGhlIGxpbmUgbnVtYmVyIHRoYXQgY29udGFpbnMgdGhlIGNoYXJhY3RlciBhdCBieXRlCisJCWNvdW50IHtieXRlfSBpbiB0aGUgY3VycmVudCBidWZmZXIuICBUaGlzIGluY2x1ZGVzIHRoZQorCQllbmQtb2YtbGluZSBjaGFyYWN0ZXIsIGRlcGVuZGluZyBvbiB0aGUgJ2ZpbGVmb3JtYXQnIG9wdGlvbgorCQlmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLiAgVGhlIGZpcnN0IGNoYXJhY3RlciBoYXMgYnl0ZSBjb3VudAorCQlvbmUuCisJCUFsc28gc2VlIHxsaW5lMmJ5dGUoKXwsIHxnb3wgYW5kIHw6Z290b3wuCisJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtieXRlX29mZnNldHwKKwkJZmVhdHVyZX0KKworY2hhcjJucih7ZXhwcn0pCQkJCQkJKmNoYXIybnIoKSoKKwkJUmV0dXJuIG51bWJlciB2YWx1ZSBvZiB0aGUgZmlyc3QgY2hhciBpbiB7ZXhwcn0uICBFeGFtcGxlczogPgorCQkJY2hhcjJucigiICIpCQlyZXR1cm5zIDMyCisJCQljaGFyMm5yKCJBQkMiKQkJcmV0dXJucyA2NQorPAkJVGhlIGN1cnJlbnQgJ2VuY29kaW5nJyBpcyB1c2VkLiAgRXhhbXBsZSBmb3IgInV0Zi04IjogPgorCQkJY2hhcjJucigi4SIpCQlyZXR1cm5zIDIyNQorCQkJY2hhcjJucigi4SJbMF0pCQlyZXR1cm5zIDE5NQorCitjaW5kZW50KHtsbnVtfSkJCQkJCQkqY2luZGVudCgpKgorCQlHZXQgdGhlIGFtb3VudCBvZiBpbmRlbnQgZm9yIGxpbmUge2xudW19IGFjY29yZGluZyB0aGUgQworCQlpbmRlbnRpbmcgcnVsZXMsIGFzIHdpdGggJ2NpbmRlbnQnLgorCQlUaGUgaW5kZW50IGlzIGNvdW50ZWQgaW4gc3BhY2VzLCB0aGUgdmFsdWUgb2YgJ3RhYnN0b3AnIGlzCisJCXJlbGV2YW50LiAge2xudW19IGlzIHVzZWQganVzdCBsaWtlIGluIHxnZXRsaW5lKCl8LgorCQlXaGVuIHtsbnVtfSBpcyBpbnZhbGlkIG9yIFZpbSB3YXMgbm90IGNvbXBpbGVkIHRoZSB8K2NpbmRlbnR8CisJCWZlYXR1cmUsIC0xIGlzIHJldHVybmVkLgorCisJCQkJCQkJKmNvbCgpKgorY29sKHtleHByfSkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIGNvbHVtbiBvZiB0aGUgZmlsZQorCQlwb3NpdGlvbiBnaXZlbiB3aXRoIHtleHByfS4gIFRoZSBhY2NlcHRlZCBwb3NpdGlvbnMgYXJlOgorCQkgICAgLgkgICAgdGhlIGN1cnNvciBwb3NpdGlvbgorCQkgICAgJAkgICAgdGhlIGVuZCBvZiB0aGUgY3Vyc29yIGxpbmUgKHRoZSByZXN1bHQgaXMgdGhlCisJCQkgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIGN1cnNvciBsaW5lIHBsdXMgb25lKQorCQkgICAgJ3gJICAgIHBvc2l0aW9uIG9mIG1hcmsgeCAoaWYgdGhlIG1hcmsgaXMgbm90IHNldCwgMCBpcworCQkJICAgIHJldHVybmVkKQorCQlGb3IgdGhlIHNjcmVlbiBjb2x1bW4gcG9zaXRpb24gdXNlIHx2aXJ0Y29sKCl8LgorCQlOb3RlIHRoYXQgb25seSBtYXJrcyBpbiB0aGUgY3VycmVudCBmaWxlIGNhbiBiZSB1c2VkLgorCQlFeGFtcGxlczogPgorCQkJY29sKCIuIikJCWNvbHVtbiBvZiBjdXJzb3IKKwkJCWNvbCgiJCIpCQlsZW5ndGggb2YgY3Vyc29yIGxpbmUgcGx1cyBvbmUKKwkJCWNvbCgiJ3QiKQkJY29sdW1uIG9mIG1hcmsgdAorCQkJY29sKCInIiAuIG1hcmtuYW1lKQljb2x1bW4gb2YgbWFyayBtYXJrbmFtZQorPAkJVGhlIGZpcnN0IGNvbHVtbiBpcyAxLiAgMCBpcyByZXR1cm5lZCBmb3IgYW4gZXJyb3IuCisJCUZvciB0aGUgY3Vyc29yIHBvc2l0aW9uLCB3aGVuICd2aXJ0dWFsZWRpdCcgaXMgYWN0aXZlLCB0aGUKKwkJY29sdW1uIGlzIG9uZSBoaWdoZXIgaWYgdGhlIGN1cnNvciBpcyBhZnRlciB0aGUgZW5kIG9mIHRoZQorCQlsaW5lLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdGhlIGNvbHVtbiBpbiBJbnNlcnQgbW9kZTogPgorCQkJOmltYXAgPEYyPiA8Qy1PPjpsZXQgc2F2ZV92ZSA9ICZ2ZTxDUj4KKwkJCQlcPEMtTz46c2V0IHZlPWFsbDxDUj4KKwkJCQlcPEMtTz46ZWNobyBjb2woIi4iKSAuICJcbiIgPEJhcj4KKwkJCQlcbGV0ICZ2ZSA9IHNhdmVfdmU8Q1I+Cis8CisJCQkJCQkqY29uZmlybSgpKgorY29uZmlybSh7bXNnfSBbLCB7Y2hvaWNlc30gWywge2RlZmF1bHR9IFssIHt0eXBlfV1dXSkKKwkJQ29uZmlybSgpIG9mZmVycyB0aGUgdXNlciBhIGRpYWxvZywgZnJvbSB3aGljaCBhIGNob2ljZSBjYW4gYmUKKwkJbWFkZS4gIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgY2hvaWNlLiAgRm9yIHRoZSBmaXJzdAorCQljaG9pY2UgdGhpcyBpcyAxLgorCQlOb3RlOiBjb25maXJtKCkgaXMgb25seSBzdXBwb3J0ZWQgd2hlbiBjb21waWxlZCB3aXRoIGRpYWxvZworCQlzdXBwb3J0LCBzZWUgfCtkaWFsb2dfY29ufCBhbmQgfCtkaWFsb2dfZ3VpfC4KKwkJe21zZ30gaXMgZGlzcGxheWVkIGluIGEgfGRpYWxvZ3wgd2l0aCB7Y2hvaWNlc30gYXMgdGhlCisJCWFsdGVybmF0aXZlcy4gIFdoZW4ge2Nob2ljZXN9IGlzIG1pc3Npbmcgb3IgZW1wdHksICImT0siIGlzCisJCXVzZWQgKGFuZCB0cmFuc2xhdGVkKS4KKwkJe21zZ30gaXMgYSBTdHJpbmcsIHVzZSAnXG4nIHRvIGluY2x1ZGUgYSBuZXdsaW5lLiAgT25seSBvbgorCQlzb21lIHN5c3RlbXMgdGhlIHN0cmluZyBpcyB3cmFwcGVkIHdoZW4gaXQgZG9lc24ndCBmaXQuCisJCXtjaG9pY2VzfSBpcyBhIFN0cmluZywgd2l0aCB0aGUgaW5kaXZpZHVhbCBjaG9pY2VzIHNlcGFyYXRlZAorCQlieSAnXG4nLCBlLmcuID4KKwkJCWNvbmZpcm0oIlNhdmUgY2hhbmdlcz8iLCAiJlllc1xuJk5vXG4mQ2FuY2VsIikKKzwJCVRoZSBsZXR0ZXIgYWZ0ZXIgdGhlICcmJyBpcyB0aGUgc2hvcnRjdXQga2V5IGZvciB0aGF0IGNob2ljZS4KKwkJVGh1cyB5b3UgY2FuIHR5cGUgJ2MnIHRvIHNlbGVjdCAiQ2FuY2VsIi4gIFRoZSBzaG9ydGN1dCBkb2VzCisJCW5vdCBuZWVkIHRvIGJlIHRoZSBmaXJzdCBsZXR0ZXI6ID4KKwkJCWNvbmZpcm0oImZpbGUgaGFzIGJlZW4gbW9kaWZpZWQiLCAiJlNhdmVcblNhdmUgJkFsbCIpCis8CQlGb3IgdGhlIGNvbnNvbGUsIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCBjaG9pY2UgaXMgdXNlZCBhcworCQl0aGUgZGVmYXVsdCBzaG9ydGN1dCBrZXkuCisJCVRoZSBvcHRpb25hbCB7ZGVmYXVsdH0gYXJndW1lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgY2hvaWNlCisJCXRoYXQgaXMgbWFkZSBpZiB0aGUgdXNlciBoaXRzIDxDUj4uICBVc2UgMSB0byBtYWtlIHRoZSBmaXJzdAorCQljaG9pY2UgdGhlIGRlZmF1bHQgb25lLiAgVXNlIDAgdG8gbm90IHNldCBhIGRlZmF1bHQuICBJZgorCQl7ZGVmYXVsdH0gaXMgb21pdHRlZCwgMSBpcyB1c2VkLgorCQlUaGUgb3B0aW9uYWwge3R5cGV9IGFyZ3VtZW50IGdpdmVzIHRoZSB0eXBlIG9mIGRpYWxvZy4gIFRoaXMKKwkJaXMgb25seSB1c2VkIGZvciB0aGUgaWNvbiBvZiB0aGUgV2luMzIgR1VJLiAgSXQgY2FuIGJlIG9uZSBvZgorCQl0aGVzZSB2YWx1ZXM6ICJFcnJvciIsICJRdWVzdGlvbiIsICJJbmZvIiwgIldhcm5pbmciIG9yCisJCSJHZW5lcmljIi4gIE9ubHkgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyByZWxldmFudC4gIFdoZW4ge3R5cGV9CisJCWlzIG9taXR0ZWQsICJHZW5lcmljIiBpcyB1c2VkLgorCQlJZiB0aGUgdXNlciBhYm9ydHMgdGhlIGRpYWxvZyBieSBwcmVzc2luZyA8RXNjPiwgQ1RSTC1DLAorCQlvciBhbm90aGVyIHZhbGlkIGludGVycnVwdCBrZXksIGNvbmZpcm0oKSByZXR1cm5zIDAuCisKKwkJQW4gZXhhbXBsZTogPgorICAgOmxldCBjaG9pY2UgPSBjb25maXJtKCJXaGF0IGRvIHlvdSB3YW50PyIsICImQXBwbGVzXG4mT3Jhbmdlc1xuJkJhbmFuYXMiLCAyKQorICAgOmlmIGNob2ljZSA9PSAwCisgICA6CWVjaG8gIm1ha2UgdXAgeW91ciBtaW5kISIKKyAgIDplbHNlaWYgY2hvaWNlID09IDMKKyAgIDoJZWNobyAidGFzdGVmdWwiCisgICA6ZWxzZQorICAgOgllY2hvICJJIHByZWZlciBiYW5hbmFzIG15c2VsZi4iCisgICA6ZW5kaWYKKzwJCUluIGEgR1VJIGRpYWxvZywgYnV0dG9ucyBhcmUgdXNlZC4gIFRoZSBsYXlvdXQgb2YgdGhlIGJ1dHRvbnMKKwkJZGVwZW5kcyBvbiB0aGUgJ3YnIGZsYWcgaW4gJ2d1aW9wdGlvbnMnLiAgSWYgaXQgaXMgaW5jbHVkZWQsCisJCXRoZSBidXR0b25zIGFyZSBhbHdheXMgcHV0IHZlcnRpY2FsbHkuICBPdGhlcndpc2UsICBjb25maXJtKCkKKwkJdHJpZXMgdG8gcHV0IHRoZSBidXR0b25zIGluIG9uZSBob3Jpem9udGFsIGxpbmUuICBJZiB0aGV5CisJCWRvbid0IGZpdCwgYSB2ZXJ0aWNhbCBsYXlvdXQgaXMgdXNlZCBhbnl3YXkuICBGb3Igc29tZSBzeXN0ZW1zCisJCXRoZSBob3Jpem9udGFsIGxheW91dCBpcyBhbHdheXMgdXNlZC4KKworCQkJCQkJCSpjc2NvcGVfY29ubmVjdGlvbigpKgorY3Njb3BlX2Nvbm5lY3Rpb24oW3tudW19ICwge2RicGF0aH0gWywge3ByZXBlbmR9XV0pCisJCUNoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhIHxjc2NvcGV8IGNvbm5lY3Rpb24uICBJZiBubworCQlwYXJhbWV0ZXJzIGFyZSBzcGVjaWZpZWQsIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnM6CisJCQkwLCBpZiBjc2NvcGUgd2FzIG5vdCBhdmFpbGFibGUgKG5vdCBjb21waWxlZCBpbiksIG9yCisJCQkgICBpZiB0aGVyZSBhcmUgbm8gY3Njb3BlIGNvbm5lY3Rpb25zOworCQkJMSwgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNzY29wZSBjb25uZWN0aW9uLgorCisJCUlmIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCwgdGhlbiB0aGUgdmFsdWUgb2Yge251bX0KKwkJZGV0ZXJtaW5lcyBob3cgZXhpc3RlbmNlIG9mIGEgY3Njb3BlIGNvbm5lY3Rpb24gaXMgY2hlY2tlZDoKKworCQl7bnVtfQlEZXNjcmlwdGlvbiBvZiBleGlzdGVuY2UgY2hlY2sKKwkJLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCTAJU2FtZSBhcyBubyBwYXJhbWV0ZXJzIChlLmcuLCAiY3Njb3BlX2Nvbm5lY3Rpb24oKSIpLgorCQkxCUlnbm9yZSB7cHJlcGVuZH0sIGFuZCB1c2UgcGFydGlhbCBzdHJpbmcgbWF0Y2hlcyBmb3IKKwkJCXtkYnBhdGh9LgorCQkyCUlnbm9yZSB7cHJlcGVuZH0sIGFuZCB1c2UgZXhhY3Qgc3RyaW5nIG1hdGNoZXMgZm9yCisJCQl7ZGJwYXRofS4KKwkJMwlVc2Uge3ByZXBlbmR9LCB1c2UgcGFydGlhbCBzdHJpbmcgbWF0Y2hlcyBmb3IgYm90aAorCQkJe2RicGF0aH0gYW5kIHtwcmVwZW5kfS4KKwkJNAlVc2Uge3ByZXBlbmR9LCB1c2UgZXhhY3Qgc3RyaW5nIG1hdGNoZXMgZm9yIGJvdGgKKwkJCXtkYnBhdGh9IGFuZCB7cHJlcGVuZH0uCisKKwkJTm90ZTogQWxsIHN0cmluZyBjb21wYXJpc29ucyBhcmUgY2FzZSBzZW5zaXRpdmUhCisKKwkJRXhhbXBsZXMuICBTdXBwb3NlIHdlIGhhZCB0aGUgZm9sbG93aW5nIChmcm9tICI6Y3Mgc2hvdyIpOiA+CisKKyAgIyBwaWQgICAgZGF0YWJhc2UgbmFtZQkJCXByZXBlbmQgcGF0aAorICAwIDI3NjY0ICBjc2NvcGUub3V0CQkJCS91c3IvbG9jYWwKKzwKKwkJSW52b2NhdGlvbgkJCQkJUmV0dXJuIFZhbCB+CisJCS0tLS0tLS0tLS0JCQkJCS0tLS0tLS0tLS0gPgorCQljc2NvcGVfY29ubmVjdGlvbigpCQkJCQkxCisJCWNzY29wZV9jb25uZWN0aW9uKDEsICJvdXQiKQkJCQkxCisJCWNzY29wZV9jb25uZWN0aW9uKDIsICJvdXQiKQkJCQkwCisJCWNzY29wZV9jb25uZWN0aW9uKDMsICJvdXQiKQkJCQkwCisJCWNzY29wZV9jb25uZWN0aW9uKDMsICJvdXQiLCAibG9jYWwiKQkJCTEKKwkJY3Njb3BlX2Nvbm5lY3Rpb24oNCwgIm91dCIpCQkJCTAKKwkJY3Njb3BlX2Nvbm5lY3Rpb24oNCwgIm91dCIsICJsb2NhbCIpCQkJMAorCQljc2NvcGVfY29ubmVjdGlvbig0LCAiY3Njb3BlLm91dCIsICIvdXNyL2xvY2FsIikJMQorPAorY3Vyc29yKHtsbnVtfSwge2NvbH0pCQkJCQkqY3Vyc29yKCkqCisJCVBvc2l0aW9ucyB0aGUgY3Vyc29yIGF0IHRoZSBjb2x1bW4ge2NvbH0gaW4gdGhlIGxpbmUge2xudW19LgorCQlEb2VzIG5vdCBjaGFuZ2UgdGhlIGp1bXBsaXN0LgorCQlJZiB7bG51bX0gaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGJ1ZmZlciwKKwkJdGhlIGN1cnNvciB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIGxhc3QgbGluZSBpbiB0aGUgYnVmZmVyLgorCQlJZiB7bG51bX0gaXMgemVybywgdGhlIGN1cnNvciB3aWxsIHN0YXkgaW4gdGhlIGN1cnJlbnQgbGluZS4KKwkJSWYge2NvbH0gaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgbGluZSwKKwkJdGhlIGN1cnNvciB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZQorCQlsaW5lLgorCQlJZiB7Y29sfSBpcyB6ZXJvLCB0aGUgY3Vyc29yIHdpbGwgc3RheSBpbiB0aGUgY3VycmVudCBjb2x1bW4uCisKKwkJCQkJCQkqZGVsZXRlKCkqCitkZWxldGUoe2ZuYW1lfSkJRGVsZXRlcyB0aGUgZmlsZSBieSB0aGUgbmFtZSB7Zm5hbWV9LiAgVGhlIHJlc3VsdCBpcyBhIE51bWJlciwKKwkJd2hpY2ggaXMgMCBpZiB0aGUgZmlsZSB3YXMgZGVsZXRlZCBzdWNjZXNzZnVsbHksIGFuZCBub24temVybworCQl3aGVuIHRoZSBkZWxldGlvbiBmYWlsZWQuCisKKwkJCQkJCQkqZGlkX2ZpbGV0eXBlKCkqCitkaWRfZmlsZXR5cGUoKQlSZXR1cm5zIG5vbi16ZXJvIHdoZW4gYXV0b2NvbW1hbmRzIGFyZSBiZWluZyBleGVjdXRlZCBhbmQgdGhlCisJCUZpbGVUeXBlIGV2ZW50IGhhcyBiZWVuIHRyaWdnZXJlZCBhdCBsZWFzdCBvbmNlLiAgQ2FuIGJlIHVzZWQKKwkJdG8gYXZvaWQgdHJpZ2dlcmluZyB0aGUgRmlsZVR5cGUgZXZlbnQgYWdhaW4gaW4gdGhlIHNjcmlwdHMKKwkJdGhhdCBkZXRlY3QgdGhlIGZpbGUgdHlwZS4gfEZpbGVUeXBlfAorCQlXaGVuIGVkaXRpbmcgYW5vdGhlciBmaWxlLCB0aGUgY291bnRlciBpcyByZXNldCwgdGh1cyB0aGlzCisJCXJlYWxseSBjaGVja3MgaWYgdGhlIEZpbGVUeXBlIGV2ZW50IGhhcyBiZWVuIHRyaWdnZXJlZCBmb3IgdGhlCisJCWN1cnJlbnQgYnVmZmVyLiAgVGhpcyBhbGxvd3MgYW4gYXV0b2NvbW1hbmQgdGhhdCBzdGFydHMKKwkJZWRpdGluZyBhbm90aGVyIGJ1ZmZlciB0byBzZXQgJ2ZpbGV0eXBlJyBhbmQgbG9hZCBhIHN5bnRheAorCQlmaWxlLgorCitlc2NhcGUoe3N0cmluZ30sIHtjaGFyc30pCQkJCSplc2NhcGUoKSoKKwkJRXNjYXBlIHRoZSBjaGFyYWN0ZXJzIGluIHtjaGFyc30gdGhhdCBvY2N1ciBpbiB7c3RyaW5nfSB3aXRoIGEKKwkJYmFja3NsYXNoLiAgRXhhbXBsZTogPgorCQkJOmVjaG8gZXNjYXBlKCdjOlxwcm9ncmFtIGZpbGVzXHZpbScsICcgXCcpCis8CQlyZXN1bHRzIGluOiA+CisJCQljOlxccHJvZ3JhbVwgZmlsZXNcXHZpbQorPAorZXZlbnRoYW5kbGVyKCkJCQkJCQkqZXZlbnRoYW5kbGVyKCkqCisJCVJldHVybnMgMSB3aGVuIGluc2lkZSBhbiBldmVudCBoYW5kbGVyLiAgVGhhdCBpcyB0aGF0IFZpbSBnb3QKKwkJaW50ZXJydXB0ZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHVzZXIgdG8gdHlwZSBhIGNoYXJhY3RlciwKKwkJZS5nLiwgd2hlbiBkcm9wcGluZyBhIGZpbGUgb24gVmltLiAgVGhpcyBtZWFucyBpbnRlcmFjdGl2ZQorCQljb21tYW5kcyBjYW5ub3QgYmUgdXNlZC4gIE90aGVyd2lzZSB6ZXJvIGlzIHJldHVybmVkLgorCitleGVjdXRhYmxlKHtleHByfSkJCQkJCSpleGVjdXRhYmxlKCkqCisJCVRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGFuIGV4ZWN1dGFibGUgd2l0aCB0aGUgbmFtZSB7ZXhwcn0KKwkJZXhpc3RzLiAge2V4cHJ9IG11c3QgYmUgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gd2l0aG91dCBhbnkKKwkJYXJndW1lbnRzLiAgZXhlY3V0YWJsZSgpIHVzZXMgdGhlIG5vcm1hbCAkUEFUSC4KKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlcjoKKwkJCTEJZXhpc3RzCisJCQkwCWRvZXMgbm90IGV4aXN0CisJCQktMQlub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBzeXN0ZW0KKworCQkJCQkJCSpleGlzdHMoKSoKK2V4aXN0cyh7ZXhwcn0pCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIG5vbi16ZXJvIGlmIHtleHByfSBpcworCQlkZWZpbmVkLCB6ZXJvIG90aGVyd2lzZS4gIFRoZSB7ZXhwcn0gYXJndW1lbnQgaXMgYSBzdHJpbmcsCisJCXdoaWNoIGNvbnRhaW5zIG9uZSBvZiB0aGVzZToKKwkJCSZvcHRpb24tbmFtZQlWaW0gb3B0aW9uIChvbmx5IGNoZWNrcyBpZiBpdCBleGlzdHMsCisJCQkJCW5vdCBpZiBpdCByZWFsbHkgd29ya3MpCisJCQkrb3B0aW9uLW5hbWUJVmltIG9wdGlvbiB0aGF0IHdvcmtzLgorCQkJJEVOVk5BTUUJZW52aXJvbm1lbnQgdmFyaWFibGUgKGNvdWxkIGFsc28gYmUKKwkJCQkJZG9uZSBieSBjb21wYXJpbmcgd2l0aCBhbiBlbXB0eQorCQkJCQlzdHJpbmcpCisJCQkqZnVuY25hbWUJYnVpbHQtaW4gZnVuY3Rpb24gKHNlZSB8ZnVuY3Rpb25zfCkKKwkJCQkJb3IgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIChzZWUKKwkJCQkJfHVzZXItZnVuY3Rpb25zfCkuCisJCQl2YXJuYW1lCQlpbnRlcm5hbCB2YXJpYWJsZSAoc2VlCisJCQkJCXxpbnRlcm5hbC12YXJpYWJsZXN8KS4gIERvZXMgbm90IHdvcmsKKwkJCQkJZm9yIHxjdXJseS1icmFjZXMtbmFtZXN8LgorCQkJOmNtZG5hbWUJRXggY29tbWFuZDogYnVpbHQtaW4gY29tbWFuZCwgdXNlcgorCQkJCQljb21tYW5kIG9yIGNvbW1hbmQgbW9kaWZpZXIgfDpjb21tYW5kfC4KKwkJCQkJUmV0dXJuczoKKwkJCQkJMSAgZm9yIG1hdGNoIHdpdGggc3RhcnQgb2YgYSBjb21tYW5kCisJCQkJCTIgIGZ1bGwgbWF0Y2ggd2l0aCBhIGNvbW1hbmQKKwkJCQkJMyAgbWF0Y2hlcyBzZXZlcmFsIHVzZXIgY29tbWFuZHMKKwkJCQkJVG8gY2hlY2sgZm9yIGEgc3VwcG9ydGVkIGNvbW1hbmQKKwkJCQkJYWx3YXlzIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgMi4KKwkJCSNldmVudAkJYXV0b2NvbW1hbmQgZGVmaW5lZCBmb3IgdGhpcyBldmVudAorCQkJI2V2ZW50I3BhdHRlcm4JYXV0b2NvbW1hbmQgZGVmaW5lZCBmb3IgdGhpcyBldmVudCBhbmQKKwkJCQkJcGF0dGVybiAodGhlIHBhdHRlcm4gaXMgdGFrZW4KKwkJCQkJbGl0ZXJhbGx5IGFuZCBjb21wYXJlZCB0byB0aGUKKwkJCQkJYXV0b2NvbW1hbmQgcGF0dGVybnMgY2hhcmFjdGVyIGJ5CisJCQkJCWNoYXJhY3RlcikKKwkJRm9yIGNoZWNraW5nIGZvciBhIHN1cHBvcnRlZCBmZWF0dXJlIHVzZSB8aGFzKCl8LgorCisJCUV4YW1wbGVzOiA+CisJCQlleGlzdHMoIiZzaG9ydG5hbWUiKQorCQkJZXhpc3RzKCIkSE9TVE5BTUUiKQorCQkJZXhpc3RzKCIqc3RyZnRpbWUiKQorCQkJZXhpc3RzKCIqczpNeUZ1bmMiKQorCQkJZXhpc3RzKCJidWZjb3VudCIpCisJCQlleGlzdHMoIjpNYWtlIikKKwkJCWV4aXN0cygiI0N1cnNvckhvbGQiKTsKKwkJCWV4aXN0cygiI0J1ZlJlYWRQcmUjKi5neiIpCis8CQlUaGVyZSBtdXN0IGJlIG5vIHNwYWNlIGJldHdlZW4gdGhlIHN5bWJvbCAoJi8kLyovIykgYW5kIHRoZQorCQluYW1lLgorCQlOb3RlIHRoYXQgdGhlIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIG5vdCB0aGUgbmFtZSBvZiB0aGUKKwkJdmFyaWFibGUgaXRzZWxmISAgRm9yIGV4YW1wbGU6ID4KKwkJCWV4aXN0cyhidWZjb3VudCkKKzwJCVRoaXMgZG9lc24ndCBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIHRoZSAiYnVmY291bnQiIHZhcmlhYmxlLAorCQlidXQgZ2V0cyB0aGUgY29udGVudHMgb2YgImJ1ZmNvdW50IiwgYW5kIGNoZWNrcyBpZiB0aGF0CisJCWV4aXN0cy4KKworZXhwYW5kKHtleHByfSBbLCB7ZmxhZ31dKQkJCQkqZXhwYW5kKCkqCisJCUV4cGFuZCB3aWxkY2FyZHMgYW5kIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBrZXl3b3JkcyBpbiB7ZXhwcn0uCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcuCisKKwkJV2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBtYXRjaGVzLCB0aGV5IGFyZSBzZXBhcmF0ZWQgYnkgPE5MPgorCQljaGFyYWN0ZXJzLiAgW05vdGU6IGluIHZlcnNpb24gNS4wIGEgc3BhY2Ugd2FzIHVzZWQsIHdoaWNoCisJCWNhdXNlZCBwcm9ibGVtcyB3aGVuIGEgZmlsZSBuYW1lIGNvbnRhaW5zIGEgc3BhY2VdCisKKwkJSWYgdGhlIGV4cGFuc2lvbiBmYWlscywgdGhlIHJlc3VsdCBpcyBhbiBlbXB0eSBzdHJpbmcuICBBIG5hbWUKKwkJZm9yIGEgbm9uLWV4aXN0aW5nIGZpbGUgaXMgbm90IGluY2x1ZGVkLgorCisJCVdoZW4ge2V4cHJ9IHN0YXJ0cyB3aXRoICclJywgJyMnIG9yICc8JywgdGhlIGV4cGFuc2lvbiBpcyBkb25lCisJCWxpa2UgZm9yIHRoZSB8Y21kbGluZS1zcGVjaWFsfCB2YXJpYWJsZXMgd2l0aCB0aGVpciBhc3NvY2lhdGVkCisJCW1vZGlmaWVycy4gIEhlcmUgaXMgYSBzaG9ydCBvdmVydmlldzoKKworCQkJJQkJY3VycmVudCBmaWxlIG5hbWUKKwkJCSMJCWFsdGVybmF0ZSBmaWxlIG5hbWUKKwkJCSNuCQlhbHRlcm5hdGUgZmlsZSBuYW1lIG4KKwkJCTxjZmlsZT4JCWZpbGUgbmFtZSB1bmRlciB0aGUgY3Vyc29yCisJCQk8YWZpbGU+CQlhdXRvY21kIGZpbGUgbmFtZQorCQkJPGFidWY+CQlhdXRvY21kIGJ1ZmZlciBudW1iZXIgKGFzIGEgU3RyaW5nISkKKwkJCTxhbWF0Y2g+CWF1dG9jbWQgbWF0Y2hlZCBuYW1lCisJCQk8c2ZpbGU+CQlzb3VyY2VkIHNjcmlwdCBmaWxlIG5hbWUKKwkJCTxjd29yZD4JCXdvcmQgdW5kZXIgdGhlIGN1cnNvcgorCQkJPGNXT1JEPgkJV09SRCB1bmRlciB0aGUgY3Vyc29yCisJCQk8Y2xpZW50Pgl0aGUge2NsaWVudGlkfSBvZiB0aGUgbGFzdCByZWNlaXZlZAorCQkJCQltZXNzYWdlIHxzZXJ2ZXIyY2xpZW50KCl8CisJCU1vZGlmaWVyczoKKwkJCTpwCQlleHBhbmQgdG8gZnVsbCBwYXRoCisJCQk6aAkJaGVhZCAobGFzdCBwYXRoIGNvbXBvbmVudCByZW1vdmVkKQorCQkJOnQJCXRhaWwgKGxhc3QgcGF0aCBjb21wb25lbnQgb25seSkKKwkJCTpyCQlyb290IChvbmUgZXh0ZW5zaW9uIHJlbW92ZWQpCisJCQk6ZQkJZXh0ZW5zaW9uIG9ubHkKKworCQlFeGFtcGxlOiA+CisJCQk6bGV0ICZ0YWdzID0gZXhwYW5kKCIlOnA6aCIpIC4gIi90YWdzIgorPAkJTm90ZSB0aGF0IHdoZW4gZXhwYW5kaW5nIGEgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggJyUnLCAnIycgb3IKKwkJJzwnLCBhbnkgZm9sbG93aW5nIHRleHQgaXMgaWdub3JlZC4gIFRoaXMgZG9lcyBOT1Qgd29yazogPgorCQkJOmxldCBkb2VzbnR3b3JrID0gZXhwYW5kKCIlOmguYmFrIikKKzwJCVVzZSB0aGlzOiA+CisJCQk6bGV0IGRvZXN3b3JrID0gZXhwYW5kKCIlOmgiKSAuICIuYmFrIgorPAkJQWxzbyBub3RlIHRoYXQgZXhwYW5kaW5nICI8Y2ZpbGU+IiBhbmQgb3RoZXJzIG9ubHkgcmV0dXJucyB0aGUKKwkJcmVmZXJlbmNlZCBmaWxlIG5hbWUgd2l0aG91dCBmdXJ0aGVyIGV4cGFuc2lvbi4gIElmICI8Y2ZpbGU+IgorCQlpcyAifi8uY3NocmMiLCB5b3UgbmVlZCB0byBkbyBhbm90aGVyIGV4cGFuZCgpIHRvIGhhdmUgdGhlCisJCSJ+LyIgZXhwYW5kZWQgaW50byB0aGUgcGF0aCBvZiB0aGUgaG9tZSBkaXJlY3Rvcnk6ID4KKwkJCTplY2hvIGV4cGFuZChleHBhbmQoIjxjZmlsZT4iKSkKKzwKKwkJVGhlcmUgY2Fubm90IGJlIHdoaXRlIHNwYWNlIGJldHdlZW4gdGhlIHZhcmlhYmxlcyBhbmQgdGhlCisJCWZvbGxvd2luZyBtb2RpZmllci4gIFRoZSB8Zm5hbWVtb2RpZnkoKXwgZnVuY3Rpb24gY2FuIGJlIHVzZWQKKwkJdG8gbW9kaWZ5IG5vcm1hbCBmaWxlIG5hbWVzLgorCisJCVdoZW4gdXNpbmcgJyUnIG9yICcjJywgYW5kIHRoZSBjdXJyZW50IG9yIGFsdGVybmF0ZSBmaWxlIG5hbWUKKwkJaXMgbm90IGRlZmluZWQsIGFuIGVtcHR5IHN0cmluZyBpcyB1c2VkLiAgVXNpbmcgIiU6cCIgaW4gYQorCQlidWZmZXIgd2l0aCBubyBuYW1lLCByZXN1bHRzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2l0aCBhCisJCScvJyBhZGRlZC4KKworCQlXaGVuIHtleHByfSBkb2VzIG5vdCBzdGFydCB3aXRoICclJywgJyMnIG9yICc8JywgaXQgaXMKKwkJZXhwYW5kZWQgbGlrZSBhIGZpbGUgbmFtZSBpcyBleHBhbmRlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCQknc3VmZml4ZXMnIGFuZCAnd2lsZGlnbm9yZScgYXJlIHVzZWQsIHVubGVzcyB0aGUgb3B0aW9uYWwKKwkJe2ZsYWd9IGFyZ3VtZW50IGlzIGdpdmVuIGFuZCBpdCBpcyBub24temVyby4gIE5hbWVzIGZvcgorCQlub24tZXhpc3RpbmcgZmlsZXMgYXJlIGluY2x1ZGVkLgorCisJCUV4cGFuZCgpIGNhbiBhbHNvIGJlIHVzZWQgdG8gZXhwYW5kIHZhcmlhYmxlcyBhbmQgZW52aXJvbm1lbnQKKwkJdmFyaWFibGVzIHRoYXQgYXJlIG9ubHkga25vd24gaW4gYSBzaGVsbC4gIEJ1dCB0aGlzIGNhbiBiZQorCQlzbG93LCBiZWNhdXNlIGEgc2hlbGwgbXVzdCBiZSBzdGFydGVkLiAgU2VlIHxleHByLWVudi1leHBhbmR8LgorCQlUaGUgZXhwYW5kZWQgdmFyaWFibGUgaXMgc3RpbGwgaGFuZGxlZCBsaWtlIGEgbGlzdCBvZiBmaWxlCisJCW5hbWVzLiAgV2hlbiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW5ub3QgYmUgZXhwYW5kZWQsIGl0IGlzCisJCWxlZnQgdW5jaGFuZ2VkLiAgVGh1cyAiOmVjaG8gZXhwYW5kKCckRk9PQkFSJykiIHJlc3VsdHMgaW4KKwkJIiRGT09CQVIiLgorCisJCVNlZSB8Z2xvYigpfCBmb3IgZmluZGluZyBleGlzdGluZyBmaWxlcy4gIFNlZSB8c3lzdGVtKCl8IGZvcgorCQlnZXR0aW5nIHRoZSByYXcgb3V0cHV0IG9mIGFuIGV4dGVybmFsIGNvbW1hbmQuCisKK2ZpbGVyZWFkYWJsZSh7ZmlsZX0pCQkJCQkqZmlsZXJlYWRhYmxlKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIFRSVUUgd2hlbiBhIGZpbGUgd2l0aCB0aGUKKwkJbmFtZSB7ZmlsZX0gZXhpc3RzLCBhbmQgY2FuIGJlIHJlYWQuICBJZiB7ZmlsZX0gZG9lc24ndCBleGlzdCwKKwkJb3IgaXMgYSBkaXJlY3RvcnksIHRoZSByZXN1bHQgaXMgRkFMU0UuICB7ZmlsZX0gaXMgYW55CisJCWV4cHJlc3Npb24sIHdoaWNoIGlzIHVzZWQgYXMgYSBTdHJpbmcuCisJCQkJCQkJKmZpbGVfcmVhZGFibGUoKSoKKwkJT2Jzb2xldGUgbmFtZTogZmlsZV9yZWFkYWJsZSgpLgorCitmaWxld3JpdGFibGUoe2ZpbGV9KQkJCQkJKmZpbGV3cml0YWJsZSgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyAxIHdoZW4gYSBmaWxlIHdpdGggdGhlCisJCW5hbWUge2ZpbGV9IGV4aXN0cywgYW5kIGNhbiBiZSB3cml0dGVuLiAgSWYge2ZpbGV9IGRvZXNuJ3QKKwkJZXhpc3QsIG9yIGlzIG5vdCB3cml0YWJsZSwgdGhlIHJlc3VsdCBpcyAwLiAgSWYgKGZpbGUpIGlzIGEKKwkJZGlyZWN0b3J5LCBhbmQgd2UgY2FuIHdyaXRlIHRvIGl0LCB0aGUgcmVzdWx0IGlzIDIuCisKK2ZuYW1lbW9kaWZ5KHtmbmFtZX0sIHttb2RzfSkJCQkJKmZuYW1lbW9kaWZ5KCkqCisJCU1vZGlmeSBmaWxlIG5hbWUge2ZuYW1lfSBhY2NvcmRpbmcgdG8ge21vZHN9LiAge21vZHN9IGlzIGEKKwkJc3RyaW5nIG9mIGNoYXJhY3RlcnMgbGlrZSBpdCBpcyB1c2VkIGZvciBmaWxlIG5hbWVzIG9uIHRoZQorCQljb21tYW5kIGxpbmUuICBTZWUgfGZpbGVuYW1lLW1vZGlmaWVyc3wuCisJCUV4YW1wbGU6ID4KKwkJCTplY2hvIGZuYW1lbW9kaWZ5KCJtYWluLmMiLCAiOnA6aCIpCis8CQlyZXN1bHRzIGluOiA+CisJCQkvaG9tZS9tb29sL3ZpbS92aW0vc3JjCis8CQlOb3RlOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kICJ+IiBkb24ndCB3b3JrIGluIHtmbmFtZX0sIHVzZQorCQl8ZXhwYW5kKCl8IGZpcnN0IHRoZW4uCisKK2ZvbGRjbG9zZWQoe2xudW19KQkJCQkJKmZvbGRjbG9zZWQoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlci4gIElmIHRoZSBsaW5lIHtsbnVtfSBpcyBpbiBhIGNsb3NlZAorCQlmb2xkLCB0aGUgcmVzdWx0IGlzIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IGxpbmUgaW4gdGhhdCBmb2xkLgorCQlJZiB0aGUgbGluZSB7bG51bX0gaXMgbm90IGluIGEgY2xvc2VkIGZvbGQsIC0xIGlzIHJldHVybmVkLgorCitmb2xkY2xvc2VkZW5kKHtsbnVtfSkJCQkJCSpmb2xkY2xvc2VkZW5kKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIuICBJZiB0aGUgbGluZSB7bG51bX0gaXMgaW4gYSBjbG9zZWQKKwkJZm9sZCwgdGhlIHJlc3VsdCBpcyB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IGxpbmUgaW4gdGhhdCBmb2xkLgorCQlJZiB0aGUgbGluZSB7bG51bX0gaXMgbm90IGluIGEgY2xvc2VkIGZvbGQsIC0xIGlzIHJldHVybmVkLgorCitmb2xkbGV2ZWwoe2xudW19KQkJCQkJKmZvbGRsZXZlbCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgZm9sZGxldmVsIG9mIGxpbmUge2xudW19CisJCWluIHRoZSBjdXJyZW50IGJ1ZmZlci4gIEZvciBuZXN0ZWQgZm9sZHMgdGhlIGRlZXBlc3QgbGV2ZWwgaXMKKwkJcmV0dXJuZWQuICBJZiB0aGVyZSBpcyBubyBmb2xkIGF0IGxpbmUge2xudW19LCB6ZXJvIGlzCisJCXJldHVybmVkLiAgSXQgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIGZvbGRzIGFyZSBvcGVuIG9yIGNsb3NlZC4KKwkJV2hlbiB1c2VkIHdoaWxlIHVwZGF0aW5nIGZvbGRzIChmcm9tICdmb2xkZXhwcicpIC0xIGlzCisJCXJldHVybmVkIGZvciBsaW5lcyB3aGVyZSBmb2xkcyBhcmUgc3RpbGwgdG8gYmUgdXBkYXRlZCBhbmQgdGhlCisJCWZvbGRsZXZlbCBpcyB1bmtub3duLiAgQXMgYSBzcGVjaWFsIGNhc2UgdGhlIGxldmVsIG9mIHRoZQorCQlwcmV2aW91cyBsaW5lIGlzIHVzdWFsbHkgYXZhaWxhYmxlLgorCisJCQkJCQkJKmZvbGR0ZXh0KCkqCitmb2xkdGV4dCgpCVJldHVybnMgYSBTdHJpbmcsIHRvIGJlIGRpc3BsYXllZCBmb3IgYSBjbG9zZWQgZm9sZC4gIFRoaXMgaXMKKwkJdGhlIGRlZmF1bHQgZnVuY3Rpb24gdXNlZCBmb3IgdGhlICdmb2xkdGV4dCcgb3B0aW9uIGFuZCBzaG91bGQKKwkJb25seSBiZSBjYWxsZWQgZnJvbSBldmFsdWF0aW5nICdmb2xkdGV4dCcuICBJdCB1c2VzIHRoZQorCQl8djpmb2xkc3RhcnR8LCB8djpmb2xkZW5kfCBhbmQgfHY6Zm9sZGRhc2hlc3wgdmFyaWFibGVzLgorCQlUaGUgcmV0dXJuZWQgc3RyaW5nIGxvb2tzIGxpa2UgdGhpczogPgorCQkJKy0tIDQ1IGxpbmVzOiBhYmNkZWYKKzwJCVRoZSBudW1iZXIgb2YgZGFzaGVzIGRlcGVuZHMgb24gdGhlIGZvbGRsZXZlbC4gIFRoZSAiNDUiIGlzCisJCXRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZvbGQuICAiYWJjZGVmIiBpcyB0aGUgdGV4dCBpbiB0aGUKKwkJZmlyc3Qgbm9uLWJsYW5rIGxpbmUgb2YgdGhlIGZvbGQuICBMZWFkaW5nIHdoaXRlIHNwYWNlLCAiLy8iCisJCW9yICIvKiIgYW5kIHRoZSB0ZXh0IGZyb20gdGhlICdmb2xkbWFya2VyJyBhbmQgJ2NvbW1lbnRzdHJpbmcnCisJCW9wdGlvbnMgaXMgcmVtb3ZlZC4KKwkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8IGZlYXR1cmV9CisKKwkJCQkJCQkqZm9yZWdyb3VuZCgpKgorZm9yZWdyb3VuZCgpCU1vdmUgdGhlIFZpbSB3aW5kb3cgdG8gdGhlIGZvcmVncm91bmQuICBVc2VmdWwgd2hlbiBzZW50IGZyb20KKwkJYSBjbGllbnQgdG8gYSBWaW0gc2VydmVyLiB8cmVtb3RlX3NlbmQoKXwKKwkJT24gV2luMzIgc3lzdGVtcyB0aGlzIG1pZ2h0IG5vdCB3b3JrLCB0aGUgT1MgZG9lcyBub3QgYWx3YXlzCisJCWFsbG93IGEgd2luZG93IHRvIGJyaW5nIGl0c2VsZiB0byB0aGUgZm9yZWdyb3VuZC4gIFVzZQorCQl8cmVtb3RlX2ZvcmVncm91bmQoKXwgaW5zdGVhZC4KKwkJe29ubHkgaW4gdGhlIFdpbjMyLCBBdGhlbmEsIE1vdGlmIGFuZCBHVEsgR1VJIHZlcnNpb25zIGFuZCB0aGUKKwkJV2luMzIgY29uc29sZSB2ZXJzaW9ufQorCitnZXRjaGFyKFtleHByXSkJCQkJCQkqZ2V0Y2hhcigpKgorCQlHZXQgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gdGhlIHVzZXIuICBJZiBpdCBpcyBhbiA4LWJpdAorCQljaGFyYWN0ZXIsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIuICBPdGhlcndpc2UgYSBTdHJpbmcgaXMKKwkJcmV0dXJuZWQgd2l0aCB0aGUgZW5jb2RlZCBjaGFyYWN0ZXIuICBGb3IgYSBzcGVjaWFsIGtleSBpdCdzIGEKKwkJc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aCAweDgwIChkZWNpbWFsOiAxMjgpLgorCQlJZiBbZXhwcl0gaXMgb21pdHRlZCwgd2FpdCB1bnRpbCBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUuCisJCUlmIFtleHByXSBpcyAwLCBvbmx5IGdldCBhIGNoYXJhY3RlciB3aGVuIG9uZSBpcyBhdmFpbGFibGUuCisJCUlmIFtleHByXSBpcyAxLCBvbmx5IGNoZWNrIGlmIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZSwgaXQgaXMKKwkJCQlub3QgY29uc3VtZWQuICBJZiBhIG5vcm1hbCBjaGFyYWN0ZXIgaXMKKwkJCQlhdmFpbGFibGUsIGl0IGlzIHJldHVybmVkLCBvdGhlcndpc2UgYQorCQkJCW5vbi16ZXJvIHZhbHVlIGlzIHJldHVybmVkLgorCQlJZiBhIG5vcm1hbCBjaGFyYWN0ZXIgYXZhaWxhYmxlLCBpdCBpcyByZXR1cm5lZCBhcyBhIE51bWJlci4KKwkJVXNlIG5yMmNoYXIoKSB0byBjb252ZXJ0IGl0IHRvIGEgU3RyaW5nLgorCQlUaGUgcmV0dXJuZWQgdmFsdWUgaXMgemVybyBpZiBubyBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlLgorCQlUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBmb3Igc3BlY2lhbCBrZXlzCisJCWFuZCB3aGVuIGEgbW9kaWZpZXIgKHNoaWZ0LCBjb250cm9sLCBhbHQpIHdhcyB1c2VkLgorCQlUaGVyZSBpcyBubyBwcm9tcHQsIHlvdSB3aWxsIHNvbWVob3cgaGF2ZSB0byBtYWtlIGNsZWFyIHRvIHRoZQorCQl1c2VyIHRoYXQgYSBjaGFyYWN0ZXIgaGFzIHRvIGJlIHR5cGVkLgorCQlUaGVyZSBpcyBubyBtYXBwaW5nIGZvciB0aGUgY2hhcmFjdGVyLgorCQlLZXkgY29kZXMgYXJlIHJlcGxhY2VkLCB0aHVzIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgPERlbD4KKwkJa2V5IHlvdSBnZXQgdGhlIGNvZGUgZm9yIHRoZSA8RGVsPiBrZXksIG5vdCB0aGUgcmF3IGNoYXJhY3RlcgorCQlzZXF1ZW5jZS4gIEV4YW1wbGVzOiA+CisJCQlnZXRjaGFyKCkgPT0gIlw8RGVsPiIKKwkJCWdldGNoYXIoKSA9PSAiXDxTLUxlZnQ+IgorPAkJVGhpcyBleGFtcGxlIHJlZGVmaW5lcyAiZiIgdG8gaWdub3JlIGNhc2U6ID4KKwkJCTpubWFwIGYgOmNhbGwgRmluZENoYXIoKTxDUj4KKwkJCTpmdW5jdGlvbiBGaW5kQ2hhcigpCisJCQk6ICBsZXQgYyA9IG5yMmNoYXIoZ2V0Y2hhcigpKQorCQkJOiAgd2hpbGUgY29sKCcuJykgPCBjb2woJyQnKSAtIDEKKwkJCTogICAgbm9ybWFsIGwKKwkJCTogICAgaWYgZ2V0bGluZSgnLicpW2NvbCgnLicpIC0gMV0gPT0/IGMKKwkJCTogICAgICBicmVhaworCQkJOiAgICBlbmRpZgorCQkJOiAgZW5kd2hpbGUKKwkJCTplbmRmdW5jdGlvbgorCitnZXRjaGFybW9kKCkJCQkJCQkqZ2V0Y2hhcm1vZCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyIHdoaWNoIGlzIHRoZSBzdGF0ZSBvZiB0aGUgbW9kaWZpZXJzIGZvcgorCQl0aGUgbGFzdCBvYnRhaW5lZCBjaGFyYWN0ZXIgd2l0aCBnZXRjaGFyKCkgb3IgaW4gYW5vdGhlciB3YXkuCisJCVRoZXNlIHZhbHVlcyBhcmUgYWRkZWQgdG9nZXRoZXI6CisJCQkyCXNoaWZ0CisJCQk0CWNvbnRyb2wKKwkJCTgJYWx0IChtZXRhKQorCQkJMTYJbW91c2UgZG91YmxlIGNsaWNrCisJCQkzMgltb3VzZSB0cmlwbGUgY2xpY2sKKwkJCTY0CW1vdXNlIHF1YWRydXBsZSBjbGljaworCQkJMTI4CU1hY2ludG9zaCBvbmx5OiBjb21tYW5kCisJCU9ubHkgdGhlIG1vZGlmaWVycyB0aGF0IGhhdmUgbm90IGJlZW4gaW5jbHVkZWQgaW4gdGhlCisJCWNoYXJhY3RlciBpdHNlbGYgYXJlIG9idGFpbmVkLiAgVGh1cyBTaGlmdC1hIHJlc3VsdHMgaW4gIkEiCisJCXdpdGggbm8gbW9kaWZpZXIuCisKK2dldGJ1ZnZhcih7ZXhwcn0sIHt2YXJuYW1lfSkJCQkJKmdldGJ1ZnZhcigpKgorCQlUaGUgcmVzdWx0IGlzIHRoZSB2YWx1ZSBvZiBvcHRpb24gb3IgbG9jYWwgYnVmZmVyIHZhcmlhYmxlCisJCXt2YXJuYW1lfSBpbiBidWZmZXIge2V4cHJ9LiAgTm90ZSB0aGF0IHRoZSBuYW1lIHdpdGhvdXQgImI6IgorCQltdXN0IGJlIHVzZWQuCisJCVRoaXMgYWxzbyB3b3JrcyBmb3IgYSBnbG9iYWwgb3IgbG9jYWwgd2luZG93IG9wdGlvbiwgYnV0IGl0CisJCWRvZXNuJ3Qgd29yayBmb3IgYSBnbG9iYWwgb3IgbG9jYWwgd2luZG93IHZhcmlhYmxlLgorCQlGb3IgdGhlIHVzZSBvZiB7ZXhwcn0sIHNlZSB8YnVmbmFtZSgpfCBhYm92ZS4KKwkJV2hlbiB0aGUgYnVmZmVyIG9yIHZhcmlhYmxlIGRvZXNuJ3QgZXhpc3QgYW4gZW1wdHkgc3RyaW5nIGlzCisJCXJldHVybmVkLCB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLgorCQlFeGFtcGxlczogPgorCQkJOmxldCBidWZtb2RpZmllZCA9IGdldGJ1ZnZhcigxLCAiJm1vZCIpCisJCQk6ZWNobyAidG9kbyBteXZhciA9ICIgLiBnZXRidWZ2YXIoInRvZG8iLCAibXl2YXIiKQorPAorZ2V0Y21kbGluZSgpCQkJCQkJKmdldGNtZGxpbmUoKSoKKwkJUmV0dXJuIHRoZSBjdXJyZW50IGNvbW1hbmQtbGluZS4gIE9ubHkgd29ya3Mgd2hlbiB0aGUgY29tbWFuZAorCQlsaW5lIGlzIGJlaW5nIGVkaXRlZCwgdGh1cyByZXF1aXJlcyB1c2Ugb2YgfGNfQ1RSTC1cX2V8IG9yCisJCXxjX0NUUkwtUl89fC4KKwkJRXhhbXBsZTogPgorCQkJOmNtYXAgPEY3PiA8Qy1cPmVlc2NhcGUoZ2V0Y21kbGluZSgpLCAnIFwnKTxDUj4KKzwJCUFsc28gc2VlIHxnZXRjbWRwb3MoKXwgYW5kIHxzZXRjbWRwb3MoKXwuCisKK2dldGNtZHBvcyh7cG9zfSkJCQkJCSpnZXRjbWRwb3MoKSoKKwkJUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yIGluIHRoZSBjb21tYW5kIGxpbmUgYXMgYQorCQlieXRlIGNvdW50LiAgVGhlIGZpcnN0IGNvbHVtbiBpcyAxLgorCQlPbmx5IHdvcmtzIHdoZW4gZWRpdGluZyB0aGUgY29tbWFuZCBsaW5lLCB0aHVzIHJlcXVpcmVzIHVzZSBvZgorCQl8Y19DVFJMLVxfZXwgb3IgfGNfQ1RSTC1SXz18LiAgUmV0dXJucyAwIG90aGVyd2lzZS4KKwkJQWxzbyBzZWUgfHNldGNtZHBvcygpfCBhbmQgfGdldGNtZGxpbmUoKXwuCisKKwkJCQkJCQkqZ2V0Y3dkKCkqCitnZXRjd2QoKQlUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudAorCQl3b3JraW5nIGRpcmVjdG9yeS4KKworZ2V0ZnNpemUoe2ZuYW1lfSkJCQkJCSpnZXRmc2l6ZSgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUKKwkJZ2l2ZW4gZmlsZSB7Zm5hbWV9LgorCQlJZiB7Zm5hbWV9IGlzIGEgZGlyZWN0b3J5LCAwIGlzIHJldHVybmVkLgorCQlJZiB0aGUgZmlsZSB7Zm5hbWV9IGNhbid0IGJlIGZvdW5kLCAtMSBpcyByZXR1cm5lZC4KKworZ2V0ZnRpbWUoe2ZuYW1lfSkJCQkJCSpnZXRmdGltZSgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZgorCQl0aGUgZ2l2ZW4gZmlsZSB7Zm5hbWV9LiAgVGhlIHZhbHVlIGlzIG1lYXN1cmVkIGFzIHNlY29uZHMKKwkJc2luY2UgMXN0IEphbiAxOTcwLCBhbmQgbWF5IGJlIHBhc3NlZCB0byBzdHJmdGltZSgpLiAgU2VlIGFsc28KKwkJfGxvY2FsdGltZSgpfCBhbmQgfHN0cmZ0aW1lKCl8LgorCQlJZiB0aGUgZmlsZSB7Zm5hbWV9IGNhbid0IGJlIGZvdW5kIC0xIGlzIHJldHVybmVkLgorCisJCQkJCQkJKmdldGxpbmUoKSoKK2dldGxpbmUoe2xudW19KSBUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB3aGljaCBpcyBsaW5lIHtsbnVtfSBmcm9tIHRoZSBjdXJyZW50CisJCWJ1ZmZlci4gIEV4YW1wbGU6ID4KKwkJCWdldGxpbmUoMSkKKzwJCVdoZW4ge2xudW19IGlzIGEgU3RyaW5nIHRoYXQgZG9lc24ndCBzdGFydCB3aXRoIGEKKwkJZGlnaXQsIGxpbmUoKSBpcyBjYWxsZWQgdG8gdHJhbnNsYXRlIHRoZSBTdHJpbmcgaW50byBhIE51bWJlci4KKwkJVG8gZ2V0IHRoZSBsaW5lIHVuZGVyIHRoZSBjdXJzb3I6ID4KKwkJCWdldGxpbmUoIi4iKQorPAkJV2hlbiB7bG51bX0gaXMgc21hbGxlciB0aGFuIDEgb3IgYmlnZ2VyIHRoYW4gdGhlIG51bWJlciBvZgorCQlsaW5lcyBpbiB0aGUgYnVmZmVyLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisKK2dldHJlZyhbe3JlZ25hbWV9XSkJCQkJCSpnZXRyZWcoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZywgd2hpY2ggaXMgdGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVyCisJCXtyZWduYW1lfS4gRXhhbXBsZTogPgorCQkJOmxldCBjbGlwdGV4dCA9IGdldHJlZygnKicpCis8CQlnZXRyZWcoJz0nKSByZXR1cm5zIHRoZSBsYXN0IGV2YWx1YXRlZCB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbgorCQlyZWdpc3Rlci4gKEZvciB1c2UgaW4gbWFwcykuCisJCUlmIHtyZWduYW1lfSBpcyBub3Qgc3BlY2lmaWVkLCB8djpyZWdpc3RlcnwgaXMgdXNlZC4KKworZ2V0cmVndHlwZShbe3JlZ25hbWV9XSkJCQkJCSpnZXRyZWd0eXBlKCkqCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIHR5cGUgb2YgcmVnaXN0ZXIge3JlZ25hbWV9LgorCQlUaGUgdmFsdWUgd2lsbCBiZSBvbmUgb2Y6CisJCSAgICAidiIJCQlmb3IgfGNoYXJhY3Rlcndpc2V8IHRleHQKKwkJICAgICJWIgkJCWZvciB8bGluZXdpc2V8IHRleHQKKwkJICAgICI8Q1RSTC1WPnt3aWR0aH0iCWZvciB8YmxvY2t3aXNlLXZpc3VhbHwgdGV4dAorCQkgICAgMAkJCWZvciBhbiBlbXB0eSBvciB1bmtub3duIHJlZ2lzdGVyCisJCTxDVFJMLVY+IGlzIG9uZSBjaGFyYWN0ZXIgd2l0aCB2YWx1ZSAweDE2LgorCQlJZiB7cmVnbmFtZX0gaXMgbm90IHNwZWNpZmllZCwgfHY6cmVnaXN0ZXJ8IGlzIHVzZWQuCisKKwkJCQkJCQkqZ2V0d2lucG9zeCgpKgorZ2V0d2lucG9zeCgpCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBYIGNvb3JkaW5hdGUgaW4gcGl4ZWxzIG9mCisJCXRoZSBsZWZ0IGhhbmQgc2lkZSBvZiB0aGUgR1VJIFZpbSB3aW5kb3cuICBUaGUgcmVzdWx0IHdpbGwgYmUKKwkJLTEgaWYgdGhlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisKKwkJCQkJCQkqZ2V0d2lucG9zeSgpKgorZ2V0d2lucG9zeSgpCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBZIGNvb3JkaW5hdGUgaW4gcGl4ZWxzIG9mCisJCXRoZSB0b3Agb2YgdGhlIEdVSSBWaW0gd2luZG93LiAgVGhlIHJlc3VsdCB3aWxsIGJlIC0xIGlmIHRoZQorCQlpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorCitnZXR3aW52YXIoe25yfSwge3Zhcm5hbWV9KQkJCQkqZ2V0d2ludmFyKCkqCisJCVRoZSByZXN1bHQgaXMgdGhlIHZhbHVlIG9mIG9wdGlvbiBvciBsb2NhbCB3aW5kb3cgdmFyaWFibGUKKwkJe3Zhcm5hbWV9IGluIHdpbmRvdyB7bnJ9LgorCQlUaGlzIGFsc28gd29ya3MgZm9yIGEgZ2xvYmFsIG9yIGxvY2FsIGJ1ZmZlciBvcHRpb24sIGJ1dCBpdAorCQlkb2Vzbid0IHdvcmsgZm9yIGEgZ2xvYmFsIG9yIGxvY2FsIGJ1ZmZlciB2YXJpYWJsZS4KKwkJTm90ZSB0aGF0IHRoZSBuYW1lIHdpdGhvdXQgInc6IiBtdXN0IGJlIHVzZWQuCisJCUV4YW1wbGVzOiA+CisJCQk6bGV0IGxpc3RfaXNfb24gPSBnZXR3aW52YXIoMiwgJyZsaXN0JykKKwkJCTplY2hvICJteXZhciA9ICIgLiBnZXR3aW52YXIoMSwgJ215dmFyJykKKzwKKwkJCQkJCQkqZ2xvYigpKgorZ2xvYih7ZXhwcn0pCUV4cGFuZCB0aGUgZmlsZSB3aWxkY2FyZHMgaW4ge2V4cHJ9LiAgVGhlIHJlc3VsdCBpcyBhIFN0cmluZy4KKwkJV2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBtYXRjaGVzLCB0aGV5IGFyZSBzZXBhcmF0ZWQgYnkgPE5MPgorCQljaGFyYWN0ZXJzLgorCQlJZiB0aGUgZXhwYW5zaW9uIGZhaWxzLCB0aGUgcmVzdWx0IGlzIGFuIGVtcHR5IHN0cmluZy4KKwkJQSBuYW1lIGZvciBhIG5vbi1leGlzdGluZyBmaWxlIGlzIG5vdCBpbmNsdWRlZC4KKworCQlGb3IgbW9zdCBzeXN0ZW1zIGJhY2t0aWNrcyBjYW4gYmUgdXNlZCB0byBnZXQgZmlsZXMgbmFtZXMgZnJvbQorCQlhbnkgZXh0ZXJuYWwgY29tbWFuZC4gIEV4YW1wbGU6ID4KKwkJCTpsZXQgdGFnZmlsZXMgPSBnbG9iKCJgZmluZCAuIC1uYW1lIHRhZ3MgLXByaW50YCIpCisJCQk6bGV0ICZ0YWdzID0gc3Vic3RpdHV0ZSh0YWdmaWxlcywgIlxuIiwgIiwiLCAiZyIpCis8CQlUaGUgcmVzdWx0IG9mIHRoZSBwcm9ncmFtIGluc2lkZSB0aGUgYmFja3RpY2tzIHNob3VsZCBiZSBvbmUKKwkJaXRlbSBwZXIgbGluZS4gIFNwYWNlcyBpbnNpZGUgYW4gaXRlbSBhcmUgYWxsb3dlZC4KKworCQlTZWUgfGV4cGFuZCgpfCBmb3IgZXhwYW5kaW5nIHNwZWNpYWwgVmltIHZhcmlhYmxlcy4gIFNlZQorCQl8c3lzdGVtKCl8IGZvciBnZXR0aW5nIHRoZSByYXcgb3V0cHV0IG9mIGFuIGV4dGVybmFsIGNvbW1hbmQuCisKK2dsb2JwYXRoKHtwYXRofSwge2V4cHJ9KQkJCQkqZ2xvYnBhdGgoKSoKKwkJUGVyZm9ybSBnbG9iKCkgb24gYWxsIGRpcmVjdG9yaWVzIGluIHtwYXRofSBhbmQgY29uY2F0ZW5hdGUKKwkJdGhlIHJlc3VsdHMuICBFeGFtcGxlOiA+CisJCQk6ZWNobyBnbG9icGF0aCgmcnRwLCAic3ludGF4L2MudmltIikKKzwJCXtwYXRofSBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yeSBuYW1lcy4gIEVhY2gKKwkJZGlyZWN0b3J5IG5hbWUgaXMgcHJlcGVuZGVkIHRvIHtleHByfSBhbmQgZXhwYW5kZWQgbGlrZSB3aXRoCisJCWdsb2IoKS4gIEEgcGF0aCBzZXBhcmF0b3IgaXMgaW5zZXJ0ZWQgd2hlbiBuZWVkZWQuCisJCVRvIGFkZCBhIGNvbW1hIGluc2lkZSBhIGRpcmVjdG9yeSBuYW1lIGVzY2FwZSBpdCB3aXRoIGEKKwkJYmFja3NsYXNoLiAgTm90ZSB0aGF0IG9uIE1TLVdpbmRvd3MgYSBkaXJlY3RvcnkgbWF5IGhhdmUgYQorCQl0cmFpbGluZyBiYWNrc2xhc2gsIHJlbW92ZSBpdCBpZiB5b3UgcHV0IGEgY29tbWEgYWZ0ZXIgaXQuCisJCUlmIHRoZSBleHBhbnNpb24gZmFpbHMgZm9yIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMsIHRoZXJlIGlzIG5vCisJCWVycm9yIG1lc3NhZ2UuCisJCVRoZSAnd2lsZGlnbm9yZScgb3B0aW9uIGFwcGxpZXM6IE5hbWVzIG1hdGNoaW5nIG9uZSBvZiB0aGUKKwkJcGF0dGVybnMgaW4gJ3dpbGRpZ25vcmUnIHdpbGwgYmUgc2tpcHBlZC4KKworCQkJCQkJCSpoYXMoKSoKK2hhcyh7ZmVhdHVyZX0pCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIDEgaWYgdGhlIGZlYXR1cmUge2ZlYXR1cmV9IGlzCisJCXN1cHBvcnRlZCwgemVybyBvdGhlcndpc2UuICBUaGUge2ZlYXR1cmV9IGFyZ3VtZW50IGlzIGEKKwkJc3RyaW5nLiAgU2VlIHxmZWF0dXJlLWxpc3R8IGJlbG93LgorCQlBbHNvIHNlZSB8ZXhpc3RzKCl8LgorCitoYXNtYXB0byh7d2hhdH0gWywge21vZGV9XSkJCQkJKmhhc21hcHRvKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIDEgaWYgdGhlcmUgaXMgYSBtYXBwaW5nIHRoYXQKKwkJY29udGFpbnMge3doYXR9IGluIHNvbWV3aGVyZSBpbiB0aGUgcmhzICh3aGF0IGl0IGlzIG1hcHBlZCB0bykKKwkJYW5kIHRoaXMgbWFwcGluZyBleGlzdHMgaW4gb25lIG9mIHRoZSBtb2RlcyBpbmRpY2F0ZWQgYnkKKwkJe21vZGV9LgorCQlCb3RoIHRoZSBnbG9iYWwgbWFwcGluZ3MgYW5kIHRoZSBtYXBwaW5ncyBsb2NhbCB0byB0aGUgY3VycmVudAorCQlidWZmZXIgYXJlIGNoZWNrZWQgZm9yIGEgbWF0Y2guCisJCUlmIG5vIG1hdGNoaW5nIG1hcHBpbmcgaXMgZm91bmQgMCBpcyByZXR1cm5lZC4KKwkJVGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZSByZWNvZ25pemVkIGluIHttb2RlfToKKwkJCW4JTm9ybWFsIG1vZGUKKwkJCXYJVmlzdWFsIG1vZGUKKwkJCW8JT3BlcmF0b3ItcGVuZGluZyBtb2RlCisJCQlpCUluc2VydCBtb2RlCisJCQlsCUxhbmd1YWdlLUFyZ3VtZW50ICgiciIsICJmIiwgInQiLCBldGMuKQorCQkJYwlDb21tYW5kLWxpbmUgbW9kZQorCQlXaGVuIHttb2RlfSBpcyBvbWl0dGVkLCAibnZvIiBpcyB1c2VkLgorCisJCVRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHRvIGNoZWNrIGlmIGEgbWFwcGluZyBhbHJlYWR5IGV4aXN0cworCQl0byBhIGZ1bmN0aW9uIGluIGEgVmltIHNjcmlwdC4gIEV4YW1wbGU6ID4KKwkJCTppZiAhaGFzbWFwdG8oJ1xBQkNkb2l0JykKKwkJCTogICBtYXAgPExlYWRlcj5kIFxBQkNkb2l0CisJCQk6ZW5kaWYKKzwJCVRoaXMgaW5zdGFsbHMgdGhlIG1hcHBpbmcgdG8gIlxBQkNkb2l0IiBvbmx5IGlmIHRoZXJlIGlzbid0CisJCWFscmVhZHkgYSBtYXBwaW5nIHRvICJcQUJDZG9pdCIuCisKK2hpc3RhZGQoe2hpc3Rvcnl9LCB7aXRlbX0pCQkJCSpoaXN0YWRkKCkqCisJCUFkZCB0aGUgU3RyaW5nIHtpdGVtfSB0byB0aGUgaGlzdG9yeSB7aGlzdG9yeX0gd2hpY2ggY2FuIGJlCisJCW9uZSBvZjoJCQkJCSpoaXN0LW5hbWVzKgorCQkJImNtZCIJIG9yICI6IgkgIGNvbW1hbmQgbGluZSBoaXN0b3J5CisJCQkic2VhcmNoIiBvciAiLyIgICBzZWFyY2ggcGF0dGVybiBoaXN0b3J5CisJCQkiZXhwciIgICBvciAiPSIgICB0eXBlZCBleHByZXNzaW9uIGhpc3RvcnkKKwkJCSJpbnB1dCIgIG9yICJAIgkgIGlucHV0IGxpbmUgaGlzdG9yeQorCQlJZiB7aXRlbX0gZG9lcyBhbHJlYWR5IGV4aXN0IGluIHRoZSBoaXN0b3J5LCBpdCB3aWxsIGJlCisJCXNoaWZ0ZWQgdG8gYmVjb21lIHRoZSBuZXdlc3QgZW50cnkuCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXI6IDEgaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwKKwkJb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuCisKKwkJRXhhbXBsZTogPgorCQkJOmNhbGwgaGlzdGFkZCgiaW5wdXQiLCBzdHJmdGltZSgiJVkgJWIgJWQiKSkKKwkJCTpsZXQgZGF0ZT1pbnB1dCgiRW50ZXIgZGF0ZTogIikKKzwJCVRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgfHNhbmRib3h8LgorCitoaXN0ZGVsKHtoaXN0b3J5fSBbLCB7aXRlbX1dKQkJCQkqaGlzdGRlbCgpKgorCQlDbGVhciB7aGlzdG9yeX0sIGllLiBkZWxldGUgYWxsIGl0cyBlbnRyaWVzLiAgU2VlIHxoaXN0LW5hbWVzfAorCQlmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB7aGlzdG9yeX0uCisKKwkJSWYgdGhlIHBhcmFtZXRlciB7aXRlbX0gaXMgZ2l2ZW4gYXMgU3RyaW5nLCB0aGlzIGlzIHNlZW4KKwkJYXMgcmVndWxhciBleHByZXNzaW9uLiAgQWxsIGVudHJpZXMgbWF0Y2hpbmcgdGhhdCBleHByZXNzaW9uCisJCXdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBoaXN0b3J5IChpZiB0aGVyZSBhcmUgYW55KS4KKwkJVXBwZXIvbG93ZXJjYXNlIG11c3QgbWF0Y2gsIHVubGVzcyAiXGMiIGlzIHVzZWQgfC9cY3wuCisJCUlmIHtpdGVtfSBpcyBhIE51bWJlciwgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBpbmRleCwgc2VlCisJCXw6aGlzdG9yeS1pbmRleGluZ3wuICBUaGUgcmVzcGVjdGl2ZSBlbnRyeSB3aWxsIGJlIHJlbW92ZWQKKwkJaWYgaXQgZXhpc3RzLgorCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXI6IDEgZm9yIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24sCisJCW90aGVyd2lzZSAwIGlzIHJldHVybmVkLgorCisJCUV4YW1wbGVzOgorCQlDbGVhciBleHByZXNzaW9uIHJlZ2lzdGVyIGhpc3Rvcnk6ID4KKwkJCTpjYWxsIGhpc3RkZWwoImV4cHIiKQorPAorCQlSZW1vdmUgYWxsIGVudHJpZXMgc3RhcnRpbmcgd2l0aCAiKiIgZnJvbSB0aGUgc2VhcmNoIGhpc3Rvcnk6ID4KKwkJCTpjYWxsIGhpc3RkZWwoIi8iLCAnXlwqJykKKzwKKwkJVGhlIGZvbGxvd2luZyB0aHJlZSBhcmUgZXF1aXZhbGVudDogPgorCQkJOmNhbGwgaGlzdGRlbCgic2VhcmNoIiwgaGlzdG5yKCJzZWFyY2giKSkKKwkJCTpjYWxsIGhpc3RkZWwoInNlYXJjaCIsIC0xKQorCQkJOmNhbGwgaGlzdGRlbCgic2VhcmNoIiwgJ14nLmhpc3RnZXQoInNlYXJjaCIsIC0xKS4nJCcpCis8CisJCVRvIGRlbGV0ZSB0aGUgbGFzdCBzZWFyY2ggcGF0dGVybiBhbmQgdXNlIHRoZSBsYXN0LWJ1dC1vbmUgZm9yCisJCXRoZSAibiIgY29tbWFuZCBhbmQgJ2hsc2VhcmNoJzogPgorCQkJOmNhbGwgaGlzdGRlbCgic2VhcmNoIiwgLTEpCisJCQk6bGV0IEAvID0gaGlzdGdldCgic2VhcmNoIiwgLTEpCisKK2hpc3RnZXQoe2hpc3Rvcnl9IFssIHtpbmRleH1dKQkJCQkqaGlzdGdldCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB0aGUgZW50cnkgd2l0aCBOdW1iZXIge2luZGV4fSBmcm9tCisJCXtoaXN0b3J5fS4gIFNlZSB8aGlzdC1uYW1lc3wgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YKKwkJe2hpc3Rvcnl9LCBhbmQgfDpoaXN0b3J5LWluZGV4aW5nfCBmb3Ige2luZGV4fS4gIElmIHRoZXJlIGlzCisJCW5vIHN1Y2ggZW50cnksIGFuIGVtcHR5IFN0cmluZyBpcyByZXR1cm5lZC4gIFdoZW4ge2luZGV4fSBpcworCQlvbWl0dGVkLCB0aGUgbW9zdCByZWNlbnQgaXRlbSBmcm9tIHRoZSBoaXN0b3J5IGlzIHVzZWQuCisKKwkJRXhhbXBsZXM6CisJCVJlZG8gdGhlIHNlY29uZCBsYXN0IHNlYXJjaCBmcm9tIGhpc3RvcnkuID4KKwkJCTpleGVjdXRlICcvJyAuIGhpc3RnZXQoInNlYXJjaCIsIC0yKQorCis8CQlEZWZpbmUgYW4gRXggY29tbWFuZCAiOkgge251bX0iIHRoYXQgc3VwcG9ydHMgcmUtZXhlY3V0aW9uIG9mCisJCXRoZSB7bnVtfXRoIGVudHJ5IGZyb20gdGhlIG91dHB1dCBvZiB8Omhpc3Rvcnl8LiA+CisJCQk6Y29tbWFuZCAtbmFyZ3M9MSBIIGV4ZWN1dGUgaGlzdGdldCgiY21kIiwgMCs8YXJncz4pCis8CitoaXN0bnIoe2hpc3Rvcnl9KQkJCQkJKmhpc3RucigpKgorCQlUaGUgcmVzdWx0IGlzIHRoZSBOdW1iZXIgb2YgdGhlIGN1cnJlbnQgZW50cnkgaW4ge2hpc3Rvcnl9LgorCQlTZWUgfGhpc3QtbmFtZXN8IGZvciB0aGUgcG9zc2libGUgdmFsdWVzIG9mIHtoaXN0b3J5fS4KKwkJSWYgYW4gZXJyb3Igb2NjdXJyZWQsIC0xIGlzIHJldHVybmVkLgorCisJCUV4YW1wbGU6ID4KKwkJCTpsZXQgaW5wX2luZGV4ID0gaGlzdG5yKCJleHByIikKKzwKK2hsZXhpc3RzKHtuYW1lfSkJCQkJCSpobGV4aXN0cygpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyBub24temVybyBpZiBhIGhpZ2hsaWdodCBncm91cAorCQljYWxsZWQge25hbWV9IGV4aXN0cy4gIFRoaXMgaXMgd2hlbiB0aGUgZ3JvdXAgaGFzIGJlZW4KKwkJZGVmaW5lZCBpbiBzb21lIHdheS4gIE5vdCBuZWNlc3NhcmlseSB3aGVuIGhpZ2hsaWdodGluZyBoYXMKKwkJYmVlbiBkZWZpbmVkIGZvciBpdCwgaXQgbWF5IGFsc28gaGF2ZSBiZWVuIHVzZWQgZm9yIGEgc3ludGF4CisJCWl0ZW0uCisJCQkJCQkJKmhpZ2hsaWdodF9leGlzdHMoKSoKKwkJT2Jzb2xldGUgbmFtZTogaGlnaGxpZ2h0X2V4aXN0cygpLgorCisJCQkJCQkJKmhsSUQoKSoKK2hsSUQoe25hbWV9KQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgSUQgb2YgdGhlIGhpZ2hsaWdodCBncm91cAorCQl3aXRoIG5hbWUge25hbWV9LiAgV2hlbiB0aGUgaGlnaGxpZ2h0IGdyb3VwIGRvZXNuJ3QgZXhpc3QsCisJCXplcm8gaXMgcmV0dXJuZWQuCisJCVRoaXMgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhpZ2hsaWdodAorCQlncm91cC4gIEZvciBleGFtcGxlLCB0byBnZXQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlCisJCSJDb21tZW50IiBncm91cDogPgorCTplY2hvIHN5bklEYXR0cihzeW5JRHRyYW5zKGhsSUQoIkNvbW1lbnQiKSksICJiZyIpCis8CQkJCQkJCSpoaWdobGlnaHRJRCgpKgorCQlPYnNvbGV0ZSBuYW1lOiBoaWdobGlnaHRJRCgpLgorCitob3N0bmFtZSgpCQkJCQkJKmhvc3RuYW1lKCkqCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIHRoZSBuYW1lIG9mIHRoZSBtYWNoaW5lIG9uCisJCXdoaWNoIFZpbSBpcyBjdXJyZW50bHkgcnVubmluZy4gTWFjaGluZSBuYW1lcyBncmVhdGVyIHRoYW4KKwkJMjU2IGNoYXJhY3RlcnMgbG9uZyBhcmUgdHJ1bmNhdGVkLgorCitpY29udih7ZXhwcn0sIHtmcm9tfSwge3RvfSkJCQkJKmljb252KCkqCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIHRoZSB0ZXh0IHtleHByfSBjb252ZXJ0ZWQKKwkJZnJvbSBlbmNvZGluZyB7ZnJvbX0gdG8gZW5jb2Rpbmcge3RvfS4KKwkJV2hlbiB0aGUgY29udmVyc2lvbiBmYWlscyBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisJCVRoZSBlbmNvZGluZyBuYW1lcyBhcmUgd2hhdGV2ZXIgdGhlIGljb252KCkgbGlicmFyeSBmdW5jdGlvbgorCQljYW4gYWNjZXB0LCBzZWUgIjohbWFuIDMgaWNvbnYiLgorCQlNb3N0IGNvbnZlcnNpb25zIHJlcXVpcmUgVmltIHRvIGJlIGNvbXBpbGVkIHdpdGggdGhlIHwraWNvbnZ8CisJCWZlYXR1cmUuICBPdGhlcndpc2Ugb25seSBVVEYtOCB0byBsYXRpbjEgY29udmVyc2lvbiBhbmQgYmFjaworCQljYW4gYmUgZG9uZS4KKwkJVGhpcyBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IG1lc3NhZ2VzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzLAorCQlubyBtYXR0ZXIgd2hhdCAnZW5jb2RpbmcnIGlzIHNldCB0by4gIFdyaXRlIHRoZSBtZXNzYWdlIGluCisJCVVURi04IGFuZCB1c2U6ID4KKwkJCWVjaG8gaWNvbnYodXRmOF9zdHIsICJ1dGYtOCIsICZlbmMpCis8CQlOb3RlIHRoYXQgVmltIHVzZXMgVVRGLTggZm9yIGFsbCBVbmljb2RlIGVuY29kaW5ncywgY29udmVyc2lvbgorCQlmcm9tL3RvIFVDUy0yIGlzIGF1dG9tYXRpY2FsbHkgY2hhbmdlZCB0byB1c2UgVVRGLTguICBZb3UKKwkJY2Fubm90IHVzZSBVQ1MtMiBpbiBhIHN0cmluZyBhbnl3YXksIGJlY2F1c2Ugb2YgdGhlIE5VTCBieXRlcy4KKwkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgK211bHRpX2J5dGUgZmVhdHVyZX0KKworCQkJCQkJCSppbmRlbnQoKSoKK2luZGVudCh7bG51bX0pCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIGluZGVudCBvZiBsaW5lIHtsbnVtfSBpbiB0aGUKKwkJY3VycmVudCBidWZmZXIuICBUaGUgaW5kZW50IGlzIGNvdW50ZWQgaW4gc3BhY2VzLCB0aGUgdmFsdWUKKwkJb2YgJ3RhYnN0b3AnIGlzIHJlbGV2YW50LiAge2xudW19IGlzIHVzZWQganVzdCBsaWtlIGluCisJCXxnZXRsaW5lKCl8LgorCQlXaGVuIHtsbnVtfSBpcyBpbnZhbGlkIC0xIGlzIHJldHVybmVkLgorCitpbnB1dCh7cHJvbXB0fSBbLCB7dGV4dH1dKQkJCQkqaW5wdXQoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZywgd2hpY2ggaXMgd2hhdGV2ZXIgdGhlIHVzZXIgdHlwZWQgb24KKwkJdGhlIGNvbW1hbmQtbGluZS4gIFRoZSBwYXJhbWV0ZXIgaXMgZWl0aGVyIGEgcHJvbXB0IHN0cmluZywgb3IKKwkJYSBibGFuayBzdHJpbmcgKGZvciBubyBwcm9tcHQpLiAgQSAnXG4nIGNhbiBiZSB1c2VkIGluIHRoZQorCQlwcm9tcHQgdG8gc3RhcnQgYSBuZXcgbGluZS4gIFRoZSBoaWdobGlnaHRpbmcgc2V0IHdpdGgKKwkJfDplY2hvaGx8IGlzIHVzZWQgZm9yIHRoZSBwcm9tcHQuICBUaGUgaW5wdXQgaXMgZW50ZXJlZCBqdXN0CisJCWxpa2UgYSBjb21tYW5kLWxpbmUsIHdpdGggdGhlIHNhbWUgZWRpdGluZyBjb21tYW5kcyBhbmQKKwkJbWFwcGluZ3MuICBUaGVyZSBpcyBhIHNlcGFyYXRlIGhpc3RvcnkgZm9yIGxpbmVzIHR5cGVkIGZvcgorCQlpbnB1dCgpLgorCQlJZiB0aGUgb3B0aW9uYWwge3RleHR9IGlzIHByZXNlbnQsIHRoaXMgaXMgdXNlZCBmb3IgdGhlCisJCWRlZmF1bHQgcmVwbHksIGFzIGlmIHRoZSB1c2VyIHR5cGVkIHRoaXMuCisJCU5PVEU6IFRoaXMgbXVzdCBub3QgYmUgdXNlZCBpbiBhIHN0YXJ0dXAgZmlsZSwgZm9yIHRoZQorCQl2ZXJzaW9ucyB0aGF0IG9ubHkgcnVuIGluIEdVSSBtb2RlIChlLmcuLCB0aGUgV2luMzIgR1VJKS4KKwkJTm90ZTogV2hlbiBpbnB1dCgpIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiBhIG1hcHBpbmcgaXQgd2lsbAorCQljb25zdW1lIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGZyb20gdGhhdCBtYXBwaW5nLCBiZWNhdXNlIGEKKwkJbWFwcGluZyBpcyBoYW5kbGVkIGxpa2UgdGhlIGNoYXJhY3RlcnMgd2VyZSB0eXBlZC4KKwkJVXNlIHxpbnB1dHNhdmUoKXwgYmVmb3JlIGlucHV0KCkgYW5kIHxpbnB1dHJlc3RvcmUoKXwKKwkJYWZ0ZXIgaW5wdXQoKSB0byBhdm9pZCB0aGF0LiAgQW5vdGhlciBzb2x1dGlvbiBpcyB0byBhdm9pZAorCQl0aGF0IGZ1cnRoZXIgY2hhcmFjdGVycyBmb2xsb3cgaW4gdGhlIG1hcHBpbmcsIGUuZy4sIGJ5IHVzaW5nCisJCXw6ZXhlY3V0ZXwgb3IgfDpub3JtYWx8LgorCisJCUV4YW1wbGU6ID4KKwkJCTppZiBpbnB1dCgiQ29mZmVlIG9yIGJlZXI/ICIpID09ICJiZWVyIgorCQkJOiAgZWNobyAiQ2hlZXJzISIKKwkJCTplbmRpZgorPAkJRXhhbXBsZSB3aXRoIGRlZmF1bHQgdGV4dDogPgorCQkJOmxldCBjb2xvciA9IGlucHV0KCJDb2xvcj8gIiwgIndoaXRlIikKKzwJCUV4YW1wbGUgd2l0aCBhIG1hcHBpbmc6ID4KKwkJCTpubWFwIFx4IDpjYWxsIEdldEZvbygpPENSPjpleGUgIi8iIC4gRm9vPENSPgorCQkJOmZ1bmN0aW9uIEdldEZvbygpCisJCQk6ICBjYWxsIGlucHV0c2F2ZSgpCisJCQk6ICBsZXQgZzpGb28gPSBpbnB1dCgiZW50ZXIgc2VhcmNoIHBhdHRlcm46ICIpCisJCQk6ICBjYWxsIGlucHV0cmVzdG9yZSgpCisJCQk6ZW5kZnVuY3Rpb24KKworaW5wdXRkaWFsb2coe3Byb21wdH0gWywge3RleHR9IFssIHtjYW5jZWxyZXR1cm59XV0pCQkqaW5wdXRkaWFsb2coKSoKKwkJTGlrZSBpbnB1dCgpLCBidXQgd2hlbiB0aGUgR1VJIGlzIHJ1bm5pbmcgYW5kIHRleHQgZGlhbG9ncyBhcmUKKwkJc3VwcG9ydGVkLCBhIGRpYWxvZyB3aW5kb3cgcG9wcyB1cCB0byBpbnB1dCB0aGUgdGV4dC4KKwkJRXhhbXBsZTogPgorCQkJOmxldCBuID0gaW5wdXRkaWFsb2coInZhbHVlIGZvciBzaGlmdHdpZHRoIiwgJnN3KQorCQkJOmlmIG4gIT0gIiIKKwkJCTogIGxldCAmc3cgPSBuCisJCQk6ZW5kaWYKKzwJCVdoZW4gdGhlIGRpYWxvZyBpcyBjYW5jZWxsZWQge2NhbmNlbHJldHVybn0gaXMgcmV0dXJuZWQuICBXaGVuCisJCW9taXR0ZWQgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorCQlIaXR0aW5nIDxFbnRlcj4gd29ya3MgbGlrZSBwcmVzc2luZyB0aGUgT0sgYnV0dG9uLiAgSGl0dGluZworCQk8RXNjPiB3b3JrcyBsaWtlIHByZXNzaW5nIHRoZSBDYW5jZWwgYnV0dG9uLgorCitpbnB1dHJlc3RvcmUoKQkJCQkJCSppbnB1dHJlc3RvcmUoKSoKKwkJUmVzdG9yZSB0eXBlYWhlYWQgdGhhdCB3YXMgc2F2ZWQgd2l0aCBhIHByZXZpb3VzIGlucHV0c2F2ZSgpLgorCQlTaG91bGQgYmUgY2FsbGVkIHRoZSBzYW1lIG51bWJlciBvZiB0aW1lcyBpbnB1dHNhdmUoKSBpcworCQljYWxsZWQuICBDYWxsaW5nIGl0IG1vcmUgb2Z0ZW4gaXMgaGFybWxlc3MgdGhvdWdoLgorCQlSZXR1cm5zIDEgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIHJlc3RvcmUsIDAgb3RoZXJ3aXNlLgorCitpbnB1dHNhdmUoKQkJCQkJCSppbnB1dHNhdmUoKSoKKwkJUHJlc2VydmUgdHlwZWFoZWFkIChhbHNvIGZyb20gbWFwcGluZ3MpIGFuZCBjbGVhciBpdCwgc28gdGhhdAorCQlhIGZvbGxvd2luZyBwcm9tcHQgZ2V0cyBpbnB1dCBmcm9tIHRoZSB1c2VyLiAgU2hvdWxkIGJlCisJCWZvbGxvd2VkIGJ5IGEgbWF0Y2hpbmcgaW5wdXRyZXN0b3JlKCkgYWZ0ZXIgdGhlIHByb21wdC4gIENhbgorCQliZSB1c2VkIHNldmVyYWwgdGltZXMsIGluIHdoaWNoIGNhc2UgdGhlcmUgbXVzdCBiZSBqdXN0IGFzCisJCW1hbnkgaW5wdXRyZXN0b3JlKCkgY2FsbHMuCisJCVJldHVybnMgMSB3aGVuIG91dCBvZiBtZW1vcnksIDAgb3RoZXJ3aXNlLgorCitpbnB1dHNlY3JldCh7cHJvbXB0fSBbLCB7dGV4dH1dKQkJCSppbnB1dHNlY3JldCgpKgorCQlUaGlzIGZ1bmN0aW9uIGFjdHMgbXVjaCBsaWtlIHRoZSB8aW5wdXQoKXwgZnVuY3Rpb24gd2l0aCBidXQKKwkJdHdvIGV4Y2VwdGlvbnM6CisJCWEpIHRoZSB1c2VyJ3MgcmVzcG9uc2Ugd2lsbCBiZSBkaXNwbGF5ZWQgYXMgYSBzZXF1ZW5jZSBvZgorCQlhc3Rlcmlza3MgKCIqIikgdGhlcmVieSBrZWVwaW5nIHRoZSBlbnRyeSBzZWNyZXQsIGFuZAorCQliKSB0aGUgdXNlcidzIHJlc3BvbnNlIHdpbGwgbm90IGJlIHJlY29yZGVkIG9uIHRoZSBpbnB1dAorCQl8aGlzdG9yeXwgc3RhY2suCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIHdoYXRldmVyIHRoZSB1c2VyIGFjdHVhbGx5CisJCXR5cGVkIG9uIHRoZSBjb21tYW5kLWxpbmUgaW4gcmVzcG9uc2UgdG8gdGhlIGlzc3VlZCBwcm9tcHQuCisKK2lzZGlyZWN0b3J5KHtkaXJlY3Rvcnl9KQkJCQkqaXNkaXJlY3RvcnkoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgbm9uLXplcm8gd2hlbiBhIGRpcmVjdG9yeQorCQl3aXRoIHRoZSBuYW1lIHtkaXJlY3Rvcnl9IGV4aXN0cy4gIElmIHtkaXJlY3Rvcnl9IGRvZXNuJ3QKKwkJZXhpc3QsIG9yIGlzbid0IGEgZGlyZWN0b3J5LCB0aGUgcmVzdWx0IGlzIEZBTFNFLiAge2RpcmVjdG9yeX0KKwkJaXMgYW55IGV4cHJlc3Npb24sIHdoaWNoIGlzIHVzZWQgYXMgYSBTdHJpbmcuCisKKwkJCQkJCSpsaWJjYWxsKCkqICpFMzY0KiAqRTM2OCoKK2xpYmNhbGwoe2xpYm5hbWV9LCB7ZnVuY25hbWV9LCB7YXJndW1lbnR9KQorCQlDYWxsIGZ1bmN0aW9uIHtmdW5jbmFtZX0gaW4gdGhlIHJ1bi10aW1lIGxpYnJhcnkge2xpYm5hbWV9CisJCXdpdGggc2luZ2xlIGFyZ3VtZW50IHthcmd1bWVudH0uCisJCVRoaXMgaXMgdXNlZnVsIHRvIGNhbGwgZnVuY3Rpb25zIGluIGEgbGlicmFyeSB0aGF0IHlvdQorCQllc3BlY2lhbGx5IG1hZGUgdG8gYmUgdXNlZCB3aXRoIFZpbS4gIFNpbmNlIG9ubHkgb25lIGFyZ3VtZW50CisJCWlzIHBvc3NpYmxlLCBjYWxsaW5nIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zIGlzIHJhdGhlcgorCQlsaW1pdGVkLgorCQlUaGUgcmVzdWx0IGlzIHRoZSBTdHJpbmcgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uLiAgSWYgdGhlCisJCWZ1bmN0aW9uIHJldHVybnMgTlVMTCwgdGhpcyB3aWxsIGFwcGVhciBhcyBhbiBlbXB0eSBzdHJpbmcgIiIKKwkJdG8gVmltLgorCQlJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIG51bWJlciwgdXNlIGxpYmNhbGxucigpIQorCQlJZiB7YXJndW1lbnR9IGlzIGEgbnVtYmVyLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGFzIGFuCisJCWludDsgaWYge2FyZ3VtZW50fSBpcyBhIHN0cmluZywgaXQgaXMgcGFzc2VkIGFzIGEKKwkJbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKwkJVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaW4gfHJlc3RyaWN0ZWQtbW9kZXwuCisKKwkJbGliY2FsbCgpIGFsbG93cyB5b3UgdG8gd3JpdGUgeW91ciBvd24gJ3BsdWctaW4nIGV4dGVuc2lvbnMgdG8KKwkJVmltIHdpdGhvdXQgaGF2aW5nIHRvIHJlY29tcGlsZSB0aGUgcHJvZ3JhbS4gIEl0IGlzIE5PVCBhCisJCW1lYW5zIHRvIGNhbGwgc3lzdGVtIGZ1bmN0aW9ucyEgIElmIHlvdSB0cnkgdG8gZG8gc28gVmltIHdpbGwKKwkJdmVyeSBwcm9iYWJseSBjcmFzaC4KKworCQlGb3IgV2luMzIsIHRoZSBmdW5jdGlvbnMgeW91IHdyaXRlIG11c3QgYmUgcGxhY2VkIGluIGEgRExMCisJCWFuZCB1c2UgdGhlIG5vcm1hbCBDIGNhbGxpbmcgY29udmVudGlvbiAoTk9UIFBhc2NhbCB3aGljaCBpcworCQl1c2VkIGluIFdpbmRvd3MgU3lzdGVtIERMTHMpLiAgVGhlIGZ1bmN0aW9uIG11c3QgdGFrZSBleGFjdGx5CisJCW9uZSBwYXJhbWV0ZXIsIGVpdGhlciBhIGNoYXJhY3RlciBwb2ludGVyIG9yIGEgbG9uZyBpbnRlZ2VyLAorCQlhbmQgbXVzdCByZXR1cm4gYSBjaGFyYWN0ZXIgcG9pbnRlciBvciBOVUxMLiAgVGhlIGNoYXJhY3RlcgorCQlwb2ludGVyIHJldHVybmVkIG11c3QgcG9pbnQgdG8gbWVtb3J5IHRoYXQgd2lsbCByZW1haW4gdmFsaWQKKwkJYWZ0ZXIgdGhlIGZ1bmN0aW9uIGhhcyByZXR1cm5lZCAoZS5nLiBpbiBzdGF0aWMgZGF0YSBpbiB0aGUKKwkJRExMKS4gIElmIGl0IHBvaW50cyB0byBhbGxvY2F0ZWQgbWVtb3J5LCB0aGF0IG1lbW9yeSB3aWxsCisJCWxlYWsgYXdheS4gIFVzaW5nIGEgc3RhdGljIGJ1ZmZlciBpbiB0aGUgZnVuY3Rpb24gc2hvdWxkIHdvcmssCisJCWl0J3MgdGhlbiBmcmVlZCB3aGVuIHRoZSBETEwgaXMgdW5sb2FkZWQuCisKKwkJV0FSTklORzogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBub24tdmFsaWQgcG9pbnRlciwgVmltIG1heQorCQljcmFzaCEgIFRoaXMgYWxzbyBoYXBwZW5zIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbnVtYmVyLAorCQliZWNhdXNlIFZpbSB0aGlua3MgaXQncyBhIHBvaW50ZXIuCisJCUZvciBXaW4zMiBzeXN0ZW1zLCB7bGlibmFtZX0gc2hvdWxkIGJlIHRoZSBmaWxlbmFtZSBvZiB0aGUgRExMCisJCXdpdGhvdXQgdGhlICIuRExMIiBzdWZmaXguICBBIGZ1bGwgcGF0aCBpcyBvbmx5IHJlcXVpcmVkIGlmCisJCXRoZSBETEwgaXMgbm90IGluIHRoZSB1c3VhbCBwbGFjZXMuCisJCUZvciBVbml4OiBXaGVuIGNvbXBpbGluZyB5b3VyIG93biBwbHVnaW5zLCByZW1lbWJlciB0aGF0IHRoZQorCQlvYmplY3QgY29kZSBtdXN0IGJlIGNvbXBpbGVkIGFzIHBvc2l0aW9uLWluZGVwZW5kZW50ICgnUElDJykuCisJCXtvbmx5IGluIFdpbjMyIG9uIHNvbWUgVW5peCB2ZXJzaW9ucywgd2hlbiB0aGUgfCtsaWJjYWxsfAorCQlmZWF0dXJlIGlzIHByZXNlbnR9CisJCUV4YW1wbGVzOiA+CisJCQk6ZWNobyBsaWJjYWxsKCJsaWJjLnNvIiwgImdldGVudiIsICJIT01FIikKKwkJCTplY2hvIGxpYmNhbGxucigiL3Vzci9saWIvbGliYy5zbyIsICJnZXRwaWQiLCAiIikKKzwKKwkJCQkJCQkqbGliY2FsbG5yKCkqCitsaWJjYWxsbnIoe2xpYm5hbWV9LCB7ZnVuY25hbWV9LCB7YXJndW1lbnR9KQorCQlKdXN0IGxpa2UgbGliY2FsbCgpLCBidXQgdXNlZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4KKwkJaW50IGluc3RlYWQgb2YgYSBzdHJpbmcuCisJCXtvbmx5IGluIFdpbjMyIG9uIHNvbWUgVW5peCB2ZXJzaW9ucywgd2hlbiB0aGUgfCtsaWJjYWxsfAorCQlmZWF0dXJlIGlzIHByZXNlbnR9CisJCUV4YW1wbGUgKG5vdCB2ZXJ5IHVzZWZ1bC4uLik6ID4KKwkJCTpjYWxsIGxpYmNhbGxucigibGliYy5zbyIsICJwcmludGYiLCAiSGVsbG8gV29ybGQhXG4iKQorCQkJOmNhbGwgbGliY2FsbG5yKCJsaWJjLnNvIiwgInNsZWVwIiwgMTApCis8CisJCQkJCQkJKmxpbmUoKSoKK2xpbmUoe2V4cHJ9KQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGZpbGUKKwkJcG9zaXRpb24gZ2l2ZW4gd2l0aCB7ZXhwcn0uICBUaGUgYWNjZXB0ZWQgcG9zaXRpb25zIGFyZToKKwkJICAgIC4JICAgIHRoZSBjdXJzb3IgcG9zaXRpb24KKwkJICAgICQJICAgIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyCisJCSAgICAneAkgICAgcG9zaXRpb24gb2YgbWFyayB4IChpZiB0aGUgbWFyayBpcyBub3Qgc2V0LCAwIGlzCisJCQkgICAgcmV0dXJuZWQpCisJCU5vdGUgdGhhdCBvbmx5IG1hcmtzIGluIHRoZSBjdXJyZW50IGZpbGUgY2FuIGJlIHVzZWQuCisJCUV4YW1wbGVzOiA+CisJCQlsaW5lKCIuIikJCWxpbmUgbnVtYmVyIG9mIHRoZSBjdXJzb3IKKwkJCWxpbmUoIid0IikJCWxpbmUgbnVtYmVyIG9mIG1hcmsgdAorCQkJbGluZSgiJyIgLiBtYXJrZXIpCWxpbmUgbnVtYmVyIG9mIG1hcmsgbWFya2VyCis8CQkJCQkJCSpsYXN0LXBvc2l0aW9uLWp1bXAqCisJCVRoaXMgYXV0b2NvbW1hbmQganVtcHMgdG8gdGhlIGxhc3Qga25vd24gcG9zaXRpb24gaW4gYSBmaWxlCisJCWp1c3QgYWZ0ZXIgb3BlbmluZyBpdCwgaWYgdGhlICciIG1hcmsgaXMgc2V0OiA+CisJOmF1IEJ1ZlJlYWRQb3N0ICogaWYgbGluZSgiJ1wiIikgPiAwICYmIGxpbmUoIidcIiIpIDw9IGxpbmUoIiQiKSB8IGV4ZSAibm9ybWFsIGcnXCIiIHwgZW5kaWYKKzwKK2xpbmUyYnl0ZSh7bG51bX0pCQkJCQkqbGluZTJieXRlKCkqCisJCVJldHVybiB0aGUgYnl0ZSBjb3VudCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIGZvciBsaW5lCisJCXtsbnVtfS4gIFRoaXMgaW5jbHVkZXMgdGhlIGVuZC1vZi1saW5lIGNoYXJhY3RlciwgZGVwZW5kaW5nIG9uCisJCXRoZSAnZmlsZWZvcm1hdCcgb3B0aW9uIGZvciB0aGUgY3VycmVudCBidWZmZXIuICBUaGUgZmlyc3QKKwkJbGluZSByZXR1cm5zIDEuCisJCVRoaXMgY2FuIGFsc28gYmUgdXNlZCB0byBnZXQgdGhlIGJ5dGUgY291bnQgZm9yIHRoZSBsaW5lIGp1c3QKKwkJYmVsb3cgdGhlIGxhc3QgbGluZTogPgorCQkJbGluZTJieXRlKGxpbmUoIiQiKSArIDEpCis8CQlUaGlzIGlzIHRoZSBmaWxlIHNpemUgcGx1cyBvbmUuCisJCVdoZW4ge2xudW19IGlzIGludmFsaWQsIG9yIHRoZSB8K2J5dGVfb2Zmc2V0fCBmZWF0dXJlIGhhcyBiZWVuCisJCWRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSwgLTEgaXMgcmV0dXJuZWQuCisJCUFsc28gc2VlIHxieXRlMmxpbmUoKXwsIHxnb3wgYW5kIHw6Z290b3wuCisKK2xpc3BpbmRlbnQoe2xudW19KQkJCQkJKmxpc3BpbmRlbnQoKSoKKwkJR2V0IHRoZSBhbW91bnQgb2YgaW5kZW50IGZvciBsaW5lIHtsbnVtfSBhY2NvcmRpbmcgdGhlIGxpc3AKKwkJaW5kZW50aW5nIHJ1bGVzLCBhcyB3aXRoICdsaXNwJy4KKwkJVGhlIGluZGVudCBpcyBjb3VudGVkIGluIHNwYWNlcywgdGhlIHZhbHVlIG9mICd0YWJzdG9wJyBpcworCQlyZWxldmFudC4gIHtsbnVtfSBpcyB1c2VkIGp1c3QgbGlrZSBpbiB8Z2V0bGluZSgpfC4KKwkJV2hlbiB7bG51bX0gaXMgaW52YWxpZCBvciBWaW0gd2FzIG5vdCBjb21waWxlZCB0aGUKKwkJfCtsaXNwaW5kZW50fCBmZWF0dXJlLCAtMSBpcyByZXR1cm5lZC4KKworbG9jYWx0aW1lKCkJCQkJCQkqbG9jYWx0aW1lKCkqCisJCVJldHVybiB0aGUgY3VycmVudCB0aW1lLCBtZWFzdXJlZCBhcyBzZWNvbmRzIHNpbmNlIDFzdCBKYW4KKwkJMTk3MC4gIFNlZSBhbHNvIHxzdHJmdGltZSgpfCBhbmQgfGdldGZ0aW1lKCl8LgorCittYXBhcmcoe25hbWV9Wywge21vZGV9XSkJCQkJKm1hcGFyZygpKgorCQlSZXR1cm4gdGhlIHJocyBvZiBtYXBwaW5nIHtuYW1lfSBpbiBtb2RlIHttb2RlfS4gIFdoZW4gdGhlcmUKKwkJaXMgbm8gbWFwcGluZyBmb3Ige25hbWV9LCBhbiBlbXB0eSBTdHJpbmcgaXMgcmV0dXJuZWQuCisJCVRoZXNlIGNoYXJhY3RlcnMgY2FuIGJlIHVzZWQgZm9yIHttb2RlfToKKwkJCSJuIglOb3JtYWwKKwkJCSJ2IglWaXN1YWwKKwkJCSJvIglPcGVyYXRvci1wZW5kaW5nCisJCQkiaSIJSW5zZXJ0CisJCQkiYyIJQ21kLWxpbmUKKwkJCSJsIglsYW5nbWFwIHxsYW5ndWFnZS1tYXBwaW5nfAorCQkJIiIJTm9ybWFsLCBWaXN1YWwgYW5kIE9wZXJhdG9yLXBlbmRpbmcKKwkJV2hlbiB7bW9kZX0gaXMgb21pdHRlZCwgdGhlIG1vZGVzIGZyb20gIiIgYXJlIHVzZWQuCisJCVRoZSB7bmFtZX0gY2FuIGhhdmUgc3BlY2lhbCBrZXkgbmFtZXMsIGxpa2UgaW4gdGhlICI6bWFwIgorCQljb21tYW5kLiAgVGhlIHJldHVybmVkIFN0cmluZyBoYXMgc3BlY2lhbCBjaGFyYWN0ZXJzCisJCXRyYW5zbGF0ZWQgbGlrZSBpbiB0aGUgb3V0cHV0IG9mIHRoZSAiOm1hcCIgY29tbWFuZCBsaXN0aW5nLgorCQlUaGUgbWFwcGluZ3MgbG9jYWwgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIGFyZSBjaGVja2VkIGZpcnN0LAorCQl0aGVuIHRoZSBnbG9iYWwgbWFwcGluZ3MuCisKK21hcGNoZWNrKHtuYW1lfVssIHttb2RlfV0pCQkJCSptYXBjaGVjaygpKgorCQlDaGVjayBpZiB0aGVyZSBpcyBhIG1hcHBpbmcgdGhhdCBtYXRjaGVzIHdpdGgge25hbWV9IGluIG1vZGUKKwkJe21vZGV9LiAgU2VlIHxtYXBhcmcoKXwgZm9yIHttb2RlfSBhbmQgc3BlY2lhbCBuYW1lcyBpbgorCQl7bmFtZX0uCisJCUEgbWF0Y2ggaGFwcGVucyB3aXRoIGEgbWFwcGluZyB0aGF0IHN0YXJ0cyB3aXRoIHtuYW1lfSBhbmQKKwkJd2l0aCBhIG1hcHBpbmcgd2hpY2ggaXMgZXF1YWwgdG8gdGhlIHN0YXJ0IG9mIHtuYW1lfS4KKworCQkJbWF0Y2hlcyBtYXBwaW5nICJhIiAgICAgImFiIiAgICAiYWJjIiB+CisJCSAgIG1hcGNoZWNrKCJhIikJeWVzCXllcwkgeWVzCisJCSAgIG1hcGNoZWNrKCJhYmMiKQl5ZXMJeWVzCSB5ZXMKKwkJICAgbWFwY2hlY2soImF4IikJeWVzCW5vCSBubworCQkgICBtYXBjaGVjaygiYiIpCW5vCW5vCSBubworCisJCVRoZSBkaWZmZXJlbmNlIHdpdGggbWFwYXJnKCkgaXMgdGhhdCBtYXBjaGVjaygpIGZpbmRzIGEKKwkJbWFwcGluZyB0aGF0IG1hdGNoZXMgd2l0aCB7bmFtZX0sIHdoaWxlIG1hcGFyZygpIG9ubHkgZmluZHMgYQorCQltYXBwaW5nIGZvciB7bmFtZX0gZXhhY3RseS4KKwkJV2hlbiB0aGVyZSBpcyBubyBtYXBwaW5nIHRoYXQgc3RhcnRzIHdpdGgge25hbWV9LCBhbiBlbXB0eQorCQlTdHJpbmcgaXMgcmV0dXJuZWQuICBJZiB0aGVyZSBpcyBvbmUsIHRoZSByaHMgb2YgdGhhdCBtYXBwaW5nCisJCWlzIHJldHVybmVkLiAgSWYgdGhlcmUgYXJlIHNldmVyYWwgbWFwcGluZ3MgdGhhdCBzdGFydCB3aXRoCisJCXtuYW1lfSwgdGhlIHJocyBvZiBvbmUgb2YgdGhlbSBpcyByZXR1cm5lZC4KKwkJVGhlIG1hcHBpbmdzIGxvY2FsIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciBhcmUgY2hlY2tlZCBmaXJzdCwKKwkJdGhlbiB0aGUgZ2xvYmFsIG1hcHBpbmdzLgorCQlUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIGEgbWFwcGluZyBjYW4gYmUgYWRkZWQKKwkJd2l0aG91dCBiZWluZyBhbWJpZ3VvdXMuICBFeGFtcGxlOiA+CisJOmlmIG1hcGNoZWNrKCJfdnYiKSA9PSAiIgorCTogICBtYXAgX3Z2IDpzZXQgZ3VpZm9udD03eDEzPENSPgorCTplbmRpZgorPAkJVGhpcyBhdm9pZHMgYWRkaW5nIHRoZSAiX3Z2IiBtYXBwaW5nIHdoZW4gdGhlcmUgYWxyZWFkeSBpcyBhCisJCW1hcHBpbmcgZm9yICJfdiIgb3IgZm9yICJfdnZ2Ii4KKworbWF0Y2goe2V4cHJ9LCB7cGF0fVssIHtzdGFydH1dKQkJCQkqbWF0Y2goKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggZ2l2ZXMgdGhlIGluZGV4IChieXRlIG9mZnNldCkgaW4KKwkJe2V4cHJ9IHdoZXJlIHtwYXR9IG1hdGNoZXMuICBBIG1hdGNoIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIKKwkJcmV0dXJucyB6ZXJvLiAgSWYgdGhlcmUgaXMgbm8gbWF0Y2ggLTEgaXMgcmV0dXJuZWQuICBFeGFtcGxlOiA+CisJCQk6ZWNobyBtYXRjaCgidGVzdGluZyIsICJpbmciKQorPAkJcmVzdWx0cyBpbiAiNCIuCisJCVNlZSB8c3RyaW5nLW1hdGNofCBmb3IgaG93IHtwYXR9IGlzIHVzZWQuCisJCUlmIHtzdGFydH0gaXMgZ2l2ZW4sIHRoZSBzZWFyY2ggc3RhcnRzIGZyb20gaW5kZXgge3N0YXJ0fS4KKwkJVGhlIHJlc3VsdCwgaG93ZXZlciwgaXMgc3RpbGwgdGhlIGluZGV4IGNvdW50ZWQgZnJvbSB0aGUKKwkJZmlyc3QgY2hhcmFjdGVyLiBFeGFtcGxlOiA+CisJCQk6ZWNobyBtYXRjaCgidGVzdGluZyIsICJpbmciLCAyKQorPAkJcmVzdWx0IGlzIGFnYWluICI0Ii4gPgorCQkJOmVjaG8gbWF0Y2goInRlc3RpbmciLCAiaW5nIiwgNCkKKzwJCXJlc3VsdCBpcyBhZ2FpbiAiNCIuID4KKwkJCTplY2hvIG1hdGNoKCJ0ZXN0aW5nIiwgInQiLCAyKQorPAkJcmVzdWx0IGlzICIzIi4KKwkJSWYge3N0YXJ0fSA8IDAsIGl0IHdpbGwgYmUgc2V0IHRvIDAuCisJCUlmIHtzdGFydH0gPiBzdHJsZW4oe2V4cHJ9KSAtMSBpcyByZXR1cm5lZC4KKwkJU2VlIHxwYXR0ZXJufCBmb3IgdGhlIHBhdHRlcm5zIHRoYXQgYXJlIGFjY2VwdGVkLgorCQlUaGUgJ2lnbm9yZWNhc2UnIG9wdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgaWdub3JlLWNhc2VuZXNzIG9mCisJCXRoZSBwYXR0ZXJuLiAgJ3NtYXJ0Y2FzZScgaXMgTk9UIHVzZWQuICBUaGUgbWF0Y2hpbmcgaXMgYWx3YXlzCisJCWRvbmUgbGlrZSAnbWFnaWMnIGlzIHNldCBhbmQgJ2Nwb3B0aW9ucycgaXMgZW1wdHkuCisKK21hdGNoZW5kKHtleHByfSwge3BhdH1bLCB7c3RhcnR9XSkJCQkqbWF0Y2hlbmQoKSoKKwkJU2FtZSBhcyBtYXRjaCgpLCBidXQgcmV0dXJuIHRoZSBpbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKwkJdGhlIG1hdGNoLiAgRXhhbXBsZTogPgorCQkJOmVjaG8gbWF0Y2hlbmQoInRlc3RpbmciLCAiaW5nIikKKzwJCXJlc3VsdHMgaW4gIjciLgorCQlUaGUge3N0YXJ0fSwgaWYgZ2l2ZW4sIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciBtYXRjaCgpLiA+CisJCQk6ZWNobyBtYXRjaGVuZCgidGVzdGluZyIsICJpbmciLCAyKQorPAkJcmVzdWx0cyBpbiAiNyIuID4KKwkJCTplY2hvIG1hdGNoZW5kKCJ0ZXN0aW5nIiwgImluZyIsIDUpCis8CQlyZXN1bHQgaXMgIi0xIi4KKworbWF0Y2hzdHIoe2V4cHJ9LCB7cGF0fVssIHtzdGFydH1dKQkJCSptYXRjaHN0cigpKgorCQlTYW1lIGFzIG1hdGNoKCksIGJ1dCByZXR1cm4gdGhlIG1hdGNoZWQgc3RyaW5nLiAgRXhhbXBsZTogPgorCQkJOmVjaG8gbWF0Y2hzdHIoInRlc3RpbmciLCAiaW5nIikKKzwJCXJlc3VsdHMgaW4gImluZyIuCisJCVdoZW4gdGhlcmUgaXMgbm8gbWF0Y2ggIiIgaXMgcmV0dXJuZWQuCisJCVRoZSB7c3RhcnR9LCBpZiBnaXZlbiwgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIG1hdGNoKCkuID4KKwkJCTplY2hvIG1hdGNoc3RyKCJ0ZXN0aW5nIiwgImluZyIsIDIpCis8CQlyZXN1bHRzIGluICJpbmciLiA+CisJCQk6ZWNobyBtYXRjaHN0cigidGVzdGluZyIsICJpbmciLCA1KQorPAkJcmVzdWx0IGlzICIiLgorCisJCQkJCQkJKm1vZGUoKSoKK21vZGUoKQkJUmV0dXJuIGEgc3RyaW5nIHRoYXQgaW5kaWNhdGVzIHRoZSBjdXJyZW50IG1vZGU6CisJCQluCU5vcm1hbAorCQkJdglWaXN1YWwgYnkgY2hhcmFjdGVyCisJCQlWCVZpc3VhbCBieSBsaW5lCisJCQlDVFJMLVYJVmlzdWFsIGJsb2Nrd2lzZQorCQkJcwlTZWxlY3QgYnkgY2hhcmFjdGVyCisJCQlTCVNlbGVjdCBieSBsaW5lCisJCQlDVFJMLVMJU2VsZWN0IGJsb2Nrd2lzZQorCQkJaQlJbnNlcnQKKwkJCVIJUmVwbGFjZQorCQkJYwlDb21tYW5kLWxpbmUKKwkJCXIJSGl0LWVudGVyIHByb21wdAorCQlUaGlzIGlzIHVzZWZ1bCBpbiB0aGUgJ3N0YXR1c2xpbmUnIG9wdGlvbi4gIEluIG1vc3Qgb3RoZXIKKwkJcGxhY2VzIGl0IGFsd2F5cyByZXR1cm5zICJjIiBvciAibiIuCisKK25leHRub25ibGFuayh7bG51bX0pCQkJCQkqbmV4dG5vbmJsYW5rKCkqCisJCVJldHVybiB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGZpcnN0IGxpbmUgYXQgb3IgYmVsb3cge2xudW19CisJCXRoYXQgaXMgbm90IGJsYW5rLiAgRXhhbXBsZTogPgorCQkJaWYgZ2V0bGluZShuZXh0bm9uYmxhbmsoMSkpID1+ICJKYXZhIgorPAkJV2hlbiB7bG51bX0gaXMgaW52YWxpZCBvciB0aGVyZSBpcyBubyBub24tYmxhbmsgbGluZSBhdCBvcgorCQliZWxvdyBpdCwgemVybyBpcyByZXR1cm5lZC4KKwkJU2VlIGFsc28gfHByZXZub25ibGFuaygpfC4KKworbnIyY2hhcih7ZXhwcn0pCQkJCQkJKm5yMmNoYXIoKSoKKwkJUmV0dXJuIGEgc3RyaW5nIHdpdGggYSBzaW5nbGUgY2hhcmFjdGVyLCB3aGljaCBoYXMgdGhlIG51bWJlcgorCQl2YWx1ZSB7ZXhwcn0uICBFeGFtcGxlczogPgorCQkJbnIyY2hhcig2NCkJCXJldHVybnMgIkAiCisJCQlucjJjaGFyKDMyKQkJcmV0dXJucyAiICIKKzwJCVRoZSBjdXJyZW50ICdlbmNvZGluZycgaXMgdXNlZC4gIEV4YW1wbGUgZm9yICJ1dGYtOCI6ID4KKwkJCW5yMmNoYXIoMzAwKQkJcmV0dXJucyBJIHdpdGggYm93IGNoYXJhY3RlcgorPAkJTm90ZSB0aGF0IGEgTlVMIGNoYXJhY3RlciBpbiB0aGUgZmlsZSBpcyBzcGVjaWZpZWQgd2l0aAorCQlucjJjaGFyKDEwKSwgYmVjYXVzZSBOVUxzIGFyZSByZXByZXNlbnRlZCB3aXRoIG5ld2xpbmUKKwkJY2hhcmFjdGVycy4gIG5yMmNoYXIoMCkgaXMgYSByZWFsIE5VTCBhbmQgdGVybWluYXRlcyB0aGUKKwkJc3RyaW5nLCB0aHVzIGlzbid0IHZlcnkgdXNlZnVsLgorCitwcmV2bm9uYmxhbmsoe2xudW19KQkJCQkJKnByZXZub25ibGFuaygpKgorCQlSZXR1cm4gdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBmaXJzdCBsaW5lIGF0IG9yIGFib3ZlIHtsbnVtfQorCQl0aGF0IGlzIG5vdCBibGFuay4gIEV4YW1wbGU6ID4KKwkJCWxldCBpbmQgPSBpbmRlbnQocHJldm5vbmJsYW5rKHY6bG51bSAtIDEpKQorPAkJV2hlbiB7bG51bX0gaXMgaW52YWxpZCBvciB0aGVyZSBpcyBubyBub24tYmxhbmsgbGluZSBhdCBvcgorCQlhYm92ZSBpdCwgemVybyBpcyByZXR1cm5lZC4KKwkJQWxzbyBzZWUgfG5leHRub25ibGFuaygpfC4KKworCQkJCQkJCSpyZW1vdGVfZXhwcigpKiAqRTQ0OSoKK3JlbW90ZV9leHByKHtzZXJ2ZXJ9LCB7c3RyaW5nfSBbLCB7aWR2YXJ9XSkKKwkJU2VuZCB0aGUge3N0cmluZ30gdG8ge3NlcnZlcn0uICBUaGUgc3RyaW5nIGlzIHNlbnQgYXMgYW4KKwkJZXhwcmVzc2lvbiBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhZnRlciBldmFsdWF0aW9uLgorCQlJZiB7aWR2YXJ9IGlzIHByZXNlbnQsIGl0IGlzIHRha2VuIGFzIHRoZSBuYW1lIG9mIGEKKwkJdmFyaWFibGUgYW5kIGEge3NlcnZlcmlkfSBmb3IgbGF0ZXIgdXNlIHdpdGgKKwkJcmVtb3RlX3JlYWQoKSBpcyBzdG9yZWQgdGhlcmUuCisJCVNlZSBhbHNvIHxjbGllbnRzZXJ2ZXJ8IHxSZW1vdGVSZXBseXwuCisJCVRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgfHNhbmRib3h8LgorCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2NsaWVudHNlcnZlcnwgZmVhdHVyZX0KKwkJTm90ZTogQW55IGVycm9ycyB3aWxsIGNhdXNlIGEgbG9jYWwgZXJyb3IgbWVzc2FnZSB0byBiZSBpc3N1ZWQKKwkJYW5kIHRoZSByZXN1bHQgd2lsbCBiZSB0aGUgZW1wdHkgc3RyaW5nLgorCQlFeGFtcGxlczogPgorCQkJOmVjaG8gcmVtb3RlX2V4cHIoImd2aW0iLCAiMisyIikKKwkJCTplY2hvIHJlbW90ZV9leHByKCJndmltMSIsICJiOmN1cnJlbnRfc3ludGF4IikKKzwKKworcmVtb3RlX2ZvcmVncm91bmQoe3NlcnZlcn0pCQkJCSpyZW1vdGVfZm9yZWdyb3VuZCgpKgorCQlNb3ZlIHRoZSBWaW0gc2VydmVyIHdpdGggdGhlIG5hbWUge3NlcnZlcn0gdG8gdGhlIGZvcmVncm91bmQuCisJCVRoaXMgd29ya3MgbGlrZTogPgorCQkJcmVtb3RlX2V4cHIoe3NlcnZlcn0sICJmb3JlZ3JvdW5kKCkiKQorPAkJRXhjZXB0IHRoYXQgb24gV2luMzIgc3lzdGVtcyB0aGUgY2xpZW50IGRvZXMgdGhlIHdvcmssIHRvIHdvcmsKKwkJYXJvdW5kIHRoZSBwcm9ibGVtIHRoYXQgdGhlIE9TIGRvZXNuJ3QgYWx3YXlzIGFsbG93IHRoZSBzZXJ2ZXIKKwkJdG8gYnJpbmcgaXRzZWxmIHRvIHRoZSBmb3JlZ3JvdW5kLgorCQlUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHxzYW5kYm94fC4KKwkJe29ubHkgaW4gdGhlIFdpbjMyLCBBdGhlbmEsIE1vdGlmIGFuZCBHVEsgR1VJIHZlcnNpb25zIGFuZCB0aGUKKwkJV2luMzIgY29uc29sZSB2ZXJzaW9ufQorCisKK3JlbW90ZV9wZWVrKHtzZXJ2ZXJpZH0gWywge3JldHZhcn1dKQkJKnJlbW90ZV9wZWVrKCkqCisJCVJldHVybnMgYSBwb3NpdGl2ZSBudW1iZXIgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSBzdHJpbmdzCisJCWZyb20ge3NlcnZlcmlkfS4gIENvcGllcyBhbnkgcmVwbHkgc3RyaW5nIGludG8gdGhlIHZhcmlhYmxlCisJCXtyZXR2YXJ9IGlmIHNwZWNpZmllZC4gIHtyZXR2YXJ9IG11c3QgYmUgYSBzdHJpbmcgd2l0aCB0aGUKKwkJbmFtZSBvZiBhIHZhcmlhYmxlLgorCQlSZXR1cm5zIHplcm8gaWYgbm9uZSBhcmUgYXZhaWxhYmxlLgorCQlSZXR1cm5zIC0xIGlmIHNvbWV0aGluZyBpcyB3cm9uZy4KKwkJU2VlIGFsc28gfGNsaWVudHNlcnZlcnwuCisJCVRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgfHNhbmRib3h8LgorCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2NsaWVudHNlcnZlcnwgZmVhdHVyZX0KKwkJRXhhbXBsZXM6ID4KKwkJCTpsZXQgcmVwbCA9ICIiCisJCQk6ZWNobyAiUEVFSzogIi5yZW1vdGVfcGVlayhpZCwgInJlcGwiKS4iOiAiLnJlcGwKKworcmVtb3RlX3JlYWQoe3NlcnZlcmlkfSkJCQkJKnJlbW90ZV9yZWFkKCkqCisJCVJldHVybiB0aGUgb2xkZXN0IGF2YWlsYWJsZSByZXBseSBmcm9tIHtzZXJ2ZXJpZH0gYW5kIGNvbnN1bWUKKwkJaXQuICBJdCBibG9ja3MgdW50aWwgYSByZXBseSBpcyBhdmFpbGFibGUuCisJCVNlZSBhbHNvIHxjbGllbnRzZXJ2ZXJ8LgorCQlUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHxzYW5kYm94fC4KKwkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtjbGllbnRzZXJ2ZXJ8IGZlYXR1cmV9CisJCUV4YW1wbGU6ID4KKwkJCTplY2hvIHJlbW90ZV9yZWFkKGlkKQorPAorCQkJCQkJCSpyZW1vdGVfc2VuZCgpKiAqRTI0MSoKK3JlbW90ZV9zZW5kKHtzZXJ2ZXJ9LCB7c3RyaW5nfSBbLCB7aWR2YXJ9XSkKKwkJU2VuZCB0aGUge3N0cmluZ30gdG8ge3NlcnZlcn0uICBUaGUgc3RyaW5nIGlzIHNlbnQgYXMKKwkJaW5wdXQga2V5cyBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkuCisJCUlmIHtpZHZhcn0gaXMgcHJlc2VudCwgaXQgaXMgdGFrZW4gYXMgdGhlIG5hbWUgb2YgYQorCQl2YXJpYWJsZSBhbmQgYSB7c2VydmVyaWR9IGZvciBsYXRlciB1c2Ugd2l0aAorCQlyZW1vdGVfcmVhZCgpIGlzIHN0b3JlZCB0aGVyZS4KKwkJU2VlIGFsc28gfGNsaWVudHNlcnZlcnwgfFJlbW90ZVJlcGx5fC4KKwkJVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB8c2FuZGJveHwuCisJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrY2xpZW50c2VydmVyfCBmZWF0dXJlfQorCQlOb3RlOiBBbnkgZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWQgaW4gdGhlIHNlcnZlciBhbmQgbWF5IG1lc3MKKwkJdXAgdGhlIGRpc3BsYXkuCisJCUV4YW1wbGVzOiA+CisJCTplY2hvIHJlbW90ZV9zZW5kKCJndmltIiwgIjpEcm9wQW5kUmVwbHkgIi5maWxlLCAic2VydmVyaWQiKS4KKwkJIFwgcmVtb3RlX3JlYWQoc2VydmVyaWQpCisKKwkJOmF1dG9jbWQgTk9ORSBSZW1vdGVSZXBseSAqCisJCSBcIGVjaG8gcmVtb3RlX3JlYWQoZXhwYW5kKCI8YW1hdGNoPiIpKQorCQk6ZWNobyByZW1vdGVfc2VuZCgiZ3ZpbSIsICI6c2xlZXAgMTAgfCBlY2hvICIuCisJCSBcICdzZXJ2ZXIyY2xpZW50KGV4cGFuZCgiPGNsaWVudD4iKSwgIkhFTExPIik8Q1I+JykKKworCityZW5hbWUoe2Zyb219LCB7dG99KQkJCQkJKnJlbmFtZSgpKgorCQlSZW5hbWUgdGhlIGZpbGUgYnkgdGhlIG5hbWUge2Zyb219IHRvIHRoZSBuYW1lIHt0b30uICBUaGlzCisJCXNob3VsZCBhbHNvIHdvcmsgdG8gbW92ZSBmaWxlcyBhY3Jvc3MgZmlsZSBzeXN0ZW1zLiAgVGhlCisJCXJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgMCBpZiB0aGUgZmlsZSB3YXMgcmVuYW1lZAorCQlzdWNjZXNzZnVsbHksIGFuZCBub24temVybyB3aGVuIHRoZSByZW5hbWluZyBmYWlsZWQuCisJCVRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgfHNhbmRib3h8LgorCityZXNvbHZlKHtmaWxlbmFtZX0pCQkJCQkqcmVzb2x2ZSgpKiAqRTY1NSoKKwkJT24gTVMtV2luZG93cywgd2hlbiB7ZmlsZW5hbWV9IGlzIGEgc2hvcnRjdXQgKGEgLmxuayBmaWxlKSwKKwkJcmV0dXJucyB0aGUgcGF0aCB0aGUgc2hvcnRjdXQgcG9pbnRzIHRvIGluIGEgc2ltcGxpZmllZCBmb3JtLgorCQlPbiBVbml4LCByZXBlYXQgcmVzb2x2aW5nIHN5bWJvbGljIGxpbmtzIGluIGFsbCBwYXRoCisJCWNvbXBvbmVudHMgb2Yge2ZpbGVuYW1lfSBhbmQgcmV0dXJuIHRoZSBzaW1wbGlmaWVkIHJlc3VsdC4KKwkJVG8gY29wZSB3aXRoIGxpbmsgY3ljbGVzLCByZXNvbHZpbmcgb2Ygc3ltYm9saWMgbGlua3MgaXMKKwkJc3RvcHBlZCBhZnRlciAxMDAgaXRlcmF0aW9ucy4KKwkJT24gb3RoZXIgc3lzdGVtcywgcmV0dXJuIHRoZSBzaW1wbGlmaWVkIHtmaWxlbmFtZX0uCisJCVRoZSBzaW1wbGlmaWNhdGlvbiBzdGVwIGlzIGRvbmUgYXMgYnkgfHNpbXBsaWZ5KCl8LgorCQlyZXNvbHZlKCkga2VlcHMgYSBsZWFkaW5nIHBhdGggY29tcG9uZW50IHNwZWNpZnlpbmcgdGhlCisJCWN1cnJlbnQgZGlyZWN0b3J5IChwcm92aWRlZCB0aGUgcmVzdWx0IGlzIHN0aWxsIGEgcmVsYXRpdmUKKwkJcGF0aCBuYW1lKSBhbmQgYWxzbyBrZWVwcyBhIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yLgorCitzZWFyY2goe3BhdHRlcm59IFssIHtmbGFnc31dKQkJCQkqc2VhcmNoKCkqCisJCVNlYXJjaCBmb3IgcmVnZXhwIHBhdHRlcm4ge3BhdHRlcm59LiAgVGhlIHNlYXJjaCBzdGFydHMgYXQgdGhlCisJCWN1cnNvciBwb3NpdGlvbi4KKwkJe2ZsYWdzfSBpcyBhIFN0cmluZywgd2hpY2ggY2FuIGNvbnRhaW4gdGhlc2UgY2hhcmFjdGVyIGZsYWdzOgorCQknYicJc2VhcmNoIGJhY2t3YXJkIGluc3RlYWQgb2YgZm9yd2FyZAorCQkndycJd3JhcCBhcm91bmQgdGhlIGVuZCBvZiB0aGUgZmlsZQorCQknVycJZG9uJ3Qgd3JhcCBhcm91bmQgdGhlIGVuZCBvZiB0aGUgZmlsZQorCQlJZiBuZWl0aGVyICd3JyBvciAnVycgaXMgZ2l2ZW4sIHRoZSAnd3JhcHNjYW4nIG9wdGlvbiBhcHBsaWVzLgorCisJCVdoZW4gYSBtYXRjaCBoYXMgYmVlbiBmb3VuZCBpdHMgbGluZSBudW1iZXIgaXMgcmV0dXJuZWQsIGFuZAorCQl0aGUgY3Vyc29yIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbWF0Y2guICBJZiB0aGVyZSBpcyBubworCQltYXRjaCBhIDAgaXMgcmV0dXJuZWQgYW5kIHRoZSBjdXJzb3IgZG9lc24ndCBtb3ZlLiAgTm8gZXJyb3IKKwkJbWVzc2FnZSBpcyBnaXZlbi4KKworCQlFeGFtcGxlIChnb2VzIG92ZXIgYWxsIGZpbGVzIGluIHRoZSBhcmd1bWVudCBsaXN0KTogPgorCQkgICAgOmxldCBuID0gMQorCQkgICAgOndoaWxlIG4gPD0gYXJnYygpCSAgICAiIGxvb3Agb3ZlciBhbGwgZmlsZXMgaW4gYXJnbGlzdAorCQkgICAgOiAgZXhlICJhcmd1bWVudCAiIC4gbgorCQkgICAgOiAgIiBzdGFydCBhdCB0aGUgbGFzdCBjaGFyIGluIHRoZSBmaWxlIGFuZCB3cmFwIGZvciB0aGUKKwkJICAgIDogICIgZmlyc3Qgc2VhcmNoIHRvIGZpbmQgbWF0Y2ggYXQgc3RhcnQgb2YgZmlsZQorCQkgICAgOiAgbm9ybWFsIEckCisJCSAgICA6ICBsZXQgZmxhZ3MgPSAidyIKKwkJICAgIDogIHdoaWxlIHNlYXJjaCgiZm9vIiwgZmxhZ3MpID4gMAorCQkgICAgOiAgICBzL2Zvby9iYXIvZworCQkgICAgOgkgbGV0IGZsYWdzID0gIlciCisJCSAgICA6ICBlbmR3aGlsZQorCQkgICAgOiAgdXBkYXRlCQkgICAgIiB3cml0ZSB0aGUgZmlsZSBpZiBtb2RpZmllZAorCQkgICAgOiAgbGV0IG4gPSBuICsgMQorCQkgICAgOmVuZHdoaWxlCis8CisJCQkJCQkJKnNlYXJjaHBhaXIoKSoKK3NlYXJjaHBhaXIoe3N0YXJ0fSwge21pZGRsZX0sIHtlbmR9IFssIHtmbGFnc30gWywge3NraXB9XV0pCisJCVNlYXJjaCBmb3IgdGhlIG1hdGNoIG9mIGEgbmVzdGVkIHN0YXJ0LWVuZCBwYWlyLiAgVGhpcyBjYW4gYmUKKwkJdXNlZCB0byBmaW5kIHRoZSAiZW5kaWYiIHRoYXQgbWF0Y2hlcyBhbiAiaWYiLCB3aGlsZSBvdGhlcgorCQlpZi9lbmRpZiBwYWlycyBpbiBiZXR3ZWVuIGFyZSBpZ25vcmVkLgorCQlUaGUgc2VhcmNoIHN0YXJ0cyBhdCB0aGUgY3Vyc29yLiAgSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhlCisJCWN1cnNvciBpcyBwb3NpdGlvbmVkIGF0IGl0IGFuZCB0aGUgbGluZSBudW1iZXIgaXMgcmV0dXJuZWQuCisJCUlmIG5vIG1hdGNoIGlzIGZvdW5kIDAgb3IgLTEgaXMgcmV0dXJuZWQgYW5kIHRoZSBjdXJzb3IKKwkJZG9lc24ndCBtb3ZlLiAgTm8gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbi4KKworCQl7c3RhcnR9LCB7bWlkZGxlfSBhbmQge2VuZH0gYXJlIHBhdHRlcm5zLCBzZWUgfHBhdHRlcm58LiAgVGhleQorCQltdXN0IG5vdCBjb250YWluIFwoIFwpIHBhaXJzLiAgVXNlIG9mIFwlKCBcKSBpcyBhbGxvd2VkLiAgV2hlbgorCQl7bWlkZGxlfSBpcyBub3QgZW1wdHksIGl0IGlzIGZvdW5kIHdoZW4gc2VhcmNoaW5nIGZyb20gZWl0aGVyCisJCWRpcmVjdGlvbiwgYnV0IG9ubHkgd2hlbiBub3QgaW4gYSBuZXN0ZWQgc3RhcnQtZW5kIHBhaXIuICBBCisJCXR5cGljYWwgdXNlIGlzOiA+CisJCQlzZWFyY2hwYWlyKCdcPGlmXD4nLCAnXDxlbHNlXD4nLCAnXDxlbmRpZlw+JykKKzwJCUJ5IGxlYXZpbmcge21pZGRsZX0gZW1wdHkgdGhlICJlbHNlIiBpcyBza2lwcGVkLgorCisJCXtmbGFnc30gYXJlIHVzZWQgbGlrZSB3aXRoIHxzZWFyY2goKXwuICBBZGRpdGlvbmFsbHk6CisJCSduJwlkbyBOb3QgbW92ZSB0aGUgY3Vyc29yCisJCSdyJwlSZXBlYXQgdW50aWwgbm8gbW9yZSBtYXRjaGVzIGZvdW5kOyB3aWxsIGZpbmQgdGhlCisJCQlvdXRlciBwYWlyCisJCSdtJwlyZXR1cm4gbnVtYmVyIG9mIE1hdGNoZXMgaW5zdGVhZCBvZiBsaW5lIG51bWJlciB3aXRoCisJCQl0aGUgbWF0Y2g7IHdpbGwgb25seSBiZSA+IDEgd2hlbiAncicgaXMgdXNlZC4KKworCQlXaGVuIGEgbWF0Y2ggZm9yIHtzdGFydH0sIHttaWRkbGV9IG9yIHtlbmR9IGlzIGZvdW5kLCB0aGUKKwkJe3NraXB9IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIHdpdGggdGhlIGN1cnNvciBwb3NpdGlvbmVkIG9uCisJCXRoZSBzdGFydCBvZiB0aGUgbWF0Y2guICBJdCBzaG91bGQgcmV0dXJuIG5vbi16ZXJvIGlmIHRoaXMKKwkJbWF0Y2ggaXMgdG8gYmUgc2tpcHBlZC4gIEUuZy4sIGJlY2F1c2UgaXQgaXMgaW5zaWRlIGEgY29tbWVudAorCQlvciBhIHN0cmluZy4KKwkJV2hlbiB7c2tpcH0gaXMgb21pdHRlZCBvciBlbXB0eSwgZXZlcnkgbWF0Y2ggaXMgYWNjZXB0ZWQuCisJCVdoZW4gZXZhbHVhdGluZyB7c2tpcH0gY2F1c2VzIGFuIGVycm9yIHRoZSBzZWFyY2ggaXMgYWJvcnRlZAorCQlhbmQgLTEgcmV0dXJuZWQuCisKKwkJVGhlIHZhbHVlIG9mICdpZ25vcmVjYXNlJyBpcyB1c2VkLiAgJ21hZ2ljJyBpcyBpZ25vcmVkLCB0aGUKKwkJcGF0dGVybnMgYXJlIHVzZWQgbGlrZSBpdCdzIG9uLgorCisJCVRoZSBzZWFyY2ggc3RhcnRzIGV4YWN0bHkgYXQgdGhlIGN1cnNvci4gIEEgbWF0Y2ggd2l0aAorCQl7c3RhcnR9LCB7bWlkZGxlfSBvciB7ZW5kfSBhdCB0aGUgbmV4dCBjaGFyYWN0ZXIsIGluIHRoZQorCQlkaXJlY3Rpb24gb2Ygc2VhcmNoaW5nLCBpcyB0aGUgZmlyc3Qgb25lIGZvdW5kLiAgRXhhbXBsZTogPgorCQkJaWYgMQorCQkJICBpZiAyCisJCQkgIGVuZGlmIDIKKwkJCWVuZGlmIDEKKzwJCVdoZW4gc3RhcnRpbmcgYXQgdGhlICJpZiAyIiwgd2l0aCB0aGUgY3Vyc29yIG9uIHRoZSAiaSIsIGFuZAorCQlzZWFyY2hpbmcgZm9yd2FyZHMsIHRoZSAiZW5kaWYgMiIgaXMgZm91bmQuICBXaGVuIHN0YXJ0aW5nIG9uCisJCXRoZSBjaGFyYWN0ZXIganVzdCBiZWZvcmUgdGhlICJpZiAyIiwgdGhlICJlbmRpZiAxIiB3aWxsIGJlCisJCWZvdW5kLiAgVGhhdCdzIGJlY2F1c2UgdGhlICJpZiAyIiB3aWxsIGJlIGZvdW5kIGZpcnN0LCBhbmQKKwkJdGhlbiB0aGlzIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBuZXN0ZWQgaWYvZW5kaWYgZnJvbSAiaWYgMiIgdG8KKwkJImVuZGlmIDIiLgorCQlXaGVuIHNlYXJjaGluZyBiYWNrd2FyZHMgYW5kIHtlbmR9IGlzIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyLAorCQlpdCBtYXkgYmUgdXNlZnVsIHRvIHB1dCAiXHpzIiBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBzbworCQl0aGF0IHdoZW4gdGhlIGN1cnNvciBpcyBpbnNpZGUgYSBtYXRjaCB3aXRoIHRoZSBlbmQgaXQgZmluZHMKKwkJdGhlIG1hdGNoaW5nIHN0YXJ0LgorCisJCUV4YW1wbGUsIHRvIGZpbmQgdGhlICJlbmRpZiIgY29tbWFuZCBpbiBhIFZpbSBzY3JpcHQ6ID4KKworCTplY2hvIHNlYXJjaHBhaXIoJ1w8aWZcPicsICdcPGVsXCVbc2VpZl1cPicsICdcPGVuXCVbZGlmXVw+JywgJ1cnLAorCQkJXCAnZ2V0bGluZSgiLiIpID1+ICJeXFxzKlwiIicpCisKKzwJCVRoZSBjdXJzb3IgbXVzdCBiZSBhdCBvciBhZnRlciB0aGUgImlmIiBmb3Igd2hpY2ggYSBtYXRjaCBpcworCQl0byBiZSBmb3VuZC4gIE5vdGUgdGhhdCBzaW5nbGUtcXVvdGUgc3RyaW5ncyBhcmUgdXNlZCB0byBhdm9pZAorCQloYXZpbmcgdG8gZG91YmxlIHRoZSBiYWNrc2xhc2hlcy4gIFRoZSBza2lwIGV4cHJlc3Npb24gb25seQorCQljYXRjaGVzIGNvbW1lbnRzIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUsIG5vdCBhZnRlciBhIGNvbW1hbmQuCisJCUFsc28sIGEgd29yZCAiZW4iIG9yICJpZiIgaGFsZndheSBhIGxpbmUgaXMgY29uc2lkZXJlZCBhCisJCW1hdGNoLgorCQlBbm90aGVyIGV4YW1wbGUsIHRvIHNlYXJjaCBmb3IgdGhlIG1hdGNoaW5nICJ7IiBvZiBhICJ9IjogPgorCisJOmVjaG8gc2VhcmNocGFpcigneycsICcnLCAnfScsICdiVycpCisKKzwJCVRoaXMgd29ya3Mgd2hlbiB0aGUgY3Vyc29yIGlzIGF0IG9yIGJlZm9yZSB0aGUgIn0iIGZvciB3aGljaCBhCisJCW1hdGNoIGlzIHRvIGJlIGZvdW5kLiAgVG8gcmVqZWN0IG1hdGNoZXMgdGhhdCBzeW50YXgKKwkJaGlnaGxpZ2h0aW5nIHJlY29nbml6ZWQgYXMgc3RyaW5nczogPgorCisJOmVjaG8gc2VhcmNocGFpcigneycsICcnLCAnfScsICdiVycsCisJICAgICBcICdzeW5JRGF0dHIoc3luSUQobGluZSgiLiIpLCBjb2woIi4iKSwgMCksICJuYW1lIikgPX4/ICJzdHJpbmciJykKKzwKK3NlcnZlcjJjbGllbnQoIHtjbGllbnRpZH0sIHtzdHJpbmd9KQkJCSpzZXJ2ZXIyY2xpZW50KCkqCisJCVNlbmQgYSByZXBseSBzdHJpbmcgdG8ge2NsaWVudGlkfS4gIFRoZSBtb3N0IHJlY2VudCB7Y2xpZW50aWR9CisJCXRoYXQgc2VudCBhIHN0cmluZyBjYW4gYmUgcmV0cmlldmVkIHdpdGggZXhwYW5kKCI8Y2xpZW50PiIpLgorCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2NsaWVudHNlcnZlcnwgZmVhdHVyZX0KKwkJTm90ZToKKwkJVGhpcyBpZCBoYXMgdG8gYmUgc3RvcmVkIGJlZm9yZSB0aGUgbmV4dCBjb21tYW5kIGNhbiBiZQorCQlyZWNlaXZlZC4gSWUuIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgcmVjZWl2ZWQgY29tbWFuZCBhbmQKKwkJYmVmb3JlIGNhbGxpbmcgYW55IGNvbW1hbmRzIHRoYXQgd2FpdHMgZm9yIGlucHV0LgorCQlTZWUgYWxzbyB8Y2xpZW50c2VydmVyfC4KKwkJRXhhbXBsZTogPgorCQkJOmVjaG8gc2VydmVyMmNsaWVudChleHBhbmQoIjxjbGllbnQ+IiksICJIRUxMTyIpCis8CitzZXJ2ZXJsaXN0KCkJCQkJCSpzZXJ2ZXJsaXN0KCkqCisJCVJldHVybiBhIGxpc3Qgb2YgYXZhaWxhYmxlIHNlcnZlciBuYW1lcywgb25lIHBlciBsaW5lLgorCQlXaGVuIHRoZXJlIGFyZSBubyBzZXJ2ZXJzIG9yIHRoZSBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlCisJCWFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4gIFNlZSBhbHNvIHxjbGllbnRzZXJ2ZXJ8LgorCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2NsaWVudHNlcnZlcnwgZmVhdHVyZX0KKwkJRXhhbXBsZTogPgorCQkJOmVjaG8gc2VydmVybGlzdCgpCis8CitzZXRidWZ2YXIoe2V4cHJ9LCB7dmFybmFtZX0sIHt2YWx9KQkJCSpzZXRidWZ2YXIoKSoKKwkJU2V0IG9wdGlvbiBvciBsb2NhbCB2YXJpYWJsZSB7dmFybmFtZX0gaW4gYnVmZmVyIHtleHByfSB0bworCQl7dmFsfS4KKwkJVGhpcyBhbHNvIHdvcmtzIGZvciBhIGdsb2JhbCBvciBsb2NhbCB3aW5kb3cgb3B0aW9uLCBidXQgaXQKKwkJZG9lc24ndCB3b3JrIGZvciBhIGdsb2JhbCBvciBsb2NhbCB3aW5kb3cgdmFyaWFibGUuCisJCUZvciBhIGxvY2FsIHdpbmRvdyBvcHRpb24gdGhlIGdsb2JhbCB2YWx1ZSBpcyB1bmNoYW5nZWQuCisJCUZvciB0aGUgdXNlIG9mIHtleHByfSwgc2VlIHxidWZuYW1lKCl8IGFib3ZlLgorCQlOb3RlIHRoYXQgdGhlIHZhcmlhYmxlIG5hbWUgd2l0aG91dCAiYjoiIG11c3QgYmUgdXNlZC4KKwkJRXhhbXBsZXM6ID4KKwkJCTpjYWxsIHNldGJ1ZnZhcigxLCAiJm1vZCIsIDEpCisJCQk6Y2FsbCBzZXRidWZ2YXIoInRvZG8iLCAibXl2YXIiLCAiZm9vYmFyIikKKzwJCVRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgfHNhbmRib3h8LgorCitzZXRjbWRwb3Moe3Bvc30pCQkJCQkqc2V0Y21kcG9zKCkqCisJCVNldCB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBjb21tYW5kIGxpbmUgdG8gYnl0ZSBwb3NpdGlvbgorCQl7cG9zfS4gIFRoZSBmaXJzdCBwb3NpdGlvbiBpcyAxLgorCQlVc2UgfGdldGNtZHBvcygpfCB0byBvYnRhaW4gdGhlIGN1cnJlbnQgcG9zaXRpb24uCisJCU9ubHkgd29ya3Mgd2hpbGUgZWRpdGluZyB0aGUgY29tbWFuZCBsaW5lLCB0aHVzIHlvdSBtdXN0IHVzZQorCQl8Y19DVFJMLVxfZXwgb3IgfGNfQ1RSTC1SXz18LiAgVGhlIHBvc2l0aW9uIGlzIHNldCBhZnRlciB0aGUKKwkJY29tbWFuZCBsaW5lIGlzIHNldCB0byB0aGUgZXhwcmVzc2lvbi4KKwkJV2hlbiB0aGUgbnVtYmVyIGlzIHRvbyBiaWcgdGhlIGN1cnNvciBpcyBwdXQgYXQgdGhlIGVuZCBvZiB0aGUKKwkJbGluZS4gIEEgbnVtYmVyIHNtYWxsZXIgdGhhbiBvbmUgaGFzIHVuZGVmaW5lZCByZXN1bHRzLgorCQlSZXR1cm5zIDAgd2hlbiBzdWNjZXNzZnVsLCAxIHdoZW4gbm90IGVkaXRpbmcgdGhlIGNvbW1hbmQKKwkJbGluZS4KKworc2V0bGluZSh7bG51bX0sIHtsaW5lfSkJCQkJCSpzZXRsaW5lKCkqCisJCVNldCBsaW5lIHtsbnVtfSBvZiB0aGUgY3VycmVudCBidWZmZXIgdG8ge2xpbmV9LiAgSWYgdGhpcworCQlzdWNjZWVkcywgMCBpcyByZXR1cm5lZC4gIElmIHRoaXMgZmFpbHMgKG1vc3QgbGlrZWx5IGJlY2F1c2UKKwkJe2xudW19IGlzIGludmFsaWQpIDEgaXMgcmV0dXJuZWQuICBFeGFtcGxlOiA+CisJCQk6Y2FsbCBzZXRsaW5lKDUsIHN0cmZ0aW1lKCIlYyIpKQorPAkJTm90ZTogVGhlICdbIGFuZCAnXSBtYXJrcyBhcmUgbm90IHNldC4KKworCQkJCQkJCSpzZXRyZWcoKSoKK3NldHJlZyh7cmVnbmFtZX0sIHt2YWx1ZX0gWyx7b3B0aW9uc31dKQorCQlTZXQgdGhlIHJlZ2lzdGVyIHtyZWduYW1lfSB0byB7dmFsdWV9LgorCQlJZiB7b3B0aW9uc30gY29udGFpbnMgImEiIG9yIHtyZWduYW1lfSBpcyB1cHBlciBjYXNlLAorCQl0aGVuIHRoZSB2YWx1ZSBpcyBhcHBlbmRlZC4KKwkJe29wdGlvbnN9IGNhbiBhbHNvIGNvbnRhaW5zIGEgcmVnaXN0ZXIgdHlwZSBzcGVjaWZpY2F0aW9uOgorCQkgICAgImMiIG9yICJ2IgkgICAgICB8Y2hhcmFjdGVyd2lzZXwgbW9kZQorCQkgICAgImwiIG9yICJWIgkgICAgICB8bGluZXdpc2V8IG1vZGUKKwkJICAgICJiIiBvciAiPENUUkwtVj4iIHxibG9ja3dpc2UtdmlzdWFsfCBtb2RlCisJCUlmIGEgbnVtYmVyIGltbWVkaWF0ZWx5IGZvbGxvd3MgImIiIG9yICI8Q1RSTC1WPiIgdGhlbiB0aGlzIGlzCisJCXVzZWQgYXMgdGhlIHdpZHRoIG9mIHRoZSBzZWxlY3Rpb24gLSBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkCisJCXRoZW4gdGhlIHdpZHRoIG9mIHRoZSBibG9jayBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCisJCWluIHRoZSBsb25nZXN0IGxpbmUgKGNvdW50aW5nIGEgPFRBQj4gYXMgMSBjaGFyYWN0ZXIpLgorCisJCUlmIHtvcHRpb25zfSBjb250YWlucyBubyByZWdpc3RlciBzZXR0aW5ncywgdGhlbiB0aGUgZGVmYXVsdAorCQlpcyB0byB1c2UgY2hhcmFjdGVyIG1vZGUgdW5sZXNzIHt2YWx1ZX0gZW5kcyBpbiBhIDxOTD4uCisJCVNldHRpbmcgdGhlICc9JyByZWdpc3RlciBpcyBub3QgcG9zc2libGUuCisJCVJldHVybnMgemVybyBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisKKwkJRXhhbXBsZXM6ID4KKwkJCTpjYWxsIHNldHJlZyh2OnJlZ2lzdGVyLCBAKikKKwkJCTpjYWxsIHNldHJlZygnKicsIEAlLCAnYWMnKQorCQkJOmNhbGwgc2V0cmVnKCdhJywgIjFcbjJcbjMiLCAnYjUnKQorCis8CQlUaGlzIGV4YW1wbGUgc2hvd3MgdXNpbmcgdGhlIGZ1bmN0aW9ucyB0byBzYXZlIGFuZCByZXN0b3JlIGEKKwkJcmVnaXN0ZXIuID4KKwkJCTpsZXQgdmFyX2EgPSBnZXRyZWcoJ2EnKQorCQkJOmxldCB2YXJfYW1vZGUgPSBnZXRyZWd0eXBlKCdhJykKKwkJCSAgICAuLi4uCisJCQk6Y2FsbCBzZXRyZWcoJ2EnLCB2YXJfYSwgdmFyX2Ftb2RlKQorCis8CQlZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSB0eXBlIG9mIGEgcmVnaXN0ZXIgYnkgYXBwZW5kaW5nCisJCW5vdGhpbmc6ID4KKwkJCTpjYWxsIHNldHJlZygnYScsICcnLCAnYWwnKQorCitzZXR3aW52YXIoe25yfSwge3Zhcm5hbWV9LCB7dmFsfSkJCQkqc2V0d2ludmFyKCkqCisJCVNldCBvcHRpb24gb3IgbG9jYWwgdmFyaWFibGUge3Zhcm5hbWV9IGluIHdpbmRvdyB7bnJ9IHRvCisJCXt2YWx9LgorCQlUaGlzIGFsc28gd29ya3MgZm9yIGEgZ2xvYmFsIG9yIGxvY2FsIGJ1ZmZlciBvcHRpb24sIGJ1dCBpdAorCQlkb2Vzbid0IHdvcmsgZm9yIGEgZ2xvYmFsIG9yIGxvY2FsIGJ1ZmZlciB2YXJpYWJsZS4KKwkJRm9yIGEgbG9jYWwgYnVmZmVyIG9wdGlvbiB0aGUgZ2xvYmFsIHZhbHVlIGlzIHVuY2hhbmdlZC4KKwkJTm90ZSB0aGF0IHRoZSB2YXJpYWJsZSBuYW1lIHdpdGhvdXQgInc6IiBtdXN0IGJlIHVzZWQuCisJCUV4YW1wbGVzOiA+CisJCQk6Y2FsbCBzZXR3aW52YXIoMSwgIiZsaXN0IiwgMCkKKwkJCTpjYWxsIHNldHdpbnZhcigyLCAibXl2YXIiLCAiZm9vYmFyIikKKzwJCVRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgfHNhbmRib3h8LgorCitzaW1wbGlmeSh7ZmlsZW5hbWV9KQkJCQkJKnNpbXBsaWZ5KCkqCisJCVNpbXBsaWZ5IHRoZSBmaWxlIG5hbWUgYXMgbXVjaCBhcyBwb3NzaWJsZSB3aXRob3V0IGNoYW5naW5nCisJCXRoZSBtZWFuaW5nLiAgU2hvcnRjdXRzIChvbiBNUy1XaW5kb3dzKSBvciBzeW1ib2xpYyBsaW5rcyAob24KKwkJVW5peCkgYXJlIG5vdCByZXNvbHZlZC4gIElmIHRoZSBmaXJzdCBwYXRoIGNvbXBvbmVudCBpbgorCQl7ZmlsZW5hbWV9IGRlc2lnbmF0ZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGlzIHdpbGwgYmUKKwkJdmFsaWQgZm9yIHRoZSByZXN1bHQgYXMgd2VsbC4gIEEgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgaXMKKwkJbm90IHJlbW92ZWQgZWl0aGVyLgorCQlFeGFtcGxlOiA+CisJCQlzaW1wbGlmeSgiLi9kaXIvLi4vLi8vZmlsZS8iKSA9PSAiLi9maWxlLyIKKzwJCU5vdGU6IFRoZSBjb21iaW5hdGlvbiAiZGlyLy4uIiBpcyBvbmx5IHJlbW92ZWQgaWYgImRpciIgaXMKKwkJYSBzZWFyY2hhYmxlIGRpcmVjdG9yeSBvciBkb2VzIG5vdCBleGlzdC4gIE9uIFVuaXgsIGl0IGlzIGFsc28KKwkJcmVtb3ZlZCB3aGVuICJkaXIiIGlzIGEgc3ltYm9saWMgbGluayB3aXRoaW4gdGhlIHNhbWUKKwkJZGlyZWN0b3J5LiAgSW4gb3JkZXIgdG8gcmVzb2x2ZSBhbGwgdGhlIGludm9sdmVkIHN5bWJvbGljCisJCWxpbmtzIGJlZm9yZSBzaW1wbGlmeWluZyB0aGUgcGF0aCBuYW1lLCB1c2UgfHJlc29sdmUoKXwuCisKK3N0cmZ0aW1lKHtmb3JtYXR9IFssIHt0aW1lfV0pCQkJCSpzdHJmdGltZSgpKgorCQlUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB3aGljaCBpcyBhIGZvcm1hdHRlZCBkYXRlIGFuZCB0aW1lLCBhcworCQlzcGVjaWZpZWQgYnkgdGhlIHtmb3JtYXR9IHN0cmluZy4gIFRoZSBnaXZlbiB7dGltZX0gaXMgdXNlZCwKKwkJb3IgdGhlIGN1cnJlbnQgdGltZSBpZiBubyB0aW1lIGlzIGdpdmVuLiAgVGhlIGFjY2VwdGVkCisJCXtmb3JtYXR9IGRlcGVuZHMgb24geW91ciBzeXN0ZW0sIHRodXMgdGhpcyBpcyBub3QgcG9ydGFibGUhCisJCVNlZSB0aGUgbWFudWFsIHBhZ2Ugb2YgdGhlIEMgZnVuY3Rpb24gc3RyZnRpbWUoKSBmb3IgdGhlCisJCWZvcm1hdC4gIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgcmVzdWx0IGlzIDgwIGNoYXJhY3RlcnMuCisJCVNlZSBhbHNvIHxsb2NhbHRpbWUoKXwgYW5kIHxnZXRmdGltZSgpfC4KKwkJVGhlIGxhbmd1YWdlIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlIHw6bGFuZ3VhZ2V8IGNvbW1hbmQuCisJCUV4YW1wbGVzOiA+CisJCSAgOmVjaG8gc3RyZnRpbWUoIiVjIikJCSAgIFN1biBBcHIgMjcgMTE6NDk6MjMgMTk5NworCQkgIDplY2hvIHN0cmZ0aW1lKCIlWSAlYiAlZCAlWCIpCSAgIDE5OTcgQXByIDI3IDExOjUzOjI1CisJCSAgOmVjaG8gc3RyZnRpbWUoIiV5JW0lZCAlVCIpCSAgIDk3MDQyNyAxMTo1Mzo1NQorCQkgIDplY2hvIHN0cmZ0aW1lKCIlSDolTSIpCSAgIDExOjU1CisJCSAgOmVjaG8gc3RyZnRpbWUoIiVjIiwgZ2V0ZnRpbWUoImZpbGUuYyIpKQorCQkJCQkJICAgU2hvdyBtb2QgdGltZSBvZiBmaWxlLmMuCis8CitzdHJpZHgoe2hheXN0YWNrfSwge25lZWRsZX0pCQkJCSpzdHJpZHgoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggZ2l2ZXMgdGhlIGluZGV4IGluIHtoYXlzdGFja30gb2YKKwkJdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIFN0cmluZyB7bmVlZGxlfSBpbiB0aGUgU3RyaW5nCisJCXtoYXlzdGFja30uIFRoZSBzZWFyY2ggaXMgZG9uZSBjYXNlLXNlbnNpdGl2ZS4gRm9yIGFkdmFuY2VkCisJCXNlYXJjaGVzIHVzZSB8bWF0Y2goKXwuCisJCUlmIHRoZSB7bmVlZGxlfSBkb2VzIG5vdCBvY2N1ciBpbiB7aGF5c3RhY2t9IGl0IHJldHVybnMgLTEuCisJCVNlZSBhbHNvIHxzdHJyaWR4KCl8LiBFeGFtcGxlczogPgorCQkgIDplY2hvIHN0cmlkeCgiQW4gRXhhbXBsZSIsICJFeGFtcGxlIikJICAgICAzCisJCSAgOmVjaG8gc3RyaWR4KCJTdGFydGluZyBwb2ludCIsICJTdGFydCIpICAgIDAKKwkJICA6ZWNobyBzdHJpZHgoIlN0YXJ0aW5nIHBvaW50IiwgInN0YXJ0IikgICAtMQorPAorCQkJCQkJCSpzdHJsZW4oKSoKK3N0cmxlbih7ZXhwcn0pCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBsZW5ndGggb2YgdGhlIFN0cmluZworCQl7ZXhwcn0gaW4gYnl0ZXMuICBJZiB5b3Ugd2FudCB0byBjb3VudCB0aGUgbnVtYmVyIG9mCisJCW11bHRpLWJ5dGUgY2hhcmFjdGVycyB1c2Ugc29tZXRoaW5nIGxpa2UgdGhpczogPgorCisJCQk6bGV0IGxlbiA9IHN0cmxlbihzdWJzdGl0dXRlKHN0ciwgIi4iLCAieCIsICJnIikpCisKKzwJCUNvbXBvc2luZyBjaGFyYWN0ZXJzIGFyZSBub3QgY291bnRlZC4KKworc3RycGFydCh7c3JjfSwge3N0YXJ0fVssIHtsZW59XSkJCQkqc3RycGFydCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB3aGljaCBpcyBwYXJ0IG9mIHtzcmN9LCBzdGFydGluZyBmcm9tCisJCWJ5dGUge3N0YXJ0fSwgd2l0aCB0aGUgbGVuZ3RoIHtsZW59LgorCQlXaGVuIG5vbi1leGlzdGluZyBieXRlcyBhcmUgaW5jbHVkZWQsIHRoaXMgZG9lc24ndCByZXN1bHQgaW4KKwkJYW4gZXJyb3IsIHRoZSBieXRlcyBhcmUgc2ltcGx5IG9taXR0ZWQuCisJCUlmIHtsZW59IGlzIG1pc3NpbmcsIHRoZSBjb3B5IGNvbnRpbnVlcyBmcm9tIHtzdGFydH0gdGlsbCB0aGUKKwkJZW5kIG9mIHRoZSB7c3JjfS4gPgorCQkJc3RycGFydCgiYWJjZGVmZyIsIDMsIDIpICAgID09ICJkZSIKKwkJCXN0cnBhcnQoImFiY2RlZmciLCAtMiwgNCkgICA9PSAiYWIiCisJCQlzdHJwYXJ0KCJhYmNkZWZnIiwgNSwgNCkgICAgPT0gImZnIgorCQkJc3RycGFydCgiYWJjZGVmZyIsIDMpICAgICAgID09ICJkZWZnIgorPAkJTm90ZTogVG8gZ2V0IHRoZSBmaXJzdCBjaGFyYWN0ZXIsIHtzdGFydH0gbXVzdCBiZSAwLiAgRm9yCisJCWV4YW1wbGUsIHRvIGdldCB0aHJlZSBieXRlcyB1bmRlciBhbmQgYWZ0ZXIgdGhlIGN1cnNvcjogPgorCQkJc3RycGFydChnZXRsaW5lKGxpbmUoIi4iKSksIGNvbCgiLiIpIC0gMSwgMykKKzwKK3N0cnJpZHgoe2hheXN0YWNrfSwge25lZWRsZX0pCQkJCSpzdHJyaWR4KCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGdpdmVzIHRoZSBpbmRleCBpbiB7aGF5c3RhY2t9IG9mCisJCXRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIFN0cmluZyB7bmVlZGxlfSBpbiB0aGUgU3RyaW5nCisJCXtoYXlzdGFja30uIFRoZSBzZWFyY2ggaXMgZG9uZSBjYXNlLXNlbnNpdGl2ZS4gRm9yIGFkdmFuY2VkCisJCXNlYXJjaGVzIHVzZSB8bWF0Y2goKXwuCisJCUlmIHRoZSB7bmVlZGxlfSBkb2VzIG5vdCBvY2N1ciBpbiB7aGF5c3RhY2t9IGl0IHJldHVybnMgLTEuCisJCVNlZSBhbHNvIHxzdHJpZHgoKXwuIEV4YW1wbGVzOiA+CisJCSAgOmVjaG8gc3RycmlkeCgiYW4gYW5ncnkgYXJtYWRpbGxvIiwgImFuIikJICAgICAzCis8CitzdHJ0cmFucyh7ZXhwcn0pCQkJCQkqc3RydHJhbnMoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZywgd2hpY2ggaXMge2V4cHJ9IHdpdGggYWxsIHVucHJpbnRhYmxlCisJCWNoYXJhY3RlcnMgdHJhbnNsYXRlZCBpbnRvIHByaW50YWJsZSBjaGFyYWN0ZXJzIHwnaXNwcmludCd8LgorCQlMaWtlIHRoZXkgYXJlIHNob3duIGluIGEgd2luZG93LiAgRXhhbXBsZTogPgorCQkJZWNobyBzdHJ0cmFucyhAYSkKKzwJCVRoaXMgZGlzcGxheXMgYSBuZXdsaW5lIGluIHJlZ2lzdGVyIGEgYXMgIl5AIiBpbnN0ZWFkIG9mCisJCXN0YXJ0aW5nIGEgbmV3IGxpbmUuCisKK3N1Ym1hdGNoKHtucn0pCQkJCQkJKnN1Ym1hdGNoKCkqCisJCU9ubHkgZm9yIGFuIGV4cHJlc3Npb24gaW4gYSB8OnN1YnN0aXR1dGV8IGNvbW1hbmQuICBSZXR1cm5zCisJCXRoZSB7bnJ9J3RoIHN1Ym1hdGNoIG9mIHRoZSBtYXRjaGVkIHRleHQuICBXaGVuIHtucn0gaXMgMAorCQl0aGUgd2hvbGUgbWF0Y2hlZCB0ZXh0IGlzIHJldHVybmVkLgorCQlFeGFtcGxlOiA+CisJCQk6cy9cZFwrL1w9c3VibWF0Y2goMCkgKyAxLworPAkJVGhpcyBmaW5kcyB0aGUgZmlyc3QgbnVtYmVyIGluIHRoZSBsaW5lIGFuZCBhZGRzIG9uZSB0byBpdC4KKwkJQSBsaW5lIGJyZWFrIGlzIGluY2x1ZGVkIGFzIGEgbmV3bGluZSBjaGFyYWN0ZXIuCisKK3N1YnN0aXR1dGUoe2V4cHJ9LCB7cGF0fSwge3N1Yn0sIHtmbGFnc30pCQkqc3Vic3RpdHV0ZSgpKgorCQlUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB3aGljaCBpcyBhIGNvcHkgb2Yge2V4cHJ9LCBpbiB3aGljaAorCQl0aGUgZmlyc3QgbWF0Y2ggb2Yge3BhdH0gaXMgcmVwbGFjZWQgd2l0aCB7c3VifS4gIFRoaXMgd29ya3MKKwkJbGlrZSB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kICh3aXRob3V0IGFueSBmbGFncykuICBCdXQgdGhlCisJCW1hdGNoaW5nIHdpdGgge3BhdH0gaXMgYWx3YXlzIGRvbmUgbGlrZSB0aGUgJ21hZ2ljJyBvcHRpb24gaXMKKwkJc2V0IGFuZCAnY3BvcHRpb25zJyBpcyBlbXB0eSAodG8gbWFrZSBzY3JpcHRzIHBvcnRhYmxlKS4KKwkJU2VlIHxzdHJpbmctbWF0Y2h8IGZvciBob3cge3BhdH0gaXMgdXNlZC4KKwkJQW5kIGEgIn4iIGluIHtzdWJ9IGlzIG5vdCByZXBsYWNlZCB3aXRoIHRoZSBwcmV2aW91cyB7c3VifS4KKwkJTm90ZSB0aGF0IHNvbWUgY29kZXMgaW4ge3N1Yn0gaGF2ZSBhIHNwZWNpYWwgbWVhbmluZworCQl8c3ViLXJlcGxhY2Utc3BlY2lhbHwuICBGb3IgZXhhbXBsZSwgdG8gcmVwbGFjZSBzb21ldGhpbmcgd2l0aAorCQkiXG4iICh0d28gY2hhcmFjdGVycyksIHVzZSAiXFxcXG4iIG9yICdcXG4nLgorCQlXaGVuIHtwYXR9IGRvZXMgbm90IG1hdGNoIGluIHtleHByfSwge2V4cHJ9IGlzIHJldHVybmVkCisJCXVubW9kaWZpZWQuCisJCVdoZW4ge2ZsYWdzfSBpcyAiZyIsIGFsbCBtYXRjaGVzIG9mIHtwYXR9IGluIHtleHByfSBhcmUKKwkJcmVwbGFjZWQuICBPdGhlcndpc2Uge2ZsYWdzfSBzaG91bGQgYmUgIiIuCisJCUV4YW1wbGU6ID4KKwkJCTpsZXQgJnBhdGggPSBzdWJzdGl0dXRlKCZwYXRoLCAiLFxcPVteLF0qJCIsICIiLCAiIikKKzwJCVRoaXMgcmVtb3ZlcyB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlICdwYXRoJyBvcHRpb24uID4KKwkJCTplY2hvIHN1YnN0aXR1dGUoInRlc3RpbmciLCAiLioiLCAiXFxVXFwwIiwgIiIpCis8CQlyZXN1bHRzIGluICJURVNUSU5HIi4KKworc3luSUQoe2xpbmV9LCB7Y29sfSwge3RyYW5zfSkJCQkJKnN5bklEKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBzeW50YXggSUQgYXQgdGhlIHBvc2l0aW9uCisJCXtsaW5lfSBhbmQge2NvbH0gaW4gdGhlIGN1cnJlbnQgd2luZG93LgorCQlUaGUgc3ludGF4IElEIGNhbiBiZSB1c2VkIHdpdGggfHN5bklEYXR0cigpfCBhbmQKKwkJfHN5bklEdHJhbnMoKXwgdG8gb2J0YWluIHN5bnRheCBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0LgorCQl7Y29sfSBpcyAxIGZvciB0aGUgbGVmdG1vc3QgY29sdW1uLCB7bGluZX0gaXMgMSBmb3IgdGhlIGZpcnN0CisJCWxpbmUuCisJCVdoZW4ge3RyYW5zfSBpcyBub24temVybywgdHJhbnNwYXJlbnQgaXRlbXMgYXJlIHJlZHVjZWQgdG8gdGhlCisJCWl0ZW0gdGhhdCB0aGV5IHJldmVhbC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gd2FudGluZyB0byBrbm93CisJCXRoZSBlZmZlY3RpdmUgY29sb3IuICBXaGVuIHt0cmFuc30gaXMgemVybywgdGhlIHRyYW5zcGFyZW50CisJCWl0ZW0gaXMgcmV0dXJuZWQuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHdhbnRpbmcgdG8ga25vdyB3aGljaAorCQlzeW50YXggaXRlbSBpcyBlZmZlY3RpdmUgKGUuZy4gaW5zaWRlIHBhcmVucykuCisJCVdhcm5pbmc6IFRoaXMgZnVuY3Rpb24gY2FuIGJlIHZlcnkgc2xvdy4gIEJlc3Qgc3BlZWQgaXMKKwkJb2J0YWluZWQgYnkgZ29pbmcgdGhyb3VnaCB0aGUgZmlsZSBpbiBmb3J3YXJkIGRpcmVjdGlvbi4KKworCQlFeGFtcGxlIChlY2hvZXMgdGhlIG5hbWUgb2YgdGhlIHN5bnRheCBpdGVtIHVuZGVyIHRoZSBjdXJzb3IpOiA+CisJCQk6ZWNobyBzeW5JRGF0dHIoc3luSUQobGluZSgiLiIpLCBjb2woIi4iKSwgMSksICJuYW1lIikKKzwKK3N5bklEYXR0cih7c3luSUR9LCB7d2hhdH0gWywge21vZGV9XSkJCQkqc3luSURhdHRyKCkqCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIHRoZSB7d2hhdH0gYXR0cmlidXRlIG9mCisJCXN5bnRheCBJRCB7c3luSUR9LiAgVGhpcyBjYW4gYmUgdXNlZCB0byBvYnRhaW4gaW5mb3JtYXRpb24KKwkJYWJvdXQgYSBzeW50YXggaXRlbS4KKwkJe21vZGV9IGNhbiBiZSAiZ3VpIiwgImN0ZXJtIiBvciAidGVybSIsIHRvIGdldCB0aGUgYXR0cmlidXRlcworCQlmb3IgdGhhdCBtb2RlLiAgV2hlbiB7bW9kZX0gaXMgb21pdHRlZCwgb3IgYW4gaW52YWxpZCB2YWx1ZSBpcworCQl1c2VkLCB0aGUgYXR0cmlidXRlcyBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgaGlnaGxpZ2h0aW5nIGFyZQorCQl1c2VkIChHVUksIGN0ZXJtIG9yIHRlcm0pLgorCQlVc2Ugc3luSUR0cmFucygpIHRvIGZvbGxvdyBsaW5rZWQgaGlnaGxpZ2h0IGdyb3Vwcy4KKwkJe3doYXR9CQlyZXN1bHQKKwkJIm5hbWUiCQl0aGUgbmFtZSBvZiB0aGUgc3ludGF4IGl0ZW0KKwkJImZnIgkJZm9yZWdyb3VuZCBjb2xvciAoR1VJOiBjb2xvciBuYW1lIHVzZWQgdG8gc2V0CisJCQkJdGhlIGNvbG9yLCBjdGVybTogY29sb3IgbnVtYmVyIGFzIGEgc3RyaW5nLAorCQkJCXRlcm06IGVtcHR5IHN0cmluZykKKwkJImJnIgkJYmFja2dyb3VuZCBjb2xvciAobGlrZSAiZmciKQorCQkiZmcjIgkJbGlrZSAiZmciLCBidXQgZm9yIHRoZSBHVUkgYW5kIHRoZSBHVUkgaXMKKwkJCQlydW5uaW5nIHRoZSBuYW1lIGluICIjUlJHR0JCIiBmb3JtCisJCSJiZyMiCQlsaWtlICJmZyMiIGZvciAiYmciCisJCSJib2xkIgkJIjEiIGlmIGJvbGQKKwkJIml0YWxpYyIJIjEiIGlmIGl0YWxpYworCQkicmV2ZXJzZSIJIjEiIGlmIHJldmVyc2UKKwkJImludmVyc2UiCSIxIiBpZiBpbnZlcnNlICg9IHJldmVyc2UpCisJCSJ1bmRlcmxpbmUiCSIxIiBpZiB1bmRlcmxpbmVkCisKKwkJRXhhbXBsZSAoZWNob2VzIHRoZSBjb2xvciBvZiB0aGUgc3ludGF4IGl0ZW0gdW5kZXIgdGhlCisJCWN1cnNvcik6ID4KKwk6ZWNobyBzeW5JRGF0dHIoc3luSUR0cmFucyhzeW5JRChsaW5lKCIuIiksIGNvbCgiLiIpLCAxKSksICJmZyIpCis8CitzeW5JRHRyYW5zKHtzeW5JRH0pCQkJCQkqc3luSUR0cmFucygpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgdHJhbnNsYXRlZCBzeW50YXggSUQgb2YKKwkJe3N5bklEfS4gIFRoaXMgaXMgdGhlIHN5bnRheCBncm91cCBJRCBvZiB3aGF0IGlzIGJlaW5nIHVzZWQgdG8KKwkJaGlnaGxpZ2h0IHRoZSBjaGFyYWN0ZXIuICBIaWdobGlnaHQgbGlua3MgZ2l2ZW4gd2l0aAorCQkiOmhpZ2hsaWdodCBsaW5rIiBhcmUgZm9sbG93ZWQuCisKKwkJCQkJCQkqc3lzdGVtKCkqCitzeXN0ZW0oe2V4cHJ9KQlHZXQgdGhlIG91dHB1dCBvZiB0aGUgc2hlbGwgY29tbWFuZCB7ZXhwcn0uICBOb3RlOiBuZXdsaW5lcworCQlpbiB7ZXhwcn0gbWF5IGNhdXNlIHRoZSBjb21tYW5kIHRvIGZhaWwuICBUaGUgY2hhcmFjdGVycyBpbgorCQknc2hlbGxxdW90ZScgYW5kICdzaGVsbHhxdW90ZScgbWF5IGFsc28gY2F1c2UgdHJvdWJsZS4KKwkJVGhpcyBpcyBub3QgdG8gYmUgdXNlZCBmb3IgaW50ZXJhY3RpdmUgY29tbWFuZHMuCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcuICBFeGFtcGxlOiA+CisKKwkJCTpsZXQgZmlsZXMgPSBzeXN0ZW0oImxzIikKKworPAkJVG8gbWFrZSB0aGUgcmVzdWx0IG1vcmUgc3lzdGVtLWluZGVwZW5kZW50LCB0aGUgc2hlbGwgb3V0cHV0CisJCWlzIGZpbHRlcmVkIHRvIHJlcGxhY2UgPENSPiB3aXRoIDxOTD4gZm9yIE1hY2ludG9zaCwgYW5kCisJCTxDUj48Tkw+IHdpdGggPE5MPiBmb3IgRE9TLWxpa2Ugc3lzdGVtcy4KKwkJVGhlIGNvbW1hbmQgZXhlY3V0ZWQgaXMgY29uc3RydWN0ZWQgdXNpbmcgc2V2ZXJhbCBvcHRpb25zOgorCSdzaGVsbCcgJ3NoZWxsY21kZmxhZycgJ3NoZWxseHF1b3RlJyB7ZXhwcn0gJ3NoZWxscmVkaXInIHt0bXB9ICdzaGVsbHhxdW90ZScKKwkJKHt0bXB9IGlzIGFuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGUgbmFtZSkuCisJCUZvciBVbml4IGFuZCBPUy8yIGJyYWNlcyBhcmUgcHV0IGFyb3VuZCB7ZXhwcn0gdG8gYWxsb3cgZm9yCisJCWNvbmNhdGVuYXRlZCBjb21tYW5kcy4KKworCQlUaGUgcmVzdWx0aW5nIGVycm9yIGNvZGUgY2FuIGJlIGZvdW5kIGluIHx2OnNoZWxsX2Vycm9yfC4KKwkJVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaW4gfHJlc3RyaWN0ZWQtbW9kZXwuCisJCVVubGlrZSAiOiFjbWQiIHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBjaGVjayBmb3IgY2hhbmdlZCBmaWxlcy4KKwkJVXNlIHw6Y2hlY2t0aW1lfCB0byBmb3JjZSBhIGNoZWNrLgorCit0ZW1wbmFtZSgpCQkJCQkqdGVtcG5hbWUoKSogKnRlbXAtZmlsZS1uYW1lKgorCQlUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB3aGljaCBpcyB0aGUgbmFtZSBvZiBhIGZpbGUgdGhhdAorCQlkb2Vzbid0IGV4aXN0LiAgSXQgY2FuIGJlIHVzZWQgZm9yIGEgdGVtcG9yYXJ5IGZpbGUuICBUaGUgbmFtZQorCQlpcyBkaWZmZXJlbnQgZm9yIGF0IGxlYXN0IDI2IGNvbnNlY3V0aXZlIGNhbGxzLiAgRXhhbXBsZTogPgorCQkJOmxldCB0bXBmaWxlID0gdGVtcG5hbWUoKQorCQkJOmV4ZSAicmVkaXIgPiAiIC4gdG1wZmlsZQorPAkJRm9yIFVuaXgsIHRoZSBmaWxlIHdpbGwgYmUgaW4gYSBwcml2YXRlIGRpcmVjdG9yeSAob25seQorCQlhY2Nlc3NpYmxlIGJ5IHRoZSBjdXJyZW50IHVzZXIpIHRvIGF2b2lkIHNlY3VyaXR5IHByb2JsZW1zCisJCShlLmcuLCBhIHN5bWxpbmsgYXR0YWNrIG9yIG90aGVyIHBlb3BsZSByZWFkaW5nIHlvdXIgZmlsZSkuCisJCVdoZW4gVmltIGV4aXRzIHRoZSBkaXJlY3RvcnkgYW5kIGFsbCBmaWxlcyBpbiBpdCBhcmUgZGVsZXRlZC4KKwkJRm9yIE1TLVdpbmRvd3MgZm9yd2FyZCBzbGFzaGVzIGFyZSB1c2VkIHdoZW4gdGhlICdzaGVsbHNsYXNoJworCQlvcHRpb24gaXMgc2V0IG9yIHdoZW4gJ3NoZWxsY21kZmxhZycgc3RhcnRzIHdpdGggJy0nLgorCit0b2xvd2VyKHtleHByfSkJCQkJCQkqdG9sb3dlcigpKgorCQlUaGUgcmVzdWx0IGlzIGEgY29weSBvZiB0aGUgU3RyaW5nIGdpdmVuLCB3aXRoIGFsbCB1cHBlcmNhc2UKKwkJY2hhcmFjdGVycyB0dXJuZWQgaW50byBsb3dlcmNhc2UgKGp1c3QgbGlrZSBhcHBseWluZyB8Z3V8IHRvCisJCXRoZSBzdHJpbmcpLgorCit0b3VwcGVyKHtleHByfSkJCQkJCQkqdG91cHBlcigpKgorCQlUaGUgcmVzdWx0IGlzIGEgY29weSBvZiB0aGUgU3RyaW5nIGdpdmVuLCB3aXRoIGFsbCBsb3dlcmNhc2UKKwkJY2hhcmFjdGVycyB0dXJuZWQgaW50byB1cHBlcmNhc2UgKGp1c3QgbGlrZSBhcHBseWluZyB8Z1V8IHRvCisJCXRoZSBzdHJpbmcpLgorCit0eXBlKHtleHByfSkJCQkJCQkqdHlwZSgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyOgorCQkJMCBpZiB7ZXhwcn0gaGFzIHRoZSB0eXBlIE51bWJlcgorCQkJMSBpZiB7ZXhwcn0gaGFzIHRoZSB0eXBlIFN0cmluZworCit2aXJ0Y29sKHtleHByfSkJCQkJCQkqdmlydGNvbCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgc2NyZWVuIGNvbHVtbiBvZiB0aGUgZmlsZQorCQlwb3NpdGlvbiBnaXZlbiB3aXRoIHtleHByfS4gIFRoYXQgaXMsIHRoZSBsYXN0IHNjcmVlbiBwb3NpdGlvbgorCQlvY2N1cGllZCBieSB0aGUgY2hhcmFjdGVyIGF0IHRoYXQgcG9zaXRpb24sIHdoZW4gdGhlIHNjcmVlbgorCQl3b3VsZCBiZSBvZiB1bmxpbWl0ZWQgd2lkdGguICBXaGVuIHRoZXJlIGlzIGEgPFRhYj4gYXQgdGhlCisJCXBvc2l0aW9uLCB0aGUgcmV0dXJuZWQgTnVtYmVyIHdpbGwgYmUgdGhlIGNvbHVtbiBhdCB0aGUgZW5kIG9mCisJCXRoZSA8VGFiPi4gIEZvciBleGFtcGxlLCBmb3IgYSA8VGFiPiBpbiBjb2x1bW4gMSwgd2l0aCAndHMnCisJCXNldCB0byA4LCBpdCByZXR1cm5zIDguCisJCUZvciB0aGUgYnl0ZSBwb3NpdGlvbiB1c2UgfGNvbCgpfC4KKwkJV2hlbiBWaXJ0dWFsIGVkaXRpbmcgaXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IG1vZGUsIGEgcG9zaXRpb24KKwkJYmV5b25kIHRoZSBlbmQgb2YgdGhlIGxpbmUgY2FuIGJlIHJldHVybmVkLiB8J3ZpcnR1YWxlZGl0J3wKKwkJVGhlIGFjY2VwdGVkIHBvc2l0aW9ucyBhcmU6CisJCSAgICAuCSAgICB0aGUgY3Vyc29yIHBvc2l0aW9uCisJCSAgICAkCSAgICB0aGUgZW5kIG9mIHRoZSBjdXJzb3IgbGluZSAodGhlIHJlc3VsdCBpcyB0aGUKKwkJCSAgICBudW1iZXIgb2YgZGlzcGxheWVkIGNoYXJhY3RlcnMgaW4gdGhlIGN1cnNvciBsaW5lCisJCQkgICAgcGx1cyBvbmUpCisJCSAgICAneAkgICAgcG9zaXRpb24gb2YgbWFyayB4IChpZiB0aGUgbWFyayBpcyBub3Qgc2V0LCAwIGlzCisJCQkgICAgcmV0dXJuZWQpCisJCU5vdGUgdGhhdCBvbmx5IG1hcmtzIGluIHRoZSBjdXJyZW50IGZpbGUgY2FuIGJlIHVzZWQuCisJCUV4YW1wbGVzOiA+CisgIHZpcnRjb2woIi4iKQkgICB3aXRoIHRleHQgImZvb15MYmFyIiwgd2l0aCBjdXJzb3Igb24gdGhlICJeTCIsIHJldHVybnMgNQorICB2aXJ0Y29sKCIkIikJICAgd2l0aCB0ZXh0ICJmb29eTGJhciIsIHJldHVybnMgOQorICB2aXJ0Y29sKCIndCIpICAgIHdpdGggdGV4dCAiICAgIHRoZXJlIiwgd2l0aCAndCBhdCAnaCcsIHJldHVybnMgNgorPAkJVGhlIGZpcnN0IGNvbHVtbiBpcyAxLiAgMCBpcyByZXR1cm5lZCBmb3IgYW4gZXJyb3IuCisKK3Zpc3VhbG1vZGUoW2V4cHJdKQkJCQkJCSp2aXN1YWxtb2RlKCkqCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGRlc2NyaWJlcyB0aGUgbGFzdCBWaXN1YWwgbW9kZQorCQl1c2VkLiAgSW5pdGlhbGx5IGl0IHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLCBidXQgb25jZSBWaXN1YWwKKwkJbW9kZSBoYXMgYmVlbiB1c2VkLCBpdCByZXR1cm5zICJ2IiwgIlYiLCBvciAiPENUUkwtVj4iIChhCisJCXNpbmdsZSBDVFJMLVYgY2hhcmFjdGVyKSBmb3IgY2hhcmFjdGVyLXdpc2UsIGxpbmUtd2lzZSwgb3IKKwkJYmxvY2std2lzZSBWaXN1YWwgbW9kZSByZXNwZWN0aXZlbHkuCisJCUV4YW1wbGU6ID4KKwkJCTpleGUgIm5vcm1hbCAiIC4gdmlzdWFsbW9kZSgpCis8CQlUaGlzIGVudGVycyB0aGUgc2FtZSBWaXN1YWwgbW9kZSBhcyBiZWZvcmUuICBJdCBpcyBhbHNvIHVzZWZ1bAorCQlpbiBzY3JpcHRzIGlmIHlvdSB3aXNoIHRvIGFjdCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlCisJCVZpc3VhbCBtb2RlIHRoYXQgd2FzIHVzZWQuCisKKwkJSWYgYW4gZXhwcmVzc2lvbiBpcyBzdXBwbGllZCB0aGF0IHJlc3VsdHMgaW4gYSBub24temVybyBudW1iZXIKKwkJb3IgYSBub24tZW1wdHkgc3RyaW5nLCB0aGVuIHRoZSBWaXN1YWwgbW9kZSB3aWxsIGJlIGNsZWFyZWQKKwkJYW5kIHRoZSBvbGQgdmFsdWUgaXMgcmV0dXJuZWQuICBOb3RlIHRoYXQgIiAiIGFuZCAiMCIgYXJlIGFsc28KKwkJbm9uLWVtcHR5IHN0cmluZ3MsIHRodXMgY2F1c2UgdGhlIG1vZGUgdG8gYmUgY2xlYXJlZC4KKworCQkJCQkJCSp3aW5idWZucigpKgord2luYnVmbnIoe25yfSkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiB0aGUgYnVmZmVyCisJCWFzc29jaWF0ZWQgd2l0aCB3aW5kb3cge25yfS4gV2hlbiB7bnJ9IGlzIHplcm8sIHRoZSBudW1iZXIgb2YKKwkJdGhlIGJ1ZmZlciBpbiB0aGUgY3VycmVudCB3aW5kb3cgaXMgcmV0dXJuZWQuICBXaGVuIHdpbmRvdworCQl7bnJ9IGRvZXNuJ3QgZXhpc3QsIC0xIGlzIHJldHVybmVkLgorCQlFeGFtcGxlOiA+CisgIDplY2hvICJUaGUgZmlsZSBpbiB0aGUgY3VycmVudCB3aW5kb3cgaXMgIiAuIGJ1Zm5hbWUod2luYnVmbnIoMCkpCis8CisJCQkJCQkJKndpbmNvbCgpKgord2luY29sKCkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIHZpcnR1YWwgY29sdW1uIG9mIHRoZQorCQljdXJzb3IgaW4gdGhlIHdpbmRvdy4gIFRoaXMgaXMgY291bnRpbmcgc2NyZWVuIGNlbGxzIGZyb20gdGhlCisJCWxlZnQgc2lkZSBvZiB0aGUgd2luZG93LiAgVGhlIGxlZnRtb3N0IGNvbHVtbiBpcyBvbmUuCisKK3dpbmhlaWdodCh7bnJ9KQkJCQkJCSp3aW5oZWlnaHQoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIGhlaWdodCBvZiB3aW5kb3cge25yfS4KKwkJV2hlbiB7bnJ9IGlzIHplcm8sIHRoZSBoZWlnaHQgb2YgdGhlIGN1cnJlbnQgd2luZG93IGlzCisJCXJldHVybmVkLiAgV2hlbiB3aW5kb3cge25yfSBkb2Vzbid0IGV4aXN0LCAtMSBpcyByZXR1cm5lZC4KKwkJQW4gZXhpc3Rpbmcgd2luZG93IGFsd2F5cyBoYXMgYSBoZWlnaHQgb2YgemVybyBvciBtb3JlLgorCQlFeGFtcGxlczogPgorICA6ZWNobyAiVGhlIGN1cnJlbnQgd2luZG93IGhhcyAiIC4gd2luaGVpZ2h0KDApIC4gIiBsaW5lcy4iCis8CisJCQkJCQkJKndpbmxpbmUoKSoKK3dpbmxpbmUoKQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgc2NyZWVuIGxpbmUgb2YgdGhlIGN1cnNvcgorCQlpbiB0aGUgd2luZG93LiAgVGhpcyBpcyBjb3VudGluZyBzY3JlZW4gbGluZXMgZnJvbSB0aGUgdG9wIG9mCisJCXRoZSB3aW5kb3cuICBUaGUgZmlyc3QgbGluZSBpcyBvbmUuCisKKwkJCQkJCQkqd2lubnIoKSoKK3dpbm5yKCkJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQKKwkJd2luZG93LiAgVGhlIHRvcCB3aW5kb3cgaGFzIG51bWJlciAxLiAgVGhlIG51bWJlciBjYW4gYmUgdXNlZAorCQl3aXRoIHxDVFJMLVdfd3wgYW5kICI6d2luY21kIHciIHw6d2luY21kfC4KKworCQkJCQkJCSp3aW5yZXN0Y21kKCkqCit3aW5yZXN0Y21kKCkJUmV0dXJucyBhIHNlcXVlbmNlIG9mIHw6cmVzaXplfCBjb21tYW5kcyB0aGF0IHNob3VsZCByZXN0b3JlCisJCXRoZSBjdXJyZW50IHdpbmRvdyBzaXplcy4gIE9ubHkgd29ya3MgcHJvcGVybHkgd2hlbiBubyB3aW5kb3dzCisJCWFyZSBvcGVuZWQgb3IgY2xvc2VkIGFuZCB0aGUgY3VycmVudCB3aW5kb3cgaXMgdW5jaGFuZ2VkLgorCQlFeGFtcGxlOiA+CisJCQk6bGV0IGNtZCA9IHdpbnJlc3RjbWQoKQorCQkJOmNhbGwgTWVzc1dpdGhXaW5kb3dTaXplcygpCisJCQk6ZXhlIGNtZAorCit3aW53aWR0aCh7bnJ9KQkJCQkJCSp3aW53aWR0aCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgd2lkdGggb2Ygd2luZG93IHtucn0uCisJCVdoZW4ge25yfSBpcyB6ZXJvLCB0aGUgd2lkdGggb2YgdGhlIGN1cnJlbnQgd2luZG93IGlzCisJCXJldHVybmVkLiAgV2hlbiB3aW5kb3cge25yfSBkb2Vzbid0IGV4aXN0LCAtMSBpcyByZXR1cm5lZC4KKwkJQW4gZXhpc3Rpbmcgd2luZG93IGFsd2F5cyBoYXMgYSB3aWR0aCBvZiB6ZXJvIG9yIG1vcmUuCisJCUV4YW1wbGVzOiA+CisgIDplY2hvICJUaGUgY3VycmVudCB3aW5kb3cgaGFzICIgLiB3aW53aWR0aCgwKSAuICIgY29sdW1ucy4iCisgIDppZiB3aW53aWR0aCgwKSA8PSA1MAorICA6ICBleGUgIm5vcm1hbCA1MFw8Qy1XPnwiCisgIDplbmRpZgorPAorCisJCQkJCQkJKmZlYXR1cmUtbGlzdCoKK1RoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBmZWF0dXJlczoKKzEuICBGZWF0dXJlcyB0aGF0IGFyZSBvbmx5IHN1cHBvcnRlZCB3aGVuIHRoZXkgaGF2ZSBiZWVuIGVuYWJsZWQgd2hlbiBWaW0KKyAgICB3YXMgY29tcGlsZWQgfCtmZWF0dXJlLWxpc3R8LiAgRXhhbXBsZTogPgorCTppZiBoYXMoImNpbmRlbnQiKQorMi4gIEZlYXR1cmVzIHRoYXQgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gY2VydGFpbiBjb25kaXRpb25zIGhhdmUgYmVlbiBtZXQuCisgICAgRXhhbXBsZTogPgorCTppZiBoYXMoImd1aV9ydW5uaW5nIikKKzwJCQkJCQkJKmhhcy1wYXRjaCoKKzMuICBJbmNsdWRlZCBwYXRjaGVzLiAgRmlyc3QgY2hlY2sgfHY6dmVyc2lvbnwgZm9yIHRoZSB2ZXJzaW9uIG9mIFZpbS4KKyAgICBUaGVuIHRoZSAicGF0Y2gxMjMiIGZlYXR1cmUgbWVhbnMgdGhhdCBwYXRjaCAxMjMgaGFzIGJlZW4gaW5jbHVkZWQgZm9yCisgICAgdGhpcyB2ZXJzaW9uLiAgRXhhbXBsZSAoY2hlY2tpbmcgdmVyc2lvbiA2LjIuMTQ4IG9yIGxhdGVyKTogPgorCTppZiB2OnZlcnNpb24gPiA2MDIgfHwgdjp2ZXJzaW9uID09IDYwMiAmJiBoYXMoInBhdGNoMTQ4IikKKworYWxsX2J1aWx0aW5fdGVybXMJQ29tcGlsZWQgd2l0aCBhbGwgYnVpbHRpbiB0ZXJtaW5hbHMgZW5hYmxlZC4KK2FtaWdhCQkJQW1pZ2EgdmVyc2lvbiBvZiBWaW0uCithcmFiaWMJCQlDb21waWxlZCB3aXRoIEFyYWJpYyBzdXBwb3J0IHxBcmFiaWN8LgorYXJwCQkJQ29tcGlsZWQgd2l0aCBBUlAgc3VwcG9ydCAoQW1pZ2EpLgorYXV0b2NtZAkJCUNvbXBpbGVkIHdpdGggYXV0b2NvbW1hbmRzIHN1cHBvcnQuCitiYWxsb29uX2V2YWwJCUNvbXBpbGVkIHdpdGggfGJhbGxvb24tZXZhbHwgc3VwcG9ydC4KK2Jlb3MJCQlCZU9TIHZlcnNpb24gb2YgVmltLgorYnJvd3NlCQkJQ29tcGlsZWQgd2l0aCB8OmJyb3dzZXwgc3VwcG9ydCwgYW5kIGJyb3dzZSgpIHdpbGwKKwkJCXdvcmsuCitidWlsdGluX3Rlcm1zCQlDb21waWxlZCB3aXRoIHNvbWUgYnVpbHRpbiB0ZXJtaW5hbHMuCitieXRlX29mZnNldAkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciAnbycgaW4gJ3N0YXR1c2xpbmUnCitjaW5kZW50CQkJQ29tcGlsZWQgd2l0aCAnY2luZGVudCcgc3VwcG9ydC4KK2NsaWVudHNlcnZlcgkJQ29tcGlsZWQgd2l0aCByZW1vdGUgaW52b2NhdGlvbiBzdXBwb3J0IHxjbGllbnRzZXJ2ZXJ8LgorY2xpcGJvYXJkCQlDb21waWxlZCB3aXRoICdjbGlwYm9hcmQnIHN1cHBvcnQuCitjbWRsaW5lX2NvbXBsCQlDb21waWxlZCB3aXRoIHxjbWRsaW5lLWNvbXBsZXRpb258IHN1cHBvcnQuCitjbWRsaW5lX2hpc3QJCUNvbXBpbGVkIHdpdGggfGNtZGxpbmUtaGlzdG9yeXwgc3VwcG9ydC4KK2NtZGxpbmVfaW5mbwkJQ29tcGlsZWQgd2l0aCAnc2hvd2NtZCcgYW5kICdydWxlcicgc3VwcG9ydC4KK2NvbW1lbnRzCQlDb21waWxlZCB3aXRoIHwnY29tbWVudHMnfCBzdXBwb3J0LgorY3J5cHR2CQkJQ29tcGlsZWQgd2l0aCBlbmNyeXB0aW9uIHN1cHBvcnQgfGVuY3J5cHRpb258LgorY3Njb3BlCQkJQ29tcGlsZWQgd2l0aCB8Y3Njb3BlfCBzdXBwb3J0LgorY29tcGF0aWJsZQkJQ29tcGlsZWQgdG8gYmUgdmVyeSBWaSBjb21wYXRpYmxlLgorZGVidWcJCQlDb21waWxlZCB3aXRoICJERUJVRyIgZGVmaW5lZC4KK2RpYWxvZ19jb24JCUNvbXBpbGVkIHdpdGggY29uc29sZSBkaWFsb2cgc3VwcG9ydC4KK2RpYWxvZ19ndWkJCUNvbXBpbGVkIHdpdGggR1VJIGRpYWxvZyBzdXBwb3J0LgorZGlmZgkJCUNvbXBpbGVkIHdpdGggfHZpbWRpZmZ8IGFuZCAnZGlmZicgc3VwcG9ydC4KK2RpZ3JhcGhzCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIGRpZ3JhcGhzLgorZG5kCQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB0aGUgIn4gcmVnaXN0ZXIgfHF1b3RlX358LgorZG9zMzIJCQkzMiBiaXRzIERPUyAoREpHUFApIHZlcnNpb24gb2YgVmltLgorZG9zMTYJCQkxNiBiaXRzIERPUyB2ZXJzaW9uIG9mIFZpbS4KK2ViY2RpYwkJCUNvbXBpbGVkIG9uIGEgbWFjaGluZSB3aXRoIGViY2RpYyBjaGFyYWN0ZXIgc2V0LgorZW1hY3NfdGFncwkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBFbWFjcyB0YWdzLgorZXZhbAkJCUNvbXBpbGVkIHdpdGggZXhwcmVzc2lvbiBldmFsdWF0aW9uIHN1cHBvcnQuICBBbHdheXMKKwkJCXRydWUsIG9mIGNvdXJzZSEKK2V4X2V4dHJhCQlDb21waWxlZCB3aXRoIGV4dHJhIEV4IGNvbW1hbmRzIHwrZXhfZXh0cmF8LgorZXh0cmFfc2VhcmNoCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHwnaW5jc2VhcmNoJ3wgYW5kCisJCQl8J2hsc2VhcmNoJ3wKK2ZhcnNpCQkJQ29tcGlsZWQgd2l0aCBGYXJzaSBzdXBwb3J0IHxmYXJzaXwuCitmaWxlX2luX3BhdGgJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgfGdmfCBhbmQgfDxjZmlsZT58CitmaW5kX2luX3BhdGgJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgaW5jbHVkZSBmaWxlIHNlYXJjaGVzCisJCQl8K2ZpbmRfaW5fcGF0aHwuCitmbmFtZV9jYXNlCQlDYXNlIGluIGZpbGUgbmFtZXMgbWF0dGVycyAoZm9yIEFtaWdhLCBNUy1ET1MsIGFuZAorCQkJV2luZG93cyB0aGlzIGlzIG5vdCBwcmVzZW50KS4KK2ZvbGRpbmcJCQlDb21waWxlZCB3aXRoIHxmb2xkaW5nfCBzdXBwb3J0LgorZm9vdGVyCQkJQ29tcGlsZWQgd2l0aCBHVUkgZm9vdGVyIHN1cHBvcnQuIHxndWktZm9vdGVyfAorZm9yawkJCUNvbXBpbGVkIHRvIHVzZSBmb3JrKCkvZXhlYygpIGluc3RlYWQgb2Ygc3lzdGVtKCkuCitnZXR0ZXh0CQkJQ29tcGlsZWQgd2l0aCBtZXNzYWdlIHRyYW5zbGF0aW9uIHxtdWx0aS1sYW5nfAorZ3VpCQkJQ29tcGlsZWQgd2l0aCBHVUkgZW5hYmxlZC4KK2d1aV9hdGhlbmEJCUNvbXBpbGVkIHdpdGggQXRoZW5hIEdVSS4KK2d1aV9iZW9zCQlDb21waWxlZCB3aXRoIEJlT3MgR1VJLgorZ3VpX2d0awkJCUNvbXBpbGVkIHdpdGggR1RLKyBHVUkgKGFueSB2ZXJzaW9uKS4KK2d1aV9ndGsyCQlDb21waWxlZCB3aXRoIEdUSysgMiBHVUkgKGd1aV9ndGsgaXMgYWxzbyBkZWZpbmVkKS4KK2d1aV9tYWMJCQlDb21waWxlZCB3aXRoIE1hY2ludG9zaCBHVUkuCitndWlfbW90aWYJCUNvbXBpbGVkIHdpdGggTW90aWYgR1VJLgorZ3VpX3Bob3RvbgkJQ29tcGlsZWQgd2l0aCBQaG90b24gR1VJLgorZ3VpX3dpbjMyCQlDb21waWxlZCB3aXRoIE1TIFdpbmRvd3MgV2luMzIgR1VJLgorZ3VpX3dpbjMycwkJaWRlbSwgYW5kIFdpbjMycyBzeXN0ZW0gYmVpbmcgdXNlZCAoV2luZG93cyAzLjEpCitndWlfcnVubmluZwkJVmltIGlzIHJ1bm5pbmcgaW4gdGhlIEdVSSwgb3IgaXQgd2lsbCBzdGFydCBzb29uLgoraGFuZ3VsX2lucHV0CQlDb21waWxlZCB3aXRoIEhhbmd1bCBpbnB1dCBzdXBwb3J0LiB8aGFuZ3VsfAoraWNvbnYJCQlDYW4gdXNlIGljb252KCkgZm9yIGNvbnZlcnNpb24uCitpbnNlcnRfZXhwYW5kCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIENUUkwtWCBleHBhbnNpb24gY29tbWFuZHMgaW4KKwkJCUluc2VydCBtb2RlLgoranVtcGxpc3QJCUNvbXBpbGVkIHdpdGggfGp1bXBsaXN0fCBzdXBwb3J0Lgora2V5bWFwCQkJQ29tcGlsZWQgd2l0aCAna2V5bWFwJyBzdXBwb3J0LgorbGFuZ21hcAkJCUNvbXBpbGVkIHdpdGggJ2xhbmdtYXAnIHN1cHBvcnQuCitsaWJjYWxsCQkJQ29tcGlsZWQgd2l0aCB8bGliY2FsbCgpfCBzdXBwb3J0LgorbGluZWJyZWFrCQlDb21waWxlZCB3aXRoICdsaW5lYnJlYWsnLCAnYnJlYWthdCcgYW5kICdzaG93YnJlYWsnCisJCQlzdXBwb3J0LgorbGlzcGluZGVudAkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBsaXNwIGluZGVudGluZy4KK2xpc3RjbWRzCQlDb21waWxlZCB3aXRoIGNvbW1hbmRzIGZvciB0aGUgYnVmZmVyIGxpc3QgfDpmaWxlc3wKKwkJCWFuZCB0aGUgYXJndW1lbnQgbGlzdCB8YXJnbGlzdHwuCitsb2NhbG1hcAkJQ29tcGlsZWQgd2l0aCBsb2NhbCBtYXBwaW5ncyBhbmQgYWJici4gfDptYXAtbG9jYWx8CittYWMJCQlNYWNpbnRvc2ggdmVyc2lvbiBvZiBWaW0uCittYWN1bml4CQkJTWFjaW50b3NoIHZlcnNpb24gb2YgVmltLCB1c2luZyBVbml4IGZpbGVzIChPUy1YKS4KK21lbnUJCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHw6bWVudXwuCitta3Nlc3Npb24JCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgfDpta3Nlc3Npb258LgorbW9kaWZ5X2ZuYW1lCQlDb21waWxlZCB3aXRoIGZpbGUgbmFtZSBtb2RpZmllcnMuIHxmaWxlbmFtZS1tb2RpZmllcnN8Cittb3VzZQkJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBtb3VzZS4KK21vdXNlc2hhcGUJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgJ21vdXNlc2hhcGUnLgorbW91c2VfZGVjCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIERlYyB0ZXJtaW5hbCBtb3VzZS4KK21vdXNlX2dwbQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBncG0gKExpbnV4IGNvbnNvbGUgbW91c2UpCittb3VzZV9uZXR0ZXJtCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIG5ldHRlcm0gbW91c2UuCittb3VzZV9wdGVybQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBxbnggcHRlcm0gbW91c2UuCittb3VzZV94dGVybQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB4dGVybSBtb3VzZS4KK211bHRpX2J5dGUJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgZWRpdGluZyBLb3JlYW4gZXQgYWwuCittdWx0aV9ieXRlX2ltZQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBJTUUgaW5wdXQgbWV0aG9kLgorbXVsdGlfbGFuZwkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBtdWx0aXBsZSBsYW5ndWFnZXMuCituZXRiZWFuc19pbnRnCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHxuZXRiZWFuc3wuCitvbGUJCQlDb21waWxlZCB3aXRoIE9MRSBhdXRvbWF0aW9uIHN1cHBvcnQgZm9yIFdpbjMyLgorb3MyCQkJT1MvMiB2ZXJzaW9uIG9mIFZpbS4KK29zZmlsZXR5cGUJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3Igb3NmaWxldHlwZXMgfCtvc2ZpbGV0eXBlfAorcGF0aF9leHRyYQkJQ29tcGlsZWQgd2l0aCB1cC9kb3dud2FyZHMgc2VhcmNoIGluICdwYXRoJyBhbmQgJ3RhZ3MnCitwZXJsCQkJQ29tcGlsZWQgd2l0aCBQZXJsIGludGVyZmFjZS4KK3Bvc3RzY3JpcHQJCUNvbXBpbGVkIHdpdGggUG9zdFNjcmlwdCBmaWxlIHByaW50aW5nLgorcHJpbnRlcgkJCUNvbXBpbGVkIHdpdGggfDpoYXJkY29weXwgc3VwcG9ydC4KK3B5dGhvbgkJCUNvbXBpbGVkIHdpdGggUHl0aG9uIGludGVyZmFjZS4KK3FueAkJCVFOWCB2ZXJzaW9uIG9mIFZpbS4KK3F1aWNrZml4CQlDb21waWxlZCB3aXRoIHxxdWlja2ZpeHwgc3VwcG9ydC4KK3JpZ2h0bGVmdAkJQ29tcGlsZWQgd2l0aCAncmlnaHRsZWZ0JyBzdXBwb3J0LgorcnVieQkJCUNvbXBpbGVkIHdpdGggUnVieSBpbnRlcmZhY2UgfHJ1Ynl8Lgorc2Nyb2xsYmluZAkJQ29tcGlsZWQgd2l0aCAnc2Nyb2xsYmluZCcgc3VwcG9ydC4KK3Nob3djbWQJCQlDb21waWxlZCB3aXRoICdzaG93Y21kJyBzdXBwb3J0Lgorc2lnbnMJCQlDb21waWxlZCB3aXRoIHw6c2lnbnwgc3VwcG9ydC4KK3NtYXJ0aW5kZW50CQlDb21waWxlZCB3aXRoICdzbWFydGluZGVudCcgc3VwcG9ydC4KK3NuaWZmCQkJQ29tcGlsZWQgd2l0aCBTbmlGRiBpbnRlcmZhY2Ugc3VwcG9ydC4KK3N0YXR1c2xpbmUJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgJ3N0YXR1c2xpbmUnLCAncnVsZXJmb3JtYXQnCisJCQlhbmQgc3BlY2lhbCBmb3JtYXRzIG9mICd0aXRsZXN0cmluZycgYW5kICdpY29uc3RyaW5nJy4KK3N1bl93b3Jrc2hvcAkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBTdW4gfHdvcmtzaG9wfC4KK3N5bnRheAkJCUNvbXBpbGVkIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBzdXBwb3J0Lgorc3ludGF4X2l0ZW1zCQlUaGVyZSBhcmUgYWN0aXZlIHN5bnRheCBoaWdobGlnaHRpbmcgaXRlbXMgZm9yIHRoZQorCQkJY3VycmVudCBidWZmZXIuCitzeXN0ZW0JCQlDb21waWxlZCB0byB1c2Ugc3lzdGVtKCkgaW5zdGVhZCBvZiBmb3JrKCkvZXhlYygpLgordGFnX2JpbmFyeQkJQ29tcGlsZWQgd2l0aCBiaW5hcnkgc2VhcmNoaW5nIGluIHRhZ3MgZmlsZXMKKwkJCXx0YWctYmluYXJ5LXNlYXJjaHwuCit0YWdfb2xkX3N0YXRpYwkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBvbGQgc3RhdGljIHRhZ3MKKwkJCXx0YWctb2xkLXN0YXRpY3wuCit0YWdfYW55X3doaXRlCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIGFueSB3aGl0ZSBjaGFyYWN0ZXJzIGluIHRhZ3MKKwkJCWZpbGVzIHx0YWctYW55LXdoaXRlfC4KK3RjbAkJCUNvbXBpbGVkIHdpdGggVGNsIGludGVyZmFjZS4KK3Rlcm1pbmZvCQlDb21waWxlZCB3aXRoIHRlcm1pbmZvIGluc3RlYWQgb2YgdGVybWNhcC4KK3Rlcm1yZXNwb25zZQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB8dF9SVnwgYW5kIHx2OnRlcm1yZXNwb25zZXwuCit0ZXh0b2JqZWN0cwkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB8dGV4dC1vYmplY3RzfC4KK3RnZXRlbnQJCQlDb21waWxlZCB3aXRoIHRnZXRlbnQgc3VwcG9ydCwgYWJsZSB0byB1c2UgYSB0ZXJtY2FwCisJCQlvciB0ZXJtaW5mbyBmaWxlLgordGl0bGUJCQlDb21waWxlZCB3aXRoIHdpbmRvdyB0aXRsZSBzdXBwb3J0IHwndGl0bGUnfC4KK3Rvb2xiYXIJCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHxndWktdG9vbGJhcnwuCit1bml4CQkJVW5peCB2ZXJzaW9uIG9mIFZpbS4KK3VzZXJfY29tbWFuZHMJCVVzZXItZGVmaW5lZCBjb21tYW5kcy4KK3ZpbWluZm8JCQlDb21waWxlZCB3aXRoIHZpbWluZm8gc3VwcG9ydC4KK3ZpbV9zdGFydGluZwkJVHJ1ZSB3aGlsZSBpbml0aWFsIHNvdXJjZSdpbmcgdGFrZXMgcGxhY2UuCit2ZXJ0c3BsaXQJCUNvbXBpbGVkIHdpdGggdmVydGljYWxseSBzcGxpdCB3aW5kb3dzIHw6dnNwbGl0fC4KK3ZpcnR1YWxlZGl0CQlDb21waWxlZCB3aXRoICd2aXJ0dWFsZWRpdCcgb3B0aW9uLgordmlzdWFsCQkJQ29tcGlsZWQgd2l0aCBWaXN1YWwgbW9kZS4KK3Zpc3VhbGV4dHJhCQlDb21waWxlZCB3aXRoIGV4dHJhIFZpc3VhbCBtb2RlIGNvbW1hbmRzLgorCQkJfGJsb2Nrd2lzZS1vcGVyYXRvcnN8Lgordm1zCQkJVk1TIHZlcnNpb24gb2YgVmltLgordnJlcGxhY2UJCUNvbXBpbGVkIHdpdGggfGdSfCBhbmQgfGdyfCBjb21tYW5kcy4KK3dpbGRpZ25vcmUJCUNvbXBpbGVkIHdpdGggJ3dpbGRpZ25vcmUnIG9wdGlvbi4KK3dpbGRtZW51CQlDb21waWxlZCB3aXRoICd3aWxkbWVudScgb3B0aW9uLgord2luZG93cwkJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgbW9yZSB0aGFuIG9uZSB3aW5kb3cuCit3aW5hbHRrZXlzCQlDb21waWxlZCB3aXRoICd3aW5hbHRrZXlzJyBvcHRpb24uCit3aW4xNgkJCVdpbjE2IHZlcnNpb24gb2YgVmltIChNUy1XaW5kb3dzIDMuMSkuCit3aW4zMgkJCVdpbjMyIHZlcnNpb24gb2YgVmltIChNUy1XaW5kb3dzIDk1Lzk4L01FL05ULzIwMDAvWFApLgord2luNjQJCQlXaW42NCB2ZXJzaW9uIG9mIFZpbSAoTVMtV2luZG93cyA2NCBiaXQpLgord2luMzJ1bml4CQlXaW4zMiB2ZXJzaW9uIG9mIFZpbSwgdXNpbmcgVW5peCBmaWxlcyAoQ3lnd2luKQord2luOTUJCQlXaW4zMiB2ZXJzaW9uIGZvciBNUy1XaW5kb3dzIDk1Lzk4L01FLgord3JpdGViYWNrdXAJCUNvbXBpbGVkIHdpdGggJ3dyaXRlYmFja3VwJyBkZWZhdWx0IG9uLgoreGZvbnRzZXQJCUNvbXBpbGVkIHdpdGggWCBmb250c2V0IHN1cHBvcnQgfHhmb250c2V0fC4KK3hpbQkJCUNvbXBpbGVkIHdpdGggWCBpbnB1dCBtZXRob2Qgc3VwcG9ydCB8eGltfC4KK3hzbXAJCQlDb21waWxlZCB3aXRoIFggc2Vzc2lvbiBtYW5hZ2VtZW50IHN1cHBvcnQuCit4c21wX2ludGVyYWN0CQlDb21waWxlZCB3aXRoIGludGVyYWN0aXZlIFggc2Vzc2lvbiBtYW5hZ2VtZW50IHN1cHBvcnQuCit4dGVybV9jbGlwYm9hcmQJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgeHRlcm0gY2xpcGJvYXJkLgoreHRlcm1fc2F2ZQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyB0aGUKKwkJCXh0ZXJtIHNjcmVlbi4KK3gxMQkJCUNvbXBpbGVkIHdpdGggWDExIHN1cHBvcnQuCisKKwkJCQkJCQkqc3RyaW5nLW1hdGNoKgorTWF0Y2hpbmcgYSBwYXR0ZXJuIGluIGEgU3RyaW5nCisKK0EgcmVnZXhwIHBhdHRlcm4gYXMgZXhwbGFpbmVkIGF0IHxwYXR0ZXJufCBpcyBub3JtYWxseSB1c2VkIHRvIGZpbmQgYSBtYXRjaCBpbgordGhlIGJ1ZmZlciBsaW5lcy4gIFdoZW4gYSBwYXR0ZXJuIGlzIHVzZWQgdG8gZmluZCBhIG1hdGNoIGluIGEgU3RyaW5nLCBhbG1vc3QKK2V2ZXJ5dGhpbmcgd29ya3MgaW4gdGhlIHNhbWUgd2F5LiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBhIFN0cmluZyBpcyBoYW5kbGVkCitsaWtlIGl0IGlzIG9uZSBsaW5lLiAgV2hlbiBpdCBjb250YWlucyBhICJcbiIgY2hhcmFjdGVyLCB0aGlzIGlzIG5vdCBzZWVuIGFzIGEKK2xpbmUgYnJlYWsgZm9yIHRoZSBwYXR0ZXJuLiAgSXQgY2FuIGJlIG1hdGNoZWQgd2l0aCBhICJcbiIgaW4gdGhlIHBhdHRlcm4sIG9yCit3aXRoICIuIi4gIEV4YW1wbGU6ID4KKwk6bGV0IGEgPSAiYWFhYVxueHh4eCIKKwk6ZWNobyBtYXRjaHN0cihhLCAiLi5cbi4uIikKKwlhYQorCXh4CisJOmVjaG8gbWF0Y2hzdHIoYSwgImEueCIpCisJYQorCXgKKworRG9uJ3QgZm9yZ2V0IHRoYXQgIl4iIHdpbGwgb25seSBtYXRjaCBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBTdHJpbmcgYW5kCisiJCIgYXQgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcuICBUaGV5IGRvbid0IG1hdGNoIGFmdGVyIG9yIGJlZm9yZSBhCisiXG4iLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIERlZmluaW5nIGZ1bmN0aW9ucwkJCQkJKnVzZXItZnVuY3Rpb25zKgorCitOZXcgZnVuY3Rpb25zIGNhbiBiZSBkZWZpbmVkLiAgVGhlc2UgY2FuIGJlIGNhbGxlZCBqdXN0IGxpa2UgYnVpbHRpbgorZnVuY3Rpb25zLiAgVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGEgc2VxdWVuY2Ugb2YgRXggY29tbWFuZHMuICBOb3JtYWwgbW9kZQorY29tbWFuZHMgY2FuIGJlIGV4ZWN1dGVkIHdpdGggdGhlIHw6bm9ybWFsfCBjb21tYW5kLgorCitUaGUgZnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciwgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGgKK2J1aWx0aW4gZnVuY3Rpb25zLiAgVG8gcHJldmVudCBmcm9tIHVzaW5nIHRoZSBzYW1lIG5hbWUgaW4gZGlmZmVyZW50IHNjcmlwdHMKK2F2b2lkIG9idmlvdXMsIHNob3J0IG5hbWVzLiAgQSBnb29kIGhhYml0IGlzIHRvIHN0YXJ0IHRoZSBmdW5jdGlvbiBuYW1lIHdpdGgKK3RoZSBuYW1lIG9mIHRoZSBzY3JpcHQsIGUuZy4sICJIVE1MY29sb3IoKSIuCisKK0l0J3MgYWxzbyBwb3NzaWJsZSB0byB1c2UgY3VybHkgYnJhY2VzLCBzZWUgfGN1cmx5LWJyYWNlcy1uYW1lc3wuCisKKwkJCQkJCQkqbG9jYWwtZnVuY3Rpb24qCitBIGZ1bmN0aW9uIGxvY2FsIHRvIGEgc2NyaXB0IG11c3Qgc3RhcnQgd2l0aCAiczoiLiAgQSBsb2NhbCBzY3JpcHQgZnVuY3Rpb24KK2NhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgc2NyaXB0IGFuZCBmcm9tIGZ1bmN0aW9ucywgdXNlciBjb21tYW5kcworYW5kIGF1dG9jb21tYW5kcyBkZWZpbmVkIGluIHRoZSBzY3JpcHQuICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNhbGwgdGhlCitmdW5jdGlvbiBmcm9tIGEgbWFwcGluZ3MgZGVmaW5lZCBpbiB0aGUgc2NyaXB0LCBidXQgdGhlbiB8PFNJRD58IG11c3QgYmUgdXNlZAoraW5zdGVhZCBvZiAiczoiIHdoZW4gdGhlIG1hcHBpbmcgaXMgZXhwYW5kZWQgb3V0c2lkZSBvZiB0aGUgc2NyaXB0LgorCisJCQkJCSo6ZnUqICo6ZnVuY3Rpb24qICpFMTI4KiAqRTEyOSogKkUxMjMqCis6ZnVbbmN0aW9uXQkJTGlzdCBhbGwgZnVuY3Rpb25zIGFuZCB0aGVpciBhcmd1bWVudHMuCisKKzpmdVtuY3Rpb25dIHtuYW1lfQlMaXN0IGZ1bmN0aW9uIHtuYW1lfS4KKwkJCQkJCQkqRTEyNCogKkUxMjUqCis6ZnVbbmN0aW9uXVshXSB7bmFtZX0oW2FyZ3VtZW50c10pIFtyYW5nZV0gW2Fib3J0XQorCQkJRGVmaW5lIGEgbmV3IGZ1bmN0aW9uIGJ5IHRoZSBuYW1lIHtuYW1lfS4gIFRoZSBuYW1lCisJCQltdXN0IGJlIG1hZGUgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kICdfJywgYW5kCisJCQltdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsIG9yICJzOiIgKHNlZSBhYm92ZSkuCisJCQkJCQkqZnVuY3Rpb24tYXJndW1lbnQqICphOnZhcioKKwkJCUFuIGFyZ3VtZW50IGNhbiBiZSBkZWZpbmVkIGJ5IGdpdmluZyBpdHMgbmFtZS4gIEluIHRoZQorCQkJZnVuY3Rpb24gdGhpcyBjYW4gdGhlbiBiZSB1c2VkIGFzICJhOm5hbWUiICgiYToiIGZvcgorCQkJYXJndW1lbnQpLgorCQkJVXAgdG8gMjAgYXJndW1lbnRzIGNhbiBiZSBnaXZlbiwgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KKwkJCUZpbmFsbHksIGFuIGFyZ3VtZW50ICIuLi4iIGNhbiBiZSBzcGVjaWZpZWQsIHdoaWNoCisJCQltZWFucyB0aGF0IG1vcmUgYXJndW1lbnRzIG1heSBiZSBmb2xsb3dpbmcuICBJbiB0aGUKKwkJCWZ1bmN0aW9uIHRoZXkgY2FuIGJlIHVzZWQgYXMgImE6MSIsICJhOjIiLCBldGMuICAiYTowIgorCQkJaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgZXh0cmEgYXJndW1lbnRzICh3aGljaCBjYW4gYmUKKwkJCTApLgorCQkJV2hlbiBub3QgdXNpbmcgIi4uLiIsIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGluIGEKKwkJCWZ1bmN0aW9uIGNhbGwgbXVzdCBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIG5hbWVkCisJCQlhcmd1bWVudHMuICBXaGVuIHVzaW5nICIuLi4iLCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cworCQkJbWF5IGJlIGxhcmdlci4KKwkJCUl0IGlzIGFsc28gcG9zc2libGUgdG8gZGVmaW5lIGEgZnVuY3Rpb24gd2l0aG91dCBhbnkKKwkJCWFyZ3VtZW50cy4gIFlvdSBtdXN0IHN0aWxsIHN1cHBseSB0aGUgKCkgdGhlbi4KKwkJCVRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiBmb2xsb3dzIGluIHRoZSBuZXh0IGxpbmVzLAorCQkJdW50aWwgdGhlIG1hdGNoaW5nIHw6ZW5kZnVuY3Rpb258LiAgSXQgaXMgYWxsb3dlZCB0bworCQkJZGVmaW5lIGFub3RoZXIgZnVuY3Rpb24gaW5zaWRlIGEgZnVuY3Rpb24gYm9keS4KKwkJCQkJCQkJKkUxMjcqICpFMTIyKgorCQkJV2hlbiBhIGZ1bmN0aW9uIGJ5IHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyBhbmQgWyFdIGlzCisJCQlub3QgdXNlZCBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuLiAgV2hlbiBbIV0gaXMgdXNlZCwKKwkJCWFuIGV4aXN0aW5nIGZ1bmN0aW9uIGlzIHNpbGVudGx5IHJlcGxhY2VkLiAgVW5sZXNzIGl0CisJCQlpcyBjdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQsIHRoYXQgaXMgYW4gZXJyb3IuCisJCQkJCQkqYTpmaXJzdGxpbmUqICphOmxhc3RsaW5lKgorCQkJV2hlbiB0aGUgW3JhbmdlXSBhcmd1bWVudCBpcyBhZGRlZCwgdGhlIGZ1bmN0aW9uIGlzCisJCQlleHBlY3RlZCB0byB0YWtlIGNhcmUgb2YgYSByYW5nZSBpdHNlbGYuICBUaGUgcmFuZ2UgaXMKKwkJCXBhc3NlZCBhcyAiYTpmaXJzdGxpbmUiIGFuZCAiYTpsYXN0bGluZSIuICBJZiBbcmFuZ2VdCisJCQlpcyBleGNsdWRlZCwgIjp7cmFuZ2V9Y2FsbCIgd2lsbCBjYWxsIHRoZSBmdW5jdGlvbiBmb3IKKwkJCWVhY2ggbGluZSBpbiB0aGUgcmFuZ2UsIHdpdGggdGhlIGN1cnNvciBvbiB0aGUgc3RhcnQKKwkJCW9mIGVhY2ggbGluZS4gIFNlZSB8ZnVuY3Rpb24tcmFuZ2UtZXhhbXBsZXwuCisJCQlXaGVuIHRoZSBbYWJvcnRdIGFyZ3VtZW50IGlzIGFkZGVkLCB0aGUgZnVuY3Rpb24gd2lsbAorCQkJYWJvcnQgYXMgc29vbiBhcyBhbiBlcnJvciBpcyBkZXRlY3RlZC4KKwkJCVRoZSBsYXN0IHVzZWQgc2VhcmNoIHBhdHRlcm4gYW5kIHRoZSByZWRvIGNvbW1hbmQgIi4iCisJCQl3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoZSBmdW5jdGlvbi4KKworCQkJCQkqOmVuZGYqICo6ZW5kZnVuY3Rpb24qICpFMTI2KiAqRTE5MyoKKzplbmRmW3VuY3Rpb25dCQlUaGUgZW5kIG9mIGEgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIE11c3QgYmUgb24gYSBsaW5lCisJCQlieSBpdHMgb3duLCB3aXRob3V0IG90aGVyIGNvbW1hbmRzLgorCisJCQkJCSo6ZGVsZiogKjpkZWxmdW5jdGlvbiogKkUxMzAqICpFMTMxKgorOmRlbGZbdW5jdGlvbl0ge25hbWV9CURlbGV0ZSBmdW5jdGlvbiB7bmFtZX0uCisKKwkJCQkJCQkqOnJldHUqICo6cmV0dXJuKiAqRTEzMyoKKzpyZXR1W3JuXSBbZXhwcl0JUmV0dXJuIGZyb20gYSBmdW5jdGlvbi4gIFdoZW4gIltleHByXSIgaXMgZ2l2ZW4sIGl0IGlzCisJCQlldmFsdWF0ZWQgYW5kIHJldHVybmVkIGFzIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLgorCQkJSWYgIltleHByXSIgaXMgbm90IGdpdmVuLCB0aGUgbnVtYmVyIDAgaXMgcmV0dXJuZWQuCisJCQlXaGVuIGEgZnVuY3Rpb24gZW5kcyB3aXRob3V0IGFuIGV4cGxpY2l0ICI6cmV0dXJuIiwKKwkJCXRoZSBudW1iZXIgMCBpcyByZXR1cm5lZC4KKwkJCU5vdGUgdGhhdCB0aGVyZSBpcyBubyBjaGVjayBmb3IgdW5yZWFjaGFibGUgbGluZXMsCisJCQl0aHVzIHRoZXJlIGlzIG5vIHdhcm5pbmcgaWYgY29tbWFuZHMgZm9sbG93ICI6cmV0dXJuIi4KKworCQkJSWYgdGhlICI6cmV0dXJuIiBpcyB1c2VkIGFmdGVyIGEgfDp0cnl8IGJ1dCBiZWZvcmUgdGhlCisJCQltYXRjaGluZyB8OmZpbmFsbHl8IChpZiBwcmVzZW50KSwgdGhlIGNvbW1hbmRzCisJCQlmb2xsb3dpbmcgdGhlICI6ZmluYWxseSIgdXAgdG8gdGhlIG1hdGNoaW5nIHw6ZW5kdHJ5fAorCQkJYXJlIGV4ZWN1dGVkIGZpcnN0LiAgVGhpcyBwcm9jZXNzIGFwcGxpZXMgdG8gYWxsCisJCQluZXN0ZWQgIjp0cnkicyBpbnNpZGUgdGhlIGZ1bmN0aW9uLiAgVGhlIGZ1bmN0aW9uCisJCQlyZXR1cm5zIGF0IHRoZSBvdXRlcm1vc3QgIjplbmR0cnkiLgorCisKK0luc2lkZSBhIGZ1bmN0aW9uIHZhcmlhYmxlcyBjYW4gYmUgdXNlZC4gIFRoZXNlIGFyZSBsb2NhbCB2YXJpYWJsZXMsIHdoaWNoCit3aWxsIGRpc2FwcGVhciB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zLiAgR2xvYmFsIHZhcmlhYmxlcyBuZWVkIHRvIGJlCithY2Nlc3NlZCB3aXRoICJnOiIuCisKK0V4YW1wbGU6ID4KKyAgOmZ1bmN0aW9uIFRhYmxlKHRpdGxlLCAuLi4pCisgIDogIGVjaG9obCBUaXRsZQorICA6ICBlY2hvIGE6dGl0bGUKKyAgOiAgZWNob2hsIE5vbmUKKyAgOiAgbGV0IGlkeCA9IDEKKyAgOiAgd2hpbGUgaWR4IDw9IGE6MAorICA6ICAgIGVjaG8gYTp7aWR4fSAuICcgJworICA6ICAgIGxldCBpZHggPSBpZHggKyAxCisgIDogIGVuZHdoaWxlCisgIDogIHJldHVybiBpZHgKKyAgOmVuZGZ1bmN0aW9uCisKK1RoaXMgZnVuY3Rpb24gY2FuIHRoZW4gYmUgY2FsbGVkIHdpdGg6ID4KKyAgbGV0IGxpbmVzID0gVGFibGUoIlRhYmxlIiwgImxpbmUxIiwgImxpbmUyIikKKyAgbGV0IGxpbmVzID0gVGFibGUoIkVtcHR5IFRhYmxlIikKKworVG8gcmV0dXJuIG1vcmUgdGhhbiBvbmUgdmFsdWUsIHBhc3MgdGhlIG5hbWUgb2YgYSBnbG9iYWwgdmFyaWFibGU6ID4KKyAgOmZ1bmN0aW9uIENvbXB1dGUobjEsIG4yLCBkaXZuYW1lKQorICA6ICBpZiBhOm4yID09IDAKKyAgOiAgICByZXR1cm4gImZhaWwiCisgIDogIGVuZGlmCisgIDogIGxldCBnOnthOmRpdm5hbWV9ID0gYTpuMSAvIGE6bjIKKyAgOiAgcmV0dXJuICJvayIKKyAgOmVuZGZ1bmN0aW9uCisKK1RoaXMgZnVuY3Rpb24gY2FuIHRoZW4gYmUgY2FsbGVkIHdpdGg6ID4KKyAgOmxldCBzdWNjZXNzID0gQ29tcHV0ZSgxMywgMTMyNCwgImRpdiIpCisgIDppZiBzdWNjZXNzID09ICJvayIKKyAgOiAgZWNobyBkaXYKKyAgOmVuZGlmCisKK0FuIGFsdGVybmF0aXZlIGlzIHRvIHJldHVybiBhIGNvbW1hbmQgdGhhdCBjYW4gYmUgZXhlY3V0ZWQuICBUaGlzIGFsc28gd29ya3MKK3dpdGggbG9jYWwgdmFyaWFibGVzIGluIGEgY2FsbGluZyBmdW5jdGlvbi4gIEV4YW1wbGU6ID4KKyAgOmZ1bmN0aW9uIEZvbygpCisgIDogIGV4ZWN1dGUgQmFyKCkKKyAgOiAgZWNobyAibGluZSAiIC4gbG51bSAuICIgY29sdW1uICIgLiBjb2wKKyAgOmVuZGZ1bmN0aW9uCisKKyAgOmZ1bmN0aW9uIEJhcigpCisgIDogIHJldHVybiAibGV0IGxudW0gPSAiIC4gbGluZSgiLiIpIC4gIiB8IGxldCBjb2wgPSAiIC4gY29sKCIuIikKKyAgOmVuZGZ1bmN0aW9uCisKK1RoZSBuYW1lcyAibG51bSIgYW5kICJjb2wiIGNvdWxkIGFsc28gYmUgcGFzc2VkIGFzIGFyZ3VtZW50IHRvIEJhcigpLCB0byBhbGxvdwordGhlIGNhbGxlciB0byBzZXQgdGhlIG5hbWVzLgorCisJCQkJCQkJKjpjYWwqICo6Y2FsbCogKkUxMDcqCis6W3JhbmdlXWNhbFtsXSB7bmFtZX0oW2FyZ3VtZW50c10pCisJCUNhbGwgYSBmdW5jdGlvbi4gIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBhbmQgaXRzIGFyZ3VtZW50cworCQlhcmUgYXMgc3BlY2lmaWVkIHdpdGggfDpmdW5jdGlvbnwuICBVcCB0byAyMCBhcmd1bWVudHMgY2FuIGJlCisJCXVzZWQuCisJCVdpdGhvdXQgYSByYW5nZSBhbmQgZm9yIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBhIHJhbmdlLCB0aGUKKwkJZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UuICBXaGVuIGEgcmFuZ2UgaXMgZ2l2ZW4gdGhlIGN1cnNvciBpcworCQlwb3NpdGlvbmVkIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgbGluZSBiZWZvcmUgZXhlY3V0aW5nIHRoZQorCQlmdW5jdGlvbi4KKwkJV2hlbiBhIHJhbmdlIGlzIGdpdmVuIGFuZCB0aGUgZnVuY3Rpb24gZG9lc24ndCBoYW5kbGUgaXQKKwkJaXRzZWxmLCB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggbGluZSBpbiB0aGUgcmFuZ2UsCisJCXdpdGggdGhlIGN1cnNvciBpbiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoYXQgbGluZS4gIFRoZSBjdXJzb3IKKwkJaXMgbGVmdCBhdCB0aGUgbGFzdCBsaW5lIChwb3NzaWJseSBtb3ZlZCBieSB0aGUgbGFzdCBmdW5jdGlvbgorCQljYWxsKS4gIFRoZSBhcmd1bWVudHMgYXJlIHJlLWV2YWx1YXRlZCBmb3IgZWFjaCBsaW5lLiAgVGh1cworCQl0aGlzIHdvcmtzOgorCQkJCQkJKmZ1bmN0aW9uLXJhbmdlLWV4YW1wbGUqICA+CisJOmZ1bmN0aW9uIE15bnVtYmVyKGFyZykKKwk6ICBlY2hvIGxpbmUoIi4iKSAuICIgIiAuIGE6YXJnCisJOmVuZGZ1bmN0aW9uCisJOjEsNWNhbGwgTXludW1iZXIoZ2V0bGluZSgiLiIpKQorPAorCQlUaGUgImE6Zmlyc3RsaW5lIiBhbmQgImE6bGFzdGxpbmUiIGFyZSBkZWZpbmVkIGFueXdheSwgdGhleQorCQljYW4gYmUgdXNlZCB0byBkbyBzb21ldGhpbmcgZGlmZmVyZW50IGF0IHRoZSBzdGFydCBvciBlbmQgb2YKKwkJdGhlIHJhbmdlLgorCisJCUV4YW1wbGUgb2YgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIHJhbmdlIGl0c2VsZjogPgorCisJOmZ1bmN0aW9uIENvbnQoKSByYW5nZQorCTogIGV4ZWN1dGUgKGE6Zmlyc3RsaW5lICsgMSkgLiAiLCIgLiBhOmxhc3RsaW5lIC4gJ3MvXi9cdFxcICcKKwk6ZW5kZnVuY3Rpb24KKwk6NCw4Y2FsbCBDb250KCkKKzwKKwkJVGhpcyBmdW5jdGlvbiBpbnNlcnRzIHRoZSBjb250aW51YXRpb24gY2hhcmFjdGVyICJcIiBpbiBmcm9udAorCQlvZiBhbGwgdGhlIGxpbmVzIGluIHRoZSByYW5nZSwgZXhjZXB0IHRoZSBmaXJzdCBvbmUuCisKKwkJCQkJCQkJKkUxMzIqCitUaGUgcmVjdXJzaXZlbmVzcyBvZiB1c2VyIGZ1bmN0aW9ucyBpcyByZXN0cmljdGVkIHdpdGggdGhlIHwnbWF4ZnVuY2RlcHRoJ3wKK29wdGlvbi4KKworCQkJCQkJCSphdXRvbG9hZC1mdW5jdGlvbnMqCitXaGVuIHVzaW5nIG1hbnkgb3IgbGFyZ2UgZnVuY3Rpb25zLCBpdCdzIHBvc3NpYmxlIHRvIGF1dG9tYXRpY2FsbHkgZGVmaW5lIHRoZW0KK29ubHkgd2hlbiB0aGV5IGFyZSB1c2VkLiAgVXNlIHRoZSBGdW5jVW5kZWZpbmVkIGF1dG9jb21tYW5kIGV2ZW50IHdpdGggYQorcGF0dGVybiB0aGF0IG1hdGNoZXMgdGhlIGZ1bmN0aW9uKHMpIHRvIGJlIGRlZmluZWQuICBFeGFtcGxlOiA+CisKKwk6YXUgRnVuY1VuZGVmaW5lZCBCdWZOZXQqIHNvdXJjZSB+L3ZpbS9idWZuZXRmdW5jcy52aW0KKworVGhlIGZpbGUgIn4vdmltL2J1Zm5ldGZ1bmNzLnZpbSIgc2hvdWxkIHRoZW4gZGVmaW5lIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGgKKyJCdWZOZXQiLiAgQWxzbyBzZWUgfEZ1bmNVbmRlZmluZWR8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIEN1cmx5IGJyYWNlcyBuYW1lcwkJCQkJKmN1cmx5LWJyYWNlcy1uYW1lcyoKKworV2hlcmV2ZXIgeW91IGNhbiB1c2UgYSB2YXJpYWJsZSwgeW91IGNhbiB1c2UgYSAiY3VybHkgYnJhY2VzIG5hbWUiIHZhcmlhYmxlLgorVGhpcyBpcyBhIHJlZ3VsYXIgdmFyaWFibGUgbmFtZSB3aXRoIG9uZSBvciBtb3JlIGV4cHJlc3Npb25zIHdyYXBwZWQgaW4gYnJhY2VzCit7fSBsaWtlIHRoaXM6ID4KKwlteV97YWRqZWN0aXZlfV92YXJpYWJsZQorCitXaGVuIFZpbSBlbmNvdW50ZXJzIHRoaXMsIGl0IGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBpbnNpZGUgdGhlIGJyYWNlcywgcHV0cwordGhhdCBpbiBwbGFjZSBvZiB0aGUgZXhwcmVzc2lvbiwgYW5kIHJlLWludGVycHJldHMgdGhlIHdob2xlIGFzIGEgdmFyaWFibGUKK25hbWUuICBTbyBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgaWYgdGhlIHZhcmlhYmxlICJhZGplY3RpdmUiIHdhcyBzZXQgdG8KKyJub2lzeSIsIHRoZW4gdGhlIHJlZmVyZW5jZSB3b3VsZCBiZSB0byAibXlfbm9pc3lfdmFyaWFibGUiLCB3aGVyZWFzIGlmCisiYWRqZWN0aXZlIiB3YXMgc2V0IHRvICJxdWlldCIsIHRoZW4gaXQgd291bGQgYmUgdG8gIm15X3F1aWV0X3ZhcmlhYmxlIi4KKworT25lIGFwcGxpY2F0aW9uIGZvciB0aGlzIGlzIHRvIGNyZWF0ZSBhIHNldCBvZiB2YXJpYWJsZXMgZ292ZXJuZWQgYnkgYW4gb3B0aW9uCit2YWx1ZS4gIEZvciBleGFtcGxlLCB0aGUgc3RhdGVtZW50ID4KKwllY2hvIG15X3smYmFja2dyb3VuZH1fbWVzc2FnZQorCit3b3VsZCBvdXRwdXQgdGhlIGNvbnRlbnRzIG9mICJteV9kYXJrX21lc3NhZ2UiIG9yICJteV9saWdodF9tZXNzYWdlIiBkZXBlbmRpbmcKK29uIHRoZSBjdXJyZW50IHZhbHVlIG9mICdiYWNrZ3JvdW5kJy4KKworWW91IGNhbiB1c2UgbXVsdGlwbGUgYnJhY2UgcGFpcnM6ID4KKwllY2hvIG15X3thZHZlcmJ9X3thZGplY3RpdmV9X21lc3NhZ2UKKy4ub3IgZXZlbiBuZXN0IHRoZW06ID4KKwllY2hvIG15X3thZHtlbmRfb2Zfd29yZH19X21lc3NhZ2UKK3doZXJlICJlbmRfb2Zfd29yZCIgaXMgZWl0aGVyICJ2ZXJiIiBvciAiamVjdGl2ZSIuCisKK0hvd2V2ZXIsIHRoZSBleHByZXNzaW9uIGluc2lkZSB0aGUgYnJhY2VzIG11c3QgZXZhbHVhdGUgdG8gYSB2YWxpZCBzaW5nbGUKK3ZhcmlhYmxlIG5hbWUuIGUuZy4gdGhpcyBpcyBpbnZhbGlkOiA+CisJOmxldCBmb289J2EgKyBiJworCTplY2hvIGN7Zm9vfWQKKy4uIHNpbmNlIHRoZSByZXN1bHQgb2YgZXhwYW5zaW9uIGlzICJjYSArIGJkIiwgd2hpY2ggaXMgbm90IGEgdmFyaWFibGUgbmFtZS4KKworCQkJCQkJKmN1cmx5LWJyYWNlcy1mdW5jdGlvbi1uYW1lcyoKK1lvdSBjYW4gY2FsbCBhbmQgZGVmaW5lIGZ1bmN0aW9ucyBieSBhbiBldmFsdWF0ZWQgbmFtZSBpbiBhIHNpbWlsYXIgd2F5LgorRXhhbXBsZTogPgorCTpsZXQgZnVuY19lbmQ9J3doaXp6JworCTpjYWxsIG15X2Z1bmNfe2Z1bmNfZW5kfShwYXJhbWV0ZXIpCisKK1RoaXMgd291bGQgY2FsbCB0aGUgZnVuY3Rpb24gIm15X2Z1bmNfd2hpenoocGFyYW1ldGVyKSIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gQ29tbWFuZHMJCQkJCQkqZXhwcmVzc2lvbi1jb21tYW5kcyoKKworOmxldCB7dmFyLW5hbWV9ID0ge2V4cHIxfQkJCQkqOmxldCogKkUxOCoKKwkJCVNldCBpbnRlcm5hbCB2YXJpYWJsZSB7dmFyLW5hbWV9IHRvIHRoZSByZXN1bHQgb2YgdGhlCisJCQlleHByZXNzaW9uIHtleHByMX0uICBUaGUgdmFyaWFibGUgd2lsbCBnZXQgdGhlIHR5cGUKKwkJCWZyb20gdGhlIHtleHByfS4gIElmIHt2YXItbmFtZX0gZGlkbid0IGV4aXN0IHlldCwgaXQKKwkJCWlzIGNyZWF0ZWQuCisKKzpsZXQgJHtlbnYtbmFtZX0gPSB7ZXhwcjF9CQkJKjpsZXQtZW52aXJvbm1lbnQqICo6bGV0LSQqCisJCQlTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUge2Vudi1uYW1lfSB0byB0aGUgcmVzdWx0IG9mCisJCQl0aGUgZXhwcmVzc2lvbiB7ZXhwcjF9LiAgVGhlIHR5cGUgaXMgYWx3YXlzIFN0cmluZy4KKworOmxldCBAe3JlZy1uYW1lfSA9IHtleHByMX0JCQkqOmxldC1yZWdpc3RlciogKjpsZXQtQCoKKwkJCVdyaXRlIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24ge2V4cHIxfSBpbiByZWdpc3RlcgorCQkJe3JlZy1uYW1lfS4gIHtyZWctbmFtZX0gbXVzdCBiZSBhIHNpbmdsZSBsZXR0ZXIsIGFuZAorCQkJbXVzdCBiZSB0aGUgbmFtZSBvZiBhIHdyaXRhYmxlIHJlZ2lzdGVyIChzZWUKKwkJCXxyZWdpc3RlcnN8KS4gICJAQCIgY2FuIGJlIHVzZWQgZm9yIHRoZSB1bm5hbWVkCisJCQlyZWdpc3RlciwgIkAvIiBmb3IgdGhlIHNlYXJjaCBwYXR0ZXJuLgorCQkJSWYgdGhlIHJlc3VsdCBvZiB7ZXhwcjF9IGVuZHMgaW4gYSA8Q1I+IG9yIDxOTD4sIHRoZQorCQkJcmVnaXN0ZXIgd2lsbCBiZSBsaW5ld2lzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgc2V0IHRvCisJCQljaGFyYWN0ZXJ3aXNlLgorCQkJVGhpcyBjYW4gYmUgdXNlZCB0byBjbGVhciB0aGUgbGFzdCBzZWFyY2ggcGF0dGVybjogPgorCQkJCTpsZXQgQC8gPSAiIgorPAkJCVRoaXMgaXMgZGlmZmVyZW50IGZyb20gc2VhcmNoaW5nIGZvciBhbiBlbXB0eSBzdHJpbmcsCisJCQl0aGF0IHdvdWxkIG1hdGNoIGV2ZXJ5d2hlcmUuCisKKzpsZXQgJntvcHRpb24tbmFtZX0gPSB7ZXhwcjF9CQkJKjpsZXQtb3B0aW9uKiAqOmxldC1zdGFyKgorCQkJU2V0IG9wdGlvbiB7b3B0aW9uLW5hbWV9IHRvIHRoZSByZXN1bHQgb2YgdGhlCisJCQlleHByZXNzaW9uIHtleHByMX0uICBUaGUgdmFsdWUgaXMgYWx3YXlzIGNvbnZlcnRlZCB0bworCQkJdGhlIHR5cGUgb2YgdGhlIG9wdGlvbi4KKwkJCUZvciBhbiBvcHRpb24gbG9jYWwgdG8gYSB3aW5kb3cgb3IgYnVmZmVyIHRoZSBlZmZlY3QKKwkJCWlzIGp1c3QgbGlrZSB1c2luZyB0aGUgfDpzZXR8IGNvbW1hbmQ6IGJvdGggdGhlIGxvY2FsCisJCQl2YWx1ZSBhbmQgdGhlIGdsb2JhbCB2YWx1ZSBpcyBjaGFuZ2VkLgorCis6bGV0ICZsOntvcHRpb24tbmFtZX0gPSB7ZXhwcjF9CisJCQlMaWtlIGFib3ZlLCBidXQgb25seSBzZXQgdGhlIGxvY2FsIHZhbHVlIG9mIGFuIG9wdGlvbgorCQkJKGlmIHRoZXJlIGlzIG9uZSkuICBXb3JrcyBsaWtlIHw6c2V0bG9jYWx8LgorCis6bGV0ICZnOntvcHRpb24tbmFtZX0gPSB7ZXhwcjF9CisJCQlMaWtlIGFib3ZlLCBidXQgb25seSBzZXQgdGhlIGdsb2JhbCB2YWx1ZSBvZiBhbiBvcHRpb24KKwkJCShpZiB0aGVyZSBpcyBvbmUpLiAgV29ya3MgbGlrZSB8OnNldGdsb2JhbHwuCisKKwkJCQkJCQkqRTEwNioKKzpsZXQge3Zhci1uYW1lfQkuLglMaXN0IHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSB7dmFyLW5hbWV9LiAgU2V2ZXJhbAorCQkJdmFyaWFibGUgbmFtZXMgbWF5IGJlIGdpdmVuLgorCis6bGV0CQkJTGlzdCB0aGUgdmFsdWVzIG9mIGFsbCB2YXJpYWJsZXMuCisKKwkJCQkJCQkqOnVubGV0KiAqOnVubCogKkUxMDgqCis6dW5sW2V0XVshXSB7dmFyLW5hbWV9IC4uLgorCQkJUmVtb3ZlIHRoZSBpbnRlcm5hbCB2YXJpYWJsZSB7dmFyLW5hbWV9LiAgU2V2ZXJhbAorCQkJdmFyaWFibGUgbmFtZXMgY2FuIGJlIGdpdmVuLCB0aGV5IGFyZSBhbGwgcmVtb3ZlZC4KKwkJCVdpdGggWyFdIG5vIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4gZm9yIG5vbi1leGlzdGluZworCQkJdmFyaWFibGVzLgorCis6aWYge2V4cHIxfQkJCSo6aWYqICo6ZW5kaWYqICo6ZW4qICpFMTcxKiAqRTU3OSogKkU1ODAqCis6ZW5bZGlmXQkJRXhlY3V0ZSB0aGUgY29tbWFuZHMgdW50aWwgdGhlIG5leHQgbWF0Y2hpbmcgIjplbHNlIgorCQkJb3IgIjplbmRpZiIgaWYge2V4cHIxfSBldmFsdWF0ZXMgdG8gbm9uLXplcm8uCisKKwkJCUZyb20gVmltIHZlcnNpb24gNC41IHVudGlsIDUuMCwgZXZlcnkgRXggY29tbWFuZCBpbgorCQkJYmV0d2VlbiB0aGUgIjppZiIgYW5kICI6ZW5kaWYiIGlzIGlnbm9yZWQuICBUaGVzZSB0d28KKwkJCWNvbW1hbmRzIHdlcmUganVzdCB0byBhbGxvdyBmb3IgZnV0dXJlIGV4cGFuc2lvbnMgaW4gYQorCQkJYmFja3dhcmRzIGNvbXBhdGlibGUgd2F5LiAgTmVzdGluZyB3YXMgYWxsb3dlZC4gIE5vdGUKKwkJCXRoYXQgYW55ICI6ZWxzZSIgb3IgIjplbHNlaWYiIHdhcyBpZ25vcmVkLCB0aGUgImVsc2UiCisJCQlwYXJ0IHdhcyBub3QgZXhlY3V0ZWQgZWl0aGVyLgorCisJCQlZb3UgY2FuIHVzZSB0aGlzIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggb2xkZXIKKwkJCXZlcnNpb25zOiA+CisJCQkJOmlmIHZlcnNpb24gPj0gNTAwCisJCQkJOiAgdmVyc2lvbi01LXNwZWNpZmljLWNvbW1hbmRzCisJCQkJOmVuZGlmCis8CQkJVGhlIGNvbW1hbmRzIHN0aWxsIG5lZWQgdG8gYmUgcGFyc2VkIHRvIGZpbmQgdGhlCisJCQkiZW5kaWYiLiAgU29tZXRpbWVzIGFuIG9sZGVyIFZpbSBoYXMgYSBwcm9ibGVtIHdpdGggYQorCQkJbmV3IGNvbW1hbmQuICBGb3IgZXhhbXBsZSwgIjpzaWxlbnQiIGlzIHJlY29nbml6ZWQgYXMKKwkJCWEgIjpzdWJzdGl0dXRlIiBjb21tYW5kLiAgSW4gdGhhdCBjYXNlICI6ZXhlY3V0ZSIgY2FuCisJCQlhdm9pZCBwcm9ibGVtczogPgorCQkJCTppZiB2ZXJzaW9uID49IDYwMAorCQkJCTogIGV4ZWN1dGUgInNpbGVudCAxLCRkZWxldGUiCisJCQkJOmVuZGlmCis8CisJCQlOT1RFOiBUaGUgIjphcHBlbmQiIGFuZCAiOmluc2VydCIgY29tbWFuZHMgZG9uJ3Qgd29yaworCQkJcHJvcGVybHkgaW4gYmV0d2VlbiAiOmlmIiBhbmQgIjplbmRpZiIuCisKKwkJCQkJCSo6ZWxzZSogKjplbCogKkU1ODEqICpFNTgzKgorOmVsW3NlXQkJCUV4ZWN1dGUgdGhlIGNvbW1hbmRzIHVudGlsIHRoZSBuZXh0IG1hdGNoaW5nICI6ZWxzZSIKKwkJCW9yICI6ZW5kaWYiIGlmIHRoZXkgcHJldmlvdXNseSB3ZXJlIG5vdCBiZWluZworCQkJZXhlY3V0ZWQuCisKKwkJCQkJKjplbHNlaWYqICo6ZWxzZWkqICpFNTgyKiAqRTU4NCoKKzplbHNlaVtmXSB7ZXhwcjF9CVNob3J0IGZvciAiOmVsc2UiICI6aWYiLCB3aXRoIHRoZSBhZGRpdGlvbiB0aGF0IHRoZXJlCisJCQlpcyBubyBleHRyYSAiOmVuZGlmIi4KKworOndoW2lsZV0ge2V4cHIxfQkJCSo6d2hpbGUqICo6ZW5kd2hpbGUqICo6d2gqICo6ZW5kdyoKKwkJCQkJCQkqRTE3MCogKkU1ODUqICpFNTg4KgorOmVuZHdbaGlsZV0JCVJlcGVhdCB0aGUgY29tbWFuZHMgYmV0d2VlbiAiOndoaWxlIiBhbmQgIjplbmR3aGlsZSIsCisJCQlhcyBsb25nIGFzIHtleHByMX0gZXZhbHVhdGVzIHRvIG5vbi16ZXJvLgorCQkJV2hlbiBhbiBlcnJvciBpcyBkZXRlY3RlZCBmcm9tIGEgY29tbWFuZCBpbnNpZGUgdGhlCisJCQlsb29wLCBleGVjdXRpb24gY29udGludWVzIGFmdGVyIHRoZSAiZW5kd2hpbGUiLgorCisJCQlOT1RFOiBUaGUgIjphcHBlbmQiIGFuZCAiOmluc2VydCIgY29tbWFuZHMgZG9uJ3Qgd29yaworCQkJcHJvcGVybHkgaW5zaWRlIGEgIjp3aGlsZSIgbG9vcC4KKworCQkJCQkJKjpjb250aW51ZSogKjpjb24qICpFNTg2KgorOmNvblt0aW51ZV0JCVdoZW4gdXNlZCBpbnNpZGUgYSAiOndoaWxlIiwganVtcHMgYmFjayB0byB0aGUKKwkJCSI6d2hpbGUiLiAgSWYgaXQgaXMgdXNlZCBhZnRlciBhIHw6dHJ5fCBpbnNpZGUgdGhlCisJCQkiOndoaWxlIiBidXQgYmVmb3JlIHRoZSBtYXRjaGluZyB8OmZpbmFsbHl8IChpZgorCQkJcHJlc2VudCksIHRoZSBjb21tYW5kcyBmb2xsb3dpbmcgdGhlICI6ZmluYWxseSIgdXAgdG8KKwkJCXRoZSBtYXRjaGluZyB8OmVuZHRyeXwgYXJlIGV4ZWN1dGVkIGZpcnN0LiAgVGhpcworCQkJcHJvY2VzcyBhcHBsaWVzIHRvIGFsbCBuZXN0ZWQgIjp0cnkicyBpbnNpZGUgdGhlCisJCQkiOndoaWxlIi4gIFRoZSBvdXRlcm1vc3QgIjplbmR0cnkiIHRoZW4ganVtcHMgYmFjayB0bworCQkJdGhlICI6d2hpbGUiLgorCisJCQkJCQkqOmJyZWFrKiAqOmJyZWEqICpFNTg3KgorOmJyZWFba10JCVdoZW4gdXNlZCBpbnNpZGUgYSAiOndoaWxlIiwgc2tpcHMgdG8gdGhlIGNvbW1hbmQKKwkJCWFmdGVyIHRoZSBtYXRjaGluZyAiOmVuZHdoaWxlIi4gIElmIGl0IGlzIHVzZWQgYWZ0ZXIKKwkJCWEgfDp0cnl8IGluc2lkZSB0aGUgIjp3aGlsZSIgYnV0IGJlZm9yZSB0aGUgbWF0Y2hpbmcKKwkJCXw6ZmluYWxseXwgKGlmIHByZXNlbnQpLCB0aGUgY29tbWFuZHMgZm9sbG93aW5nIHRoZQorCQkJIjpmaW5hbGx5IiB1cCB0byB0aGUgbWF0Y2hpbmcgfDplbmR0cnl8IGFyZSBleGVjdXRlZAorCQkJZmlyc3QuICBUaGlzIHByb2Nlc3MgYXBwbGllcyB0byBhbGwgbmVzdGVkICI6dHJ5InMKKwkJCWluc2lkZSB0aGUgIjp3aGlsZSIuICBUaGUgb3V0ZXJtb3N0ICI6ZW5kdHJ5IiB0aGVuCisJCQlqdW1wcyB0byB0aGUgY29tbWFuZCBhZnRlciB0aGUgIjplbmR3aGlsZSIuCisKKzp0cnkJCQkJKjp0cnkqICo6ZW5kdCogKjplbmR0cnkqICpFNjAwKiAqRTYwMSogKkU2MDIqCis6ZW5kdFtyeV0JCUNoYW5nZSB0aGUgZXJyb3IgaGFuZGxpbmcgZm9yIHRoZSBjb21tYW5kcyBiZXR3ZWVuCisJCQkiOnRyeSIgYW5kICI6ZW5kdHJ5IiBpbmNsdWRpbmcgZXZlcnl0aGluZyBiZWluZworCQkJZXhlY3V0ZWQgYWNyb3NzICI6c291cmNlIiBjb21tYW5kcywgZnVuY3Rpb24gY2FsbHMsCisJCQlvciBhdXRvY29tbWFuZCBpbnZvY2F0aW9ucy4KKworCQkJV2hlbiBhbiBlcnJvciBvciBpbnRlcnJ1cHQgaXMgZGV0ZWN0ZWQgYW5kIHRoZXJlIGlzCisJCQlhIHw6ZmluYWxseXwgY29tbWFuZCBmb2xsb3dpbmcsIGV4ZWN1dGlvbiBjb250aW51ZXMKKwkJCWFmdGVyIHRoZSAiOmZpbmFsbHkiLiAgT3RoZXJ3aXNlLCBvciB3aGVuIHRoZQorCQkJIjplbmR0cnkiIGlzIHJlYWNoZWQgdGhlcmVhZnRlciwgdGhlIG5leHQKKwkJCShkeW5hbWljYWxseSkgc3Vycm91bmRpbmcgIjp0cnkiIGlzIGNoZWNrZWQgZm9yCisJCQlhIGNvcnJlc3BvbmRpbmcgIjpmaW5hbGx5IiBldGMuICBUaGVuIHRoZSBzY3JpcHQKKwkJCXByb2Nlc3NpbmcgaXMgdGVybWluYXRlZC4gIChXaGV0aGVyIGEgZnVuY3Rpb24KKwkJCWRlZmluaXRpb24gaGFzIGFuICJhYm9ydCIgYXJndW1lbnQgZG9lcyBub3QgbWF0dGVyLikKKwkJCUV4YW1wbGU6ID4KKwkJOnRyeSB8IGVkaXQgdG9vIG11Y2ggfCBmaW5hbGx5IHwgZWNobyAiY2xlYW51cCIgfCBlbmR0cnkKKwkJOmVjaG8gImltcG9zc2libGUiCSIgbm90IHJlYWNoZWQsIHNjcmlwdCB0ZXJtaW5hdGVkIGFib3ZlCis8CisJCQlNb3Jlb3ZlciwgYW4gZXJyb3Igb3IgaW50ZXJydXB0IChkeW5hbWljYWxseSkgaW5zaWRlCisJCQkiOnRyeSIgYW5kICI6ZW5kdHJ5IiBpcyBjb252ZXJ0ZWQgdG8gYW4gZXhjZXB0aW9uLiAgSXQKKwkJCWNhbiBiZSBjYXVnaHQgYXMgaWYgaXQgd2VyZSB0aHJvd24gYnkgYSB8OnRocm93fAorCQkJY29tbWFuZCAoc2VlIHw6Y2F0Y2h8KS4gIEluIHRoaXMgY2FzZSwgdGhlIHNjcmlwdAorCQkJcHJvY2Vzc2luZyBpcyBub3QgdGVybWluYXRlZC4KKworCQkJVGhlIHZhbHVlICJWaW06SW50ZXJydXB0IiBpcyB1c2VkIGZvciBhbiBpbnRlcnJ1cHQKKwkJCWV4Y2VwdGlvbi4gIEFuIGVycm9yIGluIGEgVmltIGNvbW1hbmQgaXMgY29udmVydGVkCisJCQl0byBhIHZhbHVlIG9mIHRoZSBmb3JtICJWaW0oe2NvbW1hbmR9KTp7ZXJybXNnfSIsCisJCQlvdGhlciBlcnJvcnMgYXJlIGNvbnZlcnRlZCB0byBhIHZhbHVlIG9mIHRoZSBmb3JtCisJCQkiVmltOntlcnJtc2d9Ii4gIHtjb21tYW5kfSBpcyB0aGUgZnVsbCBjb21tYW5kIG5hbWUsCisJCQlhbmQge2Vycm1zZ30gaXMgdGhlIG1lc3NhZ2UgdGhhdCBpcyBkaXNwbGF5ZWQgaWYgdGhlCisJCQllcnJvciBleGNlcHRpb24gaXMgbm90IGNhdWdodCwgYWx3YXlzIGJlZ2lubmluZyB3aXRoCisJCQl0aGUgZXJyb3IgbnVtYmVyLgorCQkJRXhhbXBsZXM6ID4KKwkJOnRyeSB8IHNsZWVwIDEwMCB8IGNhdGNoIC9eVmltOkludGVycnVwdCQvIHwgZW5kdHJ5CisJCTp0cnkgfCBlZGl0IHwgY2F0Y2ggL15WaW0oZWRpdCk6RVxkXCsvIHwgZWNobyAiZXJyb3IiIHwgZW5kdHJ5Cis8CisJCQkJCSo6Y2F0KiAqOmNhdGNoKiAqRTYwMyogKkU2MDQqICpFNjA1KgorOmNhdFtjaF0gL3twYXR0ZXJufS8JVGhlIGZvbGxvd2luZyBjb21tYW5kcyB1bnRpbCB0aGUgbmV4dCAiOmNhdGNoIiwKKwkJCXw6ZmluYWxseXwsIG9yIHw6ZW5kdHJ5fCB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNhbWUKKwkJCXw6dHJ5fCBhcyB0aGUgIjpjYXRjaCIgYXJlIGV4ZWN1dGVkIHdoZW4gYW4gZXhjZXB0aW9uCisJCQltYXRjaGluZyB7cGF0dGVybn0gaXMgYmVpbmcgdGhyb3duIGFuZCBoYXMgbm90IHlldAorCQkJYmVlbiBjYXVnaHQgYnkgYSBwcmV2aW91cyAiOmNhdGNoIi4gIE90aGVyd2lzZSwgdGhlc2UKKwkJCWNvbW1hbmRzIGFyZSBza2lwcGVkLgorCQkJV2hlbiB7cGF0dGVybn0gaXMgb21pdHRlZCBhbGwgZXJyb3JzIGFyZSBjYXVnaHQuCisJCQlFeGFtcGxlczogPgorCQk6Y2F0Y2ggL15WaW06SW50ZXJydXB0JC8JIiBjYXRjaCBpbnRlcnJ1cHRzIChDVFJMLUMpCisJCTpjYXRjaCAvXlZpbVwlKChcYVwrKVwpXD06RS8JIiBjYXRjaCBhbGwgVmltIGVycm9ycworCQk6Y2F0Y2ggL15WaW1cJSgoXGFcKylcKVw9Oi8JIiBjYXRjaCBlcnJvcnMgYW5kIGludGVycnVwdHMKKwkJOmNhdGNoIC9eVmltKHdyaXRlKTovCQkiIGNhdGNoIGFsbCBlcnJvcnMgaW4gOndyaXRlCisJCTpjYXRjaCAvXlZpbVwlKChcYVwrKVwpXD06RTEyMy8JIiBjYXRjaCBlcnJvciBFMTIzCisJCTpjYXRjaCAvbXktZXhjZXB0aW9uLwkJIiBjYXRjaCB1c2VyIGV4Y2VwdGlvbgorCQk6Y2F0Y2ggLy4qLwkJCSIgY2F0Y2ggZXZlcnl0aGluZworCQk6Y2F0Y2gJCQkJIiBzYW1lIGFzIC8uKi8KKzwKKwkJCUFub3RoZXIgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgLyBhcm91bmQgdGhlCisJCQl7cGF0dGVybn0sIHNvIGxvbmcgYXMgaXQgZG9lcyBub3QgaGF2ZSBhIHNwZWNpYWwKKwkJCW1lYW5pbmcgKGUuZy4sICd8JyBvciAnIicpIGFuZCBkb2Vzbid0IG9jY3VyIGluc2lkZQorCQkJe3BhdHRlcm59LgorCQkJTk9URTogSXQgaXMgbm90IHJlbGlhYmxlIHRvICI6Y2F0Y2giIHRoZSBURVhUIG9mCisJCQlhbiBlcnJvciBtZXNzYWdlIGJlY2F1c2UgaXQgbWF5IHZhcnkgaW4gZGlmZmVyZW50CisJCQlsb2NhbGVzLgorCisJCQkJCSo6ZmluYSogKjpmaW5hbGx5KiAqRTYwNiogKkU2MDcqCis6ZmluYVtsbHldCQlUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHVudGlsIHRoZSBtYXRjaGluZyB8OmVuZHRyeXwKKwkJCWFyZSBleGVjdXRlZCB3aGVuZXZlciB0aGUgcGFydCBiZXR3ZWVuIHRoZSBtYXRjaGluZworCQkJfDp0cnl8IGFuZCB0aGUgIjpmaW5hbGx5IiBpcyBsZWZ0OiAgZWl0aGVyIGJ5IGZhbGxpbmcKKwkJCXRocm91Z2ggdG8gdGhlICI6ZmluYWxseSIgb3IgYnkgYSB8OmNvbnRpbnVlfCwKKwkJCXw6YnJlYWt8LCB8OmZpbmlzaHwsIG9yIHw6cmV0dXJufCwgb3IgYnkgYW4gZXJyb3Igb3IKKwkJCWludGVycnVwdCBvciBleGNlcHRpb24gKHNlZSB8OnRocm93fCkuCisKKwkJCQkJCQkqOnRoKiAqOnRocm93KiAqRTYwOCoKKzp0aFtyb3ddIHtleHByMX0JVGhlIHtleHByMX0gaXMgZXZhbHVhdGVkIGFuZCB0aHJvd24gYXMgYW4gZXhjZXB0aW9uLgorCQkJSWYgdGhlICI6dGhyb3ciIGlzIHVzZWQgYWZ0ZXIgYSB8OnRyeXwgYnV0IGJlZm9yZSB0aGUKKwkJCWZpcnN0IGNvcnJlc3BvbmRpbmcgfDpjYXRjaHwsIGNvbW1hbmRzIGFyZSBza2lwcGVkCisJCQl1bnRpbCB0aGUgZmlyc3QgIjpjYXRjaCIgbWF0Y2hpbmcge2V4cHIxfSBpcyByZWFjaGVkLgorCQkJSWYgdGhlcmUgaXMgbm8gc3VjaCAiOmNhdGNoIiBvciBpZiB0aGUgIjp0aHJvdyIgaXMKKwkJCXVzZWQgYWZ0ZXIgYSAiOmNhdGNoIiBidXQgYmVmb3JlIHRoZSB8OmZpbmFsbHl8LCB0aGUKKwkJCWNvbW1hbmRzIGZvbGxvd2luZyB0aGUgIjpmaW5hbGx5IiAoaWYgcHJlc2VudCkgdXAgdG8KKwkJCXRoZSBtYXRjaGluZyB8OmVuZHRyeXwgYXJlIGV4ZWN1dGVkLiAgSWYgdGhlICI6dGhyb3ciCisJCQlpcyBhZnRlciB0aGUgIjpmaW5hbGx5IiwgY29tbWFuZHMgdXAgdG8gdGhlICI6ZW5kdHJ5IgorCQkJYXJlIHNraXBwZWQuICBBdCB0aGUgIjplbmR0cnkiLCB0aGlzIHByb2Nlc3MgYXBwbGllcworCQkJYWdhaW4gZm9yIHRoZSBuZXh0IGR5bmFtaWNhbGx5IHN1cnJvdW5kaW5nICI6dHJ5IgorCQkJKHdoaWNoIG1heSBiZSBmb3VuZCBpbiBhIGNhbGxpbmcgZnVuY3Rpb24gb3Igc291cmNpbmcKKwkJCXNjcmlwdCksIHVudGlsIGEgbWF0Y2hpbmcgIjpjYXRjaCIgaGFzIGJlZW4gZm91bmQuCisJCQlJZiB0aGUgZXhjZXB0aW9uIGlzIG5vdCBjYXVnaHQsIHRoZSBjb21tYW5kIHByb2Nlc3NpbmcKKwkJCWlzIHRlcm1pbmF0ZWQuCisJCQlFeGFtcGxlOiA+CisJCTp0cnkgfCB0aHJvdyAib29wcyIgfCBjYXRjaCAvXm9vLyB8IGVjaG8gImNhdWdodCIgfCBlbmR0cnkKKzwKKworCQkJCQkJCSo6ZWMqICo6ZWNobyoKKzplY1tob10ge2V4cHIxfSAuLglFY2hvZXMgZWFjaCB7ZXhwcjF9LCB3aXRoIGEgc3BhY2UgaW4gYmV0d2Vlbi4gIFRoZQorCQkJZmlyc3Qge2V4cHIxfSBzdGFydHMgb24gYSBuZXcgbGluZS4KKwkJCUFsc28gc2VlIHw6Y29tbWVudHwuCisJCQlVc2UgIlxuIiB0byBzdGFydCBhIG5ldyBsaW5lLiAgVXNlICJcciIgdG8gbW92ZSB0aGUKKwkJCWN1cnNvciB0byB0aGUgZmlyc3QgY29sdW1uLgorCQkJVXNlcyB0aGUgaGlnaGxpZ2h0aW5nIHNldCBieSB0aGUgfDplY2hvaGx8IGNvbW1hbmQuCisJCQlDYW5ub3QgYmUgZm9sbG93ZWQgYnkgYSBjb21tZW50LgorCQkJRXhhbXBsZTogPgorCQk6ZWNobyAidGhlIHZhbHVlIG9mICdzaGVsbCcgaXMiICZzaGVsbAorPAkJCUEgbGF0ZXIgcmVkcmF3IG1heSBtYWtlIHRoZSBtZXNzYWdlIGRpc2FwcGVhciBhZ2Fpbi4KKwkJCVRvIGF2b2lkIHRoYXQgYSBjb21tYW5kIGZyb20gYmVmb3JlIHRoZSAiOmVjaG8iIGNhdXNlcworCQkJYSByZWRyYXcgYWZ0ZXJ3YXJkcyAocmVkcmF3cyBhcmUgb2Z0ZW4gcG9zdHBvbmVkIHVudGlsCisJCQl5b3UgdHlwZSBzb21ldGhpbmcpLCBmb3JjZSBhIHJlZHJhdyB3aXRoIHRoZSB8OnJlZHJhd3wKKwkJCWNvbW1hbmQuICBFeGFtcGxlOiA+CisJCTpuZXcgfCByZWRyYXcgfCBlY2hvICJ0aGVyZSBpcyBhIG5ldyB3aW5kb3ciCis8CisJCQkJCQkJKjplY2hvbioKKzplY2hvbiB7ZXhwcjF9IC4uCUVjaG9lcyBlYWNoIHtleHByMX0sIHdpdGhvdXQgYW55dGhpbmcgYWRkZWQuICBBbHNvIHNlZQorCQkJfDpjb21tZW50fC4KKwkJCVVzZXMgdGhlIGhpZ2hsaWdodGluZyBzZXQgYnkgdGhlIHw6ZWNob2hsfCBjb21tYW5kLgorCQkJQ2Fubm90IGJlIGZvbGxvd2VkIGJ5IGEgY29tbWVudC4KKwkJCUV4YW1wbGU6ID4KKwkJCQk6ZWNob24gInRoZSB2YWx1ZSBvZiAnc2hlbGwnIGlzICIgJnNoZWxsCis8CisJCQlOb3RlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdXNpbmcgIjplY2hvIiwgd2hpY2ggaXMgYQorCQkJVmltIGNvbW1hbmQsIGFuZCAiOiFlY2hvIiwgd2hpY2ggaXMgYW4gZXh0ZXJuYWwgc2hlbGwKKwkJCWNvbW1hbmQ6ID4KKwkJOiFlY2hvICUJCS0tPiBmaWxlbmFtZQorPAkJCVRoZSBhcmd1bWVudHMgb2YgIjohIiBhcmUgZXhwYW5kZWQsIHNlZSB8Ol8lfC4gPgorCQk6IWVjaG8gIiUiCQktLT4gZmlsZW5hbWUgb3IgImZpbGVuYW1lIgorPAkJCUxpa2UgdGhlIHByZXZpb3VzIGV4YW1wbGUuICBXaGV0aGVyIHlvdSBzZWUgdGhlIGRvdWJsZQorCQkJcXVvdGVzIG9yIG5vdCBkZXBlbmRzIG9uIHlvdXIgJ3NoZWxsJy4gPgorCQk6ZWNobyAlCQkJLS0+IG5vdGhpbmcKKzwJCQlUaGUgJyUnIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGluIGFuIGV4cHJlc3Npb24uID4KKwkJOmVjaG8gIiUiCQktLT4gJQorPAkJCVRoaXMganVzdCBlY2hvZXMgdGhlICclJyBjaGFyYWN0ZXIuID4KKwkJOmVjaG8gZXhwYW5kKCIlIikJLS0+IGZpbGVuYW1lCis8CQkJVGhpcyBjYWxscyB0aGUgZXhwYW5kKCkgZnVuY3Rpb24gdG8gZXhwYW5kIHRoZSAnJScuCisKKwkJCQkJCQkqOmVjaG9oKiAqOmVjaG9obCoKKzplY2hvaFtsXSB7bmFtZX0JVXNlIHRoZSBoaWdobGlnaHQgZ3JvdXAge25hbWV9IGZvciB0aGUgZm9sbG93aW5nCisJCQl8OmVjaG98LCB8OmVjaG9ufCBhbmQgfDplY2hvbXNnfCBjb21tYW5kcy4gIEFsc28gdXNlZAorCQkJZm9yIHRoZSB8aW5wdXQoKXwgcHJvbXB0LiAgRXhhbXBsZTogPgorCQk6ZWNob2hsIFdhcm5pbmdNc2cgfCBlY2hvICJEb24ndCBwYW5pYyEiIHwgZWNob2hsIE5vbmUKKzwJCQlEb24ndCBmb3JnZXQgdG8gc2V0IHRoZSBncm91cCBiYWNrIHRvICJOb25lIiwKKwkJCW90aGVyd2lzZSBhbGwgZm9sbG93aW5nIGVjaG8ncyB3aWxsIGJlIGhpZ2hsaWdodGVkLgorCisJCQkJCQkJKjplY2hvbSogKjplY2hvbXNnKgorOmVjaG9tW3NnXSB7ZXhwcjF9IC4uCUVjaG8gdGhlIGV4cHJlc3Npb24ocykgYXMgYSB0cnVlIG1lc3NhZ2UsIHNhdmluZyB0aGUKKwkJCW1lc3NhZ2UgaW4gdGhlIHxtZXNzYWdlLWhpc3Rvcnl8LgorCQkJU3BhY2VzIGFyZSBwbGFjZWQgYmV0d2VlbiB0aGUgYXJndW1lbnRzIGFzIHdpdGggdGhlCisJCQl8OmVjaG98IGNvbW1hbmQuICBCdXQgdW5wcmludGFibGUgY2hhcmFjdGVycyBhcmUKKwkJCWRpc3BsYXllZCwgbm90IGludGVycHJldGVkLgorCQkJVXNlcyB0aGUgaGlnaGxpZ2h0aW5nIHNldCBieSB0aGUgfDplY2hvaGx8IGNvbW1hbmQuCisJCQlFeGFtcGxlOiA+CisJCTplY2hvbXNnICJJdCdzIGEgWml6emVyIFphenplciBadXp6LCBhcyB5b3UgY2FuIHBsYWlubHkgc2VlLiIKKzwKKwkJCQkJCQkqOmVjaG9lKiAqOmVjaG9lcnIqCis6ZWNob2VbcnJdIHtleHByMX0gLi4JRWNobyB0aGUgZXhwcmVzc2lvbihzKSBhcyBhbiBlcnJvciBtZXNzYWdlLCBzYXZpbmcgdGhlCisJCQltZXNzYWdlIGluIHRoZSB8bWVzc2FnZS1oaXN0b3J5fC4gIFdoZW4gdXNlZCBpbiBhCisJCQlzY3JpcHQgb3IgZnVuY3Rpb24gdGhlIGxpbmUgbnVtYmVyIHdpbGwgYmUgYWRkZWQuCisJCQlTcGFjZXMgYXJlIHBsYWNlZCBiZXR3ZWVuIHRoZSBhcmd1bWVudHMgYXMgd2l0aCB0aGUKKwkJCTplY2hvIGNvbW1hbmQuICBXaGVuIHVzZWQgaW5zaWRlIGEgdHJ5IGNvbmRpdGlvbmFsLAorCQkJdGhlIG1lc3NhZ2UgaXMgcmFpc2VkIGFzIGFuIGVycm9yIGV4Y2VwdGlvbiBpbnN0ZWFkCisJCQkoc2VlIHx0cnktZWNob2VycnwpLgorCQkJRXhhbXBsZTogPgorCQk6ZWNob2VyciAiVGhpcyBzY3JpcHQganVzdCBmYWlsZWQhIgorPAkJCUlmIHlvdSBqdXN0IHdhbnQgYSBoaWdobGlnaHRlZCBtZXNzYWdlIHVzZSB8OmVjaG9obHwuCisJCQlBbmQgdG8gZ2V0IGEgYmVlcDogPgorCQk6ZXhlICJub3JtYWwgXDxFc2M+IgorPAorCQkJCQkJCSo6ZXhlKiAqOmV4ZWN1dGUqCis6ZXhlW2N1dGVdIHtleHByMX0gLi4JRXhlY3V0ZXMgdGhlIHN0cmluZyB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgZXZhbHVhdGlvbgorCQkJb2Yge2V4cHIxfSBhcyBhbiBFeCBjb21tYW5kLiAgTXVsdGlwbGUgYXJndW1lbnRzIGFyZQorCQkJY29uY2F0ZW5hdGVkLCB3aXRoIGEgc3BhY2UgaW4gYmV0d2Vlbi4gIHtleHByMX0gaXMKKwkJCXVzZWQgYXMgdGhlIHByb2Nlc3NlZCBjb21tYW5kLCBjb21tYW5kIGxpbmUgZWRpdGluZworCQkJa2V5cyBhcmUgbm90IHJlY29nbml6ZWQuCisJCQlDYW5ub3QgYmUgZm9sbG93ZWQgYnkgYSBjb21tZW50LgorCQkJRXhhbXBsZXM6ID4KKwkJOmV4ZWN1dGUgImJ1ZmZlciAiIG5leHRidWYKKwkJOmV4ZWN1dGUgIm5vcm1hbCAiIGNvdW50IC4gInciCis8CisJCQkiOmV4ZWN1dGUiIGNhbiBiZSB1c2VkIHRvIGFwcGVuZCBhIGNvbW1hbmQgdG8gY29tbWFuZHMKKwkJCXRoYXQgZG9uJ3QgYWNjZXB0IGEgJ3wnLiAgRXhhbXBsZTogPgorCQk6ZXhlY3V0ZSAnIWxzJyB8IGVjaG8gInRoZWVuZCIKKworPAkJCSI6ZXhlY3V0ZSIgaXMgYWxzbyBhIG5pY2Ugd2F5IHRvIGF2b2lkIGhhdmluZyB0byB0eXBlCisJCQljb250cm9sIGNoYXJhY3RlcnMgaW4gYSBWaW0gc2NyaXB0IGZvciBhICI6bm9ybWFsIgorCQkJY29tbWFuZDogPgorCQk6ZXhlY3V0ZSAibm9ybWFsIGl4eHhcPEVzYz4iCis8CQkJVGhpcyBoYXMgYW4gPEVzYz4gY2hhcmFjdGVyLCBzZWUgfGV4cHItc3RyaW5nfC4KKworCQkJTm90ZTogVGhlIGV4ZWN1dGVkIHN0cmluZyBtYXkgYmUgYW55IGNvbW1hbmQtbGluZSwgYnV0CisJCQl5b3UgY2Fubm90IHN0YXJ0IG9yIGVuZCBhICJ3aGlsZSIgb3IgImlmIiBjb21tYW5kLgorCQkJVGh1cyB0aGlzIGlzIGlsbGVnYWw6ID4KKwkJOmV4ZWN1dGUgJ3doaWxlIGkgPiA1JworCQk6ZXhlY3V0ZSAnZWNobyAidGVzdCIgfCBicmVhaycKKzwKKwkJCUl0IGlzIGFsbG93ZWQgdG8gaGF2ZSBhICJ3aGlsZSIgb3IgImlmIiBjb21tYW5kCisJCQljb21wbGV0ZWx5IGluIHRoZSBleGVjdXRlZCBzdHJpbmc6ID4KKwkJOmV4ZWN1dGUgJ3doaWxlIGkgPCA1IHwgZWNobyBpIHwgbGV0IGkgPSBpICsgMSB8IGVuZHdoaWxlJworPAorCisJCQkJCQkJKjpjb21tZW50KgorCQkJIjpleGVjdXRlIiwgIjplY2hvIiBhbmQgIjplY2hvbiIgY2Fubm90IGJlIGZvbGxvd2VkIGJ5CisJCQlhIGNvbW1lbnQgZGlyZWN0bHksIGJlY2F1c2UgdGhleSBzZWUgdGhlICciJyBhcyB0aGUKKwkJCXN0YXJ0IG9mIGEgc3RyaW5nLiAgQnV0LCB5b3UgY2FuIHVzZSAnfCcgZm9sbG93ZWQgYnkgYQorCQkJY29tbWVudC4gIEV4YW1wbGU6ID4KKwkJOmVjaG8gImZvbyIgfCAidGhpcyBpcyBhIGNvbW1lbnQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBFeGNlcHRpb24gaGFuZGxpbmcJCQkJCSpleGNlcHRpb24taGFuZGxpbmcqCisKK1RoZSBWaW0gc2NyaXB0IGxhbmd1YWdlIGNvbXByaXNlcyBhbiBleGNlcHRpb24gaGFuZGxpbmcgZmVhdHVyZS4gIFRoaXMgc2VjdGlvbgorZXhwbGFpbnMgaG93IGl0IGNhbiBiZSB1c2VkIGluIGEgVmltIHNjcmlwdC4KKworRXhjZXB0aW9ucyBtYXkgYmUgcmFpc2VkIGJ5IFZpbSBvbiBhbiBlcnJvciBvciBvbiBpbnRlcnJ1cHQsIHNlZQorfGNhdGNoLWVycm9yc3wgYW5kIHxjYXRjaC1pbnRlcnJ1cHR8LiAgWW91IGNhbiBhbHNvIGV4cGxpY2l0bHkgdGhyb3cgYW4KK2V4Y2VwdGlvbiBieSB1c2luZyB0aGUgIjp0aHJvdyIgY29tbWFuZCwgc2VlIHx0aHJvdy1jYXRjaHwuCisKKworVFJZIENPTkRJVElPTkFMUwkJCQkJKnRyeS1jb25kaXRpb25hbHMqCisKK0V4Y2VwdGlvbnMgY2FuIGJlIGNhdWdodCBvciBjYW4gY2F1c2UgY2xlYW51cCBjb2RlIHRvIGJlIGV4ZWN1dGVkLiAgWW91IGNhbgordXNlIGEgdHJ5IGNvbmRpdGlvbmFsIHRvIHNwZWNpZnkgY2F0Y2ggY2xhdXNlcyAodGhhdCBjYXRjaCBleGNlcHRpb25zKSBhbmQvb3IKK2EgZmluYWxseSBjbGF1c2UgKHRvIGJlIGV4ZWN1dGVkIGZvciBjbGVhbnVwKS4KKyAgIEEgdHJ5IGNvbmRpdGlvbmFsIGJlZ2lucyB3aXRoIGEgfDp0cnl8IGNvbW1hbmQgYW5kIGVuZHMgYXQgdGhlIG1hdGNoaW5nCit8OmVuZHRyeXwgY29tbWFuZC4gIEluIGJldHdlZW4sIHlvdSBjYW4gdXNlIGEgfDpjYXRjaHwgY29tbWFuZCB0byBzdGFydAorYSBjYXRjaCBjbGF1c2UsIG9yIGEgfDpmaW5hbGx5fCBjb21tYW5kIHRvIHN0YXJ0IGEgZmluYWxseSBjbGF1c2UuICBUaGVyZSBtYXkKK2JlIG5vbmUgb3IgbXVsdGlwbGUgY2F0Y2ggY2xhdXNlcywgYnV0IHRoZXJlIGlzIGF0IG1vc3Qgb25lIGZpbmFsbHkgY2xhdXNlLAord2hpY2ggbXVzdCBub3QgYmUgZm9sbG93ZWQgYnkgYW55IGNhdGNoIGNsYXVzZXMuICBUaGUgbGluZXMgYmVmb3JlIHRoZSBjYXRjaAorY2xhdXNlcyBhbmQgdGhlIGZpbmFsbHkgY2xhdXNlIGlzIGNhbGxlZCBhIHRyeSBibG9jay4gPgorCisgICAgIDp0cnkKKyAgICAgOiAgLi4uCisgICAgIDogIC4uLgkJCQlUUlkgQkxPQ0sKKyAgICAgOiAgLi4uCisgICAgIDpjYXRjaCAve3BhdHRlcm59LworICAgICA6ICAuLi4KKyAgICAgOiAgLi4uCQkJCUNBVENIIENMQVVTRQorICAgICA6ICAuLi4KKyAgICAgOmNhdGNoIC97cGF0dGVybn0vCisgICAgIDogIC4uLgorICAgICA6ICAuLi4JCQkJQ0FUQ0ggQ0xBVVNFCisgICAgIDogIC4uLgorICAgICA6ZmluYWxseQorICAgICA6ICAuLi4KKyAgICAgOiAgLi4uCQkJCUZJTkFMTFkgQ0xBVVNFCisgICAgIDogIC4uLgorICAgICA6ZW5kdHJ5CisKK1RoZSB0cnkgY29uZGl0aW9uYWwgYWxsb3dzIHRvIHdhdGNoIGNvZGUgZm9yIGV4Y2VwdGlvbnMgYW5kIHRvIHRha2UgdGhlCithcHByb3ByaWF0ZSBhY3Rpb25zLiAgRXhjZXB0aW9ucyBmcm9tIHRoZSB0cnkgYmxvY2sgbWF5IGJlIGNhdWdodC4gIEV4Y2VwdGlvbnMKK2Zyb20gdGhlIHRyeSBibG9jayBhbmQgYWxzbyB0aGUgY2F0Y2ggY2xhdXNlcyBtYXkgY2F1c2UgY2xlYW51cCBhY3Rpb25zLgorICAgV2hlbiBubyBleGNlcHRpb24gaXMgdGhyb3duIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIHRyeSBibG9jaywgdGhlIGNvbnRyb2wKK2lzIHRyYW5zZmVycmVkIHRvIHRoZSBmaW5hbGx5IGNsYXVzZSwgaWYgcHJlc2VudC4gIEFmdGVyIGl0cyBleGVjdXRpb24sIHRoZQorc2NyaXB0IGNvbnRpbnVlcyB3aXRoIHRoZSBsaW5lIGZvbGxvd2luZyB0aGUgIjplbmR0cnkiLgorICAgV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIHRyeSBibG9jaywgdGhlIHJlbWFpbmluZworbGluZXMgaW4gdGhlIHRyeSBibG9jayBhcmUgc2tpcHBlZC4gIFRoZSBleGNlcHRpb24gaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZQorcGF0dGVybnMgc3BlY2lmaWVkIGFzIGFyZ3VtZW50cyB0byB0aGUgIjpjYXRjaCIgY29tbWFuZHMuICBUaGUgY2F0Y2ggY2xhdXNlCithZnRlciB0aGUgZmlyc3QgbWF0Y2hpbmcgIjpjYXRjaCIgaXMgdGFrZW4sIG90aGVyIGNhdGNoIGNsYXVzZXMgYXJlIG5vdAorZXhlY3V0ZWQuICBUaGUgY2F0Y2ggY2xhdXNlIGVuZHMgd2hlbiB0aGUgbmV4dCAiOmNhdGNoIiwgIjpmaW5hbGx5Iiwgb3IKKyI6ZW5kdHJ5IiBjb21tYW5kIGlzIHJlYWNoZWQgLSB3aGF0ZXZlciBpcyBmaXJzdC4gIFRoZW4sIHRoZSBmaW5hbGx5IGNsYXVzZQorKGlmIHByZXNlbnQpIGlzIGV4ZWN1dGVkLiAgV2hlbiB0aGUgIjplbmR0cnkiIGlzIHJlYWNoZWQsIHRoZSBzY3JpcHQgZXhlY3V0aW9uCitjb250aW51ZXMgaW4gdGhlIGZvbGxvd2luZyBsaW5lIGFzIHVzdWFsLgorICAgV2hlbiBhbiBleGNlcHRpb24gdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIHBhdHRlcm5zIHNwZWNpZmllZCBieSB0aGUKKyI6Y2F0Y2giIGNvbW1hbmRzIGlzIHRocm93biBpbiB0aGUgdHJ5IGJsb2NrLCB0aGUgZXhjZXB0aW9uIGlzIG5vdCBjYXVnaHQgYnkKK3RoYXQgdHJ5IGNvbmRpdGlvbmFsIGFuZCBub25lIG9mIHRoZSBjYXRjaCBjbGF1c2VzIGlzIGV4ZWN1dGVkLiAgT25seSB0aGUKK2ZpbmFsbHkgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyB0YWtlbi4gIFRoZSBleGNlcHRpb24gcGVuZHMgZHVyaW5nIGV4ZWN1dGlvbiBvZgordGhlIGZpbmFsbHkgY2xhdXNlLiAgSXQgaXMgcmVzdW1lZCBhdCB0aGUgIjplbmR0cnkiLCBzbyB0aGF0IGNvbW1hbmRzIGFmdGVyCit0aGUgIjplbmR0cnkiIGFyZSBub3QgZXhlY3V0ZWQgYW5kIHRoZSBleGNlcHRpb24gbWlnaHQgYmUgY2F1Z2h0IGVsc2V3aGVyZSwKK3NlZSB8dHJ5LW5lc3Rpbmd8LgorICAgV2hlbiBkdXJpbmcgZXhlY3V0aW9uIG9mIGEgY2F0Y2ggY2xhdXNlIGFub3RoZXIgZXhjZXB0aW9uIGlzIHRocm93biwgdGhlCityZW1haW5pbmcgbGluZXMgaW4gdGhhdCBjYXRjaCBjbGF1c2UgYXJlIG5vdCBleGVjdXRlZC4gIFRoZSBuZXcgZXhjZXB0aW9uIGlzCitub3QgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBwYXR0ZXJucyBpbiBhbnkgb2YgdGhlICI6Y2F0Y2giIGNvbW1hbmRzIG9mIHRoZSBzYW1lCit0cnkgY29uZGl0aW9uYWwgYW5kIG5vbmUgb2YgaXRzIGNhdGNoIGNsYXVzZXMgaXMgdGFrZW4uICBJZiB0aGVyZSBpcywgaG93ZXZlciwKK2EgZmluYWxseSBjbGF1c2UsIGl0IGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGV4Y2VwdGlvbiBwZW5kcyBkdXJpbmcgaXRzCitleGVjdXRpb24uICBUaGUgY29tbWFuZHMgZm9sbG93aW5nIHRoZSAiOmVuZHRyeSIgYXJlIG5vdCBleGVjdXRlZC4gIFRoZSBuZXcKK2V4Y2VwdGlvbiBtaWdodCwgaG93ZXZlciwgYmUgY2F1Z2h0IGVsc2V3aGVyZSwgc2VlIHx0cnktbmVzdGluZ3wuCisgICBXaGVuIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIGZpbmFsbHkgY2xhdXNlIChpZiBwcmVzZW50KSBhbiBleGNlcHRpb24gaXMKK3Rocm93biwgdGhlIHJlbWFpbmluZyBsaW5lcyBpbiB0aGUgZmluYWxseSBjbGF1c2UgYXJlIHNraXBwZWQuICBJZiB0aGUgZmluYWxseQorY2xhdXNlIGhhcyBiZWVuIHRha2VuIGJlY2F1c2Ugb2YgYW4gZXhjZXB0aW9uIGZyb20gdGhlIHRyeSBibG9jayBvciBvbmUgb2YgdGhlCitjYXRjaCBjbGF1c2VzLCB0aGUgb3JpZ2luYWwgKHBlbmRpbmcpIGV4Y2VwdGlvbiBpcyBkaXNjYXJkZWQuICBUaGUgY29tbWFuZHMKK2ZvbGxvd2luZyB0aGUgIjplbmR0cnkiIGFyZSBub3QgZXhlY3V0ZWQsIGFuZCB0aGUgZXhjZXB0aW9uIGZyb20gdGhlIGZpbmFsbHkKK2NsYXVzZSBpcyBwcm9wYWdhdGVkIGFuZCBjYW4gYmUgY2F1Z2h0IGVsc2V3aGVyZSwgc2VlIHx0cnktbmVzdGluZ3wuCisKK1RoZSBmaW5hbGx5IGNsYXVzZSBpcyBhbHNvIGV4ZWN1dGVkLCB3aGVuIGEgIjpicmVhayIgb3IgIjpjb250aW51ZSIgZm9yCithICI6d2hpbGUiIGxvb3AgZW5jbG9zaW5nIHRoZSBjb21wbGV0ZSB0cnkgY29uZGl0aW9uYWwgaXMgZXhlY3V0ZWQgZnJvbSB0aGUKK3RyeSBibG9jayBvciBhIGNhdGNoIGNsYXVzZS4gIE9yIHdoZW4gYSAiOnJldHVybiIgb3IgIjpmaW5pc2giIGlzIGV4ZWN1dGVkCitmcm9tIHRoZSB0cnkgYmxvY2sgb3IgYSBjYXRjaCBjbGF1c2Ugb2YgYSB0cnkgY29uZGl0aW9uYWwgaW4gYSBmdW5jdGlvbiBvcgorc291cmNlZCBzY3JpcHQsIHJlc3BlY3RpdmVseS4gIFRoZSAiOmJyZWFrIiwgIjpjb250aW51ZSIsICI6cmV0dXJuIiwgb3IKKyI6ZmluaXNoIiBwZW5kcyBkdXJpbmcgZXhlY3V0aW9uIG9mIHRoZSBmaW5hbGx5IGNsYXVzZSBhbmQgaXMgcmVzdW1lZCB3aGVuIHRoZQorIjplbmR0cnkiIGlzIHJlYWNoZWQuICBJdCBpcywgaG93ZXZlciwgZGlzY2FyZGVkIHdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93bgorZnJvbSB0aGUgZmluYWxseSBjbGF1c2UuCisgICBXaGVuIGEgIjpicmVhayIgb3IgIjpjb250aW51ZSIgZm9yIGEgIjp3aGlsZSIgbG9vcCBlbmNsb3NpbmcgdGhlIGNvbXBsZXRlCit0cnkgY29uZGl0aW9uYWwgb3Igd2hlbiBhICI6cmV0dXJuIiBvciAiOmZpbmlzaCIgaXMgZW5jb3VudGVyZWQgaW4gdGhlIGZpbmFsbHkKK2NsYXVzZSwgdGhlIHJlc3Qgb2YgdGhlIGZpbmFsbHkgY2xhdXNlIGlzIHNraXBwZWQsIGFuZCB0aGUgIjpicmVhayIsCisiOmNvbnRpbnVlIiwgIjpyZXR1cm4iIG9yICI6ZmluaXNoIiBpcyBleGVjdXRlZCBhcyB1c3VhbC4gIElmIHRoZSBmaW5hbGx5CitjbGF1c2UgaGFzIGJlZW4gdGFrZW4gYmVjYXVzZSBvZiBhbiBleGNlcHRpb24gb3IgYW4gZWFybGllciAiOmJyZWFrIiwKKyI6Y29udGludWUiLCAiOnJldHVybiIsIG9yICI6ZmluaXNoIiBmcm9tIHRoZSB0cnkgYmxvY2sgb3IgYSBjYXRjaCBjbGF1c2UsCit0aGlzIHBlbmRpbmcgZXhjZXB0aW9uIG9yIGNvbW1hbmQgaXMgZGlzY2FyZGVkLgorCitGb3IgZXhhbXBsZXMgc2VlIHx0aHJvdy1jYXRjaHwgYW5kIHx0cnktZmluYWxseXwuCisKKworTkVTVElORwlPRiBUUlkgQ09ORElUSU9OQUxTCQkJCSp0cnktbmVzdGluZyoKKworVHJ5IGNvbmRpdGlvbmFscyBjYW4gYmUgbmVzdGVkIGFyYml0cmFyaWx5LiAgVGhhdCBpcywgYSBjb21wbGV0ZSB0cnkKK2NvbmRpdGlvbmFsIGNhbiBiZSBwdXQgaW50byB0aGUgdHJ5IGJsb2NrLCBhIGNhdGNoIGNsYXVzZSwgb3IgdGhlIGZpbmFsbHkKK2NsYXVzZSBvZiBhbm90aGVyIHRyeSBjb25kaXRpb25hbC4gIElmIHRoZSBpbm5lciB0cnkgY29uZGl0aW9uYWwgZG9lcyBub3QKK2NhdGNoIGFuIGV4Y2VwdGlvbiB0aHJvd24gaW4gaXRzIHRyeSBibG9jayBvciB0aHJvd3MgYSBuZXcgZXhjZXB0aW9uIGZyb20gb25lCitvZiBpdHMgY2F0Y2ggY2xhdXNlcyBvciBpdHMgZmluYWxseSBjbGF1c2UsIHRoZSBvdXRlciB0cnkgY29uZGl0aW9uYWwgaXMKK2NoZWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBhYm92ZS4gIElmIHRoZSBpbm5lciB0cnkgY29uZGl0aW9uYWwgaXMgaW4gdGhlCit0cnkgYmxvY2sgb2YgdGhlIG91dGVyIHRyeSBjb25kaXRpb25hbCwgaXRzIGNhdGNoIGNsYXVzZXMgYXJlIGNoZWNrZWQsIGJ1dAorb3RoZXJ3aXNlIG9ubHkgdGhlIGZpbmFsbHkgY2xhdXNlIGlzIGV4ZWN1dGVkLiAgSXQgZG9lcyBub3QgbWF0dGVyIGZvcgorbmVzdGluZywgd2hldGhlciB0aGUgaW5uZXIgdHJ5IGNvbmRpdGlvbmFsIGlzIGRpcmVjdGx5IGNvbnRhaW5lZCBpbiB0aGUgb3V0ZXIKK29uZSwgb3Igd2hldGhlciB0aGUgb3V0ZXIgb25lIHNvdXJjZXMgYSBzY3JpcHQgb3IgY2FsbHMgYSBmdW5jdGlvbiBjb250YWluaW5nCit0aGUgaW5uZXIgdHJ5IGNvbmRpdGlvbmFsLgorCitXaGVuIG5vbmUgb2YgdGhlIGFjdGl2ZSB0cnkgY29uZGl0aW9uYWxzIGNhdGNoZXMgYW4gZXhjZXB0aW9uLCBqdXN0IHRoZWlyCitmaW5hbGx5IGNsYXVzZXMgYXJlIGV4ZWN1dGVkLiAgVGhlcmVhZnRlciwgdGhlIHNjcmlwdCBwcm9jZXNzaW5nIHRlcm1pbmF0ZXMuCitBbiBlcnJvciBtZXNzYWdlIGlzIGRpc3BsYXllZCBpbiBjYXNlIG9mIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBleHBsaWNpdGx5Cit0aHJvd24gYnkgYSAiOnRocm93IiBjb21tYW5kLiAgRm9yIHVuY2F1Z2h0IGVycm9yIGFuZCBpbnRlcnJ1cHQgZXhjZXB0aW9ucworaW1wbGljaXRseSByYWlzZWQgYnkgVmltLCB0aGUgZXJyb3IgbWVzc2FnZShzKSBvciBpbnRlcnJ1cHQgbWVzc2FnZSBhcmUgc2hvd24KK2FzIHVzdWFsLgorCitGb3IgZXhhbXBsZXMgc2VlIHx0aHJvdy1jYXRjaHwuCisKKworRVhBTUlOSU5HIEVYQ0VQVElPTiBIQU5ETElORyBDT0RFCQkJKmV4Y2VwdC1leGFtaW5lKgorCitFeGNlcHRpb24gaGFuZGxpbmcgY29kZSBjYW4gZ2V0IHRyaWNreS4gIElmIHlvdSBhcmUgaW4gZG91YnQgd2hhdCBoYXBwZW5zLCBzZXQKKyd2ZXJib3NlJyB0byAxMyBvciB1c2UgdGhlICI6MTN2ZXJib3NlIiBjb21tYW5kIG1vZGlmaWVyIHdoZW4gc291cmNpbmcgeW91cgorc2NyaXB0IGZpbGUuICBUaGVuIHlvdSBzZWUgd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duLCBkaXNjYXJkZWQsIGNhdWdodCwgb3IKK2ZpbmlzaGVkLiAgV2hlbiB1c2luZyBhIHZlcmJvc2l0eSBsZXZlbCBvZiBhdCBsZWFzdCAxNCwgdGhpbmdzIHBlbmRpbmcgaW4KK2EgZmluYWxseSBjbGF1c2UgYXJlIGFsc28gc2hvd24uICBUaGlzIGluZm9ybWF0aW9uIGlzIGFsc28gZ2l2ZW4gaW4gZGVidWcgbW9kZQorKHNlZSB8ZGVidWctc2NyaXB0c3wpLgorCisKK1RIUk9XSU5HIEFORCBDQVRDSElORyBFWENFUFRJT05TCQkJKnRocm93LWNhdGNoKgorCitZb3UgY2FuIHRocm93IGFueSBudW1iZXIgb3Igc3RyaW5nIGFzIGFuIGV4Y2VwdGlvbi4gIFVzZSB0aGUgfDp0aHJvd3wgY29tbWFuZAorYW5kIHBhc3MgdGhlIHZhbHVlIHRvIGJlIHRocm93biBhcyBhcmd1bWVudDogPgorCTp0aHJvdyA0NzExCisJOnRocm93ICJzdHJpbmciCis8CQkJCQkJCSp0aHJvdy1leHByZXNzaW9uKgorWW91IGNhbiBhbHNvIHNwZWNpZnkgYW4gZXhwcmVzc2lvbiBhcmd1bWVudC4gIFRoZSBleHByZXNzaW9uIGlzIHRoZW4gZXZhbHVhdGVkCitmaXJzdCwgYW5kIHRoZSByZXN1bHQgaXMgdGhyb3duOiA+CisJOnRocm93IDQ3MDUgKyBzdHJsZW4oInN0cmluZyIpCisJOnRocm93IHN0cnBhcnQoInN0cmluZ3MiLCAwLCA2KQorCitBbiBleGNlcHRpb24gbWlnaHQgYmUgdGhyb3duIGR1cmluZyBldmFsdWF0aW9uIG9mIHRoZSBhcmd1bWVudCBvZiB0aGUgIjp0aHJvdyIKK2NvbW1hbmQuICBVbmxlc3MgaXQgaXMgY2F1Z2h0IHRoZXJlLCB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIGFiYW5kb25lZC4KK1RoZSAiOnRocm93IiBjb21tYW5kIHRoZW4gZG9lcyBub3QgdGhyb3cgYSBuZXcgZXhjZXB0aW9uLgorICAgRXhhbXBsZTogPgorCisJOmZ1bmN0aW9uISBGb28oYXJnKQorCTogIHRyeQorCTogICAgdGhyb3cgYTphcmcKKwk6ICBjYXRjaCAvZm9vLworCTogIGVuZHRyeQorCTogIHJldHVybiAxCisJOmVuZGZ1bmN0aW9uCisJOgorCTpmdW5jdGlvbiEgQmFyKCkKKwk6ICBlY2hvICJpbiBCYXIiCisJOiAgcmV0dXJuIDQ3MTAKKwk6ZW5kZnVuY3Rpb24KKwk6CisJOnRocm93IEZvbygiYXJyZ2giKSArIEJhcigpCisKK1RoaXMgdGhyb3dzICJhcnJnaCIsIGFuZCAiaW4gQmFyIiBpcyBub3QgZGlzcGxheWVkIHNpbmNlIEJhcigpIGlzIG5vdAorZXhlY3V0ZWQuID4KKwk6dGhyb3cgRm9vKCJmb28iKSArIEJhcigpCitob3dldmVyIGRpc3BsYXlzICJpbiBCYXIiIGFuZCB0aHJvd3MgNDcxMS4KKworQW55IG90aGVyIGNvbW1hbmQgdGhhdCB0YWtlcyBhbiBleHByZXNzaW9uIGFzIGFyZ3VtZW50IG1pZ2h0IGFsc28gYmUKK2FiYW5kb25lZCBieSBhbiAodW5jYXVnaHQpIGV4Y2VwdGlvbiBkdXJpbmcgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbi4gIFRoZQorZXhjZXB0aW9uIGlzIHRoZW4gcHJvcGFnYXRlZCB0byB0aGUgY2FsbGVyIG9mIHRoZSBjb21tYW5kLgorICAgRXhhbXBsZTogPgorCisJOmlmIEZvbygiYXJyZ2giKQorCTogIGVjaG8gInRoZW4iCisJOmVsc2UKKwk6ICBlY2hvICJlbHNlIgorCTplbmRpZgorCitIZXJlIG5laXRoZXIgb2YgInRoZW4iIG9yICJlbHNlIiBpcyBkaXNwbGF5ZWQuCisKKwkJCQkJCQkqY2F0Y2gtb3JkZXIqCitFeGNlcHRpb25zIGNhbiBiZSBjYXVnaHQgYnkgYSB0cnkgY29uZGl0aW9uYWwgd2l0aCBvbmUgb3IgbW9yZSB8OmNhdGNofAorY29tbWFuZHMsIHNlZSB8dHJ5LWNvbmRpdGlvbmFsc3wuICAgVGhlIHZhbHVlcyB0byBiZSBjYXVnaHQgYnkgZWFjaCAiOmNhdGNoIgorY29tbWFuZCBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgcGF0dGVybiBhcmd1bWVudC4gIFRoZSBzdWJzZXF1ZW50IGNhdGNoIGNsYXVzZQorZ2V0cyBleGVjdXRlZCB3aGVuIGEgbWF0Y2hpbmcgZXhjZXB0aW9uIGlzIGNhdWdodC4KKyAgIEV4YW1wbGU6ID4KKworCTpmdW5jdGlvbiEgRm9vKHZhbHVlKQorCTogIHRyeQorCTogICAgdGhyb3cgYTp2YWx1ZQorCTogIGNhdGNoIC9eXGRcKyQvCisJOiAgICBlY2hvICJOdW1iZXIgdGhyb3duIgorCTogIGNhdGNoIC8uKi8KKwk6ICAgIGVjaG8gIlN0cmluZyB0aHJvd24iCisJOiAgZW5kdHJ5CisJOmVuZGZ1bmN0aW9uCisJOgorCTpjYWxsIEZvbygweDEyNjcpCisJOmNhbGwgRm9vKCdzdHJpbmcnKQorCitUaGUgZmlyc3QgY2FsbCB0byBGb28oKSBkaXNwbGF5cyAiTnVtYmVyIHRocm93biIsIHRoZSBzZWNvbmQgIlN0cmluZyB0aHJvd24iLgorQW4gZXhjZXB0aW9uIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgIjpjYXRjaCIgY29tbWFuZHMgaW4gdGhlIG9yZGVyIHRoZXkgYXJlCitzcGVjaWZpZWQuICBPbmx5IHRoZSBmaXJzdCBtYXRjaCBjb3VudHMuICBTbyB5b3Ugc2hvdWxkIHBsYWNlIHRoZSBtb3JlCitzcGVjaWZpYyAiOmNhdGNoIiBmaXJzdC4gIFRoZSBmb2xsb3dpbmcgb3JkZXIgZG9lcyBub3QgbWFrZSBzZW5zZTogPgorCisJOiAgY2F0Y2ggLy4qLworCTogICAgZWNobyAiU3RyaW5nIHRocm93biIKKwk6ICBjYXRjaCAvXlxkXCskLworCTogICAgZWNobyAiTnVtYmVyIHRocm93biIKKworVGhlIGZpcnN0ICI6Y2F0Y2giIGhlcmUgbWF0Y2hlcyBhbHdheXMsIHNvIHRoYXQgdGhlIHNlY29uZCBjYXRjaCBjbGF1c2UgaXMKK25ldmVyIHRha2VuLgorCisJCQkJCQkJKnRocm93LXZhcmlhYmxlcyoKK0lmIHlvdSBjYXRjaCBhbiBleGNlcHRpb24gYnkgYSBnZW5lcmFsIHBhdHRlcm4sIHlvdSBtYXkgYWNjZXNzIHRoZSBleGFjdCB2YWx1ZQoraW4gdGhlIHZhcmlhYmxlIHx2OmV4Y2VwdGlvbnw6ID4KKworCTogIGNhdGNoIC9eXGRcKyQvCisJOiAgICBlY2hvICJOdW1iZXIgdGhyb3duLiAgVmFsdWUgaXMiIHY6ZXhjZXB0aW9uCisKK1lvdSBtYXkgYWxzbyBiZSBpbnRlcmVzdGVkIHdoZXJlIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLiAgVGhpcyBpcyBzdG9yZWQgaW4KK3x2OnRocm93cG9pbnR8LiAgTm90ZSB0aGF0ICJ2OmV4Y2VwdGlvbiIgYW5kICJ2OnRocm93cG9pbnQiIGFyZSB2YWxpZCBmb3IgdGhlCitleGNlcHRpb24gbW9zdCByZWNlbnRseSBjYXVnaHQgYXMgbG9uZyBpdCBpcyBub3QgZmluaXNoZWQuCisgICBFeGFtcGxlOiA+CisKKwk6ZnVuY3Rpb24hIENhdWdodCgpCisJOiAgaWYgdjpleGNlcHRpb24gIT0gIiIKKwk6ICAgIGVjaG8gJ0NhdWdodCAiJyAuIHY6ZXhjZXB0aW9uIC4gJyIgaW4gJyAuIHY6dGhyb3dwb2ludAorCTogIGVsc2UKKwk6ICAgIGVjaG8gJ05vdGhpbmcgY2F1Z2h0JworCTogIGVuZGlmCisJOmVuZGZ1bmN0aW9uCisJOgorCTpmdW5jdGlvbiEgRm9vKCkKKwk6ICB0cnkKKwk6ICAgIHRyeQorCTogICAgICB0cnkKKwk6CSB0aHJvdyA0NzExCisJOiAgICAgIGZpbmFsbHkKKwk6CSBjYWxsIENhdWdodCgpCisJOiAgICAgIGVuZHRyeQorCTogICAgY2F0Y2ggLy4qLworCTogICAgICBjYWxsIENhdWdodCgpCisJOiAgICAgIHRocm93ICJvb3BzIgorCTogICAgZW5kdHJ5CisJOiAgY2F0Y2ggLy4qLworCTogICAgY2FsbCBDYXVnaHQoKQorCTogIGZpbmFsbHkKKwk6ICAgIGNhbGwgQ2F1Z2h0KCkKKwk6ICBlbmR0cnkKKwk6ZW5kZnVuY3Rpb24KKwk6CisJOmNhbGwgRm9vKCkKKworVGhpcyBkaXNwbGF5cyA+CisKKwlOb3RoaW5nIGNhdWdodAorCUNhdWdodCAiNDcxMSIgaW4gZnVuY3Rpb24gRm9vLCBsaW5lIDQKKwlDYXVnaHQgIm9vcHMiIGluIGZ1bmN0aW9uIEZvbywgbGluZSAxMAorCU5vdGhpbmcgY2F1Z2h0CisKK0EgcHJhY3RpY2FsIGV4YW1wbGU6ICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgIjpMaW5lTnVtYmVyIiBkaXNwbGF5cyB0aGUgbGluZQorbnVtYmVyIGluIHRoZSBzY3JpcHQgb3IgZnVuY3Rpb24gd2hlcmUgaXQgaGFzIGJlZW4gdXNlZDogPgorCisJOmZ1bmN0aW9uISBMaW5lTnVtYmVyKCkKKwk6ICAgIHJldHVybiBzdWJzdGl0dXRlKHY6dGhyb3dwb2ludCwgJy4qXERcKFxkXCtcKS4qJywgJ1wxJywgIiIpCisJOmVuZGZ1bmN0aW9uCisJOmNvbW1hbmQhIExpbmVOdW1iZXIgdHJ5IHwgdGhyb3cgIiIgfCBjYXRjaCB8IGVjaG8gTGluZU51bWJlcigpIHwgZW5kdHJ5Cis8CisJCQkJCQkJKnRyeS1uZXN0ZWQqCitBbiBleGNlcHRpb24gdGhhdCBpcyBub3QgY2F1Z2h0IGJ5IGEgdHJ5IGNvbmRpdGlvbmFsIGNhbiBiZSBjYXVnaHQgYnkKK2Egc3Vycm91bmRpbmcgdHJ5IGNvbmRpdGlvbmFsOiA+CisKKwk6dHJ5CisJOiAgdHJ5CisJOiAgICB0aHJvdyAiZm9vIgorCTogIGNhdGNoIC9mb29iYXIvCisJOiAgICBlY2hvICJmb29iYXIiCisJOiAgZmluYWxseQorCTogICAgZWNobyAiaW5uZXIgZmluYWxseSIKKwk6ICBlbmR0cnkKKwk6Y2F0Y2ggL2Zvby8KKwk6ICBlY2hvICJmb28iCisJOmVuZHRyeQorCitUaGUgaW5uZXIgdHJ5IGNvbmRpdGlvbmFsIGRvZXMgbm90IGNhdGNoIHRoZSBleGNlcHRpb24sIGp1c3QgaXRzIGZpbmFsbHkKK2NsYXVzZSBpcyBleGVjdXRlZC4gIFRoZSBleGNlcHRpb24gaXMgdGhlbiBjYXVnaHQgYnkgdGhlIG91dGVyIHRyeQorY29uZGl0aW9uYWwuICBUaGUgZXhhbXBsZSBkaXNwbGF5cyAiaW5uZXIgZmluYWxseSIgYW5kIHRoZW4gImZvbyIuCisKKwkJCQkJCQkqdGhyb3ctZnJvbS1jYXRjaCoKK1lvdSBjYW4gY2F0Y2ggYW4gZXhjZXB0aW9uIGFuZCB0aHJvdyBhIG5ldyBvbmUgdG8gYmUgY2F1Z2h0IGVsc2V3aGVyZSBmcm9tIHRoZQorY2F0Y2ggY2xhdXNlOiA+CisKKwk6ZnVuY3Rpb24hIEZvbygpCisJOiAgdGhyb3cgImZvbyIKKwk6ZW5kZnVuY3Rpb24KKwk6CisJOmZ1bmN0aW9uISBCYXIoKQorCTogIHRyeQorCTogICAgY2FsbCBGb28oKQorCTogIGNhdGNoIC9mb28vCisJOiAgICBlY2hvICJDYXVnaHQgZm9vLCB0aHJvdyBiYXIiCisJOiAgICB0aHJvdyAiYmFyIgorCTogIGVuZHRyeQorCTplbmRmdW5jdGlvbgorCToKKwk6dHJ5CisJOiAgY2FsbCBCYXIoKQorCTpjYXRjaCAvLiovCisJOiAgZWNobyAiQ2F1Z2h0IiB2OmV4Y2VwdGlvbgorCTplbmR0cnkKKworVGhpcyBkaXNwbGF5cyAiQ2F1Z2h0IGZvbywgdGhyb3cgYmFyIiBhbmQgdGhlbiAiQ2F1Z2h0IGJhciIuCisKKwkJCQkJCQkqcmV0aHJvdyoKK1RoZXJlIGlzIG5vIHJlYWwgcmV0aHJvdyBpbiB0aGUgVmltIHNjcmlwdCBsYW5ndWFnZSwgYnV0IHlvdSBtYXkgdGhyb3cKKyJ2OmV4Y2VwdGlvbiIgaW5zdGVhZDogPgorCisJOmZ1bmN0aW9uISBCYXIoKQorCTogIHRyeQorCTogICAgY2FsbCBGb28oKQorCTogIGNhdGNoIC8uKi8KKwk6ICAgIGVjaG8gIlJldGhyb3ciIHY6ZXhjZXB0aW9uCisJOiAgICB0aHJvdyB2OmV4Y2VwdGlvbgorCTogIGVuZHRyeQorCTplbmRmdW5jdGlvbgorPAkJCQkJCQkqdHJ5LWVjaG9lcnIqCitOb3RlIHRoYXQgdGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gInJldGhyb3ciIFZpbSBlcnJvciBvciBpbnRlcnJ1cHQKK2V4Y2VwdGlvbnMsIGJlY2F1c2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGZha2UgVmltIGludGVybmFsIGV4Y2VwdGlvbnMuCitUcnlpbmcgc28gY2F1c2VzIGFuIGVycm9yIGV4Y2VwdGlvbi4gIFlvdSBzaG91bGQgdGhyb3cgeW91ciBvd24gZXhjZXB0aW9uCitkZW5vdGluZyB0aGUgc2l0dWF0aW9uLiAgSWYgeW91IHdhbnQgdG8gY2F1c2UgYSBWaW0gZXJyb3IgZXhjZXB0aW9uIGNvbnRhaW5pbmcKK3RoZSBvcmlnaW5hbCBlcnJvciBleGNlcHRpb24gdmFsdWUsIHlvdSBjYW4gdXNlIHRoZSB8OmVjaG9lcnJ8IGNvbW1hbmQ6ID4KKworCTp0cnkKKwk6ICB0cnkKKwk6ICAgIGFzZGYKKwk6ICBjYXRjaCAvLiovCisJOiAgICBlY2hvZXJyIHY6ZXhjZXB0aW9uCisJOiAgZW5kdHJ5CisJOmNhdGNoIC8uKi8KKwk6ICBlY2hvIHY6ZXhjZXB0aW9uCisJOmVuZHRyeQorCitUaGlzIGNvZGUgZGlzcGxheXMKKworCVZpbShlY2hvZXJyKTpWaW06RTQ5MjogTm90IGFuIGVkaXRvciBjb21tYW5kOiAgIGFzZGYgfgorCisKK0NMRUFOVVAgQ09ERQkJCQkJCSp0cnktZmluYWxseSoKKworU2NyaXB0cyBvZnRlbiBjaGFuZ2UgZ2xvYmFsIHNldHRpbmdzIGFuZCByZXN0b3JlIHRoZW0gYXQgdGhlaXIgZW5kLiAgSWYgdGhlCit1c2VyIGhvd2V2ZXIgaW50ZXJydXB0cyB0aGUgc2NyaXB0IGJ5IHByZXNzaW5nIENUUkwtQywgdGhlIHNldHRpbmdzIHJlbWFpbiBpbgorYW4gaW5jb25zaXN0ZW50IHN0YXRlLiAgVGhlIHNhbWUgbWF5IGhhcHBlbiB0byB5b3UgaW4gdGhlIGRldmVsb3BtZW50IHBoYXNlIG9mCithIHNjcmlwdCB3aGVuIGFuIGVycm9yIG9jY3VycyBvciB5b3UgZXhwbGljaXRseSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aG91dAorY2F0Y2hpbmcgaXQuICBZb3UgY2FuIHNvbHZlIHRoZXNlIHByb2JsZW1zIGJ5IHVzaW5nIGEgdHJ5IGNvbmRpdGlvbmFsIHdpdGgKK2EgZmluYWxseSBjbGF1c2UgZm9yIHJlc3RvcmluZyB0aGUgc2V0dGluZ3MuICBJdHMgZXhlY3V0aW9uIGlzIGd1YXJhbnRlZWQgb24KK25vcm1hbCBjb250cm9sIGZsb3csIG9uIGVycm9yLCBvbiBhbiBleHBsaWNpdCAiOnRocm93IiwgYW5kIG9uIGludGVycnVwdC4KKyhOb3RlIHRoYXQgZXJyb3JzIGFuZCBpbnRlcnJ1cHRzIGZyb20gaW5zaWRlIHRoZSB0cnkgY29uZGl0aW9uYWwgYXJlIGNvbnZlcnRlZAordG8gZXhjZXB0aW9ucy4gIFdoZW4gbm90IGNhdWdodCwgdGhleSB0ZXJtaW5hdGUgdGhlIHNjcmlwdCBhZnRlciB0aGUgZmluYWxseQorY2xhdXNlIGhhcyBiZWVuIGV4ZWN1dGVkLikKK0V4YW1wbGU6ID4KKworCTp0cnkKKwk6ICBsZXQgczpzYXZlZF90cyA9ICZ0cworCTogIHNldCB0cz0xNworCToKKwk6ICAiIERvIHRoZSBoYXJkIHdvcmsgaGVyZS4KKwk6CisJOmZpbmFsbHkKKwk6ICBsZXQgJnRzID0gczpzYXZlZF90cworCTogIHVubGV0IHM6c2F2ZWRfdHMKKwk6ZW5kdHJ5CisKK1RoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIGxvY2FsbHkgd2hlbmV2ZXIgYSBmdW5jdGlvbiBvciBwYXJ0IG9mIGEgc2NyaXB0CitjaGFuZ2VzIGdsb2JhbCBzZXR0aW5ncyB3aGljaCBuZWVkIHRvIGJlIHJlc3RvcmVkIG9uIGZhaWx1cmUgb3Igbm9ybWFsIGV4aXQgb2YKK3RoYXQgZnVuY3Rpb24gb3Igc2NyaXB0IHBhcnQuCisKKwkJCQkJCQkqYnJlYWstZmluYWxseSoKK0NsZWFudXAgY29kZSB3b3JrcyBhbHNvIHdoZW4gdGhlIHRyeSBibG9jayBvciBhIGNhdGNoIGNsYXVzZSBpcyBsZWZ0IGJ5CithICI6Y29udGludWUiLCAiOmJyZWFrIiwgIjpyZXR1cm4iLCBvciAiOmZpbmlzaCIuCisgICBFeGFtcGxlOiA+CisKKwk6bGV0IGZpcnN0ID0gMQorCTp3aGlsZSAxCisJOiAgdHJ5CisJOiAgICBpZiBmaXJzdAorCTogICAgICBlY2hvICJmaXJzdCIKKwk6ICAgICAgbGV0IGZpcnN0ID0gMAorCTogICAgICBjb250aW51ZQorCTogICAgZWxzZQorCTogICAgICB0aHJvdyAic2Vjb25kIgorCTogICAgZW5kaWYKKwk6ICBjYXRjaCAvLiovCisJOiAgICBlY2hvIHY6ZXhjZXB0aW9uCisJOiAgICBicmVhaworCTogIGZpbmFsbHkKKwk6ICAgIGVjaG8gImNsZWFudXAiCisJOiAgZW5kdHJ5CisJOiAgZWNobyAic3RpbGwgaW4gd2hpbGUiCisJOmVuZHdoaWxlCisJOmVjaG8gImVuZCIKKworVGhpcyBkaXNwbGF5cyAiZmlyc3QiLCAiY2xlYW51cCIsICJzZWNvbmQiLCAiY2xlYW51cCIsIGFuZCAiZW5kIi4gPgorCisJOmZ1bmN0aW9uISBGb28oKQorCTogIHRyeQorCTogICAgcmV0dXJuIDQ3MTEKKwk6ICBmaW5hbGx5CisJOiAgICBlY2hvICJjbGVhbnVwXG4iCisJOiAgZW5kdHJ5CisJOiAgZWNobyAiRm9vIHN0aWxsIGFjdGl2ZSIKKwk6ZW5kZnVuY3Rpb24KKwk6CisJOmVjaG8gRm9vKCkgInJldHVybmVkIGJ5IEZvbyIKKworVGhpcyBkaXNwbGF5cyAiY2xlYW51cCIgYW5kICI0NzExIHJldHVybmVkIGJ5IEZvbyIuICBZb3UgZG9uJ3QgbmVlZCB0byBhZGQgYW4KK2V4dHJhICI6cmV0dXJuIiBpbiB0aGUgZmluYWxseSBjbGF1c2UuICAoQWJvdmUgYWxsLCB0aGlzIHdvdWxkIG92ZXJyaWRlIHRoZQorcmV0dXJuIHZhbHVlLikKKworCQkJCQkJCSpleGNlcHQtZnJvbS1maW5hbGx5KgorVXNpbmcgZWl0aGVyIG9mICI6Y29udGludWUiLCAiOmJyZWFrIiwgIjpyZXR1cm4iLCAiOmZpbmlzaCIsIG9yICI6dGhyb3ciIGluCithIGZpbmFsbHkgY2xhdXNlIGlzIHBvc3NpYmxlLCBidXQgbm90IHJlY29tbWVuZGVkIHNpbmNlIGl0IGFiYW5kb25zIHRoZQorY2xlYW51cCBhY3Rpb25zIGZvciB0aGUgdHJ5IGNvbmRpdGlvbmFsLiAgQnV0LCBvZiBjb3Vyc2UsIGludGVycnVwdCBhbmQgZXJyb3IKK2V4Y2VwdGlvbnMgbWlnaHQgZ2V0IHJhaXNlZCBmcm9tIGEgZmluYWxseSBjbGF1c2UuCisgICBFeGFtcGxlIHdoZXJlIGFuIGVycm9yIGluIHRoZSBmaW5hbGx5IGNsYXVzZSBzdG9wcyBhbiBpbnRlcnJ1cHQgZnJvbQord29ya2luZyBjb3JyZWN0bHk6ID4KKworCTp0cnkKKwk6ICB0cnkKKwk6ICAgIGVjaG8gIlByZXNzIENUUkwtQyBmb3IgaW50ZXJydXB0IgorCTogICAgd2hpbGUgMQorCTogICAgZW5kd2hpbGUKKwk6ICBmaW5hbGx5CisJOiAgICB1bmxldCBub3ZhcgorCTogIGVuZHRyeQorCTpjYXRjaCAvbm92YXIvCisJOmVuZHRyeQorCTplY2hvICJTY3JpcHQgc3RpbGwgcnVubmluZyIKKwk6c2xlZXAgMQorCitJZiB5b3UgbmVlZCB0byBwdXQgY29tbWFuZHMgdGhhdCBjb3VsZCBmYWlsIGludG8gYSBmaW5hbGx5IGNsYXVzZSwgeW91IHNob3VsZAordGhpbmsgYWJvdXQgY2F0Y2hpbmcgb3IgaWdub3JpbmcgdGhlIGVycm9ycyBpbiB0aGVzZSBjb21tYW5kcywgc2VlCit8Y2F0Y2gtZXJyb3JzfCBhbmQgfGlnbm9yZS1lcnJvcnN8LgorCisKK0NBVENISU5HIEVSUk9SUwkJCQkJCSpjYXRjaC1lcnJvcnMqCisKK0lmIHlvdSB3YW50IHRvIGNhdGNoIHNwZWNpZmljIGVycm9ycywgeW91IGp1c3QgaGF2ZSB0byBwdXQgdGhlIGNvZGUgdG8gYmUKK3dhdGNoZWQgaW4gYSB0cnkgYmxvY2sgYW5kIGFkZCBhIGNhdGNoIGNsYXVzZSBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuICBUaGUKK3ByZXNlbmNlIG9mIHRoZSB0cnkgY29uZGl0aW9uYWwgY2F1c2VzIGFsbCBlcnJvcnMgdG8gYmUgY29udmVydGVkIHRvIGFuCitleGNlcHRpb24uICBObyBtZXNzYWdlIGlzIGRpc3BsYXllZCBhbmQgfHY6ZXJybXNnfCBpcyBub3Qgc2V0IHRoZW4uICBUbyBmaW5kCit0aGUgcmlnaHQgcGF0dGVybiBmb3IgdGhlICI6Y2F0Y2giIGNvbW1hbmQsIHlvdSBoYXZlIHRvIGtub3cgaG93IHRoZSBmb3JtYXQgb2YKK3RoZSBlcnJvciBleGNlcHRpb24gaXMuCisgICBFcnJvciBleGNlcHRpb25zIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6ID4KKworCVZpbSh7Y21kbmFtZX0pOntlcnJtc2d9CitvciA+CisJVmltOntlcnJtc2d9CisKK3tjbWRuYW1lfSBpcyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCB0aGF0IGZhaWxlZDsgdGhlIHNlY29uZCBmb3JtIGlzIHVzZWQgd2hlbgordGhlIGNvbW1hbmQgbmFtZSBpcyBub3Qga25vd24uICB7ZXJybXNnfSBpcyB0aGUgZXJyb3IgbWVzc2FnZSB1c3VhbGx5IHByb2R1Y2VkCit3aGVuIHRoZSBlcnJvciBvY2N1cnMgb3V0c2lkZSB0cnkgY29uZGl0aW9uYWxzLiAgSXQgYWx3YXlzIGJlZ2lucyB3aXRoCithIGNhcGl0YWwgIkUiLCBmb2xsb3dlZCBieSBhIHR3byBvciB0aHJlZS1kaWdpdCBlcnJvciBudW1iZXIsIGEgY29sb24sIGFuZAorYSBzcGFjZS4KKworRXhhbXBsZXM6CisKK1RoZSBjb21tYW5kID4KKwk6dW5sZXQgbm92YXIKK25vcm1hbGx5IHByb2R1Y2VzIHRoZSBlcnJvciBtZXNzYWdlID4KKwlFMTA4OiBObyBzdWNoIHZhcmlhYmxlOiAibm92YXIiCit3aGljaCBpcyBjb252ZXJ0ZWQgaW5zaWRlIHRyeSBjb25kaXRpb25hbHMgdG8gYW4gZXhjZXB0aW9uID4KKwlWaW0odW5sZXQpOkUxMDg6IE5vIHN1Y2ggdmFyaWFibGU6ICJub3ZhciIKKworVGhlIGNvbW1hbmQgPgorCTpkd2ltCitub3JtYWxseSBwcm9kdWNlcyB0aGUgZXJyb3IgbWVzc2FnZSA+CisJRTQ5MjogTm90IGFuIGVkaXRvciBjb21tYW5kOiBkd2ltCit3aGljaCBpcyBjb252ZXJ0ZWQgaW5zaWRlIHRyeSBjb25kaXRpb25hbHMgdG8gYW4gZXhjZXB0aW9uID4KKwlWaW06RTQ5MjogTm90IGFuIGVkaXRvciBjb21tYW5kOiBkd2ltCisKK1lvdSBjYW4gY2F0Y2ggYWxsICI6dW5sZXQiIGVycm9ycyBieSBhID4KKwk6Y2F0Y2ggL15WaW0odW5sZXQpOi8KK29yIGFsbCBlcnJvcnMgZm9yIG1pc3NwZWxsZWQgY29tbWFuZCBuYW1lcyBieSBhID4KKwk6Y2F0Y2ggL15WaW06RTQ5MjovCisKK1NvbWUgZXJyb3IgbWVzc2FnZXMgbWF5IGJlIHByb2R1Y2VkIGJ5IGRpZmZlcmVudCBjb21tYW5kczogPgorCTpmdW5jdGlvbiBub2Z1bmMKK2FuZCA+CisJOmRlbGZ1bmN0aW9uIG5vZnVuYworYm90aCBwcm9kdWNlIHRoZSBlcnJvciBtZXNzYWdlID4KKwlFMTI4OiBGdW5jdGlvbiBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWw6IG5vZnVuYword2hpY2ggaXMgY29udmVydGVkIGluc2lkZSB0cnkgY29uZGl0aW9uYWxzIHRvIGFuIGV4Y2VwdGlvbiA+CisJVmltKGZ1bmN0aW9uKTpFMTI4OiBGdW5jdGlvbiBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWw6IG5vZnVuYworb3IgPgorCVZpbShkZWxmdW5jdGlvbik6RTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiBub2Z1bmMKK3Jlc3BlY3RpdmVseS4gIFlvdSBjYW4gY2F0Y2ggdGhlIGVycm9yIGJ5IGl0cyBudW1iZXIgaW5kZXBlbmRlbnRseSBvbiB0aGUKK2NvbW1hbmQgdGhhdCBjYXVzZWQgaXQgaWYgeW91IHVzZSB0aGUgZm9sbG93aW5nIHBhdHRlcm46ID4KKwk6Y2F0Y2ggL15WaW0oXGFcKyk6RTEyODovCisKK1NvbWUgY29tbWFuZHMgbGlrZSA+CisJOmxldCB4ID0gbm92YXIKK3Byb2R1Y2UgbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMsIGhlcmU6ID4KKwlFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6IG5vdmFyCisJRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246ICBub3ZhcgorT25seSB0aGUgZmlyc3QgaXMgdXNlZCBmb3IgdGhlIGV4Y2VwdGlvbiB2YWx1ZSwgc2luY2UgaXQgaXMgdGhlIG1vc3Qgc3BlY2lmaWMKK29uZSAoc2VlIHxleGNlcHQtc2V2ZXJhbC1lcnJvcnN8KS4gIFNvIHlvdSBjYW4gY2F0Y2ggaXQgYnkgPgorCTpjYXRjaCAvXlZpbShcYVwrKTpFMTIxOi8KKworWW91IGNhbiBjYXRjaCBhbGwgZXJyb3JzIHJlbGF0ZWQgdG8gdGhlIG5hbWUgIm5vZnVuYyIgYnkgPgorCTpjYXRjaCAvXDxub2Z1bmNcPi8KKworWW91IGNhbiBjYXRjaCBhbGwgVmltIGVycm9ycyBpbiB0aGUgIjp3cml0ZSIgYW5kICI6cmVhZCIgY29tbWFuZHMgYnkgPgorCTpjYXRjaCAvXlZpbShcKHdyaXRlXHxyZWFkXCkpOkVcZFwrOi8KKworWW91IGNhbiBjYXRjaCBhbGwgVmltIGVycm9ycyBieSB0aGUgcGF0dGVybiA+CisJOmNhdGNoIC9eVmltXCgoXGFcKylcKVw9OkVcZFwrOi8KKzwKKwkJCQkJCQkqY2F0Y2gtdGV4dCoKK05PVEU6IFlvdSBzaG91bGQgbmV2ZXIgY2F0Y2ggdGhlIGVycm9yIG1lc3NhZ2UgdGV4dCBpdHNlbGY6ID4KKwk6Y2F0Y2ggL05vIHN1Y2ggdmFyaWFibGUvCitvbmx5IHdvcmtzIGluIHRoZSBlbmdsaXNoIGxvY2FsZSwgYnV0IG5vdCB3aGVuIHRoZSB1c2VyIGhhcyBzZWxlY3RlZAorYSBkaWZmZXJlbnQgbGFuZ3VhZ2UgYnkgdGhlIHw6bGFuZ3VhZ2V8IGNvbW1hbmQuICBJdCBpcyBob3dldmVyIGhlbHBmdWwgdG8KK2NpdGUgdGhlIG1lc3NhZ2UgdGV4dCBpbiBhIGNvbW1lbnQ6ID4KKwk6Y2F0Y2ggL15WaW0oXGFcKyk6RTEwODovICAgIiBObyBzdWNoIHZhcmlhYmxlCisKKworSUdOT1JJTkcgRVJST1JTCQkJCQkJKmlnbm9yZS1lcnJvcnMqCisKK1lvdSBjYW4gaWdub3JlIGVycm9ycyBpbiBhIHNwZWNpZmljIFZpbSBjb21tYW5kIGJ5IGNhdGNoaW5nIHRoZW0gbG9jYWxseTogPgorCisJOnRyeQorCTogIHdyaXRlCisJOmNhdGNoCisJOmVuZHRyeQorCitCdXQgeW91IGFyZSBzdHJvbmdseSByZWNvbW1lbmRlZCBOT1QgdG8gdXNlIHRoaXMgc2ltcGxlIGZvcm0sIHNpbmNlIGl0IGNvdWxkCitjYXRjaCBtb3JlIHRoYW4geW91IHdhbnQuICBXaXRoIHRoZSAiOndyaXRlIiBjb21tYW5kLCBzb21lIGF1dG9jb21tYW5kcyBjb3VsZAorYmUgZXhlY3V0ZWQgYW5kIGNhdXNlIGVycm9ycyBub3QgcmVsYXRlZCB0byB3cml0aW5nLCBmb3IgaW5zdGFuY2U6ID4KKworCTphdSBCdWZXcml0ZVByZSAqIHVubGV0IG5vdmFyCisKK1RoZXJlIGNvdWxkIGV2ZW4gYmUgc3VjaCBlcnJvcnMgeW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGFzIGEgc2NyaXB0Cit3cml0ZXI6IGEgdXNlciBvZiB5b3VyIHNjcmlwdCBtaWdodCBoYXZlIGRlZmluZWQgc3VjaCBhdXRvY29tbWFuZHMuICBZb3Ugd291bGQKK3RoZW4gaGlkZSB0aGUgZXJyb3IgZnJvbSB0aGUgdXNlci4KKyAgIEl0IGlzIG11Y2ggYmV0dGVyIHRvIHVzZSA+CisKKwk6dHJ5CisJOiAgd3JpdGUKKwk6Y2F0Y2ggL15WaW0od3JpdGUpOi8KKwk6ZW5kdHJ5CisKK3doaWNoIG9ubHkgY2F0Y2hlcyByZWFsIHdyaXRlIGVycm9ycy4gIFNvIGNhdGNoIG9ubHkgd2hhdCB5b3UnZCBsaWtlIHRvIGlnbm9yZQoraW50ZW50aW9uYWxseS4KKworRm9yIGEgc2luZ2xlIGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBjYXVzZSBleGVjdXRpb24gb2YgYXV0b2NvbW1hbmRzLCB5b3UgY291bGQKK2V2ZW4gc3VwcHJlc3MgdGhlIGNvbnZlcnNpb24gb2YgZXJyb3JzIHRvIGV4Y2VwdGlvbnMgYnkgdGhlICI6c2lsZW50ISIKK2NvbW1hbmQ6ID4KKwk6c2lsZW50ISBudW5tYXAgaworVGhpcyB3b3JrcyBhbHNvIHdoZW4gYSB0cnkgY29uZGl0aW9uYWwgaXMgYWN0aXZlLgorCisKK0NBVENISU5HIElOVEVSUlVQVFMJCQkJCSpjYXRjaC1pbnRlcnJ1cHQqCisKK1doZW4gdGhlcmUgYXJlIGFjdGl2ZSB0cnkgY29uZGl0aW9uYWxzLCBhbiBpbnRlcnJ1cHQgKENUUkwtQykgaXMgY29udmVydGVkIHRvCit0aGUgZXhjZXB0aW9uICJWaW06SW50ZXJydXB0Ii4gIFlvdSBjYW4gY2F0Y2ggaXQgbGlrZSBldmVyeSBleGNlcHRpb24uICBUaGUKK3NjcmlwdCBpcyBub3QgdGVybWluYXRlZCwgdGhlbi4KKyAgIEV4YW1wbGU6ID4KKworCTpmdW5jdGlvbiEgVEFTSzEoKQorCTogIHNsZWVwIDEwCisJOmVuZGZ1bmN0aW9uCisKKwk6ZnVuY3Rpb24hIFRBU0syKCkKKwk6ICBzbGVlcCAyMAorCTplbmRmdW5jdGlvbgorCisJOndoaWxlIDEKKwk6ICBsZXQgY29tbWFuZCA9IGlucHV0KCJUeXBlIGEgY29tbWFuZDogIikKKwk6ICB0cnkKKwk6ICAgIGlmIGNvbW1hbmQgPT0gIiIKKwk6ICAgICAgY29udGludWUKKwk6ICAgIGVsc2VpZiBjb21tYW5kID09ICJFTkQiCisJOiAgICAgIGJyZWFrCisJOiAgICBlbHNlaWYgY29tbWFuZCA9PSAiVEFTSzEiCisJOiAgICAgIGNhbGwgVEFTSzEoKQorCTogICAgZWxzZWlmIGNvbW1hbmQgPT0gIlRBU0syIgorCTogICAgICBjYWxsIFRBU0syKCkKKwk6ICAgIGVsc2UKKwk6ICAgICAgZWNobyAiXG5JbGxlZ2FsIGNvbW1hbmQ6IiBjb21tYW5kCisJOiAgICAgIGNvbnRpbnVlCisJOiAgICBlbmRpZgorCTogIGNhdGNoIC9eVmltOkludGVycnVwdCQvCisJOiAgICBlY2hvICJcbkNvbW1hbmQgaW50ZXJydXB0ZWQiCisJOiAgICAiIENhdWdodCB0aGUgaW50ZXJydXB0LiAgQ29udGludWUgd2l0aCBuZXh0IHByb21wdC4KKwk6ICBlbmR0cnkKKwk6ZW5kd2hpbGUKKworWW91IGNhbiBpbnRlcnJ1cHQgYSB0YXNrIGhlcmUgYnkgcHJlc3NpbmcgQ1RSTC1DOyB0aGUgc2NyaXB0IHRoZW4gYXNrcyBmb3IKK2EgbmV3IGNvbW1hbmQuICBJZiB5b3UgcHJlc3MgQ1RSTC1DIGF0IHRoZSBwcm9tcHQsIHRoZSBzY3JpcHQgaXMgdGVybWluYXRlZC4KKworRm9yIHRlc3Rpbmcgd2hhdCBoYXBwZW5zIHdoZW4gQ1RSTC1DIHdvdWxkIGJlIHByZXNzZWQgb24gYSBzcGVjaWZpYyBsaW5lIGluCit5b3VyIHNjcmlwdCwgdXNlIHRoZSBkZWJ1ZyBtb2RlIGFuZCBleGVjdXRlIHRoZSB8PnF1aXR8IG9yIHw+aW50ZXJydXB0fAorY29tbWFuZCBvbiB0aGF0IGxpbmUuICBTZWUgfGRlYnVnLXNjcmlwdHN8LgorCisKK0NBVENISU5HIEFMTAkJCQkJCSpjYXRjaC1hbGwqCisKK1RoZSBjb21tYW5kcyA+CisKKwk6Y2F0Y2ggLy4qLworCTpjYXRjaCAvLworCTpjYXRjaAorCitjYXRjaCBldmVyeXRoaW5nLCBlcnJvciBleGNlcHRpb25zLCBpbnRlcnJ1cHQgZXhjZXB0aW9ucyBhbmQgZXhjZXB0aW9ucworZXhwbGljaXRseSB0aHJvd24gYnkgdGhlIHw6dGhyb3d8IGNvbW1hbmQuICBUaGlzIGlzIHVzZWZ1bCBhdCB0aGUgdG9wIGxldmVsIG9mCithIHNjcmlwdCBpbiBvcmRlciB0byBjYXRjaCB1bmV4cGVjdGVkIHRoaW5ncy4KKyAgIEV4YW1wbGU6ID4KKworCTp0cnkKKwk6CisJOiAgIiBkbyB0aGUgaGFyZCB3b3JrIGhlcmUKKwk6CisJOmNhdGNoIC9NeUV4Y2VwdGlvbi8KKwk6CisJOiAgIiBoYW5kbGUga25vd24gcHJvYmxlbQorCToKKwk6Y2F0Y2ggL15WaW06SW50ZXJydXB0JC8KKwk6ICAgIGVjaG8gIlNjcmlwdCBpbnRlcnJ1cHRlZCIKKwk6Y2F0Y2ggLy4qLworCTogIGVjaG8gIkludGVybmFsIGVycm9yICgiIC4gdjpleGNlcHRpb24gLiAiKSIKKwk6ICBlY2hvICIgLSBvY2N1cnJlZCBhdCAiIC4gdjp0aHJvd3BvaW50CisJOmVuZHRyeQorCToiIGVuZCBvZiBzY3JpcHQKKworTm90ZTogQ2F0Y2hpbmcgYWxsIG1pZ2h0IGNhdGNoIG1vcmUgdGhpbmdzIHRoYW4geW91IHdhbnQuICBUaHVzLCB5b3UgYXJlCitzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIGNhdGNoIG9ubHkgZm9yIHByb2JsZW1zIHRoYXQgeW91IGNhbiByZWFsbHkgaGFuZGxlIGJ5CitzcGVjaWZ5aW5nIGEgcGF0dGVybiBhcmd1bWVudCB0byB0aGUgIjpjYXRjaCIuCisgICBFeGFtcGxlOiBDYXRjaGluZyBhbGwgY291bGQgbWFrZSBpdCBuZWFybHkgaW1wb3NzaWJsZSB0byBpbnRlcnJ1cHQgYSBzY3JpcHQKK2J5IHByZXNzaW5nIENUUkwtQzogPgorCisJOndoaWxlIDEKKwk6ICB0cnkKKwk6ICAgIHNsZWVwIDEKKwk6ICBjYXRjaAorCTogIGVuZHRyeQorCTplbmR3aGlsZQorCisKK0VYQ0VQVElPTlMgQU5EIEFVVE9DT01NQU5EUwkJCQkqZXhjZXB0LWF1dG9jbWQqCisKK0V4Y2VwdGlvbnMgbWF5IGJlIHVzZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBhdXRvY29tbWFuZHMuICBFeGFtcGxlOiA+CisKKwk6YXV0b2NtZCBVc2VyIHggdHJ5CisJOmF1dG9jbWQgVXNlciB4ICAgdGhyb3cgIk9vcHMhIgorCTphdXRvY21kIFVzZXIgeCBjYXRjaAorCTphdXRvY21kIFVzZXIgeCAgIGVjaG8gdjpleGNlcHRpb24KKwk6YXV0b2NtZCBVc2VyIHggZW5kdHJ5CisJOmF1dG9jbWQgVXNlciB4IHRocm93ICJBcnJnaCEiCisJOmF1dG9jbWQgVXNlciB4IGVjaG8gIlNob3VsZCBub3QgYmUgZGlzcGxheWVkIgorCToKKwk6dHJ5CisJOiAgZG9hdXRvY21kIFVzZXIgeAorCTpjYXRjaAorCTogIGVjaG8gdjpleGNlcHRpb24KKwk6ZW5kdHJ5CisKK1RoaXMgZGlzcGxheXMgIk9vcHMhIiBhbmQgIkFycmdoISIuCisKKwkJCQkJCQkqZXhjZXB0LWF1dG9jbWQtUHJlKgorRm9yIHNvbWUgY29tbWFuZHMsIGF1dG9jb21tYW5kcyBnZXQgZXhlY3V0ZWQgYmVmb3JlIHRoZSBtYWluIGFjdGlvbiBvZiB0aGUKK2NvbW1hbmQgdGFrZXMgcGxhY2UuICBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGFuZCBub3QgY2F1Z2h0IGluIHRoZSBzZXF1ZW5jZQorb2YgYXV0b2NvbW1hbmRzLCB0aGUgc2VxdWVuY2UgYW5kIHRoZSBjb21tYW5kIHRoYXQgY2F1c2VkIGl0cyBleGVjdXRpb24gYXJlCithYmFuZG9uZWQgYW5kIHRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgY2FsbGVyIG9mIHRoZSBjb21tYW5kLgorICAgRXhhbXBsZTogPgorCisJOmF1dG9jbWQgQnVmV3JpdGVQcmUgKiB0aHJvdyAiRkFJTCIKKwk6YXV0b2NtZCBCdWZXcml0ZVByZSAqIGVjaG8gIlNob3VsZCBub3QgYmUgZGlzcGxheWVkIgorCToKKwk6dHJ5CisJOiAgd3JpdGUKKwk6Y2F0Y2gKKwk6ICBlY2hvICJDYXVnaHQ6IiB2OmV4Y2VwdGlvbiAiZnJvbSIgdjp0aHJvd3BvaW50CisJOmVuZHRyeQorCitIZXJlLCB0aGUgIjp3cml0ZSIgY29tbWFuZCBkb2VzIG5vdCB3cml0ZSB0aGUgZmlsZSBjdXJyZW50bHkgYmVpbmcgZWRpdGVkIChhcworeW91IGNhbiBzZWUgYnkgY2hlY2tpbmcgJ21vZGlmaWVkJyksIHNpbmNlIHRoZSBleGNlcHRpb24gZnJvbSB0aGUgQnVmV3JpdGVQcmUKK2F1dG9jb21tYW5kIGFiYW5kb25zIHRoZSAiOndyaXRlIi4gIFRoZSBleGNlcHRpb24gaXMgdGhlbiBjYXVnaHQgYW5kIHRoZQorc2NyaXB0IGRpc3BsYXlzOiA+CisKKwlDYXVnaHQ6IEZBSUwgZnJvbSBCdWZXcml0ZSBBdXRvIGNvbW1hbmRzIGZvciAiKiIKKzwKKwkJCQkJCQkqZXhjZXB0LWF1dG9jbWQtUG9zdCoKK0ZvciBzb21lIGNvbW1hbmRzLCBhdXRvY29tbWFuZHMgZ2V0IGV4ZWN1dGVkIGFmdGVyIHRoZSBtYWluIGFjdGlvbiBvZiB0aGUKK2NvbW1hbmQgaGFzIHRha2VuIHBsYWNlLiAgSWYgdGhpcyBtYWluIGFjdGlvbiBmYWlscyBhbmQgdGhlIGNvbW1hbmQgaXMgaW5zaWRlCithbiBhY3RpdmUgdHJ5IGNvbmRpdGlvbmFsLCB0aGUgYXV0b2NvbW1hbmRzIGFyZSBza2lwcGVkIGFuZCBhbiBlcnJvciBleGNlcHRpb24KK2lzIHRocm93biB0aGF0IGNhbiBiZSBjYXVnaHQgYnkgdGhlIGNhbGxlciBvZiB0aGUgY29tbWFuZC4KKyAgIEV4YW1wbGU6ID4KKworCTphdXRvY21kIEJ1ZldyaXRlUG9zdCAqIGVjaG8gIkZpbGUgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorCToKKwk6dHJ5CisJOiAgd3JpdGUgL2kvbS9wL28vcy9zL2kvYi9sL2UKKwk6Y2F0Y2gKKwk6ICBlY2hvIHY6ZXhjZXB0aW9uCisJOmVuZHRyeQorCitUaGlzIGp1c3QgZGlzcGxheXM6ID4KKworCVZpbSh3cml0ZSk6RTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nICgvaS9tL3Avby9zL3MvaS9iL2wvZSkKKworSWYgeW91IHJlYWxseSBuZWVkIHRvIGV4ZWN1dGUgdGhlIGF1dG9jb21tYW5kcyBldmVuIHdoZW4gdGhlIG1haW4gYWN0aW9uCitmYWlscywgdHJpZ2dlciB0aGUgZXZlbnQgZnJvbSB0aGUgY2F0Y2ggY2xhdXNlLgorICAgRXhhbXBsZTogPgorCisJOmF1dG9jbWQgQnVmV3JpdGVQcmUgICogc2V0IG5vcmVhZG9ubHkKKwk6YXV0b2NtZCBCdWZXcml0ZVBvc3QgKiBzZXQgcmVhZG9ubHkKKwk6CisJOnRyeQorCTogIHdyaXRlIC9pL20vcC9vL3Mvcy9pL2IvbC9lCisJOmNhdGNoCisJOiAgZG9hdXRvY21kIEJ1ZldyaXRlUG9zdCAvaS9tL3Avby9zL3MvaS9iL2wvZQorCTplbmR0cnkKKzwKK1lvdSBjYW4gYWxzbyB1c2UgIjpzaWxlbnQhIjogPgorCisJOmxldCB4ID0gIm9rIgorCTpsZXQgdjplcnJtc2cgPSAiIgorCTphdXRvY21kIEJ1ZldyaXRlUG9zdCAqIGlmIHY6ZXJybXNnICE9ICIiCisJOmF1dG9jbWQgQnVmV3JpdGVQb3N0ICogICBsZXQgeCA9ICJhZnRlciBmYWlsIgorCTphdXRvY21kIEJ1ZldyaXRlUG9zdCAqIGVuZGlmCisJOnRyeQorCTogIHNpbGVudCEgd3JpdGUgL2kvbS9wL28vcy9zL2kvYi9sL2UKKwk6Y2F0Y2gKKwk6ZW5kdHJ5CisJOmVjaG8geAorCitUaGlzIGRpc3BsYXlzICJhZnRlciBmYWlsIi4KKworSWYgdGhlIG1haW4gYWN0aW9uIG9mIHRoZSBjb21tYW5kIGRvZXMgbm90IGZhaWwsIGV4Y2VwdGlvbnMgZnJvbSB0aGUKK2F1dG9jb21tYW5kcyB3aWxsIGJlIGNhdGNoYWJsZSBieSB0aGUgY2FsbGVyIG9mIHRoZSBjb21tYW5kOiAgPgorCisJOmF1dG9jbWQgQnVmV3JpdGVQb3N0ICogdGhyb3cgIjotKCIKKwk6YXV0b2NtZCBCdWZXcml0ZVBvc3QgKiBlY2hvICJTaG91bGQgbm90IGJlIGRpc3BsYXllZCIKKwk6CisJOnRyeQorCTogIHdyaXRlCisJOmNhdGNoCisJOiAgZWNobyB2OmV4Y2VwdGlvbgorCTplbmR0cnkKKzwKKwkJCQkJCQkqZXhjZXB0LWF1dG9jbWQtQ21kKgorRm9yIHNvbWUgY29tbWFuZHMsIHRoZSBub3JtYWwgYWN0aW9uIGNhbiBiZSByZXBsYWNlZCBieSBhIHNlcXVlbmNlIG9mCithdXRvY29tbWFuZHMuICBFeGNlcHRpb25zIGZyb20gdGhhdCBzZXF1ZW5jZSB3aWxsIGJlIGNhdGNoYWJsZSBieSB0aGUgY2FsbGVyCitvZiB0aGUgY29tbWFuZC4KKyAgIEV4YW1wbGU6ICBGb3IgdGhlICI6d3JpdGUiIGNvbW1hbmQsIHRoZSBjYWxsZXIgY2Fubm90IGtub3cgd2hldGhlciB0aGUgZmlsZQoraGFkIGFjdHVhbGx5IGJlZW4gd3JpdHRlbiB3aGVuIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICBZb3UgbmVlZCB0byB0ZWxsIGl0IGluCitzb21lIHdheS4gPgorCisJOmlmICFleGlzdHMoImNudCIpCisJOiAgbGV0IGNudCA9IDAKKwk6CisJOiAgYXV0b2NtZCBCdWZXcml0ZUNtZCAqIGlmICZtb2RpZmllZAorCTogIGF1dG9jbWQgQnVmV3JpdGVDbWQgKiAgIGxldCBjbnQgPSBjbnQgKyAxCisJOiAgYXV0b2NtZCBCdWZXcml0ZUNtZCAqICAgaWYgY250ICUgMyA9PSAyCisJOiAgYXV0b2NtZCBCdWZXcml0ZUNtZCAqICAgICB0aHJvdyAiQnVmV3JpdGVDbWRFcnJvciIKKwk6ICBhdXRvY21kIEJ1ZldyaXRlQ21kICogICBlbmRpZgorCTogIGF1dG9jbWQgQnVmV3JpdGVDbWQgKiAgIHdyaXRlIHwgc2V0IG5vbW9kaWZpZWQKKwk6ICBhdXRvY21kIEJ1ZldyaXRlQ21kICogICBpZiBjbnQgJSAzID09IDAKKwk6ICBhdXRvY21kIEJ1ZldyaXRlQ21kICogICAgIHRocm93ICJCdWZXcml0ZUNtZEVycm9yIgorCTogIGF1dG9jbWQgQnVmV3JpdGVDbWQgKiAgIGVuZGlmCisJOiAgYXV0b2NtZCBCdWZXcml0ZUNtZCAqICAgZWNobyAiRmlsZSBzdWNjZXNzZnVsbHkgd3JpdHRlbiEiCisJOiAgYXV0b2NtZCBCdWZXcml0ZUNtZCAqIGVuZGlmCisJOmVuZGlmCisJOgorCTp0cnkKKwk6CXdyaXRlCisJOmNhdGNoIC9eQnVmV3JpdGVDbWRFcnJvciQvCisJOiAgaWYgJm1vZGlmaWVkCisJOiAgICBlY2hvICJFcnJvciBvbiB3cml0aW5nIChmaWxlIGNvbnRlbnRzIG5vdCBjaGFuZ2VkKSIKKwk6ICBlbHNlCisJOiAgICBlY2hvICJFcnJvciBhZnRlciB3cml0aW5nIgorCTogIGVuZGlmCisJOmNhdGNoIC9eVmltKHdyaXRlKTovCisJOiAgICBlY2hvICJFcnJvciBvbiB3cml0aW5nIgorCTplbmR0cnkKKworV2hlbiB0aGlzIHNjcmlwdCBpcyBzb3VyY2VkIHNldmVyYWwgdGltZXMgYWZ0ZXIgbWFraW5nIGNoYW5nZXMsIGl0IGRpc3BsYXlzCitmaXJzdCA+CisJRmlsZSBzdWNjZXNzZnVsbHkgd3JpdHRlbiEKK3RoZW4gPgorCUVycm9yIG9uIHdyaXRpbmcgKGZpbGUgY29udGVudHMgbm90IGNoYW5nZWQpCit0aGVuID4KKwlFcnJvciBhZnRlciB3cml0aW5nCitldGMuCisKKwkJCQkJCQkqZXhjZXB0LWF1dG9jbWQtaWxsKgorWW91IGNhbm5vdCBzcHJlYWQgYSB0cnkgY29uZGl0aW9uYWwgb3ZlciBhdXRvY29tbWFuZHMgZm9yIGRpZmZlcmVudCBldmVudHMuCitUaGUgZm9sbG93aW5nIGNvZGUgaXMgaWxsLWZvcm1lZDogPgorCisJOmF1dG9jbWQgQnVmV3JpdGVQcmUgICogdHJ5CisJOgorCTphdXRvY21kIEJ1ZldyaXRlUG9zdCAqIGNhdGNoCisJOmF1dG9jbWQgQnVmV3JpdGVQb3N0ICogICBlY2hvIHY6ZXhjZXB0aW9uCisJOmF1dG9jbWQgQnVmV3JpdGVQb3N0ICogZW5kdHJ5CisJOgorCTp3cml0ZQorCisKK0VYQ0VQVElPTiBISUVSQVJDSElFUyBBTkQgUEFSQU1FVEVSSVpFRCBFWENFUFRJT05TCSpleGNlcHQtaGllci1wYXJhbSoKKworU29tZSBwcm9ncmFtbWluZyBsYW5ndWFnZXMgYWxsb3cgdG8gdXNlIGhpZXJhcmNoaWVzIG9mIGV4Y2VwdGlvbiBjbGFzc2VzIG9yIHRvCitwYXNzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gd2l0aCB0aGUgb2JqZWN0IG9mIGFuIGV4Y2VwdGlvbiBjbGFzcy4gIFlvdSBjYW4gZG8KK3NpbWlsYXIgdGhpbmdzIGluIFZpbS4KKyAgIEluIG9yZGVyIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBmcm9tIGEgaGllcmFyY2h5LCBqdXN0IHRocm93IHRoZSBjb21wbGV0ZQorY2xhc3MgbmFtZSB3aXRoIHRoZSBjb21wb25lbnRzIHNlcGFyYXRlZCBieSBhIGNvbG9uLCBmb3IgaW5zdGFuY2UgdGhyb3cgdGhlCitzdHJpbmcgIkVYQ0VQVDpNQVRIRVJSOk9WRVJGTE9XIiBmb3IgYW4gb3ZlcmZsb3cgaW4gYSBtYXRoZW1hdGljYWwgbGlicmFyeS4KKyAgIFdoZW4geW91IHdhbnQgdG8gcGFzcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHdpdGggeW91ciBleGNlcHRpb24gY2xhc3MsIGFkZAoraXQgaW4gcGFyZW50aGVzZXMsIGZvciBpbnN0YW5jZSB0aHJvdyB0aGUgc3RyaW5nICJFWENFUFQ6SU86V1JJVEVFUlIobXlmaWxlKSIKK2ZvciBhbiBlcnJvciB3aGVuIHdyaXRpbmcgIm15ZmlsZSIuCisgICBXaXRoIHRoZSBhcHByb3ByaWF0ZSBwYXR0ZXJucyBpbiB0aGUgIjpjYXRjaCIgY29tbWFuZCwgeW91IGNhbiBjYXRjaCBmb3IKK2Jhc2UgY2xhc3NlcyBvciBkZXJpdmVkIGNsYXNzZXMgb2YgeW91ciBoaWVyYXJjaHkuICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluCitwYXJlbnRoZXNlcyBjYW4gYmUgY3V0IG91dCBmcm9tIHx2OmV4Y2VwdGlvbnwgd2l0aCB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kLgorICAgRXhhbXBsZTogPgorCisJOmZ1bmN0aW9uISBDaGVja1JhbmdlKGEsIGZ1bmMpCisJOiAgaWYgYTphIDwgMAorCTogICAgdGhyb3cgIkVYQ0VQVDpNQVRIRVJSOlJBTkdFKCIgLiBhOmZ1bmMgLiAiKSIKKwk6ICBlbmRpZgorCTplbmRmdW5jdGlvbgorCToKKwk6ZnVuY3Rpb24hIEFkZChhLCBiKQorCTogIGNhbGwgQ2hlY2tSYW5nZShhOmEsICJBZGQiKQorCTogIGNhbGwgQ2hlY2tSYW5nZShhOmIsICJBZGQiKQorCTogIGxldCBjID0gYTphICsgYTpiCisJOiAgaWYgYyA8IDAKKwk6ICAgIHRocm93ICJFWENFUFQ6TUFUSEVSUjpPVkVSRkxPVyIKKwk6ICBlbmRpZgorCTogIHJldHVybiBjCisJOmVuZGZ1bmN0aW9uCisJOgorCTpmdW5jdGlvbiEgRGl2KGEsIGIpCisJOiAgY2FsbCBDaGVja1JhbmdlKGE6YSwgIkRpdiIpCisJOiAgY2FsbCBDaGVja1JhbmdlKGE6YiwgIkRpdiIpCisJOiAgaWYgKGE6YiA9PSAwKQorCTogICAgdGhyb3cgIkVYQ0VQVDpNQVRIRVJSOlpFUk9ESVYiCisJOiAgZW5kaWYKKwk6ICByZXR1cm4gYTphIC8gYTpiCisJOmVuZGZ1bmN0aW9uCisJOgorCTpmdW5jdGlvbiEgV3JpdGUoZmlsZSkKKwk6ICB0cnkKKwk6ICAgIGV4ZWN1dGUgIndyaXRlIiBhOmZpbGUKKwk6ICBjYXRjaCAvXlZpbSh3cml0ZSk6LworCTogICAgdGhyb3cgIkVYQ0VQVDpJTygiIC4gZ2V0Y3dkKCkgLiAiLCAiIC4gYTpmaWxlIC4gIik6V1JJVEVFUlIiCisJOiAgZW5kdHJ5CisJOmVuZGZ1bmN0aW9uCisJOgorCTp0cnkKKwk6CisJOiAgIiBzb21ldGhpbmcgd2l0aCBhcml0aG1ldGljcyBhbmQgSS9PCisJOgorCTpjYXRjaCAvXkVYQ0VQVDpNQVRIRVJSOlJBTkdFLworCTogIGxldCBmdW5jdGlvbiA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICcuKihcKFxhXCtcKSkuKicsICdcMScsICIiKQorCTogIGVjaG8gIlJhbmdlIGVycm9yIGluIiBmdW5jdGlvbgorCToKKwk6Y2F0Y2ggL15FWENFUFQ6TUFUSEVSUi8JIiBjYXRjaGVzIE9WRVJGTE9XIGFuZCBaRVJPRElWCisJOiAgZWNobyAiTWF0aCBlcnJvciIKKwk6CisJOmNhdGNoIC9eRVhDRVBUOklPLworCTogIGxldCBkaXIgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnLiooXCguXCtcKSxccyouXCspLionLCAnXDEnLCAiIikKKwk6ICBsZXQgZmlsZSA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICcuKiguXCssXHMqXCguXCtcKSkuKicsICdcMScsICIiKQorCTogIGlmIGZpbGUgIX4gJ14vJworCTogICAgbGV0IGZpbGUgPSBkaXIgLiAiLyIgLiBmaWxlCisJOiAgZW5kaWYKKwk6ICBlY2hvICdJL08gZXJyb3IgZm9yICInIC4gZmlsZSAuICciJworCToKKwk6Y2F0Y2ggL15FWENFUFQvCisJOiAgZWNobyAiVW5zcGVjaWZpZWQgZXJyb3IiCisJOgorCTplbmR0cnkKKworVGhlIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IFZpbSBpdHNlbGYgKG9uIGVycm9yIG9yIHdoZW4gcHJlc3NpbmcgQ1RSTC1DKSB1c2UKK2EgZmxhdCBoaWVyYXJjaHk6ICB0aGV5IGFyZSBhbGwgaW4gdGhlICJWaW0iIGNsYXNzLiAgWW91IGNhbm5vdCB0aHJvdyB5b3Vyc2VsZgorZXhjZXB0aW9ucyB3aXRoIHRoZSAiVmltIiBwcmVmaXg7IHRoZXkgYXJlIHJlc2VydmVkIGZvciBWaW0uCisgICBWaW0gZXJyb3IgZXhjZXB0aW9ucyBhcmUgcGFyYW1ldGVyaXplZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRoYXQKK2ZhaWxlZCwgaWYga25vd24uICBTZWUgfGNhdGNoLWVycm9yc3wuCisKKworUEVDVUxJQVJJVElFUworCQkJCQkJCSpleGNlcHQtY29tcGF0KgorVGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBjb25jZXB0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbW1hbmQgc2VxdWVuY2UgY2F1c2luZyB0aGUKK2V4Y2VwdGlvbiBpcyBhYm9ydGVkIGltbWVkaWF0ZWx5IGFuZCBjb250cm9sIGlzIHRyYW5zZmVycmVkIHRvIGZpbmFsbHkgY2xhdXNlcworYW5kL29yIGEgY2F0Y2ggY2xhdXNlLgorCitJbiB0aGUgVmltIHNjcmlwdCBsYW5ndWFnZSB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgc2NyaXB0cyBhbmQgZnVuY3Rpb25zCitjb250aW51ZSBhZnRlciBhbiBlcnJvcjogaW4gZnVuY3Rpb25zIHdpdGhvdXQgdGhlICJhYm9ydCIgZmxhZyBvciBpbiBhIGNvbW1hbmQKK2FmdGVyICI6c2lsZW50ISIsIGNvbnRyb2wgZmxvdyBnb2VzIHRvIHRoZSBmb2xsb3dpbmcgbGluZSwgYW5kIG91dHNpZGUKK2Z1bmN0aW9ucywgY29udHJvbCBmbG93IGdvZXMgdG8gdGhlIGxpbmUgZm9sbG93aW5nIHRoZSBvdXRlcm1vc3QgIjplbmR3aGlsZSIKK29yICI6ZW5kaWYiLiAgT24gdGhlIG90aGVyIGhhbmQsIGVycm9ycyBzaG91bGQgYmUgY2F0Y2hhYmxlIGFzIGV4Y2VwdGlvbnMKKyh0aHVzLCByZXF1aXJpbmcgdGhlIGltbWVkaWF0ZSBhYm9ydGlvbikuCisKK1RoaXMgcHJvYmxlbSBoYXMgYmVlbiBzb2x2ZWQgYnkgY29udmVydGluZyBlcnJvcnMgdG8gZXhjZXB0aW9ucyBhbmQgdXNpbmcKK2ltbWVkaWF0ZSBhYm9ydGlvbiAoaWYgbm90IHN1cHByZXNzZWQgYnkgIjpzaWxlbnQhIikgb25seSB3aGVuIGEgdHJ5Citjb25kaXRpb25hbCBpcyBhY3RpdmUuICBUaGlzIGlzIG5vIHJlc3RyaWN0aW9uIHNpbmNlIGFuIChlcnJvcikgZXhjZXB0aW9uIGNhbgorYmUgY2F1Z2h0IG9ubHkgZnJvbSBhbiBhY3RpdmUgdHJ5IGNvbmRpdGlvbmFsLiAgSWYgeW91IHdhbnQgYW4gaW1tZWRpYXRlCit0ZXJtaW5hdGlvbiB3aXRob3V0IGNhdGNoaW5nIHRoZSBlcnJvciwganVzdCB1c2UgYSB0cnkgY29uZGl0aW9uYWwgd2l0aG91dAorY2F0Y2ggY2xhdXNlLiAgKFlvdSBjYW4gY2F1c2UgY2xlYW51cCBjb2RlIGJlaW5nIGV4ZWN1dGVkIGJlZm9yZSB0ZXJtaW5hdGlvbgorYnkgc3BlY2lmeWluZyBhIGZpbmFsbHkgY2xhdXNlLikKKworV2hlbiBubyB0cnkgY29uZGl0aW9uYWwgaXMgYWN0aXZlLCB0aGUgdXN1YWwgYWJvcnRpb24gYW5kIGNvbnRpbnVhdGlvbgorYmVoYXZpb3IgaXMgdXNlZCBpbnN0ZWFkIG9mIGltbWVkaWF0ZSBhYm9ydGlvbi4gIFRoaXMgZW5zdXJlcyBjb21wYXRpYmlsaXR5IG9mCitzY3JpcHRzIHdyaXR0ZW4gZm9yIFZpbSA2LjEgYW5kIGVhcmxpZXIuCisKK0hvd2V2ZXIsIHdoZW4gc291cmNpbmcgYW4gZXhpc3Rpbmcgc2NyaXB0IHRoYXQgZG9lcyBub3QgdXNlIGV4Y2VwdGlvbiBoYW5kbGluZworY29tbWFuZHMgKG9yIHdoZW4gY2FsbGluZyBvbmUgb2YgaXRzIGZ1bmN0aW9ucykgZnJvbSBpbnNpZGUgYW4gYWN0aXZlIHRyeQorY29uZGl0aW9uYWwgb2YgYSBuZXcgc2NyaXB0LCB5b3UgbWlnaHQgY2hhbmdlIHRoZSBjb250cm9sIGZsb3cgb2YgdGhlIGV4aXN0aW5nCitzY3JpcHQgb24gZXJyb3IuICBZb3UgZ2V0IHRoZSBpbW1lZGlhdGUgYWJvcnRpb24gb24gZXJyb3IgYW5kIGNhbiBjYXRjaCB0aGUKK2Vycm9yIGluIHRoZSBuZXcgc2NyaXB0LiAgSWYgaG93ZXZlciB0aGUgc291cmNlZCBzY3JpcHQgc3VwcHJlc3NlcyBlcnJvcgorbWVzc2FnZXMgYnkgdXNpbmcgdGhlICI6c2lsZW50ISIgY29tbWFuZCAoY2hlY2tpbmcgZm9yIGVycm9ycyBieSB0ZXN0aW5nCit8djplcnJtc2d8IGlmIGFwcHJvcHJpYXRlKSwgaXRzIGV4ZWN1dGlvbiBwYXRoIGlzIG5vdCBjaGFuZ2VkLiAgVGhlIGVycm9yIGlzCitub3QgY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbi4gIChTZWUgfDpzaWxlbnR8LikgIFNvIHRoZSBvbmx5IHJlbWFpbmluZyBjYXVzZQord2hlcmUgdGhpcyBoYXBwZW5zIGlzIGZvciBzY3JpcHRzIHRoYXQgZG9uJ3QgY2FyZSBhYm91dCBlcnJvcnMgYW5kIHByb2R1Y2UKK2Vycm9yIG1lc3NhZ2VzLiAgWW91IHByb2JhYmx5IHdvbid0IHdhbnQgdG8gdXNlIHN1Y2ggY29kZSBmcm9tIHlvdXIgbmV3CitzY3JpcHRzLgorCisJCQkJCQkJKmV4Y2VwdC1zeW50YXgtZXJyKgorU3ludGF4IGVycm9ycyBpbiB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGNvbW1hbmRzIGFyZSBuZXZlciBjYXVnaHQgYnkgYW55IG9mCit0aGUgIjpjYXRjaCIgY29tbWFuZHMgb2YgdGhlIHRyeSBjb25kaXRpb25hbCB0aGV5IGJlbG9uZyB0by4gIEl0cyBmaW5hbGx5CitjbGF1c2VzLCBob3dldmVyLCBpcyBleGVjdXRlZC4KKyAgIEV4YW1wbGU6ID4KKworCTp0cnkKKwk6ICB0cnkKKwk6ICAgIHRocm93IDQ3MTEKKwk6ICBjYXRjaCAvXCgvCisJOiAgICBlY2hvICJpbiBjYXRjaCB3aXRoIHN5bnRheCBlcnJvciIKKwk6ICBjYXRjaAorCTogICAgZWNobyAiaW5uZXIgY2F0Y2gtYWxsIgorCTogIGZpbmFsbHkKKwk6ICAgIGVjaG8gImlubmVyIGZpbmFsbHkiCisJOiAgZW5kdHJ5CisJOmNhdGNoCisJOiAgZWNobyAnb3V0ZXIgY2F0Y2gtYWxsIGNhdWdodCAiJyAuIHY6ZXhjZXB0aW9uIC4gJyInCisJOiAgZmluYWxseQorCTogICAgZWNobyAib3V0ZXIgZmluYWxseSIKKwk6ZW5kdHJ5CisKK1RoaXMgZGlzcGxheXM6ID4KKyAgICBpbm5lciBmaW5hbGx5CisgICAgb3V0ZXIgY2F0Y2gtYWxsIGNhdWdodCAiVmltKGNhdGNoKTpFNTQ6IFVubWF0Y2hlZCBcKCIKKyAgICBvdXRlciBmaW5hbGx5CitUaGUgb3JpZ2luYWwgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZCBhbmQgYW4gZXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZCwgaW5zdGVhZC4KKworCQkJCQkJCSpleGNlcHQtc2luZ2xlLWxpbmUqCitUaGUgIjp0cnkiLCAiOmNhdGNoIiwgIjpmaW5hbGx5IiwgYW5kICI6ZW5kdHJ5IiBjb21tYW5kcyBjYW4gYmUgcHV0IG9uCithIHNpbmdsZSBsaW5lLCBidXQgdGhlbiBzeW50YXggZXJyb3JzIG1heSBtYWtlIGl0IGRpZmZpY3VsdCB0byByZWNvZ25pemUgdGhlCisiY2F0Y2giIGxpbmUsIHRodXMgeW91IGJldHRlciBhdm9pZCB0aGlzLgorICAgRXhhbXBsZTogPgorCTp0cnkgfCB1bmxldCEgZm9vICMgfCBjYXRjaCB8IGVuZHRyeQorcmFpc2VzIGFuIGVycm9yIGV4Y2VwdGlvbiBmb3IgdGhlIHRyYWlsaW5nIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlICI6dW5sZXQhIgorYXJndW1lbnQsIGJ1dCBkb2VzIG5vdCBzZWUgdGhlICI6Y2F0Y2giIGFuZCAiOmVuZHRyeSIgY29tbWFuZHMsIHNvIHRoYXQgdGhlCitlcnJvciBleGNlcHRpb24gaXMgZGlzY2FyZGVkIGFuZCB0aGUgIkU0ODg6IFRyYWlsaW5nIGNoYXJhY3RlcnMiIG1lc3NhZ2UgZ2V0cworZGlzcGxheWVkLgorCisJCQkJCQkJKmV4Y2VwdC1zZXZlcmFsLWVycm9ycyoKK1doZW4gc2V2ZXJhbCBlcnJvcnMgYXBwZWFyIGluIGEgc2luZ2xlIGNvbW1hbmQsIHRoZSBmaXJzdCBlcnJvciBtZXNzYWdlIGlzCit1c3VhbGx5IHRoZSBtb3N0IHNwZWNpZmljIG9uZSBhbmQgdGhlcmVmb3IgY29udmVydGVkIHRvIHRoZSBlcnJvciBleGNlcHRpb24uCisgICBFeGFtcGxlOiA+CisJZWNobyBub3ZhcgorY2F1c2VzID4KKwlFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6IG5vdmFyCisJRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246IG5vdmFyCitUaGUgdmFsdWUgb2YgdGhlIGVycm9yIGV4Y2VwdGlvbiBpbnNpZGUgdHJ5IGNvbmRpdGlvbmFscyBpczogPgorCVZpbShlY2hvKTpFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6IG5vdmFyCis8CQkJCQkJCSpleGNlcHQtc3ludGF4LWVycm9yKgorQnV0IHdoZW4gYSBzeW50YXggZXJyb3IgaXMgZGV0ZWN0ZWQgYWZ0ZXIgYSBub3JtYWwgZXJyb3IgaW4gdGhlIHNhbWUgY29tbWFuZCwKK3RoZSBzeW50YXggZXJyb3IgaXMgdXNlZCBmb3IgdGhlIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24uCisgICBFeGFtcGxlOiA+CisJdW5sZXQgbm92YXIgIworY2F1c2VzID4KKwlFMTA4OiBObyBzdWNoIHZhcmlhYmxlOiAibm92YXIiCisJRTQ4ODogVHJhaWxpbmcgY2hhcmFjdGVycworVGhlIHZhbHVlIG9mIHRoZSBlcnJvciBleGNlcHRpb24gaW5zaWRlIHRyeSBjb25kaXRpb25hbHMgaXM6ID4KKwlWaW0odW5sZXQpOkU0ODg6IFRyYWlsaW5nIGNoYXJhY3RlcnMKK1RoaXMgaXMgZG9uZSBiZWNhdXNlIHRoZSBzeW50YXggZXJyb3IgbWlnaHQgY2hhbmdlIHRoZSBleGVjdXRpb24gcGF0aCBpbiBhIHdheQorbm90IGludGVuZGVkIGJ5IHRoZSB1c2VyLiAgRXhhbXBsZTogPgorCXRyeQorCSAgICB0cnkgfCB1bmxldCBub3ZhciAjIHwgY2F0Y2ggfCBlY2hvIHY6ZXhjZXB0aW9uIHwgZW5kdHJ5CisJY2F0Y2ggLy4qLworCSAgICBlY2hvICJvdXRlciBjYXRjaDoiIHY6ZXhjZXB0aW9uCisJZW5kdHJ5CitUaGlzIGRpc3BsYXlzICJvdXRlciBjYXRjaDogVmltKHVubGV0KTpFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzIiwgYW5kIHRoZW4KK2EgIkU2MDA6IE1pc3NpbmcgOmVuZHRyeSIgZXJyb3IgbWVzc2FnZSBpcyBnaXZlbiwgc2VlIHxleGNlcHQtc2luZ2xlLWxpbmV8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzkuIEV4YW1wbGVzCQkJCQkJKmV2YWwtZXhhbXBsZXMqCisKK1ByaW50aW5nIGluIEhleCB+Cis+CisgIDoiIFRoZSBmdW5jdGlvbiBOcjJIZXgoKSByZXR1cm5zIHRoZSBIZXggc3RyaW5nIG9mIGEgbnVtYmVyLgorICA6ZnVuYyBOcjJIZXgobnIpCisgIDogIGxldCBuID0gYTpucgorICA6ICBsZXQgciA9ICIiCisgIDogIHdoaWxlIG4KKyAgOiAgICBsZXQgciA9ICcwMTIzNDU2Nzg5QUJDREVGJ1tuICUgMTZdIC4gcgorICA6ICAgIGxldCBuID0gbiAvIDE2CisgIDogIGVuZHdoaWxlCisgIDogIHJldHVybiByCisgIDplbmRmdW5jCisKKyAgOiIgVGhlIGZ1bmN0aW9uIFN0cmluZzJIZXgoKSBjb252ZXJ0cyBlYWNoIGNoYXJhY3RlciBpbiBhIHN0cmluZyB0byBhIHR3bworICA6IiBjaGFyYWN0ZXIgSGV4IHN0cmluZy4KKyAgOmZ1bmMgU3RyaW5nMkhleChzdHIpCisgIDogIGxldCBvdXQgPSAnJworICA6ICBsZXQgaXggPSAwCisgIDogIHdoaWxlIGl4IDwgc3RybGVuKGE6c3RyKQorICA6ICAgIGxldCBvdXQgPSBvdXQgLiBOcjJIZXgoY2hhcjJucihhOnN0cltpeF0pKQorICA6ICAgIGxldCBpeCA9IGl4ICsgMQorICA6ICBlbmR3aGlsZQorICA6ICByZXR1cm4gb3V0CisgIDplbmRmdW5jCisKK0V4YW1wbGUgb2YgaXRzIHVzZTogPgorICA6ZWNobyBOcjJIZXgoMzIpCityZXN1bHQ6ICIyMCIgPgorICA6ZWNobyBTdHJpbmcySGV4KCIzMiIpCityZXN1bHQ6ICIzMzMyIgorCisKK1NvcnRpbmcgbGluZXMgKGJ5IFJvYmVydCBXZWJiKSB+CisKK0hlcmUgaXMgYSBWaW0gc2NyaXB0IHRvIHNvcnQgbGluZXMuICBIaWdobGlnaHQgdGhlIGxpbmVzIGluIFZpbSBhbmQgdHlwZQorIjpTb3J0Ii4gIFRoaXMgZG9lc24ndCBjYWxsIGFueSBleHRlcm5hbCBwcm9ncmFtcyBzbyBpdCdsbCB3b3JrIG9uIGFueQorcGxhdGZvcm0uICBUaGUgZnVuY3Rpb24gU29ydCgpIGFjdHVhbGx5IHRha2VzIHRoZSBuYW1lIG9mIGEgY29tcGFyaXNvbgorZnVuY3Rpb24gYXMgaXRzIGFyZ3VtZW50LCBsaWtlIHFzb3J0KCkgZG9lcyBpbiBDLiAgU28geW91IGNvdWxkIHN1cHBseSBpdAord2l0aCBkaWZmZXJlbnQgY29tcGFyaXNvbiBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gc29ydCBhY2NvcmRpbmcgdG8gZGF0ZSBldGMuCis+CisgIDoiIEZ1bmN0aW9uIGZvciB1c2Ugd2l0aCBTb3J0KCksIHRvIGNvbXBhcmUgdHdvIHN0cmluZ3MuCisgIDpmdW5jISBTdHJjbXAoc3RyMSwgc3RyMikKKyAgOiAgaWYgKGE6c3RyMSA8IGE6c3RyMikKKyAgOglyZXR1cm4gLTEKKyAgOiAgZWxzZWlmIChhOnN0cjEgPiBhOnN0cjIpCisgIDoJcmV0dXJuIDEKKyAgOiAgZWxzZQorICA6CXJldHVybiAwCisgIDogIGVuZGlmCisgIDplbmRmdW5jdGlvbgorCisgIDoiIFNvcnQgbGluZXMuICBTb3J0UigpIGlzIGNhbGxlZCByZWN1cnNpdmVseS4KKyAgOmZ1bmMhIFNvcnRSKHN0YXJ0LCBlbmQsIGNtcCkKKyAgOiAgaWYgKGE6c3RhcnQgPj0gYTplbmQpCisgIDoJcmV0dXJuCisgIDogIGVuZGlmCisgIDogIGxldCBwYXJ0aXRpb24gPSBhOnN0YXJ0IC0gMQorICA6ICBsZXQgbWlkZGxlID0gcGFydGl0aW9uCisgIDogIGxldCBwYXJ0U3RyID0gZ2V0bGluZSgoYTpzdGFydCArIGE6ZW5kKSAvIDIpCisgIDogIGxldCBpID0gYTpzdGFydAorICA6ICB3aGlsZSAoaSA8PSBhOmVuZCkKKyAgOglsZXQgc3RyID0gZ2V0bGluZShpKQorICA6CWV4ZWMgImxldCByZXN1bHQgPSAiIC4gYTpjbXAgLiAiKHN0ciwgcGFydFN0cikiCisgIDoJaWYgKHJlc3VsdCA8PSAwKQorICA6CSAgICAiIE5lZWQgdG8gcHV0IGl0IGJlZm9yZSB0aGUgcGFydGl0aW9uLiAgU3dhcCBsaW5lcyBpIGFuZCBwYXJ0aXRpb24uCisgIDoJICAgIGxldCBwYXJ0aXRpb24gPSBwYXJ0aXRpb24gKyAxCisgIDoJICAgIGlmIChyZXN1bHQgPT0gMCkKKyAgOgkJbGV0IG1pZGRsZSA9IHBhcnRpdGlvbgorICA6CSAgICBlbmRpZgorICA6CSAgICBpZiAoaSAhPSBwYXJ0aXRpb24pCisgIDoJCWxldCBzdHIyID0gZ2V0bGluZShwYXJ0aXRpb24pCisgIDoJCWNhbGwgc2V0bGluZShpLCBzdHIyKQorICA6CQljYWxsIHNldGxpbmUocGFydGl0aW9uLCBzdHIpCisgIDoJICAgIGVuZGlmCisgIDoJZW5kaWYKKyAgOglsZXQgaSA9IGkgKyAxCisgIDogIGVuZHdoaWxlCisKKyAgOiAgIiBOb3cgd2UgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlICJtaWRkbGUiIGVsZW1lbnQsIGFzIGZhciBhcyBwYXJ0aXRpb25pbmcKKyAgOiAgIiBnb2VzLCB3aGljaCBjb3VsZCBiZSBhbnl3aGVyZSBiZWZvcmUgdGhlIHBhcnRpdGlvbi4gIE1ha2Ugc3VyZSBpdCBpcyBhdAorICA6ICAiIHRoZSBlbmQgb2YgdGhlIHBhcnRpdGlvbi4KKyAgOiAgaWYgKG1pZGRsZSAhPSBwYXJ0aXRpb24pCisgIDoJbGV0IHN0ciA9IGdldGxpbmUobWlkZGxlKQorICA6CWxldCBzdHIyID0gZ2V0bGluZShwYXJ0aXRpb24pCisgIDoJY2FsbCBzZXRsaW5lKG1pZGRsZSwgc3RyMikKKyAgOgljYWxsIHNldGxpbmUocGFydGl0aW9uLCBzdHIpCisgIDogIGVuZGlmCisgIDogIGNhbGwgU29ydFIoYTpzdGFydCwgcGFydGl0aW9uIC0gMSwgYTpjbXApCisgIDogIGNhbGwgU29ydFIocGFydGl0aW9uICsgMSwgYTplbmQsIGE6Y21wKQorICA6ZW5kZnVuYworCisgIDoiIFRvIFNvcnQgYSByYW5nZSBvZiBsaW5lcywgcGFzcyB0aGUgcmFuZ2UgdG8gU29ydCgpIGFsb25nIHdpdGggdGhlIG5hbWUgb2YgYQorICA6IiBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcGFyZSB0d28gbGluZXMuCisgIDpmdW5jISBTb3J0KGNtcCkgcmFuZ2UKKyAgOiAgY2FsbCBTb3J0UihhOmZpcnN0bGluZSwgYTpsYXN0bGluZSwgYTpjbXApCisgIDplbmRmdW5jCisKKyAgOiIgOlNvcnQgdGFrZXMgYSByYW5nZSBvZiBsaW5lcyBhbmQgc29ydHMgdGhlbS4KKyAgOmNvbW1hbmQhIC1uYXJncz0wIC1yYW5nZSBTb3J0IDxsaW5lMT4sPGxpbmUyPmNhbGwgU29ydCgiU3RyY21wIikKKzwKKwkJCQkJCQkqc3NjYW5mKgorVGhlcmUgaXMgbm8gc3NjYW5mKCkgZnVuY3Rpb24gaW4gVmltLiAgSWYgeW91IG5lZWQgdG8gZXh0cmFjdCBwYXJ0cyBmcm9tIGEKK2xpbmUsIHlvdSBjYW4gdXNlIG1hdGNoc3RyKCkgYW5kIHN1YnN0aXR1dGUoKSB0byBkbyBpdC4gIFRoaXMgZXhhbXBsZSBzaG93cworaG93IHRvIGdldCB0aGUgZmlsZSBuYW1lLCBsaW5lIG51bWJlciBhbmQgY29sdW1uIG51bWJlciBvdXQgb2YgYSBsaW5lIGxpa2UKKyJmb29iYXIudHh0LCAxMjMsIDQ1Ii4gPgorICAgOiIgU2V0IHVwIHRoZSBtYXRjaCBiaXQKKyAgIDpsZXQgbXg9J1woXGZcK1wpLFxzKlwoXGRcK1wpLFxzKlwoXGRcK1wpJworICAgOiJnZXQgdGhlIHBhcnQgbWF0Y2hpbmcgdGhlIHdob2xlIGV4cHJlc3Npb24KKyAgIDpsZXQgbCA9IG1hdGNoc3RyKGxpbmUsIG14KQorICAgOiJnZXQgZWFjaCBpdGVtIG91dCBvZiB0aGUgbWF0Y2gKKyAgIDpsZXQgZmlsZSA9IHN1YnN0aXR1dGUobCwgbXgsICdcMScsICcnKQorICAgOmxldCBsbnVtID0gc3Vic3RpdHV0ZShsLCBteCwgJ1wyJywgJycpCisgICA6bGV0IGNvbCA9IHN1YnN0aXR1dGUobCwgbXgsICdcMycsICcnKQorCitUaGUgaW5wdXQgaXMgaW4gdGhlIHZhcmlhYmxlICJsaW5lIiwgdGhlIHJlc3VsdHMgaW4gdGhlIHZhcmlhYmxlcyAiZmlsZSIsCisibG51bSIgYW5kICJjb2wiLiAoaWRlYSBmcm9tIE1pY2hhZWwgR2VkZGVzKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEwLiBObyArZXZhbCBmZWF0dXJlCQkJCSpuby1ldmFsLWZlYXR1cmUqCisKK1doZW4gdGhlIHwrZXZhbHwgZmVhdHVyZSB3YXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLCBub25lIG9mIHRoZSBleHByZXNzaW9uCitldmFsdWF0aW9uIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUuICBUbyBwcmV2ZW50IHRoaXMgZnJvbSBjYXVzaW5nIFZpbSBzY3JpcHRzCit0byBnZW5lcmF0ZSBhbGwga2luZHMgb2YgZXJyb3JzLCB0aGUgIjppZiIgYW5kICI6ZW5kaWYiIGNvbW1hbmRzIGFyZSBzdGlsbAorcmVjb2duaXplZCwgdGhvdWdoIHRoZSBhcmd1bWVudCBvZiB0aGUgIjppZiIgYW5kIGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGUgIjppZiIKK2FuZCB0aGUgbWF0Y2hpbmcgIjplbmRpZiIgaXMgaWdub3JlZC4gIE5lc3Rpbmcgb2YgIjppZiIgYmxvY2tzIGlzIGFsbG93ZWQsIGJ1dAorb25seSBpZiB0aGUgY29tbWFuZHMgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZS4gIFRoZSAiOmVsc2UiIGNvbW1hbmQgaXMgbm90CityZWNvZ25pemVkLgorCitFeGFtcGxlIG9mIGhvdyB0byBhdm9pZCBleGVjdXRpbmcgY29tbWFuZHMgd2hlbiB0aGUgfCtldmFsfCBmZWF0dXJlIGlzCittaXNzaW5nOiA+CisKKwk6aWYgMQorCTogIGVjaG8gIkV4cHJlc3Npb24gZXZhbHVhdGlvbiBpcyBjb21waWxlZCBpbiIKKwk6ZWxzZQorCTogIGVjaG8gIllvdSB3aWxsIF9uZXZlcl8gc2VlIHRoaXMgbWVzc2FnZSIKKwk6ZW5kaWYKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMS4gVGhlIHNhbmRib3gJCQkJCSpldmFsLXNhbmRib3gqICpzYW5kYm94KiAqRTQ4KgorCitUaGUgJ2ZvbGRleHByJywgJ2luY2x1ZGVleHByJywgJ2luZGVudGV4cHInLCAnc3RhdHVzbGluZScgYW5kICdmb2xkdGV4dCcKK29wdGlvbnMgYXJlIGV2YWx1YXRlZCBpbiBhIHNhbmRib3guICBUaGlzIG1lYW5zIHRoYXQgeW91IGFyZSBwcm90ZWN0ZWQgZnJvbQordGhlc2UgZXhwcmVzc2lvbnMgaGF2aW5nIG5hc3R5IHNpZGUgZWZmZWN0cy4gIFRoaXMgZ2l2ZXMgc29tZSBzYWZldHkgZm9yIHdoZW4KK3RoZXNlIG9wdGlvbnMgYXJlIHNldCBmcm9tIGEgbW9kZWxpbmUuICBJdCBpcyBhbHNvIHVzZWQgd2hlbiB0aGUgY29tbWFuZCBmcm9tCithIHRhZ3MgZmlsZSBpcyBleGVjdXRlZC4KK1RoaXMgaXMgbm90IGd1YXJhbnRlZWQgMTAwJSBzZWN1cmUsIGJ1dCBpdCBzaG91bGQgYmxvY2sgbW9zdCBhdHRhY2tzLgorCitUaGVzZSBpdGVtcyBhcmUgbm90IGFsbG93ZWQgaW4gdGhlIHNhbmRib3g6CisJLSBjaGFuZ2luZyB0aGUgYnVmZmVyIHRleHQKKwktIGRlZmluaW5nIG9yIGNoYW5naW5nIG1hcHBpbmcsIGF1dG9jb21tYW5kcywgZnVuY3Rpb25zLCB1c2VyIGNvbW1hbmRzCisJLSBzZXR0aW5nIGNlcnRhaW4gb3B0aW9ucyAoc2VlIHxvcHRpb24tc3VtbWFyeXwpCisJLSBleGVjdXRpbmcgYSBzaGVsbCBjb21tYW5kCisJLSByZWFkaW5nIG9yIHdyaXRpbmcgYSBmaWxlCisJLSBqdW1waW5nIHRvIGFub3RoZXIgYnVmZmVyIG9yIGVkaXRpbmcgYSBmaWxlCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9ldmltLjEgYi9ydW50aW1lL2RvYy9ldmltLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyNWVkNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2V2aW0uMQpAQCAtMCwwICsxLDQ5IEBACisuVEggRVZJTSAxICIyMDAyIEZlYnJ1YXJ5IDE2IgorLlNIIE5BTUUKK2V2aW0gXC0gZWFzeSBWaW0sIGVkaXQgYSBmaWxlIHdpdGggVmltIGFuZCBzZXR1cCBmb3IgbW9kZWxlc3MgZWRpdGluZworLlNIIFNZTk9QU0lTCisuYnIKKy5CIGV2aW0KK1tvcHRpb25zXSBbZmlsZSAuLl0KKy5icgorLkIgZXZpZXcKKy5TSCBERVNDUklQVElPTgorLkIgZVZpbQorc3RhcnRzCisuQiBWaW0KK2FuZCBzZXRzIG9wdGlvbnMgdG8gbWFrZSBpdCBiZWhhdmUgbGlrZSBhIG1vZGVsZXNzIGVkaXRvci4KK1RoaXMgaXMgc3RpbGwgVmltIGJ1dCB1c2VkIGFzIGEgcG9pbnQtYW5kLWNsaWNrIGVkaXRvci4KK1RoaXMgZmVlbHMgYSBsb3QgbGlrZSB1c2luZyBOb3RlcGFkIG9uIE1TLVdpbmRvd3MuCisuQiBlVmltCit3aWxsIGFsd2F5cyBydW4gaW4gdGhlIEdVSSwgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgbWVudXMgYW5kIHRvb2xiYXIuCisuUFAKK09ubHkgdG8gYmUgdXNlZCBmb3IgcGVvcGxlIHdobyByZWFsbHkgY2FuJ3Qgd29yayB3aXRoIFZpbSBpbiB0aGUgbm9ybWFsIHdheS4KK0VkaXRpbmcgd2lsbCBiZSBtdWNoIGxlc3MgZWZmaWNpZW50LgorLlBQCisuQiBldmlldworaXMgdGhlIHNhbWUsIGJ1dCBzdGFydHMgaW4gcmVhZC1vbmx5IG1vZGUuICBJdCB3b3JrcyBqdXN0IGxpa2UgZXZpbSAtUi4KKy5QUAorU2VlIHZpbSgxKSBmb3IgZGV0YWlscyBhYm91dCBWaW0sIG9wdGlvbnMsIGV0Yy4KKy5QUAorVGhlICdpbnNlcnRtb2RlJyBvcHRpb24gaXMgc2V0IHRvIGJlIGFibGUgdG8gdHlwZSB0ZXh0IGRpcmVjdGx5LgorLmJyCitNYXBwaW5ncyBhcmUgc2V0dXAgdG8gbWFrZSBDb3B5IGFuZCBQYXN0ZSB3b3JrIHdpdGggdGhlIE1TLVdpbmRvd3Mga2V5cy4KK0NUUkwtWCBjdXRzIHRleHQsIENUUkwtQyBjb3BpZXMgdGV4dCBhbmQgQ1RSTC1WIHBhc3RlcyB0ZXh0LgorVXNlIENUUkwtUSB0byBvYnRhaW4gdGhlIG9yaWdpbmFsIG1lYW5pbmcgb2YgQ1RSTC1WLgorLlNIIE9QVElPTlMKK1NlZSB2aW0oMSkuCisuU0ggRklMRVMKKy5UUCAxNQorL3Vzci9sb2NhbC9saWIvdmltL2V2aW0udmltCitUaGUgc2NyaXB0IGxvYWRlZCB0byBpbml0aWFsaXplIGVWaW0uCisuU0ggQUtBCitBbHNvIEtub3duIEFzICJWaW0gZm9yIGd1bWJpZXMiLgorV2hlbiB1c2luZyBldmltIHlvdSBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhIGhhbmRrZXJjaGllZiwKK21ha2UgYSBrbm90IGluIGVhY2ggY29ybmVyIGFuZCB3ZWFyIGl0IG9uIHlvdXIgaGVhZC4KKy5TSCBTRUUgQUxTTwordmltKDEpCisuU0ggQVVUSE9SCitNb3N0IG9mCisuQiBWaW0KK3dhcyBtYWRlIGJ5IEJyYW0gTW9vbGVuYWFyLCB3aXRoIGEgbG90IG9mIGhlbHAgZnJvbSBvdGhlcnMuCitTZWUgdGhlIEhlbHAvQ3JlZGl0cyBtZW51LgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZmFyc2kudHh0IGIvcnVudGltZS9kb2MvZmFyc2kudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MDI3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9mYXJzaS50eHQKQEAgLTAsMCArMSwyNjkgQEAKKypmYXJzaS50eHQqICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMiBPY3QgMjkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgTW9ydGF6YSBHaGFzc2FiIFNoaXJhbgorCisKK1JpZ2h0IHRvIExlZnQgYW5kIEZhcnNpIE1hcHBpbmcgZm9yIFZpbQkJKmZhcnNpKiAqRmFyc2kqCisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKworCQkJCQkJKkUyNyoKK0luIG9yZGVyIHRvIHVzZSByaWdodC10by1sZWZ0IGFuZCBGYXJzaSBtYXBwaW5nIHN1cHBvcnQsIGl0IGlzIG5lY2Vzc2FyeSB0bworY29tcGlsZSBWaW0gd2l0aCB0aGUgfCtmYXJzaXwgZmVhdHVyZS4KKworVGhlc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiBtYWRlIGJ5IE1vcnRhemEgRy4gU2hpcmFuIDxzaGlyYW5AanBzLm5ldD4KKworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorSW4gcmlnaHQtdG8tbGVmdCBvcmllbnRlZCBmaWxlcyB0aGUgY2hhcmFjdGVycyBhcHBlYXIgb24gdGhlIHNjcmVlbiBmcm9tIHJpZ2h0Cit0byBsZWZ0LiAgVGhpcyBraW5kIG9mIGZpbGUgaXMgbW9zdCB1c2VmdWwgd2hlbiB3cml0aW5nIEZhcnNpIGRvY3VtZW50cywKK2NvbXBvc2luZyBmYXhlcyBvciB3cml0aW5nIEZhcnNpIG1lbW9zLgorCitUaGUgY29tbWFuZHMsIHByb21wdHMgYW5kIGhlbHAgZmlsZXMgYXJlIG5vdCBpbiBGYXJzaSwgdGhlcmVmb3JlIHRoZSB1c2VyCitpbnRlcmZhY2UgcmVtYWlucyB0aGUgc3RhbmRhcmQgVmkgaW50ZXJmYWNlLgorCisKK0hpZ2hsaWdodHMKKy0tLS0tLS0tLS0KK28gIEVkaXRpbmcgbGVmdC10by1yaWdodCBmaWxlcyBhcyBpbiB0aGUgb3JpZ2luYWwgVmltLCBubyBjaGFuZ2UuCisKK28gIFZpZXdpbmcgYW5kIGVkaXRpbmcgZmlsZXMgaW4gcmlnaHQtdG8tbGVmdCB3aW5kb3dzLiAgIEZpbGUgb3JpZW50YXRpb24gaXMKKyAgIHBlciB3aW5kb3csIHNvIGl0IGlzIHBvc3NpYmxlIHRvIHZpZXcgdGhlIHNhbWUgZmlsZSBpbiByaWdodC10by1sZWZ0IGFuZAorICAgbGVmdC10by1yaWdodCBtb2Rlcywgc2ltdWx0YW5lb3VzbHkuCisKK28gIENvbXBhdGliaWxpdHkgdG8gdGhlIG9yaWdpbmFsIFZpbS4gICBBbG1vc3QgYWxsIGZlYXR1cmVzIHdvcmsgaW4KKyAgIHJpZ2h0LXRvLWxlZnQgbW9kZSAoc2VlIGJ1Z3MgYmVsb3cpLgorCitvICBDaGFuZ2luZyBrZXlib2FyZCBtYXBwaW5nIGFuZCByZXZlcnNlIGluc2VydCBtb2RlcyB1c2luZyBhIHNpbmdsZQorICAgY29tbWFuZC4KKworbyAgQmFja2luZyBmcm9tIHJldmVyc2UgaW5zZXJ0IG1vZGUgdG8gdGhlIGNvcnJlY3QgcGxhY2UgaW4gdGhlIGZpbGUKKyAgIChpZiBwb3NzaWJsZSkuCisKK28gIFdoaWxlIGluIEZhcnNpIG1vZGUsIG51bWJlcnMgYXJlIGVudGVyZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBVcG9uIGVudGVyaW5nCisgICBhIG5vbmUgbnVtYmVyIGNoYXJhY3RlciwgdGhhdCBjaGFyYWN0ZXIgd2lsbCBiZSBpbnNlcnRlZCBqdXN0IGludG8gdGhlCisgICBsZWZ0IG9mIHRoZSBsYXN0IG51bWJlci4KKworbyAgTm8gc3BlY2lhbCB0ZXJtaW5hbCB3aXRoIHJpZ2h0LXRvLWxlZnQgY2FwYWJpbGl0aWVzIGlzIHJlcXVpcmVkLiAgVGhlCisgICByaWdodC10by1sZWZ0IGNoYW5nZXMgYXJlIGNvbXBsZXRlbHkgaGFyZHdhcmUgaW5kZXBlbmRlbnQuICBPbmx5CisgICBGYXJzaSBmb250IGlzIG5lY2Vzc2FyeS4KKworbyAgRmFyc2kga2V5bWFwcGluZyBvbiB0aGUgY29tbWFuZCBsaW5lIGluIHJldmVyc2UgaW5zZXJ0IG1vZGUuCisKK28gIFRvZ2dsaW5nIGJldHdlZW4gbGVmdC10by1yaWdodCBhbmQgcmlnaHQtdG8tbGVmdCB2aWEgRjggZnVuY3Rpb24ga2V5LgorCitvICBUb2dnbGluZyBiZXR3ZWVuIEZhcnNpIElTSVItMzM0MiBzdGFuZGFyZCBlbmNvZGluZyBhbmQgVklNIEZhcnNpIHZpYSBGOQorICAgZnVuY3Rpb24ga2V5LiBTaW5jZSB0aGlzIG1ha2VzIHNlbnNlIG9ubHkgZm9yIHRoZSB0ZXh0IHdyaXR0ZW4gaW4KKyAgIHJpZ2h0LXRvLWxlZnQgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHN1cHBvcnRlZCBvbmx5IGluIHJpZ2h0LXRvLWxlZnQKKyAgIG1vZGUuCisKK0ZhcnNpIEZvbnRzCQkJCQkqZmFyc2kgZm9udHMqCistLS0tLS0tLS0tLQorCitJZiB0aGUgImV4dHJhIiBhcmNoaXZlIGhhcyBiZWVuIHVucGFja2VkLCB0aGUgZm9sbG93aW5nIGZpbGVzIGFyZSBmb3VuZCBpbiB0aGUKK3N1YmRpcmVjdG9yaWVzIG9mIHRoZSAnJFZJTS9mYXJzaScgZGlyZWN0b3J5OgorCisgICArICBmYXItYTAxLnBjZiAgICBYIFdpbmRvd3MgZm9udHMgZm9yIFVuaXggaW5jbHVkaW5nIExpbnV4IHN5c3RlbXMKKyAgICsgIGZhci1hMDEuYmYgICAgIFggV2luZG93cyBmb250cyBmb3IgU3VuT3MKKyAgICsgIGZhci1hMDEuZjE2ICAgIGEgc2NyZWVuIGZvbnRzIGZvciBVbml4IGluY2x1ZGluZyBMaW51eCBzeXN0ZW1zCisgICArICBmYXItYTAxLmZvbiAgICBhIG1vbm9zcGFjZWQgZm9udHMgZm9yIFdpbmRvd3MgTlQvOTUvOTgKKyAgICsgIGZhci1hMDEuY29tICAgIGEgc2NyZWVuIGZvbnRzIGZvciBET1MKKworCitGb250IEluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0KKworbyAgSW5zdGFsbGF0aW9uIG9mIGZvbnRzIGZvciBNUyBXaW5kb3cgc3lzdGVtcyAoTlQvOTUvOTgpCisKKyAgIEZyb20gJ0NvbnRyb2wgUGFuZWwnIGZvbGRlciwgc3RhcnQgdGhlICdGb250cycgcHJvZ3JhbS4gVGhlbiBmcm9tICdmaWxlJworICAgbWVudSBpdGVtIHNlbGVjdCAnSW5zdGFsbCBOZXcgRm9udHMgLi4uJy4gQnJvd3NlIGFuZCBzZWxlY3QgdGhlCisgICAnZmFyLWEwMS5mb24nLCB0aGVuIGZvbGxvdyB0aGUgaW5zdGFsbGF0aW9uIGd1aWRlLgorICAgTk9URTogc2V2ZXJhbCBwZW9wbGUgaGF2ZSByZXBvcnRlZCB0aGF0IHRoaXMgZG9lcyBub3Qgd29yay4gIFRoZSBzb2x1dGlvbgorICAgaXMgdW5rbm93bi4KKworbyAgSW5zdGFsbGF0aW9uIG9mIGZvbnRzIGZvciBYIFdpbmRvdyBzeXN0ZW1zIChVbml4L0xpbnV4KQorCisgICBEZXBlbmRpbmcgb24geW91ciBzeXN0ZW0sIGNvcHkgZmFyLWEwMS5wY2YuWiBvciBmYXItYTAxLnBjZi5neiBpbnRvIGEKKyAgIGRpcmVjdG9yeSBvZiB5b3VyIGNob2ljZS4gIENoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIEZhcnNpCisgICBmb250cyBhbmQgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorCisgICA+ICBta2ZvbnRkaXIKKyAgID4gIHhzZXQgK2ZwIHBhdGhfbmFtZV9vZl9mYXJzaV9mb250c19kaXJlY3RvcnkKKworbyAgSW5zdGFsbGF0aW9uIG9mIGZvbnRzIGZvciBYIFdpbmRvdyBzeXN0ZW1zIChTdW5PcykKKworICAgQ29weSBmYXItYTAxLmJmIGZvbnQgaW50byBhIGRpcmVjdG9yeSBvZiB5b3VyIGNob2ljZS4KKyAgIENoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZhci1hMDEuZmIgZm9udHMgYW5kCisgICBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgID4gIGZsZGZhbWlseQorICAgPiAgeHNldCArZnAgcGF0aF9uYW1lX29mX2ZvbnRzX2RpcmVjdG9yeQorCitvICBJbnN0YWxsYXRpb24gb2YgQVNDSUkgc2NyZWVuIGZvbnRzIChVbml4L0xpbnV4KQorCisgICBGb3IgTGludXggc3lzdGVtLCBjb3B5IHRoZSBmYXItYTAxLmYxNiBmb250cyBpbnRvIC91c3IvbGliL2tiZC9jb25zb2xlZm9udHMKKyAgIGRpcmVjdG9yeSBhbmQgZXhlY3V0ZSB0aGUgc2V0Zm9udCBwcm9ncmFtIGFzICJzZXRmb250IGZhci1hMDEuZjE2Ii4gRm9yCisgICBvdGhlciBzeXN0ZW1zIChlLmcuIFNDTyBVbml4KSwgcGxlYXNlIHJlZmVyIHRvIHRoZSBmb250cyBpbnN0YWxsYXRpb24KKyAgIHNlY3Rpb24gb2YgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gbWFudWFscy4KKworbyAgSW5zdGFsbGF0aW9uIG9mIEFTQ0lJIHNjcmVlbiBmb250cyAoRE9TKQorCisgICBBZnRlciBzeXN0ZW0gcG93ZXIgb24sIHByaW9yIHRvIHRoZSBmaXJzdCB1c2Ugb2YgVklNLCB1cGxvYWQgdGhlIEZhcnNpCisgICBmb250cyBieSBleGVjdXRpbmcgdGhlIGZhci1hMDEuY29tIGZvbnQgdXBsb2FkaW5nIHByb2dyYW0uCisKKworVXNhZ2UKKy0tLS0tCitQcmlvciB0byBzdGFydGluZyBWSU0sIHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBWSU0gY2FuIHJ1biBpbiBGYXJzaSBtb2RlLAorbXVzdCBiZSBzZXQuICBJbiBhZGRpdGlvbiB0byBpbnN0YWxsYXRpb24gb2YgRmFyc2kgZm9udHMsIGZvbGxvd2luZyBwb2ludHMKK3JlZmVyIHRvIHNvbWUgb2YgdGhlIHN5c3RlbSBlbnZpcm9ubWVudHMsIHdoaWNoIHlvdSBtYXkgbmVlZCB0byBzZXQ6CitLZXkgY29kZSBtYXBwaW5nLCBsb2FkaW5nIGdyYXBoaWMgY2FyZCBpbiBBU0NJSSBzY3JlZW4gbW9kZSwgc2V0dGluZyB0aGUgSU8KK2RyaXZlciBpbiA4IGJpdCBjbGVhbiBtb2RlIC4uLiAuCisKK28gIFNldHRpbmcgdGhlIEZhcnNpIGZvbnRzCisKKyAgICsgIEZvciBWSU0gR1VJIHNldCB0aGUgJ2d1aWZvbnQnIHRvIGZhci1hMDEuIFRoaXMgaXMgZG9uZSBieSBlbnRlcmluZworICAgICAgJzpzZXQgZ3VpZm9udD1mYXItYTAxJyBpbiB0aGUgVklNIHdpbmRvdy4KKworICAgICAgWW91IGNhbiBoYXZlICdndWlmb250JyBzZXQgdG8gZmFyLWEwMSBieSBWSU0gZHVyaW5nIHRoZSBWSU0gc3RhcnR1cAorICAgICAgYnkgYXBwZW5kaW5nIHRoZSAnOnNldCBndWlmb250PWZhci1hMDEnIGludG8geW91ciAudmltcmMgZmlsZQorICAgICAgKGluIGNhc2Ugb2YgTlQvOTUvOTggcGxhdGZvcm1zIF92aW1yYykuCisKKyAgICAgIFVuZGVyIHRoZSBYIFdpbmRvdyBlbnZpcm9ubWVudCwgeW91IGNhbiBhbHNvIHN0YXJ0IHRoZSBWSU0gd2l0aAorICAgICAgJy1mbiBmYXItYTAxJyBvcHRpb24uCisKKyAgICsgIEZvciB0aGUgVklNIHdpdGhpbiBhIHh0ZXJtLCBzdGFydCBhIHh0ZXJtIHdpdGggdGhlIEZhcnNpIGZvbnRzIChlLmcuCisgICAgICBrdGVybSAtZm4gZmFyLWEwMSkuIFRoZW4gc3RhcnQgdGhlIFZJTSBpbnNpZGUgdGhlIGt0ZXJtLgorCisgICArICBGb3IgVklNIHVuZGVyIERPUywgcHJpb3IgdG8gdGhlIGZpcnN0IHVzYWdlIG9mIFZJTSwgdXBsb2FkIHRoZSBGYXJzaQorICAgICAgZm9udHMgYnkgZXhlY3V0aW5nIHRoZSBmYXItYTAxLmNvbSBmb250cyB1cGxvYWRpbmcgcHJvZ3JhbS4KKworbyAgRmFyc2kgS2V5bWFwcGluZyBBY3RpdmF0aW9uCisKKyAgIFRvIGFjdGl2YXRlIHRoZSBGYXJzaSBrZXltYXBwaW5nLCBzZXQgZWl0aGVyICdhbHRrZXltYXAnIG9yICdma21hcCcuCisgICBUaGlzIGlzIGRvbmUgYnkgZW50ZXJpbmcgJzpzZXQgYWttJyBvciAnOnNldCBmaycgaW4gdGhlIFZJTSB3aW5kb3cuCisgICBZb3UgY2FuIGhhdmUgJ2FsdGtleW1hcCcgb3IgJ2ZrbWFwJyBzZXQgYXMgZGVmYXVsdCBieSBhcHBlbmRpbmcgJzpzZXQgYWttJworICAgb3IgJzpzZXQgZmsnIGluIHlvdXIgLnZpbXJjIGZpbGUgb3IgX3ZpbXJjIGluIGNhc2Ugb2YgTlQvOTUvOTggcGxhdGZvcm1zLgorCisgICBUbyB0dXJuIG9mZiB0aGUgRmFyc2kga2V5bWFwcGluZyBhcyBhIGRlZmF1bHQgc2Vjb25kIGxhbmd1YWdlIGtleW1hcHBpbmcsCisgICByZXNldCB0aGUgJ2FsdGtleW1hcCcgYnkgZW50ZXJpbmcgJzpzZXQgbm9ha20nLgorCitvICByaWdodC10by1sZWZ0IEZhcnNpIE1vZGUKKworICAgQnkgZGVmYXVsdCBWSU0gc3RhcnRzIGluIExlZnQtdG8tcmlnaHQgbW9kZS4gRm9sbG93aW5nIGFyZSB3YXlzIHRvIGNoYW5nZQorICAgdGhlIHdpbmRvdyBvcmllbnRhdGlvbjoKKworICAgKyBTdGFydCB0aGUgVklNIHdpdGggLUYgb3B0aW9uIChlLmcuIHZpbSAtRiAuLi4gKS4KKworICAgKyBVc2UgRjggZnVuY3Rpb24ga2V5IHRvIHRvZ2dsZSBiZXR3ZWVuIGxlZnQtdG8tcmlnaHQgYW5kIHJpZ2h0LXRvLWxlZnQuCisKKyAgICsgV2hpbGUgaW4gTGVmdC10by1yaWdodCBtb2RlLCBlbnRlciAnc2V0IHJsJyBpbiB0aGUgY29tbWFuZCBsaW5lICgncmwnIGlzCisgICAgIHRoZSBhYmJyZXZpYXRpb24gZm9yIHJpZ2h0bGVmdCkuCisKKyAgICsgUHV0IHRoZSAnc2V0IHJsJyBsaW5lIGluIHlvdXIgJy52aW1yYycgZmlsZSB0byBzdGFydCB0aGUgIFZJTSBpbgorICAgICByaWdodC10by1sZWZ0IG1vZGUgcGVybWFuZW50bHkuCisKK0VuY29kaW5nCistLS0tLS0tLQorCitUaGUgbGV0dGVyIGVuY29kaW5nIHVzZWQgaXMgdGhlIFZJTSBleHRlbmRlZCBJU0lSLTMzNDIgc3RhbmRhcmQgd2l0aCBhIGJ1aWx0CitpbiBmdW5jdGlvbiB0byBjb252ZXJ0IGJldHdlZW4gVklNIGV4dGVuZGVkIElTSVItMzM0MiBhbmQgSVNJUi0zMzQyIHN0YW5kYXJkLgorCitGb3IgZG9jdW1lbnQgcG9ydGFiaWxpdHkgcmVhc29ucywgdGhlIGxldHRlciBlbmNvZGluZyBpcyBrZXB0IHRoZSBzYW1lIGFjcm9zcworZGlmZmVyZW50IHBsYXRmb3JtcyAoaS5lLiBVTklYJ3MsIE5ULzk1Lzk4LCBNUyBET1MsIC4uLikuCisKKworbyAgS2V5Ym9hcmQKKworICAgKyAgQ1RSTC1fIGluIGluc2VydC9yZXBsYWNlIG1vZGVzIHRvZ2dsZXMgYmV0d2VlbiBGYXJzaShha20pL0xhdGluCisgICAgICBtb2RlIGFzIGZvbGxvd3M6CisKKyAgICsgIENUUkwtXyBtb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIHR5cGVkIHRleHQgaW4gZWRpdCBtb2RlLgorCisgICArICBDVFJMLV8gaW4gY29tbWFuZCBtb2RlIG9ubHkgdG9nZ2xlcyBrZXlib2FyZCBtYXBwaW5nIGJldHdlZW4gRmFyc2koYWttKS8KKyAgICAgIExhdGluLiBUaGUgRmFyc2kgdGV4dCBpcyB0aGVuIGVudGVyZWQgaW4gcmV2ZXJzZSBpbnNlcnQgbW9kZS4KKworICAgKyAgRjggLSBUb2dnbGVzIGJldHdlZW4gbGVmdC10by1yaWdodCBhbmQgcmlnaHQtdG8tbGVmdC4KKworICAgKyAgRjkgLSBUb2dnbGVzIHRoZSBlbmNvZGluZyBiZXR3ZWVuIElTSVItMzM0MiBzdGFuZGFyZCBhbmQgVklNIGV4dGVuZGVkCisgICAgICBJU0lSLTMzNDIgKHN1cHBvcnRlZCBvbmx5IGluIHJpZ2h0LXRvLWxlZnQgbW9kZSkuCisKKyAgICsgIEtleWJvYXJkIG1hcHBpbmcgaXMgYmFzZWQgb24gdGhlIElyYW5pYW4gSVNJUkktMjkwMSBzdGFuZGFyZC4KKyAgICAgIEZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUga2V5Ym9hcmQgbWFwcGluZyB3aGlsZSBGYXJzaShha20pIG1vZGUgc2V0OgorCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgIDAgIC0gID0KKwmiICCxICCyICCzICC0ICC1ICC2ICC3ICC4ICC5ICCwICCtICC9CisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCX4gICEgIEAgICMgICQgICUgIF4gICYgICogICggICkgIF8gICsKKwl+ICCjICCnICCuICCkICClICCqICCsICDoICCoICCpICDpICCrCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXEgIHcgIGUgIHIgIHQgIHogIHUgIGkgIG8gIHAgIFsgIF0KKwnTICDSICDGICDZICDYICDVICDWICDgICDKICDJICDHICCICisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVEgIFcgIEUgIFIgIFQgIFogIFUgIEkgIE8gIFAgIHsgIH0KKwn3ICD1ICD0ICDzICDyICD9ICDwICD2ICBbICBdICB7ICB9CisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWEgIHMgIGQgIGYgIGcgIGggIGogIGsgIGwgIDsgICcgIFwKKwnRICDQICDhICDDICDcICDBICDFICDeICDdICDaICDbICDrCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUEgIFMgIEQgIEYgIEcgIEggIEogIEsgIEwgIDogICIgIHwKKwn5ICD7oCD+ICD6ICD4ICDAICD8ICDmICDnICC6ICC7ICDqCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCTwgIHkgIHggIGMgIHYgIGIgIG4gIG0gICwgIC4gIC8KKwm+ICDXICDUICDOICDNICDMICDLICDEICDfICCmICCvCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCT4gIFkgIFggIEMgIFYgIEIgIE4gIE0gIDwgID4gID8KKwm8ICDxICDUICDPICDNICChICDLICDCICC+ICC8ICC/CisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlOgorCaEgIHN0YW5kcyBmb3IgRmFyc2kgUFNQIChicmVhayB3aXRob3V0IHNwYWNlKQorCisJoiAgc3RhbmRzIGZvciBGYXJzaSBQQ04gKGZvciBIQU1aRSBhdHRyaWJ1dGUgKQorCitSZXN0cmljdGlvbnMKKy0tLS0tLS0tLS0tLQorCitvICBJbiBpbnNlcnQvcmVwbGFjZSBtb2RlIGFuZCBma21hcCAoRmFyc2kgbW9kZSkgc2V0LCBDVFJMLUIgaXMgbm90CisgICBzdXBwb3J0ZWQuCisKK28gIElmIHlvdSBjaGFuZ2UgdGhlIGNoYXJhY3RlciBtYXBwaW5nIGJldHdlZW4gTGF0aW4vRmFyc2ksIHRoZSByZWRvIGJ1ZmZlcgorICAgd2lsbCBiZSByZXNldCAoZW1wdGllZCkuIFRoYXQgaXMsIHJlZG8gaXMgdmFsaWQgYW5kIHdpbGwgZnVuY3Rpb24gKHVzaW5nCisgICAnLicpIG9ubHkgd2l0aGluIHRoZSBtb2RlIHlvdSBhcmUgaW4uCisKK28gIFdoaWxlIG51bWJlcnMgYXJlIGVudGVyZWQgaW4gRmFyc2kgbW9kZSwgdGhlIHJlZG8gYnVmZmVyIHdpbGwgYmUgcmVzZXQKKyAgIChlbXB0aWVkKS4gVGhhdCBpcywgeW91IGNhbiBub3QgcmVkbyB0aGUgbGFzdCBjaGFuZ2VzICh1c2luZyAnLicpIGFmdGVyCisgICBlbnRlcmluZyBudW1iZXJzLgorCitvICBXaGlsZSBpbiBsZWZ0LXRvLXJpZ2h0IGFuZCBGYXJzaSBtb2RlIHNldCwgQ1RSTC1SIGlzIG5vdCBzdXBwb3J0ZWQuCisKK28gIFdoaWxlIGluIHJpZ2h0LXRvLWxlZnQgbW9kZSwgdGhlIHNlYXJjaCBvbiAnTGF0aW4nIHBhdHRlcm4gZG9lcyBub3Qgd29yaywKKyAgIGV4Y2VwdCBpZiB5b3UgZW50ZXIgdGhlIExhdGluIHNlYXJjaCBwYXR0ZXJuIGluIHJldmVyc2UuCisKK28gIEluIHRoZSBjb21tYW5kIG1vZGUsIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGVudGVyaW5nIHRoZSBudW1iZXJzIGZyb20gbGVmdAorICAgdG8gcmlnaHQgYW5kIGFsc28gZm9yIHRoZSBzYWtlIG9mIHRoZSBmbGV4aWJpbGl0eSB0aGUga2V5bWFwcGluZyBsb2dpYyBpcworICAgcmVzdHJpY3RlZC4KKworbyAgVW5kZXIgWCBXaW5kb3cgZW52aXJvbm1lbnQsIGlmIHlvdSB3YW50IHRvIHJ1biB0aGUgVklNIHdpdGhpbiBhIHh0ZXJtCisgICB0ZXJtaW5hbCBlbXVsYXRvciBhbmQgRmFyc2kgbW9kZSBzZXQsIHlvdSBuZWVkIHRvIGhhdmUgYW4gQU5TSSBjb21wYXRpYmxlCisgICB4dGVybSB0ZXJtaW5hbCBlbXVsYXRvci4gVGhpcyBpcyBiZWNhdXNlIHRoZSBsZXR0ZXIgY29kZXMgYWJvdmUgMTI4IGRlY2ltYWwKKyAgIGhhdmUgY2VydGFpbiBtZWFuaW5ncyBpbiB0aGUgc3RhbmRhcmQgeHRlcm0gdGVybWluYWwgZW11bGF0b3IuCisKKyAgIE5vdGU6IFVuZGVyIFggV2luZG93IGVudmlyb25tZW50LCBWSU0gR1VJIHdvcmtzIGZpbmUgaW4gRmFyc2kgbW9kZS4KKwkgVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIG9mIGFueSB4dGVybSB0ZXJtaW5hbCBlbXVsYXRvci4KKworCitCdWdzCistLS0tCitXaGlsZSBpbiBpbnNlcnQvcmVwbGFjZSBhbmQgRmFyc2kgbW9kZSBzZXQsIGlmIHlvdSByZXBlYXRlZGx5IGNoYW5nZSB0aGUKK2N1cnNvciBwb3NpdGlvbiAodmlhIGN1cnNvciBtb3ZlbWVudCkgYW5kIGVudGVyIG5ldyB0ZXh0IGFuZCB0aGVuIHRyeSB0byB1bmRvCit0aGUgbGFzdCBjaGFuZ2UsIHRoZSB1bmRvIHdpbGwgbGFnIG9uZSBjaGFuZ2UgYmVoaW5kLiAgQnV0IGFzIHlvdSBjb250aW51ZSB0bwordW5kbywgeW91IHdpbGwgcmVhY2ggdGhlIG9yaWdpbmFsIGxpbmUgb2YgdGV4dC4gWW91IGNhbiBhbHNvIHVzZSBVIHRvIHVuZG8gYWxsCitjaGFuZ2VzIG1hZGUgaW4gdGhlIGN1cnJlbnQgbGluZS4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1Z3MgcmVmZXIgdG8gcmlsZWZ0LnR4dC4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2ZpbGV0eXBlLnR4dCBiL3J1bnRpbWUvZG9jL2ZpbGV0eXBlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODU1ZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvZmlsZXR5cGUudHh0CkBAIC0wLDAgKzEsNTI5IEBACisqZmlsZXR5cGUudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDA1CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworRmlsZXR5cGVzCQkJCQkJKmZpbGV0eXBlKiAqZmlsZS10eXBlKgorCisxLiBGaWxldHlwZXMJCQkJCXxmaWxldHlwZXN8CisyLiBGaWxldHlwZSBwbHVnaW4JCQkJfGZpbGV0eXBlLXBsdWdpbnN8CiszLiBEb2NzIGZvciB0aGUgZGVmYXVsdCBmaWxldHlwZSBwbHVnaW5zLgl8ZnRwbHVnaW4tZG9jc3wKKworQWxzbyBzZWUgfGF1dG9jbWQudHh0fC4KKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEZpbGV0eXBlcwkJCQkJKmZpbGV0eXBlcyogKmZpbGUtdHlwZXMqCisKK1ZpbSBjYW4gZGV0ZWN0IHRoZSB0eXBlIG9mIGZpbGUgdGhhdCBpcyBlZGl0ZWQuICBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlCitmaWxlIG5hbWUgYW5kIHNvbWV0aW1lcyBieSBpbnNwZWN0aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBmb3Igc3BlY2lmaWMKK3RleHQuCisKKwkJCQkJCQkqOmZpbGV0eXBlKiAqOmZpbGV0KgorVG8gZW5hYmxlIGZpbGUgdHlwZSBkZXRlY3Rpb24sIHVzZSB0aGlzIGNvbW1hbmQgaW4geW91ciB2aW1yYzogPgorCTpmaWxldHlwZSBvbgorRWFjaCB0aW1lIGEgbmV3IG9yIGV4aXN0aW5nIGZpbGUgaXMgZWRpdGVkLCBWaW0gd2lsbCB0cnkgdG8gcmVjb2duaXplIHRoZSB0eXBlCitvZiB0aGUgZmlsZSBhbmQgc2V0IHRoZSAnZmlsZXR5cGUnIG9wdGlvbi4gIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBGaWxlVHlwZQorZXZlbnQsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgc3ludGF4IGhpZ2hsaWdodGluZywgc2V0IG9wdGlvbnMsIGV0Yy4KKworTk9URTogRmlsZXR5cGVzIGFuZCAnY29tcGF0aWJsZScgZG9uJ3Qgd29yayB0b2dldGhlciB3ZWxsLCBzaW5jZSBiZWluZyBWaQorY29tcGF0aWJsZSBtZWFucyBvcHRpb25zIGFyZSBnbG9iYWwuICBSZXNldHRpbmcgJ2NvbXBhdGlibGUnIGlzIHJlY29tbWVuZGVkLAoraWYgeW91IGRpZG4ndCBkbyB0aGF0IGFscmVhZHkuCisKK0RldGFpbDogVGhlICI6ZmlsZXR5cGUgb24iIGNvbW1hbmQgd2lsbCBsb2FkIG9uZSBvZiB0aGVzZSBmaWxlczoKKwkJQW1pZ2EJICAgICRWSU1SVU5USU1FL2ZpbGV0eXBlLnZpbQorCQlNYWMJICAgICRWSU1SVU5USU1FOmZpbGV0eXBlLnZpbQorCQlNUy1ET1MJICAgICRWSU1SVU5USU1FXGZpbGV0eXBlLnZpbQorCQlSaXNjT1MJICAgIFZpbTpGaWxldHlwZQorCQlVbml4CSAgICAkVklNUlVOVElNRS9maWxldHlwZS52aW0KKwkJVk1TCSAgICAkVklNUlVOVElNRS9maWxldHlwZS52aW0KKwlUaGlzIGZpbGUgaXMgYSBWaW0gc2NyaXB0IHRoYXQgZGVmaW5lcyBhdXRvY29tbWFuZHMgZm9yIHRoZQorCUJ1Zk5ld0ZpbGUgYW5kIEJ1ZlJlYWQgZXZlbnRzLiAgSWYgdGhlIGZpbGUgdHlwZSBpcyBub3QgZm91bmQgYnkgdGhlCisJbmFtZSwgdGhlIGZpbGUgJFZJTVJVTlRJTUUvc2NyaXB0cy52aW0gaXMgdXNlZCB0byBkZXRlY3QgaXQgZnJvbSB0aGUKKwljb250ZW50cyBvZiB0aGUgZmlsZS4KKworVG8gYWRkIHlvdXIgb3duIGZpbGUgdHlwZXMsIHNlZSB8bmV3LWZpbGV0eXBlfCBiZWxvdy4KKworSWYgdGhlIGZpbGUgdHlwZSBpcyBub3QgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgb3IgaXQgZmluZHMgdGhlIHdyb25nIHR5cGUsCit5b3UgY2FuIGVpdGhlciBzZXQgdGhlICdmaWxldHlwZScgb3B0aW9uIG1hbnVhbGx5LCBvciBhZGQgYSBtb2RlbGluZSB0byB5b3VyCitmaWxlLiAgRXhhbXBsZSwgZm9yIGluIGFuIElETCBmaWxlIHVzZSB0aGUgY29tbWFuZDogPgorCTpzZXQgZmlsZXR5cGU9aWRsCitvciBhZGQgdGhpcyB8bW9kZWxpbmV8IHRvIHRoZSBmaWxlOiA+CisJLyogdmltOiBzZXQgZmlsZXR5cGU9aWRsIDogKi8KKzwKKwkJCQkJCSo6ZmlsZXR5cGUtcGx1Z2luLW9uKgorWW91IGNhbiBlbmFibGUgbG9hZGluZyB0aGUgcGx1Z2luIGZpbGVzIGZvciBzcGVjaWZpYyBmaWxlIHR5cGVzIHdpdGg6ID4KKwk6ZmlsZXR5cGUgcGx1Z2luIG9uCitJZiBmaWxldHlwZSBkZXRlY3Rpb24gd2FzIG5vdCBzd2l0Y2hlZCBvbiB5ZXQsIGl0IHdpbGwgYmUgYXMgd2VsbC4KK1RoaXMgYWN0dWFsbHkgbG9hZHMgdGhlIGZpbGUgImZ0cGx1Z2luLnZpbSIgaW4gJ3J1bnRpbWVwYXRoJy4KK1RoZSByZXN1bHQgaXMgdGhhdCB3aGVuIGEgZmlsZSBpcyBlZGl0ZWQgaXRzIHBsdWdpbiBmaWxlIGlzIGxvYWRlZCAoaWYgdGhlcmUKK2lzIG9uZSBmb3IgdGhlIGRldGVjdGVkIGZpbGV0eXBlKS4gfGZpbGV0eXBlLXBsdWdpbnwKKworCQkJCQkJKjpmaWxldHlwZS1wbHVnaW4tb2ZmKgorWW91IGNhbiBkaXNhYmxlIGl0IGFnYWluIHdpdGg6ID4KKwk6ZmlsZXR5cGUgcGx1Z2luIG9mZgorVGhlIGZpbGV0eXBlIGRldGVjdGlvbiBpcyBub3Qgc3dpdGNoZWQgb2ZmIHRoZW4uICBCdXQgaWYgeW91IGRvIHN3aXRjaCBvZmYKK2ZpbGV0eXBlIGRldGVjdGlvbiwgdGhlIHBsdWdpbnMgd2lsbCBub3QgYmUgbG9hZGVkIGVpdGhlci4KK1RoaXMgYWN0dWFsbHkgbG9hZHMgdGhlIGZpbGUgImZ0cGx1Z29mLnZpbSIgaW4gJ3J1bnRpbWVwYXRoJy4KKworCQkJCQkJKjpmaWxldHlwZS1pbmRlbnQtb24qCitZb3UgY2FuIGVuYWJsZSBsb2FkaW5nIHRoZSBpbmRlbnQgZmlsZSBmb3Igc3BlY2lmaWMgZmlsZSB0eXBlcyB3aXRoOiA+CisJOmZpbGV0eXBlIGluZGVudCBvbgorSWYgZmlsZXR5cGUgZGV0ZWN0aW9uIHdhcyBub3Qgc3dpdGNoZWQgb24geWV0LCBpdCB3aWxsIGJlIGFzIHdlbGwuCitUaGlzIGFjdHVhbGx5IGxvYWRzIHRoZSBmaWxlICJpbmRlbnQudmltIiBpbiAncnVudGltZXBhdGgnLgorVGhlIHJlc3VsdCBpcyB0aGF0IHdoZW4gYSBmaWxlIGlzIGVkaXRlZCBpdHMgaW5kZW50IGZpbGUgaXMgbG9hZGVkIChpZiB0aGVyZQoraXMgb25lIGZvciB0aGUgZGV0ZWN0ZWQgZmlsZXR5cGUpLiB8aW5kZW50LWV4cHJlc3Npb258CisKKwkJCQkJCSo6ZmlsZXR5cGUtaW5kZW50LW9mZioKK1lvdSBjYW4gZGlzYWJsZSBpdCBhZ2FpbiB3aXRoOiA+CisJOmZpbGV0eXBlIGluZGVudCBvZmYKK1RoZSBmaWxldHlwZSBkZXRlY3Rpb24gaXMgbm90IHN3aXRjaGVkIG9mZiB0aGVuLiAgQnV0IGlmIHlvdSBkbyBzd2l0Y2ggb2ZmCitmaWxldHlwZSBkZXRlY3Rpb24sIHRoZSBpbmRlbnQgZmlsZXMgd2lsbCBub3QgYmUgbG9hZGVkIGVpdGhlci4KK1RoaXMgYWN0dWFsbHkgbG9hZHMgdGhlIGZpbGUgImluZG9mZi52aW0iIGluICdydW50aW1lcGF0aCcuCisKKwkJCQkJCSo6ZmlsZXR5cGUtb2ZmKgorVG8gZGlzYWJsZSBmaWxlIHR5cGUgZGV0ZWN0aW9uLCB1c2UgdGhpcyBjb21tYW5kOiA+CisJOmZpbGV0eXBlIG9mZgorVGhpcyB3aWxsIGtlZXAgdGhlIGZsYWdzIGZvciAicGx1Z2luIiBhbmQgImluZGVudCIsIGJ1dCBzaW5jZSBubyBmaWxlIHR5cGVzCithcmUgYmVpbmcgZGV0ZWN0ZWQsIHRoZXkgd29uJ3Qgd29yayB1bnRpbCB0aGUgbmV4dCAiOmZpbGV0eXBlIG9uIi4KKworCitPdmVydmlldzoJCQkJCSo6ZmlsZXR5cGUtb3ZlcnZpZXcqCisKK2NvbW1hbmQJCQkJZGV0ZWN0aW9uCXBsdWdpbgkJaW5kZW50IH4KKzpmaWxldHlwZSBvbgkJCW9uCQl1bmNoYW5nZWQJdW5jaGFuZ2VkCis6ZmlsZXR5cGUgb2ZmCQkJb2ZmCQl1bmNoYW5nZWQJdW5jaGFuZ2VkCis6ZmlsZXR5cGUgcGx1Z2luIG9uCQlvbgkJb24JCXVuY2hhbmdlZAorOmZpbGV0eXBlIHBsdWdpbiBvZmYJCXVuY2hhbmdlZAlvZmYJCXVuY2hhbmdlZAorOmZpbGV0eXBlIGluZGVudCBvbgkJb24JCXVuY2hhbmdlZAlvbgorOmZpbGV0eXBlIGluZGVudCBvZmYJCXVuY2hhbmdlZAl1bmNoYW5nZWQJb2ZmCis6ZmlsZXR5cGUgcGx1Z2luIGluZGVudCBvbglvbgkJb24JCW9uCis6ZmlsZXR5cGUgcGx1Z2luIGluZGVudCBvZmYJdW5jaGFuZ2VkCW9mZgkJb2ZmCisKK1RvIHNlZSB0aGUgY3VycmVudCBzdGF0dXMsIHR5cGU6ID4KKwk6ZmlsZXR5cGUKK1RoZSBvdXRwdXQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczogPgorCWZpbGV0eXBlIGRldGVjdGlvbjpPTiAgcGx1Z2luOk9OICBpbmRlbnQ6T0ZGCisKK1RoZSBmaWxlIHR5cGVzIGFyZSBhbHNvIHVzZWQgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcuICBJZiB0aGUgIjpzeW50YXggb24iCitjb21tYW5kIGlzIHVzZWQsIHRoZSBmaWxlIHR5cGUgZGV0ZWN0aW9uIGlzIGluc3RhbGxlZCB0b28uICBUaGVyZSBpcyBubyBuZWVkCit0byBkbyAiOmZpbGV0eXBlIG9uIiBhZnRlciAiOnN5bnRheCBvbiIuCisKK1RvIGRpc2FibGUgb25lIG9mIHRoZSBmaWxlIHR5cGVzLCBhZGQgYSBsaW5lIGluIHRoZSB5b3VyIGZpbGV0eXBlIGZpbGUsIHNlZQorfHJlbW92ZS1maWxldHlwZXwuCisKKwkJCQkJCQkqZmlsZXR5cGUtZGV0ZWN0KgorVG8gZGV0ZWN0IHRoZSBmaWxlIHR5cGUgYWdhaW46ID4KKwk6ZmlsZXR5cGUgZGV0ZWN0CitVc2UgdGhpcyBpZiB5b3Ugc3RhcnRlZCB3aXRoIGFuIGVtcHR5IGZpbGUgYW5kIHR5cGVkIHRleHQgdGhhdCBtYWtlcyBpdAorcG9zc2libGUgdG8gZGV0ZWN0IHRoZSBmaWxlIHR5cGUuICBGb3IgZXhhbXBsZSwgd2hlbiB5b3UgZW50ZXJlZCB0aGlzIGluIGEKK3NoZWxsIHNjcmlwdDogIiMhL2Jpbi9jc2giLgorICAgV2hlbiBmaWxldHlwZSBkZXRlY3Rpb24gd2FzIG9mZiwgaXQgd2lsbCBiZSBlbmFibGVkIGZpcnN0LCBsaWtlIHRoZSAib24iCithcmd1bWVudCB3YXMgdXNlZC4KKworCQkJCQkJCSpmaWxldHlwZS1vdmVycnVsZSoKK1doZW4gdGhlIHNhbWUgZXh0ZW5zaW9uIGlzIHVzZWQgZm9yIHR3byBmaWxldHlwZXMsIFZpbSB0cmllcyB0byBndWVzcyB3aGF0CitraW5kIG9mIGZpbGUgaXQgaXMuICBUaGlzIGRvZXNuJ3QgYWx3YXlzIHdvcmsuICBBIG51bWJlciBvZiBnbG9iYWwgdmFyaWFibGVzCitjYW4gYmUgdXNlZCB0byBvdmVycnVsZSB0aGUgZmlsZXR5cGUgdXNlZCBmb3IgY2VydGFpbiBleHRlbnNpb25zOgorCisJZmlsZSBuYW1lCXZhcmlhYmxlIH4KKwkqLmFzYQkJZzpmaWxldHlwZV9hc2EJfGFzcHZicy1zeW50YXh8IHxhc3BwZXJsLXN5bnRheHwKKwkqLmFzcAkJZzpmaWxldHlwZV9hc3AJfGFzcHZicy1zeW50YXh8IHxhc3BwZXJsLXN5bnRheHwKKwkqLmFzbQkJZzphc21zeW50YXgJfGFzbS1zeW50YXh8CisJKi5wcmcJCWc6ZmlsZXR5cGVfcHJnCisJKi5wbAkJZzpmaWxldHlwZV9wbAorCSouaW5jCQlnOmZpbGV0eXBlX2luYworCSoudwkJZzpmaWxldHlwZV93CXxjd2ViLXN5bnRheHwKKwkqLmkJCWc6ZmlsZXR5cGVfaQl8cHJvZ3Jlc3Mtc3ludGF4fAorCSoucAkJZzpmaWxldHlwZV9wCXxwYXNjYWwtc3ludGF4fAorCSouc2gJCWc6YmFzaF9pc19zaAl8c2gtc3ludGF4fAorCisJCQkJCQkJKmZpbGV0eXBlLWlnbm9yZSoKK1RvIGF2b2lkIHRoYXQgY2VydGFpbiBmaWxlcyBhcmUgYmVpbmcgaW5zcGVjdGVkLCB0aGUgZzpmdF9pZ25vcmVfcGF0IHZhcmlhYmxlCitpcyB1c2VkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgc2V0IGxpa2UgdGhpczogPgorCTpsZXQgZzpmdF9pZ25vcmVfcGF0ID0gJ1wuXChaXHxnelx8YnoyXHx6aXBcfHRnelwpJCcKK1RoaXMgbWVhbnMgdGhhdCB0aGUgY29udGVudHMgb2YgY29tcHJlc3NlZCBmaWxlcyBhcmUgbm90IGluc3BlY3RlZC4KKworCQkJCQkJCSpuZXctZmlsZXR5cGUqCitJZiBhIGZpbGUgdHlwZSB0aGF0IHlvdSB3YW50IHRvIHVzZSBpcyBub3QgZGV0ZWN0ZWQgeWV0LCB0aGVyZSBhcmUgdGhyZWUgd2F5cwordG8gYWRkIGl0LiAgSW4gYW55IHdheSwgaXQncyBiZXR0ZXIgbm90IG1vZGlmeSB0aGUgJFZJTVJVTlRJTUUvZmlsZXR5cGUudmltCitmaWxlLiAgSXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aGVuIGluc3RhbGxpbmcgYSBuZXcgdmVyc2lvbiBvZiBWaW0uCisKK0EuIElmIHlvdSB3YW50IHRvIG92ZXJydWxlIGFsbCBkZWZhdWx0IGZpbGUgdHlwZSBjaGVja3MuCisgICBUaGlzIHdvcmtzIGJ5IHdyaXRpbmcgb25lIGZpbGUgZm9yIGVhY2ggZmlsZXR5cGUuICBUaGUgZGlzYWR2YW50YWdlIGlzIHRoYXQKKyAgIG1lYW5zIHRoZXJlIGNhbiBiZSBtYW55IGZpbGVzLiAgVGhlIGFkdmFudGFnZSBpcyB0aGF0IHlvdSBjYW4gc2ltcGx5IGRyb3AKKyAgIHRoaXMgZmlsZSBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5IHRvIG1ha2UgaXQgd29yay4KKworICAgMS4gQ3JlYXRlIHlvdXIgdXNlciBydW50aW1lIGRpcmVjdG9yeS4gIFlvdSB3b3VsZCBub3JtYWxseSB1c2UgdGhlIGZpcnN0CisgICAgICBpdGVtIG9mIHRoZSAncnVudGltZXBhdGgnIG9wdGlvbi4gIFRoZW4gY3JlYXRlIHRoZSBkaXJlY3RvcnkgImZ0ZGV0ZWN0IgorICAgICAgaW5zaWRlIGl0LiAgRXhhbXBsZSBmb3IgVW5peDogPgorCTohbWtkaXIgfi8udmltCisJOiFta2RpciB+Ly52aW0vZnRkZXRlY3QKKzwKKyAgIDIuIENyZWF0ZSBhIGZpbGUgdGhhdCBjb250YWlucyBhbiBhdXRvY29tbWFuZCB0byBkZXRlY3QgdGhlIGZpbGUgdHlwZS4KKyAgICAgIEV4YW1wbGU6ID4KKwlhdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5taW5lCQlzZXQgZmlsZXR5cGU9bWluZQorPCAgICAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vICJhdWdyb3VwIiBjb21tYW5kLCB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gZG9uZQorICAgICAgd2hlbiBzb3VyY2luZyB5b3VyIGZpbGUuICBZb3UgY291bGQgYWxzbyB1c2UgdGhlIHBhdHRlcm4gIioiIGFuZCB0aGVuCisgICAgICBjaGVjayB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgdG8gcmVjb2duaXplIGl0LgorICAgICAgV3JpdGUgdGhpcyBmaWxlIGFzICJtaW5lLnZpbSIgaW4gdGhlICJmdGRldGVjdCIgZGlyZWN0b3J5IGluIHlvdXIgdXNlcgorICAgICAgcnVudGltZSBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwgZm9yIFVuaXg6ID4KKwk6dyB+Ly52aW0vZnRkZXRlY3QvbWluZS52aW0KKworPCAgMy4gVG8gdXNlIHRoZSBuZXcgZmlsZXR5cGUgZGV0ZWN0aW9uIHlvdSBtdXN0IHJlc3RhcnQgVmltLgorCisgICBUaGUgZmlsZXMgaW4gdGhlICJmdGRldGVjdCIgZGlyZWN0b3J5IGFyZSB1c2VkIGFmdGVyIGFsbCB0aGUgZGVmYXVsdAorICAgY2hlY2tzLCB0aHVzIHRoZXkgY2FuIG92ZXJydWxlIGEgcHJldmlvdXNseSBkZXRlY3RlZCBmaWxlIHR5cGUuCisKK0IuIElmIHlvdSB3YW50IHRvIGRldGVjdCB5b3VyIGZpbGUgYWZ0ZXIgdGhlIGRlZmF1bHQgZmlsZSB0eXBlIGNoZWNrcy4KKworICAgVGhpcyB3b3JrcyBsaWtlIEEgYWJvdmUsIGJ1dCBpbnN0ZWFkIG9mIHNldHRpbmcgJ2ZpbGV0eXBlJyB1bmNvbmRpdGlvbmFsbHkKKyAgIHVzZSAiOnNldGZpbGV0eXBlIi4gIFRoaXMgd2lsbCBvbmx5IHNldCAnZmlsZXR5cGUnIGlmIG5vIGZpbGUgdHlwZSB3YXMKKyAgIGRldGVjdGVkIHlldC4gIEV4YW1wbGU6ID4KKwlhdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi50eHQJCXNldGZpbGV0eXBlIHRleHQKKzwKKyAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGFscmVhZHkgZGV0ZWN0ZWQgZmlsZSB0eXBlIGluIHlvdXIgY29tbWFuZC4gIEZvcgorICAgZXhhbXBsZSwgdG8gdXNlIHRoZSBmaWxlIHR5cGUgIm15cGFzY2FsIiB3aGVuICJwYXNjYWwiIGhhcyBiZWVuIGRldGVjdGVkOiA+CisJYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoJCWlmICZmdCA9PSAncGFzY2FsJyB8IHNldCBmdD1teXBhc2NhbAorCQkJCQkJCQkgICAgICAgfCBlbmRpZgorCitDLiBJZiB5b3VyIGZpbGUgdHlwZSBjYW4gYmUgZGV0ZWN0ZWQgYnkgdGhlIGZpbGUgbmFtZS4KKyAgIDEuIENyZWF0ZSB5b3VyIHVzZXIgcnVudGltZSBkaXJlY3RvcnkuICBZb3Ugd291bGQgbm9ybWFsbHkgdXNlIHRoZSBmaXJzdAorICAgICAgaXRlbSBvZiB0aGUgJ3J1bnRpbWVwYXRoJyBvcHRpb24uICBFeGFtcGxlIGZvciBVbml4OiA+CisJOiFta2RpciB+Ly52aW0KKzwKKyAgIDIuIENyZWF0ZSBhIGZpbGUgdGhhdCBjb250YWlucyBhdXRvY29tbWFuZHMgdG8gZGV0ZWN0IHRoZSBmaWxlIHR5cGUuCisgICAgICBFeGFtcGxlOiA+CisJIiBteSBmaWxldHlwZSBmaWxlCisJaWYgZXhpc3RzKCJkaWRfbG9hZF9maWxldHlwZXMiKQorCSAgZmluaXNoCisJZW5kaWYKKwlhdWdyb3VwIGZpbGV0eXBlZGV0ZWN0CisJICBhdSEgQnVmUmVhZCxCdWZOZXdGaWxlICoubWluZQkJc2V0ZmlsZXR5cGUgbWluZQorCSAgYXUhIEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnh5egkJc2V0ZmlsZXR5cGUgZHJhd2luZworCWF1Z3JvdXAgRU5ECis8ICAgICBXcml0ZSB0aGlzIGZpbGUgYXMgImZpbGV0eXBlLnZpbSIgaW4geW91ciB1c2VyIHJ1bnRpbWUgZGlyZWN0b3J5LiAgRm9yCisgICAgICBleGFtcGxlLCBmb3IgVW5peDogPgorCTp3IH4vLnZpbS9maWxldHlwZS52aW0KKworPCAgMy4gVG8gdXNlIHRoZSBuZXcgZmlsZXR5cGUgZGV0ZWN0aW9uIHlvdSBtdXN0IHJlc3RhcnQgVmltLgorCisgICBZb3VyIGZpbGV0eXBlLnZpbSB3aWxsIGJlIHNvdXJjZWQgYmVmb3JlIHRoZSBkZWZhdWx0IEZpbGVUeXBlIGF1dG9jb21tYW5kcworICAgaGF2ZSBiZWVuIGluc3RhbGxlZC4gIFlvdXIgYXV0b2NvbW1hbmRzIHdpbGwgbWF0Y2ggZmlyc3QsIGFuZCB0aGUKKyAgICI6c2V0ZmlsZXR5cGUiIGNvbW1hbmQgd2lsbCBtYWtlIHN1cmUgdGhhdCBubyBvdGhlciBhdXRvY29tbWFuZHMgd2lsbCBzZXQKKyAgICdmaWxldHlwZScgYWZ0ZXIgdGhpcy4KKwkJCQkJCQkqbmV3LWZpbGV0eXBlLXNjcmlwdHMqCitELiBJZiB5b3VyIGZpbGV0eXBlIGNhbiBvbmx5IGJlIGRldGVjdGVkIGJ5IGluc3BlY3RpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgZmlsZS4KKworICAgMS4gQ3JlYXRlIHlvdXIgdXNlciBydW50aW1lIGRpcmVjdG9yeS4gIFlvdSB3b3VsZCBub3JtYWxseSB1c2UgdGhlIGZpcnN0CisgICAgICBpdGVtIG9mIHRoZSAncnVudGltZXBhdGgnIG9wdGlvbi4gIEV4YW1wbGUgZm9yIFVuaXg6ID4KKwk6IW1rZGlyIH4vLnZpbQorPAorICAgMi4gQ3JlYXRlIGEgdmltIHNjcmlwdCBmaWxlIGZvciBkb2luZyB0aGlzLiAgRXhhbXBsZTogPgorCWlmIGRpZF9maWxldHlwZSgpCSIgZmlsZXR5cGUgYWxyZWFkeSBzZXQuLgorCSAgZmluaXNoCQkiIC4uZG9uJ3QgZG8gdGhlc2UgY2hlY2tzCisJZW5kaWYKKwlpZiBnZXRsaW5lKDEpID1+ICdeIyEuKlw8bWluZVw+JworCSAgc2V0ZmlsZXR5cGUgbWluZQorCWVsc2VpZiBnZXRsaW5lKDEpID1+PyAnXDxkcmF3aW5nXD4nCisJICBzZXRmaWxldHlwZSBkcmF3aW5nCisJZW5kaWYKKzwgICAgIFNlZSAkVklNUlVOVElNRS9zY3JpcHRzLnZpbSBmb3IgbW9yZSBleGFtcGxlcy4KKyAgICAgIFdyaXRlIHRoaXMgZmlsZSBhcyAic2NyaXB0cy52aW0iIGluIHlvdXIgdXNlciBydW50aW1lIGRpcmVjdG9yeS4gIEZvcgorICAgICAgZXhhbXBsZSwgZm9yIFVuaXg6ID4KKwk6dyB+Ly52aW0vc2NyaXB0cy52aW0KKzwKKyAgIDMuIFRoZSBkZXRlY3Rpb24gd2lsbCB3b3JrIHJpZ2h0IGF3YXksIG5vIG5lZWQgdG8gcmVzdGFydCBWaW0uCisKKyAgIFlvdXIgc2NyaXB0cy52aW0gaXMgbG9hZGVkIGJlZm9yZSB0aGUgZGVmYXVsdCBjaGVja3MgZm9yIGZpbGUgdHlwZXMsIHdoaWNoCisgICBtZWFucyB0aGF0IHlvdXIgcnVsZXMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcnVsZXMgaW4KKyAgICRWSU1SVU5USU1FL3NjcmlwdHMudmltLgorCisJCQkJCQkqcmVtb3ZlLWZpbGV0eXBlKgorSWYgYSBmaWxlIHR5cGUgaXMgZGV0ZWN0ZWQgdGhhdCBpcyB3cm9uZyBmb3IgeW91LCBpbnN0YWxsIGEgZmlsZXR5cGUudmltIG9yCitzY3JpcHRzLnZpbSB0byBjYXRjaCBpdCAoc2VlIGFib3ZlKS4gIFlvdSBjYW4gc2V0ICdmaWxldHlwZScgdG8gYSBub24tZXhpc3RpbmcKK25hbWUgdG8gYXZvaWQgdGhhdCBpdCB3aWxsIGJlIHNldCBsYXRlciBhbnl3YXk6ID4KKwk6c2V0IGZpbGV0eXBlPWlnbm9yZWQKKworSWYgeW91IGFyZSBzZXR0aW5nIHVwIGEgc3lzdGVtIHdpdGggbWFueSB1c2VycywgYW5kIHlvdSBkb24ndCB3YW50IGVhY2ggdXNlcgordG8gYWRkL3JlbW92ZSB0aGUgc2FtZSBmaWxldHlwZXMsIGNvbnNpZGVyIHdyaXRpbmcgdGhlIGZpbGV0eXBlLnZpbSBhbmQKK3NjcmlwdHMudmltIGZpbGVzIGluIGEgcnVudGltZSBkaXJlY3RvcnkgdGhhdCBpcyB1c2VkIGZvciBldmVyeWJvZHkuICBDaGVjawordGhlICdydW50aW1lcGF0aCcgZm9yIGEgZGlyZWN0b3J5IHRvIHVzZS4gIElmIHRoZXJlIGlzbid0IG9uZSwgc2V0CisncnVudGltZXBhdGgnIGluIHRoZSB8c3lzdGVtLXZpbXJjfC4gIEJlIGNhcmVmdWwgdG8ga2VlcCB0aGUgZGVmYXVsdAorZGlyZWN0b3JpZXMhCisKKworCQkJCQkJKmF1dG9jbWQtb3NmaWxldHlwZXMqCitPbiBvcGVyYXRpbmcgc3lzdGVtcyB3aGljaCBzdXBwb3J0IHN0b3JpbmcgYSBmaWxlIHR5cGUgd2l0aCB0aGUgZmlsZSwgeW91IGNhbgorc3BlY2lmeSB0aGF0IGFuIGF1dG9jb21tYW5kIHNob3VsZCBvbmx5IGJlIGV4ZWN1dGVkIGlmIHRoZSBmaWxlIGlzIG9mIGEKK2NlcnRhaW4gdHlwZS4KKworVGhlIGFjdHVhbCB0eXBlIGNoZWNraW5nIGRlcGVuZHMgb24gd2hpY2ggcGxhdGZvcm0geW91IGFyZSBydW5uaW5nIFZpbQorb247IHNlZSB5b3VyIHN5c3RlbSdzIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKK1RvIHVzZSBvc2ZpbGV0eXBlIGNoZWNraW5nIGluIGFuIGF1dG9jb21tYW5kIHlvdSBzaG91bGQgcHV0IGEgbGlzdCBvZiB0eXBlcyB0bworbWF0Y2ggaW4gYW5nbGUgYnJhY2tldHMgaW4gcGxhY2Ugb2YgYSBwYXR0ZXJuLCBsaWtlIHRoaXM6ID4KKworCTphdSBCdWZSZWFkICouaHRtbCw8JmZhZjtIVE1MPiAgcnVudGltZSEgc3ludGF4L2h0bWwudmltCisKK1RoaXMgd2lsbCBtYXRjaDoKKworLSBBbnkgZmlsZSB3aG9zZSBuYW1lIGVuZHMgaW4gYC5odG1sJworLSBBbnkgZmlsZSB3aG9zZSB0eXBlIGlzIGAmZmFmJyBvciAnSFRNTCcsIHdoZXJlIHRoZSBtZWFuaW5nIG9mIHRoZXNlIHR5cGVzCisgIGRlcGVuZHMgb24gd2hpY2ggdmVyc2lvbiBvZiBWaW0geW91IGFyZSB1c2luZy4KKyAgVW5rbm93biB0eXBlcyBhcmUgY29uc2lkZXJlZCBOT1QgdG8gbWF0Y2guCisKK1lvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgdHlwZSBhbmQgYSBwYXR0ZXJuIGF0IHRoZSBzYW1lIHRpbWUgKGluIHdoaWNoIGNhc2UgdGhleQorbXVzdCBib3RoIG1hdGNoKTogPgorCisJOmF1IEJ1ZlJlYWQgPCZmZmY+ZGlmZioKKworVGhpcyB3aWxsIG1hdGNoIGZpbGVzIG9mIHR5cGUgYCZmZmYnIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggYGRpZmYnLgorCitOb3RlIHRoYXQgb3NmaWxldHlwZSBjaGVja2luZyBpcyBza2lwcGVkIGlmIFZpbSBpcyBjb21waWxlZCB3aXRob3V0IHRoZQorfCtvc2ZpbGV0eXBlfCBmZWF0dXJlLgorCisJCQkJCQkJKnBsdWdpbi1kZXRhaWxzKgorVGhlICJwbHVnaW4iIGRpcmVjdG9yeSBjYW4gYmUgaW4gYW55IG9mIHRoZSBkaXJlY3RvcmllcyBpbiB0aGUgJ3J1bnRpbWVwYXRoJworb3B0aW9uLiAgQWxsIG9mIHRoZXNlIGRpcmVjdG9yaWVzIHdpbGwgYmUgc2VhcmNoZWQgZm9yIHBsdWdpbnMgYW5kIHRoZXkgYXJlCithbGwgbG9hZGVkLiAgRm9yIGV4YW1wbGUsIGlmIHRoaXMgY29tbWFuZDogPgorCisJc2V0IHJ1bnRpbWVwYXRoCisKK3Byb2R1Y2VzIHRoaXMgb3V0cHV0OiA+CisKKwlydW50aW1lcGF0aD0vZXRjL3ZpbSx+Ly52aW0sL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltNjAKKwordGhlbiBWaW0gd2lsbCBsb2FkIGFsbCBwbHVnaW5zIGluIHRoZXNlIGRpcmVjdG9yaWVzOiA+CisKKwkvZXRjL3ZpbS9wbHVnaW4vCisJfi8udmltL3BsdWdpbi8KKwkvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW02MC9wbHVnaW4vCisKK05vdGUgdGhhdCB0aGUgbGFzdCBvbmUgaXMgdGhlIHZhbHVlIG9mICRWSU1SVU5USU1FIHdoaWNoIGhhcyBiZWVuIGV4cGFuZGVkLgorCitXaGF0IGlmIGl0IGxvb2tzIGxpa2UgeW91ciBwbHVnaW4gaXMgbm90IGJlaW5nIGxvYWRlZD8gIFlvdSBjYW4gZmluZCBvdXQgd2hhdAoraGFwcGVucyB3aGVuIFZpbSBzdGFydHMgdXAgYnkgdXNpbmcgdGhlIHwtVnwgYXJndW1lbnQ6ID4KKwl2aW0gLVYxCitZb3Ugd2lsbCBzZWUgYSBsb3Qgb2YgbWVzc2FnZXMsIGluIGJldHdlZW4gdGhlbSBpcyBhIHJlbWFyayBhYm91dCBsb2FkaW5nIHRoZQorcGx1Z2lucy4gIEl0IHN0YXJ0cyB3aXRoOiA+CisJU2VhcmNoaW5nIGZvciAicGx1Z2luLyoudmltIiBpbgorVGhlcmUgeW91IGNhbiBzZWUgd2hlcmUgVmltIGxvb2tzIGZvciB5b3VyIHBsdWdpbiBzY3JpcHRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIEZpbGV0eXBlIHBsdWdpbgkJCQkJKmZpbGV0eXBlLXBsdWdpbnMqCisKK1doZW4gbG9hZGluZyBmaWxldHlwZSBwbHVnaW5zIGhhcyBiZWVuIGVuYWJsZWQgfDpmaWxldHlwZS1wbHVnaW4tb258LCBvcHRpb25zCit3aWxsIGJlIHNldCBhbmQgbWFwcGluZ3MgZGVmaW5lZC4gIFRoZXNlIGFyZSBhbGwgbG9jYWwgdG8gdGhlIGJ1ZmZlciwgdGhleQord2lsbCBub3QgYmUgdXNlZCBmb3Igb3RoZXIgZmlsZXMuCisKK0RlZmluaW5nIG1hcHBpbmdzIGZvciBhIGZpbGV0eXBlIG1heSBnZXQgaW4gdGhlIHdheSBvZiB0aGUgbWFwcGluZ3MgeW91CitkZWZpbmUgeW91cnNlbGYuICBUaGVyZSBhcmUgYSBmZXcgd2F5cyB0byBhdm9pZCB0aGlzOgorMS4gU2V0IHRoZSAibWFwbG9jYWxsZWFkZXIiIHZhcmlhYmxlIHRvIHRoZSBrZXkgc2VxdWVuY2UgeW91IHdhbnQgdGhlIG1hcHBpbmdzCisgICB0byBzdGFydCB3aXRoLiAgRXhhbXBsZTogPgorCTpsZXQgbWFwbG9jYWxsZWFkZXIgPSAiLCIKKzwgIEFsbCBtYXBwaW5ncyB3aWxsIHRoZW4gc3RhcnQgd2l0aCBhIGNvbW1hIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQsIHdoaWNoCisgICBpcyBhIGJhY2tzbGFzaC4gIEFsc28gc2VlIHw8TG9jYWxMZWFkZXI+fC4KKworMi4gRGVmaW5lIHlvdXIgb3duIG1hcHBpbmcuICBFeGFtcGxlOiA+CisJOm1hcCAscCA8UGx1Zz5NYWlsUXVvdGUKKzwgIFlvdSBuZWVkIHRvIGNoZWNrIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcGx1Z2luIGZpbGUgYmVsb3cgZm9yIHRoZQorICAgZnVuY3Rpb25hbGl0eSBpdCBvZmZlcnMgYW5kIHRoZSBzdHJpbmcgdG8gbWFwIHRvLgorICAgWW91IG5lZWQgdG8gZGVmaW5lIHlvdXIgb3duIG1hcHBpbmcgYmVmb3JlIHRoZSBwbHVnaW4gaXMgbG9hZGVkIChiZWZvcmUKKyAgIGVkaXRpbmcgYSBmaWxlIG9mIHRoYXQgdHlwZSkuICBUaGUgcGx1Z2luIHdpbGwgdGhlbiBza2lwIGluc3RhbGxpbmcgdGhlCisgICBkZWZhdWx0IG1hcHBpbmcuCisKKzMuIERpc2FibGUgZGVmaW5pbmcgbWFwcGluZ3MgZm9yIGEgc3BlY2lmaWMgZmlsZXR5cGUgYnkgc2V0dGluZyBhIHZhcmlhYmxlLAorICAgd2hpY2ggY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGZpbGV0eXBlLiAgRm9yIHRoZSAibWFpbCIgZmlsZXR5cGUgdGhpcworICAgd291bGQgYmU6ID4KKwk6bGV0IG5vX21haWxfbWFwcyA9IDEKKworNC4gRGlzYWJsZSBkZWZpbmluZyBtYXBwaW5ncyBmb3IgYWxsIGZpbGV0eXBlcyBieSBzZXR0aW5nIGEgdmFyaWFibGU6ID4KKwk6bGV0IG5vX3BsdWdpbl9tYXBzID0gMQorPAorCisJCQkJCQkJKmZ0cGx1Z2luLW92ZXJydWxlKgorSWYgYSBnbG9iYWwgZmlsZXR5cGUgcGx1Z2luIGRvZXMgbm90IGRvIGV4YWN0bHkgd2hhdCB5b3Ugd2FudCwgdGhlcmUgYXJlIHRocmVlCit3YXlzIHRvIGNoYW5nZSB0aGlzOgorCisxLiBBZGQgYSBmZXcgc2V0dGluZ3MuCisgICBZb3UgbXVzdCBjcmVhdGUgYSBuZXcgZmlsZXR5cGUgcGx1Z2luIGluIGEgZGlyZWN0b3J5IGVhcmx5IGluCisgICAncnVudGltZXBhdGgnLiAgRm9yIFVuaXgsIGZvciBleGFtcGxlIHlvdSBjb3VsZCB1c2UgdGhpcyBmaWxlOiA+CisJdmltIH4vLnZpbS9mdHBsdWdpbi9mb3J0cmFuLnZpbQorPCAgWW91IGNhbiBzZXQgdGhvc2Ugc2V0dGluZ3MgYW5kIG1hcHBpbmdzIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gYWRkLiAgTm90ZQorICAgdGhhdCB0aGUgZ2xvYmFsIHBsdWdpbiB3aWxsIGJlIGxvYWRlZCBhZnRlciB0aGlzLCBpdCBtYXkgb3ZlcnJ1bGUgdGhlCisgICBzZXR0aW5ncyB0aGF0IHlvdSBkbyBoZXJlLiAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IG5lZWQgdG8gdXNlIG9uZSBvZiB0aGUKKyAgIGZvbGxvd2luZyB0d28gbWV0aG9kcy4KKworMi4gTWFrZSBhIGNvcHkgb2YgdGhlIHBsdWdpbiBhbmQgY2hhbmdlIGl0LgorICAgWW91IG11c3QgcHV0IHRoZSBjb3B5IGluIGEgZGlyZWN0b3J5IGVhcmx5IGluICdydW50aW1lcGF0aCcuICBGb3IgVW5peCwgZm9yCisgICBleGFtcGxlLCB5b3UgY291bGQgZG8gdGhpczogPgorCWNwICRWSU1SVU5USU1FL2Z0cGx1Z2luL2ZvcnRyYW4udmltIH4vLnZpbS9mdHBsdWdpbi9mb3J0cmFuLnZpbQorPCAgVGhlbiB5b3UgY2FuIGVkaXQgdGhlIGNvcGllZCBmaWxlIHRvIHlvdXIgbGlraW5nLiAgU2luY2UgdGhlIGI6ZGlkX2Z0cGx1Z2luCisgICB2YXJpYWJsZSB3aWxsIGJlIHNldCwgdGhlIGdsb2JhbCBwbHVnaW4gd2lsbCBub3QgYmUgbG9hZGVkLgorICAgQSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgaXMgdGhhdCB3aGVuIHRoZSBkaXN0cmlidXRlZCBwbHVnaW4gZ2V0cworICAgaW1wcm92ZWQsIHlvdSB3aWxsIGhhdmUgdG8gY29weSBhbmQgbW9kaWZ5IGl0IGFnYWluLgorCiszLiBPdmVycnVsZSB0aGUgc2V0dGluZ3MgYWZ0ZXIgbG9hZGluZyB0aGUgZ2xvYmFsIHBsdWdpbi4KKyAgIFlvdSBtdXN0IGNyZWF0ZSBhIG5ldyBmaWxldHlwZSBwbHVnaW4gaW4gYSBkaXJlY3RvcnkgZnJvbSB0aGUgZW5kIG9mCisgICAncnVudGltZXBhdGgnLiAgRm9yIFVuaXgsIGZvciBleGFtcGxlLCB5b3UgY291bGQgdXNlIHRoaXMgZmlsZTogPgorCXZpbSB+Ly52aW0vYWZ0ZXIvZnRwbHVnaW4vZm9ydHJhbi52aW0KKzwgIEluIHRoaXMgZmlsZSB5b3UgY2FuIGNoYW5nZSBqdXN0IHRob3NlIHNldHRpbmdzIHRoYXQgeW91IHdhbnQgdG8gY2hhbmdlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuICBEb2NzIGZvciB0aGUgZGVmYXVsdCBmaWxldHlwZSBwbHVnaW5zLgkJKmZ0cGx1Z2luLWRvY3MqCisKKworQ0hBTkdFTE9HCQkJCQkJKmNoYW5nZWxvZy1wbHVnaW4qCisKK0FsbG93cyBmb3IgZWFzeSBlbnRyYW5jZSBvZiBDaGFuZ2Vsb2cgZW50cmllcyBpbiBDaGFuZ2Vsb2cgZmlsZXMuIFRoZXJlIGFyZQorc29tZSBjb21tYW5kcywgbWFwcGluZ3MsIGFuZCB2YXJpYWJsZXMgd29ydGggZXhwbG9yaW5nOgorCitPcHRpb25zOgorJ2NvbW1lbnRzJwkJaXMgbWFkZSBlbXB0eSB0byBub3QgbWVzcyB1cCBmb3JtYXR0aW5nLgorJ3RleHR3aWR0aCcJCWlzIHNldCB0byA3OCwgd2hpY2ggaXMgc3RhbmRhcmQuCisnZm9ybWF0b3B0aW9ucycJCXRoZSAndCcgZmxhZyBpcyBhZGRlZCB0byB3cmFwIHdoZW4gaW5zZXJ0aW5nIHRleHQuCisKK0NvbW1hbmRzOgorTmV3Q2hhbmdlbG9nRW50cnkJQWRkcyBhIG5ldyBDaGFuZ2Vsb2cgZW50cnkgaW4gYW4gaW50ZWxsaWdlbnQgZmFzaGlvbgorCQkJKHNlZSBiZWxvdykuCisKK0xvY2FsIG1hcHBpbmdzOgorPExlYWRlcj5vCQlTdGFydHMgYSBuZXcgQ2hhbmdlbG9nIGVudHJ5IGluIGFuIGVxdWFsbHkgaW50ZWxsaWdlbnQKKwkJCWZhc2hpb24gKHNlZSBiZWxvdykuCisKK0dsb2JhbCBtYXBwaW5nczoKKwkJCU5PVEU6IFRoZSBnbG9iYWwgbWFwcGluZ3MgYXJlIGFjY2Vzc2VkIGJ5IHNvdXJjaW5nIHRoZQorCQkJZnRwbHVnaW4vY2hhbmdlbG9nLnZpbSBmaWxlIGZpcnN0LCBlLmcuIHdpdGggPgorCQkJCXJ1bnRpbWUgZnRwbHVnaW4vbWFuLnZpbQorPAkJCWluIHlvdXIgfC52aW1yY3wuCis8TGVhZGVyPm8JCVN3aXRjaGVzIHRvIHRoZSBDaGFuZ2VMb2cgYnVmZmVyIG9wZW5lZCBmb3IgdGhlCisJCQljdXJyZW50IGRpcmVjdG9yeSwgb3Igb3BlbnMgaXQgaW4gYSBuZXcgYnVmZmVyIGlmIGl0CisJCQlleGlzdHMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgVGhlbiBpdCBkb2VzIHRoZQorCQkJc2FtZSBhcyB0aGUgbG9jYWwgPExlYWRlcj5vIGRlc2NyaWJlZCBhYm92ZS4KKworVmFyaWFibGVzOgorZzpjaGFuZ2Vsb2dfdGltZWZvcm1hdAlUaGUgZGF0ZSAoYW5kIHRpbWUpIGZvcm1hdCB1c2VkIGluIENoYW5nZUxvZyBlbnRyaWVzLgorCQkJVGhlIGZvcm1hdCBhY2NlcHRlZCBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlCisJCQl8c3RyZnRpbWUoKXwgZnVuY3Rpb24uCisJCQlUaGUgZGVmYXVsdCBpcyAiJVktJW0tJWQiIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBmb3JtYXQKKwkJCWZvciBtYW55IENoYW5nZUxvZyBsYXlvdXRzLgorZzpjaGFuZ2Vsb2dfdXNlcm5hbWUJVGhlIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIuCisJCQlUaGUgZGVmYXVsdCBpcyBkZWR1Y2VkIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZAorCQkJc3lzdGVtIGZpbGVzLiAgSXQgc2VhcmNoZXMgL2V0Yy9wYXNzd2QgZm9yIHRoZSBjb21tZW50CisJCQlwYXJ0IG9mIHRoZSBjdXJyZW50IHVzZXIsIHdoaWNoIGluZm9ybWFsbHkgY29udGFpbnMKKwkJCXRoZSByZWFsIG5hbWUgb2YgdGhlIHVzZXIgdXAgdG8gdGhlIGZpcnN0IHNlcGFyYXRpbmcKKwkJCWNvbW1hLiAgdGhlbiBpdCBjaGVja3MgdGhlICROQU1FIGVudmlyb25tZW50IHZhcmlhYmxlCisJCQlhbmQgZmluYWxseSBydW5zIGB3aG9hbWlgIGFuZCBgaG9zdG5hbWVgIHRvIGJ1aWxkIGFuCisJCQllbWFpbCBhZGRyZXNzLiAgVGhlIGZpbmFsIGZvcm0gaXMgPgorCQkJCUZ1bGwgTmFtZSAgPHVzZXJAaG9zdD4KKzwKK2c6Y2hhbmdlbG9nX25ld19kYXRlX2Zvcm1hdAorCQkJVGhlIGZvcm1hdCB0byB1c2Ugd2hlbiBjcmVhdGluZyBhIG5ldyBkYXRlLWVudHJ5LgorCQkJVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgc3BlY2lhbCB0b2tlbnMgaW4gdGhlCisJCQlzdHJpbmc6CisJCQkJJSUJaW5zZXJ0IGEgc2luZ2xlICclJyBjaGFyYWN0ZXIKKwkJCQklZAlpbnNlcnQgdGhlIGRhdGUgZnJvbSBhYm92ZQorCQkJCSV1CWluc2VydCB0aGUgdXNlciBmcm9tIGFib3ZlCisJCQkJJWMJd2hlcmUgdG8gcG9zaXRpb24gY3Vyc29yIHdoZW4gZG9uZQorCQkJVGhlIGRlZmF1bHQgaXMgIiVkICAldVxuXG5cdCogJWNcblxuIiwgd2hpY2ggcHJvZHVjZXMKKwkJCXNvbWV0aGluZyBsaWtlICh8IGlzIHdoZXJlIGN1cnNvciB3aWxsIGJlLCB1bmxlc3MgYXQKKwkJCXRoZSBzdGFydCBvZiB0aGUgbGluZSB3aGVyZSBpdCBkZW5vdGVzIHRoZSBiZWdpbm5pbmcKKwkJCW9mIHRoZSBsaW5lKSA+CisJCQkJfDIwMDMtMDEtMTQgIEZ1bGwgTmFtZSAgPHVzZXJAaG9zdD4KKwkJCQl8CisJCQkJfCAgICAgICAgKiB8Cis8CitnOmNoYW5nZWxvZ19uZXdfZW50cnlfZm9ybWF0CisJCQlUaGUgZm9ybWF0IHVzZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBlbnRyeS4KKwkJCVRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHNwZWNpYWwgdG9rZW5zIGluIHRoZQorCQkJc3RyaW5nOgorCQkJCSVjCXdoZXJlIHRvIHBvc2l0aW9uIGN1cnNvciB3aGVuIGRvbmUKKwkJCVRoZSBkZWZhdWx0IGlzICJcdColYyIsIHdoaWNoIHByb2R1Y2VzIHNvbWV0aGluZworCQkJc2ltaWxhciB0byA+CisJCQkJfCAgICAgICAgKiB8Cis8CitnOmNoYW5nZWxvZ19kYXRlX2VudHJ5X3NlYXJjaAorCQkJVGhlIHNlYXJjaCBwYXR0ZXJuIHRvIHVzZSB3aGVuIHNlYXJjaGluZyBmb3IgYQorCQkJZGF0ZS1lbnRyeS4KKwkJCVRoZSBzYW1lIHRva2VucyB0aGF0IGNhbiBiZSB1c2VkIGZvcgorCQkJZzpjaGFuZ2Vsb2dfbmV3X2RhdGVfZm9ybWF0IGNhbiBiZSB1c2VkIGhlcmUgYXMgd2VsbC4KKwkJCVRoZSBkZWZhdWx0IGlzICdeXHMqJWRcX3MqJXUnIHdoaWNoIGZpbmRzIGxpbmVzCisJCQltYXRjaGluZyB0aGUgZm9ybSA+CisJCQkJfDIwMDMtMDEtMTQgIEZ1bGwgTmFtZSAgPHVzZXJAaG9zdD4KKzwJCQlhbmQgc29tZSBzaW1pbGFyIGZvcm1hdHMuCisKK1RoZSBDaGFuZ2Vsb2cgZW50cmllcyBhcmUgaW5zZXJ0ZWQgd2hlcmUgdGhleSBhZGQgdGhlIGxlYXN0IGFtb3VudCBvZiB0ZXh0LgorQWZ0ZXIgZmlndXJpbmcgb3V0IHRoZSBjdXJyZW50IGRhdGUgYW5kIHVzZXIsIHRoZSBmaWxlIGlzIHNlYXJjaGVkIGZvciBhbgorZW50cnkgYmVnaW5uaW5nIHdpdGggdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdXNlciBhbmQgaWYgZm91bmQgYWRkcyBhbm90aGVyIGl0ZW0KK3VuZGVyIGl0LiBJZiBub3QgZm91bmQsIGEgbmV3IGVudHJ5IGFuZCBpdGVtIGlzIHByZXBlbmRlZCB0byB0aGUgYmVnaW5uaW5nIG9mCit0aGUgQ2hhbmdlbG9nLgorCisKK0ZPUlRSQU4JCQkJCQkJKmZvcnRyYW4tcGx1Z2luKgorCitPcHRpb25zOgorJ2V4cGFuZHRhYicJaXMgc3dpdGNoZWQgb24gdG8gYXZvaWQgdGFicyBhcyByZXF1aXJlZCBieSB0aGUgRm9ydHJhbgorCQlzdGFuZGFyZHMgdW5sZXNzIHRoZSB1c2VyIGhhcyBzZXQgZm9ydHJhbl9oYXZlX3RhYnMgaW4gLnZpbXJjLgorJ3RleHR3aWR0aCcJaXMgc2V0IHRvIDcyIGZvciBmaXhlZCBzb3VyY2UgZm9ybWF0IGFzIHJlcXVpcmVkIGJ5IHRoZQorCQlGb3J0cmFuIHN0YW5kYXJkcyBhbmQgdG8gODAgZm9yIGZyZWUgc291cmNlIGZvcm1hdC4KKydmb3JtYXRvcHRpb25zJyBpcyBzZXQgdG8gYnJlYWsgY29kZSBhbmQgY29tbWVudCBsaW5lcyBhbmQgdG8gcHJlc2VydmUgbG9uZworCQlsaW5lcy4gWW91IGNhbiBmb3JtYXQgY29tbWVudHMgd2l0aCB8Z3F8LgorRm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbiBvZiBmb3J0cmFuX2hhdmVfdGFicyBhbmQgdGhlIG1ldGhvZCB1c2VkIGZvciB0aGUKK2RldGVjdGlvbiBvZiBzb3VyY2UgZm9ybWF0IHNlZSB8Zm9ydHJhbi1zeW50YXh8LgorCisKK01BSUwJCQkJCQkJKm1haWwtcGx1Z2luKgorCitPcHRpb25zOgorJ21vZGVsaW5lJwlpcyBzd2l0Y2hlZCBvZmYgdG8gYXZvaWQgdGhlIGRhbmdlciBvZiB0cm9qYW4gaG9yc2VzLCBhbmQgdG8KKwkJYXZvaWQgdGhhdCBhIFN1YmplY3QgbGluZSB3aXRoICJWaW06IiBpbiBpdCB3aWxsIGNhdXNlIGFuCisJCWVycm9yIG1lc3NhZ2UuCisndGV4dHdpZHRoJwlpcyBzZXQgdG8gNzIuICBUaGlzIGlzIG9mdGVuIHJlY29tbWVuZGVkIGZvciBlLW1haWwuCisnZm9ybWF0b3B0aW9ucycgIGlzIHNldCB0byBicmVhayB0ZXh0IGxpbmVzIGFuZCB0byByZXBlYXQgdGhlIGNvbW1lbnQgbGVhZGVyCisJCWluIG5ldyBsaW5lcywgc28gdGhhdCBhIGxlYWRpbmcgIj4iIGZvciBxdW90ZXMgaXMgcmVwZWF0ZWQuCisJCVlvdSBjYW4gYWxzbyBmb3JtYXQgcXVvdGVkIHRleHQgd2l0aCB8Z3F8LgorCitMb2NhbCBtYXBwaW5nczoKKzxMb2NhbExlYWRlcj5xICAgb3IgICBcXE1haWxRdW90ZQorCVF1b3RlcyB0aGUgdGV4dCBzZWxlY3RlZCBpbiBWaXN1YWwgbW9kZSwgb3IgZnJvbSB0aGUgY3Vyc29yIHBvc2l0aW9uCisJdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBpbiBOb3JtYWwgbW9kZS4gIFRoaXMgbWVhbnMgIj4gIiBpcyBpbnNlcnRlZCBpbgorCWVhY2ggbGluZS4KKworTUFOCQkJCQkJCSptYW4tcGx1Z2luKiAqOk1hbioKKworRGlzcGxheXMgYSBtYW51YWwgcGFnZSBpbiBhIG5pY2Ugd2F5LiAgQWxzbyBzZWUgdGhlIHVzZXIgbWFudWFsCit8ZmluZC1tYW5wYWdlfC4KKworVG8gc3RhcnQgdXNpbmcgdGhlICI6TWFuIiBjb21tYW5kIGJlZm9yZSBhbnkgbWFudWFsIHBhZ2Ugd2FzIGxvYWRlZCwgc291cmNlCit0aGlzIHNjcmlwdCBmcm9tIHlvdXIgc3RhcnR1cCB2aW1yYyBmaWxlOiA+CisKKwlydW50aW1lIGZ0cGx1Z2luL21hbi52aW0KKworT3B0aW9uczoKKydpc2tleXdvcmQnCXRoZSAnLicgY2hhcmFjdGVyIGlzIGFkZGVkIHRvIGJlIGFibGUgdG8gdXNlIENUUkwtXSBvbiB0aGUKKwkJbWFudWFsIHBhZ2UgbmFtZS4KKworQ29tbWFuZHM6CitNYW4ge25hbWV9CURpc3BsYXkgdGhlIG1hbnVhbCBwYWdlIGZvciB7bmFtZX0gaW4gYSB3aW5kb3cuCitNYW4ge251bWJlcn0ge25hbWV9CisJCURpc3BsYXkgdGhlIG1hbnVhbCBwYWdlIGZvciB7bmFtZX0gaW4gYSBzZWN0aW9uIHtudW1iZXJ9LgorCitHbG9iYWwgbWFwcGluZzoKKzxMZWFkZXI+SwlEaXNwbGF5cyB0aGUgbWFudWFsIHBhZ2UgZm9yIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuCisKK0xvY2FsIG1hcHBpbmdzOgorQ1RSTC1dCQlKdW1wIHRvIHRoZSBtYW51YWwgcGFnZSBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4KK0NUUkwtVAkJSnVtcCBiYWNrIHRvIHRoZSBwcmV2aW91cyBtYW51YWwgcGFnZS4KKworCitSUE0gU1BFQwkJCQkJCSpzcGVjLXBsdWdpbioKKworU2luY2UgdGhlIHRleHQgZm9yIHRoaXMgcGx1Z2luIGlzIHJhdGhlciBsb25nIGl0IGhhcyBiZWVuIHB1dCBpbiBhIHNlcGFyYXRlCitmaWxlOiB8cGlfc3BlYy50eHR8LgorCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9mb2xkLnR4dCBiL3J1bnRpbWUvZG9jL2ZvbGQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZTEyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9mb2xkLnR4dApAQCAtMCwwICsxLDU4MSBAQAorKmZvbGQudHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAyMAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK0ZvbGRpbmcJCQkJCQkqRm9sZGluZyogKmZvbGRpbmcqCisKK1lvdSBjYW4gZmluZCBhbiBpbnRyb2R1Y3Rpb24gb24gZm9sZGluZyBpbiBjaGFwdGVyIDI4IG9mIHRoZSB1c2VyIG1hbnVhbC4KK3x1c3JfMjgudHh0fAorCisxLiBGb2xkIG1ldGhvZHMJCXxmb2xkLW1ldGhvZHN8CisyLiBGb2xkIGNvbW1hbmRzCXxmb2xkLWNvbW1hbmRzfAorMy4gRm9sZCBvcHRpb25zCQl8Zm9sZC1vcHRpb25zfAorNC4gQmVoYXZpb3Igb2YgZm9sZHMJfGZvbGQtYmVoYXZpb3J8CisKK3tWaSBoYXMgbm8gRm9sZGluZ30KK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK2ZvbGRpbmcgZmVhdHVyZX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBGb2xkIG1ldGhvZHMJCQkJCSpmb2xkLW1ldGhvZHMqCisKK1RoZSBmb2xkaW5nIG1ldGhvZCBjYW4gYmUgc2V0IHdpdGggdGhlICdmb2xkbWV0aG9kJyBvcHRpb24uCisKK1doZW4gc2V0dGluZyAnZm9sZG1ldGhvZCcgdG8gYSB2YWx1ZSBvdGhlciB0aGFuICJtYW51YWwiLCBhbGwgZm9sZHMgYXJlCitkZWxldGVkIGFuZCBuZXcgb25lcyBjcmVhdGVkLiAgU3dpdGNoaW5nIHRvIHRoZSAibWFudWFsIiBtZXRob2QgZG9lc24ndCByZW1vdmUKK3RoZSBleGlzdGluZyBmb2xkcy4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gZmlyc3QgZGVmaW5lIHRoZSBmb2xkcyBhdXRvbWF0aWNhbGx5CithbmQgdGhlbiBjaGFuZ2UgdGhlbSBtYW51YWxseS4KKworVGhlcmUgYXJlIHNpeCBtZXRob2RzIHRvIHNlbGVjdCBmb2xkczoKKwltYW51YWwJCW1hbnVhbGx5IGRlZmluZSBmb2xkcworCWluZGVudAkJbW9yZSBpbmRlbnQgbWVhbnMgYSBoaWdoZXIgZm9sZCBsZXZlbAorCWV4cHIJCXNwZWNpZnkgYW4gZXhwcmVzc2lvbiB0byBkZWZpbmUgZm9sZHMKKwlzeW50YXgJCWZvbGRzIGRlZmluZWQgYnkgc3ludGF4IGhpZ2hsaWdodGluZworCWRpZmYJCWZvbGRzIGZvciB1bmNoYW5nZWQgdGV4dAorCW1hcmtlcgkJZm9sZHMgZGVmaW5lZCBieSBtYXJrZXJzIGluIHRoZSB0ZXh0CisKKworTUFOVUFMCQkJCQkJKmZvbGQtbWFudWFsKgorCitVc2UgY29tbWFuZHMgdG8gbWFudWFsbHkgZGVmaW5lIHRoZSBmb2xkIHJlZ2lvbnMuICBUaGlzIGNhbiBhbHNvIGJlIHVzZWQgYnkgYQorc2NyaXB0IHRoYXQgcGFyc2VzIHRleHQgdG8gZmluZCBmb2xkcy4KKworVGhlIGxldmVsIG9mIGEgZm9sZCBpcyBvbmx5IGRlZmluZWQgYnkgaXRzIG5lc3RpbmcuICBUbyBpbmNyZWFzZSB0aGUgZm9sZAorbGV2ZWwgb2YgYSBmb2xkIGZvciBhIHJhbmdlIG9mIGxpbmVzLCBkZWZpbmUgYSBmb2xkIGluc2lkZSBpdCB0aGF0IGhhcyB0aGUKK3NhbWUgbGluZXMuCisKK1RoZSBtYW51YWwgZm9sZHMgYXJlIGxvc3Qgd2hlbiB5b3UgYWJhbmRvbiB0aGUgZmlsZS4gIFRvIHNhdmUgdGhlIGZvbGRzIHVzZQordGhlIHw6bWt2aWV3fCBjb21tYW5kLiAgVGhlIHZpZXcgY2FuIGJlIHJlc3RvcmVkIGxhdGVyIHdpdGggfDpsb2Fkdmlld3wuCisKKworSU5ERU5UCQkJCQkJKmZvbGQtaW5kZW50KgorCitUaGUgZm9sZHMgYXJlIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBieSB0aGUgaW5kZW50IG9mIHRoZSBsaW5lcy4KKworVGhlIGZvbGRsZXZlbCBpcyBjb21wdXRlZCBmcm9tIHRoZSBpbmRlbnQgb2YgdGhlIGxpbmUsIGRpdmlkZWQgYnkgdGhlCisnc2hpZnR3aWR0aCcgKHJvdW5kZWQgZG93bikuICBBIHNlcXVlbmNlIG9mIGxpbmVzIHdpdGggdGhlIHNhbWUgb3IgaGlnaGVyIGZvbGQKK2xldmVsIGZvcm0gYSBmb2xkLCB3aXRoIHRoZSBsaW5lcyB3aXRoIGEgaGlnaGVyIGxldmVsIGZvcm1pbmcgYSBuZXN0ZWQgZm9sZC4KKworVGhlIG5lc3Rpbmcgb2YgZm9sZHMgaXMgbGltaXRlZCB3aXRoICdmb2xkbmVzdG1heCcuCisKK1NvbWUgbGluZXMgYXJlIGlnbm9yZWQgYW5kIGdldCB0aGUgZm9sZCBsZXZlbCBvZiB0aGUgbGluZSBhYm92ZSBvciBiZWxvdyBpdCwKK3doYXRldmVyIGlzIHRoZSBsb3dlc3QuICBUaGVzZSBhcmUgZW1wdHkgb3Igd2hpdGUgbGluZXMgYW5kIGxpbmVzIHN0YXJ0aW5nCit3aXRoIGEgY2hhcmFjdGVyIGluICdmb2xkaWdub3JlJy4gIFdoaXRlIHNwYWNlIGlzIHNraXBwZWQgYmVmb3JlIGNoZWNraW5nIGZvcgorY2hhcmFjdGVycyBpbiAnZm9sZGlnbm9yZScuICBGb3IgQyB1c2UgIiMiIHRvIGlnbm9yZSBwcmVwcm9jZXNzb3IgbGluZXMuCisKK1doZW4geW91IHdhbnQgdG8gaWdub3JlIGxpbmVzIGluIGFub3RoZXIgd2F5LCB1c2UgdGhlICdleHByJyBtZXRob2QuICBUaGUKK3xpbmRlbnQoKXwgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaW4gJ2ZvbGRleHByJyB0byBnZXQgdGhlIGluZGVudCBvZiBhIGxpbmUuCisKKworRVhQUgkJCQkJCSpmb2xkLWV4cHIqCisKK1RoZSBmb2xkcyBhcmUgYXV0b21hdGljYWxseSBkZWZpbmVkIGJ5IHRoZWlyIGZvbGRsZXZlbCwgbGlrZSB3aXRoIHRoZSAiaW5kZW50IgorbWV0aG9kLiAgVGhlIHZhbHVlIG9mIHRoZSAnZm9sZGV4cHInIG9wdGlvbiBpcyBldmFsdWF0ZWQgdG8gZ2V0IHRoZSBmb2xkbGV2ZWwKK29mIGEgbGluZS4gIEV4YW1wbGVzOgorVGhpcyB3aWxsIGNyZWF0ZSBhIGZvbGQgZm9yIGFsbCBjb25zZWN1dGl2ZSBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggYSBUYWI6ID4KKwk6c2V0IGZvbGRleHByPWdldGxpbmUodjpsbnVtKVswXT09XCJcXHRcIgorVGhpcyB3aWxsIGNhbGwgYSBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSBmb2xkIGxldmVsOiA+CisJOnNldCBmb2xkZXhwcj1NeUZvbGRMZXZlbCh2OmxudW0pCitUaGlzIHdpbGwgbWFrZSBhIGZvbGQgb3V0IG9mIHBhcmFncmFwaHMgc2VwYXJhdGVkIGJ5IGJsYW5rIGxpbmVzOiA+CisJOnNldCBmb2xkZXhwcj1nZXRsaW5lKHY6bG51bSk9fideXFxzKiQnJiZnZXRsaW5lKHY6bG51bSsxKT1+J1xcUyc/JzwxJzoxCit0aGlzIGRvZXMgdGhlIHNhbWU6ID4KKwk6c2V0IGZvbGRleHByPWdldGxpbmUodjpsbnVtLTEpPX4nXlxccyokJyYmZ2V0bGluZSh2OmxudW0pPX4nXFxTJz8nPjEnOjEKKworTm90ZSB0aGF0IGJhY2tzbGFzaGVzIG11c3QgYmUgdXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyB0aGF0ICI6c2V0IiBoYW5kbGVzCitkaWZmZXJlbnRseSAoc3BhY2UsIGJhY2tzbGFzaCwgZG91YmxlIHF1b3RlLCBldGMuLCBzZWUgfG9wdGlvbi1iYWNrc2xhc2h8KS4KKworVGhlc2UgYXJlIHRoZSBjb25kaXRpb25zIHdpdGggd2hpY2ggdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkOgorLSBUaGUgY3VycmVudCBidWZmZXIgYW5kIHdpbmRvdyBhcmUgc2V0IGZvciB0aGUgbGluZS4KKy0gVGhlIHZhcmlhYmxlICJ2OmxudW0iIGlzIHNldCB0byB0aGUgbGluZSBudW1iZXIuCistIFRoZSByZXN1bHQgaXMgdXNlZCBmb3IgdGhlIGZvbGQgbGV2ZWwgaW4gdGhpcyB3YXk6CisgIHZhbHVlCQkJbWVhbmluZyB+CisgIDAJCQl0aGUgbGluZSBpcyBub3QgaW4gYSBmb2xkCisgIDEsIDIsIC4uCQl0aGUgbGluZSBpcyBpbiBhIGZvbGQgd2l0aCB0aGlzIGxldmVsCisgIC0xCQkJdGhlIGZvbGQgbGV2ZWwgaXMgdW5kZWZpbmVkLCB1c2UgdGhlIGZvbGQgbGV2ZWwgb2YgYQorCQkJbGluZSBiZWZvcmUgb3IgYWZ0ZXIgdGhpcyBsaW5lLCB3aGljaGV2ZXIgaXMgdGhlCisJCQlsb3dlc3QuCisgICI9IgkJCXVzZSBmb2xkIGxldmVsIGZyb20gdGhlIHByZXZpb3VzIGxpbmUKKyAgImExIiwgImEyIiwgLi4JYWRkIG9uZSwgdHdvLCAuLiB0byB0aGUgZm9sZCBsZXZlbCBvZiB0aGUgcHJldmlvdXMKKwkJCWxpbmUKKyAgInMxIiwgInMyIiwgLi4Jc3VidHJhY3Qgb25lLCB0d28sIC4uIGZyb20gdGhlIGZvbGQgbGV2ZWwgb2YgdGhlCisJCQlwcmV2aW91cyBsaW5lCisgICI8MSIsICI8MiIsIC4uCWEgZm9sZCB3aXRoIHRoaXMgbGV2ZWwgZW5kcyBhdCB0aGlzIGxpbmUKKyAgIj4xIiwgIj4yIiwgLi4JYSBmb2xkIHdpdGggdGhpcyBsZXZlbCBzdGFydHMgYXQgdGhpcyBsaW5lCisKK0l0IGlzIG5vdCByZXF1aXJlZCB0byBtYXJrIHRoZSBzdGFydCAoZW5kKSBvZiBhIGZvbGQgd2l0aCAiPjEiICgiPDEiKSwgYSBmb2xkCit3aWxsIGFsc28gc3RhcnQgKGVuZCkgd2hlbiB0aGUgZm9sZCBsZXZlbCBpcyBoaWdoZXIgKGxvd2VyKSB0aGFuIHRoZSBmb2xkCitsZXZlbCBvZiB0aGUgcHJldmlvdXMgbGluZS4KKworVGhlcmUgbXVzdCBiZSBubyBzaWRlIGVmZmVjdHMgZnJvbSB0aGUgZXhwcmVzc2lvbi4gIFRoZSB0ZXh0IGluIHRoZSBidWZmZXIsCitjdXJzb3IgcG9zaXRpb24sIHRoZSBzZWFyY2ggcGF0dGVybnMsIG9wdGlvbnMgZXRjLiBtdXN0IG5vdCBiZSBjaGFuZ2VkLgorCitJZiB0aGVyZSBpcyBzb21lIGVycm9yIGluIHRoZSBleHByZXNzaW9uLCBvciB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzbid0CityZWNvZ25pemVkLCB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlIGFuZCB0aGUgZm9sZCBsZXZlbCB3aWxsIGJlIHplcm8uCitGb3IgZGVidWdnaW5nIHRoZSAnZGVidWcnIG9wdGlvbiBjYW4gYmUgc2V0IHRvICJtc2ciLCB0aGUgZXJyb3IgbWVzc2FnZXMgd2lsbAorYmUgdmlzaWJsZSB0aGVuLgorCitOb3RlOiBTaW5jZSB0aGUgZXhwcmVzc2lvbiBoYXMgdG8gYmUgZXZhbHVhdGVkIGZvciBldmVyeSBsaW5lLCB0aGlzIGZvbGQKK21ldGhvZCBjYW4gYmUgdmVyeSBzbG93IQorCitUcnkgdG8gYXZvaWQgdGhlICI9IiwgImEiIGFuZCAicyIgcmV0dXJuIHZhbHVlcywgc2luY2UgVmltIG9mdGVuIGhhcyB0byBzZWFyY2gKK2JhY2t3YXJkcyBmb3IgYSBsaW5lIGZvciB3aGljaCB0aGUgZm9sZCBsZXZlbCBpcyBkZWZpbmVkLiAgVGhpcyBjYW4gYmUgc2xvdy4KKworfGZvbGRsZXZlbCgpfCBjYW4gYmUgdXNlZnVsIHRvIGNvbXB1dGUgYSBmb2xkIGxldmVsIHJlbGF0aXZlIHRvIGEgcHJldmlvdXMKK2ZvbGQgbGV2ZWwuICBCdXQgbm90ZSB0aGF0IGZvbGRsZXZlbCgpIG1heSByZXR1cm4gLTEgaWYgdGhlIGxldmVsIGlzIG5vdCBrbm93bgoreWV0LiAgQW5kIGl0IHJldHVybnMgdGhlIGxldmVsIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSwgd2hpbGUgYSBmb2xkIG1pZ2h0CitlbmQgaW4gdGhhdCBsaW5lLgorCisKK1NZTlRBWAkJCQkJCSpmb2xkLXN5bnRheCoKKworQSBmb2xkIGlzIGRlZmluZWQgYnkgc3ludGF4IGl0ZW1zIHRoYXQgaGF2ZSB0aGUgImZvbGQiIGFyZ3VtZW50LiB8OnN5bi1mb2xkfAorCitUaGUgZm9sZCBsZXZlbCBpcyBkZWZpbmVkIGJ5IG5lc3RpbmcgZm9sZHMuICBUaGUgbmVzdGluZyBvZiBmb2xkcyBpcyBsaW1pdGVkCit3aXRoICdmb2xkbmVzdG1heCcuCisKK0JlIGNhcmVmdWwgdG8gc3BlY2lmeSBwcm9wZXIgc3ludGF4IHN5bmNpbmcuICBJZiB0aGlzIGlzIG5vdCBkb25lIHJpZ2h0LCBmb2xkcworbWF5IGRpZmZlciBmcm9tIHRoZSBkaXNwbGF5ZWQgaGlnaGxpZ2h0aW5nLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHJlbGV2YW50IHdoZW4KK3VzaW5nIHBhdHRlcm5zIHRoYXQgbWF0Y2ggbW9yZSB0aGFuIG9uZSBsaW5lLiAgSW4gY2FzZSBvZiBkb3VidCwgdHJ5IHVzaW5nCiticnV0ZS1mb3JjZSBzeW5jaW5nOiA+CisJOnN5biBzeW5jIGZyb21zdGFydAorCisKK0RJRkYJCQkJCQkqZm9sZC1kaWZmKgorCitUaGUgZm9sZHMgYXJlIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBmb3IgdGV4dCB0aGF0IGlzIG5vdCBwYXJ0IG9mIGEgY2hhbmdlIG9yCitjbG9zZSB0byBhIGNoYW5nZS4KKworVGhpcyBtZXRob2Qgb25seSB3b3JrcyBwcm9wZXJseSB3aGVuIHRoZSAnZGlmZicgb3B0aW9uIGlzIHNldCBmb3IgdGhlIGN1cnJlbnQKK3dpbmRvdyBhbmQgY2hhbmdlcyBhcmUgYmVpbmcgZGlzcGxheWVkLiAgT3RoZXJ3aXNlIHRoZSB3aG9sZSBidWZmZXIgd2lsbCBiZQorb25lIGJpZyBmb2xkLgorCitUaGUgJ2RpZmZvcHQnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb250ZXh0LiAgVGhhdCBpcywgdGhlIG51bWJlcgorb2YgbGluZXMgYmV0d2VlbiB0aGUgZm9sZCBhbmQgYSBjaGFuZ2UgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBmb2xkLiAgRm9yCitleGFtcGxlLCB0byB1c2UgYSBjb250ZXh0IG9mIDggbGluZXM6ID4KKwk6c2V0IGRpZmZvcHQ9ZmlsbGVyLGNvbnRleHQ6OAorVGhlIGRlZmF1bHQgY29udGV4dCBpcyBzaXggbGluZXMuCisKK1doZW4gJ3Njcm9sbGJpbmQnIGlzIGFsc28gc2V0LCBWaW0gd2lsbCBhdHRlbXB0IHRvIGtlZXAgdGhlIHNhbWUgZm9sZHMgb3BlbiBpbgorb3RoZXIgZGlmZiB3aW5kb3dzLCBzbyB0aGF0IHRoZSBzYW1lIHRleHQgaXMgdmlzaWJsZS4KKworCitNQVJLRVIJCQkJCQkqZm9sZC1tYXJrZXIqCisKK01hcmtlcnMgaW4gdGhlIHRleHQgdGVsbCB3aGVyZSBmb2xkcyBzdGFydCBhbmQgZW5kLiAgVGhpcyBhbGxvd3MgeW91IHRvCitwcmVjaXNlbHkgc3BlY2lmeSB0aGUgZm9sZHMuICBUaGlzIHdpbGwgYWxsb3cgZGVsZXRpbmcgYW5kIHB1dHRpbmcgYSBmb2xkLAord2l0aG91dCB0aGUgcmlzayBvZiBpbmNsdWRpbmcgdGhlIHdyb25nIGxpbmVzLiAgVGhlICdmb2xkdGV4dCcgb3B0aW9uIGlzCitub3JtYWxseSBzZXQgc3VjaCB0aGF0IHRoZSB0ZXh0IGJlZm9yZSB0aGUgbWFya2VyIHNob3dzIHVwIGluIHRoZSBmb2xkZWQgbGluZS4KK1RoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZ2l2ZSBhIG5hbWUgdG8gdGhlIGZvbGQuCisKK01hcmtlcnMgY2FuIGhhdmUgYSBsZXZlbCBpbmNsdWRlZCwgb3IgY2FuIHVzZSBtYXRjaGluZyBwYWlycy4gIEluY2x1ZGluZyBhCitsZXZlbCBpcyBlYXNpZXIsIHlvdSBkb24ndCBoYXZlIHRvIGFkZCBlbmQgbWFya2VycyBhbmQgYXZvaWQgcHJvYmxlbXMgd2l0aAorbm9uLW1hdGNoaW5nIG1hcmtlciBwYWlycy4gIEV4YW1wbGU6ID4KKwkvKiBnbG9iYWwgdmFyaWFibGVzIHt7ezEgKi8KKwlpbnQgdmFyQSwgdmFyQjsKKworCS8qIGZ1bmN0aW9ucyB7e3sxICovCisJLyogZnVuY0EoKSB7e3syICovCisJdm9pZCBmdW5jQSgpIHt9CisKKwkvKiBmdW5jQigpIHt7ezIgKi8KKwl2b2lkIGZ1bmNCKCkge30KKworQSBmb2xkIHN0YXJ0cyBhdCBhICJ7e3siIG1hcmtlci4gIFRoZSBmb2xsb3dpbmcgbnVtYmVyIHNwZWNpZmllcyB0aGUgZm9sZAorbGV2ZWwuICBXaGF0IGhhcHBlbnMgZGVwZW5kcyBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGZvbGQgbGV2ZWwKK2FuZCB0aGUgbGV2ZWwgZ2l2ZW4gYnkgdGhlIG1hcmtlcjoKKzEuIElmIGEgbWFya2VyIHdpdGggdGhlIHNhbWUgZm9sZCBsZXZlbCBpcyBlbmNvdW50ZXJlZCwgdGhlIHByZXZpb3VzIGZvbGQKKyAgIGVuZHMgYW5kIGFub3RoZXIgZm9sZCB3aXRoIHRoZSBzYW1lIGxldmVsIHN0YXJ0cy4KKzIuIElmIGEgbWFya2VyIHdpdGggYSBoaWdoZXIgZm9sZCBsZXZlbCBpcyBmb3VuZCwgYSBuZXN0ZWQgZm9sZCBpcyBzdGFydGVkLgorMy4gaWYgYSBtYXJrZXIgd2l0aCBhIGxvd2VyIGZvbGQgbGV2ZWwgaXMgZm91bmQsIGFsbCBmb2xkcyB1cCB0byBhbmQgaW5jbHVkaW5nCisgICB0aGlzIGxldmVsIGVuZCBhbmQgYSBmb2xkIHdpdGggdGhlIHNwZWNpZmllZCBsZXZlbCBzdGFydHMuCisKK1RoZSBudW1iZXIgaW5kaWNhdGVzIHRoZSBmb2xkIGxldmVsLiAgQSB6ZXJvIGNhbm5vdCBiZSB1c2VkLgorWW91IGNhbiB1c2UgIn19fSIgd2l0aCBhIGRpZ2l0IHRvIGluZGljYXRlIHRoZSBsZXZlbCBvZiB0aGUgZm9sZCB0aGF0CitlbmRzLiAgVGhlIGZvbGQgbGV2ZWwgb2YgdGhlIGZvbGxvd2luZyBsaW5lIHdpbGwgYmUgb25lIGxlc3MgdGhhbiB0aGUKK2luZGljYXRlZCBsZXZlbC4gIE5vdGUgdGhhdCBWaW0gZG9lc24ndCBsb29rIGJhY2sgdG8gdGhlIGxldmVsIG9mIHRoZSBtYXRjaGluZworbWFya2VyICh0aGF0IHdvdWxkIHRha2UgdG9vIG11Y2ggdGltZSkuICBFeGFtcGxlOiA+CisKKwl7e3sxCisJZm9sZCBsZXZlbCBoZXJlIGlzIDEKKwl7e3szCisJZm9sZCBsZXZlbCBoZXJlIGlzIDMKKwl9fX0zCisJZm9sZCBsZXZlbCBoZXJlIGlzIDIKKworWW91IGNhbiBhbHNvIHVzZSBtYXRjaGluZyBwYWlycyBvZiAie3t7IiBhbmQgIn19fSIgbWFya2VycyB0byBkZWZpbmUgZm9sZHMuCitFYWNoICJ7e3siIGluY3JlYXNlcyB0aGUgZm9sZCBsZXZlbCBieSBvbmUsIGVhY2ggIn19fSIgZGVjcmVhc2VzIHRoZSBmb2xkCitsZXZlbCBieSBvbmUuICBCZSBjYXJlZnVsIHRvIGtlZXAgdGhlIG1hcmtlcnMgbWF0Y2hpbmchICBFeGFtcGxlOiA+CisKKwl7e3sKKwlmb2xkIGxldmVsIGhlcmUgaXMgMQorCXt7eworCWZvbGQgbGV2ZWwgaGVyZSBpcyAyCisJfX19CisJZm9sZCBsZXZlbCBoZXJlIGlzIDEKKworWW91IGNhbiBtaXggdXNpbmcgbWFya2VycyB3aXRoIGEgbnVtYmVyIGFuZCB3aXRob3V0IGEgbnVtYmVyLiAgQSB1c2VmdWwgd2F5IG9mCitkb2luZyB0aGlzIGlzIHRvIHVzZSBudW1iZXJlZCBtYXJrZXJzIGZvciBsYXJnZSBmb2xkcywgYW5kIHVubnVtYmVyZWQgbWFya2VycworbG9jYWxseSBpbiBhIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUgdXNlIGxldmVsIG9uZSBmb2xkcyBmb3IgdGhlIHNlY3Rpb25zIG9mCit5b3VyIGZpbGUgbGlrZSAic3RydWN0dXJlIGRlZmluaXRpb25zIiwgImxvY2FsIHZhcmlhYmxlcyIgYW5kICJmdW5jdGlvbnMiLgorVXNlIGxldmVsIDIgbWFya2VycyBmb3IgZWFjaCBkZWZpbml0aW9uIGFuZCBmdW5jdGlvbiwgIFVzZSB1bm51bWJlcmVkIG1hcmtlcnMKK2luc2lkZSBmdW5jdGlvbnMuICBXaGVuIHlvdSBtYWtlIGNoYW5nZXMgaW4gYSBmdW5jdGlvbiB0byBzcGxpdCB1cCBmb2xkcywgeW91Citkb24ndCBoYXZlIHRvIHJlbnVtYmVyIHRoZSBtYXJrZXJzLgorCitUaGUgbWFya2VycyBjYW4gYmUgc2V0IHdpdGggdGhlICdmb2xkbWFya2VyJyBvcHRpb24uICBJdCBpcyByZWNvbW1lbmRlZCB0bwora2VlcCB0aGlzIGF0IHRoZSBkZWZhdWx0IHZhbHVlIG9mICJ7e3ssfX19Iiwgc28gdGhhdCBmaWxlcyBjYW4gYmUgZXhjaGFuZ2VkCitiZXR3ZWVuIFZpbSB1c2Vycy4gIE9ubHkgY2hhbmdlIGl0IHdoZW4gaXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBmaWxlIChlLmcuLCBpdAorY29udGFpbnMgbWFya2VycyBmcm9tIGFub3RoZXIgZm9sZGluZyBlZGl0b3IsIG9yIHRoZSBkZWZhdWx0IG1hcmtlcnMgY2F1c2UKK3Ryb3VibGUgZm9yIHRoZSBsYW5ndWFnZSBvZiB0aGUgZmlsZSkuCisKKwkJCQkJCQkqZm9sZC1jcmVhdGUtbWFya2VyKgorInpmIiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBmb2xkIGRlZmluZWQgYnkgbWFya2Vycy4gIFZpbSB3aWxsIGluc2VydCB0aGUKK21hcmtlcnMgZm9yIHlvdS4gIFZpbSB3aWxsIGFwcGVuZCB0aGUgc3RhcnQgYW5kIGVuZCBtYXJrZXIsIGFzIHNwZWNpZmllZCB3aXRoCisnZm9sZG1hcmtlcicuICBUaGUgbWFya2VycyBhcmUgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKydjb21tZW50c3RyaW5nJyBpcyB1c2VkIGlmIGl0IGlzbid0IGVtcHR5LgorVGhpcyBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IHdoZW46CistIFRoZSBsaW5lIGFscmVhZHkgY29udGFpbnMgYSBtYXJrZXIgd2l0aCBhIGxldmVsIG51bWJlci4gIFZpbSB0aGVuIGRvZXNuJ3QKKyAga25vdyB3aGF0IHRvIGRvLgorLSBGb2xkcyBuZWFyYnkgdXNlIGEgbGV2ZWwgbnVtYmVyIGluIHRoZWlyIG1hcmtlciB3aGljaCBnZXRzIGluIHRoZSB3YXkuCistIFRoZSBsaW5lIGlzIGluc2lkZSBhIGNvbW1lbnQsICdjb21tZW50c3RyaW5nJyBpc24ndCBlbXB0eSBhbmQgbmVzdGVkCisgIGNvbW1lbnRzIGRvbid0IHdvcmsuICBGb3IgZXhhbXBsZSB3aXRoIEM6IGFkZGluZyAvKiB7e3sgKi8gaW5zaWRlIGEgY29tbWVudAorICB3aWxsIHRydW5jYXRlIHRoZSBleGlzdGluZyBjb21tZW50LiAgRWl0aGVyIHB1dCB0aGUgbWFya2VyIGJlZm9yZSBvciBhZnRlcgorICB0aGUgY29tbWVudCwgb3IgYWRkIHRoZSBtYXJrZXIgbWFudWFsbHkuCitHZW5lcmFsbHkgaXQncyBub3QgYSBnb29kIGlkZWEgdG8gbGV0IFZpbSBjcmVhdGUgbWFya2VycyB3aGVuIHlvdSBhbHJlYWR5IGhhdmUKK21hcmtlcnMgd2l0aCBhIGxldmVsIG51bWJlci4KKworCQkJCQkJCSpmb2xkLWRlbGV0ZS1tYXJrZXIqCisiemQiIGNhbiBiZSB1c2VkIHRvIGRlbGV0ZSBhIGZvbGQgZGVmaW5lZCBieSBtYXJrZXJzLiAgVmltIHdpbGwgZGVsZXRlIHRoZQorbWFya2VycyBmb3IgeW91LiAgVmltIHdpbGwgc2VhcmNoIGZvciB0aGUgc3RhcnQgYW5kIGVuZCBtYXJrZXJzLCBhcyBzcGVjaWZpZWQKK3dpdGggJ2ZvbGRtYXJrZXInLCBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZm9sZC4gIFdoZW4gdGhlIHRleHQgYXJvdW5kIHRoZQorbWFya2VyIG1hdGNoZXMgd2l0aCAnY29tbWVudHN0cmluZycsIHRoYXQgdGV4dCBpcyBkZWxldGVkIGFzIHdlbGwuCitUaGlzIGRvZXMgbm90IHdvcmsgcHJvcGVybHkgd2hlbjoKKy0gQSBsaW5lIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgbWFya2VyIGFuZCBvbmUgb2YgdGhlbSBzcGVjaWZpZXMgYSBsZXZlbC4KKyAgT25seSB0aGUgZmlyc3Qgb25lIGlzIHJlbW92ZWQsIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhpcyB3aWxsIGhhdmUgdGhlCisgIGRlc2lyZWQgZWZmZWN0IG9mIGRlbGV0aW5nIHRoZSBmb2xkLgorLSBUaGUgbWFya2VyIGNvbnRhaW5zIGEgbGV2ZWwgbnVtYmVyIGFuZCBpcyB1c2VkIHRvIHN0YXJ0IG9yIGVuZCBzZXZlcmFsIGZvbGRzCisgIGF0IHRoZSBzYW1lIHRpbWUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gRm9sZCBjb21tYW5kcwkJCQkqZm9sZC1jb21tYW5kcyogKkU0OTAqCisKK0FsbCBmb2xkaW5nIGNvbW1hbmRzIHN0YXJ0IHdpdGggInoiLiAgSGludDogdGhlICJ6IiBsb29rcyBsaWtlIGEgZm9sZGVkIHBpZWNlCitvZiBwYXBlciwgaWYgeW91IGxvb2sgYXQgaXQgZnJvbSB0aGUgc2lkZS4KKworCitDUkVBVElORyBBTkQgREVMRVRJTkcgRk9MRFMgfgorCQkJCQkJCSp6ZiogKkUzNTAqCit6Znttb3Rpb259ICBvcgore1Zpc3VhbH16ZglPcGVyYXRvciB0byBjcmVhdGUgYSBmb2xkLgorCQlUaGlzIG9ubHkgd29ya3Mgd2hlbiAnZm9sZG1ldGhvZCcgaXMgIm1hbnVhbCIgb3IgIm1hcmtlciIuCisJCVRoZSBuZXcgZm9sZCB3aWxsIGJlIGNsb3NlZCBmb3IgdGhlICJtYW51YWwiIG1ldGhvZC4KKwkJJ2ZvbGRlbmFibGUnIHdpbGwgYmUgc2V0LgorCQlBbHNvIHNlZSB8Zm9sZC1jcmVhdGUtbWFya2VyfC4KKworCQkJCQkJCSp6RioKK3pGCQlDcmVhdGUgYSBmb2xkIGZvciBOIGxpbmVzLiAgV29ya3MgbGlrZSAiemYiLgorCis6e3JhbmdlfWZvW2xkXQkJCQkJCSo6Zm9sZCogKjpmbyoKKwkJQ3JlYXRlIGEgZm9sZCBmb3IgdGhlIGxpbmVzIGluIHtyYW5nZX0uICBXb3JrcyBsaWtlICJ6ZiIuCisKKwkJCQkJCQkqemQqICpFMzUxKgoremQJCURlbGV0ZSBvbmUgZm9sZCBhdCB0aGUgY3Vyc29yLiAgV2hlbiB0aGUgY3Vyc29yIGlzIG9uIGZvbGRlZAorCQlsaW5lLCB0aGF0IGZvbGQgaXMgZGVsZXRlZC4gIE5lc3RlZCBmb2xkcyBhcmUgbW92ZWQgb25lIGxldmVsCisJCXVwLiAgSW4gVmlzdWFsIG1vZGUgYWxsIGZvbGRzIChwYXJ0aWFsbHkpIGluIHRoZSBzZWxlY3RlZCBhcmVhCisJCWFyZSBkZWxldGVkLiAgQ2FyZWZ1bDogVGhpcyBlYXNpbHkgZGVsZXRlcyBtb3JlIGZvbGRzIHRoYW4geW91CisJCWV4cGVjdCBhbmQgdGhlcmUgaXMgbm8gdW5kby4KKwkJVGhpcyBvbmx5IHdvcmtzIHdoZW4gJ2ZvbGRtZXRob2QnIGlzICJtYW51YWwiIG9yICJtYXJrZXIiLgorCQlBbHNvIHNlZSB8Zm9sZC1kZWxldGUtbWFya2VyfC4KKworCQkJCQkJCSp6RCoKK3pECQlEZWxldGUgZm9sZHMgcmVjdXJzaXZlbHkgYXQgdGhlIGN1cnNvci4gIEluIFZpc3VhbCBtb2RlIGFsbAorCQlmb2xkcyAocGFydGlhbGx5KSBpbiB0aGUgc2VsZWN0ZWQgYXJlYSBhbmQgYWxsIG5lc3RlZCBmb2xkcyBpbgorCQl0aGVtIGFyZSBkZWxldGVkLgorCQlUaGlzIG9ubHkgd29ya3Mgd2hlbiAnZm9sZG1ldGhvZCcgaXMgIm1hbnVhbCIgb3IgIm1hcmtlciIuCisJCUFsc28gc2VlIHxmb2xkLWRlbGV0ZS1tYXJrZXJ8LgorCisJCQkJCQkJKnpFKiAqRTM1MioKK3pFCQlFbGltaW5hdGUgYWxsIGZvbGRzIGluIHRoZSB3aW5kb3cuCisJCVRoaXMgb25seSB3b3JrcyB3aGVuICdmb2xkbWV0aG9kJyBpcyAibWFudWFsIiBvciAibWFya2VyIi4KKwkJQWxzbyBzZWUgfGZvbGQtZGVsZXRlLW1hcmtlcnwuCisKKworT1BFTklORyBBTkQgQ0xPU0lORyBGT0xEUyB+CisKK0EgZm9sZCBzbWFsbGVyIHRoYW4gJ2ZvbGRtaW5saW5lcycgd2lsbCBhbHdheXMgYmUgZGlzcGxheWVkIGxpa2UgaXQgd2FzIG9wZW4uCitUaGVyZWZvcmUgdGhlIGNvbW1hbmRzIGJlbG93IG1heSB3b3JrIGRpZmZlcmVudGx5IG9uIHNtYWxsIGZvbGRzLgorCisJCQkJCQkJKnpvKgorem8JCU9wZW4gb25lIGZvbGQgdW5kZXIgdGhlIGN1cnNvci4gIFdoZW4gYSBjb3VudCBpcyBnaXZlbiwgdGhhdAorCQltYW55IGZvbGRzIGRlZXAgd2lsbCBiZSBvcGVuZWQuICBJbiBWaXN1YWwgbW9kZSBvbmUgbGV2ZWwgb2YKKwkJZm9sZHMgaXMgb3BlbmVkIGZvciBhbGwgbGluZXMgaW4gdGhlIHNlbGVjdGVkIGFyZWEuCisKKwkJCQkJCQkqek8qCit6TwkJT3BlbiBhbGwgZm9sZHMgdW5kZXIgdGhlIGN1cnNvciByZWN1cnNpdmVseS4gIEZvbGRzIHRoYXQgZG9uJ3QKKwkJY29udGFpbiB0aGUgY3Vyc29yIGxpbmUgYXJlIHVuY2hhbmdlZC4KKwkJSW4gVmlzdWFsIG1vZGUgaXQgb3BlbnMgYWxsIGZvbGRzIHRoYXQgYXJlIGluIHRoZSBzZWxlY3RlZAorCQlhcmVhLCBhbHNvIHRob3NlIHRoYXQgYXJlIG9ubHkgcGFydGx5IHNlbGVjdGVkLgorCisJCQkJCQkJKnpjKgoremMJCUNsb3NlIG9uZSBmb2xkIHVuZGVyIHRoZSBjdXJzb3IuICBXaGVuIGEgY291bnQgaXMgZ2l2ZW4sIHRoYXQKKwkJbWFueSBmb2xkcyBkZWVwIGFyZSBjbG9zZWQuICBJbiBWaXN1YWwgbW9kZSBvbmUgbGV2ZWwgb2YgZm9sZHMKKwkJaXMgY2xvc2VkIGZvciBhbGwgbGluZXMgaW4gdGhlIHNlbGVjdGVkIGFyZWEuCisJCSdmb2xkZW5hYmxlJyB3aWxsIGJlIHNldC4KKworCQkJCQkJCSp6QyoKK3pDCQlDbG9zZSBhbGwgZm9sZHMgdW5kZXIgdGhlIGN1cnNvciByZWN1cnNpdmVseS4gIEZvbGRzIHRoYXQKKwkJZG9uJ3QgY29udGFpbiB0aGUgY3Vyc29yIGxpbmUgYXJlIHVuY2hhbmdlZC4KKwkJSW4gVmlzdWFsIG1vZGUgaXQgY2xvc2VzIGFsbCBmb2xkcyB0aGF0IGFyZSBpbiB0aGUgc2VsZWN0ZWQKKwkJYXJlYSwgYWxzbyB0aG9zZSB0aGF0IGFyZSBvbmx5IHBhcnRseSBzZWxlY3RlZC4KKwkJJ2ZvbGRlbmFibGUnIHdpbGwgYmUgc2V0LgorCisJCQkJCQkJKnphKgoremEJCVdoZW4gb24gYSBjbG9zZWQgZm9sZDogb3BlbiBpdC4gV2hlbiBmb2xkcyBhcmUgbmVzdGVkLCB5b3UKKwkJbWF5IGhhdmUgdG8gdXNlICJ6YSIgc2V2ZXJhbCB0aW1lcy4gIFdoZW4gYSBjb3VudCBpcyBnaXZlbiwKKwkJdGhhdCBtYW55IGNsb3NlZCBmb2xkcyBhcmUgb3BlbmVkLgorCQlXaGVuIG9uIGFuIG9wZW4gZm9sZDogY2xvc2UgaXQgYW5kIHNldCAnZm9sZGVuYWJsZScuICBUaGlzCisJCXdpbGwgb25seSBjbG9zZSBvbmUgbGV2ZWwsIHNpbmNlIHVzaW5nICJ6YSIgYWdhaW4gd2lsbCBvcGVuCisJCXRoZSBmb2xkLiAgV2hlbiBhIGNvdW50IGlzIGdpdmVuIHRoYXQgbWFueSBmb2xkcyB3aWxsIGJlCisJCWNsb3NlZCAodGhhdCdzIG5vdCB0aGUgc2FtZSBhcyByZXBlYXRpbmcgInphIiB0aGF0IG1hbnkKKwkJdGltZXMpLgorCisJCQkJCQkJKnpBKgorekEJCVdoZW4gb24gYSBjbG9zZWQgZm9sZDogb3BlbiBpdCByZWN1cnNpdmVseS4KKwkJV2hlbiBvbiBhbiBvcGVuIGZvbGQ6IGNsb3NlIGl0IHJlY3Vyc2l2ZWx5IGFuZCBzZXQKKwkJJ2ZvbGRlbmFibGUnLgorCisJCQkJCQkJKnp2KgorenYJCVZpZXcgY3Vyc29yIGxpbmU6IE9wZW4ganVzdCBlbm91Z2ggZm9sZHMgdG8gbWFrZSB0aGUgbGluZSBpbgorCQl3aGljaCB0aGUgY3Vyc29yIGlzIGxvY2F0ZWQgbm90IGZvbGRlZC4KKworCQkJCQkJCSp6eCoKK3p4CQlVcGRhdGUgZm9sZHM6IFVuZG8gbWFudWFsbHkgb3BlbmVkIGFuZCBjbG9zZWQgZm9sZHM6IHJlLWFwcGx5CisJCSdmb2xkbGV2ZWwnLCB0aGVuIGRvICJ6diI6IFZpZXcgY3Vyc29yIGxpbmUuCisKKwkJCQkJCQkqelgqCit6WAkJVW5kbyBtYW51YWxseSBvcGVuZWQgYW5kIGNsb3NlZCBmb2xkczogcmUtYXBwbHkgJ2ZvbGRsZXZlbCcuCisKKwkJCQkJCQkqem0qCit6bQkJRm9sZCBtb3JlOiBTdWJ0cmFjdCBvbmUgZnJvbSAnZm9sZGxldmVsJy4gIElmICdmb2xkbGV2ZWwnIHdhcworCQlhbHJlYWR5IHplcm8gbm90aGluZyBoYXBwZW5zLgorCQknZm9sZGVuYWJsZScgd2lsbCBiZSBzZXQuCisKKwkJCQkJCQkqek0qCit6TQkJQ2xvc2UgYWxsIGZvbGRzOiBzZXQgJ2ZvbGRsZXZlbCcgdG8gMC4KKwkJJ2ZvbGRlbmFibGUnIHdpbGwgYmUgc2V0LgorCisJCQkJCQkJKnpyKgorenIJCVJlZHVjZSBmb2xkaW5nOiBBZGQgb25lIHRvICdmb2xkbGV2ZWwnLgorCisJCQkJCQkJKnpSKgorelIJCU9wZW4gYWxsIGZvbGRzLiAgVGhpcyBzZXRzICdmb2xkbGV2ZWwnIHRvIGhpZ2hlc3QgZm9sZCBsZXZlbC4KKworCQkJCQkJCSo6Zm9sZG8qICo6Zm9sZG9wZW4qCis6e3JhbmdlfWZvbGRvW3Blbl1bIV0KKwkJT3BlbiBmb2xkcyBpbiB7cmFuZ2V9LiAgV2hlbiBbIV0gaXMgYWRkZWQgYWxsIGZvbGRzIGFyZQorCQlvcGVuZWQuICBVc2VmdWwgdG8gc2VlIGFsbCB0aGUgdGV4dCBpbiB7cmFuZ2V9LiAgV2l0aG91dCBbIV0KKwkJb25lIGxldmVsIG9mIGZvbGRzIGlzIG9wZW5lZC4KKworCQkJCQkJCSo6Zm9sZGMqICo6Zm9sZGNsb3NlKgorOntyYW5nZX1mb2xkY1tsb3NlXVshXQorCQlDbG9zZSBmb2xkcyBpbiB7cmFuZ2V9LiAgV2hlbiBbIV0gaXMgYWRkZWQgYWxsIGZvbGRzIGFyZQorCQljbG9zZWQuICBVc2VmdWwgdG8gaGlkZSBhbGwgdGhlIHRleHQgaW4ge3JhbmdlfS4gIFdpdGhvdXQgWyFdCisJCW9uZSBsZXZlbCBvZiBmb2xkcyBpcyBjbG9zZWQuCisKKwkJCQkJCQkqem4qCit6bgkJRm9sZCBub25lOiByZXNldCAnZm9sZGVuYWJsZScuICBBbGwgZm9sZHMgd2lsbCBiZSBvcGVuLgorCisJCQkJCQkJKnpOKgorek4JCUZvbGQgbm9ybWFsOiBzZXQgJ2ZvbGRlbmFibGUnLiAgQWxsIGZvbGRzIHdpbGwgYmUgYXMgdGhleQorCQl3ZXJlIGJlZm9yZS4KKworCQkJCQkJCSp6aSoKK3ppCQlJbnZlcnQgJ2ZvbGRlbmFibGUnLgorCisKK01PVklORyBPVkVSIEZPTERTIH4KKwkJCQkJCQkqW3oqCitbegkJTW92ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgb3BlbiBmb2xkLiAgSWYgYWxyZWFkeSBhdCB0aGUKKwkJc3RhcnQsIG1vdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmb2xkIHRoYXQgY29udGFpbnMgaXQuICBJZgorCQl0aGVyZSBpcyBubyBjb250YWluaW5nIGZvbGQsIHRoZSBjb21tYW5kIGZhaWxzLgorCQlXaGVuIGEgY291bnQgaXMgdXNlZCwgcmVwZWF0cyB0aGUgY29tbWFuZCBOIHRpbWVzLgorCisJCQkJCQkJKl16KgorXXoJCU1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBvcGVuIGZvbGQuICBJZiBhbHJlYWR5IGF0IHRoZQorCQllbmQsIG1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgZm9sZCB0aGF0IGNvbnRhaW5zIGl0LiAgSWYgdGhlcmUKKwkJaXMgbm8gY29udGFpbmluZyBmb2xkLCB0aGUgY29tbWFuZCBmYWlscy4KKwkJV2hlbiBhIGNvdW50IGlzIHVzZWQsIHJlcGVhdHMgdGhlIGNvbW1hbmQgTiB0aW1lcy4KKworCQkJCQkJCSp6aioKK3pqCQlNb3ZlIGRvd253YXJkcyB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZm9sZC4gIEEgY2xvc2VkIGZvbGQKKwkJaXMgY291bnRlZCBhcyBvbmUgZm9sZC4KKwkJV2hlbiBhIGNvdW50IGlzIHVzZWQsIHJlcGVhdHMgdGhlIGNvbW1hbmQgTiB0aW1lcy4KKwkJVGhpcyBjb21tYW5kIGNhbiBiZSB1c2VkIGFmdGVyIGFuIHxvcGVyYXRvcnwuCisKKwkJCQkJCQkqemsqCit6awkJTW92ZSB1cHdhcmRzIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGZvbGQuICBBIGNsb3NlZCBmb2xkCisJCWlzIGNvdW50ZWQgYXMgb25lIGZvbGQuCisJCVdoZW4gYSBjb3VudCBpcyB1c2VkLCByZXBlYXRzIHRoZSBjb21tYW5kIE4gdGltZXMuCisJCVRoaXMgY29tbWFuZCBjYW4gYmUgdXNlZCBhZnRlciBhbiB8b3BlcmF0b3J8LgorCisKK0VYRUNVVElORyBDT01NQU5EUyBPTiBGT0xEUyB+CisKKzpbcmFuZ2VdZm9sZGRbb29wZW5dIHtjbWR9CQkJKjpmb2xkZCogKjpmb2xkZG9vcGVuKgorCQlFeGVjdXRlIHtjbWR9IG9uIGFsbCBsaW5lcyB0aGF0IGFyZSBub3QgaW4gYSBjbG9zZWQgZm9sZC4KKwkJV2hlbiBbcmFuZ2VdIGlzIGdpdmVuLCBvbmx5IHRoZXNlIGxpbmVzIGFyZSB1c2VkLgorCQlFYWNoIHRpbWUge2NtZH0gaXMgZXhlY3V0ZWQgdGhlIGN1cnNvciBpcyBwb3NpdGlvbmVkIG9uIHRoZQorCQlsaW5lIGl0IGlzIGV4ZWN1dGVkIGZvci4KKwkJVGhpcyB3b3JrcyBsaWtlIHRoZSAiOmdsb2JhbCIgY29tbWFuZDogRmlyc3QgYWxsIGxpbmVzIHRoYXQKKwkJYXJlIG5vdCBpbiBhIGNsb3NlZCBmb2xkIGFyZSBtYXJrZWQuICBUaGVuIHRoZSB7Y21kfSBpcworCQlleGVjdXRlZCBmb3IgYWxsIG1hcmtlZCBsaW5lcy4gIFRodXMgd2hlbiB7Y21kfSBjaGFuZ2VzIHRoZQorCQlmb2xkcywgdGhpcyBoYXMgbm8gaW5mbHVlbmNlIG9uIHdoZXJlIGl0IGlzIGV4ZWN1dGVkIChleGNlcHQKKwkJd2hlbiBsaW5lcyBhcmUgZGVsZXRlZCwgb2YgY291cnNlKS4KKwkJRXhhbXBsZTogPgorCQkJOmZvbGRkb29wZW4gcy9lbmQvbG9vcF9lbmQvZ2UKKzwJCU5vdGUgdGhlIHVzZSBvZiB0aGUgImUiIGZsYWcgdG8gYXZvaWQgZ2V0dGluZyBhbiBlcnJvciBtZXNzYWdlCisJCXdoZXJlICJlbmQiIGRvZXNuJ3QgbWF0Y2guCisKKzpbcmFuZ2VdZm9sZGRvY1tsb3NlZF0ge2NtZH0JCQkqOmZvbGRkb2MqICo6Zm9sZGRvY2xvc2VkKgorCQlFeGVjdXRlIHtjbWR9IG9uIGFsbCBsaW5lcyB0aGF0IGFyZSBpbiBhIGNsb3NlZCBmb2xkLgorCQlPdGhlcndpc2UgbGlrZSAiOmZvbGRkb29wZW4iLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIEZvbGQgb3B0aW9ucwkJCQkJKmZvbGQtb3B0aW9ucyoKKworQ09MT1JTCQkJCQkJCSpmb2xkLWNvbG9ycyoKKworVGhlIGNvbG9ycyBvZiBhIGNsb3NlZCBmb2xkIGFyZSBzZXQgd2l0aCB0aGUgRm9sZGVkIGdyb3VwIHxobC1Gb2xkZWR8LiAgVGhlCitjb2xvcnMgb2YgdGhlIGZvbGQgY29sdW1uIGFyZSBzZXQgd2l0aCB0aGUgRm9sZENvbHVtbiBncm91cCB8aGwtRm9sZENvbHVtbnwuCitFeGFtcGxlIHRvIHNldCB0aGUgY29sb3JzOiA+CisKKwk6aGlnaGxpZ2h0IEZvbGRlZCBndWliZz1ncmV5IGd1aWZnPWJsdWUKKwk6aGlnaGxpZ2h0IEZvbGRDb2x1bW4gZ3VpYmc9ZGFya2dyZXkgZ3VpZmc9d2hpdGUKKworCitGT0xETEVWRUwJCQkJCQkqZm9sZC1mb2xkbGV2ZWwqCisKKydmb2xkbGV2ZWwnIGlzIGEgbnVtYmVyIG9wdGlvbjogVGhlIGhpZ2hlciB0aGUgbW9yZSBmb2xkZWQgcmVnaW9ucyBhcmUgb3Blbi4KK1doZW4gJ2ZvbGRsZXZlbCcgaXMgMCwgYWxsIGZvbGRzIGFyZSBjbG9zZWQuCitXaGVuICdmb2xkbGV2ZWwnIGlzIHBvc2l0aXZlLCBzb21lIGZvbGRzIGNsb3NlZC4KK1doZW4gJ2ZvbGRsZXZlbCcgaXMgdmVyeSBoaWdoLCBhbGwgZm9sZHMgYXJlIG9wZW4uCisnZm9sZGxldmVsJyBpcyBhcHBsaWVkIHdoZW4gaXQgaXMgY2hhbmdlZC4gIEFmdGVyIHRoYXQgbWFudWFsbHkgZm9sZHMgY2FuIGJlCitvcGVuZWQgYW5kIGNsb3NlZC4KK1doZW4gaW5jcmVhc2VkLCBmb2xkcyBhYm92ZSB0aGUgbmV3IGxldmVsIGFyZSBvcGVuZWQuICBObyBtYW51YWxseSBvcGVuZWQKK2ZvbGRzIHdpbGwgYmUgY2xvc2VkLgorV2hlbiBkZWNyZWFzZWQsIGZvbGRzIGFib3ZlIHRoZSBuZXcgbGV2ZWwgYXJlIGNsb3NlZC4gIE5vIG1hbnVhbGx5IGNsb3NlZAorZm9sZHMgd2lsbCBiZSBvcGVuZWQuCisKKworRk9MRFRFWFQJCQkJCQkqZm9sZC1mb2xkdGV4dCoKKworJ2ZvbGR0ZXh0JyBpcyBhIHN0cmluZyBvcHRpb24gdGhhdCBzcGVjaWZpZXMgYW4gZXhwcmVzc2lvbi4gIFRoaXMgZXhwcmVzc2lvbgoraXMgZXZhbHVhdGVkIHRvIG9idGFpbiB0aGUgdGV4dCBkaXNwbGF5ZWQgZm9yIGEgY2xvc2VkIGZvbGQuICBFeGFtcGxlOiA+CisKKyAgICA6c2V0IGZvbGR0ZXh0PXY6Zm9sZGRhc2hlcy5zdWJzdGl0dXRlKGdldGxpbmUodjpmb2xkc3RhcnQpLCcvXFwqXFxcfFxcKi9cXFx8e3t7XFxkXFw9JywnJywnZycpCisKK1RoaXMgc2hvd3MgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZvbGQsIHdpdGggIi8qIiwgIiovIiBhbmQgInt7eyIgcmVtb3ZlZC4KK05vdGUgdGhlIHVzZSBvZiBiYWNrc2xhc2hlcyB0byBhdm9pZCBzb21lIGNoYXJhY3RlcnMgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgdGhlCisiOnNldCIgY29tbWFuZC4gIEl0J3Mgc2ltcGxlciB0byBkZWZpbmUgYSBmdW5jdGlvbiBhbmQgY2FsbCB0aGF0OiA+CisKKyAgICA6c2V0IGZvbGR0ZXh0PU15Rm9sZFRleHQoKQorICAgIDpmdW5jdGlvbiBNeUZvbGRUZXh0KCkKKyAgICA6ICBsZXQgbGluZSA9IGdldGxpbmUodjpmb2xkc3RhcnQpCisgICAgOiAgbGV0IHN1YiA9IHN1YnN0aXR1dGUobGluZSwgJy9cKlx8XCovXHx7e3tcZFw9JywgJycsICdnJykKKyAgICA6ICByZXR1cm4gdjpmb2xkZGFzaGVzIC4gc3ViCisgICAgOmVuZGZ1bmN0aW9uCisKK0V2YWx1YXRpbmcgJ2ZvbGR0ZXh0JyBpcyBkb25lIGluIHRoZSB8c2FuZGJveHwuICBUaGUgY3VycmVudCB3aW5kb3cgaXMgc2V0IHRvCit0aGUgd2luZG93IHRoYXQgZGlzcGxheXMgdGhlIGxpbmUuICBFcnJvcnMgYXJlIGlnbm9yZWQuCisKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIHxmb2xkdGV4dCgpfC4gIFRoaXMgcmV0dXJucyBhIHJlYXNvbmFibGUgdGV4dCBmb3IgbW9zdAordHlwZXMgb2YgZm9sZGluZy4gIElmIHlvdSBkb24ndCBsaWtlIGl0LCB5b3UgY2FuIHNwZWNpZnkgeW91ciBvd24gJ2ZvbGR0ZXh0JworZXhwcmVzc2lvbi4gIEl0IGNhbiB1c2UgdGhlc2Ugc3BlY2lhbCBWaW0gdmFyaWFibGVzOgorCXY6Zm9sZHN0YXJ0CWxpbmUgbnVtYmVyIG9mIGZpcnN0IGxpbmUgaW4gdGhlIGZvbGQKKwl2OmZvbGRlbmQJbGluZSBudW1iZXIgb2YgbGFzdCBsaW5lIGluIHRoZSBmb2xkCisJdjpmb2xkZGFzaGVzCWEgc3RyaW5nIHRoYXQgY29udGFpbnMgZGFzaGVzIHRvIHJlcHJlc2VudCB0aGUKKwkJCWZvbGRsZXZlbC4KKwl2OmZvbGRsZXZlbAl0aGUgZm9sZGxldmVsIG9mIHRoZSBmb2xkCisKK0luIHRoZSByZXN1bHQgYSBUQUIgaXMgcmVwbGFjZWQgd2l0aCBhIHNwYWNlIGFuZCB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZQorbWFkZSBpbnRvIHByaW50YWJsZSBjaGFyYWN0ZXJzLgorCitUaGUgcmVzdWx0aW5nIGxpbmUgaXMgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgd2luZG93LCBpdCBuZXZlciB3cmFwcy4KK1doZW4gdGhlcmUgaXMgcm9vbSBhZnRlciB0aGUgdGV4dCwgaXQgaXMgZmlsbGVkIHdpdGggdGhlIGNoYXJhY3RlciBzcGVjaWZpZWQKK2J5ICdmaWxsY2hhcnMnLgorCitOb3RlIHRoYXQgYmFja3NsYXNoZXMgbmVlZCB0byBiZSB1c2VkIGZvciBjaGFyYWN0ZXJzIHRoYXQgdGhlICI6c2V0IiBjb21tYW5kCitoYW5kbGVzIGRpZmZlcmVudGx5OiBTcGFjZSwgYmFja3NsYXNoIGFuZCBkb3VibGUtcXVvdGUuIHxvcHRpb24tYmFja3NsYXNofAorCisKK0ZPTERDT0xVTU4JCQkJCQkqZm9sZC1mb2xkY29sdW1uKgorCisnZm9sZGNvbHVtbicgaXMgYSBudW1iZXIsIHdoaWNoIHNldHMgdGhlIHdpZHRoIGZvciBhIGNvbHVtbiBvbiB0aGUgc2lkZSBvZiB0aGUKK3dpbmRvdyB0byBpbmRpY2F0ZSBmb2xkcy4gIFdoZW4gaXQgaXMgemVybywgdGhlcmUgaXMgbm8gZm9sZGNvbHVtbi4gIEEgbm9ybWFsCit2YWx1ZSBpcyA0IG9yIDUuICBUaGUgbWluaW1hbCB1c2VmdWwgdmFsdWUgaXMgMi4gIFRoZSBtYXhpbXVtIGlzIDEyLgorCitBbiBvcGVuIGZvbGQgaXMgaW5kaWNhdGVkIHdpdGggYSBjb2x1bW4gdGhhdCBoYXMgYSAnLScgYXQgdGhlIHRvcCBhbmQgJ3wnCitjaGFyYWN0ZXJzIGJlbG93IGl0LiAgVGhpcyBjb2x1bW4gc3RvcHMgd2hlcmUgdGhlIG9wZW4gZm9sZCBzdG9wcy4gIFdoZW4gZm9sZHMKK25lc3QsIHRoZSBuZXN0ZWQgZm9sZCBpcyBvbmUgY2hhcmFjdGVyIHJpZ2h0IG9mIHRoZSBmb2xkIGl0J3MgY29udGFpbmVkIGluLgorCitBIGNsb3NlZCBmb2xkIGlzIGluZGljYXRlZCB3aXRoIGEgJysnLgorCitXaGVyZSB0aGUgZm9sZCBjb2x1bW4gaXMgdG9vIG5hcnJvdyB0byBkaXNwbGF5IGFsbCBuZXN0ZWQgZm9sZHMsIGRpZ2l0cyBhcmUKK3Nob3duIHRvIGluZGljYXRlIHRoZSBuZXN0aW5nIGxldmVsLgorCitUaGUgbW91c2UgY2FuIGFsc28gYmUgdXNlZCB0byBvcGVuIGFuZCBjbG9zZSBmb2xkcyBieSBjbGlja2luZyBpbiB0aGUKK2ZvbGQgY29sdW1uOgorLSBDbGljayBvbiBhICcrJyB0byBvcGVuIHRoZSBjbG9zZWQgZm9sZCBhdCB0aGlzIHJvdy4KKy0gQ2xpY2sgb24gYW55IG90aGVyIG5vbi1ibGFuayBjaGFyYWN0ZXIgdG8gY2xvc2UgdGhlIG9wZW4gZm9sZCBhdCB0aGlzIHJvdy4KKworCitPVEhFUiBPUFRJT05TCisKKydmb2xkZW5hYmxlJyAgJ2Zlbic6CU9wZW4gYWxsIGZvbGRzIHdoaWxlIG5vdCBzZXQuCisnZm9sZGV4cHInICAgICdmZGUnOglFeHByZXNzaW9uIHVzZWQgZm9yICJleHByIiBmb2xkaW5nLgorJ2ZvbGRpZ25vcmUnICAnZmRpJzoJQ2hhcmFjdGVycyB1c2VkIGZvciAiaW5kZW50IiBmb2xkaW5nLgorJ2ZvbGRtYXJrZXInICAnZm1yJzoJRGVmaW5lZCBtYXJrZXJzIHVzZWQgZm9yICJtYXJrZXIiIGZvbGRpbmcuCisnZm9sZG1ldGhvZCcgICdmZG0nOglOYW1lIG9mIHRoZSBjdXJyZW50IGZvbGRpbmcgbWV0aG9kLgorJ2ZvbGRtaW5saW5lcycgJ2ZtbCc6CU1pbmltdW0gbnVtYmVyIG9mIHNjcmVlbiBsaW5lcyBmb3IgYSBmb2xkIHRvIGJlCisJCQlkaXNwbGF5ZWQgY2xvc2VkLgorJ2ZvbGRuZXN0bWF4JyAnZmRuJzoJTWF4aW11bSBuZXN0aW5nIGZvciAiaW5kZW50IiBhbmQgInN5bnRheCIgZm9sZGluZy4KKydmb2xkb3BlbicgICAgJ2Zkbyc6CVdoaWNoIGtpbmRzIG9mIGNvbW1hbmRzIG9wZW4gY2xvc2VkIGZvbGRzLgorJ2ZvbGRjbG9zZScgICAnZmNsJzoJV2hlbiB0aGUgZm9sZHMgbm90IHVuZGVyIHRoZSBjdXJzb3IgYXJlIGNsb3NlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBCZWhhdmlvciBvZiBmb2xkcwkJCQkJKmZvbGQtYmVoYXZpb3IqCisKK1doZW4gbW92aW5nIHRoZSBjdXJzb3IgdXB3YXJkcyBvciBkb3dud2FyZHMgYW5kIHdoZW4gc2Nyb2xsaW5nLCB0aGUgY3Vyc29yCit3aWxsIG1vdmUgdG8gdGhlIGZpcnN0IGxpbmUgb2YgYSBzZXF1ZW5jZSBvZiBmb2xkZWQgbGluZXMuICBXaGVuIHRoZSBjdXJzb3IgaXMKK2FscmVhZHkgb24gYSBmb2xkZWQgbGluZSwgaXQgbW92ZXMgdG8gdGhlIG5leHQgdW5mb2xkZWQgbGluZSBvciB0aGUgbmV4dAorY2xvc2VkIGZvbGQuCisKK1doaWxlIHRoZSBjdXJzb3IgaXMgb24gZm9sZGVkIGxpbmVzLCB0aGUgY3Vyc29yIGlzIGFsd2F5cyBkaXNwbGF5ZWQgaW4gdGhlCitmaXJzdCBjb2x1bW4uICBUaGUgcnVsZXIgZG9lcyBzaG93IHRoZSBhY3R1YWwgY3Vyc29yIHBvc2l0aW9uLCBidXQgc2luY2UgdGhlCitsaW5lIGlzIGZvbGRlZCwgaXQgY2Fubm90IGJlIGRpc3BsYXllZCB0aGVyZS4KKworTWFueSBtb3ZlbWVudCBjb21tYW5kcyBoYW5kbGUgYSBzZXF1ZW5jZSBvZiBmb2xkZWQgbGluZXMgbGlrZSBhbiBlbXB0eSBsaW5lLgorRm9yIGV4YW1wbGUsIHRoZSAidyIgY29tbWFuZCBzdG9wcyBvbmNlIGluIHRoZSBmaXJzdCBjb2x1bW4uCisKK1doZW4gaW4gSW5zZXJ0IG1vZGUsIHRoZSBjdXJzb3IgbGluZSBpcyBuZXZlciBmb2xkZWQuICBUaGF0IGFsbG93cyB5b3UgdG8gc2VlCit3aGF0IHlvdSB0eXBlIQorCitXaGVuIHVzaW5nIGFuIG9wZXJhdG9yLCBhIGNsb3NlZCBmb2xkIGlzIGluY2x1ZGVkIGFzIGEgd2hvbGUuICBUaHVzICJkbCIKK2RlbGV0ZXMgdGhlIHdob2xlIGNsb3NlZCBmb2xkIHVuZGVyIHRoZSBjdXJzb3IuCisKK0ZvciBFeCBjb21tYW5kcyB0aGUgcmFuZ2UgaXMgYWRqdXN0ZWQgdG8gYWx3YXlzIHN0YXJ0IGF0IHRoZSBmaXJzdCBsaW5lIG9mIGEKK2ZvbGQgYW5kIGVuZCBhdCB0aGUgbGFzdCBsaW5lIG9mIGEgZm9sZC4gIFRodXMgdGhpcyBjb21tYW5kOiA+CisJOnMvZm9vL2Jhci9nCit3aGVuIHVzZWQgd2l0aCB0aGUgY3Vyc29yIG9uIGEgY2xvc2VkIGZvbGQsIHdpbGwgcmVwbGFjZSAiZm9vIiB3aXRoICJiYXIiIGluCithbGwgbGluZXMgb2YgdGhlIGZvbGQuCitUaGlzIGRvZXMgbm90IGhhcHBlbiBmb3IgfDpmb2xkZG9vcGVufCBhbmQgfDpmb2xkZG9jbG9zZWR8LgorCitXaGVuIGVkaXRpbmcgYSBidWZmZXIgdGhhdCBoYXMgYmVlbiBlZGl0ZWQgYmVmb3JlLCB0aGUgbGFzdCB1c2VkIGZvbGRpbmcKK3NldHRpbmdzIGFyZSB1c2VkIGFnYWluLiAgRm9yIG1hbnVhbCBmb2xkaW5nIHRoZSBkZWZpbmVkIGZvbGRzIGFyZSByZXN0b3JlZC4KK0ZvciBhbGwgZm9sZGluZyBtZXRob2RzIHRoZSBtYW51YWxseSBvcGVuZWQgYW5kIGNsb3NlZCBmb2xkcyBhcmUgcmVzdG9yZWQuCitJZiB0aGlzIGJ1ZmZlciBoYXMgYmVlbiBlZGl0ZWQgaW4gdGhpcyB3aW5kb3csIHRoZSB2YWx1ZXMgZnJvbSBiYWNrIHRoZW4gYXJlCit1c2VkLiAgT3RoZXJ3aXNlIHRoZSB2YWx1ZXMgZnJvbSB0aGUgd2luZG93IHdoZXJlIHRoZSBidWZmZXIgd2FzIGVkaXRlZCBsYXN0CithcmUgdXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZ3VpLnR4dCBiL3J1bnRpbWUvZG9jL2d1aS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMwYTNlYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2d1aS50eHQKQEAgLTAsMCArMSw5NTEgQEAKKypndWkudHh0KiAgICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMDIKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitWaW0ncyBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UJCQkJKmd1aSogKkdVSSoKKworMS4gU3RhcnRpbmcgdGhlIEdVSQkJfGd1aS1zdGFydHwKKzIuIFNjcm9sbGJhcnMJCQl8Z3VpLXNjcm9sbGJhcnN8CiszLiBNb3VzZSBDb250cm9sCQl8Z3VpLW1vdXNlfAorNC4gTWFraW5nIEdVSSBTZWxlY3Rpb25zCXxndWktc2VsZWN0aW9uc3wKKzUuIE1lbnVzCQkJfG1lbnVzfAorNi4gRXh0cmFzCQkJfGd1aS1leHRyYXN8Cis3LiBTaGVsbCBDb21tYW5kcwkJfGd1aS1zaGVsbHwKKworT3RoZXIgR1VJIGRvY3VtZW50YXRpb246Cit8Z3VpX3gxMS50eHR8CUZvciBzcGVjaWZpYyBpdGVtcyBvZiB0aGUgWDExIEdVSS4KK3xndWlfdzMyLnR4dHwJRm9yIHNwZWNpZmljIGl0ZW1zIG9mIHRoZSBXaW4zMiBHVUkuCisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTdGFydGluZyB0aGUgR1VJCQkJCSpndWktc3RhcnQqICpFMjI5KiAqRTIzMyoKKworRmlyc3QgeW91IG11c3QgbWFrZSBzdXJlIHlvdSBhY3R1YWxseSBoYXZlIGEgdmVyc2lvbiBvZiBWaW0gd2l0aCB0aGUgR1VJIGNvZGUKK2luY2x1ZGVkLiAgWW91IGNhbiBjaGVjayB0aGlzIHdpdGggdGhlICI6dmVyc2lvbiIgY29tbWFuZCwgaXQgc2hvdWxkIGluY2x1ZGUKKyIrR1VJX0F0aGVuYSIsICIrR1VJX0JlT1MiLCAiK0dVSV9HVEsiLCAiK0dVSV9Nb3RpZiIgb3IgIk1TLVdpbmRvd3MgLi4uIGJpdAorR1VJIHZlcnNpb24iLgorCitIb3cgdG8gc3RhcnQgdGhlIEdVSSBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0gdXNlZC4gIE1vc3RseSB5b3UgY2FuIHJ1biB0aGUKK0dVSSB2ZXJzaW9uIG9mIFZpbSB3aXRoOgorICAgIGd2aW0gW29wdGlvbnNdIFtmaWxlcy4uLl0KKworVGhlIFgxMSB2ZXJzaW9uIG9mIFZpbSBjYW4gcnVuIGJvdGggaW4gR1VJIGFuZCBpbiBub24tR1VJIG1vZGUuICBTZWUKK3xndWkteDExLXN0YXJ0fC4KKworCQkJCQkqZ3VpLWluaXQqICpndmltcmMqICouZ3ZpbXJjKiAqX2d2aW1yYyoKK1doZW4gdGhlIEdVSSBzdGFydHMgdXAgaW5pdGlhbGl6YXRpb25zIGFyZSBjYXJyaWVkIG91dCwgaW4gdGhpcyBvcmRlcjoKKy0gVGhlIHRlcm1jYXAgb3B0aW9ucyBhcmUgcmVzZXQgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIEdVSS4KKy0gSWYgdGhlIHN5c3RlbSBtZW51IGZpbGUgZXhpc3RzLCBpdCBpcyBzb3VyY2VkLiAgVGhlIG5hbWUgb2YgdGhpcyBmaWxlIGlzCisgIG5vcm1hbGx5ICIkVklNUlVOVElNRS9tZW51LnZpbSIuICBZb3UgY2FuIGNoZWNrIHRoaXMgd2l0aCAiOnZlcnNpb24iLiAgQWxzbworICBzZWUgfCRWSU1SVU5USU1FfC4gIFRvIHNraXAgbG9hZGluZyB0aGUgc3lzdGVtIG1lbnUgaW5jbHVkZSAnTScgaW4KKyAgJ2d1aW9wdGlvbnMnLgkJCQkqYnVmZmVycy1tZW51KiAqbm9fYnVmZmVyc19tZW51KgorICBUaGUgc3lzdGVtIG1lbnUgZmlsZSBpbmNsdWRlcyBhICJCdWZmZXJzIiBtZW51LiAgSWYgeW91IGRvbid0IHdhbnQgdGhpcywgc2V0CisgIHRoZSAibm9fYnVmZmVyc19tZW51IiB2YXJpYWJsZSBpbiB5b3VyIC52aW1yYyAobm90IC5ndmltcmMhKTogPgorCTpsZXQgbm9fYnVmZmVyc19tZW51ID0gMQorPCBOT1RFOiBTd2l0Y2hpbmcgb24gc3ludGF4IGhpZ2hsaWdodGluZyBhbHNvIGxvYWRzIHRoZSBtZW51IGZpbGUsIHRodXMKKyAgZGlzYWJsaW5nIHRoZSBCdWZmZXJzIG1lbnUgbXVzdCBiZSBkb25lIGJlZm9yZSAiOnN5bnRheCBvbiIuCisgIFRoZSBwYXRoIG5hbWVzIGFyZSB0cnVuY2F0ZWQgdG8gMzUgY2hhcmFjdGVycy4gIFlvdSBjYW4gdHJ1bmNhdGUgdGhlbSBhdCBhCisgIGRpZmZlcmVudCBsZW5ndGgsIGZvciBleGFtcGxlIDUwLCBsaWtlIHRoaXM6ID4KKwk6bGV0IGJtZW51X21heF9wYXRobGVuID0gNTAKKy0gSWYgdGhlICItVSB7Z3ZpbXJjfSIgY29tbWFuZC1saW5lIG9wdGlvbiBoYXMgYmVlbiB1c2VkIHdoZW4gc3RhcnRpbmcgVmltLAorICB0aGUge2d2aW1yY30gZmlsZSB3aWxsIGJlIHJlYWQgZm9yIGluaXRpYWxpemF0aW9ucy4gIFRoZSBmb2xsb3dpbmcKKyAgaW5pdGlhbGl6YXRpb25zIGFyZSBza2lwcGVkLgorLSBGb3IgVW5peCBhbmQgTVMtV2luZG93cywgaWYgdGhlIHN5c3RlbSBndmltcmMgZXhpc3RzLCBpdCBpcyBzb3VyY2VkLiAgVGhlCisgIG5hbWUgb2YgdGhpcyBmaWxlIGlzIG5vcm1hbGx5ICIkVklNL2d2aW1yYyIuICBZb3UgY2FuIGNoZWNrIHRoaXMgd2l0aAorICAiOnZlcnNpb24iLiAgQWxzbyBzZWUgfCRWSU18LgorLSBUaGUgZm9sbG93aW5nIGFyZSB0cmllZCwgYW5kIG9ubHkgdGhlIGZpcnN0IG9uZSB0aGF0IGV4aXN0cyBpcyB1c2VkOgorICAtIElmIHRoZSBHVklNSU5JVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eSwgaXQgaXMKKyAgICBleGVjdXRlZCBhcyBhbiBFeCBjb21tYW5kLgorICAtIElmIHRoZSB1c2VyIGd2aW1yYyBmaWxlIGV4aXN0cywgaXQgaXMgc291cmNlZC4gIFRoZSBuYW1lIG9mIHRoaXMgZmlsZSBpcworICAgIG5vcm1hbGx5ICIkSE9NRS8uZ3ZpbXJjIi4gIFlvdSBjYW4gY2hlY2sgdGhpcyB3aXRoICI6dmVyc2lvbiIuCisgIC0gRm9yIFdpbjMyLCB3aGVuICRIT01FIGlzIG5vdCBzZXQsICIkVklNXF9ndmltcmMiIGlzIHVzZWQuCisgIC0gV2hlbiBhICJfZ3ZpbXJjIiBmaWxlIGlzIG5vdCBmb3VuZCwgIi5ndmltcmMiIGlzIHRyaWVkIHRvby4gIEFuZCB2aWNlCisgICAgdmVyc2EuCistIElmIHRoZSAnZXhyYycgb3B0aW9uIGlzIHNldCAod2hpY2ggaXMgTk9UIHRoZSBkZWZhdWx0KSB0aGUgZmlsZSAuLy5ndmltcmMKKyAgaXMgc291cmNlZCwgaWYgaXQgZXhpc3RzIGFuZCBpc24ndCB0aGUgc2FtZSBmaWxlIGFzIHRoZSBzeXN0ZW0gb3IgdXNlcgorICBndmltcmMgZmlsZS4gIElmIHRoaXMgZmlsZSBpcyBub3Qgb3duZWQgYnkgeW91LCBzb21lIHNlY3VyaXR5IHJlc3RyaWN0aW9ucworICBhcHBseS4gIFdoZW4gIi5ndmltcmMiIGlzIG5vdCBmb3VuZCwgIl9ndmltcmMiIGlzIHRyaWVkIHRvby4gIEZvciBNYWNpbnRvc2gKKyAgYW5kIERPUy9XaW4zMiAiX2d2aW1yYyIgaXMgdHJpZWQgZmlyc3QuCisKK05PVEU6IEFsbCBidXQgdGhlIGZpcnN0IG9uZSBhcmUgbm90IGNhcnJpZWQgb3V0IGlmIFZpbSB3YXMgc3RhcnRlZCB3aXRoCisiLXUgTk9ORSIgYW5kIG5vICItVSIgYXJndW1lbnQgd2FzIGdpdmVuLCBvciB3aGVuIHN0YXJ0ZWQgd2l0aCAiLVUgTk9ORSIuCisKK0FsbCB0aGlzIGhhcHBlbnMgQUZURVIgdGhlIG5vcm1hbCBWaW0gaW5pdGlhbGl6YXRpb25zLCBsaWtlIHJlYWRpbmcgeW91cgorLnZpbXJjIGZpbGUuICBTZWUgfGluaXRpYWxpemF0aW9ufC4KK0J1dCB0aGUgR1VJIHdpbmRvdyBpcyBvbmx5IG9wZW5lZCBhZnRlciBhbGwgdGhlIGluaXRpYWxpemF0aW9ucyBoYXZlIGJlZW4KK2NhcnJpZWQgb3V0LiAgSWYgeW91IHdhbnQgc29tZSBjb21tYW5kcyB0byBiZSBleGVjdXRlZCBqdXN0IGFmdGVyIG9wZW5pbmcgdGhlCitHVUkgd2luZG93LCB1c2UgdGhlIHxHVUlFbnRlcnwgYXV0b2NvbW1hbmQgZXZlbnQuICBFeGFtcGxlOiA+CisJOmF1dG9jb21tYW5kIEdVSUVudGVyICogd2lucG9zIDEwMCA1MAorCitZb3UgY2FuIHVzZSB0aGUgZ3ZpbXJjIGZpbGVzIHRvIHNldCB1cCB5b3VyIG93biBjdXN0b21pemVkIG1lbnVzIChzZWUgfDptZW51fCkKK2FuZCBpbml0aWFsaXplIG90aGVyIHRoaW5ncyB0aGF0IHlvdSBtYXkgd2FudCB0byBzZXQgdXAgZGlmZmVyZW50bHkgZnJvbSB0aGUKK3Rlcm1pbmFsIHZlcnNpb24uCisKK1JlY29tbWVuZGVkIHBsYWNlIGZvciB5b3VyIHBlcnNvbmFsIEdVSSBpbml0aWFsaXphdGlvbnM6CisJVW5peAkJICAgICRIT01FLy5ndmltcmMKKwlPUy8yCQkgICAgJEhPTUUvLmd2aW1yYyBvciAkVklNLy5ndmltcmMKKwlNUy1ET1MgYW5kIFdpbjMyICAgICRIT01FL19ndmltcmMgb3IgJFZJTS9fZ3ZpbXJjCisJQW1pZ2EJCSAgICBzOi5ndmltcmMgb3IgJFZJTS8uZ3ZpbXJjCisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBvcHRpb25zIHdoaWNoIG9ubHkgaGF2ZSBtZWFuaW5nIGluIHRoZSBHVUkgdmVyc2lvbiBvZgorVmltLiAgVGhlc2UgYXJlICdndWljdXJzb3InLCAnZ3VpZm9udCcsICdndWlwdHknIGFuZCAnZ3Vpb3B0aW9ucycuICBUaGV5IGFyZQorZG9jdW1lbnRlZCBpbiB8b3B0aW9ucy50eHR8IHdpdGggYWxsIHRoZSBvdGhlciBvcHRpb25zLgorCitJZiB1c2luZyB0aGUgTW90aWYgb3IgQXRoZW5hIHZlcnNpb24gb2YgdGhlIEdVSSAoYnV0IG5vdCBmb3IgdGhlIEdUSysgb3IgV2luMzIKK3ZlcnNpb24pLCBhIG51bWJlciBvZiBYIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlLiAgU2VlIHxndWktcmVzb3VyY2VzfC4KKworQW5vdGhlciB3YXkgdG8gc2V0IHRoZSBjb2xvcnMgZm9yIGRpZmZlcmVudCBvY2Nhc2lvbnMgaXMgd2l0aCBoaWdobGlnaHQKK2dyb3Vwcy4gIFRoZSAiTm9ybWFsIiBncm91cCBpcyB1c2VkIHRvIHNldCB0aGUgYmFja2dyb3VuZCBhbmQgZm9yZWdyb3VuZAorY29sb3JzLiAgRXhhbXBsZSAod2hpY2ggbG9va3MgbmljZSk6ID4KKworCTpoaWdobGlnaHQgTm9ybWFsIGd1aWJnPWdyZXk5MAorCitUaGUgImd1aWJnIiBhbmQgImd1aWZnIiBzZXR0aW5ncyBvdmVycmlkZSB0aGUgbm9ybWFsIGJhY2tncm91bmQgYW5kCitmb3JlZ3JvdW5kIHNldHRpbmdzLiAgVGhlIG90aGVyIHNldHRpbmdzIGZvciB0aGUgTm9ybWFsIGhpZ2hsaWdodCBncm91cCBhcmUKK25vdCB1c2VkLiAgVXNlIHRoZSAnZ3VpZm9udCcgb3B0aW9uIHRvIHNldCB0aGUgZm9udC4KKworQWxzbyBjaGVjayBvdXQgdGhlICdndWljdXJzb3InIG9wdGlvbiwgdG8gc2V0IHRoZSBjb2xvcnMgZm9yIHRoZSBjdXJzb3IgaW4KK3ZhcmlvdXMgbW9kZXMuCisKK1ZpbSB0cmllcyB0byBtYWtlIHRoZSB3aW5kb3cgZml0IG9uIHRoZSBzY3JlZW4gd2hlbiBpdCBzdGFydHMgdXAuICBUaGlzIGF2b2lkcwordGhhdCB5b3UgY2FuJ3Qgc2VlIHBhcnQgb2YgaXQuICBPbiB0aGUgWCBXaW5kb3cgU3lzdGVtIHRoaXMgcmVxdWlyZXMgYSBiaXQgb2YKK2d1ZXNzd29yay4gIFlvdSBjYW4gY2hhbmdlIHRoZSBoZWlnaHQgdGhhdCBpcyB1c2VkIGZvciB0aGUgd2luZG93IHRpdGxlIGFuZCBhCit0YXNrIGJhciB3aXRoIHRoZSAnZ3VpaGVhZHJvb20nIG9wdGlvbi4KKworCQkJCQkJKjp3aW5wKiAqOndpbnBvcyogKkUxODgqCis6d2lucFtvc10KKwkJRGlzcGxheSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIEdVSSB2aW0KKwkJd2luZG93IGluIHBpeGVscy4gIERvZXMgbm90IHdvcmsgaW4gYWxsIHZlcnNpb25zLgorCis6d2lucFtvc10ge1h9IHtZfQkJCQkJCQkqRTQ2NioKKwkJUHV0IHRoZSBHVUkgdmltIHdpbmRvdyBhdCB0aGUgZ2l2ZW4ge1h9IGFuZCB7WX0gY29vcmRpbmF0ZXMuCisJCVRoZSBjb29yZGluYXRlcyBzaG91bGQgc3BlY2lmeSB0aGUgcG9zaXRpb24gaW4gcGl4ZWxzIG9mIHRoZQorCQl0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHdpbmRvdy4gIERvZXMgbm90IHdvcmsgaW4gYWxsIHZlcnNpb25zLgorCQlEb2VzIHdvcmsgaW4gYW4gKG5ldykgeHRlcm0gfHh0ZXJtLWNvbG9yfC4KKwkJV2hlbiB0aGUgR1VJIHdpbmRvdyBoYXMgbm90IGJlZW4gb3BlbmVkIHlldCwgdGhlIHZhbHVlcyBhcmUKKwkJcmVtZW1iZXJlZCB1bnRpbCB0aGUgd2luZG93IGlzIG9wZW5lZC4gIFRoZSBwb3NpdGlvbiBpcworCQlhZGp1c3RlZCB0byBtYWtlIHRoZSB3aW5kb3cgZml0IG9uIHRoZSBzY3JlZW4gKGlmIHBvc3NpYmxlKS4KKworCQkJCQkJICAgICo6d2luKiAqOndpbnNpemUqICpFNDY1KgorOndpbltzaXplXSB7d2lkdGh9IHtoZWlnaHR9CisJCVNldCB0aGUgd2luZG93IGhlaWdodCB0byB7d2lkdGh9IGJ5IHtoZWlnaHR9IGNoYXJhY3RlcnMuCisJCU9ic29sZXRlLCB1c2UgIjpzZXQgbGluZXM9MTEgY29sdW1ucz0yMiIuCisJCUlmIHlvdSBnZXQgbGVzcyBsaW5lcyB0aGFuIGV4cGVjdGVkLCBjaGVjayB0aGUgJ2d1aWhlYWRyb29tJworCQlvcHRpb24uCisKK0lmIHlvdSBhcmUgcnVubmluZyB0aGUgWCBXaW5kb3cgU3lzdGVtLCB5b3UgY2FuIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK3dpbmRvdyBWaW0gaXMgcnVubmluZyBpbiB3aXRoIHRoaXMgY29tbWFuZDogPgorCToheHdpbmluZm8gLWlkICRXSU5ET1dJRAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFNjcm9sbGJhcnMJCQkJCQkqZ3VpLXNjcm9sbGJhcnMqCisKK1RoZXJlIGFyZSB2ZXJ0aWNhbCBzY3JvbGxiYXJzIGFuZCBhIGhvcml6b250YWwgc2Nyb2xsYmFycy4gIFlvdSBtYXkKK2NvbmZpZ3VyZSB3aGljaCBvbmVzIGFwcGVhciB3aXRoIHRoZSAnZ3Vpb3B0aW9ucycgb3B0aW9uLgorCitUaGUgaW50ZXJmYWNlIGxvb2tzIGxpa2UgdGhpcyAod2l0aCAiOnNldCBndWlvcHRpb25zPW1scmIiKToKKworCQkgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJICAgICAgIHwgRmlsZSAgRWRpdAkJIEhlbHAgfCA8LSBNZW51IGJhciAobSkKKwkJICAgICAgICstKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0rCisJCSAgICAgICB8XnwJCQkgICAgfF58CisJCSAgICAgICB8I3wgVGV4dCBhcmVhLgkJICAgIHwjfAorCQkgICAgICAgfCB8CQkJICAgIHwgfAorCQkgICAgICAgfHZ8X19fX19fX19fX19fX19fX19fX19fX19fX198dnwKKyBOb3JtYWwgc3RhdHVzIGxpbmUgLT4gfC0rIEZpbGUuYwkgICAgICAgNSwyICArLXwKKyBiZXR3ZWVuIFZpbSB3aW5kb3dzICAgfF58IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiJ8XnwKKwkJICAgICAgIHwgfAkJCSAgICB8IHwKKwkJICAgICAgIHwgfCBBbm90aGVyIGZpbGUgYnVmZmVyLiAgICAgfCB8CisJCSAgICAgICB8IHwJCQkgICAgfCB8CisJCSAgICAgICB8I3wJCQkgICAgfCN8CisgTGVmdCBzY3JvbGxiYXIgKGwpIC0+IHwjfAkJCSAgICB8I3wgPC0gUmlnaHQKKwkJICAgICAgIHwjfAkJCSAgICB8I3wgICAgc2Nyb2xsYmFyIChyKQorCQkgICAgICAgfCB8CQkJICAgIHwgfAorCQkgICAgICAgfHZ8CQkJICAgIHx2fAorCQkgICAgICAgKy0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLSsKKwkJICAgICAgIHwgfDwgIyMjIwkJICAgPnwgfCA8LSBCb3R0b20KKwkJICAgICAgICstKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0rICAgIHNjcm9sbGJhciAoYikKKworQW55IG9mIHRoZSBzY3JvbGxiYXIgb3IgbWVudSBjb21wb25lbnRzIG1heSBiZSB0dXJuZWQgb2ZmIGJ5IG5vdCBwdXR0aW5nIHRoZQorYXBwcm9wcmlhdGUgbGV0dGVyIGluIHRoZSAnZ3Vpb3B0aW9ucycgc3RyaW5nLiAgVGhlIGJvdHRvbSBzY3JvbGxiYXIgaXMKK29ubHkgdXNlZnVsIHdoZW4gJ25vd3JhcCcgaXMgc2V0LgorCisKK1ZFUlRJQ0FMIFNDUk9MTEJBUlMJCQkJCSpndWktdmVydC1zY3JvbGwqCisKK0VhY2ggVmltIHdpbmRvdyBoYXMgYSBzY3JvbGxiYXIgbmV4dCB0byBpdCB3aGljaCBtYXkgYmUgc2Nyb2xsZWQgdXAgYW5kIGRvd24KK3RvIG1vdmUgdGhyb3VnaCB0aGUgdGV4dCBpbiB0aGF0IGJ1ZmZlci4gIFRoZSBzaXplIG9mIHRoZSBzY3JvbGxiYXItdGh1bWIKK2luZGljYXRlcyB0aGUgZnJhY3Rpb24gb2YgdGhlIGJ1ZmZlciB3aGljaCBjYW4gYmUgc2VlbiBpbiB0aGUgd2luZG93LgorV2hlbiB0aGUgc2Nyb2xsYmFyIGlzIGRyYWdnZWQgYWxsIHRoZSB3YXkgZG93biwgdGhlIGxhc3QgbGluZSBvZiB0aGUgZmlsZQord2lsbCBhcHBlYXIgaW4gdGhlIHRvcCBvZiB0aGUgd2luZG93LgorCitJZiBhIHdpbmRvdyBpcyBzaHJ1bmsgdG8gemVybyBoZWlnaHQgKGJ5IHRoZSBncm93dGggb2YgYW5vdGhlciB3aW5kb3cpIGl0cworc2Nyb2xsYmFyIGRpc2FwcGVhcnMuIEl0IHJlYXBwZWFycyB3aGVuIHRoZSB3aW5kb3cgaXMgcmVzdG9yZWQuCisKK0lmIGEgd2luZG93IGlzIHZlcnRpY2FsbHkgc3BsaXQsIGl0IHdpbGwgZ2V0IGEgc2Nyb2xsYmFyIHdoZW4gaXQgaXMgdGhlCitjdXJyZW50IHdpbmRvdyBhbmQgd2hlbiwgdGFraW5nIHRoZSBtaWRkbGUgb2YgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBkcmF3aW5nIGEKK3ZlcnRpY2FsIGxpbmUsIHRoaXMgbGluZSBnb2VzIHRocm91Z2ggdGhlIHdpbmRvdy4KK1doZW4gdGhlcmUgYXJlIHNjcm9sbGJhcnMgb24gYm90aCBzaWRlcywgYW5kIHRoZSBtaWRkbGUgb2YgdGhlIGN1cnJlbnQgd2luZG93CitpcyBvbiB0aGUgbGVmdCBoYWxmLCB0aGUgcmlnaHQgc2Nyb2xsYmFyIGNvbHVtbiB3aWxsIGNvbnRhaW4gc2Nyb2xsYmFycyBmb3IKK3RoZSByaWdodG1vc3Qgd2luZG93cy4gIFRoZSBzYW1lIGhhcHBlbnMgb24gdGhlIG90aGVyIHNpZGUuCisKKworSE9SSVpPTlRBTCBTQ1JPTExCQVJTCQkJCQkqZ3VpLWhvcml6LXNjcm9sbCoKKworVGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIChhdCB0aGUgYm90dG9tIG9mIHRoZSBWaW0gR1VJKSBtYXkgYmUgdXNlZCB0bworc2Nyb2xsIHRleHQgc2lkZXdheXMgd2hlbiB0aGUgJ3dyYXAnIG9wdGlvbiBpcyB0dXJuZWQgb2ZmLiAgVGhlCitzY3JvbGxiYXItdGh1bWIgc2l6ZSBpcyBzdWNoIHRoYXQgdGhlIHRleHQgb2YgdGhlIGxvbmdlc3QgdmlzaWJsZSBsaW5lIG1heSBiZQorc2Nyb2xsZWQgYXMgZmFyIGFzIHBvc3NpYmxlIGxlZnQgYW5kIHJpZ2h0LiAgVGhlIGN1cnNvciBpcyBtb3ZlZCB3aGVuCituZWNlc3NhcnksIGl0IG11c3QgcmVtYWluIG9uIGEgdmlzaWJsZSBjaGFyYWN0ZXIgKHVubGVzcyAndmlydHVhbGVkaXQnIGlzCitzZXQpLgorCitDb21wdXRpbmcgdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCB2aXNpYmxlIHRha2VzIHF1aXRlIGEgYml0IG9mIGNvbXB1dGF0aW9uLAorYW5kIGl0IGhhcyB0byBiZSBkb25lIGV2ZXJ5IHRpbWUgc29tZXRoaW5nIGNoYW5nZXMuICBJZiB0aGlzIHRha2VzIHRvbyBtdWNoCit0aW1lIG9yIHlvdSBkb24ndCBsaWtlIHRoZSBjdXJzb3IganVtcGluZyB0byBhbm90aGVyIGxpbmUsIGluY2x1ZGUgdGhlICdoJworZmxhZyBpbiAnZ3Vpb3B0aW9ucycuICBUaGVuIHRoZSBzY3JvbGxpbmcgaXMgbGltaXRlZCBieSB0aGUgdGV4dCBvZiB0aGUKK2N1cnJlbnQgY3Vyc29yIGxpbmUuCisKKwkJCQkJCQkqYXRoZW5hLWludGVsbGltb3VzZSoKK0lmIHlvdSBoYXZlIGFuIEludGVsbGltb3VzZSBhbmQgYW4gWCBzZXJ2ZXIgdGhhdCBzdXBwb3J0cyB1c2luZyB0aGUgd2hlZWwsCit0aGVuIHlvdSBjYW4gdXNlIHRoZSB3aGVlbCB0byBzY3JvbGwgdGhlIHRleHQgdXAgYW5kIGRvd24gaW4gZ3ZpbS4gIFRoaXMgd29ya3MKK3dpdGggWEZyZWU4NiA0LjAgYW5kIGxhdGVyLCBhbmQgd2l0aCBzb21lIG9sZGVyIHZlcnNpb25zIHdoZW4geW91IGFkZCBwYXRjaGVzLgorU2VlIHxzY3JvbGwtbW91c2Utd2hlZWx8LgorCitGb3Igb2xkZXIgdmVyc2lvbnMgb2YgWEZyZWU4NiB5b3UgbXVzdCBwYXRjaCB5b3VyIFggc2VydmVyLiAgVGhlIGZvbGxvd2luZworcGFnZSBoYXMgYSBiaXQgb2YgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIEludGVsbGltb3VzZSBvbiBMaW51eCBhcyB3ZWxsIGFzCitsaW5rcyB0byB0aGUgcGF0Y2hlcyBhbmQgWCBzZXJ2ZXIgYmluYXJpZXMgKG1heSBub3QgaGF2ZSB0aGUgb25lIHlvdSBuZWVkCit0aG91Z2gpOgorICAgIGh0dHA6Ly93d3cuaW5yaWEuZnIva29hbGEvY29sYXMvbW91c2Utd2hlZWwtc2Nyb2xsLworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIE1vdXNlIENvbnRyb2wJCQkJCSpndWktbW91c2UqCisKK1RoZSBtb3VzZSBvbmx5IHdvcmtzIGlmIHRoZSBhcHByb3ByaWF0ZSBmbGFnIGluIHRoZSAnbW91c2UnIG9wdGlvbiBpcyBzZXQuCitXaGVuIHRoZSBHVUkgaXMgc3dpdGNoZWQgb24sIGFuZCAnbW91c2UnIHdhc24ndCBzZXQgeWV0LCB0aGUgJ21vdXNlJyBvcHRpb24gaXMKK2F1dG9tYXRpY2FsbHkgc2V0IHRvICJhIiwgZW5hYmxpbmcgaXQgZm9yIGFsbCBtb2RlcyBleGNlcHQgZm9yIHRoZQorfGhpdC1lbnRlcnwgcHJvbXB0LiAgSWYgeW91IGRvbid0IHdhbnQgdGhpcywgYSBnb29kIHBsYWNlIHRvIGNoYW5nZSB0aGUKKydtb3VzZScgb3B0aW9uIGlzIHRoZSAiZ3ZpbXJjIiBmaWxlLgorCitPdGhlciBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50OgorJ21vdXNlZm9jdXMnCXdpbmRvdyBmb2N1cyBmb2xsb3dzIG1vdXNlIHBvaW50ZXIgfGd1aS1tb3VzZS1mb2N1c3wKKydtb3VzZW1vZGVsJwl3aGF0IG1vdXNlIGJ1dHRvbiBkb2VzIHdoaWNoIGFjdGlvbgorJ21vdXNlaGlkZScJaGlkZSBtb3VzZSBwb2ludGVyIHdoaWxlIHR5cGluZyB0ZXh0Cisnc2VsZWN0bW9kZScJd2hldGhlciB0byBzdGFydCBTZWxlY3QgbW9kZSBvciBWaXN1YWwgbW9kZQorCitBIHF1aWNrIHdheSB0byBzZXQgdGhlc2UgaXMgd2l0aCB0aGUgIjpiZWhhdmUiIGNvbW1hbmQuCisJCQkJCQkJKjpiZWhhdmUqICo6YmUqCis6YmVbaGF2ZV0ge21vZGVsfQlTZXQgYmVoYXZpb3IgZm9yIG1vdXNlIGFuZCBzZWxlY3Rpb24uICBWYWxpZAorCQkJYXJndW1lbnRzIGFyZToKKwkJCSAgIG1zd2luCU1TLVdpbmRvd3MgYmVoYXZpb3IKKwkJCSAgIHh0ZXJtCVh0ZXJtIGJlaGF2aW9yCisKKwkJCVVzaW5nICI6YmVoYXZlIiBjaGFuZ2VzIHRoZXNlIG9wdGlvbnM6CisJCQlvcHRpb24JCW1zd2luCQkJeHRlcm0JfgorCQkJJ3NlbGVjdG1vZGUnCSJtb3VzZSxrZXkiCQkiIgorCQkJJ21vdXNlbW9kZWwnCSJwb3B1cCIJCQkiZXh0ZW5kIgorCQkJJ2tleW1vZGVsJwkic3RhcnRzZWwsc3RvcHNlbCIJIiIKKwkJCSdzZWxlY3Rpb24nCSJleGNsdXNpdmUiCQkiaW5jbHVzaXZlIgorCitJbiB0aGUgJFZJTVJVTlRJTUUgZGlyZWN0b3J5LCB0aGVyZSBpcyBhIHNjcmlwdCBjYWxsZWQgfG1zd2luLnZpbXwsIHdoaWNoIHdpbGwKK2Fsc28gbWFwIGEgZmV3IGtleXMgdG8gdGhlIE1TLVdpbmRvd3MgY3V0L2NvcHkvcGFzdGUgY29tbWFuZHMuICBUaGlzIGlzIE5PVAorY29tcGF0aWJsZSwgc2luY2UgaXQgdXNlcyB0aGUgQ1RSTC1WLCBDVFJMLVggYW5kIENUUkwtQyBrZXlzLiAgSWYgeW91IGRvbid0CittaW5kLCB1c2UgdGhpcyBjb21tYW5kOiA+CisJOnNvICRWSU1SVU5USU1FL21zd2luLnZpbQorCitGb3Igc2Nyb2xsaW5nIHdpdGggYSB3aGVlbCBvbiBhIG1vdXNlLCBzZWUgfHNjcm9sbC1tb3VzZS13aGVlbHwuCisKKworMy4xIE1vdmluZyBDdXJzb3Igd2l0aCBNb3VzZQkJCQkqZ3VpLW1vdXNlLW1vdmUqCisKK0NsaWNrIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBzb21ld2hlcmUgaW4gYSB0ZXh0IGJ1ZmZlciB3aGVyZSB5b3Ugd2FudCB0aGUKK2N1cnNvciB0byBnbywgYW5kIGl0IGRvZXMhCitUaGlzIHdvcmtzIGluCSAgICB3aGVuICdtb3VzZScgY29udGFpbnMgfgorTm9ybWFsIG1vZGUJICAgICduJyBvciAnYScKK1Zpc3VhbCBtb2RlCSAgICAndicgb3IgJ2EnCitJbnNlcnQgbW9kZQkgICAgJ2knIG9yICdhJworCitTZWxlY3QgbW9kZSBpcyBoYW5kbGVkIGxpa2UgVmlzdWFsIG1vZGUuCisKK1lvdSBtYXkgdXNlIHRoaXMgd2l0aCBhbiBvcGVyYXRvciBzdWNoIGFzICdkJyB0byBkZWxldGUgdGV4dCBmcm9tIHRoZSBjdXJyZW50CitjdXJzb3IgcG9zaXRpb24gdG8gdGhlIHBvc2l0aW9uIHlvdSBwb2ludCB0byB3aXRoIHRoZSBtb3VzZS4gIFRoYXQgaXMsIHlvdSBoaXQKKydkJyBhbmQgdGhlbiBjbGljayB0aGUgbW91c2Ugc29tZXdoZXJlLgorCisJCQkJCQkJKmd1aS1tb3VzZS1mb2N1cyoKK1RoZSAnbW91c2Vmb2N1cycgb3B0aW9uIGNhbiBiZSBzZXQgdG8gbWFrZSB0aGUga2V5Ym9hcmQgZm9jdXMgZm9sbG93IHRoZQorbW91c2UgcG9pbnRlci4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgd2luZG93IHdoZXJlIHRoZSBtb3VzZSBwb2ludGVyIGlzLCBpcyB0aGUKK2FjdGl2ZSB3aW5kb3cuICBXYXJuaW5nOiB0aGlzIGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwgd2hlbiB1c2luZyBhIG1lbnUsCitiZWNhdXNlIHRoZSBtZW51IGNvbW1hbmQgd2lsbCBhbHdheXMgYmUgYXBwbGllZCB0byB0aGUgdG9wIHdpbmRvdy4KKworSWYgeW91IGFyZSBvbiB0aGUgJzonIGxpbmUgKG9yICcvJyBvciAnPycpLCB0aGVuIGNsaWNraW5nIHRoZSBsZWZ0IG9yIHJpZ2h0Cittb3VzZSBidXR0b24gd2lsbCBwb3NpdGlvbiB0aGUgY3Vyc29yIG9uIHRoZSAnOicgbGluZSAoaWYgJ21vdXNlJyBjb250YWlucworJ2MnLCAnYScgb3IgJ0EnKS4KKworSW4gYW55IHNpdHVhdGlvbiB0aGUgbWlkZGxlIG1vdXNlIGJ1dHRvbiBtYXkgYmUgY2xpY2tlZCB0byBwYXN0ZSB0aGUgY3VycmVudAorc2VsZWN0aW9uLgorCisKKzMuMiBTZWxlY3Rpb24gd2l0aCBNb3VzZQkJCQkqZ3VpLW1vdXNlLXNlbGVjdCoKKworVGhlIG1vdXNlIGNhbiBiZSB1c2VkIHRvIHN0YXJ0IGEgc2VsZWN0aW9uLiAgSG93IGRlcGVuZHMgb24gdGhlICdtb3VzZW1vZGVsJworb3B0aW9uOgorJ21vdXNlbW9kZWwnIGlzICJleHRlbmQiOiB1c2UgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbgorJ21vdXNlbW9kZWwnIGlzICJwb3B1cCI6ICB1c2UgdGhlIGxlZnQgbW91c2UgYnV0dG9uLCB3aGlsZSBrZWVwaW5nIHRoZSBTaGlmdAora2V5IHByZXNzZWQuCisKK0lmIHRoZXJlIHdhcyBubyBzZWxlY3Rpb24geWV0LCB0aGlzIHN0YXJ0cyBhIHNlbGVjdGlvbiBmcm9tIHRoZSBvbGQgY3Vyc29yCitwb3NpdGlvbiB0byB0aGUgcG9zaXRpb24gcG9pbnRlZCB0byB3aXRoIHRoZSBtb3VzZS4gIElmIHRoZXJlIGFscmVhZHkgaXMgYQorc2VsZWN0aW9uIHRoZW4gdGhlIGNsb3Nlc3QgZW5kIHdpbGwgYmUgZXh0ZW5kZWQuCisKK0lmICdzZWxlY3Rtb2RlJyBjb250YWlucyAibW91c2UiLCB0aGVuIHRoZSBzZWxlY3Rpb24gd2lsbCBiZSBpbiBTZWxlY3QgbW9kZS4KK1RoaXMgbWVhbnMgdGhhdCB0eXBpbmcgbm9ybWFsIHRleHQgd2lsbCByZXBsYWNlIHRoZSBzZWxlY3Rpb24uICBTZWUKK3xTZWxlY3QtbW9kZXwuICBPdGhlcndpc2UsIHRoZSBzZWxlY3Rpb24gd2lsbCBiZSBpbiBWaXN1YWwgbW9kZS4KKworRG91YmxlIGNsaWNraW5nIG1heSBiZSBkb25lIHRvIG1ha2UgdGhlIHNlbGVjdGlvbiB3b3JkLXdpc2UsIHRyaXBsZSBjbGlja2luZworbWFrZXMgaXQgbGluZS13aXNlLCBhbmQgcXVhZHJ1cGxlIGNsaWNraW5nIG1ha2VzIGl0IHJlY3Rhbmd1bGFyIGJsb2NrLXdpc2UuCisKK1NlZSB8Z3VpLXNlbGVjdGlvbnN8IG9uIGhvdyB0aGUgc2VsZWN0aW9uIGlzIHVzZWQuCisKKworMy4zIE90aGVyIFRleHQgU2VsZWN0aW9uIHdpdGggTW91c2UJCSpndWktbW91c2UtbW9kZWxlc3MqCisJCQkJCQkqbW9kZWxlc3Mtc2VsZWN0aW9uKgorQSBkaWZmZXJlbnQga2luZCBvZiBzZWxlY3Rpb24gaXMgdXNlZCB3aGVuOgorLSBpbiBDb21tYW5kLWxpbmUgbW9kZQorLSBpbiB0aGUgQ29tbWFuZC1saW5lIHdpbmRvdyBhbmQgcG9pbnRpbmcgaW4gYW5vdGhlciB3aW5kb3cKKy0gYXQgdGhlIHxoaXQtZW50ZXJ8IHByb21wdAorLSB3aGVuZXZlciB0aGUgY3VycmVudCBtb2RlIGlzIG5vdCBpbiB0aGUgJ21vdXNlJyBvcHRpb24KKy0gd2hlbiBob2xkaW5nIHRoZSBDVFJMIGFuZCBTSElGVCBrZXlzIGluIHRoZSBHVUkKK1NpbmNlIFZpbSBjb250aW51ZXMgbGlrZSB0aGUgc2VsZWN0aW9uIGlzbid0IHRoZXJlLCBhbmQgdGhlcmUgaXMgbm8gbW9kZQorYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3Rpb24sIHRoaXMgaXMgY2FsbGVkIG1vZGVsZXNzIHNlbGVjdGlvbi4gIEFueSB0ZXh0IGluCit0aGUgVmltIHdpbmRvdyBjYW4gYmUgc2VsZWN0ZWQuICBTZWxlY3QgdGhlIHRleHQgYnkgcHJlc3NpbmcgdGhlIGxlZnQgbW91c2UKK2J1dHRvbiBhdCB0aGUgc3RhcnQsIGRyYWcgdG8gdGhlIGVuZCBhbmQgcmVsZWFzZS4gIFRvIGV4dGVuZCB0aGUgc2VsZWN0aW9uLAordXNlIHRoZSByaWdodCBtb3VzZSBidXR0b24gd2hlbiAnbW91c2Vtb2RlbCcgaXMgImV4dGVuZCIsIG9yIHRoZSBsZWZ0IG1vdXNlCitidXR0b24gd2l0aCB0aGUgc2hpZnQga2V5IHByZXNzZWQgd2hlbiAnbW91c2Vtb2RlbCcgaXMgInBvcHVwIi4KK1RoZSBtaWRkbGUgbW91c2UgYnV0dG9uIHBhc3RlcyB0aGUgdGV4dC4KK1RoZSBzZWxlY3Rpb24gaXMgcmVtb3ZlZCB3aGVuIHRoZSBzZWxlY3RlZCB0ZXh0IGlzIHNjcm9sbGVkIG9yIGNoYW5nZWQuCitPbiB0aGUgY29tbWFuZCBsaW5lIENUUkwtWSBjYW4gYmUgdXNlZCB0byBjb3B5IHRoZSBzZWxlY3Rpb24gaW50byB0aGUKK2NsaXBib2FyZC4gIFRvIGRvIHRoaXMgZnJvbSBJbnNlcnQgbW9kZSwgdXNlIENUUkwtTyA6IENUUkwtWSA8Q1I+LgorCisKKzMuNCBVc2luZyBNb3VzZSBvbiBTdGF0dXMgTGluZXMJCQkJKmd1aS1tb3VzZS1zdGF0dXMqCisKK0NsaWNraW5nIHRoZSBsZWZ0IG9yIHJpZ2h0IG1vdXNlIGJ1dHRvbiBvbiB0aGUgc3RhdHVzIGxpbmUgYmVsb3cgYSBWaW0KK3dpbmRvdyBtYWtlcyB0aGF0IHdpbmRvdyB0aGUgY3VycmVudCB3aW5kb3cuICBUaGlzIGFjdHVhbGx5IGhhcHBlbnMgb24gYnV0dG9uCityZWxlYXNlICh0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGEgY2xpY2sgZnJvbSBhIGRyYWcgYWN0aW9uKS4KKworV2l0aCB0aGUgbGVmdCBtb3VzZSBidXR0b24gYSBzdGF0dXMgbGluZSBjYW4gYmUgZHJhZ2dlZCB1cCBhbmQgZG93biwgdGh1cworcmVzaXppbmcgdGhlIHdpbmRvd3MgYWJvdmUgYW5kIGJlbG93IGl0LiAgVGhpcyBkb2VzIG5vdCBjaGFuZ2Ugd2luZG93IGZvY3VzLgorCitUaGUgc2FtZSBjYW4gYmUgdXNlZCBvbiB0aGUgdmVydGljYWwgc2VwYXJhdG9yOiBjbGljayB0byBnaXZlIHRoZSB3aW5kb3cgbGVmdAorb2YgaXQgZm9jdXMsIGRyYWcgbGVmdCBhbmQgcmlnaHQgdG8gbWFrZSB3aW5kb3dzIHdpZGVyIGFuZCBuYXJyb3dlci4KKworCiszLjUgVmFyaW91cyBNb3VzZSBDbGlja3MJCQkJKmd1aS1tb3VzZS12YXJpb3VzKgorCisgICAgPFMtTGVmdE1vdXNlPglTZWFyY2ggZm9yd2FyZCBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIG1vdXNlIGNsaWNrLgorCQkJV2hlbiAnbW91c2Vtb2RlbCcgaXMgInBvcHVwIiB0aGlzIHN0YXJ0cyBvciBleHRlbmRzIGEKKwkJCXNlbGVjdGlvbi4KKyAgICA8Uy1SaWdodE1vdXNlPglTZWFyY2ggYmFja3dhcmQgZm9yIHRoZSB3b3JkIHVuZGVyIHRoZSBtb3VzZSBjbGljay4KKyAgICA8Qy1MZWZ0TW91c2U+CUp1bXAgdG8gdGhlIHRhZyBuYW1lIHVuZGVyIHRoZSBtb3VzZSBjbGljay4KKyAgICA8Qy1SaWdodE1vdXNlPglKdW1wIGJhY2sgdG8gcG9zaXRpb24gYmVmb3JlIHRoZSBwcmV2aW91cyB0YWcganVtcAorCQkJKHNhbWUgYXMgIkNUUkwtVCIpCisKKworMy42IE1vdXNlIE1hcHBpbmdzCQkJCQkqZ3VpLW1vdXNlLW1hcHBpbmcqCisKK1RoZSBtb3VzZSBldmVudHMsIGNvbXBsZXRlIHdpdGggbW9kaWZpZXJzLCBtYXkgYmUgbWFwcGVkLiAgRWc6ID4KKyAgIDptYXAgPFMtTGVmdE1vdXNlPiAgICAgPFJpZ2h0TW91c2U+CisgICA6bWFwIDxTLUxlZnREcmFnPiAgICAgIDxSaWdodERyYWc+CisgICA6bWFwIDxTLUxlZnRSZWxlYXNlPiAgIDxSaWdodFJlbGVhc2U+CisgICA6bWFwIDwyLVMtTGVmdE1vdXNlPiAgIDwyLVJpZ2h0TW91c2U+CisgICA6bWFwIDwyLVMtTGVmdERyYWc+ICAgIDwyLVJpZ2h0RHJhZz4KKyAgIDptYXAgPDItUy1MZWZ0UmVsZWFzZT4gPDItUmlnaHRSZWxlYXNlPgorICAgOm1hcCA8My1TLUxlZnRNb3VzZT4gICA8My1SaWdodE1vdXNlPgorICAgOm1hcCA8My1TLUxlZnREcmFnPiAgICA8My1SaWdodERyYWc+CisgICA6bWFwIDwzLVMtTGVmdFJlbGVhc2U+IDwzLVJpZ2h0UmVsZWFzZT4KKyAgIDptYXAgPDQtUy1MZWZ0TW91c2U+ICAgPDQtUmlnaHRNb3VzZT4KKyAgIDptYXAgPDQtUy1MZWZ0RHJhZz4gICAgPDQtUmlnaHREcmFnPgorICAgOm1hcCA8NC1TLUxlZnRSZWxlYXNlPiA8NC1SaWdodFJlbGVhc2U+CitUaGVzZSBtYXBwaW5ncyBtYWtlIHNlbGVjdGlvbiB3b3JrIHRoZSB3YXkgaXQgcHJvYmFibHkgc2hvdWxkIGluIGEgTW90aWYKK2FwcGxpY2F0aW9uLCB3aXRoIHNoaWZ0LWxlZnQgbW91c2UgYWxsb3dpbmcgZm9yIGV4dGVuZGluZyB0aGUgdmlzdWFsIGFyZWEKK3JhdGhlciB0aGFuIHRoZSByaWdodCBtb3VzZSBidXR0b24uCisKK01vdXNlIG1hcHBpbmcgd2l0aCBtb2RpZmllcnMgZG9lcyBub3Qgd29yayBmb3IgbW9kZWxlc3Mgc2VsZWN0aW9uLgorCisKKzMuNyBEcmFnIGFuZCBkcm9wCQkJCQkJKmRyYWctbi1kcm9wKgorCitZb3UgY2FuIGRyYWcgYW5kIGRyb3Agb25lIG9yIG1vcmUgZmlsZXMgaW50byB0aGUgVmltIHdpbmRvdywgd2hlcmUgdGhleSB3aWxsCitiZSBvcGVuZWQgYXMgaWYgYSB8OmRyb3B8IGNvbW1hbmQgd2FzIHVzZWQuCisKK0lmIHlvdSBob2xkIGRvd24gU2hpZnQgd2hpbGUgZG9pbmcgdGhpcywgVmltIGNoYW5nZXMgdG8gdGhlIGZpcnN0IGRyb3BwZWQKK2ZpbGUncyBkaXJlY3RvcnkuICBJZiB5b3UgaG9sZCBDdHJsIFZpbSB3aWxsIGFsd2F5cyBzcGxpdCBhIG5ldyB3aW5kb3cgZm9yIHRoZQorZmlsZS4gIE90aGVyd2lzZSBpdCdzIG9ubHkgZG9uZSBpZiB0aGUgY3VycmVudCBidWZmZXIgaGFzIGJlZW4gY2hhbmdlZC4KKworWW91IGNhbiBhbHNvIGRyb3AgYSBkaXJlY3Rvcnkgb24gVmltLiAgVGhpcyBzdGFydHMgdGhlIGV4cGxvcmVyIHBsdWdpbiBmb3IKK3RoYXQgZGlyZWN0b3J5IChhc3N1bWluZyBpdCB3YXMgZW5hYmxlZCwgb3RoZXJ3aXNlIHlvdSdsbCBnZXQgYW4gZXJyb3IKK21lc3NhZ2UpLiAgS2VlcCBTaGlmdCBwcmVzc2VkIHRvIGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGluc3RlYWQuCisKK0lmIFZpbSBoYXBwZW5zIHRvIGJlIGVkaXRpbmcgYSBjb21tYW5kIGxpbmUsIHRoZSBuYW1lcyBvZiB0aGUgZHJvcHBlZCBmaWxlcworYW5kIGRpcmVjdG9yaWVzIHdpbGwgYmUgaW5zZXJ0ZWQgYXQgdGhlIGN1cnNvci4gIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgdGhlc2UKK25hbWVzIHdpdGggYW55IEV4IGNvbW1hbmQuICBTcGVjaWFsIGNoYXJhY3RlcnMgKHNwYWNlLCB0YWIsIGRvdWJsZSBxdW90ZSBhbmQKKyd8JzsgYmFja3NsYXNoIG9uIG5vbi1NUy1XaW5kb3dzIHN5c3RlbXMpIHdpbGwgYmUgZXNjYXBlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBNYWtpbmcgR1VJIFNlbGVjdGlvbnMJCQkJKmd1aS1zZWxlY3Rpb25zKgorCisJCQkJCQkJKnF1b3Rlc3RhcioKK1lvdSBtYXkgbWFrZSBzZWxlY3Rpb25zIHdpdGggdGhlIG1vdXNlIChzZWUgfGd1aS1tb3VzZS1zZWxlY3R8KSwgb3IgYnkgdXNpbmcKK1ZpbSdzIFZpc3VhbCBtb2RlIChzZWUgfHZ8KS4gIElmICdhJyBpcyBwcmVzZW50IGluICdndWlvcHRpb25zJywgdGhlbgord2hlbmV2ZXIgYSBzZWxlY3Rpb24gaXMgc3RhcnRlZCAoVmlzdWFsIG9yIFNlbGVjdCBtb2RlKSwgb3Igd2hlbiB0aGUgc2VsZWN0aW9uCitpcyBjaGFuZ2VkLCBWaW0gYmVjb21lcyB0aGUgb3duZXIgb2YgdGhlIHdpbmRvd2luZyBzeXN0ZW0ncyBwcmltYXJ5IHNlbGVjdGlvbgorKG9uIE1TLVdpbmRvd3MgdGhlIHxndWktY2xpcGJvYXJkfCBpcyB1c2VkOyB1bmRlciBYMTEsIHRoZSB8eDExLXNlbGVjdGlvbnwgaXMKK3VzZWQgLSB5b3Ugc2hvdWxkIHJlYWQgd2hpY2hldmVyIG9mIHRoZXNlIGlzIGFwcHJvcHJpYXRlIG5vdykuCisKKwkJCQkJCQkqY2xpcGJvYXJkKgorVGhlcmUgaXMgYSBzcGVjaWFsIHJlZ2lzdGVyIGZvciBzdG9yaW5nIHRoaXMgc2VsZWN0aW9uLCBpdCBpcyB0aGUgIioKK3JlZ2lzdGVyLiAgTm90aGluZyBpcyBwdXQgaW4gaGVyZSB1bmxlc3MgdGhlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGV4dCBpcworc2VsZWN0ZWQgaXMgYWJvdXQgdG8gY2hhbmdlIChlZyB3aXRoIGEgbGVmdCBtb3VzZSBjbGljayBzb21ld2hlcmUpLCBvciB3aGVuCithbm90aGVyIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHBhc3RlIHRoZSBzZWxlY3RlZCB0ZXh0LiAgVGhlbiB0aGUgdGV4dCBpcyBwdXQKK2luIHRoZSAiKiByZWdpc3Rlci4gIEZvciBleGFtcGxlLCB0byBjdXQgYSBsaW5lIGFuZCBtYWtlIGl0IHRoZSBjdXJyZW50CitzZWxlY3Rpb24vcHV0IGl0IG9uIHRoZSBjbGlwYm9hcmQ6ID4KKworCSIqZGQKKworU2ltaWxhcmx5LCB3aGVuIHlvdSB3YW50IHRvIHBhc3RlIGEgc2VsZWN0aW9uIGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbiwgZS5nLiwKK2J5IGNsaWNraW5nIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uLCB0aGUgc2VsZWN0aW9uIGlzIHB1dCBpbiB0aGUgIiogcmVnaXN0ZXIKK2ZpcnN0LCBhbmQgdGhlbiAncHV0JyBsaWtlIGFueSBvdGhlciByZWdpc3Rlci4gIEZvciBleGFtcGxlLCB0byBwdXQgdGhlCitzZWxlY3Rpb24gKGNvbnRlbnRzIG9mIHRoZSBjbGlwYm9hcmQpOiA+CisKKwkiKnAKKworV2hlbiB1c2luZyB0aGlzIHJlZ2lzdGVyIHVuZGVyIFgxMSwgYWxzbyBzZWUgfHgxMS1zZWxlY3Rpb258LiAgVGhpcyBhbHNvCitleHBsYWlucyB0aGUgcmVsYXRlZCAiKyByZWdpc3Rlci4KKworTm90ZSB0aGF0IHdoZW4gcGFzdGluZyB0ZXh0IGZyb20gb25lIFZpbSBpbnRvIGFub3RoZXIgc2VwYXJhdGUgVmltLCB0aGUgdHlwZQorb2Ygc2VsZWN0aW9uIChjaGFyYWN0ZXIsIGxpbmUsIG9yIGJsb2NrKSB3aWxsIGFsc28gYmUgY29waWVkLiAgRm9yIG90aGVyCithcHBsaWNhdGlvbnMgdGhlIHR5cGUgaXMgYWx3YXlzIGNoYXJhY3Rlci4gIEhvd2V2ZXIsIGlmIHRoZSB0ZXh0IGdldHMKK3RyYW5zZmVycmVkIHZpYSB0aGUgfHgxMS1jdXQtYnVmZmVyfCwgdGhlIHNlbGVjdGlvbiB0eXBlIGlzIEFMV0FZUyBsb3N0LgorCitXaGVuIHRoZSAidW5uYW1lZCIgc3RyaW5nIGlzIGluY2x1ZGVkIGluIHRoZSAnY2xpcGJvYXJkJyBvcHRpb24sIHRoZSB1bm5hbWVkCityZWdpc3RlciBpcyB0aGUgc2FtZSBhcyB0aGUgIiogcmVnaXN0ZXIuICBUaHVzIHlvdSBjYW4geWFuayB0byBhbmQgcGFzdGUgdGhlCitzZWxlY3Rpb24gd2l0aG91dCBwcmVwZW5kaW5nICIqIHRvIGNvbW1hbmRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIE1lbnVzCQkJCQkJKm1lbnVzKgorCitGb3IgYW4gaW50cm9kdWN0aW9uIHNlZSB8dXNyXzQyLnR4dHwgaW4gdGhlIHVzZXIgbWFudWFsLgorCisKKzUuMSBVc2luZyBNZW51cwkJCQkJCSp1c2luZy1tZW51cyoKKworQmFzaWNhbGx5LCBtZW51cyBjYW4gYmUgdXNlZCBqdXN0IGxpa2UgbWFwcGluZ3MuICBZb3UgY2FuIGRlZmluZSB5b3VyIG93bgorbWVudXMsIGFzIG1hbnkgYXMgeW91IGxpa2UuCitMb25nLXRpbWUgVmltIHVzZXJzIHdvbid0IHVzZSBtZW51cyBtdWNoLiAgQnV0IHRoZSBwb3dlciBpcyBpbiBhZGRpbmcgeW91ciBvd24KK21lbnVzIGFuZCBtZW51IGl0ZW1zLiAgVGhleSBhcmUgbW9zdCB1c2VmdWwgZm9yIHRoaW5ncyB0aGF0IHlvdSBjYW4ndCByZW1lbWJlcgord2hhdCB0aGUga2V5IHNlcXVlbmNlIHdhcy4KKworRm9yIGNyZWF0aW5nIG1lbnVzIGluIGEgZGlmZmVyZW50IGxhbmd1YWdlLCBzZWUgfDptZW51dHJhbnN8LgorCisJCQkJCQkJKm1lbnUudmltKgorVGhlIGRlZmF1bHQgbWVudXMgYXJlIHJlYWQgZnJvbSB0aGUgZmlsZSAiJFZJTVJVTlRJTUUvbWVudS52aW0iLiAgU2VlCit8JFZJTVJVTlRJTUV8IGZvciB3aGVyZSB0aGUgcGF0aCBjb21lcyBmcm9tLiAgWW91IGNhbiBzZXQgdXAgeW91ciBvd24gbWVudXMuCitTdGFydGluZyBvZmYgd2l0aCB0aGUgZGVmYXVsdCBzZXQgaXMgYSBnb29kIGlkZWEuICBZb3UgY2FuIGFkZCBtb3JlIGl0ZW1zLCBvciwKK2lmIHlvdSBkb24ndCBsaWtlIHRoZSBkZWZhdWx0cyBhdCBhbGwsIHN0YXJ0IHdpdGggcmVtb3ZpbmcgYWxsIG1lbnVzCit8OnVubWVudS1hbGx8LiAgWW91IGNhbiBhbHNvIGF2b2lkIHRoZSBkZWZhdWx0IG1lbnVzIGJlaW5nIGxvYWRlZCBieSBhZGRpbmcKK3RoaXMgbGluZSB0byB5b3VyIC52aW1yYyBmaWxlIChOT1QgeW91ciAuZ3ZpbXJjIGZpbGUhKTogPgorCTpsZXQgZGlkX2luc3RhbGxfZGVmYXVsdF9tZW51cyA9IDEKK0lmIHlvdSBhbHNvIHdhbnQgdG8gYXZvaWQgdGhlIFN5bnRheCBtZW51OiA+CisJOmxldCBkaWRfaW5zdGFsbF9zeW50YXhfbWVudSA9IDEKK0lmIHlvdSBkbyB3YW50IHRoZSBTeW50YXggbWVudSBidXQgbm90IGFsbCB0aGUgZW50cmllcyBmb3IgZWFjaCBhdmFpbGFibGUKK3N5bnRheCBmaWxlICh3aGljaCB0YWtlIHF1aXRlIGEgYml0IG9mIHRpbWUgdG8gbG9hZCk6ID4KKwk6bGV0IHNraXBfc3ludGF4X3NlbF9tZW51ID0gMQorPAorCQkJCQkJCSpjb25zb2xlLW1lbnVzKgorQWx0aG91Z2ggdGhpcyBkb2N1bWVudGF0aW9uIGlzIGluIHRoZSBHVUkgc2VjdGlvbiwgeW91IGNhbiBhY3R1YWxseSB1c2UgbWVudXMKK2luIGNvbnNvbGUgbW9kZSB0b28uICBZb3Ugd2lsbCBoYXZlIHRvIGxvYWQgfG1lbnUudmltfCBleHBsaWNpdGx5IHRoZW4sIGl0IGlzCitub3QgZG9uZSBieSBkZWZhdWx0LiAgWW91IGNhbiB1c2UgdGhlIHw6ZW1lbnV8IGNvbW1hbmQgYW5kIGNvbW1hbmQtbGluZQorY29tcGxldGlvbiB3aXRoICd3aWxkbWVudScgdG8gYWNjZXNzIHRoZSBtZW51IGVudHJpZXMgYWxtb3N0IGxpa2UgYSByZWFsIG1lbnUKK3N5c3RlbS4gIFRvIGRvIHRoaXMsIHB1dCB0aGVzZSBjb21tYW5kcyBpbiB5b3VyIC52aW1yYyBmaWxlOiA+CisJOnNvdXJjZSAkVklNUlVOVElNRS9tZW51LnZpbQorCTpzZXQgd2lsZG1lbnUKKwk6c2V0IGNwby09PAorCTpzZXQgd2NtPTxDLVo+CisJOm1hcCA8RjQ+IDplbWVudSA8Qy1aPgorUHJlc3NpbmcgPEY0PiB3aWxsIHN0YXJ0IHRoZSBtZW51LiAgWW91IGNhbiBub3cgdXNlIHRoZSBjdXJzb3Iga2V5cyB0byBzZWxlY3QKK2EgbWVudSBlbnRyeS4gIEhpdCA8RW50ZXI+IHRvIGV4ZWN1dGUgaXQuICBIaXQgPEVzYz4gaWYgeW91IHdhbnQgdG8gY2FuY2VsLgorVGhpcyBkb2VzIHJlcXVpcmUgdGhlIHwrbWVudXwgZmVhdHVyZSBlbmFibGVkIGF0IGNvbXBpbGUgdGltZS4KKworCQkJCQkJCSp0ZWFyLW9mZi1tZW51cyoKK0dUSysgYW5kIE1vdGlmIHN1cHBvcnQgVGVhci1vZmYgbWVudXMuICBUaGVzZSBhcmUgc29ydCBvZiBzdGlja3kgbWVudXMgb3IKK3BvcC11cCBtZW51cyB0aGF0IGFyZSBwcmVzZW50IGFsbCB0aGUgdGltZS4gIElmIHRoZSByZXNpemluZyBkb2VzIG5vdCB3b3JrCitjb3JyZWN0bHksIHRoaXMgbWF5IGJlIGNhdXNlZCBieSB1c2luZyBzb21ldGhpbmcgbGlrZSAiVmltKmdlb21ldHJ5IiBpbiB0aGUKK2RlZmF1bHRzLiAgVXNlICJWaW0uZ2VvbWV0cnkiIGluc3RlYWQuCisKK1RoZSBXaW4zMiBHVUkgdmVyc2lvbiBlbXVsYXRlcyBNb3RpZidzIHRlYXItb2ZmIG1lbnVzLiAgQWN0dWFsbHksIGEgTW90aWYgdXNlcgord2lsbCBzcG90IHRoZSBkaWZmZXJlbmNlcyBlYXNpbHksIGJ1dCBob3BlZnVsbHkgdGhleSdyZSBqdXN0IGFzIHVzZWZ1bC4gIFlvdQorY2FuIGFsc28gdXNlIHRoZSB8OnRlYXJvZmZ8IGNvbW1hbmQgdG9nZXRoZXIgd2l0aCB8aGlkZGVuLW1lbnVzfCB0byBjcmVhdGUKK2Zsb2F0aW5nIG1lbnVzIHRoYXQgZG8gbm90IGFwcGVhciBvbiB0aGUgbWFpbiBtZW51IGJhci4KKworCis1LjIgQ3JlYXRpbmcgTmV3IE1lbnVzCQkJCQkqY3JlYXRpbmctbWVudXMqCisKKwkJCQkqOm1lKiAgKjptZW51KiAgKjpub3JlbWUqICAqOm5vcmVtZW51KgorCQkJCSo6YW0qICAqOmFtZW51KiAqOmFuKiAgICAgICo6YW5vcmVtZW51KgorCQkJCSo6bm1lKiAqOm5tZW51KiAqOm5ub3JlbWUqICo6bm5vcmVtZW51KgorCQkJCSo6b21lKiAqOm9tZW51KiAqOm9ub3JlbWUqICo6b25vcmVtZW51KgorCQkJCSo6dm1lKiAqOnZtZW51KiAqOnZub3JlbWUqICo6dm5vcmVtZW51KgorCQkJCSo6aW1lKiAqOmltZW51KiAqOmlub3JlbWUqICo6aW5vcmVtZW51KgorCQkJCSo6Y21lKiAqOmNtZW51KiAqOmNub3JlbWUqICo6Y25vcmVtZW51KgorCQkJCSpFMzMwKiAqRTMyNyogKkUzMzEqICpFMzM2KiAqRTMzMyoKKwkJCQkqRTMyOCogKkUzMjkqICpFMzM3KgorVG8gY3JlYXRlIGEgbmV3IG1lbnUgaXRlbSwgdXNlIHRoZSAiOm1lbnUiIGNvbW1hbmRzLiAgVGhleSBhcmUgbW9zdGx5IGxpa2UKK3RoZSAiOm1hcCIgc2V0IG9mIGNvbW1hbmRzIGJ1dCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBtZW51IGl0ZW0gbmFtZSwgZ2l2ZW4KK2FzIGEgcGF0aCBvZiBtZW51cyBhbmQgc3VibWVudXMgd2l0aCBhICcuJyBiZXR3ZWVuIHRoZW0uIGVnOiA+CisKKyAgIDptZW51IEZpbGUuU2F2ZSAgOnc8Q1I+CisgICA6aW5vcmVtZW51IEZpbGUuU2F2ZSAgPEMtTz46dzxDUj4KKyAgIDptZW51IEVkaXQuQmlnXCBDaGFuZ2VzLkRlbGV0ZVwgQWxsXCBTcGFjZXMgIDolcy9bIF5JXS8vZzxDUj4KKworVGhpcyBsYXN0IG9uZSB3aWxsIGNyZWF0ZSBhIG5ldyBpdGVtIGluIHRoZSBtZW51IGJhciBjYWxsZWQgIkVkaXQiLCBob2xkaW5nCit0aGUgbW91c2UgYnV0dG9uIGRvd24gb24gdGhpcyB3aWxsIHBvcCB1cCBhIG1lbnUgY29udGFpbmluZyB0aGUgaXRlbQorIkJpZyBDaGFuZ2VzIiwgd2hpY2ggaXMgYSBzdWItbWVudSBjb250YWluaW5nIHRoZSBpdGVtICJEZWxldGUgQWxsIFNwYWNlcyIsCit3aGljaCB3aGVuIHNlbGVjdGVkLCBwZXJmb3JtcyB0aGUgb3BlcmF0aW9uLgorCitTcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSBtZW51IG5hbWU6CisKKwkmCVRoZSBuZXh0IGNoYXJhY3RlciBpcyB0aGUgc2hvcnRjdXQga2V5LiAgTWFrZSBzdXJlIGVhY2gKKwkJc2hvcnRjdXQga2V5IGlzIG9ubHkgdXNlZCBvbmNlIGluIGEgKHN1YiltZW51LiAgSWYgeW91IHdhbnQgdG8KKwkJaW5zZXJ0IGEgbGl0ZXJhbCAiJiIgaW4gdGhlIG1lbnUgbmFtZSB1c2UgIiYmIi4KKwk8VGFiPglTZXBhcmF0ZXMgdGhlIG1lbnUgbmFtZSBmcm9tIHJpZ2h0LWFsaWduZWQgdGV4dC4gIFRoaXMgY2FuIGJlCisJCXVzZWQgdG8gc2hvdyB0aGUgZXF1aXZhbGVudCB0eXBlZCBjb21tYW5kLiAgVGhlIHRleHQgIjxUYWI+IgorCQljYW4gYmUgdXNlZCBoZXJlIGZvciBjb252ZW5pZW5jZS4gIElmIHlvdSBhcmUgdXNpbmcgYSByZWFsCisJCVRhYiwgZG9uJ3QgZm9yZ2V0IHRvIHB1dCBhIGJhY2tzbGFzaCBiZWZvcmUgaXQhCitFeGFtcGxlOiA+CisKKyAgIDphbWVudSAmRmlsZS4mT3BlbjxUYWI+OmUgIDpicm93c2UgZTxDUj4KKworW3R5cGVkIGxpdGVyYWxseV0KK1dpdGggdGhlIHNob3J0Y3V0ICJGIiAod2hpbGUga2VlcGluZyB0aGUgPEFsdD4ga2V5IHByZXNzZWQpLCBhbmQgdGhlbiAiTyIsCit0aGlzIG1lbnUgY2FuIGJlIHVzZWQuICBUaGUgc2Vjb25kIHBhcnQgaXMgc2hvd24gYXMgIk9wZW4gICAgIDplIi4gIFRoZSAiOmUiCitpcyByaWdodCBhbGlnbmVkLCBhbmQgdGhlICJPIiBpcyB1bmRlcmxpbmVkLCB0byBpbmRpY2F0ZSBpdCBpcyB0aGUgc2hvcnRjdXQuCisKK1RoZSAiOmFtZW51IiBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBtZW51IGVudHJpZXMgZm9yIGFsbCBtb2RlcyBhdCBvbmNlLgorVG8gbWFrZSB0aGUgY29tbWFuZCB3b3JrIGNvcnJlY3RseSwgYSBjaGFyYWN0ZXIgaXMgYXV0b21hdGljYWxseSBpbnNlcnRlZCBmb3IKK3NvbWUgbW9kZXM6CisJbW9kZQkJaW5zZXJ0ZWQJYXBwZW5kZWQJfgorCU5vcm1hbAkJbm90aGluZwkJbm90aGluZworCVZpc3VhbAkJPEMtQz4JCTxDLVw+PEMtRz4KKwlJbnNlcnQJCTxDLU8+CisJQ21kbGluZQkJPEMtQz4JCTxDLVw+PEMtRz4KKwlPcC1wZW5kaW5nCTxDLUM+CQk8Qy1cPjxDLUc+CisKK0FwcGVuZGluZyBDVFJMLVwgQ1RSTC1HIGlzIGZvciBnb2luZyBiYWNrIHRvIGluc2VydCBtb2RlIHdoZW4gJ2luc2VydG1vZGUnIGlzCitzZXQuIHxDVFJMLVxfQ1RSTC1HfAorCitFeGFtcGxlOiA+CisKKyAgIDphbWVudSBGaWxlLk5leHQJOm5leHReTQorCitpcyBlcXVhbCB0bzogPgorCisgICA6bm1lbnUgRmlsZS5OZXh0CTpuZXh0Xk0KKyAgIDp2bWVudSBGaWxlLk5leHQJXkM6bmV4dF5NXlxeRworICAgOmltZW51IEZpbGUuTmV4dAleTzpuZXh0Xk0KKyAgIDpjbWVudSBGaWxlLk5leHQJXkM6bmV4dF5NXlxeRworICAgOm9tZW51IEZpbGUuTmV4dAleQzpuZXh0Xk1eXF5HCisKK0NhcmVmdWw6IEluIEluc2VydCBtb2RlIHRoaXMgb25seSB3b3JrcyBmb3IgYSBTSU5HTEUgTm9ybWFsIG1vZGUgY29tbWFuZCwKK2JlY2F1c2Ugb2YgdGhlIENUUkwtTy4gIElmIHlvdSBoYXZlIHR3byBvciBtb3JlIGNvbW1hbmRzLCB5b3Ugd2lsbCBuZWVkIHRvIHVzZQordGhlICI6aW1lbnUiIGNvbW1hbmQuICBGb3IgaW5zZXJ0aW5nIHRleHQgaW4gYW55IG1vZGUsIHlvdSBjYW4gdXNlIHRoZQorZXhwcmVzc2lvbiByZWdpc3RlcjogPgorCisgICA6YW1lbnUgSW5zZXJ0LmZvb2JhciAgICI9J2Zvb2Jhcic8Q1I+UAorCitOb3RlIHRoYXQgdGhlICc8JyBhbmQgJ2snIGZsYWdzIGluICdjcG9wdGlvbnMnIGFsc28gYXBwbHkgaGVyZSAod2hlbgoraW5jbHVkZWQgdGhleSBtYWtlIHRoZSA8PiBmb3JtIGFuZCByYXcga2V5IGNvZGVzIG5vdCBiZWluZyByZWNvZ25pemVkKS4KKworTm90ZSB0aGF0IDxFc2M+IGluIENtZGxpbmUgbW9kZSBleGVjdXRlcyB0aGUgY29tbWFuZCwgbGlrZSBpbiBhIG1hcHBpbmcuICBUaGlzCitpcyBWaSBjb21wYXRpYmxlLiAgVXNlIENUUkwtQyB0byBxdWl0IENtZGxpbmUgbW9kZS4KKworCQkJCQkJKjptZW51LTxzaWxlbnQ+KiAqOm1lbnUtc2lsZW50KgorVG8gZGVmaW5lIGEgbWVudSB3aGljaCB3aWxsIG5vdCBiZSBlY2hvZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYWRkCisiPHNpbGVudD4iIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gIEV4YW1wbGU6ID4KKwk6bWVudSA8c2lsZW50PiBTZXR0aW5ncy5JZ25vcmVcIGNhc2UgIDpzZXQgaWM8Q1I+CitUaGUgIjpzZXQgaWMiIHdpbGwgbm90IGJlIGVjaG9lZCB3aGVuIHVzaW5nIHRoaXMgbWVudS4gIE1lc3NhZ2VzIGZyb20gdGhlCitleGVjdXRlZCBjb21tYW5kIGFyZSBzdGlsbCBnaXZlbiB0aG91Z2guICBUbyBzaHV0IHRoZW0gdXAgdG9vLCBhZGQgYSAiOnNpbGVudCIKK2luIHRoZSBleGVjdXRlZCBjb21tYW5kOiA+CisJOm1lbnUgPHNpbGVudD4gU2VhcmNoLkhlYWRlciA6ZXhlICI6c2lsZW50IG5vcm1hbCAvSGVhZGVyXHIiPENSPgorPAorCQkJCQkJKjptZW51LTxzY3JpcHQ+KiAqOm1lbnUtc2NyaXB0KgorVGhlICJ0byIgcGFydCBvZiB0aGUgbWVudSB3aWxsIGJlIGluc3BlY3RlZCBmb3IgbWFwcGluZ3MuICBJZiB5b3UgZG9uJ3Qgd2FudAordGhpcywgdXNlIHRoZSAiOm5vcmVtZW51IiBjb21tYW5kIChvciB0aGUgc2ltaWxhciBvbmUgZm9yIGEgc3BlY2lmaWMgbW9kZSkuCitJZiB5b3UgZG8gd2FudCB0byB1c2Ugc2NyaXB0LWxvY2FsIG1hcHBpbmdzLCBhZGQgIjxzY3JpcHQ+IiBhcyB0aGUgdmVyeSBmaXJzdAorYXJndW1lbnQgdG8gdGhlICI6bWVudSIgY29tbWFuZCBvciBhZnRlciAiPHNpbGVudD4iLgorCisJCQkJCQkJKm1lbnUtcHJpb3JpdHkqCitZb3UgY2FuIGdpdmUgYSBwcmlvcml0eSB0byBhIG1lbnUuICBNZW51cyB3aXRoIGEgaGlnaGVyIHByaW9yaXR5IGdvIG1vcmUgdG8KK3RoZSByaWdodC4gIFRoZSBwcmlvcml0eSBpcyBnaXZlbiBhcyBhIG51bWJlciBiZWZvcmUgdGhlICI6bWVudSIgY29tbWFuZC4KK0V4YW1wbGU6ID4KKwk6ODBtZW51IEJ1ZmZlci5uZXh0IDpibjxDUj4KKworVGhlIGRlZmF1bHQgbWVudXMgaGF2ZSB0aGVzZSBwcmlvcml0aWVzOgorCUZpbGUJCTEwCisJRWRpdAkJMjAKKwlUb29scwkJNDAKKwlTeW50YXgJCTUwCisJQnVmZmVycwkJNjAKKwlXaW5kb3cJCTcwCisJSGVscAkJOTk5OQorCitXaGVuIG5vIG9yIHplcm8gcHJpb3JpdHkgaXMgZ2l2ZW4sIDUwMCBpcyB1c2VkLgorVGhlIHByaW9yaXR5IGZvciB0aGUgUG9wVXAgbWVudSBpcyBub3QgdXNlZC4KKworVGhlIEhlbHAgbWVudSB3aWxsIGJlIHBsYWNlZCBvbiB0aGUgZmFyIHJpZ2h0IHNpZGUgb2YgdGhlIG1lbnUgYmFyIG9uIHN5c3RlbXMKK3doaWNoIHN1cHBvcnQgdGhpcyAoTW90aWYgYW5kIEdUSyspLiAgRm9yIEdUSysgMiwgdGhpcyBpcyBub3QgZG9uZSBhbnltb3JlCitiZWNhdXNlIHJpZ2h0LWFsaWduaW5nIHRoZSBIZWxwIG1lbnUgaXMgbm93IGRpc2NvdXJhZ2VkIFVJIGRlc2lnbi4KKworWW91IGNhbiB1c2UgYSBwcmlvcml0eSBoaWdoZXIgdGhhbiA5OTk5LCB0byBtYWtlIGl0IGdvIGFmdGVyIHRoZSBIZWxwIG1lbnUsCitidXQgdGhhdCBpcyBub24tc3RhbmRhcmQgYW5kIGlzIGRpc2NvdXJhZ2VkLiAgVGhlIGhpZ2hlc3QgcG9zc2libGUgcHJpb3JpdHkgaXMKK2Fib3V0IDMyMDAwLiAgVGhlIGxvd2VzdCBpcyAxLgorCisJCQkJCQkJKnN1Yi1tZW51LXByaW9yaXR5KgorVGhlIHNhbWUgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIHBvc2l0aW9uIGEgc3ViLW1lbnUuICBUaGUgcHJpb3JpdHkgaXMgdGhlbgorZ2l2ZW4gYXMgYSBkb3Qtc2VwYXJhdGVkIGxpc3Qgb2YgcHJpb3JpdGllcywgYmVmb3JlIHRoZSBtZW51IG5hbWU6ID4KKwk6bWVudSA4MC41MDAgQnVmZmVyLm5leHQgOmJuPENSPgorR2l2aW5nIHRoZSBzdWItbWVudSBwcmlvcml0eSBpcyBvbmx5IG5lZWRlZCB3aGVuIHRoZSBpdGVtIGlzIG5vdCB0byBiZSBwdXQKK2luIGEgbm9ybWFsIHBvc2l0aW9uLiAgRm9yIGV4YW1wbGUsIHRvIHB1dCBhIHN1Yi1tZW51IGJlZm9yZSB0aGUgb3RoZXIgaXRlbXM6ID4KKwk6bWVudSA4MC4xMDAgQnVmZmVyLmZpcnN0IDpicmV3PENSPgorT3IgdG8gcHV0IGEgc3ViLW1lbnUgYWZ0ZXIgdGhlIG90aGVyIGl0ZW1zLCBhbmQgZnVydGhlciBpdGVtcyB3aXRoIGRlZmF1bHQKK3ByaW9yaXR5IHdpbGwgYmUgcHV0IGJlZm9yZSBpdDogPgorCTptZW51IDgwLjkwMCBCdWZmZXIubGFzdCA6Ymxhc3Q8Q1I+CitXaGVuIGEgbnVtYmVyIGlzIG1pc3NpbmcsIHRoZSBkZWZhdWx0IHZhbHVlIDUwMCB3aWxsIGJlIHVzZWQ6ID4KKwk6bWVudSAuOTAwIG15TWVudS50ZXN0IDplY2hvICJ0ZXh0IjxDUj4KK1RoZSBtZW51IHByaW9yaXR5IGlzIG9ubHkgdXNlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IG1lbnUuICBXaGVuIGl0IGFscmVhZHkKK2V4aXN0ZWQsIGUuZy4sIGluIGFub3RoZXIgbW9kZSwgdGhlIHByaW9yaXR5IHdpbGwgbm90IGNoYW5nZS4gIFRodXMsIHRoZQorcHJpb3JpdHkgb25seSBuZWVkcyB0byBiZSBnaXZlbiB0aGUgZmlyc3QgdGltZSBhIG1lbnUgaXMgdXNlZC4KK0FuIGV4Y2VwdGlvbiBpcyB0aGUgUG9wVXAgbWVudS4gIFRoZXJlIGlzIGEgc2VwYXJhdGUgbWVudSBmb3IgZWFjaCBtb2RlCisoTm9ybWFsLCBPcC1wZW5kaW5nLCBWaXN1YWwsIEluc2VydCwgQ21kbGluZSkuICBUaGUgb3JkZXIgaW4gZWFjaCBvZiB0aGVzZQorbWVudXMgY2FuIGJlIGRpZmZlcmVudC4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gbWVudS1iYXIgbWVudXMsIHdoaWNoIGhhdmUKK3RoZSBzYW1lIG9yZGVyIGZvciBhbGwgbW9kZXMuCitOT1RFOiBzdWItbWVudSBwcmlvcml0aWVzIGN1cnJlbnRseSBkb24ndCB3b3JrIGZvciBhbGwgdmVyc2lvbnMgb2YgdGhlIEdVSS4KKworCQkJCQkJCSptZW51LXNlcGFyYXRvciogKkUzMzIqCitNZW51IGl0ZW1zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgYSBzcGVjaWFsIGl0ZW0gdGhhdCBpbnNlcnRzIHNvbWUgc3BhY2UgYmV0d2VlbgoraXRlbXMuICBEZXBlbmRpbmcgb24gdGhlIHN5c3RlbSB0aGlzIGlzIGRpc3BsYXllZCBhcyBhIGxpbmUgb3IgYSBkb3R0ZWQgbGluZS4KK1RoZXNlIGl0ZW1zIG11c3Qgc3RhcnQgd2l0aCBhICctJyBhbmQgZW5kIGluIGEgJy0nLiAgVGhlIHBhcnQgaW4gYmV0d2VlbiBpcwordXNlZCB0byBnaXZlIGl0IGEgdW5pcXVlIG5hbWUuICBQcmlvcml0aWVzIGNhbiBiZSB1c2VkIGFzIHdpdGggbm9ybWFsIGl0ZW1zLgorRXhhbXBsZTogPgorCTptZW51IEV4YW1wbGUuaXRlbTEJOmRvIHNvbWV0aGluZworCTptZW51IEV4YW1wbGUuLVNlcC0JOgorCTptZW51IEV4YW1wbGUuaXRlbTIJOmRvIHNvbWV0aGluZyBkaWZmZXJlbnQKK05vdGUgdGhhdCB0aGUgc2VwYXJhdG9yIGFsc28gcmVxdWlyZXMgYSByaHMuICBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IGl0IGlzLAorYmVjYXVzZSB0aGUgaXRlbSB3aWxsIG5ldmVyIGJlIHNlbGVjdGVkLiAgVXNlIGEgc2luZ2xlIGNvbG9uIHRvIGtlZXAgaXQKK3NpbXBsZS4KKworCQkJCQkJCSpndWktdG9vbGJhcioKK1RoZSB0b29sYmFyIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gdGhlIFdpbjMyLCBBdGhlbmEsIE1vdGlmLCBHVEsrIChYMTEpIGFuZAorUGhvdG9uIEdVSS4gIEl0IHNob3VsZCB0dXJuIHVwIGluIG90aGVyIEdVSXMgaW4gZHVlIGNvdXJzZS4gIFRoZSBkZWZhdWx0Cit0b29sYmFyIGlzIHNldHVwIGluIG1lbnUudmltLgorVGhlIGRpc3BsYXkgb2YgdGhlIHRvb2xiYXIgaXMgY29udHJvbGxlZCBieSB0aGUgJ2d1aW9wdGlvbnMnIGxldHRlciAnVCcuIFlvdQorY2FuIHRodXMgaGF2ZSBtZW51ICYgdG9vbGJhciB0b2dldGhlciwgb3IgZWl0aGVyIG9uIGl0cyBvd24sIG9yIG5laXRoZXIuCitUaGUgYXBwZWFyYW5jZSBpcyBjb250cm9sbGVkIGJ5IHRoZSAndG9vbGJhcicgb3B0aW9uLiAgWW91IGNhbiBjaG9zZSBiZXR3ZWVuCithbiBpbWFnZSwgdGV4dCBvciBib3RoLgorCisJCQkJCQkJKnRvb2xiYXItaWNvbioKK1RoZSB0b29sYmFyIGlzIGRlZmluZWQgYXMgYSBzcGVjaWFsIG1lbnUgY2FsbGVkIFRvb2xCYXIsIHdoaWNoIG9ubHkgaGFzIG9uZQorbGV2ZWwuICBWaW0gaW50ZXJwcmV0cyB0aGUgaXRlbXMgaW4gdGhpcyBtZW51IGFzIGZvbGxvd3M6CisxKSAgSWYgYW4gImljb249IiBhcmd1bWVudCB3YXMgc3BlY2lmaWVkLCB0aGUgZmlsZSB3aXRoIHRoaXMgbmFtZSBpcyB1c2VkLgorICAgIFRoZSBmaWxlIGNhbiBlaXRoZXIgYmUgc3BlY2lmaWVkIHdpdGggdGhlIGZ1bGwgcGF0aCBvciB3aXRoIHRoZSBiYXNlIG5hbWUuCisgICAgSW4gdGhlIGxhc3QgY2FzZSBpdCBpcyBzZWFyY2hlZCBmb3IgaW4gdGhlICJiaXRtYXBzIiBkaXJlY3RvcnkgaW4KKyAgICAncnVudGltZXBhdGgnLCBsaWtlIGluIHBvaW50IDMpLiAgRXhhbXBsZXM6ID4KKwk6YW1lbnUgaWNvbj0vdXNyL2xvY2FsL3BpeG1hcHMvZm9vX2ljb24ueHBtIFRvb2xCYXIuRm9vIDplY2hvICJGb28iPENSPgorCTphbWVudSBpY29uPUZvb0ljb24gVG9vbEJhci5Gb28gOmVjaG8gIkZvbyI8Q1I+Cis8ICAgTm90ZSB0aGF0IGluIHRoZSBmaXJzdCBjYXNlIHRoZSBleHRlbnNpb24gaXMgaW5jbHVkZWQsIHdoaWxlIGluIHRoZSBzZWNvbmQKKyAgICBjYXNlIGl0IGlzIG9taXR0ZWQuCisgICAgSWYgdGhlIGZpbGUgY2Fubm90IGJlIG9wZW5lZCB0aGUgbmV4dCBwb2ludHMgYXJlIHRyaWVkLgorICAgIEEgc3BhY2UgaW4gdGhlIGZpbGUgbmFtZSBtdXN0IGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaC4KKyAgICBBIG1lbnUgcHJpb3JpdHkgbXVzdCBjb21lIF9hZnRlcl8gdGhlIGljb24gYXJndW1lbnQ6ID4KKwk6YW1lbnUgaWNvbj1mb28gMS40MiBUb29sQmFyLkZvbyA6ZWNobyAiNDIhIjxDUj4KKzIpICBBbiBpdGVtIGNhbGxlZCAnQnVpbHRJbiMjJywgd2hlcmUgIyMgaXMgYSBudW1iZXIsIGlzIHRha2VuIGFzIG51bWJlciAjIyBvZgorICAgIHRoZSBidWlsdC1pbiBiaXRtYXBzIGF2YWlsYWJsZSBpbiBWaW0uIEN1cnJlbnRseSB0aGVyZSBhcmUgMzEgbnVtYmVyZWQKKyAgICBmcm9tIDAgdG8gMzAgd2hpY2ggY292ZXIgbW9zdCBjb21tb24gZWRpdGluZyBvcGVyYXRpb25zIHxidWlsdGluLXRvb2xzfC4gPgorCTphbWVudSBUb29sQmFyLkJ1aWx0SW4yMiA6Y2FsbCBTZWFyY2hOZXh0KCJiYWNrIik8Q1I+CiszKSAgQW4gaXRlbSB3aXRoIGFub3RoZXIgbmFtZSBpcyBmaXJzdCBzZWFyY2hlZCBmb3IgaW4gdGhlIGRpcmVjdG9yeQorICAgICJiaXRtYXBzIiBpbiAncnVudGltZXBhdGgnLiAgSWYgZm91bmQsIHRoZSBiaXRtYXAgZmlsZSBpcyB1c2VkIGFzIHRoZQorICAgIHRvb2xiYXIgYnV0dG9uIGltYWdlLiAgTm90ZSB0aGF0IHRoZSBleGFjdCBmaWxlbmFtZSBpcyBPUy1zcGVjaWZpYzogRm9yCisgICAgZXhhbXBsZSwgdW5kZXIgV2luMzIgdGhlIGNvbW1hbmQgPgorCTphbWVudSBUb29sQmFyLkhlbGxvIDplY2hvICJoZWxsbyI8Q1I+Cis8ICAgd291bGQgZmluZCB0aGUgZmlsZSAnaGVsbG8uYm1wJy4gIFVuZGVyIEdUSysvWDExIGl0IGlzICdIZWxsby54cG0nLiAgV2l0aAorICAgIEdUSysgMiB0aGUgZmlsZXMgJ0hlbGxvLnBuZycsICdIZWxsby54cG0nIGFuZCAnSGVsbG8uYm1wJyBhcmUgY2hlY2tlZCBmb3IKKyAgICBleGlzdGVuY2UsIGFuZCB0aGUgZmlyc3Qgb25lIGZvdW5kIHdvdWxkIGJlIHVzZWQuCisgICAgRm9yIE1TLVdpbmRvd3MgYW5kIEdUSysgMiB0aGUgYml0bWFwIGlzIHNjYWxlZCB0byBmaXQgdGhlIGJ1dHRvbi4gIEZvcgorICAgIE1TLVdpbmRvd3MgYSBzaXplIG9mIDE4IGJ5IDE4IHBpeGVscyB3b3JrcyBiZXN0LgorICAgIEZvciBNUy1XaW5kb3dzIHRoZSBiaXRtYXAgc2hvdWxkIGhhdmUgMTYgY29sb3JzIHdpdGggdGhlIHN0YW5kYXJkIHBhbGV0dGUuCisgICAgVGhlIGxpZ2h0IGdyZXkgcGl4ZWxzIHdpbGwgYmUgY2hhbmdlZCB0byB0aGUgV2luZG93IGZyYW1lIGNvbG9yIGFuZCB0aGUKKyAgICBkYXJrIGdyZXkgcGl4ZWxzIHRvIHRoZSB3aW5kb3cgc2hhZG93IGNvbG9yLiAgTW9yZSBjb2xvcnMgbWlnaHQgYWxzbyB3b3JrLAorICAgIGRlcGVuZGluZyBvbiB5b3VyIHN5c3RlbS4KKzQpICBJZiB0aGUgYml0bWFwIGlzIHN0aWxsIG5vdCBmb3VuZCwgVmltIGNoZWNrcyBmb3IgYSBtYXRjaCBhZ2FpbnN0IGl0cyBsaXN0CisgICAgb2YgYnVpbHQtaW4gbmFtZXMuICBFYWNoIGJ1aWx0LWluIGJ1dHRvbiBpbWFnZSBoYXMgYSBuYW1lLgorICAgIFNvIHRoZSBjb21tYW5kID4KKwk6YW1lbnUgVG9vbEJhci5PcGVuIDplCis8ICAgd2lsbCBzaG93IHRoZSBidWlsdC1pbiAib3BlbiBhIGZpbGUiIGJ1dHRvbiBpbWFnZSBpZiBubyBvcGVuLmJtcCBleGlzdHMuCisgICAgQWxsIHRoZSBidWlsdC1pbiBuYW1lcyBjYW4gYmUgc2VlbiB1c2VkIGluIG1lbnUudmltLgorNSkgIElmIGFsbCBlbHNlIGZhaWxzLCBhIGJsYW5rLCBidXQgZnVuY3Rpb25pbmcsIGJ1dHRvbiBpcyBkaXNwbGF5ZWQuCisKKwkJCQkJCQkqYnVpbHRpbi10b29scyoKK25yICBOYW1lCQlOb3JtYWwgYWN0aW9uICB+CiswMCAgTmV3CQkJb3BlbiBuZXcgd2luZG93CiswMSAgT3BlbgkJYnJvd3NlIGZvciBmaWxlIHRvIG9wZW4gaW4gY3VycmVudCB3aW5kb3cKKzAyICBTYXZlCQl3cml0ZSBidWZmZXIgdG8gZmlsZQorMDMgIFVuZG8JCXVuZG8gbGFzdCBjaGFuZ2UKKzA0ICBSZWRvCQlyZWRvIGxhc3QgdW5kb25lIGNoYW5nZQorMDUgIEN1dAkJCWRlbGV0ZSBzZWxlY3RlZCB0ZXh0IHRvIGNsaXBib2FyZAorMDYgIENvcHkJCWNvcHkgc2VsZWN0ZWQgdGV4dCB0byBjbGlwYm9hcmQKKzA3ICBQYXN0ZQkJcGFzdGUgdGV4dCBmcm9tIGNsaXBib2FyZAorMDggIFByaW50CQlwcmludCBjdXJyZW50IGJ1ZmZlcgorMDkgIEhlbHAJCW9wZW4gYSBidWZmZXIgb24gVmltJ3MgYnVpbHRpbiBoZWxwCisxMCAgRmluZAkJc3RhcnQgYSBzZWFyY2ggY29tbWFuZAorMTEgIFNhdmVBbGwJCXdyaXRlIGFsbCBtb2RpZmllZCBidWZmZXJzIHRvIGZpbGUKKzEyICBTYXZlU2VzbgkJd3JpdGUgc2Vzc2lvbiBmaWxlIGZvciBjdXJyZW50IHNpdHVhdGlvbgorMTMgIE5ld1Nlc24JCXdyaXRlIG5ldyBzZXNzaW9uIGZpbGUKKzE0ICBMb2FkU2VzbgkJbG9hZCBzZXNzaW9uIGZpbGUKKzE1ICBSdW5TY3JpcHQJCWJyb3dzZSBmb3IgZmlsZSB0byBydW4gYXMgYSBWaW0gc2NyaXB0CisxNiAgUmVwbGFjZQkJcHJvbXB0IGZvciBzdWJzdGl0dXRlIGNvbW1hbmQKKzE3ICBXaW5DbG9zZQkJY2xvc2UgY3VycmVudCB3aW5kb3cKKzE4ICBXaW5NYXgJCW1ha2UgY3VycmVudCB3aW5kb3cgdXNlIG1hbnkgbGluZXMKKzE5ICBXaW5NaW4JCW1ha2UgY3VycmVudCB3aW5kb3cgdXNlIGZldyBsaW5lcworMjAgIFdpblNwbGl0CQlzcGxpdCBjdXJyZW50IHdpbmRvdworMjEgIFNoZWxsCQlzdGFydCBhIHNoZWxsCisyMiAgRmluZFByZXYJCXNlYXJjaCBhZ2FpbiwgYmFja3dhcmQKKzIzICBGaW5kTmV4dAkJc2VhcmNoIGFnYWluLCBmb3J3YXJkCisyNCAgRmluZEhlbHAJCXByb21wdCBmb3Igd29yZCB0byBzZWFyY2ggaGVscCBmb3IKKzI1ICBNYWtlCQlydW4gbWFrZSBhbmQganVtcCB0byBmaXJzdCBlcnJvcgorMjYgIFRhZ0p1bXAJCWp1bXAgdG8gdGFnIHVuZGVyIHRoZSBjdXJzb3IKKzI3ICBSdW5DdGFncwkJYnVpbGQgdGFncyBmb3IgZmlsZXMgaW4gY3VycmVudCBkaXJlY3RvcnkKKzI4ICBXaW5WU3BsaXQJCXNwbGl0IGN1cnJlbnQgd2luZG93IHZlcnRpY2FsbHkKKzI5ICBXaW5NYXhXaWR0aAkJbWFrZSBjdXJyZW50IHdpbmRvdyB1c2UgbWFueSBjb2x1bW5zCiszMCAgV2luTWluV2lkdGgJCW1ha2UgY3VycmVudCB3aW5kb3cgdXNlIGZldyBjb2x1bW5zCisKKwkJCQkJKmhpZGRlbi1tZW51cyogKndpbjMyLWhpZGRlbi1tZW51cyoKK0luIHRoZSBXaW4zMiBhbmQgR1RLKyBHVUksIHN0YXJ0aW5nIGEgbWVudSBuYW1lIHdpdGggJ10nIGV4Y2x1ZGVzIHRoYXQgbWVudQorZnJvbSB0aGUgbWFpbiBtZW51IGJhci4gIFlvdSBtdXN0IHRoZW4gdXNlIHRoZSB8OnBvcHVwfCBvciB8OnRlYXJvZmZ8IGNvbW1hbmQKK3RvIGRpc3BsYXkgaXQuCisKKwkJCQkJCQkqcG9wdXAtbWVudSoKK0luIHRoZSBXaW4zMiwgR1RLKywgTW90aWYsIEF0aGVuYSBhbmQgUGhvdG9uIEdVSSwgeW91IGNhbiBkZWZpbmUgdGhlIHNwZWNpYWwKK21lbnUgIlBvcFVwIi4gIFRoaXMgaXMgdGhlIG1lbnUgdGhhdCBpcyBkaXNwbGF5ZWQgd2hlbiB0aGUgcmlnaHQgbW91c2UgYnV0dG9uCitpcyBwcmVzc2VkLCBpZiAnbW91c2Vtb2RlbCcgaXMgc2V0IHRvIHBvcHVwIG9yIHBvcHVwX3NldHBvcy4KKworCis1LjMgU2hvd2luZyBXaGF0IE1lbnVzIEFyZSBNYXBwZWQgVG8JCQkqc2hvd2luZy1tZW51cyoKKworVG8gc2VlIHdoYXQgYW4gZXhpc3RpbmcgbWVudSBpcyBtYXBwZWQgdG8sIHVzZSBqdXN0IG9uZSBhcmd1bWVudCBhZnRlciB0aGUKK21lbnUgY29tbWFuZHMgKGp1c3QgbGlrZSB5b3Ugd291bGQgd2l0aCB0aGUgIjptYXAiIGNvbW1hbmRzKS4gIElmIHRoZSBtZW51CitzcGVjaWZpZWQgaXMgYSBzdWJtZW51LCB0aGVuIGFsbCBtZW51cyB1bmRlciB0aGF0IGhpZXJhcmNoeSB3aWxsIGJlIHNob3duLgorSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4gYWZ0ZXIgOm1lbnUgYXQgYWxsLCB0aGVuIEFMTCBtZW51IGl0ZW1zIGFyZSBzaG93bgorZm9yIHRoZSBhcHByb3ByaWF0ZSBtb2RlIChlZywgQ29tbWFuZC1saW5lIG1vZGUgZm9yIDpjbWVudSkuCisKK1NwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgbGlzdCwganVzdCBiZWZvcmUgdGhlIHJoczoKKyoJVGhlIG1lbnUgd2FzIGRlZmluZWQgd2l0aCAibm9yZSIgdG8gZGlzYWxsb3cgcmVtYXBwaW5nLgorJglUaGUgbWVudSB3YXMgZGVmaW5lZCB3aXRoICI8c2NyaXB0PiIgdG8gYWxsb3cgcmVtYXBwaW5nIHNjcmlwdC1sb2NhbAorCW1hcHBpbmdzIG9ubHkuCistCVRoZSBtZW51IHdhcyBkaXNhYmxlZC4KKworTm90ZSB0aGF0IGhpdHRpbmcgPFRhYj4gd2hpbGUgZW50ZXJpbmcgYSBtZW51IG5hbWUgYWZ0ZXIgYSBtZW51IGNvbW1hbmQgbWF5CitiZSB1c2VkIHRvIGNvbXBsZXRlIHRoZSBuYW1lIG9mIHRoZSBtZW51IGl0ZW0uCisKKworNS40IEV4ZWN1dGluZyBNZW51cwkJCQkJKmV4ZWN1dGUtbWVudXMqCisKKwkJCQkJCSo6ZW0qICAqOmVtZW51KiAqRTMzNCogKkUzMzUqCis6W3JhbmdlXWVtW2VudV0ge21lbnV9CQlFeGVjdXRlIHttZW51fSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisJCQkJVGhlIGRlZmF1bHQgaXMgdG8gZXhlY3V0ZSB0aGUgTm9ybWFsIG1vZGUKKwkJCQltZW51LiAgSWYgYSByYW5nZSBpcyBzcGVjaWZpZWQsIGl0IGV4ZWN1dGVzCisJCQkJdGhlIFZpc3VhbCBtb2RlIG1lbnUuCisJCQkJSWYgdXNlZCBmcm9tIDxjLW8+LCBpdCBleGVjdXRlcyB0aGUKKwkJCQlpbnNlcnQtbW9kZSBtZW51IEVnOiA+CisJOmVtZW51IEZpbGUuRXhpdAorCitJZiB0aGUgY29uc29sZS1tb2RlIHZpbSBoYXMgYmVlbiBjb21waWxlZCB3aXRoIFdBTlRfTUVOVSBkZWZpbmVkLCB5b3UgY2FuCit1c2UgOmVtZW51IHRvIGFjY2VzcyB1c2VmdWwgbWVudSBpdGVtcyB5b3UgbWF5IGhhdmUgZ290IHVzZWQgdG8gZnJvbSBHVUkKK21vZGUuICBTZWUgJ3dpbGRtZW51JyBmb3IgYW4gb3B0aW9uIHRoYXQgd29ya3Mgd2VsbCB3aXRoIHRoaXMuICBTZWUKK3xjb25zb2xlLW1lbnVzfCBmb3IgYW4gZXhhbXBsZS4KKworV2hlbiB1c2luZyBhIHJhbmdlLCBpZiB0aGUgbGluZXMgbWF0Y2ggd2l0aCAnPCwnPiwgdGhlbiB0aGUgbWVudSBpcyBleGVjdXRlZAordXNpbmcgdGhlIGxhc3QgdmlzdWFsIHNlbGVjdGlvbi4KKworCis1LjUgRGVsZXRpbmcgTWVudXMJCQkJCSpkZWxldGUtbWVudXMqCisKKwkJCQkJCSo6dW5tZSogICo6dW5tZW51KgorCQkJCQkJKjphdW4qICAgKjphdW5tZW51KgorCQkJCQkJKjpudW5tZSogKjpudW5tZW51KgorCQkJCQkJKjpvdW5tZSogKjpvdW5tZW51KgorCQkJCQkJKjp2dW5tZSogKjp2dW5tZW51KgorCQkJCQkJKjppdW5tZSogKjppdW5tZW51KgorCQkJCQkJKjpjdW5tZSogKjpjdW5tZW51KgorVG8gZGVsZXRlIGEgbWVudSBpdGVtIG9yIGEgd2hvbGUgc3VibWVudSwgdXNlIHRoZSB1bm1lbnUgY29tbWFuZHMsIHdoaWNoIGFyZQorYW5hbG9nb3VzIHRvIHRoZSB1bm1hcCBjb21tYW5kcy4gIEVnOiA+CisgICAgOnVubWVudSEgRWRpdC5QYXN0ZQorCitUaGlzIHdpbGwgcmVtb3ZlIHRoZSBQYXN0ZSBpdGVtIGZyb20gdGhlIEVkaXQgbWVudSBmb3IgSW5zZXJ0IGFuZAorQ29tbWFuZC1saW5lIG1vZGVzLgorCitOb3RlIHRoYXQgaGl0dGluZyA8VGFiPiB3aGlsZSBlbnRlcmluZyBhIG1lbnUgbmFtZSBhZnRlciBhbiB1bWVudSBjb21tYW5kCittYXkgYmUgdXNlZCB0byBjb21wbGV0ZSB0aGUgbmFtZSBvZiB0aGUgbWVudSBpdGVtIGZvciB0aGUgYXBwcm9wcmlhdGUgbW9kZS4KKworVG8gcmVtb3ZlIGFsbCBtZW51cyB1c2U6CQkJKjp1bm1lbnUtYWxsKiAgPgorCTp1bm1lbnUgKgkiIHJlbW92ZSBhbGwgbWVudXMgaW4gTm9ybWFsIGFuZCB2aXN1YWwgbW9kZQorCTp1bm1lbnUhICoJIiByZW1vdmUgYWxsIG1lbnVzIGluIEluc2VydCBhbmQgQ29tbWFuZC1saW5lIG1vZGUKKwk6YXVubWVudSAqCSIgcmVtb3ZlIGFsbCBtZW51cyBpbiBhbGwgbW9kZXMKKworSWYgeW91IHdhbnQgdG8gZ2V0IHJpZCBvZiB0aGUgbWVudSBiYXI6ID4KKwk6c2V0IGd1aW9wdGlvbnMtPW0KKworCis1LjYgRGlzYWJsaW5nIE1lbnVzCQkJCQkqZGlzYWJsZS1tZW51cyoKKworCQkJCQkJKjptZW51LWRpc2FibGUqICo6bWVudS1lbmFibGUqCitJZiB5b3UgZG8gbm90IHdhbnQgdG8gcmVtb3ZlIGEgbWVudSwgYnV0IGRpc2FibGUgaXQgZm9yIGEgbW9tZW50LCB0aGlzIGNhbiBiZQorZG9uZSBieSBhZGRpbmcgdGhlICJlbmFibGUiIG9yICJkaXNhYmxlIiBrZXl3b3JkIHRvIGEgIjptZW51IiBjb21tYW5kLgorRXhhbXBsZXM6ID4KKwk6bWVudSBkaXNhYmxlICZGaWxlLiZPcGVuXC5cLlwuCisJOmFtZW51IGVuYWJsZSAqCisJOmFtZW51IGRpc2FibGUgJlRvb2xzLioKKworVGhlIGNvbW1hbmQgYXBwbGllcyB0byB0aGUgbW9kZXMgYXMgdXNlZCB3aXRoIGFsbCBtZW51IGNvbW1hbmRzLiAgTm90ZSB0aGF0CitjaGFyYWN0ZXJzIGxpa2UgIiYiIG5lZWQgdG8gYmUgaW5jbHVkZWQgZm9yIHRyYW5zbGF0ZWQgbmFtZXMgdG8gYmUgZm91bmQuCitXaGVuIHRoZSBhcmd1bWVudCBpcyAiKiIsIGFsbCBtZW51cyBhcmUgYWZmZWN0ZWQuICBPdGhlcndpc2UgdGhlIGdpdmVuIG1lbnUKK25hbWUgYW5kIGFsbCBleGlzdGluZyBzdWJtZW51cyBiZWxvdyBpdCBhcmUgYWZmZWN0ZWQuCisKKworNS43IEV4YW1wbGVzIGZvciBNZW51cwkJCQkJKm1lbnUtZXhhbXBsZXMqCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gYWRkIG1lbnUgaXRlbXMgd2l0aCBtZW51J3MhICBZb3UgY2FuIGFkZCBhIG1lbnUKK2l0ZW0gZm9yIHRoZSBrZXl3b3JkIHVuZGVyIHRoZSBjdXJzb3IuICBUaGUgcmVnaXN0ZXIgInoiIGlzIHVzZWQuID4KKworICA6bm1lbnUgV29yZHMuQWRkXCBWYXIJCXdiInp5ZTptZW51ISBXb3Jkcy48Qy1SPnogPEMtUj56PENSPgorICA6bm1lbnUgV29yZHMuUmVtb3ZlXCBWYXIJd2IienllOnVubWVudSEgV29yZHMuPEMtUj56PENSPgorICA6dm1lbnUgV29yZHMuQWRkXCBWYXIJCSJ6eTptZW51ISBXb3Jkcy48Qy1SPnogPEMtUj56IDxDUj4KKyAgOnZtZW51IFdvcmRzLlJlbW92ZVwgVmFyCSJ6eTp1bm1lbnUhIFdvcmRzLjxDLVI+ejxDUj4KKyAgOmltZW51IFdvcmRzLkFkZFwgVmFyCQk8RXNjPndiInp5ZTptZW51ISBXb3Jkcy48Qy1SPnogPEMtUj56PENSPmEKKyAgOmltZW51IFdvcmRzLlJlbW92ZVwgVmFyCTxFc2M+d2IienllOnVubWVudSEgV29yZHMuPEMtUj56PENSPmEKKworKHRoZSByaHMgaXMgaW4gPD4gbm90YXRpb24sIHlvdSBjYW4gY29weS9wYXN0ZSB0aGlzIHRleHQgdG8gdHJ5IG91dCB0aGUKK21hcHBpbmdzLCBvciBwdXQgdGhlc2UgbGluZXMgaW4geW91ciBndmltcmM7ICI8Qy1SPiIgaXMgQ1RSTC1SLCAiPENSPiIgaXMKK3RoZSA8Q1I+IGtleS4gIHw8PnwpCisKKworNS44IFRvb2x0aXBzICYgTWVudSB0aXBzCisKK1NlZSBzZWN0aW9uIHw0Mi40fCBpbiB0aGUgdXNlciBtYW51YWwuCisKKwkJCQkJCQkqOnRtZW51KiAqOnRtKgorOnRtW2VudV0ge21lbnVwYXRofSB7cmhzfQlEZWZpbmUgYSB0aXAgZm9yIGEgbWVudSBvciB0b29sLiAge29ubHkgaW4KKwkJCQlYMTEgYW5kIFdpbjMyIEdVSX0KKworOnRtW2VudV0gW21lbnVwYXRoXQkJTGlzdCBtZW51IHRpcHMuIHtvbmx5IGluIFgxMSBhbmQgV2luMzIgR1VJfQorCisJCQkJCQkJKjp0dW5tZW51KiAqOnR1KgorOnR1W25tZW51XSB7bWVudXBhdGh9CQlSZW1vdmUgYSB0aXAgZm9yIGEgbWVudSBvciB0b29sLgorCQkJCXtvbmx5IGluIFgxMSBhbmQgV2luMzIgR1VJfQorCitXaGVuIGEgdGlwIGlzIGRlZmluZWQgZm9yIGEgbWVudSBpdGVtLCBpdCBhcHBlYXJzIGluIHRoZSBjb21tYW5kLWxpbmUgYXJlYQord2hlbiB0aGUgbW91c2UgaXMgb3ZlciB0aGF0IGl0ZW0sIG11Y2ggbGlrZSBhIHN0YW5kYXJkIFdpbmRvd3MgbWVudSBoaW50IGluCit0aGUgc3RhdHVzIGJhci4gKEV4Y2VwdCB3aGVuIFZpbSBpcyBpbiBDb21tYW5kLWxpbmUgbW9kZSwgd2hlbiBvZiBjb3Vyc2UKK25vdGhpbmcgaXMgZGlzcGxheWVkLikKK1doZW4gYSB0aXAgaXMgZGVmaW5lZCBmb3IgYSBUb29sQmFyIGl0ZW0sIGl0IGFwcGVhcnMgYXMgYSB0b29sdGlwIHdoZW4gdGhlCittb3VzZSBwYXVzZXMgb3ZlciB0aGF0IGJ1dHRvbiwgaW4gdGhlIHVzdWFsIGZhc2hpb24uICBVc2UgdGhlIHxobC1Ub29sdGlwfAoraGlnaGxpZ2h0IGdyb3VwIHRvIGNoYW5nZSBpdHMgY29sb3JzLgorCitBICJ0aXAiIGNhbiBiZSBkZWZpbmVkIGZvciBlYWNoIG1lbnUgaXRlbS4gIEZvciBleGFtcGxlLCB3aGVuIGRlZmluaW5nIGEgbWVudQoraXRlbSBsaWtlIHRoaXM6ID4KKwk6YW1lbnUgTXlNZW51LkhlbGxvIDplY2hvICJIZWxsbyI8Q1I+CitUaGUgdGlwIGlzIGRlZmluZWQgbGlrZSB0aGlzOiA+CisJOnRtZW51IE15TWVudS5IZWxsbyBEaXNwbGF5cyBhIGdyZWV0aW5nLgorQW5kIGRlbGV0ZSBpdCB3aXRoOiA+CisJOnR1bm1lbnUgTXlNZW51LkhlbGxvCisKK1Rvb2x0aXBzIGFyZSBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgZm9yIHRoZSBYMTEgYW5kIFdpbjMyIEdVSS4gSG93ZXZlciwgdGhleQorc2hvdWxkIGFwcGVhciBmb3IgdGhlIG90aGVyIGd1aSBwbGF0Zm9ybXMgaW4gdGhlIG5vdCB0b28gZGlzdGFudCBmdXR1cmUuCisKK1RoZSAiOnRtZW51IiBjb21tYW5kIHdvcmtzIGp1c3QgbGlrZSBvdGhlciBtZW51IGNvbW1hbmRzLCBpdCB1c2VzIHRoZSBzYW1lCithcmd1bWVudHMuICAiOnR1bm1lbnUiIGRlbGV0ZXMgYW4gZXhpc3RpbmcgbWVudSB0aXAsIGluIHRoZSBzYW1lIHdheSBhcyB0aGUKK290aGVyIHVubWVudSBjb21tYW5kcy4KKworSWYgYSBtZW51IGl0ZW0gYmVjb21lcyBpbnZhbGlkIChpLmUuIGl0cyBhY3Rpb25zIGluIGFsbCBtb2RlcyBhcmUgZGVsZXRlZCkgVmltCitkZWxldGVzIHRoZSBtZW51IHRpcCAoYW5kIHRoZSBpdGVtKSBmb3IgeW91LiAgVGhpcyBtZWFucyB0aGF0IDphdW5tZW51IGRlbGV0ZXMKK2EgbWVudSBpdGVtIC0geW91IGRvbid0IG5lZWQgdG8gZG8gYSA6dHVubWVudSBhcyB3ZWxsLgorCisKKzUuOSBQb3B1cCBNZW51cworCitJbiB0aGUgV2luMzIgYW5kIEdUSysgR1VJLCB5b3UgY2FuIGNhdXNlIGEgbWVudSB0byBwb3B1cCBhdCB0aGUgY3Vyc29yLgorVGhpcyBiZWhhdmVzIHNpbWlsYXJseSB0byB0aGUgUG9wVXAgbWVudXMgZXhjZXB0IHRoYXQgYW55IG1lbnUgdHJlZSBjYW4KK2JlIHBvcHBlZCB1cC4KKworVGhpcyBjb21tYW5kIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdXNpbmcgaXQgaXMgZGlzY291cmFnZWQsIGJlY2F1c2UKK2l0IGJlaGF2ZXMgaW4gYSBzdHJhbmdlIHdheS4KKworCQkJCQkJCSo6cG9wdXAqICo6cG9wdSoKKzpwb3B1W3BdIHtuYW1lfQkJCVBvcHVwIHRoZSBtZW51IHtuYW1lfS4gIFRoZSBtZW51IG5hbWVkIG11c3QKKwkJCQloYXZlIGF0IGxlYXN0IG9uZSBzdWJlbnRyeSwgYnV0IG5lZWQgbm90CisJCQkJYXBwZWFyIG9uIHRoZSBtZW51LWJhciAoc2VlIHxoaWRkZW4tbWVudXN8KS4KKwkJCQl7b25seSBhdmFpbGFibGUgZm9yIFdpbjMyIGFuZCBHVEsgR1VJfQorCitFeGFtcGxlOiA+CisJOnBvcHVwIEZpbGUKK3dpbGwgbWFrZSB0aGUgIkZpbGUiIG1lbnUgKGlmIHRoZXJlIGlzIG9uZSkgYXBwZWFyIGF0IHRoZSB0ZXh0IGN1cnNvci4gPgorCisJOmFtZW51IF1Ub29sYmFyLk1ha2UJOm1ha2U8Q1I+CisJOnBvcHVwIF1Ub29sYmFyCitUaGlzIGNyZWF0ZXMgYSBwb3B1cCBtZW51IHRoYXQgZG9lc24ndCBleGlzdCBvbiB0aGUgbWFpbiBtZW51LWJhci4KKworTm90ZSB0aGF0IGEgbWVudSB0aGF0IHN0YXJ0cyB3aXRoICddJyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gRXh0cmFzCQkJCQkJKmd1aS1leHRyYXMqCisKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgb3RoZXIgZmVhdHVyZXMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gdGhlIEdVSS4KKworLSBXaXRoIHRoZSBHVUksIHRoZXJlIGlzIG5vIHdhaXQgZm9yIG9uZSBzZWNvbmQgYWZ0ZXIgaGl0dGluZyBlc2NhcGUsIGJlY2F1c2UKKyAgdGhlIGtleSBjb2RlcyBkb24ndCBzdGFydCB3aXRoIDxFc2M+LgorCistIFR5cGluZyBeViBmb2xsb3dlZCBieSBhIHNwZWNpYWwga2V5IGluIHRoZSBHVUkgd2lsbCBpbnNlcnQgIjxLZXk+Iiwgc2luY2UKKyAgdGhlIGludGVybmFsIHN0cmluZyB1c2VkIGlzIG1lYW5pbmdsZXNzLiAgTW9kaWZpZXJzIG1heSBhbHNvIGJlIGhlbGQgZG93biB0bworICBnZXQgIjxNb2RpZmllcnMtS2V5PiIuCisKKy0gSW4gdGhlIEdVSSwgdGhlIG1vZGlmaWVycyBTSElGVCwgQ1RSTCwgYW5kIEFMVCAob3IgTUVUQSkgbWF5IGJlIHVzZWQgd2l0aGluCisgIG1hcHBpbmdzIG9mIHNwZWNpYWwga2V5cyBhbmQgbW91c2UgZXZlbnRzLiAgZWc6IDptYXAgPE0tTGVmdERyYWc+IDxMZWZ0RHJhZz4KKworLSBJbiB0aGUgR1VJLCBzZXZlcmFsIG5vcm1hbCBrZXlzIG1heSBoYXZlIG1vZGlmaWVycyBpbiBtYXBwaW5ncyBldGMsIHRoZXNlCisgIGFyZSA8U3BhY2U+LCA8VGFiPiwgPE5MPiwgPENSPiwgPEVzYz4uCisKKy0gVG8gY2hlY2sgaW4gYSBWaW0gc2NyaXB0IGlmIHRoZSBHVUkgaXMgYmVpbmcgdXNlZCwgeW91IGNhbiB1c2Ugc29tZXRoaW5nCisgIGxpa2UgdGhpczogPgorCisJaWYgaGFzKCJndWlfcnVubmluZyIpCisJICAgZWNobyAieWVzLCB3ZSBoYXZlIGEgR1VJIgorCWVsc2UKKwkgICBlY2hvICJCb3Jpbmcgb2xkIGNvbnNvbGUiCisJZW5kaWYKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBTaGVsbCBDb21tYW5kcwkJCQkJKmd1aS1zaGVsbCoKKworRm9yIHRoZSBYMTEgR1VJIHRoZSBleHRlcm5hbCBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSBndmltIHdpbmRvdy4KK1NlZSB8Z3VpLXB0eXwuCisKK1dBUk5JTkc6IEV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kIGZyb20gdGhlIFgxMSBHVUkgd2lsbCBub3QgYWx3YXlzCit3b3JrLiAgIm5vcm1hbCIgY29tbWFuZHMgbGlrZSAibHMiLCAiZ3JlcCIgYW5kICJtYWtlIiBtb3N0bHkgd29yayBmaW5lLgorQ29tbWFuZHMgdGhhdCByZXF1aXJlIGFuIGludGVsbGlnZW50IHRlcm1pbmFsIGxpa2UgImxlc3MiIGFuZCAiaXNwZWxsIiB3b24ndAord29yay4gIFNvbWUgbWF5IGV2ZW4gaGFuZyBhbmQgbmVlZCB0byBiZSBraWxsZWQgZnJvbSBhbm90aGVyIHRlcm1pbmFsLiAgU28gYmUKK2NhcmVmdWwhCisKK0ZvciB0aGUgV2luMzIgR1VJIHRoZSBleHRlcm5hbCBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCitTZWUgfGd1aS1zaGVsbC13aW4zMnwuCisKKyB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2d1aV93MTYudHh0IGIvcnVudGltZS9kb2MvZ3VpX3cxNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1NWFmZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2d1aV93MTYudHh0CkBAIC0wLDAgKzEsMTg2IEBACisqZ3VpX3cxNi50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDEgU2VwIDAzCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworVmltJ3MgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlCQkJCSpndWktdzE2KiAqd2luMTYtZ3VpKgorCisxLiBTdGFydGluZyB0aGUgR1VJCQl8d2luMTYtc3RhcnR8CisyLiBWaW0gYXMgZGVmYXVsdCBlZGl0b3IJfHdpbjE2LWRlZmF1bHQtZWRpdG9yfAorMy4gVXNpbmcgdGhlIGNsaXBib2FyZAkJfHdpbjE2LWNsaXBib2FyZHwKKzQuIFNoZWxsIENvbW1hbmRzCQl8d2luMTYtc2hlbGx8Cis1LiBTcGVjaWFsIGNvbG9ycwkJfHdpbjE2LWNvbG9yc3wKKzYuIFdpbmRvd3MgZGlhbG9ncyAmIGJyb3dzZXJzCXx3aW4xNi1kaWFsb2dzfAorNy4gVmFyaW91cwkJCXx3aW4xNi12YXJpb3VzfAorCitPdGhlciByZWxldmFudCBkb2N1bWVudGF0aW9uOgorfGd1aS50eHR8CUZvciBnZW5lcmljIGl0ZW1zIG9mIHRoZSBHVUkuCit8b3NfbXNkb3MudHh0fCAgRm9yIGl0ZW1zIGNvbW1vbiB0byBET1MgYW5kIFdpbmRvd3MuCit8Z3VpX3czMi50eHR8CVNvbWUgaXRlbXMgaGVyZSBhcmUgYWxzbyBhcHBsaWNhYmxlIHRvIHRoZSBXaW4xNiB2ZXJzaW9uLgorCit7VmkgZG9lcyBub3QgaGF2ZSBhIFdpbmRvd3MgR1VJfQorCitUaGUgV2luMTYgdmVyc2lvbiBvZiBWaW0gd2lsbCBydW4gb24gV2luZG93cyAzLjEgb3IgbGF0ZXIuIEl0IGhhcyBub3QgYmVlbgordGVzdGVkIG9uIDMuMCwgaXQgcHJvYmFibHkgd29uJ3Qgd29yayB3aXRob3V0IGJlaW5nIHJlY29tcGlsZWQgYW5kCittb2RpZmllZC4gKGJ1dCB5b3UgcmVhbGx5IHNob3VsZCB1cGdyYWRlIHRvIDMuMTEgYW55d2F5LiA6KQorCitJbiBtb3N0IHJlc3BlY3RzIGl0IGJlaGF2ZXMgaWRlbnRpY2FsbHkgdG8gdGhlIFdpbjMyIEdVSSB2ZXJzaW9uLCBpbmNsdWRpbmcKK2hhdmluZyBhIGZsYXQtc3R5bGUgdG9vbGJhcighKS4gVGhlIGNoaWVmIGRpZmZlcmVuY2VzOgorCisxKSBCb2xkL0l0YWxpYyB0ZXh0IGlzIG5vdCBhdmFpbGFibGUsIHRvIHNwZWVkIHVwIHJlcGFpbnQvcmVkdWNlIHJlc291cmNlCisgICB1c2FnZS4gKFlvdSBjYW4gcmUtaW5zdGF0ZSB0aGlzIGJ5IHVuZGVmaW5pbmcgTVNXSU4xNl9GQVNUVEVYVC4pCisyKSBObyB0ZWFyb2ZmIG1lbnUgZW11bGF0aW9uLgorMykgTm8gT0xFIGludGVyZmFjZS4KKzQpIE5vIGxvbmcgZmlsZW5hbWUgc3VwcG9ydCAob2YgY291cnNlKQorNSkgTm8gdG9vbHRpcHMgb24gdG9vbGJhciBidXR0b25zIC0gaW5zdGVhZCB0aGV5IHByb2R1Y2UgY29tbWFuZC1saW5lIHRpcHMKKyAgIGxpa2UgbWVudSBpdGVtcyBkby4KKzYpIExpbmUgbGVuZ3RoIGxpbWl0ZWQgdG8gMzI3NjcgY2hhcmFjdGVycyAobGlrZSAxNi1iaXQgRE9TIHZlcnNpb24pCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTdGFydGluZyB0aGUgR1VJCQkJCQkqd2luMTYtc3RhcnQqCisKK1RoZSBXaW4xNiBHVUkgdmVyc2lvbiBvZiBWaW0gd2lsbCBhbHdheXMgc3RhcnQgdGhlIEdVSSwgbm8gbWF0dGVyIGhvdyB5b3UKK3N0YXJ0IGl0IG9yIHdoYXQgaXQncyBjYWxsZWQuIFRoZXJlIGlzIG5vICdjb25zb2xlJyB2ZXJzaW9uIGFzIHN1Y2gsIGJ1dCB5b3UKK2NhbiB1c2Ugb25lIG9mIHRoZSBET1MgdmVyc2lvbnMgaW4gYSBET1MgYm94LgorCitUaGUgV2luMTYgR1VJIGhhcyBhbiBleHRyYSBtZW51IGl0ZW06ICAiV2luZG93L1NlbGVjdCBGb250Ii4gIEl0IGJyaW5ncyB1cCB0aGUKK3N0YW5kYXJkIFdpbmRvd3MgZm9udCBzZWxlY3Rvci4gTm90ZSB0aGF0IGJvbGQgYW5kIGl0YWxpYyBmb250cyBhcmUgbm90CitzdXBwb3J0ZWQgaW4gYW4gYXR0ZW1wdCB0byBtYXhpbWl6ZSBHREkgZHJhd2luZyBzcGVlZC4KKworU2V0dGluZyB0aGUgbWVudSBoZWlnaHQgZG9lc24ndCB3b3JrIGZvciB0aGUgV2luMTYgR1VJLgorCisJCQkJCQkJKndpbjE2LW1heGltaXplZCoKK0lmIHlvdSB3YW50IFZpbSB0byBzdGFydCB3aXRoIGEgbWF4aW1pemVkIHdpbmRvdywgYWRkIHRoaXMgY29tbWFuZCB0byB5b3VyCit2aW1yYyBvciBndmltcmMgZmlsZTogPgorCWF1IEdVSUVudGVyICogc2ltYWx0IH54Cis8CisKK1RoZXJlIGlzIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBndmltLmV4ZSB0aGF0IHJ1bnMgdW5kZXIgdGhlIFdpbjMycyBzdWJzeXN0ZW0KK29mIFdpbmRvd3MgMy4xIG9yIDMuMTEuICBTZWUgfHdpbjMyc3wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVmltIGFzIGRlZmF1bHQgZWRpdG9yCQkJCSp3aW4xNi1kZWZhdWx0LWVkaXRvcioKKworVG8gc2V0IFZpbSBhcyB0aGUgZGVmYXVsdCBlZGl0b3IgZm9yIGEgZmlsZSB0eXBlIHlvdSBjYW4gdXNlIEZpbGUgTWFuYWdlcidzCisiQXNzb2NpYXRlIiBmZWF0dXJlLgorCitXaGVuIHlvdSBvcGVuIGEgZmlsZSBpbiBWaW0gYnkgZG91YmxlIGNsaWNraW5nIGl0LCBWaW0gY2hhbmdlcyB0byB0aGF0CitmaWxlJ3MgZGlyZWN0b3J5LgorCitTZWUgYWxzbyB8bm90ZXBhZHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gVXNpbmcgdGhlIGNsaXBib2FyZAkJCQkJKndpbjE2LWNsaXBib2FyZCoKKworV2luZG93cyBoYXMgYSBjbGlwYm9hcmQsIHdoZXJlIHlvdSBjYW4gY29weSB0ZXh0IHRvLCBhbmQgcGFzdGUgdGV4dCBmcm9tLiAgVmltCitzdXBwb3J0cyB0aGlzIGluIHNldmVyYWwgd2F5cy4KK1RoZSBjbGlwYm9hcmQgd29ya3MgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBXaW4zMiB2ZXJzaW9uOiBzZWUgfGd1aS1jbGlwYm9hcmR8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFNoZWxsIENvbW1hbmRzCQkJCQkqd2luMTYtc2hlbGwqCisKK1ZpbSBzcGF3bnMgYSBET1Mgd2luZG93IGZvciBleHRlcm5hbCBjb21tYW5kcywgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBydW4gYW55CitET1MgY29tbWFuZC4gVGhlIHdpbmRvdyB1c2VzIHRoZSBfZGVmYXVsdC5waWYgc2V0dGluZ3MuCisKKwkJCQkJCQkqd2luMTYtIXN0YXJ0KgorTm9ybWFsbHksIFZpbSB3YWl0cyBmb3IgYSBjb21tYW5kIHRvIGNvbXBsZXRlIGJlZm9yZSBjb250aW51aW5nICh0aGlzIG1ha2VzCitzZW5zZSBmb3IgbW9zdCBzaGVsbCBjb21tYW5kcyB3aGljaCBwcm9kdWNlIG91dHB1dCBmb3IgVmltIHRvIHVzZSkuICBJZiB5b3UKK3dhbnQgVmltIHRvIHN0YXJ0IGEgcHJvZ3JhbSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5LCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nCitzeW50YXg6CisJOiFzdGFydCB7Y29tbWFuZH0KK1RoaXMgbWF5IG9ubHkgd29yayBmb3IgYSBXaW5kb3dzIHByb2dyYW0gdGhvdWdoLgorRG9uJ3QgZm9yZ2V0IHRoYXQgeW91IG11c3QgdGVsbCBXaW5kb3dzIDMuMXggdG8ga2VlcCBleGVjdXRpbmcgYSBET1MgY29tbWFuZAoraW4gdGhlIGJhY2tncm91bmQgd2hpbGUgeW91IHN3aXRjaCBiYWNrIHRvIFZpbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBTcGVjaWFsIGNvbG9ycwkJCQkJKndpbjE2LWNvbG9ycyoKKworT24gV2luMTYsIHRoZSBub3JtYWwgRE9TIGNvbG9ycyBjYW4gYmUgdXNlZC4gIFNlZSB8ZG9zLWNvbG9yc3wuCisKK0FkZGl0aW9uYWxseSB0aGUgc3lzdGVtIGNvbmZpZ3VyZWQgY29sb3JzIGNhbiBhbHNvIGJlIHVzZWQuICBUaGVzZSBhcmUga25vd24KK2J5IHRoZSBuYW1lcyBTeXNfWFhYLCB3aGVyZSBYWFggaXMgdGhlIGFwcHJvcHJpYXRlIHN5c3RlbSBjb2xvciBuYW1lLCBmcm9tIHRoZQorZm9sbG93aW5nIGxpc3QgKHNlZSB0aGUgV2luMzIgZG9jdW1lbnRhdGlvbiBmb3IgZnVsbCBkZXNjcmlwdGlvbnMpLiAgQ2FzZSBpcworaWdub3JlZC4KKworU3lzX0JUTkZhY2UJCVN5c19CVE5TaGFkb3cJCQlTeXNfQWN0aXZlQm9yZGVyCitTeXNfQWN0aXZlQ2FwdGlvbglTeXNfQXBwV29ya3NwYWNlCQlTeXNfQmFja2dyb3VuZAorU3lzX0JUTlRleHQJCVN5c19DYXB0aW9uVGV4dAkJCVN5c19HcmF5VGV4dAorU3lzX0hpZ2hsaWdodAkJU3lzX0hpZ2hsaWdodFRleHQJCVN5c19JbmFjdGl2ZUJvcmRlcgorU3lzX0luYWN0aXZlQ2FwdGlvbglTeXNfSW5hY3RpdmVDYXB0aW9uVGV4dAkJU3lzX01lbnUKK1N5c19NZW51VGV4dAkJU3lzX1Njcm9sbEJhcgkJCVN5c19XaW5kb3cKK1N5c19XaW5kb3dGcmFtZQkJU3lzX1dpbmRvd1RleHQKKworUHJvYmFibHkgdGhlIG1vc3QgdXNlZnVsIHZhbHVlcyBhcmUKKwlTeXNfV2luZG93CSAgICBOb3JtYWwgd2luZG93IGJhY2tncm91bmQKKwlTeXNfV2luZG93VGV4dCAgICAgIE5vcm1hbCB3aW5kb3cgdGV4dAorCVN5c19IaWdobGlnaHQgICAgICAgSGlnaGxpZ2h0ZWQgYmFja2dyb3VuZAorCVN5c19IaWdobGlnaHRUZXh0ICAgSGlnaGxpZ2h0ZWQgdGV4dAorCitUaGVzZSBleHRyYSBjb2xvcnMgYXJlIGFsc28gYXZhaWxhYmxlOgorR3JheSwgR3JleSwgTGlnaHRZZWxsb3csIFNlYUdyZWVuLCBPcmFuZ2UsIFB1cnBsZSwgU2xhdGVCbHVlLCBWaW9sZXQsCisKKworU2VlIGFsc28gfHJnYi50eHR8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkJCSp3aW4xNi1kaWFsb2dzKgorNi4gV2luZG93cyBkaWFsb2dzICYgYnJvd3NlcnMKKworVGhlIFdpbjE2IEdVSSBjYW4gdXNlIGZhbWlsaWFyIFdpbmRvd3MgY29tcG9uZW50cyBmb3Igc29tZSBvcGVyYXRpb25zLCBhcyB3ZWxsCithcyB0aGUgdHJhZGl0aW9uYWwgaW50ZXJmYWNlIHNoYXJlZCB3aXRoIHRoZSBjb25zb2xlIHZlcnNpb24uCisKKworNi4xIERpYWxvZ3MKKworVGhlIGRpYWxvZ3MgZGlzcGxheWVkIGJ5IHRoZSAiY29uZmlybSIgZmFtaWx5IChpLmUuIHRoZSAnY29uZmlybScgb3B0aW9uLAorfDpjb25maXJtfCBjb21tYW5kIGFuZCB8Y29uZmlybSgpfCBmdW5jdGlvbiBhcmUgR1VJLWJhc2VkIHJhdGhlciB0aGFuIHRoZQorY29uc29sZS1iYXNlZCBvbmVzIHVzZWQgYnkgb3RoZXIgdmVyc2lvbnMuICBUaGVyZSBpcyBubyBvcHRpb24gdG8gY2hhbmdlIHRoaXMuCisKKworNi4yIEZpbGUgQnJvd3NlcnMKKworV2hlbiBwcmVwZW5kaW5nICI6YnJvd3NlIiBiZWZvcmUgZmlsZSBlZGl0aW5nIGNvbW1hbmRzLCBhIGZpbGUgcmVxdWVzdGVyIGlzCit1c2VkIHRvIGFsbG93IHlvdSB0byBzZWxlY3QgYW4gZXhpc3RpbmcgZmlsZS4gIFNlZSB8OmJyb3dzZXwuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBWYXJpb3VzCQkJCQkJKndpbjE2LXZhcmlvdXMqCisKKwkJCQkJCQkqd2luMTYtcHJpbnRpbmcqCitUaGUgIkZpbGUvUHJpbnQiIG1lbnUgdXNlcyBOb3RlcGFkIHRvIHByaW50IHRoZSBjdXJyZW50IGJ1ZmZlci4gIFRoaXMgaXMgYSBiaXQKK2NsdW1zeSwgYnV0IGl0J3MgcG9ydGFibGUuICBJZiB5b3Ugd2FudCBzb21ldGhpbmcgZWxzZSwgeW91IGNhbiBkZWZpbmUgeW91cgorb3duIHByaW50IGNvbW1hbmQuICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGxvb2sgZm9yIHRoZSAxNi1iaXQgdmVyc2lvbiBvZgorUHJpbnRGaWxlLiAgU2VlICRWSU1SVU5USU1FL21lbnUudmltIGZvciBob3cgaXQgd29ya3MgYnkgZGVmYXVsdC4KKworVXNpbmcgdGhpcyBzaG91bGQgYWxzbyB3b3JrOiA+CisJOncgPj5wcm4KKworVmltIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHN0YW5kYXJkIE1TIFdpbmRvd3MgZmVhdHVyZXMuIFNvbWUgb2YgdGhlc2UgYXJlCitkZXRhaWxlZCBlbHNld2hlcmU6IHNlZSB8J21vdXNlJ3wsIHx3aW4zMi1oaWRkZW4tbWVudXN8LgorQWxzbyBzZWUgfDpzaW1hbHR8CisKKwkJCQkJCQkqd2luMTYtZHJhZy1uLWRyb3AqCitZb3UgY2FuIGRyYWcgYW5kIGRyb3Agb25lIG9yIG1vcmUgZmlsZXMgaW50byB0aGUgdmltIHdpbmRvdywgd2hlcmUgdGhleSB3aWxsCitiZSBvcGVuZWQgYXMgbm9ybWFsLiAgSWYgeW91IGhvbGQgZG93biBTaGlmdCB3aGlsZSBkb2luZyB0aGlzLCBWaW0gY2hhbmdlcyB0bwordGhlIChmaXJzdCkgZHJvcHBlZCBmaWxlJ3MgZGlyZWN0b3J5LiAgSWYgeW91IGhvbGQgQ3RybCwgVmltIHdpbGwgYWx3YXlzIHNwbGl0CithIG5ldyB3aW5kb3cgZm9yIHRoZSBmaWxlLiAgT3RoZXJ3aXNlIGl0J3Mgb25seSBkb25lIGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBoYXMKK2JlZW4gY2hhbmdlZC4KK1lvdSBjYW4gYWxzbyBkcm9wIGEgZGlyZWN0b3J5J3MgaWNvbiwgYnV0IHJhdGhlciB0aGFuIG9wZW4gYWxsIGZpbGVzIGluIHRoZQorZGlyZWN0b3J5ICh3aGljaCB3b3VsZG4ndCB1c3VhbGx5IGJlIHdoYXQgeW91IHdhbnQpIFZpbSBpbnN0ZWFkIGNoYW5nZXMgdG8KK3RoYXQgZGlyZWN0b3J5IGFuZCBiZWdpbnMgYSBuZXcgZmlsZS4KK0lmIFZpbSBoYXBwZW5zIHRvIGJlIGVkaXRpbmcgYSBjb21tYW5kIGxpbmUsIHRoZSBuYW1lcyBvZiB0aGUgZHJvcHBlZCBmaWxlcworYW5kIGRpcmVjdG9yaWVzIHdpbGwgYmUgaW5zZXJ0ZWQgYXQgdGhlIGN1cnNvci4gIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgdGhlc2UKK25hbWVzIHdpdGggYW55IEV4IGNvbW1hbmQuCisKKwkJCQkJCQkqd2luMTYtdHJ1ZXR5cGUqCitJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgYSByYXN0ZXIgZm9udCBhbmQgbm90IGEgVHJ1ZVR5cGUKK2ZpeGVkLXBpdGNoIGZvbnQuIGUuZy4gVXNlIENvdXJpZXIsIG5vdCBDb3VyaWVyIE5ldy4gVGhpcyBpcyBub3QganVzdAordG8gdXNlIGxlc3MgcmVzb3VyY2VzIGJ1dCBiZWNhdXNlIHRoZXJlIGFyZSBzdWJ0bGUgYnVncyBpbiB0aGUKK2hhbmRsaW5nIG9mIGZpeGVkLXBpdGNoIFRydWVUeXBlIGluIFdpbjMuMXguIEluIHBhcnRpY3VsYXIsIHdoZW4geW91IG1vdmUKK2EgYmxvY2sgY3Vyc29yIG92ZXIgYSBwaXBlIGNoYXJhY3RlciAnfCcsIHRoZSBjdXJzb3IgaXMgZHJhd24gaW4gdGhlIHdyb25nCitzaXplIGFuZCBiaXRzIGdldCBsZWZ0IGJlaGluZC4gVGhpcyBpcyBhIGJ1ZyBpbiB0aGUgV2luMy4xeCBHREksIGl0IGRvZXNuJ3QKK2hhcHBlbiBpZiB5b3UgcnVuIHRoZSBleGUgdW5kZXIgOTUvTlQuCisKKyB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2d1aV93MzIudHh0IGIvcnVudGltZS9kb2MvZ3VpX3czMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0YWEzNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2d1aV93MzIudHh0CkBAIC0wLDAgKzEsNDcyIEBACisqZ3VpX3czMi50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDAzCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworVmltJ3MgV2luMzIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlCQkJKmd1aS13MzIqICp3aW4zMi1ndWkqCisKKzEuIFN0YXJ0aW5nIHRoZSBHVUkJCXxndWktdzMyLXN0YXJ0fAorMi4gVmltIGFzIGRlZmF1bHQgZWRpdG9yCXx2aW0tZGVmYXVsdC1lZGl0b3J8CiszLiBVc2luZyB0aGUgY2xpcGJvYXJkCQl8Z3VpLWNsaXBib2FyZHwKKzQuIFNoZWxsIENvbW1hbmRzCQl8Z3VpLXNoZWxsLXdpbjMyfAorNS4gU3BlY2lhbCBjb2xvcnMJCXx3aW4zMi1jb2xvcnN8Cis2LiBXaW5kb3dzIGRpYWxvZ3MgJiBicm93c2Vycwl8Z3VpLXczMi1kaWFsb2dzfAorNy4gQ29tbWFuZCBsaW5lIGFyZ3VtZW50cwl8Z3VpLXczMi1jbWRhcmdzfAorOC4gVmFyaW91cwkJCXxndWktdzMyLXZhcmlvdXN8CisKK090aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb246Cit8Z3VpLnR4dHwJRm9yIGdlbmVyaWMgaXRlbXMgb2YgdGhlIEdVSS4KK3xvc193aW4zMi50eHR8ICBGb3IgV2luMzIgc3BlY2lmaWMgaXRlbXMuCisKK3tWaSBkb2VzIG5vdCBoYXZlIGEgV2luZG93cyBHVUl9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gU3RhcnRpbmcgdGhlIEdVSQkJCQkJKmd1aS13MzItc3RhcnQqCisKK1RoZSBXaW4zMiBHVUkgdmVyc2lvbiBvZiBWaW0gd2lsbCBhbHdheXMgc3RhcnQgdGhlIEdVSSwgbm8gbWF0dGVyIGhvdyB5b3UKK3N0YXJ0IGl0IG9yIHdoYXQgaXQncyBjYWxsZWQuCisKK1RoZSBHVUkgd2lsbCBhbHdheXMgcnVuIGluIHRoZSBXaW5kb3dzIHN1YnN5c3RlbS4gIE1vc3RseSBzaGVsbHMgYXV0b21hdGljYWxseQorcmV0dXJuIHdpdGggYSBjb21tYW5kIHByb21wdCBhZnRlciBzdGFydGluZyBndmltLiAgSWYgbm90LCB5b3Ugc2hvdWxkIHVzZSB0aGUKKyJzdGFydCIgY29tbWFuZDogPgorCXN0YXJ0IGd2aW0gW29wdGlvbnNdIGZpbGUgLi4KKworTm90ZTogQWxsIGZvbnRzIChib2xkLCBpdGFsaWMpIG11c3QgYmUgb2YgdGhlIHNhbWUgc2l6ZSEhISAgSWYgeW91IGRvbid0IGRvCit0aGlzLCB0ZXh0IHdpbGwgZGlzYXBwZWFyIG9yIG1lc3MgdXAgdGhlIGRpc3BsYXkuICBWaW0gZG9lcyBub3QgY2hlY2sgdGhlIGZvbnQKK3NpemVzLiAgSXQncyB0aGUgc2l6ZSBpbiBzY3JlZW4gcGl4ZWxzIHRoYXQgbXVzdCBiZSB0aGUgc2FtZS4gIE5vdGUgdGhhdCBzb21lCitmb250cyB0aGF0IGhhdmUgdGhlIHNhbWUgcG9pbnQgc2l6ZSBkb24ndCBoYXZlIHRoZSBzYW1lIHBpeGVsIHNpemUhCitBZGRpdGlvbmFsbHksIHRoZSBwb3NpdGlvbmluZyBvZiB0aGUgZm9udHMgbXVzdCBiZSB0aGUgc2FtZSAoYXNjZW50IGFuZAorZGVzY2VudCkuCisKK1RoZSBXaW4zMiBHVUkgaGFzIGFuIGV4dHJhIG1lbnUgaXRlbTogICJFZGl0L1NlbGVjdCBGb250Ii4gIEl0IGJyaW5ncyB1cCB0aGUKK3N0YW5kYXJkIFdpbmRvd3MgZm9udCBzZWxlY3Rvci4KKworU2V0dGluZyB0aGUgbWVudSBoZWlnaHQgZG9lc24ndCB3b3JrIGZvciB0aGUgV2luMzIgR1VJLgorCisJCQkJCQkJKmd1aS13aW4zMi1tYXhpbWl6ZWQqCitJZiB5b3Ugd2FudCBWaW0gdG8gc3RhcnQgd2l0aCBhIG1heGltaXplZCB3aW5kb3csIGFkZCB0aGlzIGNvbW1hbmQgdG8geW91cgordmltcmMgb3IgZ3ZpbXJjIGZpbGU6ID4KKwlhdSBHVUlFbnRlciAqIHNpbWFsdCB+eAorPAorCQkJCQkJCQkqZ3VpLXczMnMqCitUaGVyZSBpcyBhIHNwZWNpZmljIHZlcnNpb24gb2YgZ3ZpbS5leGUgdGhhdCBydW5zIHVuZGVyIHRoZSBXaW4zMnMgc3Vic3lzdGVtCitvZiBXaW5kb3dzIDMuMSBvciAzLjExLiAgU2VlIHx3aW4zMnN8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFZpbSBhcyBkZWZhdWx0IGVkaXRvcgkJCQkqdmltLWRlZmF1bHQtZWRpdG9yKgorCitUbyBzZXQgVmltIGFzIHRoZSBkZWZhdWx0IGVkaXRvciBmb3IgYSBmaWxlIHR5cGU6CisxLiBTdGFydCBhIFdpbmRvd3MgRXhwbG9yZXIKKzIuIENob3NlIFZpZXcvT3B0aW9ucyAtPiBGaWxlIFR5cGVzCiszLiBTZWxlY3QgdGhlIHBhdGggdG8gZ3ZpbSBmb3IgZXZlcnkgZmlsZSB0eXBlIHRoYXQgeW91IHdhbnQgdG8gdXNlIGl0IGZvci4KKyAgICh5b3UgY2FuIGFsc28gdXNlIHRocmVlIHNwYWNlcyBpbiB0aGUgZmlsZSB0eXBlIGZpZWxkLCBmb3IgZmlsZXMgd2l0aG91dCBhbgorICAgZXh0ZW5zaW9uKS4KKyAgIEluIHRoZSAib3BlbiIgYWN0aW9uLCB1c2U6ID4KKwlndmltICIlMSIKKzwgIFRoZSBxdW90ZXMgYXJlIHJlcXVpcmVkIGZvciB1c2luZyBmaWxlIG5hbWVzIHdpdGggZW1iZWRkZWQgc3BhY2VzLgorICAgWW91IGNhbiBhbHNvIHVzZSB0aGlzOiA+CisJZ3ZpbSAiJUwiCis8ICBUaGlzIHNob3VsZCBhdm9pZCBzaG9ydCAoOC4zIGNoYXJhY3RlcikgZmlsZSBuYW1lcyBpbiBzb21lIHNpdHVhdGlvbnMuICBCdXQKKyAgIEknbSBub3Qgc3VyZSBpZiB0aGlzIHdvcmtzIGV2ZXJ5d2hlcmUuCisKK1doZW4geW91IG9wZW4gYSBmaWxlIGluIFZpbSBieSBkb3VibGUgY2xpY2tpbmcgaXQsIFZpbSBjaGFuZ2VzIHRvIHRoYXQKK2ZpbGUncyBkaXJlY3RvcnkuCisKK0lmIHlvdSB3YW50IFZpbSB0byBzdGFydCBmdWxsLXNjcmVlbiwgdXNlIHRoaXMgZm9yIHRoZSBPcGVuIGFjdGlvbjogPgorCWd2aW0gLWMgInNpbWFsdCB+eCIgIiUxIgorCitBbm90aGVyIG1ldGhvZCwgd2hpY2ggYWxzbyB3b3JrcyB3aGVuIHlvdSBwdXQgVmltIGluIGFub3RoZXIgZGlyZWN0b3J5IChlLmcuLAord2hlbiB5b3UgaGF2ZSBnb3QgYSBuZXcgdmVyc2lvbik6CisxLiBzZWxlY3QgYSBmaWxlIHlvdSB3YW50IHRvIHVzZSBWaW0gd2l0aAorMi4gPFNoaWZ0LUYxMD4KKzMuIHNlbGVjdCAiT3BlbiBXaXRoLi4uIiBtZW51IGVudHJ5Cis0LiBjbGljayAiT3RoZXIuLi4iCis1LiBicm93c2UgdG8gdGhlIChuZXcpIGxvY2F0aW9uIG9mIFZpbSBhbmQgY2xpY2sgIk9wZW4iCis2LiBtYWtlICJBbHdheXMgVXNlIHRoaXMgcHJvZ3JhbS4uLiIgY2hlY2tlZAorNy4gPE9LPgorCisJCQkJCQkqc2VuZC10by1tZW51KiAqc2VuZHRvKgorWW91IGNhbiBhbHNvIGluc3RhbGwgVmltIGluIHRoZSAiU2VuZCBUbyIgbWVudToKKzEuIFN0YXJ0IGEgV2luZG93cyBFeHBsb3JlcgorMi4gTmF2aWdhdGUgdG8geW91ciBzZW5kdG8gZGlyZWN0b3J5OgorICAgV2luZG93cyA5NTogJXdpbmRpciVcc2VuZHRvIChlLmcuICJjOlx3aW5kb3dzXHNlbmR0byIpCisgICBXaW5kb3dzIE5UOiAld2luZGlyJVxwcm9maWxlc1wldXNlciVcc2VuZHRvIChlLmcuCisJICAgICAgICJjOlx3aW5udFxwcm9maWxlc1xtYXR0aGFcc2VuZHRvIikuCiszLiBSaWdodC1jbGljayBpbiB0aGUgZmlsZSBwYW5lIGFuZCBzZWxlY3QgTmV3LT5TaG9ydGN1dAorNC4gRm9sbG93IHRoZSBzaG9ydGN1dCB3aXphcmQsIHVzaW5nIHRoZSBmdWxsIHBhdGggdG8gVklNL0dWSU0uCisKK1doZW4geW91ICdzZW5kIGEgZmlsZSB0byBWaW0nLCBWaW0gY2hhbmdlcyB0byB0aGF0IGZpbGUncyBkaXJlY3RvcnkuICBOb3RlLAoraG93ZXZlciwgdGhhdCBhbnkgbG9uZyBkaXJlY3RvcnkgbmFtZXMgd2lsbCBhcHBlYXIgaW4gdGhlaXIgc2hvcnQgKE1TLURPUykKK2Zvcm0uICBUaGlzIGlzIGEgbGltaXRhdGlvbiBvZiB0aGUgV2luZG93cyAiU2VuZCBUbyIgbWVjaGFuaXNtLgorCisJCQkJCQkqbm90ZXBhZCoKK1lvdSBjb3VsZCByZXBsYWNlIG5vdGVwYWQuZXhlIHdpdGggZ3ZpbS5leGUsIGJ1dCB0aGF0IGhhcyBhIGZldyBzaWRlIGVmZmVjdHMuCitTb21lIHByb2dyYW1zIHJlbHkgb24gbm90ZXBhZCBhcmd1bWVudHMsIHdoaWNoIGFyZSBub3QgcmVjb2duaXplZCBieSBWaW0uICBGb3IKK2V4YW1wbGUgIm5vdGVwYWQgLXAiIGlzIHVzZWQgYnkgc29tZSBhcHBsaWNhdGlvbnMgdG8gcHJpbnQgYSBmaWxlLiAgSXQncworYmV0dGVyIHRvIGxlYXZlIG5vdGVwYWQgd2hlcmUgaXQgaXMgYW5kIHVzZSBhbm90aGVyIHdheSB0byBzdGFydCBWaW0uCisKKwkJCQkJCSp3aW4zMi1wb3B1cC1tZW51KgorQSBtb3JlIGRyYXN0aWMgYXBwcm9hY2ggaXMgdG8gaW5zdGFsbCBhbiAiRWRpdCB3aXRoIFZpbSIgZW50cnkgaW4gdGhlIHBvcHVwCittZW51IGZvciB0aGUgcmlnaHQgbW91c2UgYnV0dG9uLiAgV2l0aCB0aGlzIHlvdSBjYW4gZWRpdCBhbnkgZmlsZSB3aXRoIFZpbS4KKworVGhpcyBjYW4gY28tZXhpc3Qgd2l0aCB0aGUgZmlsZSBhc3NvY2lhdGlvbnMgbWVudGlvbmVkIGFib3ZlLiAgVGhlIGRpZmZlcmVuY2UKK2lzIHRoYXQgdGhlIGZpbGUgYXNzb2NpYXRpb25zIHdpbGwgbWFrZSBzdGFydGluZyBWaW0gdGhlIGRlZmF1bHQgYWN0aW9uLiAgV2l0aAordGhlICJFZGl0IHdpdGggVmltIiBtZW51IGVudHJ5IHlvdSBjYW4ga2VlcCB0aGUgZXhpc3RpbmcgZmlsZSBhc3NvY2lhdGlvbiBmb3IKK2RvdWJsZSBjbGlja2luZyBvbiB0aGUgZmlsZSwgYW5kIGVkaXQgdGhlIGZpbGUgd2l0aCBWaW0gd2hlbiB5b3Ugd2FudC4gIEZvcgorZXhhbXBsZSwgeW91IGNhbiBhc3NvY2lhdGUgIioubWFrIiB3aXRoIHlvdXIgbWFrZSBwcm9ncmFtLiAgWW91IGNhbiBleGVjdXRlCit0aGUgbWFrZWZpbGUgYnkgZG91YmxlIGNsaWNraW5nIGl0IGFuZCB1c2UgdGhlICJFZGl0IHdpdGggVmltIiBlbnRyeSB0byBlZGl0Cit0aGUgbWFrZWZpbGUuCisKK1lvdSBjYW4gc2VsZWN0IGFueSBmaWxlcyBhbmQgcmlnaHQtY2xpY2sgdG8gc2VlIGEgbWVudSBvcHRpb24gY2FsbGVkICJFZGl0Cit3aXRoIGd2aW0iLiAgQ2hvc2luZyB0aGlzIG1lbnUgb3B0aW9uIHdpbGwgaW52b2tlIGd2aW0gd2l0aCB0aGUgZmlsZSB5b3UgaGF2ZQorc2VsZWN0ZWQuICBJZiB5b3Ugc2VsZWN0IG11bHRpcGxlIGZpbGVzLCB5b3Ugd2lsbCBmaW5kIHR3byBndmltLXJlbGF0ZWQgbWVudQorb3B0aW9uczoKKyJFZGl0IHdpdGggbXVsdGlwbGUgZ3ZpbXMiICAtLSBvbmUgZ3ZpbSBmb3IgZWFjaCBmaWxlIGluIHRoZSBzZWxlY3Rpb24KKyJFZGl0IHdpdGggc2luZ2xlIGd2aW0iICAgICAtLSBvbmUgZ3ZpbSBmb3IgYWxsIHRoZSBmaWxlcyBpbiB0aGUgc2VsZWN0aW9uCitBbmQgaWYgdGhlcmUgYWxyZWFkeSBpcyBhIGd2aW0gcnVubmluZzoKKyJFZGl0IHdpdGggZXhpc3RpbmcgZ3ZpbSIgICAtLSBlZGl0IHRoZSBmaWxlIHdpdGggdGhlIHJ1bm5pbmcgZ3ZpbQorCisJCQkJCQkqaW5zdGFsbC1yZWdpc3RyeSoKK1lvdSBjYW4gYWRkIHRoZSAiRWRpdCB3aXRoIFZpbSIgbWVudSBlbnRyeSBpbiBhbiBlYXN5IHdheSBieSB1c2luZyB0aGUKKyJpbnN0YWxsLmV4ZSIgcHJvZ3JhbS4gIEl0IHdpbGwgYWRkIHNldmVyYWwgcmVnaXN0cnkgZW50cmllcyBmb3IgeW91LgorCitZb3UgY2FuIGFsc28gZG8gdGhpcyBieSBoYW5kLiAgVGhpcyBpcyBjb21wbGljYXRlZCEgIFVzZSB0aGUgaW5zdGFsbC5leGUgaWYKK3lvdSBjYW4uCisKKzEuIFN0YXJ0IHRoZSByZWdpc3RyeSBlZGl0b3Igd2l0aCAicmVnZWRpdCIuCisyLiBBZGQgdGhlc2Uga2V5czoKKyAgIGtleQkJdmFsdWUgbmFtZQkJICAgIHZhbHVlIH4KKyAgIEhLRVlfQ0xBU1NFU19ST09UXENMU0lEXHs1MUVFRTI0Mi1BRDg3LTExZDMtOUMxRS0wMDkwMjc4QkJEOTl9CisJCXtkZWZhdWx0fQkJICAgIFZpbSBTaGVsbCBFeHRlbnNpb24KKyAgIEhLRVlfQ0xBU1NFU19ST09UXENMU0lEXHs1MUVFRTI0Mi1BRDg3LTExZDMtOUMxRS0wMDkwMjc4QkJEOTl9XEluUHJvY1NlcnZlcjMyCisJCXtkZWZhdWx0fQkJICAgIHtwYXRofVxndmltZXh0LmRsbAorCQlUaHJlYWRpbmdNb2RlbAkJICAgIEFwYXJ0bWVudAorICAgSEtFWV9DTEFTU0VTX1JPT1RcKlxzaGVsbGV4XENvbnRleHRNZW51SGFuZGxlcnNcZ3ZpbQorCQl7ZGVmYXVsdH0JCSAgICB7NTFFRUUyNDItQUQ4Ny0xMWQzLTlDMUUtMDA5MDI3OEJCRDk5fQorICAgSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFNoZWxsIEV4dGVuc2lvbnNcQXBwcm92ZWQKKwkJezUxRUVFMjQyLUFEODctMTFkMy05QzFFLTAwOTAyNzhCQkQ5OX0KKwkJCQkJICAgIFZpbSBTaGVsbCBFeHRlbnNpb24KKyAgIEhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxWaW1cR3ZpbQorCQlwYXRoCQkJICAgIHtwYXRofVxndmltLmV4ZQorICAgSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFx2aW0gNS42CisJCURpc3BsYXlOYW1lCQkgICAgVmltIDUuNjogRWRpdCB3aXRoIFZpbSBwb3B1cCBtZW51IGVudHJ5CisJCVVuaW5zdGFsbFN0cmluZwkJICAgIHtwYXRofVx1bmluc3RhbC5leGUKKworICAgUmVwbGFjZSB7cGF0aH0gd2l0aCB0aGUgcGF0aCB0aGF0IGxlYWRzIHRvIHRoZSBleGVjdXRhYmxlLgorICAgRG9uJ3QgdHlwZSB7ZGVmYXVsdH0sIHRoaXMgaXMgdGhlIHZhbHVlIGZvciB0aGUga2V5IGl0c2VsZi4KKworVG8gcmVtb3ZlICJFZGl0IHdpdGggVmltIiBmcm9tIHRoZSBwb3B1cCBtZW51LCBqdXN0IHJlbW92ZSB0aGUgcmVnaXN0cnkKK2VudHJpZXMgbWVudGlvbmVkIGFib3ZlLiAgVGhlICJ1bmluc3RhbC5leGUiIHByb2dyYW0gY2FuIGRvIHRoaXMgZm9yIHlvdS4gIFlvdQorY2FuIGFsc28gdXNlIHRoZSBlbnRyeSBpbiB0aGUgV2luZG93cyBzdGFuZGFyZCAiQWRkL1JlbW92ZSBQcm9ncmFtcyIgbGlzdC4KKworSWYgeW91IG5vdGljZSB0aGF0IHRoaXMgZW50cnkgb3ZlcnJ1bGVzIG90aGVyIGZpbGUgdHlwZSBhc3NvY2lhdGlvbnMsIHNldAordGhvc2UgYXNzb2NpYXRpb25zIGFnYWluIGJ5IGhhbmQgKHVzaW5nIFdpbmRvd3MgRXhwbG9yZXIsIHNlZSBhYm92ZSkuICBUaGlzCitvbmx5IHNlZW1zIHRvIGhhcHBlbiBvbiBzb21lIFdpbmRvd3MgTlQgdmVyc2lvbnMgKFdpbmRvd3MgYnVnPykuICBQcm9jZWR1cmU6CisxLiBGaW5kIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHR5cGUuICBUaGlzIGNhbiBiZSBkb25lIGJ5IHN0YXJ0aW5nIHRoZSByZWdpc3RyeQorICAgZWRpdG9yLCBhbmQgc2VhcmNoaW5nIGZvciB0aGUgZXh0ZW5zaW9uIGluIFxcSEtFWV9DTEFTU0VTX1JPT1QKKzIuIEluIGEgV2luZG93cyBFeHBsb3JlciwgdXNlIFZpZXcvT3B0aW9ucy9GaWxlIFR5cGVzLiAgU2VhcmNoIGZvciB0aGUgZmlsZQorICAgdHlwZSBpbiB0aGUgbGlzdCBhbmQgY2xpY2sgIkVkaXQiLiAgSW4gdGhlIGFjdGlvbnMgbGlzdCwgeW91IGNhbiBzZWxlY3Qgb24KKyAgIHRvIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgKG5vcm1hbGx5IHRoZSAib3BlbiIgYWN0aW9uKSBhbmQgY2xpY2sgb24gdGhlCisgICAiU2V0IERlZmF1bHQiIGJ1dHRvbi4KKworCitWaW0gaW4gdGhlICJPcGVuIFdpdGguLi4iIGNvbnRleHQgbWVudQkJCSp3aW4zMi1vcGVuLXdpdGgtbWVudSoKKworSWYgeW91IHVzZSB0aGUgVmltIGluc3RhbGwgcHJvZ3JhbSB5b3UgaGF2ZSB0aGUgY2hvaWNlIHRvIGFkZCBWaW0gdG8gdGhlICJPcGVuCitXaXRoLi4uIiBtZW51LiAgVGhpcyBtZWFucyB5b3UgY2FuIHVzZSBWaW0gdG8gZWRpdCBtYW55IGZpbGVzLiAgTm90IGV2ZXJ5IGZpbGUKKyhmb3IgdW5jbGVhciByZWFzb25zLi4uKSwgdGh1cyB0aGUgIkVkaXQgd2l0aCBWaW0iIG1lbnUgZW50cnkgaXMgc3RpbGwgdXNlZnVsLgorCitPbmUgcmVhc29uIHRvIGFkZCB0aGlzIGlzIHRvIGJlIGFibGUgdG8gZWRpdCBIVE1MIGZpbGVzIGRpcmVjdGx5IGZyb20gSW50ZXJuZXQKK0V4cGxvcmVyLiAgVG8gZW5hYmxlIHRoaXMgdXNlIHRoZSAiVG9vbHMiIG1lbnUsICJJbnRlcm5ldCBPcHRpb25zLi4uIiBlbnRyeS4KK0luIHRoZSBkaWFsb2cgc2VsZWN0IHRoZSAiUHJvZ3JhbXMiIHRhYiBhbmQgc2VsZWN0IFZpbSBpbiB0aGUgIkhUTUwgZWRpdG9yIgorY2hvaWNlLiAgSWYgaXQncyBub3QgdGhlcmUgdGhhbiBpbnN0YWxsaW5nIGRpZG4ndCB3b3JrIHByb3Blcmx5LgorCitEb2luZyB0aGlzIG1hbnVhbGx5IGNhbiBiZSBkb25lIHdpdGggdGhpcyBzY3JpcHQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JFR0VESVQ0CisKK1tIS0VZX0NMQVNTRVNfUk9PVFxBcHBsaWNhdGlvbnNcZ3ZpbS5leGVdCisKK1tIS0VZX0NMQVNTRVNfUk9PVFxBcHBsaWNhdGlvbnNcZ3ZpbS5leGVcc2hlbGxdCisKK1tIS0VZX0NMQVNTRVNfUk9PVFxBcHBsaWNhdGlvbnNcZ3ZpbS5leGVcc2hlbGxcZWRpdF0KKworW0hLRVlfQ0xBU1NFU19ST09UXEFwcGxpY2F0aW9uc1xndmltLmV4ZVxzaGVsbFxlZGl0XGNvbW1hbmRdCitAPSJjOlxcdmltXFx2aW02MlxcZ3ZpbS5leGUgXCIlMVwiIgorCitbSEtFWV9DTEFTU0VTX1JPT1RcLmh0bVxPcGVuV2l0aExpc3RcZ3ZpbS5leGVdCisKK1tIS0VZX0NMQVNTRVNfUk9PVFwqXE9wZW5XaXRoTGlzdFxndmltLmV4ZV0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2UgdGhlICJjOlxcdmltXFx2aW02MiIgYml0IHRvIHdoZXJlIGd2aW0uZXhlIGlzIGFjdHVhbGx5IGxvY2F0ZWQuCisKK1RvIHVuaW5zdGFsbCB0aGlzIHJ1biB0aGUgVmltIHVuaW5zdGFsbCBwcm9ncmFtIG9yIG1hbnVhbGx5IGRlbGV0ZSB0aGUKK3JlZ2lzdHJ5IGVudHJpZXMgd2l0aCAicmVnZWRpdCIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gVXNpbmcgdGhlIGNsaXBib2FyZAkJCQkJKmd1aS1jbGlwYm9hcmQqCisKK1dpbmRvd3MgaGFzIGEgY2xpcGJvYXJkLCB3aGVyZSB5b3UgY2FuIGNvcHkgdGV4dCB0bywgYW5kIHBhc3RlIHRleHQgZnJvbS4gIFZpbQorc3VwcG9ydHMgdGhpcyBpbiBzZXZlcmFsIHdheXMuICBGb3Igb3RoZXIgc3lzdGVtcyBzZWUgfGd1aS1zZWxlY3Rpb25zfC4KKworVGhlICIqIHJlZ2lzdGVyIHJlZmxlY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgY2xpcGJvYXJkLiAgfHF1b3Rlc3RhcnwKKworV2hlbiB0aGUgInVubmFtZWQiIHN0cmluZyBpcyBpbmNsdWRlZCBpbiB0aGUgJ2NsaXBib2FyZCcgb3B0aW9uLCB0aGUgdW5uYW1lZAorcmVnaXN0ZXIgaXMgdGhlIHNhbWUuICBUaHVzIHlvdSBjYW4geWFuayB0byBhbmQgcGFzdGUgZnJvbSB0aGUgY2xpcGJvYXJkCit3aXRob3V0IHByZXBlbmRpbmcgIiogdG8gY29tbWFuZHMuCisKK1RoZSAnYScgZmxhZyBpbiAnZ3Vpb3B0aW9ucycgaXMgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQuICBUaGlzIG1lYW5zIHRoYXQgdGV4dAoraXMgb25seSBwdXQgb24gdGhlIGNsaXBib2FyZCB3aGVuIGFuIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgb24gaXQuICBKdXN0CitWaXN1YWxseSBzZWxlY3RpbmcgdGV4dCBkb2Vzbid0IHB1dCBpdCBvbiB0aGUgY2xpcGJvYXJkLiAgV2hlbiB0aGUgJ2EnIGZsYWcgaXMKK2luY2x1ZGVkLCB0aGUgdGV4dCBpcyBjb3BpZWQgdG8gdGhlIGNsaXBib2FyZCBldmVuIHdoZW4gaXQgaXMgbm90IG9wZXJhdGVkCit1cG9uLgorCisJCQkJCQkJKm1zd2luLnZpbSoKK1RvIHVzZSB0aGUgc3RhbmRhcmQgTVMtV2luZG93cyB3YXkgb2YgQ1RSTC1YLCBDVFJMLUMgYW5kIENUUkwtViwgdXNlIHRoZQorJFZJTVJVTlRJTUUvbXN3aW4udmltIHNjcmlwdC4gIFlvdSBjb3VsZCBhZGQgdGhpcyBsaW5lIHRvIHlvdXIgX3ZpbXJjIGZpbGU6ID4KKwlzb3VyY2UgJFZJTVJVTlRJTUUvbXN3aW4udmltCisKK1NpbmNlIENUUkwtQyBpcyB1c2VkIHRvIGNvcHkgdGhlIHRleHQgdG8gdGhlIGNsaXBib2FyZCwgaXQgY2FuJ3QgYmUgdXNlZCB0bworY2FuY2VsIGFuIG9wZXJhdGlvbi4gIFVzZSBDVFJMLUJyZWFrIGZvciB0aGF0LgorCisJCQkJCQkJKkNUUkwtVi1hbHRlcm5hdGl2ZSoKK1NpbmNlIENUUkwtViBpcyB1c2VkIHRvIHBhc3RlLCB5b3UgY2FuJ3QgdXNlIGl0IHRvIHN0YXJ0IGEgYmxvY2t3aXNlIFZpc3VhbAorc2VsZWN0aW9uLiAgWW91IGNhbiB1c2UgQ1RSTC1RIGluc3RlYWQuICBZb3UgY2FuIGFsc28gdXNlIENUUkwtUSBpbiBJbnNlcnQKK21vZGUgYW5kIENvbW1hbmQtbGluZSBtb2RlIHRvIGdldCB0aGUgb2xkIG1lYW5pbmcgb2YgQ1RSTC1WLiAgQnV0IENUUkwtUQorZG9lc24ndCB3b3JrIGZvciB0ZXJtaW5hbHMgd2hlbiBpdCdzIHVzZWQgZm9yIGNvbnRyb2wgZmxvdy4KKworTk9URTogVGhlIGNsaXBib2FyZCBzdXBwb3J0IHN0aWxsIGhhcyBhIG51bWJlciBvZiBidWdzLiAgU2VlIHx0b2RvfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBTaGVsbCBDb21tYW5kcwkJCQkJKmd1aS1zaGVsbC13aW4zMioKKworVmltIHVzZXMgYW5vdGhlciB3aW5kb3cgZm9yIGV4dGVybmFsIGNvbW1hbmRzLCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHJ1biBhbnkKK2NvbW1hbmQuICBUaGUgZXh0ZXJuYWwgY29tbWFuZCBnZXRzIGl0cyBvd24gZW52aXJvbm1lbnQgZm9yIHJ1bm5pbmcsIGp1c3QgbGlrZQoraXQgd2FzIHN0YXJ0ZWQgZnJvbSBhIERPUyBwcm9tcHQuCisKKwkJCQkJCQkqd2luMzItdmltcnVuKgorRXhlY3V0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQgaXMgZG9uZSBpbmRpcmVjdGx5IGJ5IHRoZSAidmltcnVuIiBjb21tYW5kLiAgVGhlCisidmltcnVuLmV4ZSIgbXVzdCBiZSBpbiB0aGUgcGF0aCBmb3IgdGhpcyB0byB3b3JrLiAgT3IgaXQgbXVzdCBiZSBpbiB0aGUgc2FtZQorZGlyZWN0b3J5IGFzIHRoZSBWaW0gZXhlY3V0YWJsZS4gIElmICJ2aW1ydW4iIGNhbm5vdCBiZSBmb3VuZCwgdGhlIGNvbW1hbmQgaXMKK2V4ZWN1dGVkIGRpcmVjdGx5LCBidXQgdGhlbiB0aGUgRE9TIHdpbmRvdyBjbG9zZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlCitleHRlcm5hbCBjb21tYW5kIGhhcyBmaW5pc2hlZC4KK1dBUk5JTkc6IElmIHlvdSBjbG9zZSB0aGlzIHdpbmRvdyB3aXRoIHRoZSAiWCIgYnV0dG9uLCBhbmQgY29uZmlybSB0aGUKK3F1ZXN0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBraWxsIHRoZSBhcHBsaWNhdGlvbiwgVmltIG1heSBiZSBraWxsZWQgdG9vIQorKFRoaXMgZG9lcyBub3QgYXBwbHkgdG8gY29tbWFuZHMgcnVuIGFzeW5jaHJvbm91c2x5IHdpdGggIjohc3RhcnQiLikKKworSW4gV2luZG93cyA5NSwgdGhlIHdpbmRvdyBpbiB3aGljaCB0aGUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGlzIGFsd2F5cyAyNXg4MAorY2hhcmFjdGVycywgdG8gYmUgYXMgRE9TIGNvbXBhdGlibGUgYXMgcG9zc2libGUgKHRoaXMgbWF0dGVycyEpLiAgVGhlIGRlZmF1bHQKK3N5c3RlbSBmb250IGlzIHVzZWQuIE9uIE5ULCB0aGUgd2luZG93IHdpbGwgYmUgdGhlIGRlZmF1bHQgeW91IGhhdmUgc2V0IHVwIGZvcgorIkNvbnNvbGUiIGluIENvbnRyb2wgUGFuZWwuIE9uIFdpbjMycywgdGhlIHByb3BlcnRpZXMgb2YgdGhlIERPUyBib3ggYXJlCitkZXRlcm1pbmVkIGJ5IF9kZWZhdWx0LnBpZiBpbiB0aGUgd2luZG93cyBkaXJlY3RvcnkuCisKKwkJCQkJCQkqbXNkb3MtbW9kZSoKK0lmIHlvdSBnZXQgYSBkaWFsb2cgdGhhdCBzYXlzICJUaGlzIHByb2dyYW0gaXMgc2V0IHRvIHJ1biBpbiBNUy1ET1MgbW9kZS4uLiIKK3doZW4geW91IHJ1biBhbiBleHRlcm5hbCBwcm9ncmFtLCB5b3UgY2FuIHNvbHZlIHRoaXMgYnkgY2hhbmdpbmcgdGhlCitwcm9wZXJ0aWVzIG9mIHRoZSBhc3NvY2lhdGVkIHNob3J0Y3V0OgorLSBVc2UgYSBXaW5kb3dzIEV4cGxvcmVyIHRvIGZpbmQgdGhlIGNvbW1hbmQuY29tIHRoYXQgaXMgdXNlZC4gIEl0IGNhbiBiZQorICBjOlxjb21tYW5kLmNvbSwgYzpcZG9zXGNvbW1hbmQuY29tLCBjOlx3aW5kb3dzXGNvbW1hbmQuY29tLCBldGMuCistIFdpdGggdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiwgc2VsZWN0IHByb3BlcnRpZXMgb2YgdGhpcyBjb21tYW5kLmNvbS4KKy0gSW4gdGhlIFByb2dyYW0gdGFiIHNlbGVjdCAiQWR2YW5jZWQiLgorLSBVbnNlbGVjdCAiTVMtRE9TIG1vZGUiLgorLSBDbGljayAiT0siIHR3aWNlLgorCisJCQkJCQkJKndpbjMyLSFzdGFydCoKK05vcm1hbGx5LCBWaW0gd2FpdHMgZm9yIGEgY29tbWFuZCB0byBjb21wbGV0ZSBiZWZvcmUgY29udGludWluZyAodGhpcyBtYWtlcworc2Vuc2UgZm9yIG1vc3Qgc2hlbGwgY29tbWFuZHMgd2hpY2ggcHJvZHVjZSBvdXRwdXQgZm9yIFZpbSB0byB1c2UpLiAgSWYgeW91Cit3YW50IFZpbSB0byBzdGFydCBhIHByb2dyYW0gYW5kIHJldHVybiBpbW1lZGlhdGVseSwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZworc3ludGF4IG9uIFc5NSAmIE5UOiA+CisJOiFzdGFydCB7Y29tbWFuZH0KK09uIFdpbjMycywgeW91IHdpbGwgaGF2ZSB0byBnbyB0byBhbm90aGVyIHdpbmRvdyBpbnN0ZWFkLiBEb24ndCBmb3JnZXQgdGhhdAoreW91IG11c3QgdGVsbCBXaW5kb3dzIDMuMXggdG8ga2VlcCBleGVjdXRpbmcgYSBET1MgY29tbWFuZCBpbiB0aGUgYmFja2dyb3VuZAord2hpbGUgeW91IHN3aXRjaCBiYWNrIHRvIFZpbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBTcGVjaWFsIGNvbG9ycwkJCQkJKndpbjMyLWNvbG9ycyoKKworT24gV2luMzIsIHRoZSBub3JtYWwgRE9TIGNvbG9ycyBjYW4gYmUgdXNlZC4gIFNlZSB8ZG9zLWNvbG9yc3wuCisKK0FkZGl0aW9uYWxseSB0aGUgc3lzdGVtIGNvbmZpZ3VyZWQgY29sb3JzIGNhbiBhbHNvIGJlIHVzZWQuICBUaGVzZSBhcmUga25vd24KK2J5IHRoZSBuYW1lcyBTeXNfWFhYLCB3aGVyZSBYWFggaXMgdGhlIGFwcHJvcHJpYXRlIHN5c3RlbSBjb2xvciBuYW1lLCBmcm9tIHRoZQorZm9sbG93aW5nIGxpc3QgKHNlZSB0aGUgV2luMzIgZG9jdW1lbnRhdGlvbiBmb3IgZnVsbCBkZXNjcmlwdGlvbnMpLiAgQ2FzZSBpcworaWdub3JlZC4gbm90ZTogT24gV2luMzJzIG5vdCBhbGwgb2YgdGhlc2UgY29sb3JzIGFyZSBzdXBwb3J0ZWQuCisKK1N5c18zRERLU2hhZG93CQlTeXNfM0RGYWNlCQkJU3lzX0JUTkZhY2UKK1N5c18zREhpbGlnaHQJCVN5c18zREhpZ2hsaWdodAkJCVN5c19CVE5IaWxpZ2h0CitTeXNfQlROSGlnaGxpZ2h0CVN5c18zRExpZ2h0CQkJU3lzXzNEU2hhZG93CitTeXNfQlROU2hhZG93CQlTeXNfQWN0aXZlQm9yZGVyCQlTeXNfQWN0aXZlQ2FwdGlvbgorU3lzX0FwcFdvcmtzcGFjZQlTeXNfQmFja2dyb3VuZAkJCVN5c19EZXNrdG9wCitTeXNfQlROVGV4dAkJU3lzX0NhcHRpb25UZXh0CQkJU3lzX0dyYXlUZXh0CitTeXNfSGlnaGxpZ2h0CQlTeXNfSGlnaGxpZ2h0VGV4dAkJU3lzX0luYWN0aXZlQm9yZGVyCitTeXNfSW5hY3RpdmVDYXB0aW9uCVN5c19JbmFjdGl2ZUNhcHRpb25UZXh0CQlTeXNfSW5mb0JLCitTeXNfSW5mb1RleHQJCVN5c19NZW51CQkJU3lzX01lbnVUZXh0CitTeXNfU2Nyb2xsQmFyCQlTeXNfV2luZG93CQkJU3lzX1dpbmRvd0ZyYW1lCitTeXNfV2luZG93VGV4dAorCitQcm9iYWJseSB0aGUgbW9zdCB1c2VmdWwgdmFsdWVzIGFyZQorCVN5c19XaW5kb3cJICAgIE5vcm1hbCB3aW5kb3cgYmFja2dyb3VuZAorCVN5c19XaW5kb3dUZXh0ICAgICAgTm9ybWFsIHdpbmRvdyB0ZXh0CisJU3lzX0hpZ2hsaWdodCAgICAgICBIaWdobGlnaHRlZCBiYWNrZ3JvdW5kCisJU3lzX0hpZ2hsaWdodFRleHQgICBIaWdobGlnaHRlZCB0ZXh0CisKK1RoZXNlIGV4dHJhIGNvbG9ycyBhcmUgYWxzbyBhdmFpbGFibGU6CitHcmF5LCBHcmV5LCBMaWdodFllbGxvdywgU2VhR3JlZW4sIE9yYW5nZSwgUHVycGxlLCBTbGF0ZUJsdWUsIFZpb2xldCwKKworCQkJCQkJCQkqcmdiLnR4dCoKK0FkZGl0aW9uYWxseSwgY29sb3JzIGRlZmluZWQgYnkgYSAicmdiLnR4dCIgZmlsZSBjYW4gYmUgdXNlZC4gIFRoaXMgZmlsZSBpcword2VsbCBrbm93biBmcm9tIFgxMS4gIEEgZmV3IGxpbmVzIGZyb20gaXQ6ID4KKworICAyNTUgMjE4IDE4NQkJICAgcGVhY2ggcHVmZgorICAyMDUgMTMzICA2MwkJICAgcGVydQorICAyNTUgMTgxIDE5NwkJICAgcGluaworCitUaGlzIHNob3dzIHRoZSBsYXlvdXQgb2YgdGhlIGZpbGU6ICBGaXJzdCB0aGUgUiwgRyBhbmQgQiB2YWx1ZSBhcyBhIGRlY2ltYWwKK251bWJlciwgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YgdGhlIGNvbG9yLiAgVGhlIGZvdXIgZmllbGRzIGFyZSBzZXBhcmF0ZWQgYnkKK3NwYWNlcy4KKworWW91IGNhbiBnZXQgYW4gcmdiLnR4dCBmaWxlIGZyb20gYW55IFgxMSBkaXN0cmlidXRpb24uICBJdCBpcyBsb2NhdGVkIGluIGEKK2RpcmVjdG9yeSBsaWtlICIvdXNyL1gxMVI2L2xpYi9YMTEvIi4gIEZvciBWaW0gaXQgbXVzdCBiZSBsb2NhdGVkIGluIHRoZQorJFZJTVJVTlRJTUUgZGlyZWN0b3J5LiAgVGh1cyB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aCAiJFZJTVJVTlRJTUUvcmdiLnR4dCIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCQkJKmd1aS13MzItZGlhbG9ncyogKmRpYWxvZyoKKzYuIFdpbmRvd3MgZGlhbG9ncyAmIGJyb3dzZXJzCisKK1RoZSBXaW4zMiBHVUkgY2FuIHVzZSBmYW1pbGlhciBXaW5kb3dzIGNvbXBvbmVudHMgZm9yIHNvbWUgb3BlcmF0aW9ucywgYXMgd2VsbAorYXMgdGhlIHRyYWRpdGlvbmFsIGludGVyZmFjZSBzaGFyZWQgd2l0aCB0aGUgY29uc29sZSB2ZXJzaW9uLgorCisKKzYuMSBEaWFsb2dzCisKK1RoZSBkaWFsb2dzIGRpc3BsYXllZCBieSB0aGUgImNvbmZpcm0iIGZhbWlseSAoaS5lLiB0aGUgJ2NvbmZpcm0nIG9wdGlvbiwKK3w6Y29uZmlybXwgY29tbWFuZCBhbmQgfGNvbmZpcm0oKXwgZnVuY3Rpb24pIGFyZSBHVUktYmFzZWQgcmF0aGVyIHRoYW4gdGhlCitjb25zb2xlLWJhc2VkIG9uZXMgdXNlZCBieSBvdGhlciB2ZXJzaW9ucy4gIFRoZSAnYycgZmxhZyBpbiAnZ3Vpb3B0aW9ucycKK2NoYW5nZXMgdGhpcy4KKworCis2LjIgRmlsZSBCcm93c2VycworCitXaGVuIHByZXBlbmRpbmcgIjpicm93c2UiIGJlZm9yZSBmaWxlIGVkaXRpbmcgY29tbWFuZHMsIGEgZmlsZSByZXF1ZXN0ZXIgaXMKK3VzZWQgdG8gYWxsb3cgeW91IHRvIHNlbGVjdCBhbiBleGlzdGluZyBmaWxlLiAgU2VlIHw6YnJvd3NlfC4KKworCis2LjMgVGVhcm9mZiBNZW51cworCitUaGUgV2luMzIgR1VJIGVtdWxhdGVzIE1vdGlmJ3MgdGVhci1vZmYgbWVudXMuICBBdCB0aGUgdG9wIG9mIGVhY2ggbWVudSB5b3UKK3dpbGwgc2VlIGEgc21hbGwgZ3JhcGhpYyAicmlwIGhlcmUiIHNpZ24uICBTZWxlY3RpbmcgaXQgd2lsbCBjYXVzZSBhIGZsb2F0aW5nCit3aW5kb3cgdG8gYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIG1lbnUgZW50cmllcyBvbiBpdC4gIFRoZSBmbG9hdGluZyBtZW51IGNhbgordGhlbiBiZSBhY2Nlc3NlZCBqdXN0IGFzIGlmIGl0IHdhcyB0aGUgb3JpZ2luYWwgKGluY2x1ZGluZyBzdWItbWVudXMpLCBidXQKK3dpdGhvdXQgaGF2aW5nIHRvIGdvIHRvIHRoZSBtZW51IGJhciBlYWNoIHRpbWUuCitUaGlzIGlzIG1vc3QgdXNlZnVsIGlmIHlvdSBmaW5kIHlvdXJzZWxmIHVzaW5nIGEgY29tbWFuZCBidXJpZWQgaW4gYSBzdWItbWVudQorb3ZlciBhbmQgb3ZlciBhZ2Fpbi4KK1RoZSB0ZWFyb2ZmIG1lbnVzIGNhbiBiZSBwb3NpdGlvbmVkIHdoZXJlIHlvdSBsaWtlLCBhbmQgYWx3YXlzIHN0YXkganVzdCBhYm92ZQordGhlIE1haW4gVmltIHdpbmRvdy4gWW91IGNhbiBnZXQgcmlkIG9mIHRoZW0gYnkgY2xvc2luZyB0aGVtIGFzIHVzdWFsOyB0aGV5CithbHNvIG9mIGNvdXJzZSBjbG9zZSB3aGVuIHlvdSBleGl0IFZpbS4KKworCQkJCQkJCSo6dGVhcm9mZiogKjp0ZSoKKzp0ZVthcm9mZl0ge25hbWV9CVRlYXItb2ZmIHRoZSBtZW51IHtuYW1lfS4gIFRoZSBtZW51IG5hbWVkIG11c3QgaGF2ZSBhdAorCQkJbGVhc3Qgb25lIHN1YmVudHJ5LCBidXQgbmVlZCBub3QgYXBwZWFyIG9uIHRoZQorCQkJbWVudS1iYXIgKHNlZSB8d2luMzItaGlkZGVuLW1lbnVzfCkuCisKK0V4YW1wbGU6ID4KKwk6dGVhcm9mZiBGaWxlCit3aWxsIG1ha2UgdGhlICJGaWxlIiBtZW51IChpZiB0aGVyZSBpcyBvbmUpIGFwcGVhciBhcyBhIHRlYXJvZmYgbWVudS4gPgorCisJOmFtZW51IF1Ub29sYmFyLk1ha2UJOm1ha2U8Q1I+CisJOnRlYXJvZmYgXVRvb2xiYXIKK1RoaXMgY3JlYXRlcyBhIGZsb2F0aW5nIG1lbnUgdGhhdCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBtYWluIG1lbnUtYmFyLgorCitOb3RlIHRoYXQgYSBtZW51IHRoYXQgc3RhcnRzIHdpdGggJ10nIHdpbGwgbm90IGJlIGRpc3BsYXllZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBDb21tYW5kIGxpbmUgYXJndW1lbnRzCQkJCSpndWktdzMyLWNtZGFyZ3MqCisKK0FuYWx5c2lzIG9mIGEgY29tbWFuZCBsaW5lIGludG8gcGFyYW1ldGVycyBpcyBub3Qgc3RhbmRhcmRpc2VkIGluIE1TIFdpbmRvd3MuCitHdmltIGhhcyB0byBwcm92aWRlIGxvZ2ljIHRvIGFuYWx5c2UgYSBjb21tYW5kIGxpbmUuICBUaGlzIGxvZ2ljIGlzIGxpa2VseSB0bworYmUgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQgbG9naWMgcHJvdmlkZWQgYnkgYSBjb21waWxhdGlvbiBzeXN0ZW0gdXNlZCB0bworYnVpbGQgdmltLiAgVGhlIGRpZmZlcmVuY2VzIHJlbGF0ZSB0byB1bnVzdWFsIGRvdWJsZSBxdW90ZSAoIikgdXNhZ2UuCitUaGUgYXJndW1lbnRzICJDOlxNeSBNdXNpY1xmcmV1ZGUudHh0IiBhbmQgIisvU2NoXCJpbGxlciIgYXJlIGhhbmRsZWQgaW4gdGhlCitzYW1lIHdheS4gIFRoZSBhcmd1bWVudCAiKy9TY2giImlsbGVyIiBtYXkgYmUgaGFuZGxlZCBkaWZmZXJlbnQgYnkgZ3ZpbSBhbmQKK3ZpbSwgZGVwZW5kaW5nIHdoYXQgaXQgd2FzIGNvbXBpbGVkIHdpdGguCisKK1RoZSBydWxlcyBhcmU6CisgICAgICBhKSBBIHBhcmFtZXRlciBpcyBhIHNlcXVlbmNlIG9mIGdyYXBoaWMgY2hhcmFjdGVycy4KKyAgICAgIGIpIFBhcmFtZXRlcnMgYXJlIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZS4KKyAgICAgIGMpIEEgcGFyYW1ldGVyIGNhbiBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIHRvIGluY2x1ZGUgd2hpdGUgc3BhY2UuCisgICAgICBkKSBBIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBiYWNrc2xhc2hlcyAoXCkgYW5kIGEgZG91YmxlIHF1b3RlICgiKQorCWlzIHNwZWNpYWwuIFRoZSBlZmZlY3RpdmUgbnVtYmVyIG9mIGJhY2tzbGFzaGVzIGlzIGhhbHZlZCwgcm91bmRlZAorCWRvd24uICBBbiBldmVuIG51bWJlciBvZiBiYWNrc2xhc2hlcyByZXZlcnNlcyB0aGUgYWNjZXB0YWJpbGl0eSBvZgorCXNwYWNlcyBhbmQgdGFicywgYW4gb2RkIG51bWJlciBvZiBiYWNrc2xhc2hlcyBwcm9kdWNlcyBhIGxpdGVyYWwKKwlkb3VibGUgcXVvdGUuCisKK1NvOgorCSIJaXMgYSBzcGVjaWFsIGRvdWJsZSBxdW90ZQorCVwiCWlzIGEgbGl0ZXJhbCBkb3VibGUgcXVvdGUKKwlcXCIJaXMgYSBsaXRlcmFsIGJhY2tzbGFzaCBhbmQgYSBzcGVjaWFsIGRvdWJsZSBxdW90ZQorCVxcXCIJaXMgYSBsaXRlcmFsIGJhY2tzbGFzaCBhbmQgYSBsaXRlcmFsIGRvdWJsZSBxdW90ZQorCVxcXFwiCWlzIDIgbGl0ZXJhbCBiYWNrc2xhc2hlcyBhbmQgYSBzcGVjaWFsIGRvdWJsZSBxdW90ZQorCVxcXFxcIglpcyAyIGxpdGVyYWwgYmFja3NsYXNoZXMgYW5kIGEgbGl0ZXJhbCBkb3VibGUgcXVvdGUKKwlldGMuCisKK0V4YW1wbGU6ID4KKwlndmltICJDOlxNeSBNdXNpY1xmcmV1ZGUiICsic2V0IGlnbm9yZWNhc2UiICsvIlwiZm9vXFwiICtcImJhclxcXCIKKworb3BlbnMgIkM6XE15IE11c2ljXGZyZXVkZSIgYW5kIGV4ZWN1dGVzIHRoZSBsaW5lIG1vZGUgY29tbWFuZHM6ID4KKwlzZXQgaWdub3JlY2FzZTsgLyJmb29cIGFuZCAvYmFyXCIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBWYXJpb3VzCQkJCQkJKmd1aS13MzItdmFyaW91cyoKKworCQkJCQkJCSpndWktdzMyLXByaW50aW5nKgorVGhlICJGaWxlL1ByaW50IiBtZW51IHByaW50cyB0aGUgdGV4dCB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcsIHNlZQorfDpoYXJkY29weXwuICBJZiB5b3UganVzdCB3YW50IHRvIHByaW50IHRoZSByYXcgdGV4dCBhbmQgaGF2ZSBhIGRlZmF1bHQKK3ByaW50ZXIgaW5zdGFsbGVkIHRoaXMgc2hvdWxkIGFsc28gd29yazogPgorCTp3ID4+cHJuCisKK1ZpbSBzdXBwb3J0cyBhIG51bWJlciBvZiBzdGFuZGFyZCBNUyBXaW5kb3dzIGZlYXR1cmVzLiBTb21lIG9mIHRoZXNlIGFyZQorZGV0YWlsZWQgZWxzZXdoZXJlOiBzZWUgfCdtb3VzZSd8LCB8d2luMzItaGlkZGVuLW1lbnVzfC4KKworCQkJCQkJCSpkcmFnLW4tZHJvcC13aW4zMioKK1lvdSBjYW4gZHJhZyBhbmQgZHJvcCBvbmUgb3IgbW9yZSBmaWxlcyBpbnRvIHRoZSBWaW0gd2luZG93LCB3aGVyZSB0aGV5IHdpbGwKK2JlIG9wZW5lZCBhcyBub3JtYWwuICBTZWUgfGRyYWctbi1kcm9wfC4KKworCQkJCQkJCSo6c2ltYWx0KiAqOnNpKgorOnNpbVthbHRdIHtrZXl9CQlzaW11bGF0ZSBwcmVzc2luZyB7a2V5fSB3aGlsZSBob2xkaW5nIEFsdCBwcmVzc2VkLgorCQkJe25vdCBpbiBWaX0ge29ubHkgZm9yIFdpbjMyIHZlcnNpb25zfQorCitOb3JtYWxseSwgVmltIHRha2VzIGNvbnRyb2wgb2YgYWxsIEFsdC08S2V5PiBjb21iaW5hdGlvbnMsIHRvIGluY3JlYXNlIHRoZQorbnVtYmVyIG9mIHBvc3NpYmxlIG1hcHBpbmdzLiBUaGlzIGNsYXNoZXMgd2l0aCB0aGUgc3RhbmRhcmQgdXNlIG9mIEFsdCBhcyB0aGUKK2tleSBmb3IgYWNjZXNzaW5nIG1lbnVzLgorVGhlIHF1aWNrIHdheSBvZiBnZXR0aW5nIHN0YW5kYXJkIGJlaGF2aW9yIGlzIHRvIHNldCB0aGUgJ3dpbmFsdGtleXMnIG9wdGlvbgordG8gInllcyIuICBUaGlzIGhvd2V2ZXIgcHJldmVudHMgeW91IGZyb20gbWFwcGluZyBBbHQga2V5cyBhdCBhbGwuCitBbm90aGVyIHdheSBpcyB0byBzZXQgJ3dpbmFsdGtleXMnIHRvICJtZW51Ii4gIE1lbnUgc2hvcnRjdXQga2V5cyBhcmUgdGhlbgoraGFuZGxlZCBieSB3aW5kb3dzLCBvdGhlciBBTFQga2V5cyBjYW4gYmUgbWFwcGVkLiAgVGhpcyBkb2Vzbid0IGFsbG93IGEKK2RlcGVuZGVuY3kgb24gdGhlIGN1cnJlbnQgc3RhdGUgdGhvdWdoLgorVG8gZ2V0IHJvdW5kIHRoaXMsIHRoZSA6c2ltYWx0IGNvbW1hbmQgYWxsb3dzIFZpbSAod2hlbiAnd2luYWx0a2V5cycgaXMgbm90CisieWVzIikgdG8gZmFrZSBhIFdpbmRvd3Mtc3R5bGUgQWx0IGtleXByZXNzLiBZb3UgY2FuIHVzZSB0aGlzIHRvIG1hcCBBbHQga2V5Citjb21iaW5hdGlvbnMgKG9yIGFueXRoaW5nIGVsc2UgZm9yIHRoYXQgbWF0dGVyKSB0byBwcm9kdWNlIHN0YW5kYXJkIFdpbmRvd3MKK2FjdGlvbnMuIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6ID4KKworCTptYXAgPE0tZj4gOnNpbWFsdCBmPENSPgorVGhpcyBtYWtlcyBBbHQtRiBwb3AgZG93biB0aGUgJ0ZpbGUnIG1lbnUgKHdpdGggdGhlIHN0b2NrIE1lbnUudmltKSBieQorc2ltdWxhdGluZyB0aGUga2V5c3Ryb2tlcyBBbHQsIEYuID4KKwk6bWFwIDxNLVNwYWNlPiA6c2ltYWx0IH48Q1I+CitUaGlzIG1hcHMgQWx0LVNwYWNlIHRvIHBvcCBkb3duIHRoZSBzeXN0ZW0gbWVudSBmb3IgdGhlIFZpbSB3aW5kb3cuIE5vdGUgdGhhdAorfiBpcyB1c2VkIGJ5IHNpbWFsdCB0byByZXByZXNlbnQgdGhlIDxTcGFjZT4gY2hhcmFjdGVyLiA+CisJOm1hcCA8Qy1uPiA6c2ltYWx0IH5uPENSPgorTWFwcyBDb250cm9sLU4gdG8gcHJvZHVjZSB0aGUga2V5cyBBbHQtU3BhY2UgZm9sbG93ZWQgYnkgTi4gVGhpcyBtaW5pbWl6ZXMgdGhlCitWaW0gd2luZG93IHZpYSB0aGUgc3lzdGVtIG1lbnUuCisKKwkJCQkJCSppbnRlbGxpbW91c2Utd2hlZWwtcHJvYmxlbXMqCitXaGVuIHVzaW5nIHRoZSBJbnRlbGxpbW91c2UgbW91c2Ugd2hlZWwgY2F1c2VzIFZpbSB0byBzdG9wIGFjY2VwdGluZyBpbnB1dCwgZ28KK3RvOgorCUNvbnRyb2xQYW5lbCAtIE1vdXNlIC0gV2hlZWwgLSBVbml2ZXJzYWxTY3JvbGxpbmcgLSBFeGNlcHRpb25zCisKK0FuZCBhZGQgZ3ZpbSB0byB0aGUgbGlzdCBvZiBhcHBsaWNhdGlvbnMuICBUaGlzIHByb2JsZW0gb25seSBhcHBlYXJzIHRvIGhhcHBlbgord2l0aCB0aGUgSW50ZWxsaW1vdXNlIGRyaXZlciAyLjIgYW5kIHdoZW4gIlVuaXZlcnNhbCBTY3JvbGxpbmciIGlzIHR1cm5lZCBvbi4KKworIHZpbTp0dz03ODpzdz00OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZ3VpX3gxMS50eHQgYi9ydW50aW1lL2RvYy9ndWlfeDExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTQ3MzAyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvZ3VpX3gxMS50eHQKQEAgLTAsMCArMSw1NzYgQEAKKypndWlfeDExLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXIgMTYKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitWaW0ncyBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UJCQkJKmd1aS14MTEqICpHVUktWDExKgorCQkJCQkJCSpBdGhlbmEqICpNb3RpZioKKzEuIFN0YXJ0aW5nIHRoZSBYMTEgR1VJCQl8Z3VpLXgxMS1zdGFydHwKKzIuIEdVSSBSZXNvdXJjZXMJCXxndWktcmVzb3VyY2VzfAorMy4gU2hlbGwgQ29tbWFuZHMJCXxndWktcHR5fAorNC4gVmFyaW91cwkJCXxndWkteDExLXZhcmlvdXN8Cis1LiBHVEsgdmVyc2lvbgkJCXxndWktZ3RrfAorNi4gR05PTUUgdmVyc2lvbgkJfGd1aS1nbm9tZXwKKzcuIENvbXBpbGluZwkJCXxndWkteDExLWNvbXBpbGluZ3wKKzguIFgxMSBzZWxlY3Rpb24gbWVjaGFuaXNtCXx4MTEtc2VsZWN0aW9ufAorCitPdGhlciByZWxldmFudCBkb2N1bWVudGF0aW9uOgorfGd1aS50eHR8CUZvciBnZW5lcmljIGl0ZW1zIG9mIHRoZSBHVUkuCisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTdGFydGluZyB0aGUgWDExIEdVSQkJCQkJKmd1aS14MTEtc3RhcnQqICpFNjY1KgorCitUaGVuIHlvdSBjYW4gcnVuIHRoZSBHVUkgdmVyc2lvbiBvZiBWaW0gaW4gZWl0aGVyIG9mIHRoZXNlIHdheXM6CisgICAgZ3ZpbSBbb3B0aW9uc10gW2ZpbGVzLi4uXQorICAgIHZpbSAtZyBbb3B0aW9uc10gW2ZpbGVzLi4uXQorCitTbyBpZiB5b3UgY2FsbCB0aGUgZXhlY3V0YWJsZSAiZ3ZpbSIsIG9yIG1ha2UgImd2aW0iIGEgbGluayB0byB0aGUgZXhlY3V0YWJsZSwKK3RoZW4gdGhlIEdVSSB2ZXJzaW9uIHdpbGwgYXV0b21hdGljYWxseSBiZSB1c2VkLiAgQWRkaXRpb25hbCBjaGFyYWN0ZXJzIG1heSBiZQorYWRkZWQgYWZ0ZXIgImd2aW0iLCBmb3IgZXhhbXBsZSAiZ3ZpbS01Ii4KKworWW91IG1heSBhbHNvIHN0YXJ0IHVwIHRoZSBHVUkgZnJvbSB3aXRoaW4gdGhlIHRlcm1pbmFsIHZlcnNpb24gYnkgdXNpbmcgb25lIG9mCit0aGVzZSBjb21tYW5kczoKKwk6Z3VpIFsrK29wdF0gWytjbWRdIFstZnwtYl0gW2ZpbGVzLi4uXQkJCSo6Z3UqICo6Z3VpKgorCTpndmltIFsrK29wdF0gWytjbWRdIFstZnwtYl0gW2ZpbGVzLi4uXQkJCSo6Z3YqICo6Z3ZpbSoKK1RoZSAiLWYiIG9wdGlvbiBydW5zIFZpbSBpbiB0aGUgZm9yZWdyb3VuZC4KK1RoZSAiLWIiIG9wdGlvbiBydW5zIFZpbSBpbiB0aGUgYmFja2dyb3VuZCAodGhpcyBpcyB0aGUgZGVmYXVsdCkuCitBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisKKwkJCQkJCQkqZ3VpLWZvcmsqCitXaGVuIHRoZSBHVUkgaXMgc3RhcnRlZCwgaXQgZG9lcyBhIGZvcmsoKSBhbmQgZXhpdHMgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KK1doZW4gZ3ZpbSB3YXMgc3RhcnRlZCBmcm9tIGEgc2hlbGwgdGhpcyBtYWtlcyB0aGUgc2hlbGwgYWNjZXB0IGZ1cnRoZXIKK2NvbW1hbmRzLiAgSWYgeW91IGRvbid0IHdhbnQgdGhpcyAoZS5nLiB3aGVuIHVzaW5nIGd2aW0gZm9yIGEgbWFpbCBwcm9ncmFtCit0aGF0IHdhaXRzIGZvciBndmltIHRvIGV4aXQpLCBzdGFydCBndmltIHdpdGggImd2aW0gLWYiLCAidmltIC1nZiIgb3IgdXNlCisiOmd1aSAtZiIuICBEb24ndCB1c2UgInZpbSAtZmciLCBiZWNhdXNlICItZmciIHNwZWNpZmllcyB0aGUgZm9yZWdyb3VuZAorY29sb3IuCisKK1doZW4gdXNpbmcgImd2aW0gLWYiIGFuZCB0aGVuICI6Z3VpIiwgVmltIHdpbGwgcnVuIGluIHRoZSBmb3JlZ3JvdW5kLiAgVGhlCisiLWYiIGFyZ3VtZW50IHdpbGwgYmUgcmVtZW1iZXJlZC4gIFRvIGZvcmNlIHJ1bm5pbmcgVmltIGluIHRoZSBiYWNrZ3JvdW5kIHVzZQorIjpndWkgLWIiLgorCisiZ3ZpbSAtLW5vZm9yayIgZG9lcyB0aGUgc2FtZSBhcyAiZ3ZpbSAtZiIuCisKK0lmIHlvdSB3YW50IHRoZSBHVUkgdG8gcnVuIGluIHRoZSBmb3JlZ3JvdW5kIGFsd2F5cywgaW5jbHVkZSB0aGUgJ2YnCitmbGFnIGluICdndWlvcHRpb25zJy4gIHwtZnwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gR1VJIFJlc291cmNlcwkJCSpndWktcmVzb3VyY2VzKiAqLlhkZWZhdWx0cyoKKworSWYgdXNpbmcgdGhlIE1vdGlmIG9yIEF0aGVuYSB2ZXJzaW9uIG9mIHRoZSBHVUkgKG5vdCBmb3IgdGhlIEdUSysgb3IgV2luMzIKK3ZlcnNpb24pLCBhIG51bWJlciBvZiBYIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlLiAgWW91IHNob3VsZCB1c2UgVmltJ3MgY2xhc3MKKyJWaW0iIHdoZW4gc2V0dGluZyB0aGVzZS4gIFRoZXkgYXJlIGFzIGZvbGxvd3M6CisKKyAgICBSZXNvdXJjZSBuYW1lCU1lYW5pbmcJCX4KKworICAgIHJldmVyc2VWaWRlbwlCb29sZWFuOiBzaG91bGQgcmV2ZXJzZSB2aWRlbyBiZSB1c2VkPworICAgIGJhY2tncm91bmQJCUNvbG9yIG9mIGJhY2tncm91bmQuCisgICAgZm9yZWdyb3VuZAkJQ29sb3Igb2Ygbm9ybWFsIHRleHQuCisgICAgc2Nyb2xsQmFja2dyb3VuZAlDb2xvciBvZiB0cm91Z2ggcG9ydGlvbiBvZiBzY3JvbGxiYXJzLgorICAgIHNjcm9sbEZvcmVncm91bmQJQ29sb3Igb2Ygc2xpZGVyIGFuZCBhcnJvdyBwb3J0aW9ucyBvZiBzY3JvbGxiYXJzLgorICAgIG1lbnVCYWNrZ3JvdW5kCUNvbG9yIG9mIG1lbnUgYmFja2dyb3VuZHMuCisgICAgbWVudUZvcmVncm91bmQJQ29sb3Igb2YgbWVudSBmb3JlZ3JvdW5kcy4KKyAgICB0b29sdGlwRm9yZWdyb3VuZAlDb2xvciBvZiB0b29sdGlwIGFuZCBiYWxsb29uIGZvcmVncm91bmQuCisgICAgdG9vbHRpcEJhY2tncm91bmQJQ29sb3Igb2YgdG9vbHRpcCBhbmQgYmFsbG9vbiBiYWNrZ3JvdW5kLgorCisgICAgZm9udAkJTmFtZSBvZiBmb250IHVzZWQgZm9yIG5vcm1hbCB0ZXh0LgorICAgIGJvbGRGb250CQlOYW1lIG9mIGZvbnQgdXNlZCBmb3IgYm9sZCB0ZXh0LgorICAgIGl0YWxpY0ZvbnQJCU5hbWUgb2YgZm9udCB1c2VkIGZvciBpdGFsaWMgdGV4dC4KKyAgICBib2xkSXRhbGljRm9udAlOYW1lIG9mIGZvbnQgdXNlZCBmb3IgYm9sZCwgaXRhbGljIHRleHQuCisgICAgbWVudUZvbnQJCU5hbWUgb2YgZm9udCB1c2VkIGZvciB0aGUgbWVudXMsIHVzZWQgd2hlbiBjb21waWxlZAorCQkJd2l0aG91dCB0aGUgfCt4Zm9udHNldHwgZmVhdHVyZQorICAgIG1lbnVGb250U2V0CQlOYW1lIG9mIGZvbnRzZXQgdXNlZCBmb3IgdGhlIG1lbnVzLCB1c2VkIHdoZW4gY29tcGlsZWQKKwkJCXdpdGggdGhlIHwreGZvbnRzZXR8IGZlYXR1cmUKKyAgICB0b29sdGlwRm9udAkJTmFtZSBvZiB0aGUgZm9udCB1c2VkIGZvciB0aGUgdG9vbHRpcCBhbmQgYmFsbG9vbnMuCisJCQlXaGVuIGNvbXBpbGVkIHdpdGggdGhlIHwreGZvbnRzZXR8IGZlYXR1cmUgdGhpcyBpcyBhCisJCQlmb250c2V0IG5hbWUuCisKKyAgICBnZW9tZXRyeQkJSW5pdGlhbCBnZW9tZXRyeSB0byB1c2UgZm9yIGd2aW0ncyB3aW5kb3cgKGRlZmF1bHQKKwkJCWlzIHNhbWUgc2l6ZSBhcyB0ZXJtaW5hbCB0aGF0IHN0YXJ0ZWQgaXQpLgorICAgIHNjcm9sbGJhcldpZHRoCVRoaWNrbmVzcyBvZiBzY3JvbGxiYXJzLgorICAgIGJvcmRlcldpZHRoCQlUaGlja25lc3Mgb2YgYm9yZGVyIGFyb3VuZCB0ZXh0IGFyZWEuCisgICAgbWVudUhlaWdodAkJSGVpZ2h0IG9mIHRoZSBtZW51IGJhciAob25seSBmb3IgQXRoZW5hKS4KKworQSBzcGVjaWFsIGZvbnQgZm9yIGl0YWxpYywgYm9sZCwgYW5kIGl0YWxpYy1ib2xkIHRleHQgd2lsbCBvbmx5IGJlIHVzZWQgaWYKK3RoZSB1c2VyIGhhcyBzcGVjaWZpZWQgb25lIHZpYSBhIHJlc291cmNlLiAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGd1ZXNzIHdoYXQKK2ZvbnRzIHNob3VsZCBiZSB1c2VkIGZvciB0aGVzZSBiYXNlZCBvbiB0aGUgbm9ybWFsIHRleHQgZm9udC4KKworTm90ZSB0aGF0IHRoZSBjb2xvcnMgY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlICI6aGlnaGxpZ2h0IiBjb21tYW5kLCB1c2luZyB0aGUKKyJOb3JtYWwiLCAiTWVudSIsICJUb29sdGlwIiwgYW5kICJTY3JvbGxiYXIiIGdyb3Vwcy4gIEV4YW1wbGU6ID4KKwk6aGlnaGxpZ2h0IE1lbnUgZ3VpYmc9bGlnaHRibHVlCisJOmhpZ2hsaWdodCBUb29sdGlwIGd1aWJnPXllbGxvdworCTpoaWdobGlnaHQgU2Nyb2xsYmFyIGd1aWJnPWxpZ2h0Ymx1ZSBndWlmZz1ibHVlCisJOmhpZ2hsaWdodCBOb3JtYWwgZ3VpYmc9Z3JleTkwCis8CisJCQkJCQkJKmZvbnQtc2l6ZXMqCitOb3RlOiBBbGwgZm9udHMgKGV4Y2VwdCBmb3IgdGhlIG1lbnUgYW5kIHRvb2x0aXApIG11c3QgYmUgb2YgdGhlIHNhbWUgc2l6ZSEhIQorSWYgeW91IGRvbid0IGRvIHRoaXMsIHRleHQgd2lsbCBkaXNhcHBlYXIgb3IgbWVzcyB1cCB0aGUgZGlzcGxheS4gIFZpbSBkb2VzCitub3QgY2hlY2sgdGhlIGZvbnQgc2l6ZXMuICBJdCdzIHRoZSBzaXplIGluIHNjcmVlbiBwaXhlbHMgdGhhdCBtdXN0IGJlIHRoZQorc2FtZS4gIE5vdGUgdGhhdCBzb21lIGZvbnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSBwb2ludCBzaXplIGRvbid0IGhhdmUgdGhlIHNhbWUKK3BpeGVsIHNpemUhICBBZGRpdGlvbmFsbHksIHRoZSBwb3NpdGlvbmluZyBvZiB0aGUgZm9udHMgbXVzdCBiZSB0aGUgc2FtZQorKGFzY2VudCBhbmQgZGVzY2VudCkuICBZb3UgY2FuIGNoZWNrIHRoaXMgd2l0aCAieGxzZm9udHMgLWwge2ZvbnRuYW1lfSIuCisKK0lmIGFueSBvZiB0aGVzZSB0aGluZ3MgYXJlIGFsc28gc2V0IHdpdGggVmltIGNvbW1hbmRzLCBlZyB3aXRoCisiOnNldCBndWlmb250PVNjcmVlbjE1IiwgdGhlbiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIFggcmVzb3VyY2VzIChjdXJyZW50bHkKKydndWlmb250JyBpcyB0aGUgb25seSBvcHRpb24gdGhhdCBpcyBzdXBwb3J0ZWQpLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2Ygd2hhdCB5b3UgbWlnaHQgcHV0IGluIHlvdXIgfi8uWGRlZmF1bHRzIGZpbGU6ID4KKworCVZpbSp1c2VTY2hlbWVzOgkJCWFsbAorCVZpbSpzZ2lNb2RlOgkJCXRydWUKKwlWaW0qdXNlRW5oYW5jZWRGU0I6CQl0cnVlCisJVmltLmZvcmVncm91bmQ6CQkJQmxhY2sKKwlWaW0uYmFja2dyb3VuZDoJCQlXaGVhdAorCVZpbSpmb250TGlzdDoJCQk3eDEzCisKK1RoZSBmaXJzdCB0aHJlZSBvZiB0aGVzZSBhcmUgc3RhbmRhcmQgcmVzb3VyY2VzIG9uIFNpbGljb24gR3JhcGhpY3MgbWFjaGluZXMKK3doaWNoIG1ha2UgTW90aWYgYXBwbGljYXRpb25zIGxvb2sgZXZlbiBiZXR0ZXIsIGhpZ2hseSByZWNvbW1lbmRlZCEKKworVGhlICJWaW0qZm9udExpc3QiIGlzIHRvIHNldCB0aGUgbWVudSBmb250IGZvciBNb3RpZi4gIEV4YW1wbGU6ID4KKwlWaW0qbWVudUJhcipmb250TGlzdDoJICAgICAtKi1jb3VyaWVyLW1lZGl1bS1yLSotKi0xMC0qLSotKi0qLSotKi0qCitXaXRoIEF0aGVuYTogPgorCVZpbSptZW51QmFyKlNtZUJTQipmb250OiAgICAgLSotY291cmllci1tZWRpdW0tci0qLSotMTAtKi0qLSotKi0qLSotKgorCVZpbSptZW51QmFyKk1lbnVCdXR0b24qZm9udDogLSotY291cmllci1tZWRpdW0tci0qLSotMTAtKi0qLSotKi0qLSotKgorCitOT1RFOiBBIG1vcmUgcG9ydGFibGUsIGFuZCBpbmRlZWQgbW9yZSBjb3JyZWN0LCB3YXkgdG8gc3BlY2lmeSB0aGUgbWVudSBmb250CitpbiBlaXRoZXIgTW90aWYgb3IgQXRoZW5hIGlzIHRocm91Z2ggdGhlIHJlc291cmNlOiA+CisJVmltLm1lbnVGb250OgkgICAgIC0qLWNvdXJpZXItbWVkaXVtLXItKi0qLTEwLSotKi0qLSotKi0qLSoKK09yLCB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwreGZvbnRzZXR8IGZlYXR1cmU6ID4KKwlWaW0ubWVudUZvbnRTZXQ6ICAgICAtKi1jb3VyaWVyLW1lZGl1bS1yLSotKi0xMC0qLSotKi0qLSotKi0qCisKK0Rvbid0IHVzZSAiVmltKmdlb21ldHJ5IiBpbiB0aGUgZGVmYXVsdHMuICBUaGlzIHdpbGwgYnJlYWsgdGhlIG1lbnVzLiAgVXNlCisiVmltLmdlb21ldHJ5IiBpbnN0ZWFkLgorCitJZiB5b3UgZ2V0IGFuIGVycm9yIG1lc3NhZ2UgIkNhbm5vdCBhbGxvY2F0ZSBjb2xvcm1hcCBlbnRyeSBmb3IgImdyYXk2MCIsCit0cnkgYWRkaW5nIHRoaXMgdG8geW91ciBWaW0gcmVzb3VyY2VzIChjaGFuZ2UgdGhlIGNvbG9ycyB0byB5b3VyIGxpa2luZyk6ID4KKworCVZpbSpzY3JvbGxCYWNrZ3JvdW5kOgkJQmxhY2sKKwlWaW0qc2Nyb2xsRm9yZWdyb3VuZDoJCUJsdWUKKworVGhlIHJlc291cmNlcyBjYW4gYWxzbyBiZSBzZXQgd2l0aCBhcmd1bWVudHMgdG8gVmltOgorCisgICAgYXJndW1lbnQJCW1lYW5pbmcJfgorCQkJCQkJCSotZ3VpKgorICAgLWRpc3BsYXkge2Rpc3BsYXl9CVJ1biB2aW0gb24ge2Rpc3BsYXl9CQkqLWRpc3BsYXkqCisgICAtaWNvbmljCQlTdGFydCB2aW0gaWNvbmlmaWVkCQkqLWljb25pYyoKKyAgIC1iYWNrZ3JvdW5kIHtjb2xvcn0JVXNlIHtjb2xvcn0gZm9yIHRoZSBiYWNrZ3JvdW5kCSotYmFja2dyb3VuZCoKKyAgIC1iZyB7Y29sb3J9CQlpZGVtCQkJCSotYmcqCisgICAtZm9yZWdyb3VuZCB7Y29sb3J9CVVzZSB7Y29sb3J9IGZvciBub3JtYWwgdGV4dAkqLWZvcmVncm91bmQqCisgICAtZmcge2NvbG9yfQkJaWRlbQkJCQkqLWZnKgorICAgLXVsIHtjb2xvcn0JCWlkZW0JCQkJKi11bCoKKyAgIC1mb250IHtmb250fQkJVXNlIHtmb250fSBmb3Igbm9ybWFsIHRleHQJKi1mb250KgorICAgLWZuIHtmb250fQkJaWRlbQkJCQkqLWZuKgorICAgLWJvbGRmb250IHtmb250fQlVc2Uge2ZvbnR9IGZvciBib2xkIHRleHQJKi1ib2xkZm9udCoKKyAgIC1pdGFsaWNmb250IHtmb250fQlVc2Uge2ZvbnR9IGZvciBpdGFsaWMgdGV4dAkqLWl0YWxpY2ZvbnQqCisgICAtbWVudWZvbnQge2ZvbnR9CVVzZSB7Zm9udH0gZm9yIG1lbnUgaXRlbXMJKi1tZW51Zm9udCoKKyAgIC1tZW51Zm9udHNldCB7Zm9udHNldH0gVXNlIHtmb250c2V0fSBmb3IgbWVudSBpdGVtcwkqLW1lbnVmb250c2V0KgorICAgLW1mIHtmb250fQkJaWRlbQkJCQkqLW1mKgorICAgLWdlb21ldHJ5IHtnZW9tfQlVc2Uge2dlb219IGZvciBpbml0aWFsIGdlb21ldHJ5CSotZ2VvbWV0cnkqCisgICAtZ2VvbSB7Z2VvbX0JCWlkZW0sIHNlZSB8LWdlb21ldHJ5LWV4YW1wbGV8CSotZ2VvbSoKKyAgIC1ib3JkZXJ3aWR0aCB7d2lkdGh9CVVzZSBhIGJvcmRlciB3aWR0aCBvZiB7d2lkdGh9CSotYm9yZGVyd2lkdGgqCisgICAtYncge3dpZHRofQkJaWRlbQkJCQkqLWJ3KgorCQkJCQkJCSotc2Nyb2xsYmFyd2lkdGgqCisgICAtc2Nyb2xsYmFyd2lkdGgge3dpZHRofQlVc2UgYSBzY3JvbGxiYXIgd2lkdGggb2Yge3dpZHRofQorICAgLXN3IHt3aWR0aH0JCWlkZW0JCQkJKi1zdyoKKyAgIC1tZW51aGVpZ2h0IHtoZWlnaHR9CVVzZSBhIG1lbnUgYmFyIGhlaWdodCBvZiB7aGVpZ2h0fSAqLW1lbnVoZWlnaHQqCisgICAtbWgge2hlaWdodH0JCWlkZW0JCQkJKi1taCoKKwkJCU5PVEU6IE9uIE1vdGlmIHRoZSB2YWx1ZSBpcyBpZ25vcmVkLCB0aGUgbWVudSBoZWlnaHQKKwkJCWlzIGNvbXB1dGVkIHRvIGZpdCB0aGUgbWVudXMuCisgICAtcmV2ZXJzZQkJVXNlIHJldmVyc2UgdmlkZW8JCSotcmV2ZXJzZSoKKyAgIC1ydgkJCWlkZW0JCQkJKi1ydioKKyAgICtyZXZlcnNlCQlEb24ndCB1c2UgcmV2ZXJzZSB2aWRlbwkJKi0rcmV2ZXJzZSoKKyAgICtydgkJCWlkZW0JCQkJKi0rcnYqCisgICAteHJtIHtyZXNvdXJjZX0JU2V0IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UJKi14cm0qCisKK05vdGUgYWJvdXQgcmV2ZXJzZSB2aWRlbzogVmltIGNoZWNrcyB0aGF0IHRoZSByZXN1bHQgaXMgYWN0dWFsbHkgYSBsaWdodCB0ZXh0CitvbiBhIGRhcmsgYmFja2dyb3VuZC4gIFRoZSByZWFzb24gaXMgdGhhdCBzb21lIFgxMSB2ZXJzaW9ucyBzd2FwIHRoZSBjb2xvcnMsCithbmQgc29tZSBkb24ndC4gIFRoZXNlIHR3byBleGFtcGxlcyB3aWxsIGJvdGggZ2l2ZSB5ZWxsb3cgdGV4dCBvbiBhIGJsdWUKK2JhY2tncm91bmQ6CisgICAgZ3ZpbSAtZmcgWWVsbG93IC1iZyBCbHVlIC1yZXZlcnNlCisgICAgZ3ZpbSAtYmcgWWVsbG93IC1mZyBCbHVlIC1yZXZlcnNlCisKKwkJCQkJCQkqLWdlb21ldHJ5LWV4YW1wbGUqCitBbiBleGFtcGxlIGZvciB0aGUgZ2VvbWV0cnkgYXJndW1lbnQ6ID4KKwlndmltIC1nZW9tZXRyeSA4MHg2Mys4KzEwMAorVGhpcyBjcmVhdGVzIGEgd2luZG93IHdpdGggODAgY29sdW1ucyBhbmQgNjMgbGluZXMgYXQgcG9zaXRpb24gOCBwaXhlbHMgZnJvbQordGhlIGxlZnQgYW5kIDEwMCBwaXhlbHMgZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gU2hlbGwgQ29tbWFuZHMJCQkJCSpndWktcHR5KgorCitXQVJOSU5HOiBFeGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCBmcm9tIHRoZSBHVUkgd2lsbCBub3QgYWx3YXlzIHdvcmsuCisibm9ybWFsIiBjb21tYW5kcyBsaWtlICJscyIsICJncmVwIiBhbmQgIm1ha2UiIG1vc3RseSB3b3JrIGZpbmUuICBDb21tYW5kcwordGhhdCByZXF1aXJlIGFuIGludGVsbGlnZW50IHRlcm1pbmFsIGxpa2UgImxlc3MiIGFuZCAiaXNwZWxsIiB3b24ndCB3b3JrLgorU29tZSBtYXkgZXZlbiBoYW5nIGFuZCBuZWVkIHRvIGJlIGtpbGxlZCBmcm9tIGFub3RoZXIgdGVybWluYWwuICBTbyBiZQorY2FyZWZ1bCEKKworVGhlcmUgYXJlIHR3byB3YXlzIHRvIGRvIHRoZSBJL08gd2l0aCBhIHNoZWxsIGNvbW1hbmQ6IFBpcGVzIGFuZCBhIHBzZXVkby10dHkuCitUaGUgZGVmYXVsdCBpcyB0byB1c2UgYSBwc2V1ZG8tdHR5LiAgVGhpcyBzaG91bGQgd29yayBiZXN0IG9uIG1vc3Qgc3lzdGVtcy4KKworVW5mb3J0dW5hdGVseSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwc2V1ZG8tdHR5IGlzIGRpZmZlcmVudCBvbiBldmVyeSBVbml4CitzeXN0ZW0uICBBbmQgc29tZSBzeXN0ZW1zIHJlcXVpcmUgcm9vdCBwZXJtaXNzaW9uLiAgVG8gYXZvaWQgcnVubmluZyBpbnRvCitwcm9ibGVtcyB3aXRoIGEgcHNldWRvLXR0eSB3aGVuIHlvdSBsZWFzdCBleHBlY3QgaXQsIHRlc3QgaXQgd2hlbiBub3QgZWRpdGluZworYSBmaWxlLiAgQmUgcHJlcGFyZWQgdG8gImtpbGwiIHRoZSBzdGFydGVkIGNvbW1hbmQgb3IgVmltLiAgQ29tbWFuZHMgbGlrZQorIjpyICFjYXQiIG1heSBoYW5nIQorCitJZiB1c2luZyBhIHBzZXVkby10dHkgZG9lcyBub3Qgd29yayBmb3IgeW91LCByZXNldCB0aGUgJ2d1aXB0eScgb3B0aW9uOiA+CisKKwk6c2V0IG5vZ3VpcHR5CisKK1VzaW5nIGEgcGlwZSBzaG91bGQgd29yayBvbiBhbnkgVW5peCBzeXN0ZW0sIGJ1dCB0aGVyZSBhcmUgZGlzYWR2YW50YWdlczoKKy0gU29tZSBzaGVsbCBjb21tYW5kcyB3aWxsIG5vdGljZSB0aGF0IGEgcGlwZSBpcyBiZWluZyB1c2VkIGFuZCBiZWhhdmUKKyAgZGlmZmVyZW50bHkuICBFLmcuLCAiOiFscyIgd2lsbCBsaXN0IHRoZSBmaWxlcyBpbiBvbmUgY29sdW1uLgorLSBUaGUgIjpzaCIgY29tbWFuZCB3b24ndCBzaG93IGEgcHJvbXB0LCBhbHRob3VnaCBpdCB3aWxsIHNvcnQgb2Ygd29yay4KKy0gV2hlbiB1c2luZyAiOm1ha2UiIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGludGVycnVwdCB3aXRoIGEgQ1RSTC1DLgorCitUeXBlYWhlYWQgd2hpbGUgdGhlIGV4dGVybmFsIGNvbW1hbmQgaXMgcnVubmluZyBpcyBvZnRlbiBsb3N0LiAgVGhpcyBoYXBwZW5zCitib3RoIHdpdGggYSBwaXBlIGFuZCBhIHBzZXVkby10dHkuICBUaGlzIGlzIGEga25vd24gcHJvYmxlbSwgYnV0IGl0IHNlZW1zIGl0CitjYW4ndCBiZSBmaXhlZCAob3IgYXQgbGVhc3QsIGl0J3MgdmVyeSBkaWZmaWN1bHQpLgorCisJCQkJCQkJKmd1aS1wdHktZXJhc2UqCitXaGVuIHlvdXIgZXJhc2UgY2hhcmFjdGVyIGlzIHdyb25nIGZvciBhbiBleHRlcm5hbCBjb21tYW5kLCB5b3Ugc2hvdWxkIGZpeAordGhpcyBpbiB5b3VyICJ+Ly5jc2hyYyIgZmlsZSwgb3Igd2hhdGV2ZXIgZmlsZSB5b3VyIHNoZWxsIHVzZXMgZm9yCitpbml0aWFsaXphdGlvbnMuICBGb3IgZXhhbXBsZSwgd2hlbiB5b3Ugd2FudCB0byB1c2UgYmFja3NwYWNlIHRvIGRlbGV0ZQorY2hhcmFjdGVycywgYnV0IGhpdHRpbmcgYmFja3NwYWNlcyBwcm9kdWNlcyAiXkgiIGluc3RlYWQsIHRyeSBhZGRpbmcgdGhpcyB0bworeW91ciAifi8uY3NocmMiOiA+CisJc3R0eSBlcmFzZSBeSAorVGhlIF5IIGlzIGEgcmVhbCBDVFJMLUgsIHR5cGUgaXQgYXMgQ1RSTC1WIENUUkwtSC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBWYXJpb3VzCQkJCQkJKmd1aS14MTEtdmFyaW91cyoKKworCQkJCQkJCSpndWkteDExLXByaW50aW5nKgorVGhlICJGaWxlL1ByaW50IiBtZW51IHNpbXBseSBzZW5kcyB0aGUgY3VycmVudCBidWZmZXIgdG8gImxwciIuICBObyBvcHRpb25zIG9yCit3aGF0ZXZlci4gIElmIHlvdSB3YW50IHNvbWV0aGluZyBlbHNlLCB5b3UgY2FuIGRlZmluZSB5b3VyIG93biBwcmludCBjb21tYW5kLgorRm9yIGV4YW1wbGU6ID4KKworICA6MTBhbWVudSBGaWxlLlByaW50IDp3ICFscHIgLVBocDMKKyAgOjEwdm1lbnUgRmlsZS5QcmludCA6dyAhbHByIC1QaHAzCis8CisJCQkJCQkJKlgxMS1pY29uKgorVmltIHVzZXMgYSBibGFjayZ3aGl0ZSBpY29uIGJ5IGRlZmF1bHQgd2hlbiBjb21waWxlZCB3aXRoIE1vdGlmIG9yIEF0aGVuYS4gIEEKK2NvbG9yZWQgVmltIGljb24gaXMgaW5jbHVkZWQgYXMgJFZJTVJVTlRJTUUvdmltMzJ4MzIueHBtLiAgRm9yIEdUSyssIHRoaXMgaXMKK3RoZSBidWlsdGluIGljb24gdXNlZC4gIFVuZm9ydHVuYXRlbHksIGhvdyB5b3Ugc2hvdWxkIGluc3RhbGwgaXQgZGVwZW5kcyBvbgoreW91ciB3aW5kb3cgbWFuYWdlci4gIFdoZW4geW91IHVzZSB0aGlzLCByZW1vdmUgdGhlICdpJyBmbGFnIGZyb20KKydndWlvcHRpb25zJywgdG8gcmVtb3ZlIHRoZSBibGFjayZ3aGl0ZSBpY29uOiA+CisgIDpzZXQgZ3Vpb3B0aW9ucy09aQorCitJZiB5b3UgdXNlIG9uZSBvZiB0aGUgZnZ3bSogZmFtaWx5IG9mIHdpbmRvdyBtYW5hZ2VycyBzaW1wbHkgYWRkIHRoaXMgbGluZSB0bworeW91ciAuZnZ3bTJyYyBjb25maWd1cmF0aW9uIGZpbGU6ID4KKworICBTdHlsZSAidmltIgkJSWNvbiB2aW0zMngzMi54cG0KKworTWFrZSBzdXJlIHRoZSBpY29uIGZpbGUncyBsb2NhdGlvbiBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHdpbmRvdyBtYW5hZ2VyJ3MKK0ltYWdlUGF0aCBzdGF0ZW1lbnQuICBFaXRoZXIgbW9kaWZ5IHRoZSBJbWFnZVBhdGggZnJvbSB3aXRoaW4geW91ciAuZnZ3bTJyYyBvcgorZHJvcCB0aGUgaWNvbiBpbnRvIG9uZSB0aGUgcHJlLWRlZmluZWQgZGlyZWN0b3JpZXM6ID4KKworICBJbWFnZVBhdGggL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9waXhtYXBzOi91c3IvWDExUjYvaW5jbHVkZS9YMTEvYml0bWFwcworCitOb3RlOiBvbGRlciB2ZXJzaW9ucyBvZiBmdndtIHVzZSAiSWNvblBhdGgiIGluc3RlYWQgb2YgIkltYWdlUGF0aCIuCisKK0ZvciBDREUgImR0d20iIChhIGRlcml2YXRpdmUgb2YgTW90aWYpIGFkZCB0aGlzIGxpbmUgaW4gdGhlIC5YZGVmYXVsdHM6ID4KKyAgIER0d20qVmltKmljb25JbWFnZTogL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltMzJ4MzIueHBtCisKK0ZvciAibXdtIiAoTW90aWYgd2luZG93IG1hbmFnZXIpIHRoZSBsaW5lIHdvdWxkIGJlOiA+CisgICBNd20qVmltKmljb25JbWFnZTogL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltMzJ4MzIueHBtCisKK01vdXNlIFBvaW50ZXJzIEF2YWlsYWJsZSBpbiBYMTEJCQkJKlgxMV9tb3VzZV9zaGFwZXMqCisKK0J5IHVzaW5nIHRoZSB8J21vdXNlc2hhcGUnfCBvcHRpb24sIHRoZSBtb3VzZSBwb2ludGVyIGNhbiBiZSBhdXRvbWF0aWNhbGx5CitjaGFuZ2VkIHdoZW5ldmVyIFZpbSBlbnRlcnMgb25lIG9mIGl0cyB2YXJpb3VzIG1vZGVzIChlLmcuLCBJbnNlcnQgb3IKK0NvbW1hbmQpLiAgQ3VycmVudGx5LCB0aGUgYXZhaWxhYmxlIHBvaW50ZXJzIGFyZToKKworCWFycm93CQkJYW4gYXJyb3cgcG9pbnRpbmcgbm9ydGh3ZXN0CisJYmVhbQkJCWEgSS1saWtlIHZlcnRpY2FsIGJhcgorCXNpemUJCQlhbiBhcnJvdyBwb2ludGluZyB1cCBhbmQgZG93bgorCWJ1c3kJCQlhIHdyaXN0d2F0Y2gKKwlibGFuawkJCWFuIGludmlzaWJsZSBwb2ludGVyCisJY3Jvc3NoYWlyCQlhIHRoaW4gIisiIHNpZ24KKwloYW5kMQkJCWEgZGFyayBoYW5kIHBvaW50aW5nIG5vcnRoZWFzdAorCWhhbmQyCQkJYSBsaWdodCBoYW5kIHBvaW50aW5nIG5vcnRod2VzdAorCXBlbmNpbAkJCWEgcGVuY2lsIHBvaW50aW5nIHNvdXRoZWFzdAorCXF1ZXN0aW9uCQlxdWVzdGlvbl9hcnJvdworCXJpZ2h0X2Fycm93CQlhbiBhcnJvdyBwb2ludGluZyBub3J0aGVhc3QKKwl1cF9hcnJvdwkJYW4gYXJyb3cgcG9pbnRpbmcgdXB3YXJkcworCitBZGRpdGlvbmFsbHksIGFueSBvZiB0aGUgbW91c2UgcG9pbnRlcnMgdGhhdCBhcmUgYnVpbHQgaW50byBYMTEgbWF5IGJlCit1c2VkIGJ5IHNwZWNpZnlpbmcgYW4gaW50ZWdlciBmcm9tIHRoZSBYMTEvY3Vyc29yZm9udC5oIGluY2x1ZGUgZmlsZS4KKworSWYgYSBuYW1lIGlzIHVzZWQgdGhhdCBleGlzdHMgb24gb3RoZXIgc3lzdGVtcywgYnV0IG5vdCBpbiBYMTEsIHRoZSBkZWZhdWx0CisiYXJyb3ciIHBvaW50ZXIgaXMgdXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBHVEsgdmVyc2lvbgkJCQkJCSpndWktZ3RrKiAqR1RLKyogKkdUSyoKKworVGhlIEdUSyB2ZXJzaW9uIG9mIHRoZSBHVUkgd29ya3MgYSBsaXR0bGUgYml0IGRpZmZlcmVudC4KKworR1RLIGRvZXMgX25vdF8gdXNlIHRoZSB0cmFkaXRpb25hbCBYIHJlc291cmNlIHNldHRpbmdzLiAgVGh1cyBpdGVtcyBpbiB5b3VyCit+Ly5YZGVmYXVsdHMgb3IgYXBwLWRlZmF1bHRzIGZpbGVzIGFyZSBub3QgdXNlZC4KK01hbnkgb2YgdGhlIHRyYWRpdGlvbmFsIFggY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhcmUgbm90IHN1cHBvcnRlZC4gIChlLmcuLAorc3R1ZmYgbGlrZSAtYmcsIC1mZywgZXRjKS4gIFRoZSBvbmVzIHRoYXQgYXJlIHN1cHBvcnRlZCBhcmU6CisKKyAgICBjb21tYW5kIGxpbmUgYXJndW1lbnQgICByZXNvdXJjZSBuYW1lCW1lYW5pbmcgfgorICAgIC1mbiAgb3IgIC1mb250CSAgICAuZm9udAkJZm9udCBuYW1lIGZvciB0aGUgdGV4dAorICAgIC1nZW9tICBvciAgLWdlb21ldHJ5ICAgIC5nZW9tZXRyeQkJc2l6ZSBvZiB0aGUgZ3ZpbSB3aW5kb3cKKyAgICAtcnYgIG9yICAtcmV2ZXJzZQkgICAgKnJldmVyc2VWaWRlbwl3aGl0ZSB0ZXh0IG9uIGJsYWNrIGJhY2tncm91bmQKKyAgICAtZGlzcGxheQkJCQkJZGlzcGxheSB0byBiZSB1c2VkCisgICAgLWZnIC1mb3JlZ3JvdW5kIHtjb2xvcn0JCQlmb3JlZ3JvdW5kIGNvbG9yCisgICAgLWJnIC1iYWNrZ3JvdW5kIHtjb2xvcn0JCQliYWNrZ3JvdW5kIGNvbG9yCisKK1RvIHNldCB0aGUgZm9udCwgc2VlIHwnZ3VpZm9udCd8LiAgRm9yIEdUSywgdGhlcmUncyBhbHNvIGEgbWVudSBvcHRpb24gdGhhdAorZG9lcyB0aGlzLgorCitBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSB0aGVzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCB3aGljaCBhcmUgaGFuZGxlZCBieSBHVEsKK2ludGVybmFsbHkuICBMb29rIGluIHRoZSBHVEsgZG9jdW1lbnRhdGlvbiBmb3IgaG93IHRoZXkgYXJlIHVzZWQ6CisJLS1zeW5jCisJLS1nZGstZGVidWcKKwktLWdkay1uby1kZWJ1ZworCS0tbm8teHNobQkobm90IGluIEdUSysgMikKKwktLXhpbS1wcmVlZGl0CShub3QgaW4gR1RLKyAyKQorCS0teGltLXN0YXR1cwkobm90IGluIEdUSysgMikKKwktLWd0ay1kZWJ1ZworCS0tZ3RrLW5vLWRlYnVnCisJLS1nLWZhdGFsLXdhcm5pbmdzCisJLS1ndGstbW9kdWxlCisJLS1kaXNwbGF5CShHVEsrIGNvdW50ZXJwYXJ0IG9mIC1kaXNwbGF5OyB3b3JrcyB0aGUgc2FtZSB3YXkuKQorCS0tc2NyZWVuCShUaGUgc2NyZWVuIG51bWJlcjsgZm9yIEdUSysgMi4yIG11bHRpaGVhZCBzdXBwb3J0LikKKworVGhlc2UgYXJndW1lbnRzIGFyZSBpZ25vcmVkIHdoZW4gdGhlIHwrbmV0YmVhbnNfaW50Z3wgZmVhdHVyZSBpcyB1c2VkOgorCS14cm0KKwktbWYKKworQXMgZm9yIGNvbG9ycywgVmltJ3MgY29sb3Igc2V0dGluZ3MgKGZvciBzeW50YXggaGlnaGxpZ2h0aW5nKSBpcyBzdGlsbAorZG9uZSB0aGUgdHJhZGl0aW9uYWwgVmltIHdheS4gIFNlZSB8OmhpZ2hsaWdodHwgZm9yIG1vcmUgaGVscC4KKworSWYgeW91IHdhbnQgdG8gc2V0IHRoZSBjb2xvcnMgb2YgcmVtYWluaW5nIGd1aSBjb21wb25lbnRzIChlLmcuLCB0aGUKK21lbnViYXIsIHNjcm9sbGJhciwgd2hhdGV2ZXIpLCB0aG9zZSBhcmUgR1RLIHNwZWNpZmljIHNldHRpbmdzIGFuZCB5b3UKK25lZWQgdG8gc2V0IHRob3NlIHVwIGluIHNvbWUgc29ydCBvZiBndGtyYyBmaWxlLiAgWW91J2xsIGhhdmUgdG8gcmVmZXIKK3RvIHRoZSBHVEsgZG9jdW1lbnRhdGlvbiwgaG93ZXZlciBsaXR0bGUgdGhlcmUgaXMsIG9uIGhvdyB0byBkbyB0aGlzLgorU2VlIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2RvYy9BUEkvMi4wL2d0ay9ndGstUmVzb3VyY2UtRmlsZXMuaHRtbAorZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKwkJCQkJCSpndGstdG9vbHRpcC1jb2xvcnMqCitFeGFtcGxlLCB3aGljaCBzZXRzIHRoZSB0b29sdGlwIGNvbG9ycyB0byBibGFjayBvbiBsaWdodC15ZWxsb3c6ID4KKworCXN0eWxlICJ0b29sdGlwcyIKKwl7CisJCWJnW05PUk1BTF0gPSAiI2ZmZmZjYyIKKwkJZmdbTk9STUFMXSA9ICIjMDAwMDAwIgorCX0KKworCXdpZGdldCAiZ3RrLXRvb2x0aXBzKiIJCXN0eWxlICJ0b29sdGlwcyIKKworV3JpdGUgdGhpcyBpbiB0aGUgZmlsZSB+Ly5ndGtyYyBhbmQgaXQgd2lsbCBiZSB1c2VkIGJ5IEdUSysuICBGb3IgR1RLKyAyCit5b3UgbWlnaHQgaGF2ZSB0byB1c2UgdGhlIGZpbGUgfi8uZ3RrcmMtMi4wIGluc3RlYWQsIGRlcGVuZGluZyBvbiB5b3VyCitkaXN0cmlidXRpb24uCisKK1VzaW5nIFZpbSBhcyBhIEdUSysgcGx1Z2luCQkJCSpndWktZ3RrLXNvY2tldGlkKgorCitXaGVuIHRoZSBHVEsrIHZlcnNpb24gb2YgVmltIHN0YXJ0cyB1cCBub3JtYWxseSwgaXQgY3JlYXRlcyBpdHMgb3duIHRvcCBsZXZlbAord2luZG93ICh0ZWNobmljYWxseSwgYSAnR3RrV2luZG93JykuICBHVEsrIHByb3ZpZGVzIGFuIGVtYmVkZGluZyBmYWNpbGl0eSB3aXRoCitpdHMgR3RrU29ja2V0IGFuZCBHdGtQbHVnIHdpZGdldHMuICBJZiBvbmUgR1RLKyBhcHBsaWNhdGlvbiBjcmVhdGVzIGEKK0d0a1NvY2tldCB3aWRnZXQgaW4gb25lIG9mIGl0cyB3aW5kb3dzLCBhbiBlbnRpcmVseSBkaWZmZXJlbnQgR1RLKyBhcHBsaWNhdGlvbgorbWF5IGVtYmVkIGl0c2VsZiBpbnRvIHRoZSBmaXJzdCBhcHBsaWNhdGlvbiBieSBjcmVhdGluZyBhIHRvcC1sZXZlbCBHdGtQbHVnCit3aWRnZXQgdXNpbmcgdGhlIHNvY2tldCdzIElELgorCitJZiB5b3UgcGFzcyBWaW0gdGhlIGNvbW1hbmQtbGluZSBvcHRpb24gJy0tc29ja2V0aWQnIHdpdGggYSBkZWNpbWFsIG9yCitoZXhhZGVjaW1hbCB2YWx1ZSwgVmltIHdpbGwgY3JlYXRlIGEgR3RrUGx1ZyB3aWRnZXQgdXNpbmcgdGhhdCB2YWx1ZSBpbnN0ZWFkCitvZiB0aGUgbm9ybWFsIEd0a1dpbmRvdy4gIFRoaXMgZW5hYmxlcyBWaW0gdG8gYWN0IGFzIGEgR1RLKyBwbHVnaW4uCisKK1RoaXMgcmVhbGx5IGlzIGEgcHJvZ3JhbW1lcidzIGludGVyZmFjZSwgYW5kIGlzIG9mIG5vIHVzZSB3aXRob3V0IGEgc3VwcG9ydGluZworYXBwbGljYXRpb24gdG8gc3Bhd24gdGhlIFZpbSBjb3JyZWN0bHkuICBGb3IgbW9yZSBkZXRhaWxzIG9uIEdUSysgc29ja2V0cywgc2VlCitodHRwOi8vd3d3Lmd0ay5vcmcvYXBpLworCitOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIHJlcXVpcmVzIHRoZSBsYXRlc3QgR1RLIHZlcnNpb24uICBHVEsgMS4yLjEwIHN0aWxsIGhhcworYSBzbWFsbCBwcm9ibGVtLiAgVGhlIHNvY2tldCBmZWF0dXJlIGhhcyBub3QgeWV0IGJlZW4gdGVzdGVkIHdpdGggR1RLKyAyIC0tCitmZWVsIGZyZWUgdG8gdm9sdW50ZWVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIEdOT01FIHZlcnNpb24JCQkJKmd1aS1nbm9tZSogKkdub21lKiAqR05PTUUqCisKK1RoZSBHTk9NRSBHVUkgd29ya3MganVzdCBsaWtlIHRoZSBHVEsrIHZlcnNpb24uICBTZWUgfEdUSyt8IGFib3ZlIGZvciBob3cgaXQKK3dvcmtzLiAgSXQgbG9va3MgYSBiaXQgZGlmZmVyZW50IHRob3VnaCwgYW5kIGltcGxlbWVudHMgb25lIGltcG9ydGFudCBmZWF0dXJlCit0aGF0J3Mgbm90IGF2YWlsYWJsZSBpbiB0aGUgcGxhaW4gR1RLKyBHVUk6ICBJbnRlcmFjdGlvbiB3aXRoIHRoZSBzZXNzaW9uCittYW5hZ2VyLiB8Z3VpLWdub21lLXNlc3Npb258CisKK1RoZXNlIGFyZSB0aGUgZGlmZmVyZW50IGxvb2tzOgorLSBVc2VzIEdOT01FIGRpYWxvZ3MgKEdOT01FIDEgb25seSkuICBUaGUgR05PTUUgMiBHVUkgdXNlcyB0aGUgc2FtZSBuaWNlCisgIGRpYWxvZ3MgYXMgdGhlIEdUSysgMiB2ZXJzaW9uLgorLSBVc2VzIHRoZSBHTk9NRSBkb2NrLCBzbyB0aGF0IHRoZSB0b29sYmFyIGFuZCBtZW51YmFyIGNhbiBiZSBtb3ZlZCB0bworICBkaWZmZXJlbnQgbG9jYXRpb25zIG90aGVyIHRoYW4gdGhlIHRvcCAoZS5nLiwgdGhlIHRvb2xiYXIgY2FuIGJlIHBsYWNlZCBvbgorICB0aGUgbGVmdCwgcmlnaHQsIHRvcCwgb3IgYm90dG9tKS4gIFRoZSBwbGFjZW1lbnQgb2YgdGhlIG1lbnViYXIgYW5kCisgIHRvb2xiYXIgaXMgb25seSBzYXZlZCBpbiB0aGUgR05PTUUgMiB2ZXJzaW9uLgorLSBUaGF0IG1lYW5zIHRoZSBtZW51YmFyIGFuZCB0b29sYmFyIGhhbmRsZXMgYXJlIGJhY2shICBZZWFoISAgQW5kIHRoZQorICByZXNpemluZyBncmlkIHN0aWxsIHdvcmtzIHRvby4KKworR05PTUUgaXMgYXV0b21hdGljYWxseSBjb21waWxlZCB3aXRoIGlmIGl0IHdhcyBmb3VuZCBieSBjb25maWd1cmUuCisoRklYTUU6IElzIHRoaXMgc3RpbGwgdHJ1ZT8gIFVzZSAtLWVuYWJsZS1nbm9tZS1jaGVjayB0byBmb3JjZSBpdCB0by4pCisKK0dOT01FIHNlc3Npb24gc3VwcG9ydAkJCSpndWktZ25vbWUtc2Vzc2lvbiogKmdub21lLXNlc3Npb24qCisKK09uIGxvZ291dCwgVmltIHNob3dzIHRoZSB3ZWxsLWtub3duIGV4aXQgY29uZmlybWF0aW9uIGRpYWxvZyBpZiBhbnkgYnVmZmVycworYXJlIG1vZGlmaWVkLiAgQ2xpY2tpbmcgW0NhbmNlbF0gd2lsbCBzdG9wIHRoZSBsb2dvdXQgcHJvY2Vzcy4gIE90aGVyd2lzZSB0aGUKK2N1cnJlbnQgc2Vzc2lvbiBpcyBzdG9yZWQgdG8gZGlzayBieSB1c2luZyB0aGUgfDpta3Nlc3Npb258IGNvbW1hbmQsIGFuZAorcmVzdG9yZWQgdGhlIG5leHQgdGltZSB5b3UgbG9nIGluLgorCitUaGUgR05PTUUgc2Vzc2lvbiBzdXBwb3J0IHNob3VsZCBhbHNvIHdvcmsgd2l0aCB0aGUgS0RFIHNlc3Npb24gbWFuYWdlci4KK0lmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyBwbGVhc2UgcmVwb3J0IHRoZW0gYXMgYnVncy4KKworTm90ZTogVGhlIGF1dG9tYXRpYyBzZXNzaW9uIHNhdmUgd29ya3MgZW50aXJlbHkgdHJhbnNwYXJlbnQsIGluIG9yZGVyIHRvCithdm9pZCBjb25mbGljdHMgd2l0aCB5b3VyIG93biBzZXNzaW9uIGZpbGVzLCBzY3JpcHRzIGFuZCBhdXRvY29tbWFuZHMuICBUaGF0CittZWFucyBpbiBkZXRhaWw6CistIFRoZSBzZXNzaW9uIGZpbGUgaXMgc3RvcmVkIHRvIGEgc2VwYXJhdGUgZGlyZWN0b3J5ICh1c3VhbGx5ICRIT01FLy5nbm9tZTIpLgorLSAnc2Vzc2lvbm9wdGlvbnMnIGlzIGlnbm9yZWQsIGFuZCBhIGhhcmRjb2RlZCBzZXQgb2YgYXBwcm9wcmlhdGUgZmxhZ3MgaXMKKyAgdXNlZCBpbnN0ZWFkOiA+CisJYmxhbmssY3VyZGlyLGZvbGRzLGdsb2JhbHMsaGVscCxvcHRpb25zLHdpbnNpemUKKy0gVGhlIGludGVybmFsIHZhcmlhYmxlIHx2OnRoaXNfc2Vzc2lvbnwgaXMgbm90IGNoYW5nZWQgd2hlbiBzdG9yaW5nIHRoZQorICBzZXNzaW9uLiAgQWxzbywgaXQgaXMgcmVzdG9yZWQgdG8gaXRzIG9sZCB2YWx1ZSB3aGVuIGxvZ2dpbmcgaW4gYWdhaW4uCisKK1RoZSBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0aGUgR1VJIHdpbmRvdyBpcyBub3Qgc2F2ZWQgYnkgVmltIHNpbmNlIGRvaW5nIHNvCitpcyB0aGUgd2luZG93IG1hbmFnZXIncyBqb2IuICBCdXQgaWYgY29tcGlsZWQgd2l0aCBHVEsrIDIgc3VwcG9ydCwgVmltIGhlbHBzCit0aGUgV00gdG8gaWRlbnRpZnkgdGhlIHdpbmRvdyBieSByZXN0b3JpbmcgdGhlIHdpbmRvdyByb2xlICh1c2luZyB0aGUgfC0tcm9sZXwKK2NvbW1hbmQgbGluZSBhcmd1bWVudCkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gQ29tcGlsaW5nCQkJCQkJKmd1aS14MTEtY29tcGlsaW5nKgorCitJZiB1c2luZyBYMTEsIFZpbSdzIE1ha2VmaWxlIHdpbGwgYnkgZGVmYXVsdCBmaXJzdCB0cnkgdG8gZmluZCB0aGUgbmVjZXNzYXJ5CitHVEsrIGZpbGVzIG9uIHlvdXIgc3lzdGVtLiAgSWYgdGhlIEdUSysgZmlsZXMgY2Fubm90IGJlIGZvdW5kLCB0aGVuIHRoZSBNb3RpZgorZmlsZXMgd2lsbCBiZSBzZWFyY2hlZCBmb3IuICBGaW5hbGx5LCBpZiB0aGlzIGZhaWxzLCB0aGUgQXRoZW5hIGZpbGVzIHdpbGwgYmUKK3NlYXJjaGVkIGZvci4gIElmIGFsbCB0aHJlZSBmYWlsLCB0aGUgR1VJIHdpbGwgYmUgZGlzYWJsZWQuCisKK0ZvciBHVEsrLCBWaW0ncyBjb25maWd1cmF0aW9uIHByb2Nlc3MgcmVxdWlyZXMgdGhhdCBHVEsrIGJlIHByb3Blcmx5CitpbnN0YWxsZWQuICBUaGF0IGlzLCB0aGUgc2hlbGwgc2NyaXB0ICdndGstY29uZmlnJyBtdXN0IGJlIGluIHlvdXIgUEFUSCwgYW5kCit5b3UgY2FuIGFscmVhZHkgc3VjY2Vzc2Z1bCBjb21waWxlLCBidWlsZCwgYW5kIGV4ZWN1dGUgYSBHVEsrIHByb2dyYW0uICBUaGUKK3JlYXNvbiBmb3IgdGhpcyBpcyBiZWNhdXNlIHRoZSBjb21waWxlciBmbGFncyAoQ0ZMQUdTKSBhbmQgbGluayBmbGFncworKExERkxBR1MpIGFyZSBvYnRhaW5lZCB0aHJvdWdoIHRoZSAnZ3RrLWNvbmZpZycgc2hlbGwgc2NyaXB0LgorCitJZiB5b3Ugd2FudCB0byBidWlsZCB3aXRoIEdUSysgMiBzdXBwb3J0IHBhc3MgdGhlIC0tZW5hYmxlLWd0azItY2hlY2sgYXJndW1lbnQKK3RvIC4vY29uZmlndXJlLiAgT3B0aW9uYWxseSwgc3VwcG9ydCBmb3IgR05PTUUgMiB3aWxsIGJlIGNvbXBpbGVkIGlmIHRoZQorLS1lbmFibGUtZ25vbWUtY2hlY2sgb3B0aW9uIGlzIGFsc28gZ2l2ZW4uICBOb3RlIHRoYXQgdGhlIHN1cHBvcnQgZm9yIEdUSysgMgoraXMgc3RpbGwgZXhwZXJpbWVudGFsLiAgSG93ZXZlciwgbWFueSBwZW9wbGUgaGF2ZSByZXBvcnRlZCB0aGF0IGl0IHdvcmtzIGp1c3QKK2ZpbmUgZm9yIHRoZW0uCisKK090aGVyd2lzZSwgaWYgeW91IGFyZSB1c2luZyBNb3RpZiBvciBBdGhlbmEsIHdoZW4geW91IGhhdmUgdGhlIE1vdGlmIG9yIEF0aGVuYQorZmlsZXMgaW4gYSBkaXJlY3Rvcnkgd2hlcmUgY29uZmlndXJlIGRvZXNuJ3QgbG9vaywgZWRpdCB0aGUgTWFrZWZpbGUgdG8gZW50ZXIKK3RoZSBuYW1lcyBvZiB0aGUgZGlyZWN0b3JpZXMuICBTZWFyY2ggZm9yICJHVUlfSU5DX0xPQyIgZm9yIGFuIGV4YW1wbGUgdG8gc2V0Cit0aGUgTW90aWYgZGlyZWN0b3JpZXMsICJDT05GX09QVF9YIiBmb3IgQXRoZW5hLgorCisJCQkJCQkJKmd1aS14MTEtZ3RrKgorQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCB5b3UgbWF5IHVzZSBlaXRoZXIgR1RLKyB2ZXJzaW9uIDEuMC42IG9yIDEuMi4gIEl0CitpcyBzdWdnZXN0ZWQgdGhhdCB5b3UgdXNlIHYxLjIgc2luY2Ugbm90IGFsbCBvZiBWaW0ncyBHVUkgZmVhdHVyZXMgYXJlIHByZXNlbnQKK2lmIHVzaW5nIHYxLjAuNi4gIEZvciBpbnN0YW5jZSwgdGhlcmUgYXJlIG5vIHRlYXJvZmYgbWVudXMgcHJlc2VudCBpbiB2MS4wLjYuCitVc2luZyBhIHZlcnNpb24gZnJvbSBHVEsrJ3MgQ1ZTIHRyZWUgbWF5IG9yIG1heSBub3Qgd29yaywgYW5kIGlzIHRoZXJlZm9yZSBub3QKK3N1cHBvcnRlZCBhbmQgbm90IHJlY29tbWVuZGVkLgorCitGb3IgdGhlIGV4cGVyaW1lbnRhbCBHVEsrIDIgR1VJLCB1c2luZyB0aGUgbGF0ZXN0IHJlbGVhc2Ugb2YgdGhlIEdUSysgMi4wIG9yCitHVEsrIDIuMiBzZXJpZXMgaXMgcmVjb21tZW5kZWQuICBDVlMgSEVBRCBzZWVtcyB0byB3b3JrIGZpbmUgbW9zdCBvZiB0aW1lIGFzCit3ZWxsLgorCitMYXN0bHksIGFsdGhvdWdoIEdUSysgaGFzIHN1cHBvc2VkbHkgYmVlbiBwb3J0ZWQgdG8gdGhlIFdpbjMyIHBsYXRmb3JtLCB0aGlzCitoYXMgbm90IGJlZW4gdGVzdGVkIHdpdGggVmltIGFuZCBpcyBhbHNvIHVuc3VwcG9ydGVkLiAgQWxzbywgaXQncyB1bmxpa2VseSB0bworZXZlbiBjb21waWxlIHNpbmNlIEdUSysgR1VJIHVzZXMgcGFydHMgb2YgdGhlIGdlbmVyaWMgWDExIGNvZGUuICBUaGlzIG1pZ2h0CitjaGFuZ2UgaW4gZGlzdGFudCBmdXR1cmU7IHBhcnRpY3VsYXJseSBiZWNhdXNlIGdldHRpbmcgcmlkIG9mIHRoZSBYMTEgY2VudHJpYworY29kZSBwYXJ0cyBpcyBhbHNvIHJlcXVpcmVkIGZvciBHVEsrIGZyYW1lYnVmZmVyIHN1cHBvcnQuCisKKwkJCQkJCQkqZ3VpLXgxMS1tb3RpZioKK0ZvciBNb3RpZiwgeW91IG5lZWQgYXQgbGVhc3QgTW90aWYgdmVyc2lvbiAxLjIgYW5kL29yIFgxMVI1LiAgTW90aWYgMi4wIGFuZAorWDExUjYgYXJlIE9LLiAgTW90aWYgMS4xIGFuZCBYMTFSNCBtaWdodCB3b3JrLCBubyBndWFyYW50ZWUgKHRoZXJlIG1heSBiZSBhCitmZXcgcHJvYmxlbXMsIGJ1dCB5b3UgbWlnaHQgbWFrZSBpdCBjb21waWxlIGFuZCBydW4gd2l0aCBhIGJpdCBvZiB3b3JrLCBwbGVhc2UKK3NlbmQgbWUgdGhlIHBhdGNoZXMgaWYgeW91IGRvKS4gIFRoZSBuZXdlc3QgcmVsZWFzZXMgb2YgTGVzc1RpZiBoYXZlIGJlZW4KK3JlcG9ydGVkIHRvIHdvcmsgZmluZSB0b28uCisKKwkJCQkJCQkqZ3VpLXgxMS1hdGhlbmEqCitUaGUgQXRoZW5hIHZlcnNpb24gdXNlcyB0aGUgWGF3IHdpZGdldCBzZXQgYnkgZGVmYXVsdC4gIElmIHlvdSBoYXZlIHRoZSAzRAordmVyc2lvbiwgeW91IG1pZ2h0IHdhbnQgdG8gbGluayB3aXRoIFhhdzNkIGluc3RlYWQuICBUaGlzIHdpbGwgbWFrZSB0aGUKK21lbnVzIGxvb2sgYSBiaXQgYmV0dGVyLiAgRWRpdCB0aGUgTWFrZWZpbGUgYW5kIGxvb2sgZm9yICJYQVdfTElCIi4gIFRoZQorc2Nyb2xsYmFycyB3aWxsIHJlbWFpbiB0aGUgc2FtZSwgYmVjYXVzZSBWaW0gaGFzIGl0cyBvd24sIHdoaWNoIGFyZSBhbHJlYWR5CiszRCAoaW4gZmFjdCwgdGhleSBsb29rIG1vcmUgbGlrZSBNb3RpZikuCisKKwkJCQkJCQkqZ3VpLXgxMS1uZVh0YXcqCitUaGUgbmVYdGF3IHZlcnNpb24gaXMgbW9zdGx5IGxpa2UgQXRoZW5hLCBidXQgdXNlcyBkaWZmZXJlbnQgd2lkZ2V0cy4KKworCQkJCQkJCSpndWkteDExLW1pc2MqCitJbiBnZW5lcmFsLCBkbyBub3QgdHJ5IHRvIG1peCBmaWxlcyBmcm9tIGRpZmZlcmVudCBHVEsrLCBNb3RpZiwgQXRoZW5hIGFuZCBYMTEKK3ZlcnNpb25zLiAgVGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zLiAgRm9yIGV4YW1wbGUsIHVzaW5nIGhlYWRlciBmaWxlcyBmb3IKK1gxMVI1IHdpdGggYSBsaWJyYXJ5IGZvciBYMTFSNiBwcm9iYWJseSBkb2Vzbid0IHdvcmsgKGFsdGhvdWdoIHRoZSBsaW5raW5nCit3b24ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UsIFZpbSB3aWxsIGNyYXNoIGxhdGVyKS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBYMTEgc2VsZWN0aW9uIG1lY2hhbmlzbQkJCQkqeDExLXNlbGVjdGlvbioKKworSWYgdXNpbmcgWDExLCBpbiBlaXRoZXIgdGhlIEdVSSBvciBhbiB4dGVybSB3aXRoIGFuIFgxMS1hd2FyZSBWaW0sIHRoZW4gVmltCitwcm92aWRlcyB2YXJpZWQgYWNjZXNzIHRvIHRoZSBYMTEgc2VsZWN0aW9uIGFuZCBjbGlwYm9hcmQuICBUaGVzZSBhcmUgYWNjZXNzZWQKK2J5IHVzaW5nIHRoZSB0d28gc2VsZWN0aW9uIHJlZ2lzdGVycyAiKiBhbmQgIisuCisKK1gxMSBwcm92aWRlcyB0d28gYmFzaWMgdHlwZXMgb2YgZ2xvYmFsIHN0b3JlLCBzZWxlY3Rpb25zIGFuZCBjdXQtYnVmZmVycywKK3doaWNoIGRpZmZlciBpbiBvbmUgaW1wb3J0YW50IGFzcGVjdDogc2VsZWN0aW9ucyBhcmUgIm93bmVkIiBieSBhbgorYXBwbGljYXRpb24sIGFuZCBkaXNhcHBlYXIgd2hlbiB0aGF0IGFwcGxpY2F0aW9uIChlLmcuLCBWaW0pIGV4aXRzLCB0aHVzCitsb3NpbmcgdGhlIGRhdGEsIHdoZXJlYXMgY3V0LWJ1ZmZlcnMsIGFyZSBzdG9yZWQgd2l0aGluIHRoZSBYLXNlcnZlciBpdHNlbGYKK2FuZCByZW1haW4gdW50aWwgd3JpdHRlbiBvdmVyIG9yIHRoZSBYLXNlcnZlciBleGl0cyAoZS5nLiwgdXBvbiBsb2dnaW5nIG91dCkuCisKK1RoZSBjb250ZW50cyBvZiBzZWxlY3Rpb25zIGFyZSBoZWxkIGJ5IHRoZSBvcmlnaW5hdGluZyBhcHBsaWNhdGlvbiAoZS5nLiwgdXBvbgorYSBjb3B5KSwgYW5kIG9ubHkgcGFzc2VkIG9uIHRvIGFub3RoZXIgYXBwbGljYXRpb24gd2hlbiB0aGF0IG90aGVyIGFwcGxpY2F0aW9uCithc2tzIGZvciB0aGVtIChlLmcuLCB1cG9uIGEgcGFzdGUpLgorCitUaGUgY29udGVudHMgb2YgY3V0LWJ1ZmZlcnMgYXJlIGltbWVkaWF0ZWx5IHdyaXR0ZW4gdG8sIGFuZCBhcmUgdGhlbgorYWNjZXNzaWJsZSBkaXJlY3RseSBmcm9tIHRoZSBYLXNlcnZlciwgd2l0aG91dCBjb250YWN0aW5nIHRoZSBvcmlnaW5hdGluZworYXBwbGljYXRpb24uCisKKwkJCQkJCQkqcXVvdGVwbHVzKiAqcXVvdGUrKgorVGhlcmUgYXJlIHRocmVlIGRvY3VtZW50ZWQgWCBzZWxlY3Rpb25zOiBQUklNQVJZICh3aGljaCBpcyBleHBlY3RlZCB0bworcmVwcmVzZW50IHRoZSBjdXJyZW50IHZpc3VhbCBzZWxlY3Rpb24gLSBhcyBpbiBWaW0ncyBWaXN1YWwgbW9kZSksIFNFQ09OREFSWQorKHdoaWNoIGlzIGlsbC1kZWZpbmVkKSBhbmQgQ0xJUEJPQVJEICh3aGljaCBpcyBleHBlY3RlZCB0byBiZSB1c2VkIGZvcgorY3V0LCBjb3B5IGFuZCBwYXN0ZSBvcGVyYXRpb25zKS4KKworT2YgdGhlc2UgdGhyZWUsIFZpbSB1c2VzIFBSSU1BUlkgd2hlbiByZWFkaW5nIGFuZCB3cml0aW5nIHRoZSAiKiByZWdpc3RlcgorKGhlbmNlIHdoZW4gdGhlIFgxMSBzZWxlY3Rpb25zIGFyZSBhdmFpbGFibGUsIFZpbSBzZXRzIGEgZGVmYXVsdCB2YWx1ZSBmb3IKK3wnY2xpcGJvYXJkJ3wgb2YgImF1dG9zZWxlY3QiKSwgYW5kIENMSVBCT0FSRCB3aGVuIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlICIrCityZWdpc3Rlci4gIFZpbSBkb2VzIG5vdCBhY2Nlc3MgdGhlIFNFQ09OREFSWSBzZWxlY3Rpb24uCisKK0V4YW1wbGVzOiAoYXNzdW1pbmcgdGhlIGRlZmF1bHQgb3B0aW9uIHZhbHVlcykKKy0gU2VsZWN0IGFuIFVSTCBpbiBWaXN1YWwgbW9kZSBpbiBWaW0uICBHbyB0byBhIHRleHQgZmllbGQgaW4gTmV0c2NhcGUgYW5kCisgIGNsaWNrIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uLiAgVGhlIHNlbGVjdGVkIHRleHQgd2lsbCBiZSBpbnNlcnRlZAorICAoaG9wZWZ1bGx5ISkuCistIFNlbGVjdCBzb21lIHRleHQgaW4gTmV0c2NhcGUgYnkgZHJhZ2dpbmcgd2l0aCB0aGUgbW91c2UuICBHbyB0byBWaW0gYW5kCisgIHByZXNzIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uOiBUaGUgc2VsZWN0ZWQgdGV4dCBpcyBpbnNlcnRlZC4KKy0gU2VsZWN0IHNvbWUgdGV4dCBpbiBWaW0gYW5kIGRvICIreS4gIEdvIHRvIE5ldHNjYXBlLCBzZWxlY3Qgc29tZSB0ZXh0IGluIGEKKyAgdGV4dGZpZWxkIGJ5IGRyYWdnaW5nIHdpdGggdGhlIG1vdXNlLiAgTm93IHVzZSB0aGUgcmlnaHQgbW91c2UgYnV0dG9uIGFuZAorICBzZWxlY3QgIlBhc3RlIiBmcm9tIHRoZSBwb3B1cCBtZW51LiAgVGhlIHNlbGVjdGVkIHRleHQgaXMgb3ZlcndyaXR0ZW4gYnkgdGhlCisgIHRleHQgZnJvbSBWaW0uCitOb3RlIHRoYXQgdGhlIHRleHQgaW4gdGhlICIrIHJlZ2lzdGVyIHJlbWFpbnMgYXZhaWxhYmxlIHdoZW4gbWFraW5nIGEgVmlzdWFsCitzZWxlY3Rpb24sIHdoaWNoIG1ha2VzIG90aGVyIHRleHQgYXZhaWxhYmxlIGluIHRoZSAiKiByZWdpc3Rlci4gIFRoYXQgYWxsb3dzCitvdmVyd3JpdGluZyBzZWxlY3RlZCB0ZXh0LgorCQkJCQkJCSp4MTEtY3V0LWJ1ZmZlcioKK1RoZXJlIGFyZSwgYnkgZGVmYXVsdCwgOCBjdXQtYnVmZmVyczogQ1VUX0JVRkZFUjAgdG8gQ1VUX0JVRkZFUjcuICBWaW0gb25seQordXNlcyBDVVRfQlVGRkVSMCwgd2hpY2ggaXMgdGhlIG9uZSB0aGF0IHh0ZXJtIHVzZXMgYnkgZGVmYXVsdC4KKworV2hlbmV2ZXIgVmltIGlzIGFib3V0IHRvIGJlY29tZSB1bmF2YWlsYWJsZSAoZWl0aGVyIHZpYSBleGl0aW5nIG9yIGJlY29taW5nCitzdXNwZW5kZWQpLCBhbmQgdGh1cyB1bmFibGUgdG8gcmVzcG9uZCB0byBhbm90aGVyIGFwcGxpY2F0aW9uJ3Mgc2VsZWN0aW9uCityZXF1ZXN0LCBpdCB3cml0ZXMgdGhlIGNvbnRlbnRzIG9mIGFueSBvd25lZCBzZWxlY3Rpb24gdG8gQ1VUX0JVRkZFUjAuICBJZiB0aGUKKyIrIENMSVBCT0FSRCBzZWxlY3Rpb24gaXMgb3duZWQgYnkgVmltLCB0aGVuIHRoaXMgaXMgd3JpdHRlbiBpbiBwcmVmZXJlbmNlLAorb3RoZXJ3aXNlIGlmIHRoZSAiKiBQUklNQVJZIHNlbGVjdGlvbiBpcyBvd25lZCBieSBWaW0sIHRoZW4gdGhhdCBpcyB3cml0dGVuLgorCitTaW1pbGFybHksIHdoZW4gVmltIHRyaWVzIHRvIHBhc3RlIGZyb20gIiogb3IgIisgKGVpdGhlciBleHBsaWNpdGx5LCBvciwgaW4KK3RoZSBjYXNlIG9mIHRoZSAiKiByZWdpc3Rlciwgd2hlbiB0aGUgbWlkZGxlIG1vdXNlIGJ1dHRvbiBpcyBjbGlja2VkKSwgaWYgdGhlCityZXF1ZXN0ZWQgWCBzZWxlY3Rpb24gaXMgZW1wdHkgb3IgdW5hdmFpbGFibGUsIFZpbSByZXZlcnRzIHRvIHJlYWRpbmcgdGhlCitjdXJyZW50IHZhbHVlIG9mIHRoZSBDVVRfQlVGRkVSMC4KKworTm90ZSB0aGF0IHdoZW4gdGV4dCBpcyBjb3BpZWQgdG8gQ1VUX0JVRkZFUjAgaW4gdGhpcyB3YXksIHRoZSB0eXBlIG9mCitzZWxlY3Rpb24gKGNoYXJhY3RlciwgbGluZSBvciBibG9jaykgaXMgYWx3YXlzIGxvc3QsIGV2ZW4gaWYgaXQgaXMgYSBWaW0gd2hpY2gKK2xhdGVyIHBhc3RlcyBpdC4KKworWHRlcm0sIGJ5IGRlZmF1bHQsIGFsd2F5cyB3cml0ZXMgdmlzaWJsZSBzZWxlY3Rpb25zIHRvIGJvdGggUFJJTUFSWSBhbmQKK0NVVF9CVUZGRVIwLiAgV2hlbiBpdCBwYXN0ZXMsIGl0IHVzZXMgUFJJTUFSWSBpZiB0aGlzIGlzIGF2YWlsYWJsZSwgb3IgZWxzZQorZmFsbHMgYmFjayB1cG9uIENVVF9CVUZGRVIwLiAgRm9yIHRoaXMgcmVhc29uLCB3aGVuIGN1dHRpbmcgYW5kIHBhc3RpbmcKK2JldHdlZW4gVmltIGFuZCBhbiB4dGVybSwgeW91IHNob3VsZCB1c2UgdGhlICIqIHJlZ2lzdGVyLiAgWHRlcm0gZG9lc24ndCB1c2UKK0NMSVBCT0FSRCwgdGh1cyB0aGUgIisgZG9lc24ndCB3b3JrIHdpdGggeHRlcm0uCisKK01vc3QgbmV3ZXIgYXBwbGljYXRpb25zIHdpbGwgcHJvdmlkZSB0aGVpciBjdXJyZW50IHNlbGVjdGlvbiB2aWEgUFJJTUFSWSAoIiopCithbmQgdXNlIENMSVBCT0FSRCAoIispIGZvciBjdXQvY29weS9wYXN0ZSBvcGVyYXRpb25zLiAgWW91IHRodXMgaGF2ZSBhY2Nlc3MgdG8KK2JvdGggYnkgY2hvb3NpbmcgdG8gdXNlIGVpdGhlciBvZiB0aGUgIiogb3IgIisgcmVnaXN0ZXJzLgorCisKKyB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2hhbmd1bGluLnR4dCBiL3J1bnRpbWUvZG9jL2hhbmd1bGluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTEzM2NiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvaGFuZ3VsaW4udHh0CkBAIC0wLDAgKzEsMTAxIEBACisqaGFuZ3VsaW4udHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDEgU2VwIDAzCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IENoaS1EZW9rIEh3YW5nIGFuZCBTdW5nLUh5dW4gTmFtCisKK0ludHJvZHVjdGlvbgkJCQkJKmhhbmd1bCoKKy0tLS0tLS0tLS0tLQorSXQgaXMgdG8gaW5wdXQgaGFuZ3VsLCB0aGUgS29yZWFuIGxhbmd1YWdlLCB3aXRoIFZJTSBHVUkgdmVyc2lvbi4KK0lmIHlvdSBoYXZlIGEgWElNIHByb2dyYW0sIHlvdSBjYW4gdXNlIGFub3RoZXIgfCt4aW18IGZlYXR1cmUuCitCYXNpY2FsbHksIGl0IGlzIGZvciB3aG9tIGhhcyBubyBYSU0gcHJvZ3JhbS4KKworQ29tcGlsZQorLS0tLS0tLQorTmV4dCBpcyBhIGJhc2ljIG9wdGlvbi4gWW91IGNhbiBhZGQgYW55IG90aGVyIGNvbmZpZ3VyZSBvcHRpb24uID4KKworICAgLi9jb25maWd1cmUgLS13aXRoLXggLS1lbmFibGUtbXVsdGlieXRlIC0tZW5hYmxlLWZvbnRzZXQgLS1lbmFibGUtaGFuZ3VsaW5wdXQKKworQW5kIHlvdSBzaG91bGQgY2hlY2sgdGhlIGZlYXR1cmUuaC4gSWYgfCtoYW5ndWxfaW5wdXR8IGZlYXR1cmUgaXMgZW5hYmxlZAorYnkgY29uZmlndXJlLCB5b3UgY2FuIHNlbGVjdCBtb3JlIG9wdGlvbnMgc3VjaCBhcyBrZXlib2FyZCB0eXBlLCAyIGJ1bHNpaworb3IgMyBidWxzaWsuIFlvdSBjYW4gZmluZCBrZXl3b3JkcyBsaWtlIG5leHQgaW4gdGhlcmUuID4KKworCSNkZWZpbmUgSEFOR1VMX0RFRkFVTFRfS0VZQk9BUkQgMgorCSNkZWZpbmUgRVNDX0NIR19UT19FTkdfTU9ERQorCS8qICNkZWZpbmUgWF9MT0NBTEUgKi8KKwkvKiAjZGVmaW5lIFNMT1dfWFNFUlZFUiAqLworCitFbnZpcm9ubWVudCB2YXJpYWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IHNob3VsZCBzZXQgTEFORyB2YXJpYWJsZSB0byBLb3JlYW4gbG9jYWxlIHN1Y2ggYXMga28gb3Iga29fS1IuZXVjLgorSWYgeW91IHNldCBMQ19BTEwgdmFyaWFibGUsIGl0IHNob3VsZCBiZSBzZXQgdG8gS29yZWFuIGxvY2FsZSBhbHNvLgorCitWSU0gcmVzb3VyY2UKKy0tLS0tLS0tLS0tLQorWW91IHNob3VsZCBhZGQgbmV4dHMgdG8geW91ciBnbG9iYWwgdmltcmMgKCRIT01FLy52aW1yYykuID4KKworCTpzZXQgZmlsZWVuY29kaW5nPWtvcmVhCisKK0tleWJvYXJkCistLS0tLS0tLQorWW91IGNhbiBjaGFuZ2Uga2V5Ym9hcmQgdHlwZSAoMiBidWxzaWsgb3IgMyBidWxzaWspIHVzaW5nIFZJTV9LRVlCT0FSRAorb3IgSEFOR1VMX0tFWUJPQVJEX1RZUEUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBGb3Igc2gsIGp1c3QgZG8gKDIgYnVsc2lrKTogPgorCisgICAgZXhwb3J0IFZJTV9LRVlCT0FSRD0iMiIKK29yID4KKyAgICBleHBvcnQgSEFOR1VMX0tFWUJPQVJEX1RZUEU9IjIiCisKK0lmIGJvdGggYXJlIHNldCwgVklNX0tFWUJPQVJEIGhhcyBoaWdoZXIgcHJpb3JpdHkuCisKK0hhbmd1bCBGb250cworLS0tLS0tLS0tLS0tCitZb3UgY2FuIHNldCB0ZXh0IGZvbnQgdXNpbmcgJEhPTUUvLlhkZWZhdWx0cyBvciAkSE9NRS8uZ3ZpbXJjLgorQnV0IHRvIHVzZSBIYW5ndWwsIHlvdSBzaG91bGQgc2V0ICdndWlmb250c2V0JyBpbiB5b3VyIHZpbXJjLgorCiskSE9NRS8uWGRlZmF1bHRzOiA+CisgICAgVmltLmZvbnQ6IGVuZ2xpc2hfZm9udAorCisgICAgISBOZXh0cyBhcmUgZm9yIGhhbmd1bCBtZW51IHdpdGggQXRoZW5hCisgICAgKmludGVybmF0aW9uYWw6IFRydWUKKyAgICBWaW0qZm9udFNldDogZW5nbGlzaF9mb250LGhhbmd1bF9mb250CisKKyAgICAhIE5leHRzIGFyZSBmb3IgaGFuZ3VsIG1lbnUgd2l0aCBNb3RpZgorICAgICppbnRlcm5hdGlvbmFsOiBUcnVlCisgICAgVmltKmZvbnRMaXN0OiBlbmdsaXNoX2ZvbnQ7aGFuZ3VsX2ZvbnQ6CisKKyRIT01FLy5ndmltcmM6ID4KKyAgICBzZXQgZ3VpZm9udHNldD1lbmdsaXNoX2ZvbnQsaGFuZ3VsX2ZvbnQKKworYXR0ZW50aW9uISB0aGUgLCAoY29tbWEpIG9yIDsgKHNlbWljb2xvbikKKworQW5kIHRoZXJlIHNob3VsZCBiZSBubyAnOnNldCBndWlmb250Jy4gSWYgaXQgZXhpc3RzLCB0aGVuIEd2aW0gaWdub3JlcworJzpzZXQgZ3VpZm9udHNldCcuIEl0IG1lYW5zIFZJTSBydW5zIHdpdGhvdXQgZm9udHNldCBzdXBwb3J0aW5nLgorU28sIHlvdSBjYW4gc2VlIG9ubHkgRW5nbGlzaC4gSGFuZ3VsIGRvZXMgbm90IGJlIGNvcnJlY3RseSBkaXNwbGF5ZWQuCisKK0FmdGVyICdmb250c2V0JyBmZWF0dXJlIGlzIGVuYWJsZWQsIFZJTSBkb2VzIG5vdCBhbGxvdyB1c2luZyAnZm9udCcuCitGb3IgZXhhbXBsZSwgaWYgeW91IHVzZSA+CisgICA6c2V0IGd1aWZvbnRzZXQ9ZW5nX2ZvbnQseW91cl9mb250CitpbiB5b3VyIC5ndmltcmMsIHRoZW4geW91IHNob3VsZCBkbyBmb3Igc3ludGF4ID4KKyAgIDpoaSBDb21tZW50IGd1aWZnPUN5YW4gZm9udD1hbm90aGVyX2VuZ19mb250LGFub3RoZXJfeW91cl9mb250CitJZiB5b3UganVzdCBkbyA+CisgICA6aGkgQ29tbWVudCBmb250PWFub3RoZXJfZW5nX2ZvbnQKK3RoZW4geW91IGNhbiBzZWUgYSBHT09EIGVycm9yIG1lc3NhZ2UuIEJlIGNhcmVmdWwhCisKK2hhbmd1bF9mb250IHdpZHRoIHNob3VsZCBiZSB0d2ljZSB0aGFuIGVuZ2xpc2hfZm9udCB3aWR0aC4KKworVW5zdXBwb3J0ZWQgRmVhdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorSm9oYWIgZm9udCBub3QgeWV0IHN1cHBvcnRlZC4gQW5kIEkgZG9uJ3QgaGF2ZSBhbnkgcGxhbi4KK0lmIHlvdSByZWFsbHkgd2FudCB0byB1c2Ugam9oYWIgZm9udCwgeW91IGNhbiB1c2UgdGhlCitoYW5ndWxkcmF3LmMgaW4gZ2F1IHBhY2thZ2UuCisKK0hhbmphIGlucHV0IG5vdCB5ZXQgc3VwcG9ydGVkLiBBbmQgSSBkb24ndCBoYXZlIGFueSBwbGFuLgorSWYgeW91IHJlYWxseSB3YW50IHRvIGlucHV0IGhhbmphLCBqdXN0IHVzZSBWSU0gd2l0aCBoYW50ZXJtLgorCitCdWcgb3IgQ29tbWVudAorLS0tLS0tLS0tLS0tLS0KK1NlbmQgY29tbWVudHMsIHBhdGNoZXMgYW5kIHN1Z2dlc3Rpb25zIHRvOgorCisJCQkJICAgIENoaS1EZW9rIEh3YW5nIDxod2FuZ0BtaXppLmNvLmtyPgorCQkJCSAgICBOYW0gU3VuZ0h5dW4gPG5hbXNoQGxnZS5jb20+CisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9oZWJyZXcudHh0IGIvcnVudGltZS9kb2MvaGVicmV3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTk1ZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvaGVicmV3LnR4dApAQCAtMCwwICsxLDE0NSBAQAorKmhlYnJldy50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAzIE1heSAxMQorCisKKwkgICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBSb24gQWFyb24gKGFuZCBBdm5lciBMb3R0ZW0pCisKKworSGVicmV3IExhbmd1YWdlIHN1cHBvcnQgKG9wdGlvbnMgJiBtYXBwaW5nKSBmb3IgVmltCQkqaGVicmV3KgorCitUaGUgc3VwcG9ydGluZyAncmlnaHRsZWZ0JyBmdW5jdGlvbmFsaXR5IHdhcyBvcmlnaW5hbGx5IGNyZWF0ZWQgYnkgQXZuZXIKK0xvdHRlbToKKyAgIEUtbWFpbDogYWxvdHRlbUBpaWwuaW50ZWwuY29tCisgICBQaG9uZTogICs5NzItNC04MzA3MzIyCisKK1JvbiBBYXJvbiA8cm9uQHJvbndhcmUub3JnPiBpcyBjdXJyZW50bHkgaGVscGluZyBzdXBwb3J0IHRoZXNlIGZlYXR1cmVzLgorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CisKK0FsbCB0aGlzIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlIHwrcmlnaHRsZWZ0fCBmZWF0dXJlIHdhcyBlbmFibGVkIGF0Citjb21waWxlIHRpbWUuCisKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KK0hlYnJldy1zcGVjaWZpYyBvcHRpb25zIGFyZSAnaGttYXAnLCAnaGttYXBwJyAna2V5bWFwJz1oZWJyZXcgYW5kICdhbGVwaCcuCitIZWJyZXctdXNlZnVsIG9wdGlvbnMgYXJlICdkZWxjb21iaW5lJywgJ2FsbG93cmV2aW5zJywgJ3JldmlucycsICdyaWdodGxlZnQnCithbmQgJ3JpZ2h0bGVmdGNtZCcuCisKK1RoZSAncmlnaHRsZWZ0JyBtb2RlIHJldmVyc2VzIHRoZSBkaXNwbGF5IG9yZGVyLCBzbyBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQKK2Zyb20gcmlnaHQgdG8gbGVmdCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBsZWZ0IHRvIHJpZ2h0LiAgVGhpcyBpcyB1c2VmdWwKK3ByaW1hcmlseSB3aGVuIGVkaXRpbmcgSGVicmV3IG9yIG90aGVyIE1pZGRsZS1FYXN0ZXJuIGxhbmd1YWdlcy4KK1NlZSB8cmlsZWZ0LnR4dHwgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworRGV0YWlscworLS0tLS0tLS0tLS0tLS0KKysgIE9wdGlvbnM6CisgICArICAncmlnaHRsZWZ0JyAoJ3JsJykgc2V0cyB3aW5kb3cgb3JpZW50YXRpb24gdG8gcmlnaHQtdG8tbGVmdC4gIFRoaXMgbWVhbnMKKyAgICAgIHRoYXQgdGhlIGxvZ2ljYWwgdGV4dCAnQUJDJyB3aWxsIGJlIGRpc3BsYXllZCBhcyAnQ0JBJywgYW5kIHdpbGwgc3RhcnQKKyAgICAgIGRyYXdpbmcgYXQgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvdywgbm90IHRoZSBsZWZ0IGVkZ2UuCisgICArICAnaGttYXAnICgnaGsnKSBzZXRzIGtleWJvYXJkIG1hcHBpbmcgdG8gSGVicmV3LCBpbiBpbnNlcnQvcmVwbGFjZSBtb2Rlcy4KKyAgICsgICdhbGVwaCcgKCdhbCcpLCBudW1lcmljLCBob2xkcyB0aGUgZGVjaW1hbCBjb2RlIG9mIEFsZXBoLCBmb3Iga2V5Ym9hcmQKKyAgICAgIG1hcHBpbmcuCisgICArICAnaGttYXBwJyAoJ2hrcCcpIHNldHMga2V5Ym9hcmQgbWFwcGluZyB0byAncGhvbmV0aWMgaGVicmV3JworCisgICBOT1RFOiB0aGVzZSB0aHJlZSAoJ2hrbWFwJywgJ2hrbWFwcCcgYW5kICdhbGVwaCcpIGFyZSBvYnNvbGV0ZS4gIFlvdSBzaG91bGQKKwkgdXNlICI6c2V0IGtleW1hcD1oZWJyZXdwIiBpbnN0ZWFkLgorCisgICArICAnZGVsY29tYmluZScgKCdkZWNvJyksIGJvb2xlYW4sIGlmIGVkaXRpbmcgVVRGLTggZW5jb2RlZCBIZWJyZXcsIGFsbG93cworICAgICAgb25lIHRvIHJlbW92ZSB0aGUgbmlxdWQgb3IgdGVgYW1pbSBieSBwcmVzc2luZyAneCcgb24gYSBjaGFyYWN0ZXIgKHdpdGgKKyAgICAgIGFzc29jaWF0ZWQgbmlxdWQpLgorCisgICArICAncmlnaHRsZWZ0Y21kJyAoJ3JsYycpIG1ha2VzIHRoZSBjb21tYW5kLXByb21wdCBmb3Igc2VhcmNoZXMgc2hvdyB1cCBvbgorICAgICAgdGhlIHJpZ2h0IHNpZGUuICBJdCBvbmx5IHRha2VzIGVmZmVjdCBpZiB0aGUgd2luZG93IGlzICdyaWdodGxlZnQnLgorCisrICBFbmNvZGluZzoKKyAgICsgIFVuZGVyIFVuaXgsIElTTyA4ODU5LTggZW5jb2RpbmcgKEhlYnJldyBsZXR0ZXJzIGNvZGVzOiAyMjQtMjUwKS4KKyAgICsgIFVuZGVyIE1TIERPUywgUEMgZW5jb2RpbmcgKEhlYnJldyBsZXR0ZXJzIGNvZGVzOiAxMjgtMTU0KS4KKyAgICAgIFRoZXNlIGFyZSBkZWZhdWx0cywgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgJ2FsZXBoJyBvcHRpb24uCisgICArICBZb3Ugc2hvdWxkIHByZWZlciB1c2luZyBVVEY4LCBhcyBpdCBzdXBwb3J0cyB0aGUgY29tYmluaW5nLWNoYXJhY3RlcnMKKyAgICAgICgnZGVjbycgZG9lcyBub3RoaW5nIGlmIFVURjggZW5jb2RpbmcgaXMgbm90IGFjdGl2ZSkuCisKKysgIFZpbSBhcmd1bWVudHM6CisgICArICAndmltIC1IIGZpbGUnIHN0YXJ0cyBlZGl0aW5nIGEgSGVicmV3IGZpbGUsIGkuZS4gJ3JpZ2h0bGVmdCcgYW5kICdoa21hcCcKKyAgICAgIGFyZSBzZXQuCisKKysgIEtleWJvYXJkOgorICAgKyAgVGhlICdhbGxvd3Jldmlucycgb3B0aW9uIGVuYWJsZXMgdGhlIENUUkwtXyBjb21tYW5kIGluIEluc2VydCBtb2RlIGFuZAorICAgICAgaW4gQ29tbWFuZC1saW5lIG1vZGUuCisKKyAgICsgIENUUkwtXyBpbiBpbnNlcnQvcmVwbGFjZSBtb2RlcyB0b2dnbGVzICdyZXZpbnMnIGFuZCAnaGttYXAnIGFzIGZvbGxvd3M6CisKKyAgICAgIFdoZW4gaW4gcmlnaHRsZWZ0IHdpbmRvdywgJ3JldmlucycgYW5kICdub2hrbWFwJyBhcmUgdG9nZ2xlZCwgc2luY2UKKyAgICAgIEVuZ2xpc2ggd2lsbCBsaWtlbHkgYmUgaW5zZXJ0ZWQgaW4gdGhpcyBjYXNlLgorCisgICAgICBXaGVuIGluIG5vcmlnaHRsZWZ0IHdpbmRvdywgJ3JldmlucycgJ2hrbWFwJyBhcmUgdG9nZ2xlZCwgc2luY2UgSGVicmV3CisgICAgICB3aWxsIGxpa2VseSBiZSBpbnNlcnRlZCBpbiB0aGlzIGNhc2UuCisKKyAgICAgIENUUkwtXyBtb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIHR5cGVkIHRleHQuCisKKyAgICsgIENUUkwtXyBpbiBjb21tYW5kIG1vZGUgb25seSB0b2dnbGVzIGtleWJvYXJkIG1hcHBpbmcgKHNlZSBCdWdzIGJlbG93KS4KKyAgICAgIFRoaXMgc2V0dGluZyBpcyBpbmRlcGVuZGVudCBvZiAnaGttYXAnIG9wdGlvbiwgd2hpY2ggb25seSBhcHBsaWVzIHRvCisgICAgICBpbnNlcnQvcmVwbGFjZSBtb2RlLgorCisgICAgICBOb3RlOiBPbiBzb21lIGtleWJvYXJkcywgQ1RSTC1fIGlzIG1hcHBlZCB0byBDVFJMLT8uCisKKyAgICsgIEtleWJvYXJkIG1hcHBpbmcgd2hpbGUgJ2hrbWFwJyBpcyBzZXQgKHN0YW5kYXJkIElzcmFlbGkga2V5Ym9hcmQpOgorCisJcSB3IGUgciB0IHkgdSBpIG8gcAorCS8gJyDXpyDXqCDXkCDXmCDXlSDXnyDXnSDXpAorCisJIGEgcyBkIGYgZyBoIGogayBsIDsgJworCSDXqSDXkyDXkiDXmyDXoiDXmSDXlyDXnCDXmiDXoyAsCisKKwkgIHogeCBjIHYgYiBuIG0gLCAuIC8KKwkgINeWINehINeRINeUINegINeeINemINeqINelIC4KKworICAgICAgVGhpcyBpcyBhbHNvIHRoZSBrZXltYXAgd2hlbiAna2V5bWFwPWhlYnJldycgaXMgc2V0LiAgVGhlIGFkdmFudGFnZSBvZgorICAgICAgJ2tleW1hcCcgaXMgdGhhdCBpdCB3b3JrcyBwcm9wZXJseSB3aGVuIHVzaW5nIFVURjgsIGUuZy4gaXQgaW5zZXJ0cyB0aGUKKyAgICAgIGNvcnJlY3QgY2hhcmFjdGVyczsgJ2hrbWFwJyBkb2VzIG5vdC4gIFRoZSAna2V5bWFwJyBrZXlib2FyZCBjYW4gYWxzbworICAgICAgaW5zZXJ0IG5pcXVkIGFuZCB0ZWBhbWltLiAgVG8gc2VlIHdoYXQgdGhvc2UgbWFwcGluZ3MgYXJlLGxvb2sgYXQgdGhlCisgICAgICBrZXltYXAgZmlsZSAnaGVicmV3LnZpbScgZXRjLgorCisKK1R5cGluZyBiYWNrd2FyZHMKKworSWYgdGhlICdyZXZpbnMnIChyZXZlcnNlIGluc2VydCkgb3B0aW9uIGlzIHNldCwgaW5zZXJ0aW5nIGhhcHBlbnMgYmFja3dhcmRzLgorVGhpcyBjYW4gYmUgdXNlZCB0byB0eXBlIEhlYnJldy4gIFdoZW4gaW5zZXJ0aW5nIGNoYXJhY3RlcnMgdGhlIGN1cnNvciBpcyBub3QKK21vdmVkIGFuZCB0aGUgdGV4dCBtb3ZlcyByaWdodHdhcmRzLiAgQSA8QlM+IGRlbGV0ZXMgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUKK2N1cnNvci4gIENUUkwtVyBhbmQgQ1RSTC1VIGFsc28gd29yayBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiAgPEJTPiwgQ1RSTC1XCithbmQgQ1RSTC1VIGRvIG5vdCBzdG9wIGF0IHRoZSBzdGFydCBvZiBpbnNlcnQgb3IgZW5kIG9mIGxpbmUsIG5vIG1hdHRlciBob3cKK3RoZSAnYmFja3NwYWNlJyBvcHRpb24gaXMgc2V0LgorCitUaGVyZSBpcyBubyByZXZlcnNlIHJlcGxhY2UgbW9kZSAoeWV0KS4KKworSWYgdGhlICdzaG93bW9kZScgb3B0aW9uIGlzIHNldCwgIi0tIFJFVkVSU0UgSU5TRVJUIC0tIiB3aWxsIGJlIHNob3duIGluIHRoZQorc3RhdHVzIGxpbmUgd2hlbiByZXZlcnNlIEluc2VydCBtb2RlIGlzIGFjdGl2ZS4KKworV2hlbiB0aGUgJ2FsbG93cmV2aW5zJyBvcHRpb24gaXMgc2V0LCByZXZlcnNlIEluc2VydCBtb2RlIGNhbiBiZSBhbHNvIGVudGVyZWQKK3ZpYSBDVFJMLV8sIHdoaWNoIGhhcyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHk6IEZpcnN0LCBrZXlib2FyZCBtYXBwaW5nIGlzCitjaGFuZ2VkIGFjY29yZGluZyB0byB0aGUgd2luZG93IG9yaWVudGF0aW9uIC0tIGlmIGluIGEgbGVmdC10by1yaWdodCB3aW5kb3csCisncmV2aW5zJyBpcyB1c2VkIHRvIGVudGVyIEhlYnJldyB0ZXh0LCBzbyB0aGUga2V5Ym9hcmQgY2hhbmdlcyB0byBIZWJyZXcKKygnaGttYXAnIGlzIHNldCk7IGlmIGluIGEgcmlnaHQtdG8tbGVmdCB3aW5kb3csICdyZXZpbnMnIGlzIHVzZWQgdG8gZW50ZXIKK0VuZ2xpc2ggdGV4dCwgc28gdGhlIGtleWJvYXJkIGNoYW5nZXMgdG8gRW5nbGlzaCAoJ2hrbWFwJyBpcyByZXNldCkuICBTZWNvbmQsCit3aGVuIGV4aXRpbmcgJ3JldmlucycgdmlhIENUUkwtXywgdGhlIGN1cnNvciBtb3ZlcyB0byB0aGUgZW5kIG9mIHRoZSB0eXBlZAordGV4dCAoaWYgcG9zc2libGUpLgorCisKK1Bhc3Rpbmcgd2hlbiBpbiBhIHJpZ2h0bGVmdCB3aW5kb3cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1doZW4gY3V0dGluZyB0ZXh0IHdpdGggdGhlIG1vdXNlIGFuZCBwYXN0aW5nIGl0IGluIGEgcmlnaHRsZWZ0IHdpbmRvdwordGhlIHRleHQgd2lsbCBiZSByZXZlcnNlZCwgYmVjYXVzZSB0aGUgY2hhcmFjdGVycyBjb21lIGZyb20gdGhlIGN1dCBidWZmZXIKK2Zyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0LCB3aGlsZSBpbnNlcnRlZCBpbiB0aGUgZmlsZSBmcm9tIHRoZSByaWdodCB0bwordGhlIGxlZnQuICAgSW4gb3JkZXIgdG8gYXZvaWQgaXQsIHRvZ2dsZSAncmV2aW5zJyAoYnkgdHlwaW5nIENUUkwtPyBvciBDVFJMLV8pCitiZWZvcmUgcGFzdGluZy4KKworCitIZWJyZXcgY2hhcmFjdGVycyBhbmQgdGhlICdpc3ByaW50JyB2YXJpYWJsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NvbWV0aW1lcyBIZWJyZXcgY2hhcmFjdGVyIGNvZGVzIGFyZSBpbiB0aGUgbm9uLXByaW50YWJsZSByYW5nZSBkZWZpbmVkIGJ5Cit0aGUgJ2lzcHJpbnQnIHZhcmlhYmxlLiAgRm9yIGV4YW1wbGUgaW4gdGhlIExpbnV4IGNvbnNvbGUsIHRoZSBIZWJyZXcgZm9udAorZW5jb2Rpbmcgc3RhcnRzIGZyb20gMTI4LCB3aGlsZSB0aGUgZGVmYXVsdCAnaXNwcmludCcgdmFyaWFibGUgaXMgQCwxNjEtMjU1LgorVGhlIHJlc3VsdCBpcyB0aGF0IGFsbCBIZWJyZXcgY2hhcmFjdGVycyBhcmUgZGlzcGxheWVkIGFzIH54LiAgVG8gc29sdmUgdGhpcworcHJvYmxlbSwgc2V0IGlzcHJpbnQ9QCwxMjgtMjU1LgorCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9oZWxwLnR4dCBiL3J1bnRpbWUvZG9jL2hlbHAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MTRlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9oZWxwLnR4dApAQCAtMCwwICsxLDE5NyBAQAorKmhlbHAudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDQKKworCQkJVklNIC0gbWFpbiBoZWxwIGZpbGUKKwkJCQkJCQkJCSBrCisgICAgICBNb3ZlIGFyb3VuZDogIFVzZSB0aGUgY3Vyc29yIGtleXMsIG9yICJoIiB0byBnbyBsZWZ0LAkgICAgICAgaCAgIGwKKwkJICAgICJqIiB0byBnbyBkb3duLCAiayIgdG8gZ28gdXAsICJsIiB0byBnbyByaWdodC4JIGoKK0Nsb3NlIHRoaXMgd2luZG93OiAgVXNlICI6cTxFbnRlcj4iLgorICAgR2V0IG91dCBvZiBWaW06ICBVc2UgIjpxYSE8RW50ZXI+IiAoY2FyZWZ1bCwgYWxsIGNoYW5nZXMgYXJlIGxvc3QhKS4KKworSnVtcCB0byBhIHN1YmplY3Q6ICBQb3NpdGlvbiB0aGUgY3Vyc29yIG9uIGEgdGFnIGJldHdlZW4gfGJhcnN8IGFuZCBoaXQgQ1RSTC1dLgorICAgV2l0aCB0aGUgbW91c2U6ICAiOnNldCBtb3VzZT1hIiB0byBlbmFibGUgdGhlIG1vdXNlIChpbiB4dGVybSBvciBHVUkpLgorCQkgICAgRG91YmxlLWNsaWNrIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBvbiBhIHRhZyBiZXR3ZWVuIHxiYXJzfC4KKwlKdW1wIGJhY2s6ICBUeXBlIENUUkwtVCBvciBDVFJMLU8gKHJlcGVhdCB0byBnbyBmdXJ0aGVyIGJhY2spLgorCitHZXQgc3BlY2lmaWMgaGVscDogIEl0IGlzIHBvc3NpYmxlIHRvIGdvIGRpcmVjdGx5IHRvIHdoYXRldmVyIHlvdSB3YW50IGhlbHAKKwkJICAgIG9uLCBieSBnaXZpbmcgYW4gYXJndW1lbnQgdG8gdGhlICI6aGVscCIgY29tbWFuZCB8OmhlbHB8LgorCQkgICAgSXQgaXMgcG9zc2libGUgdG8gZnVydGhlciBzcGVjaWZ5IHRoZSBjb250ZXh0OgorCQkJCQkJCSpoZWxwLWNvbnRleHQqCisJCQkgIFdIQVQJCQlQUkVQRU5EICAgIEVYQU1QTEUJfgorCQkgICAgICBOb3JtYWwgbW9kZSBjb21tYW5kcyAgICAgKG5vdGhpbmcpICAgOmhlbHAgeAorCQkgICAgICBWaXN1YWwgbW9kZSBjb21tYW5kcwkgIHZfCSAgIDpoZWxwIHZfdQorCQkgICAgICBJbnNlcnQgbW9kZSBjb21tYW5kcwkgIGlfCSAgIDpoZWxwIGlfPEVzYz4KKwkJICAgICAgQ29tbWFuZC1saW5lIGNvbW1hbmRzCSAgOgkgICA6aGVscCA6cXVpdAorCQkgICAgICBDb21tYW5kLWxpbmUgZWRpdGluZwkgIGNfCSAgIDpoZWxwIGNfPERlbD4KKwkJICAgICAgVmltIGNvbW1hbmQgYXJndW1lbnRzCSAgLQkgICA6aGVscCAtcgorCQkgICAgICBPcHRpb25zCQkJICAnCSAgIDpoZWxwICd0ZXh0d2lkdGgnCisgIFNlYXJjaCBmb3IgaGVscDogIFR5cGUgIjpoZWxwIHdvcmQiLCB0aGVuIGhpdCBDVFJMLUQgdG8gc2VlIG1hdGNoaW5nCisJCSAgICBoZWxwIGVudHJpZXMgZm9yICJ3b3JkIi4KKworVklNIHN0YW5kcyBmb3IgVmkgSU1wcm92ZWQuICBNb3N0IG9mIFZJTSB3YXMgbWFkZSBieSBCcmFtIE1vb2xlbmFhciwgYnV0IG9ubHkKK3Rocm91Z2ggdGhlIGhlbHAgb2YgbWFueSBvdGhlcnMuICBTZWUgfGNyZWRpdHN8LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJCQkqZG9jLWZpbGUtbGlzdCogKlFfY3QqCitCQVNJQzoKK3xxdWlja3JlZnwJT3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9uIGNvbW1hbmRzIHlvdSB3aWxsIHVzZQorfHR1dG9yfAkJMzAgbWludXRlcyB0cmFpbmluZyBjb3Vyc2UgZm9yIGJlZ2lubmVycworfGNvcHlpbmd8CUFib3V0IGNvcHlyaWdodHMKK3xpY2NmfAkJSGVscGluZyBwb29yIGNoaWxkcmVuIGluIFVnYW5kYQorfHNwb25zb3J8CVNwb25zb3IgVmltIGRldmVsb3BtZW50LCBiZWNvbWUgYSByZWdpc3RlcmVkIFZpbSB1c2VyCit8d3d3fAkJVmltIG9uIHRoZSBXb3JsZCBXaWRlIFdlYgorfGJ1Z3N8CQlXaGVyZSB0byBzZW5kIGJ1ZyByZXBvcnRzCisKK1VTRVIgTUFOVUFMOiBUaGVzZSBmaWxlcyBleHBsYWluIGhvdyB0byBhY2NvbXBsaXNoIGFuIGVkaXRpbmcgdGFzay4KKworfHVzcl90b2MudHh0fAlUYWJsZSBPZiBDb250ZW50cworCitHZXR0aW5nIFN0YXJ0ZWQgfgorfHVzcl8wMS50eHR8ICBBYm91dCB0aGUgbWFudWFscworfHVzcl8wMi50eHR8ICBUaGUgZmlyc3Qgc3RlcHMgaW4gVmltCit8dXNyXzAzLnR4dHwgIE1vdmluZyBhcm91bmQKK3x1c3JfMDQudHh0fCAgTWFraW5nIHNtYWxsIGNoYW5nZXMKK3x1c3JfMDUudHh0fCAgU2V0IHlvdXIgc2V0dGluZ3MKK3x1c3JfMDYudHh0fCAgVXNpbmcgc3ludGF4IGhpZ2hsaWdodGluZworfHVzcl8wNy50eHR8ICBFZGl0aW5nIG1vcmUgdGhhbiBvbmUgZmlsZQorfHVzcl8wOC50eHR8ICBTcGxpdHRpbmcgd2luZG93cworfHVzcl8wOS50eHR8ICBVc2luZyB0aGUgR1VJCit8dXNyXzEwLnR4dHwgIE1ha2luZyBiaWcgY2hhbmdlcworfHVzcl8xMS50eHR8ICBSZWNvdmVyaW5nIGZyb20gYSBjcmFzaAorfHVzcl8xMi50eHR8ICBDbGV2ZXIgdHJpY2tzCisKK0VkaXRpbmcgRWZmZWN0aXZlbHkgfgorfHVzcl8yMC50eHR8ICBUeXBpbmcgY29tbWFuZC1saW5lIGNvbW1hbmRzIHF1aWNrbHkKK3x1c3JfMjEudHh0fCAgR28gYXdheSBhbmQgY29tZSBiYWNrCit8dXNyXzIyLnR4dHwgIEZpbmRpbmcgdGhlIGZpbGUgdG8gZWRpdAorfHVzcl8yMy50eHR8ICBFZGl0aW5nIG90aGVyIGZpbGVzCit8dXNyXzI0LnR4dHwgIEluc2VydGluZyBxdWlja2x5Cit8dXNyXzI1LnR4dHwgIEVkaXRpbmcgZm9ybWF0dGVkIHRleHQKK3x1c3JfMjYudHh0fCAgUmVwZWF0aW5nCit8dXNyXzI3LnR4dHwgIFNlYXJjaCBjb21tYW5kcyBhbmQgcGF0dGVybnMKK3x1c3JfMjgudHh0fCAgRm9sZGluZworfHVzcl8yOS50eHR8ICBNb3ZpbmcgdGhyb3VnaCBwcm9ncmFtcworfHVzcl8zMC50eHR8ICBFZGl0aW5nIHByb2dyYW1zCit8dXNyXzMxLnR4dHwgIEV4cGxvaXRpbmcgdGhlIEdVSQorCitUdW5pbmcgVmltIH4KK3x1c3JfNDAudHh0fCAgTWFrZSBuZXcgY29tbWFuZHMKK3x1c3JfNDEudHh0fCAgV3JpdGUgYSBWaW0gc2NyaXB0Cit8dXNyXzQyLnR4dHwgIEFkZCBuZXcgbWVudXMKK3x1c3JfNDMudHh0fCAgVXNpbmcgZmlsZXR5cGVzCit8dXNyXzQ0LnR4dHwgIFlvdXIgb3duIHN5bnRheCBoaWdobGlnaHRlZAorfHVzcl80NS50eHR8ICBTZWxlY3QgeW91ciBsYW5ndWFnZQorCitNYWtpbmcgVmltIFJ1biB+Cit8dXNyXzkwLnR4dHwgIEluc3RhbGxpbmcgVmltCisKKworUkVGRVJFTkNFIE1BTlVBTDogVGhlc2UgZmlsZXMgZXhwbGFpbiBldmVyeSBkZXRhaWwgb2YgVmltLgorCitHZW5lcmFsIHN1YmplY3RzIH4KK3xpbnRyby50eHR8CWdlbmVyYWwgaW50cm9kdWN0aW9uIHRvIFZpbTsgbm90YXRpb24gdXNlZCBpbiBoZWxwIGZpbGVzCit8aGVscC50eHR8CW92ZXJ2aWV3IGFuZCBxdWljayByZWZlcmVuY2UgKHRoaXMgZmlsZSkKK3xpbmRleC50eHR8CWFscGhhYmV0aWNhbCBpbmRleCBvZiBhbGwgY29tbWFuZHMKK3xoZWxwLXRhZ3N8CWFsbCB0aGUgdGFncyB5b3UgY2FuIGp1bXAgdG8gKGluZGV4IG9mIHRhZ3MpCit8aG93dG8udHh0fAlob3cgdG8gZG8gdGhlIG1vc3QgY29tbW9uIGVkaXRpbmcgdGFza3MKK3x0aXBzLnR4dHwJdmFyaW91cyB0aXBzIG9uIHVzaW5nIFZpbQorfG1lc3NhZ2UudHh0fAkoZXJyb3IpIG1lc3NhZ2VzIGFuZCBleHBsYW5hdGlvbnMKK3xxdW90ZXMudHh0fAlyZW1hcmtzIGZyb20gdXNlcnMgb2YgVmltCit8dG9kby50eHR8CWtub3duIHByb2JsZW1zIGFuZCBkZXNpcmVkIGV4dGVuc2lvbnMKK3xkZXZlbG9wLnR4dHwJZGV2ZWxvcG1lbnQgb2YgVmltCit8dWdhbmRhLnR4dHwJVmltIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFuZCB3aGF0IHRvIGRvIHdpdGggeW91ciBtb25leQorCitCYXNpYyBlZGl0aW5nIH4KK3xzdGFydGluZy50eHR8CXN0YXJ0aW5nIFZpbSwgVmltIGNvbW1hbmQgYXJndW1lbnRzLCBpbml0aWFsaXNhdGlvbgorfGVkaXRpbmcudHh0fAllZGl0aW5nIGFuZCB3cml0aW5nIGZpbGVzCit8bW90aW9uLnR4dHwJY29tbWFuZHMgZm9yIG1vdmluZyBhcm91bmQKK3xzY3JvbGwudHh0fAlzY3JvbGxpbmcgdGhlIHRleHQgaW4gdGhlIHdpbmRvdworfGluc2VydC50eHR8CUluc2VydCBhbmQgUmVwbGFjZSBtb2RlCit8Y2hhbmdlLnR4dHwJZGVsZXRpbmcgYW5kIHJlcGxhY2luZyB0ZXh0Cit8aW5kZW50LnR4dHwJYXV0b21hdGljIGluZGVudGluZyBmb3IgQyBhbmQgb3RoZXIgbGFuZ3VhZ2VzCit8dW5kby50eHR8CVVuZG8gYW5kIFJlZG8KK3xyZXBlYXQudHh0fAlyZXBlYXRpbmcgY29tbWFuZHMsIFZpbSBzY3JpcHRzIGFuZCBkZWJ1Z2dpbmcKK3x2aXN1YWwudHh0fAl1c2luZyB0aGUgVmlzdWFsIG1vZGUgKHNlbGVjdGluZyBhIHRleHQgYXJlYSkKK3x2YXJpb3VzLnR4dHwJdmFyaW91cyByZW1haW5pbmcgY29tbWFuZHMKK3xyZWNvdmVyLnR4dHwJcmVjb3ZlcmluZyBmcm9tIGEgY3Jhc2gKKworQWR2YW5jZWQgZWRpdGluZyB+Cit8Y21kbGluZS50eHR8CUNvbW1hbmQtbGluZSBlZGl0aW5nCit8b3B0aW9ucy50eHR8CWRlc2NyaXB0aW9uIG9mIGFsbCBvcHRpb25zCit8cGF0dGVybi50eHR8CXJlZ2V4cCBwYXR0ZXJucyBhbmQgc2VhcmNoIGNvbW1hbmRzCit8bWFwLnR4dHwJa2V5IG1hcHBpbmcgYW5kIGFiYnJldmlhdGlvbnMKK3x0YWdzcmNoLnR4dHwJdGFncyBhbmQgc3BlY2lhbCBzZWFyY2hlcworfHF1aWNrZml4LnR4dHwJY29tbWFuZHMgZm9yIGEgcXVpY2sgZWRpdC1jb21waWxlLWZpeCBjeWNsZQorfHdpbmRvd3MudHh0fAljb21tYW5kcyBmb3IgdXNpbmcgbXVsdGlwbGUgd2luZG93cyBhbmQgYnVmZmVycworfHN5bnRheC50eHR8CXN5bnRheCBoaWdobGlnaHRpbmcKK3xkaWZmLnR4dHwJd29ya2luZyB3aXRoIHR3byBvciB0aHJlZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBmaWxlCit8YXV0b2NtZC50eHR8CWF1dG9tYXRpY2FsbHkgZXhlY3V0aW5nIGNvbW1hbmRzIG9uIGFuIGV2ZW50Cit8ZmlsZXR5cGUudHh0fAlzZXR0aW5ncyBkb25lIHNwZWNpZmljYWxseSBmb3IgYSB0eXBlIG9mIGZpbGUKK3xldmFsLnR4dHwJZXhwcmVzc2lvbiBldmFsdWF0aW9uLCBjb25kaXRpb25hbCBjb21tYW5kcworfGZvbGQudHh0fAloaWRlIChmb2xkKSByYW5nZXMgb2YgbGluZXMKKworU3BlY2lhbCBpc3N1ZXMgfgorfHJlbW90ZS50eHR8CXVzaW5nIFZpbSBhcyBhIHNlcnZlciBvciBjbGllbnQKK3x0ZXJtLnR4dHwJdXNpbmcgZGlmZmVyZW50IHRlcm1pbmFscyBhbmQgbWljZQorfGRpZ3JhcGgudHh0fAlsaXN0IG9mIGF2YWlsYWJsZSBkaWdyYXBocworfG1ieXRlLnR4dHwJbXVsdGktYnl0ZSB0ZXh0IHN1cHBvcnQKK3xtbGFuZy50eHR8CW5vbi1FbmdsaXNoIGxhbmd1YWdlIHN1cHBvcnQKK3xhcmFiaWMudHh0fAlBcmFiaWMgbGFuZ3VhZ2Ugc3VwcG9ydCBhbmQgZWRpdGluZworfGZhcnNpLnR4dHwJRmFyc2kgKFBlcnNpYW4pIGVkaXRpbmcKK3xoZWJyZXcudHh0fAlIZWJyZXcgbGFuZ3VhZ2Ugc3VwcG9ydCBhbmQgZWRpdGluZworfHJ1c3NpYW4udHh0fAlSdXNzaWFuIGxhbmd1YWdlIHN1cHBvcnQgYW5kIGVkaXRpbmcKK3xoYW5ndWxpbi50eHR8CUhhbmd1bCAoS29yZWFuKSBpbnB1dCBtb2RlCit8cmlsZWZ0LnR4dHwJcmlnaHQtdG8tbGVmdCBlZGl0aW5nIG1vZGUKKworR1VJIH4KK3xndWkudHh0fAlHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UgKEdVSSkKK3xndWlfdzE2LnR4dHwJV2luZG93cyAzLjEgR1VJCit8Z3VpX3czMi50eHR8CVdpbjMyIEdVSQorfGd1aV94MTEudHh0fAlYMTEgR1VJCisKK0ludGVyZmFjZXMgfgorfGlmX2NzY29wLnR4dHwJdXNpbmcgY3Njb3BlIHdpdGggVmltCit8aWZfcGVybC50eHR8CVBlcmwgaW50ZXJmYWNlCit8aWZfcHl0aC50eHR8CVB5dGhvbiBpbnRlcmZhY2UKK3xpZl9zbmlmZi50eHR8CVNOaUZGKyBpbnRlcmZhY2UKK3xpZl90Y2wudHh0fAlUY2wgaW50ZXJmYWNlCit8aWZfb2xlLnR4dHwJT0xFIGF1dG9tYXRpb24gaW50ZXJmYWNlIGZvciBXaW4zMgorfGlmX3J1YnkudHh0fAlSdWJ5IGludGVyZmFjZQorfGRlYnVnZ2VyLnR4dHwJSW50ZXJmYWNlIHdpdGggYSBkZWJ1Z2dlcgorfHdvcmtzaG9wLnR4dHwJU3VuIFZpc3VhbCBXb3Jrc2hvcCBpbnRlcmZhY2UKK3xuZXRiZWFucy50eHR8CU5ldEJlYW5zIEV4dGVybmFsIEVkaXRvciBpbnRlcmZhY2UKK3xzaWduLnR4dHwJZGVidWdnaW5nIHNpZ25zCisKK1ZlcnNpb25zIH4KK3x2aV9kaWZmLnR4dHwJTWFpbiBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSBhbmQgVmkKK3x2ZXJzaW9uNC50eHR8CURpZmZlcmVuY2VzIGJldHdlZW4gVmltIHZlcnNpb24gMy4wIGFuZCA0LngKK3x2ZXJzaW9uNS50eHR8CURpZmZlcmVuY2VzIGJldHdlZW4gVmltIHZlcnNpb24gNC42IGFuZCA1LngKK3x2ZXJzaW9uNi50eHR8CURpZmZlcmVuY2VzIGJldHdlZW4gVmltIHZlcnNpb24gNS43IGFuZCA2LngKKwkJCQkJCSpzeXMtZmlsZS1saXN0KgorUmVtYXJrcyBhYm91dCBzcGVjaWZpYyBzeXN0ZW1zIH4KK3xvc18zOTAudHh0fAlPUy8zOTAgVW5peAorfG9zX2FtaWdhLnR4dHwJQW1pZ2EKK3xvc19iZW9zLnR4dHwJQmVPUyBhbmQgQmVCb3gKK3xvc19kb3MudHh0fAlNUy1ET1MgYW5kIE1TLVdpbmRvd3MgTlQvOTUgY29tbW9uIGl0ZW1zCit8b3NfbWFjLnR4dHwJTWFjaW50b3NoCit8b3NfbWludC50eHR8CUF0YXJpIE1pTlQKK3xvc19tc2Rvcy50eHR8CU1TLURPUyAocGxhaW4gRE9TIGFuZCBET1MgYm94IHVuZGVyIFdpbmRvd3MpCit8b3Nfb3MyLnR4dHwJT1MvMgorfG9zX3FueC50eHR8CVFOWAorfG9zX3Jpc2MudHh0fAlSSVNDLU9TCit8b3NfdW5peC50eHR8CVVuaXgKK3xvc192bXMudHh0fAlWTVMKK3xvc193aW4zMi50eHR8CU1TLVdpbmRvd3MgOTUvOTgvTlQKKwkJCQkJCSpzdGFuZGFyZC1wbHVnaW4tbGlzdCoKK1N0YW5kYXJkIHBsdWdpbnMgfgorfHBpX25ldHJ3LnR4dHwJUmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBvdmVyIGEgbmV0d29yaworfHBpX2d6aXAudHh0fAlSZWFkaW5nIGFuZCB3cml0aW5nIGNvbXByZXNzZWQgZmlsZXMKK3xwaV9leHBsLnR4dHwJRmlsZSBleHBsb3JlcgorCitMT0NBTCBBRERJVElPTlM6CQkJCSpsb2NhbC1hZGRpdGlvbnMqCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKmJhcnMqCQlCYXJzIGV4YW1wbGUKKworTm93IHRoYXQgeW91J3ZlIGp1bXBlZCBoZXJlIHdpdGggQ1RSTC1dIG9yIGEgZG91YmxlIG1vdXNlIGNsaWNrLCB5b3UgY2FuIHVzZQorQ1RSTC1ULCBDVFJMLU8sIGc8UmlnaHRNb3VzZT4sIG9yIDxDLVJpZ2h0TW91c2U+IHRvIGdvIGJhY2sgdG8gd2hlcmUgeW91IHdlcmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB2aW06dHc9Nzg6Zm89dGNxMjppc2s9IS1+LF4qLF5cfCxeXCI6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9oZWxwLnR4dC5pbmZvIGIvcnVudGltZS9kb2MvaGVscC50eHQuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZjhkZjgxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvaGVscC50eHQuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9ob3d0by50eHQgYi9ydW50aW1lL2RvYy9ob3d0by50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5OTE5MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2hvd3RvLnR4dApAQCAtMCwwICsxLDk2IEBACisqaG93dG8udHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMSBTZXAgMDMKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhcgorCisKK0hvdyB0byAuLi4JCQkJKmhvd2RvaSogKmhvdy1kby1pKiAqaG93dG8qICpob3ctdG8qCisKK3x0dXRvcnwJCQlnZXQgc3RhcnRlZAorfDpxdWl0fAkJCWV4aXQ/ICBJJ20gdHJhcHBlZCwgaGVscCBtZSEKK3xpbml0aWFsaXphdGlvbnwJaW5pdGlhbGl6ZSBWaW0KK3x2aW1yYy1pbnRyb3wJCXdyaXRlIGEgVmltIHNjcmlwdCBmaWxlICh2aW1yYykKK3xzdXNwZW5kfAkJc3VzcGVuZCBWaW0KK3x1c3JfMTEudHh0fAkJcmVjb3ZlciBhZnRlciBhIGNyYXNoCit8MDcuNHwJCQlrZWVwIGEgYmFja3VwIG9mIG15IGZpbGUgd2hlbiB3cml0aW5nIG92ZXIgaXQKKworfHVzcl8wNy50eHR8CQllZGl0IGZpbGVzCit8MjMuNHwJCQllZGl0IGJpbmFyeSBmaWxlcworfHVzcl8yNC50eHR8CQlpbnNlcnQgdGV4dAorfGRlbGV0aW5nfAkJZGVsZXRlIHRleHQKK3x1c3JfMDQudHh0fAkJY2hhbmdlIHRleHQKK3wwNC41fAkJCWNvcHkgYW5kIG1vdmUgdGV4dAorfHVzcl8yNS50eHR8CQlmb3JtYXQgdGV4dAorfDMwLjZ8CQkJZm9ybWF0IGNvbW1lbnRzCit8MzAuMnwJCQlpbmRlbnQgQyBwcm9ncmFtcworfDI1LjN8CQkJYXV0b21hdGljYWxseSBzZXQgaW5kZW50CisKK3x1c3JfMjYudHh0fAkJcmVwZWF0IGNvbW1hbmRzCit8MDIuNXwJCQl1bmRvIGFuZCByZWRvCisKK3x1c3JfMDMudHh0fAkJbW92ZSBhcm91bmQKK3x3b3JkLW1vdGlvbnN8CQl3b3JkIG1vdGlvbnMKK3xsZWZ0LXJpZ2h0LW1vdGlvbnN8CWxlZnQtcmlnaHQgbW90aW9ucworfHVwLWRvd24tbW90aW9uc3wJdXAtZG93biBtb3Rpb25zCit8b2JqZWN0LW1vdGlvbnN8CXRleHQtb2JqZWN0IG1vdGlvbnMKK3x2YXJpb3VzLW1vdGlvbnN8CXZhcmlvdXMgbW90aW9ucworfG9iamVjdC1zZWxlY3R8CQl0ZXh0LW9iamVjdCBzZWxlY3Rpb24KK3wnd2hpY2h3cmFwJ3wJCW1vdmUgb3ZlciBsaW5lIGJyZWFrcworfCd2aXJ0dWFsZWRpdCd8CQltb3ZlIHRvIHdoZXJlIHRoZXJlIGlzIG5vIHRleHQKK3x1c3JfMjcudHh0fAkJc3BlY2lmeSBwYXR0ZXJuIGZvciBzZWFyY2hlcworfHRhZ3MtYW5kLXNlYXJjaGVzfAlkbyB0YWdzIGFuZCBzcGVjaWFsIHNlYXJjaGVzCit8MjkuNHwJCQlzZWFyY2ggaW4gaW5jbHVkZSdkIGZpbGVzIHVzZWQgdG8gZmluZAorCQkJdmFyaWFibGVzLCBmdW5jdGlvbnMsIG9yIG1hY3JvcworfEt8CQkJbG9vayB1cCBtYW51YWwgZm9yIHRoZSBrZXl3b3JkIHVuZGVyIGN1cnNvcgorCit8MDMuN3wJCQlzY3JvbGwKK3wnc2lkZXNjcm9sbCd8CQlzY3JvbGwgaG9yaXpvbnRhbGx5L3NpZGV3YXlzCit8J3Njcm9sbG9mZid8CQlzZXQgdmlzaWJsZSBjb250ZXh0IGxpbmVzCisKK3xtb2RlLXN3aXRjaGluZ3wJY2hhbmdlIG1vZGVzCit8MDQuNHwJCQl1c2UgVmlzdWFsIG1vZGUKK3wnaW5zZXJ0bW9kZSd8CQlzdGFydCBWaW0gaW4gSW5zZXJ0IG1vZGUKKworfDQwLjF8CQkJbWFwIGtleXMKK3wyNC43fAkJCWNyZWF0ZSBhYmJyZXZpYXRpb25zCisKK3xpbnMtZXhwYW5kdGFifAkJZXhwYW5kIGEgdGFiIHRvIHNwYWNlcyBpbiBJbnNlcnQgbW9kZQorfGlfQ1RSTC1SfAkJaW5zZXJ0IGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgaW4gSW5zZXJ0IG1vZGUKK3wyNC4zfAkJCWNvbXBsZXRlIHdvcmRzIGluIEluc2VydCBtb2RlCit8MjUuMXwJCQlicmVhayBhIGxpbmUgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKKworfDIwLjF8CQkJZG8gY29tbWFuZC1saW5lIGVkaXRpbmcKK3wyMC4zfAkJCWRvIGNvbW1hbmQtbGluZSBjb21wbGV0aW9uCit8J2NtZGhlaWdodCd8CQlpbmNyZWFzZSB0aGUgaGVpZ2h0IG9mIGNvbW1hbmQtbGluZQorfDEwLjN8CQkJc3BlY2lmeSBjb21tYW5kLWxpbmUgcmFuZ2VzCit8NDAuM3wJCQlzcGVjaWZ5IGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkKKwkJCWJlZm9yZS9hZnRlciByZWFkaW5nL3dyaXRpbmcgZW50ZXJpbmcvbGVhdmluZyBhCisJCQlidWZmZXIvd2luZG93CisKK3wnYXV0b3dyaXRlJ3wJCXdyaXRlIGF1dG9tYXRpY2FsbHkKK3wzMC4xfAkJCXNwZWVkdXAgZWRpdC1jb21waWxlLWVkaXQgY3ljbGUgb3IgY29tcGlsZSBhbmQgZml4CisJCQllcnJvcnMgd2l0aGluIFZpbQorCit8b3B0aW9uc3wJCXNldCBvcHRpb25zCit8YXV0by1zZXR0aW5nfAkJc2V0IG9wdGlvbnMgYXV0b21hdGljYWxseQorfHRlcm0tZGVwZW5kZW50LXNldHRpbmdzfCBzZXQgb3B0aW9ucyBkZXBlbmRpbmcgb24gdGVybWluYWwgbmFtZQorfHNhdmUtc2V0dGluZ3N8CQlzYXZlIHNldHRpbmdzCit8OnF1b3RlfAkJY29tbWVudCBteSBleHJjL3ZpbXJjL2d2aW1yYyBmaWxlcworfCdoZWxwaGVpZ2h0J3wJCWNoYW5nZSB0aGUgZGVmYXVsdCBoZWxwIGhlaWdodAorfCdoaWdobGlnaHQnfAkJc2V0IHZhcmlvdXMgaGlnaGxpZ2h0aW5nIG1vZGVzCit8J3RpdGxlJ3wJCXNldCB0aGUgd2luZG93IHRpdGxlCit8J2ljb24nfAkJc2V0IHdpbmRvdyBpY29uIHRpdGxlCit8J3JlcG9ydCd8CQlhdm9pZCBzZWVpbmcgdGhlIGNoYW5nZSBtZXNzYWdlcyBvbiBldmVyeSBsaW5lCit8J3Nob3J0bWVzcyd8CQlhdm9pZCB8aGl0LWVudGVyfCBwcm9tcHRzCisKK3xtb3VzZS11c2luZ3wJCXVzZSBtb3VzZSB3aXRoIFZpbQorfHVzcl8wOC50eHR8CQltYW5hZ2UgbXVsdGlwbGUgd2luZG93cyBhbmQgYnVmZmVycworfGd1aS50eHR8CQl1c2UgdGhlIGd1aQorCit8WW91IGNhbid0ISAoeWV0KXwJZG8gZGlzaGVzIHVzaW5nIFZpbQorCit8dXNyXzA2LnR4dHwJCXN3aXRjaCBvbiBzeW50YXggaGlnaGxpZ2h0aW5nCit8Mmh0bWwudmltfAkJY29udmVydCBhIGNvbG9yZWQgZmlsZSB0byBIVE1MCit8bGVzc3wJCQl1c2UgVmltIGxpa2UgbGVzcyBvciBtb3JlIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZworCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaWZfY3Njb3AudHh0IGIvcnVudGltZS9kb2MvaWZfY3Njb3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZmY2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9pZl9jc2NvcC50eHQKQEAgLTAsMCArMSw0NzQgQEAKKyppZl9jc2NvcC50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKYW4gMTcKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQW5keSBLYWhuCisKKwkJCQkJCQkqY3Njb3BlKiAqQ3Njb3BlKgorVGhpcyBkb2N1bWVudCBleHBsYWlucyBob3cgdG8gdXNlIFZpbSdzIGNzY29wZSBpbnRlcmZhY2UuCisKK0NzY29wZSBpcyBhIHRvb2wgbGlrZSBjdGFncywgYnV0IHRoaW5rIG9mIGl0IGFzIGN0YWdzIG9uIHN0ZXJvaWRzIHNpbmNlIGl0Citkb2VzIGEgbG90IG1vcmUgdGhhbiB3aGF0IGN0YWdzIHByb3ZpZGVzLiAgSW4gVmltLCBqdW1waW5nIHRvIGEgcmVzdWx0IGZyb20KK2EgY3Njb3BlIHF1ZXJ5IGlzIGp1c3QgbGlrZSBqdW1waW5nIHRvIGFueSB0YWc7IGl0IGlzIHNhdmVkIG9uIHRoZSB0YWcgc3RhY2sKK3NvIHRoYXQgd2l0aCB0aGUgcmlnaHQga2V5Ym9hcmQgbWFwcGluZ3MsIHlvdSBjYW4ganVtcCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCitmdW5jdGlvbnMgYXMgeW91IG5vcm1hbGx5IHdvdWxkIHdpdGggfHRhZ3N8LgorCisxLiBDc2NvcGUgaW50cm9kdWN0aW9uCQl8Y3Njb3BlLWludHJvfAorMi4gQ3Njb3BlIHJlbGF0ZWQgY29tbWFuZHMJfGNzY29wZS1jb21tYW5kc3wKKzMuIENzY29wZSBvcHRpb25zCQl8Y3Njb3BlLW9wdGlvbnN8Cis0LiBIb3cgdG8gdXNlIGNzY29wZSBpbiBWaW0JfGNzY29wZS1ob3d0b3VzZXwKKzUuIExpbWl0YXRpb25zCQkJfGNzY29wZS1saW1pdGF0aW9uc3wKKzYuIFN1Z2dlc3RlZCB1c2FnZQkJfGNzY29wZS1zdWdnZXN0aW9uc3wKKzcuIEF2YWlsYWJpbGl0eSAmIEluZm9ybWF0aW9uCXxjc2NvcGUtaW5mb3wKKworVGhpcyBpcyBjdXJyZW50bHkgZm9yIFVuaXggYW5kIFdpbjMyIG9ubHkuCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gQ3Njb3BlIGludHJvZHVjdGlvbgkJCQkJKmNzY29wZS1pbnRybyoKKworVGhlIGZvbGxvd2luZyB0ZXh0IGlzIHRha2VuIGZyb20gYSB2ZXJzaW9uIG9mIHRoZSBjc2NvcGUgbWFuIHBhZ2U6CisKKwkJCQkgICAgLS0tLS0KKworICBDc2NvcGUgaXMgYW4gaW50ZXJhY3RpdmUgc2NyZWVuLW9yaWVudGVkIHRvb2wgdGhhdCBoZWxwcyB5b3U6CisKKyAgICAgICBMZWFybiBob3cgYSBDIHByb2dyYW0gd29ya3Mgd2l0aG91dCBlbmRsZXNzIGZsaXBwaW5nIHRocm91Z2ggYSB0aGljaworICAgICAgIGxpc3RpbmcuCisKKyAgICAgICBMb2NhdGUgdGhlIHNlY3Rpb24gb2YgY29kZSB0byBjaGFuZ2UgdG8gZml4IGEgYnVnIHdpdGhvdXQgaGF2aW5nIHRvCisgICAgICAgbGVhcm4gdGhlIGVudGlyZSBwcm9ncmFtLgorCisgICAgICAgRXhhbWluZSB0aGUgZWZmZWN0IG9mIGEgcHJvcG9zZWQgY2hhbmdlIHN1Y2ggYXMgYWRkaW5nIGEgdmFsdWUgdG8gYW4KKyAgICAgICBlbnVtIHZhcmlhYmxlLgorCisgICAgICAgVmVyaWZ5IHRoYXQgYSBjaGFuZ2UgaGFzIGJlZW4gbWFkZSBpbiBhbGwgc291cmNlIGZpbGVzIHN1Y2ggYXMgYWRkaW5nCisgICAgICAgYW4gYXJndW1lbnQgdG8gYW4gZXhpc3RpbmcgZnVuY3Rpb24uCisKKyAgICAgICBSZW5hbWUgYSBnbG9iYWwgdmFyaWFibGUgaW4gYWxsIHNvdXJjZSBmaWxlcy4KKworICAgICAgIENoYW5nZSBhIGNvbnN0YW50IHRvIGEgcHJlcHJvY2Vzc29yIHN5bWJvbCBpbiBzZWxlY3RlZCBsaW5lcyBvZiBmaWxlcy4KKworICBJdCBpcyBkZXNpZ25lZCB0byBhbnN3ZXIgcXVlc3Rpb25zIGxpa2U6CisgICAgICAgV2hlcmUgaXMgdGhpcyBzeW1ib2wgdXNlZD8KKyAgICAgICBXaGVyZSBpcyBpdCBkZWZpbmVkPworICAgICAgIFdoZXJlIGRpZCB0aGlzIHZhcmlhYmxlIGdldCBpdHMgdmFsdWU/CisgICAgICAgV2hhdCBpcyB0aGlzIGdsb2JhbCBzeW1ib2wncyBkZWZpbml0aW9uPworICAgICAgIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gaW4gdGhlIHNvdXJjZSBmaWxlcz8KKyAgICAgICBXaGF0IGZ1bmN0aW9ucyBjYWxsIHRoaXMgZnVuY3Rpb24/CisgICAgICAgV2hhdCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGlzIGZ1bmN0aW9uPworICAgICAgIFdoZXJlIGRvZXMgdGhlIG1lc3NhZ2UgIm91dCBvZiBzcGFjZSIgY29tZSBmcm9tPworICAgICAgIFdoZXJlIGlzIHRoaXMgc291cmNlIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmU/CisgICAgICAgV2hhdCBmaWxlcyBpbmNsdWRlIHRoaXMgaGVhZGVyIGZpbGU/CisKKyAgQ3Njb3BlIGFuc3dlcnMgdGhlc2UgcXVlc3Rpb25zIGZyb20gYSBzeW1ib2wgZGF0YWJhc2UgdGhhdCBpdCBidWlsZHMgdGhlCisgIGZpcnN0IHRpbWUgaXQgaXMgdXNlZCBvbiB0aGUgc291cmNlIGZpbGVzLiAgT24gYSBzdWJzZXF1ZW50IGNhbGwsIGNzY29wZQorICByZWJ1aWxkcyB0aGUgZGF0YWJhc2Ugb25seSBpZiBhIHNvdXJjZSBmaWxlIGhhcyBjaGFuZ2VkIG9yIHRoZSBsaXN0IG9mCisgIHNvdXJjZSBmaWxlcyBpcyBkaWZmZXJlbnQuICBXaGVuIHRoZSBkYXRhYmFzZSBpcyByZWJ1aWx0IHRoZSBkYXRhIGZvciB0aGUKKyAgdW5jaGFuZ2VkIGZpbGVzIGlzIGNvcGllZCBmcm9tIHRoZSBvbGQgZGF0YWJhc2UsIHdoaWNoIG1ha2VzIHJlYnVpbGRpbmcKKyAgbXVjaCBmYXN0ZXIgdGhhbiB0aGUgaW5pdGlhbCBidWlsZC4KKworCQkJCSAgICAtLS0tLQorCitXaGVuIGNzY29wZSBpcyBub3JtYWxseSBpbnZva2VkLCB5b3Ugd2lsbCBnZXQgYSBmdWxsLXNjcmVlbiBzZWxlY3Rpb24KK3NjcmVlbiBhbGxvd2luZyB5b3UgdG8gbWFrZSBhIHF1ZXJ5IGZvciBvbmUgb2YgdGhlIGFib3ZlIHF1ZXN0aW9ucy4KK0hvd2V2ZXIsIG9uY2UgYSBtYXRjaCBpcyBmb3VuZCB0byB5b3VyIHF1ZXJ5IGFuZCB5b3UgaGF2ZSBlbnRlcmVkIHlvdXIKK3RleHQgZWRpdG9yIHRvIGVkaXQgdGhlIHNvdXJjZSBmaWxlIGNvbnRhaW5pbmcgbWF0Y2gsIHlvdSBjYW5ub3Qgc2ltcGx5CitqdW1wIGZyb20gdGFnIHRvIHRhZyBhcyB5b3Ugbm9ybWFsbHkgd291bGQgd2l0aCB2aSdzIEN0cmwtXSBvciA6dGFnCitjb21tYW5kLgorCitWaW0ncyBjc2NvcGUgaW50ZXJmYWNlIGlzIGRvbmUgYnkgaW52b2tpbmcgY3Njb3BlIHdpdGggaXRzIGxpbmUtb3JpZW50ZWQKK2ludGVyZmFjZSwgYW5kIHRoZW4gcGFyc2luZyB0aGUgb3V0cHV0IHJldHVybmVkIGZyb20gYSBxdWVyeS4gIFRoZSBlbmQKK3Jlc3VsdCBpcyB0aGF0IGNzY29wZSBxdWVyeSByZXN1bHRzIGJlY29tZSBqdXN0IGxpa2UgcmVndWxhciB0YWdzLCBzbworeW91IGNhbiBqdW1wIHRvIHRoZW0ganVzdCBsaWtlIHlvdSBkbyB3aXRoIG5vcm1hbCB0YWdzIChDdHJsLV0gb3IgOnRhZykKK2FuZCB0aGVuIGdvIGJhY2sgYnkgcG9wcGluZyBvZmYgdGhlIHRhZ3N0YWNrIHdpdGggQ3RybC1ULiAgKFBsZWFzZSBub3RlCitob3dldmVyLCB0aGF0IHlvdSBkb24ndCBhY3R1YWxseSBqdW1wIHRvIGEgY3Njb3BlIHRhZyBzaW1wbHkgYnkgZG9pbmcKK0N0cmwtXSBvciA6dGFnIHdpdGhvdXQgcmVtYXBwaW5nIHRoZXNlIGNvbW1hbmRzIG9yIHNldHRpbmcgYW4gb3B0aW9uLgorU2VlIHRoZSByZW1haW5pbmcgc2VjdGlvbnMgb24gaG93IHRoZSBjc2NvcGUgaW50ZXJmYWNlIHdvcmtzIGFuZCBmb3IKK3N1Z2dlc3RlZCB1c2UuKQorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gQ3Njb3BlIHJlbGF0ZWQgY29tbWFuZHMJCQkJKmNzY29wZS1jb21tYW5kcyoKKworCQkqOmNzY29wZSogKjpjcyogKjpzY3MqICo6c2NzY29wZSogKkUyNTkqICpFMjYyKiAqRTU2MSogKkU1NjAqCitBbGwgY3Njb3BlIGNvbW1hbmRzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIHN1Ym9wdGlvbnMgdG8gdGhlIG1haW4gY3Njb3BlCitjb21tYW5kICI6Y3Njb3BlIi4gIFRoZSBzaG9ydGVzdCBhYmJyZXZpYXRpb24gaXMgIjpjcyIuICBUaGUgIjpzY3Njb3BlIgorY29tbWFuZCBkb2VzIHRoZSBzYW1lIGFuZCBhbHNvIHNwbGl0cyB0aGUgd2luZG93IChzaG9ydDogInNjcyIpLgorCitUaGUgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFyZToKKworCQkJKkU1NjMqICpFNTY0KiAqRTU2NiogKkU1NjgqICpFNTY5KiAqRTYyMiogKkU2MjMqCisJCQkqRTYyNSogKkU2MjYqICpFNjA5KgorICAgIGFkZCAgIDogQWRkIGEgbmV3IGNzY29wZSBkYXRhYmFzZS9jb25uZWN0aW9uLgorCisJVVNBR0UJOmNzIGFkZCB7ZmlsZXxkaXJ9IFtwcmUtcGF0aF0gW2ZsYWdzXQorCisJICAgIFtwcmUtcGF0aF0gaXMgdGhlIHBhdGhuYW1lIHVzZWQgd2l0aCB0aGUgLVAgY29tbWFuZCB0byBjc2NvcGUuCisKKwkgICAgW2ZsYWdzXSBhcmUgYW55IGFkZGl0aW9uYWwgZmxhZ3MgeW91IHdhbnQgdG8gcGFzcyB0byBjc2NvcGUuCisKKwlFWEFNUExFUyA+CisJICAgIDpjc2NvcGUgYWRkIC91c3IvbG9jYWwvY2RiL2NzY29wZS5vdXQKKwkgICAgOmNzY29wZSBhZGQgL3Byb2plY3RzL3ZpbS9jc2NvcGUub3V0IC91c3IvbG9jYWwvdmltCisJICAgIDpjc2NvcGUgYWRkIGNzY29wZS5vdXQgL3Vzci9sb2NhbC92aW0gLUMKKzwKKwkJCQkgICAgICAqY3Njb3BlLWZpbmQqICpjcy1maW5kKgorCQkJCQkJKkU1NjUqICpFNTY3KgorICAgIGZpbmQgIDogUXVlcnkgY3Njb3BlLiAgQWxsIGNzY29wZSBxdWVyeSBvcHRpb25zIGFyZSBhdmFpbGFibGUKKwkgICAgZXhjZXB0IG9wdGlvbiAjNSAoIkNoYW5nZSB0aGlzIGdyZXAgcGF0dGVybiIpLgorCisJVVNBR0UJOmNzIGZpbmQge3F1ZXJ5dHlwZX0ge25hbWV9CisKKwkgICAge3F1ZXJ5dHlwZX0gY29ycmVzcG9uZHMgdG8gdGhlIGFjdHVhbCBjc2NvcGUgbGluZQorCSAgICBpbnRlcmZhY2UgbnVtYmVycyBhcyB3ZWxsIGFzIGRlZmF1bHQgbnZpIGNvbW1hbmRzOgorCisJCTAgb3IgczogRmluZCB0aGlzIEMgc3ltYm9sCisJCTEgb3IgZzogRmluZCB0aGlzIGRlZmluaXRpb24KKwkJMiBvciBkOiBGaW5kIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGhpcyBmdW5jdGlvbgorCQkzIG9yIGM6IEZpbmQgZnVuY3Rpb25zIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorCQk0IG9yIHQ6IEZpbmQgdGhpcyB0ZXh0IHN0cmluZworCQk2IG9yIGU6IEZpbmQgdGhpcyBlZ3JlcCBwYXR0ZXJuCisJCTcgb3IgZjogRmluZCB0aGlzIGZpbGUKKwkJOCBvciBpOiBGaW5kIGZpbGVzICNpbmNsdWRpbmcgdGhpcyBmaWxlCisKKwlFWEFNUExFUyA+CisJICAgIDpjc2NvcGUgZmluZCBjIHZpbV9mcmVlCisJICAgIDpjc2NvcGUgZmluZCAzIHZpbV9mcmVlCis8CisJICAgIFRoZXNlIHR3byBleGFtcGxlcyBwZXJmb3JtIHRoZSBzYW1lIHF1ZXJ5LiA+CisKKwkgICAgOmNzY29wZSBmaW5kIDAgREVGQVVMVF9URVJNCis8CisJICAgIEV4ZWN1dGluZyB0aGlzIGV4YW1wbGUgb24gdGhlIHNvdXJjZSBjb2RlIGZvciBWaW0gNS4xIHByb2R1Y2VzIHRoZQorCSAgICBmb2xsb3dpbmcgb3V0cHV0OgorCisJICAgIENzY29wZSB0YWc6IERFRkFVTFRfVEVSTQorCSAgICAgICAjICAgbGluZSAgZmlsZW5hbWUgLyBjb250ZXh0IC8gbGluZQorCSAgICAgICAxICAgMTAwOSAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PEdMT0JBTD4+CisJCQkgI2RlZmluZSBERUZBVUxUX1RFUk0gKGNoYXJfdSAqKSJhbWlnYSIKKwkgICAgICAgMiAgIDEwMTMgIHZpbS01LjEtZ3RrL3NyYy90ZXJtLmMgPDxHTE9CQUw+PgorCQkJICNkZWZpbmUgREVGQVVMVF9URVJNIChjaGFyX3UgKikid2luMzIiCisJICAgICAgIDMgICAxMDE3ICB2aW0tNS4xLWd0ay9zcmMvdGVybS5jIDw8R0xPQkFMPj4KKwkJCSAjZGVmaW5lIERFRkFVTFRfVEVSTSAoY2hhcl91ICopInBjdGVybSIKKwkgICAgICAgNCAgIDEwMjEgIHZpbS01LjEtZ3RrL3NyYy90ZXJtLmMgPDxHTE9CQUw+PgorCQkJICNkZWZpbmUgREVGQVVMVF9URVJNIChjaGFyX3UgKikiYW5zaSIKKwkgICAgICAgNSAgIDEwMjUgIHZpbS01LjEtZ3RrL3NyYy90ZXJtLmMgPDxHTE9CQUw+PgorCQkJICNkZWZpbmUgREVGQVVMVF9URVJNIChjaGFyX3UgKikidnQ1MiIKKwkgICAgICAgNiAgIDEwMjkgIHZpbS01LjEtZ3RrL3NyYy90ZXJtLmMgPDxHTE9CQUw+PgorCQkJICNkZWZpbmUgREVGQVVMVF9URVJNIChjaGFyX3UgKikib3MyYW5zaSIKKwkgICAgICAgNyAgIDEwMzMgIHZpbS01LjEtZ3RrL3NyYy90ZXJtLmMgPDxHTE9CQUw+PgorCQkJICNkZWZpbmUgREVGQVVMVF9URVJNIChjaGFyX3UgKikiYW5zaSIKKwkgICAgICAgOCAgIDEwMzcgIHZpbS01LjEtZ3RrL3NyYy90ZXJtLmMgPDxHTE9CQUw+PgorCQkJICMgdW5kZWYgREVGQVVMVF9URVJNCisJICAgICAgIDkgICAxMDM4ICB2aW0tNS4xLWd0ay9zcmMvdGVybS5jIDw8R0xPQkFMPj4KKwkJCSAjZGVmaW5lIERFRkFVTFRfVEVSTSAoY2hhcl91ICopImJlb3MtYW5zaSIKKwkgICAgICAxMCAgIDEwNDIgIHZpbS01LjEtZ3RrL3NyYy90ZXJtLmMgPDxHTE9CQUw+PgorCQkJICNkZWZpbmUgREVGQVVMVF9URVJNIChjaGFyX3UgKikibWFjLWFuc2kiCisJICAgICAgMTEgICAxMzM1ICB2aW0tNS4xLWd0ay9zcmMvdGVybS5jIDw8c2V0X3Rlcm1uYW1lPj4KKwkJCSB0ZXJtID0gREVGQVVMVF9URVJNOworCSAgICAgIDEyICAgMTQ1OSAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PHNldF90ZXJtbmFtZT4+CisJCQkgaWYgKFNUUkNNUCh0ZXJtLCBERUZBVUxUX1RFUk0pKQorCSAgICAgIDEzICAgMTgyNiAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PHRlcm1jYXBpbml0Pj4KKwkJCSB0ZXJtID0gREVGQVVMVF9URVJNOworCSAgICAgIDE0ICAgMTgzMyAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PHRlcm1jYXBpbml0Pj4KKwkJCSB0ZXJtID0gREVGQVVMVF9URVJNOworCSAgICAgIDE1ICAgMzYzNSAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PHVwZGF0ZV90Y2FwPj4KKwkJCSBwID0gZmluZF9idWlsdGluX3Rlcm0oREVGQVVMVF9URVJNKTsKKwkgICAgRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KToKKworCSAgICBUaGUgb3V0cHV0IHNob3dzIHNldmVyYWwgcGllY2VzIG9mIGluZm9ybWF0aW9uOgorCSAgICAxLiBUaGUgdGFnIG51bWJlciAodGhlcmUgYXJlIDE1IGluIHRoaXMgZXhhbXBsZSkuCisJICAgIDIuIFRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgdGFnIG9jY3Vycy4KKwkgICAgMy4gVGhlIGZpbGVuYW1lIHdoZXJlIHRoZSB0YWcgb2NjdXJzLgorCSAgICA0LiBUaGUgY29udGV4dCBvZiB0aGUgdGFnIChlLmcuLCBnbG9iYWwsIG9yIHRoZSBmdW5jdGlvbiBuYW1lKS4KKwkgICAgNS4gVGhlIGxpbmUgZnJvbSB0aGUgZmlsZSBpdHNlbGYuCisKKyAgICBoZWxwICA6IFNob3cgYSBicmllZiBzeW5vcHNpcy4KKworCSAgICBVU0FHRSAgIDpjcyBoZWxwCisKKwkJCQkJCSpFMjYwKiAqRTI2MSoKKyAgICBraWxsICA6IEtpbGwgYSBjc2NvcGUgY29ubmVjdGlvbiAob3Iga2lsbCBhbGwgY3Njb3BlIGNvbm5lY3Rpb25zKS4KKworCSAgICBVU0FHRSAgIDpjcyBraWxsIHtudW18cGFydGlhbF9uYW1lfQorCisJICAgIFRvIGtpbGwgYSBjc2NvcGUgY29ubmVjdGlvbiwgdGhlIGNvbm5lY3Rpb24gbnVtYmVyIG9yIGEgcGFydGlhbAorCSAgICBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLiAgVGhlIHBhcnRpYWwgbmFtZSBpcyBzaW1wbHkgYW55IHBhcnQgb2YKKwkgICAgdGhlIHBhdGhuYW1lIG9mIHRoZSBjc2NvcGUgZGF0YWJhc2UuICBLaWxsIGEgY3Njb3BlIGNvbm5lY3Rpb24KKwkgICAgdXNpbmcgdGhlIHBhcnRpYWwgbmFtZSB3aXRoIGNhdXRpb24hCisKKwkgICAgSWYgdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIG51bWJlciBpcyAtMSwgdGhlbiBfQUxMXyBjc2NvcGUKKwkgICAgY29ubmVjdGlvbnMgd2lsbCBiZSBraWxsZWQuCisKKyAgICByZXNldCA6IFJlaW5pdCBhbGwgY3Njb3BlIGNvbm5lY3Rpb25zLgorCisJICAgIFVTQUdFICAgOmNzIHJlc2V0CisKKyAgICBzaG93ICA6IFNob3cgY3Njb3BlIGNvbm5lY3Rpb25zLgorCisJICAgIFVTQUdFICAgOmNzIHNob3cKKworCQkJCQkJCSo6Y3N0YWcqICpFMjU3KiAqRTU2MioKK0lmIHlvdSB1c2UgY3Njb3BlIGFzIHdlbGwgYXMgY3RhZ3MsIHw6Y3N0YWd8IGFsbG93cyB5b3UgdG8gc2VhcmNoIG9uZSBvcgordGhlIG90aGVyIGJlZm9yZSBtYWtpbmcgYSBqdW1wLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hvb3NlIHRvIGZpcnN0CitzZWFyY2ggeW91ciBjc2NvcGUgZGF0YWJhc2UocykgZm9yIGEgbWF0Y2gsIGFuZCBpZiBvbmUgaXMgbm90IGZvdW5kLCB0aGVuCit5b3VyIHRhZ3MgZmlsZShzKSB3aWxsIGJlIHNlYXJjaGVkLiAgVGhlIG9yZGVyIGluIHdoaWNoIHRoaXMgaGFwcGVucworaXMgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2YgfGNzdG98LiAgU2VlIHxjc2NvcGUtb3B0aW9uc3wgZm9yIG1vcmUKK2RldGFpbHMuCisKK3w6Y3N0YWd8IHBlcmZvcm1zIHRoZSBlcXVpdmFsZW50IG9mICI6Y3MgZmluZCBnIiBvbiB0aGUgaWRlbnRpZmllciB3aGVuCitzZWFyY2hpbmcgdGhyb3VnaCB0aGUgY3Njb3BlIGRhdGFiYXNlKHMpLgorCit8OmNzdGFnfCBwZXJmb3JtcyB0aGUgZXF1aXZhbGVudCBvZiB8OnRqdW1wfCBvbiB0aGUgaWRlbnRpZmllciB3aGVuIHNlYXJjaGluZwordGhyb3VnaCB5b3VyIHRhZ3MgZmlsZShzKS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIENzY29wZSBvcHRpb25zCQkJCQkqY3Njb3BlLW9wdGlvbnMqCisKK1VzZSB0aGUgfDpzZXR8IGNvbW1hbmQgdG8gc2V0IGFsbCBjc2NvcGUgb3B0aW9ucy4gIElkZWFsbHksIHlvdSB3b3VsZCBkbwordGhpcyBpbiBvbmUgb2YgeW91ciBzdGFydHVwIGZpbGVzIChlLmcuLCAudmltcmMpLiAgU29tZSBjc2NvcGUgcmVsYXRlZAordmFyaWFibGVzIGFyZSBvbmx5IHZhbGlkIHdpdGhpbiB8LnZpbXJjfC4gIFNldHRpbmcgdGhlbSBhZnRlciB2aW0gaGFzCitzdGFydGVkIHdpbGwgaGF2ZSBubyBlZmZlY3QhCisKKwkJCQkJCQkqY3Njb3BlcHJnKiAqY3NwcmcqCisnY3Njb3BlcHJnJyBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZSBjc2NvcGUuICBUaGUgZGVmYXVsdCBpcworImNzY29wZSIuICBGb3IgZXhhbXBsZTogPgorCTpzZXQgY3Nwcmc9L3Vzci9sb2NhbC9iaW4vY3Njb3BlCis8CisJCQkJCSAgICAqY3Njb3BlcXVpY2tmaXgqICpjc3FmKiAqRTQ2OSoKK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtxdWlja2ZpeHwgZmVhdHVyZX0KKydjc2NvcGVxdWlja2ZpeCcgc3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIHF1aWNrZml4IHdpbmRvdyB0byBzaG93IGNzY29wZQorcmVzdWx0cy4gVGhpcyBpcyBhIGxpc3Qgb2YgY29tbWEtc2VwYXJhdGVkIHZhbHVlcy4gRWFjaCBpdGVtIGNvbnNpc3RzIG9mCit8Y3Njb3BlLWZpbmR8IGNvbW1hbmQgKHMsIGcsIGQsIGMsIHQsIGUsIGYgb3IgaSkgYW5kIGZsYWcgKCssIC0gb3IgMCkuCisnKycgaW5kaWNhdGVzIHRoYXQgcmVzdWx0cyBtdXN0IGJlIGFwcGVuZGVkIHRvIHF1aWNrZml4IHdpbmRvdywKKyctJyBpbXBsaWVzIHByZXZpb3VzIHJlc3VsdHMgY2xlYXJhbmNlLCAnMCcgb3IgY29tbWFuZCBhYnNlbmNlIC0gZG9uJ3QgdXNlCitxdWlja2ZpeC4gU2VhcmNoIGlzIHBlcmZvcm1lZCBmcm9tIHN0YXJ0IHVudGlsIGZpcnN0IGNvbW1hbmQgb2NjdXJyZW5jZS4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzICIiIChkb24ndCB1c2UgcXVpY2tmaXggYW55d2F5KS4gVGhlIGZvbGxvd2luZyB2YWx1ZQorc2VlbXMgdG8gYmUgdXNlZnVsOiAicy0sYy0sZC0saS0sdC0sZS0iLgorCisJCQkJCQkJKmNzY29wZXRhZyogKmNzdCoKK0lmICdjc2NvcGV0YWcnIHNldCwgdGhlIGNvbW1hbmRzICI6dGFnIiBhbmQgQ1RSTC1dIGFzIHdlbGwgYXMgInZpbSAtdCIgd2lsbAorYWx3YXlzIHVzZSB8OmNzdGFnfCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IDp0YWcgYmVoYXZpb3IuICBFZmZlY3RpdmVseSwgYnkKK3NldHRpbmcgJ2NzdCcsIHlvdSB3aWxsIGFsd2F5cyBzZWFyY2ggeW91ciBjc2NvcGUgZGF0YWJhc2VzIGFzIHdlbGwgYXMgeW91cgordGFnIGZpbGVzLiAgVGhlIGRlZmF1bHQgaXMgb2ZmLiAgRXhhbXBsZXM6ID4KKwk6c2V0IGNzdAorCTpzZXQgbm9jc3QKKzwKKwkJCQkJCQkqY3Njb3BldGFnb3JkZXIqICpjc3RvKgorVGhlIHZhbHVlIG9mICdjc3RvJyBkZXRlcm1pbmVzIHRoZSBvcmRlciBpbiB3aGljaCB8OmNzdGFnfCBwZXJmb3JtcyBhIHNlYXJjaC4KK0lmICdjc3RvJyBpcyBzZXQgdG8gemVybywgY3Njb3BlIGRhdGFiYXNlKHMpIGFyZSBzZWFyY2hlZCBmaXJzdCwgZm9sbG93ZWQKK2J5IHRhZyBmaWxlKHMpIGlmIGNzY29wZSBkaWQgbm90IHJldHVybiBhbnkgbWF0Y2hlcy4gIElmICdjc3RvJyBpcyBzZXQgdG8KK29uZSwgdGFnIGZpbGUocykgYXJlIHNlYXJjaGVkIGJlZm9yZSBjc2NvcGUgZGF0YWJhc2UocykuICBUaGUgZGVmYXVsdCBpcyB6ZXJvLgorRXhhbXBsZXM6ID4KKwk6c2V0IGNzdG89MAorCTpzZXQgY3N0bz0xCis8CisJCQkJCQkqY3Njb3BldmVyYm9zZSogKmNzdmVyYioKK0lmICdjc2NvcGV2ZXJib3NlJyBpcyBub3Qgc2V0ICh0aGUgZGVmYXVsdCksIG1lc3NhZ2VzIHdpbGwgbm90IGJlIHByaW50ZWQKK2luZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlIHdoZW4gYWRkaW5nIGEgY3Njb3BlIGRhdGFiYXNlLiAgSWRlYWxseSwgeW91CitzaG91bGQgcmVzZXQgdGhpcyBvcHRpb24gaW4geW91ciB8LnZpbXJjfCBiZWZvcmUgYWRkaW5nIGFueSBjc2NvcGUgZGF0YWJhc2VzLAorYW5kIGFmdGVyIGFkZGluZyB0aGVtLCBzZXQgaXQuICBGcm9tIHRoZW4gb24sIHdoZW4geW91IGFkZCBtb3JlIGRhdGFiYXNlcword2l0aGluIFZpbSwgeW91IHdpbGwgZ2V0IGEgKGhvcGVmdWxseSkgdXNlZnVsIG1lc3NhZ2Ugc2hvdWxkIHRoZSBkYXRhYmFzZSBmYWlsCit0byBiZSBhZGRlZC4gIEV4YW1wbGVzOiA+CisJOnNldCBjc3ZlcmIKKwk6c2V0IG5vY3N2ZXJiCis8CisJCQkJCQkgICAgICAqY3Njb3BlcGF0aGNvbXAqICpjc3BjKgorVGhlIHZhbHVlIG9mICdjc3BjJyBkZXRlcm1pbmVzIGhvdyBtYW55IGNvbXBvbmVudHMgb2YgYSBmaWxlJ3MgcGF0aCB0bworZGlzcGxheS4gIFdpdGggdGhlIGRlZmF1bHQgdmFsdWUgb2YgemVybyB0aGUgZW50aXJlIHBhdGggd2lsbCBiZSBkaXNwbGF5ZWQuCitUaGUgdmFsdWUgb25lIHdpbGwgZGlzcGxheSBvbmx5IHRoZSBmaWxlbmFtZSB3aXRoIG5vIHBhdGguICBPdGhlciB2YWx1ZXMKK2Rpc3BsYXkgdGhhdCBtYW55IGNvbXBvbmVudHMuICBGb3IgZXhhbXBsZTogPgorCTpzZXQgY3NwYz0zCit3aWxsIGRpc3BsYXkgdGhlIGxhc3QgMyBjb21wb25lbnRzIG9mIHRoZSBmaWxlJ3MgcGF0aCwgaW5jbHVkaW5nIHRoZSBmaWxlCituYW1lIGl0c2VsZi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBIb3cgdG8gdXNlIGNzY29wZSBpbiBWaW0JCQkJKmNzY29wZS1ob3d0b3VzZSoKKworVGhlIGZpcnN0IHRoaW5nIHlvdSBuZWVkIHRvIGRvIGlzIHRvIGJ1aWxkIGEgY3Njb3BlIGRhdGFiYXNlIGZvciB5b3VyCitzb3VyY2UgZmlsZXMuICBGb3IgdGhlIG1vc3QgYmFzaWMgY2FzZSwgc2ltcGx5IGRvICJjc2NvcGUgLWIiLiAgUGxlYXNlCityZWZlciB0byB0aGUgY3Njb3BlIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKK0Fzc3VtaW5nIHlvdSBoYXZlIGEgY3Njb3BlIGRhdGFiYXNlLCB5b3UgbmVlZCB0byAiYWRkIiB0aGUgZGF0YWJhc2UgdG8gVmltLgorVGhpcyBlc3RhYmxpc2hlcyBhIGNzY29wZSAiY29ubmVjdGlvbiIgYW5kIG1ha2VzIGl0IGF2YWlsYWJsZSBmb3IgVmltIHRvIHVzZS4KK1lvdSBjYW4gZG8gdGhpcyBpbiB5b3VyIC52aW1yYyBmaWxlLCBvciB5b3UgY2FuIGRvIGl0IG1hbnVhbGx5IGFmdGVyIHN0YXJ0aW5nCit2aW0uICBGb3IgZXhhbXBsZSwgdG8gYWRkIHRoZSBjc2NvcGUgZGF0YWJhc2UgImNzY29wZS5vdXQiLCB5b3Ugd291bGQgZG86CisKKwk6Y3MgYWRkIGNzY29wZS5vdXQKKworWW91IGNhbiBkb3VibGUtY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGlzIGJ5IGV4ZWN1dGluZyAiOmNzIHNob3ciLiAgVGhpcyB3aWxsCitwcm9kdWNlIG91dHB1dCB3aGljaCBsb29rcyBsaWtlIHRoaXM6CisKKyAjIHBpZAkgIGRhdGFiYXNlIG5hbWUJCQkgICAgICBwcmVwZW5kIHBhdGgKKyAwIDI4ODA2ICBjc2NvcGUub3V0CQkJICAgICAgPG5vbmU+CisKK05vdGU6CitCZWNhdXNlIG9mIHRoZSBNaWNyb3NvZnQgUlRMIGxpbWl0YXRpb25zLCBXaW4zMiB2ZXJzaW9uIHNob3dzIDAgaW5zdGVhZAorb2YgdGhlIHJlYWwgcGlkLgorCitPbmNlIGEgY3Njb3BlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIHlvdSBjYW4gbWFrZSBxdWVyaWVzIHRvIGNzY29wZSBhbmQKK3RoZSByZXN1bHRzIHdpbGwgYmUgcHJpbnRlZCB0byB5b3UuICBRdWVyaWVzIGFyZSBtYWRlIHVzaW5nIHRoZSBjb21tYW5kCisiOmNzIGZpbmQiLiAgRm9yIGV4YW1wbGU6CisKKwk6Y3MgZmluZCBnIEFMSUdOX1NJWkUKKworVGhpcyBjYW4gZ2V0IGEgbGl0dGxlIGN1bWJlcnNvbWUgc2luY2Ugb25lIGVuZHMgdXAgZG9pbmcgYSBzaWduaWZpY2FudAorYW1vdW50IG9mIHR5cGluZy4gIEZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgd2F5cyBhcm91bmQgdGhpcyBieSBtYXBwaW5nCitzaG9ydGN1dCBrZXlzLiAgU2VlIHxjc2NvcGUtc3VnZ2VzdGlvbnN8IGZvciBzdWdnZXN0ZWQgdXNhZ2UuCisKK0lmIHRoZSByZXN1bHRzIHJldHVybiBvbmx5IG9uZSBtYXRjaCwgeW91IHdpbGwgYXV0b21hdGljYWxseSBiZSB0YWtlbiB0byBpdC4KK0lmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWF0Y2gsIHlvdSB3aWxsIGJlIGdpdmVuIGEgc2VsZWN0aW9uIHNjcmVlbiB0byBwaWNrCit0aGUgbWF0Y2ggeW91IHdhbnQgdG8gZ28gdG8uICBBZnRlciB5b3UgaGF2ZSBqdW1wZWQgdG8gdGhlIG5ldyBsb2NhdGlvbiwKK3NpbXBseSBoaXQgQ3RybC1UIHRvIGdldCBiYWNrIHRvIHRoZSBwcmV2aW91cyBvbmUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBMaW1pdGF0aW9ucwkJCQkJCSpjc2NvcGUtbGltaXRhdGlvbnMqCisKK0NzY29wZSBzdXBwb3J0IGZvciBWaW0gaXMgb25seSBhdmFpbGFibGUgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhlc2UgZm91cgorc3lzdGVtIGNhbGxzOiBmb3JrKCksIHBpcGUoKSwgZXhlY2woKSwgd2FpdHBpZCgpLiAgVGhpcyBtZWFucyBpdCBpcyBtb3N0bHkKK2xpbWl0ZWQgdG8gVW5peCBzeXN0ZW1zLgorCitBZGRpdGlvbmFsbHkgQ3Njb3BlIHN1cHBvcnQgd29ya3MgZm9yIFdpbjMyLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGEKK2NzY29wZSB2ZXJzaW9uIGZvciBXaW4zMiBzZWU6CisKKwlodHRwOi8vaWFtcGhldC5ubS5ydS9jc2NvcGUvaW5kZXguaHRtbAorCitUaGVyZSBhcmUgYSBjb3VwbGUgb2YgaGFyZC1jb2RlZCBsaW1pdGF0aW9uczoKKworICAgIDEuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjc2NvcGUgY29ubmVjdGlvbnMgYWxsb3dlZCBpcyA4LiAgRG8geW91CisgICAgcmVhbGx5IG5lZWQgbW9yZT8KKworICAgIDIuIERvaW5nIGEgfDp0anVtcHwgd2hlbiB8OmNzdGFnfCBzZWFyY2hlcyB0aGUgdGFnIGZpbGVzIGlzIG5vdAorICAgIGNvbmZpZ3VyYWJsZSAoZS5nLiwgeW91IGNhbid0IGRvIGEgdHNlbGVjdCBpbnN0ZWFkKS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBTdWdnZXN0ZWQgdXNhZ2UJCQkJCSpjc2NvcGUtc3VnZ2VzdGlvbnMqCisKK1B1dCB0aGVzZSBlbnRyaWVzIGluIHlvdXIgLnZpbXJjIChhZGp1c3QgdGhlIHBhdGhuYW1lIGFjY29yZGluZ2x5IHRvIHlvdXIKK3NldHVwKTogPgorCisJaWYgaGFzKCJjc2NvcGUiKQorCQlzZXQgY3Nwcmc9L3Vzci9sb2NhbC9iaW4vY3Njb3BlCisJCXNldCBjc3RvPTAKKwkJc2V0IGNzdAorCQlzZXQgbm9jc3ZlcmIKKwkJIiBhZGQgYW55IGRhdGFiYXNlIGluIGN1cnJlbnQgZGlyZWN0b3J5CisJCWlmIGZpbGVyZWFkYWJsZSgiY3Njb3BlLm91dCIpCisJCSAgICBjcyBhZGQgY3Njb3BlLm91dAorCQkiIGVsc2UgYWRkIGRhdGFiYXNlIHBvaW50ZWQgdG8gYnkgZW52aXJvbm1lbnQKKwkJZWxzZWlmICRDU0NPUEVfREIgIT0gIiIKKwkJICAgIGNzIGFkZCAkQ1NDT1BFX0RCCisJCWVuZGlmCisJCXNldCBjc3ZlcmIKKwllbmRpZgorCitCeSBzZXR0aW5nICdjc2NvcGV0YWcnLCB3ZSBoYXZlIGVmZmVjdGl2ZWx5IHJlcGxhY2VkIGFsbCBpbnN0YW5jZXMgb2YgdGhlIDp0YWcKK2NvbW1hbmQgd2l0aCA6Y3N0YWcuICBUaGlzIGluY2x1ZGVzIDp0YWcsIEN0cmwtXSwgYW5kICJ2aW0gLXQiLiAgSW4gZG9pbmcKK3RoaXMsIHRoZSByZWd1bGFyIHRhZyBjb21tYW5kIG5vdCBvbmx5IHNlYXJjaGVzIHlvdXIgY3RhZ3MgZ2VuZXJhdGVkIHRhZworZmlsZXMsIGJ1dCB5b3VyIGNzY29wZSBkYXRhYmFzZXMgYXMgd2VsbC4KKworU29tZSB1c2VycyBtYXkgd2FudCB0byBrZWVwIHRoZSByZWd1bGFyIHRhZyBiZWhhdmlvciBhbmQgaGF2ZSBhIGRpZmZlcmVudAorc2hvcnRjdXQgdG8gYWNjZXNzIDpjc3RhZy4gIEZvciBleGFtcGxlLCBvbmUgY291bGQgbWFwIEN0cmwtXyAgKHVuZGVyc2NvcmUpCit0byA6Y3N0YWcgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCW1hcCA8Qy1fPiA6Y3N0YWcgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCitBIGNvdXBsZSBvZiB2ZXJ5IGNvbW1vbmx5IHVzZWQgY3Njb3BlIHF1ZXJpZXMgKHVzaW5nICI6Y3MgZmluZCIpIGlzIHRvCitmaW5kIGFsbCBmdW5jdGlvbnMgY2FsbGluZyBhIGNlcnRhaW4gZnVuY3Rpb24gYW5kIHRvIGZpbmQgYWxsIG9jY3VycmVuY2VzCitvZiBhIHBhcnRpY3VsYXIgQyBzeW1ib2wuICBUbyBkbyB0aGlzLCB5b3UgY2FuIHVzZSB0aGVzZSBtYXBwaW5ncyBhcyBhbgorZXhhbXBsZTogPgorCisJbWFwIGc8Qy1dPiA6Y3MgZmluZCAzIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwltYXAgZzxDLVw+IDpjcyBmaW5kIDAgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCitUaGVzZSBtYXBwaW5ncyBmb3IgQ3RybC1dIChyaWdodCBicmFja2V0KSBhbmQgQ3RybC1cIChiYWNrc2xhc2gpIGFsbG93IHlvdSB0bworcGxhY2UgeW91ciBjdXJzb3Igb3ZlciB0aGUgZnVuY3Rpb24gbmFtZSBvciBDIHN5bWJvbCBhbmQgcXVpY2tseSBxdWVyeSBjc2NvcGUKK2ZvciBhbnkgbWF0Y2hlcy4KKworT3IgeW91IG1heSB1c2UgdGhlIGZvbGxvd2luZyBzY2hlbWUsIGluc3BpcmVkIGJ5IFZpbS9Dc2NvcGUgdHV0b3JpYWwgZnJvbQorQ3Njb3BlIEhvbWUgUGFnZSAoaHR0cDovL2NzY29wZS5zb3VyY2Vmb3JnZS5uZXQvKTogPgorCisJbm1hcCA8Qy1fPnMgOmNzIGZpbmQgcyA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1fPmcgOmNzIGZpbmQgZyA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1fPmMgOmNzIGZpbmQgYyA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1fPnQgOmNzIGZpbmQgdCA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1fPmUgOmNzIGZpbmQgZSA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1fPmYgOmNzIGZpbmQgZiA8Qy1SPj1leHBhbmQoIjxjZmlsZT4iKTxDUj48Q1I+CisJbm1hcCA8Qy1fPmkgOmNzIGZpbmQgaSBePEMtUj49ZXhwYW5kKCI8Y2ZpbGU+Iik8Q1I+JDxDUj4KKwlubWFwIDxDLV8+ZCA6Y3MgZmluZCBkIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKworCSIgVXNpbmcgJ0NUUkwtc3BhY2ViYXInIHRoZW4gYSBzZWFyY2ggdHlwZSBtYWtlcyB0aGUgdmltIHdpbmRvdworCSIgc3BsaXQgaG9yaXpvbnRhbGx5LCB3aXRoIHNlYXJjaCByZXN1bHQgZGlzcGxheWVkIGluCisJIiB0aGUgbmV3IHdpbmRvdy4KKworCW5tYXAgPEMtU3BhY2U+cyA6c2NzIGZpbmQgcyA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1TcGFjZT5nIDpzY3MgZmluZCBnIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLVNwYWNlPmMgOnNjcyBmaW5kIGMgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCW5tYXAgPEMtU3BhY2U+dCA6c2NzIGZpbmQgdCA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1TcGFjZT5lIDpzY3MgZmluZCBlIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLVNwYWNlPmYgOnNjcyBmaW5kIGYgPEMtUj49ZXhwYW5kKCI8Y2ZpbGU+Iik8Q1I+PENSPgorCW5tYXAgPEMtU3BhY2U+aSA6c2NzIGZpbmQgaSBePEMtUj49ZXhwYW5kKCI8Y2ZpbGU+Iik8Q1I+JDxDUj4KKwlubWFwIDxDLVNwYWNlPmQgOnNjcyBmaW5kIGQgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCisJIiBIaXR0aW5nIENUUkwtc3BhY2UgKnR3aWNlKiBiZWZvcmUgdGhlIHNlYXJjaCB0eXBlIGRvZXMgYSB2ZXJ0aWNhbAorCSIgc3BsaXQgaW5zdGVhZCBvZiBhIGhvcml6b250YWwgb25lCisKKwlubWFwIDxDLVNwYWNlPjxDLVNwYWNlPnMKKwkJXDp2ZXJ0IHNjcyBmaW5kIHMgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCW5tYXAgPEMtU3BhY2U+PEMtU3BhY2U+ZworCQlcOnZlcnQgc2NzIGZpbmQgZyA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1TcGFjZT48Qy1TcGFjZT5jCisJCVw6dmVydCBzY3MgZmluZCBjIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLVNwYWNlPjxDLVNwYWNlPnQKKwkJXDp2ZXJ0IHNjcyBmaW5kIHQgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCW5tYXAgPEMtU3BhY2U+PEMtU3BhY2U+ZQorCQlcOnZlcnQgc2NzIGZpbmQgZSA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1TcGFjZT48Qy1TcGFjZT5pCisJCVw6dmVydCBzY3MgZmluZCBpIF48Qy1SPj1leHBhbmQoIjxjZmlsZT4iKTxDUj4kPENSPgorCW5tYXAgPEMtU3BhY2U+PEMtU3BhY2U+ZAorCQlcOnZlcnQgc2NzIGZpbmQgZCA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gQ3Njb3BlIGF2YWlsYWJpbGl0eSBhbmQgaW5mb3JtYXRpb24JCQkqY3Njb3BlLWluZm8qCisKK0lmIHlvdSBkbyBub3QgYWxyZWFkeSBoYXZlIGNzY29wZSAoaXQgZGlkIG5vdCBjb21lIHdpdGggeW91ciBjb21waWxlcgorbGljZW5zZSBvciBPUyBkaXN0cmlidXRpb24pLCB0aGVuIHlvdSBjYW4gZG93bmxvYWQgaXQgZm9yIGZyZWUgZnJvbToKKwlodHRwOi8vY3Njb3BlLnNvdXJjZWZvcmdlLm5ldC8KK1RoaXMgaXMgcmVsZWFzZWQgYnkgU0NPIHVuZGVyIHRoZSBCU0QgbGljZW5zZS4KKworSWYgeW91IHdhbnQgYSBuZXdlciB2ZXJzaW9uIG9mIGNzY29wZSwgeW91IHdpbGwgcHJvYmFibHkgaGF2ZSB0byBidXkgaXQuCitBY2NvcmRpbmcgdG8gdGhlIChvbGQpIG52aSBkb2N1bWVudGF0aW9uOgorCisJWW91IGNhbiBidXkgdmVyc2lvbiAxMy4zIHNvdXJjZSB3aXRoIGFuIHVucmVzdHJpY3RlZCBsaWNlbnNlCisJZm9yICQ0MDAgZnJvbSBBVCZUIFNvZnR3YXJlIFNvbHV0aW9ucyBieSBjYWxsaW5nICsxLTgwMC00NjItODE0Ni4KKworQWxzbyB5b3UgY2FuIGRvd25sb2FkIGNzY29wZSAxMy54IGFuZCBtbGNzY29wZSAxNC54IChtdWx0aS1saW5ndWFsIGNzY29wZQord2hpY2ggc3VwcG9ydHMgQywgQysrLCBKYXZhLCBsZXgsIHlhY2MsIGJyZWFrcG9pbnQgbGlzdGluZywgSW5ncmVzLCBhbmQgU0RMKQorZnJvbSBXb3JsZC1XaWRlIEV4cHRvb2xzIE9wZW4gU291cmNlIHBhY2thZ2VzIHBhZ2U6CisJaHR0cDovL3d3dy5iZWxsLWxhYnMuY29tL3Byb2plY3Qvd3dleHB0b29scy9wYWNrYWdlcy5odG1sCisKK0luIFNvbGFyaXMgMi54LCBpZiB5b3UgaGF2ZSB0aGUgQyBjb21waWxlciBsaWNlbnNlLCB5b3Ugd2lsbCBhbHNvIGhhdmUKK2NzY29wZS4gIEJvdGggYXJlIHVzdWFsbHkgbG9jYXRlZCB1bmRlciAvb3B0L1NVTldzcHJvL2JpbgorCitTR0kgZGV2ZWxvcGVycyBjYW4gYWxzbyBnZXQgaXQuICBTZWFyY2ggZm9yIENzY29wZSBvbiB0aGlzIHBhZ2U6CisJaHR0cDovL2ZyZWV3YXJlLnNnaS5jb20vaW5kZXgtYnktYWxwaGEuaHRtbAorCWh0dHBzOi8vdG9vbGJveC5zZ2kuY29tL3Rvb2xib3gvdXRpbGl0aWVzL2NzY29wZS8KK1RoZSBzZWNvbmQgb25lIGlzIGZvciB0aG9zZSB3aG8gaGF2ZSBhIHBhc3N3b3JkIGZvciB0aGUgU0dJIHRvb2xib3guCisKK1RoZXJlIGlzIHNvdXJjZSB0byBhbiBvbGRlciB2ZXJzaW9uIG9mIGEgY3Njb3BlIGNsb25lIChjYWxsZWQgImNzIikgYXZhaWxhYmxlCitvbiB0aGUgbmV0LiAgRHVlIHRvIHZhcmlvdXMgcmVhc29ucywgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIHdpdGggVmltLgorCitUaGUgY3Njb3BlIGludGVyZmFjZS9zdXBwb3J0IGZvciBWaW0gd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieQorQW5keSBLYWhuIDxhY2thaG5AbmV0YXBwLmNvbT4uICBUaGUgb3JpZ2luYWwgc3RydWN0dXJlIChhcyB3ZWxsIGFzIGEgdGlueQorYml0IG9mIGNvZGUpIHdhcyBhZGFwdGVkIGZyb20gdGhlIGNzY29wZSBpbnRlcmZhY2UgaW4gbnZpLiAgUGxlYXNlIHJlcG9ydAorYW55IHByb2JsZW1zLCBzdWdnZXN0aW9ucywgcGF0Y2hlcywgZXQgYWwuLCB5b3UgaGF2ZSBmb3IgdGhlIHVzYWdlIG9mCitjc2NvcGUgd2l0aGluIFZpbSB0byBoaW0uCisJCQkJCQkJKmNzY29wZS13aW4zMioKK0ZvciBhIGNzY29wZSB2ZXJzaW9uIGZvciBXaW4zMiBzZWU6IGh0dHA6Ly9pYW1waGV0Lm5tLnJ1L2NzY29wZS9pbmRleC5odG1sCisKK1dpbjMyIHN1cHBvcnQgd2FzIGFkZGVkIGJ5IFNlcmdleSBLaG9yZXYgPGtob3JldkBzb2Z0bGFiLnJ1Pi4gQ29udGFjdCBoaW0KK2lmIHlvdSBoYXZlIFdpbjMyLXNwZWNpZmljIGlzc3Vlcy4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2lmX29sZS50eHQgYi9ydW50aW1lL2RvYy9pZl9vbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZWQzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9pZl9vbGUudHh0CkBAIC0wLDAgKzEsMTYyIEBACisqaWZfb2xlLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDMgSnVuIDE5CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IFBhdWwgTW9vcmUKKworCitUaGUgT0xFIEludGVyZmFjZSB0byBWaW0JCQkJKm9sZS1pbnRlcmZhY2UqCisKKzEuIEFjdGl2YXRpb24JCQl8b2xlLWFjdGl2YXRpb258CisyLiBNZXRob2RzCQkJfG9sZS1tZXRob2RzfAorMy4gVGhlICJub3JtYWwiIGNvbW1hbmQJCXxvbGUtbm9ybWFsfAorNC4gUmVnaXN0cmF0aW9uCQkJfG9sZS1yZWdpc3RyYXRpb258Cis1LiBNUyBWaXN1YWwgU3R1ZGlvIGludGVncmF0aW9uCXxNU1Zpc3VhbFN0dWRpb3wKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCitPTEUgaXMgb25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K29sZXwgZmVhdHVyZS4gIFNlZQorc3JjL2lmX29sZS5JTlNUQUxMLgorQW4gYWx0ZXJuYXRpdmUgaXMgdXNpbmcgdGhlIGNsaWVudC1zZXJ2ZXIgY29tbXVuaWNhdGlvbiB8Y2xpZW50c2VydmVyfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBBY3RpdmF0aW9uCQkJCQkJKm9sZS1hY3RpdmF0aW9uKgorCitWaW0gYWN0cyBhcyBhbiBPTEUgYXV0b21hdGlvbiBzZXJ2ZXIsIGFjY2Vzc2libGUgZnJvbSBhbnkgYXV0b21hdGlvbiBjbGllbnQsCitmb3IgZXhhbXBsZSwgVmlzdWFsIEJhc2ljLCBQeXRob24sIG9yIFBlcmwuIFRoZSBWaW0gYXBwbGljYXRpb24gIm5hbWUiIChpdHMKKyJQcm9nSUQiLCBpbiBPTEUgdGVybWlub2xvZ3kpIGlzICJWaW0uQXBwbGljYXRpb24iLgorCitIZW5jZSwgaW4gb3JkZXIgdG8gc3RhcnQgYSBWaW0gaW5zdGFuY2UgKG9yIGNvbm5lY3QgdG8gYW4gYWxyZWFkeSBydW5uaW5nCitpbnN0YW5jZSksIGNvZGUgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSB1c2VkOgorCitbVmlzdWFsIEJhc2ljXSA+CisJRGltIFZpbSBBcyBPYmplY3QKKwlTZXQgVmltID0gQ3JlYXRlT2JqZWN0KCJWaW0uQXBwbGljYXRpb24iKQorCitbUHl0aG9uXSA+CisJZnJvbSB3aW4zMmNvbS5jbGllbnQuZHluYW1pYyBpbXBvcnQgRGlzcGF0Y2gKKwl2aW0gPSBEaXNwYXRjaCgnVmltLkFwcGxpY2F0aW9uJykKKworW1BlcmxdID4KKwl1c2UgV2luMzI6Ok9MRTsKKwkkdmltID0gbmV3IFdpbjMyOjpPTEUgJ1ZpbS5BcHBsaWNhdGlvbic7CisKK1ZpbSBkb2VzIG5vdCBzdXBwb3J0IGFjdGluZyBhcyBhICJoaWRkZW4iIE9MRSBzZXJ2ZXIsIGxpa2Ugc29tZSBvdGhlciBPTEUKK0F1dG9tYXRpb24gc2VydmVycy4gV2hlbiBhIGNsaWVudCBzdGFydHMgdXAgYW4gaW5zdGFuY2Ugb2YgVmltLCB0aGF0IGluc3RhbmNlCitpcyBpbW1lZGlhdGVseSB2aXNpYmxlLiBTaW1wbHkgY2xvc2luZyB0aGUgT0xFIGNvbm5lY3Rpb24gdG8gdGhlIFZpbSBpbnN0YW5jZQoraXMgbm90IGVub3VnaCB0byBzaHV0IGRvd24gdGhlIFZpbSBpbnN0YW5jZSAtIGl0IGlzIG5lY2Vzc2FyeSB0byBleHBsaWNpdGx5CitleGVjdXRlIGEgcXVpdCBjb21tYW5kIChmb3IgZXhhbXBsZSwgOnFhISwgOndxYSkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gTWV0aG9kcwkJCQkJCSpvbGUtbWV0aG9kcyoKKworVmltIGV4cG9zZXMgZm91ciBtZXRob2RzIGZvciB1c2UgYnkgY2xpZW50cy4KKworCQkJCQkJCSpvbGUtc2VuZGtleXMqCitTZW5kS2V5cyhrZXlzKQkJRXhlY3V0ZSBhIHNlcmllcyBvZiBrZXlzLgorCitUaGlzIG1ldGhvZCB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgc3RyaW5nIG9mIGtleXN0cm9rZXMuIFRoZXNlCitrZXlzdHJva2VzIGFyZSBleGVjdXRlZCBleGFjdGx5IGFzIGlmIHRoZXkgaGFkIGJlZW4gdHlwZXMgaW4gYXQgdGhlIGtleWJvYXJkLgorU3BlY2lhbCBrZXlzIGNhbiBiZSBnaXZlbiB1c2luZyB0aGVpciA8Li4+IG5hbWVzLCBhcyBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZQorb2YgYSBtYXBwaW5nLiBOb3RlOiBFeGVjdXRpb24gb2YgdGhlIEV4ICJub3JtYWwiIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCAtCitzZWUgYmVsb3cgfG9sZS1ub3JtYWx8LgorCitFeGFtcGxlcyAoVmlzdWFsIEJhc2ljIHN5bnRheCkgPgorCVZpbS5TZW5kS2V5cyAiaWhlbGxvPEVzYz4iCisJVmltLlNlbmRLZXlzICJtYTFHVjRqeWBhIgorCitUaGVzZSBleGFtcGxlcyBhc3N1bWUgdGhhdCBWaW0gc3RhcnRzIGluIE5vcm1hbCBtb2RlLiBUbyBmb3JjZSBOb3JtYWwgbW9kZSwKK3N0YXJ0IHRoZSBrZXkgc2VxdWVuY2Ugd2l0aCBDVFJMLVwgQ1RSTC1OIGFzIGluID4KKworCVZpbS5TZW5kS2V5cyAiPEMtXD48Qy1OPmloZWxsbzxFc2M+IgorCitDVFJMLVwgQ1RSTC1OIHJldHVybnMgVmltIHRvIE5vcm1hbCBtb2RlLCB3aGVuIGluIEluc2VydCBvciBDb21tYW5kLWxpbmUgbW9kZS4KK05vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qgd29yayBoYWxmd2F5IGEgVmltIGNvbW1hbmQKKworCQkJCQkJCSpvbGUtZXZhbCoKK0V2YWwoZXhwcikJCUV2YWx1YXRlIGFuIGV4cHJlc3Npb24uCisKK1RoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIHBhcmFtZXRlciwgd2hpY2ggaXMgYW4gZXhwcmVzc2lvbiBpbiBWaW0ncyBub3JtYWwKK2Zvcm1hdCAoc2VlIHxleHByZXNzaW9ufCkuICBJdCByZXR1cm5zIGEgc3RyaW5nLCB3aGljaCBpcyB0aGUgcmVzdWx0IG9mCitldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uLgorCitFeGFtcGxlcyAoVmlzdWFsIEJhc2ljIHN5bnRheCkgPgorCUxpbmUyMCA9IFZpbS5FdmFsKCJnZXRsaW5lKDIwKSIpCisJVHdlbHZlID0gVmltLkV2YWwoIjYgKyA2IikJCScgTm90ZSB0aGlzIGlzIGEgU1RSSU5HCisJRm9udCA9IFZpbS5FdmFsKCImZ3VpZm9udCIpCis8CisJCQkJCQkJKm9sZS1zZXRmb3JlZ3JvdW5kKgorU2V0Rm9yZWdyb3VuZCgpCQlNYWtlIHRoZSBWaW0gd2luZG93IGNvbWUgdG8gdGhlIGZvcmVncm91bmQKKworVGhpcyBtZXRob2QgdGFrZXMgbm8gYXJndW1lbnRzLiAgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCisKK0V4YW1wbGUgKFZpc3VhbCBCYXNpYyBzeW50YXgpID4KKwlWaW0uU2V0Rm9yZWdyb3VuZAorPAorCisJCQkJCQkJKm9sZS1nZXRod25kKgorR2V0SHduZCgpCQlSZXR1cm4gdGhlIGhhbmRsZSBvZiB0aGUgVmltIHdpbmRvdy4KKworVGhpcyBtZXRob2QgdGFrZXMgbm8gYXJndW1lbnRzLiAgSXQgcmV0dXJucyB0aGUgaHduZCBvZiB0aGUgbWFpbiBWaW13aW5kb3cuCitZb3UgY2FuIHVzZSB0aGlzIGlmIHlvdSBhcmUgd3JpdGluZyBzb21ldGhpbmcgd2hpY2ggbmVlZHMgdG8gbWFuaXB1bGF0ZSB0aGUKK1ZpbSB3aW5kb3csIG9yIHRvIHRyYWNrIGl0IGluIHRoZSB6LW9yZGVyLCBldGMuCisKK0V4YW1wbGUgKFZpc3VhbCBCYXNpYyBzeW50YXgpID4KKwlWaW1fSHduZCA9IFZpbS5HZXRId25kCis8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gVGhlICJub3JtYWwiIGNvbW1hbmQJCQkJCSpvbGUtbm9ybWFsKgorCitEdWUgdG8gdGhlIHdheSBWaW0gcHJvY2Vzc2VzIE9MRSBBdXRvbWF0aW9uIGNvbW1hbmRzLCBjb21iaW5lZCB3aXRoIHRoZSBtZXRob2QKK29mIGltcGxlbWVudGF0aW9uIG9mIHRoZSBleCBjb21tYW5kIDpub3JtYWwsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBleGVjdXRlIHRoZQorOm5vcm1hbCBjb21tYW5kIHZpYSBPTEUgYXV0b21hdGlvbi4gQW55IGF0dGVtcHQgdG8gZG8gc28gd2lsbCBmYWlsLCBwcm9iYWJseQoraGFybWxlc3NseSwgYWx0aG91Z2ggcG9zc2libHkgaW4gdW5wcmVkaWN0YWJsZSB3YXlzLgorCitUaGVyZSBpcyBjdXJyZW50bHkgbm8gcHJhY3RpY2FsIHdheSB0byB0cmFwIHRoaXMgc2l0dWF0aW9uLCBhbmQgdXNlcnMgbXVzdAorc2ltcGx5IGJlIGF3YXJlIG9mIHRoZSBsaW1pdGF0aW9uLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBSZWdpc3RyYXRpb24JCQkJCSpvbGUtcmVnaXN0cmF0aW9uKiAqRTI0MyoKKworQmVmb3JlIFZpbSB3aWxsIGFjdCBhcyBhbiBPTEUgc2VydmVyLCBpdCBtdXN0IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIHN5c3RlbQorcmVnaXN0cnkuIEluIG9yZGVyIHRvIGRvIHRoaXMsIFZpbSBzaG91bGQgYmUgcnVuIHdpdGggYSBzaW5nbGUgcGFyYW1ldGVyIG9mCisiLXJlZ2lzdGVyIi4KKwkJCQkJCQkqLXJlZ2lzdGVyKiAgPgorCWd2aW0gLXJlZ2lzdGVyCisKK0lmIGd2aW0gd2l0aCBPTEUgc3VwcG9ydCBpcyBydW4gYW5kIG5vdGljZXMgdGhhdCBubyBWaW0gT0xFIHNlcnZlciBoYXMgYmVlbgorcmVnaXN0ZXJlZCwgaXQgd2lsbCBwcmVzZW50IGEgZGlhbG9nIGFuZCBvZmZlcnMgeW91IHRoZSBjaG9pY2UgdG8gcmVnaXN0ZXIgYnkKK2NsaWNraW5nICJZZXMiLgorCitJbiBzb21lIHNpdHVhdGlvbnMgcmVnaXN0ZXJpbmcgaXMgbm90IHBvc3NpYmxlLiAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlCityZWdpc3RyeSBpcyBub3Qgd3JpdGFibGUuICBJZiB5b3UgcnVuIGludG8gdGhpcyBwcm9ibGVtIHlvdSBuZWVkIHRvIHJ1biBndmltCithcyAiQWRtaW5pc3RyYXRvciIuCisKK09uY2UgdmltIGlzIHJlZ2lzdGVyZWQsIHRoZSBhcHBsaWNhdGlvbiBwYXRoIGlzIHN0b3JlZCBpbiB0aGUgcmVnaXN0cnkuIEJlZm9yZQorbW92aW5nLCBkZWxldGluZywgb3IgdXBncmFkaW5nIFZpbSwgdGhlIHJlZ2lzdHJ5IGVudHJpZXMgc2hvdWxkIGJlIHJlbW92ZWQKK3VzaW5nIHRoZSAiLXVucmVnaXN0ZXIiIHN3aXRjaC4KKwkJCQkJCQkqLXVucmVnaXN0ZXIqICA+CisJZ3ZpbSAtdW5yZWdpc3RlcgorCitUaGUgT0xFIG1lY2hhbmlzbSB3aWxsIHVzZSB0aGUgZmlyc3QgcmVnaXN0ZXJlZCBWaW0gaXQgZmluZHMuICBJZiBhIFZpbSBpcworYWxyZWFkeSBydW5uaW5nLCB0aGlzIG9uZSB3aWxsIGJlIHVzZWQuICBJZiB5b3Ugd2FudCB0byBoYXZlIChzZXZlcmFsKSBWaW0KK3Nlc3Npb25zIG9wZW4gdGhhdCBzaG91bGQgbm90IHJlYWN0IHRvIE9MRSBjb21tYW5kcywgdXNlIHRoZSBub24tT0xFIHZlcnNpb24sCithbmQgcHV0IGl0IGluIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4gIFRoZSBPTEUgdmVyc2lvbiBzaG91bGQgdGhlbiBiZSBwdXQgaW4gYQorZGlyZWN0b3J5IHRoYXQgaXMgbm90IGluIHlvdXIgbm9ybWFsIHBhdGgsIHNvIHRoYXQgdHlwaW5nICJndmltIiB3aWxsIHN0YXJ0Cit0aGUgbm9uLU9MRSB2ZXJzaW9uLgorCisJCQkJCQkJKi1zaWxlbnQqCitUbyBhdm9pZCB0aGUgbWVzc2FnZSBib3ggdGhhdCBwb3BzIHVwIHRvIHJlcG9ydCB0aGUgcmVzdWx0LCBwcmVwZW5kICItc2lsZW50IjoKKz4KKwlndmltIC1zaWxlbnQgLXJlZ2lzdGVyCisJZ3ZpbSAtc2lsZW50IC11bnJlZ2lzdGVyCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gTVMgVmlzdWFsIFN0dWRpbyBpbnRlZ3JhdGlvbgkJCSpNU1Zpc3VhbFN0dWRpbyogKlZpc1ZpbSoKKworVGhlIE9MRSB2ZXJzaW9uIGNhbiBiZSB1c2VkIHRvIHJ1biBWaW0gYXMgdGhlIGVkaXRvciBpbiBNaWNyb3NvZnQgVmlzdWFsCitTdHVkaW8uICBUaGlzIGlzIGNhbGxlZCAiVmlzVmltIi4gIEl0IGlzIGluY2x1ZGVkIGluIHRoZSBhcmNoaXZlIHRoYXQgY29udGFpbnMKK3RoZSBPTEUgdmVyc2lvbi4gIFRoZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgcnVudGltZSBkaXJlY3RvcnksIHRoZQorUkVBRE1FX1Zpc1ZpbS50eHQgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaWZfcGVybC50eHQgYi9ydW50aW1lL2RvYy9pZl9wZXJsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODJjZDZhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvaWZfcGVybC50eHQKQEAgLTAsMCArMSwyNTggQEAKKyppZl9wZXJsLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDEKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgU3ZlbiBWZXJkb29sYWVnZQorCQkJCQkgYW5kIE1hdHQgR2VyYXNzaW1vZgorCitQZXJsIGFuZCBWaW0JCQkJKnBlcmwqICpQZXJsKgorCisxLiBFZGl0aW5nIFBlcmwgZmlsZXMJCQl8cGVybC1lZGl0aW5nfAorMi4gQ29tcGlsaW5nIFZJTSB3aXRoIFBlcmwgaW50ZXJmYWNlCXxwZXJsLWNvbXBpbGluZ3wKKzMuIFVzaW5nIHRoZSBQZXJsIGludGVyZmFjZQkJfHBlcmwtdXNpbmd8CisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKworVGhlIFBlcmwgaW50ZXJmYWNlIG9ubHkgd29ya3Mgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggdGhlIHwrcGVybHwgZmVhdHVyZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBFZGl0aW5nIFBlcmwgZmlsZXMJCQkJCSpwZXJsLWVkaXRpbmcqCisKK1ZpbSBzeW50YXggaGlnaGxpZ2h0aW5nIHN1cHBvcnRzIFBlcmwgYW5kIFBPRCBmaWxlcy4gIFZpbSBhc3N1bWVzIGEgZmlsZSBpcworUGVybCBjb2RlIGlmIHRoZSBmaWxlbmFtZSBoYXMgYSAucGwgb3IgLnBtIHN1ZmZpeC4gVmltIGFsc28gZXhhbWluZXMgdGhlIGZpcnN0CitsaW5lIG9mIGEgZmlsZSwgcmVnYXJkbGVzcyBvZiB0aGUgZmlsZW5hbWUgc3VmZml4LCB0byBjaGVjayBpZiBhIGZpbGUgaXMgYQorUGVybCBzY3JpcHQgKHNlZSBzY3JpcHRzLnZpbSBpbiBWaW0ncyBzeW50YXggZGlyZWN0b3J5KS4gIFZpbSBhc3N1bWVzIGEgZmlsZQoraXMgUE9EIHRleHQgaWYgdGhlIGZpbGVuYW1lIGhhcyBhIC5QT0Qgc3VmZml4LgorCitUbyB1c2UgdGFncyB3aXRoIFBlcmwsIHlvdSBuZWVkIGEgcmVjZW50IHZlcnNpb24gb2YgRXh1YmVyYW50IGN0YWdzLiAgTG9vaworaGVyZToKKwlodHRwOi8vY3RhZ3Muc291cmNlZm9yZ2UubmV0CisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBQZXJsIHNjcmlwdCBwbHRhZ3MucGwsIHdoaWNoIGlzIHNoaXBwZWQgd2l0aAorVmltIGluIHRoZSAkVklNUlVOVElNRS90b29scyBkaXJlY3RvcnkuICBUaGlzIHNjcmlwdCBoYXMgY3VycmVudGx5IG1vcmUKK2ZlYXR1cmVzIHRoYW4gRXh1YmVyYW50IGN0YWdzJyBQZXJsIHN1cHBvcnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gQ29tcGlsaW5nIFZJTSB3aXRoIFBlcmwgaW50ZXJmYWNlCQkJKnBlcmwtY29tcGlsaW5nKgorCitUbyBjb21waWxlIFZpbSB3aXRoIFBlcmwgaW50ZXJmYWNlLCB5b3UgbmVlZCBQZXJsIDUuMDA0IChvciBsYXRlcikuICBQZXJsIG11c3QKK2JlIGluc3RhbGxlZCBiZWZvcmUgeW91IGNvbXBpbGUgVmltLiAgVmltJ3MgUGVybCBpbnRlcmZhY2UgZG9lcyBOT1Qgd29yayB3aXRoCit0aGUgNS4wMDMgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIG9mZmljaWFsbHkgcmVsZWFzZWQhICBJdCB3aWxsIHByb2JhYmx5IHdvcmsKK3dpdGggUGVybCA1LjAwM18wNSBhbmQgbGF0ZXIuCisKK1RoZSBQZXJsIHBhdGNoZXMgZm9yIFZpbSB3ZXJlIG1hZGUgYnk6CisJU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9AYnJldWdoZWwudWZzaWEuYWMuYmU+CisJTWF0dCBHZXJhc3NpbW9mCisKK1BlcmwgZm9yIE1TLVdpbmRvd3MgY2FuIGJlIGZvdW5kIGF0OgoraHR0cDovL3d3dy5wZXJsLmNvbS9DUEFOL3BvcnRzL250L1N0YW5kYXJkL3g4Ni8KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBVc2luZyB0aGUgUGVybCBpbnRlcmZhY2UJCQkJKnBlcmwtdXNpbmcqCisKKwkJCQkJCQkqOnBlcmwqICo6cGUqCis6cGVbcmxdIHtjbWR9CQlFeGVjdXRlIFBlcmwgY29tbWFuZCB7Y21kfS4gVGhlIGN1cnJlbnQgcGFja2FnZQorCQkJaXMgIm1haW4iLgorCis6cGVbcmxdIDw8IHtlbmRwYXR0ZXJufQore3NjcmlwdH0KK3tlbmRwYXR0ZXJufQorCQkJRXhlY3V0ZSBQZXJsIHNjcmlwdCB7c2NyaXB0fS4KKwkJCXtlbmRwYXR0ZXJufSBtdXN0IE5PVCBiZSBwcmVjZWRlZCBieSBhbnkgd2hpdGUgc3BhY2UuCisJCQlJZiB7ZW5kcGF0dGVybn0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYSBkb3QgJy4nCisJCQlsaWtlIGZvciB0aGUgfDphcHBlbmR8IGFuZCB8Omluc2VydHwgY29tbWFuZHMuICBVc2luZworCQkJJy4nIGhlbHBzIHdoZW4gaW5zaWRlIGEgZnVuY3Rpb24sIGJlY2F1c2UgIiRpOyIgbG9va3MKKwkJCWxpa2UgdGhlIHN0YXJ0IG9mIGFuIHw6aW5zZXJ0fCBjb21tYW5kIHRvIFZpbS4KKwkJCVRoaXMgZm9ybSBvZiB0aGUgfDpwZXJsfCBjb21tYW5kIGlzIG1haW5seSB1c2VmdWwgZm9yCisJCQlpbmNsdWRpbmcgcGVybCBjb2RlIGluIHZpbSBzY3JpcHRzLgorCQkJTm90ZTogVGhpcyBjb21tYW5kIGRvZXNuJ3Qgd29yayB3aGVuIHRoZSBQZXJsIGZlYXR1cmUKKwkJCXdhc24ndCBjb21waWxlZCBpbi4gIFRvIGF2b2lkIGVycm9ycywgc2VlCisJCQl8c2NyaXB0LWhlcmV8LgorCisKK0V4YW1wbGUgdmltIHNjcmlwdDogPgorCisJZnVuY3Rpb24hIFdoaXRlUGVhcmwoKQorCXBlcmwgPDwgRU9GCisJCVZJTTo6TXNnKCJwZWFybHMgYXJlIG5pY2UgZm9yIG5lY2tsYWNlcyIpOworCQlWSU06Ok1zZygicnVieXMgZm9yIHJpbmdzIik7CisJCVZJTTo6TXNnKCJweXRob25zIGZvciBiYWdzIik7CisJCVZJTTo6TXNnKCJ0Y2xzPz8/PyIpOworCUVPRgorCWVuZGZ1bmN0aW9uCis8CisKKwkJCQkJCQkqOnBlcmxkbyogKjpwZXJsZCoKKzpbcmFuZ2VdcGVybGRbb10ge2NtZH0JRXhlY3V0ZSBQZXJsIGNvbW1hbmQge2NtZH0gZm9yIGVhY2ggbGluZSBpbiB0aGUKKwkJCVtyYW5nZV0sIHdpdGggJF8gYmVpbmcgc2V0IHRvIHRoZSB0ZXh0IG9mIGVhY2ggbGluZSBpbgorCQkJdHVybiwgd2l0aG91dCBhIHRyYWlsaW5nIDxFT0w+LiBTZXR0aW5nICRfIHdpbGwgY2hhbmdlCisJCQl0aGUgdGV4dCwgYnV0IG5vdGUgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gYWRkIG9yCisJCQlkZWxldGUgbGluZXMgdXNpbmcgdGhpcyBjb21tYW5kLgorCQkJVGhlIGRlZmF1bHQgZm9yIFtyYW5nZV0gaXMgdGhlIHdob2xlIGZpbGU6ICIxLCQiLgorCitIZXJlIGFyZSBzb21lIHRoaW5ncyB5b3UgY2FuIHRyeTogPgorCisgIDpwZXJsICRhPTEKKyAgOnBlcmxkbyAkXyA9IHJldmVyc2UoJF8pOzEKKyAgOnBlcmwgVklNOjpNc2coImhlbGxvIikKKyAgOnBlcmwgJGxpbmUgPSAkY3VyYnVmLT5HZXQoNDIpCis8CisJCQkJCQkJKkUyOTkqCitFeGVjdXRpbmcgUGVybCBjb21tYW5kcyBpbiB0aGUgfHNhbmRib3h8IGlzIGxpbWl0ZWQuICAiOnBlcmxkbyIgd2lsbCBub3QgYmUKK3Bvc3NpYmxlIGF0IGFsbC4gICI6cGVybCIgd2lsbCBiZSBldmFsdWF0ZWQgaW4gdGhlIFNhZmUgZW52aXJvbm1lbnQsIGlmCitwb3NzaWJsZS4KKworCisJCQkJCQkJKnBlcmwtb3ZlcnZpZXcqCitIZXJlIGlzIGFuIG92ZXJ2aWV3IG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIFBlcmw6ID4KKworICA6cGVybCBWSU06Ok1zZygiVGV4dCIpCQkjIGRpc3BsYXlzIGEgbWVzc2FnZQorICA6cGVybCBWSU06Ok1zZygiRXJyb3IiLCAiRXJyb3JNc2ciKQkjIGRpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2UKKyAgOnBlcmwgVklNOjpNc2coInJlbWFyayIsICJDb21tZW50IikJIyBkaXNwbGF5cyBhIGhpZ2hsaWdodGVkIG1lc3NhZ2UKKyAgOnBlcmwgVklNOjpTZXRPcHRpb24oImFpIikJCSMgc2V0cyBhIHZpbSBvcHRpb24KKyAgOnBlcmwgJG5idWYgPSBWSU06OkJ1ZmZlcnMoKQkJIyByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVmZmVycworICA6cGVybCBAYnVmbGlzdCA9IFZJTTo6QnVmZmVycygpCSMgcmV0dXJucyBhcnJheSBvZiBhbGwgYnVmZmVycworICA6cGVybCAkbXlidWYgPSAoVklNOjpCdWZmZXJzKCdxcS5jJykpWzBdICMgcmV0dXJucyBidWZmZXIgb2JqZWN0IGZvciAncXEuYycKKyAgOnBlcmwgQHdpbmxpc3QgPSBWSU06OldpbmRvd3MoKQkjIHJldHVybnMgYXJyYXkgb2YgYWxsIHdpbmRvd3MKKyAgOnBlcmwgJG53aW4gPSBWSU06OldpbmRvd3MoKQkJIyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2luZG93cworICA6cGVybCAoJHN1Y2Nlc3MsICR2KSA9IFZJTTo6RXZhbCgnJnBhdGgnKSAjICR2OiBvcHRpb24gJ3BhdGgnLCAkc3VjY2VzczogMQorICA6cGVybCAoJHN1Y2Nlc3MsICR2KSA9IFZJTTo6RXZhbCgnJnh5eicpICAjICR2OiAnJyBhbmQgJHN1Y2Nlc3M6IDAKKyAgOnBlcmwgJHYgPSBWSU06OkV2YWwoJ2V4cGFuZCgiPGNmaWxlPiIpJykgIyBleHBhbmRzIDxjZmlsZT4KKyAgOnBlcmwgJGN1cndpbi0+U2V0SGVpZ2h0KDEwKQkJIyBzZXRzIHRoZSB3aW5kb3cgaGVpZ2h0CisgIDpwZXJsIEBwb3MgPSAkY3Vyd2luLT5DdXJzb3IoKQkjIHJldHVybnMgKHJvdywgY29sKSBhcnJheQorICA6cGVybCBAcG9zID0gKDEwLCAxMCkKKyAgOnBlcmwgJGN1cndpbi0+Q3Vyc29yKEBwb3MpCQkjIHNldHMgY3Vyc29yIHRvIEBwb3MKKyAgOnBlcmwgJGN1cndpbi0+Q3Vyc29yKDEwLDEwKQkJIyBzZXRzIGN1cnNvciB0byByb3cgMTAgY29sIDEwCisgIDpwZXJsICRteWJ1ZiA9ICRjdXJ3aW4tPkJ1ZmZlcigpCSMgcmV0dXJucyB0aGUgYnVmZmVyIG9iamVjdCBmb3Igd2luZG93CisgIDpwZXJsICRjdXJidWYtPk5hbWUoKQkJCSMgcmV0dXJucyBidWZmZXIgbmFtZQorICA6cGVybCAkY3VyYnVmLT5OdW1iZXIoKQkJIyByZXR1cm5zIGJ1ZmZlciBudW1iZXIKKyAgOnBlcmwgJGN1cmJ1Zi0+Q291bnQoKQkJIyByZXR1cm5zIHRoZSBudW1iZXIgb2YgbGluZXMKKyAgOnBlcmwgJGwgPSAkY3VyYnVmLT5HZXQoMTApCQkjIHJldHVybnMgbGluZSAxMAorICA6cGVybCBAbCA9ICRjdXJidWYtPkdldCgxIC4uIDUpCSMgcmV0dXJucyBsaW5lcyAxIHRocm91Z2ggNQorICA6cGVybCAkY3VyYnVmLT5EZWxldGUoMTApCQkjIGRlbGV0ZXMgbGluZSAxMAorICA6cGVybCAkY3VyYnVmLT5EZWxldGUoMTAsIDIwKQkJIyBkZWxldGUgbGluZXMgMTAgdGhyb3VnaCAyMAorICA6cGVybCAkY3VyYnVmLT5BcHBlbmQoMTAsICJMaW5lIikJIyBhcHBlbmRzIGEgbGluZQorICA6cGVybCAkY3VyYnVmLT5BcHBlbmQoMTAsICJMaW5lMSIsICJMaW5lMiIsICJMaW5lMyIpICMgYXBwZW5kcyAzIGxpbmVzCisgIDpwZXJsIEBsID0gKCJMMSIsICJMMiIsICJMMyIpCisgIDpwZXJsICRjdXJidWYtPkFwcGVuZCgxMCwgQGwpCQkjIGFwcGVuZHMgTDEsIEwyIGFuZCBMMworICA6cGVybCAkY3VyYnVmLT5TZXQoMTAsICJMaW5lIikJIyByZXBsYWNlcyBsaW5lIDEwCisgIDpwZXJsICRjdXJidWYtPlNldCgxMCwgIkxpbmUxIiwgIkxpbmUyIikJIyByZXBsYWNlcyBsaW5lcyAxMCBhbmQgMTEKKyAgOnBlcmwgJGN1cmJ1Zi0+U2V0KDEwLCBAbCkJCSMgcmVwbGFjZXMgMyBsaW5lcworPAorCQkJCQkJCSpwZXJsLU1zZyoKK1ZJTTo6TXNnKHttc2d9LCB7Z3JvdXB9PykKKwkJCURpc3BsYXlzIHRoZSBtZXNzYWdlIHttc2d9LiAgVGhlIG9wdGlvbmFsIHtncm91cH0KKwkJCWFyZ3VtZW50IHNwZWNpZmllcyBhIGhpZ2hsaWdodCBncm91cCBmb3IgVmltIHRvIHVzZQorCQkJZm9yIHRoZSBtZXNzYWdlLgorCisJCQkJCQkJKnBlcmwtU2V0T3B0aW9uKgorVklNOjpTZXRPcHRpb24oe2FyZ30pCVNldHMgYSB2aW0gb3B0aW9uLiAge2FyZ30gY2FuIGJlIGFueSBhcmd1bWVudCB0aGF0IHRoZQorCQkJIjpzZXQiIGNvbW1hbmQgYWNjZXB0cy4gIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoYXQgbm8KKwkJCXNwYWNlcyBhcmUgYWxsb3dlZCBpbiB0aGUgYXJndW1lbnQhICBTZWUgfDpzZXR8LgorCisJCQkJCQkJKnBlcmwtQnVmZmVycyoKK1ZJTTo6QnVmZmVycyhbe2JufS4uLl0pCVdpdGggbm8gYXJndW1lbnRzLCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhlIGJ1ZmZlcnMKKwkJCWluIGFuIGFycmF5IGNvbnRleHQgb3IgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMKKwkJCWluIGEgc2NhbGFyIGNvbnRleHQuICBGb3IgYSBsaXN0IG9mIGJ1ZmZlciBuYW1lcyBvcgorCQkJbnVtYmVycyB7Ym59LCByZXR1cm5zIGEgbGlzdCBvZiB0aGUgYnVmZmVycyBtYXRjaGluZworCQkJe2JufSwgdXNpbmcgdGhlIHNhbWUgcnVsZXMgYXMgVmltJ3MgaW50ZXJuYWwKKwkJCXxidWZuYW1lKCl8IGZ1bmN0aW9uLgorCisJCQkJCQkJKnBlcmwtV2luZG93cyoKK1ZJTTo6V2luZG93cyhbe3dufS4uLl0pCVdpdGggbm8gYXJndW1lbnRzLCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhlIHdpbmRvd3MKKwkJCWluIGFuIGFycmF5IGNvbnRleHQgb3IgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHdpbmRvd3MKKwkJCWluIGEgc2NhbGFyIGNvbnRleHQuICBGb3IgYSBsaXN0IG9mIHdpbmRvdyBudW1iZXJzCisJCQl7d259LCByZXR1cm5zIGEgbGlzdCBvZiB0aGUgd2luZG93cyB3aXRoIHRob3NlCisJCQludW1iZXJzLgorCisJCQkJCQkJKnBlcmwtRG9Db21tYW5kKgorVklNOjpEb0NvbW1hbmQoe2NtZH0pCUV4ZWN1dGVzIEV4IGNvbW1hbmQge2NtZH0uCisKKwkJCQkJCQkqcGVybC1FdmFsKgorVklNOjpFdmFsKHtleHByfSkJRXZhbHVhdGVzIHtleHByfSBhbmQgcmV0dXJucyAoc3VjY2VzcywgdmFsKS4KKwkJCXN1Y2Nlc3M9MSBpbmRpY2F0ZXMgdGhhdCB2YWwgY29udGFpbnMgdGhlIHZhbHVlIG9mCisJCQl7ZXhwcn07IHN1Y2Nlc3M9MCBpbmRpY2F0ZXMgYSBmYWlsdXJlIHRvIGV2YWx1YXRlCisJCQl0aGUgZXhwcmVzc2lvbi4gICdAeCcgcmV0dXJucyB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXIKKwkJCXgsICcmeCcgcmV0dXJucyB0aGUgdmFsdWUgb2Ygb3B0aW9uIHgsICd4JyByZXR1cm5zIHRoZQorCQkJdmFsdWUgb2YgaW50ZXJuYWwgfHZhcmlhYmxlc3wgeCwgYW5kICckeCcgaXMgZXF1aXZhbGVudAorCQkJdG8gcGVybCdzICRFTlZ7eH0uICBBbGwgfGZ1bmN0aW9uc3wgYWNjZXNzaWJsZSBmcm9tCisJCQl0aGUgY29tbWFuZC1saW5lIGFyZSB2YWxpZCBmb3Ige2V4cHJ9LgorCisJCQkJCQkJKnBlcmwtU2V0SGVpZ2h0KgorV2luZG93LT5TZXRIZWlnaHQoe2hlaWdodH0pCisJCQlTZXRzIHRoZSBXaW5kb3cgaGVpZ2h0IHRvIHtoZWlnaHR9LCB3aXRoaW4gc2NyZWVuCisJCQlsaW1pdHMuCisKKwkJCQkJCQkqcGVybC1HZXRDdXJzb3IqCitXaW5kb3ctPkN1cnNvcih7cm93fT8sIHtjb2x9PykKKwkJCVdpdGggbm8gYXJndW1lbnRzLCByZXR1cm5zIGEgKHJvdywgY29sKSBhcnJheSBmb3IgdGhlCisJCQljdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgV2luZG93LiAgV2l0aCB7cm93fSBhbmQKKwkJCXtjb2x9IGFyZ3VtZW50cywgc2V0cyB0aGUgV2luZG93J3MgY3Vyc29yIHBvc2l0aW9uIHRvCisJCQl7cm93fSBhbmQge2NvbH0uICBOb3RlIHRoYXQge2NvbH0gaXMgbnVtYmVyZWQgZnJvbSAwLAorCQkJUGVybC1mYXNoaW9uLCBhbmQgdGh1cyBpcyBvbmUgbGVzcyB0aGFuIHRoZSB2YWx1ZSBpbgorCQkJVmltJ3MgcnVsZXIuCisKK1dpbmRvdy0+QnVmZmVyKCkJCQkJCSpwZXJsLUJ1ZmZlcioKKwkJCVJldHVybnMgdGhlIEJ1ZmZlciBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4KKwkJCVdpbmRvdy4KKworCQkJCQkJCSpwZXJsLU5hbWUqCitCdWZmZXItPk5hbWUoKQkJUmV0dXJucyB0aGUgZmlsZW5hbWUgZm9yIHRoZSBCdWZmZXIuCisKKwkJCQkJCQkqcGVybC1OdW1iZXIqCitCdWZmZXItPk51bWJlcigpCVJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgQnVmZmVyLgorCisJCQkJCQkJKnBlcmwtQ291bnQqCitCdWZmZXItPkNvdW50KCkJCVJldHVybnMgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgQnVmZmVyLgorCisJCQkJCQkJKnBlcmwtR2V0KgorQnVmZmVyLT5HZXQoe2xudW19LCB7bG51bX0/LCAuLi4pCisJCQlSZXR1cm5zIGEgdGV4dCBzdHJpbmcgb2YgbGluZSB7bG51bX0gaW4gdGhlIEJ1ZmZlcgorCQkJZm9yIGVhY2gge2xudW19IHNwZWNpZmllZC4gQW4gYXJyYXkgY2FuIGJlIHBhc3NlZAorCQkJd2l0aCBhIGxpc3Qgb2Yge2xudW19J3Mgc3BlY2lmaWVkLgorCisJCQkJCQkJKnBlcmwtRGVsZXRlKgorQnVmZmVyLT5EZWxldGUoe2xudW19LCB7bG51bX0/KQorCQkJRGVsZXRlcyBsaW5lIHtsbnVtfSBpbiB0aGUgQnVmZmVyLiAgV2l0aCB0aGUgc2Vjb25kCisJCQl7bG51bX0sIGRlbGV0ZXMgdGhlIHJhbmdlIG9mIGxpbmVzIGZyb20gdGhlIGZpcnN0CisJCQl7bG51bX0gdG8gdGhlIHNlY29uZCB7bG51bX0uCisKKwkJCQkJCQkqcGVybC1BcHBlbmQqCitCdWZmZXItPkFwcGVuZCh7bG51bX0sIHtsaW5lfSwge2xpbmV9PywgLi4uKQorCQkJQXBwZW5kcyBlYWNoIHtsaW5lfSBzdHJpbmcgYWZ0ZXIgQnVmZmVyIGxpbmUge2xudW19LgorCQkJVGhlIGxpc3Qgb2Yge2xpbmV9cyBjYW4gYmUgYW4gYXJyYXkuCisKKwkJCQkJCQkqcGVybC1TZXQqCitCdWZmZXItPlNldCh7bG51bX0sIHtsaW5lfSwge2xpbmV9PywgLi4uKQorCQkJUmVwbGFjZXMgb25lIG9yIG1vcmUgQnVmZmVyIGxpbmVzIHdpdGggc3BlY2lmaWVkCisJCQl7bGluZXN9cywgc3RhcnRpbmcgYXQgQnVmZmVyIGxpbmUge2xudW19LiAgVGhlIGxpc3Qgb2YKKwkJCXtsaW5lfXMgY2FuIGJlIGFuIGFycmF5LiAgSWYgdGhlIGFyZ3VtZW50cyBhcmUKKwkJCWludmFsaWQsIHJlcGxhY2VtZW50IGRvZXMgbm90IG9jY3VyLgorCiskbWFpbjo6Y3Vyd2luCisJCQlUaGUgY3VycmVudCB3aW5kb3cgb2JqZWN0LgorCiskbWFpbjo6Y3VyYnVmCisJCQlUaGUgY3VycmVudCBidWZmZXIgb2JqZWN0LgorCisKKwkJCQkJCQkqc2NyaXB0LWhlcmUqCitXaGVuIHVzaW5nIGEgc2NyaXB0IGxhbmd1YWdlIGluLWxpbmUsIHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyB3aGVuIHRoZQorbGFuZ3VhZ2UgaXNuJ3Qgc3VwcG9ydGVkLiAgQnV0IHRoaXMgbWVjaGFuaXNtIGRvZXNuJ3Qgd29yazogPgorICAgaWYgaGFzKCdwZXJsJykKKyAgICAgcGVybCA8PCBFT0YKKyAgICAgICB0aGlzIHdpbGwgTk9UIHdvcmshCisgICBFT0YKKyAgIGVuZGlmCitJbnN0ZWFkLCBwdXQgdGhlIFBlcmwvUHl0aG9uL1J1YnkvZXRjLiBjb21tYW5kIGluIGEgZnVuY3Rpb24gYW5kIGNhbGwgdGhhdAorZnVuY3Rpb246ID4KKyAgICBpZiBoYXMoJ3BlcmwnKQorICAgICAgZnVuY3Rpb24gRGVmUGVybCgpCisJcGVybCA8PCBFT0YKKwkgIHRoaXMgd29ya3MKKyAgICBFT0YKKyAgICAgIGVuZGZ1bmN0aW9uCisgICAgICBjYWxsIERlZlBlcmwoKQorICAgIGVuZGlmCitOb3RlIHRoYXQgIkVPRiIgbXVzdCBiZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9pZl9weXRoLnR4dCBiL3J1bnRpbWUvZG9jL2lmX3B5dGgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzVmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9pZl9weXRoLnR4dApAQCAtMCwwICsxLDI5OSBAQAorKmlmX3B5dGgudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEZlYiAyOAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBQYXVsIE1vb3JlCisKKworVGhlIFB5dGhvbiBJbnRlcmZhY2UgdG8gVmltCQkJCSpweXRob24qICpQeXRob24qCisKKzEuIENvbW1hbmRzCQkJfHB5dGhvbi1jb21tYW5kc3wKKzIuIFRoZSB2aW0gbW9kdWxlCQl8cHl0aG9uLXZpbXwKKzMuIEJ1ZmZlciBvYmplY3RzCQl8cHl0aG9uLWJ1ZmZlcnwKKzQuIFJhbmdlIG9iamVjdHMJCXxweXRob24tcmFuZ2V8Cis1LiBXaW5kb3cgb2JqZWN0cwkJfHB5dGhvbi13aW5kb3d8CisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKworVGhlIFB5dGhvbiBpbnRlcmZhY2UgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggdGhlCit8K3B5dGhvbnwgZmVhdHVyZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBDb21tYW5kcwkJCQkJCSpweXRob24tY29tbWFuZHMqCisKKwkJCQkJKjpweXRob24qICo6cHkqICpFMjA1KiAqRTI2MyogKkUyNjQqCis6W3JhbmdlXXB5W3Rob25dIHtzdG10fQorCQkJRXhlY3V0ZSBQeXRob24gc3RhdGVtZW50IHtzdG10fS4KKworOltyYW5nZV1weVt0aG9uXSA8PCB7ZW5kbWFya2VyfQore3NjcmlwdH0KK3tlbmRtYXJrZXJ9CisJCQlFeGVjdXRlIFB5dGhvbiBzY3JpcHQge3NjcmlwdH0uCisJCQlOb3RlOiBUaGlzIGNvbW1hbmQgZG9lc24ndCB3b3JrIHdoZW4gdGhlIFB5dGhvbgorCQkJZmVhdHVyZSB3YXNuJ3QgY29tcGlsZWQgaW4uICBUbyBhdm9pZCBlcnJvcnMsIHNlZQorCQkJfHNjcmlwdC1oZXJlfC4KKwore2VuZG1hcmtlcn0gbXVzdCBOT1QgYmUgcHJlY2VkZWQgYnkgYW55IHdoaXRlIHNwYWNlLiAgSWYge2VuZG1hcmtlcn0gaXMKK29taXR0ZWQgZnJvbSBhZnRlciB0aGUgIjw8IiwgYSBkb3QgJy4nIG11c3QgYmUgdXNlZCBhZnRlciB7c2NyaXB0fSwgbGlrZQorZm9yIHRoZSB8OmFwcGVuZHwgYW5kIHw6aW5zZXJ0fCBjb21tYW5kcy4KK1RoaXMgZm9ybSBvZiB0aGUgfDpweXRob258IGNvbW1hbmQgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgaW5jbHVkaW5nIHB5dGhvbiBjb2RlCitpbiBWaW0gc2NyaXB0cy4KKworRXhhbXBsZTogPgorCWZ1bmN0aW9uISBJY2VjcmVhbUluaXRpYWxpemUoKQorCXB5dGhvbiA8PCBFT0YKKwljbGFzcyBTdHJhd2JlcnJ5SWNlY3JlYW06CisJCWRlZiBfX2NhbGxfXyhzZWxmKToKKwkJCXByaW50ICdFQVQgTUUnCisJRU9GCisJZW5kZnVuY3Rpb24KKzwKK05vdGU6IFB5dGhvbiBpcyB2ZXJ5IHNlbnNpdGl2ZSB0byB0aGUgaW5kZW50aW5nLiAgQWxzbyBtYWtlIHN1cmUgdGhlICJjbGFzcyIKK2xpbmUgYW5kICJFT0YiIGRvIG5vdCBoYXZlIGFueSBpbmRlbnQuCisKKwkJCQkJCQkqOnB5ZmlsZSogKjpweWYqCis6W3JhbmdlXXB5ZltpbGVdIHtmaWxlfQorCQkJRXhlY3V0ZSB0aGUgUHl0aG9uIHNjcmlwdCBpbiB7ZmlsZX0uICBUaGUgd2hvbGUKKwkJCWFyZ3VtZW50IGlzIHVzZWQgYXMgYSBzaW5nbGUgZmlsZSBuYW1lLiAge25vdCBpbiBWaX0KKworQm90aCBvZiB0aGVzZSBjb21tYW5kcyBkbyBlc3NlbnRpYWxseSB0aGUgc2FtZSB0aGluZyAtIHRoZXkgZXhlY3V0ZSBhIHBpZWNlIG9mCitQeXRob24gY29kZSwgd2l0aCB0aGUgImN1cnJlbnQgcmFuZ2UiIHxweXRob24tcmFuZ2V8IHNldCB0byB0aGUgZ2l2ZW4gbGluZQorcmFuZ2UuCisKK0luIHRoZSBjYXNlIG9mIDpweXRob24sIHRoZSBjb2RlIHRvIGV4ZWN1dGUgaXMgaW4gdGhlIGNvbW1hbmQtbGluZS4KK0luIHRoZSBjYXNlIG9mIDpweWZpbGUsIHRoZSBjb2RlIHRvIGV4ZWN1dGUgaXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBmaWxlLgorCitQeXRob24gY29tbWFuZHMgY2Fubm90IGJlIHVzZWQgaW4gdGhlIHxzYW5kYm94fC4KKworVG8gcGFzcyBhcmd1bWVudHMgeW91IG5lZWQgdG8gc2V0IHN5cy5hcmd2W10gZXhwbGljaXRseS4gIEV4YW1wbGU6ID4KKworCTpweXRob24gaW1wb3J0IHN5cworCTpweXRob24gc3lzLmFyZ3YgPSBbImZvbyIsICJiYXIiXQorCTpweWZpbGUgbXlzY3JpcHQucHkKKworSGVyZSBhcmUgc29tZSBleGFtcGxlcwkJCQkJKnB5dGhvbi1leGFtcGxlcyogID4KKworCTpweXRob24gZnJvbSB2aW0gaW1wb3J0ICoKKwk6cHl0aG9uIGZyb20gc3RyaW5nIGltcG9ydCB1cHBlcgorCTpweXRob24gY3VycmVudC5saW5lID0gdXBwZXIoY3VycmVudC5saW5lKQorCTpweXRob24gcHJpbnQgIkhlbGxvIgorCTpweXRob24gc3RyID0gY3VycmVudC5idWZmZXJbNDJdCisKKyhOb3RlIHRoYXQgY2hhbmdlcyAtIGxpa2UgdGhlIGltcG9ydHMgLSBwZXJzaXN0IGZyb20gb25lIGNvbW1hbmQgdG8gdGhlIG5leHQsCitqdXN0IGxpa2UgaW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlci4pCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVGhlIHZpbSBtb2R1bGUJCQkJCSpweXRob24tdmltKgorCitQeXRob24gY29kZSBnZXRzIGFsbCBvZiBpdHMgYWNjZXNzIHRvIHZpbSAod2l0aCBvbmUgZXhjZXB0aW9uIC0gc2VlCit8cHl0aG9uLW91dHB1dHwgYmVsb3cpIHZpYSB0aGUgInZpbSIgbW9kdWxlLiBUaGUgdmltIG1vZHVsZSBpbXBsZW1lbnRzIHR3bworbWV0aG9kcywgdGhyZWUgY29uc3RhbnRzLCBhbmQgb25lIGVycm9yIG9iamVjdC4gIFlvdSBuZWVkIHRvIGltcG9ydCB0aGUgdmltCittb2R1bGUgYmVmb3JlIHVzaW5nIGl0OiA+CisJOnB5dGhvbiBpbXBvcnQgdmltCisKK092ZXJ2aWV3ID4KKwlwcmludCAiSGVsbG8iCQkJIyBkaXNwbGF5cyBhIG1lc3NhZ2UKKwl2aW0uY29tbWFuZChjbWQpCQkjIGV4ZWN1dGUgYW4gZXggY29tbWFuZAorCXcgPSB2aW0ud2luZG93c1tuXQkJIyBnZXRzIHdpbmRvdyAibiIKKwljdyA9IHZpbS5jdXJyZW50LndpbmRvdwkJIyBnZXRzIHRoZSBjdXJyZW50IHdpbmRvdworCWIgPSB2aW0uYnVmZmVyc1tuXQkJIyBnZXRzIGJ1ZmZlciAibiIKKwljYiA9IHZpbS5jdXJyZW50LmJ1ZmZlcgkJIyBnZXRzIHRoZSBjdXJyZW50IGJ1ZmZlcgorCXcuaGVpZ2h0ID0gbGluZXMJCSMgc2V0cyB0aGUgd2luZG93IGhlaWdodAorCXcuY3Vyc29yID0gKHJvdywgY29sKQkJIyBzZXRzIHRoZSB3aW5kb3cgY3Vyc29yIHBvc2l0aW9uCisJcG9zID0gdy5jdXJzb3IJCQkjIGdldHMgYSB0dXBsZSAocm93LCBjb2wpCisJbmFtZSA9IGIubmFtZQkJCSMgZ2V0cyB0aGUgYnVmZmVyIGZpbGUgbmFtZQorCWxpbmUgPSBiW25dCQkJIyBnZXRzIGEgbGluZSBmcm9tIHRoZSBidWZmZXIKKwlsaW5lcyA9IGJbbjptXQkJCSMgZ2V0cyBhIGxpc3Qgb2YgbGluZXMKKwludW0gPSBsZW4oYikJCQkjIGdldHMgdGhlIG51bWJlciBvZiBsaW5lcworCWJbbl0gPSBzdHIJCQkjIHNldHMgYSBsaW5lIGluIHRoZSBidWZmZXIKKwliW246bV0gPSBbc3RyMSwgc3RyMiwgc3RyM10JIyBzZXRzIGEgbnVtYmVyIG9mIGxpbmVzIGF0IG9uY2UKKwlkZWwgYltuXQkJCSMgZGVsZXRlcyBhIGxpbmUKKwlkZWwgYltuOm1dCQkJIyBkZWxldGVzIGEgbnVtYmVyIG9mIGxpbmVzCisKKworTWV0aG9kcyBvZiB0aGUgInZpbSIgbW9kdWxlCisKK3ZpbS5jb21tYW5kKHN0cikJCQkJCSpweXRob24tY29tbWFuZCoKKwlFeGVjdXRlcyB0aGUgdmltIChleC1tb2RlKSBjb21tYW5kIHN0ci4gUmV0dXJucyBOb25lLgorCUV4YW1wbGVzOiA+CisJCXZpbS5jb21tYW5kKCJzZXQgdHc9NzIiKQorCQl2aW0uY29tbWFuZCgiJXMvYWFhL2JiYi9nIikKKzwJVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIGV4ZWN1dGVzIE5vcm1hbCBtb2RlIGNvbW1hbmRzOiA+CisJCWRlZiBub3JtYWwoc3RyKToKKwkJCXZpbS5jb21tYW5kKCJub3JtYWwgIitzdHIpCisJCSMgTm90ZSB0aGUgdXNlIG9mIHNpbmdsZSBxdW90ZXMgdG8gZGVsaW1pdCBhIHN0cmluZyBjb250YWluaW5nCisJCSMgZG91YmxlIHF1b3RlcworCQlub3JtYWwoJyJhMmRkImFQJykKKzwJCQkJCQkJCSpFNjU5KgorCVRoZSAiOnB5dGhvbiIgY29tbWFuZCBjYW5ub3QgYmUgdXNlZCByZWN1cnNpdmVseSB3aXRoIFB5dGhvbiAyLjIgYW5kCisJb2xkZXIuICBUaGlzIG9ubHkgd29ya3Mgd2l0aCBQeXRob24gMi4zIGFuZCBsYXRlcjogPgorCQk6cHl0aG9uIHZpbS5jb21tYW5kKCJweXRob24gcHJpbnQgJ0hlbGxvIGFnYWluIFB5dGhvbiciKQorCit2aW0uZXZhbChzdHIpCQkJCQkJKnB5dGhvbi1ldmFsKgorCUV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBzdHIgdXNpbmcgdGhlIHZpbSBpbnRlcm5hbCBleHByZXNzaW9uCisJZXZhbHVhdG9yIChzZWUgfGV4cHJlc3Npb258KS4gUmV0dXJucyB0aGUgZXhwcmVzc2lvbiByZXN1bHQgYXMgYQorCXN0cmluZy4KKwlFeGFtcGxlczogPgorCQl0ZXh0X3dpZHRoID0gdmltLmV2YWwoIiZ0dyIpCisJCXN0ciA9IHZpbS5ldmFsKCIxMisxMiIpCQkjIE5CIHJlc3VsdCBpcyBhIHN0cmluZyEgVXNlCisJCQkJCQkjIHN0cmluZy5hdG9pKCkgdG8gY29udmVydCB0bworCQkJCQkJIyBhIG51bWJlci4KKworRXJyb3Igb2JqZWN0IG9mIHRoZSAidmltIiBtb2R1bGUKKwordmltLmVycm9yCQkJCQkJKnB5dGhvbi1lcnJvcioKKwlVcG9uIGVuY291bnRlcmluZyBhIFZpbSBlcnJvciwgUHl0aG9uIHJhaXNlcyBhbiBleGNlcHRpb24gb2YgdHlwZQorCXZpbS5lcnJvci4KKwlFeGFtcGxlOiA+CisJCXRyeToKKwkJCXZpbS5jb21tYW5kKCJwdXQgYSIpCisJCWV4Y2VwdCB2aW0uZXJyb3I6CisJCQkjIG5vdGhpbmcgaW4gcmVnaXN0ZXIgYQorCitDb25zdGFudHMgb2YgdGhlICJ2aW0iIG1vZHVsZQorCisJTm90ZSB0aGF0IHRoZXNlIGFyZSBub3QgYWN0dWFsbHkgY29uc3RhbnRzIC0geW91IGNvdWxkIHJlYXNzaWduIHRoZW0uCisJQnV0IHRoaXMgaXMgc2lsbHksIGFzIHlvdSB3b3VsZCB0aGVuIGxvc2UgYWNjZXNzIHRvIHRoZSB2aW0gb2JqZWN0cworCXRvIHdoaWNoIHRoZSB2YXJpYWJsZXMgcmVmZXJyZWQuCisKK3ZpbS5idWZmZXJzCQkJCQkJKnB5dGhvbi1idWZmZXJzKgorCUEgc2VxdWVuY2Ugb2JqZWN0IHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGxpc3Qgb2YgdmltIGJ1ZmZlcnMuIFRoZQorCW9iamVjdCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6ID4KKwkJYiA9IHZpbS5idWZmZXJzW2ldCSMgSW5kZXhpbmcgKHJlYWQtb25seSkKKwkJYiBpbiB2aW0uYnVmZmVycwkjIE1lbWJlcnNoaXAgdGVzdAorCQluID0gbGVuKHZpbS5idWZmZXJzKQkjIE51bWJlciBvZiBlbGVtZW50cworCQlmb3IgYiBpbiB2aW0uYnVmZmVyczoJIyBTZXF1ZW50aWFsIGFjY2VzcworPAordmltLndpbmRvd3MJCQkJCQkqcHl0aG9uLXdpbmRvd3MqCisJQSBzZXF1ZW5jZSBvYmplY3QgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgbGlzdCBvZiB2aW0gd2luZG93cy4gVGhlCisJb2JqZWN0IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczogPgorCQl3ID0gdmltLndpbmRvd3NbaV0JIyBJbmRleGluZyAocmVhZC1vbmx5KQorCQl3IGluIHZpbS53aW5kb3dzCSMgTWVtYmVyc2hpcCB0ZXN0CisJCW4gPSBsZW4odmltLndpbmRvd3MpCSMgTnVtYmVyIG9mIGVsZW1lbnRzCisJCWZvciB3IGluIHZpbS53aW5kb3dzOgkjIFNlcXVlbnRpYWwgYWNjZXNzCis8Cit2aW0uY3VycmVudAkJCQkJCSpweXRob24tY3VycmVudCoKKwlBbiBvYmplY3QgcHJvdmlkaW5nIGFjY2VzcyAodmlhIHNwZWNpZmljIGF0dHJpYnV0ZXMpIHRvIHZhcmlvdXMKKwkiY3VycmVudCIgb2JqZWN0cyBhdmFpbGFibGUgaW4gdmltOgorCQl2aW0uY3VycmVudC5saW5lCVRoZSBjdXJyZW50IGxpbmUgKFJXKQkJU3RyaW5nCisJCXZpbS5jdXJyZW50LmJ1ZmZlcglUaGUgY3VycmVudCBidWZmZXIgKFJPKQkJQnVmZmVyCisJCXZpbS5jdXJyZW50LndpbmRvdwlUaGUgY3VycmVudCB3aW5kb3cgKFJPKQkJV2luZG93CisJCXZpbS5jdXJyZW50LnJhbmdlCVRoZSBjdXJyZW50IGxpbmUgcmFuZ2UgKFJPKQlSYW5nZQorCisJVGhlIGxhc3QgY2FzZSBkZXNlcnZlcyBhIGxpdHRsZSBleHBsYW5hdGlvbi4gV2hlbiB0aGUgOnB5dGhvbiBvcgorCTpweWZpbGUgY29tbWFuZCBzcGVjaWZpZXMgYSByYW5nZSwgdGhpcyByYW5nZSBvZiBsaW5lcyBiZWNvbWVzIHRoZQorCSJjdXJyZW50IHJhbmdlIi4gQSByYW5nZSBpcyBhIGJpdCBsaWtlIGEgYnVmZmVyLCBidXQgd2l0aCBhbGwgYWNjZXNzCisJcmVzdHJpY3RlZCB0byBhIHN1YnNldCBvZiBsaW5lcy4gU2VlIHxweXRob24tcmFuZ2V8IGZvciBtb3JlIGRldGFpbHMuCisKKworT3V0cHV0IGZyb20gUHl0aG9uCQkJCQkqcHl0aG9uLW91dHB1dCoKKwlWaW0gZGlzcGxheXMgYWxsIFB5dGhvbiBjb2RlIG91dHB1dCBpbiB0aGUgVmltIG1lc3NhZ2UgYXJlYS4gIE5vcm1hbAorCW91dHB1dCBhcHBlYXJzIGFzIGluZm9ybWF0aW9uIG1lc3NhZ2VzLCBhbmQgZXJyb3Igb3V0cHV0IGFwcGVhcnMgYXMKKwllcnJvciBtZXNzYWdlcy4KKworCUluIGltcGxlbWVudGF0aW9uIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgYWxsIG91dHB1dCB0byBzeXMuc3Rkb3V0CisJKGluY2x1ZGluZyB0aGUgb3V0cHV0IGZyb20gcHJpbnQgc3RhdGVtZW50cykgYXBwZWFycyBhcyBpbmZvcm1hdGlvbgorCW1lc3NhZ2VzLCBhbmQgYWxsIG91dHB1dCB0byBzeXMuc3RkZXJyIChpbmNsdWRpbmcgZXJyb3IgdHJhY2ViYWNrcykKKwlhcHBlYXJzIGFzIGVycm9yIG1lc3NhZ2VzLgorCisJCQkJCQkJKnB5dGhvbi1pbnB1dCoKKwlJbnB1dCAodmlhIHN5cy5zdGRpbiwgaW5jbHVkaW5nIGlucHV0KCkgYW5kIHJhd19pbnB1dCgpKSBpcyBub3QKKwlzdXBwb3J0ZWQsIGFuZCBtYXkgY2F1c2UgdGhlIHByb2dyYW0gdG8gY3Jhc2guIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlCisJZml4ZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gQnVmZmVyIG9iamVjdHMJCQkJCSpweXRob24tYnVmZmVyKgorCitCdWZmZXIgb2JqZWN0cyByZXByZXNlbnQgdmltIGJ1ZmZlcnMuIFlvdSBjYW4gb2J0YWluIHRoZW0gaW4gYSBudW1iZXIgb2Ygd2F5czoKKwktIHZpYSB2aW0uY3VycmVudC5idWZmZXIgKHxweXRob24tY3VycmVudHwpCisJLSBmcm9tIGluZGV4aW5nIHZpbS5idWZmZXJzICh8cHl0aG9uLWJ1ZmZlcnN8KQorCS0gZnJvbSB0aGUgImJ1ZmZlciIgYXR0cmlidXRlIG9mIGEgd2luZG93ICh8cHl0aG9uLXdpbmRvd3wpCisKK0J1ZmZlciBvYmplY3RzIGhhdmUgb25lIHJlYWQtb25seSBhdHRyaWJ1dGUgLSBuYW1lIC0gdGhlIGZ1bGwgZmlsZSBuYW1lIGZvcgordGhlIGJ1ZmZlci4gVGhleSBhbHNvIGhhdmUgdGhyZWUgbWV0aG9kcyAoYXBwZW5kLCBtYXJrLCBhbmQgcmFuZ2U7IHNlZSBiZWxvdykuCisKK1lvdSBjYW4gYWxzbyB0cmVhdCBidWZmZXIgb2JqZWN0cyBhcyBzZXF1ZW5jZSBvYmplY3RzLiBJbiB0aGlzIGNvbnRleHQsIHRoZXkKK2FjdCBhcyBpZiB0aGV5IHdlcmUgbGlzdHMgKHllcywgdGhleSBhcmUgbXV0YWJsZSkgb2Ygc3RyaW5ncywgd2l0aCBlYWNoCitlbGVtZW50IGJlaW5nIGEgbGluZSBvZiB0aGUgYnVmZmVyLiBBbGwgb2YgdGhlIHVzdWFsIHNlcXVlbmNlIG9wZXJhdGlvbnMsCitpbmNsdWRpbmcgaW5kZXhpbmcsIGluZGV4IGFzc2lnbm1lbnQsIHNsaWNpbmcgYW5kIHNsaWNlIGFzc2lnbm1lbnQsIHdvcmsgYXMKK3lvdSB3b3VsZCBleHBlY3QuIE5vdGUgdGhhdCB0aGUgcmVzdWx0IG9mIGluZGV4aW5nIChzbGljaW5nKSBhIGJ1ZmZlciBpcyBhCitzdHJpbmcgKGxpc3Qgb2Ygc3RyaW5ncykuIFRoaXMgaGFzIG9uZSB1bnVzdWFsIGNvbnNlcXVlbmNlIC0gYls6XSBpcyBkaWZmZXJlbnQKK2Zyb20gYi4gSW4gcGFydGljdWxhciwgImJbOl0gPSBOb25lIiBkZWxldGVzIHRoZSB3aG9sZSBvZiB0aGUgYnVmZmVyLCB3aGVyZWFzCisiYiA9IE5vbmUiIG1lcmVseSB1cGRhdGVzIHRoZSB2YXJpYWJsZSBiLCB3aXRoIG5vIGVmZmVjdCBvbiB0aGUgYnVmZmVyLgorCitCdWZmZXIgaW5kZXhlcyBzdGFydCBhdCB6ZXJvLCBhcyBpcyBub3JtYWwgaW4gUHl0aG9uLiBUaGlzIGRpZmZlcnMgZnJvbSB2aW0KK2xpbmUgbnVtYmVycywgd2hpY2ggc3RhcnQgZnJvbSAxLiBUaGlzIGlzIHBhcnRpY3VsYXJseSByZWxldmFudCB3aGVuIGRlYWxpbmcKK3dpdGggbWFya3MgKHNlZSBiZWxvdykgd2hpY2ggdXNlIHZpbSBsaW5lIG51bWJlcnMuCisKK1RoZSBidWZmZXIgb2JqZWN0IG1ldGhvZHMgYXJlOgorCWIuYXBwZW5kKHN0cikJQXBwZW5kIGEgbGluZSB0byB0aGUgYnVmZmVyCisJYi5hcHBlbmQobGlzdCkJQXBwZW5kIGEgbGlzdCBvZiBsaW5lcyB0byB0aGUgYnVmZmVyCisJCQlOb3RlIHRoYXQgdGhlIG9wdGlvbiBvZiBzdXBwbHlpbmcgYSBsaXN0IG9mIHN0cmluZ3MgdG8KKwkJCXRoZSBhcHBlbmQgbWV0aG9kIGRpZmZlcnMgZnJvbSB0aGUgZXF1aXZhbGVudCBtZXRob2QKKwkJCWZvciBQeXRob24ncyBidWlsdC1pbiBsaXN0IG9iamVjdHMuCisJYi5tYXJrKG5hbWUpCVJldHVybiBhIHR1cGxlIChyb3csY29sKSByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uCisJCQlvZiB0aGUgbmFtZWQgbWFyayAoY2FuIGFsc28gZ2V0IHRoZSBbXSI8PiBtYXJrcykKKwliLnJhbmdlKHMsZSkJUmV0dXJuIGEgcmFuZ2Ugb2JqZWN0IChzZWUgfHB5dGhvbi1yYW5nZXwpIHdoaWNoCisJCQlyZXByZXNlbnRzIHRoZSBwYXJ0IG9mIHRoZSBnaXZlbiBidWZmZXIgYmV0d2VlbiBsaW5lCisJCQludW1iZXJzIHMgYW5kIGUgfGluY2x1c2l2ZXwuCisKK0V4YW1wbGVzIChhc3N1bWUgYiBpcyB0aGUgY3VycmVudCBidWZmZXIpID4KKwlwcmludCBiLm5hbWUJCSMgd3JpdGUgdGhlIGJ1ZmZlciBmaWxlIG5hbWUKKwliWzBdID0gImhlbGxvISEhIgkjIHJlcGxhY2UgdGhlIHRvcCBsaW5lCisJYls6XSA9IE5vbmUJCSMgZGVsZXRlIHRoZSB3aG9sZSBidWZmZXIKKwlkZWwgYls6XQkJIyBkZWxldGUgdGhlIHdob2xlIGJ1ZmZlciAoc2FtZSBhcyBhYm92ZSkKKwliWzA6MF0gPSBbICJhIGxpbmUiIF0JIyBhZGQgYSBsaW5lIGF0IHRoZSB0b3AKKwlkZWwgYlsyXQkJIyBkZWxldGUgYSBsaW5lICh0aGUgdGhpcmQpCisJYi5hcHBlbmQoImJvdHRvbSIpCSMgYWRkIGEgbGluZSBhdCB0aGUgYm90dG9tCisJbiA9IGxlbihiKQkJIyBudW1iZXIgb2YgbGluZXMKKwkocm93LGNvbCkgPSBiLm1hcmsoJ2EnKSAjIG5hbWVkIG1hcmsKKwlyID0gYi5yYW5nZSgxLDUpCSMgYSBzdWItcmFuZ2Ugb2YgdGhlIGJ1ZmZlcgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFJhbmdlIG9iamVjdHMJCQkJCSpweXRob24tcmFuZ2UqCisKK1JhbmdlIG9iamVjdHMgcmVwcmVzZW50IGEgcGFydCBvZiBhIHZpbSBidWZmZXIuIFlvdSBjYW4gb2J0YWluIHRoZW0gaW4gYQorbnVtYmVyIG9mIHdheXM6CisJLSB2aWEgdmltLmN1cnJlbnQucmFuZ2UgKHxweXRob24tY3VycmVudHwpCisJLSBmcm9tIGEgYnVmZmVyJ3MgcmFuZ2UoKSBtZXRob2QgKHxweXRob24tYnVmZmVyfCkKKworQSByYW5nZSBvYmplY3QgaXMgYWxtb3N0IGlkZW50aWNhbCBpbiBvcGVyYXRpb24gdG8gYSBidWZmZXIgb2JqZWN0LiBIb3dldmVyLAorYWxsIG9wZXJhdGlvbnMgYXJlIHJlc3RyaWN0ZWQgdG8gdGhlIGxpbmVzIHdpdGhpbiB0aGUgcmFuZ2UgKHRoaXMgbGluZSByYW5nZQorY2FuLCBvZiBjb3Vyc2UsIGNoYW5nZSBhcyBhIHJlc3VsdCBvZiBzbGljZSBhc3NpZ25tZW50cywgbGluZSBkZWxldGlvbnMsIG9yCit0aGUgcmFuZ2UuYXBwZW5kKCkgbWV0aG9kKS4KKworVGhlIHJhbmdlIG9iamVjdCBhdHRyaWJ1dGVzIGFyZToKKwlyLnN0YXJ0CQlJbmRleCBvZiBmaXJzdCBsaW5lIGludG8gdGhlIGJ1ZmZlcgorCXIuZW5kCQlJbmRleCBvZiBsYXN0IGxpbmUgaW50byB0aGUgYnVmZmVyCisKK1RoZSByYW5nZSBvYmplY3QgbWV0aG9kcyBhcmU6CisJci5hcHBlbmQoc3RyKQlBcHBlbmQgYSBsaW5lIHRvIHRoZSByYW5nZQorCXIuYXBwZW5kKGxpc3QpCUFwcGVuZCBhIGxpc3Qgb2YgbGluZXMgdG8gdGhlIHJhbmdlCisJCQlOb3RlIHRoYXQgdGhlIG9wdGlvbiBvZiBzdXBwbHlpbmcgYSBsaXN0IG9mIHN0cmluZ3MgdG8KKwkJCXRoZSBhcHBlbmQgbWV0aG9kIGRpZmZlcnMgZnJvbSB0aGUgZXF1aXZhbGVudCBtZXRob2QKKwkJCWZvciBQeXRob24ncyBidWlsdC1pbiBsaXN0IG9iamVjdHMuCisKK0V4YW1wbGUgKGFzc3VtZSByIGlzIHRoZSBjdXJyZW50IHJhbmdlKToKKwkjIFNlbmQgYWxsIGxpbmVzIGluIGEgcmFuZ2UgdG8gdGhlIGRlZmF1bHQgcHJpbnRlcgorCXZpbS5jb21tYW5kKCIlZCwlZGhhcmRjb3B5ISIgJSAoci5zdGFydCsxLHIuZW5kKzEpKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFdpbmRvdyBvYmplY3RzCQkJCQkqcHl0aG9uLXdpbmRvdyoKKworV2luZG93IG9iamVjdHMgcmVwcmVzZW50IHZpbSB3aW5kb3dzLiBZb3UgY2FuIG9idGFpbiB0aGVtIGluIGEgbnVtYmVyIG9mIHdheXM6CisJLSB2aWEgdmltLmN1cnJlbnQud2luZG93ICh8cHl0aG9uLWN1cnJlbnR8KQorCS0gZnJvbSBpbmRleGluZyB2aW0ud2luZG93cyAofHB5dGhvbi13aW5kb3dzfCkKKworWW91IGNhbiBtYW5pcHVsYXRlIHdpbmRvdyBvYmplY3RzIG9ubHkgdGhyb3VnaCB0aGVpciBhdHRyaWJ1dGVzLiBUaGV5IGhhdmUgbm8KK21ldGhvZHMsIGFuZCBubyBzZXF1ZW5jZSBvciBvdGhlciBpbnRlcmZhY2UuCisKK1dpbmRvdyBhdHRyaWJ1dGVzIGFyZToKKwlidWZmZXIgKHJlYWQtb25seSkJVGhlIGJ1ZmZlciBkaXNwbGF5ZWQgaW4gdGhpcyB3aW5kb3cKKwljdXJzb3IgKHJlYWQtd3JpdGUpCVRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgd2luZG93CisJCQkJVGhpcyBpcyBhIHR1cGxlLCAocm93LGNvbCkuCisJaGVpZ2h0IChyZWFkLXdyaXRlKQlUaGUgd2luZG93IGhlaWdodCwgaW4gcm93cworCXdpZHRoIChyZWFkLXdyaXRlKQlUaGUgd2luZG93IHdpZHRoLCBpbiBjb2x1bW5zCitUaGUgaGVpZ2h0IGF0dHJpYnV0ZSBpcyB3cml0YWJsZSBvbmx5IGlmIHRoZSBzY3JlZW4gaXMgc3BsaXQgaG9yaXpvbnRhbGx5LgorVGhlIHdpZHRoIGF0dHJpYnV0ZSBpcyB3cml0YWJsZSBvbmx5IGlmIHRoZSBzY3JlZW4gaXMgc3BsaXQgdmVydGljYWxseS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaWZfcnVieS50eHQgYi9ydW50aW1lL2RvYy9pZl9ydWJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGQwOWY2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvaWZfcnVieS50eHQKQEAgLTAsMCArMSwxNzUgQEAKKyppZl9ydWJ5LnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXIgMTQKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgU2h1Z28gTWFlZGEKKworVGhlIFJ1YnkgSW50ZXJmYWNlIHRvIFZpbQkJCQkqcnVieSogKlJ1YnkqCisKKworMS4gQ29tbWFuZHMJCQl8cnVieS1jb21tYW5kc3wKKzIuIFRoZSBWSU0gbW9kdWxlCQl8cnVieS12aW18CiszLiBWSU06OkJ1ZmZlciBvYmplY3RzCQl8cnVieS1idWZmZXJ8Cis0LiBWSU06OldpbmRvdyBvYmplY3RzCQl8cnVieS13aW5kb3d8Cis1LiBHbG9iYWwgdmFyaWFibGVzCQl8cnVieS1nbG9iYWxzfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CisJCQkqRTI2NiogKkUyNjcqICpFMjY4KiAqRTI2OSogKkUyNzAqICpFMjcxKiAqRTI3MiogKkUyNzMqCisKK1RoZSBSdWJ5IGludGVyZmFjZSBvbmx5IHdvcmtzIHdoZW4gVmltIHdhcyBjb21waWxlZCB3aXRoIHRoZSB8K3J1Ynl8IGZlYXR1cmUuCisKK1RoZSBob21lIHBhZ2UgZm9yIHJ1YnkgaXMgaHR0cDovL3d3dy5ydWJ5LWxhbmcub3JnLy4gIFlvdSBjYW4gZmluZCBsaW5rcyBmb3IKK2Rvd25sb2FkaW5nIFJ1YnkgdGhlcmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gQ29tbWFuZHMJCQkJCQkqcnVieS1jb21tYW5kcyoKKworCQkJCQkJCSo6cnVieSogKjpydWIqCis6cnViW3ldIHtjbWR9CQlFeGVjdXRlIFJ1YnkgY29tbWFuZCB7Y21kfS4KKworOnJ1Ylt5XSA8PCB7ZW5kcGF0dGVybn0KK3tzY3JpcHR9Cit7ZW5kcGF0dGVybn0KKwkJCUV4ZWN1dGUgUnVieSBzY3JpcHQge3NjcmlwdH0uCisJCQl7ZW5kcGF0dGVybn0gbXVzdCBOT1QgYmUgcHJlY2VkZWQgYnkgYW55IHdoaXRlIHNwYWNlLgorCQkJSWYge2VuZHBhdHRlcm59IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGEgZG90ICcuJworCQkJbGlrZSBmb3IgdGhlIHw6YXBwZW5kfCBhbmQgfDppbnNlcnR8IGNvbW1hbmRzLiBUaGlzCisJCQlmb3JtIG9mIHRoZSB8OnJ1Ynl8IGNvbW1hbmQgaXMgbWFpbmx5IHVzZWZ1bCBmb3IKKwkJCWluY2x1ZGluZyBydWJ5IGNvZGUgaW4gdmltIHNjcmlwdHMuCisJCQlOb3RlOiBUaGlzIGNvbW1hbmQgZG9lc24ndCB3b3JrIHdoZW4gdGhlIFJ1YnkgZmVhdHVyZQorCQkJd2Fzbid0IGNvbXBpbGVkIGluLiAgVG8gYXZvaWQgZXJyb3JzLCBzZWUKKwkJCXxzY3JpcHQtaGVyZXwuCisKK0V4YW1wbGUgVmltIHNjcmlwdDogPgorCisJZnVuY3Rpb24hIFJlZEdlbSgpCisJcnVieSA8PCBFT0YKKwljbGFzcyBHYXJuZXQKKwkJZGVmIGluaXRpYWxpemUocykKKwkJCUBidWZmZXIgPSBWSU06OkJ1ZmZlci5jdXJyZW50CisJCQl2aW1wdXRzKHMpCisJCWVuZAorCQlkZWYgdmltcHV0cyhzKQorCQkJQGJ1ZmZlci5hcHBlbmQoQGJ1ZmZlci5jb3VudCxzKQorCQllbmQKKwllbmQKKwlnZW0gPSBHYXJuZXQubmV3KCJwcmV0dHkiKQorCUVPRgorCWVuZGZ1bmN0aW9uCis8CisKKwkJCQkJCSo6cnVieWRvKiAqOnJ1YnlkKiAqRTI2NSoKKzpbcmFuZ2VdcnVieWRbb10ge2NtZH0JRXZhbHVhdGUgUnVieSBjb21tYW5kIHtjbWR9IGZvciBlYWNoIGxpbmUgaW4gdGhlCisJCQlbcmFuZ2VdLCB3aXRoICRfIGJlaW5nIHNldCB0byB0aGUgdGV4dCBvZiBlYWNoIGxpbmUgaW4KKwkJCXR1cm4sIHdpdGhvdXQgYSB0cmFpbGluZyA8RU9MPi4gU2V0dGluZyAkXyB3aWxsIGNoYW5nZQorCQkJdGhlIHRleHQsIGJ1dCBub3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGFkZCBvcgorCQkJZGVsZXRlIGxpbmVzIHVzaW5nIHRoaXMgY29tbWFuZC4KKwkJCVRoZSBkZWZhdWx0IGZvciBbcmFuZ2VdIGlzIHRoZSB3aG9sZSBmaWxlOiAiMSwkIi4KKworCQkJCQkJCSo6cnVieWZpbGUqICo6cnVieWYqCis6cnVieWZbaWxlXSB7ZmlsZX0JRXhlY3V0ZSB0aGUgUnVieSBzY3JpcHQgaW4ge2ZpbGV9LiAgVGhpcyBpcyB0aGUgc2FtZSBhcworCQkJIjpydWJ5IGxvYWQgJ2ZpbGUnIiwgYnV0IGFsbG93cyBmaWxlIG5hbWUgY29tcGxldGlvbi4KKworRXhlY3V0aW5nIFJ1YnkgY29tbWFuZHMgaXMgbm90IHBvc3NpYmxlIGluIHRoZSB8c2FuZGJveHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVGhlIFZJTSBtb2R1bGUJCQkJCSpydWJ5LXZpbSoKKworUnVieSBjb2RlIGdldHMgYWxsIG9mIGl0cyBhY2Nlc3MgdG8gdmltIHZpYSB0aGUgIlZJTSIgbW9kdWxlLgorCitPdmVydmlldyA+CisJcHJpbnQgIkhlbGxvIgkJCSMgZGlzcGxheXMgYSBtZXNzYWdlCisJVklNLmNvbW1hbmQoY21kKQkJIyBleGVjdXRlIGFuIGV4IGNvbW1hbmQKKwludW0gPSBWSU06OldpbmRvdy5jb3VudAkJIyBnZXRzIHRoZSBudW1iZXIgb2Ygd2luZG93cworCXcgPSBWSU06OldpbmRvd1tuXQkJIyBnZXRzIHdpbmRvdyAibiIKKwljdyA9IFZJTTo6V2luZG93LmN1cnJlbnQJIyBnZXRzIHRoZSBjdXJyZW50IHdpbmRvdworCW51bSA9IFZJTTo6QnVmZmVyLmNvdW50CQkjIGdldHMgdGhlIG51bWJlciBvZiBidWZmZXJzCisJYiA9IFZJTTo6QnVmZmVyW25dCQkjIGdldHMgYnVmZmVyICJuIgorCWNiID0gVklNOjpCdWZmZXIuY3VycmVudAkjIGdldHMgdGhlIGN1cnJlbnQgYnVmZmVyCisJdy5oZWlnaHQgPSBsaW5lcwkJIyBzZXRzIHRoZSB3aW5kb3cgaGVpZ2h0CisJdy5jdXJzb3IgPSBbcm93LCBjb2xdCQkjIHNldHMgdGhlIHdpbmRvdyBjdXJzb3IgcG9zaXRpb24KKwlwb3MgPSB3LmN1cnNvcgkJCSMgZ2V0cyBhbiBhcnJheSBbcm93LCBjb2xdCisJbmFtZSA9IGIubmFtZQkJCSMgZ2V0cyB0aGUgYnVmZmVyIGZpbGUgbmFtZQorCWxpbmUgPSBiW25dCQkJIyBnZXRzIGEgbGluZSBmcm9tIHRoZSBidWZmZXIKKwludW0gPSBiLmNvdW50CQkJIyBnZXRzIHRoZSBudW1iZXIgb2YgbGluZXMKKwliW25dID0gc3RyCQkJIyBzZXRzIGEgbGluZSBpbiB0aGUgYnVmZmVyCisJYi5kZWxldGUobikJCQkjIGRlbGV0ZXMgYSBsaW5lCisJYi5hcHBlbmQobiwgc3RyKQkJIyBhcHBlbmRzIGEgbGluZSBhZnRlciBuCis8CisKK01vZHVsZSBGdW5jdGlvbnM6CisKKwkJCQkJCQkqcnVieS1tZXNzYWdlKgorVklNOjptZXNzYWdlKHttc2d9KQorCURpc3BsYXlzIHRoZSBtZXNzYWdlIHttc2d9LgorCisJCQkJCQkJKnJ1Ynktc2V0X29wdGlvbioKK1ZJTTo6c2V0X29wdGlvbih7YXJnfSkKKwlTZXRzIGEgdmltIG9wdGlvbi4gIHthcmd9IGNhbiBiZSBhbnkgYXJndW1lbnQgdGhhdCB0aGUgIjpzZXQiIGNvbW1hbmQKKwlhY2NlcHRzLiAgTm90ZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBubyBzcGFjZXMgYXJlIGFsbG93ZWQgaW4gdGhlCisJYXJndW1lbnQhICBTZWUgfDpzZXR8LgorCisJCQkJCQkJKnJ1YnktY29tbWFuZCoKK1ZJTTo6Y29tbWFuZCh7Y21kfSkKKwlFeGVjdXRlcyBFeCBjb21tYW5kIHtjbWR9LgorCisJCQkJCQkJKnJ1YnktZXZhbHVhdGUqCitWSU06OmV2YWx1YXRlKHtleHByfSkKKwlFdmFsdWF0ZXMge2V4cHJ9IHVzaW5nIHRoZSB2aW0gaW50ZXJuYWwgZXhwcmVzc2lvbiBldmFsdWF0b3IgKHNlZQorCXxleHByZXNzaW9ufCkuIFJldHVybnMgdGhlIGV4cHJlc3Npb24gcmVzdWx0IGFzIGEgc3RyaW5nLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFZJTTo6QnVmZmVyIG9iamVjdHMJCQkJCSpydWJ5LWJ1ZmZlcioKKworVklNOjpCdWZmZXIgb2JqZWN0cyByZXByZXNlbnQgdmltIGJ1ZmZlcnMuCisKK0NsYXNzIE1ldGhvZHM6CisKK2N1cnJlbnQJCVJldHVybnMgdGhlIGN1cnJlbnQgYnVmZmVyIG9iamVjdC4KK2NvdW50CQlSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVmZmVycy4KK3NlbGZbe259XQlSZXR1cm5zIHRoZSBidWZmZXIgb2JqZWN0IGZvciB0aGUgbnVtYmVyIHtufS4gVGhlIGZpcnN0IG51bWJlcgorCQlpcyAwLgorCitNZXRob2RzOgorCituYW1lCQlSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBidWZmZXIuCitudW1iZXIJCVJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgYnVmZmVyLgorY291bnQJCVJldHVybnMgdGhlIG51bWJlciBvZiBsaW5lcy4KK2xlbmd0aAkJUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpbmVzLgorc2VsZlt7bn1dCVJldHVybnMgYSBsaW5lIGZyb20gdGhlIGJ1ZmZlci4ge259IGlzIHRoZSBsaW5lIG51bWJlci4KK3NlbGZbe259XSA9IHtzdHJ9CisJCVNldHMgYSBsaW5lIGluIHRoZSBidWZmZXIuIHtufSBpcyB0aGUgbGluZSBudW1iZXIuCitkZWxldGUoe259KQlEZWxldGVzIGEgbGluZSBmcm9tIHRoZSBidWZmZXIuIHtufSBpcyB0aGUgbGluZSBudW1iZXIuCithcHBlbmQoe259LCB7c3RyfSkKKwkJQXBwZW5kcyBhIGxpbmUgYWZ0ZXIgdGhlIGxpbmUge259LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFZJTTo6V2luZG93IG9iamVjdHMJCQkJCSpydWJ5LXdpbmRvdyoKKworVklNOjpXaW5kb3cgb2JqZWN0cyByZXByZXNlbnQgdmltIHdpbmRvd3MuCisKK0NsYXNzIE1ldGhvZHM6CisKK2N1cnJlbnQJCVJldHVybnMgdGhlIGN1cnJlbnQgd2luZG93IG9iamVjdC4KK2NvdW50CQlSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2luZG93cy4KK3NlbGZbe259XQlSZXR1cm5zIHRoZSB3aW5kb3cgb2JqZWN0IGZvciB0aGUgbnVtYmVyIHtufS4gVGhlIGZpcnN0IG51bWJlcgorCQlpcyAwLgorCitNZXRob2RzOgorCitidWZmZXIJCVJldHVybnMgdGhlIGJ1ZmZlciBkaXNwbGF5ZWQgaW4gdGhlIHdpbmRvdy4KK2hlaWdodAkJUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSB3aW5kb3cuCitoZWlnaHQgPSB7bn0JU2V0cyB0aGUgd2luZG93IGhlaWdodCB0byB7bn0uCitjdXJzb3IJCVJldHVybnMgYSBbcm93LCBjb2xdIGFycmF5IGZvciB0aGUgY3Vyc29yIHBvc2l0aW9uLgorY3Vyc29yID0gW3tyb3d9LCB7Y29sfV0KKwkJU2V0cyB0aGUgY3Vyc29yIHBvc2l0aW9uIHRvIHtyb3d9IGFuZCB7Y29sfS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBHbG9iYWwgdmFyaWFibGVzCQkJCQkqcnVieS1nbG9iYWxzKgorCitUaGVyZSBhcmUgdHdvIGdsb2JhbCB2YXJpYWJsZXMuCisKKyRjdXJ3aW4JCVRoZSBjdXJyZW50IHdpbmRvdyBvYmplY3QuCiskY3VyYnVmCQlUaGUgY3VycmVudCBidWZmZXIgb2JqZWN0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9pZl9zbmlmZi50eHQgYi9ydW50aW1lL2RvYy9pZl9zbmlmZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiMzRjNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2lmX3NuaWZmLnR4dApAQCAtMCwwICsxLDk1IEBACisqaWZfc25pZmYudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMSBTZXAgMDMKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwKKwkJYnkgQW50b24gTGVoZXJiYXVlciAodG9uaUB0YWtlZml2ZS5jby5hdCkKKworCitTTmlGRisgYW5kIFZpbQkJCQkgICAgKnNuaWZmKgorCisxLiBJbnRyb2R1Y3Rpb24JCQkJICAgIHxzbmlmZi1pbnRyb3wKKzIuIENvbW1hbmRzCQkJCSAgICB8c25pZmYtY29tbWFuZHN8CiszLiBDb21waWxpbmcgVmltIHdpdGggU05pRkYrIGludGVyZmFjZQkgICAgfHNuaWZmLWNvbXBpbGluZ3wKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfSAgKkUyNzUqICpFMjc0KiAqRTI3NiogKkUyNzgqICpFMjc5KgorCitUaGUgU05pRkYrIGludGVyZmFjZSBvbmx5IHdvcmtzLCB3aGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCB0aGUgfCtzbmlmZnwKK2ZlYXR1cmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW50cm9kdWN0aW9uCQkJCQkqc25pZmYtaW50cm8qCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgZm9yIHRoZSB1c2Ugd2l0aCBTTmlGRisgYXJlIGF2YWlsYWJsZToKKworICAgKiBWaW0gY2FuIGJlIHVzZWQgZm9yIGFsbCBlZGl0aW5nIHJlcXVlc3RzCisgICAqIFNOaUZGKyByZWNvZ25pemVzIGFuZCB1cGRhdGVzIGFsbCBicm93c2VycyB3aGVuIGEgZmlsZSBpcyBzYXZlZCBpbiBWaW0KKyAgICogU05pRkYrIGNvbW1hbmRzIGNhbiBiZSBpc3N1ZWQgZGlyZWN0bHkgZnJvbSBWaW0KKworSG93IHRvIHVzZSBWaW0gd2l0aCBTTmlGRisKKyAgIDEuIE1ha2Ugc3VyZSBTTmlGRisgaXMgcnVubmluZy4KKyAgIDIuIEluIHRoZSBFZGl0b3IgdmlldyBvZiB0aGUgUHJlZmVyZW5jZXMgZGlhbG9nIHNldCB0aGUgRmllbGQgbmFtZWQKKyAgICAgICdFeHRlcm5hbCBFZGl0b3InIHRvICdFbWFjcy9WaW0nLgorICAgNC4gU3RhcnQgVmltCisgICA1LiBDb25uZWN0IHRvIFNOaUZGKyAoOnNuaWZmIGNvbm5lY3QpCisKK09uY2UgYSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBTTmlGRisgdXNlcyBWaW0gZm9yIGFsbCByZXF1ZXN0cyB0byBzaG93IG9yCitlZGl0IHNvdXJjZSBjb2RlLiAgT24gdGhlIG90aGVyIGhhbmQsIHlvdSBjYW4gc2VuZCBxdWVyaWVzIHRvIFNOaUZGKyB3aXRoIHRoZQorOnNuaWZmIGNvbW1hbmQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gQ29tbWFuZHMJCQkJICAgICpzbmlmZi1jb21tYW5kcyoKKworCQkJICAgICo6c25pZmYqICo6c25pKgorOnNuaVtmZl0gcmVxdWVzdCBbc3ltYm9sXSAgIFNlbmQgcmVxdWVzdCB0byBzbmlmZiB3aXRoIG9wdGlvbmFsIHN5bWJvbC4KKwkJCSAgICB7bm90IGluIFZpfQorOnNuaVtmZl0JCSAgICBEaXNwbGF5IGFsbCBwb3NzaWJsZSByZXF1ZXN0cyBhbmQgdGhlIGNvbm5lY3Rpb24KKwkJCSAgICBzdGF0dXMKKworTW9zdCByZXF1ZXN0cyByZXF1aXJlIGEgc3ltYm9sIChpZGVudGlmaWVyKSBhcyBwYXJhbWV0ZXIuIElmIGl0IGlzIG9taXR0ZWQsCitWaW0gd2lsbCB1c2UgdGhlIGN1cnJlbnQgd29yZCB1bmRlciB0aGUgY3Vyc29yLgorVGhlIGF2YWlsYWJsZSByZXF1ZXN0cyBhcmUgbGlzdGVkIGJlbG93OgorCityZXF1ZXN0CQkgICAgICBtYXBwaW5nCWRlc2NyaXB0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjb25uZWN0CQkJc2MJRXN0YWJsaXNoIGNvbm5lY3Rpb24gd2l0aCBTTmlGRisuCisJCQkJTWFrZSBzdXJlIFNOaUZGKyBpcyBwcmVwYXJlZCBmb3IgdGhpcyBpbiB0aGUKKwkJCQlQcmVmZXJlbmNlcworZGlzY29ubmVjdAkJc3EJRGlzY29ubmVjdCBmcm9tIFNOaUZGKy4gWW91IGNhbiByZWNvbm5lY3QgYW55CisJCQkJdGltZSB3aXRoIDpzbmlmZiBjb25uZWN0IChvciAnc2MnKQordG9nZ2xlCQkJc3QJVG9nZ2xlIGJldHdlZW4gaW1wbGVtZW50YXRpb24KKwkJCQlhbmQgZGVmaW5pdGlvbiBmaWxlCitmaW5kLXN5bWJvbAkJc2YJTG9hZCB0aGUgc3ltYm9sIGludG8gYSBTeW1ib2wgQnJvd3NlcgorYnJvd3NlLWNsYXNzCQlzYglMb2FkcyB0aGUgY2xhc3MgaW50byBhIENsYXNzIEJyb3dzZXIKK3N1cGVyY2xhc3MJCXNzCUVkaXQgc3VwZXJjbGFzcyBvZiBzeW1ib2wKK292ZXJyaWRkZW4JCXNvCUVkaXQgb3ZlcnJpZGRlbiBtZXRob2Qgb2Ygc3ltYm9sCityZXRyaWV2ZS1maWxlCQlzcmYJUmV0cmlldmUgc3ltYm9sIGluIGN1cnJlbnQgZmlsZQorcmV0cmlldmUtcHJvamVjdAlzcnAJUmV0cmlldmUgc3ltYm9sIGluIGN1cnJlbnQgcHJvamVjdAorcmV0cmlldmUtYWxsLXByb2plY3RzCXNyUAlSZXRyaWV2ZSBzeW1ib2wgaW4gYWxsIHByb2plY3RzCityZXRyaWV2ZS1uZXh0CQlzUglSZXRyaWV2ZSBzeW1ib2wgdXNpbmcgY3VycmVudCBSZXRyaWV2ZXIKKwkJCQlzZXR0aW5ncworZ290by1zeW1ib2wJCXNnCUdvdG8gZGVmaW5pdGlvbiBvciBpbXBsZW1lbnRhdGlvbiBvZiBzeW1ib2wKK2hpZXJhcmNoeQkJc2gJTG9hZCBzeW1ib2wgaW50byB0aGUgSGllcmFyY2h5IEJyb3dzZXIKK3Jlc3RyLWhpZXIJCXNICXNhbWUgYXMgYWJvdmUgYnV0IHNob3cgb25seSByZWxhdGVkIGNsYXNzZXMKK3hyZWYtdG8JCQlzeHQJU3RhcnQgYSByZWZlcnMtdG8gcXVlcnkgb24gc3ltYm9sIGFuZAorCQkJCWxvYWQgdGhlIHJlc3VsdHMgaW50byB0aGUgQ3Jvc3MgUmVmZXJlbmNlcgoreHJlZi1ieQkJCXN4YglTdGFydCBhIHJlZmVycmVkLWJ5IHF1ZXJ5IG9uIHN5bWJvbAoreHJlZi1oYXMJCXN4aAlTdGFydCBhIHJlZmVycy10byBjb21wb25lbnRzIHF1ZXJ5IG9uIHN5bWJvbAoreHJlZi11c2VkLWJ5CQlzeHUJU3RhcnQgYSByZWZlcnJlZC1ieSBhcyBjb21wb25lbnQgcXVlcnkgb24KKwkJCQlzeW1ib2wKK3Nob3ctZG9jdQkJc2QJU2hvdyBkb2N1bWVudGF0aW9uIG9mIHN5bWJvbAorZ2VuLWRvY3UJCXNECUdlbmVyYXRlIGRvY3VtZW50YXRpb24gb2Ygc3ltYm9sCisKK1RoZSBtYXBwaW5ncyBhcmUgZGVmaW5lZCBpbiBhIGZpbGUgJ3NuaWZmLnZpbScsIHdoaWNoIGlzIHBhcnQgb2YgZXZlcnkgU05pRkYrCitwcm9kdWN0ICgkU05JRkZfRElSL2NvbmZpZy9zbmlmZi52aW0pLiBUaGlzIGZpbGUgaXMgc291cmNlZCB3aGVuZXZlciBWaW0KK2Nvbm5lY3RzIHRvIFNOaUZGKy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBDb21waWxpbmcgVmltIHdpdGggU05pRkYrIGludGVyZmFjZQkJKnNuaWZmLWNvbXBpbGluZyoKKworVG8gY29tcGlsZSBWaW0gd2l0aCBTTmlGRisgc3VwcG9ydCwgeW91IG5lZWQgdHdvIHNvdXJjZSBmaWxlcyBvZiB0aGUgZXh0cmEKK2FyY2hpdmU6IGlmX3NuaWZmLmMgYW5kIGlmX3NuaWZmLmguCitPbiBVbml4OiBFZGl0IHRoZSBNYWtlZmlsZSBhbmQgdW5jb21tZW50IHRoZSBsaW5lICItLWVuYWJsZS1zbmlmZiIuICBPciBydW4KK2NvbmZpZ3VyZSBtYW51YWxseSB3aXRoIHRoaXMgYXJndW1lbnQuCitPbiBOVDogU3BlY2lmeSBTTklGRj15ZXMgd2l0aCB5b3VyIG1ha2UgY29tbWFuZC4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2lmX3RjbC50eHQgYi9ydW50aW1lL2RvYy9pZl90Y2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODZiZWQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9pZl90Y2wudHh0CkBAIC0wLDAgKzEsNTEyIEBACisqaWZfdGNsLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSmFuIDE3CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEluZ28gV2lsa2VuCisKKworVGhlIFRjbCBJbnRlcmZhY2UgdG8gVmltCQkJCSp0Y2wqICpUY2wqICpUQ0wqCisKKzEuIENvbW1hbmRzCQkJCXx0Y2wtZXgtY29tbWFuZHN8CisyLiBUY2wgY29tbWFuZHMJCQkJfHRjbC1jb21tYW5kc3wKKzMuIFRjbCB2YXJpYWJsZXMJCQl8dGNsLXZhcmlhYmxlc3wKKzQuIFRjbCB3aW5kb3cgY29tbWFuZHMJCQl8dGNsLXdpbmRvdy1jbWRzfAorNS4gVGNsIGJ1ZmZlciBjb21tYW5kcwkJCXx0Y2wtYnVmZmVyLWNtZHN8Cis2LiBNaXNjZWxsYW5lb3VzOyBPdXRwdXQgZnJvbSBUY2wJfHRjbC1taXNjfCB8dGNsLW91dHB1dHwKKzcuIEtub3duIGJ1Z3MgJiBwcm9ibGVtcwkJfHRjbC1idWdzfAorOC4gRXhhbXBsZXMJCQkJfHRjbC1leGFtcGxlc3wKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfSAqRTI4MCogKkUyODEqCisKK1RoZSBUY2wgaW50ZXJmYWNlIG9ubHkgd29ya3Mgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggdGhlIHwrdGNsfCBmZWF0dXJlLgorCitXQVJOSU5HOiBUaGVyZSBhcmUgcHJvYmFibHkgc3RpbGwgc29tZSBidWdzLiAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMsCitjb21tZW50cywgaWRlYXMgZXRjIHRvIDxJbmdvLldpbGtlbkBpbmZvcm1hdGlrLnVuaS1vbGRlbmJ1cmcuZGU+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gQ29tbWFuZHMJCQkJKnRjbC1leC1jb21tYW5kcyogKkU1NzEqICpFNTcyKgorCisJCQkJCQkJKjp0Y2wqICo6dGMqCis6dGNbbF0ge2NtZH0JCUV4ZWN1dGUgVGNsIGNvbW1hbmQge2NtZH0uCisKKzpbcmFuZ2VddGNbbF0gPDwge2VuZG1hcmtlcn0KK3tzY3JpcHR9Cit7ZW5kbWFya2VyfQorCQkJRXhlY3V0ZSBUY2wgc2NyaXB0IHtzY3JpcHR9LgorCQkJTm90ZTogVGhpcyBjb21tYW5kIGRvZXNuJ3Qgd29yayB3aGVuIHRoZSBUY2wgZmVhdHVyZQorCQkJd2Fzbid0IGNvbXBpbGVkIGluLiAgVG8gYXZvaWQgZXJyb3JzLCBzZWUKKwkJCXxzY3JpcHQtaGVyZXwuCisKK3tlbmRtYXJrZXJ9IG11c3QgTk9UIGJlIHByZWNlZGVkIGJ5IGFueSB3aGl0ZSBzcGFjZS4gSWYge2VuZG1hcmtlcn0gaXMKK29taXR0ZWQgZnJvbSBhZnRlciB0aGUgIjw8IiwgYSBkb3QgJy4nIG11c3QgYmUgdXNlZCBhZnRlciB7c2NyaXB0fSwgbGlrZSBmb3IKK3RoZSB8OmFwcGVuZHwgYW5kIHw6aW5zZXJ0fCBjb21tYW5kcy4KK1RoaXMgZm9ybSBvZiB0aGUgfDp0Y2x8IGNvbW1hbmQgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgaW5jbHVkaW5nIHRjbCBjb2RlIGluIFZpbQorc2NyaXB0cy4KKworRXhhbXBsZTogPgorCWZ1bmN0aW9uISBEZWZpbmVEYXRlKCkKKwkgICAgdGNsIDw8IEVPRgorCSAgICBwcm9jIGRhdGUge30geworCQlyZXR1cm4gW2Nsb2NrIGZvcm1hdCBbY2xvY2sgc2Vjb25kc11dCisJICAgIH0KKwlFT0YKKwllbmRmdW5jdGlvbgorPAorCisJCQkJCQkJKjp0Y2xkbyogKjp0Y2xkKgorOltyYW5nZV10Y2xkW29dIHtjbWR9CUV4ZWN1dGUgVGNsIGNvbW1hbmQge2NtZH0gZm9yIGVhY2ggbGluZSBpbiBbcmFuZ2VdCisJCQl3aXRoIHRoZSB2YXJpYWJsZSAibGluZSIgYmVpbmcgc2V0IHRvIHRoZSB0ZXh0IG9mIGVhY2gKKwkJCWxpbmUgaW4gdHVybiwgYW5kICJsbnVtIiB0byB0aGUgbGluZSBudW1iZXIuICBTZXR0aW5nCisJCQkibGluZSIgd2lsbCBjaGFuZ2UgdGhlIHRleHQsIGJ1dCBub3RlIHRoYXQgaXQgaXMgbm90CisJCQlwb3NzaWJsZSB0byBhZGQgb3IgZGVsZXRlIGxpbmVzIHVzaW5nIHRoaXMgY29tbWFuZC4KKwkJCUlmIHtjbWR9IHJldHVybnMgYW4gZXJyb3IsIHRoZSBjb21tYW5kIGlzIGludGVycnVwdGVkLgorCQkJVGhlIGRlZmF1bHQgZm9yIFtyYW5nZV0gaXMgdGhlIHdob2xlIGZpbGU6ICIxLCQiLgorCQkJU2VlIHx0Y2wtdmFyLWxpbmV8IGFuZCB8dGNsLXZhci1sbnVtfC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnRjbGZpbGUqICo6dGNsZioKKzp0Y2xmW2lsZV0ge2ZpbGV9CUV4ZWN1dGUgdGhlIFRjbCBzY3JpcHQgaW4ge2ZpbGV9LiAgVGhpcyBpcyB0aGUgc2FtZSBhcworCQkJIjp0Y2wgc291cmNlIHtmaWxlfSIsIGJ1dCBhbGxvd3MgZmlsZSBuYW1lIGNvbXBsZXRpb24uCisJCQl7bm90IGluIFZpfQorCisKK05vdGUgdGhhdCBUY2wgb2JqZWN0cyAobGlrZSB2YXJpYWJsZXMpIHBlcnNpc3QgZnJvbSBvbmUgY29tbWFuZCB0byB0aGUgbmV4dCwKK2p1c3QgYXMgaW4gdGhlIFRjbCBzaGVsbC4KKworRXhlY3V0aW5nIFRjbCBjb21tYW5kcyBpcyBub3QgcG9zc2libGUgaW4gdGhlIHxzYW5kYm94fC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBUY2wgY29tbWFuZHMJCQkJCQkqdGNsLWNvbW1hbmRzKgorCitUY2wgY29kZSBnZXRzIGFsbCBvZiBpdHMgYWNjZXNzIHRvIHZpbSB2aWEgY29tbWFuZHMgaW4gdGhlICI6OnZpbSIgbmFtZXNwYWNlLgorVGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgaW1wbGVtZW50ZWQ6ID4KKworCTo6dmltOjpiZWVwCQkJIyBHdWVzcy4KKwk6OnZpbTo6YnVmZmVyIHtufQkJIyBDcmVhdGUgVGNsIGNvbW1hbmQgZm9yIG9uZSBidWZmZXIuCisJOjp2aW06OmJ1ZmZlciBsaXN0CQkjIENyZWF0ZSBUY2wgY29tbWFuZHMgZm9yIGFsbCBidWZmZXJzLgorCTo6dmltOjpjb21tYW5kIFstcXVpZXRdIHtjbWR9CSMgRXhlY3V0ZSBhbiBleCBjb21tYW5kLgorCTo6dmltOjpleHByIHtleHByfQkJIyBVc2UgVmltJ3MgZXhwcmVzc2lvbiBldmFsdWF0b3IuCisJOjp2aW06Om9wdGlvbiB7b3B0fQkJIyBHZXQgdmltIG9wdGlvbi4KKwk6OnZpbTo6b3B0aW9uIHtvcHR9IHt2YWx9CSMgU2V0IHZpbSBvcHRpb24uCisJOjp2aW06OndpbmRvdyBsaXN0CQkjIENyZWF0ZSBUY2wgY29tbWFuZHMgZm9yIGFsbCB3aW5kb3dzLgorCitDb21tYW5kczoKKwk6OnZpbTo6YmVlcAkJCQkJKnRjbC1iZWVwKgorCUhvbmsuICBEb2VzIG5vdCByZXR1cm4gYSByZXN1bHQuCisKKwk6OnZpbTo6YnVmZmVyIHtufQkJCQkqdGNsLWJ1ZmZlcioKKwk6OnZpbTo6YnVmZmVyIGV4aXN0cyB7bn0KKwk6OnZpbTo6YnVmZmVyIGxpc3QKKwlQcm92aWRlcyBhY2Nlc3MgdG8gdmltIGJ1ZmZlcnMuICBXaXRoIGFuIGludGVnZXIgYXJndW1lbnQsIGNyZWF0ZXMgYQorCWJ1ZmZlciBjb21tYW5kIChzZWUgfHRjbC1idWZmZXItY21kc3wpIGZvciB0aGUgYnVmZmVyIHdpdGggdGhhdAorCW51bWJlciwgYW5kIHJldHVybnMgaXRzIG5hbWUgYXMgdGhlIHJlc3VsdC4gIEludmFsaWQgYnVmZmVyIG51bWJlcnMKKwlyZXN1bHQgaW4gYSBzdGFuZGFyZCBUY2wgZXJyb3IuICBUbyB0ZXN0IGZvciB2YWxpZCBidWZmZXIgbnVtYmVycywKKwl2aW0ncyBpbnRlcm5hbCBmdW5jdGlvbnMgY2FuIGJlIHVzZWQ6ID4KKwkJc2V0IG5idWZzIFs6OnZpbTo6ZXhwciBidWZucigiJCIpXQorCQlzZXQgaXN2YWxpZCBbOjp2aW06OmV4cHIgImJ1ZmV4aXN0cygkbikiXQorPAlUaGUgImxpc3QiIG9wdGlvbiBjcmVhdGVzIGEgYnVmZmVyIGNvbW1hbmQgZm9yIGVhY2ggdmFsaWQgYnVmZmVyLCBhbmQKKwlyZXR1cm5zIGEgbGlzdCBvZiB0aGUgY29tbWFuZCBuYW1lcyBhcyB0aGUgcmVzdWx0LgorCUV4YW1wbGU6ID4KKwkJc2V0IGJ1ZnMgWzo6dmltOjpidWZmZXIgbGlzdF0KKwkJZm9yZWFjaCBiICRidWZzIHsgJGIgYXBwZW5kIGVuZCAiVGhlIEVuZCEiIH0KKzwJVGhlICJleGlzdHMiIG9wdGlvbiBjaGVja3MgaWYgYSBidWZmZXIgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIGV4aXN0cy4KKwlFeGFtcGxlOiA+CisJCWlmIHsgWzo6dmltOjpidWZmZXIgZXhpc3RzICRuXSB9IHsgOjp2aW06OmNvbW1hbmQgIjplICMkbiIgfQorPAlUaGlzIGNvbW1hbmQgbWlnaHQgYmUgcmVwbGFjZWQgYnkgYSB2YXJpYWJsZSBpbiBmdXR1cmUgdmVyc2lvbnMuCisJU2VlIGFsc28gfHRjbC12YXItY3VycmVudHwgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlci4KKworCTo6dmltOjpjb21tYW5kIHtjbWR9CQkJCSp0Y2wtY29tbWFuZCoKKwk6OnZpbTo6Y29tbWFuZCAtcXVpZXQge2NtZH0KKwlFeGVjdXRlIHRoZSB2aW0gKGV4LW1vZGUpIGNvbW1hbmQge2NtZH0uICBBbnkgZXggY29tbWFuZCB0aGF0IGFmZmVjdHMKKwlhIGJ1ZmZlciBvciB3aW5kb3cgdXNlcyB0aGUgY3VycmVudCBidWZmZXIvY3VycmVudCB3aW5kb3cuICBEb2VzIG5vdAorCXJldHVybiBhIHJlc3VsdCBvdGhlciB0aGFuIGEgc3RhbmRhcmQgVGNsIGVycm9yIGNvZGUuICBBZnRlciB0aGlzCisJY29tbWFuZCBpcyBjb21wbGV0ZWQsIHRoZSAiOjp2aW06OmN1cnJlbnQiIHZhcmlhYmxlIGlzIHVwZGF0ZWQuCisJVGhlICItcXVpZXQiIGZsYWcgc3VwcHJlc3NlcyBhbnkgZXJyb3IgbWVzc2FnZXMgZnJvbSB2aW0uCisJRXhhbXBsZXM6ID4KKwkJOjp2aW06OmNvbW1hbmQgInNldCB0cz04IgorCQk6OnZpbTo6Y29tbWFuZCAiJXMvZm9vL2Jhci9nIgorPAlUbyBleGVjdXRlIG5vcm1hbC1tb2RlIGNvbW1hbmRzLCB1c2UgIm5vcm1hbCIgKHNlZSB8Om5vcm1hbHwpOiA+CisJCXNldCBjbWQgImpqIgorCQk6OnZpbTo6Y29tbWFuZCAibm9ybWFsICRjbWQiCis8CVNlZSBhbHNvIHx0Y2wtd2luZG93LWNvbW1hbmR8IGFuZCB8dGNsLWJ1ZmZlci1jb21tYW5kfC4KKworCTo6dmltOjpleHByIHtleHByfQkJCQkqdGNsLWV4cHIqCisJRXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIHtleHByfSB1c2luZyB2aW0ncyBpbnRlcm5hbCBleHByZXNzaW9uCisJZXZhbHVhdG9yIChzZWUgfGV4cHJlc3Npb258KS4gICBBbnkgZXhwcmVzc2lvbiB0aGF0IHF1ZXJpZXMgYSBidWZmZXIKKwlvciB3aW5kb3cgcHJvcGVydHkgdXNlcyB0aGUgY3VycmVudCBidWZmZXIvY3VycmVudCB3aW5kb3cuICBSZXR1cm5zCisJdGhlIHJlc3VsdCBhcyBhIHN0cmluZy4KKwlFeGFtcGxlczogPgorCQlzZXQgcGVybF9hdmFpbGFibGUgWzo6dmltOjpleHByIGhhcygicGVybCIpXQorPAlTZWUgYWxzbyB8dGNsLXdpbmRvdy1leHByfCBhbmQgfHRjbC1idWZmZXItZXhwcnwuCisKKwk6OnZpbTo6b3B0aW9uIHtvcHR9CQkJCSp0Y2wtb3B0aW9uKgorCTo6dmltOjpvcHRpb24ge29wdH0ge3ZhbHVlfQorCVdpdGhvdXQgc2Vjb25kIGFyZ3VtZW50LCBxdWVyaWVzIHRoZSB2YWx1ZSBvZiBhIHZpbSBvcHRpb24uICBXaXRoIHRoaXMKKwlhcmd1bWVudCwgc2V0cyB0aGUgdmltIG9wdGlvbiB0byB7dmFsdWV9LCBhbmQgcmV0dXJucyB0aGUgcHJldmlvdXMKKwl2YWx1ZSBhcyB0aGUgcmVzdWx0LiAgQW55IG9wdGlvbnMgdGhhdCBhcmUgbWFya2VkIGFzICdsb2NhbCB0byBidWZmZXInCisJb3IgJ2xvY2FsIHRvIHdpbmRvdycgYWZmZWN0IHRoZSBjdXJyZW50IGJ1ZmZlci9jdXJyZW50IHdpbmRvdy4gIFRoZQorCWdsb2JhbCB2YWx1ZSBpcyBub3QgY2hhbmdlZCwgdXNlIHRoZSAiOnNldCIgY29tbWFuZCBmb3IgdGhhdC4gIEZvcgorCWJvb2xlYW4gb3B0aW9ucywge3ZhbHVlfSBzaG91bGQgYmUgIjAiIG9yICIxIiwgb3IgYW55IG9mIHRoZSBrZXl3b3JkcworCSJvbiIsICJvZmYiIG9yICJ0b2dnbGUiLiAgU2VlIHxvcHRpb24tc3VtbWFyeXwgZm9yIGEgbGlzdCBvZiBvcHRpb25zLgorCUV4YW1wbGU6ID4KKwkJOjp2aW06Om9wdGlvbiB0cyA4Cis8CVNlZSBhbHNvIHx0Y2wtd2luZG93LW9wdGlvbnwgYW5kIHx0Y2wtYnVmZmVyLW9wdGlvbnwuCisKKwk6OnZpbTo6d2luZG93IHtvcHRpb259CQkJCSp0Y2wtd2luZG93KgorCVByb3ZpZGVzIGFjY2VzcyB0byB2aW0gd2luZG93cy4gIEN1cnJlbnRseSBvbmx5IHRoZSAibGlzdCIgb3B0aW9uIGlzCisJaW1wbGVtZW50ZWQuIFRoaXMgY3JlYXRlcyBhIHdpbmRvdyBjb21tYW5kIChzZWUgfHRjbC13aW5kb3ctY21kc3wpIGZvcgorCWVhY2ggd2luZG93LCBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgdGhlIGNvbW1hbmQgbmFtZXMgYXMgdGhlIHJlc3VsdC4KKwlFeGFtcGxlOiA+CisJCXNldCB3aW5zIFs6OnZpbTo6d2luZG93IGxpc3RdCisJCWZvcmVhY2ggdyAkd2lucyB7ICR3IGhlaWdodCA0IH0KKzwJVGhpcyBjb21tYW5kIG1pZ2h0IGJlIHJlcGxhY2VkIGJ5IGEgdmFyaWFibGUgaW4gZnV0dXJlIHZlcnNpb25zLgorCVNlZSBhbHNvIHx0Y2wtdmFyLWN1cnJlbnR8IGZvciB0aGUgY3VycmVudCB3aW5kb3cuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gVGNsIHZhcmlhYmxlcwkJCQkJKnRjbC12YXJpYWJsZXMqCisKK1RoZSA6OnZpbSBuYW1lc3BhY2UgY29udGFpbnMgYSBmZXcgdmFyaWFibGVzLiAgVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB0aGUgVGNsCitpbnRlcnByZXRlciBpcyBjYWxsZWQgZnJvbSB2aW0gYW5kIHNldCB0byBjdXJyZW50IHZhbHVlcy4gPgorCisJOjp2aW06OmN1cnJlbnQJCSMgYXJyYXkgY29udGFpbmluZyAiY3VycmVudCIgb2JqZWN0cworCTo6dmltOjpsYmFzZQkJIyBudW1iZXIgb2YgZmlyc3QgbGluZQorCTo6dmltOjpyYW5nZQkJIyBhcnJheSBjb250YWluaW5nIGN1cnJlbnQgcmFuZ2UgbnVtYmVycworCWxpbmUJCQkjIGN1cnJlbnQgbGluZSBhcyBhIHN0cmluZyAoOnRjbGRvIG9ubHkpCisJbG51bQkJCSMgY3VycmVudCBsaW5lIG51bWJlciAoOnRjbGRvIG9ubHkpCisKK1ZhcmlhYmxlczoKKwk6OnZpbTo6Y3VycmVudAkJCQkJKnRjbC12YXItY3VycmVudCoKKwlUaGlzIGlzIGFuIGFycmF5IHByb3ZpZGluZyBhY2Nlc3MgdG8gdmFyaW91cyAiY3VycmVudCIgb2JqZWN0cworCWF2YWlsYWJsZSBpbiB2aW0uICBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBhZnRlcgorCSI6OnZpbTo6Y29tbWFuZCIgaXMgY2FsbGVkLCBhcyB0aGlzIG1pZ2h0IGNoYW5nZSB2aW0ncyBjdXJyZW50CisJc2V0dGluZ3MgKGUuZy4sIGJ5IGRlbGV0aW5nIHRoZSBjdXJyZW50IGJ1ZmZlcikuCisJVGhlICJidWZmZXIiIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGJ1ZmZlciBjb21tYW5kIGZvciB0aGUKKwljdXJyZW50IGJ1ZmZlci4gIFRoaXMgY2FuIGJlIHVzZWQgZGlyZWN0bHkgdG8gaW52b2tlIGJ1ZmZlciBjb21tYW5kcworCShzZWUgfHRjbC1idWZmZXItY21kc3wpLiAgVGhpcyBlbGVtZW50IGlzIHJlYWQtb25seS4KKwlFeGFtcGxlOiA+CisJCSQ6OnZpbTo6Y3VycmVudChidWZmZXIpIGluc2VydCBiZWdpbiAiSGVsbG8gd29ybGQiCis8CVRoZSAid2luZG93IiBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSB3aW5kb3cgY29tbWFuZCBmb3IgdGhlCisJY3VycmVudCB3aW5kb3cuICBUaGlzIGNhbiBiZSB1c2VkIGRpcmVjdGx5IHRvIGludm9rZSB3aW5kb3cgY29tbWFuZHMKKwkoc2VlIHx0Y2wtd2luZG93LWNtZHN8KS4gIFRoaXMgZWxlbWVudCBpcyByZWFkLW9ubHkuCisJRXhhbXBsZTogPgorCQkkOjp2aW06OmN1cnJlbnQod2luZG93KSBoZWlnaHQgMTAKKzwKKwk6OnZpbTo6bGJhc2UJCQkJCSp0Y2wtdmFyLWxiYXNlKgorCVRoaXMgdmFyaWFibGUgY29udHJvbHMgaG93IFRjbCB0cmVhdHMgbGluZSBudW1iZXJzLiAgSWYgaXQgaXMgc2V0IHRvCisJJzEnLCB0aGVuIGxpbmVzIGFuZCBjb2x1bW5zIHN0YXJ0IGF0IDEuICBUaGlzIHdheSwgbGluZSBudW1iZXJzIGZyb20KKwlUY2wgY29tbWFuZHMgYW5kIHZpbSBleHByZXNzaW9ucyBhcmUgY29tcGF0aWJsZS4gIElmIHRoaXMgdmFyaWFibGUgaXMKKwlzZXQgdG8gJzAnLCB0aGVuIGxpbmUgbnVtYmVycyBhbmQgY29sdW1ucyBzdGFydCBhdCAwIGluIFRjbC4gIFRoaXMgaXMKKwl1c2VmdWwgaWYgeW91IHdhbnQgdG8gdHJlYXQgYSBidWZmZXIgYXMgYSBUY2wgbGlzdCBvciBhIGxpbmUgYXMgYSBUY2wKKwlzdHJpbmcgYW5kIHVzZSBzdGFuZGFyZCBUY2wgY29tbWFuZHMgdGhhdCByZXR1cm4gYW4gaW5kZXggKCJsc29ydCIgb3IKKwkic3RyaW5nIGZpcnN0IiwgZm9yIGV4YW1wbGUpLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgJzEnLiAgQ3VycmVudGx5LAorCWFueSBub24temVybyB2YWx1ZXMgaXMgdHJlYXRlZCBhcyAnMScsIGJ1dCB5b3VyIHNjcmlwdHMgc2hvdWxkIG5vdAorCXJlbHkgb24gdGhpcy4gIFNlZSBhbHNvIHx0Y2wtbGluZW51bWJlcnN8LgorCisJOjp2aW06OnJhbmdlCQkJCQkqdGNsLXZhci1yYW5nZSoKKwlUaGlzIGlzIGFuIGFycmF5IHdpdGggdGhyZWUgZWxlbWVudHMsICJzdGFydCIsICJiZWdpbiIgYW5kICJlbmQiLiAgSXQKKwljb250YWlucyB0aGUgbGluZSBudW1iZXJzIG9mIHRoZSBzdGFydCBhbmQgZW5kIHJvdyBvZiB0aGUgY3VycmVudAorCXJhbmdlLiAgImJlZ2luIiBpcyB0aGUgc2FtZSBhcyAic3RhcnQiLiAgVGhpcyB2YXJpYWJsZSBpcyByZWFkLW9ubHkuCisJU2VlIHx0Y2wtZXhhbXBsZXN8LgorCisJbGluZQkJCQkJCSp0Y2wtdmFyLWxpbmUqCisJbG51bQkJCQkJCSp0Y2wtdmFyLWxudW0qCisJVGhlc2UgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhlICI6dGNsZG8iIGV4IGNvbW1hbmQKKwlpcyBiZWluZyBleGVjdXRlZC4gIFRoZXkgY29udGFpbiB0aGUgdGV4dCBhbmQgbGluZSBudW1iZXIgb2YgdGhlCisJY3VycmVudCBsaW5lLiAgV2hlbiB0aGUgVGNsIGNvbW1hbmQgaW52b2tlZCBieSAiOnRjbGRvIiBpcyBjb21wbGV0ZWQsCisJdGhlIGN1cnJlbnQgbGluZSBpcyBzZXQgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSAibGluZSIgdmFyaWFibGUsIHVubGVzcworCXRoZSB2YXJpYWJsZSB3YXMgdW5zZXQgYnkgdGhlIFRjbCBjb21tYW5kLiAgVGhlICJsbnVtIiB2YXJpYWJsZSBpcworCXJlYWQtb25seS4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgbm90IGluIHRoZSAiOjp2aW0iIG5hbWVzcGFjZSBzbyB0aGV5CisJY2FuIGJlIHVzZWQgaW4gIjp0Y2xkbyIgd2l0aG91dCBtdWNoIHR5cGluZyAodGhpcyBtaWdodCBiZSBjaGFuZ2VkIGluCisJZnV0dXJlIHZlcnNpb25zKS4gIFNlZSBhbHNvIHx0Y2wtbGluZW51bWJlcnN8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFRjbCB3aW5kb3cgY29tbWFuZHMJCQkJCSp0Y2wtd2luZG93LWNtZHMqCisKK1dpbmRvdyBjb21tYW5kcyByZXByZXNlbnQgdmltIHdpbmRvd3MuICBUaGV5IGFyZSBjcmVhdGVkIGJ5IHNldmVyYWwgY29tbWFuZHM6CisJOjp2aW06OndpbmRvdyBsaXN0CQkJfHRjbC13aW5kb3d8CisJIndpbmRvd3MiIG9wdGlvbiBvZiBhIGJ1ZmZlciBjb21tYW5kCXx0Y2wtYnVmZmVyLXdpbmRvd3N8CitUaGUgOjp2aW06OmN1cnJlbnQod2luZG93KSB2YXJpYWJsZSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgd2luZG93IGNvbW1hbmQKK2ZvciB0aGUgY3VycmVudCB3aW5kb3cuICBBIHdpbmRvdyBjb21tYW5kIGlzIGF1dG9tYXRpY2FsbHkgZGVsZXRlZCB3aGVuIHRoZQorY29ycmVzcG9uZGluZyB2aW0gd2luZG93IGlzIGNsb3NlZC4KKworTGV0cyBhc3N1bWUgdGhlIG5hbWUgb2YgdGhlIHdpbmRvdyBjb21tYW5kIGlzIHN0b3JlZCBpbiB0aGUgVGNsIHZhcmlhYmxlICJ3aW4iLAoraS5lLiAiJHdpbiIgY2FsbHMgdGhlIGNvbW1hbmQuICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTogPgorCisJJHdpbiBidWZmZXIJCSMgQ3JlYXRlIFRjbCBjb21tYW5kIGZvciB3aW5kb3cncyBidWZmZXIuCisJJHdpbiBjb21tYW5kIHtjbWR9CSMgRXhlY3V0ZSBleCBjb21tYW5kIGluIHdpbmRvd3MgY29udGV4dC4KKwkkd2luIGN1cnNvcgkJIyBHZXQgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisJJHdpbiBjdXJzb3Ige3Zhcn0JIyBTZXQgY3Vyc29yIHBvc2l0aW9uIGZyb20gYXJyYXkgdmFyaWFibGUuCisJJHdpbiBjdXJzb3Ige3Jvd30ge2NvbH0JIyBTZXQgY3Vyc29yIHBvc2l0aW9uLgorCSR3aW4gZGVsY21kIHtjbWR9CSMgQ2FsbCBUY2wgY29tbWFuZCB3aGVuIHdpbmRvdyBpcyBjbG9zZWQuCisJJHdpbiBleHByIHtleHByfQkjIEV2YWx1YXRlIHZpbSBleHByZXNzaW9uIGluIHdpbmRvd3MgY29udGV4dC4KKwkkd2luIGhlaWdodAkJIyBSZXBvcnQgdGhlIHdpbmRvdydzIGhlaWdodC4KKwkkd2luIGhlaWdodCB7bn0JCSMgU2V0IHRoZSB3aW5kb3cncyBoZWlnaHQuCisJJHdpbiBvcHRpb24ge29wdH0gW3ZhbF0JIyBHZXQvU2V0IHZpbSBvcHRpb24gaW4gd2luZG93cyBjb250ZXh0LgorCitPcHRpb25zOgorCSR3aW4gYnVmZmVyCQkJCQkqdGNsLXdpbmRvdy1idWZmZXIqCisJQ3JlYXRlcyBhIFRjbCBjb21tYW5kIGZvciB0aGUgd2luZG93J3MgYnVmZmVyLCBhbmQgcmV0dXJucyBpdHMgbmFtZSBhcworCXRoZSByZXN1bHQuICBUaGUgbmFtZSBzaG91bGQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGU6ID4KKwkJc2V0IGJ1ZiBbJHdpbiBidWZmZXJdCis8CSRidWYgaXMgbm93IGEgdmFsaWQgVGNsIGNvbW1hbmQuICBTZWUgfHRjbC1idWZmZXItY21kc3wgZm9yIHRoZQorCWF2YWlsYWJsZSBvcHRpb25zLgorCisJJHdpbiBjdXJzb3IJCQkJCSp0Y2wtd2luZG93LWN1cnNvcioKKwkkd2luIGN1cnNvciB7dmFyfQorCSR3aW4gY3Vyc29yIHtyb3d9IHtjb2x9CisJV2l0aG91dCBhcmd1bWVudCwgcmVwb3J0cyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gYXMgYSBzdHJpbmcuCisJVGhpcyBjYW4gYmUgY29udmVydGVkIHRvIGEgVGNsIGFycmF5IHZhcmlhYmxlOiA+CisJCWFycmF5IHNldCBoZXJlIFskd2luIGN1cnNvcl0KKzwJImhlcmUocm93KSIgYW5kICJoZXJlKGNvbHVtbikiIG5vdyBjb250YWluIHRoZSBjdXJzb3IgcG9zaXRpb24uCisJV2l0aCBhIHNpbmdsZSBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IGlzIGludGVycHJldGVkIGFzIHRoZSBuYW1lIG9mIGEKKwlUY2wgYXJyYXkgdmFyaWFibGUsIHdoaWNoIG11c3QgY29udGFpbiB0d28gZWxlbWVudHMgInJvdyIgYW5kICJjb2x1bW4iLgorCVRoZXNlIGFyZSB1c2VkIHRvIHNldCB0aGUgY3Vyc29yIHRvIHRoZSBuZXcgcG9zaXRpb246ID4KKwkJJHdpbiBjdXJzb3IgaGVyZQk7IyBub3QgJGhlcmUgIQorPAlXaXRoIHR3byBhcmd1bWVudHMsIHNldHMgdGhlIGN1cnNvciB0byB0aGUgc3BlY2lmaWVkIHJvdyBhbmQgY29sdW1uOiA+CisJCSR3aW4gY3Vyc29yICRoZXJlKHJvdykgJGhlcmUoY29sdW1uKQorPAlJbnZhbGlkIHBvc2l0aW9ucyByZXN1bHQgaW4gYSBzdGFuZGFyZCBUY2wgZXJyb3IsIHdoaWNoIGNhbiBiZSBjYXVnaHQKKwl3aXRoICJjYXRjaCIuICBUaGUgcm93IGFuZCBjb2x1bW4gdmFsdWVzIGRlcGVuZCBvbiB0aGUgIjo6dmltOjpsYmFzZSIKKwl2YXJpYWJsZS4gIFNlZSB8dGNsLXZhci1sYmFzZXwuCisKKwkkd2luIGRlbGNtZCB7Y21kfQkJCQkqdGNsLXdpbmRvdy1kZWxjbWQqCisJUmVnaXN0ZXJzIHRoZSBUY2wgY29tbWFuZCB7Y21kfSBhcyBhIGRlbGV0aW9uIGNhbGxiYWNrIGZvciB0aGUgd2luZG93LgorCVRoaXMgY29tbWFuZCBpcyBleGVjdXRlZCAoaW4gdGhlIGdsb2JhbCBzY29wZSkganVzdCBiZWZvcmUgdGhlIHdpbmRvdworCWlzIGNsb3NlZC4gIENvbXBsZXggY29tbWFuZHMgc2hvdWxkIGJlIGJ1aWxkIHdpdGggImxpc3QiOiA+CisJCSR3aW4gZGVsY21kIFtsaXN0IHB1dHMgdmltZXJyICJ3aW5kb3cgZGVsZXRlZCJdCis8CVNlZSBhbHNvIHx0Y2wtYnVmZmVyLWRlbGNtZHwuCisKKwkkd2luIGhlaWdodAkJCQkJKnRjbC13aW5kb3ctaGVpZ2h0KgorCSR3aW4gaGVpZ2h0IHtufQorCVdpdGhvdXQgYXJndW1lbnQsIHJlcG9ydHMgdGhlIHdpbmRvdydzIGN1cnJlbnQgaGVpZ2h0LiAgV2l0aCBhbgorCWFyZ3VtZW50LCB0cmllcyB0byBzZXQgdGhlIHdpbmRvdydzIGhlaWdodCB0byB7bn0sIHRoZW4gcmVwb3J0cyB0aGUKKwluZXcgaGVpZ2h0ICh3aGljaCBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSB7bn0pLgorCisJJHdpbiBjb21tYW5kIFstcXVpZXRdIHtjbWR9CQkJKnRjbC13aW5kb3ctY29tbWFuZCoKKwkkd2luIGV4cHIge2V4cHJ9CQkJCSp0Y2wtd2luZG93LWV4cHIqCisJJHdpbiBvcHRpb24ge29wdH0gW3ZhbF0JCQkJKnRjbC13aW5kb3ctb3B0aW9uKgorCVRoZXNlIGFyZSBzaW1pbGFyIHRvICI6OnZpbTo6Y29tbWFuZCIgZXRjLiwgZXhjZXB0IHRoYXQgZXZlcnl0aGluZyBpcworCWRvbmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdpbmRvdyByZXByZXNlbnRlZCBieSAkd2luLCBpbnN0ZWFkIG9mIHRoZQorCWN1cnJlbnQgd2luZG93LiAgRm9yIGV4YW1wbGUsIHNldHRpbmcgYW4gb3B0aW9uIHRoYXQgaXMgbWFya2VkICdsb2NhbAorCXRvIHdpbmRvdycgYWZmZWN0cyB0aGUgd2luZG93ICR3aW4uICBBbnl0aGluZyB0aGF0IGFmZmVjdHMgb3IgcXVlcmllcworCWEgYnVmZmVyIHVzZXMgdGhlIGJ1ZmZlciBkaXNwbGF5ZWQgaW4gdGhpcyB3aW5kb3cgKGkuZS4gdGhlIGJ1ZmZlcgorCXRoYXQgaXMgcmVwcmVzZW50ZWQgYnkgIiR3aW4gYnVmZmVyIikuICBTZWUgfHRjbC1jb21tYW5kfCwgfHRjbC1leHByfAorCWFuZCB8dGNsLW9wdGlvbnwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJRXhhbXBsZTogPgorCQkkd2luIG9wdGlvbiBudW1iZXIgb24KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBUY2wgYnVmZmVyIGNvbW1hbmRzCQkJCQkqdGNsLWJ1ZmZlci1jbWRzKgorCitCdWZmZXIgY29tbWFuZHMgcmVwcmVzZW50IHZpbSBidWZmZXJzLiAgVGhleSBhcmUgY3JlYXRlZCBieSBzZXZlcmFsIGNvbW1hbmRzOgorCTo6dmltOjpidWZmZXIge059CQkJfHRjbC1idWZmZXJ8CisJOjp2aW06OmJ1ZmZlciBsaXN0CQkJfHRjbC1idWZmZXJ8CisJImJ1ZmZlciIgb3B0aW9uIG9mIGEgd2luZG93IGNvbW1hbmQJfHRjbC13aW5kb3ctYnVmZmVyfAorVGhlIDo6dmltOjpjdXJyZW50KGJ1ZmZlcikgdmFyaWFibGUgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGJ1ZmZlciBjb21tYW5kCitmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLiAgQSBidWZmZXIgY29tbWFuZCBpcyBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgd2hlbiB0aGUKK2NvcnJlc3BvbmRpbmcgdmltIGJ1ZmZlciBpcyBkZXN0cm95ZWQuICBXaGVuZXZlciB0aGUgYnVmZmVyJ3MgY29udGVudHMgYXJlCitjaGFuZ2VkLCBhbGwgbWFya3MgaW4gdGhlIGJ1ZmZlciBhcmUgYXV0b21hdGljYWxseSBhZGp1c3RlZC4gIEFueSBjaGFuZ2VzIHRvCit0aGUgYnVmZmVyJ3MgY29udGVudHMgbWFkZSBieSBUY2wgY29tbWFuZHMgY2FuIGJlIHVuZG9uZSB3aXRoIHRoZSAidW5kbyIgdmltCitjb21tYW5kIChzZWUgfHVuZG98KS4KKworTGV0cyBhc3N1bWUgdGhlIG5hbWUgb2YgdGhlIGJ1ZmZlciBjb21tYW5kIGlzIHN0b3JlZCBpbiB0aGUgVGNsIHZhcmlhYmxlICJidWYiLAoraS5lLiAiJGJ1ZiIgY2FsbHMgdGhlIGNvbW1hbmQuICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTogPgorCisJJGJ1ZiBhcHBlbmQge259IHtzdHJ9CSMgQXBwZW5kIGEgbGluZSB0byBidWZmZXIsIGFmdGVyIGxpbmUge259LgorCSRidWYgY29tbWFuZCB7Y21kfQkjIEV4ZWN1dGUgZXggY29tbWFuZCBpbiBidWZmZXJzIGNvbnRleHQuCisJJGJ1ZiBjb3VudAkJIyBSZXBvcnQgbnVtYmVyIG9mIGxpbmVzIGluIGJ1ZmZlci4KKwkkYnVmIGRlbGNtZCB7Y21kfQkjIENhbGwgVGNsIGNvbW1hbmQgd2hlbiBidWZmZXIgaXMgZGVsZXRlZC4KKwkkYnVmIGRlbGV0ZSB7bn0JCSMgRGVsZXRlIGEgc2luZ2xlIGxpbmUuCisJJGJ1ZiBkZWxldGUge259IHttfQkjIERlbGV0ZSBzZXZlcmFsIGxpbmVzLgorCSRidWYgZXhwciB7ZXhwcn0JIyBFdmFsdWF0ZSB2aW0gZXhwcmVzc2lvbiBpbiBidWZmZXJzIGNvbnRleHQuCisJJGJ1ZiBnZXQge259CQkjIEdldCBhIHNpbmdsZSBsaW5lIGFzIGEgc3RyaW5nLgorCSRidWYgZ2V0IHtufSB7bX0JIyBHZXQgc2V2ZXJhbCBsaW5lcyBhcyBhIGxpc3QuCisJJGJ1ZiBpbnNlcnQge259IHtzdHJ9CSMgSW5zZXJ0IGEgbGluZSBpbiBidWZmZXIsIGFzIGxpbmUge259LgorCSRidWYgbGFzdAkJIyBSZXBvcnQgbGluZSBudW1iZXIgb2YgbGFzdCBsaW5lIGluIGJ1ZmZlci4KKwkkYnVmIG1hcmsge21hcmt9CSMgUmVwb3J0IHBvc2l0aW9uIG9mIGJ1ZmZlciBtYXJrLgorCSRidWYgbmFtZQkJIyBSZXBvcnQgbmFtZSBvZiBmaWxlIGluIGJ1ZmZlci4KKwkkYnVmIG51bWJlcgkJIyBSZXBvcnQgbnVtYmVyIG9mIHRoaXMgYnVmZmVyLgorCSRidWYgb3B0aW9uIHtvcHR9IFt2YWxdCSMgR2V0L1NldCB2aW0gb3B0aW9uIGluIGJ1ZmZlcnMgY29udGV4dC4KKwkkYnVmIHNldCB7bn0ge3RleHR9CSMgUmVwbGFjZSBhIHNpbmdsZSBsaW5lLgorCSRidWYgc2V0IHtufSB7bX0ge2xpc3R9CSMgUmVwbGFjZSBzZXZlcmFsIGxpbmVzLgorCSRidWYgd2luZG93cwkJIyBDcmVhdGUgVGNsIGNvbW1hbmRzIGZvciBidWZmZXIncyB3aW5kb3dzLgorPAorCQkJCQkJCSp0Y2wtbGluZW51bWJlcnMqCitNb3N0IGJ1ZmZlciBjb21tYW5kcyB0YWtlIGxpbmUgbnVtYmVycyBhcyBhcmd1bWVudHMuICBIb3cgVGNsIHRyZWF0cyB0aGVzZQorbnVtYmVycyBkZXBlbmRzIG9uIHRoZSAiOjp2aW06OmxiYXNlIiB2YXJpYWJsZSAoc2VlIHx0Y2wtdmFyLWxiYXNlfCkuICBJbnN0ZWFkCitvZiBsaW5lIG51bWJlcnMsIHNldmVyYWwga2V5d29yZHMgY2FuIGJlIGFsc28gdXNlZDogInRvcCIsICJzdGFydCIsICJiZWdpbiIsCisiZmlyc3QiLCAiYm90dG9tIiwgImVuZCIgYW5kICJsYXN0Ii4KKworT3B0aW9uczoKKwkkYnVmIGFwcGVuZCB7bn0ge3N0cn0JCQkJKnRjbC1idWZmZXItYXBwZW5kKgorCSRidWYgaW5zZXJ0IHtufSB7c3RyfQkJCQkqdGNsLWJ1ZmZlci1pbnNlcnQqCisJQWRkIGEgbGluZSB0byB0aGUgYnVmZmVyLiAgV2l0aCB0aGUgImluc2VydCIgb3B0aW9uLCB0aGUgc3RyaW5nCisJYmVjb21lcyB0aGUgbmV3IGxpbmUge259LCB3aXRoICJhcHBlbmQiIGl0IGlzIGluc2VydGVkIGFmdGVyIGxpbmUge259LgorCUV4YW1wbGU6ID4KKwkJJGJ1ZiBpbnNlcnQgdG9wICJUaGlzIGlzIHRoZSBiZWdpbm5pbmcuIgorCQkkYnVmIGFwcGVuZCBlbmQgIlRoaXMgaXMgdGhlIGVuZC4iCis8CVRvIGFkZCBhIGxpc3Qgb2YgbGluZXMgdG8gdGhlIGJ1ZmZlciwgdXNlIGEgbG9vcDogPgorCQlmb3JlYWNoIGxpbmUgJGxpc3QgeyAkYnVmIGFwcGVuZCAkbnVtICRsaW5lIDsgaW5jciBudW0gfQorPAorCSRidWYgY291bnQJCQkJCSp0Y2wtYnVmZmVyLWNvdW50KgorCVJlcG9ydHMgdGhlIHRvdGFsIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgYnVmZmVyLgorCisJJGJ1ZiBkZWxjbWQge2NtZH0JCQkJKnRjbC1idWZmZXItZGVsY21kKgorCVJlZ2lzdGVycyB0aGUgVGNsIGNvbW1hbmQge2NtZH0gYXMgYSBkZWxldGlvbiBjYWxsYmFjayBmb3IgdGhlIGJ1ZmZlci4KKwlUaGlzIGNvbW1hbmQgaXMgZXhlY3V0ZWQgKGluIHRoZSBnbG9iYWwgc2NvcGUpIGp1c3QgYmVmb3JlIHRoZSBidWZmZXIKKwlpcyBkZWxldGVkLiAgQ29tcGxleCBjb21tYW5kcyBzaG91bGQgYmUgYnVpbGQgd2l0aCAibGlzdCI6ID4KKwkJJGJ1ZiBkZWxjbWQgW2xpc3QgcHV0cyB2aW1lcnIgImJ1ZmZlciBbJGJ1ZiBudW1iZXJdIGdvbmUiXQorPAlTZWUgYWxzbyB8dGNsLXdpbmRvdy1kZWxjbWR8LgorCisJJGJ1ZiBkZWxldGUge259CQkJCQkqdGNsLWJ1ZmZlci1kZWxldGUqCisJJGJ1ZiBkZWxldGUge259IHttfQorCURlbGV0ZXMgbGluZSB7bn0gb3IgbGluZXMge259IHRocm91Z2gge219IGZyb20gdGhlIGJ1ZmZlci4KKwlUaGlzIGV4YW1wbGUgZGVsZXRlcyBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgbGFzdCBsaW5lOiA+CisJCSRidWYgZGVsZXRlIGZpcnN0IFtleHByIFskYnVmIGxhc3RdIC0gMV0KKzwKKwkkYnVmIGdldCB7bn0JCQkJCSp0Y2wtYnVmZmVyLWdldCoKKwkkYnVmIGdldCB7bn0ge219CisJR2V0cyBvbmUgb3IgbW9yZSBsaW5lcyBmcm9tIHRoZSBidWZmZXIuICBGb3IgYSBzaW5nbGUgbGluZSwgdGhlIHJlc3VsdAorCWlzIGEgc3RyaW5nOyBmb3Igc2V2ZXJhbCBsaW5lcywgYSBsaXN0IG9mIHN0cmluZ3MuCisJRXhhbXBsZTogPgorCQlzZXQgdG9wbGluZSBbJGJ1ZiBnZXQgdG9wXQorPAorCSRidWYgbGFzdAkJCQkJKnRjbC1idWZmZXItbGFzdCoKKwlSZXBvcnRzIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgbGFzdCBsaW5lLiAgVGhpcyB2YWx1ZSBkZXBlbmRzIG9uIHRoZQorCSI6OnZpbTo6bGJhc2UiIHZhcmlhYmxlLiAgU2VlIHx0Y2wtdmFyLWxiYXNlfC4KKworCSRidWYgbWFyayB7bWFya30JCQkJKnRjbC1idWZmZXItbWFyayoKKwlSZXBvcnRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbmFtZWQgbWFyayBhcyBhIHN0cmluZywgc2ltaWxhciB0byB0aGUKKwljdXJzb3IgcG9zaXRpb24gb2YgdGhlICJjdXJzb3IiIG9wdGlvbiBvZiBhIHdpbmRvdyBjb21tYW5kIChzZWUKKwl8dGNsLXdpbmRvdy1jdXJzb3J8KS4gIFRoaXMgY2FuIGJlIGNvbnZlcnRlZCB0byBhIFRjbCBhcnJheSB2YXJpYWJsZTogPgorCQlhcnJheSBzZXQgbXBvcyBbJGJ1ZiBtYXJrICJhIl0KKzwJIm1wb3MoY29sdW1uKSIgYW5kICJtcG9zKHJvdykiIG5vdyBjb250YWluIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWFyay4KKwlJZiB0aGUgbWFyayBpcyBub3Qgc2V0LCBhIHN0YW5kYXJkIFRjbCBlcnJvciByZXN1bHRzLgorCisJJGJ1ZiBuYW1lCisJUmVwb3J0cyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgYnVmZmVyLiAgRm9yIGEgYnVmZmVyIHdpdGhvdXQgYQorCWZpbGUsIHRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nLgorCisJJGJ1ZiBudW1iZXIKKwlSZXBvcnRzIHRoZSBudW1iZXIgb2YgdGhpcyBidWZmZXIuICBTZWUgfDpidWZmZXJzfC4KKwlUaGlzIGV4YW1wbGUgZGVsZXRlcyBhIGJ1ZmZlciBmcm9tIHZpbTogPgorCQk6OnZpbTo6Y29tbWFuZCAiYmRlbGV0ZSBbJGJ1ZiBudW1iZXJdIgorPAorCSRidWYgc2V0IHtufSB7c3RyaW5nfQkJCQkqdGNsLWJ1ZmZlci1zZXQqCisJJGJ1ZiBzZXQge259IHttfSB7bGlzdH0KKwlSZXBsYWNlIG9uZSBvciBzZXZlcmFsIGxpbmVzIGluIHRoZSBidWZmZXIuICBJZiB0aGUgbGlzdCBjb250YWlucyBtb3JlCisJZWxlbWVudHMgdGhhbiB0aGVyZSBhcmUgbGluZXMgdG8gcmVwbGFjZSwgdGhleSBhcmUgaW5zZXJ0ZWQgaW50byB0aGUKKwlidWZmZXIuICBJZiB0aGUgbGlzdCBjb250YWlucyBmZXdlciBlbGVtZW50cywgYW55IHVucmVwbGFjZWQgbGluZSBpcworCWRlbGV0ZWQgZnJvbSB0aGUgYnVmZmVyLgorCisJJGJ1ZiB3aW5kb3dzCQkJCQkqdGNsLWJ1ZmZlci13aW5kb3dzKgorCUNyZWF0ZXMgYSB3aW5kb3cgY29tbWFuZCBmb3IgZWFjaCB3aW5kb3cgdGhhdCBkaXNwbGF5cyB0aGlzIGJ1ZmZlciwgYW5kCisJcmV0dXJucyBhIGxpc3Qgb2YgdGhlIGNvbW1hbmQgbmFtZXMgYXMgdGhlIHJlc3VsdC4KKwlFeGFtcGxlOiA+CisJCXNldCB3aW5saXN0IFskYnVmIHdpbmRvd3NdCisJCWZvcmVhY2ggd2luICR3aW5saXN0IHsgJHdpbiBoZWlnaHQgNCB9Cis8CVNlZSB8dGNsLXdpbmRvdy1jbWRzfCBmb3IgdGhlIGF2YWlsYWJsZSBvcHRpb25zLgorCisJJGJ1ZiBjb21tYW5kIFstcXVpZXRdIHtjbWR9CQkJKnRjbC1idWZmZXItY29tbWFuZCoKKwkkYnVmIGV4cHIge2V4cn0JCQkJCSp0Y2wtYnVmZmVyLWV4cHIqCisJJGJ1ZiBvcHRpb24ge29wdH0gW3ZhbF0JCQkJKnRjbC1idWZmZXItb3B0aW9uKgorCVRoZXNlIGFyZSBzaW1pbGFyIHRvICI6OnZpbTo6Y29tbWFuZCIgZXRjLiwgZXhjZXB0IHRoYXQgZXZlcnl0aGluZyBpcworCWRvbmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJ1ZmZlciByZXByZXNlbnRlZCBieSAkYnVmLCBpbnN0ZWFkIG9mIHRoZQorCWN1cnJlbnQgYnVmZmVyLiAgRm9yIGV4YW1wbGUsIHNldHRpbmcgYW4gb3B0aW9uIHRoYXQgaXMgbWFya2VkICdsb2NhbAorCXRvIGJ1ZmZlcicgYWZmZWN0cyB0aGUgYnVmZmVyICRidWYuICBBbnl0aGluZyB0aGF0IGFmZmVjdHMgb3IgcXVlcmllcworCWEgd2luZG93IHVzZXMgdGhlIGZpcnN0IHdpbmRvdyBpbiB2aW0ncyB3aW5kb3cgbGlzdCB0aGF0IGRpc3BsYXlzIHRoaXMKKwlidWZmZXIgKGkuZS4gdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBsaXN0IHJldHVybmVkIGJ5ICIkYnVmIHdpbmRvd3MiKS4KKwlTZWUgfHRjbC1jb21tYW5kfCwgfHRjbC1leHByfCBhbmQgfHRjbC1vcHRpb258IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCUV4YW1wbGU6ID4KKwkJaWYgeyBbJGJ1ZiBvcHRpb24gbW9kaWZpZWRdIH0geyAkYnVmIGNvbW1hbmQgInciIH0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBNaXNjZWxsYW5lb3VzOyBPdXRwdXQgZnJvbSBUY2wJCSp0Y2wtbWlzYyogKnRjbC1vdXRwdXQqCisKK1RoZSBzdGFuZGFyZCBUY2wgY29tbWFuZHMgImV4aXQiIGFuZCAiY2F0Y2giIGFyZSByZXBsYWNlZCBieSBjdXN0b20gdmVyc2lvbnMuCisiZXhpdCIgdGVybWluYXRlcyB0aGUgY3VycmVudCBUY2wgc2NyaXB0IGFuZCByZXR1cm5zIHRvIHZpbSwgd2hpY2ggZGVsZXRlcyB0aGUKK1RjbCBpbnRlcnByZXRlci4gIEFub3RoZXIgY2FsbCB0byAiOnRjbCIgdGhlbiBjcmVhdGVzIGEgbmV3IFRjbCBpbnRlcnByZXRlci4KKyJleGl0IiBkb2VzIE5PVCB0ZXJtaW5hdGUgdmltISAgImNhdGNoIiB3b3JrcyBhcyBiZWZvcmUsIGV4Y2VwdCB0aGF0IGl0IGRvZXMKK25vdCBwcmV2ZW50IHNjcmlwdCB0ZXJtaW5hdGlvbiBmcm9tICJleGl0Ii4gIEFuIGV4aXQgY29kZSAhPSAwIGNhdXNlcyB0aGUgZXgKK2NvbW1hbmQgdGhhdCBpbnZva2VkIHRoZSBUY2wgc2NyaXB0IHRvIHJldHVybiBhbiBlcnJvci4KKworVHdvIG5ldyBJL08gc3RyZWFtcyBhcmUgYXZhaWxhYmxlIGluIFRjbCwgInZpbW91dCIgYW5kICJ2aW1lcnIiLiAgQWxsIG91dHB1dAorZGlyZWN0ZWQgdG8gdGhlbSBpcyBkaXNwbGF5ZWQgaW4gdGhlIHZpbSBtZXNzYWdlIGFyZWEsIGFzIGluZm9ybWF0aW9uIG1lc3NhZ2VzCithbmQgZXJyb3IgbWVzc2FnZXMsIHJlc3BlY3RpdmVseS4gIFRoZSBzdGFuZGFyZCBUY2wgb3V0cHV0IHN0cmVhbXMgc3Rkb3V0IGFuZAorc3RkZXJyIGFyZSBtYXBwZWQgdG8gdmltb3V0IGFuZCB2aW1lcnIsIHNvIHRoYXQgYSBub3JtYWwgInB1dHMiIGNvbW1hbmQgY2FuIGJlCit1c2VkIHRvIGRpc3BsYXkgbWVzc2FnZXMgaW4gdmltLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIEtub3duIGJ1Z3MgJiBwcm9ibGVtcwkJCQkqdGNsLWJ1Z3MqCisKK0NhbGxpbmcgb25lIG9mIHRoZSBUY2wgZXggY29tbWFuZHMgZnJvbSBpbnNpZGUgVGNsICh2aWEgIjo6dmltOjpjb21tYW5kIikgbWF5CitoYXZlIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLiAgVGhlIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyBpbnRlcnByZXRlciwgd2hpY2gKK2hhcyB0aGUgc2FtZSBhYmlsaXRpZXMgYXMgdGhlIHN0YW5kYXJkIGludGVycHJldGVyIC0gbWFraW5nICI6OnZpbTo6Y29tbWFuZCIKK2F2YWlsYWJsZSBpbiBhIHNhZmUgY2hpbGQgaW50ZXJwcmV0ZXIgdGhlcmVmb3JlIG1ha2VzIHRoZSBjaGlsZCB1bnNhZmUuICAoSXQKK3dvdWxkIGJlIHRyaXZpYWwgdG8gYmxvY2sgbmVzdGVkIDp0Y2wqIGNhbGxzIG9yIGVuc3VyZSB0aGF0IHN1Y2ggY2FsbHMgZnJvbSBhCitzYWZlIGludGVycHJldGVyIGNyZWF0ZSBvbmx5IG5ldyBzYWZlIGludGVycHJldGVycywgYnV0IHF1aXRlIHBvaW50bGVzcyAtCitkZXBlbmRpbmcgb24gdmltJ3MgY29uZmlndXJhdGlvbiwgIjo6dmltOjpjb21tYW5kIiBtYXkgZXhlY3V0ZSBhcmJpdHJhcnkgY29kZQoraW4gYW55IG51bWJlciBvZiBvdGhlciBzY3JpcHRpbmcgbGFuZ3VhZ2VzLikgIEEgY2FsbCB0byAiZXhpdCIgd2l0aGluIHRoaXMgbmV3CitpbnRlcnByZXRlciBkb2VzIG5vdCBhZmZlY3QgdGhlIG9sZCBpbnRlcnByZXRlcjsgaXQgb25seSB0ZXJtaW5hdGVzIHRoZSBuZXcKK2ludGVycHJldGVyLCB0aGVuIHNjcmlwdCBwcm9jZXNzaW5nIGNvbnRpbnVlcyBub3JtYWxseSBpbiB0aGUgb2xkIGludGVycHJldGVyLgorCitJbnB1dCBmcm9tIHN0ZGluIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIEV4YW1wbGVzOgkJCQkJCSp0Y2wtZXhhbXBsZXMqCisKK0hlcmUgYXJlIGEgZmV3IHNtYWxsIChhbmQgbWF5YmUgdXNlZnVsKSBUY2wgc2NyaXB0cy4KKworVGhpcyBzY3JpcHQgc29ydHMgdGhlIGxpbmVzIG9mIHRoZSBlbnRpcmUgYnVmZmVyIChhc3N1bWUgaXQgY29udGFpbnMgYSBsaXN0CitvZiBuYW1lcyBvciBzb21ldGhpbmcgc2ltaWxhcik6CisJc2V0IGJ1ZiAkOjp2aW06OmN1cnJlbnQoYnVmZmVyKQorCXNldCBsaW5lcyBbJGJ1ZiBnZXQgdG9wIGJvdHRvbV0KKwlzZXQgbGluZXMgW2xzb3J0IC1kaWN0aW9uYXJ5ICRsaW5lc10KKwkkYnVmIHNldCB0b3AgYm90dG9tICRsaW5lcworCitUaGlzIHNjcmlwdCByZXZlcnNlcyB0aGUgbGluZXMgaW4gdGhlIGJ1ZmZlci4gIE5vdGUgdGhlIHVzZSBvZiAiOjp2aW06OmxiYXNlIgorYW5kICIkYnVmIGxhc3QiIHRvIHdvcmsgd2l0aCBhbnkgbGluZSBudW1iZXIgc2V0dGluZy4KKwlzZXQgYnVmICQ6OnZpbTo6Y3VycmVudChidWZmZXIpCisJc2V0IHQgJDo6dmltOjpsYmFzZQorCXNldCBiIFskYnVmIGxhc3RdCisJd2hpbGUgeyAkdCA8ICRiIH0geworCQlzZXQgdGwgWyRidWYgZ2V0ICR0XQorCQlzZXQgYmwgWyRidWYgZ2V0ICRiXQorCQkkYnVmIHNldCAkdCAkYmwKKwkJJGJ1ZiBzZXQgJGIgJHRsCisJCWluY3IgdAorCQlpbmNyIGIgLTEKKwl9CisKK1RoaXMgc2NyaXB0IGFkZHMgYSBjb25zZWN1dGl2ZSBudW1iZXIgdG8gZWFjaCBsaW5lIGluIHRoZSBjdXJyZW50IHJhbmdlOgorCXNldCBidWYgJDo6dmltOjpjdXJyZW50KGJ1ZmZlcikKKwlzZXQgaSAkOjp2aW06OnJhbmdlKHN0YXJ0KQorCXNldCBuIDEKKwl3aGlsZSB7ICRpIDw9ICQ6OnZpbTo6cmFuZ2UoZW5kKSB9IHsKKwkJc2V0IGxpbmUgWyRidWYgZ2V0ICRpXQorCQkkYnVmIHNldCAkaSAiJG5cdCRsaW5lIgorCQlpbmNyIGkgOyBpbmNyIG4KKwl9CisKK1RoZSBzYW1lIGNhbiBhbHNvIGJlIGRvbmUgcXVpY2tseSB3aXRoIHR3byBleCBjb21tYW5kcywgdXNpbmcgIjp0Y2xkbyI6CisJOnRjbCBzZXQgbiAxCisJOltyYW5nZV10Y2xkbyBzZXQgbGluZSAiJG5cdCRsaW5lIiA7IGluY3IgbgorCitUaGlzIHByb2NlZHVyZSBydW5zIGFuIGV4IGNvbW1hbmQgb24gZWFjaCBidWZmZXIgKGlkZWEgc3RvbGVuIGZyb20gUm9uIEFhcm9uKToKKwlwcm9jIGVhY2hidWYgeyBjbWQgfSB7CisJCWZvcmVhY2ggYiBbOjp2aW06OmJ1ZmZlciBsaXN0XSB7CisJCQkkYiBjb21tYW5kICRjbWQKKwkJfQorCX0KK1VzZSBpdCBsaWtlIHRoaXM6CisJOnRjbCBlYWNoYnVmICVzL2Zvby9iYXIvZworQmUgY2FyZWZ1bCB3aXRoIFRjbCdzIHN0cmluZyBhbmQgYmFja3NsYXNoIHN1YnN0aXR1dGlvbiwgdG91Z2guIElmIGluIGRvdWJ0LAorc3Vycm91bmQgdGhlIGV4IGNvbW1hbmQgd2l0aCBjdXJseSBicmFjZXMuCisKKworSWYgeW91IHdhbnQgdG8gYWRkIHNvbWUgVGNsIHByb2NlZHVyZXMgcGVybWFuZW50bHkgdG8gdmltLCBqdXN0IHBsYWNlIHRoZW0gaW4KK2EgZmlsZSAoZS5nLiAifi8udmltcmMudGNsIiBvbiBVbml4IG1hY2hpbmVzKSwgYW5kIGFkZCB0aGVzZSBsaW5lcyB0byB5b3VyCitzdGFydHVwIGZpbGUgKHVzdWFsbHkgIn4vLnZpbXJjIiBvbiBVbml4KToKKwlpZiBoYXMoInRjbCIpCisJCXRjbGZpbGUgfi8udmltcmMudGNsCisJZW5kaWYKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaW5kZW50LnR4dCBiL3J1bnRpbWUvZG9jL2luZGVudC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM1Y2U1NAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2luZGVudC50eHQKQEAgLTAsMCArMSw1MjIgQEAKKyppbmRlbnQudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBBcHIgMjUKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitUaGlzIGZpbGUgaXMgYWJvdXQgaW5kZW50aW5nIEMgcHJvZ3JhbXMgYW5kIG90aGVyIGZpbGVzLgorCisxLiBJbmRlbnRpbmcgQyBwcm9ncmFtcwkJfEMtaW5kZW50aW5nfAorMi4gSW5kZW50aW5nIGJ5IGV4cHJlc3Npb24JfGluZGVudC1leHByZXNzaW9ufAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEluZGVudGluZyBDIHByb2dyYW1zCQkJCQkqQy1pbmRlbnRpbmcqCisKK1RoZSBiYXNpY3MgZm9yIEMgaW5kZW50aW5nIGFyZSBleHBsYWluZWQgaW4gc2VjdGlvbiB8MzAuMnwgb2YgdGhlIHVzZXIgbWFudWFsLgorCitWaW0gaGFzIG9wdGlvbnMgZm9yIGF1dG9tYXRpY2FsbHkgaW5kZW50aW5nIEMgcHJvZ3JhbSBmaWxlcy4gIFRoZXNlIG9wdGlvbnMKK2FmZmVjdCBvbmx5IHRoZSBpbmRlbnQgYW5kIGRvIG5vdCBwZXJmb3JtIG90aGVyIGZvcm1hdHRpbmcuICBGb3IgY29tbWVudAorZm9ybWF0dGluZywgc2VlIHxmb3JtYXQtY29tbWVudHN8LgorCitOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCB3b3JrIHdoZW4gdGhlIHwrc21hcnRpbmRlbnR8IG9yIHwrY2luZGVudHwgZmVhdHVyZXMKK2hhdmUgYmVlbiBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCisKK1RoZXJlIGFyZSBpbiBmYWN0IGZvdXIgbWV0aG9kcyBhdmFpbGFibGUgZm9yIGluZGVudGF0aW9uOgorJ2F1dG9pbmRlbnQnCXVzZXMgdGhlIGluZGVudCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lLgorJ3NtYXJ0aW5kZW50JwlpcyBsaWtlICdhdXRvaW5kZW50JyBidXQgYWxzbyByZWNvZ25pemVzIHNvbWUgQyBzeW50YXggdG8KKwkJaW5jcmVhc2UvcmVkdWNlIHRoZSBpbmRlbnQgd2hlcmUgYXBwcm9wcmlhdGUuCisnY2luZGVudCcJV29ya3MgbW9yZSBjbGV2ZXJseSB0aGFuIHRoZSBvdGhlciB0d28gYW5kIGlzIGNvbmZpZ3VyYWJsZSB0bworCQlkaWZmZXJlbnQgaW5kZW50aW5nIHN0eWxlcy4KKydpbmRlbnRleHByJwlUaGUgbW9zdCBmbGV4aWJsZSBvZiBhbGw6IEV2YWx1YXRlcyBhbiBleHByZXNzaW9uIHRvIGNvbXB1dGUKKwkJdGhlIGluZGVudCBvZiBhIGxpbmUuICBXaGVuIG5vbi1lbXB0eSB0aGlzIG1ldGhvZCBvdmVycmlkZXMKKwkJdGhlIG90aGVyIG9uZXMuICBTZWUgfGluZGVudC1leHByZXNzaW9ufC4KK1RoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlICdjaW5kZW50JyBvcHRpb24uCisKK05vdGUgdGhhdCAnY2luZGVudCcgaW5kZW50aW5nIGRvZXMgbm90IHdvcmsgZm9yIGV2ZXJ5IGNvZGUgc2NlbmFyaW8uICBWaW0KK2lzIG5vdCBhIEMgY29tcGlsZXI6IGl0IGRvZXMgbm90IHJlY29nbml6ZSBhbGwgc3ludGF4LgorCitUaGVzZSBmb3VyIG9wdGlvbnMgY29udHJvbCBDIHByb2dyYW0gaW5kZW50aW5nOgorJ2NpbmRlbnQnCUVuYWJsZXMgVmltIHRvIHBlcmZvcm0gQyBwcm9ncmFtIGluZGVudGluZyBhdXRvbWF0aWNhbGx5LgorJ2NpbmtleXMnCVNwZWNpZmllcyB3aGljaCBrZXlzIHRyaWdnZXIgcmVpbmRlbnRpbmcgaW4gaW5zZXJ0IG1vZGUuCisnY2lub3B0aW9ucycJU2V0cyB5b3VyIHByZWZlcnJlZCBpbmRlbnQgc3R5bGUuCisnY2lud29yZHMnCURlZmluZXMga2V5d29yZHMgdGhhdCBzdGFydCBhbiBleHRyYSBpbmRlbnQgaW4gdGhlIG5leHQgbGluZS4KKworSWYgJ2xpc3AnIGlzIG5vdCBvbiBhbmQgJ2VxdWFscHJnJyBpcyBlbXB0eSwgdGhlICI9IiBvcGVyYXRvciBpbmRlbnRzIHVzaW5nCitWaW0ncyBidWlsdC1pbiBhbGdvcml0aG0gcmF0aGVyIHRoYW4gY2FsbGluZyBhbiBleHRlcm5hbCBwcm9ncmFtLgorCitTZWUgfGF1dG9jb21tYW5kfCBmb3IgaG93IHRvIHNldCB0aGUgJ2NpbmRlbnQnIG9wdGlvbiBhdXRvbWF0aWNhbGx5IGZvciBDIGNvZGUKK2ZpbGVzIGFuZCByZXNldCBpdCBmb3Igb3RoZXJzLgorCisJCQkJCSpjaW5rZXlzLWZvcm1hdCogKmluZGVudGtleXMtZm9ybWF0KgorVGhlICdjaW5rZXlzJyBvcHRpb24gaXMgYSBzdHJpbmcgdGhhdCBjb250cm9scyBWaW0ncyBpbmRlbnRpbmcgaW4gcmVzcG9uc2UgdG8KK3R5cGluZyBjZXJ0YWluIGNoYXJhY3RlcnMgb3IgY29tbWFuZHMgaW4gY2VydGFpbiBjb250ZXh0cy4gIE5vdGUgdGhhdCB0aGlzIG5vdAorb25seSB0cmlnZ2VycyBDLWluZGVudGluZy4gIFdoZW4gJ2luZGVudGV4cHInIGlzIG5vdCBlbXB0eSAnaW5kZW50a2V5cycgaXMKK3VzZWQgaW5zdGVhZC4gIFRoZSBmb3JtYXQgb2YgJ2NpbmtleXMnIGFuZCAnaW5kZW50a2V5cycgaXMgZXF1YWwuCisKK1RoZSBkZWZhdWx0IGlzICIweywwfSwwKSw6LDAjLCFeRixvLE8sZSIgd2hpY2ggc3BlY2lmaWVzIHRoYXQgaW5kZW50aW5nIG9jY3VycworYXMgZm9sbG93czoKKworCSIweyIJaWYgeW91IHR5cGUgJ3snIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBsaW5lCisJIjB9IglpZiB5b3UgdHlwZSAnfScgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBhIGxpbmUKKwkiMCkiCWlmIHlvdSB0eXBlICcpJyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGEgbGluZQorCSI6IglpZiB5b3UgdHlwZSAnOicgYWZ0ZXIgYSBsYWJlbCBvciBjYXNlIHN0YXRlbWVudAorCSIwIyIJaWYgeW91IHR5cGUgJyMnIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBsaW5lCisJIiFeRiIJaWYgeW91IHR5cGUgQ1RSTC1GICh3aGljaCBpcyBub3QgaW5zZXJ0ZWQpCisJIm8iCWlmIHlvdSB0eXBlIGEgPENSPiBhbnl3aGVyZSBvciB1c2UgdGhlICJvIiBjb21tYW5kIChub3QgaW4KKwkJaW5zZXJ0IG1vZGUhKQorCSJPIglpZiB5b3UgdXNlIHRoZSAiTyIgY29tbWFuZCAobm90IGluIGluc2VydCBtb2RlISkKKwkiZSIJaWYgeW91IHR5cGUgdGhlIHNlY29uZCAnZScgZm9yIGFuICJlbHNlIiBhdCB0aGUgc3RhcnQgb2YgYQorCQlsaW5lCisKK0NoYXJhY3RlcnMgdGhhdCBjYW4gcHJlY2VkZSBlYWNoIGtleToKKyEJV2hlbiBhICchJyBwcmVjZWRlcyB0aGUga2V5LCBWaW0gd2lsbCBub3QgaW5zZXJ0IHRoZSBrZXkgYnV0IHdpbGwKKwlpbnN0ZWFkIHJlaW5kZW50IHRoZSBjdXJyZW50IGxpbmUuICBUaGlzIGFsbG93cyB5b3UgdG8gZGVmaW5lIGEKKwljb21tYW5kIGtleSBmb3IgcmVpbmRlbnRpbmcgdGhlIGN1cnJlbnQgbGluZS4gIENUUkwtRiBpcyB0aGUgZGVmYXVsdAorCWtleSBmb3IgdGhpcy4gIEJlIGNhcmVmdWwgaWYgeW91IGRlZmluZSBDVFJMLUkgZm9yIHRoaXMgYmVjYXVzZSBDVFJMLUkKKwlpcyB0aGUgQVNDSUkgY29kZSBmb3IgPFRhYj4uCisqCVdoZW4gYSAnKicgcHJlY2VkZXMgdGhlIGtleSwgVmltIHdpbGwgcmVpbmRlbnQgdGhlIGxpbmUgYmVmb3JlCisJaW5zZXJ0aW5nIHRoZSBrZXkuICBJZiAnY2lua2V5cycgY29udGFpbnMgIio8UmV0dXJuPiIsIFZpbSByZWluZGVudHMKKwl0aGUgY3VycmVudCBsaW5lIGJlZm9yZSBvcGVuaW5nIGEgbmV3IGxpbmUuCiswCVdoZW4gYSB6ZXJvIHByZWNlZGVzIHRoZSBrZXkgKGJ1dCBhcHBlYXJzIGFmdGVyICchJyBvciAnKicpIFZpbSB3aWxsCisJcmVpbmRlbnQgdGhlIGxpbmUgb25seSBpZiB0aGUga2V5IGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgeW91IHR5cGUgaW4KKwl0aGUgbGluZS4gIFdoZW4gdXNlZCBiZWZvcmUgIj0iIFZpbSB3aWxsIG9ubHkgcmVpbmRlbnQgdGhlIGxpbmUgaWYKKwl0aGVyZSBpcyBvbmx5IHdoaXRlIHNwYWNlIGJlZm9yZSB0aGUgd29yZC4KKworV2hlbiBuZWl0aGVyICchJyBub3IgJyonIHByZWNlZGVzIHRoZSBrZXksIFZpbSByZWluZGVudHMgdGhlIGxpbmUgYWZ0ZXIgeW91Cit0eXBlIHRoZSBrZXkuICBTbyAnOycgc2V0cyB0aGUgaW5kZW50YXRpb24gb2YgYSBsaW5lIHdoaWNoIGluY2x1ZGVzIHRoZSAnOycuCisKK1NwZWNpYWwga2V5IG5hbWVzOgorPD4JQW5nbGUgYnJhY2tldHMgbWVhbiBzcGVsbGVkLW91dCBuYW1lcyBvZiBrZXlzLiAgRm9yIGV4YW1wbGU6ICI8VXA+IiwKKwkiPElucz4iIChzZWUgfGtleS1ub3RhdGlvbnwpLgorXglMZXR0ZXJzIHByZWNlZGVkIGJ5IGEgY2FyZXQgKF4pIGFyZSBjb250cm9sIGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZToKKwkiXkYiIGlzIENUUkwtRi4KK28JUmVpbmRlbnQgYSBsaW5lIHdoZW4geW91IHVzZSB0aGUgIm8iIGNvbW1hbmQgb3Igd2hlbiBWaW0gb3BlbnMgYSBuZXcKKwlsaW5lIGJlbG93IHRoZSBjdXJyZW50IG9uZSAoZS5nLiwgd2hlbiB5b3UgdHlwZSA8RW50ZXI+IGluIGluc2VydAorCW1vZGUpLgorTwlSZWluZGVudCBhIGxpbmUgd2hlbiB5b3UgdXNlIHRoZSAiTyIgY29tbWFuZC4KK2UJUmVpbmRlbnQgYSBsaW5lIHRoYXQgc3RhcnRzIHdpdGggImVsc2UiIHdoZW4geW91IHR5cGUgdGhlIHNlY29uZCAnZScuCis6CVJlaW5kZW50IGEgbGluZSB3aGVuIGEgJzonIGlzIHR5cGVkIHdoaWNoIGlzIGFmdGVyIGEgbGFiZWwgb3IgY2FzZQorCXN0YXRlbWVudC4gIERvbid0IHJlaW5kZW50IGZvciBhICI6IiBpbiAiY2xhc3M6Om1ldGhvZCIgZm9yIEMrKy4gIFRvCisJUmVpbmRlbnQgZm9yIGFueSAiOiIsIHVzZSAiPDo+Ii4KKz13b3JkCVJlaW5kZW50IHdoZW4gdHlwaW5nIHRoZSBsYXN0IGNoYXJhY3RlciBvZiAid29yZCIuICAid29yZCIgbWF5CisJYWN0dWFsbHkgYmUgcGFydCBvZiBhbm90aGVyIHdvcmQuICBUaHVzICI9ZW5kIiB3b3VsZCBjYXVzZSByZWluZGVudGluZworCXdoZW4gdHlwaW5nIHRoZSAiZCIgaW4gImVuZGlmIiBvciAiZW5kd2hpbGUiLiAgQnV0IG5vdCB3aGVuIHR5cGluZworCSJiZW5kIi4gIEFsc28gcmVpbmRlbnQgd2hlbiBjb21wbGV0aW9uIHByb2R1Y2VzIGEgd29yZCB0aGF0IHN0YXJ0cworCXdpdGggIndvcmQiLiAgIjA9d29yZCIgcmVpbmRlbnRzIHdoZW4gdGhlcmUgaXMgb25seSB3aGl0ZSBzcGFjZSBiZWZvcmUKKwl0aGUgd29yZC4KKz1+d29yZAlMaWtlID13b3JkLCBidXQgaWdub3JlIGNhc2UuCisKK0lmIHlvdSByZWFsbHkgd2FudCB0byByZWluZGVudCB3aGVuIHlvdSB0eXBlICdvJywgJ08nLCAnZScsICcwJywgJzwnLCAnPicsCisnKicsICc6JyBvciAnIScsIHVzZSAiPG8+IiwgIjxPPiIsICI8ZT4iLCAiPDA+IiwgIjw8PiIsICI8Pj4iLCAiPCo+IiwgIjw6PiIgb3IKKyI8IT4iLCByZXNwZWN0aXZlbHksIGZvciB0aG9zZSBrZXlzLgorCitGb3IgYW4gZW1hY3Mtc3R5bGUgaW5kZW50IG1vZGUgd2hlcmUgbGluZXMgYXJlbid0IGluZGVudGVkIGV2ZXJ5IHRpbWUgeW91CitwcmVzcyBFbnRlciBidXQgb25seSBpZiB5b3UgcHJlc3MgVGFiLCBJIHN1Z2dlc3Q6CisJOnNldCBjaW5rZXlzPTB7LDB9LDosMCMsITxUYWI+LCFeRgorWW91IG1pZ2h0IGFsc28gd2FudCB0byBzd2l0Y2ggb2ZmICdhdXRvaW5kZW50JyB0aGVuLgorCitOb3RlOiBJZiB5b3UgY2hhbmdlIHRoZSBjdXJyZW50IGxpbmUncyBpbmRlbnRhdGlvbiBtYW51YWxseSwgVmltIGlnbm9yZXMgdGhlCitjaW5kZW50IHNldHRpbmdzIGZvciB0aGF0IGxpbmUuICBUaGlzIHByZXZlbnRzIHZpbSBmcm9tIHJlaW5kZW50aW5nIGFmdGVyIHlvdQoraGF2ZSBjaGFuZ2VkIHRoZSBpbmRlbnQgYnkgdHlwaW5nIDxCUz4sIDxUYWI+LCBvciA8U3BhY2U+IGluIHRoZSBpbmRlbnQgb3IKK3VzZWQgQ1RSTC1UIG9yIENUUkwtRC4KKworCQkJCQkJKmNpbm9wdGlvbnMtdmFsdWVzKgorVGhlICdjaW5vcHRpb25zJyBvcHRpb24gc2V0cyBob3cgVmltIHBlcmZvcm1zIGluZGVudGF0aW9uLiAgSW4gdGhlIGxpc3QgYmVsb3csCisiTiIgcmVwcmVzZW50cyBhIG51bWJlciBvZiB5b3VyIGNob2ljZSAodGhlIG51bWJlciBjYW4gYmUgbmVnYXRpdmUpLiAgV2hlbgordGhlcmUgaXMgYW4gJ3MnIGFmdGVyIHRoZSBudW1iZXIsIFZpbSBtdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgJ3NoaWZ0d2lkdGgnOgorIjFzIiBpcyAnc2hpZnR3aWR0aCcsICIycyIgaXMgdHdvIHRpbWVzICdzaGlmdHdpZHRoJywgZXRjLiAgWW91IGNhbiB1c2UgYQorZGVjaW1hbCBwb2ludCwgdG9vOiAiLTAuNXMiIGlzIG1pbnVzIGhhbGYgYSAnc2hpZnR3aWR0aCcuICBUaGUgZXhhbXBsZXMgYmVsb3cKK2Fzc3VtZSBhICdzaGlmdHdpZHRoJyBvZiA0LgorCisJPk4gICAgQW1vdW50IGFkZGVkIGZvciAibm9ybWFsIiBpbmRlbnQuICBVc2VkIGFmdGVyIGEgbGluZSB0aGF0IHNob3VsZAorCSAgICAgIGluY3JlYXNlIHRoZSBpbmRlbnQgKGxpbmVzIHN0YXJ0aW5nIHdpdGggImlmIiwgYW4gb3BlbmluZyBicmFjZSwKKwkgICAgICBldGMuKS4gIChkZWZhdWx0ICdzaGlmdHdpZHRoJykuCisKKwkJY2lubz0JCSAgICBjaW5vPT4yCQljaW5vPT4ycyA+CisJCSAgaWYgKGNvbmQpCSAgICAgIGlmIChjb25kKQkJICBpZiAoY29uZCkKKwkJICB7CQkgICAgICB7CQkJICB7CisJCSAgICAgIGZvbzsJCWZvbzsJCQkgIGZvbzsKKwkJICB9CQkgICAgICB9CQkJICB9Cis8CisJZU4gICAgQWRkIE4gdG8gdGhlIHByZXZhaWxpbmcgaW5kZW50IGluc2lkZSBhIHNldCBvZiBicmFjZXMgaWYgdGhlCisJICAgICAgb3BlbmluZyBicmFjZSBhdCB0aGUgRW5kIG9mIHRoZSBsaW5lIChtb3JlIHByZWNpc2U6IGlzIG5vdCB0aGUKKwkgICAgICBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBsaW5lKS4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IGEKKwkgICAgICBkaWZmZXJlbnQgaW5kZW50IHdoZW4gdGhlICd7JyBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgZnJvbQorCSAgICAgIHdoZW4gJ3snIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuICAoZGVmYXVsdCAwKS4KKworCQljaW5vPQkJICAgIGNpbm89ZTIJCWNpbm89ZS0yID4KKwkJICBpZiAoY29uZCkgewkgICAgICBpZiAoY29uZCkgewkgIGlmIChjb25kKSB7CisJCSAgICAgIGZvbzsJCSAgICBmb287CSAgICBmb287CisJCSAgfQkJICAgICAgfQkJCSAgfQorCQkgIGVsc2UJCSAgICAgIGVsc2UJCSAgZWxzZQorCQkgIHsJCSAgICAgIHsJCQkgIHsKKwkJICAgICAgYmFyOwkJICBiYXI7CQkgICAgICBiYXI7CisJCSAgfQkJICAgICAgfQkJCSAgfQorPAorCW5OICAgIEFkZCBOIHRvIHRoZSBwcmV2YWlsaW5nIGluZGVudCBmb3IgYSBzdGF0ZW1lbnQgYWZ0ZXIgYW4gImlmIiwKKwkgICAgICAid2hpbGUiLCBldGMuLCBpZiBpdCBpcyBOT1QgaW5zaWRlIGEgc2V0IG9mIGJyYWNlcy4gIFRoaXMgaXMKKwkgICAgICB1c2VmdWwgaWYgeW91IHdhbnQgYSBkaWZmZXJlbnQgaW5kZW50IHdoZW4gdGhlcmUgaXMgbm8gJ3snCisJICAgICAgYmVmb3JlIHRoZSBzdGF0ZW1lbnQgZnJvbSB3aGVuIHRoZXJlIGlzIGEgJ3snIGJlZm9yZSBpdC4KKwkgICAgICAoZGVmYXVsdCAwKS4KKworCQljaW5vPQkJICAgIGNpbm89bjIJCWNpbm89bi0yID4KKwkJICBpZiAoY29uZCkJICAgICAgaWYgKGNvbmQpCQkgIGlmIChjb25kKQorCQkgICAgICBmb287CQkgICAgZm9vOwkgICAgZm9vOworCQkgIGVsc2UJCSAgICAgIGVsc2UJCSAgZWxzZQorCQkgIHsJCSAgICAgIHsJCQkgIHsKKwkJICAgICAgYmFyOwkJICBiYXI7CQkgICAgICBiYXI7CisJCSAgfQkJICAgICAgfQkJCSAgfQorPAorCWZOICAgIFBsYWNlIHRoZSBmaXJzdCBvcGVuaW5nIGJyYWNlIG9mIGEgZnVuY3Rpb24gb3Igb3RoZXIgYmxvY2sgaW4KKwkgICAgICBjb2x1bW4gTi4gIFRoaXMgYXBwbGllcyBvbmx5IGZvciBhbiBvcGVuaW5nIGJyYWNlIHRoYXQgaXMgbm90CisJICAgICAgaW5zaWRlIG90aGVyIGJyYWNlcyBhbmQgaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiAgV2hhdCBjb21lcworCSAgICAgIGFmdGVyIHRoZSBicmFjZSBpcyBwdXQgcmVsYXRpdmUgdG8gdGhpcyBicmFjZS4gIChkZWZhdWx0IDApLgorCisJCWNpbm89CQkgICAgY2lubz1mLjVzCQljaW5vPWYxcyA+CisJCSAgZnVuYygpCSAgICAgIGZ1bmMoKQkJICBmdW5jKCkKKwkJICB7CQkJewkJICAgICAgeworCQkgICAgICBpbnQgZm9vOwkJICAgIGludCBmb287CQkgIGludCBmb287Cis8CisJe04gICAgUGxhY2Ugb3BlbmluZyBicmFjZXMgTiBjaGFyYWN0ZXJzIGZyb20gdGhlIHByZXZhaWxpbmcgaW5kZW50LgorCSAgICAgIFRoaXMgYXBwbGllcyBvbmx5IGZvciBvcGVuaW5nIGJyYWNlcyB0aGF0IGFyZSBpbnNpZGUgb3RoZXIKKwkgICAgICBicmFjZXMuICAoZGVmYXVsdCAwKS4KKworCQljaW5vPQkJICAgIGNpbm89ey41cwkJY2lubz17MXMgPgorCQkgIGlmIChjb25kKQkgICAgICBpZiAoY29uZCkJCSAgaWYgKGNvbmQpCisJCSAgewkJCXsJCSAgICAgIHsKKwkJICAgICAgZm9vOwkJICBmb287CQkgICAgICBmb287Cis8CisJfU4gICAgUGxhY2UgY2xvc2luZyBicmFjZXMgTiBjaGFyYWN0ZXJzIGZyb20gdGhlIG1hdGNoaW5nIG9wZW5pbmcKKwkgICAgICBicmFjZS4gIChkZWZhdWx0IDApLgorCisJCWNpbm89CQkgICAgY2lubz17Mix9LTAuNXMJY2lubz19MiA+CisJCSAgaWYgKGNvbmQpCSAgICAgIGlmIChjb25kKQkJICBpZiAoY29uZCkKKwkJICB7CQkJewkJICB7CisJCSAgICAgIGZvbzsJCSAgZm9vOwkJICAgICAgZm9vOworCQkgIH0JCSAgICAgIH0JCQkgICAgfQorPAorCV5OICAgIEFkZCBOIHRvIHRoZSBwcmV2YWlsaW5nIGluZGVudCBpbnNpZGUgYSBzZXQgb2YgYnJhY2VzIGlmIHRoZQorCSAgICAgIG9wZW5pbmcgYnJhY2UgaXMgaW4gY29sdW1uIDAuICBUaGlzIGNhbiBzcGVjaWZ5IGEgZGlmZmVyZW50CisJICAgICAgaW5kZW50IGZvciB3aG9sZSBvZiBhIGZ1bmN0aW9uIChzb21lIG1heSBsaWtlIHRvIHNldCBpdCB0byBhCisJICAgICAgbmVnYXRpdmUgbnVtYmVyKS4gIChkZWZhdWx0IDApLgorCisJCWNpbm89CQkgICAgY2lubz1eLTIJCWNpbm89Xi1zID4KKwkJICBmdW5jKCkJICAgICAgZnVuYygpCQkgIGZ1bmMoKQorCQkgIHsJCSAgICAgIHsJCQkgIHsKKwkJICAgICAgaWYgKGNvbmQpCQlpZiAoY29uZCkJICBpZiAoY29uZCkKKwkJICAgICAgewkJCXsJCSAgeworCQkJICBhID0gYjsJICAgIGEgPSBiOwkgICAgICBhID0gYjsKKwkJICAgICAgfQkJCX0JCSAgfQorCQkgIH0JCSAgICAgIH0JCQkgIH0KKzwKKwk6TiAgICBQbGFjZSBjYXNlIGxhYmVscyBOIGNoYXJhY3RlcnMgZnJvbSB0aGUgaW5kZW50IG9mIHRoZSBzd2l0Y2goKS4KKwkgICAgICAoZGVmYXVsdCAnc2hpZnR3aWR0aCcpLgorCisJCWNpbm89CQkgICAgY2lubz06MCA+CisJCSAgc3dpdGNoICh4KQkgICAgICBzd2l0Y2goeCkKKwkJICB7CQkgICAgICB7CisJCSAgICAgIGNhc2UgMToJICAgICAgY2FzZSAxOgorCQkJICBhID0gYjsJICBhID0gYjsKKwkJICAgICAgZGVmYXVsdDoJICAgICAgZGVmYXVsdDoKKwkJICB9CQkgICAgICB9Cis8CisJPU4gICAgUGxhY2Ugc3RhdGVtZW50cyBvY2N1cnJpbmcgYWZ0ZXIgYSBjYXNlIGxhYmVsIE4gY2hhcmFjdGVycyBmcm9tCisJICAgICAgdGhlIGluZGVudCBvZiB0aGUgbGFiZWwuICAoZGVmYXVsdCAnc2hpZnR3aWR0aCcpLgorCisJCWNpbm89CQkgICAgY2lubz09MTAgPgorCQkgICBjYXNlIDExOgkJY2FzZSAxMTogIGEgPSBhICsgMTsKKwkJICAgICAgIGEgPSBhICsgMTsJCSAgYiA9IGIgKyAxOworPAorCWxOICAgIElmIE4gIT0gMCBWaW0gd2lsbCBhbGlnbiB3aXRoIGEgY2FzZSBsYWJlbCBpbnN0ZWFkIG9mIHRoZQorCSAgICAgIHN0YXRlbWVudCBhZnRlciBpdCBpbiB0aGUgc2FtZSBsaW5lLgorCisJCWNpbm89CQkJICAgIGNpbm89bDEgPgorCQkgICAgc3dpdGNoIChhKSB7CSAgICAgIHN3aXRjaCAoYSkgeworCQkJY2FzZSAxOiB7CQkgIGNhc2UgMTogeworCQkJCSAgICBicmVhazsJICAgICAgYnJlYWs7CisJCQkJfQkJICB9Cis8CisJYk4gICAgSWYgTiAhPSAwIFZpbSB3aWxsIGFsaWduIGEgZmluYWwgImJyZWFrIiB3aXRoIHRoZSBjYXNlIGxhYmVsLAorCSAgICAgIHNvIHRoYXQgY2FzZS4uYnJlYWsgbG9va3MgbGlrZSBhIHNvcnQgb2YgYmxvY2suIChkZWZhdWx0OiAwKS4KKworCQljaW5vPQkJICAgIGNpbm89YjEgPgorCQkgIHN3aXRjaCAoeCkJICAgICAgc3dpdGNoKHgpCisJCSAgewkJICAgICAgeworCQkgICAgICBjYXNlIDE6CQkgIGNhc2UgMToKKwkJCSAgYSA9IGI7CSAgICAgIGEgPSBiOworCQkJICBicmVhazsJICBicmVhazsKKworCQkgICAgICBkZWZhdWx0OgkJICBkZWZhdWx0OgorCQkJICBhID0gMDsJICAgICAgYSA9IDA7CisJCQkgIGJyZWFrOwkgIGJyZWFrOworCQkgIH0JCSAgICAgIH0KKzwKKwlnTiAgICBQbGFjZSBDKysgc2NvcGUgZGVjbGFyYXRpb25zIE4gY2hhcmFjdGVycyBmcm9tIHRoZSBpbmRlbnQgb2YgdGhlCisJICAgICAgYmxvY2sgdGhleSBhcmUgaW4uICAoZGVmYXVsdCAnc2hpZnR3aWR0aCcpLiAgQSBzY29wZSBkZWNsYXJhdGlvbgorCSAgICAgIGNhbiBiZSAicHVibGljOiIsICJwcm90ZWN0ZWQ6IiBvciAicHJpdmF0ZToiLgorCisJCWNpbm89CQkgICAgY2lubz1nMCA+CisJCSAgewkJICAgICAgeworCQkgICAgICBwdWJsaWM6CSAgICAgIHB1YmxpYzoKKwkJCSAgYSA9IGI7CSAgYSA9IGI7CisJCSAgICAgIHByaXZhdGU6CSAgICAgIHByaXZhdGU6CisJCSAgfQkJICAgICAgfQorPAorCWhOICAgIFBsYWNlIHN0YXRlbWVudHMgb2NjdXJyaW5nIGFmdGVyIGEgQysrIHNjb3BlIGRlY2xhcmF0aW9uIE4KKwkgICAgICBjaGFyYWN0ZXJzIGZyb20gdGhlIGluZGVudCBvZiB0aGUgbGFiZWwuICAoZGVmYXVsdAorCSAgICAgICdzaGlmdHdpZHRoJykuCisKKwkJY2lubz0JCSAgICBjaW5vPWgxMCA+CisJCSAgIHB1YmxpYzoJCXB1YmxpYzogICBhID0gYSArIDE7CisJCSAgICAgICBhID0gYSArIDE7CQkgIGIgPSBiICsgMTsKKzwKKwlwTiAgICBQYXJhbWV0ZXIgZGVjbGFyYXRpb25zIGZvciBLJlItc3R5bGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHdpbGwKKwkgICAgICBiZSBpbmRlbnRlZCBOIGNoYXJhY3RlcnMgZnJvbSB0aGUgbWFyZ2luLiAgKGRlZmF1bHQKKwkgICAgICAnc2hpZnR3aWR0aCcpLgorCisJCWNpbm89CQkgICAgY2lubz1wMAkJY2lubz1wMnMgPgorCQkgIGZ1bmMoYSwgYikJICAgICAgZnVuYyhhLCBiKQkgIGZ1bmMoYSwgYikKKwkJICAgICAgaW50IGE7CSAgICAgIGludCBhOwkJCSAgaW50IGE7CisJCSAgICAgIGNoYXIgYjsJICAgICAgY2hhciBiOwkJCSAgY2hhciBiOworPAorCXROICAgIEluZGVudCBhIGZ1bmN0aW9uIHJldHVybiB0eXBlIGRlY2xhcmF0aW9uIE4gY2hhcmFjdGVycyBmcm9tIHRoZQorCSAgICAgIG1hcmdpbi4gIChkZWZhdWx0ICdzaGlmdHdpZHRoJykuCisKKwkJY2lubz0JCSAgICBjaW5vPXQwCQljaW5vPXQ3ID4KKwkJICAgICAgaW50CSAgICAgIGludAkJCSBpbnQKKwkJICBmdW5jKCkJICAgICAgZnVuYygpCQkgIGZ1bmMoKQorPAorCWlOICAgIEluZGVudCBDKysgYmFzZSBjbGFzcyBkZWNsYXJhdGlvbnMgYW5kIGNvbnRydWN0b3IKKwkgICAgICBpbml0aWFsaXphdGlvbnMsIGlmIHRoZXkgc3RhcnQgaW4gYSBuZXcgbGluZSAob3RoZXJ3aXNlIHRoZXkKKwkgICAgICBhcmUgYWxpZ25lZCBhdCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgJzonKS4KKwkgICAgICAoZGVmYXVsdCAnc2hpZnR3aWR0aCcpLgorCisJCWNpbm89CQkJICBjaW5vPWkwID4KKwkJICBjbGFzcyBNeUNsYXNzIDoJICAgIGNsYXNzIE15Q2xhc3MgOgorCQkgICAgICBwdWJsaWMgQmFzZUNsYXNzICAgICAgcHVibGljIEJhc2VDbGFzcworCQkgIHt9CQkJICAgIHt9CisJCSAgTXlDbGFzczo6TXlDbGFzcygpIDoJICAgIE15Q2xhc3M6Ok15Q2xhc3MoKSA6CisJCSAgICAgIEJhc2VDbGFzcygzKQkgICAgQmFzZUNsYXNzKDMpCisJCSAge30JCQkgICAge30KKzwKKwkrTiAgICBJbmRlbnQgYSBjb250aW51YXRpb24gbGluZSAoYSBsaW5lIHRoYXQgc3BpbGxzIG9udG8gdGhlIG5leHQpIE4KKwkgICAgICBhZGRpdGlvbmFsIGNoYXJhY3RlcnMuICAoZGVmYXVsdCAnc2hpZnR3aWR0aCcpLgorCisJCWNpbm89CQkJICBjaW5vPSsxMCA+CisJCSAgYSA9IGIgKyA5ICoJCSAgICBhID0gYiArIDkgKgorCQkgICAgICBjOwkJCSAgICAgIGM7Cis8CisJY04gICAgSW5kZW50IGNvbW1lbnQgbGluZXMgYWZ0ZXIgdGhlIGNvbW1lbnQgb3BlbmVyLCB3aGVuIHRoZXJlIGlzIG5vCisJICAgICAgb3RoZXIgdGV4dCB3aXRoIHdoaWNoIHRvIGFsaWduLCBOIGNoYXJhY3RlcnMgZnJvbSB0aGUgY29tbWVudAorCSAgICAgIG9wZW5lci4gIChkZWZhdWx0IDMpLiAgU2VlIGFsc28gfGZvcm1hdC1jb21tZW50c3wuCisKKwkJY2lubz0JCQkgIGNpbm89YzUgPgorCQkgIC8qCQkJICAgIC8qCisJCSAgICAgdGV4dC4JCQkgdGV4dC4KKwkJICAgKi8JCQkgICAgICovCis8CisJQ04gICAgV2hlbiBOIGlzIG5vbi16ZXJvLCBpbmRlbnQgY29tbWVudCBsaW5lcyBieSB0aGUgYW1vdW50IHNwZWNpZmllZAorCSAgICAgIHdpdGggdGhlIGMgZmxhZyBhYm92ZSBldmVuIGlmIHRoZXJlIGlzIG90aGVyIHRleHQgYmVoaW5kIHRoZQorCSAgICAgIGNvbW1lbnQgb3BlbmVyLiAgKGRlZmF1bHQgMCkuCisKKwkJY2lubz1jMAkJCSAgY2lubz1jMCxDMSA+CisJCSAgLyoqKioqKioqCQkgICAgLyoqKioqKioqCisJCSAgICB0ZXh0LgkJICAgIHRleHQuCisJCSAgKioqKioqKiovCQkgICAgKioqKioqKiovCis8CSAgICAgIChFeGFtcGxlIHVzZXMgIjpzZXQgY29tbWVudHMmIGNvbW1lbnRzLT1zMTovKiBjb21tZW50c149czA6LyoiKQorCisJL04gICAgSW5kZW50IGNvbW1lbnQgbGluZXMgTiBjaGFyYWN0ZXJzIGV4dHJhLiAoZGVmYXVsdCAwKS4KKwkJY2lubz0JCQkgIGNpbm89LzQgPgorCQkgIGEgPSBiOwkJICAgIGEgPSBiOworCQkgIC8qIGNvbW1lbnQgKi8JCQkvKiBjb21tZW50ICovCisJCSAgYyA9IGQ7CQkgICAgYyA9IGQ7Cis8CisJKE4gICAgV2hlbiBpbiB1bmNsb3NlZCBwYXJlbnRoZXNlcywgaW5kZW50IE4gY2hhcmFjdGVycyBmcm9tIHRoZSBsaW5lCisJICAgICAgd2l0aCB0aGUgdW5jbG9zZWQgcGFyZW50aGVzZXMuICBBZGQgYSAnc2hpZnR3aWR0aCcgZm9yIGV2ZXJ5CisJICAgICAgdW5jbG9zZWQgcGFyZW50aGVzZXMuICBXaGVuIE4gaXMgMCBvciB0aGUgdW5jbG9zZWQgcGFyZW50aGVzZXMKKwkgICAgICBpcyB0aGUgZmlyc3Qgbm9uLXdoaXRlIGNoYXJhY3RlciBpbiBpdHMgbGluZSwgbGluZSB1cCB3aXRoIHRoZQorCSAgICAgIG5leHQgbm9uLXdoaXRlIGNoYXJhY3RlciBhZnRlciB0aGUgdW5jbG9zZWQgcGFyZW50aGVzZXMuCisJICAgICAgKGRlZmF1bHQgJ3NoaWZ0d2lkdGgnICogMikuCisKKwkJY2lubz0JCQkgIGNpbm89KDAgPgorCQkgIGlmIChjMSAmJiAoYzIgfHwJICAgIGlmIChjMSAmJiAoYzIgfHwKKwkJCSAgICAgIGMzKSkJCSAgICAgICBjMykpCisJCSAgICAgIGZvbzsJCQlmb287CisJCSAgaWYgKGMxICYmCQkgICAgaWYgKGMxICYmCisJCQkgIChjMiB8fCBjMykpCQkoYzIgfHwgYzMpKQorCQkgICAgIHsJCQkgICAgICAgeworPAorCXVOICAgIFNhbWUgYXMgKE4sIGJ1dCBmb3Igb25lIGxldmVsIGRlZXBlci4gIChkZWZhdWx0ICdzaGlmdHdpZHRoJykuCisKKwkJY2lubz0JCQkgIGNpbm89dTIgPgorCQkgIGlmIChjMTIzNDU2Nzg5CSAgICBpZiAoYzEyMzQ1Njc4OQorCQkJICAmJiAoYzIyMzQ1CQkgICAgJiYgKGMyMjM0NQorCQkJICAgICAgfHwgYzMpKQkJICAgICAgfHwgYzMpKQorPAorCVVOICAgIFdoZW4gTiBpcyBub24temVybywgZG8gbm90IGlnbm9yZSB0aGUgaW5kZW50aW5nIHNwZWNpZmllZCBieQorCSAgICAgICggb3IgdSBpbiBjYXNlIHRoYXQgdGhlIHVuY2xvc2VkIHBhcmVudGhlc2VzIGlzIHRoZSBmaXJzdAorCSAgICAgIG5vbi13aGl0ZSBjaGFyYWN0ZXIgaW4gaXRzIGxpbmUuICAoZGVmYXVsdCAwKS4KKworCQljaW5vPSBvciBjaW5vPShzCSAgY2lubz0ocyxVMSA+CisJCSAgYyA9IGMxICYmCQkgICAgYyA9IGMxICYmCisJCSAgICAgICgJCQkJKAorCQkgICAgICAgYzIgfHwJCQkgICAgYzIgfHwKKwkJICAgICAgIGMzCQkJICAgIGMzCisJCSAgICAgICkgJiYgYzQ7CQkJKSAmJiBjNDsKKzwKKwl3TiAgICBXaGVuIGluIHVuY2xvc2VkIHBhcmVudGhlc2VzIGFuZCBOIGlzIG5vbi16ZXJvIGFuZCBlaXRoZXIKKwkgICAgICB1c2luZyAiKDAiIG9yICJ1MCIsIHJlc3BlY3RpdmVseSwgb3IgdXNpbmcgIlUwIiBhbmQgdGhlIHVuY2xvc2VkCisJICAgICAgcGFyZW50aGVzZXMgaXMgdGhlIGZpcnN0IG5vbi13aGl0ZSBjaGFyYWN0ZXIgaW4gaXRzIGxpbmUsIGxpbmUKKwkgICAgICB1cCB3aXRoIHRoZSBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHVuY2xvc2VkIHBhcmVudGhlc2VzCisJICAgICAgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IG5vbi13aGl0ZSBjaGFyYWN0ZXIuICAoZGVmYXVsdCAwKS4KKworCQljaW5vPSgwCQkJICBjaW5vPSgwLHcxID4KKwkJICBpZiAoICAgYzEJCSAgICBpZiAoICAgYzEKKwkJCSAmJiAoICAgYzIJCSYmICggICBjMgorCQkJCXx8IGMzKSkJCSAgICB8fCBjMykpCisJCSAgICAgIGZvbzsJCQlmb287Cis8CisJV04gICAgV2hlbiBpbiB1bmNsb3NlZCBwYXJlbnRoZXNlcyBhbmQgTiBpcyBub24temVybyBhbmQgZWl0aGVyCisJICAgICAgdXNpbmcgIigwIiBvciAidTAiLCByZXNwZWN0aXZlbHkgYW5kIHRoZSB1bmNsb3NlZCBwYXJlbnRoZXNlcyBpcworCSAgICAgIHRoZSBsYXN0IG5vbi13aGl0ZSBjaGFyYWN0ZXIgaW4gaXRzIGxpbmUgYW5kIGl0IGlzIG5vdCB0aGUKKwkgICAgICBjbG9zaW5nIHBhcmVudGhlc2VzLCBpbmRlbnQgdGhlIGZvbGxvd2luZyBsaW5lIE4gY2hhcmFjdGVycworCSAgICAgIHJlbGF0aXZlIHRvIHRoZSBvdXRlciBjb250ZXh0IChpLmUuIHN0YXJ0IG9mIHRoZSBsaW5lIG9yIHRoZQorCSAgICAgIG5leHQgdW5jbG9zZWQgcGFyZW50aGVzZXMpLiAoZGVmYXVsdDogMCkuCisKKwkJY2lubz0oMAkJCSAgIGNpbm89KDAsVzQgPgorCQkgIGFfbG9uZ19saW5lKAkJICAgIGFfbG9uZ19saW5lKAorCQkJICAgICAgYXJndW1lbnQsCQlhcmd1bWVudCwKKwkJCSAgICAgIGFyZ3VtZW50KTsJYXJndW1lbnQpOworCQkgIGFfc2hvcnRfbGluZShhcmd1bWVudCwgICAgYV9zaG9ydF9saW5lKGFyZ3VtZW50LAorCQkJICAgICAgIGFyZ3VtZW50KTsJCSBhcmd1bWVudCk7Cis8CisJbU4gICAgV2hlbiBOIGlzIG5vbi16ZXJvLCBsaW5lIHVwIGEgbGluZSBzdGFydGluZyB3aXRoIGEgY2xvc2luZworCSAgICAgIHBhcmVudGhlc2VzIHdpdGggdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbGluZSB3aXRoIHRoZQorCSAgICAgIG1hdGNoaW5nIG9wZW5pbmcgcGFyZW50aGVzZXMuICAoZGVmYXVsdCAwKS4KKworCQljaW5vPShzCQkJICBjaW5vPShzLG0xID4KKwkJICBjID0gYzEgJiYgKAkJICAgIGMgPSBjMSAmJiAoCisJCSAgICAgIGMyIHx8CQkJYzIgfHwKKwkJICAgICAgYzMJCQljMworCQkgICAgICApICYmIGM0OwkJICAgICkgJiYgYzQ7CisJCSAgaWYgKAkJCSAgICBpZiAoCisJCSAgICAgIGMxICYmIGMyCQkJYzEgJiYgYzIKKwkJICAgICApCQkJICAgICkKKwkJICAgICAgZm9vOwkJCWZvbzsKKzwKKwkJCQkJKmphdmEtY2lub3B0aW9ucyogKmphdmEtaW5kZW50aW5nKgorCWpOICAgIEluZGVudCBqYXZhIGFub255bW91cyBjbGFzc2VzIGNvcnJlY3RseS4gIFRoZSB2YWx1ZSAnTicgaXMKKwkgICAgICBjdXJyZW50bHkgdW51c2VkIGJ1dCBtdXN0IGJlIG5vbi16ZXJvIChlLmcuICdqMScpLiAnajEnIHdpbGwKKwkgICAgICBpbmRlbnQgZm9yIGV4YW1wbGUgdGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgY29ycmVjdGx5OiA+CisKKwkJb2JqZWN0LmFkZChuZXcgQ2hhbmdlTGlzdGVuZXIoKSB7CisJCSAgICBwdWJsaWMgdm9pZCBzdGF0ZUNoYW5nZWQoQ2hhbmdlRXZlbnQgZSkgeworCQkJZG9fc29tZXRoaW5nKCk7CisJCSAgICB9CisJCX0pOworPAorCSlOICAgIFZpbSBzZWFyY2hlcyBmb3IgdW5jbG9zZWQgcGFyZW50aGVzZXMgYXQgbW9zdCBOIGxpbmVzIGF3YXkuCisJICAgICAgVGhpcyBsaW1pdHMgdGhlIHRpbWUgbmVlZGVkIHRvIHNlYXJjaCBmb3IgcGFyZW50aGVzZXMuICAoZGVmYXVsdAorCSAgICAgIDIwIGxpbmVzKS4KKworCSpOICAgIFZpbSBzZWFyY2hlcyBmb3IgdW5jbG9zZWQgY29tbWVudHMgYXQgbW9zdCBOIGxpbmVzIGF3YXkuICBUaGlzCisJICAgICAgbGltaXRzIHRoZSB0aW1lIG5lZWRlZCB0byBzZWFyY2ggZm9yIHRoZSBzdGFydCBvZiBhIGNvbW1lbnQuCisJICAgICAgKGRlZmF1bHQgMzAgbGluZXMpLgorCisKK1RoZSBkZWZhdWx0cywgc3BlbGxlZCBvdXQgaW4gZnVsbCwgYXJlOgorCWNpbm9wdGlvbnM9PnMsZTAsbjAsZjAsezAsfTAsXjAsOnMsPXMsbDAsZ3MsaHMscHMsdHMsK3MsYzMsQzAsKDJzLHVzLAorCQkgICBcVTAsdzAsbTAsajAsKTIwLCozMAorCitWaW0gcHV0cyBhIGxpbmUgaW4gY29sdW1uIDEgaWY6CistIEl0IHN0YXJ0cyB3aXRoICcjJyAocHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMpLCBpZiAnY2lua2V5cycgY29udGFpbnMgJyMnLgorLSBJdCBzdGFydHMgd2l0aCBhIGxhYmVsIChhIGtleXdvcmQgZm9sbG93ZWQgYnkgJzonLCBvdGhlciB0aGFuICJjYXNlIiBhbmQKKyAgImRlZmF1bHQiKS4KKy0gQW55IGNvbWJpbmF0aW9uIG9mIGluZGVudGF0aW9ucyBjYXVzZXMgdGhlIGxpbmUgdG8gaGF2ZSBsZXNzIHRoYW4gMAorICBpbmRlbnRhdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBJbmRlbnRpbmcgYnkgZXhwcmVzc2lvbgkJCQkqaW5kZW50LWV4cHJlc3Npb24qCisKK1RoZSBiYXNpY3MgZm9yIHVzaW5nIGZsZXhpYmxlIGluZGVudGluZyBhcmUgZXhwbGFpbmVkIGluIHNlY3Rpb24gfDMwLjN8IG9mIHRoZQordXNlciBtYW51YWwuCisKK0lmIHlvdSB3YW50IHRvIHdyaXRlIHlvdXIgb3duIGluZGVudCBmaWxlLCBpdCBtdXN0IHNldCB0aGUgJ2luZGVudGV4cHInCitvcHRpb24uICBTZXR0aW5nIHRoZSAnaW5kZW50a2V5cycgb3B0aW9uIGlzIG9mdGVuIHVzZWZ1bC4gIFNlZSB0aGUKKyRWSU1SVU5USU1FL2luZGVudCBkaXJlY3RvcnkgZm9yIGV4YW1wbGVzLgorCisKK1JFTUFSS1MgQUJPVVQgU1BFQ0lGSUMgSU5ERU5UIEZJTEVTIH4KKworCitGT1JUUkFOCQkJCQkJCSpmb3J0cmFuLWluZGVudCoKKworQmxvY2sgaWYsIHNlbGVjdCBjYXNlLCBhbmQgd2hlcmUgY29uc3RydWN0cyBhcmUgaW5kZW50ZWQuIENvbW1lbnRzLCBsYWJlbGxlZAorc3RhdGVtZW50cyBhbmQgY29udGludWF0aW9uIGxpbmVzIGFyZSBpbmRlbnRlZCBpZiB0aGUgRm9ydHJhbiBpcyBpbiBmcmVlCitzb3VyY2UgZm9ybSwgd2hlcmVhcyB0aGV5IGFyZSBub3QgaW5kZW50ZWQgaWYgdGhlIEZvcnRyYW4gaXMgaW4gZml4ZWQgc291cmNlCitmb3JtIGJlY2F1c2Ugb2YgdGhlIGxlZnQgbWFyZ2luIHJlcXVpcmVtZW50cy4gSGVuY2UgbWFudWFsIGluZGVudCBjb3JyZWN0aW9ucword2lsbCBiZSBuZWNlc3NhcnkgZm9yIGxhYmVsbGVkIHN0YXRlbWVudHMgYW5kIGNvbnRpbnVhdGlvbiBsaW5lcyB3aGVuIGZpeGVkCitzb3VyY2UgZm9ybSBpcyBiZWluZyB1c2VkLiBGb3IgZnVydGhlciBkaXNjdXNzaW9uIG9mIHRoZSBtZXRob2QgdXNlZCBmb3IgdGhlCitkZXRlY3Rpb24gb2Ygc291cmNlIGZvcm1hdCBzZWUgfGZvcnRyYW4tc3ludGF4fC4KKworRG8gbG9vcHMgfgorQWxsIGRvIGxvb3BzIGFyZSBsZWZ0IHVuaW5kZW50ZWQgYnkgZGVmYXVsdC4gRG8gbG9vcHMgY2FuIGJlIHVuc3RydWN0dXJlZCBpbgorRm9ydHJhbiB3aXRoIChwb3NzaWJseSBtdWx0aXBsZSkgbG9vcHMgZW5kaW5nIG9uIGEgbGFiZWxsZWQgZXhlY3V0YWJsZQorc3RhdGVtZW50IG9mIGFsbW9zdCBhcmJpdHJhcnkgdHlwZS4gQ29ycmVjdCBpbmRlbnRhdGlvbiByZXF1aXJlcworY29tcGlsZXItcXVhbGl0eSBwYXJzaW5nLiBPbGQgY29kZSB3aXRoIGRvIGxvb3BzIGVuZGluZyBvbiBsYWJlbGxlZCBzdGF0ZW1lbnRzCitvZiBhcmJpdHJhcnkgdHlwZSBjYW4gYmUgaW5kZW50ZWQgd2l0aCBlbGFib3JhdGUgcHJvZ3JhbXMgc3VjaCBhcyBUaWR5CisoaHR0cDovL3d3dy51bmIuY2EvY2hlbS9haml0L2ZfdGlkeS5odG0pLiBTdHJ1Y3R1cmVkIGRvL2NvbnRpbnVlIGxvb3BzIGFyZQorYWxzbyBsZWZ0IHVuaW5kZW50ZWQgYmVjYXVzZSBjb250aW51ZSBzdGF0ZW1lbnRzIGFyZSBhbHNvIHVzZWQgZm9yIHB1cnBvc2VzCitvdGhlciB0aGFuIGVuZGluZyBhIGRvIGxvb3AuIFByb2dyYW1zIHN1Y2ggYXMgVGlkeSBjYW4gY29udmVydCBzdHJ1Y3R1cmVkCitkby9jb250aW51ZSBsb29wcyB0byB0aGUgZG8vZW5kZG8gZm9ybS4gRG8gbG9vcHMgb2YgdGhlIGRvL2VuZGRvIHZhcmlldHkgY2FuCitiZSBpbmRlbnRlZC4gSWYgeW91IHVzZSBvbmx5IHN0cnVjdHVyZWQgbG9vcHMgb2YgdGhlIGRvL2VuZGRvIGZvcm0sIHlvdSBzaG91bGQKK2RlY2xhcmUgdGhpcyBieSBzZXR0aW5nIHRoZSBmb3J0cmFuX2RvX2VuZGRvIHZhcmlhYmxlIGluIHlvdXIgLnZpbXJjIGFzCitmb2xsb3dzID4KKworICAgbGV0IGZvcnRyYW5fZG9fZW5kZG89MQorCitpbiB3aGljaCBjYXNlIGRvIGxvb3BzIHdpbGwgYmUgaW5kZW50ZWQuIElmIGFsbCB5b3VyIGxvb3BzIGFyZSBvZiBkby9lbmRkbwordHlwZSBvbmx5IGluLCBzYXksIC5mOTAgZmlsZXMsIHRoZW4geW91IHNob3VsZCBzZXQgYSBidWZmZXIgZmxhZyB3aXRoIGFuCithdXRvY29tbWFuZCBzdWNoIGFzID4KKworICBhdSEgQnVmUmVhZCxCdWZOZXdGaWxlICouZjkwIGxldCBiOmZvcnRyYW5fZG9fZW5kZG89MQorCit0byBnZXQgZG8gbG9vcHMgaW5kZW50ZWQgaW4gLmY5MCBmaWxlcyBhbmQgbGVmdCBhbG9uZSBpbiBGb3J0cmFuIGZpbGVzIHdpdGgKK290aGVyIGV4dGVuc2lvbnMgc3VjaCBhcyAuZm9yLgorCisKK1ZFUklMT0cJCQkJCQkJKnZlcmlsb2ctaW5kZW50KgorCitHZW5lcmFsIGJsb2NrIHN0YXRlbWVudHMgc3VjaCBhcyBpZiwgZm9yLCBjYXNlLCBhbHdheXMsIGluaXRpYWwsIGZ1bmN0aW9uLAorc3BlY2lmeSBhbmQgYmVnaW4sIGV0Yy4sIGFyZSBpbmRlbnRlZC4gIFRoZSBtb2R1bGUgYmxvY2sgc3RhdGVtZW50cyAoZmlyc3QKK2xldmVsIGJsb2NrcykgYXJlIG5vdCBpbmRlbnRlZCBieSBkZWZhdWx0LiAgeW91IGNhbiB0dXJuIG9uIHRoZSBpbmRlbnQgd2l0aAorc2V0dGluZyBhIHZhcmlhYmxlIGluIHRoZSAudmltcmMgYXMgZm9sbG93czogPgorCisgIGxldCBiOnZlcmlsb2dfaW5kZW50X21vZHVsZXMgPSAxCisKK3RoZW4gdGhlIG1vZHVsZSBibG9ja3Mgd2lsbCBiZSBpbmRlbnRlZC4gIFRvIHN0b3AgdGhpcywgcmVtb3ZlIHRoZSB2YXJpYWJsZTogPgorCisgIDp1bmxldCBiOnZlcmlsb2dfaW5kZW50X21vZHVsZXMKKworVG8gc2V0IHRoZSB2YXJpYWJsZSBvbmx5IGZvciBWZXJpbG9nIGZpbGUuICBUaGUgZm9sbG93aW5nIHN0YXRlbWVudHMgY2FuIGJlCit1c2VkOiA+CisKKyAgYXUgQnVmUmVhZFBvc3QgKiBpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBhdSBCdWZSZWFkUG9zdCAqICAgaWYgYjpjdXJyZW50X3N5bnRheCA9PSAidmVyaWxvZyIKKyAgYXUgQnVmUmVhZFBvc3QgKiAgICAgbGV0IGI6dmVyaWxvZ19pbmRlbnRfbW9kdWxlcyA9IDEKKyAgYXUgQnVmUmVhZFBvc3QgKiAgIGVuZGlmCisgIGF1IEJ1ZlJlYWRQb3N0ICogZW5kaWYKKworRnVydGhlcm1vcmUsIHNldHRpbmcgdGhlIHZhcmlhYmxlIGI6dmVyaWxvZ19pbmRlbnRfd2lkdGggdG8gY2hhbmdlIHRoZQoraW5kZW50aW5nIHdpZHRoIChkZWZhdWx0IGlzICdzaGlmdHdpZHRoJyk6ID4KKworICBsZXQgYjp2ZXJpbG9nX2luZGVudF93aWR0aCA9IDQKKyAgbGV0IGI6dmVyaWxvZ19pbmRlbnRfd2lkdGggPSAmc3cgKiAyCisKK0luIGFkZGl0aW9uLCB5b3UgY2FuIHR1cm4gdGhlIHZlcmJvc2UgbW9kZSBmb3IgZGVidWcgaXNzdWU6ID4KKworICBsZXQgYjp2ZXJpbG9nX2luZGVudF92ZXJib3NlID0gMQorCitNYWtlIHN1cmUgdG8gZG8gIjpzZXQgY21kaGVpZ2h0PTIiIGZpcnN0IHRvIGFsbG93IHRoZSBkaXNwbGF5IG9mIHRoZSBtZXNzYWdlLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaW5kZXgudHh0IGIvcnVudGltZS9kb2MvaW5kZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MWU1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9pbmRleC50eHQKQEAgLTAsMCArMSwxNDIzIEBACisqaW5kZXgudHh0KiAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDI0CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCQkJCQkJKmluZGV4KgorVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBhbGwgY29tbWFuZHMgZm9yIGVhY2ggbW9kZSwgd2l0aCBhIHRhZyBhbmQgYQorc2hvcnQgZGVzY3JpcHRpb24uICBUaGUgbGlzdHMgYXJlIHNvcnRlZCBvbiBBU0NJSSB2YWx1ZS4KKworVGlwOiBXaGVuIGxvb2tpbmcgZm9yIGNlcnRhaW4gZnVuY3Rpb25hbGl0eSwgdXNlIGEgc2VhcmNoIGNvbW1hbmQuICBFLmcuLAordG8gbG9vayBmb3IgZGVsZXRpbmcgc29tZXRoaW5nLCB1c2U6ICIvZGVsZXRlIi4KKworMS4gSW5zZXJ0IG1vZGUJCQkJfGluc2VydC1pbmRleHwKKzIuIE5vcm1hbCBtb2RlCQkJCXxub3JtYWwtaW5kZXh8CisgICAyLjEuIFRleHQgb2JqZWN0cwkJCXxvYmplY3RzfAorICAgMi4yLiBXaW5kb3cgY29tbWFuZHMJCQl8Q1RSTC1XfAorICAgMi4zLiBTcXVhcmUgYnJhY2tldCBjb21tYW5kcwkJfFt8CisgICAyLjQuIENvbW1hbmRzIHN0YXJ0aW5nIHdpdGggJ2cnCXxnfAorICAgMi41LiBDb21tYW5kcyBzdGFydGluZyB3aXRoICd6Jwl8enwKKzMuIFZpc3VhbCBtb2RlCQkJCXx2aXN1YWwtaW5kZXh8Cis0LiBDb21tYW5kLWxpbmUgZWRpdGluZwkJCXxleC1lZGl0LWluZGV4fAorNS4gRVggY29tbWFuZHMJCQkJfGV4LWNtZC1pbmRleHwKKworRm9yIGFuIG92ZXJ2aWV3IG9mIG9wdGlvbnMgc2VlIGhlbHAudHh0IHxvcHRpb24tbGlzdHwuCitGb3IgYW4gb3ZlcnZpZXcgb2YgYnVpbHQtaW4gZnVuY3Rpb25zIHNlZSB8ZnVuY3Rpb25zfC4KK0ZvciBhIGxpc3Qgb2YgVmltIHZhcmlhYmxlcyBzZWUgfHZpbS12YXJpYWJsZXwuCitGb3IgYSBjb21wbGV0ZSBsaXN0aW5nIG9mIGFsbCBoZWxwIGl0ZW1zIHNlZSB8aGVscC10YWdzfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBJbnNlcnQgbW9kZQkJCQkJCSppbnNlcnQtaW5kZXgqCisKK3RhZwkJY2hhcgkJYWN0aW9uCX4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8aV9DVFJMLUB8CUNUUkwtQAkJaW5zZXJ0IHByZXZpb3VzbHkgaW5zZXJ0ZWQgdGV4dCBhbmQgc3RvcAorCQkJCWluc2VydAorfGlfQ1RSTC1BfAlDVFJMLUEJCWluc2VydCBwcmV2aW91c2x5IGluc2VydGVkIHRleHQKKwkJQ1RSTC1CCQlub3QgdXNlZCB8aV9DVFJMLUItZ29uZXwKK3xpX0NUUkwtQ3wJQ1RSTC1DCQlxdWl0IGluc2VydCBtb2RlLCB3aXRob3V0IGNoZWNraW5nIGZvcgorCQkJCWFiYnJldmlhdGlvbiwgdW5sZXNzICdpbnNlcnRtb2RlJyBzZXQuCit8aV9DVFJMLUR8CUNUUkwtRAkJZGVsZXRlIG9uZSBzaGlmdHdpZHRoIG9mIGluZGVudCBpbiB0aGUgY3VycmVudAorCQkJCWxpbmUKK3xpX0NUUkwtRXwJQ1RSTC1FCQlpbnNlcnQgdGhlIGNoYXJhY3RlciB3aGljaCBpcyBiZWxvdyB0aGUgY3Vyc29yCisJCUNUUkwtRgkJbm90IHVzZWQgKGJ1dCBieSBkZWZhdWx0IGl0J3MgaW4gJ2NpbmtleXMnIHRvCisJCQkJcmUtaW5kZW50IHRoZSBjdXJyZW50IGxpbmUpCit8aV9DVFJMLUdfanwJQ1RSTC1HIENUUkwtSglsaW5lIGRvd24sIHRvIGNvbHVtbiB3aGVyZSBpbnNlcnRpbmcgc3RhcnRlZAorfGlfQ1RSTC1HX2p8CUNUUkwtRyBqCWxpbmUgZG93biwgdG8gY29sdW1uIHdoZXJlIGluc2VydGluZyBzdGFydGVkCit8aV9DVFJMLUdfanwJQ1RSTC1HIDxEb3duPglsaW5lIGRvd24sIHRvIGNvbHVtbiB3aGVyZSBpbnNlcnRpbmcgc3RhcnRlZAorfGlfQ1RSTC1HX2t8CUNUUkwtRyBDVFJMLUsJbGluZSB1cCwgdG8gY29sdW1uIHdoZXJlIGluc2VydGluZyBzdGFydGVkCit8aV9DVFJMLUdfa3wJQ1RSTC1HIGsJbGluZSB1cCwgdG8gY29sdW1uIHdoZXJlIGluc2VydGluZyBzdGFydGVkCit8aV9DVFJMLUdfa3wJQ1RSTC1HIDxVcD4JbGluZSB1cCwgdG8gY29sdW1uIHdoZXJlIGluc2VydGluZyBzdGFydGVkCit8aV9DVFJMLUdfdXwJQ1RSTC1HIHUJc3RhcnQgbmV3IHVuZG9hYmxlIGVkaXQKK3xpXzxCUz58CTxCUz4JCWRlbGV0ZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjdXJzb3IKK3xpX2RpZ3JhcGh8CXtjaGFyMX08QlM+e2NoYXIyfQorCQkJCWVudGVyIGRpZ3JhcGggKG9ubHkgd2hlbiAnZGlncmFwaCcgb3B0aW9uIHNldCkKK3xpX0NUUkwtSHwJQ1RSTC1ICQlzYW1lIGFzIDxCUz4KK3xpXzxUYWI+fAk8VGFiPgkJaW5zZXJ0IGEgPFRhYj4gY2hhcmFjdGVyCit8aV9DVFJMLUl8CUNUUkwtSQkJc2FtZSBhcyA8VGFiPgorfGlfPE5MPnwJPE5MPgkJc2FtZSBhcyA8Q1I+Cit8aV9DVFJMLUp8CUNUUkwtSgkJc2FtZSBhcyA8Q1I+Cit8aV9DVFJMLUt8CUNUUkwtSyB7Y2hhcjF9IHtjaGFyMn0KKwkJCQllbnRlciBkaWdyYXBoCit8aV9DVFJMLUx8CUNUUkwtTAkJd2hlbiAnaW5zZXJ0bW9kZScgc2V0OiBMZWF2ZSBJbnNlcnQgbW9kZQorfGlfPENSPnwJPENSPgkJYmVnaW4gbmV3IGxpbmUKK3xpX0NUUkwtTXwJQ1RSTC1NCQlzYW1lIGFzIDxDUj4KK3xpX0NUUkwtTnwJQ1RSTC1OCQlmaW5kIG5leHQgbWF0Y2ggZm9yIGtleXdvcmQgaW4gZnJvbnQgb2YgdGhlCisJCQkJY3Vyc29yCit8aV9DVFJMLU98CUNUUkwtTwkJZXhlY3V0ZSBhIHNpbmdsZSBjb21tYW5kIGFuZCByZXR1cm4gdG8gaW5zZXJ0CisJCQkJbW9kZQorfGlfQ1RSTC1QfAlDVFJMLVAJCWZpbmQgcHJldmlvdXMgbWF0Y2ggZm9yIGtleXdvcmQgaW4gZnJvbnQgb2YKKwkJCQl0aGUgY3Vyc29yCit8aV9DVFJMLVF8CUNUUkwtUQkJc2FtZSBhcyBDVFJMLVYsIHVubGVzcyB1c2VkIGZvciB0ZXJtaW5hbAorCQkJCWNvbnRyb2wgZmxvdworfGlfQ1RSTC1SfAlDVFJMLVIgezAtOWEteiIlIyo6PX0KKwkJCQlpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIKK3xpX0NUUkwtUl9DVFJMLVJ8IENUUkwtUiBDVFJMLVIgezAtOWEteiIlIyo6PX0KKwkJCQlpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgbGl0ZXJhbGx5Cit8aV9DVFJMLVJfQ1RSTC1PfCBDVFJMLVIgQ1RSTC1PIHswLTlhLXoiJSMqOj19CisJCQkJaW5zZXJ0IHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIGxpdGVyYWxseQorCQkJCWFuZCBkb24ndCBhdXRvLWluZGVudAorfGlfQ1RSTC1SX0NUUkwtUHwgQ1RSTC1SIENUUkwtUCB7MC05YS16IiUjKjo9fQorCQkJCWluc2VydCB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciBsaXRlcmFsbHkKKwkJCQlhbmQgZml4IGluZGVudC4KKwkJQ1RSTC1TCQkodXNlZCBmb3IgdGVybWluYWwgY29udHJvbCBmbG93KQorfGlfQ1RSTC1UfAlDVFJMLVQJCWluc2VydCBvbmUgc2hpZnR3aWR0aCBvZiBpbmRlbnQgaW4gY3VycmVudAorCQkJCWxpbmUKK3xpX0NUUkwtVXwJQ1RSTC1VCQlkZWxldGUgYWxsIGVudGVyZWQgY2hhcmFjdGVycyBpbiB0aGUgY3VycmVudAorCQkJCWxpbmUKK3xpX0NUUkwtVnwJQ1RSTC1WIHtjaGFyfQlpbnNlcnQgbmV4dCBub24tZGlnaXQgbGl0ZXJhbGx5Cit8aV9DVFJMLVZfZGlnaXR8IENUUkwtViB7bnVtYmVyfSBpbnNlcnQgdGhyZWUgZGlnaXQgZGVjaW1hbCBudW1iZXIgYXMgYSBzaW5nbGUKKwkJCQlieXRlLgorfGlfQ1RSTC1XfAlDVFJMLVcJCWRlbGV0ZSB3b3JkIGJlZm9yZSB0aGUgY3Vyc29yCit8aV9DVFJMLVh8CUNUUkwtWCB7bW9kZX0JZW50ZXIgQ1RSTC1YIHN1YiBtb2RlLCBzZWUgYmVsb3cKK3xpX0NUUkwtWXwJQ1RSTC1ZCQlpbnNlcnQgdGhlIGNoYXJhY3RlciB3aGljaCBpcyBhYm92ZSB0aGUgY3Vyc29yCit8aV9DVFJMLVp8CUNUUkwtWgkJd2hlbiAnaW5zZXJ0bW9kZScgc2V0OiBzdXNwZW5kIFZpbQorfGlfPEVzYz58CTxFc2M+CQllbmQgaW5zZXJ0IG1vZGUgKHVubGVzcyAnaW5zZXJ0bW9kZScgc2V0KQorfGlfQ1RSTC1bfAlDVFJMLVsJCXNhbWUgYXMgPEVzYz4KK3xpX0NUUkwtXF9DVFJMLU58IENUUkwtXCBDVFJMLU4JIGdvIHRvIE5vcm1hbCBtb2RlCit8aV9DVFJMLVxfQ1RSTC1HfCBDVFJMLVwgQ1RSTC1HCSBnbyB0byBtb2RlIHNwZWNpZmllZCB3aXRoICdpbnNlcnRtb2RlJworCQlDVFJMLVwgYSAtIHoJcmVzZXJ2ZWQgZm9yIGV4dGVuc2lvbnMKKwkJQ1RSTC1cIG90aGVycwlub3QgdXNlZAorfGlfQ1RSTC1dfAlDVFJMLV0JCXRyaWdnZXIgYWJicmV2aWF0aW9uCit8aV9DVFJMLV58CUNUUkwtXgkJdG9nZ2xlIHVzZSBvZiB8OmxtYXB8IG1hcHBpbmdzCit8aV9DVFJMLV98CUNUUkwtXwkJV2hlbiAnYWxsb3dyZXZpbnMnIHNldDogY2hhbmdlIGxhbmd1YWdlCisJCQkJKEhlYnJldywgRmFyc2kpIHtvbmx5IHdoZW4gY29tcGlsZWQgd2l0aAorCQkJCStyaWdodGxlZnQgZmVhdHVyZX0KKworCQk8U3BhY2U+IHRvICd+Jwlub3QgdXNlZCwgZXhjZXB0ICcwJyBhbmQgJ14nIGZvbGxvd2VkIGJ5CisJCQkJQ1RSTC1ECisKK3xpXzBfQ1RSTC1EfAkwIENUUkwtRAlkZWxldGUgYWxsIGluZGVudCBpbiB0aGUgY3VycmVudCBsaW5lCit8aV9eX0NUUkwtRHwJXiBDVFJMLUQJZGVsZXRlIGFsbCBpbmRlbnQgaW4gdGhlIGN1cnJlbnQgbGluZSwgcmVzdG9yZQorCQkJCWl0IGluIHRoZSBuZXh0IGxpbmUKKworfGlfPERlbD58CTxEZWw+CQlkZWxldGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IKKworCQlNZXRhIGNoYXJhY3RlcnMgKDB4ODAgdG8gMHhmZiwgMTI4IHRvIDI1NSkKKwkJCQlub3QgdXNlZAorCit8aV88TGVmdD58CTxMZWZ0PgkJY3Vyc29yIG9uZSBjaGFyYWN0ZXIgbGVmdAorfGlfPFMtTGVmdD58CTxTLUxlZnQ+CWN1cnNvciBvbmUgd29yZCBsZWZ0Cit8aV88Qy1MZWZ0PnwJPEMtTGVmdD4JY3Vyc29yIG9uZSB3b3JkIGxlZnQKK3xpXzxSaWdodD58CTxSaWdodD4JCWN1cnNvciBvbmUgY2hhcmFjdGVyIHJpZ2h0Cit8aV88Uy1SaWdodD58CTxTLVJpZ2h0PgljdXJzb3Igb25lIHdvcmQgcmlnaHQKK3xpXzxDLVJpZ2h0PnwJPEMtUmlnaHQ+CWN1cnNvciBvbmUgd29yZCByaWdodAorfGlfPFVwPnwJPFVwPgkJY3Vyc29yIG9uZSBsaW5lIHVwCit8aV88Uy1VcD58CTxTLVVwPgkJc2FtZSBhcyA8UGFnZVVwPgorfGlfPERvd24+fAk8RG93bj4JCWN1cnNvciBvbmUgbGluZSBkb3duCit8aV88Uy1Eb3duPnwJPFMtRG93bj4Jc2FtZSBhcyA8UGFnZURvd24+Cit8aV88SG9tZT58CTxIb21lPgkJY3Vyc29yIHRvIHN0YXJ0IG9mIGxpbmUKK3xpXzxDLUhvbWU+fAk8Qy1Ib21lPgljdXJzb3IgdG8gc3RhcnQgb2YgZmlsZQorfGlfPEVuZD58CTxFbmQ+CQljdXJzb3IgcGFzdCBlbmQgb2YgbGluZQorfGlfPEMtRW5kPnwJPEMtRW5kPgkJY3Vyc29yIHBhc3QgZW5kIG9mIGZpbGUKK3xpXzxQYWdlVXA+fAk8UGFnZVVwPglvbmUgc2NyZWVuZnVsbCBiYWNrd2FyZAorfGlfPFBhZ2VEb3duPnwJPFBhZ2VEb3duPglvbmUgc2NyZWVuZnVsbCBmb3J3YXJkCit8aV88RjE+fAk8RjE+CQlzYW1lIGFzIDxIZWxwPgorfGlfPEhlbHA+fAk8SGVscD4JCXN0b3AgaW5zZXJ0IG1vZGUgYW5kIGRpc3BsYXkgaGVscCB3aW5kb3cKK3xpXzxJbnNlcnQ+fAk8SW5zZXJ0Pgl0b2dnbGUgSW5zZXJ0L1JlcGxhY2UgbW9kZQorfGlfPExlZnRNb3VzZT58CTxMZWZ0TW91c2U+CWN1cnNvciBhdCBtb3VzZSBjbGljaworfGlfPE1vdXNlRG93bj58CTxNb3VzZURvd24+CXNjcm9sbCB0aHJlZSBsaW5lcyBkb3dud2FyZHMKK3xpXzxTLU1vdXNlRG93bj58IDxTLU1vdXNlRG93bj4Jc2Nyb2xsIGEgZnVsbCBwYWdlIGRvd253YXJkcworfGlfPE1vdXNlVXA+fAk8TW91c2VVcD4Jc2Nyb2xsIHRocmVlIGxpbmVzIHVwd2FyZHMKK3xpXzxTLU1vdXNlVXA+fAk8Uy1Nb3VzZVVwPglzY3JvbGwgYSBmdWxsIHBhZ2UgdXB3YXJkcworCitjb21tYW5kcyBpbiBDVFJMLVggc3VibW9kZQorCit8aV9DVFJMLVhfQ1RSTC1EfAlDVFJMLVggQ1RSTC1ECWNvbXBsZXRlIGRlZmluZWQgaWRlbnRpZmllcnMKK3xpX0NUUkwtWF9DVFJMLUV8CUNUUkwtWCBDVFJMLUUJc2Nyb2xsIHVwCit8aV9DVFJMLVhfQ1RSTC1GfAlDVFJMLVggQ1RSTC1GCWNvbXBsZXRlIGZpbGUgbmFtZXMKK3xpX0NUUkwtWF9DVFJMLUl8CUNUUkwtWCBDVFJMLUkJY29tcGxldGUgaWRlbnRpZmllcnMKK3xpX0NUUkwtWF9DVFJMLUt8CUNUUkwtWCBDVFJMLUsJY29tcGxldGUgaWRlbnRpZmllcnMgZnJvbSBkaWN0aW9uYXJ5Cit8aV9DVFJMLVhfQ1RSTC1MfAlDVFJMLVggQ1RSTC1MCWNvbXBsZXRlIHdob2xlIGxpbmVzCit8aV9DVFJMLVhfQ1RSTC1OfAlDVFJMLVggQ1RSTC1OCW5leHQgY29tcGxldGlvbgorfGlfQ1RSTC1YX0NUUkwtUHwJQ1RSTC1YIENUUkwtUAlwcmV2aW91cyBjb21wbGV0aW9uCit8aV9DVFJMLVhfQ1RSTC1UfAlDVFJMLVggQ1RSTC1UCWNvbXBsZXRlIGlkZW50aWZpZXJzIGZyb20gdGhlc2F1cnVzCit8aV9DVFJMLVhfQ1RSTC1ZfAlDVFJMLVggQ1RSTC1ZCXNjcm9sbCBkb3duCit8aV9DVFJMLVhfQ1RSTC1dfAlDVFJMLVggQ1RSTC1dCWNvbXBsZXRlIHRhZ3MKK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK2luc2VydF9leHBhbmQgZmVhdHVyZX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBOb3JtYWwgbW9kZQkJCQkJCSpub3JtYWwtaW5kZXgqCisKK0NIQVIJIGFueSBub24tYmxhbmsgY2hhcmFjdGVyCitXT1JECSBhIHNlcXVlbmNlIG9mIG5vbi1ibGFuayBjaGFyYWN0ZXJzCitOCSBhIG51bWJlciBlbnRlcmVkIGJlZm9yZSB0aGUgY29tbWFuZAore21vdGlvbn0gYSBjdXJzb3IgbW92ZW1lbnQgY29tbWFuZAorTm1vdmUJIHRoZSB0ZXh0IHRoYXQgaXMgbW92ZWQgb3ZlciB3aXRoIGEge21vdGlvbn0KK1NFQ1RJT04JIGEgc2VjdGlvbiB0aGF0IHBvc3NpYmx5IHN0YXJ0cyB3aXRoICd9JyBpbnN0ZWFkIG9mICd7JworCitub3RlOiAxID0gY3Vyc29yIG1vdmVtZW50IGNvbW1hbmQ7IDIgPSBjYW4gYmUgdW5kb25lL3JlZG9uZQorCit0YWcJCWNoYXIJICAgICAgbm90ZSBhY3Rpb24gaW4gTm9ybWFsIG1vZGUJfgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCUNUUkwtQAkJICAgbm90IHVzZWQKK3xDVFJMLUF8CUNUUkwtQQkJMiAgYWRkIE4gdG8gbnVtYmVyIGF0L2FmdGVyIGN1cnNvcgorfENUUkwtQnwJQ1RSTC1CCQkxICBzY3JvbGwgTiBzY3JlZW5zIEJhY2t3YXJkcworfENUUkwtQ3wJQ1RSTC1DCQkgICBpbnRlcnJ1cHQgY3VycmVudCAoc2VhcmNoKSBjb21tYW5kCit8Q1RSTC1EfAlDVFJMLUQJCSAgIHNjcm9sbCBEb3duIE4gbGluZXMgKGRlZmF1bHQ6IGhhbGYgYSBzY3JlZW4pCit8Q1RSTC1FfAlDVFJMLUUJCSAgIHNjcm9sbCBOIGxpbmVzIHVwd2FyZHMgKE4gbGluZXMgRXh0cmEpCit8Q1RSTC1GfAlDVFJMLUYJCTEgIHNjcm9sbCBOIHNjcmVlbnMgRm9yd2FyZAorfENUUkwtR3wJQ1RSTC1HCQkgICBkaXNwbGF5IGN1cnJlbnQgZmlsZSBuYW1lIGFuZCBwb3NpdGlvbgorfDxCUz58CQk8QlM+CQkxICBzYW1lIGFzICJoIgorfENUUkwtSHwJQ1RSTC1ICQkxICBzYW1lIGFzICJoIgorfDxUYWI+fAkJPFRhYj4JCTEgIGdvIHRvIE4gbmV3ZXIgZW50cnkgaW4ganVtcCBsaXN0Cit8Q1RSTC1JfAlDVFJMLUkJCTEgIHNhbWUgYXMgPFRhYj4KK3w8Tkw+fAkJPE5MPgkJMSAgc2FtZSBhcyAiaiIKK3xDVFJMLUp8CUNUUkwtSgkJMSAgc2FtZSBhcyAiaiIKKwkJQ1RSTC1LCQkgICBub3QgdXNlZAorfENUUkwtTHwJQ1RSTC1MCQkgICByZWRyYXcgc2NyZWVuCit8PENSPnwJCTxDUj4JCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBOIGxpbmVzIGxvd2VyCit8Q1RSTC1NfAlDVFJMLU0JCTEgIHNhbWUgYXMgPENSPgorfENUUkwtTnwJQ1RSTC1OCQkxICBzYW1lIGFzICJqIgorfENUUkwtT3wJQ1RSTC1PCQkxICBnbyB0byBOIG9sZGVyIGVudHJ5IGluIGp1bXAgbGlzdAorfENUUkwtUHwJQ1RSTC1QCQkxICBzYW1lIGFzICJrIgorCQlDVFJMLVEJCSAgICh1c2VkIGZvciB0ZXJtaW5hbCBjb250cm9sIGZsb3cpCit8Q1RSTC1SfAlDVFJMLVIJCTIgIHJlZG8gY2hhbmdlcyB3aGljaCB3ZXJlIHVuZG9uZSB3aXRoICd1JworCQlDVFJMLVMJCSAgICh1c2VkIGZvciB0ZXJtaW5hbCBjb250cm9sIGZsb3cpCit8Q1RSTC1UfAlDVFJMLVQJCSAgIGp1bXAgdG8gTiBvbGRlciBUYWcgaW4gdGFnIGxpc3QKK3xDVFJMLVV8CUNUUkwtVQkJICAgc2Nyb2xsIE4gbGluZXMgVXB3YXJkcyAoZGVmYXVsdDogaGFsZiBhCisJCQkJICAgc2NyZWVuKQorfENUUkwtVnwJQ1RSTC1WCQkgICBzdGFydCBibG9ja3dpc2UgVmlzdWFsIG1vZGUKK3xDVFJMLVd8CUNUUkwtVyB7Y2hhcn0JICAgd2luZG93IGNvbW1hbmRzLCBzZWUgfENUUkwtV3wKK3xDVFJMLVh8CUNUUkwtWAkJMiAgc3VidHJhY3QgTiBmcm9tIG51bWJlciBhdC9hZnRlciBjdXJzb3IKK3xDVFJMLVl8CUNUUkwtWQkJICAgc2Nyb2xsIE4gbGluZXMgZG93bndhcmRzCit8Q1RSTC1afAlDVFJMLVoJCSAgIHN1c3BlbmQgcHJvZ3JhbSAob3Igc3RhcnQgbmV3IHNoZWxsKQorCQlDVFJMLVsgPEVzYz4JICAgbm90IHVzZWQKK3xDVFJMLVxfQ1RSTC1OfCBDVFJMLVwgQ1RSTC1OCSAgIGdvIHRvIE5vcm1hbCBtb2RlIChuby1vcCkKK3xDVFJMLVxfQ1RSTC1HfCBDVFJMLVwgQ1RSTC1HCSAgIGdvIHRvIG1vZGUgc3BlY2lmaWVkIHdpdGggJ2luc2VydG1vZGUnCisJCUNUUkwtXCBhIC0gegkgICByZXNlcnZlZCBmb3IgZXh0ZW5zaW9ucworCQlDVFJMLVwgb3RoZXJzICAgICAgbm90IHVzZWQKK3xDVFJMLV18CUNUUkwtXQkJICAgOnRhIHRvIGlkZW50IHVuZGVyIGN1cnNvcgorfENUUkwtXnwJQ1RSTC1eCQkgICBlZGl0IE50aCBhbHRlcm5hdGUgZmlsZSAoZXF1aXZhbGVudCB0bworCQkJCSAgICI6ZSAjTiIpCisJCUNUUkwtXwkJICAgbm90IHVzZWQKKworfDxTcGFjZT58CTxTcGFjZT4JCTEgIHNhbWUgYXMgImwiCit8IXwJCSF7bW90aW9ufXtmaWx0ZXJ9CisJCQkJMiAgZmlsdGVyIE5tb3ZlIHRleHQgdGhyb3VnaCB0aGUge2ZpbHRlcn0KKwkJCQkgICBjb21tYW5kCit8ISF8CQkhIXtmaWx0ZXJ9CTIgIGZpbHRlciBOIGxpbmVzIHRocm91Z2ggdGhlIHtmaWx0ZXJ9IGNvbW1hbmQKK3xxdW90ZXwJCSJ7YS16QS1aMC05LiUjOi0ifSAgdXNlIHJlZ2lzdGVyIHthLXpBLVowLTkuJSM6LSJ9IGZvciBuZXh0CisJCQkJICAgZGVsZXRlLCB5YW5rIG9yIHB1dCAodXBwZXJjYXNlIHRvIGFwcGVuZCkKKwkJCQkgICAoey4lIzp9IG9ubHkgd29yayB3aXRoIHB1dCkKK3wjfAkJIwkJMSAgc2VhcmNoIGJhY2t3YXJkIGZvciB0aGUgTnRoIG9jY3VycmVuY2Ugb2YKKwkJCQkgICB0aGUgaWRlbnQgdW5kZXIgdGhlIGN1cnNvcgorfCR8CQkkCQkxICBjdXJzb3IgdG8gdGhlIGVuZCBvZiBOdGggbmV4dCBsaW5lCit8JXwJCSUJCTEgIGZpbmQgdGhlIG5leHQgKGN1cmx5L3NxdWFyZSkgYnJhY2tldCBvbgorCQkJCSAgIHRoaXMgbGluZSBhbmQgZ28gdG8gaXRzIG1hdGNoLCBvciBnbyB0bworCQkJCSAgIG1hdGNoaW5nIGNvbW1lbnQgYnJhY2tldCwgb3IgZ28gdG8gbWF0Y2hpbmcKKwkJCQkgICBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLgorfE4lfAkJe2NvdW50fSUJMSAgZ28gdG8gTiBwZXJjZW50YWdlIGluIHRoZSBmaWxlCit8JnwJCSYJCTIgIHJlcGVhdCBsYXN0IDpzCit8J3wJCSd7YS16QS1aMC05fQkxICBjdXJzb3IgdG8gdGhlIGZpcnN0IENIQVIgb24gdGhlIGxpbmUgd2l0aAorCQkJCSAgIG1hcmsge2EtekEtWjAtOX0KK3wnJ3wJCScnCQkxICBjdXJzb3IgdG8gdGhlIGZpcnN0IENIQVIgb2YgdGhlIGxpbmUgd2hlcmUKKwkJCQkgICB0aGUgY3Vyc29yIHdhcyBiZWZvcmUgdGhlIGxhdGVzdCBqdW1wLgorfCcofAkJJygJCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBvbiB0aGUgbGluZSBvZiB0aGUKKwkJCQkgICBzdGFydCBvZiB0aGUgY3VycmVudCBzZW50ZW5jZQorfCcpfAkJJykJCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBvbiB0aGUgbGluZSBvZiB0aGUKKwkJCQkgICBlbmQgb2YgdGhlIGN1cnJlbnQgc2VudGVuY2UKK3wnPHwJCSc8CQkxICBjdXJzb3IgdG8gdGhlIGZpcnN0IENIQVIgb2YgdGhlIGxpbmUgd2hlcmUKKwkJCQkgICBoaWdobGlnaHRlZCBhcmVhIHN0YXJ0cy9zdGFydGVkIGluIHRoZQorCQkJCSAgIGN1cnJlbnQgYnVmZmVyLgorfCc+fAkJJz4JCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBvZiB0aGUgbGluZSB3aGVyZQorCQkJCSAgIGhpZ2hsaWdodGVkIGFyZWEgZW5kcy9lbmRlZCBpbiB0aGUgY3VycmVudAorCQkJCSAgIGJ1ZmZlci4KK3wnW3wJCSdbCQkxICBjdXJzb3IgdG8gdGhlIGZpcnN0IENIQVIgb24gdGhlIGxpbmUgb2YgdGhlCisJCQkJICAgc3RhcnQgb2YgbGFzdCBvcGVyYXRlZCB0ZXh0IG9yIHN0YXJ0IG9mIHB1dAorCQkJCSAgIHRleHQKK3wnXXwJCSddCQkxICBjdXJzb3IgdG8gdGhlIGZpcnN0IENIQVIgb24gdGhlIGxpbmUgb2YgdGhlCisJCQkJICAgZW5kIG9mIGxhc3Qgb3BlcmF0ZWQgdGV4dCBvciBlbmQgb2YgcHV0CisJCQkJICAgdGV4dAorfCd7fAkJJ3sJCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBvbiB0aGUgbGluZSBvZiB0aGUKKwkJCQkgICBzdGFydCBvZiB0aGUgY3VycmVudCBwYXJhZ3JhcGgKK3wnfXwJCSd9CQkxICBjdXJzb3IgdG8gdGhlIGZpcnN0IENIQVIgb24gdGhlIGxpbmUgb2YgdGhlCisJCQkJICAgZW5kIG9mIHRoZSBjdXJyZW50IHBhcmFncmFwaAorfCh8CQkoCQkxICBjdXJzb3IgTiBzZW50ZW5jZXMgYmFja3dhcmQKK3wpfAkJKQkJMSAgY3Vyc29yIE4gc2VudGVuY2VzIGZvcndhcmQKK3xzdGFyfAkJKgkJMSAgc2VhcmNoIGZvcndhcmQgZm9yIHRoZSBOdGggb2NjdXJyZW5jZSBvZgorCQkJCSAgIHRoZSBpZGVudCB1bmRlciB0aGUgY3Vyc29yCit8K3wJCSsJCTEgIHNhbWUgYXMgPENSPgorfCx8CQksCQkxICByZXBlYXQgbGF0ZXN0IGYsIHQsIEYgb3IgVCBpbiBvcHBvc2l0ZQorCQkJCSAgIGRpcmVjdGlvbiBOIHRpbWVzCit8LXwJCS0JCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBOIGxpbmVzIGhpZ2hlcgorfC58CQkuCQkyICByZXBlYXQgbGFzdCBjaGFuZ2Ugd2l0aCBjb3VudCByZXBsYWNlZCB3aXRoCisJCQkJICAgTgorfC98CQkve3BhdHRlcm59PENSPgkxICBzZWFyY2ggZm9yd2FyZCBmb3IgdGhlIE50aCBvY2N1cnJlbmNlIG9mCisJCQkJICAge3BhdHRlcm59Cit8LzxDUj58CQkvPENSPgkJMSAgc2VhcmNoIGZvcndhcmQgZm9yIHtwYXR0ZXJufSBvZiBsYXN0IHNlYXJjaAorfGNvdW50fAkJMAkJMSAgY3Vyc29yIHRvIHRoZSBmaXJzdCBjaGFyIG9mIHRoZSBsaW5lCit8Y291bnR8CQkxCQkgICBwcmVwZW5kIHRvIGNvbW1hbmQgdG8gZ2l2ZSBhIGNvdW50Cit8Y291bnR8CQkyCQkJIgorfGNvdW50fAkJMwkJCSIKK3xjb3VudHwJCTQJCQkiCit8Y291bnR8CQk1CQkJIgorfGNvdW50fAkJNgkJCSIKK3xjb3VudHwJCTcJCQkiCit8Y291bnR8CQk4CQkJIgorfGNvdW50fAkJOQkJCSIKK3w6fAkJOgkJMSAgc3RhcnQgZW50ZXJpbmcgYW4gRXggY29tbWFuZAorfE46fAkJe2NvdW50fToJICAgc3RhcnQgZW50ZXJpbmcgYW4gRXggY29tbWFuZCB3aXRoIHJhbmdlCisJCQkJICAgZnJvbSBjdXJyZW50IGxpbmUgdG8gTi0xIGxpbmVzIGRvd24KK3w7fAkJOwkJMSAgcmVwZWF0IGxhdGVzdCBmLCB0LCBGIG9yIFQgTiB0aW1lcworfDx8CQk8e21vdGlvbn0JMiAgc2hpZnQgTm1vdmUgbGluZXMgb25lICdzaGlmdHdpZHRoJworCQkJCSAgIGxlZnR3YXJkcworfDw8fAkJPDwJCTIgIHNoaWZ0IE4gbGluZXMgb25lICdzaGlmdHdpZHRoJyBsZWZ0d2FyZHMKK3w9fAkJPXttb3Rpb259CTIgIGZpbHRlciBObW92ZSBsaW5lcyB0aHJvdWdoICJpbmRlbnQiCit8PT18CQk9PQkJMiAgZmlsdGVyIE4gbGluZXMgdGhyb3VnaCAiaW5kZW50IgorfD58CQk+e21vdGlvbn0JMiAgc2hpZnQgTm1vdmUgbGluZXMgb25lICdzaGlmdHdpZHRoJworCQkJCSAgIHJpZ2h0d2FyZHMKK3w+PnwJCT4+CQkyICBzaGlmdCBOIGxpbmVzIG9uZSAnc2hpZnR3aWR0aCcgcmlnaHR3YXJkcworfD98CQk/e3BhdHRlcm59PENSPgkxICBzZWFyY2ggYmFja3dhcmQgZm9yIHRoZSBOdGggcHJldmlvdXMKKwkJCQkgICBvY2N1cnJlbmNlIG9mIHtwYXR0ZXJufQorfD88Q1I+fAkJPzxDUj4JCTEgIHNlYXJjaCBiYWNrd2FyZCBmb3Ige3BhdHRlcm59IG9mIGxhc3Qgc2VhcmNoCit8QHwJCUB7YS16fQkJMiAgZXhlY3V0ZSB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXIge2Eten0KKwkJCQkgICBOIHRpbWVzCit8QDp8CQlAOgkJICAgcmVwZWF0IHRoZSBwcmV2aW91cyAiOiIgY29tbWFuZCBOIHRpbWVzCit8QEB8CQlAQAkJMiAgcmVwZWF0IHRoZSBwcmV2aW91cyBAe2Eten0gTiB0aW1lcworfEF8CQlBCQkyICBhcHBlbmQgdGV4dCBhZnRlciB0aGUgZW5kIG9mIHRoZSBsaW5lIE4gdGltZXMKK3xCfAkJQgkJMSAgY3Vyc29yIE4gV09SRFMgYmFja3dhcmQKK3xDfAkJWyJ4XUMJCTIgIGNoYW5nZSBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24gdG8gdGhlIGVuZAorCQkJCSAgIG9mIHRoZSBsaW5lLCBhbmQgTi0xIG1vcmUgbGluZXMgW2ludG8KKwkJCQkgICBidWZmZXIgeF07IHN5bm9ueW0gZm9yICJjJCIKK3xEfAkJWyJ4XUQJCTIgIGRlbGV0ZSB0aGUgY2hhcmFjdGVycyB1bmRlciB0aGUgY3Vyc29yCisJCQkJICAgdW50aWwgdGhlIGVuZCBvZiB0aGUgbGluZSBhbmQgTi0xIG1vcmUKKwkJCQkgICBsaW5lcyBbaW50byBidWZmZXIgeF07IHN5bm9ueW0gZm9yICJkJCIKK3xFfAkJRQkJMSAgY3Vyc29yIGZvcndhcmQgdG8gdGhlIGVuZCBvZiBXT1JEIE4KK3xGfAkJRntjaGFyfQkJMSAgY3Vyc29yIHRvIHRoZSBOdGggb2NjdXJyZW5jZSBvZiB7Y2hhcn0gdG8KKwkJCQkgICB0aGUgbGVmdAorfEd8CQlHCQkxICBjdXJzb3IgdG8gbGluZSBOLCBkZWZhdWx0IGxhc3QgbGluZQorfEh8CQlICQkxICBjdXJzb3IgdG8gbGluZSBOIGZyb20gdG9wIG9mIHNjcmVlbgorfEl8CQlJCQkyICBpbnNlcnQgdGV4dCBiZWZvcmUgdGhlIGZpcnN0IENIQVIgb24gdGhlCisJCQkJICAgbGluZSBOIHRpbWVzCit8SnwJCUoJCTIgIEpvaW4gTiBsaW5lczsgZGVmYXVsdCBpcyAyCit8S3wJCUsJCSAgIGxvb2t1cCBLZXl3b3JkIHVuZGVyIHRoZSBjdXJzb3Igd2l0aAorCQkJCSAgICdrZXl3b3JkcHJnJworfEx8CQlMCQkxICBjdXJzb3IgdG8gbGluZSBOIGZyb20gYm90dG9tIG9mIHNjcmVlbgorfE18CQlNCQkxICBjdXJzb3IgdG8gbWlkZGxlIGxpbmUgb2Ygc2NyZWVuCit8TnwJCU4JCTEgIHJlcGVhdCB0aGUgbGF0ZXN0ICcvJyBvciAnPycgTiB0aW1lcyBpbgorCQkJCSAgIG9wcG9zaXRlIGRpcmVjdGlvbgorfE98CQlPCQkyICBiZWdpbiBhIG5ldyBsaW5lIGFib3ZlIHRoZSBjdXJzb3IgYW5kCisJCQkJICAgaW5zZXJ0IHRleHQsIHJlcGVhdCBOIHRpbWVzCit8UHwJCVsieF1QCQkyICBwdXQgdGhlIHRleHQgW2Zyb20gYnVmZmVyIHhdIGJlZm9yZSB0aGUKKwkJCQkgICBjdXJzb3IgTiB0aW1lcworfFF8CQlRCQkgICBzd2l0Y2ggdG8gIkV4IiBtb2RlCit8UnwJCVIJCTIgIGVudGVyIHJlcGxhY2UgbW9kZTogb3ZlcnR5cGUgZXhpc3RpbmcKKwkJCQkgICBjaGFyYWN0ZXJzLCByZXBlYXQgdGhlIGVudGVyZWQgdGV4dCBOLTEKKwkJCQkgICB0aW1lcworfFN8CQlbInhdUwkJMiAgZGVsZXRlIE4gbGluZXMgW2ludG8gYnVmZmVyIHhdIGFuZCBzdGFydAorCQkJCSAgIGluc2VydDsgc3lub255bSBmb3IgIl5jYyIgb3IgIjBjYyIsCisJCQkJICAgZGVwZW5kaW5nIG9uIGF1dG9pbmRlbnQKK3xUfAkJVHtjaGFyfQkJMSAgY3Vyc29yIHRpbGwgYWZ0ZXIgTnRoIG9jY3VycmVuY2Ugb2Yge2NoYXJ9CisJCQkJICAgdG8gdGhlIGxlZnQKK3xVfAkJVQkJMiAgdW5kbyBhbGwgbGF0ZXN0IGNoYW5nZXMgb24gb25lIGxpbmUKK3xWfAkJVgkJICAgc3RhcnQgbGluZXdpc2UgVmlzdWFsIG1vZGUKK3xXfAkJVwkJMSAgY3Vyc29yIE4gV09SRFMgZm9yd2FyZAorfFh8CQlbInhdWAkJMiAgZGVsZXRlIE4gY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnNvciBbaW50bworCQkJCSAgIGJ1ZmZlciB4XQorfFl8CQlbInhdWQkJICAgeWFuayBOIGxpbmVzIFtpbnRvIGJ1ZmZlciB4XTsgc3lub255bSBmb3IKKwkJCQkgICAieXkiCit8Wlp8CQlaWgkJICAgc3RvcmUgY3VycmVudCBmaWxlIGlmIG1vZGlmaWVkLCBhbmQgZXhpdAorfFpRfAkJWlEJCSAgIGV4aXQgY3VycmVudCBmaWxlIGFsd2F5cworfFt8CQlbe2NoYXJ9CQkgICBzcXVhcmUgYnJhY2tldCBjb21tYW5kIChzZWUgYmVsb3cpCisJCVwJCSAgIG5vdCB1c2VkCit8XXwJCV17Y2hhcn0JCSAgIHNxdWFyZSBicmFja2V0IGNvbW1hbmQgKHNlZSBiZWxvdykKK3xefAkJXgkJMSAgY3Vyc29yIHRvIHRoZSBmaXJzdCBDSEFSIG9mIHRoZSBsaW5lCit8X3wJCV8JCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBOIC0gMSBsaW5lcyBsb3dlcgorfGB8CQlge2EtekEtWjAtOX0JMSAgY3Vyc29yIHRvIHRoZSBtYXJrIHthLXpBLVowLTl9Cit8YCh8CQlgKAkJMSAgY3Vyc29yIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBzZW50ZW5jZQorfGApfAkJYCkJCTEgIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHNlbnRlbmNlCit8YDx8CQlgPAkJMSAgY3Vyc29yIHRvIHRoZSBzdGFydCBvZiB0aGUgaGlnaGxpZ2h0ZWQgYXJlYQorfGA+fAkJYD4JCTEgIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBoaWdobGlnaHRlZCBhcmVhCit8YFt8CQlgWwkJMSAgY3Vyc29yIHRvIHRoZSBzdGFydCBvZiBsYXN0IG9wZXJhdGVkIHRleHQKKwkJCQkgICBvciBzdGFydCBvZiBwdXR0ZWQgdGV4dAorfGBdfAkJYF0JCTEgIGN1cnNvciB0byB0aGUgZW5kIG9mIGxhc3Qgb3BlcmF0ZWQgdGV4dCBvcgorCQkJCSAgIGVuZCBvZiBwdXR0ZWQgdGV4dAorfGBgfAkJYGAJCTEgIGN1cnNvciB0byB0aGUgcG9zaXRpb24gYmVmb3JlIGxhdGVzdCBqdW1wCit8YHt8CQlgewkJMSAgY3Vyc29yIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBwYXJhZ3JhcGgKK3xgfXwJCWB9CQkxICBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBwYXJhZ3JhcGgKK3xhfAkJYQkJMiAgYXBwZW5kIHRleHQgYWZ0ZXIgdGhlIGN1cnNvciBOIHRpbWVzCit8YnwJCWIJCTEgIGN1cnNvciBOIHdvcmRzIGJhY2t3YXJkCit8Y3wJCVsieF1je21vdGlvbn0JMiAgZGVsZXRlIE5tb3ZlIHRleHQgW2ludG8gYnVmZmVyIHhdIGFuZCBzdGFydAorCQkJCSAgIGluc2VydAorfGNjfAkJWyJ4XWNjCQkyICBkZWxldGUgTiBsaW5lcyBbaW50byBidWZmZXIgeF0gYW5kIHN0YXJ0CisJCQkJICAgaW5zZXJ0Cit8ZHwJCVsieF1ke21vdGlvbn0JMiAgZGVsZXRlIE5tb3ZlIHRleHQgW2ludG8gYnVmZmVyIHhdCit8ZGR8CQlbInhdZGQJCTIgIGRlbGV0ZSBOIGxpbmVzIFtpbnRvIGJ1ZmZlciB4XQorfGRvfAkJZG8JCTIgIHNhbWUgYXMgIjpkaWZmZ2V0IgorfGRwfAkJZHAJCTIgIHNhbWUgYXMgIjpkaWZmcHV0IgorfGV8CQllCQkxICBjdXJzb3IgZm9yd2FyZCB0byB0aGUgZW5kIG9mIHdvcmQgTgorfGZ8CQlme2NoYXJ9CQkxICBjdXJzb3IgdG8gTnRoIG9jY3VycmVuY2Ugb2Yge2NoYXJ9IHRvIHRoZQorCQkJCSAgIHJpZ2h0Cit8Z3wJCWd7Y2hhcn0JCSAgIGV4dGVuZGVkIGNvbW1hbmRzLCBzZWUgYmVsb3cKK3xofAkJaAkJMSAgY3Vyc29yIE4gY2hhcnMgdG8gdGhlIGxlZnQKK3xpfAkJaQkJMiAgaW5zZXJ0IHRleHQgYmVmb3JlIHRoZSBjdXJzb3IgTiB0aW1lcworfGp8CQlqCQkxICBjdXJzb3IgTiBsaW5lcyBkb3dud2FyZAorfGt8CQlrCQkxICBjdXJzb3IgTiBsaW5lcyB1cHdhcmQKK3xsfAkJbAkJMSAgY3Vyc29yIE4gY2hhcnMgdG8gdGhlIHJpZ2h0Cit8bXwJCW17QS1aYS16fQkgICBzZXQgbWFyayB7QS1aYS16fSBhdCBjdXJzb3IgcG9zaXRpb24KK3xufAkJbgkJMSAgcmVwZWF0IHRoZSBsYXRlc3QgJy8nIG9yICc/JyBOIHRpbWVzCit8b3wJCW8JCTIgIGJlZ2luIGEgbmV3IGxpbmUgYmVsb3cgdGhlIGN1cnNvciBhbmQKKwkJCQkgICBpbnNlcnQgdGV4dCwgcmVwZWF0IE4gdGltZXMKK3xwfAkJWyJ4XXAJCTIgIHB1dCB0aGUgdGV4dCBbZnJvbSByZWdpc3RlciB4XSBhZnRlciB0aGUKKwkJCQkgICBjdXJzb3IgTiB0aW1lcworfHF8CQlxezAtOWEtekEtWiJ9CSAgIHJlY29yZCB0eXBlZCBjaGFyYWN0ZXJzIGludG8gbmFtZWQgcmVnaXN0ZXIKKwkJCQkgICB7MC05YS16QS1aIn0gKHVwcGVyY2FzZSB0byBhcHBlbmQpCit8cXwJCXEJCSAgICh3aGlsZSByZWNvcmRpbmcpIHN0b3BzIHJlY29yZGluZworfHE6fAkJcToJCSAgIGVkaXQgOiBjb21tYW5kLWxpbmUgaW4gY29tbWFuZC1saW5lIHdpbmRvdworfHEvfAkJcS8JCSAgIGVkaXQgLyBjb21tYW5kLWxpbmUgaW4gY29tbWFuZC1saW5lIHdpbmRvdworfHE/fAkJcT8JCSAgIGVkaXQgPyBjb21tYW5kLWxpbmUgaW4gY29tbWFuZC1saW5lIHdpbmRvdworfHJ8CQlye2NoYXJ9CQkyICByZXBsYWNlIE4gY2hhcnMgd2l0aCB7Y2hhcn0KK3xzfAkJWyJ4XXMJCTIgIChzdWJzdGl0dXRlKSBkZWxldGUgTiBjaGFyYWN0ZXJzIFtpbnRvCisJCQkJICAgYnVmZmVyIHhdIGFuZCBzdGFydCBpbnNlcnQKK3x0fAkJdHtjaGFyfQkJMSAgY3Vyc29yIHRpbGwgYmVmb3JlIE50aCBvY2N1cnJlbmNlIG9mIHtjaGFyfQorCQkJCSAgIHRvIHRoZSByaWdodAorfHV8CQl1CQkyICB1bmRvIGNoYW5nZXMKK3x2fAkJdgkJICAgc3RhcnQgY2hhcmFjdGVyd2lzZSBWaXN1YWwgbW9kZQorfHd8CQl3CQkxICBjdXJzb3IgTiB3b3JkcyBmb3J3YXJkCit8eHwJCVsieF14CQkyICBkZWxldGUgTiBjaGFyYWN0ZXJzIHVuZGVyIGFuZCBhZnRlciB0aGUKKwkJCQkgICBjdXJzb3IgW2ludG8gYnVmZmVyIHhdCit8eXwJCVsieF15e21vdGlvbn0JICAgeWFuayBObW92ZSB0ZXh0IFtpbnRvIGJ1ZmZlciB4XQorfHl5fAkJWyJ4XXl5CQkgICB5YW5rIE4gbGluZXMgW2ludG8gYnVmZmVyIHhdCit8enwJCXp7Y2hhcn0JCSAgIGNvbW1hbmRzIHN0YXJ0aW5nIHdpdGggJ3onLCBzZWUgYmVsb3cKK3x7fAkJewkJMSAgY3Vyc29yIE4gcGFyYWdyYXBocyBiYWNrd2FyZAorfGJhcnwJCXwJCTEgIGN1cnNvciB0byBjb2x1bW4gTgorfH18CQl9CQkxICBjdXJzb3IgTiBwYXJhZ3JhcGhzIGZvcndhcmQKK3x+fAkJfgkJMiAgJ3RpbGRlb3AnIG9mZjogc3dpdGNoIGNhc2Ugb2YgTiBjaGFyYWN0ZXJzCisJCQkJICAgdW5kZXIgY3Vyc29yIGFuZCBtb3ZlIHRoZSBjdXJzb3IgTgorCQkJCSAgIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0Cit8fnwJCX57bW90aW9ufQkgICAndGlsZGVvcCcgb246IHN3aXRjaCBjYXNlIG9mIE5tb3ZlIHRleHQKK3w8Qy1FbmQ+fAk8Qy1FbmQ+CQkxICBzYW1lIGFzICJHIgorfDxDLUhvbWU+fAk8Qy1Ib21lPgkxICBzYW1lIGFzICJnZyIKK3w8Qy1MZWZ0PnwJPEMtTGVmdD4JMSAgc2FtZSBhcyAiYiIKK3w8Qy1MZWZ0TW91c2U+fAk8Qy1MZWZ0TW91c2U+CSAgICI6dGEiIHRvIHRoZSBrZXl3b3JkIGF0IHRoZSBtb3VzZSBjbGljaworfDxDLVJpZ2h0PnwJPEMtUmlnaHQ+CTEgIHNhbWUgYXMgInciCit8PEMtUmlnaHRNb3VzZT58IDxDLVJpZ2h0TW91c2U+CSAgIHNhbWUgYXMgIkNUUkwtVCIKK3w8RGVsPnwJCVsieF08RGVsPgkyICBzYW1lIGFzICJ4IgorfE48RGVsPnwJe2NvdW50fTxEZWw+CSAgIHJlbW92ZSB0aGUgbGFzdCBkaWdpdCBmcm9tIHtjb3VudH0KK3w8RG93bj58CTxEb3duPgkJMSAgc2FtZSBhcyAiaiIKK3w8RW5kPnwJCTxFbmQ+CQkxICBzYW1lIGFzICIkIgorfDxGMT58CQk8RjE+CQkgICBzYW1lIGFzIDxIZWxwPgorfDxIZWxwPnwJPEhlbHA+CQkgICBvcGVuIGEgaGVscCB3aW5kb3cKK3w8SG9tZT58CTxIb21lPgkJMSAgc2FtZSBhcyAiMCIKK3w8SW5zZXJ0PnwJPEluc2VydD4JMiAgc2FtZSBhcyAiaSIKK3w8TGVmdD58CTxMZWZ0PgkJMSAgc2FtZSBhcyAiaCIKK3w8TGVmdE1vdXNlPnwJPExlZnRNb3VzZT4JMSAgbW92ZSBjdXJzb3IgdG8gdGhlIG1vdXNlIGNsaWNrIHBvc2l0aW9uCit8PE1pZGRsZU1vdXNlPnwgPE1pZGRsZU1vdXNlPgkyICBzYW1lIGFzICJQIiBhdCB0aGUgbW91c2UgY2xpY2sgcG9zaXRpb24KK3w8UGFnZURvd24+fAk8UGFnZURvd24+CSAgIHNhbWUgYXMgQ1RSTC1GCit8PFBhZ2VVcD58CTxQYWdlVXA+CSAgIHNhbWUgYXMgQ1RSTC1CCit8PFJpZ2h0PnwJPFJpZ2h0PgkJMSAgc2FtZSBhcyAibCIKK3w8UmlnaHRNb3VzZT58CTxSaWdodE1vdXNlPgkgICBzdGFydCBWaXN1YWwgbW9kZSwgbW92ZSBjdXJzb3IgdG8gdGhlIG1vdXNlCisJCQkJICAgY2xpY2sgcG9zaXRpb24KK3w8Uy1Eb3duPnwJPFMtRG93bj4JMSAgc2FtZSBhcyBDVFJMLUYKK3w8Uy1MZWZ0PnwJPFMtTGVmdD4JMSAgc2FtZSBhcyAiYiIKK3w8Uy1MZWZ0TW91c2U+fAk8Uy1MZWZ0TW91c2U+CSAgIHNhbWUgYXMgIioiIGF0IHRoZSBtb3VzZSBjbGljayBwb3NpdGlvbgorfDxTLVJpZ2h0PnwJPFMtUmlnaHQ+CTEgIHNhbWUgYXMgInciCit8PFMtUmlnaHRNb3VzZT58IDxTLVJpZ2h0TW91c2U+CSAgIHNhbWUgYXMgIiMiIGF0IHRoZSBtb3VzZSBjbGljayBwb3NpdGlvbgorfDxTLVVwPnwJPFMtVXA+CQkxICBzYW1lIGFzIENUUkwtQgorfDxVbmRvPnwJPFVuZG8+CQkyICBzYW1lIGFzICJ1IgorfDxVcD58CQk8VXA+CQkxICBzYW1lIGFzICJrIgorfDxNb3VzZURvd24+fAk8TW91c2VEb3duPgkgICBzY3JvbGwgdGhyZWUgbGluZXMgZG93bndhcmRzCit8PFMtTW91c2VEb3duPnwJPFMtTW91c2VEb3duPgkgICBzY3JvbGwgYSBmdWxsIHBhZ2UgZG93bndhcmRzCit8PE1vdXNlVXA+fAk8TW91c2VVcD4JICAgc2Nyb2xsIHRocmVlIGxpbmVzIHVwd2FyZHMKK3w8Uy1Nb3VzZVVwPnwJPFMtTW91c2VVcD4JICAgc2Nyb2xsIGEgZnVsbCBwYWdlIHVwd2FyZHMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLjEgVGV4dCBvYmplY3RzCQkJCQkJKm9iamVjdHMqCisKK1RoZXNlIGNhbiBiZSB1c2VkIGFmdGVyIGFuIG9wZXJhdG9yIG9yIGluIFZpc3VhbCBtb2RlIHRvIHNlbGVjdCBhbiBvYmplY3QuCisKK3RhZwkJY29tbWFuZAkJICAgYWN0aW9uIGluIE5vcm1hbCBtb2RlCX4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfHZfYSh8CQlhKAkJICAgc2FtZSBhcyBhYgorfHZfYSl8CQlhKQkJICAgc2FtZSBhcyBhYgorfHZfYTx8CQlhPAkJICAgImEgPD4iIGZyb20gJzwnIHRvIHRoZSBtYXRjaGluZyAnPicKK3x2X2E+fAkJYT4JCSAgIHNhbWUgYXMgYTwKK3x2X2FCfAkJYUIJCSAgICJhIEJsb2NrIiBmcm9tICJbeyIgdG8gIl19IiAod2l0aCBicmFja2V0cykKK3x2X2FXfAkJYVcJCSAgICJhIFdPUkQiICh3aXRoIHdoaXRlIHNwYWNlKQorfHZfYVt8CQlhWwkJICAgImEgW10iIGZyb20gJ1snIHRvIHRoZSBtYXRjaGluZyAnXScKK3x2X2FdfAkJYV0JCSAgIHNhbWUgYXMgYVsKK3x2X2FifAkJYWIJCSAgICJhIGJsb2NrIiBmcm9tICJbKCIgdG8gIl0pIiAod2l0aCBicmFjZXMpCit8dl9hcHwJCWFwCQkgICAiYSBwYXJhZ3JhcGgiICh3aXRoIHdoaXRlIHNwYWNlKQorfHZfYXN8CQlhcwkJICAgImEgc2VudGVuY2UiICh3aXRoIHdoaXRlIHNwYWNlKQorfHZfYXd8CQlhdwkJICAgImEgd29yZCIgKHdpdGggd2hpdGUgc3BhY2UpCit8dl9he3wJCWF7CQkgICBzYW1lIGFzIGFCCit8dl9hfXwJCWF9CQkgICBzYW1lIGFzIGFCCit8dl9pKHwJCWkoCQkgICBzYW1lIGFzIGliCit8dl9pKXwJCWkpCQkgICBzYW1lIGFzIGliCit8dl9pPHwJCWk8CQkgICAiaW5uZXIgPD4iIGZyb20gJzwnIHRvIHRoZSBtYXRjaGluZyAnPicKK3x2X2k+fAkJaT4JCSAgIHNhbWUgYXMgaTwKK3x2X2lCfAkJaUIJCSAgICJpbm5lciBCbG9jayIgZnJvbSAiW3siIGFuZCAiXX0iCit8dl9pV3wJCWlXCQkgICAiaW5uZXIgV09SRCIKK3x2X2lbfAkJaVsJCSAgICJpbm5lciBbXSIgZnJvbSAnWycgdG8gdGhlIG1hdGNoaW5nICddJworfHZfaV18CQlpXQkJICAgc2FtZSBhcyBpWworfHZfaWJ8CQlpYgkJICAgImlubmVyIGJsb2NrIiBmcm9tICJbKCIgdG8gIl0pIgorfHZfaXB8CQlpcAkJICAgImlubmVyIHBhcmFncmFwaCIKK3x2X2lzfAkJaXMJCSAgICJpbm5lciBzZW50ZW5jZSIKK3x2X2l3fAkJaXcJCSAgICJpbm5lciB3b3JkIgorfHZfaXt8CQlpewkJICAgc2FtZSBhcyBpQgorfHZfaX18CQlpfQkJICAgc2FtZSBhcyBpQgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuMiBXaW5kb3cgY29tbWFuZHMJCQkJCQkqQ1RSTC1XKgorCit0YWcJCWNvbW1hbmQJCSAgIGFjdGlvbiBpbiBOb3JtYWwgbW9kZQl+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3xDVFJMLVdfQ1RSTC1CfAlDVFJMLVcgQ1RSTC1CCSAgIHNhbWUgYXMgIkNUUkwtVyBiIgorfENUUkwtV19DVFJMLUN8CUNUUkwtVyBDVFJMLUMJICAgc2FtZSBhcyAiQ1RSTC1XIGMiCit8Q1RSTC1XX0NUUkwtRHwJQ1RSTC1XIENUUkwtRAkgICBzYW1lIGFzICJDVFJMLVcgZCIKK3xDVFJMLVdfQ1RSTC1GfAlDVFJMLVcgQ1RSTC1GCSAgIHNhbWUgYXMgIkNUUkwtVyBmIgorCQlDVFJMLVcgQ1RSTC1HCSAgIHNhbWUgYXMgIkNUUkwtVyBnIC4uIgorfENUUkwtV19DVFJMLUh8CUNUUkwtVyBDVFJMLUgJICAgc2FtZSBhcyAiQ1RSTC1XIGgiCit8Q1RSTC1XX0NUUkwtSXwJQ1RSTC1XIENUUkwtSQkgICBzYW1lIGFzICJDVFJMLVcgaSIKK3xDVFJMLVdfQ1RSTC1KfAlDVFJMLVcgQ1RSTC1KCSAgIHNhbWUgYXMgIkNUUkwtVyBqIgorfENUUkwtV19DVFJMLUt8CUNUUkwtVyBDVFJMLUsJICAgc2FtZSBhcyAiQ1RSTC1XIGsiCit8Q1RSTC1XX0NUUkwtTHwJQ1RSTC1XIENUUkwtTAkgICBzYW1lIGFzICJDVFJMLVcgbCIKK3xDVFJMLVdfQ1RSTC1OfAlDVFJMLVcgQ1RSTC1OCSAgIHNhbWUgYXMgIkNUUkwtVyBuIgorfENUUkwtV19DVFJMLU98CUNUUkwtVyBDVFJMLU8JICAgc2FtZSBhcyAiQ1RSTC1XIG8iCit8Q1RSTC1XX0NUUkwtUHwJQ1RSTC1XIENUUkwtUAkgICBzYW1lIGFzICJDVFJMLVcgcCIKK3xDVFJMLVdfQ1RSTC1RfAlDVFJMLVcgQ1RSTC1RCSAgIHNhbWUgYXMgIkNUUkwtVyBxIgorfENUUkwtV19DVFJMLVJ8CUNUUkwtVyBDVFJMLVIJICAgc2FtZSBhcyAiQ1RSTC1XIHIiCit8Q1RSTC1XX0NUUkwtU3wJQ1RSTC1XIENUUkwtUwkgICBzYW1lIGFzICJDVFJMLVcgcyIKK3xDVFJMLVdfQ1RSTC1UfAlDVFJMLVcgQ1RSTC1UCSAgIHNhbWUgYXMgIkNUUkwtVyB0IgorfENUUkwtV19DVFJMLVZ8CUNUUkwtVyBDVFJMLVYJICAgc2FtZSBhcyAiQ1RSTC1XIHYiCit8Q1RSTC1XX0NUUkwtV3wJQ1RSTC1XIENUUkwtVwkgICBzYW1lIGFzICJDVFJMLVcgdyIKK3xDVFJMLVdfQ1RSTC1YfAlDVFJMLVcgQ1RSTC1YCSAgIHNhbWUgYXMgIkNUUkwtVyB4IgorfENUUkwtV19DVFJMLVp8CUNUUkwtVyBDVFJMLVoJICAgc2FtZSBhcyAiQ1RSTC1XIHoiCit8Q1RSTC1XX0NUUkwtXXwJQ1RSTC1XIENUUkwtXQkgICBzYW1lIGFzICJDVFJMLVcgXSIKK3xDVFJMLVdfQ1RSTC1efAlDVFJMLVcgQ1RSTC1eCSAgIHNhbWUgYXMgIkNUUkwtVyBeIgorfENUUkwtV19DVFJMLV98CUNUUkwtVyBDVFJMLV8JICAgc2FtZSBhcyAiQ1RSTC1XIF8iCit8Q1RSTC1XXyt8CUNUUkwtVyArCSAgIGluY3JlYXNlIGN1cnJlbnQgd2luZG93IGhlaWdodCBOIGxpbmVzCit8Q1RSTC1XXy18CUNUUkwtVyAtCSAgIGRlY3JlYXNlIGN1cnJlbnQgd2luZG93IGhlaWdodCBOIGxpbmVzCit8Q1RSTC1XXzx8CUNUUkwtVyA8CSAgIGRlY3JlYXNlIGN1cnJlbnQgd2luZG93IHdpZHRoIE4gY29sdW1ucworfENUUkwtV189fAlDVFJMLVcgPQkgICBtYWtlIGFsbCB3aW5kb3dzIHRoZSBzYW1lIGhlaWdodAorfENUUkwtV18+fAlDVFJMLVcgPgkgICBpbmNyZWFzZSBjdXJyZW50IHdpbmRvdyB3aWR0aCBOIGNvbHVtbnMKK3xDVFJMLVdfSHwJQ1RSTC1XIEgJICAgbW92ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgZmFyIGxlZnQKK3xDVFJMLVdfSnwJQ1RSTC1XIEoJICAgbW92ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgdmVyeSBib3R0b20KK3xDVFJMLVdfS3wJQ1RSTC1XIEsJICAgbW92ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgdmVyeSB0b3AKK3xDVFJMLVdfTHwJQ1RSTC1XIEwJICAgbW92ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgZmFyIHJpZ2h0Cit8Q1RSTC1XX1B8CUNUUkwtVyBQCSAgIGdvIHRvIHByZXZpZXcgd2luZG93Cit8Q1RSTC1XX1J8CUNUUkwtVyBSCSAgIHJvdGF0ZSB3aW5kb3dzIHVwd2FyZHMgTiB0aW1lcworfENUUkwtV19TfAlDVFJMLVcgUwkgICBzYW1lIGFzICJDVFJMLVcgcyIKK3xDVFJMLVdfV3wJQ1RSTC1XIFcJICAgZ28gdG8gTiBwcmV2aW91cyB3aW5kb3cgKHdyYXAgYXJvdW5kKQorfENUUkwtV19dfAlDVFJMLVcgXQkgICBzcGxpdCB3aW5kb3cgYW5kIGp1bXAgdG8gdGFnIHVuZGVyIGN1cnNvcgorfENUUkwtV19efAlDVFJMLVcgXgkgICBzcGxpdCBjdXJyZW50IHdpbmRvdyBhbmQgZWRpdCBhbHRlcm5hdGUKKwkJCQkgICBmaWxlIE4KK3xDVFJMLVdfX3wJQ1RSTC1XIF8JICAgc2V0IGN1cnJlbnQgd2luZG93IGhlaWdodCB0byBOIChkZWZhdWx0OgorCQkJCSAgIHZlcnkgaGlnaCkKK3xDVFJMLVdfYnwJQ1RSTC1XIGIJICAgZ28gdG8gYm90dG9tIHdpbmRvdworfENUUkwtV19jfAlDVFJMLVcgYwkgICBjbG9zZSBjdXJyZW50IHdpbmRvdyAobGlrZSB8OmNsb3NlfCkKK3xDVFJMLVdfZHwJQ1RSTC1XIGQJICAgc3BsaXQgd2luZG93IGFuZCBqdW1wIHRvIGRlZmluaXRpb24gdW5kZXIKKwkJCQkgICB0aGUgY3Vyc29yCit8Q1RSTC1XX2Z8CUNUUkwtVyBmCSAgIHNwbGl0IHdpbmRvdyBhbmQgZWRpdCBmaWxlIG5hbWUgdW5kZXIgdGhlCisJCQkJICAgY3Vyc29yCit8Q1RSTC1XX2dfQ1RSTC1dfCBDVFJMLVcgZyBDVFJMLV0gIHNwbGl0IHdpbmRvdyBhbmQgZG8gfDp0anVtcHwgdG8gdGFnIHVuZGVyCisJCQkJICAgY3Vyc29yCit8Q1RSTC1XX2ddfAlDVFJMLVcgZyBdCSAgIHNwbGl0IHdpbmRvdyBhbmQgZG8gfDp0c2VsZWN0fCBmb3IgdGFnCisJCQkJICAgdW5kZXIgY3Vyc29yCit8Q1RSTC1XX2d9fAlDVFJMLVcgZyB9CSAgIGRvIGEgfDpwdGp1bXB8IHRvIHRoZSB0YWcgdW5kZXIgdGhlIGN1cnNvcgorfENUUkwtV19ofAlDVFJMLVcgaAkgICBnbyB0byBOdGggbGVmdCB3aW5kb3cgKHN0b3AgYXQgZmlyc3Qgd2luZG93KQorfENUUkwtV19pfAlDVFJMLVcgaQkgICBzcGxpdCB3aW5kb3cgYW5kIGp1bXAgdG8gZGVjbGFyYXRpb24gb2YKKwkJCQkgICBpZGVudGlmaWVyIHVuZGVyIHRoZSBjdXJzb3IKK3xDVFJMLVdfanwJQ1RSTC1XIGoJICAgZ28gTiB3aW5kb3dzIGRvd24gKHN0b3AgYXQgbGFzdCB3aW5kb3cpCit8Q1RSTC1XX2t8CUNUUkwtVyBrCSAgIGdvIE4gd2luZG93cyB1cCAoc3RvcCBhdCBmaXJzdCB3aW5kb3cpCit8Q1RSTC1XX2x8CUNUUkwtVyBsCSAgIGdvIHRvIE50aCByaWdodCB3aW5kb3cgKHN0b3AgYXQgbGFzdCB3aW5kb3cpCit8Q1RSTC1XX258CUNUUkwtVyBuCSAgIG9wZW4gbmV3IHdpbmRvdywgTiBsaW5lcyBoaWdoCit8Q1RSTC1XX298CUNUUkwtVyBvCSAgIGNsb3NlIGFsbCBidXQgY3VycmVudCB3aW5kb3cgKGxpa2UgfDpvbmx5fCkKK3xDVFJMLVdfcHwJQ1RSTC1XIHAJICAgZ28gdG8gcHJldmlvdXMgKGxhc3QgYWNjZXNzZWQpIHdpbmRvdworfENUUkwtV19xfAlDVFJMLVcgcQkgICBxdWl0IGN1cnJlbnQgd2luZG93IChsaWtlIHw6cXVpdHwpCit8Q1RSTC1XX3J8CUNUUkwtVyByCSAgIHJvdGF0ZSB3aW5kb3dzIGRvd253YXJkcyBOIHRpbWVzCit8Q1RSTC1XX3N8CUNUUkwtVyBzCSAgIHNwbGl0IGN1cnJlbnQgd2luZG93IGluIHR3byBwYXJ0cywgbmV3CisJCQkJICAgd2luZG93IE4gbGluZXMgaGlnaAorfENUUkwtV190fAlDVFJMLVcgdAkgICBnbyB0byB0b3Agd2luZG93Cit8Q1RSTC1XX3Z8CUNUUkwtVyB2CSAgIHNwbGl0IGN1cnJlbnQgd2luZG93IHZlcnRpY2FsbHksIG5ldyB3aW5kb3cKKwkJCQkgICBOIGxpbmVzIHdpZGUKK3xDVFJMLVdfd3wJQ1RSTC1XIHcJICAgZ28gdG8gTiBuZXh0IHdpbmRvdyAod3JhcCBhcm91bmQpCit8Q1RSTC1XX3h8CUNUUkwtVyB4CSAgIGV4Y2hhbmdlIGN1cnJlbnQgd2luZG93IHdpdGggd2luZG93IE4KKwkJCQkgICAoZGVmYXVsdDogbmV4dCB3aW5kb3cpCit8Q1RSTC1XX3p8CUNUUkwtVyB6CSAgIGNsb3NlIHByZXZpZXcgd2luZG93Cit8Q1RSTC1XX2JhcnwJQ1RSTC1XIHwJICAgc2V0IHdpbmRvdyB3aWR0aCB0byBOIGNvbHVtbnMKK3xDVFJMLVdffXwJQ1RSTC1XIH0JICAgc2hvdyB0YWcgdW5kZXIgY3Vyc29yIGluIHByZXZpZXcgd2luZG93Cit8Q1RSTC1XXzxEb3duPnwJQ1RSTC1XIDxEb3duPgkgICBzYW1lIGFzICJDVFJMLVcgaiIKK3xDVFJMLVdfPFVwPnwJQ1RSTC1XIDxVcD4JICAgc2FtZSBhcyAiQ1RSTC1XIGsiCit8Q1RSTC1XXzxMZWZ0PnwJQ1RSTC1XIDxMZWZ0PgkgICBzYW1lIGFzICJDVFJMLVcgaCIKK3xDVFJMLVdfPFJpZ2h0PnwgQ1RSTC1XIDxSaWdodD4JICAgc2FtZSBhcyAiQ1RSTC1XIGwiCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4zIFNxdWFyZSBicmFja2V0IGNvbW1hbmRzCQkJCQkqWyogKl0qCisKK3RhZwkJY2hhcgkgICAgICBub3RlIGFjdGlvbiBpbiBOb3JtYWwgbW9kZQl+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3xbX0NUUkwtRHwJWyBDVFJMLUQJICAganVtcCB0byBmaXJzdCAjZGVmaW5lIGZvdW5kIGluIGN1cnJlbnQgYW5kCisJCQkJICAgaW5jbHVkZWQgZmlsZXMgbWF0Y2hpbmcgdGhlIHdvcmQgdW5kZXIgdGhlCisJCQkJICAgY3Vyc29yLCBzdGFydCBzZWFyY2hpbmcgYXQgYmVnaW5uaW5nIG9mCisJCQkJICAgY3VycmVudCBmaWxlCit8W19DVFJMLUl8CVsgQ1RSTC1JCSAgIGp1bXAgdG8gZmlyc3QgbGluZSBpbiBjdXJyZW50IGFuZCBpbmNsdWRlZAorCQkJCSAgIGZpbGVzIHRoYXQgY29udGFpbnMgdGhlIHdvcmQgdW5kZXIgdGhlCisJCQkJICAgY3Vyc29yLCBzdGFydCBzZWFyY2hpbmcgYXQgYmVnaW5uaW5nIG9mCisJCQkJICAgY3VycmVudCBmaWxlCit8WyN8CQlbIwkJMSAgY3Vyc29yIHRvIE4gcHJldmlvdXMgdW5tYXRjaGVkICNpZiwgI2Vsc2UKKwkJCQkgICBvciAjaWZkZWYKK3xbJ3wJCVsnCQkxICBjdXJzb3IgdG8gcHJldmlvdXMgbG93ZXJjYXNlIG1hcmssIG9uIGZpcnN0CisJCQkJICAgbm9uLWJsYW5rCit8Wyh8CQlbKAkJMSAgY3Vyc29yIE4gdGltZXMgYmFjayB0byB1bm1hdGNoZWQgJygnCit8W3N0YXJ8CQlbKgkJMSAgc2FtZSBhcyAiWy8iCit8W2B8CQlbYAkJMSAgY3Vyc29yIHRvIHByZXZpb3VzIGxvd2VyY2FzZSBtYXJrCit8Wy98CQlbLwkJMSAgY3Vyc29yIHRvIE4gcHJldmlvdXMgc3RhcnQgb2YgYSBDIGNvbW1lbnQKK3xbRHwJCVtECQkgICBsaXN0IGFsbCBkZWZpbmVzIGZvdW5kIGluIGN1cnJlbnQgYW5kCisJCQkJICAgaW5jbHVkZWQgZmlsZXMgbWF0Y2hpbmcgdGhlIHdvcmQgdW5kZXIgdGhlCisJCQkJICAgY3Vyc29yLCBzdGFydCBzZWFyY2hpbmcgYXQgYmVnaW5uaW5nIG9mCisJCQkJICAgY3VycmVudCBmaWxlCit8W0l8CQlbSQkJICAgbGlzdCBhbGwgbGluZXMgZm91bmQgaW4gY3VycmVudCBhbmQKKwkJCQkgICBpbmNsdWRlZCBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIHdvcmQgdW5kZXIKKwkJCQkgICB0aGUgY3Vyc29yLCBzdGFydCBzZWFyY2hpbmcgYXQgYmVnaW5uaW5nIG9mCisJCQkJICAgY3VycmVudCBmaWxlCit8W1B8CQlbUAkJMiAgc2FtZSBhcyAiW3AiCit8W1t8CQlbWwkJMSAgY3Vyc29yIE4gc2VjdGlvbnMgYmFja3dhcmQKK3xbXXwJCVtdCQkxICBjdXJzb3IgTiBTRUNUSU9OUyBiYWNrd2FyZAorfFtjfAkJW2MJCTEgIGN1cnNvciBOIHRpbWVzIGJhY2t3YXJkcyB0byBzdGFydCBvZiBjaGFuZ2UKK3xbZHwJCVtkCQkgICBzaG93IGZpcnN0ICNkZWZpbmUgZm91bmQgaW4gY3VycmVudCBhbmQKKwkJCQkgICBpbmNsdWRlZCBmaWxlcyBtYXRjaGluZyB0aGUgd29yZCB1bmRlciB0aGUKKwkJCQkgICBjdXJzb3IsIHN0YXJ0IHNlYXJjaGluZyBhdCBiZWdpbm5pbmcgb2YKKwkJCQkgICBjdXJyZW50IGZpbGUKK3xbZnwJCVtmCQkgICBzYW1lIGFzICJnZiIKK3xbaXwJCVtpCQkgICBzaG93IGZpcnN0IGxpbmUgZm91bmQgaW4gY3VycmVudCBhbmQKKwkJCQkgICBpbmNsdWRlZCBmaWxlcyB0aGF0IGNvbnRhaW5zIHRoZSB3b3JkIHVuZGVyCisJCQkJICAgdGhlIGN1cnNvciwgc3RhcnQgc2VhcmNoaW5nIGF0IGJlZ2lubmluZyBvZgorCQkJCSAgIGN1cnJlbnQgZmlsZQorfFtwfAkJW3AJCTIgIGxpa2UgIlAiLCBidXQgYWRqdXN0IGluZGVudCB0byBjdXJyZW50IGxpbmUKK3xbbXwJCVttCQkxICBjdXJzb3IgTiB0aW1lcyBiYWNrIHRvIHN0YXJ0IG9mIG1lbWJlcgorCQkJCSAgIGZ1bmN0aW9uCit8W3p8CQlbegkJMSAgbW92ZSB0byBzdGFydCBvZiBvcGVuIGZvbGQKK3xbe3wJCVt7CQkxICBjdXJzb3IgTiB0aW1lcyBiYWNrIHRvIHVubWF0Y2hlZCAneycKK3xbPE1pZGRsZU1vdXNlPiBbPE1pZGRsZU1vdXNlPgkyICBzYW1lIGFzICJbcCIKKworfF1fQ1RSTC1EfAldIENUUkwtRAkgICBqdW1wIHRvIGZpcnN0ICNkZWZpbmUgZm91bmQgaW4gY3VycmVudCBhbmQKKwkJCQkgICBpbmNsdWRlZCBmaWxlcyBtYXRjaGluZyB0aGUgd29yZCB1bmRlciB0aGUKKwkJCQkgICBjdXJzb3IsIHN0YXJ0IHNlYXJjaGluZyBhdCBjdXJzb3IgcG9zaXRpb24KK3xdX0NUUkwtSXwJXSBDVFJMLUkJICAganVtcCB0byBmaXJzdCBsaW5lIGluIGN1cnJlbnQgYW5kIGluY2x1ZGVkCisJCQkJICAgZmlsZXMgdGhhdCBjb250YWlucyB0aGUgd29yZCB1bmRlciB0aGUKKwkJCQkgICBjdXJzb3IsIHN0YXJ0IHNlYXJjaGluZyBhdCBjdXJzb3IgcG9zaXRpb24KK3xdI3wJCV0jCQkxICBjdXJzb3IgdG8gTiBuZXh0IHVubWF0Y2hlZCAjZW5kaWYgb3IgI2Vsc2UKK3xdJ3wJCV0nCQkxICBjdXJzb3IgdG8gbmV4dCBsb3dlcmNhc2UgbWFyaywgb24gZmlyc3QKKwkJCQkgICBub24tYmxhbmsKK3xdKXwJCV0pCQkxICBjdXJzb3IgTiB0aW1lcyBmb3J3YXJkIHRvIHVubWF0Y2hlZCAnKScKK3xdc3RhcnwJCV0qCQkxICBzYW1lIGFzICJdLyIKK3xdYHwJCV1gCQkxICBjdXJzb3IgdG8gbmV4dCBsb3dlcmNhc2UgbWFyaworfF0vfAkJXS8JCTEgIGN1cnNvciB0byBOIG5leHQgZW5kIG9mIGEgQyBjb21tZW50Cit8XUR8CQldRAkJICAgbGlzdCBhbGwgI2RlZmluZXMgZm91bmQgaW4gY3VycmVudCBhbmQKKwkJCQkgICBpbmNsdWRlZCBmaWxlcyBtYXRjaGluZyB0aGUgd29yZCB1bmRlciB0aGUKKwkJCQkgICBjdXJzb3IsIHN0YXJ0IHNlYXJjaGluZyBhdCBjdXJzb3IgcG9zaXRpb24KK3xdSXwJCV1JCQkgICBsaXN0IGFsbCBsaW5lcyBmb3VuZCBpbiBjdXJyZW50IGFuZAorCQkJCSAgIGluY2x1ZGVkIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgd29yZCB1bmRlcgorCQkJCSAgIHRoZSBjdXJzb3IsIHN0YXJ0IHNlYXJjaGluZyBhdCBjdXJzb3IKKwkJCQkgICBwb3NpdGlvbgorfF1QfAkJXVAJCTIgIHNhbWUgYXMgIltwIgorfF1bfAkJXVsJCTEgIGN1cnNvciBOIFNFQ1RJT05TIGZvcndhcmQKK3xdXXwJCV1dCQkxICBjdXJzb3IgTiBzZWN0aW9ucyBmb3J3YXJkCit8XWN8CQldYwkJMSAgY3Vyc29yIE4gdGltZXMgZm9yd2FyZCB0byBzdGFydCBvZiBjaGFuZ2UKK3xdZHwJCV1kCQkgICBzaG93IGZpcnN0ICNkZWZpbmUgZm91bmQgaW4gY3VycmVudCBhbmQKKwkJCQkgICBpbmNsdWRlZCBmaWxlcyBtYXRjaGluZyB0aGUgd29yZCB1bmRlciB0aGUKKwkJCQkgICBjdXJzb3IsIHN0YXJ0IHNlYXJjaGluZyBhdCBjdXJzb3IgcG9zaXRpb24KK3xdZnwJCV1mCQkgICBzYW1lIGFzICJnZiIKK3xdaXwJCV1pCQkgICBzaG93IGZpcnN0IGxpbmUgZm91bmQgaW4gY3VycmVudCBhbmQKKwkJCQkgICBpbmNsdWRlZCBmaWxlcyB0aGF0IGNvbnRhaW5zIHRoZSB3b3JkIHVuZGVyCisJCQkJICAgdGhlIGN1cnNvciwgc3RhcnQgc2VhcmNoaW5nIGF0IGN1cnNvcgorCQkJCSAgIHBvc2l0aW9uCit8XXB8CQldcAkJMiAgbGlrZSAicCIsIGJ1dCBhZGp1c3QgaW5kZW50IHRvIGN1cnJlbnQgbGluZQorfF1tfAkJXW0JCTEgIGN1cnNvciBOIHRpbWVzIGZvcndhcmQgdG8gZW5kIG9mIG1lbWJlcgorCQkJCSAgIGZ1bmN0aW9uCit8XXp8CQldegkJMSAgbW92ZSB0byBlbmQgb2Ygb3BlbiBmb2xkCit8XX18CQldfQkJMSAgY3Vyc29yIE4gdGltZXMgZm9yd2FyZCB0byB1bm1hdGNoZWQgJ30nCit8XTxNaWRkbGVNb3VzZT4gXTxNaWRkbGVNb3VzZT4JMiAgc2FtZSBhcyAiXXAiCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi40IENvbW1hbmRzIHN0YXJ0aW5nIHdpdGggJ2cnCQkJCQkJKmcqCisKK3RhZwkJY2hhcgkgICAgICBub3RlIGFjdGlvbiBpbiBOb3JtYWwgbW9kZQl+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3xnX0NUUkwtQXwJZyBDVFJMLUEJICAgb25seSB3aGVuIGNvbXBpbGVkIHdpdGggTUVNX1BST0ZJTEUKKwkJCQkgICBkZWZpbmVkOiBkdW1wIGEgbWVtb3J5IHByb2ZpbGUKK3xnX0NUUkwtR3wJZyBDVFJMLUcJICAgc2hvdyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGN1cnNvcgorCQkJCSAgIHBvc2l0aW9uCit8Z19DVFJMLUh8CWcgQ1RSTC1ICSAgIHN0YXJ0IFNlbGVjdCBibG9jayBtb2RlCit8Z19DVFJMLV18CWcgQ1RSTC1dCSAgIHw6dGp1bXB8IHRvIHRoZSB0YWcgdW5kZXIgdGhlIGN1cnNvcgorfGcjfAkJZyMJCTEgIGxpa2UgIiMiLCBidXQgd2l0aG91dCB1c2luZyAiXDwiIGFuZCAiXD4iCit8ZyR8CQlnJAkJMSAgd2hlbiAnd3JhcCcgb2ZmIGdvIHRvIHJpZ2h0bW9zdCBjaGFyYWN0ZXIgb2YKKwkJCQkgICB0aGUgY3VycmVudCBsaW5lIHRoYXQgaXMgb24gdGhlIHNjcmVlbjsKKwkJCQkgICB3aGVuICd3cmFwJyBvbiBnbyB0byB0aGUgcmlnaHRtb3N0IGNoYXJhY3RlcgorCQkJCSAgIG9mIHRoZSBjdXJyZW50IHNjcmVlbiBsaW5lCit8ZyZ8CQlnJgkJMiAgcmVwZWF0IGxhc3QgIjpzIiBvbiBhbGwgbGluZXMKK3xnJ3wJCWcne21hcmt9CTEgIGxpa2UgfCd8IGJ1dCB3aXRob3V0IGNoYW5naW5nIHRoZSBqdW1wbGlzdAorfGdgfAkJZ2B7bWFya30JMSAgbGlrZSB8YHwgYnV0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGp1bXBsaXN0Cit8Z3N0YXJ8CQlnKgkJMSAgbGlrZSAiKiIsIGJ1dCB3aXRob3V0IHVzaW5nICJcPCIgYW5kICJcPiIKK3xnMHwJCWcwCQkxICB3aGVuICd3cmFwJyBvZmYgZ28gdG8gbGVmdG1vc3QgY2hhcmFjdGVyIG9mCisJCQkJICAgdGhlIGN1cnJlbnQgbGluZSB0aGF0IGlzIG9uIHRoZSBzY3JlZW47CisJCQkJICAgd2hlbiAnd3JhcCcgb24gZ28gdG8gdGhlIGxlZnRtb3N0IGNoYXJhY3RlcgorCQkJCSAgIG9mIHRoZSBjdXJyZW50IHNjcmVlbiBsaW5lCit8Zzh8CQlnOAkJICAgcHJpbnQgaGV4IHZhbHVlIG9mIGJ5dGVzIHVzZWQgaW4gVVRGLTgKKwkJCQkgICBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvcgorfGc/fAkJZz8JCTIgIFJvdDEzIGVuY29kaW5nIG9wZXJhdG9yCit8Zz9nP3wJCWc/PwkJMiAgUm90MTMgZW5jb2RlIGN1cnJlbnQgbGluZQorfGc/Zz98CQlnP2c/CQkyICBSb3QxMyBlbmNvZGUgY3VycmVudCBsaW5lCit8Z0R8CQlnRAkJMSAgZ28gdG8gZGVmaW5pdGlvbiBvZiB3b3JkIHVuZGVyIHRoZSBjdXJzb3IKKwkJCQkgICBpbiBjdXJyZW50IGZpbGUKK3xnRXwJCWdFCQkxICBnbyBiYWNrd2FyZHMgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMKKwkJCQkgICBXT1JECit8Z0h8CQlnSAkJICAgc3RhcnQgU2VsZWN0IGxpbmUgbW9kZQorfGdJfAkJZ0kJCTIgIGxpa2UgIkkiLCBidXQgYWx3YXlzIHN0YXJ0IGluIGNvbHVtbiAxCit8Z0p8CQlnSgkJMiAgam9pbiBsaW5lcyB3aXRob3V0IGluc2VydGluZyBzcGFjZQorfGdQfAkJWyJ4XWdQCQkyICBwdXQgdGhlIHRleHQgW2Zyb20gcmVnaXN0ZXIgeF0gYmVmb3JlIHRoZQorCQkJCSAgIGN1cnNvciBOIHRpbWVzLCBsZWF2ZSB0aGUgY3Vyc29yIGFmdGVyIGl0Cit8Z1J8CQlnUgkJMiAgZW50ZXIgVmlydHVhbCBSZXBsYWNlIG1vZGUKK3xnVXwJCWdVe21vdGlvbn0JMiAgbWFrZSBObW92ZSB0ZXh0IHVwcGVyY2FzZQorfGdWfAkJZ1YJCSAgIGRvbid0IHJlc2VsZWN0IHRoZSBwcmV2aW91cyBWaXN1YWwgYXJlYQorCQkJCSAgIHdoZW4gZXhlY3V0aW5nIGEgbWFwcGluZyBvciBtZW51IGluIFNlbGVjdAorCQkJCSAgIG1vZGUKK3xnXXwJCWddCQkgICA6dHNlbGVjdCBvbiB0aGUgdGFnIHVuZGVyIHRoZSBjdXJzb3IKK3xnXnwJCWdeCQkxICB3aGVuICd3cmFwJyBvZmYgZ28gdG8gbGVmdG1vc3Qgbm9uLXdoaXRlCisJCQkJICAgY2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxpbmUgdGhhdCBpcyBvbgorCQkJCSAgIHRoZSBzY3JlZW47IHdoZW4gJ3dyYXAnIG9uIGdvIHRvIHRoZQorCQkJCSAgIGxlZnRtb3N0IG5vbi13aGl0ZSBjaGFyYWN0ZXIgb2YgdGhlIGN1cnJlbnQKKwkJCQkgICBzY3JlZW4gbGluZQorfGdhfAkJZ2EJCSAgIHByaW50IGFzY2lpIHZhbHVlIG9mIGNoYXJhY3RlciB1bmRlciB0aGUKKwkJCQkgICBjdXJzb3IKK3xnZHwJCWdkCQkxICBnbyB0byBkZWZpbml0aW9uIG9mIHdvcmQgdW5kZXIgdGhlIGN1cnNvcgorCQkJCSAgIGluIGN1cnJlbnQgZnVuY3Rpb24KK3xnZXwJCWdlCQkxICBnbyBiYWNrd2FyZHMgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMKKwkJCQkgICB3b3JkCit8Z2Z8CQlnZgkJICAgc3RhcnQgZWRpdGluZyB0aGUgZmlsZSB3aG9zZSBuYW1lIGlzIHVuZGVyCisJCQkJICAgdGhlIGN1cnNvcgorfGdnfAkJZ2cJCTEgIGN1cnNvciB0byBsaW5lIE4sIGRlZmF1bHQgZmlyc3QgbGluZQorfGdofAkJZ2gJCSAgIHN0YXJ0IFNlbGVjdCBtb2RlCit8Z2l8CQlnaQkJMiAgbGlrZSAiaSIsIGJ1dCBmaXJzdCBtb3ZlIHRvIHRoZSB8J158IG1hcmsKK3xnanwJCWdqCQkxICBsaWtlICJqIiwgYnV0IHdoZW4gJ3dyYXAnIG9uIGdvIE4gc2NyZWVuCisJCQkJICAgbGluZXMgZG93bgorfGdrfAkJZ2sJCTEgIGxpa2UgImsiLCBidXQgd2hlbiAnd3JhcCcgb24gZ28gTiBzY3JlZW4KKwkJCQkgICBsaW5lcyB1cAorfGdtfAkJZ20JCTEgIGdvIHRvIGNoYXJhY3RlciBhdCBtaWRkbGUgb2YgdGhlIHNjcmVlbmxpbmUKK3xnb3wJCWdvCQkxICBjdXJzb3IgdG8gYnl0ZSBOIGluIHRoZSBidWZmZXIKK3xncHwJCVsieF1ncAkJMiAgcHV0IHRoZSB0ZXh0IFtmcm9tIHJlZ2lzdGVyIHhdIGFmdGVyIHRoZQorCQkJCSAgIGN1cnNvciBOIHRpbWVzLCBsZWF2ZSB0aGUgY3Vyc29yIGFmdGVyIGl0Cit8Z3F8CQlncXttb3Rpb259CTIgIGZvcm1hdCBObW92ZSB0ZXh0Cit8Z3J8CQlncntjaGFyfQkyICB2aXJ0dWFsIHJlcGxhY2UgTiBjaGFycyB3aXRoIHtjaGFyfQorfGdzfAkJZ3MJCSAgIGdvIHRvIHNsZWVwIGZvciBOIHNlY29uZHMgKGRlZmF1bHQgMSkKK3xndXwJCWd1e21vdGlvbn0JMiAgbWFrZSBObW92ZSB0ZXh0IGxvd2VyY2FzZQorfGd2fAkJZ3YJCSAgIHJlc2VsZWN0IHRoZSBwcmV2aW91cyBWaXN1YWwgYXJlYQorfGd3fAkJZ3d7bW90aW9ufQkyICBmb3JtYXQgTm1vdmUgdGV4dCBhbmQga2VlcCBjdXJzb3IKK3xnfnwJCWd+e21vdGlvbn0JMiAgc3dhcCBjYXNlIGZvciBObW92ZSB0ZXh0Cit8ZzxEb3duPnwJZzxEb3duPgkJMSAgc2FtZSBhcyAiZ2oiCit8ZzxFbmQ+fAlnPEVuZD4JCTEgIHNhbWUgYXMgImckIgorfGc8SG9tZT58CWc8SG9tZT4JCTEgIHNhbWUgYXMgImcwIgorfGc8TGVmdE1vdXNlPnwJZzxMZWZ0TW91c2U+CSAgIHNhbWUgYXMgPEMtTGVmdE1vdXNlPgorCQlnPE1pZGRsZU1vdXNlPgkgICBzYW1lIGFzIDxDLU1pZGRsZU1vdXNlPgorfGc8UmlnaHRNb3VzZT58CWc8UmlnaHRNb3VzZT4JICAgc2FtZSBhcyA8Qy1SaWdodE1vdXNlPgorfGc8VXA+fAkJZzxVcD4JCTEgIHNhbWUgYXMgImdrIgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuNSBDb21tYW5kcyBzdGFydGluZyB3aXRoICd6JwkJCQkJCSp6KgorCit0YWcJCWNoYXIJICAgICAgbm90ZSBhY3Rpb24gaW4gTm9ybWFsIG1vZGUJfgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ejxDUj58CQl6PENSPgkJICAgcmVkcmF3LCBjdXJzb3IgbGluZSB0byB0b3Agb2Ygd2luZG93LAorCQkJCSAgIGN1cnNvciBvbiBmaXJzdCBub24tYmxhbmsKK3x6TjxDUj58CXp7aGVpZ2h0fTxDUj4JICAgcmVkcmF3LCBtYWtlIHdpbmRvdyB7aGVpZ2h0fSBsaW5lcyBoaWdoCit8eit8CQl6KwkJICAgY3Vyc29yIG9uIGxpbmUgTiAoZGVmYXVsdCBsaW5lIGJlbG93CisJCQkJICAgd2luZG93KSwgb3RoZXJ3aXNlIGxpa2UgIno8Q1I+IgorfHotfAkJei0JCSAgIHJlZHJhdywgY3Vyc29yIGxpbmUgYXQgYm90dG9tIG9mIHdpbmRvdywKKwkJCQkgICBjdXJzb3Igb24gZmlyc3Qgbm9uLWJsYW5rCit8ei58CQl6LgkJICAgcmVkcmF3LCBjdXJzb3IgbGluZSB0byBjZW50ZXIgb2Ygd2luZG93LAorCQkJCSAgIGN1cnNvciBvbiBmaXJzdCBub24tYmxhbmsKK3x6QXwJCXpBCQkgICBvcGVuIGEgY2xvc2VkIGZvbGQgb3IgY2xvc2UgYW4gb3BlbiBmb2xkCisJCQkJICAgcmVjdXJzaXZlbHkKK3x6Q3wJCXpDCQkgICBjbG9zZSBmb2xkcyByZWN1cnNpdmVseQorfHpEfAkJekQJCSAgIGRlbGV0ZSBmb2xkcyByZWN1cnNpdmVseQorfHpFfAkJekUJCSAgIGVsaW1pbmF0ZSBhbGwgZm9sZHMKK3x6RnwJCXpGCQkgICBjcmVhdGUgYSBmb2xkIGZvciBOIGxpbmVzCit8ek18CQl6TQkJICAgc2V0ICdmb2xkbGV2ZWwnIHRvIHplcm8KK3x6TnwJCXpOCQkgICBzZXQgJ2ZvbGRlbmFibGUnCit8ek98CQl6TwkJICAgb3BlbiBmb2xkcyByZWN1cnNpdmVseQorfHpSfAkJelIJCSAgIHNldCAnZm9sZGxldmVsJyB0byB0aGUgZGVlcGVzdCBmb2xkCit8elh8CQl6WAkJICAgcmUtYXBwbHkgJ2ZvbGRsZXZlbCcKK3x6XnwJCXpeCQkgICBjdXJzb3Igb24gbGluZSBOIChkZWZhdWx0IGxpbmUgYWJvdmUKKwkJCQkgICB3aW5kb3cpLCBvdGhlcndpc2UgbGlrZSAiei0iCit8emF8CQl6YQkJICAgb3BlbiBhIGNsb3NlZCBmb2xkLCBjbG9zZSBhbiBvcGVuIGZvbGQKK3x6YnwJCXpiCQkgICByZWRyYXcsIGN1cnNvciBsaW5lIGF0IGJvdHRvbSBvZiB3aW5kb3cKK3x6Y3wJCXpjCQkgICBjbG9zZSBhIGZvbGQKK3x6ZHwJCXpkCQkgICBkZWxldGUgYSBmb2xkCit8emV8CQl6ZQkJICAgd2hlbiAnd3JhcCcgb2ZmIHNjcm9sbCBob3Jpem9udGFsbHkgdG8KKwkJCQkgICBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmQgKHJpZ2h0IHNpZGUpCisJCQkJICAgb2YgdGhlIHNjcmVlbgorfHpmfAkJemZ7bW90aW9ufQkgICBjcmVhdGUgYSBmb2xkIGZvciBObW92ZSB0ZXh0Cit8emh8CQl6aAkJICAgd2hlbiAnd3JhcCcgb2ZmIHNjcm9sbCBzY3JlZW4gTiBjaGFyYWN0ZXJzCisJCQkJICAgdG8gdGhlIHJpZ2h0Cit8eml8CQl6aQkJICAgdG9nZ2xlICdmb2xkZW5hYmxlJworfHpqfAkJemoJCTEgIG1vdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGZvbGQKK3x6a3wJCXprCQkxICBtb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGZvbGQKK3x6bHwJCXpsCQkgICB3aGVuICd3cmFwJyBvZmYgc2Nyb2xsIHNjcmVlbiBOIGNoYXJhY3RlcnMKKwkJCQkgICB0byB0aGUgbGVmdAorfHptfAkJem0JCSAgIHN1YnRyYWN0IG9uZSBmcm9tICdmb2xkbGV2ZWwnCit8em58CQl6bgkJICAgcmVzZXQgJ2ZvbGRlbmFibGUnCit8em98CQl6bwkJICAgb3BlbiBmb2xkCit8enJ8CQl6cgkJICAgYWRkIG9uZSB0byAnZm9sZGxldmVsJworfHpzfAkJenMJCSAgIHdoZW4gJ3dyYXAnIG9mZiBzY3JvbGwgaG9yaXpvbnRhbGx5IHRvCisJCQkJICAgcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgc3RhcnQgKGxlZnQKKwkJCQkgICBzaWRlKSBvZiB0aGUgc2NyZWVuCit8enR8CQl6dAkJICAgcmVkcmF3LCBjdXJzb3IgbGluZSBhdCB0b3Agb2Ygd2luZG93Cit8enZ8CQl6dgkJICAgb3BlbiBlbm91Z2ggZm9sZHMgdG8gdmlldyB0aGUgY3Vyc29yIGxpbmUKK3x6eHwJCXp4CQkgICByZS1hcHBseSAnZm9sZGxldmVsJyBhbmQgZG8gInp2IgorfHp6fAkJenoJCSAgIHJlZHJhdywgY3Vyc29yIGxpbmUgYXQgY2VudGVyIG9mIHdpbmRvdworfHo8TGVmdD58CXo8TGVmdD4JCSAgIHNhbWUgYXMgInpoIgorfHo8UmlnaHQ+fAl6PFJpZ2h0PgkgICBzYW1lIGFzICJ6bCIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBWaXN1YWwgbW9kZQkJCQkJCSp2aXN1YWwtaW5kZXgqCisKK01vc3QgY29tbWFuZHMgaW4gVmlzdWFsIG1vZGUgYXJlIHRoZSBzYW1lIGFzIGluIE5vcm1hbCBtb2RlLiBUaGUgb25lcyBsaXN0ZWQKK2hlcmUgYXJlIHRob3NlIHRoYXQgYXJlIGRpZmZlcmVudC4KKwordGFnCQljb21tYW5kCSAgICAgIG5vdGUgYWN0aW9uIGluIFZpc3VhbCBtb2RlCX4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfHZfQ1RSTC1cX0NUUkwtTnwgQ1RSTC1cIENUUkwtTgkgICBzdG9wIFZpc3VhbCBtb2RlCit8dl9DVFJMLVxfQ1RSTC1HfCBDVFJMLVwgQ1RSTC1HCSAgIGdvIHRvIG1vZGUgc3BlY2lmaWVkIHdpdGggJ2luc2VydG1vZGUnCit8dl9DVFJMLUd8CUNUUkwtRwkJICAgdG9nZ2xlIGJldHdlZW4gVmlzdWFsIG1vZGUgYW5kIFNlbGVjdCBtb2RlCit8dl88QlM+fAk8QlM+CQkyICBTZWxlY3QgbW9kZTogZGVsZXRlIGhpZ2hsaWdodGVkIGFyZWEKK3x2X0NUUkwtSHwJQ1RSTC1ICQkyICBzYW1lIGFzIDxCUz4KK3x2X0NUUkwtT3wJQ1RSTC1PCQkgICBzd2l0Y2ggZnJvbSBTZWxlY3QgdG8gVmlzdWFsIG1vZGUgZm9yIG9uZQorCQkJCSAgIGNvbW1hbmQKK3x2X0NUUkwtVnwJQ1RSTC1WCQkgICBtYWtlIFZpc3VhbCBtb2RlIGJsb2Nrd2lzZSBvciBzdG9wIFZpc3VhbAorCQkJCSAgIG1vZGUKK3x2X0NUUkwtXXwJQ1RSTC1dCQkgICBqdW1wIHRvIGhpZ2hsaWdodGVkIHRhZworfHZfIXwJCSF7ZmlsdGVyfQkyICBmaWx0ZXIgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIHRocm91Z2ggdGhlCisJCQkJICAgZXh0ZXJuYWwgY29tbWFuZCB7ZmlsdGVyfQorfHZfOnwJCToJCSAgIHN0YXJ0IGEgY29tbWFuZC1saW5lIHdpdGggdGhlIGhpZ2hsaWdodGVkCisJCQkJICAgbGluZXMgYXMgYSByYW5nZQorfHZfPHwJCTwJCTIgIHNoaWZ0IHRoZSBoaWdobGlnaHRlZCBsaW5lcyBvbmUKKwkJCQkgICAnc2hpZnR3aWR0aCcgbGVmdAorfHZfPXwJCT0JCTIgIGZpbHRlciB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgdGhyb3VnaCB0aGUKKwkJCQkgICBleHRlcm5hbCBwcm9ncmFtIGdpdmVuIHdpdGggdGhlICdlcXVhbHByZycKKwkJCQkgICBvcHRpb24KK3x2Xz58CQk+CQkyICBzaGlmdCB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgb25lCisJCQkJICAgJ3NoaWZ0d2lkdGgnIHJpZ2h0Cit8dl9iX0F8CQlBCQkyICBibG9jayBtb2RlOiBhcHBlbmQgc2FtZSB0ZXh0IGluIGFsbCBsaW5lcywKKwkJCQkgICBhZnRlciB0aGUgaGlnaGxpZ2h0ZWQgYXJlYQorfHZfQ3wJCUMJCTIgIGRlbGV0ZSB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgYW5kIHN0YXJ0CisJCQkJICAgaW5zZXJ0Cit8dl9EfAkJRAkJMiAgZGVsZXRlIHRoZSBoaWdobGlnaHRlZCBsaW5lcworfHZfYl9JfAkJSQkJMiAgYmxvY2sgbW9kZTogaW5zZXJ0IHNhbWUgdGV4dCBpbiBhbGwgbGluZXMsCisJCQkJICAgYmVmb3JlIHRoZSBoaWdobGlnaHRlZCBhcmVhCit8dl9KfAkJSgkJMiAgam9pbiB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMKK3x2X0t8CQlLCQkgICBydW4gJ2tleXdvcmRwcmcnIG9uIHRoZSBoaWdobGlnaHRlZCBhcmVhCit8dl9PfAkJTwkJICAgTW92ZSBob3Jpem9udGFsbHkgdG8gb3RoZXIgY29ybmVyIG9mIGFyZWEuCisJCVEJCSAgIGRvZXMgbm90IHN0YXJ0IEV4IG1vZGUKK3x2X1J8CQlSCQkyICBkZWxldGUgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIGFuZCBzdGFydAorCQkJCSAgIGluc2VydAorfHZfU3wJCVMJCTIgIGRlbGV0ZSB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgYW5kIHN0YXJ0CisJCQkJICAgaW5zZXJ0Cit8dl9VfAkJVQkJMiAgbWFrZSBoaWdobGlnaHRlZCBhcmVhIHVwcGVyY2FzZQorfHZfVnwJCVYJCSAgIG1ha2UgVmlzdWFsIG1vZGUgbGluZXdpc2Ugb3Igc3RvcCBWaXN1YWwKKwkJCQkgICBtb2RlCit8dl9YfAkJWAkJMiAgZGVsZXRlIHRoZSBoaWdobGlnaHRlZCBsaW5lcworfHZfWXwJCVkJCSAgIHlhbmsgdGhlIGhpZ2hsaWdodGVkIGxpbmVzCit8dl9hKHwJCWEoCQkgICBzYW1lIGFzIGFiCit8dl9hKXwJCWEpCQkgICBzYW1lIGFzIGFiCit8dl9hPHwJCWE8CQkgICBleHRlbmQgaGlnaGxpZ2h0ZWQgYXJlYSB3aXRoIGEgPD4gYmxvY2sKK3x2X2E+fAkJYT4JCSAgIHNhbWUgYXMgYTwKK3x2X2FCfAkJYUIJCSAgIGV4dGVuZCBoaWdobGlnaHRlZCBhcmVhIHdpdGggYSB7fSBibG9jaworfHZfYVd8CQlhVwkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCAiYSBXT1JEIgorfHZfYVt8CQlhWwkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCBhIFtdIGJsb2NrCit8dl9hXXwJCWFdCQkgICBzYW1lIGFzIGFbCit8dl9hYnwJCWFiCQkgICBleHRlbmQgaGlnaGxpZ2h0ZWQgYXJlYSB3aXRoIGEgKCkgYmxvY2sKK3x2X2FwfAkJYXAJCSAgIGV4dGVuZCBoaWdobGlnaHRlZCBhcmVhIHdpdGggYSBwYXJhZ3JhcGgKK3x2X2FzfAkJYXMJCSAgIGV4dGVuZCBoaWdobGlnaHRlZCBhcmVhIHdpdGggYSBzZW50ZW5jZQorfHZfYXd8CQlhdwkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCAiYSB3b3JkIgorfHZfYXt8CQlhewkJICAgc2FtZSBhcyBhQgorfHZfYX18CQlhfQkJICAgc2FtZSBhcyBhQgorfHZfY3wJCWMJCTIgIGRlbGV0ZSBoaWdobGlnaHRlZCBhcmVhIGFuZCBzdGFydCBpbnNlcnQKK3x2X2R8CQlkCQkyICBkZWxldGUgaGlnaGxpZ2h0ZWQgYXJlYQorfHZfZ0p8CQlnSgkJMiAgam9pbiB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgd2l0aG91dAorCQkJCSAgIGluc2VydGluZyBzcGFjZXMKK3x2X2dxfAkJZ3EJCTIgIGZvcm1hdCB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMKK3x2X2d2fAkJZ3YJCSAgIGV4Y2hhbmdlIGN1cnJlbnQgYW5kIHByZXZpb3VzIGhpZ2hsaWdodGVkCisJCQkJICAgYXJlYQorfHZfaSh8CQlpKAkJICAgc2FtZSBhcyBpYgorfHZfaSl8CQlpKQkJICAgc2FtZSBhcyBpYgorfHZfaTx8CQlpPAkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCBpbm5lciA8PiBibG9jaworfHZfaT58CQlpPgkJICAgc2FtZSBhcyBpPAorfHZfaUJ8CQlpQgkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCBpbm5lciB7fSBibG9jaworfHZfaVd8CQlpVwkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCAiaW5uZXIgV09SRCIKK3x2X2lbfAkJaVsJCSAgIGV4dGVuZCBoaWdobGlnaHRlZCBhcmVhIHdpdGggaW5uZXIgW10gYmxvY2sKK3x2X2ldfAkJaV0JCSAgIHNhbWUgYXMgaVsKK3x2X2lifAkJaWIJCSAgIGV4dGVuZCBoaWdobGlnaHRlZCBhcmVhIHdpdGggaW5uZXIgKCkgYmxvY2sKK3x2X2lwfAkJaXAJCSAgIGV4dGVuZCBoaWdobGlnaHRlZCBhcmVhIHdpdGggaW5uZXIgcGFyYWdyYXBoCit8dl9pc3wJCWlzCQkgICBleHRlbmQgaGlnaGxpZ2h0ZWQgYXJlYSB3aXRoIGlubmVyIHNlbnRlbmNlCit8dl9pd3wJCWl3CQkgICBleHRlbmQgaGlnaGxpZ2h0ZWQgYXJlYSB3aXRoICJpbm5lciB3b3JkIgorfHZfaXt8CQlpewkJICAgc2FtZSBhcyBpQgorfHZfaX18CQlpfQkJICAgc2FtZSBhcyBpQgorfHZfb3wJCW8JCSAgIG1vdmUgY3Vyc29yIHRvIG90aGVyIGNvcm5lciBvZiBhcmVhCit8dl9yfAkJcgkJMiAgZGVsZXRlIGhpZ2hsaWdodGVkIGFyZWEgYW5kIHN0YXJ0IGluc2VydAorfHZfc3wJCXMJCTIgIGRlbGV0ZSBoaWdobGlnaHRlZCBhcmVhIGFuZCBzdGFydCBpbnNlcnQKK3x2X3V8CQl1CQkyICBtYWtlIGhpZ2hsaWdodGVkIGFyZWEgbG93ZXJjYXNlCit8dl92fAkJdgkJICAgbWFrZSBWaXN1YWwgbW9kZSBjaGFyYWN0ZXJ3aXNlIG9yIHN0b3AKKwkJCQkgICBWaXN1YWwgbW9kZQorfHZfeHwJCXgJCTIgIGRlbGV0ZSB0aGUgaGlnaGxpZ2h0ZWQgYXJlYQorfHZfeXwJCXkJCSAgIHlhbmsgdGhlIGhpZ2hsaWdodGVkIGFyZWEKK3x2X358CQl+CQkyICBzd2FwIGNhc2UgZm9yIHRoZSBoaWdobGlnaHRlZCBhcmVhCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gQ29tbWFuZC1saW5lIGVkaXRpbmcJCQkJCSpleC1lZGl0LWluZGV4KgorCitHZXQgdG8gdGhlIGNvbW1hbmQtbGluZSB3aXRoIHRoZSAnOicsICchJywgJy8nIG9yICc/JyBjb21tYW5kcy4KK05vcm1hbCBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisiQ29tcGxldGlvbiIgYmVsb3cgcmVmZXJzIHRvIGNvbnRleHQtc2Vuc2l0aXZlIGNvbXBsZXRpb24uICBJdCB3aWxsIGNvbXBsZXRlCitmaWxlIG5hbWVzLCB0YWdzLCBjb21tYW5kcyBldGMuIGFzIGFwcHJvcHJpYXRlLgorCisJCUNUUkwtQAkJbm90IHVzZWQKK3xjX0NUUkwtQXwJQ1RSTC1BCQlkbyBjb21wbGV0aW9uIG9uIHRoZSBwYXR0ZXJuIGluIGZyb250IG9mIHRoZQorCQkJCWN1cnNvciBhbmQgaW5zZXJ0IGFsbCBtYXRjaGVzCit8Y19DVFJMLUJ8CUNUUkwtQgkJY3Vyc29yIHRvIGJlZ2luIG9mIGNvbW1hbmQtbGluZQorfGNfQ1RSTC1DfAlDVFJMLUMJCXNhbWUgYXMgPEVTQz4KK3xjX0NUUkwtRHwJQ1RSTC1ECQlsaXN0IGNvbXBsZXRpb25zIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4gaW4KKwkJCQlmcm9udCBvZiB0aGUgY3Vyc29yCit8Y19DVFJMLUV8CUNUUkwtRQkJY3Vyc29yIHRvIGVuZCBvZiBjb21tYW5kLWxpbmUKK3wnY2VkaXQnfAlDVFJMLUYJCWRlZmF1bHQgdmFsdWUgZm9yICdjZWRpdCc6IG9wZW5zIHRoZQorCQkJCWNvbW1hbmQtbGluZSB3aW5kb3c7IG90aGVyd2lzZSBub3QgdXNlZAorCQlDVFJMLUcJCW5vdCB1c2VkCit8Y188QlM+fAk8QlM+CQlkZWxldGUgdGhlIGNoYXJhY3RlciBpbiBmcm9udCBvZiB0aGUgY3Vyc29yCit8Y19kaWdyYXBofAl7Y2hhcjF9IDxCUz4ge2NoYXIyfQorCQkJCWVudGVyIGRpZ3JhcGggd2hlbiAnZGlncmFwaCcgaXMgb24KK3xjX0NUUkwtSHwJQ1RSTC1ICQlzYW1lIGFzIDxCUz4KK3xjXzxUYWI+fAk8VGFiPgkJaWYgJ3dpbGRjaGFyJyBpcyA8VGFiPjogRG8gY29tcGxldGlvbiBvbgorCQkJCXRoZSBwYXR0ZXJuIGluIGZyb250IG9mIHRoZSBjdXJzb3IKK3xjXzxTLVRhYj58CTxTLVRhYj4JCXNhbWUgYXMgQ1RSTC1QCit8Y193aWxkY2hhcnwJJ3dpbGRjaGFyJwlEbyBjb21wbGV0aW9uIG9uIHRoZSBwYXR0ZXJuIGluIGZyb250IG9mIHRoZQorCQkJCWN1cnNvciAoZGVmYXVsdDogPFRhYj4pCit8Y19DVFJMLUl8CUNUUkwtSQkJc2FtZSBhcyA8VGFiPgorfGNfPE5MPnwJPE5MPgkJc2FtZSBhcyA8Q1I+Cit8Y19DVFJMLUp8CUNUUkwtSgkJc2FtZSBhcyA8Q1I+Cit8Y19DVFJMLUt8CUNUUkwtSyB7Y2hhcjF9IHtjaGFyMn0KKwkJCQllbnRlciBkaWdyYXBoCit8Y19DVFJMLUx8CUNUUkwtTAkJZG8gY29tcGxldGlvbiBvbiB0aGUgcGF0dGVybiBpbiBmcm9udCBvZiB0aGUKKwkJCQljdXJzb3IgYW5kIGluc2VydCB0aGUgbG9uZ2VzdCBjb21tb24gcGFydAorfGNfPENSPnwJPENSPgkJZXhlY3V0ZSBlbnRlcmVkIGNvbW1hbmQKK3xjXzxDUj58CUNUUkwtTQkJc2FtZSBhcyA8Q1I+Cit8Y19DVFJMLU58CUNUUkwtTgkJYWZ0ZXIgdXNpbmcgJ3dpbGRjaGFyJyB3aXRoIG11bHRpcGxlIG1hdGNoZXM6CisJCQkJZ28gdG8gbmV4dCBtYXRjaCwgb3RoZXJ3aXNlOiBzYW1lIGFzIDxEb3duPgorCQlDVFJMLU8JCW5vdCB1c2VkCit8Y19DVFJMLVB8CUNUUkwtUAkJYWZ0ZXIgdXNpbmcgJ3dpbGRjaGFyJyB3aXRoIG11bHRpcGxlIG1hdGNoZXM6CisJCQkJZ28gdG8gcHJldmlvdXMgbWF0Y2gsIG90aGVyd2lzZTogc2FtZSBhcyA8VXA+Cit8Y19DVFJMLVF8CUNUUkwtUQkJc2FtZSBhcyBDVFJMLVYsIHVubGVzcyBpdCdzIHVzZWQgZm9yIHRlcm1pbmFsCisJCQkJY29udHJvbCBmbG93Cit8Y19DVFJMLVJ8CUNUUkwtUiB7MC05YS16IiUjKjo9IENUUkwtRiBDVFJMLVAgQ1RSTC1XIENUUkwtQX0KKwkJCQlpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgb3Igb2JqZWN0CisJCQkJdW5kZXIgdGhlIGN1cnNvciBhcyBpZiB0eXBlZAorfGNfQ1RSTC1SX0NUUkwtUnwgQ1RSTC1SIENUUkwtUiB7MC05YS16IiUjKjo9IENUUkwtRiBDVFJMLVAgQ1RSTC1XIENUUkwtQX0KKwkJCQlpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgb3Igb2JqZWN0CisJCQkJdW5kZXIgdGhlIGN1cnNvciBsaXRlcmFsbHkKKwkJQ1RSTC1TCQkodXNlZCBmb3IgdGVybWluYWwgY29udHJvbCBmbG93KQorCQlDVFJMLVQJCW5vdCB1c2VkCit8Y19DVFJMLVV8CUNUUkwtVQkJcmVtb3ZlIGFsbCBjaGFyYWN0ZXJzCit8Y19DVFJMLVZ8CUNUUkwtVgkJaW5zZXJ0IG5leHQgbm9uLWRpZ2l0IGxpdGVyYWxseSwgaW5zZXJ0IHRocmVlCisJCQkJZGlnaXQgZGVjaW1hbCBudW1iZXIgYXMgYSBzaW5nbGUgYnl0ZS4KK3xjX0NUUkwtV3wJQ1RSTC1XCQlkZWxldGUgdGhlIHdvcmQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvcgorCQlDVFJMLVgJCW5vdCB1c2VkIChyZXNlcnZlZCBmb3IgY29tcGxldGlvbikKKwkJQ1RSTC1ZCQljb3B5ICh5YW5rKSBtb2RlbGVzcyBzZWxlY3Rpb24KKwkJQ1RSTC1aCQlub3QgdXNlZCAocmVzZXJ2ZWQgZm9yIHN1c3BlbmQpCit8Y188RXNjPnwJPEVzYz4JCWFiYW5kb24gY29tbWFuZC1saW5lIHdpdGhvdXQgZXhlY3V0aW5nIGl0Cit8Y188RXNjPnwJQ1RSTC1bCQlzYW1lIGFzIDxFc2M+Cit8Y19DVFJMLVxfQ1RSTC1OfCBDVFJMLVwgQ1RSTC1OCSBnbyB0byBOb3JtYWwgbW9kZSwgYWJhbmRvbiBjb21tYW5kLWxpbmUKK3xjX0NUUkwtXF9DVFJMLUd8IENUUkwtXCBDVFJMLUcJIGdvIHRvIG1vZGUgc3BlY2lmaWVkIHdpdGggJ2luc2VydG1vZGUnLAorCQkJCWFiYW5kb24gY29tbWFuZC1saW5lCisJCUNUUkwtXCBhIC0gZAlyZXNlcnZlZCBmb3IgZXh0ZW5zaW9ucworfGNfQ1RSTC1cX2V8CUNUUkwtXCBlIHtleHByfSByZXBsYWNlIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgcmVzdWx0IG9mCisJCQkJe2V4cHJ9CisJCUNUUkwtXCBmIC0geglyZXNlcnZlZCBmb3IgZXh0ZW5zaW9ucworCQlDVFJMLVwgb3RoZXJzCW5vdCB1c2VkCisJCUNUUkwtXQkJbm90IHVzZWQKK3xjX0NUUkwtXnwJQ1RSTC1eCQl0b2dnbGUgdXNlIG9mIHw6bG1hcHwgbWFwcGluZ3MKK3xjX0NUUkwtX3wJQ1RSTC1fCQl3aGVuICdhbGxvd3Jldmlucycgc2V0OiBjaGFuZ2UgbGFuZ3VhZ2UKKwkJCQkoSGVicmV3LCBGYXJzaSkKK3xjXzxEZWw+fAk8RGVsPgkJZGVsZXRlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvcgorCit8Y188TGVmdD58CTxMZWZ0PgkJY3Vyc29yIGxlZnQKK3xjXzxTLUxlZnQ+fAk8Uy1MZWZ0PgljdXJzb3Igb25lIHdvcmQgbGVmdAorfGNfPEMtTGVmdD58CTxDLUxlZnQ+CWN1cnNvciBvbmUgd29yZCBsZWZ0Cit8Y188UmlnaHQ+fAk8UmlnaHQ+CQljdXJzb3IgcmlnaHQKK3xjXzxTLVJpZ2h0PnwJPFMtUmlnaHQ+CWN1cnNvciBvbmUgd29yZCByaWdodAorfGNfPEMtUmlnaHQ+fAk8Qy1SaWdodD4JY3Vyc29yIG9uZSB3b3JkIHJpZ2h0Cit8Y188VXA+fAk8VXA+CQlyZWNhbGwgcHJldmlvdXMgY29tbWFuZC1saW5lIGZyb20gaGlzdG9yeSB0aGF0CisJCQkJbWF0Y2hlcyBwYXR0ZXJuIGluIGZyb250IG9mIHRoZSBjdXJzb3IKK3xjXzxTLVVwPnwJPFMtVXA+CQlyZWNhbGwgcHJldmlvdXMgY29tbWFuZC1saW5lIGZyb20gaGlzdG9yeQorfGNfPERvd24+fAk8RG93bj4JCXJlY2FsbCBuZXh0IGNvbW1hbmQtbGluZSBmcm9tIGhpc3RvcnkgdGhhdAorCQkJCW1hdGNoZXMgcGF0dGVybiBpbiBmcm9udCBvZiB0aGUgY3Vyc29yCit8Y188Uy1Eb3duPnwJPFMtRG93bj4JcmVjYWxsIG5leHQgY29tbWFuZC1saW5lIGZyb20gaGlzdG9yeQorfGNfPEhvbWU+fAk8SG9tZT4JCWN1cnNvciB0byBzdGFydCBvZiBjb21tYW5kLWxpbmUKK3xjXzxFbmQ+fAk8RW5kPgkJY3Vyc29yIHRvIGVuZCBvZiBjb21tYW5kLWxpbmUKK3xjXzxQYWdlRG93bj58CTxQYWdlRG93bj4Jc2FtZSBhcyA8Uy1Eb3duPgorfGNfPFBhZ2VVcD58CTxQYWdlVXA+CXNhbWUgYXMgPFMtVXA+Cit8Y188SW5zZXJ0PnwJPEluc2VydD4JdG9nZ2xlIGluc2VydC9vdmVyc3RyaWtlIG1vZGUKK3xjXzxMZWZ0TW91c2U+fAk8TGVmdE1vdXNlPgljdXJzb3IgYXQgbW91c2UgY2xpY2sKKworWW91IGZvdW5kIGl0LCBBcnRodXIhCQkJCSpob2x5LWdyYWlsKgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIEVYIGNvbW1hbmRzCQkJCQkqZXgtY21kLWluZGV4KiAqOmluZGV4KgorCitUaGlzIGlzIGEgYnJpZWYgYnV0IGNvbXBsZXRlIGxpc3Rpbmcgb2YgYWxsIHRoZSAiOiIgY29tbWFuZHMsIHdpdGhvdXQKK21lbnRpb25pbmcgYW55IGFyZ3VtZW50cy4gIFRoZSBvcHRpb25hbCBwYXJ0IG9mIHRoZSBjb21tYW5kIG5hbWUgaXMgaW5zaWRlIFtdLgorVGhlIGNvbW1hbmRzIGFyZSBzb3J0ZWQgb24gdGhlIG5vbi1vcHRpb25hbCBwYXJ0IG9mIHRoZWlyIG5hbWUuCisKK3w6IXwJCTohCQlmaWx0ZXIgbGluZXMgb3IgZXhlY3V0ZSBhbiBleHRlcm5hbCBjb21tYW5kCit8OiEhfAkJOiEhCQlyZXBlYXQgbGFzdCAiOiEiIGNvbW1hbmQKK3w6I3wJCTojCQlzYW1lIGFzICI6bnVtYmVyIgorfDomfAkJOiYJCXJlcGVhdCBsYXN0ICI6c3Vic3RpdHV0ZSIKK3w6c3RhcnwJCToqCQlleGVjdXRlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIKK3w6PHwJCTo8CQlzaGlmdCBsaW5lcyBvbmUgJ3NoaWZ0d2lkdGgnIGxlZnQKK3w6PXwJCTo9CQlwcmludCB0aGUgY3Vyc29yIGxpbmUgbnVtYmVyCit8Oj58CQk6PgkJc2hpZnQgbGluZXMgb25lICdzaGlmdHdpZHRoJyByaWdodAorfDpAfAkJOkAJCWV4ZWN1dGUgY29udGVudHMgb2YgYSByZWdpc3RlcgorfDpAQHwJCTpAQAkJcmVwZWF0IHRoZSBwcmV2aW91cyAiOkAiCit8Ok5leHR8CQk6TltleHRdCQlnbyB0byBwcmV2aW91cyBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0Cit8OlByaW50fAk6UFtyaW50XQlwcmludCBsaW5lcworfDpYfAkJOlgJCWFzayBmb3IgZW5jcnlwdGlvbiBrZXkKK3w6YXBwZW5kfAk6YVtwcGVuZF0JYXBwZW5kIHRleHQKK3w6YWJicmV2aWF0ZXwJOmFiW2JyZXZpYXRlXQllbnRlciBhYmJyZXZpYXRpb24KK3w6YWJjbGVhcnwJOmFiY1tsZWFyXQlyZW1vdmUgYWxsIGFiYnJldmlhdGlvbnMKK3w6YWJvdmVsZWZ0fAk6YWJvW3ZlbGVmdF0JbWFrZSBzcGxpdCB3aW5kb3cgYXBwZWFyIGxlZnQgb3IgYWJvdmUKK3w6YWxsfAkJOmFsW2xdCQlvcGVuIGEgd2luZG93IGZvciBlYWNoIGZpbGUgaW4gdGhlIGFyZ3VtZW50CisJCQkJbGlzdAorfDphbWVudXwJOmFtW2VudV0JZW50ZXIgbmV3IG1lbnUgaXRlbSBmb3IgYWxsIG1vZGVzCit8OmFub3JlbWVudXwJOmFuW29yZW1lbnVdCWVudGVyIGEgbmV3IG1lbnUgZm9yIGFsbCBtb2RlcyB0aGF0IHdpbGwgbm90CisJCQkJYmUgcmVtYXBwZWQKK3w6YXJnc3wJCTphcltnc10JCXByaW50IHRoZSBhcmd1bWVudCBsaXN0Cit8OmFyZ2FkZHwJOmFyZ2FbZGRdCWFkZCBpdGVtcyB0byB0aGUgYXJndW1lbnQgbGlzdAorfDphcmdkZWxldGV8CTphcmdkW2VsZXRlXQlkZWxldGUgaXRlbXMgZnJvbSB0aGUgYXJndW1lbnQgbGlzdAorfDphcmdlZGl0fAk6YXJnZVtkaXRdCWFkZCBpdGVtIHRvIHRoZSBhcmd1bWVudCBsaXN0IGFuZCBlZGl0IGl0Cit8OmFyZ2RvfAk6YXJnZG8JCWRvIGEgY29tbWFuZCBvbiBhbGwgaXRlbXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QKK3w6YXJnZ2xvYmFsfAk6YXJnZ1tsb2JhbF0JZGVmaW5lIHRoZSBnbG9iYWwgYXJndW1lbnQgbGlzdAorfDphcmdsb2NhbHwJOmFyZ2xbb2NhbF0JZGVmaW5lIGEgbG9jYWwgYXJndW1lbnQgbGlzdAorfDphcmd1bWVudHwJOmFyZ3VbbWVudF0JZ28gdG8gc3BlY2lmaWMgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdAorfDphc2NpaXwJOmFzW2NpaV0JcHJpbnQgYXNjaWkgdmFsdWUgb2YgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IKK3w6YXV0b2NtZHwJOmF1W3RvY21kXQllbnRlciBvciBzaG93IGF1dG9jb21tYW5kcworfDphdWdyb3VwfAk6YXVnW3JvdXBdCXNlbGVjdCB0aGUgYXV0b2NvbW1hbmQgZ3JvdXAgdG8gdXNlCit8OmF1bm1lbnV8CTphdW5bbWVudV0JcmVtb3ZlIG1lbnUgZm9yIGFsbCBtb2RlcworfDpidWZmZXJ8CTpiW3VmZmVyXQlnbyB0byBzcGVjaWZpYyBidWZmZXIgaW4gdGhlIGJ1ZmZlciBsaXN0Cit8OmJOZXh0fAk6Yk5bZXh0XQlnbyB0byBwcmV2aW91cyBidWZmZXIgaW4gdGhlIGJ1ZmZlciBsaXN0Cit8OmJhbGx8CQk6YmFbbGxdCQlvcGVuIGEgd2luZG93IGZvciBlYWNoIGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QKK3w6YmFkZHwJCTpiYWRbZF0JCWFkZCBidWZmZXIgdG8gdGhlIGJ1ZmZlciBsaXN0Cit8OmJkZWxldGV8CTpiZFtlbGV0ZV0JcmVtb3ZlIGEgYnVmZmVyIGZyb20gdGhlIGJ1ZmZlciBsaXN0Cit8OmJlaGF2ZXwJOmJlW2hhdmVdCXNldCBtb3VzZSBhbmQgc2VsZWN0aW9uIGJlaGF2aW9yCit8OmJlbG93cmlnaHR8CTpiZWxbb3dyaWdodF0JbWFrZSBzcGxpdCB3aW5kb3cgYXBwZWFyIHJpZ2h0IG9yIGJlbG93Cit8OmJmaXJzdHwJOmJmW2lyc3RdCWdvIHRvIGZpcnN0IGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QKK3w6Ymxhc3R8CTpibFthc3RdCWdvIHRvIGxhc3QgYnVmZmVyIGluIHRoZSBidWZmZXIgbGlzdAorfDpibW9kaWZpZWR8CTpibVtvZGlmaWVkXQlnbyB0byBuZXh0IGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QgdGhhdCBoYXMKKwkJCQliZWVuIG1vZGlmaWVkCit8OmJuZXh0fAk6Ym5bZXh0XQlnbyB0byBuZXh0IGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QKK3w6Ym90cmlnaHR8CTpib1t0cmlnaHRdCW1ha2Ugc3BsaXQgd2luZG93IGFwcGVhciBhdCBib3R0b20gb3IgZmFyIHJpZ2h0Cit8OmJwcmV2aW91c3wJOmJwW3JldmlvdXNdCWdvIHRvIHByZXZpb3VzIGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QKK3w6YnJld2luZHwJOmJyW2V3aW5kXQlnbyB0byBmaXJzdCBidWZmZXIgaW4gdGhlIGJ1ZmZlciBsaXN0Cit8OmJyZWFrfAk6YnJlYVtrXQlicmVhayBvdXQgb2Ygd2hpbGUgbG9vcAorfDpicmVha2FkZHwJOmJyZWFrYVtkZF0JYWRkIGEgZGVidWdnZXIgYnJlYWtwb2ludAorfDpicmVha2RlbHwJOmJyZWFrZFtlbF0JZGVsZXRlIGEgZGVidWdnZXIgYnJlYWtwb2ludAorfDpicmVha2xpc3R8CTpicmVha2xbaXN0XQlsaXN0IGRlYnVnZ2VyIGJyZWFrcG9pbnRzCit8OmJyb3dzZXwJOmJyb1t3c2VdCXVzZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2cKK3w6YnVmZG98CTpidWZkbwkJZXhlY3V0ZSBjb21tYW5kIGluIGVhY2ggbGlzdGVkIGJ1ZmZlcgorfDpidWZmZXJzfAk6YnVmZmVycwlsaXN0IGFsbCBmaWxlcyBpbiB0aGUgYnVmZmVyIGxpc3QKK3w6YnVubG9hZHwJOmJ1bltsb2FkXQl1bmxvYWQgYSBzcGVjaWZpYyBidWZmZXIKK3w6YndpcGVvdXR8CTpid1tpcGVvdXRdCXJlYWxseSBkZWxldGUgYSBidWZmZXIKK3w6Y2hhbmdlfAk6Y1toYW5nZV0JcmVwbGFjZSBhIGxpbmUgb3Igc2VyaWVzIG9mIGxpbmVzCit8OmNOZXh0fAk6Y05bZXh0XQlnbyB0byBwcmV2aW91cyBlcnJvcgorfDpjTmZpbGV8CTpjTmZbaWxlXQlnbyB0byBsYXN0IGVycm9yIGluIHByZXZpb3VzIGZpbGUKK3w6Y2FiYnJldnwJOmNhW2JicmV2XQlsaWtlICI6YWJicmV2aWF0ZSIgYnV0IGZvciBDb21tYW5kLWxpbmUgbW9kZQorfDpjYWJjbGVhcnwJOmNhYmNbbGVhcl0JY2xlYXIgYWxsIGFiYnJldmlhdGlvbnMgZm9yIENvbW1hbmQtbGluZSBtb2RlCit8OmNhbGx8CQk6Y2FsW2xdCQljYWxsIGEgZnVuY3Rpb24KK3w6Y2F0Y2h8CTpjYXRbY2hdCXBhcnQgb2YgYSA6dHJ5IGNvbW1hbmQKK3w6Y2N8CQk6Y2MJCWdvIHRvIHNwZWNpZmljIGVycm9yCit8OmNjbG9zZXwJOmNjbFtvc2VdCWNsb3NlIHF1aWNrZml4IHdpbmRvdworfDpjZHwJCTpjZAkJY2hhbmdlIGRpcmVjdG9yeQorfDpjZW50ZXJ8CTpjZVtudGVyXQlmb3JtYXQgbGluZXMgYXQgdGhlIGNlbnRlcgorfDpjZmlsZXwJOmNmW2lsZV0JcmVhZCBmaWxlIHdpdGggZXJyb3IgbWVzc2FnZXMgYW5kIGp1bXAgdG8gZmlyc3QKK3w6Y2ZpcnN0fAk6Y2ZpcltzdF0JZ28gdG8gdGhlIHNwZWNpZmllZCBlcnJvciwgZGVmYXVsdCBmaXJzdCBvbmUKK3w6Y2dldGZpbGV8CTpjZ1tldGZpbGVdCXJlYWQgZmlsZSB3aXRoIGVycm9yIG1lc3NhZ2VzCit8OmNoYW5nZXN8CTpjaGFbbmdlc10JcHJpbnQgdGhlIGNoYW5nZSBsaXN0Cit8OmNoZGlyfAk6Y2hkW2lyXQljaGFuZ2UgZGlyZWN0b3J5Cit8OmNoZWNrcGF0aHwJOmNoZVtja3BhdGhdCWxpc3QgaW5jbHVkZWQgZmlsZXMKK3w6Y2hlY2t0aW1lfAk6Y2hlY2t0W2ltZV0JY2hlY2sgdGltZXN0YW1wIG9mIGxvYWRlZCBidWZmZXJzCit8OmNsaXN0fAk6Y2xbaXN0XQlsaXN0IGFsbCBlcnJvcnMKK3w6Y2xhc3R8CTpjbGFbc3RdCWdvIHRvIHRoZSBzcGVjaWZpZWQgZXJyb3IsIGRlZmF1bHQgbGFzdCBvbmUKK3w6Y2xvc2V8CTpjbG9bc2VdCWNsb3NlIGN1cnJlbnQgd2luZG93Cit8OmNtYXB8CQk6Y21bYXBdCQlsaWtlICI6bWFwIiBidXQgZm9yIENvbW1hbmQtbGluZSBtb2RlCit8OmNtYXBjbGVhcnwJOmNtYXBjW2xlYXJdCWNsZWFyIGFsbCBtYXBwaW5ncyBmb3IgQ29tbWFuZC1saW5lIG1vZGUKK3w6Y21lbnV8CTpjbWVbbnVdCWFkZCBtZW51IGZvciBDb21tYW5kLWxpbmUgbW9kZQorfDpjbmV4dHwJOmNuW2V4dF0JZ28gdG8gbmV4dCBlcnJvcgorfDpjbmV3ZXJ8CTpjbmV3W2VyXQlnbyB0byBuZXdlciBlcnJvciBsaXN0Cit8OmNuZmlsZXwJOmNuZltpbGVdCWdvIHRvIGZpcnN0IGVycm9yIGluIG5leHQgZmlsZQorfDpjbm9yZW1hcHwJOmNub1tyZW1hcF0JbGlrZSAiOm5vcmVtYXAiIGJ1dCBmb3IgQ29tbWFuZC1saW5lIG1vZGUKK3w6Y25vcmVhYmJyZXZ8CTpjbm9yZWFbYmJyZXZdCWxpa2UgIjpub3JlYWJicmV2IiBidXQgZm9yIENvbW1hbmQtbGluZSBtb2RlCit8OmNub3JlbWVudXwJOmNub3JlbWVbbnVdCWxpa2UgIjpub3JlbWVudSIgYnV0IGZvciBDb21tYW5kLWxpbmUgbW9kZQorfDpjb3B5fAkJOmNvW3B5XQkJY29weSBsaW5lcworfDpjb2xkZXJ8CTpjb2xbZGVyXQlnbyB0byBvbGRlciBlcnJvciBsaXN0Cit8OmNvbG9yc2NoZW1lfAk6Y29sb1tyc2NoZW1lXQlsb2FkIGEgc3BlY2lmaWMgY29sb3Igc2NoZW1lCit8OmNvbW1hbmR8CTpjb21bbWFuZF0JY3JlYXRlIHVzZXItZGVmaW5lZCBjb21tYW5kCit8OmNvbWNsZWFyfAk6Y29tY1tsZWFyXQljbGVhciBhbGwgdXNlci1kZWZpbmVkIGNvbW1hbmRzCit8OmNvbXBpbGVyfAk6Y29tcFtpbGVyXQlkbyBzZXR0aW5ncyBmb3IgYSBzcGVjaWZpYyBjb21waWxlcgorfDpjb250aW51ZXwJOmNvblt0aW51ZV0JZ28gYmFjayB0byA6d2hpbGUKK3w6Y29uZmlybXwJOmNvbmZbaXJtXQlwcm9tcHQgdXNlciB3aGVuIGNvbmZpcm1hdGlvbiByZXF1aXJlZAorfDpjb3BlbnwJOmNvcGVbbl0Jb3BlbiBxdWlja2ZpeCB3aW5kb3cKK3w6Y3ByZXZpb3VzfAk6Y3BbcmV2aW91c10JZ28gdG8gcHJldmlvdXMgZXJyb3IKK3w6Y3BmaWxlfAk6Y3BmW2lsZV0JZ28gdG8gbGFzdCBlcnJvciBpbiBwcmV2aW91cyBmaWxlCit8OmNxdWl0fAk6Y3FbdWl0XQlxdWl0IFZpbSB3aXRoIGFuIGVycm9yIGNvZGUKK3w6Y3Jld2luZHwJOmNyW2V3aW5kXQlnbyB0byB0aGUgc3BlY2lmaWVkIGVycm9yLCBkZWZhdWx0IGZpcnN0IG9uZQorfDpjc2NvcGV8CTpjc1tjb3BlXSAgICAgICBleGVjdXRlIGNzY29wZSBjb21tYW5kCit8OmNzdGFnfAk6Y3N0W2FnXQl1c2UgY3Njb3BlIHRvIGp1bXAgdG8gYSB0YWcKK3w6Y3VubWFwfAk6Y3Vbbm1hcF0JbGlrZSAiOnVubWFwIiBidXQgZm9yIENvbW1hbmQtbGluZSBtb2RlCit8OmN1bmFiYnJldnwJOmN1bmFbYmJyZXZdCWxpa2UgIjp1bmFiYnJldiIgYnV0IGZvciBDb21tYW5kLWxpbmUgbW9kZQorfDpjdW5tZW51fAk6Y3VubWVbbnVdCXJlbW92ZSBtZW51IGZvciBDb21tYW5kLWxpbmUgbW9kZQorfDpjd2luZG93fAk6Y3dbaW5kb3ddCW9wZW4gb3IgY2xvc2UgcXVpY2tmaXggd2luZG93Cit8OmRlbGV0ZXwJOmRbZWxldGVdCWRlbGV0ZSBsaW5lcworfDpkZWJ1Z3wJOmRlYlt1Z10JcnVuIGEgY29tbWFuZCBpbiBkZWJ1Z2dpbmcgbW9kZQorfDpkZWJ1Z2dyZWVkeXwJOmRlYnVnZ1tyZWVkeV0JcmVhZCBkZWJ1ZyBtb2RlIGNvbW1hbmRzIGZyb20gbm9ybWFsIGlucHV0Cit8OmRlbGNvbW1hbmR8CTpkZWxjW29tbWFuZF0JZGVsZXRlIHVzZXItZGVmaW5lZCBjb21tYW5kCit8OmRlbGZ1bmN0aW9ufAk6ZGVsZlt1bmN0aW9uXQlkZWxldGUgYSB1c2VyIGZ1bmN0aW9uCit8OmRpZmZ1cGRhdGV8CTpkaWZbZnVwZGF0ZV0JdXBkYXRlICdkaWZmJyBidWZmZXJzCit8OmRpZmZnZXR8CTpkaWZmZ1tldF0JcmVtb3ZlIGRpZmZlcmVuY2VzIGluIGN1cnJlbnQgYnVmZmVyCit8OmRpZmZwYXRjaHwJOmRpZmZwW2F0Y2hdCWFwcGx5IGEgcGF0Y2ggYW5kIHNob3cgZGlmZmVyZW5jZXMKK3w6ZGlmZnB1dHwJOmRpZmZwdVt0XQlyZW1vdmUgZGlmZmVyZW5jZXMgaW4gb3RoZXIgYnVmZmVyCit8OmRpZmZzcGxpdHwJOmRpZmZzW3BsaXRdCXNob3cgZGlmZmVyZW5jZXMgd2l0aCBhbm90aGVyIGZpbGUKK3w6ZGlmZnRoaXN8CTpkaWZmdGhpcwltYWtlIGN1cnJlbnQgd2luZG93IGEgZGlmZiB3aW5kb3cKK3w6ZGlncmFwaHN8CTpkaWdbcmFwaHNdCXNob3cgb3IgZW50ZXIgZGlncmFwaHMKK3w6ZGlzcGxheXwJOmRpW3NwbGF5XQlkaXNwbGF5IHJlZ2lzdGVycworfDpkanVtcHwJOmRqW3VtcF0JanVtcCB0byAjZGVmaW5lCit8OmRsaXN0fAk6ZGxbaXN0XQlsaXN0ICNkZWZpbmVzCit8OmRvYXV0b2NtZHwJOmRvW2F1dG9jbWRdCWFwcGx5IGF1dG9jb21tYW5kcyB0byBjdXJyZW50IGJ1ZmZlcgorfDpkb2F1dG9hbGx8CTpkb2F1dG9hW2xsXQlhcHBseSBhdXRvY29tbWFuZHMgZm9yIGFsbCBsb2FkZWQgYnVmZmVycworfDpkcm9wfAkJOmRyW29wXQkJanVtcCB0byB3aW5kb3cgZWRpdGluZyBmaWxlIG9yIGVkaXQgZmlsZSBpbgorCQkJCWN1cnJlbnQgd2luZG93Cit8OmRzZWFyY2h8CTpkc1tlYXJjaF0JbGlzdCBvbmUgI2RlZmluZQorfDpkc3BsaXR8CTpkc3BbbGl0XQlzcGxpdCB3aW5kb3cgYW5kIGp1bXAgdG8gI2RlZmluZQorfDplZGl0fAkJOmVbZGl0XQkJZWRpdCBhIGZpbGUKK3w6ZWNob3wJCTplY1tob10JCWVjaG9lcyB0aGUgcmVzdWx0IG9mIGV4cHJlc3Npb25zCit8OmVjaG9lcnJ8CTplY2hvZVtycl0JbGlrZSA6ZWNobywgc2hvdyBsaWtlIGFuIGVycm9yIGFuZCB1c2UgaGlzdG9yeQorfDplY2hvaGx8CTplY2hvaFtsXQlzZXQgaGlnaGxpZ2h0aW5nIGZvciBlY2hvIGNvbW1hbmRzCit8OmVjaG9tc2d8CTplY2hvbVtzZ10Jc2FtZSBhcyA6ZWNobywgcHV0IG1lc3NhZ2UgaW4gaGlzdG9yeQorfDplY2hvbnwJOmVjaG9uCQlzYW1lIGFzIDplY2hvLCBidXQgd2l0aG91dCA8RU9MPgorfDplbHNlfAkJOmVsW3NlXQkJcGFydCBvZiBhbiA6aWYgY29tbWFuZAorfDplbHNlaWZ8CTplbHNlaVtmXQlwYXJ0IG9mIGFuIDppZiBjb21tYW5kCit8OmVtZW51fAk6ZW1bZW51XQlleGVjdXRlIGEgbWVudSBieSBuYW1lCit8OmVuZGlmfAk6ZW5bZGlmXQllbmQgcHJldmlvdXMgOmlmCit8OmVuZGZ1bmN0aW9ufAk6ZW5kZlt1bmN0aW9uXQllbmQgb2YgYSB1c2VyIGZ1bmN0aW9uCit8OmVuZHRyeXwJOmVuZHRbcnldCWVuZCBwcmV2aW91cyA6dHJ5Cit8OmVuZHdoaWxlfAk6ZW5kd1toaWxlXQllbmQgcHJldmlvdXMgOndoaWxlCit8OmVuZXd8CQk6ZW5lW3ddCQllZGl0IGEgbmV3LCB1bm5hbWVkIGJ1ZmZlcgorfDpleHwJCTpleAkJc2FtZSBhcyAiOmVkaXQiCit8OmV4ZWN1dGV8CTpleGVbY3V0ZV0JZXhlY3V0ZSByZXN1bHQgb2YgZXhwcmVzc2lvbnMKK3w6ZXhpdHwJCTpleGlbdF0JCXNhbWUgYXMgIjp4aXQiCit8OmZpbGV8CQk6ZltpbGVdCQlzaG93IG9yIHNldCB0aGUgY3VycmVudCBmaWxlIG5hbWUKK3w6ZmlsZXN8CTpmaWxlcwkJbGlzdCBhbGwgZmlsZXMgaW4gdGhlIGJ1ZmZlciBsaXN0Cit8OmZpbGV0eXBlfAk6ZmlsZXRbeXBlXQlzd2l0Y2ggZmlsZSB0eXBlIGRldGVjdGlvbiBvbi9vZmYKK3w6ZmluZHwJCTpmaW5bZF0JCWZpbmQgZmlsZSBpbiAncGF0aCcgYW5kIGVkaXQgaXQKK3w6ZmluYWxseXwJOmZpbmFbbGx5XQlwYXJ0IG9mIGEgOnRyeSBjb21tYW5kCit8OmZpbmlzaHwJOmZpbmlbc2hdCXF1aXQgc291cmNpbmcgYSBWaW0gc2NyaXB0Cit8OmZpcnN0fAk6ZmlyW3N0XQlnbyB0byB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdAorfDpmaXhkZWx8CTpmaXhbZGVsXQlzZXQga2V5IGNvZGUgb2YgPERlbD4KK3w6Zm9sZHwJCTpmb1tsZF0JCWNyZWF0ZSBhIGZvbGQKK3w6Zm9sZGNsb3NlfAk6Zm9sZGNbbG9zZV0JY2xvc2UgZm9sZHMKK3w6Zm9sZGRvb3BlbnwJOmZvbGRkW29vcGVuXQlleGVjdXRlIGNvbW1hbmQgb24gbGluZXMgbm90IGluIGEgY2xvc2VkIGZvbGQKK3w6Zm9sZGRvY2xvc2VkfAk6Zm9sZGRvY1tsb3NlZF0JZXhlY3V0ZSBjb21tYW5kIG9uIGxpbmVzIGluIGEgY2xvc2VkIGZvbGQKK3w6Zm9sZG9wZW58CTpmb2xkb1twZW5dCW9wZW4gZm9sZHMKK3w6ZnVuY3Rpb258CTpmdVtuY3Rpb25dCWRlZmluZSBhIHVzZXIgZnVuY3Rpb24KK3w6Z2xvYmFsfAk6Z1tsb2JhbF0JZXhlY3V0ZSBjb21tYW5kcyBmb3IgbWF0Y2hpbmcgbGluZXMKK3w6Z290b3wJCTpnb1t0b10JCWdvIHRvIGJ5dGUgaW4gdGhlIGJ1ZmZlcgorfDpncmVwfAkJOmdyW2VwXQkJcnVuICdncmVwcHJnJyBhbmQganVtcCB0byBmaXJzdCBtYXRjaAorfDpncmVwYWRkfAk6Z3JlcGFbZGRdCWxpa2UgZ3JlcCwgYnV0IGFwcGVuZCB0byBjdXJyZW50IGxpc3QKK3w6Z3VpfAkJOmd1W2ldCQlzdGFydCB0aGUgR1VJCit8Omd2aW18CQk6Z3ZbaW1dCQlzdGFydCB0aGUgR1VJCit8OmhhcmRjb3B5fAk6aGFbcmRjb3B5XQlzZW5kIHRleHQgdG8gdGhlIHByaW50ZXIKK3w6aGVscHwJCTpoW2VscF0JCW9wZW4gYSBoZWxwIHdpbmRvdworfDpoZWxwZmluZHwJOmhlbHBmW2luZF0JZGlhbG9nIHRvIG9wZW4gYSBoZWxwIHdpbmRvdworfDpoZWxwZ3JlcHwJOmhlbHBnW3JlcF0JbGlrZSAiOmdyZXAiIGJ1dCBzZWFyY2hlcyBoZWxwIGZpbGVzCit8OmhlbHB0YWdzfAk6aGVscHRbYWdzXQlnZW5lcmF0ZSBoZWxwIHRhZ3MgZm9yIGEgZGlyZWN0b3J5Cit8OmhpZ2hsaWdodHwJOmhpW2dobGlnaHRdCXNwZWNpZnkgaGlnaGxpZ2h0aW5nIG1ldGhvZHMKK3w6aGlkZXwJCTpoaWRbZV0JCWhpZGUgY3VycmVudCBidWZmZXIgZm9yIGEgY29tbWFuZAorfDpoaXN0b3J5fAk6aGlzW3RvcnldCXByaW50IGEgaGlzdG9yeSBsaXN0Cit8Omluc2VydHwJOmlbbnNlcnRdCWluc2VydCB0ZXh0Cit8OmlhYmJyZXZ8CTppYVtiYnJldl0JbGlrZSAiOmFiYnJldiIgYnV0IGZvciBJbnNlcnQgbW9kZQorfDppYWJjbGVhcnwJOmlhYmNbbGVhcl0JbGlrZSAiOmFiY2xlYXIiIGJ1dCBmb3IgSW5zZXJ0IG1vZGUKK3w6aWZ8CQk6aWYJCWV4ZWN1dGUgY29tbWFuZHMgd2hlbiBjb25kaXRpb24gbWV0Cit8OmlqdW1wfAk6aWpbdW1wXQlqdW1wIHRvIGRlZmluaXRpb24gb2YgaWRlbnRpZmllcgorfDppbGlzdHwJOmlsW2lzdF0JbGlzdCBsaW5lcyB3aGVyZSBpZGVudGlmaWVyIG1hdGNoZXMKK3w6aW1hcHwJCTppbVthcF0JCWxpa2UgIjptYXAiIGJ1dCBmb3IgSW5zZXJ0IG1vZGUKK3w6aW1hcGNsZWFyfAk6aW1hcGNbbGVhcl0JbGlrZSAiOm1hcGNsZWFyIiBidXQgZm9yIEluc2VydCBtb2RlCit8OmltZW51fAk6aW1lW251XQlhZGQgbWVudSBmb3IgSW5zZXJ0IG1vZGUKK3w6aW5vcmVtYXB8CTppbm9bcmVtYXBdCWxpa2UgIjpub3JlbWFwIiBidXQgZm9yIEluc2VydCBtb2RlCit8Omlub3JlYWJicmV2fAk6aW5vcmVhW2JicmV2XQlsaWtlICI6bm9yZWFiYnJldiIgYnV0IGZvciBJbnNlcnQgbW9kZQorfDppbm9yZW1lbnV8CTppbm9yZW1lW251XQlsaWtlICI6bm9yZW1lbnUiIGJ1dCBmb3IgSW5zZXJ0IG1vZGUKK3w6aW50cm98CTppbnRbcm9dCXByaW50IHRoZSBpbnRyb2R1Y3RvcnkgbWVzc2FnZQorfDppc2VhcmNofAk6aXNbZWFyY2hdCWxpc3Qgb25lIGxpbmUgd2hlcmUgaWRlbnRpZmllciBtYXRjaGVzCit8OmlzcGxpdHwJOmlzcFtsaXRdCXNwbGl0IHdpbmRvdyBhbmQganVtcCB0byBkZWZpbml0aW9uIG9mCisJCQkJaWRlbnRpZmllcgorfDppdW5tYXB8CTppdVtubWFwXQlsaWtlICI6dW5tYXAiIGJ1dCBmb3IgSW5zZXJ0IG1vZGUKK3w6aXVuYWJicmV2fAk6aXVuYVtiYnJldl0JbGlrZSAiOnVuYWJicmV2IiBidXQgZm9yIEluc2VydCBtb2RlCit8Oml1bm1lbnV8CTppdW5tZVtudV0JcmVtb3ZlIG1lbnUgZm9yIEluc2VydCBtb2RlCit8OmpvaW58CQk6altvaW5dCQlqb2luIGxpbmVzCit8Omp1bXBzfAk6anVbbXBzXQlwcmludCB0aGUganVtcCBsaXN0Cit8Omt8CQk6awkJc2V0IGEgbWFyaworfDprZWVwbWFya3N8CTprZWVbcG1hcmtzXQlmb2xsb3dpbmcgY29tbWFuZCBrZWVwcyBtYXJrcyB3aGVyZSB0aGV5IGFyZQorfDprZWVwanVtcHN8CTprZWVwaltqdW1wc10JZm9sbG93aW5nIGNvbW1hbmQga2VlcHMganVtcGxpc3QgYW5kIG1hcmtzCit8Omxpc3R8CQk6bFtpc3RdCQlwcmludCBsaW5lcworfDpsYXN0fAkJOmxhW3N0XQkJZ28gdG8gdGhlIGxhc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdAorfDpsYW5ndWFnZXwJOmxhbltndWFnZV0Jc2V0IHRoZSBsYW5ndWFnZSAobG9jYWxlKQorfDpsY2R8CQk6bGNbZF0JCWNoYW5nZSBkaXJlY3RvcnkgbG9jYWxseQorfDpsY2hkaXJ8CTpsY2hbZGlyXQljaGFuZ2UgZGlyZWN0b3J5IGxvY2FsbHkKK3w6bGVmdHwJCTpsZVtmdF0JCWxlZnQgYWxpZ24gbGluZXMKK3w6bGVmdGFib3ZlfAk6bGVmdGFbYm92ZV0JbWFrZSBzcGxpdCB3aW5kb3cgYXBwZWFyIGxlZnQgb3IgYWJvdmUKK3w6bGV0fAkJOmxldAkJYXNzaWduIGEgdmFsdWUgdG8gYSB2YXJpYWJsZSBvciBvcHRpb24KK3w6bG1hcHwJCTpsbVthcF0JCWxpa2UgIjptYXAhIiBidXQgaW5jbHVkZXMgTGFuZy1BcmcgbW9kZQorfDpsbWFwY2xlYXJ8CTpsbWFwY1tsZWFyXQlsaWtlICI6bWFwY2xlYXIhIiBidXQgaW5jbHVkZXMgTGFuZy1BcmcgbW9kZQorfDpsbm9yZW1hcHwJOmxuW29yZW1hcF0JbGlrZSAiOm5vcmVtYXAhIiBidXQgaW5jbHVkZXMgTGFuZy1BcmcgbW9kZQorfDpsb2Fka2V5bWFwfAk6bG9hZGtbZXltYXBdCWxvYWQgdGhlIGZvbGxvd2luZyBrZXltYXBzIHVudGlsIEVPRgorfDpsb2Fkdmlld3wJOmxvW2Fkdmlld10JbG9hZCB2aWV3IGZvciBjdXJyZW50IHdpbmRvdyBmcm9tIGEgZmlsZQorfDpsb2NrbWFya3N8CTpsb2Nba21hcmtzXQlmb2xsb3dpbmcgY29tbWFuZCBrZWVwcyBtYXJrcyB3aGVyZSB0aGV5IGFyZQorfDpsc3wJCTpscwkJbGlzdCBhbGwgYnVmZmVycworfDpsdW5tYXB8CTpsdVtubWFwXQlsaWtlICI6dW5tYXAhIiBidXQgaW5jbHVkZXMgTGFuZy1BcmcgbW9kZQorfDptb3ZlfAkJOm1bb3ZlXQkJbW92ZSBsaW5lcworfDptYXJrfAkJOm1hW3JrXQkJc2V0IGEgbWFyaworfDptYWtlfAkJOm1ha1tlXQkJZXhlY3V0ZSBleHRlcm5hbCBjb21tYW5kICdtYWtlcHJnJyBhbmQgcGFyc2UKKwkJCQllcnJvciBtZXNzYWdlcworfDptYXB8CQk6bWFwCQlzaG93IG9yIGVudGVyIGEgbWFwcGluZworfDptYXBjbGVhcnwJOm1hcGNbbGVhcl0JY2xlYXIgYWxsIG1hcHBpbmdzIGZvciBOb3JtYWwgYW5kIFZpc3VhbCBtb2RlCit8Om1hcmtzfAk6bWFya3MJCWxpc3QgYWxsIG1hcmtzCit8Om1hdGNofAk6bWF0W2NoXQlkZWZpbmUgYSBtYXRjaCB0byBoaWdobGlnaHQKK3w6bWVudXwJCTptZVtudV0JCWVudGVyIGEgbmV3IG1lbnUgaXRlbQorfDptZW51dHJhbnNsYXRlfCA6bWVudXRbcmFuc2xhdGVdIGFkZCBhIG1lbnUgdHJhbnNsYXRpb24gaXRlbQorfDptZXNzYWdlc3wJOm1lc1tzYWdlc10JdmlldyBwcmV2aW91c2x5IGRpc3BsYXllZCBtZXNzYWdlcworfDpta2V4cmN8CTpta1tleHJjXQl3cml0ZSBjdXJyZW50IG1hcHBpbmdzIGFuZCBzZXR0aW5ncyB0byBhIGZpbGUKK3w6bWtzZXNzaW9ufAk6bWtzW2Vzc2lvbl0Jd3JpdGUgc2Vzc2lvbiBpbmZvIHRvIGEgZmlsZQorfDpta3ZpbXJjfAk6bWt2W2ltcmNdCXdyaXRlIGN1cnJlbnQgbWFwcGluZ3MgYW5kIHNldHRpbmdzIHRvIGEgZmlsZQorfDpta3ZpZXd8CTpta3ZpZVt3XQl3cml0ZSB2aWV3IG9mIGN1cnJlbnQgd2luZG93IHRvIGEgZmlsZQorfDptb2RlfAkJOm1vZFtlXQkJc2hvdyBvciBjaGFuZ2UgdGhlIHNjcmVlbiBtb2RlCit8Om5leHR8CQk6bltleHRdCQlnbyB0byBuZXh0IGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QKK3w6bmV3fAkJOm5ldwkJY3JlYXRlIGEgbmV3IGVtcHR5IHdpbmRvdworfDpubWFwfAkJOm5tW2FwXQkJbGlrZSAiOm1hcCIgYnV0IGZvciBOb3JtYWwgbW9kZQorfDpubWFwY2xlYXJ8CTpubWFwY1tsZWFyXQljbGVhciBhbGwgbWFwcGluZ3MgZm9yIE5vcm1hbCBtb2RlCit8Om5tZW51fAk6bm1lW251XQlhZGQgbWVudSBmb3IgTm9ybWFsIG1vZGUKK3w6bm5vcmVtYXB8CTpubltvcmVtYXBdCWxpa2UgIjpub3JlbWFwIiBidXQgZm9yIE5vcm1hbCBtb2RlCit8Om5ub3JlbWVudXwJOm5ub3JlbWVbbnVdCWxpa2UgIjpub3JlbWVudSIgYnV0IGZvciBOb3JtYWwgbW9kZQorfDpub3JlbWFwfAk6bm9bcmVtYXBdCWVudGVyIGEgbWFwcGluZyB0aGF0IHdpbGwgbm90IGJlIHJlbWFwcGVkCit8Om5vaGxzZWFyY2h8CTpub2hbbHNlYXJjaF0Jc3VzcGVuZCAnaGxzZWFyY2gnIGhpZ2hsaWdodGluZworfDpub3JlYWJicmV2fAk6bm9yZWFbYmJyZXZdCWVudGVyIGFuIGFiYnJldmlhdGlvbiB0aGF0IHdpbGwgbm90IGJlCisJCQkJcmVtYXBwZWQKK3w6bm9yZW1lbnV8CTpub3JlbWVbbnVdCWVudGVyIGEgbWVudSB0aGF0IHdpbGwgbm90IGJlIHJlbWFwcGVkCit8Om5vcm1hbHwJOm5vcm1bYWxdCWV4ZWN1dGUgTm9ybWFsIG1vZGUgY29tbWFuZHMKK3w6bnVtYmVyfAk6bnVbbWJlcl0JcHJpbnQgbGluZXMgd2l0aCBsaW5lIG51bWJlcgorfDpudW5tYXB8CTpudW5bbWFwXQlsaWtlICI6dW5tYXAiIGJ1dCBmb3IgTm9ybWFsIG1vZGUKK3w6bnVubWVudXwJOm51bm1lW251XQlyZW1vdmUgbWVudSBmb3IgTm9ybWFsIG1vZGUKK3w6b3BlbnwJCTpvW3Blbl0JCXN0YXJ0IG9wZW4gbW9kZSAobm90IGltcGxlbWVudGVkKQorfDpvbWFwfAkJOm9tW2FwXQkJbGlrZSAiOm1hcCIgYnV0IGZvciBPcGVyYXRvci1wZW5kaW5nIG1vZGUKK3w6b21hcGNsZWFyfAk6b21hcGNbbGVhcl0JcmVtb3ZlIGFsbCBtYXBwaW5ncyBmb3IgT3BlcmF0b3ItcGVuZGluZyBtb2RlCit8Om9tZW51fAk6b21lW251XQlhZGQgbWVudSBmb3IgT3BlcmF0b3ItcGVuZGluZyBtb2RlCit8Om9ubHl8CQk6b25bbHldCQljbG9zZSBhbGwgd2luZG93cyBleGNlcHQgY3VycmVudCBvbmUKK3w6b25vcmVtYXB8CTpvbm9bcmVtYXBdCWxpa2UgIjpub3JlbWFwIiBidXQgZm9yIE9wZXJhdG9yLXBlbmRpbmcgbW9kZQorfDpvbm9yZW1lbnV8CTpvbm9yZW1lW251XQlsaWtlICI6bm9yZW1lbnUiIGJ1dCBmb3IgT3BlcmF0b3ItcGVuZGluZyBtb2RlCit8Om9wdGlvbnN8CTpvcHRbaW9uc10Jb3BlbiB0aGUgb3B0aW9ucy13aW5kb3cKK3w6b3VubWFwfAk6b3Vbbm1hcF0JbGlrZSAiOnVubWFwIiBidXQgZm9yIE9wZXJhdG9yLXBlbmRpbmcgbW9kZQorfDpvdW5tZW51fAk6b3VubWVbbnVdCXJlbW92ZSBtZW51IGZvciBPcGVyYXRvci1wZW5kaW5nIG1vZGUKK3w6cHJpbnR8CTpwW3JpbnRdCXByaW50IGxpbmVzCit8OnBjbG9zZXwJOnBjW2xvc2VdCWNsb3NlIHByZXZpZXcgd2luZG93Cit8OnBlZGl0fAk6cGVkW2l0XQllZGl0IGZpbGUgaW4gdGhlIHByZXZpZXcgd2luZG93Cit8OnBlcmx8CQk6cGVbcmxdCQlleGVjdXRlIFBlcmwgY29tbWFuZAorfDpwZXJsZG98CTpwZXJsZFtvXQlleGVjdXRlIFBlcmwgY29tbWFuZCBmb3IgZWFjaCBsaW5lCit8OnBvcHwJCTpwb1twXQkJanVtcCB0byBvbGRlciBlbnRyeSBpbiB0YWcgc3RhY2sKK3w6cG9wdXB8CTpwb3BbdXBdCXBvcHVwIGEgbWVudSBieSBuYW1lCit8OnBwb3B8CQk6cHBbb3BdCQkiOnBvcCIgaW4gcHJldmlldyB3aW5kb3cKK3w6cHJlc2VydmV8CTpwcmVbc2VydmVdCXdyaXRlIGFsbCB0ZXh0IHRvIHN3YXAgZmlsZQorfDpwcmV2aW91c3wJOnByZXZbaW91c10JZ28gdG8gcHJldmlvdXMgZmlsZSBpbiBhcmd1bWVudCBsaXN0Cit8OnByb21wdGZpbmR8CTpwcm9bbXB0ZmluZF0JU2VhcmNoIGRpYWxvZworfDpwcm9tcHRyZXBsfAk6cHJvbXB0cltlcGxdCVNlYXJjaC9SZXBsYWNlIGRpYWxvZworfDpwc2VhcmNofAk6cHNbZWFyY2hdCWxpa2UgIjppanVtcCIgYnV0IHNob3dzIG1hdGNoIGluIHByZXZpZXcgd2luZG93Cit8OnB0YWd8CQk6cHRbYWddCQlzaG93IHRhZyBpbiBwcmV2aWV3IHdpbmRvdworfDpwdE5leHR8CTpwdE5bZXh0XQl8OnROZXh0fCBpbiBwcmV2aWV3IHdpbmRvdworfDpwdGZpcnN0fAk6cHRmW2lyc3RdCXw6dHJld2luZHwgaW4gcHJldmlldyB3aW5kb3cKK3w6cHRqdW1wfAk6cHRqW3VtcF0JfDp0anVtcHwgYW5kIHNob3cgdGFnIGluIHByZXZpZXcgd2luZG93Cit8OnB0bGFzdHwJOnB0bFthc3RdCXw6dGxhc3R8IGluIHByZXZpZXcgd2luZG93Cit8OnB0bmV4dHwJOnB0bltleHRdCXw6dG5leHR8IGluIHByZXZpZXcgd2luZG93Cit8OnB0cHJldmlvdXN8CTpwdHBbcmV2aW91c10JfDp0cHJldmlvdXN8IGluIHByZXZpZXcgd2luZG93Cit8OnB0cmV3aW5kfAk6cHRyW2V3aW5kXQl8OnRyZXdpbmR8IGluIHByZXZpZXcgd2luZG93Cit8OnB0c2VsZWN0fAk6cHRzW2VsZWN0XQl8OnRzZWxlY3R8IGFuZCBzaG93IHRhZyBpbiBwcmV2aWV3IHdpbmRvdworfDpwdXR8CQk6cHVbdF0JCWluc2VydCBjb250ZW50cyBvZiByZWdpc3RlciBpbiB0aGUgdGV4dAorfDpwd2R8CQk6cHdbZF0JCXByaW50IGN1cnJlbnQgZGlyZWN0b3J5Cit8OnB5dGhvbnwJOnB5W3Rob25dCWV4ZWN1dGUgUHl0aG9uIGNvbW1hbmQKK3w6cHlmaWxlfAk6cHlmW2lsZV0JZXhlY3V0ZSBQeXRob24gc2NyaXB0IGZpbGUKK3w6cXVpdHwJCTpxW3VpdF0JCXF1aXQgY3VycmVudCB3aW5kb3cgKHdoZW4gb25lIHdpbmRvdyBxdWl0IFZpbSkKK3w6cXVpdGFsbHwJOnF1aXRhW2xsXQlxdWl0IFZpbQorfDpxYWxsfAkJOnFhW2xsXQkJcXVpdCBWaW0KK3w6cmVhZHwJCTpyW2VhZF0JCXJlYWQgZmlsZSBpbnRvIHRoZSB0ZXh0Cit8OnJlY292ZXJ8CTpyZWNbb3Zlcl0JcmVjb3ZlciBhIGZpbGUgZnJvbSBhIHN3YXAgZmlsZQorfDpyZWRvfAkJOnJlZFtvXQkJcmVkbyBvbmUgdW5kb25lIGNoYW5nZQorfDpyZWRpcnwJOnJlZGlbcl0JcmVkaXJlY3QgbWVzc2FnZXMgdG8gYSBmaWxlIG9yIHJlZ2lzdGVyCit8OnJlZHJhd3wJOnJlZHJbYXddCWZvcmNlIGEgcmVkcmF3IG9mIHRoZSBkaXNwbGF5Cit8OnJlZHJhd3N0YXR1c3wJOnJlZHJhd3NbdGF0dXNdCWZvcmNlIGEgcmVkcmF3IG9mIHRoZSBzdGF0dXMgbGluZShzKQorfDpyZWdpc3RlcnN8CTpyZWdbaXN0ZXJzXQlkaXNwbGF5IHRoZSBjb250ZW50cyBvZiByZWdpc3RlcnMKK3w6cmVzaXplfAk6cmVzW2l6ZV0JY2hhbmdlIGN1cnJlbnQgd2luZG93IGhlaWdodAorfDpyZXRhYnwJOnJldFthYl0JY2hhbmdlIHRhYiBzaXplCit8OnJldHVybnwJOnJldHVbcm5dCXJldHVybiBmcm9tIGEgdXNlciBmdW5jdGlvbgorfDpyZXdpbmR8CTpyZXdbaW5kXQlnbyB0byB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdAorfDpyaWdodHwJOnJpW2dodF0JcmlnaHQgYWxpZ24gdGV4dAorfDpyaWdodGJlbG93fAk6cmlnaHRiW2Vsb3ddCW1ha2Ugc3BsaXQgd2luZG93IGFwcGVhciByaWdodCBvciBiZWxvdworfDpydWJ5fAkJOnJ1Ylt5XQkJZXhlY3V0ZSBSdWJ5IGNvbW1hbmQKK3w6cnVieWRvfAk6cnVieWRbb10JZXhlY3V0ZSBSdWJ5IGNvbW1hbmQgZm9yIGVhY2ggbGluZQorfDpydWJ5ZmlsZXwJOnJ1YnlmW2lsZV0JZXhlY3V0ZSBSdWJ5IHNjcmlwdCBmaWxlCit8OnJ1bnRpbWV8CTpydVtudGltZV0Jc291cmNlIHZpbSBzY3JpcHRzIGluICdydW50aW1lcGF0aCcKK3w6cnZpbWluZm98CTpydltpbWluZm9dCXJlYWQgZnJvbSB2aW1pbmZvIGZpbGUKK3w6c3Vic3RpdHV0ZXwJOnNbdWJzdGl0dXRlXQlmaW5kIGFuZCByZXBsYWNlIHRleHQKK3w6c05leHR8CTpzTltleHRdCXNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gcHJldmlvdXMgZmlsZSBpbgorCQkJCWFyZ3VtZW50IGxpc3QKK3w6c2FyZ3VtZW50fAk6c2Fbcmd1bWVudF0Jc3BsaXQgd2luZG93IGFuZCBnbyB0byBzcGVjaWZpYyBmaWxlIGluCisJCQkJYXJndW1lbnQgbGlzdAorfDpzYWxsfAkJOnNhbFtsXQkJb3BlbiBhIHdpbmRvdyBmb3IgZWFjaCBmaWxlIGluIGFyZ3VtZW50IGxpc3QKK3w6c2F2ZWFzfAk6c2F2W2Vhc10Jc2F2ZSBmaWxlIHVuZGVyIGFub3RoZXIgbmFtZS4KK3w6c2J1ZmZlcnwJOnNiW3VmZmVyXQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIHNwZWNpZmljIGZpbGUgaW4gdGhlCisJCQkJYnVmZmVyIGxpc3QKK3w6c2JOZXh0fAk6c2JOW2V4dF0Jc3BsaXQgd2luZG93IGFuZCBnbyB0byBwcmV2aW91cyBmaWxlIGluIHRoZQorCQkJCWJ1ZmZlciBsaXN0Cit8OnNiYWxsfAk6c2JhW2xsXQlvcGVuIGEgd2luZG93IGZvciBlYWNoIGZpbGUgaW4gdGhlIGJ1ZmZlciBsaXN0Cit8OnNiZmlyc3R8CTpzYmZbaXJzdF0Jc3BsaXQgd2luZG93IGFuZCBnbyB0byBmaXJzdCBmaWxlIGluIHRoZQorCQkJCWJ1ZmZlciBsaXN0Cit8OnNibGFzdHwJOnNibFthc3RdCXNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gbGFzdCBmaWxlIGluIGJ1ZmZlcgorCQkJCWxpc3QKK3w6c2Jtb2RpZmllZHwJOnNibVtvZGlmaWVkXQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIG1vZGlmaWVkIGZpbGUgaW4gdGhlCisJCQkJYnVmZmVyIGxpc3QKK3w6c2JuZXh0fAk6c2JuW2V4dF0Jc3BsaXQgd2luZG93IGFuZCBnbyB0byBuZXh0IGZpbGUgaW4gdGhlIGJ1ZmZlcgorCQkJCWxpc3QKK3w6c2JwcmV2aW91c3wJOnNicFtyZXZpb3VzXQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIHByZXZpb3VzIGZpbGUgaW4gdGhlCisJCQkJYnVmZmVyIGxpc3QKK3w6c2JyZXdpbmR8CTpzYnJbZXdpbmRdCXNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gZmlyc3QgZmlsZSBpbiB0aGUKKwkJCQlidWZmZXIgbGlzdAorfDpzY3JpcHRuYW1lc3wJOnNjcmlwW3RuYW1lc10JbGlzdCBuYW1lcyBvZiBhbGwgc291cmNlZCBWaW0gc2NyaXB0cworfDpzY3JpcHRlbmNvZGluZ3wgOnNjcmlwdGVbbmNvZGluZ10JZW5jb2RpbmcgdXNlZCBpbiBzb3VyY2VkIFZpbSBzY3JpcHQKK3w6c2NzY29wZXwJOnNjc1tjb3BlXSAgICAgIHNwbGl0IHdpbmRvdyBhbmQgZXhlY3V0ZSBjc2NvcGUgY29tbWFuZAorfDpzZXR8CQk6c2VbdF0JCXNob3cgb3Igc2V0IG9wdGlvbnMKK3w6c2V0ZmlsZXR5cGV8CTpzZXRmW2lsZXR5cGVdCXNldCAnZmlsZXR5cGUnLCB1bmxlc3MgaXQgd2FzIHNldCBhbHJlYWR5Cit8OnNldGdsb2JhbHwJOnNldGdbbG9iYWxdCXNob3cgZ2xvYmFsIHZhbHVlcyBvZiBvcHRpb25zCit8OnNldGxvY2FsfAk6c2V0bFtvY2FsXQlzaG93IG9yIHNldCBvcHRpb25zIGxvY2FsbHkKK3w6c2ZpbmR8CTpzZltpbmRdCXNwbGl0IGN1cnJlbnQgd2luZG93IGFuZCBlZGl0IGZpbGUgaW4gJ3BhdGgnCit8OnNmaXJzdHwJOnNmaXJbc3RdCXNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gZmlyc3QgZmlsZSBpbiB0aGUKKwkJCQlhcmd1bWVudCBsaXN0Cit8OnNoZWxsfAk6c2hbZWxsXQllc2NhcGUgdG8gYSBzaGVsbAorfDpzaW1hbHR8CTpzaW1bYWx0XQlXaW4zMiBHVUk6IHNpbXVsYXRlIFdpbmRvd3MgQUxUIGtleQorfDpzaWdufAkJOnNpZ1tuXQkJbWFuaXB1bGF0ZSBzaWducworfDpzaWxlbnR8CTpzaWxbZW50XQlSdW4gYSBjb21tYW5kIHNpbGVudGx5Cit8OnNsZWVwfAk6c2xbZWVwXQlkbyBub3RoaW5nIGZvciBhIGZldyBzZWNvbmRzCit8OnNsYXN0fAk6c2xhW3N0XQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIGxhc3QgZmlsZSBpbiB0aGUKKwkJCQlhcmd1bWVudCBsaXN0Cit8OnNtYWdpY3wJOnNtW2FnaWNdCTpzdWJzdGl0dXRlIHdpdGggJ21hZ2ljJworfDpzbmV4dHwJOnNuW2V4dF0Jc3BsaXQgd2luZG93IGFuZCBnbyB0byBuZXh0IGZpbGUgaW4gdGhlCisJCQkJYXJndW1lbnQgbGlzdAorfDpzbmlmZnwJOnNuaVtmZl0Jc2VuZCByZXF1ZXN0IHRvIHNuaWZmCit8OnNub21hZ2ljfAk6c25vW21hZ2ljXQk6c3Vic3RpdHV0ZSB3aXRoICdub21hZ2ljJworfDpzb3VyY2V8CTpzb1t1cmNlXQlyZWFkIFZpbSBvciBFeCBjb21tYW5kcyBmcm9tIGEgZmlsZQorfDpzcGxpdHwJOnNwW2xpdF0Jc3BsaXQgY3VycmVudCB3aW5kb3cKK3w6c3ByZXZpb3VzfAk6c3ByW2V2aW91c10Jc3BsaXQgd2luZG93IGFuZCBnbyB0byBwcmV2aW91cyBmaWxlIGluIHRoZQorCQkJCWFyZ3VtZW50IGxpc3QKK3w6c3Jld2luZHwJOnNyZVt3aW5kXQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIGZpcnN0IGZpbGUgaW4gdGhlCisJCQkJYXJndW1lbnQgbGlzdAorfDpzdG9wfAkJOnN0W29wXQkJc3VzcGVuZCB0aGUgZWRpdG9yIG9yIGVzY2FwZSB0byBhIHNoZWxsCit8OnN0YWd8CQk6c3RhW2ddCQlzcGxpdCB3aW5kb3cgYW5kIGp1bXAgdG8gYSB0YWcKK3w6c3RhcnRpbnNlcnR8CTpzdGFyW3RpbnNlcnRdCXN0YXJ0IEluc2VydCBtb2RlCit8OnN0b3BpbnNlcnR8fAk6c3RvcGlbbnNlcnRdCXN0b3AgSW5zZXJ0IG1vZGUKK3w6c3RqdW1wfAk6c3RqW3VtcF0JZG8gIjp0anVtcCIgYW5kIHNwbGl0IHdpbmRvdworfDpzdHNlbGVjdHwJOnN0c1tlbGVjdF0JZG8gIjp0c2VsZWN0IiBhbmQgc3BsaXQgd2luZG93Cit8OnN1bmhpZGV8CTpzdW5baGlkZV0Jc2FtZSBhcyAiOnVuaGlkZSIKK3w6c3VzcGVuZHwJOnN1c1twZW5kXQlzYW1lIGFzICI6c3RvcCIKK3w6c3ZpZXd8CTpzdltpZXddCXNwbGl0IHdpbmRvdyBhbmQgZWRpdCBmaWxlIHJlYWQtb25seQorfDpzd2FwbmFtZXwJOnN3W2FwbmFtZV0Jc2hvdyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBzd2FwIGZpbGUKK3w6c3ludGF4fAk6c3lbbnRheF0Jc3ludGF4IGhpZ2hsaWdodGluZworfDpzeW5jYmluZHwJOnN5bmNbYmluZF0Jc3luYyBzY3JvbGwgYmluZGluZworfDp0fAkJOnQJCXNhbWUgYXMgIjpjb3B5IgorfDp0TmV4dHwJOnROW2V4dF0JanVtcCB0byBwcmV2aW91cyBtYXRjaGluZyB0YWcKK3w6dGFnfAkJOnRhW2ddCQlqdW1wIHRvIHRhZworfDp0YWdzfAkJOnRhZ3MJCXNob3cgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWcgc3RhY2sKK3w6dGNsfAkJOnRjW2xdCQlleGVjdXRlIFRjbCBjb21tYW5kCit8OnRjbGRvfAk6dGNsZFtvXQlleGVjdXRlIFRjbCBjb21tYW5kIGZvciBlYWNoIGxpbmUKK3w6dGNsZmlsZXwJOnRjbGZbaWxlXQlleGVjdXRlIFRjbCBzY3JpcHQgZmlsZQorfDp0ZWFyb2ZmfAk6dGVbYXJvZmZdCXRlYXItb2ZmIGEgbWVudQorfDp0Zmlyc3R8CTp0ZltpcnN0XQlqdW1wIHRvIGZpcnN0IG1hdGNoaW5nIHRhZworfDp0aHJvd3wJOnRoW3Jvd10JdGhyb3cgYW4gZXhjZXB0aW9uCit8OnRqdW1wfAk6dGpbdW1wXQlsaWtlICI6dHNlbGVjdCIsIGJ1dCBqdW1wIGRpcmVjdGx5IHdoZW4gdGhlcmUKKwkJCQlpcyBvbmx5IG9uZSBtYXRjaAorfDp0bGFzdHwJOnRsW2FzdF0JanVtcCB0byBsYXN0IG1hdGNoaW5nIHRhZworfDp0bWVudXwJOnRtW2VudV0JZGVmaW5lIG1lbnUgdG9vbHRpcAorfDp0bmV4dHwJOnRuW2V4dF0JanVtcCB0byBuZXh0IG1hdGNoaW5nIHRhZworfDp0b3BsZWZ0fAk6dG9bcGxlZnRdCW1ha2Ugc3BsaXQgd2luZG93IGFwcGVhciBhdCB0b3Agb3IgZmFyIGxlZnQKK3w6dHByZXZpb3VzfAk6dHBbcmV2aW91c10JanVtcCB0byBwcmV2aW91cyBtYXRjaGluZyB0YWcKK3w6dHJld2luZHwJOnRyW2V3aW5kXQlqdW1wIHRvIGZpcnN0IG1hdGNoaW5nIHRhZworfDp0cnl8CQk6dHJ5CQlleGVjdXRlIGNvbW1hbmRzLCBhYm9ydCBvbiBlcnJvciBvciBleGNlcHRpb24KK3w6dHNlbGVjdHwJOnRzW2VsZWN0XQlsaXN0IG1hdGNoaW5nIHRhZ3MgYW5kIHNlbGVjdCBvbmUKK3w6dHVubWVudXwJOnR1W25tZW51XQlyZW1vdmUgbWVudSB0b29sdGlwCit8OnVuZG98CQk6dVtuZG9dCQl1bmRvIGxhc3QgY2hhbmdlKHMpCit8OnVuYWJicmV2aWF0ZXwJOnVuYVtiYnJldmlhdGVdCXJlbW92ZSBhYmJyZXZpYXRpb24KK3w6dW5oaWRlfAk6dW5oW2lkZV0Jb3BlbiBhIHdpbmRvdyBmb3IgZWFjaCBsb2FkZWQgZmlsZSBpbiB0aGUKKwkJCQlidWZmZXIgbGlzdAorfDp1bmxldHwJOnVubFtldF0JZGVsZXRlIHZhcmlhYmxlCit8OnVubWFwfAk6dW5tW2FwXQlyZW1vdmUgbWFwcGluZworfDp1bm1lbnV8CTp1bm1lW251XQlyZW1vdmUgbWVudQorfDp1cGRhdGV8CTp1cFtkYXRlXQl3cml0ZSBidWZmZXIgaWYgbW9kaWZpZWQKK3w6dmdsb2JhbHwJOnZbZ2xvYmFsXQlleGVjdXRlIGNvbW1hbmRzIGZvciBub3QgbWF0Y2hpbmcgbGluZXMKK3w6dmVyc2lvbnwJOnZlW3JzaW9uXQlwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgb3RoZXIgaW5mbworfDp2ZXJib3NlfAk6dmVyYltvc2VdCWV4ZWN1dGUgY29tbWFuZCB3aXRoICd2ZXJib3NlJyBzZXQKK3w6dmVydGljYWx8CTp2ZXJ0W2ljYWxdCW1ha2UgZm9sbG93aW5nIGNvbW1hbmQgc3BsaXQgdmVydGljYWxseQorfDp2aXN1YWx8CTp2aVtzdWFsXQlzYW1lIGFzICI6ZWRpdCIsIGJ1dCB0dXJucyBvZmYgIkV4IiBtb2RlCit8OnZpZXd8CQk6dmllW3ddCQllZGl0IGEgZmlsZSByZWFkLW9ubHkKK3w6dm1hcHwJCTp2bVthcF0JCWxpa2UgIjptYXAiIGJ1dCBmb3IgVmlzdWFsIG1vZGUKK3w6dm1hcGNsZWFyfAk6dm1hcGNbbGVhcl0JcmVtb3ZlIGFsbCBtYXBwaW5ncyBmb3IgVmlzdWFsIG1vZGUKK3w6dm1lbnV8CTp2bWVbbnVdCWFkZCBtZW51IGZvciBWaXN1YWwgbW9kZQorfDp2bm9yZW1hcHwJOnZuW29yZW1hcF0JbGlrZSAiOm5vcmVtYXAiIGJ1dCBmb3IgVmlzdWFsIG1vZGUKK3w6dm5ld3wJCTp2bmVbd10JCWNyZWF0ZSBhIG5ldyBlbXB0eSB3aW5kb3csIHZlcnRpY2FsbHkgc3BsaXQKK3w6dm5vcmVtZW51fAk6dm5vcmVtZVtudV0JbGlrZSAiOm5vcmVtZW51IiBidXQgZm9yIFZpc3VhbCBtb2RlCit8OnZzcGxpdHwJOnZzW3BsaXRdCXNwbGl0IGN1cnJlbnQgd2luZG93IHZlcnRpY2FsbHkKK3w6dnVubWFwfAk6dnVbbm1hcF0JbGlrZSAiOnVubWFwIiBidXQgZm9yIFZpc3VhbCBtb2RlCit8OnZ1bm1lbnV8CTp2dW5tZVtudV0JcmVtb3ZlIG1lbnUgZm9yIFZpc3VhbCBtb2RlCit8OndpbmRvfAk6d2luZG8JCWV4ZWN1dGUgY29tbWFuZCBpbiBlYWNoIHdpbmRvdworfDp3cml0ZXwJOndbcml0ZV0Jd3JpdGUgdG8gYSBmaWxlCit8OndOZXh0fAk6d05bZXh0XQl3cml0ZSB0byBhIGZpbGUgYW5kIGdvIHRvIHByZXZpb3VzIGZpbGUgaW4KKwkJCQlhcmd1bWVudCBsaXN0Cit8OndhbGx8CQk6d2FbbGxdCQl3cml0ZSBhbGwgKGNoYW5nZWQpIGJ1ZmZlcnMKK3w6d2hpbGV8CTp3aFtpbGVdCWV4ZWN1dGUgbG9vcCBmb3IgYXMgbG9uZyBhcyBjb25kaXRpb24gbWV0Cit8OndpbnNpemV8CTp3aVtuc2l6ZV0JZ2V0IG9yIHNldCB3aW5kb3cgc2l6ZSAob2Jzb2xldGUpCit8OndpbmNtZHwJOndpbmNbbWRdCWV4ZWN1dGUgYSBXaW5kb3cgKENUUkwtVykgY29tbWFuZAorfDp3aW5wb3N8CTp3aW5wW29zXQlnZXQgb3Igc2V0IHdpbmRvdyBwb3NpdGlvbgorfDp3bmV4dHwJOnduW2V4dF0Jd3JpdGUgdG8gYSBmaWxlIGFuZCBnbyB0byBuZXh0IGZpbGUgaW4KKwkJCQlhcmd1bWVudCBsaXN0Cit8OndwcmV2aW91c3wJOndwW3JldmlvdXNdCXdyaXRlIHRvIGEgZmlsZSBhbmQgZ28gdG8gcHJldmlvdXMgZmlsZSBpbgorCQkJCWFyZ3VtZW50IGxpc3QKK3w6d3F8CQk6d3EJCXdyaXRlIHRvIGEgZmlsZSBhbmQgcXVpdCB3aW5kb3cgb3IgVmltCit8OndxYWxsfAk6d3FhW2xsXQl3cml0ZSBhbGwgY2hhbmdlZCBidWZmZXJzIGFuZCBxdWl0IFZpbQorfDp3c3ZlcmJ8CTp3c1t2ZXJiXQlwYXNzIHRoZSB2ZXJiIHRvIHdvcmtzaG9wIG92ZXIgSVBDCit8Ond2aW1pbmZvfAk6d3ZbaW1pbmZvXQl3cml0ZSB0byB2aW1pbmZvIGZpbGUKK3w6eGl0fAkJOnhbaXRdCQl3cml0ZSBpZiBidWZmZXIgY2hhbmdlZCBhbmQgcXVpdCB3aW5kb3cgb3IgVmltCit8OnhhbGx8CQk6eGFbbGxdCQlzYW1lIGFzICI6d3FhbGwiCit8Onlhbmt8CQk6eVthbmtdCQl5YW5rIGxpbmVzIGludG8gYSByZWdpc3RlcgorfDp6fAkJOnoJCXByaW50IHNvbWUgbGluZXMKK3w6fnwJCTp+CQlyZXBlYXQgbGFzdCAiOnN1YnN0aXR1dGUiCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9pbnNlcnQudHh0IGIvcnVudGltZS9kb2MvaW5zZXJ0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDM5ZGJlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvaW5zZXJ0LnR4dApAQCAtMCwwICsxLDEwNjQgQEAKKyppbnNlcnQudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBBcHIgMDkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCisJCQkJCQkqSW5zZXJ0KiAqSW5zZXJ0LW1vZGUqCitJbnNlcnRpbmcgYW5kIHJlcGxhY2luZyB0ZXh0CQkJCSptb2RlLWlucy1yZXBsKgorCitNb3N0IG9mIHRoaXMgZmlsZSBpcyBhYm91dCBJbnNlcnQgYW5kIFJlcGxhY2UgbW9kZS4gIEF0IHRoZSBlbmQgYXJlIGEgZmV3Citjb21tYW5kcyBmb3IgaW5zZXJ0aW5nIHRleHQgaW4gb3RoZXIgd2F5cy4KKworQW4gb3ZlcnZpZXcgb2YgdGhlIG1vc3Qgb2Z0ZW4gdXNlZCBjb21tYW5kcyBjYW4gYmUgZm91bmQgaW4gY2hhcHRlciAyNCBvZiB0aGUKK3VzZXIgbWFudWFsIHx1c3JfMjQudHh0fC4KKworMS4gU3BlY2lhbCBrZXlzCQkJCQkJfGlucy1zcGVjaWFsLWtleXN8CisyLiBTcGVjaWFsIHNwZWNpYWwga2V5cwkJCQkJfGlucy1zcGVjaWFsLXNwZWNpYWx8CiszLiAndGV4dHdpZHRoJyBhbmQgJ3dyYXBtYXJnaW4nIG9wdGlvbnMJCQl8aW5zLXRleHR3aWR0aHwKKzQuICdleHBhbmR0YWInLCAnc21hcnR0YWInIGFuZCAnc29mdHRhYnN0b3AnICBvcHRpb25zCXxpbnMtZXhwYW5kdGFifAorNS4gUmVwbGFjZSBtb2RlCQkJCQkJfFJlcGxhY2UtbW9kZXwKKzYuIFZpcnR1YWwgUmVwbGFjZSBtb2RlCQkJCQl8VmlydHVhbC1SZXBsYWNlLW1vZGV8Cis3LiBJbnNlcnQgbW9kZSBjb21wbGV0aW9uCQkJCXxpbnMtY29tcGxldGlvbnwKKzguIEluc2VydCBtb2RlIGNvbW1hbmRzCQkJCQl8aW5zZXJ0aW5nfAorOS4gRXggaW5zZXJ0IGNvbW1hbmRzCQkJCQl8aW5zZXJ0aW5nLWV4fAorMTAuIEluc2VydGluZyBhIGZpbGUJCQkJCXxpbnNlcnRpbmctZmlsZXwKKworQWxzbyBzZWUgJ3ZpcnR1YWxlZGl0JywgZm9yIG1vdmluZyB0aGUgY3Vyc29yIHRvIHBvc2l0aW9ucyB3aGVyZSB0aGVyZSBpcyBubworY2hhcmFjdGVyLiAgVXNlZnVsIGZvciBlZGl0aW5nIGEgdGFibGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gU3BlY2lhbCBrZXlzCQkJCQkJKmlucy1zcGVjaWFsLWtleXMqCisKK0luIEluc2VydCBhbmQgUmVwbGFjZSBtb2RlLCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZzsKK290aGVyIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGRpcmVjdGx5LiAgVG8gaW5zZXJ0IG9uZSBvZiB0aGVzZSBzcGVjaWFsCitjaGFyYWN0ZXJzIGludG8gdGhlIGJ1ZmZlciwgcHJlY2VkZSBpdCB3aXRoIENUUkwtVi4gIFRvIGluc2VydCBhIDxOdWw+CitjaGFyYWN0ZXIgdXNlICJDVFJMLVYgQ1RSTC1AIiBvciAiQ1RSTC1WIDAwMCIuICBPbiBzb21lIHN5c3RlbXMsIHlvdSBoYXZlIHRvCit1c2UgIkNUUkwtViAwMDMiIHRvIGluc2VydCBhIENUUkwtQy4gIE5vdGU6IFdoZW4gQ1RSTC1WIGlzIG1hcHBlZCB5b3UgY2FuCitvZnRlbiB1c2UgQ1RSTC1RIGluc3RlYWQgfGlfQ1RSTC1RfC4KKworSWYgeW91IGFyZSB3b3JraW5nIGluIGEgc3BlY2lhbCBsYW5ndWFnZSBtb2RlIHdoZW4gaW5zZXJ0aW5nIHRleHQsIHNlZSB0aGUKKydsYW5nbWFwJyBvcHRpb24sIHwnbGFuZ21hcCd8LCBvbiBob3cgdG8gYXZvaWQgc3dpdGNoaW5nIHRoaXMgbW9kZSBvbiBhbmQgb2ZmCithbGwgdGhlIHRpbWUuCisKK0lmIHlvdSBoYXZlICdpbnNlcnRtb2RlJyBzZXQsIDxFc2M+IGFuZCBhIGZldyBvdGhlciBrZXlzIGdldCBhbm90aGVyIG1lYW5pbmcuCitTZWUgfCdpbnNlcnRtb2RlJ3wuCisKK2NoYXIJCWFjdGlvbgl+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCQkJKmlfQ1RSTC1bKiAqaV88RXNjPioKKzxFc2M+IG9yIENUUkwtWwlFbmQgaW5zZXJ0IG9yIFJlcGxhY2UgbW9kZSwgZ28gYmFjayB0byBOb3JtYWwgbW9kZS4gIEZpbmlzaAorCQlhYmJyZXZpYXRpb24uCisJCU5vdGU6IElmIHlvdXIgPEVzYz4ga2V5IGlzIGhhcmQgdG8gaGl0IG9uIHlvdXIga2V5Ym9hcmQsIHRyYWluCisJCXlvdXJzZWxmIHRvIHVzZSBDVFJMLVsuCisJCQkJCQkqaV9DVFJMLUMqCitDVFJMLUMJCVF1aXQgaW5zZXJ0IG1vZGUsIGdvIGJhY2sgdG8gTm9ybWFsIG1vZGUuICBEbyBub3QgY2hlY2sgZm9yCisJCWFiYnJldmlhdGlvbnMuCisKKwkJCQkJCSppX0NUUkwtQCoKK0NUUkwtQAkJSW5zZXJ0IHByZXZpb3VzbHkgaW5zZXJ0ZWQgdGV4dCBhbmQgc3RvcCBpbnNlcnQuICB7Vmk6IG9ubHkKKwkJd2hlbiB0eXBlZCBhcyBmaXJzdCBjaGFyLCBvbmx5IHVwIHRvIDEyOCBjaGFyc30KKwkJCQkJCSppX0NUUkwtQSoKK0NUUkwtQQkJSW5zZXJ0IHByZXZpb3VzbHkgaW5zZXJ0ZWQgdGV4dC4gIHtub3QgaW4gVml9CisKKwkJCQkJCSppX0NUUkwtSCogKmlfPEJTPiogKmlfQlMqCis8QlM+IG9yIENUUkwtSAlEZWxldGUgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGN1cnNvciAoc2VlIHxpX2JhY2tzcGFjaW5nfAorCQlhYm91dCBqb2luaW5nIGxpbmVzKS4KKwkJU2VlIHw6Zml4ZGVsfCBpZiB5b3VyIDxCUz4ga2V5IGRvZXMgbm90IGRvIHdoYXQgeW91IHdhbnQuCisJCXtWaTogZG9lcyBub3QgZGVsZXRlIGF1dG9pbmRlbnRzfQorCQkJCQkJKmlfPERlbD4qICppX0RFTCoKKzxEZWw+CQlEZWxldGUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLiAgSWYgdGhlIGN1cnNvciBpcyBhdAorCQl0aGUgZW5kIG9mIHRoZSBsaW5lLCBhbmQgdGhlICdiYWNrc3BhY2UnIG9wdGlvbiBpbmNsdWRlcworCQkiZW9sIiwgZGVsZXRlIHRoZSA8RU9MPjsgdGhlIG5leHQgbGluZSBpcyBhcHBlbmRlZCBhZnRlciB0aGUKKwkJY3VycmVudCBvbmUuCisJCVNlZSB8OmZpeGRlbHwgaWYgeW91ciA8RGVsPiBrZXkgZG9lcyBub3QgZG8gd2hhdCB5b3Ugd2FudC4KKwkJe25vdCBpbiBWaX0KKwkJCQkJCSppX0NUUkwtVyoKK0NUUkwtVwkJRGVsZXRlIHRoZSB3b3JkIGJlZm9yZSB0aGUgY3Vyc29yIChzZWUgfGlfYmFja3NwYWNpbmd8IGFib3V0CisJCWpvaW5pbmcgbGluZXMpLiAgU2VlIHRoZSBzZWN0aW9uICJ3b3JkIG1vdGlvbnMiLAorCQl8d29yZC1tb3Rpb25zfCwgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGEgd29yZC4KKwkJCQkJCSppX0NUUkwtVSoKK0NUUkwtVQkJRGVsZXRlIGFsbCBlbnRlcmVkIGNoYXJhY3RlcnMgaW4gdGhlIGN1cnJlbnQgbGluZSAoc2VlCisJCXxpX2JhY2tzcGFjaW5nfCBhYm91dCBqb2luaW5nIGxpbmVzKS4KKworCQkJCQkJKmlfQ1RSTC1JKiAqaV88VGFiPiogKmlfVGFiKgorPFRhYj4gb3IgQ1RSTC1JIEluc2VydCBhIHRhYi4gIElmIHRoZSAnZXhwYW5kdGFiJyBvcHRpb24gaXMgb24sIHRoZQorCQllcXVpdmFsZW50IG51bWJlciBvZiBzcGFjZXMgaXMgaW5zZXJ0ZWQgKHVzZSBDVFJMLVYgPFRhYj4gdG8KKwkJYXZvaWQgdGhlIGV4cGFuc2lvbjsgdXNlIENUUkwtUSA8VGFiPiBpZiBDVFJMLVYgaXMgbWFwcGVkCisJCXxpX0NUUkwtUXwpLiAgU2VlIGFsc28gdGhlICdzbWFydHRhYicgb3B0aW9uIGFuZAorCQl8aW5zLWV4cGFuZHRhYnwuCisJCQkJCQkqaV9DVFJMLUoqICppXzxOTD4qCis8Tkw+IG9yIENUUkwtSglCZWdpbiBuZXcgbGluZS4KKwkJCQkJCSppX0NUUkwtTSogKmlfPENSPioKKzxDUj4gb3IgQ1RSTC1NCUJlZ2luIG5ldyBsaW5lLgorCQkJCQkJKmlfQ1RSTC1LKgorQ1RSTC1LIHtjaGFyMX0gW2NoYXIyXQorCQlFbnRlciBkaWdyYXBoIChzZWUgfGRpZ3JhcGhzfCkuICBXaGVuIHtjaGFyMX0gaXMgYSBzcGVjaWFsCisJCWtleSwgdGhlIGNvZGUgZm9yIHRoYXQga2V5IGlzIGluc2VydGVkIGluIDw+IGZvcm0uICBGb3IKKwkJZXhhbXBsZSwgdGhlIHN0cmluZyAiPFMtU3BhY2U+IiBjYW4gYmUgZW50ZXJlZCBieSB0eXBpbmcKKwkJPEMtSz48Uy1TcGFjZT4gKHR3byBrZXlzKS4gIE5laXRoZXIgY2hhciBpcyBjb25zaWRlcmVkIGZvcgorCQltYXBwaW5nLiAge25vdCBpbiBWaX0KKworQ1RSTC1OCQlGaW5kIG5leHQga2V5d29yZCAoc2VlIHxpX0NUUkwtTnwpLiAge25vdCBpbiBWaX0KK0NUUkwtUAkJRmluZCBwcmV2aW91cyBrZXl3b3JkIChzZWUgfGlfQ1RSTC1QfCkuICB7bm90IGluIFZpfQorCitDVFJMLVIgezAtOWEteiIlIyorOi4tPX0JCQkJCSppX0NUUkwtUioKKwkJSW5zZXJ0IHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyLiAgQmV0d2VlbiB0eXBpbmcgQ1RSTC1SIGFuZAorCQl0aGUgc2Vjb25kIGNoYXJhY3RlciwgJyInIHdpbGwgYmUgZGlzcGxheWVkIHRvIGluZGljYXRlIHRoYXQKKwkJeW91IGFyZSBleHBlY3RlZCB0byBlbnRlciB0aGUgbmFtZSBvZiBhIHJlZ2lzdGVyLgorCQlUaGUgdGV4dCBpcyBpbnNlcnRlZCBhcyBpZiB5b3UgdHlwZWQgaXQsIGJ1dCBtYXBwaW5ncyBhbmQKKwkJYWJicmV2aWF0aW9ucyBhcmUgbm90IHVzZWQuICBJZiB5b3UgaGF2ZSBvcHRpb25zIGxpa2UKKwkJJ3RleHR3aWR0aCcsICdmb3JtYXRvcHRpb25zJywgb3IgJ2F1dG9pbmRlbnQnIHNldCwgdGhpcyB3aWxsCisJCWluZmx1ZW5jZSB3aGF0IHdpbGwgYmUgaW5zZXJ0ZWQuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHdoYXQKKwkJaGFwcGVucyB3aXRoIHRoZSAicCIgY29tbWFuZCBhbmQgcGFzdGluZyB3aXRoIHRoZSBtb3VzZS4KKwkJU3BlY2lhbCByZWdpc3RlcnM6CisJCQknIicJdGhlIHVubmFtZWQgcmVnaXN0ZXIsIGNvbnRhaW5pbmcgdGhlIHRleHQgb2YKKwkJCQl0aGUgbGFzdCBkZWxldGUgb3IgeWFuaworCQkJJyUnCXRoZSBjdXJyZW50IGZpbGUgbmFtZQorCQkJJyMnCXRoZSBhbHRlcm5hdGUgZmlsZSBuYW1lCisJCQknKicJdGhlIGNsaXBib2FyZCBjb250ZW50cyAoWDExOiBwcmltYXJ5IHNlbGVjdGlvbikKKwkJCScrJwl0aGUgY2xpcGJvYXJkIGNvbnRlbnRzCisJCQknLycJdGhlIGxhc3Qgc2VhcmNoIHBhdHRlcm4KKwkJCSc6Jwl0aGUgbGFzdCBjb21tYW5kLWxpbmUKKwkJCScuJwl0aGUgbGFzdCBpbnNlcnRlZCB0ZXh0CisJCQknLScJdGhlIGxhc3Qgc21hbGwgKGxlc3MgdGhhbiBhIGxpbmUpIGRlbGV0ZQorCQkJJz0nCXRoZSBleHByZXNzaW9uIHJlZ2lzdGVyOiB5b3UgYXJlIHByb21wdGVkIHRvCisJCQkJZW50ZXIgYW4gZXhwcmVzc2lvbiAoc2VlIHxleHByZXNzaW9ufCkKKwkJU2VlIHxyZWdpc3RlcnN8IGFib3V0IHJlZ2lzdGVycy4gIHtub3QgaW4gVml9CisKK0NUUkwtUiBDVFJMLVIgezAtOWEteiIlIyorLzouLT19CQkJKmlfQ1RSTC1SX0NUUkwtUioKKwkJSW5zZXJ0IHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyLiAgV29ya3MgbGlrZSB1c2luZyBhIHNpbmdsZQorCQlDVFJMLVIsIGJ1dCB0aGUgdGV4dCBpcyBpbnNlcnRlZCBsaXRlcmFsbHksIG5vdCBhcyBpZiB0eXBlZC4KKwkJVGhpcyBkaWZmZXJzIHdoZW4gdGhlIHJlZ2lzdGVyIGNvbnRhaW5zIGNoYXJhY3RlcnMgbGlrZSA8QlM+LgorCQlFeGFtcGxlLCB3aGVyZSByZWdpc3RlciBhIGNvbnRhaW5zICJhYl5IYyI6ID4KKwlDVFJMLVIgYQkJcmVzdWx0cyBpbiAiYWMiLgorCUNUUkwtUiBDVFJMLVIgYQkJcmVzdWx0cyBpbiAiYWJeSGMiLgorPAkJT3B0aW9ucyAndGV4dHdpZHRoJywgJ2Zvcm1hdG9wdGlvbnMnLCBldGMuIHN0aWxsIGFwcGx5LiAgSWYKKwkJeW91IGFsc28gd2FudCB0byBhdm9pZCB0aGVzZSwgdXNlICI8Qy1SPjxDLU8+ciIsIHNlZSBiZWxvdy4KKwkJVGhlICcuJyByZWdpc3RlciAobGFzdCBpbnNlcnRlZCB0ZXh0KSBpcyBzdGlsbCBpbnNlcnRlZCBhcworCQl0eXBlZC4gIHtub3QgaW4gVml9CisKK0NUUkwtUiBDVFJMLU8gezAtOWEteiIlIyorLzouLT19CQkJKmlfQ1RSTC1SX0NUUkwtTyoKKwkJSW5zZXJ0IHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIGxpdGVyYWxseSBhbmQgZG9uJ3QKKwkJYXV0by1pbmRlbnQuICBEb2VzIHRoZSBzYW1lIGFzIHBhc3Rpbmcgd2l0aCB0aGUgbW91c2UKKwkJfDxNaWRkbGVNb3VzZT58LgorCQlEb2VzIG5vdCByZXBsYWNlIGNoYXJhY3RlcnMhCisJCVRoZSAnLicgcmVnaXN0ZXIgKGxhc3QgaW5zZXJ0ZWQgdGV4dCkgaXMgc3RpbGwgaW5zZXJ0ZWQgYXMKKwkJdHlwZWQuICB7bm90IGluIFZpfQorCitDVFJMLVIgQ1RSTC1QIHswLTlhLXoiJSMqKy86Li09fQkJCSppX0NUUkwtUl9DVFJMLVAqCisJCUluc2VydCB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciBsaXRlcmFsbHkgYW5kIGZpeCB0aGUKKwkJaW5kZW50LCBsaWtlIHxbPE1pZGRsZU1vdXNlPnwuCisJCURvZXMgbm90IHJlcGxhY2UgY2hhcmFjdGVycyEKKwkJVGhlICcuJyByZWdpc3RlciAobGFzdCBpbnNlcnRlZCB0ZXh0KSBpcyBzdGlsbCBpbnNlcnRlZCBhcworCQl0eXBlZC4gIHtub3QgaW4gVml9CisKKwkJCQkJCSppX0NUUkwtVCoKK0NUUkwtVAkJSW5zZXJ0IG9uZSBzaGlmdHdpZHRoIG9mIGluZGVudCBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQKKwkJbGluZS4gIFRoZSBpbmRlbnQgaXMgYWx3YXlzIHJvdW5kZWQgdG8gYSAnc2hpZnR3aWR0aCcgKHRoaXMgaXMKKwkJdmkgY29tcGF0aWJsZSkuICB7Vmk6IG9ubHkgd2hlbiBpbiBpbmRlbnR9CisJCQkJCQkqaV9DVFJMLUQqCitDVFJMLUQJCURlbGV0ZSBvbmUgc2hpZnR3aWR0aCBvZiBpbmRlbnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50CisJCWxpbmUuICBUaGUgaW5kZW50IGlzIGFsd2F5cyByb3VuZGVkIHRvIGEgJ3NoaWZ0d2lkdGgnICh0aGlzIGlzCisJCXZpIGNvbXBhdGlibGUpLiAge1ZpOiBDVFJMLUQgd29ya3Mgb25seSB3aGVuIHVzZWQgYWZ0ZXIKKwkJYXV0b2luZGVudH0KKwkJCQkJCSppXzBfQ1RSTC1EKgorMCBDVFJMLUQJRGVsZXRlIGFsbCBpbmRlbnQgaW4gdGhlIGN1cnJlbnQgbGluZS4gIHtWaTogQ1RSTC1EIHdvcmtzCisJCW9ubHkgd2hlbiB1c2VkIGFmdGVyIGF1dG9pbmRlbnR9CisJCQkJCQkqaV9eX0NUUkwtRCoKK14gQ1RSTC1ECURlbGV0ZSBhbGwgaW5kZW50IGluIHRoZSBjdXJyZW50IGxpbmUuICBUaGUgaW5kZW50IGlzCisJCXJlc3RvcmVkIGluIHRoZSBuZXh0IGxpbmUuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGluc2VydGluZyBhCisJCWxhYmVsLiAge1ZpOiBDVFJMLUQgd29ya3Mgb25seSB3aGVuIHVzZWQgYWZ0ZXIgYXV0b2luZGVudH0KKworCQkJCQkJKmlfQ1RSTC1WKgorQ1RSTC1WCQlJbnNlcnQgbmV4dCBub24tZGlnaXQgbGl0ZXJhbGx5LiAgRm9yIHNwZWNpYWwga2V5cywgdGhlCisJCXRlcm1pbmFsIGNvZGUgaXMgaW5zZXJ0ZWQuICBJdCdzIGFsc28gcG9zc2libGUgdG8gZW50ZXIgdGhlCisJCWRlY2ltYWwsIG9jdGFsIG9yIGhleGFkZWNpbWFsIHZhbHVlIG9mIGEgY2hhcmFjdGVyCisJCXxpX0NUUkwtVl9kaWdpdHwuCisJCVRoZSBjaGFyYWN0ZXJzIHR5cGVkIHJpZ2h0IGFmdGVyIENUUkwtViBhcmUgbm90IGNvbnNpZGVyZWQgZm9yCisJCW1hcHBpbmcuICB7Vmk6IG5vIGRlY2ltYWwgYnl0ZSBlbnRyeX0KKwkJTm90ZTogV2hlbiBDVFJMLVYgaXMgbWFwcGVkIChlLmcuLCB0byBwYXN0ZSB0ZXh0KSB5b3UgY2FuCisJCW9mdGVuIHVzZSBDVFJMLVEgaW5zdGVhZCB8aV9DVFJMLVF8LgorCisJCQkJCQkqaV9DVFJMLVEqCitDVFJMLVEJCVNhbWUgYXMgQ1RSTC1WLgorCQlOb3RlOiBTb21lIHRlcm1pbmFsIGNvbm5lY3Rpb25zIG1heSBlYXQgQ1RSTC1RLCBpdCBkb2Vzbid0CisJCXdvcmsgdGhlbi4gIEl0IGRvZXMgd29yayBpbiB0aGUgR1VJLgorCitDVFJMLVgJCUVudGVyIENUUkwtWCBtb2RlLiAgVGhpcyBpcyBhIHN1Yi1tb2RlIHdoZXJlIGNvbW1hbmRzIGNhbgorCQliZSBnaXZlbiB0byBjb21wbGV0ZSB3b3JkcyBvciBzY3JvbGwgdGhlIHdpbmRvdy4gU2VlCisJCXxpX0NUUkwtWHwgYW5kIHxpbnMtY29tcGxldGlvbnwuIHtub3QgaW4gVml9CisKKwkJCQkJCSppX0NUUkwtRSoKK0NUUkwtRQkJSW5zZXJ0IHRoZSBjaGFyYWN0ZXIgd2hpY2ggaXMgYmVsb3cgdGhlIGN1cnNvci4gIHtub3QgaW4gVml9CisJCQkJCQkqaV9DVFJMLVkqCitDVFJMLVkJCUluc2VydCB0aGUgY2hhcmFjdGVyIHdoaWNoIGlzIGFib3ZlIHRoZSBjdXJzb3IuICB7bm90IGluIFZpfQorCQlOb3RlIHRoYXQgZm9yIENUUkwtRSBhbmQgQ1RSTC1ZICd0ZXh0d2lkdGgnIGlzIG5vdCB1c2VkLCB0byBiZQorCQlhYmxlIHRvIGNvcHkgY2hhcmFjdGVycyBmcm9tIGEgbG9uZyBsaW5lLgorCisJCQkJCQkqaV9DVFJMLV8qCitDVFJMLV8JCVN3aXRjaCBiZXR3ZWVuIGxhbmd1YWdlcywgYXMgZm9sbG93czoKKwkJLSAgV2hlbiBpbiBhIHJpZ2h0bGVmdCB3aW5kb3csIHJldmlucyBhbmQgbm9oa21hcCBhcmUgdG9nZ2xlZCwKKwkJICAgc2luY2UgRW5nbGlzaCB3aWxsIGxpa2VseSBiZSBpbnNlcnRlZCBpbiB0aGlzIGNhc2UuCisJCS0gIFdoZW4gaW4gYSBub3JpZ2h0bGVmdCB3aW5kb3csIHJldmlucyBhbmQgaGttYXAgYXJlIHRvZ2dsZWQsCisJCSAgIHNpbmNlIEhlYnJldyB3aWxsIGxpa2VseSBiZSBpbnNlcnRlZCBpbiB0aGlzIGNhc2UuCisKKwkJQ1RSTC1fIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgdHlwZWQgdGV4dC4KKworCQlUaGlzIGNvbW1hbmQgaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgJ2FsbG93cmV2aW5zJyBvcHRpb24KKwkJaXMgc2V0LgorCQlQbGVhc2UgcmVmZXIgdG8gfHJpbGVmdC50eHR8IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0CisJCXJpZ2h0LXRvLWxlZnQgbW9kZS4KKwkJe25vdCBpbiBWaX0KKwkJT25seSBpZiBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwgZmVhdHVyZSAod2hpY2ggaXMgbm90CisJCXRoZSBkZWZhdWx0KS4KKwkJCQkJCSppX0NUUkwtXioKK0NUUkwtXgkJVG9nZ2xlIHRoZSB1c2Ugb2YgdHlwaW5nIGxhbmd1YWdlIGNoYXJhY3RlcnMuCisJCVdoZW4gbGFuZ3VhZ2UgfDpsbWFwfCBtYXBwaW5ncyBhcmUgZGVmaW5lZDoKKwkJLSBJZiAnaW1pbnNlcnQnIGlzIDEgKGxhbmdtYXAgbWFwcGluZ3MgdXNlZCkgaXQgYmVjb21lcyAwIChubworCQkgIGxhbmdtYXAgbWFwcGluZ3MgdXNlZCkuCisJCS0gSWYgJ2ltaW5zZXJ0JyBoYXMgYW5vdGhlciB2YWx1ZSBpdCBiZWNvbWVzIDEsIHRodXMgbGFuZ21hcAorCQkgIG1hcHBpbmdzIGFyZSBlbmFibGVkLgorCQlXaGVuIG5vIGxhbmd1YWdlIG1hcHBpbmdzIGFyZSBkZWZpbmVkOgorCQktIElmICdpbWluc2VydCcgaXMgMiAoSW5wdXQgTWV0aG9kIHVzZWQpIGl0IGJlY29tZXMgMCAobm8KKwkJICBJbnB1dCBNZXRob2QgdXNlZCkuCisJCS0gSWYgJ2ltaW5zZXJ0JyBoYXMgYW5vdGhlciB2YWx1ZSBpdCBiZWNvbWVzIDIsIHRodXMgdGhlIElucHV0CisJCSAgTWV0aG9kIGlzIGVuYWJsZWQuCisJCVdoZW4gc2V0IHRvIDEsIHRoZSB2YWx1ZSBvZiB0aGUgImI6a2V5bWFwX25hbWUiIHZhcmlhYmxlLCB0aGUKKwkJJ2tleW1hcCcgb3B0aW9uIG9yICI8bGFuZz4iIGFwcGVhcnMgaW4gdGhlIHN0YXR1cyBsaW5lLgorCQlUaGUgbGFuZ3VhZ2UgbWFwcGluZ3MgYXJlIG5vcm1hbGx5IHVzZWQgdG8gdHlwZSBjaGFyYWN0ZXJzCisJCXRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIHdoYXQgdGhlIGtleWJvYXJkIHByb2R1Y2VzLiAgVGhlCisJCSdrZXltYXAnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBpbnN0YWxsIGEgd2hvbGUgbnVtYmVyIG9mIHRoZW0uCisJCXtub3QgaW4gVml9CisKKwkJCQkJCSppX0NUUkwtXSoKK0NUUkwtXQkJVHJpZ2dlciBhYmJyZXZpYXRpb24sIHdpdGhvdXQgaW5zZXJ0aW5nIGEgY2hhcmFjdGVyLiAge25vdCBpbgorCQlWaX0KKworCQkJCQkJKmlfPEluc2VydD4qCis8SW5zZXJ0PglUb2dnbGUgYmV0d2VlbiBJbnNlcnQgYW5kIFJlcGxhY2UgbW9kZS4gIHtub3QgaW4gVml9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCQkJCQkqaV9iYWNrc3BhY2luZyoKK1RoZSBlZmZlY3Qgb2YgdGhlIDxCUz4sIENUUkwtVywgYW5kIENUUkwtVSBkZXBlbmQgb24gdGhlICdiYWNrc3BhY2UnIG9wdGlvbgorKHVubGVzcyAncmV2aW5zJyBpcyBzZXQpLiAgVGhpcyBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zOgorCitpdGVtCSAgICBhY3Rpb24gfgoraW5kZW50CSAgICBhbGxvdyBiYWNrc3BhY2luZyBvdmVyIGF1dG9pbmRlbnQKK2VvbAkgICAgYWxsb3cgYmFja3NwYWNpbmcgb3ZlciBlbmQtb2YtbGluZSAoam9pbiBsaW5lcykKK3N0YXJ0CSAgICBhbGxvdyBiYWNrc3BhY2luZyBvdmVyIHRoZSBzdGFydCBwb3NpdGlvbiBvZiBpbnNlcnQ7IENUUkwtVyBhbmQKKwkgICAgQ1RSTC1VIHN0b3Agb25jZSBhdCB0aGUgc3RhcnQgcG9zaXRpb24KKworV2hlbiAnYmFja3NwYWNlJyBpcyBlbXB0eSwgVmkgY29tcGF0aWJsZSBiYWNrc3BhY2luZyBpcyB1c2VkLiAgWW91IGNhbm5vdAorYmFja3NwYWNlIG92ZXIgYXV0b2luZGVudCwgYmVmb3JlIGNvbHVtbiAxIG9yIGJlZm9yZSB3aGVyZSBpbnNlcnQgc3RhcnRlZC4KKworRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRoZSB2YWx1ZXMgIjAiLCAiMSIgYW5kICIyIiBhcmUgYWxzbyBhbGxvd2VkLCBzZWUKK3wnYmFja3NwYWNlJ3wuCisKK0lmIHRoZSAnYmFja3NwYWNlJyBvcHRpb24gZG9lcyBjb250YWluICJlb2wiIGFuZCB0aGUgY3Vyc29yIGlzIGluIGNvbHVtbiAxCit3aGVuIG9uZSBvZiB0aGUgdGhyZWUga2V5cyBpcyB1c2VkLCB0aGUgY3VycmVudCBsaW5lIGlzIGpvaW5lZCB3aXRoIHRoZQorcHJldmlvdXMgbGluZS4gIFRoaXMgZWZmZWN0aXZlbHkgZGVsZXRlcyB0aGUgPEVPTD4gaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4KK3tWaTogZG9lcyBub3QgY3Jvc3MgbGluZXMsIGRvZXMgbm90IGRlbGV0ZSBwYXN0IHN0YXJ0IHBvc2l0aW9uIG9mIGluc2VydH0KKworCQkJCQkJKmlfQ1RSTC1WX2RpZ2l0KgorV2l0aCBDVFJMLVYgdGhlIGRlY2ltYWwsIG9jdGFsIG9yIGhleGFkZWNpbWFsIHZhbHVlIG9mIGEgY2hhcmFjdGVyIGNhbiBiZQorZW50ZXJlZCBkaXJlY3RseS4gIFRoaXMgd2F5IHlvdSBjYW4gZW50ZXIgYW55IGNoYXJhY3RlciwgZXhjZXB0IGEgbGluZSBicmVhaworKDxOTD4sIHZhbHVlIDEwKS4gIFRoZXJlIGFyZSBmaXZlIHdheXMgdG8gZW50ZXIgdGhlIGNoYXJhY3RlciB2YWx1ZToKKworZmlyc3QgY2hhcgltb2RlCSAgICAgbWF4IG5yIG9mIGNoYXJzICAgbWF4IHZhbHVlIH4KKyhub25lKQkJZGVjaW1hbAkJICAgMwkJMjU1CitvIG9yIE8JCW9jdGFsCQkgICAzCQkyNTUKK3ggb3IgWAkJaGV4YWRlY2ltYWwJICAgMgkJZmYJICgyNTUpCit1CQloZXhhZGVjaW1hbAkgICA0CQlmZmZmCSAoNjU1MzUpCitVCQloZXhhZGVjaW1hbAkgICA4CQk3ZmZmZmZmZiAoMjE0NzQ4MzY0NykKKworTm9ybWFsbHkgeW91IHdvdWxkIHR5cGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMuICBUaHVzIHRvIGVudGVyIGEKK3NwYWNlICh2YWx1ZSAzMikgeW91IHdvdWxkIHR5cGUgPEMtVj4wMzIuICBZb3UgY2FuIG9taXQgdGhlIGxlYWRpbmcgemVybywgaW4KK3doaWNoIGNhc2UgdGhlIGNoYXJhY3RlciB0eXBlZCBhZnRlciB0aGUgbnVtYmVyIG11c3QgYmUgYSBub24tZGlnaXQuICBUaGlzCitoYXBwZW5zIGZvciB0aGUgb3RoZXIgbW9kZXMgYXMgd2VsbDogQXMgc29vbiBhcyB5b3UgdHlwZSBhIGNoYXJhY3RlciB0aGF0IGlzCitpbnZhbGlkIGZvciB0aGUgbW9kZSwgdGhlIHZhbHVlIGJlZm9yZSBpdCB3aWxsIGJlIHVzZWQgYW5kIHRoZSAiaW52YWxpZCIKK2NoYXJhY3RlciBpcyBkZWFsdCB3aXRoIGluIHRoZSBub3JtYWwgd2F5LgorCitJZiB5b3UgZW50ZXIgYSB2YWx1ZSBvZiAxMCwgaXQgd2lsbCBlbmQgdXAgaW4gdGhlIGZpbGUgYXMgYSAwLiAgVGhlIDEwIGlzIGEKKzxOTD4sIHdoaWNoIGlzIHVzZWQgaW50ZXJuYWxseSB0byByZXByZXNlbnQgdGhlIDxOdWw+IGNoYXJhY3Rlci4gIFdoZW4gd3JpdGluZwordGhlIGJ1ZmZlciB0byBhIGZpbGUsIHRoZSA8Tkw+IGNoYXJhY3RlciBpcyB0cmFuc2xhdGVkIGludG8gPE51bD4uICBUaGUgPE5MPgorY2hhcmFjdGVyIGlzIHdyaXR0ZW4gYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUuICBUaHVzIGlmIHlvdSB3YW50IHRvIGluc2VydCBhCis8Tkw+IGNoYXJhY3RlciBpbiBhIGZpbGUgeW91IHdpbGwgaGF2ZSB0byBtYWtlIGEgbGluZSBicmVhay4KKworCQkJCQkJKmlfQ1RSTC1YKiAqaW5zZXJ0X2V4cGFuZCoKK0NUUkwtWCBlbnRlcnMgYSBzdWItbW9kZSB3aGVyZSBzZXZlcmFsIGNvbW1hbmRzIGNhbiBiZSB1c2VkLiAgTW9zdCBvZiB0aGVzZQorY29tbWFuZHMgZG8ga2V5d29yZCBjb21wbGV0aW9uOyBzZWUgfGlucy1jb21wbGV0aW9ufC4gIFRoZXNlIGFyZSBub3QgYXZhaWxhYmxlCit3aGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aG91dCB0aGUgfCtpbnNlcnRfZXhwYW5kfCBmZWF0dXJlLgorCitUd28gY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gc2Nyb2xsIHRoZSB3aW5kb3cgdXAgb3IgZG93biwgd2l0aG91dCBleGl0aW5nCitpbnNlcnQgbW9kZToKKworCQkJCQkJKmlfQ1RSTC1YX0NUUkwtRSoKK0NUUkwtWCBDVFJMLUUJCXNjcm9sbCB3aW5kb3cgb25lIGxpbmUgdXAuCisKKwkJCQkJCSppX0NUUkwtWF9DVFJMLVkqCitDVFJMLVggQ1RSTC1ZCQlzY3JvbGwgd2luZG93IG9uZSBsaW5lIGRvd24uCisKK0FmdGVyIENUUkwtWCBpcyBwcmVzc2VkLCBlYWNoIENUUkwtRSAoQ1RSTC1ZKSBzY3JvbGxzIHRoZSB3aW5kb3cgdXAgKGRvd24pIGJ5CitvbmUgbGluZSB1bmxlc3MgdGhhdCB3b3VsZCBjYXVzZSB0aGUgY3Vyc29yIHRvIG1vdmUgZnJvbSBpdHMgY3VycmVudCBwb3NpdGlvbgoraW4gdGhlIGZpbGUuICBBcyBzb29uIGFzIGFub3RoZXIga2V5IGlzIHByZXNzZWQsIENUUkwtWCBtb2RlIGlzIGV4aXRlZCBhbmQKK3RoYXQga2V5IGlzIGludGVycHJldGVkIGFzIGluIEluc2VydCBtb2RlLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gU3BlY2lhbCBzcGVjaWFsIGtleXMJCQkJKmlucy1zcGVjaWFsLXNwZWNpYWwqCisKK1RoZSBmb2xsb3dpbmcga2V5cyBhcmUgc3BlY2lhbC4gIFRoZXkgc3RvcCB0aGUgY3VycmVudCBpbnNlcnQsIGRvIHNvbWV0aGluZywKK2FuZCB0aGVuIHJlc3RhcnQgaW5zZXJ0aW9uLiAgVGhpcyBtZWFucyB5b3UgY2FuIGRvIHNvbWV0aGluZyB3aXRob3V0IGdldHRpbmcKK291dCBvZiBJbnNlcnQgbW9kZS4gIFRoaXMgaXMgdmVyeSBoYW5keSBpZiB5b3UgcHJlZmVyIHRvIHVzZSB0aGUgSW5zZXJ0IG1vZGUKK2FsbCB0aGUgdGltZSwganVzdCBsaWtlIGVkaXRvcnMgdGhhdCBkb24ndCBoYXZlIGEgc2VwYXJhdGUgTm9ybWFsIG1vZGUuICBZb3UKK21heSBhbHNvIHdhbnQgdG8gc2V0IHRoZSAnYmFja3NwYWNlJyBvcHRpb24gdG8gImluZGVudCxlb2wsc3RhcnQiIGFuZCBzZXQgdGhlCisnaW5zZXJ0bW9kZScgb3B0aW9uLiAgWW91IGNhbiB1c2UgQ1RSTC1PIGlmIHlvdSB3YW50IHRvIG1hcCBhIGZ1bmN0aW9uIGtleSB0bworYSBjb21tYW5kLgorCitUaGUgY2hhbmdlcyAoaW5zZXJ0ZWQgb3IgZGVsZXRlZCBjaGFyYWN0ZXJzKSBiZWZvcmUgYW5kIGFmdGVyIHRoZXNlIGtleXMgY2FuCitiZSB1bmRvbmUgc2VwYXJhdGVseS4gIE9ubHkgdGhlIGxhc3QgY2hhbmdlIGNhbiBiZSByZWRvbmUgYW5kIGFsd2F5cyBiZWhhdmVzCitsaWtlIGFuICJpIiBjb21tYW5kLgorCitjaGFyCQlhY3Rpb24JfgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxVcD4JCWN1cnNvciBvbmUgbGluZSB1cAkJCSAgICAgKmlfPFVwPioKKzxEb3duPgkJY3Vyc29yIG9uZSBsaW5lIGRvd24JCQkgICAgICppXzxEb3duPioKK0NUUkwtRyA8VXA+CWN1cnNvciBvbmUgbGluZSB1cCwgaW5zZXJ0IHN0YXJ0IGNvbHVtbgkgICAgICppX0NUUkwtR188VXA+KgorQ1RSTC1HIGsJY3Vyc29yIG9uZSBsaW5lIHVwLCBpbnNlcnQgc3RhcnQgY29sdW1uCSAgICAgKmlfQ1RSTC1HX2sqCitDVFJMLUcgQ1RSTC1LCWN1cnNvciBvbmUgbGluZSB1cCwgaW5zZXJ0IHN0YXJ0IGNvbHVtbgkgICAgICppX0NUUkwtR19DVFJMLUsqCitDVFJMLUcgPERvd24+CWN1cnNvciBvbmUgbGluZSBkb3duLCBpbnNlcnQgc3RhcnQgY29sdW1uICAgICppX0NUUkwtR188RG93bj4qCitDVFJMLUcgagljdXJzb3Igb25lIGxpbmUgZG93biwgaW5zZXJ0IHN0YXJ0IGNvbHVtbiAgICAqaV9DVFJMLUdfaioKK0NUUkwtRyBDVFJMLUoJY3Vyc29yIG9uZSBsaW5lIGRvd24sIGluc2VydCBzdGFydCBjb2x1bW4gICAgKmlfQ1RSTC1HX0NUUkwtSioKKzxMZWZ0PgkJY3Vyc29yIG9uZSBjaGFyYWN0ZXIgbGVmdAkJICAgICAqaV88TGVmdD4qCis8UmlnaHQ+CQljdXJzb3Igb25lIGNoYXJhY3RlciByaWdodAkJICAgICAqaV88UmlnaHQ+KgorPFMtTGVmdD4JY3Vyc29yIG9uZSB3b3JkIGJhY2sgKGxpa2UgImIiIGNvbW1hbmQpCSAgICAgKmlfPFMtTGVmdD4qCis8Qy1MZWZ0PgljdXJzb3Igb25lIHdvcmQgYmFjayAobGlrZSAiYiIgY29tbWFuZCkJICAgICAqaV88Qy1MZWZ0PioKKzxTLVJpZ2h0PgljdXJzb3Igb25lIHdvcmQgZm9yd2FyZCAobGlrZSAidyIgY29tbWFuZCkgICAqaV88Uy1SaWdodD4qCis8Qy1SaWdodD4JY3Vyc29yIG9uZSB3b3JkIGZvcndhcmQgKGxpa2UgInciIGNvbW1hbmQpICAgKmlfPEMtUmlnaHQ+KgorPEhvbWU+CQljdXJzb3IgdG8gZmlyc3QgY2hhciBpbiB0aGUgbGluZQkgICAgICppXzxIb21lPioKKzxFbmQ+CQljdXJzb3IgdG8gYWZ0ZXIgbGFzdCBjaGFyIGluIHRoZSBsaW5lCSAgICAgKmlfPEVuZD4qCis8Qy1Ib21lPgljdXJzb3IgdG8gZmlyc3QgY2hhciBpbiB0aGUgZmlsZQkgICAgICppXzxDLUhvbWU+KgorPEMtRW5kPgkJY3Vyc29yIHRvIGFmdGVyIGxhc3QgY2hhciBpbiB0aGUgZmlsZQkgICAgICppXzxDLUVuZD4qCis8TGVmdE1vdXNlPgljdXJzb3IgdG8gcG9zaXRpb24gb2YgbW91c2UgY2xpY2sJICAgICAqaV88TGVmdE1vdXNlPioKKzxTLVVwPgkJbW92ZSB3aW5kb3cgb25lIHBhZ2UgdXAJCQkgICAgICppXzxTLVVwPioKKzxQYWdlVXA+CW1vdmUgd2luZG93IG9uZSBwYWdlIHVwCQkJICAgICAqaV88UGFnZVVwPioKKzxTLURvd24+CW1vdmUgd2luZG93IG9uZSBwYWdlIGRvd24JCSAgICAgKmlfPFMtRG93bj4qCis8UGFnZURvd24+CW1vdmUgd2luZG93IG9uZSBwYWdlIGRvd24JCSAgICAgKmlfPFBhZ2VEb3duPioKKzxNb3VzZURvd24+CXNjcm9sbCB0aHJlZSBsaW5lcyBkb3duCQkJICAgICAqaV88TW91c2VEb3duPioKKzxTLU1vdXNlRG93bj4Jc2Nyb2xsIGEgZnVsbCBwYWdlIGRvd24JCQkgICAgICppXzxTLU1vdXNlRG93bj4qCis8TW91c2VVcD4Jc2Nyb2xsIHRocmVlIGxpbmVzIHVwCQkJICAgICAqaV88TW91c2VVcD4qCis8Uy1Nb3VzZVVwPglzY3JvbGwgYSBmdWxsIHBhZ2UgdXAJCQkgICAgICppXzxTLU1vdXNlVXA+KgorQ1RSTC1PCQlleGVjdXRlIG9uZSBjb21tYW5kLCByZXR1cm4gdG8gSW5zZXJ0IG1vZGUgICAqaV9DVFJMLU8qCitDVFJMLUcgdQlicmVhayB1bmRvIHNlcXVlbmNlLCBzdGFydCBuZXcgY2hhbmdlCSAgICAgKmlfQ1RSTC1HX3UqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlOiBJZiB0aGUgY3Vyc29yIGtleXMgdGFrZSB5b3Ugb3V0IG9mIEluc2VydCBtb2RlLCBjaGVjayB0aGUgJ25vZXNja2V5cycKK29wdGlvbi4KKworVGhlIENUUkwtTyBjb21tYW5kIHNvbWV0aW1lcyBoYXMgYSBzaWRlIGVmZmVjdDogSWYgdGhlIGN1cnNvciB3YXMgYmV5b25kIHRoZQorZW5kIG9mIHRoZSBsaW5lLCBpdCB3aWxsIGJlIHB1dCBvbiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUuICBJbgorbWFwcGluZ3MgaXQncyBvZnRlbiBiZXR0ZXIgdG8gdXNlIDxFc2M+IChmaXJzdCBwdXQgYW4gIngiIGluIHRoZSB0ZXh0LCA8RXNjPgord2lsbCB0aGVuIGFsd2F5cyBwdXQgdGhlIGN1cnNvciBvbiBpdCkuCisKK1RoZSBzaGlmdGVkIGN1cnNvciBrZXlzIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFsbCB0ZXJtaW5hbHMuCisKK0Fub3RoZXIgc2lkZSBlZmZlY3QgaXMgdGhhdCBhIGNvdW50IHNwZWNpZmllZCBiZWZvcmUgdGhlICJpIiBvciAiYSIgY29tbWFuZCBpcworaWdub3JlZC4gIFRoYXQgaXMgYmVjYXVzZSByZXBlYXRpbmcgdGhlIGVmZmVjdCBvZiB0aGUgY29tbWFuZCBhZnRlciBDVFJMLU8gaXMKK3RvbyBjb21wbGljYXRlZC4KKworQW4gZXhhbXBsZSBmb3IgdXNpbmcgQ1RSTC1HIHU6ID4KKworCTppbm9yZW1hcCA8Qy1IPiA8Qy1HPnU8Qy1IPgorCitUaGlzIHJlZGVmaW5lcyB0aGUgYmFja3NwYWNlIGtleSB0byBzdGFydCBhIG5ldyB1bmRvIHNlcXVlbmNlLiAgWW91IGNhbiBub3cKK3VuZG8gdGhlIGVmZmVjdCBvZiB0aGUgYmFja3NwYWNlIGtleSwgd2l0aG91dCBjaGFuZ2luZyB3aGF0IHlvdSB0eXBlZCBiZWZvcmUKK3RoYXQsIHdpdGggQ1RSTC1PIHUuCisKK1doZW4gdGhlICd3aGljaHdyYXAnIG9wdGlvbiBpcyBzZXQgYXBwcm9wcmlhdGVseSwgdGhlIDxMZWZ0PiBhbmQgPFJpZ2h0Pgora2V5cyBvbiB0aGUgZmlyc3QvbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUgbWFrZSB0aGUgY3Vyc29yIHdyYXAgdG8gdGhlCitwcmV2aW91cy9uZXh0IGxpbmUuCisKK1RoZSBDVFJMLUcgaiBhbmQgQ1RSTC1HIGsgY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gaW5zZXJ0IHRleHQgaW4gZnJvbnQgb2YgYQorY29sdW1uLiAgRXhhbXBsZTogPgorICAgaW50IGk7CisgICBpbnQgajsKK1Bvc2l0aW9uIHRoZSBjdXJzb3Igb24gdGhlIGZpcnN0ICJpbnQiLCB0eXBlICJpc3RhdGljPEMtRz5qICAgICAgICIuICBUaGUKK3Jlc3VsdCBpczogPgorICAgc3RhdGljIGludCBpOworCSAgaW50IGo7CitXaGVuIGluc2VydGluZyB0aGUgc2FtZSB0ZXh0IGluIGZyb250IG9mIHRoZSBjb2x1bW4gaW4gZXZlcnkgbGluZSwgdXNlIHRoZQorVmlzdWFsIGJsb2Nrd2lzZSBjb21tYW5kICJJIiB8dl9iX0l8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuICd0ZXh0d2lkdGgnIGFuZCAnd3JhcG1hcmdpbicgb3B0aW9ucwkJCSppbnMtdGV4dHdpZHRoKgorCitUaGUgJ3RleHR3aWR0aCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgYnJlYWsgYSBsaW5lIGJlZm9yZSBpdAorZ2V0cyB0b28gbG9uZy4gIFNldCB0aGUgJ3RleHR3aWR0aCcgb3B0aW9uIHRvIHRoZSBkZXNpcmVkIG1heGltdW0gbGluZQorbGVuZ3RoLiAgSWYgeW91IHRoZW4gdHlwZSBtb3JlIGNoYXJhY3RlcnMgKG5vdCBzcGFjZXMgb3IgdGFicyksIHRoZQorbGFzdCB3b3JkIHdpbGwgYmUgcHV0IG9uIGEgbmV3IGxpbmUgKHVubGVzcyBpdCBpcyB0aGUgb25seSB3b3JkIG9uIHRoZQorbGluZSkuICBJZiB5b3Ugc2V0ICd0ZXh0d2lkdGgnIHRvIDAsIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKworVGhlICd3cmFwbWFyZ2luJyBvcHRpb24gZG9lcyBhbG1vc3QgdGhlIHNhbWUuICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0CisndGV4dHdpZHRoJyBoYXMgYSBmaXhlZCB3aWR0aCB3aGlsZSAnd3JhcG1hcmdpbicgZGVwZW5kcyBvbiB0aGUgd2lkdGggb2YgdGhlCitzY3JlZW4uICBXaGVuIHVzaW5nICd3cmFwbWFyZ2luJyB0aGlzIGlzIGVxdWFsIHRvIHVzaW5nICd0ZXh0d2lkdGgnIHdpdGggYQordmFsdWUgZXF1YWwgdG8gKGNvbHVtbnMgLSAnd3JhcG1hcmdpbicpLCB3aGVyZSBjb2x1bW5zIGlzIHRoZSB3aWR0aCBvZiB0aGUKK3NjcmVlbi4KKworV2hlbiAndGV4dHdpZHRoJyBhbmQgJ3dyYXBtYXJnaW4nIGFyZSBib3RoIHNldCwgJ3RleHR3aWR0aCcgaXMgdXNlZC4KKworSWYgeW91IGRvbid0IHJlYWxseSB3YW50IHRvIGJyZWFrIHRoZSBsaW5lLCBidXQgdmlldyB0aGUgbGluZSB3cmFwcGVkIGF0IGEKK2NvbnZlbmllbnQgcGxhY2UsIHNlZSB0aGUgJ2xpbmVicmVhaycgb3B0aW9uLgorCitUaGUgbGluZSBpcyBvbmx5IGJyb2tlbiBhdXRvbWF0aWNhbGx5IHdoZW4gdXNpbmcgaW5zZXJ0IG1vZGUsIG9yIHdoZW4KK2FwcGVuZGluZyB0byBhIGxpbmUuICBXaGVuIGluIHJlcGxhY2UgbW9kZSBhbmQgdGhlIGxpbmUgbGVuZ3RoIGlzIG5vdAorY2hhbmdlZCwgdGhlIGxpbmUgd2lsbCBub3QgYmUgYnJva2VuLgorCitMb25nIGxpbmVzIGFyZSBicm9rZW4gaWYgeW91IGVudGVyIGEgbm9uLXdoaXRlIGNoYXJhY3RlciBhZnRlciB0aGUgbWFyZ2luLgorVGhlIHNpdHVhdGlvbnMgd2hlcmUgYSBsaW5lIHdpbGwgYmUgYnJva2VuIGNhbiBiZSByZXN0cmljdGVkIGJ5IGFkZGluZworY2hhcmFjdGVycyB0byB0aGUgJ2Zvcm1hdG9wdGlvbnMnIG9wdGlvbjoKKyJsIiAgT25seSBicmVhayBhIGxpbmUgaWYgaXQgd2FzIG5vdCBsb25nZXIgdGhhbiAndGV4dHdpZHRoJyB3aGVuIHRoZSBpbnNlcnQKKyAgICAgc3RhcnRlZC4KKyJ2IiAgT25seSBicmVhayBhdCBhIHdoaXRlIGNoYXJhY3RlciB0aGF0IGhhcyBiZWVuIGVudGVyZWQgZHVyaW5nIHRoZQorICAgICBjdXJyZW50IGluc2VydCBjb21tYW5kLiAgVGhpcyBpcyBtb3N0bHkgVmktY29tcGF0aWJsZS4KKyJsdiIgT25seSBicmVhayBpZiB0aGUgbGluZSB3YXMgbm90IGxvbmdlciB0aGFuICd0ZXh0d2lkdGgnIHdoZW4gdGhlIGluc2VydAorICAgICBzdGFydGVkIGFuZCBvbmx5IGF0IGEgd2hpdGUgY2hhcmFjdGVyIHRoYXQgaGFzIGJlZW4gZW50ZXJlZCBkdXJpbmcgdGhlCisgICAgIGN1cnJlbnQgaW5zZXJ0IGNvbW1hbmQuICBPbmx5IGRpZmZlcnMgZnJvbSAibCIgd2hlbiBlbnRlcmluZyBub24td2hpdGUKKyAgICAgY2hhcmFjdGVycyB3aGlsZSBjcm9zc2luZyB0aGUgJ3RleHR3aWR0aCcgYm91bmRhcnkuCisKK0lmIHlvdSB3YW50IHRvIGZvcm1hdCBhIGJsb2NrIG9mIHRleHQsIHlvdSBjYW4gdXNlIHRoZSAiZ3EiIG9wZXJhdG9yLiAgVHlwZQorImdxIiBhbmQgYSBtb3ZlbWVudCBjb21tYW5kIHRvIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBibG9jay4gIEluCittYW55IGNhc2VzLCB0aGUgY29tbWFuZCAiZ3F9IiB3aWxsIGRvIHdoYXQgeW91IHdhbnQgKGZvcm1hdCB1bnRpbCB0aGUgZW5kIG9mCitwYXJhZ3JhcGgpLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgImdxYXAiLCB3aGljaCB3aWxsIGZvcm1hdCB0aGUgd2hvbGUKK3BhcmFncmFwaCwgbm8gbWF0dGVyIHdoZXJlIHRoZSBjdXJzb3IgY3VycmVudGx5IGlzLiAgT3IgeW91IGNhbiB1c2UgVmlzdWFsCittb2RlOiBoaXQgInYiLCBtb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrLCBhbmQgdHlwZSAiZ3EiLiAgU2VlIGFsc28gfGdxfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiAnZXhwYW5kdGFiJywgJ3NtYXJ0dGFiJyBhbmQgJ3NvZnR0YWJzdG9wJyBvcHRpb25zCSppbnMtZXhwYW5kdGFiKgorCitJZiB0aGUgJ2V4cGFuZHRhYicgb3B0aW9uIGlzIG9uLCBzcGFjZXMgd2lsbCBiZSB1c2VkIHRvIGZpbGwgdGhlIGFtb3VudCBvZgord2hpdGVzcGFjZSBvZiB0aGUgdGFiLiAgSWYgeW91IHdhbnQgdG8gZW50ZXIgYSByZWFsIDxUYWI+LCB0eXBlIENUUkwtViBmaXJzdAorKHVzZSBDVFJMLVEgd2hlbiBDVFJMLVYgaXMgbWFwcGVkIHxpX0NUUkwtUXwpLgorVGhlICdleHBhbmR0YWInIG9wdGlvbiBpcyBvZmYgYnkgZGVmYXVsdC4gIE5vdGUgdGhhdCBpbiBSZXBsYWNlIG1vZGUsIGEgc2luZ2xlCitjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgd2l0aCBzZXZlcmFsIHNwYWNlcy4gIFRoZSByZXN1bHQgb2YgdGhpcyBpcyB0aGF0IHRoZQorbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIGxpbmUgaW5jcmVhc2VzLiAgQmFja3NwYWNpbmcgd2lsbCBkZWxldGUgb25lCitzcGFjZSBhdCBhIHRpbWUuICBUaGUgb3JpZ2luYWwgY2hhcmFjdGVyIHdpbGwgYmUgcHV0IGJhY2sgZm9yIG9ubHkgb25lIHNwYWNlCit0aGF0IHlvdSBiYWNrc3BhY2Ugb3ZlciAodGhlIGxhc3Qgb25lKS4gIHtWaSBkb2VzIG5vdCBoYXZlIHRoZSAnZXhwYW5kdGFiJworb3B0aW9ufQorCisJCQkJCQkJKmlucy1zbWFydHRhYioKK1doZW4gdGhlICdzbWFydHRhYicgb3B0aW9uIGlzIG9uLCBhIDxUYWI+IGluc2VydHMgJ3NoaWZ0d2lkdGgnIHBvc2l0aW9ucyBhdAordGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgYW5kICd0YWJzdG9wJyBwb3NpdGlvbnMgaW4gb3RoZXIgcGxhY2VzLiAgVGhpcyBtZWFucwordGhhdCBvZnRlbiBzcGFjZXMgaW5zdGVhZCBvZiBhIDxUYWI+IGNoYXJhY3RlciBhcmUgaW5zZXJ0ZWQuICBXaGVuICdzbWFydHRhYgoraXMgb2ZmLCBhIDxUYWI+IGFsd2F5cyBpbnNlcnRzICd0YWJzdG9wJyBwb3NpdGlvbnMsIGFuZCAnc2hpZnR3aWR0aCcgaXMgb25seQordXNlZCBmb3IgIj4+IiBhbmQgdGhlIGxpa2UuICB7bm90IGluIFZpfQorCisJCQkJCQkJKmlucy1zb2Z0dGFic3RvcCoKK1doZW4gdGhlICdzb2Z0dGFic3RvcCcgb3B0aW9uIGlzIG5vbi16ZXJvLCBhIDxUYWI+IGluc2VydHMgJ3NvZnR0YWJzdG9wJworcG9zaXRpb25zLCBhbmQgYSA8QlM+IHVzZWQgdG8gZGVsZXRlIHdoaXRlIHNwYWNlLCB3aWxsIGRlbGV0ZSAnc29mdHRhYnN0b3AnCitwb3NpdGlvbnMuICBUaGlzIGZlZWxzIGxpa2UgJ3RhYnN0b3AnIHdhcyBzZXQgdG8gJ3NvZnR0YWJzdG9wJywgYnV0IGEgcmVhbAorPFRhYj4gY2hhcmFjdGVyIHN0aWxsIHRha2VzICd0YWJzdG9wJyBwb3NpdGlvbnMsIHNvIHlvdXIgZmlsZSB3aWxsIHN0aWxsIGxvb2sKK2NvcnJlY3Qgd2hlbiB1c2VkIGJ5IG90aGVyIGFwcGxpY2F0aW9ucy4KKworSWYgJ3NvZnR0YWJzdG9wJyBpcyBub24temVybywgYSA8QlM+IHdpbGwgdHJ5IHRvIGRlbGV0ZSBhcyBtdWNoIHdoaXRlIHNwYWNlIHRvCittb3ZlIHRvIHRoZSBwcmV2aW91cyAnc29mdHRhYnN0b3AnIHBvc2l0aW9uLCBleGNlcHQgd2hlbiB0aGUgcHJldmlvdXNseQoraW5zZXJ0ZWQgY2hhcmFjdGVyIGlzIGEgc3BhY2UsIHRoZW4gaXQgd2lsbCBvbmx5IGRlbGV0ZSB0aGUgY2hhcmFjdGVyIGJlZm9yZQordGhlIGN1cnNvci4gIE90aGVyd2lzZSB5b3UgY2Fubm90IGFsd2F5cyBkZWxldGUgYSBzaW5nbGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUKK2N1cnNvci4gIFlvdSB3aWxsIGhhdmUgdG8gZGVsZXRlICdzb2Z0dGFic3RvcCcgY2hhcmFjdGVycyBmaXJzdCwgYW5kIHRoZW4gdHlwZQorZXh0cmEgc3BhY2VzIHRvIGdldCB3aGVyZSB5b3Ugd2FudCB0byBiZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBSZXBsYWNlIG1vZGUJCQkJKlJlcGxhY2UqICpSZXBsYWNlLW1vZGUqICptb2RlLXJlcGxhY2UqCisKK0VudGVyIFJlcGxhY2UgbW9kZSB3aXRoIHRoZSAiUiIgY29tbWFuZCBpbiBub3JtYWwgbW9kZS4KKworSW4gUmVwbGFjZSBtb2RlLCBvbmUgY2hhcmFjdGVyIGluIHRoZSBsaW5lIGlzIGRlbGV0ZWQgZm9yIGV2ZXJ5IGNoYXJhY3RlciB5b3UKK3R5cGUuICBJZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgdG8gZGVsZXRlIChhdCB0aGUgZW5kIG9mIHRoZSBsaW5lKSwgdGhlCit0eXBlZCBjaGFyYWN0ZXIgaXMgYXBwZW5kZWQgKGFzIGluIEluc2VydCBtb2RlKS4gIFRodXMgdGhlIG51bWJlciBvZgorY2hhcmFjdGVycyBpbiBhIGxpbmUgc3RheXMgdGhlIHNhbWUgdW50aWwgeW91IGdldCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorSWYgYSA8Tkw+IGlzIHR5cGVkLCBhIGxpbmUgYnJlYWsgaXMgaW5zZXJ0ZWQgYW5kIG5vIGNoYXJhY3RlciBpcyBkZWxldGVkLgorCitCZSBjYXJlZnVsIHdpdGggPFRhYj4gY2hhcmFjdGVycy4gIElmIHlvdSB0eXBlIGEgbm9ybWFsIHByaW50aW5nIGNoYXJhY3RlciBpbgoraXRzIHBsYWNlLCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaXMgc3RpbGwgdGhlIHNhbWUsIGJ1dCB0aGUgbnVtYmVyIG9mCitjb2x1bW5zIHdpbGwgYmVjb21lIHNtYWxsZXIuCisKK0lmIHlvdSBkZWxldGUgY2hhcmFjdGVycyBpbiBSZXBsYWNlIG1vZGUgKHdpdGggPEJTPiwgQ1RSTC1XLCBvciBDVFJMLVUpLCB3aGF0CitoYXBwZW5zIGlzIHRoYXQgeW91IGRlbGV0ZSB0aGUgY2hhbmdlcy4gIFRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSByZXBsYWNlZAorYXJlIHJlc3RvcmVkLiAgSWYgeW91IGhhZCB0eXBlZCBwYXN0IHRoZSBleGlzdGluZyB0ZXh0LCB0aGUgY2hhcmFjdGVycyB5b3UKK2FkZGVkIGFyZSBkZWxldGVkLiAgVGhpcyBpcyBlZmZlY3RpdmVseSBhIGNoYXJhY3Rlci1hdC1hLXRpbWUgdW5kby4KKworSWYgdGhlICdleHBhbmR0YWInIG9wdGlvbiBpcyBvbiwgYSA8VGFiPiB3aWxsIHJlcGxhY2Ugb25lIGNoYXJhY3RlciB3aXRoCitzZXZlcmFsIHNwYWNlcy4gIFRoZSByZXN1bHQgb2YgdGhpcyBpcyB0aGF0IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUKK2xpbmUgaW5jcmVhc2VzLiAgQmFja3NwYWNpbmcgd2lsbCBkZWxldGUgb25lIHNwYWNlIGF0IGEgdGltZS4gIFRoZSBvcmlnaW5hbAorY2hhcmFjdGVyIHdpbGwgYmUgcHV0IGJhY2sgZm9yIG9ubHkgb25lIHNwYWNlIHRoYXQgeW91IGJhY2tzcGFjZSBvdmVyICh0aGUKK2xhc3Qgb25lKS4gIHtWaSBkb2VzIG5vdCBoYXZlIHRoZSAnZXhwYW5kdGFiJyBvcHRpb259CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gVmlydHVhbCBSZXBsYWNlIG1vZGUJCSp2cmVwbGFjZS1tb2RlKiAqVmlydHVhbC1SZXBsYWNlLW1vZGUqCisKK0VudGVyIFZpcnR1YWwgUmVwbGFjZSBtb2RlIHdpdGggdGhlICJnUiIgY29tbWFuZCBpbiBub3JtYWwgbW9kZS4KK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3ZyZXBsYWNlIGZlYXR1cmV9Cit7VmkgZG9lcyBub3QgaGF2ZSBWaXJ0dWFsIFJlcGxhY2UgbW9kZX0KKworVmlydHVhbCBSZXBsYWNlIG1vZGUgaXMgc2ltaWxhciB0byBSZXBsYWNlIG1vZGUsIGJ1dCBpbnN0ZWFkIG9mIHJlcGxhY2luZworYWN0dWFsIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUsIHlvdSBhcmUgcmVwbGFjaW5nIHNjcmVlbiByZWFsIGVzdGF0ZSwgc28gdGhhdAorY2hhcmFjdGVycyBmdXJ0aGVyIG9uIGluIHRoZSBmaWxlIG5ldmVyIGFwcGVhciB0byBtb3ZlLgorCitTbyBpZiB5b3UgdHlwZSBhIDxUYWI+IGl0IG1heSByZXBsYWNlIHNldmVyYWwgbm9ybWFsIGNoYXJhY3RlcnMsIGFuZCBpZiB5b3UKK3R5cGUgYSBsZXR0ZXIgb24gdG9wIG9mIGEgPFRhYj4gaXQgbWF5IG5vdCByZXBsYWNlIGFueXRoaW5nIGF0IGFsbCwgc2luY2UgdGhlCis8VGFiPiB3aWxsIHN0aWxsIGxpbmUgdXAgdG8gdGhlIHNhbWUgcGxhY2UgYXMgYmVmb3JlLgorCitUeXBpbmcgYSA8Tkw+IHN0aWxsIGRvZXNuJ3QgY2F1c2UgY2hhcmFjdGVycyBsYXRlciBpbiB0aGUgZmlsZSB0byBhcHBlYXIgdG8KK21vdmUuICBUaGUgcmVzdCBvZiB0aGUgY3VycmVudCBsaW5lIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIDxOTD4gKHRoYXQgaXMsCit0aGV5IGFyZSBkZWxldGVkKSwgYW5kIHJlcGxhY2luZyBjb250aW51ZXMgb24gdGhlIG5leHQgbGluZS4gIEEgbmV3IGxpbmUgaXMKK05PVCBpbnNlcnRlZCB1bmxlc3MgeW91IGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKworSW50ZXJlc3RpbmcgZWZmZWN0cyBhcmUgc2VlbiB3aGVuIHVzaW5nIENUUkwtVCBhbmQgQ1RSTC1ELiAgVGhlIGNoYXJhY3RlcnMKK2JlZm9yZSB0aGUgY3Vyc29yIGFyZSBzaGlmdGVkIHNpZGV3YXlzIGFzIG5vcm1hbCwgYnV0IGNoYXJhY3RlcnMgbGF0ZXIgaW4gdGhlCitsaW5lIHN0aWxsIHJlbWFpbiBzdGlsbC4gIENUUkwtVCB3aWxsIGhpZGUgc29tZSBvZiB0aGUgb2xkIGxpbmUgdW5kZXIgdGhlCitzaGlmdGVkIGNoYXJhY3RlcnMsIGJ1dCBDVFJMLUQgd2lsbCByZXZlYWwgdGhlbSBhZ2Fpbi4KKworQXMgd2l0aCBSZXBsYWNlIG1vZGUsIHVzaW5nIDxCUz4gZXRjIHdpbGwgYnJpbmcgYmFjayB0aGUgY2hhcmFjdGVycyB0aGF0IHdlcmUKK3JlcGxhY2VkLiAgVGhpcyBzdGlsbCB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoICdzbWFydGluZGVudCcsIENUUkwtVCBhbmQKK0NUUkwtRCwgJ2V4cGFuZHRhYicsICdzbWFydHRhYicsICdzb2Z0dGFic3RvcCcsIGV0Yy4KKworSW4gJ2xpc3QnIG1vZGUsIFZpcnR1YWwgUmVwbGFjZSBtb2RlIGFjdHMgYXMgaWYgaXQgd2FzIG5vdCBpbiAnbGlzdCcgbW9kZSwKK3VubGVzcyAiTCIgaXMgaW4gJ2Nwb3B0aW9ucycuCisKK05vdGUgdGhhdCB0aGUgb25seSB0aW1lcyBjaGFyYWN0ZXJzIGJleW9uZCB0aGUgY3Vyc29yIHNob3VsZCBhcHBlYXIgdG8gbW92ZQorYXJlIGluICdsaXN0JyBtb2RlLCBhbmQgb2NjYXNpb25hbGx5IHdoZW4gJ3dyYXAnIGlzIHNldCAoYW5kIHRoZSBsaW5lIGNoYW5nZXMKK2xlbmd0aCB0byBiZWNvbWUgc2hvcnRlciBvciB3aWRlciB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgc2NyZWVuKSwgb3IKK21vbWVudGFyaWx5IHdoZW4gdHlwaW5nIG92ZXIgYSBDVFJMIGNoYXJhY3Rlci4gIEEgQ1RSTCBjaGFyYWN0ZXIgdGFrZXMgdXAgdHdvCitzY3JlZW4gc3BhY2VzLiAgV2hlbiByZXBsYWNpbmcgaXQgd2l0aCB0d28gbm9ybWFsIGNoYXJhY3RlcnMsIHRoZSBmaXJzdCB3aWxsCitiZSBpbnNlcnRlZCBhbmQgdGhlIHNlY29uZCB3aWxsIHJlcGxhY2UgdGhlIENUUkwgY2hhcmFjdGVyLgorCitUaGlzIG1vZGUgaXMgdmVyeSB1c2VmdWwgZm9yIGVkaXRpbmcgPFRhYj4gc2VwYXJhdGVkIGNvbHVtbnMgaW4gdGFibGVzLCBmb3IKK2VudGVyaW5nIG5ldyBkYXRhIHdoaWxlIGtlZXBpbmcgYWxsIHRoZSBjb2x1bW5zIGFsaWduZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gSW5zZXJ0IG1vZGUgY29tcGxldGlvbgkJCQkqaW5zLWNvbXBsZXRpb24qCisKK0luIEluc2VydCBhbmQgUmVwbGFjZSBtb2RlcywgdGhlcmUgYXJlIHNldmVyYWwgY29tbWFuZHMgdG8gY29tcGxldGUgcGFydCBvZiBhCitrZXl3b3JkIG9yIGxpbmUgdGhhdCBoYXMgYmVlbiB0eXBlZC4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUgdXNpbmcKK2NvbXBsaWNhdGVkIGtleXdvcmRzIChlLmcuLCBmdW5jdGlvbiBuYW1lcyB3aXRoIGNhcGl0YWxzIGFuZCB1bmRlcnNjb3JlcykuCisKK1RoZXNlIGNvbW1hbmRzIGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gdGhlIHwraW5zZXJ0X2V4cGFuZHwgZmVhdHVyZSB3YXMKK2Rpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4KKworQ29tcGxldGlvbiBjYW4gYmUgZG9uZSBmb3I6CisKKzEuIFdob2xlIGxpbmVzCQkJCQkJfGlfQ1RSTC1YX0NUUkwtTHwKKzIuIGtleXdvcmRzIGluIHRoZSBjdXJyZW50IGZpbGUJCQkJfGlfQ1RSTC1YX0NUUkwtTnwKKzMuIGtleXdvcmRzIGluICdkaWN0aW9uYXJ5JwkJCQl8aV9DVFJMLVhfQ1RSTC1LfAorNC4ga2V5d29yZHMgaW4gJ3RoZXNhdXJ1cycsIHRoZXNhdXJ1cy1zdHlsZQkJfGlfQ1RSTC1YX0NUUkwtVHwKKzUuIGtleXdvcmRzIGluIHRoZSBjdXJyZW50IGFuZCBpbmNsdWRlZCBmaWxlcwkJfGlfQ1RSTC1YX0NUUkwtSXwKKzYuIHRhZ3MJCQkJCQkJfGlfQ1RSTC1YX0NUUkwtXXwKKzcuIGZpbGUgbmFtZXMJCQkJCQl8aV9DVFJMLVhfQ1RSTC1GfAorOC4gZGVmaW5pdGlvbnMgb3IgbWFjcm9zCQkJCXxpX0NUUkwtWF9DVFJMLUR8Cis5LiBWaW0gY29tbWFuZC1saW5lCQkJCQl8aV9DVFJMLVhfQ1RSTC1WfAorMTAuIGtleXdvcmRzIGluICdjb21wbGV0ZScJCQkJfGlfQ1RSTC1OfAorCitBbGwgdGhlc2UgKGV4Y2VwdCAyKSBhcmUgZG9uZSBpbiBDVFJMLVggbW9kZS4gIFRoaXMgaXMgYSBzdWItbW9kZSBvZiBJbnNlcnQKK2FuZCBSZXBsYWNlIG1vZGVzLiAgWW91IGVudGVyIENUUkwtWCBtb2RlIGJ5IHR5cGluZyBDVFJMLVggYW5kIG9uZSBvZiB0aGUKK0NUUkwtWCBjb21tYW5kcy4gIFlvdSBleGl0IENUUkwtWCBtb2RlIGJ5IHR5cGluZyBhIGtleSB0aGF0IGlzIG5vdCBhIHZhbGlkCitDVFJMLVggbW9kZSBjb21tYW5kLiAgVmFsaWQga2V5cyBhcmUgdGhlIENUUkwtWCBjb21tYW5kIGl0c2VsZiwgQ1RSTC1OIChuZXh0KSwKK2FuZCBDVFJMLVAgKHByZXZpb3VzKS4KKworQWxzbyBzZWUgdGhlICdpbmZlcmNhc2UnIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBhZGp1c3QgdGhlIGNhc2Ugb2YgdGhlIG1hdGNoLgorCitOb3RlOiBUaGUga2V5cyB0aGF0IGFyZSB2YWxpZCBpbiBDVFJMLVggbW9kZSBhcmUgbm90IG1hcHBlZC4gIFRoaXMgYWxsb3dzIGZvcgorIjptYXAgXkYgXlheRiIgdG8gd29yayAod2hlcmUgXkYgaXMgQ1RSTC1GIGFuZCBeWCBpcyBDVFJMLVgpLiAgVGhlIGtleSB0aGF0CitlbmRzIENUUkwtWCBtb2RlIChhbnkga2V5IHRoYXQgaXMgbm90IGEgdmFsaWQgQ1RSTC1YIG1vZGUgY29tbWFuZCkgaXMgbWFwcGVkLgorQWxzbywgd2hlbiBkb2luZyBjb21wbGV0aW9uIHdpdGggJ2NvbXBsZXRlJyBtYXBwaW5ncyBhcHBseSBhcyB1c3VhbC4KKworVGhlIGZvbGxvd2luZyBtYXBwaW5ncyBhcmUgc3VnZ2VzdGVkIHRvIG1ha2UgdHlwaW5nIHRoZSBjb21wbGV0aW9uIGNvbW1hbmRzCithIGJpdCBlYXNpZXIgKGFsdGhvdWdoIHRoZXkgd2lsbCBoaWRlIG90aGVyIGNvbW1hbmRzKTogPgorICAgIDppbm9yZW1hcCBeXSBeWF5dCisgICAgOmlub3JlbWFwIF5GIF5YXkYKKyAgICA6aW5vcmVtYXAgXkQgXlheRAorICAgIDppbm9yZW1hcCBeTCBeWF5MCisKK0FzIGEgc3BlY2lhbCBjYXNlLCB0eXBpbmcgQ1RSTC1SIHRvIHBlcmZvcm0gcmVnaXN0ZXIgaW5zZXJ0aW9uIChzZWUKK3xpX0NUUkwtUnwpIHdpbGwgbm90IGV4aXQgQ1RSTC1YIG1vZGUuICBUaGlzIGlzIHByaW1hcmlseSB0byBhbGxvdyB0aGUgdXNlIG9mCit0aGUgJz0nIHJlZ2lzdGVyIHRvIGNhbGwgc29tZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIG5leHQgb3BlcmF0aW9uLiAgSWYKK3RoZSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIgKG9yIHJlc3VsdCBvZiB0aGUgJz0nIHJlZ2lzdGVyIGV2YWx1YXRpb24pIGFyZQorbm90IHZhbGlkIENUUkwtWCBtb2RlIGtleXMsIHRoZW4gQ1RSTC1YIG1vZGUgd2lsbCBiZSBleGl0ZWQgYXMgaWYgdGhvc2Uga2V5cworaGFkIGJlZW4gdHlwZWQuCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHdpbGwgbWFwIDxUYWI+IHRvIGVpdGhlciBhY3R1YWxseSBpbnNlcnQgYSA8VGFiPiBpZgordGhlIGN1cnJlbnQgbGluZSBpcyBjdXJyZW50bHkgb25seSB3aGl0ZXNwYWNlLCBvciBzdGFydC9jb250aW51ZSBhIENUUkwtTgorY29tcGxldGlvbiBvcGVyYXRpb246ID4KKworCWZ1bmN0aW9uISBDbGV2ZXJUYWIoKQorCSAgIGlmIHN0cnBhcnQoIGdldGxpbmUoJy4nKSwgMCwgY29sKCcuJyktMSApID1+ICdeXHMqJCcKKwkgICAgICByZXR1cm4gIlw8VGFiPiIKKwkgICBlbHNlCisJICAgICAgcmV0dXJuICJcPEMtTj4iCisJZW5kZnVuY3Rpb24KKwlpbm9yZW1hcCA8VGFiPiA8Qy1SPj1DbGV2ZXJUYWIoKTxDUj4KKworCisKK0NvbXBsZXRpbmcgd2hvbGUgbGluZXMJCQkJCSpjb21wbC13aG9sZS1saW5lKgorCisJCQkJCQkJKmlfQ1RSTC1YX0NUUkwtTCoKK0NUUkwtWCBDVFJMLUwJCVNlYXJjaCBiYWNrd2FyZHMgZm9yIGEgbGluZSB0aGF0IHN0YXJ0cyB3aXRoIHRoZQorCQkJc2FtZSBjaGFyYWN0ZXJzIGFzIGluIHRoZSBjdXJyZW50IGxpbmUgYmVmb3JlIHRoZQorCQkJY3Vyc29yLiAgSW5kZW50IGlzIGlnbm9yZWQuICBUaGUgZm91bmQgbGluZSBpcworCQkJaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4KKwkJCVRoZSAnY29tcGxldGUnIG9wdGlvbiBpcyB1c2VkIHRvIGRlY2lkZSBpbiB3aGljaAorCQkJYnVmZmVycyBhIG1hdGNoIGlzIHNlYXJjaGVkIGZvci4gIEJ1dCBvbmx5IGxvYWRlZAorCQkJYnVmZmVycyBhcmUgdXNlZC4KKwlDVFJMLUwJb3IKKwlDVFJMLVAJCVNlYXJjaCBiYWNrd2FyZHMgZm9yIG5leHQgbWF0Y2hpbmcgbGluZS4gIFRoaXMgbGluZQorCQkJcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIGxpbmUuCisKKwlDVFJMLU4JCVNlYXJjaCBmb3J3YXJkIGZvciBuZXh0IG1hdGNoaW5nIGxpbmUuICBUaGlzIGxpbmUKKwkJCXJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBsaW5lLgorCisJQ1RSTC1YIENUUkwtTAlBZnRlciBleHBhbmRpbmcgYSBsaW5lIHlvdSBjYW4gYWRkaXRpb25hbGx5IGdldCB0aGUKKwkJCWxpbmUgbmV4dCB0byBpdCBieSB0eXBpbmcgQ1RSTC1YIENUUkwtTCBhZ2FpbiwgdW5sZXNzCisJCQlhIGRvdWJsZSBDVFJMLVggaXMgdXNlZC4KKworQ29tcGxldGluZyBrZXl3b3JkcyBpbiBjdXJyZW50IGZpbGUJCQkqY29tcGwtY3VycmVudCoKKworCQkJCQkJCSppX0NUUkwtWF9DVFJMLVAqCisJCQkJCQkJKmlfQ1RSTC1YX0NUUkwtTioKK0NUUkwtWCBDVFJMLU4JCVNlYXJjaCBmb3J3YXJkcyBmb3Igd29yZHMgdGhhdCBzdGFydCB3aXRoIHRoZSBrZXl3b3JkCisJCQlpbiBmcm9udCBvZiB0aGUgY3Vyc29yLiAgVGhlIGZvdW5kIGtleXdvcmQgaXMgaW5zZXJ0ZWQKKwkJCWluIGZyb250IG9mIHRoZSBjdXJzb3IuCisKK0NUUkwtWCBDVFJMLVAJCVNlYXJjaCBiYWNrd2FyZHMgZm9yIHdvcmRzIHRoYXQgc3RhcnQgd2l0aCB0aGUga2V5d29yZAorCQkJaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4gIFRoZSBmb3VuZCBrZXl3b3JkIGlzIGluc2VydGVkCisJCQlpbiBmcm9udCBvZiB0aGUgY3Vyc29yLgorCisJQ1RSTC1OCQlTZWFyY2ggZm9yd2FyZCBmb3IgbmV4dCBtYXRjaGluZyBrZXl3b3JkLiAgVGhpcworCQkJa2V5d29yZCByZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcga2V5d29yZC4KKworCUNUUkwtUAkJU2VhcmNoIGJhY2t3YXJkcyBmb3IgbmV4dCBtYXRjaGluZyBrZXl3b3JkLiAgVGhpcworCQkJa2V5d29yZCByZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcga2V5d29yZC4KKworCUNUUkwtWCBDVFJMLU4gb3IKKwlDVFJMLVggQ1RSTC1QCUZ1cnRoZXIgdXNlIG9mIENUUkwtWCBDVFJMLU4gb3IgQ1RSTC1YIENUUkwtUCB3aWxsCisJCQljb3B5IHRoZSB3b3JkcyBmb2xsb3dpbmcgdGhlIHByZXZpb3VzIGV4cGFuc2lvbiBpbgorCQkJb3RoZXIgY29udGV4dHMgdW5sZXNzIGEgZG91YmxlIENUUkwtWCBpcyB1c2VkLgorCitJZiB0aGVyZSBpcyBhIGtleXdvcmQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvciAoYSBuYW1lIG1hZGUgb3V0IG9mIGFscGhhYmV0aWMKK2NoYXJhY3RlcnMgYW5kIGNoYXJhY3RlcnMgaW4gJ2lza2V5d29yZCcpLCBpdCBpcyB1c2VkIGFzIHRoZSBzZWFyY2ggcGF0dGVybiwKK3dpdGggIlw8IiBwcmVwZW5kZWQgKG1lYW5pbmc6IHN0YXJ0IG9mIGEgd29yZCkuICBPdGhlcndpc2UgIlw8XGtcayIgaXMgdXNlZAorYXMgc2VhcmNoIHBhdHRlcm4gKHN0YXJ0IG9mIGFueSBrZXl3b3JkIG9mIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzKS4KKworSW4gUmVwbGFjZSBtb2RlLCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgcmVwbGFjZWQgZGVwZW5kcyBvbiB0aGUKK2xlbmd0aCBvZiB0aGUgbWF0Y2hlZCBzdHJpbmcuICBUaGlzIHdvcmtzIGxpa2UgdHlwaW5nIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZQorbWF0Y2hlZCBzdHJpbmcgaW4gUmVwbGFjZSBtb2RlLgorCitJZiB0aGVyZSBpcyBub3QgYSB2YWxpZCBrZXl3b3JkIGNoYXJhY3RlciBiZWZvcmUgdGhlIGN1cnNvciwgYW55IGtleXdvcmQgb2YKK2F0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGlzIG1hdGNoZWQuCisJZS5nLiwgdG8gZ2V0OgorCSAgICBwcmludGYoIiglZywgJWcsICVnKSIsIHZlY3RvclswXSwgdmVjdG9yWzFdLCB2ZWN0b3JbMl0pOworCWp1c3QgdHlwZToKKwkgICAgcHJpbnRmKCIoJWcsICVnLCAlZykiLCB2ZWN0b3JbMF0sIF5QWzFdLCBeUFsyXSk7CisKK011bHRpcGxlIHJlcGVhdHMgb2YgdGhlIHNhbWUgY29tcGxldGlvbiBhcmUgc2tpcHBlZDsgdGh1cyBhIGRpZmZlcmVudCBtYXRjaAord2lsbCBiZSBpbnNlcnRlZCBhdCBlYWNoIENUUkwtTiBhbmQgQ1RSTC1QICh1bmxlc3MgdGhlcmUgaXMgb25seSBvbmUKK21hdGNoaW5nIGtleXdvcmQpLgorCitTaW5nbGUgY2hhcmFjdGVyIG1hdGNoZXMgYXJlIG5ldmVyIGluY2x1ZGVkLCBhcyB0aGV5IHVzdWFsbHkganVzdCBnZXQgaW4KK3RoZSB3YXkgb2Ygd2hhdCB5b3Ugd2VyZSByZWFsbHkgYWZ0ZXIuCisJZS5nLiwgdG8gZ2V0OgorCQlwcmludGYoIm5hbWUgPSAlc1xuIiwgbmFtZSk7CisJanVzdCB0eXBlOgorCQlwcmludGYoIm5hbWUgPSAlc1xuIiwgbl5QKTsKKwlvciBldmVuOgorCQlwcmludGYoIm5hbWUgPSAlc1xuIiwgXlApOworVGhlICduJyBpbiAnXG4nIGlzIHNraXBwZWQuCisKK0FmdGVyIGV4cGFuZGluZyBhIHdvcmQsIHlvdSBjYW4gdXNlIENUUkwtWCBDVFJMLVAgb3IgQ1RSTC1YIENUUkwtTiB0byBnZXQgdGhlCit3b3JkIGZvbGxvd2luZyB0aGUgZXhwYW5zaW9uIGluIG90aGVyIGNvbnRleHRzLiAgVGhlc2Ugc2VxdWVuY2VzIHNlYXJjaCBmb3IKK3RoZSB0ZXh0IGp1c3QgZXhwYW5kZWQgYW5kIGZ1cnRoZXIgZXhwYW5kIGJ5IGdldHRpbmcgYW4gZXh0cmEgd29yZC4gIFRoaXMgaXMKK3VzZWZ1bCBpZiB5b3UgbmVlZCB0byByZXBlYXQgYSBzZXF1ZW5jZSBvZiBjb21wbGljYXRlZCB3b3Jkcy4gIEFsdGhvdWdoIENUUkwtUAorYW5kIENUUkwtTiBsb29rIGp1c3QgZm9yIHN0cmluZ3Mgb2YgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMsIENUUkwtWCBDVFJMLVAgYW5kCitDVFJMLVggQ1RSTC1OIGNhbiBiZSB1c2VkIHRvIGV4cGFuZCB3b3JkcyBvZiBqdXN0IG9uZSBjaGFyYWN0ZXIuCisJZS5nLiwgdG8gZ2V0OgorCQlNJmVhY3V0ZTt4aWNvCisJeW91IGNhbiB0eXBlOgorCQlNXk5eUF5YXlBeWF5QCitDVFJMLU4gc3RhcnRzIHRoZSBleHBhbnNpb24gYW5kIHRoZW4gQ1RSTC1QIHRha2VzIGJhY2sgdGhlIHNpbmdsZSBjaGFyYWN0ZXIKKyJNIiwgdGhlIG5leHQgdHdvIENUUkwtWCBDVFJMLVAncyBnZXQgdGhlIHdvcmRzICImZWFjdXRlIiBhbmQgIjt4aWNvIi4KKworSWYgdGhlIHByZXZpb3VzIGV4cGFuc2lvbiB3YXMgc3BsaXQsIGJlY2F1c2UgaXQgZ290IGxvbmdlciB0aGFuICd0ZXh0d2lkdGgnLAordGhlbiBqdXN0IHRoZSB0ZXh0IGluIHRoZSBjdXJyZW50IGxpbmUgd2lsbCBiZSB1c2VkLgorCitJZiB0aGUgbWF0Y2ggZm91bmQgaXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUsIHRoZW4gdGhlIGZpcnN0IHdvcmQgaW4gdGhlIG5leHQKK2xpbmUgd2lsbCBiZSBpbnNlcnRlZCBhbmQgdGhlIG1lc3NhZ2UgIndvcmQgZnJvbSBuZXh0IGxpbmUiIGRpc3BsYXllZCwgaWYKK3RoaXMgd29yZCBpcyBhY2NlcHRlZCB0aGUgbmV4dCBDVFJMLVggQ1RSTC1QIG9yIENUUkwtWCBDVFJMLU4gd2lsbCBzZWFyY2gKK2ZvciB0aG9zZSBsaW5lcyBzdGFydGluZyB3aXRoIHRoaXMgd29yZC4KKworCitDb21wbGV0aW5nIGtleXdvcmRzIGluICdkaWN0aW9uYXJ5JwkJCSpjb21wbC1kaWN0aW9uYXJ5KgorCisJCQkJCQkJKmlfQ1RSTC1YX0NUUkwtSyoKK0NUUkwtWCBDVFJMLUsJCVNlYXJjaCB0aGUgZmlsZXMgZ2l2ZW4gd2l0aCB0aGUgJ2RpY3Rpb25hcnknIG9wdGlvbgorCQkJZm9yIHdvcmRzIHRoYXQgc3RhcnQgd2l0aCB0aGUga2V5d29yZCBpbiBmcm9udCBvZiB0aGUKKwkJCWN1cnNvci4gIFRoaXMgaXMgbGlrZSBDVFJMLU4sIGJ1dCBvbmx5IHRoZSBkaWN0aW9uYXJ5CisJCQlmaWxlcyBhcmUgc2VhcmNoZWQsIG5vdCB0aGUgY3VycmVudCBmaWxlLiAgVGhlIGZvdW5kCisJCQlrZXl3b3JkIGlzIGluc2VydGVkIGluIGZyb250IG9mIHRoZSBjdXJzb3IuICBUaGlzCisJCQljb3VsZCBwb3RlbnRpYWxseSBiZSBwcmV0dHkgc2xvdywgc2luY2UgYWxsIG1hdGNoZXMKKwkJCWFyZSBmb3VuZCBiZWZvcmUgdGhlIGZpcnN0IG1hdGNoIGlzIHVzZWQuICBCeSBkZWZhdWx0LAorCQkJdGhlICdkaWN0aW9uYXJ5JyBvcHRpb24gaXMgZW1wdHkuCisJCQlGb3Igc3VnZ2VzdGlvbnMgd2hlcmUgdG8gZmluZCBhIGxpc3Qgb2Ygd29yZHMsIHNlZSB0aGUKKwkJCSdkaWN0aW9uYXJ5JyBvcHRpb24uCisKKwlDVFJMLUsJb3IKKwlDVFJMLU4JCVNlYXJjaCBmb3J3YXJkIGZvciBuZXh0IG1hdGNoaW5nIGtleXdvcmQuICBUaGlzCisJCQlrZXl3b3JkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBrZXl3b3JkLgorCisJQ1RSTC1QCQlTZWFyY2ggYmFja3dhcmRzIGZvciBuZXh0IG1hdGNoaW5nIGtleXdvcmQuICBUaGlzCisJCQlrZXl3b3JkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBrZXl3b3JkLgorCisJCQkJCQkJKmlfQ1RSTC1YX0NUUkwtVCoKK0NUUkwtWCBDVFJMLVQJCVdvcmtzIGFzIENUUkwtWCBDVFJMLUssIGJ1dCBpbiBhIHNwZWNpYWwgd2F5LiBJdCB1c2VzCisJCQl0aGUgJ3RoZXNhdXJ1cycgb3B0aW9uIGluc3RlYWQgb2YgJ2RpY3Rpb25hcnknLiAgSWYgYQorCQkJbWF0Y2ggaXMgZm91bmQgaW4gdGhlIHRoZXNhdXJ1cyBmaWxlLCBhbGwgdGhlCisJCQlyZW1haW5pbmcgd29yZHMgb24gdGhlIHNhbWUgbGluZSBhcmUgaW5jbHVkZWQgYXMKKwkJCW1hdGNoZXMsIGV2ZW4gdGhvdWdoIHRoZXkgZG9uJ3QgY29tcGxldGUgdGhlIHdvcmQuCisJCQlUaHVzIGEgd29yZCBjYW4gYmUgY29tcGxldGVseSByZXBsYWNlZC4KKworCQkJRm9yIGFuIGV4YW1wbGUsIGltYWdpbmUgdGhlICd0aGVzYXVydXMnIGZpbGUgaGFzIGEKKwkJCWxpbmUgbGlrZSB0aGlzOiA+CisJCQkJYW5ncnkgZnVyaW91cyBtYWQgZW5yYWdlZAorPAkJCVBsYWNpbmcgdGhlIGN1cnNvciBhZnRlciB0aGUgbGV0dGVycyAiYW5nIiBhbmQgdHlwaW5nCisJCQlDVFJMLVggQ1RSTC1UIHdvdWxkIGNvbXBsZXRlIHRoZSB3b3JkICJhbmdyeSI7CisJCQlzdWJzZXF1ZW50IHByZXNzZXMgd291bGQgY2hhbmdlIHRoZSB3b3JkIHRvICJmdXJpb3VzIiwKKwkJCSJtYWQiIGV0Yy4KKwkJCU90aGVyIHVzZXMgaW5jbHVkZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIHR3byBsYW5ndWFnZXMsCisJCQlvciBncm91cGluZyBBUEkgZnVuY3Rpb25zIGJ5IGtleXdvcmQuCisKKwlDVFJMLVQJb3IKKwlDVFJMLU4JCVNlYXJjaCBmb3J3YXJkIGZvciBuZXh0IG1hdGNoaW5nIGtleXdvcmQuICBUaGlzCisJCQlrZXl3b3JkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBrZXl3b3JkLgorCisJQ1RSTC1QCQlTZWFyY2ggYmFja3dhcmRzIGZvciBuZXh0IG1hdGNoaW5nIGtleXdvcmQuICBUaGlzCisJCQlrZXl3b3JkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBrZXl3b3JkLgorCisKK0NvbXBsZXRpbmcga2V5d29yZHMgaW4gdGhlIGN1cnJlbnQgYW5kIGluY2x1ZGVkIGZpbGVzCSpjb21wbC1rZXl3b3JkKgorCitUaGUgJ2luY2x1ZGUnIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgYSBsaW5lIHRoYXQgY29udGFpbnMgYW4gaW5jbHVkZSBmaWxlCituYW1lLiAgVGhlICdwYXRoJyBvcHRpb24gaXMgdXNlZCB0byBzZWFyY2ggZm9yIGluY2x1ZGUgZmlsZXMuCisKKwkJCQkJCQkqaV9DVFJMLVhfQ1RSTC1JKgorQ1RSTC1YIENUUkwtSQkJU2VhcmNoIGZvciB0aGUgZmlyc3Qga2V5d29yZCBpbiB0aGUgY3VycmVudCBhbmQKKwkJCWluY2x1ZGVkIGZpbGVzIHRoYXQgc3RhcnRzIHdpdGggdGhlIHNhbWUgY2hhcmFjdGVycworCQkJYXMgdGhvc2UgYmVmb3JlIHRoZSBjdXJzb3IuICBUaGUgbWF0Y2hlZCBrZXl3b3JkIGlzCisJCQlpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLgorCisJQ1RSTC1OCQlTZWFyY2ggZm9yd2FyZHMgZm9yIG5leHQgbWF0Y2hpbmcga2V5d29yZC4gIFRoaXMKKwkJCWtleXdvcmQgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIGtleXdvcmQuCisJCQlOb3RlOiBDVFJMLUkgaXMgdGhlIHNhbWUgYXMgPFRhYj4sIHdoaWNoIGlzIGxpa2VseSB0bworCQkJYmUgdHlwZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHRoZXJlZm9yZQorCQkJQ1RSTC1JIGlzIG5vdCB1c2VkIGZvciBzZWFyY2hpbmcgZm9yIHRoZSBuZXh0IG1hdGNoLgorCisJQ1RSTC1QCQlTZWFyY2ggYmFja3dhcmQgZm9yIHByZXZpb3VzIG1hdGNoaW5nIGtleXdvcmQuICBUaGlzCisJCQlrZXl3b3JkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBrZXl3b3JkLgorCisJQ1RSTC1YIENUUkwtSQlGdXJ0aGVyIHVzZSBvZiBDVFJMLVggQ1RSTC1JIHdpbGwgY29weSB0aGUgd29yZHMKKwkJCWZvbGxvd2luZyB0aGUgcHJldmlvdXMgZXhwYW5zaW9uIGluIG90aGVyIGNvbnRleHRzCisJCQl1bmxlc3MgYSBkb3VibGUgQ1RSTC1YIGlzIHVzZWQuCisKK0NvbXBsZXRpbmcgdGFncwkJCQkJCSpjb21wbC10YWcqCisJCQkJCQkJKmlfQ1RSTC1YX0NUUkwtXSoKK0NUUkwtWCBDVFJMLV0JCVNlYXJjaCBmb3IgdGhlIGZpcnN0IHRhZyB0aGF0IHN0YXJ0cyB3aXRoIHRoZSBzYW1lCisJCQljaGFyYWN0ZXJzIGFzIGJlZm9yZSB0aGUgY3Vyc29yLiAgVGhlIG1hdGNoaW5nIHRhZyBpcworCQkJaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4gIEFscGhhYmV0aWMKKwkJCWNoYXJhY3RlcnMgYW5kIGNoYXJhY3RlcnMgaW4gJ2lza2V5d29yZCcgYXJlIHVzZWQKKwkJCXRvIGRlY2lkZSB3aGljaCBjaGFyYWN0ZXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUgdGFnCisJCQluYW1lIChzYW1lIGFzIGZvciBhIGtleXdvcmQpLiAgU2VlIGFsc28gfENUUkwtXXwuCisJCQlUaGUgJ3Nob3dmdWxsdGFnJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gYWRkIGNvbnRleHQKKwkJCWZyb20gYXJvdW5kIHRoZSB0YWcgZGVmaW5pdGlvbi4KKwlDVFJMLV0Jb3IKKwlDVFJMLU4JCVNlYXJjaCBmb3J3YXJkcyBmb3IgbmV4dCBtYXRjaGluZyB0YWcuICBUaGlzIHRhZworCQkJcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIHRhZy4KKworCUNUUkwtUAkJU2VhcmNoIGJhY2t3YXJkIGZvciBwcmV2aW91cyBtYXRjaGluZyB0YWcuICBUaGlzIHRhZworCQkJcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIHRhZy4KKworCitDb21wbGV0aW5nIGZpbGUgbmFtZXMJCQkJCSpjb21wbC1maWxlbmFtZSoKKwkJCQkJCQkqaV9DVFJMLVhfQ1RSTC1GKgorQ1RSTC1YIENUUkwtRgkJU2VhcmNoIGZvciB0aGUgZmlyc3QgZmlsZSBuYW1lIHRoYXQgc3RhcnRzIHdpdGggdGhlCisJCQlzYW1lIGNoYXJhY3RlcnMgYXMgYmVmb3JlIHRoZSBjdXJzb3IuICBUaGUgbWF0Y2hpbmcKKwkJCWZpbGUgbmFtZSBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLgorCQkJQWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGFuZCBjaGFyYWN0ZXJzIGluICdpc2ZuYW1lJworCQkJYXJlIHVzZWQgdG8gZGVjaWRlIHdoaWNoIGNoYXJhY3RlcnMgYXJlIGluY2x1ZGVkIGluCisJCQl0aGUgZmlsZSBuYW1lLiAgTm90ZTogdGhlICdwYXRoJyBvcHRpb24gaXMgbm90IHVzZWQKKwkJCWhlcmUgKHlldCkuCisJQ1RSTC1GCW9yCisJQ1RSTC1OCQlTZWFyY2ggZm9yd2FyZHMgZm9yIG5leHQgbWF0Y2hpbmcgZmlsZSBuYW1lLiAgVGhpcworCQkJZmlsZSBuYW1lIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBmaWxlIG5hbWUuCisKKwlDVFJMLVAJCVNlYXJjaCBiYWNrd2FyZCBmb3IgcHJldmlvdXMgbWF0Y2hpbmcgZmlsZSBuYW1lLgorCQkJVGhpcyBmaWxlIG5hbWUgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIGZpbGUKKwkJCW5hbWUuCisKKworQ29tcGxldGluZyBkZWZpbml0aW9ucyBvciBtYWNyb3MJCQkqY29tcGwtZGVmaW5lKgorCitUaGUgJ2RlZmluZScgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBhIGxpbmUgdGhhdCBjb250YWlucyBhIGRlZmluaXRpb24uCitUaGUgJ2luY2x1ZGUnIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgYSBsaW5lIHRoYXQgY29udGFpbnMgYW4gaW5jbHVkZSBmaWxlCituYW1lLiAgVGhlICdwYXRoJyBvcHRpb24gaXMgdXNlZCB0byBzZWFyY2ggZm9yIGluY2x1ZGUgZmlsZXMuCisKKwkJCQkJCQkqaV9DVFJMLVhfQ1RSTC1EKgorQ1RSTC1YIENUUkwtRAkJU2VhcmNoIGluIHRoZSBjdXJyZW50IGFuZCBpbmNsdWRlZCBmaWxlcyBmb3IgdGhlCisJCQlmaXJzdCBkZWZpbml0aW9uIChvciBtYWNybykgbmFtZSB0aGF0IHN0YXJ0cyB3aXRoCisJCQl0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIGJlZm9yZSB0aGUgY3Vyc29yLiAgVGhlIGZvdW5kCisJCQlkZWZpbml0aW9uIG5hbWUgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4KKwlDVFJMLUQJb3IKKwlDVFJMLU4JCVNlYXJjaCBmb3J3YXJkcyBmb3IgbmV4dCBtYXRjaGluZyBtYWNybyBuYW1lLiAgVGhpcworCQkJbWFjcm8gbmFtZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcgbWFjcm8KKwkJCW5hbWUuCisKKwlDVFJMLVAJCVNlYXJjaCBiYWNrd2FyZCBmb3IgcHJldmlvdXMgbWF0Y2hpbmcgbWFjcm8gbmFtZS4KKwkJCVRoaXMgbWFjcm8gbmFtZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcgbWFjcm8KKwkJCW5hbWUuCisKKwlDVFJMLVggQ1RSTC1ECUZ1cnRoZXIgdXNlIG9mIENUUkwtWCBDVFJMLUQgd2lsbCBjb3B5IHRoZSB3b3JkcworCQkJZm9sbG93aW5nIHRoZSBwcmV2aW91cyBleHBhbnNpb24gaW4gb3RoZXIgY29udGV4dHMKKwkJCXVubGVzcyBhIGRvdWJsZSBDVFJMLVggaXMgdXNlZC4KKworCitDb21wbGV0aW5nIFZpbSBjb21tYW5kcwkJCQkJKmNvbXBsLXZpbSoKKworQ29tcGxldGlvbiBpcyBjb250ZXh0LXNlbnNpdGl2ZS4gIEl0IHdvcmtzIGxpa2Ugb24gdGhlIENvbW1hbmQtbGluZS4gIEl0Citjb21wbGV0ZXMgYW4gRXggY29tbWFuZCBhcyB3ZWxsIGFzIGl0cyBhcmd1bWVudHMuCisKKwkJCQkJCQkqaV9DVFJMLVhfQ1RSTC1WKgorQ1RSTC1YIENUUkwtVgkJR3Vlc3Mgd2hhdCBraW5kIG9mIGl0ZW0gaXMgaW4gZnJvbnQgb2YgdGhlIGN1cnNvciBhbmQKKwkJCWZpbmQgdGhlIGZpcnN0IG1hdGNoIGZvciBpdC4KKwkJCU5vdGU6IFdoZW4gQ1RSTC1WIGlzIG1hcHBlZCB5b3UgY2FuIG9mdGVuIHVzZSBDVFJMLVEKKwkJCWluc3RlYWQgfGlfQ1RSTC1RfC4KKwlDVFJMLVYJb3IKKwlDVFJMLU4JCVNlYXJjaCBmb3J3YXJkcyBmb3IgbmV4dCBtYXRjaC4gIFRoaXMgbWF0Y2ggcmVwbGFjZXMKKwkJCXRoZSBwcmV2aW91cyBvbmUuCisKKwlDVFJMLVAJCVNlYXJjaCBiYWNrd2FyZCBmb3IgcHJldmlvdXMgbWF0Y2guICBUaGlzIG1hdGNoCisJCQlyZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLgorCisJQ1RSTC1YIENUUkwtVglGdXJ0aGVyIHVzZSBvZiBDVFJMLVggQ1RSTC1WIHdpbGwgZG8gdGhlIHNhbWUgYXMKKwkJCUNUUkwtVi4gIFRoaXMgYWxsb3dzIG1hcHBpbmcgYSBrZXkgdG8gZG8gVmltIGNvbW1hbmQKKwkJCWNvbXBsZXRpb24sIGZvciBleGFtcGxlOiA+CisJCQkJOmltYXAgPFRhYj4gPEMtWD48Qy1WPgorCitDb21wbGV0aW5nIGtleXdvcmRzIGZyb20gZGlmZmVyZW50IHNvdXJjZXMJCSpjb21wbC1nZW5lcmljKgorCisJCQkJCQkJKmlfQ1RSTC1OKgorQ1RSTC1OCQkJRmluZCBuZXh0IG1hdGNoIGZvciB3b3JkcyB0aGF0IHN0YXJ0IHdpdGggdGhlCisJCQlrZXl3b3JkIGluIGZyb250IG9mIHRoZSBjdXJzb3IsIGxvb2tpbmcgaW4gcGxhY2VzCisJCQlzcGVjaWZpZWQgd2l0aCB0aGUgJ2NvbXBsZXRlJyBvcHRpb24uICBUaGUgZm91bmQKKwkJCWtleXdvcmQgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4KKworCQkJCQkJCSppX0NUUkwtUCoKK0NUUkwtUAkJCUZpbmQgcHJldmlvdXMgbWF0Y2ggZm9yIHdvcmRzIHRoYXQgc3RhcnQgd2l0aCB0aGUKKwkJCWtleXdvcmQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvciwgbG9va2luZyBpbiBwbGFjZXMKKwkJCXNwZWNpZmllZCB3aXRoIHRoZSAnY29tcGxldGUnIG9wdGlvbi4gIFRoZSBmb3VuZAorCQkJa2V5d29yZCBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLgorCisJQ1RSTC1OCQlTZWFyY2ggZm9yd2FyZCBmb3IgbmV4dCBtYXRjaGluZyBrZXl3b3JkLiAgVGhpcworCQkJa2V5d29yZCByZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcga2V5d29yZC4KKworCUNUUkwtUAkJU2VhcmNoIGJhY2t3YXJkcyBmb3IgbmV4dCBtYXRjaGluZyBrZXl3b3JkLiAgVGhpcworCQkJa2V5d29yZCByZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcga2V5d29yZC4KKworCUNUUkwtWCBDVFJMLU4gb3IKKwlDVFJMLVggQ1RSTC1QCUZ1cnRoZXIgdXNlIG9mIENUUkwtWCBDVFJMLU4gb3IgQ1RSTC1YIENUUkwtUCB3aWxsCisJCQljb3B5IHRoZSB3b3JkcyBmb2xsb3dpbmcgdGhlIHByZXZpb3VzIGV4cGFuc2lvbiBpbgorCQkJb3RoZXIgY29udGV4dHMgdW5sZXNzIGEgZG91YmxlIENUUkwtWCBpcyB1c2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIEluc2VydCBtb2RlIGNvbW1hbmRzCQkJCQkqaW5zZXJ0aW5nKgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGluc2VydCBuZXcgdGV4dCBpbnRvIHRoZSBidWZmZXIuICBUaGV5CitjYW4gYWxsIGJlIHVuZG9uZSBhbmQgcmVwZWF0ZWQgd2l0aCB0aGUgIi4iIGNvbW1hbmQuCisKKwkJCQkJCQkqYSoKK2EJCQlBcHBlbmQgdGV4dCBhZnRlciB0aGUgY3Vyc29yIFtjb3VudF0gdGltZXMuICBJZiB0aGUKKwkJCWN1cnNvciBpcyBpbiB0aGUgZmlyc3QgY29sdW1uIG9mIGFuIGVtcHR5IGxpbmUgSW5zZXJ0CisJCQlzdGFydHMgdGhlcmUuICBCdXQgbm90IHdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQhCisKKwkJCQkJCQkqQSoKK0EJCQlBcHBlbmQgdGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIFtjb3VudF0gdGltZXMuCisKKzxpbnNlcnQ+CW9yCQkJCSppKiAqaW5zZXJ0KiAqPEluc2VydD4qCitpCQkJSW5zZXJ0IHRleHQgYmVmb3JlIHRoZSBjdXJzb3IgW2NvdW50XSB0aW1lcy4KKwkJCVdoZW4gdXNpbmcgQ1RSTC1PIGluIEluc2VydCBtb2RlIHxpX0NUUkwtT3wgdGhlIGNvdW50CisJCQlpcyBub3Qgc3VwcG9ydGVkLgorCisJCQkJCQkJKkkqCitJCQkJSW5zZXJ0IHRleHQgYmVmb3JlIHRoZSBmaXJzdCBub24tYmxhbmsgaW4gdGhlIGxpbmUKKwkJCVtjb3VudF0gdGltZXMuCisKKwkJCQkJCQkqZ0kqCitnSQkJCUluc2VydCB0ZXh0IGluIGNvbHVtbiAxIFtjb3VudF0gdGltZXMuICB7bm90IGluIFZpfQorCisJCQkJCQkJKmdpKgorZ2kJCQlJbnNlcnQgdGV4dCBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyB3aGVyZSBJbnNlcnQgbW9kZQorCQkJd2FzIHN0b3BwZWQgbGFzdCB0aW1lIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KKwkJCVRoaXMgdXNlcyB0aGUgfCdefCBtYXJrLiAgSXQncyBkaWZmZXJlbnQgZnJvbSAiYF5pIgorCQkJd2hlbiB0aGUgbWFyayBpcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUuCisJCQlUaGUgcG9zaXRpb24gaXMgY29ycmVjdGVkIGZvciBpbnNlcnRlZC9kZWxldGVkIGxpbmVzLAorCQkJYnV0IE5PVCBmb3IgaW5zZXJ0ZWQvZGVsZXRlZCBjaGFyYWN0ZXJzLgorCQkJV2hlbiB0aGUgfDprZWVwanVtcHN8IGNvbW1hbmQgbW9kaWZpZXIgaXMgdXNlZCB0aGUgfCdefAorCQkJbWFyayB3b250IGJlIGNoYW5nZWQuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKm8qCitvCQkJQmVnaW4gYSBuZXcgbGluZSBiZWxvdyB0aGUgY3Vyc29yIGFuZCBpbnNlcnQgdGV4dCwKKwkJCXJlcGVhdCBbY291bnRdIHRpbWVzLiAge1ZpOiBibGFuayBbY291bnRdIHNjcmVlbgorCQkJbGluZXN9CisKKwkJCQkJCQkqTyoKK08JCQlCZWdpbiBhIG5ldyBsaW5lIGFib3ZlIHRoZSBjdXJzb3IgYW5kIGluc2VydCB0ZXh0LAorCQkJcmVwZWF0IFtjb3VudF0gdGltZXMuICB7Vmk6IGJsYW5rIFtjb3VudF0gc2NyZWVuCisJCQlsaW5lc30KKworVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gc3RhcnQgaW5zZXJ0aW5nIHRleHQuICBZb3UgY2FuIGVuZCBpbnNlcnQgbW9kZSB3aXRoCis8RXNjPi4gIFNlZSB8bW9kZS1pbnMtcmVwbHwgZm9yIHRoZSBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gSW5zZXJ0IG1vZGUuCitUaGUgZWZmZWN0IG9mIFtjb3VudF0gdGFrZXMgcGxhY2UgYWZ0ZXIgSW5zZXJ0IG1vZGUgaXMgZXhpdGVkLgorCitXaGVuICdhdXRvaW5kZW50JyBpcyBvbiwgdGhlIGluZGVudCBmb3IgYSBuZXcgbGluZSBpcyBvYnRhaW5lZCBmcm9tIHRoZQorcHJldmlvdXMgbGluZS4gIFdoZW4gJ3NtYXJ0aW5kZW50JyBvciAnY2luZGVudCcgaXMgb24sIHRoZSBpbmRlbnQgZm9yIGEgbGluZQoraXMgYXV0b21hdGljYWxseSBhZGp1c3RlZCBmb3IgQyBwcm9ncmFtcy4KKworJ3RleHR3aWR0aCcgY2FuIGJlIHNldCB0byB0aGUgbWF4aW11bSB3aWR0aCBmb3IgYSBsaW5lLiAgV2hlbiBhIGxpbmUgYmVjb21lcwordG9vIGxvbmcgd2hlbiBhcHBlbmRpbmcgY2hhcmFjdGVycyBhIGxpbmUgYnJlYWsgaXMgYXV0b21hdGljYWxseSBpbnNlcnRlZC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzkuIEV4IGluc2VydCBjb21tYW5kcwkJCQkJKmluc2VydGluZy1leCoKKworCQkJCQkJCSo6YSogKjphcHBlbmQqCis6e3JhbmdlfWFbcHBlbmRdCUluc2VydCBzZXZlcmFsIGxpbmVzIG9mIHRleHQgYmVsb3cgdGhlIHNwZWNpZmllZAorCQkJbGluZS4gIElmIHRoZSB7cmFuZ2V9IGlzIG1pc3NpbmcsIHRoZSB0ZXh0IHdpbGwgYmUKKwkJCWluc2VydGVkIGFmdGVyIHRoZSBjdXJyZW50IGxpbmUuCisKKwkJCQkJCQkqOmkqICo6aW4qICo6aW5zZXJ0KgorOntyYW5nZX1pW25zZXJ0XQlJbnNlcnQgc2V2ZXJhbCBsaW5lcyBvZiB0ZXh0IGFib3ZlIHRoZSBzcGVjaWZpZWQKKwkJCWxpbmUuICBJZiB0aGUge3JhbmdlfSBpcyBtaXNzaW5nLCB0aGUgdGV4dCB3aWxsIGJlCisJCQlpbnNlcnRlZCBiZWZvcmUgdGhlIGN1cnJlbnQgbGluZS4KKworVGhlc2UgdHdvIGNvbW1hbmRzIHdpbGwga2VlcCBvbiBhc2tpbmcgZm9yIGxpbmVzLCB1bnRpbCB5b3UgdHlwZSBhIGxpbmUKK2NvbnRhaW5pbmcgb25seSBhICIuIi4gIFdhdGNoIG91dCBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCBhIGJhY2tzbGFzaCwgc2VlCit8bGluZS1jb250aW51YXRpb258LgorTk9URTogIjphcHBlbmQiIGFuZCAiOmluc2VydCIgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBiZXR3ZWVuICI6aWYiIGFuZAorIjplbmRpZiIuCisKKwkJCQkJCQkqOnN0YXJ0KiAqOnN0YXJ0aW5zZXJ0KgorOnN0YXJbdGluc2VydF1bIV0JU3RhcnQgSW5zZXJ0IG1vZGUganVzdCBhZnRlciBleGVjdXRpbmcgdGhpcyBjb21tYW5kLgorCQkJV29ya3MgbGlrZSB0eXBpbmcgImkiIGluIE5vcm1hbCBtb2RlLiAgV2hlbiB0aGUgISBpcworCQkJaW5jbHVkZWQgaXQgd29ya3MgbGlrZSAiQSIsIGFwcGVuZCB0byB0aGUgbGluZS4KKwkJCU90aGVyd2lzZSBpbnNlcnRpb24gc3RhcnRzIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24uCisJCQlOb3RlIHRoYXQgd2hlbiB1c2luZyB0aGlzIGNvbW1hbmQgaW4gYSBmdW5jdGlvbiBvcgorCQkJc2NyaXB0LCB0aGUgaW5zZXJ0aW9uIG9ubHkgc3RhcnRzIGFmdGVyIHRoZSBmdW5jdGlvbgorCQkJb3Igc2NyaXB0IGlzIGZpbmlzaGVkLgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK2V4X2V4dHJhCisJCQlmZWF0dXJlfQorCisJCQkJCQkJKjpzdG9waSogKjpzdG9waW5zZXJ0KgorOnN0b3BpW25zZXJ0XQkJU3RvcCBJbnNlcnQgbW9kZSBhcyBzb29uIGFzIHBvc3NpYmxlLiAgV29ya3MgbGlrZQorCQkJdHlwaW5nIDxFc2M+IGluIEluc2VydCBtb2RlLgorCQkJQ2FuIGJlIHVzZWQgaW4gYW4gYXV0b2NvbW1hbmQsIGV4YW1wbGU6ID4KKwkJCQk6YXUgQnVmRW50ZXIgc2NyYXRjaCBzdG9waW5zZXJ0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTAuIEluc2VydGluZyBhIGZpbGUJCQkJCSppbnNlcnRpbmctZmlsZSoKKworCQkJCQkJCSo6ciogKjpyZSogKjpyZWFkKgorOnJbZWFkXSBbbmFtZV0JCUluc2VydCB0aGUgZmlsZSBbbmFtZV0gKGRlZmF1bHQ6IGN1cnJlbnQgZmlsZSkgYmVsb3cKKwkJCXRoZSBjdXJzb3IuCisKKzp7cmFuZ2V9cltlYWRdIFtuYW1lXQlJbnNlcnQgdGhlIGZpbGUgW25hbWVdIChkZWZhdWx0OiBjdXJyZW50IGZpbGUpIGJlbG93CisJCQl0aGUgc3BlY2lmaWVkIGxpbmUuCisKKwkJCQkJCQkqOnIhKiAqOnJlYWQhKgorOnJbZWFkXSAhe2NtZH0JCUV4ZWN1dGUge2NtZH0gYW5kIGluc2VydCBpdHMgc3RhbmRhcmQgb3V0cHV0IGJlbG93CisJCQl0aGUgY3Vyc29yLiAgQSB0ZW1wb3JhcnkgZmlsZSBpcyB1c2VkIHRvIHN0b3JlIHRoZQorCQkJb3V0cHV0IG9mIHRoZSBjb21tYW5kIHdoaWNoIGlzIHRoZW4gcmVhZCBpbnRvIHRoZQorCQkJYnVmZmVyLiAgJ3NoZWxscmVkaXInIGlzIHVzZWQgdG8gc2F2ZSB0aGUgb3V0cHV0IG9mCisJCQl0aGUgY29tbWFuZCwgd2hpY2ggY2FuIGJlIHNldCB0byBpbmNsdWRlIHN0ZGVyciBvcgorCQkJbm90LiAge2NtZH0gaXMgZXhlY3V0ZWQgbGlrZSB3aXRoICI6IXtjbWR9IiwgYW55ICchJworCQkJaXMgcmVwbGFjZWQgd2l0aCB0aGUgcHJldmlvdXMgY29tbWFuZCB8OiF8LgorCitUaGVzZSBjb21tYW5kcyBpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSwgb3IgdGhlIG91dHB1dCBvZiBhIGNvbW1hbmQsCitpbnRvIHRoZSBidWZmZXIuICBUaGV5IGNhbiBiZSB1bmRvbmUuICBUaGV5IGNhbm5vdCBiZSByZXBlYXRlZCB3aXRoIHRoZSAiLiIKK2NvbW1hbmQuICBUaGV5IHdvcmsgb24gYSBsaW5lIGJhc2lzLCBpbnNlcnRpb24gc3RhcnRzIGJlbG93IHRoZSBsaW5lIGluIHdoaWNoCit0aGUgY3Vyc29yIGlzLCBvciBiZWxvdyB0aGUgc3BlY2lmaWVkIGxpbmUuICBUbyBpbnNlcnQgdGV4dCBhYm92ZSB0aGUgZmlyc3QKK2xpbmUgdXNlIHRoZSBjb21tYW5kICI6MHIge25hbWV9Ii4KKworQWZ0ZXIgdGhlICI6cmVhZCIgY29tbWFuZCwgdGhlIGN1cnNvciBpcyBsZWZ0IG9uIHRoZSBmaXJzdCBub24tYmxhbmsgaW4gdGhlCitmaXJzdCBuZXcgbGluZS4gIFVubGVzcyBpbiBFeCBtb2RlLCB0aGVuIHRoZSBjdXJzb3IgaXMgbGVmdCBvbiB0aGUgbGFzdCBuZXcKK2xpbmUgKHNvcnJ5LCB0aGlzIGlzIFZpIGNvbXBhdGlibGUpLgorCitJZiBhIGZpbGUgbmFtZSBpcyBnaXZlbiB3aXRoICI6ciIsIGl0IGJlY29tZXMgdGhlIGFsdGVybmF0ZSBmaWxlLiAgVGhpcyBjYW4gYmUKK3VzZWQsIGZvciBleGFtcGxlLCB3aGVuIHlvdSB3YW50IHRvIGVkaXQgdGhhdCBmaWxlIGluc3RlYWQ6ICI6ZSEgIyIuICBUaGlzIGNhbgorYmUgc3dpdGNoZWQgb2ZmIGJ5IHJlbW92aW5nIHRoZSAnYScgZmxhZyBmcm9tIHRoZSAnY3BvcHRpb25zJyBvcHRpb24uCisKKwkJCQkJCQkqZmlsZS1yZWFkKgorVGhlICdmaWxlZm9ybWF0JyBvcHRpb24gc2V0cyB0aGUgPEVPTD4gc3R5bGUgZm9yIGEgZmlsZToKKydmaWxlZm9ybWF0JyAgICBjaGFyYWN0ZXJzCSAgIG5hbWUJCQkJfgorICAiZG9zIgkJPENSPjxOTD4gb3IgPE5MPiAgIERPUyBmb3JtYXQKKyAgInVuaXgiCTxOTD4JCSAgIFVuaXggZm9ybWF0CisgICJtYWMiCQk8Q1I+CQkgICBNYWMgZm9ybWF0CitQcmV2aW91c2x5ICd0ZXh0bW9kZScgd2FzIHVzZWQuICBJdCBpcyBvYnNvbGV0ZSBub3cuCisKK0lmICdmaWxlZm9ybWF0JyBpcyAiZG9zIiwgYSA8Q1I+IGluIGZyb250IG9mIGFuIDxOTD4gaXMgaWdub3JlZCBhbmQgYSBDVFJMLVoKK2F0IHRoZSBlbmQgb2YgdGhlIGZpbGUgaXMgaWdub3JlZC4KKworSWYgJ2ZpbGVmb3JtYXQnIGlzICJtYWMiLCBhIDxOTD4gaW4gdGhlIGZpbGUgaXMgaW50ZXJuYWxseSByZXByZXNlbnRlZCBieSBhCis8Q1I+LiAgVGhpcyBpcyB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBhIDxOTD4gd2hpY2ggaXMgdXNlZCB0byByZXByZXNlbnQgYQorPE5VTD4uICBTZWUgfENSLXVzZWQtZm9yLU5MfC4KKworSWYgdGhlICdmaWxlZm9ybWF0cycgb3B0aW9uIGlzIG5vdCBlbXB0eSBWaW0gdHJpZXMgdG8gcmVjb2duaXplIHRoZSB0eXBlIG9mCis8RU9MPiAoc2VlIHxmaWxlLWZvcm1hdHN8KS4gIEhvd2V2ZXIsIHRoZSAnZmlsZWZvcm1hdCcgb3B0aW9uIHdpbGwgbm90IGJlCitjaGFuZ2VkLCB0aGUgZGV0ZWN0ZWQgZm9ybWF0IGlzIG9ubHkgdXNlZCB3aGlsZSByZWFkaW5nIHRoZSBmaWxlLgorQSBzaW1pbGFyIHRoaW5nIGhhcHBlbnMgd2l0aCAnZmlsZWVuY29kaW5ncycuCisKK09uIG5vbi1NUy1ET1MsIFdpbjMyLCBhbmQgT1MvMiBzeXN0ZW1zIHRoZSBtZXNzYWdlICJbZG9zIGZvcm1hdF0iIGlzIHNob3duIGlmCithIGZpbGUgaXMgcmVhZCBpbiBET1MgZm9ybWF0LCB0byByZW1pbmQgeW91IHRoYXQgc29tZXRoaW5nIHVudXN1YWwgaXMgZG9uZS4KK09uIE1hY2ludG9zaCwgTVMtRE9TLCBXaW4zMiwgYW5kIE9TLzIgdGhlIG1lc3NhZ2UgIlt1bml4IGZvcm1hdF0iIGlzIHNob3duIGlmCithIGZpbGUgaXMgcmVhZCBpbiBVbml4IGZvcm1hdC4KK09uIG5vbi1NYWNpbnRvc2ggc3lzdGVtcywgdGhlIG1lc3NhZ2UgIltNYWMgZm9ybWF0XSIgaXMgc2hvd24gaWYgYSBmaWxlIGlzCityZWFkIGluIE1hYyBmb3JtYXQuCisKK0FuIGV4YW1wbGUgb24gaG93IHRvIHVzZSAiOnIgISI6ID4KKwk6ciAhdXVlbmNvZGUgYmluZmlsZSBiaW5maWxlCitUaGlzIGNvbW1hbmQgcmVhZHMgImJpbmZpbGUiLCB1dWVuY29kZXMgaXQgYW5kIHJlYWRzIGl0IGludG8gdGhlIGN1cnJlbnQKK2J1ZmZlci4gIFVzZWZ1bCB3aGVuIHlvdSBhcmUgZWRpdGluZyBlLW1haWwgYW5kIHdhbnQgdG8gaW5jbHVkZSBhIGJpbmFyeQorZmlsZS4KKworCQkJCQkJCSpyZWFkLW1lc3NhZ2VzKgorV2hlbiByZWFkaW5nIGEgZmlsZSBWaW0gd2lsbCBkaXNwbGF5IGEgbWVzc2FnZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWFkCitmaWxlLiAgSW4gdGhlIHRhYmxlIGlzIGFuIGV4cGxhbmF0aW9uIGZvciBzb21lIG9mIHRoZSBpdGVtcy4gIFRoZSBvdGhlcnMgYXJlCitzZWxmIGV4cGxhbmF0b3J5LiAgVXNpbmcgdGhlIGxvbmcgb3IgdGhlIHNob3J0IHZlcnNpb24gZGVwZW5kcyBvbiB0aGUKKydzaG9ydG1lc3MnIG9wdGlvbi4KKworCWxvbmcJCXNob3J0CQltZWFuaW5nIH4KKwlbcmVhZG9ubHldCXtST30JCXRoZSBmaWxlIGlzIHdyaXRlIHByb3RlY3RlZAorCVtmaWZvL3NvY2tldF0JCQl1c2luZyBhIHN0cmVhbQorCVtmaWZvXQkJCQl1c2luZyBhIGZpZm8gc3RyZWFtCisJW3NvY2tldF0JCQl1c2luZyBhIHNvY2tldCBzdHJlYW0KKwlbQ1IgbWlzc2luZ10JCQlyZWFkaW5nIHdpdGggImRvcyIgJ2ZpbGVmb3JtYXQnIGFuZCBhCisJCQkJCU5MIHdpdGhvdXQgYSBwcmVjZWRpbmcgQ1Igd2FzIGZvdW5kLgorCVtOTCBmb3VuZF0JCQlyZWFkaW5nIHdpdGggIm1hYyIgJ2ZpbGVmb3JtYXQnIGFuZCBhCisJCQkJCU5MIHdhcyBmb3VuZCAoY291bGQgYmUgInVuaXgiIGZvcm1hdCkKKwlbbG9uZyBsaW5lcyBzcGxpdF0JCWF0IGxlYXN0IG9uZSBsaW5lIHdhcyBzcGxpdCBpbiB0d28KKwlbTk9UIGNvbnZlcnRlZF0JCQljb252ZXJzaW9uIGZyb20gJ2ZpbGVlbmNvZGluZycgdG8KKwkJCQkJJ2VuY29kaW5nJyB3YXMgZGVzaXJlZCBidXQgbm90CisJCQkJCXBvc3NpYmxlCisJW2NvbnZlcnRlZF0JCQljb252ZXJzaW9uIGZyb20gJ2ZpbGVlbmNvZGluZycgdG8KKwkJCQkJJ2VuY29kaW5nJyBkb25lCisJW2NyeXB0ZWRdCQkJZmlsZSB3YXMgZGVjcnlwdGVkCisJW1JFQUQgRVJST1JTXQkJCW5vdCBhbGwgb2YgdGhlIGZpbGUgY291bGQgYmUgcmVhZAorCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9pbnRyby50eHQgYi9ydW50aW1lL2RvYy9pbnRyby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzYWM2ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2ludHJvLnR4dApAQCAtMCwwICsxLDg5MCBAQAorKmludHJvLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1biAxMgorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK0ludHJvZHVjdGlvbiB0byBWaW0JCQkJCSpyZWYqICpyZWZlcmVuY2UqCisKKzEuIEludHJvZHVjdGlvbgkJCXxpbnRyb3wKKzIuIFZpbSBvbiB0aGUgaW50ZXJuZXQJCXxpbnRlcm5ldHwKKzMuIENyZWRpdHMJCQl8Y3JlZGl0c3wKKzQuIE5vdGF0aW9uCQkJfG5vdGF0aW9ufAorNS4gTW9kZXMsIGludHJvZHVjdGlvbgkJfHZpbS1tb2Rlcy1pbnRyb3wKKzYuIFN3aXRjaGluZyBmcm9tIG1vZGUgdG8gbW9kZQl8bW9kZS1zd2l0Y2hpbmd8Cis3LiBUaGUgd2luZG93IGNvbnRlbnRzCQl8d2luZG93LWNvbnRlbnRzfAorOC4gRGVmaW5pdGlvbnMJCQl8ZGVmaW5pdGlvbnN8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW50cm9kdWN0aW9uCQkJCQkJKmludHJvKgorCitWaW0gc3RhbmRzIGZvciBWaSBJTXByb3ZlZC4gIEl0IHVzZWQgdG8gYmUgVmkgSU1pdGF0aW9uLCBidXQgdGhlcmUgYXJlIHNvIG1hbnkKK2ltcHJvdmVtZW50cyB0aGF0IGEgbmFtZSBjaGFuZ2Ugd2FzIGFwcHJvcHJpYXRlLiAgVmltIGlzIGEgdGV4dCBlZGl0b3Igd2hpY2gKK2luY2x1ZGVzIGFsbW9zdCBhbGwgdGhlIGNvbW1hbmRzIGZyb20gdGhlIFVuaXggcHJvZ3JhbSAiVmkiIGFuZCBhIGxvdCBvZiBuZXcKK29uZXMuICBJdCBpcyB2ZXJ5IHVzZWZ1bCBmb3IgZWRpdGluZyBwcm9ncmFtcyBhbmQgb3RoZXIgcGxhaW4gdGV4dC4KKyAgIEFsbCBjb21tYW5kcyBhcmUgZ2l2ZW4gd2l0aCB0aGUga2V5Ym9hcmQuICBUaGlzIGhhcyB0aGUgYWR2YW50YWdlIHRoYXQgeW91CitjYW4ga2VlcCB5b3VyIGZpbmdlcnMgb24gdGhlIGtleWJvYXJkIGFuZCB5b3VyIGV5ZXMgb24gdGhlIHNjcmVlbi4gIEZvciB0aG9zZQord2hvIHdhbnQgaXQsIHRoZXJlIGlzIG1vdXNlIHN1cHBvcnQgYW5kIGEgR1VJIHZlcnNpb24gd2l0aCBzY3JvbGxiYXJzIGFuZAorbWVudXMgKHNlZSB8Z3VpLnR4dHwpLgorCitBbiBvdmVydmlldyBvZiB0aGlzIG1hbnVhbCBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGUgImhlbHAudHh0IiwgfGhlbHAudHh0fC4KK0l0IGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHdpdGhpbiBWaW0gd2l0aCB0aGUgPEhlbHA+IG9yIDxGMT4ga2V5IGFuZCB3aXRoIHRoZQorfDpoZWxwfCBjb21tYW5kIChqdXN0IHR5cGUgIjpoZWxwIiwgd2l0aG91dCB0aGUgYmFycyBvciBxdW90ZXMpLgorICAgVGhlICdoZWxwZmlsZScgb3B0aW9uIGNhbiBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIGhlbHAgZmlsZSwgaW4gY2FzZSBpdAoraXMgbm90IGxvY2F0ZWQgaW4gdGhlIGRlZmF1bHQgcGxhY2UuICBZb3UgY2FuIGp1bXAgdG8gc3ViamVjdHMgbGlrZSB3aXRoIHRhZ3M6CitVc2UgQ1RSTC1dIHRvIGp1bXAgdG8gYSBzdWJqZWN0IHVuZGVyIHRoZSBjdXJzb3IsIHVzZSBDVFJMLVQgdG8ganVtcCBiYWNrLgorCitUaHJvdWdob3V0IHRoaXMgbWFudWFsIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpIGFuZCBWaW0gYXJlIG1lbnRpb25lZCBpbgorY3VybHkgYnJhY2VzLCBsaWtlIHRoaXM6IHtWaSBkb2VzIG5vdCBoYXZlIG9uLWxpbmUgaGVscH0uICBTZWUgfHZpX2RpZmYudHh0fAorZm9yIGEgc3VtbWFyeSBvZiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gYW5kIFZpLgorCitUaGlzIG1hbnVhbCByZWZlcnMgdG8gVmltIG9uIHZhcmlvdXMgbWFjaGluZXMuICBUaGVyZSBtYXkgYmUgc21hbGwgZGlmZmVyZW5jZXMKK2JldHdlZW4gZGlmZmVyZW50IGNvbXB1dGVycyBhbmQgdGVybWluYWxzLiAgQmVzaWRlcyB0aGUgcmVtYXJrcyBnaXZlbiBpbiB0aGlzCitkb2N1bWVudCwgdGhlcmUgaXMgYSBzZXBhcmF0ZSBkb2N1bWVudCBmb3IgZWFjaCBzdXBwb3J0ZWQgc3lzdGVtLCBzZWUKK3xzeXMtZmlsZS1saXN0fC4KKworVGhpcyBtYW51YWwgaXMgYSByZWZlcmVuY2UgZm9yIGFsbCB0aGUgVmltIGNvbW1hbmRzIGFuZCBvcHRpb25zLiAgVGhpcyBpcyBub3QKK2FuIGludHJvZHVjdGlvbiB0byB0aGUgdXNlIG9mIFZpIG9yIFZpbSwgaXQgZ2V0cyBhIGJpdCBjb21wbGljYXRlZCBoZXJlIGFuZAordGhlcmUuICBGb3IgYmVnaW5uZXJzLCB0aGVyZSBpcyBhIGhhbmRzLW9uIHx0dXRvcnwuICBUbyBsZWFybiB1c2luZyBWaW0sIHJlYWQKK3RoZSB1c2VyIG1hbnVhbCB8dXNyX3RvYy50eHR8LgorCisJCQkJCQkJKmJvb2sqCitUaGVyZSBhcmUgbWFueSBib29rcyBvbiBWaSB0aGF0IGNvbnRhaW4gYSBzZWN0aW9uIGZvciBiZWdpbm5lcnMuICBUaGVyZSBhcmUKK3R3byBib29rcyBJIGNhbiByZWNvbW1lbmQ6CisKKwkiVmltIC0gVmkgSW1wcm92ZWQiIGJ5IFN0ZXZlIE91YWxsaW5lCisKK1RoaXMgaXMgdGhlIHZlcnkgZmlyc3QgYm9vayBjb21wbGV0ZWx5IGRlZGljYXRlZCB0byBWaW0uICBJdCBpcyB2ZXJ5IGdvb2QgZm9yCitiZWdpbm5lcnMuICBUaGUgbW9zdCBvZnRlbiB1c2VkIGNvbW1hbmRzIGFyZSBleHBsYWluZWQgd2l0aCBwaWN0dXJlcyBhbmQKK2V4YW1wbGVzLiAgVGhlIGxlc3Mgb2Z0ZW4gdXNlZCBjb21tYW5kcyBhcmUgYWxzbyBleHBsYWluZWQsIHRoZSBtb3JlIGFkdmFuY2VkCitmZWF0dXJlcyBhcmUgc3VtbWFyaXplZC4gIFRoZXJlIGlzIGEgY29tcHJlaGVuc2l2ZSBpbmRleCBhbmQgYSBxdWljaworcmVmZXJlbmNlLiAgUGFydHMgb2YgdGhpcyBib29rIGhhdmUgYmVlbiBpbmNsdWRlZCBpbiB0aGUgdXNlciBtYW51YWwKK3xmcm9tYm9va3wuCitQdWJsaXNoZWQgYnkgTmV3IFJpZGVycyBQdWJsaXNoaW5nLiAgSVNCTjogMDczNTcxMDAxNQorRm9yIG1vcmUgaW5mb3JtYXRpb24gdHJ5IG9uZSBvZiB0aGVzZToKKwlodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy9jbGljazUuaHRtbAorCWh0dHA6Ly93d3cudmltLm9yZy9pY2NmL2NsaWNrNS5odG1sCisKKwkiTGVhcm5pbmcgdGhlIFZpIGVkaXRvciIgYnkgTGluZGEgTGFtYiBhbmQgQXJub2xkIFJvYmJpbnMKKworVGhpcyBpcyBhIGJvb2sgYWJvdXQgVmkgdGhhdCBpbmNsdWRlcyBhIGNoYXB0ZXIgb24gVmltIChpbiB0aGUgc2l4dGggZWRpdGlvbikuCitUaGUgZmlyc3Qgc3RlcHMgaW4gVmkgYXJlIGV4cGxhaW5lZCB2ZXJ5IHdlbGwuICBUaGUgY29tbWFuZHMgdGhhdCBWaW0gYWRkcyBhcmUKK29ubHkgYnJpZWZseSBtZW50aW9uZWQuICBUaGVyZSBpcyBhbHNvIGEgR2VybWFuIHRyYW5zbGF0aW9uLgorUHVibGlzaGVkIGJ5IE8nUmVpbGx5LiAgSVNCTjogMS01NjU5Mi00MjYtNi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBWaW0gb24gdGhlIGludGVybmV0CQkJCQkqaW50ZXJuZXQqCisKKwkJCSp3d3cqICpmYXEqICpGQVEqICpkaXN0cmlidXRpb24qICpkb3dubG9hZCoKK1RoZSBWaW0gcGFnZXMgY29udGFpbiB0aGUgbW9zdCByZWNlbnQgaW5mb3JtYXRpb24gYWJvdXQgVmltLiAgVGhleSBhbHNvCitjb250YWluIGxpbmtzIHRvIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIFZpbS4gIFRoZSBGQVEgaXMgYSBsaXN0IG9mCitGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucy4gIFJlYWQgdGhpcyBpZiB5b3UgaGF2ZSBwcm9ibGVtcy4KKworCVZJTSBob21lIHBhZ2U6CSAgaHR0cDovL3d3dy52aW0ub3JnLworCVZJTSBGQVE6CSAgaHR0cDovL3ZpbWRvYy5zZi5uZXQvCisJRG93bmxvYWRpbmc6CSAgZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS9NSVJST1JTCisKKworVXNlbmV0IE5ld3MgZ3JvdXAgd2hlcmUgVmltIGlzIGRpc2N1c3NlZDoJCSpuZXdzKiAqdXNlbmV0KgorCWNvbXAuZWRpdG9ycworVGhpcyBncm91cCBpcyBhbHNvIGZvciBvdGhlciBlZGl0b3JzLiAgSWYgeW91IHdyaXRlIGFib3V0IFZpbSwgZG9uJ3QgZm9yZ2V0IHRvCittZW50aW9uIHRoYXQuCisKKwkJCQkJCSptYWlsLWxpc3QqICptYWlsbGlzdCoKK1RoZXJlIGFyZSBzZXZlcmFsIG1haWxpbmcgbGlzdHMgZm9yIFZpbToKKzx2aW1AdmltLm9yZz4KKwlGb3IgZGlzY3Vzc2lvbnMgYWJvdXQgdXNpbmcgZXhpc3RpbmcgdmVyc2lvbnMgb2YgVmltOiBVc2VmdWwgbWFwcGluZ3MsCisJcXVlc3Rpb25zLCBhbnN3ZXJzLCB3aGVyZSB0byBnZXQgYSBzcGVjaWZpYyB2ZXJzaW9uLCBldGMuCis8dmltLWRldkB2aW0ub3JnPgkJCQkqdmltLWRldiogKnZpbWRldioKKwlGb3IgZGlzY3Vzc2lvbnMgYWJvdXQgY2hhbmdpbmcgVmltOiBOZXcgZmVhdHVyZXMsIHBvcnRpbmcsIHBhdGNoZXMsCisJYmV0YS10ZXN0IHZlcnNpb25zLCBldGMuCis8dmltLWFubm91bmNlQHZpbS5vcmc+CQkJCSp2aW0tYW5ub3VuY2UqCisJQW5ub3VuY2VtZW50cyBhYm91dCBuZXcgdmVyc2lvbnMgb2YgVmltOyBhbHNvIGZvciBiZXRhLXRlc3QgdmVyc2lvbnMKKwlhbmQgcG9ydHMgdG8gZGlmZmVyZW50IHN5c3RlbXMuCis8dmltLW11bHRpYnl0ZUB2aW0ub3JnPgkJCQkqdmltLW11bHRpYnl0ZSoKKwlGb3IgZGlzY3Vzc2lvbnMgYWJvdXQgdXNpbmcgYW5kIGltcHJvdmluZyB0aGUgbXVsdGktYnl0ZSBhc3BlY3RzIG9mCisJVmltLgorPHZpbS1tYWNAdmltLm9yZz4JCQkJKnZpbS1tYWMqCisJRm9yIGRpc2N1c3Npb25zIGFib3V0IHVzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIE1hY2ludG9zaCB2ZXJzaW9uIG9mCisJVmltLgorCitTZWUgaHR0cDovL3d3dy52aW0ub3JnL21haWxsaXN0LnBocCBmb3IgdGhlIGxhdGVzdCBpbmZvcm1hdGlvbi4KKworTk9URToKKy0gWW91IGNhbiBvbmx5IHNlbmQgbWVzc2FnZXMgdG8gdGhlc2UgbGlzdHMgaWYgeW91IGhhdmUgc3Vic2NyaWJlZCEKKy0gWW91IG5lZWQgdG8gc2VuZCB0aGUgbWVzc2FnZXMgZnJvbSB0aGUgc2FtZSBsb2NhdGlvbiBhcyB3aGVyZSB5b3Ugc3Vic2NyaWJlZAorICBmcm9tICh0byBhdm9pZCBzcGFtIG1haWwpLgorLSBNYXhpbXVtIG1lc3NhZ2Ugc2l6ZSBpcyA0MDAwMCBjaGFyYWN0ZXJzLgorCisJCQkJCQkqc3Vic2NyaWJlLW1haWxsaXN0KgorSWYgeW91IHdhbnQgdG8gam9pbiwgc2VuZCBhIG1lc3NhZ2UgdG8KKwk8dmltLWhlbHBAdmltLm9yZz4KK01ha2Ugc3VyZSB0aGF0IHlvdXIgIkZyb206IiBhZGRyZXNzIGlzIGNvcnJlY3QuICBUaGVuIHRoZSBsaXN0IHNlcnZlciB3aWxsCitnaXZlIHlvdSBoZWxwIG9uIGhvdyB0byBzdWJzY3JpYmUuCisKK1lvdSBjYW4gcmV0cmlldmUgb2xkIG1lc3NhZ2VzIGZyb20gdGhlIG1haWxsaXN0IHNvZnR3YXJlLCBhbmQgYW4gaW5kZXggb2YKK21lc3NhZ2VzLiAgQXNrIHZpbS1oZWxwIGZvciBpbnN0cnVjdGlvbnMuCisKK0FyY2hpdmVzIGFyZSBrZXB0IGF0OgkJCQkqbWFpbGxpc3QtYXJjaGl2ZSoKK2h0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3ZpbQoraHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvdmltZGV2CitodHRwOi8vZ3JvdXBzLnlhaG9vLmNvbS9ncm91cC92aW1hbm5vdW5jZQoraHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvdmltLW11bHRpYnl0ZQoraHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvdmltLW1hYworCisKK0FkZGl0aW9uYWwgbWFpbGxpc3RzOgorCis8dmltLWZyQGNsdWIudm9pbGEuZnI+CQkJCSpmcmVuY2gtbWFpbGxpc3QqCisJVmltIGxpc3QgaW4gdGhlIEZyZW5jaCBsYW5ndWFnZS4gIFN1YnNjcmliZSBieSBzZW5kaW5nIGEgbWVzc2FnZSB0bworCQk8dmltLWZyLXN1YnNjcmliZUBjbHViLnZvaWxhLmZyPgorCU9yIGdvIHRvIGh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3ZpbS1mci4KKworCitCdWcgcmVwb3J0czoJCQkJKmJ1Z3MqICpidWctcmVwb3J0cyogKmJ1Z3JlcG9ydC52aW0qCisKK1NlbmQgYnVnIHJlcG9ydHMgdG86IFZpbSBidWdzIDxidWdzQHZpbS5vcmc+CitUaGlzIGlzIG5vdCBhIG1haWxsaXN0IGJ1dCB0aGUgbWVzc2FnZSBpcyByZWRpcmVjdGVkIHRvIHRoZSBWaW0gbWFpbnRhaW5lci4KK1BsZWFzZSBiZSBicmllZjsgYWxsIHRoZSB0aW1lIHRoYXQgaXMgc3BlbnQgb24gYW5zd2VyaW5nIG1haWwgaXMgc3VidHJhY3RlZAorZnJvbSB0aGUgdGltZSB0aGF0IGlzIHNwZW50IG9uIGltcHJvdmluZyBWaW0hICBBbHdheXMgZ2l2ZSBhIHJlcHJvZHVjaWJsZQorZXhhbXBsZSBhbmQgdHJ5IHRvIGZpbmQgb3V0IHdoaWNoIHNldHRpbmdzIG9yIG90aGVyIHRoaW5ncyBpbmZsdWVuY2UgdGhlCithcHBlYXJhbmNlIG9mIHRoZSBidWcuICBUcnkgZGlmZmVyZW50IG1hY2hpbmVzLCBpZiBwb3NzaWJsZS4gIFNlbmQgbWUgcGF0Y2hlcworaWYgeW91IGNhbiEKKworSW4gY2FzZSBvZiBkb3VidCwgdXNlOiA+CisgICA6c28gJFZJTVJVTlRJTUUvYnVncmVwb3J0LnZpbQorVGhpcyB3aWxsIGNyZWF0ZSBhIGZpbGUgImJ1Z3JlcG9ydC50eHQiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2l0aCBhIGxvdAorb2YgaW5mb3JtYXRpb24gb2YgeW91ciBlbnZpcm9ubWVudC4gIEJlZm9yZSBzZW5kaW5nIHRoaXMgb3V0LCBjaGVjayBpZiBpdAorZG9lc24ndCBjb250YWluIGFueSBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24hCisKKwkJCQkJCQkqZGVidWctdmltKgorV2hlbiBWaW0gY3Jhc2hlcyBpbiBvbmUgb2YgdGhlIHRlc3QgZmlsZXMsIGFuZCB5b3UgYXJlIHVzaW5nIGdjYyBmb3IKK2NvbXBpbGF0aW9uLCBoZXJlIGlzIHdoYXQgeW91IGNhbiBkbyB0byBmaW5kIG91dCBleGFjdGx5IHdoZXJlIFZpbSBjcmFzaGVzOgorCisxLiBDb21waWxlIFZpbSB3aXRoIHRoZSAiLWciIG9wdGlvbiAodGhlcmUgaXMgYSBsaW5lIGluIHRoZSBNYWtlZmlsZSBmb3IgdGhpcywKKyAgIHdoaWNoIHlvdSBjYW4gdW5jb21tZW50KS4KKworMi4gRXhlY3V0ZSB0aGVzZSBjb21tYW5kcyAocmVwbGFjZSAiMTEiIHdpdGggdGhlIHRlc3QgdGhhdCBmYWlscyk6ID4KKwljZCB0ZXN0ZGlyCisJZ2RiIC4uL3ZpbQorCXJ1biAtdSB1bml4LnZpbSAtVSBOT05FIC1zIGRvdGVzdC5pbiB0ZXN0MTEuaW4KKworMy4gQ2hlY2sgd2hlcmUgVmltIGNyYXNoZXMsIGdkYiBzaG91bGQgZ2l2ZSBhIG1lc3NhZ2UgZm9yIHRoaXMuCisKKzQuIEdldCBhIHN0YWNrIHRyYWNlIGZyb20gZ2RiIHdpdGggdGhpcyBjb21tYW5kOiA+CisJd2hlcmUKKzwgIFlvdSBjYW4gY2hlY2sgb3V0IGRpZmZlcmVudCBwbGFjZXMgaW4gdGhlIHN0YWNrIHRyYWNlIHdpdGg6ID4KKwlmcmFtZSAzCis8ICBSZXBsYWNlICIzIiB3aXRoIG9uZSBvZiB0aGUgbnVtYmVycyBpbiB0aGUgc3RhY2sgdHJhY2UuCisKKwkJCQkJCQkqeWVhci0yMDAwKiAqWTJLKgorU2luY2UgVmltIGludGVybmFsbHkgZG9lc24ndCB1c2UgZGF0ZXMgZm9yIGVkaXRpbmcsIHRoZXJlIGlzIG5vIHllYXIgMjAwMAorcHJvYmxlbSB0byB3b3JyeSBhYm91dC4gIFZpbSBkb2VzIHVzZSB0aGUgdGltZSBpbiB0aGUgZm9ybSBvZiBzZWNvbmRzIHNpbmNlCitKYW51YXJ5IDFzdCAxOTcwLiAgSXQgaXMgdXNlZCBmb3IgYSB0aW1lLXN0YW1wIGNoZWNrIG9mIHRoZSBlZGl0ZWQgZmlsZSBhbmQKK3RoZSBzd2FwIGZpbGUsIHdoaWNoIGlzIG5vdCBjcml0aWNhbCBhbmQgc2hvdWxkIG9ubHkgY2F1c2Ugd2FybmluZyBtZXNzYWdlcy4KKworVGhlcmUgbWlnaHQgYmUgYSB5ZWFyIDIwMzggcHJvYmxlbSwgd2hlbiB0aGUgc2Vjb25kcyBkb24ndCBmaXQgaW4gYSAzMiBiaXQgaW50Cithbnltb3JlLiAgVGhpcyBkZXBlbmRzIG9uIHRoZSBjb21waWxlciwgbGlicmFyaWVzIGFuZCBvcGVyYXRpbmcgc3lzdGVtLgorU3BlY2lmaWNhbGx5LCB0aW1lX3QgYW5kIHRoZSBjdGltZSgpIGZ1bmN0aW9uIGFyZSB1c2VkLiAgQW5kIHRoZSB0aW1lX3QgaXMKK3N0b3JlZCBpbiBmb3VyIGJ5dGVzIGluIHRoZSBzd2FwIGZpbGUuICBCdXQgdGhhdCdzIG9ubHkgdXNlZCBmb3IgcHJpbnRpbmcgYQorZmlsZSBkYXRlL3RpbWUgZm9yIHJlY292ZXJ5LCBpdCB3aWxsIG5ldmVyIGFmZmVjdCBub3JtYWwgZWRpdGluZy4KKworVGhlIFZpbSBzdHJmdGltZSgpIGZ1bmN0aW9uIGRpcmVjdGx5IHVzZXMgdGhlIHN0cmZ0aW1lKCkgc3lzdGVtIGZ1bmN0aW9uLgorbG9jYWx0aW1lKCkgdXNlcyB0aGUgdGltZSgpIHN5c3RlbSBmdW5jdGlvbi4gIGdldGZ0aW1lKCkgdXNlcyB0aGUgdGltZQorcmV0dXJuZWQgYnkgdGhlIHN0YXQoKSBzeXN0ZW0gZnVuY3Rpb24uICBJZiB5b3VyIHN5c3RlbSBsaWJyYXJpZXMgYXJlIHllYXIKKzIwMDAgY29tcGxpYW50LCBWaW0gaXMgdG9vLgorCitUaGUgdXNlciBtYXkgY3JlYXRlIHNjcmlwdHMgZm9yIFZpbSB0aGF0IHVzZSBleHRlcm5hbCBjb21tYW5kcy4gIFRoZXNlIG1pZ2h0CitpbnRyb2R1Y2UgWTJLIHByb2JsZW1zLCBidXQgdGhvc2UgYXJlIG5vdCByZWFsbHkgcGFydCBvZiBWaW0gaXRzZWxmLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIENyZWRpdHMJCQkJCQkqY3JlZGl0cyogKmF1dGhvcioKKworTW9zdCBvZiBWaW0gd2FzIHdyaXR0ZW4gYnkgQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4uCisKK1BhcnRzIG9mIHRoZSBkb2N1bWVudGF0aW9uIGNvbWUgZnJvbSBzZXZlcmFsIFZpIG1hbnVhbHMsIHdyaXR0ZW4gYnk6CisJVy5OLiBKb3kKKwlBbGFuIFAuVy4gSGV3ZXR0CisJTWFyayBIb3J0b24KKworVGhlIFZpbSBlZGl0b3IgaXMgYmFzZWQgb24gU3RldmllIGFuZCBpbmNsdWRlcyAoaWRlYXMgZnJvbSkgb3RoZXIgc29mdHdhcmUsCit3b3JrZWQgb24gYnkgdGhlIHBlb3BsZSBtZW50aW9uZWQgaGVyZS4gIE90aGVyIHBlb3BsZSBoZWxwZWQgYnkgc2VuZGluZyBtZQorcGF0Y2hlcywgc3VnZ2VzdGlvbnMgYW5kIGdpdmluZyBmZWVkYmFjayBhYm91dCB3aGF0IGlzIGdvb2QgYW5kIGJhZCBpbiBWaW0uCisKK1ZpbSB3b3VsZCBuZXZlciBoYXZlIGJlY29tZSB3aGF0IGl0IGlzIG5vdywgd2l0aG91dCB0aGUgaGVscCBvZiB0aGVzZSBwZW9wbGUhCisKKwlSb24gQWFyb24JCVdpbjMyIEdVSSBjaGFuZ2VzCisJWm9sdGFuIEFycGFkZmZ5CQl3b3JrIG9uIFZNUyBwb3J0CisJVG9ueSBBbmRyZXdzCQlTdGV2aWUKKwlHZXJ0IHZhbiBBbnR3ZXJwZW4JY2hhbmdlcyBmb3IgREpHUFAgb24gTVMtRE9TCisJQmVya2VsZXkgREIoMykJCWlkZWFzIGZvciBzd2FwIGZpbGUgaW1wbGVtZW50YXRpb24KKwlLZWl0aCBCb3N0aWMJCU52aQorCVdhbHRlciBCcmlzY29lCQlNYWtlZmlsZSB1cGRhdGVzLCB2YXJpb3VzIHBhdGNoZXMKKwlSYWxmIEJyb3duCQlTUEFXTk8gbGlicmFyeSBmb3IgTVMtRE9TCisJUm9iZXJ0IENvbG9uCQltYW55IHVzZWZ1bCByZW1hcmtzCisJTWFyY2luIERhbGVja2kJCUdUSysgR1VJIHBvcnQsIHRvb2xiYXIgaWNvbnMsIGdldHRleHQoKQorCUtheWhhbiBEZW1pcmVsCQlzZW50IG1lIG5ld3MgaW4gVWdhbmRhCisJQ2hyaXMgJiBKb2huIERvd25leQl4dmkgKGlkZWFzIGZvciBtdWx0aS13aW5kb3dzIHZlcnNpb24pCisJSGVuayBFbGJlcnMJCWZpcnN0IFZNUyBwb3J0CisJRXJpYyBGaXNjaGVyCQlNYWMgcG9ydCwgJ2NpbmRlbnQnLCBhbmQgb3RoZXIgaW1wcm92ZW1lbnRzCisJQmVuamkgRmlzaGVyCQlBbnN3ZXJpbmcgbG90cyBvZiB1c2VyIHF1ZXN0aW9ucworCUJpbGwgRm9zdGVyCQlBdGhlbmEgR1VJIHBvcnQKKwlMb2ljIEdyZW5pZQkJeHZpbSAoaWRlYXMgZm9yIG11bHRpIHdpbmRvd3MgdmVyc2lvbikKKwlTdmVuIEd1Y2tlcwkJVmltIHByb21vdG9yIGFuZCBwcmV2aW91cyBXV1cgcGFnZSBtYWludGFpbmVyCisJRGFycmVuIEhpZWJlcnQJCUV4dWJlcmFudCBjdGFncworCUJydWNlIEh1bnNha2VyCQlpbXByb3ZlbWVudHMgZm9yIFZNUyBwb3J0CisJQW5keSBLYWhuCQlDc2NvcGUgc3VwcG9ydCwgR1RLKyBHVUkgcG9ydAorCU9lemd1ZXIgS2VzaW0JCU1haW50YWluZXIgb2YgVmltIE1haWxpbmcgTGlzdHMKKwlBeGVsIEtpZWxob3JuCQl3b3JrIG9uIHRoZSBNYWNpbnRvc2ggcG9ydAorCVN0ZXZlIEtpcmtlbmRhbGwJRWx2aXMKKwlSb2dlciBLbm9iYmUJCW9yaWdpbmFsIHBvcnQgdG8gV2luZG93cyBOVAorCVNlcmdleSBMYXNrYXZ5CQlWaW0ncyBoZWxwIGZyb20gTW9zY293CisJRmVsaXggdm9uIExlaXRuZXIJTWFpbnRhaW5lciBvZiBWaW0gTWFpbGluZyBMaXN0cworCURhdmlkIExlb25hcmQJCVBvcnQgb2YgUHl0aG9uIGV4dGVuc2lvbnMgdG8gVW5peAorCUF2bmVyIExvdHRlbQkJRWRpdCBpbiByaWdodC10by1sZWZ0IHdpbmRvd3MKKwlGbGVtbWluZyBNYWRzZW4JCVgxMSBjbGllbnQtc2VydmVyLCB2YXJpb3VzIGZlYXR1cmVzIGFuZCBwYXRjaGVzCisJTWljcm9Tb2Z0CQlHYXZlIG1lIGEgY29weSBvZiBEZXZTdHVkaW8gdG8gY29tcGlsZSBWaW0gd2l0aAorCVBhdWwgTW9vcmUJCVB5dGhvbiBpbnRlcmZhY2UgZXh0ZW5zaW9ucywgbWFueSBwYXRjaGVzCisJS2F0c3VoaXRvIE5hZ2FubwlXb3JrIG9uIG11bHRpLWJ5dGUgdmVyc2lvbnMKKwlTdW5nLUh5dW4gTmFtCQlXb3JrIG9uIG11bHRpLWJ5dGUgdmVyc2lvbnMKKwlWaW5jZSBOZWdyaQkJV2luMzIgR1VJIGFuZCBnZW5lcmljIGNvbnNvbGUgZW5oYW5jZW1lbnRzCisJU3RldmUgT3VhbGxpbmUJCUF1dGhvciBvZiB0aGUgZmlyc3QgVmltIGJvb2sgfGZyb21ib29rfAorCUdlb3JnZSBWLiBSZWlsbHkJV2luMzIgcG9ydCwgV2luMzIgR1VJIHN0YXJ0LW9mZgorCVN0ZXBoZW4gUmllaG0JCWJ1ZyBjb2xsZWN0b3IKKwlTdGVmYW4gUm9lbWVyCQl2YXJpb3VzIHBhdGNoZXMgYW5kIGhlbHAgdG8gdXNlcnMKKwlSYWxmIFNjaGFuZGwJCUlCTSBPUy8zOTAgcG9ydAorCU9sYWYgU2VpYmVydAkJRElDRSBhbmQgQmVCb3ggdmVyc2lvbiwgcmVnZXhwIGltcHJvdmVtZW50cworCU1vcnRhemEgU2hpcmFuCQlGYXJzaSBwYXRjaGVzCisJUGV0ZXIgZGEgU2lsdmEJCXRlcm1saWIKKwlQYXVsIFNsb290bWFuCQlPUy8yIHBvcnQKKwlIZW5yeSBTcGVuY2VyCQlyZWd1bGFyIGV4cHJlc3Npb25zCisJRGFueSBTdC1BbWFudAkJTWFjaW50b3NoIHBvcnQKKwlUaW0gVGhvbXBzb24JCVN0ZXZpZQorCUcuIFIuIChGcmVkKSBXYWx0ZXIJU3RldmllCisJU3ZlbiBWZXJkb29sYWVnZQlQZXJsIGludGVyZmFjZQorCVJvYmVydCBXZWJiCQlDb21tYW5kLWxpbmUgY29tcGxldGlvbiwgR1VJIHZlcnNpb25zLCBhbmQKKwkJCQlsb3RzIG9mIHBhdGNoZXMKKwlJbmdvIFdpbGtlbgkJVGNsIGludGVyZmFjZQorCU1pa2UgV2lsbGlhbXMJCVBvc3RTY3JpcHQgcHJpbnRpbmcKKwlKdWVyZ2VuIFdlaWdlcnQJCUxhdHRpY2UgdmVyc2lvbiwgQVVYIGltcHJvdmVtZW50cywgVU5JWCBhbmQKKwkJCQlNUy1ET1MgcG9ydHMsIGF1dG9jb25mCisJU3RlZmFuICdTZWMnIFplaGwJTWFpbnRhaW5lciBvZiB2aW0ub3JnCisKK0kgd2lzaCB0byB0aGFuayBhbGwgdGhlIHBlb3BsZSB0aGF0IHNlbnQgbWUgYnVnIHJlcG9ydHMgYW5kIHN1Z2dlc3Rpb25zLiAgVGhlCitsaXN0IGlzIHRvbyBsb25nIHRvIG1lbnRpb24gdGhlbSBhbGwgaGVyZS4gIFZpbSB3b3VsZCBub3QgYmUgdGhlIHNhbWUgd2l0aG91dAordGhlIGlkZWFzIGZyb20gYWxsIHRoZXNlIHBlb3BsZTogVGhleSBrZWVwIFZpbSBhbGl2ZSEKKworCitJbiB0aGlzIGRvY3VtZW50YXRpb24gdGhlcmUgYXJlIHNldmVyYWwgcmVmZXJlbmNlcyB0byBvdGhlciB2ZXJzaW9ucyBvZiBWaToKKwkJCQkJCQkqVmkqCitWaQkidGhlIG9yaWdpbmFsIi4gIFdpdGhvdXQgZnVydGhlciByZW1hcmtzIHRoaXMgaXMgdGhlIHZlcnNpb24KKwlvZiBWaSB0aGF0IGFwcGVhcmVkIGluIFN1biBPUyA0LnguICAiOnZlcnNpb24iIHJldHVybnMKKwkiVmVyc2lvbiAzLjcsIDYvNy84NSIuICBTb21ldGltZXMgb3RoZXIgdmVyc2lvbnMgYXJlIHJlZmVycmVkCisJdG8uICBPbmx5IHJ1bnMgdW5kZXIgVW5peC4gIFNvdXJjZSBjb2RlIG9ubHkgYXZhaWxhYmxlIHdpdGggYQorCWxpY2Vuc2UuICBNb3JlIGluZm9ybWF0aW9uIG9uIFZpIGNhbiBiZSBmb3VuZCB0aHJvdWdoOgorCQlodHRwOi8vdmktZWRpdG9yLm9yZwlbZG9lc24ndCBjdXJyZW50bHkgd29yay4uLl0KKwkJCQkJCQkqUG9zaXgqCitQb3NpeAlGcm9tIHRoZSBJRUVFIHN0YW5kYXJkIDEwMDMuMiwgUGFydCAyOiBTaGVsbCBhbmQgdXRpbGl0aWVzLgorCUdlbmVyYWxseSBrbm93biBhcyAiUG9zaXgiLiAgVGhpcyBpcyBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YKKwlob3cgVmkgaXMgc3VwcG9zZWQgdG8gd29yay4KKwlUaGUgdmVyc2lvbiB1c2VkIGlzIGEgZHJhZnQgZnJvbSBiZWdpbm5pbmcgMTk5Niwgc28gYWxsIHJlbWFya3MgYXJlCisJImV4cGVjdGVkIHRvIGNvbXBseSB0byIgdGhpcy4gIEFueXRoaW5nIGNhbiBjaGFuZ2UgdGhvdWdoLi4uCisJCQkJCQkJKk52aSoKK052aQlUaGUgIk5ldyIgVmkuICBUaGUgdmVyc2lvbiBvZiBWaSB0aGF0IGNvbWVzIHdpdGggQlNEIDQuNCBhbmQgRnJlZUJTRC4KKwlWZXJ5IGdvb2QgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvcmlnaW5hbCBWaSwgd2l0aCBhIGZldyBleHRlbnNpb25zLgorCVRoZSB2ZXJzaW9uIHVzZWQgaXMgMS43OS4gICI6dmVyc2lvbiIgcmV0dXJucyAiVmVyc2lvbiAxLjc5CisJKDEwLzIzLzk2KSIuICBUaGVyZSBoYXMgYmVlbiBubyByZWxlYXNlIHRoZSBsYXN0IGZldyB5ZWFycywgYWx0aG91Z2gKKwl0aGVyZSBpcyBhIGRldmVsb3BtZW50IHZlcnNpb24gMS44MS4KKwlTb3VyY2UgY29kZSBpcyBmcmVlbHkgYXZhaWxhYmxlLgorCQkJCQkJCSpFbHZpcyoKK0VsdmlzCUFub3RoZXIgVmkgY2xvbmUsIG1hZGUgYnkgU3RldmUgS2lya2VuZGFsbC4gIFZlcnkgY29tcGFjdCBidXQgaXNuJ3QKKwlhcyBmbGV4aWJsZSBhcyBWaW0uCisJVGhlIHZlcnNpb24gdXNlZCBpcyAyLjEuICBJdCBpcyBzdGlsbCBiZWluZyBkZXZlbG9wZWQuICBTb3VyY2UgY29kZSBpcworCWZyZWVseSBhdmFpbGFibGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gTm90YXRpb24JCQkJCQkqbm90YXRpb24qCisKK1doZW4gc3ludGF4IGhpZ2hsaWdodGluZyBpcyB1c2VkIHRvIHJlYWQgdGhpcywgdGV4dCB0aGF0IGlzIG5vdCB0eXBlZAorbGl0ZXJhbGx5IGlzIG9mdGVuIGhpZ2hsaWdodGVkIHdpdGggdGhlIFNwZWNpYWwgZ3JvdXAuICBUaGVzZSBhcmUgaXRlbXMgaW4gW10sCit7fSBhbmQgPD4sIGFuZCBDVFJMLVguCisKK05vdGUgdGhhdCBWaW0gdXNlcyBhbGwgcG9zc2libGUgY2hhcmFjdGVycyBpbiBjb21tYW5kcy4gIFNvbWV0aW1lcyB0aGUgW10sIHt9CithbmQgPD4gYXJlIHBhcnQgb2Ygd2hhdCB5b3UgdHlwZSwgdGhlIGNvbnRleHQgc2hvdWxkIG1ha2UgdGhpcyBjbGVhci4KKworCitbXQkJQ2hhcmFjdGVycyBpbiBzcXVhcmUgYnJhY2tldHMgYXJlIG9wdGlvbmFsLgorCisJCQkJCQkgICAgKmNvdW50KiAqW2NvdW50XSogKkU0ODkqCitbY291bnRdCQlBbiBvcHRpb25hbCBudW1iZXIgdGhhdCBtYXkgcHJlY2VkZSB0aGUgY29tbWFuZCB0byBtdWx0aXBseQorCQlvciBpdGVyYXRlIHRoZSBjb21tYW5kLiAgSWYgbm8gbnVtYmVyIGlzIGdpdmVuLCBhIGNvdW50IG9mIG9uZQorCQlpcyB1c2VkLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLiAgTm90ZSB0aGF0IGluIHRoaXMgbWFudWFsIHRoZQorCQlbY291bnRdIGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21tYW5kLAorCQlidXQgb25seSBpbiB0aGUgZXhwbGFuYXRpb24uICBUaGlzIHdhcyBkb25lIHRvIG1ha2UgdGhlCisJCWNvbW1hbmRzIGVhc2llciB0byBsb29rIHVwLiAgSWYgdGhlICdzaG93Y21kJyBvcHRpb24gaXMgb24sCisJCXRoZSAocGFydGlhbGx5KSBlbnRlcmVkIGNvdW50IGlzIHNob3duIGF0IHRoZSBib3R0b20gb2YgdGhlCisJCXdpbmRvdy4gIFlvdSBjYW4gdXNlIDxEZWw+IHRvIGVyYXNlIHRoZSBsYXN0IGRpZ2l0ICh8TjxEZWw+fCkuCisKKwkJCQkJCQkqW3F1b3RleF0qCitbInhdCQlBbiBvcHRpb25hbCByZWdpc3RlciBkZXNpZ25hdGlvbiB3aGVyZSB0ZXh0IGNhbiBiZSBzdG9yZWQuCisJCVNlZSB8cmVnaXN0ZXJzfC4gIFRoZSB4IGlzIGEgc2luZ2xlIGNoYXJhY3RlciBiZXR3ZWVuICdhJyBhbmQKKwkJJ3onIG9yICdBJyBhbmQgJ1onIG9yICciJywgYW5kIGluIHNvbWUgY2FzZXMgKHdpdGggdGhlIHB1dAorCQljb21tYW5kKSBiZXR3ZWVuICcwJyBhbmQgJzknLCAnJScsICcjJywgb3Igb3RoZXJzLiBUaGUKKwkJdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgbGV0dGVyIGRlc2lnbmF0ZSB0aGUgc2FtZSByZWdpc3RlciwKKwkJYnV0IHRoZSBsb3dlcmNhc2UgbGV0dGVyIGlzIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBwcmV2aW91cworCQlyZWdpc3RlciBjb250ZW50cywgd2hpbGUgdGhlIHVwcGVyY2FzZSBsZXR0ZXIgaXMgdXNlZCB0bworCQlhcHBlbmQgdG8gdGhlIHByZXZpb3VzIHJlZ2lzdGVyIGNvbnRlbnRzLiBXaXRob3V0IHRoZSAiIngiIG9yCisJCXdpdGggIiIiIiB0aGUgc3RvcmVkIHRleHQgaXMgcHV0IGludG8gdGhlIHVubmFtZWQgcmVnaXN0ZXIuCisKKwkJCQkJCQkqe30qCit7fQkJQ3VybHkgYnJhY2VzIGRlbm90ZSBwYXJ0cyBvZiB0aGUgY29tbWFuZCB3aGljaCBtdXN0IGFwcGVhciwKKwkJYnV0IHdoaWNoIGNhbiB0YWtlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCB2YWx1ZXMuICBUaGUKKwkJZGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gYW5kIFZpIGFyZSBhbHNvIGdpdmVuIGluIGN1cmx5IGJyYWNlcworCQkodGhpcyB3aWxsIGJlIGNsZWFyIGZyb20gdGhlIGNvbnRleHQpLgorCisJCQkJCQkJKntjaGFyMS1jaGFyMn0qCit7Y2hhcjEtY2hhcjJ9CUEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIHRoZSByYW5nZSBjaGFyMSB0byBjaGFyMi4gIEZvcgorCQlleGFtcGxlOiB7YS16fSBpcyBhIGxvd2VyY2FzZSBsZXR0ZXIuICBNdWx0aXBsZSByYW5nZXMgbWF5IGJlCisJCWNvbmNhdGVuYXRlZC4gIEZvciBleGFtcGxlLCB7YS16QS1aMC05fSBpcyBhbnkgYWxwaGFudW1lcmljCisJCWNoYXJhY3Rlci4KKworCQkJCQkJCSp7bW90aW9ufSoKK3ttb3Rpb259CUEgY29tbWFuZCB0aGF0IG1vdmVzIHRoZSBjdXJzb3IuICBUaGVzZSBhcmUgZXhwbGFpbmVkIGluCisJCXxtb3Rpb24udHh0fC4gIEV4YW1wbGVzOgorCQkJdwkJdG8gc3RhcnQgb2YgbmV4dCB3b3JkCisJCQliCQl0byBiZWdpbiBvZiBjdXJyZW50IHdvcmQKKwkJCTRqCQlmb3VyIGxpbmVzIGRvd24KKwkJCS9UaGU8Q1I+CXRvIG5leHQgb2NjdXJyZW5jZSBvZiAiVGhlIgorCQlUaGlzIGlzIHVzZWQgYWZ0ZXIgYW4gfG9wZXJhdG9yfCBjb21tYW5kIHRvIG1vdmUgb3ZlciB0aGUgdGV4dAorCQl0aGF0IGlzIHRvIGJlIG9wZXJhdGVkIHVwb24uCisJCS0gSWYgdGhlIG1vdGlvbiBpbmNsdWRlcyBhIGNvdW50IGFuZCB0aGUgb3BlcmF0b3IgYWxzbyBoYXMgYQorCQkgIGNvdW50LCB0aGUgdHdvIGNvdW50cyBhcmUgbXVsdGlwbGllZC4gIEZvciBleGFtcGxlOiAiMmQzdyIKKwkJICBkZWxldGVzIHNpeCB3b3Jkcy4KKwkJLSBUaGUgbW90aW9uIGNhbiBiZSBiYWNrd2FyZHMsIGUuZy4gImRiIiB0byBkZWxldGUgdG8gdGhlCisJCSAgc3RhcnQgb2YgdGhlIHdvcmQuCisJCS0gVGhlIG1vdGlvbiBjYW4gYWxzbyBiZSBhIG1vdXNlIGNsaWNrLiAgVGhlIG1vdXNlIGlzIG5vdAorCQkgIHN1cHBvcnRlZCBpbiBldmVyeSB0ZXJtaW5hbCB0aG91Z2guCisJCS0gVGhlICI6b21hcCIgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBtYXAgY2hhcmFjdGVycyB3aGlsZSBhbgorCQkgIG9wZXJhdG9yIGlzIHBlbmRpbmcuCisJCS0gRXggY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gbW92ZSB0aGUgY3Vyc29yLiAgVGhpcyBjYW4gYmUKKwkJICB1c2VkIHRvIGNhbGwgYSBmdW5jdGlvbiB0aGF0IGRvZXMgc29tZSBjb21wbGljYXRlZCBtb3Rpb24uCisJCSAgVGhlIG1vdGlvbiBpcyBhbHdheXMgY2hhcmFjdGVyd2lzZSBleGNsdXNpdmUsIG5vIG1hdHRlcgorCQkgIHdoYXQgIjoiIGNvbW1hbmQgaXMgdXNlZC4gIFRoaXMgbWVhbnMgaXQncyBpbXBvc3NpYmxlIHRvCisJCSAgaW5jbHVkZSB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lIHdpdGhvdXQgdGhlIGxpbmUgYnJlYWsKKwkJICAodW5sZXNzICd2aXJ0dWFsZWRpdCcgaXMgc2V0KS4KKwkJICBJZiB0aGUgRXggY29tbWFuZCBjaGFuZ2VzIHRoZSB0ZXh0IGJlZm9yZSB3aGVyZSB0aGUgb3BlcmF0b3IKKwkJICBzdGFydHMgb3IganVtcHMgdG8gYW5vdGhlciBidWZmZXIgdGhlIHJlc3VsdCBpcworCQkgIHVucHJlZGljdGFibGUuICBJdCBpcyBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIHRleHQgZnVydGhlcgorCQkgIGRvd24uICBKdW1waW5nIHRvIGFub3RoZXIgYnVmZmVyIGlzIHBvc3NpYmxlIGlmIHRoZSBjdXJyZW50CisJCSAgYnVmZmVyIGlzIG5vdCB1bmxvYWRlZC4KKworCQkJCQkJCSp7VmlzdWFsfSoKK3tWaXN1YWx9CUEgc2VsZWN0ZWQgdGV4dCBhcmVhLiAgSXQgaXMgc3RhcnRlZCB3aXRoIHRoZSAidiIsICJWIiwgb3IKKwkJQ1RSTC1WIGNvbW1hbmQsIHRoZW4gYW55IGN1cnNvciBtb3ZlbWVudCBjb21tYW5kIGNhbiBiZSB1c2VkCisJCXRvIGNoYW5nZSB0aGUgZW5kIG9mIHRoZSBzZWxlY3RlZCB0ZXh0LgorCQlUaGlzIGlzIHVzZWQgYmVmb3JlIGFuIHxvcGVyYXRvcnwgY29tbWFuZCB0byBoaWdobGlnaHQgdGhlCisJCXRleHQgdGhhdCBpcyB0byBiZSBvcGVyYXRlZCB1cG9uLgorCQlTZWUgfFZpc3VhbC1tb2RlfC4KKworCQkJCQkJCSo8Y2hhcmFjdGVyPioKKzxjaGFyYWN0ZXI+CUEgc3BlY2lhbCBjaGFyYWN0ZXIgZnJvbSB0aGUgdGFibGUgYmVsb3csIG9wdGlvbmFsbHkgd2l0aAorCQltb2RpZmllcnMsIG9yIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3RlciB3aXRoIG1vZGlmaWVycy4KKworCQkJCQkJCSonY2hhcmFjdGVyJyoKKydjJwkJQSBzaW5nbGUgQVNDSUkgY2hhcmFjdGVyLgorCisJCQkJCQkJKkNUUkwte2NoYXJ9KgorQ1RSTC17Y2hhcn0Je2NoYXJ9IHR5cGVkIGFzIGEgY29udHJvbCBjaGFyYWN0ZXI7IHRoYXQgaXMsIHR5cGluZyB7Y2hhcn0KKwkJd2hpbGUgaG9sZGluZyB0aGUgQ1RSTCBrZXkgZG93bi4gIFRoZSBjYXNlIG9mIHtjaGFyfSBkb2VzIG5vdAorCQltYXR0ZXI7IHRodXMgQ1RSTC1BIGFuZCBDVFJMLWEgYXJlIGVxdWl2YWxlbnQuICBCdXQgb24gc29tZQorCQl0ZXJtaW5hbHMsIHVzaW5nIHRoZSBTSElGVCBrZXkgd2lsbCBwcm9kdWNlIGFub3RoZXIgY29kZSwKKwkJZG9uJ3QgdXNlIGl0IHRoZW4uCisKKwkJCQkJCQkqJ29wdGlvbicqCisnb3B0aW9uJwlBbiBvcHRpb24sIG9yIHBhcmFtZXRlciwgdGhhdCBjYW4gYmUgc2V0IHRvIGEgdmFsdWUsIGlzCisJCWVuY2xvc2VkIGluIHNpbmdsZSBxdW90ZXMuICBTZWUgfG9wdGlvbnN8LgorCisJCQkJCQkJKnF1b3RlY29tbWFuZHF1b3RlKgorImNvbW1hbmQiCUEgcmVmZXJlbmNlIHRvIGEgY29tbWFuZCB0aGF0IHlvdSBjYW4gdHlwZSBpcyBlbmNsb3NlZCBpbgorCQlkb3VibGUgcXVvdGVzLgorCisJCQkJCSprZXktbm90YXRpb24qICprZXktY29kZXMqICprZXljb2RlcyoKK1RoZXNlIG5hbWVzIGZvciBrZXlzIGFyZSB1c2VkIGluIHRoZSBkb2N1bWVudGF0aW9uLiAgVGhleSBjYW4gYWxzbyBiZSB1c2VkCit3aXRoIHRoZSAiOm1hcCIgY29tbWFuZCAoaW5zZXJ0IHRoZSBrZXkgbmFtZSBieSBwcmVzc2luZyBDVFJMLUsgYW5kIHRoZW4gdGhlCitrZXkgeW91IHdhbnQgdGhlIG5hbWUgZm9yKS4KKworbm90YXRpb24JbWVhbmluZwkJICAgIGVxdWl2YWxlbnQJZGVjaW1hbCB2YWx1ZShzKQl+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPE51bD4JCXplcm8JCQlDVFJMLUAJICAwIChzdG9yZWQgYXMgMTApICo8TnVsPioKKzxCUz4JCWJhY2tzcGFjZQkJQ1RSTC1ICSAgOAkqYmFja3NwYWNlKgorPFRhYj4JCXRhYgkJCUNUUkwtSQkgIDkJKnRhYiogKlRhYioKKwkJCQkJCQkqbGluZWZlZWQqCis8Tkw+CQlsaW5lZmVlZAkJQ1RSTC1KCSAxMCAodXNlZCBmb3IgPE51bD4pCis8RkY+CQlmb3JtZmVlZAkJQ1RSTC1MCSAxMgkqZm9ybWZlZWQqCis8Q1I+CQljYXJyaWFnZSByZXR1cm4JCUNUUkwtTQkgMTMJKmNhcnJpYWdlLXJldHVybioKKzxSZXR1cm4+CXNhbWUgYXMgPENSPgkJCQkqPFJldHVybj4qCis8RW50ZXI+CQlzYW1lIGFzIDxDUj4JCQkJKjxFbnRlcj4qCis8RXNjPgkJZXNjYXBlCQkJQ1RSTC1bCSAyNwkqZXNjYXBlKiAqPEVzYz4qCis8U3BhY2U+CQlzcGFjZQkJCQkgMzIJKnNwYWNlKgorPGx0PgkJbGVzcy10aGFuCQk8CSA2MAkqPGx0PioKKzxCc2xhc2g+CWJhY2tzbGFzaAkJXAkgOTIJKmJhY2tzbGFzaCogKjxCc2xhc2g+KgorPEJhcj4JCXZlcnRpY2FsIGJhcgkJfAkxMjQJKjxCYXI+KgorPERlbD4JCWRlbGV0ZQkJCQkxMjcKKzxDU0k+CQljb21tYW5kIHNlcXVlbmNlIGludHJvICBBTFQtRXNjIDE1NQkqPENTST4qCis8eENTST4JCUNTSSB3aGVuIHR5cGVkIGluIHRoZSBHVUkJCSo8eENTST4qCisKKzxFT0w+CQllbmQtb2YtbGluZSAoY2FuIGJlIDxDUj4sIDxMRj4gb3IgPENSPjxMRj4sCisJCWRlcGVuZHMgb24gc3lzdGVtIGFuZCAnZmlsZWZvcm1hdCcpCSo8RU9MPioKKworPFVwPgkJY3Vyc29yLXVwCQkJKmN1cnNvci11cCogKmN1cnNvcl91cCoKKzxEb3duPgkJY3Vyc29yLWRvd24JCQkqY3Vyc29yLWRvd24qICpjdXJzb3JfZG93bioKKzxMZWZ0PgkJY3Vyc29yLWxlZnQJCQkqY3Vyc29yLWxlZnQqICpjdXJzb3JfbGVmdCoKKzxSaWdodD4JCWN1cnNvci1yaWdodAkJCSpjdXJzb3ItcmlnaHQqICpjdXJzb3JfcmlnaHQqCis8Uy1VcD4JCXNoaWZ0LWN1cnNvci11cAorPFMtRG93bj4Jc2hpZnQtY3Vyc29yLWRvd24KKzxTLUxlZnQ+CXNoaWZ0LWN1cnNvci1sZWZ0Cis8Uy1SaWdodD4Jc2hpZnQtY3Vyc29yLXJpZ2h0Cis8Qy1MZWZ0Pgljb250cm9sLWN1cnNvci1sZWZ0Cis8Qy1SaWdodD4JY29udHJvbC1jdXJzb3ItcmlnaHQKKzxGMT4gLSA8RjEyPglmdW5jdGlvbiBrZXlzIDEgdG8gMTIJCSpmdW5jdGlvbl9rZXkqICpmdW5jdGlvbi1rZXkqCis8Uy1GMT4gLSA8Uy1GMTI+IHNoaWZ0LWZ1bmN0aW9uIGtleXMgMSB0byAxMgkqPFMtRjE+KgorPEhlbHA+CQloZWxwIGtleQorPFVuZG8+CQl1bmRvIGtleQorPEluc2VydD4JaW5zZXJ0IGtleQorPEhvbWU+CQlob21lCQkJCSpob21lKgorPEVuZD4JCWVuZAkJCQkqZW5kKgorPFBhZ2VVcD4JcGFnZS11cAkJCQkqcGFnZV91cCogKnBhZ2UtdXAqCis8UGFnZURvd24+CXBhZ2UtZG93bgkJCSpwYWdlX2Rvd24qICpwYWdlLWRvd24qCis8a0hvbWU+CQlrZXlwYWQgaG9tZSAodXBwZXIgbGVmdCkJKmtleXBhZC1ob21lKgorPGtFbmQ+CQlrZXlwYWQgZW5kIChsb3dlciBsZWZ0KQkJKmtleXBhZC1lbmQqCis8a1BhZ2VVcD4Ja2V5cGFkIHBhZ2UtdXAgKHVwcGVyIHJpZ2h0KQkqa2V5cGFkLXBhZ2UtdXAqCis8a1BhZ2VEb3duPglrZXlwYWQgcGFnZS1kb3duIChsb3dlciByaWdodCkJKmtleXBhZC1wYWdlLWRvd24qCis8a1BsdXM+CQlrZXlwYWQgKwkJCSprZXlwYWQtcGx1cyoKKzxrTWludXM+CWtleXBhZCAtCQkJKmtleXBhZC1taW51cyoKKzxrTXVsdGlwbHk+CWtleXBhZCAqCQkJKmtleXBhZC1tdWx0aXBseSoKKzxrRGl2aWRlPglrZXlwYWQgLwkJCSprZXlwYWQtZGl2aWRlKgorPGtFbnRlcj4Ja2V5cGFkIEVudGVyCQkJKmtleXBhZC1lbnRlcioKKzxrUG9pbnQ+CWtleXBhZCBEZWNpbWFsIHBvaW50CQkqa2V5cGFkLXBvaW50KgorPGswPiAtIDxrOT4Ja2V5cGFkIDAgdG8gOQkJCSprZXlwYWQtMCogKmtleXBhZC05KgorPFMtLi4uPgkJc2hpZnQta2V5CQkJKnNoaWZ0KiAqPFMtKgorPEMtLi4uPgkJY29udHJvbC1rZXkJCQkqY29udHJvbCogKmN0cmwqICo8Qy0qCis8TS0uLi4+CQlhbHQta2V5IG9yIG1ldGEta2V5CQkqbWV0YSogKmFsdCogKjxNLSoKKzxBLS4uLj4JCXNhbWUgYXMgPE0tLi4uPgkJCSo8QS0qCis8RC0uLi4+CQljb21tYW5kLWtleSAoTWFjaW50b3NoIG9ubHkpCSo8RC0qCis8dF94eD4JCWtleSB3aXRoICJ4eCIgZW50cnkgaW4gdGVybWNhcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogVGhlIHNoaWZ0ZWQgY3Vyc29yIGtleXMsIHRoZSBoZWxwIGtleSwgYW5kIHRoZSB1bmRvIGtleSBhcmUgb25seQorYXZhaWxhYmxlIG9uIGEgZmV3IHRlcm1pbmFscy4gIE9uIHRoZSBBbWlnYSwgc2hpZnRlZCBmdW5jdGlvbiBrZXkgMTAgcHJvZHVjZXMKK2EgY29kZSAoQ1NJKSB0aGF0IGlzIGFsc28gdXNlZCBieSBrZXkgc2VxdWVuY2VzLiAgSXQgd2lsbCBiZSByZWNvZ25pemVkIG9ubHkKK2FmdGVyIHR5cGluZyBhbm90aGVyIGtleS4KKworTm90ZTogVGhlcmUgYXJlIHR3byBjb2RlcyBmb3IgdGhlIGRlbGV0ZSBrZXkuICAxMjcgaXMgdGhlIGRlY2ltYWwgQVNDSUkgdmFsdWUKK2ZvciB0aGUgZGVsZXRlIGtleSwgd2hpY2ggaXMgYWx3YXlzIHJlY29nbml6ZWQuICBTb21lIGRlbGV0ZSBrZXlzIHNlbmQgYW5vdGhlcgordmFsdWUsIGluIHdoaWNoIGNhc2UgdGhpcyB2YWx1ZSBpcyBvYnRhaW5lZCBmcm9tIHRoZSB0ZXJtY2FwIGVudHJ5ICJrRCIuICBCb3RoCit2YWx1ZXMgaGF2ZSB0aGUgc2FtZSBlZmZlY3QuICBBbHNvIHNlZSB8OmZpeGRlbHwuCisKK05vdGU6IFRoZSBrZXlwYWQga2V5cyBhcmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGNvcnJlc3BvbmRpbmcgIm5vcm1hbCIKK2tleXMuICBGb3IgZXhhbXBsZSwgPGtIb21lPiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIDxIb21lPi4gIElmIGEga2V5cGFkIGtleQorc2VuZHMgdGhlIHNhbWUgcmF3IGtleSBjb2RlIGFzIGl0cyBub24ta2V5cGFkIGVxdWl2YWxlbnQsIGl0IHdpbGwgYmUKK3JlY29nbml6ZWQgYXMgdGhlIG5vbi1rZXlwYWQgY29kZS4gIEZvciBleGFtcGxlLCB3aGVuIDxrSG9tZT4gc2VuZHMgdGhlIHNhbWUKK2NvZGUgYXMgPEhvbWU+LCB3aGVuIHByZXNzaW5nIDxrSG9tZT4gVmltIHdpbGwgdGhpbmsgPEhvbWU+IHdhcyBwcmVzc2VkLgorTWFwcGluZyA8a0hvbWU+IHdpbGwgbm90IHdvcmsgdGhlbi4KKworCQkJCQkJCQkqPD4qCitFeGFtcGxlcyBhcmUgb2Z0ZW4gZ2l2ZW4gaW4gdGhlIDw+IG5vdGF0aW9uLiAgU29tZXRpbWVzIHRoaXMgaXMganVzdCB0byBtYWtlCitjbGVhciB3aGF0IHlvdSBuZWVkIHRvIHR5cGUsIGJ1dCBvZnRlbiBpdCBjYW4gYmUgdHlwZWQgbGl0ZXJhbGx5LCBlLmcuLCB3aXRoCit0aGUgIjptYXAiIGNvbW1hbmQuICBUaGUgcnVsZXMgYXJlOgorIDEuICBBbnkgcHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIHR5cGVkIGRpcmVjdGx5LCBleGNlcHQgYmFja3NsYXNoIGFuZCAnPCcKKyAyLiAgQSBiYWNrc2xhc2ggaXMgcmVwcmVzZW50ZWQgd2l0aCAiXFwiLCBkb3VibGUgYmFja3NsYXNoLCBvciAiPEJzbGFzaD4iLgorIDMuICBBIHJlYWwgJzwnIGlzIHJlcHJlc2VudGVkIHdpdGggIlw8IiBvciAiPGx0PiIuICBXaGVuIHRoZXJlIGlzIG5vCisgICAgIGNvbmZ1c2lvbiBwb3NzaWJsZSwgYSAnPCcgY2FuIGJlIHVzZWQgZGlyZWN0bHkuCisgNC4gICI8a2V5PiIgbWVhbnMgdGhlIHNwZWNpYWwga2V5IHR5cGVkLiAgVGhpcyBpcyB0aGUgbm90YXRpb24gZXhwbGFpbmVkIGluCisgICAgIHRoZSB0YWJsZSBhYm92ZS4gIEEgZmV3IGV4YW1wbGVzOgorCSAgIDxFc2M+CQlFc2NhcGUga2V5CisJICAgPEMtRz4JCUNUUkwtRworCSAgIDxVcD4JCQljdXJzb3IgdXAga2V5CisJICAgPEMtTGVmdE1vdXNlPglDb250cm9sLSBsZWZ0IG1vdXNlIGNsaWNrCisJICAgPFMtRjExPgkJU2hpZnRlZCBmdW5jdGlvbiBrZXkgMTEKKwkgICA8TS1hPgkJTWV0YS0gYSAgKCdhJyB3aXRoIGJpdCA4IHNldCkKKwkgICA8TS1BPgkJTWV0YS0gQSAgKCdBJyB3aXRoIGJpdCA4IHNldCkKKwkgICA8dF9rZD4JCSJrZCIgdGVybWNhcCBlbnRyeSAoY3Vyc29yIGRvd24ga2V5KQorCitJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGZ1bGwgPD4gbm90YXRpb24gaW4gVmltLCB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlICc8JworZmxhZyBpcyBleGNsdWRlZCBmcm9tICdjcG9wdGlvbnMnICh3aGVuICdjb21wYXRpYmxlJyBpcyBub3Qgc2V0LCBpdCBhbHJlYWR5IGlzCitieSBkZWZhdWx0KS4gPgorCTpzZXQgY3BvLT08CitUaGUgPD4gbm90YXRpb24gdXNlcyA8bHQ+IHRvIGVzY2FwZSB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mIGtleSBuYW1lcy4gIFVzaW5nIGEKK2JhY2tzbGFzaCBhbHNvIHdvcmtzLCBidXQgb25seSB3aGVuICdjcG9wdGlvbnMnIGRvZXMgbm90IGluY2x1ZGUgdGhlICdCJyBmbGFnLgorCitFeGFtcGxlcyBmb3IgbWFwcGluZyBDVFJMLUggdG8gdGhlIHNpeCBjaGFyYWN0ZXJzICI8SG9tZT4iOiA+CisJOmltYXAgPEMtSD4gXDxIb21lPgorCTppbWFwIDxDLUg+IDxsdD5Ib21lPgorVGhlIGZpcnN0IG9uZSBvbmx5IHdvcmtzIHdoZW4gdGhlICdCJyBmbGFnIGlzIG5vdCBpbiAnY3BvcHRpb25zJy4gIFRoZSBzZWNvbmQKK29uZSBhbHdheXMgd29ya3MuCitUbyBnZXQgYSBsaXRlcmFsICI8bHQ+IiBpbiBhIG1hcHBpbmc6ID4KKwk6bWFwIDxDLUw+IDxsdD5sdD4KKworRm9yIG1hcHBpbmcsIGFiYnJldmlhdGlvbiBhbmQgbWVudSBjb21tYW5kcyB5b3UgY2FuIHRoZW4gY29weS1wYXN0ZSB0aGUKK2V4YW1wbGVzIGFuZCB1c2UgdGhlbSBkaXJlY3RseS4gIE9yIHR5cGUgdGhlbSBsaXRlcmFsbHksIGluY2x1ZGluZyB0aGUgJzwnIGFuZAorJz4nIGNoYXJhY3RlcnMuICBUaGlzIGRvZXMgTk9UIHdvcmsgZm9yIG90aGVyIGNvbW1hbmRzLCBsaWtlICI6c2V0IiBhbmQKKyI6YXV0b2NtZCIhCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gTW9kZXMsIGludHJvZHVjdGlvbgkJCQkqdmltLW1vZGVzLWludHJvKiAqdmltLW1vZGVzKgorCitWaW0gaGFzIHNpeCBCQVNJQyBtb2RlczoKKworCQkJCQkqTm9ybWFsKiAqTm9ybWFsLW1vZGUqICpjb21tYW5kLW1vZGUqCitOb3JtYWwgbW9kZQkJSW4gTm9ybWFsIG1vZGUgeW91IGNhbiBlbnRlciBhbGwgdGhlIG5vcm1hbCBlZGl0b3IKKwkJCWNvbW1hbmRzLiAgSWYgeW91IHN0YXJ0IHRoZSBlZGl0b3IgeW91IGFyZSBpbiB0aGlzCisJCQltb2RlICh1bmxlc3MgeW91IGhhdmUgc2V0IHRoZSAnaW5zZXJ0bW9kZScgb3B0aW9uLAorCQkJc2VlIGJlbG93KS4gIFRoaXMgaXMgYWxzbyBrbm93biBhcyBjb21tYW5kIG1vZGUuCisKK1Zpc3VhbCBtb2RlCQlUaGlzIGlzIGxpa2UgTm9ybWFsIG1vZGUsIGJ1dCB0aGUgbW92ZW1lbnQgY29tbWFuZHMKKwkJCWV4dGVuZCBhIGhpZ2hsaWdodGVkIGFyZWEuICBXaGVuIGEgbm9uLW1vdmVtZW50CisJCQljb21tYW5kIGlzIHVzZWQsIGl0IGlzIGV4ZWN1dGVkIGZvciB0aGUgaGlnaGxpZ2h0ZWQKKwkJCWFyZWEuICBTZWUgfFZpc3VhbC1tb2RlfC4KKwkJCUlmIHRoZSAnc2hvd21vZGUnIG9wdGlvbiBpcyBvbiAiLS0gVklTVUFMIC0tIiBpcyBzaG93bgorCQkJYXQgdGhlIGJvdHRvbSBvZiB0aGUgd2luZG93LgorCitTZWxlY3QgbW9kZQkJVGhpcyBsb29rcyBtb3N0IGxpa2UgdGhlIE1TLVdpbmRvd3Mgc2VsZWN0aW9uIG1vZGUuCisJCQlUeXBpbmcgYSBwcmludGFibGUgY2hhcmFjdGVyIGRlbGV0ZXMgdGhlIHNlbGVjdGlvbgorCQkJYW5kIHN0YXJ0cyBJbnNlcnQgbW9kZS4gIFNlZSB8U2VsZWN0LW1vZGV8LgorCQkJSWYgdGhlICdzaG93bW9kZScgb3B0aW9uIGlzIG9uICItLSBTRUxFQ1QgLS0iIGlzIHNob3duCisJCQlhdCB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3cuCisKK0luc2VydCBtb2RlCQlJbiBJbnNlcnQgbW9kZSB0aGUgdGV4dCB5b3UgdHlwZSBpcyBpbnNlcnRlZCBpbnRvIHRoZQorCQkJYnVmZmVyLiAgU2VlIHxJbnNlcnQtbW9kZXwuCisJCQlJZiB0aGUgJ3Nob3dtb2RlJyBvcHRpb24gaXMgb24gIi0tIElOU0VSVCAtLSIgaXMgc2hvd24KKwkJCWF0IHRoZSBib3R0b20gb2YgdGhlIHdpbmRvdy4KKworQ29tbWFuZC1saW5lIG1vZGUJSW4gQ29tbWFuZC1saW5lIG1vZGUgKGFsc28gY2FsbGVkIENtZGxpbmUgbW9kZSkgeW91CitDbWRsaW5lIG1vZGUJCWNhbiBlbnRlciBvbmUgbGluZSBvZiB0ZXh0IGF0IHRoZSBib3R0b20gb2YgdGhlCisJCQl3aW5kb3cuICBUaGlzIGlzIGZvciB0aGUgRXggY29tbWFuZHMsICI6IiwgdGhlIHBhdHRlcm4KKwkJCXNlYXJjaCBjb21tYW5kcywgIj8iIGFuZCAiLyIsIGFuZCB0aGUgZmlsdGVyIGNvbW1hbmQsCisJCQkiISIuICB8Q21kbGluZS1tb2RlfAorCitFeCBtb2RlCQkJTGlrZSBDb21tYW5kLWxpbmUgbW9kZSwgYnV0IGFmdGVyIGVudGVyaW5nIGEgY29tbWFuZAorCQkJeW91IHJlbWFpbiBpbiBFeCBtb2RlLiAgVmVyeSBsaW1pdGVkIGVkaXRpbmcgb2YgdGhlCisJCQljb21tYW5kIGxpbmUuICB8RXgtbW9kZXwKKworVGhlcmUgYXJlIGZpdmUgQURESVRJT05BTCBtb2Rlcy4gIFRoZXNlIGFyZSB2YXJpYW50cyBvZiB0aGUgQkFTSUMgbW9kZXM6CisKKwkJCQkqT3BlcmF0b3ItcGVuZGluZyogKk9wZXJhdG9yLXBlbmRpbmctbW9kZSoKK09wZXJhdG9yLXBlbmRpbmcgbW9kZQlUaGlzIGlzIGxpa2UgTm9ybWFsIG1vZGUsIGJ1dCBhZnRlciBhbiBvcGVyYXRvcgorCQkJY29tbWFuZCBoYXMgc3RhcnRlZCwgYW5kIFZpbSBpcyB3YWl0aW5nIGZvciBhIHttb3Rpb259CisJCQl0byBzcGVjaWZ5IHRoZSB0ZXh0IHRoYXQgdGhlIG9wZXJhdG9yIHdpbGwgd29yayBvbi4KKworUmVwbGFjZSBtb2RlCQlSZXBsYWNlIG1vZGUgaXMgYSBzcGVjaWFsIGNhc2Ugb2YgSW5zZXJ0IG1vZGUuICBZb3UKKwkJCWNhbiBkbyB0aGUgc2FtZSB0aGluZ3MgYXMgaW4gSW5zZXJ0IG1vZGUsIGJ1dCBmb3IKKwkJCWVhY2ggY2hhcmFjdGVyIHlvdSBlbnRlciwgb25lIGNoYXJhY3RlciBvZiB0aGUgZXhpc3RpbmcKKwkJCXRleHQgaXMgZGVsZXRlZC4gIFNlZSB8UmVwbGFjZS1tb2RlfC4KKwkJCUlmIHRoZSAnc2hvd21vZGUnIG9wdGlvbiBpcyBvbiAiLS0gUkVQTEFDRSAtLSIgaXMKKwkJCXNob3duIGF0IHRoZSBib3R0b20gb2YgdGhlIHdpbmRvdy4KKworSW5zZXJ0IE5vcm1hbCBtb2RlCUVudGVyZWQgd2hlbiBDVFJMLU8gZ2l2ZW4gaW4gSW5zZXJ0IG1vZGUuICBUaGlzIGlzCisJCQlsaWtlIE5vcm1hbCBtb2RlLCBidXQgYWZ0ZXIgZXhlY3V0aW5nIG9uZSBjb21tYW5kIFZpbQorCQkJcmV0dXJucyB0byBJbnNlcnQgbW9kZS4KKwkJCUlmIHRoZSAnc2hvd21vZGUnIG9wdGlvbiBpcyBvbiAiLS0gKGluc2VydCkgLS0iIGlzCisJCQlzaG93biBhdCB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3cuCisKK0luc2VydCBWaXN1YWwgbW9kZQlFbnRlcmVkIHdoZW4gc3RhcnRpbmcgYSBWaXN1YWwgc2VsZWN0aW9uIGZyb20gSW5zZXJ0CisJCQltb2RlLCBlLmcuLCBieSB1c2luZyBDVFJMLU8gYW5kIHRoZW4gInYiLCAiViIgb3IKKwkJCUNUUkwtVi4gIFdoZW4gdGhlIFZpc3VhbCBzZWxlY3Rpb24gZW5kcywgVmltIHJldHVybnMKKwkJCXRvIEluc2VydCBtb2RlLgorCQkJSWYgdGhlICdzaG93bW9kZScgb3B0aW9uIGlzIG9uICItLSAoaW5zZXJ0KSBWSVNVQUwgLS0iCisJCQlpcyBzaG93biBhdCB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3cuCisKK0luc2VydCBTZWxlY3QgbW9kZQlFbnRlcmVkIHdoZW4gc3RhcnRpbmcgU2VsZWN0IG1vZGUgZnJvbSBJbnNlcnQgbW9kZS4KKwkJCUUuZy4sIGJ5IGRyYWdnaW5nIHRoZSBtb3VzZSBvciA8Uy1SaWdodD4uCisJCQlXaGVuIHRoZSBTZWxlY3QgbW9kZSBlbmRzLCBWaW0gcmV0dXJucyB0byBJbnNlcnQgbW9kZS4KKwkJCUlmIHRoZSAnc2hvd21vZGUnIG9wdGlvbiBpcyBvbiAiLS0gKGluc2VydCkgU0VMRUNUIC0tIgorCQkJaXMgc2hvd24gYXQgdGhlIGJvdHRvbSBvZiB0aGUgd2luZG93LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFN3aXRjaGluZyBmcm9tIG1vZGUgdG8gbW9kZQkJCQkqbW9kZS1zd2l0Y2hpbmcqCisKK0lmIGZvciBhbnkgcmVhc29uIHlvdSBkbyBub3Qga25vdyB3aGljaCBtb2RlIHlvdSBhcmUgaW4sIHlvdSBjYW4gYWx3YXlzIGdldAorYmFjayB0byBOb3JtYWwgbW9kZSBieSB0eXBpbmcgPEVzYz4gdHdpY2UuICBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgRXggbW9kZQordGhvdWdoLCB1c2UgIjp2aXN1YWwiLgorWW91IHdpbGwga25vdyB5b3UgYXJlIGJhY2sgaW4gTm9ybWFsIG1vZGUgd2hlbiB5b3Ugc2VlIHRoZSBzY3JlZW4gZmxhc2ggb3IKK2hlYXIgdGhlIGJlbGwgYWZ0ZXIgeW91IHR5cGUgPEVzYz4uICBIb3dldmVyLCB3aGVuIHByZXNzaW5nIDxFc2M+IGFmdGVyIHVzaW5nCitDVFJMLU8gaW4gSW5zZXJ0IG1vZGUgeW91IGdldCBhIGJlZXAgYnV0IHlvdSBhcmUgc3RpbGwgaW4gSW5zZXJ0IG1vZGUsIHR5cGUKKzxFc2M+IGFnYWluLgorCisJCQkJCQkJKmlfZXNjKgorCQlUTyBtb2RlCQkJCQkJICAgIH4KKwkJTm9ybWFsCVZpc3VhbAlTZWxlY3QJSW5zZXJ0CSAgUmVwbGFjZSAgIENtZC1saW5lICBFeCB+CitGUk9NIG1vZGUJCQkJCQkJCSB+CitOb3JtYWwJCQl2IFYgXlYJICAqNAkgKjEJICAgIFIJICAgIDogLyA/ICEgICBRCitWaXN1YWwJCSAqMgkJICBeRwkgYyBDCSAgICAtLQkgICAgICA6ICAgICAgIC0tCitTZWxlY3QJCSAqNQleTyBeRwkJICo2CSAgICAtLQkgICAgICAtLSAgICAgIC0tCitJbnNlcnQJCSA8RXNjPgkgIC0tCSAgLS0JCSAgPEluc2VydD4gICAgLS0gICAgICAtLQorUmVwbGFjZQkJIDxFc2M+CSAgLS0JICAtLQk8SW5zZXJ0PgkgICAgICAtLSAgICAgIC0tCitDb21tYW5kLWxpbmUJICozCSAgLS0JICAtLQkgOnN0YXJ0CSAgICAtLQkJICAgICAgLS0KK0V4CQkgOnZpCSAgLS0JICAtLQkgLS0JICAgIC0tCSAgICAgIC0tCisKKy0gIE5BCistLSBub3QgcG9zc2libGUKKworKjEgR28gZnJvbSBOb3JtYWwgbW9kZSB0byBJbnNlcnQgbW9kZSBieSBnaXZpbmcgdGhlIGNvbW1hbmQgImkiLCAiSSIsICJhIiwKKyAgICJBIiwgIm8iLCAiTyIsICJjIiwgIkMiLCAicyIgb3IgUyIuCisqMiBHbyBmcm9tIFZpc3VhbCBtb2RlIHRvIE5vcm1hbCBtb2RlIGJ5IGdpdmluZyBhIG5vbi1tb3ZlbWVudCBjb21tYW5kLCB3aGljaAorICAgY2F1c2VzIHRoZSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkLCBvciBieSBoaXR0aW5nIDxFc2M+ICJ2IiwgIlYiIG9yICJDVFJMLVYiCisgICAoc2VlIHx2X3Z8KSwgd2hpY2gganVzdCBzdG9wcyBWaXN1YWwgbW9kZSB3aXRob3V0IHNpZGUgZWZmZWN0cy4KKyozIEdvIGZyb20gQ29tbWFuZC1saW5lIG1vZGUgdG8gTm9ybWFsIG1vZGUgYnk6CisgICAtIEhpdHRpbmcgPENSPiBvciA8Tkw+LCB3aGljaCBjYXVzZXMgdGhlIGVudGVyZWQgY29tbWFuZCB0byBiZSBleGVjdXRlZC4KKyAgIC0gRGVsZXRpbmcgdGhlIGNvbXBsZXRlIGxpbmUgKGUuZy4sIHdpdGggQ1RSTC1VKSBhbmQgZ2l2aW5nIGEgZmluYWwgPEJTPi4KKyAgIC0gSGl0dGluZyBDVFJMLUMgb3IgPEVzYz4sIHdoaWNoIHF1aXRzIHRoZSBjb21tYW5kLWxpbmUgd2l0aG91dCBleGVjdXRpbmcKKyAgICAgdGhlIGNvbW1hbmQuCisgICBJbiB0aGUgbGFzdCBjYXNlIDxFc2M+IG1heSBiZSB0aGUgY2hhcmFjdGVyIGRlZmluZWQgd2l0aCB0aGUgJ3dpbGRjaGFyJworICAgb3B0aW9uLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgc3RhcnQgY29tbWFuZC1saW5lIGNvbXBsZXRpb24uICBZb3UgY2FuCisgICBpZ25vcmUgdGhhdCBhbmQgdHlwZSA8RXNjPiBhZ2Fpbi4gIHtWaTogd2hlbiBoaXR0aW5nIDxFc2M+IHRoZSBjb21tYW5kLWxpbmUKKyAgIGlzIGV4ZWN1dGVkLiAgVGhpcyBpcyB1bmV4cGVjdGVkIGZvciBtb3N0IHBlb3BsZTsgdGhlcmVmb3JlIGl0IHdhcyBjaGFuZ2VkCisgICBpbiBWaW0uICBCdXQgd2hlbiB0aGUgPEVzYz4gaXMgcGFydCBvZiBhIG1hcHBpbmcsIHRoZSBjb21tYW5kLWxpbmUgaXMKKyAgIGV4ZWN1dGVkLiAgSWYgeW91IHdhbnQgdGhlIFZpIGJlaGF2aW91ciBhbHNvIHdoZW4gdHlwaW5nIDxFc2M+LCB1c2UgIjpjbWFwCisgICBeVjxFc2M+IF5WXk0ifQorKjQgR28gZnJvbSBOb3JtYWwgdG8gU2VsZWN0IG1vZGUgYnk6CisgICAtIHVzZSB0aGUgbW91c2UgdG8gc2VsZWN0IHRleHQgd2hpbGUgJ3NlbGVjdG1vZGUnIGNvbnRhaW5zICJtb3VzZSIKKyAgIC0gdXNlIGEgbm9uLXByaW50YWJsZSBjb21tYW5kIHRvIG1vdmUgdGhlIGN1cnNvciB3aGlsZSBrZWVwaW5nIHRoZSBTaGlmdAorICAgICBrZXkgcHJlc3NlZCwgYW5kIHRoZSAnc2VsZWN0bW9kZScgb3B0aW9uIGNvbnRhaW5zICJrZXkiCisgICAtIHVzZSAidiIsICJWIiBvciAiQ1RSTC1WIiB3aGlsZSAnc2VsZWN0bW9kZScgY29udGFpbnMgImNtZCIKKyAgIC0gdXNlICJnaCIsICJnSCIgb3IgImcgQ1RSTC1IIiAgfGdfQ1RSTC1IfAorKjUgR28gZnJvbSBTZWxlY3QgbW9kZSB0byBOb3JtYWwgbW9kZSBieSB1c2luZyBhIG5vbi1wcmludGFibGUgY29tbWFuZCB0byBtb3ZlCisgICB0aGUgY3Vyc29yLCB3aXRob3V0IGtlZXBpbmcgdGhlIFNoaWZ0IGtleSBwcmVzc2VkLgorKjYgR28gZnJvbSBTZWxlY3QgbW9kZSB0byBJbnNlcnQgbW9kZSBieSB0eXBpbmcgYSBwcmludGFibGUgY2hhcmFjdGVyLiAgVGhlCisgICBzZWxlY3Rpb24gaXMgZGVsZXRlZCBhbmQgdGhlIGNoYXJhY3RlciBpcyBpbnNlcnRlZC4KKworSWYgdGhlICdpbnNlcnRtb2RlJyBvcHRpb24gaXMgb24sIGVkaXRpbmcgYSBmaWxlIHdpbGwgc3RhcnQgaW4gSW5zZXJ0IG1vZGUuCisKKwkqQ1RSTC1cX0NUUkwtTiogKmlfQ1RSTC1cX0NUUkwtTiogKmNfQ1RSTC1cX0NUUkwtTiogKnZfQ1RSTC1cX0NUUkwtTioKK0FkZGl0aW9uYWxseSB0aGUgY29tbWFuZCBDVFJMLVwgQ1RSTC1OIG9yIDxDLVw+PEMtTj4gY2FuIGJlIHVzZWQgdG8gZ28gdG8KK05vcm1hbCBtb2RlIGZyb20gYW55IG90aGVyIG1vZGUuICBUaGlzIGNhbiBiZSB1c2VkIHRvIG1ha2Ugc3VyZSBWaW0gaXMgaW4KK05vcm1hbCBtb2RlLCB3aXRob3V0IGNhdXNpbmcgYSBiZWVwIGxpa2UgPEVzYz4gd291bGQuICBIb3dldmVyLCB0aGlzIGRvZXMgbm90Cit3b3JrIGluIEV4IG1vZGUuICBXaGVuIHVzZWQgYWZ0ZXIgYSBjb21tYW5kIHRoYXQgdGFrZXMgYW4gYXJndW1lbnQsIHN1Y2ggYXMKK3xmfCBvciB8bXwsIHRoZSB0aW1lb3V0IHNldCB3aXRoICd0dGltZW91dGxlbicgYXBwbGllcy4KKworCSpDVFJMLVxfQ1RSTC1HKiAqaV9DVFJMLVxfQ1RSTC1HKiAqY19DVFJMLVxfQ1RSTC1HKiAqdl9DVFJMLVxfQ1RSTC1HKgorVGhlIGNvbW1hbmQgQ1RSTC1cIENUUkwtRyBvciA8Qy1cPjxDLUc+IGNhbiBiZSB1c2VkIHRvIGdvIHRvIEluc2VydCBtb2RlIHdoZW4KKydpbnNlcnRtb2RlJyBpcyBzZXQuICBPdGhlcndpc2UgaXQgZ29lcyB0byBOb3JtYWwgbW9kZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8KK21ha2Ugc3VyZSBWaW0gaXMgaW4gdGhlIG1vZGUgaW5kaWNhdGVkIGJ5ICdpbnNlcnRtb2RlJywgd2l0aG91dCBrbm93aW5nIGluCit3aGF0IG1vZGUgVmltIGN1cnJlbnRseSBpcy4KKworCQkJCSAgICAqUSogKm1vZGUtRXgqICpFeC1tb2RlKiAqRXgqICpFWCogKkU1MDEqCitRCQkJU3dpdGNoIHRvICJFeCIgbW9kZS4gIFRoaXMgaXMgYSBiaXQgbGlrZSB0eXBpbmcgIjoiCisJCQljb21tYW5kcyBvbmUgYWZ0ZXIgYW5vdGhlciwgZXhjZXB0OgorCQkJLSBZb3UgZG9uJ3QgaGF2ZSB0byBrZWVwIHByZXNzaW5nICI6Ii4KKwkJCS0gVGhlIHNjcmVlbiBkb2Vzbid0IGdldCB1cGRhdGVkIGFmdGVyIGVhY2ggY29tbWFuZC4KKwkJCS0gVGhlcmUgaXMgbm8gbm9ybWFsIGNvbW1hbmQtbGluZSBlZGl0aW5nLgorCQkJLSBNYXBwaW5ncyBhbmQgYWJicmV2aWF0aW9ucyBhcmUgbm90IHVzZWQuCisJCQlJbiBmYWN0LCB5b3UgYXJlIGVkaXRpbmcgdGhlIGxpbmVzIHdpdGggdGhlICJzdGFuZGFyZCIKKwkJCWxpbmUtaW5wdXQgZWRpdGluZyBjb21tYW5kcyAoPERlbD4gb3IgPEJTPiB0byBlcmFzZSwKKwkJCUNUUkwtVSB0byBraWxsIHRoZSB3aG9sZSBsaW5lKS4KKwkJCVZpbSB3aWxsIGVudGVyIHRoaXMgbW9kZSBieSBkZWZhdWx0IGlmIGl0J3MgaW52b2tlZCBhcworCQkJImV4IiBvbiB0aGUgY29tbWFuZC1saW5lLgorCQkJVXNlIHRoZSAiOnZpIiBjb21tYW5kIHw6dmlzdWFsfCB0byBleGl0ICJFeCIgbW9kZS4KKwkJCU5vdGU6IEluIG9sZGVyIHZlcnNpb25zIG9mIFZpbSAiUSIgZm9ybWF0dGVkIHRleHQsCisJCQl0aGF0IGlzIG5vdyBkb25lIHdpdGggfGdxfC4gIEJ1dCBpZiB5b3UgdXNlIHRoZQorCQkJfHZpbXJjX2V4YW1wbGUudmltfCBzY3JpcHQgIlEiIHdvcmtzIGxpa2UgImdxIi4KKworCQkJCQkqZ1EqCitnUQkJCVN3aXRjaCB0byAiRXgiIG1vZGUsIGJ1dCByZWFsbHkgYmVoYXZlIGxpa2UgdHlwaW5nICI6IgorCQkJY29tbWFuZHMgYWZ0ZXIgYW5vdGhlci4gIEFsbCBjb21tYW5kIGxpbmUgZWRpdGluZywKKwkJCWNvbXBsZXRpb24gZXRjLiBpcyBhdmFpbGFibGUuCisJCQlVc2UgdGhlICI6dmkiIGNvbW1hbmQgfDp2aXN1YWx8IHRvIGV4aXQgIkV4IiBtb2RlLgorCQkJe25vdCBpbiBWaX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBUaGUgd2luZG93IGNvbnRlbnRzCQkJCQkqd2luZG93LWNvbnRlbnRzKgorCitJbiBOb3JtYWwgbW9kZSBhbmQgSW5zZXJ0L1JlcGxhY2UgbW9kZSB0aGUgc2NyZWVuIHdpbmRvdyB3aWxsIHNob3cgdGhlIGN1cnJlbnQKK2NvbnRlbnRzIG9mIHRoZSBidWZmZXI6IFdoYXQgWW91IFNlZSBJcyBXaGF0IFlvdSBHZXQuICBUaGVyZSBhcmUgdHdvCitleGNlcHRpb25zOgorLSBXaGVuIHRoZSAnY3BvcHRpb25zJyBvcHRpb24gY29udGFpbnMgJyQnLCBhbmQgdGhlIGNoYW5nZSBpcyB3aXRoaW4gb25lIGxpbmUsCisgIHRoZSB0ZXh0IGlzIG5vdCBkaXJlY3RseSBkZWxldGVkLCBidXQgYSAnJCcgaXMgcHV0IGF0IHRoZSBsYXN0IGRlbGV0ZWQKKyAgY2hhcmFjdGVyLgorLSBXaGVuIGluc2VydGluZyB0ZXh0IGluIG9uZSB3aW5kb3csIG90aGVyIHdpbmRvd3Mgb24gdGhlIHNhbWUgdGV4dCBhcmUgbm90CisgIHVwZGF0ZWQgdW50aWwgdGhlIGluc2VydCBpcyBmaW5pc2hlZC4KK3tWaTogVGhlIHNjcmVlbiBpcyBub3QgYWx3YXlzIHVwZGF0ZWQgb24gc2xvdyB0ZXJtaW5hbHN9CisKK0xpbmVzIGxvbmdlciB0aGFuIHRoZSB3aW5kb3cgd2lkdGggd2lsbCB3cmFwLCB1bmxlc3MgdGhlICd3cmFwJyBvcHRpb24gaXMgb2ZmCisoc2VlIGJlbG93KS4gIFRoZSAnbGluZWJyZWFrJyBvcHRpb24gY2FuIGJlIHNldCB0byB3cmFwIGF0IGEgYmxhbmsgY2hhcmFjdGVyLgorCitJZiB0aGUgd2luZG93IGhhcyByb29tIGFmdGVyIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGJ1ZmZlciwgVmltIHdpbGwgc2hvdyAnficgaW4KK3RoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGxhc3QgbGluZXMgaW4gdGhlIHdpbmRvdywgbGlrZSB0aGlzOiA+CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfHNvbWUgbGluZQkJfAorCXxsYXN0IGxpbmUJCXwKKwl8fgkJCXwKKwl8fgkJCXwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RodXMgdGhlICd+JyBsaW5lcyBpbmRpY2F0ZSB0aGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciB3YXMgcmVhY2hlZC4KKworSWYgdGhlIGxhc3QgbGluZSBpbiBhIHdpbmRvdyBkb2Vzbid0IGZpdCwgVmltIHdpbGwgaW5kaWNhdGUgdGhpcyB3aXRoIGEgJ0AnIGluCit0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBsYXN0IGxpbmVzIGluIHRoZSB3aW5kb3csIGxpa2UgdGhpczogPgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxmaXJzdCBsaW5lCQl8CisJfHNlY29uZCBsaW5lCQl8CisJfEAJCQl8CisJfEAJCQl8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUaHVzIHRoZSAnQCcgbGluZXMgaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBhIGxpbmUgdGhhdCBkb2Vzbid0IGZpdCBpbiB0aGUKK3dpbmRvdy4KKworV2hlbiB0aGUgImxhc3RsaW5lIiBmbGFnIGlzIHByZXNlbnQgaW4gdGhlICdkaXNwbGF5JyBvcHRpb24sIHlvdSB3aWxsIG5vdCBzZWUKKydAJyBjaGFyYWN0ZXJzIGF0IHRoZSBsZWZ0IHNpZGUgb2Ygd2luZG93LiAgSWYgdGhlIGxhc3QgbGluZSBkb2Vzbid0IGZpdAorY29tcGxldGVseSwgb25seSB0aGUgcGFydCB0aGF0IGZpdHMgaXMgc2hvd24sIGFuZCB0aGUgbGFzdCB0aHJlZSBjaGFyYWN0ZXJzIG9mCit0aGUgbGFzdCBsaW5lIGFyZSByZXBsYWNlZCB3aXRoICJAQEAiLCBsaWtlIHRoaXM6ID4KKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8Zmlyc3QgbGluZQkJfAorCXxzZWNvbmQgbGluZQkJfAorCXxhIHZlcnkgbG9uZyBsaW5lIHRoYXQgZHwKKwl8b2Vzbid0IGZpdCBpbiB0aGUgd2lAQEB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitJZiB0aGVyZSBpcyBhIHNpbmdsZSBsaW5lIHRoYXQgaXMgdG9vIGxvbmcgdG8gZml0IGluIHRoZSB3aW5kb3csIHRoaXMgaXMgYQorc3BlY2lhbCBzaXR1YXRpb24uICBWaW0gd2lsbCBzaG93IG9ubHkgcGFydCBvZiB0aGUgbGluZSwgYXJvdW5kIHdoZXJlIHRoZQorY3Vyc29yIGlzLiAgVGhlcmUgYXJlIG5vIHNwZWNpYWwgY2hhcmFjdGVycyBzaG93biwgc28gdGhhdCB5b3UgY2FuIGVkaXQgYWxsCitwYXJ0cyBvZiB0aGlzIGxpbmUuCit7Vmk6IGdpdmVzIGFuICJpbnRlcm5hbCBlcnJvciIgb24gbGluZXMgdGhhdCBkbyBub3QgZml0IGluIHRoZSB3aW5kb3d9CisKK1RoZSAnQCcgb2NjYXNpb24gaW4gdGhlICdoaWdobGlnaHQnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzZXQgc3BlY2lhbAoraGlnaGxpZ2h0aW5nIGZvciB0aGUgJ0AnIGFuZCAnficgY2hhcmFjdGVycy4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8KK2Rpc3Rpbmd1aXNoIHRoZW0gZnJvbSByZWFsIGNoYXJhY3RlcnMgaW4gdGhlIGJ1ZmZlci4KKworVGhlICdzaG93YnJlYWsnIG9wdGlvbiBjb250YWlucyB0aGUgc3RyaW5nIHRvIHB1dCBpbiBmcm9udCBvZiB3cmFwcGVkIGxpbmVzLgorCisJCQkJCQkJKndyYXAtb2ZmKgorSWYgdGhlICd3cmFwJyBvcHRpb24gaXMgb2ZmLCBsb25nIGxpbmVzIHdpbGwgbm90IHdyYXAuICBPbmx5IHRoZSBwYXJ0IHRoYXQKK2ZpdHMgb24gdGhlIHNjcmVlbiBpcyBzaG93bi4gIElmIHRoZSBjdXJzb3IgaXMgbW92ZWQgdG8gYSBwYXJ0IG9mIHRoZSBsaW5lCit0aGF0IGlzIG5vdCBzaG93biwgdGhlIHNjcmVlbiBpcyBzY3JvbGxlZCBob3Jpem9udGFsbHkuICBUaGUgYWR2YW50YWdlIG9mCit0aGlzIG1ldGhvZCBpcyB0aGF0IGNvbHVtbnMgYXJlIHNob3duIGFzIHRoZXkgYXJlIGFuZCBsaW5lcyB0aGF0IGNhbm5vdCBmaXQKK29uIHRoZSBzY3JlZW4gY2FuIGJlIGVkaXRlZC4gIFRoZSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB5b3UgY2Fubm90IHNlZSBhbGwgdGhlCitjaGFyYWN0ZXJzIG9mIGEgbGluZSBhdCBvbmNlLiAgVGhlICdzaWRlc2Nyb2xsJyBvcHRpb24gY2FuIGJlIHNldCB0byB0aGUKK21pbmltYWwgbnVtYmVyIG9mIGNvbHVtbnMgdG8gc2Nyb2xsLiAge1ZpOiBoYXMgbm8gJ3dyYXAnIG9wdGlvbn0KKworQWxsIG5vcm1hbCBBU0NJSSBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgZGlyZWN0bHkgb24gdGhlIHNjcmVlbi4gIFRoZSA8VGFiPgoraXMgcmVwbGFjZWQgd2l0aCB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0aGF0IGl0IHJlcHJlc2VudHMuICBPdGhlciBub24tcHJpbnRpbmcKK2NoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIHdpdGggIl57Y2hhcn0iLCB3aGVyZSB7Y2hhcn0gaXMgdGhlIG5vbi1wcmludGluZworY2hhcmFjdGVyIHdpdGggNjQgYWRkZWQuICBUaHVzIGNoYXJhY3RlciA3IChiZWxsKSB3aWxsIGJlIHNob3duIGFzICJeRyIuCitDaGFyYWN0ZXJzIGJldHdlZW4gMTI3IGFuZCAxNjAgYXJlIHJlcGxhY2VkIHdpdGggIn57Y2hhcn0iLCB3aGVyZSB7Y2hhcn0gaXMKK3RoZSBjaGFyYWN0ZXIgd2l0aCA2NCBzdWJ0cmFjdGVkLiAgVGhlc2UgY2hhcmFjdGVycyBvY2N1cHkgbW9yZSB0aGFuIG9uZQorcG9zaXRpb24gb24gdGhlIHNjcmVlbi4gIFRoZSBjdXJzb3IgY2FuIG9ubHkgYmUgcG9zaXRpb25lZCBvbiB0aGUgZmlyc3Qgb25lLgorCitJZiB5b3Ugc2V0IHRoZSAnbnVtYmVyJyBvcHRpb24sIGFsbCBsaW5lcyB3aWxsIGJlIHByZWNlZGVkIHdpdGggdGhlaXIKK251bWJlci4gIFRpcDogSWYgeW91IGRvbid0IGxpa2Ugd3JhcHBpbmcgbGluZXMgdG8gbWl4IHdpdGggdGhlIGxpbmUgbnVtYmVycywKK3NldCB0aGUgJ3Nob3dicmVhaycgb3B0aW9uIHRvIGVpZ2h0IHNwYWNlczoKKwkiOnNldCBzaG93YnJlYWs9XCBcIFwgXCBcIFwgXCBcICIKKworSWYgeW91IHNldCB0aGUgJ2xpc3QnIG9wdGlvbiwgPFRhYj4gY2hhcmFjdGVycyB3aWxsIG5vdCBiZSBzaG93biBhcyBzZXZlcmFsCitzcGFjZXMsIGJ1dCBhcyAiXkkiLiAgQSAnJCcgd2lsbCBiZSBwbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSwgc28geW91IGNhbgorZmluZCB0cmFpbGluZyBibGFua3MuCisKK0luIENvbW1hbmQtbGluZSBtb2RlIG9ubHkgdGhlIGNvbW1hbmQtbGluZSBpdHNlbGYgaXMgc2hvd24gY29ycmVjdGx5LiAgVGhlCitkaXNwbGF5IG9mIHRoZSBidWZmZXIgY29udGVudHMgaXMgdXBkYXRlZCBhcyBzb29uIGFzIHlvdSBnbyBiYWNrIHRvIENvbW1hbmQKK21vZGUuCisKK1RoZSBsYXN0IGxpbmUgb2YgdGhlIHdpbmRvdyBpcyB1c2VkIGZvciBzdGF0dXMgYW5kIG90aGVyIG1lc3NhZ2VzLiAgVGhlCitzdGF0dXMgbWVzc2FnZXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYW4gb3B0aW9uIGlzIG9uOgorCitzdGF0dXMgbWVzc2FnZQkJCW9wdGlvbgkgICAgIGRlZmF1bHQJVW5peCBkZWZhdWx0CX4KK2N1cnJlbnQgbW9kZQkJCSdzaG93bW9kZScJb24JICAgIG9uCitjb21tYW5kIGNoYXJhY3RlcnMJCSdzaG93Y21kJwlvbgkgICAgb2ZmCitjdXJzb3IgcG9zaXRpb24JCQkncnVsZXInCQlvZmYJICAgIG9mZgorCitUaGUgY3VycmVudCBtb2RlIGlzICItLSBJTlNFUlQgLS0iIG9yICItLSBSRVBMQUNFIC0tIiwgc2VlIHwnc2hvd21vZGUnfC4gIFRoZQorY29tbWFuZCBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB0aGF0IHlvdSB0eXBlZCBidXQgd2VyZSBub3QgdXNlZCB5ZXQuICB7Vmk6IGRvZXMKK25vdCBzaG93IHRoZSBjaGFyYWN0ZXJzIHlvdSB0eXBlZCBvciB0aGUgY3Vyc29yIHBvc2l0aW9ufQorCitJZiB5b3UgaGF2ZSBhIHNsb3cgdGVybWluYWwgeW91IGNhbiBzd2l0Y2ggb2ZmIHRoZSBzdGF0dXMgbWVzc2FnZXMgdG8gc3BlZWQKK3VwIGVkaXRpbmc6CisJOnNldCBub3NjIG5vcnUgbm9zbQorCitJZiB0aGVyZSBpcyBhbiBlcnJvciwgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIHNob3duIGZvciBhdCBsZWFzdCBvbmUgc2Vjb25kCisoaW4gcmV2ZXJzZSB2aWRlbykuICB7Vmk6IGVycm9yIG1lc3NhZ2VzIG1heSBiZSBvdmVyd3JpdHRlbiB3aXRoIG90aGVyCittZXNzYWdlcyBiZWZvcmUgeW91IGhhdmUgYSBjaGFuY2UgdG8gcmVhZCB0aGVtfQorCitTb21lIGNvbW1hbmRzIHNob3cgaG93IG1hbnkgbGluZXMgd2VyZSBhZmZlY3RlZC4gIEFib3ZlIHdoaWNoIHRocmVzaG9sZCB0aGlzCitoYXBwZW5zIGNhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlICdyZXBvcnQnIG9wdGlvbiAoZGVmYXVsdCAyKS4KKworT24gdGhlIEFtaWdhIFZpbSB3aWxsIHJ1biBpbiBhIENMSSB3aW5kb3cuICBUaGUgbmFtZSBWaW0gYW5kIHRoZSBmdWxsIG5hbWUgb2YKK3RoZSBjdXJyZW50IGZpbGUgbmFtZSB3aWxsIGJlIHNob3duIGluIHRoZSB0aXRsZSBiYXIuICBXaGVuIHRoZSB3aW5kb3cgaXMKK3Jlc2l6ZWQsIFZpbSB3aWxsIGF1dG9tYXRpY2FsbHkgcmVkcmF3IHRoZSB3aW5kb3cuICBZb3UgbWF5IG1ha2UgdGhlIHdpbmRvdyBhcworc21hbGwgYXMgeW91IGxpa2UsIGJ1dCBpZiBpdCBnZXRzIHRvbyBzbWFsbCBub3QgYSBzaW5nbGUgbGluZSB3aWxsIGZpdCBpbiBpdC4KK01ha2UgaXQgYXQgbGVhc3QgNDAgY2hhcmFjdGVycyB3aWRlIHRvIGJlIGFibGUgdG8gcmVhZCBtb3N0IG1lc3NhZ2VzIG9uIHRoZQorbGFzdCBsaW5lLgorCitPbiBtb3N0IFVuaXggc3lzdGVtcywgcmVzaXppbmcgdGhlIHdpbmRvdyBpcyByZWNvZ25pemVkIGFuZCBoYW5kbGVkIGNvcnJlY3RseQorYnkgVmltLiAge1ZpOiBub3Qgb2t9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gRGVmaW5pdGlvbnMJCQkJCQkqZGVmaW5pdGlvbnMqCisKKyAgc2NyZWVuCQlUaGUgd2hvbGUgYXJlYSB0aGF0IFZpbSB1c2VzIHRvIHdvcmsgaW4uICBUaGlzIGNhbiBiZQorCQkJYSB0ZXJtaW5hbCBlbXVsYXRvciB3aW5kb3cuICBBbHNvIGNhbGxlZCAidGhlIFZpbQorCQkJd2luZG93Ii4KKyAgd2luZG93CQlBIHZpZXcgb24gYSBidWZmZXIuCisKK0Egc2NyZWVuIGNvbnRhaW5zIG9uZSBvciBtb3JlIHdpbmRvd3MsIHNlcGFyYXRlZCBieSBzdGF0dXMgbGluZXMgYW5kIHdpdGggdGhlCitjb21tYW5kIGxpbmUgYXQgdGhlIGJvdHRvbS4KKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworc2NyZWVuCXwgd2luZG93IDEJfCB3aW5kb3cgMgl8CisJfAkJfAkJfAorCXwJCXwJCXwKKwl8PSBzdGF0dXMgbGluZSA9fD0gc3RhdHVzIGxpbmUgPXwKKwl8IHdpbmRvdyAzCQkJfAorCXwJCQkJfAorCXwJCQkJfAorCXw9PT09IHN0YXR1cyBsaW5lID09PT09PT09PT09PT09fAorCXxjb21tYW5kIGxpbmUJCQl8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSBjb21tYW5kIGxpbmUgaXMgYWxzbyB1c2VkIGZvciBtZXNzYWdlcy4gIEl0IHNjcm9sbHMgdXAgdGhlIHNjcmVlbiB3aGVuCit0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIGNvbW1hbmQgbGluZS4KKworQSBkaWZmZXJlbmNlIGlzIG1hZGUgYmV0d2VlbiBmb3VyIHR5cGVzIG9mIGxpbmVzOgorCisgIGJ1ZmZlciBsaW5lcwkJVGhlIGxpbmVzIGluIHRoZSBidWZmZXIuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZQorCQkJbGluZXMgYXMgdGhleSBhcmUgcmVhZCBmcm9tL3dyaXR0ZW4gdG8gYSBmaWxlLiAgVGhleQorCQkJY2FuIGJlIHRob3VzYW5kcyBvZiBjaGFyYWN0ZXJzIGxvbmcuCisgIGxvZ2ljYWwgbGluZXMJCVRoZSBidWZmZXIgbGluZXMgd2l0aCBmb2xkaW5nIGFwcGxpZWQuICBCdWZmZXIgbGluZXMKKwkJCWluIGEgY2xvc2VkIGZvbGQgYXJlIGNoYW5nZWQgdG8gYSBzaW5nbGUgbG9naWNhbCBsaW5lOgorCQkJIistLSA5OSBsaW5lcyBmb2xkZWQiLiAgVGhleSBjYW4gYmUgdGhvdXNhbmRzIG9mCisJCQljaGFyYWN0ZXJzIGxvbmcuCisgIHdpbmRvdyBsaW5lcwkJVGhlIGxpbmVzIGRpc3BsYXllZCBpbiBhIHdpbmRvdzogQSByYW5nZSBvZiBsb2dpY2FsCisJCQlsaW5lcyB3aXRoIHdyYXBwaW5nLCBsaW5lIGJyZWFrcywgZXRjLiAgYXBwbGllZC4gIFRoZXkKKwkJCWNhbiBvbmx5IGJlIGFzIGxvbmcgYXMgdGhlIHdpZHRoIG9mIHRoZSB3aW5kb3cgYWxsb3dzLAorCQkJbG9uZ2VyIGxpbmVzIGFyZSB3cmFwcGVkIG9yIHRydW5jYXRlZC4KKyAgc2NyZWVuIGxpbmVzCQlUaGUgbGluZXMgb2YgdGhlIHNjcmVlbiB0aGF0IFZpbSB1c2VzLiAgQ29uc2lzdHMgb2YKKwkJCXRoZSB3aW5kb3cgbGluZXMgb2YgYWxsIHdpbmRvd3MsIHdpdGggc3RhdHVzIGxpbmVzCisJCQlhbmQgdGhlIGNvbW1hbmQgbGluZSBhZGRlZC4gIFRoZXkgY2FuIG9ubHkgYmUgYXMgbG9uZworCQkJYXMgdGhlIHdpZHRoIG9mIHRoZSBzY3JlZW4gYWxsb3dzLiAgV2hlbiB0aGUgY29tbWFuZAorCQkJbGluZSBnZXRzIGxvbmdlciBpdCB3cmFwcyBhbmQgbGluZXMgYXJlIHNjcm9sbGVkIHRvCisJCQltYWtlIHJvb20uCisKK2J1ZmZlciBsaW5lcwlsb2dpY2FsIGxpbmVzCXdpbmRvdyBsaW5lcwlzY3JlZW4gbGluZXMgfgorCisxLiBvbmUJCTEuIG9uZQkJMS4gKy0tIGZvbGRlZCAgIDEuICArLS0gZm9sZGVkCisyLiB0d28JCTIuICstLSBmb2xkZWQJMi4gZml2ZQkJMi4gIGZpdmUKKzMuIHRocmVlCTMuIGZpdmUJCTMuIHNpeAkJMy4gIHNpeAorNC4gZm91cgkJNC4gc2l4CQk0LiBzZXZlbgk0LiAgc2V2ZW4KKzUuIGZpdmUJCTUuIHNldmVuCQkJNS4gID09PSBzdGF0dXMgbGluZSA9PT0KKzYuIHNpeAkJCQkJCTYuICBhYWEKKzcuIHNldmVuCQkJCQk3LiAgYmJiCisJCQkJCQk4LiAgY2NjIGNjYyBjCisxLiBhYWEJCTEuIGFhYQkJMS4gYWFhCQk5LiAgY2MKKzIuIGJiYgkJMi4gYmJiCQkyLiBiYmIJCTEwLiBkZGQKKzMuIGNjYyBjY2MgY2NjCTMuIGNjYyBjY2MgY2NjCTMuIGNjYyBjY2MgYwkxMS4gfiAKKzQuIGRkZAkJNC4gZGRkCQk0LiBjYwkJMTIuID09PSBzdGF0dXMgbGluZSA9PT0KKwkJCQk1LiBkZGQJCTEzLiAoY29tbWFuZCBsaW5lKQorCQkJCTYuIH4gCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL21ha2VodG1sLmF3ayBiL3J1bnRpbWUvZG9jL21ha2VodG1sLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWUwNjdlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvbWFrZWh0bWwuYXdrCkBAIC0wLDAgKzEsNzgwIEBACitCRUdJTiAgIHsKKwkjIHNvbWUgaW5pdGlhbGl6YXRpb24gdmFyaWFibGVzCisJYXNjaWlhcnQ9Im5vIjsKKwl3YXNzZXQ9Im5vIjsKKwlsaW5lc2V0PTA7CisJc2FtcGxlPSJubyI7CisJd2hpbGUgKCBnZXRsaW5lIHRpIDwidGFncy5yZWYiID4gMCApIHsKKwkJbmY9c3BsaXQodGksdGFnLCIJIik7CisJCXRhZ2tleVt0YWdbMV1dPSJ5ZXMiO3RhZ3JlZlt0YWdbMV1dPXRhZ1syXTsKKwl9CisJc2tpcF93b3JkWyJhbmQiXT0ieWVzIjsKKwlza2lwX3dvcmRbImJhY2tzcGFjZSJdPSJ5ZXMiOworCXNraXBfd29yZFsiYmVlcCJdPSJ5ZXMiOworCXNraXBfd29yZFsiYnVncyJdPSJ5ZXMiOworCXNraXBfd29yZFsiZGEiXT0ieWVzIjsKKwlza2lwX3dvcmRbImVuZCJdPSJ5ZXMiOworCXNraXBfd29yZFsiZnRwIl09InllcyI7CisJc2tpcF93b3JkWyJnbyJdPSJ5ZXMiOworCXNraXBfd29yZFsiaGVscCJdPSJ5ZXMiOworCXNraXBfd29yZFsiaG9tZSJdPSJ5ZXMiOworCXNraXBfd29yZFsibmV3cyJdPSJ5ZXMiOworCXNraXBfd29yZFsiaW5kZXgiXT0ieWVzIjsKKwlza2lwX3dvcmRbImluc2VydCJdPSJ5ZXMiOworCXNraXBfd29yZFsiaW50byJdPSJ5ZXMiOworCXNraXBfd29yZFsicHV0Il09InllcyI7CisJc2tpcF93b3JkWyJyZWZlcmVuY2UiXT0ieWVzIjsKKwlza2lwX3dvcmRbInNlY3Rpb24iXT0ieWVzIjsKKwlza2lwX3dvcmRbInNwYWNlIl09InllcyI7CisJc2tpcF93b3JkWyJzdGFydGluZyJdPSJ5ZXMiOworCXNraXBfd29yZFsidG9nZ2xlIl09InllcyI7CisJc2tpcF93b3JkWyJ2YXJpb3VzIl09InllcyI7CisJc2tpcF93b3JkWyJ2ZXJzaW9uIl09InllcyI7CisJc2tpcF93b3JkWyJpcyJdPSJ5ZXMiOworfQorIworIyBwcm90ZWN0IHNwZWNpYWwgY2hhcnMKKyMKKy9bPjwm4V0vIHtnc3ViKC8mLywiXFwmYW1wOyIpO2dzdWIoLz4vLCJcXCZndDsiKTtnc3ViKC88LywiXFwmbHQ7Iik7Z3N1Yigi4SIsIlxcJmFhY3V0ZTsiKTt9CisjCisjIGVuZCBvZiBzYW1wbGUgbGluZXMgYnkgbm9uLWJsYW5rIGluIGZpcnN0IGNvbHVtbgorIworc2FtcGxlID09ICJ5ZXMiICYmIHN1YnN0cigkMCwxLDQpID09ICImbHQ7IiB7IHNhbXBsZSA9ICJubyI7IGdzdWIoL14mbHQ7LywgIiAiKTsgfQorc2FtcGxlID09ICJ5ZXMiICYmIHN1YnN0cigkMCwxLDEpICE9ICIgIiAmJiBzdWJzdHIoJDAsMSwxKSAhPSAiCSIgJiYgbGVuZ3RoKCQwKSA+IDAgeyBzYW1wbGUgPSAibm8iIH0KKyMKKyMgc2FtcGxlIGxpbmVzIHByaW50ZWQgYm9sZCB1bmxlc3MgZW1wdHkuLi4KKyMKK3NhbXBsZSA9PSAieWVzIiAmJiAkMCA9PSIiIHsgcHJpbnQgIiI7IG5leHQ7IH0KK3NhbXBsZSA9PSAieWVzIiAmJiAkMCAhPSIiIHsgcHJpbnQgIjxCPiIgJDAgIjwvQj4iOyBuZXh0OyB9CisjCisjIHN0YXJ0IG9mIHNhbXBsZSBsaW5lcyBpbiBuZXh0IGxpbmUKKyMKKyQwID09ICImZ3Q7IiB7IHNhbXBsZSA9ICJ5ZXMiOyBwcmludCAiIjsgbmV4dDsgfQorc3Vic3RyKCQwLGxlbmd0aCgkMCktNCw1KSA9PSAiICZndDsiIHsgc2FtcGxlID0gInllcyI7IGdzdWIoLyAmZ3Q7JC8sICIiKTsgfQorIworIyBoZWFkZXIgbGluZXMgcHJpbnRlZCBib2xkLCBjb2xvcmVkCisjCitzdWJzdHIoJDAsbGVuZ3RoKCQwKSwxKSA9PSAifiIgeyBwcmludCAiPEI+PEZPTlQgQ09MT1I9XCJQVVJQTEVcIj4iIHN1YnN0cigkMCwxLGxlbmd0aCgkMCktMSkgIjwvRk9OVD48L0I+IjsgbmV4dDsgfQorIworI2FkIGhvYyBjb2RlCisjCisvXiJcfFwmIC8ge2dzdWIoL1x8LywiXFwmIzEyNDsiKTsgfQorLyA9IGIgLyB7Z3N1YigvIGIgLywiIFxcJiM5ODsgIik7IH0KKyMKKyMgb25lIGxldHRlciB0YWcKKyMKKy9bIAldXCouXCpbIAldLyB7Z3N1YigvXCovLCJaV1daIik7IH0KKyMKKyMgaXNvbGF0ZWQgIioiCisjCisvWyAJXVwqWyAJXS8ge2dzdWIoLyBcKiAvLCIgXFwmIzQyOyAiKTsKKwkJICAgIGdzdWIoLyBcKgkvLCIgXFwmIzQyOwkiKTsKKwkJICAgIGdzdWIoLwlcKiAvLCIJXFwmIzQyOyAiKTsKKwkJICAgIGdzdWIoLwlcKgkvLCIJXFwmIzQyOwkiKTsgfQorIworIyB0YWcgc3RhcnQKKyMKKy9bIAldXCpbXiAJXS8Je2dzdWIoLyBcKi8sIiBaV1daIik7Z3N1YigvCVwqLywiCVpXV1oiKTt9CisvXlwqW14gCV0vIAkge2dzdWIoL15cKi8sIlpXV1oiKTt9CisjCisjIHRhZyBlbmQKKyMKKy9bXiAJXVwqJC8gCSB7Z3N1YigvXCokLywiWldXWiIpO30KKy9bXiBcLwldXCpbIAldLyAge2dzdWIoL1wqLywiWldXWiIpO30KKyMKKyMgaXNvbGF0ZWQgInwiCisjCisvWyAJXVx8WyAJXS8ge2dzdWIoLyBcfCAvLCIgXFwmIzEyNDsgIik7CisJCSAgICBnc3ViKC8gXHwJLywiIFxcJiMxMjQ7CSIpOworCQkgICAgZ3N1YigvCVx8IC8sIglcXCYjMTI0OyAiKTsKKwkJICAgIGdzdWIoLwlcfAkvLCIJXFwmIzEyNDsJIik7IH0KKy8nXHwnLyB7IGdzdWIoLydcfCcvLCInXFwmIzEyNDsnIik7IH0KKy9cXlZcfC8ge2dzdWIoL1xeVlx8LywiXlZcXCYjMTI0OyIpO30KKy8gXFxcfAkvIHtnc3ViKC9cfC8sIlxcJiMxMjQ7Iik7fQorIworIyBvbmUgbGV0dGVyIHBpcGVzIGFuZCAifHwiIGZhbHNlIHBpcGUgKGRpZ3JhcGhzKQorIworL1sgCV1cfC5cfFsgCV0vICYmIGFzY2lpYXJ0ID09ICJubyIge2dzdWIoL1x8LywiWVhYWSIpOyB9CisvXlx8Llx8WyAJXS8ge2dzdWIoL1x8LywiWVhYWSIpOyB9CisvXHxcfC8ge2dzdWIoL1x8XHwvLCJcXCYjMTI0O1xcJiMxMjQ7Iik7IH0KKy9ec2hlbGxwaXBlLyB7Z3N1YigvXHwvLCJcXCYjMTI0OyIpOyB9CisjCisjIHBpcGUgc3RhcnQKKyMKKy9bIAldXHxbXiAJXS8gJiYgYXNjaWlhcnQgPT0gIm5vIgl7Z3N1YigvIFx8LywiIFlYWFkiKTsKKwkJCWdzdWIoLwlcfC8sIglZWFhZIik7fQorL15cfFteIAldLyAJIHtnc3ViKC9eXHwvLCJZWFhZIik7fQorIworIyBwaXBlIGVuZAorIworL1teIAldXHwkLyAmJiBhc2NpaWFydCA9PSAibm8iIHtnc3ViKC9cfCQvLCJZWFhZIik7fQorL1teIAldXHxbcyAsLik7CV0vICYmIGFzY2lpYXJ0ID09ICJubyIge2dzdWIoL1x8LywiWVhYWSIpO30KKy9bXiAJXVx8XS8gJiYgYXNjaWlhcnQgPT0gIm5vIiB7Z3N1YigvXHwvLCJZWFhZIik7fQorIworIyB2YXJpb3VzCisjCisvJyIvIAl7Z3N1YigvJyIvLCJcXCYjMzk7XFwmIzM0OyciKTt9CisvIi8Je2dzdWIoLyIvLCJcXCZxdW90OyIpO30KKy8lLwl7Z3N1YigvJS8sIlxcJiMzNzsiKTt9CisKK05SID09IDEgeyBuZj1zcGxpdChGSUxFTkFNRSxmLCIuIikKKwlwcmludCAiPEhUTUw+IjsKKworCXByaW50ICI8SEVBRD4iCisJaWYgKCBGSUxFTkFNRSA9PSAibWJ5dGUudHh0IiApIHsKKwkgICAgIyBuZWVkcyB1dGYtOCBhcyB1c2VzIG1hbnkgbGFuZ3VhZ2VzCisJICAgIHByaW50ICI8TUVUQSBIVFRQLUVRVUlWPVwiQ29udGVudC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiPiI7CisJfSBlbHNlIHsKKwkgICAgIyBjb21tb24gY2FzZSAtIExhdGluMQorCSAgICBwcmludCAiPE1FVEEgSFRUUC1FUVVJVj1cIkNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiPiI7CisJfQorCXByaW50ICI8VElUTEU+VmltIGRvY3VtZW50YXRpb246ICIgZlsxXSAiPC9USVRMRT4iOworCXByaW50ICI8L0hFQUQ+IjsKKworCXByaW50ICI8Qk9EWSBCR0NPTE9SPVwiI2ZmZmZmZlwiPiI7CisJcHJpbnQgIjxIMT5WaW0gZG9jdW1lbnRhdGlvbjogIiBmWzFdICI8L0gxPiI7CisJcHJpbnQgIjxBIE5BTUU9XCJ0b3BcIj48L0E+IjsKKwlpZiAoIEZJTEVOQU1FICE9ICJoZWxwLnR4dCIgKSB7CisJICBwcmludCAiPEEgSFJFRj1cImhlbHAuaHRtbFwiPm1haW4gaGVscCBmaWxlPC9BPlxuIjsKKwl9CisJcHJpbnQgIjxIUj4iOworCXByaW50ICI8UFJFPiI7CisJZmlsZW5hbWU9ZlsxXSIuaHRtbCI7Cit9CisKKyMgc2V0IHRvIGEgbG93IHZhbHVlIHRvIHRlc3QgZm9yIGZldyBsaW5lcyBvZiB0ZXh0CisjIE5SID09IDk5OTk5IHsgZXhpdDsgfQorCisjIGlnbm9yZSB1bmRlcmxpbmVzIGFuZCB0YWdzCitzdWJzdHIoJDAsMSw1KSA9PSAiIHZpbToiIHsgbmV4dDsgfQorc3Vic3RyKCQwLDEsNCkgPT0gInZpbToiIHsgbmV4dDsgfQorIyBrZWVwIGp1c3Qgd2hvbGUgbGluZXMgb2YgIi0iLCAiPSIKK3N1YnN0cigkMCwxLDMpID09ICI9PT0iICYmIHN1YnN0cigkMCw3NSwxKSAhPSAiPSIgeyBuZXh0OyB9CitzdWJzdHIoJDAsMSwzKSA9PSAiLS0tIiAmJiBzdWJzdHIoJDAsNzUsMSkgIT0gIi0iIHsgbmV4dDsgfQorCit7CisJbnN0YXIgPSBzcGxpdCgkMCxzLCJaV1daIik7CisJZm9yICggaT0yIDsgaSA8PSBuc3RhciA7IGk9aSsyICkgeworCQluYmxhPXNwbGl0KHNbaV0sYmxhdGEsIlsgCV0iKTsKKwkJaWYgKCBuYmxhID4gMSApIHsKKwkJCWdzdWIoIlpXV1oiLCIqIik7CisJCQluc3RhciA9IHNwbGl0KCQwLHMsIlpXV1oiKTsKKwkJfQorCX0KKwlucGlwZSA9IHNwbGl0KCQwLHAsIllYWFkiKTsKKwlmb3IgKCBpPTIgOyBpIDw9IG5waXBlIDsgaT1pKzIgKSB7CisJCW5ibGE9c3BsaXQocFtpXSxibGF0YSwiWyAJXSIpOworCQlpZiAoIG5ibGEgPiAxICkgeworCQkJZ3N1YigiWVhYWSIsInwiKTsKKwkJCW50YWJzID0gc3BsaXQoJDAscCwiWVhYWSIpOworCQl9CisJfQorfQorCisKK0ZJTEVOQU1FID09ICJndWkudHh0IiAmJiBhc2NpaWFydCA9PSAibm8iICBcCisJICAmJiAkMCB+IC9cKy0tLS0vICYmICQwIH4gLy0tLS1cKy8geworCWFzY2lpYXJ0PSAieWVzIjsKKwlhc2NpaWNudD0wOworCX0KKworRklMRU5BTUUgPT0gInF1b3Rlcy50eHQiICYmIGFzY2lpYXJ0ID09ICJubyIgXAorCSAgJiYgJDAgfiAvSW4gc3VtbWFyeTovIHsKKwlhc2NpaWFydD0gInllcyI7CisJYXNjaWljbnQ9MDsKKwl9CisKK0ZJTEVOQU1FID09ICJ1c3JfMjAudHh0IiAmJiBhc2NpaWFydCA9PSAibm8iIFwKKwkgICYmICQwIH4gL2FuIGVtcHR5IGxpbmUgYXQgdGhlIGVuZDovIHsKKwlhc2NpaWFydD0gInllcyI7CisJYXNjaWljbnQ9MDsKKwl9CisKK2FzY2lpYXJ0ID09ICJ5ZXMiICYmICQwPT0iIiB7IGFzY2lpY250Kys7IH0KKworYXNjaWlhcnQgPT0gInllcyIgJiYgYXNjaWljbnQgPT0gMiB7IGFzY2lpYXJ0ID0gIm5vIjsgfQorCithc2NpaWFydCA9PSAieWVzIiB7IG5waXBlID0gMTsgfQorIwl7IHByaW50IE5SICIgPD0+ICIgYXNjaWlhcnQ7IH0KKworIworIyBsaW5lIGNvbnRhaW5zICAiKiIKKyMKK25zdGFyID4gMiAmJiBucGlwZSA8IDMgeworCXByaW50ZigiXG4iKTsKKwlmb3IgKCBpPTE7IGkgPD0gbnN0YXIgOyBpPWkrMiApIHsKKwkJdGhpcz1zW2ldOworCQlwdXRfdGhpcygpOworCQlpaT1pKzE7CisJCW5ibGEgPSBzcGxpdChzW2lpXSxibGF0YSwiICIpOworCQlpZiAoIGlpIDw9IG5zdGFyICkgeworCQkJaWYgKCBuYmxhID09IDEgJiYgc3Vic3RyKHNbaWldLGxlbmd0aChzW2lpXSksMSkgIT0gIiAiICkgeworCQkJcHJpbnRmKCIqPEEgTkFNRT1cIiVzXCI+PC9BPiIsc1tpaV0pOworCQkJCXByaW50ZigiPEI+JXM8L0I+KiIsc1tpaV0pOworCQkJfSBlbHNlIHsKKwkJCXByaW50ZigiKiVzKiIsc1tpaV0pOworCQkJfQorCQl9CisJfQorCXByaW50ZigiXG4iKTsKKwluZXh0OworCX0KKyMKKyMgbGluZSBjb250YWlucyAifCIKKyMKK25waXBlID4gMiAmJiBuc3RhciA8IDMgeworCWlmICAoIG5waXBlJTIgPT0gMCApIHsKKwkJZm9yICggaT0xOyBpIDwgbnBpcGUgOyBpKysgKSB7CisJCQlnc3ViKCJaV1daIiwiKiIscFtpXSk7CisJCQlwcmludGYoIiVzfCIscFtpXSk7CisJCX0KKwkJcHJpbnRmKCIlc1xuIixwW25waXBlXSk7CisJCW5leHQ7CisJCX0KKwlmb3IgKCBpPTE7IGkgPD0gbnBpcGUgOyBpKysgKQorCQl7CisJCWlmICggaSAlIDIgPT0gMSApIHsKKwkJCWdzdWIoIlpXV1oiLCIqIixwW2ldKTsKKwkJCXRoaXM9cFtpXTsKKwkJCXB1dF90aGlzKCk7CisJCQl9CisJCQllbHNlIHsKKwkJCW5mbj1zcGxpdChwW2ldLGYsIi4iKTsKKwkJCWlmICggbmZuID09IDEgfHwgZlsyXSA9PSAiIiB8fCBmWzFdID09ICIiIHx8IGxlbmd0aChmWzJdKSA8IDMgKSB7CisJCQkJZmluZF90YWcxKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQlwcmludGYgInw8QSBIUkVGPVwiIiBmWzFdICIuaHRtbFwiPiIgcFtpXSAiPC9BPnwiOworCQkJCX0KKwkJCX0KKwkJfQorCQlwcmludGYoIlxuIik7CisJCW5leHQ7CisJfQorIworIyBsaW5lIGNvbnRhaW5zIGJvdGggInwiIGFuZCAiKiIKKyMKK25waXBlID4gMiAmJiBuc3RhciA+IDIgeworCXByaW50ZigiXG4iKTsKKwlmb3IgKCBqPTE7IGogPD0gbnN0YXIgOyBqPWorMiApIHsKKwkJbnBpcGUgPSBzcGxpdChzW2pdLHAsIllYWFkiKTsKKwkJaWYgKCBucGlwZSA+IDEgKSB7CisJCQlmb3IgKCBucD0xOyBucDw9bnBpcGU7IG5wPW5wKzIgKSB7CisJCQkJdGhpcz1wW25wXTsKKwkJCQlwdXRfdGhpcygpOworCQkJCWk9bnArMTtmaW5kX3RhZzEoKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXRoaXM9c1tqXTsKKwkJCXB1dF90aGlzKCk7CisJCX0KKwkJamo9aisxOworCQluYmxhID0gc3BsaXQoc1tqal0sYmxhdGEsIiAiKTsKKwkJaWYgKCBqaiA8PSBuc3RhciAmJiBuYmxhID09IDEgJiYgc1tqal0gIT0gIiIgKSB7CisJCXByaW50ZigiKjxBIE5BTUU9XCIlc1wiPjwvQT4iLHNbampdKTsKKwkJCXByaW50ZigiPEI+JXM8L0I+KiIsc1tqal0pOworCQl9IGVsc2UgeworCQkJaWYgKCBzW2pqXSAhPSAiIiApIHsKKwkJCXByaW50ZigiKiVzKiIsc1tqal0pOworCQkJfQorCQl9CisJfQorCXByaW50ZigiXG4iKTsKKwluZXh0OworCX0KKyMKKyMgbGluZSBjb250YWlucyBlLW1haWwgYWRkcmVzcyBqb2huLmRvZUBzb21lLnBsYWNlLmVkdQorIworJDAgfiAvQC8gJiYgJDAgfiAvW2EtekEtWjAtOV1AW2Etel0vIFwKKwl7CisJbmVtYWlsPXNwbGl0KCQwLGVtLCIgIik7CisJaWYgKCBzdWJzdHIoJDAsMSwxKSA9PSAiCSIgKSB7IHByaW50ZigiCSIpOyB9CisJZm9yICggaT0xOyBpIDw9IG5lbWFpbDsgaSsrICkgeworCQlpZiAoIGVtW2ldIH4gL0AvICkgeworCQkJaWYgKCBzdWJzdHIoZW1baV0sMiwzKSA9PSAibHQ7IiAmJiBzdWJzdHIoZW1baV0sbGVuZ3RoKGVtW2ldKS0yLDMpID09ICJndDsiICkgeworCQkJCW1haWxhZGRyPXN1YnN0cihlbVtpXSw1LGxlbmd0aChlbVtpXSktOCk7CisJCQkJcHJpbnRmKCI8QSBIUkVGPVwibWFpbHRvOiVzXCI+Jmx0OyVzJmd0OzwvQT4gIixtYWlsYWRkcixtYWlsYWRkcik7CisJCQl9IGVsc2UgeworCQkJCWlmICggc3Vic3RyKGVtW2ldLDIsMykgPT0gImx0OyIgJiYgc3Vic3RyKGVtW2ldLGxlbmd0aChlbVtpXSktMywzKSA9PSAiZ3Q7IiApIHsKKwkJCQkJbWFpbGFkZHI9c3Vic3RyKGVtW2ldLDUsbGVuZ3RoKGVtW2ldKS05KTsKKwkJCQkJcHJpbnRmKCI8QSBIUkVGPVwibWFpbHRvOiVzXCI+Jmx0OyVzJmd0OzwvQT4lcyAiLG1haWxhZGRyLG1haWxhZGRyLHN1YnN0cihlbVtpXSxsZW5ndGgoZW1baV0pLDEpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGYoIjxBIEhSRUY9XCJtYWlsdG86JXNcIj4lczwvQT4gIixlbVtpXSxlbVtpXSk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJCXByaW50ZigiJXMgIixlbVtpXSk7CisJCX0KKwl9CisJI3ByaW50ICIqKiogIiBOUiAiICIgRklMRU5BTUUgIiAtIHBvc3NpYmxlIG1haWwgcmVmIjsKKwlwcmludGYoIlxuIik7CisJbmV4dDsKKwl9CisjCisjIGxpbmUgY29udGFpbnMgaHR0cCAvIGZ0cCByZWZlcmVuY2UKKyMKKyQwIH4gL2h0dHA6XC9cLy8gfHwgJDAgfiAvZnRwOlwvXC8vIHsKKwlnc3ViKCJVUkw6IiwiIik7CisJZ3N1YigiJmx0OyIsIiIpOworCWdzdWIoIiZndDsiLCIiKTsKKwlnc3ViKCJcXCgiLCIiKTsKKwlnc3ViKCJcXCkiLCIiKTsKKwluZW1haWw9c3BsaXQoJDAsZW0sIiAiKTsKKwlmb3IgKCBpPTE7IGkgPD0gbmVtYWlsOyBpKysgKSB7CisJCWlmICggc3Vic3RyKGVtW2ldLDEsNSkgPT0gImh0dHA6IiB8fAorCSAgICAgCXN1YnN0cihlbVtpXSwxLDQpID09ICJmdHA6IiApIHsKKwkJCWlmICggc3Vic3RyKGVtW2ldLGxlbmd0aChlbVtpXSksMSkgIT0gIi4iICkgeworCQkJCXByaW50ZigiCTxBIEhSRUY9XCIlc1wiPiVzPC9BPiIsZW1baV0sZW1baV0pOworCQkJfSBlbHNlIHsKKwkJCQllbVtpXT1zdWJzdHIoZW1baV0sMSxsZW5ndGgoZW1baV0pLTEpOworCQkJCXByaW50ZigiCTxBIEhSRUY9XCIlc1wiPiVzPC9BPi4iLGVtW2ldLGVtW2ldKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJcHJpbnRmKCIgJXMiLGVtW2ldKTsKKwkJfQorCX0KKwkjcHJpbnQgIioqKiAiIE5SICIgIiBGSUxFTkFNRSAiIC0gcG9zc2libGUgaHR0cCByZWYiOworCXByaW50ZigiXG4iKTsKKwluZXh0OworCX0KKyMKKyMgc29tZSBsaW5lcyBjb250YWlucyBqdXN0IG9uZSAiYWxtb3N0IHJlZ3VsYXIiICIqIi4uLgorIworbnN0YXIgPT0gMiAgeworCXRoaXM9c1sxXTsKKwlwdXRfdGhpcygpOworCXByaW50ZigiKiIpOworCXRoaXM9c1syXTsKKwlwdXRfdGhpcygpOworCXByaW50ZigiXG4iKTsKKwluZXh0OworCX0KKyMKKyMgcmVndWxhciBsaW5lCisjCisJeyBudGFicyA9IHNwbGl0KCQwLHRiLCIJIik7CisJZm9yICggaT0xOyBpIDwgbnRhYnMgOyBpKyspIHsKKwkJdGhpcz10YltpXTsKKwkJcHV0X3RoaXMoKTsKKwkJcHJpbnRmKCIJIik7CisJCX0KKwl0aGlzPXRiW250YWJzXTsKKwlwdXRfdGhpcygpOworCXByaW50ZigiXG4iKTsKKwl9CisKKworYXNjaWlhcnQgPT0gInllcyIgICYmICQwIH4gL1wrLVwrLS0vICBcCisJJiYgJDAgfiAic2Nyb2xsYmFyIiB7IGFzY2lpYXJ0ID0gIm5vIjsgfQorCitFTkQgeworCXRvcGJhY2soKTsKKwlwcmludCAiPC9QUkU+XG48L0JPRFk+XG5cblxuPC9IVE1MPiI7IH0KKworIworIyBhcyBtYWluIHdlIGtlZXAgaW5kZXgudHh0IChieSBkZWZhdWx0KQorIyBvdGhlciBjYW5kaWRhdGUsIGhlbHAudHh0CisjCitmdW5jdGlvbiB0b3BiYWNrICgpIHsKKwlpZiAoIEZJTEVOQU1FICE9ICJ0YWdzIiApIHsKKwlpZiAoIEZJTEVOQU1FICE9ICJoZWxwLnR4dCIgKSB7CisJcHJpbnRmKCI8QSBIUkVGPVwiI3RvcFwiPnRvcDwvQT4gLSAiKTsKKwlwcmludGYoIjxBIEhSRUY9XCJoZWxwLmh0bWxcIj5tYWluIGhlbHAgZmlsZTwvQT5cbiIpOworCX0gZWxzZSB7CisJcHJpbnRmKCI8QSBIUkVGPVwiI3RvcFwiPnRvcDwvQT5cbiIpOworCX0KKwl9Cit9CisKK2Z1bmN0aW9uIGZpbmRfdGFnMSgpIHsKKwlpZiAoIHBbaV0gPT0gIiIgKSB7IHJldHVybjsgfQorCWlmICggdGFna2V5W3BbaV1dID09ICJ5ZXMiICkgeworCQl3aGljaD10YWdyZWZbcFtpXV07CisJCXB1dF9ocmVmKCk7CisJCXJldHVybjsKKwl9CisJIyBpZiBub3QgZm91bmQsIHRoZW4gd2UgaGF2ZSBhIHByb2JsZW0KKwlwcmludCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iICA+PiJlcnJvcnMubG9nIjsKKwlwcmludCBGSUxFTkFNRSAiLCBsaW5lICIgTlIgIiwgcG9pbnRlcjogPj4iIHBbaV0gIjw8IiA+PiJlcnJvcnMubG9nIjsKKwlwcmludCAkMCA+PiJlcnJvcnMubG9nIjsKKwl3aGljaD0iaW50cm8uaHRtbCI7CisJcHV0X2hyZWYoKTsKK30KKworZnVuY3Rpb24gc2VlX3RhZygpIHsKKyMgYWQtaG9jIGNvZGU6CitpZiAoIGF0YWcgPT0gIlwiLS0iIHx8IGF0YWcgPT0gIi0tXCIiICkgeyByZXR1cm47IH0KK2lmX2FscmVhZHkoKTsKK2lmICggYWxyZWFkeSA9PSAieWVzIiApIHsKKwlwcmludGYoIiVzIixhd29yZCk7CisJcmV0dXJuOworCX0KK2FsbG93X29uZV9jaGFyPSJubyI7CitmaW5kX3RhZzIoKTsKK2lmICggZG9uZSA9PSAieWVzIiApIHsgcmV0dXJuOyB9CityaWdodGNoYXI9c3Vic3RyKGF0YWcsbGVuZ3RoKGF0YWcpLDEpOworaWYgKCAgICByaWdodGNoYXIgPT0gIi4iIFwKKyAgICAgfHwgcmlnaHRjaGFyID09ICIsIiBcCisgICAgIHx8IHJpZ2h0Y2hhciA9PSAiOiIgXAorICAgICB8fCByaWdodGNoYXIgPT0gIjsiIFwKKyAgICAgfHwgcmlnaHRjaGFyID09ICIhIiBcCisgICAgIHx8IHJpZ2h0Y2hhciA9PSAiPyIgXAorICAgICB8fCByaWdodGNoYXIgPT0gIikiICkgeworCWF0YWc9c3Vic3RyKGF0YWcsMSxsZW5ndGgoYXRhZyktMSk7CisJaWZfYWxyZWFkeSgpOworCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKKwkJcHJpbnRmKCIlcyIsYXdvcmQpOworCQlyZXR1cm47CisJfQorCWZpbmRfdGFnMigpOworCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyIscmlnaHRjaGFyKTtyZXR1cm47IH0KKwlsZWZ0Y2hhcj1zdWJzdHIoYXRhZywxLDEpOworCWxhc3RidXQxPXN1YnN0cihhdGFnLGxlbmd0aChhdGFnKSwxKTsKKwlpZiAoICAgIGxlZnRjaGFyID09ICInIiAmJiBsYXN0YnV0MSA9PSAiJyIgICkgeworCQlhbGxvd19vbmVfY2hhcj0ieWVzIjsKKwkJYXRhZz1zdWJzdHIoYXRhZywyLGxlbmd0aChhdGFnKS0yKTsKKwkJaWZfYWxyZWFkeSgpOworCQlpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CisJCQlwcmludGYoIiVzIixhd29yZCk7CisJCQlyZXR1cm47CisJCX0KKwkJcHJpbnRmKCIlcyIsbGVmdGNoYXIpOworCQlhd29yZD1zdWJzdHIoYXRhZywxLGxlbmd0aChhdGFnKSkiImxhc3RidXQxIiJyaWdodGNoYXI7CisJCWZpbmRfdGFnMigpOworCQlpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMlcyIsbGFzdGJ1dDEscmlnaHRjaGFyKTtyZXR1cm47IH0KKwkJfQorCX0KK2F0YWc9YXdvcmQ7CitsZWZ0Y2hhcj1zdWJzdHIoYXRhZywxLDEpOworaWYgKCAgICBsZWZ0Y2hhciA9PSAiJyIgJiYgcmlnaHRjaGFyID09ICInIiAgKSB7CisJYWxsb3dfb25lX2NoYXI9InllcyI7CisJYXRhZz1zdWJzdHIoYXRhZywyLGxlbmd0aChhdGFnKS0yKTsKKwlpZiAgKCBhdGFnID09ICI8IiApIHsgcHJpbnRmKCIgfCVzfCVzfCAiLGF0YWcscFsyXSk7IH0KKwlpZl9hbHJlYWR5KCk7CisJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgeworCQlwcmludGYoIiVzIixhd29yZCk7CisJCXJldHVybjsKKwkJfQorCXByaW50ZigiJXMiLGxlZnRjaGFyKTsKKwlmaW5kX3RhZzIoKTsKKwlpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLHJpZ2h0Y2hhcik7cmV0dXJuOyB9CisJcHJpbnRmKCIlcyVzIixhdGFnLHJpZ2h0Y2hhcik7CisJcmV0dXJuOworCX0KK2xhc3QyPXN1YnN0cihhdGFnLGxlbmd0aChhdGFnKS0xLDIpOworZmlyc3QyPXN1YnN0cihhdGFnLDEsMik7CitpZiAoICAgIGZpcnN0MiA9PSAiKCciICYmIGxhc3QyID09ICInKSIgICkgeworCWFsbG93X29uZV9jaGFyPSJ5ZXMiOworCWF0YWc9c3Vic3RyKGF0YWcsMyxsZW5ndGgoYXRhZyktNCk7CisJaWZfYWxyZWFkeSgpOworCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKKwkJcHJpbnRmKCIlcyIsYXdvcmQpOworCQlyZXR1cm47CisJCX0KKwlwcmludGYoIiVzIixmaXJzdDIpOworCWZpbmRfdGFnMigpOworCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyIsbGFzdDIpO3JldHVybjsgfQorCXByaW50ZigiJXMlcyIsYXRhZyxsYXN0Mik7CisJcmV0dXJuOworCX0KK2lmICggbGFzdDIgPT0gIi4pIiApIHsKKwlhdGFnPXN1YnN0cihhdGFnLDEsbGVuZ3RoKGF0YWcpLTIpOworCWlmX2FscmVhZHkoKTsKKwlpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CisJCXByaW50ZigiJXMiLGF3b3JkKTsKKwkJcmV0dXJuOworCQl9CisJZmluZF90YWcyKCk7CisJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixsYXN0Mik7cmV0dXJuOyB9CisJcHJpbnRmKCIlcyVzIixhdGFnLGxhc3QyKTsKKwlyZXR1cm47CisJfQoraWYgKCBsYXN0MiA9PSAiKS4iICkgeworCWF0YWc9c3Vic3RyKGF0YWcsMSxsZW5ndGgoYXRhZyktMik7CisJZmluZF90YWcyKCk7CisJaWZfYWxyZWFkeSgpOworCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKKwkJcHJpbnRmKCIlcyIsYXdvcmQpOworCQlyZXR1cm47CisJCX0KKwlpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLGxhc3QyKTtyZXR1cm47IH0KKwlwcmludGYoIiVzJXMiLGF0YWcsbGFzdDIpOworCXJldHVybjsKKwl9CitmaXJzdDY9c3Vic3RyKGF0YWcsMSw2KTsKK2xhc3Q2PXN1YnN0cihhdGFnLGxlbmd0aChhdGFnKS01LDYpOworaWYgKCBsYXN0NiA9PSBhdGFnICkgeworCXByaW50ZigiJXMiLGF3b3JkKTsKKwlyZXR1cm47CisJfQorbGFzdDZvZjc9c3Vic3RyKGF0YWcsbGVuZ3RoKGF0YWcpLTYsNik7CitpZiAoIGZpcnN0NiA9PSAiJnF1b3Q7IiAmJiBsYXN0Nm9mNyA9PSAiJnF1b3Q7IiAmJiBsZW5ndGgoYXRhZykgPiAxMiApIHsKKwlhbGxvd19vbmVfY2hhcj0ieWVzIjsKKwlhdGFnPXN1YnN0cihhdGFnLDcsbGVuZ3RoKGF0YWcpLTEzKTsKKwlpZl9hbHJlYWR5KCk7CisJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgeworCQlwcmludGYoIiVzIixhd29yZCk7CisJCXJldHVybjsKKwkJfQorCXByaW50ZigiJXMiLGZpcnN0Nik7CisJZmluZF90YWcyKCk7CisJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiZxdW90OyVzIixyaWdodGNoYXIpOyByZXR1cm47IH0KKwlwcmludGYoIiVzJnF1b3Q7JXMiLGF0YWcscmlnaHRjaGFyKTsKKwlyZXR1cm47CisJfQoraWYgKCBmaXJzdDYgPT0gIiZxdW90OyIgJiYgbGFzdDYgIT0gIiZxdW90OyIgKSB7CisJYWxsb3dfb25lX2NoYXI9InllcyI7CisJYXRhZz1zdWJzdHIoYXRhZyw3LGxlbmd0aChhdGFnKS02KTsKKwlpZiAoIGF0YWcgPT0gIlsiICkgeyBwcmludGYoIiZxdW90OyVzIixhdGFnKTsgcmV0dXJuOyB9CisJaWYgKCBhdGFnID09ICIuIiApIHsgcHJpbnRmKCImcXVvdDslcyIsYXRhZyk7IHJldHVybjsgfQorCWlmICggYXRhZyA9PSAiOiIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KKwlpZiAoIGF0YWcgPT0gImEiICkgeyBwcmludGYoIiZxdW90OyVzIixhdGFnKTsgcmV0dXJuOyB9CisJaWYgKCBhdGFnID09ICJBIiApIHsgcHJpbnRmKCImcXVvdDslcyIsYXRhZyk7IHJldHVybjsgfQorCWlmICggYXRhZyA9PSAiZyIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KKwlpZl9hbHJlYWR5KCk7CisJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgeworCQlwcmludGYoIiZxdW90OyVzIixhdGFnKTsKKwkJcmV0dXJuOworCQl9CisJcHJpbnRmKCIlcyIsZmlyc3Q2KTsKKwlmaW5kX3RhZzIoKTsKKwlpZiAoIGRvbmUgPT0gInllcyIgKSB7IHJldHVybjsgfQorCXByaW50ZigiJXMiLGF0YWcpOworCXJldHVybjsKKwl9CitpZiAoIGxhc3Q2ID09ICImcXVvdDsiICYmIGZpcnN0NiA9PSAiJnF1b3Q7IiApIHsKKwlhbGxvd19vbmVfY2hhcj0ieWVzIjsKKwlhdGFnPXN1YnN0cihhdGFnLDcsbGVuZ3RoKGF0YWcpLTEyKTsKKwlpZl9hbHJlYWR5KCk7CisJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgeworCQlwcmludGYoIiVzIixhd29yZCk7CisJCXJldHVybjsKKwkJfQorCXByaW50ZigiJXMiLGZpcnN0Nik7CisJZmluZF90YWcyKCk7CisJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixsYXN0Nik7cmV0dXJuOyB9CisJcHJpbnRmKCIlcyVzIixhdGFnLGxhc3Q2KTsKKwlyZXR1cm47CisJfQorbGFzdDZvZjc9c3Vic3RyKGF0YWcsbGVuZ3RoKGF0YWcpLTYsNik7CitpZiAoIGxhc3Q2b2Y3ID09ICImcXVvdDsiICYmIGZpcnN0NiA9PSAiJnF1b3Q7IiApIHsKKwlhbGxvd19vbmVfY2hhcj0ieWVzIjsKKwlhdGFnPXN1YnN0cihhdGFnLDcsbGVuZ3RoKGF0YWcpLTEzKTsKKwkjcHJpbnRmKCJcbmF0YWc9JXMsYXdvcmQ9JXNcbiIsYXRhZyxhd29yZCk7CisJaWZfYWxyZWFkeSgpOworCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKKwkJcHJpbnRmKCIlcyIsYXdvcmQpOworCQlyZXR1cm47CisJCX0KKwlwcmludGYoIiVzIixmaXJzdDYpOworCWZpbmRfdGFnMigpOworCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyVzIixsYXN0Nm9mNyxyaWdodGNoYXIpO3JldHVybjsgfQorCXByaW50ZigiJXMlcyVzIixhdGFnLGxhc3Q2b2Y3LHJpZ2h0Y2hhcik7CisJcmV0dXJuOworCX0KK3ByaW50ZigiJXMiLGF3b3JkKTsKK30KKworZnVuY3Rpb24gZmluZF90YWcyKCkgeworCWRvbmU9Im5vIjsKKwkjIG5vIGJsYW5rcyBwcmVzZW50IGluIGEgdGFnLi4uCisJbnRhZ3M9c3BsaXQoYXRhZyxibGF0YSwiWyAJXSIpOworCWlmICggbnRhZ3MgPiAxICkgeyByZXR1cm47IH0KKwlpZiAJKCAoIGFsbG93X29uZV9jaGFyID09ICJubyIgKSAmJiBcCisJCSAgKCBpbmRleCgiISMkJVwmJygpKywtLi8wOjs9P0BBQ0lOWFxcW1xcXV5fYGF0XFx7XFx9fiIsYXRhZykgIT0wICkgKSB7CisJCXJldHVybjsKKwl9CisJaWYgKCBza2lwX3dvcmRbYXRhZ10gPT0gInllcyIgKSB7IHJldHVybjsgfQorCWlmICggd2Fzc2V0ID09ICJ5ZXMiICYmIGxpbmVzZXQgPT0gTlIgKSB7CisJd2Fzc2V0PSJubyI7CisJc2VlX29wdCgpOworCWlmICggZG9uZV9vcHQgPT0gInllcyIgKSB7cmV0dXJuO30KKwl9CisJaWYgKCB3YXNzZXQgPT0gInllcyIgJiYgbGluZXNldCAhPSBOUiApIHsKKwl3YXNzZXQ9Im5vIjsKKwl9CisJaWYgKCBhdGFnID09ICI6c2V0IiApIHsKKwl3YXNzZXQ9InllcyI7CisJbGluZXNldD1OUjsKKwl9CisJaWYgKCB0YWdrZXlbYXRhZ10gPT0gInllcyIgKSB7CisJCXdoaWNoPXRhZ3JlZlthdGFnXTsKKwkJcHV0X2hyZWYyKCk7CisJCWRvbmU9InllcyI7CisJfQorfQorCitmdW5jdGlvbiBmaW5kX3RhZzMoKSB7CisJZG9uZT0ibm8iOworCSMgbm8gYmxhbmtzIHByZXNlbnQgaW4gYSB0YWcuLi4KKwludGFncz1zcGxpdChidGFnLGJsYXRhLCJbIAldIik7CisJaWYgKCBudGFncyA+IDEgKSB7IHJldHVybjsgfQorCWlmIAkoICggYWxsb3dfb25lX2NoYXIgPT0gIm5vIiApICYmIFwKKwkJICAoIGluZGV4KCIhIyQlXCYnKCkrLC0uLzA6Oz0/QEFDSU5YXFxbXFxdXl9gYXRcXHtcXH1+IixidGFnKSAhPTAgKSApIHsKKwkgIAlyZXR1cm47CisJfQorCWlmICggc2tpcF93b3JkW2J0YWddID09ICJ5ZXMiICkgeyByZXR1cm47IH0KKwlpZiAoIHRhZ2tleVtidGFnXSA9PSAieWVzIiApIHsKKwkJd2hpY2g9dGFncmVmW2J0YWddOworCQlwdXRfaHJlZjMoKTsKKwkJZG9uZT0ieWVzIjsKKwl9Cit9CisKK2Z1bmN0aW9uIHB1dF9ocmVmKCkgeworCWlmICggcFtpXSA9PSAiIiApIHsgcmV0dXJuOyB9CisJaWYgKCB3aGljaCA9PSBGSUxFTkFNRSApIHsKKwkJcHJpbnRmKCJ8PEEgSFJFRj1cIiMlc1wiPiVzPC9BPnwiLHBbaV0scFtpXSk7CisJCX0KKwkJZWxzZSB7CisJCW56PXNwbGl0KHdoaWNoLHp6LCIuIik7CisJCWlmICggenpbMl0gPT0gInR4dCIgfHwgenpbMV0gPT0gInRhZ3MiICkgeworCQlwcmludGYoInw8QSBIUkVGPVwiJXMuaHRtbCMlc1wiPiVzPC9BPnwiLHp6WzFdLHBbaV0scFtpXSk7CisJCX0KKwkJZWxzZSB7CisJCXByaW50ZigifDxBIEhSRUY9XCJpbnRyby5odG1sIyVzXCI+JXM8L0E+fCIscFtpXSxwW2ldKTsKKwkJfQorCX0KK30KKworZnVuY3Rpb24gcHV0X2hyZWYyKCkgeworCWlmICggYXRhZyA9PSAiIiApIHsgcmV0dXJuOyB9CisJaWYgKCB3aGljaCA9PSBGSUxFTkFNRSApIHsKKwkJcHJpbnRmKCI8QSBIUkVGPVwiIyVzXCI+JXM8L0E+IixhdGFnLGF0YWcpOworCQl9CisJCWVsc2UgeworCQluej1zcGxpdCh3aGljaCx6eiwiLiIpOworCQlpZiAoIHp6WzJdID09ICJ0eHQiIHx8IHp6WzFdID09ICJ0YWdzIiApIHsKKwkJcHJpbnRmKCI8QSBIUkVGPVwiJXMuaHRtbCMlc1wiPiVzPC9BPiIsenpbMV0sYXRhZyxhdGFnKTsKKwkJfQorCQllbHNlIHsKKwkJcHJpbnRmKCI8QSBIUkVGPVwiaW50cm8uaHRtbCMlc1wiPiVzPC9BPiIsYXRhZyxhdGFnKTsKKwkJfQorCX0KK30KKworZnVuY3Rpb24gcHV0X2hyZWYzKCkgeworCWlmICggYnRhZyA9PSAiIiApIHsgcmV0dXJuOyB9CisJaWYgKCB3aGljaCA9PSBGSUxFTkFNRSApIHsKKwkJcHJpbnRmKCI8QSBIUkVGPVwiIyVzXCI+JXM8L0E+IixidGFnLGJ0YWcyKTsKKwkJfQorCQllbHNlIHsKKwkJbno9c3BsaXQod2hpY2gsenosIi4iKTsKKwkJaWYgKCB6elsyXSA9PSAidHh0IiB8fCB6elsxXSA9PSAidGFncyIgKSB7CisJCXByaW50ZigiPEEgSFJFRj1cIiVzLmh0bWwjJXNcIj4lczwvQT4iLHp6WzFdLGJ0YWcsYnRhZzIpOworCQl9CisJCWVsc2UgeworCQlwcmludGYoIjxBIEhSRUY9XCJpbnRyby5odG1sIyVzXCI+JXM8L0E+IixidGFnLGJ0YWcyKTsKKwkJfQorCX0KK30KKworZnVuY3Rpb24gcHV0X3RoaXMoKSB7CisJbnRhYj1zcGxpdCh0aGlzLHRhLCIJIik7CisJZm9yICggbnRhPTEgOyBudGEgPD0gbnRhYiA7IG50YSsrICkgeworCQlhdGE9dGFbbnRhXTsKKwkJbGF0YT1sZW5ndGgoYXRhKTsKKwkJYXdvcmQ9IiI7CisJCWZvciAoIGlhdGE9MSA7IGlhdGEgPD1sYXRhIDsgaWF0YSsrICkgeworCQkJYWNoYXI9c3Vic3RyKGF0YSxpYXRhLDEpOworCQkJaWYgKCBhY2hhciAhPSAiICIgKSB7IGF3b3JkPWF3b3JkIiJhY2hhcjsgfQorCQkJZWxzZSB7CisJCQkJaWYgKCBhd29yZCAhPSAiIiApIHsgYXRhZz1hd29yZDsKKwkJCQkJc2VlX3RhZygpOworCQkJCQlhd29yZD0iIjsKKwkJCQkJcHJpbnRmKCIgIik7IH0KKwkJCQllbHNlCXsKKwkJCQkJcHJpbnRmKCIgIik7CisJCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoIGF3b3JkICE9ICIiICkgeyBhdGFnPWF3b3JkOworCQkJCQlzZWVfdGFnKCk7CisJCQkJCX0KKwkJaWYgKCBudGEgIT0gbnRhYiApIHsgcHJpbnRmKCIJIik7IH0KKwl9Cit9CisKK2Z1bmN0aW9uIGlmX2FscmVhZHkoKSB7CisJYWxyZWFkeT0ibm8iOworCWlmICAoIG5waXBlIDwgMiApIHsgcmV0dXJuOyB9CisJaWYgICggYXRhZyA9PSAiOmF1IiAmJiBwWzJdID09ICI6YXV0b2NtZCIgKSB7IGFscmVhZHk9InllcyI7cmV0dXJuOyB9CisJZm9yICggbnBwPTIgOyBucHAgPD0gbnBpcGUgOyBucHA9bnBwKzIgKSB7CisJCWlmIAkoICAoICAoaW5kZXgocFtucHBdLGF0YWcpKSAhPSAwIFwKKwkJCSAgICAgICYmIGxlbmd0aChwW25wcF0pID4gbGVuZ3RoKGF0YWcpIFwKKwkJCSAgICAgICYmIGxlbmd0aChhdGFnKSA+PSAxICBcCisJCQkgICAgKSBcCisJCQkgICAgfHwgKHBbbnBwXSA9PSBhdGFnKSBcCisJCQkpIHsKKwkJIyBwcmludGYoInA9fCVzfCx0YWc9fCVzfCAiLHBbbnBwXSxhdGFnKTsKKwkJYWxyZWFkeT0ieWVzIjsgcmV0dXJuOyB9CisJfQorfQorCitmdW5jdGlvbiBzZWVfb3B0KCkgeworCWRvbmVfb3B0PSJubyI7CisJc3RhZz1hdGFnOworCW5maWVsZHMgPSBzcGxpdChhdGFnLHRhZSwiPSIpOworCWlmICggbmZpZWxkcyA+IDEgKSAgeworCQlidGFnPSInInRhZVsxXSInIjsKKwkJYnRhZzI9dGFlWzFdOworCSAgICBmaW5kX3RhZzMoKTsKKwkJaWYgKGRvbmUgPT0gInllcyIpIHsKKwkJCWZvciAoIG50YWU9MiA7IG50YWUgPD0gbmZpZWxkcyA7IG50YWUrKyApIHsKKwkJCQlwcmludGYoIj0lcyIsdGFlW250YWVdKTsKKwkJCX0KKwkJCWF0YWc9c3RhZzsKKwkJCWRvbmVfb3B0PSJ5ZXMiOworCQkJcmV0dXJuOworCQl9CisJCWJ0YWc9dGFlWzFdOworCQlidGFnMj10YWVbMV07CisJICAgIGZpbmRfdGFnMygpOworCQlpZiAoIGRvbmU9PSJ5ZXMiICkgeworCQkJZm9yICggbnRhZT0yIDsgbnRhZSA8PSBuZmllbGRzIDsgbnRhZSsrICkgeworCQkJCXByaW50ZigiPSVzIix0YWVbbnRhZV0pOworCQkJfQorCQkJYXRhZz1zdGFnOworCQkJZG9uZV9vcHQ9InllcyI7CisJCQlyZXR1cm47CisJCX0KKwl9CisJbmZpZWxkcyA9IHNwbGl0KGF0YWcsdGFlLCImcXVvdDsiKTsKKwlpZiAoIG5maWVsZHMgPiAxICkgIHsKKwkJYnRhZz0iJyJ0YWVbMV0iJyI7CisJCWJ0YWcyPXRhZVsxXTsKKwkgICAJZmluZF90YWczKCk7CisJCWlmIChkb25lID09ICJ5ZXMiKSB7CisJCQlwcmludGYoIiZxdW90OyIpOworCQkJYXRhZz1zdGFnOworCQkJZG9uZV9vcHQ9InllcyI7CisJCQlyZXR1cm47CisJCX0KKwkJYnRhZz10YWVbMV07CisJCWJ0YWcyPXRhZVsxXTsKKwkgICAgZmluZF90YWczKCk7CisJCWlmIChkb25lID09ICJ5ZXMiKSB7CisJCQlwcmludGYoIiZxdW90OyIpOworCQkJYXRhZz1zdGFnOworCQkJZG9uZV9vcHQ9InllcyI7CisJCQlyZXR1cm47CisJCX0KKwl9CisJYnRhZz0iJyJ0YWVbMV0iJyI7CisJYnRhZzI9dGFlWzFdOworCWZpbmRfdGFnMygpOworCWlmIChkb25lID09ICJ5ZXMiKSB7CisJCWF0YWc9c3RhZzsKKwkJZG9uZV9vcHQ9InllcyI7CisJCXJldHVybjsKKwl9CisJYnRhZz10YWVbMV07CisJYnRhZzI9dGFlWzFdOworCWZpbmRfdGFnMygpOworCWlmIChkb25lID09ICJ5ZXMiKSB7CisJCWF0YWc9c3RhZzsKKwkJZG9uZV9vcHQ9InllcyI7CisJCXJldHVybjsKKwl9CisJYXRhZz1zdGFnOworfQpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvbWFrZXRhZ3MuYXdrIGIvcnVudGltZS9kb2MvbWFrZXRhZ3MuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YjJjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9tYWtldGFncy5hd2sKQEAgLTAsMCArMSw0MiBAQAorQkVHSU4gICB7IEZTPSIJIjsgfQorCitOUiA9PSAxIHsgbmY9c3BsaXQoRklMRU5BTUUsZiwiLiIpCisJcHJpbnQgIjxIVE1MPiI7CisJcHJpbnQgIjxIRUFEPjxUSVRMRT4iIGZbMV0gIjwvVElUTEU+PC9IRUFEPiI7CisJcHJpbnQgIjxCT0RZIEJHQ09MT1I9XCIjZmZmZmZmXCI+IjsKKwlwcmludCAiPEgxPlZpbSBEb2N1bWVudGF0aW9uOiAiIGZbMV0gIjwvSDE+IjsKKwlwcmludCAiPEEgTkFNRT1cInRvcFwiPjwvQT4iOworCXByaW50ICI8SFI+IjsKKwlwcmludCAiPFBSRT4iOworfQorCit7CisJIworCSMgcHJvdGVjdCBzcGVjaWFsIGNoYXJzCisJIworCWdzdWIoLyYvLCJcXCZhbXA7Iik7CisJZ3N1YigvPi8sIlxcJmd0OyIpOworCWdzdWIoLzwvLCJcXCZsdDsiKTsKKwlnc3ViKC8iLywiXFwmcXVvdDsiKTsKKwlnc3ViKC8lLywiXFwmIzM3OyIpOworCisJbmY9c3BsaXQoJDAsdGFnLCIJIik7CisJdGFna2V5W3RdPXRhZ1sxXTt0YWdyZWZbdF09dGFnWzJdO3RhZ251bVt0XT1OUjsKKwlwcmludCAkMSAiCSIgJDIgIglsaW5lICIgTlIgPiJ0YWdzLnJlZiIKKwluPXNwbGl0KCQyLHcsIi4iKTsKKwlwcmludGYgKCJ8PEEgSFJFRj1cIiVzLmh0bWwjJXNcIj4lczwvQT58CSVzXG4iLHdbMV0sJDEsJDEsJDIpOworfQorCitFTkQgICAgIHsKKwl0b3BiYWNrKCk7CisJcHJpbnQgIjwvUFJFPlxuPC9CT0RZPlxuXG5cbjwvSFRNTD4iOworCX0KKworIworIyBhcyBtYWluIHdlIGtlZXAgaW5kZXgudHh0IChieSBkZWZhdWx0KQorIyBvdGhlciBjYW5kaWRhdGUsIGhlbHAudHh0CisjCitmdW5jdGlvbiB0b3BiYWNrICgpIHsKKwlwcmludGYoIjxBIEhSRUY9XCIjdG9wXCI+dG9wPC9BPiAtICIpOworCXByaW50ZigiPEEgSFJFRj1cImhlbHAuaHRtbFwiPmJhY2sgdG8gaGVscDwvQT5cbiIpOworfQpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvbWFwLnR4dCBiL3J1bnRpbWUvZG9jL21hcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwNWRkYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL21hcC50eHQKQEAgLTAsMCArMSwxMDk0IEBACisqbWFwLnR4dCogICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDIxCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworS2V5IG1hcHBpbmcsIGFiYnJldmlhdGlvbnMgYW5kIHVzZXItZGVmaW5lZCBjb21tYW5kcy4KKworVGhpcyBzdWJqZWN0IGlzIGludHJvZHVjZWQgaW4gc2VjdGlvbnMgfDA1LjN8LCB8MjQuN3wgYW5kIHw0MC4xfCBvZiB0aGUgdXNlcgorbWFudWFsLgorCisxLiBLZXkgbWFwcGluZwkJCXxrZXktbWFwcGluZ3wKKzIuIEFiYnJldmlhdGlvbnMJCXxhYmJyZXZpYXRpb25zfAorMy4gTG9jYWwgbWFwcGluZ3MgYW5kIGZ1bmN0aW9ucwl8c2NyaXB0LWxvY2FsfAorNC4gVXNlci1kZWZpbmVkIGNvbW1hbmRzCXx1c2VyLWNvbW1hbmRzfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEtleSBtYXBwaW5nCQkJCSprZXktbWFwcGluZyogKm1hcHBpbmcqICptYWNybyoKKworS2V5IG1hcHBpbmcgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdHlwZWQga2V5cy4gIFRoZSBtb3N0IGNvbW1vbiB1c2UKK2lzIHRvIGRlZmluZSBhIHNlcXVlbmNlIGNvbW1hbmRzIGZvciBhIGZ1bmN0aW9uIGtleS4gIEV4YW1wbGU6ID4KKworCTptYXAgPEYyPiBhPEMtUj49c3RyZnRpbWUoIiVjIik8Q1I+PEVzYz4KKworVGhpcyBhcHBlbmRzIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgYWZ0ZXIgdGhlIGN1cnNvci4gKGluIDw+IG5vdGF0aW9uIHw8PnwpCisKK1RoZXJlIGFyZSBjb21tYW5kcyB0byBlbnRlciBuZXcgbWFwcGluZ3MsIHJlbW92ZSBtYXBwaW5ncyBhbmQgbGlzdCBtYXBwaW5ncy4KK1NlZSB8bWFwLW92ZXJ2aWV3fCBmb3IgdGhlIHZhcmlvdXMgZm9ybXMgb2YgIm1hcCIgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aAorbW9kZXMuCisKK3tsaHN9CW1lYW5zIGxlZnQtaGFuZC1zaWRlCSp7bGhzfSoKK3tyaHN9CW1lYW5zIHJpZ2h0LWhhbmQtc2lkZQkqe3Joc30qCisKKzptYXAJe2xoc30ge3Joc30JCQkJCSo6bWFwKgorOm5tW2FwXQl7bGhzfSB7cmhzfQkJCQkJKjpubSogKjpubWFwKgorOnZtW2FwXQl7bGhzfSB7cmhzfQkJCQkJKjp2bSogKjp2bWFwKgorOm9tW2FwXQl7bGhzfSB7cmhzfQkJCQkJKjpvbSogKjpvbWFwKgorOm1hcCEJe2xoc30ge3Joc30JCQkJCSo6bWFwISoKKzppbVthcF0Je2xoc30ge3Joc30JCQkJCSo6aW0qICo6aW1hcCoKKzpsbVthcF0Je2xoc30ge3Joc30JCQkJCSo6bG0qICo6bG1hcCoKKzpjbVthcF0Je2xoc30ge3Joc30JCQkJCSo6Y20qICo6Y21hcCoKKwkJCU1hcCB0aGUga2V5IHNlcXVlbmNlIHtsaHN9IHRvIHtyaHN9IGZvciB0aGUgbW9kZXMKKwkJCXdoZXJlIHRoZSBtYXAgY29tbWFuZCBhcHBsaWVzLiAgVGhlIHJlc3VsdCwgaW5jbHVkaW5nCisJCQl7cmhzfSwgaXMgdGhlbiBmdXJ0aGVyIHNjYW5uZWQgZm9yIG1hcHBpbmdzLiAgVGhpcworCQkJYWxsb3dzIGZvciBuZXN0ZWQgYW5kIHJlY3Vyc2l2ZSB1c2Ugb2YgbWFwcGluZ3MuCisKKworOm5vW3JlbWFwXSAge2xoc30ge3Joc30JCQkJCSo6bm8qICAqOm5vcmVtYXAqCis6bm5bb3JlbWFwXSB7bGhzfSB7cmhzfQkJCQkJKjpubiogICo6bm5vcmVtYXAqCis6dm5bb3JlbWFwXSB7bGhzfSB7cmhzfQkJCQkJKjp2biogICo6dm5vcmVtYXAqCis6b25vW3JlbWFwXSB7bGhzfSB7cmhzfQkJCQkJKjpvbm8qICo6b25vcmVtYXAqCis6bm9bcmVtYXBdISB7bGhzfSB7cmhzfQkJCQkJKjpubyEqICo6bm9yZW1hcCEqCis6aW5vW3JlbWFwXSB7bGhzfSB7cmhzfQkJCQkJKjppbm8qICo6aW5vcmVtYXAqCis6bG5bb3JlbWFwXSB7bGhzfSB7cmhzfQkJCQkJKjpsbiogICo6bG5vcmVtYXAqCis6Y25vW3JlbWFwXSB7bGhzfSB7cmhzfQkJCQkJKjpjbm8qICo6Y25vcmVtYXAqCisJCQlNYXAgdGhlIGtleSBzZXF1ZW5jZSB7bGhzfSB0byB7cmhzfSBmb3IgdGhlIG1vZGVzCisJCQl3aGVyZSB0aGUgbWFwIGNvbW1hbmQgYXBwbGllcy4gIERpc2FsbG93IG1hcHBpbmcgb2YKKwkJCXtyaHN9LCB0byBhdm9pZCBuZXN0ZWQgYW5kIHJlY3Vyc2l2ZSBtYXBwaW5ncy4gIE9mdGVuCisJCQl1c2VkIHRvIHJlZGVmaW5lIGEgY29tbWFuZC4gIHtub3QgaW4gVml9CisKKworOnVubVthcF0gIHtsaHN9CQkJCQkJKjp1bm0qICAqOnVubWFwKgorOm51blttYXBdIHtsaHN9CQkJCQkJKjpudW4qICAqOm51bm1hcCoKKzp2dVtubWFwXSB7bGhzfQkJCQkJCSo6dnUqICAgKjp2dW5tYXAqCis6b3Vbbm1hcF0ge2xoc30JCQkJCQkqOm91KiAgICo6b3VubWFwKgorOnVubVthcF0hIHtsaHN9CQkJCQkJKjp1bm0hKiAqOnVubWFwISoKKzppdVtubWFwXSB7bGhzfQkJCQkJCSo6aXUqICAgKjppdW5tYXAqCis6bHVbbm1hcF0ge2xoc30JCQkJCQkqOmx1KiAgICo6bHVubWFwKgorOmN1W25tYXBdIHtsaHN9CQkJCQkJKjpjdSogICAqOmN1bm1hcCoKKwkJCVJlbW92ZSB0aGUgbWFwcGluZyBvZiB7bGhzfSBmb3IgdGhlIG1vZGVzIHdoZXJlIHRoZQorCQkJbWFwIGNvbW1hbmQgYXBwbGllcy4gIFRoZSBtYXBwaW5nIG1heSByZW1haW4gZGVmaW5lZAorCQkJZm9yIG90aGVyIG1vZGVzIHdoZXJlIGl0IGFwcGxpZXMuCisJCQlOb3RlOiBUcmFpbGluZyBzcGFjZXMgYXJlIGluY2x1ZGVkIGluIHRoZSB7bGhzfS4gIFRoaXMKKwkJCXVubWFwIGRvZXMgTk9UIHdvcms6ID4KKwkJCQk6bWFwIEBAIGZvbworCQkJCTp1bm1hcCBAQCB8IHByaW50CisKKzptYXBjW2xlYXJdCQkJCQkJKjptYXBjKiAgICo6bWFwY2xlYXIqCis6bm1hcGNbbGVhcl0JCQkJCQkqOm5tYXBjKiAgKjpubWFwY2xlYXIqCis6dm1hcGNbbGVhcl0JCQkJCQkqOnZtYXBjKiAgKjp2bWFwY2xlYXIqCis6b21hcGNbbGVhcl0JCQkJCQkqOm9tYXBjKiAgKjpvbWFwY2xlYXIqCis6bWFwY1tsZWFyXSEJCQkJCQkqOm1hcGMhKiAgKjptYXBjbGVhciEqCis6aW1hcGNbbGVhcl0JCQkJCQkqOmltYXBjKiAgKjppbWFwY2xlYXIqCis6bG1hcGNbbGVhcl0JCQkJCQkqOmxtYXBjKiAgKjpsbWFwY2xlYXIqCis6Y21hcGNbbGVhcl0JCQkJCQkqOmNtYXBjKiAgKjpjbWFwY2xlYXIqCisJCQlSZW1vdmUgQUxMIG1hcHBpbmdzIGZvciB0aGUgbW9kZXMgd2hlcmUgdGhlIG1hcAorCQkJY29tbWFuZCBhcHBsaWVzLiAge25vdCBpbiBWaX0KKwkJCVdhcm5pbmc6IFRoaXMgYWxzbyByZW1vdmVzIHRoZSBkZWZhdWx0IG1hcHBpbmdzLgorCis6bWFwCis6bm1bYXBdCis6dm1bYXBdCis6b21bYXBdCis6bWFwIQorOmltW2FwXQorOmxtW2FwXQorOmNtW2FwXQorCQkJTGlzdCBhbGwga2V5IG1hcHBpbmdzIGZvciB0aGUgbW9kZXMgd2hlcmUgdGhlIG1hcAorCQkJY29tbWFuZCBhcHBsaWVzLiAgTm90ZSB0aGF0ICI6bWFwIiBhbmQgIjptYXAhIiBhcmUKKwkJCXVzZWQgbW9zdCBvZnRlbiwgYmVjYXVzZSB0aGV5IGluY2x1ZGUgdGhlIG90aGVyIG1vZGVzLgorCis6bWFwICAgIHtsaHN9CQkJCQkJKjptYXBfbCoKKzpubVthcF0ge2xoc30JCQkJCQkqOm5tYXBfbCoKKzp2bVthcF0ge2xoc30JCQkJCQkqOnZtYXBfbCoKKzpvbVthcF0ge2xoc30JCQkJCQkqOm9tYXBfbCoKKzptYXAhICAge2xoc30JCQkJCQkqOm1hcF9sISoKKzppbVthcF0ge2xoc30JCQkJCQkqOmltYXBfbCoKKzpsbVthcF0ge2xoc30JCQkJCQkqOmxtYXBfbCoKKzpjbVthcF0ge2xoc30JCQkJCQkqOmNtYXBfbCoKKwkJCUxpc3QgdGhlIGtleSBtYXBwaW5ncyBmb3IgdGhlIGtleSBzZXF1ZW5jZXMgc3RhcnRpbmcKKwkJCXdpdGgge2xoc30gaW4gdGhlIG1vZGVzIHdoZXJlIHRoZSBtYXAgY29tbWFuZCBhcHBsaWVzLgorCQkJe25vdCBpbiBWaX0KKworVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gbWFwIGEga2V5IG9yIGtleSBzZXF1ZW5jZSB0byBhIHN0cmluZyBvZgorY2hhcmFjdGVycy4gIFlvdSBjYW4gdXNlIHRoaXMgdG8gcHV0IGNvbW1hbmQgc2VxdWVuY2VzIHVuZGVyIGZ1bmN0aW9uIGtleXMsCit0cmFuc2xhdGUgb25lIGtleSBpbnRvIGFub3RoZXIsIGV0Yy4gIFNlZSB8Om1rZXhyY3wgZm9yIGhvdyB0byBzYXZlIGFuZAorcmVzdG9yZSB0aGUgY3VycmVudCBtYXBwaW5ncy4KKworCQkJCSo6bWFwLWxvY2FsKiAqOm1hcC08YnVmZmVyPiogKkUyMjQqICpFMjI1KgorSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG9uZSBvZiB0aGVzZSBjb21tYW5kcyBpcyAiPGJ1ZmZlcj4iIGl0IHdpbGwgYXBwbHkgdG8KK21hcHBpbmdzIGxvY2FsbHkgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIG9ubHkuICBFeGFtcGxlOiA+CisJOm1hcCA8YnVmZmVyPiAgLHcgIC9bLiw7XTxDUj4KK1RoZW4geW91IGNhbiBtYXAgIix3IiB0byBzb21ldGhpbmcgZWxzZSBpbiBhbm90aGVyIGJ1ZmZlcjogPgorCTptYXAgPGJ1ZmZlcj4gICx3ICAvWyMmIV08Q1I+CitUaGUgbG9jYWwgYnVmZmVyIG1hcHBpbmdzIGFyZSB1c2VkIGJlZm9yZSB0aGUgZ2xvYmFsIG9uZXMuCitUaGUgIjxidWZmZXI+IiBhcmd1bWVudCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNsZWFyIG1hcHBpbmdzOiA+CisJOnVubWFwIDxidWZmZXI+ICx3CisJOm1hcGNsZWFyIDxidWZmZXI+CitMb2NhbCBtYXBwaW5ncyBhcmUgYWxzbyBjbGVhcmVkIHdoZW4gYSBidWZmZXIgaXMgZGVsZXRlZCwgYnV0IG5vdCB3aGVuIGl0IGlzCit1bmxvYWRlZC4gIEp1c3QgbGlrZSBsb2NhbCBvcHRpb24gdmFsdWVzLgorCisJCQkJCQkqOm1hcC08c2lsZW50PiogKjptYXAtc2lsZW50KgorVG8gZGVmaW5lIGEgbWFwcGluZyB3aGljaCB3aWxsIG5vdCBiZSBlY2hvZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYWRkCisiPHNpbGVudD4iIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gIEV4YW1wbGU6ID4KKwk6bWFwIDxzaWxlbnQ+ICxoIC9IZWFkZXI8Q1I+CitUaGUgc2VhcmNoIHN0cmluZyB3aWxsIG5vdCBiZSBlY2hvZWQgd2hlbiB1c2luZyB0aGlzIG1hcHBpbmcuICBNZXNzYWdlcyBmcm9tCit0aGUgZXhlY3V0ZWQgY29tbWFuZCBhcmUgc3RpbGwgZ2l2ZW4gdGhvdWdoLiAgVG8gc2h1dCB0aGVtIHVwIHRvbywgYWRkIGEKKyI6c2lsZW50IiBpbiB0aGUgZXhlY3V0ZWQgY29tbWFuZDogPgorCTptYXAgPHNpbGVudD4gLGggOmV4ZSAiOnNpbGVudCBub3JtYWwgL0hlYWRlclxyIjxDUj4KK1Byb21wdHMgd2lsbCBzdGlsbCBiZSBnaXZlbiwgZS5nLiwgZm9yIGlucHV0ZGlhbG9nKCkuCitVc2luZyAiPHNpbGVudD4iIGZvciBhbiBhYmJyZXZpYXRpb24gaXMgcG9zc2libGUsIGJ1dCB3aWxsIGNhdXNlIHJlZHJhd2luZyBvZgordGhlIGNvbW1hbmQgbGluZSB0byBmYWlsLgorCisJCQkJCQkqOm1hcC08c2NyaXB0PiogKjptYXAtc2NyaXB0KgorSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG9uZSBvZiB0aGVzZSBjb21tYW5kcyBpcyAiPHNjcmlwdD4iIGFuZCBpdCBpcyB1c2VkIHRvCitkZWZpbmUgYSBuZXcgbWFwcGluZyBvciBhYmJyZXZpYXRpb24sIHRoZSBtYXBwaW5nIHdpbGwgb25seSByZW1hcCBjaGFyYWN0ZXJzCitpbiB0aGUge3Joc30gdXNpbmcgbWFwcGluZ3MgdGhhdCB3ZXJlIGRlZmluZWQgbG9jYWwgdG8gYSBzY3JpcHQsIHN0YXJ0aW5nIHdpdGgKKyI8U0lEPiIuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGF2b2lkIHRoYXQgbWFwcGluZ3MgZnJvbSBvdXRzaWRlIGEgc2NyaXB0CitpbnRlcmZlcmUgKGUuZy4sIHdoZW4gQ1RSTC1WIGlzIHJlbWFwcGVkIGluIG1zd2luLnZpbSksIGJ1dCBkbyB1c2Ugb3RoZXIKK21hcHBpbmdzIGRlZmluZWQgaW4gdGhlIHNjcmlwdC4KK05vdGU6ICI6bWFwIDxzY3JpcHQ+IiBhbmQgIjpub3JlbWFwIDxzY3JpcHQ+IiBkbyB0aGUgc2FtZSB0aGluZy4gIFRoZQorIjxzY3JpcHQ+IiBvdmVycnVsZXMgdGhlIGNvbW1hbmQgbmFtZS4gIFVzaW5nICI6bm9yZW1hcCA8c2NyaXB0PiIgaXMKK3ByZWZlcnJlZCwgYmVjYXVzZSBpdCdzIGNsZWFyZXIgdGhhdCByZW1hcHBpbmcgaXMgKG1vc3RseSkgZGlzYWJsZWQuCisKKwkJCQkJCSo6bWFwLTx1bmlxdWU+KiAqRTIyNiogKkUyMjcqCitJZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb25lIG9mIHRoZXNlIGNvbW1hbmRzIGlzICI8dW5pcXVlPiIgYW5kIGl0IGlzIHVzZWQgdG8KK2RlZmluZSBhIG5ldyBtYXBwaW5nIG9yIGFiYnJldmlhdGlvbiwgdGhlIGNvbW1hbmQgd2lsbCBmYWlsIGlmIHRoZSBtYXBwaW5nIG9yCithYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMuICBFeGFtcGxlOiA+CisJOm1hcCA8dW5pcXVlPiAsdyAgL1sjJiFdPENSPgorV2hlbiBkZWZpbmluZyBhIGxvY2FsIG1hcHBpbmcsIHRoZXJlIHdpbGwgYWxzbyBiZSBhIGNoZWNrIGlmIGEgZ2xvYmFsIG1hcAorYWxyZWFkeSBleGlzdHMgd2hpY2ggaXMgZXF1YWwuCitFeGFtcGxlIG9mIHdoYXQgd2lsbCBmYWlsOiA+CisJOm1hcCAsdyAgL1sjJiFdPENSPgorCTptYXAgPGJ1ZmZlcj4gPHVuaXF1ZT4gLHcgIC9bLiw7XTxDUj4KKworIjxidWZmZXI+IiwgIjxzaWxlbnQ+IiwgIjxzY3JpcHQ+IiBhbmQgIjx1bmlxdWU+IiBjYW4gYmUgdXNlZCBpbiBhbnkgb3JkZXIuCitUaGV5IG11c3QgYXBwZWFyIHJpZ2h0IGFmdGVyIHRoZSBjb21tYW5kLCBiZWZvcmUgYW55IG90aGVyIGFyZ3VtZW50cy4KKworCitNQVBQSU5HIEFORCBNT0RFUworCitUaGVyZSBhcmUgZml2ZSBzZXRzIG9mIG1hcHBpbmdzCistIEZvciBOb3JtYWwgbW9kZTogV2hlbiB0eXBpbmcgY29tbWFuZHMuCistIEZvciBWaXN1YWwgbW9kZTogV2hlbiB0eXBpbmcgY29tbWFuZHMgd2hpbGUgdGhlIFZpc3VhbCBhcmVhIGlzIGhpZ2hsaWdodGVkLgorLSBGb3IgT3BlcmF0b3ItcGVuZGluZyBtb2RlOiBXaGVuIGFuIG9wZXJhdG9yIGlzIHBlbmRpbmcgKGFmdGVyICJkIiwgInkiLCAiYyIsCisgIGV0Yy4pLiAgRXhhbXBsZTogIjpvbWFwIHsgdyIgbWFrZXMgInl7IiB3b3JrIGxpa2UgInl3IiBhbmQgImR7IiBsaWtlICJkdyIuCistIEZvciBJbnNlcnQgbW9kZS4gVGhlc2UgYXJlIGFsc28gdXNlZCBpbiBSZXBsYWNlIG1vZGUuCistIEZvciBDb21tYW5kLWxpbmUgbW9kZTogV2hlbiBlbnRlcmluZyBhICI6IiBvciAiLyIgY29tbWFuZC4KKworVGhlcmUgYXJlIG5vIHNlcGFyYXRlIG1hcHBpbmdzIGZvciBTZWxlY3QgbW9kZS4gIFRoZSBzYW1lIGFzIGZvciBWaXN1YWwgbW9kZQorYXJlIHVzZWQgfFNlbGVjdC1tb2RlLW1hcHBpbmd8LgorCitTcGVjaWFsIGNhc2U6IFdoaWxlIHR5cGluZyBhIGNvdW50IGZvciBhIGNvbW1hbmQgaW4gTm9ybWFsIG1vZGUsIG1hcHBpbmcgemVybworaXMgZGlzYWJsZWQuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG1hcCB6ZXJvIHdpdGhvdXQgbWFraW5nIGl0IGltcG9zc2libGUKK3RvIHR5cGUgYSBjb3VudCB3aXRoIGEgemVyby4KKworCQkJCQkJKm1hcC1vdmVydmlldyogKm1hcC1tb2RlcyoKK092ZXJ2aWV3IG9mIHdoaWNoIG1hcCBjb21tYW5kIHdvcmtzIGluIHdoaWNoIG1vZGU6CisKKyAgICBjb21tYW5kczoJCQkJICAgICAgbW9kZXM6IH4KKwkJCQkJICBOb3JtYWwgICAgIFZpc3VhbCAgT3BlcmF0b3ItcGVuZGluZyB+Cis6bWFwICAgOm5vcmVtYXAgICA6dW5tYXAgICA6bWFwY2xlYXIJICAgIHllcwkgICAgICAgeWVzCSAgeWVzCis6bm1hcCAgOm5ub3JlbWFwICA6bnVubWFwICA6bm1hcGNsZWFyCSAgICB5ZXMJCS0JICAgLQorOnZtYXAgIDp2bm9yZW1hcCAgOnZ1bm1hcCAgOnZtYXBjbGVhcgkgICAgIC0JICAgICAgIHllcwkgICAtCis6b21hcCAgOm9ub3JlbWFwICA6b3VubWFwICA6b21hcGNsZWFyCSAgICAgLQkJLQkgIHllcworCisJCQkJCSAgSW5zZXJ0ICBDb21tYW5kLWxpbmUJTGFuZy1BcmcgfgorOm1hcCEgIDpub3JlbWFwISAgOnVubWFwISAgOm1hcGNsZWFyIQkgICAgeWVzCSAgICAgICB5ZXMJICAgLQorOmltYXAgIDppbm9yZW1hcCAgOml1bm1hcCAgOmltYXBjbGVhcgkgICAgeWVzCQktCSAgIC0KKzpjbWFwICA6Y25vcmVtYXAgIDpjdW5tYXAgIDpjbWFwY2xlYXIJICAgICAtCSAgICAgICB5ZXMJICAgLQorOmxtYXAgIDpsbm9yZW1hcCAgOmx1bm1hcCAgOmxtYXBjbGVhcgkgICAgeWVzKiAgICAgICB5ZXMqCSAgeWVzKgorCitUaGUgb3JpZ2luYWwgVmkgZGlkIG5vdCBoYXZlIHNlcGFyYXRlIG1hcHBpbmdzIGZvcgorTm9ybWFsL1Zpc3VhbC9PcGVyYXRvci1wZW5kaW5nIG1vZGUgYW5kIGZvciBJbnNlcnQvQ29tbWFuZC1saW5lIG1vZGUuCitUaGVyZWZvcmUgdGhlICI6bWFwIiBhbmQgIjptYXAhIiBjb21tYW5kcyBlbnRlciBhbmQgZGlzcGxheSBtYXBwaW5ncyBmb3IKK3NldmVyYWwgbW9kZXMuICBJbiBWaW0geW91IGNhbiB1c2UgdGhlICI6bm1hcCIsICI6dm1hcCIsICI6b21hcCIsICI6Y21hcCIgYW5kCisiOmltYXAiIGNvbW1hbmRzIHRvIGVudGVyIG1hcHBpbmdzIGZvciBlYWNoIG1vZGUgc2VwYXJhdGVseS4KKworVG8gZW50ZXIgYSBtYXBwaW5nIGZvciBOb3JtYWwgYW5kIFZpc3VhbCBtb2RlLCBidXQgbm90IE9wZXJhdG9yLXBlbmRpbmcgbW9kZSwKK2ZpcnN0IGRlZmluZSBpdCBmb3IgYWxsIHRocmVlIG1vZGVzLCB0aGVuIHVubWFwIGl0IGZvciBPcGVyYXRvci1wZW5kaW5nIG1vZGU6CisJOm1hcCAgICB4eCBzb21ldGhpbmctZGlmZmljdWx0CisJOm91bm1hcCB4eAorTGlrZXdpc2UgZm9yIGEgbWFwcGluZyBmb3IgVmlzdWFsIGFuZCBPcGVyYXRvci1wZW5kaW5nIG1vZGUgb3IgTm9ybWFsIGFuZAorT3BlcmF0b3ItcGVuZGluZyBtb2RlLgorCisJCQkJCQkqbGFuZ3VhZ2UtbWFwcGluZyoKKyI6bG1hcCIgZGVmaW5lcyBhIG1hcHBpbmcgdGhhdCBhcHBsaWVzIHRvOgorLSBJbnNlcnQgbW9kZQorLSBDb21tYW5kLWxpbmUgbW9kZQorLSB3aGVuIGVudGVyaW5nIGEgc2VhcmNoIHBhdHRlcm4KKy0gdGhlIGFyZ3VtZW50IG9mIHRoZSBjb21tYW5kcyB0aGF0IGFjY2VwdCBhIHRleHQgY2hhcmFjdGVyLCBzdWNoIGFzICJyIiBhbmQKKyAgImYiCistIGZvciB0aGUgaW5wdXQoKSBsaW5lCitHZW5lcmFsbHk6IFdoZW5ldmVyIGEgY2hhcmFjdGVyIGlzIHRvIGJlIHR5cGVkIHRoYXQgaXMgcGFydCBvZiB0aGUgdGV4dCBpbiB0aGUKK2J1ZmZlciwgbm90IGEgVmltIGNvbW1hbmQgY2hhcmFjdGVyLiAgIkxhbmctQXJnIiBpc24ndCByZWFsbHkgYW5vdGhlciBtb2RlLAoraXQncyBqdXN0IHVzZWQgaGVyZSBmb3IgdGhpcyBzaXR1YXRpb24uCisgICBUaGUgc2ltcGxlc3Qgd2F5IHRvIGxvYWQgYSBzZXQgb2YgcmVsYXRlZCBsYW5ndWFnZSBtYXBwaW5ncyBpcyBieSB1c2luZyB0aGUKKydrZXltYXAnIG9wdGlvbi4gIFNlZSB8NDUuNXwuCisgICBJbiBJbnNlcnQgbW9kZSBhbmQgaW4gQ29tbWFuZC1saW5lIG1vZGUgdGhlIG1hcHBpbmdzIGNhbiBiZSBkaXNhYmxlZCB3aXRoCit0aGUgQ1RSTC1eIGNvbW1hbmQgfGlfQ1RSTC1efCB8Y19DVFJMLV58LiAgV2hlbiBzdGFydGluZyB0byBlbnRlciBhIG5vcm1hbAorY29tbWFuZCBsaW5lIChub3QgYSBzZWFyY2ggcGF0dGVybikgdGhlIG1hcHBpbmdzIGFyZSBkaXNhYmxlZCB1bnRpbCBhIENUUkwtXgoraXMgdHlwZWQuICBUaGUgc3RhdGUgbGFzdCB1c2VkIGlzIHJlbWVtYmVyZWQgZm9yIEluc2VydCBtb2RlIGFuZCBTZWFyY2gKK3BhdHRlcm5zIHNlcGFyYXRlbHkuICBUaGUgc3RhdGUgZm9yIEluc2VydCBtb2RlIGlzIGFsc28gdXNlZCB3aGVuIHR5cGluZyBhCitjaGFyYWN0ZXIgYXMgYW4gYXJndW1lbnQgdG8gY29tbWFuZCBsaWtlICJmIiBvciAidCIuCisgICBXaGVuIGFkZGluZyBhICI6bG1hcCIgbWFwcGluZyB0aGUgdXNlIG9mIHRoZXNlIG1hcHBpbmdzIGluIEluc2VydCBtb2RlIGFuZAorZm9yIFNlYXJjaCBwYXR0ZXJucyB3aWxsIGJlIHN3aXRjaGVkIG9uLgorICAgTGFuZ3VhZ2UgbWFwcGluZ3Mgd2lsbCBuZXZlciBiZSBhcHBsaWVkIHRvIGFscmVhZHkgbWFwcGVkIGNoYXJhY3RlcnMuICBUaGV5CithcmUgb25seSB1c2VkIGZvciB0eXBlZCBjaGFyYWN0ZXJzLiAgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIGxhbmd1YWdlIG1hcHBpbmcKK3dhcyBhbHJlYWR5IGRvbmUgd2hlbiB0eXBpbmcgdGhlIG1hcHBpbmcuCisKKwkJCQkJCQkqbWFwLW11bHRpYnl0ZSoKK0l0IGlzIHBvc3NpYmxlIHRvIG1hcCBtdWx0aWJ5dGUgY2hhcmFjdGVycywgYnV0IG9ubHkgdGhlIHdob2xlIGNoYXJhY3Rlci4gIFlvdQorY2Fubm90IG1hcCB0aGUgZmlyc3QgYnl0ZSBvbmx5LiAgVGhpcyB3YXMgZG9uZSB0byBwcmV2ZW50IHByb2JsZW1zIGluIHRoaXMKK3NjZW5hcmlvOiA+CisJOnNldCBlbmNvZGluZz1sYXRpbjEKKwk6aW1hcCA8TS1DPiBmb28KKwk6c2V0IGVuY29kaW5nPXV0Zi04CitUaGUgbWFwcGluZyBmb3IgPE0tQz4gaXMgZGVmaW5lZCB3aXRoIHRoZSBsYXRpbjEgZW5jb2RpbmcsIHJlc3VsdGluZyBpbiBhIDB4YzMKK2J5dGUuICBJZiB5b3UgdHlwZSB0aGUgY2hhcmFjdGVyIOEgKDB4ZWEgPE0tYT4pIGluIFVURi04IGVuY29kaW5nIHRoaXMgaXMgdGhlCit0d28gYnl0ZXMgMHhjMyAweGExLiAgWW91IGRvbid0IHdhbnQgdGhlIDB4YzMgYnl0ZSB0byBiZSBtYXBwZWQgdGhlbiwKK290aGVyd2lzZSBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIHR5cGUgdGhlIOEgY2hhcmFjdGVyLgorCisJCQkJCQkJKm1hcC1saXN0aW5nKgorV2hlbiBsaXN0aW5nIG1hcHBpbmdzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBmaXJzdCB0d28gY29sdW1ucyBhcmU6CisKKyAgICAgIENIQVIJTU9ERQl+CisgICAgIDxTcGFjZT4JTm9ybWFsLCBWaXN1YWwgYW5kIE9wZXJhdG9yLXBlbmRpbmcKKwluCU5vcm1hbAorCXYJVmlzdWFsCisJbwlPcGVyYXRvci1wZW5kaW5nCisJIQlJbnNlcnQgYW5kIENvbW1hbmQtbGluZQorCWkJSW5zZXJ0CisJbAkiOmxtYXAiIG1hcHBpbmdzIGZvciBJbnNlcnQsIENvbW1hbmQtbGluZSBhbmQgTGFuZy1BcmcKKwljCUNvbW1hbmQtbGluZQorCitKdXN0IGJlZm9yZSB0aGUge3Joc30gYSBzcGVjaWFsIGNoYXJhY3RlciBjYW4gYXBwZWFyOgorCSoJaW5kaWNhdGVzIHRoYXQgaXQgaXMgbm90IHJlbWFwcGFibGUKKwkmCWluZGljYXRlcyB0aGF0IG9ubHkgc2NyaXB0LWxvY2FsIG1hcHBpbmdzIGFyZSByZW1hcHBhYmxlCisJQAlpbmRpY2F0ZXMgYSBidWZmZXItbG9jYWwgbWFwcGluZworCitFdmVyeXRoaW5nIGZyb20gdGhlIGZpcnN0IG5vbi1ibGFuayBhZnRlciB7bGhzfSB1cCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lCisob3IgJ3wnKSBpcyBjb25zaWRlcmVkIHRvIGJlIHBhcnQgb2Yge3Joc30uICBUaGlzIGFsbG93cyB0aGUge3Joc30gdG8gZW5kCit3aXRoIGEgc3BhY2UuCisKK05vdGU6IFdoZW4gdXNpbmcgbWFwcGluZ3MgZm9yIFZpc3VhbCBtb2RlLCB5b3UgY2FuIHVzZSB0aGUgIic8IiBtYXJrLCB3aGljaAoraXMgdGhlIHN0YXJ0IG9mIHRoZSBsYXN0IHNlbGVjdGVkIFZpc3VhbCBhcmVhIGluIHRoZSBjdXJyZW50IGJ1ZmZlciB8Jzx8LgorCisJCQkJCQkJKm1hcF9iYWNrc2xhc2gqCitOb3RlIHRoYXQgb25seSBDVFJMLVYgaXMgbWVudGlvbmVkIGhlcmUgYXMgYSBzcGVjaWFsIGNoYXJhY3RlciBmb3IgbWFwcGluZ3MKK2FuZCBhYmJyZXZpYXRpb25zLiAgV2hlbiAnY3BvcHRpb25zJyBkb2VzIG5vdCBjb250YWluICdCJywgYSBiYWNrc2xhc2ggY2FuCithbHNvIGJlIHVzZWQgbGlrZSBDVFJMLVYuICBUaGUgPD4gbm90YXRpb24gY2FuIGJlIGZ1bGx5IHVzZWQgdGhlbiB8PD58LiAgQnV0Cit5b3UgY2Fubm90IHVzZSAiPEMtVj4iIGxpa2UgQ1RSTC1WIHRvIGVzY2FwZSB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mIHdoYXQKK2ZvbGxvd3MuCisKK1RvIG1hcCBhIGJhY2tzbGFzaCwgb3IgdXNlIGEgYmFja3NsYXNoIGxpdGVyYWxseSBpbiB0aGUge3Joc30sIHRoZSBzcGVjaWFsCitzZXF1ZW5jZSAiPEJzbGFzaD4iIGNhbiBiZSB1c2VkLiAgVGhpcyBhdm9pZHMgdGhlIG5lZWQgdG8gZG91YmxlIGJhY2tzbGFzaGVzCit3aGVuIHVzaW5nIG5lc3RlZCBtYXBwaW5ncy4KKworCQkJCQkJCSptYXAtYW1iaWd1b3VzKgorV2hlbiB0d28gbWFwcGluZ3Mgc3RhcnQgd2l0aCB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLCB0aGV5IGFyZQorYW1iaWd1b3VzLiAgRXhhbXBsZTogPgorCTppbWFwIGFhIGZvbworCTppbWFwIGFhYSBiYXIKK1doZW4gVmltIGhhcyByZWFkICJhYSIsIGl0IHdpbGwgbmVlZCB0byBnZXQgYW5vdGhlciBjaGFyYWN0ZXIgdG8gYmUgYWJsZSB0bworZGVjaWRlIGlmICJhYSIgb3IgImFhYSIgc2hvdWxkIGJlIG1hcHBlZC4gIFRoaXMgbWVhbnMgdGhhdCBhZnRlciB0eXBpbmcgImFhIgordGhhdCBtYXBwaW5nIHdvbid0IGdldCBleHBhbmRlZCB5ZXQsIFZpbSBpcyB3YWl0aW5nIGZvciBhbm90aGVyIGNoYXJhY3Rlci4KK0lmIHlvdSB0eXBlIGEgc3BhY2UsIHRoZW4gImZvbyIgd2lsbCBnZXQgaW5zZXJ0ZWQsIHBsdXMgdGhlIHNwYWNlLiAgSWYgeW91Cit0eXBlICJhIiwgdGhlbiAiYmFyIiB3aWxsIGdldCBpbnNlcnRlZC4KK3tWaSBkb2VzIG5vdCBhbGxvdyBhbWJpZ3VvdXMgbWFwcGluZ3N9CisKKwkJCQkJCQkqbWFwX0NUUkxfQyoKK0l0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBhIENUUkwtQyBpbiB0aGUge2xoc30uICBZb3UganVzdCBjYW4ndCBtYXAgQ1RSTC1DLgorVGhlIHJlYXNvbiBpcyB0aGF0IENUUkwtQyBtdXN0IGFsd2F5cyBiZSBhdmFpbGFibGUgdG8gYnJlYWsgYSBydW5uaW5nIGNvbW1hbmQuCitFeGNlcHRpb246IFdoZW4gdXNpbmcgdGhlIEdVSSB2ZXJzaW9uIG9uIE1TLVdpbmRvd3MgQ1RSTC1DIGNhbiBiZSBtYXBwZWQgdG8KK2FsbG93IGEgQ29weSBjb21tYW5kIHRvIHRoZSBjbGlwYm9hcmQuICBVc2UgQ1RSTC1CcmVhayB0byBpbnRlcnJ1cHQgVmltLgorCisJCQkJCQkJKm1hcF9zcGFjZV9pbl9saHMqCitUbyBpbmNsdWRlIGEgc3BhY2UgaW4ge2xoc30gcHJlY2VkZSBpdCB3aXRoIGEgQ1RSTC1WICh0eXBlIHR3byBDVFJMLVZzIGZvcgorZWFjaCBzcGFjZSkuCisJCQkJCQkJKm1hcF9zcGFjZV9pbl9yaHMqCitJZiB5b3Ugd2FudCBhIHtyaHN9IHRoYXQgc3RhcnRzIHdpdGggYSBzcGFjZSwgdXNlICI8U3BhY2U+Ii4gIFRvIGJlIGZ1bGx5IFZpCitjb21wYXRpYmxlIChidXQgdW5yZWFkYWJsZSkgZG9uJ3QgdXNlIHRoZSB8PD58IG5vdGF0aW9uLCBwcmVjZWRlIHtyaHN9IHdpdGggYQorc2luZ2xlIENUUkwtViAoeW91IGhhdmUgdG8gdHlwZSBDVFJMLVYgdHdvIHRpbWVzKS4KKwkJCQkJCQkqbWFwX2VtcHR5X3JocyoKK1lvdSBjYW4gY3JlYXRlIGFuIGVtcHR5IHtyaHN9IGJ5IHR5cGluZyBub3RoaW5nIGFmdGVyIGEgc2luZ2xlIENUUkwtViAoeW91CitoYXZlIHRvIHR5cGUgQ1RSTC1WIHR3byB0aW1lcykuICBVbmZvcnR1bmF0ZWx5LCB5b3UgY2Fubm90IGRvIHRoaXMgaW4gYSB2aW1yYworZmlsZS4KKwkJCQkJCQkqPE5vcD4qCitBIGVhc2llciB3YXkgdG8gZ2V0IGEgbWFwcGluZyB0aGF0IGRvZXNuJ3QgcHJvZHVjZSBhbnl0aGluZywgaXMgdG8gdXNlICI8Tm9wPiIKK2ZvciB0aGUge3Joc30uICBUaGlzIG9ubHkgd29ya3Mgd2hlbiB0aGUgfDw+fCBub3RhdGlvbiBpcyBlbmFibGVkLiAgRm9yCitleGFtcGxlLCB0byBtYWtlIHN1cmUgdGhhdCBmdW5jdGlvbiBrZXkgOCBkb2VzIG5vdGhpbmcgYXQgYWxsOiA+CisJOm1hcCAgPEY4PiAgPE5vcD4KKwk6bWFwISA8Rjg+ICA8Tm9wPgorPAorCQkJCQkqPExlYWRlcj4qICptYXBsZWFkZXIqCitUbyBkZWZpbmUgYSBtYXBwaW5nIHdoaWNoIHVzZXMgdGhlICJtYXBsZWFkZXIiIHZhcmlhYmxlLCB0aGUgc3BlY2lhbCBzdHJpbmcKKyI8TGVhZGVyPiIgY2FuIGJlIHVzZWQuICBJdCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgIm1hcGxlYWRlciIuCitJZiAibWFwbGVhZGVyIiBpcyBub3Qgc2V0IG9yIGVtcHR5LCBhIGJhY2tzbGFzaCBpcyB1c2VkIGluc3RlYWQuICBFeGFtcGxlOiA+CisJOm1hcCA8TGVhZGVyPkEgIG9hbm90aGVyIGxpbmU8RXNjPgorV29ya3MgbGlrZTogPgorCTptYXAgXEEgIG9hbm90aGVyIGxpbmU8RXNjPgorQnV0IGFmdGVyOiA+CisJOmxldCBtYXBsZWFkZXIgPSAiLCIKK0l0IHdvcmtzIGxpa2U6ID4KKwk6bWFwICxBICBvYW5vdGhlciBsaW5lPEVzYz4KKworTm90ZSB0aGF0IHRoZSB2YWx1ZSBvZiAibWFwbGVhZGVyIiBpcyB1c2VkIGF0IHRoZSBtb21lbnQgdGhlIG1hcHBpbmcgaXMKK2RlZmluZWQuICBDaGFuZ2luZyAibWFwbGVhZGVyIiBhZnRlciB0aGF0IGhhcyBubyBlZmZlY3QgZm9yIGFscmVhZHkgZGVmaW5lZAorbWFwcGluZ3MuCisKKwkJCQkJKjxMb2NhbExlYWRlcj4qICptYXBsb2NhbGxlYWRlcioKK0p1c3QgbGlrZSA8TGVhZGVyPiwgZXhjZXB0IHRoYXQgaXQgdXNlcyAibWFwbG9jYWxsZWFkZXIiIGluc3RlYWQgb2YKKyJtYXBsZWFkZXIiLiAgPExvY2FsTGVhZGVyPiBpcyB0byBiZSB1c2VkIGZvciBtYXBwaW5ncyB3aGljaCBhcmUgbG9jYWwgdG8gYQorYnVmZmVyLiAgRXhhbXBsZTogPgorICAgICAgOm1hcCA8TG9jYWxMZWFkZXI+cSAgXERvSXROb3cKKzwKK0luIGEgZ2xvYmFsIHBsdWdpbiA8TGVhZGVyPiBzaG91bGQgYmUgdXNlZCBhbmQgaW4gYSBmaWxldHlwZSBwbHVnaW4KKzxMb2NhbExlYWRlcj4uICAibWFwbGVhZGVyIiBhbmQgIm1hcGxvY2FsbGVhZGVyIiBjYW4gYmUgZXF1YWwuICBBbHRob3VnaCwgaWYKK3lvdSBtYWtlIHRoZW0gZGlmZmVyZW50LCB0aGVyZSBpcyBhIHNtYWxsZXIgY2hhbmNlIG9mIG1hcHBpbmdzIGZyb20gZ2xvYmFsCitwbHVnaW5zIHRvIGNsYXNoIHdpdGggbWFwcGluZ3MgZm9yIGZpbGV0eXBlIHBsdWdpbnMuICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkCitrZWVwICJtYXBsZWFkZXIiIGF0IHRoZSBkZWZhdWx0IGJhY2tzbGFzaCwgYW5kIHNldCAibWFwbG9jYWxsZWFkZXIiIHRvIGFuCit1bmRlcnNjb3JlLgorCisJCQkJCQkJKm1hcC08U0lEPioKK0luIGEgc2NyaXB0IHRoZSBzcGVjaWFsIGtleSBuYW1lICI8U0lEPiIgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGEgbWFwcGluZwordGhhdCdzIGxvY2FsIHRvIHRoZSBzY3JpcHQuICBTZWUgfDxTSUQ+fCBmb3IgZGV0YWlscy4KKworCQkJCQkJCSo8UGx1Zz4qCitUaGUgc3BlY2lhbCBrZXkgbmFtZSAiPFBsdWc+IiBjYW4gYmUgdXNlZCBmb3IgYW4gaW50ZXJuYWwgbWFwcGluZywgd2hpY2ggaXMKK25vdCB0byBiZSBtYXRjaGVkIHdpdGggYW55IGtleSBzZXF1ZW5jZS4gIFRoaXMgaXMgdXNlZnVsIGluIHBsdWdpbnMKK3x1c2luZy08UGx1Zz58LgorCisJCQkJCQkJKjxDaGFyPiogKjxDaGFyLT4qCitUbyBtYXAgYSBjaGFyYWN0ZXIgYnkgaXRzIGRlY2ltYWwsIG9jdGFsIG9yIGhleGFkZWNpbWFsIG51bWJlciB0aGUgPENoYXI+Citjb25zdHJ1Y3QgY2FuIGJlIHVzZWQ6CisJPENoYXItMTIzPgljaGFyYWN0ZXIgMTIzCisJPENoYXItMDMzPgljaGFyYWN0ZXIgMjcKKwk8Q2hhci0weDdmPgljaGFyYWN0ZXIgMTI3CitUaGlzIGlzIHVzZWZ1bCB0byBzcGVjaWZ5IGEgKG11bHRpLWJ5dGUpIGNoYXJhY3RlciBpbiBhICdrZXltYXAnIGZpbGUuCitVcHBlciBhbmQgbG93ZXJjYXNlIGRpZmZlcmVuY2VzIGFyZSBpZ25vcmVkLgorCisJCQkJCQkJKm1hcC1jb21tZW50cyoKK0l0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgYSBjb21tZW50IGFmdGVyIHRoZXNlIGNvbW1hbmRzLCBiZWNhdXNlIHRoZSAnIicKK2NoYXJhY3RlciBpcyBjb25zaWRlcmVkIHRvIGJlIHBhcnQgb2YgdGhlIHtsaHN9IG9yIHtyaHN9LgorCisJCQkJCQkJKm1hcF9iYXIqCitTaW5jZSB0aGUgJ3wnIGNoYXJhY3RlciBpcyB1c2VkIHRvIHNlcGFyYXRlIGEgbWFwIGNvbW1hbmQgZnJvbSB0aGUgbmV4dAorY29tbWFuZCwgeW91IHdpbGwgaGF2ZSB0byBkbyBzb21ldGhpbmcgc3BlY2lhbCB0byBpbmNsdWRlICBhICd8JyBpbiB7cmhzfS4KK1RoZXJlIGFyZSB0aHJlZSBtZXRob2RzOgorICAgdXNlCSAgICAgd29ya3Mgd2hlbgkJCSAgIGV4YW1wbGUJfgorICAgPEJhcj4gICAgICc8JyBpcyBub3QgaW4gJ2Nwb3B0aW9ucycJICAgOm1hcCBfbCA6IWxzIDxCYXI+IG1vcmVeTQorICAgXHwJICAgICAnYicgaXMgbm90IGluICdjcG9wdGlvbnMnCSAgIDptYXAgX2wgOiFscyBcfCBtb3JlXk0KKyAgIF5WfAkgICAgIGFsd2F5cywgaW4gVmltIGFuZCBWaQkgICA6bWFwIF9sIDohbHMgXlZ8IG1vcmVeTQorCisoaGVyZSBeViBzdGFuZHMgZm9yIENUUkwtVjsgdG8gZ2V0IG9uZSBDVFJMLVYgeW91IGhhdmUgdG8gdHlwZSBpdCB0d2ljZTsgeW91CitjYW5ub3QgdXNlIHRoZSA8PiBub3RhdGlvbiAiPEMtVj4iIGhlcmUpLgorCitBbGwgdGhyZWUgd29yayB3aGVuIHlvdSB1c2UgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgJ2Nwb3B0aW9ucycuCisKK1doZW4gJ2InIGlzIHByZXNlbnQgaW4gJ2Nwb3B0aW9ucycsICJcfCIgd2lsbCBiZSByZWNvZ25pemVkIGFzIGEgbWFwcGluZworZW5kaW5nIGluIGEgJ1wnIGFuZCB0aGVuIGFub3RoZXIgY29tbWFuZC4gIFRoaXMgaXMgVmkgY29tcGF0aWJsZSwgYnV0CitpbGxvZ2ljYWwgd2hlbiBjb21wYXJlZCB0byBvdGhlciBjb21tYW5kcy4KKworCQkJCQkJCSptYXBfcmV0dXJuKgorV2hlbiB5b3UgaGF2ZSBhIG1hcHBpbmcgdGhhdCBjb250YWlucyBhbiBFeCBjb21tYW5kLCB5b3UgbmVlZCB0byBwdXQgYSBsaW5lCit0ZXJtaW5hdG9yIGFmdGVyIGl0IHRvIGhhdmUgaXQgZXhlY3V0ZWQuICBUaGUgdXNlIG9mIDxDUj4gaXMgcmVjb21tZW5kZWQgZm9yCit0aGlzIChzZWUgfDw+fCkuICBFeGFtcGxlOiA+CisgICA6bWFwICBfbHMgIDohbHMgLWwgJTxDUj46ZWNobyAidGhlIGVuZCI8Q1I+CisKK1RvIGF2b2lkIG1hcHBpbmcgb2YgdGhlIGNoYXJhY3RlcnMgeW91IHR5cGUgaW4gaW5zZXJ0IG9yIENvbW1hbmQtbGluZSBtb2RlLAordHlwZSBhIENUUkwtViBmaXJzdC4gIFRoZSBtYXBwaW5nIGluIEluc2VydCBtb2RlIGlzIGRpc2FibGVkIGlmIHRoZSAncGFzdGUnCitvcHRpb24gaXMgb24uCisKK05vdGUgdGhhdCB3aGVuIGFuIGVycm9yIGlzIGVuY291bnRlcmVkICh0aGF0IGNhdXNlcyBhbiBlcnJvciBtZXNzYWdlIG9yIGJlZXApCit0aGUgcmVzdCBvZiB0aGUgbWFwcGluZyBpcyBub3QgZXhlY3V0ZWQuICBUaGlzIGlzIFZpLWNvbXBhdGlibGUuCisKK05vdGUgdGhhdCB0aGUgc2Vjb25kIGNoYXJhY3RlciAoYXJndW1lbnQpIG9mIHRoZSBjb21tYW5kcyBAelp0VGZGW11ybSdgInYKK2FuZCBDVFJMLVggaXMgbm90IG1hcHBlZC4gIFRoaXMgd2FzIGRvbmUgdG8gYmUgYWJsZSB0byB1c2UgYWxsIHRoZSBuYW1lZAorcmVnaXN0ZXJzIGFuZCBtYXJrcywgZXZlbiB3aGVuIHRoZSBjb21tYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBoYXMgYmVlbgorbWFwcGVkLgorCisJCQkJCQkJKm1hcC13aGljaC1rZXlzKgorSWYgeW91IGFyZSBnb2luZyB0byBtYXAgc29tZXRoaW5nLCB5b3Ugd2lsbCBuZWVkIHRvIGNob29zZSB3aGljaCBrZXkocykgdG8gdXNlCitmb3IgdGhlIHtsaHN9LiAgWW91IHdpbGwgaGF2ZSB0byBhdm9pZCBrZXlzIHRoYXQgYXJlIHVzZWQgZm9yIFZpbSBjb21tYW5kcywKK290aGVyd2lzZSB5b3Ugd291bGQgbm90IGJlIGFibGUgdG8gdXNlIHRob3NlIGNvbW1hbmRzIGFueW1vcmUuICBIZXJlIGFyZSBhIGZldworc3VnZ2VzdGlvbnM6CistIEZ1bmN0aW9uIGtleXMgPEYyPiwgPEYzPiwgZXRjLi4gIEFsc28gdGhlIHNoaWZ0ZWQgZnVuY3Rpb24ga2V5cyA8Uy1GMT4sCisgIDxTLUYyPiwgZXRjLiAgTm90ZSB0aGF0IDxGMT4gaXMgYWxyZWFkeSB1c2VkIGZvciB0aGUgaGVscCBjb21tYW5kLgorLSBNZXRhLWtleXMgKHdpdGggdGhlIEFMVCBrZXkgcHJlc3NlZCkuCistIFVzZSB0aGUgJ18nIG9yICcsJyBjaGFyYWN0ZXIgYW5kIHRoZW4gYW55IG90aGVyIGNoYXJhY3Rlci4gIFRoZSAiXyIgYW5kICIsIgorICBjb21tYW5kcyBkbyBleGlzdCBpbiBWaW0gKHNlZSB8X3wgYW5kIHwsfCksIGJ1dCB5b3UgcHJvYmFibHkgbmV2ZXIgdXNlIHRoZW0uCistIFVzZSBhIGtleSB0aGF0IGlzIGEgc3lub255bSBmb3IgYW5vdGhlciBjb21tYW5kLiAgRm9yIGV4YW1wbGU6IENUUkwtUCBhbmQKKyAgQ1RSTC1OLiAgVXNlIGFuIGV4dHJhIGNoYXJhY3RlciB0byBhbGxvdyBtb3JlIG1hcHBpbmdzLgorCitTZWUgdGhlIGZpbGUgImluZGV4IiBmb3Iga2V5cyB0aGF0IGFyZSBub3QgdXNlZCBhbmQgdGh1cyBjYW4gYmUgbWFwcGVkIHdpdGhvdXQKK2xvc2luZyBhbnkgYnVpbHRpbiBmdW5jdGlvbi4gIFlvdSBjYW4gYWxzbyB1c2UgIjpoZWxwIHtrZXl9XkQiIHRvIGZpbmQgb3V0IGlmCithIGtleSBpcyB1c2VkIGZvciBzb21lIGNvbW1hbmQuICAoe2tleX0gaXMgdGhlIHNwZWNpZmljIGtleSB5b3Ugd2FudCB0byBmaW5kCitvdXQgYWJvdXQsIF5EIGlzIENUUkwtRCkuCisKKwkJCQkJCQkqbWFwLWV4YW1wbGVzKgorQSBmZXcgZXhhbXBsZXMgKGdpdmVuIGFzIHlvdSB0eXBlIHRoZW0sIGZvciAiPENSPiIgeW91IHR5cGUgZm91ciBjaGFyYWN0ZXJzOwordGhlICc8JyBmbGFnIG11c3Qgbm90IGJlIHByZXNlbnQgaW4gJ2Nwb3B0aW9ucycgZm9yIHRoaXMgdG8gd29yaykuID4KKworICAgOm1hcCA8RjM+ICBvI2luY2x1ZGUKKyAgIDptYXAgPE0tZz4gL2ZvbzxDUj5jd2JhcjxFc2M+CisgICA6bWFwIF94ICAgIGQvRU5EL2U8Q1I+CisgICA6bWFwISBxcSAgIHF1YWRyaWxsaW9uIHF1ZXN0aW9ucworPAorCQkJCQkJCSptYXAtdHlwaW5nKgorVmltIHdpbGwgY29tcGFyZSB3aGF0IHlvdSB0eXBlIHdpdGggdGhlIHN0YXJ0IG9mIGEgbWFwcGVkIHNlcXVlbmNlLiAgSWYgdGhlcmUKK2lzIGFuIGluY29tcGxldGUgbWF0Y2gsIGl0IHdpbGwgZ2V0IG1vcmUgY2hhcmFjdGVycyB1bnRpbCB0aGVyZSBlaXRoZXIgaXMgYQorY29tcGxldGUgbWF0Y2ggb3IgdW50aWwgdGhlcmUgaXMgbm8gbWF0Y2ggYXQgYWxsLiAgRXhhbXBsZTogSWYgeW91IG1hcCEgInFxIiwKK3RoZSBmaXJzdCAncScgd2lsbCBub3QgYXBwZWFyIG9uIHRoZSBzY3JlZW4gdW50aWwgeW91IHR5cGUgYW5vdGhlcgorY2hhcmFjdGVyLiAgVGhpcyBpcyBiZWNhdXNlIFZpbSBjYW5ub3Qga25vdyBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgd2lsbCBiZSBhCisncScgb3Igbm90LiAgSWYgdGhlICd0aW1lb3V0JyBvcHRpb24gaXMgb24gKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSBWaW0gd2lsbAorb25seSB3YWl0IGZvciBvbmUgc2Vjb25kIChvciBhcyBsb25nIGFzIHNwZWNpZmllZCB3aXRoIHRoZSAndGltZW91dGxlbicKK29wdGlvbikuICBBZnRlciB0aGF0IGl0IGFzc3VtZXMgdGhhdCB0aGUgJ3EnIGlzIHRvIGJlIGludGVycHJldGVkIGFzIHN1Y2guICBJZgoreW91IHR5cGUgc2xvd2x5LCBvciB5b3VyIHN5c3RlbSBpcyBzbG93LCByZXNldCB0aGUgJ3RpbWVvdXQnIG9wdGlvbi4gIFRoZW4geW91CittaWdodCB3YW50IHRvIHNldCB0aGUgJ3R0aW1lb3V0JyBvcHRpb24uCisKKwkJCQkJCQkqbWFwLWtleXMtZmFpbHMqCitUaGVyZSBpcyBvbmUgc2l0dWF0aW9uIHdoZXJlIGtleSBjb2RlcyBtaWdodCBub3QgYmUgcmVjb2duaXplZDoKKy0gVmltIGNhbiBvbmx5IHJlYWQgcGFydCBvZiB0aGUga2V5IGNvZGUuICBNb3N0bHkgdGhpcyBpcyBvbmx5IHRoZSBmaXJzdAorICBjaGFyYWN0ZXIuICBUaGlzIGhhcHBlbnMgb24gc29tZSBVbml4IHZlcnNpb25zIGluIGFuIHh0ZXJtLgorLSBUaGUga2V5IGNvZGUgaXMgYWZ0ZXIgY2hhcmFjdGVyKHMpIHRoYXQgYXJlIG1hcHBlZC4gIEUuZy4sICI8RjE+PEYxPiIgb3IKKyAgImc8RjE+Ii4KK1RoZSByZXN1bHQgaXMgdGhhdCB0aGUga2V5IGNvZGUgaXMgbm90IHJlY29nbml6ZWQgaW4gdGhpcyBzaXR1YXRpb24sIGFuZCB0aGUKK21hcHBpbmcgZmFpbHMuCitUaGVyZSBhcmUgdHdvIGFjdGlvbnMgbmVlZGVkIHRvIGF2b2lkIHRoaXMgcHJvYmxlbToKKy0gUmVtb3ZlIHRoZSAnSycgZmxhZyBmcm9tICdjcG9wdGlvbnMnLiAgVGhpcyB3aWxsIG1ha2UgVmltIHdhaXQgZm9yIHRoZSByZXN0CisgIG9mIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBmdW5jdGlvbiBrZXkuCistIFdoZW4gdXNpbmcgPEYxPiB0byA8RjQ+IHRoZSBhY3R1YWwga2V5IGNvZGUgZ2VuZXJhdGVkIG1heSBjb3JyZXNwb25kIHRvCisgIDx4RjE+IHRvIDx4RjQ+LiAgVGhlcmUgYXJlIG1hcHBpbmdzIGZyb20gPHhGMT4gdG8gPEYxPiwgPHhGMj4gdG8gPEYyPiwgZXRjLiwKKyAgYnV0IHRoZXNlIGFyZSBub3QgcmVjb2duaXplZCBhZnRlciBhbm90aGVyIGhhbGYgYSBtYXBwaW5nLiAgTWFrZSBzdXJlIHRoZQorICBrZXkgY29kZXMgZm9yIDxGMT4gdG8gPEY0PiBhcmUgY29ycmVjdDogPgorCTpzZXQgPEYxPj08dHlwZSBDVFJMLVY+PHR5cGUgRjE+Cis8IFR5cGUgdGhlIDxGMT4gYXMgZm91ciBjaGFyYWN0ZXJzLiAgVGhlIHBhcnQgYWZ0ZXIgdGhlICI9IiBtdXN0IGJlIGRvbmUgd2l0aAorICB0aGUgYWN0dWFsIGtleXMsIG5vdCB0aGUgbGl0ZXJhbCB0ZXh0LgorQW5vdGhlciBzb2x1dGlvbiBpcyB0byB1c2UgdGhlIGFjdHVhbCBrZXkgY29kZSBpbiB0aGUgbWFwcGluZyBmb3IgdGhlIHNlY29uZAorc3BlY2lhbCBrZXk6ID4KKwk6bWFwIDxGMT48RXNjPk9QIDplY2hvICJ5ZXMiPENSPgorRG9uJ3QgdHlwZSBhIHJlYWwgPEVzYz4sIFZpbSB3aWxsIHJlY29nbml6ZSB0aGUga2V5IGNvZGUgYW5kIHJlcGxhY2UgaXQgd2l0aAorPEYxPiBhbnl3YXkuCisKKwkJCQkJCSpyZWN1cnNpdmVfbWFwcGluZyoKK0lmIHlvdSBpbmNsdWRlIHRoZSB7bGhzfSBpbiB0aGUge3Joc30geW91IGhhdmUgYSByZWN1cnNpdmUgbWFwcGluZy4gIFdoZW4KK3tsaHN9IGlzIHR5cGVkLCBpdCB3aWxsIGJlIHJlcGxhY2VkIHdpdGgge3Joc30uICBXaGVuIHRoZSB7bGhzfSB3aGljaCBpcworaW5jbHVkZWQgaW4ge3Joc30gaXMgZW5jb3VudGVyZWQgaXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHtyaHN9LCBhbmQgc28gb24uCitUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHJlcGVhdCBhIGNvbW1hbmQgYW4gaW5maW5pdGUgbnVtYmVyIG9mIHRpbWVzLiAgVGhlCitvbmx5IHByb2JsZW0gaXMgdGhhdCB0aGUgb25seSB3YXkgdG8gc3RvcCB0aGlzIGlzIGJ5IGNhdXNpbmcgYW4gZXJyb3IuICBUaGUKK21hY3JvcyB0byBzb2x2ZSBhIG1hemUgdXNlcyB0aGlzLCBsb29rIHRoZXJlIGZvciBhbiBleGFtcGxlLiAgVGhlcmUgaXMgb25lCitleGNlcHRpb246IElmIHRoZSB7cmhzfSBzdGFydHMgd2l0aCB7bGhzfSwgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBub3QgbWFwcGVkCithZ2FpbiAodGhpcyBpcyBWaSBjb21wYXRpYmxlKS4KK0ZvciBleGFtcGxlOiA+CisgICA6bWFwIGFiIGFiY2QKK3dpbGwgZXhlY3V0ZSB0aGUgImEiIGNvbW1hbmQgYW5kIGluc2VydCAiYmNkIiBpbiB0aGUgdGV4dC4gIFRoZSAiYWIiIGluIHRoZQore3Joc30gd2lsbCBub3QgYmUgbWFwcGVkIGFnYWluLgorCitJZiB5b3Ugd2FudCB0byBleGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0d28ga2V5cyB5b3Ugc2hvdWxkIHVzZSB0aGUgOm5vcmVtYXAKK2NvbW1hbmQuICBGb3IgZXhhbXBsZTogPgorICAgOm5vcmVtYXAgayBqCisgICA6bm9yZW1hcCBqIGsKK1RoaXMgd2lsbCBleGNoYW5nZSB0aGUgY3Vyc29yIHVwIGFuZCBkb3duIGNvbW1hbmRzLgorCitXaXRoIHRoZSBub3JtYWwgOm1hcCBjb21tYW5kLCB3aGVuIHRoZSAncmVtYXAnIG9wdGlvbiBpcyBvbiwgbWFwcGluZyB0YWtlcworcGxhY2UgdW50aWwgdGhlIHRleHQgaXMgZm91bmQgbm90IHRvIGJlIGEgcGFydCBvZiBhIHtsaHN9LiAgRm9yIGV4YW1wbGUsIGlmCit5b3UgdXNlOiA+CisgICA6bWFwIHggeQorICAgOm1hcCB5IHgKK1ZpbSB3aWxsIHJlcGxhY2UgeCB3aXRoIHksIGFuZCB0aGVuIHkgd2l0aCB4LCBldGMuICBXaGVuIHRoaXMgaGFzIGhhcHBlbmVkCisnbWF4bWFwZGVwdGgnIHRpbWVzIChkZWZhdWx0IDEwMDApLCBWaW0gd2lsbCBnaXZlIHRoZSBlcnJvciBtZXNzYWdlCisicmVjdXJzaXZlIG1hcHBpbmciLgorCisJCQkJCQkJKjptYXAtdW5kbyoKK0lmIHlvdSBpbmNsdWRlIGFuIHVuZG8gY29tbWFuZCBpbnNpZGUgYSBtYXBwZWQgc2VxdWVuY2UsIHRoaXMgd2lsbCBicmluZyB0aGUKK3RleHQgYmFjayBpbiB0aGUgc3RhdGUgYmVmb3JlIGV4ZWN1dGluZyB0aGUgbWFjcm8uICBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aAordGhlIG9yaWdpbmFsIFZpLCBhcyBsb25nIGFzIHRoZXJlIGlzIG9ubHkgb25lIHVuZG8gY29tbWFuZCBpbiB0aGUgbWFwcGVkCitzZXF1ZW5jZSAoaGF2aW5nIHR3byB1bmRvIGNvbW1hbmRzIGluIGEgbWFwcGVkIHNlcXVlbmNlIGRpZCBub3QgbWFrZSBzZW5zZQoraW4gdGhlIG9yaWdpbmFsIFZpLCB5b3Ugd291bGQgZ2V0IGJhY2sgdGhlIHRleHQgYmVmb3JlIHRoZSBmaXJzdCB1bmRvKS4KKworCQkJCQkJCSo6bWFwLXNwZWNpYWwta2V5cyoKK1RoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIG1hcCBhIHNwZWNpYWwga2V5OgorMS4gVGhlIFZpLWNvbXBhdGlibGUgbWV0aG9kOiBNYXAgdGhlIGtleSBjb2RlLiAgT2Z0ZW4gdGhpcyBpcyBhIHNlcXVlbmNlIHRoYXQKKyAgIHN0YXJ0cyB3aXRoIDxFc2M+LiAgVG8gZW50ZXIgYSBtYXBwaW5nIGxpa2UgdGhpcyB5b3UgdHlwZSAiOm1hcCAiIGFuZCB0aGVuCisgICB5b3UgaGF2ZSB0byB0eXBlIENUUkwtViBiZWZvcmUgaGl0dGluZyB0aGUgZnVuY3Rpb24ga2V5LiAgTm90ZSB0aGF0IHdoZW4KKyAgIHRoZSBrZXkgY29kZSBmb3IgdGhlIGtleSBpcyBpbiB0aGUgdGVybWNhcCAodGhlIHRfIG9wdGlvbnMpLCBpdCB3aWxsCisgICBhdXRvbWF0aWNhbGx5IGJlIHRyYW5zbGF0ZWQgaW50byB0aGUgaW50ZXJuYWwgY29kZSBhbmQgYmVjb21lIHRoZSBzZWNvbmQKKyAgIHdheSBvZiBtYXBwaW5nICh1bmxlc3MgdGhlICdrJyBmbGFnIGlzIGluY2x1ZGVkIGluICdjcG9wdGlvbnMnKS4KKzIuIFRoZSBzZWNvbmQgbWV0aG9kIGlzIHRvIHVzZSB0aGUgaW50ZXJuYWwgY29kZSBmb3IgdGhlIGZ1bmN0aW9uIGtleS4gIFRvCisgICBlbnRlciBzdWNoIGEgbWFwcGluZyB0eXBlIENUUkwtSyBhbmQgdGhlbiBoaXQgdGhlIGZ1bmN0aW9uIGtleSwgb3IgdXNlCisgICB0aGUgZm9ybSAiIzEiLCAiIzIiLCAuLiAiIzkiLCAiIzAiLCAiPFVwPiIsICI8Uy1Eb3duPiIsICI8Uy1GNz4iLCBldGMuCisgICAoc2VlIHRhYmxlIG9mIGtleXMgfGtleS1ub3RhdGlvbnwsIGFsbCBrZXlzIGZyb20gPFVwPiBjYW4gYmUgdXNlZCkuICBUaGUKKyAgIGZpcnN0IHRlbiBmdW5jdGlvbiBrZXlzIGNhbiBiZSBkZWZpbmVkIGluIHR3byB3YXlzOiBKdXN0IHRoZSBudW1iZXIsIGxpa2UKKyAgICIjMiIsIGFuZCB3aXRoICI8Rj4iLCBsaWtlICI8RjI+Ii4gIEJvdGggc3RhbmQgZm9yIGZ1bmN0aW9uIGtleSAyLiAgIiMwIgorICAgcmVmZXJzIHRvIGZ1bmN0aW9uIGtleSAxMCwgZGVmaW5lZCB3aXRoIG9wdGlvbiAndF9mMTAnLCB3aGljaCBtYXkgYmUKKyAgIGZ1bmN0aW9uIGtleSB6ZXJvIG9uIHNvbWUga2V5Ym9hcmRzLiAgVGhlIDw+IGZvcm0gY2Fubm90IGJlIHVzZWQgd2hlbgorICAgJ2Nwb3B0aW9ucycgaW5jbHVkZXMgdGhlICc8JyBmbGFnLgorMy4gVXNlIHRoZSB0ZXJtY2FwIGVudHJ5LCB3aXRoIHRoZSBmb3JtIDx0X3h4Piwgd2hlcmUgInh4IiBpcyB0aGUgbmFtZSBvZiB0aGUKKyAgIHRlcm1jYXAgZW50cnkuICBBbnkgc3RyaW5nIGVudHJ5IGNhbiBiZSB1c2VkLiAgRm9yIGV4YW1wbGU6ID4KKyAgICAgOm1hcCA8dF9GMz4gRworPCAgTWFwcyBmdW5jdGlvbiBrZXkgMTMgdG8gIkciLiAgVGhpcyBkb2VzIG5vdCB3b3JrIGlmICdjcG9wdGlvbnMnIGluY2x1ZGVzCisgICB0aGUgJzwnIGZsYWcuCisKK1RoZSBhZHZhbnRhZ2Ugb2YgdGhlIHNlY29uZCBhbmQgdGhpcmQgbWV0aG9kIGlzIHRoYXQgdGhlIG1hcHBpbmcgd2lsbCB3b3JrIG9uCitkaWZmZXJlbnQgdGVybWluYWxzIHdpdGhvdXQgbW9kaWZpY2F0aW9uICh0aGUgZnVuY3Rpb24ga2V5IHdpbGwgYmUKK3RyYW5zbGF0ZWQgaW50byB0aGUgc2FtZSBpbnRlcm5hbCBjb2RlIG9yIHRoZSBhY3R1YWwga2V5IGNvZGUsIG5vIG1hdHRlciB3aGF0Cit0ZXJtaW5hbCB5b3UgYXJlIHVzaW5nLiAgVGhlIHRlcm1jYXAgbXVzdCBiZSBjb3JyZWN0IGZvciB0aGlzIHRvIHdvcmssIGFuZCB5b3UKK211c3QgdXNlIHRoZSBzYW1lIG1hcHBpbmdzKS4KKworREVUQUlMOiBWaW0gZmlyc3QgY2hlY2tzIGlmIGEgc2VxdWVuY2UgZnJvbSB0aGUga2V5Ym9hcmQgaXMgbWFwcGVkLiAgSWYgaXQKK2lzbid0IHRoZSB0ZXJtaW5hbCBrZXkgY29kZXMgYXJlIHRyaWVkIChzZWUgfHRlcm1pbmFsLW9wdGlvbnN8KS4gIElmIGEKK3Rlcm1pbmFsIGNvZGUgaXMgZm91bmQgaXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgaW50ZXJuYWwgY29kZS4gIFRoZW4gdGhlIGNoZWNrCitmb3IgYSBtYXBwaW5nIGlzIGRvbmUgYWdhaW4gKHNvIHlvdSBjYW4gbWFwIGFuIGludGVybmFsIGNvZGUgdG8gc29tZXRoaW5nCitlbHNlKS4gIFdoYXQgaXMgd3JpdHRlbiBpbnRvIHRoZSBzY3JpcHQgZmlsZSBkZXBlbmRzIG9uIHdoYXQgaXMgcmVjb2duaXplZC4KK0lmIHRoZSB0ZXJtaW5hbCBrZXkgY29kZSB3YXMgcmVjb2duaXplZCBhcyBhIG1hcHBpbmcgdGhlIGtleSBjb2RlIGl0c2VsZiBpcword3JpdHRlbiB0byB0aGUgc2NyaXB0IGZpbGUuICBJZiBpdCB3YXMgcmVjb2duaXplZCBhcyBhIHRlcm1pbmFsIGNvZGUgdGhlCitpbnRlcm5hbCBjb2RlIGlzIHdyaXR0ZW4gdG8gdGhlIHNjcmlwdCBmaWxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIEFiYnJldmlhdGlvbnMJCQkqYWJicmV2aWF0aW9ucyogKkFiYnJldmlhdGlvbnMqCisKK0FiYnJldmlhdGlvbnMgYXJlIHVzZWQgaW4gSW5zZXJ0IG1vZGUsIFJlcGxhY2UgbW9kZSBhbmQgQ29tbWFuZC1saW5lIG1vZGUuCitJZiB5b3UgZW50ZXIgYSB3b3JkIHRoYXQgaXMgYW4gYWJicmV2aWF0aW9uLCBpdCBpcyByZXBsYWNlZCB3aXRoIHRoZSB3b3JkIGl0CitzdGFuZHMgZm9yLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBzYXZlIHR5cGluZyBmb3Igb2Z0ZW4gdXNlZCBsb25nIHdvcmRzLiAgQW5kCit5b3UgY2FuIHVzZSBpdCB0byBhdXRvbWF0aWNhbGx5IGNvcnJlY3Qgb2J2aW91cyBzcGVsbGluZyBlcnJvcnMuCitFeGFtcGxlczoKKworCTppYWIgbXMgTWljcm9Tb2Z0CisJOmlhYiB0aWhzIHRoaXMKKworVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGFiYnJldmlhdGlvbnM6CisKK2Z1bGwtaWQJICBUaGUgImZ1bGwtaWQiIHR5cGUgY29uc2lzdHMgZW50aXJlbHkgb2Yga2V5d29yZCBjaGFyYWN0ZXJzIChsZXR0ZXJzCisJICBhbmQgY2hhcmFjdGVycyBmcm9tICdpc2tleXdvcmQnIG9wdGlvbikuICBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbgorCSAgYWJicmV2aWF0aW9uLgorCisJICBFeGFtcGxlczogImZvbyIsICJnMyIsICItMSIKKworZW5kLWlkCSAgVGhlICJlbmQtaWQiIHR5cGUgZW5kcyBpbiBhIGtleXdvcmQgY2hhcmFjdGVyLCBidXQgYWxsIHRoZSBvdGhlcgorCSAgY2hhcmFjdGVycyBhcmUgbm90IGtleXdvcmQgY2hhcmFjdGVycy4KKworCSAgRXhhbXBsZXM6ICIjaSIsICIuLmYiLCAiJC83IgorCitub24taWQJICBUaGUgIm5vbi1pZCIgdHlwZSBlbmRzIGluIGEgbm9uLWtleXdvcmQgY2hhcmFjdGVyLCB0aGUgb3RoZXIKKwkgIGNoYXJhY3RlcnMgbWF5IGJlIG9mIGFueSB0eXBlLCBleGNsdWRpbmcgc3BhY2UgYW5kIFRhYi4gIHt0aGlzIHR5cGUKKwkgIGlzIG5vdCBzdXBwb3J0ZWQgYnkgVml9CisKKwkgIEV4YW1wbGVzOiAiZGVmIyIsICI0LzckIgorCitFeGFtcGxlcyBvZiBzdHJpbmdzIHRoYXQgY2Fubm90IGJlIGFiYnJldmlhdGlvbnM6ICJhLmIiLCAiI2RlZiIsICJhIGIiLCAiXyRyIgorCitBbiBhYmJyZXZpYXRpb24gaXMgb25seSByZWNvZ25pemVkIHdoZW4geW91IHR5cGUgYSBub24ta2V5d29yZCBjaGFyYWN0ZXIuCitUaGlzIGNhbiBhbHNvIGJlIHRoZSA8RXNjPiB0aGF0IGVuZHMgaW5zZXJ0IG1vZGUgb3IgdGhlIDxDUj4gdGhhdCBlbmRzIGEKK2NvbW1hbmQuICBUaGUgbm9uLWtleXdvcmQgY2hhcmFjdGVyIHdoaWNoIGVuZHMgdGhlIGFiYnJldmlhdGlvbiBpcyBpbnNlcnRlZAorYWZ0ZXIgdGhlIGV4cGFuZGVkIGFiYnJldmlhdGlvbi4gIEFuIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHRoZSBjaGFyYWN0ZXIgPEMtXT4sCit3aGljaCBpcyB1c2VkIHRvIGV4cGFuZCBhbiBhYmJyZXZpYXRpb24gd2l0aG91dCBpbnNlcnRpbmcgYW55IGV4dHJhCitjaGFyYWN0ZXJzLgorCitFeGFtcGxlOiA+CisgICA6YWIgaGgJaGVsbG8KKzwJICAgICJoaDxTcGFjZT4iIGlzIGV4cGFuZGVkIHRvICJoZWxsbzxTcGFjZT4iCisJICAgICJoaDxDLV0+IiBpcyBleHBhbmRlZCB0byAiaGVsbG8iCisKK1RoZSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgY3Vyc29yIG11c3QgbWF0Y2ggdGhlIGFiYnJldmlhdGlvbi4gIEVhY2ggdHlwZSBoYXMKK2FuIGFkZGl0aW9uYWwgcnVsZToKKworZnVsbC1pZAkgIEluIGZyb250IG9mIHRoZSBtYXRjaCBpcyBhIG5vbi1rZXl3b3JkIGNoYXJhY3Rlciwgb3IgdGhpcyBpcyB3aGVyZQorCSAgdGhlIGxpbmUgb3IgaW5zZXJ0aW9uIHN0YXJ0cy4gIEV4Y2VwdGlvbjogV2hlbiB0aGUgYWJicmV2aWF0aW9uIGlzCisJICBvbmx5IG9uZSBjaGFyYWN0ZXIsIGl0IGlzIG5vdCByZWNvZ25pemVkIGlmIHRoZXJlIGlzIGEgbm9uLWtleXdvcmQKKwkgIGNoYXJhY3RlciBpbiBmcm9udCBvZiBpdCwgb3RoZXIgdGhhbiBhIHNwYWNlIG9yIGEgPFRhYj4uCisKK2VuZC1pZAkgIEluIGZyb250IG9mIHRoZSBtYXRjaCBpcyBhIGtleXdvcmQgY2hhcmFjdGVyLCBvciBhIHNwYWNlIG9yIGEgPFRhYj4sCisJICBvciB0aGlzIGlzIHdoZXJlIHRoZSBsaW5lIG9yIGluc2VydGlvbiBzdGFydHMuCisKK25vbi1pZAkgIEluIGZyb250IG9mIHRoZSBtYXRjaCBpcyBhIHNwYWNlLCA8VGFiPiBvciB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgb3IKKwkgIHRoZSBpbnNlcnRpb24uCisKK0V4YW1wbGVzOiAoe0NVUlNPUn0gaXMgd2hlcmUgeW91IHR5cGUgYSBub24ta2V5d29yZCBjaGFyYWN0ZXIpID4KKyAgIDphYiBmb28gICBmb3VyIG9sZCBvdHRlcnMKKzwJCSIgZm9ve0NVUlNPUn0iCSAgaXMgZXhwYW5kZWQgdG8gIiBmb3VyIG9sZCBvdHRlcnMiCisJCSIgZm9vYmFye0NVUlNPUn0iIGlzIG5vdCBleHBhbmRlZAorCQkiYmFyZm9ve0NVUlNPUn0iICBpcyBub3QgZXhwYW5kZWQKKz4KKyAgIDphYiAjaSAjaW5jbHVkZQorPAkJIiNpe0NVUlNPUn0iCSAgaXMgZXhwYW5kZWQgdG8gIiNpbmNsdWRlIgorCQkiPiNpe0NVUlNPUn0iCSAgaXMgbm90IGV4cGFuZGVkCis+CisgICA6YWIgOzsgPGVuZG9mbGluZT4iCis8CQkidGVzdDs7IgkgIGlzIG5vdCBleHBhbmRlZAorCQkidGVzdCA7OyIJICBpcyBleHBhbmRlZCB0byAidGVzdCA8ZW5kb2ZsaW5lPiIKKworVG8gYXZvaWQgdGhlIGFiYnJldmlhdGlvbiBpbiBpbnNlcnQgbW9kZTogVHlwZSBwYXJ0IG9mIHRoZSBhYmJyZXZpYXRpb24sIGV4aXQKK2luc2VydCBtb2RlIHdpdGggPEVzYz4sIHJlLWVudGVyIGluc2VydCBtb2RlIHdpdGggImEiIGFuZCB0eXBlIHRoZSByZXN0LiAgT3IKK3R5cGUgQ1RSTC1WIGJlZm9yZSB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBhYmJyZXZpYXRpb24uCitUbyBhdm9pZCB0aGUgYWJicmV2aWF0aW9uIGluIENvbW1hbmQtbGluZSBtb2RlOiBUeXBlIENUUkwtViB0d2ljZSBzb21ld2hlcmUgaW4KK3RoZSBhYmJyZXZpYXRpb24gdG8gYXZvaWQgaXQgdG8gYmUgcmVwbGFjZWQuICBBIENUUkwtViBpbiBmcm9udCBvZiBhIG5vcm1hbAorY2hhcmFjdGVyIGlzIG1vc3RseSBpZ25vcmVkIG90aGVyd2lzZS4KKworSXQgaXMgcG9zc2libGUgdG8gbW92ZSB0aGUgY3Vyc29yIGFmdGVyIGFuIGFiYnJldmlhdGlvbjogPgorICAgOmlhYiBpZiBpZiAoKTxMZWZ0PgorVGhpcyBkb2VzIG5vdCB3b3JrIGlmICdjcG9wdGlvbnMnIGluY2x1ZGVzIHRoZSAnPCcgZmxhZy4gfDw+fAorCitZb3UgY2FuIGV2ZW4gZG8gbW9yZSBjb21wbGljYXRlZCB0aGluZ3MuICBGb3IgZXhhbXBsZSwgdG8gY29uc3VtZSB0aGUgc3BhY2UKK3R5cGVkIGFmdGVyIGFuIGFiYnJldmlhdGlvbjogPgorICAgZnVuYyBFYXRjaGFyKHBhdCkKKyAgICAgIGxldCBjID0gbnIyY2hhcihnZXRjaGFyKCkpCisgICAgICByZXR1cm4gKGMgPX4gYTpwYXQpID8gJycgOiBjCisgICBlbmRmdW5jCisgICBpYWJiciA8c2lsZW50PiBpZiBpZiAoKTxMZWZ0PjxDLVI+PUVhdGNoYXIoJ1xzJyk8Q1I+CisKK1RoZXJlIGFyZSBubyBkZWZhdWx0IGFiYnJldmlhdGlvbnMuCisKK0FiYnJldmlhdGlvbnMgYXJlIG5ldmVyIHJlY3Vyc2l2ZS4gIFlvdSBjYW4gdXNlICI6YWIgZiBmLW8tbyIgd2l0aG91dCBhbnkKK3Byb2JsZW0uICBCdXQgYWJicmV2aWF0aW9ucyBjYW4gYmUgbWFwcGVkLiAge3NvbWUgdmVyc2lvbnMgb2YgVmkgc3VwcG9ydAorcmVjdXJzaXZlIGFiYnJldmlhdGlvbnMsIGZvciBubyBhcHBhcmVudCByZWFzb259CisKK0FiYnJldmlhdGlvbnMgYXJlIGRpc2FibGVkIGlmIHRoZSAncGFzdGUnIG9wdGlvbiBpcyBvbi4KKworCQkJCSo6YWJicmV2aWF0ZS1sb2NhbCogKjphYmJyZXZpYXRlLTxidWZmZXI+KgorSnVzdCBsaWtlIG1hcHBpbmdzLCBhYmJyZXZpYXRpb25zIGNhbiBiZSBsb2NhbCB0byBhIGJ1ZmZlci4gIFRoaXMgaXMgbW9zdGx5Cit1c2VkIGluIGEgfGZpbGV0eXBlLXBsdWdpbnwgZmlsZS4gIEV4YW1wbGUgZm9yIGEgQyBwbHVnaW4gZmlsZTogPgorCTphYmIgPGJ1ZmZlcj4gRkYgIGZvciAoaSA9IDA7IGkgPCA7ICsraSkKKzwKKwkJCQkJCSo6YWIqICo6YWJicmV2aWF0ZSoKKzphYlticmV2aWF0ZV0JCWxpc3QgYWxsIGFiYnJldmlhdGlvbnMuICBUaGUgY2hhcmFjdGVyIGluIHRoZSBmaXJzdAorCQkJY29sdW1uIGluZGljYXRlcyB0aGUgbW9kZSB3aGVyZSB0aGUgYWJicmV2aWF0aW9uIGlzCisJCQl1c2VkOiAnaScgZm9yIGluc2VydCBtb2RlLCAnYycgZm9yIENvbW1hbmQtbGluZQorCQkJbW9kZSwgJyEnIGZvciBib3RoLiAgVGhlc2UgYXJlIHRoZSBzYW1lIGFzIGZvcgorCQkJbWFwcGluZ3MsIHNlZSB8bWFwLWxpc3Rpbmd8LgorCis6YWJbYnJldmlhdGVdIHtsaHN9CWxpc3QgdGhlIGFiYnJldmlhdGlvbnMgdGhhdCBzdGFydCB3aXRoIHtsaHN9CisJCQlZb3UgbWF5IG5lZWQgdG8gaW5zZXJ0IGEgQ1RSTC1WICh0eXBlIGl0IHR3aWNlKSB0bworCQkJYXZvaWQgdGhhdCBhIHR5cGVkIHtsaHN9IGlzIGV4cGFuZGVkLCBzaW5jZQorCQkJY29tbWFuZC1saW5lIGFiYnJldmlhdGlvbnMgYXBwbHkgaGVyZS4KKworOmFiW2JyZXZpYXRlXSB7bGhzfSB7cmhzfQorCQkJYWRkIGFiYnJldmlhdGlvbiBmb3Ige2xoc30gdG8ge3Joc30uICBJZiB7bGhzfSBhbHJlYWR5CisJCQlleGlzdGVkIGl0IGlzIHJlcGxhY2VkIHdpdGggdGhlIG5ldyB7cmhzfS4gIHtyaHN9IG1heQorCQkJY29udGFpbiBzcGFjZXMuCisKKwkJCQkJCSo6dW5hKiAqOnVuYWJicmV2aWF0ZSoKKzp1bmFbYmJyZXZpYXRlXSB7bGhzfQlSZW1vdmUgYWJicmV2aWF0aW9uIGZvciB7bGhzfSBmcm9tIHRoZSBsaXN0LiAgSWYgbm9uZQorCQkJaXMgZm91bmQsIHJlbW92ZSBhYmJyZXZpYXRpb25zIGluIHdoaWNoIHtsaHN9IG1hdGNoZXMKKwkJCXdpdGggdGhlIHtyaHN9LiAgVGhpcyBpcyBkb25lIHNvIHRoYXQgeW91IGNhbiBldmVuCisJCQlyZW1vdmUgYWJicmV2aWF0aW9ucyBhZnRlciBleHBhbnNpb24uICBUbyBhdm9pZAorCQkJZXhwYW5zaW9uIGluc2VydCBhIENUUkwtViAodHlwZSBpdCB0d2ljZSkuCisKKwkJCQkJCSo6bm9yZWEqICo6bm9yZWFiYnJldioKKzpub3JlYVtiYnJldl0gW2xoc10gW3Joc10KKwkJCXNhbWUgYXMgIjphYiIsIGJ1dCBubyByZW1hcHBpbmcgZm9yIHRoaXMge3Joc30ge25vdAorCQkJaW4gVml9CisKKwkJCQkJCSo6Y2EqICo6Y2FiYnJldioKKzpjYVtiYnJldl0gW2xoc10gW3Joc10Jc2FtZSBhcyAiOmFiIiwgYnV0IGZvciBDb21tYW5kLWxpbmUgbW9kZSBvbmx5LiAge25vdAorCQkJaW4gVml9CisKKwkJCQkJCSo6Y3VuYSogKjpjdW5hYmJyZXYqCis6Y3VuYVtiYnJldl0ge2xoc30Jc2FtZSBhcyAiOnVuYSIsIGJ1dCBmb3IgQ29tbWFuZC1saW5lIG1vZGUgb25seS4gIHtub3QKKwkJCWluIFZpfQorCisJCQkJCQkqOmNub3JlYSogKjpjbm9yZWFiYnJldioKKzpjbm9yZWFbYmJyZXZdIFtsaHNdIFtyaHNdCisJCQlzYW1lIGFzICI6YWIiLCBidXQgZm9yIENvbW1hbmQtbGluZSBtb2RlIG9ubHkgYW5kIG5vCisJCQlyZW1hcHBpbmcgZm9yIHRoaXMge3Joc30ge25vdCBpbiBWaX0KKworCQkJCQkJKjppYSogKjppYWJicmV2KgorOmlhW2JicmV2XSBbbGhzXSBbcmhzXQlzYW1lIGFzICI6YWIiLCBidXQgZm9yIEluc2VydCBtb2RlIG9ubHkuICB7bm90IGluIFZpfQorCisJCQkJCQkqOml1bmEqICo6aXVuYWJicmV2KgorOml1bmFbYmJyZXZdIHtsaHN9CXNhbWUgYXMgIjp1bmEiLCBidXQgZm9yIGluc2VydCBtb2RlIG9ubHkuICB7bm90IGluCisJCQlWaX0KKworCQkJCQkJKjppbm9yZWEqICo6aW5vcmVhYmJyZXYqCis6aW5vcmVhW2JicmV2XSBbbGhzXSBbcmhzXQorCQkJc2FtZSBhcyAiOmFiIiwgYnV0IGZvciBJbnNlcnQgbW9kZSBvbmx5IGFuZCBubworCQkJcmVtYXBwaW5nIGZvciB0aGlzIHtyaHN9IHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmFiYyogKjphYmNsZWFyKgorOmFiY1tsZWFyXQkJUmVtb3ZlIGFsbCBhYmJyZXZpYXRpb25zLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6aWFiYyogKjppYWJjbGVhcioKKzppYWJjW2xlYXJdCQlSZW1vdmUgYWxsIGFiYnJldmlhdGlvbnMgZm9yIEluc2VydCBtb2RlLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6Y2FiYyogKjpjYWJjbGVhcioKKzpjYWJjW2xlYXJdCQlSZW1vdmUgYWxsIGFiYnJldmlhdGlvbnMgZm9yIENvbW1hbmQtbGluZSBtb2RlLiAge25vdAorCQkJaW4gVml9CisKKwkJCQkJCQkqdXNpbmdfQ1RSTC1WKgorSXQgaXMgcG9zc2libGUgdG8gdXNlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgcmhzIG9mIGFuIGFiYnJldmlhdGlvbi4KK0NUUkwtViBoYXMgdG8gYmUgdXNlZCB0byBhdm9pZCB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mIG1vc3Qgbm9uIHByaW50YWJsZQorY2hhcmFjdGVycy4gIEhvdyBtYW55IENUUkwtVnMgbmVlZCB0byBiZSB0eXBlZCBkZXBlbmRzIG9uIGhvdyB5b3UgZW50ZXIgdGhlCithYmJyZXZpYXRpb24uICBUaGlzIGFsc28gYXBwbGllcyB0byBtYXBwaW5ncy4gIExldCdzIHVzZSBhbiBleGFtcGxlIGhlcmUuCisKK1N1cHBvc2UgeW91IHdhbnQgdG8gYWJicmV2aWF0ZSAiZXNjIiB0byBlbnRlciBhbiA8RXNjPiBjaGFyYWN0ZXIuICBXaGVuIHlvdQordHlwZSB0aGUgIjphYiIgY29tbWFuZCBpbiBWaW0sIHlvdSBoYXZlIHRvIGVudGVyIHRoaXM6IChoZXJlIF5WIGlzIGEgQ1RSTC1WCithbmQgXlsgaXMgPEVzYz4pCisKK1lvdSB0eXBlOiAgIGFiIGVzYyBeVl5WXlZeVl5WXlsKKworCUFsbCBrZXlib2FyZCBpbnB1dCBpcyBzdWJqZWN0ZWQgdG8gXlYgcXVvdGUgaW50ZXJwcmV0YXRpb24sIHNvCisJdGhlIGZpcnN0LCB0aGlyZCwgYW5kIGZpZnRoIF5WICBjaGFyYWN0ZXJzIHNpbXBseSBhbGxvdyB0aGUgc2Vjb25kLAorCWFuZCBmb3VydGggXlZzLCBhbmQgdGhlIF5bLCB0byBiZSBlbnRlcmVkIGludG8gdGhlIGNvbW1hbmQtbGluZS4KKworWW91IHNlZTogICAgYWIgZXNjIF5WXlZeWworCisJVGhlIGNvbW1hbmQtbGluZSBjb250YWlucyB0d28gYWN0dWFsIF5WcyBiZWZvcmUgdGhlIF5bLiAgVGhpcyBpcworCWhvdyBpdCBzaG91bGQgYXBwZWFyIGluIHlvdXIgLmV4cmMgZmlsZSwgaWYgeW91IGNob29zZSB0byBnbyB0aGF0CisJcm91dGUuICBUaGUgZmlyc3QgXlYgaXMgdGhlcmUgdG8gcXVvdGUgdGhlIHNlY29uZCBeVjsgdGhlIDphYgorCWNvbW1hbmQgdXNlcyBeViBhcyBpdHMgb3duIHF1b3RlIGNoYXJhY3Rlciwgc28geW91IGNhbiBpbmNsdWRlIHF1b3RlZAorCXdoaXRlc3BhY2Ugb3IgdGhlIHwgY2hhcmFjdGVyIGluIHRoZSBhYmJyZXZpYXRpb24uICAgVGhlIDphYiBjb21tYW5kCisJZG9lc24ndCBkbyBhbnl0aGluZyBzcGVjaWFsIHdpdGggdGhlIF5bIGNoYXJhY3Rlciwgc28gaXQgZG9lc24ndCBuZWVkCisJdG8gYmUgcXVvdGVkLiAgKEFsdGhvdWdoIHF1b3RpbmcgaXNuJ3QgaGFybWZ1bDsgdGhhdCdzIHdoeSB0eXBpbmcgNworCVtidXQgbm90IDghXSBeVnMgd29ya3MuKQorCitTdG9yZWQgYXM6ICBlc2MgICAgIF5WXlsKKworCUFmdGVyIHBhcnNpbmcsIHRoZSBhYmJyZXZpYXRpb24ncyBzaG9ydCBmb3JtICgiZXNjIikgYW5kIGxvbmcgZm9ybQorCSh0aGUgdHdvIGNoYXJhY3RlcnMgIl5WXlsiKSBhcmUgc3RvcmVkIGluIHRoZSBhYmJyZXZpYXRpb24gdGFibGUuCisJSWYgeW91IGdpdmUgdGhlIDphYiBjb21tYW5kIHdpdGggbm8gYXJndW1lbnRzLCB0aGlzIGlzIGhvdyB0aGUKKwlhYmJyZXZpYXRpb24gd2lsbCBiZSBkaXNwbGF5ZWQuCisKKwlMYXRlciwgd2hlbiB0aGUgYWJicmV2aWF0aW9uIGlzIGV4cGFuZGVkIGJlY2F1c2UgdGhlIHVzZXIgdHlwZWQgaW4KKwl0aGUgd29yZCAiZXNjIiwgdGhlIGxvbmcgZm9ybSBpcyBzdWJqZWN0ZWQgdG8gdGhlIHNhbWUgdHlwZSBvZgorCV5WIGludGVycHJldGF0aW9uIGFzIGtleWJvYXJkIGlucHV0LiAgU28gdGhlIF5WIHByb3RlY3RzIHRoZSBeWworCWNoYXJhY3RlciBmcm9tIGJlaW5nIGludGVycHJldGVkIGFzIHRoZSAiZXhpdCBpbnB1dC1tb2RlIiBjaGFyYWN0ZXIuCisJSW5zdGVhZCwgdGhlIF5bIGlzIGluc2VydGVkIGludG8gdGhlIHRleHQuCisKK0V4cGFuZHMgdG86IF5bCisKK1tleGFtcGxlIGdpdmVuIGJ5IFN0ZXZlIEtpcmtlbmRhbGxdCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gTG9jYWwgbWFwcGluZ3MgYW5kIGZ1bmN0aW9ucwkJCQkqc2NyaXB0LWxvY2FsKgorCitXaGVuIHVzaW5nIHNldmVyYWwgVmltIHNjcmlwdCBmaWxlcywgdGhlcmUgaXMgdGhlIGRhbmdlciB0aGF0IG1hcHBpbmdzIGFuZAorZnVuY3Rpb25zIHVzZWQgaW4gb25lIHNjcmlwdCB1c2UgdGhlIHNhbWUgbmFtZSBhcyBpbiBvdGhlciBzY3JpcHRzLiAgVG8gYXZvaWQKK3RoaXMsIHRoZXkgY2FuIGJlIG1hZGUgbG9jYWwgdG8gdGhlIHNjcmlwdC4KKworCQkJCQkJKjxTSUQ+KiAqPFNOUj4qICpFODEqCitUaGUgc3RyaW5nICI8U0lEPiIgY2FuIGJlIHVzZWQgaW4gYSBtYXBwaW5nIG9yIG1lbnUuICBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlCisnPCcgZmxhZyBpcyBub3QgcHJlc2VudCBpbiAnY3BvcHRpb25zJy4KKyAgIFdoZW4gZXhlY3V0aW5nIHRoZSBtYXAgY29tbWFuZCwgVmltIHdpbGwgcmVwbGFjZSAiPFNJRD4iIHdpdGggdGhlIHNwZWNpYWwKK2tleSBjb2RlIDxTTlI+LCBmb2xsb3dlZCBieSBhIG51bWJlciB0aGF0J3MgdW5pcXVlIGZvciB0aGUgc2NyaXB0LCBhbmQgYW4KK3VuZGVyc2NvcmUuICBFeGFtcGxlOiA+CisJOm1hcCA8U0lEPkFkZAorY291bGQgZGVmaW5lIGEgbWFwcGluZyAiPFNOUj4yM19BZGQiLgorCitXaGVuIGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gYSBzY3JpcHQsICJzOiIgY2FuIGJlIHByZXBlbmRlZCB0byB0aGUgbmFtZSB0bworbWFrZSBpdCBsb2NhbCB0byB0aGUgc2NyaXB0LiAgQnV0IHdoZW4gYSBtYXBwaW5nIGlzIGV4ZWN1dGVkIGZyb20gb3V0c2lkZSBvZgordGhlIHNjcmlwdCwgaXQgZG9lc24ndCBrbm93IGluIHdoaWNoIHNjcmlwdCB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWQuICBUbworYXZvaWQgdGhpcyBwcm9ibGVtLCB1c2UgIjxTSUQ+IiBpbnN0ZWFkIG9mICJzOiIuICBUaGUgc2FtZSB0cmFuc2xhdGlvbiBpcyBkb25lCithcyBmb3IgbWFwcGluZ3MuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlZmluZSBhIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIGluCittYXBwaW5nLgorCitXaGVuIGEgbG9jYWwgZnVuY3Rpb24gaXMgZXhlY3V0ZWQsIGl0IHJ1bnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNjcmlwdCBpdCB3YXMKK2RlZmluZWQgaW4uICBUaGlzIG1lYW5zIHRoYXQgbmV3IGZ1bmN0aW9ucyBhbmQgbWFwcGluZ3MgaXQgZGVmaW5lcyBjYW4gYWxzbwordXNlICJzOiIgb3IgIjxTSUQ+IiBhbmQgaXQgd2lsbCB1c2UgdGhlIHNhbWUgdW5pcXVlIG51bWJlciBhcyB3aGVuIHRoZQorZnVuY3Rpb24gaXRzZWxmIHdhcyBkZWZpbmVkLiAgQWxzbywgdGhlICJzOnZhciIgbG9jYWwgc2NyaXB0IHZhcmlhYmxlcyBjYW4gYmUKK3VzZWQuCisKK1doZW4gZXhlY3V0aW5nIGFuIGF1dG9jb21tYW5kIG9yIGEgdXNlciBjb21tYW5kLCBpdCB3aWxsIHJ1biBpbiB0aGUgY29udGV4dCBvZgordGhlIHNjcmlwdCBpdCB3YXMgZGVmaW5lZCBpbi4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdGhhdCB0aGUgY29tbWFuZCBjYWxscyBhCitsb2NhbCBmdW5jdGlvbiBvciB1c2VzIGEgbG9jYWwgbWFwcGluZy4KKworT3RoZXJ3aXNlLCB1c2luZyAiPFNJRD4iIG91dHNpZGUgb2YgYSBzY3JpcHQgY29udGV4dCBpcyBhbiBlcnJvci4KKworSWYgeW91IG5lZWQgdG8gZ2V0IHRoZSBzY3JpcHQgbnVtYmVyIHRvIHVzZSBpbiBhIGNvbXBsaWNhdGVkIHNjcmlwdCwgeW91IGNhbgordXNlIHRoaXMgdHJpY2s6ID4KKwk6bWFwIDxTSUQ+eHggPFNJRD54eAorCTpsZXQgczpzaWQgPSBtYXBhcmcoIjxTSUQ+eHgiKQorCTp1bm1hcCA8U0lEPnh4CitBbmQgcmVtb3ZlIHRoZSB0cmFpbGluZyAieHgiLgorCitUaGUgIjxTTlI+IiB3aWxsIGJlIHNob3duIHdoZW4gbGlzdGluZyBmdW5jdGlvbnMgYW5kIG1hcHBpbmdzLiAgVGhpcyBpcyB1c2VmdWwKK3RvIGZpbmQgb3V0IHdoYXQgdGhleSBhcmUgZGVmaW5lZCB0by4KKworVGhlIHw6c2NyaXB0bmFtZXN8IGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2VlIHdoaWNoIHNjcmlwdHMgaGF2ZSBiZWVuIHNvdXJjZWQKK2FuZCB3aGF0IHRoZWlyIDxTTlI+IG51bWJlciBpcy4KKworVGhpcyBpcyBhbGwge25vdCBpbiBWaX0gYW5kIHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK2V2YWwKK2ZlYXR1cmV9LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFVzZXItZGVmaW5lZCBjb21tYW5kcwkJCQkqdXNlci1jb21tYW5kcyoKKworSXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIHlvdXIgb3duIEV4IGNvbW1hbmRzLiBBIHVzZXItZGVmaW5lZCBjb21tYW5kIGNhbiBhY3QKK2p1c3QgbGlrZSBhIGJ1aWx0LWluIGNvbW1hbmQgKGl0IGNhbiBoYXZlIGEgcmFuZ2Ugb3IgYXJndW1lbnRzLCBhcmd1bWVudHMgY2FuCitiZSBjb21wbGV0ZWQgYXMgZmlsZW5hbWVzIG9yIGJ1ZmZlciBuYW1lcywgZXRjKSwgZXhjZXB0IHRoYXQgd2hlbiB0aGUgY29tbWFuZAoraXMgZXhlY3V0ZWQsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYSBub3JtYWwgZXggY29tbWFuZCBhbmQgdGhlbiBleGVjdXRlZC4KKworRm9yIHN0YXJ0ZXJzOiBTZWUgc2VjdGlvbiB8NDAuMnwgaW4gdGhlIHVzZXIgbWFudWFsLgorCisJCQkJCQkqRTE4MyogKnVzZXItY21kLWFtYmlndW91cyoKK0FsbCB1c2VyIGRlZmluZWQgY29tbWFuZHMgbXVzdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIHRvIGF2b2lkCitjb25mdXNpb24gd2l0aCBidWlsdGluIGNvbW1hbmRzLiAoVGhlcmUgYXJlIGEgZmV3IGJ1aWx0aW4gY29tbWFuZHMsIG5vdGFibHkKKzpOZXh0LCA6UHJpbnQgYW5kIDpYLCB3aGljaCBkbyBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIuICBUaGUgYnVpbHRpbgord2lsbCBhbHdheXMgdGFrZSBwcmVjZWRlbmNlIGluIHRoZXNlIGNhc2VzKS4gIFRoZSBvdGhlciBjaGFyYWN0ZXJzIG9mIHRoZSB1c2VyCitjb21tYW5kIGNhbiBiZSB1cHBlcmNhc2UgbGV0dGVycywgbG93ZXJjYXNlIGxldHRlcnMgb3IgZGlnaXRzLiAgV2hlbiB1c2luZworZGlnaXRzLCBub3RlIHRoYXQgb3RoZXIgY29tbWFuZHMgdGhhdCB0YWtlIGEgbnVtZXJpYyBhcmd1bWVudCBtYXkgYmVjb21lCithbWJpZ3VvdXMuICBGb3IgZXhhbXBsZSwgdGhlIGNvbW1hbmQgIjpDYzIiIGNvdWxkIGJlIHRoZSB1c2VyIGNvbW1hbmQgIjpDYzIiCit3aXRob3V0IGFuIGFyZ3VtZW50LCBvciB0aGUgY29tbWFuZCAiOkNjIiB3aXRoIGFyZ3VtZW50ICIyIi4gIEl0IGlzIGFkdmlzZWQgdG8KK3B1dCBhIHNwYWNlIGJldHdlZW4gdGhlIGNvbW1hbmQgbmFtZSBhbmQgdGhlIGFyZ3VtZW50IHRvIGF2b2lkIHRoZXNlIHByb2JsZW1zLgorCitXaGVuIHVzaW5nIGEgdXNlci1kZWZpbmVkIGNvbW1hbmQsIHRoZSBjb21tYW5kIGNhbiBiZSBhYmJyZXZpYXRlZC4gSG93ZXZlciwgaWYKK2FuIGFiYnJldmlhdGlvbiBpcyBub3QgdW5pcXVlLCBhbiBlcnJvciB3aWxsIGJlIGlzc3VlZC4gRnVydGhlcm1vcmUsIGEKK2J1aWx0LWluIGNvbW1hbmQgd2lsbCBhbHdheXMgdGFrZSBwcmVjZWRlbmNlLgorCitFeGFtcGxlOiA+CisJOmNvbW1hbmQgUmVuYW1lIC4uLgorCTpjb21tYW5kIFJlbnVtYmVyIC4uLgorCTpSZW5hCQkJCSIgTWVhbnMgIlJlbmFtZSIKKwk6UmVudQkJCQkiIE1lYW5zICJSZW51bWJlciIKKwk6UmVuCQkJCSIgRXJyb3IgLSBhbWJpZ3VvdXMKKwk6Y29tbWFuZCBQYXN0ZSAuLi4KKwk6UAkJCQkiIFRoZSBidWlsdC1pbiA6UHJpbnQKKworSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBmdWxsIG5hbWVzIGZvciB1c2VyLWRlZmluZWQgY29tbWFuZHMgYXJlIHVzZWQgaW4KK3NjcmlwdHMuCisKKzpjb21bbWFuZF0JCQkJCQkqOmNvbSogKjpjb21tYW5kKgorCQkJTGlzdCBhbGwgdXNlci1kZWZpbmVkIGNvbW1hbmRzLiBXaGVuIGxpc3RpbmcgY29tbWFuZHMsCisJCQl0aGUgY2hhcmFjdGVycyBpbiB0aGUgZmlyc3QgdHdvIGNvbHVtbnMgYXJlCisJCQkgICAgIQlDb21tYW5kIGhhcyB0aGUgLWJhbmcgYXR0cmlidXRlCisJCQkgICAgIglDb21tYW5kIGhhcyB0aGUgLXJlZ2lzdGVyIGF0dHJpYnV0ZQorCQkJICAgIGIJQ29tbWFuZCBpcyBsb2NhbCB0byBjdXJyZW50IGJ1ZmZlcgorCQkJKHNlZSBiZWxvdyBmb3IgZGV0YWlscyBvbiBhdHRyaWJ1dGVzKQorCis6Y29tW21hbmRdIHtjbWR9CUxpc3QgdGhlIHVzZXItZGVmaW5lZCBjb21tYW5kcyB0aGF0IHN0YXJ0IHdpdGgge2NtZH0KKworCQkJCQkJCSpFMTc0KiAqRTE4MioKKzpjb21bbWFuZF1bIV0gW3thdHRyfS4uLl0ge2NtZH0ge3JlcH0KKwkJCURlZmluZSBhIHVzZXIgY29tbWFuZC4gIFRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIGlzCisJCQl7Y21kfSBhbmQgaXRzIHJlcGxhY2VtZW50IHRleHQgaXMge3JlcH0uIFRoZSBjb21tYW5kJ3MKKwkJCWF0dHJpYnV0ZXMgKHNlZSBiZWxvdykgYXJlIHthdHRyfS4gSWYgdGhlIGNvbW1hbmQKKwkJCWFscmVhZHkgZXhpc3RzLCBhbiBlcnJvciBpcyByZXBvcnRlZCwgdW5sZXNzIGEgISBpcworCQkJc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIHRoZSBjb21tYW5kIGlzIHJlZGVmaW5lZC4KKworOmRlbGNbb21tYW5kXSB7Y21kfQkJCQkqOmRlbGMqICo6ZGVsY29tbWFuZCogKkUxODQqCisJCQlEZWxldGUgdGhlIHVzZXItZGVmaW5lZCBjb21tYW5kIHtjbWR9LgorCis6Y29tY1tsZWFyXQkJCQkJCSo6Y29tYyogKjpjb21jbGVhcioKKwkJCURlbGV0ZSBhbGwgdXNlci1kZWZpbmVkIGNvbW1hbmRzLgorCitDb21tYW5kIGF0dHJpYnV0ZXMKKworVXNlci1kZWZpbmVkIGNvbW1hbmRzIGFyZSB0cmVhdGVkIGJ5IFZpbSBqdXN0IGxpa2UgYW55IG90aGVyIGV4IGNvbW1hbmRzLiBUaGV5CitjYW4gaGF2ZSBhcmd1bWVudHMsIG9yIGhhdmUgYSByYW5nZSBzcGVjaWZpZWQuIEFyZ3VtZW50cyBhcmUgc3ViamVjdCB0bworY29tcGxldGlvbiBhcyBmaWxlbmFtZXMsIGJ1ZmZlcnMsIGV0Yy4gRXhhY3RseSBob3cgdGhpcyB3b3JrcyBkZXBlbmRzIHVwb24gdGhlCitjb21tYW5kJ3MgYXR0cmlidXRlcywgd2hpY2ggYXJlIHNwZWNpZmllZCB3aGVuIHRoZSBjb21tYW5kIGlzIGRlZmluZWQuCisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBhdHRyaWJ1dGVzLCBzcGxpdCBpbnRvIGZvdXIgY2F0ZWdvcmllczogYXJndW1lbnQKK2hhbmRsaW5nLCBjb21wbGV0aW9uIGJlaGF2aW9yLCByYW5nZSBoYW5kbGluZywgYW5kIHNwZWNpYWwgY2FzZXMuIFRoZQorYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGJlbG93LCBieSBjYXRlZ29yeS4KKworQXJndW1lbnQgaGFuZGxpbmcJCQkJCSpFMTc1KiAqRTE3NioKKworQnkgZGVmYXVsdCwgYSB1c2VyIGRlZmluZWQgY29tbWFuZCB3aWxsIHRha2Ugbm8gYXJndW1lbnRzIChhbmQgYW4gZXJyb3IgaXMKK3JlcG9ydGVkIGlmIGFueSBhcmUgc3VwcGxpZWQpLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoYXQgdGhlCitjb21tYW5kIGNhbiB0YWtlIGFyZ3VtZW50cywgdXNpbmcgdGhlIC1uYXJncyBhdHRyaWJ1dGUuIFZhbGlkIGNhc2VzIGFyZToKKworCS1uYXJncz0wICAgIE5vIGFyZ3VtZW50cyBhcmUgYWxsb3dlZCAodGhlIGRlZmF1bHQpCisJLW5hcmdzPTEgICAgRXhhY3RseSBvbmUgYXJndW1lbnQgaXMgcmVxdWlyZWQKKwktbmFyZ3M9KiAgICBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcmUgYWxsb3dlZCAoMCwgMSwgb3IgbWFueSkKKwktbmFyZ3M9PyAgICAwIG9yIDEgYXJndW1lbnRzIGFyZSBhbGxvd2VkCisJLW5hcmdzPSsgICAgQXJndW1lbnRzIG11c3QgYmUgc3VwcGxpZWQsIGJ1dCBhbnkgbnVtYmVyIGFyZSBhbGxvd2VkCisKK0FyZ3VtZW50cyBhcmUgY29uc2lkZXJlZCB0byBiZSBzZXBhcmF0ZWQgYnkgKHVuZXNjYXBlZCkgc3BhY2VzIG9yIFRhYnMgaW4gdGhpcworY29udGV4dC4KKworTm90ZSB0aGF0IGFyZ3VtZW50cyBhcmUgdXNlZCBhcyB0ZXh0LCBub3QgYXMgZXhwcmVzc2lvbnMuICBTcGVjaWZpY2FsbHksCisiczp2YXIiIHdpbGwgdXNlIHRoZSBzY3JpcHQtbG9jYWwgdmFyaWFibGUgaW4gdGhlIHNjcmlwdCB3aGVyZSB0aGUgY29tbWFuZCB3YXMKK2RlZmluZWQsIG5vdCB3aGVyZSBpdCBpcyBpbnZva2VkISAgRXhhbXBsZToKKyAgICBzY3JpcHQxLnZpbTogPgorCTpsZXQgczplcnJvciA9ICJOb25lIgorCTpjb21tYW5kIC1uYXJncz0xIEVycm9yIGVjaG9lcnIgPGFyZ3M+Cis8ICAgc2NyaXB0Mi52aW06ID4KKwk6c291cmNlIHNjcmlwdDEudmltCisJOmxldCBzOmVycm9yID0gIldyb25nISIKKwk6RXJyb3IgczplcnJvcgorRXhlY3V0aW5nIHNjcmlwdDIudmltIHdpbGwgcmVzdWx0IGluICJOb25lIiB0byBiZSBlY2hvZWQuICBOb3Qgd2hhdCB5b3UKK2ludGVuZGVkISAgQ2FsbGluZyBhIGZ1bmN0aW9uIG1heSBiZSBhbiBhbHRlcm5hdGl2ZS4KKworQ29tcGxldGlvbiBiZWhhdmlvcgkJCQkqOmNvbW1hbmQtY29tcGxldGlvbioKKwkJCQkJCQkqRTE3OSogKkUxODAqICpFMTgxKgorQnkgZGVmYXVsdCwgdGhlIGFyZ3VtZW50cyBvZiB1c2VyIGRlZmluZWQgY29tbWFuZHMgZG8gbm90IHVuZGVyZ28gY29tcGxldGlvbi4KK0hvd2V2ZXIsIGJ5IHNwZWNpZnlpbmcgb25lIG9yIHRoZSBvdGhlciBvZiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMsIGFyZ3VtZW50Citjb21wbGV0aW9uIGNhbiBiZSBlbmFibGVkOgorCisJLWNvbXBsZXRlPWF1Z3JvdXAJYXV0b2NtZCBncm91cHMKKwktY29tcGxldGU9YnVmZmVyCWJ1ZmZlciBuYW1lcworCS1jb21wbGV0ZT1jb21tYW5kCUV4IGNvbW1hbmQgKGFuZCBhcmd1bWVudHMpCisJLWNvbXBsZXRlPWRpcgkJZGlyZWN0b3J5IG5hbWVzCisJLWNvbXBsZXRlPWVudmlyb25tZW50CWVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzCisJLWNvbXBsZXRlPWV2ZW50CQlhdXRvY29tbWFuZCBldmVudHMKKwktY29tcGxldGU9ZXhwcmVzc2lvbglWaW0gZXhwcmVzc2lvbgorCS1jb21wbGV0ZT1maWxlCQlmaWxlIGFuZCBkaXJlY3RvcnkgbmFtZXMKKwktY29tcGxldGU9ZnVuY3Rpb24JZnVuY3Rpb24gbmFtZQorCS1jb21wbGV0ZT1oZWxwCQloZWxwIHN1YmplY3RzCisJLWNvbXBsZXRlPWhpZ2hsaWdodAloaWdobGlnaHQgZ3JvdXBzCisJLWNvbXBsZXRlPW1hcHBpbmcJbWFwcGluZyBuYW1lCisJLWNvbXBsZXRlPW1lbnUJCW1lbnVzCisJLWNvbXBsZXRlPW9wdGlvbglvcHRpb25zCisJLWNvbXBsZXRlPXRhZwkJdGFncworCS1jb21wbGV0ZT10YWdfbGlzdGZpbGVzCXRhZ3MsIGZpbGUgbmFtZXMgYXJlIHNob3duIHdoZW4gQ1RSTC1EIGlzIGhpdAorCS1jb21wbGV0ZT12YXIJCXVzZXIgdmFyaWFibGVzCisJLWNvbXBsZXRlPWN1c3RvbSx7ZnVuY30gY3VzdG9tIGNvbXBsZXRpb24sIGRlZmluZWQgdmlhIHtmdW5jfQorCitDdXN0b20gY29tcGxldGlvbgkJCSAgICAqOmNvbW1hbmQtY29tcGxldGlvbi1jdXN0b20qCisJCQkJCQkJKkU0NjcqICpFNDY4KgorSXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIGN1c3RvbWl6ZWQgY29tcGxldGlvbiBzY2hlbWVzIHZpYSB0aGUgImN1c3RvbSx7ZnVuY30iCitjb21wbGV0aW9uIGFyZ3VtZW50LiAgVGhlIHtmdW5jfSBwYXJ0IHNob3VsZCBiZSBhIGZ1bmN0aW9uIHdpdGggdGhlIGZvbGxvd2luZworcHJvdG90eXBlID4KKworCTpmdW5jdGlvbiB7ZnVuY30oQXJnTGVhZCwgQ21kTGluZSwgQ3Vyc29yUG9zKQorCitUaGUgZnVuY3Rpb24gbmVlZCBub3QgdXNlIGFsbCB0aGVzZSBhcmd1bWVudHMsIGJ1dCBpdCBzaG91bGQgcHJvdmlkZSB0aGUKK2NvbXBsZXRpb24gY2FuZGlkYXRlcyBhcyB0aGUgcmV0dXJuIHZhbHVlLCBvbmUgcGVyIGxpbmUgaW4gYSBuZXdsaW5lIHNlcGFyYXRlZAorc3RyaW5nLiAgVGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcmU6CisJQXJnTGVhZAkJdGhlIGxlYWRpbmcgcG9ydGlvbiBvZiB0aGUgYXJndW1lbnQgY3VycmVudGx5IGJlaW5nCisJCQljb21wbGV0ZWQgb24KKwlDbWRMaW5lCQl0aGUgZW50aXJlIGNvbW1hbmQgbGluZQorCUN1cnNvclBvcwl0aGUgY3Vyc29yIHBvc2l0aW9uIGluIGl0CitUaGUgZnVuY3Rpb24gbWF5IHVzZSB0aGVzZSBmb3IgZGV0ZXJtaW5pbmcgY29udGV4dC4gIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KK2ZpbHRlciBjYW5kaWRhdGVzIGFnYWluc3QgdGhlIChpbXBsaWNpdCBwYXR0ZXJuIGluKSBBcmdMZWFkLiAgVmltIHdpbGwgZG8KK2ZpbHRlciB0aGUgY2FuZGlkYXRlcyB3aXRoIGl0cyByZWdleHAgZW5naW5lIGFmdGVyIGZ1bmN0aW9uIHJldHVybiwgYW5kIHRoaXMKK2lzIHByb2JhYmx5IG1vcmUgZWZmaWNpZW50IGluIG1vc3QgY2FzZXMuCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBsaXN0cyB1c2VyIG5hbWVzIHRvIGEgRmluZ2VyIGNvbW1hbmQgPgorICAgIDpjb20gLWNvbXBsZXRlPWN1c3RvbSxMaXN0VXNlcnMgLW5hcmdzPTEgRmluZ2VyICFmaW5nZXIgPGFyZ3M+CisgICAgOmZ1biBMaXN0VXNlcnMoQSxMLFApCisgICAgOiAgICByZXR1cm4gc3lzdGVtKCJjdXQgLWQ6IC1mMSAvZXRjL3Bhc3N3ZCIpCisgICAgOmVuZGZ1bgorCitSYW5nZSBoYW5kbGluZwkJCQkJCSpFMTc3KiAqRTE3OCoKKworQnkgZGVmYXVsdCwgdXNlci1kZWZpbmVkIGNvbW1hbmRzIGRvIG5vdCBhY2NlcHQgYSBsaW5lIG51bWJlciByYW5nZS4gSG93ZXZlciwKK2l0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgdGhhdCB0aGUgY29tbWFuZCBkb2VzIHRha2UgYSByYW5nZSAodGhlIC1yYW5nZQorYXR0cmlidXRlKSwgb3IgdGhhdCBpdCB0YWtlcyBhbiBhcmJpdHJhcnkgY291bnQgdmFsdWUsIGVpdGhlciBpbiB0aGUgbGluZQorbnVtYmVyIHBvc2l0aW9uICgtcmFuZ2U9TiwgbGlrZSB0aGUgfDpzcGxpdHwgY29tbWFuZCkgb3IgYXMgYSAiY291bnQiCithcmd1bWVudCAoLWNvdW50PU4sIGxpa2UgdGhlIHw6TmV4dHwgY29tbWFuZCkuIFBvc3NpYmxlIGF0dHJpYnV0ZXMgYXJlOgorCisJLXJhbmdlCSAgICBSYW5nZSBhbGxvd2VkLCBkZWZhdWx0IGlzIGN1cnJlbnQgbGluZQorCS1yYW5nZT0lICAgIFJhbmdlIGFsbG93ZWQsIGRlZmF1bHQgaXMgd2hvbGUgZmlsZSAoMSwkKQorCS1yYW5nZT1OICAgIEEgY291bnQgKGRlZmF1bHQgTikgd2hpY2ggaXMgc3BlY2lmaWVkIGluIHRoZSBsaW5lCisJCSAgICBudW1iZXIgcG9zaXRpb24gKGxpa2UgfDpzcGxpdHwpCisJLWNvdW50PU4gICAgQSBjb3VudCAoZGVmYXVsdCBOKSB3aGljaCBpcyBzcGVjaWZpZWQgZWl0aGVyIGluIHRoZSBsaW5lCisJCSAgICBudW1iZXIgcG9zaXRpb24sIG9yIGFzIGFuIGluaXRpYWwgYXJndW1lbnQgKGxpa2UgfDpOZXh0fCkKKwkJICAgIFNwZWNpZnlpbmcgLWNvdW50ICh3aXRob3V0IGEgZGVmYXVsdCkgYWN0cyBsaWtlIC1jb3VudD0wCisKK05vdGUgdGhhdCAtcmFuZ2U9TiBhbmQgLWNvdW50PU4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAtIG9ubHkgb25lIHNob3VsZCBiZQorc3BlY2lmaWVkLgorCitTcGVjaWFsIGNhc2VzCisKK1RoZXJlIGFyZSBzb21lIHNwZWNpYWwgY2FzZXMgYXMgd2VsbDoKKworCS1iYW5nCSAgICBUaGUgY29tbWFuZCBjYW4gdGFrZSBhICEgbW9kaWZpZXIgKGxpa2UgOnEgb3IgOncpCisJLWJhcgkgICAgVGhlIGNvbW1hbmQgY2FuIGJlIGZvbGxvd2VkIGJ5IGEgInwiIGFuZCBhbm90aGVyIGNvbW1hbmQuCisJCSAgICBBICJ8IiBpbnNpZGUgdGhlIGNvbW1hbmQgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQgdGhlbi4KKwkJICAgIEFsc28gY2hlY2tzIGZvciBhICIgdG8gc3RhcnQgYSBjb21tZW50LgorCS1yZWdpc3RlciAgIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY29tbWFuZCBjYW4gYmUgYW4gb3B0aW9uYWwKKwkJICAgIHJlZ2lzdGVyIG5hbWUgKGxpa2UgOmRlbCwgOnB1dCwgOnlhbmspLgorCS1idWZmZXIJICAgIFRoZSBjb21tYW5kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgorCitJbiB0aGUgY2FzZXMgb2YgdGhlIC1jb3VudCBhbmQgLXJlZ2lzdGVyIGF0dHJpYnV0ZXMsIGlmIHRoZSBvcHRpb25hbCBhcmd1bWVudAoraXMgc3VwcGxpZWQsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgYXJndW1lbnQgbGlzdCBhbmQgaXMgYXZhaWxhYmxlIHRvIHRoZQorcmVwbGFjZW1lbnQgdGV4dCBzZXBhcmF0ZWx5LgorCitSZXBsYWNlbWVudCB0ZXh0CisKK1RoZSByZXBsYWNlbWVudCB0ZXh0IGZvciBhIHVzZXIgZGVmaW5lZCBjb21tYW5kIGlzIHNjYW5uZWQgZm9yIHNwZWNpYWwgZXNjYXBlCitzZXF1ZW5jZXMsIHVzaW5nIDwuLi4+IG5vdGF0aW9uLiBFc2NhcGUgc2VxdWVuY2VzIGFyZSByZXBsYWNlZCB3aXRoIHZhbHVlcworZnJvbSB0aGUgZW50ZXJlZCBjb21tYW5kIGxpbmUsIGFuZCBhbGwgb3RoZXIgdGV4dCBpcyBjb3BpZWQgdW5jaGFuZ2VkLiBUaGUKK3Jlc3VsdGluZyBzdHJpbmcgaXMgZXhlY3V0ZWQgYXMgYW4gRXggY29tbWFuZC4gSWYgdGhlIGluaXRpYWwgPCBvZiBhbiBlc2NhcGUKK3NlcXVlbmNlIGlzIHByZWNlZGVkIGJ5IGEgYmFja3NsYXNoLCB0aGUgc2VxdWVuY2UgaXMgY29waWVkIHVuY2hhbmdlZC4KKworVGhlIHZhbGlkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlCisKKwkJCQkJCSo8bGluZTE+KgorCTxsaW5lMT4JVGhlIHN0YXJ0aW5nIGxpbmUgb2YgdGhlIGNvbW1hbmQgcmFuZ2UuCisJCQkJCQkqPGxpbmUyPioKKwk8bGluZTI+CVRoZSBmaW5hbCBsaW5lIG9mIHRoZSBjb21tYW5kIHJhbmdlLgorCQkJCQkJKjxjb3VudD4qCisJPGNvdW50PglBbnkgY291bnQgc3VwcGxpZWQgKGFzIGRlc2NyaWJlZCBmb3IgdGhlICctcmFuZ2UnCisJCWFuZCAnLWNvdW50JyBhdHRyaWJ1dGVzKS4KKwkJCQkJCSo8YmFuZz4qCisJPGJhbmc+CShTZWUgdGhlICctYmFuZycgYXR0cmlidXRlKSBFeHBhbmRzIHRvIGEgISBpZiB0aGUKKwkJY29tbWFuZCB3YXMgZXhlY3V0ZWQgd2l0aCBhICEgbW9kaWZpZXIsIG90aGVyd2lzZQorCQlleHBhbmRzIHRvIG5vdGhpbmcuCisJCQkJCQkqPHJlZz4qICo8cmVnaXN0ZXI+KgorCTxyZWc+CShTZWUgdGhlICctcmVnaXN0ZXInIGF0dHJpYnV0ZSkgVGhlIG9wdGlvbmFsIHJlZ2lzdGVyLAorCQlpZiBzcGVjaWZpZWQuIE90aGVyd2lzZSwgZXhwYW5kcyB0byBub3RoaW5nLiA8cmVnaXN0ZXI+CisJCWlzIGEgc3lub255bSBmb3IgdGhpcy4KKwkJCQkJCSo8YXJncz4qCisJPGFyZ3M+CVRoZSBjb21tYW5kIGFyZ3VtZW50cywgZXhhY3RseSBhcyBzdXBwbGllZCAoYnV0IGFzCisJCW5vdGVkIGFib3ZlLCBhbnkgY291bnQgb3IgcmVnaXN0ZXIgY2FuIGNvbnN1bWUgc29tZQorCQlvZiB0aGUgYXJndW1lbnRzLCB3aGljaCBhcmUgdGhlbiBub3QgcGFydCBvZiA8YXJncz4pLgorCTxsdD4JQSBzaW5nbGUgJzwnIChMZXNzLVRoYW4pIGNoYXJhY3Rlci4gIFRoaXMgaXMgbmVlZGVkIGlmIHlvdQorCQl3YW50IHRvIGdldCBhIGxpdGVyYWwgY29weSBvZiBvbmUgb2YgdGhlc2UgZXNjYXBlIHNlcXVlbmNlcworCQlpbnRvIHRoZSBleHBhbnNpb24gLSBmb3IgZXhhbXBsZSwgdG8gZ2V0IDxiYW5nPiwgdXNlCisJCTxsdD5iYW5nPi4KKworCQkJCQkJCSo8cS1hcmdzPioKK0lmIHRoZSBmaXJzdCB0d28gY2hhcmFjdGVycyBvZiBhbiBlc2NhcGUgc2VxdWVuY2UgYXJlICJxLSIgKGZvciBleGFtcGxlLAorPHEtYXJncz4pIHRoZW4gdGhlIHZhbHVlIGlzIHF1b3RlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIG1ha2UgaXQgYSB2YWxpZCB2YWx1ZQorZm9yIHVzZSBpbiBhbiBleHByZXNzaW9uLiAgVGhpcyB1c2VzIHRoZSBhcmd1bWVudCBhcyBvbmUgc2luZ2xlIHZhbHVlLgorCitUbyBhbGxvdyBjb21tYW5kcyB0byBwYXNzIHRoZWlyIGFyZ3VtZW50cyBvbiB0byBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiwgdGhlcmUKK2lzIGEgc3BlY2lhbCBmb3JtIDxmLWFyZ3M+ICgiZnVuY3Rpb24gYXJncyIpLiBUaGlzIHNwbGl0cyB0aGUgY29tbWFuZAorYXJndW1lbnRzIGF0IHNwYWNlcyBhbmQgVGFicywgcXVvdGVzIGVhY2ggYXJndW1lbnQgaW5kaXZpZHVhbGx5LCBhbmQgdGhlCis8Zi1hcmdzPiBzZXF1ZW5jZSBpcyByZXBsYWNlZCBieSB0aGUgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcXVvdGVkIGFyZ3VtZW50cy4KK1NlZSB0aGUgTXljbWQgZXhhbXBsZSBiZWxvdy4gIFdoZW4gdGhlcmUgaXMgbm8gYXJndW1lbnQsIDxmLWFyZ3M+IGFsc28gaGFzIG5vCithcmd1bWVudC4KKworRXhhbXBsZXMgPgorCisgICAiIERlbGV0ZSBldmVyeXRoaW5nIGFmdGVyIGhlcmUgdG8gdGhlIGVuZAorICAgOmNvbSBEZGVsICssJGQKKworICAgIiBSZW5hbWUgdGhlIGN1cnJlbnQgYnVmZmVyCisgICA6Y29tIC1uYXJncz0xIC1iYW5nIC1jb21wbGV0ZT1maWxlIFJlbiBmIDxhcmdzPnx3PGJhbmc+CisKKyAgICIgUmVwbGFjZSBhIHJhbmdlIHdpdGggdGhlIGNvbnRlbnRzIG9mIGEgZmlsZQorICAgIiAoRW50ZXIgdGhpcyBhbGwgYXMgb25lIGxpbmUpCisgICA6Y29tIC1yYW5nZSAtbmFyZ3M9MSAtY29tcGxldGU9ZmlsZQorCSBSZXBsYWNlIDxsaW5lMT4tcHVffDxsaW5lMT4sPGxpbmUyPmR8ciA8YXJncz58PGxpbmUxPmQKKworICAgIiBDb3VudCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSByYW5nZQorICAgOmNvbSEgLXJhbmdlIC1uYXJncz0wIExpbmVzIDplY2hvIDxsaW5lMj4gLSA8bGluZTE+ICsgMSAibGluZXMiCisKKyAgICIgQ2FsbCBhIHVzZXIgZnVuY3Rpb24gKGV4YW1wbGUgb2YgPGYtYXJncz4pCisgICA6Y29tIC1uYXJncz0qIE15Y21kIGNhbGwgTXlmdW5jKDxmLWFyZ3M+KQorCitXaGVuIGV4ZWN1dGVkIGFzOiA+CisJOk15Y21kIGFyZzEgYXJnMgorVGhpcyB3aWxsIGludm9rZTogPgorCTpjYWxsIE15ZnVuYygiYXJnMSIsImFyZzIiKQorCisgICA6IiBBIG1vcmUgc3Vic3RhbnRpYWwgZXhhbXBsZQorICAgOmZ1bmN0aW9uIEFsbGFyZ3MoY29tbWFuZCkKKyAgIDoJbGV0IGkgPSAwCisgICA6CXdoaWxlIGkgPCBhcmdjKCkKKyAgIDoJICAgaWYgZmlsZXJlYWRhYmxlKGFyZ3YoaSkpCisgICA6CSAgICBleGVjdXRlICJlICIgLiBhcmd2KGkpCisgICA6CSAgICAgZXhlY3V0ZSBhOmNvbW1hbmQKKyAgIDogICAgICBlbmRpZgorICAgOiAgICAgIGxldCBpID0gaSArIDEKKyAgIDogICBlbmR3aGlsZQorICAgOmVuZGZ1bmN0aW9uCisgICA6Y29tbWFuZCAtbmFyZ3M9KyAtY29tcGxldGU9Y29tbWFuZCBBbGxhcmdzIGNhbGwgQWxsYXJncyg8cS1hcmdzPikKKworVGhlIGNvbW1hbmQgQWxsYXJncyB0YWtlcyBhbnkgVmltIGNvbW1hbmQocykgYXMgYXJndW1lbnQgYW5kIGV4ZWN1dGVzIGl0IG9uIGFsbAorZmlsZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QuICBVc2FnZSBleGFtcGxlIChub3RlIHVzZSBvZiB0aGUgImUiIGZsYWcgdG8gaWdub3JlCitlcnJvcnMgYW5kIHRoZSAidXBkYXRlIiBjb21tYW5kIHRvIHdyaXRlIG1vZGlmaWVkIGJ1ZmZlcnMpOiA+CisJOkFsbGFyZ3MgJXMvZm9vL2Jhci9nZXx1cGRhdGUKK1RoaXMgd2lsbCBpbnZva2U6ID4KKwk6Y2FsbCBBbGxhcmdzKCIlcy9mb28vYmFyL2dlfHVwZGF0ZSIpCis8CitXaGVuIGRlZmluaW5nIGFuIHVzZXIgY29tbWFuZCBpbiBhIHNjcmlwdCwgaXQgd2lsbCBiZSBhYmxlIHRvIGNhbGwgZnVuY3Rpb25zCitsb2NhbCB0byB0aGUgc2NyaXB0IGFuZCB1c2UgbWFwcGluZ3MgbG9jYWwgdG8gdGhlIHNjcmlwdC4gIFdoZW4gdGhlIHVzZXIKK2ludm9rZXMgdGhlIHVzZXIgY29tbWFuZCwgaXQgd2lsbCBydW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNjcmlwdCBpdCB3YXMKK2RlZmluZWQgaW4uICBUaGlzIG1hdHRlcnMgaWYgfDxTSUQ+fCBpcyB1c2VkIGluIGEgY29tbWFuZC4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL21ieXRlLnR4dCBiL3J1bnRpbWUvZG9jL21ieXRlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmMzYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvbWJ5dGUudHh0CkBAIC0wLDAgKzEsMTM2OCBAQAorKm1ieXRlLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1biAwNworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLgorCisKK011bHRpLWJ5dGUgc3VwcG9ydAkJCQkqbXVsdGlieXRlKiAqbXVsdGktYnl0ZSoKKwkJCQkJCSpDaGluZXNlKiAqSmFwYW5lc2UqICpLb3JlYW4qCitUaGlzIGlzIGFib3V0IGVkaXRpbmcgdGV4dCBpbiBsYW5ndWFnZXMgd2hpY2ggaGF2ZSBtYW55IGNoYXJhY3RlcnMgdGhhdCBjYW4KK25vdCBiZSByZXByZXNlbnRlZCB1c2luZyBvbmUgYnl0ZSAob25lIG9jdGV0KS4gIEV4YW1wbGVzIGFyZSBDaGluZXNlLCBKYXBhbmVzZQorYW5kIEtvcmVhbi4gIFVuaWNvZGUgaXMgYWxzbyBjb3ZlcmVkIGhlcmUuCisKK0ZvciBhbiBpbnRyb2R1Y3Rpb24gdG8gdGhlIG1vc3QgY29tbW9uIGZlYXR1cmVzLCBzZWUgfHVzcl80NS50eHR8IGluIHRoZSB1c2VyCittYW51YWwuCitGb3IgY2hhbmdpbmcgdGhlIGxhbmd1YWdlIG9mIG1lc3NhZ2VzIGFuZCBtZW51cyBzZWUgfG1sYW5nLnR4dHwuCisKK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK211bHRpX2J5dGUgZmVhdHVyZX0KKworCisxLiAgR2V0dGluZyBzdGFydGVkCQkJfG1ieXRlLWZpcnN0fAorMi4gIExvY2FsZQkJCQl8bWJ5dGUtbG9jYWxlfAorMy4gIEVuY29kaW5nCQkJCXxtYnl0ZS1lbmNvZGluZ3wKKzQuICBVc2luZyBhIHRlcm1pbmFsCQkJfG1ieXRlLXRlcm1pbmFsfAorNS4gIEZvbnRzIG9uIFgxMQkJCXxtYnl0ZS1mb250cy1YMTF8Cis2LiAgRm9udHMgb24gTVMtV2luZG93cwkJCXxtYnl0ZS1mb250cy1NU3dpbnwKKzcuICBJbnB1dCBvbiBYMTEJCQl8bWJ5dGUtWElNfAorOC4gIElucHV0IG9uIE1TLVdpbmRvd3MJCQl8bWJ5dGUtSU1FfAorOS4gIElucHV0IHdpdGggYSBrZXltYXAJCQl8bWJ5dGUta2V5bWFwfAorMTAuIFVzaW5nIFVURi04CQkJCXxtYnl0ZS11dGY4fAorMTEuIE92ZXJ2aWV3IG9mIG9wdGlvbnMJCQl8bWJ5dGUtb3B0aW9uc3wKKworTk9URTogVGhpcyBmaWxlIGNvbnRhaW5zIFVURi04IGNoYXJhY3RlcnMuICBUaGVzZSBtYXkgc2hvdyB1cCBhcyBzdHJhbmdlCitjaGFyYWN0ZXJzIG9yIGJveGVzIHdoZW4gdXNpbmcgYW5vdGhlciBlbmNvZGluZy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBHZXR0aW5nIHN0YXJ0ZWQJCQkJCSptYnl0ZS1maXJzdCoKKworVGhpcyBpcyBhIHN1bW1hcnkgb2YgdGhlIG11bHRpYnl0ZSBmZWF0dXJlcyBpbiBWaW0uICBJZiB5b3UgYXJlIGx1Y2t5IGl0IHdvcmtzCithcyBkZXNjcmliZWQgYW5kIHlvdSBjYW4gc3RhcnQgdXNpbmcgVmltIHdpdGhvdXQgbXVjaCB0cm91YmxlLiAgSWYgc29tZXRoaW5nCitkb2Vzbid0IHdvcmsgeW91IHdpbGwgaGF2ZSB0byByZWFkIHRoZSByZXN0LiAgRG9uJ3QgYmUgc3VycHJpc2VkIGlmIGl0IHRha2VzCitxdWl0ZSBhIGJpdCBvZiB3b3JrIGFuZCBleHBlcmltZW50aW5nIHRvIG1ha2UgVmltIHVzZSBhbGwgdGhlIG11bHRpLWJ5dGUKK2ZlYXR1cmVzLiAgVW5mb3J0dW5hdGVseSwgZXZlcnkgc3lzdGVtIGhhcyBpdHMgb3duIHdheSB0byBkZWFsIHdpdGggbXVsdGlieXRlCitsYW5ndWFnZXMgYW5kIGl0IGlzIHF1aXRlIGNvbXBsaWNhdGVkLgorCisKK0NPTVBJTElORworCitJZiB5b3UgYWxyZWFkeSBoYXZlIGEgY29tcGlsZWQgVmltIHByb2dyYW0sIGNoZWNrIGlmIHRoZSB8K211bHRpX2J5dGV8IGZlYXR1cmUKK2lzIGluY2x1ZGVkLiAgVGhlIHw6dmVyc2lvbnwgY29tbWFuZCBjYW4gYmUgdXNlZCBmb3IgdGhpcy4KKworSWYgK211bHRpX2J5dGUgaXMgbm90IGluY2x1ZGVkLCB5b3Ugc2hvdWxkIGNvbXBpbGUgVmltIHdpdGggImJpZyIgZmVhdHVyZXMuCitZb3UgY2FuIGZ1cnRoZXIgdHVuZSB3aGF0IGZlYXR1cmVzIGFyZSBpbmNsdWRlZC4gIFNlZSB0aGUgSU5TVEFMTCBmaWxlcyBpbiB0aGUKK3NvdXJjZSBkaXJlY3RvcnkuCisKKworTE9DQUxFCisKK0ZpcnN0IG9mIGFsbCwgeW91IG11c3QgbWFrZSBzdXJlIHlvdXIgY3VycmVudCBsb2NhbGUgaXMgc2V0IGNvcnJlY3RseS4gIElmCit5b3VyIHN5c3RlbSBoYXMgYmVlbiBpbnN0YWxsZWQgdG8gdXNlIHRoZSBsYW5ndWFnZSwgaXQgcHJvYmFibHkgd29ya3MgcmlnaHQKK2F3YXkuICBJZiBub3QsIHlvdSBjYW4gb2Z0ZW4gbWFrZSBpdCB3b3JrIGJ5IHNldHRpbmcgdGhlICRMQU5HIGVudmlyb25tZW50Cit2YXJpYWJsZSBpbiB5b3VyIHNoZWxsOiA+CisKKwlzZXRlbnYgTEFORyBqYV9KUC5FVUMKKworVW5mb3J0dW5hdGVseSwgdGhlIG5hbWUgb2YgdGhlIGxvY2FsZSBkZXBlbmRzIG9uIHlvdXIgc3lzdGVtLiAgSmFwYW5lc2UgbWlnaHQKK2Fsc28gYmUgY2FsbGVkICJqYV9KUC5FVUNqcCIgb3IganVzdCAiamEiLiAgVG8gc2VlIHdoYXQgaXMgY3VycmVudGx5IHVzZWQ6ID4KKworCTpsYW5ndWFnZQorCitUbyBjaGFuZ2UgdGhlIGxvY2FsZSBpbnNpZGUgVmltIHVzZTogPgorCisJOmxhbmd1YWdlIGphX0pQLkVVQworCitWaW0gd2lsbCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhpcyBkb2Vzbid0IHdvcmsuICBUaGlzIGlzIGEgZ29vZCB3YXkgdG8KK2V4cGVyaW1lbnQgYW5kIGZpbmQgdGhlIGxvY2FsZSBuYW1lIHlvdSB3YW50IHRvIHVzZS4gIEJ1dCBpdCdzIGFsd2F5cyBiZXR0ZXIKK3RvIHNldCB0aGUgbG9jYWxlIGluIHRoZSBzaGVsbCwgc28gdGhhdCBpdCBpcyB1c2VkIHJpZ2h0IGZyb20gdGhlIHN0YXJ0LgorCitTZWUgfG1ieXRlLWxvY2FsZXwgZm9yIGRldGFpbHMuCisKKworRU5DT0RJTkcKKworSWYgeW91ciBsb2NhbGUgd29ya3MgcHJvcGVybHksIFZpbSB3aWxsIHRyeSB0byBzZXQgdGhlICdlbmNvZGluZycgb3B0aW9uCithY2NvcmRpbmdseS4gIElmIHRoaXMgZG9lc24ndCB3b3JrIHlvdSBjYW4gb3ZlcnJ1bGUgaXRzIHZhbHVlOiA+CisKKwk6c2V0IGVuY29kaW5nPXV0Zi04CisKK1NlZSB8ZW5jb2RpbmctdmFsdWVzfCBmb3IgYSBsaXN0IG9mIGFjY2VwdGFibGUgdmFsdWVzLgorCitUaGUgcmVzdWx0IGlzIHRoYXQgYWxsIHRoZSB0ZXh0IHRoYXQgaXMgdXNlZCBpbnNpZGUgVmltIHdpbGwgYmUgaW4gdGhpcworZW5jb2RpbmcuICBOb3Qgb25seSB0aGUgdGV4dCBpbiB0aGUgYnVmZmVycywgYnV0IGFsc28gaW4gcmVnaXN0ZXJzLCB2YXJpYWJsZXMsCitldGMuICBUaGlzIGFsc28gbWVhbnMgdGhhdCBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgJ2VuY29kaW5nJyBtYWtlcyB0aGUgZXhpc3RpbmcKK3RleHQgaW52YWxpZCEgIFRoZSB0ZXh0IGRvZXNuJ3QgY2hhbmdlLCBidXQgaXQgd2lsbCBiZSBkaXNwbGF5ZWQgd3JvbmcuCisKK1lvdSBjYW4gZWRpdCBmaWxlcyBpbiBhbm90aGVyIGVuY29kaW5nIHRoYW4gd2hhdCAnZW5jb2RpbmcnIGlzIHNldCB0by4gIFZpbQord2lsbCBjb252ZXJ0IHRoZSBmaWxlIHdoZW4geW91IHJlYWQgaXQgYW5kIGNvbnZlcnQgaXQgYmFjayB3aGVuIHlvdSB3cml0ZSBpdC4KK1NlZSAnZmlsZWVuY29kaW5nJywgJ2ZpbGVlbmNvZGluZ3MnIGFuZCB8KytlbmN8LgorCisKK0RJU1BMQVkgQU5EIEZPTlRTCisKK0lmIHlvdSBhcmUgd29ya2luZyBpbiBhIHRlcm1pbmFsIChlbXVsYXRvcikgeW91IG11c3QgbWFrZSBzdXJlIGl0IGFjY2VwdHMgdGhlCitzYW1lIGVuY29kaW5nIGFzIHdoaWNoIFZpbSBpcyB3b3JraW5nIHdpdGguICBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgeW91IGNhbgordXNlIHRoZSAndGVybWVuY29kaW5nJyBvcHRpb24gdG8gbWFrZSBWaW0gY29udmVydCB0ZXh0IGF1dG9tYXRpY2FsbHkuCisKK0ZvciB0aGUgR1VJIHlvdSBtdXN0IHNlbGVjdCBmb250cyB0aGF0IHdvcmsgd2l0aCB0aGUgY3VycmVudCAnZW5jb2RpbmcnLiAgVGhpcworaXMgdGhlIGRpZmZpY3VsdCBwYXJ0LiAgSXQgZGVwZW5kcyBvbiB0aGUgc3lzdGVtIHlvdSBhcmUgdXNpbmcsIHRoZSBsb2NhbGUgYW5kCithIGZldyBvdGhlciB0aGluZ3MuICBTZWUgdGhlIGNoYXB0ZXJzIG9uIGZvbnRzOiB8bWJ5dGUtZm9udHMtWDExfCBmb3IKK1gtV2luZG93cyBhbmQgfG1ieXRlLWZvbnRzLU1Td2lufCBmb3IgTVMtV2luZG93cy4KKworRm9yIEdUSysgMiwgeW91IGNhbiBza2lwIG1vc3Qgb2YgdGhpcyBzZWN0aW9uLiAgVGhlIG9wdGlvbiAnZ3VpZm9udHNldCcgZG9lcworbm8gbG9uZ2VyIGV4aXN0LiAgWW91IG9ubHkgbmVlZCB0byBzZXQgJ2d1aWZvbnQnIGFuZCBldmVyeXRoaW5nIHNob3VsZCAianVzdAord29yayIuICBJZiB5b3VyIHN5c3RlbSBjb21lcyB3aXRoIFhmdDIgYW5kIGZvbnRjb25maWcgYW5kIHRoZSBjdXJyZW50IGZvbnQKK2RvZXMgbm90IGNvbnRhaW4gYSBjZXJ0YWluIGdseXBoLCBhIGRpZmZlcmVudCBmb250IHdpbGwgYmUgdXNlZCBhdXRvbWF0aWNhbGx5CitpZiBhdmFpbGFibGUuICBUaGUgJ2d1aWZvbnR3aWRlJyBvcHRpb24gaXMgc3RpbGwgc3VwcG9ydGVkIGJ1dCB1c3VhbGx5IHlvdSBkbworbm90IG5lZWQgdG8gc2V0IGl0LiAgSXQgaXMgb25seSBuZWNlc3NhcnkgaWYgdGhlIGF1dG9tYXRpYyBmb250IHNlbGVjdGlvbiBkb2VzCitub3Qgc3VpdCB5b3VyIG5lZWRzLgorCitGb3IgWDExIHlvdSBjYW4gc2V0IHRoZSAnZ3VpZm9udHNldCcgb3B0aW9uIHRvIGEgbGlzdCBvZiBmb250cyB0aGF0IHRvZ2V0aGVyCitjb3ZlciB0aGUgY2hhcmFjdGVycyB0aGF0IGFyZSB1c2VkLiAgRXhhbXBsZSBmb3IgS29yZWFuOiA+CisKKwk6c2V0IGd1aWZvbnRzZXQ9azEyLHIxMgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNldCAnZ3VpZm9udCcgYW5kICdndWlmb250d2lkZScuICAnZ3VpZm9udCcgaXMgdXNlZCBmb3IKK3RoZSBzaW5nbGUtd2lkdGggY2hhcmFjdGVycywgJ2d1aWZvbnR3aWRlJyBmb3IgdGhlIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXJzLgorVGh1cyB0aGUgJ2d1aWZvbnR3aWRlJyBmb250IG11c3QgYmUgZXhhY3RseSB0d2ljZSBhcyB3aWRlIGFzICdndWlmb250Jy4KK0V4YW1wbGUgZm9yIFVURi04OiA+CisKKwk6c2V0IGd1aWZvbnQ9LW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLSotMTgtMTIwLTEwMC0xMDAtYy05MC1pc28xMDY0Ni0xCisJOnNldCBndWlmb250d2lkZT0tbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtKi0xOC0xMjAtMTAwLTEwMC1jLTE4MC1pc28xMDY0Ni0xCisKK1lvdSBjYW4gYWxzbyBzZXQgJ2d1aWZvbnQnIGFsb25lLCBWaW0gd2lsbCB0cnkgdG8gZmluZCBhIG1hdGNoaW5nCisnZ3VpZm9udHdpZGUnIGZvciB5b3UuCisKKworSU5QVVQKKworVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBlbnRlciBtdWx0aS1ieXRlIGNoYXJhY3RlcnM6CistIEZvciBYMTEgWElNIGNhbiBiZSB1c2VkLiAgU2VlIHxYSU18LgorLSBGb3IgTVMtV2luZG93cyBJTUUgY2FuIGJlIHVzZWQuICBTZWUgfElNRXwuCistIEZvciBhbGwgc3lzdGVtcyBrZXltYXBzIGNhbiBiZSB1c2VkLiAgU2VlIHxtYnl0ZS1rZXltYXB8LgorCitUaGUgb3B0aW9ucyAnaW1pbnNlcnQnLCAnaW1zZWFyY2gnIGFuZCAnaW1jbWRsaW5lJyBjYW4gYmUgdXNlZCB0byBjaG9zZQordGhlIGRpZmZlcmVudCBpbnB1dCBtZWRob2RzIG9yIGRpc2FibGUgdGhlbSB0ZW1wb3JhcmlseS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiAgTG9jYWxlCQkJCQkJKm1ieXRlLWxvY2FsZSoKKworVGhlIGVhc2llc3Qgc2V0dXAgaXMgd2hlbiB5b3VyIHdob2xlIHN5c3RlbSB1c2VzIHRoZSBsb2NhbGUgeW91IHdhbnQgdG8gd29yaworaW4uICBCdXQgaXQncyBhbHNvIHBvc3NpYmxlIHRvIHNldCB0aGUgbG9jYWxlIGZvciBvbmUgc2hlbGwgeW91IGFyZSB3b3JraW5nCitpbiwgb3IganVzdCB1c2UgYSBjZXJ0YWluIGxvY2FsZSBpbnNpZGUgVmltLgorCisKK1dIQVQgSVMgQSBMT0NBTEU/CQkJCQkqbG9jYWxlKgorCitUaGVyZSBhcmUgbWFueSBvZiBsYW5ndWFnZXMgaW4gdGhlIHdvcmxkLiAgQW5kIHRoZXJlIGFyZSBkaWZmZXJlbnQgY3VsdHVyZXMKK2FuZCBlbnZpcm9ubWVudHMgYXQgbGVhc3QgYXMgbXVjaCBhcyB0aGUgbnVtYmVyIG9mIGxhbmd1YWdlcy4JQSBsaW5ndWlzdGljCitlbnZpcm9ubWVudCBjb3JyZXNwb25kaW5nIHRvIGFuIGFyZWEgaXMgY2FsbGVkICJsb2NhbGUiLiAgVGhpcyBpbmNsdWRlcworaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZWQgbGFuZ3VhZ2UsIHRoZSBjaGFyc2V0LCBjb2xsYXRpbmcgb3JkZXIgZm9yIHNvcnRpbmcsCitkYXRlIGZvcm1hdCwgY3VycmVuY3kgZm9ybWF0IGFuZCBzbyBvbi4gIEZvciBWaW0gb25seSB0aGUgbGFuZ3VhZ2UgYW5kIGNoYXJzZXQKK3JlYWxseSBtYXR0ZXIuCisKK1lvdSBjYW4gb25seSB1c2UgYSBsb2NhbGUgaWYgeW91ciBzeXN0ZW0gaGFzIHN1cHBvcnQgZm9yIGl0LiAgU29tZSBzeXN0ZW1zCitoYXZlIG9ubHkgYSBmZXcgbG9jYWxlcywgZXNwZWNpYWxseSBpbiB0aGUgVVNBLiAgVGhlIGxhbmd1YWdlIHdoaWNoIHlvdSB3YW50Cit0byB1c2UgbWF5IG5vdCBiZSBvbiB5b3VyIHN5c3RlbS4gIEluIHRoYXQgY2FzZSB5b3UgbWlnaHQgYmUgYWJsZSB0byBpbnN0YWxsCitpdCBhcyBhbiBleHRyYSBwYWNrYWdlLiAgQ2hlY2sgeW91ciBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBmb3IgaG93IHRvIGRvIHRoYXQuCisKK1RoZSBsb2NhdGlvbiBpbiB3aGljaCB0aGUgbG9jYWxlcyBhcmUgaW5zdGFsbGVkIHZhcmllcyBmcm9tIHN5c3RlbSB0byBzeXN0ZW0uCitGb3IgZXhhbXBsZSwgIi91c3Ivc2hhcmUvbG9jYWxlIiBvciAiL3Vzci9saWIvbG9jYWxlIi4gIFNlZSB5b3VyIHN5c3RlbSdzCitzZXRsb2NhbGUoKSBtYW4gcGFnZS4KKworTG9va2luZyBpbiB0aGVzZSBkaXJlY3RvcmllcyB3aWxsIHNob3cgeW91IHRoZSBleGFjdCBuYW1lIG9mIGVhY2ggbG9jYWxlLgorTW9zdGx5IHVwcGVyL2xvd2VyY2FzZSBtYXR0ZXJzLCB0aHVzICJqYV9KUC5FVUMiIGFuZCAiamFfanAuZXVjIiBhcmUKK2RpZmZlcmVudC4gIFNvbWUgc3lzdGVtcyBoYXZlIGEgbG9jYWxlLmFsaWFzIGZpbGUsIHdoaWNoIGFsbG93cyB0cmFuc2xhdGlvbgorZnJvbSBhIHNob3J0IG5hbWUgbGlrZSAibmwiIHRvIHRoZSBmdWxsIG5hbWUgIm5sX05MLklTT184ODU5LTEiLgorCitOb3RlIHRoYXQgWC13aW5kb3dzIGhhcyBpdHMgb3duIGxvY2FsZSBzdHVmZi4gIEFuZCB1bmZvcnR1bmF0ZWx5IHVzZXMgbG9jYWxlCituYW1lcyBkaWZmZXJlbnQgZnJvbSB3aGF0IGlzIHVzZWQgZWxzZXdoZXJlLiAgVGhpcyBpcyBjb25mdXNpbmchICBGb3IgVmltIGl0CittYXR0ZXJzIHdoYXQgdGhlIHNldGxvY2FsZSgpIGZ1bmN0aW9uIHVzZXMsIHdoaWNoIGlzIGdlbmVyYWxseSBOT1QgdGhlCitYLXdpbmRvd3Mgc3R1ZmYuICBZb3UgbWlnaHQgaGF2ZSB0byBkbyBzb21lIGV4cGVyaW1lbnRzIHRvIGZpbmQgb3V0IHdoYXQKK3JlYWxseSB3b3Jrcy4KKworCQkJCQkJCSpsb2NhbGUtbmFtZSoKK1RoZSAoc2ltcGxpZmllZCkgZm9ybWF0IG9mIHxsb2NhbGV8IG5hbWUgaXM6CisKKwlsYW5ndWFnZQorb3IJbGFuZ3VhZ2VfdGVycml0b3J5CitvcglsYW5ndWFnZV90ZXJyaXRvcnkuY29kZXNldAorCitUZXJyaXRvcnkgbWVhbnMgdGhlIGNvdW50cnkgKG9yIHBhcnQgb2YgaXQpLCBjb2Rlc2V0IG1lYW5zIHRoZSB8Y2hhcnNldHwuICBGb3IKK2V4YW1wbGUsIHRoZSBsb2NhbGUgbmFtZSAiamFfSlAuZXVjSlAiIG1lYW5zOgorCWphCXRoZSBsYW5ndWFnZSBpcyBKYXBhbmVzZQorCUpQCXRoZSBjb3VudHJ5IGlzIEphcGFuCisJZXVjSlAJdGhlIGNvZGVzZXQgaXMgRVVDLUpQCitCdXQgaXQgYWxzbyBjb3VsZCBiZSAiamEiLCAiamFfSlAuRVVDIiwgImphX0pQLnVqaXMiLCBldGMuICBBbmQgdW5mb3J0dW5hdGVseSwKK3RoZSBsb2NhbGUgbmFtZSBmb3IgYSBzcGVjaWZpYyBsYW5ndWFnZSwgdGVycml0b3J5IGFuZCBjb2Rlc2V0IGlzIG5vdCB1bmlmaWVkCithbmQgZGVwZW5kcyBvbiB5b3VyIHN5c3RlbS4KKworRXhhbXBsZXMgb2YgbG9jYWxlIG5hbWU6CisgICAgY2hhcnNldAkgICAgbGFuZ3VhZ2UJCSAgbG9jYWxlIG5hbWUgfgorICAgIEdCMjMxMgkgICAgQ2hpbmVzZSAoc2ltcGxpZmllZCkgIHpoX0NOLkVVQywgemhfQ04uR0IyMzEyCisgICAgQmlnNQkgICAgQ2hpbmVzZSAodHJhZGl0aW9uYWwpIHpoX1RXLkJJRzUsIHpoX1RXLkJpZzUKKyAgICBDTlMtMTE2NDMJICAgIENoaW5lc2UgKHRyYWRpdGlvbmFsKSB6aF9UVworICAgIEVVQy1KUAkgICAgSmFwYW5lc2UJCSAgamEsIGphX0pQLkVVQywgamFfSlAudWppcywgamFfSlAuZXVjSlAKKyAgICBTaGlmdF9KSVMJICAgIEphcGFuZXNlCQkgIGphX0pQLlNKSVMsIGphX0pQLlNoaWZ0X0pJUworICAgIEVVQy1LUgkgICAgS29yZWFuCQkgIGtvLCBrb19LUi5FVUMKKworCitVU0lORyBBIExPQ0FMRQorCitUbyBzdGFydCB1c2luZyBhIGxvY2FsZSBmb3IgdGhlIHdob2xlIHN5c3RlbSwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIKK3N5c3RlbS4gIE1vc3RseSB5b3UgbmVlZCB0byBzZXQgaXQgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUgaW4gIi9ldGMiLgorCitUbyB1c2UgYSBsb2NhbGUgaW4gYSBzaGVsbCwgc2V0IHRoZSAkTEFORyBlbnZpcm9ubWVudCB2YWx1ZS4gIFdoZW4geW91IHdhbnQgdG8KK3VzZSBLb3JlYW4gYW5kIHRoZSB8bG9jYWxlfCBuYW1lIGlzICJrbyIsIGRvIHRoaXM6CisKKyAgICBzaDogICAgZXhwb3J0IExBTkc9a28KKyAgICBjc2g6ICAgc2V0ZW52IExBTkcga28KKworWW91IGNhbiBwdXQgdGhpcyBpbiB5b3VyIH4vLnByb2ZpbGUgb3Igfi8uY3NocmMgZmlsZSB0byBhbHdheXMgdXNlIGl0LgorCitUbyB1c2UgYSBsb2NhbGUgaW4gVmltIG9ubHksIHVzZSB0aGUgfDpsYW5ndWFnZXwgY29tbWFuZDogPgorCisJOmxhbmd1YWdlIGtvCisKK1B1dCB0aGlzIGluIHlvdXIgfi8udmltcmMgZmlsZSB0byB1c2UgaXQgYWx3YXlzLgorCitPciBzcGVjaWZ5ICRMQU5HIHdoZW4gc3RhcnRpbmcgVmltOgorCisgICBzaDogICAgTEFORz1rbyB2aW0ge3ZpbS1hcmd1bWVudHN9CisgICBjc2g6CSAgZW52IExBTkc9a28gdmltIHt2aW0tYXJndW1lbnRzfQorCitZb3UgY291bGQgbWFrZSBhIHNtYWxsIHNoZWxsIHNjcmlwdCBmb3IgdGhpcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiAgRW5jb2RpbmcJCQkJKm1ieXRlLWVuY29kaW5nKgorCitWaW0gdXNlcyB0aGUgJ2VuY29kaW5nJyBvcHRpb24gdG8gc3BlY2lmeSBob3cgY2hhcmFjdGVycyBpZGVudGlmaWVkIGFuZAorZW5jb2RlZCB3aGVuIHRoZXkgYXJlIHVzZWQgaW5zaWRlIFZpbS4gIFRoaXMgYXBwbGllcyB0byBhbGwgdGhlIHBsYWNlcyB3aGVyZQordGV4dCBpcyB1c2VkLCBpbmNsdWRpbmcgYnVmZmVycyAoZmlsZXMgbG9hZGVkIGludG8gbWVtb3J5KSwgcmVnaXN0ZXJzIGFuZAordmFyaWFibGVzLgorCisJCQkJCQkJKmNoYXJzZXQqICpjb2Rlc2V0KgorQ2hhcnNldCBpcyBhbm90aGVyIG5hbWUgZm9yIGVuY29kaW5nLiAgVGhlcmUgYXJlIHN1YnRsZSBkaWZmZXJlbmNlcywgYnV0IHRoZXNlCitkb24ndCBtYXR0ZXIgd2hlbiB1c2luZyBWaW0uICAiY29kZXNldCIgaXMgYW5vdGhlciBzaW1pbGFyIG5hbWUuCisKK0VhY2ggY2hhcmFjdGVyIGlzIGVuY29kZWQgYXMgb25lIG9yIG1vcmUgYnl0ZXMuICBXaGVuIGFsbCBjaGFyYWN0ZXJzIGFyZQorZW5jb2RlZCB3aXRoIG9uZSBieXRlLCB3ZSBjYWxsIHRoaXMgYSBzaW5nbGUtYnl0ZSBlbmNvZGluZy4gIFRoZSBtb3N0IG9mdGVuCit1c2VkIG9uZSBpcyBjYWxsZWQgImxhdGluMSIuICBUaGlzIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gMjU2LgorU29tZSBvZiB0aGVzZSBhcmUgY29udHJvbCBjaGFyYWN0ZXJzLCB0aHVzIGV2ZW4gZmV3ZXIgY2FuIGJlIHVzZWQgZm9yIHRleHQuCisKK1doZW4gc29tZSBjaGFyYWN0ZXJzIHVzZSB0d28gb3IgbW9yZSBieXRlcywgd2UgY2FsbCB0aGlzIGEgbXVsdGktYnl0ZQorZW5jb2RpbmcuICBUaGlzIGFsbG93cyB1c2luZyBtdWNoIG1vcmUgdGhhbiAyNTYgY2hhcmFjdGVycywgd2hpY2ggaXMgcmVxdWlyZWQKK2ZvciBtb3N0IEVhc3QgQXNpYW4gbGFuZ3VhZ2VzLgorCitNb3N0IG11bHRpLWJ5dGUgZW5jb2RpbmdzIHVzZSBvbmUgYnl0ZSBmb3IgdGhlIGZpcnN0IDEyNyBjaGFyYWN0ZXJzLiAgVGhlc2UKK2FyZSBlcXVhbCB0byBBU0NJSSwgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBleGNoYW5nZSBwbGFpbi1BU0NJSSB0ZXh0LCBubworbWF0dGVyIHdoYXQgbGFuZ3VhZ2UgaXMgdXNlZC4gIFRodXMgeW91IG1pZ2h0IHNlZSB0aGUgcmlnaHQgdGV4dCBldmVuIHdoZW4gdGhlCitlbmNvZGluZyB3YXMgc2V0IHdyb25nLgorCisJCQkJCQkJKmVuY29kaW5nLW5hbWVzKgorVmltIGNhbiB1c2UgbWFueSBkaWZmZXJlbnQgY2hhcmFjdGVyIGVuY29kaW5ncy4gIFRoZXJlIGFyZSB0aHJlZSBtYWpvciBncm91cHM6CisKKzEgICA4Yml0CVNpbmdsZS1ieXRlIGVuY29kaW5ncywgMjU2IGRpZmZlcmVudCBjaGFyYWN0ZXJzLiAgTW9zdGx5IHVzZWQKKwkJaW4gVVNBIGFuZCBFdXJvcGUuICBFeGFtcGxlOiBJU08tODg1OS0xIChMYXRpbjEpLiAgQWxsCisJCWNoYXJhY3RlcnMgb2NjdXB5IG9uZSBzY3JlZW4gY2VsbCBvbmx5LgorCisyICAgMmJ5dGUJRG91YmxlLWJ5dGUgZW5jb2RpbmdzLCBvdmVyIDEwMDAwIGRpZmZlcmVudCBjaGFyYWN0ZXJzLgorCQlNb3N0bHkgdXNlZCBpbiBBc2lhbiBjb3VudHJpZXMuICBFeGFtcGxlOiBldWMta3IgKEtvcmVhbikKKwkJVGhlIG51bWJlciBvZiBzY3JlZW4gY2VsbHMgaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBieXRlcworCQkoZXhjZXB0IGZvciBldWMtanAgd2hlbiB0aGUgZmlyc3QgYnl0ZSBpcyAweDhlKS4KKwordSAgIFVuaWNvZGUJVW5pdmVyc2FsIGVuY29kaW5nLCBjYW4gcmVwbGFjZSBhbGwgb3RoZXJzLiAgSVNPIDEwNjQ2LgorCQlNaWxsaW9ucyBvZiBkaWZmZXJlbnQgY2hhcmFjdGVycy4gIEV4YW1wbGU6IFVURi04LiAgVGhlCisJCXJlbGF0aW9uIGJldHdlZW4gYnl0ZXMgYW5kIHNjcmVlbiBjZWxscyBpcyBjb21wbGV4LgorCitPdGhlciBlbmNvZGluZ3MgY2Fubm90IGJlIHVzZWQgYnkgVmltIGludGVybmFsbHkuICBCdXQgZmlsZXMgaW4gb3RoZXIKK2VuY29kaW5ncyBjYW4gYmUgZWRpdGVkIGJ5IHVzaW5nIGNvbnZlcnNpb24sIHNlZSAnZmlsZWVuY29kaW5nJy4KK05vdGUgdGhhdCBhbGwgZW5jb2RpbmdzIG11c3QgdXNlIEFTQ0lJIGZvciB0aGUgY2hhcmFjdGVycyB1cCB0byAxMjggKGV4Y2VwdAord2hlbiBjb21waWxlZCBmb3IgRUJDRElDKS4KKworU3VwcG9ydGVkICdlbmNvZGluZycgdmFsdWVzIGFyZToJCQkqZW5jb2RpbmctdmFsdWVzKgorMSAgIGxhdGluMQk4LWJpdCBjaGFyYWN0ZXJzIChJU08gODg1OS0xKQorMSAgIGlzby04ODU5LW4JSVNPXzg4NTkgdmFyaWFudCAobiA9IDIgdG8gMTUpCisxICAga29pOC1yCVJ1c3NpYW4KKzEgICBrb2k4LXUJVWtyYWluaWFuCisxICAgbWFjcm9tYW4gICAgTWFjUm9tYW4gKE1hY2ludG9zaCBlbmNvZGluZykKKzEgICA4Yml0LXtuYW1lfSBhbnkgOC1iaXQgZW5jb2RpbmcgKFZpbSBzcGVjaWZpYyBuYW1lKQorMSAgIGNwe251bWJlcn0JTVMtV2luZG93czogYW55IGluc3RhbGxlZCBzaW5nbGUtYnl0ZSBjb2RlcGFnZQorMiAgIGNwOTMyCUphcGFuZXNlIChXaW5kb3dzIG9ubHkpCisyICAgZXVjLWpwCUphcGFuZXNlIChVbml4IG9ubHkpCisyICAgc2ppcwlKYXBhbmVzZSAoVW5peCBvbmx5KQorMiAgIGNwOTQ5CUtvcmVhbiAoVW5peCBhbmQgV2luZG93cykKKzIgICBldWMta3IJS29yZWFuIChVbml4IG9ubHkpCisyICAgY3A5MzYJc2ltcGxpZmllZCBDaGluZXNlIChXaW5kb3dzIG9ubHkpCisyICAgZXVjLWNuCXNpbXBsaWZpZWQgQ2hpbmVzZSAoVW5peCBvbmx5KQorMiAgIGNwOTUwCXRyYWRpdGlvbmFsIENoaW5lc2UgKG9uIFVuaXggYWxpYXMgZm9yIGJpZzUpCisyICAgYmlnNQl0cmFkaXRpb25hbCBDaGluZXNlIChvbiBXaW5kb3dzIGFsaWFzIGZvciBjcDk1MCkKKzIgICBldWMtdHcJdHJhZGl0aW9uYWwgQ2hpbmVzZSAoVW5peCBvbmx5KQorMiAgIDJieXRlLXtuYW1lfSBVbml4OiBhbnkgZG91YmxlLWJ5dGUgZW5jb2RpbmcgKFZpbSBzcGVjaWZpYyBuYW1lKQorMiAgIGNwe251bWJlcn0JTVMtV2luZG93czogYW55IGluc3RhbGxlZCBkb3VibGUtYnl0ZSBjb2RlcGFnZQordSAgIHV0Zi04CTMyIGJpdCBVVEYtOCBlbmNvZGVkIFVuaWNvZGUgKElTTy9JRUMgMTA2NDYtMSkKK3UgICB1Y3MtMgkxNiBiaXQgVUNTLTIgZW5jb2RlZCBVbmljb2RlIChJU08vSUVDIDEwNjQ2LTEpCit1ICAgdWNzLTJsZQlsaWtlIHVjcy0yLCBsaXR0bGUgZW5kaWFuCit1ICAgdXRmLTE2CXVjcy0yIGV4dGVuZGVkIHdpdGggZG91YmxlLXdvcmRzIGZvciBtb3JlIGNoYXJhY3RlcnMKK3UgICB1dGYtMTZsZQlsaWtlIHV0Zi0xNiwgbGl0dGxlIGVuZGlhbgordSAgIHVjcy00CTMyIGJpdCBVQ1MtNCBlbmNvZGVkIFVuaWNvZGUgKElTTy9JRUMgMTA2NDYtMSkKK3UgICB1Y3MtNGxlCWxpa2UgdWNzLTQsIGxpdHRsZSBlbmRpYW4KKworVGhlIHtuYW1lfSBjYW4gYmUgYW55IGVuY29kaW5nIG5hbWUgdGhhdCB5b3VyIHN5c3RlbSBzdXBwb3J0cy4gIEl0IGlzIHBhc3NlZAordG8gaWNvbnYoKSB0byBjb252ZXJ0IGJldHdlZW4gdGhlIGVuY29kaW5nIG9mIHRoZSBmaWxlIGFuZCB0aGUgY3VycmVudCBsb2NhbGUuCitGb3IgTVMtV2luZG93cyAiY3B7bnVtYmVyfSIgbWVhbnMgdXNpbmcgY29kZXBhZ2Uge251bWJlcn0uCitFeGFtcGxlczogPgorCQk6c2V0IGVuY29kaW5nPThiaXQtY3AxMjUyCisJCTpzZXQgZW5jb2Rpbmc9MmJ5dGUtY3A5MzIKKzwKK1NldmVyYWwgYWxpYXNlcyBjYW4gYmUgdXNlZCwgdGhleSBhcmUgdHJhbnNsYXRlZCB0byBvbmUgb2YgdGhlIG5hbWVzIGFib3ZlLgorQW4gaW5jb21wbGV0ZSBsaXN0OgorCisxICAgYW5zaQlzYW1lIGFzIGxhdGluMSAob2Jzb2xldGUsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQorMiAgIGphcGFuCUphcGFuZXNlOiBvbiBVbml4ICJldWMtanAiLCBvbiBNUy1XaW5kb3dzIGNwOTMyCisyICAga29yZWEJS29yZWFuOiBvbiBVbml4ICJldWMta3IiLCBvbiBNUy1XaW5kb3dzIGNwOTQ5CisyICAgcHJjCQlzaW1wbGlmaWVkIENoaW5lc2U6IG9uIFVuaXggImV1Yy1jbiIsIG9uIE1TLVdpbmRvd3MgY3A5MzYKKzIgICBjaGluZXNlICAgICBzYW1lIGFzICJwcmMiCisyICAgdGFpd2FuCXRyYWRpdGlvbmFsIENoaW5lc2U6IG9uIFVuaXggImV1Yy10dyIsIG9uIE1TLVdpbmRvd3MgY3A5NTAKK3UgICB1dGY4CXNhbWUgYXMgdXRmLTgKK3UgICB1bmljb2RlCXNhbWUgYXMgdWNzLTIKK3UgICB1Y3MyYmUJc2FtZSBhcyB1Y3MtMiAoYmlnIGVuZGlhbikKK3UgICB1Y3MtMmJlCXNhbWUgYXMgdWNzLTIgKGJpZyBlbmRpYW4pCit1ICAgdWNzLTRiZQlzYW1lIGFzIHVjcy00IChiaWcgZW5kaWFuKQorCitGb3IgdGhlIFVDUyBjb2RlcyB0aGUgYnl0ZSBvcmRlciBtYXR0ZXJzLiAgVGhpcyBpcyB0cmlja3ksIHVzZSBVVEYtOCB3aGVuZXZlcgoreW91IGNhbi4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBiaWctZW5kaWFuIChtb3N0IHNpZ25pZmljYW50IGJ5dGUgY29tZXMKK2ZpcnN0KToKKwkgICAgbmFtZQlieXRlcwkJY2hhciB+CisJICAgIHVjcy0yCSAgICAgIDExIDIyCSAgICAxMTIyCisJICAgIHVjcy0ybGUJICAgICAgMjIgMTEJICAgIDExMjIKKwkgICAgdWNzLTQJMTEgMjIgMzMgNDQJMTEyMjMzNDQKKwkgICAgdWNzLTRsZQk0NCAzMyAyMiAxMQkxMTIyMzM0NAorCitPbiBNUy1XaW5kb3dzIHN5c3RlbXMgeW91IG9mdGVuIHdhbnQgdG8gdXNlICJ1Y3MtMmxlIiwgYmVjYXVzZSBpdCB1c2VzIGxpdHRsZQorZW5kaWFuIFVDUy0yLgorCitUaGVyZSBhcmUgYSBmZXcgZW5jb2RpbmdzIHdoaWNoIGFyZSBzaW1pbGFyLCBidXQgbm90IGV4YWN0bHkgdGhlIHNhbWUuICBWaW0KK3RyZWF0cyB0aGVtIGFzIGlmIHRoZXkgd2VyZSBkaWZmZXJlbnQgZW5jb2RpbmdzLCBzbyB0aGF0IGNvbnZlcnNpb24gd2lsbCBiZQorZG9uZSB3aGVuIG5lZWRlZC4gIFlvdSBtaWdodCB3YW50IHRvIHVzZSB0aGUgc2ltaWxhciBuYW1lIHRvIGF2b2lkIGNvbnZlcnNpb24KK29yIHdoZW4gY29udmVyc2lvbiBpcyBub3QgcG9zc2libGU6CisKKwljcDkzMiwgc2hpZnQtamlzLCBzamlzCisJY3A5MzYsIGV1Yy1jbgorCisJCQkJCQkJKmVuY29kaW5nLXRhYmxlKgorTm9ybWFsbHkgJ2VuY29kaW5nJyBpcyBlcXVhbCB0byB5b3VyIGN1cnJlbnQgbG9jYWxlIGFuZCAndGVybWVuY29kaW5nJyBpcworZW1wdHkuICBUaGlzIG1lYW5zIHRoYXQgeW91ciBrZXlib2FyZCBhbmQgZGlzcGxheSB3b3JrIHdpdGggY2hhcmFjdGVycyBlbmNvZGVkCitpbiB5b3VyIGN1cnJlbnQgbG9jYWxlLCBhbmQgVmltIHVzZXMgdGhlIHNhbWUgY2hhcmFjdGVycyBpbnRlcm5hbGx5LgorCitZb3UgY2FuIG1ha2UgVmltIHVzZSBjaGFyYWN0ZXJzIGluIGEgZGlmZmVyZW50IGVuY29kaW5nIGJ5IHNldHRpbmcgdGhlCisnZW5jb2RpbmcnIG9wdGlvbiB0byBhIGRpZmZlcmVudCB2YWx1ZS4gIFNpbmNlIHRoZSBrZXlib2FyZCBhbmQgZGlzcGxheSBzdGlsbAordXNlIHRoZSBjdXJyZW50IGxvY2FsZSwgY29udmVyc2lvbiBuZWVkcyB0byBiZSBkb25lLiAgVGhlICd0ZXJtZW5jb2RpbmcnIHRoZW4KK3Rha2VzIG92ZXIgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGxvY2FsZSwgc28gVmltIGNvbnZlcnRzIGJldHdlZW4gJ2VuY29kaW5nJworYW5kICd0ZXJtZW5jb2RpbmcnLiAgRXhhbXBsZTogPgorCTpsZXQgJnRlcm1lbmNvZGluZyA9ICZlbmNvZGluZworCTpzZXQgZW5jb2Rpbmc9dXRmLTgKKworSG93ZXZlciwgbm90IGFsbCBjb21iaW5hdGlvbnMgb2YgdmFsdWVzIGFyZSBwb3NzaWJsZS4gIFRoZSB0YWJsZSBiZWxvdyB0ZWxscworeW91IGhvdyBlYWNoIG9mIHRoZSBuaW5lIGNvbWJpbmF0aW9ucyB3b3Jrcy4gIFRoaXMgaXMgZnVydGhlciByZXN0cmljdGVkIGJ5Citub3QgYWxsIGNvbnZlcnNpb25zIGJlaW5nIHBvc3NpYmxlLCBpY29udigpIGJlaW5nIHByZXNlbnQsIGV0Yy4gIFNpbmNlIHRoaXMKK2RlcGVuZHMgb24gdGhlIHN5c3RlbSB1c2VkLCBubyBkZXRhaWxlZCBsaXN0IGNhbiBiZSBnaXZlbi4KKworKCd0ZW5jJyBpcyB0aGUgc2hvcnQgbmFtZSBmb3IgJ3Rlcm1lbmNvZGluZycgYW5kICdlbmMnIHNob3J0IGZvciAnZW5jb2RpbmcnKQorCisndGVuYycJICAgICdlbmMnCXJlbWFyayB+CisKKyA4Yml0CSAgICA4Yml0CVdvcmtzLiAgV2hlbiAndGVybWVuY29kaW5nJyBpcyBkaWZmZXJlbnQgZnJvbQorCQkJJ2VuY29kaW5nJyB0eXBpbmcgYW5kIGRpc3BsYXlpbmcgbWF5IGJlIHdyb25nIGZvciBzb21lCisJCQljaGFyYWN0ZXJzLCBWaW0gZG9lcyBOT1QgcGVyZm9ybSBjb252ZXJzaW9uIChzZXQKKwkJCSdlbmNvZGluZycgdG8gInV0Zi04IiB0byBnZXQgdGhpcykuCisgOGJpdCAgICAgIDJieXRlCU1TLVdpbmRvd3M6IHdvcmtzIGZvciBhbGwgY29kZXBhZ2VzIGluc3RhbGxlZCBvbiB5b3VyCisJCQlzeXN0ZW07IHlvdSBjYW4gb25seSB0eXBlIDhiaXQgY2hhcmFjdGVyczsKKwkJCU90aGVyIHN5c3RlbXM6IGRvZXMgTk9UIHdvcmsuCisgOGJpdAkgICBVbmljb2RlCVdvcmtzLCBidXQgeW91IGNhbiBvbmx5IHR5cGUgOGJpdCBjaGFyYWN0ZXJzOyBpbiBhCisJCQl0ZXJtaW5hbCB5b3UgY2FuIG9ubHkgc2VlIDhiaXQgY2hhcmFjdGVyczsgdGhlIEdVSSBjYW4KKwkJCXNob3cgYWxsIGNoYXJhY3RlcnMgdGhhdCB0aGUgJ2d1aWZvbnQnIHN1cHBvcnRzLgorCisgMmJ5dGUJICAgIDhiaXQJV29ya3MsIGJ1dCB0eXBpbmcgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgbWlnaHQKKwkJCWJlIGEgcHJvYmxlbS4KKyAyYnl0ZQkgICAyYnl0ZQlNUy1XaW5kb3dzOiB3b3JrcyBmb3IgYWxsIGNvZGVwYWdlcyBpbnN0YWxsZWQgb24geW91cgorCQkJc3lzdGVtOyB0eXBpbmcgY2hhcmFjdGVycyBtaWdodCBiZSBhIHByb2JsZW0gd2hlbgorCQkJbG9jYWxlIGlzIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycuCisJCQlPdGhlciBzeXN0ZW1zOiBPbmx5IHdvcmtzIHdoZW4gJ3Rlcm1lbmNvZGluZycgaXMgZXF1YWwKKwkJCXRvICdlbmNvZGluZycsIHlvdSBtaWdodCBhcyB3ZWxsIGxlYXZlIGl0IGVtcHR5LgorIDJieXRlCSAgIFVuaWNvZGUJd29ya3MsIFZpbSB3aWxsIHRyYW5zbGF0ZSB0eXBlZCBjaGFyYWN0ZXJzLgorCisgVW5pY29kZSAgICA4Yml0CXdvcmtzICh1bnVzdWFsKQorIFVuaWNvZGUgICAgMmJ5dGUJZG9lcyBOT1Qgd29yaworIFVuaWNvZGUgICBVbmljb2RlCXdvcmtzIHZlcnkgd2VsbCAobGVhdmluZyAndGVybWVuY29kaW5nJyBlbXB0eSB3b3JrcworCQkJdGhlIHNhbWUgd2F5LCBiZWNhdXNlIGFsbCBVbmljb2RlIGlzIGhhbmRsZWQKKwkJCWludGVybmFsbHkgYXMgVVRGLTgpCisKK0NPTlZFUlNJT04JCQkJCQkqY2hhcnNldC1jb252ZXJzaW9uKgorCitWaW0gd2lsbCBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgZnJvbSBvbmUgdG8gYW5vdGhlciBlbmNvZGluZyBpbiBzZXZlcmFsIHBsYWNlczoKKy0gV2hlbiByZWFkaW5nIGEgZmlsZSBhbmQgJ2ZpbGVlbmNvZGluZycgaXMgZGlmZmVyZW50IGZyb20gJ2VuY29kaW5nJworLSBXaGVuIHdyaXRpbmcgYSBmaWxlIGFuZCAnZmlsZWVuY29kaW5nJyBpcyBkaWZmZXJlbnQgZnJvbSAnZW5jb2RpbmcnCistIFdoZW4gZGlzcGxheWluZyBjaGFyYWN0ZXJzIGFuZCAndGVybWVuY29kaW5nJyBpcyBkaWZmZXJlbnQgZnJvbSAnZW5jb2RpbmcnCistIFdoZW4gcmVhZGluZyBpbnB1dCBhbmQgJ3Rlcm1lbmNvZGluZycgaXMgZGlmZmVyZW50IGZyb20gJ2VuY29kaW5nJworLSBXaGVuIGRpc3BsYXlpbmcgbWVzc2FnZXMgYW5kIHRoZSBlbmNvZGluZyB1c2VkIGZvciBMQ19NRVNTQUdFUyBkaWZmZXJzIGZyb20KKyAgJ2VuY29kaW5nJyAocmVxdWlyZXMgYSBnZXR0ZXh0IHZlcnNpb24gdGhhdCBzdXBwb3J0cyB0aGlzKS4KKy0gV2hlbiByZWFkaW5nIGEgVmltIHNjcmlwdCB3aGVyZSB8OnNjcmlwdGVuY29kaW5nfCBpcyBkaWZmZXJlbnQgZnJvbQorICAnZW5jb2RpbmcnLgorLSBXaGVuIHJlYWRpbmcgb3Igd3JpdGluZyBhIHx2aW1pbmZvfCBmaWxlLgorTW9zdCBvZiB0aGVzZSByZXF1aXJlIHRoZSB8K2ljb252fCBmZWF0dXJlLiAgQ29udmVyc2lvbiBmb3IgcmVhZGluZyBhbmQKK3dyaXRpbmcgZmlsZXMgbWF5IGFsc28gYmUgc3BlY2lmaWVkIHdpdGggdGhlICdjaGFyY29udmVydCcgb3B0aW9uLgorCitVc2VmdWwgdXRpbGl0aWVzIGZvciBjb252ZXJ0aW5nIHRoZSBjaGFyc2V0OgorICAgIEFsbDoJICAgIGljb252CisJR05VIGljb252IGNhbiBjb252ZXJ0IG1vc3QgZW5jb2RpbmdzLiAgVW5pY29kZSBpcyB1c2VkIGFzIHRoZQorCWludGVybWVkaWF0ZSBlbmNvZGluZywgd2hpY2ggYWxsb3dzIGNvbnZlcnNpb24gZnJvbSBhbmQgdG8gYWxsIG90aGVyCisJZW5jb2RpbmdzLiAgU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9kaXJlY3RvcnkvbGliaWNvbnYuaHRtbC4KKworICAgIEphcGFuZXNlOgkgICAgbmtmCisJTmtmIGlzICJOZXR3b3JrIEthbmppIGNvZGUgY29udmVyc2lvbiBGaWx0ZXIiLiAgT25lIG9mIHRoZSBtb3N0IHVuaXF1ZQorCWZhY2lsaXR5IG9mIG5rZiBpcyB0aGUgZ3Vlc3Mgb2YgdGhlIGlucHV0IEthbmppIGNvZGUuICBTbywgeW91IGRvbid0CisJbmVlZCB0byBrbm93IHdoYXQgdGhlIGlucHV0dGluZyBmaWxlJ3MgfGNoYXJzZXR8IGlzLiAgV2hlbiBjb252ZXJ0IHRvCisJRVVDLUpQIGZyb20gSVNPLTIwMjItSlAgb3IgU2hpZnRfSklTLCBzaW1wbHkgZG8gdGhlIGZvbGxvd2luZyBjb21tYW5kCisJaW4gVmltOgorCSAgICA6JSFua2YgLWUKKwlOa2YgY2FuIGJlIGZvdW5kIGF0OgorCWh0dHA6Ly93d3cuc2ZjLndpZGUuYWQuanAvfm1heC9GcmVlQlNEL3BvcnRzL2Rpc3RmaWxlcy9ua2YtMS42Mi50YXIuZ3oKKworICAgIENoaW5lc2U6CSAgICBoYworCUhjIGlzICJIYW56aSBDb252ZXJ0ZXIiLiAgSGMgY29udmVydCBhIEdCIGZpbGUgdG8gYSBCaWc1IGZpbGUsIG9yIEJpZzUKKwlmaWxlIHRvIEdCIGZpbGUuICBIYyBjYW4gYmUgZm91bmQgYXQ6CisJZnRwOi8vZnRwLmN1aGsuaGsvcHViL2NoaW5lc2UvaWZjc3Mvc29mdHdhcmUvdW5peC9jb252ZXJ0L2hjLTMwLnRhci5negorCisgICAgS29yZWFuOgkgICAgaG1jb252CisJSG1jb252IGlzIEtvcmVhbiBjb2RlIGNvbnZlcnNpb24gdXRpbGl0eSBlc3BlY2lhbGx5IGZvciBFLW1haWwuIEl0IGNhbgorCWNvbnZlcnQgYmV0d2VlbiBFVUMtS1IgYW5kIElTTy0yMDIyLUtSLiAgSG1jb252IGNhbiBiZSBmb3VuZCBhdDoKKwlmdHA6Ly9mdHAua2Fpc3QuYWMua3IvcHViL2hhbmd1bC9jb2RlL2htY29udi8KKworICAgIE11bHRpbGluZ3VhbDogICBsdgorCUx2IGlzIGEgUG93ZXJmdWwgTXVsdGlsaW5ndWFsIEZpbGUgVmlld2VyLiAgQW5kIGl0IGNhbiBiZSB3b3JrZWQgYXMKKwl8Y2hhcnNldHwgY29udmVydGVyLiAgU3VwcG9ydGVkIHxjaGFyc2V0fDogSVNPLTIwMjItQ04sIElTTy0yMDIyLUpQLAorCUlTTy0yMDIyLUtSLCBFVUMtQ04sIEVVQy1KUCwgRVVDLUtSLCBFVUMtVFcsIFVURi03LCBVVEYtOCwgSVNPLTg4NTkKKwlzZXJpZXMsIFNoaWZ0X0pJUywgQmlnNSBhbmQgSFouIEx2IGNhbiBiZSBmb3VuZCBhdDoKKwlodHRwOi8vd3d3LmZmLmlpajR1Lm9yLmpwL35ucnQvZnJlZXdhcmUvbHY0NDk1LnRhci5negorCisKKwkJCQkJCQkqbWJ5dGUtY29udmVyc2lvbioKK1doZW4gcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBpbiBhbiBlbmNvZGluZyBkaWZmZXJlbnQgZnJvbSAnZW5jb2RpbmcnLAorY29udmVyc2lvbiBuZWVkcyB0byBiZSBkb25lLiAgVGhlc2UgY29udmVyc2lvbnMgYXJlIHN1cHBvcnRlZDoKKy0gQWxsIGNvbnZlcnNpb25zIGJldHdlZW4gTGF0aW4tMSAoSVNPLTg4NTktMSksIFVURi04LCBVQ1MtMiBhbmQgVUNTLTQgYXJlCisgIGhhbmRsZWQgaW50ZXJuYWxseS4KKy0gRm9yIE1TLVdpbmRvd3MsIHdoZW4gJ2VuY29kaW5nJyBpcyBhIFVuaWNvZGUgZW5jb2RpbmcsIGNvbnZlcnNpb24gZnJvbSBhbmQKKyAgdG8gYW55IGNvZGVwYWdlIHNob3VsZCB3b3JrLgorLSBDb252ZXJzaW9uIHNwZWNpZmllZCB3aXRoICdjaGFyY29udmVydCcKKy0gQ29udmVyc2lvbiB3aXRoIHRoZSBpY29udiBsaWJyYXJ5LCBpZiBpdCBpcyBhdmFpbGFibGUuCisJT2xkIHZlcnNpb25zIG9mIEdOVSBpY29udigpIG1heSBjYXVzZSB0aGUgY29udmVyc2lvbiB0byBmYWlsICh0aGV5CisJcmVxdWVzdCBhIHZlcnkgbGFyZ2UgYnVmZmVyLCBtb3JlIHRoYW4gVmltIGlzIHdpbGxpbmcgdG8gcHJvdmlkZSkuCisJVHJ5IGdldHRpbmcgYW5vdGhlciBpY29udigpIGltcGxlbWVudGF0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFVzaW5nIGEgdGVybWluYWwJCQkJCSptYnl0ZS10ZXJtaW5hbCoKKworVGhlIEdVSSBmdWxseSBzdXBwb3J0cyBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICBJdCBpcyBhbHNvIHBvc3NpYmxlIGluIGEKK3Rlcm1pbmFsLCBpZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgdGhlIHNhbWUgZW5jb2RpbmcgdGhhdCBWaW0gdXNlcy4gIFRodXMgdGhpcworaXMgbGVzcyBmbGV4aWJsZS4KKworRm9yIGV4YW1wbGUsIHlvdSBjYW4gcnVuIFZpbSBpbiBhIHh0ZXJtIHdpdGggYWRkZWQgbXVsdGktYnl0ZSBzdXBwb3J0IGFuZC9vcgorfFhJTXwuICBFeGFtcGxlcyBhcmUga3Rlcm0gKEthbmppIHRlcm0pIGFuZCBoYW50ZXJtIChmb3IgS29yZWFuKSwgRXRlcm0KKyhFbmxpZ2h0ZW5lZCB0ZXJtaW5hbCkgYW5kIHJ4dnQuCisKK0lmIHlvdXIgdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmlnaHQgZW5jb2RpbmcsIHlvdSBjYW4gc2V0IHRoZQorJ3Rlcm1lbmNvZGluZycgb3B0aW9uLiAgVmltIHdpbGwgdGhlbiBjb252ZXJ0IHRoZSB0eXBlZCBjaGFyYWN0ZXJzIGZyb20KKyd0ZXJtZW5jb2RpbmcnIHRvICdlbmNvZGluZycuICBBbmQgZGlzcGxheWVkIHRleHQgd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbQorJ2VuY29kaW5nJyB0byAndGVybWVuY29kaW5nJy4gIElmIHRoZSBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgdGhlIHRlcm1pbmFsCitkb2Vzbid0IGluY2x1ZGUgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgVmltIHVzZXMsIHRoaXMgbGVhZHMgdG8gbG9zdAorY2hhcmFjdGVycy4gIFRoaXMgbWF5IG1lc3MgdXAgdGhlIGRpc3BsYXkuICBJZiB5b3UgdXNlIGEgdGVybWluYWwgdGhhdAorc3VwcG9ydHMgVW5pY29kZSwgc3VjaCBhcyB0aGUgeHRlcm0gbWVudGlvbmVkIGJlbG93LCBpdCBzaG91bGQgd29yayBqdXN0IGZpbmUsCitzaW5jZSBuZWFybHkgZXZlcnkgY2hhcmFjdGVyIHNldCBjYW4gYmUgY29udmVydGVkIHRvIFVuaWNvZGUgd2l0aG91dCBsb3NzIG9mCitpbmZvcm1hdGlvbi4KKworCitVVEYtOCBJTiBYRlJFRTg2IFhURVJNCQkJCQkqVVRGOC14dGVybSoKKworVGhpcyBpcyBhIHNob3J0IGV4cGxhbmF0aW9uIG9mIGhvdyB0byB1c2UgVVRGLTggY2hhcmFjdGVyIGVuY29kaW5nIGluIHRoZQoreHRlcm0gdGhhdCBjb21lcyB3aXRoIFhGcmVlODYgYnkgVGhvbWFzIERpY2tleSAodGV4dCBieSBNYXJrdXMgS3VobikuCisKK0dldCB0aGUgbGF0ZXN0IHh0ZXJtIHZlcnNpb24gd2hpY2ggaGFzIG5vdyBVVEYtOCBzdXBwb3J0OgorCisJaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3h0ZXJtL3h0ZXJtLmh0bWwKKworQ29tcGlsZSBpdCB3aXRoICIuL2NvbmZpZ3VyZSAtLWVuYWJsZS13aWRlLWNoYXJzIDsgbWFrZSIKKworQWxzbyBnZXQgdGhlIElTTyAxMDY0Ni0xIHZlcnNpb24gb2YgdmFyaW91cyBmb250cywgd2hpY2ggaXMgYXZhaWxhYmxlIG9uCisKKwlodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvZG93bmxvYWQvdWNzLWZvbnRzLnRhci5negorCithbmQgaW5zdGFsbCB0aGUgZm9udCBhcyBkZXNjcmliZWQgaW4gdGhlIFJFQURNRSBmaWxlLgorCitOb3cgc3RhcnQgeHRlcm0gd2l0aCA+CisKKyAgeHRlcm0gLXU4IC1mbiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCitvciwgZm9yIGJpZ2dlciBjaGFyYWN0ZXI6ID4KKyAgeHRlcm0gLXU4IC1mbiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzEwNjQ2LTEKKworYW5kIHlvdSB3aWxsIGhhdmUgYSB3b3JraW5nIFVURi04IHRlcm1pbmFsIGVtdWxhdG9yLiBUcnkgYm90aCA+CisKKyAgIGNhdCB1dGYtOC1kZW1vLnR4dAorICAgdmltIHV0Zi04LWRlbW8udHh0CisKK3dpdGggdGhlIGRlbW8gdGV4dCB0aGF0IGNvbWVzIHdpdGggdWNzLWZvbnRzLnRhci5neiBpbiBvcmRlciB0byBzZWUKK3doZXRoZXIgdGhlcmUgYXJlIGFueSBwcm9ibGVtcyB3aXRoIFVURi04IGluIHlvdXIgeHRlcm0uCisKK0ZvciBWaW0geW91IG1heSBuZWVkIHRvIHNldCAnZW5jb2RpbmcnIHRvICJ1dGYtOCIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gIEZvbnRzIG9uIFgxMQkJCQkJKm1ieXRlLWZvbnRzLVgxMSoKKworVW5mb3J0dW5hdGVseSwgdXNpbmcgZm9udHMgaW4gWDExIGlzIGNvbXBsaWNhdGVkLiAgVGhlIG5hbWUgb2YgYSBzaW5nbGUtYnl0ZQorZm9udCBpcyBhIGxvbmcgc3RyaW5nLiAgRm9yIG11bHRpLWJ5dGUgZm9udHMgd2UgbmVlZCBzZXZlcmFsIG9mIHRoZXNlLi4uCisKK05vdGU6IE1vc3Qgb2YgdGhpcyBpcyBubyBsb25nZXIgcmVsZXZhbnQgZm9yIEdUSysgMi4gIFNlbGVjdGluZyBhIGZvbnQgdmlhCitpdHMgWExGRCBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmU7IHNlZSAnZ3VpZm9udCcgZm9yIGFuIGV4YW1wbGUgb2YgaG93IHRvCitzZXQgdGhlIGZvbnQuICBEbyB5b3Vyc2VsZiBhIGZhdm9yIGFuZCBpZ25vcmUgdGhlIHxYTEZEfCBhbmQgfHhmb250c2V0fAorc2VjdGlvbnMgYmVsb3cuCisKK0ZpcnN0IG9mIGFsbCwgVmltIG9ubHkgYWNjZXB0cyBmaXhlZC13aWR0aCBmb250cyBmb3IgZGlzcGxheWluZyB0ZXh0LiAgWW91CitjYW5ub3QgdXNlIHByb3BvcnRpb25hbGx5IHNwYWNlZCBmb250cy4gIFRoaXMgZXhjbHVkZXMgbWFueSBvZiB0aGUgYXZhaWxhYmxlCisoYW5kIG5pY2VyIGxvb2tpbmcpIGZvbnRzLiAgSG93ZXZlciwgZm9yIG1lbnVzIGFuZCB0b29sdGlwcyBhbnkgZm9udCBjYW4gYmUKK3VzZWQuCisKK05vdGUgdGhhdCBEaXNwbGF5IGFuZCBJbnB1dCBhcmUgaW5kZXBlbmRlbnQuICBJdCBpcyBwb3NzaWJsZSB0byBzZWUgeW91cgorbGFuZ3VhZ2UgZXZlbiB0aG91Z2ggeW91IGhhdmUgbm8gaW5wdXQgbWV0aG9kIGZvciBpdC4KKworWW91IHNob3VsZCBnZXQgYSBkZWZhdWx0IGZvbnQgZm9yIG1lbnVzIGFuZCB0b29sdGlwcyB0aGF0IHdvcmtzLCBidXQgaXQgbWlnaHQKK2JlIHVnbHkuICBSZWFkIHRoZSBmb2xsb3dpbmcgdG8gZmluZCBvdXQgaG93IHRvIHNlbGVjdCBhIGJldHRlciBmb250LgorCisKK1ggTE9HSUNBTCBGT05UIERFU0NSSVBUSU9OIChYTEZEKQorCQkJCQkJCSpYTEZEKgorWExGRCBpcyB0aGUgWCBmb250IG5hbWUgYW5kIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9udCBzaXplLAorY2hhcnNldCwgZXRjLiAgVGhlIG5hbWUgaXMgaW4gdGhpcyBmb3JtYXQ6CisKK0ZPVU5EUlktRkFNSUxZLVdFSUdIVC1TTEFOVC1XSURUSC1TVFlMRS1QSVhFTC1QT0lOVC1YLVktU1BBQ0UtQVZFLUNSLUNFCisKK0VhY2ggZmllbGQgbWVhbnM6CisKKy0gRk9VTkRSWTogIEZPVU5EUlkgZmllbGQuICBUaGUgY29tcGFueSB0aGF0IGNyZWF0ZWQgdGhlIGZvbnQuCistIEZBTUlMWTogICBGQU1JTFlfTkFNRSBmaWVsZC4gIEJhc2ljIGZvbnQgZmFtaWx5IG5hbWUuICAoaGVsdmV0aWNhLCBnb3RoaWMsCisJICAgIHRpbWVzLCBldGMpCistIFdFSUdIVDogICBXRUlHSFRfTkFNRSBmaWVsZC4gIEhvdyB0aGljayB0aGUgbGV0dGVycyBhcmUuICAobGlnaHQsIG1lZGl1bSwKKwkgICAgYm9sZCwgZXRjKQorLSBTTEFOVDogICAgU0xBTlQgZmllbGQuCisJCXI6ICBSb21hbiAobm8gc2xhbnQpCisJCWk6ICBJdGFsaWMKKwkJbzogIE9ibGlxdWUKKwkJcmk6IFJldmVyc2UgSXRhbGljCisJCXJvOiBSZXZlcnNlIE9ibGlxdWUKKwkJb3Q6IE90aGVyCisJCW51bWJlcjoJU2NhbGVkIGZvbnQKKy0gV0lEVEg6ICAgIFNFVFdJRFRIX05BTUUgZmllbGQuICBXaWR0aCBvZiBjaGFyYWN0ZXJzLiAgKG5vcm1hbCwgY29uZGVuc2VkLAorCSAgICBuYXJyb3csIGRvdWJsZSB3aWRlKQorLSBTVFlMRTogICAgQUREX1NUWUxFX05BTUUgZmllbGQuICBFeHRyYSBpbmZvIHRvIGRlc2NyaWJlIGZvbnQuICAoU2VyaWYsIFNhbnMKKwkgICAgU2VyaWYsIEluZm9ybWFsLCBEZWNvcmF0ZWQsIGV0YykKKy0gUElYRUw6ICAgIFBJWEVMX1NJWkUgZmllbGQuICBIZWlnaHQsIGluIHBpeGVscywgb2YgY2hhcmFjdGVycy4KKy0gUE9JTlQ6ICAgIFBPSU5UX1NJWkUgZmllbGQuICBUZW4gdGltZXMgaGVpZ2h0IG9mIGNoYXJhY3RlcnMgaW4gcG9pbnRzLgorLSBYOgkgICAgUkVTT0xVVElPTl9YIGZpZWxkLiAgWCByZXNvbHV0aW9uIChkb3RzIHBlciBpbmNoKS4KKy0gWToJICAgIFJFU09MVVRJT05fWSBmaWVsZC4gIFkgcmVzb2x1dGlvbiAoZG90cyBwZXIgaW5jaCkuCistIFNQQUNFOiAgICBTUEFDSU5HIGZpZWxkLgorCQlwOiAgUHJvcG9ydGlvbmFsCisJCW06ICBNb25vc3BhY2VkCisJCWM6ICBDaGFyQ2VsbAorLSBBVkU6CSAgICBBVkVSQUdFX1dJRFRIIGZpZWxkLiAgVGVuIHRpbWVzIGF2ZXJhZ2Ugd2lkdGggaW4gcGl4ZWxzLgorLSBDUjoJICAgIENIQVJTRVRfUkVHSVNUUlkgZmllbGQuICBUaGUgbmFtZSBvZiB0aGUgY2hhcnNldCBncm91cC4KKy0gQ0U6CSAgICBDSEFSU0VUX0VOQ09ESU5HIGZpZWxkLiAgVGhlIHJlc3Qgb2YgdGhlIGNoYXJzZXQgbmFtZS4gIEZvciBzb21lCisJICAgIGNoYXJzZXRzLCBzdWNoIGFzIEpJUyBYIDAyMDgsIGlmIHRoaXMgZmllbGQgaXMgMCwgY29kZSBwb2ludHMgaGFzCisJICAgIHRoZSBzYW1lIHZhbHVlIGFzIEdMLCBhbmQgR1IgaWYgMS4KKworRm9yIGV4YW1wbGUsIGluIGNhc2Ugb2YgYSAxNCBkb3RzIGZvbnQgY29ycmVzcG9uZGluZyB0byBKSVMgWCAwMjA4LCBpdCBpcword3JpdHRlbiBsaWtlOgorICAgIC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTEwLTEwMC0xMDAtYy0xNjAtamlzeDAyMDguMTk5MC0wCisKKworWCBGT05UU0VUCisJCQkJCQkqZm9udHNldCogKnhmb250c2V0KgorQSBzaW5nbGUtYnl0ZSBjaGFyc2V0IGlzIHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggb25lIGZvbnQuICBGb3IgbXVsdGktYnl0ZQorY2hhcnNldHMgYSBjb21iaW5hdGlvbiBvZiBmb250cyBpcyBvZnRlbiB1c2VkLiAgVGhpcyBtZWFucyB0aGF0IG9uZSBncm91cCBvZgorY2hhcmFjdGVycyBhcmUgdXNlZCBmcm9tIG9uZSBmb250IGFuZCBhbm90aGVyIGdyb3VwIGZyb20gYW5vdGhlciBmb250ICh3aGljaAorbWlnaHQgYmUgZG91YmxlIHdpZGUpLiAgVGhpcyBjb2xsZWN0aW9uIG9mIGZvbnRzIGlzIGNhbGxlZCBhIGZvbnRzZXQuCisKK1doaWNoIGZvbnRzIGFyZSByZXF1aXJlZCBpbiBhIGZvbnRzZXQgZGVwZW5kcyBvbiB0aGUgY3VycmVudCBsb2NhbGUuICBYCit3aW5kb3dzIG1haW50YWlucyBhIHRhYmxlIG9mIHdoaWNoIGdyb3VwcyBvZiBjaGFyYWN0ZXJzIGFyZSByZXF1aXJlZCBmb3IgYQorbG9jYWxlLiAgWW91IGhhdmUgdG8gc3BlY2lmeSBhbGwgdGhlIGZvbnRzIHRoYXQgYSBsb2NhbGUgcmVxdWlyZXMgaW4gdGhlCisnZ3VpZm9udHNldCcgb3B0aW9uLgorCitOT1RFOiBUaGUgZm9udHNldCBhbHdheXMgdXNlcyB0aGUgY3VycmVudCBsb2NhbGUsIGV2ZW4gdGhvdWdoICdlbmNvZGluZycgbWF5CitiZSBzZXQgdG8gdXNlIGEgZGlmZmVyZW50IGNoYXJzZXQuICBJbiB0aGF0IHNpdHVhdGlvbiB5b3UgbWlnaHQgd2FudCB0byB1c2UKKydndWlmb250JyBhbmQgJ2d1aWZvbnR3aWRlJyBpbnN0ZWFkIG9mICdndWlmb250c2V0Jy4KKworRXhhbXBsZToKKyAgICB8Y2hhcnNldHwgbGFuZ3VhZ2UJCSAgICAiZ3JvdXBzIG9mIGNoYXJhY3RlcnMiIH4KKyAgICBHQjIzMTIgICAgQ2hpbmVzZSAoc2ltcGxpZmllZCkgIElTTy04ODU5LTEgYW5kIEdCIDIzMTIKKyAgICBCaWc1ICAgICAgQ2hpbmVzZSAodHJhZGl0aW9uYWwpIElTTy04ODU5LTEgYW5kIEJpZzUKKyAgICBDTlMtMTE2NDMgQ2hpbmVzZSAodHJhZGl0aW9uYWwpIElTTy04ODU5LTEsIENOUyAxMTY0My0xIGFuZCBDTlMgMTE2NDMtMgorICAgIEVVQy1KUCAgICBKYXBhbmVzZQkJICAgIEpJUyBYIDAyMDEgYW5kIEpJUyBYIDAyMDgKKyAgICBFVUMtS1IgICAgS29yZWFuCQkgICAgSVNPLTg4NTktMSBhbmQgS1MgQyA1NjAxIChLUyBYIDEwMDEpCisKK1lvdSBjYW4gc2VhcmNoIGZvciBmb250cyB1c2luZyB0aGUgeGxzZm9udHMgY29tbWFuZC4gIEZvciBleGFtcGxlLCB3aGVuIHlvdSdyZQorc2VhcmNoaW5nIGZvciBhIGZvbnQgZm9yIEtTIEMgNTYwMTogPgorICAgIHhsc2ZvbnRzIHwgZ3JlcCBrc2M1NjAxCisKK1RoaXMgaXMgY29tcGxpY2F0ZWQgYW5kIGNvbmZ1c2luZy4gIFlvdSBtaWdodCB3YW50IHRvIGNvbnN1bHQgdGhlIFgtV2luZG93cworZG9jdW1lbnRhdGlvbiBpZiB0aGVyZSBpcyBzb21ldGhpbmcgeW91IGRvbid0IHVuZGVyc3RhbmQuCisKKwkJCQkJCSpiYXNlX2ZvbnRfbmFtZV9saXN0KgorV2hlbiB5b3UgaGF2ZSBmb3VuZCB0aGUgbmFtZXMgb2YgdGhlIGZvbnRzIHlvdSB3YW50IHRvIHVzZSwgeW91IG5lZWQgdG8gc2V0Cit0aGUgJ2d1aWZvbnRzZXQnIG9wdGlvbi4gIFlvdSBzcGVjaWZ5IHRoZSBsaXN0IGJ5IGNvbmNhdGVuYXRpbmcgdGhlIGZvbnQgbmFtZXMKK2FuZCBwdXR0aW5nIGEgY29tbWEgaW4gYmV0d2VlbiB0aGVtLgorCitGb3IgZXhhbXBsZSwgd2hlbiB5b3UgdXNlIHRoZSBqYV9KUC5ldWNKUCBsb2NhbGUsIHRoaXMgcmVxdWlyZXMgSklTIFggMDIwMQorYW5kIEpJUyBYIDAyMDguICBZb3UgY291bGQgc3VwcGx5IGEgbGlzdCBvZiBmb250cyB0aGF0IGV4cGxpY2l0bHkgc3BlY2lmaWVzCit0aGUgY2hhcnNldHMsIGxpa2U6ID4KKworIDpzZXQgZ3VpZm9udHNldD0tbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTE0MC1qaXN4MDIwOC4xOTgzLTAsCisJXC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtamlzeDAyMDEuMTk3Ni0wCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gc3VwcGx5IGEgYmFzZSBmb250IG5hbWUgbGlzdCB0aGF0IG9taXRzIHRoZSBjaGFyc2V0CituYW1lLCBsZXR0aW5nIFgtV2luZG93cyBzZWxlY3QgZm9udCBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciB0aGUgbG9jYWxlLiAgRm9yCitleGFtcGxlOiA+CisKKyA6c2V0IGd1aWZvbnRzZXQ9LW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy0xNDAsCisJXC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAKKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzdXBwbHkgYSBzaW5nbGUgYmFzZSBmb250IG5hbWUgdGhhdCBhbGxvd3MgWC1XaW5kb3dzIHRvCitzZWxlY3QgZnJvbSBhbGwgYXZhaWxhYmxlIGZvbnRzLiAgRm9yIGV4YW1wbGU6ID4KKworIDpzZXQgZ3VpZm9udHNldD0tbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LSoKKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5IGFsaWFzIG5hbWVzLiAgU2VlIHRoZSBmb250cy5hbGlhcyBmaWxlIGluIHRoZQorZm9udHMgZGlyZWN0b3J5IChlLmcuLCAvdXNyL1gxMVI2L2xpYi9YMTEvZm9udHMvKS4gIEZvciBleGFtcGxlOiA+CisKKyA6c2V0IGd1aWZvbnRzZXQ9azE0LHIxNAorPAorCQkJCQkJCSpFMjUzKgorTm90ZSB0aGF0IGluIEVhc3QgQXNpYW4gZm9udHMsIHRoZSBzdGFuZGFyZCBjaGFyYWN0ZXIgY2VsbCBpcyBzcXVhcmUuICBXaGVuCittaXhpbmcgYSBMYXRpbiBmb250IGFuZCBhbiBFYXN0IEFzaWFuIGZvbnQsIHRoZSBFYXN0IEFzaWFuIGZvbnQgd2lkdGggc2hvdWxkCitiZSB0d2ljZSB0aGUgTGF0aW4gZm9udCB3aWR0aC4KKworSWYgJ2d1aWZvbnRzZXQnIGlzIG5vdCBlbXB0eSwgdGhlICJmb250IiBhcmd1bWVudCBvZiB0aGUgfDpoaWdobGlnaHR8IGNvbW1hbmQKK2lzIGFsc28gaW50ZXJwcmV0ZWQgYXMgYSBmb250c2V0LiAgRm9yIGV4YW1wbGUsIHlvdSBzaG91bGQgdXNlIGZvcgoraGlnaGxpZ2h0aW5nOiA+CisJOmhpIENvbW1lbnQgZm9udD1lbmdsaXNoX2ZvbnQseW91cl9mb250CitJZiB5b3UgdXNlIGEgd3JvbmcgImZvbnQiIGFyZ3VtZW50IHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlLgorQWxzbyBtYWtlIHN1cmUgdGhhdCB5b3Ugc2V0ICdndWlmb250c2V0JyBiZWZvcmUgc2V0dGluZyBmb250cyBmb3IgaGlnaGxpZ2h0Citncm91cHMuCisKKworVVNJTkcgUkVTT1VSQ0UgRklMRVMKKworSW5zdGVhZCBvZiBzcGVjaWZ5aW5nICdndWlmb250c2V0JywgeW91IGNhbiBzZXQgWDExIHJlc291cmNlcyBhbmQgVmltIHdpbGwKK3BpY2sgdGhlbSB1cC4gIFRoaXMgaXMgb25seSBmb3IgcGVvcGxlIHdobyBrbm93IGhvdyBYIHJlc291cmNlIGZpbGVzIHdvcmsuCisKK0ZvciBNb3RpZiBhbmQgQXRoZW5hIGluc2VydCB0aGVzZSB0aHJlZSBsaW5lcyBpbiB5b3VyICRIT01FLy5YZGVmYXVsdHMgZmlsZToKKworCVZpbS5mb250OiB8YmFzZV9mb250X25hbWVfbGlzdHwKKwlWaW0qZm9udFNldDogfGJhc2VfZm9udF9uYW1lX2xpc3R8CisJVmltKmZvbnRMaXN0OiB5b3VyX2xhbmd1YWdlX2ZvbnQKKworTm90ZTogVmltLmZvbnQgaXMgZm9yIHRleHQgYXJlYS4KKyAgICAgIFZpbSpmb250U2V0IGlzIGZvciBtZW51LgorICAgICAgVmltKmZvbnRMaXN0IGlzIGZvciBtZW51IChmb3IgTW90aWYgR1VJKQorCitGb3IgZXhhbXBsZSwgd2hlbiB5b3UgYXJlIHVzaW5nIEphcGFuZXNlIGFuZCBhIDE0IGRvdHMgZm9udCwgPgorCisJVmltLmZvbnQ6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtKgorCVZpbSpmb250U2V0OiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LSoKKwlWaW0qZm9udExpc3Q6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtKgorPAorb3I6ID4KKworCVZpbSpmb250OiBrMTQscjE0CisJVmltKmZvbnRTZXQ6IGsxNCxyMTQKKwlWaW0qZm9udExpc3Q6IGsxNCxyMTQKKzwKK1RvIGhhdmUgdGhlbSB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseSB5b3Ugd2lsbCBoYXZlIHRvIGRvID4KKworCXhyZGIgLW1lcmdlIH4vLlhkZWZhdWx0cworCitPdGhlcndpc2UgeW91IHdpbGwgaGF2ZSB0byBzdG9wIGFuZCByZXN0YXJ0IHRoZSBYIHNlcnZlciBiZWZvcmUgdGhlIGNoYW5nZXMKK3Rha2UgZWZmZWN0LgorCisKK1RoZSBHVEsrIHZlcnNpb24gb2YgR1VJIFZpbSBkb2VzIG5vdCB1c2UgLlhkZWZhdWx0cywgdXNlIH4vLmd0a3JjIGluc3RlYWQuCitUaGUgZGVmYXVsdCBtb3N0bHkgd29ya3MgT0suICBCdXQgZm9yIHRoZSBtZW51cyB5b3UgbWlnaHQgaGF2ZSB0byBjaGFuZ2UKK2l0LiAgRXhhbXBsZTogPgorCisJc3R5bGUgImRlZmF1bHQiCisJeworCQlmb250c2V0PSItKi0qLW1lZGl1bS1yLW5vcm1hbC0tMTQtKi0qLSotYy0qLSotKiIKKwl9CisJd2lkZ2V0X2NsYXNzICIqIiBzdHlsZSAiZGVmYXVsdCIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiAgRm9udHMgb24gTVMtV2luZG93cwkJCQkqbWJ5dGUtZm9udHMtTVN3aW4qCisKK1RoZSBzaW1wbGVzdCBpcyB0byB1c2UgdGhlIGZvbnQgZGlhbG9nIHRvIHNlbGVjdCBmb250cyBhbmQgdHJ5IHRoZW0gb3V0LiAgWW91CitjYW4gZmluZCB0aGlzIGF0IHRoZSAiRWRpdC9TZWxlY3QgRm9udC4uLiIgbWVudS4gIE9uY2UgeW91IGZpbmQgYSBmb250IG5hbWUKK3RoYXQgd29ya3Mgd2VsbCB5b3UgY2FuIHVzZSB0aGlzIGNvbW1hbmQgdG8gc2VlIGl0cyBuYW1lOiA+CisKKwk6c2V0IGd1aWZvbnQKKworVGhlbiBhZGQgYSBjb21tYW5kIHRvIHlvdXIgfGd2aW1yY3wgZmlsZSB0byBzZXQgJ2d1aWZvbnQnOiA+CisKKwk6c2V0IGd1aWZvbnQ9Y291cmllcl9uZXc6aDEyCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gIElucHV0IG9uIFgxMQkJCQkqbWJ5dGUtWElNKgorCitYIElOUFVUIE1FVEhPRCAoWElNKSBCQUNLR1JPVU5ECQkJKlhJTSogKnhpbSogKngtaW5wdXQtbWV0aG9kKgorCitYSU0gaXMgYW4gaW50ZXJuYXRpb25hbCBpbnB1dCBtb2R1bGUgZm9yIFguICBUaGVyZSBhcmUgdHdvIGtpbmQgb2Ygc3RydWN0dXJlcywKK1hsaWIgdW5pdCB0eXBlIGFuZCB8SU0tc2VydmVyfCAoSW5wdXQtTWV0aG9kIHNlcnZlcikgdHlwZS4gIHxJTS1zZXJ2ZXJ8IHR5cGUKK2lzIHN1aXRhYmxlIGZvciBjb21wbGV4IGlucHV0LCBzdWNoIGFzIENKSy4KKworLSBJTS1zZXJ2ZXIKKwkJCQkJCQkqSU0tc2VydmVyKgorICBJbiB8SU0tc2VydmVyfCB0eXBlIGlucHV0IHN0cnVjdHVyZXMsIHRoZSBpbnB1dCBldmVudCBpcyBoYW5kbGVkIGJ5IGVpdGhlcgorICBvZiB0aGUgdHdvIHdheXM6IEZyb250RW5kIHN5c3RlbSBhbmQgQmFja0VuZCBzeXN0ZW0uICBJbiB0aGUgRnJvbnRFbmQKKyAgc3lzdGVtLCBpbnB1dCBldmVudHMgYXJlIHNuYXRjaGVkIGJ5IHRoZSB8SU0tc2VydmVyfCBmaXJzdCwgdGhlbiB8SU0tc2VydmVyfAorICBnaXZlIHRoZSBhcHBsaWNhdGlvbiB0aGUgcmVzdWx0IG9mIGlucHV0LiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBCYWNrRW5kCisgIHN5c3RlbSB3b3JrcyByZXZlcnNlIG9yZGVyLiAgTVMgV2luZG93cyBhZG9wdCBCYWNrRW5kIHN5c3RlbS4gIEluIFgsIG1vc3Qgb2YKKyAgfElNLXNlcnZlcnxzIGFkb3B0IEZyb250RW5kIHN5c3RlbS4gIFRoZSBkZW1lcml0IG9mIEJhY2tFbmQgc3lzdGVtIGlzIHRoZQorICBsYXJnZSBvdmVyaGVhZCBpbiBjb21tdW5pY2F0aW9uLCBidXQgaXQgcHJvdmlkZXMgc2FmZSBzeW5jaHJvbml6YXRpb24gd2l0aAorICBubyByZXN0cmljdGlvbnMgb24gYXBwbGljYXRpb25zLgorCisgIEZvciBleGFtcGxlLCB0aGVyZSBhcmUgeHdubW8gYW5kIGtpbnB1dDIgSmFwYW5lc2UgfElNLXNlcnZlcnwsIGJvdGggYXJlCisgIEZyb250RW5kIHN5c3RlbS4gIFh3bm1vIGlzIGRpc3RyaWJ1dGVkIHdpdGggV25uIChzZWUgYmVsb3cpLCBraW5wdXQyIGNhbiBiZQorICBmb3VuZCBhdDogZnRwOi8vZnRwLnNyYS5jby5qcC9wdWIveDExL2tpbnB1dDIvCisKKyAgRm9yIENoaW5lc2UsIHRoZXJlJ3MgYSBncmVhdCBYSU0gc2VydmVyIG5hbWVkICJ4Y2luIiwgeW91IGNhbiBpbnB1dCBib3RoCisgIFRyYWRpdGlvbmFsIGFuZCBTaW1wbGlmaWVkIENoaW5lc2UgY2hhcmFjdGVycy4gIEFuZCBpdCBjYW4gYWNjZXB0IG90aGVyCisgIGxvY2FsZSBpZiB5b3UgbWFrZSBhIGNvcnJlY3QgaW5wdXQgdGFibGUuICBYY2luIGNhbiBiZSBmb3VuZCBhdDoKKyAgaHR0cDovL3hjaW4ubGludXgub3JnLnR3LworCistIENvbnZlcnNpb24gU2VydmVyCisJCQkJCQkJKmNvbnZlcnNpb24tc2VydmVyKgorICBTb21lIHN5c3RlbSBuZWVkcyBhZGRpdGlvbmFsIHNlcnZlcjogY29udmVyc2lvbiBzZXJ2ZXIuICBNb3N0IG9mIEphcGFuZXNlCisgIHxJTS1zZXJ2ZXJ8cyBuZWVkIGl0LCBLYW5hLUthbmppIGNvbnZlcnNpb24gc2VydmVyLiAgRm9yIENoaW5lc2UgaW5wdXR0aW5nLAorICBpdCBkZXBlbmRzIG9uIHRoZSBtZXRob2Qgb2YgaW5wdXR0aW5nLCBpbiBzb21lIG1ldGhvZHMsIFBpbllpbiBvciBaaHVZaW4gdG8KKyAgSGFuWmkgY29udmVyc2lvbiBzZXJ2ZXIgaXMgbmVlZGVkLiAgRm9yIEtvcmVhbiBpbnB1dHRpbmcsIGlmIHlvdSB3YW50IHRvCisgIGlucHV0IEhhbmphLCBIYW5ndWwtSGFuamEgY29udmVyc2lvbiBzZXJ2ZXIgaXMgbmVlZGVkLgorCisgIEZvciBleGFtcGxlLCB0aGUgSmFwYW5lc2UgaW5wdXR0aW5nIHByb2Nlc3MgaXMgZGl2aWRlZCBpbnRvIDIgc3RlcHMuICBGaXJzdAorICB3ZSBwcmUtaW5wdXQgSGlyYS1nYW5hLCBzZWNvbmQgS2FuYS1LYW5qaSBjb252ZXJzaW9uLiAgVGhlcmUgYXJlIHNvIG1hbnkKKyAgS2FuamkgY2hhcmFjdGVycyAoNjM0OSBLYW5qaSBjaGFyYWN0ZXJzIGFyZSBkZWZpbmVkIGluIEpJUyBYIDAyMDgpIGFuZCB0aGUKKyAgbnVtYmVyIG9mIEhpcmEtZ2FuYSBjaGFyYWN0ZXJzIGFyZSA3Ni4gIFNvLCBmaXJzdCwgd2UgcHJlLWlucHV0IHRleHQgYXMKKyAgcHJvbm91bmNlZCBpbiBIaXJhLWdhbmEsIHNlY29uZCwgd2UgY29udmVydCBIaXJhLWdhbmEgdG8gS2Fuamkgb3IgS2F0YS1LYW5hLAorICBpZiBuZWVkZWQuICBUaGVyZSBhcmUgc29tZSBLYW5hLUthbmppIGNvbnZlcnNpb24gc2VydmVyOiBqc2VydmVyCisgIChkaXN0cmlidXRlZCB3aXRoIFdubiwgc2VlIGJlbG93KSBhbmQgY2FubmEuIENhbm5hIGNvdWxkIGJlIGZvdW5kIGF0OgorICBmdHA6Ly9mdHAubmVjLmNvLmpwL3B1Yi9DYW5uYS8gKG5vIGxvbmdlciB3b3JrcykuCisKK1RoZXJlIGlzIGEgZ29vZCBpbnB1dCBzeXN0ZW06IFdubjQuMi4gIFdubiA0LjIgY29udGFpbnMsCisgICAgeHdubW8gKHxJTS1zZXJ2ZXJ8KQorICAgIGpzZXJ2ZXIgKEphcGFuZXNlIEthbmEtS2FuamkgY29udmVyc2lvbiBzZXJ2ZXIpCisgICAgY3NlcnZlciAoQ2hpbmVzZSBQaW5ZaW4gb3IgWmh1WWluIHRvIHNpbXBsaWZpZWQgSGFuWmkgY29udmVyc2lvbiBzZXJ2ZXIpCisgICAgdHNlcnZlciAoQ2hpbmVzZSBQaW5ZaW4gb3IgWmh1WWluIHRvIHRyYWRpdGlvbmFsIEhhblppIGNvbnZlcnNpb24gc2VydmVyKQorICAgIGtzZXJ2ZXIgKEhhbmd1bC1IYW5qYSBjb252ZXJzaW9uIHNlcnZlcikKK1dubiA0LjIgZm9yIHNldmVyYWwgc3lzdGVtcyBjYW4gYmUgZm91bmQgYXQgdmFyaW91cyBwbGFjZXMgb24gdGhlIGludGVybmV0LgorVXNlIHRoZSBSUE0gb3IgcG9ydCBmb3IgeW91ciBzeXN0ZW0uCisKKworLSBJbnB1dCBTdHlsZQorCQkJCQkJCSp4aW0taW5wdXQtc3R5bGUqCisgIFdoZW4gaW5wdXR0aW5nIENKSywgdGhlcmUgYXJlIGZvdXIgYXJlYXM6CisgICAgICAxLiBUaGUgYXJlYSB0byBkaXNwbGF5IG9mIHRoZSBpbnB1dCB3aGlsZSBpdCBpcyBiZWluZyBjb21wb3NlZAorICAgICAgMi4gVGhlIGFyZWEgdG8gZGlzcGxheSB0aGUgY3VycmVudGx5IGFjdGl2ZSBpbnB1dCBtb2RlLgorICAgICAgMy4gVGhlIGFyZWEgdG8gZGlzcGxheSB0aGUgbmV4dCBjYW5kaWRhdGUgZm9yIHRoZSBzZWxlY3Rpb24uCisgICAgICA0LiBUaGUgYXJlYSB0byBkaXNwbGF5IG90aGVyIHRvb2xzLgorCisgIFRoZSB0aGlyZCBhcmVhIGlzIG5lZWRlZCB3aGVuIGNvbnZlcnRpbmcuICBGb3IgZXhhbXBsZSwgaW4gSmFwYW5lc2UKKyAgaW5wdXR0aW5nLCBtdWx0aXBsZSBLYW5qaSBjaGFyYWN0ZXJzIGNvdWxkIGhhdmUgdGhlIHNhbWUgcHJvbnVuY2lhdGlvbiwgc28KKyAgYSBzZXF1ZW5jZSBvZiBIaXJhLWdhbmEgY2hhcmFjdGVycyBjb3VsZCBtYXAgdG8gYSBkaXN0aW5jdCBzZXF1ZW5jZSBvZiBLYW5qaQorICBjaGFyYWN0ZXJzLgorCisgIFRoZSBmaXJzdCBhbmQgc2Vjb25kIGFyZWFzIGFyZSBkZWZpbmVkIGluIGludGVybmF0aW9uYWwgaW5wdXQgb2YgWCB3aXRoIHRoZQorICBuYW1lcyBvZiAiUHJlZWRpdCBBcmVhIiwgIlN0YXR1cyBBcmVhIiByZXNwZWN0aXZlbHkuICBUaGUgdGhpcmQgYW5kIGZvdXJ0aAorICBhcmVhcyBhcmUgbm90IGRlZmluZWQgYW5kIGFyZSBsZWZ0IHRvIGJlIG1hbmFnZWQgYnkgdGhlIHxJTS1zZXJ2ZXJ8LiAgSW4gdGhlCisgIGludGVybmF0aW9uYWwgaW5wdXQsIGZvdXIgaW5wdXQgc3R5bGVzIGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nIGNvbWJpbmF0aW9ucworICBvZiBQcmVlZGl0IEFyZWEgYW5kIFN0YXR1cyBBcmVhOiB8T25UaGVTcG90fCwgfE9mZlRoZVNwb3R8LCB8T3ZlclRoZVNwb3R8CisgIGFuZCB8Um9vdHwuCisKKyAgQ3VycmVudGx5LCBHVUkgVmltIHN1cHBvcnQgdGhyZWUgc3R5bGUsIHxPdmVyVGhlU3BvdHwsIHxPZmZUaGVTcG90fCBhbmQKKyAgfFJvb3R8LgorCisqLiAgb24tdGhlLXNwb3QJCQkJCQkqT25UaGVTcG90KgorICAgIFByZWVkaXQgQXJlYSBhbmQgU3RhdHVzIEFyZWEgYXJlIHBlcmZvcm1lZCBieSB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGluCisgICAgdGhlIGFyZWEgb2YgYXBwbGljYXRpb24uICBUaGUgY2xpZW50IGFwcGxpY2F0aW9uIGlzIGRpcmVjdGVkIGJ5IHRoZQorICAgIHxJTS1zZXJ2ZXJ8IHRvIGRpc3BsYXkgYWxsIHByZS1lZGl0IGRhdGEgYXQgdGhlIGxvY2F0aW9uIG9mIHRleHQKKyAgICBpbnNlcnRpb24uIFRoZSBjbGllbnQgcmVnaXN0ZXJzIGNhbGxiYWNrcyBpbnZva2VkIGJ5IHRoZSBpbnB1dCBtZXRob2QKKyAgICBkdXJpbmcgcHJlLWVkaXRpbmcuCisqLiAgb3Zlci10aGUtc3BvdAkJCQkJKk92ZXJUaGVTcG90KgorICAgIFN0YXR1cyBBcmVhIGlzIGNyZWF0ZWQgaW4gYSBmaXhlZCBwb3NpdGlvbiB3aXRoaW4gdGhlIGFyZWEgb2YgYXBwbGljYXRpb24sCisgICAgaW4gY2FzZSBvZiBWaW0sIHRoZSBwb3NpdGlvbiBpcyB0aGUgYWRkaXRpb25hbCBzdGF0dXMgbGluZS4gIFByZWVkaXQgQXJlYQorICAgIGlzIG1hZGUgYXQgcHJlc2VudCBpbnB1dCBwb3NpdGlvbiBvZiBhcHBsaWNhdGlvbi4gIFRoZSBpbnB1dCBtZXRob2QKKyAgICBkaXNwbGF5cyBwcmUtZWRpdCBkYXRhIGluIGEgd2luZG93IHdoaWNoIGl0IGJyaW5ncyB1cCBkaXJlY3RseSBvdmVyIHRoZQorICAgIHRleHQgaW5zZXJ0aW9uIHBvc2l0aW9uLgorKi4gIG9mZi10aGUtc3BvdAkJCQkJKk9mZlRoZVNwb3QqCisgICAgUHJlZWRpdCBBcmVhIGFuZCBTdGF0dXMgQXJlYSBhcmUgcGVyZm9ybWVkIGluIHRoZSBhcmVhIG9mIGFwcGxpY2F0aW9uLCBpbgorICAgIGNhc2Ugb2YgVmltLCB0aGUgYXJlYSBpcyBhZGRpdGlvbmFsIHN0YXR1cyBsaW5lLiAgVGhlIGNsaWVudCBhcHBsaWNhdGlvbgorICAgIHByb3ZpZGVzIGRpc3BsYXkgd2luZG93cyBmb3IgdGhlIHByZS1lZGl0IGRhdGEgdG8gdGhlIGlucHV0IG1ldGhvZCB3aGljaAorICAgIGRpc3BsYXlzIGludG8gdGhlbSBkaXJlY3RseS4KKyouICByb290LXdpbmRvdwkJCQkJCSpSb290KgorICAgIFByZWVkaXQgQXJlYSBhbmQgU3RhdHVzIEFyZWEgYXJlIG91dHNpZGUgb2YgdGhlIGFwcGxpY2F0aW9uLiAgVGhlIGlucHV0CisgICAgbWV0aG9kIGRpc3BsYXlzIGFsbCBwcmUtZWRpdCBkYXRhIGluIGEgc2VwYXJhdGUgYXJlYSBvZiB0aGUgc2NyZWVuIGluIGEKKyAgICB3aW5kb3cgc3BlY2lmaWMgdG8gdGhlIGlucHV0IG1ldGhvZC4KKworCitVU0lORyBYSU0JCQkqbXVsdGlieXRlLWlucHV0KiAqRTI4NCogKkUyODYqICpFMjg3KiAqRTI4OCoKKwkJCQkqRTI4NSogKkUyOTEqICpFMjkyKiAqRTI5MCogKkUyODkqCisKK05vdGUgdGhhdCBEaXNwbGF5IGFuZCBJbnB1dCBhcmUgaW5kZXBlbmRlbnQuICBJdCBpcyBwb3NzaWJsZSB0byBzZWUgeW91cgorbGFuZ3VhZ2UgZXZlbiB0aG91Z2ggeW91IGhhdmUgbm8gaW5wdXQgbWV0aG9kIGZvciBpdC4gIEJ1dCB3aGVuIHlvdXIgRGlzcGxheQorbWV0aG9kIGRvZXNuJ3QgbWF0Y2ggeW91ciBJbnB1dCBtZXRob2QsIHRoZSB0ZXh0IHdpbGwgYmUgZGlzcGxheWVkIHdyb25nLgorCisJTm90ZTogWW91IGNhbiBub3QgdXNlIElNIHVubGVzcyB5b3Ugc3BlY2lmeSAnZ3VpZm9udHNldCcuCisJICAgICAgVGhlcmVmb3JlLCBMYXRpbiB1c2VycywgeW91IGhhdmUgdG8gYWxzbyB1c2UgJ2d1aWZvbnRzZXQnCisJICAgICAgaWYgeW91IHVzZSBJTS4KKworVG8gaW5wdXQgeW91ciBsYW5ndWFnZSB5b3Ugc2hvdWxkIHJ1biB0aGUgfElNLXNlcnZlcnwgd2hpY2ggc3VwcG9ydHMgeW91cgorbGFuZ3VhZ2UgYW5kIHxjb252ZXJzaW9uLXNlcnZlcnwgaWYgbmVlZGVkLgorCitUaGUgbmV4dCAzIGxpbmVzIHNob3VsZCBiZSBwdXQgaW4geW91ciB+Ly5YZGVmYXVsdHMgZmlsZS4gIFRoZXkgYXJlIGNvbW1vbiBmb3IKK2FsbCBYIGFwcGxpY2F0aW9ucyB3aGljaCB1c2VzIHxYSU18LiAgSWYgeW91IGFscmVhZHkgdXNlIHxYSU18LCB5b3UgY2FuIHNraXAKK3RoaXMuID4KKworCSppbnRlcm5hdGlvbmFsOiBUcnVlCisJKi5pbnB1dE1ldGhvZDogeW91cl9pbnB1dF9zZXJ2ZXJfbmFtZQorCSoucHJlZWRpdFR5cGU6IHlvdXJfaW5wdXRfc3R5bGUKKzwKK2lucHV0X3NlcnZlcl9uYW1lCWlzIHlvdXIgfElNLXNlcnZlcnwgbmFtZSAoY2hlY2sgeW91ciB8SU0tc2VydmVyfAorCQkJbWFudWFsKS4KK3lvdXJfaW5wdXRfc3R5bGUJaXMgb25lIG9mIHxPdmVyVGhlU3BvdHwsIHxPZmZUaGVTcG90fCwgfFJvb3R8LiAgU2VlCisJCQlhbHNvIHx4aW0taW5wdXQtc3R5bGV8LgorCisqaW50ZXJuYXRpb25hbCBtYXkgbm90IG5lY2Vzc2FyeSBpZiB5b3UgdXNlIFgxMVI2LgorKi5pbnB1dE1ldGhvZCBhbmQgKi5wcmVlZGl0VHlwZSBhcmUgb3B0aW9uYWwgaWYgeW91IHVzZSBYMTFSNi4KKworRm9yIGV4YW1wbGUsIHdoZW4geW91IGFyZSB1c2luZyBraW5wdXQyIGFzIHxJTS1zZXJ2ZXJ8LCA+CisKKwkqaW50ZXJuYXRpb25hbDogVHJ1ZQorCSouaW5wdXRNZXRob2Q6IGtpbnB1dDIKKwkqLnByZWVkaXRUeXBlOiBPdmVyVGhlU3BvdAorPAorV2hlbiB1c2luZyB8T3ZlclRoZVNwb3R8LCBHVUkgVmltIGFsd2F5cyBjb25uZWN0cyB0byB0aGUgSU0gU2VydmVyIGV2ZW4gaW4KK05vcm1hbCBtb2RlLCBzbyB5b3UgY2FuIGlucHV0IHlvdXIgbGFuZ3VhZ2Ugd2l0aCBjb21tYW5kcyBsaWtlICJmIiBhbmQgInIiLgorQnV0IHdoZW4gdXNpbmcgb25lIG9mIHRoZSBvdGhlciB0d28gbWV0aG9kcywgR1VJIFZpbSBjb25uZWN0cyB0byB0aGUgSU0gU2VydmVyCitvbmx5IGlmIGl0IGlzIG5vdCBpbiBOb3JtYWwgbW9kZS4KKworSWYgeW91ciBJTSBTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB8T3ZlclRoZVNwb3R8LCBhbmQgaWYgeW91IHdhbnQgdG8gdXNlIHlvdXIKK2xhbmd1YWdlIHdpdGggc29tZSBOb3JtYWwgbW9kZSBjb21tYW5kIGxpa2UgImYiIG9yICJyIiwgdGhlbiB5b3Ugc2hvdWxkIHVzZSBhCitsb2NhbGl6ZWQgeHRlcm0gIG9yIGFuIHh0ZXJtIHdoaWNoIHN1cHBvcnRzIHxYSU18CisKK0lmIG5lZWRlZCwgeW91IGNhbiBzZXQgdGhlIFhNT0RJRklFUlMgZW52aXJvbm1lbnQgdmFyaWFibGU6CisKKwlzaDogIGV4cG9ydCBYTU9ESUZJRVJTPSJAaW09aW5wdXRfc2VydmVyX25hbWUiCisJY3NoOiBzZXRlbnYgWE1PRElGSUVSUyAiQGltPWlucHV0X3NlcnZlcl9uYW1lIgorCitGb3IgZXhhbXBsZSwgd2hlbiB5b3UgYXJlIHVzaW5nIGtpbnB1dDIgYXMgfElNLXNlcnZlcnwgYW5kIHNoLCA+CisKKwlleHBvcnQgWE1PRElGSUVSUz0iQGltPWtpbnB1dDIiCis8CisKK0ZVTExZIENPTlRST0xMRUQgWElNCisKK1lvdSBjYW4gZnVsbHkgY29udHJvbCBYSU0sIGxpa2Ugd2l0aCBJTUUgb2YgTVMtV2luZG93cyAoc2VlIHxtdWx0aWJ5dGUtaW1lfCkuCitUaGlzIGlzIGN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgdGhlIEdUSyBHVUkuCisKK0JlZm9yZSB1c2luZyBmdWxseSBjb250cm9sbGVkIFhJTSwgb25lIHNldHRpbmcgaXMgcmVxdWlyZWQuICBTZXQgdGhlCisnaW1hY3RpdmF0ZWtleScgb3B0aW9uIHRvIHRoZSBrZXkgdGhhdCBpcyB1c2VkIGZvciB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgaW5wdXQKK21ldGhvZC4gIEZvciBleGFtcGxlLCB3aGVuIHlvdSBhcmUgdXNpbmcga2lucHV0MiArIGNhbm5hIGFzIElNIFNlcnZlciwgdGhlCithY3RpdmF0aW9uIGtleSBpcyBwcm9iYWJseSBTaGlmdCtTcGFjZTogPgorCisJOnNldCBpbWFjdGl2YXRla2V5PVMtc3BhY2UKKworU2VlICdpbWFjdGl2YXRla2V5JyBmb3IgdGhlIGZvcm1hdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiAgSW5wdXQgb24gTVMtV2luZG93cwkJCQkJKm1ieXRlLUlNRSoKKworKFdpbmRvd3MgSU1FIHN1cHBvcnQpCQkJCSptdWx0aWJ5dGUtaW1lKiAqSU1FKgorCit7b25seSB3b3JrcyBXaW5kb3dzIEdVSSBhbmQgY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlX2ltZXwgZmVhdHVyZX0KKworVG8gaW5wdXQgbXVsdGlieXRlIGNoYXJhY3RlcnMgb24gV2luZG93cywgeW91IGhhdmUgdG8gdXNlIElucHV0IE1ldGhvZCBFZGl0b3IKKyhJTUUpLiAgSW4gcHJvY2VzcyBvZiB5b3VyIGVkaXRpbmcgdGV4dCwgeW91IG11c3Qgc3dpdGNoIHN0YXR1cyAob24vb2ZmKSBvZgorSU1FIG1hbnkgbWFueSBtYW55IHRpbWVzLiAgQmVjYXVzZSBJTUUgd2l0aCBzdGF0dXMgb24gaXMgaG9va2luZyBhbGwgb2YgeW91cgora2V5IGlucHV0cywgeW91IGNhbm5vdCBpbnB1dCAnaicsICdrJywgb3IgYWxtb3N0IGFsbCBvZiBrZXlzIHRvIFZpbSBkaXJlY3RseS4KKworVGhpcyB8K211bHRpX2J5dGVfaW1lfCBmZWF0dXJlIGhlbHAgdGhpcy4gIEl0IHJlZHVjZSB0aW1lcyBvZiBzd2l0Y2ggc3RhdHVzIG9mCitJTUUgbWFudWFsbHkuICBJbiBub3JtYWwgbW9kZSwgdGhlcmUgYXJlIGFsbW9zdCBubyBuZWVkIHdvcmtpbmcgSU1FLCBldmVuCitlZGl0aW5nIG11bHRpYnl0ZSB0ZXh0LiAgU28gZXhpdGluZyBpbnNlcnQgbW9kZSB3aXRoIEVTQywgVmltIG1lbW9yaXplIGxhc3QKK3N0YXR1cyBvZiBJTUUgYW5kIGZvcmNlIHR1cm4gb2ZmIElNRS4gIFdoZW4gcmUtZW50ZXIgaW5zZXJ0IG1vZGUsIFZpbSByZXZlcnQKK0lNRSBzdGF0dXMgdG8gdGhhdCBtZW1vcml6ZWQgYXV0b21hdGljYWxseS4KKworVGhpcyB3b3JrcyBvbiBub3Qgb25seSBpbnNlcnQtbm9ybWFsIG1vZGUsIGJ1dCBhbHNvIHNlYXJjaC1jb21tYW5kIGlucHV0IGFuZAorcmVwbGFjZSBtb2RlLgorVGhlIG9wdGlvbnMgJ2ltaW5zZXJ0JywgJ2ltc2VhcmNoJyBhbmQgJ2ltY21kbGluZScgY2FuIGJlIHVzZWQgdG8gY2hvc2UKK3RoZSBkaWZmZXJlbnQgaW5wdXQgbWVkaG9kcyBvciBkaXNhYmxlIHRoZW0gdGVtcG9yYXJpbHkuCisKK1dIQVQgSVMgSU1FCisgICAgSU1FIGlzIGEgcGFydCBvZiBFYXN0IGFzaWFuIHZlcnNpb24gV2luZG93cy4gIFRoYXQgaGVscHMgeW91IHRvIGlucHV0CisgICAgbXVsdGlieXRlIGNoYXJhY3Rlci4gIEVuZ2xpc2ggYW5kIG90aGVyIGxhbmd1YWdlIHZlcnNpb24gV2luZG93cyBkb2VzIG5vdAorICAgIGhhdmUgYW55IElNRS4gIChBbHNvIHRoZXJlIGFyZSBubyBuZWVkIHVzdWFsbHkuKSBCdXQgdGhlcmUgaXMgb25lIHRoYXQKKyAgICBjYWxsZWQgTWljcm9zb2Z0IEdsb2JhbCBJTUUuICBHbG9iYWwgSU1FIGlzIGEgcGFydCBvZiBJbnRlcm5ldCBFeHBsb3JlcgorICAgIDQuMCBvciBhYm92ZS4gIFlvdSBjYW4gZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgR2xvYmFsIElNRSwgYXQgYmVsb3cKKyAgICBVUkwuCisKK1dIQVQgSVMgR0xPQkFMIElNRQkJCQkJKmdsb2JhbC1pbWUqCisgICAgR2xvYmFsIElNRSBtYWtlcyBjYXBhYmlsaXR5IHRvIGlucHV0IENoaW5lc2UsIEphcGFuZXNlLCBhbmQgS29yZWFuIHRleHQKKyAgICBpbnRvIFZpbSBidWZmZXIgb24gYW55IGxhbmd1YWdlIHZlcnNpb24gb2YgV2luZG93cyA5OCwgV2luZG93cyA5NSwgYW5kCisgICAgV2luZG93cyBOVCA0LjAuCisgICAgT24gV2luZG93cyAyMDAwIGFuZCBYUCBpdCBzaG91bGQgd29yayBhcyB3ZWxsICh3aXRob3V0IGRvd25sb2FkaW5nKS4gIE9uCisgICAgV2luZG93cyAyMDAwIFByb2Zlc3Npb25hbCwgR2xvYmFsIElNRSBpcyBidWlsdCBpbiwgYW5kIHRoZSBJbnB1dCBMb2NhbGVzCisgICAgY2FuIGJlIGFkZGVkIHRocm91Z2ggQ29udHJvbCBQYW5lbC9SZWdpb25hbCBPcHRpb25zL0lucHV0IExvY2FsZXMuCisgICAgUGxlYXNlIHNlZSBiZWxvdyBVUkwgZm9yIGRldGFpbCBvZiBHbG9iYWwgSU1FLiAgWW91IGNhbiBhbHNvIGZpbmQgdmFyaW91cworICAgIGxhbmd1YWdlIHZlcnNpb24gb2YgR2xvYmFsIElNRSBhdCBzYW1lIHBsYWNlLgorCisgICAgLSBHbG9iYWwgSU1FIGRldGFpbGVkIGluZm9ybWF0aW9uLgorCWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS93aW5kb3dzL2llL2ZlYXR1cmVzL2ltZS5hc3AKKworICAgIC0gQWN0aXZlIElucHV0IE1ldGhvZCBNYW5hZ2VyIChHbG9iYWwgSU1FKQorCWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vd29ya3Nob3AvbWlzYy9BSU1NL2FpbW0uYXNwCisKKyAgICBTdXBwb3J0IEdsb2JhbCBJTUUgaXMgYSBleHBlcmltZW50YWwgZmVhdHVyZS4KKworTk9URTogRm9yIElNRSB0byB3b3JrIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgaW5wdXQgbG9jYWxlcyBvZiB5b3VyIGxhbmd1YWdlCithcmUgYWRkZWQgdG8geW91ciBzeXN0ZW0uICBUaGUgZXhhY3QgbG9jYXRpb24gb2YgdGhpcyBkZXBlbmRzIG9uIHRoZSB2ZXJzaW9uCitvZiBXaW5kb3dzIHlvdSB1c2UuICBGb3IgZXhhbXBsZSwgb24gbXkgVzJQIGJveDoKKzEuIENvbnRyb2wgUGFuZWwKKzIuIFJlZ2lvbmFsIE9wdGlvbnMKKzMuIElucHV0IExvY2FsZXMgVGFiCis0LiBBZGQgSW5zdGFsbGVkIGlucHV0IGxvY2FsZXMgLT4gQ2hpbmVzZShQUkMpCisgICBUaGUgZGVmYXVsdCBpcyBzdGlsbCBFbmdsaXNoIChVbml0ZWQgU3RhdGVkKQorCisKK0N1cnNvciBjb2xvciB3aGVuIElNRSBvciBYSU0gaXMgb24JCQkJKkN1cnNvcklNKgorICAgIFRoZXJlIGlzIGEgbGl0dGxlIGN1dGUgZmVhdHVyZSBmb3IgSU1FLiAgQ3Vyc29yIGNhbiBpbmRpY2F0ZSBzdGF0dXMgb2YgSU1FCisgICAgYnkgY2hhbmdpbmcgaXRzIGNvbG9yLiAgVXN1YWxseSBzdGF0dXMgb2YgSU1FIHdhcyBpbmRpY2F0ZWQgYnkgbGl0dGxlIGljb24KKyAgICBhdCBhIGNvcm5lciBvZiBkZXNrdG9wIChvciB0YXNrYmFyKS4gIEl0IGlzIG5vdCBlYXN5IHRvIHZlcmlmeSBzdGF0dXMgb2YKKyAgICBJTUUuICBCdXQgdGhpcyBmZWF0dXJlIGhlbHAgdGhpcy4KKyAgICBUaGlzIHdvcmtzIGluIHRoZSBzYW1lIHdheSB3aGVuIHVzaW5nIFhJTS4KKworICAgIFlvdSBjYW4gc2VsZWN0IGN1cnNvciBjb2xvciB3aGVuIHN0YXR1cyBpcyBvbiBieSB1c2luZyBoaWdobGlnaHQgZ3JvdXAKKyAgICBDdXJzb3JJTS4gIEZvciBleGFtcGxlLCBhZGQgdGhlc2UgbGluZXMgdG8geW91ciBfZ3ZpbXJjOiA+CisKKwlpZiBoYXMoJ211bHRpX2J5dGVfaW1lJykKKwkgICAgaGlnaGxpZ2h0IEN1cnNvciBndWlmZz1OT05FIGd1aWJnPUdyZWVuCisJICAgIGhpZ2hsaWdodCBDdXJzb3JJTSBndWlmZz1OT05FIGd1aWJnPVB1cnBsZQorCWVuZGlmCis8CisgICAgQ3Vyc29yIGNvbG9yIHdpdGggb2ZmIElNRSBpcyBncmVlbi4gIEFuZCBwdXJwbGUgY3Vyc29yIGluZGljYXRlcyB0aGF0CisgICAgc3RhdHVzIGlzIG9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzkuIElucHV0IHdpdGggYSBrZXltYXAJCQkJCSptYnl0ZS1rZXltYXAqCisKK1doZW4gdGhlIGtleWJvYXJkIGRvZXNuJ3QgcHJvZHVjZSB0aGUgY2hhcmFjdGVycyB5b3Ugd2FudCB0byBlbnRlciBpbiB5b3VyCit0ZXh0LCB5b3UgY2FuIHVzZSB0aGUgJ2tleW1hcCcgb3B0aW9uLiAgVGhpcyB3aWxsIHRyYW5zbGF0ZSBvbmUgb3IgbW9yZQorKEVuZ2xpc2gpIGNoYXJhY3RlcnMgdG8gYW5vdGhlciAobm9uLUVuZ2xpc2gpIGNoYXJhY3Rlci4gIFRoaXMgb25seSBoYXBwZW5zCit3aGVuIHR5cGluZyB0ZXh0LCBub3Qgd2hlbiB0eXBpbmcgVmltIGNvbW1hbmRzLiAgVGhpcyBhdm9pZHMgaGF2aW5nIHRvIHN3aXRjaAorYmV0d2VlbiB0d28ga2V5Ym9hcmQgc2V0dGluZ3MuCisKK1RoZSB2YWx1ZSBvZiB0aGUgJ2tleW1hcCcgb3B0aW9uIHNwZWNpZmllcyBhIGtleW1hcCBmaWxlIHRvIHVzZS4gIFRoZSBuYW1lIG9mCit0aGlzIGZpbGUgaXMgb25lIG9mIHRoZXNlIHR3bzoKKworCWtleW1hcC97a2V5bWFwfV97ZW5jb2Rpbmd9LnZpbQorCWtleW1hcC97a2V5bWFwfS52aW0KKworSGVyZSB7a2V5bWFwfSBpcyB0aGUgdmFsdWUgb2YgdGhlICdrZXltYXAnIG9wdGlvbiBhbmQge2VuY29kaW5nfSBvZiB0aGUKKydlbmNvZGluZycgb3B0aW9uLiAgVGhlIGZpbGUgbmFtZSB3aXRoIHRoZSB7ZW5jb2Rpbmd9IGluY2x1ZGVkIGlzIHRyaWVkIGZpcnN0LgorCisncnVudGltZXBhdGgnIGlzIHVzZWQgdG8gZmluZCB0aGVzZSBmaWxlcy4gIFRvIHNlZSBhbiBvdmVydmlldyBvZiBhbGwKK2F2YWlsYWJsZSBrZXltYXAgZmlsZXMsIHVzZSB0aGlzOiA+CisJOmVjaG8gZ2xvYnBhdGgoJnJ0cCwgImtleW1hcC8qLnZpbSIpCisKK0luIEluc2VydCBhbmQgQ29tbWFuZC1saW5lIG1vZGUgeW91IGNhbiB1c2UgQ1RSTC1eIHRvIHRvZ2dsZSBiZXR3ZWVuIHVzaW5nIHRoZQora2V5Ym9hcmQgbWFwIG9yIG5vdC4gfGlfQ1RSTC1efCB8Y19DVFJMLV58CitUaGlzIGZsYWcgaXMgcmVtZW1iZXJlZCBmb3IgSW5zZXJ0IG1vZGUgd2l0aCB0aGUgJ2ltaW5zZXJ0JyBvcHRpb24uICBXaGVuCitsZWF2aW5nIGFuZCBlbnRlcmluZyBJbnNlcnQgbW9kZSB0aGUgcHJldmlvdXMgdmFsdWUgaXMgdXNlZC4gIFRoZSBzYW1lIHZhbHVlCitpcyBhbHNvIHVzZWQgZm9yIGNvbW1hbmRzIHRoYXQgdGFrZSBhIHNpbmdsZSBjaGFyYWN0ZXIgYXJndW1lbnQsIGxpa2UgfGZ8IGFuZAorfHJ8LgorRm9yIENvbW1hbmQtbGluZSBtb2RlIHRoZSBmbGFnIGlzIE5PVCByZW1lbWJlcmVkLiAgWW91IGFyZSBleHBlY3RlZCB0byB0eXBlIGFuCitFeCBjb21tYW5kIGZpcnN0LCB3aGljaCBpcyBBU0NJSS4KK0ZvciB0eXBpbmcgc2VhcmNoIHBhdHRlcm5zIHRoZSAnaW1zZWFyY2gnIG9wdGlvbiBpcyB1c2VkLiAgSXQgY2FuIGJlIHNldCB0bwordXNlIHRoZSBzYW1lIHZhbHVlIGFzIGZvciAnaW1pbnNlcnQnLgorCitJdCBpcyBwb3NzaWJsZSB0byBnaXZlIHRoZSBHVUkgY3Vyc29yIGFub3RoZXIgY29sb3Igd2hlbiB0aGUgbGFuZ3VhZ2UgbWFwcGluZ3MKK2FyZSBiZWluZyB1c2VkLiAgVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCB0byBhdm9pZCB0aGF0IHRoZSBjdXJzb3IgYmVjb21lcworaW52aXNpYmxlIHdoZW4geW91IHVzZSBhIG5vbi1zdGFuZGFyZCBiYWNrZ3JvdW5kIGNvbG9yLiAgSGVyZSBpcyBhbiBleGFtcGxlIHRvCit1c2UgYSBicmlnaHRseSBjb2xvcmVkIGN1cnNvcjogPgorCTpoaWdobGlnaHQgQ3Vyc29yIGd1aWZnPU5PTkUgZ3VpYmc9R3JlZW4KKwk6aGlnaGxpZ2h0IGxDdXJzb3IgZ3VpZmc9Tk9ORSBndWliZz1DeWFuCis8CisJCQkqa2V5bWFwLWZpbGUtZm9ybWF0KiAqOmxvYWRrKiAqOmxvYWRrZXltYXAqICpFMTA1KgorVGhlIGtleW1hcCBmaWxlIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6ID4KKworCSIgTWFpbnRhaW5lcjoJbmFtZSA8ZW1haWxAYWRkcmVzcz4KKwkiIExhc3QgQ2hhbmdlZDoJMjAwMSBKYW4gMQorCisJbGV0IGI6a2V5bWFwX25hbWUgPSAic2hvcnQiCisKKwlsb2Fka2V5bWFwCisJYQlBCisJYglCCWNvbW1lbnQKKworVGhlIGxpbmVzIHN0YXJ0aW5nIHdpdGggYSAiIGFyZSBjb21tZW50cyBhbmQgd2lsbCBiZSBpZ25vcmVkLiAgQmxhbmsgbGluZXMgYXJlCithbHNvIGlnbm9yZWQuICBUaGUgbGluZXMgd2l0aCB0aGUgbWFwcGluZ3MgbWF5IGhhdmUgYSBjb21tZW50IGFmdGVyIHRoZSB1c2VmdWwKK3RleHQuCisKK1RoZSAiYjprZXltYXBfbmFtZSIgY2FuIGJlIHNldCB0byBhIHNob3J0IG5hbWUsIHdoaWNoIHdpbGwgYmUgc2hvd24gaW4gdGhlCitzdGF0dXMgbGluZS4gIFRoZSBpZGVhIGlzIHRoYXQgdGhpcyB0YWtlcyBsZXNzIHJvb20gdGhhbiB0aGUgdmFsdWUgb2YKKydrZXltYXAnLCB3aGljaCBtaWdodCBiZSBsb25nIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IGxhbmd1YWdlcywKK2tleWJvYXJkcyBhbmQgZW5jb2RpbmdzLgorCitUaGUgYWN0dWFsIG1hcHBpbmdzIGFyZSBpbiB0aGUgbGluZXMgYmVsb3cgImxvYWRrZXltYXAiLiAgSW4gdGhlIGV4YW1wbGUgImEiCitpcyBtYXBwZWQgdG8gIkEiIGFuZCAiYiIgdG8gIkIiLiAgVGh1cyB0aGUgZmlyc3QgaXRlbSBpcyBtYXBwZWQgdG8gdGhlIHNlY29uZAoraXRlbS4gIFRoaXMgaXMgZG9uZSBmb3IgZWFjaCBsaW5lLCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorVGhlc2UgaXRlbXMgYXJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCBjYW4gYmUgdXNlZCBpbiBhIHw6bG5vcmVtYXB8IGNvbW1hbmQsCit1c2luZyAiPGJ1ZmZlcj4iIHRvIG1ha2UgdGhlIG1hcHBpbmdzIGxvY2FsIHRvIHRoZSBidWZmZXIuLgorWW91IGNhbiBjaGVjayB0aGUgcmVzdWx0IHdpdGggdGhpcyBjb21tYW5kOiA+CisJOmxtYXAKK1RoZSB0d28gaXRlbXMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgd2hpdGUgc3BhY2UuICBZb3UgY2Fubm90IGluY2x1ZGUgd2hpdGUKK3NwYWNlIGluc2lkZSBhbiBpdGVtLCB1c2UgdGhlIHNwZWNpYWwgbmFtZXMgIjxUYWI+IiBhbmQgIjxTcGFjZT4iIGluc3RlYWQuCitUaGUgbGVuZ3RoIG9mIHRoZSB0d28gaXRlbXMgdG9nZXRoZXIgbXVzdCBub3QgZXhjZWVkIDIwMCBieXRlcy4KKworSXQncyBwb3NzaWJsZSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyIGluIHRoZSBmaXJzdCBjb2x1bW4uICBUaGlzIHdvcmtzCitsaWtlIGEgZGVhZCBrZXkuICBFeGFtcGxlOiA+CisJJ2EJw6EKK1NpbmNlIFZpbSBkb2Vzbid0IGtub3cgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGFmdGVyIGEgcXVvdGUgaXMgcmVhbGx5IGFuICJhIiwKK2l0IHdpbGwgd2FpdCBmb3IgdGhlIG5leHQgY2hhcmFjdGVyLiAgVG8gYmUgYWJsZSB0byBpbnNlcnQgYSBzaW5nbGUgcXVvdGUsCithbHNvIGFkZCB0aGlzIGxpbmU6ID4KKwknJwknCitTaW5jZSB0aGUgbWFwcGluZyBpcyBkZWZpbmVkIHdpdGggfDpsbm9yZW1hcHwgdGhlIHJlc3VsdGluZyBxdW90ZSB3aWxsIG5vdCBiZQordXNlZCBmb3IgdGhlIHN0YXJ0IG9mIGFub3RoZXIgY2hhcmFjdGVyLgorCitBbHRob3VnaCBpdCdzIHBvc3NpYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gdGhlIHNlY29uZCBjb2x1bW4sCit0aGlzIGlzIHVudXN1YWwuICBCdXQgeW91IGNhbiB1c2UgdmFyaW91cyB3YXlzIHRvIHNwZWNpZnkgdGhlIGNoYXJhY3RlcjogPgorCUEJYQkJbGl0ZXJhbCBjaGFyYWN0ZXIKKwlBCTxjaGFyLTk3PglkZWNpbWFsIHZhbHVlCisJQQk8Y2hhci0weDYxPgloZXhhZGVjaW1hbCB2YWx1ZQorCUEJPGNoYXItMDE0MT4Jb2N0YWwgdmFsdWUKKwl4CTxTcGFjZT4JCXNwZWNpYWwga2V5IG5hbWUKKworVGhlIGNoYXJhY3RlcnMgYXJlIGFzc3VtZWQgdG8gYmUgZW5jb2RlZCBmb3IgdGhlIGN1cnJlbnQgdmFsdWUgb2YgJ2VuY29kaW5nJy4KK0l0J3MgcG9zc2libGUgdG8gdXNlICI6c2NyaXB0ZW5jb2RpbmciIHdoZW4gYWxsIGNoYXJhY3RlcnMgYXJlIGdpdmVuCitsaXRlcmFsbHkuICBUaGF0IGRvZXNuJ3Qgd29yayB3aGVuIHVzaW5nIHRoZSA8Y2hhci0+IGNvbnN0cnVjdCwgYmVjYXVzZSB0aGUKK2NvbnZlcnNpb24gaXMgZG9uZSBvbiB0aGUga2V5bWFwIGZpbGUsIG5vdCBvbiB0aGUgcmVzdWx0aW5nIGNoYXJhY3Rlci4KKworVGhlIGxpbmVzIGFmdGVyICJsb2Fka2V5bWFwIiBhcmUgaW50ZXJwcmV0ZWQgd2l0aCAnY3BvcHRpb25zJyBzZXQgdG8gIkMiLgorVGhpcyBtZWFucyB0aGF0IGNvbnRpbnVhdGlvbiBsaW5lcyBhcmUgbm90IHVzZWQgYW5kIGEgYmFja3NsYXNoIGhhcyBhIHNwZWNpYWwKK21lYW5pbmcgaW4gdGhlIG1hcHBpbmdzLiAgRXhhbXBsZXM6ID4KKworCSIgYSBjb21tZW50IGxpbmUKKwlcIgl4CW1hcHMgIiB0byB4CisJXFwJeQltYXBzIFwgdG8geQorCitJZiB5b3Ugd3JpdGUgYSBrZXltYXAgZmlsZSB0aGF0IHdpbGwgYmUgdXNlZnVsIGZvciBvdGhlcnMsIGNvbnNpZGVyIHN1Ym1pdHRpbmcKK2l0IHRvIHRoZSBWaW0gbWFpbnRhaW5lciBmb3IgaW5jbHVzaW9uIGluIHRoZSBkaXN0cmlidXRpb246Cis8bWFpbnRhaW5lckB2aW0ub3JnPgorCisKK0hFQlJFVyBLRVlNQVAJCQkJCQkqa2V5bWFwLWhlYnJldyoKKworVGhpcyBmaWxlIGV4cGxhaW5zIHdoYXQgY2hhcmFjdGVycyBhcmUgYXZhaWxhYmxlIGluIFVURi04IGFuZCBDUDEyNTUgZW5jb2RpbmdzLAorYW5kIHdoYXQgdGhlIGtleW1hcHMgYXJlIHRvIGdldCB0aG9zZSBjaGFyYWN0ZXJzOgorCitnbHlwaCAgIGVuY29kaW5nCSAgIGtleW1hcCB+CitDaGFyICAgdXRmLTggY3AxMjU1ICBoZWJyZXcgIGhlYnJld3AgIG5hbWUgfgor15AgICAgMHg1ZDAgIDB4ZTAgICAgIHQJICAgICAgYSAgICAgJ2FsZWYKK9eRICAgIDB4NWQxICAweGUxICAgICBjCSAgICAgIGIgICAgIGJldAor15IgICAgMHg1ZDIgIDB4ZTIgICAgIGQJICAgICAgZyAgICAgZ2ltZWwKK9eTICAgIDB4NWQzICAweGUzICAgICBzCSAgICAgIGQgICAgIGRhbGV0CivXlCAgICAweDVkNCAgMHhlNCAgICAgdgkgICAgICBoICAgICBoZQor15UgICAgMHg1ZDUgIDB4ZTUgICAgIHUJICAgICAgdiAgICAgdmF2CivXliAgICAweDVkNiAgMHhlNiAgICAgegkgICAgICB6ICAgICB6YXlpbgor15cgICAgMHg1ZDcgIDB4ZTcgICAgIGoJICAgICAgaiAgICAgaGV0CivXmCAgICAweDVkOCAgMHhlOCAgICAgeQkgICAgICBUICAgICB0ZXQKK9eZICAgIDB4NWQ5ICAweGU5ICAgICBoCSAgICAgIHkgICAgIHlvZAor15ogICAgMHg1ZGEgIDB4ZWEgICAgIGwJICAgICAgSyAgICAga2FmIHNvZml0CivXmyAgICAweDVkYiAgMHhlYiAgICAgZgkgICAgICBrICAgICBrYWYKK9ecICAgIDB4NWRjICAweGVjICAgICBrCSAgICAgIGwgICAgIGxhbWVkCivXnSAgICAweDVkZCAgMHhlZCAgICAgbwkgICAgICBNICAgICBtZW0gc29maXQKK9eeICAgIDB4NWRlICAweGVlICAgICBuCSAgICAgIG0gICAgIG1lbQor158gICAgMHg1ZGYgIDB4ZWYgICAgIGkJICAgICAgTiAgICAgbnVuIHNvZml0CivXoCAgICAweDVlMCAgMHhmMCAgICAgYgkgICAgICBuICAgICBudW4KK9ehICAgIDB4NWUxICAweGYxICAgICB4CSAgICAgIHMgICAgIHNhbWVjaAor16IgICAgMHg1ZTIgIDB4ZjIgICAgIGcJICAgICAgdSAgICAgYGF5aW4KK9ejICAgIDB4NWUzICAweGYzICAgICA7CSAgICAgIFAgICAgIHBlIHNvZml0CivXpCAgICAweDVlNCAgMHhmNCAgICAgcAkgICAgICBwICAgICBwZQor16UgICAgMHg1ZTUgIDB4ZjUgICAgIC4JICAgICAgWCAgICAgdHNhZGkgc29maXQKK9emICAgIDB4NWU2ICAweGY2ICAgICBtCSAgICAgIHggICAgIHRzYWRpCivXpyAgICAweDVlNyAgMHhmNyAgICAgZQkgICAgICBxICAgICBxb2YKK9eoICAgIDB4NWU4ICAweGY4ICAgICByCSAgICAgIHIgICAgIHJlc2gKK9epICAgIDB4NWU5ICAweGY5ICAgICBhCSAgICAgIHcgICAgIHNoaW4KK9eqICAgIDB4NWVhICAweGZhICAgICAsCSAgICAgIHQgICAgIHRhdgorCitWb3dlbCBtYXJrcyBhbmQgc3BlY2lhbCBwdW5jdHVhdGlvbjoKK9eU1rAgICAgMHg1YjAgIDB4YzAgICAgIEE6ICAgICAgQTogICBzaGV2YQor15TWsSAgICAweDViMSAgMHhjMSAgICAgSEUgICAgICBIRSAgIGhhdGFmIHNlZ29sCivXlNayICAgIDB4NWIyICAweGMyICAgICBIQSAgICAgIEhBICAgaGF0YWYgcGF0YWgKK9eU1rMgICAgMHg1YjMgIDB4YzMgICAgIEhPICAgICAgSE8gICBoYXRhZiBxYW1hdHMKK9eU1rQgICAgMHg1YjQgIDB4YzQgICAgIEkgICAgICAgSSAgICBoaXJpcQor15TWtSAgICAweDViNSAgMHhjNSAgICAgQVkgICAgICBBWSAgIHRzZXJlCivXlNa2ICAgIDB4NWI2ICAweGM2ICAgICBFICAgICAgIEUgICAgc2Vnb2wKK9eU1rcgICAgMHg1YjcgIDB4YzcgICAgIEFBICAgICAgQUEgICBwYXRhaAor15TWuCAgICAweDViOCAgMHhjOCAgICAgQU8gICAgICBBTyAgIHFhbWF0cwor15TWuSAgICAweDViOSAgMHhjOSAgICAgTyAgICAgICBPICAgIGhvbGFtCivXlNa7ICAgIDB4NWJiICAweGNiICAgICBVICAgICAgIFUgICAgcXVidXRzCivXm9a8ICAgIDB4NWJjICAweGNjICAgICBEICAgICAgIEQgICAgZGFnZXNoCivXlNa9ICAgIDB4NWJkICAweGNkICAgICBdVCAgICAgIF1UICAgbWV0ZWcKK9eU1r4gICAweDViZSAgMHhjZSAgICAgXVEgICAgICBdUSAgIG1hcWFmCivXkda/ICAgIDB4NWJmICAweGNmICAgICBdUiAgICAgIF1SICAgcmFmZQor15HXgCAgIDB4NWMwICAweGQwICAgICBdcCAgICAgIF1wICAgcGFzZXEKK9ep14EgICAgMHg1YzEgIDB4ZDEgICAgIFNSICAgICAgU1IgICBzaGluLWRvdAor16nXgiAgICAweDVjMiAgMHhkMiAgICAgU0wgICAgICBTTCAgIHNpbi1kb3QKK9eDICAgIDB4NWMzICAweGQzICAgICBdUCAgICAgIF1QICAgc29mLXBhc3VxCivXsCAgICAweDVmMCAgMHhkNCAgICAgVlYgICAgICBWViAgIGRvdWJsZS12YXYKK9exICAgIDB4NWYxICAweGQ1ICAgICBWWSAgICAgIFZZICAgdmF2LXlvZAor17IgICAgMHg1ZjIgIDB4ZDYgICAgIFlZICAgICAgWVkgICB5b2QteW9kCisKK1RoZSBmb2xsb3dpbmcgYXJlIG9ubHkgYXZhaWxhYmxlIGluIHV0Zi04CisKK0NhbnRpbGxhdGlvbiBtYXJrczoKK2dseXBoCitDaGFyIHV0Zi04IGhlYnJldyBuYW1lCivXkdaRICAgIDB4NTkxICAgQzogICBldG5haHRhCivXkdaSICAgIDB4NTkyICAgQ3MgICBzZWdvbAor15HWkyAgICAweDU5MyAgIENTICAgc2hhbHNoZWxldAor15HWlCAgICAweDU5NCAgIEN6ICAgemFxZWYgcWF0YW4KK9eR1pUgICAgMHg1OTUgICBDWiAgIHphcWVmIGdhZG9sCivXkdaWICAgIDB4NTk2ICAgQ3QgICB0aXBlaGEKK9eR1pcgICAgMHg1OTcgICBDciAgIHJldmlhCivXkdaYICAgIDB4NTk4ICAgQ3EgICB6YXJxYQor15HWmSAgICAweDU5OSAgIENwICAgcGFzaHRhCivXkdaaICAgIDB4NTlhICAgQyEgICB5ZXRpdgor15HWmyAgICAweDU5YiAgIEN2ICAgdGV2aXIKK9eR1pwgICAgMHg1OWMgICBDZyAgIGdlcmVzaAor15HWnSAgICAweDU5ZCAgIEMqICAgZ2VyZXNoIHFhZGltCivXkdaeICAgIDB4NTllICAgQ0cgICBnZXJzaGF5aW0KK9eR1p8gICAgMHg1OWYgICBDUCAgIHFhcm5laS1wYXJhaAor15HWqiAgICAweDVhYSAgIEN5ICAgeWVyYWNoLWJlbi15b21vCivXkdarICAgIDB4NWFiICAgQ28gICBvbGUKK9eR1qwgICAgMHg1YWMgICBDaSAgIGlsdXkKK9eR1q0gICAgMHg1YWQgICBDZCAgIGRlaGkKK9eR1q4gICAgMHg1YWUgICBDbiAgIHppbm9yCivXkdavICAgIDB4NWFmICAgQ0MgICBtYXNvcmEgY2lyY2xlCisKK0NvbWJpbmluZyBmb3JtczoKK++soCAgICAweGZiMjAgIFhgICAgQWx0ZXJuYXRpdmUgYGF5aW4KK++soSAgICAweGZiMjEgIFgnICAgQWx0ZXJuYXRpdmUgJ2FsZWYKK++soiAgICAweGZiMjIgIFgtZCAgQWx0ZXJuYXRpdmUgZGFsZXQKK++soyAgICAweGZiMjMgIFgtaCAgQWx0ZXJuYXRpdmUgaGUKK++spCAgICAweGZiMjQgIFgtayAgQWx0ZXJuYXRpdmUga2FmCivvrKUgICAgMHhmYjI1ICBYLWwgIEFsdGVybmF0aXZlIGxhbWVkCivvrKYgICAgMHhmYjI2ICBYLW0gIEFsdGVybmF0aXZlIG1lbS1zb2ZpdAor76ynICAgIDB4ZmIyNyAgWC1yICBBbHRlcm5hdGl2ZSByZXNoCivvrKggICAgMHhmYjI4ICBYLXQgIEFsdGVybmF0aXZlIHRhdgor76ypICAgIDB4ZmIyOSAgWC0rICBBbHRlcm5hdGl2ZSBwbHVzCivvrKogICAgMHhmYjJhICBYVyAgIHNoaW4rc2hpbi1kb3QKK++sqyAgICAweGZiMmIgIFh3ICAgc2hpbitzaW4tZG90CivvrKwgICAgMHhmYjJjICBYLi5XICBzaGluK3NoaW4tZG90K2RhZ2VzaAor76ytICAgIDB4ZmIyZCAgWC4udyAgc2hpbitzaW4tZG90K2RhZ2VzaAor76yuICAgIDB4ZmIyZSAgWEEgICBhbGVmK3BhdGFoCivvrK8gICAgMHhmYjJmICBYTyAgIGFsZWYrcWFtYXRzCivvrLAgICAgMHhmYjMwICBYSSAgIGFsZWYraGlyaXEgKG1hcGlxKQor76yxICAgIDB4ZmIzMSAgWC5iICBiZXQrZGFnZXNoCivvrLIgICAgMHhmYjMyICBYLmcgIGdpbWVsK2RhZ2VzaAor76yzICAgIDB4ZmIzMyAgWC5kICBkYWxldCtkYWdlc2gKK++stCAgICAweGZiMzQgIFguaCAgaGUrZGFnZXNoCivvrLUgICAgMHhmYjM1ICBYdSAgdmF2K2RhZ2VzaAor76y2ICAgIDB4ZmIzNiAgWC56ICB6YXlpbitkYWdlc2gKK++suCAgICAweGZiMzggIFguVCAgdGV0K2RhZ2VzaAor76y5ICAgIDB4ZmIzOSAgWC55ICB5dWQrZGFnZXNoCivvrLogICAgMHhmYjNhICBYLksgIGthZiBzb2ZpdCtkYWdlc2gKK++suyAgICAweGZiM2IgIFguayAga2FmK2RhZ2VzaAor76y8ICAgIDB4ZmIzYyAgWC5sICBsYW1lZCtkYWdlc2gKK++sviAgICAweGZiM2UgIFgubSAgbWVtK2RhZ2VzaAor762AICAgIDB4ZmI0MCAgWC5uICBudW4rZGFnZXNoCivvrYEgICAgMHhmYjQxICBYLnMgIHNhbWVjaCtkYWdlc2gKK++tgyAgICAweGZiNDMgIFguUCAgcGUgc29maXQrZGFnZXNoCivvrYQgICAgMHhmYjQ0ICBYLnAgIHBlK2RhZ2VzaAor762GICAgIDB4ZmI0NiAgWC54ICB0c2FkaStkYWdlc2gKK++thyAgICAweGZiNDcgIFgucSAgcW9mK2RhZ2VzaAor762IICAgIDB4ZmI0OCAgWC5yICByZXNoK2RhZ2VzaAor762JICAgIDB4ZmI0OSAgWC53ICBzaGluK2RhZ2VzaAor762KICAgIDB4ZmI0YSAgWC50ICB0YXYrZGFnZXNoCivvrYsgICAgMHhmYjRiICBYbyAgIHZhditob2xhbQor762MICAgIDB4ZmI0YyAgWFJiICBiZXQrcmFmZQor762NICAgIDB4ZmI0ZCAgWFJrICBrYWYrcmFmZQor762OICAgIDB4ZmI0ZSAgWFJwICBwZStyYWZlCivvrY8gICAgMHhmYjRmICBYYWwgIGFsZWYtbGFtZWQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMC4gVXNpbmcgVVRGLTgJCQkJKm1ieXRlLXV0ZjgqICpVVEYtOCogKnV0Zi04KiAqdXRmOCoKKwkJCQkJCQkqVW5pY29kZSogKnVuaWNvZGUqCitUaGUgVW5pY29kZSBjaGFyYWN0ZXIgc2V0IHdhcyBkZXNpZ25lZCB0byBpbmNsdWRlIGFsbCBjaGFyYWN0ZXJzIGZyb20gb3RoZXIKK2NoYXJhY3RlciBzZXRzLiAgVGhlcmVmb3JlIGl0IGlzIHBvc3NpYmxlIHRvIHdyaXRlIHRleHQgaW4gYW55IGxhbmd1YWdlIHVzaW5nCitVbmljb2RlICh3aXRoIGEgZmV3IHJhcmVseSB1c2VkIGxhbmd1YWdlcyBleGNsdWRlZCkuICBBbmQgaXQncyBtb3N0bHkgcG9zc2libGUKK3RvIG1peCB0aGVzZSBsYW5ndWFnZXMgaW4gb25lIGZpbGUsIHdoaWNoIGlzIGltcG9zc2libGUgd2l0aCBvdGhlciBlbmNvZGluZ3MuCisKK1VuaWNvZGUgY2FuIGJlIGVuY29kZWQgaW4gc2V2ZXJhbCB3YXlzLiAgVGhlIHR3byBtb3N0IHBvcHVsYXIgb25lcyBhcmUgVUNTLTIsCit3aGljaCB1c2VzIDE2LWJpdCB3b3JkcyBhbmQgVVRGLTgsIHdoaWNoIHVzZXMgb25lIG9yIG1vcmUgYnl0ZXMgZm9yIGVhY2gKK2NoYXJhY3Rlci4gIFZpbSBjYW4gc3VwcG9ydCBhbGwgb2YgdGhlc2UgZW5jb2RpbmdzLCBidXQgYWx3YXlzIHVzZXMgVVRGLTgKK2ludGVybmFsbHkuCisKK1ZpbSBoYXMgY29tcHJlaGVuc2l2ZSBVVEYtOCBzdXBwb3J0LiAgSXQgYXBwZWFycyB0byB3b3JrIGluOgorLSB4dGVybSB3aXRoIHV0Zi04IHN1cHBvcnQgZW5hYmxlZAorLSBBdGhlbmEsIE1vdGlmIGFuZCBHVEsgR1VJCistIE1TLVdpbmRvd3MgR1VJCisKK0RvdWJsZS13aWR0aCBjaGFyYWN0ZXJzIGFyZSBzdXBwb3J0ZWQuICBUaGlzIHdvcmtzIGJlc3Qgd2l0aCAnZ3VpZm9udHdpZGUnIG9yCisnZ3VpZm9udHNldCcuICBXaGVuIHVzaW5nIG9ubHkgJ2d1aWZvbnQnIHRoZSB3aWRlIGNoYXJhY3RlcnMgYXJlIGRyYXduIGluIHRoZQorbm9ybWFsIHdpZHRoIGFuZCBhIHNwYWNlIHRvIGZpbGwgdGhlIGdhcC4gIE5vdGUgdGhhdCB0aGUgJ2d1aWZvbnRzZXQnIG9wdGlvbgoraXMgbm8gbG9uZ2VyIHJlbGV2YW50IGluIHRoZSBHVEsrIDIgR1VJLgorCitVcCB0byB0d28gY29tYmluaW5nIGNoYXJhY3RlcnMgY2FuIGJlIHVzZWQuICBUaGUgY29tYmluaW5nIGNoYXJhY3RlciBpcyBkcmF3bgorb24gdG9wIG9mIHRoZSBwcmVjZWRpbmcgY2hhcmFjdGVyLiAgV2hlbiBlZGl0aW5nIHRleHQgYSBjb21wb3NpbmcgY2hhcmFjdGVyIGlzCittb3N0bHkgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBwcmVjZWRpbmcgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUgIngiIHdpbGwKK2RlbGV0ZSBhIGNoYXJhY3RlciBhbmQgaXRzIGZvbGxvd2luZyBjb21wb3NpbmcgY2hhcmFjdGVycyBieSBkZWZhdWx0LiBJZiB0aGUKKydkZWxjb21iaW5lJyBvcHRpb24gaXMgb24sIHRoZW4gcHJlc3NpbmcgJ3gnIHdpbGwgZGVsZXRlIHRoZSBjb21iaW5pbmcKK2NoYXJhY3RlcnMsIG9uZSBhdCBhIHRpbWUsIHRoZW4gdGhlIGJhc2UgY2hhcmFjdGVyLiAgQnV0IHdoZW4gaW5zZXJ0aW5nLCB5b3UKK3R5cGUgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgdGhlIGZvbGxvd2luZyBjb21wb3NpbmcgY2hhcmFjdGVycyBzZXBhcmF0ZWx5LAorYWZ0ZXIgd2hpY2ggdGhleSB3aWxsIGJlIGpvaW5lZC4gIFRoZSAiciIgY29tbWFuZCB3aWxsIG5vdCBhbGxvdyB5b3UgdG8gdHlwZSBhCitjb21iaW5pbmcgY2hhcmFjdGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBvbmUgaXMgY29taW5nLiAgVXNlICJSIiBpbnN0ZWFkLgorCitCeXRlcyB3aGljaCBhcmUgbm90IHBhcnQgb2YgYSB2YWxpZCBVVEYtOCBieXRlIHNlcXVlbmNlIGFyZSBoYW5kbGVkIGxpa2UgYQorc2luZ2xlIGNoYXJhY3RlciBhbmQgZGlzcGxheWVkIGFzIDx4eD4sIHdoZXJlICJ4eCIgaXMgdGhlIGhleCB2YWx1ZSBvZiB0aGUKK2J5dGUuCisKK092ZXJsb25nIHNlcXVlbmNlcyBhcmUgbm90IGhhbmRsZWQgc3BlY2lhbGx5IGFuZCBkaXNwbGF5ZWQgbGlrZSBhIHZhbGlkCitjaGFyYWN0ZXIuICBIb3dldmVyLCBzZWFyY2ggcGF0dGVybnMgbWF5IG5vdCBtYXRjaCBvbiBhbiBvdmVybG9uZyBzZXF1ZW5jZS4KKyhhbiBvdmVybG9uZyBzZXF1ZW5jZSBpcyB3aGVyZSBtb3JlIGJ5dGVzIGFyZSB1c2VkIHRoYW4gcmVxdWlyZWQgZm9yIHRoZQorY2hhcmFjdGVyLikgIEFuIGV4Y2VwdGlvbiBpcyBOVUwgKHplcm8pIHdoaWNoIGlzIGRpc3BsYXllZCBhcyAiPDAwPiIuCisKK0luIHRoZSBmaWxlIGFuZCBidWZmZXIgdGhlIGZ1bGwgcmFuZ2Ugb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGNhbiBiZSB1c2VkICgzMQorYml0cykuICBIb3dldmVyLCBkaXNwbGF5aW5nIG9ubHkgd29ya3MgZm9yIDE2IGJpdCBjaGFyYWN0ZXJzLCBhbmQgb25seSBmb3IgdGhlCitjaGFyYWN0ZXJzIHByZXNlbnQgaW4gdGhlIHNlbGVjdGVkIGZvbnQuCisKK1VzZWZ1bCBjb21tYW5kczoKKy0gImdhIiBzaG93cyB0aGUgZGVjaW1hbCwgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIHZhbHVlIG9mIHRoZSBjaGFyYWN0ZXIgdW5kZXIKKyAgdGhlIGN1cnNvci4gIElmIHRoZXJlIGFyZSBjb21wb3NpbmcgY2hhcmFjdGVycyB0aGVzZSBhcmUgc2hvd24gdG9vLiAoaWYgdGhlCisgIG1lc3NhZ2UgaXMgdHJ1bmNhdGVkLCB1c2UgIjptZXNzYWdlcyIpLgorLSAiZzgiIHNob3dzIHRoZSBieXRlcyB1c2VkIGluIGEgVVRGLTggY2hhcmFjdGVyLCBhbHNvIHRoZSBjb21wb3NpbmcKKyAgY2hhcmFjdGVycywgYXMgaGV4IG51bWJlcnMuCistICI6c2V0IGVuY29kaW5nPXV0Zi04IGZpbGVlbmNvZGluZ3M9IiBmb3JjZXMgdXNpbmcgVVRGLTggZm9yIGFsbCBmaWxlcy4gIFRoZQorICBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgY3VycmVudCBsb2NhbGUgZm9yICdlbmNvZGluZycgYW5kIHNldCAnZmlsZWVuY29kaW5ncycKKyAgdG8gYXV0b21hdGljYWxseSB0aGUgZW5jb2Rpbmcgb2YgYSBmaWxlLgorCisKK1NUQVJUSU5HIFZJTQorCitJZiB5b3VyIGN1cnJlbnQgbG9jYWxlIGlzIGluIGFuIHV0Zi04IGVuY29kaW5nLCBWaW0gd2lsbCBhdXRvbWF0aWNhbGx5IHN0YXJ0CitpbiB1dGYtOCBtb2RlLgorCitJZiB5b3UgYXJlIHVzaW5nIGFub3RoZXIgbG9jYWxlOiA+CisKKwlzZXQgZW5jb2Rpbmc9dXRmLTgKKworWW91IG1pZ2h0IGFsc28gd2FudCB0byBzZWxlY3QgdGhlIGZvbnQgdXNlZCBmb3IgdGhlIG1lbnVzLiAgVW5mb3J0dW5hdGVseSB0aGlzCitkb2Vzbid0IGFsd2F5cyB3b3JrLiAgU2VlIHRoZSBzeXN0ZW0gc3BlY2lmaWMgcmVtYXJrcyBiZWxvdywgYW5kICdsYW5nbWVudScuCisKKworVVNJTkcgVVRGLTggSU4gWC1XaW5kb3dzCQkJCSp1dGYtOC1pbi14d2luZG93cyoKKworTm90ZTogVGhpcyBzZWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBHVEsrIDIgR1VJLgorCitZb3UgbmVlZCB0byBzcGVjaWZ5IGEgZm9udCB0byBiZSB1c2VkLiAgRm9yIGRvdWJsZS13aWRlIGNoYXJhY3RlcnMgYW5vdGhlcgorZm9udCBpcyByZXF1aXJlZCwgd2hpY2ggaXMgZXhhY3RseSB0d2ljZSBhcyB3aWRlLiAgVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gZG8KK3RoaXM6CisKKzEuIFNldCAnZ3VpZm9udCcgYW5kIGxldCBWaW0gZmluZCBhIG1hdGNoaW5nICdndWlmb250d2lkZScKKzIuIFNldCAnZ3VpZm9udCcgYW5kICdndWlmb250d2lkZScKKzMuIFNldCAnZ3VpZm9udHNldCcKKworU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBlYWNoIG9wdGlvbiBmb3IgZGV0YWlscy4gIEV4YW1wbGU6ID4KKworICAgOnNldCBndWlmb250PS1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvMTA2NDYtMQorCitZb3UgbWlnaHQgYWxzbyB3YW50IHRvIHNldCB0aGUgZm9udCB1c2VkIGZvciB0aGUgbWVudXMuICBUaGlzIG9ubHkgd29ya3MgZm9yCitNb3RpZi4gIFVzZSB0aGUgIjpoaSBNZW51IGZvbnQ9e2ZvbnRuYW1lfSIgY29tbWFuZCBmb3IgdGhpcy4gfDpoaWdobGlnaHR8CisKKworVFlQSU5HIFVURi04CQkJCQkJKnV0Zi04LXR5cGluZyoKKworSWYgeW91IGFyZSB1c2luZyBYLVdpbmRvd3MsIHlvdSBzaG91bGQgZmluZCBhbiBpbnB1dCBtZXRob2QgdGhhdCBzdXBwb3J0cwordXRmLTguCisKK0lmIHlvdXIgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgc3VwcG9ydCBmb3IgdHlwaW5nIHV0Zi04LCB5b3UgY2FuIHVzZSB0aGUKKydrZXltYXAnIGZlYXR1cmUuICBUaGlzIGFsbG93cyB3cml0aW5nIGEga2V5bWFwIGZpbGUsIHdoaWNoIGRlZmluZXMgYSB1dGYtOAorY2hhcmFjdGVyIGFzIGEgc2VxdWVuY2Ugb2YgQVNDSUkgY2hhcmFjdGVycy4gIFNlZSB8bWJ5dGUta2V5bWFwfC4KKworQW5vdGhlciBtZXRob2QgaXMgdG8gc2V0IHRoZSBjdXJyZW50IGxvY2FsZSB0byB0aGUgbGFuZ3VhZ2UgeW91IHdhbnQgdG8gdXNlCithbmQgZm9yIHdoaWNoIHlvdSBoYXZlIGEgWElNIGF2YWlsYWJsZS4gIFRoZW4gc2V0ICd0ZXJtZW5jb2RpbmcnIHRvIHRoYXQKK2xhbmd1YWdlIGFuZCBWaW0gd2lsbCBjb252ZXJ0IHRoZSB0eXBlZCBjaGFyYWN0ZXJzIHRvICdlbmNvZGluZycgZm9yIHlvdS4KKworSWYgZXZlcnl0aGluZyBlbHNlIGZhaWxzLCB5b3UgY2FuIHR5cGUgYW55IGNoYXJhY3RlciBhcyBmb3VyIGhleCBieXRlczogPgorCisJQ1RSTC1WIHUgMTIzNAorCisiMTIzNCIgaXMgaW50ZXJwcmV0ZWQgYXMgYSBoZXggbnVtYmVyLiAgWW91IG11c3QgdHlwZSBmb3VyIGNoYXJhY3RlcnMsIHByZXBlbmQKK2EgemVybyBpZiBuZWNlc3NhcnkuCisKKworQ09NTUFORCBBUkdVTUVOVFMJCQkJCSp1dGYtOC1jaGFyLWFyZyoKKworQ29tbWFuZHMgbGlrZSB8ZnwsIHxGfCwgfHR8IGFuZCB8cnwgdGFrZSBhbiBhcmd1bWVudCBvZiBvbmUgY2hhcmFjdGVyLiAgRm9yCitVVEYtOCB0aGlzIGFyZ3VtZW50IG1heSBpbmNsdWRlIG9uZSBvciB0d28gY29tcG9zaW5nIGNoYXJhY3RlcnMuICBUaGVzZSBuZWVkcwordG8gYmUgcHJvZHVjZWQgdG9nZXRoZXIgd2l0aCB0aGUgYmFzZSBjaGFyYWN0ZXIsIFZpbSBkb2Vzbid0IHdhaXQgZm9yIHRoZSBuZXh0CitjaGFyYWN0ZXIgdG8gYmUgdHlwZWQgdG8gZmluZCBvdXQgaWYgaXQgaXMgYSBjb21wb3NpbmcgY2hhcmFjdGVyIG9yIG5vdC4KK1VzaW5nICdrZXltYXAnIG9yIHw6bG1hcHwgaXMgYSBuaWNlIHdheSB0byB0eXBlIHRoZXNlIGNoYXJhY3RlcnMuCisKK1RoZSBjb21tYW5kcyB0aGF0IHNlYXJjaCBmb3IgYSBjaGFyYWN0ZXIgaW4gYSBsaW5lIGhhbmRsZSBjb21wb3NpbmcgY2hhcmFjdGVycworYXMgZm9sbG93cy4gIFdoZW4gc2VhcmNoaW5nIGZvciBhIGNoYXJhY3RlciB3aXRob3V0IGEgY29tcG9zaW5nIGNoYXJhY3RlciwKK3RoaXMgd2lsbCBmaW5kIG1hdGNoZXMgaW4gdGhlIHRleHQgd2l0aCBvciB3aXRob3V0IGNvbXBvc2luZyBjaGFyYWN0ZXJzLiAgV2hlbgorc2VhcmNoaW5nIGZvciBhIGNoYXJhY3RlciB3aXRoIGEgY29tcG9zaW5nIGNoYXJhY3RlciwgdGhpcyB3aWxsIG9ubHkgZmluZAorbWF0Y2hlcyB3aXRoIHRoYXQgY29tcG9zaW5nIGNoYXJhY3Rlci4gIEl0IHdhcyBpbXBsZW1lbnRlZCB0aGlzIHdheSwgYmVjYXVzZQorbm90IGV2ZXJ5Ym9keSBpcyBhYmxlIHRvIHR5cGUgYSBjb21wb3NpbmcgY2hhcmFjdGVyLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTEuIE92ZXJ2aWV3IG9mIG9wdGlvbnMJCQkJCSptYnl0ZS1vcHRpb25zKgorCitUaGVzZSBvcHRpb25zIGFyZSByZWxldmFudCBmb3IgZWRpdGluZyBtdWx0aS1ieXRlIGZpbGVzLiAgQ2hlY2sgdGhlIGhlbHAgaW4KK29wdGlvbnMudHh0IGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbi4KKworJ2VuY29kaW5nJwlFbmNvZGluZyB1c2VkIGZvciB0aGUga2V5Ym9hcmQgYW5kIGRpc3BsYXkuICBJdCBpcyBhbHNvIHRoZQorCQlkZWZhdWx0IGVuY29kaW5nIGZvciBmaWxlcy4KKworJ2ZpbGVlbmNvZGluZycJRW5jb2Rpbmcgb2YgYSBmaWxlLiAgV2hlbiBpdCdzIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycKKwkJY29udmVyc2lvbiBpcyBkb25lIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIHRoZSBmaWxlLgorCisnZmlsZWVuY29kaW5ncycJTGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3Mgb2YgYSBmaWxlLiAgV2hlbiBvcGVuaW5nIGEgZmlsZQorCQl0aGVzZSB3aWxsIGJlIHRyaWVkIGFuZCB0aGUgZmlyc3Qgb25lIHRoYXQgZG9lc24ndCBjYXVzZSBhbgorCQllcnJvciBpcyB1c2VkIGZvciAnZmlsZWVuY29kaW5nJy4KKworJ2NoYXJjb252ZXJ0JwlFeHByZXNzaW9uIHVzZWQgdG8gY29udmVydCBmaWxlcyBmcm9tIG9uZSBlbmNvZGluZyB0byBhbm90aGVyLgorCisnZm9ybWF0b3B0aW9ucycgVGhlICdtJyBmbGFnIGNhbiBiZSBpbmNsdWRlZCB0byBoYXZlIGZvcm1hdHRpbmcgYnJlYWsgYSBsaW5lCisJCWF0IGEgbXVsdGlieXRlIGNoYXJhY3RlciBvZiAyNTYgb3IgaGlnaGVyLiAgVGh1cyBpcyB1c2VmdWwgZm9yCisJCWxhbmd1YWdlcyB3aGVyZSBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgY2FuIGJlIGJyb2tlbgorCQlhbnl3aGVyZS4KKworJ2d1aWZvbnRzZXQnCVRoZSBsaXN0IG9mIGZvbnQgbmFtZXMgdXNlZCBmb3IgYSBtdWx0aS1ieXRlIGVuY29kaW5nLiAgV2hlbgorCQl0aGlzIG9wdGlvbiBpcyBub3QgZW1wdHksIGl0IHJlcGxhY2VzICdndWlmb250Jy4KKworJ2tleW1hcCcJU3BlY2lmeSB0aGUgbmFtZSBvZiBhIGtleWJvYXJkIG1hcHBpbmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb250cmlidXRpb25zIHNwZWNpZmljYWxseSBmb3IgdGhlIG11bHRpLWJ5dGUgZmVhdHVyZXMgYnk6CisJQ2hpLURlb2sgSHdhbmcgPGh3YW5nQG1pemkuY28ua3I+CisJTmFtIFN1bmdIeXVuIDxuYW1zaEBsZ2UuY29tPgorCUsuTmFnYW5vIDxuYWdhbm9AYXRlc2UuYWR2YW50ZXN0LmNvLmpwPgorCVRhcm8gTXVyYW9rYSAgPGtvcm9uQHRrYS5hdHQubmUuanA+CisJWWFzdWhpcm8gTWF0c3Vtb3RvIDxtYXR0bkBtYWlsLmdvby5uZS5qcD4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL21lc3NhZ2UudHh0IGIvcnVudGltZS9kb2MvbWVzc2FnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU5NzNiMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL21lc3NhZ2UudHh0CkBAIC0wLDAgKzEsNzc1IEBACisqbWVzc2FnZS50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSmFuIDE3CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworVGhpcyBmaWxlIGNvbnRhaW5zIGFuIGFscGhhYmV0aWNhbCBsaXN0IG9mIG1lc3NhZ2VzIGFuZCBlcnJvciBtZXNzYWdlcyB0aGF0CitWaW0gcHJvZHVjZXMuICBZb3UgY2FuIHVzZSB0aGlzIGlmIHlvdSBkb24ndCB1bmRlcnN0YW5kIHdoYXQgdGhlIG1lc3NhZ2UKK21lYW5zLiAgSXQgaXMgbm90IGNvbXBsZXRlIHRob3VnaC4KKworMS4gT2xkIG1lc3NhZ2VzCQl8Om1lc3NhZ2VzfAorMi4gRXJyb3IgbWVzc2FnZXMJfGVycm9yLW1lc3NhZ2VzfAorMy4gTWVzc2FnZXMJCXxtZXNzYWdlc3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBPbGQgbWVzc2FnZXMJCQkqOm1lc3NhZ2VzKiAqOm1lcyogKm1lc3NhZ2UtaGlzdG9yeSoKKworVGhlICI6bWVzc2FnZXMiIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gdmlldyBwcmV2aW91c2x5IGdpdmVuIG1lc3NhZ2VzLiAgVGhpcworaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiBtZXNzYWdlcyBoYXZlIGJlZW4gb3ZlcndyaXR0ZW4gb3IgdHJ1bmNhdGVkLiAgVGhpcworZGVwZW5kcyBvbiB0aGUgJ3Nob3J0bWVzcycgb3B0aW9uLgorCitUaGUgbnVtYmVyIG9mIHJlbWVtYmVyZWQgbWVzc2FnZXMgaXMgZml4ZWQgYXQgMjAuCisKK0lmIHlvdSBhcmUgdXNpbmcgdHJhbnNsYXRlZCBtZXNzYWdlcywgdGhlIGZpcnN0IHByaW50ZWQgbGluZSB0ZWxscyB3aG8KK21haW50YWlucyB0aGUgbWVzc2FnZXMgb3IgdGhlIHRyYW5zbGF0aW9ucy4gIFlvdSBjYW4gdXNlIHRoaXMgdG8gY29udGFjdCB0aGUKK21haW50YWluZXIgd2hlbiB5b3Ugc3BvdCBhIG1pc3Rha2UuCisKK0lmIHlvdSB3YW50IHRvIGZpbmQgaGVscCBvbiBhIHNwZWNpZmljIChlcnJvcikgbWVzc2FnZSwgdXNlIHRoZSBJRCBhdCB0aGUKK3N0YXJ0IG9mIHRoZSBtZXNzYWdlLiAgRm9yIGV4YW1wbGUsIHRvIGdldCBoZWxwIG9uIHRoZSBtZXNzYWdlOiA+CisKKwlFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZQorCitvciAodHJhbnNsYXRlZCk6ID4KKworCUU3MjogRXJyb3JlIGR1cmFudGUgY2hpdXN1cmEgc3dhcCBmaWxlCisKK1VzZTogPgorCisJOmhlbHAgRTcyCisKK0lmIHlvdSBhcmUgbGF6eSwgaXQgYWxzbyB3b3JrcyB3aXRob3V0IHRoZSBzaGlmdCBrZXk6ID4KKworCTpoZWxwIGU3MgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIEVycm9yIG1lc3NhZ2VzCQkJCQkqZXJyb3ItbWVzc2FnZXMqCisKK1doZW4gYW4gZXJyb3IgbWVzc2FnZSBpcyBkaXNwbGF5ZWQsIGJ1dCBpdCBpcyByZW1vdmVkIGJlZm9yZSB5b3UgY291bGQgcmVhZAoraXQsIHlvdSBjYW4gc2VlIGl0IGFnYWluIHdpdGg6ID4KKyAgOmVjaG8gZXJybXNnCitvciB2aWV3IGEgbGlzdCBvZiByZWNlbnQgbWVzc2FnZXMgd2l0aDogPgorICA6bWVzc2FnZXMKKworCitMSVNUIE9GIE1FU1NBR0VTCisJCQkqRTIyMiogKkUyMjgqICpFMjMyKiAqRTI1NiogKkUyOTMqICpFMjk4KiAqRTMwNCogKkUzMTcqCisJCQkqRTMxOCogKkUzNTYqICpFNDM4KiAqRTQzOSogKkU0NDAqICpFMzE2KiAqRTMyMCogKkUzMjIqCisJCQkqRTMyMyogKkUzNDEqICpFNDczKiAqRTU3MCogID4KKyAgQWRkIHRvIHJlYWQgYnVmZmVyCisgIG1ha2VtYXA6IElsbGVnYWwgbW9kZQorICBDYW5ub3QgY3JlYXRlIEJhbGxvb25FdmFsIHdpdGggYm90aCBtZXNzYWdlIGFuZCBjYWxsYmFjaworICBIYW5ndWwgYXV0b21hdGEgRVJST1IKKyAgYmxvY2sgd2FzIG5vdCBsb2NrZWQKKyAgRGlkbid0IGdldCBibG9jayBuciB7Tn0/CisgIG1sX3RpbWVzdGFtcDogRGlkbid0IGdldCBibG9jayAwPz8KKyAgcG9pbnRlciBibG9jayBpZCB3cm9uZyB7Tn0KKyAgVXBkYXRlZCB0b28gbWFueSBibG9ja3M/CisgIGdldF92YXJwIEVSUk9SCisgIHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nCisgIHVuZG8gbGlzdCBjb3JydXB0CisgIHVuZG8gbGluZSBtaXNzaW5nCisgIG1sX2dldDogY2Fubm90IGZpbmQgbGluZSB7Tn0KKyAgY2Fubm90IGZpbmQgbGluZSB7Tn0KKyAgbGluZSBudW1iZXIgb3V0IG9mIHJhbmdlOiB7Tn0gcGFzdCB0aGUgZW5kCisgIGxpbmUgY291bnQgd3JvbmcgaW4gYmxvY2sge059CisgIEludGVybmFsIGVycm9yCisgIGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzCisKK1RoaXMgaXMgYW4gaW50ZXJuYWwgZXJyb3IuICBJZiB5b3UgY2FuIHJlcHJvZHVjZSBpdCwgcGxlYXNlIHNlbmQgaW4gYSBidWcKK3JlcG9ydC4gfGJ1Z3N8CisKKz4KKyAgQVRURU5USU9OCisgIEZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIC4uLgorCitTZWUgfEFUVEVOVElPTnwuCisKKwkJCQkJCQkqRTkyKiAgPgorICBCdWZmZXIge059IG5vdCBmb3VuZAorCitUaGUgYnVmZmVyIHlvdSByZXF1ZXN0ZWQgZG9lcyBub3QgZXhpc3QuICBUaGlzIGNhbiBhbHNvIGhhcHBlbiB3aGVuIHlvdSBoYXZlCit3aXBlZCBvdXQgYSBidWZmZXIgd2hpY2ggY29udGFpbnMgYSBtYXJrIG9yIGlzIHJlZmVyZW5jZWQgaW4gYW5vdGhlciB3YXkuCit8OmJ3aXBlb3V0fAorCisJCQkJCQkJKkU5NSogID4KKyAgQnVmZmVyIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzCisKK1lvdSBjYW5ub3QgaGF2ZSB0d28gYnVmZmVycyB3aXRoIHRoZSBzYW1lIG5hbWUuCisKKwkJCQkJCQkqRTcyKiAgPgorICBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUKKworVGhlIHxzd2FwLWZpbGV8LCB0aGF0IGlzIHVzZWQgdG8ga2VlcCBhIGNvcHkgb2YgdGhlIGVkaXRlZCB0ZXh0LCBjb3VsZCBub3QgYmUKK2Nsb3NlZCBwcm9wZXJseS4gIE1vc3RseSBoYXJtbGVzcy4KKworCQkJCQkJCSpFMTY5KiAgPgorICBDb21tYW5kIHRvbyByZWN1cnNpdmUKKworVGhpcyBoYXBwZW5zIHdoZW4gYW4gRXggY29tbWFuZCBleGVjdXRlcyBhbiBFeCBjb21tYW5kIHRoYXQgZXhlY3V0ZXMgYW4gRXgKK2NvbW1hbmQsIGV0Yy4gIFRoaXMgaXMgb25seSBhbGxvd2VkIDIwMCB0aW1lcy4gIFdoZW4gaXQncyBtb3JlIHRoZXJlIHByb2JhYmx5CitpcyBhbiBlbmRsZXNzIGxvb3AuICBQcm9iYWJseSBhIHw6ZXhlY3V0ZXwgb3IgfDpzb3VyY2V8IGNvbW1hbmQgaXMgaW52b2x2ZWQuCisKKwkJCQkJCQkqRTI1NCogID4KKyAgQ2Fubm90IGFsbG9jYXRlIGNvbG9yIHtuYW1lfQorCitUaGUgY29sb3IgbmFtZSB7bmFtZX0gaXMgdW5rbm93bi4gIFNlZSB8Z3VpLWNvbG9yc3wgZm9yIGEgbGlzdCBvZiBjb2xvcnMgdGhhdAorYXJlIGF2YWlsYWJsZSBvbiBtb3N0IHN5c3RlbXMuCisKKwkJCQkJCQkqRTQ1OCogID4KKyAgQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5IGZvciAieHh4eCIKKyAgQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0CisKK1RoaXMgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbm90IGVub3VnaCBjb2xvcnMgYXZhaWxhYmxlIGZvciBWaW0uICBJdCB3aWxsIHN0aWxsCitydW4sIGJ1dCBzb21lIG9mIHRoZSBjb2xvcnMgd2lsbCBub3QgYXBwZWFyIGluIHRoZSBzcGVjaWZpZWQgY29sb3IuICBUcnkKK3N0b3BwaW5nIG90aGVyIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBtYW55IGNvbG9ycywgb3Igc3RhcnQgdGhlbSBhZnRlciBzdGFydGluZworZ3ZpbS4KK05ldHNjYXBlIGlzIGtub3duIHRvIGNvbnN1bWUgYSBsb3Qgb2YgY29sb3JzLiAgWW91IGNhbiBhdm9pZCB0aGlzIGJ5IHRlbGxpbmcKK2l0IHRvIHVzZSBpdHMgb3duIGNvbG9ybWFwOiA+CisJbmV0c2NhcGUgLWluc3RhbGwKK09yIHRlbGwgaXQgdG8gbGltaXQgdG8gYSBjZXJ0YWluIG51bWJlciBvZiBjb2xvcnMgKDY0IHNob3VsZCB3b3JrIHdlbGwpOiA+CisJbmV0c2NhcGUgLW5jb2xzIDY0CitUaGlzIGNhbiBhbHNvIGJlIGRvbmUgd2l0aCBhIGxpbmUgaW4geW91ciBYZGVmYXVsdHMgZmlsZTogPgorCU5ldHNjYXBlKmluc3RhbGxDb2xvcm1hcDogWWVzCitvciA+CisJTmV0c2NhcGUqbWF4SW1hZ2VDb2xvcnM6ICA2NAorPAorCQkJCQkJCSpFNzkqICA+CisgIENhbm5vdCBleHBhbmQgd2lsZGNhcmRzCisKK0EgZmlsZW5hbWUgY29udGFpbnMgYSBzdHJhbmdlIGNvbWJpbmF0aW9uIG9mIGNoYXJhY3RlcnMsIHdoaWNoIGNhdXNlcyBWaW0gdG8KK2F0dGVtcHQgZXhwYW5kaW5nIHdpbGRjYXJkcyBidXQgdGhpcyBmYWlscy4gIFRoaXMgZG9lcyBOT1QgbWVhbiB0aGF0IG5vCittYXRjaGluZyBmaWxlIG5hbWVzIGNvdWxkIGJlIGZvdW5kLCBidXQgdGhhdCB0aGUgcGF0dGVybiB3YXMgaWxsZWdhbC4KKworCQkJCQkJCSpFNDU5KiAgPgorICBDYW5ub3QgZ28gYmFjayB0byBwcmV2aW91cyBkaXJlY3RvcnkKKworV2hpbGUgZXhwYW5kaW5nIGEgZmlsZSBuYW1lLCBWaW0gZmFpbGVkIHRvIGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzbHkgdXNlZAorZGlyZWN0b3J5LiAgQWxsIGZpbGUgbmFtZXMgYmVpbmcgdXNlZCBtYXkgYmUgaW52YWxpZCBub3chICBZb3UgbmVlZCB0byBoYXZlCitleGVjdXRlIHBlcm1pc3Npb24gb24gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisJCQkJCQkJKkUxOTAqICpFMjEyKiAgPgorICBDYW5ub3Qgb3BlbiAie2ZpbGVuYW1lfSIgZm9yIHdyaXRpbmcKKyAgQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nCisKK0ZvciBzb21lIHJlYXNvbiB0aGUgZmlsZSB5b3UgYXJlIHdyaXRpbmcgdG8gY2Fubm90IGJlIGNyZWF0ZWQgb3Igb3ZlcndyaXR0ZW4uCitUaGUgcmVhc29uIGNvdWxkIGJlIHRoYXQgeW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gd3JpdGUgaW4gdGhlIGRpcmVjdG9yeQorb3IgdGhlIGZpbGUgbmFtZSBpcyBub3QgdmFsaWQuCisKKwkJCQkJCQkqRTE2NiogID4KKyAgQ2FuJ3Qgb3BlbiBsaW5rZWQgZmlsZSBmb3Igd3JpdGluZworCitZb3UgYXJlIHRyeWluZyB0byB3cml0ZSB0byBhIGZpbGUgd2hpY2ggY2FuJ3QgYmUgb3ZlcndyaXR0ZW4sIGFuZCB0aGUgZmlsZSBpcworYSBsaW5rIChlaXRoZXIgYSBoYXJkIGxpbmsgb3IgYSBzeW1ib2xpYyBsaW5rKS4gIFdyaXRpbmcgbWlnaHQgc3RpbGwgYmUKK3Bvc3NpYmxlIGlmIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgbGluayBvciB0aGUgZmlsZSBpcyB3cml0YWJsZSwgYnV0CitWaW0gbm93IGRvZXNuJ3Qga25vdyBpZiB5b3Ugd2FudCB0byBkZWxldGUgdGhlIGxpbmsgYW5kIHdyaXRlIHRoZSBmaWxlIGluIGl0cworcGxhY2UsIG9yIGlmIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgZmlsZSBpdHNlbGYgYW5kIHdyaXRlIHRoZSBuZXcgZmlsZSBpbiBpdHMKK3BsYWNlLiAgSWYgeW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRoZSBmaWxlIHVuZGVyIHRoaXMgbmFtZSwgeW91IGhhdmUgdG8KK21hbnVhbGx5IGRlbGV0ZSB0aGUgbGluayBvciB0aGUgZmlsZSwgb3IgY2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBzbyB0aGF0IFZpbQorY2FuIG92ZXJ3cml0ZS4KKworCQkJCQkJCSpFNDYqICA+CisgIENhbm5vdCBzZXQgcmVhZC1vbmx5IHZhcmlhYmxlICJ7bmFtZX0iCisKK1lvdSBhcmUgdHJ5aW5nIHRvIGFzc2lnbiBhIHZhbHVlIHRvIGFuIGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24gfGE6dmFyfCBvciBhIFZpbQoraW50ZXJuYWwgdmFyaWFibGUgfHY6dmFyfCB3aGljaCBpcyByZWFkLW9ubHkuCisKKwkJCQkJCQkqRTkwKiAgPgorICBDYW5ub3QgdW5sb2FkIGxhc3QgYnVmZmVyCisKK1ZpbSBhbHdheXMgcmVxdWlyZXMgb25lIGJ1ZmZlciB0byBiZSBsb2FkZWQsIG90aGVyd2lzZSB0aGVyZSB3b3VsZCBiZSBub3RoaW5nCit0byBkaXNwbGF5IGluIHRoZSB3aW5kb3cuCisKKwkJCQkJCQkqRTQwKiAgPgorICBDYW4ndCBvcGVuIGVycm9yZmlsZSA8ZmlsZW5hbWU+CisKK1doZW4gdXNpbmcgdGhlICI6bWFrZSIgb3IgIjpncmVwIiBjb21tYW5kczogVGhlIGZpbGUgdXNlZCB0byBzYXZlIHRoZSBlcnJvcgorbWVzc2FnZXMgb3IgZ3JlcCBvdXRwdXQgY2Fubm90IGJlIG9wZW5lZC4gIFRoaXMgY2FuIGhhdmUgc2V2ZXJhbCBjYXVzZXM6CistICdzaGVsbHJlZGlyJyBoYXMgYSB3cm9uZyB2YWx1ZS4KKy0gVGhlIHNoZWxsIGNoYW5nZXMgZGlyZWN0b3J5LCBjYXVzaW5nIHRoZSBlcnJvciBmaWxlIHRvIGJlIHdyaXR0ZW4gaW4gYW5vdGhlcgorICBkaXJlY3RvcnkuICBUaGlzIGNvdWxkIGJlIGZpeGVkIGJ5IGNoYW5naW5nICdtYWtlZWYnLCBidXQgdGhlbiB0aGUgbWFrZQorICBjb21tYW5kIGlzIHN0aWxsIGV4ZWN1dGVkIGluIHRoZSB3cm9uZyBkaXJlY3RvcnkuCistICdtYWtlZWYnIGhhcyBhIHdyb25nIHZhbHVlLgorLSBUaGUgJ2dyZXBwcmcnIG9yICdtYWtlcHJnJyBjb3VsZCBub3QgYmUgZXhlY3V0ZWQuICBUaGlzIGNhbm5vdCBhbHdheXMgYmUKKyAgZGV0ZWN0ZWQgKGVzcGVjaWFsbHkgb24gTVMtV2luZG93cykuICBDaGVjayB5b3VyICRQQVRILgorCisgPgorICBDYW4ndCBvcGVuIGZpbGUgQzpcVEVNUFxWSW9EMjQzLlRNUAorCitPbiBNUy1XaW5kb3dzLCB0aGlzIG1lc3NhZ2UgYXBwZWFycyB3aGVuIHRoZSBvdXRwdXQgb2YgYW4gZXh0ZXJuYWwgY29tbWFuZCB3YXMKK3RvIGJlIHJlYWQsIGJ1dCB0aGUgY29tbWFuZCBkaWRuJ3QgcnVuIHN1Y2Nlc3NmdWxseS4gIFRoaXMgY2FuIGJlIGNhdXNlZCBieQorbWFueSB0aGluZ3MuICBDaGVjayB0aGUgJ3NoZWxsJywgJ3NoZWxscXVvdGUnLCAnc2hlbGx4cXVvdGUnLCAnc2hlbGxzbGFzaCcgYW5kCityZWxhdGVkIG9wdGlvbnMuICBJdCBtaWdodCBhbHNvIGJlIHRoYXQgdGhlIGV4dGVybmFsIGNvbW1hbmQgd2FzIG5vdCBmb3VuZCwKK3RoZXJlIGlzIG5vIGRpZmZlcmVudCBlcnJvciBtZXNzYWdlIGZvciB0aGF0LgorCisJCQkJCQkJKkUxMiogID4KKyAgQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaAorCitTb21lIGNvbW1hbmRzIGFyZSBub3QgYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29ucy4gIFRoZXNlIGNvbW1hbmRzIG1vc3RseQorY29tZSBmcm9tIGEgLmV4cmMgb3IgLnZpbXJjIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBvciBmcm9tIGEgdGFncworZmlsZS4gIEFsc28gc2VlICdzZWN1cmUnLgorCisJCQkJCQkJKkU3NCogID4KKyAgQ29tbWFuZCB0b28gY29tcGxleAorCitBIG1hcHBpbmcgcmVzdWx0ZWQgaW4gYSB2ZXJ5IGxvbmcgY29tbWFuZCBzdHJpbmcuICBDb3VsZCBiZSBjYXVzZWQgYnkgYQorbWFwcGluZyB0aGF0IGluZGlyZWN0bHkgY2FsbHMgaXRzZWxmLgorCis+CisgIENPTlZFUlNJT04gRVJST1IKKworV2hlbiB3cml0aW5nIGEgZmlsZSBhbmQgdGhlIHRleHQgIkNPTlZFUlNJT04gRVJST1IiIGFwcGVhcnMsIHRoaXMgbWVhbnMgdGhhdAorc29tZSBiaXRzIHdlcmUgbG9zdCB3aGVuIGNvbnZlcnRpbmcgdGV4dCBmcm9tIHRoZSBpbnRlcm5hbGx5IHVzZWQgVVRGLTggdG8gdGhlCitmb3JtYXQgb2YgdGhlIGZpbGUuICBUaGUgZmlsZSB3aWxsIG5vdCBiZSBtYXJrZWQgdW5tb2RpZmllZC4gIElmIHlvdSBjYXJlCithYm91dCB0aGUgbG9zcyBvZiBpbmZvcm1hdGlvbiwgc2V0IHRoZSAnZmlsZWVuY29kaW5nJyBvcHRpb24gdG8gYW5vdGhlciB2YWx1ZQordGhhdCBjYW4gaGFuZGxlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBidWZmZXIgYW5kIHdyaXRlIGFnYWluLiAgSWYgeW91IGRvbid0CitjYXJlLCB5b3UgY2FuIGFiYW5kb24gdGhlIGJ1ZmZlciBvciByZXNldCB0aGUgJ21vZGlmaWVkJyBvcHRpb24uCisKKwkJCQkJCQkqRTMwMiogID4KKyAgQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUKKworV2hlbiB0aGUgZmlsZSBuYW1lIGNoYW5nZXMsIFZpbSB0cmllcyB0byByZW5hbWUgdGhlIHxzd2FwLWZpbGV8IGFzIHdlbGwuCitUaGlzIGZhaWxlZCBhbmQgdGhlIG9sZCBzd2FwIGZpbGUgaXMgbm93IHN0aWxsIHVzZWQuICBNb3N0bHkgaGFybWxlc3MuCisKKwkJCQkJCQkqRTQzKiAqRTQ0KiAgPgorICBEYW1hZ2VkIG1hdGNoIHN0cmluZworICBDb3JydXB0ZWQgcmVnZXhwIHByb2dyYW0KKworU29tZXRoaW5nIGluc2lkZSBWaW0gd2VudCB3cm9uZyBhbmQgcmVzdWx0ZWQgaW4gYSBjb3JydXB0ZWQgcmVnZXhwLiAgSWYgeW91Citrbm93IGhvdyB0byByZXByb2R1Y2UgdGhpcyBwcm9ibGVtLCBwbGVhc2UgcmVwb3J0IGl0LiB8YnVnc3wKKworCQkJCQkJCSpFMjA4KiAqRTIwOSogKkUyMTAqICA+CisgIEVycm9yIHdyaXRpbmcgdG8gIntmaWxlbmFtZX0iCisgIEVycm9yIGNsb3NpbmcgIntmaWxlbmFtZX0iCisgIEVycm9yIHJlYWRpbmcgIntmaWxlbmFtZX0iCisKK1RoaXMgb2NjdXJzIHdoZW4gVmltIGlzIHRyeWluZyB0byByZW5hbWUgYSBmaWxlLCBidXQgYSBzaW1wbGUgY2hhbmdlIG9mIGZpbGUKK25hbWUgZG9lc24ndCB3b3JrLiAgVGhlbiB0aGUgZmlsZSB3aWxsIGJlIGNvcGllZCwgYnV0IHNvbWVob3cgdGhpcyBmYWlsZWQuCitUaGUgcmVzdWx0IG1heSBiZSB0aGF0IGJvdGggdGhlIG9yaWdpbmFsIGZpbGUgYW5kIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGV4aXN0CithbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbWF5IGJlIGluY29tcGxldGUuCisKKz4KKyAgVmltOiBFcnJvciByZWFkaW5nIGlucHV0LCBleGl0aW5nLi4uCisKK1RoaXMgb2NjdXJzIHdoZW4gVmltIGNhbm5vdCByZWFkIHR5cGVkIGNoYXJhY3RlcnMgd2hpbGUgaW5wdXQgaXMgcmVxdWlyZWQuCitWaW0gZ290IHN0dWNrLCB0aGUgb25seSB0aGluZyBpdCBjYW4gZG8gaXMgZXhpdC4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGJvdGgKK3N0ZGluIGFuZCBzdGRlcnIgYXJlIHJlZGlyZWN0ZWQgYW5kIGV4ZWN1dGluZyBhIHNjcmlwdCB0aGF0IGRvZXNuJ3QgZXhpdCBWaW0uCisKKwkJCQkJCQkqRTQ3KiAgPgorICBFcnJvciB3aGlsZSByZWFkaW5nIGVycm9yZmlsZQorCitSZWFkaW5nIHRoZSBlcnJvciBmaWxlIHdhcyBub3QgcG9zc2libGUuICBUaGlzIGlzIE5PVCBjYXVzZWQgYnkgYW4gZXJyb3IKK21lc3NhZ2UgdGhhdCB3YXMgbm90IHJlY29nbml6ZWQuCisKKwkJCQkJCQkqRTgwKiAgPgorICBFcnJvciB3aGlsZSB3cml0aW5nCisKK1dyaXRpbmcgYSBmaWxlIHdhcyBub3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gIFRoZSBmaWxlIGlzIHByb2JhYmx5CitpbmNvbXBsZXRlLgorCisJCQkJCQkJKkUxMyogKkUxODkqICA+CisgIEZpbGUgZXhpc3RzICh1c2UgISB0byBvdmVycmlkZSkKKyAgIntmaWxlbmFtZX0iIGV4aXN0cyAodXNlICEgdG8gb3ZlcnJpZGUpCisKK1lvdSBhcmUgcHJvdGVjdGVkIGZyb20gYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIGEgZmlsZS4gIFdoZW4geW91IHdhbnQgdG8KK3dyaXRlIGFueXdheSwgdXNlIHRoZSBzYW1lIGNvbW1hbmQsIGJ1dCBhZGQgYSAiISIganVzdCBhZnRlciB0aGUgY29tbWFuZC4KK0V4YW1wbGU6ID4KKwk6dyAvdG1wL3Rlc3QKK2NoYW5nZXMgdG86ID4KKwk6dyEgL3RtcC90ZXN0Cis8CisJCQkJCQkJKkUxMzkqICA+CisgIEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyCisKK1lvdSBhcmUgdHJ5aW5nIHRvIHdyaXRlIGEgZmlsZSB1bmRlciBhIG5hbWUgd2hpY2ggaXMgYWxzbyB1c2VkIGluIGFub3RoZXIKK2J1ZmZlci4gIFRoaXMgd291bGQgcmVzdWx0IGluIHR3byB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBmaWxlLgorCisJCQkJCQkJKkUxNDIqICA+CisgIEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24KKworVGhlICd3cml0ZScgb3B0aW9uIGlzIG9mZi4gIFRoaXMgbWFrZXMgYWxsIGNvbW1hbmRzIHRoYXQgdHJ5IHRvIHdyaXRlIGEgZmlsZQorZ2VuZXJhdGUgdGhpcyBtZXNzYWdlLiAgVGhpcyBjb3VsZCBiZSBjYXVzZWQgYnkgYSB8LW18IGNvbW1hbmRsaW5lIGFyZ3VtZW50LgorWW91IGNhbiBzd2l0Y2ggdGhlICd3cml0ZScgb3B0aW9uIG9uIHdpdGggIjpzZXQgd3JpdGUiLgorCisJCQkJCQkJKkUyNSogID4KKyAgR1VJIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUKKworWW91IGFyZSBydW5uaW5nIGEgdmVyc2lvbiBvZiBWaW0gdGhhdCBkb2Vzbid0IGluY2x1ZGUgdGhlIEdVSSBjb2RlLiAgVGhlcmVmb3JlCisiZ3ZpbSIgYW5kICI6Z3VpIiBkb24ndCB3b3JrLgorCisJCQkJCQkJKkU0OSogID4KKyAgSW52YWxpZCBzY3JvbGwgc2l6ZQorCitUaGlzIGlzIGNhdXNlZCBieSBzZXR0aW5nIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSAnc2Nyb2xsJywgJ3Njcm9sbGp1bXAnIG9yCisnc2Nyb2xsb2ZmJyBvcHRpb25zLgorCisJCQkJCQkJKkUxNyogID4KKyAgIntmaWxlbmFtZX0iIGlzIGEgZGlyZWN0b3J5CisKK1lvdSB0cmllZCB0byB3cml0ZSBhIGZpbGUgd2l0aCB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeS4gIFRoaXMgaXMgbm90IHBvc3NpYmxlLgorWW91IHByb2JhYmx5IG5lZWQgdG8gYXBwZW5kIGEgZmlsZSBuYW1lLgorCisJCQkJCQkJKkUxOSogID4KKyAgTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlcgorCitZb3UgYXJlIHVzaW5nIGEgbWFyayB0aGF0IGhhcyBhIGxpbmUgbnVtYmVyIHRoYXQgZG9lc24ndCBleGlzdC4gIFRoaXMgY2FuCitoYXBwZW4gd2hlbiB5b3UgaGF2ZSBhIG1hcmsgaW4gYW5vdGhlciBmaWxlLCBhbmQgc29tZSBvdGhlciBwcm9ncmFtIGhhcworZGVsZXRlZCBsaW5lcyBmcm9tIGl0LgorCisJCQkJCQkJKkUyMTkqICpFMjIwKiAgPgorICBNaXNzaW5nIHsuCisgIE1pc3NpbmcgfS4KKworVXNpbmcgYSB7fSBjb25zdHJ1Y3QgaW4gYSBmaWxlIG5hbWUsIGJ1dCB0aGVyZSBpcyBhIHsgd2l0aG91dCBhIG1hdGNoaW5nIH0gb3IKK3RoZSBvdGhlciB3YXkgYXJvdW5kLiAgSXQgc2hvdWxkIGJlIHVzZWQgbGlrZSB0aGlzOiB7Zm9vLGJhcn0uICBUaGlzIG1hdGNoZXMKKyJmb28iIGFuZCAiYmFyIi4KKworCQkJCQkJCSpFMzE1KiAgPgorICBtbF9nZXQ6IGludmFsaWQgbG51bToKKworVGhpcyBpcyBhbiBpbnRlcm5hbCBWaW0gZXJyb3IuICBQbGVhc2UgdHJ5IHRvIGZpbmQgb3V0IGhvdyBpdCBjYW4gYmUKK3JlcHJvZHVjZWQsIGFuZCBzdWJtaXQgYSBidWcgcmVwb3J0IHxidWdyZXBvcnQudmltfC4KKworCQkJCQkJCSpFMTczKiAgPgorICB7bnVtYmVyfSBtb3JlIGZpbGVzIHRvIGVkaXQKKworWW91IGFyZSB0cnlpbmcgdG8gZXhpdCwgd2hpbGUgdGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJndW1lbnQgbGlzdCBoYXMgbm90IGJlZW4KK2VkaXRlZC4gIFRoaXMgcHJvdGVjdHMgeW91IGZyb20gYWNjaWRlbnRhbGx5IGV4aXRpbmcgd2hlbiB5b3Ugc3RpbGwgaGF2ZSBtb3JlCitmaWxlcyB0byB3b3JrIG9uLiAgU2VlIHxhcmd1bWVudC1saXN0fC4gIElmIHlvdSBkbyB3YW50IHRvIGV4aXQsIGp1c3QgZG8gaXQKK2FnYWluIGFuZCBpdCB3aWxsIHdvcmsuCisKKwkJCQkJCQkqRTIzKiAqRTE5NCogID4KKyAgTm8gYWx0ZXJuYXRlIGZpbGUKKyAgTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIycKKworVGhlIGFsdGVybmF0ZSBmaWxlIGlzIG5vdCBkZWZpbmVkIHlldC4gIFNlZSB8YWx0ZXJuYXRlLWZpbGV8LgorCisJCQkJCQkJKkUzMiogID4KKyAgTm8gZmlsZSBuYW1lCisKK1RoZSBjdXJyZW50IGJ1ZmZlciBoYXMgbm8gbmFtZS4gIFRvIHdyaXRlIGl0LCB1c2UgIjp3IGZuYW1lIi4gIE9yIGdpdmUgdGhlCitidWZmZXIgYSBuYW1lIHdpdGggIjpmaWxlIGZuYW1lIi4KKworCQkJCQkJCSpFMTQxKiAgPgorICBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciB7bnVtYmVyfQorCitPbmUgb2YgdGhlIGJ1ZmZlcnMgdGhhdCB3YXMgY2hhbmdlZCBkb2VzIG5vdCBoYXZlIGEgZmlsZSBuYW1lLiAgVGhlcmVmb3JlIGl0CitjYW5ub3QgYmUgd3JpdHRlbi4gIFlvdSBuZWVkIHRvIGdpdmUgdGhlIGJ1ZmZlciBhIGZpbGUgbmFtZTogPgorCTpidWZmZXIge251bWJlcn0KKwk6ZmlsZSB7ZmlsZW5hbWV9Cis8CisJCQkJCQkJKkUzMyogID4KKyAgTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24KKworV2hlbiB1c2luZyB0aGUgJ34nIGNoYXJhY3RlciBpbiBhIHBhdHRlcm4sIGl0IGlzIHJlcGxhY2VkIHdpdGggdGhlIHByZXZpb3VzbHkKK3VzZWQgcGF0dGVybiBpbiBhICI6c3Vic3RpdHV0ZSIgY29tbWFuZC4gIFRoaXMgZmFpbHMgd2hlbiBubyBzdWNoIGNvbW1hbmQgaGFzCitiZWVuIHVzZWQgeWV0LiAgU2VlIHwvfnwuCisKKwkJCQkJCQkqRTM1KiAgPgorICBObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24KKworV2hlbiB1c2luZyBhbiBlbXB0eSBzZWFyY2ggcGF0dGVybiwgdGhlIHByZXZpb3VzIHNlYXJjaCBwYXR0ZXJuIGlzIHVzZWQuICBCdXQKK3RoYXQgaXMgbm90IHBvc3NpYmxlIGlmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBzZWFyY2guCisKKwkJCQkJCQkqRTI0KiAgPgorICBObyBzdWNoIGFiYnJldmlhdGlvbgorCitZb3UgaGF2ZSB1c2VkIGFuICI6dW5hYmJyZXZpYXRlIiBjb21tYW5kIHdpdGggYW4gYXJndW1lbnQgd2hpY2ggaXMgbm90IGFuCitleGlzdGluZyBhYmJyZXZpYXRpb24uICBBbGwgdmFyaWF0aW9ucyBvZiB0aGlzIGNvbW1hbmQgZ2l2ZSB0aGUgc2FtZSBtZXNzYWdlOgorIjpjdW5hYmJyZXYiLCAiOml1bmFiYnJldiIsIGV0Yy4gIENoZWNrIGZvciB0cmFpbGluZyB3aGl0ZSBzcGFjZS4KKworPgorICAvZGV2L2RzcDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitPbmx5IGdpdmVuIGZvciBHVEsgR1VJIHdpdGggR25vbWUgc3VwcG9ydC4gIEdub21lIHRyaWVzIHRvIHVzZSB0aGUgYXVkaW8KK2RldmljZSBhbmQgaXQgaXNuJ3QgcHJlc2VudC4gIFlvdSBjYW4gaWdub3JlIHRoaXMgZXJyb3IuCisKKwkJCQkJCQkqRTMxKiAgPgorICBObyBzdWNoIG1hcHBpbmcKKworWW91IGhhdmUgdXNlZCBhbiAiOnVubWFwIiBjb21tYW5kIHdpdGggYW4gYXJndW1lbnQgd2hpY2ggaXMgbm90IGFuIGV4aXN0aW5nCittYXBwaW5nLiAgQWxsIHZhcmlhdGlvbnMgb2YgdGhpcyBjb21tYW5kIGdpdmUgdGhlIHNhbWUgbWVzc2FnZTogIjpjdW5tYXAiLAorIjp1bm1hcCEiLCBldGMuICBDaGVjayBmb3IgdHJhaWxpbmcgd2hpdGUgc3BhY2UuCisKKwkJCQkJCQkqRTM3KiAqRTg5KiAgPgorICBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAodXNlICEgdG8gb3ZlcnJpZGUpCisgIE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIge059ICh1c2UgISB0byBvdmVycmlkZSkKKworWW91IGFyZSB0cnlpbmcgdG8gfGFiYW5kb258IGEgZmlsZSB0aGF0IGhhcyBjaGFuZ2VzLiAgVmltIHByb3RlY3RzIHlvdSBmcm9tCitsb3NpbmcgeW91ciB3b3JrLiAgWW91IGNhbiBlaXRoZXIgd3JpdGUgdGhlIGNoYW5nZWQgZmlsZSB3aXRoICI6dyIsIG9yLCBpZiB5b3UKK2FyZSBzdXJlLCB8YWJhbmRvbnwgaXQgYW55d2F5LCBhbmQgbG9zZSBhbGwgdGhlIGNoYW5nZXMuICBUaGlzIGNhbiBiZSBkb25lIGJ5CithZGRpbmcgYSAnIScgY2hhcmFjdGVyIGp1c3QgYWZ0ZXIgdGhlIGNvbW1hbmQgeW91IHVzZWQuICBFeGFtcGxlOiA+CisJOmUgb3RoZXJfZmlsZQorY2hhbmdlcyB0bzogPgorCTplISBvdGhlcl9maWxlCis8CisJCQkJCQkJKkUxNjIqICA+CisgIE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgIntuYW1lfSIKKworVGhpcyBhcHBlYXJzIHdoZW4geW91IHRyeSB0byBleGl0IFZpbSB3aGlsZSBzb21lIGJ1ZmZlcnMgYXJlIGNoYW5nZWQuICBZb3UKK3dpbGwgZWl0aGVyIGhhdmUgdG8gd3JpdGUgdGhlIGNoYW5nZWQgYnVmZmVyICh3aXRoIHw6d3wpLCBvciB1c2UgYSBjb21tYW5kIHRvCithYmFuZG9uIHRoZSBidWZmZXIgZm9yY2VmdWxseSwgZS5nLiwgd2l0aCAiOnFhISIuICBDYXJlZnVsLCBtYWtlIHN1cmUgeW91Citkb24ndCB0aHJvdyBhd2F5IGNoYW5nZXMgeW91IHJlYWxseSB3YW50IHRvIGtlZXAuICBZb3UgbWlnaHQgaGF2ZSBmb3Jnb3R0ZW4KK2Fib3V0IGEgYnVmZmVyLCBlc3BlY2lhbGx5IHdoZW4gJ2hpZGRlbicgaXMgc2V0LgorCisJCQkJCQkJKkUzOCogID4KKyAgTnVsbCBhcmd1bWVudAorCitTb21ldGhpbmcgaW5zaWRlIFZpbSB3ZW50IHdyb25nIGFuZCByZXN1bHRlZCBpbiBhIE5VTEwgcG9pbnRlci4gIElmIHlvdSBrbm93Citob3cgdG8gcmVwcm9kdWNlIHRoaXMgcHJvYmxlbSwgcGxlYXNlIHJlcG9ydCBpdC4gfGJ1Z3N8CisKKwkJCQkJCQkqRTE3MiogID4KKyAgT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQKKworVGhlICI6ZWRpdCIgY29tbWFuZCBvbmx5IGFjY2VwdHMgb25lIGZpbGUgbmFtZS4gIFdoZW4geW91IHdhbnQgdG8gc3BlY2lmeQorc2V2ZXJhbCBmaWxlcyBmb3IgZWRpdGluZyB1c2UgIjpuZXh0IiB8Om5leHR8LgorCisJCQkJCQkqRTQxKiAqRTgyKiAqRTgzKiAqRTM0MiogID4KKyAgT3V0IG9mIG1lbW9yeSEKKyAgT3V0IG9mIG1lbW9yeSEgIChhbGxvY2F0aW5nIHtudW1iZXJ9IGJ5dGVzKQorICBDYW5ub3QgYWxsb2NhdGUgYW55IGJ1ZmZlciwgZXhpdGluZy4uLgorICBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4KKworT2gsIG9oLiAgWW91IG11c3QgaGF2ZSBiZWVuIGRvaW5nIHNvbWV0aGluZyBjb21wbGljYXRlZCwgb3Igc29tZSBvdGhlciBwcm9ncmFtCitpcyBjb25zdW1pbmcgeW91ciBtZW1vcnkuICBCZSBjYXJlZnVsISAgVmltIGlzIG5vdCBjb21wbGV0ZWx5IHByZXBhcmVkIGZvciBhbgorb3V0LW9mLW1lbW9yeSBzaXR1YXRpb24uICBGaXJzdCBtYWtlIHN1cmUgdGhhdCBhbnkgY2hhbmdlcyBhcmUgc2F2ZWQuICBUaGVuCit0cnkgdG8gc29sdmUgdGhlIG1lbW9yeSBzaG9ydGFnZS4gIFRvIHN0YXkgb24gdGhlIHNhZmUgc2lkZSwgZXhpdCBWaW0gYW5kCitzdGFydCBhZ2Fpbi4gIEFsc28gc2VlIHxtc2Rvcy1saW1pdGF0aW9uc3wuCisKKwkJCQkJCQkqRTMzOSogID4KKyAgUGF0dGVybiB0b28gbG9uZworCitUaGlzIG9ubHkgaGFwcGVucyBvbiBzeXN0ZW1zIHdpdGggMTYgYml0IGludHM6IFRoZSBjb21waWxlZCByZWdleHAgcGF0dGVybiBpcworbG9uZ2VyIHRoYW4gYWJvdXQgNjUwMDAgY2hhcmFjdGVycy4gIFRyeSB1c2luZyBhIHNob3J0ZXIgcGF0dGVybi4KKworCQkJCQkJCSpFNDUqICA+CisgICdyZWFkb25seScgb3B0aW9uIGlzIHNldCAodXNlICEgdG8gb3ZlcnJpZGUpCisKK1lvdSBhcmUgdHJ5aW5nIHRvIHdyaXRlIGEgZmlsZSB0aGF0IHdhcyBtYXJrZWQgYXMgcmVhZC1vbmx5LiAgVG8gd3JpdGUgdGhlCitmaWxlIGFueXdheSwgZWl0aGVyIHJlc2V0IHRoZSAncmVhZG9ubHknIG9wdGlvbiwgb3IgYWRkIGEgJyEnIGNoYXJhY3RlciBqdXN0CithZnRlciB0aGUgY29tbWFuZCB5b3UgdXNlZC4gIEV4YW1wbGU6ID4KKwk6dworY2hhbmdlcyB0bzogPgorCTp3IQorPAorCQkJCQkJCSpFMjk0KiAqRTI5NSogKkUzMDEqICA+CisgIFJlYWQgZXJyb3IgaW4gc3dhcCBmaWxlCisgIFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHJlYWQKKyAgT29wcywgbG9zdCB0aGUgc3dhcCBmaWxlISEhCisKK1ZpbSB0cmllZCB0byByZWFkIHRleHQgZnJvbSB0aGUgfHN3YXAtZmlsZXwsIGJ1dCBzb21ldGhpbmcgd2VudCB3cm9uZy4gIFRoZQordGV4dCBpbiB0aGUgcmVsYXRlZCBidWZmZXIgbWF5IG5vdyBiZSBjb3JydXB0ZWQhICBDaGVjayBjYXJlZnVsbHkgYmVmb3JlIHlvdQord3JpdGUgYSBidWZmZXIuICBZb3UgbWF5IHdhbnQgdG8gd3JpdGUgaXQgaW4gYW5vdGhlciBmaWxlIGFuZCBjaGVjayBmb3IKK2RpZmZlcmVuY2VzLgorCisJCQkJCQkJKkUxOTIqICA+CisgIFJlY3Vyc2l2ZSB1c2Ugb2YgOm5vcm1hbCB0b28gZGVlcAorCitZb3UgYXJlIHVzaW5nIGEgIjpub3JtYWwiIGNvbW1hbmQsIHdob3NlIGFyZ3VtZW50IGFnYWluIHVzZXMgYSAiOm5vcm1hbCIKK2NvbW1hbmQgaW4gYSByZWN1cnNpdmUgd2F5LiAgVGhpcyBpcyByZXN0cmljdGVkIHRvICdtYXhtYXBkZXB0aCcgbGV2ZWxzLiAgVGhpcworZXhhbXBsZSBpbGx1c3RyYXRlcyBob3cgdG8gZ2V0IHRoaXMgbWVzc2FnZTogPgorCTptYXAgZ3EgOm5vcm1hbCBncTxDUj4KK0lmIHlvdSB0eXBlICJncSIsIGl0IHdpbGwgZXhlY3V0ZSB0aGlzIG1hcHBpbmcsIHdoaWNoIHdpbGwgY2FsbCAiZ3EiIGFnYWluLgorCisJCQkJCQkJKkUyMiogID4KKyAgU2NyaXB0cyBuZXN0ZWQgdG9vIGRlZXAKKworU2NyaXB0cyBjYW4gYmUgcmVhZCB3aXRoIHRoZSAiLXMiIGNvbW1hbmQtbGluZSBhcmd1bWVudCBhbmQgd2l0aCB0aGUgIjpzb3VyY2UiCitjb21tYW5kLiAgVGhlIHNjcmlwdCBjYW4gdGhlbiBhZ2FpbiByZWFkIGFub3RoZXIgc2NyaXB0LiAgVGhpcyBjYW4gY29udGludWUKK2ZvciBhYm91dCAxNCBsZXZlbHMuICBXaGVuIG1vcmUgbmVzdGluZyBpcyBkb25lLCBWaW0gYXNzdW1lcyB0aGF0IHRoZXJlIGlzIGEKK3JlY3Vyc2l2ZSBsb29wIHNvbWV3aGVyZSBhbmQgc3RvcHMgd2l0aCB0aGlzIGVycm9yIG1lc3NhZ2UuCisKKwkJCQkJCQkqRTMxOSogID4KKyAgU29ycnksIHRoZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uCisKK1lvdSBoYXZlIHVzZWQgYSBjb21tYW5kIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIHZlcnNpb24gb2YgVmltIHlvdSBhcmUKK3VzaW5nLiAgV2hlbiBjb21waWxpbmcgVmltLCBtYW55IGRpZmZlcmVudCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBvcgorZGlzYWJsZWQuICBUaGlzIGRlcGVuZHMgb24gaG93IGJpZyBWaW0gaGFzIGNob3NlbiB0byBiZSBhbmQgdGhlIG9wZXJhdGluZworc3lzdGVtLiAgU2VlIHwrZmVhdHVyZS1saXN0fCBmb3Igd2hlbiB3aGljaCBmZWF0dXJlIGlzIGF2YWlsYWJsZS4gIFRoZQorfDp2ZXJzaW9ufCBjb21tYW5kIHNob3dzIHdoaWNoIGZlYXR1cmUgVmltIHdhcyBjb21waWxlZCB3aXRoLgorCisJCQkJCQkJKkUzMDAqICA+CisgIFN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyAoc3ltbGluayBhdHRhY2s/KQorCitUaGlzIG1lc3NhZ2UgYXBwZWFycyB3aGVuIFZpbSBpcyB0cnlpbmcgdG8gb3BlbiBhIHN3YXAgZmlsZSBhbmQgZmluZHMgaXQKK2FscmVhZHkgZXhpc3RzIG9yIGZpbmRzIGEgc3ltYm9saWMgbGluayBpbiBpdHMgcGxhY2UuICBUaGlzIHNob3VsZG4ndCBoYXBwZW4sCitiZWNhdXNlIFZpbSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LiAgRWl0aGVyIHNvbWVvbmUgZWxzZQorb3BlbmVkIHRoZSBzYW1lIGZpbGUgYXQgZXhhY3RseSB0aGUgc2FtZSBtb21lbnQgKHZlcnkgdW5saWtlbHkpIG9yIHNvbWVvbmUgaXMKK2F0dGVtcHRpbmcgYSBzeW1saW5rIGF0dGFjayAoY291bGQgaGFwcGVuIHdoZW4gZWRpdGluZyBhIGZpbGUgaW4gL3RtcCBvciB3aGVuCisnZGlyZWN0b3J5JyBzdGFydHMgd2l0aCAiL3RtcCIsIHdoaWNoIGlzIGEgYmFkIGNob2ljZSkuCisKKwkJCQkJCQkqRTQzMiogID4KKyAgVGFncyBmaWxlIG5vdCBzb3J0ZWQ6IHtmaWxlIG5hbWV9CisKK1ZpbSAoYW5kIFZpKSBleHBlY3QgdGFncyBmaWxlcyB0byBiZSBzb3J0ZWQgaW4gQVNDSUkgb3JkZXIuICBCaW5hcnkgc2VhcmNoaW5nCitjYW4gdGhlbiBiZSB1c2VkLCB3aGljaCBpcyBhIGxvdCBmYXN0ZXIgdGhhbiBhIGxpbmVhciBzZWFyY2guICBJZiB5b3VyIHRhZ3MKK2ZpbGVzIGFyZSBub3QgcHJvcGVybHkgc29ydGVkLCByZXNldCB0aGUgfCd0YWdic2VhcmNoJ3wgb3B0aW9uLgorVGhpcyBtZXNzYWdlIGlzIG9ubHkgZ2l2ZW4gd2hlbiBWaW0gZGV0ZWN0cyBhIHByb2JsZW0gd2hlbiBzZWFyY2hpbmcgZm9yIGEKK3RhZy4gIFNvbWV0aW1lcyB0aGlzIG1lc3NhZ2UgaXMgbm90IGdpdmVuLCBldmVuIHRob3VnaHQgdGhlIHRhZ3MgZmlsZSBpcyBub3QKK3Byb3Blcmx5IHNvcnRlZC4KKworCQkJCQkJCSpFNDYwKiAgPgorICBUaGUgcmVzb3VyY2UgZm9yayB3b3VsZCBiZSBsb3N0IChhZGQgISB0byBvdmVycmlkZSkKKworT24gdGhlIE1hY2ludG9zaCAoY2xhc3NpYyksIHdoZW4gd3JpdGluZyBhIGZpbGUsIFZpbSBhdHRlbXB0cyB0byBwcmVzZXJ2ZSBhbGwKK2luZm8gYWJvdXQgYSBmaWxlLCBpbmNsdWRpbmcgaXRzIHJlc291cmNlIGZvcmsuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSB5b3UKK2dldCB0aGlzIGVycm9yIG1lc3NhZ2UuICBBcHBlbmQgIiEiIHRvIHRoZSBjb21tYW5kIG5hbWUgdG8gd3JpdGUgYW55d2F5IChhbmQKK2xvc2UgdGhlIGluZm8pLgorCisJCQkJCQkJKkU0MjQqICA+CisgIFRvbyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBpbiB1c2UKKworVmltIGNhbiBvbmx5IGhhbmRsZSBhYm91dCAyMjMgZGlmZmVyZW50IGtpbmRzIG9mIGhpZ2hsaWdodGluZy4gIElmIHlvdSBydW4KK2ludG8gdGhpcyBsaW1pdCwgeW91IGhhdmUgdXNlZCB0b28gbWFueSB8OmhpZ2hsaWdodHwgY29tbWFuZHMgd2l0aCBkaWZmZXJlbnQKK2FyZ3VtZW50cy4gIEEgIjpoaWdobGlnaHQgbGluayIgaXMgbm90IGNvdW50ZWQuCisKKwkJCQkJCQkqRTc3KiAgPgorICBUb28gbWFueSBmaWxlIG5hbWVzCisKK1doZW4gZXhwYW5kaW5nIGZpbGUgbmFtZXMsIG1vcmUgdGhhbiBvbmUgbWF0Y2ggd2FzIGZvdW5kLiAgT25seSBvbmUgbWF0Y2ggaXMKK2FsbG93ZWQgZm9yIHRoZSBjb21tYW5kIHRoYXQgd2FzIHVzZWQuCisKKwkJCQkJCQkqRTMwMyogID4KKyAgVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciAie2ZpbGVuYW1lfSIsIHJlY292ZXJ5IGltcG9zc2libGUKKworVmltIHdhcyBub3QgYWJsZSB0byBjcmVhdGUgYSBzd2FwIGZpbGUuICBZb3UgY2FuIHN0aWxsIGVkaXQgdGhlIGZpbGUsIGJ1dCBpZgorVmltIHVuZXhwZWN0ZWQgZXhpdHMgdGhlIGNoYW5nZXMgd2lsbCBiZSBsb3N0LiAgQW5kIFZpbSBtYXkgY29uc3VtZSBhIGxvdCBvZgorbWVtb3J5IHdoZW4gZWRpdGluZyBhIGJpZyBmaWxlLiAgWW91IG1heSB3YW50IHRvIGNoYW5nZSB0aGUgJ2RpcmVjdG9yeScgb3B0aW9uCit0byBhdm9pZCB0aGlzIGVycm9yLiAgU2VlIHxzd2FwLWZpbGV8LgorCisJCQkJCQkJKkUxNDAqICA+CisgIFVzZSAhIHRvIHdyaXRlIHBhcnRpYWwgYnVmZmVyCisKK1doZW4gdXNpbmcgYSByYW5nZSB0byB3cml0ZSBwYXJ0IG9mIGEgYnVmZmVyLCBpdCBpcyB1bnVzdWFsIHRvIG92ZXJ3cml0ZSB0aGUKK29yaWdpbmFsIGZpbGUuICBJdCBpcyBwcm9iYWJseSBhIG1pc3Rha2UgKGUuZy4sIHdoZW4gVmlzdWFsIG1vZGUgd2FzIGFjdGl2ZQord2hlbiB1c2luZyAiOnciKSwgdGhlcmVmb3JlIFZpbSByZXF1aXJlcyB1c2luZyBhICEgIGFmdGVyIHRoZSBjb21tYW5kLCBlLmcuOgorIjozLDEwdyEiLgorPgorCisgIFdhcm5pbmc6IENhbm5vdCBjb252ZXJ0IHN0cmluZyAiPEtleT5Fc2NhcGUsX0tleV9DYW5jZWwiIHRvIHR5cGUKKyAgVmlydHVhbEJpbmRpbmcKKworTWVzc2FnZXMgbGlrZSB0aGlzIGFwcGVhciB3aGVuIHN0YXJ0aW5nIHVwLiAgVGhpcyBpcyBub3QgYSBWaW0gcHJvYmxlbSwgeW91cgorWDExIGNvbmZpZ3VyYXRpb24gaXMgd3JvbmcuICBZb3UgY2FuIGZpbmQgYSBoaW50IG9uIGhvdyB0byBzb2x2ZSB0aGlzIGhlcmU6CitodHRwOi8vZ3JvdXBzLnlhaG9vLmNvbS9ncm91cC9zb2xhcmlzb25pbnRlbC9tZXNzYWdlLzEyMTc5LgorCisJCQkJCQkJKlcxMCogID4KKyAgV2FybmluZzogQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlCisKK1RoZSBmaWxlIGlzIHJlYWQtb25seSBhbmQgeW91IGFyZSBtYWtpbmcgYSBjaGFuZ2UgdG8gaXQgYW55d2F5LiAgWW91IGNhbiB1c2UKK3RoZSB8RmlsZUNoYW5nZWRST3wgYXV0b2NvbW1hbmQgZXZlbnQgdG8gYXZvaWQgdGhpcyBtZXNzYWdlICh0aGUgYXV0b2NvbW1hbmQKK211c3QgcmVzZXQgdGhlICdyZWFkb25seScgb3B0aW9uKS4gIFNlZSAnbW9kaWZpYWJsZScgdG8gY29tcGxldGVseSBkaXNhbGxvdworbWFraW5nIGNoYW5nZXMgdG8gYSBmaWxlLgorCisJCQkJCQkJKlcxMyogID4KKyAgV2FybmluZzogRmlsZSAie2ZpbGVuYW1lfSIgaGFzIGJlZW4gY3JlYXRlZCBhZnRlciBlZGl0aW5nIHN0YXJ0ZWQKKworWW91IGFyZSBlZGl0aW5nIGEgZmlsZSBpbiBWaW0gd2hlbiBpdCBkaWRuJ3QgZXhpc3QsIGJ1dCBpdCBkb2VzIGV4aXN0IG5vdy4KK1lvdSB3aWxsIGhhdmUgdG8gZGVjaWRlIGlmIHlvdSB3YW50IHRvIGtlZXAgdGhlIHZlcnNpb24gaW4gVmltIG9yIHRoZSBuZXdseQorY3JlYXRlZCBmaWxlLiAgVGhpcyBtZXNzYWdlIGlzIG5vdCBnaXZlbiB3aGVuICdidWZ0eXBlJyBpcyBub3QgZW1wdHkuCisKKwkJCQkJCQkqVzExKiAgPgorICBXYXJuaW5nOiBGaWxlICJ7ZmlsZW5hbWV9IiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQKKworVGhlIGZpbGUgd2hpY2ggeW91IGhhdmUgc3RhcnRlZCBlZGl0aW5nIGhhcyBnb3QgYW5vdGhlciB0aW1lc3RhbXAgYW5kIHRoZQorY29udGVudHMgY2hhbmdlZCAobW9yZSBwcmVjaXNlbHk6IFdoZW4gcmVhZGluZyB0aGUgZmlsZSBhZ2FpbiB3aXRoIHRoZSBjdXJyZW50CitvcHRpb24gc2V0dGluZ3MgYW5kIGF1dG9jb21tYW5kcyB5b3Ugd291bGQgZW5kIHVwIHdpdGggZGlmZmVyZW50IHRleHQpLiAgVGhpcworcHJvYmFibHkgbWVhbnMgdGhhdCBzb21lIG90aGVyIHByb2dyYW0gY2hhbmdlZCB0aGUgZmlsZS4gIFlvdSB3aWxsIGhhdmUgdG8KK2ZpbmQgb3V0IHdoYXQgaGFwcGVuZWQsIGFuZCBkZWNpZGUgd2hpY2ggdmVyc2lvbiBvZiB0aGUgZmlsZSB5b3Ugd2FudCB0byBrZWVwLgorU2V0IHRoZSAnYXV0b3JlYWQnIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBkbyB0aGlzIGF1dG9tYXRpY2FsbHkuCitUaGlzIG1lc3NhZ2UgaXMgbm90IGdpdmVuIHdoZW4gJ2J1ZnR5cGUnIGlzIG5vdCBlbXB0eS4KKworVGhlcmUgaXMgb25lIHNpdHVhdGlvbiB3aGVyZSB5b3UgZ2V0IHRoaXMgbWVzc2FnZSBldmVuIHRob3VnaCB0aGVyZSBpcyBub3RoaW5nCit3cm9uZzogSWYgeW91IHNhdmUgYSBmaWxlIGluIFdpbmRvd3Mgb24gdGhlIGRheSB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUKK3N0YXJ0cy4gIEl0IGNhbiBiZSBmaXhlZCBpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKy0gQWRkIHRoaXMgbGluZSBpbiB5b3VyIGF1dG9leGVjLmJhdDogPgorCSAgIFNFVCBUWj0tMQorPCBBZGp1c3QgdGhlICItMSIgZm9yIHlvdXIgdGltZSB6b25lLgorLSBEaXNhYmxlICJhdXRvbWF0aWNhbGx5IGFkanVzdCBjbG9jayBmb3IgZGF5bGlnaHQgc2F2aW5nIGNoYW5nZXMiLgorLSBKdXN0IHdyaXRlIHRoZSBmaWxlIGFnYWluIHRoZSBuZXh0IGRheS4gIE9yIHNldCB5b3VyIGNsb2NrIHRvIHRoZSBuZXh0IGRheSwKKyAgd3JpdGUgdGhlIGZpbGUgdHdpY2UgYW5kIHNldCB0aGUgY2xvY2sgYmFjay4KKworCQkJCQkJCSpXMTIqICA+CisgIFdhcm5pbmc6IEZpbGUgIntmaWxlbmFtZX0iIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyB3ZWxsCisKK0xpa2UgdGhlIGFib3ZlLCBhbmQgdGhlIGJ1ZmZlciBmb3IgdGhlIGZpbGUgd2FzIGNoYW5nZWQgaW4gdGhpcyBWaW0gYXMgd2VsbC4KK1lvdSB3aWxsIGhhdmUgdG8gZGVjaWRlIGlmIHlvdSB3YW50IHRvIGtlZXAgdGhlIHZlcnNpb24gaW4gdGhpcyBWaW0gb3IgdGhlIG9uZQorb24gZGlzay4gIFRoaXMgbWVzc2FnZSBpcyBub3QgZ2l2ZW4gd2hlbiAnYnVmdHlwZScgaXMgbm90IGVtcHR5LgorCisJCQkJCQkJKlcxNiogID4KKyAgV2FybmluZzogTW9kZSBvZiBmaWxlICJ7ZmlsZW5hbWV9IiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQKKworV2hlbiB0aGUgdGltZXN0YW1wIGZvciBhIGJ1ZmZlciB3YXMgY2hhbmdlZCBhbmQgdGhlIGNvbnRlbnRzIGFyZSBzdGlsbCB0aGUKK3NhbWUgYnV0IHRoZSBtb2RlIChwZXJtaXNzaW9ucykgaGF2ZSBjaGFuZ2VkLiAgVGhpcyB1c3VhbGx5IG9jY3VycyB3aGVuCitjaGVja2luZyBvdXQgYSBmaWxlIGZyb20gYSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLCB3aGljaCBjYXVzZXMgdGhlIHJlYWQtb25seQorYml0IHRvIGJlIHJlc2V0LiAgSXQgc2hvdWxkIGJlIHNhZmUgdG8gcmVsb2FkIHRoZSBmaWxlLiAgU2V0ICdhdXRvcmVhZCcgdG8KK2F1dG9tYXRpY2FsbHkgcmVsb2FkIHRoZSBmaWxlLgorCisJCQkJCQkJKkUyMTEqICA+CisgIFdhcm5pbmc6IEZpbGUgIntmaWxlbmFtZX0iIG5vIGxvbmdlciBhdmFpbGFibGUKKworVGhlIGZpbGUgd2hpY2ggeW91IGhhdmUgc3RhcnRlZCBlZGl0aW5nIGhhcyBkaXNhcHBlYXJlZCwgb3IgaXMgbm8gbG9uZ2VyCithY2Nlc3NpYmxlLiAgTWFrZSBzdXJlIHlvdSB3cml0ZSB0aGUgYnVmZmVyIHNvbWV3aGVyZSB0byBhdm9pZCBsb3NpbmcKK2NoYW5nZXMuICBUaGlzIG1lc3NhZ2UgaXMgbm90IGdpdmVuIHdoZW4gJ2J1ZnR5cGUnIGlzIG5vdCBlbXB0eS4KKworCQkJCQkJCSpXMTQqICA+CisgIFdhcm5pbmc6IExpc3Qgb2YgZmlsZSBuYW1lcyBvdmVyZmxvdworCitZb3UgbXVzdCBiZSB1c2luZyBhbiBhd2Z1bCBsb3Qgb2YgYnVmZmVycy4gIEl0J3Mgbm93IHBvc3NpYmxlIHRoYXQgdHdvIGJ1ZmZlcnMKK2hhdmUgdGhlIHNhbWUgbnVtYmVyLCB3aGljaCBjYXVzZXMgdmFyaW91cyBwcm9ibGVtcy4gIFlvdSBtaWdodCB3YW50IHRvIGV4aXQKK1ZpbSBhbmQgcmVzdGFydCBpdC4KKworCQkJCQkJCSpFMjk2KiAqRTI5NyogID4KKyAgU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgd3JpdGUKKyAgV3JpdGUgZXJyb3IgaW4gc3dhcCBmaWxlCisKK1RoaXMgbW9zdGx5IGhhcHBlbnMgd2hlbiB0aGUgZGlzayBpcyBmdWxsLiAgVmltIGNvdWxkIG5vdCB3cml0ZSB0ZXh0IGludG8gdGhlCit8c3dhcC1maWxlfC4gIEl0J3Mgbm90IGRpcmVjdGx5IGhhcm1mdWwsIGJ1dCB3aGVuIFZpbSB1bmV4cGVjdGVkbHkgZXhpdHMgc29tZQordGV4dCBtYXkgYmUgbG9zdCB3aXRob3V0IHJlY292ZXJ5IGJlaW5nIHBvc3NpYmxlLiAgVmltIG1pZ2h0IHJ1biBvdXQgb2YgbWVtb3J5Cit3aGVuIHRoaXMgcHJvYmxlbSBwZXJzaXN0cy4KKworCQkJCQkJKmNvbm5lY3Rpb24tcmVmdXNlZCogID4KKyAgWGxpYjogY29ubmVjdGlvbiB0byAiPG1hY2hpbmUtbmFtZTowLjAiIHJlZnVzZWQgYnkgc2VydmVyCisKK1RoaXMgaGFwcGVucyB3aGVuIFZpbSB0cmllcyB0byBjb25uZWN0IHRvIHRoZSBYIHNlcnZlciwgYnV0IHRoZSBYIHNlcnZlciBkb2VzCitub3QgYWxsb3cgYSBjb25uZWN0aW9uLiAgVGhlIGNvbm5lY3Rpb24gdG8gdGhlIFggc2VydmVyIGlzIG5lZWRlZCB0byBiZSBhYmxlCit0byByZXN0b3JlIHRoZSB0aXRsZSBhbmQgZm9yIHRoZSB4dGVybSBjbGlwYm9hcmQgc3VwcG9ydC4gIFVuZm9ydHVuYXRlbHkgdGhpcworZXJyb3IgbWVzc2FnZSBjYW5ub3QgYmUgYXZvaWRlZCwgZXhjZXB0IGJ5IGRpc2FibGluZyB0aGUgfCt4dGVybV9jbGlwYm9hcmR8CithbmQgfCtYMTF8IGZlYXR1cmVzLgorCisJCQkJCQkJKkUxMCogID4KKyAgXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJgorCitBIGNvbW1hbmQgbGluZSBzdGFydGVkIHdpdGggYSBiYWNrc2xhc2ggb3IgdGhlIHJhbmdlIG9mIGEgY29tbWFuZCBjb250YWluZWQgYQorYmFja3NsYXNoIGluIGEgd3JvbmcgcGxhY2UuICBUaGlzIGlzIG9mdGVuIGNhdXNlZCBieSBjb21tYW5kLWxpbmUgY29udGludWF0aW9uCitiZWluZyBkaXNhYmxlZC4gIFJlbW92ZSB0aGUgJ0MnIGZsYWcgZnJvbSB0aGUgJ2Nwb3B0aW9ucycgb3B0aW9uIHRvIGVuYWJsZSBpdC4KKworCQkJCQkJCSpFNDcxKiAgPgorICBBcmd1bWVudCByZXF1aXJlZAorCitUaGlzIGhhcHBlbnMgd2hlbiBhbiBFeCBjb21tYW5kIHdpdGggbWFuZGF0b3J5IGFyZ3VtZW50KHMpIHdhcyBleGVjdXRlZCwgYnV0CitubyBhcmd1bWVudCBoYXMgYmVlbiBzcGVjaWZpZWQuCisKKwkJCQkJCQkqRTQ3NCogKkU0NzUqICA+CisgIEludmFsaWQgYXJndW1lbnQKKworQW4gRXggY29tbWFuZCBoYXMgYmVlbiBleGVjdXRlZCwgYnV0IGFuIGludmFsaWQgYXJndW1lbnQgaGFzIGJlZW4gc3BlY2lmaWVkLgorCisJCQkJCQkJKkU0ODgqICA+CisgIFRyYWlsaW5nIGNoYXJhY3RlcnMKKworQW4gYXJndW1lbnQgaGFzIGJlZW4gYWRkZWQgdG8gYW4gRXggY29tbWFuZCB0aGF0IGRvZXMgbm90IHBlcm1pdCBvbmUuCisKKwkJCQkJCQkqRTQ3NyogKkU0NzgqICA+CisgIE5vICEgYWxsb3dlZAorICBEb24ndCBwYW5pYyEKKworWW91IGhhdmUgYWRkZWQgYSAiISIgYWZ0ZXIgYW4gRXggY29tbWFuZCB0aGF0IGRvZXNuJ3QgcGVybWl0IG9uZS4KKworCQkJCQkJCSpFNDgxKiAgPgorICBObyByYW5nZSBhbGxvd2VkCisKK0EgcmFuZ2Ugd2FzIHNwZWNpZmllZCBmb3IgYW4gRXggY29tbWFuZCB0aGF0IGRvZXNuJ3QgcGVybWl0IG9uZS4gIFNlZQorfGNtZGxpbmUtcmFuZ2VzfC4KKworCQkJCQkJCSpFNDgyKiAqRTQ4MyogID4KKyAgQ2FuJ3QgY3JlYXRlIGZpbGUge2ZpbGVuYW1lfQorICBDYW4ndCBnZXQgdGVtcCBmaWxlIG5hbWUKKworVmltIGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZS4KKworCQkJCQkJCSpFNDg0KiAqRTQ4NSogID4KKyAgQ2FuJ3Qgb3BlbiBmaWxlICVzIgorICBDYW4ndCByZWFkIGZpbGUgJXMiCisKK1ZpbSBjYW5ub3QgcmVhZCBhIHRlbXBvcmFyeSBmaWxlLgorCisJCQkJCQkJKkU0NjQqICA+CisgIEFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQKKworVGhlcmUgYXJlIHR3byB1c2VyLWRlZmluZWQgY29tbWFuZHMgd2l0aCBhIGNvbW1vbiBuYW1lIHByZWZpeCwgYW5kIHlvdSB1c2VkCitDb21tYW5kLWxpbmUgY29tcGxldGlvbiB0byBleGVjdXRlIG9uZSBvZiB0aGVtLiB8dXNlci1jbWQtYW1iaWd1b3VzfAorRXhhbXBsZTogPgorCTpjb21tYW5kIE15Q29tbWFuZDEgZWNobyAib25lIgorCTpjb21tYW5kIE15Q29tbWFuZDIgZWNobyAidHdvIgorCTpNeUNvbW1hbmQKKzwKKwkJCQkJCQkqRTQ5MiogID4KKyAgTm90IGFuIGVkaXRvciBjb21tYW5kCisKK1lvdSB0cmllZCB0byBleGVjdXRlIGEgY29tbWFuZCB0aGF0IGlzIG5laXRoZXIgYW4gRXggY29tbWFuZCBub3IKK2EgdXNlci1kZWZpbmVkIGNvbW1hbmQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gTWVzc2FnZXMJCQkJCQkqbWVzc2FnZXMqCisKK1RoaXMgaXMgYW4gKGluY29tcGxldGUpIG92ZXJ2aWV3IG9mIHZhcmlvdXMgbWVzc2FnZXMgdGhhdCBWaW0gZ2l2ZXM6CisKKwkJKmhpdC1lbnRlciogKnByZXNzLWVudGVyKiAqaGl0LXJldHVybiogKnByZXNzLXJldHVybiogID4KKworICBIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlCisKK1RoaXMgbWVzc2FnZSBpcyBnaXZlbiB3aGVuIHRoZXJlIGlzIHNvbWV0aGluZyBvbiB0aGUgc2NyZWVuIGZvciB5b3UgdG8gcmVhZCwKK2FuZCB0aGUgc2NyZWVuIGlzIGFib3V0IHRvIGJlIHJlZHJhd246CistIEFmdGVyIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kIChlLmcuLCAiOiFscyIgYW5kICI9IikuCistIFNvbWV0aGluZyBpcyBkaXNwbGF5ZWQgb24gdGhlIHN0YXR1cyBsaW5lIHRoYXQgaXMgbG9uZ2VyIHRoYW4gdGhlIHdpZHRoIG9mCisgIHRoZSB3aW5kb3csIG9yIHJ1bnMgaW50byB0aGUgJ3Nob3djbWQnIG9yICdydWxlcicgb3V0cHV0LgorCistPiBIaXQgPEVudGVyPiBvciA8U3BhY2U+IHRvIHJlZHJhdyB0aGUgc2NyZWVuIGFuZCBjb250aW51ZSwgd2l0aG91dCB0aGF0IGtleQorICAgYmVpbmcgdXNlZCBvdGhlcndpc2UuCistPiBIaXQgIjoiIG9yIGFueSBvdGhlciBOb3JtYWwgbW9kZSBjb21tYW5kIGNoYXJhY3RlciB0byBzdGFydCB0aGF0IGNvbW1hbmQuCistPiBIaXQgPEMtWT4gdG8gY29weSAoeWFuaykgYSBtb2RlbGVzcyBzZWxlY3Rpb24gdG8gdGhlIGNsaXBib2FyZCByZWdpc3Rlci4KKy0+IFVzZSBhIG1lbnUuICBUaGUgY2hhcmFjdGVycyBkZWZpbmVkIGZvciBDbWRsaW5lLW1vZGUgYXJlIHVzZWQuCistPiBXaGVuICdtb3VzZScgY29udGFpbnMgdGhlICdyJyBmbGFnLCBjbGlja2luZyB0aGUgbGVmdCBtb3VzZSBidXR0b24gd29ya3MKKyAgIGxpa2UgcHJlc3NpbmcgPFNwYWNlPi4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBzZWxlY3QgdGV4dCB0aG91Z2guCistPiBGb3IgdGhlIEdVSSBjbGlja2luZyB0aGUgbGVmdCBtb3VzZSBidXR0b24gaW4gdGhlIGxhc3QgbGluZSB3b3JrcyBsaWtlCisgICBwcmVzc2luZyA8U3BhY2U+Lgore1ZpOiBvbmx5ICI6IiBjb21tYW5kcyBhcmUgaW50ZXJwcmV0ZWR9CisKK1RvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGhpdC1lbnRlciBwcm9tcHRzOgorLSBTZXQgJ2NtZGhlaWdodCcgdG8gMiBvciBoaWdoZXIuCistIEFkZCBmbGFncyB0byAnc2hvcnRtZXNzJy4KKy0gUmVzZXQgJ3Nob3djbWQnIGFuZC9vciAncnVsZXInLgorCitBbHNvIHNlZSAnbW91c2UnLiAgVGhlIGhpdC1lbnRlciBtZXNzYWdlIGlzIGhpZ2hsaWdodGVkIHdpdGggdGhlIHxobC1RdWVzdGlvbnwKK2dyb3VwLgorCisKKwkJCQkJCSptb3JlLXByb21wdCogKnBhZ2VyKiAgPgorICAtLSBNb3JlIC0tCisgIC0tIE1vcmUgLS0gKFJFVDogbGluZSwgU1BBQ0U6IHBhZ2UsIGQ6IGhhbGYgcGFnZSwgcTogcXVpdCkKKyAgLS0gTW9yZSAtLSAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkKKworVGhpcyBtZXNzYWdlIGlzIGdpdmVuIHdoZW4gdGhlIHNjcmVlbiBpcyBmaWxsZWQgd2l0aCBtZXNzYWdlcy4gIEl0IGlzIG9ubHkKK2dpdmVuIHdoZW4gdGhlICdtb3JlJyBvcHRpb24gaXMgb24uICBJdCBpcyBoaWdobGlnaHRlZCB3aXRoIHRoZSB8aGwtTW9yZU1zZ3wKK2dyb3VwLgorCitUeXBlCQkJCQllZmZlY3QgfgorICAgICA8Q1I+IG9yIDxOTD4gb3IgaiBvciA8RG93bj4Jb25lIG1vcmUgbGluZQorICAgICA8QlM+IG9yIGsgb3IgPFVwPgkJCW9uZSBsaW5lIGJhY2sgKCopCisgICAgIDxTcGFjZT4gb3IgPFBhZ2VEb3duPgkJbmV4dCBwYWdlCisgICAgIGIgb3IgPFBhZ2VVcD4JCQlwcmV2aW91cyBwYWdlICgqKQorICAgICBkCQkJCQlkb3duIGhhbGYgYSBwYWdlCisgICAgIHUJCQkJCXVwIGhhbGYgYSBwYWdlICgqKQorICAgICBxLCA8RXNjPiBvciBDVFJMLUMJCQlzdG9wIHRoZSBsaXN0aW5nCisgICAgIDoJCQkJCXN0b3AgdGhlIGxpc3RpbmcgYW5kIGVudGVyIGEKKwkJCQkJICAgICBjb21tYW5kLWxpbmUKKyAgICA8Qy1ZPgkJCQl5YW5rIChjb3B5KSBhIG1vZGVsZXNzIHNlbGVjdGlvbiB0bworCQkJCQl0aGUgY2xpcGJvYXJkICgiKiBhbmQgIisgcmVnaXN0ZXJzKQorICAgIHttZW51LWVudHJ5fQkJCXdoYXQgdGhlIG1lbnUgaXMgZGVmaW5lZCB0byBpbgorCQkJCQlDbWRsaW5lLW1vZGUuCisgICAgPExlZnRNb3VzZT4gKCoqKQkJCW5leHQgcGFnZQorCitBbnkgb3RoZXIga2V5IGNhdXNlcyB0aGUgbWVhbmluZyBvZiB0aGUga2V5cyB0byBiZSBkaXNwbGF5ZWQuCisKKygqKSBiYWNrd2FyZHMgc2Nyb2xsaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0aGVzZSBjb21tYW5kczogPgorICAgIDpjbGlzdAorKCoqKSBDbGlja2luZyB0aGUgbGVmdCBtb3VzZSBidXR0b24gb25seSB3b3JrczoKKyAgICAgLSBGb3IgdGhlIEdVSTogaW4gdGhlIGxhc3QgbGluZSBvZiB0aGUgc2NyZWVuLgorICAgICAtIFdoZW4gJ3InIGlzIGluY2x1ZGVkIGluICdtb3VzZScgKGJ1dCB0aGVuIHNlbGVjdGluZyB0ZXh0IHdvbid0IHdvcmspLgorCisKK05vdGU6IFRoZSB0eXBlZCBrZXkgaXMgZGlyZWN0bHkgb2J0YWluZWQgZnJvbSB0aGUgdGVybWluYWwsIGl0IGlzIG5vdCBtYXBwZWQKK2FuZCB0eXBlYWhlYWQgaXMgaWdub3JlZC4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL21sYW5nLnR4dCBiL3J1bnRpbWUvZG9jL21sYW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDQ1YjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvbWxhbmcudHh0CkBAIC0wLDAgKzEsMjA1IEBACisqbWxhbmcudHh0KiAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRmViIDI0CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworTXVsdGktbGFuZ3VhZ2UgZmVhdHVyZXMJCQkJKm11bHRpbGFuZyogKm11bHRpLWxhbmcqCisKK1RoaXMgaXMgYWJvdXQgdXNpbmcgbWVzc2FnZXMgYW5kIG1lbnVzIGluIHZhcmlvdXMgbGFuZ3VhZ2VzLiAgRm9yIGVkaXRpbmcKK211bHRpLWJ5dGUgdGV4dCBzZWUgfG11bHRpYnl0ZXwuCisKK1RoZSBiYXNpY3MgYXJlIGV4cGxhaW5lZCBpbiB0aGUgdXNlciBtYW51YWw6IHx1c3JfNDUudHh0fC4KKworMS4gTWVzc2FnZXMJCQl8bXVsdGlsYW5nLW1lc3NhZ2VzfAorMi4gTWVudXMJCQl8bXVsdGlsYW5nLW1lbnVzfAorMy4gU2NyaXB0cwkJCXxtdWx0aWxhbmctc2NyaXB0c3wKKworQWxzbyBzZWUgfGhlbHAtdHJhbnNsYXRlZHwgZm9yIG11bHRpLWxhbmd1YWdlIGhlbHAuCisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBmZWF0dXJlc30KK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCttdWx0aV9sYW5nfCBmZWF0dXJlfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIE1lc3NhZ2VzCQkJCQkJKm11bHRpbGFuZy1tZXNzYWdlcyoKKworVmltIHBpY2tzIHVwIHRoZSBsb2NhbGUgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBJbiBtb3N0IGNhc2VzIHRoaXMgbWVhbnMgVmltCit3aWxsIHVzZSB0aGUgbGFuZ3VhZ2UgdGhhdCB5b3UgcHJlZmVyLCB1bmxlc3MgaXQncyBub3QgYXZhaWxhYmxlLgorCitUbyBzZWUgYSBsaXN0IG9mIHN1cHBvcnRlZCBsb2NhbGUgbmFtZXMgb24geW91ciBzeXN0ZW0sIGxvb2sgaW4gb25lIG9mIHRoZXNlCitkaXJlY3RvcmllcyAoZm9yIFVuaXgpOgorCS91c3IvbGliL2xvY2FsZSB+CisJL3Vzci9zaGFyZS9sb2NhbGUgfgorVW5mb3J0dW5hdGVseSwgdXBwZXIvbG93ZXJjYXNlIGRpZmZlcmVuY2VzIG1hdHRlci4gIEFsc28gd2F0Y2ggb3V0IGZvciB0aGUKK3VzZSBvZiAiLSIgYW5kICJfIi4KKworCQkJCQkgICAgKjpsYW4qICo6bGFuZyogKjpsYW5ndWFnZSogKkUxOTcqCis6bGFuW2d1YWdlXQorOmxhbltndWFnZV0gbWVzW3NhZ2VzXQorOmxhbltndWFnZV0gY3R5W3BlXQorOmxhbltndWFnZV0gdGltW2VdCisJCQlQcmludCB0aGUgY3VycmVudCBsYW5ndWFnZSAoYWthIGxvY2FsZSkuCisJCQlXaXRoIHRoZSAibWVzc2FnZXMiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgorCQkJbWVzc2FnZXMgaXMgcHJpbnRlZC4gIFRlY2huaWNhbDogTENfTUVTU0FHRVMuCisJCQlXaXRoIHRoZSAiY3R5cGUiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgorCQkJY2hhcmFjdGVyIGVuY29kaW5nIGlzIHByaW50ZWQuICBUZWNobmljYWw6IExDX0NUWVBFLgorCQkJV2l0aCB0aGUgInRpbWUiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgorCQkJc3RyZnRpbWUoKSBpcyBwcmludGVkLiAgVGVjaG5pY2FsOiBMQ19USU1FLgorCQkJV2l0aG91dCBhcmd1bWVudCBhbGwgcGFydHMgb2YgdGhlIGxvY2FsZSBhcmUgcHJpbnRlZAorCQkJKHRoaXMgaXMgc3lzdGVtIGRlcGVuZGVudCkuCisJCQlUaGUgY3VycmVudCBsYW5ndWFnZSBjYW4gYWxzbyBiZSBvYnRhaW5lZCB3aXRoIHRoZQorCQkJfHY6bGFuZ3wsIHx2OmN0eXBlfCBhbmQgfHY6bGNfdGltZXwgdmFyaWFibGVzLgorCis6bGFuW2d1YWdlXSB7bmFtZX0KKzpsYW5bZ3VhZ2VdIG1lc1tzYWdlc10ge25hbWV9Cis6bGFuW2d1YWdlXSBjdHlbcGVdIHtuYW1lfQorOmxhbltndWFnZV0gdGltW2VdIHtuYW1lfQorCQkJU2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIChha2EgbG9jYWxlKSB0byB7bmFtZX0uCisJCQlUaGUgbG9jYWxlIHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgbG9jYWxlIG9uIHlvdXIKKwkJCXN5c3RlbS4gIFNvbWUgc3lzdGVtcyBhY2NlcHQgYWxpYXNlcyBsaWtlICJlbiIgb3IKKwkJCSJlbl9VUyIsIGJ1dCBzb21lIG9ubHkgYWNjZXB0IHRoZSBmdWxsIHNwZWNpZmljYXRpb24KKwkJCWxpa2UgImVuX1VTLklTT184ODU5LTEiLgorCQkJV2l0aCB0aGUgIm1lc3NhZ2VzIiBhcmd1bWVudCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IKKwkJCW1lc3NhZ2VzIGlzIHNldC4gIFRoaXMgY2FuIGJlIGRpZmZlcmVudCB3aGVuIHlvdSB3YW50LAorCQkJZm9yIGV4YW1wbGUsIEVuZ2xpc2ggbWVzc2FnZXMgd2hpbGUgZWRpdGluZyBKYXBhbmVzZQorCQkJdGV4dC4gIFRoaXMgc2V0cyAkTENfTUVTU0FHRVMuCisJCQlXaXRoIHRoZSAiY3R5cGUiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgorCQkJY2hhcmFjdGVyIGVuY29kaW5nIGlzIHNldC4gIFRoaXMgYWZmZWN0cyB0aGUgbGlicmFyaWVzCisJCQl0aGF0IFZpbSB3YXMgbGlua2VkIHdpdGguICBJdCdzIHVudXN1YWwgdG8gc2V0IHRoaXMgdG8KKwkJCWEgZGlmZmVyZW50IHZhbHVlIGZyb20gJ2VuY29kaW5nJy4gIFRoaXMgc2V0cworCQkJJExDX0NUWVBFLgorCQkJV2l0aCB0aGUgInRpbWUiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvciB0aW1lCisJCQlhbmQgZGF0ZSBtZXNzYWdlcyBpcyBzZXQuICBUaGlzIGFmZmVjdHMgc3RyZnRpbWUoKS4KKwkJCVRoaXMgc2V0cyAkTENfVElNRS4KKwkJCVdpdGhvdXQgYW4gYXJndW1lbnQgYm90aCBhcmUgc2V0LCBhbmQgYWRkaXRpb25hbGx5CisJCQkkTEFORyBpcyBzZXQuCisJCQlUaGlzIHdpbGwgbWFrZSBhIGRpZmZlcmVuY2UgZm9yIGl0ZW1zIHRoYXQgZGVwZW5kIG9uCisJCQl0aGUgbGFuZ3VhZ2UgKHNvbWUgbWVzc2FnZXMsIHRpbWUgYW5kIGRhdGUgZm9ybWF0KS4KKwkJCU5vdCBmdWxseSBzdXBwb3J0ZWQgb24gYWxsIHN5c3RlbXMKKwkJCUlmIHRoaXMgZmFpbHMgdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBtZXNzYWdlLiAgSWYgaXQKKwkJCXN1Y2NlZWRzIHRoZXJlIGlzIG5vIG1lc3NhZ2UuICBFeGFtcGxlOiA+CisJCQkJOmxhbmd1YWdlCisJCQkJQ3VycmVudCBsYW5ndWFnZTogQworCQkJCTpsYW5ndWFnZSBkZV9ERS5JU09fODg1OS0xCisJCQkJOmxhbmd1YWdlIG1lcworCQkJCUN1cnJlbnQgbWVzc2FnZXMgbGFuZ3VhZ2U6IGRlX0RFLklTT184ODU5LTEKKwkJCQk6bGFuZyBtZXMgZW4KKzwKKworTVMtV0lORE9XUyBNRVNTQUdFIFRSQU5TTEFUSU9OUwkJCQkqd2luMzItZ2V0dGV4dCoKKworSWYgeW91IHVzZWQgdGhlIHNlbGYtaW5zdGFsbGluZyAuZXhlIGZpbGUsIG1lc3NhZ2UgdHJhbnNsYXRpb25zIHNob3VsZCB3b3JrCithbHJlYWR5LiAgT3RoZXJ3aXNlIGdldCB0aGUgbGliaW50bC5kbGwgZmlsZSBpZiB5b3UgZG9uJ3QgaGF2ZSBpdCB5ZXQ6CisKKwlodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dldHRleHQKKworVGhpcyBhbHNvIGNvbnRhaW5zIHRvb2xzIHhnZXR0ZXh0LCBtc2dmb3JtYXQgYW5kIG90aGVycy4KKworbGliaW50bC5kbGwgc2hvdWxkIGJlIHBsYWNlZCBpbiBzYW1lIGRpcmVjdG9yeSB3aXRoIChnKXZpbS5leGUsIG9yIHNvbWUKK3BsYWNlIHdoZXJlIFBBVEggZW52aXJvbm1lbnQgdmFsdWUgZGVzY3JpYmUuICBNZXNzYWdlIGZpbGVzICh2aW0ubW8pCitoYXZlIHRvIGJlIHBsYWNlZCBpbiAiJFZJTVJVTlRJTUUvbGFuZy94eC9MQ19NRVNTQUdFUyIsIHdoZXJlICJ4eCIgaXMgdGhlCithYmJyZXZpYXRpb24gb2YgdGhlIGxhbmd1YWdlIChtb3N0bHkgdHdvIGxldHRlcnMpLgorCitJZiB5b3Ugd3JpdGUgeW91ciBvd24gdHJhbnNsYXRpb25zIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHRoZSAucG8gZmlsZSBhbmQKK2NvbnZlcnQgaXQgdG8gYSAubW8gZmlsZS4gIFlvdSBuZWVkIHRvIGdldCB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBhbmQgcmVhZAordGhlIGZpbGUgInNyYy9wby9SRUFETUUudHh0Ii4KKworVG8gb3ZlcnJ1bGUgdGhlIGF1dG9tYXRpYyBjaG9pY2Ugb2YgdGhlIGxhbmd1YWdlLCBzZXQgdGhlICRMQU5HIHZhcmlhYmxlIHRvCit0aGUgbGFuZ3VhZ2Ugb2YgeW91ciBjaG9pY2UuICB1c2UgImVuIiB0byBkaXNhYmxlIHRyYW5zbGF0aW9ucy4gPgorCisgIDpsZXQgJExBTkcgPSAnamEnCisKKyh0ZXh0IGZvciBXaW5kb3dzIGJ5IE11cmFva2EgVGFybykKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBNZW51cwkJCQkJCSptdWx0aWxhbmctbWVudXMqCisKK1NlZSB8NDUuMnwgZm9yIHRoZSBiYXNpY3MuCisKK05vdGUgdGhhdCBpZiBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBtZW51cyBhZnRlciB0aGUgdHJhbnNsYXRpb24gd2FzCitkb25lLCBzb21lIG9mIHRoZSBtZW51cyBtYXkgYmUgc2hvd24gaW4gRW5nbGlzaC4gIFBsZWFzZSB0cnkgY29udGFjdGluZyB0aGUKK21haW50YWluZXIgb2YgdGhlIHRyYW5zbGF0aW9uIGFuZCBhc2sgaGltIHRvIHVwZGF0ZSBpdC4gIFlvdSBjYW4gZmluZCB0aGUKK25hbWUgYW5kIGUtbWFpbCBhZGRyZXNzIG9mIHRoZSB0cmFuc2xhdG9yIGluCisiJFZJTVJVTlRJTUUvbGFuZy9tZW51XzxsYW5nPi52aW0iLgorCitUbyBzZXQgdGhlIGZvbnQgKG9yIGZvbnRzZXQpIHRvIHVzZSBmb3IgdGhlIG1lbnVzLCB1c2UgdGhlIHw6aGlnaGxpZ2h0fAorY29tbWFuZC4gIEV4YW1wbGU6ID4KKworCTpoaWdobGlnaHQgTWVudSBmb250PWsxMixyMTIKKworCitBTElBUyBMT0NBTEUgTkFNRVMKKworVW5mb3J0dW5hdGVseSwgdGhlIGxvY2FsZSBuYW1lcyBhcmUgZGlmZmVyZW50IG9uIHZhcmlvdXMgc3lzdGVtcywgZXZlbiB0aG91Z2gKK3RoZXkgYXJlIGZvciB0aGUgc2FtZSBsYW5ndWFnZSBhbmQgZW5jb2RpbmcuICBJZiB5b3UgZG8gbm90IGdldCB0aGUgbWVudQordHJhbnNsYXRpb25zIHlvdSBleHBlY3RlZCwgY2hlY2sgdGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQ6ID4KKworCWVjaG8gdjpsYW5nCisKK05vdyBjaGVjayB0aGUgIiRWSU1SVU5USU1FL2xhbmciIGRpcmVjdG9yeSBmb3IgbWVudSB0cmFuc2xhdGlvbiBmaWxlcyB0aGF0IHVzZQorYSBzaW1pbGFyIGxhbmd1YWdlLiAgQSBkaWZmZXJlbmNlIGluIGEgIi0iIGJlaW5nIGEgIl8iIGFscmVhZHkgY2F1c2VzIGEgZmlsZQorbm90IHRvIGJlIGZvdW5kISAgQW5vdGhlciBjb21tb24gZGlmZmVyZW5jZSB0byB3YXRjaCBvdXQgZm9yIGlzICJpc284ODU5LTEiCit2ZXJzdXMgImlzb184ODU5LTEiLiAgRm9ydHVuYXRlbHkgVmltIG1ha2VzIGFsbCBuYW1lcyBsb3dlcmNhc2UsIHRodXMgeW91Citkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGNhc2UgZGlmZmVyZW5jZXMuICBTcGFjZXMgYXJlIGNoYW5nZWQgdG8KK3VuZGVyc2NvcmVzLCB0byBhdm9pZCBoYXZpbmcgdG8gZXNjYXBlIHRoZW0uCisKK0lmIHlvdSBmaW5kIGEgbWVudSB0cmFuc2xhdGlvbiBmaWxlIGZvciB5b3VyIGxhbmd1YWdlIHdpdGggYSBkaWZmZXJlbnQgbmFtZSwKK2NyZWF0ZSBhIGZpbGUgaW4geW91ciBvd24gcnVudGltZSBkaXJlY3RvcnkgdG8gbG9hZCB0aGF0IG9uZS4gIFRoZSBuYW1lIG9mCit0aGF0IGZpbGUgY291bGQgYmU6ID4KKworCX4vLnZpbS9sYW5nL21lbnVfPHY6bGFuZz4udmltCisKK0NoZWNrIHRoZSAncnVudGltZXBhdGgnIG9wdGlvbiBmb3IgZGlyZWN0b3JpZXMgd2hpY2ggYXJlIHNlYXJjaGVkLiAgSW4gdGhhdAorZmlsZSBwdXQgYSBjb21tYW5kIHRvIGxvYWQgdGhlIG1lbnUgZmlsZSB3aXRoIHRoZSBvdGhlciBuYW1lOiA+CisKKwlydW50aW1lIGxhbmcvbWVudV88b3RoZXJfbGFuZz4udmltCisKKworVFJBTlNMQVRJTkcgTUVOVVMKKworSWYgeW91IHdhbnQgdG8gZG8geW91ciBvd24gdHJhbnNsYXRpb25zLCB5b3UgY2FuIHVzZSB0aGUgfDptZW51dHJhbnN8IGNvbW1hbmQsCitleHBsYWluZWQgYmVsb3cuICBJdCBpcyByZWNvbW1lbmRlZCB0byBwdXQgdGhlIHRyYW5zbGF0aW9ucyBmb3Igb25lIGxhbmd1YWdlCitpbiBhIFZpbSBzY3JpcHQuICBGb3IgYSBsYW5ndWFnZSB0aGF0IGhhcyBubyB0cmFuc2xhdGlvbiB5ZXQsIHBsZWFzZSBjb25zaWRlcgorYmVjb21pbmcgdGhlIG1haW50YWluZXIgYW5kIG1ha2UgeW91ciB0cmFuc2xhdGlvbnMgYXZhaWxhYmxlIHRvIGFsbCBWaW0gdXNlcnMuCitTZW5kIGFuIGUtbWFpbCB0byB0aGUgVmltIG1haW50YWluZXIgPG1haW50YWluZXJAdmltLm9yZz4uCisKKwkJCQkJKjptZW51dCogKjptZW51dHJhbnMqICo6bWVudXRyYW5zbGF0ZSoKKzptZW51dFtyYW5zbGF0ZV0gY2xlYXIKKwkJCUNsZWFyIGFsbCBtZW51IHRyYW5zbGF0aW9ucy4KKworOm1lbnV0W3JhbnNsYXRlXSB7ZW5nbGlzaH0ge215bGFuZ30KKwkJCVRyYW5zbGF0ZSBtZW51IG5hbWUge2VuZ2xpc2h9IHRvIHtteWxhbmd9LiAgQWxsCisJCQlzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAiJiIgYW5kICI8VGFiPiIgbmVlZCB0byBiZQorCQkJaW5jbHVkZWQuICBTcGFjZXMgYW5kIGRvdHMgbmVlZCB0byBiZSBlc2NhcGVkIHdpdGggYQorCQkJYmFja3NsYXNoLCBqdXN0IGxpa2UgaW4gb3RoZXIgfDptZW51fCBjb21tYW5kcy4KKworU2VlIHRoZSAkVklNUlVOVElNRS9sYW5nIGRpcmVjdG9yeSBmb3IgZXhhbXBsZXMuCisKK1RvIHRyeSBvdXQgeW91ciB0cmFuc2xhdGlvbnMgeW91IGZpcnN0IGhhdmUgdG8gcmVtb3ZlIGFsbCBtZW51cy4gIFRoaXMgaXMgaG93Cit5b3UgY2FuIGRvIGl0IHdpdGhvdXQgcmVzdGFydGluZyBWaW06ID4KKwk6c291cmNlICRWSU1SVU5USU1FL2RlbG1lbnUudmltCisJOnNvdXJjZSA8eW91ci1uZXctbWVudS1maWxlPgorCTpzb3VyY2UgJFZJTVJVTlRJTUUvbWVudS52aW0KKworRWFjaCBwYXJ0IG9mIGEgbWVudSBwYXRoIGlzIHRyYW5zbGF0ZWQgc2VwYXJhdGVseS4gIFRoZSByZXN1bHQgaXMgdGhhdCB3aGVuCisiSGVscCIgaXMgdHJhbnNsYXRlZCB0byAiSGlsZmUiIGFuZCAiT3ZlcnZpZXciIHRvICLcYmVyYmxpY2siIHRoZW4KKyJIZWxwLk92ZXJ2aWV3IiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gIkhpbGZlLtxiZXJibGljayIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gU2NyaXB0cwkJCQkJCSptdWx0aWxhbmctc2NyaXB0cyoKKworSW4gVmltIHNjcmlwdHMgeW91IGNhbiB1c2UgdGhlIHx2Omxhbmd8IHZhcmlhYmxlIHRvIGdldCB0aGUgY3VycmVudCBsYW5ndWFnZQorKGxvY2FsZSkuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiQyIgb3IgY29tZXMgZnJvbSB0aGUgJExBTkcgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiBhIHNpbXBsZSB3YXksIHRvIG1ha2UKK2EgbWVzc2FnZSBhZGFwdCB0byBsYW5ndWFnZSBwcmVmZXJlbmNlcyBvZiB0aGUgdXNlciwgPgorCisJOmlmIHY6bGFuZyA9fiAiZGVfREUiCisJOiAgZWNobyAiR3V0ZW4gTW9yZ2VuIgorCTplbHNlCisJOiAgZWNobyAiR29vZCBtb3JuaW5nIgorCTplbmRpZgorPAorCisgdmltOnR3PTc4OnN3PTQ6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9tb3Rpb24udHh0IGIvcnVudGltZS9kb2MvbW90aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjI0MTNhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvbW90aW9uLnR4dApAQCAtMCwwICsxLDExOTEgQEAKKyptb3Rpb24udHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMTMKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitDdXJzb3IgbW90aW9ucwkJCQkJKmN1cnNvci1tb3Rpb25zKiAqbmF2aWdhdGlvbioKKworVGhlc2UgY29tbWFuZHMgbW92ZSB0aGUgY3Vyc29yIHBvc2l0aW9uLiAgSWYgdGhlIG5ldyBwb3NpdGlvbiBpcyBvZmYgb2YgdGhlCitzY3JlZW4sIHRoZSBzY3JlZW4gaXMgc2Nyb2xsZWQgdG8gc2hvdyB0aGUgY3Vyc29yIChzZWUgYWxzbyAnc2Nyb2xsanVtcCcgYW5kCisnc2Nyb2xsb2ZmJyBvcHRpb25zKS4KKworMS4gTW90aW9ucyBhbmQgb3BlcmF0b3JzCXxvcGVyYXRvcnwKKzIuIExlZnQtcmlnaHQgbW90aW9ucwkJfGxlZnQtcmlnaHQtbW90aW9uc3wKKzMuIFVwLWRvd24gbW90aW9ucwkJfHVwLWRvd24tbW90aW9uc3wKKzQuIFdvcmQgbW90aW9ucwkJCXx3b3JkLW1vdGlvbnN8Cis1LiBUZXh0IG9iamVjdCBtb3Rpb25zCQl8b2JqZWN0LW1vdGlvbnN8Cis2LiBUZXh0IG9iamVjdCBzZWxlY3Rpb24JfG9iamVjdC1zZWxlY3R8Cis3LiBNYXJrcwkJCXxtYXJrLW1vdGlvbnN8Cis4LiBKdW1wcwkJCXxqdW1wLW1vdGlvbnN8Cis5LiBWYXJpb3VzIG1vdGlvbnMJCXx2YXJpb3VzLW1vdGlvbnN8CisKK0dlbmVyYWwgcmVtYXJrczoKKworSWYgeW91IHdhbnQgdG8ga25vdyB3aGVyZSB5b3UgYXJlIGluIHRoZSBmaWxlIHVzZSB0aGUgIkNUUkwtRyIgY29tbWFuZAorfENUUkwtR3wgb3IgdGhlICJnIENUUkwtRyIgY29tbWFuZCB8Z19DVFJMLUd8LiAgSWYgeW91IHNldCB0aGUgJ3J1bGVyJyBvcHRpb24sCit0aGUgY3Vyc29yIHBvc2l0aW9uIGlzIGNvbnRpbnVvdXNseSBzaG93biBpbiB0aGUgc3RhdHVzIGxpbmUgKHdoaWNoIHNsb3dzIGRvd24KK1ZpbSBhIGxpdHRsZSkuCisKK0V4cGVyaWVuY2VkIHVzZXJzIHByZWZlciB0aGUgaGprbCBrZXlzIGJlY2F1c2UgdGhleSBhcmUgYWx3YXlzIHJpZ2h0IHVuZGVyCit0aGVpciBmaW5nZXJzLiAgQmVnaW5uZXJzIG9mdGVuIHByZWZlciB0aGUgYXJyb3cga2V5cywgYmVjYXVzZSB0aGV5IGRvIG5vdAora25vdyB3aGF0IHRoZSBoamtsIGtleXMgZG8uICBUaGUgbW5lbW9uaWMgdmFsdWUgb2YgaGprbCBpcyBjbGVhciBmcm9tIGxvb2tpbmcKK2F0IHRoZSBrZXlib2FyZC4gIFRoaW5rIG9mIGogYXMgYW4gYXJyb3cgcG9pbnRpbmcgZG93bndhcmRzLgorCitUaGUgJ3ZpcnR1YWxlZGl0JyBvcHRpb24gY2FuIGJlIHNldCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIG1vdmUgdGhlIGN1cnNvciB0bworcG9zaXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBvciBoYWxmd2F5IGEgY2hhcmFjdGVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIE1vdGlvbnMgYW5kIG9wZXJhdG9ycwkJCQkqb3BlcmF0b3IqCisKK1RoZSBtb3Rpb24gY29tbWFuZHMgY2FuIGJlIHVzZWQgYWZ0ZXIgYW4gb3BlcmF0b3IgY29tbWFuZCwgdG8gaGF2ZSB0aGUgY29tbWFuZAorb3BlcmF0ZSBvbiB0aGUgdGV4dCB0aGF0IHdhcyBtb3ZlZCBvdmVyLiAgVGhhdCBpcyB0aGUgdGV4dCBiZXR3ZWVuIHRoZSBjdXJzb3IKK3Bvc2l0aW9uIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG1vdGlvbi4gIE9wZXJhdG9ycyBhcmUgZ2VuZXJhbGx5IHVzZWQgdG8gZGVsZXRlCitvciBjaGFuZ2UgdGV4dC4gIFRoZSBmb2xsb3dpbmcgb3BlcmF0b3JzIGFyZSBhdmFpbGFibGU6CisKKwl8Y3wJYwljaGFuZ2UKKwl8ZHwJZAlkZWxldGUKKwl8eXwJeQl5YW5rIGludG8gcmVnaXN0ZXIgKGRvZXMgbm90IGNoYW5nZSB0aGUgdGV4dCkKKwl8fnwJfglzd2FwIGNhc2UgKG9ubHkgaWYgJ3RpbGRlb3AnIGlzIHNldCkKKwl8Z358CWd+CXN3YXAgY2FzZQorCXxndXwJZ3UJbWFrZSBsb3dlcmNhc2UKKwl8Z1V8CWdVCW1ha2UgdXBwZXJjYXNlCisJfCF8CSEJZmlsdGVyIHRocm91Z2ggYW4gZXh0ZXJuYWwgcHJvZ3JhbQorCXw9fAk9CWZpbHRlciB0aHJvdWdoICdlcXVhbHByZycgb3IgQy1pbmRlbnRpbmcgaWYgZW1wdHkKKwl8Z3F8CWdxCXRleHQgZm9ybWF0dGluZworCXxnP3wJZz8JUk9UMTMgZW5jb2RpbmcKKwl8PnwJPglzaGlmdCByaWdodAorCXw8fAk8CXNoaWZ0IGxlZnQKKwl8emZ8CXpmCWRlZmluZSBhIGZvbGQKKworSWYgdGhlIG1vdGlvbiBpbmNsdWRlcyBhIGNvdW50IGFuZCB0aGUgb3BlcmF0b3IgYWxzbyBoYWQgYSBjb3VudCBiZWZvcmUgaXQsCit0aGUgdHdvIGNvdW50cyBhcmUgbXVsdGlwbGllZC4gIEZvciBleGFtcGxlOiAiMmQzdyIgZGVsZXRlcyBzaXggd29yZHMuCisKK0FmdGVyIGFwcGx5aW5nIHRoZSBvcGVyYXRvciB0aGUgY3Vyc29yIGlzIG1vc3RseSBsZWZ0IGF0IHRoZSBzdGFydCBvZiB0aGUgdGV4dAordGhhdCB3YXMgb3BlcmF0ZWQgdXBvbi4gIEZvciBleGFtcGxlLCAieWZlIiBkb2Vzbid0IG1vdmUgdGhlIGN1cnNvciwgYnV0ICJ5RmUiCittb3ZlcyB0aGUgY3Vyc29yIGxlZnR3YXJkcyB0byB0aGUgImUiIHdoZXJlIHRoZSB5YW5rIHN0YXJ0ZWQuCisKKwkJCQkJCSpsaW5ld2lzZSogKmNoYXJhY3Rlcndpc2UqCitUaGUgb3BlcmF0b3IgZWl0aGVyIGFmZmVjdHMgd2hvbGUgbGluZXMsIG9yIHRoZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIHN0YXJ0CithbmQgZW5kIHBvc2l0aW9uLiAgR2VuZXJhbGx5LCBtb3Rpb25zIHRoYXQgbW92ZSBiZXR3ZWVuIGxpbmVzIGFmZmVjdCBsaW5lcworKGFyZSBsaW5ld2lzZSksIGFuZCBtb3Rpb25zIHRoYXQgbW92ZSB3aXRoaW4gYSBsaW5lIGFmZmVjdCBjaGFyYWN0ZXJzIChhcmUKK2NoYXJhY3Rlcndpc2UpLiAgSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgZXhjZXB0aW9ucy4KKworCQkJCQkJKmV4Y2x1c2l2ZSogKmluY2x1c2l2ZSoKK0EgY2hhcmFjdGVyIG1vdGlvbiBpcyBlaXRoZXIgaW5jbHVzaXZlIG9yIGV4Y2x1c2l2ZS4gV2hlbiBpbmNsdXNpdmUsIHRoZSBzdGFydAorYW5kIGVuZCBwb3NpdGlvbiBvZiB0aGUgbW90aW9uIGFyZSBpbmNsdWRlZCBpbiB0aGUgb3BlcmF0aW9uLiAgV2hlbiBleGNsdXNpdmUsCit0aGUgbGFzdCBjaGFyYWN0ZXIgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaXMgbm90IGluY2x1ZGVkLiAgTGluZXdpc2UKK21vdGlvbnMgYWx3YXlzIGluY2x1ZGUgdGhlIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb24uCisKK1doaWNoIG1vdGlvbnMgYXJlIGxpbmV3aXNlLCBpbmNsdXNpdmUgb3IgZXhjbHVzaXZlIGlzIG1lbnRpb25lZCBiZWxvdy4gIFRoZXJlCithcmUgaG93ZXZlciwgdHdvIGdlbmVyYWwgZXhjZXB0aW9uczoKKzEuIElmIHRoZSBtb3Rpb24gaXMgZXhjbHVzaXZlIGFuZCB0aGUgZW5kIG9mIHRoZSBtb3Rpb24gaXMgaW4gY29sdW1uIDEsIHRoZQorICAgZW5kIG9mIHRoZSBtb3Rpb24gaXMgbW92ZWQgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSBhbmQgdGhlIG1vdGlvbgorICAgYmVjb21lcyBpbmNsdXNpdmUuICBFeGFtcGxlOiAifSIgbW92ZXMgdG8gdGhlIGZpcnN0IGxpbmUgYWZ0ZXIgYSBwYXJhZ3JhcGgsCisgICBidXQgImR9IiB3aWxsIG5vdCBpbmNsdWRlIHRoYXQgbGluZS4KKzIuIElmIHRoZSBtb3Rpb24gaXMgZXhjbHVzaXZlLCB0aGUgZW5kIG9mIHRoZSBtb3Rpb24gaXMgaW4gY29sdW1uIDEgYW5kIHRoZQorICAgc3RhcnQgb2YgdGhlIG1vdGlvbiB3YXMgYXQgb3IgYmVmb3JlIHRoZSBmaXJzdCBub24tYmxhbmsgaW4gdGhlIGxpbmUsIHRoZQorICAgbW90aW9uIGJlY29tZXMgbGluZXdpc2UuICBFeGFtcGxlOiBJZiBhIHBhcmFncmFwaCBiZWdpbnMgd2l0aCBzb21lIGJsYW5rcworICAgYW5kIHlvdSBkbyAiZH0iIHdoaWxlIHN0YW5kaW5nIG9uIHRoZSBmaXJzdCBub24tYmxhbmssIGFsbCB0aGUgbGluZXMgb2YKKyAgIHRoZSBwYXJhZ3JhcGggYXJlIGRlbGV0ZWQsIGluY2x1ZGluZyB0aGUgYmxhbmtzLiAgSWYgeW91IGRvIGEgcHV0IG5vdywgdGhlCisgICBkZWxldGVkIGxpbmVzIHdpbGwgYmUgaW5zZXJ0ZWQgYmVsb3cgdGhlIGN1cnNvciBwb3NpdGlvbi4KKworTm90ZSB0aGF0IHdoZW4gdGhlIG9wZXJhdG9yIGlzIHBlbmRpbmcgKHRoZSBvcGVyYXRvciBjb21tYW5kIGlzIHR5cGVkLCBidXQgdGhlCittb3Rpb24gaXNuJ3QgeWV0KSwgYSBzcGVjaWFsIHNldCBvZiBtYXBwaW5ncyBjYW4gYmUgdXNlZC4gIFNlZSB8Om9tYXB8LgorCitJbnN0ZWFkIG9mIGZpcnN0IGdpdmluZyB0aGUgb3BlcmF0b3IgYW5kIHRoZW4gYSBtb3Rpb24geW91IGNhbiB1c2UgVmlzdWFsCittb2RlOiBtYXJrIHRoZSBzdGFydCBvZiB0aGUgdGV4dCB3aXRoICJ2IiwgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlCit0ZXh0IHRoYXQgaXMgdG8gYmUgYWZmZWN0ZWQgYW5kIHRoZW4gaGl0IHRoZSBvcGVyYXRvci4gIFRoZSB0ZXh0IGJldHdlZW4gdGhlCitzdGFydCBhbmQgdGhlIGN1cnNvciBwb3NpdGlvbiBpcyBoaWdobGlnaHRlZCwgc28geW91IGNhbiBzZWUgd2hhdCB0ZXh0IHdpbGwKK2JlIG9wZXJhdGVkIHVwb24uICBUaGlzIGFsbG93cyBtdWNoIG1vcmUgZnJlZWRvbSwgYnV0IHJlcXVpcmVzIG1vcmUga2V5CitzdHJva2VzIGFuZCBoYXMgbGltaXRlZCByZWRvIGZ1bmN0aW9uYWxpdHkuICBTZWUgdGhlIGNoYXB0ZXIgb24gVmlzdWFsIG1vZGUKK3xWaXN1YWwtbW9kZXwuCisKK1lvdSBjYW4gdXNlIGEgIjoiIGNvbW1hbmQgZm9yIGEgbW90aW9uLiAgRm9yIGV4YW1wbGUgImQ6Y2FsbCBGaW5kRW5kKCkiLgorQnV0IHRoaXMgY2FuJ3QgYmUgcmVkb25lIHdpdGggIi4iIGlmIHRoZSBjb21tYW5kIGlzIG1vcmUgdGhhbiBvbmUgbGluZS4KK1RoaXMgY2FuIGJlIHJlcGVhdGVkOiA+CisJZDpjYWxsIHNlYXJjaCgiZiIpPENSPgorVGhpcyBjYW5ub3QgYmUgcmVwZWF0ZWQ6ID4KKwlkOmlmIDE8Q1I+CisJICAgY2FsbCBzZWFyY2goImYiKTxDUj4KKwllbmRpZjxDUj4KKworCitGT1JDSU5HIEEgTU9USU9OIFRPIEJFIExJTkVXSVNFLCBDSEFSQUNURVJXSVNFIE9SIEJMT0NLV0lTRQorCitXaGVuIGEgbW90aW9uIGlzIG5vdCBvZiB0aGUgdHlwZSB5b3Ugd291bGQgbGlrZSB0byB1c2UsIHlvdSBjYW4gZm9yY2UgYW5vdGhlcgordHlwZSBieSB1c2luZyAidiIsICJWIiBvciBDVFJMLVYganVzdCBhZnRlciB0aGUgb3BlcmF0b3IuCitFeGFtcGxlOiA+CisJZGoKK2RlbGV0ZXMgdHdvIGxpbmVzID4KKwlkdmoKK2RlbGV0ZXMgZnJvbSB0aGUgY3Vyc29yIHBvc2l0aW9uIHVudGlsIHRoZSBjaGFyYWN0ZXIgYmVsb3cgdGhlIGN1cnNvciA+CisJZDxDLVY+agorZGVsZXRlcyB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgYW5kIHRoZSBjaGFyYWN0ZXIgYmVsb3cgdGhlIGN1cnNvci4gPgorCitCZSBjYXJlZnVsIHdpdGggZm9yY2luZyBhIGxpbmV3aXNlIG1vdmVtZW50IHRvIGJlIHVzZWQgY2hhcmFjdGVyd2lzZSBvcgorYmxvY2t3aXNlLCB0aGUgY29sdW1uIG1heSBub3QgYWx3YXlzIGJlIGRlZmluZWQuCisKKwkJCQkJCQkqb192KgordgkJV2hlbiB1c2VkIGFmdGVyIGFuIG9wZXJhdG9yLCBiZWZvcmUgdGhlIG1vdGlvbiBjb21tYW5kOiBGb3JjZQorCQl0aGUgb3BlcmF0b3IgdG8gd29yayBjaGFyYWN0ZXJ3aXNlLCBhbHNvIHdoZW4gdGhlIG1vdGlvbiBpcworCQlsaW5ld2lzZS4gIElmIHRoZSBtb3Rpb24gd2FzIGxpbmV3aXNlLCBpdCB3aWxsIGJlY29tZQorCQl8ZXhjbHVzaXZlfC4KKwkJSWYgdGhlIG1vdGlvbiBhbHJlYWR5IHdhcyBjaGFyYWN0ZXJ3aXNlLCB0b2dnbGUKKwkJaW5jbHVzaXZlL2V4Y2x1c2l2ZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gbWFrZSBhbiBleGNsdXNpdmUKKwkJbW90aW9uIGluY2x1c2l2ZSBhbmQgYW4gaW5jbHVzaXZlIG1vdGlvbiBleGNsdXNpdmUuCisKKwkJCQkJCQkqb19WKgorVgkJV2hlbiB1c2VkIGFmdGVyIGFuIG9wZXJhdG9yLCBiZWZvcmUgdGhlIG1vdGlvbiBjb21tYW5kOiBGb3JjZQorCQl0aGUgb3BlcmF0b3IgdG8gd29yayBsaW5ld2lzZSwgYWxzbyB3aGVuIHRoZSBtb3Rpb24gaXMKKwkJY2hhcmFjdGVyd2lzZS4KKworCQkJCQkJCSpvX0NUUkwtVioKK0NUUkwtVgkJV2hlbiB1c2VkIGFmdGVyIGFuIG9wZXJhdG9yLCBiZWZvcmUgdGhlIG1vdGlvbiBjb21tYW5kOiBGb3JjZQorCQl0aGUgb3BlcmF0b3IgdG8gd29yayBibG9ja3dpc2UuICBUaGlzIHdvcmtzIGxpa2UgVmlzdWFsIGJsb2NrCisJCW1vZGUgc2VsZWN0aW9uLCB3aXRoIHRoZSBjb3JuZXJzIGRlZmluZWQgYnkgdGhlIGN1cnNvcgorCQlwb3NpdGlvbiBiZWZvcmUgYW5kIGFmdGVyIHRoZSBtb3Rpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gTGVmdC1yaWdodCBtb3Rpb25zCQkJCQkqbGVmdC1yaWdodC1tb3Rpb25zKgorCitoCQlvcgkJCQkJKmgqCis8TGVmdD4JCW9yCQkJCQkqPExlZnQ+KgorQ1RSTC1ICQlvcgkJCQkJKkNUUkwtSCogKjxCUz4qCis8QlM+CQkJW2NvdW50XSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0LiAgfGV4Y2x1c2l2ZXwgbW90aW9uLgorCQkJTm90ZTogSWYgeW91IHByZWZlciA8QlM+IHRvIGRlbGV0ZSBhIGNoYXJhY3RlciwgdXNlCisJCQl0aGUgbWFwcGluZzoKKwkJCQk6bWFwIENUUkwtVjxCUz4JCVgKKwkJCSh0byBlbnRlciAiQ1RSTC1WPEJTPiIgdHlwZSB0aGUgQ1RSTC1WIGtleSwgZm9sbG93ZWQKKwkJCWJ5IHRoZSA8QlM+IGtleSkKKwkJCVNlZSB8OmZpeGRlbHwgaWYgdGhlIDxCUz4ga2V5IGRvZXMgbm90IGRvIHdoYXQgeW91CisJCQl3YW50LgorCitsCQlvcgkJCQkJKmwqCis8UmlnaHQ+CQlvcgkJCQkJKjxSaWdodD4qICo8U3BhY2U+KgorPFNwYWNlPgkJCVtjb3VudF0gY2hhcmFjdGVycyB0byB0aGUgcmlnaHQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisKKwkJCQkJCQkqMCoKKzAJCQlUbyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsaW5lLiAgfGV4Y2x1c2l2ZXwKKwkJCW1vdGlvbi4gIFdoZW4gbW92aW5nIHVwIG9yIGRvd24sIHN0YXkgaW4gc2FtZSBzY3JlZW4KKwkJCWNvbHVtbiAoaWYgcG9zc2libGUpLgorCisJCQkJCQkJKjxIb21lPiogKjxrSG9tZT4qCis8SG9tZT4JCQlUbyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsaW5lLiAgfGV4Y2x1c2l2ZXwKKwkJCW1vdGlvbi4gIFdoZW4gbW92aW5nIHVwIG9yIGRvd24sIHN0YXkgaW4gc2FtZSB0ZXh0CisJCQljb2x1bW4gKGlmIHBvc3NpYmxlKS4gIFdvcmtzIGxpa2UgIjF8Iiwgd2hpY2ggZGlmZmVycworCQkJZnJvbSAiMCIgd2hlbiB0aGUgbGluZSBzdGFydHMgd2l0aCBhIDxUYWI+LiAge25vdCBpbgorCQkJVml9CisKKwkJCQkJCQkqXioKK14JCQlUbyB0aGUgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvZiB0aGUgbGluZS4KKwkJCXxleGNsdXNpdmV8IG1vdGlvbi4KKworCQkJCQkJCSokKiAqPEVuZD4qICo8a0VuZD4qCiskICBvciA8RW5kPgkJVG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gIFdoZW4gYSBjb3VudCBpcyBnaXZlbiBhbHNvIGdvCisJCQlbY291bnQgLSAxXSBsaW5lcyBkb3dud2FyZCB8aW5jbHVzaXZlfC4KKwkJCUluIFZpc3VhbCBtb2RlIHRoZSBjdXJzb3IgZ29lcyB0byBqdXN0IGFmdGVyIHRoZSBsYXN0CisJCQljaGFyYWN0ZXIgaW4gdGhlIGxpbmUuCisJCQlXaGVuICd2aXJ0dWFsZWRpdCcgaXMgYWN0aXZlLCAiJCIgbWF5IG1vdmUgdGhlIGN1cnNvcgorCQkJYmFjayBmcm9tIHBhc3QgdGhlIGVuZCBvZiB0aGUgbGluZSB0byB0aGUgbGFzdAorCQkJY2hhcmFjdGVyIGluIHRoZSBsaW5lLgorCisJCQkJCQkJKmdfKgorZ18JCQlUbyB0aGUgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9mIHRoZSBsaW5lIGFuZAorCQkJW2NvdW50IC0gMV0gbGluZXMgZG93bndhcmQgfGluY2x1c2l2ZXwuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZzAqICpnPEhvbWU+KgorZzAgb3IgZzxIb21lPgkJV2hlbiBsaW5lcyB3cmFwICgnd3JhcCcgb24pOiBUbyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCisJCQl0aGUgc2NyZWVuIGxpbmUuICB8ZXhjbHVzaXZlfCBtb3Rpb24uICBEaWZmZXJzIGZyb20KKwkJCSIwIiB3aGVuIGEgbGluZSBpcyB3aWRlciB0aGFuIHRoZSBzY3JlZW4uCisJCQlXaGVuIGxpbmVzIGRvbid0IHdyYXAgKCd3cmFwJyBvZmYpOiBUbyB0aGUgbGVmdG1vc3QKKwkJCWNoYXJhY3RlciBvZiB0aGUgY3VycmVudCBsaW5lIHRoYXQgaXMgb24gdGhlIHNjcmVlbi4KKwkJCURpZmZlcnMgZnJvbSAiMCIgd2hlbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsaW5lCisJCQlpcyBub3Qgb24gdGhlIHNjcmVlbi4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZ14qCitnXgkJCVdoZW4gbGluZXMgd3JhcCAoJ3dyYXAnIG9uKTogVG8gdGhlIGZpcnN0IG5vbi1ibGFuaworCQkJY2hhcmFjdGVyIG9mIHRoZSBzY3JlZW4gbGluZS4gIHxleGNsdXNpdmV8IG1vdGlvbi4KKwkJCURpZmZlcnMgZnJvbSAiXiIgd2hlbiBhIGxpbmUgaXMgd2lkZXIgdGhhbiB0aGUgc2NyZWVuLgorCQkJV2hlbiBsaW5lcyBkb24ndCB3cmFwICgnd3JhcCcgb2ZmKTogVG8gdGhlIGxlZnRtb3N0CisJCQlub24tYmxhbmsgY2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxpbmUgdGhhdCBpcyBvbiB0aGUKKwkJCXNjcmVlbi4gIERpZmZlcnMgZnJvbSAiXiIgd2hlbiB0aGUgZmlyc3Qgbm9uLWJsYW5rCisJCQljaGFyYWN0ZXIgb2YgdGhlIGxpbmUgaXMgbm90IG9uIHRoZSBzY3JlZW4uICB7bm90IGluCisJCQlWaX0KKworCQkJCQkJCSpnbSoKK2dtCQkJTGlrZSAiZzAiLCBidXQgaGFsZiBhIHNjcmVlbndpZHRoIHRvIHRoZSByaWdodCAob3IgYXMKKwkJCW11Y2ggYXMgcG9zc2libGUpLiB7bm90IGluIFZpfQorCisJCQkJCQkJKmckKiAqZzxFbmQ+KgorZyQgb3IgZzxFbmQ+CQlXaGVuIGxpbmVzIHdyYXAgKCd3cmFwJyBvbik6IFRvIHRoZSBsYXN0IGNoYXJhY3RlciBvZgorCQkJdGhlIHNjcmVlbiBsaW5lIGFuZCBbY291bnQgLSAxXSBzY3JlZW4gbGluZXMgZG93bndhcmQKKwkJCXxpbmNsdXNpdmV8LiAgRGlmZmVycyBmcm9tICIkIiB3aGVuIGEgbGluZSBpcyB3aWRlcgorCQkJdGhhbiB0aGUgc2NyZWVuLgorCQkJV2hlbiBsaW5lcyBkb24ndCB3cmFwICgnd3JhcCcgb2ZmKTogVG8gdGhlIHJpZ2h0bW9zdAorCQkJY2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxpbmUgdGhhdCBpcyB2aXNpYmxlIG9uIHRoZQorCQkJc2NyZWVuLiAgRGlmZmVycyBmcm9tICIkIiB3aGVuIHRoZSBsYXN0IGNoYXJhY3RlciBvZgorCQkJdGhlIGxpbmUgaXMgbm90IG9uIHRoZSBzY3JlZW4gb3Igd2hlbiBhIGNvdW50IGlzIHVzZWQuCisJCQlBZGRpdGlvbmFsbHksIHZlcnRpY2FsIG1vdmVtZW50cyBrZWVwIHRoZSBjb2x1bW4sCisJCQlpbnN0ZWFkIG9mIGdvaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKmJhcioKK3wJCQlUbyBzY3JlZW4gY29sdW1uIFtjb3VudF0gaW4gdGhlIGN1cnJlbnQgbGluZS4KKwkJCXxleGNsdXNpdmV8IG1vdGlvbi4KKworCQkJCQkJCSpmKgorZntjaGFyfQkJCVRvIFtjb3VudF0ndGggb2NjdXJyZW5jZSBvZiB7Y2hhcn0gdG8gdGhlIHJpZ2h0LiAgVGhlCisJCQljdXJzb3IgaXMgcGxhY2VkIG9uIHtjaGFyfSB8aW5jbHVzaXZlfC4KKwkJCXtjaGFyfSBjYW4gYmUgZW50ZXJlZCBhcyBhIGRpZ3JhcGggfGRpZ3JhcGgtYXJnfC4KKwkJCVdoZW4gJ2VuY29kaW5nJyBpcyBzZXQgdG8gVW5pY29kZSwgY29tcG9zaW5nCisJCQljaGFyYWN0ZXJzIG1heSBiZSB1c2VkLCBzZWUgfHV0Zi04LWNoYXItYXJnfC4KKwkJCXw6bG1hcHwgbWFwcGluZ3MgYXBwbHkgdG8ge2NoYXJ9LiAgVGhlIENUUkwtXiBjb21tYW5kCisJCQlpbiBJbnNlcnQgbW9kZSBjYW4gYmUgdXNlZCB0byBzd2l0Y2ggdGhpcyBvbi9vZmYKKwkJCXxpX0NUUkwtXnwuCisKKwkJCQkJCQkqRioKK0Z7Y2hhcn0JCQlUbyB0aGUgW2NvdW50XSd0aCBvY2N1cnJlbmNlIG9mIHtjaGFyfSB0byB0aGUgbGVmdC4KKwkJCVRoZSBjdXJzb3IgaXMgcGxhY2VkIG9uIHtjaGFyfSB8aW5jbHVzaXZlfC4KKwkJCXtjaGFyfSBjYW4gYmUgZW50ZXJlZCBsaWtlIHdpdGggdGhlIHxmfCBjb21tYW5kLgorCisJCQkJCQkJKnQqCit0e2NoYXJ9CQkJVGlsbCBiZWZvcmUgW2NvdW50XSd0aCBvY2N1cnJlbmNlIG9mIHtjaGFyfSB0byB0aGUKKwkJCXJpZ2h0LiAgVGhlIGN1cnNvciBpcyBwbGFjZWQgb24gdGhlIGNoYXJhY3RlciBsZWZ0IG9mCisJCQl7Y2hhcn0gfGluY2x1c2l2ZXwuCisJCQl7Y2hhcn0gY2FuIGJlIGVudGVyZWQgbGlrZSB3aXRoIHRoZSB8ZnwgY29tbWFuZC4KKworCQkJCQkJCSpUKgorVHtjaGFyfQkJCVRpbGwgYWZ0ZXIgW2NvdW50XSd0aCBvY2N1cnJlbmNlIG9mIHtjaGFyfSB0byB0aGUKKwkJCWxlZnQuICBUaGUgY3Vyc29yIGlzIHBsYWNlZCBvbiB0aGUgY2hhcmFjdGVyIHJpZ2h0IG9mCisJCQl7Y2hhcn0gfGluY2x1c2l2ZXwuCisJCQl7Y2hhcn0gY2FuIGJlIGVudGVyZWQgbGlrZSB3aXRoIHRoZSB8ZnwgY29tbWFuZC4KKworCQkJCQkJCSo7KgorOwkJCVJlcGVhdCBsYXRlc3QgZiwgdCwgRiBvciBUIFtjb3VudF0gdGltZXMuCisKKwkJCQkJCQkqLCoKKywJCQlSZXBlYXQgbGF0ZXN0IGYsIHQsIEYgb3IgVCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb24KKwkJCVtjb3VudF0gdGltZXMuCisKK1RoZXNlIGNvbW1hbmRzIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgc3BlY2lmaWVkIGNvbHVtbiBpbiB0aGUgY3VycmVudCBsaW5lLgorVGhleSBzdG9wIGF0IHRoZSBmaXJzdCBjb2x1bW4gYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUsIGV4Y2VwdCAiJCIsIHdoaWNoCittYXkgbW92ZSB0byBvbmUgb2YgdGhlIG5leHQgbGluZXMuICBTZWUgJ3doaWNod3JhcCcgb3B0aW9uIHRvIG1ha2Ugc29tZSBvZiB0aGUKK2NvbW1hbmRzIG1vdmUgYWNyb3NzIGxpbmUgYm91bmRhcmllcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBVcC1kb3duIG1vdGlvbnMJCQkJCSp1cC1kb3duLW1vdGlvbnMqCisKK2sJCW9yCQkJCQkqayoKKzxVcD4JCW9yCQkJCQkqPFVwPiogKkNUUkwtUCoKK0NUUkwtUAkJCVtjb3VudF0gbGluZXMgdXB3YXJkIHxsaW5ld2lzZXwuCisKK2oJCW9yCQkJCQkqaioKKzxEb3duPgkJb3IJCQkJCSo8RG93bj4qCitDVFJMLUoJCW9yCQkJCQkqQ1RSTC1KKgorPE5MPgkJb3IJCQkJCSo8Tkw+KiAqQ1RSTC1OKgorQ1RSTC1OCQkJW2NvdW50XSBsaW5lcyBkb3dud2FyZCB8bGluZXdpc2V8LgorCitnawkJb3IJCQkJCSpnayogKmc8VXA+KgorZzxVcD4JCQlbY291bnRdIGRpc3BsYXkgbGluZXMgdXB3YXJkLiAgfGV4Y2x1c2l2ZXwgbW90aW9uLgorCQkJRGlmZmVycyBmcm9tICdrJyB3aGVuIGxpbmVzIHdyYXAsIGFuZCB3aGVuIHVzZWQgd2l0aAorCQkJYW4gb3BlcmF0b3IsIGJlY2F1c2UgaXQncyBub3QgbGluZXdpc2UuICB7bm90IGluIFZpfQorCitnagkJb3IJCQkJCSpnaiogKmc8RG93bj4qCitnPERvd24+CQkJW2NvdW50XSBkaXNwbGF5IGxpbmVzIGRvd253YXJkLiAgfGV4Y2x1c2l2ZXwgbW90aW9uLgorCQkJRGlmZmVycyBmcm9tICdqJyB3aGVuIGxpbmVzIHdyYXAsIGFuZCB3aGVuIHVzZWQgd2l0aAorCQkJYW4gb3BlcmF0b3IsIGJlY2F1c2UgaXQncyBub3QgbGluZXdpc2UuICB7bm90IGluIFZpfQorCisJCQkJCQkJKi0qCistICA8bWludXM+CQlbY291bnRdIGxpbmVzIHVwd2FyZCwgb24gdGhlIGZpcnN0IG5vbi1ibGFuaworCQkJY2hhcmFjdGVyIHxsaW5ld2lzZXwuCisKKysJCW9yCQkJCQkqKyoKK0NUUkwtTQkJb3IJCQkJCSpDVFJMLU0qICo8Q1I+KgorPENSPgkJCVtjb3VudF0gbGluZXMgZG93bndhcmQsIG9uIHRoZSBmaXJzdCBub24tYmxhbmsKKwkJCWNoYXJhY3RlciB8bGluZXdpc2V8LgorCisJCQkJCQkJKl8qCitfICA8dW5kZXJzY29yZT4JCVtjb3VudF0gLSAxIGxpbmVzIGRvd253YXJkLCBvbiB0aGUgZmlyc3Qgbm9uLWJsYW5rCisJCQljaGFyYWN0ZXIgfGxpbmV3aXNlfC4KKworCQkJCQkJCSpHKgorRwkJCUdvdG8gbGluZSBbY291bnRdLCBkZWZhdWx0IGxhc3QgbGluZSwgb24gdGhlIGZpcnN0CisJCQlub24tYmxhbmsgY2hhcmFjdGVyIHxsaW5ld2lzZXwuICBJZiAnc3RhcnRvZmxpbmUnIG5vdAorCQkJc2V0LCBrZWVwIHRoZSBzYW1lIGNvbHVtbi4KKworCQkJCQkJCSo8Qy1FbmQ+KgorPEMtRW5kPgkJCUdvdG8gbGluZSBbY291bnRdLCBkZWZhdWx0IGxhc3QgbGluZSwgb24gdGhlIGxhc3QKKwkJCWNoYXJhY3RlciB8aW5jbHVzaXZlfC4ge25vdCBpbiBWaX0KKworPEMtSG9tZT4Jb3IJCQkJCSpnZyogKjxDLUhvbWU+KgorZ2cJCQlHb3RvIGxpbmUgW2NvdW50XSwgZGVmYXVsdCBmaXJzdCBsaW5lLCBvbiB0aGUgZmlyc3QKKwkJCW5vbi1ibGFuayBjaGFyYWN0ZXIgfGxpbmV3aXNlfC4gIElmICdzdGFydG9mbGluZScgbm90CisJCQlzZXQsIGtlZXAgdGhlIHNhbWUgY29sdW1uLgorCis6W3JhbmdlXQkJU2V0IHRoZSBjdXJzb3Igb24gdGhlIHNwZWNpZmllZCBsaW5lIG51bWJlci4gIElmCisJCQl0aGVyZSBhcmUgc2V2ZXJhbCBudW1iZXJzLCB0aGUgbGFzdCBvbmUgaXMgdXNlZC4KKworCQkJCQkJCSpOJSoKK3tjb3VudH0lCQlHbyB0byB7Y291bnR9IHBlcmNlbnRhZ2UgaW4gdGhlIGZpbGUsIG9uIHRoZSBmaXJzdAorCQkJbm9uLWJsYW5rIGluIHRoZSBsaW5lIHxsaW5ld2lzZXwuICBUbyBjb21wdXRlIHRoZSBuZXcKKwkJCWxpbmUgbnVtYmVyIHRoaXMgZm9ybXVsYSBpcyB1c2VkOgorCQkJICAgICh7Y291bnR9ICogbnVtYmVyLW9mLWxpbmVzICsgOTkpIC8gMTAwCisJCQlTZWUgYWxzbyAnc3RhcnRvZmxpbmUnIG9wdGlvbi4gIHtub3QgaW4gVml9CisKKzpbcmFuZ2VdZ29bdG9dIFtjb3VudF0JCQkJCSo6Z28qICo6Z290byogKmdvKgorW2NvdW50XWdvCQlHbyB0byB7Y291bnR9IGJ5dGUgaW4gdGhlIGJ1ZmZlci4gIERlZmF1bHQgW2NvdW50XSBpcworCQkJb25lLCBzdGFydCBvZiB0aGUgZmlsZS4gIFdoZW4gZ2l2aW5nIFtyYW5nZV0sIHRoZQorCQkJbGFzdCBudW1iZXIgaW4gaXQgdXNlZCBhcyB0aGUgYnl0ZSBjb3VudC4gIEVuZC1vZi1saW5lCisJCQljaGFyYWN0ZXJzIGFyZSBjb3VudGVkIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudAorCQkJJ2ZpbGVmb3JtYXQnIHNldHRpbmcuCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtieXRlX29mZnNldHwgZmVhdHVyZX0KKworVGhlc2UgY29tbWFuZHMgbW92ZSB0byB0aGUgc3BlY2lmaWVkIGxpbmUuICBUaGV5IHN0b3Agd2hlbiByZWFjaGluZyB0aGUgZmlyc3QKK29yIHRoZSBsYXN0IGxpbmUuICBUaGUgZmlyc3QgdHdvIGNvbW1hbmRzIHB1dCB0aGUgY3Vyc29yIGluIHRoZSBzYW1lIGNvbHVtbgorKGlmIHBvc3NpYmxlKSBhcyBpdCB3YXMgYWZ0ZXIgdGhlIGxhc3QgY29tbWFuZCB0aGF0IGNoYW5nZWQgdGhlIGNvbHVtbiwKK2V4Y2VwdCBhZnRlciB0aGUgIiQiIGNvbW1hbmQsIHRoZW4gdGhlIGN1cnNvciB3aWxsIGJlIHB1dCBvbiB0aGUgbGFzdAorY2hhcmFjdGVyIG9mIHRoZSBsaW5lLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFdvcmQgbW90aW9ucwkJCQkJCSp3b3JkLW1vdGlvbnMqCisKKzxTLVJpZ2h0PglvcgkJCQkJKjxTLVJpZ2h0PiogKncqCit3CQkJW2NvdW50XSB3b3JkcyBmb3J3YXJkLiAgfGV4Y2x1c2l2ZXwgbW90aW9uLgorCis8Qy1SaWdodD4Jb3IJCQkJCSo8Qy1SaWdodD4qICpXKgorVwkJCVtjb3VudF0gV09SRFMgZm9yd2FyZC4gIHxleGNsdXNpdmV8IG1vdGlvbi4KKworCQkJCQkJCSplKgorZQkJCUZvcndhcmQgdG8gdGhlIGVuZCBvZiB3b3JkIFtjb3VudF0gfGluY2x1c2l2ZXwuCisKKwkJCQkJCQkqRSoKK0UJCQlGb3J3YXJkIHRvIHRoZSBlbmQgb2YgV09SRCBbY291bnRdIHxpbmNsdXNpdmV8LgorCis8Uy1MZWZ0PglvcgkJCQkJKjxTLUxlZnQ+KiAqYioKK2IJCQlbY291bnRdIHdvcmRzIGJhY2t3YXJkLiAgfGV4Y2x1c2l2ZXwgbW90aW9uLgorCis8Qy1MZWZ0PglvcgkJCQkJKjxDLUxlZnQ+KiAqQioKK0IJCQlbY291bnRdIFdPUkRTIGJhY2t3YXJkLiAgfGV4Y2x1c2l2ZXwgbW90aW9uLgorCisJCQkJCQkJKmdlKgorZ2UJCQlCYWNrd2FyZCB0byB0aGUgZW5kIG9mIHdvcmQgW2NvdW50XSB8aW5jbHVzaXZlfC4KKworCQkJCQkJCSpnRSoKK2dFCQkJQmFja3dhcmQgdG8gdGhlIGVuZCBvZiBXT1JEIFtjb3VudF0gfGluY2x1c2l2ZXwuCisKK1RoZXNlIGNvbW1hbmRzIG1vdmUgb3ZlciB3b3JkcyBvciBXT1JEUy4KKwkJCQkJCQkqd29yZCoKK0Egd29yZCBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIGxldHRlcnMsIGRpZ2l0cyBhbmQgdW5kZXJzY29yZXMsIG9yIGEKK3NlcXVlbmNlIG9mIG90aGVyIG5vbi1ibGFuayBjaGFyYWN0ZXJzLCBzZXBhcmF0ZWQgd2l0aCB3aGl0ZSBzcGFjZSAoc3BhY2VzLAordGFicywgPEVPTD4pLiAgVGhpcyBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZSAnaXNrZXl3b3JkJyBvcHRpb24uCisJCQkJCQkJKldPUkQqCitBIFdPUkQgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiBub24tYmxhbmsgY2hhcmFjdGVycywgc2VwYXJhdGVkIHdpdGggd2hpdGUKK3NwYWNlLiAgQW4gZW1wdHkgbGluZSBpcyBhbHNvIGNvbnNpZGVyZWQgdG8gYmUgYSB3b3JkIGFuZCBhIFdPUkQuCisKK0Egc2VxdWVuY2Ugb2YgZm9sZGVkIGxpbmVzIGlzIGNvdW50ZWQgZm9yIG9uZSB3b3JkIG9mIGEgc2luZ2xlIGNoYXJhY3Rlci4KKyJ3IiBhbmQgIlciLCAiZSIgYW5kICJFIiBtb3ZlIHRvIHRoZSBzdGFydC9lbmQgb2YgdGhlIGZpcnN0IHdvcmQgb3IgV09SRCBhZnRlcgorYSByYW5nZSBvZiBmb2xkZWQgbGluZXMuICAiYiIgYW5kICJCIiBtb3ZlIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlyc3Qgd29yZCBvcgorV09SRCBiZWZvcmUgdGhlIGZvbGQuCisKK1NwZWNpYWwgY2FzZTogImN3IiBhbmQgImNXIiBhcmUgdHJlYXRlZCBsaWtlICJjZSIgYW5kICJjRSIgaWYgdGhlIGN1cnNvciBpcworb24gYSBub24tYmxhbmsuICBUaGlzIGlzIGJlY2F1c2UgImN3IiBpcyBpbnRlcnByZXRlZCBhcyBjaGFuZ2Utd29yZCwgYW5kIGEKK3dvcmQgZG9lcyBub3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHdoaXRlIHNwYWNlLiAge1ZpOiAiY3ciIHdoZW4gb24gYSBibGFuaworZm9sbG93ZWQgYnkgb3RoZXIgYmxhbmtzIGNoYW5nZXMgb25seSB0aGUgZmlyc3QgYmxhbms7IHRoaXMgaXMgcHJvYmFibHkgYQorYnVnLCBiZWNhdXNlICJkdyIgZGVsZXRlcyBhbGwgdGhlIGJsYW5rc30KKworQW5vdGhlciBzcGVjaWFsIGNhc2U6IFdoZW4gdXNpbmcgdGhlICJ3IiBtb3Rpb24gaW4gY29tYmluYXRpb24gd2l0aCBhbgorb3BlcmF0b3IgYW5kIHRoZSBsYXN0IHdvcmQgbW92ZWQgb3ZlciBpcyBhdCB0aGUgZW5kIG9mIGEgbGluZSwgdGhlIGVuZCBvZgordGhhdCB3b3JkIGJlY29tZXMgdGhlIGVuZCBvZiB0aGUgb3BlcmF0ZWQgdGV4dCwgbm90IHRoZSBmaXJzdCB3b3JkIGluIHRoZQorbmV4dCBsaW5lLgorCitUaGUgb3JpZ2luYWwgVmkgaW1wbGVtZW50YXRpb24gb2YgImUiIGlzIGJ1Z2d5LiAgRm9yIGV4YW1wbGUsIHRoZSAiZSIgY29tbWFuZAord2lsbCBzdG9wIG9uIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lIGlmIHRoZSBwcmV2aW91cyBsaW5lIHdhcyBlbXB0eS4KK0J1dCB3aGVuIHlvdSB1c2UgIjJlIiB0aGlzIGRvZXMgbm90IGhhcHBlbi4gIEluIFZpbSAiZWUiIGFuZCAiMmUiIGFyZSB0aGUKK3NhbWUsIHdoaWNoIGlzIG1vcmUgbG9naWNhbC4gIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIGEgc21hbGwgaW5jb21wYXRpYmlsaXR5CitiZXR3ZWVuIFZpIGFuZCBWaW0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gVGV4dCBvYmplY3QgbW90aW9ucwkJCQkJKm9iamVjdC1tb3Rpb25zKgorCisJCQkJCQkJKigqCisoCQkJW2NvdW50XSBzZW50ZW5jZXMgYmFja3dhcmQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisKKwkJCQkJCQkqKSoKKykJCQlbY291bnRdIHNlbnRlbmNlcyBmb3J3YXJkLiAgfGV4Y2x1c2l2ZXwgbW90aW9uLgorCisJCQkJCQkJKnsqCit7CQkJW2NvdW50XSBwYXJhZ3JhcGhzIGJhY2t3YXJkLiAgfGV4Y2x1c2l2ZXwgbW90aW9uLgorCisJCQkJCQkJKn0qCit9CQkJW2NvdW50XSBwYXJhZ3JhcGhzIGZvcndhcmQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisKKwkJCQkJCQkqXV0qCitdXQkJCVtjb3VudF0gc2VjdGlvbnMgZm9yd2FyZCBvciB0byB0aGUgbmV4dCAneycgaW4gdGhlCisJCQlmaXJzdCBjb2x1bW4uICBXaGVuIHVzZWQgYWZ0ZXIgYW4gb3BlcmF0b3IsIHRoZW4gdGhlCisJCQknfScgaW4gdGhlIGZpcnN0IGNvbHVtbi4gIHxsaW5ld2lzZXwKKworCQkJCQkJCSpdWyoKK11bCQkJW2NvdW50XSBzZWN0aW9ucyBmb3J3YXJkIG9yIHRvIHRoZSBuZXh0ICd9JyBpbiB0aGUKKwkJCWZpcnN0IGNvbHVtbi4gIHxsaW5ld2lzZXwKKworCQkJCQkJCSpbWyoKK1tbCQkJW2NvdW50XSBzZWN0aW9ucyBiYWNrd2FyZCBvciB0byB0aGUgcHJldmlvdXMgJ3snIGluCisJCQl0aGUgZmlyc3QgY29sdW1uLiAgfGxpbmV3aXNlfAorCisJCQkJCQkJKltdKgorW10JCQlbY291bnRdIHNlY3Rpb25zIGJhY2t3YXJkIG9yIHRvIHRoZSBwcmV2aW91cyAnfScgaW4KKwkJCXRoZSBmaXJzdCBjb2x1bW4uICB8bGluZXdpc2V8CisKK1RoZXNlIGNvbW1hbmRzIG1vdmUgb3ZlciB0aHJlZSBraW5kcyBvZiB0ZXh0IG9iamVjdHMuCisKKwkJCQkJCQkqc2VudGVuY2UqCitBIHNlbnRlbmNlIGlzIGRlZmluZWQgYXMgZW5kaW5nIGF0IGEgJy4nLCAnIScgb3IgJz8nIGZvbGxvd2VkIGJ5IGVpdGhlciB0aGUKK2VuZCBvZiBhIGxpbmUsIG9yIGJ5IGEgc3BhY2Ugb3IgdGFiLiAgQW55IG51bWJlciBvZiBjbG9zaW5nICcpJywgJ10nLCAnIicKK2FuZCAnJycgY2hhcmFjdGVycyBtYXkgYXBwZWFyIGFmdGVyIHRoZSAnLicsICchJyBvciAnPycgYmVmb3JlIHRoZSBzcGFjZXMsCit0YWJzIG9yIGVuZCBvZiBsaW5lLiAgQSBwYXJhZ3JhcGggYW5kIHNlY3Rpb24gYm91bmRhcnkgaXMgYWxzbyBhIHNlbnRlbmNlCitib3VuZGFyeS4KK0lmIHRoZSAnSicgZmxhZyBpcyBwcmVzZW50IGluICdjcG9wdGlvbnMnLCBhdCBsZWFzdCB0d28gc3BhY2VzIGhhdmUgdG8KK2ZvbGxvdyB0aGUgcHVuY3R1YXRpb24gbWFyazsgPFRhYj5zIGFyZSBub3QgcmVjb2duaXplZCBhcyB3aGl0ZSBzcGFjZS4KK1RoZSBkZWZpbml0aW9uIG9mIGEgc2VudGVuY2UgY2Fubm90IGJlIGNoYW5nZWQuCisKKwkJCQkJCQkqcGFyYWdyYXBoKgorQSBwYXJhZ3JhcGggYmVnaW5zIGFmdGVyIGVhY2ggZW1wdHkgbGluZSwgYW5kIGFsc28gYXQgZWFjaCBvZiBhIHNldCBvZgorcGFyYWdyYXBoIG1hY3Jvcywgc3BlY2lmaWVkIGJ5IHRoZSBwYWlycyBvZiBjaGFyYWN0ZXJzIGluIHRoZSAncGFyYWdyYXBocycKK29wdGlvbi4gIFRoZSBkZWZhdWx0IGlzICJJUExQUFBRUFAgTElwcGxwaXBicCIsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZQorbWFjcm9zICIuSVAiLCAiLkxQIiwgZXRjLiAgKFRoZXNlIGFyZSBucm9mZiBtYWNyb3MsIHNvIHRoZSBkb3QgbXVzdCBiZSBpbiB0aGUKK2ZpcnN0IGNvbHVtbikuICBBIHNlY3Rpb24gYm91bmRhcnkgaXMgYWxzbyBhIHBhcmFncmFwaCBib3VuZGFyeS4gIE5vdGUgdGhhdAordGhpcyBkb2VzIG5vdCBpbmNsdWRlIGEgJ3snIG9yICd9JyBpbiB0aGUgZmlyc3QgY29sdW1uLiAgQWxzbyBub3RlIHRoYXQgYQorYmxhbmsgbGluZSAob25seSBjb250YWluaW5nIHdoaXRlIHNwYWNlKSBpcyBOT1QgYSBwYXJhZ3JhcGggYm91bmRhcnkuCisKKwkJCQkJCQkqc2VjdGlvbioKK0Egc2VjdGlvbiBiZWdpbnMgYWZ0ZXIgYSBmb3JtLWZlZWQgKDxDLUw+KSBpbiB0aGUgZmlyc3QgY29sdW1uIGFuZCBhdCBlYWNoIG9mCithIHNldCBvZiBzZWN0aW9uIG1hY3Jvcywgc3BlY2lmaWVkIGJ5IHRoZSBwYWlycyBvZiBjaGFyYWN0ZXJzIGluIHRoZQorJ3NlY3Rpb25zJyBvcHRpb24uICBUaGUgZGVmYXVsdCBpcyAiU0hOSEggSFVuaHNoIiwgd2hpY2ggZGVmaW5lcyBhIHNlY3Rpb24gdG8KK3N0YXJ0IGF0IHRoZSBucm9mZiBtYWNyb3MgIi5TSCIsICIuTkgiLCAiLkgiLCAiLkhVIiwgIi5uaCIgYW5kICIuc2giLgorCitUaGUgIl0iIGFuZCAiWyIgY29tbWFuZHMgc3RvcCBhdCB0aGUgJ3snIG9yICd9JyBpbiB0aGUgZmlyc3QgY29sdW1uLiAgVGhpcyBpcwordXNlZnVsIHRvIGZpbmQgdGhlIHN0YXJ0IG9yIGVuZCBvZiBhIGZ1bmN0aW9uIGluIGEgQyBwcm9ncmFtLiAgTm90ZSB0aGF0IHRoZQorZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBjb21tYW5kIGRldGVybWluZXMgdGhlIHNlYXJjaCBkaXJlY3Rpb24gYW5kIHRoZQorc2Vjb25kIGNoYXJhY3RlciB0aGUgdHlwZSBvZiBicmFjZSBmb3VuZC4KKworSWYgeW91ciAneycgb3IgJ30nIGFyZSBub3QgaW4gdGhlIGZpcnN0IGNvbHVtbiwgYW5kIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSAiW1siCithbmQgIl1dIiBhbnl3YXksIHRyeSB0aGVzZSBtYXBwaW5nczogPgorICAgOm1hcCBbWyA/ezxDUj53OTlbeworICAgOm1hcCBdWyAvfTxDUj5iOTldfQorICAgOm1hcCBdXSBqMFtbJS97PENSPgorICAgOm1hcCBbXSBrJF1bJT99PENSPgorW3R5cGUgdGhlc2UgbGl0ZXJhbGx5LCBzZWUgfDw+fF0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBUZXh0IG9iamVjdCBzZWxlY3Rpb24JCQkqb2JqZWN0LXNlbGVjdCogKnRleHQtb2JqZWN0cyoKKwkJCQkJCSp2X2EqICp2X2kqCisKK1RoaXMgaXMgYSBzZXJpZXMgb2YgY29tbWFuZHMgdGhhdCBjYW4gb25seSBiZSB1c2VkIHdoaWxlIGluIFZpc3VhbCBtb2RlIG9yCithZnRlciBhbiBvcGVyYXRvci4gIFRoZSBjb21tYW5kcyB0aGF0IHN0YXJ0IHdpdGggImEiIHNlbGVjdCAiYSJuIG9iamVjdAoraW5jbHVkaW5nIHdoaXRlIHNwYWNlLCB0aGUgY29tbWFuZHMgc3RhcnRpbmcgd2l0aCAiaSIgc2VsZWN0IGFuICJpbm5lciIgb2JqZWN0Cit3aXRob3V0IHdoaXRlIHNwYWNlLCBvciBqdXN0IHRoZSB3aGl0ZSBzcGFjZS4gIFRodXMgdGhlICJpbm5lciIgY29tbWFuZHMKK2Fsd2F5cyBzZWxlY3QgbGVzcyB0ZXh0IHRoYW4gdGhlICJhIiBjb21tYW5kcy4KKworVGhlc2UgY29tbWFuZHMgYXJlIHtub3QgaW4gVml9LgorVGhlc2UgY29tbWFuZHMgYXJlIG5vdCBhdmFpbGFibGUgd2hlbiB0aGUgfCt0ZXh0b2JqZWN0c3wgZmVhdHVyZSBoYXMgYmVlbgorZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorCQkJCQkJCSp2X2F3KiAqYXcqCithdwkJCSJhIHdvcmQiLCBzZWxlY3QgW2NvdW50XSB3b3JkcyAoc2VlIHx3b3JkfCkuCisJCQlMZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlIHNwYWNlIGlzIGluY2x1ZGVkLCBidXQgbm90CisJCQljb3VudGVkLgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBsaW5ld2lzZSBtb2RlICJhdyIgc3dpdGNoZXMgdG8KKwkJCVZpc3VhbCBjaGFyYWN0ZXJ3aXNlIG1vZGUuCisKKwkJCQkJCQkqdl9pdyogKml3KgoraXcJCQkiaW5uZXIgd29yZCIsIHNlbGVjdCBbY291bnRdIHdvcmRzIChzZWUgfHdvcmR8KS4KKwkJCVdoaXRlIHNwYWNlIGJldHdlZW4gd29yZHMgaXMgY291bnRlZCB0b28uCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIGxpbmV3aXNlIG1vZGUgIml3IiBzd2l0Y2hlcyB0bworCQkJVmlzdWFsIGNoYXJhY3Rlcndpc2UgbW9kZS4KKworCQkJCQkJCSp2X2FXKiAqYVcqCithVwkJCSJhIFdPUkQiLCBzZWxlY3QgW2NvdW50XSBXT1JEcyAoc2VlIHxXT1JEfCkuCisJCQlMZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlIHNwYWNlIGlzIGluY2x1ZGVkLCBidXQgbm90CisJCQljb3VudGVkLgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBsaW5ld2lzZSBtb2RlICJhVyIgc3dpdGNoZXMgdG8KKwkJCVZpc3VhbCBjaGFyYWN0ZXJ3aXNlIG1vZGUuCisKKwkJCQkJCQkqdl9pVyogKmlXKgoraVcJCQkiaW5uZXIgV09SRCIsIHNlbGVjdCBbY291bnRdIFdPUkRzIChzZWUgfFdPUkR8KS4KKwkJCVdoaXRlIHNwYWNlIGJldHdlZW4gd29yZHMgaXMgY291bnRlZCB0b28uCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIGxpbmV3aXNlIG1vZGUgImlXIiBzd2l0Y2hlcyB0bworCQkJVmlzdWFsIGNoYXJhY3Rlcndpc2UgbW9kZS4KKworCQkJCQkJCSp2X2FzKiAqYXMqCithcwkJCSJhIHNlbnRlbmNlIiwgc2VsZWN0IFtjb3VudF0gc2VudGVuY2VzIChzZWUKKwkJCXxzZW50ZW5jZXwpLgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBtb2RlIGl0IGlzIG1hZGUgY2hhcmFjdGVyd2lzZS4KKworCQkJCQkJCSp2X2lzKiAqaXMqCitpcwkJCSJpbm5lciBzZW50ZW5jZSIsIHNlbGVjdCBbY291bnRdIHNlbnRlbmNlcyAoc2VlCisJCQl8c2VudGVuY2V8KS4KKwkJCVdoZW4gdXNlZCBpbiBWaXN1YWwgbW9kZSBpdCBpcyBtYWRlIGNoYXJhY3Rlcndpc2UuCisKKwkJCQkJCQkqdl9hcCogKmFwKgorYXAJCQkiYSBwYXJhZ3JhcGgiLCBzZWxlY3QgW2NvdW50XSBwYXJhZ3JhcGhzIChzZWUKKwkJCXxwYXJhZ3JhcGh8KS4KKwkJCUV4Y2VwdGlvbjogYSBibGFuayBsaW5lIChvbmx5IGNvbnRhaW5pbmcgd2hpdGUgc3BhY2UpCisJCQlpcyBhbHNvIGEgcGFyYWdyYXBoIGJvdW5kYXJ5LgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBtb2RlIGl0IGlzIG1hZGUgbGluZXdpc2UuCisKKwkJCQkJCQkqdl9pcCogKmlwKgoraXAJCQkiaW5uZXIgcGFyYWdyYXBoIiwgc2VsZWN0IFtjb3VudF0gcGFyYWdyYXBocyAoc2VlCisJCQl8cGFyYWdyYXBofCkuCisJCQlFeGNlcHRpb246IGEgYmxhbmsgbGluZSAob25seSBjb250YWluaW5nIHdoaXRlIHNwYWNlKQorCQkJaXMgYWxzbyBhIHBhcmFncmFwaCBib3VuZGFyeS4KKwkJCVdoZW4gdXNlZCBpbiBWaXN1YWwgbW9kZSBpdCBpcyBtYWRlIGxpbmV3aXNlLgorCithXQkJCQkJCSp2X2FdKiAqdl9hWyogKmFdKiAqYVsqCithWwkJCSJhIFtdIGJsb2NrIiwgc2VsZWN0IFtjb3VudF0gJ1snICddJyBibG9ja3MuICBUaGlzCisJCQlnb2VzIGJhY2t3YXJkcyB0byB0aGUgW2NvdW50XSB1bmNsb3NlZCAnWycsIGFuZCBmaW5kcworCQkJdGhlIG1hdGNoaW5nICddJy4gIFRoZSBlbmNsb3NlZCB0ZXh0IGlzIHNlbGVjdGVkLAorCQkJaW5jbHVkaW5nIHRoZSAnWycgYW5kICddJy4KKwkJCVdoZW4gdXNlZCBpbiBWaXN1YWwgbW9kZSBpdCBpcyBtYWRlIGNoYXJhY3Rlcndpc2UuCisKK2ldCQkJCQkJKnZfaV0qICp2X2lbKiAqaV0qICppWyoKK2lbCQkJImlubmVyIFtdIGJsb2NrIiwgc2VsZWN0IFtjb3VudF0gJ1snICddJyBibG9ja3MuICBUaGlzCisJCQlnb2VzIGJhY2t3YXJkcyB0byB0aGUgW2NvdW50XSB1bmNsb3NlZCAnWycsIGFuZCBmaW5kcworCQkJdGhlIG1hdGNoaW5nICddJy4gIFRoZSBlbmNsb3NlZCB0ZXh0IGlzIHNlbGVjdGVkLAorCQkJZXhjbHVkaW5nIHRoZSAnWycgYW5kICddJy4KKwkJCVdoZW4gdXNlZCBpbiBWaXN1YWwgbW9kZSBpdCBpcyBtYWRlIGNoYXJhY3Rlcndpc2UuCisKK2EpCQkJCQkJCSp2X2EpKiAqYSkqICphKCoKK2EoCQkJCQkJCSp2X2FiKiAqdl9hKCogKmFiKgorYWIJCQkiYSBibG9jayIsIHNlbGVjdCBbY291bnRdIGJsb2NrcywgZnJvbSAiW2NvdW50XSBbKCIgdG8KKwkJCXRoZSBtYXRjaGluZyAnKScsIGluY2x1ZGluZyB0aGUgJygnIGFuZCAnKScgKHNlZQorCQkJfFsofCkuICBEb2VzIG5vdCBpbmNsdWRlIHdoaXRlIHNwYWNlIG91dHNpZGUgb2YgdGhlCisJCQlwYXJlbnRoZXNpcy4KKwkJCVdoZW4gdXNlZCBpbiBWaXN1YWwgbW9kZSBpdCBpcyBtYWRlIGNoYXJhY3Rlcndpc2UuCisKK2kpCQkJCQkJCSp2X2kpKiAqaSkqICppKCoKK2koCQkJCQkJCSp2X2liKiAqdl9pKCogKmliKgoraWIJCQkiaW5uZXIgYmxvY2siLCBzZWxlY3QgW2NvdW50XSBibG9ja3MsIGZyb20gIltjb3VudF0gWygiCisJCQl0byB0aGUgbWF0Y2hpbmcgJyknLCBleGNsdWRpbmcgdGhlICcoJyBhbmQgJyknIChzZWUKKwkJCXxbKHwpLgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBtb2RlIGl0IGlzIG1hZGUgY2hhcmFjdGVyd2lzZS4KKworYT4JCQkJCQkqdl9hPiogKnZfYTwqICphPiogKmE8KgorYTwJCQkiYSA8PiBibG9jayIsIHNlbGVjdCBbY291bnRdIDw+IGJsb2NrcywgZnJvbSB0aGUKKwkJCVtjb3VudF0ndGggdW5tYXRjaGVkICc8JyBiYWNrd2FyZHMgdG8gdGhlIG1hdGNoaW5nCisJCQknPicsIGluY2x1ZGluZyB0aGUgJzwnIGFuZCAnPicuCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIG1vZGUgaXQgaXMgbWFkZSBjaGFyYWN0ZXJ3aXNlLgorCitpPgkJCQkJCSp2X2k+KiAqdl9pPCogKmk+KiAqaTwqCitpPAkJCSJpbm5lciA8PiBibG9jayIsIHNlbGVjdCBbY291bnRdIDw+IGJsb2NrcywgZnJvbQorCQkJdGhlIFtjb3VudF0ndGggdW5tYXRjaGVkICc8JyBiYWNrd2FyZHMgdG8gdGhlIG1hdGNoaW5nCisJCQknPicsIGV4Y2x1ZGluZyB0aGUgJzwnIGFuZCAnPicuCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIG1vZGUgaXQgaXMgbWFkZSBjaGFyYWN0ZXJ3aXNlLgorCithfQkJCQkJCQkqdl9hfSogKmF9KiAqYXsqCithewkJCQkJCQkqdl9hQiogKnZfYXsqICphQioKK2FCCQkJImEgQmxvY2siLCBzZWxlY3QgW2NvdW50XSBCbG9ja3MsIGZyb20gIltjb3VudF0gW3siIHRvCisJCQl0aGUgbWF0Y2hpbmcgJ30nLCBpbmNsdWRpbmcgdGhlICd7JyBhbmQgJ30nIChzZWUKKwkJCXxbe3wpLgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBtb2RlIGl0IGlzIG1hZGUgY2hhcmFjdGVyd2lzZS4KKworaX0JCQkJCQkJKnZfaX0qICppfSogKml7KgoraXsJCQkJCQkJKnZfaUIqICp2X2l7KiAqaUIqCitpQgkJCSJpbm5lciBCbG9jayIsIHNlbGVjdCBbY291bnRdIEJsb2NrcywgZnJvbSAiW2NvdW50XSBbeyIKKwkJCXRvIHRoZSBtYXRjaGluZyAnfScsIGV4Y2x1ZGluZyB0aGUgJ3snIGFuZCAnfScgKHNlZQorCQkJfFt7fCkuCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIG1vZGUgaXQgaXMgbWFkZSBjaGFyYWN0ZXJ3aXNlLgorCitXaGVuIHVzZWQgYWZ0ZXIgYW4gb3BlcmF0b3I6CitGb3Igbm9uLWJsb2NrIG9iamVjdHM6CisJRm9yIHRoZSAiYSIgY29tbWFuZHM6IFRoZSBvcGVyYXRvciBhcHBsaWVzIHRvIHRoZSBvYmplY3QgYW5kIHRoZSB3aGl0ZQorCXNwYWNlIGFmdGVyIHRoZSBvYmplY3QuICBJZiB0aGVyZSBpcyBubyB3aGl0ZSBzcGFjZSBhZnRlciB0aGUgb2JqZWN0CisJb3Igd2hlbiB0aGUgY3Vyc29yIHdhcyBpbiB0aGUgd2hpdGUgc3BhY2UgYmVmb3JlIHRoZSBvYmplY3QsIHRoZSB3aGl0ZQorCXNwYWNlIGJlZm9yZSB0aGUgb2JqZWN0IGlzIGluY2x1ZGVkLgorCUZvciB0aGUgImlubmVyIiBjb21tYW5kczogSWYgdGhlIGN1cnNvciB3YXMgb24gdGhlIG9iamVjdCwgdGhlCisJb3BlcmF0b3IgYXBwbGllcyB0byB0aGUgb2JqZWN0LiAgSWYgdGhlIGN1cnNvciB3YXMgb24gd2hpdGUgc3BhY2UsIHRoZQorCW9wZXJhdG9yIGFwcGxpZXMgdG8gdGhlIHdoaXRlIHNwYWNlLgorRm9yIGEgYmxvY2sgb2JqZWN0OgorCVRoZSBvcGVyYXRvciBhcHBsaWVzIHRvIHRoZSBibG9jayB3aGVyZSB0aGUgY3Vyc29yIGlzIGluLCBvciB0aGUgYmxvY2sKKwlvbiB3aGljaCB0aGUgY3Vyc29yIGlzIG9uIG9uZSBvZiB0aGUgYnJhY2VzLiAgRm9yIHRoZSAiaW5uZXIiIGNvbW1hbmRzCisJdGhlIHN1cnJvdW5kaW5nIGJyYWNlcyBhcmUgZXhjbHVkZWQuICBGb3IgdGhlICJhIiBjb21tYW5kcywgdGhlIGJyYWNlcworCWFyZSBpbmNsdWRlZC4KKworV2hlbiB1c2VkIGluIFZpc3VhbCBtb2RlOgorV2hlbiBzdGFydCBhbmQgZW5kIG9mIHRoZSBWaXN1YWwgYXJlYSBhcmUgdGhlIHNhbWUgKGp1c3QgYWZ0ZXIgdHlwaW5nICJ2Iik6CisJT25lIG9iamVjdCBpcyBzZWxlY3RlZCwgdGhlIHNhbWUgYXMgZm9yIHVzaW5nIGFuIG9wZXJhdG9yLgorV2hlbiBzdGFydCBhbmQgZW5kIG9mIHRoZSBWaXN1YWwgYXJlYSBhcmUgbm90IHRoZSBzYW1lOgorCUZvciBub24tYmxvY2sgb2JqZWN0cyB0aGUgYXJlYSBpcyBleHRlbmRlZCBieSBvbmUgb2JqZWN0IG9yIHRoZSB3aGl0ZQorCXNwYWNlIHVwIHRvIHRoZSBuZXh0IG9iamVjdCwgb3IgYm90aCBmb3IgdGhlICJhIiBvYmplY3RzLiAgVGhlCisJZGlyZWN0aW9uIGluIHdoaWNoIHRoaXMgaGFwcGVucyBkZXBlbmRzIG9uIHdoaWNoIHNpZGUgb2YgdGhlIFZpc3VhbAorCWFyZWEgdGhlIGN1cnNvciBpcy4gIEZvciB0aGUgYmxvY2sgb2JqZWN0cyB0aGUgYmxvY2sgaXMgZXh0ZW5kZWQgb25lCisJbGV2ZWwgb3V0d2FyZHMuCisKK0ZvciBpbGx1c3RyYXRpb24sIGhlcmUgaXMgYSBsaXN0IG9mIGRlbGV0ZSBjb21tYW5kcywgZ3JvdXBlZCBmcm9tIHNtYWxsIHRvIGJpZworb2JqZWN0cy4gIE5vdGUgdGhhdCBmb3IgYSBzaW5nbGUgY2hhcmFjdGVyIGFuZCBhIHdob2xlIGxpbmUgdGhlIGV4aXN0aW5nIHZpCittb3ZlbWVudCBjb21tYW5kcyBhcmUgdXNlZC4KKwkiZGwiCWRlbGV0ZSBjaGFyYWN0ZXIgKGFsaWFzOiAieCIpCQl8ZGx8CisJImRpdyIJZGVsZXRlIGlubmVyIHdvcmQJCQkqZGl3KgorCSJkYXciCWRlbGV0ZSBhIHdvcmQJCQkJKmRhdyoKKwkiZGlXIglkZWxldGUgaW5uZXIgV09SRCAoc2VlIHxXT1JEfCkJCSpkaVcqCisJImRhVyIJZGVsZXRlIGEgV09SRCAoc2VlIHxXT1JEfCkJCSpkYVcqCisJImRkIglkZWxldGUgb25lIGxpbmUJCQkJfGRkfAorCSJkaXMiCWRlbGV0ZSBpbm5lciBzZW50ZW5jZQkJCSpkaXMqCisJImRhcyIJZGVsZXRlIGEgc2VudGVuY2UJCQkqZGFzKgorCSJkaWIiCWRlbGV0ZSBpbm5lciAnKCcgJyknIGJsb2NrCQkqZGliKgorCSJkYWIiCWRlbGV0ZSBhICcoJyAnKScgYmxvY2sJCQkqZGFiKgorCSJkaXAiCWRlbGV0ZSBpbm5lciBwYXJhZ3JhcGgJCQkqZGlwKgorCSJkYXAiCWRlbGV0ZSBhIHBhcmFncmFwaAkJCSpkYXAqCisJImRpQiIJZGVsZXRlIGlubmVyICd7JyAnfScgYmxvY2sJCSpkaUIqCisJImRhQiIJZGVsZXRlIGEgJ3snICd9JyBibG9jawkJCSpkYUIqCisKK05vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2luZyBhIG1vdmVtZW50IGNvbW1hbmQgYW5kIGFuIG9iamVjdC4gIFRoZQorbW92ZW1lbnQgY29tbWFuZCBvcGVyYXRlcyBmcm9tIGhlcmUgKGN1cnNvciBwb3NpdGlvbikgdG8gd2hlcmUgdGhlIG1vdmVtZW50Cit0YWtlcyB1cy4gIFdoZW4gdXNpbmcgYW4gb2JqZWN0IHRoZSB3aG9sZSBvYmplY3QgaXMgb3BlcmF0ZWQgdXBvbiwgbm8gbWF0dGVyCit3aGVyZSBvbiB0aGUgb2JqZWN0IHRoZSBjdXJzb3IgaXMuICBGb3IgZXhhbXBsZSwgY29tcGFyZSAiZHciIGFuZCAiZGF3IjogImR3IgorZGVsZXRlcyBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24gdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHdvcmQsICJkYXciIGRlbGV0ZXMKK3RoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IgYW5kIHRoZSBzcGFjZSBhZnRlciBvciBiZWZvcmUgaXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gTWFya3MJCQkJCSptYXJrLW1vdGlvbnMqICpFMjAqICpFNzgqCisKK0p1bXBpbmcgdG8gYSBtYXJrIGNhbiBiZSBkb25lIGluIHR3byB3YXlzOgorMS4gV2l0aCBgIChiYWNrdGljayk6CSAgVGhlIGN1cnNvciBpcyBwb3NpdGlvbmVkIGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24KKwkJCSAgYW5kIHRoZSBtb3Rpb24gaXMgfGV4Y2x1c2l2ZXwuCisyLiBXaXRoICcgKHNpbmdsZSBxdW90ZSk6IFRoZSBjdXJzb3IgaXMgcG9zaXRpb25lZCBvbiB0aGUgZmlyc3Qgbm9uLWJsYW5rCisJCQkgIGNoYXJhY3RlciBpbiB0aGUgbGluZSBvZiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIGFuZAorCQkJICB0aGUgbW90aW9uIGlzIGxpbmV3aXNlLgorCisJCQkJCQkqbSogKm1hcmsqICpNYXJrKgorbXthLXpBLVp9CQlTZXQgbWFyayB7YS16QS1afSBhdCBjdXJzb3IgcG9zaXRpb24gKGRvZXMgbm90IG1vdmUKKwkJCXRoZSBjdXJzb3IsIHRoaXMgaXMgbm90IGEgbW90aW9uIGNvbW1hbmQpLgorCisJCQkJCQkqbScqICptYCoKK20nICBvciAgbWAJCVNldCB0aGUgcHJldmlvdXMgY29udGV4dCBtYXJrLiAgVGhpcyBjYW4gYmUganVtcGVkIHRvCisJCQl3aXRoIHRoZSAiJyciIG9yICJgYCIgY29tbWFuZCAoZG9lcyBub3QgbW92ZSB0aGUKKwkJCWN1cnNvciwgdGhpcyBpcyBub3QgYSBtb3Rpb24gY29tbWFuZCkuCisKKwkJCQkJCSptWyogKm1dKgorbVsgIG9yICBtXQkJU2V0IHRoZSB8J1t8IG9yIHwnXXwgbWFyay4gIFVzZWZ1bCB3aGVuIGFuIG9wZXJhdG9yIGlzCisJCQl0byBiZSBzaW11bGF0ZWQgYnkgbXVsdGlwbGUgY29tbWFuZHMuICAoZG9lcyBub3QgbW92ZQorCQkJdGhlIGN1cnNvciwgdGhpcyBpcyBub3QgYSBtb3Rpb24gY29tbWFuZCkuCisKKwkJCQkJCSo6bWEqICo6bWFyayogKkUxOTEqCis6W3JhbmdlXW1hW3JrXSB7YS16QS1afQlTZXQgbWFyayB7YS16QS1afSBhdCBsYXN0IGxpbmUgbnVtYmVyIGluIFtyYW5nZV0sCisJCQljb2x1bW4gMC4gIERlZmF1bHQgaXMgY3Vyc29yIGxpbmUuCisKKwkJCQkJCSo6ayoKKzpbcmFuZ2Vda3thLXpBLVp9CVNhbWUgYXMgOm1hcmssIGJ1dCB0aGUgc3BhY2UgYmVmb3JlIHRoZSBtYXJrIG5hbWUgY2FuCisJCQliZSBvbWl0dGVkLgorCisJCQkJCQkqJyogKidhKiAqYCogKmBhKgorJ3thLXp9ICBge2Eten0JCUp1bXAgdG8gdGhlIG1hcmsge2Eten0uCisKKwkJCQkJCSonQSogKicwKiAqYEEqICpgMCoKKyd7QS1aMC05fSAgYHtBLVowLTl9CVRvIHRoZSBtYXJrIHtBLVowLTl9IGluIHRoZSBjb3JyZWN0IGZpbGUgKG5vdCBhIG1vdGlvbgorCQkJY29tbWFuZCB3aGVuIGluIGFub3RoZXIgZmlsZSkuICB7bm90IGluIFZpfQorCisJCQkJCQkqZycqICpnJ2EqICpnYCogKmdgYSoKK2cne21hcmt9ICBnYHttYXJrfQorCQkJSnVtcCB0byB0aGUge21hcmt9LCBidXQgZG9uJ3QgY2hhbmdlIHRoZSBqdW1wbGlzdCB3aGVuCisJCQlqdW1waW5nIHdpdGhpbiB0aGUgY3VycmVudCBidWZmZXIuICBFeGFtcGxlOiA+CisJCQkJZ2AiCis8CQkJanVtcHMgdG8gdGhlIGxhc3Qga25vd24gcG9zaXRpb24gaW4gYSBmaWxlLiAgU2VlCisJCQkkVklNUlVOVElNRS92aW1yY19leGFtcGxlLnZpbS4gIHtub3QgaW4gVml9CisKKwkJCQkJCSo6bWFya3MqCis6bWFya3MJCQlMaXN0IGFsbCB0aGUgY3VycmVudCBtYXJrcyAobm90IGEgbW90aW9uIGNvbW1hbmQpLgorCQkJVGhlIHwnKHwsIHwnKXwsIHwne3wgYW5kIHwnfXwgbWFya3MgYXJlIG5vdCBsaXN0ZWQuCisJCQl7bm90IGluIFZpfQorCQkJCQkJKkUyODMqCis6bWFya3Mge2FyZ30JCUxpc3QgdGhlIG1hcmtzIHRoYXQgYXJlIG1lbnRpb25lZCBpbiB7YXJnfSAobm90IGEKKwkJCW1vdGlvbiBjb21tYW5kKS4gIEZvciBleGFtcGxlOiA+CisJCQkJOm1hcmtzIGFCCis8CQkJdG8gbGlzdCBtYXJrcyAnYScgYW5kICdCJy4gIHtub3QgaW4gVml9CisKK0EgbWFyayBpcyBub3QgdmlzaWJsZSBpbiBhbnkgd2F5LiAgSXQgaXMganVzdCBhIHBvc2l0aW9uIGluIHRoZSBmaWxlIHRoYXQgaXMKK3JlbWVtYmVyZWQuICBEbyBub3QgY29uZnVzZSBtYXJrcyB3aXRoIG5hbWVkIHJlZ2lzdGVycywgdGhleSBhcmUgdG90YWxseQordW5yZWxhdGVkLgorCisnYSAtICd6CQlsb3dlcmNhc2UgbWFya3MsIHZhbGlkIHdpdGhpbiBvbmUgZmlsZQorJ0EgLSAnWgkJdXBwZXJjYXNlIG1hcmtzLCBhbHNvIGNhbGxlZCBmaWxlIG1hcmtzLCB2YWxpZCBiZXR3ZWVuIGZpbGVzCisnMCAtICc5CQludW1iZXJlZCBtYXJrcywgc2V0IGZyb20gLnZpbWluZm8gZmlsZQorCitMb3dlcmNhc2UgbWFya3MgJ2EgdG8gJ3ogYXJlIHJlbWVtYmVyZWQgYXMgbG9uZyBhcyB0aGUgZmlsZSByZW1haW5zIGluIHRoZQorYnVmZmVyIGxpc3QuICBJZiB5b3UgcmVtb3ZlIHRoZSBmaWxlIGZyb20gdGhlIGJ1ZmZlciBsaXN0LCBhbGwgaXRzIG1hcmtzIGFyZQorbG9zdC4gIElmIHlvdSBkZWxldGUgYSBsaW5lIHRoYXQgY29udGFpbnMgYSBtYXJrLCB0aGF0IG1hcmsgaXMgZXJhc2VkLgorCitUbyBkZWxldGUgYSBtYXJrOiBDcmVhdGUgYSBuZXcgbGluZSwgcG9zaXRpb24gdGhlIG1hcmsgdGhlcmUsIGRlbGV0ZSB0aGUgbGluZS4KK0UuZy46ICJvPEVzYz5teGRkIi4gIFRoaXMgZG9lcyBjaGFuZ2UgdGhlIGZpbGUgdGhvdWdoLiAgVXNpbmcgInUiIHdvbid0IHdvcmssCitpdCBhbHNvIHJlc3RvcmVzIG1hcmtzLgorCitMb3dlcmNhc2UgbWFya3MgY2FuIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBvcGVyYXRvcnMuICBGb3IgZXhhbXBsZTogImQndCIKK2RlbGV0ZXMgdGhlIGxpbmVzIGZyb20gdGhlIGN1cnNvciBwb3NpdGlvbiB0byBtYXJrICd0Jy4gIEhpbnQ6IFVzZSBtYXJrICd0JyBmb3IKK1RvcCwgJ2InIGZvciBCb3R0b20sIGV0Yy4uICBMb3dlcmNhc2UgbWFya3MgYXJlIHJlc3RvcmVkIHdoZW4gdXNpbmcgdW5kbyBhbmQKK3JlZG8uCisKK1VwcGVyY2FzZSBtYXJrcyAnQSB0byAnWiBpbmNsdWRlIHRoZSBmaWxlIG5hbWUuICB7Vmk6IG5vIHVwcGVyY2FzZSBtYXJrc30gWW91CitjYW4gdXNlIHRoZW0gdG8ganVtcCBmcm9tIGZpbGUgdG8gZmlsZS4gIFlvdSBjYW4gb25seSB1c2UgYW4gdXBwZXJjYXNlIG1hcmsKK3dpdGggYW4gb3BlcmF0b3IgaWYgdGhlIG1hcmsgaXMgaW4gdGhlIGN1cnJlbnQgZmlsZS4gIFRoZSBsaW5lIG51bWJlciBvZiB0aGUKK21hcmsgcmVtYWlucyBjb3JyZWN0LCBldmVuIGlmIHlvdSBpbnNlcnQvZGVsZXRlIGxpbmVzIG9yIGVkaXQgYW5vdGhlciBmaWxlIGZvcgorYSBtb21lbnQuICBXaGVuIHRoZSAndmltaW5mbycgb3B0aW9uIGlzIG5vdCBlbXB0eSwgdXBwZXJjYXNlIG1hcmtzIGFyZSBrZXB0IGluCit0aGUgLnZpbWluZm8gZmlsZS4gIFNlZSB8dmltaW5mby1maWxlLW1hcmtzfC4KKworTnVtYmVyZWQgbWFya3MgJzAgdG8gJzkgYXJlIHF1aXRlIGRpZmZlcmVudC4gIFRoZXkgY2FuIG5vdCBiZSBzZXQgZGlyZWN0bHkuCitUaGV5IGFyZSBvbmx5IHByZXNlbnQgd2hlbiB1c2luZyBhIHZpbWluZm8gZmlsZSB8dmltaW5mby1maWxlfC4gIEJhc2ljYWxseSAnMAoraXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJzb3Igd2hlbiB5b3UgbGFzdCBleGl0ZWQgVmltLCAnMSB0aGUgbGFzdCBidXQgb25lCit0aW1lLCBldGMuICBVc2UgdGhlICJyIiBmbGFnIGluICd2aW1pbmZvJyB0byBzcGVjaWZ5IGZpbGVzIGZvciB3aGljaCBubworTnVtYmVyZWQgbWFyayBzaG91bGQgYmUgc3RvcmVkLiAgU2VlIHx2aW1pbmZvLWZpbGUtbWFya3N8LgorCisKKwkJCQkJCQkqJ1sqICpgWyoKKydbICBgWwkJCVRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHByZXZpb3VzbHkgY2hhbmdlZAorCQkJb3IgeWFua2VkIHRleHQuICB7bm90IGluIFZpfQorCisJCQkJCQkJKiddKiAqYF0qCisnXSAgYF0JCQlUbyB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIHByZXZpb3VzbHkgY2hhbmdlZCBvcgorCQkJeWFua2VkIHRleHQuICB7bm90IGluIFZpfQorCitBZnRlciBleGVjdXRpbmcgYW4gb3BlcmF0b3IgdGhlIEN1cnNvciBpcyBwdXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dAordGhhdCB3YXMgb3BlcmF0ZWQgdXBvbi4gIEFmdGVyIGEgcHV0IGNvbW1hbmQgKCJwIiBvciAiUCIpIHRoZSBjdXJzb3IgaXMKK3NvbWV0aW1lcyBwbGFjZWQgYXQgdGhlIGZpcnN0IGluc2VydGVkIGxpbmUgYW5kIHNvbWV0aW1lcyBvbiB0aGUgbGFzdCBpbnNlcnRlZAorY2hhcmFjdGVyLiAgVGhlIGZvdXIgY29tbWFuZHMgYWJvdmUgcHV0IHRoZSBjdXJzb3IgYXQgZWl0aGVyIGVuZC4gIEV4YW1wbGU6CitBZnRlciB5YW5raW5nIDEwIGxpbmVzIHlvdSB3YW50IHRvIGdvIHRvIHRoZSBsYXN0IG9uZSBvZiB0aGVtOiAiMTBZJ10iLiAgQWZ0ZXIKK2luc2VydGluZyBzZXZlcmFsIGxpbmVzIHdpdGggdGhlICJwIiBjb21tYW5kIHlvdSB3YW50IHRvIGp1bXAgdG8gdGhlIGxvd2VzdAoraW5zZXJ0ZWQgbGluZTogInAnXSIuICBUaGlzIGFsc28gd29ya3MgZm9yIHRleHQgdGhhdCBoYXMgYmVlbiBpbnNlcnRlZC4KKworTm90ZTogQWZ0ZXIgZGVsZXRpbmcgdGV4dCwgdGhlIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIGFyZSB0aGUgc2FtZSwgZXhjZXB0Cit3aGVuIHVzaW5nIGJsb2Nrd2lzZSBWaXN1YWwgbW9kZS4gIFRoZXNlIGNvbW1hbmRzIGRvIG5vdCB3b3JrIHdoZW4gbm8gY2hhbmdlCit3YXMgbWFkZSB5ZXQgaW4gdGhlIGN1cnJlbnQgZmlsZS4KKworCQkJCQkJCSonPCogKmA8KgorJzwgIGA8CQkJVG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbGFzdCBzZWxlY3RlZCBWaXN1YWwKKwkJCWFyZWEgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiAge25vdCBpbiBWaX0uCisKKwkJCQkJCQkqJz4qICpgPioKKyc+ICBgPgkJCVRvIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgbGFzdCBzZWxlY3RlZCBWaXN1YWwKKwkJCWFyZWEgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiAge25vdCBpbiBWaX0uCisKKwkJCQkJCQkqJycqICpgYCoKKycnICBgYAkJCVRvIHRoZSBwb3NpdGlvbiBiZWZvcmUgbGF0ZXN0IGp1bXAsIG9yIHdoZXJlIHRoZSBsYXN0CisJCQkibSciIG9yICJtYCIgY29tbWFuZCB3YXMgZ2l2ZW4uICBOb3Qgc2V0IHdoZW4gdGhlCisJCQl8OmtlZXBqdW1wc3wgY29tbWFuZCBtb2RpZmllciB3YXMgdXNlZC4KKwkJCUFsc28gc2VlIHxyZXN0b3JlLXBvc2l0aW9ufC4KKworCQkJCQkJCSoncXVvdGUqICpgcXVvdGUqCisnIiAgYCIJCQlUbyB0aGUgY3Vyc29yIHBvc2l0aW9uIHdoZW4gbGFzdCBleGl0aW5nIHRoZSBjdXJyZW50CisJCQlidWZmZXIuICBEZWZhdWx0cyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdAorCQkJbGluZS4gIFNlZSB8bGFzdC1wb3NpdGlvbi1qdW1wfCBmb3IgaG93IHRvIHVzZSB0aGlzCisJCQlmb3IgZWFjaCBvcGVuZWQgZmlsZS4KKwkJCU9ubHkgb25lIHBvc2l0aW9uIGlzIHJlbWVtYmVyZWQgcGVyIGJ1ZmZlciwgbm90IG9uZQorCQkJZm9yIGVhY2ggd2luZG93LiAgQXMgbG9uZyBhcyB0aGUgYnVmZmVyIGlzIHZpc2libGUgaW4KKwkJCWEgd2luZG93IHRoZSBwb3NpdGlvbiB3b24ndCBiZSBjaGFuZ2VkLgorCQkJe25vdCBpbiBWaX0uCisKKwkJCQkJCQkqJ14qICpgXioKKydeICBgXgkJCVRvIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgY3Vyc29yIHdhcyB0aGUgbGFzdCB0aW1lCisJCQl3aGVuIEluc2VydCBtb2RlIHdhcyBzdG9wcGVkICBUaGlzIGlzIHVzZWQgYnkgdGhlIHxnaXwKKwkJCWNvbW1hbmQuICBOb3Qgc2V0IHdoZW4gdGhlIHw6a2VlcGp1bXBzfCBjb21tYW5kCisJCQltb2RpZmllciB3YXMgdXNlZC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqJy4qICpgLioKKycuICBgLgkJCVRvIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgbGFzdCBjaGFuZ2Ugd2FzIG1hZGUuICBUaGUKKwkJCXBvc2l0aW9uIGlzIGF0IG9yIG5lYXIgd2hlcmUgdGhlIGNoYW5nZSBzdGFydGVkLgorCQkJU29tZXRpbWVzIGEgY29tbWFuZCBpcyBleGVjdXRlZCBhcyBzZXZlcmFsIGNoYW5nZXMsCisJCQl0aGVuIHRoZSBwb3NpdGlvbiBjYW4gYmUgbmVhciB0aGUgZW5kIG9mIHdoYXQgdGhlCisJCQljb21tYW5kIGNoYW5nZWQuICBGb3IgZXhhbXBsZSB3aGVuIGluc2VydGluZyBhIHdvcmQsCisJCQl0aGUgcG9zaXRpb24gd2lsbCBiZSBvbiB0aGUgbGFzdCBjaGFyYWN0ZXIuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKicoKiAqYCgqCisnKCAgYCgJCQlUbyB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgc2VudGVuY2UsIGxpa2UgdGhlIHwofAorCQkJY29tbWFuZC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqJykqICpgKSoKKycpICBgKQkJCVRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc2VudGVuY2UsIGxpa2UgdGhlIHwpfAorCQkJY29tbWFuZC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqJ3sqICpgeyoKKyd7ICBgewkJCVRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBwYXJhZ3JhcGgsIGxpa2UgdGhlIHx7fAorCQkJY29tbWFuZC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqJ30qICpgfSoKKyd9ICBgfQkJCVRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgcGFyYWdyYXBoLCBsaWtlIHRoZSB8fXwKKwkJCWNvbW1hbmQuICB7bm90IGluIFZpfQorCitUaGVzZSBjb21tYW5kcyBhcmUgbm90IG1hcmtzIHRoZW1zZWx2ZXMsIGJ1dCBqdW1wIHRvIGEgbWFyazoKKworCQkJCQkJCSpdJyoKK10nCQkJW2NvdW50XSB0aW1lcyB0byBuZXh0IGxpbmUgd2l0aCBhIGxvd2VyY2FzZSBtYXJrIGJlbG93CisJCQl0aGUgY3Vyc29yLCBvbiB0aGUgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBpbiB0aGUKKwkJCWxpbmUuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqXWAqCitdYAkJCVtjb3VudF0gdGltZXMgdG8gbG93ZXJjYXNlIG1hcmsgYWZ0ZXIgdGhlIGN1cnNvci4ge25vdAorCQkJaW4gVml9CisKKwkJCQkJCQkqWycqCitbJwkJCVtjb3VudF0gdGltZXMgdG8gcHJldmlvdXMgbGluZSB3aXRoIGEgbG93ZXJjYXNlIG1hcmsKKwkJCWJlZm9yZSB0aGUgY3Vyc29yLCBvbiB0aGUgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBpbgorCQkJdGhlIGxpbmUuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqW2AqCitbYAkJCVtjb3VudF0gdGltZXMgdG8gbG93ZXJjYXNlIG1hcmsgYmVmb3JlIHRoZSBjdXJzb3IuCisJCQl7bm90IGluIFZpfQorCisKKzpsb2Nba21hcmtzXSB7Y29tbWFuZH0JCQkJCSo6bG9jKiAqOmxvY2ttYXJrcyoKKwkJCUV4ZWN1dGUge2NvbW1hbmR9IHdpdGhvdXQgYWRqdXN0aW5nIG1hcmtzLiAgVGhpcyBpcworCQkJdXNlZnVsIHdoZW4gY2hhbmdpbmcgdGV4dCBpbiBhIHdheSB0aGF0IHRoZSBsaW5lIGNvdW50CisJCQl3aWxsIGJlIHRoZSBzYW1lIHdoZW4gdGhlIGNoYW5nZSBoYXMgY29tcGxldGVkLgorCQkJV0FSTklORzogV2hlbiB0aGUgbGluZSBjb3VudCBkb2VzIGNoYW5nZSwgbWFya3MgYmVsb3cKKwkJCXRoZSBjaGFuZ2Ugd2lsbCBrZWVwIHRoZWlyIGxpbmUgbnVtYmVyLCB0aHVzIG1vdmUgdG8KKwkJCWFub3RoZXIgdGV4dCBsaW5lLgorCQkJVGhlc2UgaXRlbXMgd2lsbCBub3QgYmUgYWRqdXN0ZWQgZm9yIGRlbGV0ZWQvaW5zZXJ0ZWQKKwkJCWxpbmVzOgorCQkJLSBsb3dlciBjYXNlIGxldHRlciBtYXJrcyAnYSAtICd6CisJCQktIHVwcGVyIGNhc2UgbGV0dGVyIG1hcmtzICdBIC0gJ1oKKwkJCS0gbnVtYmVyZWQgbWFya3MgJzAgLSAnOQorCQkJLSBsYXN0IGluc2VydCBwb3NpdGlvbiAnXgorCQkJLSBsYXN0IGNoYW5nZSBwb3NpdGlvbiAnLgorCQkJLSB0aGUgVmlzdWFsIGFyZWEgJzwgYW5kICc+CisJCQktIGxpbmUgbnVtYmVycyBpbiBwbGFjZWQgc2lnbnMKKwkJCS0gbGluZSBudW1iZXJzIGluIHF1aWNrZml4IHBvc2l0aW9ucworCQkJLSBwb3NpdGlvbnMgaW4gdGhlIHxqdW1wbGlzdHwKKwkJCS0gcG9zaXRpb25zIGluIHRoZSB8dGFnc3RhY2t8CisJCQlUaGVzZSBpdGVtcyB3aWxsIHN0aWxsIGJlIGFkanVzdGVkOgorCQkJLSBwcmV2aW91cyBjb250ZXh0IG1hcmsgJycKKwkJCS0gdGhlIGN1cnNvciBwb3NpdGlvbgorCQkJLSB0aGUgdmlldyBvZiBhIHdpbmRvdyBvbiBhIGJ1ZmZlcgorCQkJLSBmb2xkcworCQkJLSBkaWZmcworCis6a2VlW3BtYXJrc10ge2NvbW1hbmR9CQkJCQkqOmtlZSogKjprZWVwbWFya3MqCisJCQlDdXJyZW50bHkgb25seSBoYXMgZWZmZWN0IGZvciB0aGUgZmlsdGVyIGNvbW1hbmQKKwkJCXw6cmFuZ2UhfDoKKwkJCS0gV2hlbiB0aGUgbnVtYmVyIG9mIGxpbmVzIGFmdGVyIGZpbHRlcmluZyBpcyBlcXVhbCB0bworCQkJICBvciBsYXJnZXIgdGhhbiBiZWZvcmUsIGFsbCBtYXJrcyBhcmUga2VwdCBhdCB0aGUKKwkJCSAgc2FtZSBsaW5lIG51bWJlci4KKwkJCS0gV2hlbiB0aGUgbnVtYmVyIG9mIGxpbmVzIGRlY3JlYXNlcywgdGhlIG1hcmtzIGluIHRoZQorCQkJICBpbG5lcyB0aGF0IGRpc2FwcGVhcmVkIGFyZSBkZWxldGVkLgorCQkJSW4gYW55IGNhc2UgdGhlIG1hcmtzIGJlbG93IHRoZSBmaWx0ZXJlZCB0ZXh0IGhhdmUKKwkJCXRoZWlyIGxpbmUgbnVtYmVycyBhZGp1c3RlZCwgdGh1cyBzdGljayB0byB0aGUgdGV4dCwKKwkJCWFzIHVzdWFsLgorCQkJV2hlbiB0aGUgJ1InIGZsYWcgaXMgbWlzc2luZyBmcm9tICdjcG9wdGlvbnMnIHRoaXMgaGFzCisJCQl0aGUgc2FtZSBlZmZlY3QgYXMgdXNpbmcgIjprZWVwbWFya3MiLgorCisJCQkJCQkJKjprZWVwaiogKjprZWVwanVtcHMqCis6a2VlcGpbdW1wc10ge2NvbW1hbmR9CisJCQlEbyBub3QgY2hhbmdlIHRoZSB8Jyd8LCB8Jy58IGFuZCB8J158IG1hcmtzLCB0aGUKKwkJCXxqdW1wbGlzdHwgb3IgdGhlIHxjaGFuZ2VsaXN0fC4gIFVzZWZ1bCB3aGVuIG1ha2luZyBhCisJCQljaGFuZ2Ugb3IgaW5zZXJ0aW5nIHRleHQgYXV0b21hdGljYWxseSBhbmQgdGhlIHVzZXIKKwkJCWRvZXNuJ3Qgd2FudCB0byBnbyB0byB0aGlzIHBvc2l0aW9uLiAgRS5nLiwgd2hlbgorCQkJdXBkYXRpbmcgYSAiTGFzdCBjaGFuZ2UiIHRpbWVzdGFtcDogPgorCWF1dG9jbWQgQnVmV3JpdGVQcmUsRmlsZVdyaXRlUHJlICouYWJjIGtlZXBqdW1wcyBjYWxsIFNldExhc3RDaGFuZ2UoKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIEp1bXBzCQkJCQkqanVtcC1tb3Rpb25zKgorCitBICJqdW1wIiBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kczogIiciLCAiYCIsICJHIiwgIi8iLCAiPyIsICJuIiwKKyJOIiwgIiUiLCAiKCIsICIpIiwgIltbIiwgIl1dIiwgInsiLCAifSIsICI6cyIsICI6dGFnIiwgIkwiLCAiTSIsICJIIiBhbmQKK3RoZSBjb21tYW5kcyB0aGF0IHN0YXJ0IGVkaXRpbmcgYSBuZXcgZmlsZS4gIElmIHlvdSBtYWtlIHRoZSBjdXJzb3IgImp1bXAiCit3aXRoIG9uZSBvZiB0aGVzZSBjb21tYW5kcywgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IgYmVmb3JlIHRoZSBqdW1wIGlzCityZW1lbWJlcmVkLiAgWW91IGNhbiByZXR1cm4gdG8gdGhhdCBwb3NpdGlvbiB3aXRoIHRoZSAiJyciIGFuZCAiYGAiIGNvbW1hbmQsCit1bmxlc3MgdGhlIGxpbmUgY29udGFpbmluZyB0aGF0IHBvc2l0aW9uIHdhcyBjaGFuZ2VkIG9yIGRlbGV0ZWQuCisKKwkJCQkJCQkqQ1RSTC1PKgorQ1RSTC1PCQkJR28gdG8gW2NvdW50XSBPbGRlciBjdXJzb3IgcG9zaXRpb24gaW4ganVtcCBsaXN0CisJCQkobm90IGEgbW90aW9uIGNvbW1hbmQpLiAge25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdpdGhvdXQgdGhlICtqdW1wbGlzdCBmZWF0dXJlfQorCis8VGFiPgkJb3IJCQkJCSpDVFJMLUkqICo8VGFiPioKK0NUUkwtSQkJCUdvIHRvIFtjb3VudF0gbmV3ZXIgY3Vyc29yIHBvc2l0aW9uIGluIGp1bXAgbGlzdAorCQkJKG5vdCBhIG1vdGlvbiBjb21tYW5kKS4KKwkJCUluIGEgfHF1aWNrZml4LXdpbmRvd3wgaXQgdGFrZXMgeW91IHRvIHRoZSBwb3NpdGlvbiBvZgorCQkJdGhlIGVycm9yIHVuZGVyIHRoZSBjdXJzb3IuCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2l0aG91dCB0aGUgK2p1bXBsaXN0IGZlYXR1cmV9CisKKwkJCQkJCQkqOmp1KiAqOmp1bXBzKgorOmp1W21wc10JCVByaW50IHRoZSBqdW1wIGxpc3QgKG5vdCBhIG1vdGlvbiBjb21tYW5kKS4gIHtub3QgaW4KKwkJCVZpfSB7bm90IGF2YWlsYWJsZSB3aXRob3V0IHRoZSAranVtcGxpc3QgZmVhdHVyZX0KKworCQkJCQkJCSpqdW1wbGlzdCoKK0p1bXBzIGFyZSByZW1lbWJlcmVkIGluIGEganVtcCBsaXN0LiAgV2l0aCB0aGUgQ1RSTC1PIGFuZCBDVFJMLUkgY29tbWFuZCB5b3UKK2NhbiBnbyB0byBjdXJzb3IgcG9zaXRpb25zIGJlZm9yZSBvbGRlciBqdW1wcywgYW5kIGJhY2sgYWdhaW4uICBUaHVzIHlvdSBjYW4KK21vdmUgdXAgYW5kIGRvd24gdGhlIGxpc3QuICBUaGVyZSBpcyBhIHNlcGFyYXRlIGp1bXAgbGlzdCBmb3IgZWFjaCB3aW5kb3cuCitUaGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpcyBmaXhlZCBhdCAxMDAuCit7bm90IGF2YWlsYWJsZSB3aXRob3V0IHRoZSAranVtcGxpc3QgZmVhdHVyZX0KKworRm9yIGV4YW1wbGUsIGFmdGVyIHRocmVlIGp1bXAgY29tbWFuZHMgeW91IGhhdmUgdGhpcyBqdW1wIGxpc3Q6CisKKyAganVtcCBsaW5lICBjb2wgZmlsZS9saW5lIH4KKyAgICAzCSAgMSAgICAwIHNvbWUgdGV4dCB+CisgICAgMgkgNzAgICAgMCBhbm90aGVyIGxpbmUgfgorICAgIDEgIDExNTQgICAyMyBlbmQuIH4KKyA+IH4KKworVGhlICJmaWxlL2xpbmUiIGNvbHVtbiBzaG93cyB0aGUgZmlsZSBuYW1lLCBvciB0aGUgdGV4dCBhdCB0aGUganVtcCBpZiBpdCBpcworaW4gdGhlIGN1cnJlbnQgZmlsZSAoYW4gaW5kZW50IGlzIHJlbW92ZWQgYW5kIGEgbG9uZyBsaW5lIGlzIHRydW5jYXRlZCB0byBmaXQKK2luIHRoZSB3aW5kb3cpLgorCitZb3UgYXJlIGN1cnJlbnRseSBpbiBsaW5lIDExNjcuICBJZiB5b3UgdGhlbiB1c2UgdGhlIENUUkwtTyBjb21tYW5kLCB0aGUKK2N1cnNvciBpcyBwdXQgaW4gbGluZSAxMTU0LiAgVGhpcyByZXN1bHRzIGluOgorCisgIGp1bXAgbGluZSAgY29sIGZpbGUvbGluZSB+CisgICAgMgkgIDEgICAgMCBzb21lIHRleHQgfgorICAgIDEJIDcwICAgIDAgYW5vdGhlciBsaW5lIH4KKyA+ICAwICAxMTU0ICAgMjMgZW5kLiB+CisgICAgMSAgMTE2NyAgICAwIGZvbyBiYXIgfgorCitUaGUgcG9pbnRlciB3aWxsIGJlIHNldCBhdCB0aGUgbGFzdCB1c2VkIGp1bXAgcG9zaXRpb24uICBUaGUgbmV4dCBDVFJMLU8KK2NvbW1hbmQgd2lsbCB1c2UgdGhlIGVudHJ5IGFib3ZlIGl0LCB0aGUgbmV4dCBDVFJMLUkgY29tbWFuZCB3aWxsIHVzZSB0aGUKK2VudHJ5IGJlbG93IGl0LiAgSWYgdGhlIHBvaW50ZXIgaXMgYmVsb3cgdGhlIGxhc3QgZW50cnksIHRoaXMgaW5kaWNhdGVzIHRoYXQKK3lvdSBkaWQgbm90IHVzZSBhIENUUkwtSSBvciBDVFJMLU8gYmVmb3JlLiAgSW4gdGhpcyBjYXNlIHRoZSBDVFJMLU8gY29tbWFuZAord2lsbCBjYXVzZSB0aGUgY3Vyc29yIHBvc2l0aW9uIHRvIGJlIGFkZGVkIHRvIHRoZSBqdW1wIGxpc3QsIHNvIHlvdSBjYW4gZ2V0CitiYWNrIHRvIHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIENUUkwtTy4gIEluIHRoaXMgY2FzZSB0aGlzIGlzIGxpbmUgMTE2Ny4KKworV2l0aCBtb3JlIENUUkwtTyBjb21tYW5kcyB5b3Ugd2lsbCBnbyB0byBsaW5lcyA3MCBhbmQgMS4gIElmIHlvdSB1c2UgQ1RSTC1JCit5b3UgY2FuIGdvIGJhY2sgdG8gMTE1NCBhbmQgMTE2NyBhZ2Fpbi4gIE5vdGUgdGhhdCB0aGUgbnVtYmVyIGluIHRoZSAianVtcCIKK2NvbHVtbiBpbmRpY2F0ZXMgdGhlIGNvdW50IGZvciB0aGUgQ1RSTC1PIG9yIENUUkwtSSBjb21tYW5kIHRoYXQgdGFrZXMgeW91IHRvCit0aGlzIHBvc2l0aW9uLgorCitJZiB5b3UgdXNlIGEganVtcCBjb21tYW5kLCB0aGUgY3VycmVudCBsaW5lIG51bWJlciBpcyBpbnNlcnRlZCBhdCB0aGUgZW5kIG9mCit0aGUganVtcCBsaXN0LiAgSWYgdGhlIHNhbWUgbGluZSB3YXMgYWxyZWFkeSBpbiB0aGUganVtcCBsaXN0LCBpdCBpcyByZW1vdmVkLgorVGhlIHJlc3VsdCBpcyB0aGF0IHdoZW4gcmVwZWF0aW5nIENUUkwtTyB5b3Ugd2lsbCBnZXQgYmFjayB0byBvbGQgcG9zaXRpb25zCitvbmx5IG9uY2UuCisKK1doZW4gdGhlIHw6a2VlcGp1bXBzfCBjb21tYW5kIG1vZGlmaWVyIGlzIHVzZWQsIGp1bXBzIGFyZSBub3Qgc3RvcmVkIGluIHRoZQoranVtcGxpc3QuCisKK0FmdGVyIHRoZSBDVFJMLU8gY29tbWFuZCB0aGF0IGdvdCB5b3UgaW50byBsaW5lIDExNTQgeW91IGNvdWxkIGdpdmUgYW5vdGhlcgoranVtcCBjb21tYW5kIChlLmcuLCAiRyIpLiAgVGhlIGp1bXAgbGlzdCB3b3VsZCB0aGVuIGJlY29tZToKKworICBqdW1wIGxpbmUgIGNvbCBmaWxlL2xpbmUgfgorICAgIDQJICAxICAgIDAgc29tZSB0ZXh0IH4KKyAgICAzCSA3MCAgICAwIGFub3RoZXIgbGluZSB+CisgICAgMiAgMTE2NyAgICAwIGZvbyBiYXIgfgorICAgIDEgIDExNTQgICAyMyBlbmQuIH4KKyA+IH4KKworVGhlIGxpbmUgbnVtYmVycyB3aWxsIGJlIGFkanVzdGVkIGZvciBkZWxldGVkIGFuZCBpbnNlcnRlZCBsaW5lcy4gIFRoaXMgZmFpbHMKK2lmIHlvdSBzdG9wIGVkaXRpbmcgYSBmaWxlIHdpdGhvdXQgd3JpdGluZywgbGlrZSB3aXRoICI6biEiLgorCitXaGVuIHlvdSBzcGxpdCBhIHdpbmRvdywgdGhlIGp1bXBsaXN0IHdpbGwgYmUgY29waWVkIHRvIHRoZSBuZXcgd2luZG93LgorCitJZiB5b3UgaGF2ZSBpbmNsdWRlZCB0aGUgJyBpdGVtIGluIHRoZSAndmltaW5mbycgb3B0aW9uIHRoZSBqdW1wbGlzdCB3aWxsIGJlCitzdG9yZWQgaW4gdGhlIHZpbWluZm8gZmlsZSBhbmQgcmVzdG9yZWQgd2hlbiBzdGFydGluZyBWaW0uCisKKworQ0hBTkdFIExJU1QgSlVNUFMJCQkqY2hhbmdlbGlzdCogKmNoYW5nZS1saXN0LWp1bXBzKiAqRTY2NCoKKworV2hlbiBtYWtpbmcgYSBjaGFuZ2UgdGhlIGN1cnNvciBwb3NpdGlvbiBpcyByZW1lbWJlcmVkLiAgT25lIHBvc2l0aW9uIGlzCityZW1lbWJlcmVkIGZvciBldmVyeSBjaGFuZ2UgdGhhdCBjYW4gYmUgdW5kb25lLCB1bmxlc3MgaXQgaXMgY2xvc2UgdG8gYQorcHJldmlvdXMgY2hhbmdlLiAgVHdvIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGp1bXAgdG8gcG9zaXRpb25zIG9mIGNoYW5nZXMsCithbHNvIHRob3NlIHRoYXQgaGF2ZSBiZWVuIHVuZG9uZToKKworCQkJCQkJCSpnOyogKkU2NjIqCitnOwkJCUdvIHRvIFtjb3VudF0gb2xkZXIgcG9zaXRpb24gaW4gY2hhbmdlIGxpc3QuCisJCQlJZiBbY291bnRdIGlzIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygb2xkZXIgY2hhbmdlCisJCQlwb3NpdGlvbnMgZ28gdG8gdGhlIG9sZGVzdCBjaGFuZ2UuCisJCQlJZiB0aGVyZSBpcyBubyBvbGRlciBjaGFuZ2UgYW4gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbi4KKwkJCShub3QgYSBtb3Rpb24gY29tbWFuZCkKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aXRob3V0IHRoZSAranVtcGxpc3QgZmVhdHVyZX0KKworCQkJCQkJCSpnLCogKkU2NjMqCitnLAkJCUdvIHRvIFtjb3VudF0gbmV3ZXIgY3Vyc29yIHBvc2l0aW9uIGluIGNoYW5nZSBsaXN0LgorCQkJSnVzdCBsaWtlICJnO3wgYnV0IGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uCisJCQkobm90IGEgbW90aW9uIGNvbW1hbmQpCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2l0aG91dCB0aGUgK2p1bXBsaXN0IGZlYXR1cmV9CisKK1doZW4gdXNpbmcgYSBjb3VudCB5b3UganVtcCBhcyBmYXIgYmFjayBvciBmb3J3YXJkIGFzIHBvc3NpYmxlLiAgVGh1cyB5b3UgY2FuCit1c2UgIjk5OWc7IiB0byBnbyB0byB0aGUgZmlyc3QgY2hhbmdlIGZvciB3aGljaCB0aGUgcG9zaXRpb24gaXMgc3RpbGwKK3JlbWVtYmVyZWQuICBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNoYW5nZSBsaXN0IGlzIGZpeGVkIGFuZCBpcyB0aGUgc2FtZQorYXMgZm9yIHRoZSB8anVtcGxpc3R8LgorCitXaGVuIHR3byB1bmRvLWFibGUgY2hhbmdlcyBhcmUgaW4gdGhlIHNhbWUgbGluZSBhbmQgYXQgYSBjb2x1bW4gcG9zaXRpb24gbGVzcwordGhhbiAndGV4dHdpZHRoJyBhcGFydCBvbmx5IHRoZSBsYXN0IG9uZSBpcyByZW1lbWJlcmVkLiAgVGhpcyBhdm9pZHMgdGhhdCBhCitzZXF1ZW5jZSBvZiBzbWFsbCBjaGFuZ2VzIGluIGEgbGluZSwgZm9yIGV4YW1wbGUgInh4eHh4IiwgYWRkcyBtYW55IHBvc2l0aW9ucwordG8gdGhlIGNoYW5nZSBsaXN0LiAgV2hlbiAndGV4dHdpZHRoJyBpcyB6ZXJvICd3cmFwbWFyZ2luJyBpcyB1c2VkLiAgV2hlbiB0aGF0CithbHNvIGlzbid0IHNldCBhIGZpeGVkIG51bWJlciBvZiA3OSBpcyB1c2VkLiAgRGV0YWlsOiBGb3IgdGhlIGNvbXB1dGF0aW9ucworYnl0ZXMgYXJlIHVzZWQsIG5vdCBjaGFyYWN0ZXJzLCB0byBhdm9pZCBhIHNwZWVkIHBlbmFsdHkgKHRoaXMgb25seSBtYXR0ZXJzCitmb3IgbXVsdGktYnl0ZSBlbmNvZGluZ3MpLgorCitOb3RlIHRoYXQgd2hlbiB0ZXh0IGhhcyBiZWVuIGluc2VydGVkIG9yIGRlbGV0ZWQgdGhlIGN1cnNvciBwb3NpdGlvbiBtaWdodCBiZQorYSBiaXQgZGlmZmVyZW50IGZyb20gdGhlIHBvc2l0aW9uIG9mIHRoZSBjaGFuZ2UuICBFc3BlY2lhbGx5IHdoZW4gbGluZXMgaGF2ZQorYmVlbiBkZWxldGVkLgorCitXaGVuIHRoZSB8OmtlZXBqdW1wc3wgY29tbWFuZCBtb2RpZmllciBpcyB1c2VkIHRoZSBwb3NpdGlvbiBvZiBhIGNoYW5nZSBpcyBub3QKK3JlbWVtYmVyZWQuCisKKwkJCQkJCQkqOmNoYW5nZXMqCis6Y2hhbmdlcwkJUHJpbnQgdGhlIGNoYW5nZSBsaXN0LiAgQSAiPiIgY2hhcmFjdGVyIGluZGljYXRlcyB0aGUKKwkJCWN1cnJlbnQgcG9zaXRpb24uICBKdXN0IGFmdGVyIGEgY2hhbmdlIGl0IGlzIGJlbG93IHRoZQorCQkJbmV3ZXN0IGVudHJ5LCBpbmRpY2F0aW5nIHRoYXQgImc7IiB0YWtlcyB5b3UgdG8gdGhlCisJCQluZXdlc3QgZW50cnkgcG9zaXRpb24uICBUaGUgZmlyc3QgY29sdW1uIGluZGljYXRlcyB0aGUKKwkJCWNvdW50IG5lZWRlZCB0byB0YWtlIHlvdSB0byB0aGlzIHBvc2l0aW9uLiAgRXhhbXBsZToKKworCQkJCWNoYW5nZSBsaW5lICBjb2wgdGV4dCB+CisJCQkJICAgIDMgICAgIDkgICAgOCBibGEgYmxhIGJsYQorCQkJCSAgICAyICAgIDExICAgNTcgZm9vIGlzIGEgYmFyCisJCQkJICAgIDEgICAgMTQgICA1NCB0aGUgbGF0ZXN0IGNoYW5nZWQgbGluZQorCQkJCT4KKworCQkJVGhlICIzZzsiIGNvbW1hbmQgdGFrZXMgeW91IHRvIGxpbmUgOS4gIFRoZW4gdGhlCisJCQlvdXRwdXQgb2YgIjpjaGFuZ2VzIGlzOgorCisJCQkJY2hhbmdlIGxpbmUgIGNvbCB0ZXh0IH4KKwkJCQk+ICAgMCAgICAgOSAgICA4IGJsYSBibGEgYmxhCisJCQkJICAgIDEgICAgMTEgICA1NyBmb28gaXMgYSBiYXIKKwkJCQkgICAgMiAgICAxNCAgIDU0IHRoZSBsYXRlc3QgY2hhbmdlZCBsaW5lCisKKwkJCU5vdyB5b3UgY2FuIHVzZSAiZywiIHRvIGdvIHRvIGxpbmUgMTEgYW5kICIyZywiIHRvIGdvCisJCQl0byBsaW5lIDE0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzkuIFZhcmlvdXMgbW90aW9ucwkJCQkqdmFyaW91cy1tb3Rpb25zKgorCisJCQkJCQkJKiUqCislCQkJRmluZCB0aGUgbmV4dCBpdGVtIGluIHRoaXMgbGluZSBhZnRlciBvciB1bmRlciB0aGUKKwkJCWN1cnNvciBhbmQganVtcCB0byBpdHMgbWF0Y2guIHxpbmNsdXNpdmV8IG1vdGlvbi4KKwkJCUl0ZW1zIGNhbiBiZToKKwkJCShbe31dKQkJcGFyZW50aGVzaXMgb3IgKGN1cmx5L3NxdWFyZSkgYnJhY2tldHMKKwkJCQkJKHRoaXMgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUKKwkJCQkJJ21hdGNocGFpcnMnIG9wdGlvbikKKwkJCS8qICovCQlzdGFydCBvciBlbmQgb2YgQy1zdHlsZSBjb21tZW50CisJCQkjaWYsICNpZmRlZiwgI2Vsc2UsICNlbGlmLCAjZW5kaWYKKwkJCQkJQyBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzICh3aGVuIHRoZQorCQkJCQljdXJzb3IgaXMgb24gdGhlICMgb3Igbm8gKFt7CisJCQkJCWZvbGxvd2luZykKKwkJCUZvciBvdGhlciBpdGVtcyB0aGUgbWF0Y2hpdCBwbHVnaW4gY2FuIGJlIHVzZWQsIHNlZQorCQkJfG1hdGNoaXQtaW5zdGFsbHwuCisKKwkJCVdoZW4gJ2Nwb3B0aW9ucycgY29udGFpbnMgIk0iIHxjcG8tTXwgYmFja3NsYXNoZXMKKwkJCWJlZm9yZSBwYXJlbnMgYW5kIGJyYWNlcyBhcmUgaWdub3JlZC4gIFdpdGhvdXQgIk0iIHRoZQorCQkJbnVtYmVyIG9mIGJhY2tzbGFzaGVzIG1hdHRlcnM6IGFuIGV2ZW4gbnVtYmVyIGRvZXNuJ3QKKwkJCW1hdGNoIHdpdGggYW4gb2RkIG51bWJlci4gIFRodXMgaW4gIiggXCkgKSIgYW5kICJcKCAoCisJCQlcKSIgdGhlIGZpcnN0IGFuZCBsYXN0IHBhcmVudGhlc2lzIG1hdGNoLgorCQkJV2hlbiB0aGUgJyUnIGNoYXJhY3RlciBpcyBub3QgcHJlc2VudCBpbiAnY3BvcHRpb25zJworCQkJfGNwby0lfCwgcGFyZW5zIGFuZCBicmFjZXMgaW5zaWRlIGRvdWJsZSBxdW90ZXMgYXJlCisJCQlpZ25vcmVkLCB1bmxlc3MgdGhlIG51bWJlciBvZiBwYXJlbnMvYnJhY2VzIGluIGEgbGluZQorCQkJaXMgdW5ldmVuIGFuZCB0aGlzIGxpbmUgYW5kIHRoZSBwcmV2aW91cyBvbmUgZG9lcyBub3QKKwkJCWVuZCBpbiBhIGJhY2tzbGFzaC4gICcoJywgJ3snLCAnWycsICddJywgJ30nIGFuZCAnKScKKwkJCWFyZSBhbHNvIGlnbm9yZWQgKHBhcmVucyBhbmQgYnJhY2VzIGluc2lkZSBzaW5nbGUKKwkJCXF1b3RlcykuICBOb3RlIHRoYXQgdGhpcyB3b3JrcyBmaW5lIGZvciBDLCBidXQgbm90IGZvcgorCQkJUGVybCwgd2hlcmUgc2luZ2xlIHF1b3RlcyBhcmUgdXNlZCBmb3Igc3RyaW5ncy4KKwkJCU5vIGNvdW50IGlzIGFsbG93ZWQgKHtjb3VudH0lIGp1bXBzIHRvIGEgbGluZSB7Y291bnR9CisJCQlwZXJjZW50YWdlIGRvd24gdGhlIGZpbGUgfE4lfCkuICBVc2luZyAnJScgb24KKwkJCSNpZi8jZWxzZS8jZW5kaWYgbWFrZXMgdGhlIG1vdmVtZW50IGxpbmV3aXNlLgorCisJCQkJCQkqWygqCitbKAkJCWdvIHRvIFtjb3VudF0gcHJldmlvdXMgdW5tYXRjaGVkICcoJy4KKwkJCXxleGNsdXNpdmV8IG1vdGlvbi4ge25vdCBpbiBWaX0KKworCQkJCQkJKlt7KgorW3sJCQlnbyB0byBbY291bnRdIHByZXZpb3VzIHVubWF0Y2hlZCAneycuCisJCQl8ZXhjbHVzaXZlfCBtb3Rpb24uIHtub3QgaW4gVml9CisKKwkJCQkJCSpdKSoKK10pCQkJZ28gdG8gW2NvdW50XSBuZXh0IHVubWF0Y2hlZCAnKScuCisJCQl8ZXhjbHVzaXZlfCBtb3Rpb24uIHtub3QgaW4gVml9CisKKwkJCQkJCSpdfSoKK119CQkJZ28gdG8gW2NvdW50XSBuZXh0IHVubWF0Y2hlZCAnfScuCisJCQl8ZXhjbHVzaXZlfCBtb3Rpb24uIHtub3QgaW4gVml9CisKK1RoZSBhYm92ZSBmb3VyIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGdvIHRvIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGN1cnJlbnQKK2NvZGUgYmxvY2suICBJdCBpcyBsaWtlIGRvaW5nICIlIiBvbiB0aGUgJygnLCAnKScsICd7JyBvciAnfScgYXQgdGhlIG90aGVyCitlbmQgb2YgdGhlIGNvZGUgYmxvY2ssIGJ1dCB5b3UgY2FuIGRvIHRoaXMgZnJvbSBhbnl3aGVyZSBpbiB0aGUgY29kZSBibG9jay4KK1ZlcnkgdXNlZnVsIGZvciBDIHByb2dyYW1zLiAgRXhhbXBsZTogV2hlbiBzdGFuZGluZyBvbiAiY2FzZSB4OiIsICJbeyIgd2lsbAorYnJpbmcgeW91IGJhY2sgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQuCisKKwkJCQkJCSpdbSoKK11tCQkJR28gdG8gW2NvdW50XSBuZXh0IHN0YXJ0IG9mIGEgbWV0aG9kIChmb3IgSmF2YSBvcgorCQkJc2ltaWxhciBzdHJ1Y3R1cmVkIGxhbmd1YWdlKS4gIFdoZW4gbm90IGJlZm9yZSB0aGUKKwkJCXN0YXJ0IG9mIGEgbWV0aG9kLCBqdW1wIHRvIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlCisJCQljbGFzcy4gIFdoZW4gbm8gJ3snIGlzIGZvdW5kIGFmdGVyIHRoZSBjdXJzb3IsIHRoaXMgaXMKKwkJCWFuIGVycm9yLiAgfGV4Y2x1c2l2ZXwgbW90aW9uLiB7bm90IGluIFZpfQorCQkJCQkJKl1NKgorXU0JCQlHbyB0byBbY291bnRdIG5leHQgZW5kIG9mIGEgbWV0aG9kIChmb3IgSmF2YSBvcgorCQkJc2ltaWxhciBzdHJ1Y3R1cmVkIGxhbmd1YWdlKS4gIFdoZW4gbm90IGJlZm9yZSB0aGUgZW5kCisJCQlvZiBhIG1ldGhvZCwganVtcCB0byB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBjbGFzcy4KKwkJCVdoZW4gbm8gJ30nIGlzIGZvdW5kIGFmdGVyIHRoZSBjdXJzb3IsIHRoaXMgaXMgYW4KKwkJCWVycm9yLiB8ZXhjbHVzaXZlfCBtb3Rpb24uIHtub3QgaW4gVml9CisJCQkJCQkqW20qCitbbQkJCUdvIHRvIFtjb3VudF0gcHJldmlvdXMgc3RhcnQgb2YgYSBtZXRob2QgKGZvciBKYXZhIG9yCisJCQlzaW1pbGFyIHN0cnVjdHVyZWQgbGFuZ3VhZ2UpLiAgV2hlbiBub3QgYWZ0ZXIgdGhlCisJCQlzdGFydCBvZiBhIG1ldGhvZCwganVtcCB0byB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZQorCQkJY2xhc3MuICBXaGVuIG5vICd7JyBpcyBmb3VuZCBiZWZvcmUgdGhlIGN1cnNvciB0aGlzIGlzCisJCQlhbiBlcnJvci4gfGV4Y2x1c2l2ZXwgbW90aW9uLiB7bm90IGluIFZpfQorCQkJCQkJKltNKgorW00JCQlHbyB0byBbY291bnRdIHByZXZpb3VzIGVuZCBvZiBhIG1ldGhvZCAoZm9yIEphdmEgb3IKKwkJCXNpbWlsYXIgc3RydWN0dXJlZCBsYW5ndWFnZSkuICBXaGVuIG5vdCBhZnRlciB0aGUKKwkJCWVuZCBvZiBhIG1ldGhvZCwganVtcCB0byB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZQorCQkJY2xhc3MuICBXaGVuIG5vICd9JyBpcyBmb3VuZCBiZWZvcmUgdGhlIGN1cnNvciB0aGlzIGlzCisJCQlhbiBlcnJvci4gfGV4Y2x1c2l2ZXwgbW90aW9uLiB7bm90IGluIFZpfQorCitUaGUgYWJvdmUgdHdvIGNvbW1hbmRzIGFzc3VtZSB0aGF0IHRoZSBmaWxlIGNvbnRhaW5zIGEgY2xhc3Mgd2l0aCBtZXRob2RzLgorVGhlIGNsYXNzIGRlZmluaXRpb24gaXMgc3Vycm91bmRlZCBpbiAneycgYW5kICd9Jy4gIEVhY2ggbWV0aG9kIGluIHRoZSBjbGFzcworaXMgYWxzbyBzdXJyb3VuZGVkIHdpdGggJ3snIGFuZCAnfScuICBUaGlzIGFwcGxpZXMgdG8gdGhlIEphdmEgbGFuZ3VhZ2UuICBUaGUKK2ZpbGUgbG9va3MgbGlrZSB0aGlzOiA+CisKKwkvLyBjb21tZW50CisJY2xhc3MgZm9vIHsKKwkJaW50IG1ldGhvZF9vbmUoKSB7CisJCQlib2R5X29uZSgpOworCQl9CisJCWludCBtZXRob2RfdHdvKCkgeworCQkJYm9keV90d28oKTsKKwkJfQorCX0KK1N0YXJ0aW5nIHdpdGggdGhlIGN1cnNvciBvbiAiYm9keV90d28oKSIsIHVzaW5nICJbbSIgd2lsbCBqdW1wIHRvIHRoZSAneycgYXQKK3RoZSBzdGFydCBvZiAibWV0aG9kX3R3bygpIiAob2J2aW91c2x5IHRoaXMgaXMgbXVjaCBtb3JlIHVzZWZ1bCB3aGVuIHRoZQorbWV0aG9kIGlzIGxvbmchKS4gIFVzaW5nICIyW20iIHdpbGwganVtcCB0byB0aGUgc3RhcnQgb2YgIm1ldGhvZF9vbmUoKSIuCitVc2luZyAiM1ttIiB3aWxsIGp1bXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjbGFzcy4KKworCQkJCQkJKlsjKgorWyMJCQlnbyB0byBbY291bnRdIHByZXZpb3VzIHVubWF0Y2hlZCAiI2lmIiBvciAiI2Vsc2UiLgorCQkJfGV4Y2x1c2l2ZXwgbW90aW9uLiB7bm90IGluIFZpfQorCisJCQkJCQkqXSMqCitdIwkJCWdvIHRvIFtjb3VudF0gbmV4dCB1bm1hdGNoZWQgIiNlbHNlIiBvciAiI2VuZGlmIi4KKwkJCXxleGNsdXNpdmV8IG1vdGlvbi4ge25vdCBpbiBWaX0KKworVGhlc2UgdHdvIGNvbW1hbmRzIHdvcmsgaW4gQyBwcm9ncmFtcyB0aGF0IGNvbnRhaW4gI2lmLyNlbHNlLyNlbmRpZgorY29uc3RydWN0cy4gIEl0IGJyaW5ncyB5b3UgdG8gdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgI2lmLyNlbHNlLyNlbmRpZiB3aGVyZQordGhlIGN1cnJlbnQgbGluZSBpcyBpbmNsdWRlZC4gIFlvdSBjYW4gdGhlbiB1c2UgIiUiIHRvIGdvIHRvIHRoZSBtYXRjaGluZyBsaW5lLgorCisJCQkJCQkqW3N0YXIqICpbLyoKK1sqICBvciAgWy8JCWdvIHRvIFtjb3VudF0gcHJldmlvdXMgc3RhcnQgb2YgYSBDIGNvbW1lbnQgIi8qIi4KKwkJCXxleGNsdXNpdmV8IG1vdGlvbi4ge25vdCBpbiBWaX0KKworCQkJCQkJKl1zdGFyKiAqXS8qCitdKiAgb3IgIF0vCQlnbyB0byBbY291bnRdIG5leHQgZW5kIG9mIGEgQyBjb21tZW50ICIqLyIuCisJCQl8ZXhjbHVzaXZlfCBtb3Rpb24uIHtub3QgaW4gVml9CisKKworCQkJCQkJKkgqCitICQkJVG8gbGluZSBbY291bnRdIGZyb20gdG9wIChIb21lKSBvZiB3aW5kb3cgKGRlZmF1bHQ6CisJCQlmaXJzdCBsaW5lIG9uIHRoZSB3aW5kb3cpIG9uIHRoZSBmaXJzdCBub24tYmxhbmsKKwkJCWNoYXJhY3RlciB8bGluZXdpc2V8LiAgU2VlIGFsc28gJ3N0YXJ0b2ZsaW5lJyBvcHRpb24uCisJCQlDdXJzb3IgaXMgYWRqdXN0ZWQgZm9yICdzY3JvbGxvZmYnIG9wdGlvbi4KKworCQkJCQkJKk0qCitNCQkJVG8gTWlkZGxlIGxpbmUgb2Ygd2luZG93LCBvbiB0aGUgZmlyc3Qgbm9uLWJsYW5rCisJCQljaGFyYWN0ZXIgfGxpbmV3aXNlfC4gIFNlZSBhbHNvICdzdGFydG9mbGluZScgb3B0aW9uLgorCisJCQkJCQkqTCoKK0wJCQlUbyBsaW5lIFtjb3VudF0gZnJvbSBib3R0b20gb2Ygd2luZG93IChkZWZhdWx0OiBMYXN0CisJCQlsaW5lIG9uIHRoZSB3aW5kb3cpIG9uIHRoZSBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyCisJCQl8bGluZXdpc2V8LiAgU2VlIGFsc28gJ3N0YXJ0b2ZsaW5lJyBvcHRpb24uCisJCQlDdXJzb3IgaXMgYWRqdXN0ZWQgZm9yICdzY3JvbGxvZmYnIG9wdGlvbi4KKworPExlZnRNb3VzZT4JCU1vdmVzIHRvIHRoZSBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuIHdoZXJlIHRoZSBtb3VzZQorCQkJY2xpY2sgaXMgfGluY2x1c2l2ZXwuICBTZWUgYWxzbyB8PExlZnRNb3VzZT58LiAgSWYgdGhlCisJCQlwb3NpdGlvbiBpcyBpbiBhIHN0YXR1cyBsaW5lLCB0aGF0IHdpbmRvdyBpcyBtYWRlIHRoZQorCQkJYWN0aXZlIHdpbmRvdyBhbmQgdGhlIGN1cnNvciBpcyBub3QgbW92ZWQuICB7bm90IGluIFZpfQorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvbmV0YmVhbnMudHh0IGIvcnVudGltZS9kb2MvbmV0YmVhbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NzI1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9uZXRiZWFucy50eHQKQEAgLTAsMCArMSw3MzUgQEAKKypuZXRiZWFucy50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDEKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgR29yZG9uIFByaWV1cgorCisKK05ldEJlYW5zIEV4dGVybmFsRWRpdG9yIEludGVncmF0aW9uIEZlYXR1cmVzCQkqbmV0YmVhbnMqCisJCQkJCQkJKm5ldGJlYW5zLXN1cHBvcnQqCisxLiAgSW50cm9kdWN0aW9uCQkJCXxuZXRiZWFucy1pbnRyb3wKKzIuICBOZXRCZWFucyBLZXkgQmluZGluZ3MJCQl8bmV0YmVhbnMta2V5YmluZGluZ3N8CiszLiAgQ29uZmlndXJpbmcgVmltIGZvciBOZXRCZWFucwkJfG5ldGJlYW5zLWNvbmZpZ3VyZXwKKzQuICBEb3dubG9hZGluZyBOZXRCZWFucwkJCXxuZXRiZWFucy1kb3dubG9hZHwKKzUuICBQcmVwYXJpbmcgTmV0QmVhbnMgZm9yIFZpbQkJCXxuZXRiZWFucy1wcmVwYXJhdGlvbnwKKzYuICBPYnRhaW5pbmcgdGhlIEV4dGVybmFsIEVkaXRvciBNb2R1bGUJfG9idGFpbmluZy1leHRlZHwKKzcuICBTZXR0aW5nIHVwIE5ldEJlYW5zIHRvIHJ1biB3aXRoIFZpbQkJfG5ldGJlYW5zLXNldHVwfAorOC4gIE1lc3NhZ2VzCQkJCQl8bmV0YmVhbnMtbWVzc2FnZXN8Cis5LiAgUnVubmluZyBWaW0gZnJvbSBOZXRCZWFucwkJCXxuZXRiZWFucy1ydW58CisxMC4gTmV0QmVhbnMgcHJvdG9jb2wJCQkJfG5ldGJlYW5zLXByb3RvY29sfAorMTEuIEtub3duIHByb2JsZW1zCQkJCXxuZXRiZWFucy1wcm9ibGVtc3wKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGZlYXR1cmVzfQore29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtuZXRiZWFuc19pbnRnfCBmZWF0dXJlfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEludHJvZHVjdGlvbgkJCQkJCSpuZXRiZWFucy1pbnRybyoKKworTmV0QmVhbnMgaXMgYW4gb3BlbiBzb3VyY2UgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBkZXZlbG9wZWQKK2pvaW50bHkgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgdGhlIG5ldGJlYW5zLm9yZyBkZXZlbG9wZXIgY29tbXVuaXR5LgorSW5pdGlhbGx5IGp1c3QgYSBKYXZhIElERSwgTmV0QmVhbnMgaGFzIGhhZCBDLCBDKyssIGFuZCBGb3J0cmFuIHN1cHBvcnQgYWRkZWQKK2luIHJlY2VudCByZWxlYXNlcy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gdmlzaXQgdGhlIG1haW4gTmV0QmVhbnMgd2ViIHNpdGUgaHR0cDovL3d3dy5uZXRiZWFucy5vcmcKK29yIHRoZSBOZXRCZWFucyBFeHRlcm5hbCBFZGl0b3Igc2l0ZSBhdCBodHRwOi8vZXh0ZXJuYWxlZGl0b3IubmV0YmVhbnMub3JnLgorCitTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFsc28gc2hpcHMgTmV0QmVhbnMgdW5kZXIgdGhlIG5hbWUgU3VuIE9ORSBTdHVkaW8uCitWaXNpdCBodHRwOi8vd3d3LnN1bi5jb20gZm9yIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBTdW4gT05FIFN0dWRpbworcHJvZHVjdCBsaW5lLgorCitDdXJyZW50IHJlbGVhc2VzIG9mIE5ldEJlYW5zIHByb3ZpZGUgZnVsbCBzdXBwb3J0IGZvciBKYXZhIGFuZCBsaW1pdGVkIHN1cHBvcnQKK2ZvciBDLCBDKyssIGFuZCBGb3J0cmFuLiBDdXJyZW50IHJlbGVhc2VzIG9mIFN1biBPTkUgU3R1ZGlvIHByb3ZpZGUgZnVsbAorc3VwcG9ydCBmb3IgSmF2YSwgQywgQysrLCBhbmQgRm9ydHJhbi4KKworVGhlIGludGVyZmFjZSB0byBOZXRCZWFucyBpcyBhbHNvIHN1cHBvcnRlZCBieSBBZ2lkZSwgdGhlIEEtQS1QIEdVSSBJREUuCitBZ2lkZSBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tIE5ldEJlYW5zOgorLSBCYXNlZCBvbiBQeXRob24gaW5zdGVhZCBvZiBKYXZhLCBtdWNoIHNtYWxsZXIgZm9vdHByaW50IGFuZCBmYXN0IHN0YXJ0dXAuCistIEFnaWRlIGlzIGEgZnJhbWV3b3JrIGluIHdoaWNoIG1hbnkgZGlmZmVyZW50IHRvb2xzIGNhbiB3b3JrIHRvZ2V0aGVyLgorU2VlIHRoZSBBLUEtUCB3ZWJzaXRlIGZvciBpbmZvcm1hdGlvbjogaHR0cDovL3d3dy5BLUEtUC5vcmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gTmV0QmVhbnMgS2V5IEJpbmRpbmdzCQkJCSpuZXRiZWFucy1rZXliaW5kaW5ncyoKKworVmltIHVuZGVyc3RhbmRzIGEgbnVtYmVyIG9mIGtleSBiaW5kaW5ncyB0aGF0IGV4ZWN1dGUgTmV0QmVhbnMgY29tbWFuZHMuIFRoZXNlCithcmUgdHlwaWNhbGx5IGFsbCB0aGUgRnVuY3Rpb24ga2V5IGNvbWJpbmF0aW9ucy4gVG8gZXhlY3V0ZSBhIE5ldEJlYW5zIGNvbW1hbmQsCit0aGUgdXNlciBtdXN0IHByZXNzIHRoZSBQYXVzZSBrZXkgZm9sbG93ZWQgYnkgYSBOZXRCZWFucyBrZXkgYmluZGluZy4gRm9yCitleGFtcGxlLCBpbiBvcmRlciB0byBjb21waWxlIGEgSmF2YSBmaWxlLCB0aGUgTmV0QmVhbnMga2V5IGJpbmRpbmcgaXMgIkY5Ii4gU28sCit3aGlsZSBpbiB2aW0sIHByZXNzICJQYXVzZSBGOSIgdG8gY29tcGlsZSBhIGphdmEgZmlsZS4gVG8gdG9nZ2xlIGEgYnJlYWtwb2ludAorYXQgdGhlIGN1cnJlbnQgbGluZSwgcHJlc3MgIlBhdXNlIFNoaWZ0IEY4Ii4KKworVGhlIFBhdXNlIGtleSBpcyBGdW5jdGlvbiBrZXkgMjEuICBJZiB5b3UgZG9uJ3QgaGF2ZSBhIHdvcmtpbmcgUGF1c2Uga2V5IGFuZAord2FudCB0byB1c2UgRjggaW5zdGVhZCwgdXNlOiA+CisKKwk6bWFwIDxGOD4gPEYyMT4KKworVGhlIEV4dGVybmFsIEVkaXRvciBtb2R1bGUgZHluYW1pY2FsbHkgcmVhZHMgdGhlIE5ldEJlYW5zIGtleSBiaW5kaW5ncyBzbyB2aW0KK3Nob3VsZCBhbHdheXMgaGF2ZSB0aGUgbGF0ZXN0IGtleSBiaW5kaW5ncywgZXZlbiB3aGVuIE5ldEJlYW5zIGNoYW5nZXMgdGhlbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBDb25maWd1cmluZyBWaW0gZm9yIE5ldEJlYW5zCQkJKm5ldGJlYW5zLWNvbmZpZ3VyZSoKKworRm9yIG1vcmUgaGVscCBpbnN0YWxsaW5nIHZpbSwgcGxlYXNlIHJlYWQgfHVzcl85MC50eHR8IGluIHRoZSBWaW0gVXNlciBNYW51YWwuCisKKworT24gVW5peAorCitXaGVuIHJ1bm5pbmcgY29uZmlndXJlIHdpdGhvdXQgYXJndW1lbnRzIHRoZSBOZXRCZWFucyBpbnRlcmZhY2Ugc2hvdWxkIGJlCitpbmNsdWRlZC4gIFRoYXQgaXMsIGlmIHRoZSBjb25maWd1cmUgY2hlY2sgdG8gZmluZCBvdXQgaWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMKK3RoZSByZXF1aXJlZCBmZWF0dXJlcyBzdWNjZWVkcy4KKworSW4gY2FzZSB5b3UgZG8gbm90IHdhbnQgdGhlIE5ldEJlYW5zIGludGVyZmFjZSB5b3UgY2FuIGRpc2FibGUgaXQgYnkKK3VuY29tbWVudGluZyBhIGxpbmUgd2l0aCAiLS1kaXNhYmxlLW5ldGJlYW5zIiBpbiB0aGUgTWFrZWZpbGUuCisKK0N1cnJlbnRseSwgb25seSBndmltIGlzIHN1cHBvcnRlZCBpbiB0aGlzIGludGVncmF0aW9uIGFzIE5ldEJlYW5zIGRvZXMgbm90CitoYXZlIG1lYW5zIHRvIHN1cHBseSBhIHRlcm1pbmFsIGVtdWxhdG9yIGZvciB0aGUgdmltIGNvbW1hbmQuIEZ1cnRoZXJtb3JlLAordGhlcmUgaXMgb25seSBHVUkgc3VwcG9ydCBmb3IgR1RLLCBHTk9NRSwgYW5kIE1vdGlmLgorCitJZiBNb3RpZiBzdXBwb3J0IGlzIHJlcXVpcmVkIHRoZSB1c2VyIG11c3Qgc3VwcGx5IFhQTSBsaWJyYXJpZXMuIFNlZQorfHdvcmtzaG9wLXhwbXwgZm9yIGRldGFpbHMgb24gb2J0YWluaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYUE0uCisKKworT24gTVMtV2luZG93cworCitUaGUgV2luMzIgc3VwcG9ydCBpcyBub3cgaW4gYmV0YSBzdGFnZS4KKworVG8gdXNlIFhQTSBzaWducyBvbiBXaW4zMiAoZS5nLiB3aGVuIHVzaW5nIHdpdGggTmV0QmVhbnMpIHlvdSBjYW4gY29tcGlsZQorWFBNIGJ5IHlvdXJzZWxmIG9yIHVzZSBwcmVjb21waWxlZCBsaWJyYXJpZXMgZnJvbSBodHRwOi8vaWFtcGhldC5ubS5ydS9taXNjLworKGZvciBNUyBWaXN1YWwgQysrKSBvciBodHRwOi8vZ251d2luMzIuc291cmNlZm9yZ2UubmV0IChmb3IgTWluR1cpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIERvd25sb2FkaW5nIE5ldEJlYW5zCQkJCQkqbmV0YmVhbnMtZG93bmxvYWQqCisKK1RoZSBOZXRCZWFucyBJREUgaXMgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBmcm9tIG5ldGJlYW5zLm9yZy4gWW91IGNhbiBkb3dubG9hZAorYSByZWxlYXNlZCB2ZXJzaW9uLCBkb3dubG9hZCBzb3VyY2VzLCBvciB1c2UgQ1ZTIHRvIGRvd25sb2FkIHRoZSBjdXJyZW50Citzb3VyY2UgdHJlZS4gSWYgeW91IGNob29zZSB0byBkb3dubG9hZCBzb3VyY2VzLCBmb2xsb3cgZGlyZWN0aW9ucyBmcm9tCituZXRiZWFucy5vcmcgb24gYnVpbGRpbmcgTmV0QmVhbnMuCisKK0RlcGVuZGluZyBvbiB0aGUgdmVyc2lvbiBvZiBOZXRCZWFucyB5b3UgZG93bmxvYWQsIHlvdSBtYXkgbmVlZCB0byBkbyBmdXJ0aGVyCit3b3JrIHRvIGdldCB0aGUgcmVxdWlyZWQgRXh0ZXJuYWwgRWRpdG9yIG1vZHVsZS4gVGhpcyBpcyB0aGUgbW9kdWxlIHdoaWNoIGxldHMKK05ldEJlYW5zIHdvcmsgd2l0aCBndmltIChvciB4ZW1hY3MgOi0pLiBTZWUgaHR0cDovL2V4dGVybmFsZWRpdG9yLm5ldGJlYW5zLm9yZworZm9yIGRldGFpbHMgb24gZG93bmxvYWRpbmcgdGhpcyBtb2R1bGUgaWYgeW91ciBOZXRCZWFucyByZWxlYXNlIGRvZXMgbm90IGhhdmUKK2l0LgorCitGb3IgQywgQysrLCBhbmQgRm9ydHJhbiBzdXBwb3J0IHlvdSB3aWxsIGFsc28gbmVlZCB0aGUgY3BwIG1vZHVsZS4gU2VlCitodHRwOi8vY3BwLm5ldGJlYW5zLm9yZyBmb3IgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgbW9kdWxlLgorCitZb3UgY2FuIGFsc28gZG93bmxvYWQgU3VuIE9ORSBTdHVkaW8gZnJvbSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMgZm9yIGEgMzAgZGF5CitmcmVlIHRyaWFsLiBTZWUgaHR0cDovL3d3dy5zdW4uY29tIGZvciBmdXJ0aGVyIGRldGFpbHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gUHJlcGFyaW5nIE5ldEJlYW5zIGZvciBWaW0JCQkJKm5ldGJlYW5zLXByZXBhcmF0aW9uKgorCitJbiBvcmRlciBmb3IgTmV0QmVhbnMgdG8gd29yayB3aXRoIHZpbSwgdGhlIE5ldEJlYW5zIEV4dGVybmFsIEVkaXRvciBtb2R1bGUKK211c3QgYmUgbG9hZGVkIGFuZCBlbmFibGVkLiBJZiB5b3UgaGF2ZSBhIFN1biBPTkUgU3R1ZGlvIEVudGVycHJpc2UgRWRpdGlvbgordGhlbiB0aGlzIG1vZHVsZSBzaG91bGQgYmUgbG9hZGVkIGFuZCBlbmFibGVkLiBJZiB5b3UgaGF2ZSBhIE5ldEJlYW5zIHJlbGVhc2UKK3lvdSBtYXkgbmVlZCB0byBmaW5kIGFub3RoZXIgd2F5IG9mIG9idGFpbmluZyB0aGlzIG9wZW4gc291cmNlIG1vZHVsZS4KKworWW91IGNhbiBjaGVjayBpZiB5b3UgaGF2ZSB0aGlzIG1vZHVsZSBieSBvcGVuaW5nIHRoZSBUb29scy0+T3B0aW9ucyBkaWFsb2cKK2FuZCBkcmlsbGluZyBkb3duIHRvIHRoZSAiTW9kdWxlcyIgbGlzdCAoSURFIENvbmZpZ3VyYXRpb24tPlN5c3RlbS0+TW9kdWxlcykuCitJZiB5b3VyIE1vZHVsZXMgbGlzdCBoYXMgYW4gZW50cnkgZm9yICJFeHRlcm5hbCBFZGl0b3IiIHlvdSBtdXN0IG1ha2Ugc3VyZQoraXQgaXMgZW5hYmxlZCAodGhlICJFbmFibGVkIiBwcm9wZXJ0eSBzaG91bGQgaGF2ZSB0aGUgdmFsdWUgIlRydWUiKS4gSWYgeW91cgorTW9kdWxlcyBsaXN0IGhhcyBubyBFeHRlcm5hbCBFZGl0b3Igc2VlIHRoZSBuZXh0IHNlY3Rpb24gb24gfG9idGFpbmluZy1leHRlZHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gT2J0YWluaW5nIHRoZSBFeHRlcm5hbCBFZGl0b3IgTW9kdWxlCQkJICAgICpvYnRhaW5pbmctZXh0ZWQqCisKK1RoZXJlIGFyZSAyIHdheXMgb2Ygb2J0YWluaW5nIHRoZSBFeHRlcm5hbCBFZGl0b3IgbW9kdWxlLiBUaGUgZWFzaWVzdCB3YXkKK2lzIHRvIHVzZSB0aGUgTmV0QmVhbnMgVXBkYXRlIENlbnRlciB0byBkb3dubG9hZCBhbmQgaW5zdGFsbCB0aGUgbW9kdWxlLgorVW5mb3J0dW5hdGVseSwgc29tZSB2ZXJzaW9ucyBkbyBub3QgaGF2ZSB0aGlzIG1vZHVsZSBpbiB0aGVpciB1cGRhdGUKK2NlbnRlci4gSWYgeW91IGNhbm5vdCBkb3dubG9hZCB2aWEgdGhlIHVwZGF0ZSBjZW50ZXIgeW91IHdpbGwgbmVlZCB0bworZG93bmxvYWQgc291cmNlcyBhbmQgYnVpbGQgdGhlIG1vZHVsZS4gSSB3aWxsIHRyeSBhbmQgZ2V0IHRoZSBtb2R1bGUKK2F2YWlsYWJsZSBmcm9tIHRoZSBOZXRCZWFucyBVcGRhdGUgQ2VudGVyIHNvIGJ1aWxkaW5nIHdpbGwgYmUgdW5uZWNlc3NhcnkuCitBbHNvIGNoZWNrIGh0dHA6Ly9leHRlcm5hbGVkaXRvci5uZXRiZWFucy5vcmcgZm9yIG90aGVyIGF2YWlsYWJpbGl0eSBvcHRpb25zLgorCitUbyBkb3dubG9hZCB0aGUgRXh0ZXJuYWwgRWRpdG9yIHNvdXJjZXMgdmlhIENWUyBhbmQgYnVpbGQgeW91ciBvd24gbW9kdWxlLAorc2VlIGh0dHA6Ly9leHRlcm5hbGVkaXRvci5uZXRiZWFucy5vcmcgYW5kIGh0dHA6Ly93d3cubmV0YmVhbnMub3JnLgorVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBub3QgYSB0cml2aWFsIHByb2NlZHVyZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBTZXR0aW5nIHVwIE5ldEJlYW5zIHRvIHJ1biB3aXRoIFZpbQkJCSAgICAqbmV0YmVhbnMtc2V0dXAqCisKK0Fzc3VtaW5nIHlvdSBoYXZlIGxvYWRlZCBhbmQgZW5hYmxlZCB0aGUgTmV0QmVhbnMgRXh0ZXJuYWwgRWRpdG9yIG1vZHVsZQorYXMgZGVzY3JpYmVkIGluIHxuZXRiZWFucy1wcmVwYXJhdGlvbnwgYWxsIHlvdSBuZWVkIHRvIGRvIGlzIHZlcmlmeSB0aGF0Cit0aGUgZ3ZpbSBjb21tYW5kIGxpbmUgaXMgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgeW91ciBlbnZpcm9ubWVudC4KKworT3BlbiB0aGUgVG9vbHMtPk9wdGlvbnMgZGlhbG9nIGFuZCBvcGVuIHRoZSBFZGl0aW5nIGNhdGVnb3J5LiBTZWxlY3QgdGhlCitFeHRlcm5hbCBFZGl0b3IuIFRoZSByaWdodCBoYW5kIHBhbmUgc2hvdWxkIGNvbnRhaW4gYSBQcm9wZXJ0aWVzIHRhYiBhbmQKK2FuIEV4cGVydCB0YWIuIEluIHRoZSBQcm9wZXJ0aWVzIHRhYiBtYWtlIHN1cmUgdGhlICJFZGl0b3IgVHlwZSIgaXMgc2V0Cit0byAiVmltIi4gSW4gdGhlIEV4cGVydCB0YWIgbWFrZSBzdXJlIHRoZSAiVmltIENvbW1hbmQiIGlzIGNvcnJlY3QuCisKK1lvdSBzaG91bGQgYmUgY2FyZWZ1bCBpZiB5b3UgY2hhbmdlIHRoZSAiVmltIENvbW1hbmQiLiBUaGVyZSBhcmUgY29tbWFuZAorbGluZSBvcHRpb25zIHRoZXJlIHdoaWNoIG11c3QgYmUgdGhlcmUgZm9yIHRoZSBjb25uZWN0aW9uIHRvIGJlIHByb3Blcmx5CitzZXQgdXAuIFlvdSBjYW4gY2hhbmdlIHRoZSBjb21tYW5kIG5hbWUgYnV0IHRoYXRzIGFib3V0IGl0LiBJZiB5b3VyIGd2aW0KK2NhbiBiZSBmb3VuZCBieSB5b3VyICRQQVRIIHRoZW4gdGhlIFZJTSBDb21tYW5kIGNhbiBzdGFydCB3aXRoICJndmltIi4gSWYKK3lvdSBkb24ndCB3YW50IGd2aW0gc2VhcmNoZWQgZnJvbSB5b3VyICRQQVRIIHRoZW4gaGFyZCBjb2RlIGluIHRoZSBmdWxsCitVbml4IHBhdGggbmFtZS4gQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGdldCBhIGd2aW0gZm9yIGFueSBzb3VyY2UgZmlsZQoreW91IG9wZW4gaW4gTmV0QmVhbnMuCisKK0lmIHNvbWUgZmlsZXMgY29tZSB1cCBpbiBndmltIGFuZCBvdGhlcnMgKHdpdGggZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMpIGNvbWUKK3VwIGluIHRoZSBkZWZhdWx0IE5ldEJlYW5zIGVkaXRvciB5b3Ugc2hvdWxkIHZlcmlmeSB0aGUgTUlNRSB0eXBlIGluIHRoZQorRXhwZXJ0IHRhYiBNSU1FIFR5cGUgcHJvcGVydHkuIE5ldEJlYW5zIGlzIE1JTUUgb3JpZW50ZWQgYW5kIHRoZSBFeHRlcm5hbAorRWRpdG9yIHdpbGwgb25seSBvcGVuIE1JTUUgdHlwZXMgc3BlY2lmaWVkIGluIHRoaXMgcHJvcGVydHkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gTWVzc2FnZXMJCQkJCQkqbmV0YmVhbnMtbWVzc2FnZXMqCisKK1RoZXNlIG1lc3NhZ2VzIGFyZSBzcGVjaWZpYyBmb3IgTmV0QmVhbnM6CisKKwkJCQkJCQkqRTQ2MyoKK1JlZ2lvbiBpcyBndWFyZGVkLCBjYW5ub3QgbW9kaWZ5CisJCU5ldEJlYW5zIGRlZmluZXMgZ3VhcmRlZCBhcmVhcyBpbiB0aGUgdGV4dCwgd2hpY2ggeW91IGNhbm5vdAorCQljaGFuZ2UuCisKKwkJCQkJCQkqRTY1NioKK05ldEJlYW5zIGRpc3NhbGxvd3Mgd3JpdGVzIG9mIHVubW9kaWZpZWQgYnVmZmVycworCQlOZXRCZWFucyBkb2VzIG5vdCBzdXBwb3J0IHdyaXRlcyBvZiB1bm1vZGlmaWVkIGJ1ZmZlcnMgdGhhdAorCQl3ZXJlIG9wZW5lZCBmcm9tIE5ldEJlYW5zLgorCisJCQkJCQkJKkU2NTcqCitQYXJ0aWFsIHdyaXRlcyBkaXNhbGxvd2VkIGZvciBOZXRCZWFucyBidWZmZXJzCisJCU5ldEJlYW5zIGRvZXMgbm90IHN1cHBvcnQgcGFydGlhbCB3cml0ZXMgZm9yIGJ1ZmZlcnMgdGhhdCB3ZXJlCisJCW9wZW5lZCBmcm9tIE5ldEJlYW5zLgorCisJCQkJCQkJKkU2NTgqCitOZXRCZWFucyBjb25uZWN0aW9uIGxvc3QgZm9yIHRoaXMgYnVmZmVyCisJCU5ldEJlYW5zIGhhcyBiZWNvbWUgY29uZnVzZWQgYWJvdXQgdGhlIHN0YXRlIG9mIHRoaXMgZmlsZS4KKwkJUmF0aGVyIHRoYW4gcmlzYyBkYXRhIGNvcnJ1cHRpb24sIE5ldEJlYW5zIGhhcyBzZXZlcmVkIHRoZQorCQljb25uZWN0aW9uIGZvciB0aGlzIGZpbGUuIFZpbSB3aWxsIHRha2Ugb3ZlciByZXNwb25zaWJpbGl0eQorCQlmb3Igc2F2aW5nIGNoYW5nZXMgdG8gdGhpcyBmaWxlIGFuZCBOZXRCZWFucyB3aWxsIG5vIGxvbmdlcgorCQlrbm93IG9mIHRoZXNlIGNoYW5nZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gUnVubmluZyBWaW0gZnJvbSBOZXRCZWFucwkJCQkqbmV0YmVhbnMtcnVuKgorCitOZXRCZWFucyBzdGFydHMgVmltIHdpdGggdGhlIHwtbmJ8IGFyZ3VtZW50LiAgVGhyZWUgZm9ybXMgY2FuIGJlIHVzZWQsIHRoYXQKK2RpZmZlciBpbiB0aGUgd2F5IHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbm5lY3Rpb24gaXMgc3BlY2lmaWVkOgorCisJLW5iPXtmbmFtZX0JCQkJZnJvbSBhIGZpbGUKKwktbmI6e2hvc3RuYW1lfTp7YWRkcn06e3Bhc3N3b3JkfQlkaXJlY3RseQorCS1uYgkJCQkJZnJvbSBhIGZpbGUgb3IgZW52aXJvbm1lbnQKKworCQkJCQkJCSpFNjYwKiAqRTY2OCoKK0ZvciBzZWN1cml0eSByZWFzb25zLCB0aGUgYmVzdCBtZXRob2QgaXMgdG8gd3JpdGUgdGhlIGluZm9ybWF0aW9uIGluIGEgZmlsZQorcmVhZGFibGUgb25seSBieSB0aGUgdXNlci4gIFRoZSBuYW1lIG9mIHRoZSBmaWxlIGNhbiBiZSBwYXNzZWQgd2l0aCB0aGUKKyItbmI9e2ZuYW1lfSIgYXJndW1lbnQgb3IsIHdoZW4gIi1uYiIgaXMgdXNlZCB3aXRob3V0IGEgcGFyYW1ldGVyLCB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlICJfX05FVEJFQU5TX0NPTklORk8iLiAgVGhlIGZpbGUgbXVzdCBjb250YWluIHRoZXNlIHRocmVlCitsaW5lcywgaW4gYW55IG9yZGVyOgorCisJaG9zdD17aG9zdG5hbWV9CisJcG9ydD17YWRkcn0KKwlhdXRoPXtwYXNzd29yZH0KKworT3RoZXIgbGluZXMgYXJlIGlnbm9yZWQuICBUaGUgY2FsbGVyIG9mIFZpbSBpcyByZXNwb25zaWJsZSBmb3IgZGVsZXRpbmcgdGhlCitmaWxlIGFmdGVyd2FyZHMuCisKK3tob3N0bmFtZX0gaXMgdGhlIG5hbWUgb2YgdGhlIG1hY2hpbmUgd2hlcmUgTmV0QmVhbnMgaXMgcnVubmluZy4gIFdoZW4gb21pdHRlZAordGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJfX05FVEJFQU5TX0hPU1QiIGlzIHVzZWQgb3IgdGhlIGRlZmF1bHQgImxvY2FsaG9zdCIuCisKK3thZGRyfSBpcyB0aGUgcG9ydCBudW1iZXIgZm9yIE5ldEJlYW5zLiAgV2hlbiBvbWl0dGVkIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorIl9fTkVUQkVBTlNfU09DS0VUIiBpcyB1c2VkIG9yIHRoZSBkZWZhdWx0IDMyMTkuCisKK3twYXNzd29yZH0gaXMgdGhlIHBhc3N3b3JkIGZvciBjb25uZWN0aW5nIHRvIE5ldEJlYW5zLiAgV2hlbiBvbWl0dGVkIHRoZQorZW52aXJvbm1lbnQgdmFyaWFibGUgIl9fTkVUQkVBTlNfVklNX1BBU1NXT1JEIiBpcyB1c2VkIG9yICJjaGFuZ2VtZSIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTAuIE5ldEJlYW5zIHByb3RvY29sCQkJCQkqbmV0YmVhbnMtcHJvdG9jb2wqCisKK1RoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gTmV0QmVhbnMgYW5kIFZpbSB1c2VzIHBsYWluIHRleHQgbWVzc2FnZXMuICBUaGlzCitwcm90b2NvbCB3YXMgZmlyc3QgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBleHRlcm5hbCBlZGl0b3IgbW9kdWxlIG9mCitOZXRCZWFucyAoc2VlIGh0dHA6Ly9leHRlcm5hbGVkaXRvci5uZXRiZWFucy5vcmcpLiAgTGF0ZXIgaXQgd2FzIGV4dGVuZGVkIHRvCit3b3JrIHdpdGggQWdpZGUgKEEtQS1QIEdVSSBJREUsIHNlZSBodHRwOi8vd3d3LmEtYS1wLm9yZykuICBUaGUgZXh0ZW5zaW9ucyBhcmUKK21hcmtlZCB3aXRoICJ2ZXJzaW9uIDIuMSIuCisKK1ZlcnNpb24gMi4yIG9mIHRoZSBwcm90b2NvbCBoYXMgc2V2ZXJhbCBtaW5vciBjaGFuZ2VzIHdoaWNoIHNob3VsZCBvbmx5CithZmZlY3QgTmV0QmVhbnMgdXNlcnMgKGllLCBub3QgQWdpZGUgdXNlcnMpLiBIb3dldmVyLCBhIGJ1ZyB3YXMgZml4ZWQgd2hpY2gKK2NvdWxkIGNhdXNlIGNvbmZ1c2lvbi4gVGhlIG5ldGJlYW5zX3NhdmVkKCkgZnVuY3Rpb24gc2VudCBhICJzYXZlIiBwcm90b2NvbAorY29tbWFuZC4gSW4gcHJvdG9jb2wgdmVyc2lvbiAyLjEgYW5kIGVhcmxpZXIgdGhpcyB3YXMgaW5jb3JyZWN0bHkgaW50ZXJwcmV0ZWQKK2FzIGEgbm90aWZpY2F0aW9uIHRoYXQgYSB3cml0ZSBoYWQgdGFrZW4gcGxhY2UuIEluIHJlYWxpdHksIGl0IHRvbGQgTmV0QmVhbnMKK3RvIHNhdmUgdGhlIGZpbGUgc28gbXVsdGlwbGUgd3JpdGVzIHdlcmUgYmVpbmcgZG9uZS4gVGhpcyBjYXVzZWQgdmFyaW91cworcHJvYmxlbXMgYW5kIGhhcyBiZWVuIGZpeGVkIGluIDIuMi4gVG8gZGVjcmVhc2UgdGhlIGxpa2VseWhvb2Qgb2YgdGhpcworY29uZnVzaW9uIGhhcHBlbmluZyBhZ2FpbiwgbmV0YmVhbnNfc2F2ZWQoKSBoYXMgYmVlbiByZW5hbWVkIHRvCituZXRiZWFuc19zYXZlX2J1ZmZlcigpLgorCitUaGUgbWVzc2FnZXMgYXJlIGN1cnJlbnRseSBzZW50IG92ZXIgYSBzb2NrZXQuICBTaW5jZSB0aGUgbWVzc2FnZXMgYXJlIGluCitwbGFpbiBVVEYtOCB0ZXh0IHRoaXMgcHJvdG9jb2wgY291bGQgYWxzbyBiZSB1c2VkIHdpdGggYW55IG90aGVyIGNvbW11bmljYXRpb24KK21lY2hhbmlzbS4KKworMTAuMSBLaW5kcyBvZiBtZXNzYWdlcwkJfG5iLW1lc3NhZ2VzfAorMTAuMiBUZXJtcwkJCXxuYi10ZXJtc3wKKzEwLjMgQ29tbWFuZHMJCQl8bmItY29tbWFuZHN8CisxMC40IEZ1bmN0aW9ucyBhbmQgUmVwbGllcwl8bmItZnVuY3Rpb25zfAorMTAuNSBFdmVudHMJCQl8bmItZXZlbnRzfAorMTAuNiBTcGVjaWFsIG1lc3NhZ2VzCQl8bmItc3BlY2lhbHwKKworKkU2MjcqICpFNjI4KiAqRTYyOSogKkU2MzAqICpFNjMxKiAqRTYzMiogKkU2MzMqICpFNjM0KiAqRTYzNSogKkU2MzYqCisqRTYzNyogKkU2MzgqICpFNjM5KiAqRTY0MCogKkU2NDEqICpFNjQyKiAqRTY0MyogKkU2NDQqICpFNjQ1KiAqRTY0NioKKypFNjQ3KiAqRTY0OCogKkU2NDkqICpFNjUwKiAqRTY1MSogKkU2NTIqICpFNjUzKiAqRTY1NCoKK1RoZXNlIGVycm9ycyBvY2N1ciB3aGVuIGEgbWVzc2FnZSB2aW9sYXRlcyB0aGUgcHJvdG9jb2wuCisKKworMTAuMSBLaW5kcyBvZiBtZXNzYWdlcwkJCQkJKm5iLW1lc3NhZ2VzKgorCitUaGVyZSBhcmUgZm91ciBraW5kcyBvZiBtZXNzYWdlczoKKwora2luZAkJZGlyZWN0aW9uCWNvbW1lbnQgfgorQ29tbWFuZAkJSURFIC0+IGVkaXRvcglubyByZXBseSBuZWNlc3NhcnkKK0Z1bmN0aW9uCUlERSAtPiBlZGl0b3IJZWRpdG9yIG11c3Qgc2VuZCBiYWNrIGEgcmVwbHkKK1JlcGx5CQllZGl0b3IgLT4gSURFCW9ubHkgaW4gcmVzcG9uc2UgdG8gYSBGdW5jdGlvbgorRXZlbnQJCWVkaXRvciAtPiBJREUJbm8gcmVwbHkgbmVjZXNzYXJ5CisKK1RoZSBtZXNzYWdlcyBhcmUgc2VudCBhcyBhIHNpbmdsZSBsaW5lIHdpdGggYSB0ZXJtaW5hdGluZyBuZXdsaW5lIGNoYXJhY3Rlci4KK0FyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNwYWNlLiAgVGhlIGZpcnN0IGl0ZW0gb2YgdGhlIG1lc3NhZ2UKK2RlcGVuZHMgb24gdGhlIGtpbmQgb2YgbWVzc2FnZToKKwora2luZAkJZmlyc3QgaXRlbQkJZXhhbXBsZSB+CitDb21tYW5kCQlidWZJRDpuYW1lIXNlcW5vCTExOnNob3dCYWxsb29uITEyMyAidGV4dCIKK0Z1bmN0aW9uCWJ1ZklEOm5hbWUvc2Vxbm8JMTE6Z2V0TGVuZ3RoLzEyMworUmVwbHkJCXNlcW5vCQkJMTIzIDUwMDAKK0V2ZW50CQlidWZJRDpuYW1lPTEyMwkJMTE6a2V5Q29tbWFuZD0xMjMgIlMtRjIiCisKKworMTAuMiBUZXJtcwkJCQkJCSpuYi10ZXJtcyoKKworYnVmSUQJCUJ1ZmZlciBudW1iZXIuICBBIG1lc3NhZ2UgbWF5IGJlIGVpdGhlciBmb3IgYSBzcGVjaWZpYyBidWZmZXIKKwkJb3IgZ2VuZXJpYy4gIEdlbmVyaWMgbWVzc2FnZXMgdXNlIGEgYnVmSUQgb2YgemVyby4gIE5PVEU6IHRoaXMKKwkJYnVmZmVyIElEIGlzIGFzc2lnbmVkIGJ5IHRoZSBJREUsIGl0IGlzIG5vdCBWaW0ncyBidWZmZXIKKwkJbnVtYmVyLiAgVGhlIGJ1ZklEIG11c3QgYmUgYSBzZXF1ZW50aWFsbHkgcmlzaW5nIG51bWJlciwKKwkJc3RhcnRpbmcgYXQgb25lLgorCitzZXFubwkJVGhlIElERSB1c2VzIGEgc2VxdWVuY2UgbnVtYmVyIGZvciBDb21tYW5kcyBhbmQgRnVuY3Rpb25zLiAgQQorCQlSZXBseSBtdXN0IHVzZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBGdW5jdGlvbiB0aGF0IGl0IGlzCisJCWFzc29jaWF0ZWQgd2l0aC4gIEEgemVybyBzZXF1ZW5jZSBudW1iZXIgY2FuIGJlIHVzZWQgZm9yCisJCUV2ZW50cyAodGhlIHNlcW5vIG9mIHRoZSBsYXN0IHJlY2VpdmVkIENvbW1hbmQgb3IgRnVuY3Rpb24gY2FuCisJCWFsc28gYmUgdXNlZCkuCisKK3N0cmluZwkJQXJndW1lbnQgaW4gZG91YmxlIHF1b3Rlcy4gIFRleHQgaXMgaW4gVVRGLTggZW5jb2RpbmcuICBUaGlzCisJCW1lYW5zIEFTQ0lJIGlzIHBhc3NlZCBhcy1pcy4gIFNwZWNpYWwgY2hhcmFjdGVycyBhcmUKKwkJcmVwcmVzZW50ZWQgd2l0aCBhIGJhY2tzbGFzaDoKKwkJCVwiCWRvdWJsZSBxdW90ZQorCQkJXG4JbmV3bGluZQorCQkJXHIJY2FycmlhZ2UtcmV0dXJuCisJCQlcdAl0YWIgKG9wdGlvbmFsLCBhbHNvIHdvcmtzIGxpdGVyYWxseSkKKwkJCVxcCWJhY2tzbGFzaAorCQlOVUwgYnl0ZXMgYXJlIG5vdCBhbGxvd2VkIQorCitib29sZWFuCQlBcmd1bWVudCB3aXRoIHR3byBwb3NzaWJsZSB2YWx1ZXM6CisJCQlUCXRydWUKKwkJCUYJZmFsc2UKKworbnVtYmVyCQlBcmd1bWVudCB3aXRoIGEgZGVjaW1hbCBudW1iZXIuCisKK29wdG51bQkJQXJndW1lbnQgd2l0aCBlaXRoZXIgYSBkZWNpbWFsIG51bWJlciBvciAibm9uZSIgKHdpdGhvdXQgdGhlCisJCXF1b3RlcykuCisKK29mZnNldAkJQSBudW1iZXIgYXJndW1lbnQgdGhhdCBpbmRpY2F0ZXMgYSBieXRlIHBvc2l0aW9uIGluIGEgYnVmZmVyLgorCQlUaGUgZmlyc3QgYnl0ZSBoYXMgb2Zmc2V0IHplcm8uICBMaW5lIGJyZWFrcyBhcmUgY291bnRlZCBmb3IKKwkJaG93IHRoZXkgYXBwZWFyIGluIHRoZSBmaWxlIChDUi9MRiBjb3VudHMgZm9yIHR3byBieXRlcykuCisJCU5vdGUgdGhhdCBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGlzIGNvdW50ZWQgZm9yIHRoZSBudW1iZXIgb2YKKwkJYnl0ZXMgaXQgdGFrZXMuCisKK2xudW0vY29sCUFyZ3VtZW50IHdpdGggYSBsaW5lIG51bWJlciBhbmQgY29sdW1uIG51bWJlciBwb3NpdGlvbi4gIFRoZQorCQlsaW5lIG51bWJlciBzdGFydHMgd2l0aCBvbmUsIHRoZSBjb2x1bW4gaXMgdGhlIGJ5dGUgcG9zaXRpb24sCisJCXN0YXJ0aW5nIHdpdGggemVyby4gIE5vdGUgdGhhdCBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGNvdW50cworCQlmb3Igc2V2ZXJhbCBjb2x1bW5zLgorCitwYXRobmFtZQlTdHJpbmcgYXJndW1lbnQ6IGZpbGUgbmFtZSB3aXRoIGZ1bGwgcGF0aC4KKworCisxMC4zIENvbW1hbmRzCQkJCQkJKm5iLWNvbW1hbmRzKgorCithY3Rpb25NZW51SXRlbQlOb3QgaW1wbGVtZW50ZWQuCisKK2FjdGlvblNlbnNpdGl2aXR5CisJCU5vdCBpbXBsZW1lbnRlZC4KKworYWRkQW5ubyBzZXJOdW0gdHlwZU51bSBvZmYgbGVuCisJCVBsYWNlIGFuIGFubm90YXRpb24gaW4gdGhpcyBidWZmZXIuCisJCUFyZ3VtZW50czoKKwkJICAgc2VyTnVtCW51bWJlcglzZXJpYWwgbnVtYmVyIG9mIHRoaXMgcGxhY2VkCisJCQkJCWFubm90YXRpb24sIHVzZWQgdG8gYmUgYWJsZSB0byByZW1vdmUKKwkJCQkJaXQKKwkJICAgdHlwZU51bQludW1iZXIJc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBhbm5vdGF0aW9uCisJCQkJCWRlZmluZWQgd2l0aCBkZWZpbmVBbm5vVHlwZSBmb3IgdGhpcworCQkJCQlidWZmZXIKKwkJICAgb2ZmCQludW1iZXIJb2Zmc2V0IHdoZXJlIGFubm90YXRpb24gaXMgdG8gYmUgcGxhY2VkCisJCSAgIGxlbgkJbnVtYmVyCW5vdCB1c2VkCisJCUluIHZlcnNpb24gMi4xICJsbnVtL2NvbCIgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAib2ZmIi4KKworYmFsbG9vblJlc3VsdCB0ZXh0CisJCU5vdCBpbXBsZW1lbnRlZC4KKworY2xvc2UJCUNsb3NlIHRoZSBidWZmZXIuICBUaGlzIGxlYXZlcyB1cyB3aXRob3V0IGN1cnJlbnQgYnVmZmVyLCB2ZXJ5CisJCWRhbmdlcm91cyB0byB1c2UhCisKK2NyZWF0ZQkJQ3JlYXRlcyBhIGJ1ZmZlciB3aXRob3V0IGEgbmFtZS4gIFJlcGxhY2VzIHRoZSBjdXJyZW50IGJ1ZmZlcgorCQkoaXQncyBoaWRkZW4gd2hlbiBpdCB3YXMgY2hhbmdlZCkuCisJCU5ldEJlYW5zIHVzZXMgdGhpcyBhcyB0aGUgZmlyc3QgY29tbWFuZCBmb3IgYSBmaWxlIHRoYXQgaXMKKwkJYmVpbmcgb3BlbmVkLiAgVGhlIHNlcXVlbmNlIG9mIGNvbW1hbmRzIGNvdWxkIGJlOgorCQkJY3JlYXRlCisJCQlzZXRDYXJldExpc3RlbmVyCShpZ25vcmVkKQorCQkJc2V0TW9kaWZpZWQJCShubyBlZmZlY3QpCisJCQlzZXRDb250ZW50VHlwZQkJKGlnbm9yZWQpCisJCQlzdGFydERvY3VtZW50TGlzdGVuCisJCQlzZXRUaXRsZQorCQkJc2V0RnVsbE5hbWUKKworZGVmaW5lQW5ub1R5cGUgdHlwZU51bSB0eXBlTmFtZSB0b29sdGlwIGdseXBoRmlsZSBmZyBiZworCQlEZWZpbmUgYSB0eXBlIG9mIGFubm90YXRpb24gZm9yIHRoaXMgYnVmZmVyLgorCQlBcmd1bWVudHM6CisJCSAgIHR5cGVOdW0JbnVtYmVyCXNlcXVlbmNlIG51bWJlciAobm90IHJlYWxseSB1c2VkKQorCQkgICB0eXBlTmFtZQlzdHJpbmcJbmFtZSB0aGF0IGlkZW50aWZpZXMgdGhpcyBhbm5vdGF0aW9uCisJCSAgIHRvb2x0aXAJc3RyaW5nCW5vdCB1c2VkCisJCSAgIGdseXBoRmlsZQlzdHJpbmcJbmFtZSBvZiBpY29uIGZpbGUKKwkJICAgZmcJCW9wdG51bQlmb3JlZ3JvdW5kIGNvbG9yIGZvciBsaW5lIGhpZ2hsaWdodGluZworCQkgICBiZwkJb3B0bnVtCWJhY2tncm91bmQgY29sb3IgZm9yIGxpbmUgaGlnaGxpZ2h0aW5nCisJCVZpbSB3aWxsIGRlZmluZSBhIHNpZ24gZm9yIHRoZSBhbm5vdGF0aW9uLgorCQlXaGVuIGJvdGggImZnIiBhbmQgImJnIiBhcmUgIm5vbmUiIG5vIGxpbmUgaGlnaGxpZ2h0aW5nIGlzCisJCXVzZWQgKG5ldyBpbiB2ZXJzaW9uIDIuMSkuCisJCVdoZW4gImdseXBoRmlsZSIgaXMgZW1wdHksIG5vIHRleHQgc2lnbiBpcyB1c2VkIChuZXcgaW4KKwkJdmVyc2lvbiAyLjEpLgorCQlXaGVuICJnbHlwaEZpbGUiIGlzIG9uZSBvciB0d28gY2hhcmFjdGVycyBsb25nLCBhIHRleHQgc2lnbiBpcworCQlkZWZpbmVkIChuZXcgaW4gdmVyc2lvbiAyLjEpLgorCQlOb3RlOiB0aGUgYW5ub3RhdGlvbnMgd2lsbCBiZSBkZWZpbmVkIGluIHNlcXVlbmNlLCBhbmQgdGhlCisJCXNlcXVlbmNlIG51bWJlciBpcyBsYXRlciB1c2VkIHdpdGggYWRkQW5uby4KKworZWRpdEZpbGUgcGF0aG5hbWUKKwkJU2V0IHRoZSBuYW1lIGZvciB0aGUgYnVmZmVyIGFuZCBlZGl0IHRoZSBmaWxlICJwYXRobmFtZSIsIGEKKwkJc3RyaW5nIGFyZ3VtZW50LgorCQlOb3JtYWwgd2F5IGZvciB0aGUgSURFIHRvIHRlbGwgdGhlIGVkaXRvciB0byBlZGl0IGEgZmlsZS4gIElmCisJCXRoZSBJREUgaXMgZ29pbmcgdG8gcGFzcyB0aGUgZmlsZSB0ZXh0IHRvIHRoZSBlZGl0b3IgdXNlIHRoZXNlCisJCWNvbW1hbmRzIGluc3RlYWQ6CisJCQlzZXRGdWxsTmFtZQorCQkJaW5zZXJ0CisJCQlpbml0RG9uZQorCQlOZXcgaW4gdmVyc2lvbiAyLjEuCisKK2VuYWJsZUJhbGxvb25FdmFsCisJCU5vdCBpbXBsZW1lbnRlZC4KKworZW5kQXRvbWljCUVuZCBhbiBhdG9taWMgb3BlcmF0aW9uLiAgVGhlIGNoYW5nZXMgYmV0d2VlbiAic3RhcnRBdG9taWMiCisJCWFuZCAiZW5kQXRvbWljIiBjYW4gYmUgdW5kb25lIGFzIG9uZSBvcGVyYXRpb24uICBCdXQgaXQncyBub3QKKwkJaW1wbGVtZW50ZWQgeWV0LiAgUmVkcmF3IHdoZW4gbmVjZXNzYXJ5LgorCitndWFyZCBvZmYgbGVuCisJCU1hcmsgYW4gYXJlYSBpbiB0aGUgYnVmZmVyIGFzIGd1YXJkZWQuICBUaGlzIG1lYW5zIGl0IGNhbm5vdAorCQliZSBlZGl0ZWQuICAib2ZmIiBhbmQgImxlbiIgYXJlIG51bWJlcnMgYW5kIHNwZWNpZnkgdGhlIHRleHQKKwkJdG8gYmUgZ3VhcmRlZC4KKworaW5pdERvbmUJTWFyayB0aGUgYnVmZmVyIGFzIHJlYWR5IGZvciB1c2UuICBJbXBsaWNpdGx5IG1ha2VzIHRoZSBidWZmZXIKKwkJdGhlIGN1cnJlbnQgYnVmZmVyLiAgRmlyZXMgdGhlIEJ1ZlJlYWRQb3N0IGF1dG9jb21tYW5kIGV2ZW50LgorCittb3ZlQW5ub1RvRnJvbnQgc2VyTnVtCisJCU5vdCBpbXBsZW1lbnRlZC4KKworbmV0YmVhbnNCdWZmZXIgaXNOZXRiZWFuc0J1ZmZlcgorCQlJZiAiaXNOZXRiZWFuc0J1ZmZlciIgaXMgIlQiIHRoZW4gdGhpcyBidWZmZXIgaXMgYGBvd25lZCcnIGJ5CisJCU5ldEJlYW5zLgorCQlOZXcgaW4gdmVyc2lvbiAyLjIuCisKK3B1dEJ1ZmZlck51bWJlciBwYXRobmFtZQorCQlBc3NvY2lhdGUgYSBidWZmZXIgbnVtYmVyIHdpdGggdGhlIFZpbSBidWZmZXIgYnkgdGhlIG5hbWUKKwkJInBhdGhuYW1lIiwgYSBzdHJpbmcgYXJndW1lbnQuICBUbyBiZSB1c2VkIHdoZW4gdGhlIGVkaXRvcgorCQlyZXBvcnRlZCBlZGl0aW5nIGFub3RoZXIgZmlsZSB0byB0aGUgSURFIGFuZCB0aGUgSURFIG5lZWRzIHRvCisJCXRlbGwgdGhlIGVkaXRvciB3aGF0IGJ1ZmZlciBudW1iZXIgaXQgd2lsbCB1c2UgZm9yIHRoaXMgZmlsZS4KKwkJQWxzbyBtYXJrcyB0aGUgYnVmZmVyIGFzIGluaXRpYWxpemVkLgorCQlOZXcgaW4gdmVyc2lvbiAyLjEuCisKK3JhaXNlCQlCcmluZyB0aGUgZWRpdG9yIHRvIHRoZSBmb3JlZ3JvdW5kLgorCQlOZXcgaW4gdmVyc2lvbiAyLjEuCisKK3JlbW92ZUFubm8gc2VyTnVtCisJCVJlbW92ZSBhIHByZXZpb3VzbHkgcGxhY2UgYW5ub3RhdGlvbiBmb3IgdGhpcyBidWZmZXIuCisJCSJzZXJOdW0iIGlzIHRoZSBzYW1lIG51bWJlciB1c2VkIGluIGFkZEFubm8uCisKK3NhdmUJCVNhdmUgdGhlIGJ1ZmZlciB3aGVuIGl0IHdhcyBtb2RpZmllZC4gIFRoZSBvdGhlciBzaWRlIG9mIHRoZQorCQlpbnRlcmZhY2UgaXMgZXhwZWN0ZWQgdG8gd3JpdGUgdGhlIGJ1ZmZlciBhbmQgaW52b2tlCisJCSJzZXRNb2RpZmllZCIgdG8gcmVzZXQgdGhlICJjaGFuZ2VkIiBmbGFnIG9mIHRoZSBidWZmZXIuCisJCVRoZSB3cml0aW5nIGlzIHNraXBwZWQgd2hlbiBvbmUgb2YgdGhlc2UgY29uZGl0aW9ucyBpcyB0cnVlOgorCQktICd3cml0ZScgaXMgbm90IHNldAorCQktIHRoZSBidWZmZXIgaXMgcmVhZC1vbmx5CisJCS0gdGhlIGJ1ZmZlciBkb2VzIG5vdCBoYXZlIGEgZmlsZSBuYW1lCisJCS0gJ2J1ZnR5cGUnIGRpc2FsbG93cyB3cml0aW5nCisJCU5ldyBpbiB2ZXJzaW9uIDIuMi4KKworc2V0QXNVc2VyCU5vdCBpbXBsZW1lbnRlZC4KKworc2V0QnVmZmVyTnVtYmVyIHBhdGhuYW1lCisJCUFzc29jaWF0ZSBhIGJ1ZmZlciBudW1iZXIgd2l0aCBWaW0gYnVmZmVyIGJ5IHRoZSBuYW1lCisJCSJwYXRobmFtZSIuICBUbyBiZSB1c2VkIHdoZW4gdGhlIGVkaXRvciByZXBvcnRlZCBlZGl0aW5nCisJCWFub3RoZXIgZmlsZSB0byB0aGUgSURFIGFuZCB0aGUgSURFIG5lZWRzIHRvIHRlbGwgdGhlIGVkaXRvcgorCQl3aGF0IGJ1ZmZlciBudW1iZXIgaXQgd2lsbCB1c2UgZm9yIHRoaXMgZmlsZS4KKwkJSGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBtYWtpbmcgdGhlIGJ1ZmZlciB0aGUgY3VycmVudCBidWZmZXIuCisJCVNlZSAicHV0QnVmZmVyTnVtYmVyIiBmb3IgYSBtb3JlIHVzZWZ1bCBjb21tYW5kLgorCitzZXRDb250ZW50VHlwZQorCQlOb3QgaW1wbGVtZW50ZWQuCisKK3NldERvdCBvZmYJTWFrZSB0aGUgYnVmZmVyIHRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgc2V0IHRoZSBjdXJzb3IgYXQgdGhlCisJCXNwZWNpZmllZCBwb3NpdGlvbi4gIElmIHRoZXJlIGFyZSBmb2xkcyB0aGV5IGFyZSBvcGVuZWQgdG8KKwkJbWFrZSB0aGUgY3Vyc29yIGxpbmUgdmlzaWJsZS4KKwkJSW4gdmVyc2lvbiAyLjEgImxudW0vY29sIiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mICJvZmYiLgorCitzZXRFeGl0RGVsYXkgc2Vjb25kcworCQlTZXQgdGhlIGRlbGF5IGZvciBleGl0aW5nIHRvICJzZWNvbmRzIiwgYSBudW1iZXIuCisJCVRoaXMgZGVsYXkgaXMgdXNlZCB0byBnaXZlIHRoZSBJREUgYSBjaGFuY2UgdG8gaGFuZGxlIHRoaW5ncworCQliZWZvcmUgcmVhbGx5IGV4aXRpbmcuICBUaGUgZGVmYXVsdCBkZWxheSBpcyB0d28gc2Vjb25kcy4KKwkJTmV3IGluIHZlcnNpb24gMi4xLgorCitzZXRGdWxsTmFtZSBwYXRobmFtZQorCQlTZXQgdGhlIGZpbGUgbmFtZSB0byBiZSB1c2VkIGZvciBhIGJ1ZmZlciB0byAicGF0aG5hbWUiLCBhCisJCXN0cmluZyBhcmd1bWVudC4KKwkJVXNlZCB3aGVuIHRoZSBJREUgd2FudHMgdG8gZWRpdCBhIGZpbGUgdW5kZXIgY29udHJvbCBvZiB0aGUKKwkJSURFLiAgVGhpcyBtYWtlcyB0aGUgYnVmZmVyIHRoZSBjdXJyZW50IGJ1ZmZlciwgYnV0IGRvZXMgbm90CisJCXJlYWQgdGhlIGZpbGUuICAiaW5zZXJ0IiBjb21tYW5kcyB3aWxsIGJlIHVzZWQgbmV4dCB0byBzZXQgdGhlCisJCWNvbnRlbnRzLgorCitzZXRMb2NBbmRTaXplCU5vdCBpbXBsZW1lbnRlZC4KKworc2V0TWFyawkJTm90IGltcGxlbWVudGVkLgorCitzZXRNb2RpZmllZCBtb2RpZmllZAorCQlXaGVuIHRoZSBib29sZWFuIGFyZ3VtZW50ICJtb2RpZmllZCIgaXMgIlQiIG1hcmsgdGhlIGJ1ZmZlciBhcworCQltb2RpZmllZCwgd2hlbiBpdCBpcyAiRiIgbWFyayBpdCBhcyB1bm1vZGlmaWVkLgorCitzZXRSZWFkT25seQlOb3QgaW1wbGVtZW50ZWQuCisKK3NldFN0eWxlCU5vdCBpbXBsZW1lbnRlZC4KKworc2V0VGl0bGUgbmFtZQorCQlTZXQgdGhlIHRpdGxlIGZvciB0aGUgYnVmZmVyIHRvICJuYW1lIiwgYSBzdHJpbmcgYXJndW1lbnQuCisJCVRoZSB0aXRsZSBpcyBvbmx5IHVzZWQgZm9yIE5ldEJlYW5zIGZ1bmN0aW9ucywgbm90IGJ5IFZpbS4KKworc2V0VmlzaWJsZSB2aXNpYmxlCisJCVdoZW4gdGhlIGJvb2xlYW4gYXJndW1lbnQgInZpc2libGUiIGlzICJUIiwgZ290byB0aGUgYnVmZmVyLgorCQlUaGUgIkYiIGFyZ3VtZW50IGRvZXMgbm90aGluZy4KKworc2hvd0JhbGxvb24gdGV4dAorCQlTaG93IGEgYmFsbG9vbiAocG9wdXAgd2luZG93KSBhdCB0aGUgbW91c2UgcG9pbnRlciBwb3NpdGlvbiwKKwkJY29udGFpbmluZyAidGV4dCIsIGEgc3RyaW5nIGFyZ3VtZW50LiAgVGhlIGJhbGxvb24gc2hvdWxkCisJCWRpc2FwcGVhciB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBtb3JlIHRoYW4gYSBmZXcgcGl4ZWxzLgorCQlOZXcgaW4gdmVyc2lvbiAyLjEuCisKK3NwZWNpYWxLZXlzCU5vdCBpbXBsZW1lbnRlZC4KKworc3RhcnRBdG9taWMJQmVnaW4gYW4gYXRvbWljIG9wZXJhdGlvbi4gIFRoZSBzY3JlZW4gd2lsbCBub3QgYmUgdXBkYXRlZAorCQl1bnRpbCAiZW5kQXRvbWljIiBpcyBnaXZlbi4KKworc3RhcnRDYXJldExpc3RlbgorCQlOb3QgaW1wbGVtZW50ZWQuCisKK3N0YXJ0RG9jdW1lbnRMaXN0ZW4KKwkJTWFyayB0aGUgYnVmZmVyIHRvIHJlcG9ydCBjaGFuZ2VzIHRvIHRoZSBJREUgd2l0aCB0aGUKKwkJImluc2VydCIgYW5kICJyZW1vdmUiIGV2ZW50cy4gIFRoZSBkZWZhdWx0IGlzIHRvIHJlcG9ydAorCQljaGFuZ2VzLgorCitzdG9wQ2FyZXRMaXN0ZW4KKwkJTm90IGltcGxlbWVudGVkLgorCitzdG9wRG9jdW1lbnRMaXN0ZW4KKwkJTWFyayB0aGUgYnVmZmVyIHRvIHN0b3AgcmVwb3J0aW5nIGNoYW5nZXMgdG8gdGhlIElERS4KKwkJT3Bwb3NpdGUgb2Ygc3RhcnREb2N1bWVudExpc3Rlbi4KKwordW5ndWFyZCBvZmYgbGVuCisJCU9wcG9zaXRlIG9mICJndWFyZCIsIHJlbW92ZSBndWFyZGluZyBmb3IgYSB0ZXh0IGFyZWEuCisKK3ZlcnNpb24JCU5vdCBpbXBsZW1lbnRlZC4KKworCisxMC40IEZ1bmN0aW9ucyBhbmQgUmVwbGllcwkJCQkqbmItZnVuY3Rpb25zKgorCitnZXREb3QJCU5vdCBpbXBsZW1lbnRlZC4KKworZ2V0Q3Vyc29yCVJldHVybiB0aGUgY3VycmVudCBidWZmZXIgYW5kIGN1cnNvciBwb3NpdGlvbi4KKwkJVGhlIHJlcGx5IGlzOgorCQkJc2Vxbm8gYnVmSUQgbG51bSBjb2wgb2ZmCisJCXNlcW5vID0gc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbgorCQlidWZJRCA9IGJ1ZmZlciBJRCBvZiB0aGUgY3VycmVudCBidWZmZXIgKGlmIHRoaXMgaXMgdW5rbm93biAtMQorCQkJaXMgdXNlZCkKKwkJbG51bSAgPSBsaW5lIG51bWJlciBvZiB0aGUgY3Vyc29yIChmaXJzdCBsaW5lIGlzIG9uZSkKKwkJY29sICAgPSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBjdXJzb3IgKGluIGJ5dGVzLCB6ZXJvIGJhc2VkKQorCQlvZmYgICA9IG9mZnNldCBvZiB0aGUgY3Vyc29yIGluIHRoZSBidWZmZXIgKGluIGJ5dGVzKQorCQlOZXcgaW4gdmVyc2lvbiAyLjEuCisKK2dldExlbmd0aAlSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzLgorCQlSZXBseSBleGFtcGxlIGZvciBhIGJ1ZmZlciB3aXRoIDUwMDAgYnl0ZXM6CisJCQkxMjMgNTAwMAorCQlUT0RPOiBleHBsYWluIHVzZSBvZiBwYXJ0aWFsIGxpbmUuCisKK2dldE1hcmsJCU5vdCBpbXBsZW1lbnRlZC4KKworZ2V0TW9kaWZpZWQJV2hlbiBhIGJ1ZmZlciBpcyBzcGVjaWZpZWQ6IFJldHVybiB6ZXJvIGlmIHRoZSBidWZmZXIgZG9lcyBub3QKKwkJaGF2ZSBjaGFuZ2VzLCBvbmUgaWYgaXQgZG9lcyBoYXZlIGNoYW5nZXMuCisJCVdoZW4gbm8gYnVmZmVyIGlzIHNwZWNpZmllZCAoYnVmZmVyIG51bWJlciB6ZXJvKTogUmV0dXJuIHRoZQorCQludW1iZXIgb2YgYnVmZmVycyB3aXRoIGNoYW5nZXMuICBXaGVuIHRoZSByZXN1bHQgaXMgemVybyBpdCdzCisJCXNhZmUgdG8gdGVsbCBWaW0gdG8gZXhpdC4KKwkJTmV3IGluIHZlcnNpb24gMi4xLgorCitnZXRUZXh0CQlSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgYXMgYSBzdHJpbmcuCisJCVJlcGx5IGV4YW1wbGUgZm9yIGEgYnVmZmVyIHdpdGggdHdvIGxpbmVzCisJCQkxMjMgImZpcnN0IGxpbmVcbnNlY29uZCBsaW5lXG4iCisJCU5PVEU6IGRvY3MgaW5kaWNhdGUgYW4gb2Zmc2V0IGFuZCBsZW5ndGggYXJndW1lbnQsIGJ1dCB0aGlzIGlzCisJCW5vdCBpbXBsZW1lbnRlZC4KKworaW5zZXJ0IG9mZiB0ZXh0CisJCUluc2VydCAidGV4dCIgYmVmb3JlIHBvc2l0aW9uICJvZmYiLiAgInRleHQiIGlzIGEgc3RyaW5nCisJCWFyZ3VtZW50LCAib2ZmIiBhIG51bWJlci4KKwkJUG9zc2libGUgcmVwbGllczoKKwkJCTEyMwkJbm8gcHJvYmxlbQorCQkJMTIzICFtZXNzYWdlCWZhaWxlZAorCQlOb3RlIHRoYXQgdGhlIG1lc3NhZ2UgaW4gdGhlIHJlcGx5IGlzIG5vdCBxdW90ZWQuCisKK3JlbW92ZSBvZmYgbGVuZ3RoCisJCURlbGV0ZSAibGVuZ3RoIiBieXRlcyBvZiB0ZXh0IGF0IHBvc2l0aW9uICJvZmYiLiAgQm90aAorCQlhcmd1bWVudHMgYXJlIG51bWJlcnMuCisJCVBvc3NpYmxlIHJlcGxpZXM6CisJCQkxMjMJCW5vIHByb2JsZW0KKwkJCTEyMyAhbWVzc2FnZQlmYWlsZWQKKwkJTm90ZSB0aGF0IHRoZSBtZXNzYWdlIGluIHRoZSByZXBseSBpcyBub3QgcXVvdGVkLgorCitzYXZlQW5kRXhpdAlQZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGNsb3NpbmcgVmltOiAiOmNvbmZpcm0gcWFsbCIuCisJCUlmIHRoZXJlIGFyZSBubyBjaGFuZ2VkIGZpbGVzIG9yIHRoZSB1c2VyIGRvZXMgbm90IGNhbmNlbCB0aGUKKwkJb3BlcmF0aW9uIFZpbSBleGl0cyBhbmQgbm8gcmVzdWx0IGlzIHNlbnQgYmFjay4gIFRoZSBJREUgY2FuCisJCWNvbnNpZGVyIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gYXMgYSBzdWNjZXNzZnVsIHJlc3VsdC4KKwkJSWYgdGhlIHVzZXIgY2FuY2VscyB0aGUgb3BlcmF0aW9uIHRoZSBudW1iZXIgb2YgbW9kaWZpZWQKKwkJYnVmZmVycyB0aGF0IHJlbWFpbnMgaXMgcmV0dXJuZWQgYW5kIFZpbSBkb2VzIG5vdCBleGl0LgorCQlOZXcgaW4gdmVyc2lvbiAyLjEuCisKKworMTAuNSBFdmVudHMJCQkJCQkqbmItZXZlbnRzKgorCitiYWxsb29uRXZhbCBvZmYgbGVuIHR5cGUKKwkJVGhlIG1vdXNlIHBvaW50ZXIgcmVzdHMgb24gdGV4dCBmb3IgYSBzaG9ydCB3aGlsZS4gIFdoZW4gImxlbiIKKwkJaXMgemVybywgdGhlcmUgaXMgbm8gc2VsZWN0aW9uIGFuZCB0aGUgcG9pbnRlciBpcyBhdCBwb3NpdGlvbgorCQkib2ZmIi4gIFdoZW4gImxlbiIgaXMgbm9uLXplcm8gdGhlIHRleHQgZnJvbSBwb3NpdGlvbiAib2ZmIiB0bworCQkib2ZmIiArICJsZW4iIGlzIHNlbGVjdGVkLgorCQlPbmx5IHNlbnQgYWZ0ZXIgImVuYWJsZUJhbGxvb25FdmFsIiB3YXMgdXNlZCBmb3IgdGhpcyBidWZmZXIuCisJCSJ0eXBlIiBpcyBub3QgeWV0IGRlZmluZWQuCisJCU5vdCBpbXBsZW1lbnRlZCB5ZXQuCisKK2JhbGxvb25UZXh0IHRleHQKKwkJVXNlZCB3aGVuICdiYWxsb29uZXZhbCcgaXMgc2V0IGFuZCB0aGUgbW91c2UgcG9pbnRlciByZXN0cyBvbgorCQlzb21lIHRleHQgZm9yIGEgbW9tZW50LiAgInRleHQiIGlzIGEgc3RyaW5nLCB0aGUgdGV4dCB1bmRlcgorCQl0aGUgbW91c2UgcG9pbnRlci4KKwkJTmV3IGluIHZlcnNpb24gMi4xLgorCitidXR0b25SZWxlYXNlIGJ1dHRvbiBsbnVtIGNvbAorCQlSZXBvcnQgd2hpY2ggYnV0dG9uIHdhcyBwcmVzc2VkIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnNvcgorCQlhdCB0aGUgdGltZSBvZiB0aGUgcmVsZWFzZS4gIE9ubHkgZm9yIGJ1ZmZlcnMgdGhhdCBhcmUgb3duZWQKKwkJYnkgTmV0QmVhbnMuICBUaGlzIGV2ZW50IGlzIG5vdCBzZW50IGlmIHRoZSBidXR0b24gd2FzCisJCXJlbGVhc2VkIHdoaWxlIHRoZSBtb3VzZSB3YXMgaW4gdGhlIHN0YXR1cyBsaW5lIG9yIGluIGEKKwkJc2VwYXJhdG9yIGxpbmUuIElmIGNvbCBpcyBsZXNzIHRoYW4gMSB0aGUgYnV0dG9uIHJlbGVhc2Ugd2FzCisJCWluIHRoZSBzaWduIGFyZWEuCisJCU5ldyBpbiB2ZXJzaW9uIDIuMi4KKworZmlsZUNsb3NlZAlOb3QgaW1wbGVtZW50ZWQuCisKK2ZpbGVNb2RpZmllZAlOb3QgaW1wbGVtZW50ZWQuCisKK2ZpbGVPcGVuZWQgcGF0aG5hbWUgb3BlbiBtb2RpZmllZAorCQlBIGZpbGUgd2FzIG9wZW5lZCBieSB0aGUgdXNlci4KKwkJQXJndW1lbnRzOgorCQkgICBwYXRobmFtZQlzdHJpbmcJICBuYW1lIG9mIHRoZSBmaWxlCisJCSAgIG9wZW4JCWJvb2xlYW4gICBhbHdheXMgIlQiCisJCSAgIG1vZGlmaWVkCWJvb2xlYW4gICBhbHdheXMgIkYiCisKK2dlb21ldHJ5IGNvbHMgcm93cyB4IHkKKwkJUmVwb3J0IHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgZWRpdG9yIHdpbmRvdy4KKwkJQXJndW1lbnRzOgorCQkgICBjb2xzCQludW1iZXIJICBudW1iZXIgb2YgdGV4dCBjb2x1bW5zCisJCSAgIHJvd3MJCW51bWJlcgkgIG51bWJlciBvZiB0ZXh0IHJvd3MKKwkJICAgeAkJbnVtYmVyCSAgcGl4ZWwgcG9zaXRpb24gb24gc2NyZWVuCisJCSAgIHkJCW51bWJlcgkgIHBpeGVsIHBvc2l0aW9uIG9uIHNjcmVlbgorCQlPbmx5IHdvcmtzIGZvciBNb3RpZi4KKworaW5zZXJ0IG9mZiB0ZXh0CisJCVRleHQgInRleHQiIGhhcyBiZWVuIGluc2VydGVkIGluIFZpbSBhdCBwb3NpdGlvbiAib2ZmIi4KKwkJT25seSBmaXJlZCB3aGVuIGVuYWJsZWQsIHNlZSAic3RhcnREb2N1bWVudExpc3RlbiIuCisKK2ludm9rZUFjdGlvbglOb3QgaW1wbGVtZW50ZWQuCisKK2tleUNvbW1hbmQga2V5TmFtZQorCQlSZXBvcnRzIGEgc3BlY2lhbCBrZXkgYmVpbmcgcHJlc3NlZCB3aXRoIG5hbWUgImtleU5hbWUiLCB3aGljaAorCQlpcyBhIHN0cmluZy4KKwkJU3VwcG9ydGVkIGtleSBuYW1lczoKKwkJCUYxCQlmdW5jdGlvbiBrZXkgMQorCQkJRjIJCWZ1bmN0aW9uIGtleSAyCisJCQkuLi4KKwkJCUYxMgkJZnVuY3Rpb24ga2V5IDEyCisKKwkJCScgJwkJc3BhY2UgKHdpdGhvdXQgdGhlIHF1b3RlcykKKwkJCSEJCWV4Y2xhbWF0aW9uIG1hcmsKKwkJCS4uLgkJYW55IG90aGVyIEFTQ0lJIHByaW50YWJsZSBjaGFyYWN0ZXIKKwkJCX4JCXRpbGRlCisKKwkJCVgJCWFueSB1bnJlY29nbml6ZWQga2V5CisKKwkJVGhlIGtleSBtYXkgYmUgcHJlcGVuZGVkIGJ5ICJDIiwgIlMiIGFuZC9vciAiTSIgZm9yIENvbnRyb2wsCisJCVNoaWZ0IGFuZCBNZXRhIChBbHQpIG1vZGlmaWVycy4gIElmIHRoZXJlIGlzIGEgbW9kaWZpZXIgYSBkYXNoCisJCWlzIHVzZWQgdG8gc2VwYXJhdGUgaXQgZnJvbSB0aGUga2V5IG5hbWUuICBGb3IgZXhhbXBsZToKKwkJIkMtRjIiLgorCQlBU0NJSSBjaGFyYWN0ZXJzIGFyZSBuZXcgaW4gdmVyc2lvbiAyLjEuCisKK2tleUF0UG9zIGtleU5hbWUgbG51bS9jb2wKKwkJTGlrZSAia2V5Q29tbWFuZCIgYW5kIGFsc28gcmVwb3J0IHRoZSBsaW5lIG51bWJlciBhbmQgY29sdW1uCisJCW9mIHRoZSBjdXJzb3IuCisJCU5ldyBpbiB2ZXJzaW9uIDIuMS4KKwora2lsbGVkCQlBIGZpbGUgd2FzIGNsb3NlZCBieSB0aGUgdXNlci4gIE9ubHkgZm9yIGZpbGVzIHRoYXQgaGF2ZSBiZWVuCisJCWFzc2lnbmVkIGEgbnVtYmVyIGJ5IHRoZSBJREUuCisKK25ld0RvdEFuZE1hcmsgb2ZmIG9mZgorCQlSZXBvcnRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yIGJlaW5nIGF0ICJvZmYiIGJ5dGVzIGludG8KKwkJdGhlIGJ1ZmZlci4gIE9ubHkgc2VudCBqdXN0IGJlZm9yZSBhICJrZXlDb21tYW5kIiBldmVudC4KKworcXVpdAkJTm90IGltcGxlbWVudGVkLgorCityZW1vdmUgb2ZmIGxlbgorCQlUZXh0IHdhcyBkZWxldGVkIGluIFZpbSBhdCBwb3NpdGlvbiAib2ZmIiB3aXRoIGJ5dGUgbGVuZ3RoCisJCSJsZW4iLgorCQlPbmx5IGZpcmVkIHdoZW4gZW5hYmxlZCwgc2VlICJzdGFydERvY3VtZW50TGlzdGVuIi4KKworcmV2ZXJ0CQlOb3QgaW1wbGVtZW50ZWQuCisKK3NhdmUJCVRoZSBidWZmZXIgaGFzIGJlZW4gc2F2ZWQgYW5kIGlzIG5vdyB1bm1vZGlmaWVkLgorCQlPbmx5IGZpcmVkIHdoZW4gZW5hYmxlZCwgc2VlICJzdGFydERvY3VtZW50TGlzdGVuIi4KKworc3RhcnR1cERvbmUJVGhlIGVkaXRvciBoYXMgZmluaXNoZWQgaXRzIHN0YXJ0dXAgd29yayBhbmQgaXMgcmVhZHkgZm9yCisJCWVkaXRpbmcgZmlsZXMuCisJCU5ldyBpbiB2ZXJzaW9uIDIuMS4KKwordW5tb2RpZmllZAlUaGUgYnVmZmVyIGlzIG5vdyB1bm1vZGlmaWVkLgorCQlPbmx5IGZpcmVkIHdoZW4gZW5hYmxlZCwgc2VlICJzdGFydERvY3VtZW50TGlzdGVuIi4KKwordmVyc2lvbiB2ZXJzCVJlcG9ydCB0aGUgdmVyc2lvbiBvZiB0aGUgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLiAgVmltCisJCXJlcG9ydHMgIjIuMiIgKGluY2x1ZGluZyB0aGUgcXVvdGVzKS4KKworCisxMC42IFNwZWNpYWwgbWVzc2FnZXMJCQkJCSpuYi1zcGVjaWFsKgorCitUaGVzZSBtZXNzYWdlcyBkbyBub3QgZm9sbG93IHRoZSBzdHlsZSBvZiB0aGUgbWVzc2FnZXMgYWJvdmUuICBUaGV5IGFyZQordGVybWluYXRlZCBieSBhIG5ld2xpbmUgY2hhcmFjdGVyLgorCitBQ0NFUFQJCU5vdCB1c2VkLgorCitBVVRIIHBhc3N3b3JkCWVkaXRvciAtPiBJREU6IEZpcnN0IG1lc3NhZ2UgdGhhdCB0aGUgZWRpdG9yIHNlbmRzIHRvIHRoZSBJREUuCisJCU11c3QgY29udGFpbiB0aGUgcGFzc3dvcmQgZm9yIHRoZSBzb2NrZXQgc2VydmVyLCBhcyBzcGVjaWZpZWQKKwkJd2l0aCB0aGUgfC1uYnwgYXJndW1lbnQuICBObyBxdW90ZXMgYXJlIHVzZWQhCisKK0RJU0NPTk5FQ1QJSURFIC0+IGVkaXRvcjogYnJlYWsgdGhlIGNvbm5lY3Rpb24uICBUaGUgZWRpdG9yIHdpbGwgZXhpdC4KKwkJVGhlIElERSBtdXN0IG9ubHkgc2VuZCB0aGlzIG1lc3NhZ2Ugd2hlbiB0aGVyZSBhcmUgbm8gdW5zYXZlZAorCQljaGFuZ2VzIQorCitERVRBQ0gJCUlERSAtPiBlZGl0b3I6IGJyZWFrIHRoZSBjb25uZWN0aW9uIHdpdGhvdXQgZXhpdGluZyB0aGUKKwkJZWRpdG9yLiAgVXNlZCB3aGVuIHRoZSBJREUgZXhpdHMgd2l0aG91dCBicmluZ2luZyBkb3duIHRoZQorCQllZGl0b3IgYXMgd2VsbC4KKwkJTmV3IGluIHZlcnNpb24gMi4xLgorCitSRUpFQ1QJCU5vdCB1c2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzExLiBLbm93biBwcm9ibGVtcwkJCQkJKm5ldGJlYW5zLXByb2JsZW1zKgorCitOVUwgYnl0ZXMgYXJlIG5vdCBwb3NzaWJsZS4gIEZvciBlZGl0b3IgLT4gSURFIHRoZXkgd2lsbCBhcHBlYXIgYXMgTkwKK2NoYXJhY3RlcnMuICBGb3IgSURFIC0+IGVkaXRvciB0aGV5IGNhbm5vdCBiZSBpbnNlcnRlZC4KKworCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQgYi9ydW50aW1lL2RvYy9vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGZiNTgyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKQEAgLTAsMCArMSw2ODI2IEBACisqb3B0aW9ucy50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1biAwOAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworT3B0aW9ucwkJCQkJCQkqb3B0aW9ucyoKKworMS4gU2V0dGluZyBvcHRpb25zCQkJfHNldC1vcHRpb258CisyLiBBdXRvbWF0aWNhbGx5IHNldHRpbmcgb3B0aW9ucwl8YXV0by1zZXR0aW5nfAorMy4gT3B0aW9ucyBzdW1tYXJ5CQkJfG9wdGlvbi1zdW1tYXJ5fAorCitGb3IgYW4gb3ZlcnZpZXcgb2Ygb3B0aW9ucyBzZWUgaGVscC50eHQgfG9wdGlvbi1saXN0fC4KKworVmltIGhhcyBhIG51bWJlciBvZiBpbnRlcm5hbCB2YXJpYWJsZXMgYW5kIHN3aXRjaGVzIHdoaWNoIGNhbiBiZSBzZXQgdG8KK2FjaGlldmUgc3BlY2lhbCBlZmZlY3RzLiAgVGhlc2Ugb3B0aW9ucyBjb21lIGluIHRocmVlIGZvcm1zOgorCWJvb2xlYW4JCWNhbiBvbmx5IGJlIG9uIG9yIG9mZgkJKmJvb2xlYW4qICp0b2dnbGUqCisJbnVtYmVyCQloYXMgYSBudW1lcmljIHZhbHVlCisJc3RyaW5nCQloYXMgYSBzdHJpbmcgdmFsdWUKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTZXR0aW5nIG9wdGlvbnMJCQkJCSpzZXQtb3B0aW9uKgorCisJCQkJCQkJKjpzZSogKjpzZXQqCis6c2VbdF0JCQlTaG93IGFsbCBvcHRpb25zIHRoYXQgZGlmZmVyIGZyb20gdGhlaXIgZGVmYXVsdCB2YWx1ZS4KKworOnNlW3RdIGFsbAkJU2hvdyBhbGwgYnV0IHRlcm1pbmFsIG9wdGlvbnMuCisKKzpzZVt0XSB0ZXJtY2FwCQlTaG93IGFsbCB0ZXJtaW5hbCBvcHRpb25zLiAgTm90ZSB0aGF0IGluIHRoZSBHVUkgdGhlCisJCQlrZXkgY29kZXMgYXJlIG5vdCBzaG93biwgYmVjYXVzZSB0aGV5IGFyZSBnZW5lcmF0ZWQKKwkJCWludGVybmFsbHkgYW5kIGNhbid0IGJlIGNoYW5nZWQuICBDaGFuZ2luZyB0aGUgdGVybWluYWwKKwkJCWNvZGVzIGluIHRoZSBHVUkgaXMgbm90IHVzZWZ1bCBlaXRoZXIuLi4KKworCQkJCQkJCQkqRTUxOCogKkU1MTkqCis6c2VbdF0ge29wdGlvbn0/CVNob3cgdmFsdWUgb2Yge29wdGlvbn0uCisKKzpzZVt0XSB7b3B0aW9ufQkJVG9nZ2xlIG9wdGlvbjogc2V0LCBzd2l0Y2ggaXQgb24uCisJCQlOdW1iZXIgb3B0aW9uOiBzaG93IHZhbHVlLgorCQkJU3RyaW5nIG9wdGlvbjogc2hvdyB2YWx1ZS4KKworOnNlW3RdIG5ve29wdGlvbn0JVG9nZ2xlIG9wdGlvbjogUmVzZXQsIHN3aXRjaCBpdCBvZmYuCisKKzpzZVt0XSB7b3B0aW9ufSEgICBvcgorOnNlW3RdIGludntvcHRpb259CVRvZ2dsZSBvcHRpb246IEludmVydCB2YWx1ZS4ge25vdCBpbiBWaX0KKworCQkJCSo6c2V0LWRlZmF1bHQqICo6c2V0LSYqICo6c2V0LSZ2aSogKjpzZXQtJnZpbSoKKzpzZVt0XSB7b3B0aW9ufSYJUmVzZXQgb3B0aW9uIHRvIGl0cyBkZWZhdWx0IHZhbHVlLiAgTWF5IGRlcGVuZCBvbiB0aGUKKwkJCWN1cnJlbnQgdmFsdWUgb2YgJ2NvbXBhdGlibGUnLiB7bm90IGluIFZpfQorOnNlW3RdIHtvcHRpb259JnZpCVJlc2V0IG9wdGlvbiB0byBpdHMgVmkgZGVmYXVsdCB2YWx1ZS4ge25vdCBpbiBWaX0KKzpzZVt0XSB7b3B0aW9ufSZ2aW0JUmVzZXQgb3B0aW9uIHRvIGl0cyBWaW0gZGVmYXVsdCB2YWx1ZS4ge25vdCBpbiBWaX0KKworOnNlW3RdIGFsbCYJCVNldCBhbGwgb3B0aW9ucywgZXhjZXB0IHRlcm1pbmFsIG9wdGlvbnMsIHRvIHRoZWlyCisJCQlkZWZhdWx0IHZhbHVlLglUaGUgdmFsdWVzIG9mICd0ZXJtJywgJ2xpbmVzJyBhbmQKKwkJCSdjb2x1bW5zJyBhcmUgbm90IGNoYW5nZWQuIHtub3QgaW4gVml9CisKKwkJCQkJCSo6c2V0LWFyZ3MqICpFNDg3KiAqRTUyMSoKKzpzZVt0XSB7b3B0aW9ufT17dmFsdWV9CQlvcgorOnNlW3RdIHtvcHRpb259Ont2YWx1ZX0KKwkJCVNldCBzdHJpbmcgb3IgbnVtYmVyIG9wdGlvbiB0byB7dmFsdWV9LgorCQkJRm9yIG51bWVyaWMgb3B0aW9ucyB0aGUgdmFsdWUgY2FuIGJlIGdpdmVuIGluIGRlY2ltYWwsCisJCQloZXggKHByZWNlZGVkIHdpdGggMHgpIG9yIG9jdGFsIChwcmVjZWRlZCB3aXRoICcwJykKKwkJCShoZXggYW5kIG9jdGFsIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IgbWFjaGluZXMgd2hpY2gKKwkJCWhhdmUgdGhlIHN0cnRvbCgpIGZ1bmN0aW9uKS4KKwkJCVRoZSBvbGQgdmFsdWUgY2FuIGJlIGluc2VydGVkIGJ5IHR5cGluZyAnd2lsZGNoYXInIChieQorCQkJZGVmYXVsdCB0aGlzIGlzIGEgPFRhYj4gb3IgQ1RSTC1FIGlmICdjb21wYXRpYmxlJyBpcworCQkJc2V0KS4gIFNlZSB8Y21kbGluZS1jb21wbGV0aW9ufC4KKwkJCVdoaXRlIHNwYWNlIGJldHdlZW4ge29wdGlvbn0gYW5kICc9JyBpcyBhbGxvd2VkIGFuZAorCQkJd2lsbCBiZSBpZ25vcmVkLiAgV2hpdGUgc3BhY2UgYmV0d2VlbiAnPScgYW5kIHt2YWx1ZX0KKwkJCWlzIG5vdCBhbGxvd2VkLgorCQkJU2VlIHxvcHRpb24tYmFja3NsYXNofCBmb3IgdXNpbmcgd2hpdGUgc3BhY2UgYW5kCisJCQliYWNrc2xhc2hlcyBpbiB7dmFsdWV9LgorCis6c2VbdF0ge29wdGlvbn0rPXt2YWx1ZX0JCQkJKjpzZXQrPSoKKwkJCUFkZCB0aGUge3ZhbHVlfSB0byBhIG51bWJlciBvcHRpb24sIG9yIGFwcGVuZCB0aGUKKwkJCXt2YWx1ZX0gdG8gYSBzdHJpbmcgb3B0aW9uLiAgV2hlbiB0aGUgb3B0aW9uIGlzIGEKKwkJCWNvbW1hIHNlcGFyYXRlZCBsaXN0LCBhIGNvbW1hIGlzIGFkZGVkLCB1bmxlc3MgdGhlCisJCQl2YWx1ZSB3YXMgZW1wdHkuCisJCQlJZiB0aGUgb3B0aW9uIGlzIGEgbGlzdCBvZiBmbGFncywgc3VwZXJmbHVvdXMgZmxhZ3MKKwkJCWFyZSByZW1vdmVkLiAgT3RoZXJ3aXNlIHRoZXJlIGlzIG5vIGNoZWNrIGZvciBkb3VibGVkCisJCQl2YWx1ZXMuICBZb3UgY2FuIGF2b2lkIHRoaXMgYnkgcmVtb3ZpbmcgYSB2YWx1ZSBmaXJzdC4KKwkJCUV4YW1wbGU6ID4KKwkJCQk6c2V0IGd1aW9wdGlvbnMtPVQgZ3Vpb3B0aW9ucys9VAorPAkJCUFsc28gc2VlIHw6c2V0LWFyZ3N8IGFib3ZlLgorCQkJe25vdCBpbiBWaX0KKworOnNlW3RdIHtvcHRpb259Xj17dmFsdWV9CQkJCSo6c2V0Xj0qCisJCQlNdWx0aXBseSB0aGUge3ZhbHVlfSB0byBhIG51bWJlciBvcHRpb24sIG9yIHByZXBlbmQKKwkJCXRoZSB7dmFsdWV9IHRvIGEgc3RyaW5nIG9wdGlvbi4gIFdoZW4gdGhlIG9wdGlvbiBpcyBhCisJCQljb21tYSBzZXBhcmF0ZWQgbGlzdCwgYSBjb21tYSBpcyBhZGRlZCwgdW5sZXNzIHRoZQorCQkJdmFsdWUgd2FzIGVtcHR5LgorCQkJQWxzbyBzZWUgfDpzZXQtYXJnc3wgYWJvdmUuCisJCQl7bm90IGluIFZpfQorCis6c2VbdF0ge29wdGlvbn0tPXt2YWx1ZX0JCQkJKjpzZXQtPSoKKwkJCVN1YnRyYWN0IHRoZSB7dmFsdWV9IGZyb20gYSBudW1iZXIgb3B0aW9uLCBvciByZW1vdmUKKwkJCXRoZSB7dmFsdWV9IGZyb20gYSBzdHJpbmcgb3B0aW9uLCBpZiBpdCBpcyB0aGVyZS4KKwkJCUlmIHRoZSB7dmFsdWV9IGlzIG5vdCBmb3VuZCBpbiBhIHN0cmluZyBvcHRpb24sIHRoZXJlCisJCQlpcyBubyBlcnJvciBvciB3YXJuaW5nLiAgV2hlbiB0aGUgb3B0aW9uIGlzIGEgY29tbWEKKwkJCXNlcGFyYXRlZCBsaXN0LCBhIGNvbW1hIGlzIGRlbGV0ZWQsIHVubGVzcyB0aGUgb3B0aW9uCisJCQliZWNvbWVzIGVtcHR5LgorCQkJV2hlbiB0aGUgb3B0aW9uIGlzIGEgbGlzdCBvZiBmbGFncywge3ZhbHVlfSBtdXN0IGJlCisJCQlleGFjdGx5IGFzIHRoZXkgYXBwZWFyIGluIHRoZSBvcHRpb24uICBSZW1vdmUgZmxhZ3MKKwkJCW9uZSBieSBvbmUgdG8gYXZvaWQgcHJvYmxlbXMuCisJCQlBbHNvIHNlZSB8OnNldC1hcmdzfCBhYm92ZS4KKwkJCXtub3QgaW4gVml9CisKK1RoZSB7b3B0aW9ufSBhcmd1bWVudHMgdG8gIjpzZXQiIG1heSBiZSByZXBlYXRlZC4gIEZvciBleGFtcGxlOiA+CisJOnNldCBhaSBub3NpIHN3PTMgdHM9MworSWYgeW91IG1ha2UgYW4gZXJyb3IgaW4gb25lIG9mIHRoZSBhcmd1bWVudHMsIGFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBnaXZlbgorYW5kIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIHdpbGwgYmUgaWdub3JlZC4KKworCQkJCQkJCSo6c2V0LXZlcmJvc2UqCitXaGVuICd2ZXJib3NlJyBpcyBub24temVybywgZGlzcGxheWluZyBhbiBvcHRpb24gdmFsdWUgd2lsbCBhbHNvIHRlbGwgd2hlcmUgaXQKK3dhcyBsYXN0IHNldC4gIEV4YW1wbGU6ID4KKwk6dmVyYm9zZSBzZXQgc2hpZnR3aWR0aCBjaW5kZW50PworCSAgc2hpZnR3aWR0aD00CisJCSAgTGFzdCBzZXQgZnJvbSBtb2RlbGluZQorCSAgY2luZGVudAorCQkgIExhc3Qgc2V0IGZyb20gL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltNjAvZnRwbHVnaW4vYy52aW0KK1RoaXMgaXMgb25seSBkb25lIHdoZW4gc3BlY2lmaWMgb3B0aW9uIHZhbHVlcyBhcmUgcmVxdWVzdGVkLCBub3QgZm9yICI6c2V0CithbGwiIG9yICI6c2V0IiB3aXRob3V0IGFuIGFyZ3VtZW50LgorV2hlbiB0aGUgb3B0aW9uIHdhcyBzZXQgYnkgaGFuZCB0aGVyZSBpcyBubyAiTGFzdCBzZXQiIG1lc3NhZ2UuICBUaGVyZSBpcyBvbmx5CitvbmUgdmFsdWUgZm9yIGFsbCBsb2NhbCBvcHRpb25zIHdpdGggdGhlIHNhbWUgbmFtZS4gIFRodXMgdGhlIG1lc3NhZ2UgYXBwbGllcwordG8gdGhlIG9wdGlvbiBuYW1lLCBub3QgbmVjZXNzYXJpbHkgaXRzIHZhbHVlLgorV2hlbiB0aGUgb3B0aW9uIHdhcyBzZXQgd2hpbGUgZXhlY3V0aW5nIGEgZnVuY3Rpb24sIHVzZXIgY29tbWFuZCBvcgorYXV0b2NvbW1hbmQsIHRoZSBzY3JpcHQgaW4gd2hpY2ggaXQgd2FzIGRlZmluZWQgaXMgcmVwb3J0ZWQuCitOb3RlIHRoYXQgYW4gb3B0aW9uIG1heSBhbHNvIGhhdmUgYmVlbiBzZXQgYXMgYSBzaWRlIGVmZmVjdCBvZiBzZXR0aW5nCisnY29tcGF0aWJsZScuCit7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICtldmFsIGZlYXR1cmV9CisKKwkJCQkJCQkqOnNldC10ZXJtY2FwKiAqRTUyMioKK0ZvciB7b3B0aW9ufSB0aGUgZm9ybSAidF94eCIgbWF5IGJlIHVzZWQgdG8gc2V0IGEgdGVybWNhcCBvcHRpb24uICBUaGlzIHdpbGwKK292ZXJyaWRlIHRoZSB2YWx1ZSBmcm9tIHRoZSB0ZXJtY2FwLiAgWW91IGNhbiB0aGVuIHVzZSBpdCBpbiBhIG1hcHBpbmcuICBJZgordGhlICJ4eCIgcGFydCBjb250YWlucyBzcGVjaWFsIGNoYXJhY3RlcnMsIHVzZSB0aGUgPHRfeHg+IGZvcm06ID4KKwk6c2V0IDx0XyM0Pj1eW090CitUaGlzIGNhbiBhbHNvIGJlIHVzZWQgdG8gdHJhbnNsYXRlIGEgc3BlY2lhbCBjb2RlIGZvciBhIG5vcm1hbCBrZXkuICBGb3IKK2V4YW1wbGUsIGlmIEFsdC1iIHByb2R1Y2VzIDxFc2M+YiwgdXNlIHRoaXM6ID4KKwk6c2V0IDxNLWI+PV5bYgorKHRoZSBeWyBpcyBhIHJlYWwgPEVzYz4gaGVyZSwgdXNlIENUUkwtViA8RXNjPiB0byBlbnRlciBpdCkKK1RoZSBhZHZhbnRhZ2Ugb3ZlciBhIG1hcHBpbmcgaXMgdGhhdCBpdCB3b3JrcyBpbiBhbGwgc2l0dWF0aW9ucy4KKworVGhlIGxpc3RpbmcgZnJvbSAiOnNldCIgbG9va3MgZGlmZmVyZW50IGZyb20gVmkuICBMb25nIHN0cmluZyBvcHRpb25zIGFyZSBwdXQKK2F0IHRoZSBlbmQgb2YgdGhlIGxpc3QuICBUaGUgbnVtYmVyIG9mIG9wdGlvbnMgaXMgcXVpdGUgbGFyZ2UuCVRoZSBvdXRwdXQgb2YKKyJzZXQgYWxsIiBwcm9iYWJseSBkb2VzIG5vdCBmaXQgb24gdGhlIHNjcmVlbiwgY2F1c2luZyBWaW0gdG8gZ2l2ZSB0aGUKK3xtb3JlLXByb21wdHwuCisKKwkJCQkJCQkqb3B0aW9uLWJhY2tzbGFzaCoKK1RvIGluY2x1ZGUgd2hpdGUgc3BhY2UgaW4gYSBzdHJpbmcgb3B0aW9uIHZhbHVlIGl0IGhhcyB0byBiZSBwcmVjZWRlZCB3aXRoIGEKK2JhY2tzbGFzaC4gIFRvIGluY2x1ZGUgYSBiYWNrc2xhc2ggeW91IGhhdmUgdG8gdXNlIHR3by4gIEVmZmVjdGl2ZWx5IHRoaXMKK21lYW5zIHRoYXQgdGhlIG51bWJlciBvZiBiYWNrc2xhc2hlcyBpbiBhbiBvcHRpb24gdmFsdWUgaXMgaGFsdmVkIChyb3VuZGVkCitkb3duKS4KK0EgZmV3IGV4YW1wbGVzOiA+CisgICA6c2V0IHRhZ3M9dGFnc1wgL3Vzci90YWdzCSAgICByZXN1bHRzIGluICJ0YWdzIC91c3IvdGFncyIKKyAgIDpzZXQgdGFncz10YWdzXFwsZmlsZQkgICAgcmVzdWx0cyBpbiAidGFnc1wsZmlsZSIKKyAgIDpzZXQgdGFncz10YWdzXFxcIGZpbGUJICAgIHJlc3VsdHMgaW4gInRhZ3NcIGZpbGUiCisKK1RoZSAifCIgY2hhcmFjdGVyIHNlcGFyYXRlcyBhICI6c2V0IiBjb21tYW5kIGZyb20gYSBmb2xsb3dpbmcgY29tbWFuZC4JVG8KK2luY2x1ZGUgdGhlICJ8IiBpbiB0aGUgb3B0aW9uIHZhbHVlLCB1c2UgIlx8IiBpbnN0ZWFkLglUaGlzIGV4YW1wbGUgc2V0cyB0aGUKKyd0aXRsZXN0cmluZycgb3B0aW9uIHRvICJoaXx0aGVyZSI6ID4KKyAgIDpzZXQgdGl0bGVzdHJpbmc9aGlcfHRoZXJlCitUaGlzIHNldHMgdGhlICd0aXRsZXN0cmluZycgb3B0aW9uIHRvICJoaSIgYW5kICdpY29uc3RyaW5nJyB0byAidGhlcmUiOiA+CisgICA6c2V0IHRpdGxlc3RyaW5nPWhpfHNldCBpY29uc3RyaW5nPXRoZXJlCisKK0ZvciBNUy1ET1MgYW5kIFdJTjMyIGJhY2tzbGFzaGVzIGluIGZpbGUgbmFtZXMgYXJlIG1vc3RseSBub3QgcmVtb3ZlZC4JTW9yZQorcHJlY2lzZTogRm9yIG9wdGlvbnMgdGhhdCBleHBlY3QgYSBmaWxlIG5hbWUgKHRob3NlIHdoZXJlIGVudmlyb25tZW50Cit2YXJpYWJsZXMgYXJlIGV4cGFuZGVkKSBhIGJhY2tzbGFzaCBiZWZvcmUgYSBub3JtYWwgZmlsZSBuYW1lIGNoYXJhY3RlciBpcyBub3QKK3JlbW92ZWQuICBCdXQgYSBiYWNrc2xhc2ggYmVmb3JlIGEgc3BlY2lhbCBjaGFyYWN0ZXIgKHNwYWNlLCBiYWNrc2xhc2gsIGNvbW1hLAorZXRjLikgaXMgdXNlZCBsaWtlIGV4cGxhaW5lZCBhYm92ZS4KK1RoZXJlIGlzIG9uZSBzcGVjaWFsIHNpdHVhdGlvbiwgd2hlbiB0aGUgdmFsdWUgc3RhcnRzIHdpdGggIlxcIjogPgorICAgOnNldCBkaXI9XFxtYWNoaW5lXHBhdGgJICAgIHJlc3VsdHMgaW4gIlxcbWFjaGluZVxwYXRoIgorICAgOnNldCBkaXI9XFxcXG1hY2hpbmVcXHBhdGgJICAgIHJlc3VsdHMgaW4gIlxcbWFjaGluZVxwYXRoIgorICAgOnNldCBkaXI9XFxwYXRoXFxmaWxlCSAgICByZXN1bHRzIGluICJcXHBhdGhcZmlsZSIgKHdyb25nISkKK0ZvciB0aGUgZmlyc3Qgb25lIHRoZSBzdGFydCBpcyBrZXB0LCBidXQgZm9yIHRoZSBzZWNvbmQgb25lIHRoZSBiYWNrc2xhc2hlcworYXJlIGhhbHZlZC4gIFRoaXMgbWFrZXMgc3VyZSBpdCB3b3JrcyBib3RoIHdoZW4geW91IGV4cGVjdCBiYWNrc2xhc2hlcyB0byBiZQoraGFsdmVkIGFuZCB3aGVuIHlvdSBleHBlY3QgdGhlIGJhY2tzbGFzaGVzIHRvIGJlIGtlcHQuCVRoZSB0aGlyZCBnaXZlcyBhCityZXN1bHQgd2hpY2ggaXMgcHJvYmFibHkgbm90IHdoYXQgeW91IHdhbnQuICBBdm9pZCBpdC4KKworCQkJCSphZGQtb3B0aW9uLWZsYWdzKiAqcmVtb3ZlLW9wdGlvbi1mbGFncyoKKwkJCQkqRTUzOSogKkU1NTAqICpFNTUxKiAqRTU1MioKK1NvbWUgb3B0aW9ucyBhcmUgYSBsaXN0IG9mIGZsYWdzLiAgV2hlbiB5b3Ugd2FudCB0byBhZGQgYSBmbGFnIHRvIHN1Y2ggYW4KK29wdGlvbiwgd2l0aG91dCBjaGFuZ2luZyB0aGUgZXhpc3Rpbmcgb25lcywgeW91IGNhbiBkbyBpdCBsaWtlIHRoaXM6ID4KKyAgIDpzZXQgZ3Vpb3B0aW9ucys9YQorUmVtb3ZlIGEgZmxhZyBmcm9tIGFuIG9wdGlvbiBsaWtlIHRoaXM6ID4KKyAgIDpzZXQgZ3Vpb3B0aW9ucy09YQorVGhpcyByZW1vdmVzIHRoZSAnYScgZmxhZyBmcm9tICdndWlvcHRpb25zJy4KK05vdGUgdGhhdCB5b3Ugc2hvdWxkIGFkZCBvciByZW1vdmUgb25lIGZsYWcgYXQgYSB0aW1lLglJZiAnZ3Vpb3B0aW9ucycgaGFzCit0aGUgdmFsdWUgImFiIiwgdXNpbmcgInNldCBndWlvcHRpb25zLT1iYSIgd29uJ3Qgd29yaywgYmVjYXVzZSB0aGUgc3RyaW5nICJiYSIKK2RvZXNuJ3QgYXBwZWFyLgorCisJCQkgICAqOnNldF9lbnYqICpleHBhbmQtZW52KiAqZXhwYW5kLWVudmlyb25tZW50LXZhcioKK0Vudmlyb25tZW50IHZhcmlhYmxlcyBpbiBtb3N0IHN0cmluZyBvcHRpb25zIHdpbGwgYmUgZXhwYW5kZWQuCUlmIHRoZQorZW52aXJvbm1lbnQgdmFyaWFibGUgZXhpc3RzIHRoZSAnJCcgYW5kIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUKK25hbWUgaXMgcmVwbGFjZWQgd2l0aCBpdHMgdmFsdWUuICBJZiBpdCBkb2VzIG5vdCBleGlzdCB0aGUgJyQnIGFuZCB0aGUgbmFtZQorYXJlIG5vdCBtb2RpZmllZC4gIEFueSBub24taWQgY2hhcmFjdGVyIChub3QgYSBsZXR0ZXIsIGRpZ2l0IG9yICdfJykgbWF5Citmb2xsb3cgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUuICBUaGF0IGNoYXJhY3RlciBhbmQgd2hhdCBmb2xsb3dzIGlzCithcHBlbmRlZCB0byB0aGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLiAgRXhhbXBsZXM6ID4KKyAgIDpzZXQgdGVybT0kVEVSTS5uZXcKKyAgIDpzZXQgcGF0aD0vdXNyLyRJTkNMVURFLCRIT01FL2luY2x1ZGUsLgorV2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcgYSBzdHJpbmcgZnJvbSBhbiBvcHRpb24gd2l0aCAiOnNldCBvcHQtPXZhbCIgb3IgIjpzZXQKK29wdCs9dmFsIiB0aGUgZXhwYW5zaW9uIGlzIGRvbmUgYmVmb3JlIHRoZSBhZGRpbmcgb3IgcmVtb3ZpbmcuCisKKworSGFuZGxpbmcgb2YgbG9jYWwgb3B0aW9ucwkJCSpsb2NhbC1vcHRpb25zKgorCitTb21lIG9mIHRoZSBvcHRpb25zIG9ubHkgYXBwbHkgdG8gYSB3aW5kb3cgb3IgYnVmZmVyLiAgRWFjaCB3aW5kb3cgb3IgYnVmZmVyCitoYXMgaXRzIG93biBjb3B5IG9mIHRoaXMgb3B0aW9uLCB0aHVzIGNhbiBlYWNoIGhhdmUgdGhlaXIgb3duIHZhbHVlLiAgVGhpcworYWxsb3dzIHlvdSB0byBzZXQgJ2xpc3QnIGluIG9uZSB3aW5kb3cgYnV0IG5vdCBpbiBhbm90aGVyLiAgQW5kIHNldAorJ3NoaWZ0d2lkdGgnIHRvIDMgaW4gb25lIGJ1ZmZlciBhbmQgNCBpbiBhbm90aGVyLgorCitUaGUgZm9sbG93aW5nIGV4cGxhaW5zIHdoYXQgaGFwcGVucyB0byB0aGVzZSBsb2NhbCBvcHRpb25zIGluIHNwZWNpZmljCitzaXR1YXRpb25zLiAgWW91IGRvbid0IHJlYWxseSBuZWVkIHRvIGtub3cgYWxsIG9mIHRoaXMsIHNpbmNlIFZpbSBtb3N0bHkgdXNlcwordGhlIG9wdGlvbiB2YWx1ZXMgeW91IHdvdWxkIGV4cGVjdC4gIFVuZm9ydHVuYXRlbHksIGRvaW5nIHdoYXQgdGhlIHVzZXIKK2V4cGVjdHMgaXMgYSBiaXQgY29tcGxpY2F0ZWQuLi4KKworV2hlbiBzcGxpdHRpbmcgYSB3aW5kb3csIHRoZSBsb2NhbCBvcHRpb25zIGFyZSBjb3BpZWQgdG8gdGhlIG5ldyB3aW5kb3cuICBUaHVzCityaWdodCBhZnRlciB0aGUgc3BsaXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0d28gd2luZG93cyBsb29rIHRoZSBzYW1lLgorCitXaGVuIGVkaXRpbmcgYSBuZXcgYnVmZmVyLCBpdHMgbG9jYWwgb3B0aW9uIHZhbHVlcyBtdXN0IGJlIGluaXRpYWxpemVkLiAgU2luY2UKK3RoZSBsb2NhbCBvcHRpb25zIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBtaWdodCBiZSBzcGVjaWZpY2FsbHkgZm9yIHRoYXQgYnVmZmVyLAordGhlc2UgYXJlIG5vdCB1c2VkLiAgSW5zdGVhZCwgZm9yIGVhY2ggYnVmZmVyLWxvY2FsIG9wdGlvbiB0aGVyZSBhbHNvIGlzIGEKK2dsb2JhbCB2YWx1ZSwgd2hpY2ggaXMgdXNlZCBmb3IgbmV3IGJ1ZmZlcnMuICBXaXRoICI6c2V0IiBib3RoIHRoZSBsb2NhbCBhbmQKK2dsb2JhbCB2YWx1ZSBpcyBjaGFuZ2VkLiAgV2l0aCAic2V0bG9jYWwiIG9ubHkgdGhlIGxvY2FsIHZhbHVlIGlzIGNoYW5nZWQsCit0aHVzIHRoaXMgdmFsdWUgaXMgbm90IHVzZWQgd2hlbiBlZGl0aW5nIGEgbmV3IGJ1ZmZlci4KKworV2hlbiBlZGl0aW5nIGEgYnVmZmVyIHRoYXQgaGFzIGJlZW4gZWRpdGVkIGJlZm9yZSwgdGhlIGxhc3QgdXNlZCB3aW5kb3cKK29wdGlvbnMgYXJlIHVzZWQgYWdhaW4uICBJZiB0aGlzIGJ1ZmZlciBoYXMgYmVlbiBlZGl0ZWQgaW4gdGhpcyB3aW5kb3csIHRoZQordmFsdWVzIGZyb20gYmFjayB0aGVuIGFyZSB1c2VkLiAgT3RoZXJ3aXNlIHRoZSB2YWx1ZXMgZnJvbSB0aGUgd2luZG93IHdoZXJlCit0aGUgYnVmZmVyIHdhcyBlZGl0ZWQgbGFzdCBhcmUgdXNlZC4KKworSXQncyBwb3NzaWJsZSB0byBzZXQgYSBsb2NhbCB3aW5kb3cgb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgYSB0eXBlIG9mIGJ1ZmZlci4KK1doZW4geW91IGVkaXQgYW5vdGhlciBidWZmZXIgaW4gdGhlIHNhbWUgd2luZG93LCB5b3UgZG9uJ3Qgd2FudCB0byBrZWVwCit1c2luZyB0aGVzZSBsb2NhbCB3aW5kb3cgb3B0aW9ucy4gIFRoZXJlZm9yZSBWaW0ga2VlcHMgYSBnbG9iYWwgdmFsdWUgb2YgdGhlCitsb2NhbCB3aW5kb3cgb3B0aW9ucywgd2hpY2ggaXMgdXNlZCB3aGVuIGVkaXRpbmcgYW5vdGhlciBidWZmZXIuICBFYWNoIHdpbmRvdworaGFzIGl0cyBvd24gY29weSBvZiB0aGVzZSB2YWx1ZXMuICBUaHVzIHRoZXNlIGFyZSBsb2NhbCB0byB0aGUgd2luZG93LCBidXQKK2dsb2JhbCB0byBhbGwgYnVmZmVycyBpbiB0aGUgd2luZG93LiAgV2l0aCB0aGlzIHlvdSBjYW4gZG86ID4KKwk6ZSBvbmUKKwk6c2V0IGxpc3QKKwk6ZSB0d28KK05vdyB0aGUgJ2xpc3QnIG9wdGlvbiB3aWxsIGFsc28gYmUgc2V0IGluICJ0d28iLCBzaW5jZSB3aXRoIHRoZSAiOnNldCBsaXN0IgorY29tbWFuZCB5b3UgaGF2ZSBhbHNvIHNldCB0aGUgZ2xvYmFsIHZhbHVlLiA+CisJOnNldCBub2xpc3QKKwk6ZSBvbmUKKwk6c2V0bG9jYWwgbGlzdAorCTplIHR3bworTm93IHRoZSAnbGlzdCcgb3B0aW9uIGlzIG5vdCBzZXQsIGJlY2F1c2UgIjpzZXQgbm9saXN0IiByZXNldHMgdGhlIGdsb2JhbAordmFsdWUsICI6c2V0bG9jYWwgbGlzdCIgb25seSBjaGFuZ2VzIHRoZSBsb2NhbCB2YWx1ZSBhbmQgIjplIHR3byIgZ2V0cyB0aGUKK2dsb2JhbCB2YWx1ZS4gIE5vdGUgdGhhdCBpZiB5b3UgZG8gdGhpcyBuZXh0OiA+CisJOmUgb25lCitZb3Ugd2lsbCBub3QgZ2V0IGJhY2sgdGhlICdsaXN0JyB2YWx1ZSBhcyBpdCB3YXMgdGhlIGxhc3QgdGltZSB5b3UgZWRpdGVkCisib25lIi4JVGhlIG9wdGlvbnMgbG9jYWwgdG8gYSB3aW5kb3cgYXJlIG5vdCByZW1lbWJlcmVkIGZvciBlYWNoIGJ1ZmZlci4KKworCQkJCQkJCSo6c2V0bCogKjpzZXRsb2NhbCoKKzpzZXRsW29jYWxdIC4uLgkJTGlrZSAiOnNldCIgYnV0IHNldCBvbmx5IHRoZSB2YWx1ZSBsb2NhbCB0byB0aGUKKwkJCWN1cnJlbnQgYnVmZmVyIG9yIHdpbmRvdy4gIE5vdCBhbGwgb3B0aW9ucyBoYXZlIGEKKwkJCWxvY2FsIHZhbHVlLiAgSWYgdGhlIG9wdGlvbiBkb2VzIG5vdCBoYXZlIGEgbG9jYWwKKwkJCXZhbHVlIHRoZSBnbG9iYWwgdmFsdWUgaXMgc2V0LgorCQkJV2l0aCB0aGUgImFsbCIgYXJndW1lbnQ6IGRpc3BsYXkgYWxsIGxvY2FsIG9wdGlvbidzCisJCQlsb2NhbCB2YWx1ZXMuCisJCQlXaXRob3V0IGFyZ3VtZW50OiBEaXNwbGF5IGFsbCBsb2NhbCBvcHRpb24ncyBsb2NhbAorCQkJdmFsdWVzIHdoaWNoIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdC4KKwkJCVdoZW4gZGlzcGxheWluZyBhIHNwZWNpZmljIGxvY2FsIG9wdGlvbiwgc2hvdyB0aGUKKwkJCWxvY2FsIHZhbHVlLiAgRm9yIGEgZ2xvYmFsIG9wdGlvbiB0aGUgZ2xvYmFsIHZhbHVlIGlzCisJCQlzaG93biAoYnV0IHRoYXQgbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUpLgorCQkJe25vdCBpbiBWaX0KKworOnNldGxbb2NhbF0ge29wdGlvbn08CVNldCB0aGUgbG9jYWwgdmFsdWUgb2Yge29wdGlvbn0gdG8gaXRzIGdsb2JhbCB2YWx1ZS4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqOnNldGcqICo6c2V0Z2xvYmFsKgorOnNldGdbbG9iYWxdIC4uLglMaWtlICI6c2V0IiBidXQgc2V0IG9ubHkgdGhlIGdsb2JhbCB2YWx1ZSBmb3IgYSBsb2NhbAorCQkJb3B0aW9uIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGxvY2FsIHZhbHVlLgorCQkJV2hlbiBkaXNwbGF5aW5nIGFuIG9wdGlvbiwgdGhlIGdsb2JhbCB2YWx1ZSBpcyBzaG93bi4KKwkJCVdpdGggdGhlICJhbGwiIGFyZ3VtZW50OiBkaXNwbGF5IGFsbCBsb2NhbCBvcHRpb24ncworCQkJZ2xvYmFsIHZhbHVlcy4KKwkJCVdpdGhvdXQgYXJndW1lbnQ6IGRpc3BsYXkgYWxsIGxvY2FsIG9wdGlvbidzIGdsb2JhbAorCQkJdmFsdWVzIHdoaWNoIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdC4KKwkJCXtub3QgaW4gVml9CisKK0ZvciBidWZmZXItbG9jYWwgYW5kIHdpbmRvdy1sb2NhbCBvcHRpb25zOgorCUNvbW1hbmQJCSBnbG9iYWwgdmFsdWUJICAgIGxvY2FsIHZhbHVlIH4KKyAgICAgIDpzZXQgb3B0aW9uPXZhbHVlCSAgICAgc2V0CQlzZXQKKyA6c2V0bG9jYWwgb3B0aW9uPXZhbHVlCSAgICAgIC0JCQlzZXQKKzpzZXRnbG9iYWwgb3B0aW9uPXZhbHVlCSAgICAgc2V0CQkgLQorICAgICAgOnNldCBvcHRpb24/CSAgICAgIC0JCSAgICAgICBkaXNwbGF5CisgOnNldGxvY2FsIG9wdGlvbj8JICAgICAgLQkJICAgICAgIGRpc3BsYXkKKzpzZXRnbG9iYWwgb3B0aW9uPwkgICAgZGlzcGxheQkJIC0KKworCitHbG9iYWwgb3B0aW9ucyB3aXRoIGEgbG9jYWwgdmFsdWUJCQkqZ2xvYmFsLWxvY2FsKgorCitPcHRpb25zIGFyZSBnbG9iYWwgd2hlbiB5b3UgbW9zdGx5IHVzZSBvbmUgdmFsdWUgZm9yIGFsbCBidWZmZXJzLiAgRm9yIHNvbWUKK2dsb2JhbCBvcHRpb25zIGl0J3MgdXNlZnVsIHRvIHNvbWV0aW1lcyBoYXZlIGEgZGlmZmVyZW50IGxvY2FsIHZhbHVlLiAgWW91IGNhbgorc2V0IHRoZSBsb2NhbCB2YWx1ZSB3aXRoICI6c2V0bG9jYWwiLiAgVGhhdCBidWZmZXIgd2lsbCB0aGVuIHVzZSB0aGUgbG9jYWwKK3ZhbHVlLCB3aGlsZSBvdGhlciBidWZmZXJzIGNvbnRpbnVlIHVzaW5nIHRoZSBnbG9iYWwgdmFsdWUuCisKK0ZvciBleGFtcGxlLCB5b3UgaGF2ZSB0d28gd2luZG93cywgYm90aCBvbiBDIHNvdXJjZSBjb2RlLiAgVGhleSB1c2UgdGhlIGdsb2JhbAorJ21ha2VwcmcnIG9wdGlvbi4gIElmIHlvdSBkbyB0aGlzIGluIG9uZSBvZiB0aGUgdHdvIHdpbmRvd3M6ID4KKwk6c2V0IG1ha2Vwcmc9Z21ha2UKK3RoZW4gdGhlIG90aGVyIHdpbmRvdyB3aWxsIHN3aXRjaCB0byB0aGUgc2FtZSB2YWx1ZS4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0Cit0aGUgJ21ha2VwcmcnIG9wdGlvbiBpbiB0aGUgb3RoZXIgQyBzb3VyY2Ugd2luZG93IHRvby4KK0hvd2V2ZXIsIGlmIHlvdSBzdGFydCBlZGl0aW5nIGEgUGVybCBmaWxlIGluIGEgbmV3IHdpbmRvdywgeW91IHdhbnQgdG8gdXNlCithbm90aGVyICdtYWtlcHJvZycgZm9yIGl0LCB3aXRob3V0IGNoYW5naW5nIHRoZSB2YWx1ZSB1c2VkIGZvciB0aGUgQyBzb3VyY2UKK2ZpbGVzLglZb3UgdXNlIHRoaXMgY29tbWFuZDogPgorCTpzZXRsb2NhbCBtYWtlcHJnPXBlcmxtYWtlCitZb3UgY2FuIHN3aXRjaCBiYWNrIHRvIHVzaW5nIHRoZSBnbG9iYWwgdmFsdWUgYnkgbWFraW5nIHRoZSBsb2NhbCB2YWx1ZSBlbXB0eTogPgorCTpzZXRsb2NhbCBtYWtlcHJnPQorVGhpcyBvbmx5IHdvcmtzIGZvciBhIHN0cmluZyBvcHRpb24uICBGb3IgYSBib29sZWFuIG9wdGlvbiB5b3UgbmVlZCB0byB1c2UgdGhlCisiPCIgZmxhZywgbGlrZSB0aGlzOiA+CisJOnNldGxvY2FsIGF1dG9yZWFkPAorTm90ZSB0aGF0IGZvciBub24tYm9vbGVhbiBvcHRpb25zIHVzaW5nICI8IiBjb3BpZXMgdGhlIGdsb2JhbCB2YWx1ZSB0byB0aGUKK2xvY2FsIHZhbHVlLCBpdCBkb2Vzbid0IHN3aXRjaCBiYWNrIHRvIHVzaW5nIHRoZSBnbG9iYWwgdmFsdWUgKHRoYXQgbWF0dGVycword2hlbiBjaGFuZ2luZyB0aGUgZ2xvYmFsIHZhbHVlIGxhdGVyKS4KK05vdGU6IEluIHRoZSBmdXR1cmUgbW9yZSBnbG9iYWwgb3B0aW9ucyBjYW4gYmUgbWFkZSBnbG9iYWwtbG9jYWwuICBVc2luZworIjpzZXRsb2NhbCIgb24gYSBnbG9iYWwgb3B0aW9uIG1pZ2h0IHdvcmsgZGlmZmVyZW50bHkgdGhlbi4KKworCitTZXR0aW5nIHRoZSBmaWxldHlwZQorCis6c2V0ZltpbGV0eXBlXSB7ZmlsZXR5cGV9CQkJKjpzZXRmKiAqOnNldGZpbGV0eXBlKgorCQkJU2V0IHRoZSAnZmlsZXR5cGUnIG9wdGlvbiB0byB7ZmlsZXR5cGV9LCBidXQgb25seSBpZgorCQkJbm90IGRvbmUgeWV0IGluIGEgc2VxdWVuY2Ugb2YgKG5lc3RlZCkgYXV0b2NvbW1hbmRzLgorCQkJVGhpcyBpcyBzaG9ydCBmb3I6ID4KKwkJCQk6aWYgIWRpZF9maWxldHlwZSgpCisJCQkJOiAgc2V0bG9jYWwgZmlsZXR5cGU9e2ZpbGV0eXBlfQorCQkJCTplbmRpZgorPAkJCVRoaXMgY29tbWFuZCBpcyB1c2VkIGluIGEgZmlsZXR5cGUudmltIGZpbGUgdG8gYXZvaWQKKwkJCXNldHRpbmcgdGhlICdmaWxldHlwZScgb3B0aW9uIHR3aWNlLCBjYXVzaW5nIGRpZmZlcmVudAorCQkJc2V0dGluZ3MgYW5kIHN5bnRheCBmaWxlcyB0byBiZSBsb2FkZWQuCisJCQl7bm90IGluIFZpfQorCis6YnJvW3dzZV0gc2VbdF0JCQkqOnNldC1icm93c2UqICo6YnJvd3NlLXNldCogKjpvcHQqICo6b3B0aW9ucyoKKzpvcHRbaW9uc10JCU9wZW4gYSB3aW5kb3cgZm9yIHZpZXdpbmcgYW5kIHNldHRpbmcgYWxsIG9wdGlvbnMuCisJCQlPcHRpb25zIGFyZSBncm91cGVkIGJ5IGZ1bmN0aW9uLgorCQkJT2ZmZXJzIHNob3J0IGhlbHAgZm9yIGVhY2ggb3B0aW9uLiAgSGl0IDxDUj4gb24gdGhlCisJCQlzaG9ydCBoZWxwIHRvIG9wZW4gYSBoZWxwIHdpbmRvdyB3aXRoIG1vcmUgaGVscCBmb3IKKwkJCXRoZSBvcHRpb24uCisJCQlNb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24gYW5kIGhpdCA8Q1I+IG9uIHRoZQorCQkJInNldCIgbGluZSB0byBzZXQgdGhlIG5ldyB2YWx1ZS4gIEZvciB3aW5kb3cgYW5kCisJCQlidWZmZXIgc3BlY2lmaWMgb3B0aW9ucywgdGhlIGxhc3QgYWNjZXNzZWQgd2luZG93IGlzCisJCQl1c2VkIHRvIHNldCB0aGUgb3B0aW9uIHZhbHVlIGluLCB1bmxlc3MgdGhpcyBpcyBhIGhlbHAKKwkJCXdpbmRvdywgaW4gd2hpY2ggY2FzZSB0aGUgd2luZG93IGJlbG93IGhlbHAgd2luZG93IGlzCisJCQl1c2VkIChza2lwcGluZyB0aGUgb3B0aW9uLXdpbmRvdykuCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZXZhbHwgb3IKKwkJCXwrYXV0b2NtZHwgZmVhdHVyZXN9CisKKwkJCQkJCQkJKiRIT01FKgorVXNpbmcgIn4iIGlzIGxpa2UgdXNpbmcgIiRIT01FIiwgYnV0IGl0IGlzIG9ubHkgcmVjb2duaXplZCBhdCB0aGUgc3RhcnQgb2YgYW4KK29wdGlvbiBhbmQgYWZ0ZXIgYSBzcGFjZSBvciBjb21tYS4KKworT24gVW5peCBzeXN0ZW1zICJ+dXNlciIgY2FuIGJlIHVzZWQgdG9vLiAgSXQgaXMgcmVwbGFjZWQgYnkgdGhlIGhvbWUgZGlyZWN0b3J5CitvZiB1c2VyICJ1c2VyIi4gIEV4YW1wbGU6ID4KKyAgICA6c2V0IHBhdGg9fm1vb2wvaW5jbHVkZSwvdXNyL2luY2x1ZGUsLgorCitPbiBVbml4IHN5c3RlbXMgdGhlIGZvcm0gIiR7SE9NRX0iIGNhbiBiZSB1c2VkIHRvby4gIFRoZSBuYW1lIGJldHdlZW4ge30gY2FuCitjb250YWluIG5vbi1pZCBjaGFyYWN0ZXJzIHRoZW4uICBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgZm9yIHRoZQorImdmIiBjb21tYW5kLCB5b3UgbmVlZCB0byBhZGQgdGhlICd7JyBhbmQgJ30nIGNoYXJhY3RlcnMgdG8gJ2lzZm5hbWUnLgorCitOT1RFOiBleHBhbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCAifi8iIGlzIG9ubHkgZG9uZSB3aXRoIHRoZSAiOnNldCIKK2NvbW1hbmQsIG5vdCB3aGVuIGFzc2lnbmluZyBhIHZhbHVlIHRvIGFuIG9wdGlvbiB3aXRoICI6bGV0Ii4KKworCitOb3RlIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBleHBhbmRlZCBvcHRpb24gaXMgbGltaXRlZC4gIEhvdyBtdWNoIGRlcGVuZHMgb24KK3RoZSBzeXN0ZW0sIG1vc3RseSBpdCBpcyBzb21ldGhpbmcgbGlrZSAyNTYgb3IgMTAyNCBjaGFyYWN0ZXJzLgorCisJCQkJCQkJKjpmaXgqICo6Zml4ZGVsKgorOmZpeFtkZWxdCQlTZXQgdGhlIHZhbHVlIG9mICd0X2tEJzoKKwkJCQkndF9rYicgaXMgICAgICd0X2tEJyBiZWNvbWVzCX4KKwkJCQkgIENUUkwtPwlDVFJMLUgKKwkJCQlub3QgQ1RSTC0/CUNUUkwtPworCisJCQkoQ1RSTC0/IGlzIDAxNzcgb2N0YWwsIDB4N2YgaGV4KSB7bm90IGluIFZpfQorCisJCQlJZiB5b3VyIGRlbGV0ZSBrZXkgdGVybWluYWwgY29kZSBpcyB3cm9uZywgYnV0IHRoZQorCQkJY29kZSBmb3IgYmFja3NwYWNlIGlzIGFscmlnaHQsIHlvdSBjYW4gcHV0IHRoaXMgaW4KKwkJCXlvdXIgLnZpbXJjOiA+CisJCQkJOmZpeGRlbAorPAkJCVRoaXMgd29ya3Mgbm8gbWF0dGVyIHdoYXQgdGhlIGFjdHVhbCBjb2RlIGZvcgorCQkJYmFja3NwYWNlIGlzLgorCisJCQlJZiB0aGUgYmFja3NwYWNlIGtleSB0ZXJtaW5hbCBjb2RlIGlzIHdyb25nIHlvdSBjYW4KKwkJCXVzZSB0aGlzOiA+CisJCQkJOmlmICZ0ZXJtID09ICJ0ZXJtbmFtZSIKKwkJCQk6ICBzZXQgdF9rYj1eVjxCUz4KKwkJCQk6ICBmaXhkZWwKKwkJCQk6ZW5kaWYKKzwJCQlXaGVyZSAiXlYiIGlzIENUUkwtViBhbmQgIjxCUz4iIGlzIHRoZSBiYWNrc3BhY2Uga2V5CisJCQkoZG9uJ3QgdHlwZSBmb3VyIGNoYXJhY3RlcnMhKS4JUmVwbGFjZSAidGVybW5hbWUiCisJCQl3aXRoIHlvdXIgdGVybWluYWwgbmFtZS4KKworCQkJSWYgeW91ciA8RGVsZXRlPiBrZXkgc2VuZHMgYSBzdHJhbmdlIGtleSBzZXF1ZW5jZSAobm90CisJCQlDVFJMLT8gb3IgQ1RSTC1IKSB5b3UgY2Fubm90IHVzZSAiOmZpeGRlbCIuICBUaGVuIHVzZTogPgorCQkJCTppZiAmdGVybSA9PSAidGVybW5hbWUiCisJCQkJOiAgc2V0IHRfa0Q9XlY8RGVsZXRlPgorCQkJCTplbmRpZgorPAkJCVdoZXJlICJeViIgaXMgQ1RSTC1WIGFuZCAiPERlbGV0ZT4iIGlzIHRoZSBkZWxldGUga2V5CisJCQkoZG9uJ3QgdHlwZSBlaWdodCBjaGFyYWN0ZXJzISkuICBSZXBsYWNlICJ0ZXJtbmFtZSIKKwkJCXdpdGggeW91ciB0ZXJtaW5hbCBuYW1lLgorCisJCQkJCQkJKkxpbnV4LWJhY2tzcGFjZSoKKwkJCU5vdGUgYWJvdXQgTGludXg6IEJ5IGRlZmF1bHQgdGhlIGJhY2tzcGFjZSBrZXkKKwkJCXByb2R1Y2VzIENUUkwtPywgd2hpY2ggaXMgd3JvbmcuICBZb3UgY2FuIGZpeCBpdCBieQorCQkJcHV0dGluZyB0aGlzIGxpbmUgaW4geW91ciByYy5sb2NhbDogPgorCQkJCWVjaG8gImtleWNvZGUgMTQgPSBCYWNrU3BhY2UiIHwgbG9hZGtleXMKKzwKKwkJCQkJCQkqTmV0QlNELWJhY2tzcGFjZSoKKwkJCU5vdGUgYWJvdXQgTmV0QlNEOiBJZiB5b3VyIGJhY2tzcGFjZSBkb2Vzbid0IHByb2R1Y2UKKwkJCXRoZSByaWdodCBjb2RlLCB0cnkgdGhpczogPgorCQkJCXhtb2RtYXAgLWUgImtleWNvZGUgMjIgPSBCYWNrU3BhY2UiCis8CQkJSWYgdGhpcyB3b3JrcywgYWRkIHRoaXMgaW4geW91ciAuWG1vZG1hcCBmaWxlOiA+CisJCQkJa2V5c3ltIDIyID0gQmFja1NwYWNlCis8CQkJWW91IG5lZWQgdG8gcmVzdGFydCBmb3IgdGhpcyB0byB0YWtlIGVmZmVjdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBBdXRvbWF0aWNhbGx5IHNldHRpbmcgb3B0aW9ucwkJCSphdXRvLXNldHRpbmcqCisKK0Jlc2lkZXMgY2hhbmdpbmcgb3B0aW9ucyB3aXRoIHRoZSAiOnNldCIgY29tbWFuZCwgdGhlcmUgYXJlIHRocmVlIGFsdGVybmF0aXZlcwordG8gc2V0IG9wdGlvbnMgYXV0b21hdGljYWxseSBmb3Igb25lIG9yIG1vcmUgZmlsZXM6CisKKzEuIFdoZW4gc3RhcnRpbmcgVmltIGluaXRpYWxpemF0aW9ucyBhcmUgcmVhZCBmcm9tIHZhcmlvdXMgcGxhY2VzLiAgU2VlCisgICB8aW5pdGlhbGl6YXRpb258LiAgTW9zdCBvZiB0aGVtIGFyZSBwZXJmb3JtZWQgZm9yIGFsbCBlZGl0aW5nIHNlc3Npb25zLAorICAgYW5kIHNvbWUgb2YgdGhlbSBkZXBlbmQgb24gdGhlIGRpcmVjdG9yeSB3aGVyZSBWaW0gaXMgc3RhcnRlZC4KKyAgIFlvdSBjYW4gY3JlYXRlIGFuIGluaXRpYWxpemF0aW9uIGZpbGUgd2l0aCB8Om1rdmltcmN8LCB8Om1rdmlld3wgYW5kCisgICB8Om1rc2Vzc2lvbnwuCisyLiBJZiB5b3Ugc3RhcnQgZWRpdGluZyBhIG5ldyBmaWxlLCB0aGUgYXV0b21hdGljIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKyAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0IG9wdGlvbnMgZm9yIGZpbGVzIG1hdGNoaW5nIGEgcGFydGljdWxhciBwYXR0ZXJuIGFuZAorICAgbWFueSBvdGhlciB0aGluZ3MuICBTZWUgfGF1dG9jb21tYW5kfC4KKzMuIElmIHlvdSBzdGFydCBlZGl0aW5nIGEgbmV3IGZpbGUsIGFuZCB0aGUgJ21vZGVsaW5lJyBvcHRpb24gaXMgb24sIGEKKyAgIG51bWJlciBvZiBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGZpbGUgYXJlIGNoZWNrZWQgZm9yCisgICBtb2RlbGluZXMuICBUaGlzIGlzIGV4cGxhaW5lZCBoZXJlLgorCisJCQkJCSptb2RlbGluZSogKnZpbToqICp2aToqICpleDoqICpFNTIwKgorVGhlcmUgYXJlIHR3byBmb3JtcyBvZiBtb2RlbGluZXMuICBUaGUgZmlyc3QgZm9ybToKKwlbdGV4dF17d2hpdGV9e3ZpOnx2aW06fGV4On1bd2hpdGVde29wdGlvbnN9CisKK1t0ZXh0XQkJYW55IHRleHQgb3IgZW1wdHkKK3t3aGl0ZX0JCWF0IGxlYXN0IG9uZSBibGFuayBjaGFyYWN0ZXIgKDxTcGFjZT4gb3IgPFRhYj4pCit7dmk6fHZpbTp8ZXg6fQl0aGUgc3RyaW5nICJ2aToiLCAidmltOiIgb3IgImV4OiIKK1t3aGl0ZV0JCW9wdGlvbmFsIHdoaXRlIHNwYWNlCit7b3B0aW9uc30JYSBsaXN0IG9mIG9wdGlvbiBzZXR0aW5ncywgc2VwYXJhdGVkIHdpdGggd2hpdGUgc3BhY2Ugb3IgJzonLAorCQl3aGVyZSBlYWNoIHBhcnQgYmV0d2VlbiAnOicgaXMgdGhlIGFyZ3VtZW50IGZvciBhICI6c2V0IgorCQljb21tYW5kCisKK0V4YW1wbGU6ID4KKyAgIHZpOm5vYWk6c3c9MyB0cz02CisKK1RoZSBzZWNvbmQgZm9ybSAodGhpcyBpcyBjb21wYXRpYmxlIHdpdGggc29tZSB2ZXJzaW9ucyBvZiBWaSk6CisKKwlbdGV4dF17d2hpdGV9e3ZpOnx2aW06fGV4On1bd2hpdGVdc2VbdF0ge29wdGlvbnN9Olt0ZXh0XQorCitbdGV4dF0JCWFueSB0ZXh0IG9yIGVtcHR5Cit7d2hpdGV9CQlhdCBsZWFzdCBvbmUgYmxhbmsgY2hhcmFjdGVyICg8U3BhY2U+IG9yIDxUYWI+KQore3ZpOnx2aW06fGV4On0JdGhlIHN0cmluZyAidmk6IiwgInZpbToiIG9yICJleDoiCitbd2hpdGVdCQlvcHRpb25hbCB3aGl0ZSBzcGFjZQorc2VbdF0JCXRoZSBzdHJpbmcgInNldCAiIG9yICJzZSAiIChub3RlIHRoZSBzcGFjZSkKK3tvcHRpb25zfQlhIGxpc3Qgb2Ygb3B0aW9ucywgc2VwYXJhdGVkIHdpdGggd2hpdGUgc3BhY2UsIHdoaWNoIGlzIHRoZQorCQlhcmd1bWVudCBmb3IgYSAiOnNldCIgY29tbWFuZAorOgkJYSBjb2xvbgorW3RleHRdCQlhbnkgdGV4dCBvciBlbXB0eQorCitFeGFtcGxlOiA+CisgICAvKiB2aW06IHNldCBhaSB0dz03NTogKi8KKworVGhlIHdoaXRlIHNwYWNlIGJlZm9yZSB7dmk6fHZpbTp8ZXg6fSBpcyByZXF1aXJlZC4gIFRoaXMgbWluaW1pemVzIHRoZSBjaGFuY2UKK3RoYXQgYSBub3JtYWwgd29yZCBsaWtlICJsZXg6IiBpcyBjYXVnaHQuICBUaGVyZSBpcyBvbmUgZXhjZXB0aW9uOiAidmk6IiBhbmQKKyJ2aW06IiBjYW4gYWxzbyBiZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbgorMy4wKS4gIFVzaW5nICJleDoiIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSB3aWxsIGJlIGlnbm9yZWQgKHRoaXMgY291bGQgYmUKK3Nob3J0IGZvciAiZXhhbXBsZToiKS4KKworCQkJCQkJCSptb2RlbGluZS1sb2NhbCoKK1RoZSBvcHRpb25zIGFyZSBzZXQgbGlrZSB3aXRoICI6c2V0bG9jYWwiOiBUaGUgbmV3IHZhbHVlIG9ubHkgYXBwbGllcyB0byB0aGUKK2J1ZmZlciB0aGF0IGNvbnRhaW5zIHRoZSB3aW5kb3cuICBBbHRob3VnaCBpdCdzIHBvc3NpYmxlIHRvIHNldCBnbG9iYWwgb3B0aW9ucworZnJvbSBhIG1vZGVsaW5lLCB0aGlzIGlzIHVudXN1YWwuICBJZiB5b3UgaGF2ZSB0d28gd2luZG93cyBvcGVuIGFuZCB0aGUgZmlsZXMKK2luIGl0IHNldCB0aGUgc2FtZSBnbG9iYWwgb3B0aW9uIHRvIGEgZGlmZmVyZW50IHZhbHVlLCB0aGUgcmVzdWx0IGRlcGVuZHMgb24KK3doaWNoIG9uZSB3YXMgb3BlbmVkIGxhc3QuCisKKwkJCQkJCQkqbW9kZWxpbmUtdmVyc2lvbioKK0lmIHRoZSBtb2RlbGluZSBpcyBvbmx5IHRvIGJlIHVzZWQgZm9yIHNvbWUgdmVyc2lvbnMgb2YgVmltLCB0aGUgdmVyc2lvbgorbnVtYmVyIGNhbiBiZSBzcGVjaWZpZWQgd2hlcmUgInZpbToiIGlzIHVzZWQ6CisJdmlte3ZlcnN9Ogl2ZXJzaW9uIHt2ZXJzfSBvciBsYXRlcgorCXZpbTx7dmVyc306CXZlcnNpb24gYmVmb3JlIHt2ZXJzfQorCXZpbT17dmVyc306CXZlcnNpb24ge3ZlcnN9CisJdmltPnt2ZXJzfToJdmVyc2lvbiBhZnRlciB7dmVyc30KK3t2ZXJzfSBpcyA2MDAgZm9yIFZpbSA2LjAgKGh1bmRyZWQgdGltZXMgdGhlIG1ham9yIHZlcnNpb24gcGx1cyBtaW5vcikuCitGb3IgZXhhbXBsZSwgdG8gdXNlIGEgbW9kZWxpbmUgb25seSBmb3IgVmltIDYuMCBhbmQgbGF0ZXI6ID4KKwkvKiB2aW02MDA6IHNldCBmb2xkbWV0aG9kPW1hcmtlcjogKi8KK1RvIHVzZSBhIG1vZGVsaW5lIGZvciBWaW0gYmVmb3JlIHZlcnNpb24gNS43OiA+CisJLyogdmltPDU3MDogc2V0IHN3PTQ6ICovCitUaGVyZSBjYW4gYmUgbm8gYmxhbmtzIGJldHdlZW4gInZpbSIgYW5kIHRoZSAiOiIuCisKKworVGhlIG51bWJlciBvZiBsaW5lcyB0aGF0IGFyZSBjaGVja2VkIGNhbiBiZSBzZXQgd2l0aCB0aGUgJ21vZGVsaW5lcycgb3B0aW9uLgorSWYgJ21vZGVsaW5lJyBpcyBvZmYgb3IgJ21vZGVsaW5lcycgaXMgMCBubyBsaW5lcyBhcmUgY2hlY2tlZC4KKworTm90ZSB0aGF0IGZvciB0aGUgZmlyc3QgZm9ybSBhbGwgb2YgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgaXMgdXNlZCwgdGh1cyBhIGxpbmUKK2xpa2U6ID4KKyAgIC8qIHZpOnRzPTQ6ICovCit3aWxsIGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdGhlIHRyYWlsaW5nICIqLyIuICBUaGlzIGxpbmUgaXMgT0s6ID4KKyAgIC8qIHZpOnNldCB0cz00OiAqLworCitJZiBhbiBlcnJvciBpcyBkZXRlY3RlZCB0aGUgcmVzdCBvZiB0aGUgbGluZSBpcyBza2lwcGVkLgorCitJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGEgJzonIGluIGEgc2V0IGNvbW1hbmQgcHJlY2VkZSBpdCB3aXRoIGEgJ1wnLiAgVGhlCitiYWNrc2xhc2ggaW4gZnJvbnQgb2YgdGhlICc6JyB3aWxsIGJlIHJlbW92ZWQuCUV4YW1wbGU6ID4KKyAgIC8qIHZpOnNldCBkaXI9Y1w6XHRtcDogKi8KK1RoaXMgc2V0cyB0aGUgJ2Rpcicgb3B0aW9uIHRvICJjOlx0bXAiLiAgT25seSBhIHNpbmdsZSBiYWNrc2xhc2ggYmVmb3JlIHRoZQorJzonIGlzIHJlbW92ZWQuICBUaHVzIHRvIGluY2x1ZGUgIlw6IiB5b3UgaGF2ZSB0byBzcGVjaWZ5ICJcXDoiLgorCitObyBvdGhlciBjb21tYW5kcyB0aGFuICJzZXQiIGFyZSBzdXBwb3J0ZWQsIGZvciBzZWN1cml0eSByZWFzb25zIChzb21lYm9keQorbWlnaHQgY3JlYXRlIGEgVHJvamFuIGhvcnNlIHRleHQgZmlsZSB3aXRoIG1vZGVsaW5lcykuCisKK0hpbnQ6IElmIHlvdSB3b3VsZCBsaWtlIHRvIGRvIHNvbWV0aGluZyBlbHNlIHRoYW4gc2V0dGluZyBhbiBvcHRpb24sIHlvdSBjb3VsZAorZGVmaW5lIGFuIGF1dG9jb21tYW5kIHRoYXQgY2hlY2tzIHRoZSBmaWxlIGZvciBhIHNwZWNpZmljIHN0cmluZy4gIEZvcgorZXhhbXBsZTogPgorCWF1IEJ1ZlJlYWRQb3N0ICogaWYgZ2V0bGluZSgxKSA9fiAiVkFSIiB8IGNhbGwgU2V0VmFyKCkgfCBlbmRpZgorQW5kIGRlZmluZSBhIGZ1bmN0aW9uIFNldFZhcigpIHRoYXQgZG9lcyBzb21ldGhpbmcgd2l0aCB0aGUgbGluZSBjb250YWluaW5nCisiVkFSIi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBPcHRpb25zIHN1bW1hcnkJCQkJCSpvcHRpb24tc3VtbWFyeSoKKworSW4gdGhlIGxpc3QgYmVsb3cgYWxsIHRoZSBvcHRpb25zIGFyZSBtZW50aW9uZWQgd2l0aCB0aGVpciBmdWxsIG5hbWUgYW5kIHdpdGgKK2FuIGFiYnJldmlhdGlvbiBpZiB0aGVyZSBpcyBvbmUuICBCb3RoIGZvcm1zIG1heSBiZSB1c2VkLgorCitJbiB0aGlzIGRvY3VtZW50IHdoZW4gYSBib29sZWFuIG9wdGlvbiBpcyAic2V0IiB0aGF0IG1lYW5zIHRoYXQgIjpzZXQgb3B0aW9uIgoraXMgZW50ZXJlZC4gIFdoZW4gYW4gb3B0aW9uIGlzICJyZXNldCIsICI6c2V0IG5vb3B0aW9uIiBpcyB1c2VkLgorCitGb3Igc29tZSBvcHRpb25zIHRoZXJlIGFyZSB0d28gZGVmYXVsdCB2YWx1ZXM6IFRoZSAiVmltIGRlZmF1bHQiLCB3aGljaCBpcwordXNlZCB3aGVuICdjb21wYXRpYmxlJyBpcyBub3Qgc2V0LCBhbmQgdGhlICJWaSBkZWZhdWx0Iiwgd2hpY2ggaXMgdXNlZCB3aGVuCisnY29tcGF0aWJsZScgaXMgc2V0LgorCitNb3N0IG9wdGlvbnMgYXJlIHRoZSBzYW1lIGluIGFsbCB3aW5kb3dzIGFuZCBidWZmZXJzLiAgVGhlcmUgYXJlIGEgZmV3IHRoYXQKK2FyZSBzcGVjaWZpYyB0byBob3cgdGhlIHRleHQgaXMgcHJlc2VudGVkIGluIGEgd2luZG93LglUaGVzZSBjYW4gYmUgc2V0IHRvIGEKK2RpZmZlcmVudCB2YWx1ZSBpbiBlYWNoIHdpbmRvdy4gIEZvciBleGFtcGxlIHRoZSAnbGlzdCcgb3B0aW9uIGNhbiBiZSBzZXQgaW4KK29uZSB3aW5kb3cgYW5kIHJlc2V0IGluIGFub3RoZXIgZm9yIHRoZSBzYW1lIHRleHQsIGdpdmluZyBib3RoIHR5cGVzIG9mIHZpZXcKK2F0IHRoZSBzYW1lIHRpbWUuICBUaGVyZSBhcmUgYSBmZXcgb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYyB0byBhIGNlcnRhaW4KK2ZpbGUuICBUaGVzZSBjYW4gaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgZWFjaCBmaWxlIG9yIGJ1ZmZlci4gIEZvciBleGFtcGxlCit0aGUgJ3RleHR3aWR0aCcgb3B0aW9uIGNhbiBiZSA3OCBmb3IgYSBub3JtYWwgdGV4dCBmaWxlIGFuZCAwIGZvciBhIEMKK3Byb2dyYW0uCisKKwlnbG9iYWwJCQlvbmUgb3B0aW9uIGZvciBhbGwgYnVmZmVycyBhbmQgd2luZG93cworCWxvY2FsIHRvIHdpbmRvdwkJZWFjaCB3aW5kb3cgaGFzIGl0cyBvd24gY29weSBvZiB0aGlzIG9wdGlvbgorCWxvY2FsIHRvIGJ1ZmZlcgkJZWFjaCBidWZmZXIgaGFzIGl0cyBvd24gY29weSBvZiB0aGlzIG9wdGlvbgorCitXaGVuIGNyZWF0aW5nIGEgbmV3IHdpbmRvdyB0aGUgb3B0aW9uIHZhbHVlcyBmcm9tIHRoZSBjdXJyZW50bHkgYWN0aXZlIHdpbmRvdworYXJlIHVzZWQgYXMgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgd2luZG93LXNwZWNpZmljIG9wdGlvbnMuICBGb3IgdGhlCitidWZmZXItc3BlY2lmaWMgb3B0aW9ucyB0aGlzIGRlcGVuZHMgb24gdGhlICdzJyBhbmQgJ1MnIGZsYWdzIGluIHRoZQorJ2Nwb3B0aW9ucycgb3B0aW9uLiAgSWYgJ3MnIGlzIGluY2x1ZGVkICh3aGljaCBpcyB0aGUgZGVmYXVsdCkgdGhlIHZhbHVlcyBmb3IKK2J1ZmZlciBvcHRpb25zIGFyZSBjb3BpZWQgZnJvbSB0aGUgY3VycmVudGx5IGFjdGl2ZSBidWZmZXIgd2hlbiBhIGJ1ZmZlciBpcworZmlyc3QgZW50ZXJlZC4JSWYgJ1MnIGlzIHByZXNlbnQgdGhlIG9wdGlvbnMgYXJlIGNvcGllZCBlYWNoIHRpbWUgdGhlIGJ1ZmZlcgoraXMgZW50ZXJlZCwgdGhpcyBpcyBhbG1vc3QgbGlrZSBoYXZpbmcgZ2xvYmFsIG9wdGlvbnMuCUlmICdzJyBhbmQgJ1MnIGFyZSBub3QKK3ByZXNlbnQsIHRoZSBvcHRpb25zIGFyZSBjb3BpZWQgZnJvbSB0aGUgY3VycmVudGx5IGFjdGl2ZSBidWZmZXIgd2hlbiB0aGUKK2J1ZmZlciBpcyBjcmVhdGVkLgorCitOb3QgYWxsIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBpbiBhbGwgdmVyc2lvbnMuCVRvIHRlc3QgaWYgb3B0aW9uICJmb28iIGNhbiBiZQordXNlZCB3aXRoICI6c2V0IiB1c2UgImV4aXN0cygnJmZvbycpIi4JVGhpcyBkb2Vzbid0IG1lYW4gdGhlIHZhbHVlIGlzCithY3R1YWxseSByZW1lbWJlcmVkIGFuZCB3b3Jrcy4JU29tZSBvcHRpb25zIGFyZSBoaWRkZW4sIHdoaWNoIG1lYW5zIHRoYXQgeW91CitjYW4gc2V0IHRoZW0gYnV0IHRoZSB2YWx1ZSBpcyBub3QgcmVtZW1iZXJlZC4gIFRvIHRlc3QgaWYgb3B0aW9uICJmb28iIGlzCityZWFsbHkgc3VwcG9ydGVkIHVzZSAiZXhpc3RzKCcrZm9vJykiLgorCisJCQkJCQkJKkUzNTUqCitBIGp1bXAgdGFibGUgZm9yIHRoZSBvcHRpb25zIHdpdGggYSBzaG9ydCBkZXNjcmlwdGlvbiBjYW4gYmUgZm91bmQgYXQgfFFfb3B8LgorCisJCQkJCSonYWxlcGgnKiAqJ2FsJyogKmFsZXBoKiAqQWxlcGgqCisnYWxlcGgnICdhbCcJCW51bWJlcgkoZGVmYXVsdCAxMjggZm9yIE1TLURPUywgMjI0IG90aGVyd2lzZSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fAorCQkJZmVhdHVyZX0KKwlUaGUgQVNDSUkgY29kZSBmb3IgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgSGVicmV3IGFscGhhYmV0LiAgVGhlCisJcm91dGluZSB0aGF0IG1hcHMgdGhlIGtleWJvYXJkIGluIEhlYnJldyBtb2RlLCBib3RoIGluIEluc2VydCBtb2RlCisJKHdoZW4gaGttYXAgaXMgc2V0KSBhbmQgb24gdGhlIGNvbW1hbmQtbGluZSAod2hlbiBoaXR0aW5nIENUUkwtXykKKwlvdXRwdXRzIHRoZSBIZWJyZXcgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2FsZXBoLi5hbGVwaCsyNl0uCisJYWxlcGg9MTI4IGFwcGxpZXMgdG8gUEMgY29kZSwgYW5kIGFsZXBoPTIyNCBhcHBsaWVzIHRvIElTTyA4ODU5LTguCisJU2VlIHxyaWxlZnQudHh0fC4KKworCQkJKidhbGxvd3JldmlucycqIConYXJpJyogKidub2FsbG93cmV2aW5zJyogKidub2FyaScqCisnYWxsb3dyZXZpbnMnICdhcmknCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtyaWdodGxlZnR8CisJCQlmZWF0dXJlfQorCUFsbG93IENUUkwtXyBpbiBJbnNlcnQgYW5kIENvbW1hbmQtbGluZSBtb2RlLiAgVGhpcyBpcyBkZWZhdWx0IG9mZiwgdG8KKwlhdm9pZCB0aGF0IHVzZXJzIHRoYXQgYWNjaWRlbnRhbGx5IHR5cGUgQ1RSTC1fIGluc3RlYWQgb2YgU0hJRlQtXyBnZXQKKwlpbnRvIHJldmVyc2UgSW5zZXJ0IG1vZGUsIGFuZCBkb24ndCBrbm93IGhvdyB0byBnZXQgb3V0LiAgU2VlCisJJ3JldmlucycuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkgKidhbHRrZXltYXAnKiAqJ2FrbScqIConbm9hbHRrZXltYXAnKiAqJ25vYWttJyoKKydhbHRrZXltYXAnICdha20nCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtmYXJzaXwKKwkJCWZlYXR1cmV9CisJV2hlbiBvbiwgdGhlIHNlY29uZCBsYW5ndWFnZSBpcyBGYXJzaS4gSW4gZWRpdGluZyBtb2RlIENUUkwtXyB0b2dnbGVzCisJdGhlIGtleWJvYXJkIG1hcCBiZXR3ZWVuIEZhcnNpIGFuZCBFbmdsaXNoLCB3aGVuICdhbGxvd3Jldmlucycgc2V0LgorCisJV2hlbiBvZmYsIHRoZSBrZXlib2FyZCBtYXAgdG9nZ2xlcyBiZXR3ZWVuIEhlYnJldyBhbmQgRW5nbGlzaC4gVGhpcworCWlzIHVzZWZ1bCB0byBzdGFydCB0aGUgVmltIGluIG5hdGl2ZSBtb2RlIGkuZS4gRW5nbGlzaCAobGVmdC10by1yaWdodAorCW1vZGUpIGFuZCBoYXZlIGRlZmF1bHQgc2Vjb25kIGxhbmd1YWdlIEZhcnNpIG9yIEhlYnJldyAocmlnaHQtdG8tbGVmdAorCW1vZGUpLglTZWUgfGZhcnNpLnR4dHwuCisKKwkJCQkJCSonYW1iaXdpZHRoJyogKidhbWJ3JyoKKydhbWJpd2lkdGgnICdhbWJ3JwlzdHJpbmcgKGRlZmF1bHQ6ICJzaW5nbGUiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlfAorCQkJZmVhdHVyZX0KKwlPbmx5IGVmZmVjdGl2ZSB3aGVuICdlbmNvZGluZycgaXMgInV0Zi04IiBvciBhbm90aGVyIFVuaWNvZGUgZW5jb2RpbmcuCisJVGVsbHMgVmltIHdoYXQgdG8gZG8gd2l0aCBjaGFyYWN0ZXJzIHdpdGggRWFzdCBBc2lhbiBXaWR0aCBDbGFzcworCUFtYmlndW91cyAoc3VjaCBhcyBFdXJvLCBSZWdpc3RlcmVkIFNpZ24sIENvcHlyaWdodCBTaWduLCBHcmVlaworCWxldHRlcnMsIEN5cmlsbGljIGxldHRlcnMpLgorCisJVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gcG9zc2libGUgdmFsdWVzOgorCSJzaW5nbGUiOglVc2UgdGhlIHNhbWUgd2lkdGggYXMgY2hhcmFjdGVycyBpbiBVUy1BU0NJSS4gVGhpcyBpcworCQkJZXhwZWN0ZWQgYnkgbW9zdCB1c2Vycy4KKwkiZG91YmxlIjoJVXNlIHR3aWNlIHRoZSB3aWR0aCBvZiBBU0NJSSBjaGFyYWN0ZXJzLgorCisJVGhlcmUgYXJlIGEgbnVtYmVyIG9mIENKSyBmb250cyBmb3Igd2hpY2ggdGhlIHdpZHRoIG9mIGdseXBocyBmb3IKKwl0aG9zZSBjaGFyYWN0ZXJzIGFyZSBzb2xlbHkgYmFzZWQgb24gaG93IG1hbnkgb2N0ZXRzIHRoZXkgdGFrZSBpbgorCWxlZ2FjeS90cmFkaXRpb25hbCBDSksgZW5jb2RpbmdzLiAgSW4gdGhvc2UgZW5jb2RpbmdzLCBFdXJvLAorCVJlZ2lzdGVyZWQgc2lnbiwgR3JlZWsvQ3lyaWxsaWMgbGV0dGVycyBhcmUgcmVwcmVzZW50ZWQgYnkgdHdvIG9jdGV0cywKKwl0aGVyZWZvcmUgdGhvc2UgZm9udHMgaGF2ZSAid2lkZSIgZ2x5cGhzIGZvciB0aGVtLiBUaGlzIGlzIGFsc28KKwl0cnVlIG9mIHNvbWUgbGluZSBkcmF3aW5nIGNoYXJhY3RlcnMgdXNlZCB0byBtYWtlIHRhYmxlcyBpbiB0ZXh0CisJZmlsZS4gVGhlcmVmb3JlLCB3aGVuIGEgQ0pLIGZvbnQgaXMgdXNlZCBmb3IgR1VJIFZpbSBvcgorCVZpbSBpcyBydW5uaW5nIGluc2lkZSBhIHRlcm1pbmFsIChlbXVsYXRvcnMpIHRoYXQgdXNlcyBhIENKSyBmb250CisJKG9yIFZpbSBpcyBydW4gaW5zaWRlIGFuIHh0ZXJtIGludm9rZWQgd2l0aCAiLWNqa3dpZHRoIiBvcHRpb24uKSwKKwl0aGlzIG9wdGlvbiBzaG91bGQgYmUgc2V0IHRvICJkb3VibGUiIHRvIG1hdGNoIHRoZSB3aWR0aCBwZXJjZWl2ZWQKKwlieSBWaW0gd2l0aCB0aGUgd2lkdGggb2YgZ2x5cGhzIGluIHRoZSBmb250LiAgUGVyaGFwcyBpdCBhbHNvIGhhcworCXRvIGJlIHNldCB0byAiZG91YmxlIiB1bmRlciBDSksgV2luZG93cyA5eC9NRSBvciBXaW5kb3dzIDJrL1hQCisJd2hlbiB0aGUgc3lzdGVtIGxvY2FsZSBpcyBzZXQgdG8gb25lIG9mIENKSyBsb2NhbGVzLiAgU2VlIFVuaWNvZGUKKwlTdGFuZGFyZCBBbm5leCAjMTEgKGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjExKS4KKworCQkJKidhbnRpYWxpYXMnKiAqJ2FudGknKiAqJ25vYW50aWFsaWFzJyogKidub2FudGknKgorJ2FudGlhbGlhcycgJ2FudGknCWJvb2xlYW4gKGRlZmF1bHQ6IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggR1VJIGVuYWJsZWQKKwkJCW9uIE1hYyBPUyBYfQorCVRoaXMgb3B0aW9uIG9ubHkgaGFzIGFuIGVmZmVjdCBpbiB0aGUgR1VJIHZlcnNpb24gb2YgVmltIG9uIE1hYyBPUyBYCisJdjEwLjIgb3IgbGF0ZXIuICBXaGVuIG9uLCBWaW0gd2lsbCB1c2Ugc21vb3RoICgiYW50aWFsaWFzZWQiKSBmb250cywKKwl3aGljaCBjYW4gYmUgZWFzaWVyIHRvIHJlYWQgYXQgY2VydGFpbiBzaXplcyBvbiBjZXJ0YWluIGRpc3BsYXlzLgorCVNldHRpbmcgdGhpcyBvcHRpb24gY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcyBpZiAnZ3VpZm9udCcgaXMgc2V0CisJdG8gaXRzIGRlZmF1bHQgKGVtcHR5IHN0cmluZykuCisKKwkJCSonYXV0b2NoZGlyJyogKidhY2QnKiAqJ25vYXV0b2NoZGlyJyogKidub2FjZCcqCisnYXV0b2NoZGlyJyAnYWNkJwlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlCisJCQl8K25ldGJlYW5zX2ludGd8IG9yIHwrc3VuX3dvcmtzaG9wfCBmZWF0dXJlfQorCVdoZW4gb24sIFZpbSB3aWxsIGNoYW5nZSBpdHMgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisJd2hlbmV2ZXIgeW91IG9wZW4gYSBmaWxlLCBzd2l0Y2ggYnVmZmVycywgZGVsZXRlIGEgYnVmZmVyIG9yCisJb3Blbi9jbG9zZSBhIHdpbmRvdy4gSXQgd2lsbCBjaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorCWZpbGUgd2hpY2ggd2FzIG9wZW5lZCBvciBzZWxlY3RlZC4gIFRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkIGZvcgorCWJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgVmltIHJlbGVhc2VkIHdpdGggU3VuIE9ORSBTdHVkaW8gNAorCUVudGVycHJpc2UgRWRpdGlvbi4KKworCQkJCSonYXJhYmljJyogKidhcmFiJyogKidub2FyYWJpYycqIConbm9hcmFiJyoKKydhcmFiaWMnICdhcmFiJwkJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2FyYWJpY3wKKwkJCWZlYXR1cmV9CisJVGhpcyBvcHRpb24gY2FuIGJlIHNldCB0byBzdGFydCBlZGl0aW5nIEFyYWJpYyB0ZXh0LgorCVNldHRpbmcgdGhpcyBvcHRpb24gd2lsbDoKKwktIFNldCB0aGUgJ3JpZ2h0bGVmdCcgb3B0aW9uLCB1bmxlc3MgJ3Rlcm1iaWRpJyBpcyBzZXQuCisJLSBTZXQgdGhlICdhcmFiaWNzaGFwZScgb3B0aW9uLCB1bmxlc3MgJ3Rlcm1iaWRpJyBpcyBzZXQuCisJLSBTZXQgdGhlICdrZXltYXAnIG9wdGlvbiB0byAiYXJhYmljIjsgaW4gSW5zZXJ0IG1vZGUgQ1RSTC1eIHRvZ2dsZXMKKwkgIGJldHdlZW4gdHlwaW5nIEVuZ2xpc2ggYW5kIEFyYWJpYyBrZXkgbWFwcGluZy4KKwktIFNldCB0aGUgJ2RlbGNvbWJpbmUnIG9wdGlvbgorCU5vdGUgdGhhdCAnZW5jb2RpbmcnIG11c3QgYmUgInV0Zi04IiBmb3Igd29ya2luZyB3aXRoIEFyYWJpYyB0ZXh0LgorCisJUmVzZXR0aW5nIHRoaXMgb3B0aW9uIHdpbGw6CisJLSBSZXNldCB0aGUgJ3JpZ2h0bGVmdCcgb3B0aW9uLgorCS0gRGlzYWJsZSB0aGUgdXNlIG9mICdrZXltYXAnICh3aXRob3V0IGNoYW5naW5nIGl0cyB2YWx1ZSkuCisJTm90ZSB0aGF0ICdhcmFiaWNzaGFwZScgYW5kICdkZWxjb21iaW5lJyBhcmUgbm90IHJlc2V0IChpdCBpcyBhIGdsb2JhbAorCW9wdGlvbi4KKwlBbHNvIHNlZSB8YXJhYmljLnR4dHwuCisKKwkJCQkJKidhcmFiaWNzaGFwZScqIConYXJzaGFwZScqCisJCQkJCSonbm9hcmFiaWNzaGFwZScqIConbm9hcnNoYXBlJyoKKydhcmFiaWNzaGFwZScgJ2Fyc2hhcGUnCWJvb2xlYW4gKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2FyYWJpY3wKKwkJCWZlYXR1cmV9CisJV2hlbiBvbiBhbmQgJ3Rlcm1iaWRpJyBpcyBvZmYsIHRoZSByZXF1aXJlZCB2aXN1YWwgY2hhcmFjdGVyCisJY29ycmVjdGlvbnMgdGhhdCBuZWVkIHRvIHRha2UgcGxhY2UgZm9yIGRpc3BsYXlpbmcgdGhlIEFyYWJpYyBsYW5ndWFnZQorCXRha2UgYWZmZWN0LiAgU2hhcGluZywgaW4gZXNzZW5jZSwgZ2V0cyBlbmFibGVkOyB0aGUgdGVybSBpcyBhIGJyb2FkCisJb25lIHdoaWNoIGVuY29tcGFzc2VzOgorCSAgYSkgdGhlIGNoYW5naW5nL21vcnBoaW5nIG9mIGNoYXJhY3RlcnMgYmFzZWQgb24gdGhlaXIgbG9jYXRpb24KKwkgICAgIHdpdGhpbiBhIHdvcmQgKGluaXRpYWwsIG1lZGlhbCwgZmluYWwgYW5kIHN0YW5kLWFsb25lKS4KKwkgIGIpIHRoZSBlbmFibGluZyBvZiB0aGUgYWJpbGl0eSB0byBjb21wb3NlIGNoYXJhY3RlcnMKKwkgIGMpIHRoZSBlbmFibGluZyBvZiB0aGUgcmVxdWlyZWQgY29tYmluaW5nIG9mIHNvbWUgY2hhcmFjdGVycworCVdoZW4gZGlzYWJsZWQgdGhlIGNoYXJhY3RlciBkaXNwbGF5IHJldmVydHMgYmFjayB0byBlYWNoIGNoYXJhY3RlcidzCisJdHJ1ZSBzdGFuZC1hbG9uZSBmb3JtLgorCUFyYWJpYyBpcyBhIGNvbXBsZXggbGFuZ3VhZ2Ugd2hpY2ggcmVxdWlyZXMgb3RoZXIgc2V0dGluZ3MsIGZvcgorCWZ1cnRoZXIgZGV0YWlscyBzZWUgfGFyYWJpYy50eHR8LgorCisJCQkqJ2F1dG9pbmRlbnQnKiAqJ2FpJyogKidub2F1dG9pbmRlbnQnKiAqJ25vYWknKgorJ2F1dG9pbmRlbnQnICdhaScJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwlDb3B5IGluZGVudCBmcm9tIGN1cnJlbnQgbGluZSB3aGVuIHN0YXJ0aW5nIGEgbmV3IGxpbmUgKHR5cGluZyA8Q1I+CisJaW4gSW5zZXJ0IG1vZGUgb3Igd2hlbiB1c2luZyB0aGUgIm8iIG9yICJPIiBjb21tYW5kKS4gIElmIHlvdSBkbyBub3QKKwl0eXBlIGFueXRoaW5nIG9uIHRoZSBuZXcgbGluZSBleGNlcHQgPEJTPiBvciBDVFJMLUQgYW5kIHRoZW4gdHlwZQorCTxFc2M+IG9yIDxDUj4sIHRoZSBpbmRlbnQgaXMgZGVsZXRlZCBhZ2Fpbi4gIFdoZW4gYXV0b2luZGVudCBpcyBvbiwKKwlmb3JtYXR0aW5nICh3aXRoIHRoZSAiZ3EiIGNvbW1hbmQgb3Igd2hlbiB5b3UgcmVhY2ggJ3RleHR3aWR0aCcgaW4KKwlJbnNlcnQgbW9kZSkgdXNlcyB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGZpcnN0IGxpbmUuCisJV2hlbiAnc21hcnRpbmRlbnQnIG9yICdjaW5kZW50JyBpcyBvbiB0aGUgaW5kZW50IGlzIGNoYW5nZWQgaW4KKwlhIGRpZmZlcmVudCB3YXkuCisJVGhlICdhdXRvaW5kZW50JyBvcHRpb24gaXMgcmVzZXQgd2hlbiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMgc2V0LgorCXtzbWFsbCBkaWZmZXJlbmNlIGZyb20gVmk6IEFmdGVyIHRoZSBpbmRlbnQgaXMgZGVsZXRlZCB3aGVuIHR5cGluZworCTxFc2M+IG9yIDxDUj4sIHRoZSBjdXJzb3IgcG9zaXRpb24gd2hlbiBtb3ZpbmcgdXAgb3IgZG93biBpcyBhZnRlciB0aGUKKwlkZWxldGVkIGluZGVudDsgVmkgcHV0cyB0aGUgY3Vyc29yIHNvbWV3aGVyZSBpbiB0aGUgZGVsZXRlZCBpbmRlbnR9LgorCisJCQkJIConYXV0b3JlYWQnKiAqJ2FyJyogKidub2F1dG9yZWFkJyogKidub2FyJyoKKydhdXRvcmVhZCcgJ2FyJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCVdoZW4gYSBmaWxlIGhhcyBiZWVuIGRldGVjdGVkIHRvIGhhdmUgYmVlbiBjaGFuZ2VkIG91dHNpZGUgb2YgVmltIGFuZAorCWl0IGhhcyBub3QgYmVlbiBjaGFuZ2VkIGluc2lkZSBvZiBWaW0sIGF1dG9tYXRpY2FsbHkgcmVhZCBpdCBhZ2Fpbi4KKwlXaGVuIHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQgdGhpcyBpcyBub3QgZG9uZS4gIHx0aW1lc3RhbXB8CisJSWYgdGhpcyBvcHRpb24gaGFzIGEgbG9jYWwgdmFsdWUsIHVzZSB0aGlzIGNvbW1hbmQgdG8gc3dpdGNoIGJhY2sgdG8KKwl1c2luZyB0aGUgZ2xvYmFsIHZhbHVlOiA+CisJCTpzZXQgYXV0b3JlYWQ8Cis8CisJCQkJIConYXV0b3dyaXRlJyogKidhdycqIConbm9hdXRvd3JpdGUnKiAqJ25vYXcnKgorJ2F1dG93cml0ZScgJ2F3Jwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCVdyaXRlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSwgaWYgaXQgaGFzIGJlZW4gbW9kaWZpZWQsIG9uIGVhY2gKKwk6bmV4dCwgOnJld2luZCwgOmxhc3QsIDpmaXJzdCwgOnByZXZpb3VzLCA6c3RvcCwgOnN1c3BlbmQsIDp0YWcsIDohLAorCTptYWtlLCBDVFJMLV0gYW5kIENUUkwtXiBjb21tYW5kOyBhbmQgd2hlbiBhIENUUkwtTywgQ1RSTC1JLAorCSd7QS1aMC05fSwgb3IgYHtBLVowLTl9IGNvbW1hbmQgdGFrZXMgb25lIHRvIGFub3RoZXIgZmlsZS4KKwlOb3RlIHRoYXQgZm9yIHNvbWUgY29tbWFuZHMgdGhlICdhdXRvd3JpdGUnIG9wdGlvbiBpcyBub3QgdXNlZCwgc2VlCisJJ2F1dG93cml0ZWFsbCcgZm9yIHRoYXQuCisKKwkJCSAqJ2F1dG93cml0ZWFsbCcqIConYXdhJyogKidub2F1dG93cml0ZWFsbCcqIConbm9hd2EnKgorJ2F1dG93cml0ZWFsbCcgJ2F3YScJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTGlrZSAnYXV0b3dyaXRlJywgYnV0IGFsc28gdXNlZCBmb3IgY29tbWFuZHMgIjplZGl0IiwgIjplbmV3IiwgIjpxdWl0IiwKKwkiOnFhbGwiLCAiOmV4aXQiLCAiOnhpdCIsICI6cmVjb3ZlciIgYW5kIGNsb3NpbmcgdGhlIFZpbSB3aW5kb3cuCisJU2V0dGluZyB0aGlzIG9wdGlvbiBhbHNvIGltcGxpZXMgdGhhdCBWaW0gYmVoYXZlcyBsaWtlICdhdXRvd3JpdGUnIGhhcworCWJlZW4gc2V0LgorCisJCQkJCQkJKidiYWNrZ3JvdW5kJyogKidiZycqCisnYmFja2dyb3VuZCcgJ2JnJwlzdHJpbmcJKGRlZmF1bHQgImRhcmsiIG9yICJsaWdodCIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBzZXQgdG8gImRhcmsiLCBWaW0gd2lsbCB0cnkgdG8gdXNlIGNvbG9ycyB0aGF0IGxvb2sgZ29vZCBvbiBhCisJZGFyayBiYWNrZ3JvdW5kLiAgV2hlbiBzZXQgdG8gImxpZ2h0IiwgVmltIHdpbGwgdHJ5IHRvIHVzZSBjb2xvcnMgdGhhdAorCWxvb2sgZ29vZCBvbiBhIGxpZ2h0IGJhY2tncm91bmQuICBBbnkgb3RoZXIgdmFsdWUgaXMgaWxsZWdhbC4KKwlWaW0gdHJpZXMgdG8gc2V0IHRoZSBkZWZhdWx0IHZhbHVlIGFjY29yZGluZyB0byB0aGUgdGVybWluYWwgdXNlZC4KKwlUaGlzIHdpbGwgbm90IGFsd2F5cyBiZSBjb3JyZWN0LgorCVNldHRpbmcgdGhpcyBvcHRpb24gZG9lcyBub3QgY2hhbmdlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLCBpdCB0ZWxscyBWaW0KKwl3aGF0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGxvb2tzIGxpa2UuICBGb3IgY2hhbmdpbmcgdGhlIGJhY2tncm91bmQKKwljb2xvciwgc2VlIHw6aGktbm9ybWFsfC4KKworCVdoZW4gJ2JhY2tncm91bmQnIGlzIHNldCBWaW0gd2lsbCBhZGp1c3QgdGhlIGRlZmF1bHQgY29sb3IgZ3JvdXBzIGZvcgorCXRoZSBuZXcgdmFsdWUuCUJ1dCB0aGUgY29sb3JzIHVzZWQgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcgd2lsbCBub3QKKwljaGFuZ2UuCisJV2hlbiBhIGNvbG9yIHNjaGVtZSBpcyBsb2FkZWQgKHRoZSAiY29sb3JzX25hbWUiIHZhcmlhYmxlIGlzIHNldCkKKwlzZXR0aW5nICdiYWNrZ3JvdW5kJyB3aWxsIGNhdXNlIHRoZSBjb2xvciBzY2hlbWUgdG8gYmUgcmVsb2FkZWQuICBJZgorCXRoZSBjb2xvciBzY2hlbWUgYWRqdXN0cyB0byB0aGUgdmFsdWUgb2YgJ2JhY2tncm91bmQnIHRoaXMgd2lsbCB3b3JrLgorCUhvd2V2ZXIsIGlmIHRoZSBjb2xvciBzY2hlbWUgc2V0cyAnYmFja2dyb3VuZCcgaXRzZWxmIHRoZSBlZmZlY3QgbWF5CisJYmUgdW5kb25lLiAgRmlyc3QgZGVsZXRlIHRoZSAiY29sb3JzX25hbWUiIHZhcmlhYmxlIHdoZW4gbmVlZGVkLgorCisJV2hlbiBzZXR0aW5nICdiYWNrZ3JvdW5kJyB0byB0aGUgZGVmYXVsdCB2YWx1ZSB3aXRoOiA+CisJCTpzZXQgYmFja2dyb3VuZCYKKzwJVmltIHdpbGwgZ3Vlc3MgdGhlIHZhbHVlLiAgSW4gdGhlIEdVSSB0aGlzIHNob3VsZCB3b3JrIGNvcnJlY3RseSwKKwlpbiBvdGhlciBjYXNlcyBWaW0gbWlnaHQgbm90IGJlIGFibGUgdG8gZ3Vlc3MgdGhlIHJpZ2h0IHZhbHVlLgorCisJV2hlbiBzdGFydGluZyB0aGUgR1VJLCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgJ2JhY2tncm91bmQnIHdpbGwgYmUKKwkibGlnaHQiLiAgV2hlbiB0aGUgdmFsdWUgaXMgbm90IHNldCBpbiB0aGUgLmd2aW1yYywgYW5kIFZpbSBkZXRlY3RzCisJdGhhdCB0aGUgYmFja2dyb3VuZCBpcyBhY3R1YWxseSBxdWl0ZSBkYXJrLCAnYmFja2dyb3VuZCcgaXMgc2V0IHRvCisJImRhcmsiLiAgQnV0IHRoaXMgaGFwcGVucyBvbmx5IEFGVEVSIHRoZSAuZ3ZpbXJjIGZpbGUgaGFzIGJlZW4gcmVhZAorCShiZWNhdXNlIHRoZSB3aW5kb3cgbmVlZHMgdG8gYmUgb3BlbmVkIHRvIGZpbmQgdGhlIGFjdHVhbCBiYWNrZ3JvdW5kCisJY29sb3IpLiAgVG8gZ2V0IGFyb3VuZCB0aGlzLCBmb3JjZSB0aGUgR1VJIHdpbmRvdyB0byBiZSBvcGVuZWQgYnkKKwlwdXR0aW5nIGEgIjpndWkiIGNvbW1hbmQgaW4gdGhlIC5ndmltcmMgZmlsZSwgYmVmb3JlIHdoZXJlIHRoZSB2YWx1ZQorCW9mICdiYWNrZ3JvdW5kJyBpcyB1c2VkIChlLmcuLCBiZWZvcmUgIjpzeW50YXggb24iKS4KKwlOb3JtYWxseSB0aGlzIG9wdGlvbiB3b3VsZCBiZSBzZXQgaW4gdGhlIC52aW1yYyBmaWxlLiAgUG9zc2libHkKKwlkZXBlbmRpbmcgb24gdGhlIHRlcm1pbmFsIG5hbWUuICBFeGFtcGxlOiA+CisJCTppZiAmdGVybSA9PSAicGN0ZXJtIgorCQk6ICBzZXQgYmFja2dyb3VuZD1kYXJrCisJCTplbmRpZgorPAlXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBoaWdobGlnaHQgZ3JvdXBzCisJd2lsbCBjaGFuZ2UuICBUbyB1c2Ugb3RoZXIgc2V0dGluZ3MsIHBsYWNlICI6aGlnaGxpZ2h0IiBjb21tYW5kcyBBRlRFUgorCXRoZSBzZXR0aW5nIG9mIHRoZSAnYmFja2dyb3VuZCcgb3B0aW9uLgorCVRoaXMgb3B0aW9uIGlzIGFsc28gdXNlZCBpbiB0aGUgIiRWSU1SVU5USU1FL3N5bnRheC9zeW50YXgudmltIiBmaWxlCisJdG8gc2VsZWN0IHRoZSBjb2xvcnMgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcuICBBZnRlciBjaGFuZ2luZyB0aGlzCisJb3B0aW9uLCB5b3UgbXVzdCBsb2FkIHN5bnRheC52aW0gYWdhaW4gdG8gc2VlIHRoZSByZXN1bHQuICBUaGlzIGNhbiBiZQorCWRvbmUgd2l0aCAiOnN5bnRheCBvbiIuCisKKwkJCQkJCQkqJ2JhY2tzcGFjZScqIConYnMnKgorJ2JhY2tzcGFjZScgJ2JzJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJSW5mbHVlbmNlcyB0aGUgd29ya2luZyBvZiA8QlM+LCA8RGVsPiwgQ1RSTC1XIGFuZCBDVFJMLVUgaW4gSW5zZXJ0CisJbW9kZS4gIFRoaXMgaXMgYSBsaXN0IG9mIGl0ZW1zLCBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgRWFjaCBpdGVtIGFsbG93cworCWEgd2F5IHRvIGJhY2tzcGFjZSBvdmVyIHNvbWV0aGluZzoKKwl2YWx1ZQllZmZlY3QJfgorCWluZGVudAlhbGxvdyBiYWNrc3BhY2luZyBvdmVyIGF1dG9pbmRlbnQKKwllb2wJYWxsb3cgYmFja3NwYWNpbmcgb3ZlciBsaW5lIGJyZWFrcyAoam9pbiBsaW5lcykKKwlzdGFydAlhbGxvdyBiYWNrc3BhY2luZyBvdmVyIHRoZSBzdGFydCBvZiBpbnNlcnQ7IENUUkwtVyBhbmQgQ1RSTC1VCisJCXN0b3Agb25jZSBhdCB0aGUgc3RhcnQgb2YgaW5zZXJ0LgorCisJV2hlbiB0aGUgdmFsdWUgaXMgZW1wdHksIFZpIGNvbXBhdGlibGUgYmFja3NwYWNpbmcgaXMgdXNlZC4KKworCUZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb24gNS40IGFuZCBlYXJsaWVyOgorCXZhbHVlCWVmZmVjdAl+CisJICAwCXNhbWUgYXMgIjpzZXQgYmFja3NwYWNlPSIgKFZpIGNvbXBhdGlibGUpCisJICAxCXNhbWUgYXMgIjpzZXQgYmFja3NwYWNlPWluZGVudCxlb2wiCisJICAyCXNhbWUgYXMgIjpzZXQgYmFja3NwYWNlPWluZGVudCxlb2wsc3RhcnQiCisKKwlTZWUgfDpmaXhkZWx8IGlmIHlvdXIgPEJTPiBvciA8RGVsPiBrZXkgZG9lcyBub3QgZG8gd2hhdCB5b3Ugd2FudC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gIiIgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJKidiYWNrdXAnKiAqJ2JrJyogKidub2JhY2t1cCcqIConbm9iaycqCisnYmFja3VwJyAnYmsnCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlNYWtlIGEgYmFja3VwIGJlZm9yZSBvdmVyd3JpdGluZyBhIGZpbGUuICBMZWF2ZSBpdCBhcm91bmQgYWZ0ZXIgdGhlCisJZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbi4gIElmIHlvdSBkbyBub3Qgd2FudCB0byBrZWVwIHRoZQorCWJhY2t1cCBmaWxlLCBidXQgeW91IGRvIHdhbnQgYSBiYWNrdXAgd2hpbGUgdGhlIGZpbGUgaXMgYmVpbmcKKwl3cml0dGVuLCByZXNldCB0aGlzIG9wdGlvbiBhbmQgc2V0IHRoZSAnd3JpdGViYWNrdXAnIG9wdGlvbiAodGhpcyBpcworCXRoZSBkZWZhdWx0KS4gIElmIHlvdSBkbyBub3Qgd2FudCBhIGJhY2t1cCBmaWxlIGF0IGFsbCByZXNldCBib3RoCisJb3B0aW9ucyAodXNlIHRoaXMgaWYgeW91ciBmaWxlIHN5c3RlbSBpcyBhbG1vc3QgZnVsbCkuCVNlZSB0aGUKKwl8YmFja3VwLXRhYmxlfCBmb3IgbW9yZSBleHBsYW5hdGlvbnMuCisJV2hlbiB0aGUgJ2JhY2t1cHNraXAnIHBhdHRlcm4gbWF0Y2hlcywgYSBiYWNrdXAgaXMgbm90IG1hZGUgYW55d2F5LgorCVdoZW4gJ3BhdGNobW9kZScgaXMgc2V0LCB0aGUgYmFja3VwIG1heSBiZSByZW5hbWVkIHRvIGJlY29tZSB0aGUKKwlvbGRlc3QgdmVyc2lvbiBvZiBhIGZpbGUuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ2JhY2t1cGNvcHknKiAqJ2JrYycqCisnYmFja3VwY29weScgJ2JrYycJc3RyaW5nCShWaSBkZWZhdWx0IGZvciBVbml4OiAieWVzIiwgb3RoZXJ3aXNlOiAiYXV0byIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiB3cml0aW5nIGEgZmlsZSBhbmQgYSBiYWNrdXAgaXMgbWFkZSwgdGhpcyBvcHRpb24gdGVsbHMgaG93IGl0J3MKKwlkb25lLiAgVGhpcyBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHdvcmRzLgorCisJVGhlIG1haW4gdmFsdWVzIGFyZToKKwkieWVzIgltYWtlIGEgY29weSBvZiB0aGUgZmlsZSBhbmQgb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBvbmUKKwkibm8iCXJlbmFtZSB0aGUgZmlsZSBhbmQgd3JpdGUgYSBuZXcgb25lCisJImF1dG8iCW9uZSBvZiB0aGUgcHJldmlvdXMsIHdoYXQgd29ya3MgYmVzdAorCisJRXh0cmEgdmFsdWVzIHRoYXQgY2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlIG9uZXMgYWJvdmUgYXJlOgorCSJicmVha3N5bWxpbmsiCWFsd2F5cyBicmVhayBzeW1saW5rcyB3aGVuIHdyaXRpbmcKKwkiYnJlYWtoYXJkbGluayIJYWx3YXlzIGJyZWFrIGhhcmRsaW5rcyB3aGVuIHdyaXRpbmcKKworCU1ha2luZyBhIGNvcHkgYW5kIG92ZXJ3cml0aW5nIHRoZSBvcmlnaW5hbCBmaWxlOgorCS0gVGFrZXMgZXh0cmEgdGltZSB0byBjb3B5IHRoZSBmaWxlLgorCSsgV2hlbiB0aGUgZmlsZSBoYXMgc3BlY2lhbCBhdHRyaWJ1dGVzLCBpcyBhIChoYXJkL3N5bWJvbGljKSBsaW5rIG9yCisJICBoYXMgYSByZXNvdXJjZSBmb3JrLCBhbGwgdGhpcyBpcyBwcmVzZXJ2ZWQuCisJLSBXaGVuIHRoZSBmaWxlIGlzIGEgbGluayB0aGUgYmFja3VwIHdpbGwgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgbGluaywKKwkgIG5vdCBvZiB0aGUgcmVhbCBmaWxlLgorCisJUmVuYW1pbmcgdGhlIGZpbGUgYW5kIHdyaXRpbmcgYSBuZXcgb25lOgorCSsgSXQncyBmYXN0LgorCS0gU29tZXRpbWVzIG5vdCBhbGwgYXR0cmlidXRlcyBvZiB0aGUgZmlsZSBjYW4gYmUgY29waWVkIHRvIHRoZSBuZXcKKwkgIGZpbGUuCisJLSBXaGVuIHRoZSBmaWxlIGlzIGEgbGluayB0aGUgbmV3IGZpbGUgd2lsbCBub3QgYmUgYSBsaW5rLgorCisJVGhlICJhdXRvIiB2YWx1ZSBpcyB0aGUgbWlkZGxlIHdheTogV2hlbiBWaW0gc2VlcyB0aGF0IHJlbmFtaW5nIGZpbGUKKwlpcyBwb3NzaWJsZSB3aXRob3V0IHNpZGUgZWZmZWN0cyAodGhlIGF0dHJpYnV0ZXMgY2FuIGJlIHBhc3NlZCBvbiBhbmQKKwlhbmQgdGhlIGZpbGUgaXMgbm90IGEgbGluaykgdGhhdCBpcyB1c2VkLiAgV2hlbiBwcm9ibGVtcyBhcmUgZXhwZWN0ZWQsCisJYSBjb3B5IHdpbGwgYmUgbWFkZS4KKworCVRoZSAiYnJlYWtzeW1saW5rIiBhbmQgImJyZWFraGFyZGxpbmsiIHZhbHVlcyBjYW4gYmUgdXNlZCBpbgorCWNvbWJpbmF0aW9uIHdpdGggYW55IG9mICJ5ZXMiLCAibm8iIGFuZCAiYXV0byIuICBXaGVuIGluY2x1ZGVkLCB0aGV5CisJZm9yY2UgVmltIHRvIGFsd2F5cyBicmVhayBlaXRoZXIgc3ltYm9saWMgb3IgaGFyZCBsaW5rcyBieSBkb2luZworCWV4YWN0bHkgd2hhdCB0aGUgIm5vIiBvcHRpb24gZG9lcywgcmVuYW1pbmcgdGhlIG9yaWdpbmFsIGZpbGUgdG8KKwliZWNvbWUgdGhlIGJhY2t1cCBhbmQgd3JpdGluZyBhIG5ldyBmaWxlIGluIGl0cyBwbGFjZS4gIFRoaXMgY2FuIGJlCisJdXNlZnVsIGZvciBleGFtcGxlIGluIHNvdXJjZSB0cmVlcyB3aGVyZSBhbGwgdGhlIGZpbGVzIGFyZSBzeW1ib2xpYyBvcgorCWhhcmQgbGlua3MgYW5kIGFueSBjaGFuZ2VzIHNob3VsZCBzdGF5IGluIHRoZSBsb2NhbCBzb3VyY2UgdHJlZSwgbm90CisJYmUgcHJvcGFnYXRlZCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UuCisJCQkJCQkJKmNyb250YWIqCisJT25lIHNpdHVhdGlvbiB3aGVyZSAibm8iIGFuZCAiYXV0byIgd2lsbCBjYXVzZSBwcm9ibGVtczogQSBwcm9ncmFtCisJdGhhdCBvcGVucyBhIGZpbGUsIGludm9rZXMgVmltIHRvIGVkaXQgdGhhdCBmaWxlLCBhbmQgdGhlbiB0ZXN0cyBpZgorCXRoZSBvcGVuIGZpbGUgd2FzIGNoYW5nZWQgKHRocm91Z2ggdGhlIGZpbGUgZGVzY3JpcHRvcikgd2lsbCBjaGVjayB0aGUKKwliYWNrdXAgZmlsZSBpbnN0ZWFkIG9mIHRoZSBuZXdseSBjcmVhdGVkIGZpbGUuCSJjcm9udGFiIC1lIiBpcyBhbgorCWV4YW1wbGUuCisKKwlXaGVuIGEgY29weSBpcyBtYWRlLCB0aGUgb3JpZ2luYWwgZmlsZSBpcyB0cnVuY2F0ZWQgYW5kIHRoZW4gZmlsbGVkCisJd2l0aCB0aGUgbmV3IHRleHQuICBUaGlzIG1lYW5zIHRoYXQgcHJvdGVjdGlvbiBiaXRzLCBvd25lciBhbmQKKwlzeW1ib2xpYyBsaW5rcyBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcmUgdW5tb2RpZmllZC4gIFRoZSBiYWNrdXAgZmlsZQorCWhvd2V2ZXIsIGlzIGEgbmV3IGZpbGUsIG93bmVkIGJ5IHRoZSB1c2VyIHdobyBlZGl0ZWQgdGhlIGZpbGUuCVRoZQorCWdyb3VwIG9mIHRoZSBiYWNrdXAgaXMgc2V0IHRvIHRoZSBncm91cCBvZiB0aGUgb3JpZ2luYWwgZmlsZS4gIElmIHRoaXMKKwlmYWlscywgdGhlIHByb3RlY3Rpb24gYml0cyBmb3IgdGhlIGdyb3VwIGFyZSBtYWRlIHRoZSBzYW1lIGFzIGZvcgorCW90aGVycy4KKworCVdoZW4gdGhlIGZpbGUgaXMgcmVuYW1lZCB0aGlzIGlzIHRoZSBvdGhlciB3YXkgYXJvdW5kOiBUaGUgYmFja3VwIGhhcworCXRoZSBzYW1lIGF0dHJpYnV0ZXMgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB0aGUgbmV3bHkgd3JpdHRlbiBmaWxlCisJaXMgb3duZWQgYnkgdGhlIGN1cnJlbnQgdXNlci4gIFdoZW4gdGhlIGZpbGUgd2FzIGEgKGhhcmQvc3ltYm9saWMpCisJbGluaywgdGhlIG5ldyBmaWxlIHdpbGwgbm90ISAgVGhhdCdzIHdoeSB0aGUgImF1dG8iIHZhbHVlIGRvZXNuJ3QKKwlyZW5hbWUgd2hlbiB0aGUgZmlsZSBpcyBhIGxpbmsuICBUaGUgb3duZXIgYW5kIGdyb3VwIG9mIHRoZSBuZXdseQorCXdyaXR0ZW4gZmlsZSB3aWxsIGJlIHNldCB0byB0aGUgc2FtZSBvbmVzIGFzIHRoZSBvcmlnaW5hbCBmaWxlLCBidXQKKwl0aGUgc3lzdGVtIG1heSByZWZ1c2UgdG8gZG8gdGhpcy4gIEluIHRoYXQgY2FzZSB0aGUgImF1dG8iIHZhbHVlIHdpbGwKKwlhZ2FpbiBub3QgcmVuYW1lIHRoZSBmaWxlLgorCisJCQkJCQkqJ2JhY2t1cGRpcicqIConYmRpcicqCisnYmFja3VwZGlyJyAnYmRpcicJc3RyaW5nCShkZWZhdWx0IGZvciBBbWlnYTogIi4sdDoiLAorCQkJCSBmb3IgTVMtRE9TIGFuZCBXaW4zMjogIi4sYzovdG1wLGM6L3RlbXAiCisJCQkJIGZvciBVbml4OiAiLix+L3RtcCx+LyIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTGlzdCBvZiBkaXJlY3RvcmllcyBmb3IgdGhlIGJhY2t1cCBmaWxlLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMuCisJLSBUaGUgYmFja3VwIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBmaXJzdCBkaXJlY3RvcnkgaW4gdGhlIGxpc3QKKwkgIHdoZXJlIHRoaXMgaXMgcG9zc2libGUuCisJLSBFbXB0eSBtZWFucyB0aGF0IG5vIGJhY2t1cCBmaWxlIHdpbGwgYmUgY3JlYXRlZCAoJ3BhdGNobW9kZScgaXMKKwkgIGltcG9zc2libGUhKS4gIFdyaXRpbmcgbWF5IGZhaWwgYmVjYXVzZSBvZiB0aGlzLgorCS0gQSBkaXJlY3RvcnkgIi4iIG1lYW5zIHRvIHB1dCB0aGUgYmFja3VwIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5CisJICBhcyB0aGUgZWRpdGVkIGZpbGUuCisJLSBBIGRpcmVjdG9yeSBzdGFydGluZyB3aXRoICIuLyIgKG9yICIuXCIgZm9yIE1TLURPUyBldC5hbC4pIG1lYW5zIHRvCisJICBwdXQgdGhlIGJhY2t1cCBmaWxlIHJlbGF0aXZlIHRvIHdoZXJlIHRoZSBlZGl0ZWQgZmlsZSBpcy4gIFRoZQorCSAgbGVhZGluZyAiLiIgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcGF0aCBuYW1lIG9mIHRoZSBlZGl0ZWQgZmlsZS4KKwkgICgiLiIgaW5zaWRlIGEgZGlyZWN0b3J5IG5hbWUgaGFzIG5vIHNwZWNpYWwgbWVhbmluZykuCisJLSBTcGFjZXMgYWZ0ZXIgdGhlIGNvbW1hIGFyZSBpZ25vcmVkLCBvdGhlciBzcGFjZXMgYXJlIGNvbnNpZGVyZWQgcGFydAorCSAgb2YgdGhlIGRpcmVjdG9yeSBuYW1lLiAgVG8gaGF2ZSBhIHNwYWNlIGF0IHRoZSBzdGFydCBvZiBhIGRpcmVjdG9yeQorCSAgbmFtZSwgcHJlY2VkZSBpdCB3aXRoIGEgYmFja3NsYXNoLgorCS0gVG8gaW5jbHVkZSBhIGNvbW1hIGluIGEgZGlyZWN0b3J5IG5hbWUgcHJlY2VkZSBpdCB3aXRoIGEgYmFja3NsYXNoLgorCS0gQSBkaXJlY3RvcnkgbmFtZSBtYXkgZW5kIGluIGFuICcvJy4KKwktIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4KKwktIENhcmVmdWwgd2l0aCAnXCcgY2hhcmFjdGVycywgdHlwZSBvbmUgYmVmb3JlIGEgc3BhY2UsIHR5cGUgdHdvIHRvCisJICBnZXQgb25lIGluIHRoZSBvcHRpb24gKHNlZSB8b3B0aW9uLWJhY2tzbGFzaHwpLCBmb3IgZXhhbXBsZTogPgorCSAgICA6c2V0IGJkaXI9YzpcXHRtcCxcIGRpclxcLHdpdGhcXCxjb21tYXMsXFxcIGRpclwgd2l0aFwgc3BhY2VzCis8CS0gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggVmltIHZlcnNpb24gMy4wIGEgJz4nIGF0IHRoZSBzdGFydAorCSAgb2YgdGhlIG9wdGlvbiBpcyByZW1vdmVkLgorCVNlZSBhbHNvICdiYWNrdXAnIGFuZCAnd3JpdGViYWNrdXAnIG9wdGlvbnMuCisJSWYgeW91IHdhbnQgdG8gaGlkZSB5b3VyIGJhY2t1cCBmaWxlcyBvbiBVbml4LCBjb25zaWRlciB0aGlzIHZhbHVlOiA+CisJCTpzZXQgYmFja3VwZGlyPS4vLmJhY2t1cCx+Ly5iYWNrdXAsLiwvdG1wCis8CVlvdSBtdXN0IGNyZWF0ZSBhICIuYmFja3VwIiBkaXJlY3RvcnkgaW4gZWFjaCBkaXJlY3RvcnkgYW5kIGluIHlvdXIKKwlob21lIGRpcmVjdG9yeSBmb3IgdGhpcyB0byB3b3JrIHByb3Blcmx5LgorCVRoZSB1c2Ugb2YgfDpzZXQrPXwgYW5kIHw6c2V0LT18IGlzIHByZWZlcnJlZCB3aGVuIGFkZGluZyBvciByZW1vdmluZworCWRpcmVjdG9yaWVzIGZyb20gdGhlIGxpc3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIGEgZnV0dXJlIHZlcnNpb24KKwl1c2VzIGFub3RoZXIgZGVmYXVsdC4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonYmFja3VwZXh0JyogKidiZXgnKiAqRTU4OSoKKydiYWNrdXBleHQnICdiZXgnCXN0cmluZwkoZGVmYXVsdCAifiIsIGZvciBWTVM6ICJfIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlTdHJpbmcgd2hpY2ggaXMgYXBwZW5kZWQgdG8gYSBmaWxlIG5hbWUgdG8gbWFrZSB0aGUgbmFtZSBvZiB0aGUKKwliYWNrdXAgZmlsZS4gIFRoZSBkZWZhdWx0IGlzIHF1aXRlIHVudXN1YWwsIGJlY2F1c2UgdGhpcyBhdm9pZHMKKwlhY2NpZGVudGFsbHkgb3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXMgd2l0aCBhIGJhY2t1cCBmaWxlLiAgWW91IG1pZ2h0CisJcHJlZmVyIHVzaW5nICIuYmFrIiwgYnV0IG1ha2Ugc3VyZSB0aGF0IHlvdSBkb24ndCBoYXZlIGZpbGVzIHdpdGgKKwkiLmJhayIgdGhhdCB5b3Ugd2FudCB0byBrZWVwLgorCisJCQkJCQkqJ2JhY2t1cHNraXAnKiAqJ2JzaycqCisnYmFja3Vwc2tpcCcgJ2JzaycJc3RyaW5nCShkZWZhdWx0OiAiL3RtcC8qLCRUTVBESVIvKiwkVE1QLyosJFRFTVAvKiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrd2lsZGlnbm9yZXwKKwkJCWZlYXR1cmV9CisJQSBsaXN0IG9mIGZpbGUgcGF0dGVybnMuICBXaGVuIG9uZSBvZiB0aGUgcGF0dGVybnMgbWF0Y2hlcyB3aXRoIHRoZQorCW5hbWUgb2YgdGhlIGZpbGUgd2hpY2ggaXMgd3JpdHRlbiwgbm8gYmFja3VwIGZpbGUgaXMgY3JlYXRlZC4gIEJvdGgKKwl0aGUgc3BlY2lmaWVkIGZpbGUgbmFtZSBhbmQgdGhlIGZ1bGwgcGF0aCBuYW1lIG9mIHRoZSBmaWxlIGFyZSB1c2VkLgorCVRoZSBwYXR0ZXJuIGlzIHVzZWQgbGlrZSB3aXRoIHw6YXV0b2NtZHwsIHNlZSB8YXV0b2NtZC1wYXR0ZXJuc3wuCisJV2F0Y2ggb3V0IGZvciBzcGVjaWFsIGNoYXJhY3RlcnMsIHNlZSB8b3B0aW9uLWJhY2tzbGFzaHwuCisJV2hlbiAkVE1QRElSLCAkVE1QIG9yICRURU1QIGlzIG5vdCBkZWZpbmVkLCBpdCBpcyBub3QgdXNlZCBmb3IgdGhlCisJZGVmYXVsdCB2YWx1ZS4gIi90bXAvKiIgaXMgb25seSB1c2VkIGZvciBVbml4LgorCisJCQkJCQkqJ2JhbGxvb25kZWxheScqIConYmRsYXknKgorJ2JhbGxvb25kZWxheScgJ2JkbGF5JwludW1iZXIJKGRlZmF1bHQ6IDYwMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrYmFsbG9vbl9ldmFsfAorCQkJZmVhdHVyZX0KKwlEZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIGEgYmFsbG9vbiBtYXkgcG9wIHVwLiAgU2VlIHxiYWxsb29uLWV2YWx8LgorCisJCSAgICAgICAqJ2JhbGxvb25ldmFsJyogKidiZXZhbCcqIConbm9iYWxsb29uZXZhbCcqIConbm9iZXZhbCcqCisnYmFsbG9vbmV2YWwnICdiZXZhbCcJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2JhbGxvb25fZXZhbHwKKwkJCWFuZCB8K3N1bl93b3Jrc2hvcHwgb3IgfCtuZXRiZWFuc19pbnRnfCBmZWF0dXJlc30KKwlTd2l0Y2ggb24gdGhlIHxiYWxsb29uLWV2YWx8IGZ1bmN0aW9uYWxpdHkuCisKKwkJCQkgICAgIConYmluYXJ5JyogKidiaW4nKiAqJ25vYmluYXJ5JyogKidub2JpbicqCisnYmluYXJ5JyAnYmluJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gc2hvdWxkIGJlIHNldCBiZWZvcmUgZWRpdGluZyBhIGJpbmFyeSBmaWxlLiAgWW91IGNhbiBhbHNvCisJdXNlIHRoZSB8LWJ8IFZpbSBhcmd1bWVudC4gIFdoZW4gdGhpcyBvcHRpb24gaXMgc3dpdGNoZWQgb24gYSBmZXcKKwlvcHRpb25zIHdpbGwgYmUgY2hhbmdlZCAoYWxzbyB3aGVuIGl0IGFscmVhZHkgd2FzIG9uKToKKwkJJ3RleHR3aWR0aCcgIHdpbGwgYmUgc2V0IHRvIDAKKwkJJ3dyYXBtYXJnaW4nIHdpbGwgYmUgc2V0IHRvIDAKKwkJJ21vZGVsaW5lJyAgIHdpbGwgYmUgb2ZmCisJCSdleHBhbmR0YWInICB3aWxsIGJlIG9mZgorCUFsc28sICdmaWxlZm9ybWF0JyBhbmQgJ2ZpbGVmb3JtYXRzJyBvcHRpb25zIHdpbGwgbm90IGJlIHVzZWQsIHRoZQorCWZpbGUgaXMgcmVhZCBhbmQgd3JpdHRlbiBsaWtlICdmaWxlZm9ybWF0JyB3YXMgInVuaXgiIChhIHNpbmdsZSA8Tkw+CisJc2VwYXJhdGVzIGxpbmVzKS4KKwlUaGUgJ2ZpbGVlbmNvZGluZycgYW5kICdmaWxlZW5jb2RpbmdzJyBvcHRpb25zIHdpbGwgbm90IGJlIHVzZWQsIHRoZQorCWZpbGUgaXMgcmVhZCB3aXRob3V0IGNvbnZlcnNpb24uCisJTk9URTogV2hlbiB5b3Ugc3RhcnQgZWRpdGluZyBhKG5vdGhlcikgZmlsZSB3aGlsZSB0aGUgJ2Jpbicgb3B0aW9uIGlzCisJb24sIHNldHRpbmdzIGZyb20gYXV0b2NvbW1hbmRzIG1heSBjaGFuZ2UgdGhlIHNldHRpbmdzIGFnYWluIChlLmcuLAorCSd0ZXh0d2lkdGgnKSwgY2F1c2luZyB0cm91YmxlIHdoZW4gZWRpdGluZy4gIFlvdSBtaWdodCB3YW50IHRvIHNldAorCSdiaW4nIGFnYWluIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gbG9hZGVkLgorCVRoZSBwcmV2aW91cyB2YWx1ZXMgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgcmVtZW1iZXJlZCBhbmQgcmVzdG9yZWQgd2hlbgorCSdiaW4nIGlzIHN3aXRjaGVkIGZyb20gb24gdG8gb2ZmLiAgRWFjaCBidWZmZXIgaGFzIGl0cyBvd24gc2V0IG9mCisJc2F2ZWQgb3B0aW9uIHZhbHVlcy4KKwlUbyBlZGl0IGEgZmlsZSB3aXRoICdiaW5hcnknIHNldCB5b3UgY2FuIHVzZSB0aGUgfCsrYmlufCBhcmd1bWVudC4KKwlUaGlzIGF2b2lkcyB5b3UgaGF2ZSB0byBkbyAiOnNldCBiaW4iLCB3aGljaCB3b3VsZCBoYXZlIGVmZmVjdCBmb3IgYWxsCisJZmlsZXMgeW91IGVkaXQuCisJV2hlbiB3cml0aW5nIGEgZmlsZSB0aGUgPEVPTD4gZm9yIHRoZSBsYXN0IGxpbmUgaXMgb25seSB3cml0dGVuIGlmCisJdGhlcmUgd2FzIG9uZSBpbiB0aGUgb3JpZ2luYWwgZmlsZSAobm9ybWFsbHkgVmltIGFwcGVuZHMgYW4gPEVPTD4gdG8KKwl0aGUgbGFzdCBsaW5lIGlmIHRoZXJlIGlzIG5vbmU7IHRoaXMgd291bGQgbWFrZSB0aGUgZmlsZSBsb25nZXIpLiAgU2VlCisJdGhlICdlbmRvZmxpbmUnIG9wdGlvbi4KKworCQkJKidiaW9za2V5JyogKidiaW9zaycqIConbm9iaW9za2V5JyogKidub2Jpb3NrJyoKKydiaW9za2V5JyAnYmlvc2snCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9ICB7b25seSBmb3IgTVMtRE9TfQorCVdoZW4gb24gdGhlIGJpb3MgaXMgY2FsbGVkIHRvIG9idGFpbiBhIGtleWJvYXJkIGNoYXJhY3Rlci4gIFRoaXMgd29ya3MKKwliZXR0ZXIgdG8gZGV0ZWN0IENUUkwtQywgYnV0IG9ubHkgd29ya3MgZm9yIHRoZSBjb25zb2xlLiAgV2hlbiB1c2luZyBhCisJdGVybWluYWwgb3ZlciBhIHNlcmlhbCBwb3J0IHJlc2V0IHRoaXMgb3B0aW9uLgorCUFsc28gc2VlIHwnY29uc2tleSd8LgorCisJCQkJCQkJKidib21iJyogKidub2JvbWInKgorJ2JvbWInCQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGV8CisJCQlmZWF0dXJlfQorCVdoZW4gd3JpdGluZyBhIGZpbGUgYW5kIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0LCBhIEJPTSAoQnl0ZQorCU9yZGVyIE1hcmspIGlzIHByZXBlbmRlZCB0byB0aGUgZmlsZToKKwktIHRoaXMgb3B0aW9uIGlzIG9uCisJLSB0aGUgJ2JpbmFyeScgb3B0aW9uIGlzIG9mZgorCS0gJ2ZpbGVlbmNvZGluZycgaXMgInV0Zi04IiwgInVjcy0yIiwgInVjcy00IiBvciBvbmUgb2YgdGhlIGxpdHRsZS9iaWcKKwkgIGVuZGlhbiB2YXJpYW50cy4KKwlTb21lIGFwcGxpY2F0aW9ucyB1c2UgdGhlIEJPTSB0byByZWNvZ25pemUgdGhlIGVuY29kaW5nIG9mIHRoZSBmaWxlLgorCU9mdGVuIHVzZWQgZm9yIFVDUy0yIGZpbGVzIG9uIE1TLVdpbmRvd3MuICBGb3Igb3RoZXIgYXBwbGljYXRpb25zIGl0CisJY2F1c2VzIHRyb3VibGUsIGZvciBleGFtcGxlOiAiY2F0IGZpbGUxIGZpbGUyIiBtYWtlcyB0aGUgQk9NIG9mIGZpbGUyCisJYXBwZWFyIGhhbGZ3YXkgdGhlIHJlc3VsdGluZyBmaWxlLgorCVdoZW4gVmltIHJlYWRzIGEgZmlsZSBhbmQgJ2ZpbGVlbmNvZGluZ3MnIHN0YXJ0cyB3aXRoICJ1Y3MtYm9tIiwgYQorCWNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEJPTSBpcyBkb25lIGFuZCAnYm9tYicgc2V0IGFjY29yZGluZ2x5LgorCVVubGVzcyAnYmluYXJ5JyBpcyBzZXQsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgZmlyc3QgbGluZSwgc28gdGhhdCB5b3UKKwlkb24ndCBzZWUgaXQgd2hlbiBlZGl0aW5nLiAgV2hlbiB5b3UgZG9uJ3QgY2hhbmdlIHRoZSBvcHRpb25zLCB0aGUgQk9NCisJd2lsbCBiZSByZXN0b3JlZCB3aGVuIHdyaXRpbmcgdGhlIGZpbGUuCisKKwkJCQkJCSonYnJlYWthdCcqIConYnJrJyoKKydicmVha2F0JyAnYnJrJwkJc3RyaW5nCShkZWZhdWx0ICIgXkkhQCotKzs6LC4vPyIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICB8K2xpbmVicmVha3wKKwkJCWZlYXR1cmV9CisJVGhpcyBvcHRpb24gbGV0cyB5b3UgY2hvb3NlIHdoaWNoIGNoYXJhY3RlcnMgbWlnaHQgY2F1c2UgYSBsaW5lCisJYnJlYWsgaWYgJ2xpbmVicmVhaycgaXMgb24uCisKKwkJCQkJCSonYnJvd3NlZGlyJyogKidic2RpcicqCisnYnJvd3NlZGlyJyAnYnNkaXInCXN0cmluZwkoZGVmYXVsdCBmb3IgImxhc3QiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfSB7b25seSBmb3IgTW90aWYgYW5kIFdpbjMyIEdVSX0KKwlXaGljaCBkaXJlY3RvcnkgdG8gdXNlIGZvciB0aGUgZmlsZSBicm93c2VyOgorCSAgIGxhc3QJCVVzZSBzYW1lIGRpcmVjdG9yeSBhcyB3aXRoIGxhc3QgZmlsZSBicm93c2VyLgorCSAgIGJ1ZmZlcglVc2UgdGhlIGRpcmVjdG9yeSBvZiB0aGUgcmVsYXRlZCBidWZmZXIuCisJICAgY3VycmVudAlVc2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCSAgIHtwYXRofQlVc2UgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkKKworCQkJCQkJKididWZoaWRkZW4nKiAqJ2JoJyoKKydidWZoaWRkZW4nICdiaCcJc3RyaW5nIChkZWZhdWx0OiAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtxdWlja2ZpeHwKKwkJCWZlYXR1cmV9CisJVGhpcyBvcHRpb24gc3BlY2lmaWVzIHdoYXQgaGFwcGVucyB3aGVuIGEgYnVmZmVyIGlzIG5vIGxvbmdlcgorCWRpc3BsYXllZCBpbiBhIHdpbmRvdzoKKwkgIDxlbXB0eT4JZm9sbG93IHRoZSBnbG9iYWwgJ2hpZGRlbicgb3B0aW9uCisJICBoaWRlCQloaWRlIHRoZSBidWZmZXIgKGRvbid0IHVubG9hZCBpdCksIGFsc28gd2hlbiAnaGlkZGVuJworCQkJaXMgbm90IHNldAorCSAgdW5sb2FkCXVubG9hZCB0aGUgYnVmZmVyLCBhbHNvIHdoZW4gJ2hpZGRlbicgaXMgc2V0IG9yIHVzaW5nCisJCQl8OmhpZGV8CisJICBkZWxldGUJZGVsZXRlIHRoZSBidWZmZXIgZnJvbSB0aGUgYnVmZmVyIGxpc3QsIGFsc28gd2hlbgorCQkJJ2hpZGRlbicgaXMgc2V0IG9yIHVzaW5nIHw6aGlkZXwsIGxpa2UgdXNpbmcKKwkJCXw6YmRlbGV0ZXwKKwkgIHdpcGUJCXdpcGUgb3V0IHRoZSBidWZmZXIgZnJvbSB0aGUgYnVmZmVyIGxpc3QsIGFsc28gd2hlbgorCQkJJ2hpZGRlbicgaXMgc2V0IG9yIHVzaW5nIHw6aGlkZXwsIGxpa2UgdXNpbmcKKwkJCXw6YndpcGVvdXR8CisKKwlUaGlzIG9wdGlvbiBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggJ2J1ZnR5cGUnIGFuZCAnc3dhcGZpbGUnIHRvIHNwZWNpZnkKKwlzcGVjaWFsIGtpbmRzIG9mIGJ1ZmZlcnMuICAgU2VlIHxzcGVjaWFsLWJ1ZmZlcnN8LgorCisJCQkqJ2J1Zmxpc3RlZCcqIConYmwnKiAqJ25vYnVmbGlzdGVkJyogKidub2JsJyogKkU4NSoKKydidWZsaXN0ZWQnICdibCcJYm9vbGVhbiAoZGVmYXVsdDogb24pCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBidWZmZXIgc2hvd3MgdXAgaW4gdGhlIGJ1ZmZlciBsaXN0LiAgSWYKKwlpdCBpcyByZXNldCBpdCBpcyBub3QgdXNlZCBmb3IgIjpibmV4dCIsICJscyIsIHRoZSBCdWZmZXJzIG1lbnUsIGV0Yy4KKwlUaGlzIG9wdGlvbiBpcyByZXNldCBieSBWaW0gZm9yIGJ1ZmZlcnMgdGhhdCBhcmUgb25seSB1c2VkIHRvIHJlbWVtYmVyCisJYSBmaWxlIG5hbWUgb3IgbWFya3MuICBWaW0gc2V0cyBpdCB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBidWZmZXIuCisJQnV0IG5vdCB3aGVuIG1vdmluZyB0byBhIGJ1ZmZlciB3aXRoICI6YnVmZmVyIi4KKworCQkJCQkJKididWZ0eXBlJyogKididCcqICpFMzgyKgorJ2J1ZnR5cGUnICdidCcJCXN0cmluZyAoZGVmYXVsdDogIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcXVpY2tmaXh8CisJCQlmZWF0dXJlfQorCVRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgYSBidWZmZXI6CisJICA8ZW1wdHk+CW5vcm1hbCBidWZmZXIKKwkgIG5vZmlsZQlidWZmZXIgd2hpY2ggaXMgbm90IHJlbGF0ZWQgdG8gYSBmaWxlIGFuZCB3aWxsIG5vdCBiZQorCQkJd3JpdHRlbgorCSAgbm93cml0ZQlidWZmZXIgd2hpY2ggd2lsbCBub3QgYmUgd3JpdHRlbgorCSAgcXVpY2tmaXgJcXVpY2tmaXggYnVmZmVyLCBjb250YWlucyBsaXN0IG9mIGVycm9ycyB8OmN3aW5kb3d8CisJICBoZWxwCQloZWxwIGJ1ZmZlciAoeW91IGFyZSBub3Qgc3VwcG9zZWQgdG8gc2V0IHRoaXMKKwkJCW1hbnVhbGx5KQorCisJVGhpcyBvcHRpb24gaXMgdXNlZCB0b2dldGhlciB3aXRoICdidWZoaWRkZW4nIGFuZCAnc3dhcGZpbGUnIHRvCisJc3BlY2lmeSBzcGVjaWFsIGtpbmRzIG9mIGJ1ZmZlcnMuICAgU2VlIHxzcGVjaWFsLWJ1ZmZlcnN8LgorCisJQmUgY2FyZWZ1bCB3aXRoIGNoYW5naW5nIHRoaXMgb3B0aW9uLCBpdCBjYW4gaGF2ZSBtYW55IHNpZGUgZWZmZWN0cyEKKworCUEgInF1aWNrZml4IiBidWZmZXIgaXMgb25seSB1c2VkIGZvciB0aGUgZXJyb3IgbGlzdC4gIFRoaXMgdmFsdWUgaXMKKwlzZXQgYnkgdGhlIHw6Y3dpbmRvd3wgY29tbWFuZCBhbmQgeW91IGFyZSBub3Qgc3VwcG9zZWQgdG8gY2hhbmdlIGl0LgorCisJIm5vZmlsZSIgYW5kICJub3dyaXRlIiBidWZmZXJzIGFyZSBzaW1pbGFyOgorCWJvdGg6CQlUaGUgYnVmZmVyIGlzIG5vdCB0byBiZSB3cml0dGVuIHRvIGRpc2ssICI6dyIgZG9lc24ndAorCQkJd29yayAoIjp3IGZpbGVuYW1lIiBkb2VzIHdvcmsgdGhvdWdoKS4KKwlib3RoOgkJVGhlIGJ1ZmZlciBpcyBuZXZlciBjb25zaWRlcmVkIHRvIGJlIHwnbW9kaWZpZWQnfC4KKwkJCVRoZXJlIGlzIG5vIHdhcm5pbmcgd2hlbiB0aGUgY2hhbmdlcyB3aWxsIGJlIGxvc3QsIGZvcgorCQkJZXhhbXBsZSB3aGVuIHlvdSBxdWl0IFZpbS4KKwlib3RoOgkJQSBzd2FwIGZpbGUgaXMgb25seSBjcmVhdGVkIHdoZW4gdXNpbmcgdG9vIG11Y2ggbWVtb3J5CisJCQkod2hlbiAnc3dhcGZpbGUnIGhhcyBiZWVuIHJlc2V0IHRoZXJlIGlzIG5ldmVyIGEgc3dhcAorCQkJZmlsZSkuCisJbm9maWxlIG9ubHk6CVRoZSBidWZmZXIgbmFtZSBpcyBmaXhlZCwgaXQgaXMgbm90IGhhbmRsZWQgbGlrZSBhCisJCQlmaWxlIG5hbWUuICBJdCBpcyBub3QgbW9kaWZpZWQgaW4gcmVzcG9uc2UgdG8gYSB8OmNkfAorCQkJY29tbWFuZC4KKworCQkJCQkJKidjYXNlbWFwJyogKidjbXAnKgorJ2Nhc2VtYXAnICdjbXAnCQlzdHJpbmcJKGRlZmF1bHQ6ICJpbnRlcm5hbCxrZWVwYXNjaWkiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVNwZWNpZmllcyBkZXRhaWxzIGFib3V0IGNoYW5naW5nIHRoZSBjYXNlIG9mIGxldHRlcnMuICBJdCBtYXkgY29udGFpbgorCXRoZXNlIHdvcmRzLCBzZXBhcmF0ZWQgYnkgYSBjb21tYToKKwlpbnRlcm5hbAlVc2UgaW50ZXJuYWwgY2FzZSBtYXBwaW5nIGZ1bmN0aW9ucywgdGhlIGN1cnJlbnQKKwkJCWxvY2FsZSBkb2VzIG5vdCBjaGFuZ2UgdGhlIGNhc2UgbWFwcGluZy4gIFRoaXMgb25seQorCQkJbWF0dGVycyB3aGVuICdlbmNvZGluZycgaXMgYSBVbmljb2RlIGVuY29kaW5nLglXaGVuCisJCQkiaW50ZXJuYWwiIGlzIG9taXR0ZWQsIHRoZSB0b3d1cHBlcigpIGFuZCB0b3dsb3dlcigpCisJCQlzeXN0ZW0gbGlicmFyeSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBhdmFpbGFibGUuCisJa2VlcGFzY2lpCUZvciB0aGUgQVNDSUkgY2hhcmFjdGVycyAoMHgwMCB0byAweDdmKSB1c2UgdGhlIFVTCisJCQljYXNlIG1hcHBpbmcsIHRoZSBjdXJyZW50IGxvY2FsZSBpcyBub3QgZWZmZWN0aXZlLgorCQkJVGhpcyBwcm9iYWJseSBvbmx5IG1hdHRlcnMgZm9yIFR1cmtpc2guCisKKwkJCQkJCSonY2RwYXRoJyogKidjZCcqICpFMzQ0KiAqRTM0NioKKydjZHBhdGgnICdjZCcJCXN0cmluZwkoZGVmYXVsdDogZXF1aXZhbGVudCB0byAkQ0RQQVRIIG9yICIsLCIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2ZpbGVfaW5fcGF0aHwgZmVhdHVyZX0KKwlUaGlzIGlzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB3aGljaCB3aWxsIGJlIHNlYXJjaGVkIHdoZW4gdXNpbmcgdGhlCisJfDpjZHwgYW5kIHw6bGNkfCBjb21tYW5kcywgcHJvdmlkZWQgdGhhdCB0aGUgZGlyZWN0b3J5IGJlaW5nIHNlYXJjaGVkCisJZm9yIGhhcyBhIHJlbGF0aXZlIHBhdGggKG5vdCBzdGFydGluZyB3aXRoICIvIiwgIi4vIiBvciAiLi4vIikuCisJVGhlICdjZHBhdGgnIG9wdGlvbidzIHZhbHVlIGhhcyB0aGUgc2FtZSBmb3JtIGFuZCBzZW1hbnRpY3MgYXMKKwl8J3BhdGgnfC4gIEFsc28gc2VlIHxmaWxlLXNlYXJjaGluZ3wuCisJVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGFrZW4gZnJvbSAkQ0RQQVRILCB3aXRoIGEgIiwiIHByZXBlbmRlZCB0byBsb29rCisJaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGZpcnN0LgorCUlmIHRoZSBkZWZhdWx0IHZhbHVlIHRha2VuIGZyb20gJENEUEFUSCBpcyBub3Qgd2hhdCB5b3Ugd2FudCwgaW5jbHVkZQorCWEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4geW91ciB2aW1yYyBmaWxlIHRvCisJb3ZlcnJpZGUgaXQ6ID4KKwkgIDpsZXQgJmNkcGF0aCA9ICcsJyAuIHN1YnN0aXR1dGUoc3Vic3RpdHV0ZSgkQ0RQQVRILCAnWywgXScsICdcXFwwJywgJ2cnKSwgJzonLCAnLCcsICdnJykKKzwJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCShwYXJ0cyBvZiAnY2RwYXRoJyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBzaGVsbCB0byBleHBhbmQgZmlsZSBuYW1lcykuCisKKwkJCQkJCSonY2VkaXQnKgorJ2NlZGl0JwkJCXN0cmluZwkoVmkgZGVmYXVsdDogIiIsIFZpbSBkZWZhdWx0OiBDVFJMLUYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrdmVydHNwbGl0fAorCQkJZmVhdHVyZX0KKwlUaGUga2V5IHVzZWQgaW4gQ29tbWFuZC1saW5lIE1vZGUgdG8gb3BlbiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdy4KKwlUaGUgZGVmYXVsdCBpcyBDVFJMLUYgd2hlbiAnY29tcGF0aWJsZScgaXMgb2ZmLgorCU9ubHkgbm9uLXByaW50YWJsZSBrZXlzIGFyZSBhbGxvd2VkLgorCVRoZSBrZXkgY2FuIGJlIHNwZWNpZmllZCBhcyBhIHNpbmdsZSBjaGFyYWN0ZXIsIGJ1dCBpdCBpcyBkaWZmaWN1bHQgdG8KKwl0eXBlLiAgVGhlIHByZWZlcnJlZCB3YXkgaXMgdG8gdXNlIHRoZSA8PiBub3RhdGlvbi4gIEV4YW1wbGVzOiA+CisJCTpzZXQgY2VkaXQ9PEMtWT4KKwkJOnNldCBjZWRpdD08RXNjPgorPAl8TnZpfCBhbHNvIGhhcyB0aGlzIG9wdGlvbiwgYnV0IGl0IG9ubHkgdXNlcyB0aGUgZmlyc3QgY2hhcmFjdGVyLgorCVNlZSB8Y21kd2lufC4KKworCQkJCSonY2hhcmNvbnZlcnQnKiAqJ2NjdicqICpFMjAyKiAqRTIxNCogKkU1MTMqCisnY2hhcmNvbnZlcnQnICdjY3YnCXN0cmluZyAoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlfAorCQkJZmVhdHVyZSBhbmQgdGhlIHwrZXZhbHwgZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJQW4gZXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgZm9yIGNoYXJhY3RlciBlbmNvZGluZyBjb252ZXJzaW9uLiAgSXQgaXMKKwlldmFsdWF0ZWQgd2hlbiBhIGZpbGUgdGhhdCBpcyB0byBiZSByZWFkIG9yIGhhcyBiZWVuIHdyaXR0ZW4gaGFzIGEKKwlkaWZmZXJlbnQgZW5jb2RpbmcgZnJvbSB3aGF0IGlzIGRlc2lyZWQuCisJJ2NoYXJjb252ZXJ0JyBpcyBub3QgdXNlZCB3aGVuIHRoZSBpbnRlcm5hbCBpY29udigpIGZ1bmN0aW9uIGlzCisJc3VwcG9ydGVkIGFuZCBpcyBhYmxlIHRvIGRvIHRoZSBjb252ZXJzaW9uLiAgVXNpbmcgaWNvbnYoKSBpcworCXByZWZlcnJlZCwgYmVjYXVzZSBpdCBpcyBtdWNoIGZhc3Rlci4KKwknY2hhcmNvbnZlcnQnIGlzIG5vdCB1c2VkIHdoZW4gcmVhZGluZyBzdGRpbiB8LS18LCBiZWNhdXNlIHRoZXJlIGlzIG5vCisJZmlsZSB0byBjb252ZXJ0IGZyb20uICBZb3Ugd2lsbCBoYXZlIHRvIHNhdmUgdGhlIHRleHQgaW4gYSBmaWxlIGZpcnN0LgorCVRoZSBleHByZXNzaW9uIG11c3QgcmV0dXJuIHplcm8gb3IgYW4gZW1wdHkgc3RyaW5nIGZvciBzdWNjZXNzLAorCW5vbi16ZXJvIGZvciBmYWlsdXJlLgorCVRoZSBwb3NzaWJsZSBlbmNvZGluZyBuYW1lcyBlbmNvdW50ZXJlZCBhcmUgaW4gJ2VuY29kaW5nJy4KKwlBZGRpdGlvbmFsbHksIG5hbWVzIGdpdmVuIGluICdmaWxlZW5jb2RpbmdzJyBhbmQgJ2ZpbGVlbmNvZGluZycgYXJlCisJdXNlZC4KKwlDb252ZXJzaW9uIGJldHdlZW4gImxhdGluMSIsICJ1bmljb2RlIiwgInVjcy0yIiwgInVjcy00IiBhbmQgInV0Zi04IgorCWlzIGRvbmUgaW50ZXJuYWxseSBieSBWaW0sICdjaGFyY29udmVydCcgaXMgbm90IHVzZWQgZm9yIHRoaXMuCisJJ2NoYXJjb252ZXJ0JyBpcyBhbHNvIHVzZWQgdG8gY29udmVydCB0aGUgdmltaW5mbyBmaWxlLCBpZiB0aGUgJ2MnCisJZmxhZyBpcyBwcmVzZW50IGluICd2aW1pbmZvJy4gIEFsc28gdXNlZCBmb3IgVW5pY29kZSBjb252ZXJzaW9uLgorCUV4YW1wbGU6ID4KKwkJc2V0IGNoYXJjb252ZXJ0PUNoYXJDb252ZXJ0KCkKKwkJZnVuIENoYXJDb252ZXJ0KCkKKwkJICBzeXN0ZW0oInJlY29kZSAiCisJCQlcIC4gdjpjaGFyY29udmVydF9mcm9tIC4gIi4uIiAuIHY6Y2hhcmNvbnZlcnRfdG8KKwkJCVwgLiAiIDwiIC4gdjpmbmFtZV9pbiAuICIgPiIgdjpmbmFtZV9vdXQpCisJCSAgcmV0dXJuIHY6c2hlbGxfZXJyb3IKKwkJZW5kZnVuCis8CVRoZSByZWxhdGVkIFZpbSB2YXJpYWJsZXMgYXJlOgorCQl2OmNoYXJjb252ZXJ0X2Zyb20JbmFtZSBvZiB0aGUgY3VycmVudCBlbmNvZGluZworCQl2OmNoYXJjb252ZXJ0X3RvCW5hbWUgb2YgdGhlIGRlc2lyZWQgZW5jb2RpbmcKKwkJdjpmbmFtZV9pbgkJbmFtZSBvZiB0aGUgaW5wdXQgZmlsZQorCQl2OmZuYW1lX291dAkJbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUKKwlOb3RlIHRoYXQgdjpmbmFtZV9pbiBhbmQgdjpmbmFtZV9vdXQgd2lsbCBuZXZlciBiZSB0aGUgc2FtZS4KKwlOb3RlIHRoYXQgdjpjaGFyY29udmVydF9mcm9tIGFuZCB2OmNoYXJjb252ZXJ0X3RvIG1heSBiZSBkaWZmZXJlbnQKKwlmcm9tICdlbmNvZGluZycuICBWaW0gaW50ZXJuYWxseSB1c2VzIFVURi04IGluc3RlYWQgb2YgVUNTLTIgb3IgVUNTLTQuCisJRW5jcnlwdGlvbiBpcyBub3QgZG9uZSBieSBWaW0gd2hlbiB1c2luZyAnY2hhcmNvbnZlcnQnLiAgSWYgeW91IHdhbnQKKwl0byBlbmNyeXB0IHRoZSBmaWxlIGFmdGVyIGNvbnZlcnNpb24sICdjaGFyY29udmVydCcgc2hvdWxkIHRha2UgY2FyZQorCW9mIHRoaXMuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJICAgKidjaW5kZW50JyogKidjaW4nKiAqJ25vY2luZGVudCcqIConbm9jaW4nKgorJ2NpbmRlbnQnICdjaW4nCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjaW5kZW50fAorCQkJZmVhdHVyZX0KKwlFbmFibGVzIGF1dG9tYXRpYyBDIHByb2dyYW0gaW5kZW50aW5nICBTZWUgJ2NpbmtleXMnIHRvIHNldCB0aGUga2V5cworCXRoYXQgdHJpZ2dlciByZWluZGVudGluZyBpbiBpbnNlcnQgbW9kZSBhbmQgJ2Npbm9wdGlvbnMnIHRvIHNldCB5b3VyCisJcHJlZmVycmVkIGluZGVudCBzdHlsZS4KKwlJZiAnaW5kZW50ZXhwcicgaXMgbm90IGVtcHR5LCBpdCBvdmVycnVsZXMgJ2NpbmRlbnQnLgorCUlmICdsaXNwJyBpcyBub3Qgb24gYW5kIGJvdGggJ2luZGVudGV4cHInIGFuZCAnZXF1YWxwcmcnIGFyZSBlbXB0eSwKKwl0aGUgIj0iIG9wZXJhdG9yIGluZGVudHMgdXNpbmcgdGhpcyBhbGdvcml0aG0gcmF0aGVyIHRoYW4gY2FsbGluZyBhbgorCWV4dGVybmFsIHByb2dyYW0uCisJU2VlIHxDLWluZGVudGluZ3wuCisJV2hlbiB5b3UgZG9uJ3QgbGlrZSB0aGUgd2F5ICdjaW5kZW50JyB3b3JrcywgdHJ5IHRoZSAnc21hcnRpbmRlbnQnCisJb3B0aW9uIG9yICdpbmRlbnRleHByJy4KKwlUaGlzIG9wdGlvbiBpcyBub3QgdXNlZCB3aGVuICdwYXN0ZScgaXMgc2V0LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJCSonY2lua2V5cycqIConY2luaycqCisnY2lua2V5cycgJ2NpbmsnCXN0cmluZwkoZGVmYXVsdCAiMHssMH0sMCksOiwwIywhXkYsbyxPLGUiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NpbmRlbnR8CisJCQlmZWF0dXJlfQorCUEgbGlzdCBvZiBrZXlzIHRoYXQsIHdoZW4gdHlwZWQgaW4gSW5zZXJ0IG1vZGUsIGNhdXNlIHJlaW5kZW50aW5nIG9mCisJdGhlIGN1cnJlbnQgbGluZS4gIE9ubHkgdXNlZCBpZiAnY2luZGVudCcgaXMgb24gYW5kICdpbmRlbnRleHByJyBpcworCWVtcHR5LgorCUZvciB0aGUgZm9ybWF0IG9mIHRoaXMgb3B0aW9uIHNlZSB8Y2lua2V5cy1mb3JtYXR8LgorCVNlZSB8Qy1pbmRlbnRpbmd8LgorCisJCQkJCQkqJ2Npbm9wdGlvbnMnKiAqJ2Npbm8nKgorJ2Npbm9wdGlvbnMnICdjaW5vJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY2luZGVudHwKKwkJCWZlYXR1cmV9CisJVGhlICdjaW5vcHRpb25zJyBhZmZlY3QgdGhlIHdheSAnY2luZGVudCcgcmVpbmRlbnRzIGxpbmVzIGluIGEgQworCXByb2dyYW0uICBTZWUgfGNpbm9wdGlvbnMtdmFsdWVzfCBmb3IgdGhlIHZhbHVlcyBvZiB0aGlzIG9wdGlvbiwgYW5kCisJfEMtaW5kZW50aW5nfCBmb3IgaW5mbyBvbiBDIGluZGVudGluZyBpbiBnZW5lcmFsLgorCisKKwkJCQkJCSonY2lud29yZHMnKiAqJ2NpbncnKgorJ2NpbndvcmRzJyAnY2ludycJc3RyaW5nCShkZWZhdWx0ICJpZixlbHNlLHdoaWxlLGRvLGZvcixzd2l0Y2giKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IGJvdGggdGhlCisJCQl8K2NpbmRlbnR8IGFuZCB0aGUgfCtzbWFydGluZGVudHwgZmVhdHVyZXN9CisJVGhlc2Uga2V5d29yZHMgc3RhcnQgYW4gZXh0cmEgaW5kZW50IGluIHRoZSBuZXh0IGxpbmUgd2hlbgorCSdzbWFydGluZGVudCcgb3IgJ2NpbmRlbnQnIGlzIHNldC4gIEZvciAnY2luZGVudCcgdGhpcyBpcyBvbmx5IGRvbmUgYXQKKwlhbiBhcHByb3ByaWF0ZSBwbGFjZSAoaW5zaWRlIHt9KS4KKwlOb3RlIHRoYXQgJ2lnbm9yZWNhc2UnIGlzbid0IHVzZWQgZm9yICdjaW53b3JkcycuICBJZiBjYXNlIGRvZXNuJ3QKKwltYXR0ZXIsIGluY2x1ZGUgdGhlIGtleXdvcmQgYm90aCB0aGUgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2U6CisJImlmLElmLElGIi4KKworCQkJCQkJKidjbGlwYm9hcmQnKiAqJ2NiJyoKKydjbGlwYm9hcmQnICdjYicJc3RyaW5nCShkZWZhdWx0ICJhdXRvc2VsZWN0LGV4Y2x1ZGU6Y29uc1x8bGludXgiCisJCQkJCQkgIGZvciBYLXdpbmRvd3MsICIiIG90aGVyd2lzZSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGluIEdVSSB2ZXJzaW9ucyBvciB3aGVuIHRoZSB8K3h0ZXJtX2NsaXBib2FyZHwKKwkJCWZlYXR1cmUgaXMgaW5jbHVkZWR9CisJVGhpcyBvcHRpb24gaXMgYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCBuYW1lcy4KKwlUaGVzZSBuYW1lcyBhcmUgcmVjb2duaXplZDoKKworCXVubmFtZWQJCVdoZW4gaW5jbHVkZWQsIFZpbSB3aWxsIHVzZSB0aGUgY2xpcGJvYXJkIHJlZ2lzdGVyICcqJworCQkJZm9yIGFsbCB5YW5rLCBkZWxldGUsIGNoYW5nZSBhbmQgcHV0IG9wZXJhdGlvbnMgd2hpY2gKKwkJCXdvdWxkIG5vcm1hbGx5IGdvIHRvIHRoZSB1bm5hbWVkIHJlZ2lzdGVyLiAgV2hlbiBhCisJCQlyZWdpc3RlciBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgaXQgd2lsbCBhbHdheXMgYmUKKwkJCXVzZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyICJ1bm5hbWVkIiBpcyBpbiAnY2xpcGJvYXJkJworCQkJb3Igbm90LiAgVGhlIGNsaXBib2FyZCByZWdpc3RlciBjYW4gYWx3YXlzIGJlCisJCQlleHBsaWNpdGx5IGFjY2Vzc2VkIHVzaW5nIHRoZSAiKiBub3RhdGlvbi4gIEFsc28gc2VlCisJCQl8Z3VpLWNsaXBib2FyZHwuCisKKwlhdXRvc2VsZWN0CVdvcmtzIGxpa2UgdGhlICdhJyBmbGFnIGluICdndWlvcHRpb25zJzogSWYgcHJlc2VudCwKKwkJCXRoZW4gd2hlbmV2ZXIgVmlzdWFsIG1vZGUgaXMgc3RhcnRlZCwgb3IgdGhlIFZpc3VhbAorCQkJYXJlYSBleHRlbmRlZCwgVmltIHRyaWVzIHRvIGJlY29tZSB0aGUgb3duZXIgb2YgdGhlCisJCQl3aW5kb3dpbmcgc3lzdGVtJ3MgZ2xvYmFsIHNlbGVjdGlvbiBvciBwdXQgdGhlCisJCQlzZWxlY3RlZCB0ZXh0IG9uIHRoZSBjbGlwYm9hcmQgdXNlZCBieSB0aGUgc2VsZWN0aW9uCisJCQlyZWdpc3RlciAiKi4gIFNlZSB8Z3Vpb3B0aW9uc19hfCBhbmQgfHF1b3Rlc3RhcnwgZm9yCisJCQlkZXRhaWxzLiAgV2hlbiB0aGUgR1VJIGlzIGFjdGl2ZSwgdGhlICdhJyBmbGFnIGluCisJCQknZ3Vpb3B0aW9ucycgaXMgdXNlZCwgd2hlbiB0aGUgR1VJIGlzIG5vdCBhY3RpdmUsIHRoaXMKKwkJCSJhdXRvc2VsZWN0IiBmbGFnIGlzIHVzZWQuCisJCQlBbHNvIGFwcGxpZXMgdG8gdGhlIG1vZGVsZXNzIHNlbGVjdGlvbi4KKworCWF1dG9zZWxlY3RtbAlMaWtlICJhdXRvc2VsZWN0IiwgYnV0IGZvciB0aGUgbW9kZWxlc3Mgc2VsZWN0aW9uCisJCQlvbmx5LiAgQ29tcGFyZSB0byB0aGUgJ0EnIGZsYWcgaW4gJ2d1aW9wdGlvbnMnLgorCisJZXhjbHVkZTp7cGF0dGVybn0KKwkJCURlZmluZXMgYSBwYXR0ZXJuIHRoYXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBuYW1lIG9mCisJCQl0aGUgdGVybWluYWwgJ3Rlcm0nLiAgSWYgdGhlcmUgaXMgYSBtYXRjaCwgbm8KKwkJCWNvbm5lY3Rpb24gd2lsbCBiZSBtYWRlIHRvIHRoZSBYIHNlcnZlci4gIFRoaXMgaXMKKwkJCXVzZWZ1bCBpbiB0aGlzIHNpdHVhdGlvbjoKKwkJCS0gUnVubmluZyBWaW0gaW4gYSBjb25zb2xlLgorCQkJLSAkRElTUExBWSBpcyBzZXQgdG8gc3RhcnQgYXBwbGljYXRpb25zIG9uIGFub3RoZXIKKwkJCSAgZGlzcGxheS4KKwkJCS0gWW91IGRvIG5vdCB3YW50IHRvIGNvbm5lY3QgdG8gdGhlIFggc2VydmVyIGluIHRoZQorCQkJICBjb25zb2xlLCBidXQgZG8gd2FudCB0aGlzIGluIGEgdGVybWluYWwgZW11bGF0b3IuCisJCQlUbyBuZXZlciBjb25uZWN0IHRvIHRoZSBYIHNlcnZlciB1c2U6ID4KKwkJCQlleGNsdWRlOi4qCis8CQkJVGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHVzaW5nIHRoZSB8LVh8IGFyZ3VtZW50LgorCQkJTm90ZSB0aGF0IHdoZW4gdGhlcmUgaXMgbm8gY29ubmVjdGlvbiB0byB0aGUgWCBzZXJ2ZXIKKwkJCXRoZSB3aW5kb3cgdGl0bGUgd29uJ3QgYmUgcmVzdG9yZWQgYW5kIHRoZSBjbGlwYm9hcmQKKwkJCWNhbm5vdCBiZSBhY2Nlc3NlZC4KKwkJCVRoZSB2YWx1ZSBvZiAnbWFnaWMnIGlzIGlnbm9yZWQsIHtwYXR0ZXJufSBpcworCQkJaW50ZXJwcmV0ZWQgYXMgaWYgJ21hZ2ljJyB3YXMgb24uCisJCQlUaGUgcmVzdCBvZiB0aGUgb3B0aW9uIHZhbHVlIHdpbGwgYmUgdXNlZCBmb3IKKwkJCXtwYXR0ZXJufSwgdGhpcyBtdXN0IGJlIHRoZSBsYXN0IGVudHJ5LgorCisJCQkJCQkqJ2NtZGhlaWdodCcqIConY2gnKgorJ2NtZGhlaWdodCcgJ2NoJwludW1iZXIJKGRlZmF1bHQgMSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlOdW1iZXIgb2Ygc2NyZWVuIGxpbmVzIHRvIHVzZSBmb3IgdGhlIGNvbW1hbmQtbGluZS4gIEhlbHBzIGF2b2lkaW5nCisJfGhpdC1lbnRlcnwgcHJvbXB0cy4KKworCQkJCQkJKidjbWR3aW5oZWlnaHQnKiAqJ2N3aCcqCisnY21kd2luaGVpZ2h0JyAnY3doJwludW1iZXIJKGRlZmF1bHQgNykKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt2ZXJ0c3BsaXR8CisJCQlmZWF0dXJlfQorCU51bWJlciBvZiBzY3JlZW4gbGluZXMgdG8gdXNlIGZvciB0aGUgY29tbWFuZC1saW5lIHdpbmRvdy4gfGNtZHdpbnwKKworCQkJCQkJKidjb2x1bW5zJyogKidjbycqICpFNTk0KgorJ2NvbHVtbnMnICdjbycJCW51bWJlcgkoZGVmYXVsdCA4MCBvciB0ZXJtaW5hbCB3aWR0aCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlOdW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgc2NyZWVuLiAgTm9ybWFsbHkgdGhpcyBpcyBzZXQgYnkgdGhlIHRlcm1pbmFsCisJaW5pdGlhbGl6YXRpb24gYW5kIGRvZXMgbm90IGhhdmUgdG8gYmUgc2V0IGJ5IGhhbmQuCisJV2hlbiBWaW0gaXMgcnVubmluZyBpbiB0aGUgR1VJIG9yIGluIGEgcmVzaXphYmxlIHdpbmRvdywgc2V0dGluZyB0aGlzCisJb3B0aW9uIHdpbGwgY2F1c2UgdGhlIHdpbmRvdyBzaXplIHRvIGJlIGNoYW5nZWQuICBXaGVuIHlvdSBvbmx5IHdhbnQKKwl0byB1c2UgdGhlIHNpemUgZm9yIHRoZSBHVUksIHB1dCB0aGUgY29tbWFuZCBpbiB5b3VyIHxndmltcmN8IGZpbGUuCisJV2hlbiB5b3Ugc2V0IHRoaXMgb3B0aW9uIGFuZCBWaW0gaXMgdW5hYmxlIHRvIGNoYW5nZSB0aGUgcGh5c2ljYWwKKwludW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgZGlzcGxheSwgdGhlIGRpc3BsYXkgbWF5IGJlIG1lc3NlZCB1cC4KKworCQkJCQkqJ2NvbW1lbnRzJyogKidjb20nKiAqRTUyNCogKkU1MjUqCisnY29tbWVudHMnICdjb20nCXN0cmluZwkoZGVmYXVsdAorCQkJCSJzMTovKixtYjoqLGV4OiovLDovLyxiOiMsOiUsOlhDT01NLG46PixmYjotIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjb21tZW50c3wKKwkJCWZlYXR1cmV9CisJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmdzIHRoYXQgY2FuIHN0YXJ0IGEgY29tbWVudCBsaW5lLiAgU2VlCisJfGZvcm1hdC1jb21tZW50c3wuICBTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IHVzaW5nIGJhY2tzbGFzaGVzIHRvCisJaW5zZXJ0IGEgc3BhY2UuCisKKwkJCQkJKidjb21tZW50c3RyaW5nJyogKidjbXMnKiAqRTUzNyoKKydjb21tZW50c3RyaW5nJyAnY21zJwlzdHJpbmcJKGRlZmF1bHQgIi8qJXMqLyIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJQSB0ZW1wbGF0ZSBmb3IgYSBjb21tZW50LiAgVGhlICIlcyIgaW4gdGhlIHZhbHVlIGlzIHJlcGxhY2VkIHdpdGggdGhlCisJY29tbWVudCB0ZXh0LiAgQ3VycmVudGx5IG9ubHkgdXNlZCB0byBhZGQgbWFya2VycyBmb3IgZm9sZGluZywgc2VlCisJfGZvbGQtbWFya2VyfC4KKworCQkJKidjb21wYXRpYmxlJyogKidjcCcqIConbm9jb21wYXRpYmxlJyogKidub2NwJyoKKydjb21wYXRpYmxlJyAnY3AnCWJvb2xlYW4JKGRlZmF1bHQgb24sIG9mZiB3aGVuIGEgLnZpbXJjIGZpbGUgaXMgZm91bmQpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gaGFzIHRoZSBlZmZlY3Qgb2YgbWFraW5nIFZpbSBlaXRoZXIgbW9yZSBWaS1jb21wYXRpYmxlLCBvcgorCW1ha2UgVmltIGJlaGF2ZSBpbiBhIG1vcmUgdXNlZnVsIHdheS4KKwlUaGlzIGlzIGEgc3BlY2lhbCBraW5kIG9mIG9wdGlvbiwgYmVjYXVzZSB3aGVuIGl0J3Mgc2V0IG9yIHJlc2V0LAorCW90aGVyIG9wdGlvbnMgYXJlIGFsc28gY2hhbmdlZCBhcyBhIHNpZGUgZWZmZWN0LiAgQ0FSRUZVTDogU2V0dGluZyBvcgorCXJlc2V0dGluZyB0aGlzIG9wdGlvbiBjYW4gaGF2ZSBhIGxvdCBvZiB1bmV4cGVjdGVkIGVmZmVjdHM6IE1hcHBpbmdzCisJYXJlIGludGVycHJldGVkIGluIGFub3RoZXIgd2F5LCB1bmRvIGJlaGF2ZXMgZGlmZmVyZW50bHksIGV0Yy4JSWYgeW91CisJc2V0IHRoaXMgb3B0aW9uIGluIHlvdXIgdmltcmMgZmlsZSwgeW91IHNob3VsZCBwcm9iYWJseSBwdXQgaXQgYXQgdGhlCisJdmVyeSBzdGFydC4KKwlCeSBkZWZhdWx0IHRoaXMgb3B0aW9uIGlzIG9uIGFuZCB0aGUgVmkgZGVmYXVsdHMgYXJlIHVzZWQgZm9yIHRoZQorCW9wdGlvbnMuICBUaGlzIGRlZmF1bHQgd2FzIGNob3NlbiBmb3IgdGhvc2UgcGVvcGxlIHdobyB3YW50IHRvIHVzZSBWaW0KKwlqdXN0IGxpa2UgVmksIGFuZCBkb24ndCBldmVuICh3YW50IHRvKSBrbm93IGFib3V0IHRoZSAnY29tcGF0aWJsZScKKwlvcHRpb24uCisJV2hlbiBhICIudmltcmMiIGZpbGUgaXMgZm91bmQgd2hpbGUgVmltIGlzIHN0YXJ0aW5nIHVwLCB0aGlzIG9wdGlvbiBpcworCXN3aXRjaGVkIG9mZiwgYW5kIGFsbCBvcHRpb25zIHRoYXQgaGF2ZSBub3QgYmVlbiBtb2RpZmllZCB3aWxsIGJlIHNldAorCXRvIHRoZSBWaW0gZGVmYXVsdHMuICBFZmZlY3RpdmVseSwgdGhpcyBtZWFucyB0aGF0IHdoZW4gYSAiLnZpbXJjIgorCWZpbGUgZXhpc3RzLCBWaW0gd2lsbCB1c2UgdGhlIFZpbSBkZWZhdWx0cywgb3RoZXJ3aXNlIGl0IHdpbGwgdXNlIHRoZQorCVZpIGRlZmF1bHRzLiAgKE5vdGU6IFRoaXMgZG9lc24ndCBoYXBwZW4gZm9yIHRoZSBzeXN0ZW0td2lkZSB2aW1yYworCWZpbGUpLglBbHNvIHNlZSB8Y29tcGF0aWJsZS1kZWZhdWx0fC4KKwlZb3UgY2FuIGFsc28gc2V0IHRoaXMgb3B0aW9uIHdpdGggdGhlICItQyIgYXJndW1lbnQsIGFuZCByZXNldCBpdCB3aXRoCisJIi1OIi4gIFNlZSB8LUN8IGFuZCB8LU58LgorCVN3aXRjaGluZyB0aGlzIG9wdGlvbiBvZmYgbWFrZXMgdGhlIFZpbSBkZWZhdWx0cyBiZSB1c2VkIGZvciBvcHRpb25zCisJdGhhdCBoYXZlIGEgZGlmZmVyZW50IFZpIGFuZCBWaW0gZGVmYXVsdCB2YWx1ZS4gIFNlZSB0aGUgb3B0aW9ucworCW1hcmtlZCB3aXRoIGEgJysnIGJlbG93LiAgT3RoZXIgb3B0aW9ucyBhcmUgbm90IG1vZGlmaWVkLgorCUF0IHRoZSBtb21lbnQgdGhpcyBvcHRpb24gaXMgc2V0LCBzZXZlcmFsIG90aGVyIG9wdGlvbnMgd2lsbCBiZSBzZXQKKwlvciByZXNldCB0byBtYWtlIFZpbSBhcyBWaS1jb21wYXRpYmxlIGFzIHBvc3NpYmxlLiAgU2VlIHRoZSB0YWJsZQorCWJlbG93LglUaGlzIGNhbiBiZSB1c2VkIGlmIHlvdSB3YW50IHRvIHJldmVydCB0byBWaSBjb21wYXRpYmxlCisJZWRpdGluZy4KKwlTZWUgYWxzbyAnY3BvcHRpb25zJy4KKworCW9wdGlvbgkJKyBzZXQgdmFsdWUJZWZmZWN0CX4KKworCSdhbGxvd3JldmlucycJICBvZmYJCW5vIENUUkwtXyBjb21tYW5kCisJJ2JhY2t1cGNvcHknCSAgVW5peDogInllcyIJICBiYWNrdXAgZmlsZSBpcyBhIGNvcHkKKwkJCSAgb3RoZXJzOiAiYXV0byIgIGNvcHkgb3IgcmVuYW1lIGJhY2t1cCBmaWxlCisJJ2JhY2tzcGFjZScJICAiIgkJbm9ybWFsIGJhY2tzcGFjZQorCSdiYWNrdXAnCSAgb2ZmCQlubyBiYWNrdXAgZmlsZQorCSdjaW5kZW50JwkgIG9mZgkJbm8gQyBjb2RlIGluZGVudGF0aW9uCisJJ2NlZGl0JwkJKyAiIgkJbm8ga2V5IHRvIG9wZW4gdGhlIHxjbWR3aW58CisJJ2Nwb3B0aW9ucycJKyAoYWxsIGZsYWdzKQlWaS1jb21wYXRpYmxlIGZsYWdzCisJJ2NzY29wZXRhZycJICBvZmYJCWRvbid0IHVzZSBjc2NvcGUgZm9yICI6dGFnIgorCSdjc2NvcGV0YWdvcmRlcicgIDAJCXNlZSB8Y3Njb3BldGFnb3JkZXJ8CisJJ2NzY29wZXZlcmJvc2UnCSAgb2ZmCQlzZWUgfGNzY29wZXZlcmJvc2V8CisJJ2RpZ3JhcGgnCSAgb2ZmCQlubyBkaWdyYXBocworCSdlc2NrZXlzJwkrIG9mZgkJbm8gPEVzYz4ta2V5cyBpbiBJbnNlcnQgbW9kZQorCSdleHBhbmR0YWInCSAgb2ZmCQl0YWJzIG5vdCBleHBhbmRlZCB0byBzcGFjZXMKKwknZmlsZWZvcm1hdHMnCSsgIiIJCW5vIGF1dG9tYXRpYyBmaWxlIGZvcm1hdCBkZXRlY3Rpb24sCisJCQkgICJkb3MsdW5peCIJZXhjZXB0IGZvciBET1MsIFdpbmRvd3MgYW5kIE9TLzIKKwknZm9ybWF0b3B0aW9ucycJKyAidnQiCQlWaSBjb21wYXRpYmxlIGZvcm1hdHRpbmcKKwknZ2RlZmF1bHQnCSAgb2ZmCQlubyBkZWZhdWx0ICdnJyBmbGFnIGZvciAiOnMiCisJJ2hpc3RvcnknCSsgMAkJbm8gY29tbWFuZGxpbmUgaGlzdG9yeQorCSdoa21hcCcJCSAgb2ZmCQlubyBIZWJyZXcga2V5Ym9hcmQgbWFwcGluZworCSdoa21hcHAnCSAgb2ZmCQlubyBwaG9uZXRpYyBIZWJyZXcga2V5Ym9hcmQgbWFwcGluZworCSdobHNlYXJjaCcJICBvZmYJCW5vIGhpZ2hsaWdodGluZyBvZiBzZWFyY2ggbWF0Y2hlcworCSdpbmNzZWFyY2gnCSAgb2ZmCQlubyBpbmNyZW1lbnRhbCBzZWFyY2hpbmcKKwknaW5kZW50ZXhwcicJICAiIgkJbm8gaW5kZW50aW5nIGJ5IGV4cHJlc3Npb24KKwknaW5zZXJ0bW9kZScJICBvZmYJCWRvIG5vdCBzdGFydCBpbiBJbnNlcnQgbW9kZQorCSdpc2tleXdvcmQnCSsgIkAsNDgtNTcsXyIJa2V5d29yZHMgY29udGFpbiBhbHBoYW51bWVyaWMKKwkJCQkJCWNoYXJhY3RlcnMgYW5kICdfJworCSdqb2luc3BhY2VzJwkgIG9uCQlpbnNlcnQgMiBzcGFjZXMgYWZ0ZXIgcGVyaW9kCisJJ21vZGVsaW5lJwkrIG9mZgkJbm8gbW9kZWxpbmVzCisJJ21vcmUnCQkrIG9mZgkJbm8gcGF1c2VzIGluIGxpc3RpbmdzCisJJ3JldmlucycJICBvZmYJCW5vIHJldmVyc2UgaW5zZXJ0CisJJ3J1bGVyJwkJICBvZmYJCW5vIHJ1bGVyCisJJ3Njcm9sbGp1bXAnCSAgMQkJbm8ganVtcCBzY3JvbGwKKwknc2Nyb2xsb2ZmJwkgIDAJCW5vIHNjcm9sbCBvZmZzZXQKKwknc2hpZnRyb3VuZCcJICBvZmYJCWluZGVudCBub3Qgcm91bmRlZCB0byBzaGlmdHdpZHRoCisJJ3Nob3J0bWVzcycJKyAiIgkJbm8gc2hvcnRlbmluZyBvZiBtZXNzYWdlcworCSdzaG93Y21kJwkrIG9mZgkJY29tbWFuZCBjaGFyYWN0ZXJzIG5vdCBzaG93bgorCSdzaG93bW9kZScJKyBvZmYJCWN1cnJlbnQgbW9kZSBub3Qgc2hvd24KKwknc21hcnRjYXNlJwkgIG9mZgkJbm8gYXV0b21hdGljIGlnbm9yZSBjYXNlIHN3aXRjaAorCSdzbWFydGluZGVudCcJICBvZmYJCW5vIHNtYXJ0IGluZGVudGF0aW9uCisJJ3NtYXJ0dGFiJwkgIG9mZgkJbm8gc21hcnQgdGFiIHNpemUKKwknc29mdHRhYnN0b3AnCSAgMAkJdGFicyBhcmUgYWx3YXlzICd0YWJzdG9wJyBwb3NpdGlvbnMKKwknc3RhcnRvZmxpbmUnCSAgb24JCWdvdG8gc3RhcnRvZmxpbmUgd2l0aCBzb21lIGNvbW1hbmRzCisJJ3RhZ3JlbGF0aXZlJwkrIG9mZgkJdGFnIGZpbGUgbmFtZXMgYXJlIG5vdCByZWxhdGl2ZQorCSd0ZXh0YXV0bycJKyBvZmYJCW5vIGF1dG9tYXRpYyB0ZXh0bW9kZSBkZXRlY3Rpb24KKwkndGV4dHdpZHRoJwkgIDAJCW5vIGF1dG9tYXRpYyBsaW5lIHdyYXAKKwkndGlsZGVvcCcJICBvZmYJCXRpbGRlIGlzIG5vdCBhbiBvcGVyYXRvcgorCSd0dGltZW91dCcJICBvZmYJCW5vIHRlcm1pbmFsIHRpbWVvdXQKKwknd2hpY2h3cmFwJwkrICIiCQlsZWZ0LXJpZ2h0IG1vdmVtZW50cyBkb24ndCB3cmFwCisJJ3dpbGRjaGFyJwkrIENUUkwtRQlvbmx5IHdoZW4gdGhlIGN1cnJlbnQgdmFsdWUgaXMgPFRhYj4KKwkJCQkJdXNlIENUUkwtRSBmb3IgY21kbGluZSBjb21wbGV0aW9uCisJJ3dyaXRlYmFja3VwJwkgIG9uIG9yIG9mZglkZXBlbmRzIG9uICt3cml0ZWJhY2t1cCBmZWF0dXJlCisKKwkJCQkJCSonY29tcGxldGUnKiAqJ2NwdCcqICpFNTM1KgorJ2NvbXBsZXRlJyAnY3B0JwlzdHJpbmcJKGRlZmF1bHQ6ICIuLHcsYix1LHQsaSIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gc3BlY2lmaWVzIGhvdyBrZXl3b3JkIGNvbXBsZXRpb24gfGlucy1jb21wbGV0aW9ufCB3b3JrcworCXdoZW4gQ1RSTC1QIG9yIENUUkwtTiBhcmUgdXNlZC4gIEl0IGlzIGFsc28gdXNlZCBmb3Igd2hvbGUtbGluZQorCWNvbXBsZXRpb24gfGlfQ1RSTC1YX0NUUkwtTHwuICBJdCBpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgY29tcGxldGlvbgorCWFuZCB0aGUgcGxhY2VzIHRvIHNjYW4uICBJdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZsYWdzOgorCS4Jc2NhbiB0aGUgY3VycmVudCBidWZmZXIgKCd3cmFwc2NhbicgaXMgaWdub3JlZCkKKwl3CXNjYW4gYnVmZmVycyBmcm9tIG90aGVyIHdpbmRvd3MKKwliCXNjYW4gb3RoZXIgbG9hZGVkIGJ1ZmZlcnMgdGhhdCBhcmUgaW4gdGhlIGJ1ZmZlciBsaXN0CisJdQlzY2FuIHRoZSB1bmxvYWRlZCBidWZmZXJzIHRoYXQgYXJlIGluIHRoZSBidWZmZXIgbGlzdAorCVUJc2NhbiB0aGUgYnVmZmVycyB0aGF0IGFyZSBub3QgaW4gdGhlIGJ1ZmZlciBsaXN0CisJawlzY2FuIHRoZSBmaWxlcyBnaXZlbiB3aXRoIHRoZSAnZGljdGlvbmFyeScgb3B0aW9uCisJa3tkaWN0fQlzY2FuIHRoZSBmaWxlIHtkaWN0fS4gIFNldmVyYWwgImsiIGZsYWdzIGNhbiBiZSBnaXZlbiwKKwkJcGF0dGVybnMgYXJlIHZhbGlkIHRvby4gIEZvciBleGFtcGxlOiA+CisJCQk6c2V0IGNwdD1rL3Vzci9kaWN0Lyosa34vc3BhbmlzaAorPAlzCXNjYW4gdGhlIGZpbGVzIGdpdmVuIHdpdGggdGhlICd0aGVzYXVydXMnIG9wdGlvbgorCXN7dHNyfQlzY2FuIHRoZSBmaWxlIHt0c3J9LiAgU2V2ZXJhbCAicyIgZmxhZ3MgY2FuIGJlIGdpdmVuLCBwYXR0ZXJucworCQlhcmUgdmFsaWQgdG9vLgorCWkJc2NhbiBjdXJyZW50IGFuZCBpbmNsdWRlZCBmaWxlcworCWQJc2NhbiBjdXJyZW50IGFuZCBpbmNsdWRlZCBmaWxlcyBmb3IgZGVmaW5lZCBuYW1lIG9yIG1hY3JvCisJCXxpX0NUUkwtWF9DVFJMLUR8CisJXQl0YWcgY29tcGxldGlvbgorCXQJc2FtZSBhcyAiXSIKKworCVVubG9hZGVkIGJ1ZmZlcnMgYXJlIG5vdCBsb2FkZWQsIHRodXMgdGhlaXIgYXV0b2NtZHMgfDphdXRvY21kfCBhcmUKKwlub3QgZXhlY3V0ZWQsIHRoaXMgbWF5IGxlYWQgdG8gdW5leHBlY3RlZCBjb21wbGV0aW9ucyBmcm9tIHNvbWUgZmlsZXMKKwkoZ3ppcHBlZCBmaWxlcyBmb3IgZXhhbXBsZSkuICBVbmxvYWRlZCBidWZmZXJzIGFyZSBub3Qgc2Nhbm5lZCBmb3IKKwl3aG9sZS1saW5lIGNvbXBsZXRpb24uCisKKwlUaGUgZGVmYXVsdCBpcyAiLix3LGIsdSx0LGkiLCB3aGljaCBtZWFucyB0byBzY2FuOgorCSAgIDEuIHRoZSBjdXJyZW50IGJ1ZmZlcgorCSAgIDIuIGJ1ZmZlcnMgaW4gb3RoZXIgd2luZG93cworCSAgIDMuIG90aGVyIGxvYWRlZCBidWZmZXJzCisJICAgNC4gdW5sb2FkZWQgYnVmZmVycworCSAgIDUuIHRhZ3MKKwkgICA2LiBpbmNsdWRlZCBmaWxlcworCisJQXMgeW91IGNhbiBzZWUsIENUUkwtTiBhbmQgQ1RSTC1QIGNhbiBiZSB1c2VkIHRvIGRvIGFueSAnaXNrZXl3b3JkJy0KKwliYXNlZCBleHBhbnNpb24gKGVnIGRpY3Rpb25hcnkgfGlfQ1RSTC1YX0NUUkwtS3wsIGluY2x1ZGVkIHBhdHRlcm5zCisJfGlfQ1RSTC1YX0NUUkwtSXwsIHRhZ3MgfGlfQ1RSTC1YX0NUUkwtXXwgYW5kIG5vcm1hbCBleHBhbnNpb25zKQorCisJCQkJKidjb25maXJtJyogKidjZicqIConbm9jb25maXJtJyogKidub2NmJyoKKydjb25maXJtJyAnY2YnCQlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuICdjb25maXJtJyBpcyBvbiwgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgd291bGQgbm9ybWFsbHkKKwlmYWlsIGJlY2F1c2Ugb2YgdW5zYXZlZCBjaGFuZ2VzIHRvIGEgYnVmZmVyLCBlLmcuICI6cSIgYW5kICI6ZSIsCisJaW5zdGVhZCByYWlzZSBhIHxkaWFsb2d8IGFza2luZyBpZiB5b3Ugd2lzaCB0byBzYXZlIHRoZSBjdXJyZW50CisJZmlsZShzKS4gIFlvdSBjYW4gc3RpbGwgdXNlIGEgISB0byB1bmNvbmRpdGlvbmFsbHkgfGFiYW5kb258IGEgYnVmZmVyLgorCUlmICdjb25maXJtJyBpcyBvZmYgeW91IGNhbiBzdGlsbCBhY3RpdmF0ZSBjb25maXJtYXRpb24gZm9yIG9uZQorCWNvbW1hbmQgb25seSAodGhpcyBpcyBtb3N0IHVzZWZ1bCBpbiBtYXBwaW5ncykgd2l0aCB0aGUgfDpjb25maXJtfAorCWNvbW1hbmQuCisJQWxzbyBzZWUgdGhlIHxjb25maXJtKCl8IGZ1bmN0aW9uIGFuZCB0aGUgJ3YnIGZsYWcgaW4gJ2d1aW9wdGlvbnMnLgorCisJCQkqJ2NvbnNrZXknKiAqJ2NvbnNrJyogKidub2NvbnNrZXknKiAqJ25vY29uc2snKgorJ2NvbnNrZXknICdjb25zaycJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9ICB7b25seSBmb3IgTVMtRE9TfQorCVdoZW4gb24gZGlyZWN0IGNvbnNvbGUgSS9PIGlzIHVzZWQgdG8gb2J0YWluIGEga2V5Ym9hcmQgY2hhcmFjdGVyLgorCVRoaXMgc2hvdWxkIHdvcmsgaW4gbW9zdCBjYXNlcy4gIEFsc28gc2VlIHwnYmlvc2tleSd8LglUb2dldGhlciwKKwl0aHJlZSBtZXRob2RzIG9mIGNvbnNvbGUgaW5wdXQgYXJlIGF2YWlsYWJsZToKKwknY29uc2tleScgICAnYmlvc2tleScJICAgIGFjdGlvbiB+CisJICAgb24JICAgICBvbiBvciBvZmYJICAgIGRpcmVjdCBjb25zb2xlIGlucHV0CisJICAgb2ZmCQlvbgkgICAgQklPUworCSAgIG9mZgkJb2ZmCSAgICBTVERJTgorCisJCQkqJ2NvcHlpbmRlbnQnKiAqJ2NpJyogKidub2NvcHlpbmRlbnQnKiAqJ25vY2knKgorJ2NvcHlpbmRlbnQnICdjaScJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJQ29weSB0aGUgc3RydWN0dXJlIG9mIHRoZSBleGlzdGluZyBsaW5lcyBpbmRlbnQgd2hlbiBhdXRvaW5kZW50aW5nIGEKKwluZXcgbGluZS4gIE5vcm1hbGx5IHRoZSBuZXcgaW5kZW50IGlzIHJlY29uc3RydWN0ZWQgYnkgYSBzZXJpZXMgb2YKKwl0YWJzIGZvbGxvd2VkIGJ5IHNwYWNlcyBhcyByZXF1aXJlZCAodW5sZXNzIHwnZXhwYW5kdGFiJ3wgaXMgZW5hYmxlZCwKKwlpbiB3aGljaCBjYXNlIG9ubHkgc3BhY2VzIGFyZSB1c2VkKS4gIEVuYWJsaW5nIHRoaXMgb3B0aW9uIG1ha2VzIHRoZQorCW5ldyBsaW5lIGNvcHkgd2hhdGV2ZXIgY2hhcmFjdGVycyB3ZXJlIHVzZWQgZm9yIGluZGVudGluZyBvbiB0aGUKKwlleGlzdGluZyBsaW5lLiAgSWYgdGhlIG5ldyBpbmRlbnQgaXMgZ3JlYXRlciB0aGFuIG9uIHRoZSBleGlzdGluZworCWxpbmUsIHRoZSByZW1haW5pbmcgc3BhY2UgaXMgZmlsbGVkIGluIHRoZSBub3JtYWwgbWFubmVyLgorCU5PVEU6ICdjb3B5aW5kZW50JyBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisJQWxzbyBzZWUgJ3ByZXNlcnZlaW5kZW50Jy4KKworCQkJCQkJKidjcG9wdGlvbnMnKiAqJ2NwbycqCisnY3BvcHRpb25zJyAnY3BvJwlzdHJpbmcJKFZpbSBkZWZhdWx0OiAiYUFCY2VGcyIsCisJCQkJIFZpIGRlZmF1bHQ6ICBhbGwgZmxhZ3MpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJQSBzZXF1ZW5jZSBvZiBzaW5nbGUgY2hhcmFjdGVyIGZsYWdzLiAgV2hlbiBhIGNoYXJhY3RlciBpcyBwcmVzZW50CisJdGhpcyBpbmRpY2F0ZXMgdmktY29tcGF0aWJsZSBiZWhhdmlvci4JVGhpcyBpcyB1c2VkIGZvciB0aGluZ3Mgd2hlcmUKKwlub3QgYmVpbmcgdmktY29tcGF0aWJsZSBpcyBtb3N0bHkgb3Igc29tZXRpbWVzIHByZWZlcnJlZC4KKwknY3BvcHRpb25zJyBzdGFuZHMgZm9yICJjb21wYXRpYmxlLW9wdGlvbnMiLgorCUNvbW1hcyBjYW4gYmUgYWRkZWQgZm9yIHJlYWRhYmlsaXR5LgorCVRvIGF2b2lkIHByb2JsZW1zIHdpdGggZmxhZ3MgdGhhdCBhcmUgYWRkZWQgaW4gdGhlIGZ1dHVyZSwgdXNlIHRoZQorCSIrPSIgYW5kICItPSIgZmVhdHVyZSBvZiAiOnNldCIgfGFkZC1vcHRpb24tZmxhZ3N8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJICAgIGNvbnRhaW5zCWJlaGF2aW9yCX4KKwkJCQkJCQkJKmNwby1hKgorCQlhCVdoZW4gaW5jbHVkZWQsIGEgIjpyZWFkIiBjb21tYW5kIHdpdGggYSBmaWxlIG5hbWUKKwkJCWFyZ3VtZW50IHdpbGwgc2V0IHRoZSBhbHRlcm5hdGUgZmlsZSBuYW1lIGZvciB0aGUKKwkJCWN1cnJlbnQgd2luZG93LgorCQkJCQkJCQkqY3BvLUEqCisJCUEJV2hlbiBpbmNsdWRlZCwgYSAiOndyaXRlIiBjb21tYW5kIHdpdGggYSBmaWxlIG5hbWUKKwkJCWFyZ3VtZW50IHdpbGwgc2V0IHRoZSBhbHRlcm5hdGUgZmlsZSBuYW1lIGZvciB0aGUKKwkJCWN1cnJlbnQgd2luZG93LgorCQkJCQkJCQkqY3BvLWIqCisJCWIJIlx8IiBpbiBhICI6bWFwIiBjb21tYW5kIGlzIHJlY29nbml6ZWQgYXMgdGhlIGVuZCBvZgorCQkJdGhlIG1hcCBjb21tYW5kLiAgVGhlICdcJyBpcyBpbmNsdWRlZCBpbiB0aGUgbWFwcGluZywKKwkJCXRoZSB0ZXh0IGFmdGVyIHRoZSAnfCcgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5leHQKKwkJCWNvbW1hbmQuICBVc2UgYSBDVFJMLVYgaW5zdGVhZCBvZiBhIGJhY2tzbGFzaCB0bworCQkJaW5jbHVkZSB0aGUgJ3wnIGluIHRoZSBtYXBwaW5nLiAgQXBwbGllcyB0byBhbGwKKwkJCW1hcHBpbmcsIGFiYnJldmlhdGlvbiwgbWVudSBhbmQgYXV0b2NtZCBjb21tYW5kcy4KKwkJCVNlZSBhbHNvIHxtYXBfYmFyfC4KKwkJCQkJCQkJKmNwby1CKgorCQlCCUEgYmFja3NsYXNoIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgaW4gbWFwcGluZ3MsCisJCQlhYmJyZXZpYXRpb25zIGFuZCB0aGUgInRvIiBwYXJ0IG9mIHRoZSBtZW51IGNvbW1hbmRzLgorCQkJUmVtb3ZlIHRoaXMgZmxhZyB0byBiZSBhYmxlIHRvIHVzZSBhIGJhY2tzbGFzaCBsaWtlIGEKKwkJCUNUUkwtVi4gIEZvciBleGFtcGxlLCB0aGUgY29tbWFuZCAiOm1hcCBYIFw8RXNjPiIKKwkJCXJlc3VsdHMgaW4gWCBiZWluZyBtYXBwZWQgdG86CisJCQkJJ0InIGluY2x1ZGVkOgkiXF5bIgkgKF5bIGlzIGEgcmVhbCA8RXNjPikKKwkJCQknQicgZXhjbHVkZWQ6CSI8RXNjPiIgICg1IGNoYXJhY3RlcnMpCisJCQkJKCc8JyBleGNsdWRlZCBpbiBib3RoIGNhc2VzKQorCQkJCQkJCQkqY3BvLWMqCisJCWMJU2VhcmNoaW5nIGNvbnRpbnVlcyBhdCB0aGUgZW5kIG9mIGFueSBtYXRjaCBhdCB0aGUKKwkJCWN1cnNvciBwb3NpdGlvbiwgYnV0IG5vdCBmdXJ0aGVyIHRoYW4gdGhlIHN0YXJ0IG9mIHRoZQorCQkJbmV4dCBsaW5lLiAgV2hlbiBub3QgcHJlc2VudCBzZWFyY2hpbmcgY29udGludWVzCisJCQlvbmUgY2hhcmFjdGVyIGZyb20gdGhlIGN1cnNvciBwb3NpdGlvbi4gIFdpdGggJ2MnCisJCQkiYWJhYmFiYWJhYmFiIiBvbmx5IGdldHMgdGhyZWUgbWF0Y2hlcyB3aGVuIHJlcGVhdGluZworCQkJIi9hYmFiIiwgd2l0aG91dCAnYycgdGhlcmUgYXJlIGZpdmUgbWF0Y2hlcy4KKwkJCQkJCQkJKmNwby1DKgorCQlDCURvIG5vdCBjb25jYXRlbmF0ZSBzb3VyY2VkIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCBhCisJCQliYWNrc2xhc2guICBTZWUgfGxpbmUtY29udGludWF0aW9ufC4KKwkJCQkJCQkJKmNwby1kKgorCQlkCVVzaW5nICIuLyIgaW4gdGhlICd0YWdzJyBvcHRpb24gZG9lc24ndCBtZWFuIHRvIHVzZQorCQkJdGhlIHRhZ3MgZmlsZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBmaWxlLCBidXQgdGhlCisJCQl0YWdzIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCQkJCQkJCQkqY3BvLUQqCisJCUQJQ2FuJ3QgdXNlIENUUkwtSyB0byBlbnRlciBhIGRpZ3JhcGggYWZ0ZXIgTm9ybWFsIG1vZGUKKwkJCWNvbW1hbmRzIHdpdGggYSBjaGFyYWN0ZXIgYXJndW1lbnQsIGxpa2UgfHJ8LCB8ZnwgYW5kCisJCQl8dHwuCisJCQkJCQkJCSpjcG8tZSoKKwkJZQlXaGVuIGV4ZWN1dGluZyBhIHJlZ2lzdGVyIHdpdGggIjpAciIsIGFsd2F5cyBhZGQgYQorCQkJPENSPiB0byB0aGUgbGFzdCBsaW5lLCBhbHNvIHdoZW4gdGhlIHJlZ2lzdGVyIGlzIG5vdAorCQkJbGluZXdpc2UuICBJZiB0aGlzIGZsYWcgaXMgbm90IHByZXNlbnQsIHRoZSByZWdpc3RlcgorCQkJaXMgbm90IGxpbmV3aXNlIGFuZCB0aGUgbGFzdCBsaW5lIGRvZXMgbm90IGVuZCBpbiBhCisJCQk8Q1I+LCB0aGVuIHRoZSBsYXN0IGxpbmUgaXMgcHV0IG9uIHRoZSBjb21tYW5kLWxpbmUKKwkJCWFuZCBjYW4gYmUgZWRpdGVkIGJlZm9yZSBoaXR0aW5nIDxDUj4uCisJCQkJCQkJCSpjcG8tRSoKKwkJRQlJdCBpcyBhbiBlcnJvciB3aGVuIHVzaW5nICJ5IiwgImQiLCAiYyIsICJnfiIsICJndSIgb3IKKwkJCSJnVSIgb24gYW4gRW1wdHkgcmVnaW9uLiAgVGhlIG9wZXJhdG9ycyBvbmx5IHdvcmsgd2hlbgorCQkJYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBpcyB0byBiZSBvcGVyYXRlIG9uLiAgRXhhbXBsZToKKwkJCVRoaXMgbWFrZXMgInkwIiBmYWlsIGluIHRoZSBmaXJzdCBjb2x1bW4uCisJCQkJCQkJCSpjcG8tZioKKwkJZglXaGVuIGluY2x1ZGVkLCBhICI6cmVhZCIgY29tbWFuZCB3aXRoIGEgZmlsZSBuYW1lCisJCQlhcmd1bWVudCB3aWxsIHNldCB0aGUgZmlsZSBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIsCisJCQlpZiB0aGUgY3VycmVudCBidWZmZXIgZG9lc24ndCBoYXZlIGEgZmlsZSBuYW1lIHlldC4KKwkJCQkJCQkJKmNwby1GKgorCQlGCVdoZW4gaW5jbHVkZWQsIGEgIjp3cml0ZSIgY29tbWFuZCB3aXRoIGEgZmlsZSBuYW1lCisJCQlhcmd1bWVudCB3aWxsIHNldCB0aGUgZmlsZSBuYW1lIGZvciB0aGUgY3VycmVudAorCQkJYnVmZmVyLCBpZiB0aGUgY3VycmVudCBidWZmZXIgZG9lc24ndCBoYXZlIGEgZmlsZSBuYW1lCisJCQl5ZXQuCisJCQkJCQkJCSpjcG8tZyoKKwkJZwlHb3RvIGxpbmUgMSB3aGVuIHVzaW5nICI6ZWRpdCIgd2l0aG91dCBhcmd1bWVudC4KKwkJCQkJCQkJKmNwby1pKgorCQlpCVdoZW4gaW5jbHVkZWQsIGludGVycnVwdGluZyB0aGUgcmVhZGluZyBvZiBhIGZpbGUgd2lsbAorCQkJbGVhdmUgaXQgbW9kaWZpZWQuCisJCQkJCQkJCSpjcG8taioKKwkJaglXaGVuIGpvaW5pbmcgbGluZXMsIG9ubHkgYWRkIHR3byBzcGFjZXMgYWZ0ZXIgYSAnLicsCisJCQlub3QgYWZ0ZXIgJyEnIG9yICc/Jy4gIEFsc28gc2VlICdqb2luc3BhY2VzJy4KKwkJCQkJCQkJKmNwby1KKgorCQlKCUEgfHNlbnRlbmNlfCBoYXMgdG8gYmUgZm9sbG93ZWQgYnkgdHdvIHNwYWNlcyBhZnRlcgorCQkJdGhlICcuJywgJyEnIG9yICc/Jy4gQSA8VGFiPiBpcyBub3QgcmVjb2duaXplZCBhcworCQkJd2hpdGUgc3BhY2UuCisJCQkJCQkJCSpjcG8tayoKKwkJawlEaXNhYmxlIHRoZSByZWNvZ25pdGlvbiBvZiByYXcga2V5IGNvZGVzIGluCisJCQltYXBwaW5ncywgYWJicmV2aWF0aW9ucywgYW5kIHRoZSAidG8iIHBhcnQgb2YgbWVudQorCQkJY29tbWFuZHMuICBGb3IgZXhhbXBsZSwgaWYgPEtleT4gc2VuZHMgXltPQSAod2hlcmUgXlsKKwkJCWlzIDxFc2M+KSwgdGhlIGNvbW1hbmQgIjptYXAgWCBeW09BIiByZXN1bHRzIGluIFgKKwkJCWJlaW5nIG1hcHBlZCB0bzoKKwkJCQknaycgaW5jbHVkZWQ6CSJeW09BIgkgKDMgY2hhcmFjdGVycykKKwkJCQknaycgZXhjbHVkZWQ6CSI8S2V5PiIgIChvbmUga2V5IGNvZGUpCisJCQlBbHNvIHNlZSB0aGUgJzwnIGZsYWcgYmVsb3cuCisJCQkJCQkJCSpjcG8tSyoKKwkJSwlEb24ndCB3YWl0IGZvciBhIGtleSBjb2RlIHRvIGNvbXBsZXRlIHdoZW4gaXQgaXMKKwkJCWhhbGZ3YXkgYSBtYXBwaW5nLiAgVGhpcyBicmVha3MgbWFwcGluZyA8RjE+PEYxPiB3aGVuCisJCQlvbmx5IHBhcnQgb2YgdGhlIHNlY29uZCA8RjE+IGhhcyBiZWVuIHJlYWQuICBJdAorCQkJZW5hYmxlcyBjYW5jZWxsaW5nIHRoZSBtYXBwaW5nIGJ5IHR5cGluZyA8RjE+PEVzYz4uCisJCQkJCQkJCSpjcG8tbCoKKwkJbAlCYWNrc2xhc2ggaW4gYSBbXSByYW5nZSBpbiBhIHNlYXJjaCBwYXR0ZXJuIGlzIHRha2VuCisJCQlsaXRlcmFsbHksIG9ubHkgIlxdIiBpcyBzcGVjaWFsICBTZWUgfC9bXXwKKwkJCSAgICdsJyBpbmNsdWRlZDogIi9bIFx0XSIgIGZpbmRzIDxTcGFjZT4sICdcJyBhbmQgJ3QnCisJCQkgICAnbCcgZXhjbHVkZWQ6ICIvWyBcdF0iICBmaW5kcyA8U3BhY2U+IGFuZCA8VGFiPgorCQkJCQkJCQkqY3BvLUwqCisJCUwJV2hlbiB0aGUgJ2xpc3QnIG9wdGlvbiBpcyBzZXQsICd3cmFwbWFyZ2luJywKKwkJCSd0ZXh0d2lkdGgnLCAnc29mdHRhYnN0b3AnIGFuZCBWaXJ0dWFsIFJlcGxhY2UgbW9kZQorCQkJKHNlZSB8Z1J8KSBjb3VudCBhIDxUYWI+IGFzIHR3byBjaGFyYWN0ZXJzLCBpbnN0ZWFkIG9mCisJCQl0aGUgbm9ybWFsIGJlaGF2aW9yIG9mIGEgPFRhYj4uCisJCQkJCQkJCSpjcG8tbSoKKwkJbQlXaGVuIGluY2x1ZGVkLCBhIHNob3dtYXRjaCB3aWxsIGFsd2F5cyB3YWl0IGhhbGYgYQorCQkJc2Vjb25kLiAgV2hlbiBub3QgaW5jbHVkZWQsIGEgc2hvd21hdGNoIHdpbGwgd2FpdCBoYWxmCisJCQlhIHNlY29uZCBvciB1bnRpbCBhIGNoYXJhY3RlciBpcyB0eXBlZC4gIHwnc2hvd21hdGNoJ3wKKwkJCQkJCQkJKmNwby1NKgorCQlNCVdoZW4gZXhjbHVkZWQsICIlIiBtYXRjaGluZyB3aWxsIHRha2UgYmFja3NsYXNoZXMgaW50bworCQkJYWNjb3VudC4gIFRodXMgaW4gIiggXCggKSIgYW5kICJcKCAoIFwpIiB0aGUgb3V0ZXIKKwkJCXBhcmVudGhlc2lzIG1hdGNoLiAgV2hlbiBpbmNsdWRlZCAiJSIgaWdub3JlcworCQkJYmFja3NsYXNoZXMsIHdoaWNoIGlzIFZpIGNvbXBhdGlibGUuCisJCQkJCQkJCSpjcG8tbioKKwkJbglXaGVuIGluY2x1ZGVkLCB0aGUgY29sdW1uIHVzZWQgZm9yICdudW1iZXInIHdpbGwgYWxzbworCQkJYmUgdXNlZCBmb3IgdGV4dCBvZiB3cmFwcGVkIGxpbmVzLgorCQkJCQkJCQkqY3BvLW8qCisJCW8JTGluZSBvZmZzZXQgdG8gc2VhcmNoIGNvbW1hbmQgaXMgbm90IHJlbWVtYmVyZWQgZm9yCisJCQluZXh0IHNlYXJjaC4KKwkJCQkJCQkJKmNwby1PKgorCQlPCURvbid0IGNvbXBsYWluIGlmIGEgZmlsZSBpcyBiZWluZyBvdmVyd3JpdHRlbiwgZXZlbgorCQkJd2hlbiBpdCBkaWRuJ3QgZXhpc3Qgd2hlbiBlZGl0aW5nIGl0LiAgVGhpcyBpcyBhCisJCQlwcm90ZWN0aW9uIGFnYWluc3QgYSBmaWxlIHVuZXhwZWN0ZWRseSBjcmVhdGVkIGJ5CisJCQlzb21lb25lIGVsc2UuICBWaSBkaWRuJ3QgY29tcGxhaW4gYWJvdXQgdGhpcy4KKwkJCQkJCQkJKmNwby1wKgorCQlwCVZpIGNvbXBhdGlibGUgTGlzcCBpbmRlbnRpbmcuICBXaGVuIG5vdCBwcmVzZW50LCBhCisJCQlzbGlnaHRseSBiZXR0ZXIgYWxnb3JpdGhtIGlzIHVzZWQuCisJCQkJCQkJCSpjcG8tcioKKwkJcglSZWRvICgiLiIgY29tbWFuZCkgdXNlcyAiLyIgdG8gcmVwZWF0IGEgc2VhcmNoCisJCQljb21tYW5kLCBpbnN0ZWFkIG9mIHRoZSBhY3R1YWxseSB1c2VkIHNlYXJjaCBzdHJpbmcuCisJCQkJCQkJCSpjcG8tUioKKwkJUglSZW1vdmUgbWFya3MgZnJvbSBmaWx0ZXJlZCBsaW5lcy4gIFdpdGhvdXQgdGhpcyBmbGFnCisJCQltYXJrcyBhcmUga2VwdCBsaWtlIHw6a2VlcG1hcmtzfCB3YXMgdXNlZC4KKwkJCQkJCQkJKmNwby1zKgorCQlzCVNldCBidWZmZXIgb3B0aW9ucyB3aGVuIGVudGVyaW5nIHRoZSBidWZmZXIgZm9yIHRoZQorCQkJZmlyc3QgdGltZS4gIFRoaXMgaXMgbGlrZSBpdCBpcyBpbiBWaW0gdmVyc2lvbiAzLjAuCisJCQlBbmQgaXQgaXMgdGhlIGRlZmF1bHQuCUlmIG5vdCBwcmVzZW50IHRoZSBvcHRpb25zIGFyZQorCQkJc2V0IHdoZW4gdGhlIGJ1ZmZlciBpcyBjcmVhdGVkLgorCQkJCQkJCQkqY3BvLVMqCisJCVMJU2V0IGJ1ZmZlciBvcHRpb25zIGFsd2F5cyB3aGVuIGVudGVyaW5nIGEgYnVmZmVyCisJCQkoZXhjZXB0ICdyZWFkb25seScsICdmaWxlZm9ybWF0JywgJ2ZpbGV0eXBlJyBhbmQKKwkJCSdzeW50YXgnKS4gIFRoaXMgaXMgdGhlIChtb3N0KSBWaSBjb21wYXRpYmxlIHNldHRpbmcuCisJCQlUaGUgb3B0aW9ucyBhcmUgc2V0IHRvIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnJlbnQKKwkJCWJ1ZmZlci4gIFdoZW4geW91IGNoYW5nZSBhbiBvcHRpb24gYW5kIGdvIHRvIGFub3RoZXIKKwkJCWJ1ZmZlciwgdGhlIHZhbHVlIGlzIGNvcGllZC4gIEVmZmVjdGl2ZWx5IG1ha2VzIHRoZQorCQkJYnVmZmVyIG9wdGlvbnMgZ2xvYmFsIHRvIGFsbCBidWZmZXJzLgorCisJCQkncycgICAgJ1MnICAgICBjb3B5IGJ1ZmZlciBvcHRpb25zCisJCQlubyAgICAgbm8gICAgICB3aGVuIGJ1ZmZlciBjcmVhdGVkCisJCQl5ZXMgICAgbm8gICAgICB3aGVuIGJ1ZmZlciBmaXJzdCBlbnRlcmVkIChkZWZhdWx0KQorCQkJIFggICAgIHllcyAgICAgZWFjaCB0aW1lIHdoZW4gYnVmZmVyIGVudGVyZWQgKHZpIGNvbXAuKQorCQkJCQkJCQkqY3BvLXQqCisJCXQJU2VhcmNoIHBhdHRlcm4gZm9yIHRoZSB0YWcgY29tbWFuZCBpcyByZW1lbWJlcmVkIGZvcgorCQkJIm4iIGNvbW1hbmQuICBPdGhlcndpc2UgVmltIG9ubHkgcHV0cyB0aGUgcGF0dGVybiBpbgorCQkJdGhlIGhpc3RvcnkgZm9yIHNlYXJjaCBwYXR0ZXJuLCBidXQgZG9lc24ndCBjaGFuZ2UgdGhlCisJCQlsYXN0IHVzZWQgc2VhcmNoIHBhdHRlcm4uCisJCQkJCQkJCSpjcG8tdSoKKwkJdQlVbmRvIGlzIFZpIGNvbXBhdGlibGUuCVNlZSB8dW5kby10d28td2F5c3wuCisJCQkJCQkJCSpjcG8tdioKKwkJdglCYWNrc3BhY2VkIGNoYXJhY3RlcnMgcmVtYWluIHZpc2libGUgb24gdGhlIHNjcmVlbiBpbgorCQkJSW5zZXJ0IG1vZGUuICBXaXRob3V0IHRoaXMgZmxhZyB0aGUgY2hhcmFjdGVycyBhcmUKKwkJCWVyYXNlZCBmcm9tIHRoZSBzY3JlZW4gcmlnaHQgYXdheS4gIFdpdGggdGhpcyBmbGFnIHRoZQorCQkJc2NyZWVuIG5ld2x5IHR5cGVkIHRleHQgb3ZlcndyaXRlcyBiYWNrc3BhY2VkCisJCQljaGFyYWN0ZXJzLgorCQkJCQkJCQkqY3BvLXcqCisJCXcJV2hlbiB1c2luZyAiY3ciIG9uIGEgYmxhbmsgY2hhcmFjdGVyLCBvbmx5IGNoYW5nZSBvbmUKKwkJCWNoYXJhY3RlciBhbmQgbm90IGFsbCBibGFua3MgdW50aWwgdGhlIHN0YXJ0IG9mIHRoZQorCQkJbmV4dCB3b3JkLgorCQkJCQkJCQkqY3BvLVcqCisJCVcJRG9uJ3Qgb3ZlcndyaXRlIGEgcmVhZG9ubHkgZmlsZS4gIFdoZW4gb21pdHRlZCwgIjp3ISIKKwkJCW92ZXJ3cml0ZXMgYSByZWFkb25seSBmaWxlLCBpZiBwb3NzaWJsZS4KKwkJCQkJCQkJKmNwby14KgorCQl4CTxFc2M+IG9uIHRoZSBjb21tYW5kLWxpbmUgZXhlY3V0ZXMgdGhlIGNvbW1hbmQtbGluZS4KKwkJCVRoZSBkZWZhdWx0IGluIFZpbSBpcyB0byBhYmFuZG9uIHRoZSBjb21tYW5kLWxpbmUsCisJCQliZWNhdXNlIDxFc2M+IG5vcm1hbGx5IGFib3J0cyBhIGNvbW1hbmQuICB8Y188RXNjPnwKKwkJCQkJCQkJKmNwby15KgorCQl5CUEgeWFuayBjb21tYW5kIGNhbiBiZSByZWRvbmUgd2l0aCAiLiIuCisJCQkJCQkJCSpjcG8tISoKKwkJIQlXaGVuIHJlZG9pbmcgYSBmaWx0ZXIgY29tbWFuZCwgdXNlIHRoZSBsYXN0IHVzZWQKKwkJCWV4dGVybmFsIGNvbW1hbmQsIHdoYXRldmVyIGl0IHdhcy4gIE90aGVyd2lzZSB0aGUgbGFzdAorCQkJdXNlZCAtZmlsdGVyLSBjb21tYW5kIGlzIHVzZWQuCisJCQkJCQkJCSpjcG8tJCoKKwkJJAlXaGVuIG1ha2luZyBhIGNoYW5nZSB0byBvbmUgbGluZSwgZG9uJ3QgcmVkaXNwbGF5IHRoZQorCQkJbGluZSwgYnV0IHB1dCBhICckJyBhdCB0aGUgZW5kIG9mIHRoZSBjaGFuZ2VkIHRleHQuCisJCQlUaGUgY2hhbmdlZCB0ZXh0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2hlbiB5b3UgdHlwZSB0aGUKKwkJCW5ldyB0ZXh0LiAgVGhlIGxpbmUgaXMgcmVkaXNwbGF5ZWQgaWYgeW91IHR5cGUgYW55CisJCQljb21tYW5kIHRoYXQgbW92ZXMgdGhlIGN1cnNvciBmcm9tIHRoZSBpbnNlcnRpb24KKwkJCXBvaW50LgorCQkJCQkJCQkqY3BvLSUqCisJCSUJVmktY29tcGF0aWJsZSBtYXRjaGluZyBpcyBkb25lIGZvciB0aGUgIiUiIGNvbW1hbmQuCisJCQlEb2VzIG5vdCByZWNvZ25pemUgIiNpZiIsICIjZW5kaWYiLCBldGMuCisJCQlEb2VzIG5vdCByZWNvZ25pemUgIi8qIiBhbmQgIiovIi4KKwkJCVBhcmVucyBpbnNpZGUgc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVzIGFyZSBhbHNvCisJCQljb3VudGVkLCBjYXVzaW5nIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBwYXJlbiB0bworCQkJZGlzdHVyYiB0aGUgbWF0Y2hpbmcuICBGb3IgZXhhbXBsZSwgaW4gYSBsaW5lIGxpa2UKKwkJCSJpZiAoc3RyY21wKCJmb28oIiwgcykpIiB0aGUgZmlyc3QgcGFyZW4gZG9lcyBub3QKKwkJCW1hdGNoIHRoZSBsYXN0IG9uZS4gIFdoZW4gdGhpcyBmbGFnIGlzIG5vdCBpbmNsdWRlZCwKKwkJCXBhcmVucyBpbnNpZGUgc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVzIGFyZSB0cmVhdGVkCisJCQlzcGVjaWFsbHkuICBXaGVuIG1hdGNoaW5nIGEgcGFyZW4gb3V0c2lkZSBvZiBxdW90ZXMsCisJCQlldmVyeXRoaW5nIGluc2lkZSBxdW90ZXMgaXMgaWdub3JlZC4gIFdoZW4gbWF0Y2hpbmcgYQorCQkJcGFyZW4gaW5zaWRlIHF1b3RlcywgaXQgd2lsbCBmaW5kIHRoZSBtYXRjaGluZyBvbmUgKGlmCisJCQl0aGVyZSBpcyBvbmUpLglUaGlzIHdvcmtzIHZlcnkgd2VsbCBmb3IgQyBwcm9ncmFtcy4KKwkJCQkJCQkJKmNwby1zdGFyKgorCQkqCVVzZSAiOioiIGluIHRoZSBzYW1lIHdheSBhcyAiOkAiLiAgV2hlbiBub3QgaW5jbHVkZWQsCisJCQkiOioiIGlzIGFuIGFsaWFzIGZvciAiOic8LCc+Iiwgc2VsZWN0IHRoZSBWaXN1YWwgYXJlYS4KKwkJCQkJCQkJKmNwby08KgorCQk8CURpc2FibGUgdGhlIHJlY29nbml0aW9uIG9mIHNwZWNpYWwga2V5IGNvZGVzIGluIHw8PnwKKwkJCWZvcm0gaW4gbWFwcGluZ3MsIGFiYnJldmlhdGlvbnMsIGFuZCB0aGUgInRvIiBwYXJ0IG9mCisJCQltZW51IGNvbW1hbmRzLglGb3IgZXhhbXBsZSwgdGhlIGNvbW1hbmQKKwkJCSI6bWFwIFggPFRhYj4iIHJlc3VsdHMgaW4gWCBiZWluZyBtYXBwZWQgdG86CisJCQkJJzwnIGluY2x1ZGVkOgkiPFRhYj4iICAoNSBjaGFyYWN0ZXJzKQorCQkJCSc8JyBleGNsdWRlZDoJIl5JIgkgKF5JIGlzIGEgcmVhbCA8VGFiPikKKwkJCUFsc28gc2VlIHRoZSAnaycgZmxhZyBhYm92ZS4KKworCQkJCQkJKidjc2NvcGVwYXRoY29tcCcqIConY3NwYycqCisnY3Njb3BlcGF0aGNvbXAnICdjc3BjJwludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWdsb2JhbAorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NzY29wZXwKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCURldGVybWluZXMgaG93IG1hbnkgY29tcG9uZW50cyBvZiB0aGUgcGF0aCB0byBzaG93IGluIGEgbGlzdCBvZiB0YWdzLgorCVNlZSB8Y3Njb3BlcGF0aGNvbXB8LgorCisJCQkJCQkqJ2NzY29wZXByZycqIConY3NwcmcnKgorJ2NzY29wZXByZycgJ2NzcHJnJwlzdHJpbmcJKGRlZmF1bHQgImNzY29wZSIpCisJCQlnbG9iYWwKKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjc2NvcGV8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlTcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZSBjc2NvcGUuICBTZWUgfGNzY29wZXByZ3wuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ2NzY29wZXF1aWNrZml4JyogKidjc3FmJyoKKydjc2NvcGVxdWlja2ZpeCcgJ2NzcWYnIHN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NzY29wZXwKKwkJCW9yIHwrcXVpY2tmaXh8IGZlYXR1cmVzfQorCQkJe25vdCBpbiBWaX0KKwlTcGVjaWZpZXMgd2hldGhlciB0byB1c2UgcXVpY2tmaXggd2luZG93IHRvIHNob3cgY3Njb3BlIHJlc3VsdHMuCisJU2VlIHxjc2NvcGVxdWlja2ZpeHwuCisKKwkJCQkqJ2NzY29wZXRhZycqIConY3N0JyogKidub2NzY29wZXRhZycqIConbm9jc3QnKgorJ2NzY29wZXRhZycgJ2NzdCcJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjc2NvcGV8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlVc2UgY3Njb3BlIGZvciB0YWcgY29tbWFuZHMuICBTZWUgfGNzY29wZS1vcHRpb25zfC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonY3Njb3BldGFnb3JkZXInKiAqJ2NzdG8nKgorJ2NzY29wZXRhZ29yZGVyJyAnY3N0bycJbnVtYmVyCShkZWZhdWx0IDApCisJCQlnbG9iYWwKKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjc2NvcGV8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlEZXRlcm1pbmVzIHRoZSBvcmRlciBpbiB3aGljaCAiOmNzdGFnIiBwZXJmb3JtcyBhIHNlYXJjaC4gIFNlZQorCXxjc2NvcGV0YWdvcmRlcnwuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIDAgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCSonY3Njb3BldmVyYm9zZScqIConY3N2ZXJiJyoKKwkJCQkJKidub2NzY29wZXZlcmJvc2UnKiAqJ25vY3N2ZXJiJyoKKydjc2NvcGV2ZXJib3NlJyAnY3N2ZXJiJyBib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NzY29wZXwKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCUdpdmUgbWVzc2FnZXMgd2hlbiBhZGRpbmcgYSBjc2NvcGUgZGF0YWJhc2UuICBTZWUgfGNzY29wZXZlcmJvc2V8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidkZWJ1ZycqCisnZGVidWcnCQkJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gc2V0IHRvICJtc2ciLCBlcnJvciBtZXNzYWdlcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBvbWl0dGVkIHdpbGwKKwliZSBnaXZlbiBhbnl3YXkuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZyAnZm9sZGV4cHInIG9yCisJJ2luZGVudGV4cHInLgorCisJCQkJCQkqJ2RlZmluZScqIConZGVmJyoKKydkZWZpbmUnICdkZWYnCQlzdHJpbmcJKGRlZmF1bHQgIl5ccyojXHMqZGVmaW5lIikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJUGF0dGVybiB0byBiZSB1c2VkIHRvIGZpbmQgYSBtYWNybyBkZWZpbml0aW9uLglJdCBpcyBhIHNlYXJjaAorCXBhdHRlcm4sIGp1c3QgbGlrZSBmb3IgdGhlICIvIiBjb21tYW5kLiAgVGhpcyBvcHRpb24gaXMgdXNlZCBmb3IgdGhlCisJY29tbWFuZHMgbGlrZSAiW2kiIGFuZCAiW2QiIHxpbmNsdWRlLXNlYXJjaHwuICBUaGUgJ2lzaWRlbnQnIG9wdGlvbiBpcworCXVzZWQgdG8gcmVjb2duaXplIHRoZSBkZWZpbmVkIG5hbWUgYWZ0ZXIgdGhlIG1hdGNoOgorCQl7bWF0Y2ggd2l0aCAnZGVmaW5lJ317bm9uLUlEIGNoYXJzfXtkZWZpbmVkIG5hbWV9e25vbi1JRCBjaGFyfQorCVNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5zZXJ0aW5nIGJhY2tzbGFzaGVzIHRvIGluY2x1ZGUgYSBzcGFjZQorCW9yIGJhY2tzbGFzaC4KKwlUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmb3IgQyBwcm9ncmFtcy4gIEZvciBDKysgdGhpcyB2YWx1ZSB3b3VsZCBiZQorCXVzZWZ1bCwgdG8gaW5jbHVkZSBjb25zdCB0eXBlIGRlY2xhcmF0aW9uczogPgorCQleXCgjXHMqZGVmaW5lXHxbYS16XSpccypjb25zdFxzKlthLXpdKlwpCis8CVdoZW4gdXNpbmcgdGhlICI6c2V0IiBjb21tYW5kLCB5b3UgbmVlZCB0byBkb3VibGUgdGhlIGJhY2tzbGFzaGVzIQorCisJCQkqJ2RlbGNvbWJpbmUnKiAqJ2RlY28nKiAqJ25vZGVsY29tYmluZScqIConbm9kZWNvJyoKKydkZWxjb21iaW5lJyAnZGVjbycJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGV8CisJCQlmZWF0dXJlfQorCUlmIGVkaXRpbmcgVW5pY29kZSBhbmQgdGhpcyBvcHRpb24gaXMgc2V0LCBiYWNrc3BhY2UgYW5kIE5vcm1hbCBtb2RlCisJIngiIGRlbGV0ZSBlYWNoIGNvbWJpbmluZyBjaGFyYWN0ZXIgb24gaXRzIG93bi4gIFdoZW4gaXQgaXMgb2ZmICh0aGUKKwlkZWZhdWx0KSB0aGUgY2hhcmFjdGVyIGFsb25nIHdpdGggaXRzIGNvbWJpbmluZyBjaGFyYWN0ZXJzIGFyZQorCWRlbGV0ZWQuCisJTm90ZTogV2hlbiAnZGVsY29tYmluZScgaXMgc2V0ICJ4eCIgbWF5IHdvcmsgZGlmZmVyZW50IGZyb20gIjJ4IiEKKworCVRoaXMgaXMgdXNlZnVsIGZvciBBcmFiaWMsIEhlYnJldyBhbmQgbWFueSBvdGhlciBsYW5ndWFnZXMgd2hlcmUgb25lCisJbWF5IGhhdmUgY29tYmluaW5nIGNoYXJhY3RlcnMgb3ZlcnRvcCBvZiBiYXNlIGNoYXJhY3RlcnMsIGFuZCB3YW50CisJdG8gcmVtb3ZlIG9ubHkgdGhlIGNvbWJpbmluZyBvbmVzLgorCisJCQkJCQkqJ2RpY3Rpb25hcnknKiAqJ2RpY3QnKgorJ2RpY3Rpb25hcnknICdkaWN0JwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCUxpc3Qgb2YgZmlsZSBuYW1lcywgc2VwYXJhdGVkIGJ5IGNvbW1hcywgdGhhdCBhcmUgdXNlZCB0byBsb29rdXAgd29yZHMKKwlmb3Iga2V5d29yZCBjb21wbGV0aW9uIGNvbW1hbmRzIHxpX0NUUkwtWF9DVFJMLUt8LiAgRWFjaCBmaWxlIHNob3VsZAorCWNvbnRhaW4gYSBsaXN0IG9mIHdvcmRzLiAgVGhpcyBjYW4gYmUgb25lIHdvcmQgcGVyIGxpbmUsIG9yIHNldmVyYWwKKwl3b3JkcyBwZXIgbGluZSwgc2VwYXJhdGVkIGJ5IG5vbi1rZXl3b3JkIGNoYXJhY3RlcnMgKHdoaXRlIHNwYWNlIGlzCisJcHJlZmVycmVkKS4gIE1heGltdW0gbGluZSBsZW5ndGggaXMgNTEwIGJ5dGVzLgorCVRvIGluY2x1ZGUgYSBjb21tYSBpbiBhIGZpbGUgbmFtZSBwcmVjZWRlIGl0IHdpdGggYSBiYWNrc2xhc2guCVNwYWNlcworCWFmdGVyIGEgY29tbWEgYXJlIGlnbm9yZWQsIG90aGVyd2lzZSBzcGFjZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBmaWxlCisJbmFtZS4gIFNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgdXNpbmcgYmFja3NsYXNoZXMuCisJV2hlcmUgdG8gZmluZCBhIGxpc3Qgb2Ygd29yZHM/CisJLSBPbiBGcmVlQlNELCB0aGVyZSBpcyB0aGUgZmlsZSAiL3Vzci9zaGFyZS9kaWN0L3dvcmRzIi4KKwktIEluIHRoZSBTaW10ZWwgYXJjaGl2ZSwgbG9vayBpbiB0aGUgIm1zZG9zL2xpbmd1aXN0IiBkaXJlY3RvcnkuCisJLSBJbiAibWlzY2ZpbGVzIiBvZiB0aGUgR05VIGNvbGxlY3Rpb24uCisJVGhlIHVzZSBvZiB8OnNldCs9fCBhbmQgfDpzZXQtPXwgaXMgcHJlZmVycmVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nCisJZGlyZWN0b3JpZXMgZnJvbSB0aGUgbGlzdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdoZW4gYSBmdXR1cmUgdmVyc2lvbgorCXVzZXMgYW5vdGhlciBkZWZhdWx0LgorCUJhY2t0aWNrcyBjYW5ub3QgYmUgdXNlZCBpbiB0aGlzIG9wdGlvbiBmb3Igc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJCSonZGlmZicqIConbm9kaWZmJyoKKydkaWZmJwkJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2RpZmZ8CisJCQlmZWF0dXJlfQorCUpvaW4gdGhlIGN1cnJlbnQgd2luZG93IGluIHRoZSBncm91cCBvZiB3aW5kb3dzIHRoYXQgc2hvd3MgZGlmZmVyZW5jZXMKKwliZXR3ZWVuIGZpbGVzLglTZWUgfHZpbWRpZmZ8LgorCisJCQkJCQkqJ2RleCcqIConZGlmZmV4cHInKgorJ2RpZmZleHByJyAnZGV4JwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZGlmZnwKKwkJCWZlYXR1cmV9CisJRXhwcmVzc2lvbiB3aGljaCBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIGFuIGVkLXN0eWxlIGRpZmYgZmlsZSBmcm9tIHR3bworCXZlcnNpb25zIG9mIGEgZmlsZS4gIFNlZSB8ZGlmZi1kaWZmZXhwcnwuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ2RpcCcqIConZGlmZm9wdCcqCisnZGlmZm9wdCcgJ2RpcCcJCXN0cmluZwkoZGVmYXVsdCAiZmlsbGVyIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtkaWZmfAorCQkJZmVhdHVyZX0KKwlPcHRpb24gc2V0dGluZ3MgZm9yIGRpZmYgbW9kZS4JSXQgY2FuIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBpdGVtcy4KKwlBbGwgYXJlIG9wdGlvbmFsLiAgSXRlbXMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgYSBjb21tYS4KKworCQlmaWxsZXIJCVNob3cgZmlsbGVyIGxpbmVzLCB0byBrZWVwIHRoZSB0ZXh0CisJCQkJc3luY2hyb25pemVkIHdpdGggYSB3aW5kb3cgdGhhdCBoYXMgaW5zZXJ0ZWQKKwkJCQlsaW5lcyBhdCB0aGUgc2FtZSBwb3NpdGlvbi4gIE1vc3RseSB1c2VmdWwKKwkJCQl3aGVuIHdpbmRvd3MgYXJlIHNpZGUtYnktc2lkZSBhbmQgJ3Njcm9sbGJpbmQnCisJCQkJaXMgc2V0LgorCisJCWNvbnRleHQ6e259CVVzZSBhIGNvbnRleHQgb2Yge259IGxpbmVzIGJldHdlZW4gYSBjaGFuZ2UKKwkJCQlhbmQgYSBmb2xkIHRoYXQgY29udGFpbnMgdW5jaGFuZ2VkIGxpbmVzLgorCQkJCVdoZW4gb21pdHRlZCBhIGNvbnRleHQgb2Ygc2l4IGxpbmVzIGlzIHVzZWQuCisJCQkJU2VlIHxmb2xkLWRpZmZ8LgorCisJCWljYXNlCQlJZ25vcmUgY2hhbmdlcyBpbiBjYXNlIG9mIHRleHQuICAiYSIgYW5kICJBIgorCQkJCWFyZSBjb25zaWRlcmVkIHRoZSBzYW1lLiAgQWRkcyB0aGUgIi1pIiBmbGFnCisJCQkJdG8gdGhlICJkaWZmIiBjb21tYW5kIGlmICdkaWZmZXhwcicgaXMgZW1wdHkuCisKKwkJaXdoaXRlCQlJZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGUgc3BhY2UuICBBZGRzCisJCQkJdGhlICItYiIgZmxhZyB0byB0aGUgImRpZmYiIGNvbW1hbmQgaWYKKwkJCQknZGlmZmV4cHInIGlzIGVtcHR5LiAgQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24KKwkJCQlvZiB0aGUgImRpZmYiIGNvbW1hbmQgZm9yIHdoYXQgdGhpcyBkb2VzCisJCQkJZXhhY3RseS4gIEl0IHNob3VsZCBpZ25vcmUgYWRkaW5nIHRyYWlsaW5nCisJCQkJd2hpdGUgc3BhY2UsIGJ1dCBub3QgbGVhZGluZyB3aGl0ZSBzcGFjZS4KKworCUV4YW1wbGVzOiA+CisKKwkJOnNldCBkaWZmb3B0PWZpbGxlcixjb250ZXh0OjQKKwkJOnNldCBkaWZmb3B0PQorCQk6c2V0IGRpZmZvcHQ9ZmlsbGVyCis8CisJCQkJICAgICAqJ2RpZ3JhcGgnKiAqJ2RnJyogKidub2RpZ3JhcGgnKiAqJ25vZGcnKgorJ2RpZ3JhcGgnICdkZycJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2RpZ3JhcGhzfAorCQkJZmVhdHVyZX0KKwlFbmFibGUgdGhlIGVudGVyaW5nIG9mIGRpZ3JhcGhzIGluIEluc2VydCBtb2RlIHdpdGgge2NoYXIxfSA8QlM+CisJe2NoYXIyfS4gIFNlZSB8ZGlncmFwaHN8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidkaXJlY3RvcnknKiAqJ2RpcicqCisnZGlyZWN0b3J5JyAnZGlyJwlzdHJpbmcJKGRlZmF1bHQgZm9yIEFtaWdhOiAiLix0OiIsCisJCQkJIGZvciBNUy1ET1MgYW5kIFdpbjMyOiAiLixjOlx0bXAsYzpcdGVtcCIKKwkJCQkgZm9yIFVuaXg6ICIuLH4vdG1wLC92YXIvdG1wLC90bXAiKQorCQkJZ2xvYmFsCisJTGlzdCBvZiBkaXJlY3RvcnkgbmFtZXMgZm9yIHRoZSBzd2FwIGZpbGUsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcy4KKwktIFRoZSBzd2FwIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBmaXJzdCBkaXJlY3Rvcnkgd2hlcmUgdGhpcyBpcworCSAgcG9zc2libGUuCisJLSBFbXB0eSBtZWFucyB0aGF0IG5vIHN3YXAgZmlsZSB3aWxsIGJlIHVzZWQgKHJlY292ZXJ5IGlzCisJICBpbXBvc3NpYmxlISkuCisJLSBBIGRpcmVjdG9yeSAiLiIgbWVhbnMgdG8gcHV0IHRoZSBzd2FwIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzCisJICB0aGUgZWRpdGVkIGZpbGUuICBPbiBVbml4LCBhIGRvdCBpcyBwcmVwZW5kZWQgdG8gdGhlIGZpbGUgbmFtZSwgc28KKwkgIGl0IGRvZXNuJ3Qgc2hvdyBpbiBhIGRpcmVjdG9yeSBsaXN0aW5nLiAgT24gTVMtV2luZG93cyB0aGUgImhpZGRlbiIKKwkgIGF0dHJpYnV0ZSBpcyBzZXQgYW5kIGEgZG90IHByZXBlbmRlZCBpZiBwb3NzaWJsZS4KKwktIEEgZGlyZWN0b3J5IHN0YXJ0aW5nIHdpdGggIi4vIiAob3IgIi5cIiBmb3IgTVMtRE9TIGV0LmFsLikgbWVhbnMgdG8KKwkgIHB1dCB0aGUgc3dhcCBmaWxlIHJlbGF0aXZlIHRvIHdoZXJlIHRoZSBlZGl0ZWQgZmlsZSBpcy4gIFRoZSBsZWFkaW5nCisJICAiLiIgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcGF0aCBuYW1lIG9mIHRoZSBlZGl0ZWQgZmlsZS4KKwktIEZvciBVbml4IGFuZCBXaW4zMiwgaWYgYSBkaXJlY3RvcnkgZW5kcyBpbiB0d28gcGF0aCBzZXBhcmF0b3JzLCB0aGUKKwkgIHN3YXAgZmlsZSBuYW1lIHdpbGwgYmUgYnVpbHQgZnJvbSB0aGUgY29tcGxldGUgcGF0aCB0byB0aGUgZmlsZQorCSAgd2l0aCBhbGwgcGF0aCBzZXBhcmF0b3JzIHN1YnN0aXR1dGVkIHRvIHBlcmNlbnQgJyUnIHNpZ25zLiBUaGlzIHdpbGwKKwkgIGVuc3VyZSBmaWxlIG5hbWUgdW5pcXVlbmVzcyBpbiB0aGUgcHJlc2VydmUgZGlyZWN0b3J5LgorCS0gU3BhY2VzIGFmdGVyIHRoZSBjb21tYSBhcmUgaWdub3JlZCwgb3RoZXIgc3BhY2VzIGFyZSBjb25zaWRlcmVkIHBhcnQKKwkgIG9mIHRoZSBkaXJlY3RvcnkgbmFtZS4gIFRvIGhhdmUgYSBzcGFjZSBhdCB0aGUgc3RhcnQgb2YgYSBkaXJlY3RvcnkKKwkgIG5hbWUsIHByZWNlZGUgaXQgd2l0aCBhIGJhY2tzbGFzaC4KKwktIFRvIGluY2x1ZGUgYSBjb21tYSBpbiBhIGRpcmVjdG9yeSBuYW1lIHByZWNlZGUgaXQgd2l0aCBhIGJhY2tzbGFzaC4KKwktIEEgZGlyZWN0b3J5IG5hbWUgbWF5IGVuZCBpbiBhbiAnOicgb3IgJy8nLgorCS0gRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LgorCS0gQ2FyZWZ1bCB3aXRoICdcJyBjaGFyYWN0ZXJzLCB0eXBlIG9uZSBiZWZvcmUgYSBzcGFjZSwgdHlwZSB0d28gdG8KKwkgIGdldCBvbmUgaW4gdGhlIG9wdGlvbiAoc2VlIHxvcHRpb24tYmFja3NsYXNofCksIGZvciBleGFtcGxlOiA+CisJICAgIDpzZXQgZGlyPWM6XFx0bXAsXCBkaXJcXCx3aXRoXFwsY29tbWFzLFxcXCBkaXJcIHdpdGhcIHNwYWNlcworPAktIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFZpbSB2ZXJzaW9uIDMuMCBhICc+JyBhdCB0aGUgc3RhcnQKKwkgIG9mIHRoZSBvcHRpb24gaXMgcmVtb3ZlZC4KKwlVc2luZyAiLiIgZmlyc3QgaW4gdGhlIGxpc3QgaXMgcmVjb21tZW5kZWQuICBUaGlzIG1lYW5zIHRoYXQgZWRpdGluZworCXRoZSBzYW1lIGZpbGUgdHdpY2Ugd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiAgVXNpbmcgIi90bXAiIG9uIFVuaXggaXMKKwlkaXNjb3VyYWdlZDogV2hlbiB0aGUgc3lzdGVtIGNyYXNoZXMgeW91IGxvc2UgdGhlIHN3YXAgZmlsZS4KKwkiL3Zhci90bXAiIGlzIG9mdGVuIG5vdCBjbGVhcmVkIHdoZW4gcmVib290aW5nLCB0aHVzIGlzIGEgYmV0dGVyCisJY2hvaWNlIHRoYW4gIi90bXAiLiAgQnV0IGl0IGNhbiBjb250YWluIGEgbG90IG9mIGZpbGVzLCB5b3VyIHN3YXAKKwlmaWxlcyBnZXQgbG9zdCBpbiB0aGUgY3Jvd2QuICBUaGF0IGlzIHdoeSBhICJ0bXAiIGRpcmVjdG9yeSBpbiB5b3VyCisJaG9tZSBkaXJlY3RvcnkgaXMgdHJpZWQgZmlyc3QuCisJVGhlIHVzZSBvZiB8OnNldCs9fCBhbmQgfDpzZXQtPXwgaXMgcHJlZmVycmVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nCisJZGlyZWN0b3JpZXMgZnJvbSB0aGUgbGlzdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdoZW4gYSBmdXR1cmUgdmVyc2lvbgorCXVzZXMgYW5vdGhlciBkZWZhdWx0LgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKwl7Vmk6IGRpcmVjdG9yeSB0byBwdXQgdGVtcCBmaWxlIGluLCBkZWZhdWx0cyB0byAiL3RtcCJ9CisKKwkJCQkJKidkaXNwbGF5JyogKidkeScqCisnZGlzcGxheScgJ2R5JwkJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUNoYW5nZSB0aGUgd2F5IHRleHQgaXMgZGlzcGxheWVkLiAgVGhpcyBpcyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZgorCWZsYWdzOgorCWxhc3RsaW5lCVdoZW4gaW5jbHVkZWQsIGFzIG11Y2ggYXMgcG9zc2libGUgb2YgdGhlIGxhc3QgbGluZQorCQkJaW4gYSB3aW5kb3cgd2lsbCBiZSBkaXNwbGF5ZWQuCVdoZW4gbm90IGluY2x1ZGVkLCBhCisJCQlsYXN0IGxpbmUgdGhhdCBkb2Vzbid0IGZpdCBpcyByZXBsYWNlZCB3aXRoICJAIiBsaW5lcy4KKwl1aGV4CQlTaG93IHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgaGV4YWRlY2ltYWwgYXMgPHh4PgorCQkJaW5zdGVhZCBvZiB1c2luZyBeQyBhbmQgfkMuCisKKwkJCQkJCSonZWFkaXJlY3Rpb24nKiAqJ2VhZCcqCisnZWFkaXJlY3Rpb24nICdlYWQnCXN0cmluZwkoZGVmYXVsdCAiYm90aCIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt2ZXJ0c3BsaXQKKwkJCWZlYXR1cmV9CisJVGVsbHMgd2hlbiB0aGUgJ2VxdWFsYWx3YXlzJyBvcHRpb24gYXBwbGllczoKKwkJdmVyCXZlcnRpY2FsbHksIHdpZHRoIG9mIHdpbmRvd3MgaXMgbm90IGFmZmVjdGVkCisJCWhvcglob3Jpem9udGFsbHksIGhlaWdodCBvZiB3aW5kb3dzIGlzIG5vdCBhZmZlY3RlZAorCQlib3RoCXdpZHRoIGFuZCBoZWlnaHQgb2Ygd2luZG93cyBpcyBhZmZlY3RlZAorCisJCQkgICAqJ2VkJyogKidlZGNvbXBhdGlibGUnKiAqJ25vZWQnKiAqJ25vZWRjb21wYXRpYmxlJyoKKydlZGNvbXBhdGlibGUnICdlZCcJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwlNYWtlcyB0aGUgJ2cnIGFuZCAnYycgZmxhZ3Mgb2YgdGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZCB0byBiZQorCXRvZ2dsZWQgZWFjaCB0aW1lIHRoZSBmbGFnIGlzIGdpdmVuLiAgU2VlIHxjb21wbGV4LWNoYW5nZXwuICBTZWUKKwlhbHNvICdnZGVmYXVsdCcgb3B0aW9uLgorCVN3aXRjaGluZyB0aGlzIG9wdGlvbiBvbiBpcyBkaXNjb3VyYWdlZCEKKworCQkJCQkqJ2VuY29kaW5nJyogKidlbmMnKiAqRTU0MyoKKydlbmNvZGluZycgJ2VuYycJc3RyaW5nIChkZWZhdWx0OiAibGF0aW4xIiBvciB2YWx1ZSBmcm9tICRMQU5HKQorCQkJZ2xvYmFsCisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGV8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlTZXRzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCBpbnNpZGUgVmltLiAgSXQgYXBwbGllcyB0byB0ZXh0IGluCisJdGhlIGJ1ZmZlcnMsIHJlZ2lzdGVycywgU3RyaW5ncyBpbiBleHByZXNzaW9ucywgdGV4dCBzdG9yZWQgaW4gdGhlCisJdmltaW5mbyBmaWxlLCBldGMuICBJdCBzZXRzIHRoZSBraW5kIG9mIGNoYXJhY3RlcnMgd2hpY2ggVmltIGNhbiB3b3JrCisJd2l0aC4gIFNlZSB8ZW5jb2RpbmctbmFtZXN8IGZvciB0aGUgcG9zc2libGUgdmFsdWVzLgorCisJTk9URTogQ2hhbmdpbmcgdGhpcyBvcHRpb24gd2lsbCBub3QgY2hhbmdlIHRoZSBlbmNvZGluZyBvZiB0aGUKKwlleGlzdGluZyB0ZXh0IGluIFZpbS4gIEl0IG1heSBjYXVzZSBtdWx0aS1ieXRlIHRleHQgdG8gYmVjb21lIGludmFsaWQuCisJSXQgc2hvdWxkIG5vcm1hbGx5IGJlIGtlcHQgYXQgaXRzIGRlZmF1bHQgdmFsdWUsIG9yIHNldCB3aGVuIFZpbQorCXN0YXJ0cyB1cC4gIFNlZSB8bXVsdGlieXRlfC4KKworCU5PVEU6IEZvciBHVEsrIDIgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHNldCAnZW5jb2RpbmcnIHRvCisJInV0Zi04Ii4gIEFsdGhvdWdoIGNhcmUgaGFzIGJlZW4gdGFrZW4gdG8gYWxsb3cgZGlmZmVyZW50IHZhbHVlcyBvZgorCSdlbmNvZGluZycsICJ1dGYtOCIgaXMgdGhlIG5hdHVyYWwgY2hvaWNlIGZvciB0aGUgZW52aXJvbm1lbnQgYW5kCisJYXZvaWRzIHVubmVjZXNzYXJ5IGNvbnZlcnNpb24gb3ZlcmhlYWQuICAidXRmLTgiIGhhcyBub3QgYmVlbiBtYWRlCisJdGhlIGRlZmF1bHQgdG8gcHJldmVudCBkaWZmZXJlbnQgYmVoYXZpb3VyIG9mIHRoZSBHVUkgYW5kIHRlcm1pbmFsCisJdmVyc2lvbnMsIGFuZCB0byBhdm9pZCBjaGFuZ2luZyB0aGUgZW5jb2Rpbmcgb2YgbmV3bHkgY3JlYXRlZCBmaWxlcworCXdpdGhvdXQgeW91ciBrbm93bGVkZ2UgKGluIGNhc2UgJ2ZpbGVlbmNvZGluZ3MnIGlzIGVtcHR5KS4KKworCVRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgZmlsZXMgY2FuIGJlIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycuCisJVGhpcyBpcyBzcGVjaWZpZWQgd2l0aCAnZmlsZWVuY29kaW5nJy4JVGhlIGNvbnZlcnNpb24gaXMgZG9uZSB3aXRoCisJaWNvbnYoKSBvciBhcyBzcGVjaWZpZWQgd2l0aCAnY2hhcmNvbnZlcnQnLgorCisJTm9ybWFsbHkgJ2VuY29kaW5nJyB3aWxsIGJlIGVxdWFsIHRvIHlvdXIgY3VycmVudCBsb2NhbGUuICBUaGlzIHdpbGwKKwliZSB0aGUgZGVmYXVsdCBpZiBWaW0gcmVjb2duaXplcyB5b3VyIGVudmlyb25tZW50IHNldHRpbmdzLiAgSWYKKwknZW5jb2RpbmcnIGlzIG5vdCBzZXQgdG8gdGhlIGN1cnJlbnQgbG9jYWxlLCAndGVybWVuY29kaW5nJyBtdXN0IGJlCisJc2V0IHRvIGNvbnZlcnQgdHlwZWQgYW5kIGRpc3BsYXllZCB0ZXh0LiAgU2VlIHxlbmNvZGluZy10YWJsZXwuCisKKwlXaGVuIHlvdSBzZXQgdGhpcyBvcHRpb24sIGl0IGZpcmVzIHRoZSB8RW5jb2RpbmdDaGFuZ2VkfCBhdXRvY29tbWFuZAorCWV2ZW50IHNvIHRoYXQgeW91IGNhbiBzZXQgdXAgZm9udHMgaWYgbmVjZXNzYXJ5LgorCisJV2hlbiB0aGUgb3B0aW9uIGlzIHNldCwgdGhlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuICBUaHVzCisJeW91IGNhbiBzZXQgaXQgd2l0aCB1cHBlcmNhc2UgdmFsdWVzIHRvby4gIFVuZGVyc2NvcmVzIGFyZSB0cmFuc2xhdGVkCisJdG8gJy0nIHNpZ25zLgorCVdoZW4gdGhlIGVuY29kaW5nIGlzIHJlY29nbml6ZWQsIGl0IGlzIGNoYW5nZWQgdG8gdGhlIHN0YW5kYXJkIG5hbWUuCisJRm9yIGV4YW1wbGUgIkxhdGluLTEiIGJlY29tZXMgImxhdGluMSIsICJJU09fODg1OTIiIGJlY29tZXMKKwkiaXNvLTg4NTktMiIgYW5kICJ1dGY4IiBiZWNvbWVzICJ1dGYtOCIuCisKKwlOb3RlOiAibGF0aW4xIiBpcyBhbHNvIHVzZWQgd2hlbiB0aGUgZW5jb2RpbmcgY291bGQgbm90IGJlIGRldGVjdGVkLgorCVRoaXMgb25seSB3b3JrcyB3aGVuIGVkaXRpbmcgZmlsZXMgaW4gdGhlIHNhbWUgZW5jb2RpbmchICBXaGVuIHRoZQorCWFjdHVhbCBjaGFyYWN0ZXIgc2V0IGlzIG5vdCBsYXRpbjEsIG1ha2Ugc3VyZSAnZmlsZWVuY29kaW5nJyBhbmQKKwknZmlsZWVuY29kaW5ncycgYXJlIGVtcHR5LiAgV2hlbiBjb252ZXJzaW9uIGlzIG5lZWRlZCwgc3dpdGNoIHRvIHVzaW5nCisJdXRmLTguCisKKwlXaGVuICJ1bmljb2RlIiwgInVjcy0yIiBvciAidWNzLTQiIGlzIHVzZWQsIFZpbSBpbnRlcm5hbGx5IHVzZXMgdXRmLTguCisJWW91IGRvbid0IG5vdGljZSB0aGlzIHdoaWxlIGVkaXRpbmcsIGJ1dCBpdCBkb2VzIG1hdHRlciBmb3IgdGhlCisJfHZpbWluZm8tZmlsZXwuICBBbmQgVmltIGV4cGVjdHMgdGhlIHRlcm1pbmFsIHRvIHVzZSB1dGYtOCB0b28uICBUaHVzCisJc2V0dGluZyAnZW5jb2RpbmcnIHRvIG9uZSBvZiB0aGVzZSB2YWx1ZXMgaW5zdGVhZCBvZiB1dGYtOCBvbmx5IGhhcworCWVmZmVjdCBmb3IgZW5jb2RpbmcgdXNlZCBmb3IgZmlsZXMgd2hlbiAnZmlsZWVuY29kaW5nJyBpcyBlbXB0eS4KKworCSBXaGVuICdlbmNvZGluZycgaXMgc2V0IHRvIGEgVW5pY29kZSBlbmNvZGluZywgYW5kICdmaWxlZW5jb2RpbmdzJyB3YXMKKwkgbm90IHNldCB5ZXQsIHRoZSBkZWZhdWx0IGZvciAnZmlsZWVuY29kaW5ncycgaXMgY2hhbmdlZC4KKworCQkJKidlbmRvZmxpbmUnKiAqJ2VvbCcqIConbm9lbmRvZmxpbmUnKiAqJ25vZW9sJyoKKydlbmRvZmxpbmUnICdlb2wnCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJV2hlbiB3cml0aW5nIGEgZmlsZSBhbmQgdGhpcyBvcHRpb24gaXMgb2ZmIGFuZCB0aGUgJ2JpbmFyeScgb3B0aW9uCisJaXMgb24sIG5vIDxFT0w+IHdpbGwgYmUgd3JpdHRlbiBmb3IgdGhlIGxhc3QgbGluZSBpbiB0aGUgZmlsZS4JVGhpcworCW9wdGlvbiBpcyBhdXRvbWF0aWNhbGx5IHNldCB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBuZXcgZmlsZSwgdW5sZXNzCisJdGhlIGZpbGUgZG9lcyBub3QgaGF2ZSBhbiA8RU9MPiBmb3IgdGhlIGxhc3QgbGluZSBpbiB0aGUgZmlsZSwgaW4KKwl3aGljaCBjYXNlIGl0IGlzIHJlc2V0LiAgTm9ybWFsbHkgeW91IGRvbid0IGhhdmUgdG8gc2V0IG9yIHJlc2V0IHRoaXMKKwlvcHRpb24uICBXaGVuICdiaW5hcnknIGlzIG9mZiB0aGUgdmFsdWUgaXMgbm90IHVzZWQgd2hlbiB3cml0aW5nIHRoZQorCWZpbGUuICBXaGVuICdiaW5hcnknIGlzIG9uIGl0IGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhlIHByZXNlbmNlIG9mIGEKKwk8RU9MPiBmb3IgdGhlIGxhc3QgbGluZSBpbiB0aGUgZmlsZSwgc28gdGhhdCB3aGVuIHlvdSB3cml0ZSB0aGUgZmlsZQorCXRoZSBzaXR1YXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgZmlsZSBjYW4gYmUga2VwdC4gIEJ1dCB5b3UgY2FuIGNoYW5nZQorCWl0IGlmIHlvdSB3YW50IHRvLgorCisJCQkgICAgIConZXF1YWxhbHdheXMnKiAqJ2VhJyogKidub2VxdWFsYWx3YXlzJyogKidub2VhJyoKKydlcXVhbGFsd2F5cycgJ2VhJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gb24sIGFsbCB0aGUgd2luZG93cyBhcmUgYXV0b21hdGljYWxseSBtYWRlIHRoZSBzYW1lIHNpemUgYWZ0ZXIKKwlzcGxpdHRpbmcgb3IgY2xvc2luZyBhIHdpbmRvdy4JV2hlbiBvZmYsIHNwbGl0dGluZyBhIHdpbmRvdyB3aWxsCisJcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgbGVhdmUgdGhlIG90aGVyIHdpbmRvd3MgdGhlCisJc2FtZS4gIFdoZW4gY2xvc2luZyBhIHdpbmRvdyB0aGUgZXh0cmEgbGluZXMgYXJlIGdpdmVuIHRvIHRoZSB3aW5kb3cKKwluZXh0IHRvIGl0IChkZXBlbmRpbmcgb24gJ3NwbGl0YmVsb3cnIGFuZCAnc3BsaXRyaWdodCcpLgorCVdoZW4gbWl4aW5nIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseSBzcGxpdCB3aW5kb3dzLCBhIG1pbmltYWwgc2l6ZQorCWlzIGNvbXB1dGVkIGFuZCBzb21lIHdpbmRvd3MgbWF5IGJlIGxhcmdlciBpZiB0aGVyZSBpcyByb29tLiAgVGhlCisJJ2VhZGlyZWN0aW9uJyBvcHRpb24gdGVsbHMgaW4gd2hpY2ggZGlyZWN0aW9uIHRoZSBzaXplIGlzIGFmZmVjdGVkLgorCUNoYW5naW5nIHRoZSBoZWlnaHQgb2YgYSB3aW5kb3cgY2FuIGJlIGF2b2lkZWQgYnkgc2V0dGluZworCSd3aW5maXhoZWlnaHQnLgorCisJCQkJCQkqJ2VxdWFscHJnJyogKidlcCcqCisnZXF1YWxwcmcnICdlcCcJCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJRXh0ZXJuYWwgcHJvZ3JhbSB0byB1c2UgZm9yICI9IiBjb21tYW5kLiAgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbXB0eQorCXRoZSBpbnRlcm5hbCBmb3JtYXR0aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCAoJ2xpc3AnLCAnY2luZGVudCcgb3IKKwknaW5kZW50ZXhwcicpLgorCUVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4JU2VlIHxvcHRpb24tYmFja3NsYXNofAorCWFib3V0IGluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJKidlcnJvcmJlbGxzJyogKidlYicqIConbm9lcnJvcmJlbGxzJyogKidub2ViJyoKKydlcnJvcmJlbGxzJyAnZWInCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJUmluZyB0aGUgYmVsbCAoYmVlcCBvciBzY3JlZW4gZmxhc2gpIGZvciBlcnJvciBtZXNzYWdlcy4gIFRoaXMgb25seQorCW1ha2VzIGEgZGlmZmVyZW5jZSBmb3IgZXJyb3IgbWVzc2FnZXMsIHRoZSBiZWxsIHdpbGwgYmUgdXNlZCBhbHdheXMKKwlmb3IgYSBsb3Qgb2YgZXJyb3JzIHdpdGhvdXQgYSBtZXNzYWdlIChlLmcuLCBoaXR0aW5nIDxFc2M+IGluIE5vcm1hbAorCW1vZGUpLglTZWUgJ3Zpc3VhbGJlbGwnIG9uIGhvdyB0byBtYWtlIHRoZSBiZWxsIGJlaGF2ZSBsaWtlIGEgYmVlcCwKKwlzY3JlZW4gZmxhc2ggb3IgZG8gbm90aGluZy4KKworCQkJCQkJKidlcnJvcmZpbGUnKiAqJ2VmJyoKKydlcnJvcmZpbGUnICdlZicJc3RyaW5nCShBbWlnYSBkZWZhdWx0OiAiQXp0ZWNDLkVyciIsCisJCQkJCW90aGVyczogImVycm9ycy5lcnIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3F1aWNrZml4fAorCQkJZmVhdHVyZX0KKwlOYW1lIG9mIHRoZSBlcnJvcmZpbGUgZm9yIHRoZSBRdWlja0ZpeCBtb2RlIChzZWUgfDpjZnwpLgorCVdoZW4gdGhlICItcSIgY29tbWFuZC1saW5lIGFyZ3VtZW50IGlzIHVzZWQsICdlcnJvcmZpbGUnIGlzIHNldCB0byB0aGUKKwlmb2xsb3dpbmcgYXJndW1lbnQuICBTZWUgfC1xfC4KKwlOT1QgdXNlZCBmb3IgdGhlICI6bWFrZSIgY29tbWFuZC4gIFNlZSAnbWFrZWVmJyBmb3IgdGhhdC4KKwlFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuCisJU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonZXJyb3Jmb3JtYXQnKiAqJ2VmbScqCisnZXJyb3Jmb3JtYXQnICdlZm0nCXN0cmluZwkoZGVmYXVsdCBpcyB2ZXJ5IGxvbmcpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3F1aWNrZml4fAorCQkJZmVhdHVyZX0KKwlTY2FuZi1saWtlIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXQgZm9yIHRoZSBsaW5lcyBpbiB0aGUgZXJyb3IgZmlsZQorCShzZWUgfGVycm9yZm9ybWF0fCkuCisKKwkJCQkgICAgIConZXNja2V5cycqIConZWsnKiAqJ25vZXNja2V5cycqIConbm9laycqCisnZXNja2V5cycgJ2VrJwkJYm9vbGVhbgkoVmltIGRlZmF1bHQ6IG9uLCBWaSBkZWZhdWx0OiBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJRnVuY3Rpb24ga2V5cyB0aGF0IHN0YXJ0IHdpdGggYW4gPEVzYz4gYXJlIHJlY29nbml6ZWQgaW4gSW5zZXJ0CisJbW9kZS4gIFdoZW4gdGhpcyBvcHRpb24gaXMgb2ZmLCB0aGUgY3Vyc29yIGFuZCBmdW5jdGlvbiBrZXlzIGNhbm5vdCBiZQorCXVzZWQgaW4gSW5zZXJ0IG1vZGUgaWYgdGhleSBzdGFydCB3aXRoIGFuIDxFc2M+LiAgVGhlIGFkdmFudGFnZSBvZgorCXRoaXMgaXMgdGhhdCB0aGUgc2luZ2xlIDxFc2M+IGlzIHJlY29nbml6ZWQgaW1tZWRpYXRlbHksIGluc3RlYWQgb2YKKwlhZnRlciBvbmUgc2Vjb25kLiAgSW5zdGVhZCBvZiByZXNldHRpbmcgdGhpcyBvcHRpb24sIHlvdSBtaWdodCB3YW50IHRvCisJdHJ5IGNoYW5naW5nIHRoZSB2YWx1ZXMgZm9yICd0aW1lb3V0bGVuJyBhbmQgJ3R0aW1lb3V0bGVuJy4gIE5vdGUgdGhhdAorCXdoZW4gJ2VzY2tleXMnIGlzIG9mZiwgeW91IGNhbiBzdGlsbCBtYXAgYW55dGhpbmcsIGJ1dCB0aGUgY3Vyc29yIGtleXMKKwl3b24ndCB3b3JrIGJ5IGRlZmF1bHQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkJCSonZXZlbnRpZ25vcmUnKiAqJ2VpJyoKKydldmVudGlnbm9yZScgJ2VpJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrYXV0b2NtZHwKKwkJCWZlYXR1cmV9CisJQSBsaXN0IG9mIGF1dG9jb21tYW5kIGV2ZW50IG5hbWVzLCB3aGljaCBhcmUgdG8gYmUgaWdub3JlZC4KKwlXaGVuIHNldCB0byAiYWxsIiwgYWxsIGF1dG9jb21tYW5kIGV2ZW50cyBhcmUgaWdub3JlZCwgYXV0b2NvbW1hbmRzCisJd2lsbCBub3QgYmUgZXhlY3V0ZWQuCisJT3RoZXJ3aXNlIHRoaXMgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBldmVudCBuYW1lcy4gIEV4YW1wbGU6ID4KKwkgICAgOnNldCBlaT1XaW5FbnRlcixXaW5MZWF2ZQorPAorCQkJCSAqJ2V4cGFuZHRhYicqIConZXQnKiAqJ25vZXhwYW5kdGFiJyogKidub2V0JyoKKydleHBhbmR0YWInICdldCcJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJSW4gSW5zZXJ0IG1vZGU6IFVzZSB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIHNwYWNlcyB0byBpbnNlcnQgYQorCTxUYWI+LglTcGFjZXMgYXJlIHVzZWQgaW4gaW5kZW50cyB3aXRoIHRoZSAnPicgYW5kICc8JyBjb21tYW5kcyBhbmQKKwl3aGVuICdhdXRvaW5kZW50JyBpcyBvbi4gIFRvIGluc2VydCBhIHJlYWwgdGFiIHdoZW4gJ2V4cGFuZHRhYicgaXMKKwlvbiwgdXNlIENUUkwtVjxUYWI+LiAgU2VlIGFsc28gfDpyZXRhYnwgYW5kIHxpbnMtZXhwYW5kdGFifC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJKidleHJjJyogKidleCcqIConbm9leHJjJyogKidub2V4JyoKKydleHJjJyAnZXgnCQlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlFbmFibGVzIHRoZSByZWFkaW5nIG9mIC52aW1yYywgLmV4cmMgYW5kIC5ndmltcmMgaW4gdGhlIGN1cnJlbnQKKwlkaXJlY3RvcnkuICBJZiB5b3Ugc3dpdGNoIHRoaXMgb3B0aW9uIG9uIHlvdSBzaG91bGQgYWxzbyBjb25zaWRlcgorCXNldHRpbmcgdGhlICdzZWN1cmUnIG9wdGlvbiAoc2VlIHxpbml0aWFsaXphdGlvbnwpLiAgVXNpbmcgYSBsb2NhbAorCS5leHJjLCAudmltcmMgb3IgLmd2aW1yYyBpcyBhIHBvdGVudGlhbCBzZWN1cml0eSBsZWFrLCB1c2Ugd2l0aCBjYXJlIQorCWFsc28gc2VlIHwudmltcmN8IGFuZCB8Z3VpLWluaXR8LgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCSonZmlsZWVuY29kaW5nJyogKidmZW5jJyogKkUyMTMqCisnZmlsZWVuY29kaW5nJyAnZmVuYycJc3RyaW5nIChkZWZhdWx0OiAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJU2V0cyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZvciB0aGUgZmlsZSBvZiB0aGlzIGJ1ZmZlci4KKwlXaGVuICdmaWxlZW5jb2RpbmcnIGlzIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycsIGNvbnZlcnNpb24gd2lsbCBiZQorCWRvbmUgd2hlbiByZWFkaW5nIGFuZCB3cml0aW5nIHRoZSBmaWxlLgorCVdoZW4gJ2ZpbGVlbmNvZGluZycgaXMgZW1wdHksIHRoZSBzYW1lIHZhbHVlIGFzICdlbmNvZGluZycgd2lsbCBiZQorCXVzZWQgKG5vIGNvbnZlcnNpb24gd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgYSBmaWxlKS4KKwkJV0FSTklORzogQ29udmVyc2lvbiBjYW4gY2F1c2UgbG9zcyBvZiBpbmZvcm1hdGlvbiEgIFdoZW4KKwkJJ2VuY29kaW5nJyBpcyAidXRmLTgiIGNvbnZlcnNpb24gaXMgbW9zdCBsaWtlbHkgZG9uZSBpbiBhIHdheQorCQl0aGF0IHRoZSByZXZlcnNlIGNvbnZlcnNpb24gcmVzdWx0cyBpbiB0aGUgc2FtZSB0ZXh0LiAgV2hlbgorCQknZW5jb2RpbmcnIGlzIG5vdCAidXRmLTgiIHNvbWUgY2hhcmFjdGVycyBtYXkgYmUgbG9zdCEKKwlTZWUgJ2VuY29kaW5nJyBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcy4gIEFkZGl0aW9uYWxseSwgdmFsdWVzIG1heSBiZQorCXNwZWNpZmllZCB0aGF0IGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBjb252ZXJ0ZXIsIHNlZQorCXxtYnl0ZS1jb252ZXJzaW9ufC4KKwlXaGVuIHJlYWRpbmcgYSBmaWxlICdmaWxlZW5jb2RpbmcnIHdpbGwgYmUgc2V0IGZyb20gJ2ZpbGVlbmNvZGluZ3MnLgorCVRvIHJlYWQgYSBmaWxlIGluIGEgY2VydGFpbiBlbmNvZGluZyBpdCB3b24ndCB3b3JrIGJ5IHNldHRpbmcKKwknZmlsZWVuY29kaW5nJywgdXNlIHRoZSB8KytlbmN8IGFyZ3VtZW50LgorCVByZXBlbmRpbmcgIjhiaXQtIiBhbmQgIjJieXRlLSIgaGFzIG5vIG1lYW5pbmcgaGVyZSwgdGhleSBhcmUgaWdub3JlZC4KKwlXaGVuIHRoZSBvcHRpb24gaXMgc2V0LCB0aGUgdmFsdWUgaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZS4gIFRodXMKKwl5b3UgY2FuIHNldCBpdCB3aXRoIHVwcGVyY2FzZSB2YWx1ZXMgdG9vLiAgJ18nIGNoYXJhY3RlcnMgYXJlCisJcmVwbGFjZWQgd2l0aCAnLScuICBJZiBhIG5hbWUgaXMgcmVjb2duaXplZCBmcm9tIHRoZSBsaXN0IGZvcgorCSdlbmNvZGluZycsIGl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBzdGFuZGFyZCBuYW1lLiAgRm9yIGV4YW1wbGUKKwkiSVNPODg1OS0yIiBiZWNvbWVzICJpc28tODg1OS0yIi4KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgYWZ0ZXIgc3RhcnRpbmcgdG8gZWRpdCBhIGZpbGUsIHRoZSAnbW9kaWZpZWQnCisJb3B0aW9uIGlzIHNldCwgYmVjYXVzZSB0aGUgZmlsZSB3b3VsZCBiZSBkaWZmZXJlbnQgd2hlbiB3cml0dGVuLgorCUlmIHlvdSBkbyB0aGlzIGluIGEgbW9kZWxpbmUsIHlvdSBtaWdodCB3YW50IHRvIHNldCAnbm9tb2RpZmllZCcgdG8KKwlhdm9pZCB0aGlzLgorCVRoaXMgb3B0aW9uIGNhbiBub3QgYmUgY2hhbmdlZCB3aGVuICdtb2RpZmlhYmxlJyBpcyBvZmYuCisKKwkJCQkJCQkqJ2ZlJyoKKwlOT1RFOiBCZWZvcmUgdmVyc2lvbiA2LjAgdGhpcyBvcHRpb24gc3BlY2lmaWVkIHRoZSBlbmNvZGluZyBmb3IgdGhlCisJd2hvbGUgb2YgVmltLCB0aGlzIHdhcyBhIG1pc3Rha2UuICBOb3cgdXNlICdlbmNvZGluZycgaW5zdGVhZC4JVGhlCisJb2xkIHNob3J0IG5hbWUgd2FzICdmZScsIHdoaWNoIGlzIG5vIGxvbmdlciB1c2VkLgorCisJCQkJCSonZmlsZWVuY29kaW5ncycqIConZmVuY3MnKgorJ2ZpbGVlbmNvZGluZ3MnICdmZW5jcycJc3RyaW5nIChkZWZhdWx0OiAidWNzLWJvbSIsICJ1Y3MtYm9tLHV0Zi04LGxhdGluMSIKKwkJCQkgICAgd2hlbiAnZW5jb2RpbmcnIGlzIHNldCB0byBhIFVuaWNvZGUgdmFsdWUpCisJCQlnbG9iYWwKKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfYnl0ZXwKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCVRoaXMgaXMgYSBsaXN0IG9mIGNoYXJhY3RlciBlbmNvZGluZ3MgY29uc2lkZXJlZCB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQKKwlhbiBleGlzdGluZyBmaWxlLiAgV2hlbiBhIGZpbGUgaXMgcmVhZCwgVmltIHRyaWVzIHRvIHVzZSB0aGUgZmlyc3QKKwltZW50aW9uZWQgY2hhcmFjdGVyIGVuY29kaW5nLiAgSWYgYW4gZXJyb3IgaXMgZGV0ZWN0ZWQsIHRoZSBuZXh0IG9uZQorCWluIHRoZSBsaXN0IGlzIHRyaWVkLiAgV2hlbiBhbiBlbmNvZGluZyBpcyBmb3VuZCB0aGF0IHdvcmtzLAorCSdmaWxlZW5jb2RpbmcnIGlzIHNldCB0byBpdC4JSWYgYWxsIGZhaWwsICdmaWxlZW5jb2RpbmcnIGlzIHNldCB0bworCWFuIGVtcHR5IHN0cmluZywgd2hpY2ggbWVhbnMgdGhlIHZhbHVlIG9mICdlbmNvZGluZycgaXMgdXNlZC4KKwkJV0FSTklORzogQ29udmVyc2lvbiBjYW4gY2F1c2UgbG9zcyBvZiBpbmZvcm1hdGlvbiEgIFdoZW4KKwkJJ2VuY29kaW5nJyBpcyAidXRmLTgiIChvciBvbmUgb2YgdGhlIG90aGVyIFVuaWNvZGUgdmFyaWFudHMpCisJCWNvbnZlcnNpb24gaXMgbW9zdCBsaWtlbHkgZG9uZSBpbiBhIHdheSB0aGF0IHRoZSByZXZlcnNlCisJCWNvbnZlcnNpb24gcmVzdWx0cyBpbiB0aGUgc2FtZSB0ZXh0LiAgV2hlbiAnZW5jb2RpbmcnIGlzIG5vdAorCQkidXRmLTgiIHNwZWNpYWwgY2hhcmFjdGVycyBtYXkgYmUgbG9zdCEKKwlGb3IgYW4gZW1wdHkgZmlsZSBvciBhIGZpbGUgd2l0aCBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMgbW9zdCBlbmNvZGluZ3MKKwl3aWxsIHdvcmsgYW5kIHRoZSBmaXJzdCBlbnRyeSBvZiAnZmlsZWVuY29kaW5ncycgd2lsbCBiZSB1c2VkIChleGNlcHQKKwkidWNzLWJvbSIsIHdoaWNoIHJlcXVpcmVzIHRoZSBCT00gdG8gYmUgcHJlc2VudCkuICBJZiB5b3UgcHJlZmVyCisJYW5vdGhlciBlbmNvZGluZyB1c2UgYW4gQnVmUmVhZFBvc3QgYXV0b2NvbW1hbmQgZXZlbnQgdG8gdGVzdCBpZiB5b3VyCisJcHJlZmVycmVkIGVuY29kaW5nIGlzIHRvIGJlIHVzZWQuICBFeGFtcGxlOiA+CisJCWF1IEJ1ZlJlYWRQb3N0ICogaWYgc2VhcmNoKCdcUycsICd3JykgPT0gMCB8CisJCQlcIHNldCBmZW5jPWlzby0yMDIyLWpwIHwgZW5kaWYKKzwJVGhpcyBzZXRzICdmaWxlZW5jb2RpbmcnIHRvICJpc28tMjAyMi1qcCIgaWYgdGhlIGZpbGUgZG9lcyBub3QgY29udGFpbgorCW5vbi1ibGFuayBjaGFyYWN0ZXJzLgorCU5vdGUgdGhhdCAnZmlsZWVuY29kaW5ncycgaXMgbm90IHVzZWQgZm9yIGFuIG5ldyBmaWxlLCAnZmlsZWVuY29kaW5nJworCWlzIGFsd2F5cyBlbXB0eSB0aGVuLiAgVGhpcyBtZWFucyB0aGF0IGEgbm9uLWV4aXN0aW5nIGZpbGUgbWF5IGdldCBhCisJZGlmZmVyZW50IGVuY29kaW5nIHRoYW4gYW4gZW1wdHkgZmlsZS4KKwlUaGUgc3BlY2lhbCB2YWx1ZSAidWNzLWJvbSIgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIGEgVW5pY29kZSBCT00KKwkoQnl0ZSBPcmRlciBNYXJrKSBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUuICBJdCBtdXN0IG5vdCBiZSBwcmVjZWRlZAorCWJ5ICJ1dGYtOCIgb3IgYW5vdGhlciBVbmljb2RlIGVuY29kaW5nIGZvciB0aGlzIHRvIHdvcmsgcHJvcGVybHkuCisJQW4gZW50cnkgZm9yIGFuIDgtYml0IGVuY29kaW5nIChlLmcuLCAibGF0aW4xIikgc2hvdWxkIGJlIHRoZSBsYXN0LAorCWJlY2F1c2UgVmltIGNhbm5vdCBkZXRlY3QgYW4gZXJyb3IsIHRodXMgdGhlIGVuY29kaW5nIGlzIGFsd2F5cworCWFjY2VwdGVkLgorCVdST05HIFZBTFVFUzoJCQlXSEFUJ1MgV1JPTkc6CisJCWxhdGluMSx1dGYtOAkJImxhdGluMSIgd2lsbCBhbHdheXMgYmUgdXNlZAorCQl1dGYtOCx1Y3MtYm9tLGxhdGluMQlCT00gd29uJ3QgYmUgcmVjb2duaXplZCBpbiBhbiB1dGYtOAorCQkJCQlmaWxlCisJCWNwMTI1MCxsYXRpbjEJCSJjcDEyNTAiIHdpbGwgYWx3YXlzIGJlIHVzZWQKKwlJZiAnZmlsZWVuY29kaW5ncycgaXMgZW1wdHksICdmaWxlZW5jb2RpbmcnIGlzIG5vdCBtb2RpZmllZC4KKwlTZWUgJ2ZpbGVlbmNvZGluZycgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMuCisJU2V0dGluZyB0aGlzIG9wdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCB0aW1lIGEgZmlsZQorCWlzIHJlYWQuCisKKwkJCQkJKidmaWxlZm9ybWF0JyogKidmZicqCisnZmlsZWZvcm1hdCcgJ2ZmJwlzdHJpbmcgKE1TLURPUywgTVMtV2luZG93cywgT1MvMiBkZWZhdWx0OiAiZG9zIiwKKwkJCQlVbml4IGRlZmF1bHQ6ICJ1bml4IiwKKwkJCQlNYWNpbnRvc2ggZGVmYXVsdDogIm1hYyIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJVGhpcyBnaXZlcyB0aGUgPEVPTD4gb2YgdGhlIGN1cnJlbnQgYnVmZmVyLCB3aGljaCBpcyB1c2VkIGZvcgorCXJlYWRpbmcvd3JpdGluZyB0aGUgYnVmZmVyIGZyb20vdG8gYSBmaWxlOgorCSAgICBkb3MJICAgIDxDUj4gPE5MPgorCSAgICB1bml4ICAgIDxOTD4KKwkgICAgbWFjCSAgICA8Q1I+CisJV2hlbiAiZG9zIiBpcyB1c2VkLCBDVFJMLVogYXQgdGhlIGVuZCBvZiBhIGZpbGUgaXMgaWdub3JlZC4KKwlTZWUgfGZpbGUtZm9ybWF0c3wgYW5kIHxmaWxlLXJlYWR8LgorCUZvciB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIG9mIHRoZSBmaWxlIHNlZSAnZmlsZWVuY29kaW5nJy4KKwlXaGVuICdiaW5hcnknIGlzIHNldCwgdGhlIHZhbHVlIG9mICdmaWxlZm9ybWF0JyBpcyBpZ25vcmVkLCBmaWxlIEkvTworCXdvcmtzIGxpa2UgaXQgd2FzIHNldCB0byAidW5peCcuCisJVGhpcyBvcHRpb24gaXMgc2V0IGF1dG9tYXRpY2FsbHkgd2hlbiBzdGFydGluZyB0byBlZGl0IGEgZmlsZSBhbmQKKwknZmlsZWZvcm1hdHMnIGlzIG5vdCBlbXB0eSBhbmQgJ2JpbmFyeScgaXMgb2ZmLgorCVdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCBhZnRlciBzdGFydGluZyB0byBlZGl0IGEgZmlsZSwgdGhlICdtb2RpZmllZCcKKwlvcHRpb24gaXMgc2V0LCBiZWNhdXNlIHRoZSBmaWxlIHdvdWxkIGJlIGRpZmZlcmVudCB3aGVuIHdyaXR0ZW4uCisJVGhpcyBvcHRpb24gY2FuIG5vdCBiZSBjaGFuZ2VkIHdoZW4gJ21vZGlmaWFibGUnIGlzIG9mZi4KKwlGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IFdoZW4gdGhpcyBvcHRpb24gaXMgc2V0IHRvICJkb3MiLAorCSd0ZXh0bW9kZScgaXMgc2V0LCBvdGhlcndpc2UgJ3RleHRtb2RlJyBpcyByZXNldC4KKworCQkJCQkqJ2ZpbGVmb3JtYXRzJyogKidmZnMnKgorJ2ZpbGVmb3JtYXRzJyAnZmZzJwlzdHJpbmcgKGRlZmF1bHQ6CisJCQkJVmltK1ZpCU1TLURPUywgTVMtV2luZG93cyBPUy8yOiAiZG9zLHVuaXgiLAorCQkJCVZpbQlVbml4OiAidW5peCxkb3MiLAorCQkJCVZpbQlNYWM6ICJtYWMsdW5peCxkb3MiLAorCQkJCVZpCUN5Z3dpbjogInVuaXgsZG9zIiwKKwkJCQlWaQlvdGhlcnM6ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoaXMgZ2l2ZXMgdGhlIGVuZC1vZi1saW5lICg8RU9MPikgZm9ybWF0cyB0aGF0IHdpbGwgYmUgdHJpZWQgd2hlbgorCXN0YXJ0aW5nIHRvIGVkaXQgYSBuZXcgYnVmZmVyIGFuZCB3aGVuIHJlYWRpbmcgYSBmaWxlIGludG8gYW4gZXhpc3RpbmcKKwlidWZmZXI6CisJLSBXaGVuIGVtcHR5LCB0aGUgZm9ybWF0IGRlZmluZWQgd2l0aCAnZmlsZWZvcm1hdCcgd2lsbCBiZSB1c2VkCisJICBhbHdheXMuICBJdCBpcyBub3Qgc2V0IGF1dG9tYXRpY2FsbHkuCisJLSBXaGVuIHNldCB0byBvbmUgbmFtZSwgdGhhdCBmb3JtYXQgd2lsbCBiZSB1c2VkIHdoZW5ldmVyIGEgbmV3IGJ1ZmZlcgorCSAgaXMgb3BlbmVkLiAgJ2ZpbGVmb3JtYXQnIGlzIHNldCBhY2NvcmRpbmdseSBmb3IgdGhhdCBidWZmZXIuCVRoZQorCSAgJ2ZpbGVmb3JtYXRzJyBuYW1lIHdpbGwgYmUgdXNlZCB3aGVuIGEgZmlsZSBpcyByZWFkIGludG8gYW4gZXhpc3RpbmcKKwkgIGJ1ZmZlciwgbm8gbWF0dGVyIHdoYXQgJ2ZpbGVmb3JtYXQnIGZvciB0aGF0IGJ1ZmZlciBpcyBzZXQgdG8uCisJLSBXaGVuIG1vcmUgdGhhbiBvbmUgbmFtZSBpcyBwcmVzZW50LCBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhdXRvbWF0aWMKKwkgIDxFT0w+IGRldGVjdGlvbiB3aWxsIGJlIGRvbmUgd2hlbiByZWFkaW5nIGEgZmlsZS4gIFdoZW4gc3RhcnRpbmcgdG8KKwkgIGVkaXQgYSBmaWxlLCBhIGNoZWNrIGlzIGRvbmUgZm9yIHRoZSA8RU9MPjoKKwkgIDEuIElmIGFsbCBsaW5lcyBlbmQgaW4gPENSPjxOTD4sIGFuZCAnZmlsZWZvcm1hdHMnIGluY2x1ZGVzICJkb3MiLAorCSAgICAgJ2ZpbGVmb3JtYXQnIGlzIHNldCB0byAiZG9zIi4KKwkgIDIuIElmIGEgPE5MPiBpcyBmb3VuZCBhbmQgJ2ZpbGVmb3JtYXRzJyBpbmNsdWRlcyAidW5peCIsICdmaWxlZm9ybWF0JworCSAgICAgaXMgc2V0IHRvICJ1bml4Ii4JTm90ZSB0aGF0IHdoZW4gYSA8Tkw+IGlzIGZvdW5kIHdpdGhvdXQgYQorCSAgICAgcHJlY2VkaW5nIDxDUj4sICJ1bml4IiBpcyBwcmVmZXJyZWQgb3ZlciAiZG9zIi4KKwkgIDMuIElmICdmaWxlZm9ybWF0cycgaW5jbHVkZXMgIm1hYyIsICdmaWxlZm9ybWF0JyBpcyBzZXQgdG8gIm1hYyIuCisJICAgICBUaGlzIG1lYW5zIHRoYXQgIm1hYyIgaXMgb25seSBjaG9zZW4gd2hlbiAidW5peCIgaXMgbm90IHByZXNlbnQsCisJICAgICBvciB3aGVuIG5vIDxOTD4gaXMgZm91bmQgaW4gdGhlIGZpbGUsIGFuZCB3aGVuICJkb3MiIGlzIG5vdAorCSAgICAgcHJlc2VudCwgb3Igbm8gPENSPjxOTD4gaXMgcHJlc2VudCBpbiB0aGUgZmlsZS4KKwkgICAgIEFsc28gaWYgInVuaXgiIHdhcyBmaXJzdCBjaG9zZW4sIGJ1dCB0aGUgZmlyc3QgPENSPiBpcyBiZWZvcmUKKwkgICAgIHRoZSBmaXJzdCA8Tkw+IGFuZCB0aGVyZSBhcHBlYXJzIHRvIGJlIG1vcmUgPENSPidzIHRoYW4gPE5MPidzIGluCisJICAgICB0aGUgZmlsZSwgdGhlbiAnZmlsZWZvcm1hdCcgaXMgc2V0IHRvICJtYWMiLgorCSAgNC4gSWYgJ2ZpbGVmb3JtYXQnIGlzIHN0aWxsIG5vdCBzZXQsIHRoZSBmaXJzdCBuYW1lIGZyb20KKwkgICAgICdmaWxlZm9ybWF0cycgaXMgdXNlZC4KKwkgIFdoZW4gcmVhZGluZyBhIGZpbGUgaW50byBhbiBleGlzdGluZyBidWZmZXIsIHRoZSBzYW1lIGlzIGRvbmUsIGJ1dAorCSAgdGhpcyBoYXBwZW5zIGxpa2UgJ2ZpbGVmb3JtYXQnIGhhcyBiZWVuIHNldCBhcHByb3ByaWF0ZWx5IGZvciB0aGF0CisJICBmaWxlIG9ubHksIHRoZSBvcHRpb24gaXMgbm90IGNoYW5nZWQuCisJV2hlbiAnYmluYXJ5JyBpcyBzZXQsIHRoZSB2YWx1ZSBvZiAnZmlsZWZvcm1hdHMnIGlzIG5vdCB1c2VkLgorCisJRm9yIHN5c3RlbXMgd2l0aCBhIERvcy1saWtlIDxFT0w+ICg8Q1I+PE5MPiksIHdoZW4gcmVhZGluZyBmaWxlcyB0aGF0CisJYXJlICI6c291cmNlImVkIGFuZCBmb3IgdmltcmMgZmlsZXMsIGF1dG9tYXRpYyA8RU9MPiBkZXRlY3Rpb24gbWF5IGJlCisJZG9uZToKKwktIFdoZW4gJ2ZpbGVmb3JtYXRzJyBpcyBlbXB0eSwgdGhlcmUgaXMgbm8gYXV0b21hdGljIGRldGVjdGlvbi4gIERvcworCSAgZm9ybWF0IHdpbGwgYmUgdXNlZC4KKwktIFdoZW4gJ2ZpbGVmb3JtYXRzJyBpcyBzZXQgdG8gb25lIG9yIG1vcmUgbmFtZXMsIGF1dG9tYXRpYyBkZXRlY3Rpb24KKwkgIGlzIGRvbmUuICBUaGlzIGlzIGJhc2VkIG9uIHRoZSBmaXJzdCA8Tkw+IGluIHRoZSBmaWxlOiBJZiB0aGVyZSBpcyBhCisJICA8Q1I+IGluIGZyb250IG9mIGl0LCBEb3MgZm9ybWF0IGlzIHVzZWQsIG90aGVyd2lzZSBVbml4IGZvcm1hdCBpcworCSAgdXNlZC4KKwlBbHNvIHNlZSB8ZmlsZS1mb3JtYXRzfC4KKwlGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IFdoZW4gdGhpcyBvcHRpb24gaXMgc2V0IHRvIGFuIGVtcHR5CisJc3RyaW5nIG9yIG9uZSBmb3JtYXQgKG5vIGNvbW1hIGlzIGluY2x1ZGVkKSwgJ3RleHRhdXRvJyBpcyByZXNldCwKKwlvdGhlcndpc2UgJ3RleHRhdXRvJyBpcyBzZXQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkJKidmaWxldHlwZScqIConZnQnKgorJ2ZpbGV0eXBlJyAnZnQnCQlzdHJpbmcgKGRlZmF1bHQ6ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2F1dG9jbWR8CisJCQlmZWF0dXJlfQorCVdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgRmlsZVR5cGUgYXV0b2NvbW1hbmQgZXZlbnQgaXMgdHJpZ2dlcmVkLgorCUFsbCBhdXRvY29tbWFuZHMgdGhhdCBtYXRjaCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiB3aWxsIGJlCisJZXhlY3V0ZWQuICBUaHVzIHRoZSB2YWx1ZSBvZiAnZmlsZXR5cGUnIGlzIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIGZpbGUKKwluYW1lLgorCU90aGVyd2lzZSB0aGlzIG9wdGlvbiBkb2VzIG5vdCBhbHdheXMgcmVmbGVjdCB0aGUgY3VycmVudCBmaWxlIHR5cGUuCisJVGhpcyBvcHRpb24gaXMgbm9ybWFsbHkgc2V0IHdoZW4gdGhlIGZpbGUgdHlwZSBpcyBkZXRlY3RlZC4gIFRvIGVuYWJsZQorCXRoaXMgdXNlIHRoZSAiOmZpbGV0eXBlIG9uIiBjb21tYW5kLiB8OmZpbGV0eXBlfAorCVNldHRpbmcgdGhpcyBvcHRpb24gdG8gYSBkaWZmZXJlbnQgdmFsdWUgaXMgbW9zdCB1c2VmdWwgaW4gYSBtb2RlbGluZSwKKwlmb3IgYSBmaWxlIGZvciB3aGljaCB0aGUgZmlsZSB0eXBlIGlzIG5vdCBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZWQuCisJRXhhbXBsZSwgZm9yIGluIGFuIElETCBmaWxlOiA+CisJCS8qIHZpbTogc2V0IGZpbGV0eXBlPWlkbCA6ICovCis8CXxGaWxlVHlwZXwgfGZpbGV0eXBlc3wKKwlEbyBub3QgY29uZnVzZSB0aGlzIG9wdGlvbiB3aXRoICdvc2ZpbGV0eXBlJywgd2hpY2ggaXMgZm9yIHRoZSBmaWxlCisJdHlwZSB0aGF0IGlzIGFjdHVhbGx5IHN0b3JlZCB3aXRoIHRoZSBmaWxlLgorCVRoaXMgb3B0aW9uIGlzIG5vdCBjb3BpZWQgdG8gYW5vdGhlciBidWZmZXIsIGluZGVwZW5kZW50IG9mIHRoZSAncycgb3IKKwknUycgZmxhZyBpbiAnY3BvcHRpb25zJy4KKworCQkJCQkJKidmaWxsY2hhcnMnKiAqJ2ZjcycqCisnZmlsbGNoYXJzJyAnZmNzJwlzdHJpbmcJKGRlZmF1bHQgInZlcnQ6fCxmb2xkOi0iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3dpbmRvd3N8CisJCQlhbmQgfCtmb2xkaW5nfCBmZWF0dXJlc30KKwlDaGFyYWN0ZXJzIHRvIGZpbGwgdGhlIHN0YXR1c2xpbmVzIGFuZCB2ZXJ0aWNhbCBzZXBhcmF0b3JzLgorCUl0IGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgaXRlbXM6CisKKwkgIGl0ZW0JCWRlZmF1bHQJCVVzZWQgZm9yIH4KKwkgIHN0bDpjCQknICcgb3IgJ14nCXN0YXR1c2xpbmUgb2YgdGhlIGN1cnJlbnQgd2luZG93CisJICBzdGxuYzpjCScgJyBvciAnLScJc3RhdHVzbGluZSBvZiB0aGUgbm9uLWN1cnJlbnQgd2luZG93cworCSAgdmVydDpjCSd8JwkJdmVydGljYWwgc2VwYXJhdG9ycyB8OnZzcGxpdHwKKwkgIGZvbGQ6YwknLScJCWZpbGxpbmcgJ2ZvbGR0ZXh0JworCSAgZGlmZjpjCSctJwkJZGVsZXRlZCBsaW5lcyBvZiB0aGUgJ2RpZmYnIG9wdGlvbgorCisJQW55IG9uZSB0aGF0IGlzIG9taXR0ZWQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQuCUZvciAic3RsIiBhbmQKKwkic3RsbmMiIHRoZSBzcGFjZSB3aWxsIGJlIHVzZWQgd2hlbiB0aGVyZSBpcyBoaWdobGlnaHRpbmcsICdeJyBvciAnLScKKwlvdGhlcndpc2UuCisKKwlFeGFtcGxlOiA+CisJICAgIDpzZXQgZmlsbGNoYXJzPXN0bDpeLHN0bG5jOi0sdmVydDpcfCxmb2xkOi0sZGlmZjotCis8CVRoaXMgaXMgc2ltaWxhciB0byB0aGUgZGVmYXVsdCwgZXhjZXB0IHRoYXQgdGhlc2UgY2hhcmFjdGVycyB3aWxsIGFsc28KKwliZSB1c2VkIHdoZW4gdGhlcmUgaXMgaGlnaGxpZ2h0aW5nLgorCisJVGhlIGhpZ2hsaWdodGluZyB1c2VkIGZvciB0aGVzZSBpdGVtczoKKwkgIGl0ZW0JCWhpZ2hsaWdodCBncm91cCB+CisJICBzdGw6YwkJU3RhdHVzTGluZQkJfGhsLVN0YXR1c0xpbmV8CisJICBzdGxuYzpjCVN0YXR1c0xpbmVOQwkJfGhsLVN0YXR1c0xpbmVOQ3wKKwkgIHZlcnQ6YwlWZXJ0U3BsaXQJCXxobC1WZXJ0U3BsaXR8CisJICBmb2xkOmMJRm9sZGVkCQkJfGhsLUZvbGRlZHwKKwkgIGRpZmY6YwlEaWZmRGVsZXRlCQl8aGwtRGlmZkRlbGV0ZXwKKworCQkJCQkqJ2ZrbWFwJyogKidmaycqIConbm9ma21hcCcqIConbm9maycqCisnZmttYXAnICdmaycJCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQkJCSpFMTk4KgorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtyaWdodGxlZnR8CisJCQlmZWF0dXJlfQorCVdoZW4gb24sIHRoZSBrZXlib2FyZCBpcyBtYXBwZWQgZm9yIHRoZSBGYXJzaSBjaGFyYWN0ZXIgc2V0LgorCU5vcm1hbGx5IHlvdSB3b3VsZCBzZXQgJ2FsbG93cmV2aW5zJyBhbmQgdXNlIENUUkwtXyBpbiBpbnNlcnQgbW9kZSB0bworCXRvZ2dsZSB0aGlzIG9wdGlvbiB8aV9DVFJMLV98LglTZWUgfGZhcnNpLnR4dHwuCisKKwkJCQkJCSonZm9sZGNsb3NlJyogKidmY2wnKgorJ2ZvbGRjbG9zZScgJ2ZjbCcJc3RyaW5nIChkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVdoZW4gc2V0IHRvICJhbGwiLCBhIGZvbGQgaXMgY2xvc2VkIHdoZW4gdGhlIGN1cnNvciBpc24ndCBpbiBpdCBhbmQKKwlpdHMgbGV2ZWwgaXMgaGlnaGVyIHRoYW4gJ2ZvbGRsZXZlbCcuICBVc2VmdWwgaWYgeW91IHdhbnQgZm9sZHMgdG8KKwlhdXRvbWF0aWNhbGx5IGNsb3NlIHdoZW4gbW92aW5nIG91dCBvZiB0aGVtLgorCisJCQkJCQkqJ2ZvbGRjb2x1bW4nKiAqJ2ZkYycqCisnZm9sZGNvbHVtbicgJ2ZkYycJbnVtYmVyIChkZWZhdWx0IDApCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJV2hlbiBub24temVybywgYSBjb2x1bW4gd2l0aCB0aGUgc3BlY2lmaWVkIHdpZHRoIGlzIHNob3duIGF0IHRoZSBzaWRlCisJb2YgdGhlIHdpbmRvdyB3aGljaCBpbmRpY2F0ZXMgb3BlbiBhbmQgY2xvc2VkIGZvbGRzLiAgVGhlIG1heGltdW0KKwl2YWx1ZSBpcyAxMi4KKwlTZWUgfGZvbGRpbmd8LgorCisJCQkqJ2ZvbGRlbmFibGUnKiAqJ2ZlbicqIConbm9mb2xkZW5hYmxlJyogKidub2ZlbicqCisnZm9sZGVuYWJsZScgJ2ZlbicJYm9vbGVhbiAoZGVmYXVsdCBvbikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlXaGVuIG9mZiwgYWxsIGZvbGRzIGFyZSBvcGVuLiAgVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcXVpY2tseQorCXN3aXRjaCBiZXR3ZWVuIHNob3dpbmcgYWxsIHRleHQgdW5mb2xkZWQgYW5kIHZpZXdpbmcgdGhlIHRleHQgd2l0aAorCWZvbGRzIChpbmNsdWRpbmcgbWFudWFsbHkgb3BlbmVkIG9yIGNsb3NlZCBmb2xkcykuICBJdCBjYW4gYmUgdG9nZ2xlZAorCXdpdGggdGhlIHx6aXwgY29tbWFuZC4JVGhlICdmb2xkY29sdW1uJyB3aWxsIHJlbWFpbiBibGFuayB3aGVuCisJJ2ZvbGRlbmFibGUnIGlzIG9mZi4KKwlUaGlzIG9wdGlvbiBpcyBzZXQgYnkgY29tbWFuZHMgdGhhdCBjcmVhdGUgYSBuZXcgZm9sZCBvciBjbG9zZSBhIGZvbGQuCisJU2VlIHxmb2xkaW5nfC4KKworCQkJCQkJKidmb2xkZXhwcicqIConZmRlJyoKKydmb2xkZXhwcicgJ2ZkZScJc3RyaW5nIChkZWZhdWx0OiAiMCIpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCW9yIHwrZXZhbHwgZmVhdHVyZX0KKwlUaGUgZXhwcmVzc2lvbiB1c2VkIGZvciB3aGVuICdmb2xkbWV0aG9kJyBpcyAiZXhwciIuICBJdCBpcyBldmFsdWF0ZWQKKwlmb3IgZWFjaCBsaW5lIHRvIG9idGFpbiBpdHMgZm9sZCBsZXZlbC4gIFNlZSB8Zm9sZC1leHByfC4gIEFsc28gc2VlCisJfGV2YWwtc2FuZGJveHwuCisKKwkJCQkJCSonZm9sZGlnbm9yZScqIConZmRpJyoKKydmb2xkaWdub3JlJyAnZmRpJwlzdHJpbmcgKGRlZmF1bHQ6ICIjIikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlVc2VkIG9ubHkgd2hlbiAnZm9sZG1ldGhvZCcgaXMgImluZGVudCIuICBMaW5lcyBzdGFydGluZyB3aXRoCisJY2hhcmFjdGVycyBpbiAnZm9sZGlnbm9yZScgd2lsbCBnZXQgdGhlaXIgZm9sZCBsZXZlbCBmcm9tIHN1cnJvdW5kaW5nCisJbGluZXMuCVdoaXRlIHNwYWNlIGlzIHNraXBwZWQgYmVmb3JlIGNoZWNraW5nIGZvciB0aGlzIGNoYXJhY3Rlci4KKwlUaGUgZGVmYXVsdCAiIyIgd29ya3Mgd2VsbCBmb3IgQyBwcm9ncmFtcy4gIFNlZSB8Zm9sZC1pbmRlbnR8LgorCisJCQkJCQkqJ2ZvbGRsZXZlbCcqIConZmRsJyoKKydmb2xkbGV2ZWwnICdmZGwnCW51bWJlciAoZGVmYXVsdDogMCkKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlTZXRzIHRoZSBmb2xkIGxldmVsOiBGb2xkcyB3aXRoIGEgaGlnaGVyIGxldmVsIHdpbGwgYmUgY2xvc2VkLgorCVNldHRpbmcgdGhpcyBvcHRpb24gdG8gemVybyB3aWxsIGNsb3NlIGFsbCBmb2xkcy4gIEhpZ2hlciBudW1iZXJzIHdpbGwKKwljbG9zZSBmZXdlciBmb2xkcy4KKwlUaGlzIG9wdGlvbiBpcyBzZXQgYnkgY29tbWFuZHMgbGlrZSB8em18LCB8ek18IGFuZCB8elJ8LgorCVNlZSB8Zm9sZC1mb2xkbGV2ZWx8LgorCisJCQkJCQkqJ2ZvbGRsZXZlbHN0YXJ0JyogKidmZGxzJyoKKydmb2xkbGV2ZWxzdGFydCcgJ2ZkbHMnCW51bWJlciAoZGVmYXVsdDogLTEpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJU2V0cyAnZm9sZGxldmVsJyB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgYW5vdGhlciBidWZmZXIgaW4gYSB3aW5kb3cuCisJVXNlZnVsIHRvIGFsd2F5cyBzdGFydCBlZGl0aW5nIHdpdGggYWxsIGZvbGRzIGNsb3NlZCAodmFsdWUgemVybyksCisJc29tZSBmb2xkcyBjbG9zZWQgKG9uZSkgb3Igbm8gZm9sZHMgY2xvc2VkICg5OSkuCisJVGhpcyBpcyBkb25lIGJlZm9yZSByZWFkaW5nIGFueSBtb2RlbGluZSwgdGh1cyBhIHNldHRpbmcgaW4gYSBtb2RlbGluZQorCW92ZXJydWxlcyB0aGlzIG9wdGlvbi4JU3RhcnRpbmcgdG8gZWRpdCBhIGZpbGUgZm9yIHxkaWZmLW1vZGV8IGFsc28KKwlpZ25vcmVzIHRoaXMgb3B0aW9uIGFuZCBjbG9zZXMgYWxsIGZvbGRzLgorCUl0IGlzIGFsc28gZG9uZSBiZWZvcmUgQnVmUmVhZFByZSBhdXRvY29tbWFuZHMsIHRvIGFsbG93IGFuIGF1dG9jbWQgdG8KKwlvdmVycnVsZSB0aGUgJ2ZvbGRsZXZlbCcgdmFsdWUgZm9yIHNwZWNpZmljIGZpbGVzLgorCVdoZW4gdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLCBpdCBpcyBub3QgdXNlZC4KKworCQkJCQkJKidmb2xkbWFya2VyJyogKidmbXInKiAqRTUzNioKKydmb2xkbWFya2VyJyAnZm1yJwlzdHJpbmcgKGRlZmF1bHQ6ICJ7e3ssfX19IikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlUaGUgc3RhcnQgYW5kIGVuZCBtYXJrZXIgdXNlZCB3aGVuICdmb2xkbWV0aG9kJyBpcyAibWFya2VyIi4gIFRoZXJlCisJbXVzdCBiZSBvbmUgY29tbWEsIHdoaWNoIHNlcGFyYXRlcyB0aGUgc3RhcnQgYW5kIGVuZCBtYXJrZXIuICBUaGUKKwltYXJrZXIgaXMgYSBsaXRlcmFsIHN0cmluZyAoYSByZWd1bGFyIGV4cHJlc3Npb24gd291bGQgYmUgdG9vIHNsb3cpLgorCVNlZSB8Zm9sZC1tYXJrZXJ8LgorCisJCQkJCQkqJ2ZvbGRtZXRob2QnKiAqJ2ZkbScqCisnZm9sZG1ldGhvZCcgJ2ZkbScJc3RyaW5nIChkZWZhdWx0OiAibWFudWFsIikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlUaGUga2luZCBvZiBmb2xkaW5nIHVzZWQgZm9yIHRoZSBjdXJyZW50IHdpbmRvdy4gIFBvc3NpYmxlIHZhbHVlczoKKwl8Zm9sZC1tYW51YWx8CW1hbnVhbAkgICAgRm9sZHMgYXJlIGNyZWF0ZWQgbWFudWFsbHkuCisJfGZvbGQtaW5kZW50fAlpbmRlbnQJICAgIExpbmVzIHdpdGggZXF1YWwgaW5kZW50IGZvcm0gYSBmb2xkLgorCXxmb2xkLWV4cHJ8CWV4cHIJICAgICdmb2xkZXhwcicgZ2l2ZXMgdGhlIGZvbGQgbGV2ZWwgb2YgYSBsaW5lLgorCXxmb2xkLW1hcmtlcnwJbWFya2VyCSAgICBNYXJrZXJzIGFyZSB1c2VkIHRvIHNwZWNpZnkgZm9sZHMuCisJfGZvbGQtc3ludGF4fAlzeW50YXgJICAgIFN5bnRheCBoaWdobGlnaHRpbmcgaXRlbXMgc3BlY2lmeSBmb2xkcy4KKwl8Zm9sZC1kaWZmfAlkaWZmCSAgICBGb2xkIHRleHQgdGhhdCBpcyBub3QgY2hhbmdlZC4KKworCQkJCQkJKidmb2xkbWlubGluZXMnKiAqJ2ZtbCcqCisnZm9sZG1pbmxpbmVzJyAnZm1sJwludW1iZXIgKGRlZmF1bHQ6IDEpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJU2V0cyB0aGUgbWluaW11bSBudW1iZXIgb2Ygc2NyZWVuIGxpbmVzIGZvciBhIGZvbGQgdG8gYmUgZGlzcGxheWVkCisJY2xvc2VkLiAgQWxzbyBmb3IgbWFudWFsbHkgY2xvc2VkIGZvbGRzLgorCU5vdGUgdGhhdCB0aGlzIG9ubHkgaGFzIGFuIGVmZmVjdCBvZiB3aGF0IGlzIGRpc3BsYXllZC4gIEFmdGVyIHVzaW5nCisJInpjIiB0byBjbG9zZSBhIGZvbGQsIHdoaWNoIGlzIGRpc3BsYXllZCBvcGVuIGJlY2F1c2UgaXQncyBzbWFsbGVyCisJdGhhbiAnZm9sZG1pbmxpbmVzJywgYSBmb2xsb3dpbmcgInpjIiBtYXkgY2xvc2UgYSBjb250YWluaW5nIGZvbGQuCisKKwkJCQkJCSonZm9sZG5lc3RtYXgnKiAqJ2ZkbicqCisnZm9sZG5lc3RtYXgnICdmZG4nCW51bWJlciAoZGVmYXVsdDogMjApCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJU2V0cyB0aGUgbWF4aW11bSBuZXN0aW5nIG9mIGZvbGRzIGZvciB0aGUgImluZGVudCIgYW5kICJzeW50YXgiCisJbWV0aG9kcy4gIFRoaXMgYXZvaWRzIHRoYXQgdG9vIG1hbnkgZm9sZHMgd2lsbCBiZSBjcmVhdGVkLiAgVXNpbmcgbW9yZQorCXRoYW4gMjAgZG9lc24ndCB3b3JrLCBiZWNhdXNlIHRoZSBpbnRlcm5hbCBsaW1pdCBpcyAyMC4KKworCQkJCQkJKidmb2xkb3BlbicqIConZmRvJyoKKydmb2xkb3BlbicgJ2ZkbycJc3RyaW5nIChkZWZhdWx0OiAiYmxvY2ssaG9yLG1hcmsscGVyY2VudCxxdWlja2ZpeCwKKwkJCQkJCQkgICAgIHNlYXJjaCx0YWcsdW5kbyIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJU3BlY2lmaWVzIGZvciB3aGljaCB0eXBlIG9mIGNvbW1hbmRzIGZvbGRzIHdpbGwgYmUgb3BlbmVkLCBpZiB0aGUKKwljb21tYW5kIG1vdmVzIHRoZSBjdXJzb3IgaW50byBhIGNsb3NlZCBmb2xkLiAgSXQgaXMgYSBjb21tYSBzZXBhcmF0ZWQKKwlsaXN0IG9mIGl0ZW1zLgorCQlpdGVtCQljb21tYW5kcyB+CisJCWFsbAkJYW55CisJCWJsb2NrCQkiKCIsICJ7IiwgIltbIiwgIlt7IiwgZXRjLgorCQlob3IJCWhvcml6b250YWwgbW92ZW1lbnRzOiAibCIsICJ3IiwgImZ4IiwgZXRjLgorCQlpbnNlcnQJCWFueSBjb21tYW5kIGluIEluc2VydCBtb2RlCisJCWp1bXAJCWZhciBqdW1wczogIkciLCAiZ2ciLCBldGMuCisJCW1hcmsJCWp1bXBpbmcgdG8gYSBtYXJrOiAiJ20iLCBDVFJMLU8sIGV0Yy4KKwkJcGVyY2VudAkJIiUiCisJCXF1aWNrZml4CSI6Y24iLCAiOmNyZXciLCAiOm1ha2UiLCBldGMuCisJCXNlYXJjaAkJc2VhcmNoIGZvciBhIHBhdHRlcm46ICIvIiwgIm4iLCAiKiIsICJnZCIsIGV0Yy4KKwkJCQkobm90IGZvciBhIHNlYXJjaCBwYXR0ZXJuIGluIGEgIjoiIGNvbW1hbmQpCisJCXRhZwkJanVtcGluZyB0byBhIHRhZzogIjp0YSIsIENUUkwtVCwgZXRjLgorCQl1bmRvCQl1bmRvIG9yIHJlZG86ICJ1IiBhbmQgQ1RSTC1SCisJV2hlbiB0aGUgY29tbWFuZCBpcyBwYXJ0IG9mIGEgbWFwcGluZyB0aGlzIG9wdGlvbiBpcyBub3QgdXNlZC4JQWRkCisJdGhlIHx6dnwgY29tbWFuZCB0byB0aGUgbWFwcGluZyB0byBnZXQgdGhlIHNhbWUgZWZmZWN0LgorCVdoZW4gYSBtb3ZlbWVudCBjb21tYW5kIGlzIHVzZWQgZm9yIGFuIG9wZXJhdG9yIChlLmcuLCAiZGwiIG9yICJ5JSIpCisJdGhpcyBvcHRpb24gaXMgbm90IHVzZWQuICBUaGlzIG1lYW5zIHRoZSBvcGVyYXRvciB3aWxsIGluY2x1ZGUgdGhlCisJd2hvbGUgY2xvc2VkIGZvbGQuCisJTm90ZSB0aGF0IHZlcnRpY2FsIG1vdmVtZW50cyBhcmUgbm90IGhlcmUsIGJlY2F1c2UgaXQgd291bGQgbWFrZSBpdAorCXZlcnkgZGlmZmljdWx0IHRvIG1vdmUgb250byBhIGNsb3NlZCBmb2xkLgorCUluIGluc2VydCBtb2RlIHRoZSBmb2xkcyBjb250YWluaW5nIHRoZSBjdXJzb3Igd2lsbCBhbHdheXMgYmUgb3BlbgorCXdoZW4gdGV4dCBpcyBpbnNlcnRlZC4KKwlUbyBjbG9zZSBmb2xkcyB5b3UgY2FuIHJlLWFwcGx5ICdmb2xkbGV2ZWwnIHdpdGggdGhlIHx6eHwgY29tbWFuZCBvcgorCXNldCB0aGUgJ2ZvbGRjbG9zZScgb3B0aW9uIHRvICJhbGwiLgorCisJCQkJCQkqJ2ZvbGR0ZXh0JyogKidmZHQnKgorJ2ZvbGR0ZXh0JyAnZmR0JwlzdHJpbmcgKGRlZmF1bHQ6ICJmb2xkdGV4dCgpIikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlBbiBleHByZXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgdGV4dCBkaXNwbGF5ZWQgZm9yIGEgY2xvc2VkCisJZm9sZC4gIFNlZSB8Zm9sZC1mb2xkdGV4dHwuCisKKwkJCQkJKidmb3JtYXRvcHRpb25zJyogKidmbycqCisnZm9ybWF0b3B0aW9ucycgJ2ZvJwlzdHJpbmcgKFZpbSBkZWZhdWx0OiAidGNxIiwgVmkgZGVmYXVsdDogInZ0IikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlUaGlzIGlzIGEgc2VxdWVuY2Ugb2YgbGV0dGVycyB3aGljaCBkZXNjcmliZXMgaG93IGF1dG9tYXRpYworCWZvcm1hdHRpbmcgaXMgdG8gYmUgZG9uZS4gIFNlZSB8Zm8tdGFibGV8LiAgV2hlbiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMKKwlvbiwgbm8gZm9ybWF0dGluZyBpcyBkb25lIChsaWtlICdmb3JtYXRvcHRpb25zJyBpcyBlbXB0eSkuICBDb21tYXMgY2FuCisJYmUgaW5zZXJ0ZWQgZm9yIHJlYWRhYmlsaXR5LgorCVRvIGF2b2lkIHByb2JsZW1zIHdpdGggZmxhZ3MgdGhhdCBhcmUgYWRkZWQgaW4gdGhlIGZ1dHVyZSwgdXNlIHRoZQorCSIrPSIgYW5kICItPSIgZmVhdHVyZSBvZiAiOnNldCIgfGFkZC1vcHRpb24tZmxhZ3N8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJCQkqJ2Zvcm1hdHByZycqIConZnAnKgorJ2Zvcm1hdHByZycgJ2ZwJwlzdHJpbmcgKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhlIG5hbWUgb2YgYW4gZXh0ZXJuYWwgcHJvZ3JhbSB0aGF0IHdpbGwgYmUgdXNlZCB0byBmb3JtYXQgdGhlIGxpbmVzCisJc2VsZWN0ZWQgd2l0aCB0aGUgImdxIiBjb21tYW5kLiAgVGhlIHByb2dyYW0gbXVzdCB0YWtlIHRoZSBpbnB1dCBvbgorCXN0ZGluIGFuZCBwcm9kdWNlIHRoZSBvdXRwdXQgb24gc3Rkb3V0LiAgVGhlIFVuaXggcHJvZ3JhbSAiZm10IiBpcworCXN1Y2ggYSBwcm9ncmFtLiAgSWYgdGhpcyBvcHRpb24gaXMgYW4gZW1wdHkgc3RyaW5nLCB0aGUgaW50ZXJuYWwKKwlmb3JtYXQgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHxDLWluZGVudGluZ3wuICBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCisJZXhwYW5kZWQgfDpzZXRfZW52fC4gIFNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nIHNwYWNlcworCWFuZCBiYWNrc2xhc2hlcy4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkgICAqJ2dkZWZhdWx0JyogKidnZCcqIConbm9nZGVmYXVsdCcqIConbm9nZCcqCisnZ2RlZmF1bHQnICdnZCcJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gb24sIHRoZSAiOnN1YnN0aXR1dGUiIGZsYWcgJ2cnIGlzIGRlZmF1bHQgb24uICBUaGlzIG1lYW5zIHRoYXQKKwlhbGwgbWF0Y2hlcyBpbiBhIGxpbmUgYXJlIHN1YnN0aXR1dGVkIGluc3RlYWQgb2Ygb25lLiAgV2hlbiBhICdnJyBmbGFnCisJaXMgZ2l2ZW4gdG8gYSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQsIHRoaXMgd2lsbCB0b2dnbGUgdGhlIHN1YnN0aXR1dGlvbgorCW9mIGFsbCBvciBvbmUgbWF0Y2guICBTZWUgfGNvbXBsZXgtY2hhbmdlfC4KKworCQljb21tYW5kCQknZ2RlZmF1bHQnIG9uCSdnZGVmYXVsdCcgb2ZmCX4KKwkJOnMvLy8JCSAgc3Vic3QuIGFsbAkgIHN1YnN0LiBvbmUKKwkJOnMvLy9nCQkgIHN1YnN0LiBvbmUJICBzdWJzdC4gYWxsCisJCTpzLy8vZ2cJCSAgc3Vic3QuIGFsbAkgIHN1YnN0LiBvbmUKKworCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidncmVwZm9ybWF0JyogKidnZm0nKgorJ2dyZXBmb3JtYXQnICdnZm0nCXN0cmluZwkoZGVmYXVsdCAiJWY6JWwlbSwlZiAgJWwlbSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJRm9ybWF0IHRvIHJlY29nbml6ZSBmb3IgdGhlICI6Z3JlcCIgY29tbWFuZCBvdXRwdXQuCisJVGhpcyBpcyBhIHNjYW5mLWxpa2Ugc3RyaW5nIHRoYXQgdXNlcyB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlCisJJ2Vycm9yZm9ybWF0JyBvcHRpb246IHNlZSB8ZXJyb3Jmb3JtYXR8LgorCisJCQkJCQkqJ2dyZXBwcmcnKiAqJ2dwJyoKKydncmVwcHJnJyAnZ3AnCQlzdHJpbmcJKGRlZmF1bHQgImdyZXAgLW4gIiwKKwkJCQkJVW5peDogImdyZXAgLW4gJCogL2Rldi9udWxsIiwKKwkJCQkJV2luMzI6ICJmaW5kc3RyIC9uIiBvciAiZ3JlcCAtbiIsCisJCQkJCQkgICAgICBWTVM6ICJTRUFSQ0gvTlVNQkVSUyAiKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwlQcm9ncmFtIHRvIHVzZSBmb3IgdGhlICI6Z3JlcCIgY29tbWFuZC4gVGhpcyBvcHRpb24gbWF5IGNvbnRhaW4gJyUnCisJYW5kICcjJyBjaGFyYWN0ZXJzLCB3aGljaCBhcmUgZXhwYW5kZWQgbGlrZSB3aGVuIHVzZWQgaW4gYSBjb21tYW5kLQorCWxpbmUuICBUaGUgcGxhY2Vob2xkZXIgIiQqIiBpcyBhbGxvd2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIGFyZ3VtZW50cworCXdpbGwgYmUgaW5jbHVkZWQuICBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuICBTZWUKKwl8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMuCisJV2hlbiB5b3VyICJncmVwIiBhY2NlcHRzIHRoZSAiLUgiIGFyZ3VtZW50LCB1c2UgdGhpcyB0byBtYWtlICI6Z3JlcCIKKwlhbHNvIHdvcmsgd2VsbCB3aXRoIGEgc2luZ2xlIGZpbGU6ID4KKwkJOnNldCBncmVwcHJnPWdyZXBcIC1uSAorPAlTZWUgYWxzbyB0aGUgc2VjdGlvbiB8Om1ha2VfbWFrZXByZ3wsIHNpbmNlIG1vc3Qgb2YgdGhlIGNvbW1lbnRzIHRoZXJlCisJYXBwbHkgZXF1YWxseSB0byAnZ3JlcHByZycuCisJRm9yIFdpbjMyLCB0aGUgZGVmYXVsdCBpcyAiZmluZHN0ciAvbiIgaWYgImZpbmRzdHIuZXhlIiBjYW4gYmUgZm91bmQsCisJb3RoZXJ3aXNlIGl0J3MgImdyZXAgLW4iLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJKidndWljdXJzb3InKiAqJ2djcicqICpFNTQ1KiAqRTU0NiogKkU1NDgqICpFNTQ5KgorJ2d1aWN1cnNvcicgJ2djcicJc3RyaW5nCShkZWZhdWx0ICJuLXYtYzpibG9jay1DdXJzb3IvbEN1cnNvciwKKwkJCQkJdmU6dmVyMzUtQ3Vyc29yLAorCQkJCQlvOmhvcjUwLUN1cnNvciwKKwkJCQkJaS1jaTp2ZXIyNS1DdXJzb3IvbEN1cnNvciwKKwkJCQkJci1jcjpob3IyMC1DdXJzb3IvbEN1cnNvciwKKwkJCQkJc206YmxvY2stQ3Vyc29yCisJCQkJCS1ibGlua3dhaXQxNzUtYmxpbmtvZmYxNTAtYmxpbmtvbjE3NSIsCisJCQkJZm9yIE1TLURPUyBhbmQgV2luMzIgY29uc29sZToKKwkJCQkJIm4tdi1jOmJsb2NrLG86aG9yNTAsaS1jaTpob3IxNSwKKwkJCQkJci1jcjpob3IzMCxzbTpibG9jayIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIEdVSSBlbmFibGVkLCBhbmQKKwkJCWZvciBNUy1ET1MgYW5kIFdpbjMyIGNvbnNvbGV9CisJVGhpcyBvcHRpb24gdGVsbHMgVmltIHdoYXQgdGhlIGN1cnNvciBzaG91bGQgbG9vayBsaWtlIGluIGRpZmZlcmVudAorCW1vZGVzLglJdCBmdWxseSB3b3JrcyBpbiB0aGUgR1VJLiAgSW4gYW4gTVNET1Mgb3IgV2luMzIgY29uc29sZSwgb25seQorCXRoZSBoZWlnaHQgb2YgdGhlIGN1cnNvciBjYW4gYmUgY2hhbmdlZC4gIFRoaXMgY2FuIGJlIGRvbmUgYnkKKwlzcGVjaWZ5aW5nIGEgYmxvY2sgY3Vyc29yLCBvciBhIHBlcmNlbnRhZ2UgZm9yIGEgdmVydGljYWwgb3IKKwlob3Jpem9udGFsIGN1cnNvci4KKworCVRoZSBvcHRpb24gaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwYXJ0cy4JRWFjaCBwYXJ0IGNvbnNpc3Qgb2YgYQorCW1vZGUtbGlzdCBhbmQgYW4gYXJndW1lbnQtbGlzdDoKKwkJbW9kZS1saXN0OmFyZ3VtZW50LWxpc3QsbW9kZS1saXN0OmFyZ3VtZW50LWxpc3QsLi4KKwlUaGUgbW9kZS1saXN0IGlzIGEgZGFzaCBzZXBhcmF0ZWQgbGlzdCBvZiB0aGVzZSBtb2RlczoKKwkJbglOb3JtYWwgbW9kZQorCQl2CVZpc3VhbCBtb2RlCisJCXZlCVZpc3VhbCBtb2RlIHdpdGggJ3NlbGVjdGlvbicgImV4Y2x1c2l2ZSIgKHNhbWUgYXMgJ3YnLAorCQkJaWYgbm90IHNwZWNpZmllZCkKKwkJbwlPcGVyYXRvci1wZW5kaW5nIG1vZGUKKwkJaQlJbnNlcnQgbW9kZQorCQlyCVJlcGxhY2UgbW9kZQorCQljCUNvbW1hbmQtbGluZSBOb3JtYWwgKGFwcGVuZCkgbW9kZQorCQljaQlDb21tYW5kLWxpbmUgSW5zZXJ0IG1vZGUKKwkJY3IJQ29tbWFuZC1saW5lIFJlcGxhY2UgbW9kZQorCQlzbQlzaG93bWF0Y2ggaW4gSW5zZXJ0IG1vZGUKKwkJYQlhbGwgbW9kZXMKKwlUaGUgYXJndW1lbnQtbGlzdCBpcyBhIGRhc2ggc2VwYXJhdGVkIGxpc3Qgb2YgdGhlc2UgYXJndW1lbnRzOgorCQlob3J7Tn0JaG9yaXpvbnRhbCBiYXIsIHtOfSBwZXJjZW50IG9mIHRoZSBjaGFyYWN0ZXIgaGVpZ2h0CisJCXZlcntOfQl2ZXJ0aWNhbCBiYXIsIHtOfSBwZXJjZW50IG9mIHRoZSBjaGFyYWN0ZXIgd2lkdGgKKwkJYmxvY2sJYmxvY2sgY3Vyc29yLCBmaWxscyB0aGUgd2hvbGUgY2hhcmFjdGVyCisJCQlbb25seSBvbmUgb2YgdGhlIGFib3ZlIHRocmVlIHNob3VsZCBiZSBwcmVzZW50XQorCQlibGlua3dhaXR7Tn0JCQkJKmN1cnNvci1ibGlua2luZyoKKwkJYmxpbmtvbntOfQorCQlibGlua29mZntOfQorCQkJYmxpbmsgdGltZXMgZm9yIGN1cnNvcjogYmxpbmt3YWl0IGlzIHRoZSBkZWxheSBiZWZvcmUKKwkJCXRoZSBjdXJzb3Igc3RhcnRzIGJsaW5raW5nLCBibGlua29uIGlzIHRoZSB0aW1lIHRoYXQKKwkJCXRoZSBjdXJzb3IgaXMgc2hvd24gYW5kIGJsaW5rb2ZmIGlzIHRoZSB0aW1lIHRoYXQgdGhlCisJCQljdXJzb3IgaXMgbm90IHNob3duLiAgVGhlIHRpbWVzIGFyZSBpbiBtc2VjLiAgV2hlbiBvbmUKKwkJCW9mIHRoZSBudW1iZXJzIGlzIHplcm8sIHRoZXJlIGlzIG5vIGJsaW5raW5nLiAgVGhlCisJCQlkZWZhdWx0IGlzOiAiYmxpbmt3YWl0NzAwLWJsaW5rb240MDAtYmxpbmtvZmYyNTAiLgorCQkJVGhlc2UgbnVtYmVycyBhcmUgdXNlZCBmb3IgYSBtaXNzaW5nIGVudHJ5LiAgVGhpcworCQkJbWVhbnMgdGhhdCBibGlua2luZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuICBUbyBzd2l0Y2gKKwkJCWJsaW5raW5nIG9mZiB5b3UgY2FuIHVzZSAiYmxpbmtvbjAiLiAgVGhlIGN1cnNvciBvbmx5CisJCQlibGlua3Mgd2hlbiBWaW0gaXMgd2FpdGluZyBmb3IgaW5wdXQsIG5vdCB3aGlsZQorCQkJZXhlY3V0aW5nIGEgY29tbWFuZC4KKwkJCVRvIG1ha2UgdGhlIGN1cnNvciBibGluayBpbiBhbiB4dGVybSwgc2VlCisJCQl8eHRlcm0tYmxpbmt8LgorCQl7Z3JvdXAtbmFtZX0KKwkJCWEgaGlnaGxpZ2h0IGdyb3VwIG5hbWUsIHRoYXQgc2V0cyB0aGUgY29sb3IgYW5kIGZvbnQKKwkJCWZvciB0aGUgY3Vyc29yCisJCXtncm91cC1uYW1lfS97Z3JvdXAtbmFtZX0KKwkJCVR3byBoaWdobGlnaHQgZ3JvdXAgbmFtZXMsIHRoZSBmaXJzdCBpcyB1c2VkIHdoZW4KKwkJCW5vIGxhbmd1YWdlIG1hcHBpbmdzIGFyZSB1c2VkLCB0aGUgb3RoZXIgd2hlbiB0aGV5CisJCQlhcmUuIHxsYW5ndWFnZS1tYXBwaW5nfAorCisJRXhhbXBsZXMgb2YgcGFydHM6CisJICAgbi1jLXY6YmxvY2stbkN1cnNvcglpbiBOb3JtYWwsIENvbW1hbmQtbGluZSBhbmQgVmlzdWFsIG1vZGUsIHVzZSBhCisJCQkJYmxvY2sgY3Vyc29yIHdpdGggY29sb3JzIGZyb20gdGhlICJuQ3Vyc29yIgorCQkJCWhpZ2hsaWdodCBncm91cAorCSAgIGktY2k6dmVyMzAtaUN1cnNvci1ibGlua3dhaXQzMDAtYmxpbmtvbjIwMC1ibGlua29mZjE1MAorCQkJCUluIEluc2VydCBhbmQgQ29tbWFuZC1saW5lIEluc2VydCBtb2RlLCB1c2UgYQorCQkJCTMwJSB2ZXJ0aWNhbCBiYXIgY3Vyc29yIHdpdGggY29sb3JzIGZyb20gdGhlCisJCQkJImlDdXJzb3IiIGhpZ2hsaWdodCBncm91cC4gIEJsaW5rIGEgYml0CisJCQkJZmFzdGVyLgorCisJVGhlICdhJyBtb2RlIGlzIGRpZmZlcmVudC4gIEl0IHdpbGwgc2V0IHRoZSBnaXZlbiBhcmd1bWVudC1saXN0IGZvcgorCWFsbCBtb2Rlcy4gIEl0IGRvZXMgbm90IHJlc2V0IGFueXRoaW5nIHRvIGRlZmF1bHRzLiAgVGhpcyBjYW4gYmUgdXNlZAorCXRvIGRvIGEgY29tbW9uIHNldHRpbmcgZm9yIGFsbCBtb2Rlcy4gIEZvciBleGFtcGxlLCB0byBzd2l0Y2ggb2ZmCisJYmxpbmtpbmc6ICJhOmJsaW5rb24wIgorCisJRXhhbXBsZXMgb2YgY3Vyc29yIGhpZ2hsaWdodGluZzogPgorCSAgICA6aGlnaGxpZ2h0IEN1cnNvciBndWk9cmV2ZXJzZSBndWlmZz1OT05FIGd1aWJnPU5PTkUKKwkgICAgOmhpZ2hsaWdodCBDdXJzb3IgZ3VpPU5PTkUgZ3VpZmc9YmcgZ3VpYmc9ZmcKKzwKKwkJCQkJKidndWlmb250JyogKidnZm4nKgorCQkJCQkJICAgKkUyMzUqICpFNTk2KiAqRTYxMCogKkU2MTEqCisnZ3VpZm9udCcgJ2dmbicJCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggR1VJIGVuYWJsZWR9CisJVGhpcyBpcyBhIGxpc3Qgb2YgZm9udHMgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciB0aGUgR1VJIHZlcnNpb24gb2YgVmltLgorCUluIGl0cyBzaW1wbGVzdCBmb3JtIHRoZSB2YWx1ZSBpcyBqdXN0IG9uZSBmb250IG5hbWUuICBXaGVuCisJdGhlIGZvbnQgY2Fubm90IGJlIGZvdW5kIHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlLiAgVG8gdHJ5IG90aGVyCisJZm9udCBuYW1lcyBhIGxpc3QgY2FuIGJlIHNwZWNpZmllZCwgZm9udCBuYW1lcyBzZXBhcmF0ZWQgd2l0aCBjb21tYXMuCisJVGhlIGZpcnN0IHZhbGlkIGZvbnQgaXMgdXNlZC4KKwlXaGVuICdndWlmb250c2V0JyBpcyBub3QgZW1wdHksICdndWlmb250JyBpcyBub3QgdXNlZC4KKwlTcGFjZXMgYWZ0ZXIgYSBjb21tYSBhcmUgaWdub3JlZC4gIFRvIGluY2x1ZGUgYSBjb21tYSBpbiBhIGZvbnQgbmFtZQorCXByZWNlZGUgaXQgd2l0aCBhIGJhY2tzbGFzaC4gIFNldHRpbmcgYW4gb3B0aW9uIHJlcXVpcmVzIGFuIGV4dHJhCisJYmFja3NsYXNoIGJlZm9yZSBhIHNwYWNlIGFuZCBhIGJhY2tzbGFzaC4gIFNlZSBhbHNvCisJfG9wdGlvbi1iYWNrc2xhc2h8LiAgRm9yIGV4YW1wbGU6ID4KKwkgICAgOnNldCBndWlmb250PVNjcmVlbjE1LFwgN3gxMyxmb250XFwsd2l0aFxcLGNvbW1hcworPAl3aWxsIG1ha2UgdmltIHRyeSB0byB1c2UgdGhlIGZvbnQgIlNjcmVlbjE1IiBmaXJzdCwgYW5kIGlmIGl0IGZhaWxzIGl0CisJd2lsbCB0cnkgdG8gdXNlICI3eDEzIiBhbmQgdGhlbiAiZm9udCx3aXRoLGNvbW1hcyIgaW5zdGVhZC4KKwlGb3IgdGhlIEdUSysgMiBHVUkgdGhlIGZvbnQgbmFtZSBsb29rcyBsaWtlIHRoaXM6ID4KKwkgICAgOnNldCBndWlmb250PUFuZGFsZVwgTW9ub1wgMTEKKzwJVGhhdCdzIGFsbC4gIFhMRkRzIGFyZSBubyBsb25nZXIgYWNjZXB0ZWQuCisJCQkJCQkJCSpFMjM2KgorCU5vdGUgdGhhdCB0aGUgZm9udHMgbXVzdCBiZSBtb25vLXNwYWNlZCAoYWxsIGNoYXJhY3RlcnMgaGF2ZSB0aGUgc2FtZQorCXdpZHRoKS4KKwlUbyBwcmV2aWV3IGEgZm9udCBvbiBYMTEsIHlvdSBtaWdodCBiZSBhYmxlIHRvIHVzZSB0aGUgInhmb250c2VsIgorCXByb2dyYW0uICBUaGUgInhsc2ZvbnRzIiBwcm9ncmFtIGdpdmVzIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGZvbnRzLgorCUZvciBXaW4zMiwgR1RLIGFuZCBQaG90b24gb25seTogPgorCSAgICA6c2V0IGd1aWZvbnQ9KgorPAl3aWxsIGJyaW5nIHVwIGEgZm9udCByZXF1ZXN0ZXIsIHdoZXJlIHlvdSBjYW4gcGljayB0aGUgZm9udCB5b3Ugd2FudC4KKwlJZiBub25lIG9mIHRoZSBmb250cyBjYW4gYmUgbG9hZGVkLCB2aW0gd2lsbCBrZWVwIHRoZSBjdXJyZW50IHNldHRpbmcuCisJSWYgYW4gZW1wdHkgZm9udCBsaXN0IGlzIGdpdmVuLCB2aW0gd2lsbCB0cnkgdXNpbmcgb3RoZXIgcmVzb3VyY2UKKwlzZXR0aW5ncyAoZm9yIFgsIGl0IHdpbGwgdXNlIHRoZSBWaW0uZm9udCByZXNvdXJjZSksIGFuZCBmaW5hbGx5IGl0CisJd2lsbCB0cnkgc29tZSBidWlsdGluIGRlZmF1bHQgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSB0aGVyZSAoIjd4MTMiIGluCisJdGhlIGNhc2Ugb2YgWCkuICBUaGUgZm9udCBuYW1lcyBnaXZlbiBzaG91bGQgYmUgIm5vcm1hbCIgZm9udHMuICBWaW0KKwl3aWxsIHRyeSB0byBmaW5kIHRoZSByZWxhdGVkIGJvbGQgYW5kIGl0YWxpYyBmb250cy4KKwlGb3IgdGhlIFdpbjMyIEdVSQkJCQkJKkUyNDQqICpFMjQ1KgorCS0gdGFrZXMgdGhlc2Ugb3B0aW9ucyBpbiB0aGUgZm9udCBuYW1lOgorCQloWFggLSBoZWlnaHQgaXMgWFggKHBvaW50cywgY2FuIGJlIGZsb2F0aW5nLXBvaW50KQorCQl3WFggLSB3aWR0aCBpcyBYWCAocG9pbnRzLCBjYW4gYmUgZmxvYXRpbmctcG9pbnQpCisJCWIgICAtIGJvbGQKKwkJaSAgIC0gaXRhbGljCisJCXUgICAtIHVuZGVybGluZQorCQlzICAgLSBzdHJpa2VvdXQKKwkJY1hYIC0gY2hhcmFjdGVyIHNldCBYWC4gdmFsaWQgY2hhcnNldHMgYXJlOiBBTlNJLCBBUkFCSUMsCisJCSAgICAgIEJBTFRJQywgQ0hJTkVTRUJJRzUsIERFRkFVTFQsIEVBU1RFVVJPUEUsIEdCMjMxMiwgR1JFRUssCisJCSAgICAgIEhBTkdFVUwsIEhFQlJFVywgSk9IQUIsIE1BQywgT0VNLCBSVVNTSUFOLCBTSElGVEpJUywKKwkJICAgICAgU1lNQk9MLCBUSEFJLCBUVVJLSVNILCBWSUVUTkFNRVNFIEFOU0kgYW5kIEJBTFRJQy4KKworCSAgVXNlIGEgJzonIHRvIHNlcGFyYXRlIHRoZSBvcHRpb25zLgorCS0gQSAnXycgY2FuIGJlIHVzZWQgaW4gdGhlIHBsYWNlIG9mIGEgc3BhY2UsIHNvIHlvdSBkb24ndCBuZWVkIHRvIHVzZQorCSAgYmFja3NsYXNoZXMgdG8gZXNjYXBlIHRoZSBzcGFjZXMuCisJLSBFeGFtcGxlczogPgorCSAgICA6c2V0IGd1aWZvbnQ9Y291cmllcl9uZXc6aDEyOnc1OmI6Y1JVU1NJQU4KKwkgICAgOnNldCBndWlmb250PUFuZGFsZV9Nb25vOmg3LjU6dzQuNQorPAlTZWUgYWxzbyB8Zm9udC1zaXplc3wuCisKKwkJCQkJKidndWlmb250c2V0JyogKidnZnMnKgorCQkJCQkqRTI1MCogKkUyNTIqICpFMjM0KiAqRTU5NyogKkU1OTgqCisnZ3VpZm9udHNldCcgJ2dmcycJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCBHVUkgZW5hYmxlZCBhbmQKKwkJCXdpdGggdGhlIHwreGZvbnRzZXR8IGZlYXR1cmV9CisJCQl7bm90IGF2YWlsYWJsZSBpbiB0aGUgR1RLKyAyIEdVSX0KKwlXaGVuIG5vdCBlbXB0eSwgc3BlY2lmaWVzIHR3byAob3IgbW9yZSkgZm9udHMgdG8gYmUgdXNlZC4gIFRoZSBmaXJzdAorCW9uZSBmb3Igbm9ybWFsIEVuZ2xpc2gsIHRoZSBzZWNvbmQgb25lIGZvciB5b3VyIHNwZWNpYWwgbGFuZ3VhZ2UuICBTZWUKKwl8eGZvbnRzZXR8LgorCVNldHRpbmcgdGhpcyBvcHRpb24gYWxzbyBtZWFucyB0aGF0IGFsbCBmb250IG5hbWVzIHdpbGwgYmUgaGFuZGxlZCBhcworCWEgZm9udHNldCBuYW1lLiAgQWxzbyB0aGUgb25lcyB1c2VkIGZvciB0aGUgImZvbnQiIGFyZ3VtZW50IG9mIHRoZQorCXw6aGlnaGxpZ2h0fCBjb21tYW5kLgorCVRoZSBmb250cyBtdXN0IG1hdGNoIHdpdGggdGhlIGN1cnJlbnQgbG9jYWxlLiAgSWYgZm9udHMgZm9yIHRoZQorCWNoYXJhY3RlciBzZXRzIHRoYXQgdGhlIGN1cnJlbnQgbG9jYWxlIHVzZXMgYXJlIG5vdCBpbmNsdWRlZCwgc2V0dGluZworCSdndWlmb250c2V0JyB3aWxsIGZhaWwuCisJTm90ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICdndWlmb250JyBhbmQgJ2d1aWZvbnRzZXQnOiBJbiAnZ3VpZm9udCcKKwl0aGUgY29tbWEtc2VwYXJhdGVkIG5hbWVzIGFyZSBhbHRlcm5hdGl2ZSBuYW1lcywgb25lIG9mIHdoaWNoIHdpbGwgYmUKKwl1c2VkLiAgSW4gJ2d1aWZvbnRzZXQnIHRoZSB3aG9sZSBzdHJpbmcgaXMgb25lIGZvbnRzZXQgbmFtZSwKKwlpbmNsdWRpbmcgdGhlIGNvbW1hcy4gIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBzcGVjaWZ5IGFsdGVybmF0aXZlCisJZm9udHNldCBuYW1lcy4KKwlUaGlzIGV4YW1wbGUgd29ya3Mgb24gbWFueSBYMTEgc3lzdGVtczogPgorCQk6c2V0IGd1aWZvbnRzZXQ9LSotKi1tZWRpdW0tci1ub3JtYWwtLTE2LSotKi0qLWMtKi0qLSoKKzwKKwkJCQkqJ2d1aWZvbnR3aWRlJyogKidnZncnKiAqRTIzMSogKkU1MzMqICpFNTM0KgorJ2d1aWZvbnR3aWRlJyAnZ2Z3JwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIEdVSSBlbmFibGVkfQorCVdoZW4gbm90IGVtcHR5LCBzcGVjaWZpZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmb250cyB0byBiZSB1c2VkCisJZm9yIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGZvbnQgdGhhdCBjYW4gYmUgbG9hZGVkIGlzCisJdXNlZC4KKwlOb3RlOiBUaGUgc2l6ZSBvZiB0aGVzZSBmb250cyBtdXN0IGJlIGV4YWN0bHkgdHdpY2UgYXMgd2lkZSBhcyB0aGUgb25lCisJc3BlY2lmaWVkIHdpdGggJ2d1aWZvbnQnIGFuZCB0aGUgc2FtZSBoZWlnaHQuCisKKwlBbGwgR1VJIHZlcnNpb25zIGJ1dCBHVEsrIDI6CisKKwknZ3VpZm9udHdpZGUnIGlzIG9ubHkgdXNlZCB3aGVuICdlbmNvZGluZycgaXMgc2V0IHRvICJ1dGYtOCIgYW5kCisJJ2d1aWZvbnRzZXQnIGlzIGVtcHR5IG9yIGludmFsaWQuCisJV2hlbiAnZ3VpZm9udCcgaXMgc2V0IGFuZCBhIHZhbGlkIGZvbnQgaXMgZm91bmQgaW4gaXQgYW5kCisJJ2d1aWZvbnR3aWRlJyBpcyBlbXB0eSBWaW0gd2lsbCBhdHRlbXB0IHRvIGZpbmQgYSBtYXRjaGluZworCWRvdWJsZS13aWR0aCBmb250IGFuZCBzZXQgJ2d1aWZvbnR3aWRlJyB0byBpdC4KKworCUdUSysgMiBHVUkgb25seToJCQkqZ3VpZm9udHdpZGVfZ3RrMioKKworCUlmIHNldCBhbmQgdmFsaWQsICdndWlmb250d2lkZScgaXMgYWx3YXlzIHVzZWQgZm9yIGRvdWJsZSB3aWR0aAorCWNoYXJhY3RlcnMsIGV2ZW4gaWYgJ2VuY29kaW5nJyBpcyBub3Qgc2V0IHRvICJ1dGYtOCIuCisJVmltIGRvZXMgbm90IGF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBmb3IgJ2d1aWZvbnR3aWRlJworCWF1dG9tYXRpY2FsbHkuCUlmICdndWlmb250d2lkZScgaXMgZW1wdHkgUGFuZ28vWGZ0IHdpbGwgY2hvb3NlIHRoZQorCWZvbnQgZm9yIGNoYXJhY3RlcnMgbm90IGF2YWlsYWJsZSBpbiAnZ3VpZm9udCcuICBUaHVzIHlvdSBkbyBub3QgbmVlZAorCXRvIHNldCAnZ3VpZm9udHdpZGUnIGF0IGFsbCB1bmxlc3MgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZQorCW1hZGUgYnkgUGFuZ28vWGZ0LgorCisJCQkJCQkqJ2d1aWhlYWRyb29tJyogKidnaHInKgorJ2d1aWhlYWRyb29tJyAnZ2hyJwludW1iZXIJKGRlZmF1bHQgNTApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9IHtvbmx5IGZvciBHVEsgYW5kIFgxMSBHVUl9CisJVGhlIG51bWJlciBvZiBwaXhlbHMgc3VidHJhY3RlZCBmcm9tIHRoZSBzY3JlZW4gaGVpZ2h0IHdoZW4gZml0dGluZworCXRoZSBHVUkgd2luZG93IG9uIHRoZSBzY3JlZW4uICBTZXQgdGhpcyBiZWZvcmUgdGhlIEdVSSBpcyBzdGFydGVkLAorCWUuZy4sIGluIHlvdXIgfGd2aW1yY3wgZmlsZS4gIFdoZW4gemVybywgdGhlIHdob2xlIHNjcmVlbiBoZWlnaHQgd2lsbAorCWJlIHVzZWQgYnkgdGhlIHdpbmRvdy4JV2hlbiBwb3NpdGl2ZSwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcGl4ZWwKKwlsaW5lcyB3aWxsIGJlIGxlZnQgZm9yIHdpbmRvdyBkZWNvcmF0aW9ucyBhbmQgb3RoZXIgaXRlbXMgb24gdGhlCisJc2NyZWVuLiAgU2V0IGl0IHRvIGEgbmVnYXRpdmUgdmFsdWUgdG8gYWxsb3cgd2luZG93cyB0YWxsZXIgdGhhbiB0aGUKKwlzY3JlZW4uCisKKwkJCQkJCSonZ3Vpb3B0aW9ucycqIConZ28nKgorJ2d1aW9wdGlvbnMnICdnbycJc3RyaW5nCShkZWZhdWx0ICJnbXJMdFQiICAgKE1TLVdpbmRvd3MpLAorCQkJCQkgImFnaW1yTHRUIiAoR1RLLCBNb3RpZiBhbmQgQXRoZW5hKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCBHVUkgZW5hYmxlZH0KKwlUaGlzIG9wdGlvbiBvbmx5IGhhcyBhbiBlZmZlY3QgaW4gdGhlIEdVSSB2ZXJzaW9uIG9mIHZpbS4gIEl0IGlzIGEKKwlzZXF1ZW5jZSBvZiBsZXR0ZXJzIHdoaWNoIGRlc2NyaWJlcyB3aGF0IGNvbXBvbmVudHMgYW5kIG9wdGlvbnMgb2YgdGhlCisJR1VJIHNob3VsZCBiZSB1c2VkLgorCVRvIGF2b2lkIHByb2JsZW1zIHdpdGggZmxhZ3MgdGhhdCBhcmUgYWRkZWQgaW4gdGhlIGZ1dHVyZSwgdXNlIHRoZQorCSIrPSIgYW5kICItPSIgZmVhdHVyZSBvZiAiOnNldCIgfGFkZC1vcHRpb24tZmxhZ3N8LgorCisJVmFsaWQgbGV0dGVycyBhcmUgYXMgZm9sbG93czoKKwkJCQkJCQkqZ3Vpb3B0aW9uc19hKgorCSAgJ2EnCUF1dG9zZWxlY3Q6ICBJZiBwcmVzZW50LCB0aGVuIHdoZW5ldmVyIFZJU1VBTCBtb2RlIGlzIHN0YXJ0ZWQsCisJCW9yIHRoZSBWaXN1YWwgYXJlYSBleHRlbmRlZCwgVmltIHRyaWVzIHRvIGJlY29tZSB0aGUgb3duZXIgb2YKKwkJdGhlIHdpbmRvd2luZyBzeXN0ZW0ncyBnbG9iYWwgc2VsZWN0aW9uLiAgVGhpcyBtZWFucyB0aGF0IHRoZQorCQlWaXN1YWxseSBoaWdobGlnaHRlZCB0ZXh0IGlzIGF2YWlsYWJsZSBmb3IgcGFzdGluZyBpbnRvIG90aGVyCisJCWFwcGxpY2F0aW9ucyBhcyB3ZWxsIGFzIGludG8gVmltIGl0c2VsZi4gIFdoZW4gdGhlIFZpc3VhbCBtb2RlCisJCWVuZHMsIHBvc3NpYmx5IGR1ZSB0byBhbiBvcGVyYXRpb24gb24gdGhlIHRleHQsIG9yIHdoZW4gYW4KKwkJYXBwbGljYXRpb24gd2FudHMgdG8gcGFzdGUgdGhlIHNlbGVjdGlvbiwgdGhlIGhpZ2hsaWdodGVkIHRleHQKKwkJaXMgYXV0b21hdGljYWxseSB5YW5rZWQgaW50byB0aGUgIiogc2VsZWN0aW9uIHJlZ2lzdGVyLgorCQlUaHVzIHRoZSBzZWxlY3Rpb24gaXMgc3RpbGwgYXZhaWxhYmxlIGZvciBwYXN0aW5nIGludG8gb3RoZXIKKwkJYXBwbGljYXRpb25zIGFmdGVyIHRoZSBWSVNVQUwgbW9kZSBoYXMgZW5kZWQuCisJCSAgICBJZiBub3QgcHJlc2VudCwgdGhlbiBWaW0gd29uJ3QgYmVjb21lIHRoZSBvd25lciBvZiB0aGUKKwkJd2luZG93aW5nIHN5c3RlbSdzIGdsb2JhbCBzZWxlY3Rpb24gdW5sZXNzIGV4cGxpY2l0bHkgdG9sZCB0bworCQlieSBhIHlhbmsgb3IgZGVsZXRlIG9wZXJhdGlvbiBmb3IgdGhlICIqIHJlZ2lzdGVyLgorCQlUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBtb2RlbGVzcyBzZWxlY3Rpb24uCisKKwkgICdBJwlBdXRvc2VsZWN0IGZvciB0aGUgbW9kZWxlc3Mgc2VsZWN0aW9uLglMaWtlICdhJywgYnV0IG9ubHkKKwkJYXBwbGllcyB0byB0aGUgbW9kZWxlc3Mgc2VsZWN0aW9uLgorCisJCSAgICAnZ3Vpb3B0aW9ucycgICBhdXRvc2VsZWN0IFZpc3VhbCAgYXV0b3NlbGVjdCBtb2RlbGVzcyB+CisJCQkgIiIJCSAtCQkJIC0KKwkJCSAiYSIJCXllcwkJCXllcworCQkJICJBIgkJIC0JCQl5ZXMKKwkJCSAiYUEiCQl5ZXMJCQl5ZXMKKworCSAgJ2MnCVVzZSBjb25zb2xlIGRpYWxvZ3MgaW5zdGVhZCBvZiBwb3B1cCBkaWFsb2dzIGZvciBzaW1wbGUKKwkJY2hvaWNlcy4KKworCSAgJ2YnCUZvcmVncm91bmQ6IERvbid0IHVzZSBmb3JrKCkgdG8gZGV0YWNoIHRoZSBHVUkgZnJvbSB0aGUgc2hlbGwKKwkJd2hlcmUgaXQgd2FzIHN0YXJ0ZWQuICBVc2UgdGhpcyBmb3IgcHJvZ3JhbXMgdGhhdCB3YWl0IGZvciB0aGUKKwkJZWRpdG9yIHRvIGZpbmlzaCAoZS5nLiwgYW4gZS1tYWlsIHByb2dyYW0pLiAgQWx0ZXJuYXRpdmVseSB5b3UKKwkJY2FuIHVzZSAiZ3ZpbSAtZiIgb3IgIjpndWkgLWYiIHRvIHN0YXJ0IHRoZSBHVUkgaW4gdGhlCisJCWZvcmVncm91bmQuICB8Z3VpLWZvcmt8CisJCU5vdGU6IFNldCB0aGlzIG9wdGlvbiBpbiB0aGUgdmltcmMgZmlsZS4gIFRoZSBmb3JraW5nIG1heSBoYXZlCisJCWhhcHBlbmVkIGFscmVhZHkgd2hlbiB0aGUgZ3ZpbXJjIGZpbGUgaXMgcmVhZC4KKworCSAgJ2knCVVzZSBhIFZpbSBpY29uLiAgRm9yIEdUSyB3aXRoIEtERSBpdCBpcyB1c2VkIGluIHRoZSBsZWZ0LXVwcGVyCisJCWNvcm5lciBvZiB0aGUgd2luZG93LiAgSXQncyBibGFjayZ3aGl0ZSBvbiBub24tR1RLLCBiZWNhdXNlIG9mCisJCWxpbWl0YXRpb25zIG9mIFgxMS4gIEZvciBhIGNvbG9yIGljb24sIHNlZSB8WDExLWljb258LgorCisJICAnbScJTWVudSBiYXIgaXMgcHJlc2VudC4KKwkgICdNJwlUaGUgc3lzdGVtIG1lbnUgIiRWSU1SVU5USU1FL21lbnUudmltIiBpcyBub3Qgc291cmNlZC4JTm90ZQorCQl0aGF0IHRoaXMgZmxhZyBtdXN0IGJlIGFkZGVkIGluIHRoZSAudmltcmMgZmlsZSwgYmVmb3JlCisJCXN3aXRjaGluZyBvbiBzeW50YXggb3IgZmlsZXR5cGUgcmVjb2duaXRpb24gKHdoZW4gdGhlIC5ndmltcmMKKwkJZmlsZSBpcyBzb3VyY2VkIHRoZSBzeXN0ZW0gbWVudSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZDsgdGhlCisJCSI6c3ludGF4IG9uIiBhbmQgIjpmaWxldHlwZSBvbiIgY29tbWFuZHMgbG9hZCB0aGUgbWVudSB0b28pLgorCSAgJ2cnCUdyZXkgbWVudSBpdGVtczogTWFrZSBtZW51IGl0ZW1zIHRoYXQgYXJlIG5vdCBhY3RpdmUgZ3JleS4gIElmCisJCSdnJyBpcyBub3QgaW5jbHVkZWQgaW5hY3RpdmUgbWVudSBpdGVtcyBhcmUgbm90IHNob3duIGF0IGFsbC4KKwkJRXhjZXB0aW9uOiBBdGhlbmEgd2lsbCBhbHdheXMgdXNlIGdyZXkgbWVudSBpdGVtcy4KKworCSAgJ3QnCUluY2x1ZGUgdGVhcm9mZiBtZW51IGl0ZW1zLiAgQ3VycmVudGx5IG9ubHkgd29ya3MgZm9yIFdpbjMyLAorCQlHVEsrLCBhbmQgTW90aWYgMS4yIEdVSS4KKwkgICdUJwlJbmNsdWRlIFRvb2xiYXIuICBDdXJyZW50bHkgb25seSBpbiBXaW4zMiwgR1RLKywgTW90aWYsIGFuZAorCQlBdGhlbmEgR1VJcy4KKworCSAgJ3InCVJpZ2h0LWhhbmQgc2Nyb2xsYmFyIGlzIGFsd2F5cyBwcmVzZW50LgorCSAgJ1InCVJpZ2h0LWhhbmQgc2Nyb2xsYmFyIGlzIHByZXNlbnQgd2hlbiB0aGVyZSBpcyBhIHZlcnRpY2FsbHkKKwkJc3BsaXQgd2luZG93LgorCSAgJ2wnCUxlZnQtaGFuZCBzY3JvbGxiYXIgaXMgYWx3YXlzIHByZXNlbnQuCisJICAnTCcJTGVmdC1oYW5kIHNjcm9sbGJhciBpcyBwcmVzZW50IHdoZW4gdGhlcmUgaXMgYSB2ZXJ0aWNhbGx5CisJCXNwbGl0IHdpbmRvdy4KKwkgICdiJwlCb3R0b20gKGhvcml6b250YWwpIHNjcm9sbGJhciBpcyBwcmVzZW50LiAgSXRzIHNpemUgZGVwZW5kcyBvbgorCQl0aGUgbG9uZ2VzdCB2aXNpYmxlIGxpbmUsIG9yIG9uIHRoZSBjdXJzb3IgbGluZSBpZiB0aGUgJ2gnCisJCWZsYWcgaXMgaW5jbHVkZWQuIHxndWktaG9yaXotc2Nyb2xsfAorCSAgJ2gnCUxpbWl0IGhvcml6b250YWwgc2Nyb2xsYmFyIHNpemUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3Vyc29yCisJCWxpbmUuICBSZWR1Y2VzIGNvbXB1dGF0aW9ucy4gfGd1aS1ob3Jpei1zY3JvbGx8CisKKwlBbmQgeWVzLCB5b3UgbWF5IGV2ZW4gaGF2ZSBzY3JvbGxiYXJzIG9uIHRoZSBsZWZ0IEFORCB0aGUgcmlnaHQgaWYKKwl5b3UgcmVhbGx5IHdhbnQgdG8gOi0pLiAgU2VlIHxndWktc2Nyb2xsYmFyc3wgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKwkgICd2JwlVc2UgYSB2ZXJ0aWNhbCBidXR0b24gbGF5b3V0IGZvciBkaWFsb2dzLiAgV2hlbiBub3QgaW5jbHVkZWQsCisJCWEgaG9yaXpvbnRhbCBsYXlvdXQgaXMgcHJlZmVycmVkLCBidXQgd2hlbiBpdCBkb2Vzbid0IGZpdCBhCisJCXZlcnRpY2FsIGxheW91dCBpcyB1c2VkIGFueXdheS4KKwkgICdwJwlVc2UgUG9pbnRlciBjYWxsYmFja3MgZm9yIFgxMSBHVUkuICBUaGlzIGlzIHJlcXVpcmVkIGZvciBzb21lCisJCXdpbmRvdyBtYW5hZ2Vycy4gIElmIHRoZSBjdXJzb3IgaXMgbm90IGJsaW5raW5nIG9yIGhvbGxvdyBhdAorCQl0aGUgcmlnaHQgbW9tZW50LCB0cnkgYWRkaW5nIHRoaXMgZmxhZy4gIFRoaXMgbXVzdCBiZSBkb25lCisJCWJlZm9yZSBzdGFydGluZyB0aGUgR1VJLiAgU2V0IGl0IGluIHlvdXIgZ3ZpbXJjLiAgQWRkaW5nIG9yCisJCXJlbW92aW5nIGl0IGFmdGVyIHRoZSBHVUkgaGFzIHN0YXJ0ZWQgaGFzIG5vIGVmZmVjdC4KKwkgICdGJwlBZGQgYSBmb290ZXIuICBPbmx5IGZvciBNb3RpZi4JU2VlIHxndWktZm9vdGVyfC4KKworCQkJCQkJKidndWlwdHknKiAqJ25vZ3VpcHR5JyoKKydndWlwdHknCQlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCBHVUkgZW5hYmxlZH0KKwlPbmx5IGluIHRoZSBHVUk6IElmIG9uLCBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gb3BlbiBhIHBzZXVkby10dHkgZm9yCisJSS9PIHRvL2Zyb20gc2hlbGwgY29tbWFuZHMuICBTZWUgfGd1aS1wdHl8LgorCisJCQkJCQkqJ2hlbHBmaWxlJyogKidoZicqCisnaGVscGZpbGUnICdoZicJCXN0cmluZwkoZGVmYXVsdCAoTVNET1MpICAiJFZJTVJVTlRJTUVcZG9jXGhlbHAudHh0IgorCQkJCQkgKG90aGVycykgIiRWSU1SVU5USU1FL2RvYy9oZWxwLnR4dCIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTmFtZSBvZiB0aGUgbWFpbiBoZWxwIGZpbGUuICBBbGwgZGlzdHJpYnV0ZWQgaGVscCBmaWxlcyBzaG91bGQgYmUKKwlwbGFjZWQgdG9nZXRoZXIgaW4gb25lIGRpcmVjdG9yeS4gIEFkZGl0aW9uYWxseSwgYWxsICJkb2MiIGRpcmVjdG9yaWVzCisJaW4gJ3J1bnRpbWVwYXRoJyB3aWxsIGJlIHVzZWQuCisJRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LiAgRm9yIGV4YW1wbGU6CisJIiRWSU1SVU5USU1FL2RvYy9oZWxwLnR4dCIuICBJZiAkVklNUlVOVElNRSBpcyBub3Qgc2V0LCAkVklNIGlzIGFsc28KKwl0cmllZC4JQWxzbyBzZWUgfCRWSU1SVU5USU1FfCBhbmQgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZworCXNwYWNlcyBhbmQgYmFja3NsYXNoZXMuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ2hlbHBoZWlnaHQnKiAqJ2hoJyoKKydoZWxwaGVpZ2h0JyAnaGgnCW51bWJlcgkoZGVmYXVsdCAyMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3dpbmRvd3MKKwkJCWZlYXR1cmV9CisJTWluaW1hbCBpbml0aWFsIGhlaWdodCBvZiB0aGUgaGVscCB3aW5kb3cgd2hlbiBpdCBpcyBvcGVuZWQgd2l0aCB0aGUKKwkiOmhlbHAiIGNvbW1hbmQuICBUaGUgaW5pdGlhbCBoZWlnaHQgb2YgdGhlIGhlbHAgd2luZG93IGlzIGhhbGYgb2YgdGhlCisJY3VycmVudCB3aW5kb3csIG9yICh3aGVuIHRoZSAnZWEnIG9wdGlvbiBpcyBvbikgdGhlIHNhbWUgYXMgb3RoZXIKKwl3aW5kb3dzLiAgV2hlbiB0aGUgaGVpZ2h0IGlzIGxlc3MgdGhhbiAnaGVscGhlaWdodCcsIHRoZSBoZWlnaHQgaXMKKwlzZXQgdG8gJ2hlbHBoZWlnaHQnLiAgU2V0IHRvIHplcm8gdG8gZGlzYWJsZS4KKworCQkJCQkJKidoZWxwbGFuZycqIConaGxnJyoKKydoZWxwbGFuZycgJ2hsZycJc3RyaW5nCShkZWZhdWx0OiBtZXNzYWdlcyBsYW5ndWFnZSBvciBlbXB0eSkKKwkJCWdsb2JhbAorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9sYW5nfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgbGFuZ3VhZ2VzLiAgVmltIHdpbGwgdXNlIHRoZSBmaXJzdCBsYW5ndWFnZQorCWZvciB3aGljaCB0aGUgZGVzaXJlZCBoZWxwIGNhbiBiZSBmb3VuZC4gIFRoZSBFbmdsaXNoIGhlbHAgd2lsbCBhbHdheXMKKwliZSB1c2VkIGFzIGEgbGFzdCByZXNvcnQuICBZb3UgY2FuIGFkZCAiZW4iIHRvIHByZWZlciBFbmdsaXNoIG92ZXIKKwlhbm90aGVyIGxhbmd1YWdlLCBidXQgdGhhdCB3aWxsIG9ubHkgZmluZCB0YWdzIHRoYXQgZXhpc3QgaW4gdGhhdAorCWxhbmd1YWdlIGFuZCBub3QgaW4gdGhlIEVuZ2xpc2ggaGVscC4KKwlFeGFtcGxlOiA+CisJCTpzZXQgaGVscGxhbmc9ZGUsaXQKKzwJVGhpcyB3aWxsIGZpcnN0IHNlYXJjaCBHZXJtYW4sIHRoZW4gSXRhbGlhbiBhbmQgZmluYWxseSBFbmdsaXNoIGhlbHAKKwlmaWxlcy4KKwlXaGVuIHVzaW5nIHxDVFJMLV18IGFuZCAiOmhlbHAhIiBpbiBhIG5vbi1FbmdsaXNoIGhlbHAgZmlsZSBWaW0gd2lsbAorCXRyeSB0byBmaW5kIHRoZSB0YWcgaW4gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgYmVmb3JlIHVzaW5nIHRoaXMgb3B0aW9uLgorCVNlZSB8aGVscC10cmFuc2xhdGVkfC4KKworCQkJCSAgICAgKidoaWRkZW4nKiAqJ2hpZCcqIConbm9oaWRkZW4nKiAqJ25vaGlkJyoKKydoaWRkZW4nICdoaWQnCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG9mZiBhIGJ1ZmZlciBpcyB1bmxvYWRlZCB3aGVuIGl0IGlzIHxhYmFuZG9ufGVkLiAgV2hlbiBvbiBhCisJYnVmZmVyIGJlY29tZXMgaGlkZGVuIHdoZW4gaXQgaXMgfGFiYW5kb258ZWQuICBJZiB0aGUgYnVmZmVyIGlzIHN0aWxsCisJZGlzcGxheWVkIGluIGFub3RoZXIgd2luZG93LCBpdCBkb2VzIG5vdCBiZWNvbWUgaGlkZGVuLCBvZiBjb3Vyc2UuCisJVGhlIGNvbW1hbmRzIHRoYXQgbW92ZSB0aHJvdWdoIHRoZSBidWZmZXIgbGlzdCBzb21ldGltZXMgbWFrZSBhIGJ1ZmZlcgorCWhpZGRlbiBhbHRob3VnaCB0aGUgJ2hpZGRlbicgb3B0aW9uIGlzIG9mZjogV2hlbiB0aGUgYnVmZmVyIGlzCisJbW9kaWZpZWQsICdhdXRvd3JpdGUnIGlzIG9mZiBvciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZSwgYW5kIHRoZSAnIScKKwlmbGFnIHdhcyB1c2VkLglTZWUgYWxzbyB8d2luZG93cy50eHR8LgorCVRoaXMgb3B0aW9uIGlzIHNldCBmb3Igb25lIGNvbW1hbmQgd2l0aCAiOmhpZGUge2NvbW1hbmR9IiB8OmhpZGV8LgorCVdBUk5JTkc6IEl0J3MgZWFzeSB0byBmb3JnZXQgdGhhdCB5b3UgaGF2ZSBjaGFuZ2VzIGluIGhpZGRlbiBidWZmZXJzLgorCVRoaW5rIHR3aWNlIHdoZW4gdXNpbmcgIjpxISIgb3IgIjpxYSEiLgorCisJCQkJCQkqJ2hpZ2hsaWdodCcqIConaGwnKgorJ2hpZ2hsaWdodCcgJ2hsJwlzdHJpbmcJKGRlZmF1bHQgKGFzIGEgc2luZ2xlIHN0cmluZyk6CisJCQkJICAgICAiODpTcGVjaWFsS2V5LEA6Tm9uVGV4dCxkOkRpcmVjdG9yeSwKKwkJCQkgICAgIGU6RXJyb3JNc2csaTpJbmNTZWFyY2gsbDpTZWFyY2gsbTpNb3JlTXNnLAorCQkJCSAgICAgTTpNb2RlTXNnLG46TGluZU5yLHI6UXVlc3Rpb24sCisJCQkJICAgICBzOlN0YXR1c0xpbmUsUzpTdGF0dXNMaW5lTkMsYzpWZXJ0U3BsaXQKKwkJCQkgICAgIHQ6VGl0bGUsdjpWaXN1YWwsdzpXYXJuaW5nTXNnLFc6V2lsZE1lbnUsCisJCQkJICAgICBmOkZvbGRlZCxGOkZvbGRDb2x1bW4sQTpEaWZmQWRkLAorCQkJCSAgICAgQzpEaWZmQ2hhbmdlLEQ6RGlmZkRlbGV0ZSxUOkRpZmZUZXh0LAorCQkJCSAgICAgPjpTaWduQ29sdW1uIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzZXQgaGlnaGxpZ2h0aW5nIG1vZGUgZm9yIHZhcmlvdXMKKwlvY2Nhc2lvbnMuICBJdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNoYXJhY3RlciBwYWlycy4gIFRoZQorCWZpcnN0IGNoYXJhY3RlciBpbiBhIHBhaXIgZ2l2ZXMgdGhlIG9jY2FzaW9uLCB0aGUgc2Vjb25kIHRoZSBtb2RlIHRvCisJdXNlIGZvciB0aGF0IG9jY2FzaW9uLglUaGUgb2NjYXNpb25zIGFyZToKKwl8aGwtU3BlY2lhbEtleXwJIDggIE1ldGEgYW5kIHNwZWNpYWwga2V5cyBsaXN0ZWQgd2l0aCAiOm1hcCIKKwl8aGwtTm9uVGV4dHwJIEAgICd+JyBhbmQgJ0AnIGF0IHRoZSBlbmQgb2YgdGhlIHdpbmRvdyBhbmQKKwkJCSAgICBjaGFyYWN0ZXJzIGZyb20gJ3Nob3dicmVhaycKKwl8aGwtRGlyZWN0b3J5fAkgZCAgZGlyZWN0b3JpZXMgaW4gQ1RSTC1EIGxpc3RpbmcgYW5kIG90aGVyIHNwZWNpYWwKKwkJCSAgICB0aGluZ3MgaW4gbGlzdGluZ3MKKwl8aGwtRXJyb3JNc2d8CSBlICBlcnJvciBtZXNzYWdlcworCQkJIGggIChvYnNvbGV0ZSwgaWdub3JlZCkKKwl8aGwtSW5jU2VhcmNofAkgaSAgJ2luY3NlYXJjaCcgaGlnaGxpZ2h0aW5nCisJfGhsLVNlYXJjaHwJIGwgIGxhc3Qgc2VhcmNoIHBhdHRlcm4gaGlnaGxpZ2h0aW5nIChzZWUgJ2hsc2VhcmNoJykKKwl8aGwtTW9yZU1zZ3wJIG0gIHxtb3JlLXByb21wdHwKKwl8aGwtTW9kZU1zZ3wJIE0gIE1vZGUgKGUuZy4sICItLSBJTlNFUlQgLS0iKQorCXxobC1MaW5lTnJ8CSBuICBsaW5lIG51bWJlciBmb3IgIjpudW1iZXIiIGFuZCAiOiMiIGNvbW1hbmRzCisJfGhsLVF1ZXN0aW9ufAkgciAgfGhpdC1lbnRlcnwgcHJvbXB0IGFuZCB5ZXMvbm8gcXVlc3Rpb25zCisJfGhsLVN0YXR1c0xpbmV8CSBzICBzdGF0dXMgbGluZSBvZiBjdXJyZW50IHdpbmRvdyB8c3RhdHVzLWxpbmV8CisJfGhsLVN0YXR1c0xpbmVOQ3wgUyAgc3RhdHVzIGxpbmVzIG9mIG5vdC1jdXJyZW50IHdpbmRvd3MKKwl8aGwtVGl0bGV8CSB0ICBUaXRsZXMgZm9yIG91dHB1dCBmcm9tICI6c2V0IGFsbCIsICI6YXV0b2NtZCIgZXRjLgorCXxobC1WZXJ0U3BsaXR8CSBjICBjb2x1bW4gdXNlZCB0byBzZXBhcmF0ZSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MKKwl8aGwtVmlzdWFsfAkgdiAgVmlzdWFsIG1vZGUKKwl8aGwtVmlzdWFsTk9TfAkgViAgVmlzdWFsIG1vZGUgd2hlbiBWaW0gZG9lcyBpcyAiTm90IE93bmluZyB0aGUKKwkJCSAgICBTZWxlY3Rpb24iIE9ubHkgWDExIEd1aSdzIHxndWkteDExfCBhbmQKKwkJCSAgICB8eHRlcm0tY2xpcGJvYXJkfC4KKwl8aGwtV2FybmluZ01zZ3wJIHcgIHdhcm5pbmcgbWVzc2FnZXMKKwl8aGwtV2lsZE1lbnV8CSBXICB3aWxkY2FyZCBtYXRjaGVzIGRpc3BsYXllZCBmb3IgJ3dpbGRtZW51JworCXxobC1Gb2xkZWR8CSBmICBsaW5lIHVzZWQgZm9yIGNsb3NlZCBmb2xkcworCXxobC1Gb2xkQ29sdW1ufAkgRiAgJ2ZvbGRjb2x1bW4nCisJfGhsLVNpZ25Db2x1bW58CSA+ICBjb2x1bW4gdXNlZCBmb3IgfHNpZ25zfAorCisJVGhlIGRpc3BsYXkgbW9kZXMgYXJlOgorCQlyCXJldmVyc2UJCSh0ZXJtY2FwIGVudHJ5ICJtciIgYW5kICJtZSIpCisJCWkJaXRhbGljCQkodGVybWNhcCBlbnRyeSAiWkgiIGFuZCAiWlIiKQorCQliCWJvbGQJCSh0ZXJtY2FwIGVudHJ5ICJtZCIgYW5kICJtZSIpCisJCXMJc3RhbmRvdXQJKHRlcm1jYXAgZW50cnkgInNvIiBhbmQgInNlIikKKwkJdQl1bmRlcmxpbmUJKHRlcm1jYXAgZW50cnkgInVzIiBhbmQgInVlIikKKwkJbglubyBoaWdobGlnaHRpbmcKKwkJLQlubyBoaWdobGlnaHRpbmcKKwkJOgl1c2UgYSBoaWdobGlnaHQgZ3JvdXAKKwlUaGUgZGVmYXVsdCBpcyB1c2VkIGZvciBvY2Nhc2lvbnMgdGhhdCBhcmUgbm90IGluY2x1ZGVkLgorCUlmIHlvdSB3YW50IHRvIGNoYW5nZSB3aGF0IHRoZSBkaXNwbGF5IG1vZGVzIGRvLCBzZWUgfGRvcy1jb2xvcnN8CisJZm9yIGFuIGV4YW1wbGUuCisJV2hlbiB1c2luZyB0aGUgJzonIGRpc3BsYXkgbW9kZSwgdGhpcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mCisJYSBoaWdobGlnaHQgZ3JvdXAuICBBIGhpZ2hsaWdodCBncm91cCBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYW55IHR5cGUKKwlvZiBoaWdobGlnaHRpbmcsIGluY2x1ZGluZyB1c2luZyBjb2xvci4gIFNlZSB8OmhpZ2hsaWdodHwgb24gaG93IHRvCisJZGVmaW5lIG9uZS4gIFRoZSBkZWZhdWx0IHVzZXMgYSBkaWZmZXJlbnQgZ3JvdXAgZm9yIGVhY2ggb2NjYXNpb24uCisJU2VlIHxoaWdobGlnaHQtZGVmYXVsdHwgZm9yIHRoZSBkZWZhdWx0IGhpZ2hsaWdodCBncm91cHMuCisKKwkJCQkgKidobHNlYXJjaCcqIConaGxzJyogKidub2hsc2VhcmNoJyogKidub2hscycqCisnaGxzZWFyY2gnICdobHMnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtleHRyYV9zZWFyY2h8IGZlYXR1cmV9CisJV2hlbiB0aGVyZSBpcyBhIHByZXZpb3VzIHNlYXJjaCBwYXR0ZXJuLCBoaWdobGlnaHQgYWxsIGl0cyBtYXRjaGVzLgorCVRoZSB0eXBlIG9mIGhpZ2hsaWdodGluZyB1c2VkIGNhbiBiZSBzZXQgd2l0aCB0aGUgJ2wnIG9jY2FzaW9uIGluIHRoZQorCSdoaWdobGlnaHQnIG9wdGlvbi4gIFRoaXMgdXNlcyB0aGUgIlNlYXJjaCIgaGlnaGxpZ2h0IGdyb3VwIGJ5CisJZGVmYXVsdC4gIE5vdGUgdGhhdCBvbmx5IHRoZSBtYXRjaGluZyB0ZXh0IGlzIGhpZ2hsaWdodGVkLCBhbnkgb2Zmc2V0cworCWFyZSBub3QgYXBwbGllZC4KKwlTZWUgYWxzbzogJ2luY3NlYXJjaCcgYW5kIHw6bWF0Y2h8LgorCVdoZW4geW91IGdldCBib3JlZCBsb29raW5nIGF0IHRoZSBoaWdobGlnaHRlZCBtYXRjaGVzLCB5b3UgY2FuIHR1cm4gaXQKKwlvZmYgd2l0aCB8Om5vaGxzZWFyY2h8LiAgQXMgc29vbiBhcyB5b3UgdXNlIGEgc2VhcmNoIGNvbW1hbmQsIHRoZQorCWhpZ2hsaWdodGluZyBjb21lcyBiYWNrLgorCVdoZW4gdGhlIHNlYXJjaCBwYXR0ZXJuIGNhbiBtYXRjaCBhbiBlbmQtb2YtbGluZSwgVmltIHdpbGwgdHJ5IHRvCisJaGlnaGxpZ2h0IGFsbCBvZiB0aGUgbWF0Y2hlZCB0ZXh0LiAgSG93ZXZlciwgdGhpcyBkZXBlbmRzIG9uIHdoZXJlIHRoZQorCXNlYXJjaCBzdGFydHMuCVRoaXMgd2lsbCBiZSB0aGUgZmlyc3QgbGluZSBpbiB0aGUgd2luZG93IG9yIHRoZSBmaXJzdAorCWxpbmUgYmVsb3cgYSBjbG9zZWQgZm9sZC4gIEEgbWF0Y2ggaW4gYSBwcmV2aW91cyBsaW5lIHdoaWNoIGlzIG5vdAorCWRyYXduIG1heSBub3QgY29udGludWUgaW4gYW4gbmV3bHkgZHJhd24gbGluZS4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonaGlzdG9yeScqIConaGknKgorJ2hpc3RvcnknICdoaScJCW51bWJlcgkoVmltIGRlZmF1bHQ6IDIwLCBWaSBkZWZhdWx0OiAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUEgaGlzdG9yeSBvZiAiOiIgY29tbWFuZHMsIGFuZCBhIGhpc3Rvcnkgb2YgcHJldmlvdXMgc2VhcmNoIHBhdHRlcm5zCisJYXJlIHJlbWVtYmVyZWQuICBUaGlzIG9wdGlvbiBkZWNpZGVzIGhvdyBtYW55IGVudHJpZXMgbWF5IGJlIHN0b3JlZCBpbgorCWVhY2ggb2YgdGhlc2UgaGlzdG9yaWVzIChzZWUgfGNtZGxpbmUtZWRpdGluZ3wpLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJCSAqJ2hrbWFwJyogKidoaycqIConbm9oa21hcCcqIConbm9oaycqCisnaGttYXAnICdoaycJCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtyaWdodGxlZnR8CisJCQlmZWF0dXJlfQorCVdoZW4gb24sIHRoZSBrZXlib2FyZCBpcyBtYXBwZWQgZm9yIHRoZSBIZWJyZXcgY2hhcmFjdGVyIHNldC4KKwlOb3JtYWxseSB5b3Ugd291bGQgc2V0ICdhbGxvd3JldmlucycgYW5kIHVzZSBDVFJMLV8gaW4gaW5zZXJ0IG1vZGUgdG8KKwl0b2dnbGUgdGhpcyBvcHRpb24uICBTZWUgfHJpbGVmdC50eHR8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCSAqJ2hrbWFwcCcqIConaGtwJyogKidub2hrbWFwcCcqIConbm9oa3AnKgorJ2hrbWFwcCcgJ2hrcCcJCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtyaWdodGxlZnR8CisJCQlmZWF0dXJlfQorCVdoZW4gb24sIHBob25ldGljIGtleWJvYXJkIG1hcHBpbmcgaXMgdXNlZC4gICdoa21hcCcgbXVzdCBhbHNvIGJlIG9uLgorCVRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIGEgbm9uLUhlYnJldyBrZXlib2FyZC4KKwlTZWUgfHJpbGVmdC50eHR8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidpY29uJyogKidub2ljb24nKgorJ2ljb24nCQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYsIG9uIHdoZW4gdGl0bGUgY2FuIGJlIHJlc3RvcmVkKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3RpdGxlfAorCQkJZmVhdHVyZX0KKwlXaGVuIG9uLCB0aGUgaWNvbiB0ZXh0IG9mIHRoZSB3aW5kb3cgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIG9mCisJJ2ljb25zdHJpbmcnIChpZiBpdCBpcyBub3QgZW1wdHkpLCBvciB0byB0aGUgbmFtZSBvZiB0aGUgZmlsZQorCWN1cnJlbnRseSBiZWluZyBlZGl0ZWQuICBPbmx5IHRoZSBsYXN0IHBhcnQgb2YgdGhlIG5hbWUgaXMgdXNlZC4KKwlPdmVycmlkZGVuIGJ5IHRoZSAnaWNvbnN0cmluZycgb3B0aW9uLgorCU9ubHkgd29ya3MgaWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIHNldHRpbmcgd2luZG93IGljb25zIChjdXJyZW50bHkKKwlvbmx5IFgxMSBHVUkgYW5kIHRlcm1pbmFscyB3aXRoIGEgbm9uLWVtcHR5ICd0X0lTJyBvcHRpb24gLSB0aGVzZSBhcmUKKwlVbml4IHh0ZXJtIGFuZCBpcmlzLWFuc2kgYnkgZGVmYXVsdCwgd2hlcmUgJ3RfSVMnIGlzIHRha2VuIGZyb20gdGhlCisJYnVpbHRpbiB0ZXJtY2FwKS4KKwlXaGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCBIQVZFX1gxMSBkZWZpbmVkLCB0aGUgb3JpZ2luYWwgaWNvbiB3aWxsIGJlCisJcmVzdG9yZWQgaWYgcG9zc2libGUgfFgxMXwuIFNlZSB8WDExLWljb258IGZvciBjaGFuZ2luZyB0aGUgaWNvbiBvbgorCVgxMS4KKworCQkJCQkJKidpY29uc3RyaW5nJyoKKydpY29uc3RyaW5nJwkJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3RpdGxlfAorCQkJZmVhdHVyZX0KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIG5vdCBlbXB0eSwgaXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgaWNvbiB0ZXh0IG9mCisJdGhlIHdpbmRvdy4gIFRoaXMgaGFwcGVucyBvbmx5IHdoZW4gdGhlICdpY29uJyBvcHRpb24gaXMgb24uCisJT25seSB3b3JrcyBpZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgc2V0dGluZyB3aW5kb3cgaWNvbiB0ZXh0CisJKGN1cnJlbnRseSBvbmx5IFgxMSBHVUkgYW5kIHRlcm1pbmFscyB3aXRoIGEgbm9uLWVtcHR5ICd0X0lTJyBvcHRpb24pLgorCURvZXMgbm90IHdvcmsgZm9yIE1TIFdpbmRvd3MuCisJV2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggSEFWRV9YMTEgZGVmaW5lZCwgdGhlIG9yaWdpbmFsIGljb24gd2lsbCBiZQorCXJlc3RvcmVkIGlmIHBvc3NpYmxlIHxYMTF8LgorCVdoZW4gdGhpcyBvcHRpb24gY29udGFpbnMgcHJpbnRmLXN0eWxlICclJyBpdGVtcywgdGhleSB3aWxsIGJlCisJZXhwYW5kZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyB1c2VkIGZvciAnc3RhdHVzbGluZScuCVNlZQorCSd0aXRsZXN0cmluZycgZm9yIGV4YW1wbGUgc2V0dGluZ3MuCisJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3N0YXR1c2xpbmV8IGZlYXR1cmV9CisKKwkJCSonaWdub3JlY2FzZScqIConaWMnKiAqJ25vaWdub3JlY2FzZScqIConbm9pYycqCisnaWdub3JlY2FzZScgJ2ljJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCUlnbm9yZSBjYXNlIGluIHNlYXJjaCBwYXR0ZXJucy4gIEFsc28gdXNlZCB3aGVuIHNlYXJjaGluZyBpbiB0aGUgdGFncworCWZpbGUuCisJQWxzbyBzZWUgJ3NtYXJ0Y2FzZScuCisJQ2FuIGJlIG92ZXJydWxlZCBieSB1c2luZyAiXGMiIG9yICJcQyIgaW4gdGhlIHBhdHRlcm4sIHNlZQorCXwvaWdub3JlY2FzZXwuCisKKwkJCQkJCSonaW1hY3RpdmF0ZWtleScqIConaW1haycqCisnaW1hY3RpdmF0ZWtleScgJ2ltYWsnCXN0cmluZyAoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggfCt4aW18IGFuZAorCQkJfCtHVUlfR1RLfH0KKwlTcGVjaWZpZXMgdGhlIGtleSB0aGF0IHlvdXIgSW5wdXQgTWV0aG9kIGluIFgtV2luZG93cyB1c2VzIGZvcgorCWFjdGl2YXRpb24uICBXaGVuIHRoaXMgaXMgc3BlY2lmaWVkIGNvcnJlY3RseSwgdmltIGNhbiBmdWxseSBjb250cm9sCisJSU0gd2l0aCAnaW1jbWRsaW5lJywgJ2ltaW5zZXJ0JyBhbmQgJ2ltc2VhcmNoJy4KKwlZb3UgY2FuJ3QgdXNlIHRoaXMgb3B0aW9uIHRvIGNoYW5nZSB0aGUgYWN0aXZhdGlvbiBrZXksIHRoZSBvcHRpb24KKwl0ZWxscyBWaW0gd2hhdCB0aGUga2V5IGlzLgorCUZvcm1hdDoKKwkJW01PRElGSUVSX0ZMQUctXUtFWV9TVFJJTkcKKworCVRoZXNlIGNoYXJhY3RlcnMgY2FuIGJlIHVzZWQgZm9yIE1PRElGSUVSX0ZMQUcgKGNhc2UgaXMgaWdub3JlZCk6CisJCVMJICAgIFNoaWZ0IGtleQorCQlMCSAgICBMb2NrIGtleQorCQlDCSAgICBDb250cm9sIGtleQorCQkxCSAgICBNb2QxIGtleQorCQkyCSAgICBNb2QyIGtleQorCQkzCSAgICBNb2QzIGtleQorCQk0CSAgICBNb2Q0IGtleQorCQk1CSAgICBNb2Q1IGtleQorCUNvbWJpbmF0aW9ucyBhcmUgYWxsb3dlZCwgZm9yIGV4YW1wbGUgIlMtQy1zcGFjZSIgb3IgIlNDLXNwYWNlIiBhcmUKKwlib3RoIHNoaWZ0K2N0cmwrc3BhY2UuCisJU2VlIDxYMTEva2V5c3ltZGVmLmg+IGFuZCBYU3RyaW5nVG9LZXlzeW0gZm9yIEtFWV9TVFJJTkcuCisKKwlFeGFtcGxlOiA+CisJCTpzZXQgaW1hY3RpdmF0ZWtleT1TLXNwYWNlCis8CSJTLXNwYWNlIiBtZWFucyBzaGlmdCtzcGFjZS4gIFRoaXMgaXMgdGhlIGFjdGl2YXRpb24ga2V5IGZvciBraW5wdXQyICsKKwljYW5uYSAoSmFwYW5lc2UpLCBhbmQgYW1pIChLb3JlYW4pLgorCisJCQkJKidpbWNtZGxpbmUnKiAqJ2ltYycqIConbm9pbWNtZGxpbmUnKiAqJ25vaW1jJyoKKydpbWNtZGxpbmUnICdpbWMnCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCt4aW18CisJCQl8K211bHRpX2J5dGVfaW1lfCBvciB8Z2xvYmFsLWltZXwgZmVhdHVyZX0KKwlXaGVuIHNldCB0aGUgSW5wdXQgTWV0aG9kIGlzIGFsd2F5cyBvbiB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBjb21tYW5kCisJbGluZSwgdW5sZXNzIGVudGVyaW5nIGEgc2VhcmNoIHBhdHRlcm4gKHNlZSAnaW1zZWFyY2gnIGZvciB0aGF0KS4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdXIgaW5wdXQgbWV0aG9kIGFsbG93cyBlbnRlcmluZworCUVuZ2xpc2ggY2hhcmFjdGVycyBkaXJlY3RseSwgZS5nLiwgd2hlbiBpdCdzIHVzZWQgdG8gdHlwZSBhY2NlbnRlZAorCWNoYXJhY3RlcnMgd2l0aCBkZWFkIGtleXMuCisKKwkJCQkqJ2ltZGlzYWJsZScqIConaW1kJyogKidub2Rpc2FibGUnKiAqJ25vaW1kJyoKKydpbWRpc2FibGUnICdpbWQnCWJvb2xlYW4gKGRlZmF1bHQgb2ZmLCBvbiBmb3Igc29tZSBzeXN0ZW1zIChTR0kpKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCt4aW18CisJCQl8K211bHRpX2J5dGVfaW1lfCBvciB8Z2xvYmFsLWltZXwgZmVhdHVyZX0KKwlXaGVuIHNldCB0aGUgSW5wdXQgTWV0aG9kIGlzIG5ldmVyIHVzZWQuICBUaGlzIGlzIHVzZWZ1bCB0byBkaXNhYmxlCisJdGhlIElNIHdoZW4gaXQgZG9lc24ndCB3b3JrIHByb3Blcmx5LgorCUN1cnJlbnRseSB0aGlzIG9wdGlvbiBpcyBvbiBieSBkZWZhdWx0IGZvciBTR0kvSVJJWCBtYWNoaW5lcy4gIFRoaXMKKwltYXkgY2hhbmdlIGluIGxhdGVyIHJlbGVhc2VzLgorCisJCQkJCQkqJ2ltaW5zZXJ0JyogKidpbWknKgorJ2ltaW5zZXJ0JyAnaW1pJwludW1iZXIgKGRlZmF1bHQgMCwgMiB3aGVuIGFuIGlucHV0IG1ldGhvZCBpcyBzdXBwb3J0ZWQpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJU3BlY2lmaWVzIHdoZXRoZXIgOmxtYXAgb3IgYW4gSW5wdXQgTWV0aG9kIChJTSkgaXMgdG8gYmUgdXNlZCBpbgorCUluc2VydCBtb2RlLiAgVmFsaWQgdmFsdWVzOgorCQkwCTpsbWFwIGlzIG9mZiBhbmQgSU0gaXMgb2ZmCisJCTEJOmxtYXAgaXMgT04gYW5kIElNIGlzIG9mZgorCQkyCTpsbWFwIGlzIG9mZiBhbmQgSU0gaXMgT04KKwkyIGlzIGF2YWlsYWJsZSBvbmx5IHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlX2ltZXwsIHwreGltfAorCW9yIHxnbG9iYWwtaW1lfC4KKwlUbyBhbHdheXMgcmVzZXQgdGhlIG9wdGlvbiB0byB6ZXJvIHdoZW4gbGVhdmluZyBJbnNlcnQgbW9kZSB3aXRoIDxFc2M+CisJdGhpcyBjYW4gYmUgdXNlZDogPgorCQk6aW5vcmVtYXAgPEVTQz4gPEVTQz46c2V0IGltaW5zZXJ0PTA8Q1I+Cis8CVRoaXMgbWFrZXMgOmxtYXAgYW5kIElNIHR1cm4gb2ZmIGF1dG9tYXRpY2FsbHkgd2hlbiBsZWF2aW5nIEluc2VydAorCW1vZGUuCisJTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGNoYW5nZXMgd2hlbiB1c2luZyBDVFJMLV4gaW4gSW5zZXJ0IG1vZGUKKwl8aV9DVFJMLV58LgorCVRoZSB2YWx1ZSBpcyBzZXQgdG8gMSB3aGVuIHNldHRpbmcgJ2tleW1hcCcgdG8gYSB2YWxpZCBrZXltYXAgbmFtZS4KKwlJdCBpcyBhbHNvIHVzZWQgZm9yIHRoZSBhcmd1bWVudCBvZiBjb21tYW5kcyBsaWtlICJyIiBhbmQgImYiLgorCVRoZSB2YWx1ZSAwIG1heSBub3Qgd29yayBjb3JyZWN0bHkgd2l0aCBBdGhlbmEgYW5kIE1vdGlmIHdpdGggc29tZSBYSU0KKwltZXRob2RzLiAgVXNlICdpbWRpc2FibGUnIHRvIGRpc2FibGUgWElNIHRoZW4uCisKKwkJCQkJCSonaW1zZWFyY2gnKiAqJ2ltcycqCisnaW1zZWFyY2gnICdpbXMnCW51bWJlciAoZGVmYXVsdCAwLCAyIHdoZW4gYW4gaW5wdXQgbWV0aG9kIGlzIHN1cHBvcnRlZCkKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlTcGVjaWZpZXMgd2hldGhlciA6bG1hcCBvciBhbiBJbnB1dCBNZXRob2QgKElNKSBpcyB0byBiZSB1c2VkIHdoZW4KKwllbnRlcmluZyBhIHNlYXJjaCBwYXR0ZXJuLiAgVmFsaWQgdmFsdWVzOgorCQktMQl0aGUgdmFsdWUgb2YgJ2ltaW5zZXJ0JyBpcyB1c2VkLCBtYWtlcyBpdCBsb29rIGxpa2UKKwkJCSdpbWluc2VydCcgaXMgYWxzbyB1c2VkIHdoZW4gdHlwaW5nIGEgc2VhcmNoIHBhdHRlcm4KKwkJMAk6bG1hcCBpcyBvZmYgYW5kIElNIGlzIG9mZgorCQkxCTpsbWFwIGlzIE9OIGFuZCBJTSBpcyBvZmYKKwkJMgk6bG1hcCBpcyBvZmYgYW5kIElNIGlzIE9OCisJTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGNoYW5nZXMgd2hlbiB1c2luZyBDVFJMLV4gaW4gQ29tbWFuZC1saW5lIG1vZGUKKwl8Y19DVFJMLV58LgorCVRoZSB2YWx1ZSBpcyBzZXQgdG8gMSB3aGVuIGl0IGlzIG5vdCAtMSBhbmQgc2V0dGluZyB0aGUgJ2tleW1hcCcKKwlvcHRpb24gdG8gYSB2YWxpZCBrZXltYXAgbmFtZS4KKwlUaGUgdmFsdWUgMCBtYXkgbm90IHdvcmsgY29ycmVjdGx5IHdpdGggQXRoZW5hIGFuZCBNb3RpZiB3aXRoIHNvbWUgWElNCisJbWV0aG9kcy4gIFVzZSAnaW1kaXNhYmxlJyB0byBkaXNhYmxlIFhJTSB0aGVuLgorCisJCQkJCQkqJ2luY2x1ZGUnKiAqJ2luYycqCisnaW5jbHVkZScgJ2luYycJCXN0cmluZwkoZGVmYXVsdCAiXlxzKiNccyppbmNsdWRlIikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2ZpbmRfaW5fcGF0aHwgZmVhdHVyZX0KKwlQYXR0ZXJuIHRvIGJlIHVzZWQgdG8gZmluZCBhbiBpbmNsdWRlIGNvbW1hbmQuCUl0IGlzIGEgc2VhcmNoCisJcGF0dGVybiwganVzdCBsaWtlIGZvciB0aGUgIi8iIGNvbW1hbmQgKFNlZSB8cGF0dGVybnwpLiAgVGhlIGRlZmF1bHQKKwl2YWx1ZSBpcyBmb3IgQyBwcm9ncmFtcy4gIFRoaXMgb3B0aW9uIGlzIHVzZWQgZm9yIHRoZSBjb21tYW5kcyAiW2kiLAorCSJdSSIsICJbZCIsIGV0Yy4uICBUaGUgJ2lzZm5hbWUnIG9wdGlvbiBpcyB1c2VkIHRvIHJlY29nbml6ZSB0aGUgZmlsZQorCW5hbWUgdGhhdCBjb21lcyBhZnRlciB0aGUgbWF0Y2hlZCBwYXR0ZXJuLiAgU2VlIHxvcHRpb24tYmFja3NsYXNofAorCWFib3V0IGluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLgorCisJCQkJCQkqJ2luY2x1ZGVleHByJyogKidpbmV4JyoKKydpbmNsdWRlZXhwcicgJ2luZXgnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrZmluZF9pbl9wYXRofCBvciB8K2V2YWx8IGZlYXR1cmV9CisJRXhwcmVzc2lvbiB0byBiZSB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgc3RyaW5nIGZvdW5kIHdpdGggdGhlICdpbmNsdWRlJworCW9wdGlvbiB0byBhIGZpbGUgbmFtZS4JTW9zdGx5IHVzZWZ1bCB0byBjaGFuZ2UgIi4iIHRvICIvIiBmb3IgSmF2YTogPgorCQk6c2V0IGluY2x1ZGVleHByPXN1YnN0aXR1dGUodjpmbmFtZSwnXFwuJywnLycsJ2cnKQorPAlUaGUgInY6Zm5hbWUiIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZSBmaWxlIG5hbWUgdGhhdCB3YXMgZGV0ZWN0ZWQuCisJRXZhbHVhdGVkIGluIHRoZSB8c2FuZGJveHwuCisJQWxzbyB1c2VkIGZvciB0aGUgfGdmfCBjb21tYW5kIGlmIGFuIHVubW9kaWZpZWQgZmlsZSBuYW1lIGNhbid0IGJlCisJZm91bmQuCUFsbG93cyBkb2luZyAiZ2YiIG9uIHRoZSBuYW1lIGFmdGVyIGFuICdpbmNsdWRlJyBzdGF0ZW1lbnQuCisJQWxzbyB1c2VkIGZvciB8PGNmaWxlPnwuCisKKwkJCQkgKidpbmNzZWFyY2gnKiAqJ2lzJyogKidub2luY3NlYXJjaCcqIConbm9pcycqCisnaW5jc2VhcmNoJyAnaXMnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtleHRyYV9zZWFyY2h8IGZlYXR1cmV9CisJV2hpbGUgdHlwaW5nIGEgc2VhcmNoIGNvbW1hbmQsIHNob3cgaW1tZWRpYXRlbHkgd2hlcmUgdGhlIHNvIGZhcgorCXR5cGVkIHBhdHRlcm4gbWF0Y2hlcy4JVGhlIG1hdGNoZWQgc3RyaW5nIGlzIGhpZ2hsaWdodGVkLiAgSWYgdGhlCisJcGF0dGVybiBpcyBpbnZhbGlkIG9yIG5vdCBmb3VuZCwgbm90aGluZyBpcyBzaG93bi4gIFRoZSBzY3JlZW4gd2lsbAorCWJlIHVwZGF0ZWQgb2Z0ZW4sIHRoaXMgaXMgb25seSB1c2VmdWwgb24gZmFzdCB0ZXJtaW5hbHMuICBOb3RlIHRoYXQKKwl0aGUgbWF0Y2ggd2lsbCBiZSBzaG93biwgYnV0IHRoZSBjdXJzb3IgaXMgbm90IGFjdHVhbGx5IHBvc2l0aW9uZWQKKwl0aGVyZS4JWW91IHN0aWxsIG5lZWQgdG8gZmluaXNoIHRoZSBzZWFyY2ggY29tbWFuZCB3aXRoIDxDUj4gdG8gbW92ZQorCXRoZSBjdXJzb3IuICBUaGUgaGlnaGxpZ2h0aW5nIGNhbiBiZSBzZXQgd2l0aCB0aGUgJ2knIGZsYWcgaW4KKwknaGlnaGxpZ2h0Jy4gIFNlZSBhbHNvOiAnaGxzZWFyY2gnLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidpbmRlbnRleHByJyogKidpbmRlJyoKKydpbmRlbnRleHByJyAnaW5kZScJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NpbmRlbnR8CisJCQlvciB8K2V2YWx8IGZlYXR1cmVzfQorCUV4cHJlc3Npb24gd2hpY2ggaXMgZXZhbHVhdGVkIHRvIG9idGFpbiB0aGUgcHJvcGVyIGluZGVudCBmb3IgYSBsaW5lLgorCUl0IGlzIHVzZWQgd2hlbiBhIG5ldyBsaW5lIGlzIGNyZWF0ZWQsIGZvciB0aGUgfD18IG9wZXJhdG9yIGFuZAorCWluIEluc2VydCBtb2RlIGFzIHNwZWNpZmllZCB3aXRoIHRoZSAnaW5kZW50a2V5cycgb3B0aW9uLgorCVdoZW4gdGhpcyBvcHRpb24gaXMgbm90IGVtcHR5LCBpdCBvdmVycnVsZXMgdGhlICdjaW5kZW50JyBhbmQKKwknc21hcnRpbmRlbnQnIGluZGVudGluZy4KKwlXaGVuICdwYXN0ZScgaXMgc2V0IHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkIGZvciBpbmRlbnRpbmcuCisJVGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIHdpdGggfHY6bG51bXwgc2V0IHRvIHRoZSBsaW5lIG51bWJlciBmb3IKKwl3aGljaCB0aGUgaW5kZW50IGlzIHRvIGJlIGNvbXB1dGVkLiAgVGhlIGN1cnNvciBpcyBhbHNvIGFzIHRoaXMgbGluZQorCXdoZW4gdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIChidXQgaXQgbWF5IGJlIG1vdmVkIGFyb3VuZCkuCisJVGhlIGV4cHJlc3Npb24gbXVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBzcGFjZXMgd29ydGggb2YgaW5kZW50LiAgSXQKKwljYW4gcmV0dXJuICItMSIgdG8ga2VlcCB0aGUgY3VycmVudCBpbmRlbnQgKHRoaXMgbWVhbnMgJ2F1dG9pbmRlbnQnIGlzCisJdXNlZCBmb3IgdGhlIGluZGVudCkuCisJRnVuY3Rpb25zIHVzZWZ1bCBmb3IgY29tcHV0aW5nIHRoZSBpbmRlbnQgYXJlIHxpbmRlbnQoKXwsIHxjaW5kZW50KCl8CisJYW5kIHxsaXNwaW5kZW50KCl8LgorCVRoZSBldmFsdWF0aW9uIG9mIHRoZSBleHByZXNzaW9uIG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzISAgSXQgbXVzdAorCW5vdCBjaGFuZ2UgdGhlIHRleHQsIGp1bXAgdG8gYW5vdGhlciB3aW5kb3csIGV0Yy4gIEFmdGVyd2FyZHMgdGhlCisJY3Vyc29yIHBvc2l0aW9uIGlzIGFsd2F5cyByZXN0b3JlZCwgdGh1cyB0aGUgY3Vyc29yIG1heSBiZSBtb3ZlZC4KKwlOb3JtYWxseSB0aGlzIG9wdGlvbiB3b3VsZCBiZSBzZXQgdG8gY2FsbCBhIGZ1bmN0aW9uOiA+CisJCTpzZXQgaW5kZW50ZXhwcj1HZXRNeUluZGVudCgpCis8CUVycm9yIG1lc3NhZ2VzIHdpbGwgYmUgc3VwcHJlc3NlZCwgdW5sZXNzIHRoZSAnZGVidWcnIG9wdGlvbiBjb250YWlucworCSJtc2ciLgorCVNlZSB8aW5kZW50LWV4cHJlc3Npb258LiAgQWxzbyBzZWUgfGV2YWwtc2FuZGJveHwuCisJTk9URTogVGhpcyBvcHRpb24gaXMgbWFkZSBlbXB0eSB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonaW5kZW50a2V5cycqIConaW5kaycqCisnaW5kZW50a2V5cycgJ2luZGsnCXN0cmluZwkoZGVmYXVsdCAiMHssMH0sOiwwIywhXkYsbyxPLGUiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NpbmRlbnR8CisJCQlmZWF0dXJlfQorCUEgbGlzdCBvZiBrZXlzIHRoYXQsIHdoZW4gdHlwZWQgaW4gSW5zZXJ0IG1vZGUsIGNhdXNlIHJlaW5kZW50aW5nIG9mCisJdGhlIGN1cnJlbnQgbGluZS4gIE9ubHkgaGFwcGVucyBpZiAnaW5kZW50ZXhwcicgaXNuJ3QgZW1wdHkuCisJVGhlIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gJ2NpbmtleXMnLCBzZWUgfGluZGVudGtleXMtZm9ybWF0fC4KKwlTZWUgfEMtaW5kZW50aW5nfCBhbmQgfGluZGVudC1leHByZXNzaW9ufC4KKworCQkJKidpbmZlcmNhc2UnKiAqJ2luZicqIConbm9pbmZlcmNhc2UnKiAqJ25vaW5mJyoKKydpbmZlcmNhc2UnICdpbmYnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVdoZW4gZG9pbmcga2V5d29yZCBjb21wbGV0aW9uIGluIGluc2VydCBtb2RlIHxpbnMtY29tcGxldGlvbnwsIGFuZAorCSdpZ25vcmVjYXNlJyBpcyBhbHNvIG9uLCB0aGUgY2FzZSBvZiB0aGUgbWF0Y2ggaXMgYWRqdXN0ZWQuICBJZiB0aGUKKwl0eXBlZCB0ZXh0IGNvbnRhaW5zIGEgbG93ZXJjYXNlIGxldHRlciB3aGVyZSB0aGUgbWF0Y2ggaGFzIGFuIHVwcGVyCisJY2FzZSBsZXR0ZXIsIHRoZSBjb21wbGV0ZWQgcGFydCBpcyBtYWRlIGxvd2VyY2FzZS4gIElmIHRoZSB0eXBlZCB0ZXh0CisJaGFzIG5vIGxvd2VyY2FzZSBsZXR0ZXJzIGFuZCB0aGUgbWF0Y2ggaGFzIGEgbG93ZXJjYXNlIGxldHRlciB3aGVyZQorCXRoZSB0eXBlZCB0ZXh0IGhhcyBhbiB1cHBlcmNhc2UgbGV0dGVyLCBhbmQgdGhlcmUgaXMgYSBsZXR0ZXIgYmVmb3JlCisJaXQsIHRoZSBjb21wbGV0ZWQgcGFydCBpcyBtYWRlIHVwcGVyY2FzZS4KKworCQkJKidpbnNlcnRtb2RlJyogKidpbScqIConbm9pbnNlcnRtb2RlJyogKidub2ltJyoKKydpbnNlcnRtb2RlJyAnaW0nCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU1ha2VzIFZpbSB3b3JrIGluIGEgd2F5IHRoYXQgSW5zZXJ0IG1vZGUgaXMgdGhlIGRlZmF1bHQgbW9kZS4gIFVzZWZ1bAorCWlmIHlvdSB3YW50IHRvIHVzZSBWaW0gYXMgYSBtb2RlbGVzcyBlZGl0b3IuICBVc2VkIGZvciB8ZXZpbXwuCisJVGhlc2UgSW5zZXJ0IG1vZGUgY29tbWFuZHMgd2lsbCBiZSB1c2VmdWw6CisJLSBVc2UgdGhlIGN1cnNvciBrZXlzIHRvIG1vdmUgYXJvdW5kLgorCS0gVXNlIENUUkwtTyB0byBleGVjdXRlIG9uZSBOb3JtYWwgbW9kZSBjb21tYW5kIHxpX0NUUkwtT3wpLiAgV2hlbgorCSAgdGhpcyBpcyBhIG1hcHBpbmcsIGl0IGlzIGV4ZWN1dGVkIGFzIGlmICdpbnNlcnRtb2RlJyB3YXMgb2ZmLgorCSAgTm9ybWFsIG1vZGUgcmVtYWlucyBhY3RpdmUgdW50aWwgdGhlIG1hcHBpbmcgaXMgZmluaXNoZWQuCisJCQkJCQkJCSppX0NUUkwtTCoKKwktIFVzZSBDVFJMLUwgdG8gZXhlY3V0ZSBhIG51bWJlciBvZiBOb3JtYWwgbW9kZSBjb21tYW5kcywgdGhlbiB1c2UKKwkgIDxFc2M+IHRvIGdldCBiYWNrIHRvIEluc2VydCBtb2RlLgorCisJVGhlc2UgaXRlbXMgY2hhbmdlIHdoZW4gJ2luc2VydG1vZGUnIGlzIHNldDoKKwktIHdoZW4gc3RhcnRpbmcgdG8gZWRpdCBvZiBhIGZpbGUsIFZpbSBnb2VzIHRvIEluc2VydCBtb2RlLgorCS0gPEVzYz4gaW4gSW5zZXJ0IG1vZGUgaXMgYSBuby1vcCBhbmQgYmVlcHMuCisJLSA8RXNjPiBpbiBOb3JtYWwgbW9kZSBtYWtlcyBWaW0gZ28gdG8gSW5zZXJ0IG1vZGUuCisJLSBDVFJMLUwgaW4gSW5zZXJ0IG1vZGUgaXMgYSBjb21tYW5kLCBpdCBpcyBub3QgaW5zZXJ0ZWQuCisJLSBDVFJMLVogaW4gSW5zZXJ0IG1vZGUgc3VzcGVuZHMgVmltLCBzZWUgfENUUkwtWnwuCSppX0NUUkwtWioKKwlIb3dldmVyLCB3aGVuIDxFc2M+IGlzIHVzZWQgaW5zaWRlIGEgbWFwcGluZywgaXQgYmVoYXZlcyBsaWtlCisJJ2luc2VydG1vZGUnIHdhcyBub3Qgc2V0LiAgVGhpcyB3YXMgZG9uZSB0byBiZSBhYmxlIHRvIHVzZSB0aGUgc2FtZQorCW1hcHBpbmdzIHdpdGggJ2luc2VydG1vZGUnIHNldCBvciBub3Qgc2V0LgorCVdoZW4gZXhlY3V0aW5nIGNvbW1hbmRzIHdpdGggfDpub3JtYWx8ICdpbnNlcnRtb2RlJyBpcyBub3QgdXNlZC4KKworCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidpc2ZuYW1lJyogKidpc2YnKgorJ2lzZm5hbWUnICdpc2YnCQlzdHJpbmcJKGRlZmF1bHQgZm9yIE1TLURPUywgV2luMzIgYW5kIE9TLzI6CisJCQkgICAgICJALDQ4LTU3LC8sXCwuLC0sXywrLCwsIywkLCUseyx9LFssXSw6LEAtQCwhLH4sPSIKKwkJCSAgICBmb3IgQU1JR0E6ICJALDQ4LTU3LC8sLiwtLF8sKywsLCQsOiIKKwkJCSAgICBmb3IgVk1TOiAiQCw0OC01NywvLC4sLSxfLCssLCwjLCQsJSw8LD4sWyxdLDosOyx+IgorCQkJICAgIGZvciBPUy8zOTA6ICJALDI0MC0yNDksLywuLC0sXywrLCwsIywkLCUsfiw9IgorCQkJICAgIG90aGVyd2lzZTogIkAsNDgtNTcsLywuLC0sXywrLCwsIywkLCUsfiw9IikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGUgY2hhcmFjdGVycyBzcGVjaWZpZWQgYnkgdGhpcyBvcHRpb24gYXJlIGluY2x1ZGVkIGluIGZpbGUgbmFtZXMgYW5kCisJcGF0aCBuYW1lcy4gIEZpbGVuYW1lcyBhcmUgdXNlZCBmb3IgY29tbWFuZHMgbGlrZSAiZ2YiLCAiW2kiIGFuZCBpbgorCXRoZSB0YWdzIGZpbGUuCUl0IGlzIGFsc28gdXNlZCBmb3IgIlxmIiBpbiBhIHxwYXR0ZXJufC4KKwlNdWx0aS1ieXRlIGNoYXJhY3RlcnMgMjU2IGFuZCBhYm92ZSBhcmUgYWx3YXlzIGluY2x1ZGVkLCBvbmx5IHRoZQorCWNoYXJhY3RlcnMgdXAgdG8gMjU1IGFyZSBzcGVjaWZpZWQgd2l0aCB0aGlzIG9wdGlvbi4KKwlGb3IgVVRGLTggdGhlIGNoYXJhY3RlcnMgMHhhMCB0byAweGZmIGFyZSBpbmNsdWRlZCBhcyB3ZWxsLgorCisJTm90ZSB0aGF0IG9uIHN5c3RlbXMgdXNpbmcgYSBiYWNrc2xhc2ggYXMgcGF0aCBzZXBhcmF0b3IsIFZpbSB0cmllcyB0bworCWRvIGl0cyBiZXN0IHRvIG1ha2UgaXQgd29yayBhcyB5b3Ugd291bGQgZXhwZWN0LiAgVGhhdCBpcyBhIGJpdAorCXRyaWNreSwgc2luY2UgVmkgb3JpZ2luYWxseSB1c2VkIHRoZSBiYWNrc2xhc2ggdG8gZXNjYXBlIHNwZWNpYWwKKwljaGFyYWN0ZXJzLiAgVmltIHdpbGwgbm90IHJlbW92ZSBhIGJhY2tzbGFzaCBpbiBmcm9udCBvZiBhIG5vcm1hbCBmaWxlCisJbmFtZSBjaGFyYWN0ZXIgb24gdGhlc2Ugc3lzdGVtcywgYnV0IGl0IHdpbGwgb24gVW5peCBhbmQgYWxpa2VzLiAgVGhlCisJJyYnIGFuZCAnXicgYXJlIG5vdCBpbmNsdWRlZCBieSBkZWZhdWx0LCBiZWNhdXNlIHRoZXNlIGFyZSBzcGVjaWFsIGZvcgorCWNtZC5leGUuCisKKwlUaGUgZm9ybWF0IG9mIHRoaXMgb3B0aW9uIGlzIGEgbGlzdCBvZiBwYXJ0cywgc2VwYXJhdGVkIHdpdGggY29tbWFzLgorCUVhY2ggcGFydCBjYW4gYmUgYSBzaW5nbGUgY2hhcmFjdGVyIG51bWJlciBvciBhIHJhbmdlLglBIHJhbmdlIGlzIHR3bworCWNoYXJhY3RlciBudW1iZXJzIHdpdGggJy0nIGluIGJldHdlZW4uCUEgY2hhcmFjdGVyIG51bWJlciBjYW4gYmUgYQorCWRlY2ltYWwgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1IG9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgaXRzZWxmIChkb2VzCisJbm90IHdvcmsgZm9yIGRpZ2l0cykuICBFeGFtcGxlOgorCQkiXywtLDEyOC0xNDAsIy00MyIJKGluY2x1ZGUgJ18nIGFuZCAnLScgYW5kIHRoZSByYW5nZQorCQkJCQkxMjggdG8gMTQwIGFuZCAnIycgdG8gNDMpCisJSWYgYSBwYXJ0IHN0YXJ0cyB3aXRoICdeJywgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgbnVtYmVyIG9yIHJhbmdlCisJd2lsbCBiZSBleGNsdWRlZCBmcm9tIHRoZSBvcHRpb24uICBUaGUgb3B0aW9uIGlzIGludGVycHJldGVkIGZyb20gbGVmdAorCXRvIHJpZ2h0LiAgUHV0IHRoZSBleGNsdWRlZCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHJhbmdlIHdoZXJlIGl0IGlzCisJaW5jbHVkZWQuICBUbyBpbmNsdWRlICdeJyBpdHNlbGYgdXNlIGl0IGFzIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUKKwlvcHRpb24gb3IgdGhlIGVuZCBvZiBhIHJhbmdlLiAgRXhhbXBsZToKKwkJIl5hLXosIyxeIgkoZXhjbHVkZSAnYScgdG8gJ3onLCBpbmNsdWRlICcjJyBhbmQgJ14nKQorCUlmIHRoZSBjaGFyYWN0ZXIgaXMgJ0AnLCBhbGwgY2hhcmFjdGVycyB3aGVyZSBpc2FscGhhKCkgcmV0dXJucyBUUlVFCisJYXJlIGluY2x1ZGVkLiAgTm9ybWFsbHkgdGhlc2UgYXJlIHRoZSBjaGFyYWN0ZXJzIGEgdG8geiBhbmQgQSB0byBaLAorCXBsdXMgYWNjZW50ZWQgY2hhcmFjdGVycy4gIFRvIGluY2x1ZGUgJ0AnIGl0c2VsZiB1c2UgIkAtQCIuICBFeGFtcGxlczoKKwkJIkAsXmEteiIJQWxsIGFscGhhYmV0aWMgY2hhcmFjdGVycywgZXhjbHVkaW5nIGxvd2VyCisJCQkJY2FzZSBsZXR0ZXJzLgorCQkiYS16LEEtWixALUAiCUFsbCBsZXR0ZXJzIHBsdXMgdGhlICdAJyBjaGFyYWN0ZXIuCisJQSBjb21tYSBjYW4gYmUgaW5jbHVkZWQgYnkgdXNpbmcgaXQgd2hlcmUgYSBjaGFyYWN0ZXIgbnVtYmVyIGlzCisJZXhwZWN0ZWQuICBFeGFtcGxlOgorCQkiNDgtNTcsLCxfIglEaWdpdHMsIGNvbW1hIGFuZCB1bmRlcnNjb3JlLgorCUEgY29tbWEgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHByZXBlbmRpbmcgYSAnXicuICBFeGFtcGxlOgorCQkiIC1+LF4sLDkiCUFsbCBjaGFyYWN0ZXJzIGZyb20gc3BhY2UgdG8gJ34nLCBleGNsdWRpbmcKKwkJCQljb21tYSwgcGx1cyA8VGFiPi4KKwlTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLgorCisJCQkJCQkqJ2lzaWRlbnQnKiAqJ2lzaScqCisnaXNpZGVudCcgJ2lzaScJCXN0cmluZwkoZGVmYXVsdCBmb3IgTVMtRE9TLCBXaW4zMiBhbmQgT1MvMjoKKwkJCQkJICAgIkAsNDgtNTcsXywxMjgtMTY3LDIyNC0yMzUiCisJCQkJb3RoZXJ3aXNlOiAiQCw0OC01NyxfLDE5Mi0yNTUiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoZSBjaGFyYWN0ZXJzIGdpdmVuIGJ5IHRoaXMgb3B0aW9uIGFyZSBpbmNsdWRlZCBpbiBpZGVudGlmaWVycy4KKwlJZGVudGlmaWVycyBhcmUgdXNlZCBpbiByZWNvZ25pemluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGFmdGVyIGEKKwltYXRjaCBvZiB0aGUgJ2RlZmluZScgb3B0aW9uLiAgSXQgaXMgYWxzbyB1c2VkIGZvciAiXGkiIGluIGEKKwl8cGF0dGVybnwuIFNlZSAnaXNmbmFtZScgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdCBvZiB0aGlzCisJb3B0aW9uLgorCUNhcmVmdWw6IElmIHlvdSBjaGFuZ2UgdGhpcyBvcHRpb24sIGl0IG1pZ2h0IGJyZWFrIGV4cGFuZGluZworCWVudmlyb25tZW50IHZhcmlhYmxlcy4JRS5nLiwgd2hlbiAnLycgaXMgaW5jbHVkZWQgYW5kIFZpbSB0cmllcyB0bworCWV4cGFuZCAiJEhPTUUvLnZpbWluZm8iLiAgTWF5YmUgeW91IHNob3VsZCBjaGFuZ2UgJ2lza2V5d29yZCcgaW5zdGVhZC4KKworCQkJCQkJKidpc2tleXdvcmQnKiAqJ2lzaycqCisnaXNrZXl3b3JkJyAnaXNrJwlzdHJpbmcgKFZpbSBkZWZhdWx0IGZvciBNUy1ET1MgYW5kIFdpbjMyOgorCQkJCQkgICAgIkAsNDgtNTcsXywxMjgtMTY3LDIyNC0yMzUiCisJCQkJICAgb3RoZXJ3aXNlOiAgIkAsNDgtNTcsXywxOTItMjU1IgorCQkJCVZpIGRlZmF1bHQ6ICJALDQ4LTU3LF8iKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCUtleXdvcmRzIGFyZSB1c2VkIGluIHNlYXJjaGluZyBhbmQgcmVjb2duaXppbmcgd2l0aCBtYW55IGNvbW1hbmRzOgorCSJ3IiwgIioiLCAiW2kiLCBldGMuICBJdCBpcyBhbHNvIHVzZWQgZm9yICJcayIgaW4gYSB8cGF0dGVybnwuCVNlZQorCSdpc2ZuYW1lJyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0IG9mIHRoaXMgb3B0aW9uLiAgRm9yIEMKKwlwcm9ncmFtcyB5b3UgY291bGQgdXNlICJhLXosQS1aLDQ4LTU3LF8sLiwtLD4iLgorCUZvciBhIGhlbHAgZmlsZSBpdCBpcyBzZXQgdG8gYWxsIG5vbi1ibGFuayBwcmludGFibGUgY2hhcmFjdGVycyBleGNlcHQKKwknKicsICciJyBhbmQgJ3wnIChzbyB0aGF0IENUUkwtXSBvbiBhIGNvbW1hbmQgZmluZHMgdGhlIGhlbHAgZm9yIHRoYXQKKwljb21tYW5kKS4KKwlXaGVuIHRoZSAnbGlzcCcgb3B0aW9uIGlzIG9uIHRoZSAnLScgY2hhcmFjdGVyIGlzIGFsd2F5cyBpbmNsdWRlZC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCQkJKidpc3ByaW50JyogKidpc3AnKgorJ2lzcHJpbnQnICdpc3AnCXN0cmluZwkoZGVmYXVsdCBmb3IgTVMtRE9TLCBXaW4zMiwgT1MvMiBhbmQgTWFjaW50b3NoOgorCQkJCSJALH4tMjU1Ijsgb3RoZXJ3aXNlOiAiQCwxNjEtMjU1IikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGUgY2hhcmFjdGVycyBnaXZlbiBieSB0aGlzIG9wdGlvbiBhcmUgZGlzcGxheWVkIGRpcmVjdGx5IG9uIHRoZQorCXNjcmVlbi4gIEl0IGlzIGFsc28gdXNlZCBmb3IgIlxwIiBpbiBhIHxwYXR0ZXJufC4gIFRoZSBjaGFyYWN0ZXJzIGZyb20KKwlzcGFjZSAoQVNDSUkgMzIpIHRvICd+JyAoQVNDSUkgMTI2KSBhcmUgYWx3YXlzIGRpc3BsYXllZCBkaXJlY3RseSwKKwlldmVuIHdoZW4gdGhleSBhcmUgbm90IGluY2x1ZGVkIGluICdpc3ByaW50JyBvciBleGNsdWRlZC4gIFNlZQorCSdpc2ZuYW1lJyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0IG9mIHRoaXMgb3B0aW9uLgorCisJTm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgd2l0aCB0d28gY2hhcmFjdGVyczoKKwkJICAwIC0gIDMxCSJeQCIgLSAiXl8iCisJCSAzMiAtIDEyNglhbHdheXMgc2luZ2xlIGNoYXJhY3RlcnMKKwkJICAgMTI3CQkiXj8iCisJCTEyOCAtIDE1OQkifkAiIC0gIn5fIgorCQkxNjAgLSAyNTQJInwgIiAtICJ8fiIKKwkJICAgMjU1CQkifj8iCisJV2hlbiAnZW5jb2RpbmcnIGlzIGEgVW5pY29kZSBvbmUsIGlsbGVnYWwgYnl0ZXMgZnJvbSAxMjggdG8gMjU1IGFyZQorCWRpc3BsYXllZCBhcyA8eHg+LCB3aXRoIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZSBvZiB0aGUgYnl0ZS4KKwlXaGVuICdkaXNwbGF5JyBjb250YWlucyAidWhleCIgYWxsIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlCisJZGlzcGxheWVkIGFzIDx4eD4uCisJVGhlIE5vblRleHQgaGlnaGxpZ2h0aW5nIHdpbGwgYmUgdXNlZCBmb3IgdW5wcmludGFibGUgY2hhcmFjdGVycy4KKwl8aGwtTm9uVGV4dHwKKworCU11bHRpLWJ5dGUgY2hhcmFjdGVycyAyNTYgYW5kIGFib3ZlIGFyZSBhbHdheXMgaW5jbHVkZWQsIG9ubHkgdGhlCisJY2hhcmFjdGVycyB1cCB0byAyNTUgYXJlIHNwZWNpZmllZCB3aXRoIHRoaXMgb3B0aW9uLiAgV2hlbiBhIGNoYXJhY3RlcgorCWlzIHByaW50YWJsZSBidXQgaXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBmb250LCBhCisJcmVwbGFjZW1lbnQgY2hhcmFjdGVyIHdpbGwgYmUgc2hvd24uCisJVW5wcmludGFibGUgYW5kIHplcm8td2lkdGggVW5pY29kZSBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgYXMgPHh4eHg+LgorCVRoZXJlIGlzIG5vIG9wdGlvbiB0byBzcGVjaWZ5IHRoZXNlIGNoYXJhY3RlcnMuCisKKwkJCSonam9pbnNwYWNlcycqIConanMnKiAqJ25vam9pbnNwYWNlcycqIConbm9qcycqCisnam9pbnNwYWNlcycgJ2pzJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUluc2VydCB0d28gc3BhY2VzIGFmdGVyIGEgJy4nLCAnPycgYW5kICchJyB3aXRoIGEgam9pbiBjb21tYW5kLgorCVdoZW4gJ2Nwb3B0aW9ucycgaW5jbHVkZXMgdGhlICdqJyBmbGFnLCBvbmx5IGRvIHRoaXMgYWZ0ZXIgYSAnLicuCisJT3RoZXJ3aXNlIG9ubHkgb25lIHNwYWNlIGlzIGluc2VydGVkLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCQkqJ2tleScqCisna2V5JwkJCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlUaGUga2V5IHRoYXQgaXMgdXNlZCBmb3IgZW5jcnlwdGluZyBhbmQgZGVjcnlwdGluZyB0aGUgY3VycmVudCBidWZmZXIuCisJU2VlIHxlbmNyeXB0aW9ufC4KKwlDYXJlZnVsOiBEbyBub3Qgc2V0IHRoZSBrZXkgdmFsdWUgYnkgaGFuZCwgc29tZW9uZSBtaWdodCBzZWUgdGhlIHR5cGVkCisJa2V5LiAgVXNlIHRoZSB8Olh8IGNvbW1hbmQuICBCdXQgeW91IGNhbiBtYWtlICdrZXknIGVtcHR5OiA+CisJCTpzZXQga2V5PQorPAlJdCBpcyBub3QgcG9zc2libGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiB3aXRoICI6c2V0IGtleSIgb3IKKwkiZWNobyAma2V5Ii4gIFRoaXMgaXMgdG8gYXZvaWQgc2hvd2luZyBpdCB0byBzb21lb25lIHdobyBzaG91bGRuJ3QKKwlrbm93LiAgSXQgYWxzbyBtZWFucyB5b3UgY2Fubm90IHNlZSBpdCB5b3Vyc2VsZiBvbmNlIHlvdSBoYXZlIHNldCBpdCwKKwliZSBjYXJlZnVsIG5vdCB0byBtYWtlIGEgdHlwaW5nIGVycm9yIQorCisJCQkJCSona2V5bWFwJyogKidrbXAnKiAqRTU0NCoKKydrZXltYXAnICdrbXAnCQlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2tleW1hcHwKKwkJCWZlYXR1cmV9CisJTmFtZSBvZiBhIGtleWJvYXJkIG1hcHBpbmcuICBTZWUgfG1ieXRlLWtleW1hcHwuCisJU2V0dGluZyB0aGlzIG9wdGlvbiB0byBhIHZhbGlkIGtleW1hcCBuYW1lIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YKKwlzZXR0aW5nICdpbWluc2VydCcgdG8gb25lLCBzbyB0aGF0IHRoZSBrZXltYXAgYmVjb21lcyBlZmZlY3RpdmUuCisJJ2ltc2VhcmNoJyBpcyBhbHNvIHNldCB0byBvbmUsIHVubGVzcyBpdCB3YXMgLTEKKworCQkJCQkqJ2tleW1vZGVsJyogKidrbScqCisna2V5bW9kZWwnICdrbScJCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlMaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB3b3Jkcywgd2hpY2ggZW5hYmxlIHNwZWNpYWwgdGhpbmdzIHRoYXQga2V5cworCWNhbiBkby4gIFRoZXNlIHZhbHVlcyBjYW4gYmUgdXNlZDoKKwkgICBzdGFydHNlbAlVc2luZyBhIHNoaWZ0ZWQgc3BlY2lhbCBrZXkgc3RhcnRzIHNlbGVjdGlvbiAoZWl0aGVyCisJCQlTZWxlY3QgbW9kZSBvciBWaXN1YWwgbW9kZSwgZGVwZW5kaW5nIG9uICJrZXkiIGJlaW5nCisJCQlwcmVzZW50IGluICdzZWxlY3Rtb2RlJykuCisJICAgc3RvcHNlbAlVc2luZyBhIG5vdC1zaGlmdGVkIHNwZWNpYWwga2V5IHN0b3BzIHNlbGVjdGlvbi4KKwlTcGVjaWFsIGtleXMgaW4gdGhpcyBjb250ZXh0IGFyZSB0aGUgY3Vyc29yIGtleXMsIDxFbmQ+LCA8SG9tZT4sCisJPFBhZ2VVcD4gYW5kIDxQYWdlRG93bj4uCisJVGhlICdrZXltb2RlbCcgb3B0aW9uIGlzIHNldCBieSB0aGUgfDpiZWhhdmV8IGNvbW1hbmQuCisKKwkJCQkJKidrZXl3b3JkcHJnJyogKidrcCcqCisna2V5d29yZHByZycgJ2twJwlzdHJpbmcJKGRlZmF1bHQgIm1hbiIgb3IgIm1hbiAtcyIsICBET1M6ICI6aGVscCIsCisJCQkJCQlPUy8yOiAidmlldyAvIiwgVk1TOiAiaGVscCIpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCVByb2dyYW0gdG8gdXNlIGZvciB0aGUgfEt8IGNvbW1hbmQuICBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCisJZXhwYW5kZWQgfDpzZXRfZW52fC4gICI6aGVscCIgbWF5IGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBWaW0gaW50ZXJuYWwKKwloZWxwLiAgKE5vdGUgdGhhdCBwcmV2aW91c2x5IHNldHRpbmcgdGhlIGdsb2JhbCBvcHRpb24gdG8gdGhlIGVtcHR5CisJdmFsdWUgZGlkIHRoaXMsIHdoaWNoIGlzIG5vdyBkZXByZWNhdGVkLikKKwlXaGVuICJtYW4iIGlzIHVzZWQsIFZpbSB3aWxsIGF1dG9tYXRpY2FsbHkgdHJhbnNsYXRlIGEgY291bnQgZm9yIHRoZQorCSJLIiBjb21tYW5kIHRvIGEgc2VjdGlvbiBudW1iZXIuICBBbHNvIGZvciAibWFuIC1zIiwgaW4gd2hpY2ggY2FzZSB0aGUKKwkiLXMiIGlzIHJlbW92ZWQgd2hlbiB0aGVyZSBpcyBubyBjb3VudC4KKwlTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLgorCUV4YW1wbGU6ID4KKwkJOnNldCBrZXl3b3JkcHJnPW1hblwgLXMKKzwJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCSonbGFuZ21hcCcqIConbG1hcCcqICpFMzU3KiAqRTM1OCoKKydsYW5nbWFwJyAnbG1hcCcJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtsYW5nbWFwfAorCQkJZmVhdHVyZX0KKwlUaGlzIG9wdGlvbiBhbGxvd3Mgc3dpdGNoaW5nIHlvdXIga2V5Ym9hcmQgaW50byBhIHNwZWNpYWwgbGFuZ3VhZ2UKKwltb2RlLglXaGVuIHlvdSBhcmUgdHlwaW5nIHRleHQgaW4gSW5zZXJ0IG1vZGUgdGhlIGNoYXJhY3RlcnMgYXJlCisJaW5zZXJ0ZWQgZGlyZWN0bHkuICBXaGVuIGluIGNvbW1hbmQgbW9kZSB0aGUgJ2xhbmdtYXAnIG9wdGlvbiB0YWtlcworCWNhcmUgb2YgdHJhbnNsYXRpbmcgdGhlc2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHRoZSBvcmlnaW5hbCBtZWFuaW5nCisJb2YgdGhlIGtleS4gIFRoaXMgbWVhbnMgeW91IGRvbid0IGhhdmUgdG8gY2hhbmdlIHRoZSBrZXlib2FyZCBtb2RlIHRvCisJYmUgYWJsZSB0byBleGVjdXRlIE5vcm1hbCBtb2RlIGNvbW1hbmRzLgorCVRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIHRoZSAna2V5bWFwJyBvcHRpb24sIHdoZXJlIGNoYXJhY3RlcnMgYXJlCisJbWFwcGVkIGluIEluc2VydCBtb2RlLgorCVRoaXMgb25seSB3b3JrcyBmb3IgOC1iaXQgY2hhcmFjdGVycy4gIFRoZSB2YWx1ZSBvZiAnbGFuZ21hcCcgbWF5IGJlCisJc3BlY2lmaWVkIHdpdGggbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIChlLmcuLCBVVEYtOCksIGJ1dCBvbmx5IHRoZSBsb3dlcgorCTggYml0cyBvZiBlYWNoIGNoYXJhY3RlciB3aWxsIGJlIHVzZWQuCisKKwlFeGFtcGxlIChmb3IgR3JlZWspOgkJCQkJKmdyZWVrKiAgPgorCSAgICA6c2V0IGxhbmdtYXA9wUEswkIs2EMsxEQsxUUs1kYsw0csx0gsyUkszkosykssy0wszE0szU4sz08s0FAsUVEs0VIs01Ms1FQsyFUs2VYsV1cs11gs1Vksxlos4WEs4mIs+GMs5GQs5WUs9mYs42cs52gs6Wks7mos6mss62ws7G0s7W4s728s8HAscXEs8XIs83Ms9HQs6HUs+XYs8ncs93gs9Xks5noKKzwJRXhhbXBsZSAoZXhjaGFuZ2VzIG1lYW5pbmcgb2YgeiBhbmQgeSBmb3IgY29tbWFuZHMpOiA+CisJICAgIDpzZXQgbGFuZ21hcD16eSx5eixaWSxZWgorPAorCVRoZSAnbGFuZ21hcCcgb3B0aW9uIGlzIGEgbGlzdCBvZiBwYXJ0cywgc2VwYXJhdGVkIHdpdGggY29tbWFzLiAgRWFjaAorCXBhcnQgY2FuIGJlIGluIG9uZSBvZiB0d28gZm9ybXM6CisJMS4gIEEgbGlzdCBvZiBwYWlycy4gIEVhY2ggcGFpciBpcyBhICJmcm9tIiBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkKKwkgICAgZm9sbG93ZWQgYnkgdGhlICJ0byIgY2hhcmFjdGVyLiAgRXhhbXBsZXM6ICJhQSIsICJhQWJCY0MiLgorCTIuICBBIGxpc3Qgb2YgImZyb20iIGNoYXJhY3RlcnMsIGEgc2VtaS1jb2xvbiBhbmQgYSBsaXN0IG9mICJ0byIKKwkgICAgY2hhcmFjdGVycy4gIEV4YW1wbGU6ICJhYmM7QUJDIgorCUV4YW1wbGU6ICJhQSxmZ2g7RkdILGNDZERlRSIKKwlTcGVjaWFsIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBwcmVjZWRlZCB3aXRoIGEgYmFja3NsYXNoLiAgVGhlc2UgYXJlCisJIjsiLCAnLCcgYW5kIGJhY2tzbGFzaCBpdHNlbGYuCisKKwlUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGFjdGl2YXRlIHZpbSBhY3Rpb25zIHdpdGhvdXQgaGF2aW5nIHRvIHN3aXRjaAorCWJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIGxhbmd1YWdlcy4gIFlvdXIgbGFuZ3VhZ2UgY2hhcmFjdGVycyB3aWxsCisJYmUgdW5kZXJzdG9vZCBhcyBub3JtYWwgdmltIEVuZ2xpc2ggY2hhcmFjdGVycyAoYWNjb3JkaW5nIHRvIHRoZQorCWxhbmdtYXAgbWFwcGluZ3MpIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisJIG8gTm9ybWFsL1Zpc3VhbCBtb2RlIChjb21tYW5kcywgYnVmZmVyL3JlZ2lzdGVyIG5hbWVzLCB1c2VyIG1hcHBpbmdzKQorCSBvIEluc2VydC9SZXBsYWNlIE1vZGU6IFJlZ2lzdGVyIG5hbWVzIGFmdGVyIENUUkwtUgorCSBvIEluc2VydC9SZXBsYWNlIE1vZGU6IE1hcHBpbmdzCisJQ2hhcmFjdGVycyBlbnRlcmVkIGluIENvbW1hbmQtbGluZSBtb2RlIHdpbGwgTk9UIGJlIGFmZmVjdGVkIGJ5CisJdGhpcyBvcHRpb24uICAgTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGNhbiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lCisJYWxsb3dpbmcgdG8gc3dpdGNoIGJldHdlZW4gbWFwcGluZ3MgZm9yIGRpZmZlcmVudCBsYW5ndWFnZXMvZW5jb2RpbmdzLgorCVVzZSBhIG1hcHBpbmcgdG8gYXZvaWQgaGF2aW5nIHRvIHR5cGUgaXQgZWFjaCB0aW1lIQorCisJCQkJCSonbGFuZ21lbnUnKiAqJ2xtJyoKKydsYW5nbWVudScgJ2xtJwkJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttZW51fCBhbmQKKwkJCXwrbXVsdGlfbGFuZ3wgZmVhdHVyZXN9CisJTGFuZ3VhZ2UgdG8gdXNlIGZvciBtZW51IHRyYW5zbGF0aW9uLiAgVGVsbHMgd2hpY2ggZmlsZSBpcyBsb2FkZWQKKwlmcm9tIHRoZSAibGFuZyIgZGlyZWN0b3J5IGluICdydW50aW1lcGF0aCc6ID4KKwkJImxhbmcvbWVudV8iIC4gJmxhbmdtZW51IC4gIi52aW0iCis8CSh3aXRob3V0IHRoZSBzcGFjZXMpLiAgRm9yIGV4YW1wbGUsIHRvIGFsd2F5cyB1c2UgdGhlIER1dGNoIG1lbnVzLCBubworCW1hdHRlciB3aGF0ICRMQU5HIGlzIHNldCB0bzogPgorCQk6c2V0IGxhbmdtZW51PW5sX05MLklTT184ODU5LTEKKzwJV2hlbiAnbGFuZ21lbnUnIGlzIGVtcHR5LCB8djpsYW5nfCBpcyB1c2VkLgorCUlmIHlvdXIgJExBTkcgaXMgc2V0IHRvIGEgbm9uLUVuZ2xpc2ggbGFuZ3VhZ2UgYnV0IHlvdSBkbyB3YW50IHRvIHVzZQorCXRoZSBFbmdsaXNoIG1lbnVzOiA+CisJCTpzZXQgbGFuZ21lbnU9bm9uZQorPAlUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBiZWZvcmUgbG9hZGluZyBtZW51cywgc3dpdGNoaW5nIG9uIGZpbGV0eXBlCisJZGV0ZWN0aW9uIG9yIHN5bnRheCBoaWdobGlnaHRpbmcuICBPbmNlIHRoZSBtZW51cyBhcmUgZGVmaW5lZCBzZXR0aW5nCisJdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4gIEJ1dCB5b3UgY291bGQgZG8gdGhpczogPgorCQk6c291cmNlICRWSU1SVU5USU1FL2RlbG1lbnUudmltCisJCTpzZXQgbGFuZ21lbnU9ZGVfREUuSVNPXzg4NTktMQorCQk6c291cmNlICRWSU1SVU5USU1FL21lbnUudmltCis8CVdhcm5pbmc6IFRoaXMgZGVsZXRlcyBhbGwgbWVudXMgdGhhdCB5b3UgZGVmaW5lZCB5b3Vyc2VsZiEKKworCQkJCQkqJ2xhc3RzdGF0dXMnKiAqJ2xzJyoKKydsYXN0c3RhdHVzJyAnbHMnCW51bWJlcgkoZGVmYXVsdCAxKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBpbmZsdWVuY2VzIHdoZW4gdGhlIGxhc3Qgd2luZG93IHdpbGwgaGF2ZSBhCisJc3RhdHVzIGxpbmU6CisJCTA6IG5ldmVyCisJCTE6IG9ubHkgaWYgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byB3aW5kb3dzCisJCTI6IGFsd2F5cworCVRoZSBzY3JlZW4gbG9va3MgbmljZXIgd2l0aCBhIHN0YXR1cyBsaW5lIGlmIHlvdSBoYXZlIHNldmVyYWwKKwl3aW5kb3dzLCBidXQgaXQgdGFrZXMgYW5vdGhlciBzY3JlZW4gbGluZS4gfHN0YXR1cy1saW5lfAorCisJCQkqJ2xhenlyZWRyYXcnKiAqJ2x6JyogKidub2xhenlyZWRyYXcnKiAqJ25vbHonKgorJ2xhenlyZWRyYXcnICdseicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBzY3JlZW4gd2lsbCBub3QgYmUgcmVkcmF3biB3aGlsZQorCWV4ZWN1dGluZyBtYWNyb3MsIHJlZ2lzdGVycyBhbmQgb3RoZXIgY29tbWFuZHMgdGhhdCBoYXZlIG5vdCBiZWVuCisJdHlwZWQuCUFsc28sIHVwZGF0aW5nIHRoZSB3aW5kb3cgdGl0bGUgaXMgcG9zdHBvbmVkLiAgVG8gZm9yY2UgYW4KKwl1cGRhdGUgdXNlIHw6cmVkcmF3fC4KKworCQkJKidsaW5lYnJlYWsnKiAqJ2xicicqIConbm9saW5lYnJlYWsnKiAqJ25vbGJyJyoKKydsaW5lYnJlYWsnICdsYnInCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSAgfCtsaW5lYnJlYWt8CisJCQlmZWF0dXJlfQorCUlmIG9uIFZpbSB3aWxsIHdyYXAgbG9uZyBsaW5lcyBhdCBhIGNoYXJhY3RlciBpbiAnYnJlYWthdCcgcmF0aGVyCisJdGhhbiBhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgdGhhdCBmaXRzIG9uIHRoZSBzY3JlZW4uICBVbmxpa2UKKwknd3JhcG1hcmdpbicgYW5kICd0ZXh0d2lkdGgnLCB0aGlzIGRvZXMgbm90IGluc2VydCA8RU9MPnMgaW4gdGhlIGZpbGUsCisJaXQgb25seSBhZmZlY3RzIHRoZSB3YXkgdGhlIGZpbGUgaXMgZGlzcGxheWVkLCBub3QgaXRzIGNvbnRlbnRzLiAgVGhlCisJdmFsdWUgb2YgJ3Nob3dicmVhaycgaXMgdXNlZCB0byBwdXQgaW4gZnJvbnQgb2Ygd3JhcHBlZCBsaW5lcy4KKwlUaGlzIG9wdGlvbiBpcyBub3QgdXNlZCB3aGVuIHRoZSAnd3JhcCcgb3B0aW9uIGlzIG9mZiBvciAnbGlzdCcgaXMgb24uCisJTm90ZSB0aGF0IDxUYWI+IGNoYXJhY3RlcnMgYWZ0ZXIgYW4gPEVPTD4gYXJlIG1vc3RseSBub3QgZGlzcGxheWVkCisJd2l0aCB0aGUgcmlnaHQgYW1vdW50IG9mIHdoaXRlIHNwYWNlLgorCisJCQkJCQkqJ2xpbmVzJyogKkU1OTMqCisnbGluZXMnCQkJbnVtYmVyCShkZWZhdWx0IDI0IG9yIHRlcm1pbmFsIGhlaWdodCkKKwkJCWdsb2JhbAorCU51bWJlciBvZiBsaW5lcyBvZiB0aGUgVmltIHdpbmRvdy4KKwlOb3JtYWxseSB5b3UgZG9uJ3QgbmVlZCB0byBzZXQgdGhpcy4gIEl0IGlzIGRvbmUgYXV0b21hdGljYWxseSBieSB0aGUKKwl0ZXJtaW5hbCBpbml0aWFsaXphdGlvbiBjb2RlLgorCVdoZW4gVmltIGlzIHJ1bm5pbmcgaW4gdGhlIEdVSSBvciBpbiBhIHJlc2l6YWJsZSB3aW5kb3csIHNldHRpbmcgdGhpcworCW9wdGlvbiB3aWxsIGNhdXNlIHRoZSB3aW5kb3cgc2l6ZSB0byBiZSBjaGFuZ2VkLiAgV2hlbiB5b3Ugb25seSB3YW50CisJdG8gdXNlIHRoZSBzaXplIGZvciB0aGUgR1VJLCBwdXQgdGhlIGNvbW1hbmQgaW4geW91ciB8Z3ZpbXJjfCBmaWxlLgorCVZpbSBsaW1pdHMgdGhlIG51bWJlciBvZiBsaW5lcyB0byB3aGF0IGZpdHMgb24gdGhlIHNjcmVlbi4gIFlvdSBjYW4KKwl1c2UgdGhpcyBjb21tYW5kIHRvIGdldCB0aGUgdGFsbGVzdCB3aW5kb3cgcG9zc2libGU6ID4KKwkJOnNldCBsaW5lcz05OTkKKzwJSWYgeW91IGdldCBsZXNzIGxpbmVzIHRoYW4gZXhwZWN0ZWQsIGNoZWNrIHRoZSAnZ3VpaGVhZHJvb20nIG9wdGlvbi4KKwlXaGVuIHlvdSBzZXQgdGhpcyBvcHRpb24gYW5kIFZpbSBpcyB1bmFibGUgdG8gY2hhbmdlIHRoZSBwaHlzaWNhbAorCW51bWJlciBvZiBsaW5lcyBvZiB0aGUgZGlzcGxheSwgdGhlIGRpc3BsYXkgbWF5IGJlIG1lc3NlZCB1cC4KKworCQkJCQkJKidsaW5lc3BhY2UnKiAqJ2xzcCcqCisnbGluZXNwYWNlJyAnbHNwJwludW1iZXIJKGRlZmF1bHQgMCwgMSBmb3IgV2luMzIgR1VJKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgaW4gdGhlIEdVSX0KKwlOdW1iZXIgb2YgcGl4ZWwgbGluZXMgaW5zZXJ0ZWQgYmV0d2VlbiBjaGFyYWN0ZXJzLiAgVXNlZnVsIGlmIHRoZSBmb250CisJdXNlcyB0aGUgZnVsbCBjaGFyYWN0ZXIgY2VsbCBoZWlnaHQsIG1ha2luZyBsaW5lcyB0b3VjaCBlYWNoIG90aGVyLgorCVdoZW4gbm9uLXplcm8gdGhlcmUgaXMgcm9vbSBmb3IgdW5kZXJsaW5pbmcuCisKKwkJCQkJCSonbGlzcCcqIConbm9saXNwJyoKKydsaXNwJwkJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrbGlzcGluZGVudHwKKwkJCWZlYXR1cmV9CisJTGlzcCBtb2RlOiBXaGVuIDxFbnRlcj4gaXMgdHlwZWQgaW4gaW5zZXJ0IG1vZGUgc2V0IHRoZSBpbmRlbnQgZm9yCisJdGhlIG5leHQgbGluZSB0byBMaXNwIHN0YW5kYXJkcyAod2VsbCwgc29ydCBvZikuICBBbHNvIGhhcHBlbnMgd2l0aAorCSJjYyIgb3IgIlMiLiAgJ2F1dG9pbmRlbnQnIG11c3QgYWxzbyBiZSBvbiBmb3IgdGhpcyB0byB3b3JrLiAgVGhlICdwJworCWZsYWcgaW4gJ2Nwb3B0aW9ucycgY2hhbmdlcyB0aGUgbWV0aG9kIG9mIGluZGVudGluZzogVmkgY29tcGF0aWJsZSBvcgorCWJldHRlci4gIEFsc28gc2VlICdsaXNwd29yZHMnLgorCVRoZSAnLScgY2hhcmFjdGVyIGlzIGluY2x1ZGVkIGluIGtleXdvcmQgY2hhcmFjdGVycy4gIFJlZGVmaW5lcyB0aGUKKwkiPSIgb3BlcmF0b3IgdG8gdXNlIHRoaXMgc2FtZSBpbmRlbnRhdGlvbiBhbGdvcml0aG0gcmF0aGVyIHRoYW4KKwljYWxsaW5nIGFuIGV4dGVybmFsIHByb2dyYW0gaWYgJ2VxdWFscHJnJyBpcyBlbXB0eS4KKwlUaGlzIG9wdGlvbiBpcyBub3QgdXNlZCB3aGVuICdwYXN0ZScgaXMgc2V0LgorCXtWaTogRG9lcyBpdCBhIGxpdHRsZSBiaXQgZGlmZmVyZW50bHl9CisKKwkJCQkJCSonbGlzcHdvcmRzJyogKidsdycqCisnbGlzcHdvcmRzJyAnbHcnCXN0cmluZwkoZGVmYXVsdCBpcyB2ZXJ5IGxvbmcpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrbGlzcGluZGVudHwKKwkJCWZlYXR1cmV9CisJQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygd29yZHMgdGhhdCBpbmZsdWVuY2UgdGhlIExpc3AgaW5kZW50aW5nLgorCXwnbGlzcCd8CisKKwkJCQkJCSonbGlzdCcqIConbm9saXN0JyoKKydsaXN0JwkJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gd2luZG93CisJTGlzdCBtb2RlOiBTaG93IHRhYnMgYXMgQ1RSTC1JLCBzaG93IGVuZCBvZiBsaW5lIHdpdGggJC4gIFVzZWZ1bCB0bworCXNlZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRhYnMgYW5kIHNwYWNlcyBhbmQgZm9yIHRyYWlsaW5nIGJsYW5rcy4KKwlOb3RlIHRoYXQgdGhpcyB3aWxsIGFsc28gYWZmZWN0IGZvcm1hdHRpbmcgKHNldCB3aXRoICd0ZXh0d2lkdGgnIG9yCisJJ3dyYXBtYXJnaW4nKSB3aGVuICdjcG9wdGlvbnMnIGluY2x1ZGVzICdMJy4gIFNlZSAnbGlzdGNoYXJzJyBmb3IKKwljaGFuZ2luZyB0aGUgd2F5IHRhYnMgYXJlIGRpc3BsYXllZC4KKworCQkJCQkJKidsaXN0Y2hhcnMnKiAqJ2xjcycqCisnbGlzdGNoYXJzJyAnbGNzJwlzdHJpbmcJKGRlZmF1bHQgImVvbDokIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlTdHJpbmdzIHRvIHVzZSBpbiAnbGlzdCcgbW9kZS4JSXQgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmcKKwlzZXR0aW5ncy4KKwkgIGVvbDpjCQlDaGFyYWN0ZXIgdG8gc2hvdyBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4gIFdoZW4KKwkJCW9taXR0ZWQsIHRoZXJlIGlzIG5vIGV4dHJhIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZQorCQkJbGluZS4KKwkgIHRhYjp4eQlUd28gY2hhcmFjdGVycyB0byBiZSB1c2VkIHRvIHNob3cgYSBUYWIuICBUaGUgZmlyc3QKKwkJCWNoYXIgaXMgdXNlZCBvbmNlLiAgVGhlIHNlY29uZCBjaGFyIGlzIHJlcGVhdGVkIHRvCisJCQlmaWxsIHRoZSBzcGFjZSB0aGF0IHRoZSBUYWIgbm9ybWFsbHkgb2NjdXBpZXMuCisJCQkidGFiOj4tIiB3aWxsIHNob3cgYSBUYWIgdGhhdCB0YWtlcyBmb3VyIHNwYWNlcyBhcworCQkJIj4tLS0iLiAgV2hlbiBvbWl0dGVkLCBhIFRhYiBpcyBzaG93IGFzIF5JLgorCSAgdHJhaWw6YwlDaGFyYWN0ZXIgdG8gc2hvdyBmb3IgdHJhaWxpbmcgc3BhY2VzLglXaGVuIG9taXR0ZWQsCisJCQl0cmFpbGluZyBzcGFjZXMgYXJlIGJsYW5rLgorCSAgZXh0ZW5kczpjCUNoYXJhY3RlciB0byBzaG93IGluIHRoZSBsYXN0IGNvbHVtbiwgd2hlbiAnd3JhcCcgaXMKKwkJCW9mZiBhbmQgdGhlIGxpbmUgY29udGludWVzIGJleW9uZCB0aGUgcmlnaHQgb2YgdGhlCisJCQlzY3JlZW4uCisJICBwcmVjZWRlczpjCUNoYXJhY3RlciB0byBzaG93IGluIHRoZSBmaXJzdCBjb2x1bW4sIHdoZW4gJ3dyYXAnCisJCQlpcyBvZmYgYW5kIHRoZXJlIGlzIHRleHQgcHJlY2VkaW5nIHRoZSBjaGFyYWN0ZXIKKwkJCXZpc2libGUgaW4gdGhlIGZpcnN0IGNvbHVtbi4KKworCVRoZSBjaGFyYWN0ZXJzICc6JyBhbmQgJywnIHNob3VsZCBub3QgYmUgdXNlZC4JVVRGLTggY2hhcmFjdGVycyBjYW4KKwliZSB1c2VkIHdoZW4gJ2VuY29kaW5nJyBpcyAidXRmLTgiLCBvdGhlcndpc2Ugb25seSBwcmludGFibGUKKwljaGFyYWN0ZXJzIGFyZSBhbGxvd2VkLgorCisJRXhhbXBsZXM6ID4KKwkgICAgOnNldCBsY3M9dGFiOj4tLHRyYWlsOi0KKwkgICAgOnNldCBsY3M9dGFiOj4tLGVvbDo8CisJICAgIDpzZXQgbGNzPWV4dGVuZHM6PixwcmVjZWRlczo8Cis8CVRoZSAiTm9uVGV4dCIgaGlnaGxpZ2h0aW5nIHdpbGwgYmUgdXNlZCBmb3IgImVvbCIsICJleHRlbmRzIiBhbmQKKwkicHJlY2VkZXMiLiAgIlNwZWNpYWxLZXkiIGZvciAidGFiIiBhbmQgInRyYWlsIi4KKworCQkJKidscGwnKiAqJ25vbHBsJyogKidsb2FkcGx1Z2lucycqIConbm9sb2FkcGx1Z2lucycqCisnbG9hZHBsdWdpbnMnICdscGwnCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBvbiB0aGUgcGx1Z2luIHNjcmlwdHMgYXJlIGxvYWRlZCB3aGVuIHN0YXJ0aW5nIHVwIHxsb2FkLXBsdWdpbnN8LgorCVRoaXMgb3B0aW9uIGNhbiBiZSByZXNldCBpbiB5b3VyIHx2aW1yY3wgZmlsZSB0byBkaXNhYmxlIHRoZSBsb2FkaW5nCisJb2YgcGx1Z2lucy4KKwlOb3RlIHRoYXQgdXNpbmcgdGhlICItdSBOT05FIiBhbmQgIi0tbm9wbHVnaW4iIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKwlyZXNldCB0aGlzIG9wdGlvbi4gfC11fCB8LS1ub3BsdWdpbnwKKworCQkJCQkJKidtYWdpYycqIConbm9tYWdpYycqCisnbWFnaWMnCQkJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCUNoYW5nZXMgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB1c2VkIGluIHNlYXJjaCBwYXR0ZXJucy4KKwlTZWUgfHBhdHRlcm58LgorCU5PVEU6IFRvIGF2b2lkIHBvcnRhYmlsaXR5IHByb2JsZW1zIHdpdGggdXNpbmcgcGF0dGVybnMsIGFsd2F5cyBrZWVwCisJdGhpcyBvcHRpb24gYXQgdGhlIGRlZmF1bHQgIm9uIi4gIE9ubHkgc3dpdGNoIGl0IG9mZiB3aGVuIHdvcmtpbmcgd2l0aAorCW9sZCBWaSBzY3JpcHRzLiAgSW4gYW55IG90aGVyIHNpdHVhdGlvbiB3cml0ZSBwYXR0ZXJucyB0aGF0IHdvcmsgd2hlbgorCSdtYWdpYycgaXMgb24uCisKKwkJCQkJCSonbWFrZWVmJyogKidtZWYnKgorJ21ha2VlZicgJ21lZicJCXN0cmluZwkoZGVmYXVsdDogIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcXVpY2tmaXh8CisJCQlmZWF0dXJlfQorCU5hbWUgb2YgdGhlIGVycm9yZmlsZSBmb3IgdGhlIHw6bWFrZXwgY29tbWFuZCAoc2VlIHw6bWFrZV9tYWtlcHJnfCkKKwlhbmQgdGhlIHw6Z3JlcHwgY29tbWFuZC4KKwlXaGVuIGl0IGlzIGVtcHR5LCBhbiBpbnRlcm5hbGx5IGdlbmVyYXRlZCB0ZW1wIGZpbGUgd2lsbCBiZSB1c2VkLgorCVdoZW4gIiMjIiBpcyBpbmNsdWRlZCwgaXQgaXMgcmVwbGFjZWQgYnkgYSBudW1iZXIgdG8gbWFrZSB0aGUgbmFtZQorCXVuaXF1ZS4gIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSAiOm1ha2UiIGNvbW1hbmQgZG9lc24ndCBvdmVyd3JpdGUgYW4KKwlleGlzdGluZyBmaWxlLgorCU5PVCB1c2VkIGZvciB0aGUgIjpjZiIgY29tbWFuZC4gIFNlZSAnZXJyb3JmaWxlJyBmb3IgdGhhdC4KKwlFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuCisJU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonbWFrZXByZycqIConbXAnKgorJ21ha2VwcmcnICdtcCcJCXN0cmluZwkoZGVmYXVsdCAibWFrZSIsIFZNUzogIk1NUyIpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCVByb2dyYW0gdG8gdXNlIGZvciB0aGUgIjptYWtlIiBjb21tYW5kLiAgU2VlIHw6bWFrZV9tYWtlcHJnfC4gIFRoaXMKKwlvcHRpb24gbWF5IGNvbnRhaW4gJyUnIGFuZCAnIycgY2hhcmFjdGVycywgd2hpY2ggYXJlIGV4cGFuZGVkIGxpa2UKKwl3aGVuIHVzZWQgaW4gYSBjb21tYW5kLWxpbmUuICBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkCisJfDpzZXRfZW52fC4gIFNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nIHNwYWNlcyBhbmQKKwliYWNrc2xhc2hlcy4gIE5vdGUgdGhhdCBhICd8JyBtdXN0IGJlIGVzY2FwZWQgdHdpY2U6IG9uY2UgZm9yICI6c2V0IgorCWFuZCBvbmNlIGZvciB0aGUgaW50ZXJwcmV0YXRpb24gb2YgYSBjb21tYW5kLiAgV2hlbiB5b3UgdXNlIGEgZmlsdGVyCisJY2FsbGVkICJteWZpbHRlciIgZG8gaXQgbGlrZSB0aGlzOiA+CisJICAgIDpzZXQgbWFrZXByZz1nbWFrZVwgXFxcfFwgbXlmaWx0ZXIKKzwJVGhlIHBsYWNlaG9sZGVyICIkKiIgY2FuIGJlIGdpdmVuIChldmVuIG11bHRpcGxlIHRpbWVzKSB0byBzcGVjaWZ5CisJd2hlcmUgdGhlIGFyZ3VtZW50cyB3aWxsIGJlIGluY2x1ZGVkLCBmb3IgZXhhbXBsZTogPgorCSAgICA6c2V0IG1ha2Vwcmc9bGF0ZXhcIFxcXFxub25zdG9wbW9kZVwgXFxcXGlucHV0XFx7JCp9Cis8CVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidtYXRjaHBhaXJzJyogKidtcHMnKgorJ21hdGNocGFpcnMnICdtcHMnCXN0cmluZwkoZGVmYXVsdCAiKDopLHs6fSxbOl0iKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCUNoYXJhY3RlcnMgdGhhdCBmb3JtIHBhaXJzLiAgVGhlIHwlfCBjb21tYW5kIGp1bXBzIGZyb20gb25lIHRvIHRoZQorCW90aGVyLglDdXJyZW50bHkgb25seSBzaW5nbGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBhbGxvd2VkLCBhbmQgdGhleQorCW11c3QgYmUgZGlmZmVyZW50LiAgVGhlIGNoYXJhY3RlcnMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgYSBjb2xvbi4gIFRoZQorCXBhaXJzIG11c3QgYmUgc2VwYXJhdGVkIGJ5IGEgY29tbWEuICBFeGFtcGxlIGZvciBpbmNsdWRpbmcgJzwnIGFuZCAnPicKKwkoSFRNTCk6ID4KKwkJOnNldCBtcHMrPTw6PgorCis8CUEgbW9yZSBleG90aWMgZXhhbXBsZSwgdG8ganVtcCBiZXR3ZWVuIHRoZSAnPScgYW5kICc7JyBpbiBhbgorCWFzc2lnbm1lbnQsIHVzZWZ1bCBmb3IgbGFuZ3VhZ2VzIGxpa2UgQyBhbmQgSmF2YTogPgorCQk6YXUgRmlsZVR5cGUgYyxjcHAsamF2YSBzZXQgbXBzKz09OjsKKworPAlGb3IgYSBtb3JlIGFkdmFuY2VkIHdheSBvZiB1c2luZyAiJSIsIHNlZSB0aGUgbWF0Y2hpdC52aW0gcGx1Z2luIGluCisJdGhlICRWSU1SVU5USU1FL21hY3JvcyBkaXJlY3RvcnkuIHxhZGQtbG9jYWwtaGVscHwKKworCQkJCQkJKidtYXRjaHRpbWUnKiAqJ21hdCcqCisnbWF0Y2h0aW1lJyAnbWF0JwludW1iZXIJKGRlZmF1bHQgNSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX17aW4gTnZpfQorCVRlbnRocyBvZiBhIHNlY29uZCB0byBzaG93IHRoZSBtYXRjaGluZyBwYXJlbiwgd2hlbiAnc2hvd21hdGNoJyBpcworCXNldC4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBpbiBtaWxsaXNlY29uZHMsIGxpa2Ugb3RoZXIgb3B0aW9ucyB0aGF0CisJc2V0IGEgdGltZS4gIFRoaXMgaXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIE52aS4KKworCQkJCQkJKidtYXhmdW5jZGVwdGgnKiAqJ21mZCcqCisnbWF4ZnVuY2RlcHRoJyAnbWZkJwludW1iZXIJKGRlZmF1bHQgMTAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU1heGltdW0gZGVwdGggb2YgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZXIgZnVuY3Rpb25zLiAgVGhpcyBub3JtYWxseQorCWNhdGNoZXMgZW5kbGVzcyByZWN1cnNpb24uICBXaGVuIHVzaW5nIGEgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpdGgKKwltb3JlIGRlcHRoLCBzZXQgJ21heGZ1bmNkZXB0aCcgdG8gYSBiaWdnZXIgbnVtYmVyLiAgQnV0IHRoaXMgd2lsbCB1c2UKKwltb3JlIG1lbW9yeSwgdGhlcmUgaXMgdGhlIGRhbmdlciBvZiBmYWlsaW5nIHdoZW4gbWVtb3J5IGlzIGV4aGF1c3RlZC4KKwlTZWUgYWxzbyB8OmZ1bmN0aW9ufC4KKworCQkJCQkJKidtYXhtYXBkZXB0aCcqIConbW1kJyogKkUyMjMqCisnbWF4bWFwZGVwdGgnICdtbWQnCW51bWJlcgkoZGVmYXVsdCAxMDAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU1heGltdW0gbnVtYmVyIG9mIHRpbWVzIGEgbWFwcGluZyBpcyBkb25lIHdpdGhvdXQgcmVzdWx0aW5nIGluIGEKKwljaGFyYWN0ZXIgdG8gYmUgdXNlZC4gIFRoaXMgbm9ybWFsbHkgY2F0Y2hlcyBlbmRsZXNzIG1hcHBpbmdzLCBsaWtlCisJIjptYXAgeCB5IiB3aXRoICI6bWFwIHkgeCIuICBJdCBzdGlsbCBkb2VzIG5vdCBjYXRjaCAiOm1hcCBnIHdnIiwKKwliZWNhdXNlIHRoZSAndycgaXMgdXNlZCBiZWZvcmUgdGhlIG5leHQgbWFwcGluZyBpcyBkb25lLiAgU2VlIGFsc28KKwl8a2V5LW1hcHBpbmd8LgorCisJCQkJCQkqJ21heG1lbScqIConbW0nKgorJ21heG1lbScgJ21tJwkJbnVtYmVyCShkZWZhdWx0IGJldHdlZW4gMjU2IHRvIDUxMjAgKHN5c3RlbQorCQkJCSBkZXBlbmRlbnQpIG9yIGhhbGYgdGhlIGFtb3VudCBvZiBtZW1vcnkKKwkJCQkgYXZhaWxhYmxlKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU1heGltdW0gYW1vdW50IG9mIG1lbW9yeSAoaW4gS2J5dGUpIHRvIHVzZSBmb3Igb25lIGJ1ZmZlci4gIFdoZW4gdGhpcworCWxpbWl0IGlzIHJlYWNoZWQgYWxsb2NhdGluZyBleHRyYSBtZW1vcnkgZm9yIGEgYnVmZmVyIHdpbGwgY2F1c2UKKwlvdGhlciBtZW1vcnkgdG8gYmUgZnJlZWQuICBNYXhpbXVtIHZhbHVlIDIwMDAwMDAuICBVc2UgdGhpcyB0byB3b3JrCisJd2l0aG91dCBhIGxpbWl0LiAgQWxzbyBzZWUgJ21heG1lbXRvdCcuCisKKwkJCQkJCSonbWF4bWVtdG90JyogKidtbXQnKgorJ21heG1lbXRvdCcgJ21tdCcJbnVtYmVyCShkZWZhdWx0IGJldHdlZW4gMjA0OCBhbmQgMTAyNDAgKHN5c3RlbQorCQkJCSBkZXBlbmRlbnQpIG9yIGhhbGYgdGhlIGFtb3VudCBvZiBtZW1vcnkKKwkJCQkgYXZhaWxhYmxlKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU1heGltdW0gYW1vdW50IG9mIG1lbW9yeSAoaW4gS2J5dGUpIHRvIHVzZSBmb3IgYWxsIGJ1ZmZlcnMgdG9nZXRoZXIuCisJTWF4aW11bSB2YWx1ZSAyMDAwMDAwLglVc2UgdGhpcyB0byB3b3JrIHdpdGhvdXQgYSBsaW1pdC4gIEFsc28gc2VlCisJJ21heG1lbScuCisKKwkJCQkJCSonbWVudWl0ZW1zJyogKidtaXMnKgorJ21lbnVpdGVtcycgJ21pcycJbnVtYmVyCShkZWZhdWx0IDI1KQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K21lbnV8CisJCQlmZWF0dXJlfQorCU1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHVzZSBpbiBhIG1lbnUuICBVc2VkIGZvciBtZW51cyB0aGF0IGFyZQorCWdlbmVyYXRlZCBmcm9tIGEgbGlzdCBvZiBpdGVtcywgZS5nLiwgdGhlIEJ1ZmZlcnMgbWVudS4gIENoYW5naW5nIHRoaXMKKwlvcHRpb24gaGFzIG5vIGRpcmVjdCBlZmZlY3QsIHRoZSBtZW51IG11c3QgYmUgcmVmcmVzaGVkIGZpcnN0LgorCisJCQkJICAgKidtb2RlbGluZScqIConbWwnKiAqJ25vbW9kZWxpbmUnKiAqJ25vbWwnKgorJ21vZGVsaW5lJyAnbWwnCQlib29sZWFuCShWaW0gZGVmYXVsdDogb24sIFZpIGRlZmF1bHQ6IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJCQkJKidtb2RlbGluZXMnKiAqJ21scycqCisnbW9kZWxpbmVzJyAnbWxzJwludW1iZXIJKGRlZmF1bHQgNSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlJZiAnbW9kZWxpbmUnIGlzIG9uICdtb2RlbGluZXMnIGdpdmVzIHRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBpcworCWNoZWNrZWQgZm9yIHNldCBjb21tYW5kcy4gIElmICdtb2RlbGluZScgaXMgb2ZmIG9yICdtb2RlbGluZXMnIGlzIHplcm8KKwlubyBsaW5lcyBhcmUgY2hlY2tlZC4gIFNlZSB8bW9kZWxpbmV8LgorCU5PVEU6ICdtb2RlbGluZScgaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkqJ21vZGlmaWFibGUnKiAqJ21hJyogKidub21vZGlmaWFibGUnKiAqJ25vbWEnKgorJ21vZGlmaWFibGUnICdtYScJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0JCSpFMjEqCisJV2hlbiBvZmYgdGhlIGJ1ZmZlciBjb250ZW50cyBjYW5ub3QgYmUgY2hhbmdlZC4gIFRoZSAnZmlsZWZvcm1hdCcgYW5kCisJJ2ZpbGVlbmNvZGluZycgb3B0aW9ucyBhbHNvIGNhbid0IGJlIGNoYW5nZWQuCisJQ2FuIGJlIHJlc2V0IHdpdGggdGhlIHwtTXwgY29tbWFuZCBsaW5lIGFyZ3VtZW50LgorCisJCQkJKidtb2RpZmllZCcqIConbW9kJyogKidub21vZGlmaWVkJyogKidub21vZCcqCisnbW9kaWZpZWQnICdtb2QnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVdoZW4gb24sIHRoZSBidWZmZXIgaXMgY29uc2lkZXJlZCB0byBiZSBtb2RpZmllZC4gIFRoaXMgb3B0aW9uIGlzIHNldAorCXdoZW46CisJMS4gQSBjaGFuZ2Ugd2FzIG1hZGUgdG8gdGhlIHRleHQgc2luY2UgaXQgd2FzIGxhc3Qgd3JpdHRlbi4gIFVzaW5nIHRoZQorCSAgIHx1bmRvfCBjb21tYW5kIHRvIGdvIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHRleHQgd2lsbCByZXNldCB0aGUKKwkgICBvcHRpb24uICBCdXQgdW5kb2luZyBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGJlZm9yZSB3cml0aW5nIHRoZQorCSAgIGJ1ZmZlciB3aWxsIHNldCB0aGUgb3B0aW9uIGFnYWluLCBzaW5jZSB0aGUgdGV4dCBpcyBkaWZmZXJlbnQgZnJvbQorCSAgIHdoZW4gaXQgd2FzIHdyaXR0ZW4uCisJMi4gJ2ZpbGVmb3JtYXQnIG9yICdmaWxlZW5jb2RpbmcnIGlzIGRpZmZlcmVudCBmcm9tIGl0cyBvcmlnaW5hbAorCSAgIHZhbHVlLiAgVGhlIG9yaWdpbmFsIHZhbHVlIGlzIHNldCB3aGVuIHRoZSBidWZmZXIgaXMgcmVhZCBvcgorCSAgIHdyaXR0ZW4uICBBICI6c2V0IG5vbW9kaWZpZWQiIGNvbW1hbmQgYWxzbyByZXNldHMgdGhlIG9yaWdpbmFsCisJICAgdmFsdWVzIHRvIHRoZSBjdXJyZW50IHZhbHVlcyBhbmQgdGhlICdtb2RpZmllZCcgb3B0aW9uIHdpbGwgYmUKKwkgICByZXNldC4KKwlXaGVuICdidWZ0eXBlJyBpcyAibm93cml0ZSIgb3IgIm5vZmlsZSIgdGhpcyBvcHRpb24gbWF5IGJlIHNldCwgYnV0CisJd2lsbCBiZSBpZ25vcmVkLgorCisJCQkJCQkqJ21vcmUnKiAqJ25vbW9yZScqCisnbW9yZScJCQlib29sZWFuCShWaW0gZGVmYXVsdDogb24sIFZpIGRlZmF1bHQ6IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG9uLCBsaXN0aW5ncyBwYXVzZSB3aGVuIHRoZSB3aG9sZSBzY3JlZW4gaXMgZmlsbGVkLiAgWW91IHdpbGwgZ2V0CisJdGhlIHxtb3JlLXByb21wdHwuICBXaGVuIHRoaXMgb3B0aW9uIGlzIG9mZiB0aGVyZSBhcmUgbm8gcGF1c2VzLCB0aGUKKwlsaXN0aW5nIGNvbnRpbnVlcyB1bnRpbCBmaW5pc2hlZC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCQkJKidtb3VzZScqICpFNTM4KgorJ21vdXNlJwkJCXN0cmluZwkoZGVmYXVsdCAiIiwgImEiIGZvciBHVUksIE1TLURPUyBhbmQgV2luMzIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIG1vdXNlLiAgT25seSB3b3JrcyBmb3IgY2VydGFpbiB0ZXJtaW5hbHMKKwkoeHRlcm0sIE1TLURPUywgV2luMzIgfHdpbjMyLW1vdXNlfCwgUU5YIHB0ZXJtLCBhbmQgTGludXggY29uc29sZQorCXdpdGggZ3BtKS4gIEZvciB1c2luZyB0aGUgbW91c2UgaW4gdGhlIEdVSSwgc2VlIHxndWktbW91c2V8LgorCVRoZSBtb3VzZSBjYW4gYmUgZW5hYmxlZCBmb3IgZGlmZmVyZW50IG1vZGVzOgorCQluCU5vcm1hbCBtb2RlCisJCXYJVmlzdWFsIG1vZGUKKwkJaQlJbnNlcnQgbW9kZQorCQljCUNvbW1hbmQtbGluZSBtb2RlCisJCWgJYWxsIHByZXZpb3VzIG1vZGVzIHdoZW4gZWRpdGluZyBhIGhlbHAgZmlsZQorCQlhCWFsbCBwcmV2aW91cyBtb2RlcworCQlyCWZvciB8aGl0LWVudGVyfCBhbmQgfG1vcmUtcHJvbXB0fCBwcm9tcHQKKwkJQQlhdXRvLXNlbGVjdCBpbiBWaXN1YWwgbW9kZQorCU5vcm1hbGx5IHlvdSB3b3VsZCBlbmFibGUgdGhlIG1vdXNlIGluIGFsbCBmb3VyIG1vZGVzIHdpdGg6ID4KKwkJOnNldCBtb3VzZT1hCis8CVdoZW4gdGhlIG1vdXNlIGlzIG5vdCBlbmFibGVkLCB0aGUgR1VJIHdpbGwgc3RpbGwgdXNlIHRoZSBtb3VzZSBmb3IKKwltb2RlbGVzcyBzZWxlY3Rpb24uICBUaGlzIGRvZXNuJ3QgbW92ZSB0aGUgdGV4dCBjdXJzb3IuCisKKwlTZWUgfG1vdXNlLXVzaW5nfC4gIEFsc28gc2VlIHwnY2xpcGJvYXJkJ3wuCisKKwlOb3RlOiBXaGVuIGVuYWJsaW5nIHRoZSBtb3VzZSBpbiBhIHRlcm1pbmFsLCBjb3B5L3Bhc3RlIHdpbGwgdXNlIHRoZQorCSIqIHJlZ2lzdGVyIGlmIHRoZXJlIGlzIGFjY2VzcyB0byBhbiBYLXNlcnZlci4JVGhlIHh0ZXJtIGhhbmRsaW5nIG9mCisJdGhlIG1vdXNlIGJ1dHRvbnMgY2FuIHN0aWxsIGJlIHVzZWQgYnkga2VlcGluZyB0aGUgc2hpZnQga2V5IHByZXNzZWQuCisJQWxzbyBzZWUgdGhlICdjbGlwYm9hcmQnIG9wdGlvbi4KKworCQkJKidtb3VzZWZvY3VzJyogKidtb3VzZWYnKiAqJ25vbW91c2Vmb2N1cycqIConbm9tb3VzZWYnKgorJ21vdXNlZm9jdXMnICdtb3VzZWYnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgd29ya3MgaW4gdGhlIEdVSX0KKwlUaGUgd2luZG93IHRoYXQgdGhlIG1vdXNlIHBvaW50ZXIgaXMgb24gaXMgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQuCisJV2hlbiBjaGFuZ2luZyB0aGUgd2luZG93IGxheW91dCBvciB3aW5kb3cgZm9jdXMgaW4gYW5vdGhlciB3YXksIHRoZQorCW1vdXNlIHBvaW50ZXIgaXMgbW92ZWQgdG8gdGhlIHdpbmRvdyB3aXRoIGtleWJvYXJkIGZvY3VzLiAgT2ZmIGlzIHRoZQorCWRlZmF1bHQgYmVjYXVzZSBpdCBtYWtlcyB1c2luZyB0aGUgcHVsbCBkb3duIG1lbnVzIGEgbGl0dGxlIGdvb2Z5LCBhcworCWEgcG9pbnRlciB0cmFuc2l0IG1heSBhY3RpdmF0ZSBhIHdpbmRvdyB1bmludGVudGlvbmFsbHkuCisKKwkJCSonbW91c2VoaWRlJyogKidtaCcqIConbm9tb3VzZWhpZGUnKiAqJ25vbWgnKgorJ21vdXNlaGlkZScgJ21oJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgd29ya3MgaW4gdGhlIEdVSX0KKwlXaGVuIG9uLCB0aGUgbW91c2UgcG9pbnRlciBpcyBoaWRkZW4gd2hlbiBjaGFyYWN0ZXJzIGFyZSB0eXBlZC4KKwlUaGUgbW91c2UgcG9pbnRlciBpcyByZXN0b3JlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZC4KKworCQkJCQkJKidtb3VzZW1vZGVsJyogKidtb3VzZW0nKgorJ21vdXNlbW9kZWwnICdtb3VzZW0nCXN0cmluZwkoZGVmYXVsdCAiZXh0ZW5kIiwgInBvcHVwIiBmb3IgTVMtRE9TIGFuZCBXaW4zMikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlTZXRzIHRoZSBtb2RlbCB0byB1c2UgZm9yIHRoZSBtb3VzZS4gIFRoZSBuYW1lIG1vc3RseSBzcGVjaWZpZXMgd2hhdAorCXRoZSByaWdodCBtb3VzZSBidXR0b24gaXMgdXNlZCBmb3I6CisJICAgZXh0ZW5kCVJpZ2h0IG1vdXNlIGJ1dHRvbiBleHRlbmRzIGEgc2VsZWN0aW9uLiAgVGhpcyB3b3JrcworCQkJbGlrZSBpbiBhbiB4dGVybS4KKwkgICBwb3B1cAlSaWdodCBtb3VzZSBidXR0b24gcG9wcyB1cCBhIG1lbnUuICBUaGUgc2hpZnRlZCBsZWZ0CisJCQltb3VzZSBidXR0b24gZXh0ZW5kcyBhIHNlbGVjdGlvbi4gIFRoaXMgd29ya3MgbGlrZQorCQkJd2l0aCBNaWNyb3NvZnQgV2luZG93cworCSAgIHBvcHVwX3NldHBvcyBMaWtlICJwb3B1cCIsIGJ1dCB0aGUgY3Vyc29yIHdpbGwgYmUgbW92ZWQgdG8gdGhlCisJCQlwb3NpdGlvbiB3aGVyZSB0aGUgbW91c2Ugd2FzIGNsaWNrZWQsIGFuZCB0aHVzIHRoZQorCQkJc2VsZWN0ZWQgb3BlcmF0aW9uIHdpbGwgYWN0IHVwb24gdGhlIGNsaWNrZWQgb2JqZWN0LgorCQkJSWYgY2xpY2tpbmcgaW5zaWRlIGEgc2VsZWN0aW9uLCB0aGF0IHNlbGVjdGlvbiB3aWxsCisJCQliZSBhY3RlZCB1cG9uLCBpZS4gbm8gY3Vyc29yIG1vdmUuICBUaGlzIGltcGxpZXMgb2YKKwkJCWNvdXJzZSwgdGhhdCByaWdodCBjbGlja2luZyBvdXRzaWRlIGEgc2VsZWN0aW9uIHdpbGwKKwkJCWVuZCBWaXN1YWwgbW9kZS4KKwlPdmVydmlldyBvZiB3aGF0IGJ1dHRvbiBkb2VzIHdoYXQgZm9yIGVhY2ggbW9kZWw6CisJbW91c2UJCSAgICBleHRlbmQJCXBvcHVwKF9zZXRwb3MpIH4KKwlsZWZ0IGNsaWNrCSAgICBwbGFjZSBjdXJzb3IJcGxhY2UgY3Vyc29yCisJbGVmdCBkcmFnCSAgICBzdGFydCBzZWxlY3Rpb24Jc3RhcnQgc2VsZWN0aW9uCisJc2hpZnQtbGVmdAkgICAgc2VhcmNoIHdvcmQJCWV4dGVuZCBzZWxlY3Rpb24KKwlyaWdodCBjbGljawkgICAgZXh0ZW5kIHNlbGVjdGlvbglwb3B1cCBtZW51IChwbGFjZSBjdXJzb3IpCisJcmlnaHQgZHJhZwkgICAgZXh0ZW5kIHNlbGVjdGlvbgktCisJbWlkZGxlIGNsaWNrCSAgICBwYXN0ZQkJcGFzdGUKKworCUluIHRoZSAicG9wdXAiIG1vZGVsIHRoZSByaWdodCBtb3VzZSBidXR0b24gcHJvZHVjZXMgYSBwb3AtdXAgbWVudS4KKwlZb3UgbmVlZCB0byBkZWZpbmUgdGhpcyBmaXJzdCwgc2VlIHxwb3B1cC1tZW51fC4KKworCU5vdGUgdGhhdCB5b3UgY2FuIGZ1cnRoZXIgcmVmaW5lIHRoZSBtZWFuaW5nIG9mIGJ1dHRvbnMgd2l0aCBtYXBwaW5ncy4KKwlTZWUgfGd1aS1tb3VzZS1tYXBwaW5nfC4gIEJ1dCBtYXBwaW5ncyBhcmUgTk9UIHVzZWQgZm9yIG1vZGVsZXNzCisJc2VsZWN0aW9uIChiZWNhdXNlIHRoYXQncyBoYW5kbGVkIGluIHRoZSBHVUkgY29kZSBkaXJlY3RseSkuCisKKwlUaGUgJ21vdXNlbW9kZWwnIG9wdGlvbiBpcyBzZXQgYnkgdGhlIHw6YmVoYXZlfCBjb21tYW5kLgorCisJCQkJCSonbW91c2VzaGFwZScqIConbW91c2VzJyogKkU1NDcqCisnbW91c2VzaGFwZScgJ21vdXNlcycJc3RyaW5nCShkZWZhdWx0ICJpOmJlYW0scjpiZWFtLHM6dXBkb3duLHNkOmNyb3NzLAorCQkJCQltOm5vLG1sOnVwLWFycm93LHY6cmlnaHR1cC1hcnJvdyIKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbW91c2VzaGFwZXwKKwkJCWZlYXR1cmV9CisJVGhpcyBvcHRpb24gdGVsbHMgVmltIHdoYXQgdGhlIG1vdXNlIHBvaW50ZXIgc2hvdWxkIGxvb2sgbGlrZSBpbgorCWRpZmZlcmVudCBtb2Rlcy4gIFRoZSBvcHRpb24gaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwYXJ0cywgbXVjaAorCWxpa2UgdXNlZCBmb3IgJ2d1aWN1cnNvcicuICBFYWNoIHBhcnQgY29uc2lzdCBvZiBhIG1vZGUvbG9jYXRpb24tbGlzdAorCWFuZCBhbiBhcmd1bWVudC1saXN0OgorCQltb2RlLWxpc3Q6c2hhcGUsbW9kZS1saXN0OnNoYXBlLC4uCisJVGhlIG1vZGUtbGlzdCBpcyBhIGRhc2ggc2VwYXJhdGVkIGxpc3Qgb2YgdGhlc2UgbW9kZXMvbG9jYXRpb25zOgorCQkJSW4gYSBub3JtYWwgd2luZG93OiB+CisJCW4JTm9ybWFsIG1vZGUKKwkJdglWaXN1YWwgbW9kZQorCQl2ZQlWaXN1YWwgbW9kZSB3aXRoICdzZWxlY3Rpb24nICJleGNsdXNpdmUiIChzYW1lIGFzICd2JywKKwkJCWlmIG5vdCBzcGVjaWZpZWQpCisJCW8JT3BlcmF0b3ItcGVuZGluZyBtb2RlCisJCWkJSW5zZXJ0IG1vZGUKKwkJcglSZXBsYWNlIG1vZGUKKworCQkJT3RoZXJzOiB+CisJCWMJYXBwZW5kaW5nIHRvIHRoZSBjb21tYW5kLWxpbmUKKwkJY2kJaW5zZXJ0aW5nIGluIHRoZSBjb21tYW5kLWxpbmUKKwkJY3IJcmVwbGFjaW5nIGluIHRoZSBjb21tYW5kLWxpbmUKKwkJbQlhdCB0aGUgJ0hpdCBFTlRFUicgb3IgJ01vcmUnIHByb21wdHMKKwkJbWwJaWRlbSwgYnV0IGN1cnNvciBpbiB0aGUgbGFzdCBsaW5lCisJCWUJYW55IG1vZGUsIHBvaW50ZXIgYmVsb3cgbGFzdCB3aW5kb3cKKwkJcwlhbnkgbW9kZSwgcG9pbnRlciBvbiBhIHN0YXR1cyBsaW5lCisJCXNkCWFueSBtb2RlLCB3aGlsZSBkcmFnZ2luZyBhIHN0YXR1cyBsaW5lCisJCXZzCWFueSBtb2RlLCBwb2ludGVyIG9uIGEgdmVydGljYWwgc2VwYXJhdG9yIGxpbmUKKwkJdmQJYW55IG1vZGUsIHdoaWxlIGRyYWdnaW5nIGEgdmVydGljYWwgc2VwYXJhdG9yIGxpbmUKKwkJYQlldmVyeXdoZXJlCisKKwlUaGUgc2hhcGUgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisJYXZhaWwJbmFtZQkJbG9va3MgbGlrZSB+CisJdyB4CWFycm93CQlOb3JtYWwgbW91c2UgcG9pbnRlcgorCXcgeAlibGFuawkJbm8gcG9pbnRlciBhdCBhbGwgKHVzZSB3aXRoIGNhcmUhKQorCXcgeAliZWFtCQlJLWJlYW0KKwl3IHgJdXBkb3duCQl1cC1kb3duIHNpemluZyBhcnJvd3MKKwl3IHgJbGVmdHJpZ2h0CWxlZnQtcmlnaHQgc2l6aW5nIGFycm93cworCXcgeAlidXN5CQlUaGUgc3lzdGVtJ3MgdXN1YWwgYnVzeSBwb2ludGVyCisJdyB4CW5vCQlUaGUgc3lzdGVtJ3MgdXN1YWwgJ25vIGlucHV0JyBwb2ludGVyCisJICB4CXVkc2l6aW5nCWluZGljYXRlcyB1cC1kb3duIHJlc2l6aW5nCisJICB4CWxyc2l6aW5nCWluZGljYXRlcyBsZWZ0LXJpZ2h0IHJlc2l6aW5nCisJICB4CWNyb3NzaGFpcglsaWtlIGEgYmlnIHRoaW4gKworCSAgeAloYW5kMQkJYmxhY2sgaGFuZAorCSAgeAloYW5kMgkJd2hpdGUgaGFuZAorCSAgeAlwZW5jaWwJCXdoYXQgeW91IHdyaXRlIHdpdGgKKwkgIHgJcXVlc3Rpb24JYmlnID8KKwkgIHgJcmlnaHR1cC1hcnJvdwlhcnJvdyBwb2ludGluZyByaWdodC11cAorCXcgeAl1cC1hcnJvdwlhcnJvdyBwb2ludGluZyB1cAorCSAgeAk8bnVtYmVyPglhbnkgWDExIHBvaW50ZXIgbnVtYmVyIChzZWUgWDExL2N1cnNvcmZvbnQuaCkKKworCVRoZSAiYXZhaWwiIGNvbHVtbiBjb250YWlucyBhICd3JyBpZiB0aGUgc2hhcGUgaXMgYXZhaWxhYmxlIGZvciBXaW4zMiwKKwl4IGZvciBYMTEuCisJQW55IG1vZGVzIG5vdCBzcGVjaWZpZWQgb3Igc2hhcGVzIG5vdCBhdmFpbGFibGUgdXNlIHRoZSBub3JtYWwgbW91c2UKKwlwb2ludGVyLgorCisJRXhhbXBsZTogPgorCQk6c2V0IG1vdXNlc2hhcGU9czp1ZHNpemluZyxtOm5vCis8CXdpbGwgbWFrZSB0aGUgbW91c2UgdHVybiB0byBhIHNpemluZyBhcnJvdyBvdmVyIHRoZSBzdGF0dXMgbGluZXMgYW5kCisJaW5kaWNhdGUgbm8gaW5wdXQgd2hlbiB0aGUgaGl0LWVudGVyIHByb21wdCBpcyBkaXNwbGF5ZWQgKHNpbmNlCisJY2xpY2tpbmcgdGhlIG1vdXNlIGhhcyBubyBlZmZlY3QgaW4gdGhpcyBzdGF0ZS4pCisKKwkJCQkJCSonbW91c2V0aW1lJyogKidtb3VzZXQnKgorJ21vdXNldGltZScgJ21vdXNldCcJbnVtYmVyCShkZWZhdWx0IDUwMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlPbmx5IGZvciBHVUksIE1TLURPUywgV2luMzIgYW5kIFVuaXggd2l0aCB4dGVybS4gIERlZmluZXMgdGhlIG1heGltdW0KKwl0aW1lIGluIG1zZWMgYmV0d2VlbiB0d28gbW91c2UgY2xpY2tzIGZvciB0aGUgc2Vjb25kIGNsaWNrIHRvIGJlCisJcmVjb2duaXplZCBhcyBhIG11bHRpIGNsaWNrLgorCisJCQkJCQkJKiducmZvcm1hdHMnKiAqJ25mJyoKKyducmZvcm1hdHMnICduZicJc3RyaW5nCShkZWZhdWx0ICJvY3RhbCxoZXgiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVRoaXMgZGVmaW5lcyB3aGF0IGJhc2VzIFZpbSB3aWxsIGNvbnNpZGVyIGZvciBudW1iZXJzIHdoZW4gdXNpbmcgdGhlCisJQ1RSTC1BIGFuZCBDVFJMLVggY29tbWFuZHMgZm9yIGFkZGluZyB0byBhbmQgc3VidHJhY3RpbmcgZnJvbSBhIG51bWJlcgorCXJlc3BlY3RpdmVseTsgc2VlIHxDVFJMLUF8IGZvciBtb3JlIGluZm8gb24gdGhlc2UgY29tbWFuZHMuCisJYWxwaGEJaWYgaW5jbHVkZWQsIHNpbmdsZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB3aWxsIGJlCisJCWluY3JlbWVudGVkIG9yIGRlY3JlbWVudGVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGEgbGlzdCB3aXRoIGEKKwkJbGV0dGVyIGluZGV4IGEpLCBiKSwgZXRjLgorCW9jdGFsCWlmIGluY2x1ZGVkLCBudW1iZXJzIHRoYXQgc3RhcnQgd2l0aCBhIHplcm8gd2lsbCBiZSBjb25zaWRlcmVkCisJCXRvIGJlIG9jdGFsLiAgRXhhbXBsZTogVXNpbmcgQ1RSTC1BIG9uICIwMDciIHJlc3VsdHMgaW4gIjAxMCIuCisJaGV4CWlmIGluY2x1ZGVkLCBudW1iZXJzIHN0YXJ0aW5nIHdpdGggIjB4IiBvciAiMFgiIHdpbGwgYmUKKwkJY29uc2lkZXJlZCB0byBiZSBoZXhhZGVjaW1hbC4gIEV4YW1wbGU6IFVzaW5nIENUUkwtWCBvbgorCQkiMHgxMDAiIHJlc3VsdHMgaW4gIjB4MGZmIi4KKwlOdW1iZXJzIHdoaWNoIHNpbXBseSBiZWdpbiB3aXRoIGEgZGlnaXQgaW4gdGhlIHJhbmdlIDEtOSBhcmUgYWx3YXlzCisJY29uc2lkZXJlZCBkZWNpbWFsLiAgVGhpcyBhbHNvIGhhcHBlbnMgZm9yIG51bWJlcnMgdGhhdCBhcmUgbm90CisJcmVjb2duaXplZCBhcyBvY3RhbCBvciBoZXguCisKKwkJCQkqJ251bWJlcicqIConbnUnKiAqJ25vbnVtYmVyJyogKidub251JyoKKydudW1iZXInICdudScJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gd2luZG93CisJUHJpbnQgdGhlIGxpbmUgbnVtYmVyIGluIGZyb250IG9mIGVhY2ggbGluZS4gIFdoZW4gdGhlICduJyBvcHRpb24gaXMKKwlleGNsdWRlZCBmcm9tICdjcG9wdGlvbnMnIGEgd3JhcHBlZCBsaW5lIHdpbGwgbm90IHVzZSB0aGUgY29sdW1uIG9mCisJbGluZSBudW1iZXJzICh0aGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gJ2NvbXBhdGlibGUnIGlzbid0IHNldCkuCisJV2hlbiBhIGxvbmcsIHdyYXBwZWQgbGluZSBkb2Vzbid0IHN0YXJ0IHdpdGggdGhlIGZpcnN0IGNoYXJhY3RlciwgJy0nCisJY2hhcmFjdGVycyBhcmUgcHV0IGJlZm9yZSB0aGUgbnVtYmVyLgorCVNlZSB8aGwtTGluZU5yfCBmb3IgdGhlIGhpZ2hsaWdodGluZyB1c2VkIGZvciB0aGUgbnVtYmVyLgorCisJCQkJCSonb3NmaWxldHlwZScqIConb2Z0JyogKkUzNjYqCisnb3NmaWxldHlwZScgJ29mdCcJc3RyaW5nIChSSVNDLU9TIGRlZmF1bHQ6ICJUZXh0IiwKKwkJCQlvdGhlcnMgZGVmYXVsdDogIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K29zZmlsZXR5cGV8CisJCQlmZWF0dXJlfQorCVNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgc3RvcmUgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgYmVzaWRlcworCW5hbWUsIGRhdGVzdGFtcCBhbmQgcGVybWlzc2lvbnMuICBUaGlzIG9wdGlvbiBjb250YWlucyB0aGUgZXh0cmEKKwlpbmZvcm1hdGlvbiwgdGhlIG5hdHVyZSBvZiB3aGljaCB3aWxsIHZhcnkgYmV0d2VlbiBzeXN0ZW1zLgorCVRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBpcyB1c3VhbGx5IHNldCB3aGVuIHRoZSBmaWxlIGlzIGxvYWRlZCwgYW5kCisJdXNlIHRvIHNldCB0aGUgZmlsZSB0eXBlIHdoZW4gZmlsZSBpcyB3cml0dGVuLgorCUl0IGNhbiBhZmZlY3QgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgb2YgdGhlIGF1dG9tYXRpYyBjb21tYW5kcy4KKwl8YXV0b2NtZC1vc2ZpbGV0eXBlc3wKKworCQkJCQkJKidwYXJhZ3JhcGhzJyogKidwYXJhJyoKKydwYXJhZ3JhcGhzJyAncGFyYScJc3RyaW5nCShkZWZhdWx0ICJJUExQUFBRUFAgTElwcGxwaXBicCIpCisJCQlnbG9iYWwKKwlTcGVjaWZpZXMgdGhlIG5yb2ZmIG1hY3JvcyB0aGF0IHNlcGFyYXRlIHBhcmFncmFwaHMuICBUaGVzZSBhcmUgcGFpcnMKKwlvZiB0d28gbGV0dGVycyAoc2VlIHxvYmplY3QtbW90aW9uc3wpLgorCisJCQkJCQkqJ3Bhc3RlJyogKidub3Bhc3RlJyoKKydwYXN0ZScJCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlQdXQgVmltIGluIFBhc3RlIG1vZGUuCVRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGN1dCBvciBjb3B5CisJc29tZSB0ZXh0IGZyb20gb25lIHdpbmRvdyBhbmQgcGFzdGUgaXQgaW4gVmltLglUaGlzIHdpbGwgYXZvaWQKKwl1bmV4cGVjdGVkIGVmZmVjdHMuCisJU2V0dGluZyB0aGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB1c2luZyBWaW0gaW4gYSB0ZXJtaW5hbCwgd2hlcmUgVmltCisJY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gdHlwZWQgdGV4dCBhbmQgcGFzdGVkIHRleHQuCUluIHRoZSBHVUksIFZpbQorCWtub3dzIGFib3V0IHBhc3RpbmcgYW5kIHdpbGwgbW9zdGx5IGRvIHRoZSByaWdodCB0aGluZyB3aXRob3V0ICdwYXN0ZScKKwliZWluZyBzZXQuICBUaGUgc2FtZSBpcyB0cnVlIGZvciBhIHRlcm1pbmFsIHdoZXJlIFZpbSBoYW5kbGVzIHRoZQorCW1vdXNlIGNsaWNrcyBpdHNlbGYuCisJV2hlbiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMgc3dpdGNoZWQgb24gKGFsc28gd2hlbiBpdCB3YXMgYWxyZWFkeSBvbik6CisJCS0gbWFwcGluZyBpbiBJbnNlcnQgbW9kZSBhbmQgQ29tbWFuZC1saW5lIG1vZGUgaXMgZGlzYWJsZWQKKwkJLSBhYmJyZXZpYXRpb25zIGFyZSBkaXNhYmxlZAorCQktICd0ZXh0d2lkdGgnIGlzIHNldCB0byAwCisJCS0gJ3dyYXBtYXJnaW4nIGlzIHNldCB0byAwCisJCS0gJ2F1dG9pbmRlbnQnIGlzIHJlc2V0CisJCS0gJ3NtYXJ0aW5kZW50JyBpcyByZXNldAorCQktICdzb2Z0dGFic3RvcCcgaXMgc2V0IHRvIDAKKwkJLSAncmV2aW5zJyBpcyByZXNldAorCQktICdydWxlcicgaXMgcmVzZXQKKwkJLSAnc2hvd21hdGNoJyBpcyByZXNldAorCQktICdmb3JtYXRvcHRpb25zJyBpcyB1c2VkIGxpa2UgaXQgaXMgZW1wdHkKKwlUaGVzZSBvcHRpb25zIGtlZXAgdGhlaXIgdmFsdWUsIGJ1dCB0aGVpciBlZmZlY3QgaXMgZGlzYWJsZWQ6CisJCS0gJ2xpc3AnCisJCS0gJ2luZGVudGV4cHInCisJCS0gJ2NpbmRlbnQnCisJTk9URTogV2hlbiB5b3Ugc3RhcnQgZWRpdGluZyBhbm90aGVyIGZpbGUgd2hpbGUgdGhlICdwYXN0ZScgb3B0aW9uIGlzCisJb24sIHNldHRpbmdzIGZyb20gdGhlIG1vZGVsaW5lcyBvciBhdXRvY29tbWFuZHMgbWF5IGNoYW5nZSB0aGUKKwlzZXR0aW5ncyBhZ2FpbiwgY2F1c2luZyB0cm91YmxlIHdoZW4gcGFzdGluZyB0ZXh0LiAgWW91IG1pZ2h0IHdhbnQgdG8KKwlzZXQgdGhlICdwYXN0ZScgb3B0aW9uIGFnYWluLgorCVdoZW4gdGhlICdwYXN0ZScgb3B0aW9uIGlzIHJlc2V0IHRoZSBtZW50aW9uZWQgb3B0aW9ucyBhcmUgcmVzdG9yZWQgdG8KKwl0aGUgdmFsdWUgYmVmb3JlIHRoZSBtb21lbnQgJ3Bhc3RlJyB3YXMgc3dpdGNoZWQgZnJvbSBvZmYgdG8gb24uCisJUmVzZXR0aW5nICdwYXN0ZScgYmVmb3JlIGV2ZXIgc2V0dGluZyBpdCBkb2VzIG5vdCBoYXZlIGFueSBlZmZlY3QuCisJU2luY2UgbWFwcGluZyBkb2Vzbid0IHdvcmsgd2hpbGUgJ3Bhc3RlJyBpcyBhY3RpdmUsIHlvdSBuZWVkIHRvIHVzZQorCXRoZSAncGFzdGV0b2dnbGUnIG9wdGlvbiB0byB0b2dnbGUgdGhlICdwYXN0ZScgb3B0aW9uIHdpdGggc29tZSBrZXkuCisKKwkJCQkJCSoncGFzdGV0b2dnbGUnKiAqJ3B0JyoKKydwYXN0ZXRvZ2dsZScgJ3B0JwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBub24tZW1wdHksIHNwZWNpZmllcyB0aGUga2V5IHNlcXVlbmNlIHRoYXQgdG9nZ2xlcyB0aGUgJ3Bhc3RlJworCW9wdGlvbi4gIFRoaXMgaXMgbGlrZSBzcGVjaWZ5aW5nIGEgbWFwcGluZzogPgorCSAgICA6bWFwIHtrZXlzfSA6c2V0IGludnBhc3RlPENSPgorPAlXaGVyZSB7a2V5c30gaXMgdGhlIHZhbHVlIG9mICdwYXN0ZXRvZ2dsZScuCisJVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBpdCB3aWxsIHdvcmsgZXZlbiB3aGVuICdwYXN0ZScgaXMgc2V0LgorCSdwYXN0ZXRvZ2dsZScgd29ya3MgaW4gSW5zZXJ0IG1vZGUgYW5kIE5vcm1hbCBtb2RlLCBidXQgbm90IGluCisJQ29tbWFuZC1saW5lIG1vZGUuCisJTWFwcGluZ3MgYXJlIGNoZWNrZWQgZmlyc3QsIHRodXMgb3ZlcnJ1bGUgJ3Bhc3RldG9nZ2xlJy4gIEhvd2V2ZXIsCisJd2hlbiAncGFzdGUnIGlzIG9uIG1hcHBpbmdzIGFyZSBpZ25vcmVkIGluIEluc2VydCBtb2RlLCB0aHVzIHlvdSBjYW4gZG8KKwl0aGlzOiA+CisJICAgIDptYXAgPEYxMD4gOnNldCBwYXN0ZTxDUj4KKwkgICAgOm1hcCA8RjExPiA6c2V0IG5vcGFzdGU8Q1I+CisJICAgIDppbWFwIDxGMTA+IDxDLU8+OnNldCBwYXN0ZTxDUj4KKwkgICAgOmltYXAgPEYxMT4gPG5vcD4KKwkgICAgOnNldCBwYXN0ZXRvZ2dsZT08RjExPgorPAlUaGlzIHdpbGwgbWFrZSA8RjEwPiBzdGFydCBwYXN0ZSBtb2RlIGFuZCA8RjExPiBzdG9wIHBhc3RlIG1vZGUuCisJTm90ZSB0aGF0IHR5cGluZyA8RjEwPiBpbiBwYXN0ZSBtb2RlIGluc2VydHMgIjxGMTA+Iiwgc2luY2UgaW4gcGFzdGUKKwltb2RlIGV2ZXJ5dGhpbmcgaXMgaW5zZXJ0ZWQgbGl0ZXJhbGx5LCBleGNlcHQgdGhlICdwYXN0ZXRvZ2dsZScga2V5CisJc2VxdWVuY2UuCisKKwkJCQkJCSoncGV4JyogKidwYXRjaGV4cHInKgorJ3BhdGNoZXhwcicgJ3BleCcJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2RpZmZ8CisJCQlmZWF0dXJlfQorCUV4cHJlc3Npb24gd2hpY2ggaXMgZXZhbHVhdGVkIHRvIGFwcGx5IGEgcGF0Y2ggdG8gYSBmaWxlIGFuZCBnZW5lcmF0ZQorCXRoZSByZXN1bHRpbmcgbmV3IHZlcnNpb24gb2YgdGhlIGZpbGUuCVNlZSB8ZGlmZi1wYXRjaGV4cHJ8LgorCisJCQkJCQkqJ3BhdGNobW9kZScqIConcG0nKiAqRTIwNioKKydwYXRjaG1vZGUnICdwbScJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gbm9uLWVtcHR5IHRoZSBvbGRlc3QgdmVyc2lvbiBvZiBhIGZpbGUgaXMga2VwdC4gIFRoaXMgY2FuIGJlIHVzZWQKKwl0byBrZWVwIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIGEgZmlsZSBpZiB5b3UgYXJlIGNoYW5naW5nIGZpbGVzIGluIGEKKwlzb3VyY2UgZGlzdHJpYnV0aW9uLiAgT25seSB0aGUgZmlyc3QgdGltZSB0aGF0IGEgZmlsZSBpcyB3cml0dGVuIGEKKwljb3B5IG9mIHRoZSBvcmlnaW5hbCBmaWxlIHdpbGwgYmUga2VwdC4gIFRoZSBuYW1lIG9mIHRoZSBjb3B5IGlzIHRoZQorCW5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUgd2l0aCB0aGUgc3RyaW5nIGluIHRoZSAncGF0Y2htb2RlJyBvcHRpb24KKwlhcHBlbmRlZC4gIFRoaXMgb3B0aW9uIHNob3VsZCBzdGFydCB3aXRoIGEgZG90LiAgVXNlIGEgc3RyaW5nIGxpa2UKKwkiLm9yZyIuICAnYmFja3VwZGlyJyBtdXN0IG5vdCBiZSBlbXB0eSBmb3IgdGhpcyB0byB3b3JrIChEZXRhaWw6IFRoZQorCWJhY2t1cCBmaWxlIGlzIHJlbmFtZWQgdG8gdGhlIHBhdGNobW9kZSBmaWxlIGFmdGVyIHRoZSBuZXcgZmlsZSBoYXMKKwliZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuLCB0aGF0J3Mgd2h5IGl0IG11c3QgYmUgcG9zc2libGUgdG8gd3JpdGUgYQorCWJhY2t1cCBmaWxlKS4gIElmIHRoZXJlIHdhcyBubyBmaWxlIHRvIGJlIGJhY2tlZCB1cCwgYW4gZW1wdHkgZmlsZSBpcworCWNyZWF0ZWQuCisJV2hlbiB0aGUgJ2JhY2t1cHNraXAnIHBhdHRlcm4gbWF0Y2hlcywgYSBwYXRjaG1vZGUgZmlsZSBpcyBub3QgbWFkZS4KKwlVc2luZyAncGF0Y2htb2RlJyBmb3IgY29tcHJlc3NlZCBmaWxlcyBhcHBlbmRzIHRoZSBleHRlbnNpb24gYXQgdGhlCisJZW5kIChlLmcuLCAiZmlsZS5nei5vcmlnIiksIHRodXMgdGhlIHJlc3VsdGluZyBuYW1lIGlzbid0IGFsd2F5cworCXJlY29nbml6ZWQgYXMgYSBjb21wcmVzc2VkIGZpbGUuCisKKwkJCQkJKidwYXRoJyogKidwYScqICpFMzQzKiAqRTM0NSogKkUzNDcqCisncGF0aCcgJ3BhJwkJc3RyaW5nCShkZWZhdWx0IG9uIFVuaXg6ICIuLC91c3IvaW5jbHVkZSwsIgorCQkJCSAgIG9uIE9TLzI6CSAgIi4sL2VteC9pbmNsdWRlLCwiCisJCQkJICAgb3RoZXIgc3lzdGVtczogIi4sLCIpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCVRoaXMgaXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHdoaWNoIHdpbGwgYmUgc2VhcmNoZWQgd2hlbiB1c2luZyB0aGUKKwl8Z2Z8LCBbZiwgXWYsIF5XZiwgfDpmaW5kfCBhbmQgb3RoZXIgY29tbWFuZHMsIHByb3ZpZGVkIHRoYXQgdGhlIGZpbGUKKwliZWluZyBzZWFyY2hlZCBmb3IgaGFzIGEgcmVsYXRpdmUgcGF0aCAobm90IHN0YXJ0aW5nIHdpdGggJy8nKS4gIFRoZQorCWRpcmVjdG9yaWVzIGluIHRoZSAncGF0aCcgb3B0aW9uIG1heSBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4KKwktIFVzZSBjb21tYXMgdG8gc2VwYXJhdGUgZGlyZWN0b3J5IG5hbWVzOiA+CisJCTpzZXQgcGF0aD0uLC91c3IvbG9jYWwvaW5jbHVkZSwvdXNyL2luY2x1ZGUKKzwJLSBTcGFjZXMgY2FuIGFsc28gYmUgdXNlZCB0byBzZXBhcmF0ZSBkaXJlY3RvcnkgbmFtZXMgKGZvciBiYWNrd2FyZHMKKwkgIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9uIDMuMCkuICBUbyBoYXZlIGEgc3BhY2UgaW4gYSBkaXJlY3RvcnkKKwkgIG5hbWUsIHByZWNlZGUgaXQgd2l0aCBhbiBleHRyYSBiYWNrc2xhc2gsIGFuZCBlc2NhcGUgdGhlIHNwYWNlOiA+CisJCTpzZXQgcGF0aD0uLC9kaXIvd2l0aFxcXCBzcGFjZQorPAktIFRvIGluY2x1ZGUgYSBjb21tYSBpbiBhIGRpcmVjdG9yeSBuYW1lIHByZWNlZGUgaXQgd2l0aCBhbiBleHRyYQorCSAgYmFja3NsYXNoOiA+CisJCTpzZXQgcGF0aD0uLC9kaXIvd2l0aFxcLGNvbW1hCis8CS0gVG8gc2VhcmNoIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZmlsZSwgdXNlOiA+CisJCTpzZXQgcGF0aD0uCis8CS0gVG8gc2VhcmNoIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB1c2UgYW4gZW1wdHkgc3RyaW5nIGJldHdlZW4gdHdvCisJICBjb21tYXM6ID4KKwkJOnNldCBwYXRoPSwsCis8CS0gQSBkaXJlY3RvcnkgbmFtZSBtYXkgZW5kIGluIGEgJzonIG9yICcvJy4KKwktIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4KKwktIFdoZW4gdXNpbmcgfG5ldHJ3LnZpbXwgVVJMcyBjYW4gYmUgdXNlZC4gIEZvciBleGFtcGxlLCBhZGRpbmcKKwkgICJodHRwOi8vd3d3LnZpbS5vcmciIHdpbGwgbWFrZSAiOmZpbmQgaW5kZXguaHRtbCIgd29yay4KKwktIFNlYXJjaCB1cHdhcmRzIGFuZCBkb3dud2FyZHMgaW4gYSBkaXJlY3RvcnkgdHJlZToKKwkgIDEpICIqIiBtYXRjaGVzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycywgZS5nLjogPgorCQk6c2V0IHBhdGg9L3Vzci9pbmNsdWRlLyoKKzwJICAgICBtZWFucyBhbGwgc3ViZGlyZWN0b3JpZXMgaW4gL3Vzci9pbmNsdWRlIChidXQgbm90IC91c3IvaW5jbHVkZQorCSAgICAgaXRzZWxmKS4gPgorCQk6c2V0IHBhdGg9L3Vzci8qYworPAkgICAgIG1hdGNoZXMgL3Vzci9kb2MgYW5kIC91c3Ivc3JjLgorCSAgMikgIioqIiBtYXRjaGVzIGEgc3VidHJlZSwgdXAgdG8gMTAwIGRpcmVjdG9yaWVzIGRlZXAuICBFeGFtcGxlOiA+CisJCTpzZXQgcGF0aD0vaG9tZS91c2VyX3gvc3JjLyoqCis8CSAgICAgbWVhbnMgc2VhcmNoIGluIHRoZSB3aG9sZSBzdWJ0cmVlIHVuZGVyICIvaG9tZS91c3JfeC9zcmMiLgorCSAgMykgSWYgdGhlIHBhdGggZW5kcyB3aXRoIGEgJzsnLCB0aGlzIHBhdGggaXMgdGhlIHN0YXJ0cG9pbnQKKwkgICAgIGZvciB1cHdhcmQgc2VhcmNoLgorCSAgU2VlIHxmaWxlLXNlYXJjaGluZ3wgZm9yIG1vcmUgaW5mbyBhbmQgZXhhY3Qgc3ludGF4LgorCSAge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3BhdGhfZXh0cmF8IGZlYXR1cmV9CisJLSBDYXJlZnVsIHdpdGggJ1wnIGNoYXJhY3RlcnMsIHR5cGUgdHdvIHRvIGdldCBvbmUgaW4gdGhlIG9wdGlvbjogPgorCQk6c2V0IHBhdGg9LixjOlxcaW5jbHVkZQorPAkgIE9yIGp1c3QgdXNlICcvJyBpbnN0ZWFkOiA+CisJCTpzZXQgcGF0aD0uLGM6L2luY2x1ZGUKKzwJRG9uJ3QgZm9yZ2V0ICIuIiBvciBmaWxlcyB3b24ndCBldmVuIGJlIGZvdW5kIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcworCXRoZSBmaWxlIQorCVRoZSBtYXhpbXVtIGxlbmd0aCBpcyBsaW1pdGVkLglIb3cgbXVjaCBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0sIG1vc3RseQorCWl0IGlzIHNvbWV0aGluZyBsaWtlIDI1NiBvciAxMDI0IGNoYXJhY3RlcnMuCisJWW91IGNhbiBjaGVjayBpZiBhbGwgdGhlIGluY2x1ZGUgZmlsZXMgYXJlIGZvdW5kLCB1c2luZyB0aGUgdmFsdWUgb2YKKwkncGF0aCcsIHNlZSB8OmNoZWNrcGF0aHwuCisJVGhlIHVzZSBvZiB8OnNldCs9fCBhbmQgfDpzZXQtPXwgaXMgcHJlZmVycmVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nCisJZGlyZWN0b3JpZXMgZnJvbSB0aGUgbGlzdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdoZW4gYSBmdXR1cmUgdmVyc2lvbgorCXVzZXMgYW5vdGhlciBkZWZhdWx0LiAgVG8gcmVtb3ZlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB1c2U6ID4KKwkJOnNldCBwYXRoLT0KKzwJVG8gYWRkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB1c2U6ID4KKwkJOnNldCBwYXRoKz0KKzwJVG8gdXNlIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLCB5b3UgcHJvYmFibHkgbmVlZCB0byByZXBsYWNlIHRoZQorCXNlcGFyYXRvci4gIEhlcmUgaXMgYW4gZXhhbXBsZSB0byBhcHBlbmQgJElOQ0wsIGluIHdoaWNoIGRpcmVjdG9yeQorCW5hbWVzIGFyZSBzZXBhcmF0ZWQgd2l0aCBhIHNlbWktY29sb246ID4KKwkJOmxldCAmcGF0aCA9ICZwYXRoIC4gIiwiIC4gc3Vic3RpdHV0ZSgkSU5DTCwgJzsnLCAnLCcsICdnJykKKzwJUmVwbGFjZSB0aGUgJzsnIHdpdGggYSAnOicgb3Igd2hhdGV2ZXIgc2VwYXJhdG9yIGlzIHVzZWQuICBOb3RlIHRoYXQKKwl0aGlzIGRvZXNuJ3Qgd29yayB3aGVuICRJTkNMIGNvbnRhaW5zIGEgY29tbWEgb3Igd2hpdGUgc3BhY2UuCisKKwkJCSoncHJlc2VydmVpbmRlbnQnKiAqJ3BpJyogKidub3ByZXNlcnZlaW5kZW50JyogKidub3BpJyoKKydwcmVzZXJ2ZWluZGVudCcgJ3BpJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlXaGVuIGNoYW5naW5nIHRoZSBpbmRlbnQgb2YgdGhlIGN1cnJlbnQgbGluZSwgcHJlc2VydmUgYXMgbXVjaCBvZiB0aGUKKwlpbmRlbnQgc3RydWN0dXJlIGFzIHBvc3NpYmxlLiAgTm9ybWFsbHkgdGhlIGluZGVudCBpcyByZXBsYWNlZCBieSBhCisJc2VyaWVzIG9mIHRhYnMgZm9sbG93ZWQgYnkgc3BhY2VzIGFzIHJlcXVpcmVkICh1bmxlc3MgfCdleHBhbmR0YWInfCBpcworCWVuYWJsZWQsIGluIHdoaWNoIGNhc2Ugb25seSBzcGFjZXMgYXJlIHVzZWQpLiAgRW5hYmxpbmcgdGhpcyBvcHRpb24KKwltZWFucyB0aGUgaW5kZW50IHdpbGwgcHJlc2VydmUgYXMgbWFueSBleGlzdGluZyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlCisJZm9yIGluZGVudGluZywgYW5kIG9ubHkgYWRkIGFkZGl0aW9uYWwgdGFicyBvciBzcGFjZXMgYXMgcmVxdWlyZWQuCisJTk9URTogV2hlbiB1c2luZyAiPj4iIG11bHRpcGxlIHRpbWVzIHRoZSByZXN1bHRpbmcgaW5kZW50IGlzIGEgbWl4IG9mCisJdGFicyBhbmQgc3BhY2VzLiAgWW91IG1pZ2h0IG5vdCBsaWtlIHRoaXMuCisJTk9URTogJ3ByZXNlcnZlaW5kZW50JyBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisJQWxzbyBzZWUgJ2NvcHlpbmRlbnQnLgorCVVzZSB8OnJldGFifCB0byBjbGVhbiB1cCB3aGl0ZSBzcGFjZS4KKworCQkJCQkqJ3ByZXZpZXdoZWlnaHQnKiAqJ3B2aCcqCisncHJldmlld2hlaWdodCcgJ3B2aCcJbnVtYmVyIChkZWZhdWx0IDEyKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3dpbmRvd3N8IG9yCisJCQl8K3F1aWNrZml4fCBmZWF0dXJlfQorCURlZmF1bHQgaGVpZ2h0IGZvciBhIHByZXZpZXcgd2luZG93LiAgVXNlZCBmb3IgfDpwdGFnfCBhbmQgYXNzb2NpYXRlZAorCWNvbW1hbmRzLiAgVXNlZCBmb3IgfENUUkwtV199fCB3aGVuIG5vIGNvdW50IGlzIGdpdmVuLgorCisJCQkJCSoncHJldmlld3dpbmRvdycqIConbm9wcmV2aWV3d2luZG93JyoKKwkJCQkJKidwdncnKiAqJ25vcHZ3JyogKkU1OTAqCisncHJldmlld3dpbmRvdycgJ3B2dycJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrd2luZG93c3wgb3IKKwkJCXwrcXVpY2tmaXh8IGZlYXR1cmV9CisJSWRlbnRpZmllcyB0aGUgcHJldmlldyB3aW5kb3cuCU9ubHkgb25lIHdpbmRvdyBjYW4gaGF2ZSB0aGlzIG9wdGlvbgorCXNldC4gIEl0J3Mgbm9ybWFsbHkgbm90IHNldCBkaXJlY3RseSwgYnV0IGJ5IHVzaW5nIG9uZSBvZiB0aGUgY29tbWFuZHMKKwl8OnB0YWd8LCB8OnBlZGl0fCwgZXRjLgorCisJCQkJCQkqJ3ByaW50ZGV2aWNlJyogKidwZGV2JyoKKydwcmludGRldmljZScgJ3BkZXYnCXN0cmluZwkoZGVmYXVsdCBlbXB0eSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcHJpbnRlcnwKKwkJCWZlYXR1cmV9CisJVGhpcyBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBwcmludGVyIHRvIGJlIHVzZWQgd2hlbiB0aGUgfDpoYXJkY29weXwKKwljb21tYW5kIGlzIGlzc3VlZCB3aXRoIGEgYmFuZyAoISkgdG8gc2tpcCB0aGUgcHJpbnRlciBzZWxlY3Rpb24KKwlkaWFsb2cuICBPbiBXaW4zMiwgaXQgc2hvdWxkIGJlIHRoZSBwcmludGVyIG5hbWUgZXhhY3RseSBhcyBpdCBhcHBlYXJzCisJaW4gdGhlIHN0YW5kYXJkIHByaW50ZXIgZGlhbG9nLgorCUlmIHRoZSBvcHRpb24gaXMgZW1wdHksIHRoZW4gdmltIHdpbGwgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwcmludGVyCisJZm9yICI6aGFyZGNvcHkhIgorCisJCQkJCSoncHJpbnRlbmNvZGluZycqIConcGVuYycqICpFNjIwKgorJ3ByaW50ZW5jb2RpbmcnICdwZW5jJwlTdHJpbmcJKGRlZmF1bHQgZW1wdHksIGV4Y2VwdCBmb3I6CisJCQkJCVdpbmRvd3MsIE9TLzI6IGNwMTI1MiwKKwkJCQkJTWFjaW50b3NoOiBtYWMtcm9tYW4sCisJCQkJCVZNUzogZGVjLW1jcywKKwkJCQkJSFBVWDogaHAtcm9tYW44LAorCQkJCQlFQkNESUM6IGViY2RpYy11aykKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcHJpbnRlcnwKKwkJCWFuZCB8K3Bvc3RzY3JpcHR8IGZlYXR1cmVzfQorCVNldHMgdGhlIGNoYXJhY3RlciBlbmNvZGluZyB1c2VkIHdoZW4gcHJpbnRpbmcuICBUaGlzIG9wdGlvbiB0ZWxscyBWSU0KKwl3aGljaCBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZSBmcm9tIHRoZSAicHJpbnQiIGRpcmVjdG9yeSBpbgorCSdydW50aW1lcGF0aCcgdG8gdXNlLgorCisJVGhpcyBvcHRpb24gd2lsbCBhY2NlcHQgYW55IHZhbHVlIGZyb20gfGVuY29kaW5nLW5hbWVzfC4gIEFueQorCXJlY29nbml6ZWQgbmFtZXMgYXJlIGNvbnZlcnRlZCB0byBWSU0gc3RhbmRhcmQgbmFtZXMgLSBzZWUgJ2VuY29kaW5nJworCWZvciBtb3JlIGRldGFpbHMuICBOYW1lcyBub3QgcmVjb2duaXplZCBieSBWSU0gd2lsbCBqdXN0IGJlIGNvbnZlcnRlZAorCXRvIGxvd2VyIGNhc2UgYW5kIHVuZGVyc2NvcmVzIHJlcGxhY2VkIHdpdGggJy0nIHNpZ25zLgorCisJSWYgJ3ByaW50ZW5jb2RpbmcnIGlzIGVtcHR5IG9yIFZJTSBjYW5ub3QgZmluZCB0aGUgZmlsZSB0aGVuIGl0IHdpbGwKKwl1c2UgJ2VuY29kaW5nJyAoaWYgVklNIGlzIGNvbXBpbGVkIHdpdGggfCttdWx0aV9ieXRlfCBhbmQgaXQgaXMgc2V0IGFuCisJOC1iaXQgZW5jb2RpbmcpIHRvIGZpbmQgdGhlIHByaW50IGNoYXJhY3RlciBlbmNvZGluZyBmaWxlLiAgSWYgVklNIGlzCisJdW5hYmxlIHRvIGZpbmQgYSBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZSB0aGVuIGl0IHdpbGwgdXNlIHRoZSAibGF0aW4xIgorCXByaW50IGNoYXJhY3RlciBlbmNvZGluZyBmaWxlLgorCisJV2hlbiAnZW5jb2RpbmcnIGlzIHNldCB0byBhIG11bHRpLWJ5dGUgZW5jb2RpbmcsIFZJTSB3aWxsIHRyeSB0bworCWNvbnZlcnQgY2hhcmFjdGVycyB0byB0aGUgcHJpbnRpbmcgZW5jb2RpbmcgZm9yIHByaW50aW5nIChpZgorCSdwcmludGVuY29kaW5nJyBpcyBlbXB0eSB0aGVuIHRoZSBjb252ZXJzaW9uIHdpbGwgYmUgdG8gbGF0aW4xKS4KKwlDb252ZXJzaW9uIHRvIGEgcHJpbnRpbmcgZW5jb2Rpbmcgb3RoZXIgdGhhbiBsYXRpbjEgd2lsbCByZXF1aXJlIFZJTQorCXRvIGJlIGNvbXBpbGVkIHdpdGggdGhlIHwraWNvbnZ8IGZlYXR1cmUuICBJZiBubyBjb252ZXJzaW9uIGlzCisJcG9zc2libGUgdGhlbiBwcmludGluZyB3aWxsIGZhaWwuICBBbnkgY2hhcmFjdGVycyB0aGF0IGNhbm5vdCBiZQorCWNvbnZlcnRlZCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdXBzaWRlIGRvd24gcXVlc3Rpb24gbWFya3MuCisKKwlGb3VyIHByaW50IGNoYXJhY3RlciBlbmNvZGluZyBmaWxlcyBhcmUgcHJvdmlkZWQgdG8gc3VwcG9ydCBkZWZhdWx0CisJTWFjLCBWTVMsIEhQVVgsIGFuZCBFQkNESUMgY2hhcmFjdGVyIGVuY29kaW5ncyBhbmQgYXJlIHVzZWQgYnkgZGVmYXVsdAorCW9uIHRoZXNlIHBsYXRmb3Jtcy4gIENvZGUgcGFnZSAxMjUyIHByaW50IGNoYXJhY3RlciBlbmNvZGluZyBpcyB1c2VkCisJYnkgZGVmYXVsdCBvbiBXaW5kb3dzIGFuZCBPUy8yIHBsYXRmb3Jtcy4KKworCisJCQkJCQkqJ3ByaW50ZXhwcicqIConcGV4cHInKgorJ3ByaW50ZXhwcicgJ3BleHByJwlTdHJpbmcJKGRlZmF1bHQ6IHNlZSBiZWxvdykKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcHJpbnRlcnwKKwkJCWFuZCB8K3Bvc3RzY3JpcHR8IGZlYXR1cmVzfQorCUV4cHJlc3Npb24gdGhhdCBpcyBldmFsdWF0ZWQgdG8gcHJpbnQgdGhlIFBvc3RTY3JpcHQgcHJvZHVjZWQgd2l0aAorCSI6aGFyZGNvcHkiLgorCVRoZSBmaWxlIG5hbWUgdG8gYmUgcHJpbnRlZCBpcyBpbiB8djpmbmFtZV9pbnwuCisJVGhlIGFyZ3VtZW50cyB0byB0aGUgIjpoYXJkY29weSIgY29tbWFuZCBhcmUgaW4gfHY6Y21kYXJnfC4KKwlUaGUgZXhwcmVzc2lvbiBtdXN0IHRha2UgY2FyZSBvZiBkZWxldGluZyB0aGUgZmlsZSBhZnRlciBwcmludGluZyBpdC4KKwlXaGVuIHRoZXJlIGlzIGFuIGVycm9yLCB0aGUgZXhwcmVzc2lvbiBtdXN0IHJldHVybiBhIG5vbi16ZXJvIG51bWJlci4KKwlJZiB0aGVyZSBpcyBubyBlcnJvciwgcmV0dXJuIHplcm8gb3IgYW4gZW1wdHkgc3RyaW5nLgorCVRoZSBkZWZhdWx0IGZvciBub24gTVMtV2luZG93cyBvciBWTVMgc3lzdGVtcyBpcyB0byBzaW1wbHkgdXNlICJscHIiCisJdG8gcHJpbnQgdGhlIGZpbGU6ID4KKworCSAgICBzeXN0ZW0oJ2xwcicgLiAoJnByaW50ZGV2aWNlID09ICcnID8gJycgOiAnIC1QJyAuICZwcmludGRldmljZSkKKwkJLiAnICcgLiB2OmZuYW1lX2luKSAuIGRlbGV0ZSh2OmZuYW1lX2luKSArIHY6c2hlbGxfZXJyb3IKKzwKKwlPbiBNUy1XaW5kb3dzIG1hY2hpbmVzIHRoZSBkZWZhdWx0IGlzIHRvIGNvcHkgdGhlIGZpbGUgdG8gdGhlCisJY3VycmVudGx5IHNwZWNpZmllZCBwcmludGRldmljZTogPgorCisJICAgIHN5c3RlbSgnY29weScgLiAnICcgLiB2OmZuYW1lX2luIC4gJyAiJyAuICZwcmludGRldmljZSAuICciJykKKwkJCS4gZGVsZXRlKHY6Zm5hbWVfaW4pCis8CisJT24gVk1TIG1hY2hpbmVzIHRoZSBkZWZhdWx0IGlzIHRvIHNlbmQgdGhlIGZpbGUgdG8gZWl0aGVyIHRoZSBkZWZhdWx0CisJb3IgY3VycmVudGx5IHNwZWNpZmllZCBwcmludGRldmljZTogPgorCisJICAgIHN5c3RlbSgncHJpbnQnIC4gKCZwcmludGRldmljZSA9PSAnJyA/ICcnIDogJyAvcXVldWU9JyAuCisJCQkmcHJpbnRkZXZpY2UpIC4gJyAnIC4gdjpmbmFtZV9pbikgLiBkZWxldGUodjpmbmFtZV9pbikKKzwKKwlJZiB5b3UgY2hhbmdlIHRoaXMgb3B0aW9uLCB1c2luZyBhIGZ1bmN0aW9uIGlzIGFuIGVhc3kgd2F5IHRvIGF2b2lkCisJaGF2aW5nIHRvIGVzY2FwZSBhbGwgdGhlIHNwYWNlcy4gIEV4YW1wbGU6ID4KKworCQk6c2V0IHByaW50ZXhwcj1QcmludEZpbGUodjpmbmFtZV9pbikKKwkJOmZ1bmN0aW9uIFByaW50RmlsZShmbmFtZSkKKwkJOiAgY2FsbCBzeXN0ZW0oImdob3N0dmlldyAiIC4gYTpmbmFtZSkKKwkJOiAgY2FsbCBkZWxldGUoYTpmbmFtZSkKKwkJOiAgcmV0dXJuIHY6c2hlbGxfZXJyb3IKKwkJOmVuZGZ1bmMKKworPAlCZSBhd2FyZSB0aGF0IHNvbWUgcHJpbnQgcHJvZ3JhbXMgcmV0dXJuIGNvbnRyb2wgYmVmb3JlIHRoZXkgaGF2ZSByZWFkCisJdGhlIGZpbGUuICBJZiB5b3UgZGVsZXRlIHRoZSBmaWxlIHRvbyBzb29uIGl0IHdpbGwgbm90IGJlIHByaW50ZWQuCisJVGhlc2UgcHJvZ3JhbXMgdXN1YWxseSBvZmZlciBhbiBvcHRpb24gdG8gaGF2ZSB0aGVtIHJlbW92ZSB0aGUgZmlsZQorCXdoZW4gcHJpbnRpbmcgaXMgZG9uZS4KKwkJCQkJCQkJKkUzNjUqCisJSWYgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbiBmYWlscyBvciBpdCByZXN1bHRzIGluIGEgbm9uLXplcm8gbnVtYmVyLAorCXlvdSBnZXQgYW4gZXJyb3IgbWVzc2FnZS4gIEluIHRoYXQgY2FzZSBWaW0gd2lsbCBkZWxldGUgdGhlCisJZmlsZS4gIEluIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBub24tTVMtV2luZG93cyBhIHRyaWNrIGlzIHVzZWQ6IEFkZGluZworCSJ2OnNoZWxsX2Vycm9yIiB3aWxsIHJlc3VsdCBpbiBhIG5vbi16ZXJvIG51bWJlciB3aGVuIHRoZSBzeXN0ZW0oKQorCWNhbGwgZmFpbHMuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ3ByaW50Zm9udCcqIConcGZuJyogKkU2MTMqCisncHJpbnRmb250JyAncGZuJwlzdHJpbmcJKGRlZmF1bHQgImNvdXJpZXIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtwcmludGVyfAorCQkJZmVhdHVyZX0KKwlUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBmb250IHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgfDpoYXJkY29weXwKKwljb21tYW5kJ3Mgb3V0cHV0LiAgSXQgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgJ2d1aWZvbnQnIG9wdGlvbiwKKwlleGNlcHQgdGhhdCBvbmx5IG9uZSBmb250IG1heSBiZSBuYW1lZCwgYW5kIHRoZSBzcGVjaWFsICJndWlmb250PSoiCisJc3ludGF4IGlzIG5vdCBhdmFpbGFibGUuCisJSW4gdGhlIFdpbjMyIEdVSSB2ZXJzaW9uIHRoaXMgc3BlY2lmaWVzIGEgZm9udCBuYW1lIHdpdGggaXRzIGV4dHJhCisJYXR0cmlidXRlcywgYXMgd2l0aCB0aGUgJ2d1aWZvbnQnIG9wdGlvbi4KKwlGb3Igb3RoZXIgc3lzdGVtcywgb25seSAiOmgxMSIgaXMgcmVjb2duaXplZCwgd2hlcmUgIjExIiBpcyB0aGUgcG9pbnQKKwlzaXplIG9mIHRoZSBmb250LiAgV2hlbiBvbWl0dGVkLCB0aGUgcG9pbnQgc2l6ZSBpcyAxMC4KKworCQkJCQkJKidwcmludGhlYWRlcicqIConcGhlYWRlcicqCisncHJpbnRoZWFkZXInICdwaGVhZGVyJyAgc3RyaW5nICAoZGVmYXVsdCAiJTwlZiVoJW0lPVBhZ2UgJU4iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtwcmludGVyfAorCQkJZmVhdHVyZX0KKwlUaGlzIGRlZmluZXMgdGhlIGZvcm1hdCBvZiB0aGUgaGVhZGVyIHByb2R1Y2VkIGluIHw6aGFyZGNvcHl8IG91dHB1dC4KKwlUaGUgb3B0aW9uIGlzIGRlZmluZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSAnc3RhdHVzbGluZScgb3B0aW9uLgorCUlmIFZpbSBoYXMgbm90IGJlZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtzdGF0dXNsaW5lfCBmZWF0dXJlLCB0aGlzCisJb3B0aW9uIGhhcyBubyBlZmZlY3QgYW5kIGEgc2ltcGxlIGRlZmF1bHQgaGVhZGVyIGlzIHVzZWQsIHdoaWNoIHNob3dzCisJdGhlIHBhZ2UgbnVtYmVyLgorCisJCQkJCQkqJ3ByaW50b3B0aW9ucycqIConcG9wdCcqCisncHJpbnRvcHRpb25zJyAncG9wdCcgc3RyaW5nIChkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB8K3ByaW50ZXJ8IGZlYXR1cmV9CisJVGhpcyBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zIHRoYXQgY29udHJvbCB0aGUgZm9ybWF0IG9mCisJdGhlIG91dHB1dCBvZiB8OmhhcmRjb3B5fDoKKworCSAgbGVmdDp7c3BlY30JCWxlZnQgbWFyZ2luIChkZWZhdWx0OiAxMHBjKQorCSAgcmlnaHQ6e3NwZWN9CQlyaWdodCBtYXJnaW4gKGRlZmF1bHQ6IDVwYykKKwkgIHRvcDp7c3BlY30JCXRvcCBtYXJnaW4gKGRlZmF1bHQ6IDVwYykKKwkgIGJvdHRvbTp7c3BlY30JCWJvdHRvbSBtYXJnaW4gKGRlZmF1bHQ6IDVwYykKKwkJCQl7c3BlY30gaXMgYSBudW1iZXIgZm9sbG93ZWQgYnkgImluIiBmb3IKKwkJCQlpbmNoZXMsICJwdCIgZm9yIHBvaW50cyAoMSBwb2ludCBpcyAxLzcyIG9mIGFuCisJCQkJaW5jaCksICJtbSIgZm9yIG1pbGxpbWV0ZXJzIG9yICJwYyIgZm9yIGEKKwkJCQlwZXJjZW50YWdlIG9mIHRoZSBtZWRpYSBzaXplLgorCQkJCVdlaXJkIGV4YW1wbGU6CisJCQkJICAgIGxlZnQ6MmluLHRvcDozMHB0LHJpZ2h0OjE2bW0sYm90dG9tOjNwYworCQkJCUlmIHRoZSB1bml0IGlzIG5vdCByZWNvZ25pemVkIHRoZXJlIGlzIG5vCisJCQkJZXJyb3IgYW5kIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHVzZWQuCisKKwkgIGhlYWRlcjp7bnJ9CQlOdW1iZXIgb2YgbGluZXMgdG8gcmVzZXJ2ZSBmb3IgdGhlIGhlYWRlci4KKwkJCQlPbmx5IHRoZSBmaXJzdCBsaW5lIGlzIGFjdHVhbGx5IGZpbGxlZCwgdGh1cworCQkJCXdoZW4ge25yfSBpcyAyIHRoZXJlIGlzIG9uZSBlbXB0eSBsaW5lLiAgVGhlCisJCQkJaGVhZGVyIGlzIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8KKwkJCQkncHJpbnRoZWFkZXInLgorCSAgaGVhZGVyOjAJCURvIG5vdCBwcmludCBhIGhlYWRlci4KKwkgIGhlYWRlcjoyICAoZGVmYXVsdCkJVXNlIHR3byBsaW5lcyBmb3IgdGhlIGhlYWRlcgorCisJICBzeW50YXg6bgkJRG8gbm90IHVzZSBzeW50YXggaGlnaGxpZ2h0aW5nLiAgVGhpcyBpcworCQkJCWZhc3RlciBhbmQgdGh1cyB1c2VmdWwgd2hlbiBwcmludGluZyBsYXJnZQorCQkJCWZpbGVzLgorCSAgc3ludGF4OnkJCURvIHN5bnRheCBoaWdobGlnaHRpbmcuCisJICBzeW50YXg6YSAgKGRlZmF1bHQpCVVzZSBzeW50YXggaGlnaGxpZ2h0aW5nIGlmIHRoZSBwcmludGVyIGFwcGVhcnMKKwkJCQl0byBiZSBhYmxlIHRvIHByaW50IGNvbG9yIG9yIGdyZXkuCisKKwkgIG51bWJlcjp5CQlJbmNsdWRlIGxpbmUgbnVtYmVycyBpbiB0aGUgcHJpbnRlZCBvdXRwdXQuCisJICBudW1iZXI6biAgKGRlZmF1bHQpCU5vIGxpbmUgbnVtYmVycy4KKworCSAgd3JhcDp5ICAgIChkZWZhdWx0KQlXcmFwIGxvbmcgbGluZXMuCisJICB3cmFwOm4JCVRydW5jYXRlIGxvbmcgbGluZXMuCisKKwkgIGR1cGxleDpvZmYJCVByaW50IG9uIG9uZSBzaWRlLgorCSAgZHVwbGV4OmxvbmcgKGRlZmF1bHQpCVByaW50IG9uIGJvdGggc2lkZXMgKHdoZW4gcG9zc2libGUpLCBiaW5kIG9uCisJCQkJbG9uZyBzaWRlLgorCSAgZHVwbGV4OnNob3J0CQlQcmludCBvbiBib3RoIHNpZGVzICh3aGVuIHBvc3NpYmxlKSwgYmluZCBvbgorCQkJCXNob3J0IHNpZGUuCisKKwkgIGNvbGxhdGU6eSAgKGRlZmF1bHQpCUNvbGxhdGluZzogMSAyIDMsIDEgMiAzLCAxIDIgMworCSAgY29sbGF0ZTpuCQlObyBjb2xsYXRpbmc6IDEgMSAxLCAyIDIgMiwgMyAzIDMKKworCSAgam9ic3BsaXQ6biAoZGVmYXVsdCkJRG8gYWxsIGNvcGllcyBpbiBvbmUgcHJpbnQgam9iCisJICBqb2JzcGxpdDp5CQlEbyBlYWNoIGNvcHkgYXMgYSBzZXBhcmF0ZSBwcmludCBqb2IuICBVc2VmdWwKKwkJCQl3aGVuIGRvaW5nIE4tdXAgcG9zdHByb2Nlc3NpbmcuCisKKwkgIHBvcnRyYWl0OnkgKGRlZmF1bHQpCU9yaWVudGF0aW9uIGlzIHBvcnRyYWl0LgorCSAgcG9ydHJhaXQ6bgkJT3JpZW50YXRpb24gaXMgbGFuZHNjYXBlLgorCQkJCQkJCSphNCogKmxldHRlcioKKwkgIHBhcGVyOkE0ICAgKGRlZmF1bHQpCVBhcGVyIHNpemU6IEE0CisJICBwYXBlcjp7bmFtZX0JCVBhcGVyIHNpemUgZnJvbSB0aGlzIHRhYmxlOgorCQkJCXtuYW1lfQkgICAgc2l6ZSBpbiBjbQkgICAgIHNpemUgaW4gaW5jaCB+CisJCQkJMTB4MTQJICAgIDI1LjQgIHggMzUuNTcgICAgMTAgICAgeCAxNAorCQkJCUEzCSAgICAyOS43ICB4IDQyCSAgICAgMTEuNjkgeCAxNi41NAorCQkJCUE0CSAgICAyMQkgIHggMjkuNyAgICAgIDguMjcgeCAxMS42OQorCQkJCUE1CSAgICAxNC44ICB4IDIxCSAgICAgIDUuODMgeCAgOC4yNworCQkJCUI0CSAgICAyNQkgIHggMzUuMyAgICAgMTAuMTIgeCAxNC4zMworCQkJCUI1CSAgICAxNy42ICB4IDI1CSAgICAgIDcuMTcgeCAxMC4xMgorCQkJCWV4ZWN1dGl2ZSAgIDE4LjQyIHggMjYuNjcgICAgIDcuMjUgeCAxMC41CisJCQkJZm9saW8JICAgIDIxCSAgeCAzMwkgICAgICA4LjI3IHggMTMKKwkJCQlsZWRnZXIJICAgIDQzLjEzIHggMjcuOTYgICAgMTcgICAgeCAxMQorCQkJCWxlZ2FsCSAgICAyMS41OSB4IDM1LjU3ICAgICA4LjUgIHggMTQKKwkJCQlsZXR0ZXIJICAgIDIxLjU5IHggMjcuOTYgICAgIDguNSAgeCAxMQorCQkJCXF1YXJ0bwkgICAgMjEuNTkgeCAyNy41ICAgICAgOC41ICB4IDEwLjgzCisJCQkJc3RhdGVtZW50ICAgMTMuOTcgeCAyMS41OSAgICAgNS41ICB4ICA4LjUKKwkJCQl0YWJsb2lkICAgICAyNy45NiB4IDQzLjEzICAgIDExICAgIHggMTcKKworCSAgZm9ybWZlZWQ6biAoZGVmYXVsdCkJVHJlYXQgZm9ybSBmZWVkIGNoYXJhY3RlcnMgKDB4MGMpIGFzIGEgbm9ybWFsCisJCQkJcHJpbnQgY2hhcmFjdGVyLgorCSAgZm9ybWZlZWQ6eQkJV2hlbiBhIGZvcm0gZmVlZCBjaGFyYWN0ZXIgaXMgZW5jb3VudGVyZWQsCisJCQkJY29udGludWUgcHJpbnRpbmcgb2YgdGhlIGN1cnJlbnQgbGluZSBhdCB0aGUKKwkJCQliZWdpbm5pbmcgb2YgdGhlIGZpcnN0IGxpbmUgb24gYSBuZXcgcGFnZS4KKworCVRoZSBpdGVtIGluZGljYXRlZCB3aXRoIChkZWZhdWx0KSBpcyB1c2VkIHdoZW4gdGhlIGl0ZW0gaXMgbm90CisJcHJlc2VudC4gIFRoZSB2YWx1ZXMgYXJlIG5vdCBhbHdheXMgdXNlZCwgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGEKKwlkaWFsb2cgdG8gc2VsZWN0IHRoZSBwcmludGVyIGFuZCBvcHRpb25zLgorCUV4YW1wbGU6ID4KKwkJOnNldCBwcmludG9wdGlvbnM9cGFwZXI6bGV0dGVyLGR1cGxleDpvZmYKKzwKKwkJCQkgICAqJ3JlYWRvbmx5JyogKidybycqIConbm9yZWFkb25seScqIConbm9ybycqCisncmVhZG9ubHknICdybycJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJSWYgb24sIHdyaXRlcyBmYWlsIHVubGVzcyB5b3UgdXNlIGEgJyEnLiAgUHJvdGVjdHMgeW91IGZyb20KKwlhY2NpZGVudGFsbHkgb3ZlcndyaXRpbmcgYSBmaWxlLiAgRGVmYXVsdCBvbiB3aGVuIFZpbSBpcyBzdGFydGVkCisJaW4gcmVhZC1vbmx5IG1vZGUgKCJ2aW0gLVIiKSBvciB3aGVuIHRoZSBleGVjdXRhYmxlIGlzIGNhbGxlZCAidmlldyIuCisJe25vdCBpbiBWaTp9ICBXaGVuIHVzaW5nIHRoZSAiOnZpZXciIGNvbW1hbmQgdGhlICdyZWFkb25seScgb3B0aW9uIGlzCisJc2V0IGZvciB0aGUgbmV3bHkgZWRpdGVkIGJ1ZmZlci4gIFdoZW4gdXNpbmcgIjp3ISIgdGhlICdyZWFkb25seScKKwlvcHRpb24gaXMgcmVzZXQgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlci4KKworCQkJCQkJKidyZW1hcCcqIConbm9yZW1hcCcqCisncmVtYXAnCQkJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCUFsbG93cyBmb3IgbWFwcGluZ3MgdG8gd29yayByZWN1cnNpdmVseS4gIElmIHlvdSBkbyBub3Qgd2FudCB0aGlzIGZvcgorCWEgc2luZ2xlIGVudHJ5LCB1c2UgdGhlIDpub3JlbWFwWyFdIGNvbW1hbmQuCisKKwkJCQkJCSoncmVwb3J0JyoKKydyZXBvcnQnCQludW1iZXIJKGRlZmF1bHQgMikKKwkJCWdsb2JhbAorCVRocmVzaG9sZCBmb3IgcmVwb3J0aW5nIG51bWJlciBvZiBsaW5lcyBjaGFuZ2VkLiAgV2hlbiB0aGUgbnVtYmVyIG9mCisJY2hhbmdlZCBsaW5lcyBpcyBtb3JlIHRoYW4gJ3JlcG9ydCcgYSBtZXNzYWdlIHdpbGwgYmUgZ2l2ZW4gZm9yIG1vc3QKKwkiOiIgY29tbWFuZHMuICBJZiB5b3Ugd2FudCBpdCBhbHdheXMsIHNldCAncmVwb3J0JyB0byAwLgorCUZvciB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kIHRoZSBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucyBpcyB1c2VkCisJaW5zdGVhZCBvZiB0aGUgbnVtYmVyIG9mIGxpbmVzLgorCisJCQkgKidyZXN0b3Jlc2NyZWVuJyogKidycycqIConbm9yZXN0b3Jlc2NyZWVuJyogKidub3JzJyoKKydyZXN0b3Jlc2NyZWVuJyAncnMnCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9ICB7b25seSBpbiBXaW5kb3dzIDk1L05UIGNvbnNvbGUgdmVyc2lvbn0KKwlXaGVuIHNldCwgdGhlIHNjcmVlbiBjb250ZW50cyBpcyByZXN0b3JlZCB3aGVuIGV4aXRpbmcgVmltLiAgVGhpcyBhbHNvCisJaGFwcGVucyB3aGVuIGV4ZWN1dGluZyBleHRlcm5hbCBjb21tYW5kcy4KKworCUZvciBub24tV2luZG93cyBWaW06IFlvdSBjYW4gc2V0IG9yIHJlc2V0IHRoZSAndF90aScgYW5kICd0X3RlJworCW9wdGlvbnMgaW4geW91ciAudmltcmMuICBUbyBkaXNhYmxlIHJlc3RvcmluZzoKKwkJc2V0IHRfdGk9IHRfdGU9CisJVG8gZW5hYmxlIHJlc3RvcmluZyAoZm9yIGFuIHh0ZXJtKToKKwkJc2V0IHRfdGk9Xls3Xltbcl5bWz80N2ggdF90ZT1eW1s/NDdsXls4CisJKFdoZXJlIF5bIGlzIGFuIDxFc2M+LCB0eXBlIENUUkwtViA8RXNjPiB0byBpbnNlcnQgaXQpCisKKwkJCQkqJ3JldmlucycqIConcmknKiAqJ25vcmV2aW5zJyogKidub3JpJyoKKydyZXZpbnMnICdyaScJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtyaWdodGxlZnR8CisJCQlmZWF0dXJlfQorCUluc2VydGluZyBjaGFyYWN0ZXJzIGluIEluc2VydCBtb2RlIHdpbGwgd29yayBiYWNrd2FyZHMuICBTZWUgInR5cGluZworCWJhY2t3YXJkcyIgfGlucy1yZXZlcnNlfC4gIFRoaXMgb3B0aW9uIGNhbiBiZSB0b2dnbGVkIHdpdGggdGhlIENUUkwtXworCWNvbW1hbmQgaW4gSW5zZXJ0IG1vZGUsIHdoZW4gJ2FsbG93cmV2aW5zJyBpcyBzZXQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgb3IgJ3Bhc3RlJyBpcyBzZXQuCisKKwkJCQkgKidyaWdodGxlZnQnKiAqJ3JsJyogKidub3JpZ2h0bGVmdCcqIConbm9ybCcqCisncmlnaHRsZWZ0JyAncmwnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtyaWdodGxlZnR8CisJCQlmZWF0dXJlfQorCVdoZW4gb24sIGRpc3BsYXkgb3JpZW50YXRpb24gYmVjb21lcyByaWdodC10by1sZWZ0LCBpLmUuLCBjaGFyYWN0ZXJzCisJdGhhdCBhcmUgc3RvcmVkIGluIHRoZSBmaWxlIGFwcGVhciBmcm9tIHRoZSByaWdodCB0byB0aGUgbGVmdC4KKwlVc2luZyB0aGlzIG9wdGlvbiwgaXQgaXMgcG9zc2libGUgdG8gZWRpdCBmaWxlcyBmb3IgbGFuZ3VhZ2VzIHRoYXQKKwlhcmUgd3JpdHRlbiBmcm9tIHRoZSByaWdodCB0byB0aGUgbGVmdCBzdWNoIGFzIEhlYnJldyBhbmQgQXJhYmljLgorCVRoaXMgb3B0aW9uIGlzIHBlciB3aW5kb3csIHNvIGl0IGlzIHBvc3NpYmxlIHRvIGVkaXQgbWl4ZWQgZmlsZXMKKwlzaW11bHRhbmVvdXNseSwgb3IgdG8gdmlldyB0aGUgc2FtZSBmaWxlIGluIGJvdGggd2F5cyAodGhpcyBpcworCXVzZWZ1bCB3aGVuZXZlciB5b3UgaGF2ZSBhIG1peGVkIHRleHQgZmlsZSB3aXRoIGJvdGggcmlnaHQtdG8tbGVmdAorCWFuZCBsZWZ0LXRvLXJpZ2h0IHN0cmluZ3Mgc28gdGhhdCBib3RoIHNldHMgYXJlIGRpc3BsYXllZCBwcm9wZXJseQorCWluIGRpZmZlcmVudCB3aW5kb3dzKS4gIEFsc28gc2VlIHxyaWxlZnQudHh0fC4KKworCQkJKidyaWdodGxlZnRjbWQnKiAqJ3JsYycqIConbm9yaWdodGxlZnRjbWQnKiAqJ25vcmxjJyoKKydyaWdodGxlZnRjbWQnICdybGMnCXN0cmluZwkoZGVmYXVsdCAic2VhcmNoIikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fAorCQkJZmVhdHVyZX0KKwlFYWNoIHdvcmQgaW4gdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgY29tbWFuZCBsaW5lIGVkaXRpbmcgdG8gd29yayBpbgorCXJpZ2h0LXRvLWxlZnQgbW9kZSBmb3IgYSBncm91cCBvZiBjb21tYW5kczoKKworCQlzZWFyY2gJCSIvIiBhbmQgIj8iIGNvbW1hbmRzCisKKwlUaGlzIGlzIHVzZWZ1bCBmb3IgbGFuZ3VhZ2VzIHN1Y2ggYXMgSGVicmV3LCBBcmFiaWMgYW5kIEZhcnNpLgorCVRoZSAncmlnaHRsZWZ0JyBvcHRpb24gbXVzdCBiZSBzZXQgZm9yICdyaWdodGxlZnRjbWQnIHRvIHRha2UgZWZmZWN0LgorCisJCQkJCSAqJ3J1bGVyJyogKidydScqIConbm9ydWxlcicqIConbm9ydScqCisncnVsZXInICdydScJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtjbWRsaW5lX2luZm98IGZlYXR1cmV9CisJU2hvdyB0aGUgbGluZSBhbmQgY29sdW1uIG51bWJlciBvZiB0aGUgY3Vyc29yIHBvc2l0aW9uLCBzZXBhcmF0ZWQgYnkgYQorCWNvbW1hLglXaGVuIHRoZXJlIGlzIHJvb20sIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheWVkCisJdGV4dCBpbiB0aGUgZmlsZSBpcyBzaG93biBvbiB0aGUgZmFyIHJpZ2h0OgorCQlUb3AJZmlyc3QgbGluZSBpcyB2aXNpYmxlCisJCUJvdAlsYXN0IGxpbmUgaXMgdmlzaWJsZQorCQlBbGwJZmlyc3QgYW5kIGxhc3QgbGluZSBhcmUgdmlzaWJsZQorCQk0NSUJcmVsYXRpdmUgcG9zaXRpb24gaW4gdGhlIGZpbGUKKwlJZiAncnVsZXJmb3JtYXQnIGlzIHNldCwgaXQgd2lsbCBkZXRlcm1pbmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBydWxlci4KKwlFYWNoIHdpbmRvdyBoYXMgaXRzIG93biBydWxlci4JSWYgYSB3aW5kb3cgaGFzIGEgc3RhdHVzIGxpbmUsIHRoZQorCXJ1bGVyIGlzIHNob3duIHRoZXJlLiAgT3RoZXJ3aXNlIGl0IGlzIHNob3duIGluIHRoZSBsYXN0IGxpbmUgb2YgdGhlCisJc2NyZWVuLiAgSWYgdGhlIHN0YXR1c2xpbmUgaXMgZ2l2ZW4gYnkgJ3N0YXR1c2xpbmUnIChpZS4gbm90IGVtcHR5KSwKKwl0aGlzIG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgJ3J1bGVyJyBhbmQgJ3J1bGVyZm9ybWF0JworCUlmIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBkaXNwbGF5ZWQgaXMgZGlmZmVyZW50IGZyb20gdGhlIG51bWJlciBvZgorCWJ5dGVzIGluIHRoZSB0ZXh0IChlLmcuLCBmb3IgYSBUQUIgb3IgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciksIGJvdGgKKwl0aGUgdGV4dCBjb2x1bW4gKGJ5dGUgbnVtYmVyKSBhbmQgdGhlIHNjcmVlbiBjb2x1bW4gYXJlIHNob3duLAorCXNlcGFyYXRlZCB3aXRoIGEgZGFzaC4KKwlGb3IgYW4gZW1wdHkgbGluZSAiMC0xIiBpcyBzaG93bi4KKwlGb3IgYW4gZW1wdHkgYnVmZmVyIHRoZSBsaW5lIG51bWJlciB3aWxsIGFsc28gYmUgemVybzogIjAsMC0xIi4KKwlUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuIHRoZSAncGFzdGUnIG9wdGlvbiBpcyBzZXQuCisJSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoZSBydWxlciBhbGwgdGhlIHRpbWUgYnV0IHdhbnQgdG8ga25vdyB3aGVyZQorCXlvdSBhcmUsIHVzZSAiZyBDVFJMLUciIHxnX0NUUkwtR3wuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ3J1bGVyZm9ybWF0JyogKidydWYnKgorJ3J1bGVyZm9ybWF0JyAncnVmJwlzdHJpbmcJKGRlZmF1bHQgZW1wdHkpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrc3RhdHVzbGluZXwKKwkJCWZlYXR1cmV9CisJV2hlbiB0aGlzIG9wdGlvbiBpcyBub3QgZW1wdHksIGl0IGRldGVybWluZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHJ1bGVyCisJc3RyaW5nLCBhcyBkaXNwbGF5ZWQgZm9yIHRoZSAncnVsZXInIG9wdGlvbi4KKwlUaGUgZm9ybWF0IG9mIHRoaXMgb3B0aW9uLCBpcyBsaWtlIHRoYXQgb2YgJ3N0YXR1c2xpbmUnLgorCVRoZSBkZWZhdWx0IHJ1bGVyIHdpZHRoIGlzIDE3IGNoYXJhY3RlcnMuICBUbyBtYWtlIHRoZSBydWxlciAxNQorCWNoYXJhY3RlcnMgd2lkZSwgcHV0ICIlMTUoIiBhdCB0aGUgc3RhcnQgYW5kICIlKSIgYXQgdGhlIGVuZC4KKwlFeGFtcGxlOiA+CisJCTpzZXQgcnVsZXJmb3JtYXQ9JTE1KCVjJVZcICVwJSUlKQorPAorCQkJCSoncnVudGltZXBhdGgnKiAqJ3J0cCcqICp2aW1maWxlcyoKKydydW50aW1lcGF0aCcgJ3J0cCcJc3RyaW5nCShkZWZhdWx0OgorCQkJCQlVbml4OiAiJEhPTUUvLnZpbSwKKwkJCQkJCSRWSU0vdmltZmlsZXMsCisJCQkJCQkkVklNUlVOVElNRSwKKwkJCQkJCSRWSU0vdmltZmlsZXMvYWZ0ZXIsCisJCQkJCQkkSE9NRS8udmltL2FmdGVyIgorCQkJCQlBbWlnYTogImhvbWU6dmltZmlsZXMsCisJCQkJCQkkVklNL3ZpbWZpbGVzLAorCQkJCQkJJFZJTVJVTlRJTUUsCisJCQkJCQkkVklNL3ZpbWZpbGVzL2FmdGVyLAorCQkJCQkJaG9tZTp2aW1maWxlcy9hZnRlciIKKwkJCQkJUEMsIE9TLzI6ICIkSE9NRS92aW1maWxlcywKKwkJCQkJCSRWSU0vdmltZmlsZXMsCisJCQkJCQkkVklNUlVOVElNRSwKKwkJCQkJCSRWSU0vdmltZmlsZXMvYWZ0ZXIsCisJCQkJCQkkSE9NRS92aW1maWxlcy9hZnRlciIKKwkJCQkJTWFjaW50b3NoOiAiJFZJTTp2aW1maWxlcywKKwkJCQkJCSRWSU1SVU5USU1FLAorCQkJCQkJJFZJTTp2aW1maWxlczphZnRlciIKKwkJCQkJUklTQy1PUzogIkNob2ljZXM6dmltZmlsZXMsCisJCQkJCQkkVklNUlVOVElNRSwKKwkJCQkJCUNob2ljZXM6dmltZmlsZXMvYWZ0ZXIiCisJCQkJCVZNUzogInN5cyRsb2dpbjp2aW1maWxlcywKKwkJCQkJCSRWSU0vdmltZmlsZXMsCisJCQkJCQkkVklNUlVOVElNRSwKKwkJCQkJCSRWSU0vdmltZmlsZXMvYWZ0ZXIsCisJCQkJCQlzeXMkbG9naW46dmltZmlsZXMvYWZ0ZXIiCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgd2hpY2ggd2lsbCBiZSBzZWFyY2hlZCBmb3IgcnVudGltZQorCWZpbGVzOgorCSAgZmlsZXR5cGUudmltCWZpbGV0eXBlcyBieSBmaWxlIG5hbWUgfG5ldy1maWxldHlwZXwKKwkgIHNjcmlwdHMudmltCWZpbGV0eXBlcyBieSBmaWxlIGNvbnRlbnRzIHxuZXctZmlsZXR5cGUtc2NyaXB0c3wKKwkgIGNvbG9ycy8JY29sb3Igc2NoZW1lIGZpbGVzIHw6Y29sb3JzY2hlbWV8CisJICBjb21waWxlci8JY29tcGlsZXIgZmlsZXMgfDpjb21waWxlcnwKKwkgIGRvYy8JCWRvY3VtZW50YXRpb24gfHdyaXRlLWxvY2FsLWhlbHB8CisJICBmdHBsdWdpbi8JZmlsZXR5cGUgcGx1Z2lucyB8d3JpdGUtZmlsZXR5cGUtcGx1Z2lufAorCSAgaW5kZW50LwlpbmRlbnQgc2NyaXB0cyB8aW5kZW50LWV4cHJlc3Npb258CisJICBrZXltYXAvCWtleSBtYXBwaW5nIGZpbGVzIHxtYnl0ZS1rZXltYXB8CisJICBsYW5nLwkJbWVudSB0cmFuc2xhdGlvbnMgfDptZW51dHJhbnN8CisJICBtZW51LnZpbQlHVUkgbWVudXMgfG1lbnUudmltfAorCSAgcGx1Z2luLwlwbHVnaW4gc2NyaXB0cyB8d3JpdGUtcGx1Z2lufAorCSAgcHJpbnQvCWZpbGVzIGZvciBwcmludGluZyB8cG9zdHNjcmlwdC1wcmludC1lbmNvZGluZ3wKKwkgIHN5bnRheC8Jc3ludGF4IGZpbGVzIHxteXN5bnRheGZpbGV8CisJICB0dXRvci8JZmlsZXMgZm9yIHZpbXR1dG9yIHx0dXRvcnwKKworCUFuZCBhbnkgb3RoZXIgZmlsZSBzZWFyY2hlZCBmb3Igd2l0aCB0aGUgfDpydW50aW1lfCBjb21tYW5kLgorCisJVGhlIGRlZmF1bHRzIGZvciBtb3N0IHN5c3RlbXMgYXJlIHNldHVwIHRvIHNlYXJjaCBmaXZlIGxvY2F0aW9uczoKKwkxLiBJbiB5b3VyIGhvbWUgZGlyZWN0b3J5LCBmb3IgeW91ciBwZXJzb25hbCBwcmVmZXJlbmNlcy4KKwkyLiBJbiBhIHN5c3RlbS13aWRlIFZpbSBkaXJlY3RvcnksIGZvciBwcmVmZXJlbmNlcyBmcm9tIHRoZSBzeXN0ZW0KKwkgICBhZG1pbmlzdHJhdG9yLgorCTMuIEluICRWSU1SVU5USU1FLCBmb3IgZmlsZXMgZGlzdHJpYnV0ZWQgd2l0aCBWaW0uCisJCQkJCQkJKmFmdGVyLWRpcmVjdG9yeSoKKwk0LiBJbiB0aGUgImFmdGVyIiBkaXJlY3RvcnkgaW4gdGhlIHN5c3RlbS13aWRlIFZpbSBkaXJlY3RvcnkuICBUaGlzIGlzCisJICAgZm9yIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byBvdmVycnVsZSBvciBhZGQgdG8gdGhlIGRpc3RyaWJ1dGVkCisJICAgZGVmYXVsdHMgKHJhcmVseSBuZWVkZWQpCisJNS4gSW4gdGhlICJhZnRlciIgZGlyZWN0b3J5IGluIHlvdXIgaG9tZSBkaXJlY3RvcnkuICBUaGlzIGlzIGZvcgorCSAgIHBlcnNvbmFsIHByZWZlcmVuY2VzIHRvIG92ZXJydWxlIG9yIGFkZCB0byB0aGUgZGlzdHJpYnV0ZWQgZGVmYXVsdHMKKwkgICBvciBzeXN0ZW0td2lkZSBzZXR0aW5ncyAocmFyZWx5IG5lZWRlZCkuCisKKwlOb3RlIHRoYXQsIHVubGlrZSAncGF0aCcsIG5vIHdpbGRjYXJkcyBsaWtlICIqKiIgYXJlIGFsbG93ZWQuICBOb3JtYWwKKwl3aWxkY2FyZHMgYXJlIGFsbG93ZWQsIGJ1dCBjYW4gc2lnbmlmaWNhbnRseSBzbG93IGRvd24gc2VhcmNoaW5nIGZvcgorCXJ1bnRpbWUgZmlsZXMuCUZvciBzcGVlZCwgdXNlIGFzIGZldyBpdGVtcyBhcyBwb3NzaWJsZSBhbmQgYXZvaWQKKwl3aWxkY2FyZHMuCisJU2VlIHw6cnVudGltZXwuCisJRXhhbXBsZTogPgorCQk6c2V0IHJ1bnRpbWVwYXRoPX4vdmltcnVudGltZSwvbXlncm91cC92aW0sJFZJTVJVTlRJTUUKKzwJVGhpcyB3aWxsIHVzZSB0aGUgZGlyZWN0b3J5ICJ+L3ZpbXJ1bnRpbWUiIGZpcnN0IChjb250YWluaW5nIHlvdXIKKwlwZXJzb25hbCBWaW0gcnVudGltZSBmaWxlcyksIHRoZW4gIi9teWdyb3VwL3ZpbSIgKHNoYXJlZCBiZXR3ZWVuIGEKKwlncm91cCBvZiBwZW9wbGUpIGFuZCBmaW5hbGx5ICIkVklNUlVOVElNRSIgKHRoZSBkaXN0cmlidXRlZCBydW50aW1lCisJZmlsZXMpLgorCVlvdSBwcm9iYWJseSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgJFZJTVJVTlRJTUUgc29tZXdoZXJlLCB0byB1c2UgdGhlCisJZGlzdHJpYnV0ZWQgcnVudGltZSBmaWxlcy4gIFlvdSBjYW4gcHV0IGEgZGlyZWN0b3J5IGJlZm9yZSAkVklNUlVOVElNRQorCXRvIGZpbmQgZmlsZXMgd2hpY2ggcmVwbGFjZSBhIGRpc3RyaWJ1dGVkIHJ1bnRpbWUgZmlsZXMuICBZb3UgY2FuIHB1dAorCWEgZGlyZWN0b3J5IGFmdGVyICRWSU1SVU5USU1FIHRvIGZpbmQgZmlsZXMgd2hpY2ggYWRkIHRvIGRpc3RyaWJ1dGVkCisJcnVudGltZSBmaWxlcy4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonc2Nyb2xsJyogKidzY3InKgorJ3Njcm9sbCcgJ3NjcicJCW51bWJlcgkoZGVmYXVsdDogaGFsZiB0aGUgd2luZG93IGhlaWdodCkKKwkJCWxvY2FsIHRvIHdpbmRvdworCU51bWJlciBvZiBsaW5lcyB0byBzY3JvbGwgd2l0aCBDVFJMLVUgYW5kIENUUkwtRCBjb21tYW5kcy4gIFdpbGwgYmUKKwlzZXQgdG8gaGFsZiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSB3aW5kb3cgd2hlbiB0aGUgd2luZG93IHNpemUKKwljaGFuZ2VzLiAgSWYgeW91IGdpdmUgYSBjb3VudCB0byB0aGUgQ1RSTC1VIG9yIENUUkwtRCBjb21tYW5kIGl0IHdpbGwKKwliZSB1c2VkIGFzIHRoZSBuZXcgdmFsdWUgZm9yICdzY3JvbGwnLglSZXNldCB0byBoYWxmIHRoZSB3aW5kb3cKKwloZWlnaHQgd2l0aCAiOnNldCBzY3JvbGw9MCIuICAge1ZpIGlzIGEgYml0IGRpZmZlcmVudDogJ3Njcm9sbCcgZ2l2ZXMKKwl0aGUgbnVtYmVyIG9mIHNjcmVlbiBsaW5lcyBpbnN0ZWFkIG9mIGZpbGUgbGluZXMsIG1ha2VzIGEgZGlmZmVyZW5jZQorCXdoZW4gbGluZXMgd3JhcH0KKworCQkJKidzY3JvbGxiaW5kJyogKidzY2InKiAqJ25vc2Nyb2xsYmluZCcqIConbm9zY2InKgorJ3Njcm9sbGJpbmQnICdzY2InCWJvb2xlYW4gIChkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtzY3JvbGxiaW5kfAorCQkJZmVhdHVyZX0KKwlTZWUgYWxzbyB8c2Nyb2xsLWJpbmRpbmd8LiAgV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBjdXJyZW50CisJd2luZG93IHNjcm9sbHMgYXMgb3RoZXIgc2Nyb2xsYmluZCB3aW5kb3dzICh3aW5kb3dzIHRoYXQgYWxzbyBoYXZlCisJdGhpcyBvcHRpb24gc2V0KSBzY3JvbGwuICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgZm9yIHZpZXdpbmcgdGhlCisJZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gdmVyc2lvbnMgb2YgYSBmaWxlLCBzZWUgJ2RpZmYnLgorCVNlZSB8J3Njcm9sbG9wdCd8IGZvciBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIGhvdyB0aGlzIG9wdGlvbiBzaG91bGQgYmUKKwlpbnRlcnByZXRlZC4KKwlUaGlzIG9wdGlvbiBpcyBtb3N0bHkgcmVzZXQgd2hlbiBzcGxpdHRpbmcgYSB3aW5kb3cgdG8gZWRpdCBhbm90aGVyCisJZmlsZS4gIFRoaXMgbWVhbnMgdGhhdCAiOnNwbGl0IHwgZWRpdCBmaWxlIiByZXN1bHRzIGluIHR3byB3aW5kb3dzCisJd2l0aCBzY3JvbGwtYmluZGluZywgYnV0ICI6c3BsaXQgZmlsZSIgZG9lcyBub3QuCisKKwkJCQkJCSonc2Nyb2xsanVtcCcqIConc2onKgorJ3Njcm9sbGp1bXAnICdzaicJbnVtYmVyCShkZWZhdWx0IDEpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTWluaW1hbCBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsIHdoZW4gdGhlIGN1cnNvciBnZXRzIG9mZiB0aGUKKwlzY3JlZW4gKGUuZy4sIHdpdGggImoiKS4gIE5vdCB1c2VkIGZvciBzY3JvbGwgY29tbWFuZHMgKGUuZy4sIENUUkwtRSwKKwlDVFJMLUQpLiAgVXNlZnVsIGlmIHlvdXIgdGVybWluYWwgc2Nyb2xscyB2ZXJ5IHNsb3dseS4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gMSB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonc2Nyb2xsb2ZmJyogKidzbycqCisnc2Nyb2xsb2ZmJyAnc28nCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU1pbmltYWwgbnVtYmVyIG9mIHNjcmVlbiBsaW5lcyB0byBrZWVwIGFib3ZlIGFuZCBiZWxvdyB0aGUgY3Vyc29yLgorCVRoaXMgd2lsbCBtYWtlIHNvbWUgY29udGV4dCB2aXNpYmxlIGFyb3VuZCB3aGVyZSB5b3UgYXJlIHdvcmtpbmcuICBJZgorCXlvdSBzZXQgaXQgdG8gYSB2ZXJ5IGxhcmdlIHZhbHVlICg5OTkpIHRoZSBjdXJzb3IgbGluZSB3aWxsIGFsd2F5cyBiZQorCWluIHRoZSBtaWRkbGUgb2YgdGhlIHdpbmRvdyAoZXhjZXB0IGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGZpbGUgb3IKKwl3aGVuIGxvbmcgbGluZXMgd3JhcCkuCisJRm9yIHNjcm9sbGluZyBob3Jpem9udGFsbHkgc2VlICdzaWRlc2Nyb2xsb2ZmJy4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gMCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonc2Nyb2xsb3B0JyogKidzYm8nKgorJ3Njcm9sbG9wdCcgJ3NibycJc3RyaW5nCShkZWZhdWx0ICJ2ZXIsanVtcCIpCisJCQlnbG9iYWwKKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtzY3JvbGxiaW5kfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJVGhpcyBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHdvcmRzIHRoYXQgc3BlY2lmaWVzIGhvdworCSdzY3JvbGxiaW5kJyB3aW5kb3dzIHNob3VsZCBiZWhhdmUuCisJVGhlIGZvbGxvd2luZyB3b3JkcyBhcmUgYXZhaWxhYmxlOgorCSAgICB2ZXIJCUJpbmQgdmVydGljYWwgc2Nyb2xsaW5nIGZvciAnc2Nyb2xsYmluZCcgd2luZG93cworCSAgICBob3IJCUJpbmQgaG9yaXpvbnRhbCBzY3JvbGxpbmcgZm9yICdzY3JvbGxiaW5kJyB3aW5kb3dzCisJICAgIGp1bXAJQXBwbGllcyB0byB0aGUgb2Zmc2V0IGJldHdlZW4gdHdvIHdpbmRvd3MgZm9yIHZlcnRpY2FsCisJCQlzY3JvbGxpbmcuICBUaGlzIG9mZnNldCBpcyB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgZmlyc3QKKwkJCWRpc3BsYXllZCBsaW5lIG9mIHRoZSBib3VuZCB3aW5kb3dzLiAgV2hlbiBtb3ZpbmcKKwkJCWFyb3VuZCBpbiBhIHdpbmRvdywgYW5vdGhlciAnc2Nyb2xsYmluZCcgd2luZG93IG1heQorCQkJcmVhY2ggYSBwb3NpdGlvbiBiZWZvcmUgdGhlIHN0YXJ0IG9yIGFmdGVyIHRoZSBlbmQgb2YKKwkJCXRoZSBidWZmZXIuICBUaGUgb2Zmc2V0IGlzIG5vdCBjaGFuZ2VkIHRob3VnaCwgd2hlbgorCQkJbW92aW5nIGJhY2sgdGhlICdzY3JvbGxiaW5kJyB3aW5kb3cgd2lsbCB0cnkgdG8gc2Nyb2xsCisJCQl0byB0aGUgZGVzaXJlZCBwb3NpdGlvbiB3aGVuIHBvc3NpYmxlLgorCQkJV2hlbiBub3cgbWFraW5nIHRoYXQgd2luZG93IHRoZSBjdXJyZW50IG9uZSwgdHdvCisJCQl0aGluZ3MgY2FuIGJlIGRvbmUgd2l0aCB0aGUgcmVsYXRpdmUgb2Zmc2V0OgorCQkJMS4gV2hlbiAianVtcCIgaXMgbm90IGluY2x1ZGVkLCB0aGUgcmVsYXRpdmUgb2Zmc2V0IGlzCisJCQkgICBhZGp1c3RlZCBmb3IgdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiB0aGUgbmV3IGN1cnJlbnQKKwkJCSAgIHdpbmRvdy4gIFdoZW4gZ29pbmcgYmFjayB0byB0aGUgb3RoZXIgd2luZG93LCB0aGUKKwkJCSAgIHRoZSBuZXcgcmVsYXRpdmUgb2Zmc2V0IHdpbGwgYmUgdXNlZC4KKwkJCTIuIFdoZW4gImp1bXAiIGlzIGluY2x1ZGVkLCB0aGUgb3RoZXIgd2luZG93cyBhcmUKKwkJCSAgIHNjcm9sbGVkIHRvIGtlZXAgdGhlIHNhbWUgcmVsYXRpdmUgb2Zmc2V0LiAgV2hlbgorCQkJICAgZ29pbmcgYmFjayB0byB0aGUgb3RoZXIgd2luZG93LCBpdCBzdGlsbCB1c2VzIHRoZQorCQkJICAgc2FtZSByZWxhdGl2ZSBvZmZzZXQuCisJQWxzbyBzZWUgfHNjcm9sbC1iaW5kaW5nfC4KKworCQkJCQkJKidzZWN0aW9ucycqIConc2VjdCcqCisnc2VjdGlvbnMnICdzZWN0JwlzdHJpbmcJKGRlZmF1bHQgIlNITkhIIEhVbmhzaCIpCisJCQlnbG9iYWwKKwlTcGVjaWZpZXMgdGhlIG5yb2ZmIG1hY3JvcyB0aGF0IHNlcGFyYXRlIHNlY3Rpb25zLiAgVGhlc2UgYXJlIHBhaXJzIG9mCisJdHdvIGxldHRlcnMgKFNlZSB8b2JqZWN0LW1vdGlvbnN8KS4gIFRoZSBkZWZhdWx0IG1ha2VzIGEgc2VjdGlvbiBzdGFydAorCWF0IHRoZSBucm9mZiBtYWNyb3MgIi5TSCIsICIuTkgiLCAiLkgiLCAiLkhVIiwgIi5uaCIgYW5kICIuc2giLgorCisJCQkJCQkqJ3NlY3VyZScqIConbm9zZWN1cmUnKiAqRTUyMyoKKydzZWN1cmUnCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG9uLCAiOmF1dG9jbWQiLCBzaGVsbCBhbmQgd3JpdGUgY29tbWFuZHMgYXJlIG5vdCBhbGxvd2VkIGluCisJIi52aW1yYyIgYW5kICIuZXhyYyIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBtYXAgY29tbWFuZHMgYXJlCisJZGlzcGxheWVkLiAgU3dpdGNoIGl0IG9mZiBvbmx5IGlmIHlvdSBrbm93IHRoYXQgeW91IHdpbGwgbm90IHJ1biBpbnRvCisJcHJvYmxlbXMsIG9yIHdoZW4gdGhlICdleHJjJyBvcHRpb24gaXMgb2ZmLiAgT24gVW5peCB0aGlzIG9wdGlvbiBpcworCW9ubHkgdXNlZCBpZiB0aGUgIi52aW1yYyIgb3IgIi5leHJjIiBpcyBub3Qgb3duZWQgYnkgeW91LiAgVGhpcyBjYW4gYmUKKwlkYW5nZXJvdXMgaWYgdGhlIHN5c3RlbXMgYWxsb3dzIHVzZXJzIHRvIGRvIGEgImNob3duIi4JWW91IGJldHRlciBzZXQKKwknc2VjdXJlJyBhdCB0aGUgZW5kIG9mIHlvdXIgfi8udmltcmMgdGhlbi4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonc2VsZWN0aW9uJyogKidzZWwnKgorJ3NlbGVjdGlvbicgJ3NlbCcJc3RyaW5nCShkZWZhdWx0ICJpbmNsdXNpdmUiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBzZWxlY3Rpb24uICBJdCBpcyBvbmx5IHVzZWQKKwlpbiBWaXN1YWwgYW5kIFNlbGVjdCBtb2RlLgorCVBvc3NpYmxlIHZhbHVlczoKKwkgICB2YWx1ZQlwYXN0IGxpbmUgICAgIGluY2x1c2l2ZSB+CisJICAgb2xkCQkgICBubwkJeWVzCisJICAgaW5jbHVzaXZlCSAgIHllcwkJeWVzCisJICAgZXhjbHVzaXZlCSAgIHllcwkJbm8KKwkicGFzdCBsaW5lIiBtZWFucyB0aGF0IHRoZSBjdXJzb3IgaXMgYWxsb3dlZCB0byBiZSBwb3NpdGlvbmVkIG9uZQorCWNoYXJhY3RlciBwYXN0IHRoZSBsaW5lLgorCSJpbmNsdXNpdmUiIG1lYW5zIHRoYXQgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBzZWxlY3Rpb24gaXMgaW5jbHVkZWQKKwlpbiBhbiBvcGVyYXRpb24uICBGb3IgZXhhbXBsZSwgd2hlbiAieCIgaXMgdXNlZCB0byBkZWxldGUgdGhlCisJc2VsZWN0aW9uLgorCU5vdGUgdGhhdCB3aGVuICJleGNsdXNpdmUiIGlzIHVzZWQgYW5kIHNlbGVjdGluZyBmcm9tIHRoZSBlbmQKKwliYWNrd2FyZHMsIHlvdSBjYW5ub3QgaW5jbHVkZSB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lLCB3aGVuCisJc3RhcnRpbmcgaW4gTm9ybWFsIG1vZGUgYW5kICd2aXJ0dWFsZWRpdCcgZW1wdHkuCisKKwlUaGUgJ3NlbGVjdGlvbicgb3B0aW9uIGlzIHNldCBieSB0aGUgfDpiZWhhdmV8IGNvbW1hbmQuCisKKwkJCQkJCSonc2VsZWN0bW9kZScqIConc2xtJyoKKydzZWxlY3Rtb2RlJyAnc2xtJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHdvcmRzLCB3aGljaCBzcGVjaWZpZXMgd2hlbiB0byBzdGFydAorCVNlbGVjdCBtb2RlIGluc3RlYWQgb2YgVmlzdWFsIG1vZGUsIHdoZW4gYSBzZWxlY3Rpb24gaXMgc3RhcnRlZC4KKwlQb3NzaWJsZSB2YWx1ZXM6CisJICAgbW91c2UJd2hlbiB1c2luZyB0aGUgbW91c2UKKwkgICBrZXkJCXdoZW4gdXNpbmcgc2hpZnRlZCBzcGVjaWFsIGtleXMKKwkgICBjbWQJCXdoZW4gdXNpbmcgInYiLCAiViIgb3IgQ1RSTC1WCisJU2VlIHxTZWxlY3QtbW9kZXwuCisJVGhlICdzZWxlY3Rtb2RlJyBvcHRpb24gaXMgc2V0IGJ5IHRoZSB8OmJlaGF2ZXwgY29tbWFuZC4KKworCQkJCQkJKidzZXNzaW9ub3B0aW9ucycqIConc3NvcCcqCisnc2Vzc2lvbm9wdGlvbnMnICdzc29wJwlzdHJpbmcJKGRlZmF1bHQ6ICJibGFuayxidWZmZXJzLGN1cmRpcixmb2xkcywKKwkJCQkJCQloZWxwLG9wdGlvbnMsd2luc2l6ZSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICtta3Nlc3Npb24KKwkJCWZlYXR1cmV9CisJQ2hhbmdlcyB0aGUgZWZmZWN0IG9mIHRoZSB8Om1rc2Vzc2lvbnwgY29tbWFuZC4gIEl0IGlzIGEgY29tbWEKKwlzZXBhcmF0ZWQgbGlzdCBvZiB3b3Jkcy4gIEVhY2ggd29yZCBlbmFibGVzIHNhdmluZyBhbmQgcmVzdG9yaW5nCisJc29tZXRoaW5nOgorCSAgIHdvcmQJCXNhdmUgYW5kIHJlc3RvcmUgfgorCSAgIGJsYW5rCWVtcHR5IHdpbmRvd3MKKwkgICBidWZmZXJzCWhpZGRlbiBhbmQgdW5sb2FkZWQgYnVmZmVycywgbm90IGp1c3QgdGhvc2UgaW4gd2luZG93cworCSAgIGN1cmRpcgl0aGUgY3VycmVudCBkaXJlY3RvcnkKKwkgICBmb2xkcwltYW51YWxseSBjcmVhdGVkIGZvbGRzLCBvcGVuZWQvY2xvc2VkIGZvbGRzIGFuZCBsb2NhbAorCQkJZm9sZCBvcHRpb25zCisJICAgZ2xvYmFscwlnbG9iYWwgdmFyaWFibGVzIHRoYXQgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyCisJCQlhbmQgY29udGFpbiBhdCBsZWFzdCBvbmUgbG93ZXJjYXNlIGxldHRlci4KKwkgICBoZWxwCQl0aGUgaGVscCB3aW5kb3cKKwkgICBsb2NhbG9wdGlvbnMJb3B0aW9ucyBhbmQgbWFwcGluZ3MgbG9jYWwgdG8gYSB3aW5kb3cgb3IgYnVmZmVyIChub3QKKwkJCWdsb2JhbCB2YWx1ZXMgZm9yIGxvY2FsIG9wdGlvbnMpCisJICAgb3B0aW9ucwlhbGwgb3B0aW9ucyBhbmQgbWFwcGluZ3MgKGFsc28gZ2xvYmFsIHZhbHVlcyBmb3IgbG9jYWwKKwkJCW9wdGlvbnMpCisJICAgcmVzaXplCXNpemUgb2YgdGhlIFZpbSB3aW5kb3c6ICdsaW5lcycgYW5kICdjb2x1bW5zJworCSAgIHNlc2Rpcgl0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBzZXNzaW9uIGZpbGUgaXMgbG9jYXRlZAorCQkJd2lsbCBiZWNvbWUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICh1c2VmdWwgd2l0aAorCQkJcHJvamVjdHMgYWNjZXNzZWQgb3ZlciBhIG5ldHdvcmsgZnJvbSBkaWZmZXJlbnQKKwkJCXN5c3RlbXMpCisJICAgc2xhc2gJYmFja3NsYXNoZXMgaW4gZmlsZSBuYW1lcyByZXBsYWNlZCB3aXRoIGZvcndhcmQKKwkJCXNsYXNoZXMKKwkgICB1bml4CQl3aXRoIFVuaXggZW5kLW9mLWxpbmUgZm9ybWF0IChzaW5nbGUgPE5MPiksIGV2ZW4gd2hlbgorCQkJb24gV2luZG93cyBvciBET1MKKwkgICB3aW5wb3MJcG9zaXRpb24gb2YgdGhlIHdob2xlIFZpbSB3aW5kb3cKKwkgICB3aW5zaXplCXdpbmRvdyBzaXplcworCisJRG9uJ3QgaW5jbHVkZSBib3RoICJjdXJkaXIiIGFuZCAic2VzZGlyIi4KKwlXaGVuICJjdXJkaXIiIG5vciAic2VzZGlyIiBpcyBpbmNsdWRlZCwgZmlsZSBuYW1lcyBhcmUgc3RvcmVkIHdpdGgKKwlhYnNvbHV0ZSBwYXRocy4KKwkic2xhc2giIGFuZCAidW5peCIgYXJlIHVzZWZ1bCBvbiBXaW5kb3dzIHdoZW4gc2hhcmluZyBzZXNzaW9uIGZpbGVzCisJd2l0aCBVbml4LiAgVGhlIFVuaXggdmVyc2lvbiBvZiBWaW0gY2Fubm90IHNvdXJjZSBkb3MgZm9ybWF0IHNjcmlwdHMsCisJYnV0IHRoZSBXaW5kb3dzIHZlcnNpb24gb2YgVmltIGNhbiBzb3VyY2UgdW5peCBmb3JtYXQgc2NyaXB0cy4KKworCQkJCQkJKidzaGVsbCcqIConc2gnKiAqRTkxKgorJ3NoZWxsJyAnc2gnCQlzdHJpbmcJKGRlZmF1bHQgJFNIRUxMIG9yICJzaCIsCisJCQkJCU1TLURPUyBhbmQgV2luMzI6ICJjb21tYW5kLmNvbSIgb3IKKwkJCQkJImNtZC5leGUiLCBPUy8yOiAiY21kIikKKwkJCWdsb2JhbAorCU5hbWUgb2YgdGhlIHNoZWxsIHRvIHVzZSBmb3IgISBhbmQgOiEgY29tbWFuZHMuICBXaGVuIGNoYW5naW5nIHRoZQorCXZhbHVlIGFsc28gY2hlY2sgdGhlc2Ugb3B0aW9uczogJ3NoZWxsdHlwZScsICdzaGVsbHBpcGUnLCAnc2hlbGxzbGFzaCcKKwknc2hlbGxyZWRpcicsICdzaGVsbHF1b3RlJywgJ3NoZWxseHF1b3RlJyBhbmQgJ3NoZWxsY21kZmxhZycuCisJSXQgaXMgYWxsb3dlZCB0byBnaXZlIGFuIGFyZ3VtZW50IHRvIHRoZSBjb21tYW5kLCBlLmcuCSJjc2ggLWYiLgorCVNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMuCisJRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LgorCUlmIHRoZSBuYW1lIG9mIHRoZSBzaGVsbCBjb250YWlucyBhIHNwYWNlLCB5b3UgbWlnaHQgbmVlZCB0byBlbmNsb3NlCisJaXQgaW4gcXVvdGVzLiAgRXhhbXBsZTogPgorCQk6c2V0IHNoZWxsPVwiYzpccHJvZ3JhbVwgZmlsZXNcdW5peFxzaC5leGVcIlwgLWYKKzwJTm90ZSB0aGUgYmFja3NsYXNoIGJlZm9yZSBlYWNoIHF1b3RlICh0byBhdm9pZCBzdGFydGluZyBhIGNvbW1lbnQpIGFuZAorCWVhY2ggc3BhY2UgKHRvIGF2b2lkIGVuZGluZyB0aGUgb3B0aW9uIHZhbHVlKS4JQWxzbyBub3RlIHRoYXQgdGhlCisJIi1mIiBpcyBub3QgaW5zaWRlIHRoZSBxdW90ZXMsIGJlY2F1c2UgaXQgaXMgbm90IHBhcnQgb2YgdGhlIGNvbW1hbmQKKwluYW1lLiAgQW5kIFZpbSBhdXRvbWFnaWNhbGx5IHJlY29nbml6ZXMgdGhlIGJhY2tzbGFzaGVzIHRoYXQgYXJlIHBhdGgKKwlzZXBhcmF0b3JzLgorCUZvciBEb3MgMzIgYml0cyAoREpHUFApLCB5b3UgY2FuIHNldCB0aGUgJERKU1lTRkxBR1MgZW52aXJvbm1lbnQKKwl2YXJpYWJsZSB0byBjaGFuZ2UgdGhlIHdheSBleHRlcm5hbCBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuICBTZWUgdGhlCisJbGliYy5pbmYgZmlsZSBvZiBESkdQUC4KKwlVbmRlciBNUy1XaW5kb3dzLCB3aGVuIHRoZSBleGVjdXRhYmxlIGVuZHMgaW4gIi5jb20iIGl0IG11c3QgYmUKKwlpbmNsdWRlZC4gIFRodXMgc2V0dGluZyB0aGUgc2hlbGwgdG8gImNvbW1hbmQuY29tIiBvciAiNGRvcy5jb20iCisJd29ya3MsIGJ1dCAiY29tbWFuZCIgYW5kICI0ZG9zIiBkbyBub3Qgd29yayBmb3IgYWxsIGNvbW1hbmRzIChlLmcuLAorCWZpbHRlcmluZykuCisJRm9yIHVua25vd24gcmVhc29ucywgd2hlbiB1c2luZyAiNGRvcy5jb20iIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcworCWNoYW5nZWQgdG8gIkM6XCIuICBUbyBhdm9pZCB0aGlzIHNldCAnc2hlbGwnIGxpa2UgdGhpczogPgorCQk6c2V0IHNoZWxsPWNvbW1hbmQuY29tXCAvY1wgNGRvcworPAlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonc2hlbGxjbWRmbGFnJyogKidzaGNmJyoKKydzaGVsbGNtZGZsYWcnICdzaGNmJwlzdHJpbmcJKGRlZmF1bHQ6ICItYyIsIE1TLURPUyBhbmQgV2luMzIsIHdoZW4gJ3NoZWxsJworCQkJCQlkb2VzIG5vdCBjb250YWluICJzaCIgc29tZXdoZXJlOiAiL2MiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUZsYWcgcGFzc2VkIHRvIHRoZSBzaGVsbCB0byBleGVjdXRlICIhIiBhbmQgIjohIiBjb21tYW5kczsgZS5nLiwKKwkiYmFzaC5leGUgLWMgbHMiIG9yICJjb21tYW5kLmNvbSAvYyBkaXIiLiAgRm9yIHRoZSBNUy1ET1MtbGlrZQorCXN5c3RlbXMsIHRoZSBkZWZhdWx0IGlzIHNldCBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mICdzaGVsbCcsIHRvCisJcmVkdWNlIHRoZSBuZWVkIHRvIHNldCB0aGlzIG9wdGlvbiBieSB0aGUgdXNlci4gIEl0J3Mgbm90IHVzZWQgZm9yCisJT1MvMiAoRU1YIGZpZ3VyZXMgdGhpcyBvdXQgaXRzZWxmKS4gIFNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQKKwlpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4gIFNlZSB8ZG9zLXNoZWxsfC4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonc2hlbGxwaXBlJyogKidzcCcqCisnc2hlbGxwaXBlJyAnc3AnCXN0cmluZwkoZGVmYXVsdCAiPiIsICJ8IHRlZSIsICJ8JiB0ZWUiIG9yICIyPiYxfCB0ZWUiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3F1aWNrZml4fAorCQkJZmVhdHVyZX0KKwlTdHJpbmcgdG8gYmUgdXNlZCB0byBwdXQgdGhlIG91dHB1dCBvZiB0aGUgIjptYWtlIiBjb21tYW5kIGluIHRoZQorCWVycm9yIGZpbGUuICBTZWUgYWxzbyB8Om1ha2VfbWFrZXByZ3wuCVNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQKKwlpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4KKwlUaGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgY2FuIGJlIHJlcHJlc2VudGVkIGJ5ICIlcyIgaWYgbmVjZXNzYXJ5CisJKHRoZSBmaWxlIG5hbWUgaXMgYXBwZW5kZWQgYXV0b21hdGljYWxseSBpZiBubyAlcyBhcHBlYXJzIGluIHRoZSB2YWx1ZQorCW9mIHRoaXMgb3B0aW9uKS4KKwlGb3IgdGhlIEFtaWdhIGFuZCBNUy1ET1MgdGhlIGRlZmF1bHQgaXMgIj4iLiAgVGhlIG91dHB1dCBpcyBkaXJlY3RseQorCXNhdmVkIGluIGEgZmlsZSBhbmQgbm90IGVjaG9lZCB0byB0aGUgc2NyZWVuLgorCUZvciBVbml4IHRoZSBkZWZhdWx0IGl0ICJ8IHRlZSIuICBUaGUgc3Rkb3V0IG9mIHRoZSBjb21waWxlciBpcyBzYXZlZAorCWluIGEgZmlsZSBhbmQgZWNob2VkIHRvIHRoZSBzY3JlZW4uICBJZiB0aGUgJ3NoZWxsJyBvcHRpb24gaXMgImNzaCIgb3IKKwkidGNzaCIgYWZ0ZXIgaW5pdGlhbGl6YXRpb25zLCB0aGUgZGVmYXVsdCBiZWNvbWVzICJ8JiB0ZWUiLiAgSWYgdGhlCisJJ3NoZWxsJyBvcHRpb24gaXMgInNoIiwgImtzaCIsICJ6c2giIG9yICJiYXNoIiB0aGUgZGVmYXVsdCBiZWNvbWVzCisJIjI+JjF8IHRlZSIuICBUaGlzIG1lYW5zIHRoYXQgc3RkZXJyIGlzIGFsc28gaW5jbHVkZWQuCisJVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgb3B0aW9uIGlzIGRvbmUgYWZ0ZXIgcmVhZGluZyB0aGUgIi52aW1yYyIKKwlhbmQgdGhlIG90aGVyIGluaXRpYWxpemF0aW9ucywgc28gdGhhdCB3aGVuIHRoZSAnc2hlbGwnIG9wdGlvbiBpcyBzZXQKKwl0aGVyZSwgdGhlICdzaGVsbHBpcGUnIG9wdGlvbiBjaGFuZ2VzIGF1dG9tYXRpY2FsbHksIHVubGVzcyBpdCB3YXMKKwlleHBsaWNpdGx5IHNldCBiZWZvcmUuCisJV2hlbiAnc2hlbGxwaXBlJyBpcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCBubyByZWRpcmVjdGlvbiBvZiB0aGUKKwkiOm1ha2UiIG91dHB1dCB3aWxsIGJlIGRvbmUuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgdXNlIGEgJ21ha2VwcmcnCisJdGhhdCB3cml0ZXMgdG8gJ21ha2VlZicgYnkgaXRzZWxmLiAgSWYgeW91IHdhbnQgbm8gcGlwaW5nLCBidXQgZG8KKwl3YW50IHRvIGluY2x1ZGUgdGhlICdtYWtlZWYnLCBzZXQgJ3NoZWxscGlwZScgdG8gYSBzaW5nbGUgc3BhY2UuCisJRG9uJ3QgZm9yZ2V0IHRvIHByZWNlZGUgdGhlIHNwYWNlIHdpdGggYSBiYWNrc2xhc2g6ICI6c2V0IHNwPVwgIi4KKwlJbiB0aGUgZnV0dXJlIHBpcGVzIG1heSBiZSB1c2VkIGZvciBmaWx0ZXJpbmcgYW5kIHRoaXMgb3B0aW9uIHdpbGwKKwliZWNvbWUgb2Jzb2xldGUgKGF0IGxlYXN0IGZvciBVbml4KS4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonc2hlbGxxdW90ZScqIConc2hxJyoKKydzaGVsbHF1b3RlJyAnc2hxJwlzdHJpbmcJKGRlZmF1bHQ6ICIiOyBNUy1ET1MgYW5kIFdpbjMyLCB3aGVuICdzaGVsbCcKKwkJCQkJY29udGFpbnMgInNoIiBzb21ld2hlcmU6ICJcIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJUXVvdGluZyBjaGFyYWN0ZXIocyksIHB1dCBhcm91bmQgdGhlIGNvbW1hbmQgcGFzc2VkIHRvIHRoZSBzaGVsbCwgZm9yCisJdGhlICIhIiBhbmQgIjohIiBjb21tYW5kcy4gIFRoZSByZWRpcmVjdGlvbiBpcyBrZXB0IG91dHNpZGUgb2YgdGhlCisJcXVvdGluZy4gIFNlZSAnc2hlbGx4cXVvdGUnIHRvIGluY2x1ZGUgdGhlIHJlZGlyZWN0aW9uLiAgSXQncworCXByb2JhYmx5IG5vdCB1c2VmdWwgdG8gc2V0IGJvdGggb3B0aW9ucy4KKwlUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LiAgT25seSBrbm93biB0byBiZSB1c2VmdWwgZm9yCisJdGhpcmQtcGFydHkgc2hlbGxzIG9uIE1TLURPUy1saWtlIHN5c3RlbXMsIHN1Y2ggYXMgdGhlIE1LUyBLb3JuIFNoZWxsCisJb3IgYmFzaCwgd2hlcmUgaXQgc2hvdWxkIGJlICJcIiIuICBUaGUgZGVmYXVsdCBpcyBhZGp1c3RlZCBhY2NvcmRpbmcKKwl0aGUgdmFsdWUgb2YgJ3NoZWxsJywgdG8gcmVkdWNlIHRoZSBuZWVkIHRvIHNldCB0aGlzIG9wdGlvbiBieSB0aGUKKwl1c2VyLiAgU2VlIHxkb3Mtc2hlbGx8LgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidzaGVsbHJlZGlyJyogKidzcnInKgorJ3NoZWxscmVkaXInICdzcnInCXN0cmluZwkoZGVmYXVsdCAiPiIsICI+JiIgb3IgIj4lcyAyPiYxIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlTdHJpbmcgdG8gYmUgdXNlZCB0byBwdXQgdGhlIG91dHB1dCBvZiBhIGZpbHRlciBjb21tYW5kIGluIGEgdGVtcG9yYXJ5CisJZmlsZS4gIFNlZSBhbHNvIHw6IXwuICBTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZyBzcGFjZXMKKwlhbmQgYmFja3NsYXNoZXMuCisJVGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIGNhbiBiZSByZXByZXNlbnRlZCBieSAiJXMiIGlmIG5lY2Vzc2FyeQorCSh0aGUgZmlsZSBuYW1lIGlzIGFwcGVuZGVkIGF1dG9tYXRpY2FsbHkgaWYgbm8gJXMgYXBwZWFycyBpbiB0aGUgdmFsdWUKKwlvZiB0aGlzIG9wdGlvbikuCisJVGhlIGRlZmF1bHQgaXMgIj4iLiAgRm9yIFVuaXgsIGlmIHRoZSAnc2hlbGwnIG9wdGlvbiBpcyAiY3NoIiwgInRjc2giCisJb3IgInpzaCIgZHVyaW5nIGluaXRpYWxpemF0aW9ucywgdGhlIGRlZmF1bHQgYmVjb21lcyAiPiYiLiAgSWYgdGhlCisJJ3NoZWxsJyBvcHRpb24gaXMgInNoIiwgImtzaCIgb3IgImJhc2giIHRoZSBkZWZhdWx0IGJlY29tZXMKKwkiPiVzIDI+JjEiLiAgVGhpcyBtZWFucyB0aGF0IHN0ZGVyciBpcyBhbHNvIGluY2x1ZGVkLgorCUZvciBXaW4zMiwgdGhlIFVuaXggY2hlY2tzIGFyZSBkb25lIGFuZCBhZGRpdGlvbmFsbHkgImNtZCIgaXMgY2hlY2tlZAorCWZvciwgd2hpY2ggbWFrZXMgdGhlIGRlZmF1bHQgIj4lcyAyPiYxIi4gIEFsc28sIHRoZSBzYW1lIG5hbWVzIHdpdGgKKwkiLmV4ZSIgYXBwZW5kZWQgYXJlIGNoZWNrZWQgZm9yLgorCVRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIG9wdGlvbiBpcyBkb25lIGFmdGVyIHJlYWRpbmcgdGhlICIudmltcmMiCisJYW5kIHRoZSBvdGhlciBpbml0aWFsaXphdGlvbnMsIHNvIHRoYXQgd2hlbiB0aGUgJ3NoZWxsJyBvcHRpb24gaXMgc2V0CisJdGhlcmUsIHRoZSAnc2hlbGxyZWRpcicgb3B0aW9uIGNoYW5nZXMgYXV0b21hdGljYWxseSB1bmxlc3MgaXQgd2FzCisJZXhwbGljaXRseSBzZXQgYmVmb3JlLgorCUluIHRoZSBmdXR1cmUgcGlwZXMgbWF5IGJlIHVzZWQgZm9yIGZpbHRlcmluZyBhbmQgdGhpcyBvcHRpb24gd2lsbAorCWJlY29tZSBvYnNvbGV0ZSAoYXQgbGVhc3QgZm9yIFVuaXgpLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJKidzaGVsbHNsYXNoJyogKidzc2wnKiAqJ25vc2hlbGxzbGFzaCcqIConbm9zc2wnKgorJ3NoZWxsc2xhc2gnICdzc2wnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfSB7b25seSBmb3IgTVNET1MsIE1TLVdpbmRvd3MgYW5kIE9TLzJ9CisJV2hlbiBzZXQsIGEgZm9yd2FyZCBzbGFzaCBpcyB1c2VkIHdoZW4gZXhwYW5kaW5nIGZpbGUgbmFtZXMuICBUaGlzIGlzCisJdXNlZnVsIHdoZW4gYSBVbml4LWxpa2Ugc2hlbGwgaXMgdXNlZCBpbnN0ZWFkIG9mIGNvbW1hbmQuY29tIG9yCisJY21kLmV4ZS4gIEJhY2t3YXJkIHNsYXNoZXMgY2FuIHN0aWxsIGJlIHR5cGVkLCBidXQgdGhleSBhcmUgY2hhbmdlZCB0bworCWZvcndhcmQgc2xhc2hlcyBieSBWaW0uCisJTm90ZSB0aGF0IHNldHRpbmcgb3IgcmVzZXR0aW5nIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgZm9yIHNvbWUKKwlleGlzdGluZyBmaWxlIG5hbWVzLCB0aHVzIHRoaXMgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgb3BlbmluZworCWFueSBmaWxlIGZvciBiZXN0IHJlc3VsdHMuICBUaGlzIG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorCSdzaGVsbHNsYXNoJyBvbmx5IHdvcmtzIHdoZW4gYSBiYWNrc2xhc2ggY2FuIGJlIHVzZWQgYXMgYSBwYXRoCisJc2VwYXJhdG9yLiAgVG8gdGVzdCBpZiB0aGlzIGlzIHNvIHVzZTogPgorCQlpZiBleGlzdHMoJytzaGVsbHNsYXNoJykKKzwKKwkJCQkJCSonc2hlbGx0eXBlJyogKidzdCcqCisnc2hlbGx0eXBlJyAnc3QnCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfSB7b25seSBmb3IgdGhlIEFtaWdhfQorCU9uIHRoZSBBbWlnYSB0aGlzIG9wdGlvbiBpbmZsdWVuY2VzIHRoZSB3YXkgaG93IHRoZSBjb21tYW5kcyB3b3JrCisJd2hpY2ggdXNlIGEgc2hlbGwuCisJMCBhbmQgMTogYWx3YXlzIHVzZSB0aGUgc2hlbGwKKwkyIGFuZCAzOiB1c2UgdGhlIHNoZWxsIG9ubHkgdG8gZmlsdGVyIGxpbmVzCisJNCBhbmQgNTogdXNlIHNoZWxsIG9ubHkgZm9yICc6c2gnIGNvbW1hbmQKKwlXaGVuIG5vdCB1c2luZyB0aGUgc2hlbGwsIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIGRpcmVjdGx5LgorCisJMCBhbmQgMjogdXNlICJzaGVsbCAnc2hlbGxjbWRmbGFnJyBjbWQiIHRvIHN0YXJ0IGV4dGVybmFsIGNvbW1hbmRzCisJMSBhbmQgMzogdXNlICJzaGVsbCBjbWQiIHRvIHN0YXJ0IGV4dGVybmFsIGNvbW1hbmRzCisKKwkJCQkJCSonc2hlbGx4cXVvdGUnKiAqJ3N4cScqCisnc2hlbGx4cXVvdGUnICdzeHEnCXN0cmluZwkoZGVmYXVsdDogIiI7CisJCQkJCWZvciBXaW4zMiwgd2hlbiAnc2hlbGwnIGNvbnRhaW5zICJzaCIKKwkJCQkJc29tZXdoZXJlOiAiXCIiCisJCQkJCWZvciBVbml4LCB3aGVuIHVzaW5nIHN5c3RlbSgpOiAiXCIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVF1b3RpbmcgY2hhcmFjdGVyKHMpLCBwdXQgYXJvdW5kIHRoZSBjb21tYW5kIHBhc3NlZCB0byB0aGUgc2hlbGwsIGZvcgorCXRoZSAiISIgYW5kICI6ISIgY29tbWFuZHMuICBJbmNsdWRlcyB0aGUgcmVkaXJlY3Rpb24uICBTZWUKKwknc2hlbGxxdW90ZScgdG8gZXhjbHVkZSB0aGUgcmVkaXJlY3Rpb24uICBJdCdzIHByb2JhYmx5IG5vdCB1c2VmdWwKKwl0byBzZXQgYm90aCBvcHRpb25zLgorCVRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuICBLbm93biB0byBiZSB1c2VmdWwgZm9yCisJdGhpcmQtcGFydHkgc2hlbGxzIHdoZW4gdXNpbmcgdGhlIFdpbjMyIHZlcnNpb24sIHN1Y2ggYXMgdGhlIE1LUyBLb3JuCisJU2hlbGwgb3IgYmFzaCwgd2hlcmUgaXQgc2hvdWxkIGJlICJcIiIuICBUaGUgZGVmYXVsdCBpcyBhZGp1c3RlZAorCWFjY29yZGluZyB0aGUgdmFsdWUgb2YgJ3NoZWxsJywgdG8gcmVkdWNlIHRoZSBuZWVkIHRvIHNldCB0aGlzIG9wdGlvbgorCWJ5IHRoZSB1c2VyLiAgU2VlIHxkb3Mtc2hlbGx8LgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJKidzaGlmdHJvdW5kJyogKidzcicqIConbm9zaGlmdHJvdW5kJyogKidub3NyJyoKKydzaGlmdHJvdW5kJyAnc3InCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVJvdW5kIGluZGVudCB0byBtdWx0aXBsZSBvZiAnc2hpZnR3aWR0aCcuICBBcHBsaWVzIHRvID4gYW5kIDwKKwljb21tYW5kcy4gIENUUkwtVCBhbmQgQ1RSTC1EIGluIEluc2VydCBtb2RlIGFsd2F5cyByb3VuZCB0aGUgaW5kZW50IHRvCisJYSBtdWx0aXBsZSBvZiAnc2hpZnR3aWR0aCcgKHRoaXMgaXMgVmkgY29tcGF0aWJsZSkuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ3NoaWZ0d2lkdGgnKiAqJ3N3JyoKKydzaGlmdHdpZHRoJyAnc3cnCW51bWJlcgkoZGVmYXVsdCA4KQorCQkJbG9jYWwgdG8gYnVmZmVyCisJTnVtYmVyIG9mIHNwYWNlcyB0byB1c2UgZm9yIGVhY2ggc3RlcCBvZiAoYXV0bylpbmRlbnQuCVVzZWQgZm9yCisJfCdjaW5kZW50J3wsIHw+PnwsIHw8PHwsIGV0Yy4KKworCQkJCQkJKidzaG9ydG1lc3MnKiAqJ3NobScqCisnc2hvcnRtZXNzJyAnc2htJwlzdHJpbmcJKFZpbSBkZWZhdWx0ICJmaWxueHRUb08iLCBWaSBkZWZhdWx0OiAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBoZWxwcyB0byBhdm9pZCBhbGwgdGhlIHxoaXQtZW50ZXJ8IHByb21wdHMgY2F1c2VkIGJ5IGZpbGUKKwltZXNzYWdlcywgZm9yIGV4YW1wbGUgIHdpdGggQ1RSTC1HLCBhbmQgdG8gYXZvaWQgc29tZSBvdGhlciBtZXNzYWdlcy4KKwlJdCBpcyBhIGxpc3Qgb2YgZmxhZ3M6CisJIGZsYWcJbWVhbmluZyB3aGVuIHByZXNlbnQJfgorCSAgZgl1c2UgIigzIG9mIDUpIiBpbnN0ZWFkIG9mICIoZmlsZSAzIG9mIDUpIgorCSAgaQl1c2UgIltub2VvbF0iIGluc3RlYWQgb2YgIltJbmNvbXBsZXRlIGxhc3QgbGluZV0iCisJICBsCXVzZSAiOTk5TCwgODg4QyIgaW5zdGVhZCBvZiAiOTk5IGxpbmVzLCA4ODggY2hhcmFjdGVycyIKKwkgIG0JdXNlICJbK10iIGluc3RlYWQgb2YgIltNb2RpZmllZF0iCisJICBuCXVzZSAiW05ld10iIGluc3RlYWQgb2YgIltOZXcgRmlsZV0iCisJICByCXVzZSAiW1JPXSIgaW5zdGVhZCBvZiAiW3JlYWRvbmx5XSIKKwkgIHcJdXNlICJbd10iIGluc3RlYWQgb2YgIndyaXR0ZW4iIGZvciBmaWxlIHdyaXRlIG1lc3NhZ2UKKwkJYW5kICJbYV0iIGluc3RlYWQgb2YgImFwcGVuZGVkIiBmb3IgJzp3ID4+IGZpbGUnIGNvbW1hbmQKKwkgIHgJdXNlICJbZG9zXSIgaW5zdGVhZCBvZiAiW2RvcyBmb3JtYXRdIiwgIlt1bml4XSIgaW5zdGVhZCBvZgorCQkiW3VuaXggZm9ybWF0XSIgYW5kICJbbWFjXSIgaW5zdGVhZCBvZiAiW21hYyBmb3JtYXRdIi4KKwkgIGEJYWxsIG9mIHRoZSBhYm92ZSBhYmJyZXZpYXRpb25zCisKKwkgIG8Jb3ZlcndyaXRlIG1lc3NhZ2UgZm9yIHdyaXRpbmcgYSBmaWxlIHdpdGggc3Vic2VxdWVudCBtZXNzYWdlCisJCWZvciByZWFkaW5nIGEgZmlsZSAodXNlZnVsIGZvciAiOnduIiBvciB3aGVuICdhdXRvd3JpdGUnIG9uKQorCSAgTwltZXNzYWdlIGZvciByZWFkaW5nIGEgZmlsZSBvdmVyd3JpdGVzIGFueSBwcmV2aW91cyBtZXNzYWdlLgorCQlBbHNvIGZvciBxdWlja2ZpeCBtZXNzYWdlIChlLmcuLCAiOmNuIikuCisJICBzCWRvbid0IGdpdmUgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIgb3IgInNlYXJjaAorCQloaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIgbWVzc2FnZXMKKwkgIHQJdHJ1bmNhdGUgZmlsZSBtZXNzYWdlIGF0IHRoZSBzdGFydCBpZiBpdCBpcyB0b28gbG9uZyB0byBmaXQKKwkJb24gdGhlIGNvbW1hbmQtbGluZSwgIjwiIHdpbGwgYXBwZWFyIGluIHRoZSBsZWZ0IG1vc3QgY29sdW1uLgorCQlJZ25vcmVkIGluIEV4IG1vZGUuCisJICBUCXRydW5jYXRlIG90aGVyIG1lc3NhZ2VzIGluIHRoZSBtaWRkbGUgaWYgdGhleSBhcmUgdG9vIGxvbmcgdG8KKwkJZml0IG9uIHRoZSBjb21tYW5kIGxpbmUuICIuLi4iIHdpbGwgYXBwZWFyIGluIHRoZSBtaWRkbGUuCisJCUlnbm9yZWQgaW4gRXggbW9kZS4KKwkgIFcJZG9uJ3QgZ2l2ZSAid3JpdHRlbiIgb3IgIlt3XSIgd2hlbiB3cml0aW5nIGEgZmlsZQorCSAgQQlkb24ndCBnaXZlIHRoZSAiQVRURU5USU9OIiBtZXNzYWdlIHdoZW4gYW4gZXhpc3Rpbmcgc3dhcCBmaWxlCisJCWlzIGZvdW5kLgorCSAgSQlkb24ndCBnaXZlIHRoZSBpbnRybyBtZXNzYWdlIHdoZW4gc3RhcnRpbmcgVmltIHw6aW50cm98LgorCisJVGhpcyBnaXZlcyB5b3UgdGhlIG9wcG9ydHVuaXR5IHRvIGF2b2lkIHRoYXQgYSBjaGFuZ2UgYmV0d2VlbiBidWZmZXJzCisJcmVxdWlyZXMgeW91IHRvIGhpdCA8RW50ZXI+LCBidXQgc3RpbGwgZ2l2ZXMgYXMgdXNlZnVsIGEgbWVzc2FnZSBhcworCXBvc3NpYmxlIGZvciB0aGUgc3BhY2UgYXZhaWxhYmxlLiAgVG8gZ2V0IHRoZSB3aG9sZSBtZXNzYWdlIHRoYXQgeW91CisJd291bGQgaGF2ZSBnb3Qgd2l0aCAnc2htJyBlbXB0eSwgdXNlICI6ZmlsZSEiCisJVXNlZnVsIHZhbHVlczoKKwkgICAgc2htPQlObyBhYmJyZXZpYXRpb24gb2YgbWVzc2FnZS4KKwkgICAgc2htPWEJQWJicmV2aWF0aW9uLCBidXQgbm8gbG9zcyBvZiBpbmZvcm1hdGlvbi4KKwkgICAgc2htPWF0CUFiYnJldmlhdGlvbiwgYW5kIHRydW5jYXRlIG1lc3NhZ2Ugd2hlbiBuZWNlc3NhcnkuCisKKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCSAqJ3Nob3J0bmFtZScqIConc24nKiAqJ25vc2hvcnRuYW1lJyogKidub3NuJyoKKydzaG9ydG5hbWUnICdzbicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVmksIG5vdCBpbiBNUy1ET1MgdmVyc2lvbnN9CisJRmlsZW5hbWVzIGFyZSBhc3N1bWVkIHRvIGJlIDggY2hhcmFjdGVycyBwbHVzIG9uZSBleHRlbnNpb24gb2YgMworCWNoYXJhY3RlcnMuICBNdWx0aXBsZSBkb3RzIGluIGZpbGUgbmFtZXMgYXJlIG5vdCBhbGxvd2VkLiAgV2hlbiB0aGlzCisJb3B0aW9uIGlzIG9uLCBkb3RzIGluIGZpbGUgbmFtZXMgYXJlIHJlcGxhY2VkIHdpdGggdW5kZXJzY29yZXMgd2hlbgorCWFkZGluZyBhbiBleHRlbnNpb24gKCIufiIgb3IgIi5zd3AiKS4gIFRoaXMgb3B0aW9uIGlzIG5vdCBhdmFpbGFibGUKKwlmb3IgTVMtRE9TLCBiZWNhdXNlIHRoZW4gaXQgd291bGQgYWx3YXlzIGJlIG9uLiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsCisJd2hlbiBlZGl0aW5nIGZpbGVzIG9uIGFuIE1TLURPUyBjb21wYXRpYmxlIGZpbGVzeXN0ZW0sIGUuZy4sIG1lc3N5ZG9zCisJb3IgY3Jvc3Nkb3MuICBXaGVuIHJ1bm5pbmcgdGhlIFdpbjMyIEdVSSB2ZXJzaW9uIHVuZGVyIFdpbjMycywgdGhpcworCW9wdGlvbiBpcyBhbHdheXMgb24gYnkgZGVmYXVsdC4KKworCQkJCQkJKidzaG93YnJlYWsnKiAqJ3NicicqICpFNTk1KgorJ3Nob3dicmVhaycgJ3NicicJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSAgfCtsaW5lYnJlYWt8CisJCQlmZWF0dXJlfQorCVN0cmluZyB0byBwdXQgYXQgdGhlIHN0YXJ0IG9mIGxpbmVzIHRoYXQgaGF2ZSBiZWVuIHdyYXBwZWQuICBVc2VmdWwKKwl2YWx1ZXMgYXJlICI+ICIgb3IgIisrKyAiLgorCU9ubHkgcHJpbnRhYmxlIHNpbmdsZS1jZWxsIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQsIGV4Y2x1ZGluZyA8VGFiPiBhbmQKKwljb21tYSAoaW4gYSBmdXR1cmUgdmVyc2lvbiB0aGUgY29tbWEgbWlnaHQgYmUgdXNlZCB0byBzZXBhcmF0ZSB0aGUKKwlwYXJ0IHRoYXQgaXMgc2hvd24gYXQgdGhlIGVuZCBhbmQgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSkuCisJVGhlIGNoYXJhY3RlcnMgYXJlIGhpZ2hsaWdodGVkIGFjY29yZGluZyB0byB0aGUgJ0AnIGZsYWcgaW4KKwknaGlnaGxpZ2h0Jy4KKwlOb3RlIHRoYXQgdGFicyBhZnRlciB0aGUgc2hvd2JyZWFrIHdpbGwgYmUgZGlzcGxheWVkIGRpZmZlcmVudGx5LgorCUlmIHlvdSB3YW50IHRoZSAnc2hvd2JyZWFrJyB0byBhcHBlYXIgaW4gYmV0d2VlbiBsaW5lIG51bWJlcnMsIGFkZCB0aGUKKwkibiIgZmxhZyB0byAnY3BvcHRpb25zJy4KKworCQkJCSAgICAgKidzaG93Y21kJyogKidzYycqIConbm9zaG93Y21kJyogKidub3NjJyoKKydzaG93Y21kJyAnc2MnCQlib29sZWFuCShWaW0gZGVmYXVsdDogb24sIG9mZiBmb3IgVW5peCwgVmkgZGVmYXVsdDoKKwkJCQkgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtjbWRsaW5lX2luZm98IGZlYXR1cmV9CisJU2hvdyAocGFydGlhbCkgY29tbWFuZCBpbiBzdGF0dXMgbGluZS4JU2V0IHRoaXMgb3B0aW9uIG9mZiBpZiB5b3VyCisJdGVybWluYWwgaXMgc2xvdy4KKwlJbiBWaXN1YWwgbW9kZSB0aGUgc2l6ZSBvZiB0aGUgc2VsZWN0ZWQgYXJlYSBpcyBzaG93bjoKKwktIFdoZW4gc2VsZWN0aW5nIGNoYXJhY3RlcnMgd2l0aGluIGEgbGluZSwgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzLgorCS0gV2hlbiBzZWxlY3RpbmcgbW9yZSB0aGFuIG9uZSBsaW5lLCB0aGUgbnVtYmVyIG9mIGxpbmVzLgorCS0gV2hlbiBzZWxlY3RpbmcgYSBibG9jaywgdGhlIHNpemUgaW4gc2NyZWVuIGNoYXJhY3RlcnM6IGxpbmVzeGNvbHVtbnMuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCSonc2hvd2Z1bGx0YWcnKiAqJ3NmdCcqIConbm9zaG93ZnVsbHRhZycqIConbm9zZnQnKgorJ3Nob3dmdWxsdGFnJyAnc2Z0Jwlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIGNvbXBsZXRpbmcgYSB3b3JkIGluIGluc2VydCBtb2RlIChzZWUgfGlucy1jb21wbGV0aW9ufCkgZnJvbSB0aGUKKwl0YWdzIGZpbGUsIHNob3cgYm90aCB0aGUgdGFnIG5hbWUgYW5kIGEgdGlkaWVkLXVwIGZvcm0gb2YgdGhlIHNlYXJjaAorCXBhdHRlcm4gKGlmIHRoZXJlIGlzIG9uZSkgYXMgcG9zc2libGUgbWF0Y2hlcy4JVGh1cywgaWYgeW91IGhhdmUKKwltYXRjaGVkIGEgQyBmdW5jdGlvbiwgeW91IGNhbiBzZWUgYSB0ZW1wbGF0ZSBmb3Igd2hhdCBhcmd1bWVudHMgYXJlCisJcmVxdWlyZWQgKGNvZGluZyBzdHlsZSBwZXJtaXR0aW5nKS4KKworCQkJCSAqJ3Nob3dtYXRjaCcqIConc20nKiAqJ25vc2hvd21hdGNoJyogKidub3NtJyoKKydzaG93bWF0Y2gnICdzbScJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwlXaGVuIGEgYnJhY2tldCBpcyBpbnNlcnRlZCwgYnJpZWZseSBqdW1wIHRvIHRoZSBtYXRjaGluZyBvbmUuICBUaGUKKwlqdW1wIGlzIG9ubHkgZG9uZSBpZiB0aGUgbWF0Y2ggY2FuIGJlIHNlZW4gb24gdGhlIHNjcmVlbi4gIFRoZSB0aW1lIHRvCisJc2hvdyB0aGUgbWF0Y2ggY2FuIGJlIHNldCB3aXRoICdtYXRjaHRpbWUnLgorCUEgQmVlcCBpcyBnaXZlbiBpZiB0aGVyZSBpcyBubyBtYXRjaCAobm8gbWF0dGVyIGlmIHRoZSBtYXRjaCBjYW4gYmUKKwlzZWVuIG9yIG5vdCkuICBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuIHRoZSAncGFzdGUnIG9wdGlvbiBpcyBzZXQuCisJV2hlbiB0aGUgJ20nIGZsYWcgaXMgbm90IGluY2x1ZGVkIGluICdjcG9wdGlvbnMnLCB0eXBpbmcgYSBjaGFyYWN0ZXIKKwl3aWxsIGltbWVkaWF0ZWx5IG1vdmUgdGhlIGN1cnNvciBiYWNrIHRvIHdoZXJlIGl0IGJlbG9uZ3MuCisJU2VlIHRoZSAic20iIGZpZWxkIGluICdndWljdXJzb3InIGZvciBzZXR0aW5nIHRoZSBjdXJzb3Igc2hhcGUgYW5kCisJYmxpbmtpbmcgd2hlbiBzaG93aW5nIHRoZSBtYXRjaC4KKwlUaGUgJ21hdGNocGFpcnMnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXJzIHRvIHNob3cKKwltYXRjaGVzIGZvci4gICdyaWdodGxlZnQnIGFuZCAncmV2aW5zJyBhcmUgdXNlZCB0byBsb29rIGZvciBvcHBvc2l0ZQorCW1hdGNoZXMuCisJTm90ZTogRm9yIHRoZSB1c2Ugb2YgdGhlIHNob3J0IGZvcm0gcGFyZW50YWwgZ3VpZGFuY2UgaXMgYWR2aXNlZC4KKworCQkJCSAqJ3Nob3dtb2RlJyogKidzbWQnKiAqJ25vc2hvd21vZGUnKiAqJ25vc21kJyoKKydzaG93bW9kZScgJ3NtZCcJYm9vbGVhbgkoVmltIGRlZmF1bHQ6IG9uLCBWaSBkZWZhdWx0OiBvZmYpCisJCQlnbG9iYWwKKwlJZiBpbiBJbnNlcnQsIFJlcGxhY2Ugb3IgVmlzdWFsIG1vZGUgcHV0IGEgbWVzc2FnZSBvbiB0aGUgbGFzdCBsaW5lLgorCVVzZSB0aGUgJ00nIGZsYWcgaW4gJ2hpZ2hsaWdodCcgdG8gc2V0IHRoZSB0eXBlIG9mIGhpZ2hsaWdodGluZyBmb3IKKwl0aGlzIG1lc3NhZ2UuCisJV2hlbiB8WElNfCBtYXkgYmUgdXNlZCB0aGUgbWVzc2FnZSB3aWxsIGluY2x1ZGUgIlhJTSIuCUJ1dCB0aGlzCisJZG9lc24ndCBtZWFuIFhJTSBpcyByZWFsbHkgYWN0aXZlLCBlc3BlY2lhbGx5IHdoZW4gJ2ltYWN0aXZhdGVrZXknIGlzCisJbm90IHNldC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCQkJKidzaWRlc2Nyb2xsJyogKidzcycqCisnc2lkZXNjcm9sbCcgJ3NzJwludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGUgbWluaW1hbCBudW1iZXIgb2YgY29sdW1ucyB0byBzY3JvbGwgaG9yaXpvbnRhbGx5LiAgVXNlZCBvbmx5IHdoZW4KKwl0aGUgJ3dyYXAnIG9wdGlvbiBpcyBvZmYgYW5kIHRoZSBjdXJzb3IgaXMgbW92ZWQgb2ZmIG9mIHRoZSBzY3JlZW4uCisJV2hlbiBpdCBpcyB6ZXJvIHRoZSBjdXJzb3Igd2lsbCBiZSBwdXQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2NyZWVuLgorCVdoZW4gdXNpbmcgYSBzbG93IHRlcm1pbmFsIHNldCBpdCB0byBhIGxhcmdlIG51bWJlciBvciAwLiAgV2hlbiB1c2luZworCWEgZmFzdCB0ZXJtaW5hbCB1c2UgYSBzbWFsbCBudW1iZXIgb3IgMS4gIE5vdCB1c2VkIGZvciAiemgiIGFuZCAiemwiCisJY29tbWFuZHMuCisKKwkJCQkJCSonc2lkZXNjcm9sbG9mZicqIConc2lzbycqCisnc2lkZXNjcm9sbG9mZicgJ3Npc28nCW51bWJlciAoZGVmYXVsdCAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoZSBtaW5pbWFsIG51bWJlciBvZiBzY3JlZW4gY29sdW1ucyB0byBrZWVwIHRvIHRoZSBsZWZ0IGFuZCB0byB0aGUKKwlyaWdodCBvZiB0aGUgY3Vyc29yIGlmICdub3dyYXAnIGlzIHNldC4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byBhIHZhbHVlCisJZ3JlYXRlciB0aGFuIDAgd2hpbGUgaGF2aW5nIHwnc2lkZXNjcm9sbCd8IGFsc28gYXQgYSBub24temVybyB2YWx1ZQorCW1ha2VzIHNvbWUgY29udGV4dCB2aXNpYmxlIGluIHRoZSBsaW5lIHlvdSBhcmUgc2Nyb2xsaW5nIGluCisJaG9yaXpvbnRhbGx5IChleGNlcHQgYXQgdGhlIGVuZCBhbmQgYmVnaW5uaW5nIG9mIHRoZSBsaW5lKS4gIFNldHRpbmcKKwl0aGlzIG9wdGlvbiB0byBhIGxhcmdlIHZhbHVlIChsaWtlIDk5OSkgaGFzIHRoZSBlZmZlY3Qgb2Yga2VlcGluZyB0aGUKKwljdXJzb3IgaG9yaXpvbnRhbGx5IGNlbnRlcmVkIGluIHRoZSB3aW5kb3csIGFzIGxvbmcgYXMgb25lIGRvZXMgbm90CisJY29tZSB0b28gY2xvc2UgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGxpbmUuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIDAgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJRXhhbXBsZTogVHJ5IHRoaXMgdG9nZXRoZXIgd2l0aCAnc2lkZXNjcm9sbCcgYW5kICdsaXN0Y2hhcnMnIGFzCisJCSBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgdG8gbmV2ZXIgYWxsb3cgdGhlIGN1cnNvciB0byBtb3ZlCisJCSBvbnRvIHRoZSAiZXh0ZW5kcyIgY2hhcmFjdGVyOgorCisJCSA6c2V0IG5vd3JhcCBzaWRlc2Nyb2xsPTEgbGlzdGNoYXJzPWV4dGVuZHM6PixwcmVjZWRlczo8CisJCSA6c2V0IHNpZGVzY3JvbGxvZmY9MQorCisKKwkJCSonc21hcnRjYXNlJyogKidzY3MnKiAqJ25vc21hcnRjYXNlJyogKidub3NjcycqCisnc21hcnRjYXNlJyAnc2NzJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlPdmVycmlkZSB0aGUgJ2lnbm9yZWNhc2UnIG9wdGlvbiBpZiB0aGUgc2VhcmNoIHBhdHRlcm4gY29udGFpbnMgdXBwZXIKKwljYXNlIGNoYXJhY3RlcnMuICBPbmx5IHVzZWQgd2hlbiB0aGUgc2VhcmNoIHBhdHRlcm4gaXMgdHlwZWQgYW5kCisJJ2lnbm9yZWNhc2UnIG9wdGlvbiBpcyBvbi4gIFVzZWQgZm9yIHRoZSBjb21tYW5kcyAiLyIsICI/IiwgIm4iLCAiTiIsCisJIjpnIiBhbmQgIjpzIi4JTm90IHVzZWQgZm9yICIqIiwgIiMiLCAiZ2QiLCB0YWcgc2VhcmNoLCBldGMuLglBZnRlcgorCSIqIiBhbmQgIiMiIHlvdSBjYW4gbWFrZSAnc21hcnRjYXNlJyB1c2VkIGJ5IGRvaW5nIGEgIi8iIGNvbW1hbmQsCisJcmVjYWxsaW5nIHRoZSBzZWFyY2ggcGF0dGVybiBmcm9tIGhpc3RvcnkgYW5kIGhpdHRpbmcgPEVudGVyPi4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCSAgICAgKidzbWFydGluZGVudCcqIConc2knKiAqJ25vc21hcnRpbmRlbnQnKiAqJ25vc2knKgorJ3NtYXJ0aW5kZW50JyAnc2knCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtzbWFydGluZGVudHwgZmVhdHVyZX0KKwlEbyBzbWFydCBhdXRvaW5kZW50aW5nIHdoZW4gc3RhcnRpbmcgYSBuZXcgbGluZS4gIFdvcmtzIGZvciBDLWxpa2UKKwlwcm9ncmFtcywgYnV0IGNhbiBhbHNvIGJlIHVzZWQgZm9yIG90aGVyIGxhbmd1YWdlcy4gICdjaW5kZW50JyBkb2VzCisJc29tZXRoaW5nIGxpa2UgdGhpcywgd29ya3MgYmV0dGVyIGluIG1vc3QgY2FzZXMsIGJ1dCBpcyBtb3JlIHN0cmljdCwKKwlzZWUgfEMtaW5kZW50aW5nfC4gIFdoZW4gJ2NpbmRlbnQnIGlzIG9uLCBzZXR0aW5nICdzaScgaGFzIG5vIGVmZmVjdC4KKwknaW5kZW50ZXhwcicgaXMgYSBtb3JlIGFkdmFuY2VkIGFsdGVybmF0aXZlLgorCU5vcm1hbGx5ICdhdXRvaW5kZW50JyBzaG91bGQgYWxzbyBiZSBvbiB3aGVuIHVzaW5nICdzbWFydGluZGVudCcuCisJQW4gaW5kZW50IGlzIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQ6CisJLSBBZnRlciBhIGxpbmUgZW5kaW5nIGluICd7Jy4KKwktIEFmdGVyIGEgbGluZSBzdGFydGluZyB3aXRoIGEga2V5d29yZCBmcm9tICdjaW53b3JkcycuCisJLSBCZWZvcmUgYSBsaW5lIHN0YXJ0aW5nIHdpdGggJ30nIChvbmx5IHdpdGggdGhlICJPIiBjb21tYW5kKS4KKwlXaGVuIHR5cGluZyAnfScgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBhIG5ldyBsaW5lLCB0aGF0IGxpbmUgaXMKKwlnaXZlbiB0aGUgc2FtZSBpbmRlbnQgYXMgdGhlIG1hdGNoaW5nICd7Jy4KKwlXaGVuIHR5cGluZyAnIycgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBhIG5ldyBsaW5lLCB0aGUgaW5kZW50IGZvcgorCXRoYXQgbGluZSBpcyByZW1vdmVkLCB0aGUgJyMnIGlzIHB1dCBpbiB0aGUgZmlyc3QgY29sdW1uLiAgVGhlIGluZGVudAorCWlzIHJlc3RvcmVkIGZvciB0aGUgbmV4dCBsaW5lLglJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzLCB1c2UgdGhpcworCW1hcHBpbmc6ICI6aW5vcmVtYXAgIyBYXkgjIiwgd2hlcmUgXkggaXMgZW50ZXJlZCB3aXRoIENUUkwtViBDVFJMLUguCisJV2hlbiB1c2luZyB0aGUgIj4+IiBjb21tYW5kLCBsaW5lcyBzdGFydGluZyB3aXRoICcjJyBhcmUgbm90IHNoaWZ0ZWQKKwlyaWdodC4KKwlOT1RFOiAnc21hcnRpbmRlbnQnIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4JV2hlbiAncGFzdGUnCisJaXMgc2V0IHNtYXJ0IGluZGVudGluZyBpcyBkaXNhYmxlZC4KKworCQkJCSAqJ3NtYXJ0dGFiJyogKidzdGEnKiAqJ25vc21hcnR0YWInKiAqJ25vc3RhJyoKKydzbWFydHRhYicgJ3N0YScJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBvbiwgYSA8VGFiPiBpbiBmcm9udCBvZiBhIGxpbmUgaW5zZXJ0cyBibGFua3MgYWNjb3JkaW5nIHRvCisJJ3NoaWZ0d2lkdGgnLiAgJ3RhYnN0b3AnIGlzIHVzZWQgaW4gb3RoZXIgcGxhY2VzLiAgQSA8QlM+IHdpbGwgZGVsZXRlCisJYSAnc2hpZnR3aWR0aCcgd29ydGggb2Ygc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLgorCVdoZW4gb2ZmIGEgPFRhYj4gYWx3YXlzIGluc2VydHMgYmxhbmtzIGFjY29yZGluZyB0byAndGFic3RvcCcuCisJJ3NoaWZ0d2lkdGgnIGlzIG9ubHkgdXNlZCBmb3Igc2hpZnRpbmcgdGV4dCBsZWZ0IG9yIHJpZ2h0CisJfHNoaWZ0LWxlZnQtcmlnaHR8LgorCVdoYXQgZ2V0cyBpbnNlcnRlZCAoYSBUYWIgb3Igc3BhY2VzKSBkZXBlbmRzIG9uIHRoZSAnZXhwYW5kdGFiJworCW9wdGlvbi4gIEFsc28gc2VlIHxpbnMtZXhwYW5kdGFifC4gIFdoZW4gJ2V4cGFuZHRhYicgaXMgbm90IHNldCwgdGhlCisJbnVtYmVyIG9mIHNwYWNlcyBtaW5pbWl6ZWQgYnkgdXNpbmcgPFRhYj5zLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkqJ3NvZnR0YWJzdG9wJyogKidzdHMnKgorJ3NvZnR0YWJzdG9wJyAnc3RzJwludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlOdW1iZXIgb2Ygc3BhY2VzIHRoYXQgYSA8VGFiPiBjb3VudHMgZm9yIHdoaWxlIHBlcmZvcm1pbmcgZWRpdGluZworCW9wZXJhdGlvbnMsIGxpa2UgaW5zZXJ0aW5nIGEgPFRhYj4gb3IgdXNpbmcgPEJTPi4gIEl0ICJmZWVscyIgbGlrZQorCTxUYWI+cyBhcmUgYmVpbmcgaW5zZXJ0ZWQsIHdoaWxlIGluIGZhY3QgYSBtaXggb2Ygc3BhY2VzIGFuZCA8VGFiPnMgaXMKKwl1c2VkLiAgVGhpcyBpcyB1c2VmdWwgdG8ga2VlcCB0aGUgJ3RzJyBzZXR0aW5nIGF0IGl0cyBzdGFuZGFyZCB2YWx1ZQorCW9mIDgsIHdoaWxlIGJlaW5nIGFibGUgdG8gZWRpdCBsaWtlIGl0IGlzIHNldCB0byAnc3RzJy4gIEhvd2V2ZXIsCisJY29tbWFuZHMgbGlrZSAieCIgc3RpbGwgd29yayBvbiB0aGUgYWN0dWFsIGNoYXJhY3RlcnMuCisJV2hlbiAnc3RzJyBpcyB6ZXJvLCB0aGlzIGZlYXR1cmUgaXMgb2ZmLgorCSdzb2Z0dGFic3RvcCcgaXMgc2V0IHRvIDAgd2hlbiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMgc2V0LgorCVNlZSBhbHNvIHxpbnMtZXhwYW5kdGFifC4gIFdoZW4gJ2V4cGFuZHRhYicgaXMgbm90IHNldCwgdGhlIG51bWJlciBvZgorCXNwYWNlcyBpcyBtaW5pbWl6ZWQgYnkgdXNpbmcgPFRhYj5zLgorCVRoZSAnTCcgZmxhZyBpbiAnY3BvcHRpb25zJyBjaGFuZ2VzIGhvdyB0YWJzIGFyZSB1c2VkIHdoZW4gJ2xpc3QnIGlzCisJc2V0LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byAwIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJKidzcGxpdGJlbG93JyogKidzYicqIConbm9zcGxpdGJlbG93JyogKidub3NiJyoKKydzcGxpdGJlbG93JyAnc2InCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArd2luZG93cworCQkJZmVhdHVyZX0KKwlXaGVuIG9uLCBzcGxpdHRpbmcgYSB3aW5kb3cgd2lsbCBwdXQgdGhlIG5ldyB3aW5kb3cgYmVsb3cgdGhlIGN1cnJlbnQKKwlvbmUuIHw6c3BsaXR8CisKKwkJCSonc3BsaXRyaWdodCcqIConc3ByJyogKidub3NwbGl0cmlnaHQnKiAqJ25vc3ByJyoKKydzcGxpdHJpZ2h0JyAnc3ByJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3ZlcnRzcGxpdAorCQkJZmVhdHVyZX0KKwlXaGVuIG9uLCBzcGxpdHRpbmcgYSB3aW5kb3cgd2lsbCBwdXQgdGhlIG5ldyB3aW5kb3cgcmlnaHQgb2YgdGhlCisJY3VycmVudCBvbmUuIHw6dnNwbGl0fAorCisJCQkgICAqJ3N0YXJ0b2ZsaW5lJyogKidzb2wnKiAqJ25vc3RhcnRvZmxpbmUnKiAqJ25vc29sJyoKKydzdGFydG9mbGluZScgJ3NvbCcJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuICJvbiIgdGhlIGNvbW1hbmRzIGxpc3RlZCBiZWxvdyBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0CisJYmxhbmsgb2YgdGhlIGxpbmUuICBXaGVuIG9mZiB0aGUgY3Vyc29yIGlzIGtlcHQgaW4gdGhlIHNhbWUgY29sdW1uCisJKGlmIHBvc3NpYmxlKS4JVGhpcyBhcHBsaWVzIHRvIHRoZSBjb21tYW5kczogQ1RSTC1ELCBDVFJMLVUsIENUUkwtQiwKKwlDVFJMLUYsICJHIiwgIkgiLCAiTSIsICJMIiwgLCBhbmQgdG8gdGhlIGNvbW1hbmRzICJkIiwgIjw8IiBhbmQgIj4+IgorCXdpdGggYSBsaW5ld2lzZSBvcGVyYXRvciwgd2l0aCAiJSIgd2l0aCBhIGNvdW50IGFuZCB0byBidWZmZXIgY2hhbmdpbmcKKwljb21tYW5kcyAoQ1RSTC1eLCA6Ym5leHQsIDpiTmV4dCwgZXRjLikuICBBbHNvIGZvciBhbiBFeCBjb21tYW5kIHRoYXQKKwlvbmx5IGhhcyBhIGxpbmUgbnVtYmVyLCBlLmcuLCAiOjI1IiBvciAiOisiLgorCUluIGNhc2Ugb2YgYnVmZmVyIGNoYW5naW5nIGNvbW1hbmRzIHRoZSBjdXJzb3IgaXMgcGxhY2VkIGF0IHRoZSBjb2x1bW4KKwl3aGVyZSBpdCB3YXMgdGhlIGxhc3QgdGltZSB0aGUgYnVmZmVyIHdhcyBlZGl0ZWQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJICAgKidzdGF0dXNsaW5lJyogKidzdGwnKiAqRTU0MCogKkU1NDEqICpFNTQyKgorJ3N0YXR1c2xpbmUnICdzdGwnCXN0cmluZwkoZGVmYXVsdCBlbXB0eSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtzdGF0dXNsaW5lfAorCQkJZmVhdHVyZX0KKwlXaGVuIG5vbmVtcHR5LCB0aGlzIG9wdGlvbiBkZXRlcm1pbmVzIHRoZSBjb250ZW50IG9mIHRoZSBzdGF0dXMgbGluZS4KKwlBbHNvIHNlZSB8c3RhdHVzLWxpbmV8LgorCisJVGhlIG9wdGlvbiBjb25zaXN0cyBvZiBwcmludGYgc3R5bGUgJyUnIGl0ZW1zIGludGVyc3BlcnNlZCB3aXRoCisJbm9ybWFsIHRleHQuICBFYWNoIHN0YXR1cyBsaW5lIGl0ZW0gaXMgb2YgdGhlIGZvcm06CisJICAlLTB7bWlud2lkfS57bWF4d2lkfXtpdGVtfQorCUFsbCBmaWVsZHMgZXhjZXB0IHRoZSB7aXRlbX0gaXMgb3B0aW9uYWwuICBBIHNpbmdsZSBwZXJjZW50IHNpZ24gY2FuCisJYmUgZ2l2ZW4gYXMgIiUlIi4gIFVwIHRvIDgwIGl0ZW1zIGNhbiBiZSBzcGVjaWZpZWQuCisKKwlOb3RlIHRoYXQgdGhlIG9ubHkgZWZmZWN0IG9mICdydWxlcicgd2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQgKGFuZAorCSdsYXN0c3RhdHVzJyBpcyAyKSBpcyBjb250cm9sbGluZyB0aGUgb3V0cHV0IG9mIHxDVFJMLUd8LgorCisJZmllbGQJICAgIG1lYW5pbmcgfgorCS0JICAgIExlZnQganVzdGlmeSB0aGUgaXRlbS4gVGhlIGRlZmF1bHQgaXMgcmlnaHQganVzdGlmaWVkCisJCSAgICB3aGVuIG1pbndpZCBpcyBsYXJnZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBpdGVtLgorCTAJICAgIExlYWRpbmcgemVyb2VzIGluIG51bWVyaWMgaXRlbXMuIE92ZXJyaWRkZW4gYnkgJy0nLgorCW1pbndpZAkgICAgTWluaW11bSB3aWR0aCBvZiB0aGUgaXRlbSwgcGFkZGluZyBhcyBzZXQgYnkgJy0nICYgJzAnLgorCQkgICAgVmFsdWUgbXVzdCBiZSA1MCBvciBsZXNzLgorCW1heHdpZAkgICAgTWF4aW11bSB3aWR0aCBvZiB0aGUgaXRlbS4JVHJ1bmNhdGlvbiBvY2N1cnMgd2l0aCBhICc8JworCQkgICAgb24gdGhlIGxlZnQgZm9yIHRleHQgaXRlbXMuICBOdW1lcmljIGl0ZW1zIHdpbGwgYmUKKwkJICAgIHNoaWZ0ZWQgZG93biB0byBtYXh3aWQtMiBkaWdpdHMgZm9sbG93ZWQgYnkgJz4nbnVtYmVyCisJCSAgICB3aGVyZSBudW1iZXIgaXMgdGhlIGFtb3VudCBvZiBtaXNzaW5nIGRpZ2l0cywgbXVjaCBsaWtlCisJCSAgICBhbiBleHBvbmVudGlhbCBub3RhdGlvbi4KKwlpdGVtCSAgICBBIG9uZSBsZXR0ZXIgY29kZSBhcyBkZXNjcmliZWQgYmVsb3cuCisKKwlGb2xsb3dpbmcgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcG9zc2libGUgc3RhdHVzbGluZSBpdGVtcy4gIFRoZQorCXNlY29uZCBjaGFyYWN0ZXIgaW4gIml0ZW0iIGlzIHRoZSB0eXBlOgorCQlOIGZvciBudW1iZXIKKwkJUyBmb3Igc3RyaW5nCisJCUYgZm9yIGZsYWdzIGFzIGRlc2NyaWJlZCBiZWxvdworCQktIG5vdCBhcHBsaWNhYmxlCisKKwlpdGVtICBtZWFuaW5nIH4KKwlmIFMgICBQYXRoIHRvIHRoZSBmaWxlIGluIHRoZSBidWZmZXIsIHJlbGF0aXZlIHRvIGN1cnJlbnQgZGlyZWN0b3J5LgorCUYgUyAgIEZ1bGwgcGF0aCB0byB0aGUgZmlsZSBpbiB0aGUgYnVmZmVyLgorCXQgUyAgIEZpbGUgbmFtZSAodGFpbCkgb2YgZmlsZSBpbiB0aGUgYnVmZmVyLgorCW0gRiAgIE1vZGlmaWVkIGZsYWcsIHRleHQgaXMgIiBbK10iOyAiIFstXSIgaWYgJ21vZGlmaWFibGUnIGlzIG9mZi4KKwlNIEYgICBNb2RpZmllZCBmbGFnLCB0ZXh0IGlzICIsKyIgb3IgIiwtIi4KKwlyIEYgICBSZWFkb25seSBmbGFnLCB0ZXh0IGlzICIgW1JPXSIuCisJUiBGICAgUmVhZG9ubHkgZmxhZywgdGV4dCBpcyAiLFJPIi4KKwloIEYgICBIZWxwIGJ1ZmZlciBmbGFnLCB0ZXh0IGlzICIgW2hlbHBdIi4KKwlIIEYgICBIZWxwIGJ1ZmZlciBmbGFnLCB0ZXh0IGlzICIsSExQIi4KKwl3IEYgICBQcmV2aWV3IHdpbmRvdyBmbGFnLCB0ZXh0IGlzICIgW1ByZXZpZXddIi4KKwlXIEYgICBQcmV2aWV3IHdpbmRvdyBmbGFnLCB0ZXh0IGlzICIsUFJWIi4KKwl5IEYgICBUeXBlIG9mIGZpbGUgaW4gdGhlIGJ1ZmZlciwgZS5nLiwgIiBbdmltXSIuICBTZWUgJ2ZpbGV0eXBlJy4KKwlZIEYgICBUeXBlIG9mIGZpbGUgaW4gdGhlIGJ1ZmZlciwgZS5nLiwgIixWSU0iLiAgU2VlICdmaWxldHlwZScuCisJICAgICAge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHwrYXV0b2NtZHwgZmVhdHVyZX0KKwlrIFMgICBWYWx1ZSBvZiAiYjprZXltYXBfbmFtZSIgb3IgJ2tleW1hcCcgd2hlbiB8OmxtYXB8IG1hcHBpbmdzIGFyZQorCSAgICAgIGJlaW5nIHVzZWQ6ICI8a2V5bWFwPiIKKwluIE4gICBCdWZmZXIgbnVtYmVyLgorCWIgTiAgIFZhbHVlIG9mIGJ5dGUgdW5kZXIgY3Vyc29yLgorCUIgTiAgIEFzIGFib3ZlLCBpbiBoZXhhZGVjaW1hbC4KKwlvIE4gICBCeXRlIG51bWJlciBpbiBmaWxlIG9mIGJ5dGUgdW5kZXIgY3Vyc29yLCBmaXJzdCBieXRlIGlzIDEuCisJICAgICAgTW5lbW9uaWM6IE9mZnNldCBmcm9tIHN0YXJ0IG9mIGZpbGUgKHdpdGggb25lIGFkZGVkKQorCSAgICAgIHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB8K2J5dGVfb2Zmc2V0fCBmZWF0dXJlfQorCU8gTiAgIEFzIGFib3ZlLCBpbiBoZXhhZGVjaW1hbC4KKwlOIE4gICBQcmludGVyIHBhZ2UgbnVtYmVyLiAoT25seSB3b3JrcyBpbiB0aGUgJ3ByaW50aGVhZGVyJyBvcHRpb24uKQorCWwgTiAgIExpbmUgbnVtYmVyLgorCUwgTiAgIE51bWJlciBvZiBsaW5lcyBpbiBidWZmZXIuCisJYyBOICAgQ29sdW1uIG51bWJlci4KKwl2IE4gICBWaXJ0dWFsIGNvbHVtbiBudW1iZXIuCisJViBOICAgVmlydHVhbCBjb2x1bW4gbnVtYmVyIGFzIC17bnVtfS4JTm90IGRpc3BsYXllZCBpZiBlcXVhbCB0byAnYycuCisJcCBOICAgUGVyY2VudGFnZSB0aHJvdWdoIGZpbGUgaW4gbGluZXMgYXMgaW4gfENUUkwtR3wuCisJUCBTICAgUGVyY2VudGFnZSB0aHJvdWdoIGZpbGUgb2YgZGlzcGxheWVkIHdpbmRvdy4gIFRoaXMgaXMgbGlrZSB0aGUKKwkgICAgICBwZXJjZW50YWdlIGRlc2NyaWJlZCBmb3IgJ3J1bGVyJy4gIEFsd2F5cyAzIGluIGxlbmd0aC4KKwlhIFMgICBBcmd1bWVudCBsaXN0IHN0YXR1cyBhcyBpbiBkZWZhdWx0IHRpdGxlLiAoe2N1cnJlbnR9IG9mIHttYXh9KQorCSAgICAgIEVtcHR5IGlmIHRoZSBhcmd1bWVudCBmaWxlIGNvdW50IGlzIHplcm8gb3Igb25lLgorCXsgTkYgIEV2YWx1YXRlIGV4cHJlc3Npb24gYmV0d2VlbiAneycgYW5kICd9JyBhbmQgc3Vic3RpdHV0ZSByZXN1bHQuCisJKCAtICAgU3RhcnQgb2YgaXRlbSBncm91cC4gIENhbiBiZSB1c2VkIGZvciBzZXR0aW5nIHRoZSB3aWR0aCBhbmQKKwkgICAgICBhbGlnbm1lbnQgb2YgYSBzZWN0aW9uLiAgTXVzdCBiZSBmb2xsb3dlZCBieSAlKSBzb21ld2hlcmUuCisJKSAtICAgRW5kIG9mIGl0ZW0gZ3JvdXAuICBObyB3aWR0aCBmaWVsZHMgYWxsb3dlZC4KKwk8IC0gICBXaGVyZSB0byB0cnVuY2F0ZSBsaW5lIGlmIHRvbyBsb25nLiAgRGVmYXVsdCBpcyBhdCB0aGUgc3RhcnQuCisJICAgICAgTm8gd2lkdGggZmllbGRzIGFsbG93ZWQuCisJPSAtICAgU2VwYXJhdGlvbiBwb2ludCBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0IGFsaWduZWQgaXRlbXMuCisJICAgICAgTm8gd2lkdGggZmllbGRzIGFsbG93ZWQuCisJKiAtICAgU2V0IGhpZ2hsaWdodCBncm91cCB0byBVc2Vye059LCB3aGVyZSB7Tn0gaXMgdGFrZW4gZnJvbSB0aGUKKwkgICAgICBtaW53aWQgZmllbGQuIGVnLiAlMSouICBSZXN0b3JlIG5vcm1hbCBoaWdobGlnaHQgd2l0aCAlKiBvciAlMCouCisJICAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBVc2Vye059IGFuZCBTdGF0dXNMaW5lICB3aWxsIGJlIGFwcGxpZWQKKwkgICAgICB0byBTdGF0dXNMaW5lTkMgZm9yIHRoZSBzdGF0dXNsaW5lIG9mIG5vbi1jdXJyZW50IHdpbmRvd3MuCisJICAgICAgVGhlIG51bWJlciBOIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA5LiAgU2VlIHxobC1Vc2VyMS4uOXwKKworCURpc3BsYXkgb2YgZmxhZ3MgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZyBoZXVyaXN0aWM6CisJSWYgYSBmbGFnIHRleHQgc3RhcnRzIHdpdGggY29tbWEgaXQgaXMgYXNzdW1lZCB0aGF0IGl0IHdhbnRzIHRvCisJc2VwYXJhdGUgaXRzZWxmIGZyb20gYW55dGhpbmcgYnV0IHByZWNlZGluZyBwbGFpbnRleHQuCUlmIGl0IHN0YXJ0cworCXdpdGggYSBzcGFjZSBpdCBpcyBhc3N1bWVkIHRoYXQgaXQgd2FudHMgdG8gc2VwYXJhdGUgaXRzZWxmIGZyb20KKwlhbnl0aGluZyBidXQgb3RoZXIgZmxhZ3MuICBUaGF0IGlzOiBBIGxlYWRpbmcgY29tbWEgaXMgcmVtb3ZlZCBpZiB0aGUKKwlwcmVjZWRpbmcgY2hhcmFjdGVyIHN0ZW1zIGZyb20gcGxhaW50ZXh0LiAgQSBsZWFkaW5nIHNwYWNlIGlzIHJlbW92ZWQKKwlpZiB0aGUgcHJlY2VkaW5nIGNoYXJhY3RlciBzdGVtcyBmcm9tIGFub3RoZXIgYWN0aXZlIGZsYWcuIFRoaXMgd2lsbAorCW1ha2UgYSBuaWNlIGRpc3BsYXkgd2hlbiBmbGFncyBhcmUgdXNlZCBsaWtlIGluIHRoZSBleGFtcGxlcyBiZWxvdy4KKworCVdoZW4gYWxsIGl0ZW1zIGluIGEgZ3JvdXAgYmVjb21lcyBhbiBlbXB0eSBzdHJpbmcgKGllLiBmbGFncyB0aGF0IGFyZQorCW5vdCBzZXQpIGFuZCBhIG1pbndpZCBpcyBub3Qgc2V0IGZvciB0aGUgZ3JvdXAsIHRoZSB3aG9sZSBncm91cCB3aWxsCisJYmVjb21lIGVtcHR5LiAgVGhpcyB3aWxsIG1ha2UgYSBncm91cCBsaWtlIHRoZSBmb2xsb3dpbmcgZGlzYXBwZWFyCisJY29tcGxldGVseSBmcm9tIHRoZSBzdGF0dXNsaW5lIHdoZW4gbm9uZSBvZiB0aGUgZmxhZ3MgYXJlIHNldC4gPgorCQk6c2V0IHN0YXR1c2xpbmU9Li4uJShcIFslTSVSJUhdJSkuLi4KKzwKKwlCZXdhcmUgdGhhdCBhbiBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBlYWNoIGFuZCBldmVyeSB0aW1lIHRoZSBzdGF0dXMKKwlsaW5lIGlzIGRpc3BsYXllZC4gIFRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgY3VycmVudCB3aW5kb3cgd2lsbCBiZSBzZXQKKwl0ZW1wb3JhcmlseSB0byB0aGF0IG9mIHRoZSB3aW5kb3cgKGFuZCBidWZmZXIpIHdob3NlIHN0YXR1c2xpbmUgaXMKKwljdXJyZW50bHkgYmVpbmcgZHJhd24uIFRoZSBleHByZXNzaW9uIHdpbGwgZXZhbHVhdGUgaW4gdGhpcyBjb250ZXh0LgorCVRoZSB2YXJpYWJsZSAiYWN0dWFsX2N1cmJ1ZiIgaXMgc2V0IHRvIHRoZSAnYnVmbnIoKScgbnVtYmVyIG9mIHRoZQorCXJlYWwgY3VycmVudCBidWZmZXIuICBUaGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgaW4gdGhlIHxzYW5kYm94fC4KKworCUlmIHRoZSBzdGF0dXNsaW5lIGlzIG5vdCB1cGRhdGVkIHdoZW4geW91IHdhbnQgaXQgKGUuZy4sIGFmdGVyIHNldHRpbmcKKwlhIHZhcmlhYmxlIHRoYXQncyB1c2VkIGluIGFuIGV4cHJlc3Npb24pLCB5b3UgY2FuIGZvcmNlIGFuIHVwZGF0ZSBieQorCXNldHRpbmcgYW4gb3B0aW9uIHdpdGhvdXQgY2hhbmdpbmcgaXRzIHZhbHVlLiAgRXhhbXBsZTogPgorCQk6bGV0ICZybyA9ICZybworCis8CUEgcmVzdWx0IG9mIGFsbCBkaWdpdHMgaXMgcmVnYXJkZWQgYSBudW1iZXIgZm9yIGRpc3BsYXkgcHVycG9zZXMuCisJT3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgdGFrZW4gYXMgZmxhZyB0ZXh0IGFuZCBhcHBsaWVkIHRvIHRoZSBydWxlcworCWRlc2NyaWJlZCBhYm92ZS4KKworCVdhdGNoIG91dCBmb3IgZXJyb3JzIGluIGV4cHJlc3Npb25zLiAgVGhleSBtYXkgcmVuZGVyIFZpbSB1bnVzYWJsZSAhCisJSWYgeW91IGFyZSBzdHVjaywgaG9sZCBkb3duICc6JyBvciAnUScgdG8gZ2V0IGEgcHJvbXB0LCB0aGVuIHF1aXQgYW5kCisJZWRpdCB5b3VyIC52aW1yYyBvciB3aGF0ZXZlciB3aXRoICJ2aW0gLXUgTk9ORSIgdG8gZ2V0IGl0IHJpZ2h0LgorCisJRXhhbXBsZXM6CisJRW11bGF0ZSBzdGFuZGFyZCBzdGF0dXMgbGluZSB3aXRoICdydWxlcicgc2V0ID4KKwkgIDpzZXQgc3RhdHVzbGluZT0lPCVmXCAlaCVtJXIlPSUtMTQuKCVsLCVjJVYlKVwgJVAKKzwJU2ltaWxhciwgYnV0IGFkZCBBU0NJSSB2YWx1ZSBvZiBjaGFyIHVuZGVyIHRoZSBjdXJzb3IgKGxpa2UgImdhIikgPgorCSAgOnNldCBzdGF0dXNsaW5lPSU8JWYlaCVtJXIlPSViXCAweCVCXCBcICVsLCVjJVZcICVQCis8CURpc3BsYXkgYnl0ZSBjb3VudCBhbmQgYnl0ZSB2YWx1ZSwgbW9kaWZpZWQgZmxhZyBpbiByZWQuID4KKwkgIDpzZXQgc3RhdHVzbGluZT0lPCVmJT1cIFslMSolTSUqJW4lUiVIXVwgJS0xOSglM2wsJTAyYyUwM1YlKSVPJyUwMmInCisJICA6aGkgVXNlcjEgdGVybT1pbnZlcnNlLGJvbGQgY3Rlcm09aW52ZXJzZSxib2xkIGN0ZXJtZmc9cmVkCis8CURpc3BsYXkgYSAsR1ogZmxhZyBpZiBhIGNvbXByZXNzZWQgZmlsZSBpcyBsb2FkZWQgPgorCSAgOnNldCBzdGF0dXNsaW5lPS4uLiVyJXtWYXJFeGlzdHMoJ2I6Z3pmbGFnJywnXCBbR1pdJyl9JWguLi4KKzwJSW4gdGhlIHw6YXV0b2NtZHwnczogPgorCSAgOmxldCBiOmd6ZmxhZyA9IDEKKzwJQW5kOiA+CisJICA6dW5sZXQgYjpnemZsYWcKKzwJQW5kIGRlZmluZSB0aGlzIGZ1bmN0aW9uOiA+CisJICA6ZnVuY3Rpb24gVmFyRXhpc3RzKHZhciwgdmFsKQorCSAgOiAgICBpZiBleGlzdHMoYTp2YXIpIHwgcmV0dXJuIGE6dmFsIHwgZWxzZSB8IHJldHVybiAnJyB8IGVuZGlmCisJICA6ZW5kZnVuY3Rpb24KKzwKKwkJCQkJCSonc3VmZml4ZXMnKiAqJ3N1JyoKKydzdWZmaXhlcycgJ3N1JwkJc3RyaW5nCShkZWZhdWx0ICIuYmFrLH4sLm8sLmgsLmluZm8sLnN3cCwub2JqIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlGaWxlcyB3aXRoIHRoZXNlIHN1ZmZpeGVzIGdldCBhIGxvd2VyIHByaW9yaXR5IHdoZW4gbXVsdGlwbGUgZmlsZXMKKwltYXRjaCBhIHdpbGRjYXJkLiAgU2VlIHxzdWZmaXhlc3wuICBDb21tYXMgY2FuIGJlIHVzZWQgdG8gc2VwYXJhdGUgdGhlCisJc3VmZml4ZXMuICBTcGFjZXMgYWZ0ZXIgdGhlIGNvbW1hIGFyZSBpZ25vcmVkLglBIGRvdCBpcyBhbHNvIHNlZW4gYXMKKwl0aGUgc3RhcnQgb2YgYSBzdWZmaXguCVRvIGF2b2lkIGEgZG90IG9yIGNvbW1hIGJlaW5nIHJlY29nbml6ZWQgYXMgYQorCXNlcGFyYXRvciwgcHJlY2VkZSBpdCB3aXRoIGEgYmFja3NsYXNoIChzZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0CisJaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMpLgorCVNlZSAnd2lsZGlnbm9yZScgZm9yIGNvbXBsZXRlbHkgaWdub3JpbmcgZmlsZXMuCisJVGhlIHVzZSBvZiB8OnNldCs9fCBhbmQgfDpzZXQtPXwgaXMgcHJlZmVycmVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nCisJc3VmZml4ZXMgZnJvbSB0aGUgbGlzdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdoZW4gYSBmdXR1cmUgdmVyc2lvbgorCXVzZXMgYW5vdGhlciBkZWZhdWx0LgorCisJCQkJCQkqJ3N1ZmZpeGVzYWRkJyogKidzdWEnKgorJ3N1ZmZpeGVzYWRkJyAnc3VhJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2ZpbGVfaW5fcGF0aHwgZmVhdHVyZX0KKwlDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzdWZmaXhlcywgd2hpY2ggYXJlIHVzZWQgd2hlbiBzZWFyY2hpbmcgZm9yIGEKKwlmaWxlIGZvciB0aGUgImdmIiwgIltJIiwgZXRjLiBjb21tYW5kcy4gIEV4YW1wbGU6ID4KKwkJOnNldCBzdWZmaXhlc2FkZD0uamF2YQorPAorCQkJCSonc3dhcGZpbGUnKiAqJ3N3ZicqIConbm9zd2FwZmlsZScqIConbm9zd2YnKgorJ3N3YXBmaWxlJyAnc3dmJwlib29sZWFuIChkZWZhdWx0IG9uKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVVzZSBhIHN3YXBmaWxlIGZvciB0aGUgYnVmZmVyLglUaGlzIG9wdGlvbiBjYW4gYmUgcmVzZXQgd2hlbiBhCisJc3dhcGZpbGUgaXMgbm90IHdhbnRlZCBmb3IgYSBzcGVjaWZpYyBidWZmZXIuICBGb3IgZXhhbXBsZSwgd2l0aAorCWNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiB0aGF0IGV2ZW4gcm9vdCBtdXN0IG5vdCBiZSBhYmxlIHRvIGFjY2Vzcy4KKwlDYXJlZnVsOiBBbGwgdGV4dCB3aWxsIGJlIGluIG1lbW9yeToKKwkJLSBEb24ndCB1c2UgdGhpcyBmb3IgYmlnIGZpbGVzLgorCQktIFJlY292ZXJ5IHdpbGwgYmUgaW1wb3NzaWJsZSEKKwlBIHN3YXBmaWxlIHdpbGwgb25seSBiZSBwcmVzZW50IHdoZW4gfCd1cGRhdGVjb3VudCd8IGlzIG5vbi16ZXJvIGFuZAorCSdzd2FwZmlsZScgaXMgc2V0LgorCVdoZW4gJ3N3YXBmaWxlJyBpcyByZXNldCwgdGhlIHN3YXAgZmlsZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyIGlzCisJaW1tZWRpYXRlbHkgZGVsZXRlZC4gIFdoZW4gJ3N3YXBmaWxlJyBpcyBzZXQsIGFuZCAndXBkYXRlY291bnQnIGlzCisJbm9uLXplcm8sIGEgc3dhcCBmaWxlIGlzIGltbWVkaWF0ZWx5IGNyZWF0ZWQuCisJQWxzbyBzZWUgfHN3YXAtZmlsZXwgYW5kIHwnc3dhcHN5bmMnfC4KKworCVRoaXMgb3B0aW9uIGlzIHVzZWQgdG9nZXRoZXIgd2l0aCAnYnVmaGlkZGVuJyBhbmQgJ2J1ZnR5cGUnIHRvCisJc3BlY2lmeSBzcGVjaWFsIGtpbmRzIG9mIGJ1ZmZlcnMuICAgU2VlIHxzcGVjaWFsLWJ1ZmZlcnN8LgorCisJCQkJCQkqJ3N3YXBzeW5jJyogKidzd3MnKgorJ3N3YXBzeW5jJyAnc3dzJwlzdHJpbmcJKGRlZmF1bHQgImZzeW5jIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIG5vdCBlbXB0eSBhIHN3YXAgZmlsZSBpcyBzeW5jZWQgdG8gZGlzayBhZnRlcgorCXdyaXRpbmcgdG8gaXQuCVRoaXMgdGFrZXMgc29tZSB0aW1lLCBlc3BlY2lhbGx5IG9uIGJ1c3kgdW5peCBzeXN0ZW1zLgorCVdoZW4gdGhpcyBvcHRpb24gaXMgZW1wdHkgcGFydHMgb2YgdGhlIHN3YXAgZmlsZSBtYXkgYmUgaW4gbWVtb3J5IGFuZAorCW5vdCB3cml0dGVuIHRvIGRpc2suICBXaGVuIHRoZSBzeXN0ZW0gY3Jhc2hlcyB5b3UgbWF5IGxvc2UgbW9yZSB3b3JrLgorCU9uIFVuaXggdGhlIHN5c3RlbSBkb2VzIGEgc3luYyBub3cgYW5kIHRoZW4gd2l0aG91dCBWaW0gYXNraW5nIGZvciBpdCwKKwlzbyB0aGUgZGlzYWR2YW50YWdlIG9mIHNldHRpbmcgdGhpcyBvcHRpb24gb2ZmIGlzIHNtYWxsLiAgT24gc29tZQorCXN5c3RlbXMgdGhlIHN3YXAgZmlsZSB3aWxsIG5vdCBiZSB3cml0dGVuIGF0IGFsbC4gIEZvciBhIHVuaXggc3lzdGVtCisJc2V0dGluZyBpdCB0byAic3luYyIgd2lsbCB1c2UgdGhlIHN5bmMoKSBjYWxsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKKwlmc3luYygpLCB3aGljaCBtYXkgd29yayBiZXR0ZXIgb24gc29tZSBzeXN0ZW1zLgorCisJCQkJCQkqJ3N3aXRjaGJ1ZicqIConc3diJyoKKydzd2l0Y2hidWYnICdzd2InCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBjb250cm9scyB0aGUgYmVoYXZpb3Igd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBidWZmZXJzLgorCVBvc3NpYmxlIHZhbHVlcyAoY29tbWEgc2VwYXJhdGVkIGxpc3QpOgorCSAgIHVzZW9wZW4JSWYgaW5jbHVkZWQsIGp1bXAgdG8gdGhlIGZpcnN0IG9wZW4gd2luZG93IHRoYXQKKwkJCWNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgYnVmZmVyIChpZiB0aGVyZSBpcyBvbmUpLgorCQkJT3RoZXJ3aXNlOiBEbyBub3QgZXhhbWluZSBvdGhlciB3aW5kb3dzLgorCQkJVGhpcyBzZXR0aW5nIGlzIGNoZWNrZWQgd2l0aCB8cXVpY2tmaXh8IGNvbW1hbmRzLCB3aGVuCisJCQlqdW1waW5nIHRvIGVycm9ycyAoIjpjYyIsICI6Y24iLCAiY3AiLCBldGMuKS4gIEl0IGlzCisJCQlhbHNvIHVzZWQgaW4gYWxsIGJ1ZmZlciByZWxhdGVkIHNwbGl0IGNvbW1hbmRzLCBmb3IKKwkJCWV4YW1wbGUgIjpzYnVmZmVyIiwgIjpzYm5leHQiLCBvciAiOnNicmV3aW5kIi4KKwkgICBzcGxpdAlJZiBpbmNsdWRlZCwgc3BsaXQgdGhlIGN1cnJlbnQgd2luZG93IGJlZm9yZSBsb2FkaW5nCisJCQlhIGJ1ZmZlci4gT3RoZXJ3aXNlOiBkbyBub3Qgc3BsaXQsIHVzZSBjdXJyZW50IHdpbmRvdy4KKwkJCVN1cHBvcnRlZCBpbiB8cXVpY2tmaXh8IGNvbW1hbmRzIHRoYXQgZGlzcGxheSBlcnJvcnMuCisKKwkJCQkJCSonc3ludGF4JyogKidzeW4nKgorJ3N5bnRheCcgJ3N5bicJCXN0cmluZwkoZGVmYXVsdCBlbXB0eSkKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtzeW50YXh8CisJCQlmZWF0dXJlfQorCVdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgc3ludGF4IHdpdGggdGhpcyBuYW1lIGlzIGxvYWRlZCwgdW5sZXNzCisJc3ludGF4IGhpZ2hsaWdodGluZyBoYXMgYmVlbiBzd2l0Y2hlZCBvZmYgd2l0aCAiOnN5bnRheCBvZmYiLgorCU90aGVyd2lzZSB0aGlzIG9wdGlvbiBkb2VzIG5vdCBhbHdheXMgcmVmbGVjdCB0aGUgY3VycmVudCBzeW50YXggKHRoZQorCWI6Y3VycmVudF9zeW50YXggdmFyaWFibGUgZG9lcykuCisJVGhpcyBvcHRpb24gaXMgbW9zdCB1c2VmdWwgaW4gYSBtb2RlbGluZSwgZm9yIGEgZmlsZSB3aGljaCBzeW50YXggaXMKKwlub3QgYXV0b21hdGljYWxseSByZWNvZ25pemVkLiAgRXhhbXBsZSwgZm9yIGluIGFuIElETCBmaWxlOiA+CisJCS8qIHZpbTogc2V0IHN5bnRheD1pZGwgOiAqLworPAlUbyBzd2l0Y2ggb2ZmIHN5bnRheCBoaWdobGlnaHRpbmcgZm9yIHRoZSBjdXJyZW50IGZpbGUsIHVzZTogPgorCQk6c2V0IHN5bnRheD1PRkYKKzwJVG8gc3dpdGNoIHN5bnRheCBoaWdobGlnaHRpbmcgb24gYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQorCSdmaWxldHlwZScgb3B0aW9uOiA+CisJCTpzZXQgc3ludGF4PU9OCis8CVdoYXQgYWN0dWFsbHkgaGFwcGVucyB3aGVuIHNldHRpbmcgdGhlICdzeW50YXgnIG9wdGlvbiBpcyB0aGF0IHRoZQorCVN5bnRheCBhdXRvY29tbWFuZCBldmVudCBpcyB0cmlnZ2VyZWQgd2l0aCB0aGUgdmFsdWUgYXMgYXJndW1lbnQuCisJVGhpcyBvcHRpb24gaXMgbm90IGNvcGllZCB0byBhbm90aGVyIGJ1ZmZlciwgaW5kZXBlbmRlbnQgb2YgdGhlICdzJyBvcgorCSdTJyBmbGFnIGluICdjcG9wdGlvbnMnLgorCisJCQkJCSondGFic3RvcCcqICondHMnKgorJ3RhYnN0b3AnICd0cycJCW51bWJlcgkoZGVmYXVsdCA4KQorCQkJbG9jYWwgdG8gYnVmZmVyCisJTnVtYmVyIG9mIHNwYWNlcyB0aGF0IGEgPFRhYj4gaW4gdGhlIGZpbGUgY291bnRzIGZvci4gIEFsc28gc2VlCisJfDpyZXRhYnwgY29tbWFuZCwgYW5kICdzb2Z0dGFic3RvcCcgb3B0aW9uLgorCisJTm90ZTogU2V0dGluZyAndGFic3RvcCcgdG8gYW55IG90aGVyIHZhbHVlIHRoYW4gOCBjYW4gbWFrZSB5b3VyIGZpbGUKKwlhcHBlYXIgd3JvbmcgaW4gbWFueSBwbGFjZXMgKGUuZy4sIHdoZW4gcHJpbnRpbmcgaXQpLgorCisJVGhlcmUgYXJlIGZvdXIgbWFpbiB3YXlzIHRvIHVzZSB0YWJzIGluIFZpbToKKwkxLiBBbHdheXMga2VlcCAndGFic3RvcCcgYXQgOCwgc2V0ICdzb2Z0dGFic3RvcCcgYW5kICdzaGlmdHdpZHRoJyB0byA0CisJICAgKG9yIDMgb3Igd2hhdGV2ZXIgeW91IHByZWZlcikgYW5kIHVzZSAnbm9leHBhbmR0YWInLiAgVGhlbiBWaW0KKwkgICB3aWxsIHVzZSBhIG1peCBvZiB0YWJzIGFuZCBzcGFjZXMsIGJ1dCB0eXBpbmcgVGFiIGFuZCBCUyB3aWxsCisJICAgYmVoYXZlIGxpa2UgYSB0YWIgYXBwZWFycyBldmVyeSA0IChvciAzKSBjaGFyYWN0ZXJzLgorCTIuIFNldCAndGFic3RvcCcgYW5kICdzaGlmdHdpZHRoJyB0byB3aGF0ZXZlciB5b3UgcHJlZmVyIGFuZCB1c2UKKwkgICAnZXhwYW5kdGFiJy4gIFRoaXMgd2F5IHlvdSB3aWxsIGFsd2F5cyBpbnNlcnQgc3BhY2VzLiAgVGhlCisJICAgZm9ybWF0dGluZyB3aWxsIG5ldmVyIGJlIG1lc3NlZCB1cCB3aGVuICd0YWJzdG9wJyBpcyBjaGFuZ2VkLgorCTMuIFNldCAndGFic3RvcCcgYW5kICdzaGlmdHdpZHRoJyB0byB3aGF0ZXZlciB5b3UgcHJlZmVyIGFuZCB1c2UgYQorCSAgIHxtb2RlbGluZXwgdG8gc2V0IHRoZXNlIHZhbHVlcyB3aGVuIGVkaXRpbmcgdGhlIGZpbGUgYWdhaW4uCU9ubHkKKwkgICB3b3JrcyB3aGVuIHVzaW5nIFZpbSB0byBlZGl0IHRoZSBmaWxlLgorCTQuIEFsd2F5cyBzZXQgJ3RhYnN0b3AnIGFuZCAnc2hpZnR3aWR0aCcgdG8gdGhlIHNhbWUgdmFsdWUsIGFuZAorCSAgICdub2V4cGFuZHRhYicuICBUaGlzIHNob3VsZCB0aGVuIHdvcmsgKGZvciBpbml0aWFsIGluZGVudHMgb25seSkKKwkgICBmb3IgYW55IHRhYnN0b3Agc2V0dGluZyB0aGF0IHBlb3BsZSB1c2UuICBJdCBtaWdodCBiZSBuaWNlIHRvIGhhdmUKKwkgICB0YWJzIGFmdGVyIHRoZSBmaXJzdCBub24tYmxhbmsgaW5zZXJ0ZWQgYXMgc3BhY2VzIGlmIHlvdSBkbyB0aGlzCisJICAgdGhvdWdoLiAgT3RoZXJ3aXNlIGFsaWduZWQgY29tbWVudHMgd2lsbCBiZSB3cm9uZyB3aGVuICd0YWJzdG9wJyBpcworCSAgIGNoYW5nZWQuCisKKwkJCSondGFnYnNlYXJjaCcqICondGJzJyogKidub3RhZ2JzZWFyY2gnKiAqJ25vdGJzJyoKKyd0YWdic2VhcmNoJyAndGJzJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gc2VhcmNoaW5nIGZvciBhIHRhZyAoZS5nLiwgZm9yIHRoZSB8OnRhfCBjb21tYW5kKSwgVmltIGNhbiBlaXRoZXIKKwl1c2UgYSBiaW5hcnkgc2VhcmNoIG9yIGEgbGluZWFyIHNlYXJjaCBpbiBhIHRhZ3MgZmlsZS4JQmluYXJ5CisJc2VhcmNoaW5nIG1ha2VzIHNlYXJjaGluZyBmb3IgYSB0YWcgYSBMT1QgZmFzdGVyLCBidXQgYSBsaW5lYXIgc2VhcmNoCisJd2lsbCBmaW5kIG1vcmUgdGFncyBpZiB0aGUgdGFncyBmaWxlIHdhc24ndCBwcm9wZXJseSBzb3J0ZWQuCisJVmltIG5vcm1hbGx5IGFzc3VtZXMgdGhhdCB5b3VyIHRhZ3MgZmlsZXMgYXJlIHNvcnRlZCwgb3IgaW5kaWNhdGUgdGhhdAorCXRoZXkgYXJlIG5vdCBzb3J0ZWQuICBPbmx5IHdoZW4gdGhpcyBpcyBub3QgdGhlIGNhc2UgZG9lcyB0aGUKKwkndGFnYnNlYXJjaCcgb3B0aW9uIG5lZWQgdG8gYmUgc3dpdGNoZWQgb2ZmLgorCisJV2hlbiAndGFnYnNlYXJjaCcgaXMgb24sIGJpbmFyeSBzZWFyY2hpbmcgaXMgZmlyc3QgdXNlZCBpbiB0aGUgdGFncworCWZpbGVzLglJbiBjZXJ0YWluIHNpdHVhdGlvbnMsIFZpbSB3aWxsIGRvIGEgbGluZWFyIHNlYXJjaCBpbnN0ZWFkIGZvcgorCWNlcnRhaW4gZmlsZXMsIG9yIHJldHJ5IGFsbCBmaWxlcyB3aXRoIGEgbGluZWFyIHNlYXJjaC4gIFdoZW4KKwkndGFnYnNlYXJjaCcgaXMgb2ZmLCBvbmx5IGEgbGluZWFyIHNlYXJjaCBpcyBkb25lLgorCisJTGluZWFyIHNlYXJjaGluZyBpcyBkb25lIGFueXdheSwgZm9yIG9uZSBmaWxlLCB3aGVuIFZpbSBmaW5kcyBhIGxpbmUKKwlhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgaW5kaWNhdGluZyB0aGF0IGl0J3Mgbm90IHNvcnRlZDogPgorICAgIV9UQUdfRklMRV9TT1JURUQJMAkvc29tZSBjb21tYW5kLworPAlbVGhlIHdoaXRlc3BhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgJzAnIG11c3QgYmUgYSBzaW5nbGUgPFRhYj5dCisKKwlXaGVuIGEgYmluYXJ5IHNlYXJjaCB3YXMgZG9uZSBhbmQgbm8gbWF0Y2ggd2FzIGZvdW5kIGluIGFueSBvZiB0aGUKKwlmaWxlcyBsaXN0ZWQgaW4gJ3RhZ3MnLCBhbmQgJ2lnbm9yZWNhc2UnIGlzIHNldCBvciBhIHBhdHRlcm4gaXMgdXNlZAorCWluc3RlYWQgb2YgYSBub3JtYWwgdGFnIG5hbWUsIGEgcmV0cnkgaXMgZG9uZSB3aXRoIGEgbGluZWFyIHNlYXJjaC4KKwlUYWdzIGluIHVuc29ydGVkIHRhZ3MgZmlsZXMsIGFuZCBtYXRjaGVzIHdpdGggZGlmZmVyZW50IGNhc2Ugd2lsbCBvbmx5CisJYmUgZm91bmQgaW4gdGhlIHJldHJ5LgorCisJSWYgYSB0YWcgZmlsZSBpbmRpY2F0ZXMgdGhhdCBpcyBpcyBjYXNlLWZvbGQgc29ydGVkLCB0aGUgc2Vjb25kLAorCWxpbmVhciBzZWFyY2ggY2FuIGJlIGF2b2lkZWQgZm9yIHRoZSAnaWdub3JlY2FzZScgY2FzZS4gIFVzZSBhIHZhbHVlCisJb2YgJzInIGluIHRoZSAiIV9UQUdfRklMRV9TT1JURUQiIGxpbmUgZm9yIHRoaXMuICBBIHRhZyBmaWxlIGNhbiBiZQorCWNhc2UtZm9sZCBzb3J0ZWQgd2l0aCB0aGUgLWYgc3dpdGNoIHRvICJzb3J0IiBpbiBtb3N0IHVuaWNlcywgYXMgaW4KKwl0aGUgY29tbWFuZDogInNvcnQgLWYgLW8gdGFncyB0YWdzIi4gIEZvciAiRXh1YmVyYW50IGN0YWdzIiB2ZXJzaW9uCisJNS4zIG9yIGhpZ2hlciB0aGUgLWYgb3IgLS1mb2xkLWNhc2Utc29ydCBzd2l0Y2ggY2FuIGJlIHVzZWQgZm9yIHRoaXMKKwlhcyB3ZWxsLiAgTm90ZSB0aGF0IGNhc2UgbXVzdCBiZSBmb2xkZWQgdG8gdXBwZXJjYXNlIGZvciB0aGlzIHRvIHdvcmsuCisKKwlXaGVuICd0YWdic2VhcmNoJyBpcyBvZmYsIHRhZ3Mgc2VhcmNoaW5nIGlzIHNsb3dlciB3aGVuIGEgZnVsbCBtYXRjaAorCWV4aXN0cywgYnV0IGZhc3RlciB3aGVuIG5vIGZ1bGwgbWF0Y2ggZXhpc3RzLiAgVGFncyBpbiB1bnNvcnRlZCB0YWdzCisJZmlsZXMgbWF5IG9ubHkgYmUgZm91bmQgd2l0aCAndGFnYnNlYXJjaCcgb2ZmLgorCVdoZW4gdGhlIHRhZ3MgZmlsZSBpcyBub3Qgc29ydGVkLCBvciBzb3J0ZWQgaW4gYSB3cm9uZyB3YXkgKG5vdCBvbgorCUFTQ0lJIGJ5dGUgdmFsdWUpLCAndGFnYnNlYXJjaCcgc2hvdWxkIGJlIG9mZiwgb3IgdGhlIGxpbmUgZ2l2ZW4gYWJvdmUKKwltdXN0IGJlIGluY2x1ZGVkIGluIHRoZSB0YWdzIGZpbGUuCisJVGhpcyBvcHRpb24gZG9lc24ndCBhZmZlY3QgY29tbWFuZHMgdGhhdCBmaW5kIGFsbCBtYXRjaGluZyB0YWdzIChlLmcuLAorCWNvbW1hbmQtbGluZSBjb21wbGV0aW9uIGFuZCAiOmhlbHAiKS4KKwl7Vmk6IGFsd2F5cyB1c2VzIGJpbmFyeSBzZWFyY2ggaW4gc29tZSB2ZXJzaW9uc30KKworCQkJCQkJKid0YWdsZW5ndGgnKiAqJ3RsJyoKKyd0YWdsZW5ndGgnICd0bCcJbnVtYmVyCShkZWZhdWx0IDApCisJCQlnbG9iYWwKKwlJZiBub24temVybywgdGFncyBhcmUgc2lnbmlmaWNhbnQgdXAgdG8gdGhpcyBudW1iZXIgb2YgY2hhcmFjdGVycy4KKworCQkJKid0YWdyZWxhdGl2ZScqICondHInKiAqJ25vdGFncmVsYXRpdmUnKiAqJ25vdHInKgorJ3RhZ3JlbGF0aXZlJyAndHInCWJvb2xlYW4JKFZpbSBkZWZhdWx0OiBvbiwgVmkgZGVmYXVsdDogb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUlmIG9uIGFuZCB1c2luZyBhIHRhZyBmaWxlIGluIGFub3RoZXIgZGlyZWN0b3J5LCBmaWxlIG5hbWVzIGluIHRoYXQKKwl0YWcgZmlsZSBhcmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgdGFnIGZpbGUgaXMuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkJCSondGFncycqICondGFnJyogKkU0MzMqCisndGFncycgJ3RhZycJCXN0cmluZwkoZGVmYXVsdCAiLi90YWdzLHRhZ3MiLCB3aGVuIGNvbXBpbGVkIHdpdGgKKwkJCQl8K2VtYWNzX3RhZ3N8OiAiLi90YWdzLC4vVEFHUyx0YWdzLFRBR1MiKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCUZpbGVuYW1lcyBmb3IgdGhlIHRhZyBjb21tYW5kLCBzZXBhcmF0ZWQgYnkgc3BhY2VzIG9yIGNvbW1hcy4gIFRvCisJaW5jbHVkZSBhIHNwYWNlIG9yIGNvbW1hIGluIGEgZmlsZSBuYW1lLCBwcmVjZWRlIGl0IHdpdGggYSBiYWNrc2xhc2gKKwkoc2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcykuCisJV2hlbiBhIGZpbGUgbmFtZSBzdGFydHMgd2l0aCAiLi8iLCB0aGUgJy4nIGlzIHJlcGxhY2VkIHdpdGggdGhlIHBhdGgKKwlvZiB0aGUgY3VycmVudCBmaWxlLiAgQnV0IG9ubHkgd2hlbiB0aGUgJ2QnIGZsYWcgaXMgbm90IGluY2x1ZGVkIGluCisJJ2Nwb3B0aW9ucycuICBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuICBBbHNvIHNlZQorCXx0YWdzLW9wdGlvbnwuCisJIioiLCAiKioiIGFuZCBvdGhlciB3aWxkY2FyZHMgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciB0YWdzIGZpbGVzIGluCisJYSBkaXJlY3RvcnkgdHJlZS4gIFNlZSB8ZmlsZS1zZWFyY2hpbmd8LiAge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZAorCXdpdGhvdXQgdGhlIHwrcGF0aF9leHRyYXwgZmVhdHVyZX0KKwlJZiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggdGhlIHwrZW1hY3NfdGFnc3wgZmVhdHVyZSwgRW1hY3Mtc3R5bGUgdGFnCisJZmlsZXMgYXJlIGFsc28gc3VwcG9ydGVkLiAgVGhleSBhcmUgYXV0b21hdGljYWxseSByZWNvZ25pemVkLiAgVGhlCisJZGVmYXVsdCB2YWx1ZSBiZWNvbWVzICIuL3RhZ3MsLi9UQUdTLHRhZ3MsVEFHUyIsIHVubGVzcyBjYXNlCisJZGlmZmVyZW5jZXMgYXJlIGlnbm9yZWQgKE1TLVdpbmRvd3MpLiAgfGVtYWNzLXRhZ3N8CisJVGhlIHVzZSBvZiB8OnNldCs9fCBhbmQgfDpzZXQtPXwgaXMgcHJlZmVycmVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nCisJZmlsZSBuYW1lcyBmcm9tIHRoZSBsaXN0LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiBhIGZ1dHVyZSB2ZXJzaW9uCisJdXNlcyBhbm90aGVyIGRlZmF1bHQuCisJe1ZpOiBkZWZhdWx0IGlzICJ0YWdzIC91c3IvbGliL3RhZ3MifQorCisJCQkJKid0YWdzdGFjaycqICondGdzdCcqIConbm90YWdzdGFjaycqIConbm90Z3N0JyoKKyd0YWdzdGFjaycgJ3Rnc3QnCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gYWxsIHZlcnNpb25zIG9mIFZpfQorCVdoZW4gb24sIHRoZSB8dGFnc3RhY2t8IGlzIHVzZWQgbm9ybWFsbHkuICBXaGVuIG9mZiwgYSAiOnRhZyIgb3IKKwkiOnRzZWxlY3QiIGNvbW1hbmQgd2l0aCBhbiBhcmd1bWVudCB3aWxsIG5vdCBwdXNoIHRoZSB0YWcgb250byB0aGUKKwl0YWdzdGFjay4gIEEgZm9sbG93aW5nICI6dGFnIiB3aXRob3V0IGFuIGFyZ3VtZW50LCBhICI6cG9wIiBjb21tYW5kIG9yCisJYW55IG90aGVyIGNvbW1hbmQgdGhhdCB1c2VzIHRoZSB0YWdzdGFjayB3aWxsIHVzZSB0aGUgdW5tb2RpZmllZAorCXRhZ3N0YWNrLCBidXQgZG9lcyBjaGFuZ2UgdGhlIHBvaW50ZXIgdG8gdGhlIGFjdGl2ZSBlbnRyeS4KKwlSZXNldHRpbmcgdGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4gdXNpbmcgYSAiOnRhZyIgY29tbWFuZCBpbiBhCisJbWFwcGluZyB3aGljaCBzaG91bGQgbm90IGNoYW5nZSB0aGUgdGFnc3RhY2suCisKKwkJCQkJCSondGVybScqICpFNTI5KiAqRTUzMCogKkU1MzEqCisndGVybScJCQlzdHJpbmcJKGRlZmF1bHQgaXMgJFRFUk0sIGlmIHRoYXQgZmFpbHM6CisJCQkJICAgICAgaW4gdGhlIEdVSTogImJ1aWx0aW5fZ3VpIgorCQkJCQlvbiBBbWlnYTogImFtaWdhIgorCQkJCQkgb24gQmVPUzogImJlb3MtYW5zaSIKKwkJCQkJICBvbiBNYWM6ICJtYWMtYW5zaSIKKwkJCQkJIG9uIE1pTlQ6ICJ2dDUyIgorCQkJCSAgICAgICBvbiBNUy1ET1M6ICJwY3Rlcm0iCisJCQkJCSBvbiBPUy8yOiAib3MyYW5zaSIKKwkJCQkJIG9uIFVuaXg6ICJhbnNpIgorCQkJCQkgIG9uIFZNUzogImFuc2kiCisJCQkJICAgICAgIG9uIFdpbiAzMjogIndpbjMyIikKKwkJCWdsb2JhbAorCU5hbWUgb2YgdGhlIHRlcm1pbmFsLiAgVXNlZCBmb3IgY2hvb3NpbmcgdGhlIHRlcm1pbmFsIGNvbnRyb2wKKwljaGFyYWN0ZXJzLiAgRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LgorCUZvciBleGFtcGxlOiA+CisJCTpzZXQgdGVybT0kVEVSTQorPAlTZWUgfHRlcm1jYXB8LgorCisJCQkJCQkqJ3Rlcm1iaWRpJyogKid0YmlkaScqCisJCQkJCQkqJ25vdGVybWJpZGknKiAqJ25vdGJpZGknKgorJ3Rlcm1iaWRpJyAndGJpZGknCWJvb2xlYW4gKGRlZmF1bHQgb2ZmLCBvbiBmb3IgIm1sdGVybSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2FyYWJpY3wKKwkJCWZlYXR1cmV9CisJVGhlIHRlcm1pbmFsIGlzIGluIGNoYXJnZSBvZiBCaS1kaXJlY3Rpb25hbGl0eSBvZiB0ZXh0IChhcyBzcGVjaWZpZWQKKwlieSBVbmljb2RlKS4gIFRoZSB0ZXJtaW5hbCBpcyBhbHNvIGV4cGVjdGVkIHRvIGRvIHRoZSByZXF1aXJlZCBzaGFwaW5nCisJdGhhdCBzb21lIGxhbmd1YWdlcyAoc3VjaCBhcyBBcmFiaWMpIHJlcXVpcmUuCisJU2V0dGluZyB0aGlzIG9wdGlvbiBpbXBsaWVzIHRoYXQgJ3JpZ2h0bGVmdCcgd2lsbCBub3QgYmUgc2V0IHdoZW4KKwknYXJhYmljJyBpcyBzZXQgYW5kIHRoZSB2YWx1ZSBvZiAnYXJhYmljc2hhcGUnIHdpbGwgYmUgaWdub3JlZC4KKwlOb3RlIHRoYXQgc2V0dGluZyAndGVybWJpZGknIGhhcyB0aGUgaW1tZWRpYXRlIGVmZmVjdCB0aGF0CisJJ2FyYWJpY3NoYXBlJyBpcyBpZ25vcmVkLCBidXQgJ3JpZ2h0bGVmdCcgaXNuJ3QgY2hhbmdlZCBhdXRvbWF0aWNhbGx5LgorCVRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gdGhlIEdVSSBpcyBzdGFydGVkLgorCUZvciBmdXJ0aGVyIGRldGFpbHMgc2VlIHxhcmFiaWMudHh0fC4KKworCQkJCQkqJ3Rlcm1lbmNvZGluZycqICondGVuYycqCisndGVybWVuY29kaW5nJyAndGVuYycJc3RyaW5nCShkZWZhdWx0ICIiOyB3aXRoIEdUSysgMiBHVUk6ICJ1dGYtOCI7IHdpdGgKKwkJCQkJCSAgICBNYWNpbnRvc2ggR1VJOiAibWFjcm9tYW4iKQorCQkJZ2xvYmFsCisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGV8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlFbmNvZGluZyB1c2VkIGZvciB0aGUgdGVybWluYWwuICBUaGlzIHNwZWNpZmllcyB3aGF0IGNoYXJhY3RlcgorCWVuY29kaW5nIHRoZSBrZXlib2FyZCBwcm9kdWNlcyBhbmQgdGhlIGRpc3BsYXkgd2lsbCB1bmRlcnN0YW5kLiAgRm9yCisJdGhlIEdVSSBpdCBvbmx5IGFwcGxpZXMgdG8gdGhlIGtleWJvYXJkICgnZW5jb2RpbmcnIGlzIHVzZWQgZm9yIHRoZQorCWRpc3BsYXkpLgorCUluIHRoZSBXaW4zMiBjb25zb2xlIHZlcnNpb24gdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGNvbnNvbGUgY29kZXBhZ2UKKwl3aGVuIGl0IGRpZmZlcnMgZnJvbSB0aGUgQU5TSSBjb2RlcGFnZS4KKwkJCQkJCQkJKkU2MTcqCisJTm90ZTogVGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgR1RLKyAyIEdVSS4gIEFmdGVyIHRoZSBHVUkgaGFzIGJlZW4KKwlzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQsICd0ZXJtZW5jb2RpbmcnIGlzIGZvcmNpYmx5IHNldCB0byAidXRmLTgiLgorCUFueSBhdHRlbXB0cyB0byBzZXQgYSBkaWZmZXJlbnQgdmFsdWUgd2lsbCBiZSByZWplY3RlZCwgYW5kIGFuIGVycm9yCisJbWVzc2FnZSBpcyBzaG93bi4KKwlGb3IgdGhlIFdpbjMyIEdVSSAndGVybWVuY29kaW5nJyBpcyBub3QgdXNlZCBmb3IgdHlwZWQgY2hhcmFjdGVycywKKwliZWNhdXNlIHRoZSBXaW4zMiBzeXN0ZW0gYWx3YXlzIHBhc3NlcyBVbmljb2RlIGNoYXJhY3RlcnMuCisJV2hlbiBlbXB0eSwgdGhlIHNhbWUgZW5jb2RpbmcgaXMgdXNlZCBhcyBmb3IgdGhlICdlbmNvZGluZycgb3B0aW9uLgorCVRoaXMgaXMgdGhlIG5vcm1hbCB2YWx1ZS4KKwlOb3QgYWxsIGNvbWJpbmF0aW9ucyBmb3IgJ3Rlcm1lbmNvZGluZycgYW5kICdlbmNvZGluZycgYXJlIHZhbGlkLiAgU2VlCisJfGVuY29kaW5nLXRhYmxlfC4KKwlUaGUgdmFsdWUgZm9yIHRoaXMgb3B0aW9uIG11c3QgYmUgc3VwcG9ydGVkIGJ5IGludGVybmFsIGNvbnZlcnNpb25zIG9yCisJaWNvbnYoKS4gIFdoZW4gdGhpcyBpcyBub3QgcG9zc2libGUgbm8gY29udmVyc2lvbiB3aWxsIGJlIGRvbmUgYW5kIHlvdQorCXdpbGwgcHJvYmFibHkgZXhwZXJpZW5jZSBwcm9ibGVtcyB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorCUV4YW1wbGU6IFlvdSBhcmUgd29ya2luZyB3aXRoIHRoZSBsb2NhbGUgc2V0IHRvIGV1Yy1qcCAoSmFwYW5lc2UpIGFuZAorCXdhbnQgdG8gZWRpdCBhIFVURi04IGZpbGU6ID4KKwkJOmxldCAmdGVybWVuY29kaW5nID0gJmVuY29kaW5nCisJCTpzZXQgZW5jb2Rpbmc9dXRmLTgKKzwJWW91IG5lZWQgdG8gZG8gdGhpcyB3aGVuIHlvdXIgc3lzdGVtIGhhcyBubyBsb2NhbGUgc3VwcG9ydCBmb3IgVVRGLTguCisKKwkJCQkJCSondGVyc2UnKiAqJ25vdGVyc2UnKgorJ3RlcnNlJwkJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJV2hlbiBzZXQ6IEFkZCAncycgZmxhZyB0byAnc2hvcnRtZXNzJyBvcHRpb24gKHRoaXMgbWFrZXMgdGhlIG1lc3NhZ2UKKwlmb3IgYSBzZWFyY2ggdGhhdCBoaXRzIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGZpbGUgbm90IGJlaW5nCisJZGlzcGxheWVkKS4gIFdoZW4gcmVzZXQ6IFJlbW92ZSAncycgZmxhZyBmcm9tICdzaG9ydG1lc3MnIG9wdGlvbi4gIHtWaQorCXNob3J0ZW5zIGEgbG90IG9mIG1lc3NhZ2VzfQorCisJCQkJICAgKid0ZXh0YXV0bycqICondGEnKiAqJ25vdGV4dGF1dG8nKiAqJ25vdGEnKgorJ3RleHRhdXRvJyAndGEnCQlib29sZWFuCShWaW0gZGVmYXVsdDogb24sIFZpIGRlZmF1bHQ6IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBpcyBvYnNvbGV0ZS4gIFVzZSAnZmlsZWZvcm1hdHMnLgorCUZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2hlbiAndGV4dGF1dG8nIGlzIHNldCwgJ2ZpbGVmb3JtYXRzJyBpcworCXNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgc3lzdGVtLiAgV2hlbiAndGV4dGF1dG8nIGlzCisJcmVzZXQsICdmaWxlZm9ybWF0cycgaXMgbWFkZSBlbXB0eS4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCSAgICondGV4dG1vZGUnKiAqJ3R4JyogKidub3RleHRtb2RlJyogKidub3R4JyoKKyd0ZXh0bW9kZScgJ3R4JwkJYm9vbGVhbgkoTVMtRE9TLCBXaW4zMiBhbmQgT1MvMjogZGVmYXVsdCBvbiwKKwkJCQkgb3RoZXJzOiBkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBpcyBvYnNvbGV0ZS4gIFVzZSAnZmlsZWZvcm1hdCcuCisJRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3aGVuICd0ZXh0bW9kZScgaXMgc2V0LCAnZmlsZWZvcm1hdCcgaXMKKwlzZXQgdG8gImRvcyIuICBXaGVuICd0ZXh0bW9kZScgaXMgcmVzZXQsICdmaWxlZm9ybWF0JyBpcyBzZXQgdG8KKwkidW5peCIuCisKKwkJCQkJCSondGV4dHdpZHRoJyogKid0dycqCisndGV4dHdpZHRoJyAndHcnCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCU1heGltdW0gd2lkdGggb2YgdGV4dCB0aGF0IGlzIGJlaW5nIGluc2VydGVkLiAgQSBsb25nZXIgbGluZSB3aWxsIGJlCisJYnJva2VuIGFmdGVyIHdoaXRlIHNwYWNlIHRvIGdldCB0aGlzIHdpZHRoLiAgQSB6ZXJvIHZhbHVlIGRpc2FibGVzCisJdGhpcy4gICd0ZXh0d2lkdGgnIGlzIHNldCB0byAwIHdoZW4gdGhlICdwYXN0ZScgb3B0aW9uIGlzIHNldC4JV2hlbgorCSd0ZXh0d2lkdGgnIGlzIHplcm8sICd3cmFwbWFyZ2luJyBtYXkgYmUgdXNlZC4JU2VlIGFsc28KKwknZm9ybWF0b3B0aW9ucycgYW5kIHxpbnMtdGV4dHdpZHRofC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gMCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSondGhlc2F1cnVzJyogKid0c3InKgorJ3RoZXNhdXJ1cycgJ3RzcicJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwlMaXN0IG9mIGZpbGUgbmFtZXMsIHNlcGFyYXRlZCBieSBjb21tYXMsIHRoYXQgYXJlIHVzZWQgdG8gbG9va3VwIHdvcmRzCisJZm9yIHRoZXNhdXJ1cyBjb21wbGV0aW9uIGNvbW1hbmRzIHxpX0NUUkwtWF9DVFJMLVR8LglFYWNoIGxpbmUgaW4KKwl0aGUgZmlsZSBzaG91bGQgY29udGFpbiB3b3JkcyB3aXRoIHNpbWlsYXIgbWVhbmluZywgc2VwYXJhdGVkIGJ5CisJbm9uLWtleXdvcmQgY2hhcmFjdGVycyAod2hpdGUgc3BhY2UgaXMgcHJlZmVycmVkKS4gIE1heGltdW0gbGluZQorCWxlbmd0aCBpcyA1MTAgYnl0ZXMuCisJVG8gb2J0YWluIGEgZmlsZSB0byBiZSB1c2VkIGhlcmUsIGNoZWNrIG91dCB0aGUgd29yZGxpc3QgRkFRIGF0CisJaHR0cDovL3d3dy5oeXBoZW5vbG9naXN0LmNvLnVrIC4KKwlUbyBpbmNsdWRlIGEgY29tbWEgaW4gYSBmaWxlIG5hbWUgcHJlY2VkZSBpdCB3aXRoIGEgYmFja3NsYXNoLglTcGFjZXMKKwlhZnRlciBhIGNvbW1hIGFyZSBpZ25vcmVkLCBvdGhlcndpc2Ugc3BhY2VzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmlsZQorCW5hbWUuICBTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IHVzaW5nIGJhY2tzbGFzaGVzLgorCVRoZSB1c2Ugb2YgfDpzZXQrPXwgYW5kIHw6c2V0LT18IGlzIHByZWZlcnJlZCB3aGVuIGFkZGluZyBvciByZW1vdmluZworCWRpcmVjdG9yaWVzIGZyb20gdGhlIGxpc3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIGEgZnV0dXJlIHZlcnNpb24KKwl1c2VzIGFub3RoZXIgZGVmYXVsdC4KKwlCYWNrdGlja3MgY2Fubm90IGJlIHVzZWQgaW4gdGhpcyBvcHRpb24gZm9yIHNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCSAgICAgKid0aWxkZW9wJyogKid0b3AnKiAqJ25vdGlsZGVvcCcqIConbm90b3AnKgorJ3RpbGRlb3AnICd0b3AnCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG9uOiBUaGUgdGlsZGUgY29tbWFuZCAifiIgYmVoYXZlcyBsaWtlIGFuIG9wZXJhdG9yLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCSondGltZW91dCcqICondG8nKiAqJ25vdGltZW91dCcqIConbm90bycqCisndGltZW91dCcgJ3RvJwkJYm9vbGVhbiAoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJCQkJKid0dGltZW91dCcqIConbm90dGltZW91dCcqCisndHRpbWVvdXQnCQlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGVzZSB0d28gb3B0aW9ucyB0b2dldGhlciBkZXRlcm1pbmUgdGhlIGJlaGF2aW9yIHdoZW4gcGFydCBvZiBhCisJbWFwcGVkIGtleSBzZXF1ZW5jZSBvciBrZXlib2FyZCBjb2RlIGhhcyBiZWVuIHJlY2VpdmVkOgorCisJJ3RpbWVvdXQnICAgICd0dGltZW91dCcJCWFjdGlvbgl+CisJICAgb2ZmCQlvZmYJCWRvIG5vdCB0aW1lIG91dAorCSAgIG9uCQlvbiBvciBvZmYJdGltZSBvdXQgb24gOm1hcHBpbmdzIGFuZCBrZXkgY29kZXMKKwkgICBvZmYJCW9uCQl0aW1lIG91dCBvbiBrZXkgY29kZXMKKworCUlmIGJvdGggb3B0aW9ucyBhcmUgb2ZmLCBWaW0gd2lsbCB3YWl0IHVudGlsIGVpdGhlciB0aGUgY29tcGxldGUKKwltYXBwaW5nIG9yIGtleSBzZXF1ZW5jZSBoYXMgYmVlbiByZWNlaXZlZCwgb3IgaXQgaXMgY2xlYXIgdGhhdCB0aGVyZQorCWlzIG5vIG1hcHBpbmcgb3Iga2V5IHNlcXVlbmNlIGZvciB0aGUgcmVjZWl2ZWQgY2hhcmFjdGVycy4gIEZvcgorCWV4YW1wbGU6IGlmIHlvdSBoYXZlIG1hcHBlZCAidmwiIGFuZCBWaW0gaGFzIHJlY2VpdmVkICd2JywgdGhlIG5leHQKKwljaGFyYWN0ZXIgaXMgbmVlZGVkIHRvIHNlZSBpZiB0aGUgJ3YnIGlzIGZvbGxvd2VkIGJ5IGFuICdsJy4KKwlXaGVuIG9uZSBvZiB0aGUgb3B0aW9ucyBpcyBvbiwgVmltIHdpbGwgd2FpdCBmb3IgYWJvdXQgMSBzZWNvbmQgZm9yCisJdGhlIG5leHQgY2hhcmFjdGVyIHRvIGFycml2ZS4gIEFmdGVyIHRoYXQgdGhlIGFscmVhZHkgcmVjZWl2ZWQKKwljaGFyYWN0ZXJzIGFyZSBpbnRlcnByZXRlZCBhcyBzaW5nbGUgY2hhcmFjdGVycy4gIFRoZSB3YWl0aW5nIHRpbWUgY2FuCisJYmUgY2hhbmdlZCB3aXRoIHRoZSAndGltZW91dGxlbicgb3B0aW9uLgorCU9uIHNsb3cgdGVybWluYWxzIG9yIHZlcnkgYnVzeSBzeXN0ZW1zIHRpbWluZyBvdXQgbWF5IGNhdXNlCisJbWFsZnVuY3Rpb25pbmcgY3Vyc29yIGtleXMuICBJZiBib3RoIG9wdGlvbnMgYXJlIG9mZiwgVmltIHdhaXRzCisJZm9yZXZlciBhZnRlciBhbiBlbnRlcmVkIDxFc2M+IGlmIHRoZXJlIGFyZSBrZXkgY29kZXMgdGhhdCBzdGFydAorCXdpdGggPEVzYz4uICBZb3Ugd2lsbCBoYXZlIHRvIHR5cGUgPEVzYz4gdHdpY2UuICBJZiB5b3UgZG8gbm90IGhhdmUKKwlwcm9ibGVtcyB3aXRoIGtleSBjb2RlcywgYnV0IHdvdWxkIGxpa2UgdG8gaGF2ZSA6bWFwcGVkIGtleQorCXNlcXVlbmNlcyBub3QgdGltaW5nIG91dCBpbiAxIHNlY29uZCwgc2V0IHRoZSAndHRpbWVvdXQnIG9wdGlvbiBhbmQKKwlyZXNldCB0aGUgJ3RpbWVvdXQnIG9wdGlvbi4KKworCU5PVEU6ICd0dGltZW91dCcgaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ3RpbWVvdXRsZW4nKiAqJ3RtJyoKKyd0aW1lb3V0bGVuJyAndG0nCW51bWJlcgkoZGVmYXVsdCAxMDAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIGFsbCB2ZXJzaW9ucyBvZiBWaX0KKwkJCQkJCSondHRpbWVvdXRsZW4nKiAqJ3R0bScqCisndHRpbWVvdXRsZW4nICd0dG0nCW51bWJlcgkoZGVmYXVsdCAtMSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhhdCBpcyB3YWl0ZWQgZm9yIGEga2V5IGNvZGUgb3IgbWFwcGVkIGtleQorCXNlcXVlbmNlIHRvIGNvbXBsZXRlLiAgQWxzbyB1c2VkIGZvciBDVFJMLVwgQ1RSTC1OIGFuZCBDVFJMLVwgQ1RSTC1HCisJd2hlbiBwYXJ0IG9mIGEgY29tbWFuZCBoYXMgYmVlbiB0eXBlZC4KKwlOb3JtYWxseSBvbmx5ICd0aW1lb3V0bGVuJyBpcyB1c2VkIGFuZCAndHRpbWVvdXRsZW4nIGlzIC0xLiAgV2hlbiBhCisJZGlmZmVyZW50IHRpbWVvdXQgdmFsdWUgZm9yIGtleSBjb2RlcyBpcyBkZXNpcmVkIHNldCAndHRpbWVvdXRsZW4nIHRvCisJYSBub24tbmVnYXRpdmUgbnVtYmVyLgorCisJCXR0aW1lb3V0bGVuCW1hcHBpbmcgZGVsYXkJICAga2V5IGNvZGUgZGVsYXkJfgorCQkgICA8IDAJCSd0aW1lb3V0bGVuJwkgICAndGltZW91dGxlbicKKwkJICA+PSAwCQkndGltZW91dGxlbicJICAgJ3R0aW1lb3V0bGVuJworCisJVGhlIHRpbWVvdXQgb25seSBoYXBwZW5zIHdoZW4gdGhlICd0aW1lb3V0JyBhbmQgJ3R0aW1lb3V0JyBvcHRpb25zCisJdGVsbCBzby4gIEEgdXNlZnVsIHNldHRpbmcgd291bGQgYmUgPgorCQk6c2V0IHRpbWVvdXQgdGltZW91dGxlbj0zMDAwIHR0aW1lb3V0bGVuPTEwMAorPAkodGltZSBvdXQgb24gbWFwcGluZyBhZnRlciB0aHJlZSBzZWNvbmRzLCB0aW1lIG91dCBvbiBrZXkgY29kZXMgYWZ0ZXIKKwlhIHRlbnRoIG9mIGEgc2Vjb25kKS4KKworCQkJCQkJKid0aXRsZScqIConbm90aXRsZScqCisndGl0bGUnCQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYsIG9uIHdoZW4gdGl0bGUgY2FuIGJlIHJlc3RvcmVkKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3RpdGxlfAorCQkJZmVhdHVyZX0KKwlXaGVuIG9uLCB0aGUgdGl0bGUgb2YgdGhlIHdpbmRvdyB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YKKwkndGl0bGVzdHJpbmcnIChpZiBpdCBpcyBub3QgZW1wdHkpLCBvciB0bzoKKwkJZmlsZW5hbWUgWys9LV0gKHBhdGgpIC0gVklNCisJV2hlcmU6CisJCWZpbGVuYW1lCXRoZSBuYW1lIG9mIHRoZSBmaWxlIGJlaW5nIGVkaXRlZAorCQktCQlpbmRpY2F0ZXMgdGhlIGZpbGUgY2Fubm90IGJlIG1vZGlmaWVkLCAnbWEnIG9mZgorCQkrCQlpbmRpY2F0ZXMgdGhlIGZpbGUgd2FzIG1vZGlmaWVkCisJCT0JCWluZGljYXRlcyB0aGUgZmlsZSBpcyByZWFkLW9ubHkKKwkJPSsJCWluZGljYXRlcyB0aGUgZmlsZSBpcyByZWFkLW9ubHkgYW5kIG1vZGlmaWVkCisJCShwYXRoKQkJaXMgdGhlIHBhdGggb2YgdGhlIGZpbGUgYmVpbmcgZWRpdGVkCisJCS0gVklNCQl0aGUgc2VydmVyIG5hbWUgfHY6c2VydmVybmFtZXwgb3IgIlZJTSIKKwlPbmx5IHdvcmtzIGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBzZXR0aW5nIHdpbmRvdyB0aXRsZXMKKwkoY3VycmVudGx5IEFtaWdhIGNvbnNvbGUsIFdpbjMyIGNvbnNvbGUsIGFsbCBHVUkgdmVyc2lvbnMgYW5kCisJdGVybWluYWxzIHdpdGggYSBub24tIGVtcHR5ICd0X3RzJyBvcHRpb24gLSB0aGVzZSBhcmUgVW5peCB4dGVybSBhbmQKKwlpcmlzLWFuc2kgYnkgZGVmYXVsdCwgd2hlcmUgJ3RfdHMnIGlzIHRha2VuIGZyb20gdGhlIGJ1aWx0aW4gdGVybWNhcCkuCisJCQkJCQkJCSpYMTEqCisJV2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggSEFWRV9YMTEgZGVmaW5lZCwgdGhlIG9yaWdpbmFsIHRpdGxlIHdpbGwKKwliZSByZXN0b3JlZCBpZiBwb3NzaWJsZS4gIFRoZSBvdXRwdXQgb2YgIjp2ZXJzaW9uIiB3aWxsIGluY2x1ZGUgIitYMTEiCisJd2hlbiBIQVZFX1gxMSB3YXMgZGVmaW5lZCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgIi1YMTEiLiAgVGhpcyBhbHNvCisJd29ya3MgZm9yIHRoZSBpY29uIG5hbWUgfCdpY29uJ3wuCisJQnV0OiBXaGVuIFZpbSB3YXMgc3RhcnRlZCB3aXRoIHRoZSB8LVh8IGFyZ3VtZW50LCByZXN0b3JpbmcgdGhlIHRpdGxlCisJd2lsbCBub3Qgd29yayAoZXhjZXB0IGluIHRoZSBHVUkpLgorCUlmIHRoZSB0aXRsZSBjYW5ub3QgYmUgcmVzdG9yZWQsIGl0IGlzIHNldCB0byB0aGUgdmFsdWUgb2YgJ3RpdGxlb2xkJy4KKwlZb3UgbWlnaHQgd2FudCB0byByZXN0b3JlIHRoZSB0aXRsZSBvdXRzaWRlIG9mIFZpbSB0aGVuLgorCVdoZW4gdXNpbmcgYW4geHRlcm0gZnJvbSBhIHJlbW90ZSBtYWNoaW5lIHlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZDoKKwkgICAgcnNoIG1hY2hpbmVfbmFtZSB4dGVybSAtZGlzcGxheSAkRElTUExBWSAmCisJdGhlbiB0aGUgV0lORE9XSUQgZW52aXJvbm1lbnQgdmFyaWFibGUgc2hvdWxkIGJlIGluaGVyaXRlZCBhbmQgdGhlCisJdGl0bGUgb2YgdGhlIHdpbmRvdyBzaG91bGQgY2hhbmdlIGJhY2sgdG8gd2hhdCBpdCBzaG91bGQgYmUgYWZ0ZXIKKwlleGl0aW5nIFZpbS4KKworCQkJCQkJCQkqJ3RpdGxlbGVuJyoKKyd0aXRsZWxlbicJCW51bWJlcgkoZGVmYXVsdCA4NSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt0aXRsZXwKKwkJCWZlYXR1cmV9CisJR2l2ZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgJ2NvbHVtbnMnIHRvIHVzZSBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgd2luZG93CisJdGl0bGUuCVdoZW4gdGhlIHRpdGxlIGlzIGxvbmdlciwgb25seSB0aGUgZW5kIG9mIHRoZSBwYXRoIG5hbWUgaXMKKwlzaG93bi4JQSAnPCcgY2hhcmFjdGVyIGJlZm9yZSB0aGUgcGF0aCBuYW1lIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhpcy4KKwlVc2luZyBhIHBlcmNlbnRhZ2UgbWFrZXMgdGhpcyBhZGFwdCB0byB0aGUgd2lkdGggb2YgdGhlIHdpbmRvdy4gIEJ1dAorCWl0IHdvbid0IHdvcmsgcGVyZmVjdGx5LCBiZWNhdXNlIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKwlhdmFpbGFibGUgYWxzbyBkZXBlbmRzIG9uIHRoZSBmb250IHVzZWQgYW5kIG90aGVyIHRoaW5ncyBpbiB0aGUgdGl0bGUKKwliYXIuICBXaGVuICd0aXRsZWxlbicgaXMgemVybyB0aGUgZnVsbCBwYXRoIGlzIHVzZWQuICBPdGhlcndpc2UsCisJdmFsdWVzIGZyb20gMSB0byAzMDAwMCBwZXJjZW50IGNhbiBiZSB1c2VkLgorCSd0aXRsZWxlbicgaXMgYWxzbyB1c2VkIGZvciB0aGUgJ3RpdGxlc3RyaW5nJyBvcHRpb24uCisKKwkJCQkJCSondGl0bGVvbGQnKgorJ3RpdGxlb2xkJwkJc3RyaW5nCShkZWZhdWx0ICJUaGFua3MgZm9yIGZseWluZyBWaW0iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCt0aXRsZXwKKwkJCWZlYXR1cmV9CisJVGhpcyBvcHRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGUgd2luZG93IHRpdGxlIHdoZW4gZXhpdGluZyBWaW0gaWYgdGhlCisJb3JpZ2luYWwgdGl0bGUgY2Fubm90IGJlIHJlc3RvcmVkLiAgT25seSBoYXBwZW5zIGlmICd0aXRsZScgaXMgb24gb3IKKwkndGl0bGVzdHJpbmcnIGlzIG5vdCBlbXB0eS4KKwkJCQkJCSondGl0bGVzdHJpbmcnKgorJ3RpdGxlc3RyaW5nJwkJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3RpdGxlfAorCQkJZmVhdHVyZX0KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIG5vdCBlbXB0eSwgaXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgdGl0bGUgb2YgdGhlCisJd2luZG93LiAgVGhpcyBoYXBwZW5zIG9ubHkgd2hlbiB0aGUgJ3RpdGxlJyBvcHRpb24gaXMgb24uCisJT25seSB3b3JrcyBpZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgc2V0dGluZyB3aW5kb3cgdGl0bGVzIChjdXJyZW50bHkKKwlBbWlnYSBjb25zb2xlLCBXaW4zMiBjb25zb2xlLCBhbGwgR1VJIHZlcnNpb25zIGFuZCB0ZXJtaW5hbHMgd2l0aCBhCisJbm9uLWVtcHR5ICd0X3RzJyBvcHRpb24pLgorCVdoZW4gVmltIHdhcyBjb21waWxlZCB3aXRoIEhBVkVfWDExIGRlZmluZWQsIHRoZSBvcmlnaW5hbCB0aXRsZSB3aWxsCisJYmUgcmVzdG9yZWQgaWYgcG9zc2libGUgfFgxMXwuCisJV2hlbiB0aGlzIG9wdGlvbiBjb250YWlucyBwcmludGYtc3R5bGUgJyUnIGl0ZW1zLCB0aGV5IHdpbGwgYmUKKwlleHBhbmRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIHVzZWQgZm9yICdzdGF0dXNsaW5lJy4KKwlFeGFtcGxlOiA+CisgICAgOmF1dG8gQnVmRW50ZXIgKiBsZXQgJnRpdGxlc3RyaW5nID0gaG9zdG5hbWUoKSAuICIvIiAuIGV4cGFuZCgiJTpwIikKKyAgICA6c2V0IHRpdGxlIHRpdGxlc3RyaW5nPSU8JUYlPSVsLyVMLSVQIHRpdGxlbGVuPTcwCis8CVRoZSB2YWx1ZSBvZiAndGl0bGVsZW4nIGlzIHVzZWQgdG8gYWxpZ24gaXRlbXMgaW4gdGhlIG1pZGRsZSBvciByaWdodAorCW9mIHRoZSBhdmFpbGFibGUgc3BhY2UuCisJU29tZSBwZW9wbGUgcHJlZmVyIHRvIGhhdmUgdGhlIGZpbGUgbmFtZSBmaXJzdDogPgorICAgIDpzZXQgdGl0bGVzdHJpbmc9JXQlKFwgJU0lKSUoXCAoJXtleHBhbmQoXCIlOn46LjpoXCIpfSklKSUoXCAlYSUpCis8CU5vdGUgdGhlIHVzZSBvZiAiJXsgfSIgYW5kIGFuIGV4cHJlc3Npb24gdG8gZ2V0IHRoZSBwYXRoIG9mIHRoZSBmaWxlLAorCXdpdGhvdXQgdGhlIGZpbGUgbmFtZS4JVGhlICIlKCAlKSIgY29uc3RydWN0cyBhcmUgdXNlZCB0byBhZGQgYQorCXNlcGFyYXRpbmcgc3BhY2Ugb25seSB3aGVuIG5lZWRlZC4KKwlOT1RFOiBVc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIGluICd0aXRsZXN0cmluZycgbWF5IGNhdXNlIHRoZSBkaXNwbGF5CisJdG8gYmUgZ2FyYmxlZCAoZS5nLiwgd2hlbiBpdCBjb250YWlucyBhIENSIG9yIE5MIGNoYXJhY3RlcikuCisJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3N0YXR1c2xpbmV8IGZlYXR1cmV9CisKKwkJCQkqJ3Rvb2xiYXInKiAqJ3RiJyoKKyd0b29sYmFyJyAndGInCQlzdHJpbmcJKGRlZmF1bHQgImljb25zLHRvb2x0aXBzIikKKwkJCWdsb2JhbAorCQkJe29ubHkgZm9yIHwrR1VJX0dUS3wsIHwrR1VJX0F0aGVuYXwsIHwrR1VJX01vdGlmfCBhbmQKKwkJCXwrR1VJX1Bob3Rvbnx9CisJVGhlIGNvbnRlbnRzIG9mIHRoaXMgb3B0aW9uIGNvbnRyb2xzIHZhcmlvdXMgdG9vbGJhciBzZXR0aW5ncy4JVGhlCisJcG9zc2libGUgdmFsdWVzIGFyZToKKwkJaWNvbnMJCVRvb2xiYXIgYnV0dG9ucyBhcmUgc2hvd24gd2l0aCBpY29ucy4KKwkJdGV4dAkJVG9vbGJhciBidXR0b25zIHNob3duIHdpdGggdGV4dC4KKwkJaG9yaXoJCUljb24gYW5kIHRleHQgb2YgYSB0b29sYmFyIGJ1dHRvbiBhcmUKKwkJCQlob3Jpem9udGFsbHkgYXJyYW5nZWQuCXtvbmx5IGluIEdUSysgMiBHVUl9CisJCXRvb2x0aXBzCVRvb2x0aXBzIGFyZSBhY3RpdmUgZm9yIHRvb2xiYXIgYnV0dG9ucy4KKwlUb29sdGlwcyByZWZlciB0byB0aGUgcG9wdXAgaGVscCB0ZXh0IHdoaWNoIGFwcGVhcnMgYWZ0ZXIgdGhlIG1vdXNlCisJY3Vyc29yIGlzIHBsYWNlZCBvdmVyIGEgdG9vbGJhciBidXR0b24gZm9yIGEgYnJpZWYgbW9tZW50LgorCisJSWYgeW91IHdhbnQgdGhlIHRvb2xiYXIgdG8gYmUgc2hvd24gd2l0aCBpY29ucyBhcyB3ZWxsIGFzIHRleHQsIGRvIHRoZQorCWZvbGxvd2luZzogPgorCQk6c2V0IHRiPWljb25zLHRleHQKKzwJTW90aWYgYW5kIEF0aGVuYSBjYW5ub3QgZGlzcGxheSBpY29ucyBhbmQgdGV4dCBhdCB0aGUgc2FtZSB0aW1lLiAgVGhleQorCXdpbGwgc2hvdyBpY29ucyBpZiBib3RoIGFyZSByZXF1ZXN0ZWQuCisKKwlJZiBub25lIG9mIHRoZSBzdHJpbmdzIHNwZWNpZmllZCBpbiAndG9vbGJhcicgYXJlIHZhbGlkIG9yIGlmCisJJ3Rvb2xiYXInIGlzIGVtcHR5LCB0aGlzIG9wdGlvbiBpcyBpZ25vcmVkLiAgSWYgeW91IHdhbnQgdG8gZGlzYWJsZQorCXRoZSB0b29sYmFyLCB5b3UgbmVlZCB0byBzZXQgdGhlICdndWlvcHRpb25zJyBvcHRpb24uICBGb3IgZXhhbXBsZTogPgorCQk6c2V0IGd1aW9wdGlvbnMtPVQKKzwJQWxzbyBzZWUgfGd1aS10b29sYmFyfC4KKworCQkJCQkJKid0b29sYmFyaWNvbnNpemUnKiAqJ3RiaXMnKgorJ3Rvb2xiYXJpY29uc2l6ZScgJ3RiaXMnCXN0cmluZwkoZGVmYXVsdCAic21hbGwiKQorCQkJCWdsb2JhbAorCQkJCXtub3QgaW4gVml9CisJCQkJe29ubHkgaW4gdGhlIEdUSysgMiBHVUl9CisJQ29udHJvbHMgdGhlIHNpemUgb2YgdG9vbGJhciBpY29ucy4gIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOgorCQl0aW55CQlVc2UgdGlueSB0b29sYmFyIGljb25zLgorCQlzbWFsbAkJVXNlIHNtYWxsIHRvb2xiYXIgaWNvbnMgKGRlZmF1bHQpLgorCQltZWRpdW0JCVVzZSBtZWRpdW0tc2l6ZWQgdG9vbGJhciBpY29ucy4KKwkJbGFyZ2UJCVVzZSBsYXJnZSB0b29sYmFyIGljb25zLgorCVRoZSBleGFjdCBkaW1lbnNpb25zIGluIHBpeGVscyBvZiB0aGUgdmFyaW91cyBpY29uIHNpemVzIGRlcGVuZCBvbgorCXRoZSBjdXJyZW50IHRoZW1lLiAgQ29tbW9uIGRpbWVuc2lvbnMgYXJlIGxhcmdlPTMyeDMyLCBtZWRpdW09MjR4MjQsCisJc21hbGw9MjB4MjAgYW5kIHRpbnk9MTZ4MTYuCisKKwlJZiAndG9vbGJhcmljb25zaXplJyBpcyBlbXB0eSwgdGhlIGdsb2JhbCBkZWZhdWx0IHNpemUgYXMgZGV0ZXJtaW5lZAorCWJ5IHVzZXIgcHJlZmVyZW5jZXMgb3IgdGhlIGN1cnJlbnQgdGhlbWUgaXMgdXNlZC4KKworCQkJICAgICAqJ3R0eWJ1aWx0aW4nKiAqJ3RiaScqIConbm90dHlidWlsdGluJyogKidub3RiaScqCisndHR5YnVpbHRpbicgJ3RiaScJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG9uLCB0aGUgYnVpbHRpbiB0ZXJtY2FwcyBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBleHRlcm5hbCBvbmVzLgorCVdoZW4gb2ZmIHRoZSBidWlsdGluIHRlcm1jYXBzIGFyZSBzZWFyY2hlZCBhZnRlciB0aGUgZXh0ZXJuYWwgb25lcy4KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIGNoYW5nZWQsIHlvdSBzaG91bGQgc2V0IHRoZSAndGVybScgb3B0aW9uIG5leHQgZm9yCisJdGhlIGNoYW5nZSB0byB0YWtlIGVmZmVjdCwgZm9yIGV4YW1wbGU6ID4KKwkJOnNldCBub3RiaSB0ZXJtPSRURVJNCis8CVNlZSBhbHNvIHx0ZXJtY2FwfC4KKwlSYXRpb25hbGU6IFRoZSBkZWZhdWx0IGZvciB0aGlzIG9wdGlvbiBpcyAib24iLCBiZWNhdXNlIHRoZSBidWlsdGluCisJdGVybWNhcCBlbnRyaWVzIGFyZSBnZW5lcmFsbHkgYmV0dGVyIChtYW55IHN5c3RlbXMgY29udGFpbiBmYXVsdHkKKwl4dGVybSBlbnRyaWVzLi4uKS4KKworCQkJCSAgICAgKid0dHlmYXN0JyogKid0ZicqIConbm90dHlmYXN0JyogKidub3RmJyoKKyd0dHlmYXN0JyAndGYnCQlib29sZWFuCShkZWZhdWx0IG9mZiwgb24gd2hlbiAndGVybScgaXMgeHRlcm0sIGhwdGVybSwKKwkJCQkJc3VuLWNtZCwgc2NyZWVuLCByeHZ0LCBkdHRlcm0gb3IKKwkJCQkJaXJpcy1hbnNpOyBhbHNvIG9uIHdoZW4gcnVubmluZyBWaW0gaW4KKwkJCQkJYSBET1MgY29uc29sZSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlJbmRpY2F0ZXMgYSBmYXN0IHRlcm1pbmFsIGNvbm5lY3Rpb24uICBNb3JlIGNoYXJhY3RlcnMgd2lsbCBiZSBzZW50IHRvCisJdGhlIHNjcmVlbiBmb3IgcmVkcmF3aW5nLCBpbnN0ZWFkIG9mIHVzaW5nIGluc2VydC9kZWxldGUgbGluZQorCWNvbW1hbmRzLiAgSW1wcm92ZXMgc21vb3RobmVzcyBvZiByZWRyYXdpbmcgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUKKwl3aW5kb3dzIGFuZCB0aGUgdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydCBhIHNjcm9sbGluZyByZWdpb24uCisJQWxzbyBlbmFibGVzIHRoZSBleHRyYSB3cml0aW5nIG9mIGNoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZiBlYWNoIHNjcmVlbgorCWxpbmUgZm9yIGxpbmVzIHRoYXQgd3JhcC4gIFRoaXMgaGVscHMgd2hlbiB1c2luZyBjb3B5L3Bhc3RlIHdpdGggdGhlCisJbW91c2UgaW4gYW4geHRlcm0gYW5kIG90aGVyIHRlcm1pbmFscy4KKworCQkJCQkJKid0dHltb3VzZScqICondHR5bScqCisndHR5bW91c2UnICd0dHltJwlzdHJpbmcJKGRlZmF1bHQgZGVwZW5kcyBvbiAndGVybScpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBpbiBVbml4IGFuZCBWTVMsIGRvZXNuJ3Qgd29yayBpbiB0aGUgR1VJOyBub3QKKwkJCWF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgfCttb3VzZXx9CisJTmFtZSBvZiB0aGUgdGVybWluYWwgdHlwZSBmb3Igd2hpY2ggbW91c2UgY29kZXMgYXJlIHRvIGJlIHJlY29nbml6ZWQuCisJQ3VycmVudGx5IHRoZXNlIHRocmVlIHN0cmluZ3MgYXJlIHZhbGlkOgorCQkJCQkJCSp4dGVybS1tb3VzZSoKKwkgICB4dGVybQl4dGVybS1saWtlIG1vdXNlIGhhbmRsaW5nLiAgVGhlIG1vdXNlIGdlbmVyYXRlcworCQkJIjxFc2M+W01zY3IiLCB3aGVyZSAic2NyIiBpcyB0aHJlZSBieXRlczoKKwkJCQkicyIgID0gYnV0dG9uIHN0YXRlCisJCQkJImMiICA9IGNvbHVtbiBwbHVzIDMzCisJCQkJInIiICA9IHJvdyBwbHVzIDMzCisJICAgeHRlcm0yCVdvcmtzIGxpa2UgInh0ZXJtIiwgYnV0IHdpdGggdGhlIHh0ZXJtIHJlcG9ydGluZyB0aGUKKwkJCW1vdXNlIHBvc2l0aW9uIHdoaWxlIHRoZSBtb3VzZSBpcyBkcmFnZ2VkLiAgVGhpcyB3b3JrcworCQkJbXVjaCBmYXN0ZXIgYW5kIG1vcmUgcHJlY2lzZS4gIFlvdXIgeHRlcm0gbXVzdCBhdAorCQkJbGVhc3QgYXQgcGF0Y2hsZXZlbCA4OAkvIFhGcmVlIDMuMy4zIGZvciB0aGlzIHRvCisJCQl3b3JrLiAgU2VlIGJlbG93IGZvciBob3cgVmltIGRldGVjdHMgdGhpcworCQkJYXV0b21hdGljYWxseS4KKwkJCQkJCQkqbmV0dGVybS1tb3VzZSoKKwkgICBuZXR0ZXJtCU5ldFRlcm0gbW91c2UgaGFuZGxpbmcuICBUaGUgbW91c2UgZ2VuZXJhdGVzCisJCQkiPEVzYz59cixjPENSPiIsIHdoZXJlICJyLGMiIGFyZSB0d28gZGVjaW1hbCBudW1iZXJzCisJCQlmb3IgdGhlIHJvdyBhbmQgY29sdW1uLgorCQkJCQkJCSpkZWMtbW91c2UqCisJICAgZGVjCQlERUMgdGVybWluYWwgbW91c2UgaGFuZGxpbmcuICBUaGUgbW91c2UgZ2VuZXJhdGVzIGEKKwkJCXJhdGhlciBjb21wbGV4IHNlcXVlbmNlLCBzdGFydGluZyB3aXRoICI8RXNjPlsiLgorCQkJCQkJCSpqc2J0ZXJtLW1vdXNlKgorCSAgIGpzYnRlcm0JSlNCIHRlcm0gbW91c2UgaGFuZGxpbmcuCisJCQkJCQkJKnB0ZXJtLW1vdXNlKgorCSAgIHB0ZXJtCVFOWCBwdGVybSBtb3VzZSBoYW5kbGluZy4KKworCVRoZSBtb3VzZSBoYW5kbGluZyBtdXN0IGJlIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIHwrbW91c2VfeHRlcm18CisJfCttb3VzZV9kZWN8IHwrbW91c2VfbmV0dGVybXwuCisJT25seSAieHRlcm0iKDIpIGlzIHJlYWxseSByZWNvZ25pemVkLiAgTmV0VGVybSBtb3VzZSBjb2RlcyBhcmUgYWx3YXlzCisJcmVjb2duaXplZCwgaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUuICBERUMgdGVybWluYWwgbW91c2UgY29kZXMKKwlhcmUgcmVjb2duaXplZCBpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSwgYW5kICd0dHltb3VzZScgaXMgbm90CisJInh0ZXJtIiAoYmVjYXVzZSB0aGUgeHRlcm0gYW5kIGRlYyBtb3VzZSBjb2RlcyBjb25mbGljdCkuCisJVGhpcyBvcHRpb24gaXMgYXV0b21hdGljYWxseSBzZXQgdG8gInh0ZXJtIiwgd2hlbiB0aGUgJ3Rlcm0nIG9wdGlvbiBpcworCXNldCB0byBhIG5hbWUgdGhhdCBzdGFydHMgd2l0aCAieHRlcm0iLCBhbmQgJ3R0eW1vdXNlJyBpcyBub3QgInh0ZXJtIgorCW9yICJ4dGVybTIiIGFscmVhZHkuICBUaGUgbWFpbiB1c2Ugb2YgdGhpcyBvcHRpb24gaXMgdG8gc2V0IGl0IHRvCisJInh0ZXJtIiwgd2hlbiB0aGUgdGVybWluYWwgbmFtZSBkb2Vzbid0IHN0YXJ0IHdpdGggInh0ZXJtIiwgYnV0IGl0IGNhbgorCWhhbmRsZSB4dGVybSBtb3VzZSBjb2Rlcy4KKwlUaGUgInh0ZXJtMiIgdmFsdWUgd2lsbCBiZSBzZXQgaWYgdGhlIHh0ZXJtIHZlcnNpb24gaXMgcmVwb3J0ZWQgdG8gYmUKKwk5NSBvZiBoaWdoZXIuICBUaGlzIG9ubHkgd29ya3Mgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3Rlcm1yZXNwb25zZXwKKwlmZWF0dXJlIGFuZCBpZiB8dF9SVnwgaXMgc2V0IHRvIHRoZSBlc2NhcGUgc2VxdWVuY2UgdG8gcmVxdWVzdCB0aGUKKwl4dGVybSB2ZXJzaW9uIG51bWJlci4gIE90aGVyd2lzZSAieHRlcm0yIiBtdXN0IGJlIHNldCBleHBsaWNpdGx5LgorCUlmIHlvdSBkbyBub3Qgd2FudCAndHR5bW91c2UnIHRvIGJlIHNldCB0byAieHRlcm0yIiBhdXRvbWF0aWNhbGx5LCBzZXQKKwl0X1JWIHRvIGFuIGVtcHR5IHN0cmluZzogPgorCQk6c2V0IHRfUlY9Cis8CisJCQkJCQkqJ3R0eXNjcm9sbCcqICondHNsJyoKKyd0dHlzY3JvbGwnICd0c2wnCW51bWJlcgkoZGVmYXVsdCA5OTkpCisJCQlnbG9iYWwKKwlNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBzY3JvbGwgdGhlIHNjcmVlbi4gIElmIHRoZXJlIGFyZSBtb3JlIGxpbmVzCisJdG8gc2Nyb2xsIHRoZSB3aW5kb3cgaXMgcmVkcmF3bi4gIEZvciB0ZXJtaW5hbHMgd2hlcmUgc2Nyb2xsaW5nIGlzCisJdmVyeSBzbG93IGFuZCByZWRyYXdpbmcgaXMgbm90IHNsb3cgdGhpcyBjYW4gYmUgc2V0IHRvIGEgc21hbGwgbnVtYmVyLAorCWUuZy4sIDMsIHRvIHNwZWVkIHVwIGRpc3BsYXlpbmcuCisKKwkJCQkJCSondHR5dHlwZScqICondHR5JyoKKyd0dHl0eXBlJyAndHR5JwkJc3RyaW5nCShkZWZhdWx0IGZyb20gJFRFUk0pCisJCQlnbG9iYWwKKwlBbGlhcyBmb3IgJ3Rlcm0nLCBzZWUgYWJvdmUuCisKKwkJCQkJCSondW5kb2xldmVscycqICondWwnKgorJ3VuZG9sZXZlbHMnICd1bCcJbnVtYmVyCShkZWZhdWx0IDEwMCwgMTAwMCBmb3IgVW5peCwgVk1TLAorCQkJCQkJV2luMzIgYW5kIE9TLzIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTWF4aW11bSBudW1iZXIgb2YgY2hhbmdlcyB0aGF0IGNhbiBiZSB1bmRvbmUuICBTaW5jZSB1bmRvIGluZm9ybWF0aW9uCisJaXMga2VwdCBpbiBtZW1vcnksIGhpZ2hlciBudW1iZXJzIHdpbGwgY2F1c2UgbW9yZSBtZW1vcnkgdG8gYmUgdXNlZAorCShuZXZlcnRoZWxlc3MsIGEgc2luZ2xlIGNoYW5nZSBjYW4gdXNlIGFuIHVubGltaXRlZCBhbW91bnQgb2YgbWVtb3J5KS4KKwlTZXQgdG8gMCBmb3IgVmkgY29tcGF0aWJpbGl0eTogT25lIGxldmVsIG9mIHVuZG8gYW5kICJ1IiB1bmRvZXMKKwlpdHNlbGY6ID4KKwkJc2V0IHVsPTAKKzwJQnV0IHlvdSBjYW4gYWxzbyBnZXQgVmkgY29tcGF0aWJpbGl0eSBieSBpbmNsdWRpbmcgdGhlICd1JyBmbGFnIGluCisJJ2Nwb3B0aW9ucycsIGFuZCBzdGlsbCBiZSBhYmxlIHRvIHVzZSBDVFJMLVIgdG8gcmVwZWF0IHVuZG8uCisJU2V0IHRvIGEgbmVnYXRpdmUgbnVtYmVyIGZvciBubyB1bmRvIGF0IGFsbDogPgorCQlzZXQgdWw9LTEKKzwJVGhpcyBoZWxwcyB3aGVuIHlvdSBydW4gb3V0IG9mIG1lbW9yeSBmb3IgYSBzaW5nbGUgY2hhbmdlLgorCUFsc28gc2VlIHx1bmRvLXR3by13YXlzfC4KKworCQkJCQkJKid1cGRhdGVjb3VudCcqICondWMnKgorJ3VwZGF0ZWNvdW50JyAndWMnCW51bWJlcgkoZGVmYXVsdDogMjAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUFmdGVyIHR5cGluZyB0aGlzIG1hbnkgY2hhcmFjdGVycyB0aGUgc3dhcCBmaWxlIHdpbGwgYmUgd3JpdHRlbiB0bworCWRpc2suICBXaGVuIHplcm8sIG5vIHN3YXAgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgYXQgYWxsIChzZWUgY2hhcHRlciBvbgorCXJlY292ZXJ5IHxjcmFzaC1yZWNvdmVyeXwpLiAgJ3VwZGF0ZWNvdW50JyBpcyBzZXQgdG8gemVybyBieSBzdGFydGluZworCVZpbSB3aXRoIHRoZSAiLW4iIG9wdGlvbiwgc2VlIHxzdGFydHVwfC4gIFdoZW4gZWRpdGluZyBpbiByZWFkb25seQorCW1vZGUgdGhpcyBvcHRpb24gd2lsbCBiZSBpbml0aWFsaXplZCB0byAxMDAwMC4KKwlUaGUgc3dhcGZpbGUgY2FuIGJlIGRpc2FibGVkIHBlciBidWZmZXIgd2l0aCB8J3N3YXBmaWxlJ3wuCisJV2hlbiAndXBkYXRlY291bnQnIGlzIHNldCBmcm9tIHplcm8gdG8gbm9uLXplcm8sIHN3YXAgZmlsZXMgYXJlCisJY3JlYXRlZCBmb3IgYWxsIGJ1ZmZlcnMgdGhhdCBoYXZlICdzd2FwZmlsZScgc2V0LiAgV2hlbiAndXBkYXRlY291bnQnCisJaXMgc2V0IHRvIHplcm8sIGV4aXN0aW5nIHN3YXAgZmlsZXMgYXJlIG5vdCBkZWxldGVkLgorCUFsc28gc2VlIHwnc3dhcHN5bmMnfC4KKwlUaGlzIG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiBidWZmZXJzIHdoZXJlIHwnYnVmdHlwZSd8IGlzICJub2ZpbGUiCisJb3IgIm5vd3JpdGUiLgorCisJCQkJCQkqJ3VwZGF0ZXRpbWUnKiAqJ3V0JyoKKyd1cGRhdGV0aW1lJyAndXQnCW51bWJlcgkoZGVmYXVsdCA0MDAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUlmIHRoaXMgbWFueSBtaWxsaXNlY29uZHMgbm90aGluZyBpcyB0eXBlZCB0aGUgc3dhcCBmaWxlIHdpbGwgYmUKKwl3cml0dGVuIHRvIGRpc2sgKHNlZSB8Y3Jhc2gtcmVjb3Zlcnl8KS4gIEFsc28gdXNlZCBmb3IgdGhlCisJfEN1cnNvckhvbGR8IGF1dG9jb21tYW5kIGV2ZW50LgorCisJCQkJCQkqJ3ZlcmJvc2UnKiAqJ3ZicycqCisndmVyYm9zZScgJ3ZicycJCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpLCBhbHRob3VnaCBzb21lIHZlcnNpb25zIGhhdmUgYSBib29sZWFuCisJCQl2ZXJib3NlIG9wdGlvbn0KKwlXaGVuIGJpZ2dlciB0aGFuIHplcm8sIFZpbSB3aWxsIGdpdmUgbWVzc2FnZXMgYWJvdXQgd2hhdCBpdCBpcyBkb2luZy4KKwlDdXJyZW50bHksIHRoZXNlIG1lc3NhZ2VzIGFyZSBnaXZlbjoKKwk+PSAxCVdoZW4gdGhlIHZpbWluZm8gZmlsZSBpcyByZWFkIG9yIHdyaXR0ZW4uCisJPj0gMglXaGVuIGEgZmlsZSBpcyAiOnNvdXJjZSInZWQuCisJPj0gNQlFdmVyeSBzZWFyY2hlZCB0YWdzIGZpbGUuCisJPj0gOAlGaWxlcyBmb3Igd2hpY2ggYSBncm91cCBvZiBhdXRvY29tbWFuZHMgaXMgZXhlY3V0ZWQuCisJPj0gOQlFdmVyeSBleGVjdXRlZCBhdXRvY29tbWFuZC4KKwk+PSAxMglFdmVyeSBleGVjdXRlZCBmdW5jdGlvbi4KKwk+PSAxMwlXaGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24sIGNhdWdodCwgZmluaXNoZWQsIG9yIGRpc2NhcmRlZC4KKwk+PSAxNAlBbnl0aGluZyBwZW5kaW5nIGluIGEgIjpmaW5hbGx5IiBjbGF1c2UuCisJPj0gMTUJRXZlcnkgZXhlY3V0ZWQgRXggY29tbWFuZCAodHJ1bmNhdGVkIGF0IDIwMCBjaGFyYWN0ZXJzKS4KKworCVRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSAiLVYiIGFyZ3VtZW50LiAgU2VlIHwtVnwuCisJVGhpcyBvcHRpb24gaXMgYWxzbyBzZXQgYnkgdGhlIHw6dmVyYm9zZXwgY29tbWFuZC4KKworCQkJCQkJKid2aWV3ZGlyJyogKid2ZGlyJyoKKyd2aWV3ZGlyJyAndmRpcicJc3RyaW5nCShkZWZhdWx0IGZvciBBbWlnYSwgTVMtRE9TLCBPUy8yIGFuZCBXaW4zMjoKKwkJCQkJCQkgIiRWSU0vdmltZmlsZXMvdmlldyIsCisJCQkJIGZvciBVbml4OiAifi8udmltL3ZpZXciLAorCQkJCSBmb3IgTWFjaW50b3NoOiAiJFZJTTp2aW1maWxlczp2aWV3IgorCQkJCSBmb3IgVk1TOiAic3lzJGxvZ2luOnZpbWZpbGVzL3ZpZXciCisJCQkJIGZvciBSaXNjT1M6ICJDaG9pY2VzOnZpbWZpbGVzL3ZpZXciKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArbWtzZXNzaW9uCisJCQlmZWF0dXJlfQorCU5hbWUgb2YgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBmaWxlcyBmb3IgfDpta3ZpZXd8LgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKid2aWV3b3B0aW9ucycqICondm9wJyoKKyd2aWV3b3B0aW9ucycgJ3ZvcCcJc3RyaW5nCShkZWZhdWx0OiAiZm9sZHMsb3B0aW9ucyxjdXJzb3IiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArbWtzZXNzaW9uCisJCQlmZWF0dXJlfQorCUNoYW5nZXMgdGhlIGVmZmVjdCBvZiB0aGUgfDpta3ZpZXd8IGNvbW1hbmQuICBJdCBpcyBhIGNvbW1hIHNlcGFyYXRlZAorCWxpc3Qgb2Ygd29yZHMuCUVhY2ggd29yZCBlbmFibGVzIHNhdmluZyBhbmQgcmVzdG9yaW5nIHNvbWV0aGluZzoKKwkgICB3b3JkCQlzYXZlIGFuZCByZXN0b3JlIH4KKwkgICBjdXJzb3IJY3Vyc29yIHBvc2l0aW9uIGluIGZpbGUgYW5kIGluIHdpbmRvdworCSAgIGZvbGRzCW1hbnVhbGx5IGNyZWF0ZWQgZm9sZHMsIG9wZW5lZC9jbG9zZWQgZm9sZHMgYW5kIGxvY2FsCisJCQlmb2xkIG9wdGlvbnMKKwkgICBvcHRpb25zCW9wdGlvbnMgYW5kIG1hcHBpbmdzIGxvY2FsIHRvIGEgd2luZG93IG9yIGJ1ZmZlciAobm90CisJCQlnbG9iYWwgdmFsdWVzIGZvciBsb2NhbCBvcHRpb25zKQorCSAgIHNsYXNoCWJhY2tzbGFzaGVzIGluIGZpbGUgbmFtZXMgcmVwbGFjZWQgd2l0aCBmb3J3YXJkCisJCQlzbGFzaGVzCisJICAgdW5peAkJd2l0aCBVbml4IGVuZC1vZi1saW5lIGZvcm1hdCAoc2luZ2xlIDxOTD4pLCBldmVuIHdoZW4KKwkJCW9uIFdpbmRvd3Mgb3IgRE9TCisKKwkic2xhc2giIGFuZCAidW5peCIgYXJlIHVzZWZ1bCBvbiBXaW5kb3dzIHdoZW4gc2hhcmluZyB2aWV3IGZpbGVzCisJd2l0aCBVbml4LiAgVGhlIFVuaXggdmVyc2lvbiBvZiBWaW0gY2Fubm90IHNvdXJjZSBkb3MgZm9ybWF0IHNjcmlwdHMsCisJYnV0IHRoZSBXaW5kb3dzIHZlcnNpb24gb2YgVmltIGNhbiBzb3VyY2UgdW5peCBmb3JtYXQgc2NyaXB0cy4KKworCQkJCSondmltaW5mbycqICondmknKiAqRTUyNiogKkU1MjcqICpFNTI4KgorJ3ZpbWluZm8nICd2aScJCXN0cmluZwkoVmkgZGVmYXVsdDogIiIsIFZpbSBkZWZhdWx0IGZvciBNUy1ET1MsCisJCQkJICAgV2luZG93cyBhbmQgT1MvMjogJzIwLDw1MCxzMTAsaCxyQTosckI6LAorCQkJCSAgIGZvciBBbWlnYTogJzIwLDw1MCxzMTAsaCxyZGYwOixyZGYxOixyZGYyOgorCQkJCSAgIGZvciBvdGhlcnM6ICcyMCw8NTAsczEwLGgpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICB8K3ZpbWluZm98CisJCQlmZWF0dXJlfQorCVdoZW4gbm9uLWVtcHR5LCB0aGUgdmltaW5mbyBmaWxlIGlzIHJlYWQgdXBvbiBzdGFydHVwIGFuZCB3cml0dGVuCisJd2hlbiBleGl0aW5nIFZpbSAoc2VlIHx2aW1pbmZvLWZpbGV8KS4JVGhlIHN0cmluZyBzaG91bGQgYmUgYSBjb21tYQorCXNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtZXRlcnMsIGVhY2ggY29uc2lzdGluZyBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIKKwlpZGVudGlmeWluZyB0aGUgcGFydGljdWxhciBwYXJhbWV0ZXIsIGZvbGxvd2VkIGJ5IGEgbnVtYmVyIG9yIHN0cmluZworCXdoaWNoIHNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhhdCBwYXJhbWV0ZXIuICBJZiBhIHBhcnRpY3VsYXIKKwljaGFyYWN0ZXIgaXMgbGVmdCBvdXQsIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUgaXMgdXNlZCBmb3IgdGhhdAorCXBhcmFtZXRlci4gIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHRoZSBpZGVudGlmeWluZyBjaGFyYWN0ZXJzIGFuZAorCXRoZSBlZmZlY3Qgb2YgdGhlaXIgdmFsdWUuCisJQ0hBUglWQUxVRQl+CisJIQlXaGVuIGluY2x1ZGVkLCBzYXZlIGFuZCByZXN0b3JlIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBzdGFydAorCQl3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGFuZCBkb24ndCBjb250YWluIGEgbG93ZXJjYXNlCisJCWxldHRlci4gIFRodXMgIktFRVBUSElTIGFuZCAiS19MX00iIGFyZSBzdG9yZWQsIGJ1dCAiS2VlcFRoaXMiCisJCWFuZCAiX0tfTF9NIiBhcmUgbm90LgorCSIJTWF4aW11bSBudW1iZXIgb2YgbGluZXMgc2F2ZWQgZm9yIGVhY2ggcmVnaXN0ZXIuICBPbGQgbmFtZSBvZgorCQl0aGUgJzwnIGl0ZW0sIHdpdGggdGhlIGRpc2FkdmFudGFnZSB0aGF0IHlvdSBuZWVkIHRvIHB1dCBhCisJCWJhY2tzbGFzaCBiZWZvcmUgdGhlICIsIG90aGVyd2lzZSBpdCB3aWxsIGJlIHJlY29nbml6ZWQgYXMgdGhlCisJCXN0YXJ0IG9mIGEgY29tbWVudCEKKwklCVdoZW4gaW5jbHVkZWQsIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGJ1ZmZlciBsaXN0LiAgSWYgVmltIGlzCisJCXN0YXJ0ZWQgd2l0aCBhIGZpbGUgbmFtZSBhcmd1bWVudCwgdGhlIGJ1ZmZlciBsaXN0IGlzIG5vdAorCQlyZXN0b3JlZC4gIElmIFZpbSBpcyBzdGFydGVkIHdpdGhvdXQgYSBmaWxlIG5hbWUgYXJndW1lbnQsIHRoZQorCQlidWZmZXIgbGlzdCBpcyByZXN0b3JlZCBmcm9tIHRoZSB2aW1pbmZvIGZpbGUuCUJ1ZmZlcnMKKwkJd2l0aG91dCBhIGZpbGUgbmFtZSBhbmQgYnVmZmVycyBmb3IgaGVscCBmaWxlcyBhcmUgbm90IHdyaXR0ZW4KKwkJdG8gdGhlIHZpbWluZm8gZmlsZS4KKwknCU1heGltdW0gbnVtYmVyIG9mIHByZXZpb3VzbHkgZWRpdGVkIGZpbGVzIGZvciB3aGljaCB0aGUgbWFya3MKKwkJYXJlIHJlbWVtYmVyZWQuICBUaGlzIHBhcmFtZXRlciBtdXN0IGFsd2F5cyBiZSBpbmNsdWRlZCB3aGVuCisJCSd2aW1pbmZvJyBpcyBub24tZW1wdHkuCisJCUluY2x1ZGluZyB0aGlzIGl0ZW0gYWxzbyBtZWFucyB0aGF0IHRoZSB8anVtcGxpc3R8IGFuZCB0aGUKKwkJfGNoYW5nZWxpc3R8IGFyZSBzdG9yZWQgaW4gdGhlIHZpbWluZm8gZmlsZS4KKwkvCU1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzZWFyY2ggcGF0dGVybiBoaXN0b3J5IHRvIGJlCisJCXNhdmVkLglJZiBub24temVybywgdGhlbiB0aGUgcHJldmlvdXMgc2VhcmNoIGFuZCBzdWJzdGl0dXRlCisJCXBhdHRlcm5zIGFyZSBhbHNvIHNhdmVkLiAgV2hlbiBub3QgaW5jbHVkZWQsIHRoZSB2YWx1ZSBvZgorCQknaGlzdG9yeScgaXMgdXNlZC4KKwk6CU1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBjb21tYW5kLWxpbmUgaGlzdG9yeSB0byBiZQorCQlzYXZlZC4JV2hlbiBub3QgaW5jbHVkZWQsIHRoZSB2YWx1ZSBvZiAnaGlzdG9yeScgaXMgdXNlZC4KKwk8CU1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHNhdmVkIGZvciBlYWNoIHJlZ2lzdGVyLiAgSWYgemVybyB0aGVuCisJCXJlZ2lzdGVycyBhcmUgbm90IHNhdmVkLiAgV2hlbiBub3QgaW5jbHVkZWQsIGFsbCBsaW5lcyBhcmUKKwkJc2F2ZWQuICAnIicgaXMgdGhlIG9sZCBuYW1lIGZvciB0aGlzIGl0ZW0uCisJCUFsc28gc2VlIHRoZSAncycgaXRlbSBiZWxvdzogbGltaXQgc3BlY2lmaWVkIGluIEtieXRlLgorCUAJTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGlucHV0LWxpbmUgaGlzdG9yeSB0byBiZQorCQlzYXZlZC4JV2hlbiBub3QgaW5jbHVkZWQsIHRoZSB2YWx1ZSBvZiAnaGlzdG9yeScgaXMgdXNlZC4KKwljCVdoZW4gaW5jbHVkZWQsIGNvbnZlcnQgdGhlIHRleHQgaW4gdGhlIHZpbWluZm8gZmlsZSBmcm9tIHRoZQorCQknZW5jb2RpbmcnIHVzZWQgd2hlbiB3cml0aW5nIHRoZSBmaWxlIHRvIHRoZSBjdXJyZW50CisJCSdlbmNvZGluZycuIFNlZSB8dmltaW5mby1lbmNvZGluZ3wuCisJZglXaGV0aGVyIGZpbGUgbWFya3MgbmVlZCB0byBiZSBzdG9yZWQuICBJZiB6ZXJvLCBmaWxlIG1hcmtzICgnMAorCQl0byAnOSwgJ0EgdG8gJ1opIGFyZSBub3Qgc3RvcmVkLiAgV2hlbiBub3QgcHJlc2VudCBvciB3aGVuCisJCW5vbi16ZXJvLCB0aGV5IGFyZSBhbGwgc3RvcmVkLgknMCBpcyB1c2VkIGZvciB0aGUgY3VycmVudAorCQljdXJzb3IgcG9zaXRpb24gKHdoZW4gZXhpdGluZyBvciB3aGVuIGRvaW5nICI6d3ZpbWluZm8iKS4KKwloCURpc2FibGUgdGhlIGVmZmVjdCBvZiAnaGxzZWFyY2gnIHdoZW4gbG9hZGluZyB0aGUgdmltaW5mbworCQlmaWxlLiAgV2hlbiBub3QgaW5jbHVkZWQsIGl0IGRlcGVuZHMgb24gd2hldGhlciAiOm5vaGxzZWFyY2giCisJCWhhcyBiZWVuIHVzZWQgc2luY2UgdGhlIGxhc3Qgc2VhcmNoIGNvbW1hbmQuCisJbglOYW1lIG9mIHRoZSB2aW1pbmZvIGZpbGUuICBUaGUgbmFtZSBtdXN0IGltbWVkaWF0ZWx5IGZvbGxvdworCQl0aGUgJ24nLiAgTXVzdCBiZSB0aGUgbGFzdCBvbmUhICBJZiB0aGUgIi1pIiBhcmd1bWVudCB3YXMKKwkJZ2l2ZW4gd2hlbiBzdGFydGluZyBWaW0sIHRoYXQgZmlsZSBuYW1lIG92ZXJyaWRlcyB0aGUgb25lCisJCWdpdmVuIGhlcmUgd2l0aCAndmltaW5mbycuICBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkCisJCXdoZW4gb3BlbmluZyB0aGUgZmlsZSwgbm90IHdoZW4gc2V0dGluZyB0aGUgb3B0aW9uLgorCXIJUmVtb3ZhYmxlIG1lZGlhLiAgVGhlIGFyZ3VtZW50IGlzIGEgc3RyaW5nICh1cCB0byB0aGUgbmV4dAorCQknLCcpLiAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGdpdmVuIHNldmVyYWwgdGltZXMuICBFYWNoCisJCXNwZWNpZmllcyB0aGUgc3RhcnQgb2YgYSBwYXRoIGZvciB3aGljaCBubyBtYXJrcyB3aWxsIGJlCisJCXN0b3JlZC4gIFRoaXMgaXMgdG8gYXZvaWQgcmVtb3ZhYmxlIG1lZGlhLiAgRm9yIE1TLURPUyB5b3UKKwkJY291bGQgdXNlICJyYToscmI6IiwgZm9yIEFtaWdhICJyZGYwOixyZGYxOixyZGYyOiIuICBZb3UgY2FuCisJCWFsc28gdXNlIGl0IGZvciB0ZW1wIGZpbGVzLCBlLmcuLCBmb3IgVW5peDogInIvdG1wIi4gIENhc2UgaXMKKwkJaWdub3JlZC4gIE1heGltdW0gbGVuZ3RoIG9mIGVhY2ggJ3InIGFyZ3VtZW50IGlzIDUwCisJCWNoYXJhY3RlcnMuCisJcwlNYXhpbXVtIHNpemUgb2YgYW4gaXRlbSBpbiBLYnl0ZS4gIElmIHplcm8gdGhlbiByZWdpc3RlcnMgYXJlCisJCW5vdCBzYXZlZC4gIEN1cnJlbnRseSBvbmx5IGFwcGxpZXMgdG8gcmVnaXN0ZXJzLiAgVGhlIGRlZmF1bHQKKwkJInMxMCIgd2lsbCBleGNsdWRlIHJlZ2lzdGVycyB3aXRoIG1vcmUgdGhhbiAxMCBLYnl0ZSBvZiB0ZXh0LgorCQlBbHNvIHNlZSB0aGUgJzwnIGl0ZW0gYWJvdmU6IGxpbmUgY291bnQgbGltaXQuCisKKwlFeGFtcGxlOiA+CisJICAgIDpzZXQgdmltaW5mbz0nNTAsPDEwMDAsczEwMCw6MCxufi92aW0vdmltaW5mbworPAorCSc1MAkJTWFya3Mgd2lsbCBiZSByZW1lbWJlcmVkIGZvciB0aGUgbGFzdCA1MCBmaWxlcyB5b3UKKwkJCWVkaXRlZC4KKwk8MTAwMAkJQ29udGVudHMgb2YgcmVnaXN0ZXJzICh1cCB0byAxMDAwIGxpbmVzIGVhY2gpIHdpbGwgYmUKKwkJCXJlbWVtYmVyZWQuCisJczEwMAkJUmVnaXN0ZXJzIHdpdGggbW9yZSB0aGFuIDEwMCBLYnl0ZSB0ZXh0IGFyZSBza2lwcGVkLgorCTowCQlDb21tYW5kLWxpbmUgaGlzdG9yeSB3aWxsIG5vdCBiZSBzYXZlZC4KKwlufi92aW0vdmltaW5mbwlUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byB1c2UgaXMgIn4vdmltL3ZpbWluZm8iLgorCW5vIC8JCVNpbmNlICcvJyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB3aWxsIGJlIHVzZWQsCisJCQl0aGF0IGlzLCBzYXZlIGFsbCBvZiB0aGUgc2VhcmNoIGhpc3RvcnksIGFuZCBhbHNvIHRoZQorCQkJcHJldmlvdXMgc2VhcmNoIGFuZCBzdWJzdGl0dXRlIHBhdHRlcm5zLgorCW5vICUJCVRoZSBidWZmZXIgbGlzdCB3aWxsIG5vdCBiZSBzYXZlZCBub3IgcmVhZCBiYWNrLgorCW5vIGgJCSdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIHdpbGwgYmUgcmVzdG9yZWQuCisKKwlXaGVuIHNldHRpbmcgJ3ZpbWluZm8nIGZyb20gYW4gZW1wdHkgdmFsdWUgeW91IGNhbiB1c2UgfDpydmltaW5mb3wgdG8KKwlsb2FkIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSwgdGhpcyBpcyBub3QgZG9uZSBhdXRvbWF0aWNhbGx5LgorCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCSAgICAqJ3ZpcnR1YWxlZGl0JyogKid2ZScqCisndmlydHVhbGVkaXQnICd2ZScJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCt2aXJ0dWFsZWRpdHwgZmVhdHVyZX0KKwlBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHRoZXNlIHdvcmRzOgorCSAgICBibG9jawlBbGxvdyB2aXJ0dWFsIGVkaXRpbmcgaW4gVmlzdWFsIGJsb2NrIG1vZGUuCisJICAgIGluc2VydAlBbGxvdyB2aXJ0dWFsIGVkaXRpbmcgaW4gSW5zZXJ0IG1vZGUuCisJICAgIGFsbAkJQWxsb3cgdmlydHVhbCBlZGl0aW5nIGluIGFsbCBtb2Rlcy4KKwlWaXJ0dWFsIGVkaXRpbmcgbWVhbnMgdGhhdCB0aGUgY3Vyc29yIGNhbiBiZSBwb3NpdGlvbmVkIHdoZXJlIHRoZXJlIGlzCisJbm8gYWN0dWFsIGNoYXJhY3Rlci4gIFRoaXMgY2FuIGJlIGhhbGZ3YXkgaW50byBhIFRhYiBvciBiZXlvbmQgdGhlIGVuZAorCW9mIHRoZSBsaW5lLiAgVXNlZnVsIGZvciBzZWxlY3RpbmcgYSByZWN0YW5nbGUgaW4gVmlzdWFsIG1vZGUgYW5kCisJZWRpdGluZyBhIHRhYmxlLgorCisJCQkqJ3Zpc3VhbGJlbGwnKiAqJ3ZiJyogKidub3Zpc3VhbGJlbGwnKiAqJ25vdmInKiAqYmVlcCoKKyd2aXN1YWxiZWxsJyAndmInCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVVzZSB2aXN1YWwgYmVsbCBpbnN0ZWFkIG9mIGJlZXBpbmcuICBUaGUgdGVybWluYWwgY29kZSB0byBkaXNwbGF5IHRoZQorCXZpc3VhbCBiZWxsIGlzIGdpdmVuIHdpdGggJ3RfdmInLiAgV2hlbiBubyBiZWVwIG9yIGZsYXNoIGlzIHdhbnRlZCwKKwl1c2UgIjpzZXQgdmIgdF92Yj0iLgorCU5vdGU6IFdoZW4gdGhlIEdVSSBzdGFydHMsICd0X3ZiJyBpcyByZXNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4gIFlvdQorCW1pZ2h0IHdhbnQgdG8gc2V0IGl0IGFnYWluIGluIHlvdXIgfGd2aW1yY3wuCisJSW4gdGhlIEdVSSwgJ3RfdmInIGRlZmF1bHRzIHRvICI8RXNjPnxmIiwgd2hpY2ggaW52ZXJ0cyB0aGUgZGlzcGxheQorCWZvciAyMCBtc2VjLiAgSWYgeW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHRpbWUsIHVzZSAiPEVzYz58NDBmIiwKKwl3aGVyZSA0MCBpcyB0aGUgdGltZSBpbiBtc2VjLgorCURvZXMgbm90IHdvcmsgb24gdGhlIEFtaWdhLCB5b3UgYWx3YXlzIGdldCBhIHNjcmVlbiBmbGFzaC4KKwlBbHNvIHNlZSAnZXJyb3JiZWxscycuCisKKwkJCQkJCSond2FybicqIConbm93YXJuJyoKKyd3YXJuJwkJCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwlHaXZlIGEgd2FybmluZyBtZXNzYWdlIHdoZW4gYSBzaGVsbCBjb21tYW5kIGlzIHVzZWQgd2hpbGUgdGhlIGJ1ZmZlcgorCWhhcyBiZWVuIGNoYW5nZWQuCisKKwkJICAgICAqJ3dlaXJkaW52ZXJ0JyogKid3aXYnKiAqJ25vd2VpcmRpbnZlcnQnKiAqJ25vd2l2JyoKKyd3ZWlyZGludmVydCcgJ3dpdicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgJ3RfeHMnIHRlcm1jYXAgb3B0aW9uLgorCUl0IGlzIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb24gNC54LgorCVNldHRpbmcgJ3dlaXJkaW52ZXJ0JyBoYXMgdGhlIGVmZmVjdCBvZiBtYWtpbmcgJ3RfeHMnIG5vbi1lbXB0eSwgYW5kCisJdmljZSB2ZXJzYS4gIEhhcyBubyBlZmZlY3Qgd2hlbiB0aGUgR1VJIGlzIHJ1bm5pbmcuCisKKwkJCQkJCSond2hpY2h3cmFwJyogKid3dycqCisnd2hpY2h3cmFwJyAnd3cnCXN0cmluZwkoVmltIGRlZmF1bHQ6ICJiLHMiLCBWaSBkZWZhdWx0OiAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlBbGxvdyBzcGVjaWZpZWQga2V5cyB0aGF0IG1vdmUgdGhlIGN1cnNvciBsZWZ0L3JpZ2h0IHRvIG1vdmUgdG8gdGhlCisJcHJldmlvdXMvbmV4dCBsaW5lIHdoZW4gdGhlIGN1cnNvciBpcyBvbiB0aGUgZmlyc3QvbGFzdCBjaGFyYWN0ZXIgaW4KKwl0aGUgbGluZS4gIENvbmNhdGVuYXRlIGNoYXJhY3RlcnMgdG8gYWxsb3cgdGhpcyBmb3IgdGhlc2Uga2V5czoKKwkJY2hhciAgIGtleQkgIG1vZGUJfgorCQkgYiAgICA8QlM+CSBOb3JtYWwgYW5kIFZpc3VhbAorCQkgcyAgICA8U3BhY2U+CSBOb3JtYWwgYW5kIFZpc3VhbAorCQkgaCAgICAiaCIJIE5vcm1hbCBhbmQgVmlzdWFsCisJCSBsICAgICJsIgkgTm9ybWFsIGFuZCBWaXN1YWwKKwkJIDwgICAgPExlZnQ+CSBOb3JtYWwgYW5kIFZpc3VhbAorCQkgPiAgICA8UmlnaHQ+CSBOb3JtYWwgYW5kIFZpc3VhbAorCQkgfiAgICAifiIJIE5vcm1hbAorCQkgWyAgICA8TGVmdD4JIEluc2VydCBhbmQgUmVwbGFjZQorCQkgXSAgICA8UmlnaHQ+CSBJbnNlcnQgYW5kIFJlcGxhY2UKKwlGb3IgZXhhbXBsZTogPgorCQk6c2V0IHd3PTwsPixbLF0KKzwJYWxsb3dzIHdyYXAgb25seSB3aGVuIGN1cnNvciBrZXlzIGFyZSB1c2VkLgorCVdoZW4gdGhlIG1vdmVtZW50IGtleXMgYXJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIGRlbGV0ZSBvciBjaGFuZ2UKKwlvcGVyYXRvciwgdGhlIDxFT0w+IGFsc28gY291bnRzIGZvciBhIGNoYXJhY3Rlci4gIFRoaXMgbWFrZXMgIjNoIgorCWRpZmZlcmVudCBmcm9tICIzZGgiIHdoZW4gdGhlIGN1cnNvciBjcm9zc2VzIHRoZSBlbmQgb2YgYSBsaW5lLiAgVGhpcworCWlzIGFsc28gdHJ1ZSBmb3IgIngiIGFuZCAiWCIsIGJlY2F1c2UgdGhleSBkbyB0aGUgc2FtZSBhcyAiZGwiIGFuZAorCSJkaCIuICBJZiB5b3UgdXNlIHRoaXMsIHlvdSBtYXkgYWxzbyB3YW50IHRvIHVzZSB0aGUgbWFwcGluZworCSI6bWFwIDxCUz4gWCIgdG8gbWFrZSBiYWNrc3BhY2UgZGVsZXRlIHRoZSBjaGFyYWN0ZXIgaW4gZnJvbnQgb2YgdGhlCisJY3Vyc29yLgorCVdoZW4gJ2wnIGlzIGluY2x1ZGVkLCB5b3UgZ2V0IGEgc2lkZSBlZmZlY3Q6ICJ5bCIgb24gYW4gZW1wdHkgbGluZQorCXdpbGwgaW5jbHVkZSB0aGUgPEVPTD4sIHNvIHRoYXQgInAiIHdpbGwgaW5zZXJ0IGEgbmV3IGxpbmUuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkJCSond2lsZGNoYXInKiAqJ3djJyoKKyd3aWxkY2hhcicgJ3djJwkJbnVtYmVyCShWaW0gZGVmYXVsdDogPFRhYj4sIFZpIGRlZmF1bHQ6IENUUkwtRSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlDaGFyYWN0ZXIgeW91IGhhdmUgdG8gdHlwZSB0byBzdGFydCB3aWxkY2FyZCBleHBhbnNpb24gaW4gdGhlCisJY29tbWFuZC1saW5lLCBhcyBzcGVjaWZpZWQgd2l0aCAnd2lsZG1vZGUnLgorCVRoZSBjaGFyYWN0ZXIgaXMgbm90IHJlY29nbml6ZWQgd2hlbiB1c2VkIGluc2lkZSBhIG1hY3JvLiAgU2VlCisJJ3dpbGRjaGFybScgZm9yIHRoYXQuCisJQWx0aG91Z2ggJ3djJyBpcyBhIG51bWJlciBvcHRpb24sIHlvdSBjYW4gc2V0IGl0IHRvIGEgc3BlY2lhbCBrZXk6ID4KKwkJOnNldCB3Yz08RXNjPgorPAlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCQkJKid3aWxkY2hhcm0nKiAqJ3djbScqCisnd2lsZGNoYXJtJyAnd2NtJwludW1iZXIJKGRlZmF1bHQ6IG5vbmUgKDApKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCSd3aWxkY2hhcm0nIHdvcmtzIGV4YWN0bHkgbGlrZSAnd2lsZGNoYXInLCBleGNlcHQgdGhhdCBpdCBpcworCXJlY29nbml6ZWQgd2hlbiB1c2VkIGluc2lkZSBhIG1hY3JvLiBZb3UgY2FuIGZpbmQgInNwYXJlIiBjb21tYW5kLWxpbmUKKwlrZXlzIHN1aXRhYmxlIGZvciB0aGlzIG9wdGlvbiBieSBsb29raW5nIGF0IHxleC1lZGl0LWluZGV4fC4gTm9ybWFsbHkKKwl5b3UnbGwgbmV2ZXIgYWN0dWFsbHkgdHlwZSAnd2lsZGNoYXJtJywganVzdCB1c2UgaXQgaW4gbWFwcGluZ3MgdGhhdAorCWF1dG9tYXRpY2FsbHkgaW52b2tlIGNvbXBsZXRpb24gbW9kZSwgZS5nLjogPgorCQk6c2V0IHdjbT08Qy1aPgorCQk6Y21hcCBzcyBzbyAkdmltL3Nlc3Npb25zLyoudmltPEMtWj4KKzwJVGhlbiBhZnRlciB0eXBpbmcgOnNzIHlvdSBjYW4gdXNlIENUUkwtUCAmIENUUkwtTi4KKworCQkJCQkJKid3aWxkaWdub3JlJyogKid3aWcnKgorJ3dpbGRpZ25vcmUnICd3aWcnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt3aWxkaWdub3JlfAorCQkJZmVhdHVyZX0KKwlBIGxpc3Qgb2YgZmlsZSBwYXR0ZXJucy4gIEEgZmlsZSB0aGF0IG1hdGNoZXMgd2l0aCBvbmUgb2YgdGhlc2UKKwlwYXR0ZXJucyBpcyBpZ25vcmVkIHdoZW4gY29tcGxldGluZyBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lcy4KKwlUaGUgcGF0dGVybiBpcyB1c2VkIGxpa2Ugd2l0aCB8OmF1dG9jbWR8LCBzZWUgfGF1dG9jbWQtcGF0dGVybnN8LgorCUFsc28gc2VlICdzdWZmaXhlcycuCisJRXhhbXBsZTogPgorCQk6c2V0IHdpbGRpZ25vcmU9Ki5vLCoub2JqCis8CVRoZSB1c2Ugb2YgfDpzZXQrPXwgYW5kIHw6c2V0LT18IGlzIHByZWZlcnJlZCB3aGVuIGFkZGluZyBvciByZW1vdmluZworCWEgcGF0dGVybiBmcm9tIHRoZSBsaXN0LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiBhIGZ1dHVyZSB2ZXJzaW9uCisJdXNlcyBhbm90aGVyIGRlZmF1bHQuCisKKwkJCQkqJ3dpbGRtZW51JyogKid3bW51JyogKidub3dpbGRtZW51JyogKidub3dtbnUnKgorJ3dpbGRtZW51JyAnd21udScJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSBpZiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3dpbGRtZW51fAorCQkJZmVhdHVyZX0KKwlXaGVuICd3aWxkbWVudScgaXMgb24sIGNvbW1hbmQtbGluZSBjb21wbGV0aW9uIG9wZXJhdGVzIGluIGFuIGVuaGFuY2VkCisJbW9kZS4gIE9uIHByZXNzaW5nICd3aWxkY2hhcicgKHVzdWFsbHkgPFRhYj4pIHRvIGludm9rZSBjb21wbGV0aW9uLAorCXRoZSBwb3NzaWJsZSBtYXRjaGVzIGFyZSBzaG93biBqdXN0IGFib3ZlIHRoZSBjb21tYW5kIGxpbmUsIHdpdGggdGhlCisJZmlyc3QgbWF0Y2ggaGlnaGxpZ2h0ZWQgKG92ZXJ3cml0aW5nIHRoZSBzdGF0dXMgbGluZSwgaWYgdGhlcmUgaXMKKwlvbmUpLiAgS2V5cyB0aGF0IHNob3cgdGhlIHByZXZpb3VzL25leHQgbWF0Y2gsIHN1Y2ggYXMgPFRhYj4gb3IKKwlDVFJMLVAvQ1RSTC1OLCBjYXVzZSB0aGUgaGlnaGxpZ2h0IHRvIG1vdmUgdG8gdGhlIGFwcHJvcHJpYXRlIG1hdGNoLgorCVdoZW4gJ3dpbGRtb2RlJyBpcyB1c2VkLCAid2lsZG1lbnUiIG1vZGUgaXMgdXNlZCB3aGVyZSAiZnVsbCIgaXMKKwlzcGVjaWZpZWQuICAibG9uZ2VzdCIgYW5kICJsaXN0IiBkbyBub3Qgc3RhcnQgIndpbGRtZW51IiBtb2RlLgorCUlmIHRoZXJlIGFyZSBtb3JlIG1hdGNoZXMgdGhhbiBjYW4gZml0IGluIHRoZSBsaW5lLCBhICI+IiBpcyBzaG93biBvbgorCXRoZSByaWdodCBhbmQvb3IgYSAiPCIgaXMgc2hvd24gb24gdGhlIGxlZnQuICBUaGUgc3RhdHVzIGxpbmUgc2Nyb2xscworCWFzIG5lZWRlZC4KKwlUaGUgIndpbGRtZW51IiBtb2RlIGlzIGFiYW5kb25lZCB3aGVuIGEga2V5IGlzIGhpdCB0aGF0IGlzIG5vdCB1c2VkCisJZm9yIHNlbGVjdGluZyBhIGNvbXBsZXRpb24uCisJV2hpbGUgdGhlICJ3aWxkbWVudSIgaXMgYWN0aXZlIHRoZSBmb2xsb3dpbmcga2V5cyBoYXZlIHNwZWNpYWwKKwltZWFuaW5nczoKKworCTxMZWZ0PiA8UmlnaHQ+CS0gc2VsZWN0IHByZXZpb3VzL25leHQgbWF0Y2ggKGxpa2UgQ1RSTC1QL0NUUkwtTikKKwk8RG93bj4JCS0gaW4gZmlsZW5hbWUvbWVudSBuYW1lIGNvbXBsZXRpb246IG1vdmUgaW50byBhCisJCQkgIHN1YmRpcmVjdG9yeSBvciBzdWJtZW51LgorCTxDUj4JCS0gaW4gbWVudSBjb21wbGV0aW9uLCB3aGVuIHRoZSBjdXJzb3IgaXMganVzdCBhZnRlciBhCisJCQkgIGRvdDogbW92ZSBpbnRvIGEgc3VibWVudS4KKwk8VXA+CQktIGluIGZpbGVuYW1lL21lbnUgbmFtZSBjb21wbGV0aW9uOiBtb3ZlIHVwIGludG8KKwkJCSAgcGFyZW50IGRpcmVjdG9yeSBvciBwYXJlbnQgbWVudS4KKworCVRoaXMgbWFrZXMgdGhlIG1lbnVzIGFjY2Vzc2libGUgZnJvbSB0aGUgY29uc29sZSB8Y29uc29sZS1tZW51c3wuCisKKwlJZiB5b3UgcHJlZmVyIHRoZSA8TGVmdD4gYW5kIDxSaWdodD4ga2V5cyB0byBtb3ZlIHRoZSBjdXJzb3IgaW5zdGVhZAorCW9mIHNlbGVjdGluZyBhIGRpZmZlcmVudCBtYXRjaCwgdXNlIHRoaXM6ID4KKwkJOmNub3JlbWFwIDxMZWZ0PiA8U3BhY2U+PEJTPjxMZWZ0PgorCQk6Y25vcmVtYXAgPFJpZ2h0PiA8U3BhY2U+PEJTPjxSaWdodD4KKzwKKwlUaGUgIldpbGRNZW51IiBoaWdobGlnaHRpbmcgaXMgdXNlZCBmb3IgZGlzcGxheWluZyB0aGUgY3VycmVudCBtYXRjaAorCXxobC1XaWxkTWVudXwuCisKKwkJCQkJCSond2lsZG1vZGUnKiAqJ3dpbScqCisnd2lsZG1vZGUnICd3aW0nCXN0cmluZwkoVmltIGRlZmF1bHQ6ICJmdWxsIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlDb21wbGV0aW9uIG1vZGUgdGhhdCBpcyB1c2VkIGZvciB0aGUgY2hhcmFjdGVyIHNwZWNpZmllZCB3aXRoCisJJ3dpbGRjaGFyJy4gIEl0IGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdXAgdG8gZm91ciBwYXJ0cy4JRWFjaAorCXBhcnQgc3BlY2lmaWVzIHdoYXQgdG8gZG8gZm9yIGVhY2ggY29uc2VjdXRpdmUgdXNlIG9mICd3aWxkY2hhci4gIFRoZQorCWZpcnN0IHBhcnQgc3BlY2lmaWVzIHRoZSBiZWhhdmlvciBmb3IgdGhlIGZpcnN0IHVzZSBvZiAnd2lsZGNoYXInLAorCVRoZSBzZWNvbmQgcGFydCBmb3IgdGhlIHNlY29uZCB1c2UsIGV0Yy4KKwlUaGVzZSBhcmUgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgZWFjaCBwYXJ0OgorCSIiCQlDb21wbGV0ZSBvbmx5IHRoZSBmaXJzdCBtYXRjaC4KKwkiZnVsbCIJCUNvbXBsZXRlIHRoZSBuZXh0IGZ1bGwgbWF0Y2guICBBZnRlciB0aGUgbGFzdCBtYXRjaCwKKwkJCXRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgdXNlZCBhbmQgdGhlbiB0aGUgZmlyc3QgbWF0Y2gKKwkJCWFnYWluLgorCSJsb25nZXN0IglDb21wbGV0ZSB0aWxsIGxvbmdlc3QgY29tbW9uIHN0cmluZy4gIElmIHRoaXMgZG9lc24ndAorCQkJcmVzdWx0IGluIGEgbG9uZ2VyIHN0cmluZywgdXNlIHRoZSBuZXh0IHBhcnQuCisJImxvbmdlc3Q6ZnVsbCIJTGlrZSAibG9uZ2VzdCIsIGJ1dCBhbHNvIHN0YXJ0ICd3aWxkbWVudScgaWYgaXQgaXMKKwkJCWVuYWJsZWQuCisJImxpc3QiCQlXaGVuIG1vcmUgdGhhbiBvbmUgbWF0Y2gsIGxpc3QgYWxsIG1hdGNoZXMuCisJImxpc3Q6ZnVsbCIJV2hlbiBtb3JlIHRoYW4gb25lIG1hdGNoLCBsaXN0IGFsbCBtYXRjaGVzIGFuZAorCQkJY29tcGxldGUgZmlyc3QgbWF0Y2guCisJImxpc3Q6bG9uZ2VzdCIJV2hlbiBtb3JlIHRoYW4gb25lIG1hdGNoLCBsaXN0IGFsbCBtYXRjaGVzIGFuZAorCQkJY29tcGxldGUgdGlsbCBsb25nZXN0IGNvbW1vbiBzdHJpbmcuCisJV2hlbiB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIG1hdGNoLCBpdCBpcyBmdWxseSBjb21wbGV0ZWQgaW4gYWxsIGNhc2VzLgorCisJRXhhbXBsZXM6ID4KKwkJOnNldCB3aWxkbW9kZT1mdWxsCis8CUNvbXBsZXRlIGZpcnN0IGZ1bGwgbWF0Y2gsIG5leHQgbWF0Y2gsIGV0Yy4gKHRoZSBkZWZhdWx0KSA+CisJCTpzZXQgd2lsZG1vZGU9bG9uZ2VzdCxmdWxsCis8CUNvbXBsZXRlIGxvbmdlc3QgY29tbW9uIHN0cmluZywgdGhlbiBlYWNoIGZ1bGwgbWF0Y2ggPgorCQk6c2V0IHdpbGRtb2RlPWxpc3Q6ZnVsbAorPAlMaXN0IGFsbCBtYXRjaGVzIGFuZCBjb21wbGV0ZSBlYWNoIGZ1bGwgbWF0Y2ggPgorCQk6c2V0IHdpbGRtb2RlPWxpc3QsZnVsbAorPAlMaXN0IGFsbCBtYXRjaGVzIHdpdGhvdXQgY29tcGxldGluZywgdGhlbiBlYWNoIGZ1bGwgbWF0Y2ggPgorCQk6c2V0IHdpbGRtb2RlPWxvbmdlc3QsbGlzdAorPAlDb21wbGV0ZSBsb25nZXN0IGNvbW1vbiBzdHJpbmcsIHRoZW4gbGlzdCBhbHRlcm5hdGl2ZXMuCisKKwkJCQkJCSond2luYWx0a2V5cycqICond2FrJyoKKyd3aW5hbHRrZXlzJyAnd2FrJwlzdHJpbmcJKGRlZmF1bHQgIm1lbnUiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgdXNlZCBpbiBXaW4zMiwgTW90aWYsIEdUSyBhbmQgUGhvdG9uIEdVSX0KKwlTb21lIEdVSSB2ZXJzaW9ucyBhbGxvdyB0aGUgYWNjZXNzIHRvIG1lbnUgZW50cmllcyBieSB1c2luZyB0aGUgQUxUCisJa2V5IGluIGNvbWJpbmF0aW9uIHdpdGggYSBjaGFyYWN0ZXIgdGhhdCBhcHBlYXJzIHVuZGVybGluZWQgaW4gdGhlCisJbWVudS4gIFRoaXMgY29uZmxpY3RzIHdpdGggdGhlIHVzZSBvZiB0aGUgQUxUIGtleSBmb3IgbWFwcGluZ3MgYW5kCisJZW50ZXJpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzLiAgVGhpcyBvcHRpb24gdGVsbHMgd2hhdCB0byBkbzoKKwkgIG5vCURvbid0IHVzZSBBTFQga2V5cyBmb3IgbWVudXMuICBBTFQga2V5IGNvbWJpbmF0aW9ucyBjYW4gYmUKKwkJbWFwcGVkLCBidXQgdGhlcmUgaXMgbm8gYXV0b21hdGljIGhhbmRsaW5nLiAgVGhpcyBjYW4gdGhlbiBiZQorCQlkb25lIHdpdGggdGhlIHw6c2ltYWx0fCBjb21tYW5kLgorCSAgeWVzCUFMVCBrZXkgaGFuZGxpbmcgaXMgZG9uZSBieSB0aGUgd2luZG93aW5nIHN5c3RlbS4gIEFMVCBrZXkKKwkJY29tYmluYXRpb25zIGNhbm5vdCBiZSBtYXBwZWQuCisJICBtZW51CVVzaW5nIEFMVCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgY2hhcmFjdGVyIHRoYXQgaXMgYSBtZW51CisJCXNob3J0Y3V0IGtleSwgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSB3aW5kb3dpbmcgc3lzdGVtLglPdGhlcgorCQlrZXlzIGNhbiBiZSBtYXBwZWQuCisJSWYgdGhlIG1lbnUgaXMgZGlzYWJsZWQgYnkgZXhjbHVkaW5nICdtJyBmcm9tICdndWlvcHRpb25zJywgdGhlIEFMVAorCWtleSBpcyBuZXZlciB1c2VkIGZvciB0aGUgbWVudS4KKwlJbiB0aGUgV2luMzIgdmVyc2lvbiwgdGhlIDxGMTA+IGtleSBpcyBoYW5kbGVkIGxpa2UgdGhpcyB0b28sIHNpbmNlCisJV2luZG93cyB1c2VzIGl0IHRvIHNlbGVjdCBhIG1lbnUuCisKKwkJCQkJCSond2luaGVpZ2h0JyogKid3aCcqICpFNTkxKgorJ3dpbmhlaWdodCcgJ3doJwludW1iZXIJKGRlZmF1bHQgMSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3dpbmRvd3MKKwkJCWZlYXR1cmV9CisJTWluaW1hbCBudW1iZXIgb2YgbGluZXMgZm9yIHRoZSBjdXJyZW50IHdpbmRvdy4gIFRoaXMgaXMgbm90IGEgaGFyZAorCW1pbmltdW0sIFZpbSB3aWxsIHVzZSBmZXdlciBsaW5lcyBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20uCUlmIHRoZQorCWN1cnJlbnQgd2luZG93IGlzIHNtYWxsZXIsIGl0cyBzaXplIGlzIGluY3JlYXNlZCwgYXQgdGhlIGNvc3Qgb2YgdGhlCisJaGVpZ2h0IG9mIG90aGVyIHdpbmRvd3MuICBTZXQgaXQgdG8gOTk5IHRvIG1ha2UgdGhlIGN1cnJlbnQgd2luZG93CisJYWx3YXlzIGZpbGwgdGhlIHNjcmVlbiAoYWx0aG91Z2ggdGhpcyBoYXMgdGhlIGRyYXdiYWNrIHRoYXQgIjphbGwiCisJd2lsbCBjcmVhdGUgb25seSB0d28gd2luZG93cykuICBTZXQgaXQgdG8gYSBzbWFsbCBudW1iZXIgZm9yIG5vcm1hbAorCWVkaXRpbmcuCisJTWluaW11bSB2YWx1ZSBpcyAxLgorCVRoZSBoZWlnaHQgaXMgbm90IGFkanVzdGVkIGFmdGVyIG9uZSBvZiB0aGUgY29tbWFuZHMgdG8gY2hhbmdlIHRoZQorCWhlaWdodCBvZiB0aGUgY3VycmVudCB3aW5kb3cuCisJJ3dpbmhlaWdodCcgYXBwbGllcyB0byB0aGUgY3VycmVudCB3aW5kb3cuICBVc2UgJ3dpbm1pbmhlaWdodCcgdG8gc2V0CisJdGhlIG1pbmltYWwgaGVpZ2h0IGZvciBvdGhlciB3aW5kb3dzLgorCisJCQkqJ3dpbmZpeGhlaWdodCcqICond2ZoJyogKidub3dpbmZpeGhlaWdodCcqIConbm93ZmgnKgorJ3dpbmZpeGhlaWdodCcgJ3dmaCcJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt3aW5kb3dzCisJCQlmZWF0dXJlfQorCUtlZXAgdGhlIHdpbmRvdyBoZWlnaHQgd2hlbiB3aW5kb3dzIGFyZSBvcGVuZWQgb3IgY2xvc2VkIGFuZAorCSdlcXVhbGFsd2F5cycgaXMgc2V0LiAgU2V0IGJ5IGRlZmF1bHQgZm9yIHRoZSB8cHJldmlldy13aW5kb3d8IGFuZAorCXxxdWlja2ZpeC13aW5kb3d8LgorCVRoZSBoZWlnaHQgbWF5IGJlIGNoYW5nZWQgYW55d2F5IHdoZW4gcnVubmluZyBvdXQgb2Ygcm9vbS4KKworCQkJCQkJKid3aW5taW5oZWlnaHQnKiAqJ3dtaCcqCisnd2lubWluaGVpZ2h0JyAnd21oJwludW1iZXIJKGRlZmF1bHQgMSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3dpbmRvd3MKKwkJCWZlYXR1cmV9CisJVGhlIG1pbmltYWwgaGVpZ2h0IG9mIGEgd2luZG93LCB3aGVuIGl0J3Mgbm90IHRoZSBjdXJyZW50IHdpbmRvdy4KKwlUaGlzIGlzIGEgaGFyZCBtaW5pbXVtLCB3aW5kb3dzIHdpbGwgbmV2ZXIgYmVjb21lIHNtYWxsZXIuCisJV2hlbiBzZXQgdG8gemVybywgd2luZG93cyBtYXkgYmUgInNxdWFzaGVkIiB0byB6ZXJvIGxpbmVzIChpLmUuIGp1c3QgYQorCXN0YXR1cyBiYXIpIGlmIG5lY2Vzc2FyeS4gIFRoZXkgd2lsbCByZXR1cm4gdG8gYXQgbGVhc3Qgb25lIGxpbmUgd2hlbgorCXRoZXkgYmVjb21lIGFjdGl2ZSAoc2luY2UgdGhlIGN1cnNvciBoYXMgdG8gaGF2ZSBzb21ld2hlcmUgdG8gZ28uKQorCVVzZSAnd2luaGVpZ2h0JyB0byBzZXQgdGhlIG1pbmltYWwgaGVpZ2h0IG9mIHRoZSBjdXJyZW50IHdpbmRvdy4KKwlUaGlzIG9wdGlvbiBpcyBvbmx5IGNoZWNrZWQgd2hlbiBtYWtpbmcgYSB3aW5kb3cgc21hbGxlci4gIERvbid0IHVzZSBhCisJbGFyZ2UgbnVtYmVyLCBpdCB3aWxsIGNhdXNlIGVycm9ycyB3aGVuIG9wZW5pbmcgbW9yZSB0aGFuIGEgZmV3CisJd2luZG93cy4gIEEgdmFsdWUgb2YgMCB0byAzIGlzIHJlYXNvbmFibGUuCisKKwkJCQkJCSond2lubWlud2lkdGgnKiAqJ3dtdycqCisnd2lubWlud2lkdGgnICd3bXcnCW51bWJlcgkoZGVmYXVsdCAxKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArdmVydHNwbGl0CisJCQlmZWF0dXJlfQorCVRoZSBtaW5pbWFsIHdpZHRoIG9mIGEgd2luZG93LCB3aGVuIGl0J3Mgbm90IHRoZSBjdXJyZW50IHdpbmRvdy4KKwlUaGlzIGlzIGEgaGFyZCBtaW5pbXVtLCB3aW5kb3dzIHdpbGwgbmV2ZXIgYmVjb21lIHNtYWxsZXIuCisJV2hlbiBzZXQgdG8gemVybywgd2luZG93cyBtYXkgYmUgInNxdWFzaGVkIiB0byB6ZXJvIGNvbHVtbnMgKGkuZS4ganVzdAorCWEgdmVydGljYWwgc2VwYXJhdG9yKSBpZiBuZWNlc3NhcnkuICBUaGV5IHdpbGwgcmV0dXJuIHRvIGF0IGxlYXN0IG9uZQorCWxpbmUgd2hlbiB0aGV5IGJlY29tZSBhY3RpdmUgKHNpbmNlIHRoZSBjdXJzb3IgaGFzIHRvIGhhdmUgc29tZXdoZXJlCisJdG8gZ28uKQorCVVzZSAnd2lud2lkdGgnIHRvIHNldCB0aGUgbWluaW1hbCB3aWR0aCBvZiB0aGUgY3VycmVudCB3aW5kb3cuCisJVGhpcyBvcHRpb24gaXMgb25seSBjaGVja2VkIHdoZW4gbWFraW5nIGEgd2luZG93IHNtYWxsZXIuICBEb24ndCB1c2UgYQorCWxhcmdlIG51bWJlciwgaXQgd2lsbCBjYXVzZSBlcnJvcnMgd2hlbiBvcGVuaW5nIG1vcmUgdGhhbiBhIGZldworCXdpbmRvd3MuICBBIHZhbHVlIG9mIDAgdG8gMTIgaXMgcmVhc29uYWJsZS4KKworCQkJCQkJKid3aW53aWR0aCcqICond2l3JyogKkU1OTIqCisnd2lud2lkdGgnICd3aXcnCW51bWJlcgkoZGVmYXVsdCAyMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3ZlcnRzcGxpdAorCQkJZmVhdHVyZX0KKwlNaW5pbWFsIG51bWJlciBvZiBjb2x1bW5zIGZvciB0aGUgY3VycmVudCB3aW5kb3cuICBUaGlzIGlzIG5vdCBhIGhhcmQKKwltaW5pbXVtLCBWaW0gd2lsbCB1c2UgZmV3ZXIgY29sdW1ucyBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20uICBJZgorCXRoZSBjdXJyZW50IHdpbmRvdyBpcyBzbWFsbGVyLCBpdHMgc2l6ZSBpcyBpbmNyZWFzZWQsIGF0IHRoZSBjb3N0IG9mCisJdGhlIHdpZHRoIG9mIG90aGVyIHdpbmRvd3MuICBTZXQgaXQgdG8gOTk5IHRvIG1ha2UgdGhlIGN1cnJlbnQgd2luZG93CisJYWx3YXlzIGZpbGwgdGhlIHNjcmVlbi4gIFNldCBpdCB0byBhIHNtYWxsIG51bWJlciBmb3Igbm9ybWFsIGVkaXRpbmcuCisJVGhlIHdpZHRoIGlzIG5vdCBhZGp1c3RlZCBhZnRlciBvbmUgb2YgdGhlIGNvbW1hbmRzIHRvIGNoYW5nZSB0aGUKKwl3aWR0aCBvZiB0aGUgY3VycmVudCB3aW5kb3cuCisJJ3dpbndpZHRoJyBhcHBsaWVzIHRvIHRoZSBjdXJyZW50IHdpbmRvdy4gIFVzZSAnd2lubWlud2lkdGgnIHRvIHNldAorCXRoZSBtaW5pbWFsIHdpZHRoIGZvciBvdGhlciB3aW5kb3dzLgorCisJCQkJCQkqJ3dyYXAnKiAqJ25vd3JhcCcqCisnd3JhcCcJCQlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIGNoYW5nZXMgaG93IHRleHQgaXMgZGlzcGxheWVkLiAgSXQgZG9lc24ndCBjaGFuZ2UgdGhlIHRleHQKKwlpbiB0aGUgYnVmZmVyLCBzZWUgJ3RleHR3aWR0aCcgZm9yIHRoYXQuCisJV2hlbiBvbiwgbGluZXMgbG9uZ2VyIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSB3aW5kb3cgd2lsbCB3cmFwIGFuZAorCWRpc3BsYXlpbmcgY29udGludWVzIG9uIHRoZSBuZXh0IGxpbmUuCVdoZW4gb2ZmIGxpbmVzIHdpbGwgbm90IHdyYXAKKwlhbmQgb25seSBwYXJ0IG9mIGxvbmcgbGluZXMgd2lsbCBiZSBkaXNwbGF5ZWQuCVdoZW4gdGhlIGN1cnNvciBpcworCW1vdmVkIHRvIGEgcGFydCB0aGF0IGlzIG5vdCBzaG93biwgdGhlIHNjcmVlbiB3aWxsIHNjcm9sbAorCWhvcml6b250YWxseS4KKwlUaGUgbGluZSB3aWxsIGJlIGJyb2tlbiBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZCBpZiBuZWNlc3NhcnkuICBTZWUKKwknbGluZWJyZWFrJyB0byBnZXQgdGhlIGJyZWFrIGF0IGEgd29yZCBib3VuZGFyeS4KKwlUbyBtYWtlIHNjcm9sbGluZyBob3Jpem9udGFsbHkgYSBiaXQgbW9yZSB1c2VmdWwsIHRyeSB0aGlzOiA+CisJCTpzZXQgc2lkZXNjcm9sbD01CisJCTpzZXQgbGlzdGNoYXJzKz1wcmVjZWRlczo8LGV4dGVuZHM6PgorPAlTZWUgJ3NpZGVzY3JvbGwnLCAnbGlzdGNoYXJzJyBhbmQgfHdyYXAtb2ZmfC4KKworCQkJCQkJKid3cmFwbWFyZ2luJyogKid3bScqCisnd3JhcG1hcmdpbicgJ3dtJwludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCU51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIHJpZ2h0IHdpbmRvdyBib3JkZXIgd2hlcmUgd3JhcHBpbmcKKwlzdGFydHMuICBXaGVuIHR5cGluZyB0ZXh0IGJleW9uZCB0aGlzIGxpbWl0LCBhbiA8RU9MPiB3aWxsIGJlIGluc2VydGVkCisJYW5kIGluc2VydGluZyBjb250aW51ZXMgb24gdGhlIG5leHQgbGluZS4KKwlPcHRpb25zIHRoYXQgYWRkIGEgbWFyZ2luLCBzdWNoIGFzICdudW1iZXInIGFuZCAnZm9sZGNvbHVtbicsIGNhdXNlCisJdGhlIHRleHQgd2lkdGggdG8gYmUgZnVydGhlciByZWR1Y2VkLiAgVGhpcyBpcyBWaSBjb21wYXRpYmxlLgorCVdoZW4gJ3RleHR3aWR0aCcgaXMgbm9uLXplcm8sIHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkLgorCVNlZSBhbHNvICdmb3JtYXRvcHRpb25zJyBhbmQgfGlucy10ZXh0d2lkdGh8LiAge1ZpOiB3b3JrcyBkaWZmZXJlbnRseQorCWFuZCBsZXNzIHVzZWZ1bGx5fQorCisJCQkJICAgKid3cmFwc2NhbicqICond3MnKiAqJ25vd3JhcHNjYW4nKiAqJ25vd3MnKgorJ3dyYXBzY2FuJyAnd3MnCQlib29sZWFuCShkZWZhdWx0IG9uKQkJCSpFMzg0KiAqRTM4NSoKKwkJCWdsb2JhbAorCVNlYXJjaGVzIHdyYXAgYXJvdW5kIHRoZSBlbmQgb2YgdGhlIGZpbGUuCisKKwkJCQkJCSAgICond3JpdGUnKiAqJ25vd3JpdGUnKgorJ3dyaXRlJwkJCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJQWxsb3dzIHdyaXRpbmcgZmlsZXMuICBXaGVuIG5vdCBzZXQsIHdyaXRpbmcgYSBmaWxlIGlzIG5vdCBhbGxvd2VkLgorCUNhbiBiZSB1c2VkIGZvciBhIHZpZXctb25seSBtb2RlLCB3aGVyZSBtb2RpZmljYXRpb25zIHRvIHRoZSB0ZXh0IGFyZQorCXN0aWxsIGFsbG93ZWQuCUNhbiBiZSByZXNldCB3aXRoIHRoZSB8LW18IG9yIHwtTXwgY29tbWFuZCBsaW5lCisJYXJndW1lbnQuICBGaWx0ZXJpbmcgdGV4dCBpcyBzdGlsbCBwb3NzaWJsZSwgZXZlbiB0aG91Z2ggdGhpcyByZXF1aXJlcworCXdyaXRpbmcgYSB0ZW1wb3JhcnkgZmlsZS4KKworCQkJCSAgICond3JpdGVhbnknKiAqJ3dhJyogKidub3dyaXRlYW55JyogKidub3dhJyoKKyd3cml0ZWFueScgJ3dhJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwlBbGxvd3Mgd3JpdGluZyB0byBhbnkgZmlsZSB3aXRoIG5vIG5lZWQgZm9yICIhIiBvdmVycmlkZS4KKworCQkJICAgICAqJ3dyaXRlYmFja3VwJyogKid3YicqIConbm93cml0ZWJhY2t1cCcqIConbm93YicqCisnd3JpdGViYWNrdXAnICd3YicJYm9vbGVhbgkoZGVmYXVsdCBvbiB3aXRoIHwrd3JpdGViYWNrdXB8IGZlYXR1cmUsIG9mZgorCQkJCQlvdGhlcndpc2UpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTWFrZSBhIGJhY2t1cCBiZWZvcmUgb3ZlcndyaXRpbmcgYSBmaWxlLiAgVGhlIGJhY2t1cCBpcyByZW1vdmVkIGFmdGVyCisJdGhlIGZpbGUgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLCB1bmxlc3MgdGhlICdiYWNrdXAnIG9wdGlvbiBpcworCWFsc28gb24uICBSZXNldCB0aGlzIG9wdGlvbiBpZiB5b3VyIGZpbGUgc3lzdGVtIGlzIGFsbW9zdCBmdWxsLiAgU2VlCisJfGJhY2t1cC10YWJsZXwgZm9yIGFub3RoZXIgZXhwbGFuYXRpb24uCisJV2hlbiB0aGUgJ2JhY2t1cHNraXAnIHBhdHRlcm4gbWF0Y2hlcywgYSBiYWNrdXAgaXMgbm90IG1hZGUgYW55d2F5LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldC4KKworCQkJCQkJKid3cml0ZWRlbGF5JyogKid3ZCcqCisnd3JpdGVkZWxheScgJ3dkJwludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGUgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyB0byB3YWl0IGZvciBlYWNoIGNoYXJhY3RlciBzZW50IHRvIHRoZQorCXNjcmVlbi4gIFdoZW4gbm9uLXplcm8sIGNoYXJhY3RlcnMgYXJlIHNlbnQgdG8gdGhlIHRlcm1pbmFsIG9uZSBieQorCW9uZS4gIEZvciBNUy1ET1MgcGN0ZXJtIHRoaXMgZG9lcyBub3Qgd29yay4gIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc18zOTAudHh0IGIvcnVudGltZS9kb2Mvb3NfMzkwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjAyNjA2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvb3NfMzkwLnR4dApAQCAtMCwwICsxLDM0MCBAQAorKm9zXzM5MC50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAzIEp1biAwMworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IFJhbGYgU2NoYW5kbAorCisJCQkJCSp6T1MqICp6L09TKiAqT1MzOTAqICpvczM5MCogKk1WUyoKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgcGFydGljdWxhcnMgZm9yIHRoZSB6L09TIFVOSVggdmVyc2lvbiBvZiBWaW0uCisKKzEuIE9wZW4gc291cmNlIG9uIHovT1MgVU5JWAkJfHpPUy1vcGVuLXNvdXJjZXwKKzIuIFlvdXIgZmVlZGJhY2sgaXMgbmVlZGVkCQl8ek9TLWZlZWRiYWNrfAorMy4gQnVpbGRpbmcgVklNIGZvciB6L09TIFVOSVgJCXx6T1MtYnVpbGRpbmd8Cis0LiBBU0NJSS9FQkNESUMgZGVwZW5kZW50IHNjcmlwdHMJfHpPUy1oYXMtZWJjZGljfAorNS4gWFRlcm0gUHJvYmxlbXMJCQl8ek9TLXh0ZXJtfAorNi4gTW90aWYgUHJvYmxlbXMJCQl8ek9TLU1vdGlmfAorNyAgQnVncwkJCQkJfHpPUy1CdWdzfAorOC4gS25vd24gd2Vha25lc3NlcwkJCXx6T1Mtd2Vha25lc3Nlc3wKKzkuIENoYW5nZXMJCQkJfHpPUy1jaGFuZ2VzfAorCitESVNDTEFJTUVSOiB+CitXZSBhcmUgSUJNIGVtcGxveWVlcywgYnV0IElCTSBpcyBub3QgcmVzcG9uc2libGUgZm9yIHRoaXMgcG9ydC4gVGhpcyBpcyBvdXIKK3ByaXZhdGUgZnVuLCBhbmQgaXMgcHJvdmlkZWQgaW4gdGhlIGhvcGVzIHRoYXQgaXQgbWF5IGJlIHVzZWZ1bCB0byBvdGhlcnMuCisKK1BsZWFzZSBub3RlIHRoYXQgdGhpcyBzb2Z0d2FyZSBoYXMgTk9UIGJlZW4gc3VibWl0dGVkIHRvIGFueSBmb3JtYWwgSUJNCit0ZXN0aW5nIGFuZCBpcyBwdWJsaXNoZWQgQVMgSVMuIFBsZWFzZSBkbyBub3QgY29udGFjdCBJQk0gZm9yIHN1cHBvcnQgZm9yIHRoaXMKK3NvZnR3YXJlLCBhcyBpdCBpcyBub3QgYW4gb2ZmaWNpYWwgY29tcG9uZW50IG9mIGFueSBJQk0gcHJvZHVjdC4gSVQgSVMgTk9UCitTVVBQT1JURUQsIEdVQVJBTlRFRUQsIE9SIFJFTEFURUQgV0hBVFNPRVZFUiBUTyBJQk0uCisKK0NvbnRyaWJ1dG9yczogfgorVGhlIHBvcnQgdG8gei9PUyBVTklYIHdhcyBkb25lIGJ5IFJhbGYgU2NoYW5kbCBmb3IgdGhlIFJlZGJvb2sgbWVudGlvbmVkCitiZWxvdy4KKworQ2hhbmdlcywgYnVnLXJlcG9ydHMsIG9yIGJvdGggYnk6CisKKwlEYXZpZCBNb29yZQorCUFudGhvbnkgR2lvcmdpbyA8YWdpb3JnaW9AZmFzdG1haWwuZm0+CisJYW5kIG90aGVycworCitUaGlzIGRvY3VtZW50IHdhcyB3cml0dGVuIGJ5IFJhbGYgU2NoYW5kbCBhbmQgcmV2aXNlZCBieSBBbnRob255IEdpb3JnaW8uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gT3BlbiBzb3VyY2Ugb24gei9PUyBVTklYCQkqT1MzOTAtb3Blbi1zb3VyY2UqICp6T1Mtb3Blbi1zb3VyY2UqCisKK0lmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBvdGhlciBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBvbiB6L09TIFVOSVgsIGhhdmUgYQorbG9vayBhdCB0aGUgZm9sbG93aW5nIFJlZGJvb2s6CisKKyAgICBNaWtlIE1hY0lzYWFjIGV0IGFsCisgICAgIk9wZW4gU291cmNlIFNvZnR3YXJlIGZvciB6L09TIGFuZCBPUy8zOTAgVU5JWCIKKyAgICBJQk0gRm9ybSBOdW1iZXI6IFNHMjQtNTk0NC0wMQorICAgIElTQk46IDA3Mzg0MjQ2MzMKKworWW91IGNhbiBmaW5kIG91dCBtb3JlIGluZm9ybWF0aW9uLCBvcmRlciBhIGhhcmQgY29weSwgb3IgZG93bmxvYWQgYSBQREYKK3ZlcnNpb24gb2YgdGhlc2UgUmVkYm9va3MgYXQ6CisKKwkgICAgaHR0cDovL3d3dy5yZWRib29rcy5pYm0uY29tCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gWW91ciBmZWVkYmFjayBpcyBuZWVkZWQJCSpPUzM5MC1mZWVkYmFjayogKnpPUy1mZWVkYmFjayoKKworVmltIHNob3VsZCBjb21waWxlLCBsaW5rLCBhbmQgcnVuIHJpZ2h0IG91dCBvZiB0aGUgYm94IG9uIGEgc3RhbmRhcmQgSUJNIHovT1MKK1VOSVggbWFpbmZyYW1lLiAgSSd2ZSBwZXJzb25hbGx5IHJ1biBpdCBvbiB6L09TIFYxUjIgYW5kIFYxUjMgbWFjaGluZXMgd2l0aG91dAorcHJvYmxlbXMuCisKK01hbnkgY2hhbmdlcyBoYWQgdG8gYmUgZG9uZSB0byB0aGUgY29kZSB0byBwb3J0IFZpbSB0byB6L09TIFVOSVguIEFzIGxpa2UKK21vc3QgVU5JWCBwcm9ncmFtcywgVmltIGNvbnRhaW5lZCBoZWF2eSBBU0NJSSBkZXBlbmRlbmNpZXMuIEkgbWlnaHQgaGF2ZQorbWlzc2VkIGFuIEFTQ0lJIGRlcGVuZGVuY3ksIG9yIGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBuZXcgb25lIGhhcyBiZWVuIGFkZGVkCit3aXRoIGEgZmVhdHVyZSBvciBidWcgZml4LiBNb3N0IHByb2dyYW1tZXJzIGFyZSBzaW1wbHkgbm90IGF3YXJlIG9mIHBvc3NpYmxlCitBU0NJSS9FQkNESUMgY29udmVyc2lvbiBpc3N1ZXMuIElmIHlvdSBoaXQgYSBwcm9ibGVtIHRoYXQgc2VlbXMgcmVsYXRlZCB0bwordGhpcywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMgYXQgdGhlIGVtYWlsIGFkZHJlc3NlcyBhYm92ZS4KKworT25lIGluZGljYXRpb24gb2YgQVNDSUkvRUJDRElDIGNvbnZlcnNpb24gcHJvYmxlbXMgaXMgc2NyZWVuIGNvcnJ1cHRpb24gd2l0aAorInVucHJpbnRhYmxlIiBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIGF0IG9uZSBwb2ludCB0aGUgZXJyb3JiZWxsIHdhcyBicm9rZW4KK2luIFZpbS4gQW55IHRpbWUgVmltIHRyaWVkIHRvIHJpbmcgdGhlIHRlcm1pbmFsIGJlbGwgYW4gQVNDSUkgY2hhcmFjdGVyIDB4MDcKK3dvdWxkIGJlIHByaW50ZWQuIFRoaXMgd29ya3MgZmluZSBvbiBtb3N0IHRlcm1pbmFscywgYnV0IGlzIGJyb2tlbiBvbiBhbgorRUJDRElDIG9uZS4gVGhlIGNvcnJlY3Qgc29sdXRpb24gd2FzIHRvIGRlZmluZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgdGhlIGJlbGwKK2NoYXJhY3RlciBvbiBFQkNESUMgc3lzdGVtcy4KKworUmVtZW1iZXIsIGl0J3Mgb25seSBwb3NzaWJsZSB0byBmaXggYSBidWcgaWYgdGhlIGNvbW11bml0eSBrbm93cyBhYm91dCBpdC4KK0Rvbid0IHJlbHkgb24gc29tZW9uZSBlbHNlIHRvIHJlcG9ydCBpdCEgU2VlIHRoZSBzZWN0aW9uIHxidWctcmVwb3J0c3wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gQnVpbGRpbmcgVklNIGZvciB6L09TIFVOSVgJCSpPUzM5MC1idWlsZGluZyogKnpPUy1idWlsZGluZyoKKworQSB3b3JkIG9uIGRlYnVnZ2luZyBjb2RlIGZpcnN0OiB+CisKK1RoZSBub3JtYWwgcnVuIG9mIGNvbmZpZ3VyZSBhZGRzIHRoZSBmbGFnICctZycgdG8gdGhlIGNvbXBpbGVyIG9wdGlvbnMsCit0byBpbmNsdWRlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBleGVjdXRhYmxlLiBUaGlzIGluZm9ybWF0aW9uCithcmUgbm9ybWFsbHkgcmVtb3ZlZCBmcm9tIHRoZSBleGVjdXRhYmxlIHdpdGggdGhlIHN0cmlwIGNvbW1hbmQgZHVyaW5nCitpbnN0YWxsYXRpb24uIE9uIHovT1MgVU5JWCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlbW92ZSB0aGlzIGZyb20KK3RoZSBleGVjdXRhYmxlLiBUaGUgc3RyaXAgY29tbWFuZCBleGlzdHMgb24gei9PUyBVTklYIGFuZCBpcyBjYWxsZWQKK2R1cmluZyB0aGUgaW5zdGFsbGF0aW9uLCBidXQgaXQgZG9lcyBub3RoaW5nLiAgSXQgaXMgZXF1aXZhbGVudCB0byB0aGUKKyd0b3VjaCcgY29tbWFuZC4gVGhpcyBpcyBkdWUgdG8gdGhlIHdheSBkZWJ1ZyBzeW1ib2xzIGFyZSBzdG9yZWQgaW4gdGhlCitvYmplY3RzIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIuCisKK0lmIHlvdSB3YW50IHRvIGJ1aWxkIFZpbSB3aXRob3V0IGRlYnVnZ2luZyBjb2RlLCBleHBvcnQgdGhlIGVudmlyb25tZW50Cit2YXJpYWJsZSBDRkxBR1Mgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBiZWZvcmUgeW91IGNhbGwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCis+CisJZXhwb3J0IENGTEFHUz0iIgorCisKK0J1aWxkaW5nIHdpdGhvdXQgWDExOiB+CisKK05vdGU6IFVzZSBjYyB0byBidWlsZCBWaW0uIFRoZSBjODkgY29tcGlsZXIgaGFzIHN0cmljdGVyIHN5bnRheCBjaGVja2luZworYW5kIHdpbGwgbm90IGNvbXBpbGUgVmltIGNsZWFubHkuCisKK0lmIHlvdSBidWlsZCBWSU0gd2l0aG91dCBYMTEgc3VwcG9ydCwgY29tcGlsaW5nIGFuZCBidWlsZGluZyBpcworc3RyYWlnaHRmb3J3YXJkLiBEb24ndCBmb3JnZXQgdG8gZXhwb3J0IF9DQ19DQ01PREU9MSBiZWZvcmUgY2FsbGluZworY29uZmlndXJlIGFuZCBtYWtlLgorPgorICAgICQgZXhwb3J0IF9DQ19DQ01PREU9MQorICAgICQuL2NvbmZpZ3VyZSAtLXdpdGgtZmVhdHVyZXM9YmlnIC0td2l0aG91dC14IC0tZW5hYmxlLWd1aT1ubworICAgICQgbWFrZQorICAgICQgbWFrZSB0ZXN0Cis8CisJVGVzdCBub3RlczoKKwlUZXN0IDExIHdpbGwgZmFpbCBpZiB5b3UgZG8gbm90IGhhdmUgZ3ppcCBpbnN0YWxsZWQuCisJVGVzdCA0MiB3aWxsIGZhaWwsIGFzIFZJTSBvbiB6L09TIFVOSVggZG9lc24ndCBzdXBwb3J0IHRoZSBtdWx0aWJ5dGUKKwlmZWF0dXJlLiAoRGF2aWQgTW9vcmU6ICJEb2Vzbid0IHdvcmsgX3lldF8hICA6LSkgIEknbGwgc2VlIHdoYXQgSQorCWNhbiBkby4iKQorPgorCisgICAgJCBtYWtlIGluc3RhbGwKKworCitCdWlsZGluZyB3aXRoIFgxMTogfgorCitUaGVyZSBhcmUgdHdvIHdheXMgZm9yIGJ1aWxkaW5nIFZpbSB3aXRoIFgxMSBzdXBwb3J0LiBZb3UgY2FuIGxpbmsgaXQKK3N0YXRpY2FsbHkgd2l0aCB0aGUgWDExIGxpYnJhcmllcyBvciBjYW4gYmluZCBpdCB3aXRoIHRoZSBYMTEgRExMcy4gVGhlCitzdGF0aWNhbGx5IGxpbmtlZCB2ZXJzaW9uIHJlc3VsdHMgaW4gYSBodWdlIGV4ZWN1dGFibGUgKH4xM01CKSwgd2hpbGUgdGhlCitkeW5hbWljYWxseSBsaW5rZWQgZXhlY3V0YWJsZSBpcyBtdWNoIHNtYWxsZXIgKH40LjVNQikuCisKK0hlcmUgaXMgd2hhdCB5b3UgZG8sIGlmIHlvdSB3YW50IE1vdGlmOgorCisgIGEpIFN0YXRpYyBsaW5rID4KKwkkIGNvbmZpZ3VyZSAtLXdpdGgtZmVhdHVyZXM9YmlnIC0tZW5hYmxlLWd1aT1tb3RpZgorCSQgbWFrZQorPAorICAgICBWSU0gaXMgbm93IGxpbmtlZCBzdGF0aWNhbGx5IHdpdGggdGhlIFgxMSBsaWJyYXJpZXMuCisKKyAgYikgRHluYW1pYyBsaW5rOgorICAgICBNYWtlIFZJTSBhcyBkZXNjcmliZWQgZm9yIHRoZSBzdGF0aWMgbGluay4gVGhlbiBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mCisgICAgIHRoZSAnYXV0by9saW5rLnNlZCcgZmlsZSBieSBhcHBlbmRpbmc6ID4KKwlzJS1sWG0gIColL3Vzci9saWIvWG0ueCAlZworCXMlLWxYMTEgIColL3Vzci9saWIvWDExLnggJWcKKwlzJS1sU00gIColL3Vzci9saWIvU00ueCAlZworCXMlLWxJQ0UgIColL3Vzci9saWIvSUNFLnggJWcKKzwKKyAgICAgVGhlbiBkbzogPgorCSQgcm0gdmltCisJJCBtYWtlCis8CisgICAgIE5vdyBWaW0gaXMgbGlua2VkIHdpdGggdGhlIFgxMS1ETExzLgorCitTZWUgdGhlIE1ha2VmaWxlIGFuZCB0aGUgZmlsZSBsaW5rLnNoIG9uIGhvdyBsaW5rLnNlZCBpcyB1c2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIEFTQ0lJL0VCQ0RJQyBkZXBlbmRlbnQgc2NyaXB0cwkqT1MzOTAtaGFzLWViY2RpYyogKnpPUy1oYXMtZWJjZGljKgorCitGb3IgdGhlIGludGVybmFsIHNjcmlwdCBsYW5ndWFnZSB0aGUgZmVhdHVyZSAiZWJjZGljIiB3YXMgYWRkZWQuIFdpdGggdGhpcworeW91IGNhbiBmaXggQVNDSUkgZGVwZW5kZW50IHNjcmlwdHMgbGlrZSB0aGlzOgorPgorICAgIGlmIGhhcygiZWJjZGljIikKKwlsZXQgc3BhY2UgPSA2NAorICAgIGVsc2UKKwlsZXQgc3BhY2UgPSAzMgorICAgIGVuZGlmCis8Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFhUZXJtIHByb2JsZW1zCQkJKk9TMzkwLXh0ZXJtKiAqek9TLXh0ZXJtKgorCitOb3RlOiBUaGlzIHByb2JsZW0gd2FzIHJlc29sdmVkIGluIHZlcnNpb24gNi4xYi4gfgorCitJIHNhdyBvbmUgcHJvYmxlbSB3aXRoIFhUZXJtIG9uIHovT1MgVU5JWC4gIFRoZSB0ZXJtaW5hbCBjb2RlIGZvciBtb3ZpbmcgdGhlCitjdXJzb3IgdG8gdGhlIGxlZnQgaXMgd3JvbmcgaW4gdGhlIHRlcm1saWIgZGF0YWJhc2UuICBQZXJoYXBzIG5vdCB3cm9uZywgYnV0CitpdCBkaWRuJ3Qgd29yayB3aXRoIFZJTSBzeW50YXggaGlnaGxpZ2h0aW5nIGFuZCBjb21tYW5kIGxpbmUgY3Vyc29yIG1vdmVtZW50LgorCitJZiB0aGUgaGlnaGxpZ2h0aW5nIGlzIG1lc3NlZCB1cCB3aGlsZSB5b3UgdHlwZSwgYnV0IGlzIG9rYXkgYWZ0ZXIgeW91IHJlZnJlc2hlZAordGhlIHNjcmVlbiB3aXRoIDxDLUw+IG9yIGlmIHlvdSBjYW4ndCBtb3ZlIHRvIHRoZSBsZWZ0IHdpdGggdGhlIGN1cnNvciBrZXkgb24KK3RoZSBjb21tYW5kIGxpbmUsIHRyeSBhZGRpbmcgPgorCTpzZXQgdF9sZT1eSAorPAordG8geW91ciAudmltcmMuIE5vdGU6ICdeSCcgaXMgb25lIGNoYXJhY3RlciwgaGl0IDxDLVY+PEMtSD4gdG8gZ2V0IGl0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIE1vdGlmIFByb2JsZW1zCQkJKk9TMzkwLU1vdGlmKiAqek9TLU1vdGlmKgorCitJdCBzZWVtcyB0aGF0IGluIHBvcnRpbmcgdGhlIE1vdGlmIGxpYnJhcnkgdG8gei9PUywgYSB0cmFuc2xhdGlvbiBmcm9tIEVCQ0RJQwordG8gQVNDSUkgZm9yIHRoZSBhY2NlbGVyYXRvciBjaGFyYWN0ZXJzIG9mIHRoZSBwdWxsLWRvd24gbWVudXMgd2FzIGZvcmdvdHRlbi4KK0V2ZW4gYWZ0ZXIgSSB0cmllZCB0byBoYW5kIGNvbnZlcnQgdGhlIG1lbnVzLCB0aGUgYWNjZWxlcmF0b3Iga2V5cyBjb250aW51ZWQKK3RvIG9ubHkgd29yayBmb3IgdGhlIG9wZW5pbmcgb2YgbWVudXMgKGxpa2UgPEFsdC1GPiB0byBvcGVuIHRoZSBmaWxlIG1lbnUpLgorVGhleSBzdGlsbCBkbyBub3Qgd29yayBmb3IgdGhlIG1lbnUgaXRlbXMgdGhlbXNlbHZlcyAobGlrZSA8QWx0LUY+TyB0byBvcGVuCit0aGUgZmlsZSBicm93c2VyKS4KKworVGhlcmUgaXMgbm8gc29sdXRpb24gZm9yIHRoaXMgYXMgb2YgeWV0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIEJ1Z3MJCQkJCSpPUzM5MC1idWdzKiAqek9TLUJ1Z3MqCisKKy0gVmltIHdpbGwgY29uc2lzdGVudGx5IGhhbmcgd2hlbiBhIGxhcmdlIGFtb3VudCBvZiB0ZXh0IGlzIHNlbGVjdGVkIGluCisgIHZpc3VhbCBibG9jayBtb2RlLiAgVGhpcyBtYXkgYmUgZHVlIHRvIGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUuICBOb3RlIHRoYXQKKyAgdGhpcyBvY2N1cnMgaW4gYm90aCB0aGUgdGVybWluYWwgYW5kIGd1aSB2ZXJzaW9ucy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBLbm93biB3ZWFrbmVzc2VzCQkJKk9TMzkwLXdlYWtuZXNzZXMqICp6T1Mtd2Vha25lc3NlcyoKKworLSBObyBiaW5hcnkgc2VhcmNoIGluIHRhZyBmaWxlcy4KKyAgVGhlIHByb2dyYW0gL2Jpbi9zb3J0IHNvcnRzIGJ5IEFTQ0lJIHZhbHVlIGJ5IGRlZmF1bHQuIFRoaXMgcHJvZ3JhbSBpcworICBub3JtYWxseSB1c2VkIGJ5IGN0YWdzIHRvIHNvcnQgdGhlIHRhZ3MuIFRoZXJlIG1pZ2h0IGJlIGEgdmVyc2lvbiBvZgorICBjdGFncyBvdXQgdGhlcmUsIHRoYXQgZG9lcyBpdCByaWdodCwgYnV0IHdlIGNhbid0IGJlIHN1cmUuIFNvIHRoaXMgc2VlbXMgdG8KKyAgYmUgYSBwZXJtYW5lbnQgcmVzdHJpY3Rpb24uCisKKy0gTXVsdGlieXRlIHN1cHBvcnQgKHV0Zi04KSBkb2Vzbid0IHdvcmssIGl0J3MgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorICAofG11bHRpYnl0ZXwpCisKKy0gVGhlIGNzY29wZSBpbnRlcmZhY2UgKHxjc2NvcGV8KSBkb2Vzbid0IHdvcmsgZm9yIHRoZSB2ZXJzaW9uIG9mIGNzY29wZQorICB0aGF0IHdlIHVzZSBvbiBvdXIgbWFpbmZyYW1lLiAgV2UgaGF2ZSBhIGNvcHkgb2YgdmVyc2lvbiAxNS4wYjEyLCBhbmQgaXQKKyAgY2F1c2VzIFZpbSB0byBoYW5nIHdoZW4gdXNpbmcgdGhlICJjc2NvcGUgYWRkIiBjb21tYW5kLiAgSSdtIGd1ZXNzaW5nIHRoYXQKKyAgdGhlIGJpbmFyeSBmb3JtYXQgb2YgdGhlIGNzY29wZSBkYXRhYmFzZSBpc24ndCBxdWl0ZSB3aGF0IFZpbSBpcyBleHBlY3RpbmcuCisgIEkndmUgdHJpZWQgdG8gcG9ydCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGNzY29wZSAoMTUuMykgdG8gei9PUywgd2l0aG91dAorICBtdWNoIHN1Y2Nlc3MuICBJZiBhbnlvbmUgaXMgaW50ZXJlc3RlZCBpbiB0cnlpbmcsIGRyb3AgbWUgYSBsaW5lIGlmIHlvdQorICBtYWtlIGFueSBwcm9ncmVzcy4KKworLSBObyBnbGliL2d0ayBzdXBwb3J0LiAgSSBoYXZlIG5vdCBiZWVuIGFibGUgdG8gc3VjY2Vzc2Z1bGx5IGNvbXBpbGUgZ2xpYiBvbgorICB6L09TIFVOSVguICBUaGlzIG1lYW5zIHlvdSdsbCBoYXZlIHRvIGxpdmUgd2l0aG91dCB0aGUgcHJldHR5IGd0ayB0b29sYmFyLgorCitOZXZlciB0ZXN0ZWQ6CisgICAgLSBQZXJsIGludGVyZmFjZQkJKHxwZXJsfCkKKyAgICAtIEhhbmd1bCBpbnB1dAkJKHxoYW5ndWx8KQorICAgIC0gRW5jcnlwdGlvbiBzdXBwb3J0CSh8ZW5jcnlwdGlvbnwpCisgICAgLSBMYW5nbWFwCQkJKHwnbGFuZ21hcCd8KQorICAgIC0gUHl0aG9uIHN1cHBvcnQJCSh8UHl0aG9ufCkKKyAgICAtIFJpZ2h0LXRvLWxlZnQgbW9kZQkofCdyaWdodGxlZnQnfCkKKyAgICAtIFNOaUZGKyBpbnRlcmZhY2UJCSh8c25pZmZ8KQorICAgIC0gVENMIGludGVyZmFjZQkJKHx0Y2x8KQorICAgIC4uLgorCitJZiB5b3UgdHJ5IGFueSBvZiB0aGVzZSBmZWF0dXJlcyBhbmQgdGhleSB3b3JrLCBkcm9wIHVzIGEgbm90ZSEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBDaGFuZ2VzCQkJCSpPUzM5MC1jaGFuZ2VzKgkqek9TLWNoYW5nZXMqCisKK1RoaXMgaXMgYSBzbWFsbCByZWZlcmVuY2Ugb2YgdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgei9PUyBwb3J0IG9mIFZpbS4gIEl0IGlzCitub3QgYW4gZXhoYXVzdGl2ZSBzdW1tYXJ5IG9mIGFsbCB0aGUgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIHRoZSBjb2RlIGJhc2UuCisKKzYuMWIgKGJldGEpOgorICBDaGFuZ2VkIEtTX0xFIGluIHRlcm0uYyB0byBiZSAiXGIiIGluc3RlYWQgb2YgIlwwMTAiICBUaGlzIGZpeGVkIHRoZQorICBzY3JlZW4gY29ycnVwdGlvbiBwcm9ibGVtcyBpbiBnVmltIHJlcG9ydGVkIGJ5IEFudGhvbnkgR2lvcmdpby4KKworICBBbnRob255IEdpb3JnaW8gdXBkYXRlZCB0aGlzIGRvY3VtZW50OgorCS0gQ2hhbmdlZCBPUy8zOTAgdG8gei9PUyB3aGVyZSBhcHByb3ByaWF0ZS4gSUJNIGRlY2lkZWQgdG8gcmVuYW1lCisJCWFsbCBvZiBpdHMgc2VydmVycyBhbmQgb3BlcmF0aW5nIHN5c3RlbXMuICB6L09TIGFuZCBPUy8zOTAKKwkJYXJlIHRoZSBzYW1lIHByb2R1Y3QsIGJ1dCB0aGUgdmVyc2lvbiBudW1iZXJpbmcgc3lzdGVtIHdhcworCQlyZXNldCBmb3IgdGhlIG5hbWUgY2hhbmdlLiAoZS5nLiBPUy8zOTAgVjJSMTEgPT0gei9PUyBWMVIxKQorCS0gQWRkZWQgaW5mb3JtYXRpb24gYWJvdXQgc2Vjb25kIGVkaXRpb24gb2YgdGhlIE9wZW4gU291cmNlIFJlZGJvb2suCisJLSBNb3ZlZCBSZWRib29rIGluZm9ybWF0aW9uIHRvIGEgc2VwYXJhdGUgc2VjdGlvbi4KKwktIFZhcmlvdXMgdHdlYWtzIGFuZCBjaGFuZ2VzLgorCS0gVXBkYXRlZCB0ZXN0aW5nIHNlY3Rpb24uCisKKzYuMGF1OgorICBDaGFuZ2VkIGNvbmZpZ3VyZS5pbgorICBDaGFuZ2VkIGRvY3VtZW50YXRpb24uCisgIEFudGhvbnkgR2lvcmdpbyBmaXhlZCB0aGUgZXJyb3JiZWxsLgorCisgIERhdmlkIE1vb3JlIGZvdW5kIHNvbWUgcHJvYmxlbXMsIHdoaWNoIHdlcmUgZml4ZWQgYnkgQnJhbSBhbmQvb3IgRGF2aWQgZm9yCisgIDYuMGF1LgorCis2LjBxIChhbHBoYSk6CisgIE1pbm9yIGNoYW5nZXMgZm9yIG5yZm9ybWF0cz1hbHBoYSAoc2VlIHwnbnJmb3JtYXRzJ3wpLgorICBQcm9ibGVtIHdpdGggaGFyZC1jb2RlZCBrZXljb2RlIGZvciB0aGUgRW5nbGlzaCBwb3VuZCBzaWduLiBBZGRlZCBhIGRlZmluZSBpbgorICBhc2NpaS5oCisgIERpc2FibGVkIG11bHRpYnl0ZSBmb3IgRUJDRElDIGluIGZlYXR1cmUuaAorCis2LjBmIChhbHBoYSk6CisgIEZpcnN0IGNvbXBpbGUgb2YgVmltIDYgb24gei9PUyBVTklYLiBTb21lIG1pbm9yIGNoYW5nZXMgd2VyZSBuZWVkZWQuCisKKyAgRmluYWxseSBmb3VuZCB0aGUgcmVhc29uIHdoeSBtYWtlIGZyb20gdGhlIHRvcCBsZXZlbCBkaWRuJ3Qgd29yayAoSSBtdXN0IGhhdmUKKyAgYmVlbiBibGluZCBiZWZvcmUhKS4gVGhlIE1ha2VmaWxlIGNvbnRhaW5lZCBhIGxpc3Qgb2YgdGFyZ2V0cyBpbiBvbmUgdGFyZ2V0CisgIGxpbmUuIE9uIGFsbCBvdGhlciBVTklYJ3MgdGhlIG1hY3JvICRAIGV2YWx1YXRlcyB0byB0aGUgZmlyc3QgdGFyZ2V0IGluIHRoaXMKKyAgbGlzdCwgb25seSBvbiB6L09TIFVOSVggaXQgZXZhbHVhdGVzIHRvIHRoZSBsYXN0IG9uZSA6LSguCisKKzUuNi0zOTBkOgorICBDbGVhbmVkIHVwIHNvbWUgaGFja3MuCisKKzUuNi0zOTBjOgorICBJIGdyZXBwZWQgdGhyb3VnaCB0aGUgc291cmNlIGFuZCBleGFtaW5lZCBldmVyeSBzcG90IHdpdGggYSBjaGFyYWN0ZXIKKyAgaW52b2x2ZWQgaW4gYSBvcGVyYXRpb24gKCstKS4gSSBob3BlIEkgbm93IGZvdW5kIGFsbCBFQkNESUMvQVNDSUkKKyAgc3R1ZmYsIGJ1dCAuLi4uCisKKyAgRml4ZWQ6CisgICAgLSBmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgaW4gZG9fZml4ZGVsKCkKKyAgICAtIGZpeGVkIHRyYW5zbGF0aW9uIGZyb20gQ3RybC1DaGFyIHRvIHN5bWJvbGljIG5hbWUgKGxpa2UgXmggdG8gQ1RSTC1IKQorCSAgICBmb3IgOmhlbHAKKyAgICAtIGZpeGVkIHlhbmsvZGVsZXRlLy4uLiBpbnRvIHJlZ2lzdGVyCisgICAgLSBmaXhlZCA6cmVnaXN0ZXIgY29tbWFuZAorICAgIC0gZml4ZWQgdmltaW5mbyByZWdpc3RlciBzdG9yaW5nCisgICAgLSBmaXhlZCBxdWljay1hY2Nlc3MgdGFibGUgaW4gZmluZG9wdGlvbnMoKQorICAgIC0gZml4ZWQgJ2deSCcgc2VsZWN0IG1vZGUKKyAgICAtIGZpeGVkIHRnZXRzdHIoKSAnZ2V0IHRlcm1pbmFsIGNhcGFiaWxpdHkgc3RyaW5nJywgRVNDIGFuZAorCSAgICBDdHJsIGNoYXJzIHdoZXJlIHdyb25nLiAoTm90IHVzZWQgb24gT1MvMzkwIFVOSVgpCisKKworICBjdGFnczoKKyAgICAtIGFkZGVkIHRyaWdyYXBocyBzdXBwb3J0ICh1c2VkIGluIHByb2xvZyBvZiBzeXN0ZW0gaGVhZGVyIGZpbGVzKQorCSAgICAoZ2V0LmMpCisgICAgLSBmaXhlZCBzb3J0aW5nIG9yZGVyIHdpdGggTENfQ09MTEFURT1TMzkwIHRvIGZvcmNlIEVCQ0RJQyBzb3J0aW5nLgorCSAgICAoc29ydC5jKQorCis1LjYtMzkwYjoKKyAgQ2hhbmdlZDoKKyAgICAtIGNvbmZpZ3VyZS5pbjoKKwktIGFkZGVkIHRlc3QgZm9yIE9TLzM5MCBVTklYCisJLSBhZGRlZCBzcGVjaWFsIGNvbXBpbGVyIGFuZCBsaW5rZXIgb3B0aW9ucyBpZiBidWlsZGluZyB3aXRoIFgxMQorICAgIC0gY29uZmlndXJlOgorCS0gYWZ0ZXIgY3JlYXRlZCB2aWEgYXV0b2NvbmYgaGFuZC1lZGl0ZWQgaXQgdG8gbWFrZSB0aGUgdGVzdCBmb3IKKwkgIElDRUNvbm5lY3Rpb25OdW1iZXIgd29yay4gVGhpcyBpcyBhIGF1dG9jb25mIHByb2JsZW0uIE9TLzM5MCBVTklYCisJICBuZWVkcyAtbFgxMSBmb3IgdGhpcy4KKyAgICAtIE1ha2VmaWxlCisJLSBEb24ndCBpbmNsdWRlIHRoZSBsaWIgZGlyZWN0b3JpZXMgKCctTC4uLicpIGludG8gdGhlIHZhcmlhYmxlCisJICBBTExfTElCUy4gVXNlIG93biB2YXJpYWJsZSBBTExfTElCX0RJUlMgaW5zdGVhZC4gQSBmdWxseSBQT1NJWAorCSAgY29tcGxpYW50IGNvbXBpbGVyIG11c3Qgbm90IGFjY2VwdCBvYmplY3RzL2xpYnJhcmllcyBhbmQgb3B0aW9ucworCSAgbWl4ZWQuIE5vdyB3ZSBjYW4gY2FsbCB0aGUgbGlua2VyIGxpa2UgdGhpczoKKworCSAgICAkKENDKSAkKExERkxBR1MpICQoQUxMX0xJQl9ESVJTKSAkKE9CSikgJChBTExfTElCUykKKworICBGaXhlZDoKKyAgICAtIERvdWJsZSBxdW90ZSBjb3VsZG4ndCBiZSBlbnRlcmVkCisgICAgICBNaXNzZWQgQVNDSUkgZGVwZW5kZW5jaWVzIHdoaWxlIHNldHRpbmcgdXAgdGVybWluYWwKKyAgICAgIEluIEFTQ0lJIDEyNyBpcyB0aGUgZGVsZXRlIGNoYXIsIGluIEVCQ0RJQyBjb2RlcGFnZSAxMDQ3IHRoZSB2YWx1ZSAxMjcKKyAgICAgIGlzIHRoZSBkb3VibGUgcXVvdGUuCisgICAgLSBmaXhlZCAnOmZpeGRlbCcKKworNS42LTM5MGE6CisgIGZpcnN0IGFscGhhIHJlbGVhc2UgZm9yIE9TLzM5MCBVTklYLgorCisgIEFkZGl0aW9uOgorICAgIC0gRm9yIHRoZSBpbnRlcm5hbCBzY3JpcHQgbGFuZ3VhZ2UgSSBhZGRlZCB0aGUgZmVhdHVyZSAiZWJjZGljIi4KKyAgICAgIFRoaXMgY2FuIGJlIHF1ZXJpZWQgd2l0aCB0aGUgaGFzKCktZnVuY3Rpb24gb2YgdGhlIGludGVybmFsCisgICAgICBzY3JpcHQgbGFuZ3VhZ2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHZpbTp0dz03ODpmbz10Y3EyOnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3NfYW1pZ2EudHh0IGIvcnVudGltZS9kb2Mvb3NfYW1pZ2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjE1ODMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9vc19hbWlnYS50eHQKQEAgLTAsMCArMSwxMzkgQEAKKypvc19hbWlnYS50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBBcHIgMjUKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCisJCQkJCQkJKkFtaWdhKgorVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJ0aWN1bGFyaXRpZXMgZm9yIHRoZSBBbWlnYSB2ZXJzaW9uIG9mIFZpbS4KK1RoZXJlIGlzIGFsc28gYSBzZWN0aW9uIHNwZWNpZmljYWxseSBmb3IgfE1vcnBoT1N8IGJlbG93LgorCitJbnN0YWxsYXRpb24gb24gdGhlIEFtaWdhOgorLSBBc3NpZ24gIlZJTToiIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIFZpbSAiZG9jIiBkaXJlY3RvcnkgaXMuICBWaW0gd2lsbAorICBsb29rIGZvciB0aGUgZmlsZSAiVklNOmRvYy9oZWxwLnR4dCIgKGZvciB0aGUgaGVscCBjb21tYW5kKS4KKyAgU2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJFZJTSBhbHNvIHdvcmtzLiAgQW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kOgorICB3aGVuICRWSU0gdXNlZCBhbmQgaXQgaXMgbm90IGRlZmluZWQsICJWSU06IiBpcyB1c2VkLgorLSBXaXRoIERPUyAxLjMgb3IgZWFybGllcjogUHV0ICJhcnAubGlicmFyeSIgaW4gImxpYnM6Ii4gVmltIG11c3QgaGF2ZSBiZWVuCisgIGNvbXBpbGVkIHdpdGggdGhlIHwrQVJQfCBmZWF0dXJlIGVuYWJsZWQuICBNYWtlIHN1cmUgdGhhdCBuZXdjbGkgYW5kIHJ1biBhcmUKKyAgaW4gIkM6IiAoZm9yIGV4ZWN1dGluZyBleHRlcm5hbCBjb21tYW5kcykuCistIFB1dCBhIHNoZWxsIHRoYXQgYWNjZXB0cyBhIGNvbW1hbmQgd2l0aCAiLWMiIChlLmcuICJDc2giIGZyb20gRmlzaCBkaXNrCisgIDYyNCkgaW4gImM6IiBvciBpbiBhbnkgb3RoZXIgZGlyZWN0b3J5IHRoYXQgaXMgaW4geW91ciBzZWFyY2ggcGF0aCAoZm9yCisgIGV4ZWN1dGluZyBleHRlcm5hbCBjb21tYW5kcykuCisKK0lmIHlvdSBoYXZlIHN1ZmZpY2llbnQgbWVtb3J5IHlvdSBjYW4gYXZvaWQgc3RhcnR1cCBkZWxheXMgYnkgbWFraW5nIFZpbSBhbmQKK2NzaCByZXNpZGVudCB3aXRoIHRoZSBjb21tYW5kICJyZXogY3NoIHZpbSIuIFlvdSB3aWxsIGhhdmUgdG8gcHV0CisicmV6bGliLmxpYnJhcnkiIGluIHlvdXIgImxpYnM6IiBkaXJlY3RvcnkuIFVuZGVyIDIuMCB5b3Ugd2lsbCBuZWVkIHJlegordmVyc2lvbiAwLjUuCisKK0lmIHlvdSBkbyBub3QgdXNlIGRpZ3JhcGhzLCB5b3UgY2FuIHNhdmUgc29tZSBtZW1vcnkgYnkgcmVjb21waWxpbmcgd2l0aG91dAordGhlIHwrZGlncmFwaHN8IGZlYXR1cmUuIElmIHlvdSB3YW50IHRvIHVzZSBWaW0gd2l0aCBvdGhlciB0ZXJtaW5hbHMgeW91IGNhbgorcmVjb21waWxlIHdpdGggdGhlIFRFUk1DQVAgb3B0aW9uLiBWaW0gY29tcGlsZXMgd2l0aCBNYW54IDUueCBhbmQgU0FTIDYueC4KK1NlZSB0aGUgbWFrZWZpbGVzIGFuZCBmZWF0dXJlLmguCisKK0lmIHlvdSB3YW50IHRvIHVzZSBkaWZmZXJlbnQgY29sb3JzIHNldCB0aGUgdGVybWNhcCBjb2RlczoKKwl0X21yIChmb3IgaW52ZXJ0ZWQgdGV4dCkKKwl0X21kIChmb3IgYm9sZCB0ZXh0KQorCXRfbWUgKGZvciBub3JtYWwgdGV4dCBhZnRlciB0X21yIGFuZCB0X21kKQorCXRfc28gKGZvciBzdGFuZG91dCBtb2RlKQorCXRfc2UgKGZvciBub3JtYWwgdGV4dCBhZnRlciB0X3NvKQorCXRfdXMgKGZvciB1bmRlcmxpbmVkIHRleHQpCisJdF91ZSAoZm9yIG5vcm1hbCB0ZXh0IGFmdGVyIHRfdXMpCisJdF9aSCAoZm9yIGl0YWxpYyB0ZXh0KQorCXRfWlIgKGZvciBub3JtYWwgdGV4dCBhZnRlciB0X1pIKQorCitTdGFuZGFyZCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIHVzZWQuIFRoZSBjb2RlcyBhcmU6CiszMCBncmV5IGNoYXIgICA0MCBncmV5IGNlbGwgICA+MCBncmV5IGJhY2tncm91bmQgICAgMCBhbGwgYXR0cmlidXRlcyBvZmYKKzMxIGJsYWNrIGNoYXIgIDQxIGJsYWNrIGNlbGwgID4xIGJsYWNrIGJhY2tncm91bmQgICAxIGJvbGRmYWNlCiszMiB3aGl0ZSBjaGFyICA0MiB3aGl0ZSBjZWxsICA+MiB3aGl0ZSBiYWNrZ3JvdW5kICAgMiBmYWludAorMzMgYmx1ZSBjaGFyICAgNDMgYmx1ZSBjZWxsICAgPjMgYmx1ZSBiYWNrZ3JvdW5kICAgIDMgaXRhbGljCiszNCBncmV5IGNoYXIgICA0NCBncmV5IGNlbGwgICA+NCBncmV5IGJhY2tncm91bmQgICAgNCB1bmRlcnNjb3JlCiszNSBibGFjayBjaGFyICA0NSBibGFjayBjZWxsICA+NSBibGFjayBiYWNrZ3JvdW5kICAgNyByZXZlcnNlIHZpZGVvCiszNiB3aGl0ZSBjaGFyICA0NiB3aGl0ZSBjZWxsICA+NiB3aGl0ZSBiYWNrZ3JvdW5kICAgOCBpbnZpc2libGUKKzM3IGJsdWUgY2hhciAgIDQ3IGJsdWUgY2VsbCAgID43IGJsdWUgYmFja2dyb3VuZAorCitUaGUgY29kZXMgd2l0aCAnPicgbXVzdCBiZSB0aGUgbGFzdC4gVGhlIGNlbGwgYW5kIGJhY2tncm91bmQgY29sb3Igc2hvdWxkIGJlCit0aGUgc2FtZS4gVGhlIGNvZGVzIGNhbiBiZSBjb21iaW5lZCBieSBzZXBhcmF0aW5nIHRoZW0gd2l0aCBhIHNlbWljb2xvbi4gRm9yCitleGFtcGxlIHRvIGdldCB3aGl0ZSB0ZXh0IG9uIGEgYmx1ZSBiYWNrZ3JvdW5kOiA+CisgIDpzZXQgdF9tZT1eVjxFc2M+WzA7MzI7NDM7PjNtCisgIDpzZXQgdF9zZT1eVjxFc2M+WzA7MzI7NDM7PjNtCisgIDpzZXQgdF91ZT1eVjxFc2M+WzA7MzI7NDM7PjNtCisgIDpzZXQgdF9aUj1eVjxFc2M+WzA7MzI7NDM7PjNtCisgIDpzZXQgdF9tZD1eVjxFc2M+WzE7MzI7NDM7PjNtCisgIDpzZXQgdF9tcj1eVjxFc2M+Wzc7MzI7NDM7PjNtCisgIDpzZXQgdF9zbz1eVjxFc2M+WzA7MzE7NDM7PjNtCisgIDpzZXQgdF91cz1eVjxFc2M+WzQ7MzI7NDM7PjNtCisgIDpzZXQgdF9aSD1eVjxFc2M+WzM7MzI7NDM7PjNtCisKK1doZW4gdXNpbmcgbXVsdGlwbGUgY29tbWFuZHMgd2l0aCBhIGZpbHRlciBjb21tYW5kLCBlLmcuID4KKyAgOnIhIGVjaG8gdGhpczsgZWNobyB0aGF0CitPbmx5IHRoZSBvdXRwdXQgb2YgdGhlIGxhc3QgY29tbWFuZCBpcyB1c2VkLiBUbyBmaXggdGhpcyB5b3UgaGF2ZSB0byBncm91cCB0aGUKK2NvbW1hbmRzLiBUaGlzIGRlcGVuZHMgb24gdGhlIHNoZWxsIHlvdSB1c2UgKHRoYXQgaXMgd2h5IGl0IGlzIG5vdCBkb25lCithdXRvbWF0aWNhbGx5IGluIFZpbSkuIEV4YW1wbGVzOiA+CisgIDpyISAoZWNobyB0aGlzOyBlY2hvIHRoYXQpCisgIDpyISB7ZWNobyB0aGlzOyBlY2hvIHRoYXR9CisKK0NvbW1hbmRzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGZpbGUgbmFtZSBhbGxvdyBmb3IgZW1iZWRkZWQgc3BhY2VzIGluIHRoZSBmaWxlCituYW1lLiBIb3dldmVyLCB3aGVuIHVzaW5nIGNvbW1hbmRzIHRoYXQgYWNjZXB0IHNldmVyYWwgZmlsZSBuYW1lcywgZW1iZWRkZWQKK3NwYWNlcyBuZWVkIHRvIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitWaW0gZm9yIE1vcnBoT1MJCQkJCQkJKk1vcnBoT1MqCisKK1t0aGlzIHNlY3Rpb24gbW9zdGx5IGJ5IEFsaSBBa2NhYWdhY10KKworRm9yIHRoZSBsYXRlc3QgaW5mbyBhYm91dCB0aGUgTW9ycGhPUyB2ZXJzaW9uOgorCWh0dHA6Ly93d3cuYWtjYWFnYWMuY29tL2luZGV4X3ZpbS5odG1sCisKKworUHJvYmxlbXMgfgorCitUaGVyZSBhcmUgYSBjb3VwbGUgb2YgcHJvYmxlbXMgd2hpY2ggYXJlIG5vdCBNb3JwaE9TIHJlbGF0ZWQgYnV0IG1vcmUgVmltIGFuZAorVU4qWCByZWxhdGVkLiBXaGVuIHN0YXJ0aW5nIHVwIFZpbSBpbiByYW06IGl0IGNvbXBsYWlucyB3aXRoIGEgbmFnIHJlcXVlc3RlcgorZnJvbSBNb3JwaE9TIHBsZWFzZSBzaW1wbHkgaWdub3JlIGl0LiBBbm90aGVyIHByb2JsZW0gaXMgd2hlbiBydW5uaW5nIFZpbSBhcworaXMgc29tZSBwbHVnaW5zIHdpbGwgY2F1c2UgYSBmZXcgcHJvYmxlbXMgd2hpY2ggeW91IGNhbiBpZ25vcmUgYXMgd2VsbC4KK0hvcGVmdWxseSBzb21lb25lIHdpbGwgYmUgZml4aW5nIGl0IG92ZXIgdGhlIHRpbWUuCisKK1RvIHBhc3MgYWxsIHRoZXNlIHByb2JsZW1zIGZvciBub3cgeW91IGNhbiBlaXRoZXIgcnVuOgorCisJdmltIDxmaWxlIHRvIGJlIGVkaXRlZD4KKworb3IgaWYgeW91IHdhbnQgdG8gcnVuIFZpbSBwbGFpbiBhbmQgZW5qb3kgdGhlIG1vdGlvbiBvZiBIZWxwZmlsZXMgZXRjLiBpdCB0aGVuCit3b3VsZCBiZSBiZXR0ZXIgdG8gZW50ZXI6CisKKwl2aW0gLS1ub3BsdWdpbnMgPG9mIGNvdXJzZSB5b3UgY2FuIGFkZCBhIGZpbGU+CisKKworSW5zdGFsbGF0aW9uIH4KKworMSkgUGxlYXNlIGNvcHkgdGhlIGJpbmFyeSAnVklNJyBmaWxlIHRvIGM6CisyKSBHZXQgdGhlIFZpbSBydW50aW1lIHBhY2thZ2UgZnJvbToKKworCWZ0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vYW1pZ2EvdmltNjJydC50Z3oKKworICAgYW5kIHVucGFjayBpdCBpbiB5b3VyICdBcHBzJyBkaXJlY3Rvcnkgb2YgdGhlIE1vcnBoT1MgaW5zdGFsbGF0aW9uLiBGb3IgbWUKKyAgIHRoaXMgd291bGQgY3JlYXRlIGZvbGxvd2luZyBkaXJlY3RvcnkgaGllcmFyY2h5OgorCisJTW9ycGhPUzpBcHBzL1ZpbS9WaW02Mi8uLi4KKworMykgQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91ciBzOnNoZWxsLXN0YXJ0dXAgKEltcG9ydGFudCEpLgorCisJO0JlZ2luIFZJTQorCVNldCBWSU09TW9ycGhPUzpBcHBzL1ZpbS9WaW02MgorCUFzc2lnbiBIT01FOiAiIgorCTtFbmQgVklNCisKKzQpIENvcHkgdGhlICcudmltcmMnIGZpbGUgdG8gczoKKworNSkgVGhlcmUgaXMgYWxzbyBhIGZpbGUgbmFtZWQgJ2NvbG9yLXNlcXVlbmNlJyBpbmNsdWRlZCBpbiB0aGlzIGFyY2hpdmUuIFRoaXMKKyAgIHdpbGwgc2V0IHRoZSBNb3JwaE9TIFNoZWxsIHRvIHNob3cgQU5TSSBjb2xvcnMuIFBsZWFzZSBjb3B5IHRoZSBmaWxlIHRvIHM6CisgICBhbmQgY2hhbmdlIHRoZSBzOnNoZWxsLXN0YXJ0dXAgdG86CisKKwk7QmVnaW4gVklNCisJU2V0IFZJTT1Nb3JwaE9TOkFwcHMvVmltL1ZpbTYyCisJQXNzaWduIEhPTUU6ICIiCisJRXhlY3V0ZSBTOkNvbG9yLVNlcXVlbmNlCisJQ2xzCisJO0VuZCBWSU0KKworCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3NfYmVvcy50eHQgYi9ydW50aW1lL2RvYy9vc19iZW9zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg5NjZmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvb3NfYmVvcy50eHQKQEAgLTAsMCArMSwzNDggQEAKKypvc19iZW9zLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDAxCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworCQkJCQkJCSpCZU9TKiAqQmVCb3gqCitUaGlzIGlzIGEgcG9ydCBvZiBWaW0gNS4xIHRvIHRoZSBCZU9TIFByZXZpZXcgUmVsZWFzZSAyIChhbHNvIGtub3duIGFzIFBSMikKK29yIGxhdGVyLgorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBhcnRpY3VsYXJpdGllcyBmb3IgdGhlIEJlQm94L0JlT1MgdmVyc2lvbiBvZiBWaW0uICBGb3IKK21hdHRlcnMgbm90IGRpc2N1c3NlZCBpbiB0aGlzIGZpbGUsIFZpbSBiZWhhdmVzIHZlcnkgbXVjaCBsaWtlIHRoZSBVbml4Cit8b3NfdW5peC50eHR8IHZlcnNpb24uCisKKyAxLiBHZW5lcmFsCQkJfGJlb3MtZ2VuZXJhbHwKKyAyLiBDb21waWxpbmcgVmltCQl8YmVvcy1jb21waWxpbmd8CisgMy4gVGltZW91dCBpbiB0aGUgVGVybWluYWwJfGJlb3MtdGltZW91dHwKKyA0LiBVbmljb2RlIHZzLiBMYXRpbjEJCXxiZW9zLXVuaWNvZGV8CisgNS4gVGhlIEJlT1MgR1VJCQl8YmVvcy1ndWl8CisgNi4gVGhlICRWSU0gZGlyZWN0b3J5CQl8YmVvcy12aW1kaXJ8CisgNy4gRHJhZyAmIERyb3AJCQl8YmVvcy1kcmFnbmRyb3B8CisgOC4gU2luZ2xlIExhdW5jaCB2cy4gTXVsdGlwbGUKKyAgICBMYXVuY2gJCQl8YmVvcy1sYXVuY2h8CisgOS4gRm9udHMJCQl8YmVvcy1mb250c3wKKzEwLiBUaGUgbWV0YSBrZXkgbW9kaWZpZXIJfGJlb3MtbWV0YXwKKzExLiBNb3VzZSBrZXkgbWFwcGluZ3MJCXxiZW9zLW1vdXNlfAorMTIuIENvbG9yIG5hbWVzCQkJfGJlb3MtY29sb3JzfAorMTMuIENvbXBpbGluZyB3aXRoIFBlcmwJCXxiZW9zLXBlcmx8CisKKworMS4gR2VuZXJhbAkJCQkJCSpiZW9zLWdlbmVyYWwqCisKK1RoZSBkZWZhdWx0IHN5bnRheCBoaWdobGlnaHRpbmcgbW9zdGx5IHdvcmtzIHdpdGggZGlmZmVyZW50IGZvcmVncm91bmQgY29sb3JzCit0byBoaWdobGlnaHQgaXRlbXMuIFRoaXMgd29ya3MgYmVzdCBpZiB5b3Ugc2V0IHlvdXIgVGVybWluYWwgd2luZG93IHRvIGEKK2Rhcmtpc2ggYmFja2dyb3VuZCBhbmQgbGlnaHQgbGV0dGVycy4gU29tZSBtaWRkbGUtZ3JleSBiYWNrZ3JvdW5kIChmb3IKK2luc3RhbmNlIChyLGcsYik9KDE2OCwxNjgsMTY4KSkgd2l0aCBibGFjayBsZXR0ZXJzIGFsc28gd29ya3MgbmljZWx5LiAgSWYgeW91Cit1c2UgdGhlIGRlZmF1bHQgbGlnaHQgYmFja2dyb3VuZCBhbmQgZGFyayBsZXR0ZXJzLCBpdCBtYXkgbG9vayBiZXR0ZXIgdG8KK3NpbXBseSByZXZlcnNlIHRoZSBub3Rpb24gb2YgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvciBzZXR0aW5ncy4gVG8gZG8KK3RoaXMsIGFkZCB0aGlzIHRvIHlvdXIgLnZpbXJjIGZpbGUgKHdoZXJlIDxFc2M+IG1heSBuZWVkIHRvIGJlIHJlcGxhY2VkIHdpdGgKK3RoZSBlc2NhcGUgY2hhcmFjdGVyKTogPgorCisgIDppZiAmdGVybSA9PSAiYmVvcy1hbnNpIgorICA6ICAgIHNldCB0X0FCPTxFc2M+WzMlZG0KKyAgOiAgICBzZXQgdF9BRj08RXNjPls0JWRtCisgIDplbmRpZgorCisKKzIuIENvbXBpbGluZyBWaW0JCQkJCSpiZW9zLWNvbXBpbGluZyoKKworRnJvbSB0aGUgQWR2YW5jZWQgQWNjZXNzIFByZXZpZXcgUmVsZWFzZSAoQUFQUikgb24sIFZpbSBjYW4gYmUgY29uZmlndXJlZCB3aXRoCit0aGUgc3RhbmRhcmQgY29uZmlndXJlIHNjcmlwdC4gVG8gZ2V0IHRoZSBjb21waWxlciBhbmQgaXRzIGZsYWdzIHJpZ2h0LCB1c2UKK3RoZSBmb2xsb3dpbmcgY29tbWFuZC1saW5lIGluIHRoZSBzaGVsbCAoeW91IGNhbiBjdXQgYW5kIHBhc3RlIGl0IGluIG9uZSBnbyk6CisKK0NDPSRCRV9DX0NPTVBJTEVSIENGTEFHUz0iJEJFX0RFRkFVTFRfQ19GTEFHUyAtTzciIFwKKyAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vYm9vdC9ob21lL2NvbmZpZworCiskQkVfQ19DT01QSUxFUiBpcyB1c3VhbGx5ICJtd2NjIiwgJEJFX0RFRkFVTFRfQ19GTEFHUyBpcyB1c3VhbGx5ICItSS0gLUkuIgorCitXaGVuIGNvbmZpZ3VyZSBoYXMgcnVuLCBhbmQgeW91IHdpc2ggdG8gZW5hYmxlIEdVSSBzdXBwb3J0LCB5b3UgbXVzdCBlZGl0IHRoZQorY29uZmlnLm1rIGZpbGUgc28gdGhhdCB0aGUgbGluZXMgd2l0aCBHVUlfeHh4IHJlZmVyIHRvICQoQkVPU0dVSV94eHgpIGluc3RlYWQKK29mICQoTk9ORV94eHgpLgorQWx0ZXJuYXRpdmVseSB5b3UgY2FuIG1ha2UgdGhpcyBjaGFuZ2UgaW4gdGhlIE1ha2VmaWxlOyBpdCB3aWxsIGhhdmUgYQorbW9yZSBwZXJtYW5lbnQgZWZmZWN0LiBTZWFyY2ggZm9yICJOT05FXyIuCisKK0FmdGVyIGNvbXBpbGF0aW9uIHlvdSBuZWVkIHRvIGFkZCB0aGUgcmVzb3VyY2VzIHRvIHRoZSBiaW5hcnkuIEFkZCB0aGUKK2ZvbGxvd2luZyBmZXcgbGluZXMgbmVhciB0aGUgZW5kIChiZWZvcmUgdGhlIGxpbmUgd2l0aCAiZXhpdCAkZXhpdF92YWx1ZSIpIG9mCit0aGUgbGluay5zaCBzY3JpcHQgdG8gZG8gdGhpcyBhdXRvbWF0aWNhbGx5LgorCisgICAgcm1hdHRyIEJFT1M6VFlQRSB2aW0KKyAgICBjb3B5cmVzIG9zX2Jlb3MucnNyYyB2aW0KKyAgICBtaW1lc2V0IHZpbQorCitBbHNvLCBjcmVhdGUgYSBkdW1teSBmaWxlICJzdHJpcCI6CisKKyAgICAjIS9iaW4vc2gKKyAgICBtaW1lc2V0ICQxCisgICAgZXhpdCAwCisKK1lvdSB3aWxsIG5lZWQgaXQgd2hlbiB1c2luZyAibWFrZSBpbnN0YWxsIiB0byBpbnN0YWxsIFZpbS4KKworTm93IHR5cGUgIm1ha2UiIHRvIGNvbXBpbGUgVmltLCB0aGVuICJtYWtlIGluc3RhbGwiIHRvIGluc3RhbGwgaXQuCisKK0lmIHlvdSB3YW50IHRvIGluc3RhbGwgVmltIGJ5IGhhbmQsIHlvdSBtdXN0IGNvcHkgVmltIHRvICRIT01FL2NvbmZpZy9iaW4sIGFuZAorY3JlYXRlIGEgYnVuY2ggb2Ygc3ltbGlua3MgdG8gaXQgKHtnLHIscmd9e3ZpbSxleCx2aWV3fSkuIEZ1cnRoZXJtb3JlIHlvdSBtdXN0Citjb3B5IFZpbXMgY29uZmlndXJhdGlvbiBmaWxlcyB0byAkSE9NRS9jb25maWcvc2hhcmUvdmltOgordmltLTUuMHMveyoudmltLGRvYyxzeW50YXh9LiAgRm9yIGNvbXBsZXRlbmVzcywgeW91IHNob3VsZCBhbHNvIGNvcHkgdGhlIG5yb2ZmCittYW51YWwgcGFnZXMgdG8gJEhPTUUvY29uZmlnL21hbi9tYW4xLiBEb24ndCBmb3JnZXQgY3RhZ3MvY3RhZ3MgYW5kIHh4ZC94eGQhCisKK09idmlvdXNseSwgeW91IG5lZWQgdGhlIHVubGltaXRlZCBsaW5rZXIgdG8gYWN0dWFsbHkgbGluayBWaW0uIFNlZQoraHR0cDovL3d3dy5tZXRyb3dlcmtzLmNvbSBmb3IgcHVyY2hhc2luZyB0aGUgQ29kZVdhcnJpb3IgY29tcGlsZXIgZm9yIEJlT1MuCitUaGVyZSBhcmUgY3VycmVudGx5IG5vIG90aGVyIGxpbmtlcnMgdGhhdCBjYW4gZG8gdGhlIGpvYi4KKworVGhpcyB3b24ndCBiZSBhYmxlIHRvIGluY2x1ZGUgdGhlIFBlcmwgb3IgUHl0aG9uIGludGVyZmFjZXMgZXZlbiBpZgoreW91IGhhdmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVzIGluc3RhbGxlZC4gfGJlb3MtcGVybHwKKworCiszLiBUaW1lb3V0IGluIHRoZSBUZXJtaW5hbAkJCQkqYmVvcy10aW1lb3V0KgorCitCZWNhdXNlIHNvbWUgUE9TSVgvVU5JWCBmZWF0dXJlcyBhcmUgc3RpbGwgbWlzc2luZ1sxXSwgdGhlcmUgaXMgbm8gZGlyZWN0IE9TCitzdXBwb3J0IGZvciByZWFkLXdpdGgtdGltZW91dCBpbiB0aGUgVGVybWluYWwuIFRoaXMgd291bGQgbWVhdCB0aGF0IHlvdSBjYW5ub3QKK3VzZSA6bWFwcGluZ3Mgb2YgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIsIHVubGVzcyB5b3UgYWxzbyA6c2V0IG5vdGltZW91dC4KK3wndGltZW91dCd8CisKK1RvIGNpcmN1bXZlbnQgdGhpcyBwcm9ibGVtLCBJIGFkZGVkIGEgd29ya2Fyb3VuZCB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkKK2lucHV0IHdpdGggdGltZW91dCBieSB1c2luZyBhbiBleHRyYSB0aHJlYWQgd2hpY2ggcmVhZHMgYWhlYWQgb25lIGNoYXJhY3Rlci4KK0FzIGEgc2lkZSBlZmZlY3QsIGl0IGFsc28gbWFrZXMgVmltIHJlY29nbml6ZSB3aGVuIHRoZSBUZXJtaW5hbCB3aW5kb3cKK3Jlc2l6ZXMuCisKK0Z1bmN0aW9uIGtleXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIFRlcm1pbmFsIHNpbmNlIHRoZXkgcHJvZHVjZSB2ZXJ5CitpbmRpc3RpbmN0aXZlIGNoYXJhY3RlciBzZXF1ZW5jZXMuCisKK1RoZXNlIHByb2JsZW1zIGRvIG5vdCBleGlzdCBpbiB0aGUgR1VJLgorCitbMV06IHRoZXJlIGlzIG5vIHNlbGVjdCgpIG9uIGZpbGUgZGVzY3JpcHRvcnM7IGFsc28gdGhlIHRlcm1pb3MgVk1JTiBhbmQgVlRJTUUKK3NldHRpbmdzIGRvIG5vdCBzZWVtIHRvIHdvcmsgcHJvcGVybHkuIFRoaXMgaGFzIGJlZW4gdGhlIGNhc2Ugc2luY2UgRFI3IGF0CitsZWFzdCBhbmQgc3RpbGwgaGFzIG5vdCBiZWVuIGZpeGVkIGFzIG9mIFBSMi4KKworCQkJCQkJCSpiZW9zLXVuaWNvZGUqCis0LiBVbmljb2RlIHZzLiBMYXRpbjEJCQkJCSpiZW9zLXV0ZjgqCisKK0JlT1MgdXNlcyBVbmljb2RlIGFuZCBVVEYtOCBmb3IgdGV4dCBzdHJpbmdzICgxNi1iaXQgY2hhcmFjdGVycyBlbmNvZGVkIHRvCis4LWJpdCBjaGFyYWN0ZXJzKS4gVmltIGFzc3VtZXMgSVNPLUxhdGluMSBvciBvdGhlciA4LWJpdCBjaGFyYWN0ZXIgY29kZXMuCitUaGlzIGRvZXMgbm90IHByb2R1Y2UgdGhlIGRlc2lyZWQgcmVzdWx0cyBmb3Igbm9uLUFTQ0lJIGNoYXJhY3RlcnMuIFRyeSB0aGUKK2NvbW1hbmQgOmRpZ3JhcGhzIHRvIHNlZS4gSWYgdGhleSBsb29rIG1lc3NlZCB1cCwgdXNlIDpzZXQgaXNwcmludD1AIHRvCisoc2xpZ2h0bHkpIGltcHJvdmUgdGhlIGRpc3BsYXkgb2YgSVNPLUxhdGluMSBjaGFyYWN0ZXJzIDEyOC0yNTUuICBUaGlzIHdvcmtzCitiZXR0ZXIgaW4gdGhlIEdVSSwgZGVwZW5kaW5nIG9uIHdoaWNoIGZvbnQgeW91IHVzZSAoYmVsb3cpLgorCitZb3UgbWF5IGFsc28gdXNlIHRoZSAvYm9vdC9iaW4veHRvdSBjb21tYW5kIHRvIGNvbnZlcnQgVVRGLTggZmlsZXMgZnJvbSAoeHRvdQorLWYgaXNvMSBmaWxlbmFtZSkgb3IgdG8gKHh0b3UgLXQgaXNvMSBmaWxlbmFtZSkgSVNPLUxhdGluMSBjaGFyYWN0ZXJzLgorCisKKzUuIFRoZSBCZU9TIEdVSQkJCQkJCSpiZW9zLWd1aSoKKworTm9ybWFsbHkgVmltIHN0YXJ0cyB3aXRoIHRoZSBHVUkgaWYgeW91IHN0YXJ0IGl0IGFzIGd2aW0gb3IgdmltIC1nLiAgVGhlIEJlT1MKK3ZlcnNpb24gdHJpZXMgdG8gZGV0ZXJtaW5lIGlmIGl0IHdhcyBzdGFydGVkIGZyb20gdGhlIFRyYWNrZXIgaW5zdGVhZCBvZiB0aGUKK1Rlcm1pbmFsLCBhbmQgaWYgc28sIHVzZSB0aGUgR1VJIGFueXdheS4gSG93ZXZlciwgdGhlIGN1cnJlbnQgZGV0ZWN0aW9uIHNjaGVtZQoraXMgZm9vbGVkIGlmIHlvdSB1c2UgdGhlIGNvbW1hbmQgInZpbSAtIDwvZGV2L251bGwiIG9yICJ2aW0gZmlsZW5hbWUgJiIuIFRoZQorbGF0dGVyIGNhbiBiZSBjYWxsZWQgYSBmZWF0dXJlIGJ1dCBwcm9iYWJseSBvbmx5IHdvcmtzIGJlY2F1c2UgdGhlcmUgaXMgbm8KK0JTRC1zdHlsZSBqb2IgY29udHJvbC4KKworU3R1ZmYgdGhhdCBkb2VzIG5vdCB3b3JrIHlldDoKKworLSBSdW5uaW5nIGV4dGVybmFsIGNvbW1hbmRzIGZyb20gdGhlIEdVSSBkb2VzIG5vdCB3b3JrIDEwMCUgKGFnYWluIGR1ZSB0byBsYWNrCisgIG9mIHN1cHBvcnQgZm9yIHNlbGVjdCgpKS4gVGhlcmUgd2FzIGEgY2hvaWNlIGJldHdlZW4gc2VlaW5nIHRoZSBjb21tYW5kJ3MKKyAgb3V0cHV0LCBvciBiZWluZyBhYmxlIHRvIGludGVycnVwdCBpdC4gSSBjaG9zZSBmb3Igc2VlaW5nIHRoZSBvdXRwdXQuIEV2ZW4KKyAgbm93IHRoZSBjb21tYW5kIHNvbWV0aW1lcyBjcmFzaGVzIG15c3RlcmlvdXNseSwgYXBwYXJlbnRseSBpbiBCZSdzCisgIG1hbGxvY19pbnRlcm5hbCgpIGNhbGxlZCBmcm9tIHRoZSBwdXRlbnYoKSBmdW5jdGlvbiwgYWZ0ZXIgZm9yaygpaW5nLiAoZGF0YQorICBhY2Nlc3MgZXhjZXB0aW9uIG9jY3VycmVkLCBlYzAxYjBlYzogIDkwZTgwMDAwICpzdHcgcjcsIDB4MDAwMCAocjgpKSg6IWxzCisgIHdvcmtzIHVzdWFsbHksIDpyICFscyB1c3VhbGx5IGRvZXNuJ3QpLiBUaGlzIGhhcyBiZWVuIHJlcG9ydGVkIGFzIGJ1ZworICAjIDk3MTIxNS0wODM4MjYuCistIFRoZSB3aW5kb3cgdGl0bGUuCistIFN0YXJ0aW5nIHRoZSBHVUkgZnJvbSB0aGUgVGVybWluYWwgdmVyc2lvbiB3aXRoIDpndWkgYWx3YXlzIGFjdHMgYXMgaWYKKyAgOmd1aSAtZiB3ZXJlIHVzZWQuIFRoZXJlIGlzIG5vIHdheSB0byBmaXggdGhpcyB0aGF0IEkgY2FuIHNlZS4KKy0gVGhlcmUgYXJlIHNvbWUgc21hbGwgZGlzcGxheSBnbGl0Y2hlcyBoZXJlIGFuZCB0aGVyZSB0aGF0IEkgaG9wZSB0byBjbGVhbiB1cAorICBsYXRlci4gTW9zdCBvZiB0aGVtIG9jY3VyIHdoZW4gdGhlIHdpbmRvdyBpcyBwYXJ0aWFsbHkgb2JzY3VyZWQuIFNvbWUgb2YKKyAgdGhlbSBzZWVtIHRvIGJlIGJ1Z3MgaW4gQmVPUywgYmVjYXVzZSB0aGUgVGVybWluYWwgaGFzIHNpbWlsYXIgZ2xpdGNoZXMuCistIE1vdXNlIHVwIGV2ZW50cyBhcmUgbm90IGdlbmVyYXRlZCB3aGVuIG91dHNpZGUgdGhlIHdpbmRvdy4gVGhpcyBpcyBhIGJ1ZyBpbgorICBCZU9TLiBZb3UgY2FuIG5vdGljZSB0aGlzIHdoZW4gc2VsZWN0aW5nIHRleHQgYW5kIG1vdmluZyB0aGUgY3Vyc29yIG91dHNpZGUKKyAgdGhlIHdpbmRvdywgdGhlbiBsZXR0aW5nIGdvIG9mIHRoZSBtb3VzZSBidXR0b24uICBBbm90aGVyIHdheSBpcyB3aGVuIHlvdQorICBkcmFnIHRoZSBzY3JvbGxiYXIgYW5kIGRvIHRoZSBzYW1lIHRoaW5nLiAgQmVjYXVzZSBWaW0gc3RpbGwgdGhpbmtzIHlvdSBhcmUKKyAgc3RpbGwgcGxheWluZyB3aXRoIHRoZSBzY3JvbGxiYXIgaXQgd29uJ3QgY2hhbmdlIGl0IGl0c2VsZi4gSSBwcm92aWRlZCBhCisgIHdvcmthcm91bmQgd2hpY2gga2lja3MgaW4gd2hlbiB0aGUgd2luZG93IGlzIGFjdGl2YXRlZCBvciBkZWFjdGl2YXRlZCAoc28gaXQKKyAgd29ya3MgYmVzdCB3aXRoIGZvY3VzLSBmb2xsb3dzLW1vdXNlICgvYm9vdC9iaW4vZmZtKSB0dXJuZWQgb24pLgorLSBUaGUgY3Vyc29yIGRvZXMgbm90IGZsYXNoICh2ZXJ5IGxvdyBwcmlvcml0eTsgSSdtIG5vdCBzdXJlIEkgZXZlbiBsaWtlIGl0CisgIHdoZW4gaXQgZmxhc2hlcykKKworCitUaGUgJFZJTSBkaXJlY3RvcnkJCQkJCSpiZW9zLXZpbWRpcioKKworJFZJTSBpcyB0aGUgc3ltYm9saWMgbmFtZSBmb3IgdGhlIHBsYWNlIHdoZXJlIFZpbXMgc3VwcG9ydCBmaWxlcyBhcmUgc3RvcmVkLgorVGhlIGRlZmF1bHQgdmFsdWUgZm9yICRWSU0gaXMgc2V0IGF0IGNvbXBpbGUgdGltZSBhbmQgY2FuIGJlIGRldGVybWluZWQgd2l0aCA+CisKKyAgOnZlcnNpb24KKworVGhlIG5vcm1hbCB2YWx1ZSBpcyAvYm9vdC9ob21lL2NvbmZpZy9zaGFyZS92aW0uIElmIHlvdSBkb24ndCBsaWtlIGl0IHlvdSBjYW4KK3NldCB0aGUgVklNIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJyaWRlIHRoaXMsIG9yIHNldCAnaGVscGZpbGUnIGluIHlvdXIKKy52aW1yYzogPgorCisgIDppZiB2ZXJzaW9uID49IDUwMAorICA6ICAgIHNldCBoZWxwZmlsZT1+L3ZpbS92aW01NC9kb2MvaGVscC50eHQKKyAgOiAgICBzeW50YXggb24KKyAgOmVuZGlmCisKKworNy4gRHJhZyAmIERyb3AJCQkJCQkqYmVvcy1kcmFnbmRyb3AqCisKK1lvdSBjYW4gZHJvcCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgb24gZWl0aGVyIHRoZSBWaW0gaWNvbiAoc3RhcnRzIGEgbmV3IFZpbQorc2Vzc2lvbiwgdW5sZXNzIHlvdSB1c2UgdGhlIEZpbGUgVHlwZXMgYXBwbGljYXRpb24gdG8gc2V0IFZpbSB0byBiZSAiU2luZ2xlCitMYXVuY2giKSBvciBvbiB0aGUgVmltIHdpbmRvdyAoc3RhcnRzIGVkaXRpbmcgdGhlIGZpbGVzKS4gIERyb3BwaW5nIGEgZm9sZGVyCitzZXRzIFZpbSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIHw6Y2R8IHw6cHdkfCBJZiB5b3UgZHJvcCBmaWxlcyBvcgorZm9sZGVycyB3aXRoIGVpdGhlciBTSElGVCBrZXkgcHJlc3NlZCwgVmltIGNoYW5nZXMgZGlyZWN0b3J5IHRvIHRoZSBmb2xkZXIKK3RoYXQgY29udGFpbnMgdGhlIGZpcnN0IGl0ZW0gZHJvcHBlZC4gV2hlbiBzdGFydGluZyBWaW0sIHRoZXJlIGlzIG5vIG5lZWQgdG8KK3ByZXNzIHNoaWZ0OiBWaW0gYmVoYXZlcyBhcyBpZiB5b3UgZG8uCisKK0ZpbGVzIGRyb3BwZWQgc2V0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGxpc3QuIHxhcmd1bWVudC1saXN0fAorCisKKzguIFNpbmdsZSBMYXVuY2ggdnMuIE11bHRpcGxlIExhdW5jaAkJCSpiZW9zLWxhdW5jaCoKKworQXMgZGlzdHJpYnV0ZWQgVmltJ3MgQXBwbGljYXRpb24gRmxhZ3MgKGFzIHNlZW4gaW4gdGhlIEZpbGVUeXBlcyBwcmVmZXJlbmNlKQorYXJlIHNldCB0byBNdWx0aXBsZSBMYXVuY2guIElmIHlvdSBwcmVmZXIsIHlvdSBjYW4gc2V0IHRoZW0gdG8gU2luZ2xlIExhdW5jaAoraW5zdGVhZC4gIEF0dGVtcHRzIHRvIHN0YXJ0IGEgc2Vjb25kIGNvcHkgb2YgVmltIHdpbGwgY2F1c2UgdGhlIGZpcnN0IFZpbSB0bworb3BlbiB0aGUgZmlsZXMgaW5zdGVhZC4gVGhpcyB3b3JrcyBmcm9tIHRoZSBUcmFja2VyIGJ1dCBhbHNvIGZyb20gdGhlIGNvbW1hbmQKK2xpbmUuIEluIHRoZSBsYXR0ZXIgY2FzZSwgbm9uLWZpbGUgKG9wdGlvbikgYXJndW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLgorCitOQjogT25seSB0aGUgR1VJIHZlcnNpb24gaGFzIGEgQkFwcGxpY2F0aW9uIChhbmQgaGVuY2UgQXBwbGljYXRpb24gRmxhZ3MpLgorVGhpcyBzZWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBHVUktbGVzcyB2ZXJzaW9uLCBzaG91bGQgeW91IGNvbXBpbGUgb25lLgorCisKKzkuIEZvbnRzCQkJCQkJKmJlb3MtZm9udHMqCisKK1NldCBmb250cyB3aXRoID4KKworICA6c2V0IGd1aWZvbnQ9Q291cmllcjEwX0JUL1JvbWFuLzEwCisKK3doZXJlIHRoZSBmaXJzdCBwYXJ0IGlzIHRoZSBmb250IGZhbWlseSwgdGhlIHNlY29uZCBwYXJ0IHRoZSBzdHlsZSwgYW5kIHRoZQordGhpcmQgcGFydCB0aGUgc2l6ZS4gWW91IGNhbiB1c2UgdW5kZXJzY29yZXMgaW5zdGVhZCBvZiBzcGFjZXMgaW4gZmFtaWx5IGFuZAorc3R5bGUuCisKK0Jlc3QgcmVzdWx0cyBhcmUgb2J0YWluZWQgd2l0aCBtb25vc3BhY2VkIGZvbnRzIChzdWNoIGFzIENvdXJpZXIpLiBWaW0KK2F0dGVtcHRzIHRvIHVzZSBhbGwgZm9udHMgaW4gQl9GSVhFRF9TUEFDSU5HIG1vZGUgYnV0IGFwcGFyZW50bHkgdGhpcyBkb2VzIG5vdAord29yayBmb3IgcHJvcG9ydGlvbmFsIGZvbnRzIChkZXNwaXRlIHdoYXQgdGhlIEJlQm9vayBzYXlzKS4KKworVmltIGFsc28gdHJpZXMgdG8gdXNlIHRoZSBCX0lTTzg4NTlfMSBlbmNvZGluZywgYWxzbyBrbm93biBhcyBJU08gTGF0aW4gMS4KK1RoaXMgYWxzbyBkb2VzIG5vdCB3b3JrIGZvciBhbGwgZm9udHMuIEl0IGRvZXMgd29yayBmb3IgQ291cmllciwgYnV0IG5vdCBmb3IKK1Byb0ZvbnRJU09MYXRpbjEvUmVndWxhciAoc3RyYW5nZWx5IGVub3VnaCkuIFlvdSBjYW4gdmVyaWZ5IHRoaXMgYnkgZ2l2aW5nIHRoZSA+CisKKyAgOmRpZ3JhcGhzCisKK2NvbW1hbmQsIHdoaWNoIGxpc3RzIGEgYnVuY2ggb2YgY2hhcmFjdGVycyB3aXRoIHRoZWlyIElTTyBMYXRpbiAxIGVuY29kaW5nLgorSWYsIGZvciBpbnN0YW5jZSwgdGhlcmUgYXJlICJib3giIGNoYXJhY3RlcnMgYW1vbmcgdGhlbSwgb3IgdGhlIGxhc3QgY2hhcmFjdGVyCitpc24ndCBhIGRvdHRlZC15LCB0aGVuIGZvciB0aGlzIGZvbnQgdGhlIGVuY29kaW5nIGRvZXMgbm90IHdvcmsuCisKK0lmIHRoZSBmb250IHlvdSBzcGVjaWZ5IGlzIHVuYXZhaWxhYmxlLCB5b3UgZ2V0IHRoZSBzeXN0ZW0gZml4ZWQgZm9udC4KKworU3RhbmRhcmQgZml4ZWQtd2lkdGggc3lzdGVtIGZvbnRzIGFyZToKKworCSAgICAgIFByb0ZvbnRJU09MYXRpbjEvUmVndWxhcgorCQkgIENvdXJpZXIxMF9CVC9Sb21hbgorCQkgIENvdXJpZXIxMF9CVC9JdGFsaWMKKwkJICBDb3VyaWVyMTBfQlQvQm9sZAorCQkgIENvdXJpZXIxMF9CVC9Cb2xkX0l0YWxpYworCitTdGFuZGFyZCBwcm9wb3J0aW9uYWwgc3lzdGVtIGZvbnRzIGFyZToKKworCQkgICAgU3dpczcyMV9CVC9Sb21hbgorCQkgICAgU3dpczcyMV9CVC9JdGFsaWMKKwkJICAgIFN3aXM3MjFfQlQvQm9sZAorCQkgICAgU3dpczcyMV9CVC9Cb2xkX0l0YWxpYworCQlEdXRjaDgwMV9SbV9CVC9Sb21hbgorCQlEdXRjaDgwMV9SbV9CVC9JdGFsaWMKKwkJRHV0Y2g4MDFfUm1fQlQvQm9sZAorCQlEdXRjaDgwMV9SbV9CVC9Cb2xkX0l0YWxpYworCQkgICBCYXNrZXJ2aWxsZS9Sb21hbgorCQkgICBCYXNrZXJ2aWxsZS9JdGFsaWMKKwkJICAgQmFza2VydmlsbGUvQm9sZAorCQkgICBCYXNrZXJ2aWxsZS9Cb2xkX0l0YWxpYworCQkgU3ltYm9sUHJvcF9CVC9SZWd1bGFyCisKK1RyeSBzb21lIG9mIHRoZW0sIGp1c3QgZm9yIGZ1bi4KKworCisxMC4gVGhlIG1ldGEga2V5IG1vZGlmaWVyCQkJCSpiZW9zLW1ldGEqCisKK1RoZSBNRVRBIGtleSBtb2RpZmllciBpcyBvYnRhaW5lZCBieSB0aGUgbGVmdCBvciByaWdodCBPUFRJT04ga2V5cy4gIFRoaXMgaXMKK2JlY2F1c2UgdGhlIEFMVCAoYWthIENPTU1BTkQpIGtleXMgYXJlIG5vdCBwYXNzZWQgdG8gYXBwbGljYXRpb25zLgorCisKKzExLiBNb3VzZSBrZXkgbWFwcGluZ3MJCQkJCSpiZW9zLW1vdXNlKgorCitWaW0gY2FsbHMgdGhlIHZhcmlvdXMgbW91c2UgYnV0dG9ucyBMZWZ0TW91c2UsIE1pZGRsZU1vdXNlIGFuZCBSaWdodE1vdXNlLiAgSWYKK3lvdSB1c2UgdGhlIGRlZmF1bHQgTW91c2UgcHJlZmVyZW5jZSBzZXR0aW5ncyB0aGVzZSBuYW1lcyBpbmRlZWQgY29ycmVzcG9uZCB0bworcmVhbGl0eS4gVmltIHVzZXMgdGhpcyBtYXBwaW5nOgorCisgICAgQnV0dG9uIDEgLT4gTGVmdE1vdXNlLAorICAgIEJ1dHRvbiAyIC0+IFJpZ2h0TW91c2UsCisgICAgQnV0dG9uIDMgLT4gTWlkZGxlTW91c2UuCisKK0lmIHlvdXIgbW91c2UgaGFzIGZld2VyIHRoYW4gMyBidXR0b25zIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93biBtYXBwaW5nIGZyb20KK21vdXNlIGNsaWNrcyB3aXRoIG1vZGlmaWVyKHMpIHRvIG90aGVyIG1vdXNlIGJ1dHRvbnMuIFNlZSB0aGUgZmlsZQordmltLTUueC9tYWNyb3Mvc3dhcG1vdXMudmltIGZvciBhbiBleGFtcGxlLgkJfGd1aS1tb3VzZS1tYXBwaW5nfAorCisKKzEyLiBDb2xvciBuYW1lcwkJCQkJCSpiZW9zLWNvbG9ycyoKKworVmltIGhhcyBhIG51bWJlciBvZiBjb2xvciBuYW1lcyBidWlsdC1pbi4gQWRkaXRpb25hbCBuYW1lcyBhcmUgcmVhZCBmcm9tIHRoZQorZmlsZSAkVklNUlVOVElNRS9yZ2IudHh0LCBpZiBwcmVzZW50LiBUaGlzIGZpbGUgaXMgYmFzaWNhbGx5IHRoZSBjb2xvcgorZGF0YWJhc2UgZnJvbSBYLiBOYW1lcyB1c2VkIGZyb20gdGhpcyBmaWxlIGFyZSBjYWNoZWQgZm9yIGVmZmljaWVuY3kuCisKKworMTMuIENvbXBpbGluZyB3aXRoIFBlcmwJCQkJCSpiZW9zLXBlcmwqCisKK0NvbXBpbGluZyB3aXRoIFBlcmwgc3VwcG9ydCBlbmFibGVkIGlzIHNsaWdodGx5IHRyaWNreS4gVGhlIE1ldHJvd2Vya3MKK2NvbXBpbGVyIGhhcyBzb21lIHN0cmFuZ2UgaWRlYXMgd2hlcmUgdG8gc2VhcmNoIGZvciBpbmNsdWRlIGZpbGVzLiBTaW5jZQorc2V2ZXJhbCBpbmNsdWRlIGZpbGVzIHdpdGggUGVybCBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHNvbWUgVmltIGhlYWRlcgorZmlsZXMsIHRoZSB3cm9uZyBvbmVzIGdldCBpbmNsdWRlZC4gVG8gZml4IHRoaXMsIHJ1biB0aGUgZm9sbG93aW5nIFBlcmwKK3NjcmlwdCB3aGlsZSBpbiB0aGUgdmltLTUuMC9zcmMgZGlyZWN0b3J5OiA+CisKKyAgIHByZXByb2MucGwgPiBwZXJsLmgKKworICAgICMhL2Jpbi9lbnYgcGVybAorICAgICMgU2ltcGxlICNpbmNsdWRlIGV4cGFuZGVyLCBqdXN0IGdvb2QgZW5vdWdoIGZvciB0aGUgUGVybCBoZWFkZXIgZmlsZXMuCisKKyAgICB1c2Ugc3RyaWN0OworICAgIHVzZSBJTzo6RmlsZTsKKyAgICB1c2UgQ29uZmlnOworCisgICAgc3ViIGRvaW5jbHVkZQorICAgIHsKKwlteSAkZmlsZW5hbWUgPSAkX1swXTsKKwlteSAkZmggPSBuZXcgSU86OkZpbGUoJGZpbGVuYW1lLCAiciIpOworCWlmIChkZWZpbmVkICRmaCkgeworCSAgICBwcmludCAiLyogU3RhcnQgb2YgJGZpbGVuYW1lICovXG4iOworCisJICAgIHdoaWxlICg8JGZoPikgeworCQlpZiAoL14jaW5jbHVkZSAiKC4qKSIvKSB7CisJCSAgICBkb2luY2x1ZGUoJDEpOworCQkgICAgcHJpbnQgIi8qIEJhY2sgaW4gJGZpbGVuYW1lICovXG4iOworCQl9IGVsc2UgeworCQkgICAgcHJpbnQgJF87CisJCX0KKwkgICAgfQorCSAgICBwcmludCAiLyogRW5kIG9mICRmaWxlbmFtZSAqL1xuIjsKKworCSAgICB1bmRlZiAkZmg7CisJfSBlbHNlIHsKKwkgICAgcHJpbnQgIi8qIENhbm5vdCBvcGVuICRmaWxlbmFtZSAqL1xuIjsKKwkgICAgcHJpbnQgIiNpbmNsdWRlIFwiJGZpbGVuYW1lXCJcbiI7CisJfQorICAgIH0KKworICAgIGNoZGlyICAgICAkQ29uZmlne2luc3RhbGxhcmNobGlifS4iL0NPUkUiOworICAgIGRvaW5jbHVkZSAicGVybC5oIjsKKworSXQgZXhwYW5kcyB0aGUgInBlcmwuaCIgaGVhZGVyIGZpbGUsIHVzaW5nIG9ubHkgb3RoZXIgUGVybCBoZWFkZXIgZmlsZXMuCisKK05vdyB5b3UgY2FuIGNvbmZpZ3VyZSAmIG1ha2UgVmltIHdpdGggdGhlIC0tZW5hYmxlLXBlcmxpbnRlcnAgb3B0aW9uLgorQmUgd2FybmVkIHRob3VnaCB0aGF0IHRoaXMgYWRkcyBhYm91dCA2MTYga2lsb2J5dGVzIHRvIHRoZSBzaXplIG9mIFZpbSEKK1dpdGhvdXQgUGVybCwgVmltIHdpdGggZGVmYXVsdCBmZWF0dXJlcyBhbmQgR1VJIGlzIGFib3V0IDU3NUssIHdpdGggUGVybAoraXQgaXMgYWJvdXQgMTE5MUsuCisKKy1PbGFmIFNlaWJlcnQKKworW05vdGU6IHRoZXNlIGFkZHJlc3NlcyBubyBsb25nZXIgd29yazpdCis8cmhpYWx0b0Bwb2xkZXIudWJjLmt1bi5ubD4KK2h0dHA6Ly9wb2xkZXIudWJjLmt1bi5ubC9+cmhpYWx0by9iZQorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3NfZG9zLnR4dCBiL3J1bnRpbWUvZG9jL29zX2Rvcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4MmYxNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29zX2Rvcy50eHQKQEAgLTAsMCArMSwyOTUgQEAKKypvc19kb3MudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBEZWMgMjAKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCisJCQkJCQkJKmRvcyogKkRPUyoKK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGNvbW1vbiBwYXJ0aWN1bGFyaXRpZXMgb2YgdGhlIE1TLURPUyBhbmQgV2luMzIKK3ZlcnNpb25zIG9mIFZpbS4gIEFsc28gc2VlIHxvc193aW4zMi50eHR8IGFuZCB8b3NfbXNkb3MudHh0fC4KKworMS4gRmlsZSBsb2NhdGlvbnMJCXxkb3MtbG9jYXRpb25zfAorMi4gVXNpbmcgYmFja3NsYXNoZXMJCXxkb3MtYmFja3NsYXNofAorMy4gU3RhbmRhcmQgbWFwcGluZ3MJCXxkb3Mtc3RhbmRhcmQtbWFwcGluZ3N8Cis0LiBTY3JlZW4gb3V0cHV0IGFuZCBjb2xvcnMJfGRvcy1jb2xvcnN8Cis1LiBGaWxlIGZvcm1hdHMJCQl8ZG9zLWZpbGUtZm9ybWF0c3wKKzYuIDpjZCBjb21tYW5kCQkJfGRvcy06Y2R8Cis3LiBJbnRlcnJ1cHRpbmcJCQl8ZG9zLUNUUkwtQnJlYWt8Cis4LiBUZW1wIGZpbGVzCQkJfGRvcy10ZW1wLWZpbGVzfAorOS4gU2hlbGwgb3B0aW9uIGRlZmF1bHQJCXxkb3Mtc2hlbGx8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gRmlsZSBsb2NhdGlvbnMJCQkJCSpkb3MtbG9jYXRpb25zKgorCitJZiB5b3Uga2VlcCB0aGUgVmltIGV4ZWN1dGFibGUgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBoZWxwIGFuZAorc3ludGF4IHN1YmRpcmVjdG9yaWVzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIFZpbSB0bword29yay4gIE5vIHJlZ2lzdHJ5IGVudHJpZXMgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIG5lZWQgdG8gYmUgc2V0LiAgSnVzdCBtYWtlCitzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBpcyBpbiB5b3VyIHNlYXJjaCBwYXRoLCBvciB1c2UgYSBzaG9ydGN1dCBvbiB0aGUKK2Rlc2t0b3AuCisKK1lvdXIgdmltcmMgZmlsZXMgKCJfdmltcmMiIGFuZCAiX2d2aW1yYyIpIGFyZSBub3JtYWxseSBsb2NhdGVkIG9uZSBkaXJlY3RvcnkKK3VwIGZyb20gdGhlIHJ1bnRpbWUgZmlsZXMuICBJZiB5b3Ugd2FudCB0byBwdXQgdGhlbSBzb21ld2hlcmUgZWxzZSwgc2V0IHRoZQorZW52aXJvbm1lbnQgdmFyaWFibGUgJFZJTSB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSBrZWVwIHRoZW0uICBFeGFtcGxlOiA+CisJc2V0IFZJTT1DOlx1c2VyXHBpZXQKK1dpbGwgZmluZCAiYzpcdXNlclxwaWV0XF92aW1yYyIuCitOb3RlOiBUaGlzIHdvdWxkIG9ubHkgYmUgbmVlZGVkIHdoZW4gdGhlIGNvbXB1dGVyIGlzIHVzZWQgYnkgc2V2ZXJhbCBwZW9wbGUuCitPdGhlcndpc2UgaXQncyBzaW1wbGVyIHRvIGtlZXAgeW91ciBfdmltcmMgZmlsZSBpbiB0aGUgZGVmYXVsdCBwbGFjZS4KKworSWYgeW91IG1vdmUgdGhlIGV4ZWN1dGFibGUgdG8gYW5vdGhlciBsb2NhdGlvbiwgeW91IGFsc28gbmVlZCB0byBzZXQgdGhlICRWSU0KK2Vudmlyb25tZW50IHZhcmlhYmxlLiAgVGhlIHJ1bnRpbWUgZmlsZXMgd2lsbCBiZSBmb3VuZCBpbiAiJFZJTS92aW17dmVyc2lvbn0iLgorRXhhbXBsZTogPgorCXNldCBWSU09RTpcdmltCitXaWxsIGZpbmQgdGhlIHZlcnNpb24gNS40IHJ1bnRpbWUgZmlsZXMgaW4gImU6XHZpbVx2aW01NCIuCitOb3RlOiBUaGlzIGlzIF9ub3RfIHJlY29tbWVuZGVkLiAgVGhlIHByZWZlcnJlZCB3YXkgaXMgdG8ga2VlcCB0aGUgZXhlY3V0YWJsZQoraW4gdGhlIHJ1bnRpbWUgZGlyZWN0b3J5LgorCitJZiB5b3UgbW92ZSB5b3VyIGV4ZWN1dGFibGUgQU5EIHdhbnQgdG8gcHV0IHlvdXIgIl92aW1yYyIgYW5kICJfZ3ZpbXJjIiBmaWxlcworc29tZXdoZXJlIGVsc2UsIHlvdSBtdXN0IHNldCAkVklNIHRvIHdoZXJlIHlvdSB2aW1yYyBmaWxlcyBhcmUsIGFuZCBzZXQKKyRWSU1SVU5USU1FIHRvIHRoZSBydW50aW1lIGZpbGVzLiAgRXhhbXBsZTogPgorCXNldCBWSU09QzpcdXNyXHBpZXQKKwlzZXQgVklNUlVOVElNRT1FOlx2aW1cdmltNTQKK1dpbGwgZmluZCAiYzpcdXNlclxwaWV0XF92aW1yYyIgYW5kIHRoZSBydW50aW1lIGZpbGVzIGluICJlOlx2aW1cdmltNTQiLgorCitTZWUgfCRWSU18IGFuZCB8JFZJTVJVTlRJTUV8IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitVbmRlciBXaW5kb3dzIDk1LCB5b3UgY2FuIHNldCAkVklNIGluIHlvdXIgQzpcYXV0b2V4ZWMuYmF0IGZpbGUuICBGb3IKK2V4YW1wbGU6ID4KKyAgc2V0IFZJTT1EOlx2aW0KK1VuZGVyIFdpbmRvd3MgTlQsIHlvdSBjYW4gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgZWFjaCB1c2VyIHNlcGFyYXRlbHkKK3VuZGVyICJTdGFydC9TZXR0aW5ncy9Db250cm9sIFBhbmVsLT5TeXN0ZW0iLCBvciB0aHJvdWdoIHRoZSBwcm9wZXJ0aWVzIGluIHRoZQorbWVudSBvZiAiTXkgQ29tcHV0ZXIiLCB1bmRlciB0aGUgRW52aXJvbm1lbnQgVGFiLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFVzaW5nIGJhY2tzbGFzaGVzCQkJCQkqZG9zLWJhY2tzbGFzaCoKKworVXNpbmcgYmFja3NsYXNoZXMgaW4gZmlsZSBuYW1lcyBjYW4gYmUgYSBwcm9ibGVtLiAgVmkgaGFsdmVzIHRoZSBudW1iZXIgb2YKK2JhY2tzbGFzaGVzIGZvciBzb21lIGNvbW1hbmRzLiAgVmltIGlzIGEgYml0IG1vcmUgdG9sZXJhbnQgYW5kIGRvZXMgbm90IHJlbW92ZQorYmFja3NsYXNoZXMgZnJvbSBhIGZpbGUgbmFtZSwgc28gIjplIGM6XGZvb1xiYXIiIHdvcmtzIGFzIGV4cGVjdGVkLiAgQnV0IHdoZW4KK2EgYmFja3NsYXNoIG9jY3VycyBiZWZvcmUgYSBzcGVjaWFsIGNoYXJhY3RlciAoc3BhY2UsIGNvbW1hLCBiYWNrc2xhc2gsIGV0Yy4pLAorVmltIHJlbW92ZXMgdGhlIGJhY2tzbGFzaC4gIFVzZSBzbGFzaGVzIHRvIGF2b2lkIHByb2JsZW1zOiAiOmUgYzovZm9vL2JhciIKK3dvcmtzIGZpbmUuICBWaW0gcmVwbGFjZXMgdGhlIHNsYXNoZXMgd2l0aCBiYWNrc2xhc2hlcyBpbnRlcm5hbGx5IHRvIGF2b2lkCitwcm9ibGVtcyB3aXRoIHNvbWUgTVMtRE9TIHByb2dyYW1zIGFuZCBXaW4zMiBwcm9ncmFtcy4KKworV2hlbiB5b3UgcHJlZmVyIHRvIHVzZSBmb3J3YXJkIHNsYXNoZXMsIHNldCB0aGUgJ3NoZWxsc2xhc2gnIG9wdGlvbi4gIFZpbSB3aWxsCit0aGVuIHJlcGxhY2UgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMgd2hlbiBleHBhbmRpbmcgZmlsZSBuYW1lcy4gIFRoaXMKK2lzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gdXNpbmcgYSBVbml4LWxpa2UgJ3NoZWxsJy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBTdGFuZGFyZCBtYXBwaW5ncwkJCQkqZG9zLXN0YW5kYXJkLW1hcHBpbmdzKgorCitDVFJMLVBhZ2VVcAljdXJzb3IgdG8gZmlyc3Qgc2NyZWVuIGxpbmUJCQkqPEMtUGFnZVVwPioKK0NUUkwtUGFnZURvd24JY3Vyc29yIHRvIGxhc3Qgc2NyZWVuIGxpbmUsIGxhc3QgY2hhcmFjdGVyCSo8Qy1QYWdlRG93bj4qCisKK1RoZXNlIG1hcHBpbmdzIGFjY29tcGxpc2ggdGhpczoKKwora2V5CQlrZXkgY29kZSAgICAgTm9ybWFsL1Zpc3VhbCBtb2RlCSAgICBJbnNlcnQgbW9kZSB+CitDVFJMLVBhZ2VVcAk8TS1OPjxNLUMtRD4JICAgIEgJCSAgICA8Qy1PPkgKK0NUUkwtUGFnZURvd24JPE0tTj52CQkgICAgTCQJCSAgICA8Qy1PPkw8Qy1PPiQKKworQWRkaXRpb25hbGx5LCB0aGVzZSBrZXlzIGFyZSBhdmFpbGFibGUgZm9yIGNvcHkvY3V0L3Bhc3RlLiAgSW4gdGhlIFdpbjMyCithbmQgREpHUFAgdmVyc2lvbnMsIHRoZXkgYWxzbyB1c2UgdGhlIGNsaXBib2FyZC4KKworU2hpZnQtSW5zZXJ0CXBhc3RlIHRleHQgKGZyb20gY2xpcGJvYXJkKQkJCSo8Uy1JbnNlcnQ+KgorQ1RSTC1JbnNlcnQJY29weSBWaXN1YWwgdGV4dCAodG8gY2xpcGJvYXJkKQkJCSo8Qy1JbnNlcnQ+KgorQ1RSTC1EZWwJY3V0IFZpc3VhbCB0ZXh0ICh0byBjbGlwYm9hcmQpCQkJKjxDLURlbD4qCitTaGlmdC1EZWwJY3V0IFZpc3VhbCB0ZXh0ICh0byBjbGlwYm9hcmQpCQkJKjxTLURlbD4qCisKK1RoZXNlIG1hcHBpbmdzIGFjY29tcGxpc2ggdGhpcyAoV2luMzIgYW5kIERKR1BQIHZlcnNpb25zIG9mIFZpbSk6CisKK2tleQkJa2V5IGNvZGUgICAgIE5vcm1hbAlWaXN1YWwJICAgIEluc2VydCB+CitTaGlmdC1JbnNlcnQJPE0tTj48TS1UPiAgICIqUAkiLWQiKlAgICAgICA8Qy1SPjxDLU8+KgorQ1RSTC1JbnNlcnQJPE0tTj48TS1VPgkJIip5CitTaGlmdC1EZWwJPE0tTj48TS1XPgkJIipkCitDVFJMLURlbAk8TS1OPjxNLVg+CQkiKmQKKworT3IgdGhlc2UgbWFwcGluZ3MgKG5vbi1XaW4zMiB2ZXJzaW9uIG9mIFZpbSk6CisKK2tleQkJa2V5IGNvZGUgICAgIE5vcm1hbAlWaXN1YWwJICAgIEluc2VydCB+CitTaGlmdC1JbnNlcnQJPE0tTj48TS1UPiAgIFAJCSItZFAJICAgIDxDLVI+PEMtTz4iCitDVFJMLUluc2VydAk8TS1OPjxNLVU+CQl5CitTaGlmdC1EZWwJPE0tTj48TS1XPgkJZAorQ1RSTC1EZWwJPE0tTj48TS1YPgkJZAorCitXaGVuIHRoZSBjbGlwYm9hcmQgaXMgc3VwcG9ydGVkLCB0aGUgIiogcmVnaXN0ZXIgaXMgdXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBTY3JlZW4gb3V0cHV0IGFuZCBjb2xvcnMJCQkJKmRvcy1jb2xvcnMqCisKK1RoZSBkZWZhdWx0IG91dHB1dCBtZXRob2QgZm9yIHRoZSBzY3JlZW4gaXMgdG8gdXNlIGJpb3MgY2FsbHMuICBUaGlzIHdvcmtzCityaWdodCBhd2F5IG9uIG1vc3Qgc3lzdGVtcy4gIFlvdSBkbyBub3QgbmVlZCBhbnNpLnN5cy4gIFlvdSBjYW4gdXNlICI6bW9kZSIgdG8KK3NldCB0aGUgY3VycmVudCBzY3JlZW4gbW9kZS4gIFNlZSB8Om1vZGV8LgorCitUbyBjaGFuZ2UgdGhlIHNjcmVlbiBjb2xvcnMgdGhhdCBWaW0gdXNlcywgeW91IGNhbiB1c2UgdGhlIHw6aGlnaGxpZ2h0fAorY29tbWFuZC4gIFRoZSBOb3JtYWwgaGlnaGxpZ2h0IGdyb3VwIHNwZWNpZmllcyB0aGUgY29sb3JzIFZpbSB1c2VzIGZvciBub3JtYWwKK3RleHQuICBGb3IgZXhhbXBsZSwgdG8gZ2V0IGdyZXkgdGV4dCBvbiBhIGJsdWUgYmFja2dyb3VuZDogPgorCTpoaSBOb3JtYWwgY3Rlcm1iZz1CbHVlIGN0ZXJtZmc9Z3JleQorU2VlIHxoaWdobGlnaHQtZ3JvdXBzfCBmb3Igb3RoZXIgZ3JvdXBzIHRoYXQgYXJlIGF2YWlsYWJsZS4KKworQSBET1MgY29uc29sZSBkb2VzIG5vdCBzdXBwb3J0IGF0dHJpYnV0ZXMgbGlrZSBib2xkIGFuZCB1bmRlcmxpbmluZy4gIFlvdSBjYW4KK3NldCB0aGUgY29sb3IgdXNlZCBpbiBmaXZlIG1vZGVzIHdpdGggbmluZSB0ZXJtY2FwIG9wdGlvbnMuICBOb3RlIHRoYXQgdGhpcyBpcworbm90IG5lY2Vzc2FyeSBzaW5jZSB5b3UgY2FuIHNldCB0aGUgY29sb3IgZGlyZWN0bHkgd2l0aCB0aGUgIjpoaWdobGlnaHQiCitjb21tYW5kOyB0aGVzZSBvcHRpb25zIGFyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIFZpbSB2ZXJzaW9ucy4KK1RoZSB8J2hpZ2hsaWdodCd8IG9wdGlvbiBzcGVjaWZpZXMgd2hpY2ggb2YgdGhlIGZpdmUgbW9kZXMgaXMgdXNlZCBmb3Igd2hpY2gKK2FjdGlvbi4gPgorCisJOnNldCB0X21yPV5WXltcfHh4bQkJc3RhcnQgb2YgaW52ZXJ0IG1vZGUKKwk6c2V0IHRfbWQ9XlZeW1x8eHhtCQlzdGFydCBvZiBib2xkIG1vZGUKKwk6c2V0IHRfbWU9XlZeW1x8eHhtCQliYWNrIHRvIG5vcm1hbCB0ZXh0CisKKwk6c2V0IHRfc289XlZeW1x8eHhtCQlzdGFydCBvZiBzdGFuZG91dCBtb2RlCisJOnNldCB0X3NlPV5WXltcfHh4bQkJYmFjayB0byBub3JtYWwgdGV4dAorCisJOnNldCB0X3VzPV5WXltcfHh4bQkJc3RhcnQgb2YgdW5kZXJsaW5lIG1vZGUKKwk6c2V0IHRfdWU9XlZeW1x8eHhtCQliYWNrIHRvIG5vcm1hbCB0ZXh0CisKKwk6c2V0IHRfWkg9XlZeW1x8eHhtCQlzdGFydCBvZiBpdGFsaWNzIG1vZGUKKwk6c2V0IHRfWlI9XlZeW1x8eHhtCQliYWNrIHRvIG5vcm1hbCB0ZXh0CisKK15WIGlzIENUUkwtVgorXlsgaXMgPEVzYz4KK1lvdSBtdXN0IHJlcGxhY2UgeHggd2l0aCBhIGRlY2ltYWwgY29kZSwgd2hpY2ggaXMgdGhlIGZvcmVncm91bmQgY29sb3IgbnVtYmVyCithbmQgYmFja2dyb3VuZCBjb2xvciBudW1iZXIgYWRkZWQgdG9nZXRoZXI6CisKK0NPTE9SCQkJRk9SRUdST1VORAlCQUNLR1JPVU5ECX4KK0JsYWNrCQkJICAgIDAJCSAgICAwCitEYXJrQmx1ZQkJICAgIDEJCSAgIDE2CitEYXJrR3JlZW4JCSAgICAyCQkgICAzMgorRGFya0N5YW4JCSAgICAzCQkgICA0OAorRGFya1JlZAkJCSAgICA0CQkgICA2NAorRGFya01hZ2VudGEJCSAgICA1CQkgICA4MAorQnJvd24sIERhcmtZZWxsb3cJICAgIDYJCSAgIDk2CitMaWdodEdyYXkJCSAgICA3CQkgIDExMgorRGFya0dyYXkJCSAgICA4CQkgIDEyOCAqCitCbHVlLCBMaWdodEJsdWUJCSAgICA5CQkgIDE0NCAqCitHcmVlbiwgTGlnaHRHcmVlbgkgICAxMAkJICAxNjAgKgorQ3lhbiwgTGlnaHRDeWFuCQkgICAxMQkJICAxNzYgKgorUmVkLCBMaWdodFJlZAkJICAgMTIJCSAgMTkyICoKK01hZ2VudGEsIExpZ2h0TWFnZW50YQkgICAxMwkJICAyMDggKgorWWVsbG93LCBMaWdodFllbGxvdwkgICAxNAkJICAyMjQgKgorV2hpdGUJCQkgICAxNQkJICAyNDAgKgorCisqIERlcGVuZGluZyBvbiB0aGUgZGlzcGxheSBtb2RlLCB0aGUgY29sb3IgY29kZXMgYWJvdmUgMTI4IG1heSBub3QgYmUKKyAgYXZhaWxhYmxlLCBhbmQgY29kZSAxMjggd2lsbCBtYWtlIHRoZSB0ZXh0IGJsaW5rLgorCitXaGVuIHlvdSB1c2UgMCwgdGhlIGNvbG9yIGlzIHJlc2V0IHRvIHRoZSBvbmUgdXNlZCB3aGVuIHlvdSBzdGFydGVkIFZpbQorKHVzdWFsbHkgNywgbGlnaHRncmF5IG9uIGJsYWNrLCBidXQgeW91IGNhbiBvdmVycmlkZSB0aGlzLiAgSWYgeW91IGhhdmUKK292ZXJyaWRkZW4gdGhlIGRlZmF1bHQgY29sb3JzIGluIGEgY29tbWFuZCBwcm9tcHQsIHlvdSBtYXkgbmVlZCB0byBhZGp1c3QKK3NvbWUgb2YgdGhlIGhpZ2hsaWdodCBjb2xvcnMgaW4geW91ciB2aW1yYy0tLXNlZSBiZWxvdykuCitUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciB0X21lLgorCitUaGUgZGVmYXVsdHMgZm9yIHRoZSB2YXJpb3VzIGhpZ2hsaWdodCBtb2RlcyBhcmU6CisJdF9tcgkxMTIJIHJldmVyc2UgbW9kZTogQmxhY2sgdGV4dCAoMCkgb24gTGlnaHRHcmF5ICgxMTIpCisJdF9tZAkgMTUJIGJvbGQgbW9kZTogV2hpdGUgdGV4dCAoMTUpIG9uIEJsYWNrICgwKQorCXRfbWUJICAwCSBub3JtYWwgbW9kZSAocmV2ZXJ0IHRvIGRlZmF1bHQpCisKKwl0X3NvCSAzMQkgc3RhbmRvdXQgbW9kZTogV2hpdGUgKDE1KSB0ZXh0IG9uIERhcmtCbHVlICgxNikKKwl0X3NlCSAgMAkgc3RhbmRvdXQgbW9kZSBlbmQgKHJldmVydCB0byBkZWZhdWx0KQorCisJdF9jemgJMjI1CSBpdGFsaWMgbW9kZTogRGFya0JsdWUgdGV4dCAoMSkgb24gWWVsbG93ICgyMjQpCisJdF9jenIJICAwCSBpdGFsaWMgbW9kZSBlbmQgKHJldmVydCB0byBkZWZhdWx0KQorCisJdF91cwkgNjcJIHVuZGVybGluZSBtb2RlOiBEYXJrQ3lhbiB0ZXh0ICgzKSBvbiBEYXJrUmVkICg2NCkKKwl0X3VlCSAgMAkgdW5kZXJsaW5lIG1vZGUgZW5kIChyZXZlcnQgdG8gZGVmYXVsdCkKKworVGhlc2UgY29sb3JzIHdlcmUgY2hvc2VuIGJlY2F1c2UgdGhleSBhbHNvIGxvb2sgZ29vZCB3aGVuIHVzaW5nIGFuIGludmVydGVkCitkaXNwbGF5LCBidXQgeW91IGNhbiBjaGFuZ2UgdGhlbSB0byB5b3VyIGxpa2luZy4KKworRXhhbXBsZTogPgorICA6c2V0IHRfbXI9XlZeW1x8OTdtCSIgc3RhcnQgb2YgaW52ZXJ0IG1vZGU6IERhcmtCbHVlICgxKSBvbiBCcm93biAoOTYpCisgIDpzZXQgdF9tZD1eVl5bXHw2N20JIiBzdGFydCBvZiBib2xkIG1vZGU6IERhcmtDeWFuICgzKSBvbiBEYXJrUmVkICg2NCkKKyAgOnNldCB0X21lPV5WXltcfDExMm0JIiBiYWNrIHRvIG5vcm1hbCBtb2RlOiBCbGFjayAoMCkgb24gTGlnaHRHcmF5ICgxMTIpCisKKyAgOnNldCB0X3NvPV5WXltcfDM3bQkiIHN0YXJ0IG9mIHN0YW5kb3V0IG1vZGU6IERhcmtNYWdlbnRhICg1KSBvbiBEYXJrR3JlZW4KKwkJCQkJCQkJCSgzMikKKyAgOnNldCB0X3NlPV5WXltcfDExMm0JIiBiYWNrIHRvIG5vcm1hbCBtb2RlOiBCbGFjayAoMCkgb24gTGlnaHRHcmF5ICgxMTIpCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gRmlsZSBmb3JtYXRzCQkJCQkJKmRvcy1maWxlLWZvcm1hdHMqCisKK0lmIHRoZSAnZmlsZWZvcm1hdCcgb3B0aW9uIGlzIHNldCB0byAiZG9zIiAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCBWaW0gYWNjZXB0cworYSBzaW5nbGUgPE5MPiBvciBhIDxDUj48Tkw+IHBhaXIgZm9yIGVuZC1vZi1saW5lICg8RU9MPikuICBXaGVuIHdyaXRpbmcgYQorZmlsZSwgVmltIHVzZXMgPENSPjxOTD4uICBUaHVzLCBpZiB5b3UgZWRpdCBhIGZpbGUgYW5kIHdyaXRlIGl0LCBWaW0gcmVwbGFjZXMKKzxOTD4gd2l0aCA8Q1I+PE5MPi4KKworSWYgdGhlICdmaWxlZm9ybWF0JyBvcHRpb24gaXMgc2V0IHRvICJ1bml4IiwgVmltIHVzZXMgYSBzaW5nbGUgPE5MPiBmb3IgPEVPTD4KK2FuZCBzaG93cyA8Q1I+IGFzIF5NLgorCitZb3UgY2FuIHVzZSBWaW0gdG8gcmVwbGFjZSA8Tkw+IHdpdGggPENSPjxOTD4gYnkgcmVhZGluZyBpbiBhbnkgbW9kZSBhbmQKK3dyaXRpbmcgaW4gRG9zIG1vZGUgKCI6c2UgZmY9ZG9zIikuCitZb3UgY2FuIHVzZSBWaW0gdG8gcmVwbGFjZSA8Q1I+PE5MPiB3aXRoIDxOTD4gYnkgcmVhZGluZyBpbiBEb3MgbW9kZSBhbmQKK3dyaXRpbmcgaW4gVW5peCBtb2RlICgiOnNlIGZmPXVuaXgiKS4KKworVmltIHNldHMgJ2ZpbGVmb3JtYXQnIGF1dG9tYXRpY2FsbHkgd2hlbiAnZmlsZWZvcm1hdHMnIGlzIG5vdCBlbXB0eSAod2hpY2ggaXMKK3RoZSBkZWZhdWx0KSwgc28geW91IGRvbid0IHJlYWxseSBoYXZlIHRvIHdvcnJ5IGFib3V0IHdoYXQgeW91IGFyZSBkb2luZy4KKwkJCQkJfCdmaWxlZm9ybWF0J3wgfCdmaWxlZm9ybWF0cyd8CisKK0lmIHlvdSB3YW50IHRvIGVkaXQgYSBzY3JpcHQgZmlsZSBvciBhIGJpbmFyeSBmaWxlLCB5b3Ugc2hvdWxkIHNldCB0aGUKKydiaW5hcnknIG9wdGlvbiBiZWZvcmUgbG9hZGluZyB0aGUgZmlsZS4gIFNjcmlwdCBmaWxlcyBhbmQgYmluYXJ5IGZpbGVzIG1heQorY29udGFpbiBzaW5nbGUgPE5MPiBjaGFyYWN0ZXJzIHdoaWNoIFZpbSB3b3VsZCByZXBsYWNlIHdpdGggPENSPjxOTD4uICBZb3UgY2FuCitzZXQgJ2JpbmFyeScgYXV0b21hdGljYWxseSBieSBzdGFydGluZyBWaW0gd2l0aCB0aGUgIi1iIiAoYmluYXJ5KSBvcHRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gOmNkIGNvbW1hbmQJCQkJCQkqZG9zLTpjZCoKKworVGhlICI6Y2QiIGNvbW1hbmQgcmVjb2duaXplcyB0aGUgZHJpdmUgc3BlY2lmaWVyIGFuZCBjaGFuZ2VzIHRoZSBjdXJyZW50Citkcml2ZS4gIFVzZSAiOmNkIGM6IiB0byBtYWtlIGRyaXZlIEMgdGhlIGFjdGl2ZSBkcml2ZS4gIFVzZSAiOmNkIGQ6XGZvbyIgdG8gZ28KK3RvIHRoZSBkaXJlY3RvcnkgImZvbyIgaW4gdGhlIHJvb3Qgb2YgZHJpdmUgRC4gIFZpbSBhbHNvIHJlY29nbml6ZXMgVU5DIG5hbWVzCitpZiB0aGUgc3lzdGVtIHN1cHBvcnRzIHRoZW07IGUuZy4sICI6Y2QgXFxzZXJ2ZXJcc2hhcmVcZGlyIi4gIHw6Y2R8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gSW50ZXJydXB0aW5nCQkJCQkJKmRvcy1DVFJMLUJyZWFrKgorCitVc2UgQ1RSTC1CcmVhayBpbnN0ZWFkIG9mIENUUkwtQyB0byBpbnRlcnJ1cHQgc2VhcmNoZXMuICBWaW0gZG9lcyBub3QgZGV0ZWN0Cit0aGUgQ1RSTC1DIHVudGlsIGl0IHRyaWVzIHRvIHJlYWQgYSBrZXkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gVGVtcCBmaWxlcwkJCQkJCSpkb3MtdGVtcC1maWxlcyoKKworT25seSBmb3IgdGhlIDE2IGJpdCBhbmQgMzIgYml0IERPUyB2ZXJzaW9uOgorVmltIHB1dHMgdGVtcG9yYXJ5IGZpbGVzIChmb3IgZmlsdGVyaW5nKSBpbiB0aGUgZmlyc3Qgb2YgdGhlc2UgZGlyZWN0b3JpZXMKK3RoYXQgZXhpc3RzIGFuZCBpbiB3aGljaCBWaW0gY2FuIGNyZWF0ZSBhIGZpbGU6CisJJFRNUAorCSRURU1QCisJQzpcVE1QCisJQzpcVEVNUAorCWN1cnJlbnQgZGlyZWN0b3J5CisKK0ZvciB0aGUgV2luMzIgdmVyc2lvbiAoYm90aCBjb25zb2xlIGFuZCBHVUkpOgorVmltIHVzZXMgc3RhbmRhcmQgV2luZG93cyBmdW5jdGlvbnMgdG8gb2J0YWluIGEgdGVtcG9yYXJ5IGZpbGUgbmFtZSAoZm9yCitmaWx0ZXJpbmcpLiAgVGhlIGZpcnN0IG9mIHRoZXNlIGRpcmVjdG9yaWVzIHRoYXQgZXhpc3RzIGFuZCBpbiB3aGljaCBWaW0gY2FuCitjcmVhdGUgYSBmaWxlIGlzIHVzZWQ6CisJJFRNUAorCSRURU1QCisJY3VycmVudCBkaXJlY3RvcnkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBTaGVsbCBvcHRpb24gZGVmYXVsdAkJCQkJKmRvcy1zaGVsbCoKKworVGhlIGRlZmF1bHQgZm9yIHRoZSAnc2gnICgnc2hlbGwnKSBvcHRpb24gaXMgImNvbW1hbmQuY29tIiBvbiBXaW5kb3dzIDk1IGFuZAorImNtZC5leGUiIG9uIFdpbmRvd3MgTlQuICBJZiBTSEVMTCBpcyBkZWZpbmVkLCBWaW0gdXNlcyBTSEVMTCBpbnN0ZWFkLCBhbmQgaWYKK1NIRUxMIGlzIG5vdCBkZWZpbmVkIGJ1dCBDT01TUEVDIGlzLCBWaW0gdXNlcyBDT01TUEVDLiAgVmltIHN0YXJ0cyBleHRlcm5hbAorY29tbWFuZHMgd2l0aCAiPHNoZWxsPiAvYyA8Y29tbWFuZF9uYW1lPiIuICBUeXBpbmcgQ1RSTC1aIHN0YXJ0cyBhIG5ldyBjb21tYW5kCitzdWJzaGVsbC4gIFJldHVybiB0byBWaW0gd2l0aCAiZXhpdCIuCXwnc2hlbGwnfCB8Q1RSTC1afAorCitJZiB5b3UgYXJlIHJ1bm5pbmcgYSB0aGlyZC1wYXJ0eSBzaGVsbCwgeW91IG1heSBuZWVkIHRvIHNldCB0aGUKK3wnc2hlbGxjbWRmbGFnJ3wgKCdzaGNmJykgYW5kIHwnc2hlbGxxdW90ZSd8ICgnc2hxJykgb3IgfCdzaGVsbHhxdW90ZSd8CisoJ3N4cScpIG9wdGlvbnMuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGFsc28gZGVwZW5kcyBvbiB0aGUgdmVyc2lvbiBvZiBWaW0gdXNlZC4KK0ZvciBleGFtcGxlLCB3aXRoIHRoZSBNS1MgS29ybiBzaGVsbCBvciB3aXRoIGJhc2gsIHRoZSB2YWx1ZXMgb2YgdGhlIG9wdGlvbnMKK3Nob3VsZCBiZToKKworCQlET1MgMTYgYml0CSAgICBET1MgMzIgYml0CQlXaW4zMiAgfgorJ3NoZWxsY21kZmxhZycJICAgLWMJCQktYwkJIC1jCisnc2hlbGxxdW90ZScJICAgIgorJ3NoZWxseHF1b3RlJwkJCQkJCSAiCisKK0ZvciBEb3MgMTYgYml0IHRoaXMgc3RhcnRzIHRoZSBzaGVsbCBhczoKKwk8c2hlbGw+IC1jICJjb21tYW5kIG5hbWUiID5maWxlCitGb3IgV2luMzIgYXM6CisJPHNoZWxsPiAtYyAiY29tbWFuZCBuYW1lID5maWxlIgorRm9yIERPUyAzMiBiaXQsIERKR1BQIGRvZXMgdGhpcyBpbnRlcm5hbGx5IHNvbWVob3cuCisKK1doZW4gc3RhcnRpbmcgdXAsIFZpbSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiAic2giIGFueXdoZXJlIGluIHRoZSAnc2hlbGwnCitvcHRpb24uICBJZiBpdCBpcyBwcmVzZW50LCBWaW0gc2V0cyB0aGUgJ3NoZWxsY21kZmxhZycgYW5kICdzaGVsbHF1b3RlJyBvcgorJ3NoZWxseHF1b3RlJyBvcHRpb25zIHdpbGwgYmUgc2V0IGFzIGRlc2NyaWJlZCBhYm92ZS4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL29zX21hYy50eHQgYi9ydW50aW1lL2RvYy9vc19tYWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMTAyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9vc19tYWMudHh0CkBAIC0wLDAgKzEsOTggQEAKKypvc19tYWMudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBBcHIgMjcKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuCisKKworCQkJCQkqbWFjKiAqTWFjKiAqbWFjaW50b3NoKiAqTWFjaW50b3NoKgorCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBwYXJ0aWN1bGFyaXRpZXMgb2YgdGhlIE1hY2ludG9zaCB2ZXJzaW9uIG9mIFZpbS4KKworTk9URTogVGhpcyBmaWxlIGlzIGEgYml0IG91dGRhdGVkLiAgWW91IG1pZ2h0IGZpbmQgbW9yZSB1c2VmdWwgaW5mbyBoZXJlOgorCWh0dHA6Ly9tYWN2aW0uc3dkZXYub3JnLworCisxLiBGaWxlbmFtZSBDb252ZW50aW9uCQl8bWFjLWZpbGVuYW1lfAorMi4gLnZpbXJjIGFuIC52aW0gZmlsZXMJCXxtYWMtdmltZmlsZXwKKzMuIEZBUQkJCQl8bWFjLWZhcXwKKzQuIEtub3duIExhY2sJCQl8bWFjLWxhY2t8Cis1LiBNYWMgQnVnIFJlcG9ydAkJfG1hYy1idWd8Cis2LiBDb21waWxpbmcgVmltCQl8bWFjLWNvbXBpbGV8CisKK1RoZXJlIHdhcyBhIE1hYyBwb3J0IGZvciB2ZXJzaW9uIDMuMCBvZiBWaW0uICBIZXJlIGFyZSB0aGUgZmlyc3QgZmV3IGxpbmVzCitmcm9tIHRoZSBvbGQgZmlsZToKKworVklNIFJlbGVhc2UgTm90ZXMKK0luaXRpYWwgTWFjaW50b3NoIHJlbGVhc2UsIFZJTSB2ZXJzaW9uIDMuMAorMTkgT2N0b2JlciAxOTk0CisKK0VyaWMgRmlzY2hlcgorPGVuZjFAbWlkd2F5LnVjaGljYWdvLmVkdT4sIDxlcmljQGpjcC51Y2hpY2Fnby5lZHU+LCA8ZXRhb2luQHVjaGljYWdvLmVkdT4KKzU3NTkgTi4gR3VpbGZvcmQgQXZlCitJbmRpYW5hcG9saXMgSU4gNDYyMjAgVVNBCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gRmlsZW5hbWUgQ29udmVudGlvbgkJCQkJKm1hYy1maWxlbmFtZSoKKworWW91IGNhbiB1c2UgZWl0aGVyIHRoZSB1bml4IG9yIG1hYyBwYXRoIHNlcGFyYXRvciBvciBhIG1peCBvZiBib3RoLiBJbiBvcmRlcgordG8gZGV0ZXJtaW5lIGlmIHRoZSBzcGVjaWZpZWQgZmlsZW5hbWUgaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZm9sZGVyIG9yCithYnNvbHV0ZSAoaS5lLiByZWxhdGl2ZSB0byB0aGUgIkRlc2t0b3AiKSwgdGhlIGZvbGxvd2luZyBhbGdvcml0aG0gaXMgdXNlZDoKKworCUlmIHRoZSBwYXRoIHN0YXJ0IGJ5IGEgIi8iLCB0aGUgcGF0aCBpcyBhYnNvbHV0ZQorCUlmIHRoZSBwYXRoIHN0YXJ0IGJ5IGEgIjoiLCB0aGUgcGF0aCBpcyByZWxhdGl2ZQorCUlmIHRoZSBwYXRoIGRvZXNuJ3Qgc3RhcnQgYnkgbmVpdGhlciBhICIvIiBub3IgIjoiLAorCSAgYW5kIGEgIjoiIGlzIGZvdW5kIGJlZm9yZSBhICIvIiB0aGVuIHRoZSBwYXRoIGlzIGFic29sdXRlCis+CisJCTplIC9IRC90ZXh0CisJCTplIEhEOnRleHQKKzwJRWRpdCB0aGUgZmlsZSAidGV4dCIgb2YgdGhlIGRpc2sgIkhEIiA+CisJCTplIDpzcmM6bWFpbi5jCisJCTplIHNyYy9tYWluLmMKKzwJRWRpdCB0aGUgZmlsZSAibWFpbi5jIiBpbiB0aGUgZm9sZGVyICJzcmMiIGluIHRoZSBjdXJyZW50IGZvbGRlciA+CisJCTplIG9zX21hYy5jCis8CUVkaXQgdGhlIGZpbGUgIm9zX21hYy5jIiBpbiB0aGUgY3VycmVudCBmb2xkZXIuCisKK1lvdSBjYW4gdXNlIHRoZSB8JFZJTXwgYW5kIHwkVklNUlVOVElNRXwgIHZhcmlhYmxlLiA+CisKKwkJOnNvICRWSU1SVU5USU1FOnN5bnRheDpzeW50YXgudmltCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gLnZpbXJjIGFuZCAudmltIGZpbGVzCQkJCSptYWMtdmltZmlsZSoKKworT24gdGhlIE1hYyBmaWxlcyBzdGFydGluZyB3aXRoIGEgZG90ICIuIiBhcmUgZGlzY291cmFnZWQsIHRodXMgdGhlIHJjIGZpbGVzCithcmUgbmFtZWQgInZpbXJjIiBvciAiX3ZpbXJjIiBhbmQgImd2aW1yYyIgb3IgIl9ndmltcmMiLiBUaGVzZSBmaWxlcyBjYW4gYmUgaW4KK2FueSBmb3JtYXQgKG1hYywgZG9zIG9yIHVuaXgpLiAgVmltIGNhbiBoYW5kbGUgYW55IGZpbGUgZm9ybWF0IHdoZW4gdGhlCit8J25vY29tcGF0aWJsZSd8IG9wdGlvbiBpcyBzZXQsIG90aGVyd2lzZSBpdCB3aWxsIG9ubHkgaGFuZGxlIG1hYyBmb3JtYXQKK2ZpbGVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIE1hYyBGQVEJCQkJCQkqbWFjLWZhcSoKKworUTogSSBjYW4ndCBlbnRlciBub24tQVNDSUkgY2hhcmFjdGVyIGluIEFwcGxlIFRlcm1pbmFsLgorQTogVW5kZXIgV2luZG93IFNldHRpbmdzLCBFbXVsYXRpb24sIG1ha2Ugc3VyZSB0aGF0ICJFc2NhcGUgbm9uLUFTQ0lJCisgICBjaGFyYWN0ZXJzIiBpcyBub3QgY2hlY2tlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBNYWMgTGFjawkJCQkJCSptYWMtbGFjayoKKworLVRoZSBmaWxlbmFtZXMgY29udGFpbmluZyBib3RoICI6IiBhbmQgIi8iIGFyZSBzb21ldGltZXMgbWlzaW50ZXJwcmV0ZWQuCisgIChqdXN0IHJlLWV4ZWN1dGUgdGhlIGNvbW1hbmQpCistU2Nyb2xsYmFyIGFyZSBub3Qgc2Nyb2xsaW5nIGxpdmUsIGFuZCAgd2hlbiBvbmx5IHRoZSBhcnJvdyBvciBzY3JvbGwgYXJlYSwKKyAgIGEgbGltaXQgb2YgMzIgbGluZSBvciBwYWdlIGlzIHNjcm9sbGVkLgorLVN5bnRheCBoaWdobGlnaHRpbmcgd29ya3Mgb24gNjhrIE1hY3MgYnV0IGlzIF9yZWFsbHlfIHNsb3cuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gTWFjIEJ1ZyBSZXBvcnQJCQkJCSptYWMtYnVnKgorCitXaGVuIHJlcG9ydGluZyBhbnkgTWFjIHNwZWNpZmljIGJ1ZyBvciBmZWF0dXJlIGNoYW5nZSwgcGxlYXNlIHVzZSB0aGUgdmltLW1hYworbWFpbGxpc3QgfHZpbS1tYWN8LiAgSG93ZXZlciwgeW91IG5lZWQgdG8gYmUgc3Vic2NyaWJlZC4gIEFuIGFsdGVybmF0aXZlIGlzIHRvCitzZW5kIGEgbWVzc2FnZSB0byB0aGUgY3VycmVudCBNYWNWaW0gbWFpbnRhaW5lcnM6CisKKwltYWNAdmltLm9yZworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIENvbXBpbGluZyBWaW0JCQkJCSptYWMtY29tcGlsZSoKKworU2VlIHRoZSBmaWxlICJzcmMvSU5TVEFMTG1hYy50eHQiIHRoYXQgY29tZXMgd2l0aCB0aGUgc291cmNlIGZpbGVzLgorCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc19taW50LnR4dCBiL3J1bnRpbWUvZG9jL29zX21pbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OTc3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9vc19taW50LnR4dApAQCAtMCwwICsxLDM5IEBACisqb3NfbWludC50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDEgU2VwIDAzCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEplbnMgTS4gRmVsZGVyaG9mZgorCisKKwkJCQkJCQkqTWlOVCogKkF0YXJpKgorVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJ0aWN1bGFyaXRpZXMgZm9yIHRoZSBBdGFyaSBNaU5UIHZlcnNpb24gb2YgVmltLgorCitGb3IgY29tcGlsaW5nIFZpbSBvbiB0aGUgQXRhcmkgcnVubmluZyBNaU5UIHNlZSAiSU5TVEFMTCIgYW5kICJNYWtlZmlsZSIKK2luIHRoZSBzcmMgZGlyZWN0b3J5LgorCitWaW0gZm9yIE1pTlQgYmVoYXZlcyBhbG1vc3QgZXhhY3RseSBsaWtlIHRoZSBVbml4IHZlcnNpb24uCitUaGUgVW5peCBiZWhhdmlvciBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYWxzbyByZWZlcnMgdG8gdGhlCitNaU5UIHZlcnNpb24gb2YgVmltIHVubGVzcyBleHBsaWNpdGx5IHN0YXRlZCBvdGhlcndpc2UuCisKK0ZvciB3aWxkY2FyZCBleHBhbnNpb24gb2YgPH4+IChob21lIGRpcmVjdG9yeSkgeW91IG5lZWQgYSBzaGVsbCB0aGF0CitleHBhbmRzIHRoZSB0aWxkZS4gVGhlIHZhbmlsbGEgQm91cm5lIHNoZWxsIGRvZXNuJ3QgcmVjb2duaXplIGl0LgorV2l0aCBjc2ggYW5kIGtzaCBpdCBzaG91bGQgd29yayBPSy4KKworVGhlIE1pTlQgdmVyc2lvbiBvZiB2aW0gbmVlZHMgdGhlIHRlcm1jYXAgZmlsZSAvZXRjL3Rlcm1jYXAgd2l0aCB0aGUKK3Rlcm1pbmFsIGNhcGFiaWxpdGllcyBvZiB5b3VyIHRlcm1pbmFsLiBCdWlsdGluIHRlcm1jYXBzIGFyZQorc3VwcG9ydGVkIGZvciB0aGUgdnQ1MiB0ZXJtaW5hbC4gVGVybWNhcCBlbnRyaWVzIGZvciB0aGUgVE9TV0lOIHdpbmRvdworbWFuYWdlciBhbmQgdGhlIHZpcnR1YWwgY29uc29sZSB0ZXJtaW5hbHMgaGF2ZSBiZWVuIGFwcGVuZGVkIHRvIHRoZQordGVybWNhcCBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGUgVmltIGRpc3RyaWJ1dGlvbi4KKworSWYgeW91IHNob3VsZCBlbmNvdW50ZXIgcHJvYmxlbXMgd2l0aCBzd2FwcGVkIDxCUz4gYW5kIDxEZWw+IGtleXMsIHNlZQorfDpmaXhkZWx8LgorCitCZWNhdXNlIHRlcm1pbmFsIHVwZGF0aW5nIHVuZGVyIE1pTlQgaXMgb2Z0ZW4gc2xvdyAoZS5nLiBzZXJpYWwgbGluZQordGVybWluYWwpLCB0aGUgJ3Nob3djbWQnIGFuZCAncnVsZXInIG9wdGlvbnMgYXJlIGRlZmF1bHQgb2ZmLgorSWYgeW91IGhhdmUgYSBmYXN0IHRlcm1pbmFsLCB0cnkgc2V0dGluZyB0aGVtIG9uLiAgWW91IG1pZ2h0CithbHNvIHdhbnQgdG8gc2V0ICd0dHlmYXN0Jy4KKworU2VuZCBidWcgcmVwb3J0cyB0bworCisJSmVucyBNLiBGZWxkZXJob2ZmLCBlLW1haWw6IDxqbWZAaW5ma28udW5pLWtvYmxlbnouZGU+CisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc19tc2Rvcy50eHQgYi9ydW50aW1lL2RvYy9vc19tc2Rvcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyOTBlOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29zX21zZG9zLnR4dApAQCAtMCwwICsxLDI3MCBAQAorKm9zX21zZG9zLnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAxIFNlcCAwMworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKKwkJCQkJKm1zZG9zKiAqbXMtZG9zKiAqTVNET1MqICpNUy1ET1MqCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBhcnRpY3VsYXJpdGllcyBmb3IgdGhlIE1TLURPUyB2ZXJzaW9uIG9mIFZpbS4KKworMS4gVHdvIHZlcnNpb25zIGZvciBNUy1ET1MJfG1zZG9zLXZlcnNpb25zfAorMi4gS25vd24gcHJvYmxlbXMJCXxtc2Rvcy1wcm9ibGVtc3wKKzMuIExvbmcgZmlsZSBuYW1lcwkJfG1zZG9zLWxvbmdmbmFtZXwKKzQuIFRlcm1jYXAgY29kZXMJCXxtc2Rvcy10ZXJtY2FwfAorNS4gU2hpZnRlZCBhcnJvdyBrZXlzCQl8bXNkb3MtYXJyb3dzfAorNi4gRmlsZW5hbWUgZXh0ZW5zaW9ucwkJfG1zZG9zLWZuYW1lLWV4dGVuc2lvbnN8Cis3LiBNZW1vcnkgdXNhZ2UgYW5kIGxpbWl0YXRpb25zCXxtc2Rvcy1saW1pdGF0aW9uc3wKKzguIFN5bWJvbGljYWxseSBsaW5rZWQgZmlsZXMJfG1zZG9zLWxpbmtlZC1maWxlc3wKKzkuIENvcHkvcGFzdGUgaW4gYSBkb3MgYm94CXxtc2Rvcy1jb3B5LXBhc3RlfAorCitBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBhIG51bWJlciBvZiBjb21tb24gV2luMzIgYW5kIERPUyBpdGVtczoKK0ZpbGUgbG9jYXRpb25zCQkJfGRvcy1sb2NhdGlvbnN8CitVc2luZyBiYWNrc2xhc2hlcwkJfGRvcy1iYWNrc2xhc2h8CitTdGFuZGFyZCBtYXBwaW5ncwkJfGRvcy1zdGFuZGFyZC1tYXBwaW5nc3wKK1NjcmVlbiBvdXRwdXQgYW5kIGNvbG9ycwl8ZG9zLWNvbG9yc3wKK0ZpbGUgZm9ybWF0cwkJCXxkb3MtZmlsZS1mb3JtYXRzfAorOmNkIGNvbW1hbmQJCQl8ZG9zLTpjZHwKK0ludGVycnVwdGluZwkJCXxkb3MtQ1RSTC1CcmVha3wKK1RlbXAgZmlsZXMJCQl8ZG9zLXRlbXAtZmlsZXN8CitTaGVsbCBvcHRpb24gZGVmYXVsdAkJfGRvcy1zaGVsbHwKKworRm9yIGNvbXBpbGluZyBWaW0gc2VlIHNyYy9JTlNUQUxMLnBjLgkJCSptc2Rvcy1jb21waWxpbmcqCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gVHdvIHZlcnNpb25zIGZvciBNUy1ET1MJCQkJKm1zZG9zLXZlcnNpb25zKgorCitUaGVyZSBhcmUgdHdvIHZlcnNpb25zIG9mIFZpbSB0aGF0IGNhbiBiZSB1c2VkIHdpdGggTVMtRE9TIG1hY2hpbmVzOgorCisJCQkJCQkJKmRvczE2KgorRG9zMTYgdmVyc2lvbglDYW4gYmUgdXNlZCBvbiBhbnkgTVMtRE9TIHN5c3RlbSwgb25seSB1c2VzIHVwIHRvIDY0MCBLYnl0ZSBvZgorCQltZW1vcnkuICBBbHNvIHJ1bnMgb24gT1MvMiwgV2luZG93cyA5NSwgYW5kIE5ULiAgRXhjbHVkZXMgc29tZQorCQlWaW0tc3BlY2lmaWMgZmVhdHVyZXMgKGF1dG9jb21tYW5kcywgc3ludGF4IGhpZ2hsaWdodGluZywKKwkJZXRjLikuICBSZWNvbW1lbmRlZCBmb3IgdXNlIG9uIHByZS0zODYgbWFjaGluZXMuCisJCQkJCQkJKmRvczMyKgorRG9zMzIgdmVyc2lvbglSZXF1aXJlcyAzODYgcHJvY2Vzc29yIGFuZCBhIHxEUE1JfCBkcml2ZXIsIHVzZXMgYWxsCisJCWF2YWlsYWJsZSBtZW1vcnkuICBTdXBwb3J0cyBsb25nIGZpbGUgbmFtZXMgYW5kIHRoZSBXaW5kb3dzCisJCWNsaXBib2FyZCwgYnV0IE5PVCBvbiBXaW5kb3dzIE5ULiAgUmVjb21tZW5kZWQgZm9yIE1TLURPUywKKwkJV2luZG93cyAzLjEgYW5kIFdpbmRvd3MgOTUuCisKK1RoZXJlIGFyZSBhbHNvIHR3byB2ZXJzaW9ucyB0aGF0IHJ1biB1bmRlciBXaW5kb3dzOgorV2luMzIgdmVyc2lvbiAgIFJlcXVpcmVzIFdpbmRvd3MgOTUgb3IgV2luZG93cyBOVCwgdXNlcyBhbGwgYXZhaWxhYmxlCisJCW1lbW9yeSwgc3VwcG9ydHMgbG9uZyBmaWxlIG5hbWVzLCBldGMuICBIYXMgc29tZSBwcm9ibGVtcyBvbgorCQlXaW5kb3dzIDk1LiAgUmVjb21tZW5kZWQgZm9yIFdpbmRvd3MgTlQuICBTZWUgfG9zX3dpbjMyLnR4dHwKK1dpbjMyIEdVSQlSZXF1aXJlbWVudHMgbGlrZSB0aGUgV2luMzIgdmVyc2lvbiwgYnV0IHJ1bnMgaW4gaXRzIG93bgorCQl3aW5kb3csIGluc3RlYWQgb2YgYSBjb25zb2xlLiAgSGFzIHNjcm9sbGJhcnMsIG1lbnUsIGV0Yy4KKwkJUmVjb21tZW5kZWQgZm9yIFdpbmRvd3MgOTUgYW5kIFdpbmRvd3MgTlQuICBTZWUgfGd1aS13MzJ8LgorCitJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIERvczMyIG9yIFdpbjMyIHZlcnNpb24uICBBbHRob3VnaCB0aGUgRG9zMTYKK3ZlcnNpb24gaXMgYWJsZSB0byBlZGl0IHZlcnkgYmlnIGZpbGVzLCBpdCBxdWlja2x5IHJ1bnMgb3V0IG9mIG1lbW9yeSB3aGVuCittYWtpbmcgYmlnIGNoYW5nZXMuICBEaXNhYmxpbmcgdW5kbyBoZWxwczogIjpzZXQgdWw9LTEiLiAgVGhlIHNjcmVlbiB1cGRhdGluZworb2YgdGhlIERvczE2IHZlcnNpb24gaXMgdGhlIGZhc3Rlc3Qgb2YgdGhlIHRocmVlIG9uIERPUyBvciBXaW5kb3dzIDk1OyBvbgorV2luZG93cyBOVCwgdGhlIFdpbjMyIHZlcnNpb24gaXMganVzdCBhcyBmYXN0LgorCisJCQkJCQkJCSpEUE1JKgorRm9yIHRoZSBEb3MzMiB2ZXJzaW9uLCB5b3UgbWF5IG5lZWQgYSBEUE1JIGRyaXZlciB3aGVuIHJ1bm5pbmcgaW4gTVMtRE9TLiAgSWYKK3lvdSBhcmUgcnVubmluZyBXaW5kb3dzIG9yIGluc3RhbGxlZCBhIGNsZXZlciBtZW1vcnkgbWFuYWdlciwgaXQgd2lsbCBwcm9iYWJseQord29yayBhbHJlYWR5LiAgSWYgeW91IGdldCB0aGUgbWVzc2FnZSAiTm8gRFBNSSIsIHlvdSBuZWVkIHRvIGluc3RhbGwgYSBEUE1JCitkcml2ZXIuICBTdWNoIGEgZHJpdmVyIGlzIGluY2x1ZGVkIHdpdGggdGhlIGV4ZWN1dGFibGUgaW4gQ1NEUE1JNEIuWklQLiAgUnVuCisiY3dzZHBtaSIganVzdCBiZWZvcmUgc3RhcnRpbmcgVmltIGVhY2ggdGltZS4gIE9yIHlvdSBtaWdodCB3YW50IHRvIGluY2x1ZGUKKyJjd3NkcG1pIC1wIiBpbiB5b3VyIGF1dG9leGVjLmJhdCB0byBtYWtlIGl0IHJlc2lkZW50LiAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mCisiQ1NEUE1JKi5aSVAiIGNhbiBiZSBvYnRhaW5lZCBmcm9tOiAiZnRwLm5lb3NvZnQuY29tOnB1Yi91c2Vycy9zL3NhbmRtYW5uIi4KKworCQkJCQkJCSptaW5pbWFsLWZlYXR1cmVzKgorVGhlIDE2IGJpdCBET1MgdmVyc2lvbiBoYXMgYmVlbiBjb21waWxlZCB3aXRoIG1pbmltYWwgZmVhdHVyZXMuICBDaGVjayB0aGUKK3wrZmVhdHVyZS1saXN0fCB3aGljaCBvbmVzIGFyZSBpbmNsdWRlZCAobWFya2VkIHdpdGggYSAiVCIpLgorWW91IGNhbiBpbmNsdWRlIG1vcmUgZmVhdHVyZXMgYnkgZWRpdGluZyBmZWF0dXJlLmggYW5kIHJlY29tcGlsaW5nLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIEtub3duIHByb2JsZW1zCQkJCQkqbXNkb3MtcHJvYmxlbXMqCisKK1doZW4gdXNpbmcgc21hcnRkcml2ZSAoTVMtRE9TIDYueCkgd2l0aCB3cml0ZS1iZWhpbmQgY2FjaGluZywgaXQgaXMgcG9zc2libGUKK3RoYXQgVmltIHdpbGwgdHJ5IHRvIGNyZWF0ZSBhIHN3YXAgZmlsZSBvbiBhIHJlYWQtb25seSBmaWxlIHN5c3RlbSAoZS5nLgord3JpdGUgcHJvdGVjdGVkIGZsb3BweSkuICBZb3Ugd2lsbCB0aGVuIGJlIGdpdmVuIHRoZSBtZXNzYWdlID4KKwlBIHNlcmlvdXMgZGlzayBlcnJvciBoYXMgb2NjdXJyZWQgLi4sIFJldHJ5IChyKT8KK1RoZXJlIGlzIG5vdGhpbmcgeW91IGNhbiBkbyBidXQgdW5wcm90ZWN0IHRoZSBmbG9wcHkgb3Igc3dpdGNoIG9mZiB0aGUKK2NvbXB1dGVyLiAgRXZlbiBDVFJMLUFMVC1ERUwgd2lsbCBub3QgZ2V0IHlvdSBvdXQgb2YgdGhpcy4gIFRoaXMgaXMgcmVhbGx5IGEKK3Byb2JsZW0gb2Ygc21hcnRkcml2ZSwgbm90IFZpbS4gIFNtYXJ0ZHJpdmUgd29ya3MgZmluZSBvdGhlcndpc2UuICBJZiB0aGlzCitib3RoZXJzIHlvdSwgZG9uJ3QgdXNlIHRoZSB3cml0ZS1iZWhpbmQgY2FjaGluZy4KKworVmltIGNhbid0IHJlYWQgc3dhcCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBvcGVuZWQgYWxyZWFkeSwgdW5sZXNzIHRoZSAic2hhcmUiCitjb21tYW5kIGhhcyBiZWVuIHVzZWQuICBJZiB5b3Ugc2VlIHN0cmF5IHdhcm5pbmdzIGZvciBleGlzdGluZyBzd2FwIGZpbGVzLAoraW5jbHVkZSB0aGUgInNoYXJlIiBjb21tYW5kIGluIHlvdXIgY29uZmlnLnN5cyBvciBhdXRvZXhlYy5iYXQgKHNlZSB5b3VyIE1TRE9TCitkb2N1bWVudGF0aW9uKS4KKworVGhlIERvczE2IHZlcnNpb24gY2FuIG9ubHkgaGF2ZSBhYm91dCAxMCBmaWxlcyBvcGVuIChpbiBhIHdpbmRvdyBvciBoaWRkZW4pIGF0CitvbmUgdGltZS4gIFdpdGggbW9yZSBmaWxlcyB5b3Ugd2lsbCBnZXQgZXJyb3IgbWVzc2FnZXMgd2hlbiB0cnlpbmcgdG8gcmVhZCBvcgord3JpdGUgYSBmaWxlLCBhbmQgZm9yIGZpbHRlciBjb21tYW5kcy4gIE9yIFZpbSBydW5zIG91dCBvZiBtZW1vcnksIGFuZCByYW5kb20KK3Byb2JsZW1zIG1heSByZXN1bHQuCisKK1RoZSBEb3MzMiB2ZXJzaW9uIGNhbm5vdCBoYXZlIGFuIHVubGltaXRlZCBudW1iZXIgb2YgZmlsZXMgb3BlbiBhdCBhbnkgb25lCit0aW1lLiAgVGhlIGxpbWl0IGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgRklMRVMgaW4geW91ciBDT05GSUcuU1lTLiBUaGlzCitkZWZhdWx0cyB0byAxNTsgaWYgeW91IG5lZWQgdG8gZWRpdCBhIGxvdCBvZiBmaWxlcywgeW91IHNob3VsZCBpbmNyZWFzZSB0aGlzLgorSWYgeW91IGRvIG5vdCBzZXQgRklMRVMgaGlnaCBlbm91Z2gsIHlvdSBjYW4gZ2V0IHN0cmFuZ2UgZXJyb3JzLCBhbmQgc2hlbGwKK2NvbW1hbmRzIG1heSBjYXVzZSBhIGNyYXNoIQorCitUaGUgRG9zMzIgdmVyc2lvbiBjYW4gd29yayB3aXRoIGxvbmcgZmlsZSBuYW1lcy4gIFdoZW4gZG9pbmcgZmlsZSBuYW1lCitjb21wbGV0aW9uLCBtYXRjaGVzIGZvciB0aGUgc2hvcnQgZmlsZSBuYW1lIHdpbGwgYWxzbyBiZSBmb3VuZC4gIEJ1dCB0aGlzIHdpbGwKK3Jlc3VsdCBpbiB0aGUgY29ycmVzcG9uZGluZyBsb25nIGZpbGUgbmFtZS4gIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0aGUgbG9uZworZmlsZSBuYW1lICJ0aGlzX2lzX2FfdGVzdCIgd2l0aCB0aGUgc2hvcnQgZmlsZSBuYW1lICJ0aGlzX2l+MSIsIHRoZSBjb21tYW5kCisiOmUgKjEiIHdpbGwgc3RhcnQgZWRpdGluZyAidGhpc19pc19hX3Rlc3QiLgorCitXaGVuIHVzaW5nIHRoZSBEb3MzMiB2ZXJzaW9uIGFuZCB5b3UgcnVuIGludG8gcHJvYmxlbXMgd2l0aCBEUE1JIHN1cHBvcnQsCitjaGVjayBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW4geW91ciBjb25maWcuc3lzIHRoYXQgZWF0cyByZXNvdXJjZXMuICBPbmUKK3Byb2dyYW0ga25vd24gdG8gY2F1c2UgdGhpcyBwcm9ibGVtIGlzICJuZXR4Iiwgd2hpY2ggc2F5cyAiTmV0V2FyZSB2LiAzLjI2CitXb3Jrc3RhdGlvbiBzaGVsbCIuICBSZXBsYWNlIGl0IHdpdGggdmVyc2lvbiAzLjMyIHRvIGZpeCB0aGUgcHJvYmxlbS4KKworVGhlIERvczMyIHZlcnNpb24gd2lsbCBwYXJzZSBpdHMgYXJndW1lbnRzIHRvIGhhbmRsZSBxdW90YXRpb24uICBUaGlzIGlzIGdvb2QKK3RvIGVkaXQgYSBmaWxlIHdpdGggc3BhY2VzIGluIGl0cyBuYW1lLCBmb3IgZXhhbXBsZTogPgorCXZpbSAicHJvZ3JhbSBmaWxlc1xhY2Nlc3Nvcmllc1xwcHAuc2NwIgorQSBzaWRlIGVmZmVjdCBpcyB0aGF0IHNpbmdsZSBxdW90ZXMgYXJlIHJlbW92ZWQuICBJbnNlcnQgYSBiYWNrc2xhc2ggdG8gYXZvaWQKK3RoYXQuICBGb3IgZXhhbXBsZSwgdG8gZWRpdCB0aGUgZmlsZSAiZmknbGUudHh0IjogPgorCXZpbSBmaVwnbGUudHh0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gTG9uZyBmaWxlIG5hbWVzCQkJCQkqbXNkb3MtbG9uZ2ZuYW1lKgorCitJZiB0aGUgRG9zMzIgdmVyc2lvbiBpcyBydW4gb24gV2luZG93cyA5NSwgaXQgY2FuIHVzZSBsb25nIGZpbGUgbmFtZXMuICBJdAord2lsbCB3b3JrIGJ5IGRlZmF1bHQuICBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMsIHVzZSB0aGlzIHNldHRpbmc6CisJc2V0IExGTj1OCitZb3UgY2FuIHB1dCB0aGlzIGluIHlvdXIgYXV0b2V4ZWMuYmF0IGZpbGUuCisKK05vdGU6IElmIHlvdSBoYXZlIGluc3RhbGxlZCBESkdQUCBvbiB5b3VyIG1hY2hpbmUsIHlvdSBwcm9iYWJseSBoYXZlIGEKKyJkamdwcC5lbnYiIGZpbGUsIHdoaWNoIGNvbnRhaW5zICJMRk49biIuICBZb3UgbmVlZCB0byB1c2UgIkxGTj1ZIiB0byBzd2l0Y2gKK29uIHVzaW5nIGxvbmcgZmlsZSBuYW1lcyB0aGVuLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFRlcm1jYXAgY29kZXMJCQkJCSptc2Rvcy10ZXJtY2FwKgorCitJZiB5b3Ugd2FudCB0byB1c2UgYW5vdGhlciBvdXRwdXQgbWV0aG9kIChlLmcuLCB3aGVuIHVzaW5nIGEgdGVybWluYWwgb24gYSBDT00KK3BvcnQpLCBzZXQgdGhlIHRlcm1pbmFsIG5hbWUgdG8gInBjYW5zaSIuICBZb3UgY2FuIGNoYW5nZSB0aGUgdGVybWNhcCBvcHRpb25zCit3aGVuIG5lZWRlZCAoc2VlIHx0ZXJtaW5hbC1vcHRpb25zfCkuICBOb3RlIHRoYXQgdGhlCitub3JtYWwgSUJNIGFuc2kuc3lzIGRvZXMgbm90IHN1cHBvcnQgYWxsIHRoZSBjb2RlcyBvZiB0aGUgYnVpbHRpbiBwY2Fuc2kKK3Rlcm1pbmFsLiAgSWYgeW91IHVzZSBhbnNpLnN5cywgeW91IHdpbGwgbmVlZCB0byBkZWxldGUgdGhlIHRlcm1jYXAgZW50cmllcwordF9hbCBhbmQgdF9kbCB3aXRoID4KKyAgIDpzZXQgdF9hbD0gdF9kbD0KK090aGVyd2lzZSwgdGhlIHNjcmVlbiB3aWxsIG5vdCBiZSB1cGRhdGVkIGNvcnJlY3RseS4gIEl0IGlzIGJldHRlciB0byB1c2UKK25hbnNpLnN5cywgbm5hbnNpLnN5cywgb3IgdGhlIGxpa2UgaW5zdGVhZCBvZiBhbnNpLnN5cy4KKworSWYgeW91IHdhbnQgdG8gdXNlIFZpbSBvbiBhIHRlcm1pbmFsIGNvbm5lY3RlZCB0byBhIENPTTogcG9ydCwgcmVzZXQgdGhlCisnYmlvc2tleScgb3B0aW9uLiAgT3RoZXJ3aXNlIHRoZSBjb21tYW5kcyB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgUEMga2V5Ym9hcmQuCitDVFJMLUMgYW5kIENUUkwtUCBtYXkgbm90IHdvcmsgY29ycmVjdGx5IHdpdGggJ2Jpb3NrZXknIHJlc2V0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFNoaWZ0ZWQgYXJyb3cga2V5cwkJCQkJKm1zZG9zLWFycm93cyoKKworVXNlIENUUkwtYXJyb3ctbGVmdCBhbmQgQ1RSTC1hcnJvdy1yaWdodCBpbnN0ZWFkIG9mIFNISUZULWFycm93LWxlZnQgYW5kCitTSElGVC1hcnJvdy1yaWdodC4gIFRoZSBhcnJvdy11cCBhbmQgYXJyb3ctZG93biBjYW5ub3QgYmUgdXNlZCB3aXRoIFNISUZUIG9yCitDVFJMLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIEZpbGVuYW1lIGV4dGVuc2lvbnMJCQkJKm1zZG9zLWZuYW1lLWV4dGVuc2lvbnMqCisKK01TLURPUyBhbGxvd3MgZm9yIG9ubHkgb25lIGZpbGUgbmFtZSBleHRlbnNpb24uICBUaGVyZWZvcmUsIHdoZW4gYXBwZW5kaW5nIGFuCitleHRlbnNpb24sIHRoZSAnLicgaW4gdGhlIG9yaWdpbmFsIGZpbGUgbmFtZSBpcyByZXBsYWNlZCB3aXRoIGEgJ18nLCB0aGUgbmFtZQoraXMgdHJ1bmNhdGVkIHRvIDggY2hhcmFjdGVycywgYW5kIHRoZSBuZXcgZXh0ZW5zaW9uIChlLmcuLCAiLnN3cCIpIGlzCithcHBlbmRlZC4gIFR3byBleGFtcGxlczogInRlc3QuYyIgYmVjb21lcyAidGVzdF9jLmJhayIsICJ0aGlzaXNhdC5lc3QiCitiZWNvbWVzICJ0aGlzaXNhdC5iYWsiLiAgVG8gcmVkdWNlIHRoZXNlIHByb2JsZW1zLCB0aGUgZGVmYXVsdCBmb3IKKydiYWNrdXBleHQnIGlzICJ+IiBpbnN0ZWFkIG9mICIuYmFrIi4gIFRoZSBiYWNrdXAgZmlsZSBmb3IgInRoaXNpc2F0LmVzdCIKK3RoZW4gYmVjb21lcyAidGhpc2lzYXQuZXN+Ii4gIFRoZSAnc2hvcnRuYW1lJyBvcHRpb24gaXMgbm90IGF2YWlsYWJsZSwKK2JlY2F1c2UgaXQgd291bGQgYWx3YXlzIGJlIHNldC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBNZW1vcnkgdXNhZ2UgYW5kIGxpbWl0YXRpb25zCQkJKm1zZG9zLWxpbWl0YXRpb25zKgorCitBIHN3YXAgZmlsZSBpcyB1c2VkIHRvIHN0b3JlIG1vc3Qgb2YgdGhlIHRleHQuICBZb3Ugc2hvdWxkIGJlIGFibGUgdG8gZWRpdAordmVyeSBsYXJnZSBmaWxlcy4gIEhvd2V2ZXIsIG1lbW9yeSBpcyB1c2VkIGZvciB1bmRvIGFuZCBvdGhlciB0aGluZ3MuICBJZiB5b3UKK2RlbGV0ZSBhIGxvdCBvZiB0ZXh0LCB5b3UgY2FuIHN0aWxsIHJ1biBvdXQgb2YgbWVtb3J5IGluIHRoZSBEb3MxNiB2ZXJzaW9uLgorCitJZiBWaW0gZ2l2ZXMgYW4gIk91dCBvZiBtZW1vcnkiIHdhcm5pbmcsIHlvdSBzaG91bGQgc3RvcCBlZGl0aW5nLiAgVGhlIHJlc3VsdAorb2YgZnVydGhlciBlZGl0aW5nIGFjdGlvbnMgaXMgdW5wcmVkaWN0YWJsZS4gIFNldHRpbmcgJ3VuZG9sZXZlbHMnIHRvIDAgc2F2ZXMKK3NvbWUgbWVtb3J5LiAgUnVubmluZyB0aGUgbWF6ZSBtYWNyb3Mgb24gYSBiaWcgbWF6ZSBpcyBndWFyYW50ZWVkIHRvIHJ1biBvdXQKK29mIG1lbW9yeSwgYmVjYXVzZSBlYWNoIGNoYW5nZSBpcyByZW1lbWJlcmVkIGZvciB1bmRvLiAgSW4gdGhpcyBjYXNlIHNldAorJ3VuZG9sZXZlbHMnIHRvIGEgbmVnYXRpdmUgbnVtYmVyLiAgVGhpcyB3aWxsIHN3aXRjaCBvZmYgdW5kbyBjb21wbGV0ZWx5LgorCisJCQkJCQkqbXNkb3MtY2xpcGJvYXJkLWxpbWl0cyoKK0luIHRoZSBEb3MzMiB2ZXJzaW9uLCBleHRlbmRlZCBtZW1vcnkgaXMgdXNlZCB0byBhdm9pZCB0aGVzZSBwcm9ibGVtcy4KK0hvd2V2ZXIsIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGNsaXBib2FyZCwgeW91IGNhbiBzdGlsbCBydW4gaW50byBtZW1vcnkKK2xpbWl0YXRpb25zIGJlY2F1c2UgdGhlIFdpbmRvd3MgY2xpcGJvYXJkIGNhbiBvbmx5IGNvbW11bmljYXRlIHdpdGggVmltIHVzaW5nCitEb3MgbWVtb3J5LiAgVGhpcyBtZWFucyB0aGF0IHRoZSBsYXJnZXN0IGFtb3VudCBvZiB0ZXh0IHRoYXQgY2FuIGJlIHNlbnQgdG8KK29yIHJlY2VpdmVkIGZyb20gdGhlIFdpbmRvd3MgY2xpcGJvYXJkIGlzIGxpbWl0ZWQgYnkgaG93IG11Y2ggZnJlZSBEb3MgbWVtb3J5CitpcyBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0uCisKK1lvdSBjYW4gdXN1YWxseSBtYXhpbWl6ZSB0aGUgYW1vdW50IG9mIGF2YWlsYWJsZSBEb3MgbWVtb3J5IGJ5IGFkZGluZyB0aGUKK2ZvbGxvd2luZyBsaW5lcyB0byBEb3MncyAiY29uZmlnLnN5cyIgZmlsZTogPgorCisJRE9TPUhJR0gsVU1CCisJREVWSUNFPUM6XFdJTkRPV1NcaGltZW0uc3lzCisJREVWSUNFPUM6XFdJTkRPV1NcZW1tMzg2LmV4ZSBSQU0KKworTW9kaWZ5aW5nIGNvbmZpZy5zeXMgaW4gdGhpcyB3YXkgd2lsbCBhbHNvIGhlbHAgdG8gbWFrZSBtb3JlIG1lbW9yeSBhdmFpbGFibGUKK2ZvciB0aGUgRG9zMTYgdmVyc2lvbiwgaWYgeW91IGFyZSB1c2luZyB0aGF0LgorCitJbiB0aGUgRG9zMTYgdmVyc2lvbiB0aGUgbGluZSBsZW5ndGggaXMgbGltaXRlZCB0byBhYm91dCAzMjAwMCBjaGFyYWN0ZXJzLgorV2hlbiByZWFkaW5nIGEgZmlsZSB0aGUgbGluZXMgYXJlIGF1dG9tYXRpY2FsbHkgc3BsaXQuICBCdXQgZWRpdGluZyBhIGxpbmUKK2luIHN1Y2ggYSB3YXkgdGhhdCBpdCBiZWNvbWVzIHRvbyBsb25nIG1heSBnaXZlIHVuZXhwZWN0ZWQgcmVzdWx0cy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBTeW1ib2xpY2FsbHkgbGlua2VkIGZpbGVzCQkJKm1zZG9zLWxpbmtlZC1maWxlcyoKKworV2hlbiB1c2luZyBWaW0gdG8gZWRpdCBhIHN5bWJvbGljYWxseSBsaW5rZWQgZmlsZSBvbiBhIHVuaXggTkZTIGZpbGUgc2VydmVyLAoreW91IG1heSBydW4gaW50byBwcm9ibGVtcy4KK1doZW4gd3JpdGluZyB0aGUgZmlsZSwgVmltIGRvZXMgbm90ICJ3cml0ZSB0aHJvdWdoIiB0aGUgc3ltbGluay4gIEluc3RlYWQsIGl0CitkZWxldGVzIHRoZSBzeW1ib2xpYyBsaW5rIGFuZCBjcmVhdGVzIGEgbmV3IGZpbGUgaW4gaXRzIHBsYWNlLgorICAgT24gVW5peCwgVmltIGlzIHByZXBhcmVkIGZvciBsaW5rcyAoc3ltYm9saWMgb3IgaGFyZCkuICBBIGJhY2t1cCBjb3B5IG9mCit0aGUgb3JpZ2luYWwgZmlsZSBpcyBtYWRlIGFuZCB0aGVuIHRoZSBvcmlnaW5hbCBmaWxlIGlzIG92ZXJ3cml0dGVuLiAgVGhpcworYXNzdXJlcyB0aGF0IGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBmaWxlIHJlbWFpbiB0aGUgc2FtZS4gIE9uIG5vbi1Vbml4IHN5c3RlbXMsCit0aGUgb3JpZ2luYWwgZmlsZSBpcyByZW5hbWVkIGFuZCBhIG5ldyBmaWxlIGlzIHdyaXR0ZW4uICBPbmx5IHRoZSBwcm90ZWN0aW9uCitiaXRzIGFyZSBzZXQgbGlrZSB0aGUgb3JpZ2luYWwgZmlsZS4gIEhvd2V2ZXIsIHRoaXMgZG9lc24ndCB3b3JrIHByb3Blcmx5IHdoZW4KK3dvcmtpbmcgb24gYW4gTkZTLW1vdW50ZWQgZmlsZSBzeXN0ZW0gd2hlcmUgbGlua3MgYW5kIG90aGVyIHRoaW5ncyBleGlzdC4gIFRoZQorb25seSB3YXkgdG8gZml4IHRoaXMgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBpcyBub3QgbWFraW5nIGEgYmFja3VwIGZpbGUsIGJ5CisiOnNldCBub2JhY2t1cCBub3dyaXRlYmFja3VwIgl8J3dyaXRlYmFja3VwJ3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBDb3B5L3Bhc3RlIGluIGEgZG9zIGJveAkJCSptc2Rvcy1jb3B5LXBhc3RlKgorCisJCQkJCSpFNDUwKiAqRTQ1MSogKkU0NTIqICpFNDUzKiAqRTQ1NCoKK1RoZSAzMiBiaXQgdmVyc2lvbiBjYW4gY29weS9wYXN0ZSBmcm9tL3RvIHRoZSBXaW5kb3dzIGNsaXBib2FyZCBkaXJlY3RseS4gIFVzZQordGhlICIqIHJlZ2lzdGVyLiAgTGFyZ2UgYW1vdW50cyBvZiB0ZXh0IGNhbiBiZSBjb3BpZWQgdGhpcyB3YXksIGJ1dCBpdCBtdXN0IGJlCitwb3NzaWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGl0LCBzZWUgfG1zZG9zLWNsaXBib2FyZC1saW1pdHN8LiAgV2hlbiBtb3ZpbmcKK3RleHQgZnJvbSBvbmUgVmltIHRvIGFub3RoZXIsIHRoZSB0eXBlIG9mIHRoZSBzZWxlY3Rpb24KKyhjaGFyYWN0ZXJ3aXNlL2xpbmV3aXNlL2Jsb2Nrd2lzZSkgaXMgcGFzc2VkIG9uLgorCitJbiBvdGhlciB2ZXJzaW9ucywgdGhlIGZvbGxvd2luZyBjYW4gYmUgdXNlZC4KKworKHBvc3RlZCB0byBjb21wLmVkaXRvcnMgYnkgSm9obiBWZWxtYW4gPHZlbG1hbkBpZ2F0ZTEuaGFjLmNvbT4pCisKK0hvdyB0byBjb3B5L3Bhc3RlIHRleHQgZnJvbS90byB2aW0gaW4gYSBkb3MgYm94OgorCisxKSB0byBnZXQgVklNIHRvIHJ1biBpbiBhIHdpbmRvdywgaW5zdGVhZCBvZiBmdWxsIHNjcmVlbiwgcHJlc3MgYWx0K2VudGVyLgorICAgVGhpcyB0b2dnbGVzIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gZnVsbCBzY3JlZW4gYW5kIGEgZG9zIHdpbmRvdy4KKyAgIE5PVEU6IEluIFdpbmRvd3MgOTUgeW91IG11c3QgaGF2ZSB0aGUgcHJvcGVydHkgIkZhc3QgUGFzdGluZyIgdW5jaGVja2VkIQorICAgSW4gdGhlIHByb3BlcnRpZXMgZGlhbG9nIGJveCBmb3IgdGhlIE1TLURPUyB3aW5kb3csIGdvIHRvICJNUy1ET1MKKyAgIFByb21wdC9NaXNjL0Zhc3QgcGFzdGluZyIgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIE5PVCBjaGVja2VkLgorICAgVG8gbWFrZSB0aGlzIHBlcm1hbmVudCwgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGZvcgorICAgIlx3aW5kb3dzXHN5c3RlbVxjb25hZ2VudC5leGUiIChmcm9tIFBoaWxpcCBOZWxzb24sIHVudmVyaWZpZWQpLgorCisyKSBUbyBwYXN0ZSBzb21ldGhpbmcgX2ludG9fIFZpbSwgcHV0IFZpbSBpbiBpbnNlcnQgbW9kZS4KKworMykgcHV0IHRoZSB0ZXh0IHlvdSB3YW50IHRvIHBhc3RlIG9uIHRoZSB3aW5kb3dzIGNsaXBib2FyZC4KKworNCkgQ2xpY2sgdGhlIGNvbnRyb2wgYm94IGluIHRoZSB1cHBlciBsZWZ0IG9mIHRoZSBWaW0gd2luZG93LiAoVGhpcyBsb29rcworICAgbGlrZSBhIGJpZyBtaW51cyBzaWduKS4gSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBtb3VzZSwgeW91IGNhbiBnZXQKKyAgIHRoaXMgd2l0aCBhbHQrc3BhY2ViYXIuCis1KSBvbiB0aGUgcmVzdWx0aW5nIGRyb3Bkb3duIG1lbnUgY2hvb3NlICJFZGl0IgorNikgb24gdGhlIGNoaWxkIGRyb3Bkb3duIG1lbnUgY2hvb3NlICJQYXN0ZSIKKworVG8gY29weSBzb21ldGhpbmcgZnJvbSB0aGUgVmltIHdpbmRvdyB0byB0aGUgY2xpcGJvYXJkLAorCisxKSBzZWxlY3QgdGhlIGNvbnRyb2wgYm94IHRvIGdldCB0aGUgY29udHJvbCBkcm9wIGRvd24gbWVudS4KKzIpIHNlbGVjdCAiRWRpdCIuCiszKSBzZWxlY3QgIk1hcmsiCis0KSB1c2luZyBlaXRoZXIgdGhlIGtleXMgb3IgdGhlIG1vdXNlLCBzZWxlY3QgdGhlIHBhcnQgb2YgdGhlIFZpbSB3aW5kb3cgdGhhdAorICAgeW91IHdhbnQgdG8gY29weS4gVG8gdXNlIHRoZSBrZXlzLCB1c2UgdGhlIGFycm93IGtleXMsIGFuZCBob2xkIGRvd24gc2hpZnQKKyAgIHRvIGV4dGVuZCB0aGUgc2VsZWN0aW9uLgorNSkgd2hlbiB5b3UndmUgY29tcGxldGVkIHlvdXIgc2VsZWN0aW9uLCBwcmVzcyAnZW50ZXIuJyBUaGUgc2VsZWN0aW9uCisgICBpcyBub3cgaW4gdGhlIHdpbmRvd3MgY2xpcGJvYXJkLiBCeSB0aGUgd2F5LCB0aGlzIGNhbiBiZSBhbnkKKyAgIHJlY3Rhbmd1bGFyIHNlbGVjdGlvbiwgZm9yIGV4YW1wbGUgY29sdW1ucyA0LTI1IGluIHJvd3MgNy0xMC4gSXQgY2FuCisgICBpbmNsdWRlIGFueXRoaW5nIGluIHRoZSBWSU0gd2luZG93OiB0aGUgb3V0cHV0IG9mIGEgOiFkaXIsIGZvcgorICAgZXhhbXBsZS4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL29zX29zMi50eHQgYi9ydW50aW1lL2RvYy9vc19vczIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNGRkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9vc19vczIudHh0CkBAIC0wLDAgKzEsMjIwIEBACisqb3Nfb3MyLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSmFuIDA5CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IFBhdWwgU2xvb3RtYW4KKworCisJCQkJCQkJKm9zMiogKk9TMiogKk9TLzIqCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBhcnRpY3VsYXJpdGllcyBmb3IgdGhlIE9TLzIgdmVyc2lvbiBvZiBWaW0uCisKK0F0IHByZXNlbnQgdGhlcmUgaXMgbm8gbmF0aXZlIFBNIHZlcnNpb24gb2YgdGhlIEdVSSB2ZXJzaW9uIG9mIFZpbTogVGhlIE9TLzIKK3ZlcnNpb24gaXMgYSBjb25zb2xlIGFwcGxpY2F0aW9uLiAgSG93ZXZlciwgdGhlcmUgaXMgbm93IGEgV2luMzJzLWNvbXBhdGlibGUKK0dVSSB2ZXJzaW9uLCB3aGljaCBzaG91bGQgYmUgdXNhYmxlIGJ5IG93bmVycyBvZiBXYXJwIDQgKHdoaWNoIHN1cHBvcnRzCitXaW4zMnMpIGluIGEgV2luLU9TLzIgc2Vzc2lvbi4gIFRoZSBub3RlcyBpbiB0aGlzIGZpbGUgcmVmZXIgdG8gdGhlIG5hdGl2ZQorY29uc29sZSB2ZXJzaW9uLgorCisKK05PVEUKKworVGhpcyBPUy8yIHBvcnQgd29ya3Mgd2VsbCBmb3IgbWUgYW5kIGEgY291cGxlIG9mIG90aGVyIE9TLzIgdXNlcnM7IGhvd2V2ZXIsCitzaW5jZSBJIGhhdmVuJ3QgaGFkIG11Y2ggZmVlZGJhY2ssIHRoYXQgZWl0aGVyIG1lYW5zIG5vIChPUy8yLXNwZWNpZmljKSBidWdzCitleGlzdCAoYmVzaWRlcyB0aGUgb25lcyBtZW50aW9uZWQgYmVsb3cpLCBvciBubyBvbmUgaGFzIHlldCBjcmVhdGVkIGEKK3NpdHVhdGlvbiBpbiB3aGljaCBhbnkgYnVncyBhcmUgYXBwYXJlbnQuICBGaWxlIEkvTyBpbiBEb3MgYW5kIFVuaXggbW9kZSwKK2JpbmFyeSBtb2RlLCBhbmQgRkFUIGhhbmRsaW5nIGFsbCBzZWVtIHRvIHdvcmsgd2VsbCwgd2hpY2ggd291bGQgc2VlbSB0byBiZQordGhlIG1vc3QgbGlrZWx5IHBsYWNlcyBmb3IgdHJvdWJsZS4KKworQSBrbm93biBwcm9ibGVtIGlzIHRoYXQgZmlsZXMgb3BlbmVkIGJ5IFZpbSBhcmUgaW5oZXJpdGVkIGJ5IG90aGVyIHByb2dyYW1zCit0aGF0IGFyZSBzdGFydGVkIHZpYSBhIHNoZWxsIGVzY2FwZSBmcm9tIHdpdGhpbiBWaW0uICBUaGlzIHNwZWNpZmljYWxseSBtZWFucwordGhhdCBWaW0gd29uJ3QgYmUgYWJsZSB0byByZW1vdmUgdGhlIHN3YXAgZmlsZShzKSBhc3NvY2lhdGVkIHdpdGggYnVmZmVycyBvcGVuCithdCB0aGUgdGltZSB0aGUgb3RoZXIgcHJvZ3JhbSB3YXMgc3RhcnRlZCwgdW50aWwgdGhlIG90aGVyIHByb2dyYW0gaXMgc3RvcHBlZC4KK0F0IHRoYXQgdGltZSwgdGhlIHN3YXAgZmlsZSBtYXkgYmUgcmVtb3ZlZCwgYnV0IGlmIFZpbSBjb3VsZCBub3QgZG8gdGhhdCB0aGUKK2ZpcnN0IHRpbWUsIGl0IHdvbid0IGJlIHJlbW92ZWQgYXQgYWxsLiBZb3UnbGwgZ2V0IHdhcm5pbmdzIHRoYXQgc29tZSBvdGhlcgorVmltIHNlc3Npb24gbWF5IGJlIGVkaXRpbmcgdGhlIGZpbGUgd2hlbiB5b3Ugc3RhcnQgVmltIHVwIGFnYWluIG9uIHRoYXQgZmlsZS4KK1RoaXMgY2FuIGJlIHJlcHJvZHVjZWQgd2l0aCAiOiFzdGFydCBlcG0iLiBOb3cgcXVpdCBWaW0sIGFuZCBzdGFydCBWaW0gYWdhaW4KK3dpdGggdGhlIGZpbGUgdGhhdCB3YXMgaW4gdGhlIGJ1ZmZlciBhdCB0aGUgdGltZSBlcG0gd2FzIHN0YXJ0ZWQuICBJJ20gd29ya2luZworb24gdGhpcyEKKworQSBzZWNvbmQgcHJvYmxlbSBpcyB0aGF0IFZpbSBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbiB3aGVuIHVzaW5nIGl0Cit3aGVuIGFjY2Vzc2luZyB0aGUgT1MvMiBzeXN0ZW0gdmlhIHRoZSBuZXR3b3JrLCBlLmcuIHVzaW5nIHRlbG5ldCBmcm9tIGEgVW5peAorc3lzdGVtLCBhbmQgdGhlbiBzdGFydGluZyBWaW0uIFRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoYXQgT1MvMiA9c29tZXRpbWVzPQorcmVjb2duaXplcyBmdW5jdGlvbiAvIGN1cnNvciBrZXlzLCBhbmQgdHJpZXMgdG8gY29udmVydCB0aG9zZSB0byB0aGUKK2NvcnJlc3BvbmRpbmcgT1MvMiBjb2RlcyBnZW5lcmF0ZWQgYnkgdGhlICJub3JtYWwiIFBDIGtleWJvYXJkLiBJJ3ZlIGJlZW4KK3Rlc3RpbmcgYSB3b3JrYXJvdW5kIChtYXBwaW5nIHRoZSBPUy8yIGNvZGVzIHRvIHRoZSBjb3JyZWN0IGZ1bmN0aW9ucyksIGJ1dCBzbworZmFyIEkgY2FuJ3Qgc2F5IGFueXRoaW5nIGNvbmNsdXNpdmUgKHRoaXMgaXMgb24gV2FycCAzLCBieSB0aGUgd2F5KS4gSW4gdGhlCittZWFudGltZSBhbnkgaGVscCB3aWxsIGJlIGFwcHJlY2lhdGVkLgorCisKK1BSRVJFUVVJU0lURVMKKworVG8gcnVuIFZpbSwgeW91IG5lZWQgdGhlIGVteCBydW50aW1lIGVudmlyb25tZW50IChhdCBsZWFzdCByZXYuIDAuOWIpLiAgVGhpcworaXMgZ2VuZXJhbGx5IGF2YWlsYWJsZSBhcyAoYXNrIEFyY2hpZSBhYm91dCBpdCk6CisKKyAgICBlbXhydC56aXAgICAgIGVteCBydW50aW1lIHBhY2thZ2UKKworSSd2ZSBpbmNsdWRlZCBhIGNvcHkgb2YgZW14LmRsbCwgd2hpY2ggc2hvdWxkIGJlIGNvcGllZCB0byBvbmUgb2YgdGhlCitkaXJlY3RvcmllcyBsaXN0ZWQgaW4geW91ciBMSUJQQVRILiBFbXggaXMgR1BMJ2VkLCBidXQgdGhlIGVteC5kbGwgbGlicmFyeSBpcworbm90IChyZWFkIENPUFlJTkcuRU1YIHRvIGZpbmQgb3V0IHdoYXQgdGhhdCBtZWFucyB0byB5b3UpLgorCitUaGlzIGVteC5kbGwgaXMgZnJvbSB0aGUgZW14Zml4MDQuemlwIHBhY2thZ2UsIHdoaWNoIHVuZm9ydHVuYXRlbHkgaGFzIGEgYnVnLAorZWgsIEkgbWVhbiBhIFBPU0lYIGZlYXR1cmUsIGluIHNlbGVjdCgpLiAgVmVyc2lvbnMgb2YgVmltIGJlZm9yZSAzLjI3IHdpbGwKK2FwcGVhciB0byBoYW5nIHdoZW4gc3RhcnRpbmcgKGFjdHVhbGx5LCB3aGlsZSBwcm9jZXNzaW5nIHZpbXJjKS4gSGl0IDxFbnRlcj4gYQorY291cGxlIG9mIHRpbWVzIHVudGlsIFZpbSBzdGFydHMgd29ya2luZyBpZiB0aGlzIGhhcHBlbnMuICBOZXh0LCBnZXQgYW4gdXAgdG8KK2RhdGUgdmVyc2lvbiBvZiBWaW0hCisKKworSEVMUCBBTkQgVklNUkMgRklMRQorCitJZiB5b3UgdW5wYWNrIHRoZSBhcmNoaXZlIHRoYXQgVmltIGNhbWUgaW4gYW5kIHJ1biBWaW0gZGlyZWN0bHkgZnJvbSB3aGVyZSBpdAord2FzIHVucGFja2VkLCBWaW0gc2hvdWxkIGJlIGFibGUgdG8gZmluZCB0aGUgcnVudGltZSBmaWxlcyBhbmQgeW91ciAudmltcmMKK3dpdGhvdXQgYW55IHNldHRpbmdzLgorCitJZiB5b3UgcHV0IHRoZSBydW50aW1lIGZpbGVzIHNlcGFyYXRlbHkgZnJvbSB0aGUgYmluYXJ5LCB0aGUgVklNIGVudmlyb25tZW50Cit2YXJpYWJsZSBpcyB1c2VkIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBoZWxwIGZpbGVzIGFuZCB0aGUgc3lzdGVtIC52aW1yYy4KK1BsYWNlIGFuIGVudHJ5IHN1Y2ggYXMgdGhpcyBpbiBDT05GSUcuU1lTOiA+CisKKyAgU0VUIFZJTT1jOi9sb2NhbC9saWIvdmltCisKK1B1dCB5b3VyIC52aW1yYyBhbmQgeW91ciBvdGhlciBWaW0gZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuICBDb3B5IHRoZSBydW50aW1lCitkaXJlY3RvcnkgdG8gdGhpcyBkaXJlY3RvcnkuICBFYWNoIHZlcnNpb24gb2YgVmltIGhhcyBpdHMgb3duIHJ1bnRpbWUKK2RpcmVjdG9yeS4gIEl0IHdpbGwgYmUgY2FsbGVkIHNvbWV0aGluZyBsaWtlICJjOi9sb2NhbC9saWIvdmltL3ZpbTU0Ii4gIFRodXMKK3lvdSBnZXQgYSB0cmVlIG9mIFZpbSBmaWxlcyBsaWtlIHRoaXM6CisJYzovbG9jYWwvbGliL3ZpbS8udmltcmMKKwljOi9sb2NhbC9saWIvdmltL3ZpbTU0L2ZpbGV0eXBlLnZpbQorCWM6L2xvY2FsL2xpYi92aW0vdmltNTQvZG9jL2hlbHAudHh0CisJZXRjLgorCitOb3RlOiAudmltcmMgbWF5IGFsc28gYmUgY2FsbGVkIF92aW1yYyB0byBhY2NvbW1vZGF0ZSB0aG9zZSB3aG8gaGF2ZSBjaG9zZW4gdG8KK2luc3RhbGwgT1MvMiBvbiBhIEZBVCBmaWxlIHN5c3RlbS4gVmltIGZpcnN0IHRyaWVzIHRvIGZpbmQgLnZpbXJjIGFuZCBpZiB0aGF0CitmYWlscywgbG9va3MgZm9yIF92aW1yYyBpbiB0aGUgc2FtZSBwbGFjZS4gIFRoZSBleGlzdGVuY2Ugb2YgYSAudmltcmMgb3IKK192aW1yYyBmaWxlIGluZmx1ZW5jZXMgdGhlICdjb21wYXRpYmxlJyBvcHRpb25zLCB3aGljaCBjYW4gaGF2ZSB1bmV4cGVjdGVkIHNpZGUKK2VmZmVjdHMuICBTZWUgfCdjb21wYXRpYmxlJ3wuCisKK0lmIHlvdSdyZSB1c2luZyBuZXR3b3JrIGRyaXZlcyB3aXRoIE9TLzIsIHRoZW4geW91IGNhbiBpbnN0YWxsIFZpbSBvbiBhCituZXR3b3JrIGRyaXZlIChpbmNsdWRpbmcgLnZpbXJjOyB0aGlzIGlzIHRoZW4gY2FsbGVkIHRoZSAic3lzdGVtIiB2aW1yYyBmaWxlKSwKK2FuZCB0aGVuIHVzZSBhIHBlcnNvbmFsIGNvcHkgb2YgLnZpbXJjICh0aGUgInVzZXIiIHZpbXJjIGZpbGUpLiBUaGlzIHNob3VsZCBiZQorbG9jYXRlZCBpbiBhIGRpcmVjdG9yeSBpbmRpY2F0ZWQgYnkgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKworRU5WSVJPTk1FTlQgVkFSSUFCTEVTIElOIEZJTEUgTkFNRVMKKworVGhpcyBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGFsc28gdXNlZCB3aGVuIHVzaW5nIH4gaW4gZmlsZSBuYW1lcywgc28KKyI6ZSB+L3RleHRmaWxlIiB3aWxsIGVkaXQgdGhlIGZpbGUgInRleHRmaWxlIiBpbiB0aGUgZGlyZWN0b3J5IHJlZmVycmVkIHRvIGJ5CitIT01FLiAgQWRkaXRpb25hbGx5IHlvdSBjYW4gdXNlIG90aGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBmaWxlIG5hbWVzLCBhcworYXMgIjpuICRTUkMvKi5jIi4KKworVGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgYWxzbyB1c2VkIHRvIGxvY2F0ZSB0aGUgLnZpbWluZm8gZmlsZQorKHNlZSB8dmltaW5mby1maWxlfCkuICBUaGVyZSBpcyBubyBzdXBwb3J0IHlldCBmb3IgLnZpbWluZm8gb24gRkFUIGZpbGUKK3N5c3RlbXMgeWV0LCBzb3JyeS4gIFlvdSBjb3VsZCB0cnkgdGhlIC1pIHN0YXJ0dXAgZmxhZyAoYXMgaW4gInZpbSAtaQorJEhPTUUvX3ZpbWluZm8iKSBob3dldmVyLgorCitJZiB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LCB0aGUgdmFsdWUgIkM6LyIgaXMgdXNlZCBhcyBhCitkZWZhdWx0LgorCisKK0JBQ0tTTEFTSEVTCisKK1VzaW5nIHNsYXNoZXMgKCcvJykgYW5kIGJhY2tzbGFzaGVzICgnXCcpIGNhbiBiZSBhIGJpdCBvZiBhIHByb2JsZW0gKHNlZQorfGRvcy1iYWNrc2xhc2h8IGZvciBtb3JlIGV4cGxhbmF0aW9uKSwgYnV0IGluIGFsbW9zdCBhbGwgY2FzZXMgVmltIGRvZXMgIlRoZQorUmlnaHQgVGhpbmciLiAgVmltIGl0c2VsZiB1c2VzIGJhY2tzbGFzaGVzIGluIGZpbGUgbmFtZXMsIGJ1dCB3aWxsIGhhcHBpbHkKK2FjY2VwdCBmb3J3YXJkIHNsYXNoZXMgaWYgdGhleSBhcmUgZW50ZXJlZCAoaW4gZmFjdCwgc29tZXRpbWVzIHRoYXQgd29ya3MKK2JldHRlciEpLgorCisKK1RFTVAgRklMRVMKKworVGVtcG9yYXJ5IGZpbGVzIChmb3IgZmlsdGVyaW5nKSBhcmUgcHV0IGluIHRoZSBmaXJzdCBkaXJlY3RvcnkgaW4gdGhlIG5leHQKK2xpc3QgdGhhdCBleGlzdHMgYW5kIHdoZXJlIGEgZmlsZSBjYW4gYmUgY3JlYXRlZDoKKwkkVE1QCisJJFRFTVAKKwlDOlxUTVAKKwlDOlxURU1QCisJY3VycmVudCBkaXJlY3RvcnkKKworCitURVJNSU5BTCBTRVRUSU5HCisKKwkJCQkJCQkqb3MyYW5zaSoKK1VzZSAib3MyYW5zaSIgYXMgdGhlIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUgKG9yIGRvbid0IHNldCBpdCBhdCBhbGwsIGFzIHRoZQorZGVmYXVsdCBpcyB0aGUgY29ycmVjdCB2YWx1ZSkuIFlvdSBjYW4gc2V0IHRlcm0gdG8gb3MyYW5zaSBpbiB0aGUgLnZpbXJjLCBpbgorY2FzZSB5b3UgbmVlZCBURVJNIHRvIGJlIGEgZGlmZmVyZW50IHZhbHVlIGZvciBvdGhlciBhcHBsaWNhdGlvbnMuICBUaGUKK3Byb2JsZW0gaXMgdGhhdCBPUy8yIEFOU0kgZW11bGF0aW9uIGlzIHF1aXRlIGxpbWl0ZWQgKGl0IGRvZXNuJ3QgaGF2ZSBpbnNlcnQgLworZGVsZXRlIGxpbmUsIGZvciBleGFtcGxlKS4KKworSWYgeW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHZhbHVlIGZvciBURVJNIChiZWNhdXNlIG9mIG90aGVyIHByb2dyYW1zLCBmb3IKK2V4YW1wbGUpLCBtYWtlIHN1cmUgdGhhdCB0aGUgdGVybWNhcCBlbnRyeSBmb3IgdGhhdCBURVJNIHZhbHVlIGhhcyB0aGUKK2FwcHJvcHJpYXRlIGtleSBtYXBwaW5ncy4gVGhlIHRlcm1jYXAuZGF0IGRpc3RyaWJ1dGVkIHdpdGggZW14IGRvZXMgbm90IGFsd2F5cworaGF2ZSB0aGVtLiAgSGVyZSBhcmUgc29tZSBzdWl0YWJsZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSB0ZXJtY2FwIGVudHJ5IG9mIHlvdXIKK2Nob2ljZTsgdGhlc2UgYWxsb3cgdGhlIGN1cnNvciBrZXlzIGFuZCB0aGUgbmFtZWQgZnVuY3Rpb24ga2V5cyAoc3VjaCBhcworcGFnZWRvd24pIHRvIHdvcmsuCisKKwk6a3U9XDMxNkg6a2Q9XDMxNlA6a2w9XDMxNks6a3I9XDMxNk06JWk9XDMxNnQ6IzQ9XDMxNnM6XAorCTprRD1cMzE2UzprST1cMzE2UjprTj1cMzE2UTprUD1cMzE2STpraD1cMzE2RzpANz1cMzE2TzpcCisJOmsxPVwzMTY7OmsyPVwzMTY8OmszPVwzMTY9Oms0PVwzMTY+Oms1PVwzMTY/Oms2PVwzMTZAOlwKKwk6azc9XDMxNkE6azg9XDMxNkI6azk9XDMxNkM6azs9XDMxNkQ6CisKKworUGF1bCBTbG9vdG1hbgorCisKKzQzIExJTkUgV0lORE9XCisKK0Egc3VnZ2VzdGlvbiBmcm9tIFN0ZXZlbiBUcnlvbiwgb24gaG93IHRvIHJ1biBWaW0gaW4gYSBiaWdnZXIgd2luZG93OgorCitXaGVuIEkgY2FsbCBWaW0gZnJvbSBhbiBPUy8yIFdQUyBhcHBsaWNhdGlvbiBzdWNoIGFzIFBNTWFpbCBpdCBjb21lcyB1cAoraW4gdGhlIGRlZmF1bHQgMjUtbGluZSBtb2RlLiAgVG8gZ2V0IGEgbW9yZSB1c2VmdWwgd2luZG93IHNpemUgSSBtYWtlCitteSBleHRlcm5hbCBlZGl0b3IgInZpbWJpZy5jbWQiIHdoaWNoIGluIHR1cm4gY2FsbHMgInZpbWJpZzIuY21kIi4KK0JydXRlIGZvcmNlIGFuZCBhd2t3YXJkbmVzcywgcGVyaGFwcywgYnV0IGl0IHdvcmtzLgorCit2aW1iaWcuY21kOiA+CisgICBAZWNobyBvZmYKKyAgIHN0YXJ0ICJWaSBJbXByb3ZlZCIgL2YgdmltYmlnMi5jbWQgJTEgJTIgJTMgJTQKKwordmltYmlnMi5jbWQ6ID4KKyAgIEBlY2hvIG9mZgorICAgbW9kZSA4MCw0MworICAgdmltLmV4ZSAlMSAlMiAlMyAlNAorICAgZXhpdAorPAorCitDTElQQk9BUkQgQUNDRVNTIChwcm92aWRlZCBieSBBbGV4YW5kZXIgV2FnbmVyKQorCitWaW0gZm9yIE9TLzIgaGFzIG5vIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHN5c3RlbSBjbGlwYm9hcmQuICBUbyBlbmFibGUgYWNjZXNzCithbnl3YXkgeW91IG5lZWQgYW4gYWRkaXRpb25hbCB0b29sIHdoaWNoIGdpdmVzIHlvdSBhY2Nlc3MgdG8gdGhlIGNsaXBib2FyZAorZnJvbSB3aXRoaW4gYSB2aW8gYXBwbGljYXRpb24uICBUaGUgZnJlZXdhcmUgcGFja2FnZSBjbGlwYnJkLnppcCBieSBTdGVmYW4KK0dydWVuZGVsIGNhbiBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuICBZb3UgbWlnaHQgZG93bmxvYWQgdGhlIHBhY2thZ2UKK2luY2x1ZGluZyBwcmVjb21waWxlZCBiaW5hcmllcyBhbmQgYWxsIHNvdXJjZXMgZnJvbToKKwlodHRwOi8vd3d3LnN0ZWxsYXJjb20ub3JnL3ZpbS9pbmRleC5odG1sCisKK0luc3RhbGxhdGlvbiBvZiB0aGlzIHBhY2thZ2UgaXMgc3RyYWlnaHQgZm9yd2FyZDoganVzdCBwdXQgdGhlIHR3byBleGVjdXRhYmxlcwordGhhdCBjb21lIHdpdGggdGhpcyBwYWNrYWdlIGludG8gYSBkaXJlY3Rvcnkgd2l0aGluIHlvdXIgUEFUSCBmb3IgVmltIHNob3VsZAorYmUgYWJsZSB0byBjYWxsIHRoZW0gZnJvbSB3aGF0ZXZlciBkaXJlY3RvcnkgeW91IGFyZSB3b3JraW5nLgorCitUbyBjb3B5IHRleHQgZnJvbSB0aGUgY2xpcGJvYXJkIHRvIHlvdXIgVmltIHNlc3Npb24geW91IGNhbiB1c2UgdGhlIDpyCitjb21tYW5kLiAgU2ltcGx5IGNhbGwgY2xpcGJyZC5leGUgZnJvbSB3aXRoaW4gVmltIGluIHRoZSBmb2xsb3dpbmcgd2F5OiA+CisKKwk6ciAhY2xpcGJyZCAtcgorCitUbyBjb3B5IHRleHQgZnJvbSBWaW0gdG8gdGhlIHN5c3RlbSBjbGlwYm9hcmQganVzdCBtYXJrIHRoZSB0ZXh0IGluIHRoZSB1c3VhbAordmltLW1hbm5lciBhbmQgY2FsbDogPgorCisJOiFjbGlwYnJkIC13CisKK3doaWNoIHdpbGwgd3JpdGUgeW91ciBzZWxlY3Rpb24gcmlnaHQgaW50byBPUy8yJ3MgY2xpcGJvYXJkLgorCitGb3IgZWFzZSBvZiB1c2UgeW91IG1pZ2h0IHdhbnQgdG8gYWRkIHNvbWUgbWFwcyBmb3IgdGhpcyBjb21tYW5kcy4gIEUuZy4gdG8KK3VzZSBGMTEgdG8gcGFzdGUgdGhlIGNsaXBib2FyZCBpbnRvIFZpbSBhbmQgRjEyIHRvIGNvcHkgc2VsZWN0ZWQgdGV4dCB0byB0aGUKK2NsaXBib2FyZCB5b3Ugd291bGQgdXNlOiA+CisKKwlpZiBoYXMoIm9zMiIpCisJICBpbWFwIDxGMTE+ICAgICA8RVNDPjpyICFjbGlwYnJkIC1yPENSPmkKKwkgIHZtYXAgPEYxMj4gICAgIDohY2xpcGJyZCAtdzxjcj4KKwllbHNlCisJICBpbWFwIDxGMTE+ICAgICA8RVNDPiIqcDxDUj5pCisJICB2bWFwIDxGMTI+ICAgICAiKnkKKwllbmRpZgorCitUaGlzIHdpbGwgZW5zdXJlIHRoYXQgb25seSBvbiBPUy8yIGNsaXBicmQgaXMgY2FsbGVkIHdoZXJlYXMgb24gb3RoZXIKK3BsYXRmb3JtcyB2aW1zIGJ1aWxkIGluIG1lY2hhbmlzbSBpcyB1c2VkLiAoVG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25zIG9uIGV2ZXJ5Citsb2FkIG9mIFZpbSBwbGFjZSB0aGUgYWJvdmUgbGluZXMgaW4geW91ciAudmltcmMuKQorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3NfcW54LnR4dCBiL3J1bnRpbWUvZG9jL29zX3FueC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkMWE0YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29zX3FueC50eHQKQEAgLTAsMCArMSwxMzggQEAKKypvc19xbngudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBBcHIgMjMKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgSnVsaWFuIEtpbnJhaWQKKworCisJCQkJCQkJKlFOWCogKnFueCoKKworMS4gR2VuZXJhbAkJCXxxbngtZ2VuZXJhbHwKKzIuIENvbXBpbGluZyBWaW0JCXxxbngtY29tcGlsaW5nfAorMy4gVGVybWluYWwgc3VwcG9ydAkJfHFueC10ZXJtaW5hbHwKKzQuIFBob3RvbiBHVUkJCQl8cGhvdG9uLWd1aXwKKzUuIFBob3RvbiBmb250cwkJCXxwaG90b24tZm9udHN8Cis2LiBCdWdzICYgdGhpbmdzIFRvIERvCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBHZW5lcmFsCQkJCQkJKnFueC1nZW5lcmFsKgorCitWaW0gb24gUU5YIGJlaGF2ZXMgbXVjaCBsaWtlIG90aGVyIHVuaXggdmVyc2lvbnMuIHxvc191bml4LnR4dHwKKworCisyLiBDb21waWxpbmcgVmltCQkJCQkqcW54LWNvbXBpbGluZyoKKworVmltIGNhbiBiZSBjb21waWxlZCB1c2luZyB0aGUgc3RhbmRhcmQgY29uZmlndXJlL21ha2UgYXBwcm9hY2guIElmIHlvdSB3YW50IHRvCitjb21waWxlIGZvciBYMTEsIHBhc3MgdGhlIC0td2l0aC14IG9wdGlvbiB0byBjb25maWd1cmUuICBPdGhlcndpc2UsIHJ1bm5pbmcKKy4vY29uZmlndXJlIHdpdGhvdXQgYW55IGFyZ3VtZW50cyBvciBwYXNzaW5nIC0tZW5hYmxlLWd1aT1waG90b24sIHdpbGwgY29tcGlsZQordmltIHdpdGggdGhlIFBob3RvbiBndWkgc3VwcG9ydC4gIFJ1biAuL2NvbmZpZ3VyZSAtLWhlbHAgLCB0byBmaW5kIG91dCBvdGhlcgorZmVhdHVyZXMgeW91IGNhbiBlbmFibGUvZGlzYWJsZS4KKworCiszLiBUZXJtaW5hbCBzdXBwb3J0CQkJCQkqcW54LXRlcm1pbmFsKgorCitWaW0gaGFzIHN1cHBvcnQgZm9yIHRoZSBtb3VzZSBhbmQgY2xpcGJvYXJkIGluIGEgcHRlcm0sIGlmIHRob3NlIG9wdGlvbnMKK2FyZSBjb21waWxlZCBpbiwgd2hpY2ggdGhleSBhcmUgbm9ybWFsbHkuCisKK1RoZSBvcHRpb25zIHRoYXQgYWZmZWN0IG1vdXNlIHN1cHBvcnQgYXJlIHwnbW91c2UnfCBhbmQgfCd0dHltb3VzZSd8LiAgV2hlbgordXNpbmcgdGhlIG1vdXNlLCBvbmx5IHNpbXBsZSBsZWZ0IGFuZCByaWdodCBtb3VzZSBjbGlja2luZy9kcmFnZ2luZyBpcworc3VwcG9ydGVkLiAgSWYgeW91IGhvbGQgZG93biBzaGlmdCwgY3RybCwgb3IgYWx0IHdoaWxlIHVzaW5nIHRoZSBtb3VzZSwgcHRlcm0KK3dpbGwgaGFuZGxlIHRoZSBtb3VzZSBpdHNlbGYuICBJdCB3aWxsIG1ha2UgYSBzZWxlY3Rpb24sIHNlcGFyYXRlIGZyb20gd2hhdAordmltJ3MgZG9pbmcuCisKK1doZW4gdGhlIG1vdXNlIGlzIGluIHVzZSwgeW91IGNhbiBwcmVzcyBBbHQtUmlnaHRNb3VzZSB0byBvcGVuIHRoZSBwdGVybSBtZW51LgorVG8gdHVybiB0aGUgbW91c2Ugb2ZmIGluIHZpbSwgc2V0IHRoZSBtb3VzZSBvcHRpb24gdG8gbm90aGluZywgc2V0IG1vdXNlPQorCisKKzQuIFBob3RvbiBHVUkJCQkJCQkqcGhvdG9uLWd1aSoKKworVG8gc3RhcnQgdGhlIGd1aSBmb3IgdmltLCB5b3UgbmVlZCB0byBydW4gZWl0aGVyIGd2aW0gb3IgdmltIC1nLCBvdGhlcndpc2UKK3RoZSB0ZXJtaW5hbCB2ZXJzaW9uIHdpbGwgcnVuLiAgRm9yIG1vcmUgaW5mbyAtIHxndWkteDExLXN0YXJ0fAorCitTdXBwb3J0ZWQgZmVhdHVyZXM6CisJOmJyb3dzZSBjb21tYW5kCQkJCQl8OmJyb3dzZXwKKwk6Y29uZmlybSBjb21tYW5kCQkJCXw6Y29uZmlybXwKKwlDdXJzb3IgYmxpbmtpbmcJCQkJCXwnZ3VpY3Vyc29yJ3wKKwlNZW51cywgcG9wdXAgbWVudXMgYW5kIG1lbnUgcHJpb3JpdGllcwkJfDptZW51fAorCQkJCQkJCXxwb3B1cC1tZW51fAorCQkJCQkJCXxtZW51LXByaW9yaXR5fAorCVRvb2xiYXIJCQkJCQl8Z3VpLXRvb2xiYXJ8CisJCQkJCQkJfCd0b29sYmFyJ3wKKwlGb250IHNlbGVjdG9yICg6c2V0IGd1aWZvbnQ9KikJCQl8cGhvdG9uLWZvbnRzfAorCU1vdXNlIGZvY3VzCQkJCQl8J21vdXNlZm9jdXMnfAorCU1vdXNlIGhpZGUJCQkJCXwnbW91c2VoaWRlJ3wKKwlNb3VzZSBjdXJzb3Igc2hhcGVzCQkJCXwnbW91c2VzaGFwZSd8CisJQ2xpcGJvYXJkCQkJCQl8Z3VpLWNsaXBib2FyZHwKKworVW5maW5pc2hlZCBmZWF0dXJlczoKKwlWYXJpb3VzIGludGVybmF0aW9uYWwgc3VwcG9ydCwgc3VjaCBhcyBGYXJzaSAmIEhlYnJldyBzdXBwb3J0LAorCWRpZmZlcmVudCBlbmNvZGluZ3MsIGV0Yy4KKworCVRoaXMgaGVscCBmaWxlCisKK1Vuc3VwcG9ydGVkIGZlYXR1cmVzOgorCUZpbmQgJiBSZXBsYWNlIHdpbmRvdwkJCQl8OnByb21wdGZpbmR8CisJVGVhcm9mZiBtZW51cworCisJT3RoZXIgdGhpbmdzIHdoaWNoIEkgY2FuJ3QgdGhpbmsgb2Ygc28gSSBjYW4ndCBsaXN0IHRoZW0KKworCis1LiBGb250cwkJCQkJCSpwaG90b24tZm9udHMqCisKK1lvdSBzZXQgZm9udHMgaW4gdGhlIGd1aSB3aXRoIHRoZSBndWlmb250IG9wdGlvbiA+CisJOnNldCBndWlmb250PUx1Y2lkYVwgVGVybWluYWwKKzwKK1RoZSBmb250IG11c3QgYmUgYSBtb25vc3BhY2UgZm9udCwgYW5kIGFueSBzcGFjZXMgaW4gdGhlIGZvbnQgbmFtZSBtdXN0IGJlCitlc2NhcGVkIHdpdGggYSAnXCcuICBUaGUgZGVmYXVsdCBmb250IHVzZWQgaXMgUEMgVGVybWluYWwsIHNpemUgOC4gIFVzaW5nCisnKicgYXMgdGhlIGZvbnQgbmFtZSB3aWxsIG9wZW4gYSBzdGFuZGFyZCBQaG90b24gZm9udCBzZWxlY3RvciB3aGVyZSB5b3UgY2FuCitzZWxlY3QgYSBmb250LgorCitGb2xsb3dpbmcgdGhlIG5hbWUsIHlvdSBjYW4gaW5jbHVkZSBvcHRpb25hbCBzZXR0aW5ncyB0byBjb250cm9sIHRoZSBzaXplIGFuZAorc3R5bGUgb2YgdGhlIGZvbnQsIGVhY2ggc2V0dGluZyBzZXBhcmF0ZWQgYnkgYSAnOicuICBOb3QgYWxsIGZvbnRzIHN1cHBvcnQgdGhlCit2YXJpb3VzIHN0eWxlcy4KKworVGhlIG9wdGlvbnMgYXJlLAorICAgIHN7c2l6ZX0JU2V0IHRoZSBzaXplIG9mIHRoZSBmb250IHRvIHtzaXplfQorICAgIGIJCUJvbGQgc3R5bGUKKyAgICBhCQlVc2UgYW50aWFsaWFzaW5nCisgICAgaQkJSXRhbGljIHN0eWxlCisKK0V4YW1wbGVzOgorCitTZXQgdGhlIGZvbnQgdG8gbW9ub3NwYWNlIHNpemUgMTAgd2l0aCBhbnRpYWxpYXNpbmcgPgorCTpzZXQgZ3VpZm9udD1tb25vc3BhY2U6czEwOmEKKzwKK1NldCB0aGUgZm9udCB0byBDb3VyaWVyIHNpemUgMTIsIHdpdGggYm9sZCBhbmQgaXRhbGljcyA+CisJOnNldCBndWlmb250PUNvdXJpZXI6czEyOmI6aQorPAorU2VsZWN0IGEgZm9udCB3aXRoIHRoZSByZXF1ZXN0ZXIgPgorCTpzZXQgZ3VpZm9udD0qCis8CisKKworNi4gQnVncyAmIHRoaW5ncyBUbyBEbworCitLbm93biBwcm9ibGVtczoKKwktIFZpbSBoYW5ncyBzb21ldGltZXMgd2hlbiBydW5uaW5nIGFuIGV4dGVybmFsIHByb2dyYW0uICBXb3JrYXJvdW5kOgorCSAgcHV0IHRoaXMgbGluZSBpbiB5b3VyIHx2aW1yY3wgZmlsZTogPgorCQlzZXQgbm9ndWlwdHkKKworQnVnczoKKwktIFN0aWxsIGEgc2xpZ2h0IHByb2JsZW0gd2l0aCBtZW51IGhpZ2hsaWdodGluZworCS0gV2hlbiB1c2luZyBwaGRpdHRvL3BoaW5vd3MvZXRjLiwgaWYgeW91IGFyZSB1c2luZyBhIGZvbnQgdGhhdAorCSAgZG9lc24ndCBzdXBwb3J0IHRoZSBib2xkIGF0dHJpYnV0ZSwgd2hlbiB2aW0gYXR0ZW1wdHMgdG8gZHJhdworCSAgYm9sZCB0ZXh0IGl0IHdpbGwgYmUgYWxsIG1lc3NlZCB1cC4KKwktIFRoZSBjdXJzb3IgY2FuIHNvbWV0aW1lcyBiZSBoYXJkIHRvIHNlZS4KKwktIEEgbnVtYmVyIG9mIG1pbm9yIHByb2JsZW1zIHRoYXQgY2FuIGZpeGVkIDopCisKK1RvZG86CisJLSBJbXByb3ZlIG11bHRpLWxhbmd1YWdlIHN1cHBvcnQuCisJLSBPcHRpb25zIGZvciBzZXR0aW5nIHRoZSBmb250cyB1c2VkIGluIHRoZSBtZW51IGFuZCB0b29sYmFyLgorCS0gRmluZCAmIFJlcGxhY2UgZGlhbG9nLgorCS0gVGhlIGNsaWVudHNlcnZlciBmZWF0dXJlcy4KKwktIE1heWJlIHRlYXJvZmYgbWVudXMuCisKKwktIFJlcGxhY2UgdXNhZ2Ugb2YgZm9yaygpIHdpdGggc3Bhd24oKSB3aGVuIGxhdW5jaGluZyBleHRlcm5hbAorCSAgcHJvZ3JhbXMuCisKKyB2aW06dHc9Nzg6c3c9NDp0cz04OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3NfcmlzYy50eHQgYi9ydW50aW1lL2RvYy9vc19yaXNjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGY5YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvb3NfcmlzYy50eHQKQEAgLTAsMCArMSwzMjMgQEAKKypvc19yaXNjLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDEKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgVGhvbWFzIExlb25hcmQKKworCisJCQkJCQkqcmlzY29zKiAqUklTQ09TKiAqUklTQy1PUyoKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgcGFydGljdWxhcml0aWVzIGZvciB0aGUgUklTQyBPUyB2ZXJzaW9uIG9mIFZpbS4KKworVGhlIFJJU0MgT1MgcG9ydCBpcyBhIGNvbXBsZXRlbHkgbmV3IHBvcnQgYW5kIGlzIG5vdCBiYXNlZCBvbiB0aGUgb2xkIGBhcmNoaScKK3BvcnQuCisKKzEuICBGaWxlIGxvY2F0aW9ucwkJfHJpc2Nvcy1sb2NhdGlvbnN8CisyLiAgRmlsZW5hbWUgbXVuZ2luZwkJfHJpc2Nvcy1tdW5naW5nfAorMy4gIENvbW1hbmQtbGluZSB1c2UJCXxyaXNjb3MtY29tbWFuZGxpbmV8Cis0LiAgRGVza3RvcCAoR1VJKSB1c2UJCXxyaXNjb3MtZ3VpfAorNS4gIFJlbW90ZSB1c2UgKHRlbG5ldCkJCXxyaXNjb3MtcmVtb3RlfAorNi4gIFRlbXBvcmFyeSBmaWxlcwkJfHJpc2Nvcy10ZW1wLWZpbGVzfAorNy4gIEludGVycnVwdGluZwkJfHJpc2Nvcy1pbnRlcnJ1cHR8Cis4LiAgTWVtb3J5IHVzYWdlCQl8cmlzY29zLW1lbW9yeXwKKzkuICBGaWxldHlwZXMJCQl8cmlzY29zLWZpbGV0eXBlc3wKKzEwLiBUaGUgc2hlbGwJCQl8cmlzY29zLXNoZWxsfAorMTEuIFBvcnRpbmcgbmV3IHJlbGVhc2VzCXxyaXNjb3MtcG9ydGluZ3wKKworSWYgSSd2ZSBtaXNzZWQgYW55dGhpbmcsIGVtYWlsIG1lIGFuZCBJJ2xsIHRyeSB0byBmaXggaXQuICBJbiBmYWN0LCBldmVuIGlmIEkKK2hhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIHRoZW4gZW1haWwgbWUgYW55d2F5IHRvIGdpdmUgbWUgc29tZSBjb25maWRlbmNlIHRoYXQgaXQKK2FjdHVhbGx5IHdvcmtzIQorCitUaG9tYXMgTGVvbmFyZCA8dGFsMTk3QGVjcy5zb3Rvbi5hYy51az4KKworCVt0aGVzZSBVUkxzIG5vIGxvbmdlciB3b3JrLi4uXQorIFBvcnQgaG9tZXBhZ2U6CWh0dHA6Ly93d3cuZWNzLnNvdG9uLmFjLnVrL350YWwxOTcvCisJb3IgdHJ5OglodHRwOi8vd3d3LnNvdG9uLmFjLnVrL350YWwxOTcvCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCQkJCSpyaXNjb3MtbG9jYXRpb25zKgorMS4gRmlsZSBsb2NhdGlvbnMKKworVGhlIFZpbSBleGVjdXRhYmxlIGFuZCBzaGFyZWQgcmVzb3VyY2UgZmlsZXMgYXJlIGFsbCBzdG9yZWQgaW5zaWRlIHRoZSAhVmltCithcHBsaWNhdGlvbiBkaXJlY3RvcnkuCisKK1doZW4gIVZpbSBpcyBmaXJzdCBzZWVuIGJ5IHRoZSBmaWxlciwgaXQgYWxpYXNlcyB0aGUgKnZpIGFuZCAqZXggY29tbWFuZHMgdG8KK3J1biB0aGUgY29tbWFuZC1saW5lIHZlcnNpb25zIG9mIFZpbSAoc2VlIHxyaXNjb3MtY29tbWFuZGxpbmV8KS4KKworIVZpbS5SZXNvdXJjZXMgYW5kICFWaW0uUmVzb3VyY2VzMiBjb250YWluIHRoZSBmaWxlcyBmcm9tIHRoZSBzdGFuZGFyZCBWaW0KK2Rpc3RyaWJ1dGlvbiwgYnV0IG1vZGlmaWVkIHNsaWdodGx5IHRvIHdvcmsgd2l0aGluIHRoZSBsaW1pdHMgb2YgQURGUywgcGx1cworc29tZSBleHRyYSBmaWxlcyBzdWNoIGFzIHRoZSB3aW5kb3cgdGVtcGxhdGVzLgorCitVc2VyIGNob2ljZXMgYXJlIHJlYWQgZnJvbSBgQ2hvaWNlczoqJyBhbmQgYXJlIHNhdmVkIHRvIGA8Q2hvaWNlcyRXcml0ZT4uKicuCitJZiB5b3UgaGF2ZSB0aGUgbmV3ICFCb290IHN0cnVjdHVyZSB0aGVuIHRoZXNlIHNob3VsZCBiZSBzZXQgdXAgYWxyZWFkeS4gSWYKK25vdCwgc2V0IENob2ljZXMkUGF0aCB0byBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIHdoZW4gbG9va2luZyBmb3IKK3VzZXIgY29uZmlndXJhdGlvbiBmaWxlcy4gU2V0IENob2ljZXMkV3JpdGUgdG8gdGhlIGRpcmVjdG9yeSB5b3Ugd2FudCBmaWxlcwordG8gYmUgc2F2ZWQgaW50byAoc28geW91ciBzZWFyY2ggcGF0dGVybnMgYW5kIG1hcmtzIGNhbiBiZSByZW1lbWJlcmVkIGJldHdlZW4KK3Nlc3Npb25zKS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkJKnJpc2Nvcy1tdW5naW5nKgorMi4gRmlsZW5hbWUgbXVuZ2luZworCitBbGwgcGF0aG5hbWUgbXVuZ2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBzbyBWaW0gc2hvdWxkIGJlaGF2ZSBsaWtlIGEKK25vcm1hbCBSSVNDIE9TIGFwcGxpY2F0aW9uIG5vdy4gU28sIGlmIHlvdSB3YW50IHRvIGVkaXQgYGRvYy9odG1sJyB0aGVuIHlvdQorYWN0dWFsbHkgdHlwZSBgKnZpIGRvYy9odG1sJy4KKworVGhlIG9ubHkgdGltZXMgbXVuZ2luZyBpcyBkb25lIGlzIHdoZW46CisKKy0gU2VhcmNoaW5nIGluY2x1ZGVkIGZpbGVzIGZyb20gQyBwcm9ncmFtcywgc2luY2UgdGhlc2UgYXJlIGFsd2F5cyBtdW5nZWQuCisgIFNlZSB8W0l8LgorICBOb3RlOiBtYWtlIHN1cmUgeW91IGFyZSBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5IHdoZW4geW91IHVzZSB0aGlzCisJY29tbWFuZCAoaWUgdGhlIG9uZSB3aXRoIHN1YmRpcmVjdG9yaWVzICdjJyBhbmQgJ2gnKS4KKworLSBTb3VyY2luZyBmaWxlcyB1c2luZyB8OnNvfC4KKyAgUGF0aHMgc3RhcnRpbmcgYCRWSU0vJyBhcmUgbXVuZ2VkIGxpa2UgdGhpczoKKworICAkVklNL3N5bnRheC9oZWxwLnZpbSAgLT4gIFZpbTpzeW50YXguaGVscAorCisgIEFsc28sIGZpbGVzIGVuZGluZyBpbiBgLnZpbScgaGF2ZSB0aGVpciBleHRlbnNpb25zIHJlbW92ZWQsIGFuZCBzbGFzaGVzCisgIHJlcGxhY2VkIHdpdGggZG90cy4KKworU29tZSB0YWcgZmlsZXMgYW5kIHNjcmlwdCBmaWxlcyBtYXkgaGF2ZSB0byBiZSBlZGl0ZWQgdG8gd29yayB1bmRlciB0aGlzIHBvcnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCQkJCSpyaXNjb3MtY29tbWFuZGxpbmUqCiszLiBDb21tYW5kLWxpbmUgdXNlCisKK1RvIHVzZSBWaW0gZnJvbSB0aGUgY29tbWFuZC1saW5lIHVzZSB0aGUgYCp2aScgY29tbWFuZCAob3IgJypleCcgZm9yCit8RXgtbW9kZXwpLgorCitUeXBlIGAqdmkgLWgnIGZvciBhIGxpc3Qgb2Ygb3B0aW9ucy4KKworUnVubmluZyB0aGUgY29tbWFuZC1saW5lIHZlcnNpb24gb2YgVmltIGluIGEgbGFyZ2UgaGlnaC1jb2xvciBtb2RlIG1heSBjYXVzZQordGhlIHNjcm9sbGluZyB0byBiZSB2ZXJ5IHNsb3cuIEVpdGhlciBjaGFuZ2UgdG8gYSBtb2RlIHdpdGggZmV3ZXIgY29sb3JzIG9yCit1c2UgdGhlIEdVSSB2ZXJzaW9uLgorCitBbHNvLCBob2xkaW5nIGRvd24gQ3RybCB3aWxsIHNsb3cgaXQgZG93biBldmVuIG1vcmUsIGFuZCBDdHJsLVNoaWZ0IHdpbGwKK2ZyZWV6ZSBpdCwgYXMgdXN1YWwgZm9yIHRleHQgcHJvZ3JhbXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCQkJCSpyaXNjb3MtZ3VpKgorNC4gRGVza3RvcCB1c2UKKworTGltaXRhdGlvbnM6CisKKy0gTGVmdCBzY3JvbGxiYXJzIGRvbid0IHdvcmsgcHJvcGVybHkgKHJpZ2h0IGFuZCBib3R0b20gYXJlIGZpbmUpLgorLSBEb2Vzbid0IGluY3JlYXNlIHNjcm9sbCBzcGVlZCBpZiBpdCBnZXRzIGJlaGluZC4KKworWW91IGNhbiByZXNpemUgdGhlIHdpbmRvdyBieSBkcmFnZ2luZyB0aGUgbG93ZXItcmlnaHQgY29ybmVyLCBldmVuIHRob3VnaAordGhlcmUgaXMgbm8gaWNvbiBzaG93biB0aGVyZS4KKworWW91IGNhbiB1c2UgdGhlIC0tcm93cyBhbmQgLS1jb2x1bW5zIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpbml0aWFsIHNpemUgb2YKK3RoZSBWaW0gd2luZG93LCBsaWtlIHRoaXM6ID4KKworICAqVmkgLWcgLS1yb3dzIDIwIC0tY29sdW1ucyA4MAorCitUaGUgZ2xvYmFsIGNsaXBib2FyZCBpcyBzdXBwb3J0ZWQsIHNvIHlvdSBjYW4gc2VsZWN0IHNvbWUgdGV4dCBhbmQgdGhlbgorcGFzdGUgaXQgZGlyZWN0bHkgaW50byBhbm90aGVyIGFwcGxpY2F0aW9uIChwcm92aWRlZCBpdCBzdXBwb3J0cyB0aGUKK2NsaXBib2FyZCB0b28pLgorCitDbGlja2luZyBNZW51IG5vdyBvcGVucyBhIG1lbnUgbGlrZSBhIG5vcm1hbCBSSVNDIE9TIHByb2dyYW0uIEhvbGQgZG93biBTaGlmdAord2hlbiBjbGlja2luZyBNZW51IHRvIHBhc3RlIChmcm9tIHRoZSBnbG9iYWwgY2xpcGJvYXJkKS4KKworRHJhZ2dpbmcgYSBmaWxlIHRvIHRoZSB3aW5kb3cgcmVwbGFjZXMgdGhlIENVUlJFTlQgYnVmZmVyICh0aGUgb25lIHdpdGggdGhlCitjdXJzb3IsIE5PVCB0aGUgb25lIHlvdSBkcmFnZ2VkIHRvKSB3aXRoIHRoZSBmaWxlLgorCitEcmFnZ2luZyB3aXRoIEN0cmwgaGVsZCBkb3duIGNhdXNlcyBhIG5ldyBWaW0gd2luZG93IHRvIGJlIG9wZW5lZCBmb3IgdGhlCitmaWxlIChzZWUgfDpzcHwpLgorCitEcmFnZ2luZyBhIGZpbGUgaW4gd2l0aCBTaGlmdCBoZWxkIGRvd24gaW4gaW5zZXJ0IG1vZGUgaW5zZXJ0cyB0aGUgcGF0aG5hbWUgb2YKK3RoZSBmaWxlLgorCis6YnJvd3NlIDp3IG9wZW5zIGEgc3RhbmRhcmQgUklTQyBPUyBzYXZlIGJveC4KKzpicm93c2UgOmUgb3BlbnMgYSBkaXJlY3Rvcnkgdmlld2VyLgorCitGb3IgZm9udHMsIHlvdSBoYXZlIHRoZSBjaG9pY2Ugb2YgdGhlIHN5c3RlbSBmb250LCBhbiBvdXRsaW5lIGZvbnQsIHRoZSBzeXN0ZW0KK2ZvbnQgdmlhIFphcFJlZHJhdyBhbmQgYW55IG9mIHRoZSBaYXAgZm9udHMgdmlhIFphcFJlZHJhdzogPgorCisgIDpzZXQgZ3VpZm9udD0KKzwJCQlUbyB1c2UgdGhlIHN5c3RlbSBmb250IHZpYSB0aGUgVkRVIGRyaXZlcnMuIFN1cHBvcnRzCisJCQlib2xkIGFuZCB1bmRlcmxpbmUuCis+CisgIDpzZXQgZ3VpZm9udD1Db3JwdXMuTWVkaXVtCis8CQkJVXNlIHRoZSBuYW1lZCBvdXRsaW5lIGZvbnQuIFlvdSBjYW4gdXNlIGFueSBmb250LCBidXQKKwkJCW9ubHkgbW9ub3NwYWNlZCBvbmVzIGxpa2UgQ29ycHVzIGxvb2sgcmlnaHQuCis+CisgIDpzZXQgZ3VpZm9udD1Db3JwdXMuTWVkaXVtOnc4OmgxMjpiOmkKKzwJCQlBcyBiZWZvcmUsIGJ1dCB3aXRoIHNpemUgb2YgOCBwb2ludCBieSAxMiBwb2ludCwgYW5kCisJCQlpbiBib2xkIGl0YWxpYy4KKwkJCUlmIG9ubHkgb25lIG9mIHdpZHRoIGFuZCBoZWlnaHQgaXMgZ2l2ZW4gdGhlbiB0aGF0CisJCQl2YWx1ZSBpcyB1c2VkIGZvciBib3RoLiBJZiBuZWl0aGVyIGlzIGdpdmVuIHRoZW4gMTAKKwkJCXBvaW50IGlzIHVzZWQuCisKK1RoYW5rcyB0byBKb2huIEtvcnRpbmssIFZpbSBjYW4gdXNlIHRoZSBaYXBSZWRyYXcgbW9kdWxlLiBTdGFydCB0aGUgZm9udCBuYW1lCit3aXRoICchJyAob3IgJyEhJyBmb3IgZG91YmxlIGhlaWdodCksIGxpa2UgdGhpczogPgorCisgIDpzZXQgZ3VpZm9udD0hIQorPAkJCVVzZSB0aGUgc3lzdGVtIGZvbnQsIGJ1dCB2aWEgWmFwUmVkcmF3LiAgVGhpcyBnaXZlcyBhCisJCQlmYXN0ZXIgcmVkcmF3IG9uIFN0cm9uZ0FSTSBwcm9jZXNzb3JzLCBidXQgeW91IGNhbid0CisJCQlnZXQgYm9sZCBvciBpdGFsaWMgdGV4dC4gRG91YmxlIGhlaWdodC4KKz4KKyAgOnNldCBndWlmb250PSFzY3JpcHQKKzwJCQlVc2VzIHRoZSBuYW1lZCBaYXAgZm9udCAoYSBkaXJlY3RvcnkgaW4gVmltRm9udCRQYXRoKS4KKwkJCVRoZSByZWRyYXcgaXMgdGhlIHNhbWUgc3BlZWQgYXMgZm9yICchIScsIGJ1dCB5b3UgZ2V0CisJCQlhIG5pY2VyIGxvb2tpbmcgZm9udC4KKwkJCU9ubHkgdGhlICJtYW4rIiBhbmQgInNjcmlwdCIgZm9udHMgYXJlIHN1cHBsaWVkCisJCQljdXJyZW50bHksIGJ1dCB5b3UgY2FuIHVzZSBhbnkgb2YgdGhlIFphcCBmb250cyBpZgorCQkJdGhleSBhcmUgaW4gVmltRm9udCRQYXRoLgorCQkJVmltIHdpbGwgdHJ5IHRvIGxvYWQgZm9udCBmaWxlcyAnMCcsICdCJywgJ0knIGFuZCAnSUInCisJCQlmcm9tIHRoZSBuYW1lZCBkaXJlY3RvcnkuIE9ubHkgJzAnIChub3JtYWwgc3R5bGUpIE1VU1QKKwkJCWJlIHByZXNlbnQuIExpbmsgZmlsZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCitOb3RlIHRoYXQgd2hlbiB1c2luZyBaYXBSZWRyYXcgdGhlIGVkaXQgYmFyIGlzIGRyYXduIGluIGZyb250IG9mIHRoZSBjaGFyYWN0ZXIKK3lvdSBhcmUgb24gcmF0aGVyIHRoYW4gYmVoaW5kIGl0LiBBbHNvIHJlZHJhdyBpcyBpbmNvcnJlY3QgZm9yIHNjcmVlbiBtb2Rlcword2l0aCBlaWdlbiB2YWx1ZXMgb2YgMC4gSWYgdGhlIGZvbnQgaW5jbHVkZXMgY29udHJvbCBjaGFyYWN0ZXJzIHRoZW4geW91IGNhbgorZ2V0IFZpbSB0byBkaXNwbGF5IHRoZW0gYnkgY2hhbmdpbmcgdGhlICdpc3ByaW50JyBvcHRpb24uCisKK0lmIHlvdSBmaW5kIHRoZSBzY3JvbGxpbmcgaXMgdG9vIHNsb3cgb24geW91ciBtYWNoaW5lLCB0cnkgZXhwZXJpbWVudGluZword2l0aCB0aGUgJ3Njcm9sbGp1bXAnIGFuZCAndHR5c2Nyb2xsJyBvcHRpb25zLgorCitJbiBwYXJ0aWN1bGFyLCBTdHJvbmdBUk0gdXNlcnMgbWF5IGZpbmQgdGhhdDogPgorCisgIDpzZXQgdHR5c2Nyb2xsPTAKKworbWFrZXMgc2Nyb2xsaW5nIGZhc3RlciBpbiBoaWdoLWNvbG9yIG1vZGVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCQkJCSpyaXNjb3MtcmVtb3RlKgorNS4gUmVtb3RlIHVzZSAodGVsbmV0KQorCitJIGhhdmUgaW5jbHVkZWQgYSBidWlsdC1pbiB0ZXJtY2FwIGVudHJ5LCBidXQgeW91IGNhbiBlZGl0IHRoZSB0ZXJtY2FwIGZpbGUgdG8KK2FsbG93IG90aGVyIGNvZGVzIHRvIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gdXNlIFZpbSBmcm9tIGEgcmVtb3RlIHRlcm1pbmFsLgorCitBbHRob3VnaCBJIGRvIG5vdCBoYXZlIGFuIGludGVybmV0IGNvbm5lY3Rpb24gdG8gbXkgQWNvcm4sIEkgaGF2ZSBtYW5hZ2VkIHRvCitydW4gVmltIGluIGEgRnJlZVRlcm0gd2luZG93IHVzaW5nIHRoZSBsb29wYmFjayBjb25uZWN0aW9uLgorCitJdCBzZWVtcyB0byB3b3JrIHByZXR0eSB3ZWxsIG5vdywgdXNpbmcgJyp2aSAtVCBhbnNpJy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkJKnJpc2Nvcy10ZW1wLWZpbGVzKgorNi4gVGVtcG9yYXJ5IGZpbGVzCisKK0lmIFZpbSBjcmFzaGVzIHRoZW4gdGhlIHN3YXAgYW5kIGJhY2t1cCBmaWxlcyAoaWYgYW55KSB3aWxsIGJlIGluIHRoZQorZGlyZWN0b3JpZXMgc2V0IHdpdGggdGhlICdkaXJlY3RvcnknIGFuZCAnYmRpcicgb3B0aW9ucy4gIEJ5IGRlZmF1bHQgdGhlIHN3YXAKK2ZpbGVzIGFyZSBpbiA8V2ltcCRTY3JhcERpcj4gKGllIGluc2lkZSAhU2NyYXApIGFuZCBiYWNrdXBzIGFyZSBpbiB0aGUKK2RpcmVjdG9yeSB5b3Ugd2VyZSBzYXZpbmcgdG8uIFZpbSB3aWxsIGFsbG93IHlvdSB0byB0cnkgYW5kIHJlY292ZXIgdGhlIGZpbGUKK3doZW4geW91IG5leHQgdHJ5IHRvIGVkaXQgaXQuCisKK1RvIHNlZSBhIGxpc3Qgb2Ygc3dhcCBmaWxlcywgcHJlc3MgPEYxMj4gYW5kIHR5cGUgYCp2aSAtcicuCisKK1ZpbSBubyBsb25nZXIgYnJpbmdzIHVwIEFUVEVOVElPTiB3YXJuaW5ncyBpZiB5b3UgdHJ5IHRvIGVkaXQgdHdvIGZpbGVzIHdpdGgKK3RoZSBzYW1lIG5hbWUgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzLgorCitIb3dldmVyLCBpdCBhbHNvIG5vIGxvbmdlciB3YXJucyBpZiB5b3UgdHJ5IHRvIGVkaXQgdGhlIHNhbWUgZmlsZSB0d2ljZSAod2l0aAordHdvIGNvcGllcyBvZiBWaW0pLCB0aG91Z2ggeW91IHdpbGwgc3RpbGwgYmUgd2FybmVkIHdoZW4geW91IHNhdmUgdGhhdCB0aGUKK2RhdGVzdGFtcCBoYXMgY2hhbmdlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkJKnJpc2Nvcy1pbnRlcnJ1cHQqCis3LiBJbnRlcnJ1cHRpbmcKKworVG8gYnJlYWsgb3V0IG9mIGEgbG9vcGluZyBtYWNybywgb3Igc2ltaWxhciwgaG9sZCBkb3duIEVzY2FwZSBpbiB0aGUKK2NvbW1hbmQtbGluZSB2ZXJzaW9uLCBvciBwcmVzcyBDVFJMLUMgaW4gdGhlIEdVSSB2ZXJzaW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkJCQkqcmlzY29zLW1lbW9yeSoKKzguIE1lbW9yeSB1c2FnZQorCitWaW0gd2lsbCB1c2UgZHluYW1pYyBhcmVhcyBvbiBSSVNDIE9TIDMuNSBvciBsYXRlci4gSWYgeW91IGNhbiB1c2UgdGhlbSBvbgorb2xkZXIgbWFjaGluZXMgdGhlbiBlZGl0IHRoZSAhUnVuVHh0IGFuZCBHVmltIGZpbGVzLiBJIGRvbid0IGtub3cgd2hhdCBVbml4TGliCitkb2VzIGJ5IGRlZmF1bHQgb24gdGhlc2UgbWFjaGluZXMgc28gSSdtIHBsYXlpbmcgc2FmZS4KKworSXQgZG9lc24ndCB3b3JrIGF0IGFsbCB3ZWxsIHdpdGhvdXQgZHluYW1pYyBhcmVhcywgc2luY2UgaXQgY2FuJ3QgY2hhbmdlIGl0cworbWVtb3J5IGFsbG9jYXRpb24gb25jZSBydW5uaW5nLiBIZW5jZSB5b3Ugc2hvdWxkIGVkaXQgYCFWaW0uR1ZpbScgYW5kCitgIVZpbS4hUnVuVHh0JyB0byBjaG9vc2UgdGhlIGJlc3Qgc2l6ZSBmb3IgeW91LiBZb3UgcHJvYmFibHkgbmVlZCBhdCBsZWFzdAorYWJvdXQgMTQwMEsuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCQkJCSpyaXNjb3MtZmlsZXR5cGVzKgorOS4gRmlsZXR5cGVzCisKK1lvdSBjYW4gbm93IHNwZWNpZnkgdGhhdCBhdXRvY29tbWFuZHMgYXJlIG9ubHkgZXhlY3V0ZWQgZm9yIGZpbGVzIG9mIGNlcnRhaW4KK3R5cGVzLiBUaGUgZmlsZXR5cGUgaXMgZ2l2ZW4gaW4gdGhlIGZvcm0gJnh4eCwgd2hlbiB4eHggaXMgdGhlIGZpbGV0eXBlLgorCitGaWxldHlwZXMgbXVzdCBiZSBzcGVjaWZpZWQgYnkgbnVtYmVyIChlZyAmZmZmIGZvciBUZXh0KS4KKworVGhlIHN5c3RlbSBoYXMgY2hhbmdlZCBmcm9tIHZlcnNpb24gNS4zLiBUaGUgbmV3IHNlcXVlbmNlIG9mIGV2ZW50cyBpczoKKworLSBBIGZpbGUgaXMgbG9hZGVkLiB8J29zZmlsZXR5cGUnfCBpcyBzZXQgdG8gdGhlIFJJU0MgT1MgZmlsZXR5cGUuCistIEJhc2VkIG9uIHRoZSBmaWxldHlwZSBhbmQgcGF0aG5hbWUsIFZpbSB3aWxsIHRyeSB0byBzZXQgfCdmaWxldHlwZSd8IHRvIHRoZQorICBWaW0tdHlwZSBvZiB0aGUgZmlsZS4KKy0gU2V0dGluZyB0aGlzIG9wdGlvbiBtYXkgbG9hZCBzeW50YXggZmlsZXMgYW5kIHBlcmZvcm0gb3RoZXIgYWN0aW9ucy4KKy0gU2F2aW5nIHRoZSBmaWxlIHdpbGwgZ2l2ZSBpdCBhIGZpbGV0eXBlIG9mIHwnb3NmaWxldHlwZSd8LgorCitTb21lIGV4YW1wbGVzIG1heSBtYWtlIHRoaXMgY2xlYXJlcjoKKworICBLaW5kIG9mIGZpbGUgbG9hZGVkCW9zZmlsZXR5cGUJZmlsZXR5cGUgfgorICBDIGNvZGUgJ2MuaGVsbG93JwlUZXh0ICgmZmZmKQlDCisgIExhVGVYIGRvY3VtZW50CUxhVGVYICgmMmE4KQlUZVgKKyAgRHJhdyBkb2N1bWVudAkJRHJhd0ZpbGUgKCZhZmYpCShub3QgY2hhbmdlZCkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkJKnJpc2Nvcy1zaGVsbCoKKzEwLiBUaGUgc2hlbGwKKworLSBCYW5ncyAoIXMpIGFyZSBvbmx5IHJlcGxhY2VkIGlmIHRoZXkgYXJlIGZvbGxvd2VkIGJ5IGEgc3BhY2Ugb3IgZW5kLW9mLWxpbmUsCisgIHNpbmNlIG1hbnkgcGF0aG5hbWVzIGNvbnRhaW4gdGhlbS4KKworLSBZb3UgY2FuIHByZWZpeCB0aGUgY29tbWFuZCB3aXRoICd+Jywgd2hpY2ggc3RvcHMgYW55IG91dHB1dCBmcm9tIGJlaW5nCisgIGRpc3BsYXllZC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gcHJlc3MgPEVudGVyPiBhZnRlcndhcmRzLAorICBhbmQgc3RvcHMgdGhlIHNjcmVlbiBmcm9tIGJlaW5nIHJlZHJhd24uIHtvbmx5IGluIHRoZSBHVUkgdmVyc2lvbn0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkJKnJpc2Nvcy1wb3J0aW5nKgorMTEuIFBvcnRpbmcgbmV3IHJlbGVhc2VzIHRvIFJJU0MgT1MKKworRG93bmxvYWRpbmcgZXZlcnl0aGluZyB5b3UgbmVlZDoKKworLSBHZXQgdGhlIGxhdGVzdCBzb3VyY2UgZGlzdHJpYnV0aW9uIChzZWUgd3d3LnZpbS5vcmcpCistIEdldCB0aGUgcnVudGltZSBlbnZpcm9ubWVudCBmaWxlcyAoZWcgdGhlc2UgaGVscCBmaWxlcykKKy0gR2V0IHRoZSBgZXh0cmEnIGFyY2hpdmUgKGNvbnRhaW5zIHRoZSBSSVNDIE9TIHNwZWNpZmljIGJpdHMpCistIEdldCB0aGUgUklTQyBPUyBiaW5hcnkgZGlzdHJpYnV0aW9uIChpZiBwb3NzaWJsZSkKKworCitVbmFyY2hpdmluZzoKKworLSBDcmVhdGUgYSByYUZTIGRpc2sgYW5kIHB1dCB0aGUgYXJjaGl2ZXMgb24gaXQuCistIFVuLWd6aXAgdGhlbQorLSBVbi10YXIgdGhlbSAgICgqdGFyIHhFTGYgNTAgYXJjaGl2ZS90YXIpCisKKworUmVjb21waWxpbmcgdGhlIHNvdXJjZXM6CisKKy0gQ3JlYXRlIGMsIHMsIGFuZCBoIGRpcmVjdG9yaWVzLgorLSBQdXQgYWxsIHRoZSBoZWFkZXIgZmlsZXMgaW4gJ2gnCSAgICAgXAorLSBQdXQgYWxsIHRoZSBDIGZpbGVzIGluIGBjJwkJICAgICB8IEFuZCBsb3NlIHRoZSBleHRlbnNpb25zCistIFB1dCB0aGUgYXNzZW1ibGVyIGZpbGUgKGBzd2lzL3MnKSBpbiAncycgICAvCistIFJlbmFtZSBhbGwgdGhlIGZpbGVzIGluIGBwcm90bycgdG8gYGgnLCBsaWtlIHRoaXM6CisgICAgcmFGUzo6VmltU3JjLnNvdXJjZS5wcm90by5maWxlL3BybworCSAgYmVjb21lcworICAgIHJhRlM6OlZpbVNyYy5zb3VyY2UuaC5maWxlX3BybworLSBJbiB0aGUgZmlsZXMgYGgucHJvdG8nIGFuZCBgYy50ZXJtbGliJywgc2VhcmNoIGFuZCByZXBsYWNlCisgICAgLnBybyIKKyAgICAgICB3aXRoCisgICAgX3Byby5oIgorLSBDcmVhdGUgYSBzaW1wbGUgTWFrZWZpbGUgaWYgZGVzaXJlZCBhbmQgZG8gJyptYWtlIC1rJworICBVc2UgJ0NDID0gZ2NjIC1EUklTQ09TIC1EVVNFX0dVSSAtTzIgLXggYycgaW4gdGhlIE1ha2VmaWxlCistIFNhdmUgdGhlIGJpbmFyeSBhcyAhVmltLlZpbSBpbiB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbgorCisKK1VwZGF0aW5nIHRoZSBydW4tdGltZSBlbnZpcm9ubWVudDoKKworLSBSZXBsYWNlIG9sZCBvciBtaXNzaW5nIGZpbGVzIGluc2lkZSAhVmltLlJlc291cmNlcyB3aXRoIHRoZQorICBuZXcgZmlsZXMuCistIFJlbW92ZSBmaWxlcyBpbiBgZG9jJyBub3QgZW5kaW5nIGluIGAvdHh0JywgZXhjZXB0IGZvciBgdGFncycuCistIExvc2UgdGhlIGV4dGVuc2lvbnMgZnJvbSB0aGUgZmlsZXMgaW4gYGRvYycuCistIEVkaXQgdGhlIGBkb2MudGFncycgZmlsZS4gUmVtb3ZlIGV4dGVuc2lvbnMgZnJvbSB0aGUgc2Vjb25kIGNvbHVtbjogPgorCTolcy9eXCguW15cdF0qXHQuKlwpXC50eHRcdC9cMVx0LworLSBSZW1vdmUgZXh0ZW5zaW9ucyBmcm9tIHRoZSBzeW50YXggZmlsZXMuIFNwbGl0IHRoZW0gaW50byB0d28gZGlyZWN0b3JpZXMKKyAgdG8gYXZvaWQgdGhlIDc3IGVudHJ5IGxpbWl0IG9uIG9sZCBBREZTIGZpbGVzeXN0ZW1zLgorLSBFZGl0IGBWaW06RmlsZVR5cGUnIHRvIG1hdGNoIGAqLmMuKicgYXMgd2VsbCBhcyBgKi9jJyBhbmQgc28gb24uCisgIEFkZCBmaWxldHlwZSBjaGVja2luZyB0b28uCistIEVkaXQgYFZpbTpNZW51JyBhbmQgcmVtb3ZlIGFsbCB0aGUga2V5cyBmcm9tIHRoZSBtZW51czogPgorCTolcy88VGFiPlteIFx0XSovLworPAorIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL29zX3VuaXgudHh0IGIvcnVudGltZS9kb2Mvb3NfdW5peC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzYTU3NAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29zX3VuaXgudHh0CkBAIC0wLDAgKzEsNjAgQEAKKypvc191bml4LnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBNYXIgMTUKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCisJCQkJCQkJKnVuaXgqICpVbml4KgorVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJ0aWN1bGFyaXRpZXMgZm9yIHRoZSBVbml4IHZlcnNpb24gb2YgVmltLgorCitGb3IgY29tcGlsaW5nIFZpbSBvbiBVbml4IHNlZSAiSU5TVEFMTCIgYW5kICJNYWtlZmlsZSIgaW4gdGhlIHNyYyBkaXJlY3RvcnkuCisKK1RoZSBkZWZhdWx0IGhlbHAgZmlsZSBuYW1lIGlzICIvdXNyL2xvY2FsL2xpYi92aW0vaGVscC50eHQiCitUaGUgZmlsZXMgIiRIT01FLy52aW1yYyIgYW5kICIkSE9NRS8uZXhyYyIgYXJlIHVzZWQgaW5zdGVhZCBvZiAiczoudmltcmMiIGFuZAorInM6LmV4cmMiLiBBZGRpdGlvbmFsbHkgIi91c3IvbG9jYWwvZXRjL3ZpbXJjIiBpcyB1c2VkIGZpcnN0LgorSWYgIi91c3IvbG9jYWwvc2hhcmUiIGV4aXN0cyBpdCBpcyB1c2VkIGluc3RlYWQgb2YgIi91c3IvbG9jYWwvbGliIi4KKworVGVtcG9yYXJ5IGZpbGVzIChmb3IgZmlsdGVyaW5nKSBhcmUgcHV0IGluICIvdG1wIi4gIElmIHlvdSB3YW50IHRvIHBsYWNlIHRoZW0KK3NvbWV3aGVyZSBlbHNlLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICRUTVBESVIgdG8gdGhlIGRpcmVjdG9yeSB5b3UKK3ByZWZlci4KKworV2l0aCB3aWxkY2FyZCBleHBhbnNpb24geW91IGNhbiB1c2UgJ34nIChob21lIGRpcmVjdG9yeSkgYW5kICckJworKGVudmlyb25tZW50IHZhcmlhYmxlKS4KKworCQkJCQkJCSpmb3JrKiAqc3Bvb24qCitGb3IgZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzIGZvcmsoKS9leGVjKCkgaXMgdXNlZCB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UKK3N5c3RlbSgpIGlzIHVzZWQsIHdoaWNoIGlzIGEgYml0IHNsb3dlci4gIFRoZSBvdXRwdXQgb2YgIjp2ZXJzaW9uIiBpbmNsdWRlcworfCtmb3JrfCB3aGVuIGZvcmsoKS9leGVjKCkgaXMgdXNlZCwgfCtzeXN0ZW0oKXwgd2hlbiBzeXN0ZW0oKSBpcyB1c2VkLiAgVGhpcworY2FuIGJlIGNoYW5nZWQgYXQgY29tcGlsZSB0aW1lLgorKEZvciBmb3JraW5nIG9mIHRoZSBHVUkgdmVyc2lvbiBzZWUgfGd1aS1mb3JrfCkuCisKK0JlY2F1c2UgdGVybWluYWwgdXBkYXRpbmcgdW5kZXIgVW5peCBpcyBvZnRlbiBzbG93IChlLmcuIHNlcmlhbCBsaW5lCit0ZXJtaW5hbCwgc2hlbGwgd2luZG93IGluIHN1bnRvb2xzKSwgdGhlICdzaG93Y21kJyBhbmQgJ3J1bGVyJyBvcHRpb25zCithcmUgZGVmYXVsdCBvZmYuIElmIHlvdSBoYXZlIGEgZmFzdCB0ZXJtaW5hbCwgdHJ5IHNldHRpbmcgdGhlbSBvbi4gIFlvdSBtaWdodAorYWxzbyB3YW50IHRvIHNldCAndHR5ZmFzdCcuCisKK1doZW4gdXNpbmcgVmltIGluIGFuIHh0ZXJtIHRoZSBtb3VzZSBjbGlja3MgY2FuIGJlIHVzZWQgYnkgVmltIGJ5IHNldHRpbmcKKydtb3VzZScgdG8gImEiLiBJZiB0aGVyZSBpcyBhY2Nlc3MgdG8gYW4gWC1zZXJ2ZXIgZ3VpIHN0eWxlIGNvcHkvcGFzdGUgd2lsbAorYmUgdXNlZCBhbmQgdmlzdWFsIGZlZWRiYWNrIHdpbGwgYmUgcHJvdmlkZWQgd2hpbGUgZHJhZ2dpbmcgd2l0aCB0aGUgbW91c2UuCitJZiB5b3UgdGhlbiBzdGlsbCB3YW50IHRoZSB4dGVybSBjb3B5L3Bhc3RlIHdpdGggdGhlIG1vdXNlLCBwcmVzcyB0aGUgc2hpZnQKK2tleSB3aGVuIHVzaW5nIHRoZSBtb3VzZS4gIFNlZSB8bW91c2UtdXNpbmd8LiAgVmlzdWFsIGZlZWRiYWNrIHdoaWxlIGRyYWdnaW5nCitjYW4gYWxzbyBiZSBhY2hpZXZlZCB2aWEgdGhlICd0dHltb3VzZScgb3B0aW9uIGlmIHlvdXIgeHRlcm0gaXMgbmV3IGVub3VnaC4KKworCQkJCQkJCSp0ZXJtaW5hbC1jb2xvcnMqCitUbyB1c2UgY29sb3JzIGluIFZpbSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGV4YW1wbGUgKGlmIHlvdXIgdGVybWluYWwKK3N1cHBvcnRzIGNvbG9ycywgYnV0ICJUX0NvIiBpcyBlbXB0eSBvciB6ZXJvKTogPgorICAgOnNldCB0X21lPV5bWzA7MTszNm0gICAgICIgbm9ybWFsIG1vZGUgKHVuZG9lcyB0X21yIGFuZCB0X21kKQorICAgOnNldCB0X21yPV5bWzA7MTszMzs0NG0gICIgcmV2ZXJzZSAoaW52ZXJ0KSBtb2RlCisgICA6c2V0IHRfbWQ9XltbMTszMzs0MW0gICAgIiBib2xkIG1vZGUKKyAgIDpzZXQgdF9zZT1eW1sxOzM2OzQwbSAgICAiIHN0YW5kb3V0IGVuZAorICAgOnNldCB0X3NvPV5bWzE7MzI7NDVtICAgICIgc3RhbmRvdXQgbW9kZQorICAgOnNldCB0X3VlPV5bWzA7MTszNm0gICAgICIgdW5kZXJsaW5lIGVuZAorICAgOnNldCB0X3VzPV5bWzE7MzJtICAgICAgICIgdW5kZXJsaW5lIG1vZGUgc3RhcnQKK1t0aGUgXlsgaXMgYW4gPEVzYz4sIHR5cGUgQ1RSTC1WIDxFc2M+IHRvIGVudGVyIGl0XQorCitGb3IgcmVhbCBjb2xvciB0ZXJtaW5hbHMgdGhlICI6aGlnaGxpZ2h0IiBjb21tYW5kIGNhbiBiZSB1c2VkLgorCitUaGUgZmlsZSAidG9vbHMvVmltMTMyIiBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHB1dCBWaW0gaW4gMTMyCitjb2x1bW4gbW9kZSBvbiBhIHZ0MTAwIGFuZCBsb29rYWxpa2VzLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3Nfdm1zLnR4dCBiL3J1bnRpbWUvZG9jL29zX3Ztcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0YjM1YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29zX3Ztcy50eHQKQEAgLTAsMCArMSw3NzkgQEAKKypvc192bXMudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMTYKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwKKworCisJCQkJCQkJKlZNUyogKnZtcyoKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgcGFydGljdWxhcml0aWVzIGZvciB0aGUgVk1TIHZlcnNpb24gb2YgVmltLgorWW91IGNhbiByZWFjaCB0aGlzIGluZm9ybWF0aW9uIGZpbGUgYnkgdHlwaW5nIDpoZWxwIFZNUyBpbiBWaW0gY29tbWFuZAorcHJvbXB0LgorCisgMS4gR2V0dGluZyBzdGFydGVkCXx2bXMtc3RhcnRlZHwKKyAyLiBEb3dubG9hZCBmaWxlcwl8dm1zLWRvd25sb2FkfAorIDMuIENvbXBpbGluZwkJfHZtcy1jb21waWxpbmd8CisgNC4gUHJvYmxlbXMJCXx2bXMtcHJvYmxlbXN8CisgNS4gRGVwbG95CQl8dm1zLWRlcGxveXwKKyA2LiBQcmFjdGljYWwgdXNhZ2UJfHZtcy11c2FnZXwKKyA3LiBHVUkgbW9kZSBxdWVzdGlvbnMJfHZtcy1ndWl8CisgOC4gVXNlZnVsIG5vdGVzCXx2bXMtbm90ZXN8CisgOS4gVk1TIHJlbGF0ZWQgY2hhbmdlcwl8dm1zLWNoYW5nZXN8CisxMC4gQXV0aG9ycwkJfHZtcy1hdXRob3JzfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gR2V0dGluZyBzdGFydGVkCQkJCQkqdm1zLXN0YXJ0ZWQqCisKK1ZpbSAoVmkgSU1wcm92ZWQpIGlzIGEgdmktY29tcGF0aWJsZSB0ZXh0IGVkaXRvciB0aGF0IHJ1bnMgb24gbmVhcmx5IGV2ZXJ5CitvcGVyYXRpbmcgc3lzdGVtIGtub3duIHRvIGh1bWFuaXR5LiAgTm93IHVzZSBWaW0gb24gT3BlblZNUyB0b28sIGluIGNoYXJhY3Rlcgorb3IgWC9Nb3RpZiBlbnZpcm9ubWVudC4gIEl0IGlzIGZ1bGx5IGZlYXR1cmVkIGFuZCBhYnNvbHV0ZWx5IGNvbXBhdGlibGUgd2l0aAorVmltIG9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMi4gRG93bmxvYWQgZmlsZXMJCQkJCSp2bXMtZG93bmxvYWQqCisKK1lvdSBjYW4gZG93bmxvYWQgdGhlIFZpbSBzb3VyY2UgY29kZSBieSBmdHAgZnJvbSB0aGUgb2ZmaWNpYWwgVmltIHNpdGU6CisJZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS8KK09yIHVzZSBvbmUgb2YgdGhlIG1pcnJvcnM6CisJZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS9NSVJST1JTCisKK1lvdSB3aWxsIG5lZWQgYm90aCB0aGUgVW5peCBhbmQgRXh0cmEgYXJjaGl2ZXMgdG8gYnVpbGQgdmltLmV4ZSBmb3IgVk1TLgorRm9yIHVzaW5nIFZpbSdzIGZ1bGwgcG93ZXIgeW91IHdpbGwgbmVlZCB0aGUgcnVudGltZSBmaWxlcyBhcyB3ZWxsLgorCitZb3UgY2FuIGRvd25sb2FkIHByZWNvbXBpbGVkIGV4ZWN1dGFibGVzIGZyb206CisJaHR0cDovL3d3dy5wb2xhcmhvbWUuY29tL3ZpbS8KKwlmdHA6Ly9mdHAucG9sYXJob21lLmNvbS9wdWIvdmltLworCitUbyB1c2UgdGhlIHByZWNvbXBpbGVkIGJpbmFyeSB2ZXJzaW9uLCB5b3UgbmVlZCBvbmUgb2YgdGhlc2UgYXJjaGl2ZXM6CisKKyAgdmltLVhYLWV4ZS1hbHBoYS1ndWkuemlwICAgICAgQWxwaGEgR1VJL01vdGlmIGV4ZWN1dGFibGVzCisgIHZpbS1YWC1leGUtYWxwaGEtZ3RrLnppcCAgICAgIEFscGhhIEdVSS9HVEsgZXhlY3V0YWJsZXMKKyAgdmltLVhYLWV4ZS1hbHBoYS10ZXJtLnppcCAgICAgQWxwaGEgY29uc29sZSBleGVjdXRhYmxlcworICB2aW0tWFgtZXhlLXZheC1ndWkuemlwCVZBWCBHVUkgZXhlY3V0YWJsZXMKKyAgdmltLVhYLWV4ZS12YXgtdGVybS56aXAgICAgICAgVkFYIGNvbnNvbGUgZXhlY3V0YWJsZXMKKworYW5kIG9mIGNvdXJzZQorICB2aW0tWFgtcnVudGltZS56aXAJCXJ1bnRpbWUgZmlsZXMKKworVGhlIGJpbmFyeSBhcmNoaXZlcyBjb250YWluOiB2aW0uZXhlLCBjdGFncy5leGUsIHh4ZC5leGUsIG1tc192aW0uZXhlIGZpbGVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMy4gQ29tcGlsaW5nCQkJCQkJKnZtcy1jb21waWxpbmcqCisKK1NlZSB0aGUgZmlsZSBbLlNSQ11JTlNUQUxMVk1TLlRYVC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzQuIFByb2JsZW1zCQkJCQkJKnZtcy1wcm9ibGVtcyoKKworVGhlIGNvZGUgaGFzIGJlZW4gdGVzdGVkIHVuZGVyIE9wZW4gVk1TIDYuMiAtIDcuMyBvbiBBbHBoYSBhbmQgVkFYIHBsYXRmb3Jtcword2l0aCB0aGUgREVDQyBjb21waWxlci4gSXQgc2hvdWxkIHdvcmsgd2l0aG91dCBiaWdnZXIgcHJvYmxlbXMuCitJZiBpdCBoYXBwZW5lZCB0aGF0IHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgc29tZSBpbmNsdWRlIGxpYnJhcmllcyB5b3UgY2FuCit0dW5lIHVwIGluIE9TX1ZNU19DT05GLkggZmlsZS4KKworSWYgeW91IGRlY2lkZWQgdG8gYnVpbGQgVmltIHdpdGggK3BlcmwsICtweXRob24sIGV0Yy4gb3B0aW9ucywgZmlyc3QgeW91IG5lZWQKK3RvIGRvd25sb2FkIE9wZW5WTVMgZGlzdHJpYnV0aW9ucyBvZiBQZXJsIGFuZCBQeXRob24uIEJ1aWxkIGFuZCBkZXBsb3kgdGhlCitsaWJyYXJpZXMgYW5kIGNoYW5nZSBhZGVxdWF0ZSBsaW5lcyBpbiBNQUtFX1ZNUy5NTVMgZmlsZS4gVGhlcmUgc2hvdWxkIG5vdCBiZQorcHJvYmxlbSBmcm9tIFZpbSBzaWRlLgorCitOb3RlOiBVbmRlciBWQVggaXQgc2hvdWxkIHdvcmsgd2l0aCBERUMgQyBjb21waWxlciB3aXRob3V0IHByb2JsZW0uIFZBWEMKK2NvbXBpbGVyIGlzIG5vdCBmdWxseSBBTlNJIEMgY29tcGF0aWJsZSBpbiBwcmUtcHJvY2Vzc29yIGRpcmVjdGl2ZXMKK3NlbWFudGljcywgdGhlcmVmb3JlIHlvdSBoYXZlIHRvIHVzZSBhIGNvbnZlcnRlciBwcm9ncmFtIHdoYXQgd2lsbCBkbyB0aGUKK2xpb24gcGFydCBvZiB0aGUgam9iLiBGb3IgZGV0YWlsZWQgaW5zdHJ1Y3Rpb24gcmVhZCBmaWxlIElOU1RBTEx2bXMudHh0CisKK01NU19WSU0uRVhFIGlzIGJ1aWxkaW5nIHRvZ2V0aGVyIHdpdGggVklNLkVYRSwgYnV0IGZvciBYRC5FWEUgeW91IHNob3VsZAorY2hhbmdlIHRvIHN1YmRpcmVjdG9yeSBhbmQgYnVpbGQgaXQgc2VwYXJhdGVseS4KKworQ1RBR1MgaXMgbm90IHBhcnQgb2YgVmltIHNvdXJjZSBkaXN0cmlidXRpb24gYW55IG1vcmUsIGhvd2V2ZXIgdGhlIE9wZW5WTVMKK3NwZWNpZmljIHNvdXJjZSBtaWdodCBjb250YWluIENUQUdTIHNvdXJjZSBmaWxlcyBhcyBpdCBpcyBkZXNjcmliZWQgYWJvdmUuCitZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDVEFHUyBvbiBWTVMgYXQKK2h0dHA6Ly93d3cucG9sYXJob21lLmNvbS9jdGFncy8KKworQWR2YW5jZWQgdXNlcnMgbWF5IHRyeSBzb21lIGFjcm9iYXRpY3MgaW4gRkVBVFVSRS5IIGZpbGUgYWxzby4KKworSXQgaXMgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoICt4Zm9udHNldCAreGltIG9wdGlvbnMgdG9vLCBidXQgdGhlbiB5b3UgaGF2ZQordG8gc2V0IHVwIEdVSSBmb250cyBldGMuIGNvcnJlY3RseS4gU2VlLiA6aGVscCB4aW0gZnJvbSBWaW0gY29tbWFuZCBwcm9tcHQuCisKK1lvdSBtYXkgd2FudCB0byB1c2UgR1VJIHdpdGggR1RLIGljb25zLCB0aGVuIHlvdSBoYXZlIHRvIGRvd25sb2FkIGFuZCBpbnN0YWxsCitHVEsgZm9yIE9wZW5WTVMgb3IgYXQgbGVhc3QgcnVudGltZSBzaGFyZWFibGUgaW1hZ2VzIC0gTElCR1RLIGZyb20KK3BvbGFyaG9tZS5jb20KKworRm9yIG1vcmUgYWR2YW5jZWQgcXVlc3Rpb25zLCBwbGVhc2Ugc2VuZCB5b3VyIHByb2JsZW0gdG8gVmltIG9uIFZNUyBtYWlsaW5nCitsaXN0IDx2aW0tdm1zQHBvbGFyaG9tZS5jb20+CitNb3JlIGFib3V0IHRoZSB2aW0tdm1zIGxpc3QgY2FuIGJlIGZvdW5kIGF0OgoraHR0cDovL3d3dy5wb2xhcmhvbWUuY29tL21haWxtYW4vbGlzdGluZm8vdmltLXZtcworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworNS4gRGVwbG95CQkJCQkJKnZtcy1kZXBsb3kqCisKK1ZpbSB1c2VzIGEgc3BlY2lhbCBkaXJlY3Rvcnkgc3RydWN0dXJlIHRvIGhvbGQgdGhlIGRvY3VtZW50IGFuZCBydW50aW1lIGZpbGVzOgorCisgICB2aW0gKG9yIHdoZXJldmVyKQorICAgIHwtIHRtcAorICAgIHwtIHZpbTU3CisgICAgfC0tLS0tIGRvYworICAgIHwtLS0tLSBzeW50YXgKKyAgICB8LSB2aW02MAorICAgIHwtLS0tLSBkb2MKKyAgICB8LS0tLS0gc3ludGF4CisgICAgfC0gdmltNjEKKyAgICB8LS0tLS0gZG9jCisgICAgfC0tLS0tIHN5bnRheAorICAgIHZpbXJjICAgIChzeXN0ZW0gcmMgZmlsZXMpCisgICAgZ3ZpbXJjCisKK1VzZTogPgorCisJZGVmaW5lL25vbG9nIFZJTQlkZXZpY2U6W3BhdGgudmltXQorCWRlZmluZS9ub2xvZyBWSU1SVU5USU1FIGRldmljZTpbcGF0aC52aW0udmltNjBdCisJZGVmaW5lL25vbG9nIFRNUAlkZXZpY2U6W3BhdGgudG1wXQorCit0byBnZXQgdmltLmV4ZSB0byBmaW5kIGl0cyBkb2N1bWVudCwgZmlsZXR5cGUsIGFuZCBzeW50YXggZmlsZXMsIGFuZCB0bworc3BlY2lmeSBhIGRpcmVjdG9yeSB3aGVyZSB0ZW1wb3JhcnkgZmlsZXMgd2lsbCBiZSBsb2NhdGVkLiBDb3B5IHRoZSAicnVudGltZSIKK3N1YmRpcmVjdG9yeSBvZiB0aGUgdmltIGRpc3RyaWJ1dGlvbiB0byB2aW1ydW50aW1lLgorCitMb2dpY2FscyAkVklNUlVOVElNRSBhbmQgJFRNUCBhcmUgb3B0aW9uYWwuCisKK0lmICRWSU1SVU5USU1FIGlzIG5vdCBzZXQsIFZpbSB3aWxsIGd1ZXNzIGFuZCB0cnkgdG8gc2V0IHVwIGF1dG9tYXRpY2FsbHkuCitSZWFkIG1vcmUgYWJvdXQgYXQgOmhlbHAgcnVudGltZQorCitJZiAkVE1QIGlzIG5vdCBzZXQsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZSBzb21lIGZ1bmN0aW9ucyBhcyBDVEFHUywKK1hYRCwgcHJpbnRpbmcgZXRjLiB0aGF0IHVzZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBub3JtYWwgb3BlcmF0aW9uLgorJFRNUCBkaXJlY3Rvcnkgc2hvdWxkIGJlIHJlYWRhYmxlIGFuZCB3cml0YWJsZSBieSB0aGUgdXNlcihzKS4KK1RoZSBlYXNpZXN0IHdheSB0byBzZXQgdXAgJFRNUCBpcyB0byBkZWZpbmUgbG9naWNhbDogPgorCisJZGVmaW5lL25vbG9nIFRNUCBTWVMkU0NSQVRDSAorb3IgYXM6ID4KKwlkZWZpbmUvbm9sb2cgVE1QIFNZUyRMT0dJTgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworNi4gUHJhY3RpY2FsIHVzYWdlCQkJCQkqdm1zLXVzYWdlKgorCitVc3VhbGx5LCB5b3Ugd2FudCB0byBydW4ganVzdCBvbmUgdmVyc2lvbiBvZiBWaW0gb24geW91ciBzeXN0ZW0sIHRoZXJlZm9yZQoraXQgaXMgZW5vdWdoIHRvIGRlZGljYXRlIG9uZSBkaXJlY3RvcnkgZm9yIFZpbS4KK0NvcHkgYWxsIFZpbSBydW50aW1lIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gdGhlIGRlcGxveW1lbnQgcG9zaXRpb24uCitBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyIExPR0lOLkNPTSAoaW4gU1lTJExPR0lOIGRpcmVjdG9yeSkuCitTZXQgdXAgbG9naWNhbCAkVklNIGFzOiA+CisKKwkkIGRlZmluZSBWSU0gZGV2aWNlOjxwYXRoPgorCitTZXQgdXAgc29tZSBzeW1ib2xzOiA+CisKKwkkICEgdmkgc3RhcnRzIFZpbSBpbiBjaHIuIG1vZGUuCisJJCB2aSptICA6PT0gbWNyIFZJTTpWSU0uRVhFCisKKwkkICFndmkgc3RhcnRzIFZpbSBpbiBHVUkgbW9kZS4KKwkkIGd2KmltIDo9PSBzcGF3bi9ub3dhaXQgbWNyIFZJTTpWSU0uRVhFIC1nCisKK1BsZWFzZSwgY2hlY2sgdGhlIG5vdGVzIGZvciBjdXN0b21pemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHN5bWJvbHMuCisKK1lvdSBtYXkgd2FudCB0byBjcmVhdGUgLnZpbXJjIGFuZCAuZ3ZpbXJjIGZpbGVzIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkKKyhTWVMkTE9HSU4pIHRvIG92ZXJ3cml0ZSBkZWZhdWx0IHNldHRpbmdzLgorCitUaGUgZWFzaWVzdCB3YXkgaXMganVzdCByZW5hbWUgZXhhbXBsZSBmaWxlcy4gWW91IG1heSBsZWF2ZSB0aGUgbWVudSBmaWxlCisoTUVOVS5WSU0pIGFuZCBmaWxlcyB2aW1yYyBhbmQgZ3ZpbXJjIGluIHRoZSBvcmlnaW5hbCAkVklNIGRpcmVjdG9yeS4gSXQgd2lsbAorYmUgZGVmYXVsdCBzZXR1cCBmb3IgYWxsIHVzZXJzLCBhbmQgZm9yIHVzZXJzIGlzIGVub3VnaCBqdXN0IHRvIGhhdmUgdGhlaXIKK293biBhZGRpdGlvbnMgb3IgcmVzZXR0aW5nIGluIGhvbWUgZGlyZWN0b3J5IGluIGZpbGVzIC52aW1yYyBhbmQgLmd2aW1yYy4KK0l0IHNob3VsZCB3b3JrIHdpdGhvdXQgcHJvYmxlbXMuCisKK05vdGU6IFJlbWVtYmVyLCBzeXN0ZW0gcmMgZmlsZXMgKGRlZmF1bHQgZm9yIGFsbCB1c2VycykgZG9lcyBub3QgaGF2ZSBsZWFkaW5nCisiLiIgU28sIHN5c3RlbSByYyBmaWxlcyBhcmU6ID4KKworCSRWSU06dmltcmMKKwkkVklNOmd2aW1yYworCSRWSU06bWVudS52aW0KKworYW5kIHVzZXIncyBjdXN0b21pemVkIHJjIGZpbGVzIGFyZTogPgorCisJc3lzJGxvZ2luOi52aW1yYworCXN5cyRsb2dpbjouZ3ZpbXJjCisKK1lvdSBjYW4gY2hlY2sgdGhhdCBldmVyeXRoaW5nIGlzIG9uIHRoZSByaWdodCBwbGFjZSB3aXRoIHRoZSA6dmVyc2lvbiBjb21tYW5kLgorCitFeGFtcGxlIExPR0lOLkNPTTogPgorCisJJCBkZWZpbmUvbm9sb2cgVklNIFJGMTA6W1VUSUwuVklNXQorCSQgdmkqbSA6PT0gbWNyIFZJTTpWSU0uRVhFCisJJCBndippbTo9PSBzcGF3bi9ub3dhaXQvaW5wdXQ9TkxBMCBtY3IgVklNOlZJTS5FWEUgLWcgLUdFT01FVFJZIDgweDQwCisJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMjIzL3RyYW5zPXRjcGlwCisKK05vdGU6IFRoaXMgc2V0LXVwIHNob3VsZCBiZSBlbm91Z2gsIGlmIHlvdSBhcmUgd29ya2luZyBvbiBzdGFuZGFsb25lIHNlcnZlciBvcgorY2x1c3RlcmVkIGVudmlyb25tZW50LCBidXQgaWYgeW91IHdhbnQgdG8gdXNlIFZpbSBhcyBpbnRlcm5vZGUgZWRpdG9yIGluCitERUNORVQgZW52aXJvbm1lbnQsIGl0IHdpbGwgc2F0aXNmeSB5b3UgYXMgd2VsbC4KK1lvdSBqdXN0IGhhdmUgdG8gZGVmaW5lIHRoZSAid2hvbGUiIHBhdGg6ID4KKworCSQgZGVmaW5lIFZJTSAiPHNlcnZlcl9uYW1lPlsiInVzZXIgcGFzc3dvcmQiIl06OmRldmljZTo8cGF0aD4iCisJJCB2aSptIDo9PSAibWNyIFZJTTpWSU0uRVhFIgorCithcyBmb3IgZXhhbXBsZTogPgorCisJJCBkZWZpbmUgVklNICJQTFVUTzo6UkYxMDpbVVRJTC5WSU1dIgorCSQgZGVmaW5lIFZJTSAiUExVVE8iIlpBWSBteXBhc3MiIjo6UkYxMDpbVVRJTC5WSU1dIiAhIGlmIHBhc3N3ZCByZXF1aXJlZAorCitZb3UgY2FuIGFsc28gdXNlICRWSU1SVU5USU1FIGxvZ2ljYWwgdG8gcG9pbnQgdG8gcHJvcGVyIHZlcnNpb24gb2YgVmltIGlmIHlvdQoraGF2ZSBpbnN0YWxsZWQgbW9yZSB2ZXJzaW9ucyBpbiB0aGUgc2FtZSB0aW1lLiBJZiAkVklNUlVOVElNRSBpcyBub3QgZGVmaW5lZAorVmltIHdpbGwgYm9ycm93IHZhbHVlIGZyb20gJFZJTSBsb2dpY2FsLiBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorJFZJTVJVTlRJTUUgbG9naWNhbCBieSB0eXBpbmcgOmhlbHAgcnVudGltZSBhcyBhIFZpbSBjb21tYW5kLgorCitTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWlnaHQgd2FudCB0byBzZXQgdXAgYSBzeXN0ZW0gd2lkZSBWaW0gaW5zdGFsbGF0aW9uLAordGhlbiBhZGQgdG8gdGhlIFNZUyRTVEFSVFVQOlNZTE9HSUNBTFMuQ09NID4KKworCSQgZGVmaW5lL25vbG9nL3N5cyBWSU0gZGV2aWNlOjxwYXRoPgorCSQgZGVmaW5lL25vbG9nL3N5cyBUTVAgU1lTJFNDUkFUQ0gKKworYW5kIHRvIHRoZSBTWVMkU1RBUlRVUDpTWUxPR0lOLkNPTSA+CisKKwkkIHZpKm0gOj09IG1jciBWSU06VklNLkVYRQorCSQgZ3YqaW06PT0gc3Bhd24vbm93YWl0L2lucHV0PU5MQTAgbWNyIFZJTTpWSU0uRVhFIC1nIC1HRU9NRVRSWSA4MHg0MAorCisKK0l0IHdpbGwgc2V0IHVwIG5vcm1hbCBWaW0gd29yayBlbnZpcm9ubWVudCBmb3IgZXZlcnkgdXNlciBvbiB0aGUgc3lzdGVtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworNy4gR1VJIG1vZGUgcXVlc3Rpb25zCQkJCQkqdm1zLWd1aSoKKworT3BlblZNUyBpbiBhIHJlYWwgbWFpbmZyYW1lIE9TLCB0aGVyZWZvcmUgZXZlbiBpZiBpdCBoYXMgYSBHVUkgY29uc29sZSwgbW9zdCBvZgordGhlIHVzZXJzIGRvZXMgbm90IHVzZSBhIG5hdGl2ZSBYL1dpbmRvdyBlbnZpcm9ubWVudCBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4KK0l0IGlzIG5vdCBwb3NzaWJsZSB0byBzdGFydCBWaW0gaW4gR1VJIG1vZGUgImp1c3QgbGlrZSB0aGF0Ii4gQnV0IGFueWhvdyBpdCBpcworbm90IHRvbyBjb21wbGljYXRlIGVpdGhlci4KKworRmlyc3Qgb2YgYWxsOiB5b3Ugd2lsbCBuZWVkIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBidWlsdCB3aXRoIGVuYWJsZWQgR1VJLgorCitTZWNvbmQ6IHlvdSBuZWVkIHRvIGhhdmUgaW5zdGFsbGVkIERFQ1cvTW90aWYgb24geW91ciBWTVMgc2VydmVyLCBvdGhlcndpc2UKK3lvdSB3aWxsIGdldCBlcnJvcnMgdGhhdCBzb21lIHNoYXJlYWJsZSBsaWJyYXJpZXMgYXJlIG1pc3NpbmcuCisKK1RoaXJkOiBJZiB5b3UgY2hvb3NlIHRvIHJ1biBWaW0gd2l0aCBleHRyYSBmZWF0dXJlIGFzIEdVSS9HVEsgdGhlbiB5b3UgbmVlZAorR1RLIGluc3RhbGxhdGlvbiB0b28gb3IgYXQgbGVhc3QgR1RLIHJ1bnRpbWUgZW52aXJvbm1lbnQgKExJQkdUSyBldGMuKQorCisxKSBJZiB5b3UgYXJlIHdvcmtpbmcgb24gdGhlIFZNUyBYL01vdGlmIGNvbnNvbGU6CisgICBTdGFydCBWaW0gd2l0aCB0aGUgY29tbWFuZDogPgorCisJJCBtYyBkZXZpY2U6PHBhdGg+VklNLkVYRSAtZworPAorICAgb3IgdHlwZSA6Z3VpIGFzIGEgY29tbWFuZCB0byB0aGUgVmltIGNvbW1hbmQgcHJvbXB0LiBGb3IgbW9yZSBpbmZvIDpoZWxwIGd1aQorCisyKSBJZiB5b3UgYXJlIHdvcmtpbmcgb24gb3RoZXIgWC9XaW5kb3cgZW52aXJvbm1lbnQgYXMgVW5peCBvciBzb21lIHJlbW90ZSBYCisgICBWTVMgY29uc29sZS4gU2V0IHVwIGRpc3BsYXkgdG8geW91ciBob3N0IHdpdGg6ID4KKworCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9PHlvdXIgSVAgYWRkcmVzcz4vdHJhbnM9PHRyYW5zcG9ydC1uYW1lPgorPAorICAgYW5kIHN0YXJ0IFZpbSBhcyBpbiBwb2ludCAxLiBZb3UgY2FuIGZpbmQgbW9yZSBoZWxwIGluIFZNUyBkb2N1bWVudGF0aW9uIG9yCisgICB0eXBlOiBoZWxwIHNldCBkaXNwIGluIFZNUyBwcm9tcHQuCisgICBFeGFtcGxlczogPgorCisJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMTU5CQkgISBkZWZhdWx0IHRyYW5zIGlzIERFQ25ldAorCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9MTkyLjE2OC41LjE1OS90cmFucz10Y3BpcCAhIFRDUC9JUCBuZXR3b3JrCisJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMTU5L3RyYW5zPWxvY2FsICEgZGlzcGxheSBvbiB0aGUgc2FtZSBub2RlCisKK05vdGU6IHlvdSBzaG91bGQgZGVmaW5lIGp1c3Qgb25lIG9mIHRoZXNlLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gdHlwZSAkaGVscCBzZXQgZGlzcCBpbiBWTVMgcHJvbXB0LgorCiszKSBBbm90aGVyIGVsZWdhbnQgc29sdXRpb24gaXMgWERNIGlmIHlvdSBoYXZlIGluc3RhbGxlZCBvbiBPcGVuVk1TIGJveC4KKyAgIEl0IGlzIHBvc3NpYmxlIHRvIHdvcmsgZnJvbSBYRE0gY2xpZW50IGFzIGZyb20gR1VJIGNvbnNvbGUuCisKKzQpIElmIHlvdSBhcmUgd29ya2luZyBvbiBNUyBXaW5kb3dzIG9yIG90aGVyIG5vbiBYL1dpbmRvdyBlbnZpcm9ubWVudAorICAgWW91IG5lZWQgdG8gc2V0IHVwIG9uZSBYIHNlcnZlciBhbmQgcnVuIFZpbSBhcyBpbiBwb2ludCAyLgorICAgRm9yIE1TIFdpbmRvd3MgdGhlcmUgYXJlIGF2YWlsYWJsZSBmcmVlIFggc2VydmVycyBhcyBNSVggLCBPbW5pIFggZXRjLgorICAgYXMgd2VsbCBhcyBleGNlbGxlbnQgY29tbWVyY2lhbCBwcm9kdWN0cyBhcyBlWGN1cnNpb24gb3IgUmVmbGVjdGlvblggd2l0aAorICAgYnVpdCBpbiBERUMgc3VwcG9ydC4KKworUGxlYXNlIG5vdGUsIHRoYXQgZXhlY3V0YWJsZXMgd2l0aG91dCBHVUkgYXJlIHNsaWdodGx5IGZhc3RlciBkdXJpbmcgc3RhcnR1cAordGhlbiB3aXRoIGVuYWJsZWQgR1VJIGluIGNoYXJhY3RlciBtb2RlLiBUaGVyZWZvcmUsIGlmIHlvdSBkbyBub3QgdXNlIEdVSQorZmVhdHVyZXMsIGl0IGlzIHdvcnRoIHRvIGNob29zZSBub24gR1VJIGV4ZWN1dGFibGVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworOC4gVXNlZnVsIG5vdGVzCQkJCQkJKnZtcy1ub3RlcyoKKworOC4xIGJhY2tzcGFjZS9kZWxldGUKKzguMiBGaWx0ZXJzCis4LjMgVk1TIGZpbGUgdmVyc2lvbiBudW1iZXJzCis4LjQgRGlyZWN0b3J5IGNvbnZlcnNpb24KKzguNSBSZW1vdGUgaG9zdCBpbnZvY2F0aW9uCis4LjYgVGVybWluYWwgcHJvYmxlbXMKKzguNyBIZXgtZWRpdGluZyBhbmQgb3RoZXIgZXh0ZXJuYWwgdG9vbHMKKzguOCBTb3VyY2luZyB2aW1yYyBhbmQgZ3ZpbXJjCis4LjkgUHJpbnRpbmcgZnJvbSBWaW0KKzguMTAgU2V0dGluZyB1cCB0aGUgc3ltYm9scworOC4xMSBkaWZmIGFuZCBvdGhlciBHTlUgcHJvZ3JhbXMKKzguMTIgZGlmZi1tb2RlCis4LjEzIEFsbG93ICckJyBpbiBDIGtleXdvcmRzCis4LjE0IFZJTVRVVE9SIGZvciBiZWdpbm5lcnMKKworOC4xIGJhY2tzcGFjZS9kZWxldGUKKworVGhlcmUgYXJlIGJhY2tzcGFjZS9kZWxldGUga2V5IGluY29uc2lzdGVuY2llcyB3aXRoIFZNUy4KKzpmaXhkZWwgZG9lc24ndCBkbyB0aGUgdHJpY2ssIGJ1dCB0aGUgc29sdXRpb24gaXM6ID4KKworCTppbm9yZW1hcCBePyBeSAkJIiBmb3IgdGVybWluYWwgbW9kZQorCTppbm9yZW1hcCA8RGVsPiBeSAkiIGZvciBndWkgbW9kZQorCitSZWFkIG1vcmUgaW4gY2g6IDguNiAoVGVybWluYWwgcHJvYmxlbXMpLgorKEJydWNlIEh1bnNha2VyIDxCTkh1bnNha2VyQGNocS5ieXUuZWR1PiBWaW0gNS4zKQorCisKKzguMiBGaWx0ZXJzCisKK1ZpbSBzdXBwb3J0cyBmaWx0ZXJzOyBpZS4gaWYgeW91IGhhdmUgYSBzb3J0IHByb2dyYW0gdGhhdCBjYW4gaGFuZGxlCitpbnB1dC9vdXRwdXQgcmVkaXJlY3Rpb24gbGlrZSBVbml4ICg8aW5maWxlID5vdXRmaWxlKSwgeW91IGNvdWxkIHVzZSA+CisKKwk6bWFwIFxzIDAhJ2Fxc29ydDxDUj4KKworKENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiA8Y2VjQGdyeXBob24uZ3NmYy5uYXNhLmdvdj4gVmltIDUuNCkKKworCis4LjMgVk1TIGZpbGUgdmVyc2lvbiBudW1iZXJzCisKK1ZpbSBpcyBzYXZpbmcgZmlsZXMgaW50byBhIG5ldyBmaWxlIHdpdGggdGhlIG5leHQgaGlnaGVyIGZpbGUgdmVyc2lvbgorbnVtYmVyLCB0cnkgdGhlc2Ugc2V0dGluZ3MuID4KKworCTpzZXQgbm9iYWNrdXAJICAgICAiIGRvZXMgbm90IGNyZWF0ZSAqLipfIGJhY2t1cCBmaWxlcworCTpzZXQgbm93cml0ZWJhY2t1cCAgICIgZG9lcyBub3QgaGF2ZSBhbnkgcHVycG9zZSBvbiBWTVMuIEl0J3MgZGVmYXVsdC4KKworUmVjb3ZlcnkgaXMgd29ya2luZyBwZXJmZWN0IGFzIHdlbGwgZnJvbSB0aGUgZGVmYXVsdCBzd2FwIGZpbGUuCitSZWFkIG1vcmUgd2l0aCA6aGVscCBzd2FwZmlsZQorCisoQ2xhdWRlIE1hcmluaWVyIDxDbGF1ZGVNYXJpbmllckB4d2F2ZXNvbHV0aW9ucy5jb20+IFZpbSA1LjUsIFpvbHRhbiBBcnBhZGZmeQorVmltIDUuNiApCisKKworOC40IERpcmVjdG9yeSBjb252ZXJzaW9uCisKK1ZpbSB3aWxsIGludGVybmFsbHkgY29udmVydCBhbnkgdW5peC1zdHlsZSBwYXRocyBhbmQgZXZlbiBtaXhlZCB1bml4L1ZNUworcGF0aHMgaW50byBWTVMgc3R5bGUgcGF0aHMuIFNvbWUgdHlwaWNhbCBjb252ZXJzaW9ucyByZXNlbWJsZToKKworCS9hYmMvZGVmL2doaQkJLT4gYWJjOltkZWZdZ2hpLgorCS9hYmMvZGVmL2doaS5qCQktPiBhYmM6W2RlZl1naGkuagorCS9hYmMvZGVmL2doaS5qOzIJLT4gYWJjOltkZWZdZ2hpLmo7MgorCS9hYmMvZGVmL2doaS9qa2wvbW5vCS0+IGFiYzpbZGVmLmdoaS5qa2xdbW5vLgorCWFiYzpbZGVmLmdoaV1qa2wvbW5vCS0+IGFiYzpbZGVmLmdoaS5qa2xdbW5vLgorCSAgLi8JCQktPiBjdXJyZW50IGRpcmVjdG9yeQorCSAgLi4vCQkJLT4gcmVsYXRpdmUgcGFyZW50IGRpcmVjdG9yeQorCSAgWy5kZWYuZ2hpXQkJLT4gcmVsYXRpdmUgY2hpbGQgZGlyZWN0b3J5CisJICAgLi9kZWYvZ2hpCQktPiByZWxhdGl2ZSBjaGlsZCBkaXJlY3RvcnkKKworTm90ZTogWW91IG1heSB1c2UgPCw+IGJyYWNrZXRzIGFzIHdlbGwgKGRldmljZTo8cGF0aD5maWxlLmV4dDt2ZXJzaW9uKSBhcworcmYxMDo8dXNlci56YXkud29yaz50ZXN0LmM7MQorCisoRGF2aWQgRWxpbnMgPGRlbGluc0Bmb2xpYWdlLmNvbT4sIEplcm9tZSBMYXVyZXQKKzxKTEFVUkVUQG1haWwuY2hlbS5zdW55c2IuZWR1PiBWaW0gNS42ICkKKworCis4LjUgUmVtb3RlIGhvc3QgaW52b2NhdGlvbgorCitJdCBpcyBwb3NzaWJsZSB0byB1c2UgVmltIGFzIGFuIGludGVybm9kZSBlZGl0b3IuCisxLiBFZGl0IHNvbWUgZmlsZSBmcm9tIHJlbW90ZSBub2RlOiA+CisKKwl2aSAiPHNlcnZlcj4iInVzZXJuYW1lIHBhc3N3ZCIiOjo8ZGV2aWNlPjo8cGF0aD48ZmlsZW5hbWU+Ozx2ZXJzaW9uPiIKKworZXhhbXBsZTogPgorCXZpICJwbHV0byIiemF5IHBhc3N3ZCIiOjpSRjEwOjxVU0VSLlpBWS5XT1JLPlRFU1QuQzsxIgorCitOb3RlOiBzeW50YXggaXMgdmVyeSBpbXBvcnRhbnQsIG90aGVyd2lzZSBWTVMgd2lsbCByZWNvZ25pemUgbW9yZSBwYXJhbWV0ZXJzCitpbnN0ZWFkIG9mIG9uZSAocmVzdWx0aW5nIHdpdGg6IGZpbGUgbm90IGZvdW5kKQorCisyLiAgU2V0IHVwIFZpbSBhcyB5b3VyIGludGVybm9kZSBlZGl0b3IuIElmIFZpbSBpcyBub3QgaW5zdGFsbGVkIG9uIHlvdXIgaG9zdCwKK2p1c3Qgc2V0IHVwIHlvdXIgSVAgYWRkcmVzcywgZnVsbCBWaW0gcGF0aCBpbmNsdWRpbmcgdGhlIHNlcnZlciBuYW1lIGFuZCBydW4KK3RoZSBjb21tYW5kIHByb2NlZHVyZSBiZWxvdzogPgorCisJJCBpZiAocDEgLmVxcy4gIiIpIC5PUi4gKHAyIC5lcXMuICIiKSB0aGVuIGdvdG8gdXNhZ2UKKwkkIHNldCBkaXNwL2NyZWF0ZS9ub2RlPTx5b3VyX0lQX2hlcmU+L3RyYW5zPXRjcGlwCisJJCBkZWZpbmUgIlZJTSAiPHZpbV9zZXJ2ZXI+IiInJ3AxJyAnJ3AyJyIiOjo8ZGV2aWNlPjo8dmltX3BhdGg+IgorCSQgIHZpKm0gOj09ICJtY3IgVklNOlZJTS5FWEUiCisJJCBndippbSA6PT0gInNwYXduL25vd2FpdCBtY3IgVklNOlZJTS5FWEUgLWciCisJJCBnb3RvIGVuZAorCSQgdXNhZ2U6CisJJCB3cml0ZSBzeXMkb3V0cHV0ICIgUGxlYXNlIGVudGVyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcyBhIHBhcmFtZXRlci4iCisJJCB3cml0ZSBzeXMkb3V0cHV0ICIgRXhhbXBsZTogQFNFVFZJTS5DT00gdXNlcm5hbWUgcGFzc3dkIgorCSQgZW5kOgorCitOb3RlOiBOZXZlciB1c2UgaXQgaW4gY2x1c3RlcmVkIGVudmlyb25tZW50ICh5b3UgZG8gbm90IG5lZWQgaXQpLCBhbmQgbG9hZCBjb3VsZAorYmUgdmVyeS12ZXJ5IHNsb3csIGJ1dCBldmVuIGZhc3RlciB0aGVuIGEgbG9jYWwgRW1hY3MuIDotKQorCisoWm9sdGFuIEFycGFkZmZ5LCBWaW0gNS42KQorCisKKzguNiBUZXJtaW5hbCBwcm9ibGVtcworCitJZiB5b3VyIHRlcm1pbmFsIG5hbWUgaXMgbm90IGtub3duIHRvIFZpbSBhbmQgaXQgaXMgdHJ5aW5nIHRvIGZpbmQgdGhlIGRlZmF1bHQKK29uZSB5b3Ugd2lsbCBnZXQgdGhlIGZvbGxvd2luZyBtZXNzYWdlIGR1cmluZyBzdGFydC11cDoKKy0tLQorVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1jYXAKKyd1bmtub3duLXRlcm1pbmFsJyBub3Qga25vd24uIEF2YWlsYWJsZSBidWlsdC1pbiB0ZXJtaW5hbHMgYXJlOgorICAgIGJ1aWx0aW5fZ3VpCisgICAgYnVpbHRpbl9yaXNjb3MKKyAgICBidWlsdGluX2FtaWdhCisgICAgYnVpbHRpbl9iZW9zLWFuc2kKKyAgICBidWlsdGluX2Fuc2kKKyAgICBidWlsdGluX3Z0MzIwCisgICAgYnVpbHRpbl92dDUyCisgICAgYnVpbHRpbl9wY2Fuc2kKKyAgICBidWlsdGluX3dpbjMyCisgICAgYnVpbHRpbl94dGVybQorICAgIGJ1aWx0aW5faXJpcy1hbnNpCisgICAgYnVpbHRpbl9kZWJ1ZworICAgIGJ1aWx0aW5fZHVtYgorZGVmYXVsdGluZyB0byAndnQzMjAnCistLS0KK1RoZSBzb2x1dGlvbiBpcyB0byBkZWZpbmUgZGVmYXVsdCB0ZXJtaW5hbCBuYW1lOiA+CisKKwkkICEgdW5rbm93biB0ZXJtaW5hbCBuYW1lLiBsZXQgdXMgdXNlIHZ0MzIwIG9yIGFuc2kgaW5zdGVhZC4KKwkkICEgTm90ZTogaXQncyBjYXNlIHNlbnNpdGl2ZQorCSQgZGVmaW5lIHRlcm0gInZ0MzIwIgorCitUZXJtaW5hbHMgZnJvbSBWVDEwMCB0byBWVDMyMCAoYXMgVjMwMCwgVlQyMjAsIFZUMjAwICkgZG8gbm90IG5lZWQgYW55IGV4dHJhCitrZXlib2FyZCBtYXBwaW5ncy4gVGhleSBzaG91bGQgd29yayBwZXJmZWN0IGFzIHRoZXkgYXJlLCBpbmNsdWRpbmcgYXJyb3dzLAorSW5zLCBEZWwgYnV0dG9ucyBldGMuIEV4Y2VwdCBCYWNrc3BhY2UgaW4gR1VJIG1vZGUuIFRvIHNvbHZlIGl0LCBhZGQgdG8KKy5ndmltcmM6ID4KKworCWlub3JlbWFwIDxEZWw+IDxCUz4KKworVmltIHdpbGwgYWxzbyByZWNvZ25pemUgdGhhdCB0aGV5IGFyZSBmYXN0IHRlcm1pbmFscy4KKworSWYgeW91IGhhdmUgc29tZSBhbm5veWluZyBsaW5lIGp1bXBpbmcgb24gdGhlIHNjcmVlbiBiZXR3ZWVuIHdpbmRvd3MgYWRkIHRvCit5b3VyIC52aW1yYyBmaWxlOiA+CisKKwlzZXQgdHR5ZmFzdAkiIHNldCBmYXN0IHRlcm1pbmFsCisKK05vdGU6IGlmIHlvdSdyZSB1c2luZyBWaW0gb24gcmVtb3RlIGhvc3Qgb3IgdGhyb3VnaCB2ZXJ5IHNsb3cgY29ubmVjdGlvbiwgaXQncworcmVjb21tZW5kZWQgdG8gYXZvaWQgZmFzdCB0ZXJtaW5hbCBvcHRpb24gd2l0aDogPgorCisJc2V0IG5vdHR5ZmFzdCAgICIgc2V0IHRlcm1pbmFsIHRvIHNsb3cgbW9kZQorCisoWm9sdGFuIEFycGFkZmZ5LCBWaW0gNS42KQorCisKKzguNyBIZXgtZWRpdGluZyBhbmQgb3RoZXIgZXh0ZXJuYWwgdG9vbHMKKworQSB2ZXJ5IGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW4gT3BlblZNUyBhbmQgb3RoZXIgc3lzdGVtcyBpcyB0aGF0IFZNUyB1c2VzCitzcGVjaWFsIGNvbW1hbmRzIHRvIGV4ZWN1dGUgZXhlY3V0YWJsZXM6ID4KKworCVJVTiA8cGF0aD5maWxlbmFtZQorCU1DUiA8cGF0aD5maWxlbmFtZSA8cGFyYW1ldGVycz4KKworT3BlblZNUyB1c2VycyBhbHdheXMgaGF2ZSB0byBiZSBhd2FyZSB0aGF0IHRoZSBWaW0gY29tbWFuZCA6ISAianVzdCIgZHJvcCB0aGVtCit0byBEQ0wgcHJvbXB0LiBUaGlzIGZlYXR1cmUgaXMgcG9zc2libGUgdG8gdXNlIHdpdGhvdXQgYW55IHByb2JsZW0gd2l0aCBhbGwKK0RDTCBjb21tYW5kcywgYnV0IGlmIHdlIHdhbnQgdG8gZXhlY3V0ZSBzb21lIHByb2dyYW0gYXMgWFhELCBDVEFHUywgSlRBR1MgZXRjLgord2UncmUgcnVubmluZyBpbnRvIHRyb3VibGUgaWYgd2UgZm9sbG93aW5nIHRoZSBWaW0gZG9jdW1lbnRhdGlvbiAoc2VlOiBoZWxwCit4eGQpLgorCitTb2x1dGlvbjogRXhlY3V0ZSB3aXRoIHRoZSBNQyBjb21tYW5kIGFuZCBhZGQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS4KK0V4YW1wbGU6IEluc3RlYWQgb2YgOiUheHhkIGNvbW1hbmQgdXNlOiA+CisKKwk6JSFtYyB2aW06eHhkCisKKy4uLiBvciBpbiBnZW5lcmFsOiA+CisJOiFtYyA8cGF0aD5maWxlbmFtZSA8cGFyYW1ldGVycz4KKworTm90ZTogWW91IGNhbiB1c2UgWFhELCBhbmQgQ1RBR1MgZnJvbSBHVUkgbWVudS4KKworVG8gY3VzdG9taXplIGN0YWdzIGl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSBsb2dpY2FsICRDVEFHUyB3aXRoIHN0YW5kYXJkCitwYXJhbWV0ZXJzIGFzOiA+CisKKwlkZWZpbmUvbm9sb2cgQ1RBR1MgIi0tdG90YWxzIC1vIHN5cyRsb2dpbjp0YWdzIgorCitGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlYWQgOmhlbHAgdGFnc2VhcmNoIGFuZCBDVEFHUworZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vY3RhZ3Muc291cmNlZm9yZ2UubmV0L2N0YWdzLmh0bWwuCisKKyhab2x0YW4gQXJwYWRmZnksIFZpbSA1LjYtNzApCisKKworOC44IFNvdXJjaW5nIHZpbXJjIGFuZCBndmltcmMKKworSWYgeW91IHdhbnQgdG8gdXNlIHlvdXIgLnZpbXJjIGFuZCAuZ3ZpbXJjIGZyb20gb3RoZXIgcGxhdGZvcm1zIChlLmcuIFdpbmRvd3MpCit5b3UgY2FuIGdldCBpbiB0cm91YmxlIGlmIHlvdSBmdHAgdGhhdCBmaWxlKHMpOiBWTVMgaGFzIGRpZmZlcmVudCBlbmQtb2YtbGluZQoraW5kaWNhdGlvbi4KK1RoZSBzeW1wdG9tIGlzIHRoYXQgVmlNIGlzIG5vdCBzb3VyY2luZyB5b3VyIC52aW1yYy8uZ3ZpbXJjLCBldmVuIGlmIHlvdSBzYXk6Cis+CisJOnNvIHN5cyRsb2dpbjoudmltcmMKKworT25lIHRyaWNrIGlzIHRvIGNvbXByZXNzIChlLmcuIHppcCkgdGhlIGZpbGVzIG9uIHRoZSBvdGhlciBwbGF0Zm9ybSBhbmQKK3VuY29tcHJlc3MgaXQgb24gVk1TOyBpZiB5b3UgaGF2ZSB0aGUgc2FtZSBzeW1wdG9tLCB0cnkgdG8gY3JlYXRlIHRoZSBmaWxlcword2l0aCBjb3B5LXBhc3RlIChmb3IgdGhpcyB5b3UgbmVlZCBib3RoIG9wLiBzeXN0ZW1zIHJlYWNoYWJsZSBmcm9tIG9uZQorbWFjaGluZSwgZS5nLiBhbiBYdGVybSBvbiBXaW5kb3dzIG9yIHRlbG5ldCB0byBXaW5kb3dzIGZyb20gVk1TKS4KKworKFNhbmRvciBLb3BhbnlpLCA8c2FuZG9yLmtvcGFueWlAbWFpbGJveC5odT4gVmltIDYuMGEpCisKKworOC45IFByaW50aW5nIGZyb20gVmltCisKK1RvIGJlIGFibGUgdG8gcHJpbnQgZnJvbSBWaW0gKHJ1bm5pbmcgaW4gR1VJIG1vZGUpIHVuZGVyIFZNUyB5b3UgaGF2ZSB0byBzZXQKK3VwICRUTVAgbG9naWNhbCB3aGljaCBzaG91bGQgcG9pbnQgdG8gc29tZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBsb2dpY2FsCitTWVMkUFJJTlQgdG8geW91ciBkZWZhdWx0IHByaW50IHF1ZXVlLgorRXhhbXBsZTogPgorCisJJGRlZmluZSBTWVMkUFJJTlQgSFA1QU5TSQorCitZb3UgY2FuIHByaW50IG91dCB3aG9sZSBidWZmZXIgb3IganVzdCB0aGUgbWFya2VkIGFyZWEuCitNb3JlIGluZm8gdW5kZXIgOmhlbHAgaGFyZGNvcHkKKworKFpvbHRhbiBBcnBhZGZmeSwgVmltIDYuMGMpCisKKworOC4xMCBTZXR0aW5nIHVwIHRoZSBzeW1ib2xzCisKK1doZW4gSSB1c2UgR1ZJTSB0aGlzIHdheSBhbmQgcHJlc3MgQ1RSTC1ZIGluIHRoZSBwYXJlbnQgdGVybWluYWwsIGd2aW0gZXhpdHMuCitJIG5vdyB1c2UgYSBkaWZmZXJlbnQgc3ltYm9sIHRoYXQgc2VlbXMgdG8gd29yayBPSyBhbmQgZml4ZXMgdGhlIHByb2JsZW0uCitJIHN1Z2dlc3QgdGhpcyBpbnN0ZWFkOiA+CisKKwkkIEdWKklNOj09U1BBV04vTk9XQUlUL0lOUFVUPU5MQTA6IE1DUiBWSU06VklNLkVYRSAtRyAtR0VPTUVUUlkgODBYNDAKKworVGhlIC9JTlBVVD1OTEEwOiBzZXBhcmF0ZXMgdGhlIHN0YW5kYXJkIGlucHV0IG9mIHRoZSBndmltIHByb2Nlc3MgZnJvbSB0aGUKK3BhcmVudCB0ZXJtaW5hbCwgdG8gYmxvY2sgc2lnbmFscyBmcm9tIHRoZSBwYXJlbnQgd2luZG93LgorV2l0aG91dCB0aGUgLUdFT01FVFJZLCB0aGUgR1ZJTSB3aW5kb3cgc2l6ZSB3aWxsIGJlIG1pbmltYWwgYW5kIHRoZSBtZW51Cit3aWxsIGJlIGNvbmZ1c2VkIGFmdGVyIGEgd2luZG93LXJlc2l6ZS4KKworKENhcmxvIE1la2Vua2FtcCwgQ29lbiBFbmdlbGJhcnRzLCBWaW0gNi4wYWMpCisKKworOC4xMSBkaWZmIGFuZCBvdGhlciBHTlUgcHJvZ3JhbXMKKworRnJvbSA2LjAgZGlmZiBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGltcGxlbWVudGVkLCBidXQgT3BlblZNUyBkb2VzIG5vdCB1c2UKK0dOVS9Vbml4IGxpa2UgZGlmZiB0aGVyZWZvcmUgYnVpbHQgaW4gZGlmZiBkb2VzIG5vdCB3b3JrLgorVGhlcmUgaXMgYSBzaW1wbGUgc29sdXRpb24gdG8gc29sdmUgdGhpcyBhbm9tYWx5LiBJbnN0YWxsIGFuIFVuaXggbGlrZSBkaWZmCithbmQgVmltIHdpbGwgd29yayBwZXJmZWN0IGluIGRpZmYgbW9kZSB0b28uIFlvdSBqdXN0IGhhdmUgdG8gcmVkZWZpbmUgeW91cgorZGlmZiBwcm9ncmFtIGFzOiA+CisKKwlkZWZpbmUgL25vbG9nIGRpZmYgPEdOVV9QQVRIPmRpZmYuZXhlCisKK0Fub3RoZXIsIG1vcmUgc29waGlzdGljYXRlZCBzb2x1dGlvbiBpcyBkZXNjcmliZWQgYmVsb3cgKDguMTIgZGlmZi1tb2RlKQorVGhlcmUgYXJlIHNvbWUgb3RoZXIgcHJvZ3JhbXMgYXMgcGF0Y2gsIG1ha2UgZXRjIHRoYXQgbWF5IGNhdXNlIHNhbWUgcHJvYmxlbXMuCitBdCB3d3cucG9sYXJob21lLmNvbSBpcyBwb3NzaWJsZSB0byBkb3dubG9hZCBhbiBHTlUgcGFja2FnZSBmb3IgQWxwaGEgYW5kIFZBWAorYm94ZXMgdGhhdCBpcyBtZWFudCB0byBzb2x2ZSBHTlUgcHJvYmxlbXMgb24gT3BlblZNUy4KKyggWm9sdGFuIEFycGFkZmZ5LCBWaW0gNi4xKQorCisKKzguMTIgZGlmZi1tb2RlCisKK1ZpbSA2LjAgYW5kIGhpZ2hlciBzdXBwb3J0cyB2aW0gZGlmZi1tb2RlIChTZWUgfG5ldy1kaWZmLW1vZGV8LCB8ZGlmZi1tb2RlfAorYW5kIHwwOC43fCkuIFRoaXMgdXNlcyB0aGUgZXh0ZXJuYWwgcHJvZ3JhbSAnZGlmZicgYW5kIGV4cGVjdHMgYSBVbml4LWxpa2UKK291dHB1dCBmb3JtYXQgZnJvbSBkaWZmLiBUaGUgc3RhbmRhcmQgVk1TIGRpZmYgaGFzIGEgZGlmZmVyZW50IG91dHB1dAorZm9ybWF0LiBUbyB1c2UgdmltIG9uIFZNUyBpbiBkaWZmLW1vZGUsIHlvdSBuZWVkIHRvOgorICAgIDEgSW5zdGFsbCBhIFVuaXgtbGlrZSBkaWZmIHByb2dyYW0sIGUuZy4gR05VIGRpZmYKKyAgICAyIFRlbGwgdmltIHRvIHVzZSB0aGUgVW5peC1saWtlIGRpZmYgZm9yIGRpZmYtbW9kZS4KKworWW91IGNhbiBkb3dubG9hZCBHTlUgZGlmZiBmcm9tIHRoZSBWSU0tVk1TIHdlYnNpdGUsIGl0IGlzIG9uZSBvZiB0aGUgR05VCit0b29scyBpbiBodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vdmltL2ZpbGVzL2dudV90b29scy56aXAuIEkgc3VnZ2VzdCB0bwordW5wYWNrIGl0IGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5ICJHTlUiIGFuZCBjcmVhdGUgYSBsb2dpY2FsIEdOVTogdGhhdAorcG9pbnRzIHRvIHRoYXQgZGlyZWN0b3J5LiBlLmc6ID4KKworICAgREVGSU5FIEdOVSAgICA8RElTSz46WzxESVJFQ1RPUlk+LkJJTi5HTlVdCisKK1lvdSBtYXkgYWxzbyB3YW50IHRvIGRlZmluZSBhIHN5bWJvbCBHRElGRiwgdG8gdXNlIHRoZSBHTlUgZGlmZiBmcm9tIHRoZSBEQ0wKK3Byb21wdDogPgorCisgICBHRElGRiA6PT0gICAgICRHTlU6RElGRi5FWEUKKworTm93IHlvdSBuZWVkIHRvIHRlbGwgdmltIHRvIHVzZSB0aGUgbmV3IGRpZmYgcHJvZ3JhbS4gVGFrZSB0aGUgZXhhbXBsZQorc2V0dGluZ3MgZnJvbSB8ZGlmZi1kaWZmZXhwcnwgYW5kIGNoYW5nZSB0aGUgY2FsbCB0byB0aGUgZXh0ZXJuYWwgZGlmZgorcHJvZ3JhbSB0byB0aGUgbmV3IGRpZmYgb24gVk1TLiBBZGQgdGhpcyB0byB5b3VyIC52aW1yYyBmaWxlOiA+CisKKyAgICAgIiBTZXQgdXAgdmltZGlmZiBvcHRpb25zCisgICAgICAgaWYgdjp2ZXJzaW9uID49IDYwMAorCSIgVXNlIEdOVSBkaWZmIG9uIFZNUworCXNldCBkaWZmZXhwcj1NeURpZmYoKQorCWZ1bmN0aW9uIE15RGlmZigpCisJICAgbGV0IG9wdCA9ICIiCisJICAgaWYgJmRpZmZvcHQgPX4gImljYXNlIgorCSAgICAgbGV0IG9wdCA9IG9wdCAuICItaSAiCisJICAgZW5kaWYKKwkgICBpZiAmZGlmZm9wdCA9fiAiaXdoaXRlIgorCSAgICAgbGV0IG9wdCA9IG9wdCAuICItYiAiCisJICAgZW5kaWYKKwkgICBzaWxlbnQgZXhlY3V0ZSAiIW1jIEdOVTpkaWZmLmV4ZSAtYSAiIC4gb3B0IC4gdjpmbmFtZV9pbiAuICIgIiAuICB2OmZuYW1lX25ldyAuCisJCVwgICIgPiAiIC4gdjpmbmFtZV9vdXQKKwllbmRmdW5jdGlvbgorICAgICAgZW5kaWYKKworWW91IGNhbiBub3cgdXNlIHZpbSBpbiBkaWZmLW1vZGUsIGUuZy4gdG8gY29tcGFyZSB0d28gZmlsZXMgaW4gcmVhZC1vbmx5Cittb2RlOiA+CisKKyAgICAkIFZJTSAtRC9SIDxGSUxFMT4gPEZJTEUyPgorCitZb3UgY2FuIGFsc28gZGVmaW5lIG5ldyBzeW1ib2xzIGZvciB2aW1kaWZmLCBlLmcuOiA+CisKKyAgICAkIFZJTURJRkYgICAgIDo9PSAnVklNJyAtRC9SCisgICAgJCBHVklNRElGRiAgICA6PT0gJ0dWSU0nIC1EL1IKKworWW91IGNhbiBub3cgY29tcGFyZSBmaWxlcyBpbiA0IHdheXM6ID4KKworICAgIDEuIFZNUyAgZGlmZjogICQgRElGRiAgICAgPEZJTEUxPiA8RklMRTI+CisgICAgMi4gR05VICBkaWZmOiAgJCBHRElGRiAgICA8RklMRTE+IDxGSUxFMj4KKyAgICAzLiBWSU0gIGRpZmY6ICAkIFZJTURJRkYgIDxGSUxFMT4gPEZJTEUyPgorICAgIDQuIEdWSU0gZGlmZjogICQgR1ZJTURJRkYgPEZJTEUxPiA8RklMRTI+CisKKyggQ29lbiBFbmdlbGJhcnRzLCBWaW0gNi4xKQorCisKKzguMTMgQWxsb3cgJyQnIGluIEMga2V5d29yZHMKKworREVDIEMgdXNlcyBtYW55IGlkZW50aWZpZXJzIHdpdGggJyQnIGluIHRoZW0uIFRoaXMgaXMgbm90IGFsbG93ZWQgaW4gQU5TSSBDLAorYW5kIHZpbSByZWNvZ25pc2VzIHRoZSAnJCcgYXMgdGhlIGVuZCBvZiB0aGUgaWRlbnRpZmllci4gWW91IGNhbiBjaGFuZ2UgdGhpcword2l0aCB0aGUgfGlza2V5d29yZHxjb21tYW5kLgorQWRkIHRoaXMgY29tbWFuZCB0byB5b3VyIC52aW1yYyBmaWxlOiA+CisKKyAgICBhdXRvY21kIEZpbGVUeXBlIGMsY3BwLGNzICBzZXQgaXNrZXl3b3JkKz0kCisKK1lvdSBjYW4gYWxzbyBjcmVhdGUgdGhlIGZpbGUocykgJFZJTS9GVFBMVUdJTi9DLlZJTSAoYW5kL29yIENQUC5WSU0gYW5kCitDUy5WSU0pIGFuZCBhZGQgdGhpcyBjb21tYW5kOiA+CisKKwlzZXQgaXNrZXl3b3JkKz0kCisKK05vdyB3b3JkLWJhc2VkIGNvbW1hbmRzLCBlLmcuIHRoZSAnKictc2VhcmNoLWNvbW1hbmQgYW5kIHRoZSBDVFJMLV0KK3RhZy1sb29rdXAsIHdvcmsgb24gdGhlIHdob2xlIGlkZW50aWZpZXIuIChDdGFncyBvbiBWTVMgYWxzbyBzdXBwb3J0cyAnJCcgaW4KK0Mga2V5d29yZHMgc2luY2UgY3RhZ3MgdmVyc2lvbiA1LjEuKQorCisoIENvZW4gRW5nZWxiYXJ0cywgVmltIDYuMSkKKworOC4xNCBWSU1UVVRPUiBmb3IgYmVnaW5uZXJzCisKK0l0IGV4aXRzIFZJTVRVVE9SLkNPTSBEQ0wgc2NyaXB0IHRoYXQgY2FuIGhlbHAgVmltIGJlZ2lubmVycyB0byBsZWFybi9tYWtlCitmaXJzdCBzdGVwcyB3aXRoIFZpbSBvbiBPcGVuVk1TLiBEZXBlbmRpbmcgb2YgYmluYXJ5IGRpc3RyaWJ1dGlvbiB5b3UgbWF5IHN0YXJ0CitpdCB3aXRoOiA+CisKKwlAdmltOnZpbXR1dG9yCisKKyhUaG9tYXMuUi5XeWFudCBJSUksIFZpbSA2LjEpCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis5LiBWTVMgcmVsYXRlZCBjaGFuZ2VzCQkJCQkqdm1zLWNoYW5nZXMqCisKK1ZlcnNpb24gNi4zICgyMDA0IE1heSAxMCkKKy0gSW1wcm92ZWQgdm1zX3JlYWQgZnVuY3Rpb24KKy0gQ1RBR1MgdjUuNS40IGluY2x1ZGVkCistIERvY3VtZW50YXRpb24gY29ycmVjdGVkIGFuZCB1cGRhdGVkCisKK1ZlcnNpb24gNi4yICgyMDAzIE1heSA3KQorLSBDb3JyZWN0ZWQgVk1TIHN5c3RlbSBjYWxsIHJlc3VsdHMKKy0gTG93IGxldmVsIGNoYXJhY3RlciBpbnB1dCBpcyByZXdyaXR0ZW4KKy0gQ29ycmVjdGlvbiBpbiB0YWcgYW5kIHF1aWNrZml4IGhhbmRsaW5nCistIEZpcnN0IEdUSyBidWlsZAorLSBNYWtlIGZpbGUgY2hhbmdlcworICAgIC0gR1RLIGZlYXR1cmUgYWRkZWQKKyAgICAtIERlZmluZSBmb3IgT0xEX1ZNUworICAgIC0gT3BlblZNUyB2ZXJzaW9uIDYuMiBvciBvbGRlcgorLSBEb2N1bWVudGF0aW9uIHVwZGF0ZWQgd2l0aCBHVEsgZmVhdHVyZXMKKy0gQ1RBR1MgdjUuNSBpbmNsdWRlZAorLSBWTVMgVklNIHR1dG9yIGNyZWF0ZWQKKworVmVyc2lvbiA2LjEgKDIwMDIgTWFyIDI1KQorLSBUQ0wgaW5pdF90Y2woKSBwcm9ibGVtIGZpeGVkCistIENUQUdTIHY1LjQgaW5jbHVkZWQKKy0gR05VIHRvb2xzIGJpbmFyaWVzIGZvciBPcGVuVk1TCistIE1ha2UgZmlsZSBjaGFuZ2VzCisgICAgLSBQRVJMLCBQWVRIT04gYW5kIFRDTCBzdXBwb3J0IGltcHJvdmVkCisgICAgLSBJbnN0YWxsVk1TLnR4dCBoYXMgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBIT1dUTyBidWlsZAorLSBWTVMvVW5peCBmaWxlIGhhbmRsaW5nIHJld3JpdHRlbgorLSBNaW5vciBjYXN0aW5nIGFuZCBidWcgZml4ZXMKKworVmVyc2lvbiA2LjAgKDIwMDEgU2VwIDI4KQorLSBVbml4IGFuZCBWTVMgY29kZSBoYXMgYmVlbiBtZXJnZWQKKwktIHNlcGFyYXRlZCAicmVhbGx5IiBWTVMgcmVsYXRlZCBjb2RlCisJLSBpbmNsdWRlZCBhbGwgcG9zc2libGUgVW5peCBmdW5jdGlvbmFsaXR5CisJLSBzaW1wbGlmaWVkIG9yIGRlbGV0ZWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKKwktIG1ha2VmaWxlIE1BS0VfVk1TLk1NUyByZXZpZXdlZAorLSBtZW51IGNoYW5nZXMgKGZpeGVkIHByaW50aW5nLCBDVEFHUyBhbmQgWFhEIHVzYWdlKQorLSBmaXhlZCB2YXJpYWJsZSBSTVMgcmVjb3JkIGZvcm1hdCBoYW5kbGluZyBhbm9tYWx5CistIGNvcnJlY3RlZCBzeW50YXgsIGZ0cGx1Z2luIGV0YyBmaWxlcyBsb2FkCistIGNoYW5nZWQgZXhwYW5kX3dpbGRjYXJkcyBhbmQgZXhwYW5kcGF0aCBmdW5jdGlvbnMgdG8gd29yayBtb3JlIGdlbmVyYWwKKy0gY3JlYXRlZCBPU19WTVNfRklMVEVSLkNPTSAtIERFQ0MtPlZBWEMgcHJlLXByb2Nlc3NvciBkaXJlY3RpdmUgY29udmVydAorICBzY3JpcHQuCistIEltcHJvdmVkIGNvZGUncyBWQVhDIGFuZCBuZXcgREVDQyBjb21waWxlcnMgY29tcGF0aWJpbGl0eQorLSBjaGFuZ2VkIHF1aWNrZml4IHBhcmFtZXRlcnM6CisJLSBlcnJvcm1lc3NhZ2UgZm9ybWF0IHRvIHN1aXRlIERFQ0MKKwktIHNlYXJjaCwgbWFrZSBhbmQgb3RoZXIgY29tbWFuZHMgdG8gc3VpdGUgVk1TIHN5c3RlbQorLSB1cGRhdGVkIGFuZCByZW5hbWVkIE1NUyBtYWtlIGZpbGVzIGZvciBWaW0gYW5kIENUQUdTLgorLSBDVEFHUyBoYXMgYmVlbiByZW1vdmVkIGZyb20gc291cmNlIGRpc3RyaWJ1dGlvbiBvZiBWaW0gYnV0IGl0IHdpbGwgcmVtYWluCisgIGluIE9wZW5WTVMgYmluYXJ5IGRpc3RyaWJ1dGlvbnMuCistIHNpbXBsaWZpZWQgYnVpbGQvY29uZmlndXJhdGlvbiBwcm9jZWR1cmUKKy0gY3JlYXRlZCBJTlNUQUxMdm1zLnR4dCAtIGRldGFpbGVkIGNvbXBpbGluZyBpbnN0cnVjdGlvbnMgdW5kZXIgVk1TLgorLSB1cGRhdGVkIHRlc3Qgc2NyaXB0cy4KKworVmVyc2lvbiA1LjggKDIwMDEgSnVuIDEpCistIE9TX1ZNUy5UWFQgdXBkYXRlZCB3aXRoIG5ldyBmZWF0dXJlcy4KKy0gb3RoZXIgbWlub3IgZml4ZXMuCistIGRvY3VtZW50YXRpb24gdXBkYXRlZAorLSB0aGlzIHZlcnNpb24gaGFkIGJlZW4gdGVzdGVkIG11Y2ggbW9yZSB0aGFuIGFueSBvdGhlciBPcGVuVk1TIHZlcnNpb24KKyAgZWFybGllcgorCitWZXJzaW9uIDUuNyAoMjAwMCBKdW4gMjQpCistIE5ldyBDVEFHUyB2NS4wIGluIGRpc3RyaWJ1dGlvbgorLSBEb2N1bWVudGF0aW9uIHVwZGF0ZWQKKworVmVyc2lvbiA1LjYgKDIwMDAgSmFuIDE3KQorLSBWTVMgZmlsZW5hbWUgcmVsYXRlZCBjaGFuZ2VzOgorCS0gdmVyc2lvbiBoYW5kbGluZyAob3BlbiBldmVyeXRoaW5nLCBzYXZlIHRvIG5ldyB2ZXJzaW9uKQorCS0gY29ycmVjdCBmaWxlIGV4dGVuc2lvbiBtYXRjaGluZyBmb3Igc3ludGF4ICh2ZXJzaW9uIHByb2JsZW0pCisJLSBoYW5kbGUgPCw+IGNoYXJhY3RlcnMgYW5kIHBhc3N3b3JkcyBpbiBkaXJlY3RvcnkgZGVmaW5pdGlvbgorCS0gaGFuZGxlIGludGVybm9kZS9yZW1vdGUgaW52b2NhdGlvbiBhbmQgZWRpdGluZyB3aXRoIHBhc3N3b3JkcworCS0gT3BlblZNUyBmaWxlcyB3aWxsIGJlIHRyZWF0ZWQgY2FzZSBpbnNlbnNpdGl2ZSBmcm9tIG5vdworCS0gY29ycmVjdGVkIHJlc3BvbnNlIG9mIGV4cGFuZCgiJTouIikgZXRjIHBhdGggcmVsYXRlZCBmdW5jdGlvbnMKKwkoaW4gb25lIHdvcmQ6IFZNUyBkaXJlY3RvcnkgaGFuZGxpbmcgaW50ZXJuYWxseSkKKy0gdmVyc2lvbiBjb21tYW5kCisJLSBjb3JyZWN0ZWQgKCssLSkgaW5mb3JtYXRpb24gZGF0YQorCS0gYWRkZWQgY29tcGlsZXIgYW5kIE9TIHZlcnNpb24KKwktIGFkZGVkIHVzZXIgYW5kIGhvc3QgaW5mb3JtYXRpb24KKwktIHJlc29sdmluZyAkVklNIGFuZCAkVklNUlVOVElNRSBsb2dpY2FscworLSBWTVMgcG9ydCBpcyBpbiBNQVhfRkVBVCAobWF4aW11bSBmZWF0dXJlcykgY2x1YiB3aXRoIFVuaXgsIFdpbjMyIGFuZCBPUy8yLgorCS0gZW5hYmxlZCBmYXJzaSwgcmlnaHRsZWZ0IGV0Yy4gZmVhdHVyZXMKKwktIHVuZG8gbGV2ZWwgcmFpc2VkIHVwIHRvIDEwMDAKKy0gVXBkYXRlZCBPU19WTVMuTU1TIGZpbGUuCisJLSBtYXhpbXVtIGZlYXR1cmVzIE9OIGlzIGRlZmF1bHQKKwktIFZpbSBpcyBjb21waWxhYmxlIHdpdGggK3BlcmwsICtweXRob24gYW5kICt0Y2wgZmVhdHVyZXMuCisJLSBpbXByb3ZlZCBNTUsgY29tcGF0aWJpbGl0eQorLSBDcmVhdGVkIE1BS0VGSUxFX1ZNUy5NTVMsIG1ha2VmaWxlIGZvciB0ZXN0aW5nIFZpbSBkdXJpbmcgZGV2ZWxvcG1lbnQuCistIERlZmluZWQgREVDIHRlcm1pbmFsIFZUMzIwCisJLSBjb21wYXRpYmlsaXR5IGZvciBWVDMqMCwgVlQyKjAgYW5kIFZUMSowIC0gQU5TSSB0ZXJtaW5hbHMKKwkgIGJhY2t3YXJkcywgYnV0IG5vdCBWVDM0MCBhbmQgbmV3ZXIgd2l0aCBjb2xvdXIgY2FwYWJpbGl0eS4KKwktIFZUMzIwIGlzIGRlZmF1bHQgdGVybWluYWwgZm9yIE9wZW5WTVMKKwktIHRoZXNlIG5ldyB0ZXJtaW5hbHMgYXJlIGFsc28gZmFzdCB0dHlzIChkZWZhdWx0IGZvciBPcGVuVk1TKS4KKwktIGFsbG93ZWQgZGVjX21vdXNlIHR0eW0KKy0gVXBkYXRlZCBmaWxlcyB2aW1yYyBhbmQgZ3ZpbXJjIHdpdGggVk1TIHNwZWNpZmljIHN1Z2dlc3Rpb25zLgorLSBPU19WTVMuVFhUIHVwZGF0ZWQgd2l0aCBuZXcgZmVhdHVyZXMuCisKK1ZlcnNpb24gNS41ICgxOTk5IERlYyAzKQorLSBQb3B1cCBtZW51IGxpbmUgY3Jhc2ggY29ycmVjdGVkLgorLSBIYW5kbGUgZnVsbCBmaWxlIG5hbWVzIHdpdGggdmVyc2lvbiBudW1iZXJzLgorLSBEaXJlY3RvcnkgaGFuZGxpbmcgKENEIGNvbW1hbmQgZXRjLikKKy0gQ29ycmVjdGVkIGZpbGUgbmFtZSBjb252ZXJzaW9uIFZNUyB0byBVbml4IGFuZCB2LnYuCistIENvcnJlY3QgcmVzcG9uc2Ugb2YgZXhwYW5kIHdpbGRjYXJkcworLSBSZWNvdmVyeSBpcyB3b3JraW5nIGZyb20gdGhpcyB2ZXJzaW9uIHVuZGVyIFZNUyBhcyB3ZWxsLgorLSBJbXByb3ZlZCB0ZXJtaW5hbCBhbmQgc2lnbmFsIGhhbmRpbmcuCistIEltcHJvdmVkIE9TX1ZNUy5UWFQKKworVmVyc2lvbiA1LjQgKDE5OTkgU2VwIDkpCistIEN1dCBhbmQgcGFzdGUgbWlzbWF0Y2ggY29ycmVjdGVkLgorLSBNb3RpZiBkaXJlY3RvcmllcyBkdXJpbmcgb3BlbiBhbmQgc2F2ZSBhcmUgY29ycmVjdGVkLgorCitWZXJzaW9uIDUuMyAoMTk5OCBPY3QgMTIpCistIE1pbm9yIGNoYW5nZXMgaW4gdGhlIGNvZGUKKy0gU3RhbmRhcmQgZGlzdHJpYnV0aW9uIHdpdGggK0dVSSBvcHRpb24KKworVmVyc2lvbiA1LjEgKDE5OTggQXByIDIxKQorLSBTeW50YXggYW5kIERFQyBDIGNoYW5nZXMgaW4gdGhlIGNvZGUKKy0gRml4aW5nIHByb2JsZW1zIHdpdGggdGhlIC9kb2Mgc3ViZGlyZWN0b3J5CistIEltcHJvdmUgT1NfVk1TLk1NUworCitWZXJzaW9uIDQuNSAoMTk5NiBEZWMgMTYpCistIEZpcnN0IFZNUyBwb3J0IGJ5IEhlbmsgRWxiZXJzIDxoZW5rQHhzNGFsbC5ubD4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEwLiBBdXRob3JzCQkJCQkJKnZtcy1hdXRob3JzKgorCitPcGVuVk1TIGRvY3VtZW50YXRpb24gYW5kIGV4ZWN1dGFibGVzIGFyZSBtYWludGFpbmVkIGJ5OgorWm9sdGFuIEFycGFkZmZ5IDxhcnBhZGZmeUBwb2xhcmhvbWUuY29tPgorCitUaGlzIGRvY3VtZW50IHVzZXMgcGFydHMgYW5kIHJlbWFya3MgZnJvbSBlYXJsaWVyIGF1dGhvcnMgYW5kIGNvbnRyaWJ1dG9ycworb2YgT1NfVk1TLlRYVDoKKwlDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gPGNlY0BncnlwaG9uLmdzZmMubmFzYS5nb3Y+CisJQnJ1Y2UgSHVuc2FrZXIgPEJOSHVuc2FrZXJAY2hxLmJ5dS5lZHU+CisJU2FuZG9yIEtvcGFueWkgPHNhbmRvci5rb3BhbnlpQG1haWxib3guaHU+CisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc193aW4zMi50eHQgYi9ydW50aW1lL2RvYy9vc193aW4zMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlkNzA5NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29zX3dpbjMyLnR4dApAQCAtMCwwICsxLDMxOSBAQAorKm9zX3dpbjMyLnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwMQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBHZW9yZ2UgUmVpbGx5CisKKworCQkJCQkJKndpbjMyKiAqV2luMzIqICpNUy1XaW5kb3dzKgorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgaWRpb3N5bmNyYXNpZXMgb2YgdGhlIFdpbjMyIHZlcnNpb24gb2YgVmltLgorCitUaGUgV2luMzIgdmVyc2lvbiBvZiBWaW0gd29ya3Mgb24gYm90aCBXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDk1LiAgVGhlcmUgYXJlCitib3RoIGNvbnNvbGUgYW5kIEdVSSB2ZXJzaW9ucy4gIFRoZXJlIGlzIEdVSSB2ZXJzaW9uIGZvciB1c2UgaW4gdGhlIFdpbjMycworc3Vic3lzdGVtIGluIFdpbmRvd3MgMy4xWzFdLiAgWW91IGNhbiBhbHNvIHVzZSB0aGUgMzItYml0IERPUyB2ZXJzaW9uIG9mIFZpbQoraW5zdGVhZC4gIFNlZSB8b3NfbXNkb3MudHh0fC4KKworMS4gS25vd24gcHJvYmxlbXMJCXx3aW4zMi1wcm9ibGVtc3wKKzIuIFN0YXJ0dXAJCQl8d2luMzItc3RhcnR1cHwKKzMuIFJlc3RvcmUgc2NyZWVuIGNvbnRlbnRzCXx3aW4zMi1yZXN0b3JlfAorNC4gVXNpbmcgdGhlIG1vdXNlCQl8d2luMzItbW91c2V8Cis1LiBSdW5uaW5nIHVuZGVyIFdpbmRvd3MgMy4xCXx3aW4zMi13aW4zLjF8Cis2LiBXaW4zMiBtaW5pIEZBUQkJfHdpbjMyLWZhcXwKKworQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgY29tbW9uIFdpbjMyIGFuZCBET1MgaXRlbXM6CitGaWxlIGxvY2F0aW9ucwkJCXxkb3MtbG9jYXRpb25zfAorVXNpbmcgYmFja3NsYXNoZXMJCXxkb3MtYmFja3NsYXNofAorU3RhbmRhcmQgbWFwcGluZ3MJCXxkb3Mtc3RhbmRhcmQtbWFwcGluZ3N8CitTY3JlZW4gb3V0cHV0IGFuZCBjb2xvcnMJfGRvcy1jb2xvcnN8CitGaWxlIGZvcm1hdHMJCQl8ZG9zLWZpbGUtZm9ybWF0c3wKKzpjZCBjb21tYW5kCQkJfGRvcy06Y2R8CitJbnRlcnJ1cHRpbmcJCQl8ZG9zLUNUUkwtQnJlYWt8CitUZW1wIGZpbGVzCQkJfGRvcy10ZW1wLWZpbGVzfAorU2hlbGwgb3B0aW9uIGRlZmF1bHQJCXxkb3Mtc2hlbGx8CisKK1dpbjMyIEdVSQkJCXxndWktdzMyfAorCitDcmVkaXRzOgorVGhlIFdpbjMyIHZlcnNpb24gd2FzIHdyaXR0ZW4gYnkgR2VvcmdlIFYuIFJlaWxseSA8Z2VvcmdlQHJlaWxseS5vcmc+LgorVGhlIG9yaWdpbmFsIFdpbmRvd3MgTlQgcG9ydCB3YXMgZG9uZSBieSBSb2dlciBLbm9iYmUgPFJvZ2VyS0B3b25kZXJ3YXJlLmNvbT4uCitUaGUgR1VJIHZlcnNpb24gd2FzIG1hZGUgYnkgR2VvcmdlIFYuIFJlaWxseSBhbmQgUm9iZXJ0IFdlYmIuCisKK0ZvciBjb21waWxpbmcgc2VlICJzcmMvSU5TVEFMTC5wYyIuCQkJKndpbjMyLWNvbXBpbGluZyoKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBLbm93biBwcm9ibGVtcwkJCQkqd2luZG93czk1KiAqd2luMzItcHJvYmxlbXMqCisKK1RoZXJlIGFyZSBhIGZldyBrbm93biBwcm9ibGVtcyB3aXRoIHJ1bm5pbmcgaW4gYSBjb25zb2xlIG9uIFdpbmRvd3MgOTUuICBBcworZmFyIGFzIHdlIGtub3csIHRoaXMgaXMgdGhlIHNhbWUgaW4gV2luZG93cyA5OCBhbmQgV2luZG93cyBNRS4KKworQ29tbWVudHMgZnJvbSBzb21lYm9keSB3b3JraW5nIGF0IE1pY3Jvc29mdDogIldpbjk1IGNvbnNvbGUgc3VwcG9ydCBoYXMgYWx3YXlzCitiZWVuIGFuZCB3aWxsIGFsd2F5cyBiZSBmbGFreSIuCisxLiAgRGVhZCBrZXkgc3VwcG9ydCBkb2Vzbid0IHdvcmsuCisyLiAgUmVzaXppbmcgdGhlIHdpbmRvdyB3aXRoICI6c2V0IGNvbHVtbnM9bm4gbGluZXM9bm4iIHdvcmtzLCBidXQgZXhlY3V0aW5nCisgICAgZXh0ZXJuYWwgY29tbWFuZHMgTUFZIENBVVNFIFRIRSBTWVNURU0gVE8gSEFORyBPUiBDUkFTSC4KKzMuICBTY3JlZW4gdXBkYXRpbmcgaXMgc2xvdywgdW5sZXNzIHlvdSBjaGFuZ2UgJ2NvbHVtbnMnIG9yICdsaW5lcycgdG8gYQorICAgIG5vbi1ET1MgdmFsdWUuICBCdXQgdGhlbiB0aGUgc2Vjb25kIHByb2JsZW0gYXBwbGllcyEKKworSWYgdGhpcyBib3RoZXJzIHlvdSwgdXNlIHRoZSAzMiBiaXQgTVMtRE9TIHZlcnNpb24gb3IgdGhlIFdpbjMyIEdVSSB2ZXJzaW9uLgorCitXaGVuIGRvaW5nIGZpbGUgbmFtZSBjb21wbGV0aW9uLCBWaW0gYWxzbyBmaW5kcyBtYXRjaGVzIGZvciB0aGUgc2hvcnQgZmlsZQorbmFtZS4gIEJ1dCBWaW0gd2lsbCBzdGlsbCBmaW5kIGFuZCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgbG9uZyBmaWxlIG5hbWUuICBGb3IKK2V4YW1wbGUsIGlmIHlvdSBoYXZlIHRoZSBsb25nIGZpbGUgbmFtZSAidGhpc19pc19hX3Rlc3QiIHdpdGggdGhlIHNob3J0IGZpbGUKK25hbWUgInRoaXNfaX4xIiwgdGhlIGNvbW1hbmQgIjplICoxIiB3aWxsIHN0YXJ0IGVkaXRpbmcgInRoaXNfaXNfYV90ZXN0Ii4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBTdGFydHVwCQkJCQkJKndpbjMyLXN0YXJ0dXAqCisKK0N1cnJlbnQgZGlyZWN0b3J5CQkJCQkqd2luMzItY3VyZGlyKgorCitJZiBWaW0gaXMgc3RhcnRlZCB3aXRoIGEgc2luZ2xlIGZpbGUgbmFtZSBhcmd1bWVudCwgYW5kIGl0IGhhcyBhIGZ1bGwgcGF0aAorKHN0YXJ0cyB3aXRoICJ4OlwiKSwgVmltIGFzc3VtZXMgaXQgd2FzIHN0YXJ0ZWQgZnJvbSB0aGUgZmlsZSBleHBsb3JlciBhbmQKK3dpbGwgc2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byB3aGVyZSB0aGF0IGZpbGUgaXMuICBUbyBhdm9pZCB0aGlzIHdoZW4KK3R5cGluZyBhIGNvbW1hbmQgdG8gc3RhcnQgVmltLCB1c2UgYSBmb3J3YXJkIHNsYXNoIGluc3RlYWQgb2YgYSBiYWNrc2xhc2guCitFeGFtcGxlOiA+CisKKwl2aW0gYzpcdGV4dFxmaWxlc1xmb28udHh0CisKK1dpbGwgY2hhbmdlIHRvIHRoZSAiQzpcdGV4dFxmaWxlcyIgZGlyZWN0b3J5LiA+CisKKwl2aW0gYzovdGV4dFxmaWxlc1xmb28udHh0CisKK1dpbGwgdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworCitUZXJtIG9wdGlvbgkJCQkJCSp3aW4zMi10ZXJtKgorCitUaGUgb25seSBraW5kIG9mIHRlcm1pbmFsIHR5cGUgdGhhdCB0aGUgV2luMzIgdmVyc2lvbiBvZiBWaW0gdW5kZXJzdGFuZHMgaXMKKyJ3aW4zMiIsIHdoaWNoIGlzIGJ1aWx0LWluLiAgSWYgeW91IHNldCAndGVybScgdG8gYW55dGhpbmcgZWxzZSwgeW91IHdpbGwKK3Byb2JhYmx5IGdldCB2ZXJ5IHN0cmFuZ2UgYmVoYXZpb3IgZnJvbSBWaW0uICBUaGVyZWZvcmUgVmltIGRvZXMgbm90IG9idGFpbgordGhlIGRlZmF1bHQgdmFsdWUgb2YgJ3Rlcm0nIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJURVJNIi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBSZXN0b3JlIHNjcmVlbiBjb250ZW50cwkJCQkqd2luMzItcmVzdG9yZSoKKworV2hlbiAncmVzdG9yZXNjcmVlbicgaXMgc2V0ICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIFZpbSB3aWxsIHJlc3RvcmUgdGhlCitvcmlnaW5hbCBjb250ZW50cyBvZiB0aGUgY29uc29sZSB3aGVuIGV4aXRpbmcgb3Igd2hlbiBleGVjdXRpbmcgZXh0ZXJuYWwKK2NvbW1hbmRzLiAgSWYgeW91IGRvbid0IHdhbnQgdGhpcywgdXNlICI6c2V0IG5vcnMiLgl8J3Jlc3RvcmVzY3JlZW4nfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFVzaW5nIHRoZSBtb3VzZQkJCQkJKndpbjMyLW1vdXNlKgorCitUaGUgV2luMzIgdmVyc2lvbiBvZiBWaW0gc3VwcG9ydHMgdXNpbmcgdGhlIG1vdXNlLiAgSWYgeW91IGhhdmUgYSB0d28tYnV0dG9uCittb3VzZSwgdGhlIG1pZGRsZSBidXR0b24gY2FuIGJlIGVtdWxhdGVkIGJ5IHByZXNzaW5nIGJvdGggbGVmdCBhbmQgcmlnaHQKK2J1dHRvbnMgc2ltdWx0YW5lb3VzbHkgLSBidXQgbm90ZSB0aGF0IGluIHRoZSBXaW4zMiBHVUksIGlmIHlvdSBoYXZlIHRoZSByaWdodAorbW91c2UgYnV0dG9uIHBvcC11cCBtZW51IGVuYWJsZWQgKHNlZSAnbW91c2UnKSwgeW91IHNob3VsZCBlcnIgb24gdGhlIHNpZGUgb2YKK3ByZXNzaW5nIHRoZSBsZWZ0IGJ1dHRvbiBmaXJzdC4JCQkJfG1vdXNlLXVzaW5nfAorCitXaGVuIHRoZSBtb3VzZSBkb2Vzbid0IHdvcmssIHRyeSBkaXNhYmxpbmcgdGhlICJRdWljayBFZGl0IE1vZGUiIGZlYXR1cmUgb2YKK3RoZSBjb25zb2xlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFJ1bm5pbmcgdW5kZXIgV2luZG93cyAzLjEJCQkJKndpbjMyLXdpbjMuMSoKKworCQkJCQkJKndpbjMycyogKndpbmRvd3MtMy4xKgorVGhlcmUgaXMgYSBzcGVjaWFsIHZlcnNpb24gb2YgR3ZpbSB0aGF0IHJ1bnMgdW5kZXIgV2luZG93cyAzLjEgYW5kIDMuMTEuICBZb3UKK25lZWQgdGhlIGd2aW0uZXhlIHRoYXQgd2FzIGNvbXBpbGVkIHdpdGggVmlzdWFsIEMrKyA0LjEuCisKK1RvIHJ1biB0aGUgV2luMzIgdmVyc2lvbiB1bmRlciBXaW5kb3dzIDMuMSwgeW91IG5lZWQgdG8gaW5zdGFsbCBXaW4zMnMuICBZb3UKK21pZ2h0IGhhdmUgaXQgYWxyZWFkeSBmcm9tIGFub3RoZXIgV2luMzIgYXBwbGljYXRpb24gd2hpY2ggeW91IGhhdmUgaW5zdGFsbGVkLgorSWYgVmltIGRvZXNuJ3Qgc2VlbSB0byBiZSBydW5uaW5nIHByb3Blcmx5LCBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uOiAxLjMwYy4KK1lvdSBjYW4gZmluZCBpdCBhdDoKKworCWh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20vZG93bmxvYWQvc3VwcG9ydC9tc2xmaWxlcy9wdzExMTguZXhlCisKKyhNaWNyb3NvZnQgbW92ZWQgaXQgYWdhaW4sIHdlIGRvbid0IGtub3cgd2hlcmUgaXQgaXMgbm93IDotKCApLgorCitUaGUgcmVhc29uIGZvciBoYXZpbmcgdHdvIHZlcnNpb25zIG9mIGd2aW0uZXhlIGlzIHRoYXQgdGhlIFdpbjMycyB2ZXJzaW9uIHdhcworY29tcGlsZWQgd2l0aCBWQysrIDQuMS4gIFRoaXMgaXMgdGhlIGxhc3QgdmVyc2lvbiBvZiBWQysrIHRoYXQgc3VwcG9ydHMgV2luMzJzCitwcm9ncmFtcy4gIFZDKysgNS4wIGlzIGJldHRlciwgc28gdGhhdCBvbmUgd2FzIHVzZWQgZm9yIHRoZSBXaW4zMiB2ZXJzaW9uLgorQXBhcnQgZnJvbSB0aGF0LCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHByb2dyYW1zLiAgSWYgeW91IGFyZSBpbiBhCittaXhlZCBlbnZpcm9ubWVudCwgeW91IGNhbiB1c2UgdGhlIGd2aW0uZXhlIGZvciBXaW4zMnMgb24gYm90aC4KKworVGhlIFdpbjMycyB2ZXJzaW9uIHdvcmtzIHRoZSBzYW1lIHdheSBhcyB0aGUgV2luMzIgdmVyc2lvbiB1bmRlciA5NS9OVC4gIFdoZW4KK3J1bm5pbmcgdW5kZXIgV2luMzJzIHRoZSBmb2xsb3dpbmcgZGlmZmVyZW5jZXMgYXBwbHk6CistIFlvdSBjYW5ub3QgdXNlIGxvbmcgZmlsZSBuYW1lcywgYmVjYXVzZSBXaW5kb3dzIDMuMSBkb2Vzbid0IHN1cHBvcnQgdGhlbSEKKy0gV2hlbiBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCwgaXQgZG9lc24ndCByZXR1cm4gYW4gZXhpdCBjb2RlLiAgQWZ0ZXIKKyAgZG9pbmcgIjptYWtlIiB5b3UgaGF2ZSB0byBkbyAiOmNuIiB5b3Vyc2VsZi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBXaW4zMiBtaW5pIEZBUQkJCQkJKndpbjMyLWZhcSoKKworUS4gV2h5IGRvZXMgdGhlIFdpbjMyIHZlcnNpb24gb2YgVmltIHVwZGF0ZSB0aGUgc2NyZWVuIHNvIHNsb3dseSBvbiBXaW5kb3dzIDk1PworQS4gVGhlIHN1cHBvcnQgZm9yIFdpbjMyIGNvbnNvbGUgbW9kZSBhcHBsaWNhdGlvbnMgaXMgdmVyeSBidWdneSBpbiBXaW45NS4KKyAgIEZvciBzb21lIHVua25vd24gcmVhc29uLCB0aGUgc2NyZWVuIHVwZGF0ZXMgdmVyeSBzbG93bHkgd2hlbiBWaW0gaXMgcnVuIGF0CisgICBvbmUgb2YgdGhlIHN0YW5kYXJkIHJlc29sdXRpb25zICg4MHgyNSwgODB4NDMsIG9yIDgweDUwKSBhbmQgdGhlIDE2LWJpdCBET1MKKyAgIHZlcnNpb24gdXBkYXRlcyB0aGUgc2NyZWVuIG11Y2ggbW9yZSBxdWlja2x5IHRoYW4gdGhlIFdpbjMyIHZlcnNpb24uCisgICBIb3dldmVyLCBpZiB0aGUgc2NyZWVuIGlzIHNldCB0byBzb21lIG90aGVyIHJlc29sdXRpb24sIHN1Y2ggYXMgYnkgIjpzZXQKKyAgIGNvbHVtbnM9MTAwIiBvciAiOnNldCBsaW5lcz00MCIsIHNjcmVlbiB1cGRhdGluZyBiZWNvbWVzIGFib3V0IGFzIGZhc3QgYXMKKyAgIGl0IGlzIHdpdGggdGhlIDE2LWJpdCB2ZXJzaW9uLgorCisgICBXQVJOSU5HOiBDaGFuZ2luZyAnY29sdW1ucycgbWF5IG1ha2UgV2luZG93cyA5NSBjcmFzaCB3aGlsZSB1cGRhdGluZyB0aGUKKyAgIHdpbmRvdyAoY29tcGxhaW50cyAtLT4gTWljcm9zb2Z0KS4gIFNpbmNlIHRoaXMgbW9zdGx5IHdvcmtzLCB0aGlzIGhhcyBub3QKKyAgIGJlZW4gZGlzYWJsZWQsIGJ1dCBiZSBjYXJlZnVsIHdpdGggY2hhbmdpbmcgJ2NvbHVtbnMnLgorCisgICBDaGFuZ2luZyB0aGUgc2NyZWVuIHJlc29sdXRpb24gbWFrZXMgdXBkYXRlcyBmYXN0ZXIsIGJ1dCBpdCBicmluZ3MKKyAgIGFkZGl0aW9uYWwgcHJvYmxlbXMuICBFeHRlcm5hbCBjb21tYW5kcyAoZS5nLiwgIjohZGlyIikgY2FuIGNhdXNlIFZpbSB0bworICAgZnJlZXplIHdoZW4gdGhlIHNjcmVlbiBpcyBzZXQgdG8gYSBub24tc3RhbmRhcmQgcmVzb2x1dGlvbiwgcGFydGljdWxhcmx5CisgICB3aGVuICdjb2x1bW5zJyBpcyBub3QgZXF1YWwgdG8gODAuICBJdCBpcyBub3QgcG9zc2libGUgZm9yIFZpbSB0byByZWxpYWJseQorICAgc2V0IHRoZSBzY3JlZW4gcmVzb2x1dGlvbiBiYWNrIHRvIHRoZSB2YWx1ZSBpdCBoYWQgdXBvbiBzdGFydHVwIGJlZm9yZQorICAgcnVubmluZyBleHRlcm5hbCBjb21tYW5kcywgc28gaWYgeW91IGNoYW5nZSB0aGUgbnVtYmVyIG9mICdsaW5lcycgb3IKKyAgICdjb2x1bW5zJywgYmUgdmVyeSwgdmVyeSBjYXJlZnVsLiAgSW4gZmFjdCwgVmltIHdpbGwgbm90IGFsbG93IHlvdSB0bworICAgZXhlY3V0ZSBleHRlcm5hbCBjb21tYW5kcyB3aGVuICdjb2x1bW5zJyBpcyBub3QgZXF1YWwgdG8gODAsIGJlY2F1c2UgaXQgaXMKKyAgIHNvIGxpa2VseSB0byBmcmVlemUgdXAgYWZ0ZXJ3YXJkcy4KKworICAgTm9uZSBvZiB0aGUgYWJvdmUgYXBwbGllcyBvbiBXaW5kb3dzIE5ULiAgU2NyZWVuIHVwZGF0ZXMgYXJlIGZhc3QsIG5vCisgICBtYXR0ZXIgaG93IG1hbnkgJ2xpbmVzJyBvciAnY29sdW1ucycgdGhlIHdpbmRvdyBoYXMsIGFuZCBleHRlcm5hbCBjb21tYW5kcworICAgZG8gbm90IGNhdXNlIFZpbSB0byBmcmVlemUuCisKK1EuIFNvIGlmIHRoZSBXaW4zMiB2ZXJzaW9uIHVwZGF0ZXMgdGhlIHNjcmVlbiBzbyBzbG93bHkgb24gV2luZG93cyA5NSBhbmQgdGhlCisgICAxNi1iaXQgRE9TIHZlcnNpb24gdXBkYXRlcyB0aGUgc2NyZWVuIHF1aWNrbHksIHdoeSB3b3VsZCBJIHdhbnQgdG8gcnVuIHRoZQorICAgV2luMzIgdmVyc2lvbj8KK0EuIEZpcnN0bHksIHRoZSBXaW4zMiB2ZXJzaW9uIGlzbid0IHRoYXQgc2xvdywgZXNwZWNpYWxseSB3aGVuIHRoZSBzY3JlZW4gaXMKKyAgIHNldCB0byBzb21lIG5vbi1zdGFuZGFyZCBudW1iZXIgb2YgJ2xpbmVzJyBvciAnY29sdW1ucycuICBTZWNvbmRseSwgdGhlCisgICAxNi1iaXQgRE9TIHZlcnNpb24gaGFzIHNvbWUgc2V2ZXJlIGxpbWl0YXRpb25zOiBJdCBjYW4ndCBkbyBiaWcgY2hhbmdlcyBhbmQKKyAgIGl0IGRvZXNuJ3Qga25vdyBhYm91dCBsb25nIGZpbGUgbmFtZXMuICBUaGUgV2luMzIgdmVyc2lvbiBkb2Vzbid0IGhhdmUgdGhlc2UKKyAgIGxpbWl0YXRpb25zIGFuZCBpdCdzIGZhc3RlciBvdmVyYWxsICh0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgMzItYml0IERKR1BQCisgICBET1MgdmVyc2lvbiBvZiBWaW0pLiAgVGhlIFdpbjMyIHZlcnNpb24gaXMgc21hcnRlciBhYm91dCBoYW5kbGluZyB0aGUKKyAgIHNjcmVlbiwgdGhlIG1vdXNlLCBhbmQgdGhlIGtleWJvYXJkIHRoYW4gdGhlIERKR1BQIHZlcnNpb24gaXMuCisKK1EuIEFuZCB3aGF0IGFib3V0IHRoZSAxNi1iaXQgRE9TIHZlcnNpb24gdmVyc3VzIHRoZSBXaW4zMiB2ZXJzaW9uIG9uIE5UPworQS4gVGhlcmUgYXJlIG5vIGdvb2QgcmVhc29ucyB0byBydW4gdGhlIDE2LWJpdCBET1MgdmVyc2lvbiBvbiBOVC4gIFRoZSBXaW4zMgorICAgdmVyc2lvbiB1cGRhdGVzIHRoZSBzY3JlZW4ganVzdCBhcyBmYXN0IGFzIHRoZSAxNi1iaXQgdmVyc2lvbiBkb2VzIHdoZW4KKyAgIHJ1bm5pbmcgb24gTlQuICBBbGwgb2YgdGhlIGFib3ZlIGRpc2FkdmFudGFnZXMgYXBwbHkuICBGaW5hbGx5LCBET1MKKyAgIGFwcGxpY2F0aW9ucyBjYW4gdGFrZSBhIGxvbmcgdGltZSB0byBzdGFydCB1cCBhbmQgd2lsbCBydW4gbW9yZSBzbG93bHkuICBPbgorICAgbm9uLUludGVsIE5UIHBsYXRmb3JtcywgdGhlIERPUyB2ZXJzaW9uIGlzIGFsbW9zdCB1bnVzYWJseSBzbG93LCBiZWNhdXNlIGl0CisgICBydW5zIG9uIHRvcCBvZiBhbiA4MHg4NiBlbXVsYXRvci4KKworUS4gSG93IGRvIEkgY2hhbmdlIHRoZSBmb250PworQS4gSW4gdGhlIEdVSSB2ZXJzaW9uLCB5b3UgY2FuIHVzZSB0aGUgJ2d1aWZvbnQnIG9wdGlvbi4KKyAgIEluIHRoZSBjb25zb2xlIHZlcnNpb24sIHlvdSBuZWVkIHRvIHNldCB0aGUgZm9udCBvZiB0aGUgY29uc29sZSBpdHNlbGYuCisgICBZb3UgY2Fubm90IGRvIHRoaXMgZnJvbSB3aXRoaW4gVmltLgorCitRLiBXaGVuIEkgY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBjb25zb2xlIHdpbmRvdyB3aXRoICc6c2V0IGxpbmVzPXh4JyBvcgorICAgc2ltaWxhciwgdGhlIGZvbnQgY2hhbmdlcyEgKFdpbjk1KQorQS4gWW91IGhhdmUgdGhlIGNvbnNvbGUgZm9udCBzZXQgdG8gJ0F1dG8nIGluIFZpbSdzIChvciB5b3VyIE1TLURPUyBwcm9tcHQncykKKyAgIHByb3BlcnRpZXMuIFRoaXMgbWFrZXMgVzk1IGd1ZXNzIChiYWRseSEpIHdoYXQgZm9udCBpcyBiZXN0LiBTZXQgYW4gZXhwbGljaXQKKyAgIGZvbnQgaW5zdGVhZC4KKworUS4gV2h5IGNhbid0IEkgcGFzdGUgaW50byBWaW0gd2hlbiBydW5uaW5nIFdpbmRvd3MgOTU/CitBLiBJbiB0aGUgcHJvcGVydGllcyBkaWFsb2cgYm94IGZvciB0aGUgTVMtRE9TIHdpbmRvdywgZ28gdG8gIk1TLURPUworICAgUHJvbXB0L01pc2MvRmFzdCBwYXN0aW5nIiBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgaXMgTk9UIGNoZWNrZWQuICBZb3Ugc2hvdWxkCisgICBhbHNvIGRvICI6c2V0IHBhc3RlIiBpbiBWaW0gdG8gYXZvaWQgdW5leHBlY3RlZCBlZmZlY3RzLgl8J3Bhc3RlJ3wKKworUS4gSG93IGRvIEkgdHlwZSBkZWFkIGtleXMgb24gV2luZG93cyA5NSwgaW4gdGhlIGNvbnNvbGUgdmVyc2lvbj8KKyAgIChBIGRlYWQga2V5IGlzIGFuIGFjY2VudCBrZXksIHN1Y2ggYXMgYWN1dGUsIGdyYXZlLCBvciB1bWxhdXQsIHRoYXQgZG9lc24ndAorICAgcHJvZHVjZSBhIGNoYXJhY3RlciBieSBpdHNlbGYsIGJ1dCB3aGVuIGZvbGxvd2VkIGJ5IGFub3RoZXIga2V5LCBwcm9kdWNlcworICAgYW4gYWNjZW50ZWQgY2hhcmFjdGVyLCBzdWNoIGFzIGEtYWN1dGUsIGUtZ3JhdmUsIHUtdW1sYXV0LCBuLXRpbGRlLCBhbmQgc28KKyAgIG9uLiAgVmVyeSB1c2VmdWwgZm9yIG1vc3QgRXVyb3BlYW4gbGFuZ3VhZ2VzLiAgRW5nbGlzaC1sYW5ndWFnZSBrZXlib2FyZAorICAgbGF5b3V0cyBkb24ndCB1c2UgZGVhZCBrZXlzLCBhcyBmYXIgYXMgd2Uga25vdy4pCitBLiBZb3UgZG9uJ3QuICBUaGUgY29uc29sZSBtb2RlIGlucHV0IHJvdXRpbmVzIHNpbXBseSBkbyBub3Qgd29yayBjb3JyZWN0bHkgaW4KKyAgIFdpbmRvd3MgOTUsIGFuZCBJIGhhdmUgbm90IGJlZW4gYWJsZSB0byB3b3JrIGFyb3VuZCB0aGVtLiAgSW4gdGhlIHdvcmRzCisgICBvZiBhIHNlbmlvciBkZXZlbG9wZXIgYXQgTWljcm9zb2Z0OgorCVdpbjk1IGNvbnNvbGUgc3VwcG9ydCBoYXMgYWx3YXlzIGJlZW4gYW5kIHdpbGwgYWx3YXlzIGJlIGZsYWt5LgorCisJVGhlIGZsYWtpbmVzcyBpcyB1bmF2b2lkYWJsZSBiZWNhdXNlIHdlIGFyZSBzdHVjayBiZXR3ZWVuIHRoZSB3b3JsZCBvZgorCU1TLURPUyBrZXlib2FyZCBUU1JzIGxpa2UgS0VZQiAod2hpY2ggd2FudHMgdG8gY29vayB0aGUgZGF0YTsKKwlpbXBvcnRhbnQgZm9yIGludGVybmF0aW9uYWwpIGFuZCB0aGUgd29ybGQgb2YgV2luMzIuCisKKwlTbyBrZXlzIHRoYXQgZG9uJ3QgImV4aXN0IiBpbiBNUy1ET1MgbGFuZCAobGlrZSBkZWFkIGtleXMpIGhhdmUgYQorCXZlcnkgdGVudW91cyBleGlzdGVuY2UgaW4gV2luMzIgY29uc29sZSBsYW5kLiAgS2V5cyB0aGF0IGFjdAorCWRpZmZlcmVudGx5IGJldHdlZW4gTVMtRE9TIGxhbmQgYW5kIFdpbjMyIGNvbnNvbGUgbGFuZCAobGlrZQorCWNhcHNsb2NrKSB3aWxsIGFjdCBmbGFreS4KKworCURvbid0IGV2ZW4gX21lbnRpb25fIHRoZSBwcm9ibGVtcyB3aXRoIG11bHRpcGxlIGxhbmd1YWdlIGtleWJvYXJkCisJbGF5b3V0cy4uLgorCisgICBZb3UgbWF5IGJlIGFibGUgdG8gZmFzaGlvbiBzb21lIHNvcnQgb2Ygd29ya2Fyb3VuZCB3aXRoIHRoZSBkaWdyYXBocworICAgbWVjaGFuaXNtLgkJCQkJCQl8ZGlncmFwaHN8CisKKyAgIFRoZSBiZXN0IHNvbHV0aW9uIGlzIHRvIHVzZSB0aGUgV2luMzIgR1VJIHZlcnNpb24gZ3ZpbS5leGUuICBBbHRlcm5hdGl2ZWx5LAorICAgeW91IGNhbiB0cnkgb25lIG9mIHRoZSBET1MgdmVyc2lvbnMgb2YgVmltIHdoZXJlIGRlYWQga2V5cyByZXBvcnRlZGx5IGRvCisgICB3b3JrLgorCitRLiBIb3cgZG8gSSB0eXBlIGRlYWQga2V5cyBvbiBXaW5kb3dzIE5UPworQS4gRGVhZCBrZXlzIHdvcmsgb24gTlQgMy41MS4gIEp1c3QgdHlwZSB0aGVtIGFzIHlvdSB3b3VsZCBpbiBhbnkgb3RoZXIKKyAgIGFwcGxpY2F0aW9uLgorICAgT24gTlQgNC4wLCB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZGVmYXVsdCBsb2NhbGUgKHNldCBpbiB0aGUKKyAgIEtleWJvYXJkIHBhcnQgb2YgdGhlIENvbnRyb2wgUGFuZWwpIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50bHkgYWN0aXZlCisgICBsb2NhbGUuICBPdGhlcndpc2UgdGhlIE5UIGNvZGUgd2lsbCBnZXQgY29uZnVzZWQgYW5kIGNyYXNoISAgVGhpcyBpcyBhIE5UCisgICA0LjAgcHJvYmxlbSwgbm90IHJlYWxseSBhIFZpbSBwcm9ibGVtLgorCitRLiBJJ20gdXNpbmcgVmltIHRvIGVkaXQgYSBzeW1ib2xpY2FsbHkgbGlua2VkIGZpbGUgb24gYSBVbml4IE5GUyBmaWxlIHNlcnZlci4KKyAgIFdoZW4gSSB3cml0ZSB0aGUgZmlsZSwgVmltIGRvZXMgbm90ICJ3cml0ZSB0aHJvdWdoIiB0aGUgc3ltbGluay4gIEluc3RlYWQsCisgICBpdCBkZWxldGVzIHRoZSBzeW1ib2xpYyBsaW5rIGFuZCBjcmVhdGVzIGEgbmV3IGZpbGUgaW4gaXRzIHBsYWNlLiAgV2h5PworQS4gT24gVW5peCwgVmltIGlzIHByZXBhcmVkIGZvciBsaW5rcyAoc3ltYm9saWMgb3IgaGFyZCkuICBBIGJhY2t1cCBjb3B5IG9mCisgICB0aGUgb3JpZ2luYWwgZmlsZSBpcyBtYWRlIGFuZCB0aGVuIHRoZSBvcmlnaW5hbCBmaWxlIGlzIG92ZXJ3cml0dGVuLiAgVGhpcworICAgYXNzdXJlcyB0aGF0IGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBmaWxlIHJlbWFpbiB0aGUgc2FtZS4gIE9uIG5vbi1Vbml4CisgICBzeXN0ZW1zLCB0aGUgb3JpZ2luYWwgZmlsZSBpcyByZW5hbWVkIGFuZCBhIG5ldyBmaWxlIGlzIHdyaXR0ZW4uICBPbmx5IHRoZQorICAgcHJvdGVjdGlvbiBiaXRzIGFyZSBzZXQgbGlrZSB0aGUgb3JpZ2luYWwgZmlsZS4gIEhvd2V2ZXIsIHRoaXMgZG9lc24ndCB3b3JrCisgICBwcm9wZXJseSB3aGVuIHdvcmtpbmcgb24gYW4gTkZTLW1vdW50ZWQgZmlsZSBzeXN0ZW0gd2hlcmUgbGlua3MgYW5kIG90aGVyCisgICB0aGluZ3MgZXhpc3QuICBUaGUgb25seSB3YXkgdG8gZml4IHRoaXMgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBpcyBub3QKKyAgIG1ha2luZyBhIGJhY2t1cCBmaWxlLCBieSAiOnNldCBub2JhY2t1cCBub3dyaXRlYmFja3VwIiAgICAgfCd3cml0ZWJhY2t1cCd8CisKK1EuIEhvdyBkbyBJIGdldCB0byBzZWUgdGhlIG91dHB1dCBvZiAiOm1ha2UiIHdoaWxlIGl0J3MgcnVubmluZz8KK0EuIEJhc2ljYWxseSB3aGF0IHlvdSBuZWVkIGlzIHRvIHB1dCBhIHRlZSBwcm9ncmFtIHRoYXQgd2lsbCBjb3B5IGl0cyBpbnB1dAorICAgKHRoZSBvdXRwdXQgZnJvbSBtYWtlKSB0byBib3RoIHN0ZG91dCBhbmQgdG8gdGhlIGVycm9yZmlsZS4gIFlvdSBjYW4gZmluZCBhCisgICBjb3B5IG9mIHRlZSAoYW5kIGEgbnVtYmVyIG9mIG90aGVyIEdOVSB0b29scyB0b29scykgYXQKKyAgIGh0dHA6Ly9nbnV3aW4zMi5zb3VyY2Vmb3JnZS5uZXQgb3IgaHR0cDovL3VueHV0aWxzLnNvdXJjZWZvcmdlLm5ldAorICAgQWx0ZXJuYXRpdmVseSwgdHJ5IHRoZSBtb3JlIHJlY2VudCBDeWdudXMgdmVyc2lvbiBvZiB0aGUgR05VIHRvb2xzIGF0CisgICBodHRwOi8vd3d3LmN5Z3dpbi5jb20gIE90aGVyIFVuaXgtc3R5bGUgdG9vbHMgZm9yIFdpbjMyIGFyZSBsaXN0ZWQgYXQKKyAgIGh0dHA6Ly9kaXJlY3RvcnkuZ29vZ2xlLmNvbS9Ub3AvQ29tcHV0ZXJzL1NvZnR3YXJlL09wZXJhdGluZ19TeXN0ZW1zL1VuaXgvV2luMzIvCisgICBXaGVuIHlvdSBkbyBnZXQgYSBjb3B5IG9mIHRlZSwgeW91J2xsIG5lZWQgdG8gYWRkID4KKwk6c2V0IHNoZWxscGlwZT1cfFwgdGVlCis8ICB0byB5b3VyIF92aW1yYy4KKworUS4gSSdtIHN0b3JpbmcgZmlsZXMgb24gYSByZW1vdGUgbWFjaGluZSB0aGF0IHdvcmtzIHdpdGggVmlzaW9uRlMsIGFuZCBmaWxlcworICAgZGlzYXBwZWFyIQorQS4gVmlzaW9uRlMgY2FuJ3QgaGFuZGxlIGNlcnRhaW4gZG90ICguKSB0aHJlZSBsZXR0ZXIgZXh0ZW5zaW9uIGZpbGUgbmFtZXMuCisgICBTQ08gZGVjbGFyZXMgdGhpcyBiZWhhdmlvciByZXF1aXJlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCAxNmJpdAorICAgRE9TL1dpbmRvd3MgZW52aXJvbm1lbnRzLiAgVGhlIHR3byBjb21tYW5kcyBiZWxvdyBkZW1vbnN0cmF0ZSB0aGUgYmVoYXZpb3I6Cis+CisJZWNobyBIZWxsbyA+IGZpbGUuYmF0fiAKKwlkaXIgPiBmaWxlLmJhdAorPAorICAgVGhlIHJlc3VsdCBpcyB0aGF0IHRoZSAiZGlyIiBjb21tYW5kIHVwZGF0ZXMgdGhlICJmaWxlLmJhdH4iIGZpbGUsIGluc3RlYWQKKyAgIG9mIGNyZWF0aW5nIGEgbmV3ICJmaWxlLmJhdCIgZmlsZS4gVGhpcyBzYW1lIGJlaGF2aW9yIGlzIGV4aGliaXRlZCBpbiBWaW0KKyAgIHdoZW4gZWRpdGluZyBhbiBleGlzdGluZyBmaWxlIG5hbWVkICJmb28uYmF0IiBiZWNhdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yCisgICBvZiBWaW0gaXMgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhICd+JyBjaGFyYWN0ZXIgYXBwZW5kZWQgdG8gdGhlCisgICBuYW1lLiAgV2hlbiB0aGUgZmlsZSBpcyB3cml0dGVuLCBpdCB3aW5kcyB1cCBiZWluZyBkZWxldGVkLgorCisgICBTb2x1dGlvbjogQWRkIHRoaXMgY29tbWFuZCB0byB5b3VyIF92aW1yYyBmaWxlOiA+CisJOnNldCBiYWNrdXBleHQ9LnRlbXBvcmFyeQorCitRLiBIb3cgZG8gSSBjaGFuZ2UgdGhlIGJsaW5rIHJhdGUgb2YgdGhlIGN1cnNvcj8KK0EuIFlvdSBjYW4ndCEgIFRoaXMgaXMgYSBsaW1pdGF0aW9uIG9mIHRoZSBOVCBjb25zb2xlLiAgTlQgNS4wIGlzIHJlcG9ydGVkIHRvCisgICBiZSBhYmxlIHRvIHNldCB0aGUgYmxpbmsgcmF0ZSBmb3IgYWxsIGNvbnNvbGUgd2luZG93cyBhdCB0aGUgc2FtZSB0aW1lLgorCisJCQkJCQkJKjohc3RhcnQqCitRLiBIb3cgY2FuIEkgcnVuIGFuIGV4dGVybmFsIGNvbW1hbmQgb3IgcHJvZ3JhbSBhc3luY2hyb25vdXNseT8KK0EuIFdoZW4gdXNpbmcgOiEgdG8gcnVuIGFuIGV4dGVybmFsIGNvbW1hbmQsIHlvdSBjYW4gcnVuIGl0IHdpdGggInN0YXJ0IjogPgorCTohc3RhcnQgd2luZmlsZS5leGU8Q1I+Cis8ICBVc2luZyAic3RhcnQiIHN0b3BzIFZpbSBzd2l0Y2hpbmcgdG8gYW5vdGhlciBzY3JlZW4sIG9wZW5pbmcgYSBuZXcgY29uc29sZSwKKyAgIG9yIHdhaXRpbmcgZm9yIHRoZSBwcm9ncmFtIHRvIGNvbXBsZXRlOyBpdCBpbmRpY2F0ZXMgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgYQorICAgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGVmZmVjdCB0aGUgZmlsZXMgeW91IGFyZSBlZGl0aW5nLiAgUHJvZ3JhbXMgYmVndW4KKyAgIHdpdGggOiFzdGFydCBkbyBub3QgZ2V0IHBhc3NlZCBWaW0ncyBvcGVuIGZpbGUgaGFuZGxlcywgd2hpY2ggbWVhbnMgdGhleSBkbworICAgbm90IGhhdmUgdG8gYmUgY2xvc2VkIGJlZm9yZSBWaW0uCisgICBUbyBhdm9pZCB0aGlzIHNwZWNpYWwgdHJlYXRtZW50LCB1c2UgIjohIHN0YXJ0Ii4KKworUS4gSSdtIHVzaW5nIFdpbjMycywgYW5kIHdoZW4gSSB0cnkgdG8gcnVuIGFuIGV4dGVybmFsIGNvbW1hbmQgbGlrZSAibWFrZSIsCisgICBWaW0gZG9lc24ndCB3YWl0IGZvciBpdCB0byBmaW5pc2ghIEhlbHAhCitBLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGEgMzItYml0IGFwcGxpY2F0aW9uIChWaW0pIGNhbid0IGdldCBub3RpZmljYXRpb24gZnJvbQorICAgV2luZG93cyB0aGF0IGEgMTYtYml0IGFwcGxpY2F0aW9uICh5b3VyIERPUyBzZXNzaW9uKSBoYXMgZmluaXNoZWQuIFZpbQorICAgaW5jbHVkZXMgYSB3b3JrLWFyb3VuZCBmb3IgdGhpcywgYnV0IHlvdSBtdXN0IHNldCB1cCB5b3VyIERPUyBjb21tYW5kcyB0bworICAgcnVuIGluIGEgd2luZG93LCBub3QgZnVsbC1zY3JlZW4uIFVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgd2hlbiB5b3UKKyAgIGluc3RhbGwgV2luZG93cyBpcyBmdWxsLXNjcmVlbi4gVG8gY2hhbmdlIHRoaXM6CisgICAxKSBTdGFydCBQSUYgZWRpdG9yIChpbiB0aGUgTWFpbiBwcm9ncmFtIGdyb3VwKQorICAgMikgT3BlbiB0aGUgZmlsZSAiX0RFRkFVTFQuUElGIiBpbiB5b3VyIFdpbmRvd3MgZGlyZWN0b3J5LgorICAgMykgQ2hhbmdlcyB0aGUgZGlzcGxheSBvcHRpb24gZnJvbSAiRnVsbCBTY3JlZW4iIHRvICJXaW5kb3dlZCIuCisgICA0KSBTYXZlIGFuZCBleGl0LgorCisgICBUbyB0ZXN0LCBzdGFydCBWaW0gYW5kIHR5cGUgPgorCTohZGlyIEM6XDxDUj4iLgorPCAgWW91IHNob3VsZCBzZWUgYSBET1MgYm94IHdpbmRvdyBhcHBlYXIgYnJpZWZseSB3aXRoIHRoZSBkaXJlY3RvcnkgbGlzdGluZy4KKworUS4gSSB1c2UgVmltIHVuZGVyIFdpbjMycyBhbmQgTlQuIEluIE5ULCBJIGNhbiBkZWZpbmUgdGhlIGNvbnNvbGUgdG8gZGVmYXVsdCB0bworICAgNTAgbGluZXMsIHNvIHRoYXQgSSBnZXQgYSA4MHg1MCBzaGVsbCB3aGVuIEkgJzpzaCcuIENhbiBJIGRvIHRoZSBzYW1lIGluCisgICBXMy4xeCwgb3IgYW0gSSBzdHVjayB3aXRoIDgweDI1PworQS4gRWRpdCBTWVNURU0uSU5JIGFuZCBhZGQgJ1NjcmVlbkxpbmVzPTUwJyB0byB0aGUgW05vbldpbmRvd3NBcHBdIHNlY3Rpb24uIERPUworICAgcHJvbXB0cyBhbmQgZXh0ZXJuYWwgRE9TIGNvbW1hbmRzIHdpbGwgbm93IHJ1biBpbiBhIDUwLWxpbmUgd2luZG93LgorCisgdmltOnR3PTc4OmZvPXRjcTI6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9wYXR0ZXJuLnR4dCBiL3J1bnRpbWUvZG9jL3BhdHRlcm4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYTVhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9wYXR0ZXJuLnR4dApAQCAtMCwwICsxLDExNDYgQEAKKypwYXR0ZXJuLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitQYXR0ZXJucyBhbmQgc2VhcmNoIGNvbW1hbmRzCQkJCSpwYXR0ZXJuLXNlYXJjaGVzKgorCitUaGUgdmVyeSBiYXNpY3MgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb24gfDAzLjl8IG9mIHRoZSB1c2VyIG1hbnVhbC4gIEEgZmV3IG1vcmUKK2V4cGxhbmF0aW9ucyBhcmUgaW4gY2hhcHRlciAyNyB8dXNyXzI3LnR4dHwuCisKKzEuIFNlYXJjaCBjb21tYW5kcwkJfHNlYXJjaC1jb21tYW5kc3wKKzIuIFRoZSBkZWZpbml0aW9uIG9mIGEgcGF0dGVybgl8c2VhcmNoLXBhdHRlcm58CiszLiBNYWdpYwkJCXwvbWFnaWN8Cis0LiBPdmVydmlldyBvZiBwYXR0ZXJuIGl0ZW1zCXxwYXR0ZXJuLW92ZXJ2aWV3fAorNS4gTXVsdGkgaXRlbXMJCQl8cGF0dGVybi1tdWx0aS1pdGVtc3wKKzYuIE9yZGluYXJ5IGF0b21zCQl8cGF0dGVybi1hdG9tc3wKKzcuIElnbm9yaW5nIGNhc2UgaW4gYSBwYXR0ZXJuCXwvaWdub3JlY2FzZXwKKzguIENvbXBhcmUgd2l0aCBQZXJsIHBhdHRlcm5zCXxwZXJsLXBhdHRlcm5zfAorOS4gSGlnaGxpZ2h0aW5nIG1hdGNoZXMJCXxtYXRjaC1oaWdobGlnaHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gU2VhcmNoIGNvbW1hbmRzCQkJCSpzZWFyY2gtY29tbWFuZHMqICpFNDg2KgorCisJCQkJCQkJKi8qCisve3BhdHRlcm59Wy9dPENSPglTZWFyY2ggZm9yd2FyZCBmb3IgdGhlIFtjb3VudF0ndGggb2NjdXJyZW5jZSBvZgorCQkJe3BhdHRlcm59IHxleGNsdXNpdmV8LgorCisve3BhdHRlcm59L3tvZmZzZXR9PENSPglTZWFyY2ggZm9yd2FyZCBmb3IgdGhlIFtjb3VudF0ndGggb2NjdXJyZW5jZSBvZgorCQkJe3BhdHRlcm59IGFuZCBnbyB8e29mZnNldH18IGxpbmVzIHVwIG9yIGRvd24uCisJCQl8bGluZXdpc2V8LgorCisJCQkJCQkJKi88Q1I+KgorLzxDUj4JCQlTZWFyY2ggZm9yd2FyZCBmb3IgdGhlIFtjb3VudF0ndGggbGF0ZXN0IHVzZWQKKwkJCXBhdHRlcm4gfGxhc3QtcGF0dGVybnwgd2l0aCBsYXRlc3QgdXNlZCB8e29mZnNldH18LgorCisvL3tvZmZzZXR9PENSPgkJU2VhcmNoIGZvcndhcmQgZm9yIHRoZSBbY291bnRdJ3RoIGxhdGVzdCB1c2VkCisJCQlwYXR0ZXJuIHxsYXN0LXBhdHRlcm58IHdpdGggbmV3IHx7b2Zmc2V0fXwuICBJZgorCQkJe29mZnNldH0gaXMgZW1wdHkgbm8gb2Zmc2V0IGlzIHVzZWQuCisKKwkJCQkJCQkqPyoKKz97cGF0dGVybn1bP108Q1I+CVNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIFtjb3VudF0ndGggcHJldmlvdXMKKwkJCW9jY3VycmVuY2Ugb2Yge3BhdHRlcm59IHxleGNsdXNpdmV8LgorCis/e3BhdHRlcm59P3tvZmZzZXR9PENSPglTZWFyY2ggYmFja3dhcmQgZm9yIHRoZSBbY291bnRdJ3RoIHByZXZpb3VzCisJCQlvY2N1cnJlbmNlIG9mIHtwYXR0ZXJufSBhbmQgZ28gfHtvZmZzZXR9fCBsaW5lcyB1cCBvcgorCQkJZG93biB8bGluZXdpc2V8LgorCisJCQkJCQkJKj88Q1I+KgorPzxDUj4JCQlTZWFyY2ggYmFja3dhcmQgZm9yIHRoZSBbY291bnRdJ3RoIGxhdGVzdCB1c2VkCisJCQlwYXR0ZXJuIHxsYXN0LXBhdHRlcm58IHdpdGggbGF0ZXN0IHVzZWQgfHtvZmZzZXR9fC4KKworPz97b2Zmc2V0fTxDUj4JCVNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIFtjb3VudF0ndGggbGF0ZXN0IHVzZWQKKwkJCXBhdHRlcm4gfGxhc3QtcGF0dGVybnwgd2l0aCBuZXcgfHtvZmZzZXR9fC4gIElmCisJCQl7b2Zmc2V0fSBpcyBlbXB0eSBubyBvZmZzZXQgaXMgdXNlZC4KKworCQkJCQkJCSpuKgorbgkJCVJlcGVhdCB0aGUgbGF0ZXN0ICIvIiBvciAiPyIgW2NvdW50XSB0aW1lcy4KKwkJCXxsYXN0LXBhdHRlcm58IHtWaTogbm8gY291bnR9CisKKwkJCQkJCQkqTioKK04JCQlSZXBlYXQgdGhlIGxhdGVzdCAiLyIgb3IgIj8iIFtjb3VudF0gdGltZXMgaW4KKwkJCW9wcG9zaXRlIGRpcmVjdGlvbi4gfGxhc3QtcGF0dGVybnwge1ZpOiBubyBjb3VudH0KKworCQkJCQkJCSpzdGFyKiAqRTM0OCogKkUzNDkqCisqCQkJU2VhcmNoIGZvcndhcmQgZm9yIHRoZSBbY291bnRdJ3RoIG9jY3VycmVuY2Ugb2YgdGhlCisJCQl3b3JkIG5lYXJlc3QgdG8gdGhlIGN1cnNvci4gIFRoZSB3b3JkIHVzZWQgZm9yIHRoZQorCQkJc2VhcmNoIGlzIHRoZSBmaXJzdCBvZjoKKwkJCQkxLiB0aGUga2V5d29yZCB1bmRlciB0aGUgY3Vyc29yIHwnaXNrZXl3b3JkJ3wKKwkJCQkyLiB0aGUgZmlyc3Qga2V5d29yZCBhZnRlciB0aGUgY3Vyc29yLCBpbiB0aGUKKwkJCQkgICBjdXJyZW50IGxpbmUKKwkJCQkzLiB0aGUgbm9uLWJsYW5rIHdvcmQgdW5kZXIgdGhlIGN1cnNvcgorCQkJCTQuIHRoZSBmaXJzdCBub24tYmxhbmsgd29yZCBhZnRlciB0aGUgY3Vyc29yLAorCQkJCSAgIGluIHRoZSBjdXJyZW50IGxpbmUKKwkJCU9ubHkgd2hvbGUga2V5d29yZHMgYXJlIHNlYXJjaGVkIGZvciwgbGlrZSB3aXRoIHRoZQorCQkJY29tbWFuZCAiL1w8a2V5d29yZFw+Ii4gIHxleGNsdXNpdmV8ICB7bm90IGluIFZpfQorCQkJJ2lnbm9yZWNhc2UnIGlzIHVzZWQsICdzbWFydGNhc2UnIGlzIG5vdC4KKworCQkJCQkJCSojKgorIwkJCVNhbWUgYXMgIioiLCBidXQgc2VhcmNoIGJhY2t3YXJkLiAgVGhlIHBvdW5kIHNpZ24KKwkJCShjaGFyYWN0ZXIgMTYzKSBhbHNvIHdvcmtzLiAgSWYgdGhlICIjIiBrZXkgd29ya3MgYXMKKwkJCWJhY2tzcGFjZSwgdHJ5IHVzaW5nICJzdHR5IGVyYXNlIDxCUz4iIGJlZm9yZSBzdGFydGluZworCQkJVmltICg8QlM+IGlzIENUUkwtSCBvciBhIHJlYWwgYmFja3NwYWNlKS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZ3N0YXIqCitnKgkJCUxpa2UgIioiLCBidXQgZG9uJ3QgcHV0ICJcPCIgYW5kICJcPiIgYXJvdW5kIHRoZSB3b3JkLgorCQkJVGhpcyBtYWtlcyB0aGUgc2VhcmNoIGFsc28gZmluZCBtYXRjaGVzIHRoYXQgYXJlIG5vdCBhCisJCQl3aG9sZSB3b3JkLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpnIyoKK2cjCQkJTGlrZSAiIyIsIGJ1dCBkb24ndCBwdXQgIlw8IiBhbmQgIlw+IiBhcm91bmQgdGhlIHdvcmQuCisJCQlUaGlzIG1ha2VzIHRoZSBzZWFyY2ggYWxzbyBmaW5kIG1hdGNoZXMgdGhhdCBhcmUgbm90IGEKKwkJCXdob2xlIHdvcmQuICB7bm90IGluIFZpfQorCisJCQkJCQkJKmdkKgorZ2QJCQlHb3RvIGxvY2FsIERlY2xhcmF0aW9uLiAgV2hlbiB0aGUgY3Vyc29yIGlzIG9uIGEgbG9jYWwKKwkJCXZhcmlhYmxlLCB0aGlzIGNvbW1hbmQgd2lsbCBqdW1wIHRvIGl0cyBkZWNsYXJhdGlvbi4KKwkJCUZpcnN0IFZpbSBzZWFyY2hlcyBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50CisJCQlmdW5jdGlvbiwganVzdCBsaWtlICJbWyIuICBJZiBpdCBpcyBub3QgZm91bmQgdGhlCisJCQlzZWFyY2ggc3RvcHMgaW4gbGluZSAxLiAgSWYgaXQgaXMgZm91bmQsIFZpbSBnb2VzIGJhY2sKKwkJCXVudGlsIGEgYmxhbmsgbGluZSBpcyBmb3VuZC4gIEZyb20gdGhpcyBwb3NpdGlvbiBWaW0KKwkJCXNlYXJjaGVzIGZvciB0aGUga2V5d29yZCB1bmRlciB0aGUgY3Vyc29yLCBsaWtlIHdpdGgKKwkJCSIqIiwgYnV0IGxpbmVzIHRoYXQgbG9vayBsaWtlIGEgY29tbWVudCBhcmUgaWdub3JlZAorCQkJKHNlZSAnY29tbWVudHMnIG9wdGlvbikuCisJCQlOb3RlIHRoYXQgdGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrLCBWaW0gZG9lcyBub3QKKwkJCXJlYWxseSBjaGVjayB0aGUgc3ludGF4LCBpdCBvbmx5IHNlYXJjaGVzIGZvciBhIG1hdGNoCisJCQl3aXRoIHRoZSBrZXl3b3JkLiAgSWYgaW5jbHVkZWQgZmlsZXMgYWxzbyBuZWVkIHRvIGJlCisJCQlzZWFyY2hlZCB1c2UgdGhlIGNvbW1hbmRzIGxpc3RlZCBpbiB8aW5jbHVkZS1zZWFyY2h8LgorCQkJQWZ0ZXIgdGhpcyBjb21tYW5kIHxufCBzZWFyY2hlcyBmb3J3YXJkIGZvciB0aGUgbmV4dAorCQkJbWF0Y2ggKG5vdCBiYWNrd2FyZCkuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKmdEKgorZ0QJCQlHb3RvIGdsb2JhbCBEZWNsYXJhdGlvbi4gIFdoZW4gdGhlIGN1cnNvciBpcyBvbiBhCisJCQlnbG9iYWwgdmFyaWFibGUgdGhhdCBpcyBkZWZpbmVkIGluIHRoZSBmaWxlLCB0aGlzCisJCQljb21tYW5kIHdpbGwganVtcCB0byBpdHMgZGVjbGFyYXRpb24uICBUaGlzIHdvcmtzIGp1c3QKKwkJCWxpa2UgImdkIiwgZXhjZXB0IHRoYXQgdGhlIHNlYXJjaCBmb3IgdGhlIGtleXdvcmQKKwkJCWFsd2F5cyBzdGFydHMgaW4gbGluZSAxLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpDVFJMLUMqCitDVFJMLUMJCQlJbnRlcnJ1cHQgY3VycmVudCAoc2VhcmNoKSBjb21tYW5kLiAgVXNlIENUUkwtQnJlYWsgb24KKwkJCU1TLURPUyB8ZG9zLUNUUkwtQnJlYWt8LgorCQkJSW4gTm9ybWFsIG1vZGUsIGFueSBwZW5kaW5nIGNvbW1hbmQgaXMgYWJvcnRlZC4KKworCQkJCQkJCSo6bm9oKiAqOm5vaGxzZWFyY2gqCis6bm9oW2xzZWFyY2hdCQlTdG9wIHRoZSBoaWdobGlnaHRpbmcgZm9yIHRoZSAnaGxzZWFyY2gnIG9wdGlvbi4gIEl0CisJCQlpcyBhdXRvbWF0aWNhbGx5IHR1cm5lZCBiYWNrIG9uIHdoZW4gdXNpbmcgYSBzZWFyY2gKKwkJCWNvbW1hbmQsIG9yIHNldHRpbmcgdGhlICdobHNlYXJjaCcgb3B0aW9uLgorCQkJVGhpcyBjb21tYW5kIGRvZXNuJ3Qgd29yayBpbiBhbiBhdXRvY29tbWFuZCwgYmVjYXVzZQorCQkJdGhlIGhpZ2hsaWdodGluZyBzdGF0ZSBpcyBzYXZlZCBhbmQgcmVzdG9yZWQgd2hlbgorCQkJZXhlY3V0aW5nIGF1dG9jb21tYW5kcyB8YXV0b2NtZC1zZWFyY2hwYXR8LgorCitXaGlsZSB0eXBpbmcgdGhlIHNlYXJjaCBwYXR0ZXJuIHRoZSBjdXJyZW50IG1hdGNoIHdpbGwgYmUgc2hvd24gaWYgdGhlCisnaW5jc2VhcmNoJyBvcHRpb24gaXMgb24uICBSZW1lbWJlciB0aGF0IHlvdSBzdGlsbCBoYXZlIHRvIGZpbmlzaCB0aGUgc2VhcmNoCitjb21tYW5kIHdpdGggPENSPiB0byBhY3R1YWxseSBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBkaXNwbGF5ZWQgbWF0Y2guICBPcgordXNlIDxFc2M+IHRvIGFiYW5kb24gdGhlIHNlYXJjaC4KKworQWxsIG1hdGNoZXMgZm9yIHRoZSBsYXN0IHVzZWQgc2VhcmNoIHBhdHRlcm4gd2lsbCBiZSBoaWdobGlnaHRlZCBpZiB5b3Ugc2V0Cit0aGUgJ2hsc2VhcmNoJyBvcHRpb24uICBUaGlzIGNhbiBiZSBzdXNwZW5kZWQgd2l0aCB0aGUgfDpub2hsc2VhcmNofCBjb21tYW5kLgorCisJCQkJCSpzZWFyY2gtb2Zmc2V0KiAqe29mZnNldH0qCitUaGVzZSBjb21tYW5kcyBzZWFyY2ggZm9yIHRoZSBzcGVjaWZpZWQgcGF0dGVybi4gIFdpdGggIi8iIGFuZCAiPyIgYW4KK2FkZGl0aW9uYWwgb2Zmc2V0IG1heSBiZSBnaXZlbi4gIFRoZXJlIGFyZSB0d28gdHlwZXMgb2Ygb2Zmc2V0czogbGluZSBvZmZzZXRzCithbmQgY2hhcmFjdGVyIG9mZnNldHMuICB7dGhlIGNoYXJhY3RlciBvZmZzZXRzIGFyZSBub3QgaW4gVml9CisKK1RoZSBvZmZzZXQgZ2l2ZXMgdGhlIGN1cnNvciBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgZm91bmQgbWF0Y2g6CisgICAgW251bV0JW251bV0gbGluZXMgZG93bndhcmRzLCBpbiBjb2x1bW4gMQorICAgICtbbnVtXQlbbnVtXSBsaW5lcyBkb3dud2FyZHMsIGluIGNvbHVtbiAxCisgICAgLVtudW1dCVtudW1dIGxpbmVzIHVwd2FyZHMsIGluIGNvbHVtbiAxCisgICAgZVsrbnVtXQlbbnVtXSBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgZW5kIG9mIHRoZSBtYXRjaAorICAgIGVbLW51bV0JW251bV0gY2hhcmFjdGVycyB0byB0aGUgbGVmdCBvZiB0aGUgZW5kIG9mIHRoZSBtYXRjaAorICAgIHNbK251bV0JW251bV0gY2hhcmFjdGVycyB0byB0aGUgcmlnaHQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaAorICAgIHNbLW51bV0JW251bV0gY2hhcmFjdGVycyB0byB0aGUgbGVmdCBvZiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoCisgICAgYlsrbnVtXQlbbnVtXSBpZGVudGljYWwgdG8gc1srbnVtXSBhYm92ZSAobW5lbW9uaWM6IGJlZ2luKQorICAgIGJbLW51bV0JW251bV0gaWRlbnRpY2FsIHRvIHNbLW51bV0gYWJvdmUgKG1uZW1vbmljOiBiZWdpbikKKworSWYgYSAnLScgb3IgJysnIGlzIGdpdmVuIGJ1dCBbbnVtXSBpcyBvbWl0dGVkLCBhIGNvdW50IG9mIG9uZSB3aWxsIGJlIHVzZWQuCitXaGVuIGluY2x1ZGluZyBhbiBvZmZzZXQgd2l0aCAnZScsIHRoZSBzZWFyY2ggYmVjb21lcyBpbmNsdXNpdmUgKHRoZQorY2hhcmFjdGVyIHRoZSBjdXJzb3IgbGFuZHMgb24gaXMgaW5jbHVkZWQgaW4gb3BlcmF0aW9ucykuCisKK0V4YW1wbGVzOgorCitwYXR0ZXJuCQkJY3Vyc29yIHBvc2l0aW9uCX4KKy90ZXN0LysxCQlvbmUgbGluZSBiZWxvdyAidGVzdCIsIGluIGNvbHVtbiAxCisvdGVzdC9lCQkJb24gdGhlIGxhc3QgdCBvZiAidGVzdCIKKy90ZXN0L3MrMgkJb24gdGhlICdzJyBvZiAidGVzdCIKKy90ZXN0L2ItMwkJdGhyZWUgY2hhcmFjdGVycyBiZWZvcmUgInRlc3QiCisKK0lmIG9uZSBvZiB0aGVzZSBjb21tYW5kcyBpcyB1c2VkIGFmdGVyIGFuIG9wZXJhdG9yLCB0aGUgY2hhcmFjdGVycyBiZXR3ZWVuCit0aGUgY3Vyc29yIHBvc2l0aW9uIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHNlYXJjaCBpcyBhZmZlY3RlZC4gIEhvd2V2ZXIsIGlmIGEKK2xpbmUgb2Zmc2V0IGlzIGdpdmVuLCB0aGUgd2hvbGUgbGluZXMgYmV0d2VlbiB0aGUgdHdvIGN1cnNvciBwb3NpdGlvbnMgYXJlCithZmZlY3RlZC4KKworQW4gZXhhbXBsZSBvZiBob3cgdG8gc2VhcmNoIGZvciBtYXRjaGVzIHdpdGggYSBwYXR0ZXJuIGFuZCBjaGFuZ2UgdGhlIG1hdGNoCit3aXRoIGFub3RoZXIgd29yZDogPgorCS9mb288Q1I+CWZpbmQgImZvbyIKKwljLy9lCQljaGFuZ2UgdW50aWwgZW5kIG9mIG1hdGNoCisJYmFyPEVzYz4JdHlwZSByZXBsYWNlbWVudAorCS8vPENSPgkJZ28gdG8gc3RhcnQgb2YgbmV4dCBtYXRjaAorCWMvL2UJCWNoYW5nZSB1bnRpbCBlbmQgb2YgbWF0Y2gKKwliZWVwPEVzYz4JdHlwZSBhbm90aGVyIHJlcGxhY2VtZW50CisJCQlldGMuCis8CisJCQkJCQkJKi8vOyogKkUzODYqCitBIHZlcnkgc3BlY2lhbCBvZmZzZXQgaXMgJzsnIGZvbGxvd2VkIGJ5IGFub3RoZXIgc2VhcmNoIGNvbW1hbmQuICBGb3IgZXhhbXBsZTogPgorCisgICAvdGVzdCAxLzsvdGVzdAorICAgL3Rlc3QuKi8rMTs/aW5nPworCitUaGUgZmlyc3Qgb25lIGZpcnN0IGZpbmRzIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgInRlc3QgMSIsIGFuZCB0aGVuIHRoZSBmaXJzdAorb2NjdXJyZW5jZSBvZiAidGVzdCIgYWZ0ZXIgdGhhdC4KKworVGhpcyBpcyBsaWtlIGV4ZWN1dGluZyB0d28gc2VhcmNoIGNvbW1hbmRzIGFmdGVyIGVhY2ggb3RoZXIsIGV4Y2VwdCB0aGF0OgorLSBJdCBjYW4gYmUgdXNlZCBhcyBhIHNpbmdsZSBtb3Rpb24gY29tbWFuZCBhZnRlciBhbiBvcGVyYXRvci4KKy0gVGhlIGRpcmVjdGlvbiBmb3IgYSBmb2xsb3dpbmcgIm4iIG9yICJOIiBjb21tYW5kIGNvbWVzIGZyb20gdGhlIGZpcnN0CisgIHNlYXJjaCBjb21tYW5kLgorLSBXaGVuIGFuIGVycm9yIG9jY3VycyB0aGUgY3Vyc29yIGlzIG5vdCBtb3ZlZCBhdCBhbGwuCisKKwkJCQkJCQkqbGFzdC1wYXR0ZXJuKgorVGhlIGxhc3QgdXNlZCBwYXR0ZXJuIGFuZCBvZmZzZXQgYXJlIHJlbWVtYmVyZWQuICBUaGV5IGNhbiBiZSB1c2VkIHRvIHJlcGVhdAordGhlIHNlYXJjaCwgcG9zc2libHkgaW4gYW5vdGhlciBkaXJlY3Rpb24gb3Igd2l0aCBhbm90aGVyIGNvdW50LiAgTm90ZSB0aGF0Cit0d28gcGF0dGVybnMgYXJlIHJlbWVtYmVyZWQ6IE9uZSBmb3IgJ25vcm1hbCcgc2VhcmNoIGNvbW1hbmRzIGFuZCBvbmUgZm9yIHRoZQorc3Vic3RpdHV0ZSBjb21tYW5kICI6cyIuICBFYWNoIHRpbWUgYW4gZW1wdHkgcGF0dGVybiBpcyBnaXZlbiwgdGhlIHByZXZpb3VzbHkKK3VzZWQgcGF0dGVybiBpcyB1c2VkLgorCitUaGUgJ21hZ2ljJyBvcHRpb24gc3RpY2tzIHdpdGggdGhlIGxhc3QgdXNlZCBwYXR0ZXJuLiAgSWYgeW91IGNoYW5nZSAnbWFnaWMnLAordGhpcyB3aWxsIG5vdCBjaGFuZ2UgaG93IHRoZSBsYXN0IHVzZWQgcGF0dGVybiB3aWxsIGJlIGludGVycHJldGVkLgorVGhlICdpZ25vcmVjYXNlJyBvcHRpb24gZG9lcyBub3QgZG8gdGhpcy4gIFdoZW4gJ2lnbm9yZWNhc2UnIGlzIGNoYW5nZWQsIGl0Cit3aWxsIHJlc3VsdCBpbiB0aGUgcGF0dGVybiB0byBtYXRjaCBvdGhlciB0ZXh0LgorCitBbGwgbWF0Y2hlcyBmb3IgdGhlIGxhc3QgdXNlZCBzZWFyY2ggcGF0dGVybiB3aWxsIGJlIGhpZ2hsaWdodGVkIGlmIHlvdSBzZXQKK3RoZSAnaGxzZWFyY2gnIG9wdGlvbi4KKworVG8gY2xlYXIgdGhlIGxhc3QgdXNlZCBzZWFyY2ggcGF0dGVybjogPgorCTpsZXQgQC8gPSAiIgorVGhpcyB3aWxsIG5vdCBzZXQgdGhlIHBhdHRlcm4gdG8gYW4gZW1wdHkgc3RyaW5nLCBiZWNhdXNlIHRoYXQgd291bGQgbWF0Y2gKK2V2ZXJ5d2hlcmUuICBUaGUgcGF0dGVybiBpcyByZWFsbHkgY2xlYXJlZCwgbGlrZSB3aGVuIHN0YXJ0aW5nIFZpbS4KKworVGhlIHNlYXJjaCB1c3VhbCBza2lwcyBtYXRjaGVzIHRoYXQgZG9uJ3QgbW92ZSB0aGUgY3Vyc29yLiAgV2hldGhlciB0aGUgbmV4dAorbWF0Y2ggaXMgZm91bmQgYXQgdGhlIG5leHQgY2hhcmFjdGVyIG9yIGFmdGVyIHRoZSBza2lwcGVkIG1hdGNoIGRlcGVuZHMgb24gdGhlCisnYycgZmxhZyBpbiAnY3BvcHRpb25zJy4gIFNlZSB8Y3BvLWN8LgorCSAgIHdpdGggJ2MnIGZsYWc6ICAgIi8uLi4iIGFkdmFuY2VzIDEgdG8gMyBjaGFyYWN0ZXJzCisJd2l0aG91dCAnYycgZmxhZzogICAiLy4uLiIgYWR2YW5jZXMgMSBjaGFyYWN0ZXIKK1RoZSB1bnByZWRpY3RhYmlsaXR5IHdpdGggdGhlICdjJyBmbGFnIGlzIGNhdXNlZCBieSBzdGFydGluZyB0aGUgc2VhcmNoIGluIHRoZQorZmlyc3QgY29sdW1uLCBza2lwcGluZyBtYXRjaGVzIHVudGlsIG9uZSBpcyBmb3VuZCBwYXN0IHRoZSBjdXJzb3IgcG9zaXRpb24uCisKK0luIFZpIHRoZSAiOnRhZyIgY29tbWFuZCBzZXRzIHRoZSBsYXN0IHNlYXJjaCBwYXR0ZXJuIHdoZW4gdGhlIHRhZyBpcyBzZWFyY2hlZAorZm9yLiAgSW4gVmltIHRoaXMgaXMgbm90IGRvbmUsIHRoZSBwcmV2aW91cyBzZWFyY2ggcGF0dGVybiBpcyBzdGlsbCByZW1lbWJlcmVkLAordW5sZXNzIHRoZSAndCcgZmxhZyBpcyBwcmVzZW50IGluICdjcG9wdGlvbnMnLiAgVGhlIHNlYXJjaCBwYXR0ZXJuIGlzIGFsd2F5cworcHV0IGluIHRoZSBzZWFyY2ggaGlzdG9yeS4KKworSWYgdGhlICd3cmFwc2Nhbicgb3B0aW9uIGlzIG9uICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIHNlYXJjaGVzIHdyYXAgYXJvdW5kCit0aGUgZW5kIG9mIHRoZSBidWZmZXIuICBJZiAnd3JhcHNjYW4nIGlzIG5vdCBzZXQsIHRoZSBiYWNrd2FyZCBzZWFyY2ggc3RvcHMKK2F0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBmb3J3YXJkIHNlYXJjaCBzdG9wcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICBJZgorJ3dyYXBzY2FuJyBpcyBzZXQgYW5kIHRoZSBwYXR0ZXJuIHdhcyBub3QgZm91bmQgdGhlIGVycm9yIG1lc3NhZ2UgInBhdHRlcm4KK25vdCBmb3VuZCIgaXMgZ2l2ZW4sIGFuZCB0aGUgY3Vyc29yIHdpbGwgbm90IGJlIG1vdmVkLiAgSWYgJ3dyYXBzY2FuJyBpcyBub3QKK3NldCB0aGUgbWVzc2FnZSBiZWNvbWVzICJzZWFyY2ggaGl0IEJPVFRPTSB3aXRob3V0IG1hdGNoIiB3aGVuIHNlYXJjaGluZworZm9yd2FyZCwgb3IgInNlYXJjaCBoaXQgVE9QIHdpdGhvdXQgbWF0Y2giIHdoZW4gc2VhcmNoaW5nIGJhY2t3YXJkLiAgSWYKK3dyYXBzY2FuIGlzIHNldCBhbmQgdGhlIHNlYXJjaCB3cmFwcyBhcm91bmQgdGhlIGVuZCBvZiB0aGUgZmlsZSB0aGUgbWVzc2FnZQorInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIgb3IgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0CitUT1AiIGlzIGdpdmVuIHdoZW4gc2VhcmNoaW5nIGJhY2t3YXJkcyBvciBmb3J3YXJkcyByZXNwZWN0aXZlbHkuICBUaGlzIGNhbiBiZQorc3dpdGNoZWQgb2ZmIGJ5IHNldHRpbmcgdGhlICdzJyBmbGFnIGluIHRoZSAnc2hvcnRtZXNzJyBvcHRpb24uICBUaGUgaGlnaGxpZ2h0CittZXRob2QgJ3cnIGlzIHVzZWQgZm9yIHRoaXMgbWVzc2FnZSAoZGVmYXVsdDogc3RhbmRvdXQpLgorCisJCQkJCQkJKnNlYXJjaC1yYW5nZSoKK1lvdSBjYW5ub3QgbGltaXQgdGhlIHNlYXJjaCBjb21tYW5kICIvIiB0byBhIGNlcnRhaW4gcmFuZ2Ugb2YgbGluZXMuICBBIHRyaWNrCit0byBkbyB0aGlzIGFueXdheSBpcyB0byB1c2UgdGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZCB3aXRoIHRoZSAnYycgZmxhZy4KK0V4YW1wbGU6ID4KKyAgIDouLDMwMHMvUGF0dGVybi8vZ2MKK1RoaXMgY29tbWFuZCB3aWxsIHNlYXJjaCBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24gdW50aWwgbGluZSAzMDAgZm9yCisiUGF0dGVybiIuICBBdCB0aGUgbWF0Y2gsIHlvdSB3aWxsIGJlIGFza2VkIHRvIHR5cGUgYSBjaGFyYWN0ZXIuICBUeXBlICdxJyB0bworc3RvcCBhdCB0aGlzIG1hdGNoLCB0eXBlICduJyB0byBmaW5kIHRoZSBuZXh0IG1hdGNoLgorCitUaGUgIioiLCAiIyIsICJnKiIgYW5kICJnIyIgY29tbWFuZHMgbG9vayBmb3IgYSB3b3JkIG5lYXIgdGhlIGN1cnNvciBpbiB0aGlzCitvcmRlciwgdGhlIGZpcnN0IG9uZSB0aGF0IGlzIGZvdW5kIGlzIHVzZWQ6CistIFRoZSBrZXl3b3JkIGN1cnJlbnRseSB1bmRlciB0aGUgY3Vyc29yLgorLSBUaGUgZmlyc3Qga2V5d29yZCB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciwgaW4gdGhlIHNhbWUgbGluZS4KKy0gVGhlIFdPUkQgY3VycmVudGx5IHVuZGVyIHRoZSBjdXJzb3IuCistIFRoZSBmaXJzdCBXT1JEIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yLCBpbiB0aGUgc2FtZSBsaW5lLgorVGhlIGtleXdvcmQgbWF5IG9ubHkgY29udGFpbiBsZXR0ZXJzIGFuZCBjaGFyYWN0ZXJzIGluICdpc2tleXdvcmQnLgorVGhlIFdPUkQgbWF5IGNvbnRhaW4gYW55IG5vbi1ibGFua3MgKDxUYWI+cyBhbmQvb3IgPFNwYWNlPnMpLgorTm90ZSB0aGF0IGlmIHlvdSB0eXBlIHdpdGggdGVuIGZpbmdlcnMsIHRoZSBjaGFyYWN0ZXJzIGFyZSBlYXN5IHRvIHJlbWVtYmVyOgordGhlICIjIiBpcyB1bmRlciB5b3VyIGxlZnQgaGFuZCBtaWRkbGUgZmluZ2VyIChzZWFyY2ggdG8gdGhlIGxlZnQgYW5kIHVwKSBhbmQKK3RoZSAiKiIgaXMgdW5kZXIgeW91ciByaWdodCBoYW5kIG1pZGRsZSBmaW5nZXIgKHNlYXJjaCB0byB0aGUgcmlnaHQgYW5kIGRvd24pLgorKHRoaXMgZGVwZW5kcyBvbiB5b3VyIGtleWJvYXJkIGxheW91dCB0aG91Z2gpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFRoZSBkZWZpbml0aW9uIG9mIGEgcGF0dGVybgkJKnNlYXJjaC1wYXR0ZXJuKiAqcGF0dGVybiogKltwYXR0ZXJuXSoKKwkJCQkJKnJlZ3VsYXItZXhwcmVzc2lvbiogKnJlZ2V4cCogKlBhdHRlcm4qCisJCQkJCSpFNzYqICpFMzYxKiAqRTM2MyogKkUzODMqICpFNDc2KgorCitGb3Igc3RhcnRlcnMsIHJlYWQgY2hhcHRlciAyNyBvZiB0aGUgdXNlciBtYW51YWwgfHVzcl8yNy50eHR8LgorCisJCQkJCQkqL2JhciogKi9cYmFyKiAqL3BhdHRlcm4qCisxLiBBIHBhdHRlcm4gaXMgb25lIG9yIG1vcmUgYnJhbmNoZXMsIHNlcGFyYXRlZCBieSAiXHwiLiAgSXQgbWF0Y2hlcyBhbnl0aGluZworICAgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGUgYnJhbmNoZXMuICBFeGFtcGxlOiAiZm9vXHxiZWVwIiBtYXRjaGVzICJmb28iIGFuZAorICAgbWF0Y2hlcyAiYmVlcCIuICBJZiBtb3JlIHRoYW4gb25lIGJyYW5jaCBtYXRjaGVzLCB0aGUgZmlyc3Qgb25lIGlzIHVzZWQuCisKKyAgIHBhdHRlcm4gOjo9CSAgICBicmFuY2gKKwkJb3IgIGJyYW5jaCBcfCBicmFuY2gKKwkJb3IgIGJyYW5jaCBcfCBicmFuY2ggXHwgYnJhbmNoCisJCWV0Yy4KKworCQkJCQkJKi9icmFuY2gqICovXCYqCisyLiBBIGJyYW5jaCBpcyBvbmUgb3IgbW9yZSBjb25jYXRzLCBzZXBhcmF0ZWQgYnkgIlwmIi4gIEl0IG1hdGNoZXMgdGhlIGxhc3QKKyAgIGNvbmNhdCwgYnV0IG9ubHkgaWYgYWxsIHRoZSBwcmVjZWRpbmcgY29uY2F0cyBhbHNvIG1hdGNoIGF0IHRoZSBzYW1lCisgICBwb3NpdGlvbi4gIEV4YW1wbGVzOgorCSJmb29iZWVwXCYuLi4iIG1hdGNoZXMgImZvbyIgaW4gImZvb2JlZXAiLgorCSIuKlBldGVyXCYuKkJvYiIgbWF0Y2hlcyBpbiBhIGxpbmUgY29udGFpbmluZyBib3RoICJQZXRlciIgYW5kICJCb2IiCisKKyAgIGJyYW5jaCA6Oj0JICAgIGNvbmNhdAorCQlvciAgY29uY2F0IFwmIGNvbmNhdAorCQlvciAgY29uY2F0IFwmIGNvbmNhdCBcJiBjb25jYXQKKwkJZXRjLgorCisJCQkJCQkqL2NvbmNhdCoKKzMuIEEgY29uY2F0IGlzIG9uZSBvciBtb3JlIHBpZWNlcywgY29uY2F0ZW5hdGVkLiAgSXQgbWF0Y2hlcyBhIG1hdGNoIGZvciB0aGUKKyAgIGZpcnN0IHBpZWNlLCBmb2xsb3dlZCBieSBhIG1hdGNoIGZvciB0aGUgc2Vjb25kIHBpZWNlLCBldGMuICBFeGFtcGxlOgorICAgImZbMC05XWIiLCBmaXJzdCBtYXRjaGVzICJmIiwgdGhlbiBhIGRpZ2l0IGFuZCB0aGVuICJiIi4KKworICAgY29uY2F0ICA6Oj0JICAgIHBpZWNlCisJCW9yICBwaWVjZSBwaWVjZQorCQlvciAgcGllY2UgcGllY2UgcGllY2UKKwkJZXRjLgorCisJCQkJCQkqL3BpZWNlKgorNC4gQSBwaWVjZSBpcyBhbiBhdG9tLCBwb3NzaWJseSBmb2xsb3dlZCBieSBhIG11bHRpLCBhbiBpbmRpY2F0aW9uIG9mIGhvdyBtYW55CisgICB0aW1lcyB0aGUgYXRvbSBjYW4gYmUgbWF0Y2hlZC4gIEV4YW1wbGU6ICJhKiIgbWF0Y2hlcyBhbnkgc2VxdWVuY2Ugb2YgImEiCisgICBjaGFyYWN0ZXJzOiAiIiwgImEiLCAiYWEiLCBldGMuICBTZWUgfC9tdWx0aXwuCisKKyAgIHBpZWNlICAgOjo9CSAgICBhdG9tCisJCW9yICBhdG9tICBtdWx0aQorCisJCQkJCQkqL2F0b20qCis1LiBBbiBhdG9tIGNhbiBiZSBvbmUgb2YgYSBsb25nIGxpc3Qgb2YgaXRlbXMuICBNYW55IGF0b21zIG1hdGNoIG9uZSBjaGFyYWN0ZXIKKyAgIGluIHRoZSB0ZXh0LiAgSXQgaXMgb2Z0ZW4gYW4gb3JkaW5hcnkgY2hhcmFjdGVyIG9yIGEgY2hhcmFjdGVyIGNsYXNzLgorICAgQnJhY2VzIGNhbiBiZSB1c2VkIHRvIG1ha2UgYSBwYXR0ZXJuIGludG8gYW4gYXRvbS4gIFRoZSAiXHooXCkiIGNvbnN0cnVjdAorICAgaXMgb25seSBmb3Igc3ludGF4IGhpZ2hsaWdodGluZy4KKworICAgYXRvbSAgICA6Oj0JICAgIG9yZGluYXJ5LWF0b20JCXwvb3JkaW5hcnktYXRvbXwKKwkJb3IgIFwoIHBhdHRlcm4gXCkJCXwvXCh8CisJCW9yICBcJSggcGF0dGVybiBcKQkJfC9cJSh8CisJCW9yICBceiggcGF0dGVybiBcKQkJfC9ceih8CisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBPdmVydmlldyBvZiBwYXR0ZXJuIGl0ZW1zCQkJCSpwYXR0ZXJuLW92ZXJ2aWV3KgorCitPdmVydmlldyBvZiBtdWx0aSBpdGVtcy4JCQkJKi9tdWx0aSogKkU2MSogKkU2MioKK01vcmUgZXhwbGFuYXRpb24gYW5kIGV4YW1wbGVzIGJlbG93LCBmb2xsb3cgdGhlIGxpbmtzLgkJCSpFNjQqCisKKwkgIG11bHRpIH4KKyAgICAgJ21hZ2ljJyAnbm9tYWdpYycJbWF0Y2hlcyBvZiB0aGUgcHJlY2VkaW5nIGF0b20gfgorfC9zdGFyfAkqCVwqCTAgb3IgbW9yZQlhcyBtYW55IGFzIHBvc3NpYmxlCit8L1wrfAlcKwlcKwkxIG9yIG1vcmUJYXMgbWFueSBhcyBwb3NzaWJsZSAoKikKK3wvXD18CVw9CVw9CTAgb3IgMQkJYXMgbWFueSBhcyBwb3NzaWJsZSAoKikKK3wvXD98CVw/CVw/CTAgb3IgMQkJYXMgbWFueSBhcyBwb3NzaWJsZSAoKikKKworfC9ce3wJXHtuLG19CVx7bixtfQluIHRvIG0JCWFzIG1hbnkgYXMgcG9zc2libGUgKCopCisJXHtufQlce259CW4JCWV4YWN0bHkgKCopCisJXHtuLH0JXHtuLH0JYXQgbGVhc3QgbglhcyBtYW55IGFzIHBvc3NpYmxlICgqKQorCVx7LG19CVx7LG19CTAgdG8gbQkJYXMgbWFueSBhcyBwb3NzaWJsZSAoKikKKwlce30JXHt9CTAgb3IgbW9yZQlhcyBtYW55IGFzIHBvc3NpYmxlIChzYW1lIGFzICopICgqKQorCit8L1x7LXwJXHstbixtfQlcey1uLG19CW4gdG8gbQkJYXMgZmV3IGFzIHBvc3NpYmxlICgqKQorCVx7LW59CVx7LW59CW4JCWV4YWN0bHkgKCopCisJXHstbix9CVx7LW4sfQlhdCBsZWFzdCBuCWFzIGZldyBhcyBwb3NzaWJsZSAoKikKKwlcey0sbX0JXHstLG19CTAgdG8gbQkJYXMgZmV3IGFzIHBvc3NpYmxlICgqKQorCVx7LX0JXHstfQkwIG9yIG1vcmUJYXMgZmV3IGFzIHBvc3NpYmxlICgqKQorCisJCQkJCQkJKkU1OSoKK3wvXEA+fAlcQD4JXEA+CTEsIGxpa2UgbWF0Y2hpbmcgYSB3aG9sZSBwYXR0ZXJuICgqKQorfC9cQD18CVxAPQlcQD0Jbm90aGluZywgcmVxdWlyZXMgYSBtYXRjaCB8L3plcm8td2lkdGh8ICgqKQorfC9cQCF8CVxAIQlcQCEJbm90aGluZywgcmVxdWlyZXMgTk8gbWF0Y2ggfC96ZXJvLXdpZHRofCAoKikKK3wvXEA8PXwJXEA8PQlcQDw9CW5vdGhpbmcsIHJlcXVpcmVzIGEgbWF0Y2ggYmVoaW5kIHwvemVyby13aWR0aHwgKCopCit8L1xAPCF8CVxAPCEJXEA8IQlub3RoaW5nLCByZXF1aXJlcyBOTyBtYXRjaCBiZWhpbmQgfC96ZXJvLXdpZHRofCAoKikKKworKCopIHtub3QgaW4gVml9CisKKworT3ZlcnZpZXcgb2Ygb3JkaW5hcnkgYXRvbXMuCQkJCSovb3JkaW5hcnktYXRvbSoKK01vcmUgZXhwbGFuYXRpb24gYW5kIGV4YW1wbGVzIGJlbG93LCBmb2xsb3cgdGhlIGxpbmtzLgorCisgICAgICBvcmRpbmFyeSBhdG9tIH4KKyAgICAgIG1hZ2ljICAgbm9tYWdpYwltYXRjaGVzIH4KK3wvXnwJXgleCXN0YXJ0LW9mLWxpbmUgKGF0IHN0YXJ0IG9mIHBhdHRlcm4pIHwvemVyby13aWR0aHwKK3wvXF58CVxeCVxeCWxpdGVyYWwgJ14nCit8L1xfXnwJXF9eCVxfXglzdGFydC1vZi1saW5lICh1c2VkIGFueXdoZXJlKSB8L3plcm8td2lkdGh8Cit8LyR8CSQJJAllbmQtb2YtbGluZSAoYXQgZW5kIG9mIHBhdHRlcm4pIHwvemVyby13aWR0aHwKK3wvXCR8CVwkCVwkCWxpdGVyYWwgJyQnCit8L1xfJHwJXF8kCVxfJAllbmQtb2YtbGluZSAodXNlZCBhbnl3aGVyZSkgfC96ZXJvLXdpZHRofAorfC8ufAkuCVwuCWFueSBzaW5nbGUgY2hhcmFjdGVyIChub3QgYW4gZW5kLW9mLWxpbmUpCit8L1xfLnwJXF8uCVxfLglhbnkgc2luZ2xlIGNoYXJhY3RlciBvciBlbmQtb2YtbGluZQorfC9cPHwJXDwJXDwJYmVnaW5uaW5nIG9mIGEgd29yZCB8L3plcm8td2lkdGh8Cit8L1w+fAlcPglcPgllbmQgb2YgYSB3b3JkIHwvemVyby13aWR0aHwKK3wvXHpzfAlcenMJXHpzCWFueXRoaW5nLCBzZXRzIHN0YXJ0IG9mIG1hdGNoCit8L1x6ZXwJXHplCVx6ZQlhbnl0aGluZywgc2V0cyBlbmQgb2YgbWF0Y2gKK3wvXCVefAlcJV4JXCVeCWJlZ2lubmluZyBvZiBmaWxlIHwvemVyby13aWR0aHwJCSpFNzEqCit8L1wlJHwJXCUkCVwlJAllbmQgb2YgZmlsZSB8L3plcm8td2lkdGh8Cit8L1wlI3wJXCUjCVwlIwljdXJzb3IgcG9zaXRpb24gfC96ZXJvLXdpZHRofAorfC9cJWx8CVwlMjNsCVwlMjNsCWluIGxpbmUgMjMgfC96ZXJvLXdpZHRofAorfC9cJWN8CVwlMjNjCVwlMjNjCWluIGNvbHVtbiAyMyB8L3plcm8td2lkdGh8Cit8L1wldnwJXCUyM3YJXCUyM3YJaW4gdmlydHVhbCBjb2x1bW4gMjMgfC96ZXJvLXdpZHRofAorCitDaGFyYWN0ZXIgY2xhc3NlcyB7bm90IGluIFZpfToKK3wvXGl8CVxpCVxpCWlkZW50aWZpZXIgY2hhcmFjdGVyIChzZWUgJ2lzaWRlbnQnIG9wdGlvbikKK3wvXEl8CVxJCVxJCWxpa2UgIlxpIiwgYnV0IGV4Y2x1ZGluZyBkaWdpdHMKK3wvXGt8CVxrCVxrCWtleXdvcmQgY2hhcmFjdGVyIChzZWUgJ2lza2V5d29yZCcgb3B0aW9uKQorfC9cS3wJXEsJXEsJbGlrZSAiXGsiLCBidXQgZXhjbHVkaW5nIGRpZ2l0cworfC9cZnwJXGYJXGYJZmlsZSBuYW1lIGNoYXJhY3RlciAoc2VlICdpc2ZuYW1lJyBvcHRpb24pCit8L1xGfAlcRglcRglsaWtlICJcZiIsIGJ1dCBleGNsdWRpbmcgZGlnaXRzCit8L1xwfAlccAlccAlwcmludGFibGUgY2hhcmFjdGVyIChzZWUgJ2lzcHJpbnQnIG9wdGlvbikKK3wvXFB8CVxQCVxQCWxpa2UgIlxwIiwgYnV0IGV4Y2x1ZGluZyBkaWdpdHMKK3wvXHN8CVxzCVxzCXdoaXRlc3BhY2UgY2hhcmFjdGVyOiA8U3BhY2U+IGFuZCA8VGFiPgorfC9cU3wJXFMJXFMJbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyOyBvcHBvc2l0ZSBvZiBccworfC9cZHwJXGQJXGQJZGlnaXQ6CQkJCVswLTldCit8L1xEfAlcRAlcRAlub24tZGlnaXQ6CQkJW14wLTldCit8L1x4fAlceAlceAloZXggZGlnaXQ6CQkJWzAtOUEtRmEtZl0KK3wvXFh8CVxYCVxYCW5vbi1oZXggZGlnaXQ6CQkJW14wLTlBLUZhLWZdCit8L1xvfAlcbwlcbwlvY3RhbCBkaWdpdDoJCQlbMC03XQorfC9cT3wJXE8JXE8Jbm9uLW9jdGFsIGRpZ2l0OgkJW14wLTddCit8L1x3fAlcdwlcdwl3b3JkIGNoYXJhY3RlcjoJCQlbMC05QS1aYS16X10KK3wvXFd8CVxXCVxXCW5vbi13b3JkIGNoYXJhY3RlcjoJCVteMC05QS1aYS16X10KK3wvXGh8CVxoCVxoCWhlYWQgb2Ygd29yZCBjaGFyYWN0ZXI6CQlbQS1aYS16X10KK3wvXEh8CVxICVxICW5vbi1oZWFkIG9mIHdvcmQgY2hhcmFjdGVyOglbXkEtWmEtel9dCit8L1xhfAlcYQlcYQlhbHBoYWJldGljIGNoYXJhY3RlcjoJCVtBLVphLXpdCit8L1xBfAlcQQlcQQlub24tYWxwaGFiZXRpYyBjaGFyYWN0ZXI6CVteQS1aYS16XQorfC9cbHwJXGwJXGwJbG93ZXJjYXNlIGNoYXJhY3RlcjoJCVthLXpdCit8L1xMfAlcTAlcTAlub24tbG93ZXJjYXNlIGNoYXJhY3RlcjoJW15hLXpdCit8L1x1fAlcdQlcdQl1cHBlcmNhc2UgY2hhcmFjdGVyOgkJW0EtWl0KK3wvXFV8CVxVCVxVCW5vbi11cHBlcmNhc2UgY2hhcmFjdGVyCQlbXkEtWl0KK3wvXF98CVxfeAlcX3gJd2hlcmUgeCBpcyBhbnkgb2YgdGhlIGNoYXJhY3RlcnMgYWJvdmU6IGNoYXJhY3RlcgorCQkJY2xhc3Mgd2l0aCBlbmQtb2YtbGluZSBpbmNsdWRlZAorKGVuZCBvZiBjaGFyYWN0ZXIgY2xhc3NlcykKKworfC9cZXwJXGUJXGUJPEVzYz4KK3wvXHR8CVx0CVx0CTxUYWI+Cit8L1xyfAlccglccgk8Q1I+Cit8L1xifAlcYglcYgk8QlM+Cit8L1xufAlcbglcbgllbmQtb2YtbGluZQorfC9+fAl+CVx+CWxhc3QgZ2l2ZW4gc3Vic3RpdHV0ZSBzdHJpbmcKK3wvXDF8CVwxCVwxCXNhbWUgc3RyaW5nIGFzIG1hdGNoZWQgYnkgZmlyc3QgXChcKSB7bm90IGluIFZpfQorfC9cMnwJXDIJXDIJTGlrZSAiXDEiLCBidXQgdXNlcyBzZWNvbmQgXChcKQorCSAgIC4uLgorfC9cOXwJXDkJXDkJTGlrZSAiXDEiLCBidXQgdXNlcyBuaW50aCBcKFwpCisJCQkJCQkJCSpFNjgqCit8L1x6MXwJXHoxCVx6MQlvbmx5IGZvciBzeW50YXggaGlnaGxpZ2h0aW5nLCBzZWUgfDpzeW4tZXh0LW1hdGNofAorCSAgIC4uLgorfC9cejF8CVx6OQlcejkJb25seSBmb3Igc3ludGF4IGhpZ2hsaWdodGluZywgc2VlIHw6c3luLWV4dC1tYXRjaHwKKworCXgJeAlhIGNoYXJhY3RlciB3aXRoIG5vIHNwZWNpYWwgbWVhbmluZyBtYXRjaGVzIGl0c2VsZgorCit8L1tdfAlbXQlcW10JYW55IGNoYXJhY3RlciBzcGVjaWZpZWQgaW5zaWRlIHRoZSBbXQorfC9cJVtdfCBcJVtdCVwlW10JYSBsaXN0IG9mIG9wdGlvbmFsbHkgbWF0Y2hlZCBhdG9tcworCit8L1xjfAlcYwlcYwlpZ25vcmUgY2FzZQorfC9cQ3wJXEMJXEMJbWF0Y2ggY2FzZQorfC9cbXwJXG0JXG0JJ21hZ2ljJyBvbiBmb3IgdGhlIGZvbGxvd2luZyBjaGFycyBpbiB0aGUgcGF0dGVybgorfC9cTXwJXE0JXE0JJ21hZ2ljJyBvZmYgZm9yIHRoZSBmb2xsb3dpbmcgY2hhcnMgaW4gdGhlIHBhdHRlcm4KK3wvXHZ8CVx2CVx2CXRoZSBmb2xsb3dpbmcgY2hhcnMgaW4gdGhlIHBhdHRlcm4gYXJlICJ2ZXJ5IG1hZ2ljIgorfC9cVnwJXFYJXFYJdGhlIGZvbGxvd2luZyBjaGFycyBpbiB0aGUgcGF0dGVybiBhcmUgInZlcnkgbm9tYWdpYyIKK3wvXFp8CVxaCVxaCWlnbm9yZSBkaWZmZXJlbmNlcyBpbiBVbmljb2RlICJjb21iaW5pbmcgY2hhcmFjdGVycyIuCisJCQlVc2VmdWwgd2hlbiBzZWFyY2hpbmcgdm93ZWxlZCBIZWJyZXcgb3IgQXJhYmljIHRleHQuCisKKworRXhhbXBsZQkJCW1hdGNoZXMgfgorXDxcSVxpKgkJb3IKK1w8XGhcdyoKK1w8W2EtekEtWl9dW2EtekEtWjAtOV9dKgorCQkJQW4gaWRlbnRpZmllciAoZS5nLiwgaW4gYSBDIHByb2dyYW0pLgorCitcKFwuJFx8XC4gXCkJCUEgcGVyaW9kIGZvbGxvd2VkIGJ5IDxFT0w+IG9yIGEgc3BhY2UuCisKK1suIT9dW10pIiddKlwoJFx8WyBdXCkJQSBzZWFyY2ggcGF0dGVybiB0aGF0IGZpbmRzIHRoZSBlbmQgb2YgYSBzZW50ZW5jZSwKKwkJCXdpdGggYWxtb3N0IHRoZSBzYW1lIGRlZmluaXRpb24gYXMgdGhlICIpIiBjb21tYW5kLgorCitjYXRcWgkJCUJvdGggImNhdCIgYW5kICJjYcyAdCIgKCJhIiBmb2xsb3dlZCBieSAweDAzMDApCisJCQlEb2VzIG5vdCBtYXRjaCAiY8OgdCIgKGNoYXJhY3RlciAweDAwZTApLCBldmVuCisJCQl0aG91Z2ggaXQgbWF5IGxvb2sgdGhlIHNhbWUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBNYWdpYwkJCQkJCQkqL21hZ2ljKgorCitTb21lIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4gYXJlIHRha2VuIGxpdGVyYWxseS4gIFRoZXkgbWF0Y2ggd2l0aCB0aGUgc2FtZQorY2hhcmFjdGVyIGluIHRoZSB0ZXh0LiAgV2hlbiBwcmVjZWRlZCB3aXRoIGEgYmFja3NsYXNoIGhvd2V2ZXIsIHRoZXNlCitjaGFyYWN0ZXJzIGdldCBhIHNwZWNpYWwgbWVhbmluZy4KKworT3RoZXIgY2hhcmFjdGVycyBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nIHdpdGhvdXQgYSBiYWNrc2xhc2guICBUaGV5IG5lZWQgdG8gYmUKK3ByZWNlZGVkIHdpdGggYSBiYWNrc2xhc2ggdG8gbWF0Y2ggbGl0ZXJhbGx5LgorCitJZiBhIGNoYXJhY3RlciBpcyB0YWtlbiBsaXRlcmFsbHkgb3Igbm90IGRlcGVuZHMgb24gdGhlICdtYWdpYycgb3B0aW9uIGFuZCB0aGUKK2l0ZW1zIG1lbnRpb25lZCBuZXh0LgorCQkJCQkJCSovXG0qICovXE0qCitVc2Ugb2YgIlxtIiBtYWtlcyB0aGUgcGF0dGVybiBhZnRlciBpdCBiZSBpbnRlcnByZXRlZCBhcyBpZiAnbWFnaWMnIGlzIHNldCwKK2lnbm9yaW5nIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlICdtYWdpYycgb3B0aW9uLgorVXNlIG9mICJcTSIgbWFrZXMgdGhlIHBhdHRlcm4gYWZ0ZXIgaXQgYmUgaW50ZXJwcmV0ZWQgYXMgaWYgJ25vbWFnaWMnIGlzIHVzZWQuCisJCQkJCQkJKi9cdiogKi9cVioKK1VzZSBvZiAiXHYiIG1lYW5zIHRoYXQgaW4gdGhlIHBhdHRlcm4gYWZ0ZXIgaXQgYWxsIEFTQ0lJIGNoYXJhY3RlcnMgZXhjZXB0CisnMCctJzknLCAnYSctJ3onLCAnQSctJ1onIGFuZCAnXycgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZy4gICJ2ZXJ5IG1hZ2ljIgorCitVc2Ugb2YgIlxWIiBtZWFucyB0aGF0IGluIHRoZSBwYXR0ZXJuIGFmdGVyIGl0IG9ubHkgdGhlIGJhY2tzbGFzaCBoYXMgYQorc3BlY2lhbCBtZWFuaW5nLiAgInZlcnkgbm9tYWdpYyIKKworRXhhbXBsZXM6CithZnRlcjoJICBcdgkgICBcbQkgICAgXE0JICAgICBcVgkJbWF0Y2hlcyB+CisJCSdtYWdpYycgJ25vbWFnaWMnCisJICAkCSAgICQJICAgICQJICAgICBcJAkJbWF0Y2hlcyBlbmQtb2YtbGluZQorCSAgLgkgICAuCSAgICBcLgkgICAgIFwuCQltYXRjaGVzIGFueSBjaGFyYWN0ZXIKKwkgICoJICAgKgkgICAgXCoJICAgICBcKgkJYW55IG51bWJlciBvZiB0aGUgcHJldmlvdXMgYXRvbQorCSAgKCkJICAgXChcKSAgICAgXChcKSAgICAgXChcKQlncm91cGluZyBpbnRvIGFuIGF0b20KKwkgIHwJICAgXHwJICAgIFx8CSAgICAgXHwJCXNlcGFyYXRpbmcgYWx0ZXJuYXRpdmVzCisJICBcYQkgICBcYQkgICAgXGEJICAgICBcYQkJYWxwaGFiZXRpYyBjaGFyYWN0ZXIKKwkgIFxcCSAgIFxcCSAgICBcXAkgICAgIFxcCQlsaXRlcmFsIGJhY2tzbGFzaAorCSAgXC4JICAgXC4JICAgIC4JICAgICAuCQlsaXRlcmFsIGRvdAorCSAgXHsJICAgewkgICAgewkgICAgIHsJCWxpdGVyYWwgJ3snCisJICBhCSAgIGEJICAgIGEJICAgICBhCQlsaXRlcmFsICdhJworCit7b25seSBWaW0gc3VwcG9ydHMgXG0sIFxNLCBcdiBhbmQgXFZ9CisKK0l0IGlzIHJlY29tbWVuZGVkIHRvIGFsd2F5cyBrZWVwIHRoZSAnbWFnaWMnIG9wdGlvbiBhdCB0aGUgZGVmYXVsdCBzZXR0aW5nLAord2hpY2ggaXMgJ21hZ2ljJy4gIFRoaXMgYXZvaWRzIHBvcnRhYmlsaXR5IHByb2JsZW1zLiAgVG8gbWFrZSBhIHBhdHRlcm4gaW1tdW5lCit0byB0aGUgJ21hZ2ljJyBvcHRpb24gYmVpbmcgc2V0IG9yIG5vdCwgcHV0ICJcbSIgb3IgIlxNIiBhdCB0aGUgc3RhcnQgb2YgdGhlCitwYXR0ZXJuLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gTXVsdGkgaXRlbXMJCQkJCQkqcGF0dGVybi1tdWx0aS1pdGVtcyoKKworQW4gYXRvbSBjYW4gYmUgZm9sbG93ZWQgYnkgYW4gaW5kaWNhdGlvbiBvZiBob3cgbWFueSB0aW1lcyB0aGUgYXRvbSBjYW4gYmUKK21hdGNoZWQgYW5kIGluIHdoYXQgd2F5LiAgVGhpcyBpcyBjYWxsZWQgYSBtdWx0aS4gIFNlZSB8L211bHRpfCBmb3IgYW4KK292ZXJ2aWV3LgorCitJdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIGEgbXVsdGkgdGhhdCBjYW4gbWF0Y2ggbW9yZSB0aGFuIG9uZSB0aW1lIGFmdGVyIGFuCithdG9tIHRoYXQgY2FuIG1hdGNoIGFuIGVtcHR5IHN0cmluZy4gIFRoYXQncyBiZWNhdXNlIHRoaXMgY291bGQgcmVzdWx0IGluIGFuCitlbmRsZXNzIGxvb3AuICBJZiB5b3UgdHJ5IGl0LCB5b3Ugd2lsbCBnZXQgdGhpcyBlcnJvciBtZXNzYWdlOiA+CisJKiwgXCsgb3IgXHsgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eQorPAorCQkJCQkJKi9zdGFyKiAqL1xzdGFyKiAqRTU2KgorKgkodXNlIFwqIHdoZW4gJ21hZ2ljJyBpcyBub3Qgc2V0KQorCU1hdGNoZXMgMCBvciBtb3JlIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSwgYXMgbWFueSBhcyBwb3NzaWJsZS4KKwlFeGFtcGxlICAnbm9tYWdpYycJbWF0Y2hlcyB+CisJYSoJICAgYVwqCQkiIiwgImEiLCAiYWEiLCAiYWFhIiwgZXRjLgorCS4qCSAgIFwuXCoJCWFueXRoaW5nLCBhbHNvIGFuIGVtcHR5IHN0cmluZywgbm8gZW5kLW9mLWxpbmUKKwlcXy4qCSAgIFxfLlwqCWV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyCisJXF8uKkVORAkgICBcXy5cKkVORAlldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGxhc3QgIkVORCIKKwkJCQlpbiB0aGUgYnVmZmVyCisKKwlFeGNlcHRpb246IFdoZW4gIioiIGlzIHVzZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIG9yIGp1c3QgYWZ0ZXIKKwkiXiIgaXQgbWF0Y2hlcyB0aGUgc3RhciBjaGFyYWN0ZXIuCisKKwlCZSBhd2FyZSB0aGF0IHJlcGVhdGluZyAiXF8uIiBjYW4gbWF0Y2ggYSBsb3Qgb2YgdGV4dCBhbmQgdGFrZSBhIGxvbmcKKwl0aW1lLiAgRm9yIGV4YW1wbGUsICJcXy4qRU5EIiBtYXRjaGVzIGFsbCB0ZXh0IGZyb20gdGhlIGN1cnJlbnQKKwlwb3NpdGlvbiB0byB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICJFTkQiIGluIHRoZSBmaWxlLiAgU2luY2UgdGhlICIqIgorCXdpbGwgbWF0Y2ggYXMgbWFueSBhcyBwb3NzaWJsZSwgdGhpcyBmaXJzdCBza2lwcyBvdmVyIGFsbCBsaW5lcyB1bnRpbAorCXRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIHRoZW4gdHJpZXMgbWF0Y2hpbmcgIkVORCIsIGJhY2tpbmcgdXAgb25lCisJY2hhcmFjdGVyIGF0IGEgdGltZS4KKworCQkJCQkJCSovXCsqICpFNTcqCitcKwlNYXRjaGVzIDEgb3IgbW9yZSBvZiB0aGUgcHJlY2VkaW5nIGF0b20sIGFzIG1hbnkgYXMgcG9zc2libGUuIHtub3QgaW4KKwlWaX0KKwlFeGFtcGxlCQltYXRjaGVzIH4KKwleLlwrJAkJYW55IG5vbi1lbXB0eSBsaW5lCisJXHNcKwkJd2hpdGUgc3BhY2Ugb2YgYXQgbGVhc3Qgb25lIGNoYXJhY3RlcgorCisJCQkJCQkJKi9cPSoKK1w9CU1hdGNoZXMgMCBvciAxIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSwgYXMgbWFueSBhcyBwb3NzaWJsZS4ge25vdCBpbiBWaX0KKwlFeGFtcGxlCQltYXRjaGVzIH4KKwlmb29cPQkJImZvIiBhbmQgImZvbyIKKworCQkJCQkJCSovXD8qCitcPwlKdXN0IGxpa2UgXD0uICBDYW5ub3QgYmUgdXNlZCB3aGVuIHNlYXJjaGluZyBiYWNrd2FyZHMgd2l0aCB0aGUgIj8iCisJY29tbWFuZC4ge25vdCBpbiBWaX0KKworCQkJCQkJKi9ceyogKkU1OCogKkU2MCogKkU1NTQqCitce24sbX0JTWF0Y2hlcyBuIHRvIG0gb2YgdGhlIHByZWNlZGluZyBhdG9tLCBhcyBtYW55IGFzIHBvc3NpYmxlCitce259CU1hdGNoZXMgbiBvZiB0aGUgcHJlY2VkaW5nIGF0b20KK1x7bix9CU1hdGNoZXMgYXQgbGVhc3QgbiBvZiB0aGUgcHJlY2VkaW5nIGF0b20sIGFzIG1hbnkgYXMgcG9zc2libGUKK1x7LG19CU1hdGNoZXMgMCB0byBtIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSwgYXMgbWFueSBhcyBwb3NzaWJsZQorXHt9CU1hdGNoZXMgMCBvciBtb3JlIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSwgYXMgbWFueSBhcyBwb3NzaWJsZSAobGlrZSAqKQorCQkJCQkJCSovXHstKgorXHstbixtfQltYXRjaGVzIG4gdG8gbSBvZiB0aGUgcHJlY2VkaW5nIGF0b20sIGFzIGZldyBhcyBwb3NzaWJsZQorXHstbn0JbWF0Y2hlcyBuIG9mIHRoZSBwcmVjZWRpbmcgYXRvbQorXHstbix9CW1hdGNoZXMgYXQgbGVhc3QgbiBvZiB0aGUgcHJlY2VkaW5nIGF0b20sIGFzIGZldyBhcyBwb3NzaWJsZQorXHstLG19CW1hdGNoZXMgMCB0byBtIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSwgYXMgZmV3IGFzIHBvc3NpYmxlCitcey19CW1hdGNoZXMgMCBvciBtb3JlIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSwgYXMgZmV3IGFzIHBvc3NpYmxlCisJe1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlfQorCisJbiBhbmQgbSBhcmUgcG9zaXRpdmUgZGVjaW1hbCBudW1iZXJzCisKKwlJZiBhICItIiBhcHBlYXJzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAieyIsIHRoZW4gYSBzaG9ydGVzdCBtYXRjaAorCWZpcnN0IGFsZ29yaXRobSBpcyB1c2VkIChzZWUgZXhhbXBsZSBiZWxvdykuICBJbiBwYXJ0aWN1bGFyLCAiXHstfSIgaXMKKwl0aGUgc2FtZSBhcyAiKiIgYnV0IHVzZXMgdGhlIHNob3J0ZXN0IG1hdGNoIGZpcnN0IGFsZ29yaXRobS4gIEJVVDogQQorCW1hdGNoIHRoYXQgc3RhcnRzIGVhcmxpZXIgaXMgcHJlZmVycmVkIG92ZXIgYSBzaG9ydGVyIG1hdGNoOiAiYVx7LX1iIgorCW1hdGNoZXMgImFhYWIiIGluICJ4YWFhYiIuCisKKwlFeGFtcGxlCQkJbWF0Y2hlcyB+CisJYWJcezIsM31jCQkiYWJiYyIgb3IgImFiYmJjIgorCWFcezV9CQkJImFhYWFhIi4KKwlhYlx7Mix9YwkJImFiYmMiLCAiYWJiYmMiLCAiYWJiYmJjIiwgZXRjCisJYWJceywzfWMJCSJhYyIsICJhYmMiLCAiYWJiYyIgb3IgImFiYmJjIi4KKwlhW2JjXVx7M31kCQkiYWJiYmQiLCAiYWJiY2QiLCAiYWNiY2QiLCAiYWNjY2QiLCBldGMuCisJYVwoYmNcKVx7MSwyfWQJCSJhYmNkIiBvciAiYWJjYmNkIgorCWFbYmNdXHstfVtjZF0JCSJhYmMiIGluICJhYmNkIgorCWFbYmNdKltjZF0JCSJhYmNkIiBpbiAiYWJjZCIKKworCVRoZSB9IG1heSBvcHRpb25hbGx5IGJlIHByZWNlZGVkIHdpdGggYSBiYWNrc2xhc2g6IFx7bixtXH0uCisKKwkJCQkJCQkqL1xAPSoKK1xAPQlNYXRjaGVzIHRoZSBwcmVjZWRpbmcgYXRvbSB3aXRoIHplcm8gd2lkdGguIHtub3QgaW4gVml9CisJTGlrZSAiKD89cGF0dGVybikiIGluIFBlcmwuCisJRXhhbXBsZQkJCW1hdGNoZXMgfgorCWZvb1woYmFyXClcQD0JCSJmb28iIGluICJmb29iYXIiCisJZm9vXChiYXJcKVxAPWZvbwlub3RoaW5nCisJCQkJCQkJKi96ZXJvLXdpZHRoKgorCVdoZW4gdXNpbmcgIlxAPSIgKG9yICJeIiwgIiQiLCAiXDwiLCAiXD4iKSBubyBjaGFyYWN0ZXJzIGFyZSBpbmNsdWRlZAorCWluIHRoZSBtYXRjaC4gIFRoZXNlIGl0ZW1zIGFyZSBvbmx5IHVzZWQgdG8gY2hlY2sgaWYgYSBtYXRjaCBjYW4gYmUKKwltYWRlLiAgVGhpcyBjYW4gYmUgdHJpY2t5LCBiZWNhdXNlIGEgbWF0Y2ggd2l0aCBmb2xsb3dpbmcgaXRlbXMgd2lsbAorCWJlIGRvbmUgaW4gdGhlIHNhbWUgcG9zaXRpb24uICBUaGUgbGFzdCBleGFtcGxlIGFib3ZlIHdpbGwgbm90IG1hdGNoCisJImZvb2JhcmZvbyIsIGJlY2F1c2UgaXQgdHJpZXMgbWF0Y2ggImZvbyIgaW4gdGhlIHNhbWUgcG9zaXRpb24gd2hlcmUKKwkiYmFyIiBtYXRjaGVkLgorCisJTm90ZSB0aGF0IHVzaW5nICJcJiIgd29ya3MgdGhlIHNhbWUgYXMgdXNpbmcgIlxAPSI6ICJmb29cJi4uIiBpcyB0aGUKKwlzYW1lIGFzICJcKGZvb1wpXEA9Li4iLiAgQnV0IHVzaW5nICJcJiIgaXMgZWFzaWVyLCB5b3UgZG9uJ3QgbmVlZCB0aGUKKwlicmFjZXMuCisKKworCQkJCQkJCSovXEAhKgorXEAhCU1hdGNoZXMgd2l0aCB6ZXJvIHdpZHRoIGlmIHRoZSBwcmVjZWRpbmcgYXRvbSBkb2VzIE5PVCBtYXRjaCBhdCB0aGUKKwljdXJyZW50IHBvc2l0aW9uLiB8L3plcm8td2lkdGh8IHtub3QgaW4gVml9CisJTGlrZSAnKD8hcGF0dGVybikiIGluIFBlcmwuCisJRXhhbXBsZQkJCW1hdGNoZXMgfgorCWZvb1woYmFyXClcQCEJCWFueSAiZm9vIiBub3QgZm9sbG93ZWQgYnkgImJhciIKKwlhLlx7LX1wXEAhCQkiYSIsICJhcCIsICJhcHAiLCBldGMuIG5vdCBmb2xsb3dlZCBieSBhICJwIgorCWlmIFwoXCh0aGVuXClcQCEuXCkqJAkiaWYgIiBub3QgZm9sbG93ZWQgYnkgInRoZW4iCisKKwlVc2luZyAiXEAhIiBpcyB0cmlja3ksIGJlY2F1c2UgdGhlcmUgYXJlIG1hbnkgcGxhY2VzIHdoZXJlIGEgcGF0dGVybgorCWRvZXMgbm90IG1hdGNoLiAgImEuKnBcQCEiIHdpbGwgbWF0Y2ggZnJvbSBhbiAiYSIgdG8gdGhlIGVuZCBvZiB0aGUKKwlsaW5lLCBiZWNhdXNlICIuKiIgY2FuIG1hdGNoIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBsaW5lIGFuZCB0aGUgInAiCisJZG9lc24ndCBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgImEuXHstfXBcQCEiIHdpbGwgbWF0Y2ggYW55CisJImEiLCAiYXAiLCAiYWFwIiwgZXRjLiB0aGF0IGlzbid0IGZvbGxvd2VkIGJ5IGEgInAiLCBiZWNhdXNlIHRoZSAiLiIKKwljYW4gbWF0Y2ggYSAicCIgYW5kICJwXEAhIiBkb2Vzbid0IG1hdGNoIGFmdGVyIHRoYXQuCisKKwlZb3UgY2FuJ3QgdXNlICJcQCEiIHRvIGxvb2sgZm9yIGEgbm9uLW1hdGNoIGJlZm9yZSB0aGUgbWF0Y2hpbmcKKwlwb3NpdGlvbjogIlwoZm9vXClcQCFiYXIiIHdpbGwgbWF0Y2ggImJhciIgaW4gImZvb2JhciIsIGJlY2F1c2UgYXQgdGhlCisJcG9zaXRpb24gd2hlcmUgImJhciIgbWF0Y2hlcywgImZvbyIgZG9lcyBub3QgbWF0Y2guICBUbyBhdm9pZCBtYXRjaGluZworCSJmb29iYXIiIHlvdSBjb3VsZCB1c2UgIlwoZm9vXClcQCEuLi5iYXIiLCBidXQgdGhhdCBkb2Vzbid0IG1hdGNoIGEKKwliYXIgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZS4gVXNlICJcKGZvb1wpXEA8IWJhciIuCisKKwkJCQkJCQkqL1xAPD0qCitcQDw9CU1hdGNoZXMgd2l0aCB6ZXJvIHdpZHRoIGlmIHRoZSBwcmVjZWRpbmcgYXRvbSBtYXRjaGVzIGp1c3QgYmVmb3JlIHdoYXQKKwlmb2xsb3dzLiB8L3plcm8td2lkdGh8IHtub3QgaW4gVml9CisJTGlrZSAnKD88PXBhdHRlcm4pIiBpbiBQZXJsLCBidXQgVmltIGFsbG93cyBub24tZml4ZWQtd2lkdGggcGF0dGVybnMuCisJRXhhbXBsZQkJCW1hdGNoZXMgfgorCVwoYW5cX3NcK1wpXEA8PWZpbGUJImZpbGUiIGFmdGVyICJhbiIgYW5kIHdoaXRlIHNwYWNlIG9yIGFuCisJCQkJZW5kLW9mLWxpbmUKKwlGb3Igc3BlZWQgaXQncyBvZnRlbiBtdWNoIGJldHRlciB0byBhdm9pZCB0aGlzIG11bHRpLiAgVHJ5IHVzaW5nICJcenMiCisJaW5zdGVhZCB8L1x6c3wuICBUbyBtYXRjaCB0aGUgc2FtZSBhcyB0aGUgYWJvdmUgZXhhbXBsZToKKwkJYW5cX3NcK1x6c2ZpbGUKKworCSJcQDw9IiBhbmQgIlxAPCEiIGNoZWNrIGZvciBtYXRjaGVzIGp1c3QgYmVmb3JlIHdoYXQgZm9sbG93cy4KKwlUaGVvcmV0aWNhbGx5IHRoZXNlIG1hdGNoZXMgY291bGQgc3RhcnQgYW55d2hlcmUgYmVmb3JlIHRoaXMgcG9zaXRpb24uCisJQnV0IHRvIGxpbWl0IHRoZSB0aW1lIG5lZWRlZCwgb25seSB0aGUgbGluZSB3aGVyZSB3aGF0IGZvbGxvd3MgbWF0Y2hlcworCWlzIHNlYXJjaGVkLCBhbmQgb25lIGxpbmUgYmVmb3JlIHRoYXQgKGlmIHRoZXJlIGlzIG9uZSkuICBUaGlzIHNob3VsZAorCWJlIHN1ZmZpY2llbnQgdG8gbWF0Y2ggbW9zdCB0aGluZ3MgYW5kIG5vdCBiZSB0b28gc2xvdy4KKwlUaGUgcGFydCBvZiB0aGUgcGF0dGVybiBhZnRlciAiXEA8PSIgYW5kICJcQDwhIiBhcmUgY2hlY2tlZCBmb3IgYQorCW1hdGNoIGZpcnN0LCB0aHVzIHRoaW5ncyBsaWtlICJcMSIgZG9uJ3Qgd29yayB0byByZWZlcmVuY2UgXChcKSBpbnNpZGUKKwl0aGUgcHJlY2VkaW5nIGF0b20uICBJdCBkb2VzIHdvcmsgdGhlIG90aGVyIHdheSBhcm91bmQ6CisJRXhhbXBsZQkJCW1hdGNoZXMgfgorCVwxXEA8PSxcKFthLXpdXCtcKQkiLGFiYyIgaW4gImFiYyxhYmMiCisKKwkJCQkJCQkqL1xAPCEqCitcQDwhCU1hdGNoZXMgd2l0aCB6ZXJvIHdpZHRoIGlmIHRoZSBwcmVjZWRpbmcgYXRvbSBkb2VzIE5PVCBtYXRjaCBqdXN0CisJYmVmb3JlIHdoYXQgZm9sbG93cy4gIFRodXMgdGhpcyBtYXRjaGVzIGlmIHRoZXJlIGlzIG5vIHBvc2l0aW9uIGluIHRoZQorCWN1cnJlbnQgb3IgcHJldmlvdXMgbGluZSB3aGVyZSB0aGUgYXRvbSBtYXRjaGVzIHN1Y2ggdGhhdCBpdCBlbmRzIGp1c3QKKwliZWZvcmUgd2hhdCBmb2xsb3dzLiAgfC96ZXJvLXdpZHRofCB7bm90IGluIFZpfQorCUxpa2UgJyg/PCFwYXR0ZXJuKSIgaW4gUGVybCwgYnV0IFZpbSBhbGxvd3Mgbm9uLWZpeGVkLXdpZHRoIHBhdHRlcm5zLgorCVRoZSBtYXRjaCB3aXRoIHRoZSBwcmVjZWRpbmcgYXRvbSBpcyBtYWRlIHRvIGVuZCBqdXN0IGJlZm9yZSB0aGUgbWF0Y2gKKwl3aXRoIHdoYXQgZm9sbG93cywgdGh1cyBhbiBhdG9tIHRoYXQgZW5kcyBpbiAiLioiIHdpbGwgd29yay4KKwlXYXJuaW5nOiBUaGlzIGNhbiBiZSBzbG93IChiZWNhdXNlIG1hbnkgcG9zaXRpb25zIG5lZWQgdG8gYmUgY2hlY2tlZAorCWZvciBhIG1hdGNoKS4KKwlFeGFtcGxlCQkJbWF0Y2hlcyB+CisJXChmb29cKVxAPCFiYXIJCWFueSAiYmFyIiB0aGF0J3Mgbm90IGluICJmb29iYXIiCisJXChcL1wvLipcKVxAXDwhaW4JImluIiB3aGljaCBpcyBub3QgYWZ0ZXIgIi8vIgorCisJCQkJCQkJKi9cQD4qCitcQD4JTWF0Y2hlcyB0aGUgcHJlY2VkaW5nIGF0b20gbGlrZSBtYXRjaGluZyBhIHdob2xlIHBhdHRlcm4uIHtub3QgaW4gVml9CisJTGlrZSAnKD8+cGF0dGVybikiIGluIFBlcmwuCisJRXhhbXBsZQkJbWF0Y2hlcyB+CisJXChhKlwpXEA+YQlub3RoaW5nICh0aGUgImEqIiB0YWtlcyBhbGwgdGhlICJhIidzLCB0aGVyZSBjYW4ndCBiZQorCQkJYW5vdGhlciBvbmUgZm9sbG93aW5nKQorCisJVGhpcyBtYXRjaGVzIHRoZSBwcmVjZWRpbmcgYXRvbSBhcyBpZiBpdCB3YXMgYSBwYXR0ZXJuIGJ5IGl0c2VsZi4gIElmCisJaXQgZG9lc24ndCBtYXRjaCwgdGhlcmUgaXMgbm8gcmV0cnkgd2l0aCBzaG9ydGVyIHN1Yi1tYXRjaGVzIG9yCisJYW55dGhpbmcuICBPYnNlcnZlIHRoaXMgZGlmZmVyZW5jZTogImEqYiIgYW5kICJhKmFiIiBib3RoIG1hdGNoCisJImFhYWIiLCBidXQgaW4gdGhlIHNlY29uZCBjYXNlIHRoZSAiYSoiIG1hdGNoZXMgb25seSB0aGUgZmlyc3QgdHdvCisJImEicy4gICJcKGEqXClcQD5hYiIgd2lsbCBub3QgbWF0Y2ggImFhYWIiLCBiZWNhdXNlIHRoZSAiYSoiIG1hdGNoZXMKKwl0aGUgImFhYSIgKGFzIG1hbnkgImEicyBhcyBwb3NzaWJsZSksIHRodXMgdGhlICJhYiIgY2FuJ3QgbWF0Y2guCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiAgT3JkaW5hcnkgYXRvbXMJCQkJCSpwYXR0ZXJuLWF0b21zKgorCitBbiBvcmRpbmFyeSBhdG9tIGNhbiBiZToKKworCQkJCQkJCSovXioKK14JQXQgYmVnaW5uaW5nIG9mIHBhdHRlcm4gb3IgYWZ0ZXIgIlx8IiwgIlwoIiwgIlwlKCIgb3IgIlxuIjogbWF0Y2hlcworCXN0YXJ0LW9mLWxpbmU7IGF0IG90aGVyIHBvc2l0aW9ucywgbWF0Y2hlcyBsaXRlcmFsICdeJy4gfC96ZXJvLXdpZHRofAorCUV4YW1wbGUJCW1hdGNoZXMgfgorCV5iZWVwKAkJdGhlIHN0YXJ0IG9mIHRoZSBDIGZ1bmN0aW9uICJiZWVwIiAocHJvYmFibHkpLgorCisJCQkJCQkJKi9cXioKK1xeCU1hdGNoZXMgbGl0ZXJhbCAnXicuICBDYW4gYmUgdXNlZCBhdCBhbnkgcG9zaXRpb24gaW4gdGhlIHBhdHRlcm4uCisKKwkJCQkJCQkqL1xfXioKK1xfXglNYXRjaGVzIHN0YXJ0LW9mLWxpbmUuIHwvemVyby13aWR0aHwgIENhbiBiZSB1c2VkIGF0IGFueSBwb3NpdGlvbiBpbgorCXRoZSBwYXR0ZXJuLgorCUV4YW1wbGUJCW1hdGNoZXMgfgorCVxfcypcX15mb28Jd2hpdGUgc3BhY2UgYW5kIGJsYW5rIGxpbmVzIGFuZCB0aGVuICJmb28iIGF0CisJCQlzdGFydC1vZi1saW5lCisKKwkJCQkJCQkqLyQqCiskCUF0IGVuZCBvZiBwYXR0ZXJuIG9yIGluIGZyb250IG9mICJcfCIgb3IgIlwpIiAoInwiIG9yICIpIiBhZnRlciAiXHYiKToKKwltYXRjaGVzIGVuZC1vZi1saW5lIDxFT0w+OyBhdCBvdGhlciBwb3NpdGlvbnMsIG1hdGNoZXMgbGl0ZXJhbCAnJCcuCisJfC96ZXJvLXdpZHRofAorCisJCQkJCQkJKi9cJCoKK1wkCU1hdGNoZXMgbGl0ZXJhbCAnJCcuICBDYW4gYmUgdXNlZCBhdCBhbnkgcG9zaXRpb24gaW4gdGhlIHBhdHRlcm4uCisKKwkJCQkJCQkqL1xfJCoKK1xfJAlNYXRjaGVzIGVuZC1vZi1saW5lLiB8L3plcm8td2lkdGh8ICBDYW4gYmUgdXNlZCBhdCBhbnkgcG9zaXRpb24gaW4gdGhlCisJcGF0dGVybi4gIE5vdGUgdGhhdCAiYVxfJGIiIG5ldmVyIG1hdGNoZXMsIHNpbmNlICJiIiBjYW5ub3QgbWF0Y2ggYW4KKwllbmQtb2YtbGluZS4gIFVzZSAiYVxuYiIgaW5zdGVhZCB8L1xufC4KKwlFeGFtcGxlCQltYXRjaGVzIH4KKwlmb29cXyRcX3MqCSJmb28iIGF0IGVuZC1vZi1saW5lIGFuZCBmb2xsb3dpbmcgd2hpdGUgc3BhY2UgYW5kCisJCQlibGFuayBsaW5lcworCisuCSh3aXRoICdub21hZ2ljJzogXC4pCQkJCSovLiogKi9cLioKKwlNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyLCBidXQgbm90IGFuIGVuZC1vZi1saW5lLgorCisJCQkJCQkJKi9cXy4qCitcXy4JTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciBvciBlbmQtb2YtbGluZS4KKwlDYXJlZnVsOiAiXF8uKiIgbWF0Y2hlcyBhbGwgdGV4dCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIhCisKKwkJCQkJCQkqL1w8KgorXDwJTWF0Y2hlcyB0aGUgYmVnaW5uaW5nIG9mIGEgd29yZDogVGhlIG5leHQgY2hhciBpcyB0aGUgZmlyc3QgY2hhciBvZiBhCisJd29yZC4gIFRoZSAnaXNrZXl3b3JkJyBvcHRpb24gc3BlY2lmaWVzIHdoYXQgaXMgYSB3b3JkIGNoYXJhY3Rlci4KKwl8L3plcm8td2lkdGh8CisKKwkJCQkJCQkqL1w+KgorXD4JTWF0Y2hlcyB0aGUgZW5kIG9mIGEgd29yZDogVGhlIHByZXZpb3VzIGNoYXIgaXMgdGhlIGxhc3QgY2hhciBvZiBhCisJd29yZC4gVGhlICdpc2tleXdvcmQnIG9wdGlvbiBzcGVjaWZpZXMgd2hhdCBpcyBhIHdvcmQgY2hhcmFjdGVyLgorCXwvemVyby13aWR0aHwKKworCQkJCQkJCSovXHpzKgorXHpzCU1hdGNoZXMgYXQgYW55IHBvc2l0aW9uLCBhbmQgc2V0cyB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoIHRoZXJlOiBUaGUKKwluZXh0IGNoYXIgaXMgdGhlIGZpcnN0IGNoYXIgb2YgdGhlIHdob2xlIG1hdGNoLiB8L3plcm8td2lkdGh8CisJRXhhbXBsZTogPgorCQkvXlxzKlx6c2lmCis8CW1hdGNoZXMgYW4gImlmIiBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLCBpZ25vcmluZyB3aGl0ZSBzcGFjZS4KKwlDYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcywgdGhlIGxhc3Qgb25lIGVuY291bnRlcmVkIGluIGEgbWF0Y2hpbmcKKwlicmFuY2ggaXMgdXNlZC4gRXhhbXBsZTogPgorCQkvXCguXHstfVx6c0ZhYlwpXHszfQorPAlGaW5kcyB0aGUgdGhpcmQgb2NjdXJyZW5jZSBvZiAiRmFiIi4KKwl7bm90IGluIFZpfSB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICtzeW50YXggZmVhdHVyZX0KKwkJCQkJCQkqL1x6ZSoKK1x6ZQlNYXRjaGVzIGF0IGFueSBwb3NpdGlvbiwgYW5kIHNldHMgdGhlIGVuZCBvZiB0aGUgbWF0Y2ggdGhlcmU6IFRoZQorCXByZXZpb3VzIGNoYXIgaXMgdGhlIGxhc3QgY2hhciBvZiB0aGUgd2hvbGUgbWF0Y2guIHwvemVyby13aWR0aHwKKwlDYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcywgdGhlIGxhc3Qgb25lIGVuY291bnRlcmVkIGluIGEgbWF0Y2hpbmcKKwlicmFuY2ggaXMgdXNlZC4KKwlFeGFtcGxlOiAiZW5kXHplXChpZlx8Zm9yXCkiIG1hdGNoZXMgdGhlICJlbmQiIGluICJlbmRpZiIgYW5kCisJImVuZGZvciIuCisJe25vdCBpbiBWaX0ge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArc3ludGF4IGZlYXR1cmV9CisKKwkJCQkJCSovXCVeKiAqc3RhcnQtb2YtZmlsZSoKK1wlXglNYXRjaGVzIHN0YXJ0IG9mIHRoZSBmaWxlLiAgV2hlbiBtYXRjaGluZyB3aXRoIGEgc3RyaW5nLCBtYXRjaGVzIHRoZQorCXN0YXJ0IG9mIHRoZSBzdHJpbmcuIHtub3QgaW4gVml9CisJRm9yIGV4YW1wbGUsIHRvIGZpbmQgdGhlIGZpcnN0ICJWSU0iIGluIGEgZmlsZTogPgorCQkvXCVeXF8uXHstfVx6c1ZJTQorPAorCQkJCQkJKi9cJSQqICplbmQtb2YtZmlsZSoKK1wlJAlNYXRjaGVzIGVuZCBvZiB0aGUgZmlsZS4gIFdoZW4gbWF0Y2hpbmcgd2l0aCBhIHN0cmluZywgbWF0Y2hlcyB0aGUKKwllbmQgb2YgdGhlIHN0cmluZy4ge25vdCBpbiBWaX0KKwlOb3RlIHRoYXQgdGhpcyBkb2VzIE5PVCBmaW5kIHRoZSBsYXN0ICJWSU0iIGluIGEgZmlsZTogPgorCQkvVklNXF8uXHstfVwlJAorPAlJdCB3aWxsIGZpbmQgdGhlIG5leHQgVklNLCBiZWNhdXNlIHRoZSBwYXJ0IGFmdGVyIGl0IHdpbGwgYWx3YXlzCisJbWF0Y2guICBUaGlzIG9uZSB3aWxsIGZpbmQgdGhlIGxhc3QgIlZJTSIgaW4gdGhlIGZpbGU6ID4KKwkJL1ZJTVx6ZVwoXChWSU1cKVxAIVxfLlwpKlwlJAorPAlUaGlzIHVzZXMgfC9cQCF8IHRvIGFzY2VydGFpbiB0aGF0ICJWSU0iIGRvZXMgTk9UIG1hdGNoIGluIGFueQorCXBvc2l0aW9uIGFmdGVyIHRoZSBmaXJzdCAiVklNIi4KKwlTZWFyY2hpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBmaWxlIGJhY2t3YXJkcyBpcyBlYXNpZXIhCisKKwkJCQkJCSovXCUjKiAqY3Vyc29yLXBvc2l0aW9uKgorXCUjCU1hdGNoZXMgd2l0aCB0aGUgY3Vyc29yIHBvc2l0aW9uLiAgT25seSB3b3JrcyB3aGVuIG1hdGNoaW5nIGluIGEKKwlidWZmZXIgZGlzcGxheWVkIGluIGEgd2luZG93LiB7bm90IGluIFZpfQorCVdBUk5JTkc6IFdoZW4gdGhlIGN1cnNvciBpcyBtb3ZlZCBhZnRlciB0aGUgcGF0dGVybiB3YXMgdXNlZCwgdGhlCisJcmVzdWx0IGJlY29tZXMgaW52YWxpZC4gIFZpbSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSBtYXRjaGVzLgorCVRoaXMgaXMgZXNwZWNpYWxseSByZWxldmFudCBmb3Igc3ludGF4IGhpZ2hsaWdodGluZyBhbmQgJ2hsc2VhcmNoJy4KKwlJbiBvdGhlciB3b3JkczogV2hlbiB0aGUgY3Vyc29yIG1vdmVzIHRoZSBkaXNwbGF5IGlzbid0IHVwZGF0ZWQgZm9yCisJdGhpcyBjaGFuZ2UuICBBbiB1cGRhdGUgaXMgZG9uZSBmb3IgbGluZXMgd2hpY2ggYXJlIGNoYW5nZWQgKHRoZSB3aG9sZQorCWxpbmUgaXMgdXBkYXRlZCkgb3Igd2hlbiB1c2luZyB0aGUgfENUUkwtTHwgY29tbWFuZCAodGhlIHdob2xlIHNjcmVlbgorCWlzIHVwZGF0ZWQpLiAgRXhhbXBsZSwgdG8gaGlnaGxpZ2h0IHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3I6ID4KKwkJL1xrKlwlI1xrKgorPAlXaGVuICdobHNlYXJjaCcgaXMgc2V0IGFuZCB5b3UgbW92ZSB0aGUgY3Vyc29yIGFyb3VuZCBhbmQgbWFrZSBjaGFuZ2VzCisJdGhpcyB3aWxsIGNsZWFybHkgc2hvdyB3aGVuIHRoZSBtYXRjaCBpcyB1cGRhdGVkIG9yIG5vdC4KKworCQkJCQkJKi9cJWwqICovXCU+bCogKi9cJTxsKgorXCUyM2wJTWF0Y2hlcyBpbiBhIHNwZWNpZmljIGxpbmUuCitcJTwyM2wJTWF0Y2hlcyBhYm92ZSBhIHNwZWNpZmljIGxpbmUuCitcJT4yM2wJTWF0Y2hlcyBiZWxvdyBhIHNwZWNpZmljIGxpbmUuCisJVGhlc2UgdGhyZWUgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggc3BlY2lmaWMgbGluZXMgaW4gYSBidWZmZXIuICBUaGUgIjIzIgorCWNhbiBiZSBhbnkgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgbGluZSBpcyAxLiB7bm90IGluIFZpfQorCVdBUk5JTkc6IFdoZW4gaW5zZXJ0aW5nIG9yIGRlbGV0aW5nIGxpbmVzIFZpbSBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5CisJdXBkYXRlIHRoZSBtYXRjaGVzLiAgVGhpcyBtZWFucyBTeW50YXggaGlnaGxpZ2h0aW5nIHF1aWNrbHkgYmVjb21lcworCXdyb25nLgorCUV4YW1wbGUsIHRvIGhpZ2hsaWdodCB0aGUgbGluZSB3aGVyZSB0aGUgY3Vyc29yIGN1cnJlbnRseSBpczogPgorCQk6ZXhlICcvXCUnIC4gbGluZSgiLiIpIC4gJ2wuKicKKzwJV2hlbiAnaGxzZWFyY2gnIGlzIHNldCBhbmQgeW91IG1vdmUgdGhlIGN1cnNvciBhcm91bmQgYW5kIG1ha2UgY2hhbmdlcworCXRoaXMgd2lsbCBjbGVhcmx5IHNob3cgd2hlbiB0aGUgbWF0Y2ggaXMgdXBkYXRlZCBvciBub3QuCisKKwkJCQkJCSovXCVjKiAqL1wlPmMqICovXCU8YyoKK1wlMjNjCU1hdGNoZXMgaW4gYSBzcGVjaWZpYyBjb2x1bW4uCitcJTwyM2MJTWF0Y2hlcyBiZWZvcmUgYSBzcGVjaWZpYyBjb2x1bW4uCitcJT4yM2MJTWF0Y2hlcyBhZnRlciBhIHNwZWNpZmljIGNvbHVtbi4KKwlUaGVzZSB0aHJlZSBjYW4gYmUgdXNlZCB0byBtYXRjaCBzcGVjaWZpYyBjb2x1bW5zIGluIGEgYnVmZmVyIG9yCisJc3RyaW5nLiAgVGhlICIyMyIgY2FuIGJlIGFueSBjb2x1bW4gbnVtYmVyLiAgVGhlIGZpcnN0IGNvbHVtbiBpcyAxLgorCUFjdHVhbGx5LCB0aGUgY29sdW1uIGlzIHRoZSBieXRlIG51bWJlciAodGh1cyBpdCdzIG5vdCBleGFjdGx5IHJpZ2h0CisJZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycykuICB7bm90IGluIFZpfQorCVdBUk5JTkc6IFdoZW4gaW5zZXJ0aW5nIG9yIGRlbGV0aW5nIHRleHQgVmltIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkKKwl1cGRhdGUgdGhlIG1hdGNoZXMuICBUaGlzIG1lYW5zIFN5bnRheCBoaWdobGlnaHRpbmcgcXVpY2tseSBiZWNvbWVzCisJd3JvbmcuCisJRXhhbXBsZSwgdG8gaGlnaGxpZ2h0IHRoZSBjb2x1bW4gd2hlcmUgdGhlIGN1cnNvciBjdXJyZW50bHkgaXM6ID4KKwkJOmV4ZSAnL1wlJyAuIGNvbCgiLiIpIC4gJ2MnCis8CVdoZW4gJ2hsc2VhcmNoJyBpcyBzZXQgYW5kIHlvdSBtb3ZlIHRoZSBjdXJzb3IgYXJvdW5kIGFuZCBtYWtlIGNoYW5nZXMKKwl0aGlzIHdpbGwgY2xlYXJseSBzaG93IHdoZW4gdGhlIG1hdGNoIGlzIHVwZGF0ZWQgb3Igbm90LgorCUV4YW1wbGUgZm9yIG1hdGNoaW5nIGEgc2luZ2xlIGJ5dGUgaW4gY29sdW1uIDQ0OiA+CisJCS9cJT40M2MuXCU8NDZjCis8CU5vdGUgdGhhdCAiXCU8NDZjIiBtYXRjaGVzIGluIGNvbHVtbiA0NSB3aGVuIHRoZSAiLiIgbWF0Y2hlcyBhIGJ5dGUgaW4KKwljb2x1bW4gNDQuCisJCQkJCQkqL1wldiogKi9cJT52KiAqL1wlPHYqCitcJTIzdglNYXRjaGVzIGluIGEgc3BlY2lmaWMgdmlydHVhbCBjb2x1bW4uCitcJTwyM3YJTWF0Y2hlcyBiZWZvcmUgYSBzcGVjaWZpYyB2aXJ0dWFsIGNvbHVtbi4KK1wlPjIzdglNYXRjaGVzIGFmdGVyIGEgc3BlY2lmaWMgdmlydHVhbCBjb2x1bW4uCisJVGhlc2UgdGhyZWUgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggc3BlY2lmaWMgdmlydHVhbCBjb2x1bW5zIGluIGEgYnVmZmVyCisJb3Igc3RyaW5nLiAgV2hlbiBub3QgbWF0Y2hpbmcgd2l0aCBhIGJ1ZmZlciBpbiBhIHdpbmRvdywgdGhlIG9wdGlvbgorCXZhbHVlcyBvZiB0aGUgY3VycmVudCB3aW5kb3cgYXJlIHVzZWQgKGUuZy4sICd0YWJzdG9wJykuCisJVGhlICIyMyIgY2FuIGJlIGFueSBjb2x1bW4gbnVtYmVyLiAgVGhlIGZpcnN0IGNvbHVtbiBpcyAxLgorCU5vdGUgdGhhdCBzb21lIHZpcnR1YWwgY29sdW1uIHBvc2l0aW9ucyB3aWxsIG5ldmVyIG1hdGNoLCBiZWNhdXNlIHRoZXkKKwlhcmUgaGFsZndheSBhIFRhYiBvciBvdGhlciBjaGFyYWN0ZXIgdGhhdCBvY2N1cGllcyBtb3JlIHRoYW4gb25lCisJc2NyZWVuIGNoYXJhY3Rlci4gIHtub3QgaW4gVml9CisJV0FSTklORzogV2hlbiBpbnNlcnRpbmcgb3IgZGVsZXRpbmcgdGV4dCBWaW0gZG9lcyBub3QgYXV0b21hdGljYWxseQorCXVwZGF0ZSB0aGUgbWF0Y2hlcy4gIFRoaXMgbWVhbnMgU3ludGF4IGhpZ2hsaWdodGluZyBxdWlja2x5IGJlY29tZXMKKwl3cm9uZy4KKwlFeGFtcGxlLCB0byBoaWdobGlnaHQgdGhlIGFsbCBjaGFyYWN0ZXJzIGFmdGVyIHZpcnR1YWwgY29sdW1uIDcyOiA+CisJCS9cJT43MnYuKgorPAlXaGVuICdobHNlYXJjaCcgaXMgc2V0IGFuZCB5b3UgbW92ZSB0aGUgY3Vyc29yIGFyb3VuZCBhbmQgbWFrZSBjaGFuZ2VzCisJdGhpcyB3aWxsIGNsZWFybHkgc2hvdyB3aGVuIHRoZSBtYXRjaCBpcyB1cGRhdGVkIG9yIG5vdC4KKwlUbyBtYXRjaCB0aGUgdGV4dCB1cCB0byBjb2x1bW4gMTc6ID4KKwkJLy4qXCUxN3YKKzwJQ29sdW1uIDE3IGlzIG5vdCBpbmNsdWRlZCwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlICJcJTE3diIgbWF0Y2hlcywKKwlhbmQgc2luY2UgdGhpcyBpcyBhIHwvemVyby13aWR0aHwgbWF0Y2gsIGNvbHVtbiAxNyBpc24ndCBpbmNsdWRlZCBpbgorCXRoZSBtYXRjaC4gIFRoaXMgZG9lcyB0aGUgc2FtZTogPgorCQkvLipcJTwxOHYKKzwKKworQ2hhcmFjdGVyIGNsYXNzZXM6IHtub3QgaW4gVml9CitcaQlpZGVudGlmaWVyIGNoYXJhY3RlciAoc2VlICdpc2lkZW50JyBvcHRpb24pCSovXGkqCitcSQlsaWtlICJcaSIsIGJ1dCBleGNsdWRpbmcgZGlnaXRzCQkJKi9cSSoKK1xrCWtleXdvcmQgY2hhcmFjdGVyIChzZWUgJ2lza2V5d29yZCcgb3B0aW9uKQkqL1xrKgorXEsJbGlrZSAiXGsiLCBidXQgZXhjbHVkaW5nIGRpZ2l0cwkJCSovXEsqCitcZglmaWxlIG5hbWUgY2hhcmFjdGVyIChzZWUgJ2lzZm5hbWUnIG9wdGlvbikJKi9cZioKK1xGCWxpa2UgIlxmIiwgYnV0IGV4Y2x1ZGluZyBkaWdpdHMJCQkqL1xGKgorXHAJcHJpbnRhYmxlIGNoYXJhY3RlciAoc2VlICdpc3ByaW50JyBvcHRpb24pCSovXHAqCitcUAlsaWtlICJccCIsIGJ1dCBleGNsdWRpbmcgZGlnaXRzCQkJKi9cUCoKKworTk9URTogdGhlIGFib3ZlIGFsc28gd29yayBmb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAgVGhlIG9uZXMgYmVsb3cgb25seQorbWF0Y2ggQVNDSUkgY2hhcmFjdGVycywgYXMgaW5kaWNhdGVkIGJ5IHRoZSByYW5nZS4KKworCQkJCQkJKndoaXRlc3BhY2UqICp3aGl0ZS1zcGFjZSoKK1xzCXdoaXRlc3BhY2UgY2hhcmFjdGVyOiA8U3BhY2U+IGFuZCA8VGFiPgkJKi9ccyoKK1xTCW5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlcjsgb3Bwb3NpdGUgb2YgXHMJKi9cUyoKK1xkCWRpZ2l0OgkJCQlbMC05XQkJKi9cZCoKK1xECW5vbi1kaWdpdDoJCQlbXjAtOV0JCSovXEQqCitceAloZXggZGlnaXQ6CQkJWzAtOUEtRmEtZl0JKi9ceCoKK1xYCW5vbi1oZXggZGlnaXQ6CQkJW14wLTlBLUZhLWZdCSovXFgqCitcbwlvY3RhbCBkaWdpdDoJCQlbMC03XQkJKi9cbyoKK1xPCW5vbi1vY3RhbCBkaWdpdDoJCVteMC03XQkJKi9cTyoKK1x3CXdvcmQgY2hhcmFjdGVyOgkJCVswLTlBLVphLXpfXQkqL1x3KgorXFcJbm9uLXdvcmQgY2hhcmFjdGVyOgkJW14wLTlBLVphLXpfXQkqL1xXKgorXGgJaGVhZCBvZiB3b3JkIGNoYXJhY3RlcjoJCVtBLVphLXpfXQkqL1xoKgorXEgJbm9uLWhlYWQgb2Ygd29yZCBjaGFyYWN0ZXI6CVteQS1aYS16X10JKi9cSCoKK1xhCWFscGhhYmV0aWMgY2hhcmFjdGVyOgkJW0EtWmEtel0JKi9cYSoKK1xBCW5vbi1hbHBoYWJldGljIGNoYXJhY3RlcjoJW15BLVphLXpdCSovXEEqCitcbAlsb3dlcmNhc2UgY2hhcmFjdGVyOgkJW2Etel0JCSovXGwqCitcTAlub24tbG93ZXJjYXNlIGNoYXJhY3RlcjoJW15hLXpdCQkqL1xMKgorXHUJdXBwZXJjYXNlIGNoYXJhY3RlcjoJCVtBLVpdCQkqL1x1KgorXFUJbm9uLXVwcGVyY2FzZSBjaGFyYWN0ZXIJCVteQS1aXQkJKi9cVSoKKworCU5PVEU6IFVzaW5nIHRoZSBhdG9tIGlzIGZhc3RlciB0aGFuIHRoZSBbXSBmb3JtLgorCisJTk9URTogJ2lnbm9yZWNhc2UnLCAiXGMiIGFuZCAiXEMiIGFyZSBub3QgdXNlZCBieSBjaGFyYWN0ZXIgY2xhc3Nlcy4KKworCQkJKi9cXyogKkU2MyogKi9cX2kqICovXF9JKiAqL1xfayogKi9cX0sqICovXF9mKiAqL1xfRioKKwkJCSovXF9wKiAqL1xfUCogKi9cX3MqICovXF9TKiAqL1xfZCogKi9cX0QqICovXF94KiAqL1xfWCoKKwkJCSovXF9vKiAqL1xfTyogKi9cX3cqICovXF9XKiAqL1xfaCogKi9cX0gqICovXF9hKiAqL1xfQSoKKwkJCSovXF9sKiAqL1xfTCogKi9cX3UqICovXF9VKgorXF94CVdoZXJlICJ4IiBpcyBhbnkgb2YgdGhlIGNoYXJhY3RlcnMgYWJvdmU6IFRoZSBjaGFyYWN0ZXIgY2xhc3Mgd2l0aAorCWVuZC1vZi1saW5lIGFkZGVkCisoZW5kIG9mIGNoYXJhY3RlciBjbGFzc2VzKQorCitcZQltYXRjaGVzIDxFc2M+CQkJCQkqL1xlKgorXHQJbWF0Y2hlcyA8VGFiPgkJCQkJKi9cdCoKK1xyCW1hdGNoZXMgPENSPgkJCQkJKi9ccioKK1xiCW1hdGNoZXMgPEJTPgkJCQkJKi9cYioKK1xuCW1hdGNoZXMgYW4gZW5kLW9mLWxpbmUJCQkJKi9cbioKKwlXaGVuIG1hdGNoaW5nIGluIGEgc3RyaW5nIGluc3RlYWQgb2YgYnVmZmVyIHRleHQgYSBsaXRlcmFsIG5ld2xpbmUKKwljaGFyYWN0ZXIgaXMgbWF0Y2hlZC4KKworfgltYXRjaGVzIHRoZSBsYXN0IGdpdmVuIHN1YnN0aXR1dGUgc3RyaW5nCSovfiogKi9cfioKKworXChcKQlBIHBhdHRlcm4gZW5jbG9zZWQgYnkgZXNjYXBlZCBwYXJlbnRoZXNlcy4JKi9cKCogKi9cKFwpKiAqL1wpKgorCUUuZy4sICJcKF5hXCkiIG1hdGNoZXMgJ2EnIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUuICAqRTUxKiAqRTU0KiAqRTU1KgorCitcMSAgICAgIE1hdGNoZXMgdGhlIHNhbWUgc3RyaW5nIHRoYXQgd2FzIG1hdGNoZWQgYnkJKi9cMSogKkU2NSoKKwl0aGUgZmlyc3Qgc3ViLWV4cHJlc3Npb24gaW4gXCggYW5kIFwpLiB7bm90IGluIFZpfQorCUV4YW1wbGU6ICJcKFthLXpdXCkuXDEiIG1hdGNoZXMgImF0YSIsICJlaGUiLCAidG90IiwgZXRjLgorXDIgICAgICBMaWtlICJcMSIsIGJ1dCB1c2VzIHNlY29uZCBzdWItZXhwcmVzc2lvbiwJKi9cMioKKyAgIC4uLgkJCQkJCQkqL1wzKgorXDkgICAgICBMaWtlICJcMSIsIGJ1dCB1c2VzIG5pbnRoIHN1Yi1leHByZXNzaW9uLgkqL1w5KgorCU5vdGU6IFRoZSBudW1iZXJpbmcgb2YgZ3JvdXBzIGlzIGRvbmUgYmFzZWQgb24gd2hpY2ggIlwoIiBjb21lcyBmaXJzdAorCWluIHRoZSBwYXR0ZXJuIChnb2luZyBsZWZ0IHRvIHJpZ2h0KSwgTk9UIGJhc2VkIG9uIHdoYXQgaXMgbWF0Y2hlZAorCWZpcnN0LgorCitcJShcKQlBIHBhdHRlcm4gZW5jbG9zZWQgYnkgZXNjYXBlZCBwYXJlbnRoZXNlcy4JKi9cJShcKSogKi9cJSgqICpFNTMqCisJSnVzdCBsaWtlIFwoXCksIGJ1dCB3aXRob3V0IGNvdW50aW5nIGl0IGFzIGEgc3ViLWV4cHJlc3Npb24uICBUaGlzCisJYWxsb3dzIHVzaW5nIG1vcmUgZ3JvdXBzIGFuZCBpdCdzIGEgbGl0dGxlIGJpdCBmYXN0ZXIuCisJe25vdCBpbiBWaX0KKworeAlBIHNpbmdsZSBjaGFyYWN0ZXIsIHdpdGggbm8gc3BlY2lhbCBtZWFuaW5nLCBtYXRjaGVzIGl0c2VsZgorCisJCQkJCQkJKi9cKiAqL1xcKgorXHgJQSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBzaW5nbGUgY2hhcmFjdGVyLCB3aXRoIG5vIHNwZWNpYWwgbWVhbmluZywKKwlpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbnMKKworW10JKHdpdGggJ25vbWFnaWMnOiBcW10pCQkqL1tdKiAqL1xbXSogKi9cX1tdKiAqL2NvbGxlY3Rpb24qCitcX1tdCisJQSBjb2xsZWN0aW9uLiBUaGlzIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBlbmNsb3NlZCBpbiBicmFja2V0cy4KKwlJdCBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIGluIHRoZSBjb2xsZWN0aW9uLgorCUV4YW1wbGUJCW1hdGNoZXMgfgorCVt4eXpdCQlhbnkgJ3gnLCAneScgb3IgJ3onCisJW2EtekEtWl0kCWFueSBhbHBoYWJldGljIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIGEgbGluZQorCVxjW2Etel0kCXNhbWUKKworCVdpdGggIlxfIiBwcmVwZW5kZWQgdGhlIGNvbGxlY3Rpb24gYWxzbyBpbmNsdWRlcyB0aGUgZW5kLW9mLWxpbmUuCisJVGhlIHNhbWUgY2FuIGJlIGRvbmUgYnkgaW5jbHVkaW5nICJcbiIgaW4gdGhlIGNvbGxlY3Rpb24uICBUaGUKKwllbmQtb2YtbGluZSBpcyBhbHNvIG1hdGNoZWQgd2hlbiB0aGUgY29sbGVjdGlvbiBzdGFydHMgd2l0aCAiXiIhICBUaHVzCisJIlxfW15hYl0iIG1hdGNoZXMgdGhlIGVuZC1vZi1saW5lIGFuZCBhbnkgY2hhcmFjdGVyIGJ1dCAiYSIgYW5kICJiIi4KKwlUaGlzIG1ha2VzIGl0IFZpIGNvbXBhdGlibGU6IFdpdGhvdXQgdGhlICJcXyIgb3IgIlxuIiB0aGUgY29sbGVjdGlvbgorCWRvZXMgbm90IG1hdGNoIGFuIGVuZC1vZi1saW5lLgorCisJSWYgdGhlIHNlcXVlbmNlIGJlZ2lucyB3aXRoICJeIiwgaXQgbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciBOT1QKKwlpbiB0aGUgY29sbGVjdGlvbjogIlteeHl6XSIgbWF0Y2hlcyBhbnl0aGluZyBidXQgJ3gnLCAneScgYW5kICd6Jy4KKwktIElmIHR3byBjaGFyYWN0ZXJzIGluIHRoZSBzZXF1ZW5jZSBhcmUgc2VwYXJhdGVkIGJ5ICctJywgdGhpcyBpcworCSAgc2hvcnRoYW5kIGZvciB0aGUgZnVsbCBsaXN0IG9mIEFTQ0lJIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGVtLiAgRS5nLiwKKwkgICJbMC05XSIgbWF0Y2hlcyBhbnkgZGVjaW1hbCBkaWdpdC4KKwktIEEgY2hhcmFjdGVyIGNsYXNzIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIHRvIHRoZSBzZXQgb2YgY2hhcmFjdGVycworCSAgYmVsb25naW5nIHRvIHRoYXQgY2hhcmFjdGVyIGNsYXNzLiAgVGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgY2xhc3NlcworCSAgYXJlIHN1cHBvcnRlZDoKKwkJCSAgTmFtZQkJQ29udGVudHMgfgorKls6YWxudW06XSoJCSAgWzphbG51bTpdICAgICBsZXR0ZXJzIGFuZCBkaWdpdHMKKypbOmFscGhhOl0qCQkgIFs6YWxwaGE6XSAgICAgbGV0dGVycworKls6Ymxhbms6XSoJCSAgWzpibGFuazpdICAgICBzcGFjZSBhbmQgdGFiIGNoYXJhY3RlcnMKKypbOmNudHJsOl0qCQkgIFs6Y250cmw6XSAgICAgY29udHJvbCBjaGFyYWN0ZXJzCisqWzpkaWdpdDpdKgkJICBbOmRpZ2l0Ol0gICAgIGRlY2ltYWwgZGlnaXRzCisqWzpncmFwaDpdKgkJICBbOmdyYXBoOl0gICAgIHByaW50YWJsZSBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBzcGFjZQorKls6bG93ZXI6XSoJCSAgWzpsb3dlcjpdICAgICBsb3dlcmNhc2UgbGV0dGVycyAoYWxsIGxldHRlcnMgd2hlbgorCQkJCQknaWdub3JlY2FzZScgaXMgdXNlZCkKKypbOnByaW50Ol0qCQkgIFs6cHJpbnQ6XSAgICAgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW5jbHVkaW5nIHNwYWNlCisqWzpwdW5jdDpdKgkJICBbOnB1bmN0Ol0gICAgIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMKKypbOnNwYWNlOl0qCQkgIFs6c3BhY2U6XSAgICAgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzCisqWzp1cHBlcjpdKgkJICBbOnVwcGVyOl0gICAgIHVwcGVyY2FzZSBsZXR0ZXJzIChhbGwgbGV0dGVycyB3aGVuCisJCQkJCSdpZ25vcmVjYXNlJyBpcyB1c2VkKQorKls6eGRpZ2l0Ol0qCQkgIFs6eGRpZ2l0Ol0gICAgaGV4YWRlY2ltYWwgZGlnaXRzCisqWzpyZXR1cm46XSoJCSAgWzpyZXR1cm46XQl0aGUgPENSPiBjaGFyYWN0ZXIKKypbOnRhYjpdKgkJICBbOnRhYjpdCXRoZSA8VGFiPiBjaGFyYWN0ZXIKKypbOmVzY2FwZTpdKgkJICBbOmVzY2FwZTpdCXRoZSA8RXNjPiBjaGFyYWN0ZXIKKypbOmJhY2tzcGFjZTpdKgkJICBbOmJhY2tzcGFjZTpdCXRoZSA8QlM+IGNoYXJhY3RlcgorCSAgVGhlIGJyYWNrZXRzIGluIGNoYXJhY3RlciBjbGFzcyBleHByZXNzaW9ucyBhcmUgYWRkaXRpb25hbCB0byB0aGUKKwkgIGJyYWNrZXRzIGRlbGltaXRpbmcgYSBjb2xsZWN0aW9uLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgaXMgYQorCSAgcGxhdXNpYmxlIHBhdHRlcm4gZm9yIGEgVU5JWCBmaWxlbmFtZTogIlstLi9bOmFsbnVtOl1ffl1cKyIgVGhhdCBpcywKKwkgIGEgbGlzdCBvZiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBlYWNoIG9mIHdoaWNoIGlzIGVpdGhlciAnLScsICcuJywKKwkgICcvJywgYWxwaGFiZXRpYywgbnVtZXJpYywgJ18nIG9yICd+Jy4KKwkgIFRoZXNlIGl0ZW1zIG9ubHkgd29yayBmb3IgOC1iaXQgY2hhcmFjdGVycy4KKwkJCQkJCQkgICovXF0qCisJLSBUbyBpbmNsdWRlIGEgbGl0ZXJhbCAnXScsICdeJywgJy0nIG9yICdcJyBpbiB0aGUgY29sbGVjdGlvbiwgcHV0IGEKKwkgIGJhY2tzbGFzaCBiZWZvcmUgaXQ6ICJbeHl6XF1dIiwgIltcXnh5el0iLCAiW3h5XC16XSIgYW5kICJbeHl6XFxdIi4KKwkgIChOb3RlOiBQT1NJWCBkb2VzIG5vdCBzdXBwb3J0IHRoZSB1c2Ugb2YgYSBiYWNrc2xhc2ggdGhpcyB3YXkpLiAgRm9yCisJICAnXScgeW91IGNhbiBhbHNvIG1ha2UgaXQgdGhlIGZpcnN0IGNoYXJhY3RlciAoZm9sbG93aW5nIGEgcG9zc2libGUKKwkgICJeIik6ICAiW114eXpdIiBvciAiW15deHl6XSIge25vdCBpbiBWaX0uCisJICBGb3IgJy0nIHlvdSBjYW4gYWxzbyBtYWtlIGl0IHRoZSBmaXJzdCBvciBsYXN0IGNoYXJhY3RlcjogIlsteHl6XSIsCisJICAiW14teHl6XSIgb3IgIlt4eXotXSIuICBGb3IgJ1wnIHlvdSBjYW4gYWxzbyBsZXQgaXQgYmUgZm9sbG93ZWQgYnkKKwkgIGFueSBjaGFyYWN0ZXIgdGhhdCdzIG5vdCBpbiAiXl0tXGJlcnRuIi4gICJbXHh5el0iIG1hdGNoZXMgJ1wnLCAneCcsCisJICAneScgYW5kICd6Jy4gIEl0J3MgYmV0dGVyIHRvIHVzZSAiXFwiIHRob3VnaCwgZnV0dXJlIGV4cGFuc2lvbnMgbWF5CisJICB1c2Ugb3RoZXIgY2hhcmFjdGVycyBhZnRlciAnXCcuCisJLSBUaGUgZm9sbG93aW5nIHRyYW5zbGF0aW9ucyBhcmUgYWNjZXB0ZWQgd2hlbiB0aGUgJ2wnIGZsYWcgaXMgbm90CisJICBpbmNsdWRlZCBpbiAnY3BvcHRpb25zJyB7bm90IGluIFZpfToKKwkJXGUJPEVzYz4KKwkJXHQJPFRhYj4KKwkJXHIJPENSPgkoTk9UIGVuZC1vZi1saW5lISkKKwkJXGIJPEJTPgorCSAgTk9URTogVGhlIG90aGVyIGJhY2tzbGFzaCBjb2RlcyBtZW50aW9uZWQgYWJvdmUgZG8gbm90IHdvcmsgaW5zaWRlCisJICBbXSEKKwktIE1hdGNoaW5nIHdpdGggYSBjb2xsZWN0aW9uIGNhbiBiZSBzbG93LCBiZWNhdXNlIGVhY2ggY2hhcmFjdGVyIGluCisJICB0aGUgdGV4dCBoYXMgdG8gYmUgY29tcGFyZWQgd2l0aCBlYWNoIGNoYXJhY3RlciBpbiB0aGUgY29sbGVjdGlvbi4KKwkgIFVzZSBvbmUgb2YgdGhlIG90aGVyIGF0b21zIGFib3ZlIHdoZW4gcG9zc2libGUuICBFeGFtcGxlOiAiXGQiIGlzCisJICBtdWNoIGZhc3RlciB0aGFuICJbMC05XSIgYW5kIG1hdGNoZXMgdGhlIHNhbWUgY2hhcmFjdGVycy4KKworCQkJCQkJKi9cJVtdKiAqRTY5KiAqRTcwKiAqRTM2OSoKK1wlW10JQSBsaXN0IG9mIG9wdGlvbmFsbHkgbWF0Y2hlZCBhdG9tcy4gIFRoaXMgYWx3YXlzIG1hdGNoZXMuCisJSXQgbWF0Y2hlcyBhcyBtdWNoIG9mIHRoZSBsaXN0IG9mIGF0b21zIGl0IGNvbnRhaW5zIGFzIHBvc3NpYmxlLiAgVGh1cworCWl0IHN0b3BzIGF0IHRoZSBmaXJzdCBhdG9tIHRoYXQgZG9lc24ndCBtYXRjaC4gIEZvciBleGFtcGxlOiA+CisJCS9yXCVbZWFkXQorPAltYXRjaGVzICJyIiwgInJlIiwgInJlYSIgb3IgInJlYWQiLiAgVGhlIGxvbmdlc3QgdGhhdCBtYXRjaGVzIGlzIHVzZWQuCisJVG8gbWF0Y2ggdGhlIEV4IGNvbW1hbmQgImZ1bmN0aW9uIiwgd2hlcmUgImZ1IiBpcyByZXF1aXJlZCBhbmQKKwkibmN0aW9uIiBpcyBvcHRpb25hbCwgdGhpcyB3b3VsZCB3b3JrOiA+CisJCS9cPGZ1XCVbbmN0aW9uXVw+Cis8CVRoZSBlbmQtb2Ytd29yZCBhdG9tICJcPiIgaXMgdXNlZCB0byBhdm9pZCBtYXRjaGluZyAiZnUiIGluICJmdWxsIi4KKwlJdCBnZXRzIG1vcmUgY29tcGxpY2F0ZWQgd2hlbiB0aGUgYXRvbXMgYXJlIG5vdCBvcmRpbmFyeSBjaGFyYWN0ZXJzLgorCVlvdSBkb24ndCBvZnRlbiBoYXZlIHRvIHVzZSBpdCwgYnV0IGl0IGlzIHBvc3NpYmxlLiAgRXhhbXBsZTogPgorCQkvXDxyXCVbW2VvXWFkXVw+Cis8CU1hdGNoZXMgdGhlIHdvcmRzICJyIiwgInJlIiwgInJvIiwgInJlYSIsICJyb2EiLCAicmVhZCIgYW5kICJyb2FkIi4KKwl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICtzeW50YXggZmVhdHVyZX0KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIElnbm9yaW5nIGNhc2UgaW4gYSBwYXR0ZXJuCQkJCQkqL2lnbm9yZWNhc2UqCisKK0lmIHRoZSAnaWdub3JlY2FzZScgb3B0aW9uIGlzIG9uLCB0aGUgY2FzZSBvZiBub3JtYWwgbGV0dGVycyBpcyBpZ25vcmVkLgorJ3NtYXJ0Y2FzZScgY2FuIGJlIHNldCB0byBpZ25vcmUgY2FzZSB3aGVuIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIGxvd2VyY2FzZQorbGV0dGVycyBvbmx5LgorCQkJCQkJCSovXGMqICovXEMqCitXaGVuICJcYyIgYXBwZWFycyBhbnl3aGVyZSBpbiB0aGUgcGF0dGVybiwgdGhlIHdob2xlIHBhdHRlcm4gaXMgaGFuZGxlZCBsaWtlCisnaWdub3JlY2FzZScgaXMgb24uICBUaGUgYWN0dWFsIHZhbHVlIG9mICdpZ25vcmVjYXNlJyBhbmQgJ3NtYXJ0Y2FzZScgaXMKK2lnbm9yZWQuICAiXEMiIGRvZXMgdGhlIG9wcG9zaXRlOiBGb3JjZSBtYXRjaGluZyBjYXNlIGZvciB0aGUgd2hvbGUgcGF0dGVybi4KK3tvbmx5IFZpbSBzdXBwb3J0cyBcYyBhbmQgXEN9CitOb3RlIHRoYXQgJ2lnbm9yZWNhc2UnLCAiXGMiIGFuZCAiXEMiIGFyZSBub3QgdXNlZCBmb3IgdGhlIGNoYXJhY3RlciBjbGFzc2VzLgorCitFeGFtcGxlczoKKyAgICAgIHBhdHRlcm4JJ2lnbm9yZWNhc2UnICAnc21hcnRjYXNlJwltYXRjaGVzIH4KKwlmb28JICBvZmYJCS0JCWZvbworCWZvbwkgIG9uCQktCQlmb28gRm9vIEZPTworCUZvbwkgIG9uCQlvZmYJCWZvbyBGb28gRk9PCisJRm9vCSAgb24JCW9uCQkgICAgRm9vCisJXGNmb28JICAtCQktCQlmb28gRm9vIEZPTworCWZvb1xDCSAgLQkJLQkJZm9vCisKKwkJCQkJCQkqL1xaKgorV2hlbiAiXFoiIGFwcGVhcnMgYW55d2hlcmUgaW4gdGhlIHBhdHRlcm4sIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkLgorVGh1cyBvbmx5IHRoZSBiYXNlIGNoYXJhY3RlcnMgbmVlZCB0byBtYXRjaCwgdGhlIGNvbXBvc2luZyBjaGFyYWN0ZXJzIG1heSBiZQorZGlmZmVyZW50IGFuZCB0aGUgbnVtYmVyIG9mIGNvbXBvc2luZyBjaGFyYWN0ZXJzIG1heSBkaWZmZXIuICBPbmx5IHJlbGV2YW50Cit3aGVuICdlbmNvZGluZycgaXMgInV0Zi04Ii4KKworVGVjaG5pY2FsIGRldGFpbDoJCQkJKk5MLXVzZWQtZm9yLU51bCoKKzxOdWw+IGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgYXJlIHN0b3JlZCBhcyA8Tkw+IGluIG1lbW9yeS4gIEluIHRoZSBkaXNwbGF5Cit0aGV5IGFyZSBzaG93biBhcyAiXkAiLiAgVGhlIHRyYW5zbGF0aW9uIGlzIGRvbmUgd2hlbiByZWFkaW5nIGFuZCB3cml0aW5nCitmaWxlcy4gIFRvIG1hdGNoIGEgPE51bD4gd2l0aCBhIHNlYXJjaCBwYXR0ZXJuIHlvdSBjYW4ganVzdCBlbnRlciBDVFJMLUAgb3IKKyJDVFJMLVYgMDAwIi4gIFRoaXMgaXMgcHJvYmFibHkganVzdCB3aGF0IHlvdSBleHBlY3QuICBJbnRlcm5hbGx5IHRoZQorY2hhcmFjdGVyIGlzIHJlcGxhY2VkIHdpdGggYSA8Tkw+IGluIHRoZSBzZWFyY2ggcGF0dGVybi4gIFdoYXQgaXMgdW51c3VhbCBpcwordGhhdCB0eXBpbmcgQ1RSTC1WIENUUkwtSiBhbHNvIGluc2VydHMgYSA8Tkw+LCB0aHVzIGFsc28gc2VhcmNoZXMgZm9yIGEgPE51bD4KK2luIHRoZSBmaWxlLiAge1ZpIGNhbm5vdCBoYW5kbGUgPE51bD4gY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBhdCBhbGx9CisKKwkJCQkJCSpDUi11c2VkLWZvci1OTCoKK1doZW4gJ2ZpbGVmb3JtYXQnIGlzICJtYWMiLCA8Tkw+IGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgYXJlIHN0b3JlZCBhcyA8Q1I+CitjaGFyYWN0ZXJzIGludGVybmFsbHkuICBJbiB0aGUgZGlzcGxheSB0aGV5IGFyZSBzaG93biBhcyAiXk0iLiAgT3RoZXJ3aXNlIHRoaXMKK3dvcmtzIHNpbWlsYXIgdG8gdGhlIHVzYWdlIG9mIDxOTD4gZm9yIGEgPE51bD4uCisKK1doZW4gd29ya2luZyB3aXRoIGV4cHJlc3Npb24gZXZhbHVhdGlvbiwgYSA8Tkw+IGNoYXJhY3RlciBpbiB0aGUgcGF0dGVybgorbWF0Y2hlcyBhIDxOTD4gaW4gdGhlIHN0cmluZy4gIFRoZSB1c2Ugb2YgIlxuIiAoYmFja3NsYXNoIG4pIHRvIG1hdGNoIGEgPE5MPgorZG9lc24ndCB3b3JrIHRoZXJlLCBpdCBvbmx5IHdvcmtzIHRvIG1hdGNoIHRleHQgaW4gdGhlIGJ1ZmZlci4KKworCQkJCQkJKnBhdHRlcm4tbXVsdGktYnl0ZSoKK1BhdHRlcm5zIHdpbGwgYWxzbyB3b3JrIHdpdGggbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLCBtb3N0bHkgYXMgeW91IHdvdWxkCitleHBlY3QuICBCdXQgaW52YWxpZCBieXRlcyBtYXkgY2F1c2UgdHJvdWJsZSwgYSBwYXR0ZXJuIHdpdGggYW4gaW52YWxpZCBieXRlCit3aWxsIHByb2JhYmx5IG5ldmVyIG1hdGNoLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIENvbXBhcmUgd2l0aCBQZXJsIHBhdHRlcm5zCQkJCSpwZXJsLXBhdHRlcm5zKgorCitWaW0ncyByZWdleGVzIGFyZSBtb3N0IHNpbWlsYXIgdG8gUGVybCdzLCBpbiB0ZXJtcyBvZiB3aGF0IHlvdSBjYW4gZG8uICBUaGUKK2RpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGlzIG1vc3RseSBqdXN0IG5vdGF0aW9uOyAgaGVyZSdzIGEgc3VtbWFyeSBvZiB3aGVyZQordGhleSBkaWZmZXI6CisKK0NhcGFiaWxpdHkJCQlpbiBWaW1zcGVhawlpbiBQZXJsc3BlYWsgfgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZm9yY2UgY2FzZSBpbnNlbnNpdGl2aXR5CVxjCQkoP2kpCitmb3JjZSBjYXNlIHNlbnNpdGl2aXR5CQlcQwkJKD8taSkKK2JhY2tyZWYtbGVzcyBncm91cGluZwkJXCUoYXRvbSkJKD86YXRvbSkKK2NvbnNlcnZhdGl2ZSBxdWFudGlmaWVycwlcey1uLG19CQkqPywgKz8sID8/LCB7fT8KKzAtd2lkdGggbWF0Y2gJCQlhdG9tXEA9CQkoPz1hdG9tKQorMC13aWR0aCBub24tbWF0Y2gJCWF0b21cQCEJCSg/IWF0b20pCiswLXdpZHRoIHByZWNlZGluZyBtYXRjaAkJYXRvbVxAPD0JKD88PWF0b20pCiswLXdpZHRoIHByZWNlZGluZyBub24tbWF0Y2gJYXRvbVxAPCEJKD88IWF0b20pCittYXRjaCB3aXRob3V0IHJldHJ5CQlhdG9tXEA+CQkoPz5hdG9tKQorCitWaW0gYW5kIFBlcmwgaGFuZGxlIG5ld2xpbmUgY2hhcmFjdGVycyBpbnNpZGUgYSBzdHJpbmcgYSBiaXQgZGlmZmVyZW50bHk6CisKK0luIFBlcmwsIF4gYW5kICQgb25seSBtYXRjaCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgdGV4dCwKK2J5IGRlZmF1bHQsIGJ1dCB5b3UgY2FuIHNldCB0aGUgJ20nIGZsYWcsIHdoaWNoIGxldHMgdGhlbSBtYXRjaCBhdAorZW1iZWRkZWQgbmV3bGluZXMgYXMgd2VsbC4gIFlvdSBjYW4gYWxzbyBzZXQgdGhlICdzJyBmbGFnLCB3aGljaCBjYXVzZXMKK2EgLiB0byBtYXRjaCBuZXdsaW5lcyBhcyB3ZWxsLiAgKEJvdGggdGhlc2UgZmxhZ3MgY2FuIGJlIGNoYW5nZWQgaW5zaWRlCithIHBhdHRlcm4gdXNpbmcgdGhlIHNhbWUgc3ludGF4IHVzZWQgZm9yIHRoZSBpIGZsYWcgYWJvdmUsIEJUVy4pCisKK09uIHRoZSBvdGhlciBoYW5kLCBWaW0ncyBeIGFuZCAkIGFsd2F5cyBtYXRjaCBhdCBlbWJlZGRlZCBuZXdsaW5lcywgYW5kCit5b3UgZ2V0IHR3byBzZXBhcmF0ZSBhdG9tcywgXCVeIGFuZCBcJSQsIHdoaWNoIG9ubHkgbWF0Y2ggYXQgdGhlIHZlcnkKK3N0YXJ0IGFuZCBlbmQgb2YgdGhlIHRleHQsIHJlc3BlY3RpdmVseS4gIFZpbSBzb2x2ZXMgdGhlIHNlY29uZCBwcm9ibGVtCitieSBnaXZpbmcgeW91IHRoZSBcXyAibW9kaWZpZXIiOiAgcHV0IGl0IGluIGZyb250IG9mIGEgLiBvciBhIGNoYXJhY3RlcgorY2xhc3MsIGFuZCB0aGV5IHdpbGwgbWF0Y2ggbmV3bGluZXMgYXMgd2VsbC4KKworRmluYWxseSwgdGhlc2UgY29uc3RydWN0cyBhcmUgdW5pcXVlIHRvIFBlcmw6CistIGV4ZWN1dGlvbiBvZiBhcmJpdHJhcnkgY29kZSBpbiB0aGUgcmVnZXg6ICAoP3twZXJsIGNvZGV9KQorLSBjb25kaXRpb25hbCBleHByZXNzaW9uczogICg/KGNvbmRpdGlvbil0cnVlLWV4cHJ8ZmFsc2UtZXhwcikKKworLi4uYW5kIHRoZXNlIGFyZSB1bmlxdWUgdG8gVmltOgorLSBjaGFuZ2luZyB0aGUgbWFnaWMtbmVzcyBvZiBhIHBhdHRlcm46ICBcdiBcViBcbSBcTQorICAgKHZlcnkgdXNlZnVsIGZvciBhdm9pZGluZyBiYWNrc2xhc2hpdGlzKQorLSBzZXF1ZW5jZSBvZiBvcHRpb25hbGx5IG1hdGNoaW5nIGF0b21zOiAgXCVbYXRvbXNdCistIFwmICh3aGljaCBpcyB0byBcfCB3aGF0ICJhbmQiIGlzIHRvICJvciI7ICBpdCBmb3JjZXMgc2V2ZXJhbCBicmFuY2hlcworICAgdG8gbWF0Y2ggYXQgb25lIHNwb3QpCistIG1hdGNoaW5nIGxpbmVzL2NvbHVtbnMgYnkgbnVtYmVyOiAgXCU1bCBcJTVjIFwlNXYKKy0gbGltaXRpbmcgdGhlICJyZXR1cm4gdmFsdWUiIG9mIGEgcmVnZXg6ICBcenMgXHplCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gSGlnaGxpZ2h0aW5nIG1hdGNoZXMJCQkJCSptYXRjaC1oaWdobGlnaHQqCisKKwkJCQkJCQkqOm1hdCogKjptYXRjaCoKKzptYXRbY2hdIHtncm91cH0gL3twYXR0ZXJufS8KKwkJRGVmaW5lIGEgcGF0dGVybiB0byBoaWdobGlnaHQgaW4gdGhlIGN1cnJlbnQgd2luZG93LiAgSXQgd2lsbAorCQliZSBoaWdobGlnaHRlZCB3aXRoIHtncm91cH0uICBFeGFtcGxlOiA+CisJCQk6aGlnaGxpZ2h0IE15R3JvdXAgY3Rlcm1iZz1ncmVlbiBndWliZz1ncmVlbgorCQkJOm1hdGNoIE15R3JvdXAgL1RPRE8vCis8CQlJbnN0ZWFkIG9mIC8vIGFueSBjaGFyYWN0ZXIgY2FuIGJlIHVzZWQgdG8gbWFyayB0aGUgc3RhcnQgYW5kCisJCWVuZCBvZiB0aGUge3BhdHRlcm59LiAgV2F0Y2ggb3V0IGZvciB1c2luZyBzcGVjaWFsIGNoYXJhY3RlcnMsCisJCXN1Y2ggYXMgJyInIGFuZCAnfCcuCisJCXtncm91cH0gbXVzdCBleGlzdCBhdCB0aGUgbW9tZW50IHRoaXMgY29tbWFuZCBpcyBleGVjdXRlZC4KKwkJVGhlIG1hdGNoIG92ZXJyaWRlcyB0aGUgJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcuCisJCSdpZ25vcmVjYXNlJyBkb2VzIG5vdCBhcHBseSwgdXNlIHwvXGN8IGluIHRoZSBwYXR0ZXJuIHRvCisJCWlnbm9yZSBjYXNlLiAgT3RoZXJ3aXNlIGNhc2UgaXMgbm90IGlnbm9yZWQuCisJCU5vdGUgdGhhdCBoaWdobGlnaHRpbmcgdGhlIGxhc3QgdXNlZCBzZWFyY2ggcGF0dGVybiB3aXRoCisJCSdobHNlYXJjaCcgaXMgdXNlZCBpbiBhbGwgd2luZG93cywgd2hpbGUgdGhlIHBhdHRlcm4gZGVmaW5lZAorCQl3aXRoICI6bWF0Y2giIG9ubHkgZXhpc3RzIGluIHRoZSBjdXJyZW50IHdpbmRvdy4gIEl0IGlzIGtlcHQKKwkJd2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciBidWZmZXIuCisJCUFub3RoZXIgZXhhbXBsZSwgd2hpY2ggaGlnaGxpZ2h0cyBhbGwgY2hhcmFjdGVycyBpbiB2aXJ0dWFsCisJCWNvbHVtbiA3MiBhbmQgbW9yZTogPgorCQkJOmhpZ2hsaWdodCByaWdodE1hcmdpbiB0ZXJtPWJvbGQgY3Rlcm1mZz1ibHVlIGd1aWZnPWJsdWUKKwkJCTptYXRjaCByaWdodE1hcmdpbiAvLlwlPjcydi8KKzwJCVRvIGhpZ2hsaWdodCBhbGwgY2hhcmFjdGVyIHRoYXQgYXJlIGluIHZpcnR1YWwgY29sdW1uIDc6ID4KKwkJCTpoaWdobGlnaHQgY29sOCBjdGVybWJnPWdyZXkgZ3VpYmc9Z3JleQorCQkJOm1hdGNoIGNvbDggL1wlPDh2LlwlPjd2LworPAkJTm90ZSB0aGUgdXNlIG9mIHR3byBpdGVtcyB0byBhbHNvIG1hdGNoIGEgY2hhcmFjdGVyIHRoYXQKKwkJb2NjdXBpZXMgbW9yZSB0aGFuIG9uZSB2aXJ0dWFsIGNvbHVtbiwgc3VjaCBhcyBhIFRBQi4KKworOm1hdFtjaF0KKzptYXRbY2hdIG5vbmUKKwkJQ2xlYXIgYSBwcmV2aW91c2x5IGRlZmluZWQgbWF0Y2ggcGF0dGVybi4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3BpX2V4cGwudHh0IGIvcnVudGltZS9kb2MvcGlfZXhwbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5NjJmZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3BpX2V4cGwudHh0CkBAIC0wLDAgKzEsMjE1IEBACisqcGlfZXhwbC50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDIgTm92IDA4CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IE0gQSBBeml6IEFobWVkCisJCQkJCSAgdXBkYXRlZCBieSBNYXJrIFdhZ2dvbmVyCisKKworCQkJCQkJKmZpbGUtZXhwbG9yZXIqICpmaWxlLWJyb3dzZXIqCitQbHVnaW4gZm9yIGV4cGxvcmluZyAob3IgYnJvd3NpbmcpIGRpcmVjdG9yaWVzIGFuZCBmaWxlcworCisxLiBTdGFydGluZyB0aGUgZmlsZSBleHBsb3JlcgkJfGV4cGwtc3RhcnRpbmd8CisKK1RoZSBmdW5jdGlvbmFsaXR5IG1lbnRpb25lZCBoZXJlIGlzIGEgfHN0YW5kYXJkLXBsdWdpbnwuCitUaGlzIHBsdWdpbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiAnY29tcGF0aWJsZScgaXMgbm90IHNldC4KK1lvdSBjYW4gYXZvaWQgbG9hZGluZyB0aGlzIHBsdWdpbiBieSBzZXR0aW5nIHRoZSAibG9hZGVkX2V4cGxvcmVyIiB2YXJpYWJsZTogPgorCTpsZXQgbG9hZGVkX2V4cGxvcmVyID0gMQorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhpc30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTdGFydGluZyB0aGUgZmlsZSBleHBsb3JlcgkJCQkqZXhwbC1zdGFydGluZyoKKworVGhpcyBwbHVnaW4gaXMgdXNlZCB0byBleHBsb3JlIGRpcmVjdG9yaWVzIGluc2lkZSBWaW0uIFRoZSBmaWxlIGV4cGxvcmVyIGlzCitsYXVuY2hlZCB3aGVuZXZlciB0aGUgdXNlciB0cmllcyB0byBlZGl0IGEgZGlyZWN0b3J5LgorCQkJCQkJKjpFeHBsb3JlKiAqOlNleHBsb3JlKgorVG8gbGF1bmNoIHRoZSBleHBsb3JlciBpbiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBmaWxlIGN1cnJlbnRseSBlZGl0ZWQ6ID4KKwk6RXhwbG9yZQorSWYgdGhlIGZpbGUgaGFzIGNoYW5nZXMgdGhlIHdpbmRvdyBpcyBzcGxpdC4gIFRvIGFsd2F5cyBzcGxpdCB0aGUgd2luZG93OiA+CisJOlNleHBsb3JlCitUbyBsYXVuY2ggdGhlIGV4cGxvcmVyIGluIGEgc3BlY2lmaWMgZGlyZWN0b3J5OiA+CisJOkV4cGxvcmUgZGlybmFtZQorCTpTZXhwbG9yZSBkaXJuYW1lCisKK0Zyb20gaW5zaWRlIHRoZSBleHBsb3JlciBtb3ZlIHlvdXIgY3Vyc29yIHRvIGEgbGluZSBjb250YWluaW5nIGEgZmlsZSBvcgorZGlyZWN0b3J5IG5hbWUuICBUaGUgZm9sbG93aW5nIGNvbW1hbmQga2V5cyBhcmUgYXZhaWxhYmxlOgorCisgIDxlbnRlcj4gd2lsbCBvcGVuIHRoZSBmaWxlIGluIHRoZSB3aW5kb3cgdGhlIGV4cGxvcmVyIGlzIGN1cnJlbnRseQorICAgICAgb2NjdXB5aW5nLgorICAnbycgd2lsbCBzcGxpdCBhIG5ldyB3aW5kb3cgYW5kIG9wZW4gdGhlIGZpbGUgaW4gdGhlIG5ldyB3aW5kb3cuCisgICdPJyB3aWxsIG9wZW4gdGhlIGZpbGUgY2hvc2VuIHVzaW5nIHRoZSB3aW5kb3cgdGhhdCB0aGUgY3Vyc29yIHdhcyBpbiBqdXN0CisgICAgICBiZWZvcmUgeW91IHN0YXJ0ZWQgb3IgZW50ZXJlZCB0aGUgZXhwbG9yZXIgd2luZG93LiAgSWYgdGhlIGV4cGxvcmVyIGlzCisgICAgICB0aGUgb25seSB3aW5kb3csIGl0IHdpbGwgZmlyc3Qgc3BsaXQgYSBuZXcgd2luZG93IHRvIHVzZSBmb3IgdGhlIGZpbGUgdG8KKyAgICAgIGJlIG9wZW5lZC4KKyAgJ3AnIHdpbGwgb3BlbiAob3IgdXNlKSB0aGUgcHJldmlldyB3aW5kb3cgc2hvd2luZyB0aGUgZmlsZQorICAneCcgd2lsbCBleGVjdXRlIHRoZSBmaWxlIHdpdGggdGhlIHN5c3RlbSB0b29scy4gIE9ubHkgd2hlbiBzdXBwb3J0ZWQKKyAgICAgIChjdXJyZW50bHkgTVMtV2luZG93cyBhbmQgS0RFKS4KKworV2hlbiBzcGxpdHRpbmcgb2ZmIGEgbmV3IHdpbmRvdywgeW91IGNhbiBjb250cm9sIHdoZXJlIHRoZSBzcGxpdCB3aW5kb3cgd2lsbAorZ28gcmVsYXRpdmUgdG8gdGhlIGV4cGxvcmVyIHdpbmRvdyB1c2luZyB0aGUgdmFyaWFibGVzIGc6ZXhwbFZlcnRpY2FsLAorZzpleHBsU3BsaXRCZWxvdyBhbmQgZzpleHBsU3BsaXRSaWdodC4KKworCQkJCQkJCSpnOmV4cGxWZXJ0aWNhbCoKKwkJCQkJCQkqZzpleHBsU3BsaXRCZWxvdyoKKwkJCQkJCQkqZzpleHBsU3BsaXRSaWdodCoKKwkJCQkJCQkqZzpleHBsU3RhcnRCZWxvdyoKKwkJCQkJCQkqZzpleHBsU3RhcnRSaWdodCoKK1RvIGNvbnRyb2wgd2hldGhlciB0aGUgc3BsaXQgaXMgbWFkZSBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseSwgdXNlOiA+CisgIGxldCBnOmV4cGxWZXJ0aWNhbD0xCSIgU3BsaXQgdmVydGljYWxseQorICBsZXQgZzpleHBsVmVydGljYWw9MAkiIFNwbGl0IGhvcml6b250YWxseSAoZGVmYXVsdCkKKworVG8gY29udHJvbCB3aGVyZSB0aGUgd2luZG93IGdvZXMgcmVsYXRpdmUgdG8gdGhlIGV4cGxvcmVyIHdpbmRvdyB3aGVuCitzcGxpdHRpbmcgaG9yaXpvbnRhbGx5LCB1c2UgdGhlIHZhcmlhYmxlOiA+CisgIGxldCBnOmV4cGxTcGxpdEJlbG93PTEgICAgIiBQdXQgbmV3IHdpbmRvdyBiZWxvdyBleHBsb3JlciB3aW5kb3cKKyAgbGV0IGc6ZXhwbFNwbGl0QmVsb3c9MCAgICAiIFB1dCBuZXcgd2luZG93IGFib3ZlIGV4cGxvcmVyIHdpbmRvdworVGhlIGRlZmF1bHQgZm9yIHRoaXMgaXMgdGhlIHNldHRpbmcgb2Ygc3BsaXRiZWxvdyBhdCB0aGUgdGltZSB0aGUgcGx1Z2luIGlzCitsb2FkZWQuCisKK1RvIGNvbnRyb2wgd2hlcmUgdGhlIHdpbmRvd3MgZ29lcyByZWxhdGl2ZSB0byB0aGUgZXhwbG9yZXIgd2luZG93IHdoZW4KK3NwbGl0dGluZyB2ZXJ0aWNhbGx5LCB1c2UgdGhlIHZhcmlhYmxlOiA+CisgIGxldCBnOmV4cGxTcGxpdFJpZ2h0PTEgICAgIiBQdXQgbmV3IHdpbmRvdyB0byB0aGUgcmlnaHQgb2YgdGhlIGV4cGxvcmVyCisgIGxldCBnOmV4cGxTcGxpdFJpZ2h0PTAgICAgIiBQdXQgbmV3IHdpbmRvdyB0byB0aGUgbGVmdCBvZiB0aGUgZXhwbG9yZXIKK1RoZSBkZWZhdWx0IGZvciB0aGlzIGlzIHRoZSBzZXR0aW5nIG9mIHNwbGl0cmlnaHQgYXQgdGhlIHRpbWUgdGhlIHBsdWdpbiBpcworbG9hZGVkLgorCitUbyB1c2UgYSBkaWZmZXJlbnQgc3BsaXQgbWV0aG9kIGZvciB0aGUgZXhwbG9yZXIgd2luZG93LCB1c2U6ID4KKyAgbGV0IGc6ZXhwbFN0YXJ0UmlnaHQ9MSAgICAiIFB1dCBuZXcgZXhwbG9yZXIgd2luZG93IHRvIHRoZSByaWdodCBvZiB0aGUKKwkJCSAgICAiIGN1cnJlbnQgd2luZG93CisgIGxldCBnOmV4cGxTdGFydFJpZ2h0PTAgICAgIiBQdXQgbmV3IGV4cGxvcmVyIHdpbmRvdyB0byB0aGUgbGVmdCBvZiB0aGUKKwkJCSAgICAiIGN1cnJlbnQgd2luZG93CitUaGUgZGVmYXVsdCBmb3IgdGhpcyBzZXQgdG8gZzpleHBsU3BsaXRSaWdodCBhdCB0aGUgdGltZSB0aGUgcGx1Z2luIGlzIGxvYWRlZC4KKworVG8gdXNlIGEgZGlmZmVyZW50IHNwbGl0IG1ldGhvZCBmb3IgdGhlIGV4cGxvcmVyIHdpbmRvdywgdXNlOiA+CisgIGxldCBnOmV4cGxTdGFydEJlbG93PTEgICAgIiBQdXQgbmV3IGV4cGxvcmVyIHdpbmRvdyBiZWxvdyB0aGUKKwkJCSAgICAiIGN1cnJlbnQgd2luZG93CisgIGxldCBnOmV4cGxTdGFydEJlbG93PTAgICAgIiBQdXQgbmV3IGV4cGxvcmVyIHdpbmRvdyBhYm92ZSB0aGUKKwkJCSAgICAiIGN1cnJlbnQgd2luZG93CitUaGUgZGVmYXVsdCBmb3IgdGhpcyBzZXQgdG8gZzpleHBsU3BsaXRCZWxvdyBhdCB0aGUgdGltZSB0aGUgcGx1Z2luIGlzIGxvYWRlZC4KKworVGhlIHN0YXJ0IHNwbGl0cyBhbGxvdyBmb3IgdGhlIGV4cGxvcmVyIHdpbmRvdyB0byBiZSBwbGFjZWQgaW4gYSBmaWxlIGJyb3dzZXIKK3R5cGUgYXJyYW5nZW1lbnQsIHdoZXJlIHRoZSBkaXJlY3RvcmllcyBhcmUgc2hvd24gb24gdGhlIGxlZnQgYW5kIHRoZSBjb250ZW50cworb3BlbmVkIG9uIHRoZSByaWdodC4gIFRoZSBzdGFydCBzcGxpdCBzZXR0aW5ncyBhcmUgb25seSB1c2VkIHdoZW4gaXNzdWluZwordGhlIFNleHBsb3JlIGNvbW1hbmQuCisKK05vdGUgdGhhdCB0aGUgd2luZG93IHNwbGl0IGlzIGRvbmUgYSBsaXR0bGUgYml0IGRpZmZlcmVudGx5IHRoYW4gd2luZG93IHNwbGl0cworYXJlIHVzdWFsbHkgZG9uZS4gIE9yZGluYXJpbHksIHdoZW4gc3BsaXR0aW5nIGEgd2luZG93LCB0aGUgc3BhY2Ugb2NjdXBpZWQgYnkKK3RoZSBjdXJyZW50IHdpbmRvdyB3aWxsIGJlIHNwbGl0IHRvIGdpdmUgc3BhY2UgZm9yIHRoZSBuZXcgd2luZG93LiAgVGhlCitleHBsb3JlciBhdHRlbXB0cyB0byBpbnN0ZWFkIHNwbGl0IGZyb20gYSB3aW5kb3cgYWRqYWNlbnQgdG8gdGhlIGV4cGxvcmVyCit3aW5kb3cgc28gdGhhdCB0aGUgZXhwbG9yZXIgd2luZG93IHdpbGwgbm90IGNoYW5nZSBzaXplcy4gIElmIHRoZXJlIGlzIG5vdCBhbgorYWRqYWNlbnQgd2luZG93IGluIHRoZSBkaXJlY3Rpb24geW91IGFyZSBzcGxpdHRpbmcsIHRoZSBleHBsb3JlciB3aW5kb3cgaXMKK3NwbGl0LgorCisJCQkJCQkJKmc6ZXhwbFdpblNpemUqCitBZnRlciBvcGVuaW5nIGEgZmlsZSB3aXRoIHRoZSAnbycgY29tbWFuZCwgeW91IG1pZ2h0IHdhbnQgdG8gcmVzaXplIHRoZQorZXhwbG9yZXIgd2luZG93LiBUaGlzIGNhbiBiZSBkb25lIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlID4KKyAgbGV0IGc6ZXhwbFdpblNpemU9TgorTiBpcyB0aGUgbnVtYmVyIG9mIHJvd3MgKHdoZW4gdGhlIHdpbmRvdyBpcyBzcGxpdCBob3Jpem9udGFsbHkpIG9yIHRoZSBudW1iZXIKK29mIGNvbHVtbnMgKHdoZW4gdGhlIHdpbmRvdyBpcyBzcGxpdCB2ZXJ0aWNhbGx5KS4gIElmIGc6ZXhwbFdpblNpemUgaXMgc2V0IHRvCithbiBlbXB0eSBzdHJpbmcgKCIiKSwgcmVzaXppbmcgd2lsbCBub3QgYmUgZG9uZS4gIGc6ZXhwbFdpblNpemUgZGVmYXVsdHMgdG8KKzE1LgorCisJCQkJCQkJKmc6ZXhwbERldGFpbGVkTGlzdCoKK1RoZSBmaWxlIHNpemUgKGluIGJ5dGVzKSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUgY2FuIGJlIGRpc3BsYXllZCBpbnNpZGUgdGhlCitmaWxlIGV4cGxvcmVyIHdpbmRvdy4gQnkgcHJlc3NpbmcgJ2knLCB5b3UgY2FuIHRvZ2dsZSBiZXR3ZWVuIHRoZSBuYW1lIG9ubHkKK2Rpc3BsYXkgYW5kIHRoZSBtb3JlIGxlbmd0aHkgZGlzcGxheS4gIElmIHlvdSB3YW50IHRoZSBzaXplIGFuZCBkYXRlIHRvIHNob3cKK2J5IGRlZmF1bHQsIHVzZSA+CisgIGxldCBnOmV4cGxEZXRhaWxlZExpc3Q9MQorRG9pbmcgdGhpcyBtYXkgc2xpZ2h0bHkgc2xvdyBkb3duIGV4cGxvcmVyLiBUaGUgZGlmZmVyZW5jZSBtYXkgb3IgbWF5IG5vdCBiZQorbm90aWNlYWJsZSBkZXBlbmRpbmcgb24geW91ciBzeXN0ZW0gYW5kIHdoZXRoZXIgdGhlIGRpcmVjdG9yeSBpcyBsb2NhbCBvciBvbgordGhlIG5ldHdvcmsgYW5kIG9uIHRoZSBzaXplIG9mIHRoZSBkaXJlY3RvcnkuCisKKwkJCQkJCQkqZzpleHBsRGF0ZUZvcm1hdCoKK1RoZSBmb3JtYXQgb2YgZGF0ZSBkaXNwbGF5ZWQgaXMgY29uZmlndXJhYmxlIHVzaW5nIHRoZSB2YXJpYWJsZQorZzpleHBsRGF0ZUZvcm1hdC4gIGV4cGxvcmVyIHVzZXMgdGhpcyB2YXJpYWJsZSB0byBwYXNzIHRvIHN0cmZ0aW1lKCkgdG8gZmV0Y2gKK3RoZSBkYXRlIGluZm9ybWF0aW9uLiB8c3RyZnRpbWUoKXwgIFRoZSBkZWZhdWx0IGlzID4KKyAgbGV0IGc6ZXhwbERhdGVGb3JtYXQ9IiVkICViICVZICVIOiVNIgorCitOb3RlIHRoYXQgZm9yIHNvcnRpbmcgcHVycG9zZXMsIHRoZSBkYXRlIGlzIGFsd2F5cyBwbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUKK2xpbmUgaW4gaXRzICdyYXcnIGZvcm0uICBJZiB5b3UgaGF2ZSBzeW50YXggaGlnaGxpZ2h0aW5nIHR1cm5lZCBvbiwgdGhpcyByYXcKK2RhdGUgc2hvdWxkIGJlIGludmlzaWJsZS4KKworCQkJCQkJCSpnOmV4cGxIaWRlRmlsZXMqCitZb3UgY2FuIGhpZGUgc29tZSBmaWxlcyBieSBmaWxsaW5nIHRoZSB2YXJpYWJsZSBnOmV4cGxIaWRGaWxlcyB3aXRoIHJlZ3VsYXIKK2V4cHJlc3Npb25zLiBBIGZpbGVuYW1lIHRoYXQgbWF0Y2hlcyBhbnkgb2YgdGhlc2UgcmVndWxhciBleHByZXNzaW9ucyB3aWxsIG5vdAorYmUgc2hvd24uIEZvciBleGFtcGxlLCA+CisKKyAgbGV0IGc6ZXhwbEhpZGVGaWxlcz0nXlwuLFwuZ3okLFwuZXhlJCxcLnppcCQnCisKK3dpbGwgbm90IHNob3cgZmlsZXMgdGhhdCBiZWdpbiB3aXRoICIuIiBhbmQgdGhvc2UgdGhhdCBlbmQgaW4gLmd6LCAuZXhlIG9yCisuemlwLiBIb3dldmVyLCBhbGwgZGlyZWN0b3J5IG5hbWVzIHdpbGwgYWx3YXlzIGJlIHNob3duLiBJZiB3aGlsZSBleHBsb3JpbmcsCit5b3UnZCBsaWtlIHRvIHNlZSB0aGUgaGlkZGVuIGZpbGVzIGFzIHdlbGwsIHVzZSB0aGUgY29tbWFuZCAiYSIuCitUaGUgZXhwbG9yZXIgaGVhZGVyIHdpbGwgaW5kaWNhdGUgaWYgZmlsdGVyaW5nIGlzIGJlaW5nIGRvbmUuCisKKwkJCQkJCQkqZzpleHBsRGV0YWlsZWRIZWxwKgorVGhlIGhlbHAgaW5mb3JtYXRpb24gc3Bhbm5pbmcgYSBmZXcgbGluZXMgY2FuIGJlIHR1cm5lZCBvZmYgKGFuZCBqdXN0IGEgc2luZ2xlCitoZWxwIG1lc3NhZ2UgZW5hYmxlZCkgdXNpbmcgdGhlIG9wdGlvbiA+CisgIGxldCBnOmV4cGxEZXRhaWxlZEhlbHA9MAorWW91IGNhbiBhbnl0aW1lIHN3aXRjaCB0byB0aGUgZGV0YWlsZWQgaGVscCBmb3JtYXQgYnkgcHJlc3NpbmcgPy4KKworCQkJCQkJCSpleHBsb3Jlci1kZWxldGUqCitQcmVzc2luZyAnRCcgaW5zaWRlIGV4cGxvcmVyIGRlbGV0ZXMgdGhlIGZpbGUgdW5kZXIgdGhlIGN1cnNvci4gWW91IGNhbiBkZWxldGUKK21hbnkgZmlsZXMgYnkgdmlzdWFsbHkgc2VsZWN0aW5nIHRoZW0gYW5kIHVzaW5nICdEJy4gVGhlIGRlbGV0aW9uIGlzCitpbnRlcmFjdGl2ZSBpbiB0aGUgZm9ybSB5L24vYS9xLiBEaXJlY3RvcnkgZGVsZXRpb24gaXMgbm90IHN1cHBvcnRlZCAobWFpbmx5CitiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byBkZWxldGUgYSBkaXJlY3RvcnkgdXNpbmcgYSB2aW0gYnVpbHQtaW4gZnVuY3Rpb24pLgorCisJCQkJCQkJKmV4cGxvcmVyLXJlbmFtZSoKK1ByZXNzaW5nICdSJyBpbnNpZGUgZXhwbG9yZXIgd2lsbCBhbGxvdyB5b3UgdG8gcmVuYW1lIHRoZSBmaWxlIHVuZGVyIHRoZQorY3Vyc29yLgorCisJCQkJCQkJKmc6ZXhwbFNvcnRCeSoKK1RoZSBkaXNwbGF5IGluIHRoZSBmaWxlIGV4cGxvcmVyIGNhbiBiZSBzb3J0ZWQgaW4gZm9yd2FyZCBvciByZXZlcnNlIG9yZGVyIGJ5CituYW1lLCBzaXplLCBvciBtb2RpZmljYXRpb24gZGF0ZS4gIFlvdSBjYW4gc2V0IHRoZSBkZWZhdWx0IHNvcnRpbmcgZGlyZWN0aW9uCit3aXRoIHRoZSBvcHRpb24gPgorICBsZXQgZzpleHBsU29ydEJ5PSduYW1lJwkJIiBhbHBoYWJldGljYWxseQorICBsZXQgZzpleHBsU29ydEJ5PSdyZXZlcnNlIG5hbWUnCSIgcmV2ZXJzZSBhbHBoYWJldGljYWxseQorICBsZXQgZzpleHBsU29ydEJ5PSdkYXRlJwkJIiBuZXdlc3QgZmlyc3QKKyAgbGV0IGc6ZXhwbFNvcnRCeT0ncmV2ZXJzZSBkYXRlJwkiIG9sZGVzdCBmaXJzdAorICBsZXQgZzpleHBsU29ydEJ5PSdzaXplJwkJIiBsYXJnZXN0IGZpcnN0CisgIGxldCBnOmV4cGxTb3J0Qnk9J3JldmVyc2Ugc2l6ZScgICAgICAgIiBzbWFsbGVzdCBmaXJzdAorV2hpbGUgaW4gdGhlIGV4cGxvcmVyLCB5b3UgY2FuIHJvdGF0ZSB0aHJvdWdoIHRoZSBzb3J0IGZpZWxkcyBieSBwcmVzc2luZyB0aGUKKydzJyBrZXkgYW5kIHlvdSBjYW4gcmV2ZXJzZSB0aGUgY3VycmVudCBzb3J0IG9yZGVyIGJ5IHByZXNzaW5nIHRoZSAncicga2V5LgorU29ydGluZyBvbiBmaWVsZHMgb3RoZXIgdGhhbiB0aGUgbmFtZSB3aWxsIGJlIGZhc3RlciBpZiB0aGUgc2l6ZSBhbmQgZGF0ZSBhcmUKK2Rpc3BsYXllZCAodXNpbmcgJ2knIG9yIGc6ZXhwbERldGFpbGVkTGlzdCkuCitUaGUgZXhwbG9yZXIgaGVhZGluZyB3aWxsIGluZGljYXRlIHRoZSBjdXJyZW50IHNvcnQgb3JkZXIuCisKKwkJCQkJCQkqZzpleHBsRGlyc0ZpcnN0KgorVG8gY29udHJvbCB0aGUgc2VncmVnYXRpb24gb2YgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLCB5b3UgY2FuIHNldCB0aGlzIG9wdGlvbiA+CisgIGxldCBnOmV4cGxEaXJzRmlyc3Q9MSAgICAgIiBEaXJlY3RvcmllcyBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0IChkZWZhdWx0KQorICBsZXQgZzpleHBsRGlyc0ZpcnN0PTAgICAgICIgRGlyZWN0b3JpZXMgbWl4ZWQgaW4gd2l0aCBmaWxlcworICBsZXQgZzpleHBsRGlyc0ZpcnN0PS0xICAgICIgRGlyZWN0b3JpZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdAorCisJCQkJCQkJKmc6ZXhwbFN1ZmZpeGVzTGFzdCoKK1RvIGNvbnRyb2wgdGhlIHNlZ3JlZ2F0aW9uIG9mIGZpbGVzIG1hdGNoaW5nIHRoZSBzdWZmaXhlcyBvcHRpb24sIHlvdSBjYW4gc2V0Cit0aGlzIG9wdGlvbiA+CisgIGxldCBnOmV4cGxTdWZmaXhlc0xhc3Q9MSAgICAgIiBGaWxlcyBtYXRjaGluZyBzdWZmaXhlcyBzb3J0ZWQgYXQgdGhlIGJvdHRvbQorCQkJICAgICAgICIgb2YgdGhlIGxpc3QgKGRlZmF1bHQpCisgIGxldCBnOmV4cGxTdWZmaXhlc0xhc3Q9MCAgICAgIiBGaWxlcyBtYXRjaGluZyBzdWZmaXhlcyBzb3J0ZWQgbm9ybWFsbHkKKyAgbGV0IGc6ZXhwbFN1ZmZpeGVzTGFzdD0tMSAgICAiIEZpbGVzIG1hdGNoaW5nIHN1ZmZpeGVzIHNvcnRlZCBhdCB0aGUgdG9wIG9mCisJCQkgICAgICAgIiB0aGUgbGlzdAorVGhlIGhlYWRpbmcgd2lsbCBpbmRpY2F0ZSBpZiBzdWZmaXhlcyBoYXZlIGJlZW4gbW92ZWQgdG8gdGhlIGVuZCAob3Igc3RhcnQpIG9mCit0aGUgbGlzdC4KKworCQkJCQkJCSpnOmV4cGxVc2VTZXBhcmF0b3JzKgorRGlyZWN0b3JpZXMgYW5kIGZpbGVzIG1hdGNoaW5nIHRoZSBzdWZmaXhlcyBsaXN0IHdpbGwgYmUgaGlnaGxpZ2h0ZWQuICBJZiB5b3UKK2hhdmUgdGhlIGRpcmVjdG9yaWVzLCBmaWxlcywgYW5kIHN1ZmZpeGVzIHNlcGFyYXRlZCwgYW5kIHlvdSB3b3VsZCBsaWtlIGEKK3NlcGFyYXRvciBsaW5lIGJldHdlZW4gdGhlIGdyb3VwcywgeW91IGNhbiBzZXQgdGhlIG9wdGlvbiA+CisgIGxldCBnOmV4cGxVc2VTZXBhcmF0b3JzPTEgICAgIiBVc2Ugc2VwYXJhdG9yIGxpbmVzCisgIGxldCBnOmV4cGxVc2VTZXBhcmF0b3JzPTAgICAgIiBEb24ndCB1c2Ugc2VwYXJhdG9yIGxpbmVzCis8CisJCQkJCQkJICpnOmV4cGxGaWxlSGFuZGxlcioKK0lmIHlvdSBzZXQgdGhlICJnOmV4cGxGaWxlSGFuZGxlciIgdmFyaWFibGUgdG8gdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiwgdHlwaW5nCisneCcgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24uICBUaGUgZmlsZSBvciBkaXJlY3RvcnkgdW5kZXIgdGhlIGN1cnNvciB3aWxsIGJlCitwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uLiAgU3VwcG9zZSB5b3UgaGF2ZSBLREUsIHlvdSBjb3VsZCB1c2UKK3RoaXM6ID4KKworICBmdW5jdGlvbiBNeUZpbGVIYW5kbGVyKGZuKQorICAgIGV4ZWMgInNpbGVudCEgIWtmbWNsaWVudCBleGVjICIgLiBlc2NhcGUoYTpmbiwnIFwlIycpCisgIGVuZGZ1bmN0aW9uCisgIGxldCBnOmV4cGxGaWxlSGFuZGxlciA9ICdNeUZpbGVIYW5kbGVyJworCitGb3IgV2luMzIgdGhlIHZhcmlhYmxlIGlzIHNldCBieSBkZWZhdWx0IHRvIGludm9rZSB0aGUgZXhlY3V0ZSBhY3Rpb24uIElmIHlvdQordHlwZSAneCcgb24gYSBIVE1MIGZpbGUsIE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIHN0YXJ0IChvciB3aGF0ZXZlcgorYXBwbGljYXRpb24geW91IGhhdmUgYXNzb2NpYXRlZCB3aXRoIEhUTUwgZmlsZXMpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyB2aW06dHc9Nzg6bm9ldDp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3BpX2d6aXAudHh0IGIvcnVudGltZS9kb2MvcGlfZ3ppcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllY2RjNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3BpX2d6aXAudHh0CkBAIC0wLDAgKzEsMzkgQEAKKypwaV9nemlwLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMiBPY3QgMjkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitFZGl0aW5nIGNvbXByZXNzZWQgZmlsZXMgd2l0aCBWaW0JCSpnemlwKiAqYnppcDIqICpjb21wcmVzcyoKKworMS4gQXV0b2NvbW1hbmRzCQkJfGd6aXAtYXV0b2NtZHwKKworVGhlIGZ1bmN0aW9uYWxpdHkgbWVudGlvbmVkIGhlcmUgaXMgYSB8c3RhbmRhcmQtcGx1Z2lufC4KK1RoaXMgcGx1Z2luIGlzIG9ubHkgYXZhaWxhYmxlIGlmICdjb21wYXRpYmxlJyBpcyBub3Qgc2V0LgorWW91IGNhbiBhdm9pZCBsb2FkaW5nIHRoaXMgcGx1Z2luIGJ5IHNldHRpbmcgdGhlICJsb2FkZWRfZ3ppcCIgdmFyaWFibGU6ID4KKwk6bGV0IGxvYWRlZF9nemlwID0gMQorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhpc30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBBdXRvY29tbWFuZHMJCQkJCQkqZ3ppcC1hdXRvY21kKgorCitUaGUgcGx1Z2luIGluc3RhbGxzIGF1dG9jb21tYW5kcyB0byBpbnRlcmNlcHQgcmVhZGluZyBhbmQgd3JpdGluZyBvZiBmaWxlcword2l0aCB0aGVzZSBleHRlbnNpb25zOgorCisJZXh0ZW5zaW9uCWNvbXByZXNzaW9uIH4KKwkqLloJCWNvbXByZXNzIChMZW1wZWwtWml2KQorCSouZ3oJCWd6aXAKKwkqLmJ6MgkJYnppcDIKKworVGhhdCdzIGFjdHVhbGx5IHRoZSBvbmx5IHRoaW5nIHlvdSBuZWVkIHRvIGtub3cuICBUaGVyZSBhcmUgbm8gb3B0aW9ucy4KKworQWZ0ZXIgZGVjb21wcmVzc2luZyBhIGZpbGUsIHRoZSBmaWxldHlwZSB3aWxsIGJlIGRldGVjdGVkIGFnYWluLiAgVGhpcyB3aWxsCittYWtlIGEgZmlsZSBsaWtlICJmb28uYy5neiIgZ2V0IHRoZSAiYyIgZmlsZXR5cGUuCisKK0lmIHlvdSBoYXZlICdwYXRjaG1vZGUnIHNldCwgaXQgd2lsbCBiZSBhcHBlbmRlZCBhZnRlciB0aGUgZXh0ZW5zaW9uIGZvcgorY29tcHJlc3Npb24uICBUaHVzIGVkaXRpbmcgdGhlIHBhdGNobW9kZSBmaWxlIHdpbGwgbm90IGdpdmUgeW91IHRoZSBhdXRvbWF0aWMKK2RlY29tcHJlc3Npb24uICBZb3UgaGF2ZSB0byByZW5hbWUgdGhlIGZpbGUgaWYgeW91IHdhbnQgdGhpcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcGlfbmV0cncudHh0IGIvcnVudGltZS9kb2MvcGlfbmV0cncudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZmE4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9waV9uZXRydy50eHQKQEAgLTAsMCArMSw1NDMgQEAKKypwaV9uZXRydy50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogQXByIDIxLCAyMDA0CisKKworCQlWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4KKworKmRhdioJCSpodHRwKgkJKm5ldHdvcmsqCSpyY3AqCQkqc2NwKgorKmZldGNoKgkJKm5ldHJ3KgkJKk5yZWFkKgkJKnJzeW5jKgkJKnNmdHAqCisqZnRwKgkJKm5ldHJ3LnZpbSoJKk53cml0ZSoJKm5ldHJ3LWZpbGUqCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMC4gQ29udGVudHMJCQkJCQkqbmV0cnctY29udGVudHMqCisKKzEuICBOZXRydyBSZWZlcmVuY2UuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXJlZnwKKzIuICBOZXR3b3JrLU9yaWVudGVkIEZpbGUgVHJhbnNmZXIuLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXhmZXJ8CiszLiAgQWN0aXZhdGlvbi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1hY3RpdmF0ZXwKKzQuICBUcmFuc3BhcmVudCBGaWxlIFRyYW5zZmVyLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXRyYW5zcGFyZW50fAorNS4gIEV4IENvbW1hbmRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctZXh8Cis2LiAgVmFyaWFibGVzIGFuZCBPcHRpb25zLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy12YXJ8Cis3LiAgRGVidWdnaW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1kZWJ1Z3wKKzguICBOZXcgU3R1ZmYuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW5ld3wKKzkuICBDcmVkaXRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWNyZWRpdHN8CisKK1RoZSBmdW5jdGlvbmFsaXR5IG1lbnRpb25lZCBoZXJlIGlzIGRvbmUgdmlhIHVzaW5nIHxzdGFuZGFyZC1wbHVnaW58Cit0ZWNobmlxdWVzLiAgVGhpcyBwbHVnaW4gaXMgb25seSBhdmFpbGFibGUgaWYKKworCXNldCBub2NwCQkgICAgIiAnY29tcGF0aWJsZScgaXMgbm90IHNldAorCWZpbGV0eXBlIHBsdWdpbiBvbgkgICAgIiBwbHVnaW5zIGFyZSBlbmFibGVkCisKK1lvdSBjYW4gYXZvaWQgbG9hZGluZyB0aGlzIHBsdWdpbiBieSBzZXR0aW5nIHRoZSAibG9hZGVkX25ldHJ3IiB2YXJpYWJsZQoraW4geW91ciA8LnZpbXJjPiBmaWxlOiA+CisKKwk6bGV0IGxvYWRlZF9uZXRydyA9IDEKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoaXN9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gTmV0cncgUmVmZXJlbmNlCQkJCQkJKm5ldHJ3LXJlZioKKworICAgIE9QVElPTlMKKwlsZXQgZzpuZXRyd19mdHAgPTAgdXNlIGZ0cCAoZGVmYXVsdCkJCSAgICAgKHVpZCBwYXNzd29yZCkKKwkJCT0xIHVzZSBhbHRlcm5hdGUgZnRwIG1ldGhvZAkodXNlciB1aWQgcGFzc3dvcmQpCisJICBJZiB5b3UncmUgaGF2aW5nIHRyb3VibGUgd2l0aCBmdHAsIHRyeSBjaGFuZ2luZyB0aGUgdmFsdWUKKwkgIG9mIHRoaXMgdmFyaWFibGUgaW4geW91ciA8LnZpbXJjPiB0byBjaGFuZ2UgbWV0aG9kcworCisJbGV0IGc6bmV0cndfaWdub3JlbmV0cmM9IDEKKwkgIElmIHlvdSBoYXZlIGEgPC5uZXRyYz4gZmlsZSBidXQgaXQgZG9lc24ndCB3b3JrIGFuZCB5b3UKKwkgIHdhbnQgaXQgaWdub3JlZCwgdGhlbiBzZXQgdGhpcyB2YXJpYWJsZSBhcyBzaG93bi4gIEl0cyBtZXJlCisJICBleGlzdGVuY2UgaXMgZW5vdWdoIHRvIGNhdXNlIDwubmV0cmM+IHRvIGJlIGlnbm9yZWQuCisKKwlDb250cm9sbGluZyBFeHRlcm5hbCBBcHBsaWNhdGlvbnMKKworCSBQcm90b2NvbCAgVmFyaWFibGUJICAgICAgIERlZmF1bHQgVmFsdWUKKwkgLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLQorCSAgIGRhdjogICAgZzpuZXRyd19kYXZfY21kICAgPSAiY2FkYXZlciIKKwkgICBmZXRjaDogIGc6bmV0cndfZmV0Y2hfY21kID0gImZldGNoIC1vIgorCSAgIGZ0cDogICAgZzpuZXRyd19mdHBfY21kICAgPSAiZnRwIgorCSAgIGh0dHA6ICAgZzpuZXRyd19odHRwX2NtZCAgPSAiZmV0Y2ggLW8iICAgZWxzZSBpZiBmZXRjaCBpcyBhdmFpbGFibGUKKwkgICBodHRwOiAgIGc6bmV0cndfaHR0cF9jbWQgID0gIndnZXQgLXEgLU8iICAgIElmIHdnZXQgaXMgYXZhaWxhYmxlCisJICAgcmNwOiAgICBnOm5ldHJ3X3JjcF9jbWQgICA9ICJyY3AiCisJICAgcnN5bmM6ICBnOm5ldHJ3X3JzeW5jX2NtZCA9ICJyc3luYyAtYSIKKwkgICBzY3A6ICAgIGc6bmV0cndfc2NwX2NtZCAgID0gInNjcCAtcSIKKwkgICBzZnRwOiAgIGc6bmV0cndfc2Z0cF9jbWQgID0gInNmdHAiCisKKyAgICBSRUFESU5HCisJOk5yZWFkID8JCQkJCWdpdmUgaGVscAorCTpOcmVhZCAibWFjaGluZTpmaWxlIgkJCQl1c2VzIHJjcAorCTpOcmVhZCAibWFjaGluZSBmaWxlIgkJCQl1c2VzIGZ0cCAgIHdpdGggPC5uZXRyYz4KKwk6TnJlYWQgIm1hY2hpbmUgaWQgcGFzc3dvcmQgZmlsZSIJCXVzZXMgZnRwCisJOk5yZWFkICJkYXY6Ly9tYWNoaW5lWzpwb3J0XS9maWxlIgkJdXNlcyBjYWRhdmVyCisJOk5yZWFkICJmZXRjaDovL1t1c2VyQF1tYWNoaW5lL2ZpbGUiCQl1c2VzIGZldGNoCisJOk5yZWFkICJmdHA6Ly9bdXNlckBdbWFjaGluZVtbOiNdcG9ydF0vZmlsZSIJdXNlcyBmdHAgICBhdXRvZGV0ZWN0cyA8Lm5ldHJjPgorCTpOcmVhZCAiaHR0cDovL1t1c2VyQF1tYWNoaW5lL2ZpbGUiCQl1c2VzIGh0dHAgIHVzZXMgd2dldAorCTpOcmVhZCAicmNwOi8vW3VzZXJAXW1hY2hpbmUvZmlsZSIJCXVzZXMgcmNwCisJOk5yZWFkICJyc3luYzovL1t1c2VyQF1tYWNoaW5lWzpwb3J0XS9maWxlIgl1c2VzIHJzeW5jCisJOk5yZWFkICJzY3A6Ly9bdXNlckBdbWFjaGluZVtbOiNdcG9ydF0vZmlsZSIJdXNlcyBzY3AKKwk6TnJlYWQgInNmdHA6Ly9bdXNlckBdbWFjaGluZS9maWxlIgkJdXNlcyBzZnRwCisKKyAgICBXUklUSU5HCisJOk53cml0ZSA/CQkJCQlnaXZlIGhlbHAKKwk6TndyaXRlICJtYWNoaW5lOmZpbGUiCQkJCXVzZXMgcmNwCisJOk53cml0ZSAibWFjaGluZSBmaWxlIgkJCQl1c2VzIGZ0cCAgIHdpdGggPC5uZXRyYz4KKwk6TndyaXRlICJtYWNoaW5lIGlkIHBhc3N3b3JkIGZpbGUiCQl1c2VzIGZ0cAorCTpOd3JpdGUgImRhdjovL21hY2hpbmVbOnBvcnRdL2ZpbGUiCQl1c2VzIGNhZGF2ZXIKKwk6TndyaXRlICJmdHA6Ly9bdXNlckBdbWFjaGluZVtbOiNdcG9ydF0vZmlsZSIJdXNlcyBmdHAgICBhdXRvZGV0ZWN0cyA8Lm5ldHJjPgorCTpOd3JpdGUgInJjcDovL1t1c2VyQF1tYWNoaW5lL2ZpbGUiCQl1c2VzIHJjcAorCTpOd3JpdGUgInJzeW5jOi8vW3VzZXJAXW1hY2hpbmVbOnBvcnRdL2ZpbGUiCXVzZXMgcnN5bmMKKwk6TndyaXRlICJzY3A6Ly9bdXNlckBdbWFjaGluZVtbOiNdcG9ydF0vZmlsZSIJdXNlcyBzY3AKKwk6TndyaXRlICJzZnRwOi8vW3VzZXJAXW1hY2hpbmUvZmlsZSIJCXVzZXMgc2Z0cAorCWh0dHA6IG5vdCBzdXBwb3J0ZWQhCisKKyAgICBVU0VSIEFORCBQQVNTV09SRCBDSEFOR0lORworCUF0dGVtcHRzIHRvIHVzZSBmdHAgd2lsbCBwcm9tcHQgeW91IGZvciBhIHVzZXItaWQgYW5kIGEgcGFzc3dvcmQuCisJVGhlc2Ugd2lsbCBiZSBzYXZlZCBpbiBnOm5ldHJ3X3VpZCBhbmQgZzpuZXRyd19wYXNzd2QgU3Vic2VxdWVudCB1c2VzCisJb2YgZnRwIHdpbGwgcmUtdXNlIHRob3NlLiAgSWYgeW91IG5lZWQgdG8gdXNlIGEgZGlmZmVyZW50IHVzZXIgaWQKKwlhbmQvb3IgcGFzc3dvcmQsIHlvdSdsbCB3YW50IHRvIGNhbGwgTmV0VXNlclBhc3MoKSBmaXJzdC4KKworCTpOZXRVc2VyUGFzcyBbdWlkIFtwYXNzd29yZF1dCQktLSBwcm9tcHRzIGFzIG5lZWRlZAorCTpjYWxsIE5ldFVzZXJQYXNzKCkJCQktLSBwcm9tcHRzIGZvciB1aWQgYW5kIHBhc3N3b3JkCisJOmNhbGwgTmV0VXNlclBhc3MoInVpZCIpCQktLSBwcm9tcHRzIGZvciBwYXNzd29yZAorCTpjYWxsIE5ldFVzZXJQYXNzKCJ1aWQiLCJwYXNzd29yZCIpCS0tIHNldHMgZ2xvYmFsIHVpZCBhbmQgcGFzc3dvcmQKKworICAgIFZBUklBQkxFUworCWI6bmV0cndfbGFzdGZpbGUgbGFzdCBmaWxlIE5ldHdvcmstcmVhZC93cml0dGVuIHJldGFpbmVkIG9uCisJCQkgIGEgcGVyLWJ1ZmZlciBiYXNpcwkJKHN1cHBvcnRzIHBsYWluIDpOdyApCisJczpuZXRyd19saW5lCSAgZHVyaW5nIE53L05ldFdyaXRlLCBob2xkcyBjdXJyZW50IGxpbmUgICBudW1iZXIKKwlzOm5ldHJ3X2NvbAkgIGR1cmluZyBOdy9OZXRXcml0ZSwgaG9sZHMgY3VycmVudCBjb2x1bW4gbnVtYmVyCisJCQkgIHM6bmV0cndfbGluZSBhbmQgczpuZXRyd19jb2wgYXJlIHVzZWQgdG8KKwkJCSAgcmVzdG9yZSB0aGUgY3Vyc29yIHBvc2l0aW9uIG9uIHdyaXRlcworCWc6bmV0cndfZnRwCSAgaWYgaXQgZG9lc24ndCBleGlzdCwgdXNlIGRlZmF1bHQgZnRwCisJCQkgID0wIHVzZSBkZWZhdWx0IGZ0cAkJICAgICAgICh1aWQgcGFzc3dvcmQpCisJCQkgID0xIHVzZSBhbHRlcm5hdGUgZnRwIG1ldGhvZAkgICh1c2VyIHVpZCBwYXNzd29yZCkKKwlnOm5ldHJ3X2Z0cG1vZGUgICA9ImJpbmFyeSIJCQkJICAgIChkZWZhdWx0KQorCQkJICA9ImFzY2lpIgkJCSAgICAgKG9yIHlvdXIgY2hvaWNlKQorCWc6bmV0cndfdWlkCSAgKGZ0cCkgdXNlci1pZCwgICAgICByZXRhaW5lZCBvbiBhIHBlci1zZXNzaW9uIGJhc2lzCisJZzpuZXRyd19wYXNzd2QJICAoZnRwKSBwYXNzd29yZCwgICAgIHJldGFpbmVkIG9uIGEgcGVyLXNlc3Npb24gYmFzaXMKKwlnOm5ldHJ3X3dpbjk1ZnRwICA9MCB1c2UgdW5peC1zdHlsZSBmdHAgZXZlbiBpZiB3aW45NS93aW45OC93aW5NRQorCQkJICA9MSB1c2UgZGVmYXVsdCBtZXRob2QgdG8gZG8gZnRwCisJZzpuZXRyd19jeWd3aW4JICA9MSBhc3N1bWUgc2NwIHVuZGVyIHdpbmRvd3MgaXMgZnJvbSBjeWd3aW4KKwkJCQkJCQkgKGRlZmF1bHQgaWYgd2luZG93cykKKwkJCSAgPTAgYXNzdW1lIHNjcCB1bmRlciB3aW5kb3dzIGFjY2VwdHMKKwkJCSAgICB3aW5kb3dzLXN0eWxlIHBhdGhzCQkgKGRlZmF1bHQgb3RoZXJ3aXNlKQorCWc6bmV0cndfdXNlX250X3JjcD0wIGRvbid0IHVzZSB0aGUgcmNwIG9mIFdpbk5ULCBXaW4yMDAwIGFuZCBXaW5YUCAoZGVmYXVsdCkKKwkJCSAgPTEgdXNlIHRoZSByY3Agb2YgV2luTlQsLi4uIGluIGJpbmFyeSBtb2RlCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBOZXR3b3JrLU9yaWVudGVkIEZpbGUgVHJhbnNmZXIJCQkJKm5ldHJ3LXhmZXIqCisKK05ldHdvcmstb3JpZW50ZWQgZmlsZSB0cmFuc2ZlciB1bmRlciBWaW0gaXMgaW1wbGVtZW50ZWQgYnkgYSBWaW1MLWJhc2VkIHNjcmlwdAorKDxuZXRydy52aW0+KSB1c2luZyBwbHVnaW4gdGVjaG5pcXVlcy4gIEl0IGN1cnJlbnRseSBzdXBwb3J0cyBib3RoIHJlYWRpbmcKK2FuZCB3cml0aW5nIGFjcm9zcyBuZXR3b3JrcyB1c2luZyByY3AsIHNjcCwgZnRwIG9yIGZ0cCs8Lm5ldHJjPiwgc2NwLCBmZXRjaCwKK2Rhdi9jYWRhdmVyLCByc3luYywgb3Igc2Z0cC4KKworaHR0cCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIHJlYWQtb25seSB2aWEgdXNlIG9mIHdnZXQgb3IgZmV0Y2guCisKKzxuZXRydy52aW0+IGlzIGEgc3RhbmRhcmQgcGx1Z2luIHdoaWNoIGFjdHMgYXMgZ2x1ZSBiZXR3ZWVuIFZpbSBhbmQgdGhlCit2YXJpb3VzIGZpbGUgdHJhbnNmZXIgcHJvZ3JhbXMuICBJdCB1c2VzIGF1dG9jb21tYW5kIGV2ZW50cyAoQnVmUmVhZENtZCwKK0ZpbGVSZWFkQ21kLCBCdWZXcml0ZUNtZCkgdG8gaW50ZXJjZXB0IHJlYWRzL3dyaXRlcyB3aXRoIHVybC1saWtlIGZpbGVuYW1lcy4gPgorCisJZXguIHZpbSBmdHA6Ly9ob3N0bmFtZS9wYXRoL3RvL2ZpbGUKKzwKK1RoZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgY29sb24gc3BlY2lmeSB0aGUgcHJvdG9jb2wgdG8gdXNlOworaW4gdGhlIGV4YW1wbGUsIGl0cyBmdHAuICBUaGUgPG5ldHJ3LnZpbT4gc2NyaXB0IHRoZW4gZm9ybXVsYXRlcworYSBjb21tYW5kIG9yIGEgc2VyaWVzIG9mIGNvbW1hbmRzICh0eXBpY2FsbHkgZnRwKSB3aGljaCBpdCBpc3N1ZXMKK3RvIGFuIGV4dGVybmFsIHByb2dyYW0gKGZ0cCwgc2NwLCBldGMpIHdoaWNoIGRvZXMgdGhlIGFjdHVhbCBmaWxlCit0cmFuc2Zlci9wcm90b2NvbC4gIEZpbGVzIGFyZSByZWFkIGZyb20vd3JpdHRlbiB0byBhIHRlbXBvcmFyeSBmaWxlCisodW5kZXIgVW5peC9MaW51eCwgL3RtcC8uLi4pIHdoaWNoIHRoZSA8bmV0cncudmltPiBzY3JpcHQgd2lsbAorY2xlYW4gdXAuCisKK09uZSBtYXkgbW9kaWZ5IGFueSBwcm90b2NvbCdzIGltcGxlbWVudGluZyBleHRlcm5hbCBhcHBsaWNhdGlvbgorYnkgc2V0dGluZyBhIHZhcmlhYmxlIChleC4gc2NwIHVzZXMgdGhlIHZhcmlhYmxlIGc6bmV0cndfc2NwX2NtZCwKK3doaWNoIGlzIGRlZmF1bHRlZCB0byAic2NwIC1xIikuCisKK0Z0cCwgYW4gb2xkIHByb3RvY29sLCBzZWVtcyB0byBiZSBibGVzc2VkIGJ5IG51bWVyb3VzIGltcGxlbWVudGF0aW9ucy4KK1VuZm9ydHVuYXRlbHksIHNvbWUgaW1wbGVtZW50YXRpb25zIGFyZSBub2lzeSAoaWUuLCBhZGQganVuayB0byB0aGUgZW5kCitvZiB0aGUgZmlsZSkuICBUaHVzLCBjb25jZXJuZWQgdXNlcnMgbWF5IGRlY2lkZSB0byB3cml0ZSBhIE5ldFJlYWRGaXh1cCgpCitmdW5jdGlvbiB0aGF0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgcmVhZGluZyB3aXRoIHRoZWlyIGZ0cC4gIFNvbWUgVW5peCBzeXN0ZW1zCisoaWUuLCBGcmVlQlNEKSBwcm92aWRlIGEgdXRpbGl0eSBjYWxsZWQgImZldGNoIiB3aGljaCB1c2VzIHRoZSBmdHAgcHJvdG9jb2wKK2J1dCBpcyBub3Qgbm9pc3kgYW5kIG1vcmUgY29udmVuaWVudCwgYWN0dWFsbHksIGZvciA8bmV0cncudmltPiB0byB1c2UuCitDb25zZXF1ZW50bHksIGlmICJmZXRjaCIgaXMgZXhlY3V0YWJsZSwgaXQgd2lsbCBiZSB1c2VkIHRvIGRvIHJlYWRzIGZvcgorZnRwOi8vLi4uIChhbmQgaHR0cDovLy4uLikgLiAgU2VlIHxuZXRydy12YXJ8IGZvciBtb3JlIGFib3V0IHRoaXMuCisKK0ZvciByY3AsIHNjcCwgc2Z0cCwgYW5kIGh0dHAsIG9uZSBtYXkgdXNlIG5ldHdvcmstb3JpZW50ZWQgZmlsZSB0cmFuc2ZlcnMKK3RyYW5zcGFyZW50bHk7IGllLgorPgorCXZpbSByY3A6Ly9bdXNlckBdbWFjaGluZS9wYXRoCisJdmltIHNjcDovL1t1c2VyQF1tYWNoaW5lL3BhdGgKKzwKK0lmIHlvdXIgZnRwIHN1cHBvcnRzIDwubmV0cmM+LCB0aGVuIGl0IHRvbyBjYW4gYmUganVzdCBhcyB0cmFuc3BhcmVudGx5IHVzZWQKK2lmIHRoZSBuZWVkZWQgdHJpYWQgb2YgbWFjaGluZSBuYW1lLCB1c2VyIGlkLCBhbmQgcGFzc3dvcmQgYXJlIHByZXNlbnQgaW4KK3RoYXQgZmlsZS4gIFlvdXIgZnRwIG11c3QgYmUgYWJsZSB0byB1c2UgdGhlIDwubmV0cmM+IGZpbGUgb24gaXRzIG93biwgaG93ZXZlci4KKz4KKwl2aW0gZnRwOi8vW3VzZXJAXW1hY2hpbmVbWzojXXBvcnRudW1iZXJdL3BhdGgKKzwKK0hvd2V2ZXIsIGZ0cCB3aWxsIG9mdGVuIG5lZWQgdG8gcXVlcnkgdGhlIHVzZXIgZm9yIHRoZSB1c2VyaWQgYW5kIHBhc3N3b3JkLgorVGhlIGxhdHRlciB3aWxsIGJlIGRvbmUgInNpbGVudGx5IjsgaWUuIGFzdGVyaXNrcyB3aWxsIHNob3cgdXAgaW5zdGVhZCBvZgordGhlIGFjdHVhbGx5LXR5cGVkLWluIHBhc3N3b3JkLiAgTmV0cncgd2lsbCByZXRhaW4gdGhlIHVzZXJpZCBhbmQgcGFzc3dvcmQKK2ZvciBzdWJzZXF1ZW50IHJlYWQvd3JpdGVzIGZyb20gdGhlIG1vc3QgcmVjZW50IHRyYW5zZmVyIHNvIHN1YnNlcXVlbnQKK3RyYW5zZmVycyAocmVhZC93cml0ZSkgdG8gb3IgZnJvbSB0aGF0IG1hY2hpbmUgd2lsbCB0YWtlIHBsYWNlIHdpdGhvdXQKK2FkZGl0aW9uYWwgcHJvbXB0aW5nLgorCisJCQkJCQkJCSpuZXRydy11cmxzKgorICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09KworICB8ICBSZWFkaW5nCQkJICAgIHwgV3JpdGluZwkJCSB8ICBVc2VzICAgICAgfAorICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09KworICB8IERBVjoJCQkgICAgfAkJCQkgfAkgICAgICB8CisgIHwgIGRhdjovL2hvc3QvcGF0aAkJICAgIHwJCQkJIHwgY2FkYXZlciAgICB8CisgIHwgIDpOcmVhZCBkYXY6Ly9ob3N0L3BhdGgJICAgIHwgOk53cml0ZSBkYXY6Ly9ob3N0L3BhdGgJIHwgY2FkYXZlciAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisgIHwgRkVUQ0g6CQkJICAgIHwJCQkJIHwJICAgICAgfAorICB8ICBmZXRjaDovL1t1c2VyQF1ob3N0L3BhdGgJICAgIHwJCQkJIHwJICAgICAgfAorICB8ICBmZXRjaDovL1t1c2VyQF1ob3N0Omh0dHAvcGF0aCAgfCAgTm90IEF2YWlsYWJsZQkJIHwgZmV0Y2ggICAgICB8CisgIHwgIDpOcmVhZCBmZXRjaDovL1t1c2VyQF1ob3N0L3BhdGh8CQkJCSB8CSAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgfCBGSUxFOgkJCSAgICB8CQkJCSB8CSAgICAgIHwKKyAgfCAgZmlsZTovLy8qCQkJICAgIHwgZmlsZTovLy8qCQkJIHwJICAgICAgfAorICB8ICBmaWxlOi8vbG9jYWxob3N0LyoJCSAgICB8IGZpbGU6Ly9sb2NhbGhvc3QvKgkgfAkgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisgIHwgRlRQOgkgICgqMykJCSAgICB8CQkgICAoKjMpCQkgfAkgICAgICB8CisgIHwgIGZ0cDovL1t1c2VyQF1ob3N0L3BhdGgJICAgIHwgZnRwOi8vW3VzZXJAXWhvc3QvcGF0aAkgfCBmdHAJKCoyKSAgfAorICB8ICA6TnJlYWQgZnRwOi8vaG9zdC9wYXRoCSAgICB8IDpOd3JpdGUgZnRwOi8vaG9zdC9wYXRoCSB8IGZ0cCsubmV0cmMgfAorICB8ICA6TnJlYWQgaG9zdCBwYXRoCQkgICAgfCA6TndyaXRlIGhvc3QgcGF0aAkJIHwgZnRwKy5uZXRyYyB8CisgIHwgIDpOcmVhZCBob3N0IHVpZCBwYXNzIHBhdGgJICAgIHwgOk53cml0ZSBob3N0IHVpZCBwYXNzIHBhdGggfCBmdHAJICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICB8IEhUVFA6IHdnZXQgaXMgZXhlY3V0YWJsZTogKCo0KSAgfAkJCQkgfAkgICAgICB8CisgIHwgIGh0dHA6Ly9bdXNlckBdaG9zdC9wYXRoCSAgICB8CSAgICAgTm90IEF2YWlsYWJsZQkgfCB3Z2V0ICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgfCBIVFRQOiBmZXRjaCBpcyBleGVjdXRhYmxlICgqNCkgIHwJCQkJIHwJICAgICAgfAorICB8ICBodHRwOi8vW3VzZXJAXWhvc3QvcGF0aAkgICAgfAkgICAgIE5vdCBBdmFpbGFibGUJIHwgZmV0Y2ggICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisgIHwgUkNQOgkJCSAgICB8CQkJCSB8CSAgICAgIHwKKyAgfCAgcmNwOi8vW3VzZXJAXWhvc3QvcGF0aAkgICAgfCByY3A6Ly9bdXNlckBdaG9zdC9wYXRoCSB8IHJjcAkgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisgIHwgUlNZTkM6CQkJICAgIHwJCQkJIHwJICAgICAgfAorICB8ICByc3luYzovL1t1c2VyQF1ob3N0L3BhdGgJICAgIHwgcnN5bmM6Ly9bdXNlckBdaG9zdC9wYXRoCSB8IHJzeW5jICAgICAgfAorICB8ICA6TnJlYWQgcnN5bmM6Ly9ob3N0L3BhdGgJICAgIHwgOk53cml0ZSByc3luYzovL2hvc3QvcGF0aCAgfCByc3luYyAgICAgIHwKKyAgfCAgOk5yZWFkIHJjcDovL2hvc3QvcGF0aAkgICAgfCA6TndyaXRlIHJjcDovL2hvc3QvcGF0aAkgfCByY3AJICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICB8IFNDUDoJCQkgICAgfAkJCQkgfAkgICAgICB8CisgIHwgIHNjcDovL1t1c2VyQF1ob3N0L3BhdGgJICAgIHwgc2NwOi8vW3VzZXJAXWhvc3QvcGF0aAkgfCBzY3AJICAgICAgfAorICB8ICA6TnJlYWQgc2NwOi8vaG9zdC9wYXRoCSAgICB8IDpOd3JpdGUgc2NwOi8vaG9zdC9wYXRoCSB8IHNjcAkoKjEpICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisgIHwgU0ZUUDoJCQkgICAgfAkJCQkgfAkgICAgICB8CisgIHwgIHNmdHA6Ly9bdXNlckBdaG9zdC9wYXRoCSAgICB8IHNmdHA6Ly9bdXNlckBdaG9zdC9wYXRoCSB8IHNmdHAgICAgICAgfAorICB8ICA6TnJlYWQgc2Z0cDovL2hvc3QvcGF0aAkgICAgfCA6TndyaXRlIHNmdHA6Ly9ob3N0L3BhdGgJIHwgc2Z0cCAgKCoxKSB8CisgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rCisKKwkoKjEpIEZvciBhbiBhYnNvbHV0ZSBwYXRoIHVzZSBzY3A6Ly9tYWNoaW5lLy9wYXRoLgorCisJKCoyKSBpZiA8Lm5ldHJjPiBpcyBwcmVzZW50LCBpdCBpcyBhc3N1bWVkIHRoYXQgaXQgd2lsbAorCXdvcmsgd2l0aCB5b3VyIGZ0cCBjbGllbnQuICBPdGhlcndpc2UgdGhlIHNjcmlwdCB3aWxsCisJcHJvbXB0IGZvciB1c2VyLWlkIGFuZCBwYXNzd29yZC4KKworCSgqMykgZm9yIGZ0cCwgIm1hY2hpbmUiIG1heSBiZSBtYWNoaW5lI3BvcnQgb3IgbWFjaGluZTpwb3J0CisJaWYgYSBkaWZmZXJlbnQgcG9ydCBpcyBuZWVkZWQgdGhhbiB0aGUgc3RhbmRhcmQgZnRwIHBvcnQKKworCSgqNCkgZm9yIGh0dHA6Li4uLCBpZiB3Z2V0IGlzIGF2YWlsYWJsZSBpdCB3aWxsIGJlIHVzZWQuICBPdGhlcndpc2UsCisJaWYgZmV0Y2ggaXMgYXZhaWxhYmxlIGl0IHdpbGwgYmUgdXNlZC4KKworQm90aCB0aGUgOk5yZWFkIGFuZCB0aGUgOk53cml0ZSBleC1jb21tYW5kcyBjYW4gYWNjZXB0IG11bHRpcGxlIGZpbGVuYW1lcy4KKworCitORVRSQwkJCQkJCQkqbmV0cnctbmV0cmMqCisKK1RoZSB0eXBpY2FsIHN5bnRheCBmb3IgbGluZXMgaW4gYSA8Lm5ldHJjPiBmaWxlIGlzIGdpdmVuIGFzIHNob3duIGJlbG93LgorRnRwIHVuZGVyIFVuaXggdXN1YWxseSBzdXBwb3J0IDwubmV0cmM+OyBXaW5kb3dzJyBmdHAgdXN1YWxseSBkb2Vzbid0LgorPgorCW1hY2hpbmUge2Z1bGwgbWFjaGluZSBuYW1lfSBsb2dpbiB7dXNlci1pZH0gcGFzc3dvcmQgIntwYXNzd29yZH0iCisJZGVmYXVsdCBsb2dpbiB7dXNlci1pZH0gcGFzc3dvcmQgIntwYXNzd29yZH0iCisKK1lvdXIgZnRwIGNsaWVudCBtdXN0IGhhbmRsZSB0aGUgdXNlIG9mIDwubmV0cmM+IG9uIGl0cyBvd24sIGJ1dCBpZiB0aGUKKzwubmV0cmM+IGZpbGUgZXhpc3RzLCBhbiBmdHAgdHJhbnNmZXIgd2lsbCBub3QgYXNrIGZvciB0aGUgdXNlci1pZCBvcgorcGFzc3dvcmQuCisKKwlOb3RlOgorCVNpbmNlIHRoaXMgZmlsZSBjb250YWlucyBwYXNzd29yZHMsIG1ha2UgdmVyeSBzdXJlIG5vYm9keSBlbHNlIGNhbgorCXJlYWQgdGhpcyBmaWxlISAgTW9zdCBwcm9ncmFtcyB3aWxsIHJlZnVzZSB0byB1c2UgYSAubmV0cmMgdGhhdCBpcworCXJlYWRhYmxlIGZvciBvdGhlcnMuICBEb24ndCBmb3JnZXQgdGhhdCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgY2FuCisJc3RpbGwgcmVhZCB0aGUgZmlsZSEKKworCitQQVNTV09SRAkJCQkJCSpuZXRydy1wYXNzd2QqCisKK1RoZSBzY3JpcHQgYXR0ZW1wdHMgdG8gZ2V0IHBhc3N3b3JkcyBmb3IgZnRwIGludmlzaWJseSB1c2luZyB8aW5wdXRzZWNyZXQoKXwsCithIGJ1aWx0LWluIFZpbSBmdW5jdGlvbi4gIFNlZSB8bmV0cnctdWlkcGFzc3wgZm9yIGhvdyB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkCithZnRlciBvbmUgaGFzIHNldCBpdC4KKworVW5mb3J0dW5hdGVseSB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSBmb3IgbmV0cncgdG8gZmVlZCBhIHBhc3N3b3JkCit0byBzY3AuICBUaHVzIGV2ZXJ5IHRyYW5zZmVyIHZpYSBzY3Agd2lsbCByZXF1aXJlIHJlLWVudHJ5IG9mIHRoZSBwYXNzd29yZC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIEFjdGl2YXRpb24JCQkJCQkqbmV0cnctYWN0aXZhdGUqCisKK05ldHdvcmstb3JpZW50ZWQgZmlsZSB0cmFuc2ZlcnMgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0IHdoZW5ldmVyCit8J25vY29tcGF0aWJsZSd8IG1vZGUgaXMgZW5hYmxlZC4gIFRoZSA8bmV0cncudmltPiBmaWxlIHJlc2lkZXMgaW4geW91cgorc3lzdGVtJ3MgdmltLXBsdWdpbiBkaXJlY3RvcnkgYW5kIGlzIHNvdXJjZWQgYXV0b21hdGljYWxseSB3aGVuZXZlciB5b3UKK2JyaW5nIHVwIHZpbS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFRyYW5zcGFyZW50IEZpbGUgVHJhbnNmZXIJCQkJKm5ldHJ3LXRyYW5zcGFyZW50KgorCitUcmFuc3BhcmVudCBmaWxlIHRyYW5zZmVycyBvY2N1ciB3aGVuZXZlciBhIHJlZ3VsYXIgZmlsZSByZWFkIG9yIHdyaXRlCisoaW52b2tlZCB2aWEgYW4gfDphdXRvY21kfCBmb3IgfEJ1ZlJlYWRDbWR8IG9yIHxCdWZXcml0ZUNtZHwgZXZlbnRzKSBpcyBtYWRlLgorVGh1cyBvbmUgbWF5IHVzZSBmaWxlcyBhY3Jvc3MgbmV0d29ya3MgYXMgaWYgdGhleSB3ZXJlIGxvY2FsLiA+CisKKwl2aW0gZnRwOi8vW3VzZXJAXW1hY2hpbmUvcGF0aAorCS4uLgorCTp3cQorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gRXggQ29tbWFuZHMJCQkJCQkqbmV0cnctZXgqCisKK1RoZSB1c3VhbCByZWFkL3dyaXRlIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuICBUaGVyZSBhcmUgYWxzbyBhIGNvdXBsZSBvZgorYWRkaXRpb25hbCBjb21tYW5kcyBhdmFpbGFibGUuCisKKzpbcmFuZ2VdTncJV3JpdGUgdGhlIHNwZWNpZmllZCBsaW5lcyB0byB0aGUgY3VycmVudAorCQlmaWxlIGFzIHNwZWNpZmllZCBpbiBiOm5ldHJ3X2xhc3RmaWxlLgorCis6W3JhbmdlXU53IHtuZXRmaWxlfSBbe25ldGZpbGV9XS4uLgorCQlXcml0ZSB0aGUgc3BlY2lmaWVkIGxpbmVzIHRvIHRoZSB7bmV0ZmlsZX0uCisKKzpOcmVhZAorCQlSZWFkIHRoZSBzcGVjaWZpZWQgbGluZXMgaW50byB0aGUgY3VycmVudAorCQlidWZmZXIgZnJvbSB0aGUgZmlsZSBzcGVjaWZpZWQgaW4KKwkJYjpuZXRyd19sYXN0ZmlsZS4KKworOk5yZWFkIHtuZXRmaWxlfSB7bmV0ZmlsZX0uLi4KKwkJUmVhZCB0aGUge25ldGZpbGV9IGFmdGVyIHRoZSBjdXJyZW50IGxpbmUuCisKKwkJCQkJCQkJCSpuZXRydy11aWRwYXNzKgorOmNhbGwgTmV0VXNlclBhc3MoKQorCQlJZiBiOm5ldHJ3X3VpZCBhbmQgYjpuZXRyd19wYXNzd2QgZG9uJ3QgZXhpc3QsCisJCXRoaXMgZnVuY3Rpb24gcXVlcnkgdGhlIHVzZXIgZm9yIHRoZW0uCisKKzpjYWxsIE5ldFVzZXJQYXNzKCJ1c2VyaWQiKQorCQlUaGlzIGNhbGwgd2lsbCBzZXQgdGhlIGI6bmV0cndfdWlkIGFuZCwgaWYKKwkJdGhlIHBhc3N3b3JkIGRvZXNuJ3QgZXhpc3QsIHdpbGwgcXVlcnkgdGhlIHVzZXIgZm9yIGl0LgorCis6Y2FsbCBOZXRVc2VyUGFzcygidXNlcmlkIiwicGFzc3dkIikKKwkJVGhpcyBjYWxsIHdpbGwgc2V0IGJvdGggdGhlIGI6bmV0cndfdWlkIGFuZCBiOm5ldHJ3X3Bhc3N3ZC4KKwkJVGhlIHVzZXItaWQgYW5kIHBhc3N3b3JkIGFyZSB1c2VkIGJ5IGZ0cCB0cmFuc2ZlcnMuICBPbmUgbWF5CisJCWVmZmVjdGl2ZWx5IHJlbW92ZSB0aGUgdXNlci1pZCBhbmQgcGFzc3dvcmQgYnkgdXNpbmcgIiIKKwkJc3RyaW5ncy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFZhcmlhYmxlcyBhbmQgT3B0aW9ucwkJCSpuZXRydy1vcHRpb25zKiAqbmV0cnctdmFyKgorCitUaGUgc2NyaXB0IDxuZXRydy52aW0+IHVzZXMgc2V2ZXJhbCB2YXJpYWJsZXMgd2hpY2ggY2FuIGFmZmVjdCA8bmV0cncudmltPidzCitiZWhhdmlvci4gIFRoZXNlIHZhcmlhYmxlcyB0eXBpY2FsbHkgbWF5IGJlIHNldCBpbiB0aGUgdXNlcidzIDwudmltcmM+IGZpbGU6CisKKwlnOm5ldHJ3X3VpZAkJSG9sZHMgY3VycmVudCB1c2VyLWlkIGZvciBmdHAuCisJZzpuZXRyd19wYXNzd2QJCUhvbGRzIGN1cnJlbnQgcGFzc3dvcmQgZm9yIGZ0cC4KKwliOm5ldHJ3X2xhc3RmaWxlCUhvbGRzIGxhdGVzdCBtZXRob2QvbWFjaGluZS9wYXRoLgorCWI6bmV0cndfbGluZQkJSG9sZHMgY3VycmVudCBsaW5lIG51bWJlciAgICAgKGR1cmluZyBOZXRXcml0ZSkKKwliOm5ldHJ3X2NvbAkJSG9sZHMgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gKGR1cmluZyBOZXRXcml0ZSkKKwlnOm5ldHJ3X2Z0cAkJPTAgdXNlIGRlZmF1bHQgZnRwCSAgICAgICh1aWQgcGFzc3dvcmQpCisJCQkJPTEgdXNlIGFsdGVybmF0ZSBmdHAJICAgICAgKHVzZXIgdWlkIHBhc3N3b3JkKQorCQkJCShzZWUgfG5ldHJ3LW9wdGlvbnN8KQorCWc6bmV0cndfZnRwbW9kZQkJPSJiaW5hcnkiCQkgICAgICAoZGVmYXVsdCkKKwkJCQk9ImFzY2lpIgkJICAgICAgKHlvdXIgY2hvaWNlKQorCWc6bmV0cndfaWdub3JlbmV0cmMJPTEJCQkgICAgICAoZGVmYXVsdCkKKwkJCQkgICBpZiB5b3UgaGF2ZSBhIDwubmV0cmM+IGZpbGUgYnV0IHlvdSBkb24ndAorCQkJCSAgIHdhbnQgaXQgdXNlZCwgdGhlbiBzZXQgdGhpcyB2YXJpYWJsZS4gIEl0cworCQkJCSAgIG1lcmUgZXhpc3RlbmNlIGlzIGVub3VnaCB0byBjYXVzZSA8Lm5ldHJjPgorCQkJCSAgIHRvIGJlIGlnbm9yZWQuCisJZzpuZXRyd193aW45NWZ0cAk9MCB1c2UgdW5peC1zdHlsZSBmdHAgZXZlbiBpZiB3aW45NS85OC9NRS9ldGMKKwkJCQk9MSB1c2UgZGVmYXVsdCBtZXRob2QgdG8gZG8gZnRwCisJZzpuZXRyd19jeWd3aW4JCT0xIGFzc3VtZSBzY3AgdW5kZXIgd2luZG93cyBpcyBmcm9tIGN5Z3dpbgorCQkJCQkJCSAgICAgIChkZWZhdWx0L3dpbmRvd3MpCisJCQkJPTAgYXNzdW1lIHNjcCB1bmRlciB3aW5kb3dzIGFjY2VwdHMgd2luZG93cworCQkJCSAgIHN0eWxlIHBhdGhzCQkgICAgICAoZGVmYXVsdC9lbHNlKQorCWc6bmV0cndfdXNlX250X3JjcAk9MCBkb24ndCB1c2UgV2luTlQvMksvWFAncyByY3AgKGRlZmF1bHQpCisJCQkJPTEgdXNlIFdpbk5ULzJLL1hQJ3MgcmNwLCBiaW5hcnkgbW9kZQorCisKK1RoZSBzY3JpcHQgd2lsbCBhbHNvIG1ha2UgdXNlIG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGludGVybmFsbHksIGFsYmVpdAordGVtcG9yYXJpbHkuCisKKwlnOm5ldHJ3X21ldGhvZAkJSW5kZXggaW5kaWNhdGluZyByY3AvZnRwKy5uZXRyYy9mdHAKKwlnOm5ldHJ3X21hY2hpbmUJCUhvbGRzIG1hY2hpbmUgbmFtZSBwYXJzZWQgZnJvbSBpbnB1dAorCWc6bmV0cndfZm5hbWUJCUhvbGRzIGZpbGVuYW1lIGJlaW5nIGFjY2Vzc2VkCisKKwkJCQkJCQkJKm5ldHJ3LXByb3RvY29sKgorPgorCQkJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkgICBQcm90b2NvbCBDb250cm9sIE9wdGlvbnMKKwkJCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE9wdGlvbgkgICAgICBUeXBlCSAgU2V0dGluZwkgIE1lYW5pbmcgfgorICAgIC0tLS0tLS0tLQkgICAgICAtLS0tLS0tLQkgIC0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPgorICAgIG5ldHJ3X2Z0cAkgICAgICB2YXJpYWJsZQkgID1kb2Vzbid0IGV4aXN0ICB1c2VyaWQgc2V0IGJ5ICJ1c2VyIHVzZXJpZCIKKwkJCQkgID0wCQkgIHVzZXJpZCBzZXQgYnkgInVzZXIgdXNlcmlkIgorCQkJCSAgPTEJCSAgdXNlcmlkIHNldCBieSAidXNlcmlkIgorICAgIE5ldFJlYWRGaXh1cCAgICAgIGZ1bmN0aW9uCSAgPWRvZXNuJ3QgZXhpc3QgIG5vIGNoYW5nZQorCQkJCSAgPWV4aXN0cwkgIEFsbG93cyB1c2VyIHRvIGhhdmUgZmlsZXMKKwkJCQkJCSAgcmVhZCB2aWEgZnRwIGF1dG9tYXRpY2FsbHkKKwkJCQkJCSAgdHJhbnNmb3JtZWQgaG93ZXZlciB0aGV5IHdpc2gKKwkJCQkJCSAgYnkgTmV0UmVhZEZpeHVwKCkKKyAgICBnOm5ldHJ3X2Rhdl9jbWQgICAgdmFyaWFibGUgICA9ImNhZGF2ZXIiCisgICAgZzpuZXRyd19mZXRjaF9jbWQgIHZhcmlhYmxlICAgPSJmZXRjaCAtbyIKKyAgICBnOm5ldHJ3X2Z0cF9jbWQgICAgdmFyaWFibGUgICA9ImZ0cCIKKyAgICBnOm5ldHJ3X2h0dHBfY21kICAgdmFyaWFibGUgICA9ImZldGNoIC1vIiBlbHNlIGlmIGZldGNoIGlzIGV4ZWN1dGFibGUKKyAgICBnOm5ldHJ3X2h0dHBfY21kICAgdmFyaWFibGUgICA9IndnZXQgLU8iICBpZiAgICAgIHdnZXQgIGlzIGV4ZWN1dGFibGUKKyAgICBnOm5ldHJ3X3JjcF9jbWQgICAgdmFyaWFibGUgICA9InJjcCIKKyAgICBnOm5ldHJ3X3JzeW5jX2NtZCAgdmFyaWFibGUgICA9InJzeW5jIC1hIgorICAgIGc6bmV0cndfc2NwX2NtZCAgICB2YXJpYWJsZSAgID0ic2NwIC1xIgorICAgIGc6bmV0cndfc2Z0cF9jbWQgICB2YXJpYWJsZSAgID0ic2Z0cCIKKzwKK1RoZSBmaXJzdCB0d28gb3B0aW9ucyBib3RoIGhlbHAgd2l0aCBjZXJ0YWluIGZ0cCdzIHRoYXQgZ2l2ZSB0cm91YmxlIG90aGVyd2lzZS4KK0luIG9yZGVyIHRvIGJlc3QgdW5kZXJzdGFuZCBob3cgdG8gdXNlIHRoZXNlIG9wdGlvbnMgaWYgZnRwIGlzIGdpdmluZyB5b3UKK3Ryb3VibGVzLCBhIGJpdCBvZiBkaXNjdXNzaW9uIGZvbGxvd3Mgb24gaG93IG5ldHJ3IGRvZXMgZnRwIHJlYWRzLgorCitUaGUgZzpuZXRyd18uLi5fY21kIHZhcmlhYmxlcyBzcGVjaWZ5IHRoZSBleHRlcm5hbCBwcm9ncmFtIHRvIHVzZSBoYW5kbGUKK3RoZSBhc3NvY2lhdGVkIHByb3RvY29sIChyY3AsIGZ0cCwgZXRjKSwgcGx1cyBhbnkgb3B0aW9ucy4KKworTmV0cncgdHlwaWNhbGx5IGJ1aWxkcyB1cCBsaW5lcyBvZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzIGluIGEKK3RlbXBvcmFyeSBmaWxlOgorPgorICBJRiBnOm5ldHJ3X2Z0cCAhZXhpc3RzIG9yIGlzIG5vdCAxICAgICBJRiBnOm5ldHJ3X2Z0cCBleGlzdHMgYW5kIGlzIDEKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgb3BlbiBtYWNoaW5lIFtwb3J0XQkJICAgICAgb3BlbiBtYWNoaW5lIFtwb3J0XQorICAgICAgIHVzZXIgdXNlcmlkIHBhc3N3b3JkCQkgICAgICB1c2VyaWQgcGFzc3dvcmQKKyAgICAgICBbZzpuZXRyd19mdHBtb2RlXQkJICAgICAgcGFzc3dvcmQKKyAgICAgICBnZXQgZmlsZW5hbWUgdGVtcGZpbGUJCSAgICAgIFtnOm5ldHJ3X2Z0cG1vZGVdCisJCQkJCSAgICAgIGdldCBmaWxlbmFtZSB0ZW1wZmlsZQorPAorTmV0cncgdGhlbiBleGVjdXRlcyB0aGUgbGluZXMgYWJvdmUgYnkgdXNlIG9mIGEgZmlsdGVyOgorPgorCTolISB7ZzpuZXRyd19mdHBfY21kfSAtaSBbLW5dCis8CisKK3doZXJlCisJZzpuZXRyd19mdHBfY21kIGlzIHVzdWFsbHkgImZ0cCIsCisJLWkgdGVsbHMgZnRwIG5vdCB0byBiZSBpbnRlcmFjdGl2ZQorCS1uIG1lYW5zIGRvbid0IHVzZSBuZXRyYyBhbmQgaXMgdXNlZCBmb3IgTWV0aG9kICMzIChmdHAgdy9vIDwubmV0cmM+KQorCitJZiA8Lm5ldHJjPiBleGlzdHMgaXQgd2lsbCBiZSB1c2VkIHRvIGF2b2lkIGhhdmluZyB0byBxdWVyeSB0aGUgdXNlciBmb3IKK3VzZXJpZCBhbmQgcGFzc3dvcmQpLiAgVGhlIHRyYW5zZmVycmVkIGZpbGUgaXMgcHV0IGludG8gYSB0ZW1wb3JhcnkgZmlsZS4KK1RoZSB0ZW1wb3JhcnkgZmlsZSBpcyB0aGVuIHJlYWQgaW50byB0aGUgbWFpbiBlZGl0aW5nIHNlc3Npb24gd2luZG93IHRoYXQKK3JlcXVlc3RlZCBpdCBhbmQgdGhlIHRlbXBvcmFyeSBmaWxlIGRlbGV0ZWQuCisKK0lmIHlvdXIgZnRwIGRvZXNuJ3QgYWNjZXB0IHRoZSAidXNlciIgY29tbWFuZCBhbmQgaW1tZWRpYXRlbHkganVzdCBkZW1hbmRzCithIHVzZXJpZCwgdGhlbiB0cnkgcHV0dGluZyAibGV0IG5ldHJ3X2Z0cD0xIiBpbiB5b3VyIDwudmltcmM+LgorCisJCQkJCQkJCSpuZXRydy1maXh1cCoKK0lmIHlvdXIgZnRwIGZvciB3aGF0ZXZlciByZWFzb24gZ2VuZXJhdGVzIHVud2FudGVkIGxpbmVzIChzdWNoIGFzIEFVVEgKK21lc3NhZ2VzKSB5b3UgbWF5IHdyaXRlIGEgTmV0UmVhZEZpeHVwKHRtcGZpbGUpIGZ1bmN0aW9uOgorPgorICAgIGZ1bmN0aW9uISBOZXRSZWFkRml4dXAobWV0aG9kLGxpbmUxLGxpbmUyKQorICAgICAgIiBhOmxpbmUxOiBmaXJzdCBuZXcgbGluZSBpbiBjdXJyZW50IGZpbGUKKyAgICAgICIgYTpsaW5lMjogbGFzdCAgbmV3IGxpbmUgaW4gY3VycmVudCBmaWxlCisgICAgICBpZiAgICAgYTptZXRob2QgPT0gMSAicmNwCisgICAgICBlbHNlaWYgYTptZXRob2QgPT0gMiAiZnRwICsgPC5uZXRyYz4KKyAgICAgIGVsc2VpZiBhOm1ldGhvZCA9PSAzICJmdHAgKyBtYWNoaW5lLHVpZCxwYXNzd29yZCxmaWxlbmFtZQorICAgICAgZWxzZWlmIGE6bWV0aG9kID09IDQgInNjcAorICAgICAgZWxzZWlmIGE6bWV0aG9kID09IDUgImh0dHAvd2dldAorICAgICAgZWxzZWlmIGE6bWV0aG9kID09IDYgImRhdi9jYWRhdmVyCisgICAgICBlbHNlaWYgYTptZXRob2QgPT0gNyAicnN5bmMKKyAgICAgIGVsc2VpZiBhOm1ldGhvZCA9PSA4ICJmZXRjaAorICAgICAgZWxzZWlmIGE6bWV0aG9kID09IDkgInNmdHAKKyAgICAgIGVsc2UJCSAiIGNvbXBsYWluCisgICAgICBlbmRpZgorICAgIGVuZGZ1bmN0aW9uCis+CitUaGUgTmV0UmVhZEZpeHVwKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaWYgaXQgZXhpc3RzIGFuZCB0aHVzIGFsbG93cworeW91IHRvIGN1c3RvbWl6ZSB5b3VyIHJlYWRpbmcgcHJvY2Vzcy4gIEFzIGEgZnVydGhlciBleGFtcGxlLCA8bmV0cncudmltPgorY29udGFpbnMganVzdCBzdWNoIGEgZnVuY3Rpb24gdG8gaGFuZGxlIFdpbmRvd3MgOTUgZnRwLiAgRm9yIHdoYXRldmVyCityZWFzb24sIFdpbmRvd3MgOTUncyBmdHAgZHVtcHMgZm91ciBibGFuayBsaW5lcyBhdCB0aGUgZW5kIG9mIGEgdHJhbnNmZXIsCithbmQgc28gaXQgaXMgZGVzaXJhYmxlIHRvIGF1dG9tYXRlIHRoZWlyIHJlbW92YWwuICBIZXJlJ3Mgc29tZSBjb2RlIHRha2VuCitmcm9tIDxuZXRydy52aW0+IGl0c2VsZjoKKz4KKyAgICBpZiBoYXMoIndpbjk1IikgJiYgZzpuZXRyd193aW45NWZ0cAorICAgICBmdSEgTmV0UmVhZEZpeHVwKG1ldGhvZCwgbGluZTEsIGxpbmUyKQorICAgICAgIGlmIG1ldGhvZCA9PSAzICAgIiBmdHAgKG5vIDwubmV0cmM+KQorCWxldCBmb3VyYmxhbmtsaW5lcz0gbGluZTIgLSAzCisJc2lsZW50IGZvdXJibGFua2xpbmVzLiIsIi5saW5lMi4iZy9eXHMqL2QiCisgICAgICAgZW5kaWYKKyAgICAgZW5kZnVuY3Rpb24KKyAgICBlbmRpZgorPgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIERlYnVnZ2luZwkJCQkJCSpuZXRydy1kZWJ1ZyoKKworVGhlIDxuZXRydy52aW0+IHNjcmlwdCBpcyB0eXBpY2FsbHkgYXZhaWxhYmxlIGFzOgorCisJL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltNngvcGx1Z2luL25ldHJ3LnZpbQorCit3aGljaCBpcyBsb2FkZWQgYXV0b21hdGljYWxseSBhdCBzdGFydHVwIChhc3N1bWluZyA6c2V0IG5vY3ApLgorCisJMS4gR2V0IHRoZSA8RGVjaG8udmltPiBzY3JpcHQsIGF2YWlsYWJsZSBhczoKKworCQlodHRwOi8vbXlzaXRlLnZlcml6b24ubmV0L2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCN2aW1saW5rc19zY3JpcHRzCisJCWFzICJEZWNobywgYSB2aW1MIGRlYnVnZ2luZyBhaWQiCisJICAgb3IKKwkJaHR0cDovL3ZpbS5zb3VyY2Vmb3JnZS5uZXQvc2NyaXB0cy9zY3JpcHQucGhwP3NjcmlwdF9pZD0xMjAKKworCSAgIGFuZCBwdXQgaXQgaW50byB5b3VyIGxvY2FsIHBsdWdpbiBkaXJlY3RvcnkKKworCTIuIEVkaXQgdGhlIDxuZXRydy52aW0+IGZpbGUgYXMgZm9sbG93czoKKworCQk6RGVjaG9PbgorCisJICAgKHRvIHJlc3RvcmUgdG8gbm9ybWFsLCB1c2UgIDpEZWNob09mZiApCisKKwkzLiBUaGVuIGJyaW5nIHVwIHZpbSBhbmQgYXR0ZW1wdCBhIHRyYW5zZmVyLiAgQSBzZXQgb2YgbWVzc2FnZXMKKwkgICBzaG91bGQgYXBwZWFyIGNvbmNlcm5pbmcgdGhlIHN0ZXBzIHRoYXQgPG5ldHJ3LnZpbT4gdG9vayBpbgorCSAgIGF0dGVtcHRpbmcgdG8gcmVhZC93cml0ZSB5b3VyIGZpbGUgb3ZlciB0aGUgbmV0d29yay4gIFBsZWFzZQorCSAgIHNlbmQgdGhhdCBpbmZvcm1hdGlvbiB0byA8bmV0cncudmltPidzIG1haW50YWluZXIsCisKKwkJZHJjaGlwTk9TUEFNIGF0IGNhbXBiZWxsZmFtaWx5LmJpeiAtIE5PU1BBTQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIE5ldyBTdHVmZgkJCQkJCSpuZXRydy1uZXcqICpuZXRydy1uZXdzdHVmZioKKworICAgICAgIHY0MzogKiBtb3ZlZCAiRXhwbGFuYXRpb24iIGNvbW1lbnRzIHRvIDxwaV9uZXRydy50eHQ+IGhlbHAgZmlsZQorCSAgICAgIGFzICJOZXR3b3JrIFJlZmVyZW5jZSIgKHxuZXRydy1yZWZ8KQorCSAgICAqIDxuZXRydy52aW0+IG5vdyB1c2VzIERmdW5jKCkgRGVjaG8oKSBhbmQgRHJldCgpIGZvciBkZWJ1Z2dpbmcKKwkgICAgKiByZW1vdmVkIHN1cGVyZmx1b3VzIE5ldFJlc3RvcmVQb3NuKCkgY2FsbHMKKyAgICAgICB2NDI6ICogbm93IGRvZXMgQnVmUmVhZFByZSBhbmQgQnVmUmVhZFBvc3QgZXZlbnRzIG9uIGZpbGU6Ly8vKgorCSAgICAgIGFuZCBmaWxlOi8vbG9jYWxob3N0LyoKKyAgICAgICB2NDE6ICogaW5zdGFsbGVkIGZpbGU6Ly8vKiBhbmQgZmlsZTovL2xvY2FsaG9zdC8qIGhhbmRsaW5nCisgICAgICAgdjQwOiAqIHByZXZlbnRzIHJlZHJhdyB3aGVuIGEgcHJvdG9jb2wgZXJyb3Igb2NjdXJzIHNvIHRoYXQgdGhlCisJICAgICAgdXNlciBtYXkgc2VlIGl0CisgICAgICAgdjM5OiAqIHNmdHAgc3VwcG9ydAorICAgICAgIHYzODogKiBOb3cgdXNlcyBOZXRSZXN0b3JlUG9zbigpIGNhbGxzIHdpdGggTnJlYWQvTndyaXRlIGNvbW1hbmRzCisJICAgICogVGVtcG9yYXJ5IGZpbGVzIG5vdyByZW1vdmVkIHZpYSBid2lwZSEgaW5zdGVhZCBvZiBid2lwZQorCSAgICAgICh0aGFua3MgdG8gRGF2ZSBSb2JlcnRzKQorICAgICAgIHYzNzogKiBDbGFhcidzIG1vZGlmaWNhdGlvbnMgd2hpY2ggdGVzdCBpZiBmdHAgaXMgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlCisJICAgICAgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlCisJICAgICogQWZ0ZXIgYSByZWFkLCB0aGUgYWx0ZXJuYXRlIGZpbGUgd2FzIHBvaW50aW5nIHRvIHRoZSB0ZW1wIGZpbGUuCisJICAgICAgVGhlIHRlbXAgZmlsZSBidWZmZXIgaXMgbm93IHdpcGVkIG91dC4KKwkgICAgKiByZW1vdmVkIHNpbGVudCBmcm9tIHRyYW5zZmVyIG1ldGhvZHMgc28gdXNlciBjYW4gc2VlIHdoYXQncworCSAgICAgIGhhcHBlbmluZworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gQ3JlZGl0cwkJCQkJCSpuZXRydy1jcmVkaXRzKgorCisJVmltIGVkaXRvcglieSBCcmFtIE1vb2xlbmFhciAoVGhhbmtzLCBCcmFtISkKKwlkYXYJCXN1cHBvcnQgYnkgQyBDYW1wYmVsbAorCWZldGNoCQlzdXBwb3J0IGJ5IEJyYW0gTW9vbGVuYWFyIGFuZCBDIENhbXBiZWxsCisJZnRwCQlzdXBwb3J0IGJ5IEMgQ2FtcGJlbGwgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0+IC0gTk9TUEFNCisJaHR0cAkJc3VwcG9ydCBieSBCcmFtIE1vb2xlbmFhciA8YnJhbUBtb29sZW5hYXIubmV0PgorCXJjcAorCXJzeW5jCQlzdXBwb3J0IGJ5IEMgQ2FtcGJlbGwgKHN1Z2dlc3RlZCBieSBFcmlrIFdhcmVuZG9ycGgpCisJc2NwCQlzdXBwb3J0IGJ5IHJhZiA8cmFmQGNvbWR5bi5jb20uYXU+CisJc2Z0cAkJc3VwcG9ydCBieSBDIENhbXBiZWxsCisKKwlpbnB1dHNlY3JldCgpLCBCdWZSZWFkQ21kLCBCdWZXcml0ZUNtZCBjb250cmlidXRlZCBieSBDIENhbXBiZWxsCisKKwlKw6lyw7RtZSBBdWfDqQkJLS0gYWxzbyB1c2luZyBuZXcgYnVmZmVyIG1ldGhvZCB3aXRoIGZ0cCsubmV0cmMKKwlCcmFtIE1vb2xlbmFhcgkJLS0gb2J2aW91c2x5IHZpbSBpdHNlbGYsIDplIGFuZCB2OmNtZGFyZyB1c2UsIGZldGNoLC4uLgorCVlhc3VoaXJvIE1hdHN1bW90bwktLSBwb2ludGluZyBvdXQgdW5kbyswciBwcm9ibGVtIGFuZCBhIHNvbHV0aW9uCisJRXJpayBXYXJlbmRvcnBoCQktLSBmb3Igc2V2ZXJhbCBzdWdnZXN0aW9ucyAoZzpuZXRyd18uLi5fY21kCisJCQkJICAgdmFyaWFibGVzLCByc3luYyBldGMpCisJRG91ZyBDbGFhcgkJLS0gbW9kaWZpY2F0aW9ucyB0byB0ZXN0IGZvciBzdWNjZXNzIHdpdGggZnRwIG9wZXJhdGlvbgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9waV9zcGVjLnR4dCBiL3J1bnRpbWUvZG9jL3BpX3NwZWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1Mjk4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9waV9zcGVjLnR4dApAQCAtMCwwICsxLDExMSBAQAorKnBpX3NwZWMudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAyIE9jdCAyOQorCitieSBHdXN0YXZvIE5pZW1leWVyIH4KKworVGhpcyBpcyBhIGZpbGV0eXBlIHBsdWdpbiB0byB3b3JrIHdpdGggcnBtIHNwZWMgZmlsZXMuCisKK0N1cnJlbnRseSwgdGhpcyBWaW0gcGx1Z2luIGFsbG93cyB5b3UgdG8gZWFzaWx5IHVwZGF0ZSB0aGUgJWNoYW5nZWxvZworc2VjdGlvbiBpbiBSUE0gc3BlYyBmaWxlcy4gSXQgd2lsbCBldmVuIGNyZWF0ZSBhIHNlY3Rpb24gZm9yIHlvdSBpZiBpdAorZG9lc24ndCBleGlzdCB5ZXQuIElmIHlvdSd2ZSBhbHJlYWR5IGluc2VydGVkIGFuIGVudHJ5IHRvZGF5LCBpdCB3aWxsCitnaXZlIHlvdSB0aGUgb3Bwb3J0dW5pdHkgdG8ganVzdCBhZGQgYSBuZXcgaXRlbSBpbiB0b2RheSdzIGVudHJ5LiBJZiB5b3UKK2Rvbid0IHByb3ZpZGUgYSBmb3JtYXQgc3RyaW5nICh8c3BlY19jaGdsb2dfZm9ybWF0fCksIGl0J2xsIGFzayB5b3UgYW4KK2VtYWlsIGFkZHJlc3MgYW5kIGJ1aWxkIGEgZm9ybWF0IHN0cmluZyBieSBpdHNlbGYuCisKKzEuIEhvdyB0byB1c2UgaXQJfHNwZWMtaG93LXRvLXVzZS1pdHwKKzIuIEN1c3RvbWl6aW5nCQl8c3BlYy1jdXN0b21pemluZ3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBIb3cgdG8gdXNlIGl0CQkJCSpzcGVjLWhvdy10by11c2UtaXQqCisKK1RoZSBzcGVjX2NoZ2xvZyBwbHVnaW4gcHJvdmlkZXMgYSBtYXAgbGlrZSB0aGUgZm9sbG93aW5nOgorCisJOm1hcCA8YnVmZmVyPiA8TG9jYWxMZWFkZXI+YyA8UGx1Zz5TcGVjQ2hhbmdlbG9nCisKK0l0IG1lYW5zIHRoYXQgeW91IG1heSBydW4gdGhlIHBsdWdpbiBpbnNpZGUgYSBzcGVjIGZpbGUgYnkgcHJlc3NpbmcKK3lvdXIgbWFwbG9jYWxsZWFkZXIga2V5IChkZWZhdWx0IGlzICdcJykgcGx1cyAnYycuIElmIHlvdSBkbyBub3QgaGF2ZQorfHNwZWNfY2hnbG9nX2Zvcm1hdHwgc2V0LCB0aGUgcGx1Z2luIHdpbGwgYXNrIHlvdSBmb3IgYW4gZW1haWwgYWRkcmVzcwordG8gdXNlIGluIHRoaXMgZWRpdCBzZXNzaW9uLgorCitFdmVyeXRpbWUgeW91IHJ1biB0aGUgcGx1Z2luLCBpdCB3aWxsIGNoZWNrIHRvIHNlZSBpZiB0aGUgbGFzdCBlbnRyeQoraW4gdGhlIGNoYW5nZWxvZyBoYXMgYmVlbiB3cml0dGVuIHRvZGF5IGFuZCBieSB5b3UuIElmIGl0J3MgdGhlIGVudHJ5CittYXRoZXMsIGl0IHdpbGwganVzdCBpbnNlcnQgYSBuZXcgY2hhbmdlbG9nIGl0ZW0sIG90aGVyd2lzZSBpdCB3aWxsCitjcmVhdGUgYSBuZXcgY2hhbmdlbG9nIGVudHJ5LiBJZiB5b3UgYXJlIHJ1bm5pbmcgd2l0aAorfHNwZWNfY2hnbG9nX3JlbGVhc2VfaW5mb3wgZW5hYmxlZCwgaXQgd2lsbCBhbHNvIGNoZWNrIGlmIHRoZSBuYW1lLCB2ZXJzaW9uCithbmQgcmVsZWFzZSBtYXRjaGVzLiBUaGUgcGx1Z2luIGlzIHNtYXJ0IGVub3VnaCB0byBhc2sgeW91IGlmIGl0IHNob3VsZAordXBkYXRlIHRoZSBwYWNrYWdlIHJlbGVhc2UsIGlmIHlvdSBoYXZlIG5vdCBkb25lIHNvLgorCitTZXR0aW5nIGEgbWFwCQkJCQkqc3BlYy1zZXR0aW5nLWEtbWFwKgorLS0tLS0tLS0tLS0tLQorCitBcyB5b3Ugc2hvdWxkIGtub3csIHlvdSBjYW4gZWFzaWx5IHNldCBhIG1hcCB0byBhY2Nlc3MgYW55IFZpbSBjb21tYW5kIChvcgorYW55dGhpbmcsIGZvciB0aGF0IG1hdHRlcikuIElmIHlvdSBkb24ndCBsaWtlIHRoZSBkZWZhdWx0IG1hcCBvZgorPExvY2FsTGVhZGVyPmMsIHlvdSBtYXkganVzdCBzZXQgdXAgeW91ciBvd24ga2V5LiBUaGUgZm9sbG93aW5nIGxpbmUKK3Nob3dzIHlvdSBob3cgeW91IGNvdWxkIGRvIHRoaXMgaW4geW91ciAudmltcmMgZmlsZSwgbWFwcGluZyB0aGUgcGx1Z2luIHRvCit0aGUgPEY1PiBrZXk6CisKKwlhdSBGaWxlVHlwZSBzcGVjIG1hcCA8YnVmZmVyPiA8RjU+IDxQbHVnPlNwZWNDaGFuZ2Vsb2cKKworTm90ZTogdGhlIHBsdWdpbiB3aWxsIHJlc3BlY3QgeW91ciBkZXNpcmUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IG1hcHBpbmcKKyAgICAgIGFuZCB3b24ndCBzZXQgaXQuCisKK1RoaXMgY29tbWFuZCB3aWxsIGFkZCBhIG1hcCBvbmx5IGluIHRoZSBzcGVjIGZpbGUgYnVmZmVycy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIEN1c3RvbWl6aW5nCQkJCQkqc3BlYy1jdXN0b21pemluZyoKKworVGhlIGZvcm1hdCBzdHJpbmcJCQkJKnNwZWNfY2hnbG9nX2Zvcm1hdCoKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gZWFzaWx5IGN1c3RvbWl6ZSBob3cgeW91ciBzcGVjIGZpbGUgZW50cnkgd2lsbCBsb29rIGxpa2UuIFRvIGRvCit0aGlzIGp1c3Qgc2V0IHRoZSB2YXJpYWJsZSAic3BlY19jaGdsb2dfZm9ybWF0IiBpbiB5b3VyIC52aW1yYyBmaWxlIGxpa2UKK3RoaXM6ID4KKworCWxldCBzcGVjX2NoZ2xvZ19mb3JtYXQgPSAiJWEgJWIgJWQgJVkgTXkgTmFtZSA8bXlAZW1haWwuY29tPiIKKworTm90ZSB0aGF0ICIlYSAlYiAlZCAlWSIgaXMgdGhlIG1vc3QgdXNlZCB0aW1lIGZvcm1hdC4gSWYgeW91IGRvbid0IHByb3ZpZGUKK2EgZm9ybWF0IHN0cmluZywgd2hlbiB5b3UgcnVuIHRoZSBTcGVjQ2hhbmdlbG9nIGNvbW1hbmQgZm9yIHRoZSBmaXJzdAordGltZSwgaXQgd2lsbCBhc2sgeW91IGFuIGVtYWlsIGFkZHJlc3MgYW5kIGJ1aWxkIHRoZSB8c3BlY19jaGdsb2dfZm9ybWF0fAordmFyaWFibGUgZm9yIHlvdS4gVGhpcyB3YXksIHlvdSB3aWxsIG9ubHkgbmVlZCB0byBwcm92aWRlIHlvdXIgZW1haWwKK2FkZHJlc3Mgb25jZS4KKworVG8gZGlzY292ZXIgd2hpY2ggZm9ybWF0IG9wdGlvbnMgeW91IGNhbiB1c2UsIHRha2UgYSBsb29rIGF0IHRoZSBzdHJmdGltZSgpCitmdW5jdGlvbiBtYW4gcGFnZS4KKworV2hlcmUgdG8gaW5zZXJ0IG5ldyBpdGVtcwkJCSpzcGVjX2NoZ2xvZ19wcmVwZW5kKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcGx1Z2luIHdpbGwgdXN1YWxseSBpbnNlcnQgbmV3ICVjaGFuZ2Vsb2cgZW50cnkgaXRlbXMgKG5vdGUgdGhhdCBpdCdzCitub3QgdGhlIGVudHJ5IGl0c2VsZikgYWZ0ZXIgdGhlIGV4aXN0aW5nIG9uZXMuIElmIHlvdSBzZXQgdGhlCitzcGVjX2NoZ2xvZ19wcmVwZW5kIHZhcmlhYmxlID4KKworCWxldCBzcGVjX2NoZ2xvZ19wcmVwZW5kID0gMQorCitpdCB3aWxsIGluc2VydCBuZXcgaXRlbXMgYmVmb3JlIHRoZSBleGlzdGluZyBvbmVzLgorCitJbnNlcnRpbmcgcmVsZWFzZSBpbmZvCQkJCSpzcGVjX2NoZ2xvZ19yZWxlYXNlX2luZm8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50LCB0aGUgcGx1Z2luIG1heSBhdXRvbWF0aWNhbGx5IGluc2VydCByZWxlYXNlIGluZm9ybWF0aW9uCitvbiBlYWNoIGNoYW5nZWxvZyBlbnRyeS4gT25lIGFkdmFudGFnZSBvZiB0dXJuaW5nIHRoaXMgZmVhdHVyZSBvbiBpcwordGhhdCBpdCBtYXkgY29udHJvbCBpZiB0aGUgcmVsZWFzZSBoYXMgYmVlbiB1cGRhdGVkIGFmdGVyIHRoZSBsYXN0CitjaGFuZ2UgaW4gdGhlIHBhY2thZ2Ugb3Igbm90LiBJZiB5b3UgaGF2ZSBub3QgdXBkYXRlZCB0aGUgcGFja2FnZQordmVyc2lvbiBvciByZWxlYXNlLCBpdCB3aWxsIGFzayB5b3UgaWYgaXQgc2hvdWxkIHVwZGF0ZSB0aGUgcGFja2FnZQorcmVsZWFzZSBmb3IgeW91LiBUbyB0dXJuIHRoaXMgZmVhdHVyZSBvbiwganVzdCBpbnNlcnQgdGhlIGZvbGxvd2luZworY29kZSBpbiB5b3VyIC52aW1yYzogPgorCisJbGV0IHNwZWNfY2hnbG9nX3JlbGVhc2VfaW5mbyA9IDEKKworVGhlbiwgdGhlIGZpcnN0IGl0ZW0gaW4geW91ciBjaGFuZ2Vsb2cgZW50cnkgd2lsbCBiZSBzb21ldGhpbmcgbGlrZTogPgorCisJKyBuYW1lLTEuMC0xY2wKKworSWYgeW91IGRvbid0IGxpa2UgdGhlIHJlbGVhc2UgdXBkYXRpbmcgZmVhdHVyZSBhbmQgZG9uJ3Qgd2FudCB0byBhbnN3ZXIKKyJObyIgZWFjaCB0aW1lIGl0IGRldGVjdHMgYW4gb2xkIHJlbGVhc2UsIHlvdSBtYXkgZGlzYWJsZSBpdCB3aXRoID4KKworCWxldCBzcGVjX2NoZ2xvZ19uZXZlcl9pbmNyZWFzZV9yZWxlYXNlID0gMQorCisKK0dvb2QgbHVjayEhCisKK3ZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3F1aWNrZml4LnR4dCBiL3J1bnRpbWUvZG9jL3F1aWNrZml4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzM1ZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvcXVpY2tmaXgudHh0CkBAIC0wLDAgKzEsMTAxMCBAQAorKnF1aWNrZml4LnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAyMAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1RoaXMgc3ViamVjdCBpcyBpbnRyb2R1Y2VkIGluIHNlY3Rpb24gfDMwLjF8IG9mIHRoZSB1c2VyIG1hbnVhbC4KKworMS4gVXNpbmcgUXVpY2tGaXggY29tbWFuZHMJCXxxdWlja2ZpeHwKKzIuIFRoZSBlcnJvciB3aW5kb3cJCQl8cXVpY2tmaXgtd2luZG93fAorMy4gVXNpbmcgbW9yZSB0aGFuIG9uZSBsaXN0IG9mIGVycm9ycwl8cXVpY2tmaXgtZXJyb3ItbGlzdHN8Cis0LiBVc2luZyA6bWFrZQkJCQl8Om1ha2VfbWFrZXByZ3wKKzUuIFVzaW5nIDpncmVwCQkJCXxncmVwfAorNi4gU2VsZWN0aW5nIGEgY29tcGlsZXIJCQl8Y29tcGlsZXItc2VsZWN0fAorNy4gVGhlIGVycm9yIGZvcm1hdAkJCXxlcnJvci1maWxlLWZvcm1hdHwKKzguIFRoZSBkaXJlY3Rvcnkgc3RhY2sJCQl8cXVpY2tmaXgtZGlyZWN0b3J5LXN0YWNrfAorOS4gU3BlY2lmaWMgZXJyb3IgZmlsZSBmb3JtYXRzCQl8ZXJyb3Jmb3JtYXRzfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CisKK1RoZSBxdWlja2ZpeCBjb21tYW5kcyBhcmUgbm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K3F1aWNrZml4fCBmZWF0dXJlIHdhcworZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gVXNpbmcgUXVpY2tGaXggY29tbWFuZHMJCQkqcXVpY2tmaXgqICpRdWlja2ZpeCogKkU0MioKKworVmltIGhhcyBhIHNwZWNpYWwgbW9kZSB0byBzcGVlZHVwIHRoZSBlZGl0LWNvbXBpbGUtZWRpdCBjeWNsZS4gIFRoaXMgaXMKK2luc3BpcmVkIGJ5IHRoZSBxdWlja2ZpeCBvcHRpb24gb2YgdGhlIE1hbngncyBBenRlYyBDIGNvbXBpbGVyIG9uIHRoZSBBbWlnYS4KK1RoZSBpZGVhIGlzIHRvIHNhdmUgdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIGNvbXBpbGVyIGluIGEgZmlsZSBhbmQgdXNlIFZpbQordG8ganVtcCB0byB0aGUgZXJyb3JzIG9uZSBieSBvbmUuICBZb3UgY2FuIGV4YW1pbmUgZWFjaCBwcm9ibGVtIGFuZCBmaXggaXQsCit3aXRob3V0IGhhdmluZyB0byByZW1lbWJlciBhbGwgdGhlIGVycm9yIG1lc3NhZ2VzLgorCitJZiB5b3UgYXJlIHVzaW5nIE1hbngncyBBenRlYyBDIGNvbXBpbGVyIG9uIHRoZSBBbWlnYSBsb29rIGhlcmUgZm9yIGhvdyB0byB1c2UKK2l0IHdpdGggVmltOiB8cXVpY2tmaXgtbWFueHwuICBJZiB5b3UgYXJlIHVzaW5nIGFub3RoZXIgY29tcGlsZXIgeW91IHNob3VsZAorc2F2ZSB0aGUgZXJyb3IgbWVzc2FnZXMgaW4gYSBmaWxlIGFuZCBzdGFydCBWaW0gd2l0aCAidmltIC1xIGZpbGVuYW1lIi4gIEFuCitlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggdGhlIHw6bWFrZXwgY29tbWFuZCAoc2VlIGJlbG93KS4gIFRoZQorJ2Vycm9yZm9ybWF0JyBvcHRpb24gc2hvdWxkIGJlIHNldCB0byBtYXRjaCB0aGUgZXJyb3IgbWVzc2FnZXMgZnJvbSB5b3VyCitjb21waWxlciAoc2VlIHxlcnJvcmZvcm1hdHwgYmVsb3cpLgorCitUaGUgZm9sbG93aW5nIHF1aWNrZml4IGNvbW1hbmRzIGNhbiBiZSB1c2VkOgorCisJCQkJCQkJKjpjYyoKKzpjY1shXSBbbnJdCQlEaXNwbGF5IGVycm9yIFtucl0uICBJZiBbbnJdIGlzIG9taXR0ZWQsIHRoZSBzYW1lCisJCQllcnJvciBpcyBkaXNwbGF5ZWQgYWdhaW4uICBXaXRob3V0IFshXSB0aGlzIGRvZXNuJ3QKKwkJCXdvcmsgd2hlbiBqdW1waW5nIHRvIGFub3RoZXIgYnVmZmVyLCB0aGUgY3VycmVudCBidWZmZXIKKwkJCWhhcyBiZWVuIGNoYW5nZWQsIHRoZXJlIGlzIHRoZSBvbmx5IHdpbmRvdyBmb3IgdGhlCisJCQlidWZmZXIgYW5kIGJvdGggJ2hpZGRlbicgYW5kICdhdXRvd3JpdGUnIGFyZSBvZmYuCisJCQlXaGVuIGp1bXBpbmcgdG8gYW5vdGhlciBidWZmZXIgd2l0aCBbIV0gYW55IGNoYW5nZXMgdG8KKwkJCXRoZSBjdXJyZW50IGJ1ZmZlciBhcmUgbG9zdCwgdW5sZXNzICdoaWRkZW4nIGlzIHNldCBvcgorCQkJdGhlcmUgaXMgYW5vdGhlciB3aW5kb3cgZm9yIHRoaXMgYnVmZmVyLgorCQkJVGhlICdzd2l0Y2hidWYnIHNldHRpbmdzIGFyZSByZXNwZWN0ZWQgd2hlbiBqdW1waW5nCisJCQl0byBhIGJ1ZmZlci4KKworCQkJCQkJCSo6Y24qICo6Y25leHQqICpFNTUzKgorOltjb3VudF1jbltleHRdWyFdCURpc3BsYXkgdGhlIFtjb3VudF0gbmV4dCBlcnJvciBpbiB0aGUgbGlzdCB0aGF0CisJCQlpbmNsdWRlcyBhIGZpbGUgbmFtZS4gIElmIHRoZXJlIGFyZSBubyBmaWxlIG5hbWVzIGF0CisJCQlhbGwsIGdvIHRvIHRoZSBbY291bnRdIG5leHQgZXJyb3IuICBTZWUgfDpjY3wgZm9yCisJCQlbIV0gYW5kICdzd2l0Y2hidWYnLgorCis6W2NvdW50XWNOW2V4dF1bIV0JCQkqOmNwKiAqOmNwcmV2aW91cyogKjpjTiogKjpjTmV4dCoKKzpbY291bnRdY3BbcmV2aW91c11bIV0JRGlzcGxheSB0aGUgW2NvdW50XSBwcmV2aW91cyBlcnJvciBpbiB0aGUgbGlzdCB0aGF0CisJCQlpbmNsdWRlcyBhIGZpbGUgbmFtZS4gIElmIHRoZXJlIGFyZSBubyBmaWxlIG5hbWVzIGF0CisJCQlhbGwsIGdvIHRvIHRoZSBbY291bnRdIHByZXZpb3VzIGVycm9yLiAgU2VlIHw6Y2N8IGZvcgorCQkJWyFdIGFuZCAnc3dpdGNoYnVmJy4KKworCQkJCQkJCSo6Y25mKiAqOmNuZmlsZSoKKzpbY291bnRdY25mW2lsZV1bIV0JRGlzcGxheSB0aGUgZmlyc3QgZXJyb3IgaW4gdGhlIFtjb3VudF0gbmV4dCBmaWxlIGluCisJCQl0aGUgbGlzdCB0aGF0IGluY2x1ZGVzIGEgZmlsZSBuYW1lLiAgSWYgdGhlcmUgYXJlIG5vCisJCQlmaWxlIG5hbWVzIGF0IGFsbCBvciBpZiB0aGVyZSBpcyBubyBuZXh0IGZpbGUsIGdvIHRvCisJCQl0aGUgW2NvdW50XSBuZXh0IGVycm9yLiAgU2VlIHw6Y2N8IGZvciBbIV0gYW5kCisJCQknc3dpdGNoYnVmJy4KKworOltjb3VudF1jTmZbaWxlXVshXQkJCSo6Y3BmKiAqOmNwZmlsZSogKjpjTmYqICo6Y05maWxlKgorOltjb3VudF1jcGZbaWxlXVshXQlEaXNwbGF5IHRoZSBsYXN0IGVycm9yIGluIHRoZSBbY291bnRdIHByZXZpb3VzIGZpbGUgaW4KKwkJCXRoZSBsaXN0IHRoYXQgaW5jbHVkZXMgYSBmaWxlIG5hbWUuICBJZiB0aGVyZSBhcmUgbm8KKwkJCWZpbGUgbmFtZXMgYXQgYWxsIG9yIGlmIHRoZXJlIGlzIG5vIG5leHQgZmlsZSwgZ28gdG8KKwkJCXRoZSBbY291bnRdIHByZXZpb3VzIGVycm9yLiAgU2VlIHw6Y2N8IGZvciBbIV0gYW5kCisJCQknc3dpdGNoYnVmJy4KKworCQkJCQkJCSo6Y3Jld2luZCogKjpjcioKKzpjcltld2luZF1bIV0gW25yXQlEaXNwbGF5IGVycm9yIFtucl0uICBJZiBbbnJdIGlzIG9taXR0ZWQsIHRoZSBGSVJTVAorCQkJZXJyb3IgaXMgZGlzcGxheWVkLiAgU2VlIHw6Y2N8LgorCisJCQkJCQkJKjpjZmlyc3QqICo6Y2ZpcioKKzpjZmlyW3N0XVshXSBbbnJdCVNhbWUgYXMgIjpjcmV3aW5kIi4KKworCQkJCQkJCSo6Y2xhc3QqICo6Y2xhKgorOmNsYVtzdF1bIV0gW25yXQlEaXNwbGF5IGVycm9yIFtucl0uICBJZiBbbnJdIGlzIG9taXR0ZWQsIHRoZSBMQVNUCisJCQllcnJvciBpcyBkaXNwbGF5ZWQuICBTZWUgfDpjY3wuCisKKwkJCQkJCQkqOmNxKiAqOmNxdWl0KgorOmNxW3VpdF0JCVF1aXQgVmltIHdpdGggYW4gZXJyb3IgY29kZSwgc28gdGhhdCB0aGUgY29tcGlsZXIKKwkJCXdpbGwgbm90IGNvbXBpbGUgdGhlIHNhbWUgZmlsZSBhZ2Fpbi4KKworCQkJCQkJCSo6Y2YqICo6Y2ZpbGUqCis6Y2ZbaWxlXVshXSBbZXJyb3JmaWxlXQlSZWFkIHRoZSBlcnJvciBmaWxlIGFuZCBqdW1wIHRvIHRoZSBmaXJzdCBlcnJvci4KKwkJCVRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IHdoZW4gVmltIGlzIHN0YXJ0ZWQgd2l0aAorCQkJdGhlIC1xIG9wdGlvbi4gIFlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZCB3aGVuIHlvdQorCQkJa2VlcCBWaW0gcnVubmluZyB3aGlsZSBjb21waWxpbmcuICBJZiB5b3UgZ2l2ZSB0aGUKKwkJCW5hbWUgb2YgdGhlIGVycm9yZmlsZSwgdGhlICdlcnJvcmZpbGUnIG9wdGlvbiB3aWxsCisJCQliZSBzZXQgdG8gW2Vycm9yZmlsZV0uICBTZWUgfDpjY3wgZm9yIFshXS4KKworCQkJCQkJCSo6Y2cqICo6Y2dldGZpbGUqCis6Y2dbZXRmaWxlXVshXSBbZXJyb3JmaWxlXQorCQkJUmVhZCB0aGUgZXJyb3IgZmlsZS4gIEp1c3QgbGlrZSAiOmNmaWxlIiBidXQgZG9uJ3QKKwkJCWp1bXAgdG8gdGhlIGZpcnN0IGVycm9yLgorCisJCQkJCQkJKjpjbCogKjpjbGlzdCoKKzpjbFtpc3RdIFtmcm9tXSBbLCBbdG9dXQorCQkJTGlzdCBhbGwgZXJyb3JzIHRoYXQgYXJlIHZhbGlkIHxxdWlja2ZpeC12YWxpZHwuCisJCQlJZiBudW1iZXJzIFtmcm9tXSBhbmQvb3IgW3RvXSBhcmUgZ2l2ZW4sIHRoZSByZXNwZWN0aXZlCisJCQlyYW5nZSBvZiBlcnJvcnMgaXMgbGlzdGVkLiBBIG5lZ2F0aXZlIG51bWJlciBjb3VudHMKKwkJCWZyb20gdGhlIGxhc3QgZXJyb3IgYmFja3dhcmRzLCAtMSBiZWluZyB0aGUgbGFzdCBlcnJvci4KKwkJCVRoZSAnc3dpdGNoYnVmJyBzZXR0aW5ncyBhcmUgcmVzcGVjdGVkIHdoZW4ganVtcGluZworCQkJdG8gYSBidWZmZXIuCisKKzpjbFtpc3RdISBbZnJvbV0gWywgW3RvXV0KKwkJCUxpc3QgYWxsIGVycm9ycy4KKworSWYgeW91IGluc2VydCBvciBkZWxldGUgbGluZXMsIG1vc3RseSB0aGUgY29ycmVjdCBlcnJvciBsb2NhdGlvbiBpcyBzdGlsbAorZm91bmQgYmVjYXVzZSBoaWRkZW4gbWFya3MgYXJlIHVzZWQuICBTb21ldGltZXMsIHdoZW4gdGhlIG1hcmsgaGFzIGJlZW4KK2RlbGV0ZWQgZm9yIHNvbWUgcmVhc29uLCB0aGUgbWVzc2FnZSAibGluZSBjaGFuZ2VkIiBpcyBzaG93biB0byB3YXJuIHlvdSB0aGF0Cit0aGUgZXJyb3IgbG9jYXRpb24gbWF5IG5vdCBiZSBjb3JyZWN0LiAgSWYgeW91IHF1aXQgVmltIGFuZCBzdGFydCBhZ2FpbiB0aGUKK21hcmtzIGFyZSBsb3N0IGFuZCB0aGUgZXJyb3IgbG9jYXRpb25zIG1heSBub3QgYmUgY29ycmVjdCBhbnltb3JlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVGhlIGVycm9yIHdpbmRvdwkJCQkJKnF1aWNrZml4LXdpbmRvdyoKKworCQkJCQkJCSo6Y29wZSogKjpjb3BlbioKKzpjb3BlW25dIFtoZWlnaHRdCU9wZW4gYSB3aW5kb3cgdG8gc2hvdyB0aGUgY3VycmVudCBsaXN0IG9mIGVycm9ycy4KKwkJCVdoZW4gW2hlaWdodF0gaXMgZ2l2ZW4sIHRoZSB3aW5kb3cgYmVjb21lcyB0aGF0IGhpZ2gKKwkJCShpZiB0aGVyZSBpcyByb29tKS4gIE90aGVyd2lzZSB0aGUgd2luZG93IGlzIG1hZGUgdGVuCisJCQlsaW5lcyBoaWdoLgorCQkJVGhlIHdpbmRvdyB3aWxsIGNvbnRhaW4gYSBzcGVjaWFsIGJ1ZmZlciwgd2l0aAorCQkJJ2J1ZnR5cGUnIGVxdWFsIHRvICJxdWlja2ZpeCIuICBEb24ndCBjaGFuZ2UgdGhpcyEKKwkJCUlmIHRoZXJlIGFscmVhZHkgaXMgYSBxdWlja2ZpeCB3aW5kb3csIGl0IHdpbGwgYmUgbWFkZQorCQkJdGhlIGN1cnJlbnQgd2luZG93LiAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIG9wZW4gYQorCQkJc2Vjb25kIHF1aWNrZml4IHdpbmRvdy4KKworCQkJCQkJCSo6Y2NsKiAqOmNjbG9zZSoKKzpjY2xbb3NlXQkJQ2xvc2UgdGhlIHF1aWNrZml4IHdpbmRvdy4KKworCQkJCQkJCSo6Y3cqICo6Y3dpbmRvdyoKKzpjd1tpbmRvd10gW2hlaWdodF0JT3BlbiB0aGUgcXVpY2tmaXggd2luZG93IHdoZW4gdGhlcmUgYXJlIHJlY29nbml6ZWQKKwkJCWVycm9ycy4gIElmIHRoZSB3aW5kb3cgaXMgYWxyZWFkeSBvcGVuIGFuZCB0aGVyZSBhcmUKKwkJCW5vIHJlY29nbml6ZWQgZXJyb3JzLCBjbG9zZSB0aGUgd2luZG93LgorCisKK05vcm1hbGx5IHRoZSBxdWlja2ZpeCB3aW5kb3cgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLiAgSWYgdGhlcmUgYXJlCit2ZXJ0aWNhbCBzcGxpdHMsIGl0J3MgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcmlnaHRtb3N0IGNvbHVtbiBvZiB3aW5kb3dzLiAgVG8KK21ha2UgaXQgYWx3YXlzIG9jY3VweSB0aGUgZnVsbCB3aWR0aDogPgorCTpib3RyaWdodCBjd2luZG93CitZb3UgY2FuIG1vdmUgdGhlIHdpbmRvdyBhcm91bmQgd2l0aCB8d2luZG93LW1vdmluZ3wgY29tbWFuZHMuCitGb3IgZXhhbXBsZSwgdG8gbW92ZSBpdCB0byB0aGUgdG9wOiBDVFJMLVcgSworVGhlICd3aW5maXhoZWlnaHQnIG9wdGlvbiB3aWxsIGJlIHNldCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgd2luZG93IHdpbGwgbW9zdGx5CitrZWVwIGl0cyBoZWlnaHQsIGlnbm9yaW5nICd3aW5oZWlnaHQnIGFuZCAnZXF1YWxhbHdheXMnLiAgWW91IGNhbiBjaGFuZ2UgdGhlCitoZWlnaHQgbWFudWFsbHkgKGUuZy4sIGJ5IGRyYWdnaW5nIHRoZSBzdGF0dXMgbGluZSBhYm92ZSBpdCB3aXRoIHRoZSBtb3VzZSkuCisKK0luIHRoZSBxdWlja2ZpeCB3aW5kb3csIGVhY2ggbGluZSBpcyBvbmUgZXJyb3IuICBUaGUgbGluZSBudW1iZXIgaXMgZXF1YWwgdG8KK3RoZSBlcnJvciBudW1iZXIuICBZb3UgY2FuIHVzZSAiOi5jYyIgdG8ganVtcCB0byB0aGUgZXJyb3IgdW5kZXIgdGhlIGN1cnNvci4KK0hpdHRpbmcgdGhlIDxDUj4ga2V5IG9yIGRvdWJsZS1jbGlja2luZyB0aGUgbW91c2Ugb24gYSBsaW5lIGhhcyB0aGUgc2FtZQorZWZmZWN0LiAgVGhlIGZpbGUgY29udGFpbmluZyB0aGUgZXJyb3IgaXMgb3BlbmVkIGluIHRoZSB3aW5kb3cgYWJvdmUgdGhlCitxdWlja2ZpeCB3aW5kb3cuICBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgd2luZG93IGZvciB0aGF0IGZpbGUsIGl0IGlzIHVzZWQKK2luc3RlYWQuICBJZiB0aGUgYnVmZmVyIGluIHRoZSB1c2VkIHdpbmRvdyBoYXMgY2hhbmdlZCwgYW5kIHRoZSBlcnJvciBpcyBpbgorYW5vdGhlciBmaWxlLCBqdW1waW5nIHRvIHRoZSBlcnJvciB3aWxsIGZhaWwuICBZb3Ugd2lsbCBmaXJzdCBoYXZlIHRvIG1ha2UKK3N1cmUgdGhlIHdpbmRvdyBjb250YWlucyBhIGJ1ZmZlciB3aGljaCBjYW4gYmUgYWJhbmRvbmVkLgorCitXaGVuIHRoZSBxdWlja2ZpeCB3aW5kb3cgaGFzIGJlZW4gZmlsbGVkLCB0d28gYXV0b2NvbW1hbmQgZXZlbnRzIGFyZQordHJpZ2dlcmVkLiAgRmlyc3QgdGhlICdmaWxldHlwZScgb3B0aW9uIGlzIHNldCB0byAicWYiLCB3aGljaCB0cmlnZ2VycyB0aGUKK0ZpbGVUeXBlIGV2ZW50LiAgVGhlbiB0aGUgQnVmUmVhZFBvc3QgZXZlbnQgaXMgdHJpZ2dlcmVkLiAgVGhpcyBjYW4gYmUgdXNlZCB0bworcGVyZm9ybSBzb21lIGFjdGlvbiBvbiB0aGUgbGlzdGVkIGVycm9ycy4gIEV4YW1wbGU6ID4KKwlhdSBCdWZSZWFkUG9zdCBxdWlja2ZpeCAgc2V0bG9jYWwgbm9tb2RpZmlhYmxlCisJCVwgfCBzaWxlbnQgZy9eL3MvL1w9bGluZSgiLiIpLiIgIi8KKwkJXCB8IHNldGxvY2FsIG1vZGlmaWFibGUKK1RoaXMgcHJlcGVuZHMgdGhlIGxpbmUgbnVtYmVyIHRvIGVhY2ggbGluZS4gIE5vdGUgdGhlIHVzZSBvZiAiXD0iIGluIHRoZQorc3Vic3RpdHV0ZSBzdHJpbmcgb2YgdGhlICI6cyIgY29tbWFuZCwgd2hpY2ggaXMgdXNlZCB0byBldmFsdWF0ZSBhbgorZXhwcmVzc2lvbi4KKworTm90ZTogTWFraW5nIGNoYW5nZXMgaW4gdGhlIHF1aWNrZml4IHdpbmRvdyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBsaXN0IG9mCitlcnJvcnMuICAnbW9kaWZpYWJsZScgaXMgb2ZmIHRvIGF2b2lkIG1ha2luZyBjaGFuZ2VzLiAgSWYgeW91IGRlbGV0ZSBvciBpbnNlcnQKK2xpbmVzIGFueXdheSwgdGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlIHRleHQgYW5kIHRoZSBlcnJvciBudW1iZXIgaXMgbWVzc2VkIHVwLgorSWYgeW91IHJlYWxseSB3YW50IHRvIGRvIHRoaXMsIHlvdSBjb3VsZCB3cml0ZSB0aGUgY29udGVudHMgb2YgdGhlIHF1aWNrZml4Cit3aW5kb3cgdG8gYSBmaWxlIGFuZCB1c2UgIjpjZmlsZSIgdG8gaGF2ZSBpdCBwYXJzZWQgYW5kIHVzZWQgYXMgdGhlIG5ldyBlcnJvcgorbGlzdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFVzaW5nIG1vcmUgdGhhbiBvbmUgbGlzdCBvZiBlcnJvcnMJCQkqcXVpY2tmaXgtZXJyb3ItbGlzdHMqCisKK1NvIGZhciBoYXMgYmVlbiBhc3N1bWVkIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgbGlzdCBvZiBlcnJvcnMuICBBY3R1YWxseSB0aGUKK3RlbiBsYXN0IHVzZWQgbGlzdHMgYXJlIHJlbWVtYmVyZWQuICBXaGVuIHN0YXJ0aW5nIGEgbmV3IGxpc3QsIHRoZSBwcmV2aW91cworb25lcyBhcmUgYXV0b21hdGljYWxseSBrZXB0LiAgVHdvIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBvbGRlciBlcnJvcgorbGlzdHMuICBUaGV5IHNldCBvbmUgb2YgdGhlIGV4aXN0aW5nIGVycm9yIGxpc3RzIGFzIHRoZSBjdXJyZW50IG9uZS4KKworCQkJCQkJKjpjb2xkZXIqICo6Y29sKiAqRTM4MCoKKzpjb2xbZGVyXSBbY291bnRdCUdvIHRvIG9sZGVyIGVycm9yIGxpc3QuICBXaGVuIFtjb3VudF0gaXMgZ2l2ZW4sIGRvCisJCQl0aGlzIFtjb3VudF0gdGltZXMuICBXaGVuIGFscmVhZHkgYXQgdGhlIG9sZGVzdCBlcnJvcgorCQkJbGlzdCwgYW4gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbi4KKworCQkJCQkJKjpjbmV3ZXIqICo6Y25ldyogKkUzODEqCis6Y25ld1tlcl0gW2NvdW50XQlHbyB0byBuZXdlciBlcnJvciBsaXN0LiAgV2hlbiBbY291bnRdIGlzIGdpdmVuLCBkbworCQkJdGhpcyBbY291bnRdIHRpbWVzLiAgV2hlbiBhbHJlYWR5IGF0IHRoZSBuZXdlc3QgZXJyb3IKKwkJCWxpc3QsIGFuIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4uCisKK1doZW4gYWRkaW5nIGEgbmV3IGVycm9yIGxpc3QsIGl0IGJlY29tZXMgdGhlIGN1cnJlbnQgbGlzdC4KKworV2hlbiAiOmNvbGRlciIgaGFzIGJlZW4gdXNlZCBhbmQgIjptYWtlIiBvciAiOmdyZXAiIGlzIHVzZWQgdG8gYWRkIGEgbmV3IGVycm9yCitsaXN0LCBvbmUgbmV3ZXIgbGlzdCBpcyBvdmVyd3JpdHRlbi4gIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaWYgeW91IGFyZQorYnJvd3Npbmcgd2l0aCAiOmdyZXAiIHxncmVwfC4gIElmIHlvdSB3YW50IHRvIGtlZXAgdGhlIG1vcmUgcmVjZW50IGVycm9yCitsaXN0cywgdXNlICI6Y25ld2VyIDk5IiBmaXJzdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFVzaW5nIDptYWtlCQkJCQkJKjptYWtlX21ha2VwcmcqCisKKwkJCQkJCQkqOm1hayogKjptYWtlKgorOm1ha1tlXVshXSBbYXJndW1lbnRzXQkxLiBJZiB0aGUgJ2F1dG93cml0ZScgb3B0aW9uIGlzIG9uLCB3cml0ZSBhbnkgY2hhbmdlZAorCQkJICAgYnVmZmVycworCQkJMi4gQW4gZXJyb3JmaWxlIG5hbWUgaXMgbWFkZSBmcm9tICdtYWtlZWYnLiAgSWYKKwkJCSAgICdtYWtlZWYnIGRvZXNuJ3QgY29udGFpbiAiIyMiLCBhbmQgYSBmaWxlIHdpdGggdGhpcworCQkJICAgbmFtZSBhbHJlYWR5IGV4aXN0cywgaXQgaXMgZGVsZXRlZC4KKwkJCTMuIFRoZSBwcm9ncmFtIGdpdmVuIHdpdGggdGhlICdtYWtlcHJnJyBvcHRpb24gaXMKKwkJCSAgIHN0YXJ0ZWQgKGRlZmF1bHQgIm1ha2UiKSB3aXRoIHRoZSBvcHRpb25hbAorCQkJICAgW2FyZ3VtZW50c10gYW5kIHRoZSBvdXRwdXQgaXMgc2F2ZWQgaW4gdGhlCisJCQkgICBlcnJvcmZpbGUgKGZvciBVbml4IGl0IGlzIGFsc28gZWNob2VkIG9uIHRoZQorCQkJICAgc2NyZWVuKS4KKwkJCTQuIFRoZSBlcnJvcmZpbGUgaXMgcmVhZCB1c2luZyAnZXJyb3Jmb3JtYXQnLgorCQkJNS4gSWYgWyFdIGlzIG5vdCBnaXZlbiB0aGUgZmlyc3QgZXJyb3IgaXMganVtcGVkIHRvLgorCQkJNi4gVGhlIGVycm9yZmlsZSBpcyBkZWxldGVkLgorCQkJNy4gWW91IGNhbiBub3cgbW92ZSB0aHJvdWdoIHRoZSBlcnJvcnMgd2l0aCBjb21tYW5kcworCQkJICAgbGlrZSB8OmNuZXh0fCBhbmQgfDpjcHJldmlvdXN8LCBzZWUgYWJvdmUuCisJCQlUaGlzIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IGEgY29tbWVudCwgYW55ICIKKwkJCWNoYXJhY3RlcnMgYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgYXJndW1lbnRzLgorCitUaGUgIjptYWtlIiBjb21tYW5kIGV4ZWN1dGVzIHRoZSBjb21tYW5kIGdpdmVuIHdpdGggdGhlICdtYWtlcHJnJyBvcHRpb24uCitUaGlzIGlzIGRvbmUgYnkgcGFzc2luZyB0aGUgY29tbWFuZCB0byB0aGUgc2hlbGwgZ2l2ZW4gd2l0aCB0aGUgJ3NoZWxsJworb3B0aW9uLiAgVGhpcyB3b3JrcyBhbG1vc3QgbGlrZSB0eXBpbmcKKworCSI6IXttYWtlcHJnfSBbYXJndW1lbnRzXSB7c2hlbGxwaXBlfSB7ZXJyb3JmaWxlfSIuCisKK3ttYWtlcHJnfSBpcyB0aGUgc3RyaW5nIGdpdmVuIHdpdGggdGhlICdtYWtlcHJnJyBvcHRpb24uICBBbnkgY29tbWFuZCBjYW4gYmUKK3VzZWQsIG5vdCBqdXN0ICJtYWtlIi4gIENoYXJhY3RlcnMgJyUnIGFuZCAnIycgYXJlIGV4cGFuZGVkIGFzIHVzdWFsIG9uIGEKK2NvbW1hbmQtbGluZS4gIFlvdSBjYW4gdXNlICIlPCIgdG8gaW5zZXJ0IHRoZSBjdXJyZW50IGZpbGUgbmFtZSB3aXRob3V0CitleHRlbnNpb24sIG9yICIjPCIgdG8gaW5zZXJ0IHRoZSBhbHRlcm5hdGUgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uLCBmb3IKK2V4YW1wbGU6ID4KKyAgIDpzZXQgbWFrZXByZz1tYWtlXCAjPC5vCisKK1thcmd1bWVudHNdIGlzIGFueXRoaW5nIHRoYXQgaXMgdHlwZWQgYWZ0ZXIgIjptYWtlIi4KK3tzaGVsbHBpcGV9IGlzIHRoZSAnc2hlbGxwaXBlJyBvcHRpb24uCit7ZXJyb3JmaWxlfSBpcyB0aGUgJ21ha2VlZicgb3B0aW9uLCB3aXRoICMjIHJlcGxhY2VkIHRvIG1ha2UgaXQgdW5pcXVlLgorCitUaGUgcGxhY2Vob2xkZXIgIiQqIiBjYW4gYmUgdXNlZCBmb3IgdGhlIGFyZ3VtZW50IGxpc3QgaW4ge21ha2Vwcm9nfSBpZiB0aGUKK2NvbW1hbmQgbmVlZHMgc29tZSBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgYWZ0ZXIgaXRzIGFyZ3VtZW50cy4gIFRoZSAkKiBpcworcmVwbGFjZWQgdGhlbiBieSBhbGwgYXJndW1lbnRzLiAgRXhhbXBsZTogPgorICAgOnNldCBtYWtlcHJnPWxhdGV4XCBcXFxcbm9uc3RvcG1vZGVcIFxcXFxpbnB1dFxceyQqfQorb3Igc2ltcGxlciA+CisgICA6bGV0ICZtcCA9ICdsYXRleCBcXG5vbnN0b3Btb2RlIFxcaW5wdXRceyQqfScKKyIkKiIgY2FuIGJlIGdpdmVuIG11bHRpcGxlIHRpbWVzLCBmb3IgZXhhbXBsZTogPgorICAgOnNldCBtYWtlcHJnPWdjY1wgLW9cICQqXCAkKgorCitUaGUgJ3NoZWxscGlwZScgb3B0aW9uIGRlZmF1bHRzIHRvICI+IiBmb3IgdGhlIEFtaWdhLCBNUy1ET1MgYW5kIFdpbjMyLiAgVGhpcworbWVhbnMgdGhhdCB0aGUgb3V0cHV0IG9mIHRoZSBjb21waWxlciBpcyBzYXZlZCBpbiBhIGZpbGUgYW5kIG5vdCBzaG93biBvbiB0aGUKK3NjcmVlbiBkaXJlY3RseS4gIEZvciBVbml4ICJ8IHRlZSIgaXMgdXNlZC4gIFRoZSBjb21waWxlciBvdXRwdXQgaXMgc2hvd24gb24KK3RoZSBzY3JlZW4gYW5kIHNhdmVkIGluIGEgZmlsZSB0aGUgc2FtZSB0aW1lLiAgRGVwZW5kaW5nIG9uIHRoZSBzaGVsbCB1c2VkCisifCYgdGVlIiBvciAiMj4mMXwgdGVlIiBpcyB0aGUgZGVmYXVsdCwgc28gc3RkZXJyIG91dHB1dCB3aWxsIGJlIGluY2x1ZGVkLgorCitJZiAnc2hlbGxwaXBlJyBpcyBlbXB0eSwgdGhlIHtlcnJvcmZpbGV9IHBhcnQgd2lsbCBiZSBvbWl0dGVkLiAgVGhpcyBpcyB1c2VmdWwKK2ZvciBjb21waWxlcnMgdGhhdCB3cml0ZSB0byBhbiBlcnJvcmZpbGUgdGhlbXNlbHZlcyAoZS5nLiwgTWFueCdzIEFtaWdhIEMpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFVzaW5nIDpncmVwCQkJCQkJKmdyZXAqICpsaWQqCisKK1ZpbSBjYW4gaW50ZXJmYWNlIHdpdGggImdyZXAiIGFuZCBncmVwLWxpa2UgcHJvZ3JhbXMgKHN1Y2ggYXMgdGhlIEdOVQoraWQtdXRpbHMpIGluIGEgc2ltaWxhciB3YXkgdG8gaXRzIGNvbXBpbGVyIGludGVncmF0aW9uIChzZWUgfDptYWtlfCBhYm92ZSkuCisKK1tVbml4IHRyaXZpYTogVGhlIG5hbWUgZm9yIHRoZSBVbml4ICJncmVwIiBjb21tYW5kIGNvbWVzIGZyb20gIjpnL3JlL3AiLCB3aGVyZQorInJlIiBzdGFuZHMgZm9yIFJlZ3VsYXIgRXhwcmVzc2lvbi5dCisKKwkJCQkJCQkgICAgKjpnciogKjpncmVwKgorOmdyW2VwXVshXSBbYXJndW1lbnRzXQlKdXN0IGxpa2UgIjptYWtlIiwgYnV0IHVzZSAnZ3JlcHByZycgaW5zdGVhZCBvZgorCQkJJ21ha2VwcmcnIGFuZCAnZ3JlcGZvcm1hdCcgaW5zdGVhZCBvZiAnZXJyb3Jmb3JtYXQnLgorCQkJCQkJCSo6Z3JlcGEqICo6Z3JlcGFkZCoKKzpncmVwYVtkZF1bIV0gW2FyZ3VtZW50c10KKwkJCUp1c3QgbGlrZSAiOmdyZXAiLCBidXQgaW5zdGVhZCBvZiBtYWtpbmcgYSBuZXcgbGlzdCBvZgorCQkJZXJyb3JzIHRoZSBtYXRjaGVzIGFyZSBhcHBlbmRlZCB0byB0aGUgY3VycmVudCBsaXN0LgorCQkJRXhhbXBsZTogPgorCQkJCTpncmVwIG5vdGhpbmcgJQorCQkJCTpidWZkbyBncmVwYWRkISBzb21ldGhpbmcgJQorPAkJCVRoZSBmaXJzdCBjb21tYW5kIG1ha2VzIGEgbmV3IGVycm9yIGxpc3Qgd2hpY2ggaXMKKwkJCWVtcHR5LiAgVGhlIHNlY29uZCBjb21tYW5kIGV4ZWN1dGVzICJncmVwYWRkIiBmb3IgZWFjaAorCQkJbGlzdGVkIGJ1ZmZlci4gIE5vdGUgdGhlIHVzZSBvZiAhIHRvIGF2b2lkIHRoYXQKKwkJCSI6Z3JlcGFkZCIganVtcHMgdG8gdGhlIGZpcnN0IGVycm9yLCB3aGljaCBpcyBub3QKKwkJCWFsbG93ZWQgd2l0aCB8OmJ1ZmRvfC4KKworNS4xIFNldHRpbmcgdXAgZ3JlcAorCitJZiB5b3UgaGF2ZSBhIHN0YW5kYXJkICJncmVwIiBwcm9ncmFtIGluc3RhbGxlZCwgdGhlIDpncmVwIGNvbW1hbmQgbWF5IHdvcmsKK3dlbGwgd2l0aCB0aGUgZGVmYXVsdHMuIFRoZSBzeW50YXggaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBzdGFuZGFyZCBjb21tYW5kOiA+CisKKwk6Z3JlcCBmb28gKi5jCisKK1dpbGwgc2VhcmNoIGFsbCBmaWxlcyB3aXRoIHRoZSAuYyBleHRlbnNpb24gZm9yIHRoZSBzdWJzdHJpbmcgImZvbyIuIFRoZQorYXJndW1lbnRzIHRvIDpncmVwIGFyZSBwYXNzZWQgc3RyYWlnaHQgdG8gdGhlICJncmVwIiBwcm9ncmFtLCBzbyB5b3UgY2FuIHVzZQord2hhdGV2ZXIgb3B0aW9ucyB5b3VyICJncmVwIiBzdXBwb3J0cy4KKworQnkgZGVmYXVsdCwgOmdyZXAgaW52b2tlcyBncmVwIHdpdGggdGhlIC1uIG9wdGlvbiAoc2hvdyBmaWxlIGFuZCBsaW5lCitudW1iZXJzKS4gWW91IGNhbiBjaGFuZ2UgdGhpcyB3aXRoIHRoZSAnZ3JlcHByZycgb3B0aW9uLiBZb3Ugd2lsbCBuZWVkIHRvIHNldAorJ2dyZXBwcmcnIGlmOgorCithKQlZb3UgYXJlIHVzaW5nIGEgcHJvZ3JhbSB0aGF0IGlzbid0IGNhbGxlZCAiZ3JlcCIKK2IpCVlvdSBoYXZlIHRvIGNhbGwgZ3JlcCB3aXRoIGEgZnVsbCBwYXRoCitjKQlZb3Ugd2FudCB0byBwYXNzIG90aGVyIG9wdGlvbnMgYXV0b21hdGljYWxseSAoZS5nLiBjYXNlIGluc2Vuc2l0aXZlCisJc2VhcmNoLikKKworT25jZSAiZ3JlcCIgaGFzIGV4ZWN1dGVkLCBWaW0gcGFyc2VzIHRoZSByZXN1bHRzIHVzaW5nIHRoZSAnZ3JlcGZvcm1hdCcKK29wdGlvbi4gIFRoaXMgb3B0aW9uIHdvcmtzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgJ2Vycm9yZm9ybWF0JyBvcHRpb24gLSBzZWUKK3RoYXQgZm9yIGRldGFpbHMuICBZb3UgbWF5IG5lZWQgdG8gY2hhbmdlICdncmVwZm9ybWF0JyBmcm9tIHRoZSBkZWZhdWx0IGlmCit5b3VyIGdyZXAgb3V0cHV0cyBpbiBhIG5vbi1zdGFuZGFyZCBmb3JtYXQsIG9yIHlvdSBhcmUgdXNpbmcgc29tZSBvdGhlcgorcHJvZ3JhbSB3aXRoIGEgc3BlY2lhbCBmb3JtYXQuCisKK09uY2UgdGhlIHJlc3VsdHMgYXJlIHBhcnNlZCwgVmltIGxvYWRzIHRoZSBmaXJzdCBmaWxlIGNvbnRhaW5pbmcgYSBtYXRjaCBhbmQKK2p1bXBzIHRvIHRoZSBhcHByb3ByaWF0ZSBsaW5lLCBpbiB0aGUgc2FtZSB3YXkgdGhhdCBpdCBqdW1wcyB0byBhIGNvbXBpbGVyCitlcnJvciBpbiB8cXVpY2tmaXh8IG1vZGUuICBZb3UgY2FuIHRoZW4gdXNlIHRoZSB8OmNuZXh0fCwgfDpjbGlzdHwsIGV0Yy4KK2NvbW1hbmRzIHRvIHNlZSB0aGUgb3RoZXIgbWF0Y2hlcy4KKworCis1LjIgVXNpbmcgOmdyZXAgd2l0aCBpZC11dGlscworCitZb3UgY2FuIHNldCB1cCA6Z3JlcCB0byB3b3JrIHdpdGggdGhlIEdOVSBpZC11dGlscyBsaWtlIHRoaXM6ID4KKworCTpzZXQgZ3JlcHByZz1saWRcIC1SZ3JlcFwgLXMKKwk6c2V0IGdyZXBmb3JtYXQ9JWY6JWw6JW0KKwordGhlbiA+CisJOmdyZXAgKHJlZ2V4cCkKKword29ya3MganVzdCBhcyB5b3UnZCBleHBlY3QuCisocHJvdmlkZWQgeW91IHJlbWVtYmVyZWQgdG8gbWtpZCBmaXJzdCA6KQorCisKKzUuMyBCcm93c2luZyBzb3VyY2UgY29kZSB3aXRoIDpncmVwCisKK1VzaW5nIHRoZSBzdGFjayBvZiBlcnJvciBsaXN0cyB0aGF0IFZpbSBrZWVwcywgeW91IGNhbiBicm93c2UgeW91ciBmaWxlcyB0bworbG9vayBmb3IgZnVuY3Rpb25zIGFuZCB0aGUgZnVuY3Rpb25zIHRoZXkgY2FsbC4gIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoYXQgeW91CitoYXZlIHRvIGFkZCBhbiBhcmd1bWVudCB0byB0aGUgcmVhZF9maWxlKCkgZnVuY3Rpb24uICBZb3UgZW50ZXIgdGhpcyBjb21tYW5kOiA+CisKKwk6Z3JlcCByZWFkX2ZpbGUgKi5jCisKK1lvdSB1c2UgIjpjbiIgdG8gZ28gYWxvbmcgdGhlIGxpc3Qgb2YgbWF0Y2hlcyBhbmQgYWRkIHRoZSBhcmd1bWVudC4gIEF0IG9uZQorcGxhY2UgeW91IGhhdmUgdG8gZ2V0IHRoZSBuZXcgYXJndW1lbnQgZnJvbSBhIGhpZ2hlciBsZXZlbCBmdW5jdGlvbiBtc2coKSwgYW5kCituZWVkIHRvIGNoYW5nZSB0aGF0IG9uZSB0b28uICBUaHVzIHlvdSB1c2U6ID4KKworCTpncmVwIG1zZyAqLmMKKworV2hpbGUgY2hhbmdpbmcgdGhlIG1zZygpIGZ1bmN0aW9ucywgeW91IGZpbmQgYW5vdGhlciBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvCitnZXQgdGhlIGFyZ3VtZW50IGZyb20gYSBoaWdoZXIgbGV2ZWwuICBZb3UgY2FuIGFnYWluIHVzZSAiOmdyZXAiIHRvIGZpbmQgdGhlc2UKK2Z1bmN0aW9ucy4gIE9uY2UgeW91IGFyZSBmaW5pc2hlZCB3aXRoIG9uZSBmdW5jdGlvbiwgeW91IGNhbiB1c2UgPgorCisJOmNvbGRlcgorCit0byBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBvbmUuCisKK1RoaXMgd29ya3MgbGlrZSBicm93c2luZyBhIHRyZWU6ICI6Z3JlcCIgZ29lcyBvbmUgbGV2ZWwgZGVlcGVyLCBjcmVhdGluZyBhCitsaXN0IG9mIGJyYW5jaGVzLiAgIjpjb2xkZXIiIGdvZXMgYmFjayB0byB0aGUgcHJldmlvdXMgbGV2ZWwuICBZb3UgY2FuIG1peAordGhpcyB1c2Ugb2YgIjpncmVwIiBhbmQgImNvbGRlciIgdG8gYnJvd3NlIGFsbCB0aGUgbG9jYXRpb25zIGluIGEgdHJlZS1saWtlCit3YXkuICBJZiB5b3UgZG8gdGhpcyBjb25zaXN0ZW50bHksIHlvdSB3aWxsIGZpbmQgYWxsIGxvY2F0aW9ucyB3aXRob3V0IHRoZQorbmVlZCB0byB3cml0ZSBkb3duIGEgInRvZG8iIGxpc3QuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBTZWxlY3RpbmcgYSBjb21waWxlcgkJCQkJKmNvbXBpbGVyLXNlbGVjdCoKKworCQkJCQkJKjpjb21wKiAqOmNvbXBpbGVyKiAqRTY2NioKKzpjb21wW2lsZXJdWyFdIHtuYW1lfQkJU2V0IG9wdGlvbnMgdG8gd29yayB3aXRoIGNvbXBpbGVyIHtuYW1lfS4KKwkJCQlXaXRob3V0IHRoZSAiISIgb3B0aW9ucyBhcmUgc2V0IGZvciB0aGUKKwkJCQljdXJyZW50IGJ1ZmZlci4gIFdpdGggIiEiIGdsb2JhbCBvcHRpb25zIGFyZQorCQkJCXNldC4KKwkJCQlJZiB5b3UgdXNlICI6Y29tcGlsZXIgZm9vIiBpbiAiZmlsZS5mb28iIGFuZAorCQkJCXRoZW4gIjpjb21waWxlciEgYmFyIiBpbiBhbm90aGVyIGJ1ZmZlciwgVmltCisJCQkJd2lsbCBrZWVwIG9uIHVzaW5nICJmb28iIGluICJmaWxlLmZvbyIuCisJCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJCXwrZXZhbHwgZmVhdHVyZX0KKworCitUaGUgVmltIHBsdWdpbnMgaW4gdGhlICJjb21waWxlciIgZGlyZWN0b3J5IHdpbGwgc2V0IG9wdGlvbnMgdG8gdXNlIHRoZQorc2VsZWN0ZWQgY29tcGlsZXIuICBGb3IgIjpjb21waWxlciIgbG9jYWwgb3B0aW9ucyBhcmUgc2V0LCBmb3IgIjpjb21waWxlciEiCitnbG9iYWwgb3B0aW9ucy4KKwkJCQkJCQkqY3VycmVudF9jb21waWxlcioKK1RvIHN1cHBvcnQgb2xkZXIgVmltIHZlcnNpb25zLCB0aGUgcGx1Z2lucyBhbHdheXMgdXNlICJjdXJyZW50X2NvbXBpbGVyIiBhbmQKK25vdCAiYjpjdXJyZW50X2NvbXBpbGVyIi4gIFdoYXQgdGhlIGNvbW1hbmQgYWN0dWFsbHkgZG9lcyBpcyB0aGUgZm9sbG93aW5nOgorCistIERlbGV0ZSB0aGUgImN1cnJlbnRfY29tcGlsZXIiIGFuZCAiYjpjdXJyZW50X2NvbXBpbGVyIiB2YXJpYWJsZXMuCistIERlZmluZSB0aGUgIkNvbXBpbGVyU2V0IiB1c2VyIGNvbW1hbmQuICBXaXRoICIhIiBpdCBkb2VzICI6c2V0Iiwgd2l0aG91dCAiISIKKyAgaXQgZG9lcyAiOnNldGxvY2FsIi4KKy0gRXhlY3V0ZSAiOnJ1bnRpbWUhIGNvbXBpbGVyL3tuYW1lfS52aW0iLiAgVGhlIHBsdWdpbnMgYXJlIGV4cGVjdGVkIHRvIHNldAorICBvcHRpb25zIHdpdGggIkNvbXBpbGVyU2V0IiBhbmQgc2V0IHRoZSAiY3VycmVudF9jb21waWxlciIgdmFyaWFibGUgdG8gdGhlCisgIG5hbWUgb2YgdGhlIGNvbXBpbGVyLgorLSBEZWxldGUgdGhlICJDb21waWxlclNldCB1c2VyIGNvbW1hbmQuCistIFNldCAiYjpjdXJyZW50X2NvbXBpbGVyIiB0byB0aGUgdmFsdWUgb2YgImN1cnJlbnRfY29tcGlsZXIiLgorLSBXaXRob3V0ICIhIiB0aGUgb2xkIHZhbHVlIG9mICJjdXJyZW50X2NvbXBpbGVyIiBpcyByZXN0b3JlZC4KKworCitGb3Igd3JpdGluZyBhIGNvbXBpbGVyIHBsdWdpbiwgc2VlIHx3cml0ZS1jb21waWxlci1wbHVnaW58LgorCisKK01BTlggQVpURUMgQwkJCQkqcXVpY2tmaXgtbWFueCogKmNvbXBpbGVyLW1hbngqCisKK1RvIHVzZSBWaW0gd2l0aCBNYW54J3MgQXp0ZWMgQyBjb21waWxlciBvbiB0aGUgQW1pZ2EgeW91IHNob3VsZCBkbyB0aGUKK2ZvbGxvd2luZzoKKy0gU2V0IHRoZSBDQ0VESVQgZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCB0aGUgY29tbWFuZDogPgorCW1zZXQgIkNDRURJVD12aW0gLXEiCistIENvbXBpbGUgd2l0aCB0aGUgLXFmIG9wdGlvbi4gIElmIHRoZSBjb21waWxlciBmaW5kcyBhbnkgZXJyb3JzLCBWaW0gaXMKKyAgc3RhcnRlZCBhbmQgdGhlIGN1cnNvciBpcyBwb3NpdGlvbmVkIG9uIHRoZSBmaXJzdCBlcnJvci4gIFRoZSBlcnJvciBtZXNzYWdlCisgIHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSBsYXN0IGxpbmUuICBZb3UgY2FuIGdvIHRvIG90aGVyIGVycm9ycyB3aXRoIHRoZQorICBjb21tYW5kcyBtZW50aW9uZWQgYWJvdmUuICBZb3UgY2FuIGZpeCB0aGUgZXJyb3JzIGFuZCB3cml0ZSB0aGUgZmlsZShzKS4KKy0gSWYgeW91IGV4aXQgVmltIG5vcm1hbGx5IHRoZSBjb21waWxlciB3aWxsIHJlLWNvbXBpbGUgdGhlIHNhbWUgZmlsZS4gIElmIHlvdQorICBleGl0IHdpdGggdGhlIDpjcSBjb21tYW5kLCB0aGUgY29tcGlsZXIgd2lsbCB0ZXJtaW5hdGUuICBEbyB0aGlzIGlmIHlvdQorICBjYW5ub3QgZml4IHRoZSBlcnJvciwgb3IgaWYgYW5vdGhlciBmaWxlIG5lZWRzIHRvIGJlIGNvbXBpbGVkIGZpcnN0LgorCitUaGVyZSBhcmUgc29tZSByZXN0cmljdGlvbnMgdG8gdGhlIFF1aWNrZml4IG1vZGUgb24gdGhlIEFtaWdhLiAgVGhlCitjb21waWxlciBvbmx5IHdyaXRlcyB0aGUgZmlyc3QgMjUgZXJyb3JzIHRvIHRoZSBlcnJvcmZpbGUgKE1hbngncworZG9jdW1lbnRhdGlvbiBkb2VzIG5vdCBzYXkgaG93IHRvIGdldCBtb3JlKS4gIElmIHlvdSB3YW50IHRvIGZpbmQgdGhlIG90aGVycywKK3lvdSB3aWxsIGhhdmUgdG8gZml4IGEgZmV3IGVycm9ycyBhbmQgZXhpdCB0aGUgZWRpdG9yLiAgQWZ0ZXIgcmVjb21waWxpbmcsCit1cCB0byAyNSByZW1haW5pbmcgZXJyb3JzIHdpbGwgYmUgZm91bmQuCisKK0lmIFZpbSB3YXMgc3RhcnRlZCBmcm9tIHRoZSBjb21waWxlciwgdGhlIDpzaCBhbmQgc29tZSA6ISAgY29tbWFuZHMgd2lsbCBub3QKK3dvcmssIGJlY2F1c2UgVmltIGlzIHRoZW4gcnVubmluZyBpbiB0aGUgc2FtZSBwcm9jZXNzIGFzIHRoZSBjb21waWxlciBhbmQKK3N0ZGluIChzdGFuZGFyZCBpbnB1dCkgd2lsbCBub3QgYmUgaW50ZXJhY3RpdmUuCisKKworUFlVTklUIENPTVBJTEVSCQkJCQkJKmNvbXBpbGVyLXB5dW5pdCoKKworVGhpcyBpcyBub3QgYWN0dWFsbHkgYSBjb21waWxlciwgYnV0IGEgdW5pdCB0ZXN0aW5nIGZyYW1ld29yayBmb3IgdGhlCitQeXRob24gbGFuZ3VhZ2UuIEl0IGlzIGluY2x1ZGVkIGludG8gc3RhbmRhcmQgUHl0aG9uIGRpc3RyaWJ1dGlvbgorc3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDIuMC4gRm9yIG9sZGVyIHZlcnNpb25zLCB5b3UgY2FuIGdldCBpdCBmcm9tCitodHRwOi8vcHl1bml0LnNvdXJjZWZvcmdlLm5ldC4KKworV2hlbiB5b3UgcnVuIHlvdXIgdGVzdHMgd2l0aCB0aGUgaGVscCBvZiB0aGUgZnJhbWV3b3JrLCBwb3NzaWJsZSBlcnJvcnMKK2FyZSBwYXJzZWQgYnkgVmltIGFuZCBwcmVzZW50ZWQgZm9yIHlvdSBpbiBxdWljay1maXggbW9kZS4KKworVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gc3RhbmRhcmQgd2F5IHRvIHJ1biB0aGUgdGVzdHMuCitUaGUgYWxsdGVzdHMucHkgc2NyaXB0IHNlZW1zIHRvIGJlIHVzZWQgcXVpdGUgb2Z0ZW4sIHRoYXQncyBhbGwuCitVc2VmdWwgdmFsdWVzIGZvciB0aGUgJ21ha2VwcmcnIG9wdGlvbnMgdGhlcmVmb3JlIGFyZToKKyBzZXRsb2NhbCBtYWtlcHJnPS4vYWxsdGVzdHMucHkgIiBSdW4gYSB0ZXN0c3VpdGUKKyBzZXRsb2NhbCBtYWtlcHJnPXB5dGhvbiAlICAgICAgIiBSdW4gYSBzaW5nbGUgdGVzdGNhc2UKKworQWxzbyBzZWUgaHR0cDovL3ZpbS5zb3VyY2Vmb3JnZS5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yODAuCisKKworVEVYIENPTVBJTEVSCQkJCQkJKmNvbXBpbGVyLXRleCoKKworSW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBjb21waWxlciBmb3IgVGVYICgkVklNUlVOVElNRS9jb21waWxlci90ZXgudmltKQordXNlcyBtYWtlIGNvbW1hbmQgaWYgcG9zc2libGUuIElmIHRoZSBjb21waWxlciBmaW5kcyBhIGZpbGUgbmFtZWQgIk1ha2VmaWxlIgorb3IgIm1ha2VmaWxlIiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGl0IHN1cHBvc2VzIHRoYXQgeW91IHdhbnQgdG8gcHJvY2VzcworeW91ciAqVGVYIGZpbGVzIHdpdGggbWFrZSwgYW5kIHRoZSBtYWtlZmlsZSBkb2VzIHRoZSByaWdodCB3b3JrLiBJbiB0aGlzIGNhc2UKK2NvbXBpbGVyIHNldHMgJ2Vycm9yZm9ybWF0JyBmb3IgKlRlWCBvdXRwdXQgYW5kIGxlYXZlcyAnbWFrZXByZycgdW50b3VjaGVkLiBJZgorbmVpdGhlciAiTWFrZWZpbGUiIG5vciAibWFrZWZpbGUiIGlzIGZvdW5kLCB0aGUgY29tcGlsZXIgd2lsbCBub3QgdXNlIG1ha2UuCitZb3UgY2FuIGZvcmNlIHRoZSBjb21waWxlciB0byBpZ25vcmUgbWFrZWZpbGVzIGJ5IGRlZmluaW5nCitiOnRleF9pZ25vcmVfbWFrZWZpbGUgb3IgZzp0ZXhfaWdub3JlX21ha2VmaWxlIHZhcmlhYmxlICh0aGV5IGFyZSBjaGVja2VkIGZvcgorZXhpc3RlbmNlIG9ubHkpLgorCitJZiB0aGUgY29tcGlsZXIgY2hvc2Ugbm90IHRvIHVzZSBtYWtlLCBpdCBuZWVkIHRvIGNob29zZSBhIHJpZ2h0IHByb2dyYW0gZm9yCitwcm9jZXNzaW5nIHlvdXIgaW5wdXQuIElmIGI6dGV4X2ZsYXZvciBvciBnOnRleF9mbGF2b3IgKGluIHRoaXMgcHJlY2VkZW5jZSkKK3ZhcmlhYmxlIGV4aXN0cywgaXQgZGVmaW5lcyBUZVggZmxhdm9yIGZvciA6bWFrZSAoYWN0dWFsbHksIHRoaXMgaXMgdGhlIG5hbWUKK29mIGV4ZWN1dGVkIGNvbW1hbmQpLCBhbmQgaWYgYm90aCB2YXJpYWJsZXMgZG8gbm90IGV4aXN0LCBpdCBkZWZhdWx0cyB0bworImxhdGV4Ii4gRm9yIGV4YW1wbGUsIHdoaWxlIGVkaXRpbmcgY2hhcHRlcjIudGV4IFxpbnB1dC1lZCBmcm9tIG15cGFwZXIudGV4Cit3cml0dGVuIGluIEFNUy1UZVg6ID4KKworCTpsZXQgYjp0ZXhfZmxhdm9yID0gJ2Ftc3RleCcKKwk6Y29tcGlsZXIgdGV4Cis8CVtlZGl0aW5nLi4uXSA+CisJOm1ha2UgbXlwYXBlcgorCitOb3RlIHRoYXQgeW91IG11c3Qgc3BlY2lmeSBhIG5hbWUgb2YgdGhlIGZpbGUgdG8gcHJvY2VzcyBhcyBhbiBhcmd1bWVudCAodG8KK3Byb2Nlc3MgdGhlIHJpZ2h0IGZpbGUgd2hlbiBlZGl0aW5nIFxpbnB1dC1lZCBvciBcaW5jbHVkZS1lZCBmaWxlOyBwb3J0YWJsZQorc29sdXRpb24gZm9yIHN1YnN0aXR1dGluZyAlIGZvciBubyBhcmd1bWVudHMgaXMgd2VsY29tZSkuIFRoaXMgaXMgbm90IGluIHRoZQorc2VtYW50aWNzIG9mIG1ha2UsIHdoZXJlIHlvdSBzcGVjaWZ5IGEgdGFyZ2V0LCBub3Qgc291cmNlLCBidXQgeW91IG1heSBzcGVjaWZ5CitmaWxlbmFtZSB3aXRob3V0IGV4dGVuc2lvbiAiLnRleCIgYW5kIG1lYW4gdGhpcyBhcyAibWFrZSBmaWxlbmFtZS5kdmkgb3IKK2ZpbGVuYW1lLnBkZiBvciBmaWxlbmFtZS5zb21lX3Jlc3VsdF9leHRlbnNpb24gYWNjb3JkaW5nIHRvIGNvbXBpbGVyIi4KKworTm90ZTogdGV4IGNvbW1hbmQgbGluZSBzeW50YXggaXMgc2V0IHRvIHVzYWJsZSBib3RoIGZvciBNaWtUZVggKHN1Z2dlc3Rpb24KK2J5IFNyaW5hdGggQXZhZGhhbnVsYSkgYW5kIHRlVGVYIChjaGVja2VkIGJ5IEFydGVtIENodXByaW5hKS4gU3VnZ2VzdGlvbgorZnJvbSB8ZXJyb3Jmb3JtYXQtTGFUZVh8IGlzIHRvbyBjb21wbGV4IHRvIGtlZXAgaXQgd29ya2luZyBmb3IgZGlmZmVyZW50CitzaGVsbHMgYW5kIE9TZXMgYW5kIGFsc28gZG9lcyBub3QgYWxsb3cgdG8gdXNlIG90aGVyIGF2YWlsYWJsZSBUZVggb3B0aW9ucywKK2lmIGFueS4gSWYgeW91ciBUZVggZG9lc24ndCBzdXBwb3J0ICItaW50ZXJhY3Rpb249bm9uc3RvcG1vZGUiLCBwbGVhc2UKK3JlcG9ydCBpdCB3aXRoIGRpZmZlcmVudCBtZWFucyB0byBleHByZXNzIFxub25zdG9wbW9kZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBUaGUgZXJyb3IgZm9ybWF0CQkJCQkqZXJyb3ItZmlsZS1mb3JtYXQqCisKKwkJCQkJKmVycm9yZm9ybWF0KiAqRTM3MiogKkUzNzMqICpFMzc0KgorCQkJCQkJKkUzNzUqICpFMzc2KiAqRTM3NyogKkUzNzgqCitUaGUgJ2Vycm9yZm9ybWF0JyBvcHRpb24gc3BlY2lmaWVzIGEgbGlzdCBvZiBmb3JtYXRzIHRoYXQgYXJlIHJlY29nbml6ZWQuICBUaGUKK2ZpcnN0IGZvcm1hdCB0aGF0IG1hdGNoZXMgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGlzIHVzZWQuICBZb3UgY2FuIGFkZCBzZXZlcmFsCitmb3JtYXRzIGZvciBkaWZmZXJlbnQgbWVzc2FnZXMgeW91ciBjb21waWxlciBwcm9kdWNlcywgb3IgZXZlbiBlbnRyaWVzIGZvcgorbXVsdGlwbGUgY29tcGlsZXJzLiAgU2VlIHxlZm0tZW50cmllc3wuCisKK0VhY2ggZW50cnkgaW4gJ2Vycm9yZm9ybWF0JyBpcyBhIHNjYW5mLWxpa2Ugc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBmb3JtYXQuCitGaXJzdCwgeW91IG5lZWQgdG8ga25vdyBob3cgc2NhbmYgd29ya3MuICBMb29rIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIKK0MgY29tcGlsZXIuICBCZWxvdyB5b3UgZmluZCB0aGUgJSBpdGVtcyB0aGF0IFZpbSB1bmRlcnN0YW5kcy4gIE90aGVycyBhcmUKK2ludmFsaWQuCisKK1NwZWNpYWwgY2hhcmFjdGVycyBpbiAnZXJyb3Jmb3JtYXQnIGFyZSBjb21tYSBhbmQgYmFja3NsYXNoLiAgU2VlCit8ZWZtLWVudHJpZXN8IGZvciBob3cgdG8gZGVhbCB3aXRoIHRoZW0uICBOb3RlIHRoYXQgYSBsaXRlcmFsICIlIiBpcyBtYXRjaGVkCitieSAiJSUiLCB0aHVzIGl0IGlzIG5vdCBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2guCisKK05vdGU6IEJ5IGRlZmF1bHQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1cHBlciBhbmQgbG93ZXJjYXNlIGlzIGlnbm9yZWQuICBJZgoreW91IHdhbnQgdG8gbWF0Y2ggY2FzZSwgYWRkICJcQyIgdG8gdGhlIHBhdHRlcm4gfC9cQ3wuCisKKworQmFzaWMgaXRlbXMKKworCSVmCQlmaWxlIG5hbWUgKGZpbmRzIGEgc3RyaW5nKQorCSVsCQlsaW5lIG51bWJlciAoZmluZHMgYSBudW1iZXIpCisJJWMJCWNvbHVtbiBudW1iZXIgKGZpbmRzIGEgbnVtYmVyIHJlcHJlc2VudGluZyBjaGFyYWN0ZXIKKwkJCWNvbHVtbiBvZiB0aGUgZXJyb3IsICgxIDx0YWI+ID09IDEgY2hhcmFjdGVyIGNvbHVtbikpCisJJXYJCXZpcnR1YWwgY29sdW1uIG51bWJlciAoZmluZHMgYSBudW1iZXIgcmVwcmVzZW50aW5nCisJCQlzY3JlZW4gY29sdW1uIG9mIHRoZSBlcnJvciAoMSA8dGFiPiA9PSA4IHNjcmVlbgorCQkJY29sdW1ucykKKwkldAkJZXJyb3IgdHlwZSAoZmluZHMgYSBzaW5nbGUgY2hhcmFjdGVyKQorCSVuCQllcnJvciBudW1iZXIgKGZpbmRzIGEgbnVtYmVyKQorCSVtCQllcnJvciBtZXNzYWdlIChmaW5kcyBhIHN0cmluZykKKwklcgkJbWF0Y2hlcyB0aGUgInJlc3QiIG9mIGEgc2luZ2xlLWxpbmUgZmlsZSBtZXNzYWdlICVPL1AvUQorCSVwCQlwb2ludGVyIGxpbmUgKGZpbmRzIGEgc2VxdWVuY2Ugb2YgJy0nLCAnLicgb3IgJyAnIGFuZAorCQkJdXNlcyB0aGUgbGVuZ3RoIGZvciB0aGUgY29sdW1uIG51bWJlcikKKwklKntjb252fQlhbnkgc2NhbmYgbm9uLWFzc2lnbmFibGUgY29udmVyc2lvbgorCSUlCQl0aGUgc2luZ2xlICclJyBjaGFyYWN0ZXIKKworVGhlICIlZiIgY29udmVyc2lvbiBkZXBlbmRzIG9uIHRoZSBjdXJyZW50ICdpc2ZuYW1lJyBzZXR0aW5nLgorCitUaGUgIiVmIiBhbmQgIiVtIiBjb252ZXJzaW9ucyBoYXZlIHRvIGRldGVjdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuICBUaGV5CitzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgdGhhdCBjYW5ub3QgYmUgaW4gdGhlIHN0cmluZy4gIEV2ZXJ5dGhpbmcKK3VwIHRvIHRoYXQgY2hhcmFjdGVyIGlzIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcuICBCdXQgd2hlbiB0aGUgbmV4dCBjaGFyYWN0ZXIKK2lzIGEgJyUnIG9yIGEgYmFja3NsYXNoLCAiJWYiIHdpbGwgbG9vayBmb3IgYW55ICdpc2ZuYW1lJyBjaGFyYWN0ZXIgYW5kICIlbSIKK2ZpbmRzIGFueXRoaW5nLiAgSWYgdGhlICIlZiIgb3IgIiVtIiBpcyBhdCB0aGUgZW5kLCBldmVyeXRoaW5nIHVwIHRvIHRoZSBlbmQKK29mIHRoZSBsaW5lIGlzIGluY2x1ZGVkLgorCitPbiBNUy1ET1MsIE1TLVdpbmRvd3MgYW5kIE9TLzIgYSBsZWFkaW5nICJDOiIgd2lsbCBiZSBpbmNsdWRlZCBpbiAiJWYiLCBldmVuCit3aGVuIHVzaW5nICIlZjoiLiAgVGhpcyBtZWFucyB0aGF0IGEgZmlsZSBuYW1lIHdoaWNoIGlzIGEgc2luZ2xlIGFscGhhYmV0aWNhbAorbGV0dGVyIHdpbGwgbm90IGJlIGRldGVjdGVkLgorCitUaGUgIiVwIiBjb252ZXJzaW9uIGlzIG5vcm1hbGx5IGZvbGxvd2VkIGJ5IGEgIl4iLiAgSXQncyB1c2VkIGZvciBjb21waWxlcnMKK3RoYXQgb3V0cHV0IGEgbGluZSBsaWtlOiA+CisJICAgIF4KK29yID4KKyAgIC0tLS0tLS0tLV4KK3RvIGluZGljYXRlIHRoZSBjb2x1bW4gb2YgdGhlIGVycm9yLiAgVGhpcyBpcyB0byBiZSB1c2VkIGluIGEgbXVsdGktbGluZSBlcnJvcgorbWVzc2FnZS4gIFNlZSB8ZXJyb3Jmb3JtYXQtamF2YWN8IGZvciBhICB1c2VmdWwgZXhhbXBsZS4KKworCitDaGFuZ2luZyBkaXJlY3RvcnkKKworVGhlIGZvbGxvd2luZyB1cHBlcmNhc2UgY29udmVyc2lvbiBjaGFyYWN0ZXJzIHNwZWNpZnkgdGhlIHR5cGUgb2Ygc3BlY2lhbAorZm9ybWF0IHN0cmluZ3MuICBBdCBtb3N0IG9uZSBvZiB0aGVtIG1heSBiZSBnaXZlbiBhcyBhIHByZWZpeCBhdCB0aGUgYmVnaW4KK29mIGEgc2luZ2xlIGNvbW1hLXNlcGFyYXRlZCBmb3JtYXQgcGF0dGVybi4KK1NvbWUgY29tcGlsZXJzIHByb2R1Y2UgbWVzc2FnZXMgdGhhdCBjb25zaXN0IG9mIGRpcmVjdG9yeSBuYW1lcyB0aGF0IGhhdmUgdG8KK2JlIHByZXBlbmRlZCB0byBlYWNoIGZpbGUgbmFtZSByZWFkIGJ5ICVmIChleGFtcGxlOiBHTlUgbWFrZSkuIFRoZSBmb2xsb3dpbmcKK2NvZGVzIGNhbiBiZSB1c2VkIHRvIHNjYW4gdGhlc2UgZGlyZWN0b3J5IG5hbWVzOyB0aGV5IHdpbGwgYmUgc3RvcmVkIGluIGFuCitpbnRlcm5hbCBkaXJlY3Rvcnkgc3RhY2suCQkJCQkqRTM3OSoKKwklRAkJImVudGVyIGRpcmVjdG9yeSIgZm9ybWF0IHN0cmluZzsgZXhwZWN0cyBhIGZvbGxvd2luZworCQkJICAlZiB0aGF0IGZpbmRzIHRoZSBkaXJlY3RvcnkgbmFtZQorCSVYCQkibGVhdmUgZGlyZWN0b3J5IiBmb3JtYXQgc3RyaW5nOyBleHBlY3RzIGZvbGxvd2luZyAlZgorCitXaGVuIGRlZmluaW5nIGFuICJlbnRlciBkaXJlY3RvcnkiIG9yICJsZWF2ZSBkaXJlY3RvcnkiIGZvcm1hdCwgdGhlICIlRCIgb3IKKyIlWCIgaGFzIHRvIGJlIGdpdmVuIGF0IHRoZSBzdGFydCBvZiB0aGF0IHN1YnN0cmluZy4gVmltIHRyYWNrcyB0aGUgZGlyZWN0b3J5CitjaGFuZ2VzIGFuZCBwcmVwZW5kcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gZWFjaCBlcnJvbmVvdXMgZmlsZSBmb3VuZCB3aXRoIGEKK3JlbGF0aXZlIHBhdGguICBTZWUgfHF1aWNrZml4LWRpcmVjdG9yeS1zdGFja3wgZm9yIGRldGFpbHMsIHRpcHMgYW5kCitsaW1pdGF0aW9ucy4KKworCitNdWx0aS1saW5lIG1lc3NhZ2VzCQkJCSplcnJvcmZvcm1hdC1tdWx0aS1saW5lKgorCitJdCBpcyBwb3NzaWJsZSB0byByZWFkIHRoZSBvdXRwdXQgb2YgcHJvZ3JhbXMgdGhhdCBwcm9kdWNlIG11bHRpLWxpbmUKK21lc3NhZ2VzLCBpZS4gZXJyb3Igc3RyaW5ncyB0aGF0IGNvbnN1bWUgbW9yZSB0aGFuIG9uZSBsaW5lLiAgUG9zc2libGUKK3ByZWZpeGVzIGFyZToKKwklRQkJc3RhcnQgb2YgYSBtdWx0aS1saW5lIGVycm9yIG1lc3NhZ2UKKwklVwkJc3RhcnQgb2YgYSBtdWx0aS1saW5lIHdhcm5pbmcgbWVzc2FnZQorCSVJCQlzdGFydCBvZiBhIG11bHRpLWxpbmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlCisJJUEJCXN0YXJ0IG9mIGEgbXVsdGktbGluZSBtZXNzYWdlICh1bnNwZWNpZmllZCB0eXBlKQorCSVDCQljb250aW51YXRpb24gb2YgYSBtdWx0aS1saW5lIG1lc3NhZ2UKKwklWgkJZW5kIG9mIGEgbXVsdGktbGluZSBtZXNzYWdlCitUaGVzZSBjYW4gYmUgdXNlZCB3aXRoICcrJyBhbmQgJy0nLCBzZWUgfGVmbS1pZ25vcmV8IGJlbG93LgorCitFeGFtcGxlOiBZb3VyIGNvbXBpbGVyIGhhcHBlbnMgdG8gd3JpdGUgb3V0IGVycm9ycyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdAorKGxlYWRpbmcgbGluZSBudW1iZXJzIG5vdCBiZWluZyBwYXJ0IG9mIHRoZSBhY3R1YWwgb3V0cHV0KToKKworICAgICAxCUVycm9yIDI3NQorICAgICAyCWxpbmUgNDIKKyAgICAgMwljb2x1bW4gMworICAgICA0CScgJyBleHBlY3RlZCBhZnRlciAnLS0nCisKK1RoZSBhcHByb3ByaWF0ZSBlcnJvciBmb3JtYXQgc3RyaW5nIGhhcyB0byBsb29rIGxpa2UgdGhpczogPgorICAgOnNldCBlZm09JUVFcnJvclwgJW4sJUNsaW5lXCAlbCwlQ2NvbHVtblwgJWMsJVolbQorCitBbmQgdGhlIHw6Y2xpc3R8IGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkIGZvciB0aGlzIGVycm9yIGlzOgorCisgMTo0MiBjb2wgMyBlcnJvciAyNzU6ICAnICcgZXhwZWN0ZWQgYWZ0ZXIgJy0tJworCitBbm90aGVyIGV4YW1wbGU6IFRoaW5rIG9mIGEgUHl0aG9uIGludGVycHJldGVyIHRoYXQgcHJvZHVjZXMgdGhlIGZvbGxvd2luZworZXJyb3IgbWVzc2FnZSAobGluZSBudW1iZXJzIGFyZSBub3QgcGFydCBvZiB0aGUgYWN0dWFsIG91dHB1dCk6CisKKyAgICAgMQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAyCUZBSUw6IHRlc3RHZXRUeXBlSWRDYWNoZXNSZXN1bHQgKGRiZmFjYWRlVGVzdC5EanNEQkZhY2FkZVRlc3QpCisgICAgIDMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgNAlUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIDUJICBGaWxlICJ1bml0dGVzdHMvZGJmYWNhZGVUZXN0LnB5IiwgbGluZSA4OSwgaW4gdGVzdEZvbworICAgICA2CSAgICBzZWxmLmFzc2VydEVxdWFscygzNCwgZHRpZCkKKyAgICAgNwkgIEZpbGUgIi91c3IvbGliL3B5dGhvbjIuMi91bml0dGVzdC5weSIsIGxpbmUgMjg2LCBpbgorICAgICA4CSBmYWlsVW5sZXNzRXF1YWwKKyAgICAgOQkgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBcCisgICAgMTAJQXNzZXJ0aW9uRXJyb3I6IDM0ICE9IDMzCisgICAgMTEKKyAgICAxMgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIDEzCVJhbiAyNyB0ZXN0cyBpbiAwLjA2M3MKKworU2F5IHlvdSB3YW50IHw6Y2xpc3R8IHdyaXRlIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBvZiB0aGlzIG1lc3NhZ2Ugb25seSwKK25hbWVseToKKyA1IHVuaXR0ZXN0cy9kYmZhY2FkZVRlc3QucHk6ODk6ICBBc3NlcnRpb25FcnJvcjogMzQgIT0gMzMKKworVGhlbiB0aGUgZXJyb3IgZm9ybWF0IHN0cmluZyBjb3VsZCBiZSBkZWZpbmVkIGFzIGZvbGxvd3M6ID4KKyAgOnNldCBlZm09JUNcICUuJSMsJUFcIFwgRmlsZVwgXCIlZlwiXFwsXCBsaW5lXCAlbCUuJSMsJVolWyVeXCBdJVxcQD0lbQorCitOb3RlIHRoYXQgdGhlICVDIHN0cmluZyBpcyBnaXZlbiBiZWZvcmUgdGhlICVBIGhlcmU6IHNpbmNlIHRoZSBleHByZXNzaW9uCisnICUuJSMnICh3aGljaCBzdGFuZHMgZm9yIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gJyAuKicpIG1hdGNoZXMgZXZlcnkgbGluZQorc3RhcnRpbmcgd2l0aCBhIHNwYWNlLCBmb2xsb3dlZCBieSBhbnkgY2hhcmFjdGVycyB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLAoraXQgYWxzbyBoaWRlcyBsaW5lIDcgd2hpY2ggd291bGQgdHJpZ2dlciBhIHNlcGFyYXRlIGVycm9yIG1lc3NhZ2Ugb3RoZXJ3aXNlLgorRXJyb3IgZm9ybWF0IHN0cmluZ3MgYXJlIGFsd2F5cyBwYXJzZWQgcGF0dGVybiBieSBwYXR0ZXJuIHVudGlsIHRoZSBmaXJzdAorbWF0Y2ggb2NjdXJzLgorCisKK1NlcGFyYXRlIGZpbGUgbmFtZQkJCSplcnJvcmZvcm1hdC1zZXBhcmF0ZS1maWxlbmFtZSoKKworVGhlc2UgcHJlZml4ZXMgYXJlIHVzZWZ1bCBpZiB0aGUgZmlsZSBuYW1lIGlzIGdpdmVuIG9uY2UgYW5kIG11bHRpcGxlIG1lc3NhZ2VzCitmb2xsb3cgdGhhdCByZWZlciB0byB0aGlzIGZpbGUgbmFtZS4KKwklTwkJc2luZ2xlLWxpbmUgZmlsZSBtZXNzYWdlOiBvdmVycmVhZCB0aGUgbWF0Y2hlZCBwYXJ0CisJJVAJCXNpbmdsZS1saW5lIGZpbGUgbWVzc2FnZTogcHVzaCBmaWxlICVmIG9udG8gdGhlIHN0YWNrCisJJVEJCXNpbmdsZS1saW5lIGZpbGUgbWVzc2FnZTogcG9wIHRoZSBsYXN0IGZpbGUgZnJvbSBzdGFjaworCitFeGFtcGxlOiBHaXZlbiBhIGNvbXBpbGVyIHRoYXQgcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBlcnJvciBsb2dmaWxlICh3aXRob3V0CitsZWFkaW5nIGxpbmUgbnVtYmVycyk6CisKKyAgICAgMQlbYTEudHRdCisgICAgIDIJKDEsMTcpICBlcnJvcjogJzsnIG1pc3NpbmcKKyAgICAgMwkoMjEsMikgIHdhcm5pbmc6IHZhcmlhYmxlICd6JyBub3QgZGVmaW5lZAorICAgICA0CSg2NywzKSAgZXJyb3I6IGVuZCBvZiBmaWxlIGZvdW5kIGJlZm9yZSBzdHJpbmcgZW5kZWQKKyAgICAgNQorICAgICA2CVthMi50dF0KKyAgICAgNworICAgICA4CVthMy50dF0KKyAgICAgOQlORVcgY29tcGlsZXIgdjEuMQorICAgIDEwCSgyLDIpICAgd2FybmluZzogdmFyaWFibGUgJ3gnIG5vdCBkZWZpbmVkCisgICAgMTEJKDY3LDMpICB3YXJuaW5nOiAncycgYWxyZWFkeSBkZWZpbmVkCisKK1RoaXMgbG9nZmlsZSBsaXN0cyBzZXZlcmFsIG1lc3NhZ2VzIGZvciBlYWNoIGZpbGUgZW5jbG9zZWQgaW4gWy4uLl0gd2hpY2ggYXJlCitwcm9wZXJseSBwYXJzZWQgYnkgYW4gZXJyb3IgZm9ybWF0IGxpa2UgdGhpczogPgorICA6c2V0IGVmbT0lK1BbJWZdLCglbFxcLCVjKSUqW1wgXSV0JSpbXjpdOlwgJW0sJS1RCisKK0EgY2FsbCBvZiB8OmNsaXN0fCB3cml0ZXMgdGhlbSBhY2NvcmRpbmdseSB3aXRoIHRoZWlyIGNvcnJlY3QgZmlsZW5hbWVzOgorCisgIDIgYTEudHQ6MSBjb2wgMTcgZXJyb3I6ICc7JyBtaXNzaW5nCisgIDMgYTEudHQ6MjEgY29sIDIgd2FybmluZzogdmFyaWFibGUgJ3onIG5vdCBkZWZpbmVkCisgIDQgYTEudHQ6NjcgY29sIDMgZXJyb3I6IGVuZCBvZiBmaWxlIGZvdW5kIGJlZm9yZSBzdHJpbmcgZW5kZWQKKyAgOCBhMy50dDoyIGNvbCAyIHdhcm5pbmc6IHZhcmlhYmxlICd4JyBub3QgZGVmaW5lZAorICA5IGEzLnR0OjY3IGNvbCAzIHdhcm5pbmc6ICdzJyBhbHJlYWR5IGRlZmluZWQKKworVW5saWtlIHRoZSBvdGhlciBwcmVmaXhlcyB0aGF0IGFsbCBtYXRjaCBhZ2FpbnN0IHdob2xlIGxpbmVzLCAlUCwgJVEgYW5kICVPCitjYW4gYmUgdXNlZCB0byBtYXRjaCBzZXZlcmFsIHBhdHRlcm5zIGluIHRoZSBzYW1lIGxpbmUuIFRodXMgaXQgaXMgcG9zc2libGUKK3RvIHBhcnNlIGV2ZW4gbmVzdGVkIGZpbGVzIGxpa2UgaW4gdGhlIGZvbGxvd2luZyBsaW5lOgorICB7ImZpbGUxIiB7ImZpbGUyIiBlcnJvcjF9IGVycm9yMiB7ImZpbGUzIiBlcnJvcjMgeyJmaWxlNCIgZXJyb3I0IGVycm9yNX19fQorVGhlICVPIHRoZW4gcGFyc2VzIG92ZXIgc3RyaW5ncyB0aGF0IGRvIG5vdCBjb250YWluIGFueSBwdXNoL3BvcCBmaWxlIG5hbWUKK2luZm9ybWF0aW9uLiAgU2VlIHxlcnJvcmZvcm1hdC1MYVRlWHwgZm9yIGFuIGV4dGVuZGVkIGV4YW1wbGUuCisKKworSWdub3JpbmcgYW5kIHVzaW5nIHdob2xlIG1lc3NhZ2VzCQkJKmVmbS1pZ25vcmUqCisKK1RoZSBjb2RlcyAnKycgb3IgJy0nIGNhbiBiZSBjb21iaW5lZCB3aXRoIHRoZSB1cHBlcmNhc2UgY29kZXMgYWJvdmU7IGluIHRoYXQKK2Nhc2UgdGhleSBoYXZlIHRvIHByZWNlZGUgdGhlIGxldHRlciwgZWcuICclK0EnIG9yICclLUcnOgorCSUtCQlkbyBub3QgaW5jbHVkZSB0aGUgbWF0Y2hpbmcgbXVsdGktbGluZSBpbiBhbnkgb3V0cHV0CisJJSsJCWluY2x1ZGUgdGhlIHdob2xlIG1hdGNoaW5nIGxpbmUgaW4gdGhlICVtIGVycm9yIHN0cmluZworCitPbmUgcHJlZml4IGlzIG9ubHkgdXNlZnVsIGluIGNvbWJpbmF0aW9uIHdpdGggJysnIG9yICctJywgbmFtZWx5ICVHLiBJdCBwYXJzZXMKK292ZXIgbGluZXMgY29udGFpbmluZyBnZW5lcmFsIGluZm9ybWF0aW9uIGxpa2UgY29tcGlsZXIgdmVyc2lvbiBzdHJpbmdzIG9yCitvdGhlciBoZWFkZXJzIHRoYXQgY2FuIGJlIHNraXBwZWQuCisJJS1HCQlpZ25vcmUgdGhpcyBtZXNzYWdlCisJJStHCQlnZW5lcmFsIG1lc3NhZ2UKKworCitQYXR0ZXJuIG1hdGNoaW5nCisKK1RoZSBzY2FuZigpLWxpa2UgIiUqW10iIG5vdGF0aW9uIGlzIHN1cHBvcnRlZCBmb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eQord2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBWaW0uICBIb3dldmVyLCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkKKyhuZWFybHkpIGFueSBWaW0gc3VwcG9ydGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiBmb3JtYXQgc3RyaW5ncy4KK1NpbmNlIG1ldGEgY2hhcmFjdGVycyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uIGxhbmd1YWdlIGNhbiBiZSBwYXJ0IG9mCitvcmRpbmFyeSBtYXRjaGluZyBzdHJpbmdzIG9yIGZpbGUgbmFtZXMgKGFuZCB0aGVyZWZvcmUgaW50ZXJuYWxseSBoYXZlIHRvCitiZSBlc2NhcGVkKSwgbWV0YSBzeW1ib2xzIGhhdmUgdG8gYmUgd3JpdHRlbiB3aXRoIGxlYWRpbmcgJyUnOgorCSVcCQl0aGUgc2luZ2xlICdcJyBjaGFyYWN0ZXIuIE5vdGUgdGhhdCB0aGlzIGhhcyB0byBiZQorCQkJZXNjYXBlZCAoIiVcXCIpIGluICI6c2V0IGVycm9yZm9ybWF0PSIgZGVmaW5pdGlvbnMuCisJJS4JCXRoZSBzaW5nbGUgJy4nIGNoYXJhY3Rlci4KKwklIwkJdGhlIHNpbmdsZSAnKicoISkgY2hhcmFjdGVyLgorCSVeCQl0aGUgc2luZ2xlICdeJyBjaGFyYWN0ZXIuCisJJSQJCXRoZSBzaW5nbGUgJyQnIGNoYXJhY3Rlci4KKwklWwkJdGhlIHNpbmdsZSAnWycgY2hhcmFjdGVyIGZvciBhIFtdIGNoYXJhY3RlciByYW5nZS4KKwklfgkJdGhlIHNpbmdsZSAnficgY2hhcmFjdGVyLgorV2hlbiB1c2luZyBjaGFyYWN0ZXIgY2xhc3NlcyBpbiBleHByZXNzaW9ucyAoc2VlIHwvXGl8IGZvciBhbiBvdmVydmlldyksCit0ZXJtcyBjb250YWluaW5nIHRoZSAiXCsiIHF1YW50aWZpZXIgY2FuIGJlIHdyaXR0ZW4gaW4gdGhlIHNjYW5mKCkgIiUqIgorbm90YXRpb24uIEV4YW1wbGU6ICIlXFxkJVxcKyIgKCJcZFwrIiwgImFueSBudW1iZXIiKSBpcyBlcXVpdmFsZW50IHRvICIlKlxcZCIuCitJbXBvcnRhbnQgbm90ZTogVGhlIFwoLi4uXCkgZ3JvdXBpbmcgb2Ygc3ViLW1hdGNoZXMgY2FuIG5vdCBiZSB1c2VkIGluIGZvcm1hdAorc3BlY2lmaWNhdGlvbnMgYmVjYXVzZSBpdCBpcyByZXNlcnZlZCBmb3IgaW50ZXJuYWwgY29udmVyc2lvbnMuCisKKworTXVsdGlwbGUgZW50cmllcyBpbiAnZXJyb3Jmb3JtYXQnCQkJKmVmbS1lbnRyaWVzKgorCitUbyBiZSBhYmxlIHRvIGRldGVjdCBvdXRwdXQgZnJvbSBzZXZlcmFsIGNvbXBpbGVycywgc2V2ZXJhbCBmb3JtYXQgcGF0dGVybnMKK21heSBiZSBwdXQgaW4gJ2Vycm9yZm9ybWF0Jywgc2VwYXJhdGVkIGJ5IGNvbW1hcyAobm90ZTogYmxhbmtzIGFmdGVyIHRoZSBjb21tYQorYXJlIGlnbm9yZWQpLiAgVGhlIGZpcnN0IHBhdHRlcm4gdGhhdCBoYXMgYSBjb21wbGV0ZSBtYXRjaCBpcyB1c2VkLiAgSWYgbm8KK21hdGNoIGlzIGZvdW5kLCBtYXRjaGluZyBwYXJ0cyBmcm9tIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQsIGFsdGhvdWdoIHRoZQorZmlsZSBuYW1lIGlzIHJlbW92ZWQgYW5kIHRoZSBlcnJvciBtZXNzYWdlIGlzIHNldCB0byB0aGUgd2hvbGUgbWVzc2FnZS4gIElmCit0aGVyZSBpcyBhIHBhdHRlcm4gdGhhdCBtYXkgbWF0Y2ggb3V0cHV0IGZyb20gc2V2ZXJhbCBjb21waWxlcnMgKGJ1dCBub3QgaW4gYQorcmlnaHQgd2F5KSwgcHV0IGl0IGFmdGVyIG9uZSB0aGF0IGlzIG1vcmUgcmVzdHJpY3RpdmUuCisKK1RvIGluY2x1ZGUgYSBjb21tYSBpbiBhIHBhdHRlcm4gcHJlY2VkZSBpdCB3aXRoIGEgYmFja3NsYXNoICh5b3UgaGF2ZSB0byB0eXBlCit0d28gaW4gYSAiOnNldCIgY29tbWFuZCkuICBUbyBpbmNsdWRlIGEgYmFja3NsYXNoIGl0c2VsZiBnaXZlIHR3byBiYWNrc2xhc2hlcworKHlvdSBoYXZlIHRvIHR5cGUgZm91ciBpbiBhICI6c2V0IiBjb21tYW5kKS4gIFlvdSBhbHNvIG5lZWQgdG8gcHV0IGEgYmFja3NsYXNoCitiZWZvcmUgYSBzcGFjZSBmb3IgIjpzZXQiLgorCisKK1ZhbGlkIG1hdGNoZXMJCQkJCQkqcXVpY2tmaXgtdmFsaWQqCisKK0lmIGEgbGluZSBkb2VzIG5vdCBjb21wbGV0ZWx5IG1hdGNoIG9uZSBvZiB0aGUgZW50cmllcyBpbiAnZXJyb3Jmb3JtYXQnLCB0aGUKK3dob2xlIGxpbmUgaXMgcHV0IGluIHRoZSBlcnJvciBtZXNzYWdlIGFuZCB0aGUgZW50cnkgaXMgbWFya2VkICJub3QgdmFsaWQiCitUaGVzZSBsaW5lcyBhcmUgc2tpcHBlZCB3aXRoIHRoZSAiOmNuIiBhbmQgIjpjcCIgY29tbWFuZHMgKHVubGVzcyB0aGVyZSBpcworbm8gdmFsaWQgbGluZSBhdCBhbGwpLiAgWW91IGNhbiB1c2UgIjpjbCEiIHRvIGRpc3BsYXkgYWxsIHRoZSBlcnJvciBtZXNzYWdlcy4KKworSWYgdGhlIGVycm9yIGZvcm1hdCBkb2VzIG5vdCBjb250YWluIGEgZmlsZSBuYW1lIFZpbSBjYW5ub3Qgc3dpdGNoIHRvIHRoZQorY29ycmVjdCBmaWxlLiAgWW91IHdpbGwgaGF2ZSB0byBkbyB0aGlzIGJ5IGhhbmQuCisKKworRXhhbXBsZXMKKworVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBmcm9tIHRoZSBBbWlnYSBBenRlYyBjb21waWxlciBpczoKKworCWZpbGVuYW1lPmxpbmVudW1iZXI6Y29sdW1ubnVtYmVyOmVycm9ydHlwZTplcnJvcm51bWJlcjplcnJvcm1lc3NhZ2UKKworCWZpbGVuYW1lCW5hbWUgb2YgdGhlIGZpbGUgaW4gd2hpY2ggdGhlIGVycm9yIHdhcyBkZXRlY3RlZAorCWxpbmVudW1iZXIJbGluZSBudW1iZXIgd2hlcmUgdGhlIGVycm9yIHdhcyBkZXRlY3RlZAorCWNvbHVtbm51bWJlcgljb2x1bW4gbnVtYmVyIHdoZXJlIHRoZSBlcnJvciB3YXMgZGV0ZWN0ZWQKKwllcnJvcnR5cGUJdHlwZSBvZiB0aGUgZXJyb3IsIG5vcm1hbGx5IGEgc2luZ2xlICdFJyBvciAnVycKKwllcnJvcm51bWJlcgludW1iZXIgb2YgdGhlIGVycm9yIChmb3IgbG9va3VwIGluIHRoZSBtYW51YWwpCisJZXJyb3JtZXNzYWdlCWRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvcgorCitUaGlzIGNhbiBiZSBtYXRjaGVkIHdpdGggdGhpcyAnZXJyb3Jmb3JtYXQnIGVudHJ5OgorCSVmPiVsOiVjOiV0OiVuOiVtCisKK1NvbWUgZXhhbXBsZXMgZm9yIEMgY29tcGlsZXJzIHRoYXQgcHJvZHVjZSBzaW5nbGUtbGluZSBlcnJvciBvdXRwdXRzOgorJWY6JWw6XCAldCUqW14wMTIzNDU2Nzg5XSVuOlwgJW0JZm9yIE1hbngvQXp0ZWMgQyBlcnJvciBtZXNzYWdlcworCQkJCQkoc2NhbmYoKSBkb2Vzbid0IHVuZGVyc3RhbmQgWzAtOV0pCislZlwgJWxcICV0JSpbXjAtOV0lbjpcICVtCQlmb3IgU0FTIEMKK1wiJWZcIlxcLCUqW14wLTldJWw6XCAlbQkJZm9yIGdlbmVyaWMgQyBjb21waWxlcnMKKyVmOiVsOlwgJW0JCQkJZm9yIEdDQworJWY6JWw6XCAlbSwlRGdtYWtlWyUqXFxkXTpcIEVudGVyaW5nXCBkaXJlY3RvcnlcIGAlZicsCislRGdtYWtlWyUqXFxkXTpcIExlYXZpbmdcIGRpcmVjdG9yeVwgYCVmJworCQkJCQlmb3IgR0NDIHdpdGggZ21ha2UgKGNvbmNhdCB0aGUgbGluZXMhKQorJWYoJWwpXCA6XCAlKlteOl06XCAlbQkJCW9sZCBTQ08gQyBjb21waWxlciAocHJlLU9TNSkKKyVmKCVsKVwgOlwgJXQlKlteMC05XSVuOlwgJW0JCWlkZW0sIHdpdGggZXJyb3IgdHlwZSBhbmQgbnVtYmVyCislZjolbDpcICVtLEluXCBmaWxlXCBpbmNsdWRlZFwgZnJvbVwgJWY6JWw6LFxeSVxeSWZyb21cICVmOiVsJW0KKwkJCQkJZm9yIEdDQywgd2l0aCBzb21lIGV4dHJhcworCitFeHRlbmRlZCBleGFtcGxlcyBmb3IgdGhlIGhhbmRsaW5nIG9mIG11bHRpLWxpbmUgbWVzc2FnZXMgYXJlIGdpdmVuIGJlbG93LAorc2VlIHxlcnJvcmZvcm1hdC1KaWtlc3wgYW5kIHxlcnJvcmZvcm1hdC1MYVRlWHwuCisKK05vdGUgdGhlIGJhY2tzbGFzaCBpbiBmcm9udCBvZiBhIHNwYWNlIGFuZCBkb3VibGUgcXVvdGUuICBJdCBpcyByZXF1aXJlZCBmb3IKK3RoZSA6c2V0IGNvbW1hbmQuICBUaGVyZSBhcmUgdHdvIGJhY2tzbGFzaGVzIGluIGZyb250IG9mIGEgY29tbWEsIG9uZSBmb3IgdGhlCis6c2V0IGNvbW1hbmQgYW5kIG9uZSB0byBhdm9pZCByZWNvZ25pemluZyB0aGUgY29tbWEgYXMgYSBzZXBhcmF0b3Igb2YgZXJyb3IKK2Zvcm1hdHMuCisKKworRmlsdGVyaW5nIG1lc3NhZ2VzCisKK0lmIHlvdSBoYXZlIGEgY29tcGlsZXIgdGhhdCBwcm9kdWNlcyBlcnJvciBtZXNzYWdlcyB0aGF0IGRvIG5vdCBmaXQgaW4gdGhlCitmb3JtYXQgc3RyaW5nLCB5b3UgY291bGQgd3JpdGUgYSBwcm9ncmFtIHRoYXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgbWVzc2FnZXMKK2ludG8gdGhpcyBmb3JtYXQuICBZb3UgY2FuIHVzZSB0aGlzIHByb2dyYW0gd2l0aCB0aGUgIjptYWtlIiBjb21tYW5kIGJ5CitjaGFuZ2luZyB0aGUgJ21ha2VwcmcnIG9wdGlvbi4gIEZvciBleGFtcGxlOiA+CisgICA6c2V0IG1wPW1ha2VcIFxcXHwmXCBlcnJvcl9maWx0ZXIKK1RoZSBiYWNrc2xhc2hlcyBiZWZvcmUgdGhlIHBpcGUgY2hhcmFjdGVyIGFyZSByZXF1aXJlZCB0byBhdm9pZCBpdCB0byBiZQorcmVjb2duaXplZCBhcyBhIGNvbW1hbmQgc2VwYXJhdG9yLiAgVGhlIGJhY2tzbGFzaCBiZWZvcmUgZWFjaCBzcGFjZSBpcworcmVxdWlyZWQgZm9yIHRoZSBzZXQgY29tbWFuZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIFRoZSBkaXJlY3Rvcnkgc3RhY2sJCQkJKnF1aWNrZml4LWRpcmVjdG9yeS1zdGFjayoKKworUXVpY2tmaXggbWFpbnRhaW5zIGEgc3RhY2sgZm9yIHNhdmluZyBhbGwgdXNlZCBkaXJlY3RvcmllcyBwYXJzZWQgZnJvbSB0aGUKK21ha2Ugb3V0cHV0LiBGb3IgR05VLW1ha2UgdGhpcyBpcyByYXRoZXIgc2ltcGxlLCBhcyBpdCBhbHdheXMgcHJpbnRzIHRoZQorYWJzb2x1dGUgcGF0aCBvZiBhbGwgZGlyZWN0b3JpZXMgaXQgZW50ZXJzIGFuZCBsZWF2ZXMuIFJlZ2FyZGxlc3MgaWYgdGhpcyBpcworZG9uZSB2aWEgYSAnY2QnIGNvbW1hbmQgaW4gdGhlIG1ha2VmaWxlIG9yIHdpdGggdGhlIHBhcmFtZXRlciAiLUMgZGlyIiAoY2hhbmdlCit0byBkaXJlY3RvcnkgYmVmb3JlIHJlYWRpbmcgdGhlIG1ha2VmaWxlKS4gSXQgbWF5IGJlIHVzZWZ1bCB0byB1c2UgdGhlIHN3aXRjaAorIi13IiB0byBmb3JjZSBHTlUtbWFrZSB0byBwcmludCBvdXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGJlZm9yZSBhbmQgYWZ0ZXIKK3Byb2Nlc3NpbmcuCisKK01haW50YWluaW5nIHRoZSBjb3JyZWN0IGRpcmVjdG9yeSBpcyBtb3JlIGNvbXBsaWNhdGVkIGlmIHlvdSBkb24ndCB1c2UKK0dOVS1tYWtlLiBBSVgtbWFrZSBmb3IgZXhhbXBsZSBkb2Vzbid0IHByaW50IGFueSBpbmZvcm1hdGlvbiBhYm91dCBpdHMgd29ya2luZworZGlyZWN0b3J5LiBUaGVuIHlvdSBuZWVkIHRvIGVuaGFuY2UgdGhlIG1ha2VmaWxlLiBJbiB0aGUgbWFrZWZpbGUgb2YgbGVzc3RpZmYKK3RoZXJlIGlzIGEgY29tbWFuZCB3aGljaCBlY2hvZXMgIk1ha2luZyB7dGFyZ2V0fSBpbiB7ZGlyfSIuIFRoZSBzcGVjaWFsCitwcm9ibGVtIGhlcmUgaXMgdGhhdCBpdCBkb2Vzbid0IHByaW50IGluZm9ybWF0aW9ucyBvbiBsZWF2aW5nIHRoZSBkaXJlY3RvcnkKK2FuZCB0aGF0IGl0IGRvZXNuJ3QgcHJpbnQgdGhlIGFic29sdXRlIHBhdGguCisKK1RvIHNvbHZlIHRoZSBwcm9ibGVtIHdpdGggcmVsYXRpdmUgcGF0aHMgYW5kIG1pc3NpbmcgImxlYXZlIGRpcmVjdG9yeSIKK21lc3NhZ2VzIFZpbSB1c2VzIGZvbGxvd2luZyBhbGdvcml0aG06CisKKzEpIENoZWNrIGlmIHRoZSBnaXZlbiBkaXJlY3RvcnkgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgSWYgdGhpcyBpcyB0cnVlLCBzdG9yZSBpdCBhcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisyKSBJZiBpdCBpcyBub3QgYSBzdWJkaXIgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0cnkgaWYgdGhpcyBpcyBhCisgICBzdWJkaXJlY3Rvcnkgb2Ygb25lIG9mIHRoZSB1cHBlciBkaXJlY3Rvcmllcy4KKzMpIElmIHRoZSBkaXJlY3Rvcnkgc3RpbGwgaXNuJ3QgZm91bmQsIGl0IGlzIGFzc3VtZWQgdG8gYmUgYSBzdWJkaXJlY3RvcnkKKyAgIG9mIFZpbSdzIGN1cnJlbnQgZGlyZWN0b3J5LgorCitBZGRpdGlvbmFsbHkgaXQgaXMgY2hlY2tlZCBmb3IgZXZlcnkgZmlsZSwgaWYgaXQgcmVhbGx5IGV4aXN0cyBpbiB0aGUKK2lkZW50aWZpZWQgZGlyZWN0b3J5LiAgSWYgbm90LCBpdCBpcyBzZWFyY2hlZCBpbiBhbGwgb3RoZXIgZGlyZWN0b3JpZXMgb2YgdGhlCitkaXJlY3Rvcnkgc3RhY2sgKE5PVCB0aGUgZGlyZWN0b3J5IHN1YnRyZWUhKS4gSWYgaXQgaXMgc3RpbGwgbm90IGZvdW5kLCBpdCBpcworYXNzdW1lZCB0aGF0IGl0IGlzIGluIFZpbSdzIGN1cnJlbnQgZGlyZWN0b3J5LgorCitUaGVyZSBhcmUgbGltaXRhdGlvbiBpbiB0aGlzIGFsZ29yaXRobS4gVGhpcyBleGFtcGxlcyBhc3N1bWUgdGhhdCBtYWtlIGp1c3QKK3ByaW50cyBpbmZvcm1hdGlvbiBhYm91dCBlbnRlcmluZyBhIGRpcmVjdG9yeSBpbiB0aGUgZm9ybSAiTWFraW5nIGFsbCBpbiBkaXIiLgorCisxKSBBc3N1bWUgeW91IGhhdmUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIGFuZCBmaWxlczoKKyAgIC4vZGlyMQorICAgLi9kaXIxL2ZpbGUxLmMKKyAgIC4vZmlsZTEuYworCisgICBJZiBtYWtlIHByb2Nlc3NlcyB0aGUgZGlyZWN0b3J5ICIuL2RpcjEiIGJlZm9yZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kCisgICB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgZmlsZSAiLi9maWxlMS5jIiwgeW91IHdpbGwgZW5kIHVwIHdpdGggdGhlIGZpbGUKKyAgICIuL2RpcjEvZmlsZS5jIiBsb2FkZWQgYnkgVmltLgorCisgICBUaGlzIGNhbiBvbmx5IGJlIHNvbHZlZCB3aXRoIGEgImxlYXZlIGRpcmVjdG9yeSIgbWVzc2FnZS4KKworMikgQXNzdW1lIHlvdSBoYXZlIGZvbGxvd2luZyBkaXJlY3RvcmllcyBhbmQgZmlsZXM6CisgICAuL2RpcjEKKyAgIC4vZGlyMS9kaXIyCisgICAuL2RpcjIKKworICAgWW91IGdldCB0aGUgZm9sbG93aW5nOgorCisgICBNYWtlIG91dHB1dAkJCSAgRGlyZWN0b3J5IGludGVycHJldGVkIGJ5IFZpbQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTWFraW5nIGFsbCBpbiBkaXIxCQkgIC4vZGlyMQorICAgTWFraW5nIGFsbCBpbiBkaXIyCQkgIC4vZGlyMS9kaXIyCisgICBNYWtpbmcgYWxsIGluIGRpcjIJCSAgLi9kaXIxL2RpcjIKKworICAgVGhpcyBjYW4gYmUgc29sdmVkIGJ5IHByaW50aW5nIGFic29sdXRlIGRpcmVjdG9yaWVzIGluIHRoZSAiZW50ZXIgZGlyZWN0b3J5IgorICAgbWVzc2FnZSBvciBieSBwcmludGluZyAibGVhdmUgZGlyZWN0b3J5IiBtZXNzYWdlcy4uCisKK1RvIGF2b2lkIHRoaXMgcHJvYmxlbXMsIGVuc3VyZSB0byBwcmludCBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMgYW5kICJsZWF2ZQorZGlyZWN0b3J5IiBtZXNzYWdlcy4KKworRXhhbXBsZXMgZm9yIE1ha2VmaWxlczoKKworVW5peDoKKyAgICBsaWJzOgorCSAgICBmb3IgZG4gaW4gJChMSUJESVJTKTsgZG8JCQkJXAorCQkoY2QgJCRkbjsgZWNobyAiRW50ZXJpbmcgZGlyICckJChwd2QpJyI7IG1ha2UpOyBcCisJCWVjaG8gIkxlYXZpbmcgZGlyIjsJCQkJXAorCSAgICBkb25lCisKK0FkZAorICAgICVERW50ZXJpbmdcIGRpclwgJyVmJywlWExlYXZpbmdcIGRpcgordG8geW91ciAnZXJyb3Jmb3JtYXQnIHRvIGhhbmRsZSB0aGUgYWJvdmUgb3V0cHV0LgorCitOb3RlIHRoYXQgVmltIGRvZXNuJ3QgY2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBuYW1lIGluIGEgImxlYXZlIGRpcmVjdG9yeSIKK21lc3NhZ2VzIGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gVGhpcyBpcyB3aHkgeW91IGNvdWxkIGp1c3QgdXNlIHRoZSBtZXNzYWdlCisiTGVhdmluZyBkaXIiLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gU3BlY2lmaWMgZXJyb3IgZmlsZSBmb3JtYXRzCQkJKmVycm9yZm9ybWF0cyoKKworCQkJCQkJKmVycm9yZm9ybWF0LUppa2VzKgorSmlrZXMoVE0pLCBhIHNvdXJjZS10by1ieXRlY29kZSBKYXZhIGNvbXBpbGVyIHB1Ymxpc2hlZCBieSBJQk0gUmVzZWFyY2gsCitwcm9kdWNlcyBzaW1wbGUgbXVsdGktbGluZSBlcnJvciBtZXNzYWdlcy4KKworQW4gJ2Vycm9yZm9ybWF0JyBzdHJpbmcgbWF0Y2hpbmcgdGhlIHByb2R1Y2VkIG1lc3NhZ2VzIGlzIHNob3duIGJlbG93LgorVGhlIGZvbGxvd2luZyBsaW5lcyBjYW4gYmUgcGxhY2VkIGluIHRoZSB1c2VyJ3MgfHZpbXJjfCB0byBvdmVyd3JpdGUgVmltJ3MKK3JlY29nbml6ZWQgZGVmYXVsdCBmb3JtYXRzLCBvciBzZWUgfDpzZXQrPXwgaG93IHRvIGluc3RhbGwgdGhpcyBmb3JtYXQKK2FkZGl0aW9uYWxseSB0byB0aGUgZGVmYXVsdC4gPgorCisgIDpzZXQgZWZtPSVBJWY6JWw6JWM6JSpcXGQ6JSpcXGQ6LAorCVwlQyUqXFxzJXRycm9yOiVtLAorCVwlK0MlKlteOl0ldHJyb3I6JW0sCisJXCVDJSpcXHMldGFybmluZzolbSwKKwlcJUMlbQorPAorSmlrZXMoVE0pIHByb2R1Y2VzIGEgc2luZ2xlLWxpbmUgZXJyb3IgbWVzc2FnZSB3aGVuIGludm9rZWQgd2l0aCB0aGUgb3B0aW9uCisiK0UiLCBhbmQgY2FuIGJlIG1hdGNoZWQgd2l0aCB0aGUgZm9sbG93aW5nOiA+CisKKyAgOnNldCBlZm09JWY6JWw6JXY6JSpcXGQ6JSpcXGQ6JSpcXHMlbQorPAorCQkJCQkJKmVycm9yZm9ybWF0LWphdmFjKgorVGhpcyAnZXJyb3Jmb3JtYXQnIGhhcyBiZWVuIHJlcG9ydGVkIHRvIHdvcmsgd2VsbCBmb3IgamF2YWMsIHdoaWNoIG91dHB1dHMgYQorbGluZSB3aXRoICJeIiB0byBpbmRpY2F0ZSB0aGUgY29sdW1uIG9mIHRoZSBlcnJvcjogPgorICA6c2V0IGVmbT0lQSVmOiVsOlwgJW0sJS1aJXBeLCUtQyUuJSMKK29yOiA+CisgIDpzZXQgZWZtPSVBJWY6JWw6XCAlbSwlK1olcF4sJStDJS4lIywlLUclLiUjCis8CisJCQkJCQkqZXJyb3Jmb3JtYXQtYW50KgorRm9yIGFudCAoaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy8pIHRoZSBhYm92ZSBlcnJvcmZvcm1hdCBoYXMgdG8gYmUgbW9kaWZpZWQKK3RvIGhvbm91ciB0aGUgbGVhZGluZyBbamF2YWNdIGluIGZyb250IG9mIGVhY2ggamF2YWMgb3V0cHV0IGxpbmU6ID4KKyAgOnNldCBlZm09JUFcICUjW2phdmFjXVwgJWY6JWw6XCAlbSwlLVpcICUjW2phdmFjXVwgJXBeLCUtQyUuJSMKKworVGhlICdlcnJvcmZvcm1hdCcgY2FuIGFsc28gYmUgY29uZmlndXJlZCB0byBoYW5kbGUgYW50IHRvZ2V0aGVyIHdpdGggZWl0aGVyCitqYXZhYyBvciBqaWtlcy4gIElmIHlvdSdyZSB1c2luZyBqaWtlcywgeW91IHNob3VsZCB0ZWxsIGFudCB0byB1c2UgamlrZXMnICtFCitjb21tYW5kIGxpbmUgc3dpdGNoIHdoaWNoIGZvcmNlcyBqaWtlcyB0byBnZW5lcmF0ZSBvbmUtbGluZSBlcnJvciBtZXNzYWdlcy4KK1RoaXMgaXMgd2hhdCB0aGUgc2Vjb25kIGxpbmUgKG9mIGEgYnVpbGQueG1sIGZpbGUpIGJlbG93IGRvZXM6ID4KKyAgPHByb3BlcnR5IG5hbWUgPSAiYnVpbGQuY29tcGlsZXIiICAgICAgIHZhbHVlID0gImppa2VzIi8+CisgIDxwcm9wZXJ0eSBuYW1lID0gImJ1aWxkLmNvbXBpbGVyLmVtYWNzIiB2YWx1ZSA9ICJ0cnVlIi8+CisKK1RoZSAnZXJyb3Jmb3JtYXQnIHdoaWNoIGhhbmRsZXMgYW50IHdpdGggYm90aCBqYXZhYyBhbmQgamlrZXMgaXM6ID4KKyAgOnNldCBlZm09XCAlI1tqYXZhY11cICUjJWY6JWw6JWM6JSpcXGQ6JSpcXGQ6XCAldCVbJV46XSUjOiVtLAorCSAgIFwlQVwgJSNbamF2YWNdXCAlZjolbDpcICVtLCUtWlwgJSNbamF2YWNdXCAlcF4sJS1DJS4lIworPAorCQkJCQkJKmVycm9yZm9ybWF0LWphZGUqCitwYXJzaW5nIGphZGUgKHNlZSBodHRwOi8vd3d3LmpjbGFyay5jb20vKSBlcnJvcnMgaXMgc2ltcGxlOiA+CisgIDpzZXQgZWZtPWphZGU6JWY6JWw6JWM6JXQ6JW0KKzwKKwkJCQkJCSplcnJvcmZvcm1hdC1MYVRlWCoKK1RoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBob3cgYW4gJ2Vycm9yZm9ybWF0JyBzdHJpbmcgY2FuIGJlIHNwZWNpZmllZAorZm9yIHRoZSAoTGEpVGVYIHR5cGVzZXR0aW5nIHN5c3RlbSB3aGljaCBkaXNwbGF5cyBlcnJvciBtZXNzYWdlcyBvdmVyCittdWx0aXBsZSBsaW5lcy4gIFRoZSBvdXRwdXQgb2YgIjpjbGlzdCIgYW5kICI6Y2MiIGV0Yy4gY29tbWFuZHMgZGlzcGxheXMKK211bHRpLWxpbmVzIGluIGEgc2luZ2xlIGxpbmUsIGxlYWRpbmcgd2hpdGUgc3BhY2UgaXMgcmVtb3ZlZC4KK0l0IHNob3VsZCBiZSBlYXN5IHRvIGFkb3B0IHRoZSBhYm92ZSBMYVRlWCBlcnJvcmZvcm1hdCB0byBhbnkgY29tcGlsZXIgb3V0cHV0Citjb25zaXN0aW5nIG9mIG11bHRpLWxpbmUgZXJyb3JzLgorCitUaGUgY29tbWFuZHMgY2FuIGJlIHBsYWNlZCBpbiBhIHx2aW1yY3wgZmlsZSBvciBzb21lIG90aGVyIFZpbSBzY3JpcHQgZmlsZSwKK2VnLiBhIHNjcmlwdCBjb250YWluaW5nIExhVGVYIHJlbGF0ZWQgc3R1ZmYgd2hpY2ggaXMgbG9hZGVkIG9ubHkgd2hlbiBlZGl0aW5nCitMYVRlWCBzb3VyY2VzLgorTWFrZSBzdXJlIHRvIGNvcHkgYWxsIGxpbmVzIG9mIHRoZSBleGFtcGxlIChpbiB0aGUgZ2l2ZW4gb3JkZXIpLCBhZnRlcndhcmRzCityZW1vdmUgdGhlIGNvbW1lbnQgbGluZXMuICBGb3IgdGhlICdcJyBub3RhdGlvbiBhdCB0aGUgc3RhcnQgb2Ygc29tZSBsaW5lcyBzZWUKK3xsaW5lLWNvbnRpbnVhdGlvbnwuCisKKwkJRmlyc3QgcHJlcGFyZSAnbWFrZXByZycgc3VjaCB0aGF0IExhVGVYIHdpbGwgcmVwb3J0IG11bHRpcGxlCisJCWVycm9yczsgZG8gbm90IHN0b3Agd2hlbiB0aGUgZmlyc3QgZXJyb3IgaGFzIG9jY3VycmVkOiA+CisgOnNldCBtYWtlcHJnPWxhdGV4XCBcXFxcbm9uc3RvcG1vZGVcIFxcXFxpbnB1dFxceyQqfQorPAorCQlTdGFydCBvZiBtdWx0aS1saW5lIGVycm9yIG1lc3NhZ2VzOiA+CisgOnNldCBlZm09JUUhXCBMYVRlWFwgJXRycm9yOlwgJW0sCisJXCVFIVwgJW0sCis8CQlTdGFydCBvZiBtdWx0aS1saW5lIHdhcm5pbmcgbWVzc2FnZXM7IHRoZSBmaXJzdCB0d28gYWxzbworCQlpbmNsdWRlIHRoZSBsaW5lIG51bWJlci4gTWVhbmluZyBvZiBzb21lIHJlZ3VsYXIgZXhwcmVzc2lvbnM6CisJCSAgLSAiJS4lIyIgICgiLioiKSAgIG1hdGNoZXMgYSAocG9zc2libHkgZW1wdHkpIHN0cmluZworCQkgIC0gIiUqXFxkIiAoIlxkXCsiKSBtYXRjaGVzIGEgbnVtYmVyID4KKwlcJStXTGFUZVhcICUuJSNXYXJuaW5nOlwgJS4lI2xpbmVcICVsJS4lIywKKwlcJStXJS4lI1wgYXRcIGxpbmVzXCAlbC0tJSpcXGQsCisJXCVXTGFUZVhcICUuJSNXYXJuaW5nOlwgJW0sCis8CQlQb3NzaWJsZSBjb250aW51YXRpb25zIG9mIGVycm9yL3dhcm5pbmcgbWVzc2FnZXM7IHRoZSBmaXJzdAorCQlvbmUgYWxzbyBpbmNsdWRlcyB0aGUgbGluZSBudW1iZXI6ID4KKwlcJUNsLiVsXCAlbSwKKwlcJStDXCBcICVtLiwKKwlcJStDJS4lIy0lLiUjLAorCVwlK0MlLiUjW10lLiUjLAorCVwlK0NbXSUuJSMsCisJXCUrQyUuJSMlW3t9XFxdJS4lIywKKwlcJStDPCUuJSM+JS4lIywKKwlcJUNcIFwgJW0sCis8CQlMaW5lcyB0aGF0IG1hdGNoIHRoZSBmb2xsb3dpbmcgcGF0dGVybnMgZG8gbm90IGNvbnRhaW4gYW55CisJCWltcG9ydGFudCBpbmZvcm1hdGlvbjsgZG8gbm90IGluY2x1ZGUgdGhlbSBpbiBtZXNzYWdlczogPgorCVwlLUdTZWVcIHRoZVwgTGFUZVglbSwKKwlcJS1HVHlwZVwgXCBIXCA8cmV0dXJuPiVtLAorCVwlLUdcIC4uLiUuJSMsCisJXCUtRyUuJSNcIChDKVwgJS4lIywKKwlcJS1HKHNlZVwgdGhlXCB0cmFuc2NyaXB0JS4lIyksCis8CQlHZW5lcmFsbHkgZXhjbHVkZSBhbnkgZW1wdHkgb3Igd2hpdGVzcGFjZS1vbmx5IGxpbmUgZnJvbQorCQliZWluZyBkaXNwbGF5ZWQ6ID4KKwlcJS1HXFxzJSMsCis8CQlUaGUgTGFUZVggb3V0cHV0IGxvZyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBuYW1lcyBvZiBlcnJvbmVvdXMKKwkJc291cmNlIGZpbGVzIHBlciBsaW5lOyByYXRoZXIgdGhleSBhcmUgZ2l2ZW4gZ2xvYmFsbHksCisJCWVuY2xvc2VkIGluIHBhcmVudGhlc2VzLgorCQlUaGUgZm9sbG93aW5nIHBhdHRlcm5zIHRyeSB0byBtYXRjaCB0aGVzZSBuYW1lcyBhbmQgc3RvcmUKKwkJdGhlbSBpbiBhbiBpbnRlcm5hbCBzdGFjay4gIFRoZSBwYXR0ZXJucyBwb3NzaWJseSBzY2FuIG92ZXIKKwkJdGhlIHNhbWUgaW5wdXQgbGluZSAob25lIGFmdGVyIGFub3RoZXIpLCB0aGUgdHJhaWxpbmcgIiVyIgorCQljb252ZXJzaW9uIGluZGljYXRlcyB0aGUgInJlc3QiIG9mIHRoZSBsaW5lIHRoYXQgd2lsbCBiZQorCQlwYXJzZWQgaW4gdGhlIG5leHQgZ28gdW50aWwgdGhlIGVuZCBvZiBsaW5lIGlzIHJlYWNoZWQuCisKKwkJT3ZlcnJlYWQgYSBmaWxlIG5hbWUgZW5jbG9zZWQgaW4gJygnLi4uJyknOyBkbyBub3QgcHVzaCBpdAorCQlvbiBhIHN0YWNrIHNpbmNlIHRoZSBmaWxlIGFwcGFyZW50bHkgZG9lcyBub3QgY29udGFpbiBhbnkKKwkJZXJyb3I6ID4KKwlcJStPKCVmKSVyLAorPAkJUHVzaCBhIGZpbGUgbmFtZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5hbWUgaXMgZ2l2ZW4gYWZ0ZXIgJygnOiA+CisJXCUrUCglZiVyLAorCVwlK1BcICVcXD0oJWYlciwKKwlcJStQJSpbXigpXSglZiVyLAorCVwlK1BbJVxcZCVbXigpXSUjKCVmJXIsCis8CQlQb3AgdGhlIGxhc3Qgc3RvcmVkIGZpbGUgbmFtZSB3aGVuIGEgJyknIGlzIHNjYW5uZWQ6ID4KKwlcJStRKSVyLAorCVwlK1ElKlteKCldKSVyLAorCVwlK1FbJVxcZCUqW14oKV0pJXIKKworTm90ZSB0aGF0IGluIHNvbWUgY2FzZXMgZmlsZSBuYW1lcyBpbiB0aGUgTGFUZVggb3V0cHV0IGxvZyBjYW5ub3QgYmUgcGFyc2VkCitwcm9wZXJseS4gIFRoZSBwYXJzZXIgbWlnaHQgaGF2ZSBiZWVuIG1lc3NlZCB1cCBieSB1bmJhbGFuY2VkIHBhcmVudGhlc2VzCit0aGVuLiAgVGhlIGFib3ZlIGV4YW1wbGUgdHJpZXMgdG8gY2F0Y2ggdGhlIG1vc3QgcmVsZXZhbnQgY2FzZXMgb25seS4KK1lvdSBjYW4gY3VzdG9taXplIHRoZSBnaXZlbiBzZXR0aW5nIHRvIHN1aXQgeW91ciBvd24gcHVycG9zZXMsIGZvciBleGFtcGxlLAorYWxsIHRoZSBhbm5veWluZyAiT3ZlcmZ1bGwgLi4uIiB3YXJuaW5ncyBjb3VsZCBiZSBleGNsdWRlZCBmcm9tIGJlaW5nCityZWNvZ25pemVkIGFzIGFuIGVycm9yLgorQWx0ZXJuYXRpdmVseSB0byBmaWx0ZXJpbmcgdGhlIExhVGVYIGNvbXBpbGVyIG91dHB1dCwgaXQgaXMgYWxzbyBwb3NzaWJsZQordG8gZGlyZWN0bHkgcmVhZCB0aGUgKi5sb2cgZmlsZSB0aGF0IGlzIHByb2R1Y2VkIGJ5IHRoZSBbTGFdVGVYIGNvbXBpbGVyLgorVGhpcyBjb250YWlucyBldmVuIG1vcmUgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHBvc3NpYmxlIGVycm9yIGNhdXNlcy4KK0hvd2V2ZXIsIHRvIHByb3Blcmx5IHBhcnNlIHN1Y2ggYSBjb21wbGV4IGZpbGUsIGFuIGV4dGVybmFsIGZpbHRlciBzaG91bGQKK2JlIHVzZWQuICBTZWUgdGhlIGRlc2NyaXB0aW9uIGZ1cnRoZXIgYWJvdmUgaG93IHRvIG1ha2Ugc3VjaCBhIGZpbHRlciBrbm93bgorYnkgVmltLgorCisJCQkJCQkqZXJyb3Jmb3JtYXQtUGVybCoKK0luICRWSU1SVU5USU1FL3Rvb2xzIHlvdSBjYW4gZmluZCB0aGUgZWZtX3BlcmwucGwgc2NyaXB0LCB3aGljaCBmaWx0ZXJzIFBlcmwKK2Vycm9yIG1lc3NhZ2VzIGludG8gYSBmb3JtYXQgdGhhdCBxdWlja2ZpeCBtb2RlIHdpbGwgdW5kZXJzdGFuZC4gIFNlZSB0aGUKK3N0YXJ0IG9mIHRoZSBmaWxlIGFib3V0IGhvdyB0byB1c2UgaXQuCisKKworCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcXVpY2tyZWYudHh0IGIvcnVudGltZS9kb2MvcXVpY2tyZWYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODgyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9xdWlja3JlZi50eHQKQEAgLTAsMCArMSwxMzI1IEBACisqcXVpY2tyZWYudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDA1CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICBRdWljayByZWZlcmVuY2UgZ3VpZGUKKworCQkJCQkJCSAqcXVpY2tyZWYqICpDb250ZW50cyoKKyB0YWcJICBzdWJqZWN0CQkJIHRhZwkgIHN1YmplY3QJfgorfFFfY3R8ICBsaXN0IG9mIGhlbHAgZmlsZXMJCXxRX3JlfAlSZXBlYXRpbmcgY29tbWFuZHMKK3xRX2xyfAltb3Rpb246IExlZnQtcmlnaHQJCXxRX2ttfAlLZXkgbWFwcGluZworfFFfdWR8CW1vdGlvbjogVXAtZG93bgkJCXxRX2FifAlBYmJyZXZpYXRpb25zCit8UV90bXwJbW90aW9uOiBUZXh0IG9iamVjdAkJfFFfb3B8CU9wdGlvbnMKK3xRX3BhfAltb3Rpb246IFBhdHRlcm4gc2VhcmNoZXMJfFFfdXJ8CVVuZG8vUmVkbyBjb21tYW5kcworfFFfbWF8CW1vdGlvbjogTWFya3MJCQl8UV9ldHwJRXh0ZXJuYWwgY29tbWFuZHMKK3xRX3ZtfAltb3Rpb246IFZhcmlvdXMJCQl8UV9xZnwJUXVpY2tmaXggY29tbWFuZHMKK3xRX3RhfAltb3Rpb246IFVzaW5nIHRhZ3MJCXxRX3ZjfAlWYXJpb3VzIGNvbW1hbmRzCit8UV9zY3wJU2Nyb2xsaW5nCQkJfFFfY2V8CUV4OiBDb21tYW5kLWxpbmUgZWRpdGluZworfFFfaW58CWluc2VydDogSW5zZXJ0aW5nIHRleHQJCXxRX3JhfAlFeDogUmFuZ2VzCit8UV9haXwJaW5zZXJ0OiBLZXlzCQkJfFFfZXh8CUV4OiBTcGVjaWFsIGNoYXJhY3RlcnMKK3xRX3NzfAlpbnNlcnQ6IFNwZWNpYWwga2V5cwkJfFFfZWR8CUVkaXRpbmcgYSBmaWxlCit8UV9kaXwJaW5zZXJ0OiBEaWdyYXBocwkJfFFfZmx8CVVzaW5nIHRoZSBhcmd1bWVudCBsaXN0Cit8UV9zaXwJaW5zZXJ0OiBTcGVjaWFsIGluc2VydHMJCXxRX3dxfAlXcml0aW5nIGFuZCBxdWl0dGluZworfFFfZGV8CWNoYW5nZTogRGVsZXRpbmcgdGV4dAkJfFFfc3R8CVN0YXJ0aW5nIFZJTQorfFFfY218CWNoYW5nZTogQ29weWluZyBhbmQgbW92aW5nCXxRX2FjfAlBdXRvbWF0aWMgY29tbWFuZHMKK3xRX2NofAljaGFuZ2U6IENoYW5naW5nIHRleHQJCXxRX3dpfAlNdWx0aS13aW5kb3cgY29tbWFuZHMKK3xRX2NvfAljaGFuZ2U6IENvbXBsZXgJCQl8UV9idXwJQnVmZmVyIGxpc3QgY29tbWFuZHMKK3xRX3ZpfAlWaXN1YWwgbW9kZQkJCXxRX3N5fAlTeW50YXggaGlnaGxpZ2h0aW5nCit8UV90b3wJVGV4dCBvYmplY3RzCQkJfFFfZ3V8CUdVSSBjb21tYW5kcworCQkJCQl8UV9mb3wgIEZvbGRpbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOIGlzIHVzZWQgdG8gaW5kaWNhdGUgYW4gb3B0aW9uYWwgY291bnQgdGhhdCBjYW4gYmUgZ2l2ZW4gYmVmb3JlIHRoZSBjb21tYW5kLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9scioJCUxlZnQtcmlnaHQgbW90aW9ucworCit8aHwJTiAgaAkJbGVmdCAoYWxzbzogQ1RSTC1ILCA8QlM+LCBvciA8TGVmdD4ga2V5KQorfGx8CU4gIGwJCXJpZ2h0IChhbHNvOiA8U3BhY2U+IG9yIDxSaWdodD4ga2V5KQorfDB8CSAgIDAJCXRvIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgbGluZSAoYWxzbzogPEhvbWU+IGtleSkKK3xefAkgICBeCQl0byBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIGluIHRoZSBsaW5lCit8JHwJTiAgJAkJdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBsaW5lIChOLTEgbGluZXMgbG93ZXIpCisJCQkgICAoYWxzbzogPEVuZD4ga2V5KQorfGcwfAlOICBnMAkJdG8gZmlyc3QgY2hhcmFjdGVyIGluIHNjcmVlbiBsaW5lIChkaWZmZXJzIGZyb20gIjAiCisJCQkgICB3aGVuIGxpbmVzIHdyYXApCit8Z158CU4gIGdeCQl0byBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIGluIHNjcmVlbiBsaW5lIChkaWZmZXJzCisJCQkgICBmcm9tICJeIiB3aGVuIGxpbmVzIHdyYXApCit8ZyR8CU4gIGckCQl0byBsYXN0IGNoYXJhY3RlciBpbiBzY3JlZW4gbGluZSAoZGlmZmVycyBmcm9tICIkIgorCQkJICAgd2hlbiBsaW5lcyB3cmFwKQorfGdtfAlOICBnbQkJdG8gbWlkZGxlIG9mIHRoZSBzY3JlZW4gbGluZQorfGJhcnwJTiAgfAkJdG8gY29sdW1uIE4gKGRlZmF1bHQ6IDEpCit8ZnwJTiAgZntjaGFyfQl0byB0aGUgTnRoIG9jY3VycmVuY2Ugb2Yge2NoYXJ9IHRvIHRoZSByaWdodAorfEZ8CU4gIEZ7Y2hhcn0JdG8gdGhlIE50aCBvY2N1cnJlbmNlIG9mIHtjaGFyfSB0byB0aGUgbGVmdAorfHR8CU4gIHR7Y2hhcn0JdGlsbCBiZWZvcmUgdGhlIE50aCBvY2N1cnJlbmNlIG9mIHtjaGFyfSB0byB0aGUgcmlnaHQKK3xUfAlOICBUe2NoYXJ9CXRpbGwgYmVmb3JlIHRoZSBOdGggb2NjdXJyZW5jZSBvZiB7Y2hhcn0gdG8gdGhlIGxlZnQKK3w7fAlOICA7CQlyZXBlYXQgdGhlIGxhc3QgImYiLCAiRiIsICJ0Iiwgb3IgIlQiIE4gdGltZXMKK3wsfAlOICAsCQlyZXBlYXQgdGhlIGxhc3QgImYiLCAiRiIsICJ0Iiwgb3IgIlQiIE4gdGltZXMgaW4KKwkJCSAgIG9wcG9zaXRlIGRpcmVjdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV91ZCoJCVVwLWRvd24gbW90aW9ucworCit8a3wJTiAgawkJdXAgTiBsaW5lcyAoYWxzbzogQ1RSTC1QIGFuZCA8VXA+KQorfGp8CU4gIGoJCWRvd24gTiBsaW5lcyAoYWxzbzogQ1RSTC1KLCBDVFJMLU4sIDxOTD4sIGFuZCA8RG93bj4pCit8LXwJTiAgLQkJdXAgTiBsaW5lcywgb24gdGhlIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIKK3wrfAlOICArCQlkb3duIE4gbGluZXMsIG9uIHRoZSBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIChhbHNvOgorCQkJICAgQ1RSTC1NIGFuZCA8Q1I+KQorfF98CU4gIF8JCWRvd24gTi0xIGxpbmVzLCBvbiB0aGUgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3RlcgorfEd8CU4gIEcJCWdvdG8gbGluZSBOIChkZWZhdWx0OiBsYXN0IGxpbmUpLCBvbiB0aGUgZmlyc3QKKwkJCSAgIG5vbi1ibGFuayBjaGFyYWN0ZXIKK3xnZ3wJTiAgZ2cJCWdvdG8gbGluZSBOIChkZWZhdWx0OiBmaXJzdCBsaW5lKSwgb24gdGhlIGZpcnN0CisJCQkgICBub24tYmxhbmsgY2hhcmFjdGVyCit8TiV8CU4gICUJCWdvdG8gbGluZSBOIHBlcmNlbnRhZ2UgZG93biBpbiB0aGUgZmlsZS4gIE4gbXVzdCBiZQorCQkJICAgZ2l2ZW4sIG90aGVyd2lzZSBpdCBpcyB0aGUgfCV8IGNvbW1hbmQuCit8Z2t8CU4gIGdrCQl1cCBOIHNjcmVlbiBsaW5lcyAoZGlmZmVycyBmcm9tICJrIiB3aGVuIGxpbmUgd3JhcHMpCit8Z2p8CU4gIGdqCQlkb3duIE4gc2NyZWVuIGxpbmVzIChkaWZmZXJzIGZyb20gImoiIHdoZW4gbGluZSB3cmFwcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfdG0qCQlUZXh0IG9iamVjdCBtb3Rpb25zCisKK3x3fAlOICB3CQlOIHdvcmRzIGZvcndhcmQKK3xXfAlOICBXCQlOIGJsYW5rLXNlcGFyYXRlZCB8V09SRHxzIGZvcndhcmQKK3xlfAlOICBlCQlmb3J3YXJkIHRvIHRoZSBlbmQgb2YgdGhlIE50aCB3b3JkCit8RXwJTiAgRQkJZm9yd2FyZCB0byB0aGUgZW5kIG9mIHRoZSBOdGggYmxhbmstc2VwYXJhdGVkIHxXT1JEfAorfGJ8CU4gIGIJCU4gd29yZHMgYmFja3dhcmQKK3xCfAlOICBCCQlOIGJsYW5rLXNlcGFyYXRlZCB8V09SRHxzIGJhY2t3YXJkCit8Z2V8CU4gIGdlCQliYWNrd2FyZCB0byB0aGUgZW5kIG9mIHRoZSBOdGggd29yZAorfGdFfAlOICBnRQkJYmFja3dhcmQgdG8gdGhlIGVuZCBvZiB0aGUgTnRoIGJsYW5rLXNlcGFyYXRlZCB8V09SRHwKKworfCl8CU4gICkJCU4gc2VudGVuY2VzIGZvcndhcmQKK3wofAlOICAoCQlOIHNlbnRlbmNlcyBiYWNrd2FyZAorfH18CU4gIH0JCU4gcGFyYWdyYXBocyBmb3J3YXJkCit8e3wJTiAgewkJTiBwYXJhZ3JhcGhzIGJhY2t3YXJkCit8XV18CU4gIF1dCQlOIHNlY3Rpb25zIGZvcndhcmQsIGF0IHN0YXJ0IG9mIHNlY3Rpb24KK3xbW3wJTiAgW1sJCU4gc2VjdGlvbnMgYmFja3dhcmQsIGF0IHN0YXJ0IG9mIHNlY3Rpb24KK3xdW3wJTiAgXVsJCU4gc2VjdGlvbnMgZm9yd2FyZCwgYXQgZW5kIG9mIHNlY3Rpb24KK3xbXXwJTiAgW10JCU4gc2VjdGlvbnMgYmFja3dhcmQsIGF0IGVuZCBvZiBzZWN0aW9uCit8Wyh8CU4gIFsoCQlOIHRpbWVzIGJhY2sgdG8gdW5jbG9zZWQgJygnCit8W3t8CU4gIFt7CQlOIHRpbWVzIGJhY2sgdG8gdW5jbG9zZWQgJ3snCit8W218CU4gIFttCQlOIHRpbWVzIGJhY2sgdG8gc3RhcnQgb2YgbWV0aG9kIChmb3IgSmF2YSkKK3xbTXwJTiAgW00JCU4gdGltZXMgYmFjayB0byBlbmQgb2YgbWV0aG9kIChmb3IgSmF2YSkKK3xdKXwJTiAgXSkJCU4gdGltZXMgZm9yd2FyZCB0byB1bmNsb3NlZCAnKScKK3xdfXwJTiAgXX0JCU4gdGltZXMgZm9yd2FyZCB0byB1bmNsb3NlZCAnfScKK3xdbXwJTiAgXW0JCU4gdGltZXMgZm9yd2FyZCB0byBzdGFydCBvZiBtZXRob2QgKGZvciBKYXZhKQorfF1NfAlOICBdTQkJTiB0aW1lcyBmb3J3YXJkIHRvIGVuZCBvZiBtZXRob2QgKGZvciBKYXZhKQorfFsjfAlOICBbIwkJTiB0aW1lcyBiYWNrIHRvIHVuY2xvc2VkICIjaWYiIG9yICIjZWxzZSIKK3xdI3wJTiAgXSMJCU4gdGltZXMgZm9yd2FyZCB0byB1bmNsb3NlZCAiI2Vsc2UiIG9yICIjZW5kaWYiCit8W3N0YXJ8CU4gIFsqCQlOIHRpbWVzIGJhY2sgdG8gc3RhcnQgb2YgY29tbWVudCAiLyoiCit8XXN0YXJ8CU4gIF0qCQlOIHRpbWVzIGZvcndhcmQgdG8gZW5kIG9mIGNvbW1lbnQgIiovIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9wYSoJCVBhdHRlcm4gc2VhcmNoZXMKKworfC98CU4gIC97cGF0dGVybn1bL1tvZmZzZXRdXTxDUj4KKwkJCXNlYXJjaCBmb3J3YXJkIGZvciB0aGUgTnRoIG9jY3VycmVuY2Ugb2Yge3BhdHRlcm59Cit8P3wJTiAgP3twYXR0ZXJufVs/W29mZnNldF1dPENSPgorCQkJc2VhcmNoIGJhY2t3YXJkIGZvciB0aGUgTnRoIG9jY3VycmVuY2Ugb2Yge3BhdHRlcm59Cit8LzxDUj58CU4gIC88Q1I+CXJlcGVhdCBsYXN0IHNlYXJjaCwgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uCit8PzxDUj58CU4gID88Q1I+CXJlcGVhdCBsYXN0IHNlYXJjaCwgaW4gdGhlIGJhY2t3YXJkIGRpcmVjdGlvbgorfG58CU4gIG4JCXJlcGVhdCBsYXN0IHNlYXJjaAorfE58CU4gIE4JCXJlcGVhdCBsYXN0IHNlYXJjaCwgaW4gb3Bwb3NpdGUgZGlyZWN0aW9uCit8c3RhcnwJTiAgKgkJc2VhcmNoIGZvcndhcmQgZm9yIHRoZSBpZGVudGlmaWVyIHVuZGVyIHRoZSBjdXJzb3IKK3wjfAlOICAjCQlzZWFyY2ggYmFja3dhcmQgZm9yIHRoZSBpZGVudGlmaWVyIHVuZGVyIHRoZSBjdXJzb3IKK3xnc3RhcnwJTiAgZyoJCWxpa2UgIioiLCBidXQgYWxzbyBmaW5kIHBhcnRpYWwgbWF0Y2hlcworfGcjfAlOICBnIwkJbGlrZSAiIyIsIGJ1dCBhbHNvIGZpbmQgcGFydGlhbCBtYXRjaGVzCit8Z2R8CSAgIGdkCQlnb3RvIGxvY2FsIGRlY2xhcmF0aW9uIG9mIGlkZW50aWZpZXIgdW5kZXIgdGhlIGN1cnNvcgorfGdEfAkgICBnRAkJZ290byBnbG9iYWwgZGVjbGFyYXRpb24gb2YgaWRlbnRpZmllciB1bmRlciB0aGUgY3Vyc29yCisKK3xwYXR0ZXJufAkJU3BlY2lhbCBjaGFyYWN0ZXJzIGluIHNlYXJjaCBwYXR0ZXJucworCisJCQltZWFuaW5nCQkgICAgICBtYWdpYyAgIG5vbWFnaWMJfgorCQltYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyCS4JXC4KKwkJICAgICAgIG1hdGNoZXMgc3RhcnQgb2YgbGluZQleCV4KKwkJCSAgICAgICBtYXRjaGVzIDxFT0w+CSQJJAorCQkgICAgICAgbWF0Y2hlcyBzdGFydCBvZiB3b3JkCVw8CVw8CisJCQkgbWF0Y2hlcyBlbmQgb2Ygd29yZAlcPglcPgorCW1hdGNoZXMgYSBzaW5nbGUgY2hhciBmcm9tIHRoZSByYW5nZQlbYS16XQlcW2Etel0KKyAgICAgIG1hdGNoZXMgYSBzaW5nbGUgY2hhciBub3QgaW4gdGhlIHJhbmdlCVteYS16XQlcW15hLXpdCisJCSAgbWF0Y2hlcyBhbiBpZGVudGlmaWVyIGNoYXIJXGkJXGkKKwkJICAgaWRlbSBidXQgZXhjbHVkaW5nIGRpZ2l0cwlcSQlcSQorCQkgbWF0Y2hlcyBhIGtleXdvcmQgY2hhcmFjdGVyCVxrCVxrCisJCSAgIGlkZW0gYnV0IGV4Y2x1ZGluZyBkaWdpdHMJXEsJXEsKKwkgICAgICAgbWF0Y2hlcyBhIGZpbGUgbmFtZSBjaGFyYWN0ZXIJXGYJXGYKKwkJICAgaWRlbSBidXQgZXhjbHVkaW5nIGRpZ2l0cwlcRglcRgorCSAgICAgICBtYXRjaGVzIGEgcHJpbnRhYmxlIGNoYXJhY3RlcglccAlccAorCQkgICBpZGVtIGJ1dCBleGNsdWRpbmcgZGlnaXRzCVxQCVxQCisJICAgICBtYXRjaGVzIGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCVxzCVxzCisJIG1hdGNoZXMgYSBub24td2hpdGUgc3BhY2UgY2hhcmFjdGVyCVxTCVxTCisKKwkJCSAgICAgICBtYXRjaGVzIDxFc2M+CVxlCVxlCisJCQkgICAgICAgbWF0Y2hlcyA8VGFiPglcdAlcdAorCQkJCW1hdGNoZXMgPENSPglccglccgorCQkJCW1hdGNoZXMgPEJTPglcYglcYgorCisgICAgIG1hdGNoZXMgMCBvciBtb3JlIG9mIHRoZSBwcmVjZWRpbmcgYXRvbQkqCVwqCisgICAgIG1hdGNoZXMgMSBvciBtb3JlIG9mIHRoZSBwcmVjZWRpbmcgYXRvbQlcKwlcKworCW1hdGNoZXMgMCBvciAxIG9mIHRoZSBwcmVjZWRpbmcgYXRvbQlcPQlcPQorCW1hdGNoZXMgMiB0byA1IG9mIHRoZSBwcmVjZWRpbmcgYXRvbQlcezIsNX0gIFx7Miw1fQorCQkgIHNlcGFyYXRlcyB0d28gYWx0ZXJuYXRpdmVzCVx8CVx8CisJCWdyb3VwIGEgcGF0dGVybiBpbnRvIGFuIGF0b20JXChcKQlcKFwpCisKK3xzZWFyY2gtb2Zmc2V0fAkJT2Zmc2V0cyBhbGxvd2VkIGFmdGVyIHNlYXJjaCBjb21tYW5kCisKKyAgICBbbnVtXQlbbnVtXSBsaW5lcyBkb3dud2FyZHMsIGluIGNvbHVtbiAxCisgICAgK1tudW1dCVtudW1dIGxpbmVzIGRvd253YXJkcywgaW4gY29sdW1uIDEKKyAgICAtW251bV0JW251bV0gbGluZXMgdXB3YXJkcywgaW4gY29sdW1uIDEKKyAgICBlWytudW1dCVtudW1dIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBlbmQgb2YgdGhlIG1hdGNoCisgICAgZVstbnVtXQlbbnVtXSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbmQgb2YgdGhlIG1hdGNoCisgICAgc1srbnVtXQlbbnVtXSBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoCisgICAgc1stbnVtXQlbbnVtXSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0IG9mIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2gKKyAgICBiWytudW1dCVtudW1dIGlkZW50aWNhbCB0byBzWytudW1dIGFib3ZlIChtbmVtb25pYzogYmVnaW4pCisgICAgYlstbnVtXQlbbnVtXSBpZGVudGljYWwgdG8gc1stbnVtXSBhYm92ZSAobW5lbW9uaWM6IGJlZ2luKQorICAgIDt7c2VhcmNoLWNvbW1hbmR9CWV4ZWN1dGUge3NlYXJjaC1jb21tYW5kfSBuZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX21hKgkJTWFya3MgYW5kIG1vdGlvbnMKKworfG18CSAgIG17YS16QS1afQltYXJrIGN1cnJlbnQgcG9zaXRpb24gd2l0aCBtYXJrIHthLXpBLVp9Cit8YGF8CSAgIGB7YS16fQlnbyB0byBtYXJrIHthLXp9IHdpdGhpbiBjdXJyZW50IGZpbGUKK3xgQXwJICAgYHtBLVp9CWdvIHRvIG1hcmsge0EtWn0gaW4gYW55IGZpbGUKK3xgMHwJICAgYHswLTl9CWdvIHRvIHRoZSBwb3NpdGlvbiB3aGVyZSBWaW0gd2FzIHByZXZpb3VzbHkgZXhpdGVkCit8YGB8CSAgIGBgCQlnbyB0byB0aGUgcG9zaXRpb24gYmVmb3JlIHRoZSBsYXN0IGp1bXAKK3xgcXVvdGV8ICAgYCIJCWdvIHRvIHRoZSBwb3NpdGlvbiB3aGVuIGxhc3QgZWRpdGluZyB0aGlzIGZpbGUKK3xgW3wJICAgYFsJCWdvIHRvIHRoZSBzdGFydCBvZiB0aGUgcHJldmlvdXNseSBvcGVyYXRlZCBvciBwdXQgdGV4dAorfGBdfAkgICBgXQkJZ28gdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXNseSBvcGVyYXRlZCBvciBwdXQgdGV4dAorfGA8fAkgICBgPAkJZ28gdG8gdGhlIHN0YXJ0IG9mIHRoZSAocHJldmlvdXMpIFZpc3VhbCBhcmVhCit8YD58CSAgIGA+CQlnbyB0byB0aGUgZW5kIG9mIHRoZSAocHJldmlvdXMpIFZpc3VhbCBhcmVhCit8YC58CSAgIGAuCQlnbyB0byB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgY2hhbmdlIGluIHRoaXMgZmlsZQorfCd8CSAgICd7YS16QS1aMC05W10nIjw+Ln0KKwkJCXNhbWUgYXMgYCwgYnV0IG9uIHRoZSBmaXJzdCBub24tYmxhbmsgaW4gdGhlIGxpbmUKK3w6bWFya3N8ICA6bWFya3MJcHJpbnQgdGhlIGFjdGl2ZSBtYXJrcworfENUUkwtT3wgIE4gIENUUkwtTwlnbyB0byBOdGggb2xkZXIgcG9zaXRpb24gaW4ganVtcCBsaXN0Cit8Q1RSTC1JfCAgTiAgQ1RSTC1JCWdvIHRvIE50aCBuZXdlciBwb3NpdGlvbiBpbiBqdW1wIGxpc3QKK3w6anV8CSAgOmp1W21wc10JcHJpbnQgdGhlIGp1bXAgbGlzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV92bSoJCVZhcmlvdXMgbW90aW9ucworCit8JXwJICAgJQkJZmluZCB0aGUgbmV4dCBicmFjZSwgYnJhY2tldCwgY29tbWVudCwgb3IgIiNpZiIvCisJCQkgICAiI2Vsc2UiLyIjZW5kaWYiIGluIHRoaXMgbGluZSBhbmQgZ28gdG8gaXRzIG1hdGNoCit8SHwJTiAgSAkJZ28gdG8gdGhlIE50aCBsaW5lIGluIHRoZSB3aW5kb3csIG9uIHRoZSBmaXJzdAorCQkJICAgbm9uLWJsYW5rCit8TXwJICAgTQkJZ28gdG8gdGhlIG1pZGRsZSBsaW5lIGluIHRoZSB3aW5kb3csIG9uIHRoZSBmaXJzdAorCQkJICAgbm9uLWJsYW5rCit8THwJTiAgTAkJZ28gdG8gdGhlIE50aCBsaW5lIGZyb20gdGhlIGJvdHRvbSwgb24gdGhlIGZpcnN0CisJCQkgICBub24tYmxhbmsKKworfGdvfAlOICBnbwkJCWdvIHRvIE50aCBieXRlIGluIHRoZSBidWZmZXIKK3w6Z298CTpbcmFuZ2VdZ29bdG9dIFtvZmZdCWdvIHRvIFtvZmZdIGJ5dGUgaW4gdGhlIGJ1ZmZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV90YSoJCVVzaW5nIHRhZ3MKKworfDp0YXwJICAgOnRhW2ddWyFdIHt0YWd9CUp1bXAgdG8gdGFnIHt0YWd9Cit8OnRhfAkgICA6W2NvdW50XXRhW2ddWyFdCUp1bXAgdG8gW2NvdW50XSd0aCBuZXdlciB0YWcgaW4gdGFnIGxpc3QKK3xDVFJMLV18ICAgICAgQ1RSTC1dCQlKdW1wIHRvIHRoZSB0YWcgdW5kZXIgY3Vyc29yLCB1bmxlc3MgY2hhbmdlcworCQkJCSAgIGhhdmUgYmVlbiBtYWRlCit8OnRzfAkgICA6dHNbZWxlY3RdWyFdIFt0YWddCUxpc3QgbWF0Y2hpbmcgdGFncyBhbmQgc2VsZWN0IG9uZSB0byBqdW1wIHRvCit8OnRqdW1wfCAgIDp0alt1bXBdWyFdIFt0YWddCUp1bXAgdG8gdGFnIFt0YWddIG9yIHNlbGVjdCBmcm9tIGxpc3Qgd2hlbgorCQkJCSAgIHRoZXJlIGFyZSBtdWx0aXBsZSBtYXRjaGVzCisKK3w6dGFnc3wJICAgOnRhZ3MJCVByaW50IHRhZyBsaXN0Cit8Q1RSTC1UfCAgIE4gIENUUkwtVAkJSnVtcCBiYWNrIGZyb20gTnRoIG9sZGVyIHRhZyBpbiB0YWcgbGlzdAorfDpwb3wJICAgOltjb3VudF1wb1twXVshXQlKdW1wIGJhY2sgZnJvbSBbY291bnRdJ3RoIG9sZGVyIHRhZyBpbiB0YWcgbGlzdAorfDp0bmV4dHwgICA6W2NvdW50XXRuW2V4dF1bIV0JSnVtcCB0byBbY291bnRdJ3RoIG5leHQgbWF0Y2hpbmcgdGFnCit8OnRwfCAgICAgIDpbY291bnRddHBbcmV2aW91c11bIV0gSnVtcCB0byBbY291bnRdJ3RoIHByZXZpb3VzIG1hdGNoaW5nIHRhZworfDp0cnwJICAgOltjb3VudF10cltld2luZF1bIV0gSnVtcCB0byBbY291bnRdJ3RoIG1hdGNoaW5nIHRhZworfDp0bHwJICAgOnRsW2FzdF1bIV0JCUp1bXAgdG8gbGFzdCBtYXRjaGluZyB0YWcKKworfDpwdGFnfAkgICA6cHRbYWddIHt0YWd9CW9wZW4gYSBwcmV2aWV3IHdpbmRvdyB0byBzaG93IHRhZyB7dGFnfQorfENUUkwtV199fCAgICAgQ1RSTC1XIH0JCWxpa2UgQ1RSTC1dIGJ1dCBzaG93IHRhZyBpbiBwcmV2aWV3IHdpbmRvdworfDpwdHN8ICAgICA6cHRzW2VsZWN0XQkJbGlrZSAiOnRzZWxlY3QiIGJ1dCBzaG93IHRhZyBpbiBwcmV2aWV3IHdpbmRvdworfDpwdGp1bXB8ICA6cHRqW3VtcF0JCWxpa2UgIjp0anVtcCIgYnV0IHNob3cgdGFnIGluIHByZXZpZXcgd2luZG93Cit8OnBjbG9zZXwgIDpwY1tsb3NlXQkJY2xvc2UgdGFnIHByZXZpZXcgd2luZG93Cit8Q1RSTC1XX3p8ICAgICBDVFJMLVcgegkJY2xvc2UgdGFnIHByZXZpZXcgd2luZG93CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3NjKgkJU2Nyb2xsaW5nCisKK3xDVFJMLUV8CU4gIENUUkwtRQl3aW5kb3cgTiBsaW5lcyBkb3dud2FyZHMgKGRlZmF1bHQ6IDEpCit8Q1RSTC1EfAlOICBDVFJMLUQJd2luZG93IE4gbGluZXMgRG93bndhcmRzIChkZWZhdWx0OiAxLzIgd2luZG93KQorfENUUkwtRnwJTiAgQ1RSTC1GCXdpbmRvdyBOIHBhZ2VzIEZvcndhcmRzIChkb3dud2FyZHMpCit8Q1RSTC1ZfAlOICBDVFJMLVkJd2luZG93IE4gbGluZXMgdXB3YXJkcyAoZGVmYXVsdDogMSkKK3xDVFJMLVV8CU4gIENUUkwtVQl3aW5kb3cgTiBsaW5lcyBVcHdhcmRzIChkZWZhdWx0OiAxLzIgd2luZG93KQorfENUUkwtQnwJTiAgQ1RSTC1CCXdpbmRvdyBOIHBhZ2VzIEJhY2t3YXJkcyAodXB3YXJkcykKK3x6PENSPnwJCSAgIHo8Q1I+IG9yIHp0CXJlZHJhdywgY3VycmVudCBsaW5lIGF0IHRvcCBvZiB3aW5kb3cKK3x6LnwJCSAgIHouCSBvciB6eglyZWRyYXcsIGN1cnJlbnQgbGluZSBhdCBjZW50ZXIgb2Ygd2luZG93Cit8ei18CQkgICB6LQkgb3IgemIJcmVkcmF3LCBjdXJyZW50IGxpbmUgYXQgYm90dG9tIG9mIHdpbmRvdworCitUaGVzZSBvbmx5IHdvcmsgd2hlbiAnd3JhcCcgaXMgb2ZmOgorfHpofAkJTiAgemgJCXNjcm9sbCBzY3JlZW4gTiBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodAorfHpsfAkJTiAgemwJCXNjcm9sbCBzY3JlZW4gTiBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0Cit8ekh8CQlOICB6SAkJc2Nyb2xsIHNjcmVlbiBoYWxmIGEgc2NyZWVud2lkdGggdG8gdGhlIHJpZ2h0Cit8ekx8CQlOICB6TAkJc2Nyb2xsIHNjcmVlbiBoYWxmIGEgc2NyZWVud2lkdGggdG8gdGhlIGxlZnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfaW4qCQlJbnNlcnRpbmcgdGV4dAorCit8YXwJTiAgYQlhcHBlbmQgdGV4dCBhZnRlciB0aGUgY3Vyc29yIChOIHRpbWVzKQorfEF8CU4gIEEJYXBwZW5kIHRleHQgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSAoTiB0aW1lcykKK3xpfAlOICBpCWluc2VydCB0ZXh0IGJlZm9yZSB0aGUgY3Vyc29yIChOIHRpbWVzKSAoYWxzbzogPEluc2VydD4pCit8SXwJTiAgSQlpbnNlcnQgdGV4dCBiZWZvcmUgdGhlIGZpcnN0IG5vbi1ibGFuayBpbiB0aGUgbGluZSAoTiB0aW1lcykKK3xnSXwJTiAgZ0kJaW5zZXJ0IHRleHQgaW4gY29sdW1uIDEgKE4gdGltZXMpCit8b3wJTiAgbwlvcGVuIGEgbmV3IGxpbmUgYmVsb3cgdGhlIGN1cnJlbnQgbGluZSwgYXBwZW5kIHRleHQgKE4gdGltZXMpCit8T3wJTiAgTwlvcGVuIGEgbmV3IGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZSwgYXBwZW5kIHRleHQgKE4gdGltZXMpCit8OnN0YXJ0aW5zZXJ0fCAgOnN0YXJbdGluc2VydF1bIV0gIHN0YXJ0IEluc2VydCBtb2RlLCBhcHBlbmQgd2hlbiBbIV0gdXNlZAorCitpbiBWaXN1YWwgYmxvY2sgbW9kZToKK3x2X2JfSXwgICAgSQlpbnNlcnQgdGhlIHNhbWUgdGV4dCBpbiBmcm9udCBvZiBhbGwgdGhlIHNlbGVjdGVkIGxpbmVzCit8dl9iX0F8CSAgIEEJYXBwZW5kIHRoZSBzYW1lIHRleHQgYWZ0ZXIgYWxsIHRoZSBzZWxlY3RlZCBsaW5lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9haSoJCUluc2VydCBtb2RlIGtleXMKKworfGluc2VydC1pbmRleHwJYWxwaGFiZXRpY2FsIGluZGV4IG9mIEluc2VydCBtb2RlIGNvbW1hbmRzCisKK2xlYXZpbmcgSW5zZXJ0IG1vZGU6Cit8aV88RXNjPnwJPEVzYz4JCSAgZW5kIEluc2VydCBtb2RlLCBiYWNrIHRvIE5vcm1hbCBtb2RlCit8aV9DVFJMLUN8CUNUUkwtQwkJICBsaWtlIDxFc2M+LCBidXQgZG8gbm90IHVzZSBhbiBhYmJyZXZpYXRpb24KK3xpX0NUUkwtT3wJQ1RSTC1PIHtjb21tYW5kfSAgZXhlY3V0ZSB7Y29tbWFuZH0gYW5kIHJldHVybiB0byBJbnNlcnQgbW9kZQorCittb3ZpbmcgYXJvdW5kOgorfGlfPFVwPnwJY3Vyc29yIGtleXMJICBtb3ZlIGN1cnNvciBsZWZ0L3JpZ2h0L3VwL2Rvd24KK3xpXzxTLUxlZnQ+fAlzaGlmdC1sZWZ0L3JpZ2h0ICBvbmUgd29yZCBsZWZ0L3JpZ2h0Cit8aV88Uy1VcD58CXNoaWZ0LXVwL2Rvd24JICBvbmUgc2NyZWVuZnVsIGJhY2t3YXJkL2ZvcndhcmQKK3xpXzxFbmQ+fAk8RW5kPgkJICBjdXJzb3IgYWZ0ZXIgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUKK3xpXzxIb21lPnwJPEhvbWU+CQkgIGN1cnNvciB0byBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfc3MqCQlTcGVjaWFsIGtleXMgaW4gSW5zZXJ0IG1vZGUKKworfGlfQ1RSTC1WfAlDVFJMLVYge2NoYXJ9Li4JICBpbnNlcnQgY2hhcmFjdGVyIGxpdGVyYWxseSwgb3IgZW50ZXIgZGVjaW1hbAorCQkJCSAgICAgYnl0ZSB2YWx1ZQorfGlfPE5MPnwJPE5MPiBvciA8Q1I+IG9yIENUUkwtTSBvciBDVFJMLUoKKwkJCQkgIGJlZ2luIG5ldyBsaW5lCit8aV9DVFJMLUV8CUNUUkwtRQkJICBpbnNlcnQgdGhlIGNoYXJhY3RlciBmcm9tIGJlbG93IHRoZSBjdXJzb3IKK3xpX0NUUkwtWXwJQ1RSTC1ZCQkgIGluc2VydCB0aGUgY2hhcmFjdGVyIGZyb20gYWJvdmUgdGhlIGN1cnNvcgorCit8aV9DVFJMLUF8CUNUUkwtQQkJICBpbnNlcnQgcHJldmlvdXNseSBpbnNlcnRlZCB0ZXh0Cit8aV9DVFJMLUB8CUNUUkwtQAkJICBpbnNlcnQgcHJldmlvdXNseSBpbnNlcnRlZCB0ZXh0IGFuZCBzdG9wCisJCQkJICAgICBJbnNlcnQgbW9kZQorfGlfQ1RSTC1SfAlDVFJMLVIgezAtOWEteiUjOi4tPSJ9ICBpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIKKworfGlfQ1RSTC1OfAlDVFJMLU4JCSAgaW5zZXJ0IG5leHQgbWF0Y2ggb2YgaWRlbnRpZmllciBiZWZvcmUgdGhlCisJCQkJICAgICBjdXJzb3IKK3xpX0NUUkwtUHwJQ1RSTC1QCQkgIGluc2VydCBwcmV2aW91cyBtYXRjaCBvZiBpZGVudGlmaWVyIGJlZm9yZQorCQkJCSAgICAgdGhlIGN1cnNvcgorfGlfQ1RSTC1YfAlDVFJMLVggLi4uCSAgY29tcGxldGUgdGhlIHdvcmQgYmVmb3JlIHRoZSBjdXJzb3IgaW4KKwkJCQkgICAgIHZhcmlvdXMgd2F5cworCit8aV88QlM+fAk8QlM+IG9yIENUUkwtSAkgIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY3Vyc29yCit8aV88RGVsPnwJPERlbD4JCSAgZGVsZXRlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvcgorfGlfQ1RSTC1XfAlDVFJMLVcJCSAgZGVsZXRlIHdvcmQgYmVmb3JlIHRoZSBjdXJzb3IKK3xpX0NUUkwtVXwJQ1RSTC1VCQkgIGRlbGV0ZSBhbGwgZW50ZXJlZCBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50CisJCQkJICAgICBsaW5lCit8aV9DVFJMLVR8CUNUUkwtVAkJICBpbnNlcnQgb25lIHNoaWZ0d2lkdGggb2YgaW5kZW50IGluIGZyb250IG9mCisJCQkJICAgICAgIHRoZSBjdXJyZW50IGxpbmUKK3xpX0NUUkwtRHwJQ1RSTC1ECQkgIGRlbGV0ZSBvbmUgc2hpZnR3aWR0aCBvZiBpbmRlbnQgaW4gZnJvbnQgb2YKKwkJCQkgICAgIHRoZSBjdXJyZW50IGxpbmUKK3xpXzBfQ1RSTC1EfAkwIENUUkwtRAkgIGRlbGV0ZSBhbGwgaW5kZW50IGluIHRoZSBjdXJyZW50IGxpbmUKK3xpX15fQ1RSTC1EfAleIENUUkwtRAkgIGRlbGV0ZSBhbGwgaW5kZW50IGluIHRoZSBjdXJyZW50IGxpbmUsCisJCQkJICAgICByZXN0b3JlIGluZGVudCBpbiBuZXh0IGxpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfZGkqCQlEaWdyYXBocworCit8OmRpZ3wJICAgOmRpZ1tyYXBoc10JCXNob3cgY3VycmVudCBsaXN0IG9mIGRpZ3JhcGhzCit8OmRpZ3wJICAgOmRpZ1tyYXBoc10ge2NoYXIxfXtjaGFyMn0ge251bWJlcn0gLi4uCisJCQkJYWRkIGRpZ3JhcGgocykgdG8gdGhlIGxpc3QKKworSW4gSW5zZXJ0IG9yIENvbW1hbmQtbGluZSBtb2RlOgorfGlfQ1RSTC1LfAlDVFJMLUsge2NoYXIxfSB7Y2hhcjJ9CisJCQkJICBlbnRlciBkaWdyYXBoCit8aV9kaWdyYXBofAl7Y2hhcjF9IDxCUz4ge2NoYXIyfQorCQkJCSAgZW50ZXIgZGlncmFwaCBpZiAnZGlncmFwaCcgb3B0aW9uIHNldAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9zaSoJCVNwZWNpYWwgaW5zZXJ0cworCit8OnJ8CSAgIDpyIFtmaWxlXQkgICBpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIFtmaWxlXSBiZWxvdyB0aGUgY3Vyc29yCit8OnIhfAkgICA6ciEge2NvbW1hbmR9ICAgaW5zZXJ0IHRoZSBzdGFuZGFyZCBvdXRwdXQgb2Yge2NvbW1hbmR9IGJlbG93IHRoZQorCQkJICAgICAgY3Vyc29yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2RlKgkJRGVsZXRpbmcgdGV4dAorCit8eHwJTiAgeAkJZGVsZXRlIE4gY2hhcmFjdGVycyB1bmRlciBhbmQgYWZ0ZXIgdGhlIGN1cnNvcgorfDxEZWw+fCBOICA8RGVsPglkZWxldGUgTiBjaGFyYWN0ZXJzIHVuZGVyIGFuZCBhZnRlciB0aGUgY3Vyc29yCit8WHwJTiAgWAkJZGVsZXRlIE4gY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnNvcgorfGR8CU4gIGR7bW90aW9ufQlkZWxldGUgdGhlIHRleHQgdGhhdCBpcyBtb3ZlZCBvdmVyIHdpdGgge21vdGlvbn0KK3x2X2R8CXt2aXN1YWx9ZAlkZWxldGUgdGhlIGhpZ2hsaWdodGVkIHRleHQKK3xkZHwJTiAgZGQJCWRlbGV0ZSBOIGxpbmVzCit8RHwJTiAgRAkJZGVsZXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgKGFuZCBOLTEgbW9yZSBsaW5lcykKK3xKfAlOICBKCQlqb2luIE4tMSBsaW5lcyAoZGVsZXRlIDxFT0w+cykKK3x2X0p8CXt2aXN1YWx9Sglqb2luIHRoZSBoaWdobGlnaHRlZCBsaW5lcworfGdKfAlOICBnSgkJbGlrZSAiSiIsIGJ1dCB3aXRob3V0IGluc2VydGluZyBzcGFjZXMKK3x2X2dKfAl7dmlzdWFsfWdKCWxpa2UgInt2aXN1YWx9SiIsIGJ1dCB3aXRob3V0IGluc2VydGluZyBzcGFjZXMKK3w6ZHwJOltyYW5nZV1kIFt4XQlkZWxldGUgW3JhbmdlXSBsaW5lcyBbaW50byByZWdpc3RlciB4XQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9jbSoJCUNvcHlpbmcgYW5kIG1vdmluZyB0ZXh0CisKK3xxdW90ZXwJICAie2NoYXJ9CXVzZSByZWdpc3RlciB7Y2hhcn0gZm9yIHRoZSBuZXh0IGRlbGV0ZSwgeWFuaywgb3IgcHV0Cit8OnJlZ3wJICA6cmVnCQlzaG93IHRoZSBjb250ZW50cyBvZiBhbGwgcmVnaXN0ZXJzCit8OnJlZ3wJICA6cmVnIHthcmd9CXNob3cgdGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVycyBtZW50aW9uZWQgaW4ge2FyZ30KK3x5fAkgIE4gIHl7bW90aW9ufQl5YW5rIHRoZSB0ZXh0IG1vdmVkIG92ZXIgd2l0aCB7bW90aW9ufSBpbnRvIGEgcmVnaXN0ZXIKK3x2X3l8CSAgICAge3Zpc3VhbH15CXlhbmsgdGhlIGhpZ2hsaWdodGVkIHRleHQgaW50byBhIHJlZ2lzdGVyCit8eXl8CSAgTiAgeXkJCXlhbmsgTiBsaW5lcyBpbnRvIGEgcmVnaXN0ZXIKK3xZfAkgIE4gIFkJCXlhbmsgTiBsaW5lcyBpbnRvIGEgcmVnaXN0ZXIKK3xwfAkgIE4gIHAJCXB1dCBhIHJlZ2lzdGVyIGFmdGVyIHRoZSBjdXJzb3IgcG9zaXRpb24gKE4gdGltZXMpCit8UHwJICBOICBQCQlwdXQgYSByZWdpc3RlciBiZWZvcmUgdGhlIGN1cnNvciBwb3NpdGlvbiAoTiB0aW1lcykKK3xdcHwJICBOICBdcAkJbGlrZSBwLCBidXQgYWRqdXN0IGluZGVudCB0byBjdXJyZW50IGxpbmUKK3xbcHwJICBOICBbcAkJbGlrZSBQLCBidXQgYWRqdXN0IGluZGVudCB0byBjdXJyZW50IGxpbmUKK3xncHwJICBOICBncAkJbGlrZSBwLCBidXQgbGVhdmUgY3Vyc29yIGFmdGVyIHRoZSBuZXcgdGV4dAorfGdQfAkgIE4gIGdQCQlsaWtlIFAsIGJ1dCBsZWF2ZSBjdXJzb3IgYWZ0ZXIgdGhlIG5ldyB0ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2NoKgkJQ2hhbmdpbmcgdGV4dAorCit8cnwJICBOICBye2NoYXJ9CXJlcGxhY2UgTiBjaGFyYWN0ZXJzIHdpdGgge2NoYXJ9Cit8Z3J8CSAgTiAgZ3J7Y2hhcn0JcmVwbGFjZSBOIGNoYXJhY3RlcnMgd2l0aG91dCBhZmZlY3RpbmcgbGF5b3V0Cit8UnwJICBOICBSCQllbnRlciBSZXBsYWNlIG1vZGUgKHJlcGVhdCB0aGUgZW50ZXJlZCB0ZXh0IE4gdGltZXMpCit8Z1J8CSAgTiAgZ1IJCWVudGVyIHZpcnR1YWwgUmVwbGFjZSBtb2RlOiBMaWtlIFJlcGxhY2UgbW9kZSBidXQKKwkJCSAgIHdpdGhvdXQgYWZmZWN0aW5nIGxheW91dAorfHZfYl9yfAkgIHt2aXN1YWx9cntjaGFyfQorCQkJaW4gVmlzdWFsIGJsb2NrIG1vZGU6IFJlcGxhY2UgZWFjaCBjaGFyIG9mIHRoZQorCQkJICAgc2VsZWN0ZWQgdGV4dCB3aXRoIHtjaGFyfQorCisJKGNoYW5nZSA9IGRlbGV0ZSB0ZXh0IGFuZCBlbnRlciBJbnNlcnQgbW9kZSkKK3xjfAkgIE4gIGN7bW90aW9ufQljaGFuZ2UgdGhlIHRleHQgdGhhdCBpcyBtb3ZlZCBvdmVyIHdpdGgge21vdGlvbn0KK3x2X2N8CSAgICAge3Zpc3VhbH1jCWNoYW5nZSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dAorfGNjfAkgIE4gIGNjCQljaGFuZ2UgTiBsaW5lcworfFN8CSAgTiAgUwkJY2hhbmdlIE4gbGluZXMKK3xDfAkgIE4gIEMJCWNoYW5nZSB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIChhbmQgTi0xIG1vcmUgbGluZXMpCit8c3wJICBOICBzCQljaGFuZ2UgTiBjaGFyYWN0ZXJzCit8dl9iX2N8CSAgICAge3Zpc3VhbH1jCWluIFZpc3VhbCBibG9jayBtb2RlOiBDaGFuZ2UgZWFjaCBvZiB0aGUgc2VsZWN0ZWQKKwkJCSAgIGxpbmVzIHdpdGggdGhlIGVudGVyZWQgdGV4dAorfHZfYl9DfAkgICAgIHt2aXN1YWx9QwlpbiBWaXN1YWwgYmxvY2sgbW9kZTogQ2hhbmdlIGVhY2ggb2YgdGhlIHNlbGVjdGVkCisJCQkgICBsaW5lcyB1bnRpbCBlbmQtb2YtbGluZSB3aXRoIHRoZSBlbnRlcmVkIHRleHQKKworfH58CSAgTiAgfgkJc3dpdGNoIGNhc2UgZm9yIE4gY2hhcmFjdGVycyBhbmQgYWR2YW5jZSBjdXJzb3IKK3x2X358CSAgICAge3Zpc3VhbH1+CXN3aXRjaCBjYXNlIGZvciBoaWdobGlnaHRlZCB0ZXh0Cit8dl91fAkgICAgIHt2aXN1YWx9dQltYWtlIGhpZ2hsaWdodGVkIHRleHQgbG93ZXJjYXNlCit8dl9VfAkgICAgIHt2aXN1YWx9VQltYWtlIGhpZ2hsaWdodGVkIHRleHQgdXBwZXJjYXNlCit8Z358CSAgICAgZ357bW90aW9ufSBzd2l0Y2ggY2FzZSBmb3IgdGhlIHRleHQgdGhhdCBpcyBtb3ZlZCBvdmVyIHdpdGgKKwkJCSAgIHttb3Rpb259Cit8Z3V8CSAgICAgZ3V7bW90aW9ufSBtYWtlIHRoZSB0ZXh0IHRoYXQgaXMgbW92ZWQgb3ZlciB3aXRoIHttb3Rpb259CisJCQkgICBsb3dlcmNhc2UKK3xnVXwJICAgICBnVXttb3Rpb259IG1ha2UgdGhlIHRleHQgdGhhdCBpcyBtb3ZlZCBvdmVyIHdpdGgge21vdGlvbn0KKwkJCSAgIHVwcGVyY2FzZQorfHZfZz98CSAgICAge3Zpc3VhbH1nPyBwZXJmb3JtIHJvdDEzIGVuY29kaW5nIG9uIGhpZ2hsaWdodGVkIHRleHQKK3xnP3wJICAgICBnP3ttb3Rpb259IHBlcmZvcm0gcm90MTMgZW5jb2Rpbmcgb24gdGhlIHRleHQgdGhhdCBpcyBtb3ZlZCBvdmVyCisJCQkgICB3aXRoIHttb3Rpb259CisKK3xDVFJMLUF8ICBOICBDVFJMLUEJYWRkIE4gdG8gdGhlIG51bWJlciBhdCBvciBhZnRlciB0aGUgY3Vyc29yCit8Q1RSTC1YfCAgTiAgQ1RSTC1YCXN1YnRyYWN0IE4gZnJvbSB0aGUgbnVtYmVyIGF0IG9yIGFmdGVyIHRoZSBjdXJzb3IKKworfDx8CSAgTiAgPHttb3Rpb259CW1vdmUgdGhlIGxpbmVzIHRoYXQgYXJlIG1vdmVkIG92ZXIgd2l0aCB7bW90aW9ufSBvbmUKKwkJCSAgIHNoaWZ0d2lkdGggbGVmdAorfDw8fAkgIE4gIDw8CQltb3ZlIE4gbGluZXMgb25lIHNoaWZ0d2lkdGggbGVmdAorfD58CSAgTiAgPnttb3Rpb259CW1vdmUgdGhlIGxpbmVzIHRoYXQgYXJlIG1vdmVkIG92ZXIgd2l0aCB7bW90aW9ufSBvbmUKKwkJCSAgIHNoaWZ0d2lkdGggcmlnaHQKK3w+PnwJICBOICA+PgkJbW92ZSBOIGxpbmVzIG9uZSBzaGlmdHdpZHRoIHJpZ2h0Cit8Z3F8CSAgTiAgZ3F7bW90aW9ufQlmb3JtYXQgdGhlIGxpbmVzIHRoYXQgYXJlIG1vdmVkIG92ZXIgd2l0aCB7bW90aW9ufSB0bworCQkJICAgJ3RleHR3aWR0aCcgbGVuZ3RoCit8OmNlfAkgIDpbcmFuZ2VdY2VbbnRlcl0gW3dpZHRoXQorCQkJY2VudGVyIHRoZSBsaW5lcyBpbiBbcmFuZ2VdCit8OmxlfAkgIDpbcmFuZ2VdbGVbZnRdIFtpbmRlbnRdCisJCQlsZWZ0LWFsaWduIHRoZSBsaW5lcyBpbiBbcmFuZ2VdICh3aXRoIFtpbmRlbnRdKQorfDpyaXwJICA6W3JhbmdlXXJpW2dodF0gW3dpZHRoXQorCQkJcmlnaHQtYWxpZ24gdGhlIGxpbmVzIGluIFtyYW5nZV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfY28qCQlDb21wbGV4IGNoYW5nZXMKKworfCF8CSAgIE4gICF7bW90aW9ufXtjb21tYW5kfTxDUj4KKwkJCWZpbHRlciB0aGUgbGluZXMgdGhhdCBhcmUgbW92ZWQgb3ZlciB0aHJvdWdoIHtjb21tYW5kfQorfCEhfAkgICBOICAhIXtjb21tYW5kfTxDUj4KKwkJCWZpbHRlciBOIGxpbmVzIHRocm91Z2gge2NvbW1hbmR9Cit8dl8hfAkgICAgICB7dmlzdWFsfSF7Y29tbWFuZH08Q1I+CisJCQlmaWx0ZXIgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIHRocm91Z2gge2NvbW1hbmR9Cit8OnJhbmdlIXwgIDpbcmFuZ2VdISB7Y29tbWFuZH08Q1I+CisJCQlmaWx0ZXIgW3JhbmdlXSBsaW5lcyB0aHJvdWdoIHtjb21tYW5kfQorfD18CSAgIE4gID17bW90aW9ufQorCQkJZmlsdGVyIHRoZSBsaW5lcyB0aGF0IGFyZSBtb3ZlZCBvdmVyIHRocm91Z2ggJ2VxdWFscHJnJworfD09fAkgICBOICA9PQlmaWx0ZXIgTiBsaW5lcyB0aHJvdWdoICdlcXVhbHByZycKK3x2Xz18CSAgICAgIHt2aXN1YWx9PQorCQkJZmlsdGVyIHRoZSBoaWdobGlnaHRlZCBsaW5lcyB0aHJvdWdoICdlcXVhbHByZycKK3w6c3wJICAgOltyYW5nZV1zW3Vic3RpdHV0ZV0ve3BhdHRlcm59L3tzdHJpbmd9L1tnXVtjXQorCQkJc3Vic3RpdHV0ZSB7cGF0dGVybn0gYnkge3N0cmluZ30gaW4gW3JhbmdlXSBsaW5lczsKKwkJCSAgIHdpdGggW2ddLCByZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiB7cGF0dGVybn07CisJCQkgICB3aXRoIFtjXSwgY29uZmlybSBlYWNoIHJlcGxhY2VtZW50Cit8OnN8CSAgIDpbcmFuZ2Vdc1t1YnN0aXR1dGVdIFtnXVtjXQorCQkJcmVwZWF0IHByZXZpb3VzICI6cyIgd2l0aCBuZXcgcmFuZ2UgYW5kIG9wdGlvbnMKK3wmfAkgICAgICAmCQlSZXBlYXQgcHJldmlvdXMgIjpzIiBvbiBjdXJyZW50IGxpbmUgd2l0aG91dCBvcHRpb25zCit8OnJldHwJICAgOltyYW5nZV1yZXRbYWJdWyFdIFt0YWJzdG9wXQorCQkJc2V0ICd0YWJzdG9wJyB0byBuZXcgdmFsdWUgYW5kIGFkanVzdCB3aGl0ZSBzcGFjZQorCQkJICAgYWNjb3JkaW5nbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfdmkqCQlWaXN1YWwgbW9kZQorCit8dmlzdWFsLWluZGV4fAlsaXN0IG9mIFZpc3VhbCBtb2RlIGNvbW1hbmRzLgorCit8dnwJICAgdgkJc3RhcnQgaGlnaGxpZ2h0aW5nIGNoYXJhY3RlcnMgIH0gIG1vdmUgY3Vyc29yIGFuZCB1c2UKK3xWfAkgICBWCQlzdGFydCBoaWdobGlnaHRpbmcgbGluZXdpc2UgICAgfSAgb3BlcmF0b3IgdG8gYWZmZWN0Cit8Q1RSTC1WfCAgIENUUkwtVglzdGFydCBoaWdobGlnaHRpbmcgYmxvY2t3aXNlICAgfSAgaGlnaGxpZ2h0ZWQgdGV4dAorfHZfb3wJICAgbwkJZXhjaGFuZ2UgY3Vyc29yIHBvc2l0aW9uIHdpdGggc3RhcnQgb2YgaGlnaGxpZ2h0aW5nCit8Z3Z8CSAgIGd2CQlzdGFydCBoaWdobGlnaHRpbmcgb24gcHJldmlvdXMgdmlzdWFsIGFyZWEKK3x2X3Z8CSAgIHYJCWhpZ2hsaWdodCBjaGFyYWN0ZXJzIG9yIHN0b3AgaGlnaGxpZ2h0aW5nCit8dl9WfAkgICBWCQloaWdobGlnaHQgbGluZXdpc2Ugb3Igc3RvcCBoaWdobGlnaHRpbmcKK3x2X0NUUkwtVnwgQ1RSTC1WCWhpZ2hsaWdodCBibG9ja3dpc2Ugb3Igc3RvcCBoaWdobGlnaHRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfdG8qCQlUZXh0IG9iamVjdHMgKG9ubHkgaW4gVmlzdWFsIG1vZGUgb3IgYWZ0ZXIgYW4gb3BlcmF0b3IpCisKK3x2X2F3fAlOICBhdwkJU2VsZWN0ICJhIHdvcmQiCit8dl9pd3wJTiAgaXcJCVNlbGVjdCAiaW5uZXIgd29yZCIKK3x2X2FXfAlOICBhVwkJU2VsZWN0ICJhIHxXT1JEfCIKK3x2X2lXfAlOICBpVwkJU2VsZWN0ICJpbm5lciB8V09SRHwiCit8dl9hc3wJTiAgYXMJCVNlbGVjdCAiYSBzZW50ZW5jZSIKK3x2X2lzfAlOICBpcwkJU2VsZWN0ICJpbm5lciBzZW50ZW5jZSIKK3x2X2FwfAlOICBhcAkJU2VsZWN0ICJhIHBhcmFncmFwaCIKK3x2X2lwfAlOICBpcAkJU2VsZWN0ICJpbm5lciBwYXJhZ3JhcGgiCit8dl9hYnwJTiAgYWIJCVNlbGVjdCAiYSBibG9jayIgKGZyb20gIlsoIiB0byAiXSkiKQorfHZfaWJ8CU4gIGliCQlTZWxlY3QgImlubmVyIGJsb2NrIiAoZnJvbSAiWygiIHRvICJdKSIpCit8dl9hQnwJTiAgYUIJCVNlbGVjdCAiYSBCbG9jayIgKGZyb20gIlt7IiB0byAiXX0iKQorfHZfaUJ8CU4gIGlCCQlTZWxlY3QgImlubmVyIEJsb2NrIiAoZnJvbSAiW3siIHRvICJdfSIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3JlKgkJUmVwZWF0aW5nIGNvbW1hbmRzCisKK3wufAkgICBOICAuCQlyZXBlYXQgbGFzdCBjaGFuZ2UgKHdpdGggY291bnQgcmVwbGFjZWQgd2l0aCBOKQorfHF8CSAgICAgIHF7YS16fQlyZWNvcmQgdHlwZWQgY2hhcmFjdGVycyBpbnRvIHJlZ2lzdGVyIHthLXp9Cit8cXwJICAgICAgcXtBLVp9CXJlY29yZCB0eXBlZCBjaGFyYWN0ZXJzLCBhcHBlbmRlZCB0byByZWdpc3RlciB7YS16fQorfHF8CSAgICAgIHEJCXN0b3AgcmVjb3JkaW5nCit8QHwJICAgTiAgQHthLXp9CWV4ZWN1dGUgdGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVyIHthLXp9IChOIHRpbWVzKQorfEBAfAkgICBOICBAQAkgICByZXBlYXQgcHJldmlvdXMgQHthLXp9IChOIHRpbWVzKQorfDpAfAkgICA6QHthLXp9CWV4ZWN1dGUgdGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVyIHthLXp9IGFzIGFuIEV4CisJCQkgICBjb21tYW5kCit8OkBAfAkgICA6QEAJCXJlcGVhdCBwcmV2aW91cyA6QHthLXp9Cit8Omd8CSAgIDpbcmFuZ2VdZ1tsb2JhbF0ve3BhdHRlcm59L1tjbWRdCisJCQlFeGVjdXRlIEV4IGNvbW1hbmQgW2NtZF0gKGRlZmF1bHQ6ICI6cCIpIG9uIHRoZSBsaW5lcworCQkJICAgd2l0aGluIFtyYW5nZV0gd2hlcmUge3BhdHRlcm59IG1hdGNoZXMuCit8Omd8CSAgIDpbcmFuZ2VdZ1tsb2JhbF0hL3twYXR0ZXJufS9bY21kXQorCQkJRXhlY3V0ZSBFeCBjb21tYW5kIFtjbWRdIChkZWZhdWx0OiAiOnAiKSBvbiB0aGUgbGluZXMKKwkJCSAgIHdpdGhpbiBbcmFuZ2VdIHdoZXJlIHtwYXR0ZXJufSBkb2VzIE5PVCBtYXRjaC4KK3w6c298CSAgIDpzb1t1cmNlXSB7ZmlsZX0KKwkJCVJlYWQgRXggY29tbWFuZHMgZnJvbSB7ZmlsZX0uCit8OnNvfAkgICA6c29bdXJjZV0hIHtmaWxlfQorCQkJUmVhZCBWaW0gY29tbWFuZHMgZnJvbSB7ZmlsZX0uCit8OnNsfAkgICA6c2xbZWVwXSBbc2VjXQorCQkJZG9uJ3QgZG8gYW55dGhpbmcgZm9yIFtzZWNdIHNlY29uZHMKK3xnc3wJICAgTiAgZ3MJR290byBTbGVlcCBmb3IgTiBzZWNvbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2ttKgkJS2V5IG1hcHBpbmcKKworfDptYXB8CSAgICAgOm1hW3BdIHtsaHN9IHtyaHN9CSAgTWFwIHtsaHN9IHRvIHtyaHN9IGluIE5vcm1hbCBhbmQgVmlzdWFsCisJCQkJICAgICBtb2RlLgorfDptYXAhfAkgICAgIDptYVtwXSEge2xoc30ge3Joc30gIE1hcCB7bGhzfSB0byB7cmhzfSBpbiBJbnNlcnQgYW5kIENvbW1hbmQtbGluZQorCQkJCSAgICAgbW9kZS4KK3w6bm9yZW1hcHwgICA6bm9bcmVtYXBdWyFdIHtsaHN9IHtyaHN9CisJCQkJICBTYW1lIGFzICI6bWFwIiwgbm8gcmVtYXBwaW5nIGZvciB0aGlzIHtyaHN9Cit8OnVubWFwfCAgICAgOnVubVthcF0ge2xoc30JICBSZW1vdmUgdGhlIG1hcHBpbmcgb2Yge2xoc30gZm9yIE5vcm1hbCBhbmQKKwkJCQkgICAgIFZpc3VhbCBtb2RlLgorfDp1bm1hcCF8ICAgIDp1bm1bYXBdISB7bGhzfQkgIFJlbW92ZSB0aGUgbWFwcGluZyBvZiB7bGhzfSBmb3IgSW5zZXJ0IGFuZAorCQkJCSAgICAgQ29tbWFuZC1saW5lIG1vZGUuCit8Om1hcF9sfCAgICAgOm1hW3BdIFtsaHNdCSAgTGlzdCBtYXBwaW5ncyAoc3RhcnRpbmcgd2l0aCBbbGhzXSkgZm9yCisJCQkJICAgICBOb3JtYWwgYW5kIFZpc3VhbCBtb2RlLgorfDptYXBfbCF8ICAgIDptYVtwXSEgW2xoc10JICBMaXN0IG1hcHBpbmdzIChzdGFydGluZyB3aXRoIFtsaHNdKSBmb3IKKwkJCQkgICAgIEluc2VydCBhbmQgQ29tbWFuZC1saW5lIG1vZGUuCit8OmNtYXB8CSAgICAgOmNtYXAvOmN1bm1hcC86Y25vcmVtYXAKKwkJCQkgIGxpa2UgIjptYXAhIi8iOnVubWFwISIvIjpub3JlbWFwISIgYnV0IGZvcgorCQkJCSAgICAgQ29tbWFuZC1saW5lIG1vZGUgb25seQorfDppbWFwfAkgICAgIDppbWFwLzppdW5tYXAvOmlub3JlbWFwCisJCQkJICBsaWtlICI6bWFwISIvIjp1bm1hcCEiLyI6bm9yZW1hcCEiIGJ1dCBmb3IKKwkJCQkgICAgIEluc2VydCBtb2RlIG9ubHkKK3w6bm1hcHwJICAgICA6bm1hcC86bnVubWFwLzpubm9yZW1hcAorCQkJCSAgbGlrZSAiOm1hcCIvIjp1bm1hcCIvIjpub3JlbWFwIiBidXQgZm9yCisJCQkJICAgICBOb3JtYWwgbW9kZSBvbmx5Cit8OnZtYXB8CSAgICAgOnZtYXAvOnZ1bm1hcC86dm5vcmVtYXAKKwkJCQkgIGxpa2UgIjptYXAiLyI6dW5tYXAiLyI6bm9yZW1hcCIgYnV0IGZvcgorCQkJCSAgICAgVmlzdWFsIG1vZGUgb25seQorfDpvbWFwfAkgICAgIDpvbWFwLzpvdW5tYXAvOm9ub3JlbWFwCisJCQkJICBsaWtlICI6bWFwIi8iOnVubWFwIi8iOm5vcmVtYXAiIGJ1dCBvbmx5IGZvcgorCQkJCSAgICAgd2hlbiBhbiBvcGVyYXRvciBpcyBwZW5kaW5nCit8Om1hcGN8ICAgICAgOm1hcGNbbGVhcl0JICByZW1vdmUgbWFwcGluZ3MgZm9yIE5vcm1hbCBhbmQgVmlzdWFsIG1vZGUKK3w6bWFwY3wgICAgICA6bWFwY1tsZWFyXSEJICByZW1vdmUgbWFwcGluZ3MgZm9yIEluc2VydCBhbmQgQ21kbGluZSBtb2RlCit8OmltYXBjfCAgICAgOmltYXBjW2xlYXJdCSAgcmVtb3ZlIG1hcHBpbmdzIGZvciBJbnNlcnQgbW9kZQorfDp2bWFwY3wgICAgIDp2bWFwY1tsZWFyXQkgIHJlbW92ZSBtYXBwaW5ncyBmb3IgVmlzdWFsIG1vZGUKK3w6b21hcGN8ICAgICA6b21hcGNbbGVhcl0JICByZW1vdmUgbWFwcGluZ3MgZm9yIE9wZXJhdG9yLXBlbmRpbmcgbW9kZQorfDpubWFwY3wgICAgIDpubWFwY1tsZWFyXQkgIHJlbW92ZSBtYXBwaW5ncyBmb3IgTm9ybWFsIG1vZGUKK3w6Y21hcGN8ICAgICA6Y21hcGNbbGVhcl0JICByZW1vdmUgbWFwcGluZ3MgZm9yIENtZGxpbmUgbW9kZQorfDpta2V4cmN8ICAgIDpta1tleHJjXVshXSBbZmlsZV0gIHdyaXRlIGN1cnJlbnQgbWFwcGluZ3MsIGFiYnJldmlhdGlvbnMsIGFuZAorCQkJCSAgICAgc2V0dGluZ3MgdG8gW2ZpbGVdIChkZWZhdWx0OiAiLmV4cmMiOworCQkJCSAgICAgdXNlICEgdG8gb3ZlcndyaXRlKQorfDpta3ZpbXJjfCAgIDpta3ZbaW1yY11bIV0gW2ZpbGVdCisJCQkJICBzYW1lIGFzICI6bWtleHJjIiwgYnV0IHdpdGggZGVmYXVsdCAiLnZpbXJjIgorfDpta3Nlc3Npb258IDpta3NbZXNzaW9uXVshXSBbZmlsZV0KKwkJCQkgIGxpa2UgIjpta3ZpbXJjIiwgYnV0IHN0b3JlIGN1cnJlbnQgZmlsZXMsCisJCQkJICAgICB3aW5kb3dzLCBldGMuIHRvbywgdG8gYmUgYWJsZSB0byBjb250aW51ZQorCQkJCSAgICAgdGhpcyBzZXNzaW9uIGxhdGVyLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9hYioJCUFiYnJldmlhdGlvbnMKKworfDphYmJyZXZpYXRlfAk6YWJbYnJldmlhdGVdIHtsaHN9IHtyaHN9ICBhZGQgYWJicmV2aWF0aW9uIGZvciB7bGhzfSB0byB7cmhzfQorfDphYmJyZXZpYXRlfAk6YWJbYnJldmlhdGVdIHtsaHN9CSAgIHNob3cgYWJicidzIHRoYXQgc3RhcnQgd2l0aCB7bGhzfQorfDphYmJyZXZpYXRlfAk6YWJbYnJldmlhdGVdCQkgICBzaG93IGFsbCBhYmJyZXZpYXRpb25zCit8OnVuYWJicmV2aWF0ZXwJOnVuYVtiYnJldmlhdGVdIHtsaHN9CSAgIHJlbW92ZSBhYmJyZXZpYXRpb24gZm9yIHtsaHN9Cit8Om5vcmVhYmJyZXZ8CTpub3JlYVtiYnJldl0gW2xoc10gW3Joc10gIGxpa2UgIjphYiIsIGJ1dCBkb24ndCByZW1hcCBbcmhzXQorfDppYWJicmV2fAk6aWFiLzppdW5hYi86aW5vcmVhYgkgICBsaWtlICI6YWIiLCBidXQgb25seSBmb3IgSW5zZXJ0IG1vZGUKK3w6Y2FiYnJldnwJOmNhYi86Y3VuYWIvOmNub3JlYWIJICAgbGlrZSAiOmFiIiwgYnV0IG9ubHkgZm9yCisJCQkJCQlDb21tYW5kLWxpbmUgbW9kZQorfDphYmNsZWFyfAk6YWJjW2xlYXJdCQkgICByZW1vdmUgYWxsIGFiYnJldmlhdGlvbnMKK3w6Y2FiY2xlYXJ8CTpjYWJjW2xlYXJdCQkgICByZW1vdmUgYWxsIGFiYnIncyBmb3IgQ21kbGluZSBtb2RlCit8OmlhYmNsZWFyfAk6aWFiY1tsZWFyXQkJICAgcmVtb3ZlIGFsbCBhYmJyJ3MgZm9yIEluc2VydCBtb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX29wKgkJT3B0aW9ucworCit8OnNldHwJCTpzZVt0XQkJCSAgU2hvdyBhbGwgbW9kaWZpZWQgb3B0aW9ucy4KK3w6c2V0fAkJOnNlW3RdIGFsbAkJICBTaG93IGFsbCBub24tdGVybWNhcCBvcHRpb25zLgorfDpzZXR8CQk6c2VbdF0gdGVybWNhcAkJICBTaG93IGFsbCB0ZXJtY2FwIG9wdGlvbnMuCit8OnNldHwJCTpzZVt0XSB7b3B0aW9ufQkJICBTZXQgYm9vbGVhbiBvcHRpb24gKHN3aXRjaCBpdCBvbiksCisJCQkJCSAgc2hvdyBzdHJpbmcgb3IgbnVtYmVyIG9wdGlvbi4KK3w6c2V0fAkJOnNlW3RdIG5ve29wdGlvbn0JICBSZXNldCBib29sZWFuIG9wdGlvbiAoc3dpdGNoIGl0IG9mZikuCit8OnNldHwJCTpzZVt0XSBpbnZ7b3B0aW9ufQkgIGludmVydCBib29sZWFuIG9wdGlvbi4KK3w6c2V0fAkJOnNlW3RdIHtvcHRpb259PXt2YWx1ZX0JICBTZXQgc3RyaW5nL251bWJlciBvcHRpb24gdG8ge3ZhbHVlfS4KK3w6c2V0fAkJOnNlW3RdIHtvcHRpb259Kz17dmFsdWV9ICBhcHBlbmQge3ZhbHVlfSB0byBzdHJpbmcgb3B0aW9uLCBhZGQKKwkJCQkJICB7dmFsdWV9IHRvIG51bWJlciBvcHRpb24KK3w6c2V0fAkJOnNlW3RdIHtvcHRpb259LT17dmFsdWV9ICByZW1vdmUge3ZhbHVlfSB0byBzdHJpbmcgb3B0aW9uLAorCQkJCQkgIHN1YnRyYWN0IHt2YWx1ZX0gZnJvbSBudW1iZXIgb3B0aW9uCit8OnNldHwJCTpzZVt0XSB7b3B0aW9ufT8JICBTaG93IHZhbHVlIG9mIHtvcHRpb259LgorfDpzZXR8CQk6c2VbdF0ge29wdGlvbn0mCSAgUmVzZXQge29wdGlvbn0gdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisKK3w6c2V0bG9jYWx8CTpzZXRsW29jYWxdCQkgIGxpa2UgIjpzZXQiIGJ1dCBzZXQgdGhlIGxvY2FsIHZhbHVlCisJCQkJCSAgZm9yIG9wdGlvbnMgdGhhdCBoYXZlIG9uZQorfDpzZXRnbG9iYWx8CTpzZXRnW2xvYmFsXQkJICBsaWtlICI6c2V0IiBidXQgc2V0IHRoZSBnbG9iYWwgdmFsdWUKKwkJCQkJICBvZiBhIGxvY2FsIG9wdGlvbgorCit8OmZpeHwJCTpmaXhbZGVsXQkJICBTZXQgdmFsdWUgb2YgJ3Rfa0QnIGFjY29yZGluZyB0bworCQkJCQkgIHZhbHVlIG9mICd0X2tiJy4KK3w6b3B0aW9uc3wJOm9wdFtpb25zXQkJICBPcGVuIGEgbmV3IHdpbmRvdyB0byB2aWV3IGFuZCBzZXQKKwkJCQkJICBvcHRpb25zLCBncm91cGVkIGJ5IGZ1bmN0aW9uYWxpdHksCisJCQkJCSAgYSBvbmUgbGluZSBleHBsYW5hdGlvbiBhbmQgbGlua3MgdG8KKwkJCQkJICB0aGUgaGVscC4KKworU2hvcnQgZXhwbGFuYXRpb24gb2YgZWFjaCBvcHRpb246CQkqb3B0aW9uLWxpc3QqCit8J2FsZXBoJ3wJICB8J2FsJ3wgICAgIEFTQ0lJIGNvZGUgb2YgdGhlIGxldHRlciBBbGVwaCAoSGVicmV3KQorfCdhbGxvd3Jldmlucyd8CSAgfCdhcmknfCAgICBhbGxvdyBDVFJMLV8gaW4gSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUgbW9kZQorfCdhbHRrZXltYXAnfAkgIHwnYWttJ3wgICAgZm9yIGRlZmF1bHQgc2Vjb25kIGxhbmd1YWdlIChGYXJzaS9IZWJyZXcpCit8J2FtYml3aWR0aCd8CSAgfCdhbWJ3J3wgICB3aGF0IHRvIGRvIHdpdGggVW5pY29kZSBjaGFycyBvZiBhbWJpZ3VvdXMgd2lkdGgKK3wnYW50aWFsaWFzJ3wJICB8J2FudGknfCAgIE1hYyBPUyBYOiB1c2Ugc21vb3RoLCBhbnRpYWxpYXNlZCBmb250cworfCdhdXRvY2hkaXInfAkgIHwnYWNkJ3wgICAgY2hhbmdlIGRpcmVjdG9yeSB0byB0aGUgZmlsZSBpbiB0aGUgY3VycmVudCB3aW5kb3cKK3wnYXJhYmljJ3wJICB8J2FyYWInfCAgIGZvciBBcmFiaWMgYXMgYSBkZWZhdWx0IHNlY29uZCBsYW5ndWFnZQorfCdhcmFiaWNzaGFwZSd8ICAgfCdhcnNoYXBlJ3wgZG8gc2hhcGluZyBmb3IgQXJhYmljIGNoYXJhY3RlcnMKK3wnYXV0b2luZGVudCd8CSAgfCdhaSd8ICAgICB0YWtlIGluZGVudCBmb3IgbmV3IGxpbmUgZnJvbSBwcmV2aW91cyBsaW5lCit8J2F1dG9yZWFkJ3wJICB8J2FyJ3wgICAgIGF1dG9tLiByZWFkIGZpbGUgd2hlbiBjaGFuZ2VkIG91dHNpZGUgb2YgVmltCit8J2F1dG93cml0ZSd8CSAgfCdhdyd8ICAgICBhdXRvbWF0aWNhbGx5IHdyaXRlIGZpbGUgaWYgY2hhbmdlZAorfCdhdXRvd3JpdGVhbGwnfCAgfCdhd2EnfCAgICBhcyAnYXV0b3dyaXRlJywgYnV0IHdvcmtzIHdpdGggbW9yZSBjb21tYW5kcworfCdiYWNrZ3JvdW5kJ3wJICB8J2JnJ3wgICAgICJkYXJrIiBvciAibGlnaHQiLCB1c2VkIGZvciBoaWdobGlnaHQgY29sb3JzCit8J2JhY2tzcGFjZSd8CSAgfCdicyd8ICAgICBob3cgYmFja3NwYWNlIHdvcmtzIGF0IHN0YXJ0IG9mIGxpbmUKK3wnYmFja3VwJ3wJICB8J2JrJ3wgICAgIGtlZXAgYmFja3VwIGZpbGUgYWZ0ZXIgb3ZlcndyaXRpbmcgYSBmaWxlCit8J2JhY2t1cGNvcHknfAkgIHwnYmtjJ3wgICAgbWFrZSBiYWNrdXAgYXMgYSBjb3B5LCBkb24ndCByZW5hbWUgdGhlIGZpbGUKK3wnYmFja3VwZGlyJ3wJICB8J2JkaXInfCAgIGxpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIHRoZSBiYWNrdXAgZmlsZQorfCdiYWNrdXBleHQnfAkgIHwnYmV4J3wgICAgZXh0ZW5zaW9uIHVzZWQgZm9yIHRoZSBiYWNrdXAgZmlsZQorfCdiYWNrdXBza2lwJ3wJICB8J2Jzayd8ICAgIG5vIGJhY2t1cCBmb3IgZmlsZXMgdGhhdCBtYXRjaCB0aGVzZSBwYXR0ZXJucworfCdiYWxsb29uZGVsYXknfCAgfCdiZGxheSd8ICBkZWxheSBpbiBtUyBiZWZvcmUgYSBiYWxsb29uIG1heSBwb3AgdXAKK3wnYmFsbG9vbmV2YWwnfCAgIHwnYmV2YWwnfCAgc3dpdGNoIG9uIGJhbGxvb24gZXZhbHVhdGlvbgorfCdiaW5hcnknfAkgIHwnYmluJ3wgICAgcmVhZC93cml0ZS9lZGl0IGZpbGUgaW4gYmluYXJ5IG1vZGUKK3wnYmlvc2tleSd8CSAgfCdiaW9zayd8ICBNUy1ET1M6IHVzZSBiaW9zIGNhbGxzIGZvciBpbnB1dCBjaGFyYWN0ZXJzCit8J2JvbWInfAkJICAgICBwcmVwZW5kIGEgQnl0ZSBPcmRlciBNYXJrIHRvIHRoZSBmaWxlCit8J2JyZWFrYXQnfAkgIHwnYnJrJ3wgICAgY2hhcmFjdGVycyB0aGF0IG1heSBjYXVzZSBhIGxpbmUgYnJlYWsKK3wnYnJvd3NlZGlyJ3wJICB8J2JzZGlyJ3wgIHdoaWNoIGRpcmVjdG9yeSB0byBzdGFydCBicm93c2luZyBpbgorfCdidWZoaWRkZW4nfAkgIHwnYmgnfCAgICAgd2hhdCB0byBkbyB3aGVuIGJ1ZmZlciBpcyBubyBsb25nZXIgaW4gd2luZG93Cit8J2J1Zmxpc3RlZCd8CSAgfCdibCd8ICAgICB3aGV0aGVyIHRoZSBidWZmZXIgc2hvd3MgdXAgaW4gdGhlIGJ1ZmZlciBsaXN0Cit8J2J1ZnR5cGUnfAkgIHwnYnQnfCAgICAgc3BlY2lhbCB0eXBlIG9mIGJ1ZmZlcgorfCdjYXNlbWFwJ3wJICB8J2NtcCd8ICAgIHNwZWNpZmllcyBob3cgY2FzZSBvZiBsZXR0ZXJzIGlzIGNoYW5nZWQKK3wnY2RwYXRoJ3wJICB8J2NkJ3wgICAgIGxpc3Qgb2YgZGlyZWN0b3JpZXMgc2VhcmNoZWQgd2l0aCAiOmNkIgorfCdjZWRpdCd8CQkgICAgIGtleSB1c2VkIHRvIG9wZW4gdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cKK3wnY2hhcmNvbnZlcnQnfCAgIHwnY2N2J3wgICAgZXhwcmVzc2lvbiBmb3IgY2hhcmFjdGVyIGVuY29kaW5nIGNvbnZlcnNpb24KK3wnY2luZGVudCd8CSAgfCdjaW4nfCAgICBkbyBDIHByb2dyYW0gaW5kZW50aW5nCit8J2NpbmtleXMnfAkgIHwnY2luayd8ICAga2V5cyB0aGF0IHRyaWdnZXIgaW5kZW50IHdoZW4gJ2NpbmRlbnQnIGlzIHNldAorfCdjaW5vcHRpb25zJ3wJICB8J2Npbm8nfCAgIGhvdyB0byBkbyBpbmRlbnRpbmcgd2hlbiAnY2luZGVudCcgaXMgc2V0Cit8J2NpbndvcmRzJ3wJICB8J2NpbncnfCAgIHdvcmRzIHdoZXJlICdzaScgYW5kICdjaW4nIGFkZCBhbiBpbmRlbnQKK3wnY2xpcGJvYXJkJ3wJICB8J2NiJ3wgICAgIHVzZSB0aGUgY2xpcGJvYXJkIGFzIHRoZSB1bm5hbWVkIHJlZ2lzdGVyCit8J2NtZGhlaWdodCd8CSAgfCdjaCd8ICAgICBudW1iZXIgb2YgbGluZXMgdG8gdXNlIGZvciB0aGUgY29tbWFuZC1saW5lCit8J2NtZHdpbmhlaWdodCd8ICB8J2N3aCd8ICAgIGhlaWdodCBvZiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdworfCdjb2x1bW5zJ3wJICB8J2NvJ3wgICAgIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBkaXNwbGF5Cit8J2NvbW1lbnRzJ3wJICB8J2NvbSd8ICAgIHBhdHRlcm5zIHRoYXQgY2FuIHN0YXJ0IGEgY29tbWVudCBsaW5lCit8J2NvbW1lbnRzdHJpbmcnfCB8J2Ntcyd8ICAgIHRlbXBsYXRlIGZvciBjb21tZW50czsgdXNlZCBmb3IgZm9sZCBtYXJrZXIKK3wnY29tcGF0aWJsZSd8CSAgfCdjcCd8ICAgICBiZWhhdmUgVmktY29tcGF0aWJsZSBhcyBtdWNoIGFzIHBvc3NpYmxlCit8J2NvbXBsZXRlJ3wJICB8J2NwdCd8ICAgIHNwZWNpZnkgaG93IEluc2VydCBtb2RlIGNvbXBsZXRpb24gd29ya3MKK3wnY29uZmlybSd8CSAgfCdjZid8ICAgICBhc2sgd2hhdCB0byBkbyBhYm91dCB1bnNhdmVkL3JlYWQtb25seSBmaWxlcworfCdjb25za2V5J3wJICB8J2NvbnNrJ3wgIGdldCBrZXlzIGRpcmVjdGx5IGZyb20gY29uc29sZSAoTVMtRE9TIG9ubHkpCit8J2NvcHlpbmRlbnQnfCAgICB8J2NpJ3wgICAgIG1ha2UgJ2F1dG9pbmRlbnQnIHVzZSBleGlzdGluZyBpbmRlbnQgc3RydWN0dXJlCit8J2Nwb3B0aW9ucyd8CSAgfCdjcG8nfCAgICBmbGFncyBmb3IgVmktY29tcGF0aWJsZSBiZWhhdmlvcgorfCdjc2NvcGVwYXRoY29tcCd8IHwnY3NwYyd8ICBob3cgbWFueSBjb21wb25lbnRzIG9mIHRoZSBwYXRoIHRvIHNob3cKK3wnY3Njb3BlcHJnJ3wJICB8J2NzcHJnJ3wgIGNvbW1hbmQgdG8gZXhlY3V0ZSBjc2NvcGUKK3wnY3Njb3BlcXVpY2tmaXgnfCB8J2NzcWYnfCAgdXNlIHF1aWNrZml4IHdpbmRvdyBmb3IgY3Njb3BlIHJlc3VsdHMKK3wnY3Njb3BldGFnJ3wJICB8J2NzdCd8ICAgIHVzZSBjc2NvcGUgZm9yIHRhZyBjb21tYW5kcworfCdjc2NvcGV0YWdvcmRlcid8IHwnY3N0byd8ICBkZXRlcm1pbmVzICI6Y3N0YWciIHNlYXJjaCBvcmRlcgorfCdjc2NvcGV2ZXJib3NlJ3wgfCdjc3ZlcmInfCBnaXZlIG1lc3NhZ2VzIHdoZW4gYWRkaW5nIGEgY3Njb3BlIGRhdGFiYXNlCit8J2RlYnVnJ3wJCSAgICAgc2V0IHRvICJtc2ciIHRvIHNlZSBhbGwgZXJyb3IgbWVzc2FnZXMKK3wnZGVmaW5lJ3wJICB8J2RlZid8ICAgIHBhdHRlcm4gdG8gYmUgdXNlZCB0byBmaW5kIGEgbWFjcm8gZGVmaW5pdGlvbgorfCdkZWxjb21iaW5lJ3wJICB8J2RlY28nfCAgIGRlbGV0ZSBjb21iaW5pbmcgY2hhcmFjdGVycyBvbiB0aGVpciBvd24KK3wnZGljdGlvbmFyeSd8CSAgfCdkaWN0J3wgICBsaXN0IG9mIGZpbGUgbmFtZXMgdXNlZCBmb3Iga2V5d29yZCBjb21wbGV0aW9uCit8J2RpZmYnfAkJICAgICB1c2UgZGlmZiBtb2RlIGZvciB0aGUgY3VycmVudCB3aW5kb3cKK3wnZGlmZmV4cHInfAkgIHwnZGV4J3wgICAgZXhwcmVzc2lvbiB1c2VkIHRvIG9idGFpbiBhIGRpZmYgZmlsZQorfCdkaWZmb3B0J3wJICB8J2RpcCd8ICAgIG9wdGlvbnMgZm9yIHVzaW5nIGRpZmYgbW9kZQorfCdkaWdyYXBoJ3wJICB8J2RnJ3wgICAgIGVuYWJsZSB0aGUgZW50ZXJpbmcgb2YgZGlncmFwaHMgaW4gSW5zZXJ0IG1vZGUKK3wnZGlyZWN0b3J5J3wJICB8J2Rpcid8ICAgIGxpc3Qgb2YgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGUgc3dhcCBmaWxlCit8J2Rpc3BsYXknfAkgIHwnZHknfCAgICAgbGlzdCBvZiBmbGFncyBmb3IgaG93IHRvIGRpc3BsYXkgdGV4dAorfCdlYWRpcmVjdGlvbid8ICAgfCdlYWQnfCAgICBpbiB3aGljaCBkaXJlY3Rpb24gJ2VxdWFsYWx3YXlzJyB3b3JrcworfCdlZGNvbXBhdGlibGUnfCAgfCdlZCd8ICAgICB0b2dnbGUgZmxhZ3Mgb2YgIjpzdWJzdGl0dXRlIiBjb21tYW5kCit8J2VuY29kaW5nJ3wJICB8J2VuYyd8ICAgIGVuY29kaW5nIHVzZWQgaW50ZXJuYWxseQorfCdlbmRvZmxpbmUnfAkgIHwnZW9sJ3wgICAgd3JpdGUgPEVPTD4gZm9yIGxhc3QgbGluZSBpbiBmaWxlCit8J2VxdWFsYWx3YXlzJ3wgICB8J2VhJ3wgICAgIHdpbmRvd3MgYXJlIGF1dG9tYXRpY2FsbHkgbWFkZSB0aGUgc2FtZSBzaXplCit8J2VxdWFscHJnJ3wJICB8J2VwJ3wgICAgIGV4dGVybmFsIHByb2dyYW0gdG8gdXNlIGZvciAiPSIgY29tbWFuZAorfCdlcnJvcmJlbGxzJ3wJICB8J2ViJ3wgICAgIHJpbmcgdGhlIGJlbGwgZm9yIGVycm9yIG1lc3NhZ2VzCit8J2Vycm9yZmlsZSd8CSAgfCdlZid8ICAgICBuYW1lIG9mIHRoZSBlcnJvcmZpbGUgZm9yIHRoZSBRdWlja0ZpeCBtb2RlCit8J2Vycm9yZm9ybWF0J3wgICB8J2VmbSd8ICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5lcyBpbiB0aGUgZXJyb3IgZmlsZQorfCdlc2NrZXlzJ3wJICB8J2VrJ3wgICAgIHJlY29nbml6ZSBmdW5jdGlvbiBrZXlzIGluIEluc2VydCBtb2RlCit8J2V2ZW50aWdub3JlJ3wJICB8J2VpJ3wgICAgIGF1dG9jb21tYW5kIGV2ZW50cyB0aGF0IGFyZSBpZ25vcmVkCit8J2V4cGFuZHRhYid8CSAgfCdldCd8ICAgICB1c2Ugc3BhY2VzIHdoZW4gPFRhYj4gaXMgaW5zZXJ0ZWQKK3wnZXhyYyd8CSAgfCdleCd8ICAgICByZWFkIC52aW1yYyBhbmQgLmV4cmMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5Cit8J2ZpbGVlbmNvZGluZyd8ICB8J2ZlbmMnfCAgIGZpbGUgZW5jb2RpbmcgZm9yIG11bHRpLWJ5dGUgdGV4dAorfCdmaWxlZW5jb2RpbmdzJ3wgfCdmZW5jcyd8ICBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIGNoYXJhY3RlciBlbmNvZGluZ3MKK3wnZmlsZWZvcm1hdCd8CSAgfCdmZid8ICAgICBmaWxlIGZvcm1hdCB1c2VkIGZvciBmaWxlIEkvTworfCdmaWxlZm9ybWF0cyd8CSAgfCdmZnMnfCAgICBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIHZhbHVlcyBmb3IgJ2ZpbGVmb3JtYXQnCit8J2ZpbGV0eXBlJ3wJICB8J2Z0J3wgICAgIHR5cGUgb2YgZmlsZSwgdXNlZCBmb3IgYXV0b2NvbW1hbmRzCit8J2ZpbGxjaGFycyd8CSAgfCdmY3MnfCAgICBjaGFyYWN0ZXJzIHRvIHVzZSBmb3IgZGlzcGxheWluZyBzcGVjaWFsIGl0ZW1zCit8J2ZrbWFwJ3wJICB8J2ZrJ3wgICAgIEZhcnNpIGtleWJvYXJkIG1hcHBpbmcKK3wnZm9sZGNsb3NlJ3wJICB8J2ZjbCd8ICAgIGNsb3NlIGEgZm9sZCB3aGVuIHRoZSBjdXJzb3IgbGVhdmVzIGl0Cit8J2ZvbGRjb2x1bW4nfAkgIHwnZmRjJ3wgICAgd2lkdGggb2YgdGhlIGNvbHVtbiB1c2VkIHRvIGluZGljYXRlIGZvbGRzCit8J2ZvbGRlbmFibGUnfAkgIHwnZmVuJ3wgICAgc2V0IHRvIGRpc3BsYXkgYWxsIGZvbGRzIG9wZW4KK3wnZm9sZGV4cHInfAkgIHwnZmRlJ3wgICAgZXhwcmVzc2lvbiB1c2VkIHdoZW4gJ2ZvbGRtZXRob2QnIGlzICJleHByIgorfCdmb2xkaWdub3JlJ3wJICB8J2ZkaSd8ICAgIGlnbm9yZSBsaW5lcyB3aGVuICdmb2xkbWV0aG9kJyBpcyAiaW5kZW50IgorfCdmb2xkbGV2ZWwnfAkgIHwnZmRsJ3wgICAgY2xvc2UgZm9sZHMgd2l0aCBhIGxldmVsIGhpZ2hlciB0aGFuIHRoaXMKK3wnZm9sZGxldmVsc3RhcnQnfCB8J2ZkbHMnfCAgJ2ZvbGRsZXZlbCcgd2hlbiBzdGFydGluZyB0byBlZGl0IGEgZmlsZQorfCdmb2xkbWFya2VyJ3wJICB8J2Ztcid8ICAgIG1hcmtlcnMgdXNlZCB3aGVuICdmb2xkbWV0aG9kJyBpcyAibWFya2VyIgorfCdmb2xkbWV0aG9kJ3wJICB8J2ZkbSd8ICAgIGZvbGRpbmcgdHlwZQorfCdmb2xkbWlubGluZXMnfCAgfCdmbWwnfCAgICBtaW5pbXVtIG51bWJlciBvZiBsaW5lcyBmb3IgYSBmb2xkIHRvIGJlIGNsb3NlZAorfCdmb2xkbmVzdG1heCd8ICAgfCdmZG4nfCAgICBtYXhpbXVtIGZvbGQgZGVwdGgKK3wnZm9sZG9wZW4nfAkgIHwnZmRvJ3wgICAgZm9yIHdoaWNoIGNvbW1hbmRzIGEgZm9sZCB3aWxsIGJlIG9wZW5lZAorfCdmb2xkdGV4dCd8CSAgfCdmZHQnfCAgICBleHByZXNzaW9uIHVzZWQgdG8gZGlzcGxheSBmb3IgYSBjbG9zZWQgZm9sZAorfCdmb3JtYXRvcHRpb25zJ3wgfCdmbyd8ICAgICBob3cgYXV0b21hdGljIGZvcm1hdHRpbmcgaXMgdG8gYmUgZG9uZQorfCdmb3JtYXRwcmcnfAkgIHwnZnAnfCAgICAgbmFtZSBvZiBleHRlcm5hbCBwcm9ncmFtIHVzZWQgd2l0aCAiZ3EiIGNvbW1hbmQKK3wnZ2RlZmF1bHQnfAkgIHwnZ2QnfCAgICAgdGhlICI6c3Vic3RpdHV0ZSIgZmxhZyAnZycgaXMgZGVmYXVsdCBvbgorfCdncmVwZm9ybWF0J3wJICB8J2dmbSd8ICAgIGZvcm1hdCBvZiAnZ3JlcHByZycgb3V0cHV0Cit8J2dyZXBwcmcnfAkgIHwnZ3AnfCAgICAgcHJvZ3JhbSB0byB1c2UgZm9yICI6Z3JlcCIKK3wnZ3VpY3Vyc29yJ3wJICB8J2djcid8ICAgIEdVSTogc2V0dGluZ3MgZm9yIGN1cnNvciBzaGFwZSBhbmQgYmxpbmtpbmcKK3wnZ3VpZm9udCd8CSAgfCdnZm4nfCAgICBHVUk6IE5hbWUocykgb2YgZm9udChzKSB0byBiZSB1c2VkCit8J2d1aWZvbnRzZXQnfAkgIHwnZ2ZzJ3wgICAgR1VJOiBOYW1lcyBvZiBtdWx0aS1ieXRlIGZvbnRzIHRvIGJlIHVzZWQKK3wnZ3VpZm9udHdpZGUnfCAgIHwnZ2Z3J3wgICAgbGlzdCBvZiBmb250IG5hbWVzIGZvciBkb3VibGUtd2lkZSBjaGFyYWN0ZXJzCit8J2d1aWhlYWRyb29tJ3wJICB8J2docid8ICAgIEdVSTogcGl4ZWxzIHJvb20gZm9yIHdpbmRvdyBkZWNvcmF0aW9ucworfCdndWlvcHRpb25zJ3wJICB8J2dvJ3wgICAgIEdVSTogV2hpY2ggY29tcG9uZW50cyBhbmQgb3B0aW9ucyBhcmUgdXNlZAorfCdndWlwdHknfAkJICAgICBHVUk6IHRyeSB0byB1c2UgYSBwc2V1ZG8tdHR5IGZvciAiOiEiIGNvbW1hbmRzCit8J2hlbHBmaWxlJ3wJICB8J2hmJ3wgICAgIGZ1bGwgcGF0aCBuYW1lIG9mIHRoZSBtYWluIGhlbHAgZmlsZQorfCdoZWxwaGVpZ2h0J3wJICB8J2hoJ3wgICAgIG1pbmltdW0gaGVpZ2h0IG9mIGEgbmV3IGhlbHAgd2luZG93Cit8J2hlbHBsYW5nJ3wJICB8J2hsZyd8ICAgIHByZWZlcnJlZCBoZWxwIGxhbmd1YWdlcworfCdoaWRkZW4nfAkgIHwnaGlkJ3wgICAgZG9uJ3QgdW5sb2FkIGJ1ZmZlciB3aGVuIGl0IGlzIHxhYmFuZG9ufGVkCit8J2hpZ2hsaWdodCd8CSAgfCdobCd8ICAgICBzZXRzIGhpZ2hsaWdodGluZyBtb2RlIGZvciB2YXJpb3VzIG9jY2FzaW9ucworfCdobHNlYXJjaCd8CSAgfCdobHMnfCAgICBoaWdobGlnaHQgbWF0Y2hlcyB3aXRoIGxhc3Qgc2VhcmNoIHBhdHRlcm4KK3wnaGlzdG9yeSd8CSAgfCdoaSd8ICAgICBudW1iZXIgb2YgY29tbWFuZC1saW5lcyB0aGF0IGFyZSByZW1lbWJlcmVkCit8J2hrbWFwJ3wJICB8J2hrJ3wgICAgIEhlYnJldyBrZXlib2FyZCBtYXBwaW5nCit8J2hrbWFwcCd8CSAgfCdoa3AnfCAgICBwaG9uZXRpYyBIZWJyZXcga2V5Ym9hcmQgbWFwcGluZworfCdpY29uJ3wJCSAgICAgbGV0IFZpbSBzZXQgdGhlIHRleHQgb2YgdGhlIHdpbmRvdyBpY29uCit8J2ljb25zdHJpbmcnfAkJICAgICBzdHJpbmcgdG8gdXNlIGZvciB0aGUgVmltIGljb24gdGV4dAorfCdpZ25vcmVjYXNlJ3wJICB8J2ljJ3wgICAgIGlnbm9yZSBjYXNlIGluIHNlYXJjaCBwYXR0ZXJucworfCdpbWFjdGl2YXRla2V5J3wgfCdpbWFrJ3wgICBrZXkgdGhhdCBhY3RpdmF0ZXMgdGhlIFggaW5wdXQgbWV0aG9kCit8J2ltY21kbGluZSd8CSAgfCdpbWMnfCAgICB1c2UgSU0gd2hlbiBzdGFydGluZyB0byBlZGl0IGEgY29tbWFuZCBsaW5lCit8J2ltZGlzYWJsZSd8CSAgfCdpbWQnfCAgICBkbyBub3QgdXNlIHRoZSBJTSBpbiBhbnkgbW9kZQorfCdpbWluc2VydCd8CSAgfCdpbWknfCAgICB1c2UgOmxtYXAgb3IgSU0gaW4gSW5zZXJ0IG1vZGUKK3wnaW1zZWFyY2gnfAkgIHwnaW1zJ3wgICAgdXNlIDpsbWFwIG9yIElNIHdoZW4gdHlwaW5nIGEgc2VhcmNoIHBhdHRlcm4KK3wnaW5jbHVkZSd8CSAgfCdpbmMnfCAgICBwYXR0ZXJuIHRvIGJlIHVzZWQgdG8gZmluZCBhbiBpbmNsdWRlIGZpbGUKK3wnaW5jbHVkZWV4cHInfCAgIHwnaW5leCd8ICAgZXhwcmVzc2lvbiB1c2VkIHRvIHByb2Nlc3MgYW4gaW5jbHVkZSBsaW5lCit8J2luY3NlYXJjaCd8CSAgfCdpcyd8ICAgICBoaWdobGlnaHQgbWF0Y2ggd2hpbGUgdHlwaW5nIHNlYXJjaCBwYXR0ZXJuCit8J2luZGVudGV4cHInfAkgIHwnaW5kZSd8ICAgZXhwcmVzc2lvbiB1c2VkIHRvIG9idGFpbiB0aGUgaW5kZW50IG9mIGEgbGluZQorfCdpbmRlbnRrZXlzJ3wJICB8J2luZGsnfCAgIGtleXMgdGhhdCB0cmlnZ2VyIGluZGVudGluZyB3aXRoICdpbmRlbnRleHByJworfCdpbmZlcmNhc2UnfAkgIHwnaW5mJ3wgICAgYWRqdXN0IGNhc2Ugb2YgbWF0Y2ggZm9yIGtleXdvcmQgY29tcGxldGlvbgorfCdpbnNlcnRtb2RlJ3wJICB8J2ltJ3wgICAgIHN0YXJ0IHRoZSBlZGl0IG9mIGEgZmlsZSBpbiBJbnNlcnQgbW9kZQorfCdpc2ZuYW1lJ3wJICB8J2lzZid8ICAgIGNoYXJhY3RlcnMgaW5jbHVkZWQgaW4gZmlsZSBuYW1lcyBhbmQgcGF0aG5hbWVzCit8J2lzaWRlbnQnfAkgIHwnaXNpJ3wgICAgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiBpZGVudGlmaWVycworfCdpc2tleXdvcmQnfAkgIHwnaXNrJ3wgICAgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiBrZXl3b3JkcworfCdpc3ByaW50J3wJICB8J2lzcCd8ICAgIHByaW50YWJsZSBjaGFyYWN0ZXJzCit8J2pvaW5zcGFjZXMnfAkgIHwnanMnfCAgICAgdHdvIHNwYWNlcyBhZnRlciBhIHBlcmlvZCB3aXRoIGEgam9pbiBjb21tYW5kCit8J2tleSd8CQkJICAgICBlbmNyeXB0aW9uIGtleQorfCdrZXltYXAnfAkgIHwna21wJ3wgICAgbmFtZSBvZiBhIGtleWJvYXJkIG1hcHBpbmcKK3wna2V5bW9kZWwnfAkgIHwna20nfCAgICAgZW5hYmxlIHN0YXJ0aW5nL3N0b3BwaW5nIHNlbGVjdGlvbiB3aXRoIGtleXMKK3wna2V5d29yZHByZyd8CSAgfCdrcCd8ICAgICBwcm9ncmFtIHRvIHVzZSBmb3IgdGhlICJLIiBjb21tYW5kCit8J2xhbmdtYXAnfAkgIHwnbG1hcCd8ICAgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGZvciBvdGhlciBsYW5ndWFnZSBtb2RlCit8J2xhbmdtZW51J3wJICB8J2xtJ3wgICAgIGxhbmd1YWdlIHRvIGJlIHVzZWQgZm9yIHRoZSBtZW51cworfCdsYXN0c3RhdHVzJ3wJICB8J2xzJ3wgICAgIHRlbGxzIHdoZW4gbGFzdCB3aW5kb3cgaGFzIHN0YXR1cyBsaW5lcworfCdsYXp5cmVkcmF3J3wJICB8J2x6J3wgICAgIGRvbid0IHJlZHJhdyB3aGlsZSBleGVjdXRpbmcgbWFjcm9zCit8J2xpbmVicmVhayd8CSAgfCdsYnInfCAgICB3cmFwIGxvbmcgbGluZXMgYXQgYSBibGFuaworfCdsaW5lcyd8CQkgICAgIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZGlzcGxheQorfCdsaW5lc3BhY2UnfAkgIHwnbHNwJ3wgICAgbnVtYmVyIG9mIHBpeGVsIGxpbmVzIHRvIHVzZSBiZXR3ZWVuIGNoYXJhY3RlcnMKK3wnbGlzcCd8CQkgICAgIGF1dG9tYXRpYyBpbmRlbnRpbmcgZm9yIExpc3AKK3wnbGlzcHdvcmRzJ3wJICB8J2x3J3wgICAgIHdvcmRzIHRoYXQgY2hhbmdlIGhvdyBsaXNwIGluZGVudGluZyB3b3JrcworfCdsaXN0J3wJCSAgICAgc2hvdyA8VGFiPiBhbmQgPEVPTD4KK3wnbGlzdGNoYXJzJ3wJICB8J2xjcyd8ICAgIGNoYXJhY3RlcnMgZm9yIGRpc3BsYXlpbmcgaW4gbGlzdCBtb2RlCit8J2xvYWRwbHVnaW5zJ3wgICB8J2xwbCd8ICAgIGxvYWQgcGx1Z2luIHNjcmlwdHMgd2hlbiBzdGFydGluZyB1cAorfCdtYWdpYyd8CQkgICAgIGNoYW5nZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHNlYXJjaCBwYXR0ZXJucworfCdtYWtlZWYnfAkgIHwnbWVmJ3wgICAgbmFtZSBvZiB0aGUgZXJyb3JmaWxlIGZvciAiOm1ha2UiCit8J21ha2VwcmcnfAkgIHwnbXAnfCAgICAgcHJvZ3JhbSB0byB1c2UgZm9yIHRoZSAiOm1ha2UiIGNvbW1hbmQKK3wnbWF0Y2hwYWlycyd8CSAgfCdtcHMnfCAgICBwYWlycyBvZiBjaGFyYWN0ZXJzIHRoYXQgIiUiIGNhbiBtYXRjaAorfCdtYXRjaHRpbWUnfAkgIHwnbWF0J3wgICAgdGVudGhzIG9mIGEgc2Vjb25kIHRvIHNob3cgbWF0Y2hpbmcgcGFyZW4KK3wnbWF4ZnVuY2RlcHRoJ3wgIHwnbWZkJ3wgICAgbWF4aW11bSByZWN1cnNpdmUgZGVwdGggZm9yIHVzZXIgZnVuY3Rpb25zCit8J21heG1hcGRlcHRoJ3wgICB8J21tZCd8ICAgIG1heGltdW0gcmVjdXJzaXZlIGRlcHRoIGZvciBtYXBwaW5nCit8J21heG1lbSd8CSAgfCdtbSd8ICAgICBtYXhpbXVtIG1lbW9yeSAoaW4gS2J5dGUpIHVzZWQgZm9yIG9uZSBidWZmZXIKK3wnbWF4bWVtdG90J3wJICB8J21tdCd8ICAgIG1heGltdW0gbWVtb3J5IChpbiBLYnl0ZSkgdXNlZCBmb3IgYWxsIGJ1ZmZlcnMKK3wnbWVudWl0ZW1zJ3wJICB8J21pcyd8ICAgIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIGluIGEgbWVudQorfCdtb2RlbGluZSd8CSAgfCdtbCd8ICAgICByZWNvZ25pemUgbW9kZWxpbmVzIGF0IHN0YXJ0IG9yIGVuZCBvZiBmaWxlCit8J21vZGVsaW5lcyd8CSAgfCdtbHMnfCAgICBudW1iZXIgb2YgbGluZXMgY2hlY2tlZCBmb3IgbW9kZWxpbmVzCit8J21vZGlmaWFibGUnfAkgIHwnbWEnfCAgICAgY2hhbmdlcyB0byB0aGUgdGV4dCBhcmUgbm90IHBvc3NpYmxlCit8J21vZGlmaWVkJ3wJICB8J21vZCd8ICAgIGJ1ZmZlciBoYXMgYmVlbiBtb2RpZmllZAorfCdtb3JlJ3wJCSAgICAgcGF1c2UgbGlzdGluZ3Mgd2hlbiB0aGUgd2hvbGUgc2NyZWVuIGlzIGZpbGxlZAorfCdtb3VzZSd8CQkgICAgIGVuYWJsZSB0aGUgdXNlIG9mIG1vdXNlIGNsaWNrcworfCdtb3VzZWZvY3VzJ3wJICB8J21vdXNlZid8IGtleWJvYXJkIGZvY3VzIGZvbGxvd3MgdGhlIG1vdXNlCit8J21vdXNlaGlkZSd8CSAgfCdtaCd8ICAgICBoaWRlIG1vdXNlIHBvaW50ZXIgd2hpbGUgdHlwaW5nCit8J21vdXNlbW9kZWwnfAkgIHwnbW91c2VtJ3wgY2hhbmdlcyBtZWFuaW5nIG9mIG1vdXNlIGJ1dHRvbnMKK3wnbW91c2VzaGFwZSd8CSAgfCdtb3VzZXMnfCBzaGFwZSBvZiB0aGUgbW91c2UgcG9pbnRlciBpbiBkaWZmZXJlbnQgbW9kZXMKK3wnbW91c2V0aW1lJ3wJICB8J21vdXNldCd8IG1heCB0aW1lIGJldHdlZW4gbW91c2UgZG91YmxlLWNsaWNrCit8J25yZm9ybWF0cyd8CSAgfCduZid8ICAgICBudW1iZXIgZm9ybWF0cyByZWNvZ25pemVkIGZvciBDVFJMLUEgY29tbWFuZAorfCdudW1iZXInfAkgIHwnbnUnfCAgICAgcHJpbnQgdGhlIGxpbmUgbnVtYmVyIGluIGZyb250IG9mIGVhY2ggbGluZQorfCdvc2ZpbGV0eXBlJ3wJICB8J29mdCd8ICAgIG9wZXJhdGluZyBzeXN0ZW0tc3BlY2lmaWMgZmlsZXR5cGUgaW5mb3JtYXRpb24KK3wncGFyYWdyYXBocyd8CSAgfCdwYXJhJ3wgICBucm9mZiBtYWNyb3MgdGhhdCBzZXBhcmF0ZSBwYXJhZ3JhcGhzCit8J3Bhc3RlJ3wJCSAgICAgYWxsb3cgcGFzdGluZyB0ZXh0Cit8J3Bhc3RldG9nZ2xlJ3wJICB8J3B0J3wgICAgIGtleSBjb2RlIHRoYXQgY2F1c2VzICdwYXN0ZScgdG8gdG9nZ2xlCit8J3BhdGNoZXhwcid8CSAgfCdwZXgnfCAgICBleHByZXNzaW9uIHVzZWQgdG8gcGF0Y2ggYSBmaWxlCit8J3BhdGNobW9kZSd8CSAgfCdwbSd8ICAgICBrZWVwIHRoZSBvbGRlc3QgdmVyc2lvbiBvZiBhIGZpbGUKK3wncGF0aCd8CSAgfCdwYSd8ICAgICBsaXN0IG9mIGRpcmVjdG9yaWVzIHNlYXJjaGVkIHdpdGggImdmIiBldC5hbC4KK3wncHJlc2VydmVpbmRlbnQnfCB8J3BpJ3wgICAgcHJlc2VydmUgdGhlIGluZGVudCBzdHJ1Y3R1cmUgd2hlbiByZWluZGVudGluZworfCdwcmV2aWV3aGVpZ2h0J3wgfCdwdmgnfCAgICBoZWlnaHQgb2YgdGhlIHByZXZpZXcgd2luZG93Cit8J3ByZXZpZXd3aW5kb3cnfCB8J3B2dyd8ICAgIGlkZW50aWZpZXMgdGhlIHByZXZpZXcgd2luZG93Cit8J3ByaW50ZGV2aWNlJ3wgICB8J3BkZXYnfCAgIG5hbWUgb2YgdGhlIHByaW50ZXIgdG8gYmUgdXNlZCBmb3IgOmhhcmRjb3B5Cit8J3ByaW50ZW5jb2RpbmcnfCB8J3BlbmMnfCAgIGVuY29kaW5nIHRvIGJlIHVzZWQgZm9yIHByaW50aW5nCit8J3ByaW50ZXhwcid8ICAgICB8J3BleHByJ3wgIGV4cHJlc3Npb24gdXNlZCB0byBwcmludCBQb3N0U2NyaXB0IGZvciA6aGFyZGNvcHkKK3wncHJpbnRmb250J3wJICB8J3Bmbid8ICAgIG5hbWUgb2YgdGhlIGZvbnQgdG8gYmUgdXNlZCBmb3IgOmhhcmRjb3B5Cit8J3ByaW50aGVhZGVyJ3wgICB8J3BoZWFkZXInfCBmb3JtYXQgb2YgdGhlIGhlYWRlciB1c2VkIGZvciA6aGFyZGNvcHkKK3wncHJpbnRvcHRpb25zJ3wgIHwncG9wdCd8ICAgY29udHJvbHMgdGhlIGZvcm1hdCBvZiA6aGFyZGNvcHkgb3V0cHV0Cit8J3JlYWRvbmx5J3wJICB8J3JvJ3wgICAgIGRpc2FsbG93IHdyaXRpbmcgdGhlIGJ1ZmZlcgorfCdyZW1hcCd8CQkgICAgIGFsbG93IG1hcHBpbmdzIHRvIHdvcmsgcmVjdXJzaXZlbHkKK3wncmVwb3J0J3wJCSAgICAgdGhyZXNob2xkIGZvciByZXBvcnRpbmcgbnIuIG9mIGxpbmVzIGNoYW5nZWQKK3wncmVzdG9yZXNjcmVlbid8IHwncnMnfCAgICAgV2luMzI6IHJlc3RvcmUgc2NyZWVuIHdoZW4gZXhpdGluZworfCdyZXZpbnMnfAkgIHwncmknfCAgICAgaW5zZXJ0aW5nIGNoYXJhY3RlcnMgd2lsbCB3b3JrIGJhY2t3YXJkcworfCdyaWdodGxlZnQnfAkgIHwncmwnfCAgICAgd2luZG93IGlzIHJpZ2h0LXRvLWxlZnQgb3JpZW50ZWQKK3wncmlnaHRsZWZ0Y21kJ3wgIHwncmxjJ3wgICAgY29tbWFuZHMgZm9yIHdoaWNoIGVkaXRpbmcgd29ya3MgcmlnaHQtdG8tbGVmdAorfCdydWxlcid8CSAgfCdydSd8ICAgICBzaG93IGN1cnNvciBsaW5lIGFuZCBjb2x1bW4gaW4gdGhlIHN0YXR1cyBsaW5lCit8J3J1bGVyZm9ybWF0J3wJICB8J3J1Zid8ICAgIGN1c3RvbSBmb3JtYXQgZm9yIHRoZSBydWxlcgorfCdydW50aW1lcGF0aCd8ICAgfCdydHAnfCAgICBsaXN0IG9mIGRpcmVjdG9yaWVzIHVzZWQgZm9yIHJ1bnRpbWUgZmlsZXMKK3wnc2Nyb2xsJ3wJICB8J3Njcid8ICAgIGxpbmVzIHRvIHNjcm9sbCB3aXRoIENUUkwtVSBhbmQgQ1RSTC1ECit8J3Njcm9sbGJpbmQnfAkgIHwnc2NiJ3wgICAgc2Nyb2xsIGluIHdpbmRvdyBhcyBvdGhlciB3aW5kb3dzIHNjcm9sbAorfCdzY3JvbGxqdW1wJ3wJICB8J3NqJ3wgICAgIG1pbmltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbAorfCdzY3JvbGxvZmYnfAkgIHwnc28nfCAgICAgbWluaW11bSBuci4gb2YgbGluZXMgYWJvdmUgYW5kIGJlbG93IGN1cnNvcgorfCdzY3JvbGxvcHQnfAkgIHwnc2JvJ3wgICAgaG93ICdzY3JvbGxiaW5kJyBzaG91bGQgYmVoYXZlCit8J3NlY3Rpb25zJ3wJICB8J3NlY3QnfCAgIG5yb2ZmIG1hY3JvcyB0aGF0IHNlcGFyYXRlIHNlY3Rpb25zCit8J3NlY3VyZSd8CQkgICAgIHNlY3VyZSBtb2RlIGZvciByZWFkaW5nIC52aW1yYyBpbiBjdXJyZW50IGRpcgorfCdzZWxlY3Rpb24nfAkgIHwnc2VsJ3wgICAgd2hhdCB0eXBlIG9mIHNlbGVjdGlvbiB0byB1c2UKK3wnc2VsZWN0bW9kZSd8CSAgfCdzbG0nfCAgICB3aGVuIHRvIHVzZSBTZWxlY3QgbW9kZSBpbnN0ZWFkIG9mIFZpc3VhbCBtb2RlCit8J3Nlc3Npb25vcHRpb25zJ3wgfCdzc29wJ3wgIG9wdGlvbnMgZm9yIHw6bWtzZXNzaW9ufAorfCdzaGVsbCd8CSAgfCdzaCd8ICAgICBuYW1lIG9mIHNoZWxsIHRvIHVzZSBmb3IgZXh0ZXJuYWwgY29tbWFuZHMKK3wnc2hlbGxjbWRmbGFnJ3wgIHwnc2hjZid8ICAgZmxhZyB0byBzaGVsbCB0byBleGVjdXRlIG9uZSBjb21tYW5kCit8J3NoZWxscGlwZSd8CSAgfCdzcCd8ICAgICBzdHJpbmcgdG8gcHV0IG91dHB1dCBvZiAiOm1ha2UiIGluIGVycm9yIGZpbGUKK3wnc2hlbGxxdW90ZSd8CSAgfCdzaHEnfCAgICBxdW90ZSBjaGFyYWN0ZXIocykgZm9yIGFyb3VuZCBzaGVsbCBjb21tYW5kCit8J3NoZWxscmVkaXInfAkgIHwnc3JyJ3wgICAgc3RyaW5nIHRvIHB1dCBvdXRwdXQgb2YgZmlsdGVyIGluIGEgdGVtcCBmaWxlCit8J3NoZWxsc2xhc2gnfAkgIHwnc3NsJ3wgICAgdXNlIGZvcndhcmQgc2xhc2ggZm9yIHNoZWxsIGZpbGUgbmFtZXMKK3wnc2hlbGx0eXBlJ3wJICB8J3N0J3wgICAgIEFtaWdhOiBpbmZsdWVuY2VzIGhvdyB0byB1c2UgYSBzaGVsbAorfCdzaGVsbHhxdW90ZSd8CSAgfCdzeHEnfCAgICBsaWtlICdzaGVsbHF1b3RlJywgYnV0IGluY2x1ZGUgcmVkaXJlY3Rpb24KK3wnc2hpZnRyb3VuZCd8CSAgfCdzcid8ICAgICByb3VuZCBpbmRlbnQgdG8gbXVsdGlwbGUgb2Ygc2hpZnR3aWR0aAorfCdzaGlmdHdpZHRoJ3wJICB8J3N3J3wgICAgIG51bWJlciBvZiBzcGFjZXMgdG8gdXNlIGZvciAoYXV0bylpbmRlbnQgc3RlcAorfCdzaG9ydG1lc3MnfAkgIHwnc2htJ3wgICAgbGlzdCBvZiBmbGFncywgcmVkdWNlIGxlbmd0aCBvZiBtZXNzYWdlcworfCdzaG9ydG5hbWUnfAkgIHwnc24nfCAgICAgbm9uLU1TLURPUzogRmlsZW5hbWVzIGFzc3VtZWQgdG8gYmUgOC4zIGNoYXJzCit8J3Nob3dicmVhayd8CSAgfCdzYnInfCAgICBzdHJpbmcgdG8gdXNlIGF0IHRoZSBzdGFydCBvZiB3cmFwcGVkIGxpbmVzCit8J3Nob3djbWQnfAkgIHwnc2MnfCAgICAgc2hvdyAocGFydGlhbCkgY29tbWFuZCBpbiBzdGF0dXMgbGluZQorfCdzaG93ZnVsbHRhZyd8CSAgfCdzZnQnfCAgICBzaG93IGZ1bGwgdGFnIHBhdHRlcm4gd2hlbiBjb21wbGV0aW5nIHRhZworfCdzaG93bWF0Y2gnfAkgIHwnc20nfCAgICAgYnJpZWZseSBqdW1wIHRvIG1hdGNoaW5nIGJyYWNrZXQgaWYgaW5zZXJ0IG9uZQorfCdzaG93bW9kZSd8CSAgfCdzbWQnfCAgICBtZXNzYWdlIG9uIHN0YXR1cyBsaW5lIHRvIHNob3cgY3VycmVudCBtb2RlCit8J3NpZGVzY3JvbGwnfAkgIHwnc3MnfCAgICAgbWluaW11bSBudW1iZXIgb2YgY29sdW1ucyB0byBzY3JvbGwgaG9yaXpvbnRhbAorfCdzaWRlc2Nyb2xsb2ZmJ3wgfCdzaXNvJ3wgICBtaW4uIG5yLiBvZiBjb2x1bW5zIHRvIGxlZnQgYW5kIHJpZ2h0IG9mIGN1cnNvcgorfCdzbWFydGNhc2UnfAkgIHwnc2NzJ3wgICAgbm8gaWdub3JlIGNhc2Ugd2hlbiBwYXR0ZXJuIGhhcyB1cHBlcmNhc2UKK3wnc21hcnRpbmRlbnQnfCAgIHwnc2knfCAgICAgc21hcnQgYXV0b2luZGVudGluZyBmb3IgQyBwcm9ncmFtcworfCdzbWFydHRhYid8CSAgfCdzdGEnfCAgICB1c2UgJ3NoaWZ0d2lkdGgnIHdoZW4gaW5zZXJ0aW5nIDxUYWI+Cit8J3NvZnR0YWJzdG9wJ3wJICB8J3N0cyd8ICAgIG51bWJlciBvZiBzcGFjZXMgdGhhdCA8VGFiPiB1c2VzIHdoaWxlIGVkaXRpbmcKK3wnc3BsaXRiZWxvdyd8CSAgfCdzYid8ICAgICBuZXcgd2luZG93IGZyb20gc3BsaXQgaXMgYmVsb3cgdGhlIGN1cnJlbnQgb25lCit8J3NwbGl0cmlnaHQnfAkgIHwnc3ByJ3wgICAgbmV3IHdpbmRvdyBpcyBwdXQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgb25lCit8J3N0YXJ0b2ZsaW5lJ3wgICB8J3NvbCd8ICAgIGNvbW1hbmRzIG1vdmUgY3Vyc29yIHRvIGZpcnN0IGJsYW5rIGluIGxpbmUKK3wnc3RhdHVzbGluZSd8CSAgfCdzdGwnfCAgICBjdXN0b20gZm9ybWF0IGZvciB0aGUgc3RhdHVzIGxpbmUKK3wnc3VmZml4ZXMnfAkgIHwnc3UnfCAgICAgc3VmZml4ZXMgdGhhdCBhcmUgaWdub3JlZCB3aXRoIG11bHRpcGxlIG1hdGNoCit8J3N1ZmZpeGVzYWRkJ3wgICB8J3N1YSd8ICAgIHN1ZmZpeGVzIGFkZGVkIHdoZW4gc2VhcmNoaW5nIGZvciBhIGZpbGUKK3wnc3dhcGZpbGUnfAkgIHwnc3dmJ3wgICAgd2hldGhlciB0byB1c2UgYSBzd2FwZmlsZSBmb3IgYSBidWZmZXIKK3wnc3dhcHN5bmMnfAkgIHwnc3dzJ3wgICAgaG93IHRvIHN5bmMgdGhlIHN3YXAgZmlsZQorfCdzd2l0Y2hidWYnfAkgIHwnc3diJ3wgICAgc2V0cyBiZWhhdmlvciB3aGVuIHN3aXRjaGluZyB0byBhbm90aGVyIGJ1ZmZlcgorfCdzeW50YXgnfAkgIHwnc3luJ3wgICAgc3ludGF4IHRvIGJlIGxvYWRlZCBmb3IgY3VycmVudCBidWZmZXIKK3wndGFic3RvcCd8CSAgfCd0cyd8ICAgICBudW1iZXIgb2Ygc3BhY2VzIHRoYXQgPFRhYj4gaW4gZmlsZSB1c2VzCit8J3RhZ2JzZWFyY2gnfAkgIHwndGJzJ3wgICAgdXNlIGJpbmFyeSBzZWFyY2hpbmcgaW4gdGFncyBmaWxlcworfCd0YWdsZW5ndGgnfAkgIHwndGwnfCAgICAgbnVtYmVyIG9mIHNpZ25pZmljYW50IGNoYXJhY3RlcnMgZm9yIGEgdGFnCit8J3RhZ3JlbGF0aXZlJ3wgICB8J3RyJ3wgICAgIGZpbGUgbmFtZXMgaW4gdGFnIGZpbGUgYXJlIHJlbGF0aXZlCit8J3RhZ3MnfAkgIHwndGFnJ3wgICAgbGlzdCBvZiBmaWxlIG5hbWVzIHVzZWQgYnkgdGhlIHRhZyBjb21tYW5kCit8J3RhZ3N0YWNrJ3wJICB8J3Rnc3QnfCAgIHB1c2ggdGFncyBvbnRvIHRoZSB0YWcgc3RhY2sKK3wndGVybSd8CQkgICAgIG5hbWUgb2YgdGhlIHRlcm1pbmFsCit8J3Rlcm1iaWRpJ3wJICB8J3RiaWRpJ3wgIHRlcm1pbmFsIHRha2VzIGNhcmUgb2YgYmktZGlyZWN0aW9uYWxpdHkKK3wndGVybWVuY29kaW5nJ3wgIHwndGVuYyd8ICAgY2hhcmFjdGVyIGVuY29kaW5nIHVzZWQgYnkgdGhlIHRlcm1pbmFsCit8J3RlcnNlJ3wJCSAgICAgc2hvcnRlbiBzb21lIG1lc3NhZ2VzCit8J3RleHRhdXRvJ3wJICB8J3RhJ3wgICAgIG9ic29sZXRlLCB1c2UgJ2ZpbGVmb3JtYXRzJworfCd0ZXh0bW9kZSd8CSAgfCd0eCd8ICAgICBvYnNvbGV0ZSwgdXNlICdmaWxlZm9ybWF0JworfCd0ZXh0d2lkdGgnfAkgIHwndHcnfCAgICAgbWF4aW11bSB3aWR0aCBvZiB0ZXh0IHRoYXQgaXMgYmVpbmcgaW5zZXJ0ZWQKK3wndGhlc2F1cnVzJ3wJICB8J3Rzcid8ICAgIGxpc3Qgb2YgdGhlc2F1cnVzIGZpbGVzIGZvciBrZXl3b3JkIGNvbXBsZXRpb24KK3wndGlsZGVvcCd8CSAgfCd0b3AnfCAgICB0aWxkZSBjb21tYW5kICJ+IiBiZWhhdmVzIGxpa2UgYW4gb3BlcmF0b3IKK3wndGltZW91dCd8CSAgfCd0byd8ICAgICB0aW1lIG91dCBvbiBtYXBwaW5ncyBhbmQga2V5IGNvZGVzCit8J3RpbWVvdXRsZW4nfAkgIHwndG0nfCAgICAgdGltZSBvdXQgdGltZSBpbiBtaWxsaXNlY29uZHMKK3wndGl0bGUnfAkJICAgICBsZXQgVmltIHNldCB0aGUgdGl0bGUgb2YgdGhlIHdpbmRvdworfCd0aXRsZWxlbid8CQkgICAgIHBlcmNlbnRhZ2Ugb2YgJ2NvbHVtbnMnIHVzZWQgZm9yIHdpbmRvdyB0aXRsZQorfCd0aXRsZW9sZCd8CQkgICAgIG9sZCB0aXRsZSwgcmVzdG9yZWQgd2hlbiBleGl0aW5nCit8J3RpdGxlc3RyaW5nJ3wJCSAgICAgc3RyaW5nIHRvIHVzZSBmb3IgdGhlIFZpbSB3aW5kb3cgdGl0bGUKK3wndG9vbGJhcid8CSAgfCd0Yid8ICAgICBHVUk6IHdoaWNoIGl0ZW1zIHRvIHNob3cgaW4gdGhlIHRvb2xiYXIKK3wndG9vbGJhcmljb25zaXplJ3wgfCd0YmlzJ3wgc2l6ZSBvZiB0aGUgdG9vbGJhciBpY29ucyAoZm9yIEdUSyAyIG9ubHkpCit8J3R0aW1lb3V0J3wJCSAgICAgdGltZSBvdXQgb24gbWFwcGluZ3MKK3wndHRpbWVvdXRsZW4nfAkgIHwndHRtJ3wgICAgdGltZSBvdXQgdGltZSBmb3Iga2V5IGNvZGVzIGluIG1pbGxpc2Vjb25kcworfCd0dHlidWlsdGluJ3wJICB8J3RiaSd8ICAgIHVzZSBidWlsdC1pbiB0ZXJtY2FwIGJlZm9yZSBleHRlcm5hbCB0ZXJtY2FwCit8J3R0eWZhc3QnfAkgIHwndGYnfCAgICAgaW5kaWNhdGVzIGEgZmFzdCB0ZXJtaW5hbCBjb25uZWN0aW9uCit8J3R0eW1vdXNlJ3wJICB8J3R0eW0nfCAgIHR5cGUgb2YgbW91c2UgY29kZXMgZ2VuZXJhdGVkCit8J3R0eXNjcm9sbCd8CSAgfCd0c2wnfCAgICBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyBmb3IgYSBzY3JvbGwKK3wndHR5dHlwZSd8CSAgfCd0dHknfCAgICBhbGlhcyBmb3IgJ3Rlcm0nCit8J3VuZG9sZXZlbHMnfAkgIHwndWwnfCAgICAgbWF4aW11bSBudW1iZXIgb2YgY2hhbmdlcyB0aGF0IGNhbiBiZSB1bmRvbmUKK3wndXBkYXRlY291bnQnfCAgIHwndWMnfCAgICAgYWZ0ZXIgdGhpcyBtYW55IGNoYXJhY3RlcnMgZmx1c2ggc3dhcCBmaWxlCit8J3VwZGF0ZXRpbWUnfAkgIHwndXQnfCAgICAgYWZ0ZXIgdGhpcyBtYW55IG1pbGxpc2Vjb25kcyBmbHVzaCBzd2FwIGZpbGUKK3wndmVyYm9zZSd8CSAgfCd2YnMnfCAgICBnaXZlIGluZm9ybWF0aXZlIG1lc3NhZ2VzCit8J3ZpZXdkaXInfAkgIHwndmRpcid8ICAgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIGZpbGVzIHdpdGggOm1rdmlldworfCd2aWV3b3B0aW9ucyd8ICAgfCd2b3AnfCAgICBzcGVjaWZpZXMgd2hhdCB0byBzYXZlIGZvciA6bWt2aWV3Cit8J3ZpbWluZm8nfAkgIHwndmknfCAgICAgdXNlIC52aW1pbmZvIGZpbGUgdXBvbiBzdGFydHVwIGFuZCBleGl0aW5nCit8J3ZpcnR1YWxlZGl0J3wgICB8J3ZlJ3wgICAgIHdoZW4gdG8gdXNlIHZpcnR1YWwgZWRpdGluZworfCd2aXN1YWxiZWxsJ3wJICB8J3ZiJ3wgICAgIHVzZSB2aXN1YWwgYmVsbCBpbnN0ZWFkIG9mIGJlZXBpbmcKK3wnd2Fybid8CQkgICAgIHdhcm4gZm9yIHNoZWxsIGNvbW1hbmQgd2hlbiBidWZmZXIgd2FzIGNoYW5nZWQKK3wnd2VpcmRpbnZlcnQnfCAgIHwnd2knfCAgICAgZm9yIHRlcm1pbmFscyB0aGF0IGhhdmUgd2VpcmQgaW52ZXJzaW9uIG1ldGhvZAorfCd3aGljaHdyYXAnfAkgIHwnd3cnfCAgICAgYWxsb3cgc3BlY2lmaWVkIGtleXMgdG8gY3Jvc3MgbGluZSBib3VuZGFyaWVzCit8J3dpbGRjaGFyJ3wJICB8J3djJ3wgICAgIGNvbW1hbmQtbGluZSBjaGFyYWN0ZXIgZm9yIHdpbGRjYXJkIGV4cGFuc2lvbgorfCd3aWxkY2hhcm0nfAkgIHwnd2NtJ3wgICAgbGlrZSAnd2lsZGNoYXInIGJ1dCBhbHNvIHdvcmtzIHdoZW4gbWFwcGVkCit8J3dpbGRpZ25vcmUnfAkgIHwnd2lnJ3wgICAgZmlsZXMgbWF0Y2hpbmcgdGhlc2UgcGF0dGVybnMgYXJlIG5vdCBjb21wbGV0ZWQKK3wnd2lsZG1lbnUnfAkgIHwnd21udSd8ICAgdXNlIG1lbnUgZm9yIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uCit8J3dpbGRtb2RlJ3wJICB8J3dpbSd8ICAgIG1vZGUgZm9yICd3aWxkY2hhcicgY29tbWFuZC1saW5lIGV4cGFuc2lvbgorfCd3aW5hbHRrZXlzJ3wJICB8J3dhayd8ICAgIHdoZW4gdGhlIHdpbmRvd3Mgc3lzdGVtIGhhbmRsZXMgQUxUIGtleXMKK3wnd2luaGVpZ2h0J3wJICB8J3doJ3wgICAgIG1pbmltdW0gbnVtYmVyIG9mIGxpbmVzIGZvciB0aGUgY3VycmVudCB3aW5kb3cKK3wnd2luZml4aGVpZ2h0J3wgIHwnd2ZoJ3wgICAga2VlcCB3aW5kb3cgaGVpZ2h0IHdoZW4gb3BlbmluZy9jbG9zaW5nIHdpbmRvd3MKK3wnd2lubWluaGVpZ2h0J3wgIHwnd21oJ3wgICAgbWluaW11bSBudW1iZXIgb2YgbGluZXMgZm9yIGFueSB3aW5kb3cKK3wnd2lubWlud2lkdGgnfCAgIHwnd213J3wgICAgbWluaW1hbCBudW1iZXIgb2YgY29sdW1ucyBmb3IgYW55IHdpbmRvdworfCd3aW53aWR0aCd8CSAgfCd3aXcnfCAgICBtaW5pbWFsIG51bWJlciBvZiBjb2x1bW5zIGZvciBjdXJyZW50IHdpbmRvdworfCd3cmFwJ3wJCSAgICAgbG9uZyBsaW5lcyB3cmFwIGFuZCBjb250aW51ZSBvbiB0aGUgbmV4dCBsaW5lCit8J3dyYXBtYXJnaW4nfAkgIHwnd20nfCAgICAgY2hhcnMgZnJvbSB0aGUgcmlnaHQgd2hlcmUgd3JhcHBpbmcgc3RhcnRzCit8J3dyYXBzY2FuJ3wJICB8J3dzJ3wgICAgIHNlYXJjaGVzIHdyYXAgYXJvdW5kIHRoZSBlbmQgb2YgdGhlIGZpbGUKK3wnd3JpdGUnfAkJICAgICB3cml0aW5nIHRvIGEgZmlsZSBpcyBhbGxvd2VkCit8J3dyaXRlYW55J3wJICB8J3dhJ3wgICAgIHdyaXRlIHRvIGZpbGUgd2l0aCBubyBuZWVkIGZvciAiISIgb3ZlcnJpZGUKK3wnd3JpdGViYWNrdXAnfCAgIHwnd2InfCAgICAgbWFrZSBhIGJhY2t1cCBiZWZvcmUgb3ZlcndyaXRpbmcgYSBmaWxlCit8J3dyaXRlZGVsYXknfAkgIHwnd2QnfCAgICAgZGVsYXkgdGhpcyBtYW55IG1zZWMgZm9yIGVhY2ggY2hhciAoZm9yIGRlYnVnKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV91cioJCVVuZG8vUmVkbyBjb21tYW5kcworCit8dXwJICBOICB1CQl1bmRvIGxhc3QgTiBjaGFuZ2VzCit8Q1RSTC1SfCAgTiAgQ1RSTC1SCXJlZG8gbGFzdCBOIHVuZG9uZSBjaGFuZ2VzCit8VXwJICAgICBVCQlyZXN0b3JlIGxhc3QgY2hhbmdlZCBsaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2V0KgkJRXh0ZXJuYWwgY29tbWFuZHMKKworfDpzaGVsbHwJOnNoW2VsbF0Jc3RhcnQgYSBzaGVsbAorfDohfAkJOiF7Y29tbWFuZH0JZXhlY3V0ZSB7Y29tbWFuZH0gd2l0aCBhIHNoZWxsCit8S3wJCSAgIEsJCWxvb2t1cCBrZXl3b3JkIHVuZGVyIHRoZSBjdXJzb3Igd2l0aAorCQkJCSAgICdrZXl3b3JkcHJnJyBwcm9ncmFtIChkZWZhdWx0OiAibWFuIikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfcWYqCQlRdWlja2ZpeCBjb21tYW5kcworCit8OmNjfAkJOmNjIFtucl0JZGlzcGxheSBlcnJvciBbbnJdIChkZWZhdWx0IGlzIHRoZSBzYW1lIGFnYWluKQorfDpjbmV4dHwJOmNuCQlkaXNwbGF5IHRoZSBuZXh0IGVycm9yCit8OmNwcmV2aW91c3wJOmNwCQlkaXNwbGF5IHRoZSBwcmV2aW91cyBlcnJvcgorfDpjbGlzdHwJOmNsCQlsaXN0IGFsbCBlcnJvcnMKK3w6Y2ZpbGV8CTpjZgkJcmVhZCBlcnJvcnMgZnJvbSB0aGUgZmlsZSAnZXJyb3JmaWxlJworfDpjcXVpdHwJOmNxCQlxdWl0IHdpdGhvdXQgd3JpdGluZyBhbmQgcmV0dXJuIGVycm9yIGNvZGUgKHRvCisJCQkJICAgdGhlIGNvbXBpbGVyKQorfDptYWtlfAkJOm1ha2UgW2FyZ3NdCXN0YXJ0IG1ha2UsIHJlYWQgZXJyb3JzLCBhbmQganVtcCB0byBmaXJzdAorCQkJCSAgIGVycm9yCit8OmdyZXB8CQk6Z3JbZXBdIFthcmdzXQlleGVjdXRlICdncmVwcHJnJyB0byBmaW5kIG1hdGNoZXMgYW5kIGp1bXAgdG8KKwkJCQkgICB0aGUgZmlyc3Qgb25lLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV92YyoJCVZhcmlvdXMgY29tbWFuZHMKKworfENUUkwtTHwJICAgQ1RSTC1MCUNsZWFyIGFuZCByZWRyYXcgdGhlIHNjcmVlbi4KK3xDVFJMLUd8CSAgIENUUkwtRwlzaG93IGN1cnJlbnQgZmlsZSBuYW1lICh3aXRoIHBhdGgpIGFuZCBjdXJzb3IKKwkJCQkgICBwb3NpdGlvbgorfGdhfAkJICAgZ2EJCXNob3cgYXNjaWkgdmFsdWUgb2YgY2hhcmFjdGVyIHVuZGVyIGN1cnNvciBpbgorCQkJCSAgIGRlY2ltYWwsIGhleCwgYW5kIG9jdGFsCit8Z19DVFJMLUd8CSAgIGcgQ1RSTC1HCXNob3cgY3Vyc29yIGNvbHVtbiwgbGluZSwgYW5kIGNoYXJhY3RlcgorCQkJCSAgIHBvc2l0aW9uCit8Q1RSTC1DfAkgICBDVFJMLUMJZHVyaW5nIHNlYXJjaGVzOiBJbnRlcnJ1cHQgdGhlIHNlYXJjaAorfGRvcy1DVFJMLUJyZWFrfCAgIENUUkwtQnJlYWsJTVMtRE9TOiBkdXJpbmcgc2VhcmNoZXM6IEludGVycnVwdCB0aGUgc2VhcmNoCit8PERlbD58CQkgICA8RGVsPgl3aGlsZSBlbnRlcmluZyBhIGNvdW50OiBkZWxldGUgbGFzdCBjaGFyYWN0ZXIKK3w6dmVyc2lvbnwJOnZlW3JzaW9uXQlzaG93IHZlcnNpb24gaW5mb3JtYXRpb24KK3w6bW9kZXwJCTptb2RlIE4JCU1TLURPUzogc2V0IHNjcmVlbiBtb2RlIHRvIE4gKG51bWJlciwgQzgwLAorCQkJCSAgIEM0MzUwLCBldGMuKQorfDpub3JtYWx8CTpub3JtW2FsXVshXSB7Y29tbWFuZHN9CisJCQkJRXhlY3V0ZSBOb3JtYWwgbW9kZSBjb21tYW5kcy4KK3xRfAkJUQkJc3dpdGNoIHRvICJFeCIgbW9kZQorCit8OnJlZGlyfAk6cmVkaXIgPntmaWxlfQkJcmVkaXJlY3QgbWVzc2FnZXMgdG8ge2ZpbGV9Cit8OnNpbGVudHwJOnNpbGVudFshXSB7Y29tbWFuZH0JZXhlY3V0ZSB7Y29tbWFuZH0gc2lsZW50bHkKK3w6Y29uZmlybXwJOmNvbmZpcm0ge2NvbW1hbmR9CXF1aXQsIHdyaXRlLCBldGMuLCBhc2tpbmcgYWJvdXQKKwkJCQkJdW5zYXZlZCBjaGFuZ2VzIG9yIHJlYWQtb25seSBmaWxlcy4KK3w6YnJvd3NlfAk6YnJvd3NlIHtjb21tYW5kfQlvcGVuL3JlYWQvd3JpdGUgZmlsZSwgdXNpbmcgYQorCQkJCQlmaWxlIHNlbGVjdGlvbiBkaWFsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfY2UqCQlDb21tYW5kLWxpbmUgZWRpdGluZworCit8Y188RXNjPnwJPEVzYz4JCSAgIGFiYW5kb24gY29tbWFuZC1saW5lIChpZiAnd2lsZGNoYXInIGlzCisJCQkJICAgICAgPEVzYz4sIHR5cGUgaXQgdHdpY2UpCisKK3xjX0NUUkwtVnwJQ1RSTC1WIHtjaGFyfQkgICBpbnNlcnQge2NoYXJ9IGxpdGVyYWxseQorfGNfQ1RSTC1WfAlDVFJMLVYge251bWJlcn0gICAgZW50ZXIgZGVjaW1hbCB2YWx1ZSBvZiBjaGFyYWN0ZXIgKHVwIHRvCisJCQkJICAgICAgdGhyZWUgZGlnaXRzKQorfGNfQ1RSTC1LfAlDVFJMLUsge2NoYXIxfSB7Y2hhcjJ9CisJCQkJICAgZW50ZXIgZGlncmFwaCAoU2VlIHxRX2RpfCkKK3xjX0NUUkwtUnwJQ1RSTC1SIHswLTlhLXoiJSM6LT19CisJCQkJICAgaW5zZXJ0IHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyCisKK3xjXzxMZWZ0PnwJPExlZnQ+LzxSaWdodD4JICAgY3Vyc29yIGxlZnQvcmlnaHQKK3xjXzxTLUxlZnQ+fAk8Uy1MZWZ0Pi88Uy1SaWdodD4gY3Vyc29yIG9uZSB3b3JkIGxlZnQvcmlnaHQKK3xjX0NUUkwtQnwJQ1RSTC1CL0NUUkwtRQkgICBjdXJzb3IgdG8gYmVnaW5uaW5nL2VuZCBvZiBjb21tYW5kLWxpbmUKKworfGNfPEJTPnwJPEJTPgkJICAgZGVsZXRlIHRoZSBjaGFyYWN0ZXIgaW4gZnJvbnQgb2YgdGhlIGN1cnNvcgorfGNfPERlbD58CTxEZWw+CQkgICBkZWxldGUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yCit8Y19DVFJMLVd8CUNUUkwtVwkJICAgZGVsZXRlIHRoZSB3b3JkIGluIGZyb250IG9mIHRoZSBjdXJzb3IKK3xjX0NUUkwtVXwJQ1RSTC1VCQkgICByZW1vdmUgYWxsIGNoYXJhY3RlcnMKKworfGNfPFVwPnwJPFVwPi88RG93bj4JICAgcmVjYWxsIG9sZGVyL25ld2VyIGNvbW1hbmQtbGluZSB0aGF0IHN0YXJ0cworCQkJCSAgICAgIHdpdGggY3VycmVudCBjb21tYW5kCit8Y188Uy1VcD58CTxTLVVwPi88Uy1Eb3duPgkgICByZWNhbGwgb2xkZXIvbmV3ZXIgY29tbWFuZC1saW5lIGZyb20gaGlzdG9yeQorfDpoaXN0b3J5fAk6aGlzW3RvcnldCSAgIHNob3cgb2xkZXIgY29tbWFuZC1saW5lcworCitDb250ZXh0LXNlbnNpdGl2ZSBjb21wbGV0aW9uIG9uIHRoZSBjb21tYW5kLWxpbmU6CisKK3xjX3dpbGRjaGFyfAknd2lsZGNoYXInICAoZGVmYXVsdDogPFRhYj4pCisJCQkJZG8gY29tcGxldGlvbiBvbiB0aGUgcGF0dGVybiBpbiBmcm9udCBvZiB0aGUKKwkJCQkgICBjdXJzb3IuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgbWF0Y2hlcywKKwkJCQkgICBiZWVwIGFuZCBzaG93IHRoZSBmaXJzdCBvbmU7IGZ1cnRoZXIKKwkJCQkgICAnd2lsZGNoYXInIHdpbGwgc2hvdyB0aGUgbmV4dCBvbmVzLgorfGNfQ1RSTC1EfAlDVFJMLUQJCWxpc3QgYWxsIG5hbWVzIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4gaW4KKwkJCQkgICBmcm9udCBvZiB0aGUgY3Vyc29yCit8Y19DVFJMLUF8CUNUUkwtQQkJaW5zZXJ0IGFsbCBuYW1lcyB0aGF0IG1hdGNoIHBhdHRlcm4gaW4gZnJvbnQKKwkJCQkgICBvZiBjdXJzb3IKK3xjX0NUUkwtTHwJQ1RSTC1MCQlpbnNlcnQgbG9uZ2VzdCBjb21tb24gcGFydCBvZiBuYW1lcyB0aGF0CisJCQkJICAgbWF0Y2ggcGF0dGVybgorfGNfQ1RSTC1OfAlDVFJMLU4JCWFmdGVyICd3aWxkY2hhcicgd2l0aCBtdWx0aXBsZSBtYXRjaGVzOiBnbworCQkJCSAgIHRvIG5leHQgbWF0Y2gKK3xjX0NUUkwtUHwJQ1RSTC1QCQlhZnRlciAnd2lsZGNoYXInIHdpdGggbXVsdGlwbGUgbWF0Y2hlczogZ28KKwkJCQkgICB0byBwcmV2aW91cyBtYXRjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9yYSoJCUV4IHJhbmdlcworCit8OnJhbmdlfAksCQlzZXBhcmF0ZXMgdHdvIGxpbmUgbnVtYmVycworfDpyYW5nZXwJOwkJaWRlbSwgc2V0IGN1cnNvciB0byB0aGUgZmlyc3QgbGluZSBudW1iZXIKKwkJCQliZWZvcmUgaW50ZXJwcmV0aW5nIHRoZSBzZWNvbmQgb25lCisKK3w6cmFuZ2V8CXtudW1iZXJ9CWFuIGFic29sdXRlIGxpbmUgbnVtYmVyCit8OnJhbmdlfAkuCQl0aGUgY3VycmVudCBsaW5lCit8OnJhbmdlfAkkCQl0aGUgbGFzdCBsaW5lIGluIHRoZSBmaWxlCit8OnJhbmdlfAklCQllcXVhbCB0byAxLCQgKHRoZSBlbnRpcmUgZmlsZSkKK3w6cmFuZ2V8CSoJCWVxdWFsIHRvICc8LCc+ICh2aXN1YWwgYXJlYSkKK3w6cmFuZ2V8CSd0CQlwb3NpdGlvbiBvZiBtYXJrIHQKK3w6cmFuZ2V8CS97cGF0dGVybn1bL10JdGhlIG5leHQgbGluZSB3aGVyZSB7cGF0dGVybn0gbWF0Y2hlcworfDpyYW5nZXwJP3twYXR0ZXJufVs/XQl0aGUgcHJldmlvdXMgbGluZSB3aGVyZSB7cGF0dGVybn0gbWF0Y2hlcworCit8OnJhbmdlfAkrW251bV0JCWFkZCBbbnVtXSB0byB0aGUgcHJlY2VkaW5nIGxpbmUgbnVtYmVyCisJCQkJICAgKGRlZmF1bHQ6IDEpCit8OnJhbmdlfAktW251bV0JCXN1YnRyYWN0IFtudW1dIGZyb20gdGhlIHByZWNlZGluZyBsaW5lCisJCQkJICAgbnVtYmVyIChkZWZhdWx0OiAxKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9leCoJCVNwZWNpYWwgRXggY2hhcmFjdGVycworCit8OmJhcnwJICAgIHwJCXNlcGFyYXRlcyB0d28gY29tbWFuZHMgKG5vdCBmb3IgIjpnbG9iYWwiIGFuZCAiOiEiKQorfDpxdW90ZXwgICAgIgkJYmVnaW5zIGNvbW1lbnQKKworfDpfJXwJICAgICUJCWN1cnJlbnQgZmlsZSBuYW1lIChvbmx5IHdoZXJlIGEgZmlsZSBuYW1lIGlzIGV4cGVjdGVkKQorfDpfI3wJICAgICNbbnVtXQlhbHRlcm5hdGUgZmlsZSBuYW1lIFtudW1dIChvbmx5IHdoZXJlIGEgZmlsZSBuYW1lIGlzCisJCQkgICBleHBlY3RlZCkKKwlOb3RlOiBUaGUgbmV4dCBmb3VyIGFyZSB0eXBlZCBsaXRlcmFsbHk7IHRoZXNlIGFyZSBub3Qgc3BlY2lhbCBrZXlzIQorfDo8Y3dvcmQ+fCAgPGN3b3JkPgl3b3JkIHVuZGVyIHRoZSBjdXJzb3IgKG9ubHkgd2hlcmUgYSBmaWxlIG5hbWUgaXMKKwkJCSAgIGV4cGVjdGVkKQorfDo8Y1dPUkQ+fCAgPGNXT1JEPglXT1JEIHVuZGVyIHRoZSBjdXJzb3IgKG9ubHkgd2hlcmUgYSBmaWxlIG5hbWUgaXMKKwkJCSAgIGV4cGVjdGVkKSAoc2VlIHxXT1JEfCkKK3w6PGNmaWxlPnwgIDxjZmlsZT4JZmlsZSBuYW1lIHVuZGVyIHRoZSBjdXJzb3IgKG9ubHkgd2hlcmUgYSBmaWxlIG5hbWUgaXMKKwkJCSAgIGV4cGVjdGVkKQorfDo8YWZpbGU+fCAgPGFmaWxlPglmaWxlIG5hbWUgZm9yIGF1dG9jb21tYW5kIChvbmx5IHdoZXJlIGEgZmlsZSBuYW1lIGlzCisJCQkgICBleHBlY3RlZCkKK3w6PHNmaWxlPnwgIDxzZmlsZT4JZmlsZSBuYW1lIG9mIGEgIjpzb3VyY2UiZCBmaWxlLCB3aXRoaW4gdGhhdCBmaWxlIChvbmx5CisJCQkgICB3aGVyZSBhIGZpbGUgbmFtZSBpcyBleHBlY3RlZCkKKworCQlBZnRlciAiJSIsICIjIiwgIjxjZmlsZT4iLCAiPHNmaWxlPiIgb3IgIjxhZmlsZT4iCisJCXw6OnB8CSAgICA6cAkJZnVsbCBwYXRoCisJCXw6Omh8CSAgICA6aAkJaGVhZCAoZmlsZSBuYW1lIHJlbW92ZWQpCisJCXw6OnR8CSAgICA6dAkJdGFpbCAoZmlsZSBuYW1lIG9ubHkpCisJCXw6OnJ8CSAgICA6cgkJcm9vdCAoZXh0ZW5zaW9uIHJlbW92ZWQpCisJCXw6OmV8CSAgICA6ZQkJZXh0ZW5zaW9uCisJCXw6OnN8CSAgICA6cy97cGF0fS97cmVwbH0vCXN1YnN0aXR1dGUge3BhdH0gd2l0aCB7cmVwbH0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfZWQqCQlFZGl0aW5nIGEgZmlsZQorCisJICAgV2l0aG91dCAhOiBGYWlsIGlmIGNoYW5nZXMgaGFzIGJlZW4gbWFkZSB0byB0aGUgY3VycmVudCBidWZmZXIuCisJICAgICAgV2l0aCAhOiBEaXNjYXJkIGFueSBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KK3w6ZWRpdF9mfCAgOmVbZGl0XVshXSB7ZmlsZX0JRWRpdCB7ZmlsZX0uCit8OmVkaXR8CSAgIDplW2RpdF1bIV0JCVJlbG9hZCB0aGUgY3VycmVudCBmaWxlLgorfDplbmV3fAkgICA6ZW5lW3ddWyFdCQlFZGl0IGEgbmV3LCB1bm5hbWVkIGJ1ZmZlci4KK3w6ZmluZHwgICAgOmZpbltkXVshXSB7ZmlsZX0JRmluZCB7ZmlsZX0gaW4gJ3BhdGgnIGFuZCBlZGl0IGl0LgorCit8Q1RSTC1efCAgIE4gICBDVFJMLV4JCUVkaXQgYWx0ZXJuYXRlIGZpbGUgTiAoZXF1aXZhbGVudCB0byAiOmUgI04iKS4KK3xnZnwJICAgICAgIGdmICBvciBdZglFZGl0IHRoZSBmaWxlIHdob3NlIG5hbWUgaXMgdW5kZXIgdGhlIGN1cnNvcgorfDpwd2R8CSAgIDpwd2QJCQlQcmludCB0aGUgY3VycmVudCBkaXJlY3RvcnkgbmFtZS4KK3w6Y2R8CSAgIDpjZCBbcGF0aF0JCUNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gW3BhdGhdLgorfDpjZC18CSAgIDpjZCAtCQlCYWNrIHRvIHByZXZpb3VzIGN1cnJlbnQgZGlyZWN0b3J5LgorfDpmaWxlfAkgICA6ZltpbGVdCQlQcmludCB0aGUgY3VycmVudCBmaWxlIG5hbWUgYW5kIHRoZSBjdXJzb3IKKwkJCQkgICBwb3NpdGlvbi4KK3w6ZmlsZXwJICAgOmZbaWxlXSB7bmFtZX0JU2V0IHRoZSBjdXJyZW50IGZpbGUgbmFtZSB0byB7bmFtZX0uCit8OmZpbGVzfCAgIDpmaWxlcwkJU2hvdyBhbHRlcm5hdGUgZmlsZSBuYW1lcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfZmwqCQlVc2luZyB0aGUgYXJndW1lbnQgbGlzdAkJCXxhcmd1bWVudC1saXN0fAorCit8OmFyZ3N8CSAgIDphcltnc10JCVByaW50IHRoZSBhcmd1bWVudCBsaXN0LCB3aXRoIHRoZSBjdXJyZW50IGZpbGUKKwkJCQkgICBpbiAiW10iLgorfDphbGx8CSAgIDphbGwgIG9yIDpzYWxsCU9wZW4gYSB3aW5kb3cgZm9yIGV2ZXJ5IGZpbGUgaW4gdGhlIGFyZyBsaXN0LgorfDp3bnwJICAgOnduW2V4dF1bIV0JCVdyaXRlIGZpbGUgYW5kIGVkaXQgbmV4dCBmaWxlLgorfDp3bnwJICAgOnduW2V4dF1bIV0ge2ZpbGV9CVdyaXRlIHRvIHtmaWxlfSBhbmQgZWRpdCBuZXh0IGZpbGUsIHVubGVzcworCQkJCSAgIHtmaWxlfSBleGlzdHMuICBXaXRoICEsIG92ZXJ3cml0ZSBleGlzdGluZworCQkJCSAgIGZpbGUuCit8OndOfAkgICA6d05bZXh0XVshXSBbZmlsZV0JV3JpdGUgZmlsZSBhbmQgZWRpdCBwcmV2aW91cyBmaWxlLgorCisJICAgICBpbiBjdXJyZW50IHdpbmRvdyAgICBpbiBuZXcgd2luZG93CX4KK3w6YXJndW1lbnR8ICA6YXJndVttZW50XSBOCSAgOnNhcltndW1lbnRdIE4JRWRpdCBmaWxlIE4KK3w6bmV4dHwJICAgICA6bltleHRdCQkgIDpzbltleHRdCQlFZGl0IG5leHQgZmlsZQorfDpuZXh0X2Z8ICAgIDpuW2V4dF0ge2FyZ2xpc3R9CSAgOnNuW2V4dF0ge2FyZ2xpc3R9CWRlZmluZSBuZXcgYXJnIGxpc3QKKwkJCQkJCQkgICBhbmQgZWRpdCBmaXJzdCBmaWxlCit8Ok5leHR8CSAgICAgOk5bZXh0XQkJICA6c05bZXh0XQkJRWRpdCBwcmV2aW91cyBmaWxlCit8OmZpcnN0fCAgICAgOmZpcltzdF0JCSAgOnNmaXJbc3RdCQlFZGl0IGZpcnN0IGZpbGUKK3w6bGFzdHwJICAgICA6bGFbc3RdCQkgIDpzbGFbc3RdCQlFZGl0IGxhc3QgZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV93cSoJCVdyaXRpbmcgYW5kIHF1aXR0aW5nCisKK3w6d3wJICA6W3JhbmdlXXdbcml0ZV1bIV0JCVdyaXRlIHRvIHRoZSBjdXJyZW50IGZpbGUuCit8OndfZnwJICA6W3JhbmdlXXdbcml0ZV0ge2ZpbGV9CVdyaXRlIHRvIHtmaWxlfSwgdW5sZXNzIGl0IGFscmVhZHkKKwkJCQkJICAgZXhpc3RzLgorfDp3X2Z8CSAgOltyYW5nZV13W3JpdGVdISB7ZmlsZX0JV3JpdGUgdG8ge2ZpbGV9LiAgT3ZlcndyaXRlIGFuIGV4aXN0aW5nCisJCQkJCSAgIGZpbGUuCit8OndfYXwJICA6W3JhbmdlXXdbcml0ZV1bIV0gPj4JCUFwcGVuZCB0byB0aGUgY3VycmVudCBmaWxlLgorfDp3X2F8CSAgOltyYW5nZV13W3JpdGVdWyFdID4+IHtmaWxlfQlBcHBlbmQgdG8ge2ZpbGV9LgorfDp3X2N8CSAgOltyYW5nZV13W3JpdGVdICF7Y21kfQlFeGVjdXRlIHtjbWR9IHdpdGggW3JhbmdlXSBsaW5lcyBhcworCQkJCQkgICBzdGFuZGFyZCBpbnB1dC4KK3w6dXB8CSAgOltyYW5nZV11cFtkYXRlXVshXQkJd3JpdGUgdG8gY3VycmVudCBmaWxlIGlmIG1vZGlmaWVkCit8OndhbGx8CSAgOndhW2xsXVshXQkJCXdyaXRlIGFsbCBjaGFuZ2VkIGJ1ZmZlcnMKKworfDpxfAkgIDpxW3VpdF0JCVF1aXQgY3VycmVudCBidWZmZXIsIHVubGVzcyBjaGFuZ2VzIGhhdmUgYmVlbgorCQkJCSAgIG1hZGUuICBFeGl0IFZpbSB3aGVuIHRoZXJlIGFyZSBubyBvdGhlcgorCQkJCSAgIG5vbi1oZWxwIGJ1ZmZlcnMKK3w6cXwJICA6cVt1aXRdIQkJUXVpdCBjdXJyZW50IGJ1ZmZlciBhbHdheXMsIGRpc2NhcmQgYW55CisJCQkJICAgY2hhbmdlcy4gIEV4aXQgVmltIHdoZW4gdGhlcmUgYXJlIG5vIG90aGVyCisJCQkJICAgbm9uLWhlbHAgYnVmZmVycworfDpxYXwJICA6cWFbbGxdCQlFeGl0IFZpbSwgdW5sZXNzIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUuCit8OnFhfAkgIDpxYVtsbF0hCQlFeGl0IFZpbSBhbHdheXMsIGRpc2NhcmQgYW55IGNoYW5nZXMuCit8OmNxfAkgIDpjcQkJCVF1aXQgd2l0aG91dCB3cml0aW5nIGFuZCByZXR1cm4gZXJyb3IgY29kZS4KKworfDp3cXwJICA6d3FbIV0JCVdyaXRlIHRoZSBjdXJyZW50IGZpbGUgYW5kIGV4aXQuCit8OndxfAkgIDp3cVshXSB7ZmlsZX0JCVdyaXRlIHRvIHtmaWxlfSBhbmQgZXhpdC4KK3w6eGl0fAkgIDp4W2l0XVshXSBbZmlsZV0JTGlrZSAiOndxIiBidXQgd3JpdGUgb25seSB3aGVuIGNoYW5nZXMgaGF2ZQorCQkJCSAgIGJlZW4gbWFkZQorfFpafAkgICAgIFpaCQkJU2FtZSBhcyAiOngiLgorfFpRfAkgICAgIFpRCQkJU2FtZSBhcyAiOnEhIi4KK3w6eGFsbHwJICA6eGFbbGxdWyFdICBvciA6d3FhbGxbIV0KKwkJCQlXcml0ZSBhbGwgY2hhbmdlZCBidWZmZXJzIGFuZCBleGl0CisKK3w6c3RvcHwJICA6c3Rbb3BdWyFdCQlTdXNwZW5kIFZJTSBvciBzdGFydCBuZXcgc2hlbGwuIElmICdhdycgb3B0aW9uCisJCQkJICAgaXMgc2V0IGFuZCBbIV0gbm90IGdpdmVuIHdyaXRlIHRoZSBidWZmZXIuCit8Q1RSTC1afCAgICAgQ1RSTC1aCQlTYW1lIGFzICI6c3RvcCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfc3QqCQlTdGFydGluZyBWSU0KKworfC12aW18CSAgIHZpbSBbb3B0aW9uc10JCXN0YXJ0IGVkaXRpbmcgd2l0aCBhbiBlbXB0eSBidWZmZXIKK3wtZmlsZXwJICAgdmltIFtvcHRpb25zXSB7ZmlsZX0gLi4Jc3RhcnQgZWRpdGluZyBvbmUgb3IgbW9yZSBmaWxlcworfC0tfAkgICB2aW0gW29wdGlvbnNdIC0JCXJlYWQgZmlsZSBmcm9tIHN0ZGluCit8LXRhZ3wJICAgdmltIFtvcHRpb25zXSAtdCB7dGFnfQllZGl0IHRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB7dGFnfQorfC1xZnwJICAgdmltIFtvcHRpb25zXSAtcSBbZm5hbWVdCXN0YXJ0IGVkaXRpbmcgaW4gUXVpY2tGaXggbW9kZSwKKwkJCQkJICAgZGlzcGxheSB0aGUgZmlyc3QgZXJyb3IKKworCVZpbSBhcmd1bWVudHM6CisKK3wtZ3VpfAktZwkJICAgIHN0YXJ0IEdVSSAoYWxzbyBhbGxvd3Mgb3RoZXIgb3B0aW9ucykKKworfC0rfAkrW251bV0JCSAgICBwdXQgdGhlIGN1cnNvciBhdCBsaW5lIFtudW1dIChkZWZhdWx0OiBsYXN0IGxpbmUpCit8LStjfAkre2NvbW1hbmR9CSAgICBleGVjdXRlIHtjb21tYW5kfSBhZnRlciBsb2FkaW5nIHRoZSBmaWxlCit8LSsvfAkrL3twYXR9IHtmaWxlfSAuLiAgIHB1dCB0aGUgY3Vyc29yIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHtwYXR9Cit8LXZ8CS12CQkgICAgVmkgbW9kZSwgc3RhcnQgZXggaW4gTm9ybWFsIG1vZGUKK3wtZXwJLWUJCSAgICBFeCBtb2RlLCBzdGFydCB2aW0gaW4gRXggbW9kZQorfC1SfAktUgkJICAgIFJlYWQtb25seSBtb2RlLCBpbXBsaWVzIC1uCit8LW18CS1tCQkgICAgbW9kaWZpY2F0aW9ucyBub3QgYWxsb3dlZCAocmVzZXRzICd3cml0ZScgb3B0aW9uKQorfC1ifAktYgkJICAgIGJpbmFyeSBtb2RlCit8LWx8CS1sCQkgICAgbGlzcCBtb2RlCit8LUF8CS1BCQkgICAgQXJhYmljIG1vZGUgKCdhcmFiaWMnIGlzIHNldCkKK3wtRnwJLUYJCSAgICBGYXJzaSBtb2RlICgnZmttYXAnIGFuZCAncmlnaHRsZWZ0JyBhcmUgc2V0KQorfC1IfAktSAkJICAgIEhlYnJldyBtb2RlICgnaGttYXAnIGFuZCAncmlnaHRsZWZ0JyBhcmUgc2V0KQorfC1WfAktVgkJICAgIFZlcmJvc2UsIGdpdmUgaW5mb3JtYXRpdmUgbWVzc2FnZXMKK3wtQ3wJLUMJCSAgICBDb21wYXRpYmxlLCBzZXQgdGhlICdjb21wYXRpYmxlJyBvcHRpb24KK3wtTnwJLU4JCSAgICBOb2NvbXBhdGlibGUsIHJlc2V0IHRoZSAnY29tcGF0aWJsZScgb3B0aW9uCit8LXJ8CS1yCQkgICAgZ2l2ZSBsaXN0IG9mIHN3YXAgZmlsZXMKK3wtcnwJLXIge2ZpbGV9IC4uCSAgICByZWNvdmVyIGFib3J0ZWQgZWRpdCBzZXNzaW9uCit8LW58CS1uCQkgICAgZG8gbm90IGNyZWF0ZSBhIHN3YXAgZmlsZQorfC1vfAktbyBbbnVtXQkgICAgb3BlbiBbbnVtXSB3aW5kb3dzIChkZWZhdWx0OiBvbmUgZm9yIGVhY2ggZmlsZSkKK3wtZnwJLWYJCSAgICBHVUk6IGZvcmVncm91bmQgcHJvY2VzcywgZG9uJ3QgZm9yaworCQkJICAgIEFtaWdhOiBkbyBub3QgcmVzdGFydCBWSU0gdG8gb3BlbiBhIHdpbmRvdyAoZm9yCisJCQkJZS5nLiwgbWFpbCkKK3wtc3wJLXMge3NjcmlwdGlufQkgICAgZmlyc3QgcmVhZCBjb21tYW5kcyBmcm9tIHRoZSBmaWxlIHtzY3JpcHRpbn0KK3wtd3wJLXcge3NjcmlwdG91dH0JICAgIHdyaXRlIHR5cGVkIGNoYXJzIHRvIGZpbGUge3NjcmlwdG91dH0gKGFwcGVuZCkKK3wtV3wJLVcge3NjcmlwdG91dH0JICAgIHdyaXRlIHR5cGVkIGNoYXJzIHRvIGZpbGUge3NjcmlwdG91dH0gKG92ZXJ3cml0ZSkKK3wtVHwJLVQge3Rlcm1pbmFsfQkgICAgc2V0IHRlcm1pbmFsIG5hbWUKK3wtZHwJLWQge2RldmljZX0JICAgIEFtaWdhOiBvcGVuIHtkZXZpY2V9IHRvIGJlIHVzZWQgYXMgYSBjb25zb2xlCit8LXV8CS11IHt2aW1yY30JICAgIHJlYWQgaW5pdHMgZnJvbSB7dmltcmN9IGluc3RlYWQgb2Ygb3RoZXIgaW5pdHMKK3wtVXwJLVUge2d2aW1yY30JICAgIGlkZW0sIGZvciB3aGVuIHN0YXJ0aW5nIHRoZSBHVUkKK3wtaXwJLWkge3ZpbWluZm99CSAgICByZWFkIGluZm8gZnJvbSB7dmltaW5mb30gaW5zdGVhZCBvZiBvdGhlciBmaWxlcworfC0tLXwJLS0JCSAgICBlbmQgb2Ygb3B0aW9ucywgb3RoZXIgYXJndW1lbnRzIGFyZSBmaWxlIG5hbWVzCit8LS1oZWxwfCAgICAtLWhlbHAJICAgIHNob3cgbGlzdCBvZiBhcmd1bWVudHMgYW5kIGV4aXQKK3wtLXZlcnNpb258IC0tdmVyc2lvbgkgICAgc2hvdyB2ZXJzaW9uIGluZm8gYW5kIGV4aXQKK3wtLXwJLQkJICAgIFJlYWQgZmlsZSBmcm9tIHN0ZGluLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9hYyoJCUF1dG9tYXRpYyBDb21tYW5kcworCit8dmltaW5mby1maWxlfAlSZWFkIHJlZ2lzdGVycywgbWFya3MsIGhpc3RvcnkgYXQgc3RhcnR1cCwgc2F2ZSB3aGVuIGV4aXRpbmcuCisKK3w6cnZpbWluZm98CTpydltpbWluZm9dIFtmaWxlXQlSZWFkIGluZm8gZnJvbSB2aW1pbmZvIGZpbGUgW2ZpbGVdCit8OnJ2aW1pbmZvfAk6cnZbaW1pbmZvXSEgW2ZpbGVdCWlkZW0sIG92ZXJ3cml0ZSBleGlzdGluZyBpbmZvCit8Ond2aW1pbmZvfAk6d3ZbaW1pbmZvXSBbZmlsZV0JQWRkIGluZm8gdG8gdmltaW5mbyBmaWxlIFtmaWxlXQorfDp3dmltaW5mb3wJOnd2W2ltaW5mb10hIFtmaWxlXQlXcml0ZSBpbmZvIHRvIHZpbWluZm8gZmlsZSBbZmlsZV0KKworfG1vZGVsaW5lfAlBdXRvbWF0aWMgb3B0aW9uIHNldHRpbmcgd2hlbiBlZGl0aW5nIGEgZmlsZQorCit8bW9kZWxpbmV8CXZpbTp7c2V0LWFyZ306IC4uCUluIHRoZSBmaXJzdCBhbmQgbGFzdCBsaW5lcyBvZiB0aGUKKwkJCQkJZmlsZSAoc2VlICdtbCcgb3B0aW9uKSwge3NldC1hcmd9IGlzCisJCQkJCWdpdmVuIGFzIGFuIGFyZ3VtZW50IHRvICI6c2V0IgorCit8YXV0b2NvbW1hbmR8CUF1dG9tYXRpYyBleGVjdXRpb24gb2YgY29tbWFuZHMgb24gY2VydGFpbiBldmVudHMuCisKK3w6YXV0b2NtZHwJOmF1CQkJTGlzdCBhbGwgYXV0b2NvbW1hbmRzCit8OmF1dG9jbWR8CTphdSB7ZXZlbnR9CQlMaXN0IGFsbCBhdXRvY29tbWFuZHMgZm9yIHtldmVudH0KK3w6YXV0b2NtZHwJOmF1IHtldmVudH0ge3BhdH0JTGlzdCBhbGwgYXV0b2NvbW1hbmRzIGZvciB7ZXZlbnR9IHdpdGgKKwkJCQkJe3BhdH0KK3w6YXV0b2NtZHwJOmF1IHtldmVudH0ge3BhdH0ge2NtZH0JRW50ZXIgbmV3IGF1dG9jb21tYW5kcyBmb3Ige2V2ZW50fQorCQkJCQl3aXRoIHtwYXR9Cit8OmF1dG9jbWR8CTphdSEJCQlSZW1vdmUgYWxsIGF1dG9jb21tYW5kcworfDphdXRvY21kfAk6YXUhIHtldmVudH0JCVJlbW92ZSBhbGwgYXV0b2NvbW1hbmRzIGZvciB7ZXZlbnR9Cit8OmF1dG9jbWR8CTphdSEgKiB7cGF0fQkJUmVtb3ZlIGFsbCBhdXRvY29tbWFuZHMgZm9yIHtwYXR9Cit8OmF1dG9jbWR8CTphdSEge2V2ZW50fSB7cGF0fQlSZW1vdmUgYWxsIGF1dG9jb21tYW5kcyBmb3Ige2V2ZW50fQorCQkJCQl3aXRoIHtwYXR9Cit8OmF1dG9jbWR8CTphdSEge2V2ZW50fSB7cGF0fSB7Y21kfSAgUmVtb3ZlIGFsbCBhdXRvY29tbWFuZHMgZm9yIHtldmVudH0KKwkJCQkJd2l0aCB7cGF0fSBhbmQgZW50ZXIgbmV3IG9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV93aSoJCU11bHRpLXdpbmRvdyBjb21tYW5kcworCit8Q1RSTC1XX3N8CUNUUkwtVyBzICBvciAgOnNwbGl0CVNwbGl0IHdpbmRvdyBpbnRvIHR3byBwYXJ0cworfDpzcGxpdF9mfAk6c3BsaXQge2ZpbGV9CQlTcGxpdCB3aW5kb3cgYW5kIGVkaXQge2ZpbGV9IGluIG9uZSBvZgorCQkJCQkgICB0aGVtCit8OnZzcGxpdHwJOnZzcGxpdCB7ZmlsZX0JCVNhbWUsIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5Cit8OnZlcnRpY2FsfAk6dmVydGljYWwge2NtZH0JCU1ha2Uge2NtZH0gc3BsaXQgdmVydGljYWxseQorCit8OnNmaW5kfAk6c2ZbaW5kXSB7ZmlsZX0JCVNwbGl0IHdpbmRvdywgZmluZCB7ZmlsZX0gaW4gJ3BhdGgnCisJCQkJCSAgIGFuZCBlZGl0IGl0LgorfENUUkwtV19dfAlDVFJMLVcgXQkJU3BsaXQgd2luZG93IGFuZCBqdW1wIHRvIHRhZyB1bmRlcgorCQkJCQkgICBjdXJzb3IKK3xDVFJMLVdfZnwJQ1RSTC1XIGYJCVNwbGl0IHdpbmRvdyBhbmQgZWRpdCBmaWxlIG5hbWUgdW5kZXIKKwkJCQkJICAgdGhlIGN1cnNvcgorfENUUkwtV19efAlDVFJMLVcgXgkJU3BsaXQgd2luZG93IGFuZCBlZGl0IGFsdGVybmF0ZSBmaWxlCit8Q1RSTC1XX258CUNUUkwtVyBuICBvciAgOm5ldwlDcmVhdGUgbmV3IGVtcHR5IHdpbmRvdworfENUUkwtV19xfAlDVFJMLVcgcSAgb3IgIDpxW3VpdF0JUXVpdCBlZGl0aW5nIGFuZCBjbG9zZSB3aW5kb3cKK3xDVFJMLVdfY3wJQ1RSTC1XIGMgIG9yICA6Y2xbb3NlXQlNYWtlIGJ1ZmZlciBoaWRkZW4gYW5kIGNsb3NlIHdpbmRvdworfENUUkwtV19vfAlDVFJMLVcgbyAgb3IgIDpvbltseV0JTWFrZSBjdXJyZW50IHdpbmRvdyBvbmx5IG9uZSBvbiB0aGUKKwkJCQkJICAgc2NyZWVuCisKK3xDVFJMLVdfanwJQ1RSTC1XIGoJCU1vdmUgY3Vyc29yIHRvIHdpbmRvdyBiZWxvdworfENUUkwtV19rfAlDVFJMLVcgawkJTW92ZSBjdXJzb3IgdG8gd2luZG93IGFib3ZlCit8Q1RSTC1XX0NUUkwtV3wJQ1RSTC1XIENUUkwtVwkJTW92ZSBjdXJzb3IgdG8gd2luZG93IGJlbG93ICh3cmFwKQorfENUUkwtV19XfAlDVFJMLVcgVwkJTW92ZSBjdXJzb3IgdG8gd2luZG93IGFib3ZlICh3cmFwKQorfENUUkwtV190fAlDVFJMLVcgdAkJTW92ZSBjdXJzb3IgdG8gdG9wIHdpbmRvdworfENUUkwtV19ifAlDVFJMLVcgYgkJTW92ZSBjdXJzb3IgdG8gYm90dG9tIHdpbmRvdworfENUUkwtV19wfAlDVFJMLVcgcAkJTW92ZSBjdXJzb3IgdG8gcHJldmlvdXMgYWN0aXZlIHdpbmRvdworCit8Q1RSTC1XX3J8CUNUUkwtVyByCQlSb3RhdGUgd2luZG93cyBkb3dud2FyZHMKK3xDVFJMLVdfUnwJQ1RSTC1XIFIJCVJvdGF0ZSB3aW5kb3dzIHVwd2FyZHMKK3xDVFJMLVdfeHwJQ1RSTC1XIHgJCUV4Y2hhbmdlIGN1cnJlbnQgd2luZG93IHdpdGggbmV4dCBvbmUKKworfENUUkwtV189fAlDVFJMLVcgPQkJTWFrZSBhbGwgd2luZG93cyBlcXVhbCBoZWlnaHQKK3xDVFJMLVdfLXwJQ1RSTC1XIC0JCURlY3JlYXNlIGN1cnJlbnQgd2luZG93IGhlaWdodAorfENUUkwtV18rfAlDVFJMLVcgKwkJSW5jcmVhc2UgY3VycmVudCB3aW5kb3cgaGVpZ2h0Cit8Q1RSTC1XX198CUNUUkwtVyBfCQlTZXQgY3VycmVudCB3aW5kb3cgaGVpZ2h0IChkZWZhdWx0OgorCQkJCQkgICB2ZXJ5IGhpZ2gpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2J1KgkJQnVmZmVyIGxpc3QgY29tbWFuZHMKKworfDpidWZmZXJzfAk6YnVmZmVycyAgb3IgIDpmaWxlcwlsaXN0IGFsbCBrbm93biBidWZmZXIgYW5kIGZpbGUgbmFtZXMKKworfDpiYWxsfAkJOmJhbGwJICBvciAgOnNiYWxsCWVkaXQgYWxsIGFyZ3MvYnVmZmVycworfDp1bmhpZGV8CTp1bmhpZGUgICBvciAgOnN1bmhpZGUJZWRpdCBhbGwgbG9hZGVkIGJ1ZmZlcnMKKworfDpiYWRkfAkJOmJhZGQge2ZuYW1lfQkJYWRkIGZpbGUgbmFtZSB7Zm5hbWV9IHRvIHRoZSBsaXN0Cit8OmJ1bmxvYWR8CTpidW5sb2FkWyFdIFtOXQkJdW5sb2FkIGJ1ZmZlciBbTl0gZnJvbSBtZW1vcnkKK3w6YmRlbGV0ZXwJOmJkZWxldGVbIV0gW05dCQl1bmxvYWQgYnVmZmVyIFtOXSBhbmQgZGVsZXRlIGl0IGZyb20KKwkJCQkJICAgdGhlIGJ1ZmZlciBsaXN0CisKKwkgICAgICBpbiBjdXJyZW50IHdpbmRvdyAgIGluIG5ldyB3aW5kb3cJfgorfDpidWZmZXJ8ICAgICA6W05dYnVmZmVyIFtOXQkgIDpbTl1zYnVmZmVyIFtOXSAgICAgdG8gYXJnL2J1ZiBOCit8OmJuZXh0fCAgICAgIDpbTl1ibmV4dCBbTl0JICA6W05dc2JuZXh0IFtOXSAgICAgIHRvIE50aCBuZXh0IGFyZy9idWYKK3w6Yk5leHR8ICAgICAgOltOXWJOZXh0IFtOXQkgIDpbTl1zYk5leHQgW05dICAgICAgdG8gTnRoIHByZXZpb3VzIGFyZy9idWYKK3w6YnByZXZpb3VzfCAgOltOXWJwcmV2aW91cyBbTl0gICA6W05dc2JwcmV2aW91cyBbTl0gIHRvIE50aCBwcmV2aW91cyBhcmcvYnVmCit8OmJmaXJzdHwgICAgIDpiZmlyc3QJCSAgOnNiZmlyc3QJICAgICAgdG8gZmlyc3QgYXJnL2J1ZgorfDpibGFzdHwgICAgICA6Ymxhc3QJCSAgOnNibGFzdAkgICAgICB0byBsYXN0IGFyZy9idWYKK3w6Ym1vZGlmaWVkfCAgOltOXWJtb2QgW05dCSAgOltOXXNibW9kIFtOXQkgICAgICB0byBOdGggbW9kaWZpZWQgYnVmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3N5KgkJU3ludGF4IEhpZ2hsaWdodGluZworCit8OnN5bi1vbnwJOnN5bnRheCBvbgkJc3RhcnQgdXNpbmcgc3ludGF4IGhpZ2hsaWdodGluZworfDpzeW4tb2ZmfAk6c3ludGF4IG9mZgkJc3RvcCB1c2luZyBzeW50YXggaGlnaGxpZ2h0aW5nCisKK3w6c3luLWtleXdvcmR8CTpzeW50YXgga2V5d29yZCB7Z3JvdXAtbmFtZX0ge2tleXdvcmR9IC4uCisJCQkJCWFkZCBhIHN5bnRheCBrZXl3b3JkIGl0ZW0KK3w6c3luLW1hdGNofAk6c3ludGF4IG1hdGNoIHtncm91cC1uYW1lfSB7cGF0dGVybn0gLi4uCisJCQkJCWFkZCBzeW50YXggbWF0Y2ggaXRlbQorfDpzeW4tcmVnaW9ufAk6c3ludGF4IHJlZ2lvbiB7Z3JvdXAtbmFtZX0ge3BhdHRlcm59IC4uLgorCQkJCQlhZGQgc3ludGF4IHJlZ2lvbiBpdGVtCit8OnN5bi1zeW5jfAk6c3ludGF4IHN5bmMgW2Njb21tZW50IHwgbGluZXMge059IHwgLi4uXQorCQkJCQl0ZWxsIHN5bnRheCBob3cgdG8gc3luYworfDpzeW50YXh8CTpzeW50YXggW2xpc3RdCQlsaXN0IGN1cnJlbnQgc3ludGF4IGl0ZW1zCit8OnN5bi1jbGVhcnwJOnN5bnRheCBjbGVhcgkJY2xlYXIgYWxsIHN5bnRheCBpbmZvCisKK3w6aGlnaGxpZ2h0fAk6aGlnaGxpZ2h0IGNsZWFyCWNsZWFyIGFsbCBoaWdobGlnaHQgaW5mbworfDpoaWdobGlnaHR8CTpoaWdobGlnaHQge2dyb3VwLW5hbWV9IHtrZXl9PXthcmd9IC4uCisJCQkJCXNldCBoaWdobGlnaHRpbmcgZm9yIHtncm91cC1uYW1lfQorCit8OmZpbGV0eXBlfAk6ZmlsZXR5cGUgb24JCXN3aXRjaCBvbiBmaWxlIHR5cGUgZGV0ZWN0aW9uLCB3aXRob3V0CisJCQkJCXN5bnRheCBoaWdobGlnaHRpbmcKK3w6ZmlsZXR5cGV8CTpmaWxldHlwZSBwbHVnaW4gaW5kZW50IG9uCisJCQkJCXN3aXRjaCBvbiBmaWxlIHR5cGUgZGV0ZWN0aW9uLCB3aXRoCisJCQkJCWF1dG9tYXRpYyBpbmRlbnRpbmcgYW5kIHNldHRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2d1KgkJR1VJIGNvbW1hbmRzCisKK3w6Z3VpfAkJOmd1aQkJCVVOSVg6IHN0YXJ0IHRoZSBHVUkKK3w6Z3VpfAkJOmd1aSB7Zm5hbWV9IC4uCQlpZGVtLCBhbmQgZWRpdCB7Zm5hbWV9IC4uCisKK3w6bWVudXwJCTptZW51CQkJbGlzdCBhbGwgbWVudXMKK3w6bWVudXwJCTptZW51IHttcGF0aH0JCWxpc3QgbWVudXMgc3RhcnRpbmcgd2l0aCB7bXBhdGh9Cit8Om1lbnV8CQk6bWVudSB7bXBhdGh9IHtyaHN9CWFkZCBtZW51IHttcGF0aH0sIGdpdmluZyB7bGhzfQorfDptZW51fAkJOm1lbnUge3ByaX0ge21wYXRofSB7cmhzfQorCQkJCQlpZGVtLCB3aXRoIHByaW9yaXRpZXMge3ByaX0KK3w6bWVudXwJCTptZW51IFRvb2xCYXIue25hbWV9IHtyaHN9CisJCQkJCWFkZCB0b29sYmFyIGl0ZW0sIGdpdmluZyB7bGhzfQorfDp0bWVudXwJOnRtZW51IHttcGF0aH0ge3RleHR9CWFkZCB0b29sdGlwIHRvIG1lbnUge21wYXRofQorfDp1bm1lbnV8CTp1bm1lbnUge21wYXRofQkJcmVtb3ZlIG1lbnUge21wYXRofQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9mbyoJCUZvbGRpbmcKKworfCdmb2xkbWV0aG9kJ3wJc2V0IGZvbGRtZXRob2Q9bWFudWFsCW1hbnVhbCBmb2xkaW5nCisJCXNldCBmb2xkbWV0aG9kPWluZGVudAlmb2xkaW5nIGJ5IGluZGVudAorCQlzZXQgZm9sZG1ldGhvZD1leHByCWZvbGRpbmcgYnkgJ2ZvbGRleHByJworCQlzZXQgZm9sZG1ldGhvZD1zeW50YXgJZm9sZGluZyBieSBzeW50YXggcmVnaW9ucworCQlzZXQgZm9sZG1ldGhvZD1tYXJrZXIJZm9sZGluZyBieSAnZm9sZG1hcmtlcnMnCisKK3x6ZnwJCXpme21vdGlvbn0JCW9wZXJhdG9yOiBEZWZpbmUgYSBmb2xkIG1hbnVhbGx5Cit8OmZvbGR8CQk6e3JhbmdlfWZvbGQJCWRlZmluZSBhIGZvbGQgZm9yIHtyYW5nZX0gbGluZXMKK3x6ZHwJCXpkCQkJZGVsZXRlIG9uZSBmb2xkIHVuZGVyIHRoZSBjdXJzb3IKK3x6RHwJCXpECQkJZGVsZXRlIGFsbCBmb2xkcyB1bmRlciB0aGUgY3Vyc29yCisKK3x6b3wJCXpvCQkJb3BlbiBvbmUgZm9sZCB1bmRlciB0aGUgY3Vyc29yCit8ek98CQl6TwkJCW9wZW4gYWxsIGZvbGRzIHVuZGVyIHRoZSBjdXJzb3IKK3x6Y3wJCXpjCQkJY2xvc2Ugb25lIGZvbGQgdW5kZXIgdGhlIGN1cnNvcgorfHpDfAkJekMJCQljbG9zZSBhbGwgZm9sZHMgdW5kZXIgdGhlIGN1cnNvcgorCit8em18CQl6bQkJCWZvbGQgbW9yZTogZGVjcmVhc2UgJ2ZvbGRsZXZlbCcKK3x6TXwJCXpNCQkJY2xvc2UgYWxsIGZvbGRzOiBtYWtlICdmb2xkbGV2ZWwnIHplcm8KK3x6cnwJCXpyCQkJcmVkdWNlIGZvbGRpbmc6IGluY3JlYXNlICdmb2xkbGV2ZWwnCit8elJ8CQl6UgkJCW9wZW4gYWxsIGZvbGRzOiBtYWtlICdmb2xkbGV2ZWwnIG1heC4KKworfHpufAkJem4JCQlmb2xkIG5vbmU6IHJlc2V0ICdmb2xkZW5hYmxlJworfHpOfAkJek4JCQlmb2xkIG5vcm1hbCBzZXQgJ2ZvbGRlbmFibGUnCit8eml8CQl6aQkJCWludmVydCAnZm9sZGVuYWJsZScKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3F1b3Rlcy50eHQgYi9ydW50aW1lL2RvYy9xdW90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNWMzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9xdW90ZXMudHh0CkBAIC0wLDAgKzEsMjc0IEBACisqcXVvdGVzLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDA2CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworCQkJCQkJCSpxdW90ZXMqCitIZXJlIGFyZSBzb21lIG5pY2UgcXVvdGVzIGFib3V0IFZpbSB0aGF0IEkgY29sbGVjdGVkIGZyb20gbmV3cyBhbmQgbWFpbC4KKworCit2aW0gKHZpbSkgbm91biAtIEVidWxsaWVudCB2aXRhbGl0eSBhbmQgZW5lcmd5LiAgW0xhdGluLCBhY2N1c2F0aXZlIG9mIHZpcywKK3N0cmVuZ3RoXSAgKERpY3Rpb25hcnkpCisKK1ZpbSBpcyBzbyBtdWNoIGJldHRlciB0aGFuIHZpIHRoYXQgYSBncmVhdCBtYW55IG9mIG15IG9sZCB2aSA6bWFwJ3MgYmVjYW1lCitpbW1lZGlhdGVseSBvYnNvbGV0ZSEgKFRvbnkgTnVnZW50LCBBdXN0cmFsaWEpCisKK0NvbWluZyB3aXRoIGEgdmVyeSBHVUkgbWluZHNldCBmcm9tIFdpbmRvd3MsIEkgYWx3YXlzIHRob3VnaHQgb2YgcGVvcGxlIHVzaW5nCitWaSBhcyBzb21lIGtpbmQgb2Ygb3V0ZXIgc3BhY2UgYWxpZW4gaW4gaHVtYW4gY2xvdGhlcy4gIE9uY2UgSSB0cmllZCBJIHJlYWxseQorZ290IGFkZGljdGVkIGJ5IGl0cyBwb3dlciBhbmQgbm93IEkgZm91bmQgbXlzZWxmIHR5cGluZyBWaW0ga2V5cHJlc3NlcyBpbiB0aGUKK29kZGVzdCBwbGFjZXMhIFRoYXQncyB3aHkgSSB3b3VsZCBsaWtlIHRvIHNlZSBWaW0gZW1iZWRkZWQgaW4gZXZlcnkKK2FwcGxpY2F0aW9uIHdoaWNoIGRlYWxzIHdpdGggdGV4dCBlZGl0aW5nLiAoSm9z6SBGb25zZWNhKQorCitJIHdhcyBhIDEyLXllYXIgZW1hY3MgdXNlciB3aG8gc3dpdGNoZWQgdG8gVmltIGFib3V0IGEgeWVhciBhZ28gYWZ0ZXIgZmluYWxseQorZ2l2aW5nIHVwIG9uIHRoZSBtdWx0aXBsZSBpbmNvbXBhdGlibGUgdmVyc2lvbnMsIGZsYWt5IGNvbnRyaWJ1dGVkIHBhY2thZ2VzLAorZGlzb3JnYW5pemVkIGtleXN0cm9rZXMsIGV0Yy4gIEFuZCBpdCB3YXMgb25lIG9mIHRoZSBiZXN0IG1vdmVzIEkgZXZlciBtYWRlLgorKEpvZWwgQnVydG9uKQorCitBbHRob3VnaCBhbGwgb2YgdGhlIHByb2dyYW1zIHdlcmUgdXNlZCBkdXJpbmcgdGhlIHByZXBhcmF0aW9uIG9mIHRoZSBuZXcgYW5kCityZXZpc2VkIG1hdGVyaWFsLCBtb3N0IG9mIHRoZSBlZGl0aW5nIHdhcyBkb25lIHdpdGggVmltIHZlcnNpb25zIDQuNSBhbmQgNS4wCit1bmRlciBHTlUtTGludXggKFJlZGhhdCA0LjIpLiAgKEFybm9sZCBSb2JiaW5zLCBJc3JhZWwsIGF1dGhvciBvZiAiTGVhcm5pbmcKK3RoZSBWaSBlZGl0b3IiKQorCitPdXQgb2YgYWxsIHRoZSBvcGVuIHNvZnR3YXJlIGkndmUgZXZlciBzZWVuIGFuZCB1c2VkLCBhbmQgaSd2ZSBzZWVuIGEgbG90LCBWaW0KK2lzIHRoZSBiZXN0LCBtb3N0IHVzZWZ1bCBhbmQgaGlnaGVzdCBxdWFsaXR5IHRvIHdvcmsgd2l0aCwgc2Vjb25kIG9ubHkgdG8gdGhlCitsaW51eCBrZXJuZWwgaXRzZWxmLiAoUGV0ZXIgSmF5IFNhbHptYW4pCisKK0l0J3Mgd2VsbCB3b3J0aCBub3RpbmcgdGhhdCB0aGUgX2VudGlyZXR5XyBvZiBTb3VyY2VGb3JnZSB3YXMgd3JpdHRlbiB1c2luZworVmltIGFuZCBpdHMgbmlmdHkgUEhQIHN5bnRheCBoaWdobGlnaHRpbmcuIEkgdGhpbmsgdGhlIGVudGlyZSBTRi5uZXQgdGVjaAorc3RhZmYgdXNlcyBWaW0gYW5kIHdlJ3JlIGFsbCBleGNpdGVkIHRvIGhhdmUgeW91IGFib2FyZCEgKFRpbSBQZXJkdWUpCisKK1ZpbSBpcyBvbmUgb2YgYSBzZWxlY3QgYnVuY2ggb2YgdG9vbHMgZm9yIHdoaWNoIEkgaGF2ZSBubyBzdWJzdGl0dXRlLiAgSXQgaXMKK2EgYnJpbGxpYW50IHBpZWNlIG9mIHdvcmshIChCaWp1IENoYWNrbykKKworQSBwcmV2aW91cyBnaXJsZnJpZW5kIG9mIG1pbmUgc3dpdGNoZWQgdG8gZW1hY3MuICBOZWVkbGVzcyB0byBzYXksIHRoZQorcmVsYXRpb25zaGlwIHdlbnQgbm93aGVyZS4gKEdlb2ZmcmV5IE1hbm4pCisKK0kgcmFyZWx5IHRoaW5rIGFib3V0IFZpbSwgaW4gdGhlIHNhbWUgd2F5IHRoYXQgSSBndWVzcyBhIGZpc2ggcmFyZWx5IHRoaW5rcworYWJvdXQgd2F0ZXIuICBJdCdzIHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBldmVyeXRoaW5nIGVsc2UgaGFwcGVucy4gIEknbSBhCitmYWlybHkgYnVzeSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB3b3JraW5nIG9uIGEgbG90IG9mIGRpZmZlcmVudCBwbGF0Zm9ybXMuICBWaW0KK2lzIHRoZSBvbmx5IHRoaW5nIHRoYXQncyBjb25zaXN0ZW50IGFjcm9zcyBhbGwgbXkgc3lzdGVtcywgYW5kIGl0J3MganVzdCBhYm91dAordGhlIG9ubHkgdGhpbmcgdGhhdCBkb2Vzbid0IGJyZWFrIGZyb20gdGltZSB0byB0aW1lLiAgV2hlbiBhIG5ldyBzeXN0ZW0gY29tZXMKK2luIHRoZSBkb29yIHdpdGhvdXQgVmltLCBJIGluc3RhbGwgaXQgcmlnaHQgYXdheS4gIEdyZWF0IHRvIGhhdmUgYSB0b29sIHRoYXQncwordGhlIHNhbWUgZXZlcnl3aGVyZSwgdGhhdCdzIGNvbXBsZXRlbHkgcmVsaWFibGUsIHNvIEkgY2FuIGlnbm9yZSBpdCBhbmQgdGhpbmsKK2Fib3V0IG90aGVyIHRoaW5ncy4gKFBldGUgU2NoYWVmZmVyKQorCitIYXZpbmcgcmVjZW50bHkgc3VjY2VlZGVkIGluIHJ1bm5pbmcgVmltIHZpYSB0ZWxuZXQgdGhyb3VnaCBhIE5va2lhCitDb21tdW5pY2F0b3IsIEkgY2FuIG5vdyByZXBvcnQgdGhhdCBpdCB3b3JrcyBuaWNlbHkgb24gYSBQYWxtIFBpbG90IHRvby4KKyhBbGxhbiBLZWxseSwgU2NvdGxhbmQpCisKK1lvdSd2ZSBkb25lIGEgdHJlbWVuZG91cyBqb2Igd2l0aCAnVklNJywgQnJhbSEgIFRoZSBtb3JlIEkgdXNlIGl0LCB0aGUgbW9yZQoraW1wcmVzc2VkIEkgZ2V0IChJIGFtIGFuIG9sZCAndmknIGRpZSBoYXJkIHdobyBvbmNlIHN0YXJ0ZWQgb3V0IHdpdGggZWFybHkKK3ZlcnNpb25zIG9mICdlbWFjcycgaW4gdGhlIGxhdGUgMTk3MCdzIGFuZCB3YXMgcmVsaWV2ZWQgYnkgZmluZGluZyAndmknIGluIHRoZQorZmlyc3QgVU5JWCBJIGNhbWUgYWNyb3NzIGluIDE5ODMpLiAgSW4gbXkgb3BpbmlvbiwgaXQncyBhYm91dCB0aW1lICdWSU0nCityZXBsYWNlICdlbWFjcycgYXMgdGhlIHN0YW5kYXJkIGZvciB0b3AgZWRpdG9ycy4gIChCbyBUaGlkZScsIFN3ZWRlbikKKworSSBsb3ZlIGFuZCB1c2UgVklNIGhlYXZpbHkgdG9vLiAoTGFycnkgV2FsbCkKKworVmkgaXMgbGlrZSBhIEZlcnJhcmksIGlmIHlvdSdyZSBhIGJlZ2lubmVyLCBpdCBoYW5kbGVzIGxpa2UgYSBiaXRjaCwgYnV0IG9uY2UKK3lvdSBnZXQgdGhlIGhhbmcgb2YgaXQsIGl0cyBzbWFsbCwgcG93ZXJmdWwgYW5kIEZBU1QhIChVbmtub3duKQorVklNIGlzIGxpa2UgYSBuZXcgbW9kZWwgRmVycmFyaSwgYW5kIHNvdW5kcyBsaWtlIG9uZSB0b28gLSAiVklJSUlJSU1NTSEiCisoU3RlcGhlbiBSaWVobSwgR2VybWFueSkKKworU2Nob24gYmVpIE51dHp1bmcgZWluZXMgQnJ1Y2h0ZWlscyBkZXIgVklNLUZ1bmt0aW9uZW4gd2lyZCBkZXIgQmVudXR6ZXIgcmVjaHQKK3NjaG5lbGwgZGllIFZvcnp1ZWdlIGRpZXNlcyBFZGl0b3JzIGtlbm5lbi0gdW5kIHNjaGFldHplbmxlcm5lbi4KK1RyYW5zbGF0ZWQ6IEV2ZW4gd2hlbiBvbmx5IHVzaW5nIGEgZnJhY3Rpb24gb2YgVklNLWZ1bmN0aW9ucywgdGhlIHVzZXIgd2lsbAorcXVpY2tseSBnZXQgdXNlZCB0byBhbmQgYXBwcmVjaWF0ZSB0aGUgYWR2YW50YWdlcyBvZiB0aGlzIGVkaXRvci4gIChHYXJyeQorR2xlbmRvd24sIGNvbmNsdXNpb24gb2YgYW4gYXJ0aWNsZSBvbiBWSU0gaW4gaVggbWFnYXppbmUgOS8xOTk4KQorCitJJ3ZlIHJlY2VudGx5IGFjcXVpcmVkIHRoZSBPJ1JlaWxseSBib29rIG9uIFZJIChpdCBhbHNvIGRpc2N1c3NlcyBWSU0KK2luLWRlcHRoKSwgYW5kIEknbSBhbWF6ZWQgYXQganVzdCBob3cgcG93ZXJmdWwgdGhpcyBhcHBsaWNhdGlvbiBpcy4gKEplZmZyZXkKK1JhbmtpbikKKworVGhpcyBndWlkZSB3YXMgd3JpdHRlbiB1c2luZyB0aGUgV2luZG93cyA5LnggZGlzdHJpYnV0aW9uIG9mIEdWSU0sIHdoaWNoIGlzCitxdWl0ZSBwb3NzaWJseSB0aGUgZ3JlYXRlc3QgdGhpbmcgdG8gY29tZSBhbG9uZyBzaW5jZSBHb2QgY3JlYXRlZCB0aGUgbmFrZWQKK2dpcmwuIChNaWNoYWVsIERpQmVybmFyZG8pCisKK0JveSwgSSB0aG91Z2h0IEkga25ldyBhbG1vc3QgZXZlcnl0aGluZyBhYm91dCBWSU0sIGJ1dCBldmVyeSB0aW1lIEkgYnJvd3NlIHRoZQorb25saW5lIGRvY3VtZW50YXRpb24sIEkgaGl0IHVwb24gYSBtaW5vciBidXQgY29vbCBhc3BlY3Qgb2YgYSBWSU0gZmVhdHVyZSB0aGF0CitJIGRpZG4ndCBrbm93IGJlZm9yZSEgIEkgbXVzdCBzYXkgdGhlIGRvY3VtZW50YXRpb24gaXMgb25lIHRoZSBmaW5lc3QgSSd2ZQorZXZlciBzZWVuIGluIGEgcHJvZHVjdCAtLSBldmVuIGJldHRlciB0aGFuIG1vc3QgY29tbWVyY2lhbCBwcm9kdWN0cy4KKyhHYXV0YW0gTXVkdW51cmkpCisKK1ZJTSA0LjUgaXMgcmVhbGx5IGEgZmFudGFzdGljIGVkaXRvci4gIEl0IGhhcyBzb29vb28gbWFueSBmZWF0dXJlcyBhbmQgbW9yZQoraW1wb3J0YW50bHksIHRoZSBkZWZhdWx0cyBhcmUgc28gd2VsbCB0aG91Z2h0IG91dCB0aGF0IHlvdSByZWFsbHkgZG9uJ3QgaGF2ZQordG8gY2hhbmdlIGFueXRoaW5nISEgIFdvcmRzIGNhbm5vdCBleHByZXNzIG15IGFtYXplbWVudCBhbmQgZ3JhdGl0dWRlIHRvIHRoZQorY3JlYXRvcnMgb2YgVklNLiAgS2VlcCBpdCB1cC4gIChWaWthcywgVVNBKQorCitJIHdvbmRlciBob3cgbG9uZyBpdCB3aWxsIGJlIGJlZm9yZSBwZW9wbGUgd2lsbCByZWZlciB0byBvdGhlciBWaSBlZGl0b3JzIGFzCitWSU0gY2xvbmVzPyAgKERhcnJlbiBIaWViZXJ0KQorCitJIHJlYWQgYWJvdXQgW2F1dG8tcG9zaXRpb25pbmctaW4tZmlsZS1iYXNlZC1vbi10aGUtZXJyb3JzLWZyb20tbWFrZV0gaW4gb25lCitvZiB0aG9zZSAiUGVyZmVjdCBQcm9ncmFtbWVyJ3MgRWRpdG9yIiB0aHJlYWRzIGFuZCB3YXMgZGVsaWdodGVkIHRvIGRpc2NvdmVyCit0aGF0IFZJTSBhbHJlYWR5IHN1cHBvcnRzIGl0LiAgKEJyZW5kYW4gTWFjbWlsbGFuLCBBdXN0cmFsaWEpCisKK0kganVzdCBkaXNjb3ZlcmVkIFZJTSAoNS4wKSBhbmQgSSdtIHRlbGxpbmcgZXZlcnlvbmUgSSBrbm93IGFib3V0IGl0IQorSSB0ZWxsIHRoZW0gVklNIHN0YW5kcyBmb3IgVkkgZm9yIHRoZSBuZXcgKE0paWxsZW5pdW0uIFRoYW5rcyBzbyBtdWNoIQorKE1hdHQgRi4gVmFsZW50aW5lKQorCitJIHRoaW5rIGZyb20gbm93IG9uICJ2aSIgc2hvdWxkIGJlIGNhbGxlZCAiVmltIEltaXRhdGlvbiIsIG5vdCB0aGUgb3RoZXIgd2F5Cithcm91bmQuICAoUnVuZ3VuIFJhbWFuYXRoYW4pCisKK1RoZSBMYXcgb2YgVklNOgorRm9yIGVhY2ggbWVtYmVyIGIgb2YgdGhlIHBvc3NpYmxlIGJlaGF2aW91ciBzcGFjZSBCIG9mIHByb2dyYW0gUCwgdGhlcmUgZXhpc3RzCithIGZpbml0ZSB0aW1lIHQgYmVmb3JlIHdoaWNoIGF0IGxlYXN0IG9uZSB1c2VyIHUgaW4gdGhlIHRvdGFsIHVzZXIgc3BhY2UgVSBvZgorcHJvZ3JhbSBQIHdpbGwgcmVxdWVzdCBiIGJlY29tZXMgYSBtZW1iZXIgb2YgdGhlIGFsbG93ZWQgYmVoYXZpb3VyIHNwYWNlIEInCisoQicgPD0gQikuCitJbiBvdGhlciB3b3JkczogU29vbmVyIG9yIGxhdGVyIGV2ZXJ5b25lIHdhbnRzIGV2ZXJ5dGhpbmcgYXMgYW4gb3B0aW9uLgorKE5lZ3JpKQorCitXaGVuZXZlciBJIG1vdmUgdG8gYSBuZXcgY29tcHV0aW5nIHBsYXRmb3JtLCB0aGUgZmlyc3QgdGhpbmcgSSBkbyBpcyB0byBwb3J0CitWSU0uICBMYXRlbHksIEkgYW0gc2ltcGx5IHN0dW5uZWQgYnkgaXRzIGVhc2Ugb2YgY29tcGlsYXRpb24gdXNpbmcgdGhlCitjb25maWd1cmUgZmFjaWxpdHkuICAoQS5NLiBTYWJ1bmN1LCBUdXJrZXkpCisKK1RoZSBvcHRpb25zIGFyZSByZWFsbHkgZXhjZWxsZW50IGFuZCB2ZXJ5IHBvd2VyZnVsLiAoQW5pc2ggTWFoYXJhaikKKworVGhlIFNwcmluZyB1c2VyLWludGVyZmFjZSBkZXNpZ25zIGFyZSBpbiwgYW5kIHdvcmQgZnJvbSB0aGUgYm91dGlxdWVzIGlzIHRoYXQKKzgweDI0IHRleHQtb25seSBtb2RlIGlzIGJhY2sgd2l0aCBhICp2ZW5nZWFuY2UhIFZpIGVkaXRvciBjbG9uZSBWSU0gYnVyc3Qgb250bworTWFyY2ggZGVzay10b3BzIHdpdGggYSBkYXp6bGluZyBzaG93IG9mIHBhc3RlbCBzeW50YXggaGlnaGxpZ2h0cyBmb3IgaXRzIDUuMAorbG9vay4gU3RyaWRlbnQgYW5kIGN1c3RvbWl6YWJsZSwgVklNIHJhaXNlcyBleWVicm93cyB3aXRoIGl0cyBpbnRlcnByZXRhdGlvbgorb2YgdGhlIGNsYXNzaWMgVmkgc2luZ2xlLWtleSBtYWNybyBjb2xsZWN0aW9uLgoraHR0cDovL3d3dy5udGsubmV0L2luZGV4LmNnaT9iYWNrPWFyY2hpdmU5OC9ub3cwMzI3LnR4dCZsaW5lPTE3OSNsCisKK0kganVzdCB3YW50ZWQgdG8gdGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRvIGxldCB5b3Uga25vdyB0aGF0IFZJTSA1IFJPQ0tTIQorU3ludGF4IGhpZ2hsaWdodGluZzogaG93IGRpZCBJIHN1cnZpdmUgd2l0aG91dCBpdD8hICBUaGFuayB5b3UgZm9yIGNyZWF0aW5nCittYW5raW5kJ3MgYmVzdCBlZGl0b3IhICAoTXVuIEpvaGwsIFVTQSkKKworVGhhbmtzIGFnYWluIGZvciBWSU0uICBJIHVzZSBpdCBldmVyeSBkYXkgb24gTGludXguIChFcmljIEZvc3Rlci1Kb2huc29uLAorYXV0aG9yIG9mIHRoZSBib29rICJVTklYIFByb2dyYW1taW5nIFRvb2xzIikKKworVGhlIEJFU1QgRURJVE9SIEVWRVIgKFN0dWFydCBXb29sZm9yZCkKKworSSBoYXZlIHVzZWQgbW9zdCBvZiBWSU0ncyBmYW5jeSBmZWF0dXJlcyBhdCBsZWFzdCBvbmNlLCBtYW55IGZyZXF1ZW50bHksIGFuZCBJCitjYW4gaG9uZXN0bHkgc2F5IHRoYXQgSSBjb3VsZG4ndCBsaXZlIHdpdGggYW55dGhpbmcgbGVzcyBhbnltb3JlLiAgTXkKK3Byb2R1Y3Rpdml0eSBoYXMgZWFzaWx5IGRvdWJsZWQgY29tcGFyZWQgdG8gd2hhdCBpdCB3YXMgd2hlbiBJIHVzZWQgdmkuCisoU2l0YXJhbSBDaGFtYXJ0eSkKKworSSBsdXYgVklNLiAgSXQgaXMgaW5jcmVkaWJsZS4gIEknbSBuYW1pbmcgbXkgZmlyc3QtYm9ybiBWaW1iZXJseS4gIChKb3NlCitVbnBpbmdjbywgVVNBKQorCitIaW50OiAgIlZJTSIgaXMgInZpIGltcHJvdmVkIiAtIG11Y2ggYmV0dGVyISAoU3ZlbiBHdWNrZXMsIEdlcm1hbnkpCisKK0kgdXNlIFZJTSBldmVyeSBkYXkuICBJIHNwZW5kIG1vcmUgdGltZSBpbiBWSU0gdGhhbiBpbiBhbnkgb3RoZXIgcHJvZ3JhbS4uLgorSXQncyB0aGUgYmVzdCB2aSBjbG9uZSB0aGVyZSBpcy4gIEkgdGhpbmsgaXQncyBncmVhdC4gIChDcmFpZyBTYW5kZXJzLAorQXVzdHJhbGlhKQorCitJIHN0cm9uZ2x5IGFkdmlzZSB1c2luZyBWSU0tLWl0cyBpbmZpbml0ZSB1bmRvL3JlZG8gc2F2ZWQgbWUgbXVjaCBncmllZi4KKyhUZXJyeSBCcm93bikKKworVGhhbmtzIHZlcnkgbXVjaCBmb3Igd3JpdGluZyB3aGF0IGluIG15IG9waW5pb24gaXMgdGhlIGZpbmVzdCB0ZXh0IGVkaXRvciBvbgordGhlIHBsYW5ldC4gIElmIEkgd2VyZSB0byBnZXQgYW5vdGhlciBjYXQsIEkgd291bGQgbmFtZSBpdCAiVmltIi4KKyhCb2IgU2hlZWhhbiwgVVNBKQorCitJIHR5cGVkIDpzZXQgYWxsIGFuZCB0aGUgc2NyZWVuIEZJTExFRCB1cCB3aXRoIG9wdGlvbnMuICBBIHdob2xlIHNjcmVlbiBvZgordGhpbmdzIHRvIGJlIHNldCBhbmQgdW5zZXQuICBJIHNhdyBzb21lIG9mIG15IG9sZCBmcmllbmRzIGxpa2Ugd3JhcG1hcmdpbiwKK21vZGVsaW5lcyBhbmQgc2hvd21vZGUsIGJ1dCB0aGUgc2NyZWVuIHdhcyBGSUxMRUQgd2l0aCBuZXcgZnJpZW5kcyEgICBJIGxvdmUKK3RoZW0gYWxsISAgIEkgbG92ZSBWSU0hICAgSSdtIHNvIGhhcHB5IHRoYXQgSSd2ZSBmb3VuZCB0aGlzIGVkaXRvciEgIEkgZmVlbAorbGlrZSBob3cgSSBvbmNlIGZlbHQgd2hlbiBJIHN0YXJ0ZWQgdXNpbmcgdmkgYWZ0ZXIgYSBjb3VwbGUgb2YgeWVhcnMgb2YgdXNpbmcKK2VkLiAgSSBuZXZlciB0aG91Z2h0IEknZCBmb3JzYWtlIG15IGJlbG92ZWQgZWQsIGJ1dCB2aSAuLi4gb2ggZ29kLCB2aSB3YXMKK2dyZWF0LiAgQW5kIG5vdywgVklNLiAgKFBldGVyIEpheSBTYWx6bWFuLCBVU0EpCisKK0kgYW0gcmVhbGx5IGhhcHB5IHdpdGggc3VjaCBhIHdvbmRlcmZ1bCBzb2Z0d2FyZSBwYWNrYWdlLiAgTXVjaCBiZXR0ZXIgdGhhbgorYWxtb3N0IGFueSBleHBlbnNpdmUsIG9mZiB0aGUgc2hlbGYgcHJvZ3JhbS4gIChKZWZmIFdhbGtlcikKKworV2hlbmV2ZXIgSSByZXJlYWQgdGhlIFZJTSBkb2N1bWVudGF0aW9uIEknbSBvdmVyY29tZSB3aXRoIGV4Y2l0ZW1lbnQgYXQgdGhlCitwb3dlciBvZiB0aGUgZWRpdG9yLiAoV2lsbGlhbSBFZHdhcmQgV2ViYmVyLCBBdXN0cmFsaWEpCisKK0h1cnJhaCBmb3IgVklNISEgSXQgaXMgImF0IHlvdXIgZmluZ2VydGlwcyIgbGlrZSB2aSwgYW5kIGhhcyB0aGUgZXh0ZW5zaW9ucwordGhhdCB2aSBzb3JlbHkgbmVlZHM6IGhpZ2hsaWdodGluZyBmb3IgZXhlY3V0aW5nIGNvbW1hbmRzIG9uIGJsb2NrcywgYW4gZWFzaWx5CituYXZpZ2FibGUgYW5kIGRpZ2VzdGlibGUgaGVscCBzY3JlZW4sIGFuZCBtb3JlLiAoUGF1bCBQYXgpCisKK1RoZSByZWFzb24gV0hZIEkgZG9uJ3QgaGF2ZSB0aGlzIGFtYXppbmdseSB1c2VmdWwgbWFjcm8gYW55IG1vcmUsIGlzIHRoYXQgSQorbm93IHVzZSBWSU0gLSBhbmQgdGhpcyBpcyBidWlsdCBpbiEhIChTdGVwaGVuIFJpZWhtLCBHZXJtYW55KQorCitJIGFtIGEgdXNlciBvZiBWSU0gYW5kIEkgbG92ZSBpdC4gSSB1c2UgaXQgdG8gZG8gYWxsIG15IHByb2dyYW1taW5nLCBDLAorQysrLCBIVE1MIHdoYXQgZXZlci4gKFRpbSBBbGx3aW5lKQorCitJIGRpc2NvdmVyZWQgVklNIGFmdGVyIHllYXJzIG9mIHN0cnVnZ2xpbmcgd2l0aCB0aGUgb3JpZ2luYWwgdmksIGFuZCBJIGp1c3QKK2Nhbid0IGxpdmUgd2l0aG91dCBpdCBhbnkgbW9yZS4gIChFbW1hbnVlbCBNb2dlbmV0LCBVU0EpCisKK0VtYWNzIGhhcyBub3QgYSBiaXQgb2YgY2hhbmNlIHRvIHN1cnZpdmUgc28gbG9uZyBhcyBWSU0gaXMgYXJvdW5kLiAgQmVzaWRlcywKK2l0IGFsc28gaGFzIHRoZSBtb3N0IGRldGFpbGVkIHNvZnR3YXJlIGRvY3VtZW50YXRpb24gSSBoYXZlIGV2ZXIgc2Vlbi0tLW11Y2gKK2JldHRlciB0aGFuIG1vc3QgY29tbWVyY2lhbCBzb2Z0d2FyZSEgIChMZWltaW5nIFFpYW4pCisKK1RoaXMgdmVyc2lvbiBvZiBWSU0gd2lsbCBqdXN0IGJsb3cgcGVvcGxlIGFwYXJ0IHdoZW4gdGhleSBkaXNjb3ZlciBqdXN0IGhvdworZmFudGFzdGljIGl0IGlzISAoVG9ueSBOdWdlbnQsIEF1c3RyYWxpYSkKKworSSB0b29rIHlvdXIgYWR2aWNlICYgZmluYWxseSBnb3QgVklNICYgSSdtIHJlYWxseSBpbXByZXNzZWQuIEluc3RhbnQgY29udmVydC4KKyhQYXRyaWNrIEtpbGxlbGVhLCBVU0EpCisKK1ZJTSBpcyBieSBmYXIgbXkgZmF2b3JpdGUgcGllY2Ugb2Ygc2hhcmV3YXJlIGFuZCBJIGhhdmUgYmVlbiBwYXJ0aWN1bGFybHkKK3BsZWFzZWQgd2l0aCB2ZXJzaW9uIDMuMC4gIFRoaXMgaXMgcmVhbGx5IGEgc29saWQgcGllY2Ugb2Ygd29yay4gKFJvYmVydAorQ29sb24sIFVTQSkKKworVklNIGlzIGEgam95IHRvIHVzZSwgaXQgaXMgc28gd2VsbCB0aG91Z2h0IGFuZCBwcmFjdGljYWwgdGhhdCBJIHdvbmRlciB3aHkKK2FueWJvZHkgd291bGQgdXNlIHZpc3VhbCBkZXZlbG9wbWVudCB0b29scy4gIFZJTSBpcyBwb3dlcmZ1bCBhbmQgZWxlZ2FudCwgaXQKK2xvb2tzIGRlY2VwdGl2ZWx5IHNpbXBsZSBidXQgaXMgYWxtb3N0IGFzIGNvbXBsZXggYXMgYSA3NDcgKGVzcGVjaWFsbHkgd2hlbiBJCitsb29rIGF0IG15IGdyb3dpbmcgLnZpbXJjKSwga2VlcCB1cCB0aGF0IHdvbmRlcmZ1bCBqb2IsIFZJTSBpcyBhIGNlbnRlcnBpZWNlCitvZiB0aGUgZnJlZSBzb2Z0d2FyZSB3b3JsZC4gIChMb3Vpcy1EYXZpZCBNaXR0ZXJhbmQsIFVTQSkKKworSSBjYW5ub3QgYmVsaWV2ZSBob3cgZ3JlYXQgaXQgaXMgdG8gdXNlIFZJTS4gIEkgdGhpbmsgdGhlIGd1eXMgYXQgd29yayBhcmUKK2dldHRpbmcgdGlyZWQgb2YgaGVhcmluZyBtZSBicmFnZ2luZyBhYm91dCBpdC4gIE90aGVycyBleWVzIGFyZSBsaWdodGluZyB1cC4KKyhSaWNrIENyb290ZSkKKworRW1hY3MgdGFrZXMgd2F5IHRvIG11Y2ggdGltZSB0byBzdGFydCB1cCBhbmQgcnVuLCBpdCBpcyB0byBiaWcgYW5kIGJ1bGt5IGZvcgorZWZmZWN0aXZlIHVzZSBhbmQgdGhlIGludGVyZmFjZSBpcyBtb3JlIGNvbmZ1c2luZyB0aGFuIGl0IGlzIG9mIGFueSBoZWxwLiAgVklNCitob3dldmVyIGlzIHNob3J0LCBpdCBpcyBmYXN0LCBpdCBpcyBwb3dlcmZ1bCwgaXQgaGFzIGEgZ29vZCBpbnRlcmZhY2UgYW5kIGl0CitpcyBhbGwgcHVycG9zZS4gIChQYWFsIERpdGxlZnNlbiBFa3JhbikKKworRnJvbSB0aGUgZmlyc3QgdGltZSBJIGdvdCBWSU0zLjAsIEkgd2FzIHZlcnkgZW50aHVzaWFzdGljLiAgSXQgaGFzIGFsbW9zdCBubworcHJvYmxlbXMuICBUaGUgc3dhcGZpbGUgaGFuZGxpbmcgYW5kIHRoZSBiYWNrdXAgcG9zc2liaWxpdGllcyBhcmUgcm9idXN0LCBhbHNvCit0aGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGVkaXRpbmcgb25lIGZpbGUgdHdpY2UuICBJdCBpcyB2ZXJ5IGNvbXBhdGlibGUgdG8gdGhlCityZWFsIFZJIChhbmQgdGhhdCBpcyBhIE1VU1QsIGJlY2F1c2UgbXkgYnJhaW4gaXMgdHJhaW5lZCBvdmVyIHllYXJzIGluIHVzaW5nCitpdCkuICAoR2VydCB2YW4gQW50d2VycGVuLCBIb2xsYW5kKQorCitWaXN1YWwgbW9kZSBpbiBWSU0gaXMgYSB2ZXJ5IHBvd2VyZnVsIHRoaW5nISAoVG9ueSBOdWdlbnQsIEF1c3RyYWxpYSkKKworSSBoYXZlIHRvIHNheSB0aGF0IFZJTSBpcyA9VEhFPSBzaW5nbGUgZ3JlYXRlc3QgcGllY2Ugb2Ygc291cmNlIGNvZGUgdG8gZXZlcgorY29tZSBhY3Jvc3MgdGhlIG5ldCAoSmltIEJhdHRsZSwgVVNBKS4KKworSW4gZmFjdCwgaWYgeW91IGRvIHdhbnQgdG8gZ2V0IGEgbmV3IHZpIEknZCBzdWdnZXN0IFZJTS0zLjAuICBUaGlzIGlzLCBieQorZmFyLCB0aGUgYmVzdCB2ZXJzaW9uIG9mIHZpIEkndmUgZXZlciBzZWVuIChBbGJlcnQgVy4gU2NodWVsbGVyKS4KKworSSBzaG91bGQgbWVudGlvbiB0aGF0IFZJTSBpcyBhIHZlcnkgZ29vZCBlZGl0b3IgYW5kIGNhbiBjb21wZXRlIHdpdGggYW55dGhpbmcKKyhJbHlhIEJlbG9vemVyb3YpLgorCitUbyB0ZWxsIHRoZSB0cnV0aCBzb21ldGltZXMgSSB1c2VkIGVsdmlzLCB2aWxlLCB4dmksIGNhbHZpbiwgZXRjLiAgQW5kIHRoaXMgaXMKK3RoZSByZWFzb24gdGhhdCBJIGNhbiBzdGF0ZSB0aGF0IFZJTSBpcyB0aGUgYmVzdCEgKEZlcmVuYyBEZWFrLCBIdW5nYXJ5KQorCitWSU0gaXMgYnkgZmFyIHRoZSBiZXN0IGVkaXRvciB0aGF0IEkgaGF2ZSB1c2VkIGluIGEgbG9uZyB0aW1lLCBhbmQgSSBoYXZlCitsb29rZWQgYXQganVzdCBhYm91dCBldmVyeSB0aGluZyB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgZXZlcnkgcGxhdGZvcm0gdGhhdCBJCit1c2UuICBWSU0gaXMgdGhlIGJlc3Qgb24gYWxsIG9mIHRoZW0uICAoR3V5IEwuIE9saXZlcikKKworVklNIGlzIHRoZSBncmVhdGVzdCBlZGl0b3Igc2luY2UgdGhlIHN0b25lIGNoaXNlbC4gIChKb3NlIFVucGluZ2NvLCBVU0EpCisKK0kgd291bGQgbGlrZSB0byBzYXkgdGhhdCB3aXRoIFZJTSBJIGFtIGZpbmFsbHkgbWFraW5nIHRoZSAnZW1hY3MgdG8gdmknCit0cmFuc2l0aW9uIC0gYXMgYW4gRWRpdG9yIGl0IGlzIHNvIG11Y2ggYmV0dGVyIGluIG1hbnkgd2F5czoga2V5Ym9hcmQgbGF5b3V0LAorbWVtb3J5IHVzYWdlLCB0ZXh0IGFsdGVyYXRpb24gdG8gbmFtZSAzLiAoTWFyayBBZGFtKQorCitJbiBmYWN0LCBub3cgaWYgSSB3YW50IHRvIGtub3cgd2hhdCBhIHBhcnRpY3VsYXIgc2V0dGluZyBkb2VzIGluIHZpLCBJIGZpcmUgdXAKK1ZJTSBhbmQgY2hlY2sgb3V0IGl0J3MgaGVscCEgIChOaWtoaWwgUGF0ZWwsIFVTQSkKKworQXMgYSB2aSB1c2VyLCBWSU0gaGFzIG1hZGUgd29ya2luZyB3aXRoIHRleHQgYSBmYXIgbW9yZSBwbGVhc2FudCB0YXNrIHRoYW4KK2JlZm9yZSBJIGVuY291bnRlcmVkIHRoaXMgcHJvZ3JhbS4gIChTdGVpbmFyIEtudXRzZW4sIE5vcndheSkKKworSSB1c2UgVklNIHNpbmNlIHZlcnNpb24gMy4wLiAgU2luY2UgdGhhdCB0aW1lLCBpdCBpcyB0aGUgT05MWSBlZGl0b3IgSSB1c2UsCit3aXRoIFNvbGFyaXMsIExpbnV4IGFuZCBPUy8yIFdhcnAuICBJIHN1Z2dlc3QgYWxsIG15IGZyaWVuZHMgdG8gdXNlIFZJTSwgdGhleQordHJ5LCBhbmQgdGhleSBjb250aW51ZSB1c2luZyBpdC4gIFZJTSBpcyByZWFsbHkgdGhlIGJlc3Qgc29mdHdhcmUgSSBoYXZlIGV2ZXIKK2Rvd25sb2FkZWQgZnJvbSB0aGUgSW50ZXJuZXQsIGFuZCB0aGUgYmVzdCBlZGl0b3IgSSBrbm93IG9mLiAoTWFyY28KK0VjY2V0dHVhdG8sIEl0YWx5KQorCisKK0luIHN1bW1hcnk6CisgICAgIF9fICAgICBfX18JCSAgICBfCSAgICBfCV8gIF9fXyBfX19fXworICAgICBcIFwgICAvIChfKV8gX18gX19fICAgKF8pX19fICB8IHwgfCB8LyBfIFxfICAgX3wKKyAgICAgIFwgXCAvIC98IHwgJ18gYCBfIFwgIHwgLyBfX3wgfCB8X3wgfCB8IHwgfHwgfAorICAgICAgIFwgViAvIHwgfCB8IHwgfCB8IHwgfCBcX18gXCB8ICBfICB8IHxffCB8fCB8CisJXF8vICB8X3xffCB8X3wgfF98IHxffF9fXy8gfF98IHxffFxfX18vIHxffAorCSAgICAgX19fXyBfX19fXyBfICAgXyBfX19fXyBfX19fXyBfIF8KKwkgICAgLyBfX198XyAgIF98IHwgfCB8CV9fX3wgIF9fX3wgfCB8CisJICAgIFxfX18gXCB8IHwgfCB8IHwgfCB8XyAgfCB8XyAgfCB8IHwKKwkgICAgIF9fXykgfHwgfCB8IHxffCB8CV98IHwgIF98IHxffF98CisJICAgIHxfX19fLyB8X3wJXF9fXy98X3wgICB8X3wJIChffF8pCSAgICAgIChUb255IE51Z2VudCwgQXVzdHJhbGlhKQorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcmVjb3Zlci50eHQgYi9ydW50aW1lL2RvYy9yZWNvdmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWNiZTAxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvcmVjb3Zlci50eHQKQEAgLTAsMCArMSwxNjUgQEAKKypyZWNvdmVyLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBBcHIgMTYKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitSZWNvdmVyeSBhZnRlciBhIGNyYXNoCQkJCQkqY3Jhc2gtcmVjb3ZlcnkqCisKK1lvdSBoYXZlIHNwZW50IHNldmVyYWwgaG91cnMgdHlwaW5nIGluIHRoYXQgdGV4dCB0aGF0IGhhcyB0byBiZSBmaW5pc2hlZAorbmV4dCBtb3JuaW5nLCBhbmQgdGhlbiBkaXNhc3RlciBzdHJpa2VzOiBZb3VyIGNvbXB1dGVyIGNyYXNoZXMuCisKKwkJCURPTidUIFBBTklDIQorCitZb3UgY2FuIHJlY292ZXIgbW9zdCBvZiB5b3VyIGNoYW5nZXMgZnJvbSB0aGUgZmlsZXMgdGhhdCBWaW0gdXNlcyB0byBzdG9yZQordGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiAgTW9zdGx5IHlvdSBjYW4gcmVjb3ZlciB5b3VyIHdvcmsgd2l0aCBvbmUgY29tbWFuZDoKKwl2aW0gLXIgZmlsZW5hbWUKKworMS4gVGhlIHN3YXAgZmlsZQl8c3dhcC1maWxlfAorMi4gUmVjb3ZlcnkJCXxyZWNvdmVyeXwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBUaGUgc3dhcCBmaWxlCQkJCQkqc3dhcC1maWxlKgorCitWaW0gc3RvcmVzIHRoZSB0aGluZ3MgeW91IGNoYW5nZWQgaW4gYSBzd2FwIGZpbGUuICBVc2luZyB0aGUgb3JpZ2luYWwgZmlsZQoreW91IHN0YXJ0ZWQgZnJvbSBwbHVzIHRoZSBzd2FwIGZpbGUgeW91IGNhbiBtb3N0bHkgcmVjb3ZlciB5b3VyIHdvcmsuCisKK1lvdSBjYW4gc2VlIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHN3YXAgZmlsZSBiZWluZyB1c2VkIHdpdGggdGhlIGNvbW1hbmQ6CisKKwk6c3dbYXBuYW1lXQkJCQkJKjpzdyogKjpzd2FwbmFtZSoKKworVGhlIG5hbWUgb2YgdGhlIHN3YXAgZmlsZSBpcyBub3JtYWxseSB0aGUgc2FtZSBhcyB0aGUgZmlsZSB5b3UgYXJlIGVkaXRpbmcsCit3aXRoIHRoZSBleHRlbnNpb24gIi5zd3AiLgorLSBPbiBVbml4LCBhICcuJyBpcyBwcmVwZW5kZWQgdG8gc3dhcCBmaWxlIG5hbWVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKKyAgZWRpdGVkIGZpbGUuICBUaGlzIGF2b2lkcyB0aGF0IHRoZSBzd2FwIGZpbGUgc2hvd3MgdXAgaW4gYSBkaXJlY3RvcnkKKyAgbGlzdGluZy4KKy0gT24gTVMtRE9TIG1hY2hpbmVzIGFuZCB3aGVuIHRoZSAnc2hvcnRuYW1lJyBvcHRpb24gaXMgb24sIGFueSAnLicgaW4gdGhlCisgIG9yaWdpbmFsIGZpbGUgbmFtZSBpcyByZXBsYWNlZCB3aXRoICdfJy4KKy0gSWYgdGhpcyBmaWxlIGFscmVhZHkgZXhpc3RzIChlLmcuLCB3aGVuIHlvdSBhcmUgcmVjb3ZlcmluZyBmcm9tIGEgY3Jhc2gpIGEKKyAgd2FybmluZyBpcyBnaXZlbiBhbmQgYW5vdGhlciBleHRlbnNpb24gaXMgdXNlZCwgIi5zd28iLCAiLnN3biIsIGV0Yy4KKy0gQW4gZXhpc3RpbmcgZmlsZSB3aWxsIG5ldmVyIGJlIG92ZXJ3cml0dGVuLgorLSBUaGUgc3dhcCBmaWxlIGlzIGRlbGV0ZWQgYXMgc29vbiBhcyBWaW0gc3RvcHMgZWRpdGluZyB0aGUgZmlsZS4KKworVGVjaG5pY2FsOiBUaGUgcmVwbGFjZW1lbnQgb2YgJy4nIHdpdGggJ18nIGlzIGRvbmUgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aAorCSAgIE1TLURPUyBjb21wYXRpYmxlIGZpbGVzeXN0ZW1zIChlLmcuLCBjcm9zc2RvcywgbXVsdGlkb3MpLiAgSWYgVmltCisJICAgaXMgYWJsZSB0byBkZXRlY3QgdGhhdCB0aGUgZmlsZSBpcyBvbiBhbiBNUy1ET1MtbGlrZSBmaWxlc3lzdGVtLCBhCisJICAgZmxhZyBpcyBzZXQgdGhhdCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSAnc2hvcnRuYW1lJyBvcHRpb24uCisJICAgVGhpcyBmbGFnIGlzIHJlc2V0IHdoZW4geW91IHN0YXJ0IGVkaXRpbmcgYW5vdGhlciBmaWxlLgorCQkJCQkJCSpFMzI2KgorCSAgIElmIHRoZSAiLnN3cCIgZmlsZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMKKwkgICBkZWNyZW1lbnRlZCB1bnRpbCB0aGVyZSBpcyBubyBmaWxlIHdpdGggdGhhdCBuYW1lIG9yICIuc2FhIiBpcworCSAgIHJlYWNoZWQuICBJbiB0aGUgbGFzdCBjYXNlLCBubyBzd2FwIGZpbGUgaXMgY3JlYXRlZC4KKworQnkgc2V0dGluZyB0aGUgJ2RpcmVjdG9yeScgb3B0aW9uIHlvdSBjYW4gcGxhY2UgdGhlIHN3YXAgZmlsZSBpbiBhbm90aGVyIHBsYWNlCit0aGFuIHdoZXJlIHRoZSBlZGl0ZWQgZmlsZSBpcy4KK0FkdmFudGFnZXM6CistIFlvdSB3aWxsIG5vdCBwb2xsdXRlIHRoZSBkaXJlY3RvcmllcyB3aXRoICIuc3dwIiBmaWxlcy4KKy0gV2hlbiB0aGUgJ2RpcmVjdG9yeScgaXMgb24gYW5vdGhlciBwYXJ0aXRpb24sIHJlZHVjZSB0aGUgcmlzayBvZiBkYW1hZ2luZworICB0aGUgZmlsZSBzeXN0ZW0gd2hlcmUgdGhlIGZpbGUgaXMgKGluIGEgY3Jhc2gpLgorRGlzYWR2YW50YWdlczoKKy0gWW91IGNhbiBnZXQgbmFtZSBjb2xsaXNpb25zIGZyb20gZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dCBpbiBkaWZmZXJlbnQKKyAgZGlyZWN0b3JpZXMgKGFsdGhvdWdoIFZpbSB0cmllcyB0byBhdm9pZCB0aGF0IGJ5IGNvbXBhcmluZyB0aGUgcGF0aCBuYW1lKS4KKyAgVGhpcyB3aWxsIHJlc3VsdCBpbiBib2d1cyBBVFRFTlRJT04gd2FybmluZyBtZXNzYWdlcy4KKy0gV2hlbiB5b3UgdXNlIHlvdXIgaG9tZSBkaXJlY3RvcnksIGFuZCBzb21lYm9keSBlbHNlIHRyaWVzIHRvIGVkaXQgdGhlIHNhbWUKKyAgZmlsZSwgaGUgd2lsbCBub3Qgc2VlIHlvdXIgc3dhcCBmaWxlIGFuZCB3aWxsIG5vdCBnZXQgdGhlIEFUVEVOVElPTiB3YXJpbmcKKyAgbWVzc2FnZS4KK09uIHRoZSBBbWlnYSB5b3UgY2FuIGFsc28gdXNlIGEgcmVjb3ZlcmFibGUgcmFtIGRpc2ssIGJ1dCB0aGVyZSBpcyBubyAxMDAlCitndWFyYW50ZWUgdGhhdCB0aGlzIHdvcmtzLiAgUHV0dGluZyBzd2FwIGZpbGVzIGluIGEgbm9ybWFsIHJhbSBkaXNrIChsaWtlIFJBTToKK29uIHRoZSBBbWlnYSkgb3IgaW4gYSBwbGFjZSB0aGF0IGlzIGNsZWFyZWQgd2hlbiByZWJvb3RpbmcgKGxpa2UgL3RtcCBvbiBVbml4KQorbWFrZXMgbm8gc2Vuc2UsIHlvdSB3aWxsIGxvc2UgdGhlIHN3YXAgZmlsZSBpbiBhIGNyYXNoLgorCitJZiB5b3Ugd2FudCB0byBwdXQgc3dhcCBmaWxlcyBpbiBhIGZpeGVkIHBsYWNlLCBwdXQgYSBjb21tYW5kIHJlc2VtYmxpbmcgdGhlCitmb2xsb3dpbmcgb25lcyBpbiB5b3VyIC52aW1yYzoKKwk6c2V0IGRpcj1kaDI6dG1wCShmb3IgQW1pZ2EpCisJOnNldCBkaXI9fi90bXAJCShmb3IgVW5peCkKKwk6c2V0IGRpcj1jOlxcdG1wCShmb3IgTVMtRE9TIGFuZCBXaW4zMikKK1RoaXMgaXMgYWxzbyB2ZXJ5IGhhbmR5IHdoZW4gZWRpdGluZyBmaWxlcyBvbiBmbG9wcHkuICBPZiBjb3Vyc2UgeW91IHdpbGwgaGF2ZQordG8gY3JlYXRlIHRoYXQgInRtcCIgZGlyZWN0b3J5IGZvciB0aGlzIHRvIHdvcmshCisKK0ZvciByZWFkLW9ubHkgZmlsZXMsIGEgc3dhcCBmaWxlIGlzIG5vdCB1c2VkLiAgVW5sZXNzIHRoZSBmaWxlIGlzIGJpZywgY2F1c2luZwordGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCB0byBiZSBoaWdoZXIgdGhhbiBnaXZlbiB3aXRoICdtYXhtZW0nIG9yCisnbWF4bWVtdG90Jy4gIEFuZCB3aGVuIG1ha2luZyBhIGNoYW5nZSB0byBhIHJlYWQtb25seSBmaWxlLCB0aGUgc3dhcCBmaWxlIGlzCitjcmVhdGVkIGFueXdheS4KKworVGhlICdzd2FwZmlsZScgb3B0aW9uIGNhbiBiZSByZXNldCB0byBhdm9pZCBjcmVhdGluZyBhIHN3YXBmaWxlLgorCisKK0RldGVjdGluZyBhbiBleGlzdGluZyBzd2FwIGZpbGUgfgorCitZb3UgY2FuIGZpbmQgdGhpcyBpbiB0aGUgdXNlciBtYW51YWwsIHNlY3Rpb24gfDExLjN8LgorCisKK1VwZGF0aW5nIHRoZSBzd2FwZmlsZSB+CisKK1RoZSBzd2FwIGZpbGUgaXMgdXBkYXRlZCBhZnRlciB0eXBpbmcgMjAwIGNoYXJhY3RlcnMgb3Igd2hlbiB5b3UgaGF2ZSBub3QKK3R5cGVkIGFueXRoaW5nIGZvciBmb3VyIHNlY29uZHMuICBUaGlzIG9ubHkgaGFwcGVucyBpZiB0aGUgYnVmZmVyIHdhcworY2hhbmdlZCwgbm90IHdoZW4geW91IG9ubHkgbW92ZWQgYXJvdW5kLiAgVGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90IGtlcHQgdXAgdG8KK2RhdGUgYWxsIHRoZSB0aW1lIGlzIHRoYXQgdGhpcyB3b3VsZCBzbG93IGRvd24gbm9ybWFsIHdvcmsgdG9vIG11Y2guICBZb3UgY2FuCitjaGFuZ2UgdGhlIDIwMCBjaGFyYWN0ZXIgY291bnQgd2l0aCB0aGUgJ3VwZGF0ZWNvdW50JyBvcHRpb24uICBZb3UgY2FuIHNldAordGhlIHRpbWUgd2l0aCB0aGUgJ3VwZGF0ZXRpbWUnIG9wdGlvbi4gIFRoZSB0aW1lIGlzIGdpdmVuIGluIG1pbGxpc2Vjb25kcy4KK0FmdGVyIHdyaXRpbmcgdG8gdGhlIHN3YXAgZmlsZSBWaW0gc3luY3MgdGhlIGZpbGUgdG8gZGlzay4gIFRoaXMgdGFrZXMgc29tZQordGltZSwgZXNwZWNpYWxseSBvbiBidXN5IFVuaXggc3lzdGVtcy4gIElmIHlvdSBkb24ndCB3YW50IHRoaXMgeW91IGNhbiBzZXQgdGhlCisnc3dhcHN5bmMnIG9wdGlvbiB0byBhbiBlbXB0eSBzdHJpbmcuICBUaGUgcmlzayBvZiBsb3Npbmcgd29yayBiZWNvbWVzIGJpZ2dlcgordGhvdWdoLiAgT24gc29tZSBub24tVW5peCBzeXN0ZW1zIChNUy1ET1MsIEFtaWdhKSB0aGUgc3dhcCBmaWxlIHdvbid0IGJlCit3cml0dGVuIGF0IGFsbC4KKworSWYgdGhlIHdyaXRpbmcgdG8gdGhlIHN3YXAgZmlsZSBpcyBub3Qgd2FudGVkLCBpdCBjYW4gYmUgc3dpdGNoZWQgb2ZmIGJ5CitzZXR0aW5nIHRoZSAndXBkYXRlY291bnQnIG9wdGlvbiB0byAwLiAgVGhlIHNhbWUgaXMgZG9uZSB3aGVuIHN0YXJ0aW5nIFZpbQord2l0aCB0aGUgIi1uIiBvcHRpb24uICBXcml0aW5nIGNhbiBiZSBzd2l0Y2hlZCBiYWNrIG9uIGJ5IHNldHRpbmcgdGhlCisndXBkYXRlY291bnQnIG9wdGlvbiB0byBub24temVyby4gIFN3YXAgZmlsZXMgd2lsbCBiZSBjcmVhdGVkIGZvciBhbGwgYnVmZmVycword2hlbiBkb2luZyB0aGlzLiAgQnV0IHdoZW4gc2V0dGluZyAndXBkYXRlY291bnQnIHRvIHplcm8sIHRoZSBleGlzdGluZyBzd2FwCitmaWxlcyB3aWxsIG5vdCBiZSByZW1vdmVkLCBpdCB3aWxsIG9ubHkgYWZmZWN0IGZpbGVzIHRoYXQgd2lsbCBiZSBvcGVuZWQKK2FmdGVyIHRoaXMuCisKK0lmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdXIgY2hhbmdlcyBhcmUgaW4gdGhlIHN3YXAgZmlsZSB1c2UgdGhpcworY29tbWFuZDoKKworCQkJCQkqOnByZSogKjpwcmVzZXJ2ZSogKkUzMTMqICpFMzE0KgorOnByZVtzZXJ2ZV0JCVdyaXRlIGFsbCB0ZXh0IGZvciBhbGwgYnVmZmVycyBpbnRvIHN3YXAgZmlsZS4gIFRoZQorCQkJb3JpZ2luYWwgZmlsZSBpcyBubyBsb25nZXIgbmVlZGVkIGZvciByZWNvdmVyeS4gIHtWaToKKwkJCWVtZXJnZW5jeSBleGl0fQorCitBIFZpbSBzd2FwIGZpbGUgY2FuIGJlIHJlY29nbml6ZWQgYnkgdGhlIGZpcnN0IHNpeCBjaGFyYWN0ZXJzOiAiYjBWSU0gIi4KK0FmdGVyIHRoYXQgY29tZXMgdGhlIHZlcnNpb24gbnVtYmVyLCBlLmcuLCAiMy4wIi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBSZWNvdmVyeQkJCQkJKnJlY292ZXJ5KiAqRTMwOCogKkUzMTEqCisKK0Jhc2ljIGZpbGUgcmVjb3ZlcnkgaXMgZXhwbGFpbmVkIGluIHRoZSB1c2VyIG1hbnVhbDogfHVzcl8xMS50eHR8LgorCitBbm90aGVyIHdheSB0byBkbyByZWNvdmVyeSBpcyB0byBzdGFydCBWaW0gYW5kIHVzZSB0aGUgIjpyZWNvdmVyIiBjb21tYW5kLgorVGhpcyBpcyBlYXN5IHdoZW4geW91IHN0YXJ0IFZpbSB0byBlZGl0IGEgZmlsZSBhbmQgeW91IGdldCB0aGUgIkFUVEVOVElPTjoKK0ZvdW5kIGEgc3dhcCBmaWxlIC4uLiIgbWVzc2FnZS4gIEluIHRoaXMgY2FzZSB0aGUgc2luZ2xlIGNvbW1hbmQgIjpyZWNvdmVyIgord2lsbCBkbyB0aGUgd29yay4gIFlvdSBjYW4gYWxzbyBnaXZlIHRoZSBuYW1lIG9mIHRoZSBmaWxlIG9yIHRoZSBzd2FwIGZpbGUgdG8KK3RoZSByZWNvdmVyIGNvbW1hbmQ6CisJCQkJCSo6cmVjKiAqOnJlY292ZXIqICpFMzA1KiAqRTMwNiogKkUzMDcqCis6cmVjW292ZXJdIFtmaWxlXQlUcnkgdG8gcmVjb3ZlciBbZmlsZV0gZnJvbSB0aGUgc3dhcCBmaWxlLiAgSWYgW2ZpbGVdCisJCQlpcyBub3QgZ2l2ZW4gdXNlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBjdXJyZW50CisJCQlidWZmZXIuICBUaGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGFyZSBsb3N0LgorCQkJVGhpcyBjb21tYW5kIGZhaWxzIGlmIHRoZSBidWZmZXIgd2FzIG1vZGlmaWVkLgorCis6cmVjW292ZXJdISBbZmlsZV0JTGlrZSAiOnJlY292ZXIiLCBidXQgYW55IGNoYW5nZXMgaW4gdGhlIGN1cnJlbnQKKwkJCWJ1ZmZlciBhcmUgbG9zdC4KKworCQkJCQkJCSpFMzEyKiAqRTMwOSogKkUzMTAqCitWaW0gaGFzIHNvbWUgaW50ZWxsaWdlbmNlIGFib3V0IHdoYXQgdG8gZG8gaWYgdGhlIHN3YXAgZmlsZSBpcyBjb3JydXB0IGluCitzb21lIHdheS4gIElmIFZpbSBoYXMgZG91YnQgYWJvdXQgd2hhdCBpdCBmb3VuZCwgaXQgd2lsbCBnaXZlIGFuIGVycm9yCittZXNzYWdlIGFuZCBpbnNlcnQgbGluZXMgd2l0aCAiPz8/IiBpbiB0aGUgdGV4dC4gIElmIHlvdSBzZWUgYW4gZXJyb3IgbWVzc2FnZQord2hpbGUgcmVjb3ZlcmluZywgc2VhcmNoIGluIHRoZSBmaWxlIGZvciAiPz8/IiB0byBzZWUgd2hhdCBpcyB3cm9uZy4gIFlvdSBtYXkKK3dhbnQgdG8gY3V0IGFuZCBwYXN0ZSB0byBnZXQgdGhlIHRleHQgeW91IG5lZWQuCisKK1RoZSBtb3N0IGNvbW1vbiByZW1hcmsgaXMgIj8/P0xJTkVTIE1JU1NJTkciLiAgVGhpcyBtZWFucyB0aGF0IFZpbSBjYW5ub3QgcmVhZAordGhlIHRleHQgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZS4gIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgc3lzdGVtIGNyYXNoZWQgYW5kCitwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgZmlsZSB3ZXJlIG5vdCB3cml0dGVuIHRvIGRpc2suCisKK0JlIHN1cmUgdGhhdCB0aGUgcmVjb3Zlcnkgd2FzIHN1Y2Nlc3NmdWwgYmVmb3JlIG92ZXJ3cml0aW5nIHRoZSBvcmlnaW5hbAorZmlsZSBvciBkZWxldGluZyB0aGUgc3dhcCBmaWxlLiAgSXQgaXMgZ29vZCBwcmFjdGljZSB0byB3cml0ZSB0aGUgcmVjb3ZlcmVkCitmaWxlIGVsc2V3aGVyZSBhbmQgcnVuICdkaWZmJyB0byBmaW5kIG91dCBpZiB0aGUgY2hhbmdlcyB5b3Ugd2FudCBhcmUgaW4gdGhlCityZWNvdmVyZWQgZmlsZS4KKworT25jZSB5b3UgYXJlIHN1cmUgdGhlIHJlY292ZXJ5IGlzIG9rIGRlbGV0ZSB0aGUgc3dhcCBmaWxlLiAgT3RoZXJ3aXNlLCB5b3UKK3dpbGwgY29udGludWUgdG8gZ2V0IHdhcm5pbmcgbWVzc2FnZXMgdGhhdCB0aGUgIi5zd3AiIGZpbGUgYWxyZWFkeSBleGlzdHMuCisKK3tWaTogcmVjb3ZlcnMgaW4gYW5vdGhlciB3YXkgYW5kIHNlbmRzIG1haWwgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlY292ZXJ9CisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9yZW1vdGUudHh0IGIvcnVudGltZS9kb2MvcmVtb3RlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2QzMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvcmVtb3RlLnR4dApAQCAtMCwwICsxLDE4OCBAQAorKnJlbW90ZS50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAzIE5vdiAxMAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1ZpbSBjbGllbnQtc2VydmVyIGNvbW11bmljYXRpb24JCQkJKmNsaWVudC1zZXJ2ZXIqCisKKzEuIENvbW1vbiBmdW5jdGlvbmFsaXR5CQl8Y2xpZW50c2VydmVyfAorMi4gWDExIHNwZWNpZmljIGl0ZW1zCQl8eDExLWNsaWVudHNlcnZlcnwKKzMuIE1TLVdpbmRvd3Mgc3BlY2lmaWMgaXRlbXMJfHczMi1jbGllbnRzZXJ2ZXJ8CisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBDb21tb24gZnVuY3Rpb25hbGl0eQkJCQkJKmNsaWVudHNlcnZlcioKKworV2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2NsaWVudHNlcnZlcnwgb3B0aW9uLCBWaW0gY2FuIGFjdCBhcyBhIGNvbW1hbmQKK3NlcnZlci4gIEl0IGFjY2VwdHMgbWVzc2FnZXMgZnJvbSBhIGNsaWVudCBhbmQgZXhlY3V0ZXMgdGhlbS4gIEF0IHRoZSBzYW1lCit0aW1lLCBWaW0gY2FuIGZ1bmN0aW9uIGFzIGEgY2xpZW50IGFuZCBzZW5kIGNvbW1hbmRzIHRvIGEgVmltIHNlcnZlci4KKworVGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBhdmFpbGFibGU6CisKKyAgICBhcmd1bWVudAkJCW1lYW5pbmcJfgorCisgICAtLXJlbW90ZSBbK3tjbWR9XSB7ZmlsZX0gLi4uCQkJCQkqLS1yZW1vdGUqCisJCQkJT3BlbiB0aGUgZmlsZSBsaXN0IGluIGEgcmVtb3RlIFZpbS4gIFdoZW4KKwkJCQl0aGVyZSBpcyBubyBWaW0gc2VydmVyLCBleGVjdXRlIGxvY2FsbHkuCisJCQkJVGhlcmUgaXMgb25lIG9wdGlvbmFsIGluaXQgY29tbWFuZDogK3tjbWR9LgorCQkJCVRoaXMgbXVzdCBiZSBhbiBFeCBjb21tYW5kIHRoYXQgY2FuIGJlCisJCQkJZm9sbG93ZWQgYnkgInwiLgorCQkJCVRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUgaXMgdGFrZW4gYXMgdGhlCisJCQkJZmlsZSBsaXN0LiAgVGh1cyBhbnkgbm9uLWZpbGUgYXJndW1lbnRzIG11c3QKKwkJCQljb21lIGJlZm9yZSB0aGlzLgorCQkJCVlvdSBjYW5ub3QgZWRpdCBzdGRpbiB0aGlzIHdheSB8LS18LgorCQkJCVRoZSByZW1vdGUgVmltIGlzIHJhaXNlZC4gIElmIHlvdSBkb24ndCB3YW50CisJCQkJdGhpcyB1c2UgPgorCQkJCSB2aW0gLS1yZW1vdGUtc2VuZCAiPEMtXD48Qy1OPjpuIGZpbGVuYW1lPENSPiIKKzwgIC0tcmVtb3RlLXNpbGVudCBbK3tjbWR9XSB7ZmlsZX0gLi4uCQkJKi0tcmVtb3RlLXNpbGVudCoKKwkJCQlBcyBhYm92ZSwgYnV0IGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vCisJCQkJc2VydmVyIGFuZCB0aGUgZmlsZSBpcyBlZGl0ZWQgbG9jYWxseS4KKyAgIC0tcmVtb3RlLXdhaXQgWyt7Y21kfV0ge2ZpbGV9IC4uLgkJCQkqLS1yZW1vdGUtd2FpdCoKKwkJCQlBcyAtLXJlbW90ZSwgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGNvbXBsZXRlCisJCQkJKHVubG9hZCkgaW4gcmVtb3RlIFZpbS4KKyAgIC0tcmVtb3RlLXdhaXQtc2lsZW50IFsre2NtZH1dIHtmaWxlfSAuLi4JCSotLXJlbW90ZS13YWl0LXNpbGVudCoKKwkJCQlBcyAtLXJlbW90ZS13YWl0LCBidXQgZG9uJ3QgY29tcGxhaW4gaWYgdGhlcmUKKwkJCQlpcyBubyBzZXJ2ZXIuCisJCQkJCQkJCSotLXNlcnZlcm5hbWUqCisgICAtLXNlcnZlcm5hbWUge25hbWV9CQlCZWNvbWUgdGhlIHNlcnZlciB7bmFtZX0uICBXaGVuIHVzZWQgdG9nZXRoZXIKKwkJCQl3aXRoIG9uZSBvZiB0aGUgLS1yZW1vdGUgY29tbWFuZHM6IGNvbm5lY3QgdG8KKwkJCQlzZXJ2ZXIge25hbWV9IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgKHNlZQorCQkJCWJlbG93KS4KKwkJCQkJCQkJKi0tcmVtb3RlLXNlbmQqCisgICAtLXJlbW90ZS1zZW5kIHtrZXlzfQkJU2VuZCB7a2V5c30gdG8gc2VydmVyIGFuZCBleGl0LgorCQkJCQkJCQkqLS1yZW1vdGUtZXhwcioKKyAgIC0tcmVtb3RlLWV4cHIge2V4cHJ9CQlFdmFsdWF0ZSB7ZXhwcn0gaW4gc2VydmVyIGFuZAorCQkJCXByaW50IHRoZSByZXN1bHQgb24gc3Rkb3V0LgorCQkJCQkJCQkqLS1zZXJ2ZXJsaXN0KgorICAgLS1zZXJ2ZXJsaXN0CQkJT3V0cHV0IGEgbGlzdCBvZiBzZXJ2ZXIgbmFtZXMuCisKKworRXhhbXBsZXMgfgorCitFZGl0ICJmaWxlLnR4dCIgaW4gYW4gYWxyZWFkeSBydW5uaW5nIEdWSU0gc2VydmVyOiA+CisgICAgZ3ZpbSAtLXJlbW90ZSBmaWxlLnR4dAorCitFZGl0ICJmaWxlLnR4dCIgaW4gYW4gYWxyZWFkeSBydW5uaW5nIHNlcnZlciBjYWxsZWQgRk9PQkFSOiA+CisgICAgZ3ZpbSAtLXNlcnZlcm5hbWUgRk9PQkFSIC0tcmVtb3RlIGZpbGUudHh0CisKK0VkaXQgImZpbGUudHh0IiBpbiBzZXJ2ZXIgIkZJTEVTIiBpZiBpdCBleGlzdHMsIGJlY29tZSBzZXJ2ZXIgIkZJTEVTIgorb3RoZXJ3aXNlOiA+CisgICAgZ3ZpbSAtLXNlcnZlcm5hbWUgRklMRVMgLS1yZW1vdGUtc2lsZW50IGZpbGUudHh0CisKK1RoaXMgZG9lc24ndCB3b3JrLCBhbGwgYXJndW1lbnRzIGFmdGVyIC0tcmVtb3RlIHdpbGwgYmUgdXNlZCBhcyBmaWxlIG5hbWVzOiA+CisgICAgZ3ZpbSAtLXJlbW90ZSAtLXNlcnZlcm5hbWUgRk9PQkFSIGZpbGUudHh0CisKK0VkaXQgZmlsZSAiK2ZvbyIgaW4gYSByZW1vdGUgc2VydmVyIChub3RlIHRoZSB1c2Ugb2YgIi4vIiB0byBhdm9pZCB0aGUgc3BlY2lhbAorbWVhbmluZyBvZiB0aGUgbGVhZGluZyBwbHVzKTogPgorICAgIHZpbSAtLXJlbW90ZSAuLytmb28KKworVGVsbCB0aGUgcmVtb3RlIHNlcnZlciAiQkxBIiB0byB3cml0ZSBhbGwgZmlsZXMgYW5kIGV4aXQ6ID4KKyAgICB2aW0gLS1zZXJ2ZXJuYW1lIEJMQSAtLXJlbW90ZS1zZW5kICc8Qy1cPjxDLU4+OndxYTxDUj4nCisKKworU0VSVkVSIE5BTUUKKworQnkgZGVmYXVsdCBWaW0gd2lsbCB0cnkgdG8gcmVnaXN0ZXIgdGhlIG5hbWUgdW5kZXIgd2hpY2ggaXQgd2FzIGludm9rZWQgKGd2aW0sCitlZ3ZpbSAuLi4pLiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtLXNlcnZlcm5hbWUgYXJndW1lbnQuICBJZiB0aGUKK3NwZWNpZmllZCBuYW1lIGlzIG5vdCBhdmFpbGFibGUsIGEgcG9zdGZpeCBpcyBhcHBsaWVkIHVudGlsIGEgZnJlZSBuYW1lIGlzCitlbmNvdW50ZXJlZCwgaWUuICJndmltMSIgZm9yIHRoZSBzZWNvbmQgaW52b2NhdGlvbiBvZiBndmltIG9uIGEgcGFydGljdWxhcgorWC1zZXJ2ZXIuICBUaGUgcmVzdWx0aW5nIG5hbWUgaXMgYXZhaWxhYmxlIGluIHRoZSBzZXJ2ZXJuYW1lIGJ1aWx0aW4gdmFyaWFibGUKK3x2OnNlcnZlcm5hbWV8LiAgVGhlIGNhc2Ugb2YgdGhlIHNlcnZlciBuYW1lIGlzIGlnbm9yZWQsIHRodXMgImd2aW0iIGFuZAorIkdWSU0iIGFyZSBjb25zaWRlcmVkIGVxdWFsLgorCitXaGVuIFZpbSBpcyBpbnZva2VkIHdpdGggLS1yZW1vdGUsIC0tcmVtb3RlLXdhaXQgb3IgLS1yZW1vdGUtc2VuZCBpdCB3aWxsIHRyeQordG8gbG9jYXRlIHRoZSBzZXJ2ZXIgbmFtZSBkZXRlcm1pbmVkIGJ5IHRoZSBpbnZvY2F0aW9uIG5hbWUgYW5kIC0tc2VydmVybmFtZQorYXJndW1lbnQgYXMgZGVzY3JpYmVkIGFib3ZlLiAgSWYgYW4gZXhhY3QgbWF0Y2ggaXMgbm90IGF2YWlsYWJsZSwgdGhlIGZpcnN0CitzZXJ2ZXIgd2l0aCB0aGUgbnVtYmVyIHBvc3RmaXggd2lsbCBiZSB1c2VkLiAgSWYgYSBuYW1lIHdpdGggdGhlIG51bWJlcgorcG9zdGZpeCBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgLS1zZXJ2ZXJuYW1lIGFyZ3VtZW50LCBpdCBtdXN0IG1hdGNoIGV4YWN0bHkuCisKK0lmIG5vIHNlcnZlciBjYW4gYmUgbG9jYXRlZCBhbmQgLS1yZW1vdGUgb3IgLS1yZW1vdGUtd2FpdCB3YXMgdXNlZCwgVmltIHdpbGwKK3N0YXJ0IHVwIGFjY29yZGluZyB0byB0aGUgcmVzdCBvZiB0aGUgY29tbWFuZCBsaW5lIGFuZCBkbyB0aGUgZWRpdGluZyBieQoraXRzZWxmLiAgVGhpcyB3YXkgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBrbm93IHdoZXRoZXIgZ3ZpbSBpcyBhbHJlYWR5IHN0YXJ0ZWQKK3doZW4gc2VuZGluZyBjb21tYW5kIHRvIGl0LgorCitUaGUgLS1zZXJ2ZXJsaXN0IGFyZ3VtZW50IHdpbGwgY2F1c2UgVmltIHRvIHByaW50IGEgbGlzdCBvZiByZWdpc3RlcmVkIGNvbW1hbmQKK3NlcnZlcnMgb24gdGhlIHN0YW5kYXJkIG91dHB1dCAoc3Rkb3V0KSBhbmQgZXhpdC4KKworV2luMzIgTm90ZTogTWFraW5nIHRoZSBWaW0gc2VydmVyIGdvIHRvIHRoZSBmb3JlZ3JvdW5kIGRvZXNuJ3QgYWx3YXlzIHdvcmssCitiZWNhdXNlIE1TLVdpbmRvd3MgZG9lc24ndCBhbGxvdyBpdC4gIFRoZSBjbGllbnQgd2lsbCBtb3ZlIHRoZSBzZXJ2ZXIgdG8gdGhlCitmb3JlZ3JvdW5kIHdoZW4gdXNpbmcgdGhlIC0tcmVtb3RlIG9yIC0tcmVtb3RlLXdhaXQgYXJndW1lbnQgYW5kIHRoZSBzZXJ2ZXIKK25hbWUgc3RhcnRzIHdpdGggImciLgorCisKK1JFTU9URSBFRElUSU5HCisKK1RoZSAtLXJlbW90ZSBhcmd1bWVudCB3aWxsIGNhdXNlIGEgfDpkcm9wfCBjb21tYW5kIHRvIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlCityZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUgYW5kIHNlbnQgYXMgZGVzY3JpYmVkIGFib3ZlLgorVGhlIC0tcmVtb3RlLXdhaXQgYXJndW1lbnQgZG9lcyB0aGUgc2FtZSB0aGluZyBhbmQgYWRkaXRpb25hbGx5IHNldHMgdXAgdG8KK3dhaXQgZm9yIGVhY2ggb2YgdGhlIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQuICBUaGlzIHVzZXMgdGhlIEJ1ZlVubG9hZAorZXZlbnQsIHRodXMgYXMgc29vbiBhcyBhIGZpbGUgaGFzIGJlZW4gdW5sb2FkZWQsIFZpbSBhc3N1bWVzIHlvdSBhcmUgZG9uZQorZWRpdGluZyBpdC4KK05vdGUgdGhhdCB0aGUgLS1yZW1vdGUgYW5kIC0tcmVtb3RlLXdhaXQgYXJndW1lbnRzIHdpbGwgY29uc3VtZSB0aGUgcmVzdCBvZgordGhlIGNvbW1hbmQgbGluZS4gIEllLiBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyB3aWxsIGJlIHJlZ2FyZGVkIGFzIGZpbGVuYW1lcy4KK1lvdSBjYW4gbm90IHB1dCBvcHRpb25zIHRoZXJlIQorCisKK0ZVTkNUSU9OUworCQkJCQkJCQkqRTI0MCogKkU1NzMqCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgVmltIGZ1bmN0aW9ucyBmb3Igc2NyaXB0aW5nIHRoZSBjb21tYW5kIHNlcnZlci4gIFNlZQordGhlIGRlc2NyaXB0aW9uIGluIHxldmFsLnR4dHwgb3IgdXNlIENUUkwtXSBvbiB0aGUgZnVuY3Rpb24gbmFtZSB0byBqdW1wIHRvCit0aGUgZnVsbCBleHBsYW5hdGlvbi4KKworICAgIHN5bm9wc2lzCQkJCSAgICAgZXhwbGFuYXRpb24gfgorICAgIHJlbW90ZV9leHByKCBzZXJ2ZXIsIHN0cmluZywgaWR2YXIpICAgICAgc2VuZCBleHByZXNzaW9uCisgICAgcmVtb3RlX3NlbmQoIHNlcnZlciwgc3RyaW5nLCBpZHZhcikgICAgICBzZW5kIGtleSBzZXF1ZW5jZQorICAgIHNlcnZlcmxpc3QoKQkJCSAgICAgZ2V0IGEgbGlzdCBvZiBhdmFpbGFibGUgc2VydmVycworICAgIHJlbW90ZV9wZWVrKCBzZXJ2ZXJpZCwgcmV0dmFyKQkgICAgIGNoZWNrIGZvciByZXBseSBzdHJpbmcKKyAgICByZW1vdGVfcmVhZCggc2VydmVyaWQpCQkgICAgIHJlYWQgcmVwbHkgc3RyaW5nCisgICAgc2VydmVyMmNsaWVudCggc2VydmVyaWQsIHN0cmluZykJICAgICBzZW5kIHJlcGx5IHN0cmluZworICAgIHJlbW90ZV9mb3JlZ3JvdW5kKCBzZXJ2ZXIpCQkgICAgIGJyaW5nIHNlcnZlciB0byB0aGUgZnJvbnQKKworU2VlIGFsc28gdGhlIGV4cGxhbmF0aW9uIG9mIHxDVFJMLVxfQ1RSTC1OfC4gIFZlcnkgdXNlZnVsIGFzIGEgbGVhZGluZyBrZXkKK3NlcXVlbmNlLgorVGhlIHtzZXJ2ZXJpZH0gZm9yIHNlcnZlcjJjbGllbnQoKSBjYW4gYmUgb2J0YWluZWQgd2l0aCBleHBhbmQoIjxjbGllbnQ+IikKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBYMTEgc3BlY2lmaWMgaXRlbXMJCQkJCSp4MTEtY2xpZW50c2VydmVyKgorCQkJCSAgICAqRTI0NyogKkUyNDgqICpFMjUxKiAqRTI1OCogKkUyNzcqCisKK1RoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gY2xpZW50IGFuZCBzZXJ2ZXIgZ29lcyB0aHJvdWdoIHRoZSBYIHNlcnZlci4gIFRoZQorZGlzcGxheSBvZiB0aGUgVmltIHNlcnZlciBtdXN0IGJlIHNwZWNpZmllZC4gIFRoZSB1c3VhbCBwcm90ZWN0aW9uIG9mIHRoZSBYCitzZXJ2ZXIgaXMgdXNlZCwgeW91IG11c3QgYmUgYWJsZSB0byBvcGVuIGEgd2luZG93IG9uIHRoZSBYIHNlcnZlciBmb3IgdGhlCitjb21tdW5pY2F0aW9uIHRvIHdvcmsuICBJdCBpcyBwb3NzaWJsZSB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIGRpZmZlcmVudAorc3lzdGVtcy4KKworQnkgZGVmYXVsdCwgYSBHVUkgVmltIHdpbGwgcmVnaXN0ZXIgYSBuYW1lIG9uIHRoZSBYLXNlcnZlciBieSB3aGljaCBpdCBjYW4gYmUKK2FkZHJlc3NlZCBmb3Igc3Vic2VxdWVudCBleGVjdXRpb24gb2YgaW5qZWN0ZWQgc3RyaW5ncy4gIFZpbSBjYW4gYWxzbyBhY3QgYXMKK2EgY2xpZW50IGFuZCBzZW5kIHN0cmluZ3MgdG8gb3RoZXIgaW5zdGFuY2VzIG9mIFZpbSBvbiB0aGUgc2FtZSBYMTEgZGlzcGxheS4KKworV2hlbiBhbiBYMTEgR1VJIFZpbSAoZ3ZpbSkgaXMgc3RhcnRlZCwgaXQgd2lsbCB0cnkgdG8gcmVnaXN0ZXIgYSBzZW5kLXNlcnZlcgorbmFtZSBvbiB0aGUgJ1ZpbVJlZ2lzdHJ5JyBwcm9wZXJ0eSBvbiB0aGUgcm9vdCB3aW5kb3cuCisKK0Egbm9uIEdVSSBWaW0gd2l0aCBhY2Nlc3MgdG8gdGhlIFgxMSBkaXNwbGF5ICh8eHRlcm0tY2xpcGJvYXJkfCBlbmFibGVkKSwgY2FuCithbHNvIGFjdCBhcyBhIGNvbW1hbmQgc2VydmVyIGlmIGEgc2VydmVyIG5hbWUgaXMgZXhwbGljaXRseSBnaXZlbiB3aXRoIHRoZQorLS1zZXJ2ZXJuYW1lIGFyZ3VtZW50LgorCitBbiBlbXB0eSAtLXNlcnZlcm5hbWUgYXJndW1lbnQgd2lsbCBjYXVzZSB0aGUgY29tbWFuZCBzZXJ2ZXIgdG8gYmUgZGlzYWJsZWQuCisKK1RvIHNlbmQgY29tbWFuZHMgdG8gYSBWaW0gc2VydmVyIGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbiwgcmVhZCB0aGUgc291cmNlCitmaWxlIHNyYy9pZl94Y21kc3J2LmMsIGl0IGNvbnRhaW5zIHNvbWUgaGludHMgYWJvdXQgdGhlIHByb3RvY29sIHVzZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gV2luMzIgc3BlY2lmaWMgaXRlbXMJCQkJCSp3MzItY2xpZW50c2VydmVyKgorCitFdmVyeSBXaW4zMiBWaW0gY2FuIHdvcmsgYXMgYSBzZXJ2ZXIsIGFsc28gaW4gdGhlIGNvbnNvbGUuICBZb3UgZG8gbm90IG5lZWQgYQordmVyc2lvbiBjb21waWxlZCB3aXRoIE9MRS4gIFdpbmRvd3MgbWVzc2FnZXMgYXJlIHVzZWQsIHRoaXMgd29ya3Mgb24gYW55Cit2ZXJzaW9uIG9mIE1TLVdpbmRvd3MuICBCdXQgb25seSBjb21tdW5pY2F0aW9uIHdpdGhpbiBvbmUgc3lzdGVtIGlzIHBvc3NpYmxlLgorCitTaW5jZSBNUy1XaW5kb3dzIG1lc3NhZ2VzIGFyZSB1c2VkLCBhbnkgb3RoZXIgYXBwbGljYXRpb24gc2hvdWxkIGJlIGFibGUgdG8KK2NvbW11bmljYXRlIHdpdGggYSBWaW0gc2VydmVyLiAgQW4gYWx0ZXJuYXRpdmUgaXMgdXNpbmcgdGhlIE9MRSBmdW5jdGlvbmFsaXR5Cit8b2xlLWludGVyZmFjZXwuCisKK1doZW4gdXNpbmcgZ3ZpbSwgdGhlIC0tcmVtb3RlLXdhaXQgb25seSB3b3JrcyBwcm9wZXJseSB0aGlzIHdheTogPgorCisJc3RhcnQgL3cgZ3ZpbSAtLXJlbW90ZS13YWl0IGZpbGUudHh0Cis8CisgdmltOnR3PTc4OnN3PTQ6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9yZXBlYXQudHh0IGIvcnVudGltZS9kb2MvcmVwZWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWVlNDAxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvcmVwZWF0LnR4dApAQCAtMCwwICsxLDUyOSBAQAorKnJlcGVhdC50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAwMgorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1JlcGVhdGluZyBjb21tYW5kcywgVmltIHNjcmlwdHMgYW5kIGRlYnVnZ2luZwkJCSpyZXBlYXRpbmcqCisKK0NoYXB0ZXIgMjYgb2YgdGhlIHVzZXIgbWFudWFsIGludHJvZHVjZXMgcmVwZWF0aW5nIHx1c3JfMjYudHh0fC4KKworMS4gU2luZ2xlIHJlcGVhdHMJfHNpbmdsZS1yZXBlYXR8CisyLiBNdWx0aXBsZSByZXBlYXRzCXxtdWx0aS1yZXBlYXR8CiszLiBDb21wbGV4IHJlcGVhdHMJfGNvbXBsZXgtcmVwZWF0fAorNC4gVXNpbmcgVmltIHNjcmlwdHMJfHVzaW5nLXNjcmlwdHN8Cis1LiBEZWJ1Z2dpbmcgc2NyaXB0cwl8ZGVidWctc2NyaXB0c3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTaW5nbGUgcmVwZWF0cwkJCQkJKnNpbmdsZS1yZXBlYXQqCisKKwkJCQkJCQkqLioKKy4JCQlSZXBlYXQgbGFzdCBjaGFuZ2UsIHdpdGggY291bnQgcmVwbGFjZWQgd2l0aCBbY291bnRdLgorCQkJQWxzbyByZXBlYXQgYSB5YW5rIGNvbW1hbmQsIHdoZW4gdGhlICd5JyBmbGFnIGlzCisJCQlpbmNsdWRlZCBpbiAnY3BvcHRpb25zJy4KKworU2ltcGxlIGNoYW5nZXMgY2FuIGJlIHJlcGVhdGVkIHdpdGggdGhlICIuIiBjb21tYW5kLiAgV2l0aG91dCBhIGNvdW50LCB0aGUKK2NvdW50IG9mIHRoZSBsYXN0IGNoYW5nZSBpcyB1c2VkLiAgSWYgeW91IGVudGVyIGEgY291bnQsIGl0IHdpbGwgcmVwbGFjZSB0aGUKK2xhc3Qgb25lLiAgSWYgdGhlIGxhc3QgY2hhbmdlIGluY2x1ZGVkIGEgc3BlY2lmaWNhdGlvbiBvZiBhIG51bWJlcmVkIHJlZ2lzdGVyLAordGhlIHJlZ2lzdGVyIG51bWJlciB3aWxsIGJlIGluY3JlbWVudGVkLiAgU2VlIHxyZWRvLXJlZ2lzdGVyfCBmb3IgYW4gZXhhbXBsZQoraG93IHRvIHVzZSB0aGlzLiAgTm90ZSB0aGF0IHdoZW4gcmVwZWF0aW5nIGEgY29tbWFuZCB0aGF0IHVzZWQgYSBWaXN1YWwKK3NlbGVjdGlvbiwgdGhlIHNhbWUgU0laRSBvZiBhcmVhIGlzIHVzZWQsIHNlZSB8dmlzdWFsLXJlcGVhdHwuCisKKwkJCQkJCQkqQDoqCitAOgkJCVJlcGVhdCBsYXN0IGNvbW1hbmQtbGluZSBbY291bnRdIHRpbWVzLgorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtjbWRsaW5lX2hpc3R8IGZlYXR1cmV9CisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBNdWx0aXBsZSByZXBlYXRzCQkJCQkqbXVsdGktcmVwZWF0KgorCisJCQkJCQkqOmcqICo6Z2xvYmFsKiAqRTE0NyogKkUxNDgqCis6W3JhbmdlXWdbbG9iYWxdL3twYXR0ZXJufS9bY21kXQorCQkJRXhlY3V0ZSB0aGUgRXggY29tbWFuZCBbY21kXSAoZGVmYXVsdCAiOnAiKSBvbiB0aGUKKwkJCWxpbmVzIHdpdGhpbiBbcmFuZ2VdIHdoZXJlIHtwYXR0ZXJufSBtYXRjaGVzLgorCis6W3JhbmdlXWdbbG9iYWxdIS97cGF0dGVybn0vW2NtZF0KKwkJCUV4ZWN1dGUgdGhlIEV4IGNvbW1hbmQgW2NtZF0gKGRlZmF1bHQgIjpwIikgb24gdGhlCisJCQlsaW5lcyB3aXRoaW4gW3JhbmdlXSB3aGVyZSB7cGF0dGVybn0gZG9lcyBOT1QgbWF0Y2guCisKKwkJCQkJCQkqOnYqICo6dmdsb2JhbCoKKzpbcmFuZ2VddltnbG9iYWxdL3twYXR0ZXJufS9bY21kXQorCQkJU2FtZSBhcyA6ZyEuCisKK1RoZSBnbG9iYWwgY29tbWFuZHMgd29yayBieSBmaXJzdCBzY2FubmluZyB0aHJvdWdoIHRoZSBbcmFuZ2VdIGxpbmVzIGFuZAorbWFya2luZyBlYWNoIGxpbmUgd2hlcmUgYSBtYXRjaCBvY2N1cnMgKGZvciBhIG11bHRpLWxpbmUgcGF0dGVybiwgb25seSB0aGUKK3N0YXJ0IG9mIHRoZSBtYXRjaCBtYXR0ZXJzKS4KK0luIGEgc2Vjb25kIHNjYW4gdGhlIFtjbWRdIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG1hcmtlZCBsaW5lIHdpdGggaXRzIGxpbmUKK251bWJlciBwcmVwZW5kZWQuICBGb3IgIjp2IiBhbmQgIjpnISIgdGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgZm9yIGVhY2ggbm90CittYXJrZWQgbGluZS4gIElmIGEgbGluZSBpcyBkZWxldGVkIGl0cyBtYXJrIGRpc2FwcGVhcnMuCitUaGUgZGVmYXVsdCBmb3IgW3JhbmdlXSBpcyB0aGUgd2hvbGUgYnVmZmVyICgxLCQpLiAgVXNlICJDVFJMLUMiIHRvIGludGVycnVwdAordGhlIGNvbW1hbmQuICBJZiBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuIGZvciBhIGxpbmUsIHRoZSBjb21tYW5kIGZvciB0aGF0CitsaW5lIGlzIGFib3J0ZWQgYW5kIHRoZSBnbG9iYWwgY29tbWFuZCBjb250aW51ZXMgd2l0aCB0aGUgbmV4dCBtYXJrZWQgb3IKK3VubWFya2VkIGxpbmUuCisKK1RvIHJlcGVhdCBhIG5vbi1FeCBjb21tYW5kLCB5b3UgY2FuIHVzZSB0aGUgIjpub3JtYWwiIGNvbW1hbmQ6ID4KKwk6Zy9wYXQvbm9ybWFsIHtjb21tYW5kc30KK01ha2Ugc3VyZSB0aGF0IHtjb21tYW5kc30gZW5kcyB3aXRoIGEgd2hvbGUgY29tbWFuZCwgb3RoZXJ3aXNlIFZpbSB3aWxsIHdhaXQKK2ZvciB5b3UgdG8gdHlwZSB0aGUgcmVzdCBvZiB0aGUgY29tbWFuZCBmb3IgZWFjaCBtYXRjaC4gIFRoZSBzY3JlZW4gd2lsbCBub3QKK2hhdmUgYmVlbiB1cGRhdGVkLCBzbyB5b3UgZG9uJ3Qga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuICBTZWUgfDpub3JtYWx8LgorCitUaGUgdW5kby9yZWRvIGNvbW1hbmQgd2lsbCB1bmRvL3JlZG8gdGhlIHdob2xlIGdsb2JhbCBjb21tYW5kIGF0IG9uY2UuCitUaGUgcHJldmlvdXMgY29udGV4dCBtYXJrIHdpbGwgb25seSBiZSBzZXQgb25jZSAod2l0aCAiJyciIHlvdSBnbyBiYWNrIHRvCit3aGVyZSB0aGUgY3Vyc29yIHdhcyBiZWZvcmUgdGhlIGdsb2JhbCBjb21tYW5kKS4KKworVGhlIGdsb2JhbCBjb21tYW5kIHNldHMgYm90aCB0aGUgbGFzdCB1c2VkIHNlYXJjaCBwYXR0ZXJuIGFuZCB0aGUgbGFzdCB1c2VkCitzdWJzdGl0dXRlIHBhdHRlcm4gKHRoaXMgaXMgdmkgY29tcGF0aWJsZSkuICBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gZ2xvYmFsbHkKK3JlcGxhY2UgYSBzdHJpbmc6CisJOmcvcGF0L3MvL1BBVC9nCitUaGlzIHJlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiAicGF0IiB3aXRoICJQQVQiLiAgVGhlIHNhbWUgY2FuIGJlIGRvbmUgd2l0aDoKKwk6JXMvcGF0L1BBVC9nCitXaGljaCBpcyB0d28gY2hhcmFjdGVycyBzaG9ydGVyIQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIENvbXBsZXggcmVwZWF0cwkJCQkJKmNvbXBsZXgtcmVwZWF0KgorCisJCQkJCQkJKnEqICpyZWNvcmRpbmcqCitxezAtOWEtekEtWiJ9CQlSZWNvcmQgdHlwZWQgY2hhcmFjdGVycyBpbnRvIHJlZ2lzdGVyIHswLTlhLXpBLVoifQorCQkJKHVwcGVyY2FzZSB0byBhcHBlbmQpLiAgVGhlICdxJyBjb21tYW5kIGlzIGRpc2FibGVkCisJCQl3aGlsZSBleGVjdXRpbmcgYSByZWdpc3RlciwgYW5kIGl0IGRvZXNuJ3Qgd29yayBpbnNpZGUKKwkJCWEgbWFwcGluZy4gIHtWaTogbm8gcmVjb3JkaW5nfQorCitxCQkJU3RvcHMgcmVjb3JkaW5nLiAgKEltcGxlbWVudGF0aW9uIG5vdGU6IFRoZSAncScgdGhhdAorCQkJc3RvcHMgcmVjb3JkaW5nIGlzIG5vdCBzdG9yZWQgaW4gdGhlIHJlZ2lzdGVyLCB1bmxlc3MKKwkJCWl0IHdhcyB0aGUgcmVzdWx0IG9mIGEgbWFwcGluZykgIHtWaTogbm8gcmVjb3JkaW5nfQorCisJCQkJCQkJKkAqCitAezAtOWEteiIuPSp9CQlFeGVjdXRlIHRoZSBjb250ZW50cyBvZiByZWdpc3RlciB7MC05YS16Ii49Kn0gW2NvdW50XQorCQkJdGltZXMuICBOb3RlIHRoYXQgcmVnaXN0ZXIgJyUnIChuYW1lIG9mIHRoZSBjdXJyZW50CisJCQlmaWxlKSBhbmQgJyMnIChuYW1lIG9mIHRoZSBhbHRlcm5hdGUgZmlsZSkgY2Fubm90IGJlCisJCQl1c2VkLiAgRm9yICJAPSIgeW91IGFyZSBwcm9tcHRlZCB0byBlbnRlciBhbgorCQkJZXhwcmVzc2lvbi4gIFRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gaXMgdGhlbgorCQkJZXhlY3V0ZWQuICBTZWUgYWxzbyB8QDp8LiAge1ZpOiBvbmx5IG5hbWVkIHJlZ2lzdGVyc30KKworCQkJCQkJCSpAQCoKK0BACQkJUmVwZWF0IHRoZSBwcmV2aW91cyBAezAtOWEteiI6Kn0gW2NvdW50XSB0aW1lcy4KKworOlthZGRyXSp7MC05YS16Ii49fQkJCQkJCSo6QCogKjpzdGFyKgorOlthZGRyXUB7MC05YS16Ii49Kn0JRXhlY3V0ZSB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXIgezAtOWEteiIuPSp9IGFzIGFuIEV4CisJCQljb21tYW5kLiAgRmlyc3Qgc2V0IGN1cnNvciBhdCBsaW5lIFthZGRyXSAoZGVmYXVsdCBpcworCQkJY3VycmVudCBsaW5lKS4gIFdoZW4gdGhlIGxhc3QgbGluZSBpbiB0aGUgcmVnaXN0ZXIgZG9lcworCQkJbm90IGhhdmUgYSA8Q1I+IGl0IHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseSB3aGVuCisJCQl0aGUgJ2UnIGZsYWcgaXMgcHJlc2VudCBpbiAnY3BvcHRpb25zJy4KKwkJCU5vdGUgdGhhdCB0aGUgIjoqIiBjb21tYW5kIGlzIG9ubHkgcmVjb2duaXplZCB3aGVuIHRoZQorCQkJJyonIGZsYWcgaXMgcHJlc2VudCBpbiAnY3BvcHRpb25zJy4gIFRoaXMgaXMgTk9UIHRoZQorCQkJZGVmYXVsdCB3aGVuICdub2NvbXBhdGlibGUnIGlzIHVzZWQuCisJCQlGb3IgIjpAPSIgdGhlIGxhc3QgdXNlZCBleHByZXNzaW9uIGlzIHVzZWQuICBUaGUKKwkJCXJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uIGlzIGV4ZWN1dGVkIGFzIGFuCisJCQlFeCBjb21tYW5kLgorCQkJTWFwcGluZ3MgYXJlIG5vdCByZWNvZ25pemVkIGluIHRoZXNlIGNvbW1hbmRzLgorCQkJe1ZpOiBvbmx5IGluIHNvbWUgdmVyc2lvbnN9IEZ1dHVyZTogV2lsbCBleGVjdXRlIHRoZQorCQkJcmVnaXN0ZXIgZm9yIGVhY2ggbGluZSBpbiB0aGUgYWRkcmVzcyByYW5nZS4KKworCQkJCQkJCSo6QDoqCis6W2FkZHJdQDoJCVJlcGVhdCBsYXN0IGNvbW1hbmQtbGluZS4gIEZpcnN0IHNldCBjdXJzb3IgYXQgbGluZQorCQkJW2FkZHJdIChkZWZhdWx0IGlzIGN1cnJlbnQgbGluZSkuICB7bm90IGluIFZpfQorCisJCQkJCQkJKjpAQCoKKzpbYWRkcl1AQAkJUmVwZWF0IHRoZSBwcmV2aW91cyA6QHswLTlhLXoifS4gIEZpcnN0IHNldCBjdXJzb3IgYXQKKwkJCWxpbmUgW2FkZHJdIChkZWZhdWx0IGlzIGN1cnJlbnQgbGluZSkuICB7Vmk6IG9ubHkgaW4KKwkJCXNvbWUgdmVyc2lvbnN9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVXNpbmcgVmltIHNjcmlwdHMJCQkJCSp1c2luZy1zY3JpcHRzKgorCitGb3Igd3JpdGluZyBhIFZpbSBzY3JpcHQsIHNlZSBjaGFwdGVyIDQxIG9mIHRoZSB1c2VyIG1hbnVhbCB8dXNyXzQxLnR4dHwuCisKKwkJCQkJKjpzbyogKjpzb3VyY2UqICpsb2FkLXZpbS1zY3JpcHQqCis6c29bdXJjZV0ge2ZpbGV9CVJlYWQgRXggY29tbWFuZHMgZnJvbSB7ZmlsZX0uICBUaGVzZSBhcmUgY29tbWFuZHMgdGhhdAorCQkJc3RhcnQgd2l0aCBhICI6Ii4KKworOnNvW3VyY2VdISB7ZmlsZX0JUmVhZCBWaW0gY29tbWFuZHMgZnJvbSB7ZmlsZX0uICBUaGVzZSBhcmUgY29tbWFuZHMKKwkJCXRoYXQgYXJlIGV4ZWN1dGVkIGZyb20gTm9ybWFsIG1vZGUsIGxpa2UgeW91IHR5cGUKKwkJCXRoZW0uCisJCQlXaGVuIHVzZWQgYWZ0ZXIgfDpnbG9iYWx8LCB8OmFyZ2RvfCwgfDp3aW5kb3wsCisJCQl8OmJ1ZmRvfCwgaW4gYSBsb29wIG9yIHdoZW4gYW5vdGhlciBjb21tYW5kIGZvbGxvd3MKKwkJCXRoZSBkaXNwbGF5IHdvbid0IGJlIHVwZGF0ZWQgd2hpbGUgZXhlY3V0aW5nIHRoZQorCQkJY29tbWFuZHMuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpydSogKjpydW50aW1lKgorOnJ1W250aW1lXVshXSB7ZmlsZX0gLi4KKwkJCVJlYWQgRXggY29tbWFuZHMgZnJvbSB7ZmlsZX0gaW4gZWFjaCBkaXJlY3RvcnkgZ2l2ZW4KKwkJCWJ5ICdydW50aW1lcGF0aCcuICBUaGVyZSBpcyBubyBlcnJvciBmb3Igbm9uLWV4aXN0aW5nCisJCQlmaWxlcy4gIEV4YW1wbGU6ID4KKwkJCQk6cnVudGltZSBzeW50YXgvYy52aW0KKworPAkJCVRoZXJlIGNhbiBiZSBtdWx0aXBsZSB7ZmlsZX0gYXJndW1lbnRzLCBzZXBhcmF0ZWQgYnkKKwkJCXNwYWNlcy4gIEVhY2gge2ZpbGV9IGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgZmlyc3QKKwkJCWRpcmVjdG9yeSBmcm9tICdydW50aW1lcGF0aCcsIHRoZW4gaW4gdGhlIHNlY29uZAorCQkJZGlyZWN0b3J5LCBldGMuICBVc2UgYSBiYWNrc2xhc2ggdG8gaW5jbHVkZSBhIHNwYWNlCisJCQlpbnNpZGUge2ZpbGV9IChhbHRob3VnaCBpdCdzIGJldHRlciBub3QgdG8gdXNlIHNwYWNlcworCQkJaW4gZmlsZSBuYW1lcywgaXQgY2F1c2VzIHRyb3VibGUpLgorCisJCQlXaGVuIFshXSBpcyBpbmNsdWRlZCwgYWxsIGZvdW5kIGZpbGVzIGFyZSBzb3VyY2VkLgorCQkJV2hlbiBpdCBpcyBub3QgaW5jbHVkZWQgb25seSB0aGUgZmlyc3QgZm91bmQgZmlsZSBpcworCQkJc291cmNlZC4KKworCQkJV2hlbiB7ZmlsZX0gY29udGFpbnMgd2lsZGNhcmRzIGl0IGlzIGV4cGFuZGVkIHRvIGFsbAorCQkJbWF0Y2hpbmcgZmlsZXMuICBFeGFtcGxlOiA+CisJCQkJOnJ1bnRpbWUhIHBsdWdpbi8qLnZpbQorPAkJCVRoaXMgaXMgd2hhdCBWaW0gdXNlcyB0byBsb2FkIHRoZSBwbHVnaW4gZmlsZXMgd2hlbgorCQkJc3RhcnRpbmcgdXAuIFRoaXMgc2ltaWxhciBjb21tYW5kOiA+CisJCQkJOnJ1bnRpbWUgcGx1Z2luLyoudmltCis8CQkJd291bGQgc291cmNlIHRoZSBmaXJzdCBmaWxlIG9ubHkuCisKKwkJCVdoZW4gJ3ZlcmJvc2UnIGlzIG9uZSBvciBoaWdoZXIsIHRoZXJlIGlzIGEgbWVzc2FnZQorCQkJd2hlbiBubyBmaWxlIGNvdWxkIGJlIGZvdW5kLgorCQkJV2hlbiAndmVyYm9zZScgaXMgdHdvIG9yIGhpZ2hlciwgdGhlcmUgaXMgYSBtZXNzYWdlCisJCQlhYm91dCBlYWNoIHNlYXJjaGVkIGZpbGUuCisJCQl7bm90IGluIFZpfQorCis6c2NyaXB0ZVtuY29kaW5nXSBbZW5jb2RpbmddCQkqOnNjcmlwdGUqICo6c2NyaXB0ZW5jb2RpbmcqICpFMTY3KgorCQkJU3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIHVzZWQgaW4gdGhlIHNjcmlwdC4KKwkJCVRoZSBmb2xsb3dpbmcgbGluZXMgd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBbZW5jb2RpbmddCisJCQl0byB0aGUgdmFsdWUgb2YgdGhlICdlbmNvZGluZycgb3B0aW9uLCBpZiB0aGV5IGFyZQorCQkJZGlmZmVyZW50LiAgRXhhbXBsZXM6ID4KKwkJCQlzY3JpcHRlbmNvZGluZyBpc28tODg1OS01CisJCQkJc2NyaXB0ZW5jb2RpbmcgY3A5MzIKKzwKKwkJCVdoZW4gW2VuY29kaW5nXSBpcyBlbXB0eSwgbm8gY29udmVyc2lvbiBpcyBkb25lLiAgVGhpcworCQkJY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgY29udmVyc2lvbiB0byBhIHNlcXVlbmNlIG9mCisJCQlsaW5lczogPgorCQkJCXNjcmlwdGVuY29kaW5nIGV1Yy1qcAorCQkJCS4uLiBsaW5lcyB0byBiZSBjb252ZXJ0ZWQgLi4uCisJCQkJc2NyaXB0ZW5jb2RpbmcKKwkJCQkuLi4gbm90IGNvbnZlcnRlZCAuLi4KKworPAkJCVdoZW4gY29udmVyc2lvbiBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbSwgdGhlcmUKKwkJCWlzIG5vIGVycm9yIG1lc3NhZ2UgYW5kIG5vIGNvbnZlcnNpb24gaXMgZG9uZS4KKworCQkJRG9uJ3QgdXNlICJ1Y3MtMiIgb3IgInVjcy00Iiwgc2NyaXB0cyBjYW5ub3QgYmUgaW4KKwkJCXRoZXNlIGVuY29kaW5ncyAodGhleSB3b3VsZCBjb250YWluIE5VTCBieXRlcykuCisJCQlXaGVuIGEgc291cmNlZCBzY3JpcHQgc3RhcnRzIHdpdGggYSBCT00gKEJ5dGUgT3JkZXIKKwkJCU1hcmspIGluIHV0Zi04IGZvcm1hdCBWaW0gd2lsbCByZWNvZ25pemVkIGl0LCBubyBuZWVkCisJCQl0byB1c2UgIjpzY3JpcHRlbmNvZGluZyB1dGYtOCIgdGhlbi4KKworCQkJV2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K211bHRpX2J5dGV8IGZlYXR1cmUgdGhpcworCQkJY29tbWFuZCBpcyBpZ25vcmVkLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJKjpzY3JpcCogKjpzY3JpcHRuYW1lcyoKKzpzY3JpcFt0bmFtZXNdCQlMaXN0IGFsbCBzb3VyY2VkIHNjcmlwdCBuYW1lcywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZQorCQkJZmlyc3Qgc291cmNlZC4gIFRoZSBudW1iZXIgaXMgdXNlZCBmb3IgdGhlIHNjcmlwdCBJRAorCQkJfDxTSUQ+fC4KKwkJCXtub3QgaW4gVml9IHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrZXZhbHwgZmVhdHVyZX0KKworCQkJCQkJKjpmaW5pKiAqOmZpbmlzaCogKkUxNjgqCis6ZmluaVtzaF0JCVN0b3Agc291cmNpbmcgYSBzY3JpcHQuICBDYW4gb25seSBiZSB1c2VkIGluIGEgVmltCisJCQlzY3JpcHQgZmlsZS4gIFRoaXMgaXMgYSBxdWljayB3YXkgdG8gc2tpcCB0aGUgcmVzdCBvZgorCQkJdGhlIGZpbGUuICBJZiBpdCBpcyB1c2VkIGFmdGVyIGEgfDp0cnl8IGJ1dCBiZWZvcmUgdGhlCisJCQltYXRjaGluZyB8OmZpbmFsbHl8IChpZiBwcmVzZW50KSwgdGhlIGNvbW1hbmRzCisJCQlmb2xsb3dpbmcgdGhlICI6ZmluYWxseSIgdXAgdG8gdGhlIG1hdGNoaW5nIHw6ZW5kdHJ5fAorCQkJYXJlIGV4ZWN1dGVkIGZpcnN0LiAgVGhpcyBwcm9jZXNzIGFwcGxpZXMgdG8gYWxsCisJCQluZXN0ZWQgIjp0cnkicyBpbiB0aGUgc2NyaXB0LiAgVGhlIG91dGVybW9zdCAiOmVuZHRyeSIKKwkJCXRoZW4gc3RvcHMgc291cmNpbmcgdGhlIHNjcmlwdC4gIHtub3QgaW4gVml9CisKK0FsbCBjb21tYW5kcyBhbmQgY29tbWFuZCBzZXF1ZW5jZXMgY2FuIGJlIHJlcGVhdGVkIGJ5IHB1dHRpbmcgdGhlbSBpbiBhIG5hbWVkCityZWdpc3RlciBhbmQgdGhlbiBleGVjdXRpbmcgaXQuICBUaGVyZSBhcmUgdHdvIHdheXMgdG8gZ2V0IHRoZSBjb21tYW5kcyBpbiB0aGUKK3JlZ2lzdGVyOgorLSBVc2UgdGhlIHJlY29yZCBjb21tYW5kICJxIi4gIFlvdSB0eXBlIHRoZSBjb21tYW5kcyBvbmNlLCBhbmQgd2hpbGUgdGhleSBhcmUKKyAgYmVpbmcgZXhlY3V0ZWQgdGhleSBhcmUgc3RvcmVkIGluIGEgcmVnaXN0ZXIuICBFYXN5LCBiZWNhdXNlIHlvdSBjYW4gc2VlCisgIHdoYXQgeW91IGFyZSBkb2luZy4gIElmIHlvdSBtYWtlIGEgbWlzdGFrZSwgInAidXQgdGhlIHJlZ2lzdGVyIGludG8gdGhlCisgIGZpbGUsIGVkaXQgdGhlIGNvbW1hbmQgc2VxdWVuY2UsIGFuZCB0aGVuIGRlbGV0ZSBpdCBpbnRvIHRoZSByZWdpc3RlcgorICBhZ2Fpbi4gIFlvdSBjYW4gY29udGludWUgcmVjb3JkaW5nIGJ5IGFwcGVuZGluZyB0byB0aGUgcmVnaXN0ZXIgKHVzZSBhbgorICB1cHBlcmNhc2UgbGV0dGVyKS4KKy0gRGVsZXRlIG9yIHlhbmsgdGhlIGNvbW1hbmQgc2VxdWVuY2UgaW50byB0aGUgcmVnaXN0ZXIuCisKK09mdGVuIHVzZWQgY29tbWFuZCBzZXF1ZW5jZXMgY2FuIGJlIHB1dCB1bmRlciBhIGZ1bmN0aW9uIGtleSB3aXRoIHRoZSAnOm1hcCcKK2NvbW1hbmQuCisKK0FuIGFsdGVybmF0aXZlIGlzIHRvIHB1dCB0aGUgY29tbWFuZHMgaW4gYSBmaWxlLCBhbmQgZXhlY3V0ZSB0aGVtIHdpdGggdGhlCisnOnNvdXJjZSEnIGNvbW1hbmQuICBVc2VmdWwgZm9yIGxvbmcgY29tbWFuZCBzZXF1ZW5jZXMuICBDYW4gYmUgY29tYmluZWQgd2l0aAordGhlICc6bWFwJyBjb21tYW5kIHRvIHB1dCBjb21wbGljYXRlZCBjb21tYW5kcyB1bmRlciBhIGZ1bmN0aW9uIGtleS4KKworVGhlICc6c291cmNlJyBjb21tYW5kIHJlYWRzIEV4IGNvbW1hbmRzIGZyb20gYSBmaWxlIGxpbmUgYnkgbGluZS4gIFlvdSB3aWxsCitoYXZlIHRvIHR5cGUgYW55IG5lZWRlZCBrZXlib2FyZCBpbnB1dC4gIFRoZSAnOnNvdXJjZSEnIGNvbW1hbmQgcmVhZHMgZnJvbSBhCitzY3JpcHQgZmlsZSBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLCBpbnRlcnByZXRpbmcgZWFjaCBjaGFyYWN0ZXIgYXMgaWYgeW91Cit0eXBlZCBpdC4KKworRXhhbXBsZTogV2hlbiB5b3UgZ2l2ZSB0aGUgIjohbHMiIGNvbW1hbmQgeW91IGdldCB0aGUgfGhpdC1lbnRlcnwgcHJvbXB0LiAgSWYKK3lvdSAnOnNvdXJjZScgYSBmaWxlIHdpdGggdGhlIGxpbmUgIiFscyIgaW4gaXQsIHlvdSB3aWxsIGhhdmUgdG8gdHlwZSB0aGUKKzxFbnRlcj4geW91cnNlbGYuICBCdXQgaWYgeW91ICc6c291cmNlIScgYSBmaWxlIHdpdGggdGhlIGxpbmUgIjohbHMiIGluIGl0LAordGhlIG5leHQgY2hhcmFjdGVycyBmcm9tIHRoYXQgZmlsZSBhcmUgcmVhZCB1bnRpbCBhIDxDUj4gaXMgZm91bmQuICBZb3Ugd2lsbAorbm90IGhhdmUgdG8gdHlwZSA8Q1I+IHlvdXJzZWxmLCB1bmxlc3MgIjohbHMiIHdhcyB0aGUgbGFzdCBsaW5lIGluIHRoZSBmaWxlLgorCitJdCBpcyBwb3NzaWJsZSB0byBwdXQgJzpzb3VyY2VbIV0nIGNvbW1hbmRzIGluIHRoZSBzY3JpcHQgZmlsZSwgc28geW91IGNhbgorbWFrZSBhIHRvcC1kb3duIGhpZXJhcmNoeSBvZiBzY3JpcHQgZmlsZXMuICBUaGUgJzpzb3VyY2UnIGNvbW1hbmQgY2FuIGJlCituZXN0ZWQgYXMgZGVlcCBhcyB0aGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgY2FuIGJlIG9wZW5lZCBhdCBvbmUgdGltZSAoYWJvdXQKKzE1KS4gIFRoZSAnOnNvdXJjZSEnIGNvbW1hbmQgY2FuIGJlIG5lc3RlZCB1cCB0byAxNSBsZXZlbHMgZGVlcC4KKworWW91IGNhbiB1c2UgdGhlICI8c2ZpbGU+IiBzdHJpbmcgKGxpdGVyYWxseSwgdGhpcyBpcyBub3QgYSBzcGVjaWFsIGtleSkgaW5zaWRlCitvZiB0aGUgc291cmNlZCBmaWxlLCBpbiBwbGFjZXMgd2hlcmUgYSBmaWxlIG5hbWUgaXMgZXhwZWN0ZWQuICBJdCB3aWxsIGJlCityZXBsYWNlZCBieSB0aGUgZmlsZSBuYW1lIG9mIHRoZSBzb3VyY2VkIGZpbGUuICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYQorIm90aGVyLnZpbXJjIiBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB5b3VyICIudmltcmMiIGZpbGUsIHlvdSBjYW4gc291cmNlCitpdCBmcm9tIHlvdXIgIi52aW1yYyIgZmlsZSB3aXRoIHRoaXMgY29tbWFuZDogPgorCTpzb3VyY2UgPHNmaWxlPjpoL290aGVyLnZpbXJjCisKK0luIHNjcmlwdCBmaWxlcyB0ZXJtaW5hbC1kZXBlbmRlbnQga2V5IGNvZGVzIGFyZSByZXByZXNlbnRlZCBieQordGVybWluYWwtaW5kZXBlbmRlbnQgdHdvIGNoYXJhY3RlciBjb2Rlcy4gIFRoaXMgbWVhbnMgdGhhdCB0aGV5IGNhbiBiZSB1c2VkCitpbiB0aGUgc2FtZSB3YXkgb24gZGlmZmVyZW50IGtpbmRzIG9mIHRlcm1pbmFscy4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYQora2V5IGNvZGUgaXMgMHg4MCBvciAxMjgsIHNob3duIG9uIHRoZSBzY3JlZW4gYXMgIn5AIi4gIFRoZSBzZWNvbmQgb25lIGNhbiBiZQorZm91bmQgaW4gdGhlIGxpc3QgfGtleS1ub3RhdGlvbnwuICBBbnkgb2YgdGhlc2UgY29kZXMgY2FuIGFsc28gYmUgZW50ZXJlZAord2l0aCBDVFJMLVYgZm9sbG93ZWQgYnkgdGhlIHRocmVlIGRpZ2l0IGRlY2ltYWwgY29kZS4gIFRoaXMgZG9lcyBOT1Qgd29yayBmb3IKK3RoZSA8dF94eD4gdGVybWNhcCBjb2RlcywgdGhlc2UgY2FuIG9ubHkgYmUgdXNlZCBpbiBtYXBwaW5ncy4KKworCQkJCQkJCSo6c291cmNlX2NybmwqICpXMTUqCitNUy1ET1MsIFdpbjMyIGFuZCBPUy8yOiBGaWxlcyB0aGF0IGFyZSByZWFkIHdpdGggIjpzb3VyY2UiIG5vcm1hbGx5IGhhdmUKKzxDUj48Tkw+IDxFT0w+cy4gIFRoZXNlIGFsd2F5cyB3b3JrLiAgSWYgeW91IGFyZSB1c2luZyBhIGZpbGUgd2l0aCA8Tkw+IDxFT0w+cworKGZvciBleGFtcGxlLCBhIGZpbGUgbWFkZSBvbiBVbml4KSwgdGhpcyB3aWxsIGJlIHJlY29nbml6ZWQgaWYgJ2ZpbGVmb3JtYXRzJworaXMgbm90IGVtcHR5IGFuZCB0aGUgZmlyc3QgbGluZSBkb2VzIG5vdCBlbmQgaW4gYSA8Q1I+LiAgVGhpcyBmYWlscyBpZiB0aGUKK2ZpcnN0IGxpbmUgaGFzIHNvbWV0aGluZyBsaWtlICI6bWFwIDxGMT4gOmhlbHBeTSIsIHdoZXJlICJeTSIgaXMgYSA8Q1I+LiAgSWYKK3RoZSBmaXJzdCBsaW5lIGVuZHMgaW4gYSA8Q1I+LCBidXQgZm9sbG93aW5nIG9uZXMgZG9uJ3QsIHlvdSB3aWxsIGdldCBhbiBlcnJvcgorbWVzc2FnZSwgYmVjYXVzZSB0aGUgPENSPiBmcm9tIHRoZSBmaXJzdCBsaW5lcyB3aWxsIGJlIGxvc3QuCisKK01hY2ludG9zaDogRmlsZXMgdGhhdCBhcmUgcmVhZCB3aXRoICI6c291cmNlIiBub3JtYWxseSBoYXZlIDxDUj4gPEVPTD5zLgorVGhlc2UgYWx3YXlzIHdvcmsuICBJZiB5b3UgYXJlIHVzaW5nIGEgZmlsZSB3aXRoIDxOTD4gPEVPTD5zIChmb3IgZXhhbXBsZSwgYQorZmlsZSBtYWRlIG9uIFVuaXgpLCB0aGlzIHdpbGwgYmUgcmVjb2duaXplZCBpZiAnZmlsZWZvcm1hdHMnIGlzIG5vdCBlbXB0eSBhbmQKK3RoZSBmaXJzdCBsaW5lIGRvZXMgbm90IGVuZCBpbiBhIDxDUj4uICBCZSBjYXJlZnVsIG5vdCB0byB1c2UgYSBmaWxlIHdpdGggPE5MPgorbGluZWJyZWFrcyB3aGljaCBoYXMgYSA8Q1I+IGluIGZpcnN0IGxpbmUuCisKK09uIG90aGVyIHN5c3RlbXMsIFZpbSBleHBlY3RzICI6c291cmNlImVkIGZpbGVzIHRvIGVuZCBpbiBhIDxOTD4uICBUaGVzZQorYWx3YXlzIHdvcmsuICBJZiB5b3UgYXJlIHVzaW5nIGEgZmlsZSB3aXRoIDxDUj48Tkw+IDxFT0w+cyAoZm9yIGV4YW1wbGUsIGEKK2ZpbGUgbWFkZSBvbiBNUy1ET1MpLCBhbGwgbGluZXMgd2lsbCBoYXZlIGEgdHJhaWxpbmcgPENSPi4gIFRoaXMgbWF5IGNhdXNlCitwcm9ibGVtcyBmb3Igc29tZSBjb21tYW5kcyAoZS5nLiwgbWFwcGluZ3MpLiAgVGhlcmUgaXMgbm8gYXV0b21hdGljIDxFT0w+CitkZXRlY3Rpb24sIGJlY2F1c2UgaXQncyBjb21tb24gdG8gc3RhcnQgd2l0aCBhIGxpbmUgdGhhdCBkZWZpbmVzIGEgbWFwcGluZwordGhhdCBlbmRzIGluIGEgPENSPiwgd2hpY2ggd2lsbCBjb25mdXNlIHRoZSBhdXRvbWF0b24uCisKKwkJCQkJCQkqbGluZS1jb250aW51YXRpb24qCitMb25nIGxpbmVzIGluIGEgIjpzb3VyY2UiZCBFeCBjb21tYW5kIHNjcmlwdCBmaWxlIGNhbiBiZSBzcGxpdCBieSBpbnNlcnRpbmcKK2EgbGluZSBjb250aW51YXRpb24gc3ltYm9sICJcIiAoYmFja3NsYXNoKSBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgbGluZS4KK1RoZXJlIGNhbiBiZSB3aGl0ZSBzcGFjZSBiZWZvcmUgdGhlIGJhY2tzbGFzaCwgd2hpY2ggaXMgaWdub3JlZC4KKworRXhhbXBsZTogdGhlIGxpbmVzID4KKwk6c2V0IGNvbW1lbnRzPXNyOi8qLG1iOiosZWw6Ki8sCisJCSAgICAgXDovLywKKwkJICAgICBcYjojLAorCQkgICAgIFw6JSwKKwkJICAgICBcbjo+LAorCQkgICAgIFxmYjotCithcmUgaW50ZXJwcmV0ZWQgYXMgaWYgdGhleSB3ZXJlIGdpdmVuIGluIG9uZSBsaW5lOgorCTpzZXQgY29tbWVudHM9c3I6LyosbWI6KixlbDoqLyw6Ly8sYjojLDolLG46PixmYjotCisKK0FsbCBsZWFkaW5nIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiB0aGUgbGluZSBiZWZvcmUgYSBiYWNrc2xhc2ggYXJlIGlnbm9yZWQuCitOb3RlIGhvd2V2ZXIgdGhhdCB0cmFpbGluZyB3aGl0ZXNwYWNlIGluIHRoZSBsaW5lIGJlZm9yZSBpdCBjYW5ub3QgYmUKK2luc2VydGVkIGZyZWVseTsgaXQgZGVwZW5kcyBvbiB0aGUgcG9zaXRpb24gd2hlcmUgYSBjb21tYW5kIGlzIHNwbGl0IHVwCit3aGV0aGVyIGFkZGl0aW9uYWwgd2hpdGVzcGFjZSBpcyBhbGxvd2VkIG9yIG5vdC4KKworVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlICI6YXBwZW5kIiBhbmQgIjppbnNlcnQiIGNvbW1hbmRzOiA+CisgICA6MWFwcGVuZAorICAgXGFzZGYKKyAgIC4KK1RoZSBiYWNrc2xhc2ggaXMgc2VlbiBhcyBhIGxpbmUtY29udGludWF0aW9uIHN5bWJvbCwgdGh1cyB0aGlzIHJlc3VsdHMgaW4gdGhlCitjb21tYW5kOiA+CisgICA6MWFwcGVuZGFzZGYKKyAgIC4KK1RvIGF2b2lkIHRoaXMsIGFkZCB0aGUgJ0MnIGZsYWcgdG8gdGhlICdjcG9wdGlvbnMnIG9wdGlvbjogPgorICAgOnNldCBjcG8rPUMKKyAgIDoxYXBwZW5kCisgICBcYXNkZgorICAgLgorICAgOnNldCBjcG8tPUMKKworTm90ZSB0aGF0IHdoZW4gdGhlIGNvbW1hbmRzIGFyZSBpbnNpZGUgYSBmdW5jdGlvbiwgeW91IG5lZWQgdG8gYWRkIHRoZSAnQycKK2ZsYWcgd2hlbiBkZWZpbmluZyB0aGUgZnVuY3Rpb24sIGl0IGlzIG5vdCByZWxldmFudCB3aGVuIGV4ZWN1dGluZyBpdC4gPgorICAgOnNldCBjcG8rPUMKKyAgIDpmdW5jdGlvbiBGb28oKQorICAgOjFhcHBlbmQKKyAgIFxhc2RmCisgICAuCisgICA6ZW5kZnVuY3Rpb24KKyAgIDpzZXQgY3BvLT1DCisKK1JhdGlvbmFsZToKKwlNb3N0IHByb2dyYW1zIHdvcmsgd2l0aCBhIHRyYWlsaW5nIGJhY2tzbGFzaCB0byBpbmRpY2F0ZSBsaW5lCisJY29udGludWF0aW9uLiAgVXNpbmcgdGhpcyBpbiBWaW0gd291bGQgY2F1c2UgaW5jb21wYXRpYmlsaXR5IHdpdGggVmkuCisJRm9yIGV4YW1wbGUgZm9yIHRoaXMgVmkgbWFwcGluZzogPgorCQk6bWFwIHh4ICBhc2RmXAorPAlUaGVyZWZvcmUgdGhlIHVudXN1YWwgbGVhZGluZyBiYWNrc2xhc2ggaXMgdXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBEZWJ1Z2dpbmcgc2NyaXB0cwkJCQkJKmRlYnVnLXNjcmlwdHMqCisKK0Jlc2lkZXMgdGhlIG9idmlvdXMgbWVzc2FnZXMgdGhhdCB5b3UgY2FuIGFkZCB0byB5b3VyIHNjcmlwdHMgdG8gZmluZCBvdXQgd2hhdAordGhleSBhcmUgZG9pbmcsIFZpbSBvZmZlcnMgYSBkZWJ1ZyBtb2RlLiAgVGhpcyBhbGxvd3MgeW91IHRvIHN0ZXAgdGhyb3VnaCBhCitzb3VyY2VkIGZpbGUgb3IgdXNlciBmdW5jdGlvbiBhbmQgc2V0IGJyZWFrcG9pbnRzLgorCitOT1RFOiBUaGUgZGVidWdnaW5nIG1vZGUgaXMgZmFyIGZyb20gcGVyZmVjdC4gIERlYnVnZ2luZyB3aWxsIGhhdmUgc2lkZQorZWZmZWN0cyBvbiBob3cgVmltIHdvcmtzLiAgWW91IGNhbm5vdCB1c2UgaXQgdG8gZGVidWcgZXZlcnl0aGluZy4gIEZvcgorZXhhbXBsZSwgdGhlIGRpc3BsYXkgaXMgbWVzc2VkIHVwIGJ5IHRoZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuCit7VmkgZG9lcyBub3QgaGF2ZSBhIGRlYnVnIG1vZGV9CisKK0FuIGFsdGVybmF0aXZlIHRvIGRlYnVnIG1vZGUgaXMgc2V0dGluZyB0aGUgJ3ZlcmJvc2UnIG9wdGlvbi4gIFdpdGggYSBiaWdnZXIKK251bWJlciBpdCB3aWxsIGdpdmUgbW9yZSB2ZXJib3NlIG1lc3NhZ2VzIGFib3V0IHdoYXQgVmltIGlzIGRvaW5nLgorCisKK1NUQVJUSU5HIERFQlVHIE1PREUJCQkJCQkqZGVidWctbW9kZSoKKworVG8gZW50ZXIgZGVidWdnaW5nIG1vZGUgdXNlIG9uZSBvZiB0aGVzZSBtZXRob2RzOgorMS4gU3RhcnQgVmltIHdpdGggdGhlIHwtRHwgYXJndW1lbnQ6ID4KKwl2aW0gLUQgZmlsZS50eHQKKzwgIERlYnVnZ2luZyB3aWxsIHN0YXJ0IGFzIHNvb24gYXMgdGhlIGZpcnN0IHZpbXJjIGZpbGUgaXMgc291cmNlZC4gIFRoaXMgaXMKKyAgIHVzZWZ1bCB0byBmaW5kIG91dCB3aGF0IGlzIGhhcHBlbmluZyB3aGVuIFZpbSBpcyBzdGFydGluZyB1cC4gIEEgc2lkZQorICAgZWZmZWN0IGlzIHRoYXQgVmltIHdpbGwgc3dpdGNoIHRoZSB0ZXJtaW5hbCBtb2RlIGJlZm9yZSBpbml0aWFsaXNhdGlvbnMKKyAgIGhhdmUgZmluaXNoZWQsIHdpdGggdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorICAgRm9yIGEgR1VJLW9ubHkgdmVyc2lvbiAoV2luZG93cywgTWFjaW50b3NoKSB0aGUgZGVidWdnaW5nIHdpbGwgc3RhcnQgYXMKKyAgIHNvb24gYXMgdGhlIEdVSSB3aW5kb3cgaGFzIGJlZW4gb3BlbmVkLiAgVG8gbWFrZSB0aGlzIGhhcHBlbiBlYXJseSwgYWRkIGEKKyAgICI6Z3VpIiBjb21tYW5kIGluIHRoZSB2aW1yYyBmaWxlLgorCQkJCQkJCQkqOmRlYnVnKgorMi4gUnVuIGEgY29tbWFuZCB3aXRoICI6ZGVidWciIHByZXBlbmRlZC4gIERlYnVnZ2luZyB3aWxsIG9ubHkgYmUgZG9uZSB3aGlsZQorICAgdGhpcyBjb21tYW5kIGV4ZWN1dGVzLiAgVXNlZnVsIGZvciBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBzY3JpcHQgb3IgdXNlcgorICAgZnVuY3Rpb24uICBBbmQgZm9yIHNjcmlwdHMgYW5kIGZ1bmN0aW9ucyB1c2VkIGJ5IGF1dG9jb21tYW5kcy4gIEV4YW1wbGU6ID4KKwk6ZGVidWcgZWRpdCB0ZXN0LnR4dC5negorCiszLiBTZXQgYSBicmVha3BvaW50IGluIGEgc291cmNlZCBmaWxlIG9yIHVzZXIgZnVuY3Rpb24uICBZb3UgY291bGQgZG8gdGhpcyBpbgorICAgdGhlIGNvbW1hbmQgbGluZTogPgorCXZpbSAtYyAiYnJlYWthZGQgZmlsZSAqL2V4cGxvcmVyLnZpbSIgLgorPCAgVGhpcyB3aWxsIHJ1biBWaW0gYW5kIHN0b3AgaW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlICJleHBsb3Jlci52aW0iIHNjcmlwdC4KKyAgIEJyZWFrcG9pbnRzIGNhbiBhbHNvIGJlIHNldCB3aGlsZSBpbiBkZWJ1Z2dpbmcgbW9kZS4KKworSW4gZGVidWdnaW5nIG1vZGUgZXZlcnkgZXhlY3V0ZWQgY29tbWFuZCBpcyBkaXNwbGF5ZWQgYmVmb3JlIGl0IGlzIGV4ZWN1dGVkLgorQ29tbWVudCBsaW5lcywgZW1wdHkgbGluZXMgYW5kIGxpbmVzIHRoYXQgYXJlIG5vdCBleGVjdXRlZCBhcmUgc2tpcHBlZC4gIFdoZW4KK2EgbGluZSBjb250YWlucyB0d28gY29tbWFuZHMsIHNlcGFyYXRlZCBieSAifCIsIGVhY2ggY29tbWFuZCB3aWxsIGJlIGRpc3BsYXllZAorc2VwYXJhdGVseS4KKworCitERUJVRyBNT0RFCisKK09uY2UgaW4gZGVidWdnaW5nIG1vZGUsIHRoZSB1c3VhbCBFeCBjb21tYW5kcyBjYW4gYmUgdXNlZC4gIEZvciBleGFtcGxlLCB0bworaW5zcGVjdCB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZTogPgorCWVjaG8gaWR4CitXaGVuIGluc2lkZSBhIHVzZXIgZnVuY3Rpb24sIHRoaXMgd2lsbCBwcmludCB0aGUgdmFsdWUgb2YgdGhlIGxvY2FsIHZhcmlhYmxlCisiaWR4Ii4gIFByZXBlbmQgImc6IiB0byBnZXQgdGhlIHZhbHVlIG9mIGEgZ2xvYmFsIHZhcmlhYmxlOiA+CisJZWNobyBnOmlkeAorQWxsIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiBvciBzY3JpcHQuCitZb3UgY2FuIGFsc28gc2V0IG9wdGlvbnMsIGZvciBleGFtcGxlIHNldHRpbmcgb3IgcmVzZXR0aW5nICd2ZXJib3NlJyB3aWxsIHNob3cKK3doYXQgaGFwcGVucywgYnV0IHlvdSBtaWdodCB3YW50IHRvIHNldCBpdCBqdXN0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGxpbmVzIHlvdQorYXJlIGludGVyZXN0ZWQgaW46ID4KKwk6c2V0IHZlcmJvc2U9MjAKKworQ29tbWFuZHMgdGhhdCByZXF1aXJlIHVwZGF0aW5nIHRoZSBzY3JlZW4gc2hvdWxkIGJlIGF2b2lkZWQsIGJlY2F1c2UgdGhlaXIKK2VmZmVjdCB3b24ndCBiZSBub3RpY2VkIHVudGlsIGFmdGVyIGxlYXZpbmcgZGVidWcgbW9kZS4gIEZvciBleGFtcGxlOiA+CisJOmhlbHAKK3dvbid0IGJlIHZlcnkgaGVscGZ1bC4KKworVGhlcmUgaXMgYSBzZXBhcmF0ZSBjb21tYW5kLWxpbmUgaGlzdG9yeSBmb3IgZGVidWcgbW9kZS4KKworVGhlIGxpbmUgbnVtYmVyIGZvciBhIGZ1bmN0aW9uIGxpbmUgaXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbi4KK0lmIHlvdSBoYXZlIHRyb3VibGUgZmlndXJpbmcgb3V0IHdoZXJlIHlvdSBhcmUsIGVkaXQgdGhlIGZpbGUgdGhhdCBkZWZpbmVzCit0aGUgZnVuY3Rpb24gaW4gYW5vdGhlciBWaW0sIHNlYXJjaCBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiBhbmQgZG8KKyI5OWoiLiAgUmVwbGFjZSAiOTkiIHdpdGggdGhlIGxpbmUgbnVtYmVyLgorCitBZGRpdGlvbmFsbHksIHRoZXNlIGNvbW1hbmRzIGNhbiBiZSB1c2VkOgorCQkJCQkJCSo+Y29udCoKKwljb250CQlDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIG5leHQgYnJlYWtwb2ludCBpcyBoaXQuCisJCQkJCQkJKj5xdWl0KgorCXF1aXQJCUFib3J0IGV4ZWN1dGlvbi4gIFRoaXMgaXMgbGlrZSB1c2luZyBDVFJMLUMsIHNvbWUKKwkJCXRoaW5ncyBtaWdodCBzdGlsbCBiZSBleGVjdXRlZCwgZG9lc24ndCBhYm9ydAorCQkJZXZlcnl0aGluZy4gIFN0aWxsIHN0b3BzIGF0IHRoZSBuZXh0IGJyZWFrcG9pbnQuCisJCQkJCQkJKj5uZXh0KgorCW5leHQJCUV4ZWN1dGUgdGhlIGNvbW1hbmQgYW5kIGNvbWUgYmFjayB0byBkZWJ1ZyBtb2RlIHdoZW4KKwkJCWl0J3MgZmluaXNoZWQuICBUaGlzIHN0ZXBzIG92ZXIgdXNlciBmdW5jdGlvbiBjYWxscworCQkJYW5kIHNvdXJjZWQgZmlsZXMuCisJCQkJCQkJKj5zdGVwKgorCXN0ZXAJCUV4ZWN1dGUgdGhlIGNvbW1hbmQgYW5kIGNvbWUgYmFjayB0byBkZWJ1ZyBtb2RlIGZvcgorCQkJdGhlIG5leHQgY29tbWFuZC4gIFRoaXMgc3RlcHMgaW50byBjYWxsZWQgdXNlcgorCQkJZnVuY3Rpb25zIGFuZCBzb3VyY2VkIGZpbGVzLgorCQkJCQkJCSo+aW50ZXJydXB0KgorCWludGVycnVwdAlUaGlzIGlzIGxpa2UgdXNpbmcgQ1RSTC1DLCBidXQgdW5saWtlICI+cXVpdCIgY29tZXMKKwkJCWJhY2sgdG8gZGVidWcgbW9kZSBmb3IgdGhlIG5leHQgY29tbWFuZCB0aGF0IGlzCisJCQlleGVjdXRlZC4gIFVzZWZ1bCBmb3IgdGVzdGluZyB8OmZpbmFsbHl8IGFuZCB8OmNhdGNofAorCQkJb24gaW50ZXJydXB0IGV4Y2VwdGlvbnMuCisJCQkJCQkJKj5maW5pc2gqCisJZmluaXNoCQlGaW5pc2ggdGhlIGN1cnJlbnQgc2NyaXB0IG9yIHVzZXIgZnVuY3Rpb24gYW5kIGNvbWUKKwkJCWJhY2sgdG8gZGVidWcgbW9kZSBmb3IgdGhlIGNvbW1hbmQgYWZ0ZXIgdGhlIG9uZSB0aGF0CisJCQlzb3VyY2VkIG9yIGNhbGxlZCBpdC4KKworQWJvdXQgdGhlIGFkZGl0aW9uYWwgY29tbWFuZHMgaW4gZGVidWcgbW9kZToKKy0gVGhlcmUgaXMgbm8gY29tbWFuZC1saW5lIGNvbXBsZXRpb24gZm9yIHRoZW0sIHlvdSBnZXQgdGhlIGNvbXBsZXRpb24gZm9yIHRoZQorICBub3JtYWwgRXggY29tbWFuZHMgb25seS4KKy0gWW91IGNhbiBzaG9ydGVuIHRoZW0sIHVwIHRvIGEgc2luZ2xlIGNoYXJhY3RlcjogImMiLCAibiIsICJzIiBhbmQgImYiLgorLSBIaXR0aW5nIDxDUj4gd2lsbCByZXBlYXQgdGhlIHByZXZpb3VzIG9uZS4gIFdoZW4gZG9pbmcgYW5vdGhlciBjb21tYW5kLCB0aGlzCisgIGlzIHJlc2V0IChiZWNhdXNlIGl0J3Mgbm90IGNsZWFyIHdoYXQgeW91IHdhbnQgdG8gcmVwZWF0KS4KKy0gV2hlbiB5b3Ugd2FudCB0byB1c2UgdGhlIEV4IGNvbW1hbmQgd2l0aCB0aGUgc2FtZSBuYW1lLCBwcmVwZW5kIGEgY29sb246CisgICI6Y29udCIsICI6bmV4dCIsICI6ZmluaXNoIiAob3Igc2hvcnRlcikuCisKKworREVGSU5JTkcgQlJFQUtQT0lOVFMKKwkJCQkJCQkqOmJyZWFrYSogKjpicmVha2FkZCoKKzpicmVha2FbZGRdIGZ1bmMgW2xudW1dIHtuYW1lfQorCQlTZXQgYSBicmVha3BvaW50IGluIGEgZnVuY3Rpb24uICBFeGFtcGxlOiA+CisJCQk6YnJlYWthZGQgZnVuYyBFeHBsb3JlCis8CQlEb2Vzbid0IGNoZWNrIGZvciBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUsIHRodXMgdGhlIGJyZWFrcG9pbnQKKwkJY2FuIGJlIHNldCBiZWZvcmUgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQuCisKKzpicmVha2FbZGRdIGZpbGUgW2xudW1dIHtuYW1lfQorCQlTZXQgYSBicmVha3BvaW50IGluIGEgc291cmNlZCBmaWxlLiAgRXhhbXBsZTogPgorCQkJOmJyZWFrYWRkIGZpbGUgNDMgLnZpbXJjCisKK1RoZSBbbG51bV0gaXMgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBicmVha3BvaW50LiAgVmltIHdpbGwgc3RvcCBhdCBvciBhZnRlcgordGhpcyBsaW5lLiAgV2hlbiBvbWl0dGVkIGxpbmUgMSBpcyB1c2VkLgorCit7bmFtZX0gaXMgYSBwYXR0ZXJuIHRoYXQgaXMgbWF0Y2hlZCB3aXRoIHRoZSBmaWxlIG9yIGZ1bmN0aW9uIG5hbWUuICBUaGUKK3BhdHRlcm4gaXMgbGlrZSB3aGF0IGlzIHVzZWQgZm9yIGF1dG9jb21tYW5kcy4gIFRoZXJlIG11c3QgYmUgYSBmdWxsIG1hdGNoIChhcworaWYgdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggIl4iIGFuZCBlbmRzIGluICIkIikuICBBICIqIiBtYXRjaGVzIGFueSBzZXF1ZW5jZQorb2YgY2hhcmFjdGVycy4gICdpZ25vcmVjYXNlJyBpcyBub3QgdXNlZCwgYnV0ICJcYyIgY2FuIGJlIHVzZWQgaW4gdGhlIHBhdHRlcm4KK3RvIGlnbm9yZSBjYXNlIHwvXGN8LiAgRG9uJ3QgaW5jbHVkZSB0aGUgKCkgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIQorCitUaGUgbWF0Y2ggZm9yIHNvdXJjZWQgc2NyaXB0cyBpcyBkb25lIGFnYWluc3QgdGhlIGZ1bGwgZmlsZSBuYW1lLiAgRXhhbXBsZXM6ID4KKwlicmVha2FkZCBmaWxlIGV4cGxvcmVyCit3b24ndCBtYXRjaCwgdGhlIHBhdGggaXMgbWlzc2luZy4gPgorCWJyZWFrYWRkIGZpbGUgKmV4cGxvcmVyLnZpbQorbWF0Y2hlcyAiLi4uL3BsdWdpbi9leHBsb3Jlci52aW0iIGFuZCAiLi4uL3BsdWdpbi9pZXhwbG9yZXIudmltIi4gPgorCWJyZWFrYWRkIGZpbGUgKi9leHBsb3Jlci52aW0KK21hdGNoZXMgIi4uLi9wbHVnaW4vZXhwbG9yZXIudmltIiBvbmx5LgorCitUaGUgbWF0Y2ggZm9yIGZ1bmN0aW9ucyBpcyBkb25lIGFnYWluc3QgdGhlIG5hbWUgYXMgaXQncyBzaG93biBpbiB0aGUgb3V0cHV0CitvZiAiOmZ1bmN0aW9uIi4gIEZvciBsb2NhbCBmdW5jdGlvbnMgdGhpcyBtZWFucyB0aGF0IHNvbWV0aGluZyBsaWtlICI8U05SPjk5XyIKK2lzIHByZXBlbmRlZC4KKworCitERUxFVElORyBCUkVBS1BPSU5UUworCQkJCQkJKjpicmVha2QqICo6YnJlYWtkZWwqICpFMTYxKgorOmJyZWFrZFtlbF0ge25yfQorCQlEZWxldGUgYnJlYWtwb2ludCB7bnJ9LiAgVXNlIHw6YnJlYWtsaXN0fCB0byBzZWUgdGhlIG51bWJlciBvZgorCQllYWNoIGJyZWFrcG9pbnQuCisKKzpicmVha2RbZWxdIGZ1bmMgW2xudW1dIHtuYW1lfQorCQlEZWxldGUgYSBicmVha3BvaW50IGluIGEgZnVuY3Rpb24uCisKKzpicmVha2RbZWxdIGZpbGUgW2xudW1dIHtuYW1lfQorCQlEZWxldGUgYSBicmVha3BvaW50IGluIGEgc291cmNlZCBmaWxlLgorCitXaGVuIFtsbnVtXSBpcyBvbWl0dGVkLCB0aGUgZmlyc3QgYnJlYWtwb2ludCBpbiB0aGUgZnVuY3Rpb24gb3IgZmlsZSBpcworZGVsZXRlZC4KK1RoZSB7bmFtZX0gbXVzdCBiZSBleGFjdGx5IHRoZSBzYW1lIGFzIHdoYXQgd2FzIHR5cGVkIGZvciB0aGUgIjpicmVha2FkZCIKK2NvbW1hbmQuICAiZXhwbG9yZXIiLCAiKmV4cGxvcmVyLnZpbSIgYW5kICIqZXhwbG9yZXIqIiBhcmUgZGlmZmVyZW50LgorCisKK0xJU1RJTkcgQlJFQUtQT0lOVFMKKwkJCQkJCQkqOmJyZWFrbCogKjpicmVha2xpc3QqCis6YnJlYWtsW2lzdF0KKwkJTGlzdCBhbGwgYnJlYWtwb2ludHMuCisKKworT0JTQ1VSRQorCisJCQkJCQkqOmRlYnVnZyogKjpkZWJ1Z2dyZWVkeSoKKzpkZWJ1Z2dbcmVlZHldCisJCVJlYWQgZGVidWcgbW9kZSBjb21tYW5kcyBmcm9tIHRoZSBub3JtYWwgaW5wdXQgc3RyZWFtLCBpbnN0ZWFkCisJCW9mIGdldHRpbmcgdGhlbSBkaXJlY3RseSBmcm9tIHRoZSB1c2VyLiAgT25seSB1c2VmdWwgZm9yIHRlc3QKKwkJc2NyaXB0cy4gIEV4YW1wbGU6ID4KKwkJICBlY2hvICdxXk1xJyB8IHZpbSAtZSAtcyAtYyBkZWJ1Z2dyZWVkeSAtYyAnYnJlYWthZGQgZmlsZSBzY3JpcHQudmltJyAtUyBzY3JpcHQudmltCisKKzowZGVidWdnW3JlZWR5XQorCQlVbmRvICI6ZGVidWdncmVlZHkiOiBnZXQgZGVidWcgbW9kZSBjb21tYW5kcyBkaXJlY3RseSBmcm9tIHRoZQorCQl1c2VyLCBkb24ndCB1c2UgdHlwZWFoZWFkIGZvciBkZWJ1ZyBjb21tYW5kcy4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3JpbGVmdC50eHQgYi9ydW50aW1lL2RvYy9yaWxlZnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzUzYWEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9yaWxlZnQudHh0CkBAIC0wLDAgKzEsMTI1IEBACisqcmlsZWZ0LnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDMgTWF5IDA3CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEF2bmVyIExvdHRlbQorCQkJCQkgIHVwZGF0ZWQgYnkgTmFkaW0gU2hhaWtsaQorCisKK1JpZ2h0IHRvIExlZnQgZGlzcGxheSBtb2RlIGZvciBWaW0JCQkJKnJpbGVmdCoKKworCitUaGVzZSBmdW5jdGlvbnMgd2VyZSBvcmlnaW5hbGx5IGNyZWF0ZWQgYnkgQXZuZXIgTG90dGVtOgorICAgRS1tYWlsOiBhbG90dGVtQGlpbC5pbnRlbC5jb20KKyAgIFBob25lOiAgKzk3Mi00LTgzMDczMjIKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCisJCQkJCQkJCSpFMjYqCitUaGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgfCtyaWdodGxlZnR8IGZlYXR1cmUgd2FzIGVuYWJsZWQKK2F0IGNvbXBpbGUgdGltZS4KKworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorU29tZSBsYW5ndWFnZXMgc3VjaCBhcyBBcmFiaWMsIEZhcnNpLCBIZWJyZXcgKGFtb25nIG90aGVycykgcmVxdWlyZSB0aGUKK2FiaWxpdHkgdG8gZGlzcGxheSB0aGVpciB0ZXh0IGZyb20gcmlnaHQtdG8tbGVmdC4gIEZpbGVzIGluIHRob3NlIGxhbmd1YWdlcworYXJlIHN0b3JlZCBjb252ZW50aW9uYWxseSBhbmQgdGhlIHJpZ2h0LXRvLWxlZnQgcmVxdWlyZW1lbnQgaXMgb25seSBhCitmdW5jdGlvbiBvZiB0aGUgZGlzcGxheSBlbmdpbmUgKHBlciB0aGUgVW5pY29kZSBzcGVjaWZpY2F0aW9uKS4gIEluCityaWdodC10by1sZWZ0IG9yaWVudGVkIGZpbGVzIHRoZSBjaGFyYWN0ZXJzIGFwcGVhciBvbiB0aGUgc2NyZWVuIGZyb20KK3JpZ2h0IHRvIGxlZnQuCisKK0JpZGlyZWN0aW9uYWxpdHkgKG9yIGJpZGkgZm9yIHNob3J0KSBpcyB3aGF0IFVuaWNvZGUgb2ZmZXJzIGFzIGEgZnVsbAorc29sdXRpb24gdG8gdGhlc2UgbGFuZ3VhZ2VzLiAgQmlkaSBvZmZlcnMgdGhlIHVzZXIgdGhlIGFiaWxpdHkgdG8gdmlldworYm90aCByaWdodC10by1sZWZ0IGFzIHdlbGwgYXMgbGVmdC10by1yaWdodCB0ZXh0IHByb3Blcmx5IGF0IHRoZSBzYW1lIHRpbWUKK3dpdGhpbiB0aGUgc2FtZSB3aW5kb3cuICBWaW0gY3VycmVudGx5LCBkdWUgdG8gc2ltcGxpY2l0eSwgZG9lcyBub3Qgb2ZmZXIKK2JpZGkgYW5kIGlzIG1lcmVseSBvcHRpbmcgdG8gcHJlc2VudCBhIGZ1bmN0aW9uYWwgbWVhbnMgdG8gZGlzcGxheS9lbnRlci91c2UKK3JpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzLiAgQW4gb2xkZXIgaHlicmlkIHNvbHV0aW9uIGluIHdoaWNoIGRpcmVjdGlvbiBpcworZW5jb2RlZCBmb3IgZXZlcnkgY2hhcmFjdGVyIChvciBncm91cCBvZiBjaGFyYWN0ZXJzKSBhcmUgbm90IHN1cHBvcnRlZCBlaXRoZXIKK2FzIHRoaXMga2luZCBvZiBzdXBwb3J0IGlzIG91dCBvZiB0aGUgc2NvcGUgb2YgYSBzaW1wbGUgYWRkaXRpb24gdG8gYW4KK2V4aXN0aW5nIGVkaXRvciAoYW5kIGl0cyBub3Qgc2FuY3Rpb25lZCBieSBVbmljb2RlIGVpdGhlcikuCisKKworSGlnaGxpZ2h0cworLS0tLS0tLS0tLQorbyAgRWRpdGluZyBsZWZ0LXRvLXJpZ2h0IGZpbGVzIGFzIGluIHRoZSBvcmlnaW5hbCBWaW0sIG5vIGNoYW5nZS4KKworbyAgVmlld2luZyBhbmQgZWRpdGluZyBmaWxlcyBpbiByaWdodC10by1sZWZ0IHdpbmRvd3MuICBGaWxlIG9yaWVudGF0aW9uCisgICBpcyBwZXIgd2luZG93LCBzbyBpdCBpcyBwb3NzaWJsZSB0byB2aWV3IHRoZSBzYW1lIGZpbGUgaW4gcmlnaHQtdG8tbGVmdAorICAgYW5kIGxlZnQtdG8tcmlnaHQgbW9kZXMsIHNpbXVsdGFuZW91c2x5LiAgKFVzZWZ1bCBmb3IgZWRpdGluZyBtaXhlZCBmaWxlcworICAgaW4gd2hpY2ggYm90aCByaWdodC10by1sZWZ0IGFuZCBsZWZ0LXRvLXJpZ2h0IHRleHQgZXhpc3QpLgorCitvICBDb21wYXRpYmlsaXR5IHRvIHRoZSBvcmlnaW5hbCBWaW0uICBBbG1vc3QgYWxsIGZlYXR1cmVzIHdvcmsgaW4KKyAgIHJpZ2h0LXRvLWxlZnQgbW9kZSAoc2VlIEJ1Z3MgYmVsb3cpLgorCitvICBCYWNraW5nIGZyb20gcmV2ZXJzZSBpbnNlcnQgbW9kZSB0byB0aGUgY29ycmVjdCBwbGFjZSBpbiB0aGUgZmlsZQorICAgKGlmIHBvc3NpYmxlKS4KKworbyAgTm8gc3BlY2lhbCB0ZXJtaW5hbCB3aXRoIHJpZ2h0LXRvLWxlZnQgY2FwYWJpbGl0aWVzIGlzIHJlcXVpcmVkLiAgVGhlCisgICByaWdodC10by1sZWZ0IGNoYW5nZXMgYXJlIGNvbXBsZXRlbHkgaGFyZHdhcmUgaW5kZXBlbmRlbnQuCisKK28gIE1hbnkgbGFuZ3VhZ2VzIHVzZSBhbmQgcmVxdWlyZSByaWdodC10by1sZWZ0IHN1cHBvcnQuICBUaGVzZSBsYW5ndWFnZXMKKyAgIGNhbiBxdWl0ZSBlYXNpbHkgYmUgc3VwcG9ydGVkIGdpdmVuIHRoZSBpbmNsdXNpb24gb2YgdGhlaXIgcmVxdWlyZWQKKyAgIGtleWJvYXJkIG1hcHBpbmdzIGFuZCBzb21lIHBvc3NpYmxlIG1pbm9yIGNvZGUgY2hhbmdlLiAgU29tZSBvZiB0aGUKKyAgIGN1cnJlbnQgc3VwcG9ydGVkIGxhbmd1YWdlcyBpbmNsdWRlIC0gfGFyYWJpYy50eHR8LCB8ZmFyc2kudHh0fCBhbmQKKyAgIHxoZWJyZXcudHh0fC4KKworCitPZiBJbnRlcmVzdC4uLgorLS0tLS0tLS0tLS0tLS0KKworbyAgSW52b2NhdGlvbnMKKyAgIC0tLS0tLS0tLS0tCisgICArICdyaWdodGxlZnQnICgncmwnKSBzZXRzIHdpbmRvdyBvcmllbnRhdGlvbiB0byByaWdodC10by1sZWZ0LgorICAgKyAnZGVsY29tYmluZScgKCdkZWNvJyksIGJvb2xlYW4sIGlmIGVkaXRpbmcgVVRGLTggZW5jb2RlZCBsYW5ndWFnZXMsCisgICAgIGFsbG93cyBvbmUgdG8gcmVtb3ZlIGEgY29tcG9zaW5nIGNoYXJhY3RlciB3aGljaCBnZXRzIHN1cGVyaW1wb3NlZAorICAgICBvbiB0aG9zZSB0aGF0IHByb2NlZWRlZCB0aGVtIChzb21lIGxhbmd1YWdlcyByZXF1aXJlIHRoaXMpLgorICAgKyAncmlnaHRsZWZ0Y21kJyAoJ3JsYycpIHNldHMgdGhlIGNvbW1hbmQtbGluZSB3aXRoaW4gY2VydGFpbiBtb2RlcworICAgICAoc3VjaCBhcyBzZWFyY2gpIHRvIGJlIHV0aWxpemVkIGluIHJpZ2h0LXRvLWxlZnQgb3JpZW50YXRpb24gYXMgd2VsbC4KKworbyAgVHlwaW5nIGJhY2t3YXJkcwkJCQkJKmlucy1yZXZlcnNlKgorICAgLS0tLS0tLS0tLS0tLS0tLQorICAgSW4gbGlldSBvZiB1c2luZyBmdWxsLWZsZWRnZWQgdGhlICdyaWdodGxlZnQnIG9wdGlvbiwgb25lIGNhbiBvcHQgZm9yCisgICByZXZlcnNlIGluc2VydGlvbi4gIFdoZW4gdGhlICdyZXZpbnMnIChyZXZlcnNlIGluc2VydCkgb3B0aW9uIGlzIHNldCwKKyAgIGluc2VydGluZyBoYXBwZW5zIGJhY2t3YXJkcy4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gdHlwZSByaWdodC10by1sZWZ0CisgICB0ZXh0LiAgV2hlbiBpbnNlcnRpbmcgY2hhcmFjdGVycyB0aGUgY3Vyc29yIGlzIG5vdCBtb3ZlZCBhbmQgdGhlIHRleHQKKyAgIG1vdmVzIHJpZ2h0d2FyZHMuICBBIDxCUz4gZGVsZXRlcyB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuCisgICBDVFJMLVcgYW5kIENUUkwtVSBhbHNvIHdvcmsgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gIDxCUz4sIENUUkwtVworICAgYW5kIENUUkwtVSBkbyBub3Qgc3RvcCBhdCB0aGUgc3RhcnQgb2YgaW5zZXJ0IG9yIGVuZCBvZiBsaW5lLCBubyBtYXR0ZXIKKyAgIGhvdyB0aGUgJ2JhY2tzcGFjZScgb3B0aW9uIGlzIHNldC4KKworICAgVGhlcmUgaXMgbm8gcmV2ZXJzZSByZXBsYWNlIG1vZGUgKHlldCkuCisKKyAgIElmIHRoZSAnc2hvd21vZGUnIG9wdGlvbiBpcyBzZXQsICItLSBSRVZFUlNFIElOU0VSVCAtLSIgd2lsbCBiZSBzaG93bgorICAgaW4gdGhlIHN0YXR1cyBsaW5lIHdoZW4gcmV2ZXJzZSBJbnNlcnQgbW9kZSBpcyBhY3RpdmUuCisKK28gIFBhc3Rpbmcgd2hlbiBpbiBhIHJpZ2h0bGVmdCB3aW5kb3cKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFdoZW4gY3V0dGluZyB0ZXh0IHdpdGggdGhlIG1vdXNlIGFuZCBwYXN0aW5nIGl0IGluIGEgcmlnaHRsZWZ0IHdpbmRvdworICAgdGhlIHRleHQgd2lsbCBiZSByZXZlcnNlZCwgYmVjYXVzZSB0aGUgY2hhcmFjdGVycyBjb21lIGZyb20gdGhlIGN1dCBidWZmZXIKKyAgIGZyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0LCB3aGlsZSBpbnNlcnRlZCBpbiB0aGUgZmlsZSBmcm9tIHRoZSByaWdodCB0bworICAgdGhlIGxlZnQuICAgSW4gb3JkZXIgdG8gYXZvaWQgaXQsIHRvZ2dsZSAncmV2aW5zJyBiZWZvcmUgcGFzdGluZy4KKworCitCdWdzCistLS0tCitvICBEb2VzIG5vdCBoYW5kbGUgQ1RSTC1BIGFuZCBDVFJMLVggY29tbWFuZHMgKGFkZCBhbmQgc3VidHJhY3QpIGNvcnJlY3RseQorICAgd2hlbiBpbiByaWdodGxlZnQgd2luZG93LgorCitvICBEb2VzIG5vdCBzdXBwb3J0IHJldmVyc2UgaW5zZXJ0IGFuZCByaWdodGxlZnQgbW9kZXMgb24gdGhlIGNvbW1hbmQtbGluZS4KKyAgIEhvd2V2ZXIsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGVkaXRvciBpcyBub3QgcmVkdWNlZCwgYmVjYXVzZSBpdCBpcworICAgcG9zc2libGUgdG8gZW50ZXIgbWFwcGluZ3MsIGFiYnJldmlhdGlvbnMgYW5kIHNlYXJjaGVzIHR5cGVkIGZyb20gdGhlCisgICBsZWZ0IHRvIHRoZSByaWdodCBvbiB0aGUgY29tbWFuZC1saW5lLgorCitvICBTb21ld2hhdCBzbG93ZXIgaW4gcmlnaHQtdG8tbGVmdCBtb2RlLCBiZWNhdXNlIHJpZ2h0LXRvLWxlZnQgbW90aW9uIGlzCisgICBlbXVsYXRlZCBpbnNpZGUgVmltLCBub3QgYnkgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorCitvICBXaGVuIHRoZSBBdGhlbmEgR1VJIGlzIHVzZWQsIHRoZSBib3R0b20gc2Nyb2xsYmFyIHdvcmtzIGluIHRoZSB3cm9uZworICAgZGlyZWN0aW9uLiAgVGhpcyBpcyBkaWZmaWN1bHQgdG8gZml4LgorCitvICBXaGVuIGJvdGggJ3JpZ2h0bGVmdCcgYW5kICdyZXZpbnMnIGFyZSBvbjogJ3RleHR3aWR0aCcgZG9lcyBub3Qgd29yay4KKyAgIExpbmVzIGRvIG5vdCB3cmFwIGF0IGFsbDsgeW91IGp1c3QgZ2V0IGEgc2luZ2xlLCBsb25nIGxpbmUuCisKK28gIFRoZXJlIGlzIG5vIGZ1bGwgYmlkaXJlY3Rpb25hbGl0eSAoYmlkaSkgc3VwcG9ydC4KKworCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcnVzc2lhbi50eHQgYi9ydW50aW1lL2RvYy9ydXNzaWFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjhmNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvcnVzc2lhbi50eHQKQEAgLTAsMCArMSw4MyBAQAorKnJ1c3NpYW4udHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1biAwOQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBWYXNzaWx5IFJhZ29zaW4KKworCitSdXNzaWFuIGxhbmd1YWdlIGxvY2FsaXphdGlvbiBhbmQgc3VwcG9ydCBpbiBWaW0JICAgKnJ1c3NpYW4qICpSdXNzaWFuKgorCisxLiBJbnRyb2R1Y3Rpb24JCQkJICB8cnVzc2lhbi1pbnRyb3wKKzIuIFJ1c3NpYW4ga2V5bWFwcwkJCSAgfHJ1c3NpYW4ta2V5bWFwfAorMy4gTG9jYWxpemF0aW9uCQkJCSAgfHJ1c3NpYW4tbDE4bnwKKzQuIEtub3duIGlzc3VlcwkJCQkgIHxydXNzaWFuLWlzc3Vlc3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW50cm9kdWN0aW9uCQkJCQkJCSpydXNzaWFuLWludHJvKgorCitSdXNzaWFuIGxhbmd1YWdlIGlzIHN1cHBvcnRlZCBwZXJmZWN0bHkgd2VsbCBpbiBWaW0uIFlvdSBjYW4gdHlwZSBhbmQgdmlldworUnVzc2lhbiB0ZXh0IGp1c3QgYXMgYW55IG90aGVyLCB3aXRob3V0IHRoZSBuZWVkIHRvIHR3ZWFrIHRoZSBzZXR0aW5ncy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gUnVzc2lhbiBrZXltYXBzCQkJCQkgICAgICAgKnJ1c3NpYW4ta2V5bWFwKgorCitUbyBzd2l0Y2ggYmV0d2VlbiBsYW5ndWFnZXMgeW91IGNhbiB1c2UgeW91ciBzeXN0ZW0gbmF0aXZlIGtleWJvYXJkIHN3aXRjaGVyLAorb3IgdXNlIG9uZSBvZiB0aGUgUnVzc2lhbiBrZXltYXBzLCBpbmNsdWRlZCBpbiB0aGUgVmltIGRpc3RyaWJ1dGlvbi4gIEZvcgorZXhhbXBsZSwKKz4KKyAgICA6c2V0IGtleW1hcD1ydXNzaWFuLWpjdWtlbndpbgorPAorSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UgY2FuIHN3aXRjaCBiZXR3ZWVuIGxhbmd1YWdlcyBldmVuIGlmIHlvdSBkbyBub3QgaGF2ZQorc3lzdGVtIFJ1c3NpYW4ga2V5Ym9hcmQgb3IgaW5kZXBlbmRlbnRseSBmcm9tIGEgc3lzdGVtLXdpZGUga2V5Ym9hcmQgc2V0dGluZ3MuCitTZWUgJ2tleW1hcCcuIFlvdSBjYW4gYWxzbyBtYXAgYSBrZXkgdG8gc3dpdGNoIGJldHdlZW4ga2V5Ym9hcmRzLCBpZiB5b3UKK2Nob29zZSB0aGUgbGF0dGVyIG9wdGlvbi4gU2VlIHw6bWFwfC4KKworRm9yIHlvdXIgY29udmVuaWVuY2UsIHRvIGF2b2lkIHN3aXRjaGluZyBiZXR3ZWVuIGtleWJvYXJkcywgd2hlbiB5b3UgbmVlZCB0bworZW50ZXIgTm9ybWFsIG1vZGUgY29tbWFuZCwgeW91IGNhbiBhbHNvIHNldCAnbGFuZ21hcCcgb3B0aW9uOgorPgorICAgIDpzZXQgbGFuZ21hcD3QpNCY0KHQktCj0JDQn9Cg0KjQntCb0JTQrNCi0KnQl9CZ0JrQq9CV0JPQnNCm0KfQndCvO0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLAorICAgINGE0LjRgdCy0YPQsNC/0YDRiNC+0LvQtNGM0YLRidC30LnQutGL0LXQs9C80YbRh9C90Y87YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKworVGhpcyBpcyBpbiB1dGYtOCwgeW91IGNhbm5vdCByZWFkIHRoaXMgaWYgeW91ciAnZW5jb2RpbmcnIGlzIG5vdCB1dGYtOC4KK1lvdSBoYXZlIHRvIHR5cGUgdGhpcyBjb21tYW5kIGluIG9uZSBsaW5lLCBpdCBpcyB3cmFwcGVkIGZvciB0aGUgc2FrZSBvZgorcmVhZGFiaWxpdHkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIExvY2FsaXphdGlvbgkJCQkJCQkgKnJ1c3NpYW4tbDE4bioKKworSWYgeW91IHdpc2ggdG8gdXNlIG1lc3NhZ2VzLCBoZWxwIGZpbGVzLCBtZW51cyBhbmQgb3RoZXIgaXRlbXMgdHJhbnNsYXRlZCB0bworUnVzc2lhbiwgeW91IHdpbGwgbmVlZCB0byBpbnN0YWxsIHRoZSBSdVZpbSBMYW5ndWFnZSBQYWNrLCBhdmFpbGFibGUgaW4KK2RpZmZlcmVudCBjb2RlcGFnZXMgZnJvbQorCisgICAgaHR0cDovL3d3dy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcnV2aW0vCisKK01ha2Ugc3VyZSB0aGF0IHlvdXIgVmltIGlzIGF0IGxlYXN0IDYuMi41MDYgYW5kIHVzZSBydXZpbSAwLjUgb3IgbGF0ZXIgZm9yCithdXRvbWF0aWMgaW5zdGFsbHMuIFZpbSBhbHNvIG5lZWRzIHRvIGJlIGNvbXBpbGVkIHdpdGggfCtnZXR0ZXh0fCBmZWF0dXJlIGZvcgordXNlciBpbnRlcmZhY2UgaXRlbXMgdHJhbnNsYXRpb25zIHRvIHdvcmsuCisKK0FmdGVyIGRvd25sb2FkaW5nIGFuIGFyY2hpdmUgZnJvbSBSdVZpbSBwcm9qZWN0LCB1bnBhY2sgaXQgaW50byB5b3VyCiskVklNUlVOVElNRSBkaXJlY3RvcnkuIFdlIHJlY29tbWVuZCB1c2luZyBVVEYtOCBhcmNoaXZlLCBpZiB5b3VyIHZlcnNpb24gb2YKK1ZpbSBpcyBjb21waWxlZCB3aXRoIHwrbXVsdGlfYnl0ZXwgZmVhdHVyZSBlbmFibGVkLgorCitJbiBvcmRlciB0byB1c2UgdGhlIFJ1c3NpYW4gZG9jdW1lbnRhdGlvbiwgbWFrZSBzdXJlIHlvdSBoYXZlIHNldCB0aGUKKydoZWxwbGFuZycgb3B0aW9uIHRvICJydSIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIEtub3duIGlzc3VlcwkJCQkJCSAgICAgICAqcnVzc2lhbi1pc3N1ZXMqCisKKy0tIElmIHlvdSBhcmUgdXNpbmcgUnVzc2lhbiBtZXNzYWdlIHRyYW5zbGF0aW9ucyBpbiBXaW4zMiBjb25zb2xlLCB0aGVuCisgICB5b3UgbWF5IHNlZSB0aGUgb3V0cHV0IHByb2R1Y2VkIGJ5ICJ2aW0gLS1oZWxwIiwgInZpbSAtLXZlcnNpb24iIGNvbW1hbmRzCisgICBhbmQgV2luMzIgY29uc29sZSB3aW5kb3cgdGl0bGUgYXBwZWFyaW5nIGluIGEgd3JvbmcgY29kZXBhZ2UuIFRoaXMgcHJvYmxlbQorICAgaXMgcmVsYXRlZCB0byBhIGJ1ZyBpbiBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGFuZCBtYXkgYmUgZml4ZWQgaW4gdGhlIGZ1dHVyZQorICAgcmVsZWFzZXMgb2YgZ2V0dGV4dC4KKworLS0gV2hlbiB1c2luZyB0aGUgV2luMzIgY29uc29sZSB2ZXJzaW9uIG9mIFZpbSB5b3UgbWF5IGV4cGVyaWVuY2UgYSBwcm9ibGVtCisgICB3aXRoIG1hbnkgQ3lyaWxsaWMgZ2x5cGhzIGJlaW5nIHJlcGxhY2VkIGJ5IHdoaXRlc3BhY2VzIGZvciBzb21lIHVua25vd24KKyAgIHJlYXNvbi4gIFNlcmdleSBLaG9yZXYgc3VnZ2VzdGVkIGEgcmVnaXN0cnkgaGFjayB0byBhdm9pZCB0aGlzOgorCisgICBSRUdFRElUNAorCisgICBbSEtFWV9MT0NBTF9NQUNISU5FXFNZU1RFTVxDdXJyZW50Q29udHJvbFNldFxDb250cm9sXE5sc1xDb2RlUGFnZV0KKyAgICIxMjUyIj0iY18xMjUxLm5scyIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Njcm9sbC50eHQgYi9ydW50aW1lL2RvYy9zY3JvbGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ODU1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9zY3JvbGwudHh0CkBAIC0wLDAgKzEsMzAzIEBACisqc2Nyb2xsLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA4CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworU2Nyb2xsaW5nCQkJCQkJKnNjcm9sbGluZyoKKworVGhlc2UgY29tbWFuZHMgbW92ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpbmRvdy4gIElmIHRoZSBjdXJzb3IgcG9zaXRpb24gaXMKK21vdmVkIG9mZiBvZiB0aGUgd2luZG93LCB0aGUgY3Vyc29yIGlzIG1vdmVkIG9udG8gdGhlIHdpbmRvdyAod2l0aAorJ3Njcm9sbG9mZicgc2NyZWVuIGxpbmVzIGFyb3VuZCBpdCkuICBBIHBhZ2UgaXMgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUKK3dpbmRvdyBtaW51cyB0d28uICBUaGUgbW5lbW9uaWNzIGZvciB0aGVzZSBjb21tYW5kcyBtYXkgYmUgYSBiaXQgY29uZnVzaW5nLgorUmVtZW1iZXIgdGhhdCB0aGUgY29tbWFuZHMgcmVmZXIgdG8gbW92aW5nIHRoZSB3aW5kb3cgKHRoZSBwYXJ0IG9mIHRoZSBidWZmZXIKK3RoYXQgeW91IHNlZSkgdXB3YXJkcyBvciBkb3dud2FyZHMgaW4gdGhlIGJ1ZmZlci4gIFdoZW4gdGhlIHdpbmRvdyBtb3ZlcwordXB3YXJkcyBpbiB0aGUgYnVmZmVyLCB0aGUgdGV4dCBpbiB0aGUgd2luZG93IG1vdmVzIGRvd253YXJkcyBvbiB5b3VyIHNjcmVlbi4KKworU2VlIHNlY3Rpb24gfDAzLjd8IG9mIHRoZSB1c2VyIG1hbnVhbCBmb3IgYW4gaW50cm9kdWN0aW9uLgorCisxLiBTY3JvbGxpbmcgZG93bndhcmRzCQl8c2Nyb2xsLWRvd258CisyLiBTY3JvbGxpbmcgdXB3YXJkcwkJfHNjcm9sbC11cHwKKzMuIFNjcm9sbGluZyByZWxhdGl2ZSB0byBjdXJzb3IJfHNjcm9sbC1jdXJzb3J8Cis0LiBTY3JvbGxpbmcgaG9yaXpvbnRhbGx5CXxzY3JvbGwtaG9yaXpvbnRhbHwKKzUuIFNjcm9sbGluZyBzeW5jaHJvbm91c2x5CXxzY3JvbGwtYmluZGluZ3wKKzYuIFNjcm9sbGluZyB3aXRoIGEgbW91c2Ugd2hlZWwgfHNjcm9sbC1tb3VzZS13aGVlbHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTY3JvbGxpbmcgZG93bndhcmRzCQkJCQkqc2Nyb2xsLWRvd24qCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgbW92ZSB0aGUgZWRpdCB3aW5kb3cgKHRoZSBwYXJ0IG9mIHRoZSBidWZmZXIgdGhhdCB5b3UKK3NlZSkgZG93bndhcmRzICh0aGlzIG1lYW5zIHRoYXQgbW9yZSBsaW5lcyBkb3dud2FyZHMgaW4gdGhlIHRleHQgYnVmZmVyIGNhbiBiZQorc2Vlbik6CisKKwkJCQkJCQkqQ1RSTC1FKgorQ1RSTC1FCQkJU2Nyb2xsIHdpbmRvdyBbY291bnRdIGxpbmVzIGRvd253YXJkcyBpbiB0aGUgYnVmZmVyLgorCQkJTW5lbW9uaWM6IEV4dHJhIGxpbmVzLgorCisJCQkJCQkJKkNUUkwtRCoKK0NUUkwtRAkJCVNjcm9sbCB3aW5kb3cgRG93bndhcmRzIGluIHRoZSBidWZmZXIuICBUaGUgbnVtYmVyIG9mCisJCQlsaW5lcyBjb21lcyBmcm9tIHRoZSAnc2Nyb2xsJyBvcHRpb24gKGRlZmF1bHQ6IGhhbGYgYQorCQkJc2NyZWVuKS4gIElmIFtjb3VudF0gZ2l2ZW4sIGZpcnN0IHNldCAnc2Nyb2xsJyBvcHRpb24KKwkJCXRvIFtjb3VudF0uICBUaGUgY3Vyc29yIGlzIG1vdmVkIHRoZSBzYW1lIG51bWJlciBvZgorCQkJbGluZXMgZG93biBpbiB0aGUgZmlsZSAoaWYgcG9zc2libGU7IHdoZW4gbGluZXMgd3JhcAorCQkJYW5kIHdoZW4gaGl0dGluZyB0aGUgZW5kIG9mIHRoZSBmaWxlIHRoZXJlIG1heSBiZSBhCisJCQlkaWZmZXJlbmNlKS4gIFdoZW4gdGhlIGN1cnNvciBpcyBvbiB0aGUgbGFzdCBsaW5lIG9mCisJCQl0aGUgYnVmZmVyIG5vdGhpbmcgaGFwcGVucyBhbmQgYSBiZWVwIGlzIHByb2R1Y2VkLgorCQkJU2VlIGFsc28gJ3N0YXJ0b2ZsaW5lJyBvcHRpb24uCisJCQl7ZGlmZmVyZW5jZSBmcm9tIHZpOiBWaW0gc2Nyb2xscyAnc2Nyb2xsJyBzY3JlZW4KKwkJCWxpbmVzLCBpbnN0ZWFkIG9mIGZpbGUgbGluZXM7IG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuCisJCQlsaW5lcyB3cmFwfQorCis8Uy1Eb3duPglvcgkJCQkqPFMtRG93bj4qICo8a1BhZ2VEb3duPioKKzxQYWdlRG93bj4Jb3IJCQkJKjxQYWdlRG93bj4qICpDVFJMLUYqCitDVFJMLUYJCQlTY3JvbGwgd2luZG93IFtjb3VudF0gcGFnZXMgRm9yd2FyZHMgKGRvd253YXJkcykgaW4KKwkJCXRoZSBidWZmZXIuICBTZWUgYWxzbyAnc3RhcnRvZmxpbmUnIG9wdGlvbi4KKworCQkJCQkJCSp6KyoKK3orCQkJV2l0aG91dCBbY291bnRdOiBSZWRyYXcgd2l0aCB0aGUgbGluZSBqdXN0IGJlbG93IHRoZQorCQkJd2luZG93IGF0IHRoZSB0b3Agb2YgdGhlIHdpbmRvdy4gIFB1dCB0aGUgY3Vyc29yIGluCisJCQl0aGF0IGxpbmUsIGF0IHRoZSBmaXJzdCBub24tYmxhbmsgaW4gdGhlIGxpbmUuCisJCQlXaXRoIFtjb3VudF06IGp1c3QgbGlrZSAiejxDUj4iLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFNjcm9sbGluZyB1cHdhcmRzCQkJCQkqc2Nyb2xsLXVwKgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmRzIG1vdmUgdGhlIGVkaXQgd2luZG93ICh0aGUgcGFydCBvZiB0aGUgYnVmZmVyIHRoYXQgeW91CitzZWUpIHVwd2FyZHMgKHRoaXMgbWVhbnMgdGhhdCBtb3JlIGxpbmVzIHVwd2FyZHMgaW4gdGhlIHRleHQgYnVmZmVyIGNhbiBiZQorc2Vlbik6CisKKwkJCQkJCQkqQ1RSTC1ZKgorQ1RSTC1ZCQkJU2Nyb2xsIHdpbmRvdyBbY291bnRdIGxpbmVzIHVwd2FyZHMgaW4gdGhlIGJ1ZmZlci4KKwkJCU5vdGU6IFdoZW4gdXNpbmcgdGhlIE1TLVdpbmRvd3Mga2V5IGJpbmRpbmdzIENUUkwtWSBpcworCQkJcmVtYXBwZWQgdG8gcmVkby4KKworCQkJCQkJCSpDVFJMLVUqCitDVFJMLVUJCQlTY3JvbGwgd2luZG93IFVwd2FyZHMgaW4gdGhlIGJ1ZmZlci4gIFRoZSBudW1iZXIgb2YKKwkJCWxpbmVzIGNvbWVzIGZyb20gdGhlICdzY3JvbGwnIG9wdGlvbiAoZGVmYXVsdDogaGFsZiBhCisJCQlzY3JlZW4pLiAgSWYgW2NvdW50XSBnaXZlbiwgZmlyc3Qgc2V0IHRoZSAnc2Nyb2xsJworCQkJb3B0aW9uIHRvIFtjb3VudF0uICBUaGUgY3Vyc29yIGlzIG1vdmVkIHRoZSBzYW1lCisJCQludW1iZXIgb2YgbGluZXMgdXAgaW4gdGhlIGZpbGUgKGlmIHBvc3NpYmxlOyB3aGVuCisJCQlsaW5lcyB3cmFwIGFuZCB3aGVuIGhpdHRpbmcgdGhlIGVuZCBvZiB0aGUgZmlsZSB0aGVyZQorCQkJbWF5IGJlIGEgZGlmZmVyZW5jZSkuICBXaGVuIHRoZSBjdXJzb3IgaXMgb24gdGhlIGZpcnN0CisJCQlsaW5lIG9mIHRoZSBidWZmZXIgbm90aGluZyBoYXBwZW5zIGFuZCBhIGJlZXAgaXMKKwkJCXByb2R1Y2VkLiAgU2VlIGFsc28gJ3N0YXJ0b2ZsaW5lJyBvcHRpb24uCisJCQl7ZGlmZmVyZW5jZSBmcm9tIHZpOiBWaW0gc2Nyb2xscyAnc2Nyb2xsJyBzY3JlZW4KKwkJCWxpbmVzLCBpbnN0ZWFkIG9mIGZpbGUgbGluZXM7IG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuCisJCQlsaW5lcyB3cmFwfQorCis8Uy1VcD4JCW9yCQkJCQkqPFMtVXA+KiAqPGtQYWdlVXA+KgorPFBhZ2VVcD4Jb3IJCQkJCSo8UGFnZVVwPiogKkNUUkwtQioKK0NUUkwtQgkJCVNjcm9sbCB3aW5kb3cgW2NvdW50XSBwYWdlcyBCYWNrd2FyZHMgKHVwd2FyZHMpIGluIHRoZQorCQkJYnVmZmVyLiAgU2VlIGFsc28gJ3N0YXJ0b2ZsaW5lJyBvcHRpb24uCisKKwkJCQkJCQkqel4qCit6XgkJCVdpdGhvdXQgW2NvdW50XTogUmVkcmF3IHdpdGggdGhlIGxpbmUganVzdCBhYm92ZSB0aGUKKwkJCXdpbmRvdyBhdCB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3cuICBQdXQgdGhlIGN1cnNvciBpbgorCQkJdGhhdCBsaW5lLCBhdCB0aGUgZmlyc3Qgbm9uLWJsYW5rIGluIHRoZSBsaW5lLgorCQkJV2l0aCBbY291bnRdOiBGaXJzdCBzY3JvbGwgdGhlIHRleHQgdG8gcHV0IHRoZSBbY291bnRdCisJCQlsaW5lIGF0IHRoZSBib3R0b20gb2YgdGhlIHdpbmRvdywgdGhlbiByZWRyYXcgd2l0aCB0aGUKKwkJCWxpbmUgd2hpY2ggaXMgbm93IGF0IHRoZSB0b3Agb2YgdGhlIHdpbmRvdyBhdCB0aGUKKwkJCWJvdHRvbSBvZiB0aGUgd2luZG93LiAgUHV0IHRoZSBjdXJzb3IgaW4gdGhhdCBsaW5lLCBhdAorCQkJdGhlIGZpcnN0IG5vbi1ibGFuayBpbiB0aGUgbGluZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBTY3JvbGxpbmcgcmVsYXRpdmUgdG8gY3Vyc29yCQkJCSpzY3JvbGwtY3Vyc29yKgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHJlcG9zaXRpb24gdGhlIGVkaXQgd2luZG93ICh0aGUgcGFydCBvZiB0aGUgYnVmZmVyIHRoYXQKK3lvdSBzZWUpIHdoaWxlIGtlZXBpbmcgdGhlIGN1cnNvciBvbiB0aGUgc2FtZSBsaW5lOgorCisJCQkJCQkJKno8Q1I+KgorejxDUj4JCQlSZWRyYXcsIGxpbmUgW2NvdW50XSBhdCB0b3Agb2Ygd2luZG93IChkZWZhdWx0CisJCQljdXJzb3IgbGluZSkuICBQdXQgY3Vyc29yIGF0IGZpcnN0IG5vbi1ibGFuayBpbiB0aGUKKwkJCWxpbmUuCisKKwkJCQkJCQkqenQqCit6dAkJCUxpa2UgIno8Q1I+IiwgYnV0IGxlYXZlIHRoZSBjdXJzb3IgaW4gdGhlIHNhbWUKKwkJCWNvbHVtbi4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqek48Q1I+KgorentoZWlnaHR9PENSPgkJUmVkcmF3LCBtYWtlIHdpbmRvdyB7aGVpZ2h0fSBsaW5lcyB0YWxsLiAgVGhpcyBpcworCQkJdXNlZnVsIHRvIG1ha2UgdGhlIG51bWJlciBvZiBsaW5lcyBzbWFsbCB3aGVuIHNjcmVlbgorCQkJdXBkYXRpbmcgaXMgdmVyeSBzbG93LiAgQ2Fubm90IG1ha2UgdGhlIGhlaWdodCBtb3JlCisJCQl0aGFuIHRoZSBwaHlzaWNhbCBzY3JlZW4gaGVpZ2h0LgorCisJCQkJCQkJKnouKgorei4JCQlSZWRyYXcsIGxpbmUgW2NvdW50XSBhdCBjZW50ZXIgb2Ygd2luZG93IChkZWZhdWx0CisJCQljdXJzb3IgbGluZSkuICBQdXQgY3Vyc29yIGF0IGZpcnN0IG5vbi1ibGFuayBpbiB0aGUKKwkJCWxpbmUuCisKKwkJCQkJCQkqenoqCit6egkJCUxpa2UgInouIiwgYnV0IGxlYXZlIHRoZSBjdXJzb3IgaW4gdGhlIHNhbWUgY29sdW1uLgorCQkJQ2FyZWZ1bDogSWYgY2Fwcy1sb2NrIGlzIG9uLCB0aGlzIGNvbW1hbmRzIGJlY29tZXMKKwkJCSJaWiI6IHdyaXRlIGJ1ZmZlciBhbmQgZXhpdCEgIHtub3QgaW4gVml9CisKKwkJCQkJCQkqei0qCit6LQkJCVJlZHJhdywgbGluZSBbY291bnRdIGF0IGJvdHRvbSBvZiB3aW5kb3cgKGRlZmF1bHQKKwkJCWN1cnNvciBsaW5lKS4gIFB1dCBjdXJzb3IgYXQgZmlyc3Qgbm9uLWJsYW5rIGluIHRoZQorCQkJbGluZS4KKworCQkJCQkJCSp6YioKK3piCQkJTGlrZSAiei0iLCBidXQgbGVhdmUgdGhlIGN1cnNvciBpbiB0aGUgc2FtZSBjb2x1bW4uCisJCQl7bm90IGluIFZpfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFNjcm9sbGluZyBob3Jpem9udGFsbHkJCQkJKnNjcm9sbC1ob3Jpem9udGFsKgorCitGb3IgdGhlIGZvbGxvd2luZyBmb3VyIGNvbW1hbmRzIHRoZSBjdXJzb3IgZm9sbG93cyB0aGUgc2NyZWVuLiAgSWYgdGhlCitjaGFyYWN0ZXIgdGhhdCB0aGUgY3Vyc29yIGlzIG9uIGlzIG1vdmVkIG9mZiB0aGUgc2NyZWVuLCB0aGUgY3Vyc29yIGlzIG1vdmVkCit0byB0aGUgY2xvc2VzdCBjaGFyYWN0ZXIgdGhhdCBpcyBvbiB0aGUgc2NyZWVuLiAgVGhlIHZhbHVlIG9mICdzaWRlc2Nyb2xsJyBpcworbm90IHVzZWQuCisKK3o8UmlnaHQ+ICAgIG9yCQkJCQkJKnpsKiAqejxSaWdodD4qCit6bAkJCVNjcm9sbCB0aGUgc2NyZWVuIFtjb3VudF0gY2hhcmFjdGVycyB0byB0aGUgbGVmdC4KKwkJCVRoaXMgb25seSB3b3JrcyB3aGVuICd3cmFwJyBpcyBvZmYuICB7bm90IGluIFZpfQorCit6PExlZnQ+ICAgICAgb3IJCQkJCQkqemgqICp6PExlZnQ+KgoremgJCQlTY3JvbGwgdGhlIHNjcmVlbiBbY291bnRdIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0LgorCQkJVGhpcyBvbmx5IHdvcmtzIHdoZW4gJ3dyYXAnIGlzIG9mZi4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqekwqCit6TAkJCVNjcm9sbCB0aGUgc2NyZWVuIGhhbGYgYSBzY3JlZW53aWR0aCB0byB0aGUgbGVmdC4KKwkJCVRoaXMgb25seSB3b3JrcyB3aGVuICd3cmFwJyBpcyBvZmYuICB7bm90IGluIFZpfQorCisJCQkJCQkJKnpIKgorekgJCQlTY3JvbGwgdGhlIHNjcmVlbiBoYWxmIGEgc2NyZWVud2lkdGggdG8gdGhlIHJpZ2h0LgorCQkJVGhpcyBvbmx5IHdvcmtzIHdoZW4gJ3dyYXAnIGlzIG9mZi4gIHtub3QgaW4gVml9CisKK0ZvciB0aGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyB0aGUgY3Vyc29yIGlzIG5vdCBtb3ZlZCBpbiB0aGUgdGV4dCwgb25seSB0aGUKK3RleHQgc2Nyb2xscyBvbiB0aGUgc2NyZWVuLgorCisJCQkJCQkJKnpzKgorenMJCQlTY3JvbGwgdGhlIHNjcmVlbiBob3Jpem9udGFsbHkgdG8gcG9zaXRpb24gdGhlIGN1cnNvcgorCQkJYXQgdGhlIHN0YXJ0IChsZWZ0IHNpZGUpIG9mIHRoZSBzY3JlZW4uICBUaGlzIG9ubHkKKwkJCXdvcmtzIHdoZW4gJ3dyYXAnIGlzIG9mZi4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqemUqCit6ZQkJCVNjcm9sbCB0aGUgc2NyZWVuIGhvcml6b250YWxseSB0byBwb3NpdGlvbiB0aGUgY3Vyc29yCisJCQlhdCB0aGUgZW5kIChyaWdodCBzaWRlKSBvZiB0aGUgc2NyZWVuLiAgVGhpcyBvbmx5CisJCQl3b3JrcyB3aGVuICd3cmFwJyBpcyBvZmYuICB7bm90IGluIFZpfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFNjcm9sbGluZyBzeW5jaHJvbm91c2x5CQkJCSpzY3JvbGwtYmluZGluZyoKKworT2NjYXNpb25hbGx5LCBpdCBpcyBkZXNpcmFibGUgdG8gYmluZCB0d28gb3IgbW9yZSB3aW5kb3dzIHRvZ2V0aGVyIHN1Y2ggdGhhdAord2hlbiBvbmUgd2luZG93IGlzIHNjcm9sbGVkLCB0aGUgb3RoZXIgd2luZG93cyBhcmUgc2Nyb2xsZWQgYWxzby4gIEluIFZpbSwKK3dpbmRvd3MgY2FuIGJlIGdpdmVuIHRoaXMgYmVoYXZpb3IgYnkgc2V0dGluZyB0aGUgKHdpbmRvdy1zcGVjaWZpYykKKydzY3JvbGxiaW5kJyBvcHRpb24uICBXaGVuIGEgd2luZG93IHRoYXQgaGFzICdzY3JvbGxiaW5kJyBzZXQgaXMgc2Nyb2xsZWQsIGFsbAorb3RoZXIgJ3Njcm9sbGJpbmQnIHdpbmRvd3MgYXJlIHNjcm9sbGVkIHRoZSBzYW1lIGFtb3VudCwgaWYgcG9zc2libGUuICBUaGUKK2JlaGF2aW9yIG9mICdzY3JvbGxiaW5kJyBjYW4gYmUgbW9kaWZpZWQgYnkgdGhlICdzY3JvbGxvcHQnIG9wdGlvbi4KKworV2hlbiB1c2luZyB0aGUgc2Nyb2xsYmFycywgdGhlIGJpbmRpbmcgb25seSBoYXBwZW5zIHdoZW4gc2Nyb2xsaW5nIHRoZSB3aW5kb3cKK3dpdGggZm9jdXMgKHdoZXJlIHRoZSBjdXJzb3IgaXMpLiAgWW91IGNhbiB1c2UgdGhpcyB0byBhdm9pZCBzY3JvbGwtYmluZGluZworZm9yIGEgbW9tZW50IHdpdGhvdXQgcmVzZXR0aW5nIG9wdGlvbnMuCisKK1doZW4gYSB3aW5kb3cgYWxzbyBoYXMgdGhlICdkaWZmJyBvcHRpb24gc2V0LCB0aGUgc2Nyb2xsLWJpbmRpbmcgdXNlcyB0aGUKK2RpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHR3byBidWZmZXJzIHRvIHN5bmNocm9uaXplIHRoZSBwb3NpdGlvbiBwcmVjaXNlbHkuCitPdGhlcndpc2UgdGhlIGZvbGxvd2luZyBtZXRob2QgaXMgdXNlZC4KKworCQkJCQkJCSpzY3JvbGxiaW5kLXJlbGF0aXZlKgorRWFjaCAnc2Nyb2xsYmluZCcgd2luZG93IGtlZXBzIHRyYWNrIG9mIGl0cyAicmVsYXRpdmUgb2Zmc2V0LCIgd2hpY2ggY2FuIGJlCit0aG91Z2h0IG9mIGFzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgd2luZG93J3MgdmVydGljYWwgc2Nyb2xsCitwb3NpdGlvbiBhbmQgdGhlIG90aGVyIHdpbmRvdydzIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbi4gIFdoZW4gb25lIG9mIHRoZQorJ3Njcm9sbGJpbmQnIHdpbmRvd3MgaXMgYXNrZWQgdG8gdmVydGljYWxseSBzY3JvbGwgcGFzdCB0aGUgYmVnaW5uaW5nIG9yIGVuZAorbGltaXQgb2YgaXRzIHRleHQsIHRoZSB3aW5kb3cgbm8gbG9uZ2VyIHNjcm9sbHMsIGJ1dCByZW1lbWJlcnMgaG93IGZhciBwYXN0Cit0aGUgbGltaXQgaXQgd2lzaGVzIHRvIGJlLiAgVGhlIHdpbmRvdyBrZWVwcyB0aGlzIGluZm9ybWF0aW9uIHNvIHRoYXQgaXQgY2FuCittYWludGFpbiB0aGUgc2FtZSByZWxhdGl2ZSBvZmZzZXQsIHJlZ2FyZGxlc3Mgb2YgaXRzIGJlaW5nIGFza2VkIHRvIHNjcm9sbAorcGFzdCBpdHMgYnVmZmVyJ3MgbGltaXRzLgorCitIb3dldmVyLCBpZiBhICdzY3JvbGxiaW5kJyB3aW5kb3cgdGhhdCBoYXMgYSByZWxhdGl2ZSBvZmZzZXQgdGhhdCBpcyBwYXN0IGl0cworYnVmZmVyJ3MgbGltaXRzIGlzIGdpdmVuIHRoZSBjdXJzb3IgZm9jdXMsIHRoZSBvdGhlciAnc2Nyb2xsYmluZCcgd2luZG93cyBtdXN0CitqdW1wIHRvIGEgbG9jYXRpb24gd2hlcmUgdGhlIGN1cnJlbnQgd2luZG93J3MgcmVsYXRpdmUgb2Zmc2V0IGlzIHZhbGlkLiAgVGhpcworYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgY2xlYXJpbmcgdGhlICdqdW1wJyBmbGFnIGZyb20gdGhlICdzY3JvbGxvcHQnCitvcHRpb24uCisKKwkJCQkJCQkqc3luY2JpbmQqICo6c3luY2JpbmQqCis6c3luY2JpbmQJCUZvcmNlIGFsbCAnc2Nyb2xsYmluZCcgd2luZG93cyB0byBoYXZlIHRoZSBzYW1lCisJCQlyZWxhdGl2ZSBvZmZzZXQuICBJLmUuLCB3aGVuIGFueSBvZiB0aGUgJ3Njcm9sbGJpbmQnCisJCQl3aW5kb3dzIGlzIHNjcm9sbGVkIHRvIHRoZSB0b3Agb2YgaXRzIGJ1ZmZlciwgYWxsIG9mCisJCQl0aGUgJ3Njcm9sbGJpbmQnIHdpbmRvd3Mgd2lsbCBhbHNvIGJlIGF0IHRoZSB0b3Agb2YKKwkJCXRoZWlyIGJ1ZmZlcnMuCisKKwkJCQkJCQkqc2Nyb2xsYmluZC1xdWlja2FkaioKK1RoZSAnc2Nyb2xsYmluZCcgZmxhZyBpcyBtZWFuaW5nZnVsIHdoZW4gdXNpbmcga2V5Ym9hcmQgY29tbWFuZHMgdG8gdmVydGljYWxseQorc2Nyb2xsIGEgd2luZG93LCBhbmQgYWxzbyBtZWFuaW5nZnVsIHdoZW4gdXNpbmcgdGhlIHZlcnRpY2FsIHNjcm9sbGJhciBvZiB0aGUKK3dpbmRvdyB3aGljaCBoYXMgdGhlIGN1cnNvciBmb2N1cy4gIEhvd2V2ZXIsIHdoZW4gdXNpbmcgdGhlIHZlcnRpY2FsIHNjcm9sbGJhcgorb2YgYSB3aW5kb3cgd2hpY2ggZG9lc24ndCBoYXZlIHRoZSBjdXJzb3IgZm9jdXMsICdzY3JvbGxiaW5kJyBpcyBpZ25vcmVkLgorVGhpcyBhbGxvd3MgcXVpY2sgYWRqdXN0bWVudCBvZiB0aGUgcmVsYXRpdmUgb2Zmc2V0IG9mICdzY3JvbGxiaW5kJyB3aW5kb3dzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFNjcm9sbGluZyB3aXRoIGEgbW91c2Ugd2hlZWwJCQkJKnNjcm9sbC1tb3VzZS13aGVlbCoKKworV2hlbiB5b3VyIG1vdXNlIGhhcyBhIHNjcm9sbCB3aGVlbCwgaXQgc2hvdWxkIHdvcmsgd2l0aCBWaW0gaW4gdGhlIEdVSS4gIEhvdworaXQgd29ya3MgZGVwZW5kcyBvbiB5b3VyIHN5c3RlbS4gIEl0IG1pZ2h0IGFsc28gd29yayBpbiBhbiB4dGVybQorfHh0ZXJtLW1vdXNlLXdoZWVsfC4KKworRm9yIHRoZSBXaW4zMiBHVUkgdGhlIHNjcm9sbCBhY3Rpb24gaXMgaGFyZCBjb2RlZC4gIEl0IHdvcmtzIGp1c3QgbGlrZQorZHJhZ2dpbmcgdGhlIHNjcm9sbGJhciBvZiB0aGUgY3VycmVudCB3aW5kb3cuICBIb3cgbWFueSBsaW5lcyBhcmUgc2Nyb2xsZWQKK2RlcGVuZHMgb24geW91ciBtb3VzZSBkcml2ZXIuICBJZiB0aGUgc2Nyb2xsIGFjdGlvbiBjYXVzZXMgaW5wdXQgZm9jdXMKK3Byb2JsZW1zLCBzZWUgfGludGVsbGltb3VzZS13aGVlbC1wcm9ibGVtc3wuCisKK0ZvciB0aGUgWDExIEdVSXMgKE1vdGlmLCBBdGhlbmEgYW5kIEdUSykgc2Nyb2xsaW5nIHRoZSB3aGVlbCBnZW5lcmF0ZXMga2V5CitwcmVzc2VzIDxNb3VzZURvd24+IGFuZCA8TW91c2VVcD4uICBUaGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZXNlIGtleXMgYXJlOgorICAgIDxNb3VzZURvd24+CQlzY3JvbGwgdGhyZWUgbGluZXMgZG93bi4JKjxNb3VzZURvd24+KgorICAgIDxTLU1vdXNlRG93bj4Jc2Nyb2xsIGEgZnVsbCBwYWdlIGRvd24uCSo8Uy1Nb3VzZURvd24+KgorICAgIDxDLU1vdXNlRG93bj4Jc2Nyb2xsIGEgZnVsbCBwYWdlIGRvd24uCSo8Qy1Nb3VzZURvd24+KgorICAgIDxNb3VzZVVwPgkJc2Nyb2xsIHRocmVlIGxpbmVzIHVwLgkJKjxNb3VzZVVwPioKKyAgICA8Uy1Nb3VzZVVwPgkJc2Nyb2xsIGEgZnVsbCBwYWdlIHVwLgkJKjxTLU1vdXNlVXA+KgorICAgIDxDLU1vdXNlVXA+CQlzY3JvbGwgYSBmdWxsIHBhZ2UgdXAuCQkqPEMtTW91c2VVcD4qCitUaGlzIHNob3VsZCB3b3JrIGluIGFsbCBtb2RlcywgZXhjZXB0IHdoZW4gZWRpdGluZyB0aGUgY29tbWFuZCBsaW5lLgorCitOb3RlIHRoYXQgPE1vdXNlRG93bj4gaXMgdXNlZCBmb3Igc2Nyb2xsaW5nIHRoZSB0ZXh0IGRvd24sIHRoaXMgaGFwcGVucyB3aGVuCit5b3UgdHVybiB0aGUgbW91c2Ugd2hlZWwgdXAhCisKK1lvdSBjYW4gbW9kaWZ5IHRoaXMgYmVoYXZpb3IgYnkgbWFwcGluZyB0aGUga2V5cy4gIEZvciBleGFtcGxlLCB0byBtYWtlIHRoZQorc2Nyb2xsIHdoZWVsIG1vdmUgb25lIGxpbmUgb3IgaGFsZiBhIHBhZ2UgaW4gTm9ybWFsIG1vZGU6ID4KKyAgIDptYXAgPE1vdXNlRG93bj4gPEMtWT4KKyAgIDptYXAgPFMtTW91c2VEb3duPiA8Qy1VPgorICAgOm1hcCA8TW91c2VVcD4gPEMtRT4KKyAgIDptYXAgPFMtTW91c2VVcD4gPEMtRD4KK1lvdSBjYW4gYWxzbyB1c2UgQWx0IGFuZCBDdHJsIG1vZGlmaWVycy4KKworVGhpcyBvbmx5IHdvcmtzIHdoZW4gVmltIGdldHMgdGhlIHNjcm9sbCB3aGVlbCBldmVudHMsIG9mIGNvdXJzZS4gIFlvdSBjYW4KK2NoZWNrIGlmIHRoaXMgd29ya3Mgd2l0aCB0aGUgInhldiIgcHJvZ3JhbS4KKworV2hlbiB1c2luZyBYZnJlZTg2LCB0aGUgL2V0Yy9YRjg2Q29uZmlnIGZpbGUgc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgZW50cnkgZm9yCit5b3VyIG1vdXNlLiAgRm9yIEZyZWVCU0QsIHRoaXMgZW50cnkgd29ya3MgZm9yIGEgTG9naXRlY2ggc2Nyb2xsbW91c2U6ID4KKyAgICBQcm90b2NvbCAgICAgIk1vdXNlTWFuIgorICAgIERldmljZSAgICAgICAiL2Rldi9wc20wIgorICAgIFpBeGlzTWFwcGluZyA0IDUKK1NlZSB0aGUgWGZyZWU4NiBkb2N1bWVudGF0aW9uIGZvciBpbmZvcm1hdGlvbi4KKworCQkJCQkJCSp4dGVybS1tb3VzZS13aGVlbCoKK1RvIHVzZSB0aGUgbW91c2Ugd2hlZWwgaW4gYSBuZXcgeHRlcm0geW91IG9ubHkgaGF2ZSB0byBtYWtlIHRoZSBzY3JvbGwgd2hlZWwKK3dvcmsgaW4geW91ciBYc2VydmVyLCBhcyBtZW50aW9uZWQgYWJvdmUuCisKK1RvIHVzZSB0aGUgbW91c2Ugd2hlZWwgaW4gYW4gb2xkZXIgeHRlcm0geW91IG11c3QgZG8gdGhpczoKKzEuIE1ha2UgaXQgd29yayBpbiB5b3VyIFhzZXJ2ZXIsIGFzIG1lbnRpb25lZCBhYm92ZS4KKzIuIEFkZCB0cmFuc2xhdGlvbnMgZm9yIHRoZSB4dGVybSwgc28gdGhhdCB0aGUgeHRlcm0gd2lsbCBwYXNzIGEgc2Nyb2xsIGV2ZW50CisgICB0byBWaW0gYXMgYW4gZXNjYXBlIHNlcXVlbmNlLgorMy4gQWRkIG1hcHBpbmdzIGluIFZpbSwgdG8gaW50ZXJwcmV0IHRoZSBlc2NhcGUgc2VxdWVuY2VzIGFzIDxNb3VzZVVwPiBvcgorICAgPE1vdXNlRG93bj4ga2V5cy4KKworWW91IGNhbiBkbyB0aGUgdHJhbnNsYXRpb25zIGJ5IGFkZGluZyB0aGlzIHRvIHlvdXIgfi5YZGVmYXVsdHMgZmlsZSAob3Igb3RoZXIKK2ZpbGUgd2hlcmUgeW91ciBYIHJlc291cmNlcyBhcmUga2VwdCk6ID4KKworICBYVGVybSpWVDEwMC5UcmFuc2xhdGlvbnM6CQkjb3ZlcnJpZGUgXG5cCisJCXM8QnRuNERvd24+OiBzdHJpbmcoIjB4OWIiKSBzdHJpbmcoIls2NH4iKSBcblwKKwkJczxCdG41RG93bj46IHN0cmluZygiMHg5YiIpIHN0cmluZygiWzY1fiIpIFxuXAorCQk8QnRuNERvd24+OiBzdHJpbmcoIjB4OWIiKSBzdHJpbmcoIls2Mn4iKSBcblwKKwkJPEJ0bjVEb3duPjogc3RyaW5nKCIweDliIikgc3RyaW5nKCJbNjN+IikgXG5cCisJCTxCdG40VXA+OiBcblwKKwkJPEJ0bjVVcD46CisKK0FkZCB0aGVzZSBtYXBwaW5ncyB0byB5b3VyIHZpbXJjIGZpbGU6ID4KKwk6bWFwIDxNLUVzYz5bNjJ+IDxNb3VzZURvd24+CisJOm1hcCEgPE0tRXNjPls2Mn4gPE1vdXNlRG93bj4KKwk6bWFwIDxNLUVzYz5bNjN+IDxNb3VzZVVwPgorCTptYXAhIDxNLUVzYz5bNjN+IDxNb3VzZVVwPgorCTptYXAgPE0tRXNjPls2NH4gPFMtTW91c2VEb3duPgorCTptYXAhIDxNLUVzYz5bNjR+IDxTLU1vdXNlRG93bj4KKwk6bWFwIDxNLUVzYz5bNjV+IDxTLU1vdXNlVXA+CisJOm1hcCEgPE0tRXNjPls2NX4gPFMtTW91c2VVcD4KKzwKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9zaWduLnR4dCBiL3J1bnRpbWUvZG9jL3NpZ24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NWI0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9zaWduLnR4dApAQCAtMCwwICsxLDE5MSBAQAorKnNpZ24udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAyMgorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBHb3Jkb24gUHJpZXVyCisJCQkJCSAgYW5kIEJyYW0gTW9vbGVuYWFyCisKKworU2lnbiBTdXBwb3J0IEZlYXR1cmVzCQkJCSpzaWduLXN1cHBvcnQqCisKKzEuIEludHJvZHVjdGlvbgkJCQl8c2lnbi1pbnRyb3wKKzIuIENvbW1hbmRzCQkJCXxzaWduLWNvbW1hbmRzfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXN9Cit7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3NpZ25zfCBmZWF0dXJlfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEludHJvZHVjdGlvbgkJCQkJKnNpZ24taW50cm8qICpzaWducyoKKworV2hlbiBhIGRlYnVnZ2VyIG9yIG90aGVyIElERSB0b29sIGlzIGRyaXZpbmcgYW4gZWRpdG9yIGl0IG5lZWRzIHRvIGJlIGFibGUKK3RvIGdpdmUgc3BlY2lmaWMgaGlnaGxpZ2h0cyB3aGljaCBxdWlja2x5IHRlbGwgdGhlIHVzZXIgdXNlZnVsIGluZm9ybWF0aW9uCithYm91dCB0aGUgZmlsZS4gT25lIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSBhIGRlYnVnZ2VyIHdoaWNoIGhhZCBhbiBpY29uCitpbiB0aGUgbGVmdC1oYW5kIGNvbHVtbiBkZW5vdGluZyBhIGJyZWFrcG9pbnQuIEFub3RoZXIgZXhhbXBsZSBtaWdodCBiZSBhbgorYXJyb3cgcmVwcmVzZW50aW5nIHRoZSBQcm9ncmFtIENvdW50ZXIgKFBDKS4gVGhlIHNpZ24gZmVhdHVyZXMgYWxsb3cgYm90aAorcGxhY2VtZW50IG9mIGEgc2lnbiwgb3IgaWNvbiwgaW4gdGhlIGxlZnQtaGFuZCBzaWRlIG9mIHRoZSB3aW5kb3cgYW5kCitkZWZpbml0aW9uIG9mIGEgaGlnaGxpZ2h0IHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGF0IGxpbmUuIERpc3BsYXlpbmcgdGhlCitzaWduIGFzIGFuIGltYWdlIGlzIG1vc3QgbGlrZWx5IG9ubHkgZmVhc2libGUgaW4gZ3ZpbSAoYWx0aG91Z2ggU3VuCitNaWNyb3N5c3RlbSdzIGR0dGVybSBkb2VzIHN1cHBvcnQgdGhpcyBpdHMgdGhlIG9ubHkgdGVybWluYWwgZW11bGF0b3IgSSBrbm93CitvZiB3aGljaCBkb2VzKS4gIEEgdGV4dCBzaWduIGFuZCB0aGUgaGlnaGxpZ2h0IHNob3VsZCBiZSBmZWFzaWJsZSBpbiBhbnkgY29sb3IKK3Rlcm1pbmFsIGVtdWxhdG9yLgorCitTaWducyBhbmQgaGlnaGxpZ2h0cyBhcmUgbm90IHVzZWZ1bCBqdXN0IGZvciBkZWJ1Z2dlcnMuIFN1bidzIFZpc3VhbAorV29ya1Nob3AgdXNlcyBzaWducyBhbmQgaGlnaGxpZ2h0cyB0byBtYXJrIGJ1aWxkIGVycm9ycyBhbmQgU291cmNlQnJvd3NlcgoraGl0cy4gQWRkaXRpb25hbGx5LCB0aGUgZGVidWdnZXIgc3VwcG9ydHMgOCB0byAxMCBkaWZmZXJlbnQgc2lnbnMgYW5kCitoaWdobGlnaHQgY29sb3JzLiB8d29ya3Nob3B8ICBTYW1lIGZvciBOZXRiZWFucyB8bmV0YmVhbnN8LgorCitUaGVyZSBhcmUgdHdvIHN0ZXBzIGluIHVzaW5nIHNpZ25zOgorCisxLiBEZWZpbmUgdGhlIHNpZ24uICBUaGlzIHNwZWNpZmllcyB0aGUgaW1hZ2UsIHRleHQgYW5kIGhpZ2hsaWdodGluZy4gIEZvcgorICAgZXhhbXBsZSwgeW91IGNhbiBkZWZpbmUgYSAiYnJlYWsiIHNpZ24gd2l0aCBhbiBpbWFnZSBvZiBhIHN0b3Agcm9hZHNpZ24gYW5kCisgICB0ZXh0ICIhISIuCisKKzIuIFBsYWNlIHRoZSBzaWduLiAgVGhpcyBzcGVjaWZpZXMgdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBzaWduIGlzCisgICBkaXNwbGF5ZWQuICBBIGRlZmluZWQgc2lnbiBjYW4gYmUgcGxhY2VkIHNldmVyYWwgdGltZXMgaW4gZGlmZmVyZW50IGxpbmVzCisgICBhbmQgZmlsZXMuCisKK1doZW4gc2lnbnMgYXJlIGRlZmluZWQgZm9yIGEgZmlsZSwgVmltIHdpbGwgYXV0b21hdGljYWxseSBhZGQgYSBjb2x1bW4gb2YgdHdvCitjaGFyYWN0ZXJzIHRvIGRpc3BsYXkgdGhlbSBpbi4gIFdoZW4gdGhlIGxhc3Qgc2lnbiBpcyB1bnBsYWNlZCB0aGUgY29sdW1uCitkaXNhcHBlYXJzIGFnYWluLiAgVGhlIGNvbG9yIG9mIHRoZSBjb2x1bW4gaXMgc2V0IHdpdGggdGhlIFNpZ25Db2x1bW4gZ3JvdXAKK3xobC1TaWduQ29sdW1ufC4gIEV4YW1wbGUgdG8gc2V0IHRoZSBjb2xvcjogPgorCisJOmhpZ2hsaWdodCBTaWduQ29sdW1uIGd1aWJnPWRhcmtncmV5CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gQ29tbWFuZHMJCQkJCSpzaWduLWNvbW1hbmRzKiAqOnNpZyogKjpzaWduKgorCitIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBwbGFjZXMgYSBzaWduIHBpZXQsIGRpc3BsYXllZCB3aXRoIHRoZSB0ZXh0ICI+PiIsIGluCitsaW5lIDIzIG9mIHRoZSBjdXJyZW50IGZpbGU6ID4KKwk6c2lnbiBkZWZpbmUgcGlldCB0ZXh0PT4+IHRleHRobD1TZWFyY2gKKwk6ZXhlICI6c2lnbiBwbGFjZSAyIGxpbmU9MjMgbmFtZT1waWV0IGZpbGU9IiAuIGV4cGFuZCgiJTpwIikKKworQW5kIGhlcmUgaXMgdGhlIGNvbW1hbmQgdG8gZGVsZXRlIGl0IGFnYWluOiA+CisJOnNpZ24gdW5wbGFjZSAyCisKK05vdGUgdGhhdCB0aGUgIjpzaWduIiBjb21tYW5kIGNhbm5vdCBiZSBmb2xsb3dlZCBieSBhbm90aGVyIGNvbW1hbmQgb3IgYQorY29tbWVudC4gIElmIHlvdSBkbyBuZWVkIHRoYXQsIHVzZSB0aGUgfDpleGVjdXRlfCBjb21tYW5kLgorCisKK0RFRklOSU5HIEEgU0lHTi4JCQkqOnNpZ24tZGVmaW5lKiAqRTI1NSogKkUxNjAqICpFNjEyKgorCis6c2lnbiBkZWZpbmUge25hbWV9IHthcmd1bWVudH0uLi4KKwkJRGVmaW5lIGEgbmV3IHNpZ24gb3Igc2V0IGF0dHJpYnV0ZXMgZm9yIGFuIGV4aXN0aW5nIHNpZ24uCisJCVRoZSB7bmFtZX0gY2FuIGVpdGhlciBiZSBhIG51bWJlciAoYWxsIGRpZ2l0cykgb3IgYSBuYW1lCisJCXN0YXJ0aW5nIHdpdGggYSBub24tZGlnaXQuCisJCUFib3V0IDEyMCBkaWZmZXJlbnQgc2lnbnMgY2FuIGJlIGRlZmluZWQuCisKKwkJQWNjZXB0ZWQgYXJndW1lbnRzOgorCisJaWNvbj17cGl4bWFwfQorCQlEZWZpbmUgdGhlIGZpbGUgbmFtZSB3aGVyZSB0aGUgYml0bWFwIGNhbiBiZSBmb3VuZC4gIFNob3VsZCBiZQorCQlhIGZ1bGwgcGF0aC4gIFRoZSBiaXRtYXAgc2hvdWxkIGZpdCBpbiB0aGUgcGxhY2Ugb2YgdHdvCisJCWNoYXJhY3RlcnMuICBUaGlzIGlzIG5vdCBjaGVja2VkLiAgSWYgdGhlIGJpdG1hcCBpcyB0b28gYmlnIGl0CisJCXdpbGwgY2F1c2UgcmVkcmF3IHByb2JsZW1zLiAgT25seSBHVEsgMiBjYW4gc2NhbGUgdGhlIGJpdG1hcAorCQl0byBmaXQgdGhlIHNwYWNlIGF2YWlsYWJsZS4KKwkJCXRvb2xraXQJCXN1cHBvcnRzIH4KKwkJCUdUSyAxCQlwaXhtYXAgKC54cG0pCisJCQlHVEsgMgkJbWFueQorCQkJTW90aWYJCXBpeG1hcCAoLnhwbSkKKworCWxpbmVobD17Z3JvdXB9CisJCUhpZ2hsaWdodGluZyBncm91cCB1c2VkIGZvciB0aGUgd2hvbGUgbGluZSB0aGUgc2lnbiBpcyBwbGFjZWQKKwkJaW4uICBNb3N0IHVzZWZ1bCBpcyBkZWZpbmluZyBhIGJhY2tncm91bmQgY29sb3IuCisKKwl0ZXh0PXt0ZXh0fQkJCQkJCSpFMjM5KgorCQlEZWZpbmUgdGhlIHRleHQgdGhhdCBpcyBkaXNwbGF5ZWQgd2hlbiB0aGVyZSBpcyBubyBpY29uIG9yIHRoZQorCQlHVUkgaXMgbm90IGJlaW5nIHVzZWQuICBPbmx5IHByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkCisJCWFuZCB0aGV5IG11c3Qgb2NjdXB5IG9uZSBvciB0d28gZGlzcGxheSBjZWxscy4KKworCXRleHRobD17Z3JvdXB9CisJCUhpZ2hsaWdodGluZyBncm91cCB1c2VkIGZvciB0aGUgdGV4dCBpdGVtLgorCisKK0RFTEVUSU5HIEEgU0lHTgkJCQkJCSo6c2lnbi11bmRlZmluZSogKkUxNTUqCisKKzpzaWduIHVuZGVmaW5lIHtuYW1lfQorCQlEZWxldGVzIGEgcHJldmlvdXNseSBkZWZpbmVkIHNpZ24uICBJZiBzaWducyB3aXRoIHRoaXMge25hbWV9CisJCWFyZSBzdGlsbCBwbGFjZWQgdGhpcyB3aWxsIGNhdXNlIHRyb3VibGUuCisKKworTElTVElORyBTSUdOUwkJCQkJCSo6c2lnbi1saXN0KiAqRTE1NioKKworOnNpZ24gbGlzdAlMaXN0cyBhbGwgZGVmaW5lZCBzaWducyBhbmQgdGhlaXIgYXR0cmlidXRlcy4KKworOnNpZ24gbGlzdCB7bmFtZX0KKwkJTGlzdHMgb25lIGRlZmluZWQgc2lnbiBhbmQgaXRzIGF0dHJpYnV0ZXMuCisKKworUExBQ0lORyBTSUdOUwkJCQkJCSo6c2lnbi1wbGFjZSogKkUxNTgqCisKKzpzaWduIHBsYWNlIHtpZH0gbGluZT17bG51bX0gbmFtZT17bmFtZX0gZmlsZT17Zm5hbWV9CisJCVBsYWNlIHNpZ24gZGVmaW5lZCBhcyB7bmFtZX0gYXQgbGluZSB7bG51bX0gaW4gZmlsZSB7Zm5hbWV9LgorCQkJCQkJCSo6c2lnbi1mbmFtZSoKKwkJVGhlIGZpbGUge2ZuYW1lfSBtdXN0IGFscmVhZHkgYmUgbG9hZGVkIGluIGEgYnVmZmVyLiAgVGhlCisJCWV4YWN0IGZpbGUgbmFtZSBtdXN0IGJlIHVzZWQsIHdpbGRjYXJkcywgJEVOViBhbmQgfiBhcmUgbm90CisJCWV4cGFuZGVkLCB3aGl0ZSBzcGFjZSBtdXN0IG5vdCBiZSBlc2NhcGVkLiAgVHJhaWxpbmcgd2hpdGUKKwkJc3BhY2UgaXMgaWdub3JlZC4KKworCQlUaGUgc2lnbiBpcyByZW1lbWJlcmVkIHVuZGVyIHtpZH0sIHRoaXMgY2FuIGJlIHVzZWQgZm9yCisJCWZ1cnRoZXIgbWFuaXB1bGF0aW9uLiAge2lkfSBtdXN0IGJlIGEgbnVtYmVyLgorCQlJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIG1ha2Ugc3VyZSB0aGUge2lkfSBpcyB1c2VkIG9ubHkgb25jZSBpbgorCQllYWNoIGZpbGUgKGlmIGl0J3MgdXNlZCBzZXZlcmFsIHRpbWVzIHVucGxhY2luZyB3aWxsIGFsc28gaGF2ZQorCQl0byBiZSBkb25lIHNldmVyYWwgdGltZXMgYW5kIG1ha2luZyBjaGFuZ2VzIG1heSBub3Qgd29yayBhcworCQlleHBlY3RlZCkuCisKKzpzaWduIHBsYWNlIHtpZH0gbGluZT17bG51bX0gbmFtZT17bmFtZX0gYnVmZmVyPXtucn0KKwkJU2FtZSwgYnV0IHVzZSBidWZmZXIge25yfS4KKworOnNpZ24gcGxhY2Uge2lkfSBuYW1lPXtuYW1lfSBmaWxlPXtmbmFtZX0KKwkJQ2hhbmdlIHRoZSBwbGFjZWQgc2lnbiB7aWR9IGluIGZpbGUge2ZuYW1lfSB0byB1c2UgdGhlIGRlZmluZWQKKwkJc2lnbiB7bmFtZX0uICBTZWUgcmVtYXJrIGFib3ZlIGFib3V0IHtmbmFtZX0gfDpzaWduLWZuYW1lfC4KKwkJVGhpcyBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRpc3BsYXllZCBzaWduIHdpdGhvdXQgbW92aW5nCisJCWl0IChlLmcuLCB3aGVuIHRoZSBkZWJ1Z2dlciBoYXMgc3RvcHBlZCBhdCBhIGJyZWFrcG9pbnQpLgorCis6c2lnbiBwbGFjZSB7aWR9IG5hbWU9e25hbWV9IGJ1ZmZlcj17bnJ9CisJCVNhbWUsIGJ1dCB1c2UgYnVmZmVyIHtucn0uCisKKworUkVNT1ZJTkcgU0lHTlMJCQkJCQkqOnNpZ24tdW5wbGFjZSogKkUxNTkqCisKKzpzaWduIHVucGxhY2Uge2lkfSBmaWxlPXtmbmFtZX0KKwkJUmVtb3ZlIHRoZSBwcmV2aW91c2x5IHBsYWNlZCBzaWduIHtpZH0gZnJvbSBmaWxlIHtmbmFtZX0uCisJCVNlZSByZW1hcmsgYWJvdmUgYWJvdXQge2ZuYW1lfSB8OnNpZ24tZm5hbWV8LgorCis6c2lnbiB1bnBsYWNlIHtpZH0gYnVmZmVyPXtucn0KKwkJU2FtZSwgYnV0IHVzZSBidWZmZXIge25yfS4KKworOnNpZ24gdW5wbGFjZSB7aWR9CisJCVJlbW92ZSB0aGUgcHJldmlvdXNseSBwbGFjZWQgc2lnbiB7aWR9IGZyb20gYWxsIGZpbGVzIGl0CisJCWFwcGVhcnMgaW4uCisKKzpzaWduIHVucGxhY2UgKgorCQlSZW1vdmUgYWxsIHBsYWNlZCBzaWducy4KKworOnNpZ24gdW5wbGFjZQorCQlSZW1vdmUgdGhlIHBsYWNlZCBzaWduIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24uCisKKworTElTVElORyBQTEFDRUQgU0lHTlMKKworOnNpZ24gcGxhY2UgZmlsZT17Zm5hbWV9CisJCUxpc3Qgc2lnbnMgcGxhY2VkIGluIGZpbGUge2ZuYW1lfS4KKwkJU2VlIHJlbWFyayBhYm92ZSBhYm91dCB7Zm5hbWV9IHw6c2lnbi1mbmFtZXwuCisKKzpzaWduIHBsYWNlIGJ1ZmZlcj17bnJ9CisJCUxpc3Qgc2lnbnMgcGxhY2VkIGluIGJ1ZmZlciB7bnJ9LgorCis6c2lnbiBwbGFjZQlMaXN0IHBsYWNlZCBzaWducyBpbiBhbGwgZmlsZXMuCisKKworSlVNUElORyBUTyBBIFNJR04JCQkJCSo6c2lnbi1qdW1wKiAqRTE1NyoKKworOnNpZ24ganVtcCB7aWR9IGZpbGU9e2ZuYW1lfQorCQlPcGVuIHRoZSBmaWxlIHtmbmFtZX0gb3IganVtcCB0byB0aGUgd2luZG93IHRoYXQgY29udGFpbnMKKwkJe2ZuYW1lfSBhbmQgcG9zaXRpb24gdGhlIGN1cnNvciBhdCBzaWduIHtpZH0uCisJCVNlZSByZW1hcmsgYWJvdmUgYWJvdXQge2ZuYW1lfSB8OnNpZ24tZm5hbWV8LgorCQlJZiB0aGUgZmlsZSBpc24ndCBkaXNwbGF5ZWQgaW4gd2luZG93IGFuZCB0aGUgY3VycmVudCBmaWxlIGNhbgorCQlub3QgYmUgfGFiYW5kb258ZWQgdGhpcyBmYWlscy4KKworOnNpZ24ganVtcCB7aWR9IGJ1ZmZlcj17bnJ9CisJCVNhbWUsIGJ1dCB1c2UgYnVmZmVyIHtucn0uCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9zcG9uc29yLnR4dCBiL3J1bnRpbWUvZG9jL3Nwb25zb3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YWJjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9zcG9uc29yLnR4dApAQCAtMCwwICsxLDIyOSBAQAorKnNwb25zb3IudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAyMworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKKworU1BPTlNPUiBWSU0gREVWRUxPUE1FTlQJCQkJCQkqc3BvbnNvcioKKworRml4aW5nIGJ1Z3MgYW5kIGFkZGluZyBuZXcgZmVhdHVyZXMgdGFrZXMgYSBsb3Qgb2YgZWZmb3J0LiAgRm9yIGEgZmV3IHllYXJzCitCcmFtIGhhcyBhdHRlbXB0ZWQgdG8gZG8gdGhpcyBuZXh0IHRvIGEgZnVsbC10aW1lIGpvYi4gIER1cmluZyB0aGF0IHRpbWUgdGhlCit0b2RvIGxpc3Qga2VwdCBnZXR0aW5nIGxvbmdlciBhbmQgbG9uZ2VyLgorCitJbiBvcmRlciBmb3IgQnJhbSB0byBzdXBwb3J0IFZpbSBwcm9wZXJseSBoZSBuZWVkcyB5b3VyIHN1cHBvcnQuICBUaHJvdWdoIHlvdXIKK2RvbmF0aW9ucyBCcmFtIHdpbGwgYmUgYWJsZSB0byBoYXZlIGEgcGFydC10aW1lIGpvYiBhbmQgc3BlbmQgbW9yZSB0aW1lIG9uCitmaXhpbmcgYnVncyBhbmQgYWRkaW5nIG5ldyBmZWF0dXJlcy4KKworRm9yIHRoZSBtb3N0IHJlY2VudCBpbmZvcm1hdGlvbiBhYm91dCBzcG9uc29yaW5nIGxvb2sgb24gdGhlIFZpbSB3ZWIgc2l0ZToKKworCWh0dHA6Ly93d3cudmltLm9yZy9zcG9uc29yLworCitNb3JlIGV4cGxhbmF0aW9ucyBjYW4gYmUgZm91bmQgaW4gdGhlIHxzcG9uc29yLWZhcXwuCisKKworUkVHSVNURVJFRCBWSU0gVVNFUgkJCQkJCSpyZWdpc3RlcioKKworWW91IGNhbiBiZWNvbWUgYSByZWdpc3RlcmVkIFZpbSB1c2VyIGJ5IHNlbmRpbmcgYXQgbGVhc3QgMTAgZXVyby4gIFRoaXMgd29ya3MKK3NpbWlsYXIgdG8gc3BvbnNvcmluZyBWaW0sIHNlZSB8c3BvbnNvcnwgYWJvdmUuICBSZWdpc3RyYXRpb24gd2FzIG1hZGUKK3Bvc3NpYmxlIGZvciB0aGUgc2l0dWF0aW9uIHdoZXJlIHlvdXIgYm9zcyBvciBib29ra2VlcGVyIG1heSBiZSB3aWxsaW5nIHRvCityZWdpc3RlciBzb2Z0d2FyZSwgYnV0IGRvZXMgbm90IGxpa2UgdGhlIHRlcm1zICJzcG9uc29yaW5nIiBhbmQgImRvbmF0aW9uIi4KKworTW9yZSBleHBsYW5hdGlvbnMgY2FuIGJlIGZvdW5kIGluIHRoZSB8cmVnaXN0ZXItZmFxfC4KKworCitWT1RFIEZPUiBGRUFUVVJFUwkJCQkJKnZvdGUtZm9yLWZlYXR1cmVzKgorCitUbyBnaXZlIHJlZ2lzdGVyZWQgVmltIHVzZXJzIGFuZCBzcG9uc29ycyBhbiBhZHZhbnRhZ2Ugb3ZlciBsdXJrZXJzIHRoZXkgY2FuCit2b3RlIGZvciB0aGUgaXRlbXMgQnJhbSBzaG91bGQgd29yayBvbi4gIEhvdyBkb2VzIHRoaXMgdm90aW5nIHdvcms/CisKKzEuICBZb3Ugc2VuZCBhdCBsZWFzdCAxMCBldXJvLiAgU2VlIGJlbG93IGZvciB3YXlzIHRvIHRyYW5zZmVyIG1vbmV5CisgICAgfHNlbmQtbW9uZXl8LgorCisyLiAgWW91IHdpbGwgYmUgZS1tYWlsZWQgYSByZWdpc3RyYXRpb24ga2V5LiAgRW50ZXIgdGhpcyBrZXkgb24geW91ciBhY2NvdW50CisgICAgcGFnZSBvbiB0aGUgVmltIHdlYnNpdGUuICBZb3UgY2FuIGVhc2lseSBjcmVhdGUgYW4gYWNjb3VudCBpZiB5b3UgZG9uJ3QKKyAgICBoYXZlIG9uZSB5ZXQuCisKKzMuICBZb3UgY2FuIGVudGVyIHlvdXIgdm90ZXMgb24gdGhlIHZvdGluZyBwYWdlLiAgVGhlcmUgaXMgYSBsaW5rIHRvIHRoYXQgcGFnZQorICAgIG9uIHlvdXIgYWNjb3VudCBwYWdlIGFmdGVyIGVudGVyaW5nIGEgcmVnaXN0cmF0aW9uIGtleS4gIFlvdXIgdm90ZXMgd2lsbAorICAgIGJlIGNvdW50ZWQgZm9yIHR3byB5ZWFycy4KKworNC4gIFRoZSB2b3RpbmcgcmVzdWx0cyBhcHBlYXIgb24gdGhlIHJlc3VsdHMgcGFnZSwgd2hpY2ggaXMgdmlzaWJsZSBmb3IKKyAgICBldmVyeWJvZHk6ICBodHRwOi8vd3d3LnZpbS5vcmcvc3BvbnNvci92b3RlX3Jlc3VsdHMucGhwCisKK0FkZGl0aW9uYWxseSwgb25jZSB5b3UgaGF2ZSBzZW5kIDEwMCBldXJvIG9yIG1vcmUgaW4gdG90YWwsIHlvdXIgbmFtZSBhcHBlYXJzCitpbiB0aGUgIlZpbSBoYWxsIG9mIGhvbm91ciI6ICAgaHR0cDovL3d3dy52aW0ub3JnL3Nwb25zb3IvaGFsbF9vZl9ob25vdXIucGhwCitCdXQgb25seSBpZiB5b3UgZW5hYmxlIHRoaXMgb24geW91ciBhY2NvdW50IHBhZ2UuCisKKworSE9XIFRPIFNFTkQgTU9ORVkJCQkJCQkqc2VuZC1tb25leSoKKworQ3JlZGl0Y2FyZAlUaHJvdWdoIFBheVBhbCwgc2VlIHRoZSBQYXlQYWwgc2l0ZSBmb3IgaW5mb3JtYXRpb246CisJCQlodHRwczovL3d3dy5wYXlwYWwuY29tCisJCVRoZSBlLW1haWwgYWRkcmVzcyBmb3Igc2VuZGluZyBzcG9uc29yc2hpcCBtb25leSBpczoKKwkJCWRvbmF0ZUB2aW0ub3JnCisJCVRoZSBlLW1haWwgYWRkcmVzcyBmb3IgVmltIHJlZ2lzdHJhdGlvbiBpczoKKwkJCXJlZ2lzdGVyQHZpbS5vcmcKKwkJVXNpbmcgRXVybyBpcyBwcmVmZXJyZWQsIG90aGVyIGN1cnJlbmNpZXMgYXJlIGFsc28gYWNjZXB0ZWQuCisJCUluIEV1cm8gY291bnRyaWVzIGEgYmFuayB0cmFuc2ZlciBpcyBwcmVmZXJyZWQsIHRoaXMgaGFzIGxvd2VyCisJCWNvc3RzLgorCitCYW5rIHRyYW5zZmVyCVRyYW5zZmVyIHRvIEJyYW0ncyBhY2NvdW50IGF0IHRoZSBQb3N0YmFuazogMTY0NDUwMy4gIEZvcgorCQlpbnRlcm5hdGlvbmFsIHRyYW5zZmVycyB5b3UgY2FuIHVzZSB0aGVzZSBudW1iZXJzOgorCQkJSUJBTjogICAgICAgTkw3OSBQU1RCIDAwMDEgNjQ0NSAwMworCQkJU1dJRlQvQklDOiAgUFNUQk5MMjEKKwkJVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgYmFuazoKKwkJCUlORyBCYW5rIEFtc3RlcmRhbSwgRm9yZWlnbiBPcGVyYXRpb25zCisJCQlQTyBCb3ggMTgwMAorCQkJMTAwMCBCViBBbXN0ZXJkYW0KKwkJCVRoZSBOZXRoZXJsYW5kcworCQlJbmNsdWRlICJWaW0gc3BvbnNvciIgb3IgIlZpbSByZWdpc3RyYXRpb24iIGluIHRoZSBjb21tZW50IG9mCisJCXlvdXIgbW9uZXkgdHJhbnNmZXIuICBTZW5kIG1lIGFuIGUtbWFpbCB0aGF0IG1lbnRpb25zIHRoZQorCQlhbW91bnQgeW91IHRyYW5zZmVycmVkIGlmIHlvdSB3YW50IHRvIHZvdGUgZm9yIGZlYXR1cmVzIGFuZAorCQlzaG93IG90aGVycyB5b3UgYXJlIGEgcmVnaXN0ZXJlZCBWaW0gdXNlciBvciBzcG9uc29yLgorCitDYXNoCQlTbWFsbCBhbW91bnRzIGNhbiBiZSBzZW5kIHdpdGggb3JkaW5hcnkgbWFpbC4gIFB1dCBzb21ldGhpbmcKKwkJYXJvdW5kIHRoZSBtb25leSwgc28gdGhhdCBpdCdzIG5vdCBub3RpY2FibGUgZnJvbSB0aGUgb3V0c2lkZS4KKwkJTWVudGlvbiB5b3VyIGUtbWFpbCBhZGRyZXNzIGlmIHlvdSB3YW50IHRvIHZvdGUgZm9yIGZlYXR1cmVzCisJCWFuZCBzaG93IG90aGVycyB5b3UgYXJlIGEgcmVnaXN0ZXJlZCBWaW0gdXNlciBvciBzcG9uc29yLgorCitUaGlzIGlzIEJyYW0ncyBhZGRyZXNzOiBCcmFtIE1vb2xlbmFhcgorCQkJQ2xlbWF0aXNzdHJhYXQgMzAKKwkJCTU5MjUgQkUgVmVubG8KKwkJCVRoZSBOZXRoZXJsYW5kcworCisKK0FMVEVSTkFUSVZFCisKK0lmIHlvdSBkb24ndCBjYXJlIGFib3V0IHNwb25zb3JpbmcgVmltIERldmVsb3BtZW50IG9yIGJlY29taW5nIGEgcmVnaXN0ZXJlZAorVmltIHVzZXIsIGJ1dCBkbyBjYXJlIGFib3V0IGhlbHBpbmcgbmVlZHkgY2hpbGRyZW4sIGNvbnNpZGVyIGdpdmluZyB0byB0aGUKK0lDQ0YgSG9sbGFuZCBmb3VuZGF0aW9uLiAgVGhpcyBpcyB0aGUgY2hhcml0eSByZWNvbW1lbmRlZCBieSBWaW0ncyBhdXRob3IuCitUaGUgbW9uZXkgaXMgdXNlZCBmb3IgYSBjaGlsZHJlbiBjZW50cmUgaW4gdGhlIHNvdXRoIG9mIFVnYW5kYSwgd2hlcmUgQUlEUyBoYXMKK2NhdXNlZCBtYW55IHZpY3RpbXMuICBTZWUgfHVnYW5kYXwuCisKKworUVVFU1RJT05TIEFORCBBTlNXRVJTCQkJCSpzcG9uc29yLWZhcSogKnJlZ2lzdGVyLWZhcSoKKworV2h5IHNob3VsZCBJIGdpdmUgbW9uZXk/CisKK0JyYW0gaGFzIHRyaWVkIHRvIHdvcmsgb24gVmltIG5leHQgdG8gYSBmdWxsLXRpbWUgam9iLiAgVGhlIGxpc3Qgb2Yga25vd24gYnVncworYW5kIGlkZWFzIGZvciBuZXcgZmVhdHVyZXMgaGFzIGNvbnN0YW50bHkgYmVlbiBncm93aW5nIGR1cmluZyB0aGlzIHRpbWUuICBCcmFtCitzaW1wbHkgY2FuJ3Qgc3BlbmQgZW5vdWdoIHRpbWUgb24gVmltIGRldmVsb3BtZW50IHdoZW4gaGUgaGFzIGEgZnVsbC10aW1lIGpvYi4KK1lvdXIgY29udHJpYnV0aW9uIHdpbGwgbWFrZSBpdCBwb3NzaWJsZSBmb3IgQnJhbSB0byBoYXZlIGEgcGFydC10aW1lIGpvYiBhbmQKK3NwZW5kIG11Y2ggbW9yZSB0aW1lIG9uIFZpbSBkZXZlbG9wbWVudC4gIEJ1Z3Mgd2lsbCBiZSBmaXhlZCBxdWlja2VyIGFuZCBuZXcKK1ZpbSByZWxlYXNlcyB3aWxsIGJlY29tZSBhdmFpbGFibGUgbW9yZSBvZnRlbi4KKworCitIb3cgbXVjaCBtb25leSBzaG91bGQgSSBzZW5kPworCitUaGF0IGlzIHVwIHRvIHlvdS4gIFRoZSBtb3JlIHlvdSBnaXZlLCB0aGUgbW9yZSB0aW1lIEJyYW0gY2FuIHdvcmsgb24gVmltLiAgQW4KK2luZGljYXRpb24gZm9yIGluZGl2aWR1YWxzIHRoYXQgdXNlIFZpbSBhdCBob21lOiAxMCBFdXJvIHBlciB5ZWFyLiAgRm9yCitwcm9mZXNzaW9uYWwgdXNlOiAzMCBFdXJvIHBlciB5ZWFyIHBlciBwZXJzb24uICBTZW5kIGF0IGxlYXN0IDEwIGV1cm8gdG8gYmUKK2FibGUgdG8gdm90ZSBmb3IgZmVhdHVyZXMuCisKKworV2hhdCBkbyBJIGdldCBpbiByZXR1cm4/CisKK0VhY2ggcmVnaXN0ZXJlZCBWaW0gdXNlciBhbmQgc3BvbnNvciB3aG8gZG9uYXRlcyBhdCBsZWFzdCAxMCBldXJvIHdpbGwgYmUgYWJsZQordG8gdm90ZSBmb3IgbmV3IGZlYXR1cmVzLiAgVGhlc2Ugdm90ZXMgd2lsbCBnaXZlIHByaW9yaXR5IHRvIHRoZSB3b3JrIG9uIFZpbS4KK1RoZSB2b3RlcyBhcmUgdmFsaWQgZm9yIHR3byB5ZWFycy4gIFRoZSBtb3JlIG1vbmV5IHlvdSBzZW5kIHRoZSBtb3JlIHlvdXIKK3ZvdGVzIGNvdW50IHx2b3Rlcy1jb3VudGVkfC4KKworSWYgeW91IHNlbmQgMTAwIEV1cm8gb3IgbW9yZSBpbiB0b3RhbCB5b3Ugd2lsbCBiZSBtZW50aW9uZWQgb24gdGhlICJWaW0gaGFsbAorb2YgaG9ub3VyIiBwYWdlIG9uIHRoZSBWaW0gd2ViIHNpdGUuICBCdXQgb25seSBpZiB5b3UgZW5hYmxlIHRoaXMgb24geW91cgorYWNjb3VudCBwYWdlLiAgWW91IGNhbiBhbHNvIHNlbGVjdCB3aGV0aGVyIHRoZSBhbW91bnQgd2lsbCBiZSB2aXNpYmxlLgorCisKK0hvdyBkbyBJIGJlY29tZSBhIFZpbSBzcG9uc29yIG9yIHJlZ2lzdGVyZWQgVmltIHVzZXI/CisKK1NlbmQgbW9uZXksIGFzIGV4cGxhaW5lZCBhYm92ZSB8c2VuZC1tb25leXwgYW5kIGluY2x1ZGUgeW91ciBlLW1haWwgYWRkcmVzcy4KK1doZW4gdGhlIG1vbmV5IGhhcyBiZWVuIHJlY2VpdmVkIHlvdSB3aWxsIHJlY2VpdmUgYSB1bmlxdWUgcmVnaXN0cmF0aW9uIGtleS4KK1RoaXMga2V5IGNhbiBiZSB1c2VkIG9uIHRoZSBWaW0gd2Vic2l0ZSB0byBhY3RpdmF0ZSB2b3Rpbmcgb24geW91ciBWaW0KK2FjY291bnQuICBZb3Ugd2lsbCB0aGVuIGdldCBhbiBleHRyYSBwYWdlIHdoZXJlIHlvdSBjYW4gdm90ZSBmb3IgZmVhdHVyZXMgYW5kCitjaG9vc2Ugd2hldGhlciBvdGhlcnMgd2lsbCBiZSBhYmxlIHRvIHNlZSB0aGF0IHlvdSBkb25hdGVkLiAgVGhlcmUgaXMgYSBsaW5rCit0byB0aGlzIHBhZ2Ugb24geW91ciAiTXkgQWNjb3VudCIgcGFnZS4KKworCitXaGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc3BvbnNvcmluZyBhbmQgcmVnaXN0ZXJpbmc/CisKK0l0IGhhcyBhIGRpZmZlcmVudCBuYW1lLiAgVXNlIHRoZSB0ZXJtICJyZWdpc3RyYXRpb24iIGlmIHlvdXIgYm9zcyBkb2Vzbid0CitsaWtlICJzcG9uc29yaW5nIiBvciAiZG9uYXRpb24iLiAgVGhlIGJlbmVmaXRzIGFyZSB0aGUgc2FtZS4KKworCitIb3cgY2FuIEkgc2VuZCBtb25leT8KKworU2VlIHxzZW5kLW1vbmV5fC4gIENoZWNrIHRoZSB3ZWIgc2l0ZSBmb3IgdGhlIG1vc3QgcmVjZW50IGluZm9ybWF0aW9uOgoraHR0cDovL3d3dy52aW0ub3JnL3Nwb25zb3IvCisKKworV2h5IGRvbid0IHlvdSB1c2UgdGhlIFNvdXJjZUZvcmdlIGRvbmF0aW9uIHN5c3RlbT8KKworU291cmNlRm9yZ2UgdGFrZXMgNSUgb2YgdGhlIGRvbmF0aW9ucyBmb3IgdGhlbXNlbHZlcy4gIElmIHlvdSB3YW50IHRvIHN1cHBvcnQKK1NvdXJjZUZvcmdlIHlvdSBjYW4gc2VuZCBtb25leSB0byB0aGVtIGRpcmVjdGx5LgorCisKK0kgY2Fubm90IGFmZm9yZCB0byBzZW5kIG1vbmV5LCBtYXkgSSBzdGlsbCB1c2UgVmltPworCitZZXMuCisKKworSSBkaWQgbm90IHJlZ2lzdGVyIFZpbSwgY2FuIEkgdXNlIGFsbCBhdmFpbGFibGUgZmVhdHVyZXM/CisKK1llcy4KKworCitJIG5vdGljZWQgYSBidWcsIGRvIEkgbmVlZCB0byByZWdpc3RlciBiZWZvcmUgSSBjYW4gcmVwb3J0IGl0PworCitObywgc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmluZyBWaW0gY2FuIGFsd2F5cyBiZSBnaXZlbi4gIEZvciBpbXByb3ZlbWVudHMgdXNlCit0aGUgZGV2ZWxvcGVyIHxtYWlsbGlzdHwsIGZvciByZXBvcnRpbmcgYnVncyBzZWUgfGJ1Z3N8LgorCisKK0hvdyBhcmUgbXkgdm90ZXMgY291bnRlZD8JCQkJKnZvdGVzLWNvdW50ZWQqCisKK1lvdSBtYXkgdm90ZSB3aGVuIHlvdSBzZW5kIDEwIGV1cm8gb3IgbW9yZS4gIFlvdSBjYW4gZW50ZXIgdXAgdG8gdGVuIHZvdGVzLgorWW91IGNhbiBzZWxlY3QgdGhlIHNhbWUgaXRlbSBzZXZlcmFsIHRpbWVzIHRvIGdpdmUgaXQgbW9yZSBwb2ludHMuICBZb3UgY2FuCithbHNvIGVudGVyIHRocmVlIGNvdW50ZXIgdm90ZXMsIHRoZXNlIGNvdW50IGFzIG5lZ2F0aXZlIHBvaW50cy4KKworV2hlbiB5b3Ugc2VuZCAzMCBldXJvIG9yIG1vcmUgdGhlIHBvaW50cyBhcmUgZG91YmxlZC4gIEFib3ZlIDEwMCBldXJvIHRoZXkKK2NvdW50IGZvdXIgdGltZXMsIGFib3ZlIDMwMCBldXJvIHRoZXkgY291bnQgc2l4IHRpbWVzLCBhYm92ZSAxMDAwIGV1cm8gdGVuCit0aW1lcy4KKworCitDYW4gSSBjaGFuZ2UgbXkgdm90ZXM/CisKK1lvdSBjYW4gY2hhbmdlIHlvdXIgdm90ZXMgYW55IHRpbWUgeW91IGxpa2UsIHVwIHRvIHR3byB5ZWFycyBhZnRlciB5b3UKK3NlbnQgbW9uZXkuICBUaGUgcG9pbnRzIHdpbGwgYmUgY291bnRlZCByaWdodCBhd2F5LgorCisKK0hvdyBhYm91dCBDaGFyaXR5d2FyZT8KKworWW91IGhhdmUgdG8gZGVjaWRlIHlvdXJzZWxmIHdoZXRoZXIgeW91IHdhbnQgdG8gc3BvbnNvciBWaW0gZGV2ZWxvcG1lbnQsIGhlbHAKK3RoZSBwb29yIGNoaWxkcmVuIGluIFVnYW5kYSAoc2VlIHx1Z2FuZGF8KSBvciBib3RoLiAgQnJhbSB3aWxsIGNlcnRhaW5seSBrZWVwCitvbiBzdXBwb3J0aW5nIHRoZSBwcm9qZWN0IGluIFVnYW5kYS4gIEluIHRoZSAodW5saWtlbHkpIHNpdHVhdGlvbiB0aGF0IEJyYW0KK2dldHMgbW9yZSBkb25hdGlvbnMgZm9yIFZpbSBkZXZlbG9wbWVudCB0aGFuIGhlIG5lZWRzLCBoZSB3aWxsIHNlbmQgdGhlIG1vbmV5Cit0byBVZ2FuZGEuCisKKworSSBkb25hdGVkICQkJCwgbm93IHBsZWFzZSBhZGQgZmVhdHVyZSBYWVohCisKK1RoZXJlIGlzIG5vIGRpcmVjdCByZWxhdGlvbiBiZXR3ZWVuIHlvdXIgZG9uYXRpb24gYW5kIHRoZSB3b3JrIEJyYW0gZG9lcy4KK090aGVyd2lzZSB5b3Ugd291bGQgYmUgcGF5aW5nIGZvciB3b3JrIGFuZCBCcmFtIGhhcyB0byBwYXkgaW5jb21lIHRheCBvdmVyIHRoZQorZG9uYXRpb24uICBJZiB5b3Ugd2FudCB0byBoaXJlIEJyYW0gZm9yIHNwZWNpZmljIHdvcmssIGNvbnRhY3QgaGltIGRpcmVjdGx5LAorZG9uJ3QgdXNlIHRoZSBkb25hdGlvbiBzeXN0ZW0uCisKKworQXJlIHRoZSBkb25hdGlvbnMgdGF4IGRlZHVjdGFibGU/CisKK05vLiAgU2V0dGluZyB1cCBhIHN5c3RlbSBmb3IgdGhpcyBpcyBjb21wbGV4IGFuZCBpbXBvc2VzIHRvbyBtYW55IHJlc3RyaWN0aW9ucy4KK1RoZSBkb25hdGlvbnMgdG8gaGVscCB0aGUgY2hpbGRyZW4gaW4gfFVnYW5kYXwgYXJlIHRheCBkZWR1Y3RhYmxlIGluIEhvbGxhbmQsCitHZXJtYW55LCBDYW5hZGEgYW5kIHByb2JhYmx5IGFsc28gaW4gdGhlIFVTQS4KKworCitDYW4geW91IHNlbmQgbWUgYSBiaWxsPworCitTZW5kaW5nIGEgYmlsbCB3b3VsZCBtZWFuIEJyYW0gZG9lcyBzb21ldGhpbmcgaW4gcmV0dXJuIGZvciB5b3VyIGNvbnRyaWJ1dGlvbi4KK1RoYXQgaXMgd29yayBhbmQgd291bGQgbWVhbiBCcmFtIGhhcyB0byBwYXkgaW5jb21lIHRheCBvdmVyIHRoZSBhbW91bnQuICBJdCBpcworcG9zc2libGUsIGJ1dCB0aGUgbmV0IGFtb3VudCB3aWxsIGJlIGxvd2VyLgorCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9zdGFydGluZy50eHQgYi9ydW50aW1lL2RvYy9zdGFydGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwYmNiOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3N0YXJ0aW5nLnR4dApAQCAtMCwwICsxLDE0MTggQEAKKypzdGFydGluZy50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMjgKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitTdGFydGluZyBWaW0JCQkJCQkqc3RhcnRpbmcqCisKKzEuIFZpbSBhcmd1bWVudHMJCXx2aW0tYXJndW1lbnRzfAorMi4gVmltIG9uIHRoZSBBbWlnYQkJfHN0YXJ0aW5nLWFtaWdhfAorMy4gUnVubmluZyBlVmltCQkJfGV2aW0ta2V5c3wKKzQuIEluaXRpYWxpemF0aW9uCQl8aW5pdGlhbGl6YXRpb258Cis1LiAkVklNIGFuZCAkVklNUlVOVElNRQkJfCRWSU18Cis2LiBTdXNwZW5kaW5nCQkJfHN1c3BlbmR8Cis3LiBTYXZpbmcgc2V0dGluZ3MJCXxzYXZlLXNldHRpbmdzfAorOC4gVmlld3MgYW5kIFNlc3Npb25zCQl8dmlld3Mtc2Vzc2lvbnN8Cis5LiBUaGUgdmltaW5mbyBmaWxlCQl8dmltaW5mby1maWxlfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFZpbSBhcmd1bWVudHMJCQkJCSp2aW0tYXJndW1lbnRzKgorCitNb3N0IG9mdGVuLCBWaW0gaXMgc3RhcnRlZCB0byBlZGl0IGEgc2luZ2xlIGZpbGUgd2l0aCB0aGUgY29tbWFuZAorCisJdmltIGZpbGVuYW1lCQkJCQkqLXZpbSoKKworTW9yZSBnZW5lcmFsbHksIFZpbSBpcyBzdGFydGVkIHdpdGg6CisKKwl2aW0gW29wdGlvbiB8IGZpbGVuYW1lXSAuLgorCitPcHRpb24gYXJndW1lbnRzIGFuZCBmaWxlIG5hbWUgYXJndW1lbnRzIGNhbiBiZSBtaXhlZCwgYW5kIGFueSBudW1iZXIgb2YgdGhlbQorY2FuIGJlIGdpdmVuLiAgSG93ZXZlciwgd2F0Y2ggb3V0IGZvciBvcHRpb25zIHRoYXQgdGFrZSBhbiBhcmd1bWVudC4KKworRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2YXJpb3VzIFZpIHZlcnNpb25zLCBzZWUJfGNtZGxpbmUtYXJndW1lbnRzfC4KKworRXhhY3RseSBvbmUgb3V0IG9mIHRoZSBmb2xsb3dpbmcgZml2ZSBpdGVtcyBtYXkgYmUgdXNlZCB0byBjaG9vc2UgaG93IHRvCitzdGFydCBlZGl0aW5nOgorCisJCQkJCQkJKi1maWxlKiAqLS0tKgorZmlsZW5hbWUJT25lIG9yIG1vcmUgZmlsZSBuYW1lcy4gIFRoZSBmaXJzdCBvbmUgd2lsbCBiZSB0aGUgY3VycmVudAorCQlmaWxlIGFuZCByZWFkIGludG8gdGhlIGJ1ZmZlci4gIFRoZSBjdXJzb3Igd2lsbCBiZSBwb3NpdGlvbmVkCisJCW9uIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBidWZmZXIuCisJCVRvIGF2b2lkIGEgZmlsZSBuYW1lIHN0YXJ0aW5nIHdpdGggYSAnLScgYmVpbmcgaW50ZXJwcmV0ZWQgYXMKKwkJYW4gb3B0aW9uLCBwcmVjZWRlIHRoZSBhcmdsaXN0IHdpdGggIi0tIiwgZS5nLjogPgorCQkJdmltIC0tIC1maWxlbmFtZQorPAkJQWxsIGFyZ3VtZW50cyBhZnRlciB0aGUgIi0tIiB3aWxsIGJlIGludGVycHJldGVkIGFzIGZpbGUgbmFtZXMsCisJCW5vIG90aGVyIG9wdGlvbnMgb3IgIitjb21tYW5kIiBhcmd1bWVudCBjYW4gZm9sbG93LgorCisJCQkJCQkJKi0tKgorLQkJVGhpcyBhcmd1bWVudCBjYW4gbWVhbiB0d28gdGhpbmdzLCBkZXBlbmRpbmcgb24gd2hldGhlciBFeAorCQltb2RlIGlzIHRvIGJlIHVzZWQuCisKKwkJU3RhcnRpbmcgaW4gTm9ybWFsIG1vZGU6ID4KKwkJCXZpbSAtCisJCQlleCAtdiAtCis8CQlTdGFydCBlZGl0aW5nIGEgbmV3IGJ1ZmZlciwgd2hpY2ggaXMgZmlsbGVkIHdpdGggdGV4dAorCQl0aGF0IGlzIHJlYWQgZnJvbSBzdGRpbi4gIFRoZSBjb21tYW5kcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlCisJCXJlYWQgZnJvbSBzdGRpbiB3aWxsIG5vdyBiZSByZWFkIGZyb20gc3RkZXJyLiAgRXhhbXBsZTogPgorCQkJZmluZCAuIC1uYW1lICIqLmMiIC1wcmludCB8IHZpbSAtCis8CQlUaGUgYnVmZmVyIHdpbGwgYmUgbWFya2VkIG1vZGlmaWVkLCBiZWNhdXNlIGl0IGNvbnRhaW5zIHRleHQKKwkJdGhhdCBuZWVkcyB0byBiZSBzYXZlZC4gIEV4Y2VwdCB3aGVuIGluIHJlYWRvbmx5IG1vZGUsIHRoZW4KKwkJdGhlIGJ1ZmZlciBpcyBub3QgbWFya2VkIG1vZGlmaWVkLiAgRXhhbXBsZTogPgorCQkJbHMgfCB2aWV3IC0KKzwKKwkJU3RhcnRpbmcgaW4gRXggbW9kZTogPgorCQkJZXggLQorCQkJdmltIC1lIC0KKwkJCWV4aW0gLQorCQkJdmltIC1FCis8CQlTdGFydCBlZGl0aW5nIGluIHNpbGVudCBtb2RlLiAgU2VlIHwtcy1leHwuCisKKwkJCQkJCQkqLXQqICotdGFnKgorLXQge3RhZ30JQSB0YWcuICAidGFnIiBpcyBsb29rZWQgdXAgaW4gdGhlIHRhZ3MgZmlsZSwgdGhlIGFzc29jaWF0ZWQKKwkJZmlsZSBiZWNvbWVzIHRoZSBjdXJyZW50IGZpbGUsIGFuZCB0aGUgYXNzb2NpYXRlZCBjb21tYW5kIGlzCisJCWV4ZWN1dGVkLiAgTW9zdGx5IHRoaXMgaXMgdXNlZCBmb3IgQyBwcm9ncmFtcywgaW4gd2hpY2ggY2FzZQorCQkidGFnIiBvZnRlbiBpcyBhIGZ1bmN0aW9uIG5hbWUuICBUaGUgZWZmZWN0IGlzIHRoYXQgdGhlIGZpbGUKKwkJY29udGFpbmluZyB0aGF0IGZ1bmN0aW9uIGJlY29tZXMgdGhlIGN1cnJlbnQgZmlsZSBhbmQgdGhlCisJCWN1cnNvciBpcyBwb3NpdGlvbmVkIG9uIHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gKHNlZQorCQl8dGFnc3wpLgorCisJCQkJCQkJKi1xKiAqLXFmKgorLXEgW2Vycm9yZmlsZV0JUXVpY2tGaXggbW9kZS4gIFRoZSBmaWxlIHdpdGggdGhlIG5hbWUgW2Vycm9yZmlsZV0gaXMgcmVhZAorCQlhbmQgdGhlIGZpcnN0IGVycm9yIGlzIGRpc3BsYXllZC4gIFNlZSB8cXVpY2tmaXh8LgorCQlJZiBbZXJyb3JmaWxlXSBpcyBub3QgZ2l2ZW4sIHRoZSAnZXJyb3JmaWxlJyBvcHRpb24gaXMgdXNlZAorCQlmb3IgdGhlIGZpbGUgbmFtZS4gIFNlZSAnZXJyb3JmaWxlJyBmb3IgdGhlIGRlZmF1bHQgdmFsdWUuCisJCXtub3QgaW4gVml9CisKKyhub3RoaW5nKQlXaXRob3V0IG9uZSBvZiB0aGUgZm91ciBpdGVtcyBhYm92ZSwgVmltIHdpbGwgc3RhcnQgZWRpdGluZyBhCisJCW5ldyBidWZmZXIuICBJdCdzIGVtcHR5IGFuZCBkb2Vzbid0IGhhdmUgYSBmaWxlIG5hbWUuCisKKworVGhlIHN0YXJ0dXAgbW9kZSBjYW4gYmUgY2hhbmdlZCBieSB1c2luZyBhbm90aGVyIG5hbWUgaW5zdGVhZCBvZiAidmltIiwgd2hpY2gKK2lzIGVxdWFsIHRvIGdpdmluZyBvcHRpb25zOgorZXgJdmltIC1lCSAgICBTdGFydCBpbiBFeCBtb2RlIChzZWUgfEV4LW1vZGV8KS4JCSAgICAqZXgqCitleGltCXZpbSAtRQkgICAgU3RhcnQgaW4gaW1wcm92ZWQgRXggbW9kZSAoc2VlIHxFeC1tb2RlfCkuCSAgICAqZXhpbSoKKwkJCShub3JtYWxseSBub3QgaW5zdGFsbGVkKQordmlldwl2aW0gLVIJICAgIFN0YXJ0IGluIHJlYWQtb25seSBtb2RlIChzZWUgfC1SfCkuCQkgICAgKnZpZXcqCitndmltCXZpbSAtZwkgICAgU3RhcnQgdGhlIEdVSSAoc2VlIHxndWl8KS4JCQkgICAgKmd2aW0qCitnZXgJdmltIC1lZwkgICAgU3RhcnQgdGhlIEdVSSBpbiBFeCBtb2RlLgkJCSAgICAqZ2V4KgorZ3ZpZXcJdmltIC1SZwkgICAgU3RhcnQgdGhlIEdVSSBpbiByZWFkLW9ubHkgbW9kZS4JCSAgICAqZ3ZpZXcqCitydmltCXZpbSAtWgkgICAgTGlrZSAidmltIiwgYnV0IGluIHJlc3RyaWN0ZWQgbW9kZSAoc2VlIHwtWnwpICAgKnJ2aW0qCitydmlldwl2aW0gLVJaCSAgICBMaWtlICJ2aWV3IiwgYnV0IGluIHJlc3RyaWN0ZWQgbW9kZS4JICAgICpydmlldyoKK3JndmltCXZpbSAtZ1oJICAgIExpa2UgImd2aW0iLCBidXQgaW4gcmVzdHJpY3RlZCBtb2RlLgkgICAgKnJndmltKgorcmd2aWV3CXZpbSAtUmdaICAgIExpa2UgImd2aWV3IiwgYnV0IGluIHJlc3RyaWN0ZWQgbW9kZS4JICAgICpyZ3ZpZXcqCitldmltICAgIHZpbSAteSAgICAgIEVhc3kgVmltOiBzZXQgJ2luc2VydG1vZGUnIChzZWUgfC15fCkJICAgICpldmltKgorZXZpZXcgICB2aW0gLXlSICAgICBMaWtlICJldmltIiBpbiByZWFkLW9ubHkgbW9kZQkJICAgICpldmlldyoKK3ZpbWRpZmYgdmltIC1kCSAgICBTdGFydCBpbiBkaWZmIG1vZGUgfGRpZmYtbW9kZXwKK2d2aW1kaWZmIHZpbSAtZ2QgICAgU3RhcnQgaW4gZGlmZiBtb2RlIHxkaWZmLW1vZGV8CisKK0FkZGl0aW9uYWwgY2hhcmFjdGVycyBtYXkgZm9sbG93LCB0aGV5IGFyZSBpZ25vcmVkLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gaGF2ZQorImd2aW0tNSIgdG8gc3RhcnQgdGhlIEdVSS4gIFlvdSBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBieSB0aGF0IG5hbWUgdGhlbiwgb2YKK2NvdXJzZS4KKworT24gVW5peCwgeW91IHdvdWxkIG5vcm1hbGx5IGhhdmUgb25lIGV4ZWN1dGFibGUgY2FsbGVkIFZpbSwgYW5kIGxpbmtzIGZyb20gdGhlCitkaWZmZXJlbnQgc3RhcnR1cC1uYW1lcyB0byB0aGF0IGV4ZWN1dGFibGUuICBJZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0CitsaW5rcyBhbmQgeW91IGRvIG5vdCB3YW50IHRvIGhhdmUgc2V2ZXJhbCBjb3BpZXMgb2YgdGhlIGV4ZWN1dGFibGUsIHlvdSBjb3VsZAordXNlIGFuIGFsaWFzIGluc3RlYWQuICBGb3IgZXhhbXBsZTogPgorCWFsaWFzIHZpZXcgICB2aW0gLVIKKwlhbGlhcyBndmltICAgdmltIC1nCis8CisJCQkJCQkJKnN0YXJ0dXAtb3B0aW9ucyoKK1RoZSBvcHRpb24gYXJndW1lbnRzIG1heSBiZSBnaXZlbiBpbiBhbnkgb3JkZXIuICBTaW5nbGUtbGV0dGVyIG9wdGlvbnMgY2FuIGJlCitjb21iaW5lZCBhZnRlciBvbmUgZGFzaC4gIFRoZXJlIGNhbiBiZSBubyBvcHRpb24gYXJndW1lbnRzIGFmdGVyIHRoZSAiLS0iCithcmd1bWVudC4KKworT24gVk1TIGFsbCBvcHRpb24gYXJndW1lbnRzIGFyZSBhc3N1bWVkIHRvIGJlIGxvd2VyY2FzZSwgdW5sZXNzIHByZWNlZGVkIHdpdGgKK2Egc2xhc2guICBUaHVzICItUiIgbWVhbnMgcmVjb3ZlcnkgYW5kICItL1IiIHJlYWRvbmx5LgorCistLWhlbHAJCQkJCQkJKi1oKiAqLS1oZWxwKgorLWgJCUdpdmUgdXNhZ2UgKGhlbHApIG1lc3NhZ2UgYW5kIGV4aXQuICB7bm90IGluIFZpfQorCQlTZWUgfGluZm8tbWVzc2FnZXwgYWJvdXQgY2FwdHVyaW5nIHRoZSB0ZXh0LgorCisJCQkJCQkJKi0tdmVyc2lvbioKKy0tdmVyc2lvbglQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0LiAgU2FtZSBvdXRwdXQgYXMgZm9yCisJCXw6dmVyc2lvbnwgY29tbWFuZC4gIHtub3QgaW4gVml9CisJCVNlZSB8aW5mby1tZXNzYWdlfCBhYm91dCBjYXB0dXJpbmcgdGhlIHRleHQuCisKKwkJCQkJCQkqLS1ub3BsdWdpbioKKy0tbm9wbHVnaW4JU2tpcCBsb2FkaW5nIHBsdWdpbnMuICBSZXNldHMgdGhlICdsb2FkcGx1Z2lucycgb3B0aW9uLgorCQl7bm90IGluIFZpfQorCQlOb3RlIHRoYXQgdGhlIHwtdXwgYXJndW1lbnQgbWF5IGFsc28gZGlzYWJsZSBsb2FkaW5nIHBsdWdpbnM6CisJCQlhcmd1bWVudAlsb2FkIHZpbXJjIGZpbGVzCWxvYWQgcGx1Z2lucyB+CisJCQkobm90aGluZykJCXllcwkJICAgIHllcworCQkJLXUgTk9ORQkJCW5vCQkgICAgbm8KKwkJCS11IE5PUkMJCQlubwkJICAgIHllcworCQkJLS1ub3BsdWdpbgkJeWVzCQkgICAgbm8KKworCQkJCQkJCSotLWxpdGVyYWwqCistLWxpdGVyYWwJVGFrZSBmaWxlIG5hbWVzIGxpdGVyYWxseSwgZG9uJ3QgZXhwYW5kIHdpbGRjYXJkcy4gIE5vdCBuZWVkZWQKKwkJZm9yIFVuaXgsIGJlY2F1c2UgVmltIGFsd2F5cyB0YWtlcyBmaWxlIG5hbWVzIGxpdGVyYWxseSAodGhlCisJCXNoZWxsIGV4cGFuZHMgd2lsZGNhcmRzKS4KKwkJQXBwbGllcyB0byBhbGwgdGhlIG5hbWVzLCBhbHNvIHRoZSBvbmVzIHRoYXQgY29tZSBiZWZvcmUgdGhpcworCQlhcmd1bWVudC4KKworCQkJCQkJCSotKyoKKytbbnVtXQkJVGhlIGN1cnNvciB3aWxsIGJlIHBvc2l0aW9uZWQgb24gbGluZSAibnVtIiBmb3IgdGhlIGZpcnN0CisJCWZpbGUgYmVpbmcgZWRpdGVkLiAgSWYgIm51bSIgaXMgbWlzc2luZywgdGhlIGN1cnNvciB3aWxsIGJlCisJCXBvc2l0aW9uZWQgb24gdGhlIGxhc3QgbGluZS4KKworCQkJCQkJCSotKy8qCisrL3twYXR9CQlUaGUgY3Vyc29yIHdpbGwgYmUgcG9zaXRpb25lZCBvbiB0aGUgZmlyc3QgbGluZSBjb250YWluaW5nCisJCSJwYXQiIGluIHRoZSBmaXJzdCBmaWxlIGJlaW5nIGVkaXRlZCAoc2VlIHxwYXR0ZXJufCBmb3IgdGhlCisJCWF2YWlsYWJsZSBzZWFyY2ggcGF0dGVybnMpLgorCisre2NvbW1hbmR9CQkJCQkJKi0rYyogKi1jKgorLWMge2NvbW1hbmR9CXtjb21tYW5kfSB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBmaXJzdCBmaWxlIGhhcyBiZWVuCisJCXJlYWQgKGFuZCBhZnRlciBhdXRvY29tbWFuZHMgYW5kIG1vZGVsaW5lcyBmb3IgdGhhdCBmaWxlIGhhdmUKKwkJYmVlbiBwcm9jZXNzZWQpLiAgImNvbW1hbmQiIGlzIGludGVycHJldGVkIGFzIGFuIEV4IGNvbW1hbmQuCisJCUlmIHRoZSAiY29tbWFuZCIgY29udGFpbnMgc3BhY2VzLCBpdCBtdXN0IGJlIGVuY2xvc2VkIGluCisJCWRvdWJsZSBxdW90ZXMgKHRoaXMgZGVwZW5kcyBvbiB0aGUgc2hlbGwgdGhhdCBpcyB1c2VkKS4KKwkJRXhhbXBsZTogPgorCQkJdmltICAiK3NldCBzaSIgIG1haW4uYworCQkJdmltICAiK2ZpbmQgc3RkaW8uaCIKKwkJCXZpbSAgLWMgInNldCBmZj1kb3MiICAtYyB3cSAgbWluZS5tYWsKKzwKKwkJTm90ZTogWW91IGNhbiB1c2UgdXAgdG8gMTAgIisiIG9yICItYyIgYXJndW1lbnRzIGluIGEgVmltCisJCWNvbW1hbmQuICBUaGV5IGFyZSBleGVjdXRlZCBpbiB0aGUgb3JkZXIgZ2l2ZW4uICBBICItUyIKKwkJYXJndW1lbnQgY291bnRzIGFzIGEgIi1jIiBhcmd1bWVudCBhcyB3ZWxsLgorCQl7Vmkgb25seSBhbGxvd3Mgb25lIGNvbW1hbmR9CisKKy0tY21kIHtjb21tYW5kfQkJCQkJCSotLWNtZCoKKwkJe2NvbW1hbmR9IHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHByb2Nlc3NpbmcgYW55IHZpbXJjIGZpbGUuCisJCU90aGVyd2lzZSBpdCBhY3RzIGxpa2UgLWMge2NvbW1hbmR9LiAgWW91IGNhbiB1c2UgdXAgdG8gMTAgb2YKKwkJdGhlc2UgY29tbWFuZHMsIGluZGVwZW5kZW50bHkgZnJvbSAiLWMiIGNvbW1hbmRzLgorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi1TKgorLVMge2ZpbGV9CVRoZSB7ZmlsZX0gd2lsbCBiZSBzb3VyY2VkIGFmdGVyIHRoZSBmaXJzdCBmaWxlIGhhcyBiZWVuIHJlYWQuCisJCVRoaXMgaXMgYW4gZWFzeSB3YXkgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2Y6ID4KKwkJCS1jICJzb3VyY2Uge2ZpbGV9IgorPAkJSXQgY2FuIGJlIG1peGVkIHdpdGggIi1jIiBhcmd1bWVudHMgYW5kIHJlcGVhdGVkIGxpa2UgIi1jIi4KKwkJVGhlIGxpbWl0IG9mIDEwICItYyIgYXJndW1lbnRzIGFwcGxpZXMgaGVyZSBhcyB3ZWxsLgorCQl7ZmlsZX0gY2Fubm90IHN0YXJ0IHdpdGggYSAiLSIuCisJCXtub3QgaW4gVml9CisKKy1TCQlXb3JrcyBsaWtlICItUyBTZXNzaW9uLnZpbSIuICBPbmx5IHdoZW4gdXNlZCBhcyB0aGUgbGFzdAorCQlhcmd1bWVudCBvciB3aGVuIGFub3RoZXIgIi0iIG9wdGlvbiBmb2xsb3dzLgorCisJCQkJCQkJKi1yKgorLXIJCVJlY292ZXJ5IG1vZGUuICBXaXRob3V0IGEgZmlsZSBuYW1lIGFyZ3VtZW50LCBhIGxpc3Qgb2YKKwkJZXhpc3Rpbmcgc3dhcCBmaWxlcyBpcyBnaXZlbi4gIFdpdGggYSBmaWxlIG5hbWUsIGEgc3dhcCBmaWxlCisJCWlzIHJlYWQgdG8gcmVjb3ZlciBhIGNyYXNoZWQgZWRpdGluZyBzZXNzaW9uLiAgU2VlCisJCXxjcmFzaC1yZWNvdmVyeXwuCisKKwkJCQkJCQkqLUwqCistTAkJU2FtZSBhcyAtci4gIHtvbmx5IGluIHNvbWUgdmVyc2lvbnMgb2YgVmk6ICJMaXN0IHJlY292ZXJhYmxlCisJCWVkaXQgc2Vzc2lvbnMifQorCisJCQkJCQkJKi1SKgorLVIJCVJlYWRvbmx5IG1vZGUuICBUaGUgJ3JlYWRvbmx5JyBvcHRpb24gd2lsbCBiZSBzZXQgZm9yIGFsbCB0aGUKKwkJZmlsZXMgYmVpbmcgZWRpdGVkLiAgWW91IGNhbiBzdGlsbCBlZGl0IHRoZSBidWZmZXIsIGJ1dCB3aWxsCisJCWJlIHByZXZlbnRlZCBmcm9tIGFjY2lkZW50YWxseSBvdmVyd3JpdGluZyBhIGZpbGUuICBJZiB5b3UKKwkJZm9yZ290IHRoYXQgeW91IGFyZSBpbiBWaWV3IG1vZGUgYW5kIGRpZCBtYWtlIHNvbWUgY2hhbmdlcywKKwkJeW91IGNhbiBvdmVyd3JpdGUgYSBmaWxlIGJ5IGFkZGluZyBhbiBleGNsYW1hdGlvbiBtYXJrIHRvCisJCXRoZSBFeCBjb21tYW5kLCBhcyBpbiAiOnchIi4gIFRoZSAncmVhZG9ubHknIG9wdGlvbiBjYW4gYmUKKwkJcmVzZXQgd2l0aCAiOnNldCBub3JvIiAoc2VlIHRoZSBvcHRpb25zIGNoYXB0ZXIsIHxvcHRpb25zfCkuCisJCVN1YnNlcXVlbnQgZWRpdHMgd2lsbCBub3QgYmUgZG9uZSBpbiByZWFkb25seSBtb2RlLiAgQ2FsbGluZworCQl0aGUgZXhlY3V0YWJsZSAidmlldyIgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgLVIgYXJndW1lbnQuCisJCVRoZSAndXBkYXRlY291bnQnIG9wdGlvbiB3aWxsIGJlIHNldCB0byAxMDAwMCwgbWVhbmluZyB0aGF0CisJCXRoZSBzd2FwIGZpbGUgd2lsbCBub3QgYmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IHZlcnkgb2Z0ZW4uCisKKwkJCQkJCQkqLW0qCistbQkJTW9kaWZpY2F0aW9ucyBub3QgYWxsb3dlZCB0byBiZSB3cml0dGVuLiAgVGhlICd3cml0ZScgb3B0aW9uCisJCXdpbGwgYmUgcmVzZXQsIHNvIHRoYXQgd3JpdGluZyBmaWxlcyBpcyBkaXNhYmxlZC4gIEhvd2V2ZXIsCisJCXRoZSAnd3JpdGUnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIGVuYWJsZSB3cml0aW5nIGFnYWluLgorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi1NKgorLU0JCU1vZGlmaWNhdGlvbnMgbm90IGFsbG93ZWQuICBUaGUgJ21vZGlmaWFibGUnIG9wdGlvbiB3aWxsIGJlCisJCXJlc2V0LCBzbyB0aGF0IGNoYW5nZXMgYXJlIG5vdCBhbGxvd2VkLiAgVGhlICd3cml0ZScgb3B0aW9uCisJCXdpbGwgYmUgcmVzZXQsIHNvIHRoYXQgd3JpdGluZyBmaWxlcyBpcyBkaXNhYmxlZC4gIEhvd2V2ZXIsCisJCXRoZSAnbW9kaWZpYWJsZScgYW5kICd3cml0ZScgb3B0aW9ucyBjYW4gYmUgc2V0IHRvIGVuYWJsZQorCQljaGFuZ2VzIGFuZCB3cml0aW5nLgorCQl7bm90IGluIFZpfQorCisJCQkJCQkqLVoqICpyZXN0cmljdGVkLW1vZGUqICpFMTQ1KgorLVoJCVJlc3RyaWN0ZWQgbW9kZS4gIEFsbCBjb21tYW5kcyB0aGF0IG1ha2UgdXNlIG9mIGFuIGV4dGVybmFsCisJCXNoZWxsIGFyZSBkaXNhYmxlZC4gIFRoaXMgaW5jbHVkZXMgc3VzcGVuZGluZyB3aXRoIENUUkwtWiwKKwkJIjpzaCIsIGZpbHRlcmluZywgdGhlIHN5c3RlbSgpIGZ1bmN0aW9uLCBiYWNrdGljayBleHBhbnNpb24sCisJCWV0Yy4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSotZyoKKy1nCQlTdGFydCBWaW0gaW4gR1VJIG1vZGUuICBTZWUgfGd1aXwuICB7bm90IGluIFZpfQorCisJCQkJCQkJKi12KgorLXYJCVN0YXJ0IEV4IGluIFZpIG1vZGUuICBPbmx5IG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIHRoZQorCQlleGVjdXRhYmxlIGlzIGNhbGxlZCAiZXgiIG9yICJndmltIi4gIEZvciBndmltIHRoZSBHVUkgaXMgbm90CisJCXN0YXJ0ZWQgaWYgcG9zc2libGUuCisKKwkJCQkJCQkqLWUqCistZQkJU3RhcnQgVmltIGluIEV4IG1vZGUgfFF8LiAgT25seSBtYWtlcyBhIGRpZmZlcmVuY2Ugd2hlbiB0aGUKKwkJZXhlY3V0YWJsZSBpcyBub3QgY2FsbGVkICJleCIuCisKKwkJCQkJCQkqLUUqCistRQkJU3RhcnQgVmltIGluIGltcHJvdmVkIEV4IG1vZGUgfGdRfC4gIE9ubHkgbWFrZXMgYSBkaWZmZXJlbmNlCisJCXdoZW4gdGhlIGV4ZWN1dGFibGUgaXMgbm90IGNhbGxlZCAiZXhpbSIuCisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLXMtZXgqCistcwkJU2lsZW50IG9yIGJhdGNoIG1vZGUuICBPbmx5IHdoZW4gVmltIHdhcyBzdGFydGVkIGFzICJleCIgb3IKKwkJd2hlbiBwcmVjZWRlZCB3aXRoIHRoZSAiLWUiIGFyZ3VtZW50LiAgT3RoZXJ3aXNlIHNlZSB8LXN8LAorCQl3aGljaCBkb2VzIHRha2UgYW4gYXJndW1lbnQgd2hpbGUgdGhpcyB1c2Ugb2YgIi1zIiBkb2Vzbid0LgorCQlUbyBiZSB1c2VkIHdoZW4gVmltIGlzIHVzZWQgdG8gZXhlY3V0ZSBFeCBjb21tYW5kcyBmcm9tIGEgZmlsZQorCQlpbnN0ZWFkIG9mIGEgdGVybWluYWwuICBTd2l0Y2hlcyBvZmYgbW9zdCBwcm9tcHRzIGFuZAorCQlpbmZvcm1hdGl2ZSBtZXNzYWdlcy4gIEFsc28gd2FybmluZ3MgYW5kIGVycm9yIG1lc3NhZ2VzLgorCQlCdXQgIjpwcmludCIgb3V0cHV0IGlzIGRpc3BsYXllZC4gIEFuZCB3aGVuICd2ZXJib3NlJyBpcworCQlub24temVybyBtZXNzYWdlcyBhcmUgcHJpbnRlZCAoZm9yIGRlYnVnZ2luZykuCisJCUlmIFZpbSBhcHBlYXJzIHRvIGJlIHN0dWNrIHRyeSB0eXBpbmcgInFhITxFbnRlcj4iLiAgWW91IGRvbid0CisJCWdldCBhIHByb21wdCB0aHVzIHlvdSBjYW4ndCBzZWUgVmltIGlzIHdhaXRpbmcgZm9yIHlvdSB0byB0eXBlCisJCXNvbWV0aGluZy4KKwkJSW5pdGlhbGl6YXRpb25zIGFyZSBza2lwcGVkIChleGNlcHQgdGhlIG9uZXMgZ2l2ZW4gd2l0aCB0aGUKKwkJIi11IiBhcmd1bWVudCkuCisJCUV4YW1wbGU6ID4KKwkJCXZpbSAtZSAtcyAgPCB0aGVmaWx0ZXIgIHRoZWZpbGUKKzwKKwkJCQkJCQkqLWIqCistYgkJQmluYXJ5IG1vZGUuICBGaWxlIEkvTyB3aWxsIG9ubHkgcmVjb2duaXplIDxOTD4gdG8gc2VwYXJhdGUKKwkJbGluZXMuIFRoZSAnZXhwYW5kdGFiJyBvcHRpb24gd2lsbCBiZSByZXNldC4gIFRoZSAndGV4dHdpZHRoJworCQlvcHRpb24gaXMgc2V0IHRvIDAuICAnbW9kZWxpbmUnIGlzIHJlc2V0LiAgVGhlICdiaW5hcnknIG9wdGlvbgorCQlpcyBzZXQuICBUaGlzIGlzIGRvbmUgYWZ0ZXIgcmVhZGluZyB0aGUgdmltcmMvZXhyYyBmaWxlcyBidXQKKwkJYmVmb3JlIHJlYWRpbmcgYW55IGZpbGUgaW4gdGhlIGFyZ2xpc3QuICBTZWUgYWxzbworCQl8ZWRpdC1iaW5hcnl8LiAge25vdCBpbiBWaX0KKworCQkJCQkJCSotbCoKKy1sCQlMaXNwIG1vZGUuICBTZXRzIHRoZSAnbGlzcCcgYW5kICdzaG93bWF0Y2gnIG9wdGlvbnMgb24uCisKKwkJCQkJCQkqLUEqCistQQkJQXJhYmljIG1vZGUuICBTZXRzIHRoZSAnYXJhYmljJyBvcHRpb24gb24uICAoT25seSB3aGVuCisJCWNvbXBpbGVkIHdpdGggdGhlIHwrYXJhYmljfCBmZWF0dXJlcyAod2hpY2ggaW5jbHVkZQorCQl8K3JpZ2h0bGVmdHwpLCBvdGhlcndpc2UgVmltIGdpdmVzIGFuIGVycm9yIG1lc3NhZ2UKKwkJYW5kIGV4aXRzLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSotRioKKy1GCQlGYXJzaSBtb2RlLiAgU2V0cyB0aGUgJ2ZrbWFwJyBhbmQgJ3JpZ2h0bGVmdCcgb3B0aW9ucyBvbi4KKwkJKE9ubHkgd2hlbiBjb21waWxlZCB3aXRoIHwrcmlnaHRsZWZ0fCBhbmQgfCtmYXJzaXwgZmVhdHVyZXMsCisJCW90aGVyd2lzZSBWaW0gZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZXhpdHMpLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSotSCoKKy1ICQlIZWJyZXcgbW9kZS4gIFNldHMgdGhlICdoa21hcCcgYW5kICdyaWdodGxlZnQnIG9wdGlvbnMgb24uCisJCShPbmx5IHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtyaWdodGxlZnR8IGZlYXR1cmUsIG90aGVyd2lzZQorCQlWaW0gZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZXhpdHMpLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSotViogKnZlcmJvc2UqCistVltOXQkJVmVyYm9zZS4gIFNldHMgdGhlICd2ZXJib3NlJyBvcHRpb24gdG8gW05dIChkZWZhdWx0OiAxMCkuCisJCU1lc3NhZ2VzIHdpbGwgYmUgZ2l2ZW4gZm9yIGVhY2ggZmlsZSB0aGF0IGlzICI6c291cmNlImQgYW5kCisJCWZvciByZWFkaW5nIG9yIHdyaXRpbmcgYSB2aW1pbmZvIGZpbGUuICBDYW4gYmUgdXNlZCB0byBmaW5kCisJCW91dCB3aGF0IGlzIGhhcHBlbmluZyB1cG9uIHN0YXJ0dXAgYW5kIGV4aXQuICB7bm90IGluIFZpfQorCisJCQkJCQkJKi1EKgorLUQJCURlYnVnZ2luZy4gIEdvIHRvIGRlYnVnZ2luZyBtb2RlIHdoZW4gZXhlY3V0aW5nIHRoZSBmaXJzdAorCQljb21tYW5kIGZyb20gYSBzY3JpcHQuIHxkZWJ1Zy1tb2RlfAorCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZXZhbHwgZmVhdHVyZX0KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSotQyoKKy1DCQlDb21wYXRpYmxlIG1vZGUuICBTZXRzIHRoZSAnY29tcGF0aWJsZScgb3B0aW9uLiAgWW91IGNhbiB1c2UKKwkJdGhpcyB0byBnZXQgJ2NvbXBhdGlibGUnLCBldmVuIHRob3VnaCBhIC52aW1yYyBmaWxlIGV4aXN0cy4KKwkJQnV0IHRoZSBjb21tYW5kICI6c2V0IG5vY29tcGF0aWJsZSIgb3ZlcnJ1bGVzIGl0IGFueXdheS4KKwkJQWxzbyBzZWUgfGNvbXBhdGlibGUtZGVmYXVsdHwuICB7bm90IGluIFZpfQorCisJCQkJCQkJKi1OKgorLU4JCU5vdCBjb21wYXRpYmxlIG1vZGUuICBSZXNldHMgdGhlICdjb21wYXRpYmxlJyBvcHRpb24uICBZb3UgY2FuCisJCXVzZSB0aGlzIHRvIGdldCAnbm9jb21wYXRpYmxlJywgd2hlbiB0aGVyZSBpcyBubyAudmltcmMgZmlsZS4KKwkJQWxzbyBzZWUgfGNvbXBhdGlibGUtZGVmYXVsdHwuICB7bm90IGluIFZpfQorCisJCQkJCQkJKi15KiAqZWFzeSoKKy15CQlFYXN5IG1vZGUuICBJbXBsaWVkIGZvciB8ZXZpbXwgYW5kIHxldmlld3wuICBTdGFydHMgd2l0aAorCQknaW5zZXJ0bW9kZScgc2V0IGFuZCBiZWhhdmVzIGxpa2UgYSBjbGljay1hbmQtdHlwZSBlZGl0b3IuCisJCVRoaXMgc291cmNlcyB0aGUgc2NyaXB0ICRWSU1SVU5USU1FL2V2aW0udmltLiAgTWFwcGluZ3MgYXJlCisJCXNldCB1cCB0byB3b3JrIGxpa2UgbW9zdCBjbGljay1hbmQtdHlwZSBlZGl0b3JzLCBzZWUKKwkJfGV2aW0ta2V5c3wuICBUaGUgR1VJIGlzIHN0YXJ0ZWQgd2hlbiBhdmFpbGFibGUuCisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLW4qCistbgkJTm8gc3dhcCBmaWxlIHdpbGwgYmUgdXNlZC4gIFJlY292ZXJ5IGFmdGVyIGEgY3Jhc2ggd2lsbCBiZQorCQlpbXBvc3NpYmxlLiAgSGFuZHkgaWYgeW91IHdhbnQgdG8gdmlldyBvciBlZGl0IGEgZmlsZSBvbiBhCisJCXZlcnkgc2xvdyBtZWRpdW0gKGUuZy4sIGEgZmxvcHB5KS4KKwkJQ2FuIGFsc28gYmUgZG9uZSB3aXRoICI6c2V0IHVwZGF0ZWNvdW50PTAiLiAgWW91IGNhbiBzd2l0Y2ggaXQKKwkJb24gYWdhaW4gYnkgc2V0dGluZyB0aGUgJ3VwZGF0ZWNvdW50JyBvcHRpb24gdG8gc29tZSB2YWx1ZSwKKwkJZS5nLiwgIjpzZXQgdWM9MTAwIi4KKwkJJ3VwZGF0ZWNvdW50JyBpcyBzZXQgdG8gMCBBRlRFUiBleGVjdXRpbmcgY29tbWFuZHMgZnJvbSBhCisJCXZpbXJjIGZpbGUsIGJ1dCBiZWZvcmUgdGhlIEdVSSBpbml0aWFsaXphdGlvbnMuICBUaHVzIGl0CisJCW92ZXJyaWRlcyBhIHNldHRpbmcgZm9yICd1cGRhdGVjb3VudCcgaW4gYSB2aW1yYyBmaWxlLCBidXQgbm90CisJCWluIGEgZ3ZpbXJjIGZpbGUuICBTZWUgfHN0YXJ0dXB8LgorCQlXaGVuIHlvdSB3YW50IHRvIHJlZHVjZSBhY2Nlc3NlcyB0byB0aGUgZGlzayAoZS5nLiwgZm9yIGEKKwkJbGFwdG9wKSwgZG9uJ3QgdXNlICItbiIsIGJ1dCBzZXQgJ3VwZGF0ZXRpbWUnIGFuZAorCQkndXBkYXRlY291bnQnIHRvIHZlcnkgYmlnIG51bWJlcnMsIGFuZCB0eXBlICI6cHJlc2VydmUiIHdoZW4KKwkJeW91IHdhbnQgdG8gc2F2ZSB5b3VyIHdvcmsuICBUaGlzIHdheSB5b3Uga2VlcCB0aGUgcG9zc2liaWxpdHkKKwkJZm9yIGNyYXNoIHJlY292ZXJ5LgorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi1vKgorLW9bTl0JCU9wZW4gTiB3aW5kb3dzLCBzcGxpdCBob3Jpem9udGFsbHkuICBJZiBbTl0gaXMgbm90IGdpdmVuLAorCQlvbmUgd2luZG93IGlzIG9wZW5lZCBmb3IgZXZlcnkgZmlsZSBnaXZlbiBhcyBhcmd1bWVudC4gIElmCisJCXRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSwgb25seSB0aGUgZmlyc3QgZmV3IGZpbGVzIGdldCBhCisJCXdpbmRvdy4gIElmIHRoZXJlIGFyZSBtb3JlIHdpbmRvd3MgdGhhbiBhcmd1bWVudHMsIHRoZSBsYXN0CisJCWZldyB3aW5kb3dzIHdpbGwgYmUgZWRpdGluZyBhbiBlbXB0eSBmaWxlLgorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi1PKgorLU9bTl0JCU9wZW4gTiB3aW5kb3dzLCBzcGxpdCB2ZXJ0aWNhbGx5LiAgT3RoZXJ3aXNlIGl0J3MgbGlrZSAtby4KKwkJSWYgYm90aCB0aGUgLW8gYW5kIHRoZSAtTyBvcHRpb24gYXJlIGdpdmVuLCB0aGUgbGFzdCBvbmUgb24KKwkJdGhlIGNvbW1hbmQgbGluZSBkZXRlcm1pbmVzIGhvdyB0aGUgd2luZG93cyB3aWxsIGJlIHNwbGl0LgorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi1UKgorLVQge3Rlcm1pbmFsfQlTZXQgdGhlIHRlcm1pbmFsIHR5cGUgdG8gInRlcm1pbmFsIi4gIFRoaXMgaW5mbHVlbmNlcyB0aGUKKwkJY29kZXMgdGhhdCBWaW0gd2lsbCBzZW5kIHRvIHlvdXIgdGVybWluYWwuICBUaGlzIGlzIG5vcm1hbGx5CisJCW5vdCBuZWVkZWQsIGJlY2F1c2UgVmltIHdpbGwgYmUgYWJsZSB0byBmaW5kIG91dCB3aGF0IHR5cGUKKwkJb2YgdGVybWluYWwgeW91IGFyZSB1c2luZyAoU2VlIHx0ZXJtaW5hbC1pbmZvfCkuICB7bm90IGluIFZpfQorCisJCQkJCQkJKi1kKgorLWQJCVN0YXJ0IGluIGRpZmYgbW9kZSwgbGlrZSB8dmltZGlmZnwuCisJCXtub3QgaW4gVml9IHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtkaWZmfAorCQlmZWF0dXJlfQorCistZCB7ZGV2aWNlfQlPbmx5IG9uIHRoZSBBbWlnYSBhbmQgd2hlbiBub3QgY29tcGlsZWQgd2l0aCB0aGUgfCtkaWZmfAorCQlmZWF0dXJlLiAgV29ya3MgbGlrZSAiLWRldiIuCisJCQkJCQkJKi1kZXYqCistZGV2IHtkZXZpY2V9CU9ubHkgb24gdGhlIEFtaWdhOiBUaGUge2RldmljZX0gaXMgb3BlbmVkIHRvIGJlIHVzZWQgZm9yCisJCWVkaXRpbmcuCisJCU5vcm1hbGx5IHlvdSB3b3VsZCB1c2UgdGhpcyB0byBzZXQgdGhlIHdpbmRvdyBwb3NpdGlvbiBhbmQKKwkJc2l6ZTogIi1kIGNvbjp4L3kvd2lkdGgvaGVpZ2h0IiwgZS5nLiwKKwkJIi1kIGNvbjozMC8xMC82MDAvMTUwIi4gIEJ1dCB5b3UgY2FuIGFsc28gdXNlIGl0IHRvIHN0YXJ0CisJCWVkaXRpbmcgb24gYW5vdGhlciBkZXZpY2UsIGUuZy4sIEFVWDouICB7bm90IGluIFZpfQorCQkJCQkJCSotZioKKy1mCQlBbWlnYTogRG8gbm90IHJlc3RhcnQgVmltIHRvIG9wZW4gYSBuZXcgd2luZG93LiAgVGhpcworCQlvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2hlbiBWaW0gaXMgc3RhcnRlZCBieSBhIHByb2dyYW0gdGhhdAorCQl3aWxsIHdhaXQgZm9yIHRoZSBlZGl0IHNlc3Npb24gdG8gZmluaXNoIChlLmcuLCBtYWlsIG9yCisJCXJlYWRuZXdzKS4gIFNlZSB8YW1pZ2Etd2luZG93fC4KKworCQlHVUk6IERvIG5vdCBkaXNjb25uZWN0IGZyb20gdGhlIHByb2dyYW0gdGhhdCBzdGFydGVkIFZpbS4KKwkJJ2YnIHN0YW5kcyBmb3IgImZvcmVncm91bmQiLiAgSWYgb21pdHRlZCwgdGhlIEdVSSBmb3JrcyBhIG5ldworCQlwcm9jZXNzIGFuZCBleGl0cyB0aGUgY3VycmVudCBvbmUuICAiLWYiIHNob3VsZCBiZSB1c2VkIHdoZW4KKwkJZ3ZpbSBpcyBzdGFydGVkIGJ5IGEgcHJvZ3JhbSB0aGF0IHdpbGwgd2FpdCBmb3IgdGhlIGVkaXQKKwkJc2Vzc2lvbiB0byBmaW5pc2ggKGUuZy4sIG1haWwgb3IgcmVhZG5ld3MpLiAgSWYgeW91IHdhbnQgZ3ZpbQorCQluZXZlciB0byBmb3JrLCBpbmNsdWRlICdmJyBpbiAnZ3Vpb3B0aW9ucycgaW4geW91ciAuZ3ZpbXJjLgorCQlDYXJlZnVsOiBZb3UgY2FuIHVzZSAiLWdmIiB0byBzdGFydCB0aGUgR1VJIGluIHRoZSBmb3JlZ3JvdW5kLAorCQlidXQgIi1mZyIgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBmb3JlZ3JvdW5kIGNvbG9yLiAgfGd1aS1mb3JrfAorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi0tbm9mb3JrKgorLS1ub2ZvcmsJR1VJOiBEbyBub3QgZm9yay4gIFNhbWUgYXMgfC1mfC4KKwkJCQkJCQkqLXUqICpFMjgyKgorLXUge3ZpbXJjfQlUaGUgZmlsZSB7dmltcmN9IGlzIHJlYWQgZm9yIGluaXRpYWxpemF0aW9ucy4gIE1vc3Qgb3RoZXIKKwkJaW5pdGlhbGl6YXRpb25zIGFyZSBza2lwcGVkOyBzZWUgfGluaXRpYWxpemF0aW9ufC4gIFRoaXMgY2FuCisJCWJlIHVzZWQgdG8gc3RhcnQgVmltIGluIGEgc3BlY2lhbCBtb2RlLCB3aXRoIHNwZWNpYWwKKwkJbWFwcGluZ3MgYW5kIHNldHRpbmdzLiAgQSBzaGVsbCBhbGlhcyBjYW4gYmUgdXNlZCB0byBtYWtlCisJCXRoaXMgZWFzeSB0byB1c2UuICBGb3IgZXhhbXBsZTogPgorCQkJYWxpYXMgdmltYyB2aW0gLXUgfi8uY192aW1yYyAhKgorPAkJQWxzbyBjb25zaWRlciB1c2luZyBhdXRvY29tbWFuZHM7IHNlZSB8YXV0b2NvbW1hbmR8LgorCQlXaGVuIHt2aW1yY30gaXMgZXF1YWwgdG8gIk5PTkUiIChhbGwgdXBwZXJjYXNlKSwgYWxsCisJCWluaXRpYWxpemF0aW9ucyBmcm9tIGZpbGVzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCisJCXNraXBwZWQsIGluY2x1ZGluZyByZWFkaW5nIHRoZSAuZ3ZpbXJjIGZpbGUgd2hlbiB0aGUgR1VJCisJCXN0YXJ0cy4gIExvYWRpbmcgcGx1Z2lucyBpcyBhbHNvIHNraXBwZWQuCisJCVdoZW4ge3ZpbXJjfSBpcyBlcXVhbCB0byAiTk9SQyIgKGFsbCB1cHBlcmNhc2UpLCB0aGlzIGhhcyB0aGUKKwkJc2FtZSBlZmZlY3QgYXMgIk5PTkUiLCBidXQgbG9hZGluZyBwbHVnaW5zIGlzIG5vdCBza2lwcGVkLgorCQlVc2luZyB0aGUgIi11IiBhcmd1bWVudCBoYXMgdGhlIHNpZGUgZWZmZWN0IHRoYXQgdGhlCisJCSdjb21wYXRpYmxlJyBvcHRpb24gd2lsbCBiZSBvbiBieSBkZWZhdWx0LiAgVGhpcyBjYW4gaGF2ZQorCQl1bmV4cGVjdGVkIGVmZmVjdHMuICBTZWUgfCdjb21wYXRpYmxlJ3wuCisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLVUqICpFMjMwKgorLVUge2d2aW1yY30JVGhlIGZpbGUgImd2aW1yYyIgaXMgcmVhZCBmb3IgaW5pdGlhbGl6YXRpb25zIHdoZW4gdGhlIEdVSQorCQlzdGFydHMuICBPdGhlciBHVUkgaW5pdGlhbGl6YXRpb25zIGFyZSBza2lwcGVkLiBXaGVuIHtndmltcmN9CisJCWlzIGVxdWFsIHRvICJOT05FIiwgbm8gZmlsZSBpcyByZWFkIGZvciBpbml0aWFsaXphdGlvbnMgYXQKKwkJYWxsLgorCQlFeGNlcHRpb246IFJlYWRpbmcgdGhlIHN5c3RlbS13aWRlIG1lbnUgZmlsZSBpcyBhbHdheXMgZG9uZS4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSotaSoKKy1pIHt2aW1pbmZvfQlUaGUgZmlsZSAidmltaW5mbyIgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHZpbWluZm8KKwkJZmlsZS4gIElmIHRoZSBuYW1lICJOT05FIiBpcyB1c2VkIChhbGwgdXBwZXJjYXNlKSwgbm8gdmltaW5mbworCQlmaWxlIGlzIHJlYWQgb3Igd3JpdHRlbiwgZXZlbiBpZiAndmltaW5mbycgaXMgc2V0IG9yIHdoZW4KKwkJIjpydiIgb3IgIjp3diIgYXJlIHVzZWQuICBTZWUgYWxzbyB8dmltaW5mby1maWxlfC4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSoteCoKKy14CQlVc2UgZW5jcnlwdGlvbiB0byByZWFkL3dyaXRlIGZpbGVzLiAgV2lsbCBwcm9tcHQgZm9yIGEga2V5LAorCQl3aGljaCBpcyB0aGVuIHN0b3JlZCBpbiB0aGUgJ2tleScgb3B0aW9uLiAgQWxsIHdyaXRlcyB3aWxsCisJCXRoZW4gdXNlIHRoaXMga2V5IHRvIGVuY3J5cHQgdGhlIHRleHQuICBUaGUgJy14JyBhcmd1bWVudCBpcworCQlub3QgbmVlZGVkIHdoZW4gcmVhZGluZyBhIGZpbGUsIGJlY2F1c2UgdGhlcmUgaXMgYSBjaGVjayBpZgorCQl0aGUgZmlsZSB0aGF0IGlzIGJlaW5nIHJlYWQgaGFzIGJlZW4gZW5jcnlwdGVkLCBhbmQgVmltIGFza3MKKwkJZm9yIGEga2V5IGF1dG9tYXRpY2FsbHkuIHxlbmNyeXB0aW9ufAorCisJCQkJCQkJKi1YKgorLVgJCURvIG5vdCB0cnkgY29ubmVjdGluZyB0byB0aGUgWCBzZXJ2ZXIgdG8gZ2V0IHRoZSBjdXJyZW50CisJCXdpbmRvdyB0aXRsZSBhbmQgY29weS9wYXN0ZSB1c2luZyB0aGUgWCBjbGlwYm9hcmQuICBUaGlzCisJCWF2b2lkcyBhIGxvbmcgc3RhcnR1cCB0aW1lIHdoZW4gcnVubmluZyBWaW0gaW4gYSB0ZXJtaW5hbAorCQllbXVsYXRvciBhbmQgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIFggc2VydmVyIGlzIHNsb3cuCisJCU9ubHkgbWFrZXMgYSBkaWZmZXJlbmNlIG9uIFVuaXggb3IgVk1TLCB3aGVuIGNvbXBpbGVkIHdpdGggdGhlCisJCXwrWDExfCBmZWF0dXJlLiAgT3RoZXJ3aXNlIGl0J3MgaWdub3JlZC4KKwkJVG8gZGlzYWJsZSB0aGUgY29ubmVjdGlvbiBvbmx5IGZvciBzcGVjaWZpYyB0ZXJtaW5hbHMsIHNlZSB0aGUKKwkJJ2NsaXBib2FyZCcgb3B0aW9uLgorCQlXaGVuIHRoZSBYMTEgU2Vzc2lvbiBNYW5hZ2VtZW50IFByb3RvY29sIChYU01QKSBoYW5kbGVyIGhhcworCQliZWVuIGJ1aWx0IGluLCB0aGUgLVggb3B0aW9uIGFsc28gZGlzYWJsZXMgdGhhdCBjb25uZWN0aW9uIGFzCisJCWl0LCB0b28sIG1heSBoYXZlIHVuZGVzaXJhYmxlIGRlbGF5cy4KKwkJV2hlbiB0aGUgY29ubmVjdGlvbiBpcyBkZXNpcmVkIGxhdGVyIGFueXdheSAoZS5nLiwgZm9yCisJCWNsaWVudC1zZXJ2ZXIgbWVzc2FnZXMpLCBjYWxsIHRoZSB8c2VydmVybGlzdCgpfCBmdW5jdGlvbi4KKwkJVGhpcyBkb2VzIG5vdCBlbmFibGUgdGhlIFhTTVAgaGFuZGxlciB0aG91Z2guCisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLXMqCistcyB7c2NyaXB0aW59CVRoZSBzY3JpcHQgZmlsZSAic2NyaXB0aW4iIGlzIHJlYWQuICBUaGUgY2hhcmFjdGVycyBpbiB0aGUKKwkJZmlsZSBhcmUgaW50ZXJwcmV0ZWQgYXMgaWYgeW91IGhhZCB0eXBlZCB0aGVtLiAgVGhlIHNhbWUgY2FuCisJCWJlIGRvbmUgd2l0aCB0aGUgY29tbWFuZCAiOnNvdXJjZSEge3NjcmlwdGlufSIuICBJZiB0aGUgZW5kCisJCW9mIHRoZSBmaWxlIGlzIHJlYWNoZWQgYmVmb3JlIHRoZSBlZGl0b3IgZXhpdHMsIGZ1cnRoZXIKKwkJY2hhcmFjdGVycyBhcmUgcmVhZCBmcm9tIHRoZSBrZXlib2FyZC4gIE9ubHkgd29ya3Mgd2hlbiBub3QKKwkJc3RhcnRlZCBpbiBFeCBtb2RlLCBzZWUgfC1zLWV4fC4gIFNlZSBhbHNvIHxjb21wbGV4LXJlcGVhdHwuCisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLXcqCistdyB7c2NyaXB0b3V0fQlBbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCB5b3UgdHlwZSBhcmUgcmVjb3JkZWQgaW4gdGhlIGZpbGUKKwkJInNjcmlwdG91dCIsIHVudGlsIHlvdSBleGl0IFZpbS4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50CisJCXRvIGNyZWF0ZSBhIHNjcmlwdCBmaWxlIHRvIGJlIHVzZWQgd2l0aCAidmltIC1zIiBvcgorCQkiOnNvdXJjZSEiLiAgV2hlbiB0aGUgInNjcmlwdG91dCIgZmlsZSBhbHJlYWR5IGV4aXN0cywgbmV3CisJCWNoYXJhY3RlcnMgYXJlIGFwcGVuZGVkLiAgU2VlIGFsc28gfGNvbXBsZXgtcmVwZWF0fC4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSotVyoKKy1XIHtzY3JpcHRvdXR9CUxpa2UgLXcsIGJ1dCBkbyBub3QgYXBwZW5kLCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgZmlsZS4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSotd19ucioKKy13e251bWJlcn0JRG9lcyBub3RoaW5nLiAgVGhpcyB3YXMgaW5jbHVkZWQgZm9yIFZpLWNvbXBhdGliaWxpdHkuICBJbiBWaQorCQlpdCBzZXRzIHRoZSAnd2luZG93JyBvcHRpb24sIHdoaWNoIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBWaW0uCisKKy0tcmVtb3RlIFsre2NtZH1dIHtmaWxlfSAuLi4KKwkJT3BlbiB0aGUge2ZpbGV9IGluIGFub3RoZXIgVmltIHRoYXQgZnVuY3Rpb25zIGFzIGEgc2VydmVyLgorCQlBbnkgbm9uLWZpbGUgYXJndW1lbnRzIG11c3QgY29tZSBiZWZvcmUgdGhpcy4KKwkJU2VlIHwtLXJlbW90ZXwuIHtub3QgaW4gVml9CisKKy0tcmVtb3RlLXNpbGVudCBbK3tjbWR9XSB7ZmlsZX0gLi4uCisJCUxpa2UgLS1yZW1vdGUsIGJ1dCBkb24ndCBjb21wbGFpbiBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIuCisJCVNlZSB8LS1yZW1vdGUtc2lsZW50fC4ge25vdCBpbiBWaX0KKworLS1yZW1vdGUtd2FpdCBbK3tjbWR9XSB7ZmlsZX0gLi4uCisJCUxpa2UgLS1yZW1vdGUsIGJ1dCB3YWl0IGZvciB0aGUgc2VydmVyIHRvIGZpbmlzaCBlZGl0aW5nIHRoZQorCQlmaWxlKHMpLgorCQlTZWUgfC0tcmVtb3RlLXdhaXR8LiB7bm90IGluIFZpfQorCistLXJlbW90ZS13YWl0LXNpbGVudCBbK3tjbWR9XSB7ZmlsZX0gLi4uCisJCUxpa2UgLS1yZW1vdGUtd2FpdCwgYnV0IGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlci4KKwkJU2VlIHwtLXJlbW90ZS13YWl0LXNpbGVudHwuIHtub3QgaW4gVml9CisKKy0tc2VydmVybmFtZSB7bmFtZX0KKwkJU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgVmltIHNlcnZlciB0byBzZW5kIHRvIG9yIHRvIGJlY29tZS4KKwkJU2VlIHwtLXNlcnZlcm5hbWV8LiB7bm90IGluIFZpfQorCistLXJlbW90ZS1zZW5kIHtrZXlzfQorCQlTZW5kIHtrZXlzfSB0byBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQuCisJCVNlZSB8LS1yZW1vdGUtc2VuZHwuIHtub3QgaW4gVml9CisKKy0tcmVtb3RlLWV4cHIge2V4cHJ9CisJCUV2YWx1YXRlIHtleHByfSBpbiBhbm90aGVyIFZpbSB0aGF0IGZ1bmN0aW9ucyBhcyBhIHNlcnZlci4KKwkJVGhlIHJlc3VsdCBpcyBwcmludGVkIG9uIHN0ZG91dC4KKwkJU2VlIHwtLXJlbW90ZS1leHByfC4ge25vdCBpbiBWaX0KKworLS1zZXJ2ZXJsaXN0CU91dHB1dCBhIGxpc3Qgb2YgVmltIHNlcnZlciBuYW1lcyBhbmQgZXhpdC4gIFNlZQorCQlTZWUgfC0tc2VydmVybGlzdHwuIHtub3QgaW4gVml9CisKKy0tc29ja2V0aWQge2lkfQkJCQkJCSotLXNvY2tldGlkKgorCQlHVEsrIEdVSSBWaW0gb25seS4gIE1ha2UgZ3ZpbSB0cnkgdG8gdXNlIEd0a1BsdWcgbWVjaGFuaXNtLCBzbworCQl0aGF0IGl0IHJ1bnMgaW5zaWRlIGFub3RoZXIgd2luZG93LiAgU2VlIHxndWktZ3RrLXNvY2tldGlkfAorCQlmb3IgZGV0YWlscy4ge25vdCBpbiBWaX0KKworLS1lY2hvLXdpZAkJCQkJCSotLWVjaG8td2lkKgorCQlHVEsrIEdVSSBWaW0gb25seS4gIE1ha2UgZ3ZpbSBlY2hvIHRoZSBXaW5kb3cgSUQgb24gc3Rkb3V0LAorCQl3aGljaCBjYW4gYmUgdXNlZCB0byBydW4gZ3ZpbSBpbiBhIGtwYXJ0IHdpZGdldC4gIFRoZSBmb3JtYXQKKwkJb2YgdGhlIG91dHB1dCBpczogPgorCQkJV0lEOiAxMjM0NVxuCis8CQl7bm90IGluIFZpfQorCistLXJvbGUge3JvbGV9CQkJCQkJKi0tcm9sZSoKKwkJR1RLKyAyIEdVSSBvbmx5LiAgU2V0IHRoZSByb2xlIG9mIHRoZSBtYWluIHdpbmRvdyB0byB7cm9sZX0uCisJCVRoZSB3aW5kb3cgcm9sZSBjYW4gYmUgdXNlZCBieSBhIHdpbmRvdyBtYW5hZ2VyIHRvIHVuaXF1ZWx5CisJCWlkZW50aWZ5IGEgd2luZG93LCBpbiBvcmRlciB0byByZXN0b3JlIHdpbmRvdyBwbGFjZW1lbnQgYW5kCisJCXN1Y2guICBUaGUgLS1yb2xlIGFyZ3VtZW50IGlzIHBhc3NlZCBhdXRvbWF0aWNhbGx5IHdoZW4KKwkJcmVzdG9yaW5nIHRoZSBzZXNzaW9uIG9uIGxvZ2luLiAgU2VlIHxndWktZ25vbWUtc2Vzc2lvbnwKKwkJe25vdCBpbiBWaX0KKworLVAge3BhcmVudC10aXRsZX0JCQkJKi1QKiAqTURJKiAqRTY3MSogKkU2NzIqCisJCVdpbjMyIG9ubHk6IFNwZWNpZnkgdGhlIHRpdGxlIG9mIHRoZSBwYXJlbnQgYXBwbGljYXRpb24uICBXaGVuCisJCXBvc3NpYmxlLCBWaW0gd2lsbCBydW4gaW4gYW4gTURJIHdpbmRvdyBpbnNpZGUgdGhlCisJCWFwcGxpY2F0aW9uLgorCQl7cGFyZW50LXRpdGxlfSBtdXN0IGFwcGVhciBpbiB0aGUgd2luZG93IHRpdGxlIG9mIHRoZSBwYXJlbnQKKwkJYXBwbGljYXRpb24uICBNYWtlIHN1cmUgdGhhdCBpdCBpcyBzcGVjaWZpYyBlbm91Z2guCisJCU5vdGUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMgc3RpbGwgcHJpbWl0aXZlLiAgSXQgd29uJ3QKKwkJd29yayB3aXRoIGFsbCBhcHBsaWNhdGlvbnMgYW5kIHRoZSBtZW51IGRvZXNuJ3Qgd29yay4KKworLW5iCQkJCQkJCSotbmIqCistbmI9e2ZuYW1lfQorLW5iOntob3N0bmFtZX06e2FkZHJ9OntwYXNzd29yZH0KKwkJQXR0ZW1wdCBjb25uZWN0aW5nIHRvIE5ldGJlYW5zIGFuZCBiZWNvbWUgYW4gZWRpdG9yIHNlcnZlciBmb3IKKwkJaXQuICBUaGUgc2Vjb25kIGZvcm0gc3BlY2lmaWVzIGEgZmlsZSB0byByZWFkIGNvbm5lY3Rpb24gaW5mbworCQlmcm9tLiAgVGhlIHRoaXJkIGZvcm0gc3BlY2lmaWVzIHRoZSBob3N0bmFtZSwgYWRkcmVzcyBhbmQKKwkJcGFzc3dvcmQgZm9yIGNvbm5lY3RpbmcgdG8gTmV0YmVhbnMuIHxuZXRiZWFucy1ydW58CisKK0V4YW1wbGUgZm9yIHVzaW5nIGEgc2NyaXB0IGZpbGUgdG8gY2hhbmdlIGEgbmFtZSBpbiBzZXZlcmFsIGZpbGVzOgorCUNyZWF0ZSBhIGZpbGUgInN1YnMudmkiIGNvbnRhaW5pbmcgc3Vic3RpdHV0ZSBjb21tYW5kcyBhbmQgYSA6d3EKKwljb21tYW5kOiA+CisJCTolcy9Kb25lcy9TbWl0aC9nCisJCTolcy9BbGxlbi9QZXRlci9nCisJCTp3cQorPAorCUV4ZWN1dGUgVmltIG9uIGFsbCBmaWxlcyB5b3Ugd2FudCB0byBjaGFuZ2U6ID4KKworCQlmb3JlYWNoIGkgKCAqLmxldCApIHZpbSAtcyBzdWJzLnZpICRpCisKK0lmIHRoZSBleGVjdXRhYmxlIGlzIGNhbGxlZCAidmlldyIsIFZpbSB3aWxsIHN0YXJ0IGluIFJlYWRvbmx5IG1vZGUuICBUaGlzIGlzCit1c2VmdWwgaWYgeW91IGNhbiBtYWtlIGEgaGFyZCBvciBzeW1ib2xpYyBsaW5rIGZyb20gInZpZXciIHRvICJ2aW0iLgorU3RhcnRpbmcgaW4gUmVhZG9ubHkgbW9kZSBjYW4gYWxzbyBiZSBkb25lIHdpdGggInZpbSAtUiIuCisKK0lmIHRoZSBleGVjdXRhYmxlIGlzIGNhbGxlZCAiZXgiLCBWaW0gd2lsbCBzdGFydCBpbiAiRXgiIG1vZGUuICBUaGlzIG1lYW5zIGl0Cit3aWxsIGFjY2VwdCBvbmx5ICI6IiBjb21tYW5kcy4gIEJ1dCB3aGVuIHRoZSAiLXYiIGFyZ3VtZW50IGlzIGdpdmVuLCBWaW0gd2lsbAorc3RhcnQgaW4gTm9ybWFsIG1vZGUgYW55d2F5LgorCitBZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgYXZhaWxhYmxlIG9uIHVuaXggbGlrZSBzeXN0ZW1zIHdoZW4gY29tcGlsZWQgd2l0aAorWDExIEdVSSBzdXBwb3J0LiAgU2VlIHxndWktcmVzb3VyY2VzfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBWaW0gb24gdGhlIEFtaWdhCQkJCQkqc3RhcnRpbmctYW1pZ2EqCisKK1N0YXJ0aW5nIFZpbSBmcm9tIHRoZSBXb3JrYmVuY2gJCQkJKndvcmtiZW5jaCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVmltIGNhbiBiZSBzdGFydGVkIGZyb20gdGhlIFdvcmtiZW5jaCBieSBjbGlja2luZyBvbiBpdHMgaWNvbiB0d2ljZS4gIEl0IHdpbGwKK3RoZW4gc3RhcnQgd2l0aCBhbiBlbXB0eSBidWZmZXIuCisKK1ZpbSBjYW4gYmUgc3RhcnRlZCB0byBlZGl0IG9uZSBvciBtb3JlIGZpbGVzIGJ5IHVzaW5nIGEgIlByb2plY3QiIGljb24uICBUaGUKKyJEZWZhdWx0IFRvb2wiIG9mIHRoZSBpY29uIG11c3QgYmUgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIFZpbSBleGVjdXRhYmxlLgorVGhlIG5hbWUgb2YgdGhlICIuaW5mbyIgZmlsZSBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBuYW1lIG9mIHRoZSB0ZXh0IGZpbGUuCitCeSBjbGlja2luZyBvbiB0aGlzIGljb24gdHdpY2UsIFZpbSB3aWxsIGJlIHN0YXJ0ZWQgd2l0aCB0aGUgZmlsZSBuYW1lIGFzCitjdXJyZW50IGZpbGUgbmFtZSwgd2hpY2ggd2lsbCBiZSByZWFkIGludG8gdGhlIGJ1ZmZlciAoaWYgaXQgZXhpc3RzKS4gIFlvdSBjYW4KK2VkaXQgbXVsdGlwbGUgZmlsZXMgYnkgcHJlc3NpbmcgdGhlIHNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyBvbiBpY29ucywgYW5kCitjbGlja2luZyB0d2ljZSBvbiB0aGUgbGFzdCBvbmUuICBUaGUgIkRlZmF1bHQgVG9vbCIgZm9yIGFsbCB0aGVzZSBpY29ucyBtdXN0CitiZSB0aGUgc2FtZS4KKworSXQgaXMgbm90IHBvc3NpYmxlIHRvIGdpdmUgYXJndW1lbnRzIHRvIFZpbSwgb3RoZXIgdGhhbiBmaWxlIG5hbWVzLCBmcm9tIHRoZQord29ya2JlbmNoLgorCitWaW0gd2luZG93CQkJCQkJKmFtaWdhLXdpbmRvdyoKKy0tLS0tLS0tLS0KKworVmltIHdpbGwgcnVuIGluIHRoZSBDTEkgd2luZG93IHdoZXJlIGl0IHdhcyBzdGFydGVkLiAgSWYgVmltIHdhcyBzdGFydGVkIHdpdGgKK3RoZSAicnVuIiBvciAicnVuYmFjayIgY29tbWFuZCwgb3IgaWYgVmltIHdhcyBzdGFydGVkIGZyb20gdGhlIHdvcmtiZW5jaCwgaXQKK3dpbGwgb3BlbiBhIHdpbmRvdyBvZiBpdHMgb3duLgorCitUZWNobmljYWwgZGV0YWlsOgorCVRvIG9wZW4gdGhlIG5ldyB3aW5kb3cgYSBsaXR0bGUgdHJpY2sgaXMgdXNlZC4gIEFzIHNvb24gYXMgVmltCisJcmVjb2duaXplcyB0aGF0IGl0IGRvZXMgbm90IHJ1biBpbiBhIG5vcm1hbCBDTEkgd2luZG93LCBpdCB3aWxsCisJY3JlYXRlIGEgc2NyaXB0IGZpbGUgaW4gInQ6Ii4gIFRoaXMgc2NyaXB0IGZpbGUgY29udGFpbnMgdGhlIHNhbWUKKwljb21tYW5kIGFzIHRoZSBvbmUgVmltIHdhcyBzdGFydGVkIHdpdGgsIGFuZCBhbiAiZW5kY2xpIiBjb21tYW5kLgorCVRoaXMgc2NyaXB0IGZpbGUgaXMgdGhlbiBleGVjdXRlZCB3aXRoIGEgIm5ld2NsaSIgY29tbWFuZCAodGhlICJjOnJ1biIKKwlhbmQgImM6bmV3Y2xpIiBjb21tYW5kcyBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgdG8gd29yaykuICBUaGUgc2NyaXB0CisJZmlsZSB3aWxsIGhhbmcgYXJvdW5kIHVudGlsIHJlYm9vdCwgb3IgdW50aWwgeW91IGRlbGV0ZSBpdC4gIFRoaXMKKwltZXRob2QgaXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSAiOnNoIiBhbmQgIjohIiBjb21tYW5kcyB0byB3b3JrCisJY29ycmVjdGx5LiAgQnV0IHdoZW4gVmltIHdhcyBzdGFydGVkIHdpdGggdGhlIC1mIG9wdGlvbiAoZm9yZWdyb3VuZAorCW1vZGUpLCB0aGlzIG1ldGhvZCBpcyBub3QgdXNlZC4gIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdAorCXdoZW4gYSBwcm9ncmFtIHN0YXJ0cyBWaW0gd2l0aCB0aGUgLWYgb3B0aW9uIGl0IHdpbGwgd2FpdCBmb3IgVmltIHRvCisJZXhpdC4gIFdpdGggdGhlIHNjcmlwdCB0cmljaywgdGhlIGNhbGxpbmcgcHJvZ3JhbSBkb2VzIG5vdCBrbm93IHdoZW4KKwlWaW0gZXhpdHMuICBUaGUgLWYgb3B0aW9uIGNhbiBiZSB1c2VkIHdoZW4gVmltIGlzIHN0YXJ0ZWQgYnkgYSBtYWlsCisJcHJvZ3JhbSB3aGljaCBhbHNvIHdhaXRzIGZvciB0aGUgZWRpdCBzZXNzaW9uIHRvIGZpbmlzaC4gIEFzIGEKKwljb25zZXF1ZW5jZSwgdGhlICI6c2giIGFuZCAiOiEiIGNvbW1hbmRzIGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gdGhlCisJLWYgb3B0aW9uIGlzIHVzZWQuCisKK1ZpbSB3aWxsIGF1dG9tYXRpY2FsbHkgcmVjb2duaXplIHRoZSB3aW5kb3cgc2l6ZSBhbmQgcmVhY3QgdG8gd2luZG93CityZXNpemluZy4gIFVuZGVyIEFtaWdhIERPUyAxLjMsIGl0IGlzIGFkdmlzZWQgdG8gdXNlIHRoZSBmYXN0Zm9udHMgcHJvZ3JhbSwKKyJGRiIsIHRvIHNwZWVkIHVwIGRpc3BsYXkgcmVkcmF3aW5nLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFJ1bm5pbmcgZVZpbQkJCQkJCQkqZXZpbS1rZXlzKgorCitFVmltIHJ1bnMgVmltIGFzIGNsaWNrLWFuZC10eXBlIGVkaXRvci4gIFRoaXMgaXMgdmVyeSB1bmxpa2UgdGhlIG9yaWdpbmFsIFZpCitpZGVhLiAgQnV0IGl0IGhlbHBzIGZvciBwZW9wbGUgdGhhdCBkb24ndCB1c2UgVmltIG9mdGVuIGVub3VnaCB0byBsZWFybiB0aGUKK2NvbW1hbmRzLiAgSG9wZWZ1bGx5IHRoZXkgd2lsbCBmaW5kIG91dCB0aGF0IGxlYXJuaW5nIHRvIHVzZSBOb3JtYWwgbW9kZQorY29tbWFuZHMgd2lsbCBtYWtlIHRoZWlyIGVkaXRpbmcgbXVjaCBtb3JlIGVmZmVjdGl2ZS4KKworSW4gRXZpbSB0aGVzZSBvcHRpb25zIGFyZSBjaGFuZ2VkIGZyb20gdGhlaXIgZGVmYXVsdCB2YWx1ZToKKworCTpzZXQgbm9jb21wYXRpYmxlCVVzZSBWaW0gaW1wcm92ZW1lbnRzCisJOnNldCBpbnNlcnRtb2RlCQlSZW1haW4gaW4gSW5zZXJ0IG1vZGUgbW9zdCBvZiB0aGUgdGltZQorCTpzZXQgaGlkZGVuCQlLZWVwIGludmlzaWJsZSBidWZmZXJzIGxvYWRlZAorCTpzZXQgYmFja3VwCQlLZWVwIGJhY2t1cCBmaWxlcyAobm90IGZvciBWTVMpCisJOnNldCBiYWNrc3BhY2U9MglCYWNrc3BhY2Ugb3ZlciBldmVyeXRoaW5nCisJOnNldCBhdXRvaW5kZW50CQlhdXRvLWluZGVudCBuZXcgbGluZXMKKwk6c2V0IGhpc3Rvcnk9NTAJCWtlZXAgNTAgbGluZXMgb2YgRXggY29tbWFuZHMKKwk6c2V0IHJ1bGVyCQlzaG93IHRoZSBjdXJzb3IgcG9zaXRpb24KKwk6c2V0IGluY3NlYXJjaAkJc2hvdyBtYXRjaGVzIGhhbGZ3YXkgdHlwaW5nIGEgcGF0dGVybgorCTpzZXQgbW91c2U9YQkJdXNlIHRoZSBtb3VzZSBpbiBhbGwgbW9kZXMKKwk6c2V0IGhsc2VhcmNoCQloaWdobGlnaHQgYWxsIG1hdGNoZXMgZm9yIGEgc2VhcmNoIHBhdHRlcm4KKwk6c2V0IHdoaWNod3JhcCs9PCw+LFssXSAgPExlZnQ+IGFuZCA8UmlnaHQ+IHdyYXAgYXJvdW5kIGxpbmUgYnJlYWtzCisJOnNldCBndWlvcHRpb25zLT1hCW5vbi1Vbml4IG9ubHk6IGRvbid0IGRvIGF1dG8tc2VsZWN0CisKK0tleSBtYXBwaW5nczoKKwk8RG93bj4JCW1vdmVzIGJ5IHNjcmVlbiBsaW5lcyByYXRoZXIgdGhhbiBmaWxlIGxpbmVzCisJPFVwPgkJaWRlbQorCVEJCWRvZXMgImdxIiwgZm9ybWF0dGluZywgaW5zdGVhZCBvZiBFeCBtb2RlCisJPEJTPgkJaW4gVmlzdWFsIG1vZGU6IGRlbGV0ZXMgdGhlIHNlbGVjdGlvbgorCUNUUkwtWAkJaW4gVmlzdWFsIG1vZGU6IEN1dCB0byBjbGlwYm9hcmQKKwk8Uy1EZWw+CQlpZGVtCisJQ1RSTC1DCQlpbiBWaXN1YWwgbW9kZTogQ29weSB0byBjbGlwYm9hcmQKKwk8Qy1JbnNlcnQ+CWlkZW0KKwlDVFJMLVYJCVBhc3RlcyBmcm9tIHRoZSBjbGlwYm9hcmQgKGluIGFueSBtb2RlKQorCTxTLUluc2VydD4JaWRlbQorCUNUUkwtUQkJZG8gd2hhdCBDVFJMLVYgdXNlZCB0byBkbworCUNUUkwtWgkJdW5kbworCUNUUkwtWQkJcmVkbworCTxNLVNwYWNlPglzeXN0ZW0gbWVudQorCUNUUkwtQQkJc2VsZWN0IGFsbAorCTxDLVRhYj4JCW5leHQgd2luZG93LCBDVFJMLVcgdworCTxDLUY0PgkJY2xvc2Ugd2luZG93LCBDVFJMLVcgYworCitBZGRpdGlvbmFsbHk6CistICI6YmVoYXZlIG1zd2luIiBpcyB1c2VkIHw6YmVoYXZlfAorLSBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIGVuYWJsZWQKKy0gZmlsZXR5cGUgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIGZpbGV0eXBlIHBsdWdpbnMgYW5kIGluZGVudGluZyBpcyBlbmFibGVkCistIGluIGEgdGV4dCBmaWxlICd0ZXh0d2lkdGgnIGlzIHNldCB0byA3OAorCitPbmUgaGludDogSWYgeW91IHdhbnQgdG8gZ28gdG8gTm9ybWFsIG1vZGUgdG8gYmUgYWJsZSB0byB0eXBlIGEgc2VxdWVuY2Ugb2YKK2NvbW1hbmRzLCB1c2UgQ1RSTC1MLiB8aV9DVFJMLUx8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gSW5pdGlhbGl6YXRpb24JCQkJKmluaXRpYWxpemF0aW9uKiAqc3RhcnR1cCoKKworVGhpcyBzZWN0aW9uIGlzIGFib3V0IHRoZSBub24tR1VJIHZlcnNpb24gb2YgVmltLiAgU2VlIHxndWktZm9ya3wgZm9yCithZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIHdoZW4gc3RhcnRpbmcgdGhlIEdVSS4KKworQXQgc3RhcnR1cCwgVmltIGNoZWNrcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGZpbGVzIGFuZCBzZXRzIHZhbHVlcworYWNjb3JkaW5nbHkuICBWaW0gcHJvY2VlZHMgaW4gdGhpcyBvcmRlcjoKKworMS4gU2V0IHRoZSAnc2hlbGwnIGFuZCAndGVybScgb3B0aW9uCQkqU0hFTEwqICpDT01TUEVDKiAqVEVSTSoKKwlUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgU0hFTEwsIGlmIGl0IGV4aXN0cywgaXMgdXNlZCB0byBzZXQgdGhlCisJJ3NoZWxsJyBvcHRpb24uICBPbiBNUy1ET1MgYW5kIFdpbjMyLCB0aGUgQ09NU1BFQyB2YXJpYWJsZSBpcyB1c2VkCisJaWYgU0hFTEwgaXMgbm90IHNldC4KKwlUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVEVSTSwgaWYgaXQgZXhpc3RzLCBpcyB1c2VkIHRvIHNldCB0aGUgJ3Rlcm0nCisJb3B0aW9uLgorCisyLiBQcm9jZXNzIHRoZSBhcmd1bWVudHMKKwlUaGUgb3B0aW9ucyBhbmQgZmlsZSBuYW1lcyBmcm9tIHRoZSBjb21tYW5kIHRoYXQgc3RhcnQgVmltIGFyZQorCWluc3BlY3RlZC4gIEJ1ZmZlcnMgYXJlIGNyZWF0ZWQgZm9yIGFsbCBmaWxlcyAoYnV0IG5vdCBsb2FkZWQgeWV0KS4KKworMy4gRXhlY3V0ZSBFeCBjb21tYW5kcywgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kL29yIGZpbGVzCisJQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgcmVhZCBhcyBvbmUgRXggY29tbWFuZCBsaW5lLCB3aGVyZSBtdWx0aXBsZQorCWNvbW1hbmRzIG11c3QgYmUgc2VwYXJhdGVkIHdpdGggJ3wnIG9yICI8Tkw+Ii4KKwkJCQkJCQkJKnZpbXJjKiAqZXhyYyoKKwlBIGZpbGUgdGhhdCBjb250YWlucyBpbml0aWFsaXphdGlvbiBjb21tYW5kcyBpcyBjYWxsZWQgYSAidmltcmMiIGZpbGUuCisJRWFjaCBsaW5lIGluIGEgdmltcmMgZmlsZSBpcyBleGVjdXRlZCBhcyBhbiBFeCBjb21tYW5kIGxpbmUuICBJdCBpcworCXNvbWV0aW1lcyBhbHNvIHJlZmVycmVkIHRvIGFzICJleHJjIiBmaWxlLiAgVGhleSBhcmUgdGhlIHNhbWUgdHlwZSBvZgorCWZpbGUsIGJ1dCAiZXhyYyIgaXMgd2hhdCBWaSBhbHdheXMgdXNlZCwgInZpbXJjIiBpcyBhIFZpbSBzcGVjaWZpYworCW5hbWUuICBBbHNvIHNlZSB8dmltcmMtaW50cm98LgorCisJUmVjb21tZW5kZWQgcGxhY2UgZm9yIHlvdXIgcGVyc29uYWwgaW5pdGlhbGl6YXRpb25zOgorCQlVbml4CQkgICAgJEhPTUUvLnZpbXJjCisJCU9TLzIJCSAgICAkSE9NRS8udmltcmMgb3IgJFZJTS8udmltcmMgKG9yIF92aW1yYykKKwkJTVMtRE9TIGFuZCBXaW4zMiAgICAkSE9NRS9fdmltcmMgb3IgJFZJTS9fdmltcmMKKwkJQW1pZ2EJCSAgICBzOi52aW1yYyBvciAkVklNLy52aW1yYworCisJSWYgVmltIHdhcyBzdGFydGVkIHdpdGggIi11IGZpbGVuYW1lIiwgdGhlIGZpbGUgImZpbGVuYW1lIiBpcyB1c2VkLgorCUFsbCBmb2xsb3dpbmcgaW5pdGlhbGl6YXRpb25zIHVudGlsIDQuIGFyZSBza2lwcGVkLgorCSJ2aW0gLXUgTk9SQyIgY2FuIGJlIHVzZWQgdG8gc2tpcCB0aGVzZSBpbml0aWFsaXphdGlvbnMgd2l0aG91dAorCXJlYWRpbmcgYSBmaWxlLiAgInZpbSAtdSBOT05FIiBhbHNvIHNraXBzIGxvYWRpbmcgcGx1Z2lucy4gIHwtdXwKKworCUlmIFZpbSB3YXMgc3RhcnRlZCBpbiBFeCBtb2RlIHdpdGggdGhlICItcyIgYXJndW1lbnQsIGFsbCBmb2xsb3dpbmcKKwlpbml0aWFsaXphdGlvbnMgdW50aWwgNC4gYXJlIHNraXBwZWQuICBPbmx5IHRoZSAiLXUiIG9wdGlvbiBpcworCWludGVycHJldGVkLgorCQkJCQkJCSpldmltLnZpbSoKKyAgICAgYS4gSWYgdmltIHdhcyBzdGFydGVkIGFzIHxldmltfCBvciB8ZXZpZXd8IG9yIHdpdGggdGhlIHwteXwgYXJndW1lbnQsIHRoZQorCXNjcmlwdCAkVklNUlVOVElNRS9ldmltLnZpbSB3aWxsIGJlIGxvYWRlZC4KKwkJCQkJCQkqc3lzdGVtLXZpbXJjKgorICAgICBiLiBGb3IgVW5peCwgTVMtRE9TLCBNUy1XaW5kb3dzLCBPUy8yLCBWTVMsIE1hY2ludG9zaCwgUklTQy1PUyBhbmQgQW1pZ2EKKwl0aGUgc3lzdGVtIHZpbXJjIGZpbGUgaXMgcmVhZCBmb3IgaW5pdGlhbGl6YXRpb25zLiAgVGhlIHBhdGggb2YgdGhpcworCWZpbGUgaXMgc2hvd24gd2l0aCB0aGUgIjp2ZXJzaW9uIiBjb21tYW5kLiAgTW9zdGx5IGl0J3MgIiRWSU0vdmltcmMiLgorCU5vdGUgdGhhdCB0aGlzIGZpbGUgaXMgQUxXQVlTIHJlYWQgaW4gJ2NvbXBhdGlibGUnIG1vZGUsIHNpbmNlIHRoZQorCWF1dG9tYXRpYyByZXNldHRpbmcgb2YgJ2NvbXBhdGlibGUnIGlzIG9ubHkgZG9uZSBsYXRlci4gIEFkZCBhICI6c2V0CisJbm9jcCIgY29tbWFuZCBpZiB5b3UgbGlrZS4KKworCQkJICAqVklNSU5JVCogKi52aW1yYyogKl92aW1yYyogKkVYSU5JVCogKi5leHJjKiAqX2V4cmMqCisgICAgIGMuIEZvdXIgcGxhY2VzIGFyZSBzZWFyY2hlZCBmb3IgaW5pdGlhbGl6YXRpb25zLiAgVGhlIGZpcnN0IHRoYXQgZXhpc3RzCisJaXMgdXNlZCwgdGhlIG90aGVycyBhcmUgaWdub3JlZC4KKwktICBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVklNSU5JVCAoc2VlIGFsc28gfGNvbXBhdGlibGUtZGVmYXVsdHwpICgqKQorCSAgIFRoZSB2YWx1ZSBvZiAkVklNSU5JVCBpcyB1c2VkIGFzIGFuIEV4IGNvbW1hbmQgbGluZS4KKwktICBUaGUgdXNlciB2aW1yYyBmaWxlKHMpOgorCQkgICAgIiRIT01FLy52aW1yYyIJKGZvciBVbml4IGFuZCBPUy8yKSAoKikKKwkJICAgICJzOi52aW1yYyIJCShmb3IgQW1pZ2EpICgqKQorCQkgICAgImhvbWU6LnZpbXJjIgkoZm9yIEFtaWdhKSAoKikKKwkJICAgICIkVklNLy52aW1yYyIJKGZvciBPUy8yIGFuZCBBbWlnYSkgKCopCisJCSAgICAiJEhPTUUvX3ZpbXJjIgkoZm9yIE1TLURPUyBhbmQgV2luMzIpICgqKQorCQkgICAgIiRWSU1cX3ZpbXJjIgkoZm9yIE1TLURPUyBhbmQgV2luMzIpICgqKQorCQlOb3RlOiBGb3IgVW5peCwgT1MvMiBhbmQgQW1pZ2EsIHdoZW4gIi52aW1yYyIgZG9lcyBub3QgZXhpc3QsCisJCSJfdmltcmMiIGlzIGFsc28gdHJpZWQsIGluIGNhc2UgYW4gTVMtRE9TIGNvbXBhdGlibGUgZmlsZQorCQlzeXN0ZW0gaXMgdXNlZC4gIEZvciBNUy1ET1MgYW5kIFdpbjMyICIudmltcmMiIGlzIGNoZWNrZWQKKwkJYWZ0ZXIgIl92aW1yYyIsIGluIGNhc2UgbG9uZyBmaWxlIG5hbWVzIGFyZSB1c2VkLgorCQlOb3RlOiBGb3IgTVMtRE9TIGFuZCBXaW4zMiwgIiRIT01FIiBpcyBjaGVja2VkIGZpcnN0LiAgSWYgbm8KKwkJIl92aW1yYyIgb3IgIi52aW1yYyIgaXMgZm91bmQgdGhlcmUsICIkVklNIiBpcyB0cmllZC4KKwkJU2VlIHwkVklNfCBmb3Igd2hlbiAkVklNIGlzIG5vdCBzZXQuCisJLSAgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEVYSU5JVC4KKwkgICBUaGUgdmFsdWUgb2YgJEVYSU5JVCBpcyB1c2VkIGFzIGFuIEV4IGNvbW1hbmQgbGluZS4KKwktICBUaGUgdXNlciBleHJjIGZpbGUocykuICBTYW1lIGFzIGZvciB0aGUgdXNlciB2aW1yYyBmaWxlLCBidXQgd2l0aAorCSAgICJ2aW1yYyIgcmVwbGFjZWQgYnkgImV4cmMiLiAgQnV0IHdpdGhvdXQgdGhlICgqKSEKKworICAgICBkLiBJZiB0aGUgJ2V4cmMnIG9wdGlvbiBpcyBvbiAod2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0KSwgdGhlIGN1cnJlbnQKKwlkaXJlY3RvcnkgaXMgc2VhcmNoZWQgZm9yIGZvdXIgZmlsZXMuICBUaGUgZmlyc3QgdGhhdCBleGlzdHMgaXMgdXNlZCwKKwl0aGUgb3RoZXJzIGFyZSBpZ25vcmVkLgorCS0gIFRoZSBmaWxlICIudmltcmMiIChmb3IgVW5peCwgQW1pZ2EgYW5kIE9TLzIpICgqKQorCQkgICAgIl92aW1yYyIgKGZvciBNUy1ET1MgYW5kIFdpbjMyKSAoKikKKwktICBUaGUgZmlsZSAiX3ZpbXJjIiAoZm9yIFVuaXgsIEFtaWdhIGFuZCBPUy8yKSAoKikKKwkJICAgICIudmltcmMiIChmb3IgTVMtRE9TIGFuZCBXaW4zMikgKCopCisJLSAgVGhlIGZpbGUgIi5leHJjIiAgKGZvciBVbml4LCBBbWlnYSBhbmQgT1MvMikKKwkJICAgICJfZXhyYyIgIChmb3IgTVMtRE9TIGFuZCBXaW4zMikKKwktICBUaGUgZmlsZSAiX2V4cmMiICAoZm9yIFVuaXgsIEFtaWdhIGFuZCBPUy8yKQorCQkgICAgIi5leHJjIiAgKGZvciBNUy1ET1MgYW5kIFdpbjMyKQorCisgICAgICgqKSBVc2luZyB0aGlzIGZpbGUgb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBjYXVzZSAnY29tcGF0aWJsZScgdG8gYmUKKwkgb2ZmIGJ5IGRlZmF1bHQuICBTZWUgfGNvbXBhdGlibGUtZGVmYXVsdHwuCisKKzQuIExvYWQgdGhlIHBsdWdpbiBzY3JpcHRzLgkJCQkJKmxvYWQtcGx1Z2lucyoKKwlUaGlzIGRvZXMgdGhlIHNhbWUgYXMgdGhlIGNvbW1hbmQ6ID4KKwkJOnJ1bnRpbWUhIHBsdWdpbi8qLnZpbQorPAlUaGUgcmVzdWx0IGlzIHRoYXQgYWxsIGRpcmVjdG9yaWVzIGluIHRoZSAncnVudGltZXBhdGgnIG9wdGlvbiB3aWxsIGJlCisJc2VhcmNoZWQgZm9yIHRoZSAicGx1Z2luIiBzdWItZGlyZWN0b3J5IGFuZCBhbGwgZmlsZXMgZW5kaW5nIGluICIudmltIgorCXdpbGwgYmUgc291cmNlZCAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHBlciBkaXJlY3RvcnkpLgorCUxvYWRpbmcgcGx1Z2lucyB3b24ndCBiZSBkb25lIHdoZW46CisJLSBUaGUgJ2xvYWRwbHVnaW5zJyBvcHRpb24gd2FzIHJlc2V0IGluIGEgdmltcmMgZmlsZS4KKwktIFRoZSB8LS1ub3BsdWdpbnwgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGlzIHVzZWQuCisJLSBUaGUgIi11IE5PTkUiIGNvbW1hbmQgbGluZSBhcmd1bWVudCBpcyB1c2VkIHwtdXwuCisJLSBXaGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aG91dCB0aGUgfCtldmFsfCBmZWF0dXJlLgorCU5vdGUgdGhhdCB1c2luZyAiLWMgc2V0IG5vbG9hZHBsdWdpbnMiIGRvZXNuJ3Qgd29yaywgYmVjYXVzZSB0aGUKKwljb21tYW5kcyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaGF2ZSBub3QgYmVlbiBleGVjdXRlZCB5ZXQuCisKKzUuIFNldCAnc2hlbGxwaXBlJyBhbmQgJ3NoZWxscmVkaXInCisJVGhlICdzaGVsbHBpcGUnIGFuZCAnc2hlbGxyZWRpcicgb3B0aW9ucyBhcmUgc2V0IGFjY29yZGluZyB0byB0aGUKKwl2YWx1ZSBvZiB0aGUgJ3NoZWxsJyBvcHRpb24sIHVubGVzcyB0aGV5IGhhdmUgYmVlbiBzZXQgYmVmb3JlLgorCVRoaXMgbWVhbnMgdGhhdCBWaW0gd2lsbCBmaWd1cmUgb3V0IHRoZSB2YWx1ZXMgb2YgJ3NoZWxscGlwZScgYW5kCisJJ3NoZWxscmVkaXInIGZvciB5b3UsIHVubGVzcyB5b3UgaGF2ZSBzZXQgdGhlbSB5b3Vyc2VsZi4KKworNi4gU2V0ICd1cGRhdGVjb3VudCcgdG8gemVybywgaWYgIi1uIiBjb21tYW5kIGFyZ3VtZW50IHVzZWQKKworNy4gU2V0IGJpbmFyeSBvcHRpb25zCisJSWYgdGhlICItYiIgZmxhZyB3YXMgZ2l2ZW4gdG8gVmltLCB0aGUgb3B0aW9ucyBmb3IgYmluYXJ5IGVkaXRpbmcgd2lsbAorCWJlIHNldCBub3cuICBTZWUgfC1ifC4KKworOC4gUGVyZm9ybSBHVUkgaW5pdGlhbGl6YXRpb25zCisJT25seSB3aGVuIHN0YXJ0aW5nICJndmltIiwgdGhlIEdVSSBpbml0aWFsaXphdGlvbnMgd2lsbCBiZSBkb25lLiAgU2VlCisJfGd1aS1pbml0fC4KKworOS4gUmVhZCB0aGUgdmltaW5mbyBmaWxlCisJSWYgdGhlICd2aW1pbmZvJyBvcHRpb24gaXMgbm90IGVtcHR5LCB0aGUgdmltaW5mbyBmaWxlIGlzIHJlYWQuICBTZWUKKwl8dmltaW5mby1maWxlfC4KKworMTAuIFJlYWQgdGhlIHF1aWNrZml4IGZpbGUKKwlJZiB0aGUgIi1xIiBmbGFnIHdhcyBnaXZlbiB0byBWaW0sIHRoZSBxdWlja2ZpeCBmaWxlIGlzIHJlYWQuICBJZiB0aGlzCisJZmFpbHMsIFZpbSBleGl0cy4KKworMTEuIE9wZW4gYWxsIHdpbmRvd3MKKwlXaGVuIHRoZSB8LW98IGZsYWcgd2FzIGdpdmVuLCB3aW5kb3dzIHdpbGwgYmUgb3BlbmVkIChidXQgbm90CisJZGlzcGxheWVkIHlldCkuCisJV2hlbiBzd2l0Y2hpbmcgc2NyZWVucywgaXQgaGFwcGVucyBub3cuICBSZWRyYXdpbmcgc3RhcnRzLgorCUlmIHRoZSAiLXEiIGZsYWcgd2FzIGdpdmVuIHRvIFZpbSwgdGhlIGZpcnN0IGVycm9yIGlzIGp1bXBlZCB0by4KKwlCdWZmZXJzIGZvciBhbGwgd2luZG93cyB3aWxsIGJlIGxvYWRlZC4KKworMTIuIEV4ZWN1dGUgc3RhcnR1cCBjb21tYW5kcworCUlmIGEgIi10IiBmbGFnIHdhcyBnaXZlbiB0byBWaW0sIHRoZSB0YWcgaXMganVtcGVkIHRvLgorCVRoZSBjb21tYW5kcyBnaXZlbiB3aXRoIHRoZSB8LWN8IGFuZCB8K2NtZHwgYXJndW1lbnRzIGFyZSBleGVjdXRlZC4KKwlJZiB0aGUgJ2luc2VydG1vZGUnIG9wdGlvbiBpcyBzZXQsIEluc2VydCBtb2RlIGlzIGVudGVyZWQuCisJVGhlIHxWaW1FbnRlcnwgYXV0b2NvbW1hbmRzIGFyZSBleGVjdXRlZC4KKworU29tZSBoaW50cyBvbiB1c2luZyBpbml0aWFsaXphdGlvbnM6CisKK1N0YW5kYXJkIHNldHVwOgorQ3JlYXRlIGEgdmltcmMgZmlsZSB0byBzZXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYW5kIG1hcHBpbmdzIGZvciBhbGwgeW91ciBlZGl0CitzZXNzaW9ucy4gIFB1dCBpdCBpbiBhIHBsYWNlIHNvIHRoYXQgaXQgd2lsbCBiZSBmb3VuZCBieSAzYjoKKwl+Ly52aW1yYwkoVW5peCBhbmQgT1MvMikKKwlzOi52aW1yYwkoQW1pZ2EpCisJJFZJTVxfdmltcmMJKE1TLURPUyBhbmQgV2luMzIpCitOb3RlIHRoYXQgY3JlYXRpbmcgYSB2aW1yYyBmaWxlIHdpbGwgY2F1c2UgdGhlICdjb21wYXRpYmxlJyBvcHRpb24gdG8gYmUgb2ZmCitieSBkZWZhdWx0LiAgU2VlIHxjb21wYXRpYmxlLWRlZmF1bHR8LgorCitMb2NhbCBzZXR1cDoKK1B1dCBhbGwgY29tbWFuZHMgdGhhdCB5b3UgbmVlZCBmb3IgZWRpdGluZyBhIHNwZWNpZmljIGRpcmVjdG9yeSBvbmx5IGludG8gYQordmltcmMgZmlsZSBhbmQgcGxhY2UgaXQgaW4gdGhhdCBkaXJlY3RvcnkgdW5kZXIgdGhlIG5hbWUgIi52aW1yYyIgKCJfdmltcmMiCitmb3IgTVMtRE9TIGFuZCBXaW4zMikuICBOT1RFOiBUbyBtYWtlIFZpbSBsb29rIGZvciB0aGVzZSBzcGVjaWFsIGZpbGVzIHlvdQoraGF2ZSB0byB0dXJuIG9uIHRoZSBvcHRpb24gJ2V4cmMnLiAgU2VlIHx0cm9qYW4taG9yc2V8IHRvby4KKworU3lzdGVtIHNldHVwOgorVGhpcyBvbmx5IGFwcGxpZXMgaWYgeW91IGFyZSBtYW5hZ2luZyBhIFVuaXggc3lzdGVtIHdpdGggc2V2ZXJhbCB1c2VycyBhbmQKK3dhbnQgdG8gc2V0IHRoZSBkZWZhdWx0cyBmb3IgYWxsIHVzZXJzLiAgQ3JlYXRlIGEgdmltcmMgZmlsZSB3aXRoIGNvbW1hbmRzCitmb3IgZGVmYXVsdCBzZXR0aW5ncyBhbmQgbWFwcGluZ3MgYW5kIHB1dCBpdCBpbiB0aGUgcGxhY2UgdGhhdCBpcyBnaXZlbiB3aXRoCit0aGUgIjp2ZXJzaW9uIiBjb21tYW5kLgorCitTYXZpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgVmltIHRvIGEgZmlsZToKK1doZW5ldmVyIHlvdSBoYXZlIGNoYW5nZWQgdmFsdWVzIG9mIG9wdGlvbnMgb3Igd2hlbiB5b3UgaGF2ZSBjcmVhdGVkIGEKK21hcHBpbmcsIHRoZW4geW91IG1heSB3YW50IHRvIHNhdmUgdGhlbSBpbiBhIHZpbXJjIGZpbGUgZm9yIGxhdGVyIHVzZS4gIFNlZQorfHNhdmUtc2V0dGluZ3N8IGFib3V0IHNhdmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBzZXR0aW5ncyB0byBhIGZpbGUuCisKK0F2b2lkaW5nIHNldHVwIHByb2JsZW1zIGZvciBWaSB1c2VyczoKK1ZpIHVzZXMgdGhlIHZhcmlhYmxlIEVYSU5JVCBhbmQgdGhlIGZpbGUgIn4vLmV4cmMiLiAgU28gaWYgeW91IGRvIG5vdCB3YW50IHRvCitpbnRlcmZlcmUgd2l0aCBWaSwgdGhlbiB1c2UgdGhlIHZhcmlhYmxlIFZJTUlOSVQgYW5kIHRoZSBmaWxlICJ2aW1yYyIgaW5zdGVhZC4KKworQW1pZ2EgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorT24gdGhlIEFtaWdhLCB0d28gdHlwZXMgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGV4aXN0LiAgVGhlIG9uZXMgc2V0IHdpdGggdGhlCitET1MgMS4zIChvciBsYXRlcikgc2V0ZW52IGNvbW1hbmQgYXJlIHJlY29nbml6ZWQuICBTZWUgdGhlIEFtaWdhRG9zIDEuMworbWFudWFsLiAgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZXQgd2l0aCB0aGUgb2xkIE1hbnggU2V0IGNvbW1hbmQgKGJlZm9yZQordmVyc2lvbiA1LjApIGFyZSBub3QgcmVjb2duaXplZC4KKworTVMtRE9TIGxpbmUgc2VwYXJhdG9yczoKK09uIE1TLURPUy1saWtlIHN5c3RlbXMgKE1TLURPUyBpdHNlbGYsIFdpbjMyLCBhbmQgT1MvMiksIFZpbSBhc3N1bWVzIHRoYXQgYWxsCit0aGUgdmltcmMgZmlsZXMgaGF2ZSA8Q1I+IDxOTD4gcGFpcnMgYXMgbGluZSBzZXBhcmF0b3JzLiAgVGhpcyB3aWxsIGdpdmUKK3Byb2JsZW1zIGlmIHlvdSBoYXZlIGEgZmlsZSB3aXRoIG9ubHkgPE5MPnMgYW5kIGhhdmUgYSBsaW5lIGxpa2UKKyI6bWFwIHh4IHl5Xk0iLiAgVGhlIHRyYWlsaW5nIF5NIHdpbGwgYmUgaWdub3JlZC4KKworCQkJCQkJICAgICAqY29tcGF0aWJsZS1kZWZhdWx0KgorV2hlbiBWaW0gc3RhcnRzLCB0aGUgJ2NvbXBhdGlibGUnIG9wdGlvbiBpcyBvbi4gIFRoaXMgd2lsbCBiZSB1c2VkIHdoZW4gVmltCitzdGFydHMgaXRzIGluaXRpYWxpemF0aW9ucy4gIEJ1dCBhcyBzb29uIGFzIGEgdXNlciB2aW1yYyBmaWxlIGlzIGZvdW5kLCBvciBhCit2aW1yYyBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgb3IgdGhlICJWSU1JTklUIiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcworc2V0LCBpdCB3aWxsIGJlIHNldCB0byAnbm9jb21wYXRpYmxlJy4gIFRoaXMgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBzZXR0aW5nIG9yCityZXNldHRpbmcgb3RoZXIgb3B0aW9ucyAoc2VlICdjb21wYXRpYmxlJykuICBCdXQgb25seSB0aGUgb3B0aW9ucyB0aGF0IGhhdmUKK25vdCBiZWVuIHNldCBvciByZXNldCB3aWxsIGJlIGNoYW5nZWQuICBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgbGlrZSB0aGUKK3ZhbHVlIG9mICdjb21wYXRpYmxlJyBoYWQgdGhpcyB2YWx1ZSB3aGVuIHN0YXJ0aW5nIFZpbS4gIE5vdGUgdGhhdCB0aGlzCitkb2Vzbid0IGhhcHBlbiBmb3IgdGhlIHN5c3RlbS13aWRlIHZpbXJjIGZpbGUuCisKK0J1dCB0aGVyZSBpcyBhIHNpZGUgZWZmZWN0IG9mIHNldHRpbmcgb3IgcmVzZXR0aW5nICdjb21wYXRpYmxlJyBhdCB0aGUgbW9tZW50CithIC52aW1yYyBmaWxlIGlzIGZvdW5kOiBNYXBwaW5ncyBhcmUgaW50ZXJwcmV0ZWQgdGhlIG1vbWVudCB0aGV5IGFyZQorZW5jb3VudGVyZWQuICBUaGlzIG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIHVzaW5nIHRoaW5ncyBsaWtlICI8Q1I+Ii4gIElmIHRoZQorbWFwcGluZ3MgZGVwZW5kIG9uIGEgY2VydGFpbiB2YWx1ZSBvZiAnY29tcGF0aWJsZScsIHNldCBvciByZXNldCBpdCBiZWZvcmUKK2dpdmluZyB0aGUgbWFwcGluZy4KKworVGhlIGFib3ZlIGJlaGF2aW9yIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZXNlIHdheXM6CistIElmIHRoZSAiLU4iIGNvbW1hbmQgbGluZSBhcmd1bWVudCBpcyBnaXZlbiwgJ25vY29tcGF0aWJsZScgd2lsbCBiZSB1c2VkLAorICBldmVuIHdoZW4gbm8gdmltcmMgZmlsZSBleGlzdHMuCistIElmIHRoZSAiLUMiIGNvbW1hbmQgbGluZSBhcmd1bWVudCBpcyBnaXZlbiwgJ2NvbXBhdGlibGUnIHdpbGwgYmUgdXNlZCwgZXZlbgorICB3aGVuIGEgdmltcmMgZmlsZSBleGlzdHMuCistIElmIHRoZSAiLXUge3ZpbXJjfSIgYXJndW1lbnQgaXMgdXNlZCwgJ2NvbXBhdGlibGUnIHdpbGwgYmUgdXNlZC4KKy0gV2hlbiB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSBlbmRzIGluICJleCIsIHRoZW4gdGhpcyB3b3JrcyBsaWtlIHRoZSAiLUMiCisgIGFyZ3VtZW50IHdhcyBnaXZlbjogJ2NvbXBhdGlibGUnIHdpbGwgYmUgdXNlZCwgZXZlbiB3aGVuIGEgdmltcmMgZmlsZQorICBleGlzdHMuICBUaGlzIGhhcyBiZWVuIGRvbmUgdG8gbWFrZSBWaW0gYmVoYXZlIGxpa2UgImV4Iiwgd2hlbiBpdCBpcyBzdGFydGVkCisgIGFzICJleCIuCisKK0F2b2lkaW5nIHRyb2phbiBob3JzZXM6CQkJCQkqdHJvamFuLWhvcnNlKgorV2hpbGUgcmVhZGluZyB0aGUgInZpbXJjIiBvciB0aGUgImV4cmMiIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBzb21lCitjb21tYW5kcyBjYW4gYmUgZGlzYWJsZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMgYnkgc2V0dGluZyB0aGUgJ3NlY3VyZScgb3B0aW9uLgorVGhpcyBpcyBhbHdheXMgZG9uZSB3aGVuIGV4ZWN1dGluZyB0aGUgY29tbWFuZCBmcm9tIGEgdGFncyBmaWxlLiAgT3RoZXJ3aXNlIGl0Cit3b3VsZCBiZSBwb3NzaWJsZSB0aGF0IHlvdSBhY2NpZGVudGFsbHkgdXNlIGEgdmltcmMgb3IgdGFncyBmaWxlIHRoYXQgc29tZWJvZHkKK2Vsc2UgY3JlYXRlZCBhbmQgY29udGFpbnMgbmFzdHkgY29tbWFuZHMuICBUaGUgZGlzYWJsZWQgY29tbWFuZHMgYXJlIHRoZSBvbmVzCit0aGF0IHN0YXJ0IGEgc2hlbGwsIHRoZSBvbmVzIHRoYXQgd3JpdGUgdG8gYSBmaWxlLCBhbmQgIjphdXRvY21kIi4gIFRoZSAiOm1hcCIKK2NvbW1hbmRzIGFyZSBlY2hvZWQsIHNvIHlvdSBjYW4gc2VlIHdoaWNoIGtleXMgYXJlIGJlaW5nIG1hcHBlZC4KKwlJZiB5b3Ugd2FudCBWaW0gdG8gZXhlY3V0ZSBhbGwgY29tbWFuZHMgaW4gYSBsb2NhbCB2aW1yYyBmaWxlLCB5b3UKK2NhbiByZXNldCB0aGUgJ3NlY3VyZScgb3B0aW9uIGluIHRoZSBFWElOSVQgb3IgVklNSU5JVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvcgoraW4gdGhlIGdsb2JhbCAiZXhyYyIgb3IgInZpbXJjIiBmaWxlLiAgVGhpcyBpcyBub3QgcG9zc2libGUgaW4gInZpbXJjIiBvcgorImV4cmMiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgZm9yIG9idmlvdXMgcmVhc29ucy4KKwlPbiBVbml4IHN5c3RlbXMsIHRoaXMgb25seSBoYXBwZW5zIGlmIHlvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGUKK3ZpbXJjIGZpbGUuICBXYXJuaW5nOiBJZiB5b3UgdW5wYWNrIGFuIGFyY2hpdmUgdGhhdCBjb250YWlucyBhIHZpbXJjIG9yIGV4cmMKK2ZpbGUsIGl0IHdpbGwgYmUgb3duZWQgYnkgeW91LiAgWW91IHdvbid0IGhhdmUgdGhlIHNlY3VyaXR5IHByb3RlY3Rpb24uICBDaGVjawordGhlIHZpbXJjIGZpbGUgYmVmb3JlIHlvdSBzdGFydCBWaW0gaW4gdGhhdCBkaXJlY3RvcnksIG9yIHJlc2V0IHRoZSAnZXhyYycKK29wdGlvbi4gIFNvbWUgVW5peCBzeXN0ZW1zIGFsbG93IGEgdXNlciB0byBkbyAiY2hvd24iIG9uIGEgZmlsZS4gIFRoaXMgbWFrZXMKK2l0IHBvc3NpYmxlIGZvciBhbm90aGVyIHVzZXIgdG8gY3JlYXRlIGEgbmFzdHkgdmltcmMgYW5kIG1ha2UgeW91IHRoZSBvd25lci4KK0JlIGNhcmVmdWwhCisJV2hlbiB1c2luZyB0YWcgc2VhcmNoIGNvbW1hbmRzLCBleGVjdXRpbmcgdGhlIHNlYXJjaCBjb21tYW5kICh0aGUgbGFzdAorcGFydCBvZiB0aGUgbGluZSBpbiB0aGUgdGFncyBmaWxlKSBpcyBhbHdheXMgZG9uZSBpbiBzZWN1cmUgbW9kZS4gIFRoaXMgd29ya3MKK2p1c3QgbGlrZSBleGVjdXRpbmcgYSBjb21tYW5kIGZyb20gYSB2aW1yYy9leHJjIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworCQkJCQkJCSpzbG93LXN0YXJ0KgorSWYgVmltIHRha2VzIGEgbG9uZyB0aW1lIHRvIHN0YXJ0IHVwLCB0aGVyZSBtYXkgYmUgYSBmZXcgY2F1c2VzOgorLSBJZiB0aGUgVW5peCB2ZXJzaW9uIHdhcyBjb21waWxlZCB3aXRoIHRoZSBHVUkgYW5kL29yIFgxMSAoY2hlY2sgdGhlIG91dHB1dAorICBvZiAiOnZlcnNpb24iIGZvciAiK0dVSSIgYW5kICIrWDExIiksIGl0IG1heSBuZWVkIHRvIGxvYWQgc2hhcmVkIGxpYnJhcmllcworICBhbmQgY29ubmVjdCB0byB0aGUgWDExIHNlcnZlci4gIFRyeSBjb21waWxpbmcgYSB2ZXJzaW9uIHdpdGggR1VJIGFuZCBYMTEKKyAgZGlzYWJsZWQuICBUaGlzIGFsc28gc2hvdWxkIG1ha2UgdGhlIGV4ZWN1dGFibGUgc21hbGxlci4KKyAgVXNlIHRoZSB8LVh8IGNvbW1hbmQgbGluZSBhcmd1bWVudCB0byBhdm9pZCBjb25uZWN0aW5nIHRvIHRoZSBYIHNlcnZlciB3aGVuCisgIHJ1bm5pbmcgaW4gYSB0ZXJtaW5hbC4KKy0gSWYgeW91IGhhdmUgInZpbWluZm8iIGVuYWJsZWQsIHRoZSBsb2FkaW5nIG9mIHRoZSB2aW1pbmZvIGZpbGUgbWF5IHRha2UgYQorICB3aGlsZS4gIFlvdSBjYW4gZmluZCBvdXQgaWYgdGhpcyBpcyB0aGUgcHJvYmxlbSBieSBkaXNhYmxpbmcgdmltaW5mbyBmb3IgYQorICBtb21lbnQgKHVzZSB0aGUgVmltIGFyZ3VtZW50ICItaSBOT05FIiwgfC1pfCkuICBUcnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZgorICBsaW5lcyBzdG9yZWQgaW4gYSByZWdpc3RlciB3aXRoICI6c2V0IHZpbWluZm89JzIwLDw1MCxzMTAiLiAgfHZpbWluZm8tZmlsZXwuCisKKwkJCQkJCQkqOmludHJvKgorV2hlbiBWaW0gc3RhcnRzIHdpdGhvdXQgYSBmaWxlIG5hbWUsIGFuIGludHJvZHVjdG9yeSBtZXNzYWdlIGlzIGRpc3BsYXllZCAoZm9yCit0aG9zZSB3aG8gZG9uJ3Qga25vdyB3aGF0IFZpbSBpcykuICBJdCBpcyByZW1vdmVkIGFzIHNvb24gYXMgdGhlIGRpc3BsYXkgaXMKK3JlZHJhd24gaW4gYW55IHdheS4gIFRvIHNlZSB0aGUgbWVzc2FnZSBhZ2FpbiwgdXNlIHRoZSAiOmludHJvIiBjb21tYW5kIChpZgordGhlcmUgaXMgbm90IGVub3VnaCByb29tLCB5b3Ugd2lsbCBzZWUgb25seSBwYXJ0IG9mIGl0KS4KKyAgIFRvIGF2b2lkIHRoZSBpbnRybyBtZXNzYWdlIG9uIHN0YXJ0dXAsIGFkZCB0aGUgJ0knIGZsYWcgdG8gJ3Nob3J0bWVzcycuCisKKwkJCQkJCQkqaW5mby1tZXNzYWdlKgorVGhlIHwtLWhlbHB8IGFuZCB8LS12ZXJzaW9ufCBhcmd1bWVudHMgY2F1c2UgVmltIHRvIHByaW50IGEgbWVzc2FnZSBhbmQgdGhlbgorZXhpdC4gIE5vcm1hbGx5IHRoZSBtZXNzYWdlIGlzIHNlbmQgdG8gc3Rkb3V0LCB0aHVzIGNhbiBiZSByZWRpcmVjdGVkIHRvIGEKK2ZpbGUgd2l0aDogPgorCisJdmltIC0taGVscCA+ZmlsZQorCitGcm9tIGluc2lkZSBWaW06ID4KKworCTpyZWFkICF2aW0gLS1oZWxwCisKK1doZW4gdXNpbmcgZ3ZpbSwgaXQgZGV0ZWN0cyB0aGF0IGl0IG1pZ2h0IGhhdmUgYmVlbiBzdGFydGVkIGZyb20gdGhlIGRlc2t0b3AsCit3aXRob3V0IGEgdGVybWluYWwgdG8gc2hvdyBtZXNzYWdlcyBvbi4gIFRoaXMgaXMgZGV0ZWN0ZWQgd2hlbiBib3RoIHN0ZG91dCBhbmQKK3N0ZGVyciBhcmUgbm90IGEgdHR5LiAgVGhpcyBicmVha3MgdGhlICI6cmVhZCIgY29tbWFuZCwgYXMgdXNlZCBpbiB0aGUgZXhhbXBsZQorYWJvdmUuICBUbyBtYWtlIGl0IHdvcmsgYWdhaW4sIHNldCAnc2hlbGxyZWRpcicgdG8gIj4iIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKKyI+JiI6ID4KKworCTpzZXQgc2hlbGxyZWRpcj0+CisJOnJlYWQgIWd2aW0gLS1oZWxwCisKK1RoaXMgc3RpbGwgd29uJ3Qgd29yayBmb3Igc3lzdGVtcyB3aGVyZSBndmltIGRvZXMgbm90IHVzZSBzdGRvdXQgYXQgYWxsCit0aG91Z2guCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gJFZJTSBhbmQgJFZJTVJVTlRJTUUKKwkJCQkJCQkJKiRWSU0qCitUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgIiRWSU0iIGlzIHVzZWQgdG8gbG9jYXRlIHZhcmlvdXMgdXNlciBmaWxlcyBmb3IgVmltLAorc3VjaCBhcyB0aGUgdXNlciBzdGFydHVwIHNjcmlwdCAiLnZpbXJjIi4gIFRoaXMgZGVwZW5kcyBvbiB0aGUgc3lzdGVtLCBzZWUKK3xzdGFydHVwfC4KKworVG8gYXZvaWQgdGhlIG5lZWQgZm9yIGV2ZXJ5IHVzZXIgdG8gc2V0IHRoZSAkVklNIGVudmlyb25tZW50IHZhcmlhYmxlLCBWaW0KK3dpbGwgdHJ5IHRvIGdldCB0aGUgdmFsdWUgZm9yICRWSU0gaW4gdGhpcyBvcmRlcjoKKzEuIFRoZSB2YWx1ZSBkZWZpbmVkIGJ5IHRoZSAkVklNIGVudmlyb25tZW50IHZhcmlhYmxlLiAgWW91IGNhbiB1c2UgdGhpcyB0bworICAgbWFrZSBWaW0gbG9vayBpbiBhIHNwZWNpZmljIGRpcmVjdG9yeSBmb3IgaXRzIHN1cHBvcnQgZmlsZXMuICBFeGFtcGxlOiA+CisJc2V0ZW52IFZJTSAvaG9tZS9wYXVsL3ZpbQorMi4gVGhlIHBhdGggZnJvbSAnaGVscGZpbGUnIGlzIHVzZWQsIHVubGVzcyBpdCBjb250YWlucyBzb21lIGVudmlyb25tZW50CisgICB2YXJpYWJsZSB0b28gKHRoZSBkZWZhdWx0IGlzICIkVklNUlVOVElNRS9kb2MvaGVscC50eHQiOiBjaGlja2VuLWVnZworICAgcHJvYmxlbSkuICBUaGUgZmlsZSBuYW1lICgiaGVscC50eHQiIG9yIGFueSBvdGhlcikgaXMgcmVtb3ZlZC4gIFRoZW4KKyAgIHRyYWlsaW5nIGRpcmVjdG9yeSBuYW1lcyBhcmUgcmVtb3ZlZCwgaW4gdGhpcyBvcmRlcjogImRvYyIsICJydW50aW1lIiBhbmQKKyAgICJ2aW17dmVyc2lvbn0iIChlLmcuLCAidmltNTQiKS4KKzMuIEZvciBNU0RPUywgV2luMzIgYW5kIE9TLzIgVmltIHRyaWVzIHRvIHVzZSB0aGUgZGlyZWN0b3J5IG5hbWUgb2YgdGhlCisgICBleGVjdXRhYmxlLiAgSWYgaXQgZW5kcyBpbiAiL3NyYyIsIHRoaXMgaXMgcmVtb3ZlZC4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdQorICAgdW5wYWNrZWQgdGhlIC56aXAgZmlsZSBpbiBzb21lIGRpcmVjdG9yeSwgYW5kIGFkanVzdGVkIHRoZSBzZWFyY2ggcGF0aCB0bworICAgZmluZCB0aGUgdmltIGV4ZWN1dGFibGUuICBUcmFpbGluZyBkaXJlY3RvcnkgbmFtZXMgYXJlIHJlbW92ZWQsIGluIHRoaXMKKyAgIG9yZGVyOiAicnVudGltZSIgYW5kICJ2aW17dmVyc2lvbn0iIChlLmcuLCAidmltNTQiKS4KKzQuIEZvciBVbml4IHRoZSBjb21waWxlLXRpbWUgZGVmaW5lZCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IGlzIHVzZWQgKHNlZSB0aGUKKyAgIG91dHB1dCBvZiAiOnZlcnNpb24iKS4KKworT25jZSBWaW0gaGFzIGRvbmUgdGhpcyBvbmNlLCBpdCB3aWxsIHNldCB0aGUgJFZJTSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFRvCitjaGFuZ2UgaXQgbGF0ZXIsIHVzZSBhICI6bGV0IiBjb21tYW5kIGxpa2UgdGhpczogPgorCTpsZXQgJFZJTSA9ICIvaG9tZS9wYXVsL3ZpbS8iCis8CisJCQkJCQkJCSokVklNUlVOVElNRSoKK1RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAiJFZJTVJVTlRJTUUiIGlzIHVzZWQgdG8gbG9jYXRlIHZhcmlvdXMgc3VwcG9ydAorZmlsZXMsIHN1Y2ggYXMgdGhlIG9uLWxpbmUgZG9jdW1lbnRhdGlvbiBhbmQgZmlsZXMgdXNlZCBmb3Igc3ludGF4CitoaWdobGlnaHRpbmcuICBGb3IgZXhhbXBsZSwgdGhlIG1haW4gaGVscCBmaWxlIGlzIG5vcm1hbGx5CisiJFZJTVJVTlRJTUUvZG9jL2hlbHAudHh0Ii4KK1lvdSBkb24ndCBub3JtYWxseSBzZXQgJFZJTVJVTlRJTUUgeW91cnNlbGYsIGJ1dCBsZXQgVmltIGZpZ3VyZSBpdCBvdXQuICBUaGlzCitpcyB0aGUgb3JkZXIgdXNlZCB0byBmaW5kIHRoZSB2YWx1ZSBvZiAkVklNUlVOVElNRToKKzEuIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkVklNUlVOVElNRSBpcyBzZXQsIGl0IGlzIHVzZWQuICBZb3UgY2FuIHVzZQorICAgdGhpcyB3aGVuIHRoZSBydW50aW1lIGZpbGVzIGFyZSBpbiBhbiB1bnVzdWFsIGxvY2F0aW9uLgorMi4gSWYgIiRWSU0vdmlte3ZlcnNpb259IiBleGlzdHMsIGl0IGlzIHVzZWQuICB7dmVyc2lvbn0gaXMgdGhlIHZlcnNpb24KKyAgIG51bWJlciBvZiBWaW0sIHdpdGhvdXQgYW55ICctJyBvciAnLicuICBGb3IgZXhhbXBsZTogIiRWSU0vdmltNTQiLiAgVGhpcyBpcworICAgdGhlIG5vcm1hbCB2YWx1ZSBmb3IgJFZJTVJVTlRJTUUuCiszLiBJZiAiJFZJTS9ydW50aW1lIiBleGlzdHMsIGl0IGlzIHVzZWQuCis0LiBUaGUgdmFsdWUgb2YgJFZJTSBpcyB1c2VkLiAgVGhpcyBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlcgorICAgdmVyc2lvbnMuCis1LiBXaGVuIHRoZSAnaGVscGZpbGUnIG9wdGlvbiBpcyBzZXQgYW5kIGRvZXNuJ3QgY29udGFpbiBhICckJywgaXRzIHZhbHVlIGlzCisgICB1c2VkLCB3aXRoICJkb2MvaGVscC50eHQiIHJlbW92ZWQgZnJvbSB0aGUgZW5kLgorCitGb3IgVW5peCwgd2hlbiB0aGVyZSBpcyBhIGNvbXBpbGVkLWluIGRlZmF1bHQgZm9yICRWSU1SVU5USU1FIChjaGVjayB0aGUKK291dHB1dCBvZiAiOnZlcnNpb24iKSwgc3RlcHMgMiwgMyBhbmQgNCBhcmUgc2tpcHBlZCwgYW5kIHRoZSBjb21waWxlZC1pbgorZGVmYXVsdCBpcyB1c2VkIGFmdGVyIHN0ZXAgNS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29tcGlsZWQtaW4gZGVmYXVsdAorb3ZlcnJ1bGVzIHRoZSB2YWx1ZSBvZiAkVklNLiAgVGhpcyBpcyB1c2VmdWwgaWYgJFZJTSBpcyAiL2V0YyIgYW5kIHRoZSBydW50aW1lCitmaWxlcyBhcmUgaW4gIi91c3Ivc2hhcmUvdmltL3ZpbTU0Ii4KKworT25jZSBWaW0gaGFzIGRvbmUgdGhpcyBvbmNlLCBpdCB3aWxsIHNldCB0aGUgJFZJTVJVTlRJTUUgZW52aXJvbm1lbnQgdmFyaWFibGUuCitUbyBjaGFuZ2UgaXQgbGF0ZXIsIHVzZSBhICI6bGV0IiBjb21tYW5kIGxpa2UgdGhpczogPgorCTpsZXQgJFZJTVJVTlRJTUUgPSAiL2hvbWUvcGlldC92aW0vdmltNTQiCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gU3VzcGVuZGluZwkJCQkJCSpzdXNwZW5kKgorCisJCQkJCSppY29uaXplKiAqaWNvbmlzZSogKkNUUkwtWiogKnZfQ1RSTC1aKgorQ1RSTC1aCQkJU3VzcGVuZCBWaW0sIGxpa2UgIjpzdG9wIi4KKwkJCVdvcmtzIGluIE5vcm1hbCBhbmQgaW4gVmlzdWFsIG1vZGUuICBJbiBJbnNlcnQgYW5kCisJCQlDb21tYW5kLWxpbmUgbW9kZSwgdGhlIENUUkwtWiBpcyBpbnNlcnRlZCBhcyBhIG5vcm1hbAorCQkJY2hhcmFjdGVyLiAgSW4gVmlzdWFsIG1vZGUgVmltIGdvZXMgYmFjayB0byBOb3JtYWwKKwkJCW1vZGUuCisKKworOnN1c1twZW5kXVshXQlvcgkJCSo6c3VzKiAqOnN1c3BlbmQqICo6c3QqICo6c3RvcCoKKzpzdFtvcF1bIV0JCVN1c3BlbmQgVmltLgorCQkJSWYgdGhlICchJyBpcyBub3QgZ2l2ZW4gYW5kICdhdXRvd3JpdGUnIGlzIHNldCwgZXZlcnkKKwkJCWJ1ZmZlciB3aXRoIGNoYW5nZXMgYW5kIGEgZmlsZSBuYW1lIGlzIHdyaXR0ZW4gb3V0LgorCQkJSWYgdGhlICchJyBpcyBnaXZlbiBvciAnYXV0b3dyaXRlJyBpcyBub3Qgc2V0LCBjaGFuZ2VkCisJCQlidWZmZXJzIGFyZSBub3Qgd3JpdHRlbiwgZG9uJ3QgZm9yZ2V0IHRvIGJyaW5nIFZpbQorCQkJYmFjayB0byB0aGUgZm9yZWdyb3VuZCBsYXRlciEKKworSW4gdGhlIEdVSSwgc3VzcGVuZGluZyBpcyBpbXBsZW1lbnRlZCBhcyBpY29uaXNpbmcgZ3ZpbS4gIEluIFdpbmRvd3MgOTUvTlQsCitndmltIGlzIG1pbmltaXplZC4KKworT24gbWFueSBVbml4IHN5c3RlbXMsIGl0IGlzIHBvc3NpYmxlIHRvIHN1c3BlbmQgVmltIHdpdGggQ1RSTC1aLiAgVGhpcyBpcyBvbmx5Citwb3NzaWJsZSBpbiBOb3JtYWwgYW5kIFZpc3VhbCBtb2RlIChzZWUgbmV4dCBjaGFwdGVyLCB8dmltLW1vZGVzfCkuICBWaW0gd2lsbAorY29udGludWUgaWYgeW91IG1ha2UgaXQgdGhlIGZvcmVncm91bmQgam9iIGFnYWluLiAgT24gb3RoZXIgc3lzdGVtcywgQ1RSTC1aCit3aWxsIHN0YXJ0IGEgbmV3IHNoZWxsLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgIjpzaCIgY29tbWFuZC4gIFZpbSB3aWxsCitjb250aW51ZSBpZiB5b3UgZXhpdCBmcm9tIHRoZSBzaGVsbC4KKworSW4gWC13aW5kb3dzIHRoZSBzZWxlY3Rpb24gaXMgZGlzb3duZWQgd2hlbiBWaW0gc3VzcGVuZHMuICB0aGlzIG1lYW5zIHlvdQorY2FuJ3QgcGFzdGUgaXQgaW4gYW5vdGhlciBhcHBsaWNhdGlvbiAoc2luY2UgVmltIGlzIGdvaW5nIHRvIHNsZWVwIGFuIGF0dGVtcHQKK3RvIGdldCB0aGUgc2VsZWN0aW9uIHdvdWxkIG1ha2UgdGhlIHByb2dyYW0gaGFuZykuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gU2F2aW5nIHNldHRpbmdzCQkJCQkqc2F2ZS1zZXR0aW5ncyoKKworTW9zdGx5IHlvdSB3aWxsIGVkaXQgeW91ciB2aW1yYyBmaWxlcyBtYW51YWxseS4gIFRoaXMgZ2l2ZXMgeW91IHRoZSBncmVhdGVzdAorZmxleGliaWxpdHkuICBUaGVyZSBhcmUgYSBmZXcgY29tbWFuZHMgdG8gZ2VuZXJhdGUgYSB2aW1yYyBmaWxlIGF1dG9tYXRpY2FsbHkuCitZb3UgY2FuIHVzZSB0aGVzZSBmaWxlcyBhcyB0aGV5IGFyZSwgb3IgY29weS9wYXN0ZSBsaW5lcyB0byBpbmNsdWRlIGluIGFub3RoZXIKK3ZpbXJjIGZpbGUuCisKKwkJCQkJCQkqOm1rKiAqOm1rZXhyYyoKKzpta1tleHJjXSBbZmlsZV0JV3JpdGUgY3VycmVudCBrZXkgbWFwcGluZ3MgYW5kIGNoYW5nZWQgb3B0aW9ucyB0bworCQkJW2ZpbGVdIChkZWZhdWx0ICIuZXhyYyIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5KSwKKwkJCXVubGVzcyBpdCBhbHJlYWR5IGV4aXN0cy4gIHtub3QgaW4gVml9CisKKzpta1tleHJjXSEgW2ZpbGVdCUFsd2F5cyB3cml0ZSBjdXJyZW50IGtleSBtYXBwaW5ncyBhbmQgY2hhbmdlZAorCQkJb3B0aW9ucyB0byBbZmlsZV0gKGRlZmF1bHQgIi5leHJjIiBpbiB0aGUgY3VycmVudAorCQkJZGlyZWN0b3J5KS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOm1rdiogKjpta3ZpbXJjKgorOm1rdltpbXJjXVshXSBbZmlsZV0JTGlrZSAiOm1rZXhyYyIsIGJ1dCB0aGUgZGVmYXVsdCBpcyAiLnZpbXJjIiBpbiB0aGUKKwkJCWN1cnJlbnQgZGlyZWN0b3J5LiAgVGhlICI6dmVyc2lvbiIgY29tbWFuZCBpcyBhbHNvCisJCQl3cml0dGVuIHRvIHRoZSBmaWxlLiAge25vdCBpbiBWaX0KKworVGhlc2UgY29tbWFuZHMgd2lsbCB3cml0ZSAiOm1hcCIgYW5kICI6c2V0IiBjb21tYW5kcyB0byBhIGZpbGUsIGluIHN1Y2ggYSB3YXkKK3RoYXQgd2hlbiB0aGVzZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQsIHRoZSBjdXJyZW50IGtleSBtYXBwaW5ncyBhbmQgb3B0aW9ucword2lsbCBiZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWVzLiAgVGhlIG9wdGlvbnMgJ2NvbHVtbnMnLCAnZW5kb2ZsaW5lJywKKydmaWxlZm9ybWF0JywgJ2tleScsICdsaW5lcycsICdtb2RpZmllZCcsICdzY3JvbGwnLCAndGVybScsICd0ZXh0bW9kZScsCisndHR5ZmFzdCcgYW5kICd0dHltb3VzZScgYXJlIG5vdCBpbmNsdWRlZCwgYmVjYXVzZSB0aGVzZSBhcmUgdGVybWluYWwgb3IgZmlsZQorZGVwZW5kZW50LiAgTm90ZSB0aGF0IHRoZSBvcHRpb25zICdiaW5hcnknLCAncGFzdGUnIGFuZCAncmVhZG9ubHknIGFyZQoraW5jbHVkZWQsIHRoaXMgbWlnaHQgbm90IGFsd2F5cyBiZSB3aGF0IHlvdSB3YW50LgorCitXaGVuIHNwZWNpYWwga2V5cyBhcmUgdXNlZCBpbiBtYXBwaW5ncywgVGhlICdjcG9wdGlvbnMnIG9wdGlvbiB3aWxsIGJlCit0ZW1wb3JhcmlseSBzZXQgdG8gaXRzIFZpbSBkZWZhdWx0LCB0byBhdm9pZCB0aGUgbWFwcGluZ3MgdG8gYmUKK21pc2ludGVycHJldGVkLiAgVGhpcyBtYWtlcyB0aGUgZmlsZSBpbmNvbXBhdGlibGUgd2l0aCBWaSwgYnV0IG1ha2VzIHN1cmUgaXQKK2NhbiBiZSB1c2VkIHdpdGggZGlmZmVyZW50IHRlcm1pbmFscy4KKworT25seSBnbG9iYWwgbWFwcGluZ3MgYXJlIHN0b3JlZCwgbm90IG1hcHBpbmdzIGxvY2FsIHRvIGEgYnVmZmVyLgorCitBIGNvbW1vbiBtZXRob2QgaXMgdG8gdXNlIGEgZGVmYXVsdCAiLnZpbXJjIiBmaWxlLCBtYWtlIHNvbWUgbW9kaWZpY2F0aW9ucword2l0aCAiOm1hcCIgYW5kICI6c2V0IiBjb21tYW5kcyBhbmQgd3JpdGUgdGhlIG1vZGlmaWVkIGZpbGUuICBGaXJzdCByZWFkIHRoZQorZGVmYXVsdCAiLnZpbXJjIiBpbiB3aXRoIGEgY29tbWFuZCBsaWtlICI6c291cmNlIH5waWV0Ly52aW1yYy5DcHJvZ3MiLCBjaGFuZ2UKK3RoZSBzZXR0aW5ncyBhbmQgdGhlbiBzYXZlIHRoZW0gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpdGggIjpta3ZpbXJjISIuICBJZgoreW91IHdhbnQgdG8gbWFrZSB0aGlzIGZpbGUgeW91ciBkZWZhdWx0IC52aW1yYywgbW92ZSBpdCB0byB5b3VyIGhvbWUgZGlyZWN0b3J5Cisob24gVW5peCksIHM6IChBbWlnYSkgb3IgJFZJTSBkaXJlY3RvcnkgKE1TLURPUykuICBZb3UgY291bGQgYWxzbyB1c2UKK2F1dG9jb21tYW5kcyB8YXV0b2NvbW1hbmR8IGFuZC9vciBtb2RlbGluZXMgfG1vZGVsaW5lfC4KKworSWYgeW91IG9ubHkgd2FudCB0byBhZGQgYSBzaW5nbGUgb3B0aW9uIHNldHRpbmcgdG8geW91ciB2aW1yYywgeW91IGNhbiB1c2UKK3RoZXNlIHN0ZXBzOgorMS4gRWRpdCB5b3VyIHZpbXJjIGZpbGUgd2l0aCBWaW0uCisyLiBQbGF5IHdpdGggdGhlIG9wdGlvbiB1bnRpbCBpdCdzIHJpZ2h0LiAgRS5nLiwgdHJ5IG91dCBkaWZmZXJlbnQgdmFsdWVzIGZvcgorICAgJ2d1aWZvbnQnLgorMy4gQXBwZW5kIGEgbGluZSB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24sIHVzaW5nIHRoZSBleHByZXNzaW9uIHJlZ2lzdGVyCisgICAnPScgdG8gZW50ZXIgdGhlIHZhbHVlLiAgRS5nLiwgZm9yIHRoZSAnZ3VpZm9udCcgb3B0aW9uOiA+CisgICBvOnNldCBndWlmb250PTxDLVI+PSZndWlmb250PENSPjxFc2M+Cis8ICBbPEMtUj4gaXMgYSBDVFJMLVIsIDxDUj4gaXMgYSByZXR1cm4sIDxFc2M+IGlzIHRoZSBlc2NhcGUga2V5XQorCitOb3RlIHRoYXQgd2hlbiB5b3UgY3JlYXRlIGEgLnZpbXJjIGZpbGUsIHRoaXMgY2FuIGluZmx1ZW5jZSB0aGUgJ2NvbXBhdGlibGUnCitvcHRpb24sIHdoaWNoIGhhcyBzZXZlcmFsIHNpZGUgZWZmZWN0cy4gIFNlZSB8J2NvbXBhdGlibGUnfC4KKyI6bWt2aW1yYyIsICI6bWtleHJjIiBhbmQgIjpta3Nlc3Npb24iIHdyaXRlIHRoZSBjb21tYW5kIHRvIHNldCBvciByZXNldCB0aGUKKydjb21wYXRpYmxlJyBvcHRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGZpcnN0LCBiZWNhdXNlIG9mIHRoZXNlIHNpZGUgZWZmZWN0cy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBWaWV3cyBhbmQgU2Vzc2lvbnMJCQkJCSp2aWV3cy1zZXNzaW9ucyoKKworVGhpcyBpcyBpbnRyb2R1Y2VkIGluIHNlY3Rpb25zIHwyMS40fCBhbmQgfDIxLjV8IG9mIHRoZSB1c2VyIG1hbnVhbC4KKworCQkJCQkJKlZpZXcqICp2aWV3LWZpbGUqCitBIFZpZXcgaXMgYSBjb2xsZWN0aW9uIG9mIHNldHRpbmdzIHRoYXQgYXBwbHkgdG8gb25lIHdpbmRvdy4gIFlvdSBjYW4gc2F2ZSBhCitWaWV3IGFuZCB3aGVuIHlvdSByZXN0b3JlIGl0IGxhdGVyLCB0aGUgdGV4dCBpcyBkaXNwbGF5ZWQgaW4gdGhlIHNhbWUgd2F5LgorVGhlIG9wdGlvbnMgYW5kIG1hcHBpbmdzIGluIHRoaXMgd2luZG93IHdpbGwgYWxzbyBiZSByZXN0b3JlZCwgc28gdGhhdCB5b3UgY2FuCitjb250aW51ZSBlZGl0aW5nIGxpa2Ugd2hlbiB0aGUgVmlldyB3YXMgc2F2ZWQuCisKKwkJCQkJCSpTZXNzaW9uKiAqc2Vzc2lvbi1maWxlKgorQSBTZXNzaW9uIGtlZXBzIHRoZSBWaWV3cyBmb3IgYWxsIHdpbmRvd3MsIHBsdXMgdGhlIGdsb2JhbCBzZXR0aW5ncy4gIFlvdSBjYW4KK3NhdmUgYSBTZXNzaW9uIGFuZCB3aGVuIHlvdSByZXN0b3JlIGl0IGxhdGVyIHRoZSB3aW5kb3cgbGF5b3V0IGxvb2tzIHRoZSBzYW1lLgorWW91IGNhbiB1c2UgYSBTZXNzaW9uIHRvIHF1aWNrbHkgc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IHByb2plY3RzLAorYXV0b21hdGljYWxseSBsb2FkaW5nIHRoZSBmaWxlcyB5b3Ugd2VyZSBsYXN0IHdvcmtpbmcgb24gaW4gdGhhdCBwcm9qZWN0LgorCitWaWV3cyBhbmQgU2Vzc2lvbnMgYXJlIGEgbmljZSBhZGRpdGlvbiB0byB2aW1pbmZvLWZpbGVzLCB3aGljaCBhcmUgdXNlZCB0bworcmVtZW1iZXIgaW5mb3JtYXRpb24gZm9yIGFsbCBWaWV3cyBhbmQgU2Vzc2lvbnMgdG9nZXRoZXIgfHZpbWluZm8tZmlsZXwuCisKK1lvdSBjYW4gcXVpY2tseSBzdGFydCBlZGl0aW5nIHdpdGggYSBwcmV2aW91c2x5IHNhdmVkIFZpZXcgb3IgU2Vzc2lvbiB3aXRoIHRoZQorfC1TfCBhcmd1bWVudDogPgorCXZpbSAtUyBTZXNzaW9uLnZpbQorPAorQWxsIHRoaXMgaXMge25vdCBpbiBWaX0gYW5kIHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKK3wrbWtzZXNzaW9ufCBmZWF0dXJlfS4KKworCQkJCQkJCSo6bWtzKiAqOm1rc2Vzc2lvbioKKzpta3NbZXNzaW9uXVshXSBbZmlsZV0JV3JpdGUgYSBWaW0gc2NyaXB0IHRoYXQgcmVzdG9yZXMgdGhlIGN1cnJlbnQgZWRpdGluZworCQkJc2Vzc2lvbi4KKwkJCVdoZW4gWyFdIGlzIGluY2x1ZGVkIGFuIGV4aXN0aW5nIGZpbGUgaXMgb3ZlcndyaXR0ZW4uCisJCQlXaGVuIFtmaWxlXSBpcyBvbWl0dGVkICJTZXNzaW9uLnZpbSIgaXMgdXNlZC4KKworVGhlIG91dHB1dCBvZiAiOm1rc2Vzc2lvbiIgaXMgbGlrZSAiOm1rdmltcmMiLCBidXQgYWRkaXRpb25hbCBjb21tYW5kcyBhcmUKK2FkZGVkIHRvIHRoZSBmaWxlLiAgV2hpY2ggb25lcyBkZXBlbmRzIG9uIHRoZSAnc2Vzc2lvbm9wdGlvbnMnIG9wdGlvbi4gIFRoZQorcmVzdWx0aW5nIGZpbGUsIHdoZW4gZXhlY3V0ZWQgd2l0aCBhICI6c291cmNlIiBjb21tYW5kOgorMS4gUmVzdG9yZXMgZ2xvYmFsIG1hcHBpbmdzIGFuZCBvcHRpb25zLCBpZiAnc2Vzc2lvbm9wdGlvbnMnIGNvbnRhaW5zCisgICAib3B0aW9ucyIuICBTY3JpcHQtbG9jYWwgbWFwcGluZ3Mgd2lsbCBub3QgYmUgd3JpdHRlbi4KKzIuIFJlc3RvcmVzIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIgYW5kIGNvbnRhaW4KKyAgIGF0IGxlYXN0IG9uZSBsb3dlcmNhc2UgbGV0dGVyLCBpZiAnc2Vzc2lvbm9wdGlvbnMnIGNvbnRhaW5zICJnbG9iYWxzIi4KKzMuIFVubG9hZHMgYWxsIGN1cnJlbnRseSBsb2FkZWQgYnVmZmVycy4KKzQuIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiAnc2Vzc2lvbm9wdGlvbnMnIGNvbnRhaW5zICJjdXJkaXIiLCBvcgorICAgc2V0cyB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gd2hlcmUgdGhlIFNlc3Npb24gZmlsZSBpcyBpZiAnc2Vzc2lvbm9wdGlvbnMnCisgICBjb250YWlucyAic2VzZGlyIi4KKzUuIFJlc3RvcmVzIEdVSSBWaW0gd2luZG93IHBvc2l0aW9uLCBpZiAnc2Vzc2lvbm9wdGlvbnMnIGNvbnRhaW5zICJ3aW5wb3MiLgorNi4gUmVzdG9yZXMgc2NyZWVuIHNpemUsIGlmICdzZXNzaW9ub3B0aW9ucycgY29udGFpbnMgInJlc2l6ZSIuCis3LiBSZWxvYWRzIHRoZSBidWZmZXIgbGlzdCwgd2l0aCB0aGUgbGFzdCBjdXJzb3IgcG9zaXRpb25zLiAgSWYKKyAgICdzZXNzaW9ub3B0aW9ucycgY29udGFpbnMgImJ1ZmZlcnMiIHRoZW4gYWxsIGJ1ZmZlcnMgYXJlIHJlc3RvcmVkLAorICAgaW5jbHVkaW5nIGhpZGRlbiBhbmQgdW5sb2FkZWQgYnVmZmVycy4gIE90aGVyd2lzZSBvbmx5IGJ1ZmZlcnMgaW4gd2luZG93cworICAgYXJlIHJlc3RvcmVkLgorOC4gUmVzdG9yZXMgYWxsIHdpbmRvd3Mgd2l0aCB0aGUgc2FtZSBsYXlvdXQuICBJZiAnc2Vzc2lvbm9wdGlvbnMnIGNvbnRhaW5zCisgICBjb250YWlucyAiaGVscCIsIGhlbHAgd2luZG93cyBhcmUgcmVzdG9yZWQuICBJZiAnc2Vzc2lvbm9wdGlvbnMnIGNvbnRhaW5zCisgICAiYmxhbmsiLCB3aW5kb3dzIGVkaXRpbmcgYSBidWZmZXIgd2l0aG91dCBhIG5hbWUgd2lsbCBiZSByZXN0b3JlZC4KKyAgIElmICdzZXNzaW9ub3B0aW9ucycgY29udGFpbnMgIndpbnNpemUiIGFuZCBubyAoaGVscC9ibGFuaykgd2luZG93cyB3ZXJlCisgICBsZWZ0IG91dCwgdGhlIHdpbmRvdyBzaXplcyBhcmUgcmVzdG9yZWQgKHJlbGF0aXZlIHRvIHRoZSBzY3JlZW4gc2l6ZSkuCisgICBPdGhlcndpc2UsIHRoZSB3aW5kb3dzIGFyZSBqdXN0IGdpdmVuIHNlbnNpYmxlIHNpemVzLgorOS4gUmVzdG9yZXMgdGhlIFZpZXdzIGZvciBhbGwgdGhlIHdpbmRvd3MsIGFzIHdpdGggfDpta3ZpZXd8LiAgQnV0CisgICAnc2Vzc2lvbm9wdGlvbnMnIGlzIHVzZWQgaW5zdGVhZCBvZiAndmlld29wdGlvbnMnLgorMTAuIElmIGEgZmlsZSBleGlzdHMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBTZXNzaW9uIGZpbGUsIGJ1dCBlbmRpbmcgaW4KKyAgICJ4LnZpbSIgKGZvciBlWHRyYSksIGV4ZWN1dGVzIHRoYXQgYXMgd2VsbC4gIFlvdSBjYW4gdXNlICp4LnZpbSBmaWxlcyB0bworICAgc3BlY2lmeSBhZGRpdGlvbmFsIHNldHRpbmdzIGFuZCBhY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIFNlc3Npb24sCisgICBzdWNoIGFzIGNyZWF0aW5nIG1lbnUgaXRlbXMgaW4gdGhlIEdVSSB2ZXJzaW9uLgorCitBZnRlciByZXN0b3JpbmcgdGhlIFNlc3Npb24sIHRoZSBmdWxsIGZpbGVuYW1lIG9mIHlvdXIgY3VycmVudCBTZXNzaW9uIGlzCithdmFpbGFibGUgaW4gdGhlIGludGVybmFsIHZhcmlhYmxlICJ2OnRoaXNfc2Vzc2lvbiIgfHRoaXNfc2Vzc2lvbi12YXJpYWJsZXwuCitBbiBleGFtcGxlIG1hcHBpbmc6ID4KKyAgOm5tYXAgPEYyPiA6d2E8QmFyPmV4ZSAibWtzZXNzaW9uISAiIC4gdjp0aGlzX3Nlc3Npb248Q1I+OnNvIH4vc2Vzc2lvbnMvCitUaGlzIHNhdmVzIHRoZSBjdXJyZW50IFNlc3Npb24sIGFuZCBzdGFydHMgb2ZmIHRoZSBjb21tYW5kIHRvIGxvYWQgYW5vdGhlci4KKworCQkJCQkJCSo6bWt2aWUqICo6bWt2aWV3KgorOm1rdmllW3ddWyFdIFtmaWxlXQlXcml0ZSBhIFZpbSBzY3JpcHQgdGhhdCByZXN0b3JlcyB0aGUgY29udGVudHMgb2YgdGhlCisJCQljdXJyZW50IHdpbmRvdy4KKwkJCVdoZW4gWyFdIGlzIGluY2x1ZGVkIGFuIGV4aXN0aW5nIGZpbGUgaXMgb3ZlcndyaXR0ZW4uCisJCQlXaGVuIFtmaWxlXSBpcyBvbWl0dGVkIG9yIGlzIGEgbnVtYmVyIGZyb20gMSB0byA5LCBhCisJCQluYW1lIGlzIGdlbmVyYXRlZCBhbmQgJ3ZpZXdkaXInIHByZXBlbmRlZC4gIFdoZW4gbGFzdAorCQkJZGlyZWN0b3J5IG5hbWUgaW4gJ3ZpZXdkaXInIGRvZXMgbm90IGV4aXN0LCB0aGlzCisJCQlkaXJlY3RvcnkgaXMgY3JlYXRlZC4KKwkJCUFuIGV4aXN0aW5nIGZpbGUgaXMgYWx3YXlzIG92ZXJ3cml0dGVuIHRoZW4uICBVc2UKKwkJCXw6bG9hZHZpZXd8IHRvIGxvYWQgdGhpcyB2aWV3IGFnYWluLgorCQkJV2hlbiBbZmlsZV0gaXMgdGhlIG5hbWUgb2YgYSBmaWxlICgndmlld2RpcicgaXMgbm90CisJCQl1c2VkKSwgYSBjb21tYW5kIHRvIGVkaXQgdGhlIGZpbGUgaXMgYWRkZWQgdG8gdGhlCisJCQlnZW5lcmF0ZWQgZmlsZS4KKworVGhlIG91dHB1dCBvZiAiOm1rdmlldyIgY29udGFpbnMgdGhlc2UgaXRlbXM6CisxLiBUaGUgYXJndW1lbnQgbGlzdCB1c2VkIGluIHRoZSB3aW5kb3cuICBXaGVuIHRoZSBnbG9iYWwgYXJndW1lbnQgbGlzdCBpcworICAgdXNlZCBpdCBpcyByZXNldCB0byB0aGUgZ2xvYmFsIGxpc3QuCisgICBUaGUgaW5kZXggaW4gdGhlIGFyZ3VtZW50IGxpc3QgaXMgYWxzbyByZXN0b3JlZC4KKzIuIFRoZSBmaWxlIGJlaW5nIGVkaXRlZCBpbiB0aGUgd2luZG93LiAgSWYgdGhlcmUgaXMgbm8gZmlsZSwgdGhlIHdpbmRvdyBpcworICAgbWFkZSBlbXB0eS4KKzMuIFJlc3RvcmUgbWFwcGluZ3MsIGFiYnJldmlhdGlvbnMgYW5kIG9wdGlvbnMgbG9jYWwgdG8gdGhlIHdpbmRvdyBpZgorICAgJ3ZpZXdvcHRpb25zJyBjb250YWlucyAib3B0aW9ucyIgb3IgImxvY2Fsb3B0aW9ucyIuICBGb3IgdGhlIG9wdGlvbnMgaXQKKyAgIHJlc3RvcmVzIG9ubHkgdmFsdWVzIHRoYXQgYXJlIGxvY2FsIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgdmFsdWVzIGxvY2FsCisgICB0byB0aGUgd2luZG93LgorICAgV2hlbiBzdG9yaW5nIHRoZSB2aWV3IGFzIHBhcnQgb2YgYSBzZXNzaW9uIGFuZCAib3B0aW9ucyIgaXMgaW4KKyAgICdzZXNzaW9ub3B0aW9ucycsIGdsb2JhbCB2YWx1ZXMgZm9yIGxvY2FsIG9wdGlvbnMgd2lsbCBiZSBzdG9yZWQgdG9vLgorNC4gUmVzdG9yZSBmb2xkcyB3aGVuIHVzaW5nIG1hbnVhbCBmb2xkaW5nIGFuZCAndmlld29wdGlvbnMnIGNvbnRhaW5zCisgICAiZm9sZHMiLiAgUmVzdG9yZSBtYW51YWxseSBvcGVuZWQgYW5kIGNsb3NlZCBmb2xkcy4KKzUuIFRoZSBzY3JvbGwgcG9zaXRpb24gYW5kIHRoZSBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIGZpbGUuICBEb2Vzbid0IHdvcmsgdmVyeQorICAgd2VsbCB3aGVuIHRoZXJlIGFyZSBjbG9zZWQgZm9sZHMuCis2LiBUaGUgbG9jYWwgY3VycmVudCBkaXJlY3RvcnksIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBnbG9iYWwgY3VycmVudAorICAgZGlyZWN0b3J5LgorCitOb3RlIHRoYXQgVmlld3MgYW5kIFNlc3Npb25zIGFyZSBub3QgcGVyZmVjdDoKKy0gVGhleSBkb24ndCByZXN0b3JlIGV2ZXJ5dGhpbmcuICBGb3IgZXhhbXBsZSwgZGVmaW5lZCBmdW5jdGlvbnMsIGF1dG9jb21tYW5kcworICBhbmQgIjpzeW50YXggb24iIGFyZSBub3QgaW5jbHVkZWQuICBUaGluZ3MgbGlrZSByZWdpc3RlciBjb250ZW50cyBhbmQKKyAgY29tbWFuZCBsaW5lIGhpc3RvcnkgYXJlIGluIHZpbWluZm8sIG5vdCBpbiBTZXNzaW9ucyBvciBWaWV3cy4KKy0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgYXJlIG9ubHkgc2V0IHdoZW4gdGhlIGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0IHZhbHVlLgorICBXaGVuIHRoZSBjdXJyZW50IHZhbHVlIGlzIG5vdCB0aGUgZGVmYXVsdCB2YWx1ZSwgbG9hZGluZyBhIFNlc3Npb24gd2lsbCBub3QKKyAgc2V0IGl0IGJhY2sgdG8gdGhlIGRlZmF1bHQgdmFsdWUuICBMb2NhbCBvcHRpb25zIHdpbGwgYmUgc2V0IGJhY2sgdG8gdGhlCisgIGRlZmF1bHQgdmFsdWUgdGhvdWdoLgorLSBFeGlzdGluZyBtYXBwaW5ncyB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGhvdXQgd2FybmluZy4gIEFuIGV4aXN0aW5nIG1hcHBpbmcKKyAgbWF5IGNhdXNlIGFuIGVycm9yIGZvciBhbWJpZ3VpdHkuCistIFdoZW4gc3RvcmluZyBtYW51YWwgZm9sZHMgYW5kIHdoZW4gc3RvcmluZyBtYW51YWxseSBvcGVuZWQvY2xvc2VkIGZvbGRzLAorICBjaGFuZ2VzIGluIHRoZSBmaWxlIGJldHdlZW4gc2F2aW5nIGFuZCBsb2FkaW5nIHRoZSB2aWV3IHdpbGwgbWVzcyBpdCB1cC4KKy0gVGhlIFZpbSBzY3JpcHQgaXMgbm90IHZlcnkgZWZmaWNpZW50LiAgQnV0IHN0aWxsIGZhc3RlciB0aGFuIHR5cGluZyB0aGUKKyAgY29tbWFuZHMgeW91cnNlbGYhCisKKwkJCQkJCQkqOmxvKiAqOmxvYWR2aWV3KgorOmxvW2Fkdmlld10gW25yXQlMb2FkIHRoZSB2aWV3IGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2hlbiBbbnJdIGlzCisJCQlvbWl0dGVkLCB0aGUgdmlldyBzdG9yZWQgd2l0aCAiOm1rdmlldyIgaXMgbG9hZGVkLgorCQkJV2hlbiBbbnJdIGlzIHNwZWNpZmllZCwgdGhlIHZpZXcgc3RvcmVkIHdpdGggIjpta3ZpZXcKKwkJCVtucl0iIGlzIGxvYWRlZC4KKworVGhlIGNvbWJpbmF0aW9uIG9mICI6bWt2aWV3IiBhbmQgIjpsb2FkdmlldyIgY2FuIGJlIHVzZWQgdG8gc3RvcmUgdXAgdG8gdGVuCitkaWZmZXJlbnQgdmlld3Mgb2YgYSBmaWxlLiAgVGhlc2UgYXJlIHJlbWVtYmVyZWQgaW4gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQKK3dpdGggdGhlICd2aWV3ZGlyJyBvcHRpb24uICBUaGUgdmlld3MgYXJlIHN0b3JlZCB1c2luZyB0aGUgZmlsZSBuYW1lLiAgSWYgYQorZmlsZSBpcyByZW5hbWVkIG9yIGFjY2Vzc2VkIHRocm91Z2ggYSAoc3ltYm9saWMpIGxpbmsgdGhlIHZpZXcgd2lsbCBub3QgYmUKK2ZvdW5kLgorCitZb3UgbWlnaHQgd2FudCB0byBjbGVhbiB1cCB5b3VyICd2aWV3ZGlyJyBkaXJlY3Rvcnkgbm93IGFuZCB0aGVuLgorCitUbyBhdXRvbWF0aWNhbGx5IHNhdmUgYW5kIHJlc3RvcmUgdmlld3MgZm9yICouYyBmaWxlczogPgorCWF1IEJ1ZldpbkxlYXZlICouYyBta3ZpZXcKKwlhdSBCdWZXaW5FbnRlciAqLmMgc2lsZW50IGxvYWR2aWV3CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gVGhlIHZpbWluZm8gZmlsZQkJCQkqdmltaW5mbyogKnZpbWluZm8tZmlsZSogKkUxMzYqCisJCQkJCQkqRTU3NSogKkU1NzYqICpFNTc3KgorSWYgeW91IGV4aXQgVmltIGFuZCBsYXRlciBzdGFydCBpdCBhZ2FpbiwgeW91IHdvdWxkIG5vcm1hbGx5IGxvc2UgYSBsb3Qgb2YKK2luZm9ybWF0aW9uLiAgVGhlIHZpbWluZm8gZmlsZSBjYW4gYmUgdXNlZCB0byByZW1lbWJlciB0aGF0IGluZm9ybWF0aW9uLCB3aGljaAorZW5hYmxlcyB5b3UgdG8gY29udGludWUgd2hlcmUgeW91IGxlZnQgb2ZmLgorCitUaGlzIGlzIGludHJvZHVjZWQgaW4gc2VjdGlvbiB8MjEuM3wgb2YgdGhlIHVzZXIgbWFudWFsLgorCitUaGUgdmltaW5mbyBmaWxlIGlzIHVzZWQgdG8gc3RvcmU6CistIFRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeS4KKy0gVGhlIHNlYXJjaCBzdHJpbmcgaGlzdG9yeS4KKy0gVGhlIGlucHV0LWxpbmUgaGlzdG9yeS4KKy0gQ29udGVudHMgb2YgcmVnaXN0ZXJzLgorLSBNYXJrcyBmb3Igc2V2ZXJhbCBmaWxlcy4KKy0gRmlsZSBtYXJrcywgcG9pbnRpbmcgdG8gbG9jYXRpb25zIGluIGZpbGVzLgorLSBMYXN0IHNlYXJjaC9zdWJzdGl0dXRlIHBhdHRlcm4gKGZvciAnbicgYW5kICcmJykuCistIFRoZSBidWZmZXIgbGlzdC4KKy0gR2xvYmFsIHZhcmlhYmxlcy4KKworVGhlIHZpbWluZm8gZmlsZSBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gdGhlIHwrdmltaW5mb3wgZmVhdHVyZSBoYXMgYmVlbgorZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorCitZb3UgY291bGQgYWxzbyB1c2UgYSBTZXNzaW9uIGZpbGUuICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSB2aW1pbmZvIGZpbGUKK2RvZXMgbm90IGRlcGVuZCBvbiB3aGF0IHlvdSBhcmUgd29ya2luZyBvbi4gIFRoZXJlIG5vcm1hbGx5IGlzIG9ubHkgb25lCit2aW1pbmZvIGZpbGUuICBTZXNzaW9uIGZpbGVzIGFyZSB1c2VkIHRvIHNhdmUgdGhlIHN0YXRlIG9mIGEgc3BlY2lmaWMgZWRpdGluZworU2Vzc2lvbi4gIFlvdSBjb3VsZCBoYXZlIHNldmVyYWwgU2Vzc2lvbiBmaWxlcywgb25lIGZvciBlYWNoIHByb2plY3QgeW91IGFyZQord29ya2luZyBvbi4gIFZpbWluZm8gYW5kIFNlc3Npb24gZmlsZXMgdG9nZXRoZXIgY2FuIGJlIHVzZWQgdG8gZWZmZWN0aXZlbHkKK2VudGVyIFZpbSBhbmQgZGlyZWN0bHkgc3RhcnQgd29ya2luZyBpbiB5b3VyIGRlc2lyZWQgc2V0dXAuIHxzZXNzaW9uLWZpbGV8CisKKwkJCQkJCQkqdmltaW5mby1yZWFkKgorV2hlbiBWaW0gaXMgc3RhcnRlZCBhbmQgdGhlICd2aW1pbmZvJyBvcHRpb24gaXMgbm9uLWVtcHR5LCB0aGUgY29udGVudHMgb2YKK3RoZSB2aW1pbmZvIGZpbGUgYXJlIHJlYWQgYW5kIHRoZSBpbmZvIGNhbiBiZSB1c2VkIGluIHRoZSBhcHByb3ByaWF0ZSBwbGFjZXMuCitUaGUgbWFya3MgYXJlIG5vdCByZWFkIGluIGF0IHN0YXJ0dXAgKGJ1dCBmaWxlIG1hcmtzIGFyZSkuICBTZWUKK3xpbml0aWFsaXphdGlvbnwgZm9yIGhvdyB0byBzZXQgdGhlICd2aW1pbmZvJyBvcHRpb24gdXBvbiBzdGFydHVwLgorCisJCQkJCQkJKnZpbWluZm8td3JpdGUqCitXaGVuIFZpbSBleGl0cyBhbmQgJ3ZpbWluZm8nIGlzIG5vbi1lbXB0eSwgdGhlIGluZm8gaXMgc3RvcmVkIGluIHRoZSB2aW1pbmZvCitmaWxlIChpdCdzIGFjdHVhbGx5IG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBvbmUsIGlmIG9uZSBleGlzdHMpLiAgVGhlCisndmltaW5mbycgb3B0aW9uIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBpbmZvIHNob3VsZCBiZQorc3RvcmVkLCBhbmQgY29udGFpbnMgbGltaXRzIG9uIGhvdyBtdWNoIHNob3VsZCBiZSBzdG9yZWQgKHNlZSAndmltaW5mbycpLgorCitOb3RlcyBmb3IgVW5peDoKKy0gVGhlIGZpbGUgcHJvdGVjdGlvbiBmb3IgdGhlIHZpbWluZm8gZmlsZSB3aWxsIGJlIHNldCB0byBwcmV2ZW50IG90aGVyIHVzZXJzCisgIGZyb20gYmVpbmcgYWJsZSB0byByZWFkIGl0LCBiZWNhdXNlIGl0IG1heSBjb250YWluIGFueSB0ZXh0IG9yIGNvbW1hbmRzIHRoYXQKKyAgeW91IGhhdmUgd29ya2VkIHdpdGguCistIElmIHlvdSB3YW50IHRvIHNoYXJlIHRoZSB2aW1pbmZvIGZpbGUgd2l0aCBvdGhlciB1c2VycyAoZS5nLiB3aGVuIHlvdSAic3UiCisgIHRvIGFub3RoZXIgdXNlciksIHlvdSBjYW4gbWFrZSB0aGUgZmlsZSB3cml0YWJsZSBmb3IgdGhlIGdyb3VwIG9yIGV2ZXJ5Ym9keS4KKyAgVmltIHdpbGwgcHJlc2VydmUgdGhpcyB3aGVuIHdyaXRpbmcgbmV3IHZpbWluZm8gZmlsZXMuICBCZSBjYXJlZnVsLCBkb24ndAorICBhbGxvdyBqdXN0IGFueWJvZHkgdG8gcmVhZCBhbmQgd3JpdGUgeW91ciB2aW1pbmZvIGZpbGUhCistIFZpbSB3aWxsIG5vdCBvdmVyd3JpdGUgYSB2aW1pbmZvIGZpbGUgdGhhdCBpcyBub3Qgd3JpdGFibGUgYnkgdGhlIGN1cnJlbnQKKyAgInJlYWwiIHVzZXIuICBUaGlzIGhlbHBzIGZvciB3aGVuIHlvdSBkaWQgInN1IiB0byBiZWNvbWUgcm9vdCwgYnV0IHlvdXIKKyAgJEhPTUUgaXMgc3RpbGwgc2V0IHRvIGEgbm9ybWFsIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIE90aGVyd2lzZSBWaW0gd291bGQKKyAgY3JlYXRlIGEgdmltaW5mbyBmaWxlIG93bmVkIGJ5IHJvb3QgdGhhdCBub2JvZHkgZWxzZSBjYW4gcmVhZC4KKworTWFya3MgYXJlIHN0b3JlZCBmb3IgZWFjaCBmaWxlIHNlcGFyYXRlbHkuICBXaGVuIGEgZmlsZSBpcyByZWFkIGFuZCAndmltaW5mbycKK2lzIG5vbi1lbXB0eSwgdGhlIG1hcmtzIGZvciB0aGF0IGZpbGUgYXJlIHJlYWQgZnJvbSB0aGUgdmltaW5mbyBmaWxlLiAgTk9URToKK1RoZSBtYXJrcyBhcmUgb25seSB3cml0dGVuIHdoZW4gZXhpdGluZyBWaW0sIHdoaWNoIGlzIGZpbmUgYmVjYXVzZSBtYXJrcyBhcmUKK3JlbWVtYmVyZWQgZm9yIGFsbCB0aGUgZmlsZXMgeW91IGhhdmUgb3BlbmVkIGluIHRoZSBjdXJyZW50IGVkaXRpbmcgc2Vzc2lvbiwKK3VubGVzcyAiOmJkZWwiIGlzIHVzZWQuICBJZiB5b3Ugd2FudCB0byBzYXZlIHRoZSBtYXJrcyBmb3IgYSBmaWxlIHRoYXQgeW91IGFyZQorYWJvdXQgdG8gYWJhbmRvbiB3aXRoICI6YmRlbCIsIHVzZSAiOnd2Ii4gIFRoZSAnWycgYW5kICddJyBtYXJrcyBhcmUgbm90CitzdG9yZWQsIGJ1dCB0aGUgJyInIG1hcmsgaXMuICBUaGUgJyInIG1hcmsgaXMgdmVyeSB1c2VmdWwgZm9yIGp1bXBpbmcgdG8gdGhlCitjdXJzb3IgcG9zaXRpb24gd2hlbiB0aGUgZmlsZSB3YXMgbGFzdCBleGl0ZWQuICBObyBtYXJrcyBhcmUgc2F2ZWQgZm9yIGZpbGVzCit0aGF0IHN0YXJ0IHdpdGggYW55IHN0cmluZyBnaXZlbiB3aXRoIHRoZSAiciIgZmxhZyBpbiAndmltaW5mbycuICBUaGlzIGNhbiBiZQordXNlZCB0byBhdm9pZCBzYXZpbmcgbWFya3MgZm9yIGZpbGVzIG9uIHJlbW92YWJsZSBtZWRpYSAoZm9yIE1TLURPUyB5b3Ugd291bGQKK3VzZSAicmE6LHJiOiIsIGZvciBBbWlnYSAicmRmMDoscmRmMToscmRmMjoiKS4KKworCQkJCQkJCSp2aW1pbmZvLWZpbGUtbWFya3MqCitVcHBlcmNhc2UgbWFya3MgKCdBIHRvICdaKSBhcmUgc3RvcmVkIHdoZW4gd3JpdGluZyB0aGUgdmltaW5mbyBmaWxlLiAgVGhlCitudW1iZXJlZCBtYXJrcyAoJzAgdG8gJzkpIGFyZSBhIGJpdCBzcGVjaWFsLiAgV2hlbiB0aGUgdmltaW5mbyBmaWxlIGlzIHdyaXR0ZW4KKyh3aGVuIGV4aXRpbmcgb3Igd2l0aCB0aGUgIjp3dmltaW5mbyIgY29tbWFuZCksICcwIGlzIHNldCB0byB0aGUgY3VycmVudCBjdXJzb3IKK3Bvc2l0aW9uIGFuZCBmaWxlLiAgVGhlIG9sZCAnMCBpcyBtb3ZlZCB0byAnMSwgJzEgdG8gJzIsIGV0Yy4gIFRoaXMKK3Jlc2VtYmxlcyB3aGF0IGhhcHBlbnMgd2l0aCB0aGUgIjEgdG8gIjkgZGVsZXRlIHJlZ2lzdGVycy4gIElmIHRoZSBjdXJyZW50CitjdXJzb3IgcG9zaXRpb24gaXMgYWxyZWFkeSBwcmVzZW50IGluICcwIHRvICc5LCBpdCBpcyBtb3ZlZCB0byAnMCwgdG8gYXZvaWQKK2hhdmluZyB0aGUgc2FtZSBwb3NpdGlvbiB0d2ljZS4gIFRoZSByZXN1bHQgaXMgdGhhdCB3aXRoICInMCIsIHlvdSBjYW4ganVtcAorYmFjayB0byB0aGUgZmlsZSBhbmQgbGluZSB3aGVyZSB5b3UgZXhpdGVkIFZpbS4gIFRvIGRvIHRoYXQgcmlnaHQgYXdheSwgdHJ5Cit1c2luZyB0aGlzIGNvbW1hbmQ6ID4KKworCXZpbSAtYyAibm9ybWFsICcwIgorCitJbiBhIHNoZWxsIHlvdSBjb3VsZCBtYWtlIGFuIGFsaWFzIGZvciBpdDogPgorCisJYWxpYXMgbHZpbSB2aW0gLWMgJyInbm9ybWFsICInIjAnIicKKworVXNlIHRoZSAiciIgZmxhZyBpbiAndmltaW5mbycgdG8gc3BlY2lmeSBmb3Igd2hpY2ggZmlsZXMgbm8gbWFya3Mgc2hvdWxkIGJlCityZW1lbWJlcmVkLgorCisKK1ZJTUlORk8gRklMRSBOQU1FCQkJCQkqdmltaW5mby1maWxlLW5hbWUqCisKKy0gVGhlIGRlZmF1bHQgbmFtZSBvZiB0aGUgdmltaW5mbyBmaWxlIGlzICIkSE9NRS8udmltaW5mbyIgZm9yIFVuaXggYW5kIE9TLzIsCisgICJzOi52aW1pbmZvIiBmb3IgQW1pZ2EsICIkSE9NRVxfdmltaW5mbyIgZm9yIE1TLURPUyBhbmQgV2luMzIuICBGb3IgdGhlIGxhc3QKKyAgdHdvLCB3aGVuICRIT01FIGlzIG5vdCBzZXQsICIkVklNXF92aW1pbmZvIiBpcyB1c2VkLiAgV2hlbiAkVklNIGlzIGFsc28gbm90CisgIHNldCwgImM6XF92aW1pbmZvIiBpcyB1c2VkLiAgRm9yIE9TLzIgIiRWSU0vLnZpbWluZm8iIGlzIHVzZWQgd2hlbiAkSE9NRSBpcworICBub3Qgc2V0IGFuZCAkVklNIGlzIHNldC4KKy0gVGhlICduJyBmbGFnIGluIHRoZSAndmltaW5mbycgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW5vdGhlciB2aW1pbmZvCisgIGZpbGUgbmFtZSB8J3ZpbWluZm8nfC4KKy0gVGhlICItaSIgVmltIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHNldCBhbm90aGVyIGZpbGUgbmFtZSwgfC1pfC4gIFdoZW4gdGhlCisgIGZpbGUgbmFtZSBnaXZlbiBpcyAiTk9ORSIgKGFsbCB1cHBlcmNhc2UpLCBubyB2aW1pbmZvIGZpbGUgaXMgZXZlciByZWFkIG9yCisgIHdyaXR0ZW4uICBBbHNvIG5vdCBmb3IgdGhlIGNvbW1hbmRzIGJlbG93IQorLSBGb3IgdGhlIGNvbW1hbmRzIGJlbG93LCBhbm90aGVyIGZpbGUgbmFtZSBjYW4gYmUgZ2l2ZW4sIG92ZXJyaWRpbmcgdGhlCisgIGRlZmF1bHQgYW5kIHRoZSBuYW1lIGdpdmVuIHdpdGggJ3ZpbWluZm8nIG9yICItaSIgKHVubGVzcyBpdCdzIE5PTkUpLgorCisKK0NIQVJBQ1RFUiBFTkNPRElORwkJCQkJKnZpbWluZm8tZW5jb2RpbmcqCisKK1RoZSB0ZXh0IGluIHRoZSB2aW1pbmZvIGZpbGUgaXMgZW5jb2RlZCBhcyBzcGVjaWZpZWQgd2l0aCB0aGUgJ2VuY29kaW5nJworb3B0aW9uLiAgTm9ybWFsbHkgeW91IHdpbGwgYWx3YXlzIHdvcmsgd2l0aCB0aGUgc2FtZSAnZW5jb2RpbmcnIHZhbHVlLCBhbmQKK3RoaXMgd29ya3MganVzdCBmaW5lLiAgSG93ZXZlciwgaWYgeW91IHJlYWQgdGhlIHZpbWluZm8gZmlsZSB3aXRoIGFub3RoZXIKK3ZhbHVlIGZvciAnZW5jb2RpbmcnIHRoYW4gd2hhdCBpdCB3YXMgd3JpdHRlbiB3aXRoLCBzb21lIG9mIHRoZSB0ZXh0Cisobm9uLUFTQ0lJIGNoYXJhY3RlcnMpIG1heSBiZSBpbnZhbGlkLiAgSWYgdGhpcyBpcyB1bmFjY2VwdGFibGUsIGFkZCB0aGUgJ2MnCitmbGFnIHRvIHRoZSAndmltaW5mbycgb3B0aW9uOiA+CisJOnNldCB2aW1pbmZvKz1jCitWaW0gd2lsbCB0aGVuIGF0dGVtcHQgdG8gY29udmVydCB0aGUgdGV4dCBpbiB0aGUgdmltaW5mbyBmaWxlIGZyb20gdGhlCisnZW5jb2RpbmcnIHZhbHVlIGl0IHdhcyB3cml0dGVuIHdpdGggdG8gdGhlIGN1cnJlbnQgJ2VuY29kaW5nJyB2YWx1ZS4gIFRoaXMKK3JlcXVpcmVzIFZpbSB0byBiZSBjb21waWxlZCB3aXRoIHRoZSB8K2ljb252fCBmZWF0dXJlLiAgRmlsZW5hbWVzIGFyZSBub3QKK2NvbnZlcnRlZC4KKworCitNQU5VQUxMWSBSRUFESU5HIEFORCBXUklUSU5HCisKK1R3byBjb21tYW5kcyBjYW4gYmUgdXNlZCB0byByZWFkIGFuZCB3cml0ZSB0aGUgdmltaW5mbyBmaWxlIG1hbnVhbGx5LiAgVGhpcworY2FuIGJlIHVzZWQgdG8gZXhjaGFuZ2UgcmVnaXN0ZXJzIGJldHdlZW4gdHdvIHJ1bm5pbmcgVmltIHByb2dyYW1zOiBGaXJzdAordHlwZSAiOnd2IiBpbiBvbmUgYW5kIHRoZW4gIjpydiIgaW4gdGhlIG90aGVyLiAgTm90ZSB0aGF0IGlmIHRoZSByZWdpc3RlcgorYWxyZWFkeSBjb250YWluZWQgc29tZXRoaW5nLCB0aGVuICI6cnYhIiB3b3VsZCBiZSByZXF1aXJlZC4gIEFsc28gbm90ZQoraG93ZXZlciB0aGF0IHRoaXMgbWVhbnMgZXZlcnl0aGluZyB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggaW5mb3JtYXRpb24gZnJvbQordGhlIGZpcnN0IFZpbSwgaW5jbHVkaW5nIHRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeSwgZXRjLgorCitUaGUgdmltaW5mbyBmaWxlIGl0c2VsZiBjYW4gYmUgZWRpdGVkIGJ5IGhhbmQgdG9vLCBhbHRob3VnaCB3ZSBzdWdnZXN0IHlvdQorc3RhcnQgd2l0aCBhbiBleGlzdGluZyBvbmUgdG8gZ2V0IHRoZSBmb3JtYXQgcmlnaHQuICBJdCBpcyByZWFzb25hYmx5CitzZWxmLWV4cGxhbmF0b3J5IG9uY2UgeW91J3JlIGluIHRoZXJlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGluIG9yZGVyIHRvCitjcmVhdGUgYSBzZWNvbmQgZmlsZSwgc2F5ICJ+Ly5teV92aW1pbmZvIiB3aGljaCBjb3VsZCBjb250YWluIGNlcnRhaW4KK3NldHRpbmdzIHRoYXQgeW91IGFsd2F5cyB3YW50IHdoZW4geW91IGZpcnN0IHN0YXJ0IFZpbS4gIEZvciBleGFtcGxlLCB5b3UKK2NhbiBwcmVsb2FkIHJlZ2lzdGVycyB3aXRoIHBhcnRpY3VsYXIgZGF0YSwgb3IgcHV0IGNlcnRhaW4gY29tbWFuZHMgaW4gdGhlCitjb21tYW5kIGxpbmUgaGlzdG9yeS4gIEEgbGluZSBpbiB5b3VyIC52aW1yYyBmaWxlIGxpa2UgPgorCTpydmltaW5mbyEgfi8ubXlfdmltaW5mbworY2FuIGJlIHVzZWQgdG8gbG9hZCB0aGlzIGluZm9ybWF0aW9uLiAgWW91IGNvdWxkIGV2ZW4gaGF2ZSBkaWZmZXJlbnQgdmltaW5mb3MKK2ZvciBkaWZmZXJlbnQgdHlwZXMgb2YgZmlsZXMgKGUuZy4sIEMgY29kZSkgYW5kIGxvYWQgdGhlbSBiYXNlZCBvbiB0aGUgZmlsZQorbmFtZSwgdXNpbmcgdGhlICI6YXV0b2NtZCIgY29tbWFuZCAoc2VlIHw6YXV0b2NtZHwpLgorCisJCQkJCQkJKnZpbWluZm8tZXJyb3JzKgorV2hlbiBWaW0gZGV0ZWN0cyBhbiBlcnJvciB3aGlsZSByZWFkaW5nIGEgdmltaW5mbyBmaWxlLCBpdCB3aWxsIG5vdCBvdmVyd3JpdGUKK3RoYXQgZmlsZS4gIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMTAgZXJyb3JzLCBWaW0gc3RvcHMgcmVhZGluZyB0aGUgdmltaW5mbworZmlsZS4gIFRoaXMgd2FzIGRvbmUgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IGRlc3Ryb3lpbmcgYSBmaWxlIHdoZW4gdGhlIGZpbGUKK25hbWUgb2YgdGhlIHZpbWluZm8gZmlsZSBpcyB3cm9uZy4gIFRoaXMgY291bGQgaGFwcGVuIHdoZW4gYWNjaWRlbnRhbGx5IHR5cGluZworInZpbSAtaSBmaWxlIiB3aGVuIHlvdSB3YW50ZWQgInZpbSAtUiBmaWxlIiAoeWVzLCBzb21lYm9keSBhY2NpZGVudGFsbHkgZGlkCit0aGF0ISkuICBJZiB5b3Ugd2FudCB0byBvdmVyd3JpdGUgYSB2aW1pbmZvIGZpbGUgd2l0aCBhbiBlcnJvciBpbiBpdCwgeW91IHdpbGwKK2VpdGhlciBoYXZlIHRvIGZpeCB0aGUgZXJyb3IsIG9yIGRlbGV0ZSB0aGUgZmlsZSAod2hpbGUgVmltIGlzIHJ1bm5pbmcsIHNvCittb3N0IG9mIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlc3RvcmVkKS4KKworCQkJCQkJICAgKjpydiogKjpydmltaW5mbyogKkUxOTUqCis6cnZbaW1pbmZvXVshXSBbZmlsZV0JUmVhZCBmcm9tIHZpbWluZm8gZmlsZSBbZmlsZV0gKGRlZmF1bHQ6IHNlZSBhYm92ZSkuCisJCQlJZiBbIV0gaXMgZ2l2ZW4sIHRoZW4gYW55IGluZm9ybWF0aW9uIHRoYXQgaXMKKwkJCWFscmVhZHkgc2V0IChyZWdpc3RlcnMsIG1hcmtzLCBldGMuKSB3aWxsIGJlCisJCQlvdmVyd3JpdHRlbi4gIHtub3QgaW4gVml9CisKKwkJCQkJKjp3diogKjp3dmltaW5mbyogKkUxMzcqICpFMTM4KiAqRTU3NCoKKzp3dltpbWluZm9dWyFdIFtmaWxlXQlXcml0ZSB0byB2aW1pbmZvIGZpbGUgW2ZpbGVdIChkZWZhdWx0OiBzZWUgYWJvdmUpLgorCQkJVGhlIGluZm9ybWF0aW9uIGluIHRoZSBmaWxlIGlzIGZpcnN0IHJlYWQgaW4gdG8gbWFrZQorCQkJYSBtZXJnZSBiZXR3ZWVuIG9sZCBhbmQgbmV3IGluZm8uICBXaGVuIFshXSBpcyB1c2VkLAorCQkJdGhlIG9sZCBpbmZvcm1hdGlvbiBpcyBub3QgcmVhZCBmaXJzdCwgb25seSB0aGUKKwkJCWludGVybmFsIGluZm8gaXMgd3JpdHRlbi4gIElmICd2aW1pbmZvJyBpcyBlbXB0eSwgbWFya3MKKwkJCWZvciB1cCB0byAxMDAgZmlsZXMgd2lsbCBiZSB3cml0dGVuLgorCQkJV2hlbiB5b3UgZ2V0IGVycm9yICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUiCisJCQljaGVjayB0aGF0IG5vIG9sZCB0ZW1wIGZpbGVzIHdlcmUgbGVmdCBiZWhpbmQgKGUuZy4KKwkJCX4vLnZpbWluZiopIGFuZCB0aGF0IHlvdSBjYW4gd3JpdGUgaW4gdGhlIGRpcmVjdG9yeSBvZgorCQkJdGhlIC52aW1pbmZvIGZpbGUuCisJCQl7bm90IGluIFZpfQorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvc3ludGF4LnR4dCBiL3J1bnRpbWUvZG9jL3N5bnRheC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzMjIzNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3N5bnRheC50eHQKQEAgLTAsMCArMSw0MTYxIEBACisqc3ludGF4LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA5CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKKworCitTeW50YXggaGlnaGxpZ2h0aW5nCQkqc3ludGF4KiAqc3ludGF4LWhpZ2hsaWdodGluZyogKmNvbG9yaW5nKgorCitTeW50YXggaGlnaGxpZ2h0aW5nIGVuYWJsZXMgVmltIHRvIHNob3cgcGFydHMgb2YgdGhlIHRleHQgaW4gYW5vdGhlciBmb250IG9yCitjb2xvci4JVGhvc2UgcGFydHMgY2FuIGJlIHNwZWNpZmljIGtleXdvcmRzIG9yIHRleHQgbWF0Y2hpbmcgYSBwYXR0ZXJuLiAgVmltCitkb2Vzbid0IHBhcnNlIHRoZSB3aG9sZSBmaWxlICh0byBrZWVwIGl0IGZhc3QpLCBzbyB0aGUgaGlnaGxpZ2h0aW5nIGhhcyBpdHMKK2xpbWl0YXRpb25zLiAgTGV4aWNhbCBoaWdobGlnaHRpbmcgbWlnaHQgYmUgYSBiZXR0ZXIgbmFtZSwgYnV0IHNpbmNlIGV2ZXJ5Ym9keQorY2FsbHMgaXQgc3ludGF4IGhpZ2hsaWdodGluZyB3ZSdsbCBzdGljayB3aXRoIHRoYXQuCisKK1ZpbSBzdXBwb3J0cyBzeW50YXggaGlnaGxpZ2h0aW5nIG9uIGFsbCB0ZXJtaW5hbHMuICBCdXQgc2luY2UgbW9zdCBvcmRpbmFyeQordGVybWluYWxzIGhhdmUgdmVyeSBsaW1pdGVkIGhpZ2hsaWdodGluZyBwb3NzaWJpbGl0aWVzLCBpdCB3b3JrcyBiZXN0IGluIHRoZQorR1VJIHZlcnNpb24sIGd2aW0uCisKK0luIHRoZSBVc2VyIE1hbnVhbDoKK3x1c3JfMDYudHh0fCBpbnRyb2R1Y2VzIHN5bnRheCBoaWdobGlnaHRpbmcuCit8dXNyXzQ0LnR4dHwgaW50cm9kdWNlcyB3cml0aW5nIGEgc3ludGF4IGZpbGUuCisKKzEuICBRdWljayBzdGFydAkJCXw6c3luLXFzdGFydHwKKzIuICBTeW50YXggZmlsZXMJCXw6c3luLWZpbGVzfAorMy4gIFN5bnRheCBsb2FkaW5nIHByb2NlZHVyZQl8c3ludGF4LWxvYWRpbmd8Cis0LiAgU3ludGF4IGZpbGUgcmVtYXJrcwkJfDpzeW4tZmlsZS1yZW1hcmtzfAorNS4gIERlZmluaW5nIGEgc3ludGF4CQl8OnN5bi1kZWZpbmV8Cis2LiAgOnN5bnRheCBhcmd1bWVudHMJCXw6c3luLWFyZ3VtZW50c3wKKzcuICBTeW50YXggcGF0dGVybnMJCXw6c3luLXBhdHRlcm58Cis4LiAgU3ludGF4IGNsdXN0ZXJzCQl8OnN5bi1jbHVzdGVyfAorOS4gIEluY2x1ZGluZyBzeW50YXggZmlsZXMJfDpzeW4taW5jbHVkZXwKKzEwLiBTeW5jaHJvbml6aW5nCQl8OnN5bi1zeW5jfAorMTEuIExpc3Rpbmcgc3ludGF4IGl0ZW1zCXw6c3ludGF4fAorMTIuIEhpZ2hsaWdodCBjb21tYW5kCQl8OmhpZ2hsaWdodHwKKzEzLiBMaW5raW5nIGdyb3VwcwkJfDpoaWdobGlnaHQtbGlua3wKKzE0LiBDbGVhbmluZyB1cAkJCXw6c3luLWNsZWFyfAorMTUuIEhpZ2hsaWdodGluZyB0YWdzCQl8dGFnLWhpZ2hsaWdodHwKKzE2LiBDb2xvciB4dGVybXMJCXx4dGVybS1jb2xvcnwKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCitTeW50YXggaGlnaGxpZ2h0aW5nIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB0aGUgfCtzeW50YXh8IGZlYXR1cmUgaGFzIGJlZW4KK2Rpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBRdWljayBzdGFydAkJCQkJCSo6c3luLXFzdGFydCoKKworCQkJCQkJKjpzeW4tZW5hYmxlKiAqOnN5bnRheC1lbmFibGUqCitUaGlzIGNvbW1hbmQgc3dpdGNoZXMgb24gc3ludGF4IGhpZ2hsaWdodGluZzogPgorCisJOnN5bnRheCBlbmFibGUKKworV2hhdCB0aGlzIGNvbW1hbmQgYWN0dWFsbHkgZG9lcyBpcyB0byBleGVjdXRlIHRoZSBjb21tYW5kID4KKwk6c291cmNlICRWSU1SVU5USU1FL3N5bnRheC9zeW50YXgudmltCisKK0lmIHRoZSBWSU0gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCwgVmltIHdpbGwgdHJ5IHRvIGZpbmQKK3RoZSBwYXRoIGluIGFub3RoZXIgd2F5IChzZWUgfCRWSU1SVU5USU1FfCkuICBVc3VhbGx5IHRoaXMgd29ya3MganVzdAorZmluZS4gIElmIGl0IGRvZXNuJ3QsIHRyeSBzZXR0aW5nIHRoZSBWSU0gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlCitkaXJlY3Rvcnkgd2hlcmUgdGhlIFZpbSBzdHVmZiBpcyBsb2NhdGVkLiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgc3ludGF4IGZpbGVzCithcmUgaW4gdGhlICIvdXNyL3ZpbS92aW01MC9zeW50YXgiIGRpcmVjdG9yeSwgc2V0ICRWSU1SVU5USU1FIHRvCisiL3Vzci92aW0vdmltNTAiLiAgWW91IG11c3QgZG8gdGhpcyBpbiB0aGUgc2hlbGwsIGJlZm9yZSBzdGFydGluZyBWaW0uCisKKwkJCQkJCQkqOnN5bi1vbiogKjpzeW50YXgtb24qCitUaGUgIjpzeW50YXggZW5hYmxlIiBjb21tYW5kIHdpbGwga2VlcCB5b3VyIGN1cnJlbnQgY29sb3Igc2V0dGluZ3MuICBUaGlzCithbGxvd3MgdXNpbmcgIjpoaWdobGlnaHQiIGNvbW1hbmRzIHRvIHNldCB5b3VyIHByZWZlcnJlZCBjb2xvcnMgYmVmb3JlIG9yCithZnRlciB1c2luZyB0aGlzIGNvbW1hbmQuICBJZiB5b3Ugd2FudCBWaW0gdG8gb3ZlcnJ1bGUgeW91ciBzZXR0aW5ncyB3aXRoIHRoZQorZGVmYXVsdHMsIHVzZTogPgorCTpzeW50YXggb24KKzwKKwkJCQkJKjpoaS1ub3JtYWwqICo6aGlnaGxpZ2h0LW5vcm1hbCoKK0lmIHlvdSBhcmUgcnVubmluZyBpbiB0aGUgR1VJLCB5b3UgY2FuIGdldCB3aGl0ZSB0ZXh0IG9uIGEgYmxhY2sgYmFja2dyb3VuZAord2l0aDogPgorCTpoaWdobGlnaHQgTm9ybWFsIGd1aWJnPUJsYWNrIGd1aWZnPVdoaXRlCitGb3IgYSBjb2xvciB0ZXJtaW5hbCBzZWUgfDpoaS1ub3JtYWwtY3Rlcm18LgorRm9yIHNldHRpbmcgdXAgeW91ciBvd24gY29sb3JzIHN5bnRheCBoaWdobGlnaHRpbmcgc2VlIHxzeW5jb2xvcnwuCisKK05PVEU6IFRoZSBzeW50YXggZmlsZXMgb24gTVMtRE9TIGFuZCBXaW5kb3dzIGhhdmUgbGluZXMgdGhhdCBlbmQgaW4gPENSPjxOTD4uCitUaGUgZmlsZXMgZm9yIFVuaXggZW5kIGluIDxOTD4uICBUaGlzIG1lYW5zIHlvdSBzaG91bGQgdXNlIHRoZSByaWdodCB0eXBlIG9mCitmaWxlIGZvciB5b3VyIHN5c3RlbS4gIEFsdGhvdWdoIG9uIE1TLURPUyBhbmQgV2luZG93cyB0aGUgcmlnaHQgZm9ybWF0IGlzCithdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGlmIHRoZSAnZmlsZWZvcm1hdHMnIG9wdGlvbiBpcyBub3QgZW1wdHkuCisKK05PVEU6IFdoZW4gdXNpbmcgcmV2ZXJzZSB2aWRlbyAoImd2aW0gLWZnIHdoaXRlIC1iZyBibGFjayIpLCB0aGUgZGVmYXVsdCB2YWx1ZQorb2YgJ2JhY2tncm91bmQnIHdpbGwgbm90IGJlIHNldCB1bnRpbCB0aGUgR1VJIHdpbmRvdyBpcyBvcGVuZWQsIHdoaWNoIGlzIGFmdGVyCityZWFkaW5nIHRoZSAuZ3ZpbXJjLiAgVGhpcyB3aWxsIGNhdXNlIHRoZSB3cm9uZyBkZWZhdWx0IGhpZ2hsaWdodGluZyB0byBiZQordXNlZC4gIFRvIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAnYmFja2dyb3VuZCcgYmVmb3JlIHN3aXRjaGluZyBvbgoraGlnaGxpZ2h0aW5nLCBpbmNsdWRlIHRoZSAiOmd1aSIgY29tbWFuZCBpbiB0aGUgLmd2aW1yYzogPgorCisgICA6Z3VpCQkiIG9wZW4gd2luZG93IGFuZCBzZXQgZGVmYXVsdCBmb3IgJ2JhY2tncm91bmQnCisgICA6c3ludGF4IG9uCSIgc3RhcnQgaGlnaGxpZ2h0aW5nLCB1c2UgJ2JhY2tncm91bmQnIHRvIHNldCBjb2xvcnMKKworTk9URTogVXNpbmcgIjpndWkiIGluIHRoZSAuZ3ZpbXJjIG1lYW5zIHRoYXQgImd2aW0gLWYiIHdvbid0IHN0YXJ0IGluIHRoZQorZm9yZWdyb3VuZCEgIFVzZSAiOmd1aSAtZiIgdGhlbi4KKworCitZb3UgY2FuIHRvZ2dsZSB0aGUgc3ludGF4IG9uL29mZiB3aXRoIHRoaXMgY29tbWFuZCA+CisgICA6aWYgZXhpc3RzKCJzeW50YXhfb24iKSB8IHN5bnRheCBvZmYgfCBlbHNlIHwgc3ludGF4IGVuYWJsZSB8IGVuZGlmCisKK1RvIHB1dCB0aGlzIGludG8gYSBtYXBwaW5nLCB5b3UgY2FuIHVzZTogPgorICAgOm1hcCA8Rjc+IDppZiBleGlzdHMoInN5bnRheF9vbiIpIDxCYXI+CisJXCAgIHN5bnRheCBvZmYgPEJhcj4KKwlcIGVsc2UgPEJhcj4KKwlcICAgc3ludGF4IGVuYWJsZSA8QmFyPgorCVwgZW5kaWYgPENSPgorW3VzaW5nIHRoZSB8PD58IG5vdGF0aW9uLCB0eXBlIHRoaXMgbGl0ZXJhbGx5XQorCitEZXRhaWxzCitUaGUgIjpzeW50YXgiIGNvbW1hbmRzIGFyZSBpbXBsZW1lbnRlZCBieSBzb3VyY2luZyBhIGZpbGUuICBUbyBzZWUgZXhhY3RseSBob3cKK3RoaXMgd29ya3MsIGxvb2sgaW4gdGhlIGZpbGU6CisgICAgY29tbWFuZAkJZmlsZSB+CisgICAgOnN5bnRheCBlbmFibGUJJFZJTVJVTlRJTUUvc3ludGF4L3N5bnRheC52aW0KKyAgICA6c3ludGF4IG9uCQkkVklNUlVOVElNRS9zeW50YXgvc3ludGF4LnZpbQorICAgIDpzeW50YXggbWFudWFsCSRWSU1SVU5USU1FL3N5bnRheC9tYW51YWwudmltCisgICAgOnN5bnRheCBvZmYJCSRWSU1SVU5USU1FL3N5bnRheC9ub3N5bnRheC52aW0KK0Fsc28gc2VlIHxzeW50YXgtbG9hZGluZ3wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gU3ludGF4IGZpbGVzCQkJCQkJKjpzeW4tZmlsZXMqCisKK1RoZSBzeW50YXggYW5kIGhpZ2hsaWdodGluZyBjb21tYW5kcyBmb3Igb25lIGxhbmd1YWdlIGFyZSBub3JtYWxseSBzdG9yZWQgaW4KK2Egc3ludGF4IGZpbGUuCVRoZSBuYW1lIGNvbnZlbnRpb24gaXM6ICJ7bmFtZX0udmltIi4gIFdoZXJlIHtuYW1lfSBpcyB0aGUKK25hbWUgb2YgdGhlIGxhbmd1YWdlLCBvciBhbiBhYmJyZXZpYXRpb24gKHRvIGZpdCB0aGUgbmFtZSBpbiA4LjMgY2hhcmFjdGVycywKK2EgcmVxdWlyZW1lbnQgaW4gY2FzZSB0aGUgZmlsZSBpcyB1c2VkIG9uIGEgRE9TIGZpbGVzeXN0ZW0pLgorRXhhbXBsZXM6CisJYy52aW0JCXBlcmwudmltCWphdmEudmltCWh0bWwudmltCisJY3BwLnZpbQkJc2gudmltCQljc2gudmltCisKK1RoZSBzeW50YXggZmlsZSBjYW4gY29udGFpbiBhbnkgRXggY29tbWFuZHMsIGp1c3QgbGlrZSBhIHZpbXJjIGZpbGUuICBCdXQKK3RoZSBpZGVhIGlzIHRoYXQgb25seSBjb21tYW5kcyBmb3IgYSBzcGVjaWZpYyBsYW5ndWFnZSBhcmUgaW5jbHVkZWQuICBXaGVuIGEKK2xhbmd1YWdlIGlzIGEgc3VwZXJzZXQgb2YgYW5vdGhlciBsYW5ndWFnZSwgaXQgbWF5IGluY2x1ZGUgdGhlIG90aGVyIG9uZSwKK2ZvciBleGFtcGxlLCB0aGUgY3BwLnZpbSBmaWxlIGNvdWxkIGluY2x1ZGUgdGhlIGMudmltIGZpbGU6ID4KKyAgIDpzbyAkVklNUlVOVElNRS9zeW50YXgvYy52aW0KKworVGhlIC52aW0gZmlsZXMgYXJlIG5vcm1hbGx5IGxvYWRlZCB3aXRoIGFuIGF1dG9jb21tYW5kLiAgRm9yIGV4YW1wbGU6ID4KKyAgIDphdSBTeW50YXggYwkgICAgcnVudGltZSEgc3ludGF4L2MudmltCisgICA6YXUgU3ludGF4IGNwcCAgIHJ1bnRpbWUhIHN5bnRheC9jcHAudmltCitUaGVzZSBjb21tYW5kcyBhcmUgbm9ybWFsbHkgaW4gdGhlIGZpbGUgJFZJTVJVTlRJTUUvc3ludGF4L3N5bmxvYWQudmltLgorCisKK01BS0lORyBZT1VSIE9XTiBTWU5UQVggRklMRVMJCQkJKm15c3ludGF4ZmlsZSoKKworV2hlbiB5b3UgY3JlYXRlIHlvdXIgb3duIHN5bnRheCBmaWxlcywgYW5kIHlvdSB3YW50IHRvIGhhdmUgVmltIHVzZSB0aGVzZQorYXV0b21hdGljYWxseSB3aXRoICI6c3ludGF4IGVuYWJsZSIsIGRvIHRoaXM6CisKKzEuIENyZWF0ZSB5b3VyIHVzZXIgcnVudGltZSBkaXJlY3RvcnkuCVlvdSB3b3VsZCBub3JtYWxseSB1c2UgdGhlIGZpcnN0IGl0ZW0KKyAgIG9mIHRoZSAncnVudGltZXBhdGgnIG9wdGlvbi4gIEV4YW1wbGUgZm9yIFVuaXg6ID4KKwlta2RpciB+Ly52aW0KKworMi4gQ3JlYXRlIGEgZGlyZWN0b3J5IGluIHRoZXJlIGNhbGxlZCAic3ludGF4Ii4gIEZvciBVbml4OiA+CisJbWtkaXIgfi8udmltL3N5bnRheAorCiszLiBXcml0ZSB0aGUgVmltIHN5bnRheCBmaWxlLiAgT3IgZG93bmxvYWQgb25lIGZyb20gdGhlIGludGVybmV0LiAgVGhlbiB3cml0ZQorICAgaXQgaW4geW91ciBzeW50YXggZGlyZWN0b3J5LiAgRm9yIGV4YW1wbGUsIGZvciB0aGUgIm1pbmUiIHN5bnRheDogPgorCTp3IH4vLnZpbS9zeW50YXgvbWluZS52aW0KKworTm93IHlvdSBjYW4gc3RhcnQgdXNpbmcgeW91ciBzeW50YXggZmlsZSBtYW51YWxseTogPgorCTpzZXQgc3ludGF4PW1pbmUKK1lvdSBkb24ndCBoYXZlIHRvIGV4aXQgVmltIHRvIHVzZSB0aGlzLgorCitJZiB5b3UgYWxzbyB3YW50IFZpbSB0byBkZXRlY3QgdGhlIHR5cGUgb2YgZmlsZSwgc2VlIHxuZXctZmlsZXR5cGV8LgorCitJZiB5b3UgYXJlIHNldHRpbmcgdXAgYSBzeXN0ZW0gd2l0aCBtYW55IHVzZXJzIGFuZCB5b3UgZG9uJ3Qgd2FudCBlYWNoIHVzZXIKK3RvIGFkZCB0aGUgc2FtZSBzeW50YXggZmlsZSwgeW91IGNhbiB1c2UgYW5vdGhlciBkaXJlY3RvcnkgZnJvbSAncnVudGltZXBhdGgnLgorCisKK0FERElORyBUTyBBTiBFWElTVElORyBTWU5UQVggRklMRQkJKm15c3ludGF4ZmlsZS1hZGQqCisKK0lmIHlvdSBhcmUgbW9zdGx5IHNhdGlzZmllZCB3aXRoIGFuIGV4aXN0aW5nIHN5bnRheCBmaWxlLCBidXQgd291bGQgbGlrZSB0bworYWRkIGEgZmV3IGl0ZW1zIG9yIGNoYW5nZSB0aGUgaGlnaGxpZ2h0aW5nLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisKKzEuIENyZWF0ZSB5b3VyIHVzZXIgZGlyZWN0b3J5IGZyb20gJ3J1bnRpbWVwYXRoJywgc2VlIGFib3ZlLgorCisyLiBDcmVhdGUgYSBkaXJlY3RvcnkgaW4gdGhlcmUgY2FsbGVkICJhZnRlci9zeW50YXgiLiAgRm9yIFVuaXg6ID4KKwlta2RpciB+Ly52aW0vYWZ0ZXIKKwlta2RpciB+Ly52aW0vYWZ0ZXIvc3ludGF4CisKKzMuIFdyaXRlIGEgVmltIHNjcmlwdCB0aGF0IGNvbnRhaW5zIHRoZSBjb21tYW5kcyB5b3Ugd2FudCB0byB1c2UuICBGb3IKKyAgIGV4YW1wbGUsIHRvIGNoYW5nZSB0aGUgY29sb3JzIGZvciB0aGUgQyBzeW50YXg6ID4KKwloaWdobGlnaHQgY0NvbW1lbnQgY3Rlcm1mZz1HcmVlbiBndWlmZz1HcmVlbgorCis0LiBXcml0ZSB0aGF0IGZpbGUgaW4gdGhlICJhZnRlci9zeW50YXgiIGRpcmVjdG9yeS4gIFVzZSB0aGUgbmFtZSBvZiB0aGUKKyAgIHN5bnRheCwgd2l0aCAiLnZpbSIgYWRkZWQuICBGb3Igb3VyIEMgc3ludGF4OiA+CisJOncgfi8udmltL2FmdGVyL3N5bnRheC9jLnZpbQorCitUaGF0J3MgaXQuICBUaGUgbmV4dCB0aW1lIHlvdSBlZGl0IGEgQyBmaWxlIHRoZSBDb21tZW50IGNvbG9yIHdpbGwgYmUKK2RpZmZlcmVudC4gIFlvdSBkb24ndCBldmVuIGhhdmUgdG8gcmVzdGFydCBWaW0uCisKKworUkVQTEFDSU5HIEFOIEVYSVNUSU5HIFNZTlRBWCBGSUxFCQkJKm15c3ludGF4ZmlsZS1yZXBsYWNlKgorCitJZiB5b3UgZG9uJ3QgbGlrZSBhIGRpc3RyaWJ1dGVkIHN5bnRheCBmaWxlLCBvciB5b3UgaGF2ZSBkb3dubG9hZGVkIGEgbmV3Cit2ZXJzaW9uLCBmb2xsb3cgdGhlIHNhbWUgc3RlcHMgYXMgZm9yIHxteXN5bnRheGZpbGV8IGFib3ZlLiAgSnVzdCBtYWtlIHN1cmUKK3RoYXQgeW91IHdyaXRlIHRoZSBzeW50YXggZmlsZSBpbiBhIGRpcmVjdG9yeSB0aGF0IGlzIGVhcmx5IGluICdydW50aW1lcGF0aCcuCitWaW0gd2lsbCBvbmx5IGxvYWQgdGhlIGZpcnN0IHN5bnRheCBmaWxlIGZvdW5kLgorCisKK05BTUlORyBDT05WRU5USU9OUworCQkJCSAgICAqZ3JvdXAtbmFtZSogKntncm91cC1uYW1lfSogKkU2NjkqICpXMTgqCitUaGUgbmFtZSBmb3IgYSBoaWdobGlnaHQgb3Igc3ludGF4IGdyb3VwIG11c3QgY29uc2lzdCBvZiBBU0NJSSBsZXR0ZXJzLCBkaWdpdHMKK2FuZCB0aGUgdW5kZXJzY29yZS4gIEFzIGEgcmVnZXhwOiAiW2EtekEtWjAtOV9dKiIKKworVG8gYmUgYWJsZSB0byBhbGxvdyBlYWNoIHVzZXIgdG8gcGljayBoaXMgZmF2b3JpdGUgc2V0IG9mIGNvbG9ycywgdGhlcmUgbXVzdAorYmUgcHJlZmVycmVkIG5hbWVzIGZvciBoaWdobGlnaHQgZ3JvdXBzIHRoYXQgYXJlIGNvbW1vbiBmb3IgbWFueSBsYW5ndWFnZXMuCitUaGVzZSBhcmUgdGhlIHN1Z2dlc3RlZCBncm91cCBuYW1lcyAoaWYgc3ludGF4IGhpZ2hsaWdodGluZyB3b3JrcyBwcm9wZXJseQoreW91IGNhbiBzZWUgdGhlIGFjdHVhbCBjb2xvciwgZXhjZXB0IGZvciAiSWdub3JlIik6CisKKwkqQ29tbWVudAlhbnkgY29tbWVudAorCisJKkNvbnN0YW50CWFueSBjb25zdGFudAorCSBTdHJpbmcJCWEgc3RyaW5nIGNvbnN0YW50OiAidGhpcyBpcyBhIHN0cmluZyIKKwkgQ2hhcmFjdGVyCWEgY2hhcmFjdGVyIGNvbnN0YW50OiAnYycsICdcbicKKwkgTnVtYmVyCQlhIG51bWJlciBjb25zdGFudDogMjM0LCAweGZmCisJIEJvb2xlYW4JYSBib29sZWFuIGNvbnN0YW50OiBUUlVFLCBmYWxzZQorCSBGbG9hdAkJYSBmbG9hdGluZyBwb2ludCBjb25zdGFudDogMi4zZTEwCisKKwkqSWRlbnRpZmllcglhbnkgdmFyaWFibGUgbmFtZQorCSBGdW5jdGlvbglmdW5jdGlvbiBuYW1lIChhbHNvOiBtZXRob2RzIGZvciBjbGFzc2VzKQorCisJKlN0YXRlbWVudAlhbnkgc3RhdGVtZW50CisJIENvbmRpdGlvbmFsCWlmLCB0aGVuLCBlbHNlLCBlbmRpZiwgc3dpdGNoLCBldGMuCisJIFJlcGVhdAkJZm9yLCBkbywgd2hpbGUsIGV0Yy4KKwkgTGFiZWwJCWNhc2UsIGRlZmF1bHQsIGV0Yy4KKwkgT3BlcmF0b3IJInNpemVvZiIsICIrIiwgIioiLCBldGMuCisJIEtleXdvcmQJYW55IG90aGVyIGtleXdvcmQKKwkgRXhjZXB0aW9uCXRyeSwgY2F0Y2gsIHRocm93CisKKwkqUHJlUHJvYwlnZW5lcmljIFByZXByb2Nlc3NvcgorCSBJbmNsdWRlCXByZXByb2Nlc3NvciAjaW5jbHVkZQorCSBEZWZpbmUJCXByZXByb2Nlc3NvciAjZGVmaW5lCisJIE1hY3JvCQlzYW1lIGFzIERlZmluZQorCSBQcmVDb25kaXQJcHJlcHJvY2Vzc29yICNpZiwgI2Vsc2UsICNlbmRpZiwgZXRjLgorCisJKlR5cGUJCWludCwgbG9uZywgY2hhciwgZXRjLgorCSBTdG9yYWdlQ2xhc3MJc3RhdGljLCByZWdpc3Rlciwgdm9sYXRpbGUsIGV0Yy4KKwkgU3RydWN0dXJlCXN0cnVjdCwgdW5pb24sIGVudW0sIGV0Yy4KKwkgVHlwZWRlZglBIHR5cGVkZWYKKworCSpTcGVjaWFsCWFueSBzcGVjaWFsIHN5bWJvbAorCSBTcGVjaWFsQ2hhcglzcGVjaWFsIGNoYXJhY3RlciBpbiBhIGNvbnN0YW50CisJIFRhZwkJeW91IGNhbiB1c2UgQ1RSTC1dIG9uIHRoaXMKKwkgRGVsaW1pdGVyCWNoYXJhY3RlciB0aGF0IG5lZWRzIGF0dGVudGlvbgorCSBTcGVjaWFsQ29tbWVudAlzcGVjaWFsIHRoaW5ncyBpbnNpZGUgYSBjb21tZW50CisJIERlYnVnCQlkZWJ1Z2dpbmcgc3RhdGVtZW50cworCisJKlVuZGVybGluZWQJdGV4dCB0aGF0IHN0YW5kcyBvdXQsIEhUTUwgbGlua3MKKworCSpJZ25vcmUJCWxlZnQgYmxhbmssIGhpZGRlbgorCisJKkVycm9yCQlhbnkgZXJyb25lb3VzIGNvbnN0cnVjdAorCisJKlRvZG8JCWFueXRoaW5nIHRoYXQgbmVlZHMgZXh0cmEgYXR0ZW50aW9uOyBtb3N0bHkgdGhlCisJCQlrZXl3b3JkcyBUT0RPIEZJWE1FIGFuZCBYWFgKKworVGhlIG5hbWVzIG1hcmtlZCB3aXRoICogYXJlIHRoZSBwcmVmZXJyZWQgZ3JvdXBzOyB0aGUgb3RoZXJzIGFyZSBtaW5vciBncm91cHMuCitGb3IgdGhlIHByZWZlcnJlZCBncm91cHMsIHRoZSAic3ludGF4LnZpbSIgZmlsZSBjb250YWlucyBkZWZhdWx0IGhpZ2hsaWdodGluZy4KK1RoZSBtaW5vciBncm91cHMgYXJlIGxpbmtlZCB0byB0aGUgcHJlZmVycmVkIGdyb3Vwcywgc28gdGhleSBnZXQgdGhlIHNhbWUKK2hpZ2hsaWdodGluZy4gIFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdHMgYnkgdXNpbmcgIjpoaWdobGlnaHQiIGNvbW1hbmRzCithZnRlciBzb3VyY2luZyB0aGUgInN5bnRheC52aW0iIGZpbGUuCisKK05vdGUgdGhhdCBoaWdobGlnaHQgZ3JvdXAgbmFtZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4gICJTdHJpbmciIGFuZCAic3RyaW5nIgorY2FuIGJlIHVzZWQgZm9yIHRoZSBzYW1lIGdyb3VwLgorCitUaGUgZm9sbG93aW5nIG5hbWVzIGFyZSByZXNlcnZlZCBhbmQgY2Fubm90IGJlIHVzZWQgYXMgYSBncm91cCBuYW1lOgorCU5PTkUgICBBTEwgICBBTExCVVQgICBjb250YWlucwkgY29udGFpbmVkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gU3ludGF4IGxvYWRpbmcgcHJvY2VkdXJlCQkJCSpzeW50YXgtbG9hZGluZyoKKworVGhpcyBleHBsYWlucyB0aGUgZGV0YWlscyB0aGF0IGhhcHBlbiB3aGVuIHRoZSBjb21tYW5kICI6c3ludGF4IGVuYWJsZSIgaXMKK2lzc3VlZC4gIFdoZW4gVmltIGluaXRpYWxpemVzIGl0c2VsZiwgaXQgZmluZHMgb3V0IHdoZXJlIHRoZSBydW50aW1lIGZpbGVzIGFyZQorbG9jYXRlZC4gIFRoaXMgaXMgdXNlZCBoZXJlIGFzIHRoZSB2YXJpYWJsZSB8JFZJTVJVTlRJTUV8LgorCisiOnN5bnRheCBlbmFibGUiIGFuZCAiOnN5bnRheCBvbiIgZG8gdGhlIGZvbGxvd2luZzoKKworICAgIFNvdXJjZSAkVklNUlVOVElNRS9zeW50YXgvc3ludGF4LnZpbQorICAgIHwKKyAgICArLQlDbGVhciBvdXQgYW55IG9sZCBzeW50YXggYnkgc291cmNpbmcgJFZJTVJVTlRJTUUvc3ludGF4L25vc3ludGF4LnZpbQorICAgIHwKKyAgICArLQlTb3VyY2UgZmlyc3Qgc3ludGF4L3N5bmxvYWQudmltIGluICdydW50aW1lcGF0aCcKKyAgICB8CXwKKyAgICB8CSstICBTZXR1cCB0aGUgY29sb3JzIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nLiAgSWYgYSBjb2xvciBzY2hlbWUgaXMKKyAgICB8CXwgICBkZWZpbmVkIGl0IGlzIGxvYWRlZCBhZ2FpbiB3aXRoICI6Y29sb3JzIHtuYW1lfSIuICBPdGhlcndpc2UKKyAgICB8CXwgICAiOnJ1bnRpbWUhIHN5bnRheC9zeW5jb2xvci52aW0iIGlzIHVzZWQuICAiOnN5bnRheCBvbiIgb3ZlcnJ1bGVzCisgICAgfAl8ICAgZXhpc3RpbmcgY29sb3JzLCAiOnN5bnRheCBlbmFibGUiIG9ubHkgc2V0cyBncm91cHMgdGhhdCB3ZXJlbid0CisgICAgfAl8ICAgc2V0IHlldC4KKyAgICB8CXwKKyAgICB8CSstICBTZXQgdXAgc3ludGF4IGF1dG9jbWRzIHRvIGxvYWQgdGhlIGFwcHJvcHJpYXRlIHN5bnRheCBmaWxlIHdoZW4KKyAgICB8CXwgICB0aGUgJ3N5bnRheCcgb3B0aW9uIGlzIHNldC4gKnN5bmxvYWQtMSoKKyAgICB8CXwKKyAgICB8CSstICBTb3VyY2UgdGhlIHVzZXIncyBvcHRpb25hbCBmaWxlLCBmcm9tIHRoZSB8bXlzeW50YXhmaWxlfCB2YXJpYWJsZS4KKyAgICB8CSAgICBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFZpbSA1Lnggb25seS4gKnN5bmxvYWQtMioKKyAgICB8CisgICAgKy0JRG8gIjpmaWxldHlwZSBvbiIsIHdoaWNoIGRvZXMgIjpydW50aW1lISBmaWxldHlwZS52aW0iLiAgSXQgbG9hZHMgYW55CisgICAgfAlmaWxldHlwZS52aW0gZmlsZXMgZm91bmQuICBJdCBzaG91bGQgYWx3YXlzIFNvdXJjZQorICAgIHwJJFZJTVJVTlRJTUUvZmlsZXR5cGUudmltLCB3aGljaCBkb2VzIHRoZSBmb2xsb3dpbmcuCisgICAgfAl8CisgICAgfAkrLSAgSW5zdGFsbCBhdXRvY21kcyBiYXNlZCBvbiBzdWZmaXggdG8gc2V0IHRoZSAnZmlsZXR5cGUnIG9wdGlvbgorICAgIHwJfCAgIFRoaXMgaXMgd2hlcmUgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBmaWxlIG5hbWUgYW5kIGZpbGUgdHlwZSBpcworICAgIHwJfCAgIG1hZGUgZm9yIGtub3duIGZpbGUgdHlwZXMuICpzeW5sb2FkLTMqCisgICAgfAl8CisgICAgfAkrLSAgU291cmNlIHRoZSB1c2VyJ3Mgb3B0aW9uYWwgZmlsZSwgZnJvbSB0aGUgKm15ZmlsZXR5cGVmaWxlKgorICAgIHwJfCAgIHZhcmlhYmxlLiAgVGhpcyBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBWaW0gNS54IG9ubHkuCisgICAgfAl8ICAgKnN5bmxvYWQtNCoKKyAgICB8CXwKKyAgICB8CSstICBJbnN0YWxsIG9uZSBhdXRvY29tbWFuZCB3aGljaCBzb3VyY2VzIHNjcmlwdHMudmltIHdoZW4gbm8gZmlsZQorICAgIHwJfCAgIHR5cGUgd2FzIGRldGVjdGVkIHlldC4gKnN5bmxvYWQtNSoKKyAgICB8CXwKKyAgICB8CSstICBTb3VyY2UgJFZJTVJVTlRJTUUvbWVudS52aW0sIHRvIHNldHVwIHRoZSBTeW50YXggbWVudS4gfG1lbnUudmltfAorICAgIHwKKyAgICArLQlJbnN0YWxsIGEgRmlsZVR5cGUgYXV0b2NvbW1hbmQgdG8gc2V0IHRoZSAnc3ludGF4JyBvcHRpb24gd2hlbiBhIGZpbGUKKyAgICB8CXR5cGUgaGFzIGJlZW4gZGV0ZWN0ZWQuICpzeW5sb2FkLTYqCisgICAgfAorICAgICstCUV4ZWN1dGUgc3ludGF4IGF1dG9jb21tYW5kcyB0byBzdGFydCBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciBlYWNoCisJYWxyZWFkeSBsb2FkZWQgYnVmZmVyLgorCisKK1Vwb24gbG9hZGluZyBhIGZpbGUsIFZpbSBmaW5kcyB0aGUgcmVsZXZhbnQgc3ludGF4IGZpbGUgYXMgZm9sbG93czoKKworICAgIExvYWRpbmcgdGhlIGZpbGUgdHJpZ2dlcnMgdGhlIEJ1ZlJlYWRQb3N0IGF1dG9jb21tYW5kcy4KKyAgICB8CisgICAgKy0JSWYgdGhlcmUgaXMgYSBtYXRjaCB3aXRoIG9uZSBvZiB0aGUgYXV0b2NvbW1hbmRzIGZyb20gfHN5bmxvYWQtM3wKKyAgICB8CShrbm93biBmaWxlIHR5cGVzKSBvciB8c3lubG9hZC00fCAodXNlcidzIGZpbGUgdHlwZXMpLCB0aGUgJ2ZpbGV0eXBlJworICAgIHwJb3B0aW9uIGlzIHNldCB0byB0aGUgZmlsZSB0eXBlLgorICAgIHwKKyAgICArLQlUaGUgYXV0b2NvbW1hbmQgYXQgfHN5bmxvYWQtNXwgaXMgdHJpZ2dlcmVkLiAgSWYgdGhlIGZpbGUgdHlwZSB3YXMgbm90CisgICAgfAlmb3VuZCB5ZXQsIHRoZW4gc2NyaXB0cy52aW0gaXMgc2VhcmNoZWQgZm9yIGluICdydW50aW1lcGF0aCcuICBUaGlzCisgICAgfAlzaG91bGQgYWx3YXlzIGxvYWQgJFZJTVJVTlRJTUUvc2NyaXB0cy52aW0sIHdoaWNoIGRvZXMgdGhlIGZvbGxvd2luZy4KKyAgICB8CXwKKyAgICB8CSstICBTb3VyY2UgdGhlIHVzZXIncyBvcHRpb25hbCBmaWxlLCBmcm9tIHRoZSAqbXlzY3JpcHRzZmlsZSoKKyAgICB8CXwgICB2YXJpYWJsZS4gIFRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggVmltIDUueCBvbmx5LgorICAgIHwJfAorICAgIHwJKy0gIElmIHRoZSBmaWxlIHR5cGUgaXMgc3RpbGwgdW5rbm93biwgY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLAorICAgIHwJICAgIGFnYWluIHdpdGggY2hlY2tzIGxpa2UgImdldGxpbmUoMSkgPX4gcGF0dGVybiIgYXMgdG8gd2hldGhlciB0aGUKKyAgICB8CSAgICBmaWxlIHR5cGUgY2FuIGJlIHJlY29nbml6ZWQsIGFuZCBzZXQgJ2ZpbGV0eXBlJy4KKyAgICB8CisgICAgKy0JV2hlbiB0aGUgZmlsZSB0eXBlIHdhcyBkZXRlcm1pbmVkIGFuZCAnZmlsZXR5cGUnIHdhcyBzZXQsIHRoaXMKKyAgICB8CXRyaWdnZXJzIHRoZSBGaWxlVHlwZSBhdXRvY29tbWFuZCB8c3lubG9hZC02fCBhYm92ZS4gIEl0IHNldHMKKyAgICB8CSdzeW50YXgnIHRvIHRoZSBkZXRlcm1pbmVkIGZpbGUgdHlwZS4KKyAgICB8CisgICAgKy0JV2hlbiB0aGUgJ3N5bnRheCcgb3B0aW9uIHdhcyBzZXQgYWJvdmUsIHRoaXMgdHJpZ2dlcnMgYW4gYXV0b2NvbW1hbmQKKyAgICB8CWZyb20gfHN5bmxvYWQtMXwgKGFuZCB8c3lubG9hZC0yfCkuICBUaGlzIGZpbmQgdGhlIG1haW4gc3ludGF4IGZpbGUgaW4KKyAgICB8CSdydW50aW1lcGF0aCcsIHdpdGggdGhpcyBjb21tYW5kOgorICAgIHwJCXJ1bnRpbWUhIHN5bnRheC88bmFtZT4udmltCisgICAgfAorICAgICstCUFueSBvdGhlciB1c2VyIGluc3RhbGxlZCBGaWxlVHlwZSBvciBTeW50YXggYXV0b2NvbW1hbmRzIGFyZQorCXRyaWdnZXJlZC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBoaWdobGlnaHRpbmcgZm9yIGEgc3BlY2lmaWMKKwlzeW50YXguCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gU3ludGF4IGZpbGUgcmVtYXJrcwkJCQkJKjpzeW4tZmlsZS1yZW1hcmtzKgorCisJCQkJCQkqYjpjdXJyZW50X3N5bnRheC12YXJpYWJsZSoKK1ZpbSBzdG9yZXMgdGhlIG5hbWUgb2YgdGhlIHN5bnRheCB0aGF0IGhhcyBiZWVuIGxvYWRlZCBpbiB0aGUKKyJiOmN1cnJlbnRfc3ludGF4IiB2YXJpYWJsZS4gIFlvdSBjYW4gdXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gbG9hZCBvdGhlcgorc2V0dGluZ3MsIGRlcGVuZGluZyBvbiB3aGljaCBzeW50YXggaXMgYWN0aXZlLglFeGFtcGxlOiA+CisgICA6YXUgQnVmUmVhZFBvc3QgKiBpZiBiOmN1cnJlbnRfc3ludGF4ID09ICJjc2giCisgICA6YXUgQnVmUmVhZFBvc3QgKiAgIGRvLXNvbWUtdGhpbmdzCisgICA6YXUgQnVmUmVhZFBvc3QgKiBlbmRpZgorCisKKzJIVE1MCQkJCQkJKjJodG1sLnZpbSogKmNvbnZlcnQtdG8tSFRNTCoKKworVGhpcyBpcyBub3QgYSBzeW50YXggZmlsZSBpdHNlbGYsIGJ1dCBhIHNjcmlwdCB0aGF0IGNvbnZlcnRzIHRoZSBjdXJyZW50Cit3aW5kb3cgaW50byBIVE1MLiAgVmltIG9wZW5zIGEgbmV3IHdpbmRvdyBpbiB3aGljaCBpdCBidWlsZHMgdGhlIEhUTUwgZmlsZS4KKworWW91IGFyZSBub3Qgc3VwcG9zZWQgdG8gc2V0IHRoZSAnZmlsZXR5cGUnIG9yICdzeW50YXgnIG9wdGlvbiB0byAiMmh0bWwiIQorU291cmNlIHRoZSBzY3JpcHQgdG8gY29udmVydCB0aGUgY3VycmVudCBmaWxlOiA+CisKKwk6cnVudGltZSEgc3ludGF4LzJodG1sLnZpbQorPAorV2FybmluZzogVGhpcyBpcyBzbG93IQorCQkJCQkJCSo6VE9odG1sKgorT3IgdXNlIHRoZSAiOlRPaHRtbCIgdXNlciBjb21tYW5kLiAgSXQgaXMgZGVmaW5lZCBpbiBhIHN0YW5kYXJkIHBsdWdpbi4KKyI6VE9odG1sIiBhbHNvIHdvcmtzIHdpdGggYSByYW5nZSBhbmQgaW4gYSBWaXN1YWwgYXJlYTogPgorCisJOjEwLDQwVE9odG1sCisKK0FmdGVyIHlvdSBzYXZlIHRoZSByZXN1bHRpbmcgZmlsZSwgeW91IGNhbiB2aWV3IGl0IHdpdGggYW55IEhUTUwgdmlld2VyLCBzdWNoCithcyBOZXRzY2FwZS4gIFRoZSBjb2xvcnMgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgeW91IHNlZSB0aGVtIGluIFZpbS4KKworVG8gcmVzdHJpY3QgdGhlIGNvbnZlcnNpb24gdG8gYSByYW5nZSBvZiBsaW5lcyBzZXQgImh0bWxfc3RhcnRfbGluZSIgYW5kCisiaHRtbF9lbmRfbGluZSIgdG8gdGhlIGZpcnN0IGFuZCBsYXN0IGxpbmUgdG8gYmUgY29udmVydGVkLiAgRXhhbXBsZSwgdXNpbmcKK3RoZSBsYXN0IHNldCBWaXN1YWwgYXJlYTogPgorCisJOmxldCBodG1sX3N0YXJ0X2xpbmUgPSBsaW5lKCInPCIpCisJOmxldCBodG1sX2VuZF9saW5lID0gbGluZSgiJz4iKQorCitUaGUgbGluZXMgYXJlIG51bWJlcmVkIGFjY29yZGluZyB0byAnbnVtYmVyJyBvcHRpb24gYW5kIHRoZSBOdW1iZXIKK2hpZ2hsaWdodGluZy4gIFlvdSBjYW4gZm9yY2UgbGluZXMgdG8gYmUgbnVtYmVyZWQgaW4gdGhlIEhUTUwgb3V0cHV0IGJ5CitzZXR0aW5nICJodG1sX251bWJlcl9saW5lcyIgdG8gbm9uLXplcm8gdmFsdWU6ID4KKyAgIDpsZXQgaHRtbF9udW1iZXJfbGluZXMgPSAxCitGb3JjZSB0byBvbWl0IHRoZSBsaW5lIG51bWJlcnMgYnkgdXNpbmcgYSB6ZXJvIHZhbHVlOiA+CisgICA6bGV0IGh0bWxfbnVtYmVyX2xpbmVzID0gMAorR28gYmFjayB0byB0aGUgZGVmYXVsdCB0byB1c2UgJ251bWJlcicgYnkgZGVsZXRpbmcgdGhlIHZhcmlhYmxlOiA+CisgICA6dW5sZXQgaHRtbF9udW1iZXJfbGluZXMKKworQnkgZGVmYXVsdCwgSFRNTCBvcHRpbWl6ZWQgZm9yIG9sZCBicm93c2VycyBpcyBnZW5lcmF0ZWQuICBJZiB5b3UgcHJlZmVyIHVzaW5nCitjYXNjYWRpbmcgc3R5bGUgc2hlZXRzIChDU1MxKSBmb3IgdGhlIGF0dHJpYnV0ZXMgKHJlc3VsdGluZyBpbiBjb25zaWRlcmFibHkKK3Nob3J0ZXIgYW5kIHZhbGlkIEhUTUwgNCBmaWxlKSwgdXNlOiA+CisgICA6bGV0IGh0bWxfdXNlX2NzcyA9IDEKKworQnkgZGVmYXVsdCAiPHByZT4iIGFuZCAiPC9wcmU+IiBpcyB1c2VkIGFyb3VuZCB0aGUgdGV4dC4gIFRoaXMgbWFrZXMgaXQgc2hvdwordXAgYXMgeW91IHNlZSBpdCBpbiBWaW0sIGJ1dCB3aXRob3V0IHdyYXBwaW5nLglJZiB5b3UgcHJlZmVyIHdyYXBwaW5nLCBhdCB0aGUKK3Jpc2sgb2YgbWFraW5nIHNvbWUgdGhpbmdzIGxvb2sgYSBiaXQgZGlmZmVyZW50LCB1c2U6ID4KKyAgIDpsZXQgaHRtbF9ub19wcmUgPSAxCitUaGlzIHdpbGwgdXNlIDxicj4gYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUgYW5kIHVzZSAiJm5ic3A7IiBmb3IgcmVwZWF0ZWQKK3NwYWNlcy4KKworVGhlIGN1cnJlbnQgdmFsdWUgb2YgJ2VuY29kaW5nJyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGNoYXJzZXQgb2YgdGhlIEhUTUwKK2ZpbGUuICBUaGlzIG9ubHkgd29ya3MgZm9yIHRob3NlIHZhbHVlcyBvZiAnZW5jb2RpbmcnIHRoYXQgaGF2ZSBhbiBlcXVpdmFsZW50CitIVE1MIGNoYXJzZXQgbmFtZS4gIFRvIG92ZXJydWxlIHRoaXMgc2V0IGc6aHRtbF91c2VfZW5jb2RpbmcgdG8gdGhlIG5hbWUgb2YKK3RoZSBjaGFyc2V0IHRvIGJlIHVzZWQ6ID4KKyAgIDpsZXQgaHRtbF91c2VfZW5jb2RpbmcgPSAiZm9vYmFyIgorVG8gb21pdCB0aGUgbGluZSB0aGF0IHNwZWNpZmllcyB0aGUgY2hhcnNldCwgc2V0IGc6aHRtbF91c2VfZW5jb2RpbmcgdG8gYW4KK2VtcHR5IHN0cmluZzogPgorICAgOmxldCBodG1sX3VzZV9lbmNvZGluZyA9ICIiCitUbyBnbyBiYWNrIHRvIHRoZSBhdXRvbWF0aWMgbWVjaGFuaXNtLCBkZWxldGUgdGhlIGc6aHRtbF91c2VfZW5jb2RpbmcKK3ZhcmlhYmxlOiA+CisgICA6dW5sZXQgaHRtbF91c2VfZW5jb2RpbmcKKzwKKwkJCQkJICAgICpjb252ZXJ0LXRvLVhNTCogKmNvbnZlcnQtdG8tWEhUTUwqCitBbiBhbHRlcm5hdGl2ZSBpcyB0byBoYXZlIHRoZSBzY3JpcHQgZ2VuZXJhdGUgWEhUTUwgKFhNTCBjb21wbGlhbnQgSFRNTCkuICBUbworZG8gdGhpcyBzZXQgdGhlICJ1c2VfeGh0bWwiIHZhcmlhYmxlOiA+CisgICAgOmxldCB1c2VfeGh0bWwgPSAxCitUbyBkaXNhYmxlIGl0IGFnYWluIGRlbGV0ZSB0aGUgdmFyaWFibGU6ID4KKyAgICA6dW5sZXQgdXNlX3hodG1sCitUaGUgZ2VuZXJhdGVkIFhIVE1MIGZpbGUgY2FuIGJlIHVzZWQgaW4gRG9jQm9vayBYTUwgZG9jdW1lbnRzLiAgU2VlOgorCWh0dHA6Ly9wZW9wbGUubWVjaC5rdWxldXZlbi5hYy5iZS9+cGlzc2FyaXMvaG93dG8vc3JjMmRiLmh0bWwKKworUmVtYXJrczoKKy0gVGhpcyBvbmx5IHdvcmtzIGluIGEgdmVyc2lvbiB3aXRoIEdVSSBzdXBwb3J0LiAgSWYgdGhlIEdVSSBpcyBub3QgYWN0dWFsbHkKKyAgcnVubmluZyAocG9zc2libGUgZm9yIFgxMSkgaXQgc3RpbGwgd29ya3MsIGJ1dCBub3QgdmVyeSB3ZWxsICh0aGUgY29sb3JzCisgIG1heSBiZSB3cm9uZykuCistIE9sZGVyIGJyb3dzZXJzIHdpbGwgbm90IHNob3cgdGhlIGJhY2tncm91bmQgY29sb3JzLgorLSBGcm9tIG1vc3QgYnJvd3NlcnMgeW91IGNhbiBhbHNvIHByaW50IHRoZSBmaWxlIChpbiBjb2xvcikhCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBob3cgdG8gcnVuIHRoZSBzY3JpcHQgb3ZlciBhbGwgLmMgYW5kIC5oIGZpbGVzIGZyb20gYQorVW5peCBzaGVsbDogPgorICAgZm9yIGYgaW4gKi5bY2hdOyBkbyBndmltIC1mICsic3luIG9uIiArInJ1biEgc3ludGF4LzJodG1sLnZpbSIgKyJ3cSIgKyJxIiAkZjsgZG9uZQorPAorCitBQkVMCQkJCQkJCSphYmVsLnZpbSogKmFiZWwtc3ludGF4KgorCitBQkVMIGhpZ2hsaWdodGluZyBwcm92aWRlcyBzb21lIHVzZXItZGVmaW5lZCBvcHRpb25zLiAgVG8gZW5hYmxlIHRoZW0sIGFzc2lnbgorYW55IHZhbHVlIHRvIHRoZSByZXNwZWN0aXZlIHZhcmlhYmxlLiAgRXhhbXBsZTogPgorCTpsZXQgYWJlbF9vYnNvbGV0ZV9vaz0xCitUbyBkaXNhYmxlIHRoZW0gdXNlICI6dW5sZXQiLiAgRXhhbXBsZTogPgorCTp1bmxldCBhYmVsX29ic29sZXRlX29rCisKK1ZhcmlhYmxlCQkJSGlnaGxpZ2h0IH4KK2FiZWxfb2Jzb2xldGVfb2sJCW9ic29sZXRlIGtleXdvcmRzIGFyZSBzdGF0ZW1lbnRzLCBub3QgZXJyb3JzCithYmVsX2NwcF9jb21tZW50c19pbGxlZ2FsCWRvIG5vdCBpbnRlcnByZXQgJy8vJyBhcyBpbmxpbmUgY29tbWVudCBsZWFkZXIKKworCitBREEJCQkJCQkJKmFkYS52aW0qICphZGEtc3ludGF4KgorCitUaGlzIG1vZGUgaXMgZGVzaWduZWQgZm9yIHRoZSAxOTk1IGVkaXRpb24gb2YgQWRhICgiQWRhOTUiKSwgd2hpY2gKK2luY2x1ZGVzIHN1cHBvcnQgZm9yIG9iamVjdGVkLXByb2dyYW1taW5nLCBwcm90ZWN0ZWQgdHlwZXMsIGFuZCBzbyBvbi4KK0l0IGhhbmRsZXMgY29kZSB3cml0dGVuIGZvciB0aGUgb3JpZ2luYWwgQWRhIGxhbmd1YWdlCisoIkFkYTgzIiBvciAiQWRhODciKSBhcyB3ZWxsLCB0aG91Z2ggQWRhODMgY29kZSB3aGljaCB1c2VzIEFkYTk1LW9ubHkKK2tleXdvcmRzIHdpbGwgYmUgd3JvbmdseSBjb2xvcmVkIChzdWNoIGNvZGUgc2hvdWxkIGJlIGZpeGVkIGFueXdheSkuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBBZGEsIHNlZSBodHRwOi8vd3d3LmFkYXBvd2VyLmNvbS4KKworVGhlIEFkYSBtb2RlIGhhbmRsZXMgYSBudW1iZXIgb2Ygc2l0dWF0aW9ucyBjbGVhbmx5LgorRm9yIGV4YW1wbGUsIGl0IGtub3dzIHRoYXQgdGhlICItIiBpbiAiLTUiIGlzIGEgbnVtYmVyLCBidXQgdGhlIHNhbWUKK2NoYXJhY3RlciBpbiAiQS01IiBpcyBhbiBvcGVyYXRvci4gIE5vcm1hbGx5LCBhICJ3aXRoIiBvciAidXNlIiBjbGF1c2UKK3JlZmVyZW5jaW5nIGFub3RoZXIgY29tcGlsYXRpb24gdW5pdCBpcyBjb2xvcmVkIHRoZSBzYW1lIHdheSBhcyBDJ3MKKyIjaW5jbHVkZSIgaXMgY29sb3JlZC4JSWYgeW91IGhhdmUgIkNvbmRpdGlvbmFsIiBvciAiUmVwZWF0IgorZ3JvdXBzIGNvbG9yZWQgZGlmZmVyZW50bHksIHRoZW4gImVuZCBpZiIgYW5kICJlbmQgbG9vcCIgd2lsbCBiZQorY29sb3JlZCBhcyBwYXJ0IG9mIHRob3NlIHJlc3BlY3RpdmUgZ3JvdXBzLgorWW91IGNhbiBzZXQgdGhlc2UgdG8gZGlmZmVyZW50IGNvbG9ycyB1c2luZyB2aW0ncyAiaGlnaGxpZ2h0IiBjb21tYW5kCisoZS5nLiwgdG8gY2hhbmdlIGhvdyBsb29wcyBhcmUgZGlzcGxheWVkLCBlbnRlciB0aGUgY29tbWFuZAorIjpoaSBSZXBlYXQiIGZvbGxvd2VkIGJ5IHRoZSBjb2xvciBzcGVjaWZpY2F0aW9uOyBvbiBzaW1wbGUgdGVybWluYWxzCit0aGUgY29sb3Igc3BlY2lmaWNhdGlvbiBjdGVybWZnPVdoaXRlIG9mdGVuIHNob3dzIHdlbGwpLgorCitUaGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zIHlvdSBjYW4gc2VsZWN0IGluIHRoaXMgQWRhIG1vZGUuCitUbyBlbmFibGUgdGhlbSwgYXNzaWduIGEgdmFsdWUgdG8gdGhlIG9wdGlvbi4gIEZvciBleGFtcGxlLCB0byB0dXJuIG9uZSBvbjoKKyAgIGxldCBhZGFfc3RhbmRhcmRfdHlwZXMgPSAxCitUbyBkaXNhYmxlIHRoZW0gdXNlICI6dW5sZXQiLiAgRXhhbXBsZToKKyAgIHVubGV0IGFkYV9zdGFuZGFyZF90eXBlcyA9IDEKK1lvdSBjYW4ganVzdCB1c2UgIjoiIGFuZCB0eXBlIHRoZXNlIGludG8gdGhlIGNvbW1hbmQgbGluZSB0byBzZXQgdGhlc2UKK3RlbXBvcmFyaWx5IGJlZm9yZSBsb2FkaW5nIGFuIEFkYSBmaWxlLiAgWW91IGNhbiBtYWtlIHRoZXNlIG9wdGlvbiBzZXR0aW5ncworcGVybWFuZW50IGJ5IGFkZGluZyB0aGUgImxldCIgY29tbWFuZChzKSwgd2l0aG91dCBhIGNvbG9uLAordG8geW91ciAifi8udmltcmMiIGZpbGUuCisKK0hlcmUgYXJlIHRoZSBBZGEgbW9kZSBvcHRpb25zOgorCitWYXJpYWJsZQkJIEFjdGlvbgl+CithZGFfc3RhbmRhcmRfdHlwZXMJIEhpZ2hsaWdodCB0eXBlcyBpbiBwYWNrYWdlIFN0YW5kYXJkIChlLmcuLCAiRmxvYXQiKQorYWRhX3NwYWNlX2Vycm9ycwkgSGlnaGxpZ2h0IGV4dHJhbmVvdXMgZXJyb3JzIGluIHNwYWNlcy4uLgorYWRhX25vX3RyYWlsX3NwYWNlX2Vycm9yICAgYnV0IGlnbm9yZSB0cmFpbGluZyBzcGFjZXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUKK2FkYV9ub190YWJfc3BhY2VfZXJyb3IJICAgYnV0IGlnbm9yZSB0YWJzIGFmdGVyIHNwYWNlcworYWRhX3dpdGh1c2Vfb3JkaW5hcnkJIFNob3cgIndpdGgiIGFuZCAidXNlIiBhcyBvcmRpbmFyeSBrZXl3b3JkcworCQkJICAgKHdoZW4gdXNlZCB0byByZWZlcmVuY2Ugb3RoZXIgY29tcGlsYXRpb24gdW5pdHMKKwkJCSAgIHRoZXkncmUgbm9ybWFsbHkgaGlnaGxpZ2h0ZWQgc3BlY2lhbGx5KS4KK2FkYV9iZWdpbl9wcmVwcm9jCSBTaG93IGFsbCBiZWdpbi1saWtlIGtleXdvcmRzIHVzaW5nIHRoZSBjb2xvcmluZworCQkJICAgb2YgQyBwcmVwcm9jZXNzb3IgY29tbWFuZHMuCisKK0V2ZW4gb24gYSBzbG93ICg5ME1oeikgUEMgdGhpcyBtb2RlIHdvcmtzIHF1aWNrbHksIGJ1dCBpZiB5b3UgZmluZAordGhlIHBlcmZvcm1hbmNlIHVuYWNjZXB0YWJsZSwgdHVybiBvbiBhZGFfd2l0aHVzZV9vcmRpbmFyeS4KKworCitBTlQJCQkJCQkqYW50LnZpbSogKmFudC1zeW50YXgqCisKK1RoZSBhbnQgc3ludGF4IGZpbGUgcHJvdmlkZXMgc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgamF2YXNjcmlwdCBhbmQgcHl0aG9uCitieSBkZWZhdWx0LiBTeW50YXggaGlnaGxpZ2h0aW5nIGZvciBvdGhlciBzY3JpcHQgbGFuZ3VhZ2VzIGNhbiBiZSBpbnN0YWxsZWQKK2J5IHRoZSBmdW5jdGlvbiBBbnRTeW50YXhTY3JpcHQoKSwgd2hpY2ggdGFrZXMgdGhlIHRhZyBuYW1lIGFzIGZpcnN0IGFyZ3VtZW50CithbmQgdGhlIHNjcmlwdCBzeW50YXggZmlsZSBuYW1lIGFzIHNlY29uZCBhcmd1bWVudC4gRXhhbXBsZTogPgorCisJOmNhbGwgQW50U3ludGF4U2NyaXB0KCdwZXJsJywgJ3BlcmwudmltJykKKword2lsbCBpbnN0YWxsIHN5bnRheCBwZXJsIGhpZ2hsaWdodGluZyBmb3IgdGhlIGZvbGxvd2luZyBhbnQgY29kZSA+CisKKwk8c2NyaXB0IGxhbmd1YWdlID0gJ3BlcmwnPjwhW0NEQVRBWworCSAgICAjIGV2ZXJ5dGhpbmcgaW5zaWRlIGlzIGhpZ2hsaWdodGVkIGFzIHBlcmwKKwldXT48L3NjcmlwdD4KKworU2VlIHxteXN5bnRheGZpbGUtYWRkfCBmb3IgaW5zdGFsbGluZyBzY3JpcHQgbGFuZ3VhZ2VzIHBlcm1hbmVudGx5LgorCisKK0FQQUNIRQkJCQkJCSphcGFjaGUudmltKiAqYXBhY2hlLXN5bnRheCoKKworVGhlIGFwYWNoZSBzeW50YXggZmlsZSBwcm92aWRlcyBzeW50YXggaGlnaGxpZ2h0aW5nIGRlcGVuZGluZyBvbiBBcGFjaGUgSFRUUAorc2VydmVyIHZlcnNpb24sIGJ5IGRlZmF1bHQgZm9yIDEuMy54LiAgU2V0ICJhcGFjaGVfdmVyc2lvbiIgdG8gQXBhY2hlIHZlcnNpb24KKyhhcyBhIHN0cmluZykgdG8gZ2V0IGhpZ2hsaWdodGluZyBmb3IgYW5vdGhlciB2ZXJzaW9uLglFeGFtcGxlOiA+CisKKwk6bGV0IGFwYWNoZV92ZXJzaW9uID0gIjIuMCIKKzwKKworCQkqYXNtLnZpbSogKmFzbWg4MzAwLnZpbSogKm5hc20udmltKiAqbWFzbS52aW0qICphc202OGsqCitBU1NFTUJMWQkqYXNtLXN5bnRheCogKmFzbWg4MzAwLXN5bnRheCogKm5hc20tc3ludGF4KiAqbWFzbS1zeW50YXgqCisJCSphc202OGstc3ludGF4KiAqZmFzbS52aW0qCisKK0ZpbGVzIG1hdGNoaW5nICIqLmkiIGNvdWxkIGJlIFByb2dyZXNzIG9yIEFzc2VtYmx5LiAgSWYgdGhlIGF1dG9tYXRpYyBkZXRlY3Rpb24KK2RvZXNuJ3Qgd29yayBmb3IgeW91LCBvciB5b3UgZG9uJ3QgZWRpdCBQcm9ncmVzcyBhdCBhbGwsIHVzZSB0aGlzIGluIHlvdXIKK3N0YXJ0dXAgdmltcmM6ID4KKyAgIDpsZXQgZmlsZXR5cGVfaSA9ICJhc20iCitSZXBsYWNlICJhc20iIHdpdGggdGhlIHR5cGUgb2YgYXNzZW1ibHkgeW91IHVzZS4KKworVGhlcmUgYXJlIG1hbnkgdHlwZXMgb2YgYXNzZW1ibHkgbGFuZ3VhZ2VzIHRoYXQgYWxsIHVzZSB0aGUgc2FtZSBmaWxlIG5hbWUKK2V4dGVuc2lvbnMuICBUaGVyZWZvcmUgeW91IHdpbGwgaGF2ZSB0byBzZWxlY3QgdGhlIHR5cGUgeW91cnNlbGYsIG9yIGFkZCBhCitsaW5lIGluIHRoZSBhc3NlbWJseSBmaWxlIHRoYXQgVmltIHdpbGwgcmVjb2duaXplLiAgQ3VycmVudGx5IHRoZXNlIHN5bnRheAorZmlsZXMgYXJlIGluY2x1ZGVkOgorCWFzbQkJR05VIGFzc2VtYmx5ICh0aGUgZGVmYXVsdCkKKwlhc202OGsJCU1vdG9yb2xhIDY4MHgwIGFzc2VtYmx5CisJYXNtaDgzMDAJSGl0YWNoaSBILTgzMDAgdmVyc2lvbiBvZiBHTlUgYXNzZW1ibHkKKwlpYTY0CQlJbnRlbCBJdGFuaXVtIDY0CisJZmFzbQkJRmxhdCBhc3NlbWJseSAoaHR0cDovL2ZsYXRhc3NlbWJsZXIubmV0KQorCW1hc20JCU1pY3Jvc29mdCBhc3NlbWJseSAocHJvYmFibHkgd29ya3MgZm9yIGFueSA4MHg4NikKKwluYXNtCQlOZXR3aWRlIGFzc2VtYmx5CisJdGFzbQkJVHVyYm8gQXNzZW1ibHkgKHdpdGggb3Bjb2RlcyA4MHg4NiB1cCB0byBQZW50aXVtLCBhbmQKKwkJCU1NWCkKKwlwaWMJCVBJQyBhc3NlbWJseSAoY3VycmVudGx5IGZvciBQSUMxNkY4NCkKKworVGhlIG1vc3QgZmxleGlibGUgaXMgdG8gYWRkIGEgbGluZSBpbiB5b3VyIGFzc2VtYmx5IGZpbGUgY29udGFpbmluZzogPgorCTphc21zeW50YXg9bmFzbQorUmVwbGFjZSAibmFzbSIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcmVhbCBhc3NlbWJseSBzeW50YXguICBUaGlzIGxpbmUgbXVzdCBiZQorb25lIG9mIHRoZSBmaXJzdCBmaXZlIGxpbmVzIGluIHRoZSBmaWxlLgorCitUaGUgc3ludGF4IHR5cGUgY2FuIGFsd2F5cyBiZSBvdmVycnVsZWQgZm9yIGEgc3BlY2lmaWMgYnVmZmVyIGJ5IHNldHRpbmcgdGhlCitiOmFzbXN5bnRheCB2YXJpYWJsZTogPgorCTpsZXQgYjphc21zeW50YXg9bmFzbQorCitJZiBiOmFzbXN5bnRheCBpcyBub3Qgc2V0LCBlaXRoZXIgYXV0b21hdGljYWxseSBvciBieSBoYW5kLCB0aGVuIHRoZSB2YWx1ZSBvZgordGhlIGdsb2JhbCB2YXJpYWJsZSBhc21zeW50YXggaXMgdXNlZC4JVGhpcyBjYW4gYmUgc2VlbiBhcyBhIGRlZmF1bHQgYXNzZW1ibHkKK2xhbmd1YWdlOiA+CisJOmxldCBhc21zeW50YXg9bmFzbQorCitBcyBhIGxhc3QgcmVzb3J0LCBpZiBub3RoaW5nIGlzIGRlZmluZWQsIHRoZSAiYXNtIiBzeW50YXggaXMgdXNlZC4KKworCitOZXR3aWRlIGFzc2VtYmxlciAobmFzbS52aW0pIG9wdGlvbmFsIGhpZ2hsaWdodGluZyB+CisKK1RvIGVuYWJsZSBhIGZlYXR1cmU6ID4KKwk6bGV0ICAge3ZhcmlhYmxlfT0xfHNldCBzeW50YXg9bmFzbQorVG8gZGlzYWJsZSBhIGZlYXR1cmU6ID4KKwk6dW5sZXQge3ZhcmlhYmxlfSAgfHNldCBzeW50YXg9bmFzbQorCitWYXJpYWJsZQkJSGlnaGxpZ2h0IH4KK25hc21fbG9vc2Vfc3ludGF4CXVub2ZmaWNpYWwgcGFyc2VyIGFsbG93ZWQgc3ludGF4IG5vdCBhcyBFcnJvcgorCQkJICAocGFyc2VyIGRlcGVuZGVudDsgbm90IHJlY29tbWVuZGVkKQorbmFzbV9jdHhfb3V0c2lkZV9tYWNybwljb250ZXh0cyBvdXRzaWRlIG1hY3JvIG5vdCBhcyBFcnJvcgorbmFzbV9ub193YXJuCQlwb3RlbnRpYWxseSByaXNreSBzeW50YXggbm90IGFzIFRvRG8KKworCitBU1BQRVJMIGFuZCBBU1BWQlMJCQkqYXNwcGVybC1zeW50YXgqICphc3B2YnMtc3ludGF4KgorCisqLmFzcCBhbmQgKi5hc2EgZmlsZXMgY291bGQgYmUgZWl0aGVyIFBlcmwgb3IgVmlzdWFsIEJhc2ljIHNjcmlwdC4gIFNpbmNlIGl0J3MKK2hhcmQgdG8gZGV0ZWN0IHRoaXMgeW91IGNhbiBzZXQgdHdvIGdsb2JhbCB2YXJpYWJsZXMgdG8gdGVsbCBWaW0gd2hhdCB5b3UgYXJlCit1c2luZy4JRm9yIFBlcmwgc2NyaXB0IHVzZTogPgorCTpsZXQgZzpmaWxldHlwZV9hc2EgPSAiYXNwcGVybCIKKwk6bGV0IGc6ZmlsZXR5cGVfYXNwID0gImFzcHBlcmwiCitGb3IgVmlzdWFsIEJhc2ljIHVzZTogPgorCTpsZXQgZzpmaWxldHlwZV9hc2EgPSAiYXNwdmJzIgorCTpsZXQgZzpmaWxldHlwZV9hc3AgPSAiYXNwdmJzIgorCisKK0JBU0lDCQkJCSpiYXNpYy52aW0qICp2Yi52aW0qICpiYXNpYy1zeW50YXgqICp2Yi1zeW50YXgqCisKK0JvdGggVmlzdWFsIEJhc2ljIGFuZCAibm9ybWFsIiBiYXNpYyB1c2UgdGhlIGV4dGVuc2lvbiAiLmJhcyIuCVRvIGRldGVjdAord2hpY2ggb25lIHNob3VsZCBiZSB1c2VkLCBWaW0gY2hlY2tzIGZvciB0aGUgc3RyaW5nICJWQl9OYW1lIiBpbiB0aGUgZmlyc3QKK2ZpdmUgbGluZXMgb2YgdGhlIGZpbGUuICBJZiBpdCBpcyBub3QgZm91bmQsIGZpbGV0eXBlIHdpbGwgYmUgImJhc2ljIiwKK290aGVyd2lzZSAidmIiLiAgRmlsZXMgd2l0aCB0aGUgIi5mcm0iIGV4dGVuc2lvbiB3aWxsIGFsd2F5cyBiZSBzZWVuIGFzIFZpc3VhbAorQmFzaWMuCisKKworQwkJCQkJCQkqYy52aW0qICpjLXN5bnRheCoKKworQSBmZXcgdGhpbmdzIGluIEMgaGlnaGxpZ2h0aW5nIGFyZSBvcHRpb25hbC4gIFRvIGVuYWJsZSB0aGVtIGFzc2lnbiBhbnkgdmFsdWUKK3RvIHRoZSByZXNwZWN0aXZlIHZhcmlhYmxlLiAgRXhhbXBsZTogPgorCTpsZXQgY19jb21tZW50X3N0cmluZ3M9MQorVG8gZGlzYWJsZSB0aGVtIHVzZSAiOnVubGV0Ii4gIEV4YW1wbGU6ID4KKwk6dW5sZXQgY19jb21tZW50X3N0cmluZ3MKKworVmFyaWFibGUJCUhpZ2hsaWdodCB+CitjX2dudQkJCUdOVSBnY2Mgc3BlY2lmaWMgaXRlbXMKK2NfY29tbWVudF9zdHJpbmdzCXN0cmluZ3MgYW5kIG51bWJlcnMgaW5zaWRlIGEgY29tbWVudAorY19zcGFjZV9lcnJvcnMJCXRyYWlsaW5nIHdoaXRlIHNwYWNlIGFuZCBzcGFjZXMgYmVmb3JlIGEgPFRhYj4KK2Nfbm9fdHJhaWxfc3BhY2VfZXJyb3IJIC4uLiBidXQgbm8gdHJhaWxpbmcgc3BhY2VzCitjX25vX3RhYl9zcGFjZV9lcnJvcgkgLi4uIGJ1dCBubyBzcGFjZXMgYmVmb3JlIGEgPFRhYj4KK2Nfbm9fYnJhY2tldF9lcnJvcglkb24ndCBoaWdobGlnaHQge307IGluc2lkZSBbXSBhcyBlcnJvcnMKK2Nfbm9fYW5zaQkJZG9uJ3QgZG8gc3RhbmRhcmQgQU5TSSB0eXBlcyBhbmQgY29uc3RhbnRzCitjX2Fuc2lfdHlwZWRlZnMJCSAuLi4gYnV0IGRvIHN0YW5kYXJkIEFOU0kgdHlwZXMKK2NfYW5zaV9jb25zdGFudHMJIC4uLiBidXQgZG8gc3RhbmRhcmQgQU5TSSBjb25zdGFudHMKK2Nfbm9fdXRmCQlkb24ndCBoaWdobGlnaHQgXHUgYW5kIFxVIGluIHN0cmluZ3MKK2Nfc3ludGF4X2Zvcl9oCQl1c2UgQyBzeW50YXggZm9yICouaCBmaWxlcywgaW5zdGVhZCBvZiBDKysKK2Nfbm9faWYwCQlkb24ndCBoaWdobGlnaHQgIiNpZiAwIiBibG9ja3MgYXMgY29tbWVudHMKK2Nfbm9fY2Zvcm1hdAkJZG9uJ3QgaGlnaGxpZ2h0ICUtZm9ybWF0cyBpbiBzdHJpbmdzCitjX25vX2M5OQkJZG9uJ3QgaGlnaGxpZ2h0IEM5OSBzdGFuZGFyZCBpdGVtcworCitJZiB5b3Ugbm90aWNlIGhpZ2hsaWdodGluZyBlcnJvcnMgd2hpbGUgc2Nyb2xsaW5nIGJhY2t3YXJkcywgd2hpY2ggYXJlIGZpeGVkCit3aGVuIHJlZHJhd2luZyB3aXRoIENUUkwtTCwgdHJ5IHNldHRpbmcgdGhlICJjX21pbmxpbmVzIiBpbnRlcm5hbCB2YXJpYWJsZQordG8gYSBsYXJnZXIgbnVtYmVyOiA+CisJOmxldCBjX21pbmxpbmVzID0gMTAwCitUaGlzIHdpbGwgbWFrZSB0aGUgc3ludGF4IHN5bmNocm9uaXphdGlvbiBzdGFydCAxMDAgbGluZXMgYmVmb3JlIHRoZSBmaXJzdAorZGlzcGxheWVkIGxpbmUuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1MCAoMTUgd2hlbiBjX25vX2lmMCBpcyBzZXQpLiAgVGhlCitkaXNhZHZhbnRhZ2Ugb2YgdXNpbmcgYSBsYXJnZXIgbnVtYmVyIGlzIHRoYXQgcmVkcmF3aW5nIGNhbiBiZWNvbWUgc2xvdy4KKworV2hlbiB1c2luZyB0aGUgIiNpZiAwIiAvICIjZW5kaWYiIGNvbW1lbnQgaGlnaGxpZ2h0aW5nLCBub3RpY2UgdGhhdCB0aGlzIG9ubHkKK3dvcmtzIHdoZW4gdGhlICIjaWYgMCIgaXMgd2l0aGluICJjX21pbmxpbmVzIiBmcm9tIHRoZSB0b3Agb2YgdGhlIHdpbmRvdy4gIElmCit5b3UgaGF2ZSBhIGxvbmcgIiNpZiAwIiBjb25zdHJ1Y3QgaXQgd2lsbCBub3QgYmUgaGlnaGxpZ2h0ZWQgY29ycmVjdGx5LgorCitUbyBtYXRjaCBleHRyYSBpdGVtcyBpbiBjb21tZW50cywgdXNlIHRoZSBjQ29tbWVudEdyb3VwIGNsdXN0ZXIuCitFeGFtcGxlOiA+CisgICA6YXUgU3ludGF4IGMgY2FsbCBNeUNhZGQoKQorICAgOmZ1bmN0aW9uIE15Q2FkZCgpCisgICA6ICBzeW4ga2V5d29yZCBjTXlJdGVtIGNvbnRhaW5lZCBOaQorICAgOiAgc3luIGNsdXN0ZXIgY0NvbW1lbnRHcm91cCBhZGQ9Y015SXRlbQorICAgOiAgaGkgbGluayBjTXlJdGVtIFRpdGxlCisgICA6ZW5kZnVuCisKK0FOU0kgY29uc3RhbnRzIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgd2l0aCB0aGUgImNDb25zdGFudCIgZ3JvdXAuCVRoaXMgaW5jbHVkZXMKKyJOVUxMIiwgIlNJR19JR04iIGFuZCBvdGhlcnMuICBCdXQgbm90ICJUUlVFIiwgZm9yIGV4YW1wbGUsIGJlY2F1c2UgdGhpcyBpcworbm90IGluIHRoZSBBTlNJIHN0YW5kYXJkLiAgSWYgeW91IGZpbmQgdGhpcyBjb25mdXNpbmcsIHJlbW92ZSB0aGUgY0NvbnN0YW50CitoaWdobGlnaHRpbmc6ID4KKwk6aGkgbGluayBjQ29uc3RhbnQgTk9ORQorCitJZiB5b3Ugc2VlICd7JyBhbmQgJ30nIGhpZ2hsaWdodGVkIGFzIGFuIGVycm9yIHdoZXJlIHRoZXkgYXJlIE9LLCByZXNldCB0aGUKK2hpZ2hsaWdodGluZyBmb3IgY0VyckluUGFyZW4gYW5kIGNFcnJJbkJyYWNrZXQuCisKK0lmIHlvdSB3YW50IHRvIHVzZSBmb2xkaW5nIGluIHlvdXIgQyBmaWxlcywgeW91IGNhbiBhZGQgdGhlc2UgbGluZXMgaW4gYSBmaWxlCithbiB0aGUgImFmdGVyIiBkaXJlY3RvcnkgaW4gJ3J1bnRpbWVwYXRoJy4gIEZvciBVbml4IHRoaXMgd291bGQgYmUKK34vLnZpbS9hZnRlci9zeW50YXgvYy52aW0uID4KKyAgICBzeW4gcmVnaW9uIG15Rm9sZCBzdGFydD0ieyIgZW5kPSJ9IiB0cmFuc3BhcmVudCBmb2xkCisgICAgc3luIHN5bmMgZnJvbXN0YXJ0CisgICAgc2V0IGZvbGRtZXRob2Q9c3ludGF4CisKKworQ0hJTEwJCQkJCQkqY2hpbGwudmltKiAqY2hpbGwtc3ludGF4KgorCitDaGlsbCBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIHNpbWlsYXIgdG8gQy4gIFNlZSB8Yy52aW18IGZvciBhbGwgdGhlIHNldHRpbmdzCit0aGF0IGFyZSBhdmFpbGFibGUuICBBZGRpdGlvbmFsbHkgdGhlcmUgaXM6CisKK2NoaWxsX3N5bnRheF9mb3JfaAl1c2UgQ2ggc3ludGF4IGZvciAqLmggZmlsZXMsIGluc3RlYWQgb2YgQyBvciBDKysKK2NoaWxsX3NwYWNlX2Vycm9ycwlsaWtlIGNfc3BhY2VfZXJyb3JzCitjaGlsbF9jb21tZW50X3N0cmluZwlsaWtlIGNfY29tbWVudF9zdHJpbmdzCitjaGlsbF9taW5saW5lcwkJbGlrZSBjX21pbmxpbmVzCisKKworQ0hBTkdFTE9HCQkJCSpjaGFuZ2Vsb2cudmltKiAqY2hhbmdlbG9nLXN5bnRheCoKKworQ2hhbmdlTG9nIHN1cHBvcnRzIGhpZ2hsaWdodGluZyBzcGFjZXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZS4KK0lmIHlvdSBkbyBub3QgbGlrZSB0aGlzLCBhZGQgZm9sbG93aW5nIGxpbmUgdG8geW91ciAudmltcmM6ID4KKwlsZXQgZzpjaGFuZ2Vsb2dfc3BhY2luZ19lcnJvcnMgPSAwCitUaGlzIHdvcmtzIHRoZSBuZXh0IHRpbWUgeW91IGVkaXQgYSBjaGFuZ2Vsb2cgZmlsZS4gIFlvdSBjYW4gYWxzbyB1c2UKKyJiOmNoYW5nZWxvZ19zcGFjaW5nX2Vycm9ycyIgdG8gc2V0IHRoaXMgcGVyIGJ1ZmZlciAoYmVmb3JlIGxvYWRpbmcgdGhlIHN5bnRheAorZmlsZSkuCisKK1lvdSBjYW4gY2hhbmdlIHRoZSBoaWdobGlnaHRpbmcgdXNlZCwgZS5nLiwgdG8gZmxhZyB0aGUgc3BhY2VzIGFzIGFuIGVycm9yOiA+CisJOmhpIGxpbmsgQ2hhbmdlbG9nRXJyb3IgRXJyb3IKK09yIHRvIGF2b2lkIHRoZSBoaWdobGlnaHRpbmc6ID4KKwk6aGkgbGluayBDaGFuZ2Vsb2dFcnJvciBOT05FCitUaGlzIHdvcmtzIGltbWVkaWF0ZWx5LgorCisKK0NPQk9MCQkJCQkJKmNvYm9sLnZpbSogKmNvYm9sLXN5bnRheCoKKworQ09CT0wgaGlnaGxpZ2h0aW5nIGhhcyBkaWZmZXJlbnQgbmVlZHMgZm9yIGxlZ2FjeSBjb2RlIHRoYW4gaXQgZG9lcyBmb3IgZnJlc2gKK2RldmVsb3BtZW50LiAgVGhpcyBpcyBkdWUgdG8gZGlmZmVyZW5jZXMgaW4gd2hhdCBpcyBiZWluZyBkb25lIChtYWludGVuYW5jZQordmVyc3VzIGRldmVsb3BtZW50KSBhbmQgb3RoZXIgZmFjdG9ycy4JVG8gZW5hYmxlIGxlZ2FjeSBjb2RlIGhpZ2hsaWdodGluZywKK2FkZCB0aGlzIGxpbmUgdG8geW91ciAudmltcmM6ID4KKwk6bGV0IGNvYm9sX2xlZ2FjeV9jb2RlID0gMQorVG8gZGlzYWJsZSBpdCBhZ2FpbiwgdXNlIHRoaXM6ID4KKwk6dW5sZXQgY29ib2xfbGVnYWN5X2NvZGUKKworCitDT0xEIEZVU0lPTgkJCQkqY29sZGZ1c2lvbi52aW0qICpjb2xkZnVzaW9uLXN5bnRheCoKKworVGhlIENvbGRGdXNpb24gaGFzIGl0cyBvd24gdmVyc2lvbiBvZiBIVE1MIGNvbW1lbnRzLiBUbyB0dXJuIG9uIENvbGRGdXNpb24KK2NvbW1lbnQgaGlnaGxpZ2h0aW5nLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgc3RhcnR1cCBmaWxlOiA+CisKKwk6bGV0IGh0bWxfd3JvbmdfY29tbWVudHMgPSAxCisKK1RoZSBDb2xkRnVzaW9uIHN5bnRheCBmaWxlIGlzIGJhc2VkIG9uIHRoZSBIVE1MIHN5bnRheCBmaWxlLgorCisKK0NTSAkJCQkJCSpjc2gudmltKiAqY3NoLXN5bnRheCoKKworVGhpcyBjb3ZlcnMgdGhlIHNoZWxsIG5hbWVkICJjc2giLiAgTm90ZSB0aGF0IG9uIHNvbWUgc3lzdGVtcyB0Y3NoIGlzIGFjdHVhbGx5Cit1c2VkLgorCitEZXRlY3Rpbmcgd2hldGhlciBhIGZpbGUgaXMgY3NoIG9yIHRjc2ggaXMgbm90b3Jpb3VzbHkgaGFyZC4gIFNvbWUgc3lzdGVtcworc3ltbGluayAvYmluL2NzaCB0byAvYmluL3Rjc2gsIG1ha2luZyBpdCBhbG1vc3QgaW1wb3NzaWJsZSB0byBkaXN0aW5ndWlzaAorYmV0d2VlbiBjc2ggYW5kIHRjc2guICBJbiBjYXNlIFZJTSBndWVzc2VzIHdyb25nIHlvdSBjYW4gc2V0IHRoZQorImZpbGV0eXBlX2NzaCIgdmFyaWFibGUuICBGb3IgdXNpbmcgY3NoOiA+CisKKwk6bGV0IGZpbGV0eXBlX2NzaCA9ICJjc2giCisKK0ZvciB1c2luZyB0Y3NoOiA+CisKKwk6bGV0IGZpbGV0eXBlX2NzaCA9ICJ0Y3NoIgorCitBbnkgc2NyaXB0IHdpdGggYSB0Y3NoIGV4dGVuc2lvbiBvciBhIHN0YW5kYXJkIHRjc2ggZmlsZW5hbWUgKC50Y3NocmMsCit0Y3NoLnRjc2hyYywgdGNzaC5sb2dpbikgd2lsbCBoYXZlIGZpbGV0eXBlIHRjc2guICBBbGwgb3RoZXIgdGNzaC9jc2ggc2NyaXB0cword2lsbCBiZSBjbGFzc2lmaWVkIGFzIHRjc2gsIFVOTEVTUyB0aGUgImZpbGV0eXBlX2NzaCIgdmFyaWFibGUgZXhpc3RzLiBJZiB0aGUKKyJmaWxldHlwZV9jc2giIHZhcmlhYmxlIGV4aXN0cywgdGhlIGZpbGV0eXBlIHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUKK3ZhcmlhYmxlLgorCisKK0NZTkxJQgkJCQkJCSpjeW5saWIudmltKiAqY3lubGliLXN5bnRheCoKKworQ3lubGliIGZpbGVzIGFyZSBDKysgZmlsZXMgdGhhdCB1c2UgdGhlIEN5bmxpYiBjbGFzcyBsaWJyYXJ5IHRvIGVuYWJsZQoraGFyZHdhcmUgbW9kZWxpbmcgYW5kIHNpbXVsYXRpb24gdXNpbmcgQysrLiBUeXBpY2FsbHkgQ3lubGliIGZpbGVzIGhhdmUgYSAuY2MKK29yIGEgLmNwcCBleHRlbnNpb24sIHdoaWNoIG1ha2VzIGl0IHZlcnkgZGlmZmljdWx0IHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBhCitub3JtYWwgQysrIGZpbGUuIFRodXMsIHRvIGVuYWJsZSBDeW5saWIgaGlnaGxpZ2h0aW5nIGZvciAuY2MgZmlsZXMsIGFkZCB0aGlzCitsaW5lIHRvIHlvdXIgLnZpbXJjIGZpbGU6ID4KKworCTpsZXQgY3lubGliX2N5bnRheF9mb3JfY2M9MQorCitTaW1pbGFybHkgZm9yIGNwcCBmaWxlcyAodGhpcyBleHRlbnNpb24gaXMgb25seSB1c3VhbGx5IHVzZWQgaW4gV2luZG93cykgPgorCisJOmxldCBjeW5saWJfY3ludGF4X2Zvcl9jcHA9MQorCitUbyBkaXNhYmxlIHRoZXNlIGFnYWluLCB1c2UgdGhpczogPgorCisJOnVubGV0IGN5bmxpYl9jeW50YXhfZm9yX2NjCisJOnVubGV0IGN5bmxpYl9jeW50YXhfZm9yX2NwcAorPAorCitDV0VCCQkJCQkJKmN3ZWIudmltKiAqY3dlYi1zeW50YXgqCisKK0ZpbGVzIG1hdGNoaW5nICIqLnciIGNvdWxkIGJlIFByb2dyZXNzIG9yIGN3ZWIuICBJZiB0aGUgYXV0b21hdGljIGRldGVjdGlvbgorZG9lc24ndCB3b3JrIGZvciB5b3UsIG9yIHlvdSBkb24ndCBlZGl0IFByb2dyZXNzIGF0IGFsbCwgdXNlIHRoaXMgaW4geW91cgorc3RhcnR1cCB2aW1yYzogPgorICAgOmxldCBmaWxldHlwZV93ID0gImN3ZWIiCisKKworREVTS1RPUAkJCQkJICAgKmRlc2t0b3AudmltKiAqZGVza3RvcC1zeW50YXgqCisKK1ByaW1hcnkgZ29hbCBvZiB0aGlzIHN5bnRheCBmaWxlIGlzIHRvIGhpZ2hsaWdodCAuZGVza3RvcCBhbmQgLmRpcmVjdG9yeSBmaWxlcworYWNjb3JkaW5nIHRvIGZyZWVkZXNrdG9wLm9yZyBzdGFuZGFyZDogaHR0cDovL3BkeC5mcmVlZGVza3RvcC5vcmcvU3RhbmRhcmRzLworQnV0IGFjdHVhbGx5IGFsbW9zdCBub25lIGltcGxlbWVudHMgdGhpcyBzdGFuZGFyZCBmdWxseS4gIFRodXMgaXQgd2lsbAoraGlnaGxpZ2h0IGFsbCBVbml4IGluaSBmaWxlcy4gQnV0IHlvdSBjYW4gZm9yY2Ugc3RyaWN0IGhpZ2hsaWdodGluZyBhY2NvcmRpbmcKK3RvIHN0YW5kYXJkIGJ5IHBsYWNpbmcgdGhpcyBpbiB5b3VyIHZpbXJjIGZpbGU6ID4KKwk6bGV0IGVuZm9yY2VfZnJlZWRlc2t0b3Bfc3RhbmRhcmQgPSAxCisKKworRElSQ09MT1JTCQkJICAgICAgICpkaXJjb2xvcnMudmltKiAqZGlyY29sb3JzLXN5bnRheCoKKworVGhlIGRpcmNvbG9ycyB1dGlsaXR5IGhpZ2hsaWdodGluZyBkZWZpbml0aW9uIGhhcyBvbmUgb3B0aW9uLiAgSXQgZXhpc3RzIHRvCitwcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgU2xhY2t3YXJlIEdOVS9MaW51eCBkaXN0cmlidXRpb25zIHZlcnNpb24gb2YKK3RoZSBjb21tYW5kLiAgSXQgYWRkcyBhIGZldyBrZXl3b3JkcyB0aGF0IGFyZSBnZW5lcmFsbHkgaWdub3JlZCBieSBtb3N0Cit2ZXJzaW9ucy4gIE9uIFNsYWNrd2FyZSBzeXN0ZW1zLCBob3dldmVyLCB0aGUgdXRpbGl0eSBhY2NlcHRzIHRoZSBrZXl3b3JkcyBhbmQKK3VzZXMgdGhlbSBmb3IgcHJvY2Vzc2luZy4gIFRvIGVuYWJsZSB0aGUgU2xhY2t3YXJlIGtleXdvcmRzIGFkZCB0aGUgZm9sbG93aW5nCitsaW5lIHRvIHlvdXIgc3RhcnR1cCBmaWxlOiA+CisJbGV0IGRpcmNvbG9yc19pc19zbGFja3dhcmUgPSAxCisKKworRE9DQk9PSwkJCQkJKmRvY2JrLnZpbSogKmRvY2JrLXN5bnRheCogKmRvY2Jvb2sqCitET0NCT09LCVhNTAkJCQkqZG9jYmt4bWwudmltKiAqZG9jYmt4bWwtc3ludGF4KgorRE9DQk9PSwlTR01MCQkJCSpkb2Nia3NnbWwudmltKiAqZG9jYmtzZ21sLXN5bnRheCoKKworVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBEb2NCb29rIGZpbGVzOiBTR01MIGFuZCBYTUwuICBUbyBzcGVjaWZ5IHdoYXQgdHlwZSB5b3UKK2FyZSB1c2luZyB0aGUgImI6ZG9jYmtfdHlwZSIgdmFyaWFibGUgc2hvdWxkIGJlIHNldC4gIFZpbSBkb2VzIHRoaXMgZm9yIHlvdQorYXV0b21hdGljYWxseSBpZiBpdCBjYW4gcmVjb2duaXplIHRoZSB0eXBlLiAgV2hlbiBWaW0gY2FuJ3QgZ3Vlc3MgaXQgdGhlIHR5cGUKK2RlZmF1bHRzIHRvIFhNTC4KK1lvdSBjYW4gc2V0IHRoZSB0eXBlIG1hbnVhbGx5OiA+CisJOmxldCBkb2Nia190eXBlID0gInNnbWwiCitvcjogPgorCTpsZXQgZG9jYmtfdHlwZSA9ICJ4bWwiCitZb3UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBsb2FkaW5nIHRoZSBzeW50YXggZmlsZSwgd2hpY2ggaXMgY29tcGxpY2F0ZWQuCitTaW1wbGVyIGlzIHNldHRpbmcgdGhlIGZpbGV0eXBlIHRvICJkb2Nia3htbCIgb3IgImRvY2Jrc2dtbCI6ID4KKwk6c2V0IGZpbGV0eXBlPWRvY2Jrc2dtbAorb3I6ID4KKwk6c2V0IGZpbGV0eXBlPWRvY2JreG1sCisKKworRE9TQkFUQ0gJCQkJKmRvc2JhdGNoLnZpbSogKmRvc2JhdGNoLXN5bnRheCoKKworVGhlcmUgaXMgb25lIG9wdGlvbiB3aXRoIGhpZ2hsaWdodGluZyBET1MgYmF0Y2ggZmlsZXMuCVRoaXMgY292ZXJzIG5ldworZXh0ZW5zaW9ucyB0byB0aGUgQ29tbWFuZCBJbnRlcnByZXRlciBpbnRyb2R1Y2VkIHdpdGggV2luZG93cyAyMDAwIGFuZAoraXMgY29udHJvbGxlZCBieSB0aGUgdmFyaWFibGUgZG9zYmF0Y2hfY21kZXh0dmVyc2lvbi4gIEZvciBXaW5kb3dzIE5UCit0aGlzIHNob3VsZCBoYXZlIHRoZSB2YWx1ZSAxLCBhbmQgZm9yIFdpbmRvd3MgMjAwMCBpdCBzaG91bGQgYmUgMi4KK1NlbGVjdCB0aGUgdmVyc2lvbiB5b3Ugd2FudCB3aXRoIHRoZSBmb2xsb3dpbmcgbGluZTogPgorCisgIDpsZXQgZG9zYmF0Y2hfY21kZXh0dmVyc2lvbiA9IDEKKworSWYgdGhpcyB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCBpdCBkZWZhdWx0cyB0byBhIHZhbHVlIG9mIDIgdG8gc3VwcG9ydAorV2luZG93cyAyMDAwLgorCisKK0RURAkJCQkJCSpkdGQudmltKiAqZHRkLXN5bnRheCoKKworVGhlIERURCBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIGNhc2Ugc2Vuc2l0aXZlIGJ5IGRlZmF1bHQuIFRvIGRpc2FibGUKK2Nhc2Utc2Vuc2l0aXZlIGhpZ2hsaWdodGluZywgYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyIHN0YXJ0dXAgZmlsZTogPgorCisJOmxldCBkdGRfaWdub3JlX2Nhc2U9MQorCitUaGUgRFREIHN5bnRheCBmaWxlIHdpbGwgaGlnaGxpZ2h0IHVua25vd24gdGFncyBhcyBlcnJvcnMuIElmCit0aGlzIGlzIGFubm95aW5nLCBpdCBjYW4gYmUgdHVybmVkIG9mZiBieSBzZXR0aW5nOiA+CisKKwk6bGV0IGR0ZF9ub190YWdfZXJyb3JzPTEKKworYmVmb3JlIHNvdXJjaW5nIHRoZSBkdGQudmltIHN5bnRheCBmaWxlLgorUGFyYW1ldGVyIGVudGl0eSBuYW1lcyBhcmUgaGlnaGxpZ2h0ZWQgaW4gdGhlIGRlZmluaXRpb24gdXNpbmcgdGhlCisnVHlwZScgaGlnaGxpZ2h0aW5nIGdyb3VwIGFuZCAnQ29tbWVudCcgZm9yIHB1bmN0dWF0aW9uIGFuZCAnJScuCitQYXJhbWV0ZXIgZW50aXR5IGluc3RhbmNlcyBhcmUgaGlnaGxpZ2h0ZWQgdXNpbmcgdGhlICdDb25zdGFudCcKK2hpZ2hsaWdodGluZyBncm91cCBhbmQgdGhlICdUeXBlJyBoaWdobGlnaHRpbmcgZ3JvdXAgZm9yIHRoZQorZGVsaW1pdGVycyAlIGFuZCA7LiBUaGlzIGNhbiBiZSB0dXJuZWQgb2ZmIGJ5IHNldHRpbmc6ID4KKworCTpsZXQgZHRkX25vX3BhcmFtX2VudGl0aWVzPTEKKworVGhlIERURCBzeW50YXggZmlsZSBpcyBhbHNvIGluY2x1ZGVkIGJ5IHhtbC52aW0gdG8gaGlnaGxpZ2h0IGluY2x1ZGVkIGR0ZCdzLgorCisKK0VJRkZFTAkJCQkJCSplaWZmZWwudmltKiAqZWlmZmVsLXN5bnRheCoKKworV2hpbGUgRWlmZmVsIGlzIG5vdCBjYXNlLXNlbnNpdGl2ZSwgaXRzIHN0eWxlIGd1aWRlbGluZXMgYXJlLCBhbmQgdGhlCitzeW50YXggaGlnaGxpZ2h0aW5nIGZpbGUgZW5jb3VyYWdlcyB0aGVpciB1c2UuIFRoaXMgYWxzbyBhbGxvd3MgdG8KK2hpZ2hsaWdodCBjbGFzcyBuYW1lcyBkaWZmZXJlbnRseS4gSWYgeW91IHdhbnQgdG8gZGlzYWJsZSBjYXNlLXNlbnNpdGl2ZQoraGlnaGxpZ2h0aW5nLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgc3RhcnR1cCBmaWxlOiA+CisKKwk6bGV0IGVpZmZlbF9pZ25vcmVfY2FzZT0xCisKK0Nhc2Ugc3RpbGwgbWF0dGVycyBmb3IgY2xhc3MgbmFtZXMgYW5kIFRPRE8gbWFya3MgaW4gY29tbWVudHMuCisKK0NvbnZlcnNlbHksIGZvciBldmVuIHN0cmljdGVyIGNoZWNrcywgYWRkIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxpbmVzOiA+CisKKwk6bGV0IGVpZmZlbF9zdHJpY3Q9MQorCTpsZXQgZWlmZmVsX3BlZGFudGljPTEKKworU2V0dGluZyBlaWZmZWxfc3RyaWN0IHdpbGwgb25seSBjYXRjaCBpbXByb3BlciBjYXBpdGFsaXphdGlvbiBmb3IgdGhlCitmaXZlIHByZWRlZmluZWQgd29yZHMgIkN1cnJlbnQiLCAiVm9pZCIsICJSZXN1bHQiLCAiUHJlY3Vyc29yIiwgYW5kCisiTk9ORSIsIHRvIHdhcm4gYWdhaW5zdCB0aGVpciBhY2NpZGVudGFsIHVzZSBhcyBmZWF0dXJlIG9yIGNsYXNzIG5hbWVzLgorCitTZXR0aW5nIGVpZmZlbF9wZWRhbnRpYyB3aWxsIGVuZm9yY2UgYWRoZXJlbmNlIHRvIHRoZSBFaWZmZWwgc3R5bGUKK2d1aWRlbGluZXMgZmFpcmx5IHJpZ29yb3VzbHkgKGxpa2UgYXJiaXRyYXJ5IG1peGVzIG9mIHVwcGVyLSBhbmQKK2xvd2VyY2FzZSBsZXR0ZXJzIGFzIHdlbGwgYXMgb3V0ZGF0ZWQgd2F5cyB0byBjYXBpdGFsaXplIGtleXdvcmRzKS4KKworSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBsb3dlci1jYXNlIHZlcnNpb24gb2YgIkN1cnJlbnQiLCAiVm9pZCIsCisiUmVzdWx0IiwgYW5kICJQcmVjdXJzb3IiLCB5b3UgY2FuIHVzZSA+CisKKwk6bGV0IGVpZmZlbF9sb3dlcl9jYXNlX3ByZWRlZj0xCisKK2luc3RlYWQgb2YgY29tcGxldGVseSB0dXJuaW5nIGNhc2Utc2Vuc2l0aXZlIGhpZ2hsaWdodGluZyBvZmYuCisKK1N1cHBvcnQgZm9yIElTRSdzIHByb3Bvc2VkIG5ldyBjcmVhdGlvbiBzeW50YXggdGhhdCBpcyBhbHJlYWR5CitleHBlcmltZW50YWxseSBoYW5kbGVkIGJ5IHNvbWUgY29tcGlsZXJzIGNhbiBiZSBlbmFibGVkIGJ5OiA+CisKKwk6bGV0IGVpZmZlbF9pc2U9MQorCitGaW5hbGx5LCBzb21lIHZlbmRvcnMgc3VwcG9ydCBoZXhhZGVjaW1hbCBjb25zdGFudHMuIFRvIGhhbmRsZSB0aGVtLCBhZGQgPgorCisJOmxldCBlaWZmZWxfaGV4X2NvbnN0YW50cz0xCisKK3RvIHlvdXIgc3RhcnR1cCBmaWxlLgorCisKK0VSTEFORwkJCQkJCSplcmxhbmcudmltKiAqZXJsYW5nLXN5bnRheCoKKworVGhlIGVybGFuZyBoaWdobGlnaHRpbmcgc3VwcG9ydHMgRXJsYW5nIChFUmljc3NvbiBMQU5HdWFnZSkuCitFcmxhbmcgaXMgY2FzZSBzZW5zaXRpdmUgYW5kIGRlZmF1bHQgZXh0ZW5zaW9uIGlzICIuZXJsIi4KKworSWYgeW91IHdhbnQgdG8gZGlzYWJsZSBrZXl3b3JkcyBoaWdobGlnaHRpbmcsIHB1dCBpbiB5b3VyIC52aW1yYzogPgorCTpsZXQgZXJsYW5nX2tleXdvcmRzID0gMQorSWYgeW91IHdhbnQgdG8gZGlzYWJsZSBidWlsdC1pbi1mdW5jdGlvbnMgaGlnaGxpZ2h0aW5nLCBwdXQgaW4geW91cgorLnZpbXJjIGZpbGU6ID4KKwk6bGV0IGVybGFuZ19mdW5jdGlvbnMgPSAxCitJZiB5b3Ugd2FudCB0byBkaXNhYmxlIHNwZWNpYWwgY2hhcmFjdGVycyBoaWdobGlnaHRpbmcsIHB1dCBpbgoreW91ciAudmltcmM6ID4KKwk6bGV0IGVybGFuZ19jaGFyYWN0ZXJzID0gMQorCisKK0ZPUk0JCQkJCQkqZm9ybS52aW0qICpmb3JtLXN5bnRheCoKKworVGhlIGNvbG9yaW5nIHNjaGVtZSBmb3Igc3ludGF4IGVsZW1lbnRzIGluIHRoZSBGT1JNIGZpbGUgdXNlcyB0aGUgZGVmYXVsdAorbW9kZXMgQ29uZGl0aW9uYWwsIE51bWJlciwgU3RhdGVtZW50LCBDb21tZW50LCBQcmVQcm9jLCBUeXBlLCBhbmQgU3RyaW5nLAorZm9sbG93aW5nIHRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9ucyBpbiAnU3ltYm9saWMgTWFuaXB1bGF0aW9uIHdpdGggRk9STScnIGJ5CitKLkEuTS4gVmVybWFzZXJlbiwgQ0FOLCBOZXRoZXJsYW5kcywgMTk5MS4KKworSWYgeW91IHdhbnQgaW5jbHVkZSB5b3VyIG93biBjaGFuZ2VzIHRvIHRoZSBkZWZhdWx0IGNvbG9ycywgeW91IGhhdmUgdG8KK3JlZGVmaW5lIHRoZSBmb2xsb3dpbmcgc3ludGF4IGdyb3VwczoKKworICAgIC0gZm9ybUNvbmRpdGlvbmFsCisgICAgLSBmb3JtTnVtYmVyCisgICAgLSBmb3JtU3RhdGVtZW50CisgICAgLSBmb3JtSGVhZGVyU3RhdGVtZW50CisgICAgLSBmb3JtQ29tbWVudAorICAgIC0gZm9ybVByZVByb2MKKyAgICAtIGZvcm1EaXJlY3RpdmUKKyAgICAtIGZvcm1UeXBlCisgICAgLSBmb3JtU3RyaW5nCisKK05vdGUgdGhhdCB0aGUgZm9ybS52aW0gc3ludGF4IGZpbGUgaW1wbGVtZW50cyBGT1JNIHByZXByb2Nlc3NvciBjb21tYW5kcyBhbmQKK2RpcmVjdGl2ZXMgcGVyIGRlZmF1bHQgaW4gdGhlIHNhbWUgc3ludGF4IGdyb3VwLgorCitBIHByZWRlZmluZWQgZW5oYW5jZWQgY29sb3IgbW9kZSBmb3IgRk9STSBpcyBhdmFpbGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgoraGVhZGVyIHN0YXRlbWVudHMgYW5kIHN0YXRlbWVudHMgaW4gdGhlIGJvZHkgb2YgYSBGT1JNIHByb2dyYW0uIFRvIGFjdGl2YXRlCit0aGlzIG1vZGUgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgaW4geW91ciB2aW1yYyBmaWxlID4KKworCTpsZXQgZm9ybV9lbmhhbmNlZF9jb2xvcj0xCisKK1RoZSBlbmhhbmNlZCBtb2RlIGFsc28gdGFrZXMgYWR2YW50YWdlIG9mIGFkZGl0aW9uYWwgY29sb3IgZmVhdHVyZXMgZm9yIGEgZGFyaworZ3ZpbSBkaXNwbGF5LiBIZXJlLCBzdGF0ZW1lbnRzIGFyZSBjb2xvcmVkIExpZ2h0WWVsbG93IGluc3RlYWQgb2YgWWVsbG93LCBhbmQKK2NvbmRpdGlvbmFscyBhcmUgTGlnaHRCbHVlIGZvciBiZXR0ZXIgZGlzdGluY3Rpb24uCisKKworRk9SVFJBTgkJCQkJKmZvcnRyYW4udmltKiAqZm9ydHJhbi1zeW50YXgqCisKK0RlZmF1bHQgaGlnaGxpZ2h0aW5nIGFuZCBkaWFsZWN0IH4KK0hpZ2hsaWdodGluZyBhcHByb3ByaWF0ZSBmb3IgZjk1IChGb3J0cmFuIDk1KSBpcyB1c2VkIGJ5IGRlZmF1bHQuIFRoaXMgY2hvaWNlCitzaG91bGQgYmUgYXBwcm9wcmlhdGUgZm9yIG1vc3QgdXNlcnMgbW9zdCBvZiB0aGUgdGltZSBiZWNhdXNlIEZvcnRyYW4gOTUgaXMgYQorc3VwZXJzZXQgb2YgRm9ydHJhbiA5MCBhbmQgYWxtb3N0IGEgc3VwZXJzZXQgb2YgRm9ydHJhbiA3Ny4KKworRm9ydHJhbiBzb3VyY2UgY29kZSBmb3JtIH4KK0ZvcnRyYW4gOXggY29kZSBjYW4gYmUgaW4gZWl0aGVyIGZpeGVkIG9yIGZyZWUgc291cmNlIGZvcm0uIE5vdGUgdGhhdCB0aGUKK3N5bnRheCBoaWdobGlnaHRpbmcgd2lsbCBub3QgYmUgY29ycmVjdCBpZiB0aGUgZm9ybSBpcyBpbmNvcnJlY3RseSBzZXQuCisKK1doZW4geW91IGNyZWF0ZSBhIG5ldyBmb3J0cmFuIGZpbGUsIHRoZSBzeW50YXggc2NyaXB0IGFzc3VtZXMgZml4ZWQgc291cmNlCitmb3JtLiBJZiB5b3UgYWx3YXlzIHVzZSBmcmVlIHNvdXJjZSBmb3JtLCB0aGVuID4KKyAgICA6bGV0IGZvcnRyYW5fZnJlZV9zb3VyY2U9MQoraW4geW91ciAudmltcmMgcHJpb3IgdG8gdGhlIDpzeW50YXggb24gY29tbWFuZC4gSWYgeW91IGFsd2F5cyB1c2UgZml4ZWQgc291cmNlCitmb3JtLCB0aGVuID4KKyAgICA6bGV0IGZvcnRyYW5fZml4ZWRfc291cmNlPTEKK2luIHlvdXIgLnZpbXJjIHByaW9yIHRvIHRoZSA6c3ludGF4IG9uIGNvbW1hbmQuCisKK0lmIHRoZSBmb3JtIG9mIHRoZSBzb3VyY2UgY29kZSBkZXBlbmRzIHVwb24gdGhlIGZpbGUgZXh0ZW5zaW9uLCB0aGVuIGl0IGlzCittb3N0IGNvbnZlbmllbnQgdG8gc2V0IGZvcnRyYW5fZnJlZV9zb3VyY2UgaW4gYSBmdHBsdWdpbiBmaWxlLiBGb3IgbW9yZQoraW5mb3JtYXRpb24gb24gZnRwbHVnaW4gZmlsZXMsIHNlZSB8ZnRwbHVnaW58LiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIKK2ZvcnRyYW4gZmlsZXMgd2l0aCBhbiAuZjkwIGV4dGVuc2lvbiBhcmUgd3JpdHRlbiBpbiBmcmVlIHNvdXJjZSBmb3JtIGFuZCB0aGUKK3Jlc3QgaW4gZml4ZWQgc291cmNlIGZvcm0sIGFkZCB0aGUgZm9sbG93aW5nIGNvZGUgdG8geW91ciBmdHBsdWdpbiBmaWxlID4KKyAgICBsZXQgczpleHRmbmFtZSA9IGV4cGFuZCgiJTplIikKKyAgICBpZiBzOmV4dGZuYW1lID09PyAiZjkwIgorCWxldCBmb3J0cmFuX2ZyZWVfc291cmNlPTEKKwl1bmxldCEgZm9ydHJhbl9maXhlZF9zb3VyY2UKKyAgICBlbHNlCisJbGV0IGZvcnRyYW5fZml4ZWRfc291cmNlPTEKKwl1bmxldCEgZm9ydHJhbl9mcmVlX3NvdXJjZQorICAgIGVuZGlmCitOb3RlIHRoYXQgdGhpcyB3aWxsIHdvcmsgb25seSBpZiB0aGUgImZpbGV0eXBlIHBsdWdpbiBpbmRlbnQgb24iIGNvbW1hbmQKK3ByZWNlZGVzIHRoZSAic3ludGF4IG9uIiBjb21tYW5kIGluIHlvdXIgLnZpbXJjIGZpbGUuCisKK1doZW4geW91IGVkaXQgYW4gZXhpc3RpbmcgZm9ydHJhbiBmaWxlLCB0aGUgc3ludGF4IHNjcmlwdCB3aWxsIGFzc3VtZSBmcmVlCitzb3VyY2UgZm9ybSBpZiB0aGUgZm9ydHJhbl9mcmVlX3NvdXJjZSB2YXJpYWJsZSBoYXMgYmVlbiBzZXQsIGFuZCBhc3N1bWVzCitmaXhlZCBzb3VyY2UgZm9ybSBpZiB0aGUgZm9ydHJhbl9maXhlZF9zb3VyY2UgdmFyaWFibGUgaGFzIGJlZW4gc2V0LiBJZgorbmVpdGhlciBvZiB0aGVzZSB2YXJpYWJsZXMgaGF2ZSBiZWVuIHNldCwgdGhlIHN5bnRheCBzY3JpcHQgYXR0ZW1wdHMgdG8KK2RldGVybWluZSB3aGljaCBzb3VyY2UgZm9ybSBoYXMgYmVlbiB1c2VkIGJ5IGV4YW1pbmluZyB0aGUgZmlyc3QgZml2ZSBjb2x1bW5zCitvZiB0aGUgZmlyc3QgMjUgbGluZXMgb2YgeW91ciBmaWxlLiBJZiBubyBzaWducyBvZiBmcmVlIHNvdXJjZSBmb3JtIGFyZQorZGV0ZWN0ZWQsIHRoZW4gdGhlIGZpbGUgaXMgYXNzdW1lZCB0byBiZSBpbiBmaXhlZCBzb3VyY2UgZm9ybS4gVGhlIGFsZ29yaXRobQorc2hvdWxkIHdvcmsgaW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgY2FzZXMuIEluIHNvbWUgY2FzZXMsIHN1Y2ggYXMgYSBmaWxlIHRoYXQKK2JlZ2lucyB3aXRoIDI1IG9yIG1vcmUgZnVsbC1saW5lIGNvbW1lbnRzLCB0aGUgc2NyaXB0IG1heSBpbmNvcnJlY3RseSBkZWNpZGUKK3RoYXQgdGhlIGZvcnRyYW4gY29kZSBpcyBpbiBmaXhlZCBmb3JtLiBJZiB0aGF0IGhhcHBlbnMsIGp1c3QgYWRkIGEKK25vbi1jb21tZW50IHN0YXRlbWVudCBiZWdpbm5pbmcgYW55d2hlcmUgaW4gdGhlIGZpcnN0IGZpdmUgY29sdW1ucyBvZiB0aGUKK2ZpcnN0IHR3ZW50eSBmaXZlIGxpbmVzLCBzYXZlICg6dykgYW5kIHRoZW4gcmVsb2FkICg6ZSEpIHRoZSBmaWxlLgorCitUYWJzIGluIGZvcnRyYW4gZmlsZXMgfgorVGFicyBhcmUgbm90IHJlY29nbml6ZWQgYnkgdGhlIEZvcnRyYW4gc3RhbmRhcmRzLiBUYWJzIGFyZSBub3QgYSBnb29kIGlkZWEgaW4KK2ZpeGVkIGZvcm1hdCBmb3J0cmFuIHNvdXJjZSBjb2RlIHdoaWNoIHJlcXVpcmVzIGZpeGVkIGNvbHVtbiBib3VuZGFyaWVzLgorVGhlcmVmb3JlLCB0YWJzIGFyZSBtYXJrZWQgYXMgZXJyb3JzLiBOZXZlcnRoZWxlc3MsIHNvbWUgcHJvZ3JhbW1lcnMgbGlrZQordXNpbmcgdGFicy4gSWYgeW91ciBmb3J0cmFuIGZpbGVzIGNvbnRhaW4gdGFicywgdGhlbiB5b3Ugc2hvdWxkIHNldCB0aGUKK3ZhcmlhYmxlIGZvcnRyYW5faGF2ZV90YWJzIGluIHlvdXIgLnZpbXJjIHdpdGggYSBjb21tYW5kIHN1Y2ggYXMgPgorICAgIDpsZXQgZm9ydHJhbl9oYXZlX3RhYnM9MQorcGxhY2VkIHByaW9yIHRvIHRoZSA6c3ludGF4IG9uIGNvbW1hbmQuIFVuZm9ydHVuYXRlbHksIHRoZSB1c2Ugb2YgdGFicyB3aWxsCittZWFuIHRoYXQgdGhlIHN5bnRheCBmaWxlIHdpbGwgbm90IGJlIGFibGUgdG8gZGV0ZWN0IGluY29ycmVjdCBtYXJnaW5zLgorCitTeW50YXggZm9sZGluZyBvZiBmb3J0cmFuIGZpbGVzIH4KK0lmIHlvdSB3aXNoIHRvIHVzZSBmb2xkbWV0aG9kPXN5bnRheCwgdGhlbiB5b3UgbXVzdCBmaXJzdCBzZXQgdGhlIHZhcmlhYmxlCitmb3J0cmFuX2ZvbGQgd2l0aCBhIGNvbW1hbmQgc3VjaCBhcyA+CisgICAgOmxldCBmb3J0cmFuX2ZvbGQ9MQordG8gaW5zdHJ1Y3QgdGhlIHN5bnRheCBzY3JpcHQgdG8gZGVmaW5lIGZvbGQgcmVnaW9ucyBmb3IgcHJvZ3JhbSB1bml0cywgdGhhdAoraXMgbWFpbiBwcm9ncmFtcyBzdGFydGluZyB3aXRoIGEgcHJvZ3JhbSBzdGF0ZW1lbnQsIHN1YnJvdXRpbmVzLCBmdW5jdGlvbgorc3VicHJvZ3JhbXMsIGJsb2NrIGRhdGEgc3VicHJvZ3JhbXMsIGludGVyZmFjZSBibG9ja3MsIGFuZCBtb2R1bGVzLiBJZiB5b3UKK2Fsc28gc2V0IHRoZSB2YXJpYWJsZSBmb3J0cmFuX2ZvbGRfY29uZGl0aW9uYWxzIHdpdGggYSBjb21tYW5kIHN1Y2ggYXMgPgorICAgIDpsZXQgZm9ydHJhbl9mb2xkX2NvbmRpdGlvbmFscz0xCit0aGVuIGZvbGQgcmVnaW9ucyB3aWxsIGFsc28gYmUgZGVmaW5lZCBmb3IgZG8gbG9vcHMsIGlmIGJsb2NrcywgYW5kIHNlbGVjdAorY2FzZSBjb25zdHJ1Y3RzLiBJZiB5b3UgYWxzbyBzZXQgdGhlIHZhcmlhYmxlCitmb3J0cmFuX2ZvbGRfbXVsdGlsaW5lY29tbWVudHMgd2l0aCBhIGNvbW1hbmQgc3VjaCBhcyA+CisgICAgOmxldCBmb3J0cmFuX2ZvbGRfbXVsdGlsaW5lY29tbWVudHM9MQordGhlbiBmb2xkIHJlZ2lvbnMgd2lsbCBhbHNvIGJlIGRlZmluZWQgZm9yIHRocmVlIG9yIG1vcmUgY29uc2VjdXRpdmUgY29tbWVudAorbGluZXMuIE5vdGUgdGhhdCBkZWZpbmluZyBmb2xkIHJlZ2lvbnMgY2FuIGJlIHNsb3cgZm9yIGxhcmdlIGZpbGVzLgorCitJZiBmb3J0cmFuX2ZvbGQsIGFuZCBwb3NzaWJseSBmb3J0cmFuX2ZvbGRfY29uZGl0aW9uYWxzIGFuZC9vcgorZm9ydHJhbl9mb2xkX211bHRpbGluZWNvbW1lbnRzLCBoYXZlIGJlZW4gc2V0LCB0aGVuIHZpbSB3aWxsIGZvbGQgeW91ciBmaWxlIGlmCit5b3Ugc2V0IGZvbGRtZXRob2Q9c3ludGF4LiBDb21tZW50cyBvciBibGFuayBsaW5lcyBwbGFjZWQgYmV0d2VlbiB0d28gcHJvZ3JhbQordW5pdHMgYXJlIG5vdCBmb2xkZWQgYmVjYXVzZSB0aGV5IGFyZSBzZWVuIGFzIG5vdCBiZWxvbmdpbmcgdG8gYW55IHByb2dyYW0KK3VuaXQuCisKK01vcmUgcHJlY2lzZSBmb3J0cmFuIHN5bnRheCB+CitJZiB5b3Ugc2V0IHRoZSB2YXJpYWJsZSBmb3J0cmFuX21vcmVfcHJlY2lzZSB3aXRoIGEgY29tbWFuZCBzdWNoIGFzID4KKyAgICA6bGV0IGZvcnRyYW5fbW9yZV9wcmVjaXNlPTEKK3RoZW4gdGhlIHN5bnRheCBjb2xvcmluZyB3aWxsIGJlIG1vcmUgcHJlY2lzZSBidXQgc2xvd2VyLiBJbiBwYXJ0aWN1bGFyLAorc3RhdGVtZW50IGxhYmVscyB1c2VkIGluIGRvLCBnb3RvIGFuZCBhcml0aG1ldGljIGlmIHN0YXRlbWVudHMgd2lsbCBiZQorcmVjb2duaXplZCwgYXMgd2lsbCBjb25zdHJ1Y3QgbmFtZXMgYXQgdGhlIGVuZCBvZiBhIGRvLCBpZiwgc2VsZWN0IG9yIGZvcmFsbAorY29uc3RydWN0LgorCitOb24tZGVmYXVsdCBmb3J0cmFuIGRpYWxlY3RzIH4KK1RoZSBzeW50YXggc2NyaXB0IHN1cHBvcnRzIGZpdmUgRm9ydHJhbiBkaWFsZWN0czogZjk1LCBmOTAsIGY3NywgdGhlIExhaGV5CitzdWJzZXQgZWxmOTAsIGFuZCB0aGUgSW1hZ2luZTEgc3Vic2V0IEYuCisKK0lmIHlvdSB1c2UgZjc3IHdpdGggZXh0ZW5zaW9ucywgZXZlbiBjb21tb24gb25lcyBsaWtlIGRvL2VuZGRvIGxvb3BzLCBkby93aGlsZQorbG9vcHMgYW5kIGZyZWUgc291cmNlIGZvcm0gdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IG1vc3QgZjc3IGNvbXBpbGVycyBpbmNsdWRpbmcKK2c3NyAoR05VIEZvcnRyYW4pLCB0aGVuIHlvdSB3aWxsIHByb2JhYmx5IGZpbmQgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nCitzYXRpc2ZhY3RvcnkuIEhvd2V2ZXIsIGlmIHlvdSB1c2Ugc3RyaWN0IGY3NyB3aXRoIG5vIGV4dGVuc2lvbnMsIG5vdCBldmVuIGZyZWUKK3NvdXJjZSBmb3JtIG9yIHRoZSBNSUwgU1REIDE3NTMgZXh0ZW5zaW9ucywgdGhlbiB0aGUgYWR2YW50YWdlcyBvZiBzZXR0aW5nIHRoZQorZGlhbGVjdCB0byBmNzcgYXJlIHRoYXQgbmFtZXMgc3VjaCBhcyBTVU0gYXJlIHJlY29nbml6ZWQgYXMgdXNlciB2YXJpYWJsZQorbmFtZXMgYW5kIG5vdCBoaWdobGlnaHRlZCBhcyBmOXggaW50cmluc2ljIGZ1bmN0aW9ucywgdGhhdCBvYnNvbGV0ZSBjb25zdHJ1Y3RzCitzdWNoIGFzIEFTU0lHTiBzdGF0ZW1lbnRzIGFyZSBub3QgaGlnaGxpZ2h0ZWQgYXMgdG9kbyBpdGVtcywgYW5kIHRoYXQgZml4ZWQKK3NvdXJjZSBmb3JtIHdpbGwgYmUgYXNzdW1lZC4KKworSWYgeW91IHVzZSBlbGY5MCBvciBGLCB0aGUgYWR2YW50YWdlIG9mIHNldHRpbmcgdGhlIGRpYWxlY3QgYXBwcm9wcmlhdGVseSBpcwordGhhdCBmOTAgZmVhdHVyZXMgZXhjbHVkZWQgZnJvbSB0aGVzZSBkaWFsZWN0cyB3aWxsIGJlIGhpZ2hsaWdodGVkIGFzIHRvZG8KK2l0ZW1zIGFuZCB0aGF0IGZyZWUgc291cmNlIGZvcm0gd2lsbCBiZSBhc3N1bWVkIGFzIHJlcXVpcmVkIGZvciB0aGVzZQorZGlhbGVjdHMuCisKK1RoZSBkaWFsZWN0IGNhbiBiZSBzZWxlY3RlZCBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZSBmb3J0cmFuX2RpYWxlY3QuIFRoZQorcGVybWlzc2libGUgdmFsdWVzIG9mIGZvcnRyYW5fZGlhbGVjdCBhcmUgY2FzZS1zZW5zaXRpdmUgYW5kIG11c3QgYmUgImY5NSIsCisiZjkwIiwgImY3NyIsICJlbGYiIG9yICJGIi4gSW52YWxpZCB2YWx1ZXMgb2YgZm9ydHJhbl9kaWFsZWN0IGFyZSBpZ25vcmVkLgorCitJZiBhbGwgeW91ciBmb3J0cmFuIGZpbGVzIHVzZSB0aGUgc2FtZSBkaWFsZWN0LCBzZXQgZm9ydHJhbl9kaWFsZWN0IGluIHlvdXIKKy52aW1yYyBwcmlvciB0byB5b3VyIHN5bnRheCBvbiBzdGF0ZW1lbnQuIElmIHRoZSBkaWFsZWN0IGRlcGVuZHMgdXBvbiB0aGUgZmlsZQorZXh0ZW5zaW9uLCB0aGVuIGl0IGlzIG1vc3QgY29udmVuaWVudCB0byBzZXQgaXQgaW4gYSBmdHBsdWdpbiBmaWxlLiBGb3IgbW9yZQoraW5mb3JtYXRpb24gb24gZnRwbHVnaW4gZmlsZXMsIHNlZSB8ZnRwbHVnaW58LiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIKK2ZvcnRyYW4gZmlsZXMgd2l0aCBhbiAuZjkwIGV4dGVuc2lvbiBhcmUgd3JpdHRlbiBpbiB0aGUgZWxmIHN1YnNldCwgeW91cgorZnRwbHVnaW4gZmlsZSBzaG91bGQgY29udGFpbiB0aGUgY29kZSA+CisgICAgbGV0IHM6ZXh0Zm5hbWUgPSBleHBhbmQoIiU6ZSIpCisgICAgaWYgczpleHRmbmFtZSA9PT8gImY5MCIKKwlsZXQgZm9ydHJhbl9kaWFsZWN0PSJlbGYiCisgICAgZWxzZQorCXVubGV0ISBmb3J0cmFuX2RpYWxlY3QKKyAgICBlbmRpZgorTm90ZSB0aGF0IHRoaXMgd2lsbCB3b3JrIG9ubHkgaWYgdGhlICJmaWxldHlwZSBwbHVnaW4gaW5kZW50IG9uIiBjb21tYW5kCitwcmVjZWRlcyB0aGUgInN5bnRheCBvbiIgY29tbWFuZCBpbiB5b3VyIC52aW1yYyBmaWxlLgorCitGaW5lciBjb250cm9sIGlzIG5lY2Vzc2FyeSBpZiB0aGUgZmlsZSBleHRlbnNpb24gZG9lcyBub3QgdW5pcXVlbHkgaWRlbnRpZnkKK3RoZSBkaWFsZWN0LiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGRpYWxlY3QsIG9uIGEgZmlsZS1ieS1maWxlIGJhc2lzLCBieQoraW5jbHVkaW5nIGEgY29tbWVudCB3aXRoIHRoZSBkaXJlY3RpdmUgImZvcnRyYW5fZGlhbGVjdD14eCIgKHdoZXJlIHh4PWY3NyBvcgorZWxmIG9yIEYgb3IgZjkwIG9yIGY5NSkgaW4gb25lIG9mIHRoZSBmaXJzdCB0aHJlZSBsaW5lcyBpbiB5b3VyIGZpbGUuIEZvcgorZXhhbXBsZSwgeW91ciBvbGRlciAuZiBmaWxlcyBtYXkgYmUgd3JpdHRlbiBpbiBleHRlbmRlZCBmNzcgYnV0IHlvdXIgbmV3ZXIKK29uZXMgbWF5IGJlIEYgY29kZXMsIGFuZCB5b3Ugd291bGQgaWRlbnRpZnkgdGhlIGxhdHRlciBieSBpbmNsdWRpbmcgaW4gdGhlCitmaXJzdCB0aHJlZSBsaW5lcyBvZiB0aG9zZSBmaWxlcyBhIEZvcnRyYW4gY29tbWVudCBvZiB0aGUgZm9ybSA+CisgICEgZm9ydHJhbl9kaWFsZWN0PUYKK0Ygb3ZlcnJpZGVzIGVsZiBpZiBib3RoIGRpcmVjdGl2ZXMgYXJlIHByZXNlbnQuCisKK0xpbWl0YXRpb25zIH4KK1BhcmVudGhlc2lzIGNoZWNraW5nIGRvZXMgbm90IGNhdGNoIHRvbyBmZXcgY2xvc2luZyBwYXJlbnRoZXNlcy4gSG9sbGVyaXRoCitzdHJpbmdzIGFyZSBub3QgcmVjb2duaXplZC4gU29tZSBrZXl3b3JkcyBtYXkgYmUgaGlnaGxpZ2h0ZWQgaW5jb3JyZWN0bHkKK2JlY2F1c2UgRm9ydHJhbjkwIGhhcyBubyByZXNlcnZlZCB3b3Jkcy4KKworRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBmb3J0cmFuLCBzZWUgfGZvcnRyYW4taW5kZW50fCBhbmQKK3xmb3J0cmFuLXBsdWdpbnwuCisKKworRlZXTSBDT05GSUdVUkFUSU9OIEZJTEVTCQkJKmZ2d20udmltKiAqZnZ3bS1zeW50YXgqCisKK0luIG9yZGVyIGZvciBWaW0gdG8gcmVjb2duaXplIEZ2d20gY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IGRvIG5vdCBtYXRjaAordGhlIHBhdHRlcm5zICpmdndtcmMqIG9yICpmdndtMnJjKiAsIHlvdSBtdXN0IHB1dCBhZGRpdGlvbmFsIHBhdHRlcm5zCithcHByb3ByaWF0ZSB0byB5b3VyIHN5c3RlbSBpbiB5b3VyIG15ZmlsZXR5cGVzLnZpbSBmaWxlLiAgRm9yIHRoZXNlCitwYXR0ZXJucywgeW91IG11c3Qgc2V0IHRoZSB2YXJpYWJsZSAiYjpmdndtX3ZlcnNpb24iIHRvIHRoZSBtYWpvciB2ZXJzaW9uCitudW1iZXIgb2YgRnZ3bSwgYW5kIHRoZSAnZmlsZXR5cGUnIG9wdGlvbiB0byBmdndtLgorCitGb3IgZXhhbXBsZSwgdG8gbWFrZSBWaW0gaWRlbnRpZnkgYWxsIGZpbGVzIGluIC9ldGMvWDExL2Z2d20yLworYXMgRnZ3bTIgY29uZmlndXJhdGlvbiBmaWxlcywgYWRkIHRoZSBmb2xsb3dpbmc6ID4KKworICA6YXUhIEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL1gxMS9mdndtMi8qICBsZXQgYjpmdndtX3ZlcnNpb24gPSAyIHwKKwkJCQkJIFwgc2V0IGZpbGV0eXBlPWZ2d20KKworSWYgeW91J2QgbGlrZSBWaW0gdG8gaGlnaGxpZ2h0IGFsbCB2YWxpZCBjb2xvciBuYW1lcywgdGVsbCBpdCB3aGVyZSB0bworZmluZCB0aGUgY29sb3IgZGF0YWJhc2UgKHJnYi50eHQpIG9uIHlvdXIgc3lzdGVtLiAgRG8gdGhpcyBieSBzZXR0aW5nCisicmdiX2ZpbGUiIHRvIGl0cyBsb2NhdGlvbi4gIEFzc3VtaW5nIHlvdXIgY29sb3IgZGF0YWJhc2UgaXMgbG9jYXRlZAoraW4gL3Vzci9YMTEvbGliL1gxMS8sIHlvdSBzaG91bGQgYWRkIHRoZSBsaW5lID4KKworCTpsZXQgcmdiX2ZpbGUgPSAiL3Vzci9YMTEvbGliL1gxMS9yZ2IudHh0IgorCit0byB5b3VyIC52aW1yYyBmaWxlLgorCisKK0dTUAkJCQkJCQkqZ3NwLnZpbSoKKworVGhlIGRlZmF1bHQgY29sb3Jpbmcgc3R5bGUgZm9yIEdTUCBwYWdlcyBpcyBkZWZpbmVkIGJ5IHxodG1sLnZpbXwsIGFuZAordGhlIGNvbG9yaW5nIGZvciBqYXZhIGNvZGUgKHdpdGhpbiBqYXZhIHRhZ3Mgb3IgaW5saW5lIGJldHdlZW4gYmFja3RpY2tzKQoraXMgZGVmaW5lZCBieSB8amF2YS52aW18LiAgVGhlIGZvbGxvd2luZyBIVE1MIGdyb3VwcyBkZWZpbmVkIGluIHxodG1sLnZpbXwKK2FyZSByZWRlZmluZWQgdG8gaW5jb3Jwb3JhdGUgYW5kIGhpZ2hsaWdodCBpbmxpbmUgamF2YSBjb2RlOgorCisgICAgaHRtbFN0cmluZworICAgIGh0bWxWYWx1ZQorICAgIGh0bWxFbmRUYWcKKyAgICBodG1sVGFnCisgICAgaHRtbFRhZ04KKworSGlnaGxpZ2h0aW5nIHNob3VsZCBsb29rIGZpbmUgbW9zdCBvZiB0aGUgcGxhY2VzIHdoZXJlIHlvdSdkIHNlZSBpbmxpbmUKK2phdmEgY29kZSwgYnV0IGluIHNvbWUgc3BlY2lhbCBjYXNlcyBpdCBtYXkgbm90LiAgVG8gYWRkIGFub3RoZXIgSFRNTAorZ3JvdXAgd2hlcmUgeW91IHdpbGwgaGF2ZSBpbmxpbmUgamF2YSBjb2RlIHdoZXJlIGl0IGRvZXMgbm90IGhpZ2hsaWdodAorY29ycmVjdGx5LCBqdXN0IGNvcHkgdGhlIGxpbmUgeW91IHdhbnQgZnJvbSB8aHRtbC52aW18IGFuZCBhZGQgZ3NwSmF2YQordG8gdGhlIGNvbnRhaW5zIGNsYXVzZS4KKworVGhlIGJhY2t0aWNrcyBmb3IgaW5saW5lIGphdmEgYXJlIGhpZ2hsaWdodGVkIGFjY29yZGluZyB0byB0aGUgaHRtbEVycm9yCitncm91cCB0byBtYWtlIHRoZW0gZWFzaWVyIHRvIHNlZS4KKworCitHUk9GRgkJCQkJCSpncm9mZi52aW0qICpncm9mZi1zeW50YXgqCisKK1RoZSBncm9mZiBzeW50YXggZmlsZSBpcyBhIHdyYXBwZXIgZm9yIHxucm9mZi52aW18LCBzZWUgdGhlIG5vdGVzCit1bmRlciB0aGF0IGhlYWRpbmcgZm9yIGV4YW1wbGVzIG9mIHVzZSBhbmQgY29uZmlndXJhdGlvbi4gVGhlIHB1cnBvc2UKK29mIHRoaXMgd3JhcHBlciBpcyB0byBzZXQgdXAgZ3JvZmYgc3ludGF4IGV4dGVuc2lvbnMgYnkgc2V0dGluZyB0aGUKK2ZpbGV0eXBlIGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIGEgcGVyc29uYWwgZmlsZXR5cGUgZGVmaW5pdGlvbnMgZmlsZQorKHNlZSB8ZmlsZXR5cGUudHh0fCkuCisKKworSEFTS0VMTAkJCSAgICAgKmhhc2tlbGwudmltKiAqbGhhc2tlbGwudmltKiAqaGFza2VsbC1zeW50YXgqCisKK1RoZSBIYXNrZWxsIHN5bnRheCBmaWxlcyBzdXBwb3J0IHBsYWluIEhhc2tlbGwgY29kZSBhcyB3ZWxsIGFzIGxpdGVyYXRlCitIYXNrZWxsIGNvZGUsIHRoZSBsYXR0ZXIgaW4gYm90aCBCaXJkIHN0eWxlIGFuZCBUZVggc3R5bGUuIFRoZSBIYXNrZWxsCitzeW50YXggaGlnaGxpZ2h0aW5nIHdpbGwgYWxzbyBoaWdobGlnaHQgQyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKworSWYgeW91IHdhbnQgdG8gaGlnaGxpZ2h0IGRlbGltaXRlciBjaGFyYWN0ZXJzICh1c2VmdWwgaWYgeW91IGhhdmUgYQorbGlnaHQtY29sb3VyZWQgYmFja2dyb3VuZCksIGFkZCB0byB5b3VyIC52aW1yYzogPgorCTpsZXQgaHNfaGlnaGxpZ2h0X2RlbGltaXRlcnMgPSAxCitUbyB0cmVhdCBUcnVlIGFuZCBGYWxzZSBhcyBrZXl3b3JkcyBhcyBvcHBvc2VkIHRvIG9yZGluYXJ5IGlkZW50aWZpZXJzLAorYWRkOiA+CisJOmxldCBoc19oaWdobGlnaHRfYm9vbGVhbiA9IDEKK1RvIGFsc28gdHJlYXQgdGhlIG5hbWVzIG9mIHByaW1pdGl2ZSB0eXBlcyBhcyBrZXl3b3JkczogPgorCTpsZXQgaHNfaGlnaGxpZ2h0X3R5cGVzID0gMQorQW5kIHRvIHRyZWF0IHRoZSBuYW1lcyBvZiBldmVuIG1vcmUgcmVsYXRpdmVseSBjb21tb24gdHlwZXMgYXMga2V5d29yZHM6ID4KKwk6bGV0IGhzX2hpZ2hsaWdodF9tb3JlX3R5cGVzID0gMQorSWYgeW91IHdhbnQgdG8gaGlnaGxpZ2h0IHRoZSBuYW1lcyBvZiBkZWJ1Z2dpbmcgZnVuY3Rpb25zLCBwdXQgaW4KK3lvdXIgLnZpbXJjOiA+CisJOmxldCBoc19oaWdobGlnaHRfZGVidWcgPSAxCisKK1RoZSBIYXNrZWxsIHN5bnRheCBoaWdobGlnaHRpbmcgYWxzbyBoaWdobGlnaHRzIEMgcHJlcHJvY2Vzc29yCitkaXJlY3RpdmVzLCBhbmQgZmxhZ3MgbGluZXMgdGhhdCBzdGFydCB3aXRoICMgYnV0IGFyZSBub3QgdmFsaWQKK2RpcmVjdGl2ZXMgYXMgZXJyb25lb3VzLiBUaGlzIGludGVyZmVyZXMgd2l0aCBIYXNrZWxsJ3Mgc3ludGF4IGZvcgorb3BlcmF0b3JzLCBhcyB0aGV5IG1heSBzdGFydCB3aXRoICMuIElmIHlvdSB3YW50IHRvIGhpZ2hsaWdodCB0aG9zZQorYXMgb3BlcmF0b3JzIGFzIG9wcG9zZWQgdG8gZXJyb3JzLCBwdXQgaW4geW91ciAudmltcmM6ID4KKwk6bGV0IGhzX2FsbG93X2hhc2hfb3BlcmF0b3IgPSAxCisKK1RoZSBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciBsaXRlcmF0ZSBIYXNrZWxsIGNvZGUgd2lsbCB0cnkgdG8KK2F1dG9tYXRpY2FsbHkgZ3Vlc3Mgd2hldGhlciB5b3VyIGxpdGVyYXRlIEhhc2tlbGwgY29kZSBjb250YWlucworVGVYIG1hcmt1cCBvciBub3QsIGFuZCBjb3JyZXNwb25kaW5nbHkgaGlnaGxpZ2h0IFRlWCBjb25zdHJ1Y3RzCitvciBub3RoaW5nIGF0IGFsbC4gWW91IGNhbiBvdmVycmlkZSB0aGlzIGdsb2JhbGx5IGJ5IHB1dHRpbmcKK2luIHlvdXIgLnZpbXJjID4KKwk6bGV0IGxoc19tYXJrdXAgPSBub25lCitmb3Igbm8gaGlnaGxpZ2h0aW5nIGF0IGFsbCwgb3IgPgorCTpsZXQgbGhzX21hcmt1cCA9IHRleAordG8gZm9yY2UgdGhlIGhpZ2hsaWdodGluZyB0byBhbHdheXMgdHJ5IHRvIGhpZ2hsaWdodCBUZVggbWFya3VwLgorRm9yIG1vcmUgZmxleGliaWxpdHksIHlvdSBtYXkgYWxzbyB1c2UgYnVmZmVyIGxvY2FsIHZlcnNpb25zIG9mCit0aGlzIHZhcmlhYmxlLCBzbyBlLmcuID4KKwk6bGV0IGI6bGhzX21hcmt1cCA9IHRleAord2lsbCBmb3JjZSBUZVggaGlnaGxpZ2h0aW5nIGZvciBhIHBhcnRpY3VsYXIgYnVmZmVyLiBJdCBoYXMgdG8gYmUKK3NldCBiZWZvcmUgdHVybmluZyBzeW50YXggaGlnaGxpZ2h0aW5nIG9uIGZvciB0aGUgYnVmZmVyIG9yCitsb2FkaW5nIGEgZmlsZS4KKworCitIVE1MCQkJCQkJKmh0bWwudmltKiAqaHRtbC1zeW50YXgqCisKK1RoZSBjb2xvcmluZyBzY2hlbWUgZm9yIHRhZ3MgaW4gdGhlIEhUTUwgZmlsZSB3b3JrcyBhcyBmb2xsb3dzLgorCitUaGUgIDw+IG9mIG9wZW5pbmcgdGFncyBhcmUgY29sb3JlZCBkaWZmZXJlbnRseSB0aGFuIHRoZSA8Lz4gb2YgYSBjbG9zaW5nIHRhZy4KK1RoaXMgaXMgb24gcHVycG9zZSEgRm9yIG9wZW5pbmcgdGFncyB0aGUgJ0Z1bmN0aW9uJyBjb2xvciBpcyB1c2VkLCB3aGlsZSBmb3IKK2Nsb3NpbmcgdGFncyB0aGUgJ1R5cGUnIGNvbG9yIGlzIHVzZWQgKFNlZSBzeW50YXgudmltIHRvIGNoZWNrIGhvdyB0aG9zZSBhcmUKK2RlZmluZWQgZm9yIHlvdSkKKworS25vd24gdGFnIG5hbWVzIGFyZSBjb2xvcmVkIHRoZSBzYW1lIHdheSBhcyBzdGF0ZW1lbnRzIGluIEMuICBVbmtub3duIHRhZworbmFtZXMgYXJlIGNvbG9yZWQgd2l0aCB0aGUgc2FtZSBjb2xvciBhcyB0aGUgPD4gb3IgPC8+IHJlc3BlY3RpdmVseSB3aGljaAorbWFrZXMgaXQgZWFzeSB0byBzcG90IGVycm9ycworCitOb3RlIHRoYXQgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYXJndW1lbnQgKG9yIGF0dHJpYnV0ZSkgbmFtZXMuIEtub3duIGF0dHJpYnV0ZQorbmFtZXMgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkgdGhhbiB1bmtub3duIG9uZXMuCisKK1NvbWUgSFRNTCB0YWdzIGFyZSB1c2VkIHRvIGNoYW5nZSB0aGUgcmVuZGVyaW5nIG9mIHRleHQuIFRoZSBmb2xsb3dpbmcgdGFncworYXJlIHJlY29nbml6ZWQgYnkgdGhlIGh0bWwudmltIHN5bnRheCBjb2xvcmluZyBmaWxlIGFuZCBjaGFuZ2UgdGhlIHdheSBub3JtYWwKK3RleHQgaXMgc2hvd246IDxCPiA8ST4gPFU+IDxFTT4gPFNUUk9ORz4gKDxFTT4gaXMgdXNlZCBhcyBhbiBhbGlhcyBmb3IgPEk+LAord2hpbGUgPFNUUk9ORz4gYXMgYW4gYWxpYXMgZm9yIDxCPiksIDxIMT4gLSA8SDY+LCA8SEVBRD4sIDxUSVRMRT4gYW5kIDxBPiwgYnV0Citvbmx5IGlmIHVzZWQgYXMgYSBsaW5rIHRoYXQgaXMsIGl0IG11c3QgaW5jbHVkZSBhIGhyZWYgYXMgaW4KKzxBIGhyZWY9InNvbWZpbGUuaHRtbCI+KS4KKworSWYgeW91IHdhbnQgdG8gY2hhbmdlIGhvdyBzdWNoIHRleHQgaXMgcmVuZGVyZWQsIHlvdSBtdXN0IHJlZGVmaW5lIHRoZQorZm9sbG93aW5nIHN5bnRheCBncm91cHM6CisKKyAgICAtIGh0bWxCb2xkCisgICAgLSBodG1sQm9sZFVuZGVybGluZQorICAgIC0gaHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMKKyAgICAtIGh0bWxVbmRlcmxpbmUKKyAgICAtIGh0bWxVbmRlcmxpbmVJdGFsaWMKKyAgICAtIGh0bWxJdGFsaWMKKyAgICAtIGh0bWxUaXRsZSBmb3IgdGl0bGVzCisgICAgLSBodG1sSDEgLSBodG1sSDYgZm9yIGhlYWRpbmdzCisKK1RvIG1ha2UgdGhpcyByZWRlZmluaXRpb24gd29yayB5b3UgbXVzdCByZWRlZmluZSB0aGVtIGFsbCB3aXRoIHRoZSBleGNlcHRpb24KK29mIHRoZSBsYXN0IHR3byAoaHRtbFRpdGxlIGFuZCBodG1sSFsxLTZdLCB3aGljaCBhcmUgb3B0aW9uYWwpIGFuZCBkZWZpbmUgdGhlCitmb2xsb3dpbmcgdmFyaWFibGUgaW4geW91ciB2aW1yYyAodGhpcyBpcyBkdWUgdG8gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmaWxlcworYXJlIHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSA+CisJOmxldCBodG1sX215X3JlbmRlcmluZz0xCisKK0lmIHlvdSdkIGxpa2UgdG8gc2VlIGFuIGV4YW1wbGUgZG93bmxvYWQgbXlzeW50YXgudmltIGF0CitodHRwOi8vd3d3LmZsZWluZXIuY29tL3ZpbS9kb3dubG9hZC5odG1sCisKK1lvdSBjYW4gYWxzbyBkaXNhYmxlIHRoaXMgcmVuZGVyaW5nIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91cgordmltcmMgZmlsZTogPgorCTpsZXQgaHRtbF9ub19yZW5kZXJpbmc9MQorCitIVE1MIGNvbW1lbnRzIGFyZSByYXRoZXIgc3BlY2lhbCAoc2VlIGFuIEhUTUwgcmVmZXJlbmNlIGRvY3VtZW50IGZvciB0aGUKK2RldGFpbHMpLCBhbmQgdGhlIHN5bnRheCBjb2xvcmluZyBzY2hlbWUgd2lsbCBoaWdobGlnaHQgYWxsIGVycm9ycy4KK0hvd2V2ZXIsIGlmIHlvdSBwcmVmZXIgdG8gdXNlIHRoZSB3cm9uZyBzdHlsZSAoc3RhcnRzIHdpdGggPCEtLSBhbmQKK2VuZHMgd2l0aCAtLSE+KSB5b3UgY2FuIGRlZmluZSA+CisJOmxldCBodG1sX3dyb25nX2NvbW1lbnRzPTEKKworSmF2YVNjcmlwdCBhbmQgVmlzdWFsIEJhc2ljIGVtYmVkZGVkIGluc2lkZSBIVE1MIGRvY3VtZW50cyBhcmUgaGlnaGxpZ2h0ZWQgYXMKKydTcGVjaWFsJyB3aXRoIHN0YXRlbWVudHMsIGNvbW1lbnRzLCBzdHJpbmdzIGFuZCBzbyBvbiBjb2xvcmVkIGFzIGluIHN0YW5kYXJkCitwcm9ncmFtbWluZyBsYW5ndWFnZXMuIE5vdGUgdGhhdCBvbmx5IEphdmFTY3JpcHQgYW5kIFZpc3VhbCBCYXNpYyBhcmUgY3VycmVudGx5CitzdXBwb3J0ZWQsIG5vIG90aGVyIHNjcmlwdGluZyBsYW5ndWFnZSBoYXMgYmVlbiBhZGRlZCB5ZXQuCisKK0VtYmVkZGVkIGFuZCBpbmxpbmVkIGNhc2NhZGluZyBzdHlsZSBzaGVldHMgKENTUykgYXJlIGhpZ2hsaWdodGVkIHRvby4KKworVGhlcmUgYXJlIHNldmVyYWwgaHRtbCBwcmVwcm9jZXNzb3IgbGFuZ3VhZ2VzIG91dCB0aGVyZS4gaHRtbC52aW0gaGFzIGJlZW4KK3dyaXR0ZW4gc3VjaCB0aGF0IGl0IHNob3VsZCBiZSB0cml2aWFsIHRvIGluY2x1ZGUgaXQuIFRvIGRvIHNvIGFkZCB0aGUKK2ZvbGxvd2luZyB0d28gbGluZXMgdG8gdGhlIHN5bnRheCBjb2xvcmluZyBmaWxlIGZvciB0aGF0IGxhbmd1YWdlCisodGhlIGV4YW1wbGUgY29tZXMgZnJvbSB0aGUgYXNwLnZpbSBmaWxlKToKKworICAgIHJ1bnRpbWUhIHN5bnRheC9odG1sLnZpbQorICAgIHN5biBjbHVzdGVyIGh0bWxQcmVwcm9jIGFkZD1hc3AKKworTm93IHlvdSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGFkZCBhbGwgcmVnaW9ucyB0aGF0IGNvbnRhaW4KK3RoZSBwcmVwcm9jZXNzb3IgbGFuZ3VhZ2UgdG8gdGhlIGNsdXN0ZXIgaHRtbFByZXByb2MuCisKKworSFRNTC9PUyAoYnkgQWVzdGl2YSkJCQkJKmh0bWxvcy52aW0qICpodG1sb3Mtc3ludGF4KgorCitUaGUgY29sb3Jpbmcgc2NoZW1lIGZvciBIVE1ML09TIHdvcmtzIGFzIGZvbGxvd3M6CisKK0Z1bmN0aW9ucyBhbmQgdmFyaWFibGUgbmFtZXMgYXJlIHRoZSBzYW1lIGNvbG9yIGJ5IGRlZmF1bHQsIGJlY2F1c2UgVklNCitkb2Vzbid0IHNwZWNpZnkgZGlmZmVyZW50IGNvbG9ycyBmb3IgRnVuY3Rpb25zIGFuZCBJZGVudGlmaWVycy4gIFRvIGNoYW5nZQordGhpcyAod2hpY2ggaXMgcmVjb21tZW5kZWQgaWYgeW91IHdhbnQgZnVuY3Rpb24gbmFtZXMgdG8gYmUgcmVjb2duaXphYmxlIGluIGEKK2RpZmZlcmVudCBjb2xvcikgeW91IG5lZWQgdG8gYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byBlaXRoZXIgeW91ciB+Ly52aW1yYzogPgorICA6aGkgRnVuY3Rpb24gdGVybT11bmRlcmxpbmUgY3Rlcm09Ym9sZCBjdGVybWZnPUxpZ2h0R3JheQorCitPZiBjb3Vyc2UsIHRoZSBjdGVybWZnIGNhbiBiZSBhIGRpZmZlcmVudCBjb2xvciBpZiB5b3UgY2hvb3NlLgorCitBbm90aGVyIGlzc3VlcyB0aGF0IEhUTUwvT1MgcnVucyBpbnRvIGlzIHRoYXQgdGhlcmUgaXMgbm8gc3BlY2lhbCBmaWxldHlwZSB0bworc2lnbmlmeSB0aGF0IGl0IGlzIGEgZmlsZSB3aXRoIEhUTUwvT1MgY29kaW5nLglZb3UgY2FuIGNoYW5nZSB0aGlzIGJ5IG9wZW5pbmcKK2EgZmlsZSBhbmQgdHVybmluZyBvbiBIVE1ML09TIHN5bnRheCBieSBkb2luZyB0aGUgZm9sbG93aW5nOiA+CisgIDpzZXQgc3ludGF4PWh0bWxvcworCitMYXN0bHksIGl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJhY3RlcnMgdG8gYmVnaW4gYQorYmxvY2sgb2YgSFRNTC9PUyBjb2RlIGNhbiBlaXRoZXIgYmUgPDwgb3IgW1sgYW5kID4+IG9yIF1dLCByZXNwZWN0aXZlbHkuCisKKworSUE2NAkJCQkqaWE2NC52aW0qICppbnRlbC1pdGFuaXVtKiAqaWE2NC1zeW50YXgqCisKK0hpZ2hsaWdodGluZyBmb3IgdGhlIEludGVsIEl0YW5pdW0gNjQgYXNzZW1ibHkgbGFuZ3VhZ2UuICBTZWUgfGFzbS52aW18IGZvcgoraG93IHRvIHJlY29nbml6ZSB0aGlzIGZpbGV0eXBlLgorCitUbyBoYXZlICouaW5jIGZpbGVzIGJlIHJlY29nbml6ZWQgYXMgSUE2NCwgYWRkIHRoaXMgdG8geW91ciAudmltcmMgZmlsZTogPgorCTpsZXQgZzpmaWxldHlwZV9pbmMgPSAiaWE2NCIKKworCitJTkZPUk0JCQkJCQkqaW5mb3JtLnZpbSogKmluZm9ybS1zeW50YXgqCisKK0luZm9ybSBoaWdobGlnaHRpbmcgaW5jbHVkZXMgc3ltYm9scyBwcm92aWRlZCBieSB0aGUgSW5mb3JtIExpYnJhcnksIGFzCittb3N0IHByb2dyYW1zIG1ha2UgZXh0ZW5zaXZlIHVzZSBvZiBpdC4gIElmIGRvIG5vdCB3aXNoIExpYnJhcnkgc3ltYm9scwordG8gYmUgaGlnaGxpZ2h0ZWQgYWRkIHRoaXMgdG8geW91ciB2aW0gc3RhcnR1cDogPgorCTpsZXQgaW5mb3JtX2hpZ2hsaWdodF9zaW1wbGU9MQorCitCeSBkZWZhdWx0IGl0IGlzIGFzc3VtZWQgdGhhdCBJbmZvcm0gcHJvZ3JhbXMgYXJlIFotbWFjaGluZSB0YXJnZXRlZCwKK2FuZCBoaWdobGlnaHRzIFotbWFjaGluZSBhc3NlbWJseSBsYW5ndWFnZSBzeW1ib2xzIGFwcHJvcHJpYXRlbHkuICBJZgoreW91IGludGVuZCB5b3VyIHByb2dyYW0gdG8gYmUgdGFyZ2V0ZWQgdG8gYSBHbHVseC9HbGsgZW52aXJvbm1lbnQgeW91CituZWVkIHRvIGFkZCB0aGlzIHRvIHlvdXIgc3RhcnR1cCBzZXF1ZW5jZTogPgorCTpsZXQgaW5mb3JtX2hpZ2hsaWdodF9nbHVseD0xCisKK1RoaXMgd2lsbCBoaWdobGlnaHQgR2x1bHggb3Bjb2RlcyBpbnN0ZWFkLCBhbmQgYWxzbyBhZGRzIGdsaygpIHRvIHRoZQorc2V0IG9mIGhpZ2hsaWdodGVkIHN5c3RlbSBmdW5jdGlvbnMuCisKK1RoZSBJbmZvcm0gY29tcGlsZXIgd2lsbCBmbGFnIGNlcnRhaW4gb2Jzb2xldGUga2V5d29yZHMgYXMgZXJyb3JzIHdoZW4KK2l0IGVuY291bnRlcnMgdGhlbS4gIFRoZXNlIGtleXdvcmRzIGFyZSBub3JtYWxseSBoaWdobGlnaHRlZCBhcyBlcnJvcnMKK2J5IFZpbS4gIFRvIHByZXZlbnQgc3VjaCBlcnJvciBoaWdobGlnaHRpbmcsIHlvdSBtdXN0IGFkZCB0aGlzIHRvIHlvdXIKK3N0YXJ0dXAgc2VxdWVuY2U6ID4KKwk6bGV0IGluZm9ybV9zdXBwcmVzc19vYnNvbGV0ZT0xCisKK0J5IGRlZmF1bHQsIHRoZSBsYW5ndWFnZSBmZWF0dXJlcyBoaWdobGlnaHRlZCBjb25mb3JtIHRvIENvbXBpbGVyCit2ZXJzaW9uIDYuMzAgYW5kIExpYnJhcnkgdmVyc2lvbiA2LjExLiAgSWYgeW91IGFyZSB1c2luZyBhbiBvbGRlcgorSW5mb3JtIGRldmVsb3BtZW50IGVudmlyb25tZW50LCB5b3UgbWF5IHdpdGggdG8gYWRkIHRoaXMgdG8geW91cgorc3RhcnR1cCBzZXF1ZW5jZTogPgorCTpsZXQgaW5mb3JtX2hpZ2hsaWdodF9vbGQ9MQorCisKK0pBVkEJCQkJCQkqamF2YS52aW0qICpqYXZhLXN5bnRheCoKKworVGhlIGphdmEudmltIHN5bnRheCBoaWdobGlnaHRpbmcgZmlsZSBvZmZlcnMgc2V2ZXJhbCBvcHRpb25zOgorCitJbiBKYXZhIDEuMC4yIGl0IHdhcyBuZXZlciBwb3NzaWJsZSB0byBoYXZlIGJyYWNlcyBpbnNpZGUgcGFyZW5zLCBzbyB0aGlzIHdhcworZmxhZ2dlZCBhcyBhbiBlcnJvci4gIFNpbmNlIEphdmEgMS4xIHRoaXMgaXMgcG9zc2libGUgKHdpdGggYW5vbnltb3VzCitjbGFzc2VzKSwgYW5kIHRoZXJlZm9yZSBpcyBubyBsb25nZXIgbWFya2VkIGFzIGFuIGVycm9yLiBJZiB5b3UgcHJlZmVyIHRoZSBvbGQKK3dheSwgcHV0IHRoZSBmb2xsb3dpbmcgbGluZSBpbnRvIHlvdXIgdmltIHN0YXJ0dXAgZmlsZTogPgorCTpsZXQgamF2YV9tYXJrX2JyYWNlc19pbl9wYXJlbnNfYXNfZXJyb3JzPTEKKworQWxsIGlkZW50aWZpZXJzIGluIGphdmEubGFuZy4qIGFyZSBhbHdheXMgdmlzaWJsZSBpbiBhbGwgY2xhc3Nlcy4gIFRvCitoaWdobGlnaHQgdGhlbSB1c2U6ID4KKwk6bGV0IGphdmFfaGlnaGxpZ2h0X2phdmFfbGFuZ19pZHM9MQorCitZb3UgY2FuIGFsc28gaGlnaGxpZ2h0IGlkZW50aWZpZXJzIG9mIG1vc3Qgc3RhbmRhcmQgamF2YSBwYWNrYWdlcyBpZiB5b3UKK2Rvd25sb2FkIHRoZSBqYXZhaWQudmltIHNjcmlwdCBhdCBodHRwOi8vd3d3LmZsZWluZXIuY29tL3ZpbS9kb3dubG9hZC5odG1sLgorSWYgeW91IHByZWZlciB0byBvbmx5IGhpZ2hsaWdodCBpZGVudGlmaWVycyBvZiBhIGNlcnRhaW4gcGFja2FnZSwgc2F5IGphdmEuaW8KK3VzZSB0aGUgZm9sbG93aW5nOiA+CisJOmxldCBqYXZhX2hpZ2hsaWdodF9qYXZhX2lvPTEKK0NoZWNrIHRoZSBqYXZhaWQudmltIGZpbGUgZm9yIGEgbGlzdCBvZiBhbGwgdGhlIHBhY2thZ2VzIHRoYXQgYXJlIHN1cHBvcnRlZC4KKworRnVuY3Rpb24gbmFtZXMgYXJlIG5vdCBoaWdobGlnaHRlZCwgYXMgdGhlIHdheSB0byBmaW5kIGZ1bmN0aW9ucyBkZXBlbmRzIG9uCitob3cgeW91IHdyaXRlIGphdmEgY29kZS4gIFRoZSBzeW50YXggZmlsZSBrbm93cyB0d28gcG9zc2libGUgd2F5cyB0byBoaWdobGlnaHQKK2Z1bmN0aW9uczoKKworSWYgeW91IHdyaXRlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0aGF0IGFyZSBhbHdheXMgaW5kZW50ZWQgYnkgZWl0aGVyCithIHRhYiwgOCBzcGFjZXMgb3IgMiBzcGFjZXMgeW91IG1heSB3YW50IHRvIHNldCA+CisJOmxldCBqYXZhX2hpZ2hsaWdodF9mdW5jdGlvbnM9ImluZGVudCIKK0hvd2V2ZXIsIGlmIHlvdSBmb2xsb3cgdGhlIEphdmEgZ3VpZGVsaW5lcyBhYm91dCBob3cgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGFyZQorc3VwcG9zZWQgdG8gYmUgbmFtZWQgKHdpdGggcmVzcGVjdCB0byB1cHBlciBhbmQgbG93ZXJjYXNlKSwgdXNlID4KKwk6bGV0IGphdmFfaGlnaGxpZ2h0X2Z1bmN0aW9ucz0ic3R5bGUiCitJZiBib3RoIG9wdGlvbnMgZG8gbm90IHdvcmsgZm9yIHlvdSwgYnV0IHlvdSB3b3VsZCBzdGlsbCB3YW50IGZ1bmN0aW9uCitkZWNsYXJhdGlvbnMgdG8gYmUgaGlnaGxpZ2h0ZWQgY3JlYXRlIHlvdXIgb3duIGRlZmluaXRpb25zIGJ5IGNoYW5naW5nIHRoZQorZGVmaW5pdGlvbnMgaW4gamF2YS52aW0gb3IgYnkgY3JlYXRpbmcgeW91ciBvd24gamF2YS52aW0gd2hpY2ggaW5jbHVkZXMgdGhlCitvcmlnaW5hbCBvbmUgYW5kIHRoZW4gYWRkcyB0aGUgY29kZSB0byBoaWdobGlnaHQgZnVuY3Rpb25zLgorCitJbiBqYXZhIDEuMSB0aGUgZnVuY3Rpb25zIFN5c3RlbS5vdXQucHJpbnRsbigpIGFuZCBTeXN0ZW0uZXJyLnByaW50bG4oKSBzaG91bGQKK29ubHkgYmUgdXNlZCBmb3IgZGVidWdnaW5nLiBUaGVyZWZvciBpdCBpcyBwb3NzaWJsZSB0byBoaWdobGlnaHQgZGVidWdnaW5nCitzdGF0ZW1lbnRzIGRpZmZlcmVudGx5LiBUbyBkbyB0aGlzIHlvdSBtdXN0IGFkZCB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24gaW4KK3lvdXIgc3RhcnR1cCBmaWxlOiA+CisJOmxldCBqYXZhX2hpZ2hsaWdodF9kZWJ1Zz0xCitUaGUgcmVzdWx0IHdpbGwgYmUgdGhhdCB0aG9zZSBzdGF0ZW1lbnRzIGFyZSBoaWdobGlnaHRlZCBhcyAnU3BlY2lhbCcKK2NoYXJhY3RlcnMuIElmIHlvdSBwcmVmZXIgdG8gaGF2ZSB0aGVtIGhpZ2hsaWdodGVkIGRpZmZlcmVudGx5IHlvdSBtdXN0IGRlZmluZQorbmV3IGhpZ2hsaWdodGluZ3MgZm9yIHRoZSBmb2xsb3dpbmcgZ3JvdXBzLjoKKyAgICBEZWJ1ZywgRGVidWdTcGVjaWFsLCBEZWJ1Z1N0cmluZywgRGVidWdCb29sZWFuLCBEZWJ1Z1R5cGUKK3doaWNoIGFyZSB1c2VkIGZvciB0aGUgc3RhdGVtZW50IGl0c2VsZiwgc3BlY2lhbCBjaGFyYWN0ZXJzIHVzZWQgaW4gZGVidWcKK3N0cmluZ3MsIHN0cmluZ3MsIGJvb2xlYW4gY29uc3RhbnRzIGFuZCB0eXBlcyAodGhpcywgc3VwZXIpIHJlc3BlY3RpdmVseS4gSQoraGF2ZSBvcHRlZCB0byBjaG9zZSBhbm90aGVyIGJhY2tncm91bmQgZm9yIHRob3NlIHN0YXRlbWVudHMuCisKK0luIG9yZGVyIHRvIGhlbHAgeW91IHRvIHdyaXRlIGNvZGUgdGhhdCBjYW4gYmUgZWFzaWx5IHBvcnRlZCBiZXR3ZWVuCitqYXZhIGFuZCBDKyssIGFsbCBDKysga2V5d29yZHMgYXJlIG1hcmtlZCBhcyBlcnJvciBpbiBhIGphdmEgcHJvZ3JhbS4KK0hvd2V2ZXIsIGlmIHlvdSB1c2UgdGhlbSByZWd1bGFybHksIHlvdSBtYXkgd2FudCB0byBkZWZpbmUgdGhlIGZvbGxvd2luZwordmFyaWFibGUgaW4geW91ciAudmltcmMgZmlsZTogPgorCTpsZXQgamF2YV9hbGxvd19jcHBfa2V5d29yZHM9MQorCitKYXZhZG9jIGlzIGEgcHJvZ3JhbSB0aGF0IHRha2VzIHNwZWNpYWwgY29tbWVudHMgb3V0IG9mIGphdmEgcHJvZ3JhbSBmaWxlcyBhbmQKK2NyZWF0ZXMgSFRNTCBwYWdlcy4gVGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gd2lsbCBoaWdobGlnaHQgdGhpcyBIVE1MIGNvZGUKK3NpbWlsYXJseSB0byBIVE1MIGZpbGVzIChzZWUgfGh0bWwudmltfCkuIFlvdSBjYW4gZXZlbiBhZGQgamF2YXNjcmlwdAorYW5kIENTUyBpbnNpZGUgdGhpcyBjb2RlIChzZWUgYmVsb3cpLiBUaGVyZSBhcmUgZm91ciBkaWZmZXJlbmNlcyBob3dldmVyOgorICAxLiBUaGUgdGl0bGUgKGFsbCBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBmaXJzdCAnLicgd2hpY2ggaXMgZm9sbG93ZWQgYnkKKyAgICAgc29tZSB3aGl0ZSBzcGFjZSBvciB1cCB0byB0aGUgZmlyc3QgJ0AnKSBpcyBjb2xvcmVkIGRpZmZlcmVudGx5ICh0byBjaGFuZ2UKKyAgICAgdGhlIGNvbG9yIGNoYW5nZSB0aGUgZ3JvdXAgQ29tbWVudFRpdGxlKS4KKyAgMi4gVGhlIHRleHQgaXMgY29sb3JlZCBhcyAnQ29tbWVudCcuCisgIDMuIEhUTUwgY29tbWVudHMgYXJlIGNvbG9yZWQgYXMgJ1NwZWNpYWwnCisgIDQuIFRoZSBzcGVjaWFsIGphdmFkb2MgdGFncyAoQHNlZSwgQHBhcmFtLCAuLi4pIGFyZSBoaWdobGlnaHRlZCBhcyBzcGVjaWFscworICAgICBhbmQgdGhlIGFyZ3VtZW50IChmb3IgQHNlZSwgQHBhcmFtLCBAZXhjZXB0aW9uKSBhcyBGdW5jdGlvbi4KK1RvIHR1cm4gdGhpcyBmZWF0dXJlIG9mZiBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgc3RhcnR1cCBmaWxlOiA+CisJOmxldCBqYXZhX2lnbm9yZV9qYXZhZG9jPTEKKworSWYgeW91IHVzZSB0aGUgc3BlY2lhbCBqYXZhZG9jIGNvbW1lbnQgaGlnaGxpZ2h0aW5nIGRlc2NyaWJlZCBhYm92ZSB5b3UKK2NhbiBhbHNvIHR1cm4gb24gc3BlY2lhbCBoaWdobGlnaHRpbmcgZm9yIGphdmFzY3JpcHQsIHZpc3VhbCBiYXNpYworc2NyaXB0cyBhbmQgZW1iZWRkZWQgQ1NTIChzdHlsZXNoZWV0cykuIFRoaXMgbWFrZXMgb25seSBzZW5zZSBpZiB5b3UKK2FjdHVhbGx5IGhhdmUgamF2YWRvYyBjb21tZW50cyB0aGF0IGluY2x1ZGUgZWl0aGVyIGphdmFzY3JpcHQgb3IgZW1iZWRkZWQKK0NTUy4gVGhlIG9wdGlvbnMgdG8gdXNlIGFyZSA+CisJOmxldCBqYXZhX2phdmFzY3JpcHQ9MQorCTpsZXQgamF2YV9jc3M9MQorCTpsZXQgamF2YV92Yj0xCisKK0luIG9yZGVyIHRvIGhpZ2hsaWdodCBuZXN0ZWQgcGFyZW5zIHdpdGggZGlmZmVyZW50IGNvbG9ycyBkZWZpbmUgY29sb3JzCitmb3IgamF2YVBhcmVuLCBqYXZhUGFyZW4xIGFuZCBqYXZhUGFyZW4yLCBmb3IgZXhhbXBsZSB3aXRoID4KKwk6aGkgbGluayBqYXZhUGFyZW4gQ29tbWVudAorb3IgPgorCTpoaSBqYXZhUGFyZW4gY3Rlcm1mZz1ibHVlIGd1aWZnPSMwMDAwZmYKKworSWYgeW91IG5vdGljZSBoaWdobGlnaHRpbmcgZXJyb3JzIHdoaWxlIHNjcm9sbGluZyBiYWNrd2FyZHMsIHdoaWNoIGFyZSBmaXhlZAord2hlbiByZWRyYXdpbmcgd2l0aCBDVFJMLUwsIHRyeSBzZXR0aW5nIHRoZSAiamF2YV9taW5saW5lcyIgaW50ZXJuYWwgdmFyaWFibGUKK3RvIGEgbGFyZ2VyIG51bWJlcjogPgorCTpsZXQgamF2YV9taW5saW5lcyA9IDUwCitUaGlzIHdpbGwgbWFrZSB0aGUgc3ludGF4IHN5bmNocm9uaXphdGlvbiBzdGFydCA1MCBsaW5lcyBiZWZvcmUgdGhlIGZpcnN0CitkaXNwbGF5ZWQgbGluZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLiAgVGhlIGRpc2FkdmFudGFnZSBvZiB1c2luZyBhIGxhcmdlcgorbnVtYmVyIGlzIHRoYXQgcmVkcmF3aW5nIGNhbiBiZWNvbWUgc2xvdy4KKworCitMQUNFCQkJCQkJKmxhY2UudmltKiAqbGFjZS1zeW50YXgqCisKK0xhY2UgKExhbmd1YWdlIGZvciBBc3NlbWJseSBvZiBDbGFzc2VzIGluIEVpZmZlbCkgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IHRoZQorc3R5bGUgZ3VpZGUgbGluZXMgYXJlIG5vdC4gIElmIHlvdSBwcmVmZXIgY2FzZSBpbnNlbnNpdGl2ZSBoaWdobGlnaHRpbmcsIGp1c3QKK2RlZmluZSB0aGUgdmltIHZhcmlhYmxlICdsYWNlX2Nhc2VfaW5zZW5zaXRpdmUnIGluIHlvdXIgc3RhcnR1cCBmaWxlOiA+CisJOmxldCBsYWNlX2Nhc2VfaW5zZW5zaXRpdmU9MQorCisKK0xFWAkJCQkJCSpsZXgudmltKiAqbGV4LXN5bnRheCoKKworTGV4IHVzZXMgYnJ1dGUtZm9yY2Ugc3luY2hyb25pemluZyBhcyB0aGUgIl4lJSQiIHNlY3Rpb24gZGVsaW1pdGVyCitnaXZlcyBubyBjbHVlIGFzIHRvIHdoYXQgc2VjdGlvbiBmb2xsb3dzLiAgQ29uc2VxdWVudGx5LCB0aGUgdmFsdWUgZm9yID4KKwk6c3luIHN5bmMgbWlubGluZXM9MzAwCittYXkgYmUgY2hhbmdlZCBieSB0aGUgdXNlciBpZiBzL2hlIGlzIGV4cGVyaWVuY2luZyBzeW5jaHJvbml6YXRpb24KK2RpZmZpY3VsdGllcyAoc3VjaCBhcyBtYXkgaGFwcGVuIHdpdGggbGFyZ2UgbGV4IGZpbGVzKS4KKworCitMSVRFCQkJCQkJKmxpdGUudmltKiAqbGl0ZS1zeW50YXgqCisKK1RoZXJlIGFyZSB0d28gb3B0aW9ucyBmb3IgdGhlIGxpdGUgc3ludGF4IGhpZ2hsaWdodGluZy4KKworSWYgeW91IGxpa2UgU1FMIHN5bnRheCBoaWdobGlnaHRpbmcgaW5zaWRlIFN0cmluZ3MsIHVzZSB0aGlzOiA+CisKKwk6bGV0IGxpdGVfc3FsX3F1ZXJ5ID0gMQorCitGb3Igc3luY2luZywgbWlubGluZXMgZGVmYXVsdHMgdG8gMTAwLglJZiB5b3UgcHJlZmVyIGFub3RoZXIgdmFsdWUsIHlvdSBjYW4KK3NldCAibGl0ZV9taW5saW5lcyIgdG8gdGhlIHZhbHVlIHlvdSBkZXNpcmUuICBFeGFtcGxlOiA+CisKKwk6bGV0IGxpdGVfbWlubGluZXMgPSAyMDAKKworCitMUEMJCQkJCQkqbHBjLnZpbSogKmxwYy1zeW50YXgqCisKK0xQQyBzdGFuZHMgZm9yIGEgc2ltcGxlLCBtZW1vcnktZWZmaWNpZW50IGxhbmd1YWdlOiBMYXJzIFBlbnNqfCBDLiBUaGUKK2ZpbGUgbmFtZSBvZiBMUEMgaXMgdXN1YWxseSAqLmMuICBSZWNvZ25pemluZyB0aGVzZSBmaWxlcyBhcyBMUEMgd291bGQgYm90aGVyCit1c2VycyB3cml0aW5nIG9ubHkgQyBwcm9ncmFtcy4JSWYgeW91IHdhbnQgdG8gdXNlIExQQyBzeW50YXggaW4gVmltLCB5b3UKK3Nob3VsZCBzZXQgYSB2YXJpYWJsZSBpbiB5b3VyIC52aW1yYyBmaWxlOiA+CisKKwk6bGV0IGxwY19zeW50YXhfZm9yX2MgPSAxCisKK0lmIGl0IGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3Igc29tZSBwYXJ0aWN1bGFyIEMgb3IgTFBDIGZpbGVzLCB1c2UgYQorbW9kZWxpbmUuICBGb3IgYSBMUEMgZmlsZToKKworCS8vIHZpbTpzZXQgZnQ9bHBjOgorCitGb3IgYSBDIGZpbGUgdGhhdCBpcyByZWNvZ25pemVkIGFzIExQQzoKKworCS8vIHZpbTpzZXQgZnQ9YzoKKworSWYgeW91IGRvbid0IHdhbnQgdG8gc2V0IHRoZSB2YXJpYWJsZSwgdXNlIHRoZSBtb2RlbGluZSBpbiBFVkVSWSBMUEMgZmlsZS4KKworVGhlcmUgYXJlIHNldmVyYWwgaW1wbGVtZW50YXRpb25zIGZvciBMUEMsIHdlIGludGVuZCB0byBzdXBwb3J0IG1vc3Qgd2lkZWx5Cit1c2VkIG9uZXMuIEhlcmUgdGhlIGRlZmF1bHQgTFBDIHN5bnRheCBpcyBmb3IgTXVkT1Mgc2VyaWVzLCBmb3IgTXVkT1MgdjIyCithbmQgYmVmb3JlLCB5b3Ugc2hvdWxkIHR1cm4gb2ZmIHRoZSBzZW5zaWJsZSBtb2RpZmllcnMsIGFuZCB0aGlzIHdpbGwgYWxzbworYXNzZXJ0cyB0aGUgbmV3IGVmdW5zIGFmdGVyIHYyMiB0byBiZSBpbnZhbGlkLCBkb24ndCBzZXQgdGhpcyB2YXJpYWJsZSB3aGVuCit5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBNdWRPUzogPgorCisJOmxldCBscGNfcHJlX3YyMiA9IDEKKworRm9yIExwTXVkIDMuMiBzZXJpZXMgb2YgTFBDOiA+CisKKwk6bGV0IGxwY19jb21wYXRfMzIgPSAxCisKK0ZvciBMUEM0IHNlcmllcyBvZiBMUEM6ID4KKworCTpsZXQgbHBjX3VzZV9scGM0X3N5bnRheCA9IDEKKworRm9yIHVMUEMgc2VyaWVzIG9mIExQQzoKK3VMUEMgaGFzIGJlZW4gZGV2ZWxvcGVkIHRvIFBpa2UsIHNvIHlvdSBzaG91bGQgdXNlIFBpa2Ugc3ludGF4CitpbnN0ZWFkLCBhbmQgdGhlIG5hbWUgb2YgeW91ciBzb3VyY2UgZmlsZSBzaG91bGQgYmUgKi5waWtlCisKKworTFVBCQkJCQkJKmx1YS52aW0qICpsdWEtc3ludGF4KgorCitUaGlzIHN5bnRheCBmaWxlIG1heSBiZSB1c2VkIGZvciBMdWEgNC4wIGFuZCBMdWEgNS4wIChkZWZhdWx0KS4gSWYgeW91IGFyZQorcHJvZ3JhbW1pbmcgaW4gTHVhIDQuMCwgdXNlIHRoaXM6ID4KKworCTpsZXQgbHVhX3ZlcnNpb24gPSA0CisKK0lmIGx1YV92ZXJzaW9uIHZhcmlhYmxlIGRvZXNuJ3QgZXhpc3QsIGl0IGlzIHNldCB0byA1LgorCisKK01BSUwJCQkJCQkJCSptYWlsLnZpbSoKKworVmltIGhpZ2hsaWdodHMgYWxsIHRoZSBzdGFuZGFyZCBlbGVtZW50cyBvZiBhbiBlbWFpbCAoaGVhZGVycywgc2lnbmF0dXJlcywKK3F1b3RlZCB0ZXh0IGFuZCBVUkxzIC8gZW1haWwgYWRkcmVzc2VzKS4gSW4ga2VlcGluZyB3aXRoIHN0YW5kYXJkIGNvbnZlbnRpb25zLAorc2lnbmF0dXJlcyBiZWdpbiBpbiBhIGxpbmUgY29udGFpbmluZyBvbmx5ICItLSIgZm9sbG93ZWQgb3B0aW9uYWxseSBieQord2hpdGVzcGFjZXMgYW5kIGVuZCB3aXRoIGEgbmV3bGluZS4KKworVmltIHRyZWF0cyBsaW5lcyBiZWdpbm5pbmcgd2l0aCAnXScsICd9JywgJ3wnLCAnPicgb3IgYSB3b3JkIGZvbGxvd2VkIGJ5ICc+JworYXMgcXVvdGVkIHRleHQuIEhvd2V2ZXIgVmltIGhpZ2hsaWdodHMgaGVhZGVycyBhbmQgc2lnbmF0dXJlcyBpbiBxdW90ZWQgdGV4dAorb25seSBpZiB0aGUgdGV4dCBpcyBxdW90ZWQgd2l0aCAnPicgKG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgb25lIHNwYWNlKS4KKworQnkgZGVmYXVsdCBtYWlsLnZpbSBzeW5jaHJvbmlzZXMgc3ludGF4IHRvIDEwMCBsaW5lcyBiZWZvcmUgdGhlIGZpcnN0CitkaXNwbGF5ZWQgbGluZS4gSWYgeW91IGhhdmUgYSBzbG93IG1hY2hpbmUsIGFuZCBnZW5lcmFsbHkgZGVhbCB3aXRoIGVtYWlscword2l0aCBzaG9ydCBoZWFkZXJzLCB5b3UgY2FuIGNoYW5nZSB0aGlzIHRvIGEgc21hbGxlciB2YWx1ZTogPgorCisgICAgOmxldCBtYWlsX21pbmxpbmVzID0gMzAKKworCitNQUtFCQkJCQkJKm1ha2UudmltKiAqbWFrZS1zeW50YXgqCisKK0luIG1ha2VmaWxlcywgY29tbWFuZHMgYXJlIHVzdWFsbHkgaGlnaGxpZ2h0ZWQgdG8gbWFrZSBpdCBlYXN5IGZvciB5b3UgdG8gc3BvdAorZXJyb3JzLiAgSG93ZXZlciwgdGhpcyBtYXkgYmUgdG9vIG11Y2ggY29sb3JpbmcgZm9yIHlvdS4gIFlvdSBjYW4gdHVybiB0aGlzCitmZWF0dXJlIG9mZiBieSB1c2luZzogPgorCisJOmxldCBtYWtlX25vX2NvbW1hbmRzID0gMQorCisKK01BUExFCQkJCQkJKm1hcGxlLnZpbSogKm1hcGxlLXN5bnRheCoKKworTWFwbGUgViwgYnkgV2F0ZXJsb28gTWFwbGUgSW5jLCBzdXBwb3J0cyBzeW1ib2xpYyBhbGdlYnJhLiAgVGhlIGxhbmd1YWdlCitzdXBwb3J0cyBtYW55IHBhY2thZ2VzIG9mIGZ1bmN0aW9ucyB3aGljaCBhcmUgc2VsZWN0aXZlbHkgbG9hZGVkIGJ5IHRoZSB1c2VyLgorVGhlIHN0YW5kYXJkIHNldCBvZiBwYWNrYWdlcycgZnVuY3Rpb25zIGFzIHN1cHBsaWVkIGluIE1hcGxlIFYgcmVsZWFzZSA0IG1heSBiZQoraGlnaGxpZ2h0ZWQgYXQgdGhlIHVzZXIncyBkaXNjcmV0aW9uLiAgVXNlcnMgbWF5IHBsYWNlIGluIHRoZWlyIC52aW1yYyBmaWxlOiA+CisKKwk6bGV0IG12cGtnX2FsbD0gMQorCit0byBnZXQgYWxsIHBhY2thZ2UgZnVuY3Rpb25zIGhpZ2hsaWdodGVkLCBvciB1c2VycyBtYXkgc2VsZWN0IGFueSBzdWJzZXQgYnkKK2Nob29zaW5nIGEgdmFyaWFibGUvcGFja2FnZSBmcm9tIHRoZSB0YWJsZSBiZWxvdyBhbmQgc2V0dGluZyB0aGF0IHZhcmlhYmxlIHRvCisxLCBhbHNvIGluIHRoZWlyIC52aW1yYyBmaWxlIChwcmlvciB0byBzb3VyY2luZworJFZJTVJVTlRJTUUvc3ludGF4L3N5bnRheC52aW0pLgorCisJVGFibGUgb2YgTWFwbGUgViBQYWNrYWdlIEZ1bmN0aW9uIFNlbGVjdG9ycyA+CisgIG12X0RFdG9vbHMJIG12X2dlbmZ1bmMJbXZfbmV0d29ya3MJbXZfcHJvY2VzcworICBtdl9HYWxvaXMJIG12X2dlb21ldHJ5CW12X251bWFwcHJveAltdl9zaW1wbGV4CisgIG12X0dhdXNzSW50CSBtdl9ncm9ibmVyCW12X251bXRoZW9yeQltdl9zdGF0cworICBtdl9MUkV0b29scwkgbXZfZ3JvdXAJbXZfb3J0aG9wb2x5CW12X3N0dWRlbnQKKyAgbXZfY29tYmluYXQJIG12X2ludHRyYW5zCW12X3BhZGljCW12X3N1bXRvb2xzCisgIG12X2NvbWJzdHJ1Y3QgbXZfbGllc3ltbQltdl9wbG90cwltdl90ZW5zb3IKKyAgbXZfZGlmZm9ybXMJIG12X2xpbmFsZwltdl9wbG90dG9vbHMJbXZfdG90b3JkZXIKKyAgbXZfZmluYW5jZQkgbXZfbG9naWMJbXZfcG93c2VyaWVzCisKKworTU9PCQkJCQkJKm1vby52aW0qICptb28tc3ludGF4KgorCitJZiB5b3UgdXNlIEMtc3R5bGUgY29tbWVudHMgaW5zaWRlIGV4cHJlc3Npb25zIGFuZCBmaW5kIGl0IG1hbmdsZXMgeW91cgoraGlnaGxpZ2h0aW5nLCB5b3UgbWF5IHdhbnQgdG8gdXNlIGV4dGVuZGVkIChzbG93ISkgbWF0Y2hlcyBmb3IgQy1zdHlsZQorY29tbWVudHM6ID4KKworCTpsZXQgbW9vX2V4dGVuZGVkX2NzdHlsZV9jb21tZW50cyA9IDEKKworVG8gZGlzYWJsZSBoaWdobGlnaHRpbmcgb2YgcHJvbm91biBzdWJzdGl0dXRpb24gcGF0dGVybnMgaW5zaWRlIHN0cmluZ3M6ID4KKworCTpsZXQgbW9vX25vX3Byb25vdW5fc3ViID0gMQorCitUbyBkaXNhYmxlIGhpZ2hsaWdodGluZyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uIG9wZXJhdG9yICclfCcsIGFuZCBtYXRjaGluZworJyUoJyBhbmQgJyUpJyBpbnNpZGUgc3RyaW5nczogPgorCisJOmxldCBtb29fbm9fcmVnZXhwID0gMQorCitVbm1hdGNoZWQgZG91YmxlIHF1b3RlcyBjYW4gYmUgcmVjb2duaXplZCBhbmQgaGlnaGxpZ2h0ZWQgYXMgZXJyb3JzOiA+CisKKwk6bGV0IG1vb191bm1hdGNoZWRfcXVvdGVzID0gMQorCitUbyBoaWdobGlnaHQgYnVpbHRpbiBwcm9wZXJ0aWVzICgubmFtZSwgLmxvY2F0aW9uLCAucHJvZ3JhbW1lciBldGMuKTogPgorCisJOmxldCBtb29fYnVpbHRpbl9wcm9wZXJ0aWVzID0gMQorCitVbmtub3duIGJ1aWx0aW4gZnVuY3Rpb25zIGNhbiBiZSByZWNvZ25pemVkIGFuZCBoaWdobGlnaHRlZCBhcyBlcnJvcnMuIElmIHlvdQordXNlIHRoaXMgb3B0aW9uLCBhZGQgeW91ciBvd24gZXh0ZW5zaW9ucyB0byB0aGUgbW9vS25vd25CdWlsdGluRnVuY3Rpb24gZ3JvdXAuCitUbyBlbmFibGUgdGhpcyBvcHRpb246ID4KKworCTpsZXQgbW9vX3Vua25vd25fYnVpbHRpbl9mdW5jdGlvbnMgPSAxCisKK0FuIGV4YW1wbGUgb2YgYWRkaW5nIHNwcmludGYoKSB0byB0aGUgbGlzdCBvZiBrbm93biBidWlsdGluIGZ1bmN0aW9uczogPgorCisJOnN5biBrZXl3b3JkIG1vb0tub3duQnVpbHRpbkZ1bmN0aW9uIHNwcmludGYgY29udGFpbmVkCisKKworTVNRTAkJCQkJCSptc3FsLnZpbSogKm1zcWwtc3ludGF4KgorCitUaGVyZSBhcmUgdHdvIG9wdGlvbnMgZm9yIHRoZSBtc3FsIHN5bnRheCBoaWdobGlnaHRpbmcuCisKK0lmIHlvdSBsaWtlIFNRTCBzeW50YXggaGlnaGxpZ2h0aW5nIGluc2lkZSBTdHJpbmdzLCB1c2UgdGhpczogPgorCisJOmxldCBtc3FsX3NxbF9xdWVyeSA9IDEKKworRm9yIHN5bmNpbmcsIG1pbmxpbmVzIGRlZmF1bHRzIHRvIDEwMC4JSWYgeW91IHByZWZlciBhbm90aGVyIHZhbHVlLCB5b3UgY2FuCitzZXQgIm1zcWxfbWlubGluZXMiIHRvIHRoZSB2YWx1ZSB5b3UgZGVzaXJlLiAgRXhhbXBsZTogPgorCisJOmxldCBtc3FsX21pbmxpbmVzID0gMjAwCisKKworTkNGCQkJCQkJKm5jZi52aW0qICpuY2Ytc3ludGF4KgorCitUaGVyZSBpcyBvbmUgb3B0aW9uIGZvciBOQ0Ygc3ludGF4IGhpZ2hsaWdodGluZy4KKworSWYgeW91IHdhbnQgdG8gaGF2ZSB1bnJlY29nbml6ZWQgKGJ5IG5jZi52aW0pIHN0YXRlbWVudHMgaGlnaGxpZ2h0ZWQgYXMKK2Vycm9ycywgdXNlIHRoaXM6ID4KKworCTpsZXQgbmNmX2hpZ2hsaWdodF91bmtub3ducyA9IDEKKworSWYgeW91IGRvbid0IHdhbnQgdG8gaGlnaGxpZ2h0IHRoZXNlIGVycm9ycywgbGVhdmUgaXQgdW5zZXQuCisKKworTlJPRkYJCQkJCQkqbnJvZmYudmltKiAqbnJvZmYtc3ludGF4KgorCitUaGUgbnJvZmYgc3ludGF4IGZpbGUgd29ya3Mgd2l0aCBBVCZUIG4vdHJvZmYgb3V0IG9mIHRoZSBib3guICBZb3UgbmVlZCB0bworYWN0aXZhdGUgdGhlIEdOVSBncm9mZiBleHRyYSBmZWF0dXJlcyBpbmNsdWRlZCBpbiB0aGUgc3ludGF4IGZpbGUgYmVmb3JlIHlvdQorY2FuIHVzZSB0aGVtLgorCitGb3IgZXhhbXBsZSwgTGludXggYW5kIEJTRCBkaXN0cmlidXRpb25zIHVzZSBncm9mZiBhcyB0aGVpciBkZWZhdWx0IHRleHQKK3Byb2Nlc3NpbmcgcGFja2FnZS4gSW4gb3JkZXIgdG8gYWN0aXZhdGUgdGhlIGV4dHJhIHN5bnRheCBoaWdobGlnaHRpbmcKK2ZlYXR1cmVzIGZvciBncm9mZiwgYWRkIHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIHlvdXIgc3RhcnQtdXAgZmlsZXM6ID4KKworICA6bGV0IGI6bnJvZmZfaXNfZ3JvZmYgPSAxCisKK0dyb2ZmIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgQVQmVCBuL3Ryb2ZmIHRoYXQgeW91IG1heSBzdGlsbCBmaW5kIGluCitTb2xhcmlzLiAgR3JvZmYgbWFjcm8gYW5kIHJlcXVlc3QgbmFtZXMgY2FuIGJlIGxvbmdlciB0aGFuIDIgY2hhcmFjdGVycyBhbmQKK3RoZXJlIGFyZSBleHRlbnNpb25zIHRvIHRoZSBsYW5ndWFnZSBwcmltaXRpdmVzLiAgRm9yIGV4YW1wbGUsIGluIEFUJlQgdHJvZmYKK3lvdSBhY2Nlc3MgdGhlIHllYXIgYXMgYSAyLWRpZ2l0IG51bWJlciB3aXRoIHRoZSByZXF1ZXN0IFwoeXIuIEluIGdyb2ZmIHlvdQorY2FuIHVzZSB0aGUgc2FtZSByZXF1ZXN0LCByZWNvZ25pemVkIGZvciBjb21wYXRpYmlsaXR5LCBvciB5b3UgY2FuIHVzZSBncm9mZidzCituYXRpdmUgc3ludGF4LCBcW3lyXS4gIEZ1cnRoZXJtb3JlLCB5b3UgY2FuIHVzZSBhIDQtZGlnaXQgeWVhciBkaXJlY3RseToKK1xbeWVhcl0uICBNYWNybyByZXF1ZXN0cyBjYW4gYmUgbG9uZ2VyIHRoYW4gMiBjaGFyYWN0ZXJzLCBmb3IgZXhhbXBsZSwgR05VIG1tCithY2NlcHRzIHRoZSByZXF1ZXN0cyAiLlZFUkJPTiIgYW5kICIuVkVSQk9GRiIgZm9yIGNyZWF0aW5nIHZlcmJhdGltCitlbnZpcm9ubWVudHMuCisKK0luIG9yZGVyIHRvIG9idGFpbiB0aGUgYmVzdCBmb3JtYXR0ZWQgb3V0cHV0IGcvdHJvZmYgY2FuIGdpdmUgeW91LCB5b3Ugc2hvdWxkCitmb2xsb3cgYSBmZXcgc2ltcGxlIHJ1bGVzIGFib3V0IHNwYWNpbmcgYW5kIHB1bmN0dWF0aW9uLgorCisxLiBEbyBub3QgbGVhdmUgZW1wdHkgc3BhY2VzIGF0IHRoZSBlbmQgb2YgbGluZXMuCisKKzIuIExlYXZlIG9uZSBzcGFjZSBhbmQgb25lIHNwYWNlIG9ubHkgYWZ0ZXIgYW4gZW5kLW9mLXNlbnRlbmNlIHBlcmlvZCwKKyAgIGV4Y2xhbWF0aW9uIG1hcmssIGV0Yy4KKworMy4gRm9yIHJlYXNvbnMgc3RhdGVkIGJlbG93LCBpdCBpcyBiZXN0IHRvIGZvbGxvdyBhbGwgcGVyaW9kIG1hcmtzIHdpdGggYQorICAgY2FycmlhZ2UgcmV0dXJuLgorCitUaGUgcmVhc29uIGJlaGluZCB0aGVzZSB1bnVzdWFsIHRpcHMgaXMgdGhhdCBnL24vdHJvZmYgaGF2ZSBhIGxpbmUgYnJlYWtpbmcKK2FsZ29yaXRobSB0aGF0IGNhbiBiZSBlYXNpbHkgdXBzZXQgaWYgeW91IGRvbid0IGZvbGxvdyB0aGUgcnVsZXMgZ2l2ZW4gYWJvdmUuCisKK1VubGlrZSBUZVgsIHRyb2ZmIGZpbGxzIHRleHQgbGluZS1ieS1saW5lLCBub3QgcGFyYWdyYXBoLWJ5LXBhcmFncmFwaCBhbmQsCitmdXJ0aGVybW9yZSwgaXQgZG9lcyBub3QgaGF2ZSBhIGNvbmNlcHQgb2YgZ2x1ZSBvciBzdHJldGNoLCBhbGwgaG9yaXpvbnRhbCBhbmQKK3ZlcnRpY2FsIHNwYWNlIGlucHV0IHdpbGwgYmUgb3V0cHV0IGFzIGlzLgorCitUaGVyZWZvcmUsIHlvdSBzaG91bGQgYmUgY2FyZWZ1bCBhYm91dCBub3QgdXNpbmcgbW9yZSBzcGFjZSBiZXR3ZWVuIHNlbnRlbmNlcwordGhhbiB5b3UgaW50ZW5kIHRvIGhhdmUgaW4geW91ciBmaW5hbCBkb2N1bWVudC4gIEZvciB0aGlzIHJlYXNvbiwgdGhlIGNvbW1vbgorcHJhY3RpY2UgaXMgdG8gaW5zZXJ0IGEgY2FycmlhZ2UgcmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGFsbCBwdW5jdHVhdGlvbgorbWFya3MuIElmIHlvdSB3YW50IHRvIGhhdmUgImV2ZW4iIHRleHQgaW4geW91ciBmaW5hbCBwcm9jZXNzZWQgb3V0cHV0LCB5b3UKK25lZWQgdG8gbWFpbnRhaW5pbmcgcmVndWxhciBzcGFjaW5nIGluIHRoZSBpbnB1dCB0ZXh0LiAgVG8gbWFyayBib3RoIHRyYWlsaW5nCitzcGFjZXMgYW5kIHR3byBvciBtb3JlIHNwYWNlcyBhZnRlciBhIHB1bmN0dWF0aW9uIGFzIGFuIGVycm9yLCB1c2U6ID4KKworICA6bGV0IG5yb2ZmX3NwYWNlX2Vycm9ycyA9IDEKKworQW5vdGhlciB0ZWNobmlxdWUgdG8gZGV0ZWN0IGV4dHJhIHNwYWNpbmcgYW5kIG90aGVyIGVycm9ycyB0aGF0IHdpbGwgaW50ZXJmZXJlCit3aXRoIHRoZSBjb3JyZWN0IHR5cGVzZXR0aW5nIG9mIHlvdXIgZmlsZSwgaXMgdG8gZGVmaW5lIGFuIGV5ZS1jYXRjaGluZworaGlnaGxpZ2h0aW5nIGRlZmluaXRpb24gZm9yIHRoZSBzeW50YXggZ3JvdXBzICJucm9mZkRlZmluaXRpb24iIGFuZAorIm5yb2ZmRGVmU3BlY2lhbCIgaW4geW91ciBjb25maWd1cmF0aW9uIGZpbGVzLiBGb3IgZXhhbXBsZTogPgorCisgIGhpIGRlZiBucm9mZkRlZmluaXRpb24gdGVybT1pdGFsaWMgY3Rlcm09aXRhbGljIGd1aT1yZXZlcnNlCisgIGhpIGRlZiBucm9mZkRlZlNwZWNpYWwgdGVybT1pdGFsaWMsYm9sZCBjdGVybT1pdGFsaWMsYm9sZAorCQkJIFwgZ3VpPXJldmVyc2UsYm9sZAorCitJZiB5b3Ugd2FudCB0byBuYXZpZ2F0ZSBwcmVwcm9jZXNzb3IgZW50cmllcyBpbiB5b3VyIHNvdXJjZSBmaWxlIGFzIGVhc2lseSBhcword2l0aCBzZWN0aW9uIG1hcmtlcnMsIHlvdSBjYW4gYWN0aXZhdGUgdGhlIGZvbGxvd2luZyBvcHRpb24gaW4geW91ciAudmltcmMKK2ZpbGU6ID4KKworCWxldCBiOnByZXByb2NzX2FzX3NlY3Rpb25zID0gMQorCitBcyB3ZWxsLCB0aGUgc3ludGF4IGZpbGUgYWRkcyBhbiBleHRyYSBwYXJhZ3JhcGggbWFya2VyIGZvciB0aGUgZXhkZW50ZWQKK3BhcmFncmFwaCBtYWNybyAoLlhQKSBpbiB0aGUgbXMgcGFja2FnZS4KKworRmluYWxseSwgdGhlcmUgaXMgYSB8Z3JvZmYudmltfCBzeW50YXggZmlsZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBlbmFibGluZworZ3JvZmYgc3ludGF4IGhpZ2hsaWdodGluZyBlaXRoZXIgb24gYSBmaWxlIGJhc2lzIG9yIGdsb2JhbGx5IGJ5IGRlZmF1bHQuCisKKworT0NBTUwJCQkJCQkqb2NhbWwudmltKiAqb2NhbWwtc3ludGF4KgorCitUaGUgT0NhbWwgc3ludGF4IGZpbGUgaGFuZGxlcyBmaWxlcyBoYXZpbmcgdGhlIGZvbGxvd2luZyBwcmVmaXhlczogLm1sLAorLm1saSwgLm1sbCBhbmQgLm1seS4gIEJ5IHNldHRpbmcgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSA+CisKKwk6bGV0IG9jYW1sX3JldmlzZWQgPSAxCisKK3lvdSBjYW4gc3dpdGNoIGZyb20gc3RhbmRhcmQgT0NhbWwtc3ludGF4IHRvIHJldmlzZWQgc3ludGF4IGFzIHN1cHBvcnRlZAorYnkgdGhlIGNhbWxwNCBwcmVwcm9jZXNzb3IuICBTZXR0aW5nIHRoZSB2YXJpYWJsZSA+CisKKwk6bGV0IG9jYW1sX25vZW5kX2Vycm9yID0gMQorCitwcmV2ZW50cyBoaWdobGlnaHRpbmcgb2YgImVuZCIgYXMgZXJyb3IsIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIHNvdXJjZXMKK2NvbnRhaW4gdmVyeSBsb25nIHN0cnVjdHVyZXMgdGhhdCBWaW0gZG9lcyBub3Qgc3luY2hyb25pemUgYW55bW9yZS4KKworCitQQVBQCQkJCQkJKnBhcHAudmltKiAqcGFwcC1zeW50YXgqCisKK1RoZSBQQXBwIHN5bnRheCBmaWxlIGhhbmRsZXMgLnBhcHAgZmlsZXMgYW5kLCB0byBhIGxlc3NlciBleHRlbmQsIC5weG1sCithbmQgLnB4c2wgZmlsZXMgd2hpY2ggYXJlIGFsbCBhIG1peHR1cmUgb2YgcGVybC94bWwvaHRtbC9vdGhlciB1c2luZyB4bWwKK2FzIHRoZSB0b3AtbGV2ZWwgZmlsZSBmb3JtYXQuIEJ5IGRlZmF1bHQgZXZlcnl0aGluZyBpbnNpZGUgcGh0bWwgb3IgcHhtbAorc2VjdGlvbnMgaXMgdHJlYXRlZCBhcyBhIHN0cmluZyB3aXRoIGVtYmVkZGVkIHByZXByb2Nlc3NvciBjb21tYW5kcy4gSWYKK3lvdSBzZXQgdGhlIHZhcmlhYmxlOiA+CisKKwk6bGV0IHBhcHBfaW5jbHVkZV9odG1sPTEKKworaW4geW91ciBzdGFydHVwIGZpbGUgaXQgd2lsbCB0cnkgdG8gc3ludGF4LWhpbGlnaHQgaHRtbCBjb2RlIGluc2lkZSBwaHRtbAorc2VjdGlvbnMsIGJ1dCB0aGlzIGlzIHJlbGF0aXZlbHkgc2xvdyBhbmQgbXVjaCB0b28gY29sb3VyZnVsIHRvIGJlIGFibGUgdG8KK2VkaXQgc2Vuc2libHkgOykKKworVGhlIG5ld2VzdCB2ZXJzaW9uIG9mIHRoZSBwYXBwLnZpbSBzeW50YXggZmlsZSBjYW4gdXN1YWxseSBiZSBmb3VuZCBhdAoraHR0cDovL3BhcHAucGxhbjkuZGUuCisKKworUEFTQ0FMCQkJCQkJKnBhc2NhbC52aW0qICpwYXNjYWwtc3ludGF4KgorCitGaWxlcyBtYXRjaGluZyAiKi5wIiBjb3VsZCBiZSBQcm9ncmVzcyBvciBQYXNjYWwuICBJZiB0aGUgYXV0b21hdGljIGRldGVjdGlvbgorZG9lc24ndCB3b3JrIGZvciB5b3UsIG9yIHlvdSBkb24ndCBlZGl0IFByb2dyZXNzIGF0IGFsbCwgdXNlIHRoaXMgaW4geW91cgorc3RhcnR1cCB2aW1yYzogPgorCisgICA6bGV0IGZpbGV0eXBlX3AgPSAicGFzY2FsIgorCitUaGUgUGFzY2FsIHN5bnRheCBmaWxlIGhhcyBiZWVuIGV4dGVuZGVkIHRvIHRha2UgaW50byBhY2NvdW50IHNvbWUgZXh0ZW5zaW9ucworcHJvdmlkZWQgYnkgVHVyYm8gUGFzY2FsLCBGcmVlIFBhc2NhbCBDb21waWxlciBhbmQgR05VIFBhc2NhbCBDb21waWxlci4KK0RlbHBoaSBrZXl3b3JkcyBhcmUgYWxzbyBzdXBwb3J0ZWQuIEJ5IGRlZmF1bHQsIFR1cmJvIFBhc2NhbCA3LjAgZmVhdHVyZXMgYXJlCitlbmFibGVkLiAgSWYgeW91IHByZWZlciB0byBzdGljayB3aXRoIHRoZSBzdGFuZGFyZCBQYXNjYWwga2V5d29yZHMsIGFkZCB0aGUKK2ZvbGxvd2luZyBsaW5lIHRvIHlvdXIgc3RhcnR1cCBmaWxlOiA+CisKKyAgIDpsZXQgcGFzY2FsX3RyYWRpdGlvbmFsPTEKKworVG8gc3dpdGNoIG9uIERlbHBoaSBzcGVjaWZpYyBjb25zdHJ1Y3Rpb25zIChzdWNoIGFzIG9uZS1saW5lIGNvbW1lbnRzLAora2V5d29yZHMsIGV0Yyk6ID4KKworICAgOmxldCBwYXNjYWxfZGVscGhpPTEKKworCitUaGUgb3B0aW9uIHBhc2NhbF9zeW1ib2xfb3BlcmF0b3IgY29udHJvbHMgd2hldGhlciBzeW1ib2wgb3BlcmF0b3JzIHN1Y2ggYXMgKywKKyosIC4uLCBldGMuIGFyZSBkaXNwbGF5ZWQgdXNpbmcgdGhlIE9wZXJhdG9yIGNvbG9yIG9yIG5vdC4gIFRvIGNvbG9yaXplIHN5bWJvbAorb3BlcmF0b3JzLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgc3RhcnR1cCBmaWxlOiA+CisKKyAgIDpsZXQgcGFzY2FsX3N5bWJvbF9vcGVyYXRvcj0xCisKK1NvbWUgZnVuY3Rpb25zIGFyZSBoaWdobGlnaHRlZCBieSBkZWZhdWx0LiAgVG8gc3dpdGNoIGl0IG9mZjogPgorCisgICA6bGV0IHBhc2NhbF9ub19mdW5jdGlvbnM9MQorCitGdXJ0aGVybW9yZSwgdGhlcmUgYXJlIHNwZWNpZmljIHZhcmlhYmxlIGZvciBzb21lIGNvbXBpbGVyLiAgQmVzaWRlcworcGFzY2FsX2RlbHBoaSwgdGhlcmUgYXJlIHBhc2NhbF9ncGMgYW5kIHBhc2NhbF9mcGMuICBEZWZhdWx0IGV4dGVuc2lvbnMgdHJ5IHRvCittYXRjaCBUdXJibyBQYXNjYWwuID4KKworICAgOmxldCBwYXNjYWxfZ3BjPTEKKworb3IgPgorCisgICA6bGV0IHBhc2NhbF9mcGM9MQorCitUbyBlbnN1cmUgdGhhdCBzdHJpbmdzIGFyZSBkZWZpbmVkIG9uIGEgc2luZ2xlIGxpbmUsIHlvdSBjYW4gZGVmaW5lIHRoZQorcGFzY2FsX29uZV9saW5lX3N0cmluZyB2YXJpYWJsZS4gPgorCisgICA6bGV0IHBhc2NhbF9vbmVfbGluZV9zdHJpbmc9MQorCitJZiB5b3UgZGlzbGlrZSA8VGFiPiBjaGFycywgeW91IGNhbiBzZXQgdGhlIHBhc2NhbF9ub190YWJzIHZhcmlhYmxlLiAgVGFicword2lsbCBiZSBoaWdobGlnaHRlZCBhcyBFcnJvci4gPgorCisgICA6bGV0IHBhc2NhbF9ub190YWJzPTEKKworCisKK1BFUkwJCQkJCQkqcGVybC52aW0qICpwZXJsLXN5bnRheCoKKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBvc3NpYmxlIG9wdGlvbnMgdG8gdGhlIHBlcmwgc3ludGF4IGhpZ2hsaWdodGluZy4KKworSWYgeW91IHVzZSBQT0QgZmlsZXMgb3IgUE9EIHNlZ21lbnRzLCB5b3UgbWlnaHQ6ID4KKworCTpsZXQgcGVybF9pbmNsdWRlX3BvZCA9IDEKKworVG8gaGFuZGxlIHBhY2thZ2UgcmVmZXJlbmNlcyBpbiB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMgZGlmZmVyZW50bHkgZnJvbQordGhlIHJlc3Qgb2YgdGhlIG5hbWUgKGxpa2UgJ1BrZ05hbWU6OicgaW4gJyRQa2dOYW1lOjpWYXJOYW1lJyk6ID4KKworCTpsZXQgcGVybF93YW50X3Njb3BlX2luX3ZhcmlhYmxlcyA9IDEKKworSWYgeW91IHdhbnQgY29tcGxleCB0aGluZ3MgbGlrZSAnQHskeyJmb28ifX0nIHRvIGJlIHBhcnNlZDogPgorCisJOmxldCBwZXJsX2V4dGVuZGVkX3ZhcnMgPSAxCisKK1RoZSBjb2xvcmluZyBzdHJpbmdzIGNhbiBiZSBjaGFuZ2VkLiBCeSBkZWZhdWx0IHN0cmluZ3MgYW5kIHFxIGZyaWVuZHMgd2lsbCBiZQoraGlnaGxpZ2h0ZWQgbGlrZSB0aGUgZmlyc3QgbGluZS4gSWYgeW91IHNldCB0aGUgdmFyaWFibGUKK3Blcmxfc3RyaW5nX2FzX3N0YXRlbWVudCwgaXQgd2lsbCBiZSBoaWdobGlnaHRlZCBhcyBpbiB0aGUgc2Vjb25kIGxpbmUuCisKKyAgICJoZWxsbyB3b3JsZCEiOyBxcXxoZWxsbyB3b3JsZHw7CisgICBeXl5eXl5eXl5eXl5eXk5OXl5eXl5eXl5eXl5eXl5eTgkgICh1bmxldCBwZXJsX3N0cmluZ19hc19zdGF0ZW1lbnQpCisgICBTXl5eXl5eXl5eXl5eU05OU1NTXl5eXl5eXl5eXl5TTgkgIChsZXQgcGVybF9zdHJpbmdfYXNfc3RhdGVtZW50KQorCisoXiA9IHBlcmxTdHJpbmcsIFMgPSBwZXJsU3RhdGVtZW50LCBOID0gTm9uZSBhdCBhbGwpCisKK1RoZSBzeW5jaW5nIGhhcyAzIG9wdGlvbnMuIFRoZSBmaXJzdCB0d28gc3dpdGNoIG9mZiBzb21lIHRyaWdnZXJpbmcgb2YKK3N5bmNocm9uaXphdGlvbiBhbmQgc2hvdWxkIG9ubHkgYmUgbmVlZGVkIGluIGNhc2UgaXQgZmFpbHMgdG8gd29yayBwcm9wZXJseS4KK0lmIHdoaWxlIHNjcm9sbGluZyBhbGwgb2YgYSBzdWRkZW4gdGhlIHdob2xlIHNjcmVlbiBjaGFuZ2VzIGNvbG9yIGNvbXBsZXRlbHkKK3RoZW4geW91IHNob3VsZCB0cnkgYW5kIHN3aXRjaCBvZmYgb25lIG9mIHRob3NlLiBMZXQgbWUga25vdyBpZiB5b3UgY2FuIGZpZ3VyZQorb3V0IHRoZSBsaW5lIHRoYXQgY2F1c2VzIHRoZSBtaXN0YWtlLgorCitPbmUgdHJpZ2dlcnMgb24gIl5ccypzdWJccyoiIGFuZCB0aGUgb3RoZXIgb24gIl5bJEAlXSIgbW9yZSBvciBsZXNzLiA+CisKKwk6bGV0IHBlcmxfbm9fc3luY19vbl9zdWIKKwk6bGV0IHBlcmxfbm9fc3luY19vbl9nbG9iYWxfdmFyCisKK0JlbG93IHlvdSBjYW4gc2V0IHRoZSBtYXhpbXVtIGRpc3RhbmNlIFZJTSBzaG91bGQgbG9vayBmb3Igc3RhcnRpbmcgcG9pbnRzIGZvcgoraXRzIGF0dGVtcHRzIGluIHN5bnRheCBoaWdobGlnaHRpbmcuID4KKworCTpsZXQgcGVybF9zeW5jX2Rpc3QgPSAxMDAKKworSWYgeW91IHdhbnQgdG8gdXNlIGZvbGRpbmcgd2l0aCBwZXJsLCBzZXQgcGVybF9mb2xkOiA+CisKKyAgICAgICA6bGV0IHBlcmxfZm9sZCA9IDEKKworCitQSFAzIGFuZCBQSFA0CQkqcGhwLnZpbSogKnBocDMudmltKiAqcGhwLXN5bnRheCogKnBocDMtc3ludGF4KgorCitbbm90ZTogcHJldmlvdXNseSB0aGlzIHdhcyBjYWxsZWQgInBocDMiLCBidXQgc2luY2UgaXQgbm93IGFsc28gc3VwcG9ydHMgcGhwNAoraXQgaGFzIGJlZW4gcmVuYW1lZCB0byAicGhwIl0KKworVGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBmb3IgdGhlIHBocCBzeW50YXggaGlnaGxpZ2h0aW5nLgorCitJZiB5b3UgbGlrZSBTUUwgc3ludGF4IGhpZ2hsaWdodGluZyBpbnNpZGUgU3RyaW5nczogPgorCisgIGxldCBwaHBfc3FsX3F1ZXJ5ID0gMQorCitGb3IgaGlnaGxpZ2h0aW5nIHRoZSBCYXNlbGliIG1ldGhvZHM6ID4KKworICBsZXQgcGhwX2Jhc2VsaWIgPSAxCisKK0VuYWJsZSBIVE1MIHN5bnRheCBoaWdobGlnaHRpbmcgaW5zaWRlIHN0cmluZ3M6ID4KKworICBsZXQgcGhwX2h0bWxJblN0cmluZ3MgPSAxCisKK1VzaW5nIHRoZSBvbGQgY29sb3JzdHlsZTogPgorCisgIGxldCBwaHBfb2xkU3R5bGUgPSAxCisKK0VuYWJsZSBoaWdobGlnaHRpbmcgQVNQLXN0eWxlIHNob3J0IHRhZ3M6ID4KKworICBsZXQgcGhwX2FzcF90YWdzID0gMQorCitEaXNhYmxlIHNob3J0IHRhZ3M6ID4KKworICBsZXQgcGhwX25vU2hvcnRUYWdzID0gMQorCitGb3IgaGlnaGxpZ2h0aW5nIHBhcmVudCBlcnJvciBdIG9yICk6ID4KKworICBsZXQgcGhwX3BhcmVudF9lcnJvcl9jbG9zZSA9IDEKKworRm9yIHNraXBwaW5nIGFuIHBocCBlbmQgdGFnLCBpZiB0aGVyZSBleGlzdHMgYW4gb3BlbiAoIG9yIFsgd2l0aG91dCBhIGNsb3NpbmcKK29uZTogPgorCisgIGxldCBwaHBfcGFyZW50X2Vycm9yX29wZW4gPSAxCisKK0VuYWJsZSBmb2xkaW5nIGZvciBjbGFzc2VzIGFuZCBmdW5jdGlvbnM6ID4KKworICBsZXQgcGhwX2ZvbGRpbmcgPSAxCisKK1NlbGVjdGluZyBzeW5jaW5nIG1ldGhvZDogPgorCisgIGxldCBwaHBfc3luY19tZXRob2QgPSB4CisKK3ggPSAtMSB0byBzeW5jIGJ5IHNlYXJjaCAoZGVmYXVsdCksCit4ID4gMCB0byBzeW5jIGF0IGxlYXN0IHggbGluZXMgYmFja3dhcmRzLAoreCA9IDAgdG8gc3luYyBmcm9tIHN0YXJ0LgorCisKK1BQV0laQVJECQkJCQkqcHB3aXoudmltKiAqcHB3aXotc3ludGF4KgorCitQUFdpemFyZCBpcyBhIHByZXByb2Nlc3NvciBmb3IgSFRNTCBhbmQgT1MvMiBJTkYgZmlsZXMKKworVGhpcyBzeW50YXggZmlsZSBoYXMgdGhlIG9wdGlvbnM6CisKKy0gcHB3aXpfaGlnaGxpZ2h0X2RlZnMgOiBkZXRlcm1pbmVzIGhpZ2hsaWdodGluZyBtb2RlIGZvciBQUFdpemFyZCdzCisgIGRlZmluaXRpb25zLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCisKKyAgcHB3aXpfaGlnaGxpZ2h0X2RlZnMgPSAxIDogUFBXaXphcmQgI2RlZmluZSBzdGF0ZW1lbnRzIHJldGFpbiB0aGUKKyAgICBjb2xvcnMgb2YgdGhlaXIgY29udGVudHMgKGUuIGcuIFBQV2l6YXJkIG1hY3JvcyBhbmQgdmFyaWFibGVzKQorCisgIHBwd2l6X2hpZ2hsaWdodF9kZWZzID0gMiA6IHByZXByb2Nlc3NvciAjZGVmaW5lIGFuZCAjZXZhbHVhdGUKKyAgICBzdGF0ZW1lbnRzIGFyZSBzaG93biBpbiBhIHNpbmdsZSBjb2xvciB3aXRoIHRoZSBleGNlcHRpb24gb2YgbGluZQorICAgIGNvbnRpbnVhdGlvbiBzeW1ib2xzCisKKyAgVGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgcHB3aXpfaGlnaGxpZ2h0X2RlZnMgaXMgMS4KKworLSBwcHdpel93aXRoX2h0bWwgOiBJZiB0aGUgdmFsdWUgaXMgMSAodGhlIGRlZmF1bHQpLCBoaWdobGlnaHQgbGl0ZXJhbAorICBIVE1MIGNvZGU7IGlmIDAsIHRyZWF0IEhUTUwgY29kZSBsaWtlIG9yZGluYXJ5IHRleHQuCisKKworUEhUTUwJCQkJCQkqcGh0bWwudmltKiAqcGh0bWwtc3ludGF4KgorCitUaGVyZSBhcmUgdHdvIG9wdGlvbnMgZm9yIHRoZSBwaHRtbCBzeW50YXggaGlnaGxpZ2h0aW5nLgorCitJZiB5b3UgbGlrZSBTUUwgc3ludGF4IGhpZ2hsaWdodGluZyBpbnNpZGUgU3RyaW5ncywgdXNlIHRoaXM6ID4KKworCTpsZXQgcGh0bWxfc3FsX3F1ZXJ5ID0gMQorCitGb3Igc3luY2luZywgbWlubGluZXMgZGVmYXVsdHMgdG8gMTAwLglJZiB5b3UgcHJlZmVyIGFub3RoZXIgdmFsdWUsIHlvdSBjYW4KK3NldCAicGh0bWxfbWlubGluZXMiIHRvIHRoZSB2YWx1ZSB5b3UgZGVzaXJlLiAgRXhhbXBsZTogPgorCisJOmxldCBwaHRtbF9taW5saW5lcyA9IDIwMAorCisKK1BPU1RTQ1JJUFQJCQkJCSpwb3N0c2NyLnZpbSogKnBvc3RzY3Itc3ludGF4KgorCitUaGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zIHdoZW4gaXQgY29tZXMgdG8gaGlnaGxpZ2h0aW5nIFBvc3RTY3JpcHQuCisKK0ZpcnN0IHdoaWNoIHZlcnNpb24gb2YgdGhlIFBvc3RTY3JpcHQgbGFuZ3VhZ2UgdG8gaGlnaGxpZ2h0LiAgVGhlcmUgYXJlCitjdXJyZW50bHkgdGhyZWUgZGVmaW5lZCBsYW5ndWFnZSB2ZXJzaW9ucywgb3IgbGV2ZWxzLiAgTGV2ZWwgMSBpcyB0aGUgb3JpZ2luYWwKK2FuZCBiYXNlIHZlcnNpb24sIGFuZCBpbmNsdWRlcyBhbGwgZXh0ZW5zaW9ucyBwcmlvciB0byB0aGUgcmVsZWFzZSBvZiBsZXZlbCAyLgorTGV2ZWwgMiBpcyB0aGUgbW9zdCBjb21tb24gdmVyc2lvbiBhcm91bmQsIGFuZCBpbmNsdWRlcyBpdHMgb3duIHNldCBvZgorZXh0ZW5zaW9ucyBwcmlvciB0byB0aGUgcmVsZWFzZSBvZiBsZXZlbCAzLiAgTGV2ZWwgMyBpcyBjdXJyZW50bHkgdGhlIGhpZ2hlc3QKK2xldmVsIHN1cHBvcnRlZC4gIFlvdSBzZWxlY3Qgd2hpY2ggbGV2ZWwgb2YgdGhlIFBvc3RTY3JpcHQgbGFuZ3VhZ2UgeW91IHdhbnQKK2hpZ2hsaWdodGVkIGJ5IGRlZmluaW5nIHRoZSBwb3N0c2NyX2xldmVsIHZhcmlhYmxlIGFzIGZvbGxvd3M6ID4KKworCTpsZXQgcG9zdHNjcl9sZXZlbD0yCisKK0lmIHRoaXMgdmFyaWFibGUgaXMgbm90IGRlZmluZWQgaXQgZGVmYXVsdHMgdG8gMiAobGV2ZWwgMikgc2luY2UgdGhpcyBpcwordGhlIG1vc3QgcHJldmFsZW50IHZlcnNpb24gY3VycmVudGx5LgorCitOb3RlLCBub3QgYWxsIFBTIGludGVycHJldGVycyB3aWxsIHN1cHBvcnQgYWxsIGxhbmd1YWdlIGZlYXR1cmVzIGZvciBhCitwYXJ0aWN1bGFyIGxhbmd1YWdlIGxldmVsLiAgSW4gcGFydGljdWxhciB0aGUgJSFQUy1BZG9iZS0zLjAgYXQgdGhlIHN0YXJ0IG9mCitQUyBmaWxlcyBkb2VzIE5PVCBtZWFuIHRoZSBQb3N0U2NyaXB0IHByZXNlbnQgaXMgbGV2ZWwgMyBQb3N0U2NyaXB0IQorCitJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBEaXNwbGF5IFBvc3RTY3JpcHQsIHlvdSBjYW4gaW5jbHVkZSBoaWdobGlnaHRpbmcgb2YKK0Rpc3BsYXkgUFMgbGFuZ3VhZ2UgZmVhdHVyZXMgYnkgZGVmaW5pbmcgdGhlIHBvc3RzY3JfZGlzcGxheSB2YXJpYWJsZSBhcworZm9sbG93czogPgorCisJOmxldCBwb3N0c2NyX2Rpc3BsYXk9MQorCitJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBHaG9zdHNjcmlwdCwgeW91IGNhbiBpbmNsdWRlIGhpZ2hsaWdodGluZyBvZgorR2hvc3RzY3JpcHQgc3BlY2lmaWMgbGFuZ3VhZ2UgZmVhdHVyZXMgYnkgZGVmaW5pbmcgdGhlIHZhcmlhYmxlCitwb3N0c2NyX2dob3N0c2NyaXB0IGFzIGZvbGxvd3M6ID4KKworCTpsZXQgcG9zdHNjcl9naG9zdHNjcmlwdD0xCisKK1Bvc3RTY3JpcHQgaXMgYSBsYXJnZSBsYW5ndWFnZSwgd2l0aCBtYW55IHByZWRlZmluZWQgZWxlbWVudHMuCVdoaWxlIGl0Cit1c2VmdWwgdG8gaGF2ZSBhbGwgdGhlc2UgZWxlbWVudHMgaGlnaGxpZ2h0ZWQsIG9uIHNsb3dlciBtYWNoaW5lcyB0aGlzIGNhbgorY2F1c2UgVmltIHRvIHNsb3cgZG93bi4gIEluIGFuIGF0dGVtcHQgdG8gYmUgbWFjaGluZSBmcmllbmRseSBmb250IG5hbWVzIGFuZAorY2hhcmFjdGVyIGVuY29kaW5ncyBhcmUgbm90IGhpZ2hsaWdodGVkIGJ5IGRlZmF1bHQuICBVbmxlc3MgeW91IGFyZSB3b3JraW5nCitleHBsaWNpdGx5IHdpdGggZWl0aGVyIG9mIHRoZXNlIHRoaXMgc2hvdWxkIGJlIG9rLiAgSWYgeW91IHdhbnQgdGhlbSB0byBiZQoraGlnaGxpZ2h0ZWQgeW91IHNob3VsZCBzZXQgb25lIG9yIGJvdGggb2YgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6ID4KKworCTpsZXQgcG9zdHNjcl9mb250cz0xCisJOmxldCBwb3N0c2NyX2VuY29kaW5ncz0xCisKK1RoZXJlIGlzIGEgc3R5bGlzdGljIG9wdGlvbiB0byB0aGUgaGlnaGxpZ2h0aW5nIG9mIGFuZCwgb3IsIGFuZCBub3QuICBJbgorUG9zdFNjcmlwdCB0aGUgZnVuY3Rpb24gb2YgdGhlc2Ugb3BlcmF0b3JzIGRlcGVuZHMgb24gdGhlIHR5cGVzIG9mIHRoZWlyCitvcGVyYW5kcyAtIGlmIHRoZSBvcGVyYW5kcyBhcmUgYm9vbGVhbnMgdGhlbiB0aGV5IGFyZSB0aGUgbG9naWNhbCBvcGVyYXRvcnMsCitpZiB0aGV5IGFyZSBpbnRlZ2VycyB0aGVuIHRoZXkgYXJlIGJpbmFyeSBvcGVyYXRvcnMuICBBcyBiaW5hcnkgYW5kIGxvZ2ljYWwKK29wZXJhdG9ycyBjYW4gYmUgaGlnaGxpZ2h0ZWQgZGlmZmVyZW50bHkgdGhleSBoYXZlIHRvIGJlIGhpZ2hsaWdodGVkIG9uZSB3YXkKK29yIHRoZSBvdGhlci4gIEJ5IGRlZmF1bHQgdGhleSBhcmUgdHJlYXRlZCBhcyBsb2dpY2FsIG9wZXJhdG9ycy4gIFRoZXkgY2FuIGJlCitoaWdobGlnaHRlZCBhcyBiaW5hcnkgb3BlcmF0b3JzIGJ5IGRlZmluaW5nIHRoZSB2YXJpYWJsZQorcG9zdHNjcl9hbmRvcm5vdF9iaW5hcnkgYXMgZm9sbG93czogPgorCisJOmxldCBwb3N0c2NyX2FuZG9ybm90X2JpbmFyeT0xCis8CisKKwkJCSpwdGNhcC52aW0qCitQUklOVENBUCArIFRFUk1DQVAJKnB0Y2FwLXN5bnRheCogKnRlcm1jYXAtc3ludGF4KiAqcHJpbnRjYXAtc3ludGF4KgorCitUaGlzIHN5bnRheCBmaWxlIGFwcGxpZXMgdG8gdGhlIHByaW50Y2FwIGFuZCB0ZXJtY2FwIGRhdGFiYXNlcy4KKworSW4gb3JkZXIgZm9yIFZpbSB0byByZWNvZ25pemUgcHJpbnRjYXAvdGVybWNhcCBmaWxlcyB0aGF0IGRvIG5vdCBtYXRjaAordGhlIHBhdHRlcm5zICpwcmludGNhcCosIG9yICp0ZXJtY2FwKiwgeW91IG11c3QgcHV0IGFkZGl0aW9uYWwgcGF0dGVybnMKK2FwcHJvcHJpYXRlIHRvIHlvdXIgc3lzdGVtIGluIHlvdXIgfG15ZmlsZXR5cGVmaWxlfCBmaWxlLiAgRm9yIHRoZXNlCitwYXR0ZXJucywgeW91IG11c3Qgc2V0IHRoZSB2YXJpYWJsZSAiYjpwdGNhcF90eXBlIiB0byBlaXRoZXIgInByaW50IiBvcgorInRlcm0iLCBhbmQgdGhlbiB0aGUgJ2ZpbGV0eXBlJyBvcHRpb24gdG8gcHRjYXAuCisKK0ZvciBleGFtcGxlLCB0byBtYWtlIFZpbSBpZGVudGlmeSBhbGwgZmlsZXMgaW4gL2V0Yy90ZXJtY2Fwcy8gYXMgdGVybWNhcAorZmlsZXMsIGFkZCB0aGUgZm9sbG93aW5nOiA+CisKKyAgIDphdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy90ZXJtY2Fwcy8qIGxldCBiOnB0Y2FwX3R5cGUgPSAidGVybSIgfAorCQkJCSAgICAgICBcIHNldCBmaWxldHlwZT1wdGNhcAorCitJZiB5b3Ugbm90aWNlIGhpZ2hsaWdodGluZyBlcnJvcnMgd2hpbGUgc2Nyb2xsaW5nIGJhY2t3YXJkcywgd2hpY2gKK2FyZSBmaXhlZCB3aGVuIHJlZHJhd2luZyB3aXRoIENUUkwtTCwgdHJ5IHNldHRpbmcgdGhlICJwdGNhcF9taW5saW5lcyIKK2ludGVybmFsIHZhcmlhYmxlIHRvIGEgbGFyZ2VyIG51bWJlcjogPgorCisgICA6bGV0IHB0Y2FwX21pbmxpbmVzID0gNTAKKworKFRoZSBkZWZhdWx0IGlzIDIwIGxpbmVzLikKKworCitQUk9HUkVTUwkJCQkqcHJvZ3Jlc3MudmltKiAqcHJvZ3Jlc3Mtc3ludGF4KgorCitGaWxlcyBtYXRjaGluZyAiKi53IiBjb3VsZCBiZSBQcm9ncmVzcyBvciBjd2ViLiAgSWYgdGhlIGF1dG9tYXRpYyBkZXRlY3Rpb24KK2RvZXNuJ3Qgd29yayBmb3IgeW91LCBvciB5b3UgZG9uJ3QgZWRpdCBjd2ViIGF0IGFsbCwgdXNlIHRoaXMgaW4geW91cgorc3RhcnR1cCB2aW1yYzogPgorICAgOmxldCBmaWxldHlwZV93ID0gInByb2dyZXNzIgorVGhlIHNhbWUgaGFwcGVucyBmb3IgIiouaSIsIHdoaWNoIGNvdWxkIGJlIGFzc2VtYmx5LCBhbmQgIioucCIsIHdoaWNoIGNvdWxkIGJlCitQYXNjYWwuICBVc2UgdGhpcyBpZiB5b3UgZG9uJ3QgdXNlIGFzc2VtYmx5IGFuZCBQYXNjYWw6ID4KKyAgIDpsZXQgZmlsZXR5cGVfaSA9ICJwcm9ncmVzcyIKKyAgIDpsZXQgZmlsZXR5cGVfcCA9ICJwcm9ncmVzcyIKKworCitQWVRIT04JCQkJCQkqcHl0aG9uLnZpbSogKnB5dGhvbi1zeW50YXgqCisKK1RoZXJlIGFyZSBmb3VyIG9wdGlvbnMgdG8gY29udHJvbCBQeXRob24gc3ludGF4IGhpZ2hsaWdodGluZy4KKworRm9yIGhpZ2hsaWdodGVkIG51bWJlcnM6ID4KKwk6bGV0IHB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyA9IDEKKworRm9yIGhpZ2hsaWdodGVkIGJ1aWx0aW4gZnVuY3Rpb25zOiA+CisJOmxldCBweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zID0gMQorCitGb3IgaGlnaGxpZ2h0ZWQgc3RhbmRhcmQgZXhjZXB0aW9uczogPgorCTpsZXQgcHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zID0gMQorCitGb3IgaGlnaGxpZ2h0ZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgbWl4IG9mIHNwYWNlcyBhbmQgdGFiczoKKwk6bGV0IHB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzID0gMQorCitJZiB5b3Ugd2FudCBhbGwgcG9zc2libGUgUHl0aG9uIGhpZ2hsaWdodGluZyAodGhlIHNhbWUgYXMgc2V0dGluZyB0aGUKK3ByZWNlZGluZyB0aHJlZSBvcHRpb25zKTogPgorCTpsZXQgcHl0aG9uX2hpZ2hsaWdodF9hbGwgPSAxCisKKworUVVBS0UJCQkJCQkqcXVha2UudmltKiAqcXVha2Utc3ludGF4KgorCitUaGUgUXVha2Ugc3ludGF4IGRlZmluaXRpb24gc2hvdWxkIHdvcmsgZm9yIG1vc3QgYW55IEZQUyAoRmlyc3QgUGVyc29uCitTaG9vdGVyKSBiYXNlZCBvbiBvbmUgb2YgdGhlIFF1YWtlIGVuZ2luZXMuIEhvd2V2ZXIsIHRoZSBjb21tYW5kIG5hbWVzIHZhcnkKK2EgYml0IGJldHdlZW4gdGhlIHRocmVlIGdhbWVzIChRdWFrZSwgUXVha2UgMiwgYW5kIFF1YWtlIDMgQXJlbmEpIHNvIHRoZQorc3ludGF4IGRlZmluaXRpb24gY2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRocmVlIGdsb2JhbCB2YXJpYWJsZXMgdG8gYWxsb3cKK3VzZXJzIHRvIHNwZWNpZnkgd2hhdCBjb21tYW5kcyBhcmUgbGVnYWwgaW4gdGhlaXIgZmlsZXMuIFRoZSB0aHJlZSB2YXJpYWJsZXMKK2NhbiBiZSBzZXQgZm9yIHRoZSBmb2xsb3dpbmcgZWZmZWN0czoKKworc2V0IHRvIGhpZ2hsaWdodCBjb21tYW5kcyBvbmx5IGF2YWlsYWJsZSBpbiBRdWFrZTogPgorCTpsZXQgcXVha2VfaXNfcXVha2UxID0gMQorCitzZXQgdG8gaGlnaGxpZ2h0IGNvbW1hbmRzIG9ubHkgYXZhaWxhYmxlIGluIFF1YWtlIDI6ID4KKwk6bGV0IHF1YWtlX2lzX3F1YWtlMiA9IDEKKworc2V0IHRvIGhpZ2hsaWdodCBjb21tYW5kcyBvbmx5IGF2YWlsYWJsZSBpbiBRdWFrZSAzIEFyZW5hOiA+CisJOmxldCBxdWFrZV9pc19xdWFrZTMgPSAxCisKK0FueSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0aHJlZSB2YXJpYWJsZXMgaXMgbGVnYWwsIGJ1dCBtaWdodCBoaWdobGlnaHQgbW9yZQorY29tbWFuZHMgdGhhbiBhcmUgYWN0dWFsbHkgYXZhaWxhYmxlIHRvIHlvdSBieSB0aGUgZ2FtZS4KKworCitSRUFETElORQkJCQkqcmVhZGxpbmUudmltKiAqcmVhZGxpbmUtc3ludGF4KgorCitUaGUgcmVhZGxpbmUgbGlicmFyeSBpcyBwcmltYXJpbHkgdXNlZCBieSB0aGUgQkFTSCBzaGVsbCwgd2hpY2ggYWRkcyBxdWl0ZSBhCitmZXcgY29tbWFuZHMgYW5kIG9wdGlvbnMgdG8gdGhlIG9uZXMgYWxyZWFkeSBhdmFpbGFibGUuIFRvIGhpZ2hsaWdodCB0aGVzZQoraXRlbXMgYXMgd2VsbCB5b3UgY2FuIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgfHZpbXJjfCBvciBqdXN0IHR5cGUgaXQgaW4gdGhlCitjb21tYW5kIGxpbmUgYmVmb3JlIGxvYWRpbmcgYSBmaWxlIHdpdGggdGhlIHJlYWRsaW5lIHN5bnRheDogPgorCWxldCByZWFkbGluZV9oYXNfYmFzaCA9IDEKKworVGhpcyB3aWxsIGFkZCBoaWdobGlnaHRpbmcgZm9yIHRoZSBjb21tYW5kcyB0aGF0IEJBU0ggKHZlcnNpb24gMi4wNWEgYW5kCitsYXRlciwgYW5kIHBhcnQgZWFybGllcikgYWRkcy4KKworCitSRVhYCQkJCQkJKnJleHgudmltKiAqcmV4eC1zeW50YXgqCisKK0lmIHlvdSBub3RpY2UgaGlnaGxpZ2h0aW5nIGVycm9ycyB3aGlsZSBzY3JvbGxpbmcgYmFja3dhcmRzLCB3aGljaCBhcmUgZml4ZWQKK3doZW4gcmVkcmF3aW5nIHdpdGggQ1RSTC1MLCB0cnkgc2V0dGluZyB0aGUgInJleHhfbWlubGluZXMiIGludGVybmFsIHZhcmlhYmxlCit0byBhIGxhcmdlciBudW1iZXI6ID4KKwk6bGV0IHJleHhfbWlubGluZXMgPSA1MAorVGhpcyB3aWxsIG1ha2UgdGhlIHN5bnRheCBzeW5jaHJvbml6YXRpb24gc3RhcnQgNTAgbGluZXMgYmVmb3JlIHRoZSBmaXJzdAorZGlzcGxheWVkIGxpbmUuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4gIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdXNpbmcgYSBsYXJnZXIKK251bWJlciBpcyB0aGF0IHJlZHJhd2luZyBjYW4gYmVjb21lIHNsb3cuCisKKworUlVCWQkJCQkJCSpydWJ5LnZpbSogKnJ1Ynktc3ludGF4KgorCitUaGVyZSBhcmUgYSBmZXcgb3B0aW9ucyB0byB0aGUgUnVieSBzeW50YXggaGlnaGxpZ2h0aW5nLgorCitCeSBkZWZhdWx0LCB0aGUgImVuZCIga2V5d29yZCBpcyBjb2xvcml6ZWQgYWNjb3JkaW5nIHRvIHRoZSBvcGVuaW5nIHN0YXRlbWVudAorb2YgdGhlIGJsb2NrIGl0IGNsb3Nlcy4gV2hpbGUgdXNlZnVsLCB0aGlzIGZlYXR1cmUgY2FuIGJlIGV4cGVuc2l2ZTogaWYgeW91CitleHBlcmllbmNlIHNsb3cgcmVkcmF3aW5nIChvciB5b3UgYXJlIG9uIGEgdGVybWluYWwgd2l0aCBwb29yIGNvbG9yIHN1cHBvcnQpCit5b3UgbWF5IHdhbnQgdG8gdHVybiBpdCBvZmYgYnkgZGVmaW5pbmcgdGhlICJydWJ5X25vX2V4cGVuc2l2ZSIgdmFyaWFibGU6ID4KKwk6bGV0IHJ1Ynlfbm9fZXhwZW5zaXZlID0gMQorSW4gdGhpcyBjYXNlIHRoZSBzYW1lIGNvbG9yIHdpbGwgYmUgdXNlZCBmb3IgYWxsIGNvbnRyb2wga2V5d29yZHMuCisKK0lmIHlvdSBkbyB3YW50IHRoaXMgZmVhdHVyZSBlbmFibGVkLCBidXQgbm90aWNlIGhpZ2hsaWdodGluZyBlcnJvcnMgd2hpbGUKK3Njcm9sbGluZyBiYWNrd2FyZHMsIHdoaWNoIGFyZSBmaXhlZCB3aGVuIHJlZHJhd2luZyB3aXRoIENUUkwtTCwgdHJ5IHNldHRpbmcKK3RoZSAicnVieV9taW5saW5lcyIgdmFyaWFibGUgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiA1MDogPgorCTpsZXQgcnVieV9taW5saW5lcyA9IDEwMAorSWRlYWxseSwgdGhpcyB2YWx1ZSBzaG91bGQgYmUgYSBudW1iZXIgb2YgbGluZXMgbGFyZ2UgZW5vdWdoIHRvIGVtYnJhY2UgeW91cgorbGFyZ2VzdCBjbGFzcyBvciBtb2R1bGUuCisKK0ZpbmFsbHksIGlmIHlvdSBkbyBub3QgbGlrZSB0byBzZWUgdG9vIG1hbnkgY29sb3IgaXRlbXMgYXJvdW5kLCB5b3UgY2FuIGRlZmluZQorInJ1Ynlfbm9faWRlbnRpZmllcnMiOiA+CisJOmxldCBydWJ5X25vX2lkZW50aWZpZXJzID0gMQorVGhpcyB3aWxsIHByZXZlbnQgaGlnaGxpZ2h0aW5nIG9mIHNwZWNpYWwgaWRlbnRpZmllcnMgbGlrZSAiQ29uc3RhbnROYW1lIiwKKyIkZ2xvYmFsX3ZhciIsICJAaW5zdGFuY2VfdmFyIiwgInwgaXRlcmF0b3IgfCIsIGFuZCAiOnN5bWJvbCIuCisKKworU0RMCQkJCQkJKnNkbC52aW0qICpzZGwtc3ludGF4KgorCitUaGUgU0RMIGhpZ2hsaWdodGluZyBwcm9iYWJseSBtaXNzZXMgYSBmZXcga2V5d29yZHMsIGJ1dCBTREwgaGFzIHNvIG1hbnkKK29mIHRoZW0gaXQncyBhbG1vc3QgaW1wb3NzaWJseSB0byBjb3BlLgorCitUaGUgbmV3IHN0YW5kYXJkLCBTREwtMjAwMCwgc3BlY2lmaWVzIHRoYXQgYWxsIGlkZW50aWZpZXJzIGFyZQorY2FzZS1zZW5zaXRpdmUgKHdoaWNoIHdhcyBub3Qgc28gYmVmb3JlKSwgYW5kIHRoYXQgYWxsIGtleXdvcmRzIGNhbiBiZQordXNlZCBlaXRoZXIgY29tcGxldGVseSBsb3dlcmNhc2Ugb3IgY29tcGxldGVseSB1cHBlcmNhc2UuIFRvIGhhdmUgdGhlCitoaWdobGlnaHRpbmcgcmVmbGVjdCB0aGlzLCB5b3UgY2FuIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlOiA+CisJOmxldCBzZGxfMjAwMD0xCisKK1RoaXMgYWxzbyBzZXRzIG1hbnkgbmV3IGtleXdvcmRzLiBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoZSBvbGQKK2tleXdvcmRzLCB3aGljaCBpcyBwcm9iYWJseSBhIGdvb2QgaWRlYSwgdXNlOiA+CisJOmxldCBTRExfbm9fOTY9MQorCisKK1RoZSBpbmRlbnRhdGlvbiBpcyBwcm9iYWJseSBhbHNvIGluY29tcGxldGUsIGJ1dCByaWdodCBub3cgSSBhbSB2ZXJ5CitzYXRpc2ZpZWQgd2l0aCBpdCBmb3IgbXkgb3duIHByb2plY3RzLgorCisKK1NFRAkJCQkJCSpzZWQudmltKiAqc2VkLXN5bnRheCoKKworVG8gbWFrZSB0YWJzIHN0YW5kIG91dCBmcm9tIHJlZ3VsYXIgYmxhbmtzIChhY2NvbXBsaXNoZWQgYnkgdXNpbmcgVG9kbworaGlnaGxpZ2h0aW5nIG9uIHRoZSB0YWJzKSwgZGVmaW5lICJoaWdobGlnaHRfc2VkdGFicyIgYnkgcHV0dGluZyA+CisKKwk6bGV0IGhpZ2hsaWdodF9zZWR0YWJzID0gMQorCitpbiB0aGUgdmltcmMgZmlsZS4gIChUaGlzIHNwZWNpYWwgaGlnaGxpZ2h0aW5nIG9ubHkgYXBwbGllcyBmb3IgdGFicworaW5zaWRlIHNlYXJjaCBwYXR0ZXJucywgcmVwbGFjZW1lbnQgdGV4dHMsIGFkZHJlc3NlcyBvciB0ZXh0IGluY2x1ZGVkCitieSBhbiBBcHBlbmQvQ2hhbmdlL0luc2VydCBjb21tYW5kLikgIElmIHlvdSBlbmFibGUgdGhpcyBvcHRpb24sIGl0IGlzCithbHNvIGEgZ29vZCBpZGVhIHRvIHNldCB0aGUgdGFiIHdpZHRoIHRvIG9uZSBjaGFyYWN0ZXI7IGJ5IGRvaW5nIHRoYXQsCit5b3UgY2FuIGVhc2lseSBjb3VudCB0aGUgbnVtYmVyIG9mIHRhYnMgaW4gYSBzdHJpbmcuCisKK0J1Z3M6CisKKyAgVGhlIHRyYW5zZm9ybSBjb21tYW5kICh5KSBpcyB0cmVhdGVkIGV4YWN0bHkgbGlrZSB0aGUgc3Vic3RpdHV0ZQorICBjb21tYW5kLiAgVGhpcyBtZWFucyB0aGF0LCBhcyBmYXIgYXMgdGhpcyBzeW50YXggZmlsZSBpcyBjb25jZXJuZWQsCisgIHRyYW5zZm9ybSBhY2NlcHRzIHRoZSBzYW1lIGZsYWdzIGFzIHN1YnN0aXR1dGUsIHdoaWNoIGlzIHdyb25nLgorICAoVHJhbnNmb3JtIGFjY2VwdHMgbm8gZmxhZ3MuKSAgSSB0b2xlcmF0ZSB0aGlzIGJ1ZyBiZWNhdXNlIHRoZQorICBpbnZvbHZlZCBjb21tYW5kcyBuZWVkIHZlcnkgY29tcGxleCB0cmVhdG1lbnQgKDk1IHBhdHRlcm5zLCBvbmUgZm9yCisgIGVhY2ggcGxhdXNpYmxlIHBhdHRlcm4gZGVsaW1pdGVyKS4KKworCitTR01MCQkJCQkJKnNnbWwudmltKiAqc2dtbC1zeW50YXgqCisKK1RoZSBjb2xvcmluZyBzY2hlbWUgZm9yIHRhZ3MgaW4gdGhlIFNHTUwgZmlsZSB3b3JrcyBhcyBmb2xsb3dzLgorCitUaGUgPD4gb2Ygb3BlbmluZyB0YWdzIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IHRoYW4gdGhlIDwvPiBvZiBhIGNsb3NpbmcgdGFnLgorVGhpcyBpcyBvbiBwdXJwb3NlISBGb3Igb3BlbmluZyB0YWdzIHRoZSAnRnVuY3Rpb24nIGNvbG9yIGlzIHVzZWQsIHdoaWxlIGZvcgorY2xvc2luZyB0YWdzIHRoZSAnVHlwZScgY29sb3IgaXMgdXNlZCAoU2VlIHN5bnRheC52aW0gdG8gY2hlY2sgaG93IHRob3NlIGFyZQorZGVmaW5lZCBmb3IgeW91KQorCitLbm93biB0YWcgbmFtZXMgYXJlIGNvbG9yZWQgdGhlIHNhbWUgd2F5IGFzIHN0YXRlbWVudHMgaW4gQy4gIFVua25vd24gdGFnCituYW1lcyBhcmUgbm90IGNvbG9yZWQgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBzcG90IGVycm9ycy4KKworTm90ZSB0aGF0IHRoZSBzYW1lIGlzIHRydWUgZm9yIGFyZ3VtZW50IChvciBhdHRyaWJ1dGUpIG5hbWVzLiBLbm93biBhdHRyaWJ1dGUKK25hbWVzIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IHRoYW4gdW5rbm93biBvbmVzLgorCitTb21lIFNHTUwgdGFncyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIHJlbmRlcmluZyBvZiB0ZXh0LiBUaGUgZm9sbG93aW5nIHRhZ3MKK2FyZSByZWNvZ25pemVkIGJ5IHRoZSBzZ21sLnZpbSBzeW50YXggY29sb3JpbmcgZmlsZSBhbmQgY2hhbmdlIHRoZSB3YXkgbm9ybWFsCit0ZXh0IGlzIHNob3duOiA8dmFybmFtZT4gPGVtcGhhc2lzPiA8Y29tbWFuZD4gPGZ1bmN0aW9uPiA8bGl0ZXJhbD4KKzxyZXBsYWNlYWJsZT4gPHVsaW5rPiBhbmQgPGxpbms+LgorCitJZiB5b3Ugd2FudCB0byBjaGFuZ2UgaG93IHN1Y2ggdGV4dCBpcyByZW5kZXJlZCwgeW91IG11c3QgcmVkZWZpbmUgdGhlCitmb2xsb3dpbmcgc3ludGF4IGdyb3VwczoKKworICAgIC0gc2dtbEJvbGQKKyAgICAtIHNnbWxCb2xkSXRhbGljCisgICAgLSBzZ21sVW5kZXJsaW5lCisgICAgLSBzZ21sSXRhbGljCisgICAgLSBzZ21sTGluayBmb3IgbGlua3MKKworVG8gbWFrZSB0aGlzIHJlZGVmaW5pdGlvbiB3b3JrIHlvdSBtdXN0IHJlZGVmaW5lIHRoZW0gYWxsIGFuZCBkZWZpbmUgdGhlCitmb2xsb3dpbmcgdmFyaWFibGUgaW4geW91ciB2aW1yYyAodGhpcyBpcyBkdWUgdG8gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmaWxlcworYXJlIHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSA+CisgICBsZXQgc2dtbF9teV9yZW5kZXJpbmc9MQorCitZb3UgY2FuIGFsc28gZGlzYWJsZSB0aGlzIHJlbmRlcmluZyBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIKK3ZpbXJjIGZpbGU6ID4KKyAgIGxldCBzZ21sX25vX3JlbmRlcmluZz0xCisKKyhBZGFwdGVkIGZyb20gdGhlIGh0bWwudmltIGhlbHAgdGV4dCBieSBDbGF1ZGlvIEZsZWluZXIgPGNsYXVkaW9AZmxlaW5lci5jb20+KQorCisKK1NICQkJCQkJKnNoLnZpbSogKnNoLXN5bnRheCoKKworVGhpcyBjb3ZlcnMgdGhlICJub3JtYWwiIFVuaXggKEJvdXJuZSkgc2gsIGJhc2ggYW5kIHRoZSBLb3JuIHNoZWxsLgorCitWaW0gYXR0ZW1wdHMgdG8gZGV0ZXJtaW5lIHdoaWNoIHNoZWxsIHR5cGUgaXMgaW4gdXNlIGJ5IHNwZWNpZnlpbmcgdGhhdAordmFyaW91cyBmaWxlbmFtZXMgYXJlIG9mIHNwZWNpZmljIHR5cGVzOiA+CisKKyAgICBrc2ggOiAua3NocmMqICoua3NoCisgICAgYmFzaDogLmJhc2hyYyogYmFzaHJjIGJhc2guYmFzaHJjIC5iYXNoX3Byb2ZpbGUqICouYmFzaAorPAorSWYgbm9uZSBvZiB0aGVzZSBjYXNlcyBwZXJ0YWluLCB0aGVuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmaWxlIGlzIGV4YW1pbmVkCisoZXguIC9iaW4vc2ggIC9iaW4va3NoCS9iaW4vYmFzaCkuICBJZiB0aGUgZmlyc3QgbGluZSBzcGVjaWZpZXMgYSBzaGVsbHR5cGUsCit0aGVuIHRoYXQgc2hlbGx0eXBlIGlzIHVzZWQuICBIb3dldmVyIHNvbWUgZmlsZXMgKGV4LiAucHJvZmlsZSkgYXJlIGtub3duIHRvCitiZSBzaGVsbCBmaWxlcyBidXQgdGhlIHR5cGUgaXMgbm90IGFwcGFyZW50LiAgRnVydGhlcm1vcmUsIG9uIG1hbnkgc3lzdGVtcworc2ggaXMgc3ltYm9saWNhbGx5IGxpbmtlZCB0byAiYmFzaCIgKGxpbnV4KSBvciAia3NoIiAocG9zaXgpLgorCitPbmUgbWF5IHNwZWNpZnkgYSBnbG9iYWwgZGVmYXVsdCBieSBpbnN0YW50aWF0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRocmVlCit2YXJpYWJsZXMgaW4geW91ciA8LnZpbXJjPjoKKworICAgIGtzaDogPgorCWxldCBpc19rb3Juc2hlbGwgPSAxCis8ICAgYmFzaDogPgorCWxldCBpc19iYXNoCSA9IDEKKzwgICBzaDogPgorCWxldCBpc19zaAkgPSAxCisKK0lmLCBpbiB5b3VyIDwudmltcmM+LCB5b3Ugc2V0ID4KKwlsZXQgZzpzaF9mb2xkX2VuYWJsZWQ9IDEKKz4KK3RoZW4gdmFyaW91cyBzeW50YXggaXRlbXMgKEhlcmVEb2N1bWVudHMgYW5kIGZ1bmN0aW9uIGJvZGllcykgYmVjb21lCitzeW50YXgtZm9sZGFibGUgKHNlZSB8OnN5bi1mb2xkfCkuCisKK0lmIHlvdSBub3RpY2UgaGlnaGxpZ2h0aW5nIGVycm9ycyB3aGlsZSBzY3JvbGxpbmcgYmFja3dhcmRzLCB3aGljaCBhcmUgZml4ZWQKK3doZW4gcmVkcmF3aW5nIHdpdGggQ1RSTC1MLCB0cnkgc2V0dGluZyB0aGUgInNoX21pbmxpbmVzIiBpbnRlcm5hbCB2YXJpYWJsZQordG8gYSBsYXJnZXIgbnVtYmVyLiAgRXhhbXBsZTogPgorCisJbGV0IHNoX21pbmxpbmVzID0gNTAwCisKK1RoaXMgd2lsbCBtYWtlIHN5bnRheCBzeW5jaHJvbml6YXRpb24gc3RhcnQgNTAwIGxpbmVzIGJlZm9yZSB0aGUgZmlyc3QKK2Rpc3BsYXllZCBsaW5lLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjAwLiAgVGhlIGRpc2FkdmFudGFnZSBvZiB1c2luZyBhIGxhcmdlcgorbnVtYmVyIGlzIHRoYXQgcmVkcmF3aW5nIGNhbiBiZWNvbWUgc2xvdy4KKworSWYgeW91IGRvbid0IGhhdmUgbXVjaCB0byBzeW5jaHJvbml6ZSBvbiwgZGlzcGxheWluZyBjYW4gYmUgdmVyeSBzbG93LglUbworcmVkdWNlIHRoaXMsIHRoZSAic2hfbWF4bGluZXMiIGludGVybmFsIHZhcmlhYmxlIGNhbiBiZSBzZXQuICBFeGFtcGxlOiA+CisKKwlsZXQgc2hfbWF4bGluZXMgPSAxMDAKKzwKK1RoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgdHdpY2Ugc2hfbWlubGluZXMuICBTZXQgaXQgdG8gYSBzbWFsbGVyIG51bWJlciB0bworc3BlZWQgdXAgZGlzcGxheWluZy4gIFRoZSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCBoaWdobGlnaHQgZXJyb3JzIG1heSBhcHBlYXIuCisKKworU1BFRURVUCAoQXNwZW5UZWNoIHBsYW50IHNpbXVsYXRvcikJCSpzcHVwLnZpbSogKnNwdXAtc3ludGF4KgorCitUaGUgU3BlZWR1cCBzeW50YXggZmlsZSBoYXMgc29tZSBvcHRpb25zOgorCistIHN0cmljdF9zdWJzZWN0aW9ucyA6IElmIHRoaXMgdmFyaWFibGUgaXMgZGVmaW5lZCwgb25seSBrZXl3b3JkcyBmb3IKKyAgc2VjdGlvbnMgYW5kIHN1YnNlY3Rpb25zIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgYXMgc3RhdGVtZW50cyBidXQgbm90CisgIG90aGVyIGtleXdvcmRzIChsaWtlIFdJVEhJTiBpbiB0aGUgT1BFUkFUSU9OIHNlY3Rpb24pLgorCistIGhpZ2hsaWdodF90eXBlcyA6IERlZmluaXRpb24gb2YgdGhpcyB2YXJpYWJsZSBjYXVzZXMgc3RyZWFtIHR5cGVzCisgIGxpa2UgdGVtcGVyYXR1cmUgb3IgcHJlc3N1cmUgdG8gYmUgaGlnaGxpZ2h0ZWQgYXMgVHlwZSwgbm90IGFzIGEKKyAgcGxhaW4gSWRlbnRpZmllci4gSW5jbHVkZWQgYXJlIHRoZSB0eXBlcyB0aGF0IGFyZSB1c3VhbGx5IGZvdW5kIGluCisgIHRoZSBERUNMQVJFIHNlY3Rpb247IGlmIHlvdSBkZWZpbmVkIG93biB0eXBlcywgeW91IGhhdmUgdG8gaW5jbHVkZQorICB0aGVtIGluIHRoZSBzeW50YXggZmlsZS4KKworLSBvbmVsaW5lX2NvbW1lbnRzIDogdGhpcyB2YWx1ZSByYW5nZXMgZnJvbSAxIHRvIDMgYW5kIGRldGVybWluZXMgdGhlCisgIGhpZ2hsaWdodGluZyBvZiAjIHN0eWxlIGNvbW1lbnRzLgorCisgIG9uZWxpbmVfY29tbWVudHMgPSAxIDogYWxsb3cgbm9ybWFsIFNwZWVkdXAgY29kZSBhZnRlciBhbiBldmVuCisgIG51bWJlciBvZiAjcy4KKworICBvbmVsaW5lX2NvbW1lbnRzID0gMiA6IHNob3cgY29kZSBzdGFydGluZyB3aXRoIHRoZSBzZWNvbmQgIyBhcworICBlcnJvci4gVGhpcyBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLgorCisgIG9uZWxpbmVfY29tbWVudHMgPSAzIDogc2hvdyB0aGUgd2hvbGUgbGluZSBhcyBlcnJvciBpZiBpdCBjb250YWlucworICBtb3JlIHRoYW4gb25lICMuCisKK1NpbmNlIGVzcGVjaWFsbHkgT1BFUkFUSU9OIHNlY3Rpb25zIHRlbmQgdG8gYmVjb21lIHZlcnkgbGFyZ2UgZHVlIHRvCitQUkVTRVR0aW5nIHZhcmlhYmxlcywgc3luY2luZyBtYXkgYmUgY3JpdGljYWwuIElmIHlvdXIgY29tcHV0ZXIgaXMKK2Zhc3QgZW5vdWdoLCB5b3UgY2FuIGluY3JlYXNlIG1pbmxpbmVzIGFuZC9vciBtYXhsaW5lcyBuZWFyIHRoZSBlbmQgb2YKK3RoZSBzeW50YXggZmlsZS4KKworCitUQ1NICQkJCQkJKnRjc2gudmltKiAqdGNzaC1zeW50YXgqCisKK1RoaXMgY292ZXJzIHRoZSBzaGVsbCBuYW1lZCAidGNzaCIuICBJdCBpcyBhIHN1cGVyc2V0IG9mIGNzaC4gIFNlZSB8Y3NoLnZpbXwKK2ZvciBob3cgdGhlIGZpbGV0eXBlIGlzIGRldGVjdGVkLgorCitUY3NoIGRvZXMgbm90IGFsbG93IFwiIGluIHN0cmluZ3MgdW5sZXNzIHRoZSAiYmFja3NsYXNoX3F1b3RlIiBzaGVsbCB2YXJpYWJsZQoraXMgc2V0LiBJZiB5b3Ugd2FudCBWSU0gdG8gYXNzdW1lIHRoYXQgbm8gYmFja3NsYXNoIHF1b3RlIGNvbnN0cnVjdHMgZXhpc3QgYWRkCit0aGlzIGxpbmUgdG8geW91ciAudmltcmM6ID4KKworCTpsZXQgdGNzaF9iYWNrc2xhc2hfcXVvdGUgPSAwCisKK0lmIHlvdSBub3RpY2UgaGlnaGxpZ2h0aW5nIGVycm9ycyB3aGlsZSBzY3JvbGxpbmcgYmFja3dhcmRzLCB3aGljaCBhcmUgZml4ZWQKK3doZW4gcmVkcmF3aW5nIHdpdGggQ1RSTC1MLCB0cnkgc2V0dGluZyB0aGUgInRjc2hfbWlubGluZXMiIGludGVybmFsIHZhcmlhYmxlCit0byBhIGxhcmdlciBudW1iZXI6ID4KKworCTpsZXQgdGNzaF9taW5saW5lcyA9IDEwMAorCitUaGlzIHdpbGwgbWFrZSB0aGUgc3ludGF4IHN5bmNocm9uaXphdGlvbiBzdGFydCAxMDAgbGluZXMgYmVmb3JlIHRoZSBmaXJzdAorZGlzcGxheWVkIGxpbmUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1LiBUaGUgZGlzYWR2YW50YWdlIG9mIHVzaW5nIGEgbGFyZ2VyCitudW1iZXIgaXMgdGhhdCByZWRyYXdpbmcgY2FuIGJlY29tZSBzbG93LgorCisKK1RFWAkJCQkJCSp0ZXgudmltKiAqdGV4LXN5bnRheCoKKworUnVuLW9uIENvbW1lbnRzL01hdGg/IH4KKworVGhlIHRleCBoaWdobGlnaHRpbmcgc3VwcG9ydHMgVGVYLCBMYVRlWCwgYW5kIHNvbWUgQW1zVGVYLiAgVGhlCitoaWdobGlnaHRpbmcgc3VwcG9ydHMgdGhyZWUgcHJpbWFyeSB6b25lczogbm9ybWFsLCB0ZXhab25lLCBhbmQgdGV4TWF0aFpvbmUuCitBbHRob3VnaCBhIGNvbnNpZGVyYWJsZSBlZmZvcnQgaGFzIGJlZW4gbWFkZSB0byBoYXZlIHRoZXNlIHpvbmVzIHRlcm1pbmF0ZQorcHJvcGVybHksIHpvbmVzIGRlbGluZWF0ZWQgYnkgJC4uJCBhbmQgJCQuLiQkIGNhbm5vdCBiZSBzeW5jaHJvbml6ZWQgYXMKK3RoZXJlJ3Mgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgcGF0dGVybnMuICBDb25zZXF1ZW50bHksIGEKK3NwZWNpYWwgIlRlWCBjb21tZW50IiBoYXMgYmVlbiBwcm92aWRlZCA+CisJJXN0b3B6b25lCit3aGljaCB3aWxsIGZvcmNpYmx5IHRlcm1pbmF0ZSB0aGUgaGlnaGxpZ2h0aW5nIG9mIGVpdGhlciBhIHRleFpvbmUgb3IgYQordGV4TWF0aFpvbmUuCisKK1Nsb3cgU3ludGF4IEhpZ2hsaWdodGluZz8gfgorCitJZiB5b3UgaGF2ZSBhIHNsb3cgY29tcHV0ZXIsIHlvdSBtYXkgd2lzaCB0byByZWR1Y2UgdGhlIHZhbHVlcyBmb3IgPgorCTpzeW4gc3luYyBtYXhsaW5lcz0yMDAKKwk6c3luIHN5bmMgbWlubGluZXM9NTAKKyhlc3BlY2lhbGx5IHRoZSBsYXR0ZXIpLiAgSWYgeW91ciBjb21wdXRlciBpcyBmYXN0LCB5b3UgbWF5IHdpc2ggdG8KK2luY3JlYXNlIHRoZW0uCVRoaXMgcHJpbWFyaWx5IGFmZmVjdHMgc3luY2hyb25pemluZyAoaWUuIGp1c3Qgd2hhdCBncm91cCwKK2lmIGFueSwgaXMgdGhlIHRleHQgYXQgdGhlIHRvcCBvZiB0aGUgc2NyZWVuIHN1cHBvc2VkIHRvIGJlIGluPykuCisKK0V4Y2Vzc2l2ZSBFcnJvciBIaWdobGlnaHRpbmc/IH4KKworVGhlIDx0ZXgudmltPiBzdXBwb3J0cyBsZXhpY2FsIGVycm9yIGNoZWNraW5nIG9mIHZhcmlvdXMgc29ydHMuICBUaHVzLAorYWx0aG91Z2ggdGhlIGVycm9yIGNoZWNraW5nIGlzIG9mdHRpbWVzIHZlcnkgdXNlZnVsLCBpdCBjYW4gaW5kaWNhdGUKK2Vycm9ycyB3aGVyZSBub25lIGFjdHVhbGx5IGFyZS4gIElmIHRoaXMgcHJvdmVzIHRvIGJlIGEgcHJvYmxlbSBmb3IgeW91LAoreW91IG1heSBwdXQgaW4geW91ciA8LnZpbXJjPiB0aGUgZm9sbG93aW5nIHN0YXRlbWVudDogPgorCWxldCB0ZXhfbm9fZXJyb3I9MQorYW5kIGFsbCBlcnJvciBjaGVja2luZyBieSA8dGV4LnZpbT4gd2lsbCBiZSBzdXBwcmVzc2VkLgorCitOZWVkIGEgbmV3IE1hdGggR3JvdXA/IH4KKworSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBhIG5ldyBtYXRoIGdyb3VwIGluIHlvdXIgTGFUZVgsIHRoZSBmb2xsb3dpbmcKK2NvZGUgc2hvd3MgeW91IGFuIGV4YW1wbGUgYXMgdG8gaG93IHlvdSBtaWdodCBkbyBzbzogPgorCisgICAgc3luIGNsdXN0ZXIgdGV4TWF0aFpvbmVzIGFkZD10ZXhNYXRoWm9uZUxPQ0FMCisgICAgc3luIHJlZ2lvbiB0ZXhNYXRoWm9uZUxPQ0FMIHN0YXJ0PSJcXGJlZ2luXHMqe1xzKkxPQ0FMTUFUSFxzKn0iCisgICAgICAgXCBlbmQ9IlxcZW5kXHMqe1xzKkxPQ0FMTUFUSFxzKn0iIGtlZXBlbmQKKyAgICAgICBcIGNvbnRhaW5zPUB0ZXhNYXRoWm9uZUdyb3VwCisgICAgaWYgIWV4aXN0cygidGV4X25vX21hdGgiKQorICAgICBzeW4gc3luYyBtYXRjaCB0ZXhTeW5jTWF0aFpvbmVMT0NBTCBncm91cGhlcmUgdGV4TWF0aFpvbmVMT0NBTAorICAgICAgIFwgIlxcYmVnaW5ccyp7XHMqTE9DQUxNQVRIXCpccyp9IgorICAgICBzeW4gc3luYyBtYXRjaCB0ZXhTeW5jTWF0aFpvbmVMT0NBTCBncm91cHRoZXJlIE5PTkUKKyAgICAgICBcICJcXGVuZFxzKntccypMT0NBTE1BVEhcKlxzKn0iCisgICAgZW5kaWYKKyAgICBoaSBsaW5rIHRleE1hdGhab25lTE9DQUwgdGV4TWF0aAorPAorWW91J2xsIG5lZWQgdG8gY2hhbmdlIExPQ0FMTUFUSCB0byB0aGUgbmFtZSBvZiB5b3VyIG5ldyBtYXRoIGdyb3VwLAorYW5kIHRoZW4gdG8gcHV0IGl0IGludG8gLnZpbS9hZnRlci9zeW50YXgvdGV4LnZpbS4KKworU3RhcnRpbmcgYSBOZXcgU3R5bGU/IH4KKworT25lIG1heSB1c2UgIlxtYWtlYXRsZXR0ZXIiIGluICoudGV4IGZpbGVzLCB0aGVyZWJ5IG1ha2luZyB0aGUgdXNlIG9mICJAIiBpbgorY29tbWFuZHMgYXZhaWxhYmxlLiAgSG93ZXZlciwgc2luY2UgdGhlICoudGV4IGZpbGUgZG9lc24ndCBoYXZlIG9uZSBvZiB0aGUKK2ZvbGxvd2luZyBzdWZmaWNlczogc3R5IGNscyBjbG8gZHR4IGx0eCwgdGhlIHN5bnRheCBoaWdobGlnaHRpbmcgd2lsbCBmbGFnCitzdWNoIHVzZSBvZiBAIGFzIGFuIGVycm9yLiAgVG8gc29sdmUgdGhpczogPgorCisJOmxldCBiOnRleF9zdHlsaXNoID0gMQorCTpzZXQgZnQ9dGV4CisKK1B1dHRpbmcgImxldCBnOnRleF9zdHlsaXNoPTEiIGludG8geW91ciA8LnZpbXJjPiB3aWxsIG1ha2UgPHN5bnRheC90ZXgudmltPgorYWx3YXlzIGFjY2VwdCBzdWNoIHVzZSBvZiBALgorCisKK1RGCQkJCQkJKnRmLnZpbSogKnRmLXN5bnRheCoKKworVGhlcmUgaXMgb25lIG9wdGlvbiBmb3IgdGhlIHRmIHN5bnRheCBoaWdobGlnaHRpbmcuCisKK0ZvciBzeW5jaW5nLCBtaW5saW5lcyBkZWZhdWx0cyB0byAxMDAuCUlmIHlvdSBwcmVmZXIgYW5vdGhlciB2YWx1ZSwgeW91IGNhbgorc2V0ICJ0Zl9taW5saW5lcyIgdG8gdGhlIHZhbHVlIHlvdSBkZXNpcmUuICBFeGFtcGxlOiA+CisKKwk6bGV0IHRmX21pbmxpbmVzID0geW91ciBjaG9pY2UKKworCitWSU0JCQkJCQkqdmltLnZpbSogKnZpbS1zeW50YXgqCisKK1RoZXJlIGlzIGEgdHJhZGVvZmYgYmV0d2VlbiBtb3JlIGFjY3VyYXRlIHN5bnRheCBoaWdobGlnaHRpbmcgdmVyc3VzCitzY3JlZW4gdXBkYXRpbmcgc3BlZWQuICBUbyBpbXByb3ZlIGFjY3VyYWN5LCB5b3UgbWF5IHdpc2ggdG8gaW5jcmVhc2UKK3RoZSBnOnZpbV9taW5saW5lcyB2YXJpYWJsZS4gIFRoZSBnOnZpbV9tYXhsaW5lcyB2YXJpYWJsZSBtYXkgYmUgdXNlZAordG8gaW1wcm92ZSBzY3JlZW4gdXBkYXRpbmcgcmF0ZXMgKHNlZSB8OnN5bi1zeW5jfCBmb3IgbW9yZSBvbiB0aGlzKS4KKworCWc6dmltX21pbmxpbmVzIDogdXNlZCB0byBzZXQgc3luY2hyb25pemF0aW9uIG1pbmxpbmVzCisJZzp2aW1fbWF4bGluZXMgOiB1c2VkIHRvIHNldCBzeW5jaHJvbml6YXRpb24gbWF4bGluZXMKKworVGhlIGc6dmltZW1iZWRzY3JpcHQgb3B0aW9uIGFsbG93cyBmb3Igc29tZXdoYXQgZmFzdGVyIGxvYWRpbmcgb2Ygc3ludGF4CitoaWdobGlnaHRpbmcgZm9yIHZpbSBzY3JpcHRzIGF0IHRoZSBleHBlbnNlIG9mIHN1cHBvcnRpbmcgc3ludGF4IGhpZ2hsaWdodGluZworZm9yIGV4dGVybmFsIHNjcmlwdGluZyBsYW5ndWFnZXMgKGN1cnJlbnRseSBwZXJsLCBweXRob24sIHJ1YnksIGFuZCB0Y2wpLgorCisJZzp2aW1lbWJlZHNjcmlwdCA9PSAxIChkZWZhdWx0KSAgPHZpbS52aW0+IHdpbGwgYWxsb3cgaGlnaGxpZ2h0aW5nCisJZzp2aW1lbWJlZHNjcmlwdCBkb2Vzbid0IGV4aXN0CSBvZiBzdXBwb3J0ZWQgZW1iZWRkZWQgc2NyaXB0aW5nCisJCQkJCSBsYW5ndWFnZXM6IHBlcmwsIHB5dGhvbiwgcnVieSBhbmQKKwkJCQkJIHRjbC4KKworCWc6dmltZW1iZWRzY3JpcHQgPT0gMAkJIFN5bnRheCBoaWdobGlnaHRpbmcgZm9yIGVtYmVkZGVkCisJCQkJCSBzY3JpcHRpbmcgbGFuZ3VhZ2VzIHdpbGwgbm90IGJlCisJCQkJCSBsb2FkZWQuCisKKworWEY4NkNPTkZJRwkJCQkqeGY4NmNvbmYudmltKiAqeGY4NmNvbmYtc3ludGF4KgorCitUaGUgc3ludGF4IG9mIFhGODZDb25maWcgZmlsZSBkaWZmZXJzIGluIFhGcmVlODYgdjMueCBhbmQgdjQueC4gIEJvdGgKK3ZhcmlhbnRzIGFyZSBzdXBwb3J0ZWQuICBBdXRvbWF0aWMgZGV0ZWN0aW9uIGlzIHVzZWQsIGJ1dCBpcyBmYXIgZnJvbSBwZXJmZWN0LgorWW91IG1heSBuZWVkIHRvIHNwZWNpZnkgdGhlIHZlcnNpb24gbWFudWFsbHkuICBTZXQgdGhlIHZhcmlhYmxlCit4Zjg2Y29uZl94ZnJlZTg2X3ZlcnNpb24gdG8gMyBvciA0IGFjY29yZGluZyB0byB5b3VyIFhGcmVlODYgdmVyc2lvbiBpbgoreW91ciAudmltcmMuICBFeGFtcGxlOiA+CisJOmxldCB4Zjg2Y29uZl94ZnJlZTg2X3ZlcnNpb249MworV2hlbiB1c2luZyBhIG1peCBvZiB2ZXJzaW9ucywgc2V0IHRoZSBiOnhmODZjb25mX3hmcmVlODZfdmVyc2lvbiB2YXJpYWJsZS4KKworTm90ZSB0aGF0IHNwYWNlcyBhbmQgdW5kZXJzY29yZXMgaW4gb3B0aW9uIG5hbWVzIGFyZSBub3Qgc3VwcG9ydGVkLiAgVXNlCisiU3luY09uR3JlZW4iIGluc3RlYWQgb2YgIl9fcyB5biBjb24gZ3JfZV9lX24iIGlmIHlvdSB3YW50IHRoZSBvcHRpb24gbmFtZQoraGlnaGxpZ2h0ZWQuCisKKworWE1MCQkJCQkJKnhtbC52aW0qICp4bWwtc3ludGF4KgorCitYbWwgbmFtZXNwYWNlcyBhcmUgaGlnaGxpZ2h0ZWQgYnkgZGVmYXVsdC4gVGhpcyBjYW4gYmUgaW5oaWJpdGVkIGJ5CitzZXR0aW5nIGEgZ2xvYmFsIHZhcmlhYmxlOiA+CisKKwk6bGV0IGc6eG1sX25hbWVzcGFjZV90cmFuc3BhcmVudD0xCis8CisJCQkJCQkJKnhtbC1mb2xkaW5nKgorVGhlIHhtbCBzeW50YXggZmlsZSBwcm92aWRlcyBzeW50YXggfGZvbGRpbmd8IChzZWUgfDpzeW4tZm9sZHwpIGJldHdlZW4KK3N0YXJ0IGFuZCBlbmQgdGFncy4gVGhpcyBjYW4gYmUgdHVybmVkIG9uIGJ5ID4KKworCTpsZXQgZzp4bWxfc3ludGF4X2ZvbGRpbmcgPSAxCisJOnNldCBmb2xkbWV0aG9kPXN5bnRheAorCitOb3RlOiBzeW50YXggZm9sZGluZyBtaWdodCBzbG93IGRvd24gc3ludGF4IGhpZ2hsaWdodGluZyBzaWduaWZpY2FudGx5LAorZXNwZWNpYWxseSBmb3IgbGFyZ2UgZmlsZXMuCisKKworWCBQaXhtYXBzIChYUE0pCQkJCQkqeHBtLnZpbSogKnhwbS1zeW50YXgqCisKK3hwbS52aW0gY3JlYXRlcyBpdHMgc3ludGF4IGl0ZW1zIGR5bmFtaWNhbGx5IGJhc2VkIHVwb24gdGhlIGNvbnRlbnRzIG9mIHRoZQorWFBNIGZpbGUuICBUaHVzIGlmIHlvdSBtYWtlIGNoYW5nZXMgZS5nLiBpbiB0aGUgY29sb3Igc3BlY2lmaWNhdGlvbiBzdHJpbmdzLAoreW91IGhhdmUgdG8gc291cmNlIGl0IGFnYWluIGUuZy4gd2l0aCAiOnNldCBzeW49eHBtIi4KKworVG8gY29weSBhIHBpeGVsIHdpdGggb25lIG9mIHRoZSBjb2xvcnMsIHlhbmsgYSAicGl4ZWwiIHdpdGggInlsIiBhbmQgaW5zZXJ0IGl0Citzb21ld2hlcmUgZWxzZSB3aXRoICJQIi4KKworRG8geW91IHdhbnQgdG8gZHJhdyB3aXRoIHRoZSBtb3VzZT8gIFRyeSB0aGUgZm9sbG93aW5nOiA+CisgICA6ZnVuY3Rpb24hIEdldFBpeGVsKCkKKyAgIDogICBsZXQgYyA9IGdldGxpbmUobGluZSgiLiIpKVtjb2woIi4iKSAtIDFdCisgICA6ICAgZWNobyBjCisgICA6ICAgZXhlICJub3JlbWFwIDxMZWZ0TW91c2U+IDxMZWZ0TW91c2U+ciIuYworICAgOiAgIGV4ZSAibm9yZW1hcCA8TGVmdERyYWc+CTxMZWZ0TW91c2U+ciIuYworICAgOmVuZGZ1bmN0aW9uCisgICA6bm9yZW1hcCA8UmlnaHRNb3VzZT4gPExlZnRNb3VzZT46Y2FsbCBHZXRQaXhlbCgpPENSPgorICAgOnNldCBndWljdXJzb3I9bjpob3IyMAkgICAiIHRvIHNlZSB0aGUgY29sb3IgYmVuZWF0aCB0aGUgY3Vyc29yCitUaGlzIHR1cm5zIHRoZSByaWdodCBidXR0b24gaW50byBhIHBpcGV0dGUgYW5kIHRoZSBsZWZ0IGJ1dHRvbiBpbnRvIGEgcGVuLgorSXQgd2lsbCB3b3JrIHdpdGggWFBNIGZpbGVzIHRoYXQgaGF2ZSBvbmUgY2hhcmFjdGVyIHBlciBwaXhlbCBvbmx5IGFuZCB5b3UKK211c3Qgbm90IGNsaWNrIG91dHNpZGUgb2YgdGhlIHBpeGVsIHN0cmluZ3MsIGJ1dCBmZWVsIGZyZWUgdG8gaW1wcm92ZSBpdC4KKworSXQgd2lsbCBsb29rIG11Y2ggYmV0dGVyIHdpdGggYSBmb250IGluIGEgcXVhZHJhdGljIGNlbGwgc2l6ZSwgZS5nLiBmb3IgWDogPgorCTpzZXQgZ3VpZm9udD0tKi1jbGVhbi1tZWRpdW0tci0qLSotOC0qLSotKi0qLTgwLSoKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBEZWZpbmluZyBhIHN5bnRheAkJCQkJKjpzeW4tZGVmaW5lKiAqRTQxMCoKKworVmltIHVuZGVyc3RhbmRzIHRocmVlIHR5cGVzIG9mIHN5bnRheCBpdGVtczoKKworMS4gS2V5d29yZC4KKyAgIEl0IGNhbiBvbmx5IGNvbnRhaW4ga2V5d29yZCBjaGFyYWN0ZXJzLCBhY2NvcmRpbmcgdG8gdGhlICdpc2tleXdvcmQnCisgICBvcHRpb24uICBJdCBjYW5ub3QgY29udGFpbiBvdGhlciBzeW50YXggaXRlbXMuICBJdCB3aWxsIG9ubHkgbWF0Y2ggd2l0aCBhCisgICBjb21wbGV0ZSB3b3JkICh0aGVyZSBhcmUgbm8ga2V5d29yZCBjaGFyYWN0ZXJzIGJlZm9yZSBvciBhZnRlciB0aGUgbWF0Y2gpLgorICAgVGhlIGtleXdvcmQgImlmIiB3b3VsZCBtYXRjaCBpbiAiaWYoYT1iKSIsIGJ1dCBub3QgaW4gImlmZGVmIHgiLCBiZWNhdXNlCisgICAiKCIgaXMgbm90IGEga2V5d29yZCBjaGFyYWN0ZXIgYW5kICJkIiBpcy4KKworMi4gTWF0Y2guCisgICBUaGlzIGlzIGEgbWF0Y2ggd2l0aCBhIHNpbmdsZSByZWdleHAgcGF0dGVybi4KKworMy4gUmVnaW9uLgorICAgVGhpcyBzdGFydHMgYXQgYSBtYXRjaCBvZiB0aGUgInN0YXJ0IiByZWdleHAgcGF0dGVybiBhbmQgZW5kcyB3aXRoIGEgbWF0Y2gKKyAgIHdpdGggdGhlICJlbmQiIHJlZ2V4cCBwYXR0ZXJuLiAgQW55IG90aGVyIHRleHQgY2FuIGFwcGVhciBpbiBiZXR3ZWVuLiAgQQorICAgInNraXAiIHJlZ2V4cCBwYXR0ZXJuIGNhbiBiZSB1c2VkIHRvIGF2b2lkIG1hdGNoaW5nIHRoZSAiZW5kIiBwYXR0ZXJuLgorCitTZXZlcmFsIHN5bnRheCBJVEVNcyBjYW4gYmUgcHV0IGludG8gb25lIHN5bnRheCBHUk9VUC4JRm9yIGEgc3ludGF4IGdyb3VwCit5b3UgY2FuIGdpdmUgaGlnaGxpZ2h0aW5nIGF0dHJpYnV0ZXMuICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGhhdmUgYW4gaXRlbQordG8gZGVmaW5lIGEgIi8qIC4uICovIiBjb21tZW50IGFuZCBhbm90aGVyIG9uZSB0aGF0IGRlZmluZXMgYSAiLy8gLi4iIGNvbW1lbnQsCithbmQgcHV0IHRoZW0gYm90aCBpbiB0aGUgIkNvbW1lbnQiIGdyb3VwLiAgWW91IGNhbiB0aGVuIHNwZWNpZnkgdGhhdCBhCisiQ29tbWVudCIgd2lsbCBiZSBpbiBib2xkIGZvbnQgYW5kIGhhdmUgYSBibHVlIGNvbG9yLiAgWW91IGFyZSBmcmVlIHRvIG1ha2UKK29uZSBoaWdobGlnaHQgZ3JvdXAgZm9yIG9uZSBzeW50YXggaXRlbSwgb3IgcHV0IGFsbCBpdGVtcyBpbnRvIG9uZSBncm91cC4KK1RoaXMgZGVwZW5kcyBvbiBob3cgeW91IHdhbnQgdG8gc3BlY2lmeSB5b3VyIGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzLiAgUHV0dGluZworZWFjaCBpdGVtIGluIGl0cyBvd24gZ3JvdXAgcmVzdWx0cyBpbiBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgaGlnaGxpZ2h0aW5nCitmb3IgYSBsb3Qgb2YgZ3JvdXBzLgorCitOb3RlIHRoYXQgYSBzeW50YXggZ3JvdXAgYW5kIGEgaGlnaGxpZ2h0IGdyb3VwIGFyZSBzaW1pbGFyLiAgRm9yIGEgaGlnaGxpZ2h0Citncm91cCB5b3Ugd2lsbCBoYXZlIGdpdmVuIGhpZ2hsaWdodCBhdHRyaWJ1dGVzLiAgVGhlc2UgYXR0cmlidXRlcyB3aWxsIGJlIHVzZWQKK2ZvciB0aGUgc3ludGF4IGdyb3VwIHdpdGggdGhlIHNhbWUgbmFtZS4KKworSW4gY2FzZSBtb3JlIHRoYW4gb25lIGl0ZW0gbWF0Y2hlcyBhdCB0aGUgc2FtZSBwb3NpdGlvbiwgdGhlIG9uZSB0aGF0IHdhcworZGVmaW5lZCBMQVNUIHdpbnMuICBUaHVzIHlvdSBjYW4gb3ZlcnJpZGUgcHJldmlvdXNseSBkZWZpbmVkIHN5bnRheCBpdGVtcyBieQordXNpbmcgYW4gaXRlbSB0aGF0IG1hdGNoZXMgdGhlIHNhbWUgdGV4dC4gIEJ1dCBhIGtleXdvcmQgYWx3YXlzIGdvZXMgYmVmb3JlIGEKK21hdGNoIG9yIHJlZ2lvbi4gIEFuZCBhIGtleXdvcmQgd2l0aCBtYXRjaGluZyBjYXNlIGFsd2F5cyBnb2VzIGJlZm9yZSBhCitrZXl3b3JkIHdpdGggaWdub3JpbmcgY2FzZS4KKworCitQUklPUklUWQkJCQkJCSo6c3luLXByaW9yaXR5KgorCitXaGVuIHNldmVyYWwgc3ludGF4IGl0ZW1zIG1heSBtYXRjaCwgdGhlc2UgcnVsZXMgYXJlIHVzZWQ6CisKKzEuIFdoZW4gbXVsdGlwbGUgTWF0Y2ggb3IgUmVnaW9uIGl0ZW1zIHN0YXJ0IGluIHRoZSBzYW1lIHBvc2l0aW9uLCB0aGUgaXRlbQorICAgZGVmaW5lZCBsYXN0IGhhcyBwcmlvcml0eS4KKzIuIEEgS2V5d29yZCBoYXMgcHJpb3JpdHkgb3ZlciBNYXRjaCBhbmQgUmVnaW9uIGl0ZW1zLgorMy4gQW4gaXRlbSB0aGF0IHN0YXJ0cyBpbiBhbiBlYXJsaWVyIHBvc2l0aW9uIGhhcyBwcmlvcml0eSBvdmVyIGl0ZW1zIHRoYXQKKyAgIHN0YXJ0IGluIGxhdGVyIHBvc2l0aW9ucy4KKworCitERUZJTklORyBDQVNFCQkJCQkJKjpzeW4tY2FzZSogKkUzOTAqCisKKzpzeVtudGF4XSBjYXNlIFttYXRjaHxpZ25vcmVdCisJVGhpcyBkZWZpbmVzIGlmIHRoZSBmb2xsb3dpbmcgIjpzeW50YXgiIGNvbW1hbmRzIHdpbGwgd29yayB3aXRoCisJbWF0Y2hpbmcgY2FzZSwgd2hlbiB1c2luZyAibWF0Y2giLCBvciB3aXRoIGlnbm9yaW5nIGNhc2UsIHdoZW4gdXNpbmcKKwkiaWdub3JlIi4gIE5vdGUgdGhhdCBhbnkgaXRlbXMgYmVmb3JlIHRoaXMgYXJlIG5vdCBhZmZlY3RlZCwgYW5kIGFsbAorCWl0ZW1zIHVudGlsIHRoZSBuZXh0ICI6c3ludGF4IGNhc2UiIGNvbW1hbmQgYXJlIGFmZmVjdGVkLgorCisKK0RFRklOSU5HIEtFWVdPUkRTCQkJCQkqOnN5bi1rZXl3b3JkKgorCis6c3lbbnRheF0ga2V5d29yZCB7Z3JvdXAtbmFtZX0gW3tvcHRpb25zfV0ge2tleXdvcmR9IC4uIFt7b3B0aW9uc31dCisKKwlUaGlzIGRlZmluZXMgYSBudW1iZXIgb2Yga2V5d29yZHMuCisKKwl7Z3JvdXAtbmFtZX0JSXMgYSBzeW50YXggZ3JvdXAgbmFtZSBzdWNoIGFzICJDb21tZW50Ii4KKwlbe29wdGlvbnN9XQlTZWUgfDpzeW4tYXJndW1lbnRzfCBiZWxvdy4KKwl7a2V5d29yZH0gLi4JSXMgYSBsaXN0IG9mIGtleXdvcmRzIHdoaWNoIGFyZSBwYXJ0IG9mIHRoaXMgZ3JvdXAuCisKKwlFeGFtcGxlOiA+CisgIDpzeW50YXgga2V5d29yZCAgIFR5cGUgICBpbnQgbG9uZyBjaGFyCis8CisJVGhlIHtvcHRpb25zfSBjYW4gYmUgZ2l2ZW4gYW55d2hlcmUgaW4gdGhlIGxpbmUuICBUaGV5IHdpbGwgYXBwbHkgdG8KKwlhbGwga2V5d29yZHMgZ2l2ZW4sIGFsc28gZm9yIG9wdGlvbnMgdGhhdCBjb21lIGFmdGVyIGEga2V5d29yZC4KKwlUaGVzZSBleGFtcGxlcyBkbyBleGFjdGx5IHRoZSBzYW1lOiA+CisgIDpzeW50YXgga2V5d29yZCAgIFR5cGUgICBjb250YWluZWQgaW50IGxvbmcgY2hhcgorICA6c3ludGF4IGtleXdvcmQgICBUeXBlICAgaW50IGxvbmcgY29udGFpbmVkIGNoYXIKKyAgOnN5bnRheCBrZXl3b3JkICAgVHlwZSAgIGludCBsb25nIGNoYXIgY29udGFpbmVkCis8CisJV2hlbiB5b3UgaGF2ZSBhIGtleXdvcmQgd2l0aCBhbiBvcHRpb25hbCB0YWlsLCBsaWtlIEV4IGNvbW1hbmRzIGluCisJVmltLCB5b3UgY2FuIHB1dCB0aGUgb3B0aW9uYWwgY2hhcmFjdGVycyBpbnNpZGUgW10sIHRvIGRlZmluZSBhbGwgdGhlCisJdmFyaWF0aW9ucyBhdCBvbmNlOiA+CisgIDpzeW50YXgga2V5d29yZCAgIHZpbUNvbW1hbmQJIGFiW2JyZXZpYXRlXSBuW2V4dF0KKzwKKwlEb24ndCBmb3JnZXQgdGhhdCBhIGtleXdvcmQgY2FuIG9ubHkgYmUgcmVjb2duaXplZCBpZiBhbGwgdGhlCisJY2hhcmFjdGVycyBhcmUgaW5jbHVkZWQgaW4gdGhlICdpc2tleXdvcmQnIG9wdGlvbi4gIElmIG9uZSBjaGFyYWN0ZXIKKwlpc24ndCwgdGhlIGtleXdvcmQgd2lsbCBuZXZlciBiZSByZWNvZ25pemVkLgorCU11bHRpLWJ5dGUgY2hhcmFjdGVycyBjYW4gYWxzbyBiZSB1c2VkLiAgVGhlc2UgZG8gbm90IGhhdmUgdG8gYmUgaW4KKwknaXNrZXl3b3JkJy4KKworCUEga2V5d29yZCBhbHdheXMgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGEgbWF0Y2ggb3IgcmVnaW9uLCB0aGUKKwlrZXl3b3JkIGlzIHVzZWQgaWYgbW9yZSB0aGFuIG9uZSBpdGVtIG1hdGNoZXMuCUtleXdvcmRzIGRvIG5vdCBuZXN0CisJYW5kIGEga2V5d29yZCBjYW4ndCBjb250YWluIGFueXRoaW5nIGVsc2UuCisKKwlOb3RlIHRoYXQgd2hlbiB5b3UgaGF2ZSBhIGtleXdvcmQgdGhhdCBpcyB0aGUgc2FtZSBhcyBhbiBvcHRpb24gKGV2ZW4KKwlvbmUgdGhhdCBpc24ndCBhbGxvd2VkIGhlcmUpLCB5b3UgY2FuIG5vdCB1c2UgaXQuICBVc2UgYSBtYXRjaAorCWluc3RlYWQuCisKKwlUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBrZXl3b3JkIGlzIDgwIGNoYXJhY3RlcnMuCisKKwlUaGUgc2FtZSBrZXl3b3JkIGNhbiBiZSBkZWZpbmVkIG11bHRpcGxlIHRpbWVzLCB3aGVuIGl0cyBjb250YWlubWVudAorCWRpZmZlcnMuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBkZWZpbmUgdGhlIGtleXdvcmQgb25jZSBub3QgY29udGFpbmVkCisJYW5kIHVzZSBvbmUgaGlnaGxpZ2h0IGdyb3VwLCBhbmQgb25jZSBjb250YWluZWQsIGFuZCB1c2UgYSBkaWZmZXJlbnQKKwloaWdobGlnaHQgZ3JvdXAuIEV4YW1wbGU6ID4KKyAgOnN5biBrZXl3b3JkIHZpbUNvbW1hbmQgdGFnCisgIDpzeW4ga2V5d29yZCB2aW1TZXR0aW5nIGNvbnRhaW5lZCB0YWcKKzwJV2hlbiBmaW5kaW5nICJ0YWciIG91dHNpZGUgb2YgYW55IHN5bnRheCBpdGVtLCB0aGUgInZpbUNvbW1hbmQiCisJaGlnaGxpZ2h0IGdyb3VwIGlzIHVzZWQuICBXaGVuIGZpbmRpbmcgInRhZyIgaW4gYSBzeW50YXggaXRlbSB0aGF0CisJY29udGFpbnMgInZpbVNldHRpbmciLCB0aGUgInZpbVNldHRpbmciIGdyb3VwIGlzIHVzZWQuCisKKworREVGSU5JTkcgTUFUQ0hFUwkJCQkJKjpzeW4tbWF0Y2gqCisKKzpzeVtudGF4XSBtYXRjaCB7Z3JvdXAtbmFtZX0gW3tvcHRpb25zfV0gW2V4Y2x1ZGVubF0ge3BhdHRlcm59IFt7b3B0aW9uc31dCisKKwlUaGlzIGRlZmluZXMgb25lIG1hdGNoLgorCisJe2dyb3VwLW5hbWV9CQlBIHN5bnRheCBncm91cCBuYW1lIHN1Y2ggYXMgIkNvbW1lbnQiLgorCVt7b3B0aW9uc31dCQlTZWUgfDpzeW4tYXJndW1lbnRzfCBiZWxvdy4KKwlbZXhjbHVkZW5sXQkJRG9uJ3QgbWFrZSBhIHBhdHRlcm4gd2l0aCB0aGUgZW5kLW9mLWxpbmUgIiQiCisJCQkJZXh0ZW5kIGEgY29udGFpbmluZyBtYXRjaCBvciByZWdpb24uICBNdXN0IGJlCisJCQkJZ2l2ZW4gYmVmb3JlIHRoZSBwYXR0ZXJuLiB8OnN5bi1leGNsdWRlbmx8CisJe3BhdHRlcm59CQlUaGUgc2VhcmNoIHBhdHRlcm4gdGhhdCBkZWZpbmVzIHRoZSBtYXRjaC4KKwkJCQlTZWUgfDpzeW4tcGF0dGVybnwgYmVsb3cuCisJCQkJTm90ZSB0aGF0IHRoZSBwYXR0ZXJuIG1heSBtYXRjaCBtb3JlIHRoYW4gb25lCisJCQkJbGluZSwgd2hpY2ggbWFrZXMgdGhlIG1hdGNoIGRlcGVuZCBvbiB3aGVyZQorCQkJCVZpbSBzdGFydHMgc2VhcmNoaW5nIGZvciB0aGUgcGF0dGVybi4gIFlvdQorCQkJCW5lZWQgdG8gbWFrZSBzdXJlIHN5bmNpbmcgdGFrZXMgY2FyZSBvZiB0aGlzLgorCisJRXhhbXBsZSAobWF0Y2ggYSBjaGFyYWN0ZXIgY29uc3RhbnQpOiA+CisgIDpzeW50YXggbWF0Y2ggQ2hhcmFjdGVyIC8nLicvaHM9cysxLGhlPWUtMQorPAorCitERUZJTklORyBSRUdJT05TCSo6c3luLXJlZ2lvbiogKjpzeW4tc3RhcnQqICo6c3luLXNraXAqICo6c3luLWVuZCoKKwkJCQkJCQkqRTM5OCogKkUzOTkqCis6c3lbbnRheF0gcmVnaW9uIHtncm91cC1uYW1lfSBbe29wdGlvbnN9XQorCQlbbWF0Y2hncm91cD17Z3JvdXAtbmFtZX1dCisJCVtrZWVwZW5kXQorCQlbZXh0ZW5kXQorCQlbZXhjbHVkZW5sXQorCQlzdGFydD17c3RhcnRfcGF0dGVybn0gLi4KKwkJW3NraXA9e3NraXBfcGF0dGVybn1dCisJCWVuZD17ZW5kX3BhdHRlcm59IC4uCisJCVt7b3B0aW9uc31dCisKKwlUaGlzIGRlZmluZXMgb25lIHJlZ2lvbi4gIEl0IG1heSBzcGFuIHNldmVyYWwgbGluZXMuCisKKwl7Z3JvdXAtbmFtZX0JCUEgc3ludGF4IGdyb3VwIG5hbWUgc3VjaCBhcyAiQ29tbWVudCIuCisJW3tvcHRpb25zfV0JCVNlZSB8OnN5bi1hcmd1bWVudHN8IGJlbG93LgorCVttYXRjaGdyb3VwPXtncm91cC1uYW1lfV0gIFRoZSBzeW50YXggZ3JvdXAgdG8gdXNlIGZvciB0aGUgZm9sbG93aW5nCisJCQkJc3RhcnQgb3IgZW5kIHBhdHRlcm4gbWF0Y2hlcyBvbmx5LiAgTm90IHVzZWQKKwkJCQlmb3IgdGhlIHRleHQgaW4gYmV0d2VlbiB0aGUgbWF0Y2hlZCBzdGFydCBhbmQKKwkJCQllbmQgcGF0dGVybnMuICBVc2UgTk9ORSB0byByZXNldCB0byBub3QgdXNpbmcKKwkJCQlhIGRpZmZlcmVudCBncm91cCBmb3IgdGhlIHN0YXJ0IG9yIGVuZCBtYXRjaC4KKwkJCQlTZWUgfDpzeW4tbWF0Y2hncm91cHwuCisJa2VlcGVuZAkJCURvbid0IGFsbG93IGNvbnRhaW5lZCBtYXRjaGVzIHRvIGdvIHBhc3QgYQorCQkJCW1hdGNoIHdpdGggdGhlIGVuZCBwYXR0ZXJuLiAgU2VlCisJCQkJfDpzeW4ta2VlcGVuZHwuCisJZXh0ZW5kCQkJT3ZlcnJpZGUgYSAia2VlcGVuZCIgZm9yIGFuIGl0ZW0gdGhpcyByZWdpb24KKwkJCQlpcyBjb250YWluZWQgaW4uIFNlZSB8OnN5bi1leHRlbmR8LgorCWV4Y2x1ZGVubAkJRG9uJ3QgbWFrZSBhIHBhdHRlcm4gd2l0aCB0aGUgZW5kLW9mLWxpbmUgIiQiCisJCQkJZXh0ZW5kIGEgY29udGFpbmluZyBtYXRjaCBvciBpdGVtLiAgT25seQorCQkJCXVzZWZ1bCBmb3IgZW5kIHBhdHRlcm5zLiAgTXVzdCBiZSBnaXZlbiBiZWZvcmUKKwkJCQl0aGUgcGF0dGVybnMgaXQgYXBwbGllcyB0by4gfDpzeW4tZXhjbHVkZW5sfAorCXN0YXJ0PXtzdGFydF9wYXR0ZXJufQlUaGUgc2VhcmNoIHBhdHRlcm4gdGhhdCBkZWZpbmVzIHRoZSBzdGFydCBvZgorCQkJCXRoZSByZWdpb24uICBTZWUgfDpzeW4tcGF0dGVybnwgYmVsb3cuCisJc2tpcD17c2tpcF9wYXR0ZXJufQlUaGUgc2VhcmNoIHBhdHRlcm4gdGhhdCBkZWZpbmVzIHRleHQgaW5zaWRlCisJCQkJdGhlIHJlZ2lvbiB3aGVyZSBub3QgdG8gbG9vayBmb3IgdGhlIGVuZAorCQkJCXBhdHRlcm4uICBTZWUgfDpzeW4tcGF0dGVybnwgYmVsb3cuCisJZW5kPXtlbmRfcGF0dGVybn0JVGhlIHNlYXJjaCBwYXR0ZXJuIHRoYXQgZGVmaW5lcyB0aGUgZW5kIG9mCisJCQkJdGhlIHJlZ2lvbi4gIFNlZSB8OnN5bi1wYXR0ZXJufCBiZWxvdy4KKworCUV4YW1wbGU6ID4KKyAgOnN5bnRheCByZWdpb24gU3RyaW5nICAgc3RhcnQ9KyIrICBza2lwPStcXCIrICBlbmQ9KyIrCis8CisJVGhlIHN0YXJ0L3NraXAvZW5kIHBhdHRlcm5zIGFuZCB0aGUgb3B0aW9ucyBjYW4gYmUgZ2l2ZW4gaW4gYW55IG9yZGVyLgorCVRoZXJlIGNhbiBiZSB6ZXJvIG9yIG9uZSBza2lwIHBhdHRlcm4uCVRoZXJlIG11c3QgYmUgb25lIG9yIG1vcmUKKwlzdGFydCBhbmQgZW5kIHBhdHRlcm5zLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gb21pdCB0aGUgc2tpcAorCXBhdHRlcm4sIGJ1dCB5b3UgbXVzdCBnaXZlIGF0IGxlYXN0IG9uZSBzdGFydCBhbmQgb25lIGVuZCBwYXR0ZXJuLiAgSXQKKwlpcyBhbGxvd2VkIHRvIGhhdmUgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgZXF1YWwgc2lnbgorCShhbHRob3VnaCBpdCBtb3N0bHkgbG9va3MgYmV0dGVyIHdpdGhvdXQgd2hpdGUgc3BhY2UpLgorCisJV2hlbiBtb3JlIHRoYW4gb25lIHN0YXJ0IHBhdHRlcm4gaXMgZ2l2ZW4sIGEgbWF0Y2ggd2l0aCBvbmUgb2YgdGhlc2UKKwlpcyBzdWZmaWNpZW50LglUaGlzIG1lYW5zIHRoZXJlIGlzIGFuIE9SIHJlbGF0aW9uIGJldHdlZW4gdGhlIHN0YXJ0CisJcGF0dGVybnMuICBUaGUgbGFzdCBvbmUgdGhhdCBtYXRjaGVzIGlzIHVzZWQuICBUaGUgc2FtZSBpcyB0cnVlIGZvcgorCXRoZSBlbmQgcGF0dGVybnMuCisKKwlUaGUgc2VhcmNoIGZvciB0aGUgZW5kIHBhdHRlcm4gc3RhcnRzIHJpZ2h0IGFmdGVyIHRoZSBzdGFydCBwYXR0ZXJuLgorCU9mZnNldHMgYXJlIG5vdCB1c2VkIGZvciB0aGlzLglUaGlzIGltcGxpZXMgdGhhdCB0aGUgbWF0Y2ggZm9yIHRoZQorCWVuZCBwYXR0ZXJuIHdpbGwgbmV2ZXIgb3ZlcmxhcCB3aXRoIHRoZSBzdGFydCBwYXR0ZXJuLgorCisJVGhlIHNraXAgYW5kIGVuZCBwYXR0ZXJuIGNhbiBtYXRjaCBhY3Jvc3MgbGluZSBicmVha3MsIGJ1dCBzaW5jZSB0aGUKKwlzZWFyY2ggZm9yIHRoZSBwYXR0ZXJuIGNhbiBzdGFydCBpbiBhbnkgbGluZSBpdCBvZnRlbiBkb2VzIG5vdCBkbyB3aGF0CisJeW91IHdhbnQuICBUaGUgc2tpcCBwYXR0ZXJuIGRvZXNuJ3QgYXZvaWQgYSBtYXRjaCBvZiBhbiBlbmQgcGF0dGVybiBpbgorCXRoZSBuZXh0IGxpbmUuCVVzZSBzaW5nbGUtbGluZSBwYXR0ZXJucyB0byBhdm9pZCB0cm91YmxlLgorCisJTm90ZTogVGhlIGRlY2lzaW9uIHRvIHN0YXJ0IGEgcmVnaW9uIGlzIG9ubHkgYmFzZWQgb24gYSBtYXRjaGluZyBzdGFydAorCXBhdHRlcm4uICBUaGVyZSBpcyBubyBjaGVjayBmb3IgYSBtYXRjaGluZyBlbmQgcGF0dGVybi4gIFRoaXMgZG9lcyBOT1QKKwl3b3JrOiA+CisJCTpzeW4gcmVnaW9uIEZpcnN0ICBzdGFydD0iKCIgIGVuZD0iOiIKKwkJOnN5biByZWdpb24gU2Vjb25kIHN0YXJ0PSIoIiAgZW5kPSI7IgorPAlUaGUgU2Vjb25kIGFsd2F5cyBtYXRjaGVzIGJlZm9yZSB0aGUgRmlyc3QgKGxhc3QgZGVmaW5lZCBwYXR0ZXJuIGhhcworCWhpZ2hlciBwcmlvcml0eSkuICBUaGUgU2Vjb25kIHJlZ2lvbiB0aGVuIGNvbnRpbnVlcyB1bnRpbCB0aGUgbmV4dAorCSc7Jywgbm8gbWF0dGVyIGlmIHRoZXJlIGlzIGEgJzonIGJlZm9yZSBpdC4gIFVzaW5nIGEgbWF0Y2ggZG9lcyB3b3JrOiA+CisJCTpzeW4gbWF0Y2ggRmlyc3QgICIoXF8uXHstfToiCisJCTpzeW4gbWF0Y2ggU2Vjb25kICIoXF8uXHstfTsiCis8CVRoaXMgcGF0dGVybiBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgb3IgbGluZSBicmVhayB3aXRoICJcXy4iIGFuZAorCXJlcGVhdHMgdGhhdCB3aXRoICJcey19IiAocmVwZWF0IGFzIGZldyBhcyBwb3NzaWJsZSkuCisKKwkJCQkJCQkqOnN5bi1rZWVwZW5kKgorCUJ5IGRlZmF1bHQsIGEgY29udGFpbmVkIG1hdGNoIGNhbiBvYnNjdXJlIGEgbWF0Y2ggZm9yIHRoZSBlbmQgcGF0dGVybi4KKwlUaGlzIGlzIHVzZWZ1bCBmb3IgbmVzdGluZy4gIEZvciBleGFtcGxlLCBhIHJlZ2lvbiB0aGF0IHN0YXJ0cyB3aXRoCisJInsiIGFuZCBlbmRzIHdpdGggIn0iLCBjYW4gY29udGFpbiBhbm90aGVyIHJlZ2lvbi4gIEFuIGVuY291bnRlcmVkICJ9IgorCXdpbGwgdGhlbiBlbmQgdGhlIGNvbnRhaW5lZCByZWdpb24sIGJ1dCBub3QgdGhlIG91dGVyIHJlZ2lvbjoKKwkgICAgewkJc3RhcnRzIG91dGVyICJ7fSIgcmVnaW9uCisJCXsJc3RhcnRzIGNvbnRhaW5lZCAie30iIHJlZ2lvbgorCQl9CWVuZHMgY29udGFpbmVkICJ7fSIgcmVnaW9uCisJICAgIH0JCWVuZHMgb3V0ZXIgInt9IHJlZ2lvbgorCUlmIHlvdSBkb24ndCB3YW50IHRoaXMsIHRoZSAia2VlcGVuZCIgYXJndW1lbnQgd2lsbCBtYWtlIHRoZSBtYXRjaGluZworCW9mIGFuIGVuZCBwYXR0ZXJuIG9mIHRoZSBvdXRlciByZWdpb24gYWxzbyBlbmQgYW55IGNvbnRhaW5lZCBpdGVtLgorCVRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBuZXN0IHRoZSBzYW1lIHJlZ2lvbiwgYnV0IGFsbG93cyBmb3IKKwljb250YWluZWQgaXRlbXMgdG8gaGlnaGxpZ2h0IHBhcnRzIG9mIHRoZSBlbmQgcGF0dGVybiwgd2l0aG91dCBjYXVzaW5nCisJdGhhdCB0byBza2lwIHRoZSBtYXRjaCB3aXRoIHRoZSBlbmQgcGF0dGVybi4gIEV4YW1wbGU6ID4KKyAgOnN5biBtYXRjaCAgdmltQ29tbWVudCArIlteIl1cKyQrCisgIDpzeW4gcmVnaW9uIHZpbUNvbW1hbmQgc3RhcnQ9InNldCIgZW5kPSIkIiBjb250YWlucz12aW1Db21tZW50IGtlZXBlbmQKKzwJVGhlICJrZWVwZW5kIiBtYWtlcyB0aGUgdmltQ29tbWFuZCBhbHdheXMgZW5kIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUsCisJZXZlbiB0aG91Z2ggdGhlIGNvbnRhaW5lZCB2aW1Db21tZW50IGluY2x1ZGVzIGEgbWF0Y2ggd2l0aCB0aGUgPEVPTD4uCisKKwlXaGVuICJrZWVwZW5kIiBpcyBub3QgdXNlZCwgYSBtYXRjaCB3aXRoIGFuIGVuZCBwYXR0ZXJuIGlzIHJldHJpZWQKKwlhZnRlciBlYWNoIGNvbnRhaW5lZCBtYXRjaC4gIFdoZW4gImtlZXBlbmQiIGlzIGluY2x1ZGVkLCB0aGUgZmlyc3QKKwllbmNvdW50ZXJlZCBtYXRjaCB3aXRoIGFuIGVuZCBwYXR0ZXJuIGlzIHVzZWQsIHRydW5jYXRpbmcgYW55CisJY29udGFpbmVkIG1hdGNoZXMuCisJCQkJCQkJKjpzeW4tZXh0ZW5kKgorCVRoZSAia2VlcGVuZCIgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgdXNpbmcgdGhlICJleHRlbmQiIGFyZ3VtZW50LgorCVdoZW4gYW4gaXRlbSB3aXRoICJleHRlbmQiIGlzIGNvbnRhaW5lZCBpbiBhbiBpdGVtIHRoYXQgdXNlcworCSJrZWVwZW5kIiwgdGhlICJrZWVwZW5kIiBpcyBpZ25vcmVkIGFuZCB0aGUgY29udGFpbmluZyByZWdpb24gd2lsbCBiZQorCWV4dGVuZGVkLgorCVRoaXMgY2FuIGJlIHVzZWQgdG8gaGF2ZSBzb21lIGNvbnRhaW5lZCBpdGVtcyBleHRlbmQgYSByZWdpb24gd2hpbGUKKwlvdGhlcnMgZG9uJ3QuICBFeGFtcGxlOiA+CisKKyAgIDpzeW4gcmVnaW9uIGh0bWxSZWYgc3RhcnQ9KzxhPisgZW5kPSs8L2E+KyBrZWVwZW5kIGNvbnRhaW5zPWh0bWxJdGVtLGh0bWxTY3JpcHQKKyAgIDpzeW4gbWF0Y2ggaHRtbEl0ZW0gKzxbXj5dKj4rIGNvbnRhaW5lZAorICAgOnN5biByZWdpb24gaHRtbFNjcmlwdCBzdGFydD0rPHNjcmlwdCsgZW5kPSs8L3NjcmlwdFtePl0qPisgY29udGFpbmVkIGV4dGVuZAorCis8CUhlcmUgdGhlIGh0bWxJdGVtIGl0ZW0gZG9lcyBub3QgbWFrZSB0aGUgaHRtbFJlZiBpdGVtIGNvbnRpbnVlCisJZnVydGhlciwgaXQgaXMgb25seSB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgPD4gaXRlbXMuICBUaGUgaHRtbFNjcmlwdAorCWl0ZW0gZG9lcyBleHRlbmQgdGhlIGh0bWxSZWYgaXRlbS4KKworCUFub3RoZXIgZXhhbXBsZTogPgorICAgOnN5biByZWdpb24geG1sRm9sZCBzdGFydD0iPGE+IiBlbmQ9IjwvYT4iIGZvbGQgdHJhbnNwYXJlbnQga2VlcGVuZCBleHRlbmQKKzwJVGhpcyBkZWZpbmVzIGEgcmVnaW9uIHdpdGggImtlZXBlbmQiLCBzbyB0aGF0IGl0cyBlbmQgY2Fubm90IGJlCisJY2hhbmdlZCBieSBjb250YWluZWQgaXRlbXMsIGxpa2Ugd2hlbiB0aGUgIjwvYT4iIGlzIG1hdGNoZWQgdG8KKwloaWdobGlnaHQgaXQgZGlmZmVyZW50bHkuICBCdXQgd2hlbiB0aGUgeG1sRm9sZCByZWdpb24gaXMgbmVzdGVkIChpdAorCWluY2x1ZGVzIGl0c2VsZiksIHRoZSAiZXh0ZW5kIiBhcHBsaWVzLCBzbyB0aGF0IHRoZSAiPC9hPiIgb2YgYSBuZXN0ZWQKKwlyZWdpb24gb25seSBlbmRzIHRoYXQgcmVnaW9uLCBhbmQgbm90IHRoZSBvbmUgaXQgaXMgY29udGFpbmVkIGluLgorCisJCQkJCQkJKjpzeW4tZXhjbHVkZW5sKgorCVdoZW4gYSBwYXR0ZXJuIGZvciBhIG1hdGNoIG9yIGVuZCBwYXR0ZXJuIG9mIGEgcmVnaW9uIGluY2x1ZGVzIGEgJyQnCisJdG8gbWF0Y2ggdGhlIGVuZC1vZi1saW5lLCBpdCB3aWxsIG1ha2UgYSByZWdpb24gaXRlbSB0aGF0IGl0IGlzCisJY29udGFpbmVkIGluIGNvbnRpbnVlIG9uIHRoZSBuZXh0IGxpbmUuICBGb3IgZXhhbXBsZSwgYSBtYXRjaCB3aXRoCisJIlxcJCIgKGJhY2tzbGFzaCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lKSBjYW4gbWFrZSBhIHJlZ2lvbiBjb250aW51ZQorCXRoYXQgd291bGQgbm9ybWFsbHkgc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAorCWJlaGF2aW9yLiAgSWYgdGhpcyBpcyBub3Qgd2FudGVkLCB0aGVyZSBhcmUgdHdvIHdheXMgdG8gYXZvaWQgaXQ6CisJMS4gVXNlICJrZWVwZW5kIiBmb3IgdGhlIGNvbnRhaW5pbmcgaXRlbS4gIFRoaXMgd2lsbCBrZWVwIGFsbAorCSAgIGNvbnRhaW5lZCBtYXRjaGVzIGZyb20gZXh0ZW5kaW5nIHRoZSBtYXRjaCBvciByZWdpb24uICBJdCBjYW4gYmUKKwkgICB1c2VkIHdoZW4gYWxsIGNvbnRhaW5lZCBpdGVtcyBtdXN0IG5vdCBleHRlbmQgdGhlIGNvbnRhaW5pbmcgaXRlbS4KKwkyLiBVc2UgImV4Y2x1ZGVubCIgaW4gdGhlIGNvbnRhaW5lZCBpdGVtLiAgVGhpcyB3aWxsIGtlZXAgdGhhdCBtYXRjaAorCSAgIGZyb20gZXh0ZW5kaW5nIHRoZSBjb250YWluaW5nIG1hdGNoIG9yIHJlZ2lvbi4gIEl0IGNhbiBiZSB1c2VkIGlmCisJICAgb25seSBzb21lIGNvbnRhaW5lZCBpdGVtcyBtdXN0IG5vdCBleHRlbmQgdGhlIGNvbnRhaW5pbmcgaXRlbS4KKwkgICAiZXhjbHVkZW5sIiBtdXN0IGJlIGdpdmVuIGJlZm9yZSB0aGUgcGF0dGVybiBpdCBhcHBsaWVzIHRvLgorCisJCQkJCQkJKjpzeW4tbWF0Y2hncm91cCoKKwkibWF0Y2hncm91cCIgY2FuIGJlIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSBzdGFydCBhbmQvb3IgZW5kIHBhdHRlcm4KKwlkaWZmZXJlbnRseSB0aGFuIHRoZSBib2R5IG9mIHRoZSByZWdpb24uICBFeGFtcGxlOiA+CisgIDpzeW50YXggcmVnaW9uIFN0cmluZyBtYXRjaGdyb3VwPVF1b3RlIHN0YXJ0PSsiKyAgc2tpcD0rXFwiKwllbmQ9KyIrCis8CVRoaXMgd2lsbCBoaWdobGlnaHQgdGhlIHF1b3RlcyB3aXRoIHRoZSAiUXVvdGUiIGdyb3VwLCBhbmQgdGhlIHRleHQgaW4KKwliZXR3ZWVuIHdpdGggdGhlICJTdHJpbmciIGdyb3VwLgorCVRoZSAibWF0Y2hncm91cCIgaXMgdXNlZCBmb3IgYWxsIHN0YXJ0IGFuZCBlbmQgcGF0dGVybnMgdGhhdCBmb2xsb3csCisJdW50aWwgdGhlIG5leHQgIm1hdGNoZ3JvdXAiLiAgVXNlICJtYXRjaGdyb3VwPU5PTkUiIHRvIGdvIGJhY2sgdG8gbm90CisJdXNpbmcgYSBtYXRjaGdyb3VwLgorCisJSW4gYSBzdGFydCBvciBlbmQgcGF0dGVybiB0aGF0IGlzIGhpZ2hsaWdodGVkIHdpdGggIm1hdGNoZ3JvdXAiIHRoZQorCWNvbnRhaW5lZCBpdGVtcyBvZiB0aGUgcmVnaW9uIGFyZSBub3QgdXNlZC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXZvaWQKKwl0aGF0IGEgY29udGFpbmVkIGl0ZW0gbWF0Y2hlcyBpbiB0aGUgc3RhcnQgb3IgZW5kIHBhdHRlcm4gbWF0Y2guICBXaGVuCisJdXNpbmcgInRyYW5zcGFyZW50IiwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byBhIHN0YXJ0IG9yIGVuZCBwYXR0ZXJuCisJbWF0Y2ggdGhhdCBpcyBoaWdobGlnaHRlZCB3aXRoICJtYXRjaGdyb3VwIi4KKworCUhlcmUgaXMgYW4gZXhhbXBsZSwgd2hpY2ggaGlnaGxpZ2h0cyB0aHJlZSBsZXZlbHMgb2YgcGFyZW50aGVzZXMgaW4KKwlkaWZmZXJlbnQgY29sb3JzOiA+CisgICA6c3kgcmVnaW9uIHBhcjEgbWF0Y2hncm91cD1wYXIxIHN0YXJ0PS8oLyBlbmQ9LykvIGNvbnRhaW5zPXBhcjIKKyAgIDpzeSByZWdpb24gcGFyMiBtYXRjaGdyb3VwPXBhcjIgc3RhcnQ9LygvIGVuZD0vKS8gY29udGFpbnM9cGFyMyBjb250YWluZWQKKyAgIDpzeSByZWdpb24gcGFyMyBtYXRjaGdyb3VwPXBhcjMgc3RhcnQ9LygvIGVuZD0vKS8gY29udGFpbnM9cGFyMSBjb250YWluZWQKKyAgIDpoaSBwYXIxIGN0ZXJtZmc9cmVkIGd1aWZnPXJlZAorICAgOmhpIHBhcjIgY3Rlcm1mZz1ibHVlIGd1aWZnPWJsdWUKKyAgIDpoaSBwYXIzIGN0ZXJtZmc9ZGFya2dyZWVuIGd1aWZnPWRhcmtncmVlbgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIDpzeW50YXggYXJndW1lbnRzCQkJCQkqOnN5bi1hcmd1bWVudHMqCisKK1RoZSA6c3ludGF4IGNvbW1hbmRzIHRoYXQgZGVmaW5lIHN5bnRheCBpdGVtcyB0YWtlIGEgbnVtYmVyIG9mIGFyZ3VtZW50cy4KK1RoZSBjb21tb24gb25lcyBhcmUgZXhwbGFpbmVkIGhlcmUuICBUaGUgYXJndW1lbnRzIG1heSBiZSBnaXZlbiBpbiBhbnkgb3JkZXIKK2FuZCBtYXkgYmUgbWl4ZWQgd2l0aCBwYXR0ZXJucy4KKworTm90IGFsbCBjb21tYW5kcyBhY2NlcHQgYWxsIGFyZ3VtZW50cy4JVGhpcyB0YWJsZSBzaG93cyB3aGljaCBhcmd1bWVudHMKK2NhbiBub3QgYmUgdXNlZCBmb3IgYWxsIGNvbW1hbmRzOgorCQkJCQkJCSpFMzk1KiAqRTM5NioKKwkJICAgIGNvbnRhaW5zICBvbmVsaW5lCWZvbGQgIGRpc3BsYXkgIGV4dGVuZCB+Cis6c3ludGF4IGtleXdvcmQJCSAtCSAtCSAtCSAtCSAtCis6c3ludGF4IG1hdGNoCQl5ZXMJIC0JeWVzCXllcwl5ZXMKKzpzeW50YXggcmVnaW9uCQl5ZXMJeWVzCXllcwl5ZXMJeWVzCisKK1RoZXNlIGFyZ3VtZW50cyBjYW4gYmUgdXNlZCBmb3IgYWxsIHRocmVlIGNvbW1hbmRzOgorCWNvbnRhaW5lZAorCWNvbnRhaW5lZGluCisJbmV4dGdyb3VwCisJdHJhbnNwYXJlbnQKKwlza2lwd2hpdGUKKwlza2lwbmwKKwlza2lwZW1wdHkKKworCitjb250YWluZWQJCQkJCQkqOnN5bi1jb250YWluZWQqCisKK1doZW4gdGhlICJjb250YWluZWQiIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGlzIGl0ZW0gd2lsbCBub3QgYmUgcmVjb2duaXplZCBhdAordGhlIHRvcCBsZXZlbCwgYnV0IG9ubHkgd2hlbiBpdCBpcyBtZW50aW9uZWQgaW4gdGhlICJjb250YWlucyIgZmllbGQgb2YKK2Fub3RoZXIgbWF0Y2guCUV4YW1wbGU6ID4KKyAgIDpzeW50YXgga2V5d29yZCBUb2RvICAgIFRPRE8gICAgY29udGFpbmVkCisgICA6c3ludGF4IG1hdGNoICAgQ29tbWVudCAiLy8uKiIgIGNvbnRhaW5zPVRvZG8KKworCitkaXNwbGF5CQkJCQkJCSo6c3luLWRpc3BsYXkqCisKK0lmIHRoZSAiZGlzcGxheSIgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoaXMgaXRlbSB3aWxsIGJlIHNraXBwZWQgd2hlbiB0aGUKK2RldGVjdGVkIGhpZ2hsaWdodGluZyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuICBUaGlzIHdpbGwgc3BlZWQgdXAgaGlnaGxpZ2h0aW5nLAorYnkgc2tpcHBpbmcgdGhpcyBpdGVtIHdoZW4gb25seSBmaW5kaW5nIHRoZSBzeW50YXggc3RhdGUgZm9yIHRoZSB0ZXh0IHRoYXQgaXMKK3RvIGJlIGRpc3BsYXllZC4KKworR2VuZXJhbGx5LCB5b3UgY2FuIHVzZSAiZGlzcGxheSIgZm9yIG1hdGNoIGFuZCByZWdpb24gaXRlbXMgdGhhdCBtZWV0IHRoZXNlCitjb25kaXRpb25zOgorLSBUaGUgaXRlbSBkb2VzIG5vdCBjb250aW51ZSBwYXN0IHRoZSBlbmQgb2YgYSBsaW5lLiAgRXhhbXBsZSBmb3IgQzogQSByZWdpb24KKyAgZm9yIGEgIi8qIiBjb21tZW50IGNhbid0IGNvbnRhaW4gImRpc3BsYXkiLCBiZWNhdXNlIGl0IGNvbnRpbnVlcyBvbiB0aGUgbmV4dAorICBsaW5lLgorLSBUaGUgaXRlbSBkb2VzIG5vdCBjb250YWluIGl0ZW1zIHRoYXQgY29udGludWUgcGFzdCB0aGUgZW5kIG9mIHRoZSBsaW5lIG9yCisgIG1ha2UgaXQgY29udGludWUgb24gdGhlIG5leHQgbGluZS4KKy0gVGhlIGl0ZW0gZG9lcyBub3QgY2hhbmdlIHRoZSBzaXplIG9mIGFueSBpdGVtIGl0IGlzIGNvbnRhaW5lZCBpbi4gIEV4YW1wbGUKKyAgZm9yIEM6IEEgbWF0Y2ggd2l0aCAiXFwkIiBpbiBhIHByZXByb2Nlc3NvciBtYXRjaCBjYW4ndCBoYXZlICJkaXNwbGF5IiwKKyAgYmVjYXVzZSBpdCBtYXkgbWFrZSB0aGF0IHByZXByb2Nlc3NvciBtYXRjaCBzaG9ydGVyLgorLSBUaGUgaXRlbSBkb2VzIG5vdCBhbGxvdyBvdGhlciBpdGVtcyB0byBtYXRjaCB0aGF0IGRpZG4ndCBtYXRjaCBvdGhlcndpc2UsCisgIGFuZCB0aGF0IGl0ZW0gbWF5IGV4dGVuZCB0aGUgbWF0Y2ggdG9vIGZhci4gIEV4YW1wbGUgZm9yIEM6IEEgbWF0Y2ggZm9yIGEKKyAgIi8vIiBjb21tZW50IGNhbid0IHVzZSAiZGlzcGxheSIsIGJlY2F1c2UgYSAiLyoiIGluc2lkZSB0aGF0IGNvbW1lbnQgd291bGQKKyAgbWF0Y2ggdGhlbiBhbmQgc3RhcnQgYSBjb21tZW50IHdoaWNoIGV4dGVuZHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCitFeGFtcGxlcywgZm9yIHRoZSBDIGxhbmd1YWdlLCB3aGVyZSAiZGlzcGxheSIgY2FuIGJlIHVzZWQ6CistIG1hdGNoIHdpdGggYSBudW1iZXIKKy0gbWF0Y2ggd2l0aCBhIGxhYmVsCisKKwordHJhbnNwYXJlbnQJCQkJCQkqOnN5bi10cmFuc3BhcmVudCoKKworSWYgdGhlICJ0cmFuc3BhcmVudCIgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoaXMgaXRlbSB3aWxsIG5vdCBiZSBoaWdobGlnaHRlZAoraXRzZWxmLCBidXQgd2lsbCB0YWtlIHRoZSBoaWdobGlnaHRpbmcgb2YgdGhlIGl0ZW0gaXQgaXMgY29udGFpbmVkIGluLglUaGlzCitpcyB1c2VmdWwgZm9yIHN5bnRheCBpdGVtcyB0aGF0IGRvbid0IG5lZWQgYW55IGhpZ2hsaWdodGluZyBidXQgYXJlIHVzZWQKK29ubHkgdG8gc2tpcCBvdmVyIGEgcGFydCBvZiB0aGUgdGV4dC4KKworVGhlICJjb250YWlucz0iIGFyZ3VtZW50IGlzIGFsc28gaW5oZXJpdGVkIGZyb20gdGhlIGl0ZW0gaXQgaXMgY29udGFpbmVkIGluLAordW5sZXNzIGEgImNvbnRhaW5zIiBhcmd1bWVudCBpcyBnaXZlbiBmb3IgdGhlIHRyYW5zcGFyZW50IGl0ZW0gaXRzZWxmLglUbworYXZvaWQgdGhhdCB1bndhbnRlZCBpdGVtcyBhcmUgY29udGFpbmVkLCB1c2UgImNvbnRhaW5zPU5PTkUiLiAgRXhhbXBsZSwgd2hpY2gKK2hpZ2hsaWdodHMgd29yZHMgaW4gc3RyaW5ncywgYnV0IG1ha2VzIGFuIGV4Y2VwdGlvbiBmb3IgInZpbSI6ID4KKwk6c3luIG1hdGNoIG15U3RyaW5nIC8nW14nXSonLyBjb250YWlucz1teVdvcmQsbXlWaW0KKwk6c3luIG1hdGNoIG15V29yZCAgIC9cPFthLXpdKlw+LyBjb250YWluZWQKKwk6c3luIG1hdGNoIG15VmltICAgIC9cPHZpbVw+LyB0cmFuc3BhcmVudCBjb250YWluZWQgY29udGFpbnM9Tk9ORQorCTpoaSBsaW5rIG15U3RyaW5nIFN0cmluZworCTpoaSBsaW5rIG15V29yZCAgIENvbW1lbnQKK1NpbmNlIHRoZSAibXlWaW0iIG1hdGNoIGNvbWVzIGFmdGVyICJteVdvcmQiIGl0IGlzIHRoZSBwcmVmZXJyZWQgbWF0Y2ggKGxhc3QKK21hdGNoIGluIHRoZSBzYW1lIHBvc2l0aW9uIG92ZXJydWxlcyBhbiBlYXJsaWVyIG9uZSkuICBUaGUgInRyYW5zcGFyZW50IgorYXJndW1lbnQgbWFrZXMgdGhlICJteVZpbSIgbWF0Y2ggdXNlIHRoZSBzYW1lIGhpZ2hsaWdodGluZyBhcyAibXlTdHJpbmciLiAgQnV0CitpdCBkb2VzIG5vdCBjb250YWluIGFueXRoaW5nLiAgSWYgdGhlICJjb250YWlucz1OT05FIiBhcmd1bWVudCB3b3VsZCBiZSBsZWZ0CitvdXQsIHRoZW4gIm15VmltIiB3b3VsZCB1c2UgdGhlIGNvbnRhaW5zIGFyZ3VtZW50IGZyb20gbXlTdHJpbmcgYW5kIGFsbG93CisibXlXb3JkIiB0byBiZSBjb250YWluZWQsIHdoaWNoIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgYXMgYSBDb25zdGFudC4gIFRoaXMKK2hhcHBlbnMgYmVjYXVzZSBhIGNvbnRhaW5lZCBtYXRjaCBkb2Vzbid0IG1hdGNoIGluc2lkZSBpdHNlbGYgaW4gdGhlIHNhbWUKK3Bvc2l0aW9uLCB0aHVzIHRoZSAibXlWaW0iIG1hdGNoIGRvZXNuJ3Qgb3ZlcnJ1bGUgdGhlICJteVdvcmQiIG1hdGNoIGhlcmUuCisKK1doZW4geW91IGxvb2sgYXQgdGhlIGNvbG9yZWQgdGV4dCwgaXQgaXMgbGlrZSBsb29raW5nIGF0IGxheWVycyBvZiBjb250YWluZWQKK2l0ZW1zLglUaGUgY29udGFpbmVkIGl0ZW0gaXMgb24gdG9wIG9mIHRoZSBpdGVtIGl0IGlzIGNvbnRhaW5lZCBpbiwgdGh1cyB5b3UKK3NlZSB0aGUgY29udGFpbmVkIGl0ZW0uICBXaGVuIGEgY29udGFpbmVkIGl0ZW0gaXMgdHJhbnNwYXJlbnQsIHlvdSBjYW4gbG9vawordGhyb3VnaCwgdGh1cyB5b3Ugc2VlIHRoZSBpdGVtIGl0IGlzIGNvbnRhaW5lZCBpbi4gIEluIGEgcGljdHVyZToKKworCQlsb29rIGZyb20gaGVyZQorCisJICAgIHwJfCAgIHwJfCAgIHwJfAorCSAgICBWCVYgICBWCVYgICBWCVYKKworCSAgICAgICB4eHh4CSAgeXl5CQltb3JlIGNvbnRhaW5lZCBpdGVtcworCSAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLgljb250YWluZWQgaXRlbSAodHJhbnNwYXJlbnQpCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JZmlyc3QgaXRlbQorCitUaGUgJ3gnLCAneScgYW5kICc9JyByZXByZXNlbnQgYSBoaWdobGlnaHRlZCBzeW50YXggaXRlbS4gIFRoZSAnLicgcmVwcmVzZW50IGEKK3RyYW5zcGFyZW50IGdyb3VwLgorCitXaGF0IHlvdSBzZWUgaXM6CisKKwk9PT09PT09eHh4eD09PT09PT15eXk9PT09PT09PQorCitUaHVzIHlvdSBsb29rIHRocm91Z2ggdGhlIHRyYW5zcGFyZW50ICIuLi4uIi4KKworCitvbmVsaW5lCQkJCQkJCSo6c3luLW9uZWxpbmUqCisKK1RoZSAib25lbGluZSIgYXJndW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIHJlZ2lvbiBkb2VzIG5vdCBjcm9zcyBhIGxpbmUKK2JvdW5kYXJ5LiAgSXQgbXVzdCBtYXRjaCBjb21wbGV0ZWx5IGluIHRoZSBjdXJyZW50IGxpbmUuICBIb3dldmVyLCB3aGVuIHRoZQorcmVnaW9uIGhhcyBhIGNvbnRhaW5lZCBpdGVtIHRoYXQgZG9lcyBjcm9zcyBhIGxpbmUgYm91bmRhcnksIGl0IGNvbnRpbnVlcyBvbgordGhlIG5leHQgbGluZSBhbnl3YXkuICBBIGNvbnRhaW5lZCBpdGVtIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBhIGxpbmUKK2NvbnRpbnVhdGlvbiBwYXR0ZXJuLiAgQnV0IHRoZSAiZW5kIiBwYXR0ZXJuIG11c3Qgc3RpbGwgbWF0Y2ggaW4gdGhlIGZpcnN0CitsaW5lLCBvdGhlcndpc2UgdGhlIHJlZ2lvbiBkb2Vzbid0IGV2ZW4gc3RhcnQuCisKK1doZW4gdGhlIHN0YXJ0IHBhdHRlcm4gaW5jbHVkZXMgYSAiXG4iIHRvIG1hdGNoIGFuIGVuZC1vZi1saW5lLCB0aGUgZW5kCitwYXR0ZXJuIG11c3QgYmUgZm91bmQgaW4gdGhlIHNhbWUgbGluZSBhcyB3aGVyZSB0aGUgc3RhcnQgcGF0dGVybiBlbmRzLiAgVGhlCitlbmQgcGF0dGVybiBtYXkgYWxzbyBpbmNsdWRlIGFuIGVuZC1vZi1saW5lLiAgVGh1cyB0aGUgIm9uZWxpbmUiIGFyZ3VtZW50CittZWFucyB0aGF0IHRoZSBlbmQgb2YgdGhlIHN0YXJ0IHBhdHRlcm4gYW5kIHRoZSBzdGFydCBvZiB0aGUgZW5kIHBhdHRlcm4gbXVzdAorYmUgd2l0aGluIG9uZSBsaW5lLiAgVGhpcyBjYW4ndCBiZSBjaGFuZ2VkIGJ5IGEgc2tpcCBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhCitsaW5lIGJyZWFrLgorCisKK2ZvbGQJCQkJCQkJKjpzeW4tZm9sZCoKKworVGhlICJmb2xkIiBhcmd1bWVudCBtYWtlcyB0aGUgZm9sZCBsZXZlbCBpbmNyZWFzZWQgYnkgb25lIGZvciB0aGlzIGl0ZW0uCitFeGFtcGxlOiA+CisgICA6c3luIHJlZ2lvbiBteUZvbGQgc3RhcnQ9InsiIGVuZD0ifSIgdHJhbnNwYXJlbnQgZm9sZAorICAgOnN5biBzeW5jIGZyb21zdGFydAorICAgOnNldCBmb2xkbWV0aG9kPXN5bnRheAorVGhpcyB3aWxsIG1ha2UgZWFjaCB7fSBibG9jayBmb3JtIG9uZSBmb2xkLgorCitUaGUgZm9sZCB3aWxsIHN0YXJ0IG9uIHRoZSBsaW5lIHdoZXJlIHRoZSBpdGVtIHN0YXJ0cywgYW5kIGVuZCB3aGVyZSB0aGUgaXRlbQorZW5kcy4gIElmIHRoZSBzdGFydCBhbmQgZW5kIGFyZSB3aXRoaW4gdGhlIHNhbWUgbGluZSwgdGhlcmUgaXMgbm8gZm9sZC4KK1RoZSAnZm9sZG5lc3RtYXgnIG9wdGlvbiBsaW1pdHMgdGhlIG5lc3Rpbmcgb2Ygc3ludGF4IGZvbGRzLgore25vdCBhdmFpbGFibGUgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGhvdXQgfCtmb2xkaW5nfCBmZWF0dXJlfQorCisKKwkJCSo6c3luLWNvbnRhaW5zKiAqRTQwNSogKkU0MDYqICpFNDA3KiAqRTQwOCogKkU0MDkqCitjb250YWlucz17Z3JvdXBuYW1lfSwuLgorCitUaGUgImNvbnRhaW5zIiBhcmd1bWVudCBpcyBmb2xsb3dlZCBieSBhIGxpc3Qgb2Ygc3ludGF4IGdyb3VwIG5hbWVzLiAgVGhlc2UKK2dyb3VwcyB3aWxsIGJlIGFsbG93ZWQgdG8gYmVnaW4gaW5zaWRlIHRoZSBpdGVtICh0aGV5IG1heSBleHRlbmQgcGFzdCB0aGUKK2NvbnRhaW5pbmcgZ3JvdXAncyBlbmQpLiAgVGhpcyBhbGxvd3MgZm9yIHJlY3Vyc2l2ZSBuZXN0aW5nIG9mIG1hdGNoZXMgYW5kCityZWdpb25zLiAgSWYgdGhlcmUgaXMgbm8gImNvbnRhaW5zIiBhcmd1bWVudCwgbm8gZ3JvdXBzIHdpbGwgYmUgY29udGFpbmVkIGluCit0aGlzIGl0ZW0uICBUaGUgZ3JvdXAgbmFtZXMgZG8gbm90IG5lZWQgdG8gYmUgZGVmaW5lZCBiZWZvcmUgdGhleSBjYW4gYmUgdXNlZAoraGVyZS4KKworY29udGFpbnM9QUxMCisJCUlmIHRoZSBvbmx5IGl0ZW0gaW4gdGhlIGNvbnRhaW5zIGxpc3QgaXMgIkFMTCIsIHRoZW4gYWxsCisJCWdyb3VwcyB3aWxsIGJlIGFjY2VwdGVkIGluc2lkZSB0aGUgaXRlbS4KKworY29udGFpbnM9QUxMQlVULHtncm91cC1uYW1lfSwuLgorCQlJZiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgY29udGFpbnMgbGlzdCBpcyAiQUxMQlVUIiwgdGhlbiBhbGwKKwkJZ3JvdXBzIHdpbGwgYmUgYWNjZXB0ZWQgaW5zaWRlIHRoZSBpdGVtLCBleGNlcHQgdGhlIG9uZXMgdGhhdAorCQlhcmUgbGlzdGVkLiAgRXhhbXBsZTogPgorICA6c3ludGF4IHJlZ2lvbiBCbG9jayBzdGFydD0ieyIgZW5kPSJ9IiAuLi4gY29udGFpbnM9QUxMQlVULEZ1bmN0aW9uCisKK2NvbnRhaW5zPVRPUAorCQlJZiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgY29udGFpbnMgbGlzdCBpcyAiVE9QIiwgdGhlbiBhbGwKKwkJZ3JvdXBzIHdpbGwgYmUgYWNjZXB0ZWQgdGhhdCBkb24ndCBoYXZlIHRoZSAiY29udGFpbmVkIgorCQlhcmd1bWVudC4KK2NvbnRhaW5zPVRPUCx7Z3JvdXAtbmFtZX0sLi4KKwkJTGlrZSAiVE9QIiwgYnV0IGV4Y2x1ZGluZyB0aGUgZ3JvdXBzIHRoYXQgYXJlIGxpc3RlZC4KKworY29udGFpbnM9Q09OVEFJTkVECisJCUlmIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb250YWlucyBsaXN0IGlzICJDT05UQUlORUQiLCB0aGVuCisJCWFsbCBncm91cHMgd2lsbCBiZSBhY2NlcHRlZCB0aGF0IGhhdmUgdGhlICJjb250YWluZWQiCisJCWFyZ3VtZW50LgorY29udGFpbnM9Q09OVEFJTkVELHtncm91cC1uYW1lfSwuLgorCQlMaWtlICJDT05UQUlORUQiLCBidXQgZXhjbHVkaW5nIHRoZSBncm91cHMgdGhhdCBhcmUKKwkJbGlzdGVkLgorCisKK1RoZSB7Z3JvdXAtbmFtZX0gaW4gdGhlICJjb250YWlucyIgbGlzdCBjYW4gYmUgYSBwYXR0ZXJuLiAgQWxsIGdyb3VwIG5hbWVzCit0aGF0IG1hdGNoIHRoZSBwYXR0ZXJuIHdpbGwgYmUgaW5jbHVkZWQgKG9yIGV4Y2x1ZGVkLCBpZiAiQUxMQlVUIiBpcyB1c2VkKS4KK1RoZSBwYXR0ZXJuIGNhbm5vdCBjb250YWluIHdoaXRlIHNwYWNlIG9yIGEgJywnLiAgRXhhbXBsZTogPgorICAgLi4uIGNvbnRhaW5zPUNvbW1lbnQuKixLZXl3WzAtM10KK1RoZSBtYXRjaGluZyB3aWxsIGJlIGRvbmUgYXQgbW9tZW50IHRoZSBzeW50YXggY29tbWFuZCBpcyBleGVjdXRlZC4gIEdyb3VwcwordGhhdCBhcmUgZGVmaW5lZCBsYXRlciB3aWxsIG5vdCBiZSBtYXRjaGVkLiAgQWxzbywgaWYgdGhlIGN1cnJlbnQgc3ludGF4Citjb21tYW5kIGRlZmluZXMgYSBuZXcgZ3JvdXAsIGl0IGlzIG5vdCBtYXRjaGVkLiAgQmUgY2FyZWZ1bDogV2hlbiBwdXR0aW5nCitzeW50YXggY29tbWFuZHMgaW4gYSBmaWxlIHlvdSBjYW4ndCByZWx5IG9uIGdyb3VwcyBOT1QgYmVpbmcgZGVmaW5lZCwgYmVjYXVzZQordGhlIGZpbGUgbWF5IGhhdmUgYmVlbiBzb3VyY2VkIGJlZm9yZSwgYW5kICI6c3luIGNsZWFyIiBkb2Vzbid0IHJlbW92ZSB0aGUKK2dyb3VwIG5hbWVzLgorCitUaGUgY29udGFpbmVkIGdyb3VwcyB3aWxsIGFsc28gbWF0Y2ggaW4gdGhlIHN0YXJ0IGFuZCBlbmQgcGF0dGVybnMgb2YgYQorcmVnaW9uLiAgSWYgdGhpcyBpcyBub3Qgd2FudGVkLCB0aGUgIm1hdGNoZ3JvdXAiIGFyZ3VtZW50IGNhbiBiZSB1c2VkCit8OnN5bi1tYXRjaGdyb3VwfC4gIFRoZSAibXM9IiBhbmQgIm1lPSIgb2Zmc2V0cyBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlCityZWdpb24gd2hlcmUgY29udGFpbmVkIGl0ZW1zIGRvIG1hdGNoLglOb3RlIHRoYXQgdGhpcyBtYXkgYWxzbyBsaW1pdCB0aGUKK2FyZWEgdGhhdCBpcyBoaWdobGlnaHRlZAorCisKK2NvbnRhaW5lZGluPXtncm91cG5hbWV9Li4uCQkJCSo6c3luLWNvbnRhaW5lZGluKgorCitUaGUgImNvbnRhaW5lZGluIiBhcmd1bWVudCBpcyBmb2xsb3dlZCBieSBhIGxpc3Qgb2Ygc3ludGF4IGdyb3VwIG5hbWVzLiAgVGhlCitpdGVtIHdpbGwgYmUgYWxsb3dlZCB0byBiZWdpbiBpbnNpZGUgdGhlc2UgZ3JvdXBzLiAgVGhpcyB3b3JrcyBhcyBpZiB0aGUKK2NvbnRhaW5pbmcgaXRlbSBoYXMgYSAiY29udGFpbnM9IiBhcmd1bWVudCB0aGF0IGluY2x1ZGVzIHRoaXMgaXRlbS4KKworVGhlIHtncm91cG5hbWV9Li4uIGNhbiBiZSB1c2VkIGp1c3QgbGlrZSBmb3IgImNvbnRhaW5zIiwgYXMgZXhwbGFpbmVkIGFib3ZlLgorCitUaGlzIGlzIHVzZWZ1bCB3aGVuIGFkZGluZyBhIHN5bnRheCBpdGVtIGFmdGVyd2FyZHMuICBBbiBpdGVtIGNhbiBiZSB0b2xkIHRvCitiZSBpbmNsdWRlZCBpbnNpZGUgYW4gYWxyZWFkeSBleGlzdGluZyBpdGVtLCB3aXRob3V0IGNoYW5naW5nIHRoZSBkZWZpbml0aW9uCitvZiB0aGF0IGl0ZW0uICBGb3IgZXhhbXBsZSwgdG8gaGlnaGxpZ2h0IGEgd29yZCBpbiBhIEMgY29tbWVudCBhZnRlciBsb2FkaW5nCit0aGUgQyBzeW50YXg6ID4KKwk6c3luIGtleXdvcmQgbXl3b3JkIEhFTFAgY29udGFpbmVkaW49Y0NvbW1lbnQgY29udGFpbmVkCitOb3RlIHRoYXQgImNvbnRhaW5lZCIgaXMgYWxzbyB1c2VkLCB0byBhdm9pZCB0aGF0IHRoZSBpdGVtIG1hdGNoZXMgYXQgdGhlIHRvcAorbGV2ZWwuCisKK01hdGNoZXMgZm9yICJjb250YWluZWRpbiIgYXJlIGFkZGVkIHRvIHRoZSBvdGhlciBwbGFjZXMgd2hlcmUgdGhlIGl0ZW0gY2FuCithcHBlYXIuICBBICJjb250YWlucyIgYXJndW1lbnQgbWF5IGFsc28gYmUgYWRkZWQgYXMgdXN1YWwuICBEb24ndCBmb3JnZXQgdGhhdAora2V5d29yZHMgbmV2ZXIgY29udGFpbiBhbm90aGVyIGl0ZW0sIHRodXMgYWRkaW5nIHRoZW0gdG8gImNvbnRhaW5lZGluIiB3b24ndAord29yay4KKworCituZXh0Z3JvdXA9e2dyb3VwbmFtZX0sLi4JCQkJKjpzeW4tbmV4dGdyb3VwKgorCitUaGUgIm5leHRncm91cCIgYXJndW1lbnQgaXMgZm9sbG93ZWQgYnkgYSBsaXN0IG9mIHN5bnRheCBncm91cCBuYW1lcywKK3NlcGFyYXRlZCBieSBjb21tYXMgKGp1c3QgbGlrZSB3aXRoICJjb250YWlucyIsIHNvIHlvdSBjYW4gYWxzbyB1c2UgcGF0dGVybnMpLgorCitJZiB0aGUgIm5leHRncm91cCIgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBtZW50aW9uZWQgc3ludGF4IGdyb3VwcyB3aWxsIGJlCit0cmllZCBmb3IgYSBtYXRjaCwgYWZ0ZXIgdGhlIG1hdGNoIG9yIHJlZ2lvbiBlbmRzLiAgSWYgbm9uZSBvZiB0aGUgZ3JvdXBzIGhhdmUKK2EgbWF0Y2gsIGhpZ2hsaWdodGluZyBjb250aW51ZXMgbm9ybWFsbHkuICBJZiB0aGVyZSBpcyBhIG1hdGNoLCB0aGlzIGdyb3VwCit3aWxsIGJlIHVzZWQsIGV2ZW4gd2hlbiBpdCBpcyBub3QgbWVudGlvbmVkIGluIHRoZSAiY29udGFpbnMiIGZpZWxkIG9mIHRoZQorY3VycmVudCBncm91cC4JVGhpcyBpcyBsaWtlIGdpdmluZyB0aGUgbWVudGlvbmVkIGdyb3VwIHByaW9yaXR5IG92ZXIgYWxsCitvdGhlciBncm91cHMuICBFeGFtcGxlOiA+CisgICA6c3ludGF4IG1hdGNoICBjY0Zvb2JhciAgIkZvby5cey19QmFyIiAgY29udGFpbnM9Y2NGb28KKyAgIDpzeW50YXggbWF0Y2ggIGNjRm9vICAgICAiRm9vIgkgICAgY29udGFpbmVkIG5leHRncm91cD1jY0ZpbGxlcgorICAgOnN5bnRheCByZWdpb24gY2NGaWxsZXIgIHN0YXJ0PSIuIiAgbWF0Y2hncm91cD1jY0JhciAgZW5kPSJCYXIiICBjb250YWluZWQKKworVGhpcyB3aWxsIGhpZ2hsaWdodCAiRm9vIiBhbmQgIkJhciIgZGlmZmVyZW50bHksIGFuZCBvbmx5IHdoZW4gdGhlcmUgaXMgYQorIkJhciIgYWZ0ZXIgIkZvbyIuICBJbiB0aGUgdGV4dCBsaW5lIGJlbG93LCAiZiIgc2hvd3Mgd2hlcmUgY2NGb28gaXMgdXNlZCBmb3IKK2hpZ2hsaWdodGluZywgYW5kICJiYmIiIHdoZXJlIGNjQmFyIGlzIHVzZWQuID4KKworICAgRm9vIGFzZGZhc2QgQmFyIGFzZGYgRm9vIGFzZGYgQmFyIGFzZGYKKyAgIGZmZgkgICAgICAgYmJiCWZmZgkgYmJiCisKK05vdGUgdGhlIHVzZSBvZiAiLlx7LX0iIHRvIHNraXAgYXMgbGl0dGxlIGFzIHBvc3NpYmxlIHVudGlsIHRoZSBuZXh0IEJhci4KK3doZW4gIi4qIiB3b3VsZCBiZSB1c2VkLCB0aGUgImFzZGYiIGluIGJldHdlZW4gIkJhciIgYW5kICJGb28iIHdvdWxkIGJlCitoaWdobGlnaHRlZCBhY2NvcmRpbmcgdG8gdGhlICJjY0Zvb2JhciIgZ3JvdXAsIGJlY2F1c2UgdGhlIGNjRm9vQmFyIG1hdGNoCit3b3VsZCBpbmNsdWRlIHRoZSBmaXJzdCAiRm9vIiBhbmQgdGhlIGxhc3QgIkJhciIgaW4gdGhlIGxpbmUgKHNlZSB8cGF0dGVybnwpLgorCisKK3NraXB3aGl0ZQkJCQkJCSo6c3luLXNraXB3aGl0ZSoKK3NraXBubAkJCQkJCQkqOnN5bi1za2lwbmwqCitza2lwZW1wdHkJCQkJCQkqOnN5bi1za2lwZW1wdHkqCisKK1RoZXNlIGFyZ3VtZW50cyBhcmUgb25seSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggIm5leHRncm91cCIuCVRoZXkgY2FuIGJlCit1c2VkIHRvIGFsbG93IHRoZSBuZXh0IGdyb3VwIHRvIG1hdGNoIGFmdGVyIHNraXBwaW5nIHNvbWUgdGV4dDoKKwlza2lwd2hpdGUJc2tpcCBvdmVyIHNwYWNlIGFuZCBUYWIgY2hhcmFjdGVycworCXNraXBubAkJc2tpcCBvdmVyIHRoZSBlbmQgb2YgYSBsaW5lCisJc2tpcGVtcHR5CXNraXAgb3ZlciBlbXB0eSBsaW5lcyAoaW1wbGllcyBhICJza2lwbmwiKQorCitXaGVuICJza2lwd2hpdGUiIGlzIHByZXNlbnQsIHRoZSB3aGl0ZSBzcGFjZSBpcyBvbmx5IHNraXBwZWQgaWYgdGhlcmUgaXMgbm8KK25leHQgZ3JvdXAgdGhhdCBtYXRjaGVzIHRoZSB3aGl0ZSBzcGFjZS4KKworV2hlbiAic2tpcG5sIiBpcyBwcmVzZW50LCB0aGUgbWF0Y2ggd2l0aCBuZXh0Z3JvdXAgbWF5IGJlIGZvdW5kIGluIHRoZSBuZXh0CitsaW5lLiAgVGhpcyBvbmx5IGhhcHBlbnMgd2hlbiB0aGUgY3VycmVudCBpdGVtIGVuZHMgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudAorbGluZSEgIFdoZW4gInNraXBubCIgaXMgbm90IHByZXNlbnQsIHRoZSBuZXh0Z3JvdXAgd2lsbCBvbmx5IGJlIGZvdW5kIGFmdGVyCit0aGUgY3VycmVudCBpdGVtIGluIHRoZSBzYW1lIGxpbmUuCisKK1doZW4gc2tpcHBpbmcgdGV4dCB3aGlsZSBsb29raW5nIGZvciBhIG5leHQgZ3JvdXAsIHRoZSBtYXRjaGVzIGZvciBvdGhlcgorZ3JvdXBzIGFyZSBpZ25vcmVkLiAgT25seSB3aGVuIG5vIG5leHQgZ3JvdXAgbWF0Y2hlcywgb3RoZXIgaXRlbXMgYXJlIHRyaWVkCitmb3IgYSBtYXRjaCBhZ2Fpbi4gIFRoaXMgbWVhbnMgdGhhdCBtYXRjaGluZyBhIG5leHQgZ3JvdXAgYW5kIHNraXBwaW5nIHdoaXRlCitzcGFjZSBhbmQgPEVPTD5zIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIG90aGVyIGl0ZW1zLgorCitFeGFtcGxlOiA+CisgIDpzeW4gbWF0Y2ggaWZzdGFydCAiXDxpZi4qIgkgIG5leHRncm91cD1pZmxpbmUgc2tpcHdoaXRlIHNraXBlbXB0eQorICA6c3luIG1hdGNoIGlmbGluZSAgIlteIFx0XS4qIiBuZXh0Z3JvdXA9aWZsaW5lIHNraXB3aGl0ZSBza2lwZW1wdHkgY29udGFpbmVkCisgIDpzeW4gbWF0Y2ggaWZsaW5lICAiZW5kaWYiCWNvbnRhaW5lZAorTm90ZSB0aGF0IHRoZSAiW14gXHRdLioiIG1hdGNoIG1hdGNoZXMgYWxsIG5vbi13aGl0ZSB0ZXh0LiAgVGh1cyBpdCB3b3VsZCBhbHNvCittYXRjaCAiZW5kaWYiLglUaGVyZWZvcmUgdGhlICJlbmRpZiIgbWF0Y2ggaXMgcHV0IGxhc3QsIHNvIHRoYXQgaXQgdGFrZXMKK3ByZWNlZGVuY2UuCitOb3RlIHRoYXQgdGhpcyBleGFtcGxlIGRvZXNuJ3Qgd29yayBmb3IgbmVzdGVkICJpZiJzLiAgWW91IG5lZWQgdG8gYWRkCisiY29udGFpbnMiIGFyZ3VtZW50cyB0byBtYWtlIHRoYXQgd29yayAob21pdHRlZCBmb3Igc2ltcGxpY2l0eSBvZiB0aGUKK2V4YW1wbGUpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIFN5bnRheCBwYXR0ZXJucwkJCQkqOnN5bi1wYXR0ZXJuKiAqRTQwMSogKkU0MDIqCisKK0luIHRoZSBzeW50YXggY29tbWFuZHMsIGEgcGF0dGVybiBtdXN0IGJlIHN1cnJvdW5kZWQgYnkgdHdvIGlkZW50aWNhbAorY2hhcmFjdGVycy4gIFRoaXMgaXMgbGlrZSBpdCB3b3JrcyBmb3IgdGhlICI6cyIgY29tbWFuZC4gIFRoZSBtb3N0IGNvbW1vbiB0bwordXNlIGlzIHRoZSBkb3VibGUgcXVvdGUuICBCdXQgaWYgdGhlIHBhdHRlcm4gY29udGFpbnMgYSBkb3VibGUgcXVvdGUsIHlvdSBjYW4KK3VzZSBhbm90aGVyIGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkIGluIHRoZSBwYXR0ZXJuLglFeGFtcGxlczogPgorICA6c3ludGF4IHJlZ2lvbiBDb21tZW50ICBzdGFydD0iL1wqIiAgZW5kPSJcKi8iCisgIDpzeW50YXggcmVnaW9uIFN0cmluZyAgIHN0YXJ0PSsiKyAgICBlbmQ9KyIrCSBza2lwPStcXCIrCisKK1NlZSB8cGF0dGVybnwgZm9yIHRoZSBleHBsYW5hdGlvbiBvZiB3aGF0IGEgcGF0dGVybiBpcy4gIFN5bnRheCBwYXR0ZXJucyBhcmUKK2Fsd2F5cyBpbnRlcnByZXRlZCBsaWtlIHRoZSAnbWFnaWMnIG9wdGlvbnMgaXMgc2V0LCBubyBtYXR0ZXIgd2hhdCB0aGUgYWN0dWFsCit2YWx1ZSBvZiAnbWFnaWMnIGlzLiAgQW5kIHRoZSBwYXR0ZXJucyBhcmUgaW50ZXJwcmV0ZWQgbGlrZSB0aGUgJ2wnIGZsYWcgaXMKK25vdCBpbmNsdWRlZCBpbiAnY3BvcHRpb25zJy4gIFRoaXMgd2FzIGRvbmUgdG8gbWFrZSBzeW50YXggZmlsZXMgcG9ydGFibGUgYW5kCitpbmRlcGVuZGVudCBvZiAnY29tcGF0aWJsZScgYW5kICdtYWdpYycgc2V0dGluZ3MuCisKK1RyeSB0byBhdm9pZCBwYXR0ZXJucyB0aGF0IGNhbiBtYXRjaCBhbiBlbXB0eSBzdHJpbmcsIHN1Y2ggYXMgIlthLXpdKiIuCitUaGlzIHNsb3dzIGRvd24gdGhlIGhpZ2hsaWdodGluZyBhIGxvdCwgYmVjYXVzZSBpdCBtYXRjaGVzIGV2ZXJ5d2hlcmUuCisKKwkJCQkJCSo6c3luLXBhdHRlcm4tb2Zmc2V0KgorVGhlIHBhdHRlcm4gY2FuIGJlIGZvbGxvd2VkIGJ5IGEgY2hhcmFjdGVyIG9mZnNldC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8KK2NoYW5nZSB0aGUgaGlnaGxpZ2h0ZWQgcGFydCwgYW5kIHRvIGNoYW5nZSB0aGUgdGV4dCBhcmVhIGluY2x1ZGVkIGluIHRoZQorbWF0Y2ggb3IgcmVnaW9uICh3aGljaCBvbmx5IG1hdHRlcnMgd2hlbiB0cnlpbmcgdG8gbWF0Y2ggb3RoZXIgaXRlbXMpLglCb3RoCithcmUgcmVsYXRpdmUgdG8gdGhlIG1hdGNoZWQgcGF0dGVybi4gIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIHNraXAKK3BhdHRlcm4gY2FuIGJlIHVzZWQgdG8gdGVsbCB3aGVyZSB0byBjb250aW51ZSBsb29raW5nIGZvciBhbiBlbmQgcGF0dGVybi4KKworVGhlIG9mZnNldCB0YWtlcyB0aGUgZm9ybSBvZiAie3doYXR9PXtvZmZzZXR9IgorVGhlIHt3aGF0fSBjYW4gYmUgb25lIG9mIHNldmVuIHN0cmluZ3M6CisKK21zCU1hdGNoIFN0YXJ0CW9mZnNldCBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaGVkIHRleHQKK21lCU1hdGNoIEVuZAlvZmZzZXQgZm9yIHRoZSBlbmQgb2YgdGhlIG1hdGNoZWQgdGV4dAoraHMJSGlnaGxpZ2h0IFN0YXJ0CW9mZnNldCBmb3Igd2hlcmUgdGhlIGhpZ2hsaWdodGluZyBzdGFydHMKK2hlCUhpZ2hsaWdodCBFbmQJb2Zmc2V0IGZvciB3aGVyZSB0aGUgaGlnaGxpZ2h0aW5nIGVuZHMKK3JzCVJlZ2lvbiBTdGFydAlvZmZzZXQgZm9yIHdoZXJlIHRoZSBib2R5IG9mIGEgcmVnaW9uIHN0YXJ0cworcmUJUmVnaW9uIEVuZAlvZmZzZXQgZm9yIHdoZXJlIHRoZSBib2R5IG9mIGEgcmVnaW9uIGVuZHMKK2xjCUxlYWRpbmcgQ29udGV4dAlvZmZzZXQgcGFzdCAibGVhZGluZyBjb250ZXh0IiBvZiBwYXR0ZXJuCisKK1RoZSB7b2Zmc2V0fSBjYW4gYmU6CisKK3MJc3RhcnQgb2YgdGhlIG1hdGNoZWQgcGF0dGVybgorcyt7bnJ9CXN0YXJ0IG9mIHRoZSBtYXRjaGVkIHBhdHRlcm4gcGx1cyB7bnJ9IGNoYXJzIHRvIHRoZSByaWdodAorcy17bnJ9CXN0YXJ0IG9mIHRoZSBtYXRjaGVkIHBhdHRlcm4gcGx1cyB7bnJ9IGNoYXJzIHRvIHRoZSBsZWZ0CitlCWVuZCBvZiB0aGUgbWF0Y2hlZCBwYXR0ZXJuCitlK3tucn0JZW5kIG9mIHRoZSBtYXRjaGVkIHBhdHRlcm4gcGx1cyB7bnJ9IGNoYXJzIHRvIHRoZSByaWdodAorZS17bnJ9CWVuZCBvZiB0aGUgbWF0Y2hlZCBwYXR0ZXJuIHBsdXMge25yfSBjaGFycyB0byB0aGUgbGVmdAore25yfQkoZm9yICJsYyIgb25seSk6IHN0YXJ0IG1hdGNoaW5nIHtucn0gY2hhcnMgdG8gdGhlIGxlZnQKKworRXhhbXBsZXM6ICJtcz1zKzEiLCAiaHM9ZS0yIiwgImxjPTMiLgorCitBbHRob3VnaCBhbGwgb2Zmc2V0cyBhcmUgYWNjZXB0ZWQgYWZ0ZXIgYW55IHBhdHRlcm4sIHRoZXkgYXJlIG5vdCBhbHdheXMKK21lYW5pbmdmdWwuICBUaGlzIHRhYmxlIHNob3dzIHdoaWNoIG9mZnNldHMgYXJlIGFjdHVhbGx5IHVzZWQ6CisKKwkJICAgIG1zCSBtZSAgIGhzICAgaGUJcnMgICByZQkgIGxjIH4KK21hdGNoIGl0ZW0JICAgIHllcyAgeWVzICB5ZXMgIHllcwktICAgIC0JICB5ZXMKK3JlZ2lvbiBpdGVtIHN0YXJ0ICAgeWVzICAtICAgIHllcyAgLQl5ZXMgIC0JICB5ZXMKK3JlZ2lvbiBpdGVtIHNraXAgICAgLQkgeWVzICAtICAgIC0JLSAgICAtCSAgeWVzCityZWdpb24gaXRlbSBlbmQgICAgIC0JIHllcyAgLSAgICB5ZXMJLSAgICB5ZXMgIHllcworCitPZmZzZXRzIGNhbiBiZSBjb25jYXRlbmF0ZWQsIHdpdGggYSAnLCcgaW4gYmV0d2Vlbi4gIEV4YW1wbGU6ID4KKyAgOnN5biBtYXRjaCBTdHJpbmcgIC8iW14iXSoiL2hzPXMrMSxoZT1lLTEKKzwKKyAgICBzb21lICJzdHJpbmciIHRleHQKKwkgIF5eXl5eXgkJaGlnaGxpZ2h0ZWQKKworTm90ZXM6CistIFRoZXJlIG11c3QgYmUgbm8gd2hpdGUgc3BhY2UgYmV0d2VlbiB0aGUgcGF0dGVybiBhbmQgdGhlIGNoYXJhY3RlcgorICBvZmZzZXQocykuCistIFRoZSBoaWdobGlnaHRlZCBhcmVhIHdpbGwgbmV2ZXIgYmUgb3V0c2lkZSBvZiB0aGUgbWF0Y2hlZCB0ZXh0LgorLSBBIG5lZ2F0aXZlIG9mZnNldCBmb3IgYW4gZW5kIHBhdHRlcm4gbWF5IG5vdCBhbHdheXMgd29yaywgYmVjYXVzZSB0aGUgZW5kCisgIHBhdHRlcm4gbWF5IGJlIGRldGVjdGVkIHdoZW4gdGhlIGhpZ2hsaWdodGluZyBzaG91bGQgYWxyZWFkeSBoYXZlIHN0b3BwZWQuCistIFRoZSBzdGFydCBvZiBhIG1hdGNoIGNhbm5vdCBiZSBpbiBhIGxpbmUgb3RoZXIgdGhhbiB3aGVyZSB0aGUgcGF0dGVybgorICBtYXRjaGVkLiAgVGhpcyBkb2Vzbid0IHdvcms6ICJhXG5iIm1zPWUuICBZb3UgY2FuIG1ha2UgdGhlIGhpZ2hsaWdodGluZworICBzdGFydCBpbiBhbm90aGVyIGxpbmUsIHRoaXMgZG9lcyB3b3JrOiAiYVxuYiJocz1lLgorCitFeGFtcGxlIChtYXRjaCBhIGNvbW1lbnQgYnV0IGRvbid0IGhpZ2hsaWdodCB0aGUgLyogYW5kICovKTogPgorICA6c3ludGF4IHJlZ2lvbiBDb21tZW50IHN0YXJ0PSIvXCoiaHM9ZSsxIGVuZD0iXCovImhlPXMtMQorPAorCS8qIHRoaXMgaXMgYSBjb21tZW50ICovCisJICBeXl5eXl5eXl5eXl5eXl5eXl5eCSAgaGlnaGxpZ2h0ZWQKKworQSBtb3JlIGNvbXBsaWNhdGVkIEV4YW1wbGU6ID4KKyAgOnN5biByZWdpb24gRXhhIG1hdGNoZ3JvdXA9Rm9vIHN0YXJ0PSJmb28iaHM9cysyLHJzPWUrMiBtYXRjaGdyb3VwPUJhciBlbmQ9ImJhciJtZT1lLTEsaGU9ZS0xLHJlPXMtMQorPAorCSBhYmNmb29zdHJpbmdiYXJhYmMKKwkgICAgbW1tbW1tbW1tbW0JICAgIG1hdGNoCisJICAgICAgc3NycnJyZWVlCSAgICBoaWdobGlnaHQgc3RhcnQvcmVnaW9uL2VuZCAoIkZvbyIsICJFeGEiIGFuZCAiQmFyIikKKworTGVhZGluZyBjb250ZXh0CQkJKjpzeW4tbGMqICo6c3luLWxlYWRpbmcqICo6c3luLWNvbnRleHQqCisKK05vdGU6IFRoaXMgaXMgYW4gb2Jzb2xldGUgZmVhdHVyZSwgb25seSBpbmNsdWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK3dpdGggcHJldmlvdXMgVmltIHZlcnNpb25zLiAgSXQncyBub3cgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSB8L1xAPD18IGNvbnN0cnVjdAoraW4gdGhlIHBhdHRlcm4uCisKK1RoZSAibGMiIG9mZnNldCBzcGVjaWZpZXMgbGVhZGluZyBjb250ZXh0IC0tIGEgcGFydCBvZiB0aGUgcGF0dGVybiB0aGF0IG11c3QKK2JlIHByZXNlbnQsIGJ1dCBpcyBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBtYXRjaC4gIEFuIG9mZnNldCBvZiAibGM9biIgd2lsbAorY2F1c2UgVmltIHRvIHN0ZXAgYmFjayBuIGNvbHVtbnMgYmVmb3JlIGF0dGVtcHRpbmcgdGhlIHBhdHRlcm4gbWF0Y2gsIGFsbG93aW5nCitjaGFyYWN0ZXJzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIG1hdGNoZWQgaW4gcHJldmlvdXMgcGF0dGVybnMgdG8gYWxzbyBiZQordXNlZCBhcyBsZWFkaW5nIGNvbnRleHQgZm9yIHRoaXMgbWF0Y2guICBUaGlzIGNhbiBiZSB1c2VkLCBmb3IgaW5zdGFuY2UsIHRvCitzcGVjaWZ5IHRoYXQgYW4gImVzY2FwaW5nIiBjaGFyYWN0ZXIgbXVzdCBub3QgcHJlY2VkZSB0aGUgbWF0Y2g6ID4KKworICA6c3luIG1hdGNoIFpOb0JhY2tzbGFzaCAiW15cXF16Im1zPXMrMQorICA6c3luIG1hdGNoIFdOb0JhY2tzbGFzaCAiW15cXF13ImxjPTEKKyAgOnN5biBtYXRjaCBVbmRlcmxpbmUgIl9cKyIKKzwKKwkgIF9fX3p6enogX19fd3d3dworCSAgXl5eCSAgXl5eCSAgbWF0Y2hlcyBVbmRlcmxpbmUKKwkgICAgICBeIF4JICBtYXRjaGVzIFpOb0JhY2tzbGFzaAorCQkgICAgIF5eXl4gbWF0Y2hlcyBXTm9CYWNrc2xhc2gKKworVGhlICJtcyIgb2Zmc2V0IGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSAibGMiIG9mZnNldCwKK3VubGVzcyB5b3Ugc2V0ICJtcyIgZXhwbGljaXRseS4KKworCitNdWx0aS1saW5lIHBhdHRlcm5zCQkJCQkqOnN5bi1tdWx0aS1saW5lKgorCitUaGUgcGF0dGVybnMgY2FuIGluY2x1ZGUgIlxuIiB0byBtYXRjaCBhbiBlbmQtb2YtbGluZS4JTW9zdGx5IHRoaXMgd29ya3MgYXMKK2V4cGVjdGVkLCBidXQgdGhlcmUgYXJlIGEgZmV3IGV4Y2VwdGlvbnMuCisKK1doZW4gdXNpbmcgYSBzdGFydCBwYXR0ZXJuIHdpdGggYW4gb2Zmc2V0LCB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoIGlzIG5vdAorYWxsb3dlZCB0byBzdGFydCBpbiBhIGZvbGxvd2luZyBsaW5lLiAgVGhlIGhpZ2hsaWdodGluZyBjYW4gc3RhcnQgaW4gYQorZm9sbG93aW5nIGxpbmUgdGhvdWdoLgorCitUaGUgc2tpcCBwYXR0ZXJuIGNhbiBpbmNsdWRlIHRoZSAiXG4iLCBidXQgdGhlIHNlYXJjaCBmb3IgYW4gZW5kIHBhdHRlcm4gd2lsbAorY29udGludWUgaW4gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbmV4dCBsaW5lLCBhbHNvIHdoZW4gdGhhdCBjaGFyYWN0ZXIgaXMKK21hdGNoZWQgYnkgdGhlIHNraXAgcGF0dGVybi4gIFRoaXMgaXMgYmVjYXVzZSByZWRyYXdpbmcgbWF5IHN0YXJ0IGluIGFueSBsaW5lCitoYWxmd2F5IGEgcmVnaW9uIGFuZCB0aGVyZSBpcyBubyBjaGVjayBpZiB0aGUgc2tpcCBwYXR0ZXJuIHN0YXJ0ZWQgaW4gYQorcHJldmlvdXMgbGluZS4JRm9yIGV4YW1wbGUsIGlmIHRoZSBza2lwIHBhdHRlcm4gaXMgImFcbmIiIGFuZCBhbiBlbmQgcGF0dGVybgoraXMgImIiLCB0aGUgZW5kIHBhdHRlcm4gZG9lcyBtYXRjaCBpbiB0aGUgc2Vjb25kIGxpbmUgb2YgdGhpczogPgorCSB4IHggYQorCSBiIHggeAorR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB0aGUgc2tpcCBwYXR0ZXJuIHNob3VsZCBub3QgbWF0Y2ggYW55IGNoYXJhY3RlcnMKK2FmdGVyIHRoZSAiXG4iLgorCisKK0V4dGVybmFsIG1hdGNoZXMJCQkJCSo6c3luLWV4dC1tYXRjaCoKKworVGhlc2UgZXh0cmEgcmVndWxhciBleHByZXNzaW9uIGl0ZW1zIGFyZSBhdmFpbGFibGUgaW4gcmVnaW9uIHBhdHRlcm5zOgorCisJCQkJCQkqL1x6KCogKi9ceihcKSogKkU1MCogKkU1MioKKyAgICBceihcKQlNYXJrcyB0aGUgc3ViLWV4cHJlc3Npb24gYXMgImV4dGVybmFsIiwgbWVhbmluZyB0aGF0IGl0IGlzIGNhbgorCQliZSBhY2Nlc3NlZCBmcm9tIGFub3RoZXIgcGF0dGVybiBtYXRjaC4gIEN1cnJlbnRseSBvbmx5IHVzYWJsZQorCQlpbiBkZWZpbmluZyBhIHN5bnRheCByZWdpb24gc3RhcnQgcGF0dGVybi4KKworCQkJCQkqL1x6MSogKi9cejIqICovXHozKiAqL1x6NCogKi9cejUqCisgICAgXHoxICAuLi4gIFx6OQkJCSovXHo2KiAqL1x6NyogKi9cejgqICovXHo5KiAqRTY2KiAqRTY3KgorCQlNYXRjaGVzIHRoZSBzYW1lIHN0cmluZyB0aGF0IHdhcyBtYXRjaGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCisJCXN1Yi1leHByZXNzaW9uIGluIGEgcHJldmlvdXMgc3RhcnQgcGF0dGVybiBtYXRjaC4KKworU29tZXRpbWVzIHRoZSBzdGFydCBhbmQgZW5kIHBhdHRlcm5zIG9mIGEgcmVnaW9uIG5lZWQgdG8gc2hhcmUgYSBjb21tb24KK3N1Yi1leHByZXNzaW9uLiAgQSBjb21tb24gZXhhbXBsZSBpcyB0aGUgImhlcmUiIGRvY3VtZW50IGluIFBlcmwgYW5kIG1hbnkgVW5peAorc2hlbGxzLiAgVGhpcyBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIHdpdGggdGhlICJceiIgc3BlY2lhbCByZWd1bGFyIGV4cHJlc3Npb24KK2l0ZW1zLCB3aGljaCBtYXJrcyBhIHN1Yi1leHByZXNzaW9uIGFzICJleHRlcm5hbCIsIGluIHRoZSBzZW5zZSB0aGF0IGl0IGNhbiBiZQorcmVmZXJlbmNlZCBmcm9tIG91dHNpZGUgdGhlIHBhdHRlcm4gaW4gd2hpY2ggaXQgaXMgZGVmaW5lZC4gIFRoZSBoZXJlLWRvY3VtZW50CitleGFtcGxlLCBmb3IgaW5zdGFuY2UsIGNhbiBiZSBkb25lIGxpa2UgdGhpczogPgorICA6c3luIHJlZ2lvbiBoZXJlRG9jIHN0YXJ0PSI8PFx6KFxJXGkqXCkiIGVuZD0iXlx6MSQiCisKK0FzIGNhbiBiZSBzZWVuIGhlcmUsIHRoZSBceiBhY3R1YWxseSBkb2VzIGRvdWJsZSBkdXR5LglJbiB0aGUgc3RhcnQgcGF0dGVybiwKK2l0IG1hcmtzIHRoZSAiXChcSVxpKlwpIiBzdWItZXhwcmVzc2lvbiBhcyBleHRlcm5hbDsgaW4gdGhlIGVuZCBwYXR0ZXJuLCBpdAorY2hhbmdlcyB0aGUgXDEgYmFjay1yZWZlcmVuY2UgaW50byBhbiBleHRlcm5hbCByZWZlcmVuY2UgcmVmZXJyaW5nIHRvIHRoZQorZmlyc3QgZXh0ZXJuYWwgc3ViLWV4cHJlc3Npb24gaW4gdGhlIHN0YXJ0IHBhdHRlcm4uICBFeHRlcm5hbCByZWZlcmVuY2VzIGNhbgorYWxzbyBiZSB1c2VkIGluIHNraXAgcGF0dGVybnM6ID4KKyAgOnN5biByZWdpb24gZm9vIHN0YXJ0PSJzdGFydCBcKFxJXGkqXCkiIHNraXA9Im5vdCBlbmQgXHoxIiBlbmQ9ImVuZCBcejEiCisKK05vdGUgdGhhdCBub3JtYWwgYW5kIGV4dGVybmFsIHN1Yi1leHByZXNzaW9ucyBhcmUgY29tcGxldGVseSBvcnRob2dvbmFsIGFuZAoraW5kZXhlZCBzZXBhcmF0ZWx5OyBmb3IgaW5zdGFuY2UsIGlmIHRoZSBwYXR0ZXJuICJceiguLlwpXCguLlwpIiBpcyBhcHBsaWVkCit0byB0aGUgc3RyaW5nICJhYWJiIiwgdGhlbiBcMSB3aWxsIHJlZmVyIHRvICJiYiIgYW5kIFx6MSB3aWxsIHJlZmVyIHRvICJhYSIuCitOb3RlIGFsc28gdGhhdCBleHRlcm5hbCBzdWItZXhwcmVzc2lvbnMgY2Fubm90IGJlIGFjY2Vzc2VkIGFzIGJhY2stcmVmZXJlbmNlcword2l0aGluIHRoZSBzYW1lIHBhdHRlcm4gbGlrZSBub3JtYWwgc3ViLWV4cHJlc3Npb25zLiAgSWYgeW91IHdhbnQgdG8gdXNlIG9uZQorc3ViLWV4cHJlc3Npb24gYXMgYm90aCBhIG5vcm1hbCBhbmQgYW4gZXh0ZXJuYWwgc3ViLWV4cHJlc3Npb24sIHlvdSBjYW4gbmVzdAordGhlIHR3bywgYXMgaW4gIlwoXHooLi4uXClcKSIuCisKK05vdGUgdGhhdCBvbmx5IG1hdGNoZXMgd2l0aGluIGEgc2luZ2xlIGxpbmUgY2FuIGJlIHVzZWQuICBNdWx0aS1saW5lIG1hdGNoZXMKK2Nhbm5vdCBiZSByZWZlcnJlZCB0by4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBTeW50YXggY2x1c3RlcnMJCQkJCSo6c3luLWNsdXN0ZXIqICpFNDAwKgorCis6c3lbbnRheF0gY2x1c3RlciB7Y2x1c3Rlci1uYW1lfSBbY29udGFpbnM9e2dyb3VwLW5hbWV9Li5dCisJCQkJIFthZGQ9e2dyb3VwLW5hbWV9Li5dCisJCQkJIFtyZW1vdmU9e2dyb3VwLW5hbWV9Li5dCisKK1RoaXMgY29tbWFuZCBhbGxvd3MgeW91IHRvIGNsdXN0ZXIgYSBsaXN0IG9mIHN5bnRheCBncm91cHMgdG9nZXRoZXIgdW5kZXIgYQorc2luZ2xlIG5hbWUuCisKKwljb250YWlucz17Z3JvdXAtbmFtZX0uLgorCQlUaGUgY2x1c3RlciBpcyBzZXQgdG8gdGhlIHNwZWNpZmllZCBsaXN0IG9mIGdyb3Vwcy4KKwlhZGQ9e2dyb3VwLW5hbWV9Li4KKwkJVGhlIHNwZWNpZmllZCBncm91cHMgYXJlIGFkZGVkIHRvIHRoZSBjbHVzdGVyLgorCXJlbW92ZT17Z3JvdXAtbmFtZX0uLgorCQlUaGUgc3BlY2lmaWVkIGdyb3VwcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjbHVzdGVyLgorCitBIGNsdXN0ZXIgc28gZGVmaW5lZCBtYXkgYmUgcmVmZXJyZWQgdG8gaW4gYSBjb250YWlucz0uLiwgbmV4dGdyb3VwPS4uLCBhZGQ9Li4KK29yIHJlbW92ZT0uLiBsaXN0IHdpdGggYSAiQCIgcHJlZml4LiAgWW91IGNhbiBhbHNvIHVzZSB0aGlzIG5vdGF0aW9uIHRvCitpbXBsaWNpdGx5IGRlY2xhcmUgYSBjbHVzdGVyIGJlZm9yZSBzcGVjaWZ5aW5nIGl0cyBjb250ZW50cy4KKworRXhhbXBsZTogPgorICAgOnN5bnRheCBtYXRjaCBUaGluZyAiIyBbXiNdXCsgIyIgY29udGFpbnM9QFRoaW5nTWVtYmVycworICAgOnN5bnRheCBjbHVzdGVyIFRoaW5nTWVtYmVycyBjb250YWlucz1UaGluZ01lbWJlcjEsVGhpbmdNZW1iZXIyCisKK0FzIHRoZSBwcmV2aW91cyBleGFtcGxlIHN1Z2dlc3RzLCBtb2RpZmljYXRpb25zIHRvIGEgY2x1c3RlciBhcmUgZWZmZWN0aXZlbHkKK3JldHJvYWN0aXZlOyB0aGUgbWVtYmVyc2hpcCBvZiB0aGUgY2x1c3RlciBpcyBjaGVja2VkIGF0IHRoZSBsYXN0IG1pbnV0ZSwgc28KK3RvIHNwZWFrOiA+CisgICA6c3ludGF4IGtleXdvcmQgQSBhYWEKKyAgIDpzeW50YXgga2V5d29yZCBCIGJiYgorICAgOnN5bnRheCBjbHVzdGVyIEFhbmRCIGNvbnRhaW5zPUEKKyAgIDpzeW50YXggbWF0Y2ggU3R1ZmYgIiggYWFhIGJiYiApIiBjb250YWlucz1AQWFuZEIKKyAgIDpzeW50YXggY2x1c3RlciBBYW5kQiBhZGQ9QgkgICIgbm93IGJvdGgga2V5d29yZHMgYXJlIG1hdGNoZWQgaW4gU3R1ZmYKKworVGhpcyBhbHNvIGhhcyBpbXBsaWNhdGlvbnMgZm9yIG5lc3RlZCBjbHVzdGVyczogPgorICAgOnN5bnRheCBrZXl3b3JkIEEgYWFhCisgICA6c3ludGF4IGtleXdvcmQgQiBiYmIKKyAgIDpzeW50YXggY2x1c3RlciBTbWFsbEdyb3VwIGNvbnRhaW5zPUIKKyAgIDpzeW50YXggY2x1c3RlciBCaWdHcm91cCBjb250YWlucz1BLEBTbWFsbEdyb3VwCisgICA6c3ludGF4IG1hdGNoIFN0dWZmICIoIGFhYSBiYmIgKSIgY29udGFpbnM9QEJpZ0dyb3VwCisgICA6c3ludGF4IGNsdXN0ZXIgQmlnR3JvdXAgcmVtb3ZlPUIJIiBubyBlZmZlY3QsIHNpbmNlIEIgaXNuJ3QgaW4gQmlnR3JvdXAKKyAgIDpzeW50YXggY2x1c3RlciBTbWFsbEdyb3VwIHJlbW92ZT1CCSIgbm93IGJiYiBpc24ndCBtYXRjaGVkIHdpdGhpbiBTdHVmZgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzkuIEluY2x1ZGluZyBzeW50YXggZmlsZXMJCQkJKjpzeW4taW5jbHVkZSogKkUzOTcqCisKK0l0IGlzIG9mdGVuIHVzZWZ1bCBmb3Igb25lIGxhbmd1YWdlJ3Mgc3ludGF4IGZpbGUgdG8gaW5jbHVkZSBhIHN5bnRheCBmaWxlIGZvcgorYSByZWxhdGVkIGxhbmd1YWdlLiAgRGVwZW5kaW5nIG9uIHRoZSBleGFjdCByZWxhdGlvbnNoaXAsIHRoaXMgY2FuIGJlIGRvbmUgaW4KK3R3byBkaWZmZXJlbnQgd2F5czoKKworCS0gSWYgdG9wLWxldmVsIHN5bnRheCBpdGVtcyBpbiB0aGUgaW5jbHVkZWQgc3ludGF4IGZpbGUgYXJlIHRvIGJlCisJICBhbGxvd2VkIGF0IHRoZSB0b3AgbGV2ZWwgaW4gdGhlIGluY2x1ZGluZyBzeW50YXgsIHlvdSBjYW4gc2ltcGx5IHVzZQorCSAgdGhlIHw6cnVudGltZXwgY29tbWFuZDogPgorCisgICIgSW4gY3BwLnZpbToKKyAgOnJ1bnRpbWUhIHN5bnRheC9jLnZpbQorICA6dW5sZXQgYjpjdXJyZW50X3N5bnRheAorCis8CS0gSWYgdG9wLWxldmVsIHN5bnRheCBpdGVtcyBpbiB0aGUgaW5jbHVkZWQgc3ludGF4IGZpbGUgYXJlIHRvIGJlCisJICBjb250YWluZWQgd2l0aGluIGEgcmVnaW9uIGluIHRoZSBpbmNsdWRpbmcgc3ludGF4LCB5b3UgY2FuIHVzZSB0aGUKKwkgICI6c3ludGF4IGluY2x1ZGUiIGNvbW1hbmQ6CisKKzpzeVtudGF4XSBpbmNsdWRlIFtAe2dyb3VwbGlzdC1uYW1lfV0ge2ZpbGUtbmFtZX0KKworCSAgQWxsIHN5bnRheCBpdGVtcyBkZWNsYXJlZCBpbiB0aGUgaW5jbHVkZWQgZmlsZSB3aWxsIGhhdmUgdGhlCisJICAiY29udGFpbmVkIiBmbGFnIGFkZGVkLiAgSW4gYWRkaXRpb24sIGlmIGEgZ3JvdXAgbGlzdCBpcyBzcGVjaWZpZWQsCisJICBhbGwgdG9wLWxldmVsIHN5bnRheCBpdGVtcyBpbiB0aGUgaW5jbHVkZWQgZmlsZSB3aWxsIGJlIGFkZGVkIHRvCisJICB0aGF0IGxpc3QuID4KKworICAgIiBJbiBwZXJsLnZpbToKKyAgIDpzeW50YXggaW5jbHVkZSBAUG9kIDxzZmlsZT46cDpoL3BvZC52aW0KKyAgIDpzeW50YXggcmVnaW9uIHBlcmxQT0Qgc3RhcnQ9Il49aGVhZCIgZW5kPSJePWN1dCIgY29udGFpbnM9QFBvZAorPAorCSAgV2hlbiB7ZmlsZS1uYW1lfSBpcyBhbiBhYnNvbHV0ZSBwYXRoIChzdGFydHMgd2l0aCAiLyIsICJjOiIsICIkVkFSIgorCSAgb3IgIjxzZmlsZT4iKSB0aGF0IGZpbGUgaXMgc291cmNlZC4gIFdoZW4gaXQgaXMgYSByZWxhdGl2ZSBwYXRoCisJICAoZS5nLiwgInN5bnRheC9wb2QudmltIikgdGhlIGZpbGUgaXMgc2VhcmNoZWQgZm9yIGluICdydW50aW1lcGF0aCcuCisJICBBbGwgbWF0Y2hpbmcgZmlsZXMgYXJlIGxvYWRlZC4gIFVzaW5nIGEgcmVsYXRpdmUgcGF0aCBpcworCSAgcmVjb21tZW5kZWQsIGJlY2F1c2UgaXQgYWxsb3dzIGEgdXNlciB0byByZXBsYWNlIHRoZSBpbmNsdWRlZCBmaWxlCisJICB3aXRoIGhpcyBvd24gdmVyc2lvbiwgd2l0aG91dCByZXBsYWNpbmcgdGhlIGZpbGUgdGhhdCBkb2VzIHRoZSAiOnN5bgorCSAgaW5jbHVkZSIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTAuIFN5bmNocm9uaXppbmcJCQkJKjpzeW4tc3luYyogKkU0MDMqICpFNDA0KgorCitWaW0gd2FudHMgdG8gYmUgYWJsZSB0byBzdGFydCByZWRyYXdpbmcgaW4gYW55IHBvc2l0aW9uIGluIHRoZSBkb2N1bWVudC4gIFRvCittYWtlIHRoaXMgcG9zc2libGUgaXQgbmVlZHMgdG8ga25vdyB0aGUgc3ludGF4IHN0YXRlIGF0IHRoZSBwb3NpdGlvbiB3aGVyZQorcmVkcmF3aW5nIHN0YXJ0cy4KKworOnN5W250YXhdIHN5bmMgW2Njb21tZW50IFtncm91cC1uYW1lXSB8IG1pbmxpbmVzPXtOfSB8IC4uLl0KKworVGhlcmUgYXJlIGZvdXIgd2F5cyB0byBzeW5jaHJvbml6ZToKKzEuIEFsd2F5cyBwYXJzZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlsZS4KKyAgIHw6c3luLXN5bmMtZmlyc3R8CisyLiBCYXNlZCBvbiBDLXN0eWxlIGNvbW1lbnRzLiAgVmltIHVuZGVyc3RhbmRzIGhvdyBDLWNvbW1lbnRzIHdvcmsgYW5kIGNhbgorICAgZmlndXJlIG91dCBpZiB0aGUgY3VycmVudCBsaW5lIHN0YXJ0cyBpbnNpZGUgb3Igb3V0c2lkZSBhIGNvbW1lbnQuCisgICB8OnN5bi1zeW5jLXNlY29uZHwKKzMuIEp1bXBpbmcgYmFjayBhIGNlcnRhaW4gbnVtYmVyIG9mIGxpbmVzIGFuZCBzdGFydCBwYXJzaW5nIHRoZXJlLgorICAgfDpzeW4tc3luYy10aGlyZHwKKzQuIFNlYXJjaGluZyBiYWNrd2FyZHMgaW4gdGhlIHRleHQgZm9yIGEgcGF0dGVybiB0byBzeW5jIG9uLgorICAgfDpzeW4tc3luYy1mb3VydGh8CisKKwkJCQkqOnN5bi1zeW5jLW1heGxpbmVzKiAqOnN5bi1zeW5jLW1pbmxpbmVzKgorRm9yIHRoZSBsYXN0IHRocmVlIG1ldGhvZHMsIHRoZSBsaW5lIHJhbmdlIHdoZXJlIHRoZSBwYXJzaW5nIGNhbiBzdGFydCBpcworbGltaXRlZCBieSAibWlubGluZXMiIGFuZCAibWF4bGluZXMiLgorCitJZiB0aGUgIm1pbmxpbmVzPXtOfSIgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBwYXJzaW5nIGFsd2F5cyBzdGFydHMgYXQgbGVhc3QKK3RoYXQgbWFueSBsaW5lcyBiYWNrd2FyZHMuICBUaGlzIGNhbiBiZSB1c2VkIGlmIHRoZSBwYXJzaW5nIG1heSB0YWtlIGEgZmV3CitsaW5lcyBiZWZvcmUgaXQncyBjb3JyZWN0LCBvciB3aGVuIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBzeW5jaW5nLgorCitJZiB0aGUgIm1heGxpbmVzPXtOfSIgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBhcmUgc2VhcmNoZWQKK2ZvciBhIGNvbW1lbnQgb3Igc3luY2luZyBwYXR0ZXJuIGlzIHJlc3RyaWN0ZWQgdG8gTiBsaW5lcyBiYWNrd2FyZHMgKGFmdGVyCithZGRpbmcgIm1pbmxpbmVzIikuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgaGF2ZSBmZXcgdGhpbmdzIHRvIHN5bmMgb24gYW5kIGEKK3Nsb3cgbWFjaGluZS4gIEV4YW1wbGU6ID4KKyAgIDpzeW50YXggc3luYyBjY29tbWVudCBtYXhsaW5lcz01MDAKKzwKKwkJCQkJCSo6c3luLXN5bmMtbGluZWJyZWFrcyoKK1doZW4gdXNpbmcgYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBtdWx0aXBsZSBsaW5lcywgYSBjaGFuZ2UgaW4gb25lIGxpbmUgbWF5CitjYXVzZSBhIHBhdHRlcm4gdG8gbm8gbG9uZ2VyIG1hdGNoIGluIGEgcHJldmlvdXMgbGluZS4JVGhpcyBtZWFucyBoYXMgdG8KK3N0YXJ0IGFib3ZlIHdoZXJlIHRoZSBjaGFuZ2Ugd2FzIG1hZGUuCUhvdyBtYW55IGxpbmVzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aAordGhlICJsaW5lYnJlYWtzIiBhcmd1bWVudC4gIEZvciBleGFtcGxlLCB3aGVuIGEgcGF0dGVybiBtYXkgaW5jbHVkZSBvbmUgbGluZQorYnJlYWsgdXNlIHRoaXM6ID4KKyAgIDpzeW50YXggc3luYyBsaW5lYnJlYWtzPTEKK1RoZSByZXN1bHQgaXMgdGhhdCByZWRyYXdpbmcgYWx3YXlzIHN0YXJ0cyBhdCBsZWFzdCBvbmUgbGluZSBiZWZvcmUgd2hlcmUgYQorY2hhbmdlIHdhcyBtYWRlLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yICJsaW5lYnJlYWtzIiBpcyB6ZXJvLiAgVXN1YWxseSB0aGUKK3ZhbHVlIGZvciAibWlubGluZXMiIGlzIGJpZ2dlciB0aGFuICJsaW5lYnJlYWtzIi4KKworCitGaXJzdCBzeW5jaW5nIG1ldGhvZDoJCQkqOnN5bi1zeW5jLWZpcnN0KgorPgorICAgOnN5bnRheCBzeW5jIGZyb21zdGFydAorCitUaGUgZmlsZSB3aWxsIGJlIHBhcnNlZCBmcm9tIHRoZSBzdGFydC4gIFRoaXMgbWFrZXMgc3ludGF4IGhpZ2hsaWdodGluZworYWNjdXJhdGUsIGJ1dCBjYW4gYmUgc2xvdyBmb3IgbG9uZyBmaWxlcy4gIFZpbSBjYWNoZXMgcHJldmlvdXNseSBwYXJzZWQgdGV4dCwKK3NvIHRoYXQgaXQncyBvbmx5IHNsb3cgd2hlbiBwYXJzaW5nIHRoZSB0ZXh0IGZvciB0aGUgZmlyc3QgdGltZS4gIEhvd2V2ZXIsCit3aGVuIG1ha2luZyBjaGFuZ2VzIHNvbWUgcGFydCBvZiB0aGUgbmV4dCBuZWVkcyB0byBiZSBwYXJzZWQgYWdhaW4gKHdvcnN0CitjYXNlOiB0byB0aGUgZW5kIG9mIHRoZSBmaWxlKS4KKworVXNpbmcgImZyb21zdGFydCIgaXMgZXF1aXZhbGVudCB0byB1c2luZyAibWlubGluZXMiIHdpdGggYSB2ZXJ5IGxhcmdlIG51bWJlci4KKworCitTZWNvbmQgc3luY2luZyBtZXRob2Q6CQkJKjpzeW4tc3luYy1zZWNvbmQqICo6c3luLXN5bmMtY2NvbW1lbnQqCisKK0ZvciB0aGUgc2Vjb25kIG1ldGhvZCwgb25seSB0aGUgImNjb21tZW50IiBhcmd1bWVudCBuZWVkcyB0byBiZSBnaXZlbi4KK0V4YW1wbGU6ID4KKyAgIDpzeW50YXggc3luYyBjY29tbWVudAorCitXaGVuIFZpbSBmaW5kcyB0aGF0IHRoZSBsaW5lIHdoZXJlIGRpc3BsYXlpbmcgc3RhcnRzIGlzIGluc2lkZSBhIEMtc3R5bGUKK2NvbW1lbnQsIHRoZSBsYXN0IHJlZ2lvbiBzeW50YXggaXRlbSB3aXRoIHRoZSBncm91cC1uYW1lICJDb21tZW50IiB3aWxsIGJlCit1c2VkLiAgVGhpcyByZXF1aXJlcyB0aGF0IHRoZXJlIGlzIGEgcmVnaW9uIHdpdGggdGhlIGdyb3VwLW5hbWUgIkNvbW1lbnQiIQorQW4gYWx0ZXJuYXRlIGdyb3VwIG5hbWUgY2FuIGJlIHNwZWNpZmllZCwgZm9yIGV4YW1wbGU6ID4KKyAgIDpzeW50YXggc3luYyBjY29tbWVudCBqYXZhQ29tbWVudAorVGhpcyBtZWFucyB0aGF0IHRoZSBsYXN0IGl0ZW0gc3BlY2lmaWVkIHdpdGggInN5biByZWdpb24gamF2YUNvbW1lbnQiIHdpbGwgYmUKK3VzZWQgZm9yIHRoZSBkZXRlY3RlZCBDIGNvbW1lbnQgcmVnaW9uLiAgVGhpcyBvbmx5IHdvcmtzIHByb3Blcmx5IGlmIHRoYXQKK3JlZ2lvbiBkb2VzIGhhdmUgYSBzdGFydCBwYXR0ZXJuICJcLyoiIGFuZCBhbiBlbmQgcGF0dGVybiAiKlwvIi4KKworVGhlICJtYXhsaW5lcyIgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHNlYXJjaCB0byBhIG51bWJlciBvZgorbGluZXMuCVRoZSAibWlubGluZXMiIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIGF0IGxlYXN0IHN0YXJ0IGEgbnVtYmVyIG9mCitsaW5lcyBiYWNrIChlLmcuLCBmb3Igd2hlbiB0aGVyZSBpcyBzb21lIGNvbnN0cnVjdCB0aGF0IG9ubHkgdGFrZXMgYSBmZXcKK2xpbmVzLCBidXQgaXQgaGFyZCB0byBzeW5jIG9uKS4KKworTm90ZTogU3luY2luZyBvbiBhIEMgY29tbWVudCBkb2Vzbid0IHdvcmsgcHJvcGVybHkgd2hlbiBzdHJpbmdzIGFyZSB1c2VkCit0aGF0IGNyb3NzIGEgbGluZSBhbmQgY29udGFpbiBhICIqLyIuICBTaW5jZSBsZXR0aW5nIHN0cmluZ3MgY3Jvc3MgYSBsaW5lCitpcyBhIGJhZCBwcm9ncmFtbWluZyBoYWJpdCAobWFueSBjb21waWxlcnMgZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSksIGFuZCB0aGUKK2NoYW5jZSBvZiBhICIqLyIgYXBwZWFyaW5nIGluc2lkZSBhIGNvbW1lbnQgaXMgdmVyeSBzbWFsbCwgdGhpcyByZXN0cmljdGlvbgoraXMgaGFyZGx5IGV2ZXIgbm90aWNlZC4KKworCitUaGlyZCBzeW5jaW5nIG1ldGhvZDoJCQkJKjpzeW4tc3luYy10aGlyZCoKKworRm9yIHRoZSB0aGlyZCBtZXRob2QsIG9ubHkgdGhlICJtaW5saW5lcz17Tn0iIGFyZ3VtZW50IG5lZWRzIHRvIGJlIGdpdmVuLgorVmltIHdpbGwgc3VidHJhY3Qge059IGZyb20gdGhlIGxpbmUgbnVtYmVyIGFuZCBzdGFydCBwYXJzaW5nIHRoZXJlLiAgVGhpcworbWVhbnMge059IGV4dHJhIGxpbmVzIG5lZWQgdG8gYmUgcGFyc2VkLCB3aGljaCBtYWtlcyB0aGlzIG1ldGhvZCBhIGJpdCBzbG93ZXIuCitFeGFtcGxlOiA+CisgICA6c3ludGF4IHN5bmMgbWlubGluZXM9NTAKKworImxpbmVzIiBpcyBlcXVpdmFsZW50IHRvICJtaW5saW5lcyIgKHVzZWQgYnkgb2xkZXIgdmVyc2lvbnMpLgorCisKK0ZvdXJ0aCBzeW5jaW5nIG1ldGhvZDoJCQkJKjpzeW4tc3luYy1mb3VydGgqCisKK1RoZSBpZGVhIGlzIHRvIHN5bmNocm9uaXplIG9uIHRoZSBlbmQgb2YgYSBmZXcgc3BlY2lmaWMgcmVnaW9ucywgY2FsbGVkIGEKK3N5bmMgcGF0dGVybi4gIE9ubHkgcmVnaW9ucyBjYW4gY3Jvc3MgbGluZXMsIHNvIHdoZW4gd2UgZmluZCB0aGUgZW5kIG9mIHNvbWUKK3JlZ2lvbiwgd2UgbWlnaHQgYmUgYWJsZSB0byBrbm93IGluIHdoaWNoIHN5bnRheCBpdGVtIHdlIGFyZS4gIFRoZSBzZWFyY2gKK3N0YXJ0cyBpbiB0aGUgbGluZSBqdXN0IGFib3ZlIHRoZSBvbmUgd2hlcmUgcmVkcmF3aW5nIHN0YXJ0cy4gIEZyb20gdGhlcmUKK3RoZSBzZWFyY2ggY29udGludWVzIGJhY2t3YXJkcyBpbiB0aGUgZmlsZS4KKworVGhpcyB3b3JrcyBqdXN0IGxpa2UgdGhlIG5vbi1zeW5jaW5nIHN5bnRheCBpdGVtcy4gIFlvdSBjYW4gdXNlIGNvbnRhaW5lZAorbWF0Y2hlcywgbmV4dGdyb3VwLCBldGMuICBCdXQgdGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVuY2VzOgorLSBLZXl3b3JkcyBjYW5ub3QgYmUgdXNlZC4KKy0gVGhlIHN5bnRheCBpdGVtcyB3aXRoIHRoZSAic3luYyIga2V5d29yZCBmb3JtIGEgY29tcGxldGVseSBzZXBhcmF0ZWQgZ3JvdXAKKyAgb2Ygc3ludGF4IGl0ZW1zLiAgWW91IGNhbid0IG1peCBzeW5jaW5nIGdyb3VwcyBhbmQgbm9uLXN5bmNpbmcgZ3JvdXBzLgorLSBUaGUgbWF0Y2hpbmcgd29ya3MgYmFja3dhcmRzIGluIHRoZSBidWZmZXIgKGxpbmUgYnkgbGluZSksIGluc3RlYWQgb2YKKyAgZm9yd2FyZHMuCistIEEgbGluZSBjb250aW51YXRpb24gcGF0dGVybiBjYW4gYmUgZ2l2ZW4uICBJdCBpcyB1c2VkIHRvIGRlY2lkZSB3aGljaCBncm91cAorICBvZiBsaW5lcyBuZWVkIHRvIGJlIHNlYXJjaGVkIGxpa2UgdGhleSB3ZXJlIG9uZSBsaW5lLiAgVGhpcyBtZWFucyB0aGF0IHRoZQorICBzZWFyY2ggZm9yIGEgbWF0Y2ggd2l0aCB0aGUgc3BlY2lmaWVkIGl0ZW1zIHN0YXJ0cyBpbiB0aGUgZmlyc3Qgb2YgdGhlCisgIGNvbnNlY3V0aXZlIHRoYXQgY29udGFpbiB0aGUgY29udGludWF0aW9uIHBhdHRlcm4uCistIFdoZW4gdXNpbmcgIm5leHRncm91cCIgb3IgImNvbnRhaW5zIiwgdGhpcyBvbmx5IHdvcmtzIHdpdGhpbiBvbmUgbGluZSAob3IKKyAgZ3JvdXAgb2YgY29udGludWVkIGxpbmVzKS4KKy0gV2hlbiB1c2luZyBhIHJlZ2lvbiwgaXQgbXVzdCBzdGFydCBhbmQgZW5kIGluIHRoZSBzYW1lIGxpbmUgKG9yIGdyb3VwIG9mCisgIGNvbnRpbnVlZCBsaW5lcykuICBPdGhlcndpc2UgdGhlIGVuZCBpcyBhc3N1bWVkIHRvIGJlIGF0IHRoZSBlbmQgb2YgdGhlCisgIGxpbmUgKG9yIGdyb3VwIG9mIGNvbnRpbnVlZCBsaW5lcykuCistIFdoZW4gYSBtYXRjaCB3aXRoIGEgc3luYyBwYXR0ZXJuIGlzIGZvdW5kLCB0aGUgcmVzdCBvZiB0aGUgbGluZSAob3IgZ3JvdXAgb2YKKyAgY29udGludWVkIGxpbmVzKSBpcyBzZWFyY2hlZCBmb3IgYW5vdGhlciBtYXRjaC4gIFRoZSBsYXN0IG1hdGNoIGlzIHVzZWQuCisgIFRoaXMgaXMgdXNlZCB3aGVuIGEgbGluZSBjYW4gY29udGFpbiBib3RoIHRoZSBzdGFydCBlbmQgdGhlIGVuZCBvZiBhIHJlZ2lvbgorICAoZS5nLiwgaW4gYSBDLWNvbW1lbnQgbGlrZSAvKiB0aGlzICovLCB0aGUgbGFzdCAiKi8iIGlzIHVzZWQpLgorCitUaGVyZSBhcmUgdHdvIHdheXMgaG93IGEgbWF0Y2ggd2l0aCBhIHN5bmMgcGF0dGVybiBjYW4gYmUgdXNlZDoKKzEuIFBhcnNpbmcgZm9yIGhpZ2hsaWdodGluZyBzdGFydHMgd2hlcmUgcmVkcmF3aW5nIHN0YXJ0cyAoYW5kIHdoZXJlIHRoZQorICAgc2VhcmNoIGZvciB0aGUgc3luYyBwYXR0ZXJuIHN0YXJ0ZWQpLiAgVGhlIHN5bnRheCBncm91cCB0aGF0IGlzIGV4cGVjdGVkCisgICB0byBiZSB2YWxpZCB0aGVyZSBtdXN0IGJlIHNwZWNpZmllZC4gIFRoaXMgd29ya3Mgd2VsbCB3aGVuIHRoZSByZWdpb25zCisgICB0aGF0IGNyb3NzIGxpbmVzIGNhbm5vdCBjb250YWluIG90aGVyIHJlZ2lvbnMuCisyLiBQYXJzaW5nIGZvciBoaWdobGlnaHRpbmcgY29udGludWVzIGp1c3QgYWZ0ZXIgdGhlIG1hdGNoLiAgVGhlIHN5bnRheCBncm91cAorICAgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBwcmVzZW50IGp1c3QgYWZ0ZXIgdGhlIG1hdGNoIG11c3QgYmUgc3BlY2lmaWVkLgorICAgVGhpcyBjYW4gYmUgdXNlZCB3aGVuIHRoZSBwcmV2aW91cyBtZXRob2QgZG9lc24ndCB3b3JrIHdlbGwuICBJdCdzIG11Y2gKKyAgIHNsb3dlciwgYmVjYXVzZSBtb3JlIHRleHQgbmVlZHMgdG8gYmUgcGFyc2VkLgorQm90aCB0eXBlcyBvZiBzeW5jIHBhdHRlcm5zIGNhbiBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuCisKK0Jlc2lkZXMgdGhlIHN5bmMgcGF0dGVybnMsIG90aGVyIG1hdGNoZXMgYW5kIHJlZ2lvbnMgY2FuIGJlIHNwZWNpZmllZCwgdG8KK2F2b2lkIGZpbmRpbmcgdW53YW50ZWQgbWF0Y2hlcy4KKworW1RoZSByZWFzb24gdGhhdCB0aGUgc3luYyBwYXR0ZXJucyBhcmUgZ2l2ZW4gc2VwYXJhdGVseSwgaXMgdGhhdCBtb3N0bHkgdGhlCitzZWFyY2ggZm9yIHRoZSBzeW5jIHBvaW50IGNhbiBiZSBtdWNoIHNpbXBsZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlCitoaWdobGlnaHRpbmcuICBUaGUgcmVkdWNlZCBudW1iZXIgb2YgcGF0dGVybnMgbWVhbnMgaXQgd2lsbCBnbyAobXVjaCkKK2Zhc3Rlci5dCisKKwkJCQkJICAgICpzeW4tc3luYy1ncm91cGhlcmUqICpFMzkzKiAqRTM5NCoKKyAgICA6c3ludGF4IHN5bmMgbWF0Y2gge3N5bmMtZ3JvdXAtbmFtZX0gZ3JvdXBoZXJlIHtncm91cC1uYW1lfSAicGF0dGVybiIgLi4KKworCURlZmluZSBhIG1hdGNoIHRoYXQgaXMgdXNlZCBmb3Igc3luY2luZy4gIHtncm91cC1uYW1lfSBpcyB0aGUKKwluYW1lIG9mIGEgc3ludGF4IGdyb3VwIHRoYXQgZm9sbG93cyBqdXN0IGFmdGVyIHRoZSBtYXRjaC4gIFBhcnNpbmcKKwlvZiB0aGUgdGV4dCBmb3IgaGlnaGxpZ2h0aW5nIHN0YXJ0cyBqdXN0IGFmdGVyIHRoZSBtYXRjaC4gIEEgcmVnaW9uCisJbXVzdCBleGlzdCBmb3IgdGhpcyB7Z3JvdXAtbmFtZX0uICBUaGUgZmlyc3Qgb25lIGRlZmluZWQgd2lsbCBiZSB1c2VkLgorCSJOT05FIiBjYW4gYmUgdXNlZCBmb3Igd2hlbiB0aGVyZSBpcyBubyBzeW50YXggZ3JvdXAgYWZ0ZXIgdGhlIG1hdGNoLgorCisJCQkJCQkqc3luLXN5bmMtZ3JvdXB0aGVyZSoKKyAgICA6c3ludGF4IHN5bmMgbWF0Y2gge3N5bmMtZ3JvdXAtbmFtZX0gZ3JvdXB0aGVyZSB7Z3JvdXAtbmFtZX0gInBhdHRlcm4iIC4uCisKKwlMaWtlICJncm91cGhlcmUiLCBidXQge2dyb3VwLW5hbWV9IGlzIHRoZSBuYW1lIG9mIGEgc3ludGF4IGdyb3VwIHRoYXQKKwlpcyB0byBiZSB1c2VkIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSB3aGVyZSBzZWFyY2hpbmcgZm9yIHRoZSBzeW5jCisJcG9pbnQgc3RhcnRlZC4JVGhlIHRleHQgYmV0d2VlbiB0aGUgbWF0Y2ggYW5kIHRoZSBzdGFydCBvZiB0aGUgc3luYworCXBhdHRlcm4gc2VhcmNoaW5nIGlzIGFzc3VtZWQgbm90IHRvIGNoYW5nZSB0aGUgc3ludGF4IGhpZ2hsaWdodGluZy4KKwlGb3IgZXhhbXBsZSwgaW4gQyB5b3UgY291bGQgc2VhcmNoIGJhY2t3YXJkcyBmb3IgIi8qIiBhbmQgIiovIi4gIElmCisJIi8qIiBpcyBmb3VuZCBmaXJzdCwgeW91IGtub3cgdGhhdCB5b3UgYXJlIGluc2lkZSBhIGNvbW1lbnQsIHNvIHRoZQorCSJncm91cHRoZXJlIiBpcyAiY0NvbW1lbnQiLiAgSWYgIiovIiBpcyBmb3VuZCBmaXJzdCwgeW91IGtub3cgdGhhdCB5b3UKKwlhcmUgbm90IGluIGEgY29tbWVudCwgc28gdGhlICJncm91cHRoZXJlIiBpcyAiTk9ORSIuICAoaW4gcHJhY3RpY2UKKwlpdCdzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQsIGJlY2F1c2UgdGhlICIvKiIgYW5kICIqLyIgY291bGQgYXBwZWFyCisJaW5zaWRlIGEgc3RyaW5nLiAgVGhhdCdzIGxlZnQgYXMgYW4gZXhlcmNpc2UgdG8gdGhlIHJlYWRlci4uLikuCisKKyAgICA6c3ludGF4IHN5bmMgbWF0Y2ggLi4KKyAgICA6c3ludGF4IHN5bmMgcmVnaW9uIC4uCisKKwlXaXRob3V0IGEgImdyb3VwdGhlcmUiIGFyZ3VtZW50LiAgRGVmaW5lIGEgcmVnaW9uIG9yIG1hdGNoIHRoYXQgaXMKKwlza2lwcGVkIHdoaWxlIHNlYXJjaGluZyBmb3IgYSBzeW5jIHBvaW50LgorCisgICAgOnN5bnRheCBzeW5jIGxpbmVjb250IHtwYXR0ZXJufQorCisJV2hlbiB7cGF0dGVybn0gbWF0Y2hlcyBpbiBhIGxpbmUsIGl0IGlzIGNvbnNpZGVyZWQgdG8gY29udGludWUgaW4KKwl0aGUgbmV4dCBsaW5lLglUaGlzIG1lYW5zIHRoYXQgdGhlIHNlYXJjaCBmb3IgYSBzeW5jIHBvaW50IHdpbGwKKwljb25zaWRlciB0aGUgbGluZXMgdG8gYmUgY29uY2F0ZW5hdGVkLgorCitJZiB0aGUgIm1heGxpbmVzPXtOfSIgYXJndW1lbnQgaXMgZ2l2ZW4gdG9vLCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgYXJlCitzZWFyY2hlZCBmb3IgYSBtYXRjaCBpcyByZXN0cmljdGVkIHRvIE4uICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgaGF2ZSB2ZXJ5CitmZXcgdGhpbmdzIHRvIHN5bmMgb24gYW5kIGEgc2xvdyBtYWNoaW5lLiAgRXhhbXBsZTogPgorICAgOnN5bnRheCBzeW5jIG1heGxpbmVzPTEwMAorCitZb3UgY2FuIGNsZWFyIGFsbCBzeW5jIHNldHRpbmdzIHdpdGg6ID4KKyAgIDpzeW50YXggc3luYyBjbGVhcgorCitZb3UgY2FuIGNsZWFyIHNwZWNpZmljIHN5bmMgcGF0dGVybnMgd2l0aDogPgorICAgOnN5bnRheCBzeW5jIGNsZWFyIHtzeW5jLWdyb3VwLW5hbWV9IC4uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTEuIExpc3Rpbmcgc3ludGF4IGl0ZW1zCQkqOnN5bnRheCogKjpzeSogKjpzeW4qICo6c3luLWxpc3QqCisKK1RoaXMgY29tbWFuZHMgbGlzdHMgYWxsIHRoZSBzeW50YXggaXRlbXM6ID4KKworICAgIDpzeVtudGF4XSBbbGlzdF0KKworVG8gc2hvdyB0aGUgc3ludGF4IGl0ZW1zIGZvciBvbmUgc3ludGF4IGdyb3VwOiA+CisKKyAgICA6c3lbbnRheF0gbGlzdCB7Z3JvdXAtbmFtZX0KKworVG8gbGlzdCB0aGUgc3ludGF4IGdyb3VwcyBpbiBvbmUgY2x1c3RlcjoJCQkqRTM5MioJPgorCisgICAgOnN5W250YXhdIGxpc3QgQHtjbHVzdGVyLW5hbWV9CisKK1NlZSBhYm92ZSBmb3Igb3RoZXIgYXJndW1lbnRzIGZvciB0aGUgIjpzeW50YXgiIGNvbW1hbmQuCisKK05vdGUgdGhhdCB0aGUgIjpzeW50YXgiIGNvbW1hbmQgY2FuIGJlIGFiYnJldmlhdGVkIHRvICI6c3kiLCBhbHRob3VnaCAiOnN5biIKK2lzIG1vc3RseSB1c2VkLCBiZWNhdXNlIGl0IGxvb2tzIGJldHRlci4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMi4gSGlnaGxpZ2h0IGNvbW1hbmQJCQkqOmhpZ2hsaWdodCogKjpoaSogKkUyOCogKkU0MTEqICpFNDE1KgorCitUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgaGlnaGxpZ2h0IGdyb3VwczoKKy0gVGhlIG9uZXMgdXNlZCBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2VzLiAgRm9yIHRoZXNlIHRoZSBuYW1lIHN0YXJ0cyB3aXRoIHRoZQorICBuYW1lIG9mIHRoZSBsYW5ndWFnZS4gIE1hbnkgb2YgdGhlc2UgZG9uJ3QgaGF2ZSBhbnkgYXR0cmlidXRlcywgYnV0IGFyZQorICBsaW5rZWQgdG8gYSBncm91cCBvZiB0aGUgc2Vjb25kIHR5cGUuCistIFRoZSBvbmVzIHVzZWQgZm9yIGFsbCBzeW50YXggbGFuZ3VhZ2VzLgorLSBUaGUgb25lcyB1c2VkIGZvciB0aGUgJ2hpZ2hsaWdodCcgb3B0aW9uLgorCQkJCQkJCSpoaXRlc3QudmltKgorWW91IGNhbiBzZWUgYWxsIHRoZSBncm91cHMgY3VycmVudGx5IGFjdGl2ZSB3aXRoIHRoaXMgY29tbWFuZDogPgorICAgIDpzbyAkVklNUlVOVElNRS9zeW50YXgvaGl0ZXN0LnZpbQorVGhpcyB3aWxsIG9wZW4gYSBuZXcgd2luZG93IGNvbnRhaW5pbmcgYWxsIGhpZ2hsaWdodCBncm91cCBuYW1lcywgZGlzcGxheWVkCitpbiB0aGVpciBvd24gY29sb3IuCisKKwkJCQkJCSo6Y29sbyogKjpjb2xvcnNjaGVtZSogKkUxODUqCis6Y29sb1tyc2NoZW1lXSB7bmFtZX0JTG9hZCBjb2xvciBzY2hlbWUge25hbWV9LiAgVGhpcyBzZWFyY2hlcyAncnVudGltZXBhdGgnCisJCQlmb3IgdGhlIGZpbGUgImNvbG9ycy97bmFtZX0udmltLiAgVGhlIGZpcnN0IG9uZSB0aGF0CisJCQlpcyBmb3VuZCBpcyBsb2FkZWQuCisJCQlUbyBzZWUgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgY29sb3Igc2NoZW1lCisJCQkoaWYgdGhlcmUgaXMgb25lKTogPgorCQkJCTplY2hvIGc6Y29sb3JzX25hbWUKKzwJCQlEb2Vzbid0IHdvcmsgcmVjdXJzaXZlbHksIHRodXMgeW91IGNhbid0IHVzZQorCQkJIjpjb2xvcnNjaGVtZSIgaW4gYSBjb2xvciBzY2hlbWUgc2NyaXB0LgorCis6aGlbZ2hsaWdodF0JCUxpc3QgYWxsIHRoZSBjdXJyZW50IGhpZ2hsaWdodCBncm91cHMgdGhhdCBoYXZlCisJCQlhdHRyaWJ1dGVzIHNldC4KKworOmhpW2dobGlnaHRdIHtncm91cC1uYW1lfQorCQkJTGlzdCBvbmUgaGlnaGxpZ2h0IGdyb3VwLgorCis6aGlbZ2hsaWdodF0gY2xlYXIJUmVzZXQgYWxsIGhpZ2hsaWdodGluZyB0byB0aGUgZGVmYXVsdHMuICBSZW1vdmVzIGFsbAorCQkJaGlnaGxpZ2h0aW5nIGZvciBncm91cHMgYWRkZWQgYnkgdGhlIHVzZXIhCisJCQlVc2VzIHRoZSBjdXJyZW50IHZhbHVlIG9mICdiYWNrZ3JvdW5kJyB0byBkZWNpZGUgd2hpY2gKKwkJCWRlZmF1bHQgY29sb3JzIHRvIHVzZS4KKworOmhpW2dobGlnaHRdIGNsZWFyIHtncm91cC1uYW1lfQorOmhpW2dobGlnaHRdIHtncm91cC1uYW1lfSBOT05FCisJCQlEaXNhYmxlIHRoZSBoaWdobGlnaHRpbmcgZm9yIG9uZSBoaWdobGlnaHQgZ3JvdXAuICBJdAorCQkJaXMgX25vdF8gc2V0IGJhY2sgdG8gdGhlIGRlZmF1bHQgY29sb3JzLgorCis6aGlbZ2hsaWdodF0gW2RlZmF1bHRdIHtncm91cC1uYW1lfSB7a2V5fT17YXJnfSAuLgorCQkJQWRkIGEgaGlnaGxpZ2h0IGdyb3VwLCBvciBjaGFuZ2UgdGhlIGhpZ2hsaWdodGluZyBmb3IKKwkJCWFuIGV4aXN0aW5nIGdyb3VwLgorCQkJU2VlIHxoaWdobGlnaHQtYXJnc3wgZm9yIHRoZSB7a2V5fT17YXJnfSBhcmd1bWVudHMuCisJCQlTZWUgfDpoaWdobGlnaHQtZGVmYXVsdHwgZm9yIHRoZSBvcHRpb25hbCBbZGVmYXVsdF0KKwkJCWFyZ3VtZW50LgorCitOb3JtYWxseSBhIGhpZ2hsaWdodCBncm91cCBpcyBhZGRlZCBvbmNlIHdoZW4gc3RhcnRpbmcgdXAuICBUaGlzIHNldHMgdGhlCitkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGhpZ2hsaWdodGluZy4gIEFmdGVyIHRoYXQsIHlvdSBjYW4gdXNlIGFkZGl0aW9uYWwKK2hpZ2hsaWdodCBjb21tYW5kcyB0byBjaGFuZ2UgdGhlIGFyZ3VtZW50cyB0aGF0IHlvdSB3YW50IHRvIHNldCB0byBub24tZGVmYXVsdAordmFsdWVzLiAgVGhlIHZhbHVlICJOT05FIiBjYW4gYmUgdXNlZCB0byBzd2l0Y2ggdGhlIHZhbHVlIG9mZiBvciBnbyBiYWNrIHRvCit0aGUgZGVmYXVsdCB2YWx1ZS4KKworQSBzaW1wbGUgd2F5IHRvIGNoYW5nZSBjb2xvcnMgaXMgd2l0aCB0aGUgfDpjb2xvcnNjaGVtZXwgY29tbWFuZC4gIFRoaXMgbG9hZHMKK2EgZmlsZSB3aXRoICI6aGlnaGxpZ2h0IiBjb21tYW5kcyBzdWNoIGFzIHRoaXM6ID4KKworICAgOmhpIENvbW1lbnQJZ3VpPWJvbGQKKworTm90ZSB0aGF0IGFsbCBzZXR0aW5ncyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgcmVtYWluIHRoZSBzYW1lLCBvbmx5IHRoZQorc3BlY2lmaWVkIGZpZWxkIGlzIHVzZWQsIGFuZCBzZXR0aW5ncyBhcmUgbWVyZ2VkIHdpdGggcHJldmlvdXMgb25lcy4gIFNvLCB0aGUKK3Jlc3VsdCBpcyBsaWtlIHRoaXMgc2luZ2xlIGNvbW1hbmQgaGFzIGJlZW4gdXNlZDogPgorICAgOmhpIENvbW1lbnQJdGVybT1ib2xkIGN0ZXJtZmc9Q3lhbiBndWlmZz0jODBhMGZmIGd1aT1ib2xkCis8CisJCQkJCSpoaWdobGlnaHQtYXJncyogKkU0MTYqICpFNDE3KiAqRTQyMyoKK1RoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiB0ZXJtaW5hbHMgZm9yIGhpZ2hsaWdodGluZzoKK3Rlcm0JYSBub3JtYWwgdGVybWluYWwgKHZ0MTAwLCB4dGVybSkKK2N0ZXJtCWEgY29sb3IgdGVybWluYWwgKE1TLURPUyBjb25zb2xlLCBjb2xvci14dGVybSwgdGhlc2UgaGF2ZSB0aGUgIkNvIgorCXRlcm1jYXAgZW50cnkpCitndWkJdGhlIEdVSQorCitGb3IgZWFjaCB0eXBlIHRoZSBoaWdobGlnaHRpbmcgY2FuIGJlIGdpdmVuLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UKK3RoZSBzYW1lIHN5bnRheCBmaWxlIG9uIGFsbCB0ZXJtaW5hbHMsIGFuZCB1c2UgdGhlIG9wdGltYWwgaGlnaGxpZ2h0aW5nLgorCisxLiBoaWdobGlnaHQgYXJndW1lbnRzIGZvciBub3JtYWwgdGVybWluYWxzCisKK3Rlcm09e2F0dHItbGlzdH0JCQkqYXR0ci1saXN0KiAqaGlnaGxpZ2h0LXRlcm0qICpFNDE4KgorCWF0dHItbGlzdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0ICh3aXRob3V0IHNwYWNlcykgb2YgdGhlCisJZm9sbG93aW5nIGl0ZW1zIChpbiBhbnkgb3JkZXIpOgorCQlib2xkCisJCXVuZGVybGluZQorCQlyZXZlcnNlCisJCWludmVyc2UJCXNhbWUgYXMgcmV2ZXJzZQorCQlpdGFsaWMKKwkJc3RhbmRvdXQKKwkJTk9ORQkJbm8gYXR0cmlidXRlcyB1c2VkICh1c2VkIHRvIHJlc2V0IGl0KQorCisJTm90ZSB0aGF0ICJib2xkIiBjYW4gYmUgdXNlZCBoZXJlIGFuZCBieSB1c2luZyBhIGJvbGQgZm9udC4gIFRoZXkKKwloYXZlIHRoZSBzYW1lIGVmZmVjdC4KKworc3RhcnQ9e3Rlcm0tbGlzdH0JCQkJKmhpZ2hsaWdodC1zdGFydCogKkU0MjIqCitzdG9wPXt0ZXJtLWxpc3R9CQkJCSp0ZXJtLWxpc3QqICpoaWdobGlnaHQtc3RvcCoKKwlUaGVzZSBsaXN0cyBvZiB0ZXJtaW5hbCBjb2RlcyBjYW4gYmUgdXNlZCB0byBnZXQKKwlub24tc3RhbmRhcmQgYXR0cmlidXRlcyBvbiBhIHRlcm1pbmFsLgorCisJVGhlIGVzY2FwZSBzZXF1ZW5jZSBzcGVjaWZpZWQgd2l0aCB0aGUgInN0YXJ0IiBhcmd1bWVudAorCWlzIHdyaXR0ZW4gYmVmb3JlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBoaWdobGlnaHRlZAorCWFyZWEuICBJdCBjYW4gYmUgYW55dGhpbmcgdGhhdCB5b3Ugd2FudCB0byBzZW5kIHRvIHRoZQorCXRlcm1pbmFsIHRvIGhpZ2hsaWdodCB0aGlzIGFyZWEuICBUaGUgZXNjYXBlIHNlcXVlbmNlCisJc3BlY2lmaWVkIHdpdGggdGhlICJzdG9wIiBhcmd1bWVudCBpcyB3cml0dGVuIGFmdGVyIHRoZQorCWhpZ2hsaWdodGVkIGFyZWEuICBUaGlzIHNob3VsZCB1bmRvIHRoZSAic3RhcnQiIGFyZ3VtZW50LgorCU90aGVyd2lzZSB0aGUgc2NyZWVuIHdpbGwgbG9vayBtZXNzZWQgdXAuCisKKwlUaGUge3Rlcm0tbGlzdH0gY2FuIGhhdmUgdHdvIGZvcm1zOgorCisJMS4gQSBzdHJpbmcgd2l0aCBlc2NhcGUgc2VxdWVuY2VzLgorCSAgIFRoaXMgaXMgYW55IHN0cmluZyBvZiBjaGFyYWN0ZXJzLCBleGNlcHQgdGhhdCBpdCBjYW4ndCBzdGFydCB3aXRoCisJICAgInRfIiBhbmQgYmxhbmtzIGFyZSBub3QgYWxsb3dlZC4gIFRoZSA8PiBub3RhdGlvbiBpcyByZWNvZ25pemVkCisJICAgaGVyZSwgc28geW91IGNhbiB1c2UgdGhpbmdzIGxpa2UgIjxFc2M+IiBhbmQgIjxTcGFjZT4iLiAgRXhhbXBsZToKKwkJc3RhcnQ9PEVzYz5bMjdoOzxFc2M+WzxTcGFjZT5yOworCisJMi4gQSBsaXN0IG9mIHRlcm1pbmFsIGNvZGVzLgorCSAgIEVhY2ggdGVybWluYWwgY29kZSBoYXMgdGhlIGZvcm0gInRfeHgiLCB3aGVyZSAieHgiIGlzIHRoZSBuYW1lIG9mCisJICAgdGhlIHRlcm1jYXAgZW50cnkuICBUaGUgY29kZXMgaGF2ZSB0byBiZSBzZXBhcmF0ZWQgd2l0aCBjb21tYXMuCisJICAgV2hpdGUgc3BhY2UgaXMgbm90IGFsbG93ZWQuCUV4YW1wbGU6CisJCXN0YXJ0PXRfQzEsdF9CTAorCSAgIFRoZSB0ZXJtaW5hbCBjb2RlcyBtdXN0IGV4aXN0IGZvciB0aGlzIHRvIHdvcmsuCisKKworMi4gaGlnaGxpZ2h0IGFyZ3VtZW50cyBmb3IgY29sb3IgdGVybWluYWxzCisKK2N0ZXJtPXthdHRyLWxpc3R9CQkJCQkqaGlnaGxpZ2h0LWN0ZXJtKgorCVNlZSBhYm92ZSBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHthdHRyLWxpc3R9IHxhdHRyLWxpc3R8LgorCVRoZSAiY3Rlcm0iIGFyZ3VtZW50IGlzIGxpa2VseSB0byBiZSBkaWZmZXJlbnQgZnJvbSAidGVybSIsIHdoZW4KKwljb2xvcnMgYXJlIHVzZWQuICBGb3IgZXhhbXBsZSwgaW4gYSBub3JtYWwgdGVybWluYWwgY29tbWVudHMgY291bGQKKwliZSB1bmRlcmxpbmVkLCBpbiBhIGNvbG9yIHRlcm1pbmFsIHRoZXkgY2FuIGJlIG1hZGUgQmx1ZS4KKwlOb3RlOiBNYW55IHRlcm1pbmFscyAoZS5nLiwgRE9TIGNvbnNvbGUpIGNhbid0IG1peCB0aGVzZSBhdHRyaWJ1dGVzCisJd2l0aCBjb2xvcmluZy4JVXNlIG9ubHkgb25lIG9mICJjdGVybT0iIE9SICJjdGVybWZnPSIgT1IgImN0ZXJtYmc9Ii4KKworY3Rlcm1mZz17Y29sb3ItbnJ9CQkJCSpoaWdobGlnaHQtY3Rlcm1mZyogKkU0MjEqCitjdGVybWJnPXtjb2xvci1ucn0JCQkJKmhpZ2hsaWdodC1jdGVybWJnKgorCVRoZSB7Y29sb3ItbnJ9IGFyZ3VtZW50IGlzIGEgY29sb3IgbnVtYmVyLiAgSXRzIHJhbmdlIGlzIHplcm8gdG8KKwkobm90IGluY2x1ZGluZykgdGhlIG51bWJlciBnaXZlbiBieSB0aGUgdGVybWNhcCBlbnRyeSAiQ28iLgorCVRoZSBhY3R1YWwgY29sb3Igd2l0aCB0aGlzIG51bWJlciBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIHRlcm1pbmFsCisJYW5kIGl0cyBzZXR0aW5ncy4gIFNvbWV0aW1lcyB0aGUgY29sb3IgYWxzbyBkZXBlbmRzIG9uIHRoZSBzZXR0aW5ncyBvZgorCSJjdGVybSIuICBGb3IgZXhhbXBsZSwgb24gc29tZSBzeXN0ZW1zICJjdGVybT1ib2xkIGN0ZXJtZmc9MyIgZ2l2ZXMKKwlhbm90aGVyIGNvbG9yLCBvbiBvdGhlcnMgeW91IGp1c3QgZ2V0IGNvbG9yIDMuCisKKwlGb3IgYW4geHRlcm0gdGhpcyBkZXBlbmRzIG9uIHlvdXIgcmVzb3VyY2VzLCBhbmQgaXMgYSBiaXQKKwl1bnByZWRpY3RhYmxlLglTZWUgeW91ciB4dGVybSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZGVmYXVsdHMuCVRoZQorCWNvbG9ycyBmb3IgYSBjb2xvci14dGVybSBjYW4gYmUgY2hhbmdlZCBmcm9tIHRoZSAuWGRlZmF1bHRzIGZpbGUuCisJVW5mb3J0dW5hdGVseSB0aGlzIG1lYW5zIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gZ2V0IHRoZSBzYW1lIGNvbG9ycworCWZvciBlYWNoIHVzZXIuCVNlZSB8eHRlcm0tY29sb3J8IGZvciBpbmZvIGFib3V0IGNvbG9yIHh0ZXJtcy4KKworCVRoZSBNU0RPUyBzdGFuZGFyZCBjb2xvcnMgYXJlIGZpeGVkIChpbiBhIGNvbnNvbGUgd2luZG93KSwgc28gdGhlc2UKKwloYXZlIGJlZW4gdXNlZCBmb3IgdGhlIG5hbWVzLiAgQnV0IHRoZSBtZWFuaW5nIG9mIGNvbG9yIG5hbWVzIGluIFgxMQorCWFyZSBmaXhlZCwgc28gdGhlc2UgY29sb3Igc2V0dGluZ3MgaGF2ZSBiZWVuIHVzZWQsIHRvIG1ha2UgdGhlCisJaGlnaGxpZ2h0aW5nIHNldHRpbmdzIHBvcnRhYmxlIChjb21wbGljYXRlZCwgaXNuJ3QgaXQ/KS4gIFRoZQorCWZvbGxvd2luZyBuYW1lcyBhcmUgcmVjb2duaXplZCwgd2l0aCB0aGUgY29sb3IgbnVtYmVyIHVzZWQ6CisKKwkJCQkJCQkqY3Rlcm0tY29sb3JzKgorCSAgICBOUi0xNiAgIE5SLTggICAgQ09MT1IgTkFNRSB+CisJICAgIDAJICAgIDAJICAgIEJsYWNrCisJICAgIDEJICAgIDQJICAgIERhcmtCbHVlCisJICAgIDIJICAgIDIJICAgIERhcmtHcmVlbgorCSAgICAzCSAgICA2CSAgICBEYXJrQ3lhbgorCSAgICA0CSAgICAxCSAgICBEYXJrUmVkCisJICAgIDUJICAgIDUJICAgIERhcmtNYWdlbnRhCisJICAgIDYJICAgIDMJICAgIEJyb3duLCBEYXJrWWVsbG93CisJICAgIDcJICAgIDcJICAgIExpZ2h0R3JheSwgTGlnaHRHcmV5LCBHcmF5LCBHcmV5CisJICAgIDgJICAgIDAqCSAgICBEYXJrR3JheSwgRGFya0dyZXkKKwkgICAgOQkgICAgNCoJICAgIEJsdWUsIExpZ2h0Qmx1ZQorCSAgICAxMAkgICAgMioJICAgIEdyZWVuLCBMaWdodEdyZWVuCisJICAgIDExCSAgICA2KgkgICAgQ3lhbiwgTGlnaHRDeWFuCisJICAgIDEyCSAgICAxKgkgICAgUmVkLCBMaWdodFJlZAorCSAgICAxMwkgICAgNSoJICAgIE1hZ2VudGEsIExpZ2h0TWFnZW50YQorCSAgICAxNAkgICAgMyoJICAgIFllbGxvdywgTGlnaHRZZWxsb3cKKwkgICAgMTUJICAgIDcqCSAgICBXaGl0ZQorCisJVGhlIG51bWJlciB1bmRlciAiTlItMTYiIGlzIHVzZWQgZm9yIDE2LWNvbG9yIHRlcm1pbmFscyAoJ3RfQ28nCisJZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDE2KS4gIFRoZSBudW1iZXIgdW5kZXIgIk5SLTgiIGlzIHVzZWQgZm9yCisJOC1jb2xvciB0ZXJtaW5hbHMgKCd0X0NvJyBsZXNzIHRoYW4gMTYpLiAgVGhlICcqJyBpbmRpY2F0ZXMgdGhhdCB0aGUKKwlib2xkIGF0dHJpYnV0ZSBpcyBzZXQgZm9yIGN0ZXJtZmcuICBJbiBtYW55IDgtY29sb3IgdGVybWluYWxzIChlLmcuLAorCSJsaW51eCIpLCB0aGlzIGNhdXNlcyB0aGUgYnJpZ2h0IGNvbG9ycyB0byBhcHBlYXIuICBUaGlzIGRvZXNuJ3Qgd29yaworCWZvciBiYWNrZ3JvdW5kIGNvbG9ycyEJV2l0aG91dCB0aGUgJyonIHRoZSBib2xkIGF0dHJpYnV0ZSBpcyByZW1vdmVkLgorCUlmIHlvdSB3YW50IHRvIHNldCB0aGUgYm9sZCBhdHRyaWJ1dGUgaW4gYSBkaWZmZXJlbnQgd2F5LCBwdXQgYQorCSJjdGVybT0iIGFyZ3VtZW50IEFGVEVSIHRoZSAiY3Rlcm1mZz0iIG9yICJjdGVybWJnPSIgYXJndW1lbnQuCU9yIHVzZQorCWEgbnVtYmVyIGluc3RlYWQgb2YgYSBjb2xvciBuYW1lLgorCisJVGhlIGNhc2Ugb2YgdGhlIGNvbG9yIG5hbWVzIGlzIGlnbm9yZWQuCisJTm90ZSB0aGF0IGZvciAxNiBjb2xvciBhbnNpIHN0eWxlIHRlcm1pbmFscyAoaW5jbHVkaW5nIHh0ZXJtcyksIHRoZQorCW51bWJlcnMgaW4gdGhlIE5SLTggY29sdW1uIGlzIHVzZWQuIEhlcmUgJyonIG1lYW5zICdhZGQgOCcgc28gdGhhdCBCbHVlCisJaXMgMTIsIERhcmtHcmF5IGlzIDggZXRjLgorCisJTm90ZSB0aGF0IGZvciBzb21lIGNvbG9yIHRlcm1pbmFscyB0aGVzZSBuYW1lcyBtYXkgcmVzdWx0IGluIHRoZSB3cm9uZworCWNvbG9ycyEKKworCQkJCQkJCSo6aGktbm9ybWFsLWN0ZXJtKgorCVdoZW4gc2V0dGluZyB0aGUgImN0ZXJtZmciIG9yICJjdGVybWJnIiBjb2xvcnMgZm9yIHRoZSBOb3JtYWwgZ3JvdXAsCisJdGhlc2Ugd2lsbCBiZWNvbWUgdGhlIGNvbG9ycyB1c2VkIGZvciB0aGUgbm9uLWhpZ2hsaWdodGVkIHRleHQuCisJRXhhbXBsZTogPgorCQk6aGlnaGxpZ2h0IE5vcm1hbCBjdGVybWZnPWdyZXkgY3Rlcm1iZz1kYXJrYmx1ZQorPAlXaGVuIHNldHRpbmcgdGhlICJjdGVybWJnIiBjb2xvciBmb3IgdGhlIE5vcm1hbCBncm91cCwgdGhlCisJJ2JhY2tncm91bmQnIG9wdGlvbiB3aWxsIGJlIGFkanVzdGVkIGF1dG9tYXRpY2FsbHkuICBUaGlzIGNhdXNlcyB0aGUKKwloaWdobGlnaHQgZ3JvdXBzIHRoYXQgZGVwZW5kIG9uICdiYWNrZ3JvdW5kJyB0byBjaGFuZ2UhICBUaGlzIG1lYW5zCisJeW91IHNob3VsZCBzZXQgdGhlIGNvbG9ycyBmb3IgTm9ybWFsIGZpcnN0LCBiZWZvcmUgc2V0dGluZyBvdGhlcgorCWNvbG9ycy4KKwlXaGVuIGEgY29sb3JzY2hlbWUgaXMgYmVpbmcgdXNlZCwgY2hhbmdpbmcgJ2JhY2tncm91bmQnIGNhdXNlcyBpdCB0bworCWJlIHJlbG9hZGVkLCB3aGljaCBtYXkgcmVzZXQgYWxsIGNvbG9ycyAoaW5jbHVkaW5nIE5vcm1hbCkuICBGaXJzdAorCWRlbGV0ZSB0aGUgImNvbG9yc19uYW1lIiB2YXJpYWJsZSB3aGVuIHlvdSBkb24ndCB3YW50IHRoaXMuCisKKwlXaGVuIHlvdSBoYXZlIHNldCAiY3Rlcm1mZyIgb3IgImN0ZXJtYmciIGZvciB0aGUgTm9ybWFsIGdyb3VwLCBWaW0KKwluZWVkcyB0byByZXNldCB0aGUgY29sb3Igd2hlbiBleGl0aW5nLglUaGlzIGlzIGRvbmUgd2l0aCB0aGUgIm9wIgorCXRlcm1jYXAgZW50cnkgfHRfb3B8LiAgSWYgdGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5LCB0cnkgc2V0dGluZyB0aGUKKwkndF9vcCcgb3B0aW9uIGluIHlvdXIgLnZpbXJjLgorCQkJCQkJCSpFNDE5KiAqRTQyMCoKKwlXaGVuIFZpbSBrbm93cyB0aGUgbm9ybWFsIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzLCAiZmciIGFuZAorCSJiZyIgY2FuIGJlIHVzZWQgYXMgY29sb3IgbmFtZXMuICBUaGlzIG9ubHkgd29ya3MgYWZ0ZXIgc2V0dGluZyB0aGUKKwljb2xvcnMgZm9yIHRoZSBOb3JtYWwgZ3JvdXAgYW5kIGZvciB0aGUgTVMtRE9TIGNvbnNvbGUuICBFeGFtcGxlLCBmb3IKKwlyZXZlcnNlIHZpZGVvOiA+CisJICAgIDpoaWdobGlnaHQgVmlzdWFsIGN0ZXJtZmc9YmcgY3Rlcm1iZz1mZworPAlOb3RlIHRoYXQgdGhlIGNvbG9ycyBhcmUgdXNlZCB0aGF0IGFyZSB2YWxpZCBhdCB0aGUgbW9tZW50IHRoaXMKKwljb21tYW5kIGFyZSBnaXZlbi4gIElmIHRoZSBOb3JtYWwgZ3JvdXAgY29sb3JzIGFyZSBjaGFuZ2VkIGxhdGVyLCB0aGUKKwkiZmciIGFuZCAiYmciIGNvbG9ycyB3aWxsIG5vdCBiZSBhZGp1c3RlZC4KKworCiszLiBoaWdobGlnaHQgYXJndW1lbnRzIGZvciB0aGUgR1VJCisKK2d1aT17YXR0ci1saXN0fQkJCQkJCSpoaWdobGlnaHQtZ3VpKgorCVRoZXNlIGdpdmUgdGhlIGF0dHJpYnV0ZXMgdG8gdXNlIGluIHRoZSBHVUkgbW9kZS4KKwlTZWUgfGF0dHItbGlzdHwgZm9yIGEgZGVzY3JpcHRpb24uCisJTm90ZSB0aGF0ICJib2xkIiBjYW4gYmUgdXNlZCBoZXJlIGFuZCBieSB1c2luZyBhIGJvbGQgZm9udC4gIFRoZXkKKwloYXZlIHRoZSBzYW1lIGVmZmVjdC4KKwlOb3RlIHRoYXQgdGhlIGF0dHJpYnV0ZXMgYXJlIGlnbm9yZWQgZm9yIHRoZSAiTm9ybWFsIiBncm91cC4KKworZm9udD17Zm9udC1uYW1lfQkJCQkJKmhpZ2hsaWdodC1mb250KgorCWZvbnQtbmFtZSBpcyB0aGUgbmFtZSBvZiBhIGZvbnQsIGFzIGl0IGlzIHVzZWQgb24gdGhlIHN5c3RlbSBWaW0KKwlydW5zIG9uLiAgRm9yIFgxMSB0aGlzIGlzIGEgY29tcGxpY2F0ZWQgbmFtZSwgZm9yIGV4YW1wbGU6ID4KKyAgIGZvbnQ9LW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xCis8CisJVGhlIGZvbnQtbmFtZSAiTk9ORSIgY2FuIGJlIHVzZWQgdG8gcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IGZvbnQuCisJV2hlbiBzZXR0aW5nIHRoZSBmb250IGZvciB0aGUgIk5vcm1hbCIgZ3JvdXAsIHRoaXMgYmVjb21lcyB0aGUgZGVmYXVsdAorCWZvbnQgKHVudGlsIHRoZSAnZ3VpZm9udCcgb3B0aW9uIGlzIGNoYW5nZWQ7IHRoZSBsYXN0IG9uZSBzZXQgaXMKKwl1c2VkKS4KKwlUaGUgZm9sbG93aW5nIG9ubHkgd29ya3Mgd2l0aCBNb3RpZiBhbmQgQXRoZW5hLCBub3Qgd2l0aCBvdGhlciBHVUlzOgorCVdoZW4gc2V0dGluZyB0aGUgZm9udCBmb3IgdGhlICJNZW51IiBncm91cCwgdGhlIG1lbnVzIHdpbGwgYmUgY2hhbmdlZC4KKwlXaGVuIHNldHRpbmcgdGhlIGZvbnQgZm9yIHRoZSAiVG9vbHRpcCIgZ3JvdXAsIHRoZSB0b29sdGlwcyB3aWxsIGJlCisJY2hhbmdlZC4KKwlBbGwgZm9udHMgdXNlZCwgZXhjZXB0IGZvciBNZW51IGFuZCBUb29sdGlwLCBzaG91bGQgYmUgb2YgdGhlIHNhbWUKKwljaGFyYWN0ZXIgc2l6ZSBhcyB0aGUgZGVmYXVsdCBmb250ISAgT3RoZXJ3aXNlIHJlZHJhd2luZyBwcm9ibGVtcyB3aWxsCisJb2NjdXIuCisKK2d1aWZnPXtjb2xvci1uYW1lfQkJCQkJKmhpZ2hsaWdodC1ndWlmZyoKK2d1aWJnPXtjb2xvci1uYW1lfQkJCQkJKmhpZ2hsaWdodC1ndWliZyoKKwlUaGVzZSBnaXZlIHRoZSBmb3JlZ3JvdW5kIChndWlmZykgYW5kIGJhY2tncm91bmQgKGd1aWJnKSBjb2xvciB0bworCXVzZSBpbiB0aGUgR1VJLiAgVGhlcmUgYXJlIGEgZmV3IHNwZWNpYWwgbmFtZXM6CisJCU5PTkUJCW5vIGNvbG9yICh0cmFuc3BhcmVudCkKKwkJYmcJCXVzZSBub3JtYWwgYmFja2dyb3VuZCBjb2xvcgorCQliYWNrZ3JvdW5kCXVzZSBub3JtYWwgYmFja2dyb3VuZCBjb2xvcgorCQlmZwkJdXNlIG5vcm1hbCBmb3JlZ3JvdW5kIGNvbG9yCisJCWZvcmVncm91bmQJdXNlIG5vcm1hbCBmb3JlZ3JvdW5kIGNvbG9yCisJVG8gdXNlIGEgY29sb3IgbmFtZSB3aXRoIGFuIGVtYmVkZGVkIHNwYWNlIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVyLAorCXB1dCBpdCBpbiBzaW5nbGUgcXVvdGVzLiAgVGhlIHNpbmdsZSBxdW90ZSBjYW5ub3QgYmUgdXNlZCB0aGVuLgorCUV4YW1wbGU6ID4KKwkgICAgOmhpIGNvbW1lbnQgZ3VpZmc9J3NhbG1vbiBwaW5rJworPAorCQkJCQkJCSpndWktY29sb3JzKgorCVN1Z2dlc3RlZCBjb2xvciBuYW1lcyAodGhlc2UgYXJlIGF2YWlsYWJsZSBvbiBtb3N0IHN5c3RlbXMpOgorCSAgICBSZWQJCUxpZ2h0UmVkCURhcmtSZWQKKwkgICAgR3JlZW4JTGlnaHRHcmVlbglEYXJrR3JlZW4JU2VhR3JlZW4KKwkgICAgQmx1ZQlMaWdodEJsdWUJRGFya0JsdWUJU2xhdGVCbHVlCisJICAgIEN5YW4JTGlnaHRDeWFuCURhcmtDeWFuCisJICAgIE1hZ2VudGEJTGlnaHRNYWdlbnRhCURhcmtNYWdlbnRhCisJICAgIFllbGxvdwlMaWdodFllbGxvdwlCcm93bgkJRGFya1llbGxvdworCSAgICBHcmF5CUxpZ2h0R3JheQlEYXJrR3JheQorCSAgICBCbGFjawlXaGl0ZQorCSAgICBPcmFuZ2UJUHVycGxlCQlWaW9sZXQKKworCUluIHRoZSBXaW4zMiBHVUkgdmVyc2lvbiwgYWRkaXRpb25hbCBzeXN0ZW0gY29sb3JzIGFyZSBhdmFpbGFibGUuICBTZWUKKwl8d2luMzItY29sb3JzfC4KKworCVlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgY29sb3IgYnkgaXRzIFJlZCwgR3JlZW4gYW5kIEJsdWUgdmFsdWVzLgorCVRoZSBmb3JtYXQgaXMgIiNycmdnYmIiLCB3aGVyZQorCQkicnIiCWlzIHRoZSBSZWQgdmFsdWUKKwkJImJiIglpcyB0aGUgQmx1ZSB2YWx1ZQorCQkiZ2ciCWlzIHRoZSBHcmVlbiB2YWx1ZQorCUFsbCB2YWx1ZXMgYXJlIGhleGFkZWNpbWFsLCByYW5nZSBmcm9tICIwMCIgdG8gImZmIi4gIEV4YW1wbGVzOiA+CisgIDpoaWdobGlnaHQgQ29tbWVudCBndWlmZz0jMTFmMGMzIGd1aWJnPSNmZjAwZmYKKzwKKwkJCQkJKmhpZ2hsaWdodC1ncm91cHMqICpoaWdobGlnaHQtZGVmYXVsdCoKK1RoZXNlIGFyZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcgZ3JvdXBzLiAgVGhlc2UgZ3JvdXBzIGFyZSB1c2VkIGJ5IHRoZQorJ2hpZ2hsaWdodCcgb3B0aW9uIGRlZmF1bHQuICBOb3RlIHRoYXQgdGhlIGhpZ2hsaWdodGluZyBkZXBlbmRzIG9uIHRoZSB2YWx1ZQorb2YgJ2JhY2tncm91bmQnLiAgWW91IGNhbiBzZWUgdGhlIGN1cnJlbnQgc2V0dGluZ3Mgd2l0aCB0aGUgIjpoaWdobGlnaHQiCitjb21tYW5kLgorCQkJCQkJCSpobC1DdXJzb3IqCitDdXJzb3IJCXRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvcgorCQkJCQkJCSpobC1DdXJzb3JJTSoKK0N1cnNvcklNCWxpa2UgQ3Vyc29yLCBidXQgdXNlZCB3aGVuIGluIElNRSBtb2RlIHxDdXJzb3JJTXwKKwkJCQkJCQkqaGwtRGlyZWN0b3J5KgorRGlyZWN0b3J5CWRpcmVjdG9yeSBuYW1lcyAoYW5kIG90aGVyIHNwZWNpYWwgbmFtZXMgaW4gbGlzdGluZ3MpCisJCQkJCQkJKmhsLURpZmZBZGQqCitEaWZmQWRkCQlkaWZmIG1vZGU6IEFkZGVkIGxpbmUgfGRpZmYudHh0fAorCQkJCQkJCSpobC1EaWZmQ2hhbmdlKgorRGlmZkNoYW5nZQlkaWZmIG1vZGU6IENoYW5nZWQgbGluZSB8ZGlmZi50eHR8CisJCQkJCQkJKmhsLURpZmZEZWxldGUqCitEaWZmRGVsZXRlCWRpZmYgbW9kZTogRGVsZXRlZCBsaW5lIHxkaWZmLnR4dHwKKwkJCQkJCQkqaGwtRGlmZlRleHQqCitEaWZmVGV4dAlkaWZmIG1vZGU6IENoYW5nZWQgdGV4dCB3aXRoaW4gYSBjaGFuZ2VkIGxpbmUgfGRpZmYudHh0fAorCQkJCQkJCSpobC1FcnJvck1zZyoKK0Vycm9yTXNnCWVycm9yIG1lc3NhZ2VzIG9uIHRoZSBjb21tYW5kIGxpbmUKKwkJCQkJCQkqaGwtVmVydFNwbGl0KgorVmVydFNwbGl0CXRoZSBjb2x1bW4gc2VwYXJhdGluZyB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MKKwkJCQkJCQkqaGwtRm9sZGVkKgorRm9sZGVkCQlsaW5lIHVzZWQgZm9yIGNsb3NlZCBmb2xkcworCQkJCQkJCSpobC1Gb2xkQ29sdW1uKgorRm9sZENvbHVtbgknZm9sZGNvbHVtbicKKwkJCQkJCQkqaGwtU2lnbkNvbHVtbioKK1NpZ25Db2x1bW4JY29sdW1uIHdoZXJlIHxzaWduc3wgYXJlIGRpc3BsYXllZAorCQkJCQkJCSpobC1JbmNTZWFyY2gqCitJbmNTZWFyY2gJJ2luY3NlYXJjaCcgaGlnaGxpZ2h0aW5nOyBhbHNvIHVzZWQgZm9yIHRoZSB0ZXh0IHJlcGxhY2VkIHdpdGgKKwkJIjpzLy8vYyIKKwkJCQkJCQkqaGwtTGluZU5yKgorTGluZU5yCQlsaW5lIG51bWJlciBmb3IgIjpudW1iZXIiIGFuZCAiOiMiIGNvbW1hbmRzLCBhbmQgd2hlbiAnbnVtYmVyJworCQlvcHRpb24gaXMgc2V0LgorCQkJCQkJCSpobC1Nb2RlTXNnKgorTW9kZU1zZwkJJ3Nob3dtb2RlJyBtZXNzYWdlIChlLmcuLCAiLS0gSU5TRVJUIC0tIikKKwkJCQkJCQkqaGwtTW9yZU1zZyoKK01vcmVNc2cJCXxtb3JlLXByb21wdHwKKwkJCQkJCQkqaGwtTm9uVGV4dCoKK05vblRleHQJCSd+JyBhbmQgJ0AnIGF0IHRoZSBlbmQgb2YgdGhlIHdpbmRvdywgY2hhcmFjdGVycyBmcm9tCisJCSdzaG93YnJlYWsnIGFuZCBvdGhlciBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90IHJlYWxseSBleGlzdCBpbgorCQl0aGUgdGV4dCAoZS5nLiwgIj4iIGRpc3BsYXllZCB3aGVuIGEgZG91YmxlLXdpZGUgY2hhcmFjdGVyCisJCWRvZXNuJ3QgZml0IGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUpLgorCQkJCQkJCSpobC1Ob3JtYWwqCitOb3JtYWwJCW5vcm1hbCB0ZXh0CisJCQkJCQkJKmhsLVF1ZXN0aW9uKgorUXVlc3Rpb24JfGhpdC1lbnRlcnwgcHJvbXB0IGFuZCB5ZXMvbm8gcXVlc3Rpb25zCisJCQkJCQkJKmhsLVNlYXJjaCoKK1NlYXJjaAkJTGFzdCBzZWFyY2ggcGF0dGVybiBoaWdobGlnaHRpbmcgKHNlZSAnaGxzZWFyY2gnKS4KKwkJQWxzbyB1c2VkIGZvciBoaWdobGlnaHRpbmcgdGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgcXVpY2tmaXgKKwkJd2luZG93IGFuZCBzaW1pbGFyIGl0ZW1zIHRoYXQgbmVlZCB0byBzdGFuZCBvdXQuCisJCQkJCQkJKmhsLVNwZWNpYWxLZXkqCitTcGVjaWFsS2V5CU1ldGEgYW5kIHNwZWNpYWwga2V5cyBsaXN0ZWQgd2l0aCAiOm1hcCIsIGFsc28gZm9yIHRleHQgdXNlZAorCQl0byBzaG93IHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gdGhlIHRleHQsICdsaXN0Y2hhcnMnLgorCQlHZW5lcmFsbHk6IHRleHQgdGhhdCBpcyBkaXNwbGF5ZWQgZGlmZmVyZW50bHkgZnJvbSB3aGF0IGl0CisJCXJlYWxseSBpcy4KKwkJCQkJCQkqaGwtU3RhdHVzTGluZSoKK1N0YXR1c0xpbmUJc3RhdHVzIGxpbmUgb2YgY3VycmVudCB3aW5kb3cKKwkJCQkJCQkqaGwtU3RhdHVzTGluZU5DKgorU3RhdHVzTGluZU5DCXN0YXR1cyBsaW5lcyBvZiBub3QtY3VycmVudCB3aW5kb3dzCisJCU5vdGU6IGlmIHRoaXMgaXMgZXF1YWwgdG8gIlN0YXR1c0xpbmUiIFZpbSB3aWxsIHVzZSAiXl5eIiBpbgorCQl0aGUgc3RhdHVzIGxpbmUgb2YgdGhlIGN1cnJlbnQgd2luZG93LgorCQkJCQkJCSpobC1UaXRsZSoKK1RpdGxlCQl0aXRsZXMgZm9yIG91dHB1dCBmcm9tICI6c2V0IGFsbCIsICI6YXV0b2NtZCIgZXRjLgorCQkJCQkJCSpobC1WaXN1YWwqCitWaXN1YWwJCVZpc3VhbCBtb2RlIHNlbGVjdGlvbgorCQkJCQkJCSpobC1WaXN1YWxOT1MqCitWaXN1YWxOT1MJVmlzdWFsIG1vZGUgc2VsZWN0aW9uIHdoZW4gdmltIGlzICJOb3QgT3duaW5nIHRoZSBTZWxlY3Rpb24iLgorCQlPbmx5IFgxMSBHdWkncyB8Z3VpLXgxMXwgYW5kIHx4dGVybS1jbGlwYm9hcmR8IHN1cHBvcnRzIHRoaXMuCisJCQkJCQkJKmhsLVdhcm5pbmdNc2cqCitXYXJuaW5nTXNnCXdhcm5pbmcgbWVzc2FnZXMKKwkJCQkJCQkqaGwtV2lsZE1lbnUqCitXaWxkTWVudQljdXJyZW50IG1hdGNoIGluICd3aWxkbWVudScgY29tcGxldGlvbgorCisJCQkJCQkqaGwtVXNlcjEqICpobC1Vc2VyMS4uOSoKK1RoZSAnc3RhdHVzbGluZScgc3ludGF4IGFsbG93cyB0aGUgdXNlIG9mIDkgZGlmZmVyZW50IGhpZ2hsaWdodHMgaW4gdGhlCitzdGF0dXNsaW5lIGFuZCBydWxlciAodmlhICdydWxlcmZvcm1hdCcpLiBUaGUgbmFtZXMgYXJlIFVzZXIxIHRvIFVzZXI5LgorCitGb3IgdGhlIEdVSSB5b3UgY2FuIHVzZSB0aGVzZSBncm91cHMgdG8gc2V0IHRoZSBjb2xvcnMgZm9yIHRoZSBtZW51LAorc2Nyb2xsYmFycyBhbmQgdG9vbHRpcHMuICBUaGV5IGRvbid0IGhhdmUgZGVmYXVsdHMuICBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgdGhlCitXaW4zMiBHVUkuICBPbmx5IHRocmVlIGhpZ2hsaWdodCBhcmd1bWVudHMgaGF2ZSBhbnkgZWZmZWN0IGhlcmU6IGZvbnQsIGd1aWJnLAorYW5kIGd1aWZnLgorCisJCQkJCQkJKmhsLU1lbnUqCitNZW51CQlDdXJyZW50IGZvbnQsIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQgY29sb3JzIG9mIHRoZSBtZW51cy4KKwkJQWxzbyB1c2VkIGZvciB0aGUgdG9vbGJhci4KKwkJQXBwbGljYWJsZSBoaWdobGlnaHQgYXJndW1lbnRzOiBmb250LCBndWliZywgZ3VpZmcuCisKKwkJTk9URTogRm9yIE1vdGlmIGFuZCBBdGhlbmEgdGhlIGZvbnQgYXJndW1lbnQgYWN0dWFsbHkKKwkJc3BlY2lmaWVzIGEgZm9udHNldCBhdCBhbGwgdGltZXMsIG5vIG1hdHRlciBpZiAnZ3VpZm9udHNldCcgaXMKKwkJZW1wdHksIGFuZCBhcyBzdWNoIGl0IGlzIHRpZWQgdG8gdGhlIGN1cnJlbnQgfDpsYW5ndWFnZXwgd2hlbgorCQlzZXQuCisKKwkJCQkJCQkqaGwtU2Nyb2xsYmFyKgorU2Nyb2xsYmFyCUN1cnJlbnQgYmFja2dyb3VuZCBhbmQgZm9yZWdyb3VuZCBvZiB0aGUgbWFpbiB3aW5kb3cncworCQlzY3JvbGxiYXJzLgorCQlBcHBsaWNhYmxlIGhpZ2hsaWdodCBhcmd1bWVudHM6IGd1aWJnLCBndWlmZy4KKworCQkJCQkJCSpobC1Ub29sdGlwKgorVG9vbHRpcAkJQ3VycmVudCBmb250LCBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIG9mIHRoZSB0b29sdGlwcy4KKwkJQXBwbGljYWJsZSBoaWdobGlnaHQgYXJndW1lbnRzOiBmb250LCBndWliZywgZ3VpZmcuCisKKwkJTk9URTogRm9yIE1vdGlmIGFuZCBBdGhlbmEgdGhlIGZvbnQgYXJndW1lbnQgYWN0dWFsbHkKKwkJc3BlY2lmaWVzIGEgZm9udHNldCBhdCBhbGwgdGltZXMsIG5vIG1hdHRlciBpZiAnZ3VpZm9udHNldCcgaXMKKwkJZW1wdHksIGFuZCBhcyBzdWNoIGl0IGlzIHRpZWQgdG8gdGhlIGN1cnJlbnQgfDpsYW5ndWFnZXwgd2hlbgorCQlzZXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTMuIExpbmtpbmcgZ3JvdXBzCQkqOmhpLWxpbmsqICo6aGlnaGxpZ2h0LWxpbmsqICpFNDEyKiAqRTQxMyoKKworV2hlbiB5b3Ugd2FudCB0byB1c2UgdGhlIHNhbWUgaGlnaGxpZ2h0aW5nIGZvciBzZXZlcmFsIHN5bnRheCBncm91cHMsIHlvdQorY2FuIGRvIHRoaXMgbW9yZSBlYXNpbHkgYnkgbGlua2luZyB0aGUgZ3JvdXBzIGludG8gb25lIGNvbW1vbiBoaWdobGlnaHQKK2dyb3VwLCBhbmQgZ2l2ZSB0aGUgY29sb3IgYXR0cmlidXRlcyBvbmx5IGZvciB0aGF0IGdyb3VwLgorCitUbyBzZXQgYSBsaW5rOgorCisgICAgOmhpW2dobGlnaHRdWyFdIFtkZWZhdWx0XSBsaW5rIHtmcm9tLWdyb3VwfSB7dG8tZ3JvdXB9CisKK1RvIHJlbW92ZSBhIGxpbms6CisKKyAgICA6aGlbZ2hsaWdodF1bIV0gW2RlZmF1bHRdIGxpbmsge2Zyb20tZ3JvdXB9IE5PTkUKKworTm90ZXM6CQkJCQkJCSpFNDE0KgorLSBJZiB0aGUge2Zyb20tZ3JvdXB9IGFuZC9vciB7dG8tZ3JvdXB9IGRvZXNuJ3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQuICBZb3UKKyAgZG9uJ3QgZ2V0IGFuIGVycm9yIG1lc3NhZ2UgZm9yIGEgbm9uLWV4aXN0aW5nIGdyb3VwLgorLSBBcyBzb29uIGFzIHlvdSB1c2UgYSAiOmhpZ2hsaWdodCIgY29tbWFuZCBmb3IgYSBsaW5rZWQgZ3JvdXAsIHRoZSBsaW5rIGlzCisgIHJlbW92ZWQuCistIElmIHRoZXJlIGFyZSBhbHJlYWR5IGhpZ2hsaWdodCBzZXR0aW5ncyBmb3IgdGhlIHtmcm9tLWdyb3VwfSwgdGhlIGxpbmsgaXMKKyAgbm90IG1hZGUsIHVubGVzcyB0aGUgJyEnIGlzIGdpdmVuLiAgRm9yIGEgIjpoaWdobGlnaHQgbGluayIgY29tbWFuZCBpbiBhCisgIHNvdXJjZWQgZmlsZSwgeW91IGRvbid0IGdldCBhbiBlcnJvciBtZXNzYWdlLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBza2lwCisgIGxpbmtzIGZvciBncm91cHMgdGhhdCBhbHJlYWR5IGhhdmUgc2V0dGluZ3MuCisKKwkJCQkJKjpoaS1kZWZhdWx0KiAqOmhpZ2hsaWdodC1kZWZhdWx0KgorVGhlIFtkZWZhdWx0XSBhcmd1bWVudCBpcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZyBmb3IgYQorZ3JvdXAuCUlmIGhpZ2hsaWdodGluZyBoYXMgYWxyZWFkeSBiZWVuIHNwZWNpZmllZCBmb3IgdGhlIGdyb3VwIHRoZSBjb21tYW5kCit3aWxsIGJlIGlnbm9yZWQuICBBbHNvIHdoZW4gdGhlcmUgaXMgYW4gZXhpc3RpbmcgbGluay4KKworVXNpbmcgW2RlZmF1bHRdIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHRvIG92ZXJydWxlIHRoZSBoaWdobGlnaHRpbmcgb2YgYQorc3BlY2lmaWMgc3ludGF4IGZpbGUuICBGb3IgZXhhbXBsZSwgdGhlIEMgc3ludGF4IGZpbGUgY29udGFpbnM6ID4KKwk6aGlnaGxpZ2h0IGRlZmF1bHQgbGluayBjQ29tbWVudCBDb21tZW50CitJZiB5b3UgbGlrZSBRdWVzdGlvbiBoaWdobGlnaHRpbmcgZm9yIEMgY29tbWVudHMsIHB1dCB0aGlzIGluIHlvdXIgdmltcmMgZmlsZTogPgorCTpoaWdobGlnaHQgbGluayBjQ29tbWVudCBRdWVzdGlvbgorV2l0aG91dCB0aGUgImRlZmF1bHQiIGluIHRoZSBDIHN5bnRheCBmaWxlLCB0aGUgaGlnaGxpZ2h0aW5nIHdvdWxkIGJlCitvdmVycnVsZWQgd2hlbiB0aGUgc3ludGF4IGZpbGUgaXMgbG9hZGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzE0LiBDbGVhbmluZyB1cAkJCQkJCSo6c3luLWNsZWFyKiAqRTM5MSoKKworSWYgeW91IHdhbnQgdG8gY2xlYXIgdGhlIHN5bnRheCBzdHVmZiBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLCB5b3UgY2FuIHVzZSB0aGlzCitjb21tYW5kOiA+CisgIDpzeW50YXggY2xlYXIKKworVGhpcyBjb21tYW5kIHNob3VsZCBiZSB1c2VkIHdoZW4geW91IHdhbnQgdG8gc3dpdGNoIG9mZiBzeW50YXggaGlnaGxpZ2h0aW5nLAorb3Igd2hlbiB5b3Ugd2FudCB0byBzd2l0Y2ggdG8gdXNpbmcgYW5vdGhlciBzeW50YXguICBJdCdzIG5vcm1hbGx5IG5vdCBuZWVkZWQKK2luIGEgc3ludGF4IGZpbGUgaXRzZWxmLCBiZWNhdXNlIHN5bnRheCBpcyBjbGVhcmVkIGJ5IHRoZSBhdXRvY29tbWFuZHMgdGhhdAorbG9hZCB0aGUgc3ludGF4IGZpbGUuCitUaGUgY29tbWFuZCBhbHNvIGRlbGV0ZXMgdGhlICJiOmN1cnJlbnRfc3ludGF4IiB2YXJpYWJsZSwgc2luY2Ugbm8gc3ludGF4IGlzCitsb2FkZWQgYWZ0ZXIgdGhpcyBjb21tYW5kLgorCitJZiB5b3Ugd2FudCB0byBkaXNhYmxlIHN5bnRheCBoaWdobGlnaHRpbmcgZm9yIGFsbCBidWZmZXJzLCB5b3UgbmVlZCB0byByZW1vdmUKK3RoZSBhdXRvY29tbWFuZHMgdGhhdCBsb2FkIHRoZSBzeW50YXggZmlsZXM6ID4KKyAgOnN5bnRheCBvZmYKKworV2hhdCB0aGlzIGNvbW1hbmQgYWN0dWFsbHkgZG9lcywgaXMgZXhlY3V0aW5nIHRoZSBjb21tYW5kID4KKyAgOnNvdXJjZSAkVklNUlVOVElNRS9zeW50YXgvbm9zeW50YXgudmltCitTZWUgdGhlICJub3N5bnRheC52aW0iIGZpbGUgZm9yIGRldGFpbHMuICBOb3RlIHRoYXQgZm9yIHRoaXMgdG8gd29yaworJFZJTVJVTlRJTUUgbXVzdCBiZSB2YWxpZC4gIFNlZSB8JFZJTVJVTlRJTUV8LgorCitUbyBjbGVhbiB1cCBzcGVjaWZpYyBzeW50YXggZ3JvdXBzIGZvciB0aGUgY3VycmVudCBidWZmZXI6ID4KKyAgOnN5bnRheCBjbGVhciB7Z3JvdXAtbmFtZX0gLi4KK1RoaXMgcmVtb3ZlcyBhbGwgcGF0dGVybnMgYW5kIGtleXdvcmRzIGZvciB7Z3JvdXAtbmFtZX0uCisKK1RvIGNsZWFuIHVwIHNwZWNpZmljIHN5bnRheCBncm91cCBsaXN0cyBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyOiA+CisgIDpzeW50YXggY2xlYXIgQHtncm91cGxpc3QtbmFtZX0gLi4KK1RoaXMgc2V0cyB7Z3JvdXBsaXN0LW5hbWV9J3MgY29udGVudHMgdG8gYW4gZW1wdHkgbGlzdC4KKworCQkJCQkJKjpzeW50YXgtcmVzZXQqICo6c3luLXJlc2V0KgorSWYgeW91IGhhdmUgY2hhbmdlZCB0aGUgY29sb3JzIGFuZCBtZXNzZWQgdGhlbSB1cCwgdXNlIHRoaXMgY29tbWFuZCB0byBnZXQgdGhlCitkZWZhdWx0cyBiYWNrOiA+CisKKyAgOnN5bnRheCByZXNldAorCitUaGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBjb2xvcnMgZm9yIHRoZSAnaGlnaGxpZ2h0JyBvcHRpb24uCisKK05vdGUgdGhhdCB0aGUgc3ludGF4IGNvbG9ycyB0aGF0IHlvdSBzZXQgaW4geW91ciB2aW1yYyBmaWxlIHdpbGwgYWxzbyBiZSByZXNldAorYmFjayB0byB0aGVpciBWaW0gZGVmYXVsdC4KK05vdGUgdGhhdCBpZiB5b3UgYXJlIHVzaW5nIGEgY29sb3Igc2NoZW1lLCB0aGUgY29sb3JzIGRlZmluZWQgYnkgdGhlIGNvbG9yCitzY2hlbWUgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcgd2lsbCBiZSBsb3N0LgorCitXaGF0IHRoaXMgYWN0dWFsbHkgZG9lcyBpczogPgorCisJbGV0IGc6c3ludGF4X2NtZCA9ICJyZXNldCIKKwlydW50aW1lISBzeW50YXgvc3luY29sb3IudmltCisKK05vdGUgdGhhdCB0aGlzIHVzZXMgdGhlICdydW50aW1lcGF0aCcgb3B0aW9uLgorCisJCQkJCQkJKnN5bmNvbG9yKgorSWYgeW91IHdhbnQgdG8gdXNlIGRpZmZlcmVudCBjb2xvcnMgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcsIHlvdSBjYW4gYWRkIGEgVmltCitzY3JpcHQgZmlsZSB0byBzZXQgdGhlc2UgY29sb3JzLiAgUHV0IHRoaXMgZmlsZSBpbiBhIGRpcmVjdG9yeSBpbgorJ3J1bnRpbWVwYXRoJyB3aGljaCBjb21lcyBhZnRlciAkVklNUlVOVElNRSwgc28gdGhhdCB5b3VyIHNldHRpbmdzIG92ZXJydWxlCit0aGUgZGVmYXVsdCBjb2xvcnMuICBUaGlzIHdheSB0aGVzZSBjb2xvcnMgd2lsbCBiZSB1c2VkIGFmdGVyIHRoZSAiOnN5bnRheAorcmVzZXQiIGNvbW1hbmQuCisKK0ZvciBVbml4IHlvdSBjYW4gdXNlIHRoZSBmaWxlIH4vLnZpbS9hZnRlci9zeW50YXgvc3luY29sb3IudmltLiAgRXhhbXBsZTogPgorCisJaWYgJmJhY2tncm91bmQgPT0gImxpZ2h0IgorCSAgaGlnaGxpZ2h0IGNvbW1lbnQgY3Rlcm1mZz1kYXJrZ3JlZW4gZ3VpZmc9ZGFya2dyZWVuCisJZWxzZQorCSAgaGlnaGxpZ2h0IGNvbW1lbnQgY3Rlcm1mZz1ncmVlbiBndWlmZz1ncmVlbgorCWVuZGlmCisKK05vdGUgdGhhdCB3aGVuIGEgY29sb3Igc2NoZW1lIGlzIHVzZWQsIHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZnVzaW9uIHdoZXRoZXIKK3lvdXIgZGVmaW5lZCBjb2xvcnMgYXJlIHRvIGJlIHVzZWQgb3IgdGhlIGNvbG9ycyBmcm9tIHRoZSBzY2hlbWUuICBUaGlzCitkZXBlbmRzIG9uIHRoZSBjb2xvciBzY2hlbWUgZmlsZS4gIFNlZSB8OmNvbG9yc2NoZW1lfC4KKworCQkJCQkJCSpzeW50YXhfY21kKgorVGhlICJzeW50YXhfY21kIiB2YXJpYWJsZSBpcyBzZXQgdG8gb25lIG9mIHRoZXNlIHZhbHVlcyB3aGVuIHRoZQorc3ludGF4L3N5bmNvbG9yLnZpbSBmaWxlcyBhcmUgbG9hZGVkOgorICAgIm9uIgkJIjpzeW50YXggb24iIGNvbW1hbmQuICBIaWdobGlnaHQgY29sb3JzIGFyZSBvdmVycnVsZWQgYnV0CisJCWxpbmtzIGFyZSBrZXB0CisgICAiZW5hYmxlIgkiOnN5bnRheCBlbmFibGUiIGNvbW1hbmQuICBPbmx5IGRlZmluZSBjb2xvcnMgZm9yIGdyb3VwcyB0aGF0CisJCWRvbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldC4gIFVzZSAiOnN5bnRheCBkZWZhdWx0Ii4KKyAgICJyZXNldCIJIjpzeW50YXggcmVzZXQiIGNvbW1hbmQgb3IgbG9hZGluZyBhIGNvbG9yIHNjaGVtZS4gIERlZmluZSBhbGwKKwkJdGhlIGNvbG9ycy4KKyAgICJza2lwIglEb24ndCBkZWZpbmUgY29sb3JzLiAgVXNlZCB0byBza2lwIHRoZSBkZWZhdWx0IHNldHRpbmdzIHdoZW4gYQorCQlzeW5jb2xvci52aW0gZmlsZSBlYXJsaWVyIGluICdydW50aW1lcGF0aCcgaGFzIGFscmVhZHkgc2V0CisJCXRoZW0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTUuIEhpZ2hsaWdodGluZyB0YWdzCQkJCQkqdGFnLWhpZ2hsaWdodCoKKworSWYgeW91IHdhbnQgdG8gaGlnaGxpZ2h0IGFsbCB0aGUgdGFncyBpbiB5b3VyIGZpbGUsIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcKK21hcHBpbmdzLgorCisJPEYxMT4JLS0gR2VuZXJhdGUgdGFncy52aW0gZmlsZSwgYW5kIGhpZ2hsaWdodCB0YWdzLgorCTxGMTI+CS0tIEp1c3QgaGlnaGxpZ2h0IHRhZ3MgYmFzZWQgb24gZXhpc3RpbmcgdGFncy52aW0gZmlsZS4KKz4KKyAgOm1hcCA8RjExPiAgOnNwIHRhZ3M8Q1I+OiVzL15cKFteCTpdKjpcKVw9XChbXgldKlwpLiovc3ludGF4IGtleXdvcmQgVGFnIFwyLzxDUj46d3EhIHRhZ3MudmltPENSPi9ePENSPjxGMTI+CisgIDptYXAgPEYxMj4gIDpzbyB0YWdzLnZpbTxDUj4KKworV0FSTklORzogVGhlIGxvbmdlciB0aGUgdGFncyBmaWxlLCB0aGUgc2xvd2VyIHRoaXMgd2lsbCBiZSwgYW5kIHRoZSBtb3JlCittZW1vcnkgVmltIHdpbGwgY29uc3VtZS4KKworT25seSBoaWdobGlnaHRpbmcgdHlwZWRlZnMsIHVuaW9ucyBhbmQgc3RydWN0cyBjYW4gYmUgZG9uZSB0b28uICBGb3IgdGhpcyB5b3UKK211c3QgdXNlIEV4dWJlcmFudCBjdGFncyAoZm91bmQgYXQgaHR0cDovL2N0YWdzLnNmLm5ldCkuCisKK1B1dCB0aGVzZSBsaW5lcyBpbiB5b3VyIE1ha2VmaWxlOgorCisjIE1ha2UgYSBoaWdobGlnaHQgZmlsZSBmb3IgdHlwZXMuICBSZXF1aXJlcyBFeHViZXJhbnQgY3RhZ3MgYW5kIGF3awordHlwZXM6IHR5cGVzLnZpbQordHlwZXMudmltOiAqLltjaF0KKwljdGFncyAtaT1nc3R1UyAtby0gKi5bY2hdIHxcCisJCWF3ayAnQkVHSU57cHJpbnRmKCJzeW50YXgga2V5d29yZCBUeXBlXHQiKX1cCisJCQl7cHJpbnRmKCIlcyAiLCAkJDEpfUVORHtwcmludCAiIn0nID4gJEAKKworQW5kIHB1dCB0aGVzZSBsaW5lcyBpbiB5b3VyIC52aW1yYzogPgorCisgICAiIGxvYWQgdGhlIHR5cGVzLnZpbSBoaWdobGlnaHRpbmcgZmlsZSwgaWYgaXQgZXhpc3RzCisgICBhdXRvY21kIEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLltjaF0gbGV0IGZuYW1lID0gZXhwYW5kKCc8YWZpbGU+OnA6aCcpIC4gJy90eXBlcy52aW0nCisgICBhdXRvY21kIEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLltjaF0gaWYgZmlsZXJlYWRhYmxlKGZuYW1lKQorICAgYXV0b2NtZCBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5bY2hdICAgZXhlICdzbyAnIC4gZm5hbWUKKyAgIGF1dG9jbWQgQnVmUmVhZCxCdWZOZXdGaWxlICouW2NoXSBlbmRpZgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzE2LiBDb2xvciB4dGVybXMJCQkJKnh0ZXJtLWNvbG9yKiAqY29sb3IteHRlcm0qCisKK01vc3QgY29sb3IgeHRlcm1zIGhhdmUgb25seSBlaWdodCBjb2xvcnMuICBJZiB5b3UgZG9uJ3QgZ2V0IGNvbG9ycyB3aXRoIHRoZQorZGVmYXVsdCBzZXR1cCwgaXQgc2hvdWxkIHdvcmsgd2l0aCB0aGVzZSBsaW5lcyBpbiB5b3VyIC52aW1yYzogPgorICAgOmlmICZ0ZXJtID1+ICJ4dGVybSIKKyAgIDogIGlmIGhhcygidGVybWluZm8iKQorICAgOglzZXQgdF9Dbz04CisgICA6CXNldCB0X1NmPTxFc2M+WzMlcDElZG0KKyAgIDoJc2V0IHRfU2I9PEVzYz5bNCVwMSVkbQorICAgOiAgZWxzZQorICAgOglzZXQgdF9Dbz04CisgICA6CXNldCB0X1NmPTxFc2M+WzMlZG0KKyAgIDoJc2V0IHRfU2I9PEVzYz5bNCVkbQorICAgOiAgZW5kaWYKKyAgIDplbmRpZgorPAlbPEVzYz4gaXMgYSByZWFsIGVzY2FwZSwgdHlwZSBDVFJMLVYgPEVzYz5dCisKK1lvdSBtaWdodCB3YW50IHRvIGNoYW5nZSB0aGUgZmlyc3QgImlmIiB0byBtYXRjaCB0aGUgbmFtZSBvZiB5b3VyIHRlcm1pbmFsLAorZS5nLiAiZHR0ZXJtIiBpbnN0ZWFkIG9mICJ4dGVybSIuCisKK05vdGU6IERvIHRoZXNlIHNldHRpbmdzIEJFRk9SRSBkb2luZyAiOnN5bnRheCBvbiIuICBPdGhlcndpc2UgdGhlIGNvbG9ycyBtYXkKK2JlIHdyb25nLgorCQkJCQkJCSp4aXRlcm0qICpyeHZ0KgorVGhlIGFib3ZlIHNldHRpbmdzIGhhdmUgYmVlbiBtZW50aW9uZWQgdG8gd29yayBmb3IgeGl0ZXJtIGFuZCByeHZ0IHRvby4KK0J1dCBmb3IgdXNpbmcgMTYgY29sb3JzIGluIGFuIHJ4dnQgdGhlc2Ugc2hvdWxkIHdvcmsgd2l0aCB0ZXJtaW5mbzogPgorCTpzZXQgdF9BQj08RXNjPlslPyVwMSV7OH0lPCV0MjU7JXAxJXs0MH0lKyVlNTslcDElezMyfSUrJTslZG0KKwk6c2V0IHRfQUY9PEVzYz5bJT8lcDElezh9JTwldDIyOyVwMSV7MzB9JSslZTE7JXAxJXsyMn0lKyU7JWRtCis8CisJCQkJCQkJKmNvbG9ydGVzdC52aW0qCitUbyB0ZXN0IHlvdXIgY29sb3Igc2V0dXAsIGEgZmlsZSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgVmltIGRpc3RyaWJ1dGlvbi4KK1RvIHVzZSBpdCwgZXhlY3V0ZSB0aGVzZSBjb21tYW5kczogPgorICAgOmUgJFZJTVJVTlRJTUUvc3ludGF4L2NvbG9ydGVzdC52aW0KKyAgIDpzbyAlCisKK1NvbWUgdmVyc2lvbnMgb2YgeHRlcm0gKGFuZCBvdGhlciB0ZXJtaW5hbHMsIGxpa2UgdGhlIGxpbnV4IGNvbnNvbGUpIGNhbgorb3V0cHV0IGxpZ2h0ZXIgZm9yZWdyb3VuZCBjb2xvcnMsIGV2ZW4gdGhvdWdoIHRoZSBudW1iZXIgb2YgY29sb3JzIGlzIGRlZmluZWQKK2F0IDguICBUaGVyZWZvcmUgVmltIHNldHMgdGhlICJjdGVybT1ib2xkIiBhdHRyaWJ1dGUgZm9yIGxpZ2h0IGZvcmVncm91bmQKK2NvbG9ycywgd2hlbiAndF9DbycgaXMgOC4KKworCQkJCQkJCSp4ZnJlZS14dGVybSoKK1RvIGdldCAxNiBjb2xvcnMgb3IgbW9yZSwgZ2V0IHRoZSBuZXdlc3QgeHRlcm0gdmVyc2lvbiAod2hpY2ggc2hvdWxkIGJlCitpbmNsdWRlZCB3aXRoIFhmcmVlODYgMy4zIGFuZCBsYXRlcikuICBZb3UgY2FuIGFsc28gZmluZCB0aGUgbGF0ZXN0IHZlcnNpb24KK2F0OiA+CisJaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3h0ZXJtL3h0ZXJtLmh0bWwKK0hlcmUgaXMgYSBnb29kIHdheSB0byBjb25maWd1cmUgaXQuICBUaGlzIHVzZXMgODggY29sb3JzIGFuZCBlbmFibGVzIHRoZQordGVybWNhcC1xdWVyeSBmZWF0dXJlLCB3aGljaCBhbGxvd3MgVmltIHRvIGFzayB0aGUgeHRlcm0gaG93IG1hbnkgY29sb3JzIGl0CitzdXBwb3J0cy4gPgorCS4vY29uZmlndXJlIC0tZGlzYWJsZS1ib2xkLWNvbG9yIC0tZW5hYmxlLTg4LWNvbG9yIC0tZW5hYmxlLXRjYXAtcXVlcnkKK0lmIHlvdSBvbmx5IGdldCA4IGNvbG9ycywgY2hlY2sgdGhlIHh0ZXJtIGNvbXBpbGF0aW9uIHNldHRpbmdzLgorKEFsc28gc2VlIHxVVEY4LXh0ZXJtfCBmb3IgdXNpbmcgdGhpcyB4dGVybSB3aXRoIFVURi04IGNoYXJhY3RlciBlbmNvZGluZykuCisKK1RoaXMgeHRlcm0gc2hvdWxkIHdvcmsgd2l0aCB0aGVzZSBsaW5lcyBpbiB5b3VyIC52aW1yYyAoZm9yIDE2IGNvbG9ycyk6ID4KKyAgIDppZiBoYXMoInRlcm1pbmZvIikKKyAgIDogIHNldCB0X0NvPTE2CisgICA6ICBzZXQgdF9BQj08RXNjPlslPyVwMSV7OH0lPCV0JXAxJXs0MH0lKyVlJXAxJXs5Mn0lKyU7JWRtCisgICA6ICBzZXQgdF9BRj08RXNjPlslPyVwMSV7OH0lPCV0JXAxJXszMH0lKyVlJXAxJXs4Mn0lKyU7JWRtCisgICA6ZWxzZQorICAgOiAgc2V0IHRfQ289MTYKKyAgIDogIHNldCB0X1NmPTxFc2M+WzMlZG0KKyAgIDogIHNldCB0X1NiPTxFc2M+WzQlZG0KKyAgIDplbmRpZgorPAlbPEVzYz4gaXMgYSByZWFsIGVzY2FwZSwgdHlwZSBDVFJMLVYgPEVzYz5dCisKK1dpdGhvdXQgfCt0ZXJtaW5mb3wsIFZpbSB3aWxsIHJlY29nbml6ZSB0aGVzZSBzZXR0aW5ncywgYW5kIGF1dG9tYXRpY2FsbHkKK3RyYW5zbGF0ZSBjdGVybSBjb2xvcnMgb2YgOCBhbmQgYWJvdmUgdG8gIjxFc2M+WzklZG0iIGFuZCAiPEVzYz5bMTAlZG0iLgorQ29sb3JzIGFib3ZlIDE2IGFyZSBhbHNvIHRyYW5zbGF0ZWQgYXV0b21hdGljYWxseS4KKworRm9yIDI1NiBjb2xvcnMgdGhpcyBoYXMgYmVlbiByZXBvcnRlZCB0byB3b3JrOiA+CisKKyAgIDpzZXQgdF9BQj08RXNjPls0ODs1OyVkbQorICAgOnNldCB0X0FGPTxFc2M+WzM4OzU7JWRtCisKK09yIGp1c3Qgc2V0IHRoZSBURVJNIGVudmlyb25tZW50IHZhcmlhYmxlIHRvICJ4dGVybS1jb2xvciIgb3IgInh0ZXJtLTE2Y29sb3IiCithbmQgdHJ5IGlmIHRoYXQgd29ya3MuCisKK1lvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGVzZSBYIHJlc291cmNlcyAoaW4geW91ciB+Ly5YZGVmYXVsdHMgZmlsZSk6CisJWFRlcm0qY29sb3IwOgkJCSMwMDAwMDAKKwlYVGVybSpjb2xvcjE6CQkJI2MwMDAwMAorCVhUZXJtKmNvbG9yMjoJCQkjMDA4MDAwCisJWFRlcm0qY29sb3IzOgkJCSM4MDgwMDAKKwlYVGVybSpjb2xvcjQ6CQkJIzAwMDBjMAorCVhUZXJtKmNvbG9yNToJCQkjYzAwMGMwCisJWFRlcm0qY29sb3I2OgkJCSMwMDgwODAKKwlYVGVybSpjb2xvcjc6CQkJI2MwYzBjMAorCVhUZXJtKmNvbG9yODoJCQkjODA4MDgwCisJWFRlcm0qY29sb3I5OgkJCSNmZjYwNjAKKwlYVGVybSpjb2xvcjEwOgkJCSMwMGZmMDAKKwlYVGVybSpjb2xvcjExOgkJCSNmZmZmMDAKKwlYVGVybSpjb2xvcjEyOgkJCSM4MDgwZmYKKwlYVGVybSpjb2xvcjEzOgkJCSNmZjQwZmYKKwlYVGVybSpjb2xvcjE0OgkJCSMwMGZmZmYKKwlYVGVybSpjb2xvcjE1OgkJCSNmZmZmZmYKKwlYdGVybSpjdXJzb3JDb2xvcjoJCUJsYWNrCisKK1tOb3RlOiBUaGUgY3Vyc29yQ29sb3IgaXMgcmVxdWlyZWQgdG8gd29yayBhcm91bmQgYSBidWcsIHdoaWNoIGNoYW5nZXMgdGhlCitjdXJzb3IgY29sb3IgdG8gdGhlIGNvbG9yIG9mIHRoZSBsYXN0IGRyYXduIHRleHQuICBUaGlzIGhhcyBiZWVuIGZpeGVkIGJ5IGEKK25ld2VyIHZlcnNpb24gb2YgeHRlcm0sIGJ1dCBub3QgZXZlcnlib2R5IGlzIGl0IHVzaW5nIHlldC5dCisKK1RvIGdldCB0aGVzZSByaWdodCBhd2F5LCByZWxvYWQgdGhlIC5YZGVmYXVsdHMgZmlsZSB0byB0aGUgWCBPcHRpb24gZGF0YWJhc2UKK01hbmFnZXIgKHlvdSBvbmx5IG5lZWQgdG8gZG8gdGhpcyB3aGVuIHlvdSBqdXN0IGNoYW5nZWQgdGhlIC5YZGVmYXVsdHMgZmlsZSk6ID4KKyAgeHJkYiAtbWVyZ2Ugfi8uWGRlZmF1bHRzCis8CisJCQkJCSp4dGVybS1ibGluayogKnh0ZXJtLWJsaW5raW5nLWN1cnNvcioKK1RvIG1ha2UgdGhlIGN1cnNvciBibGluayBpbiBhbiB4dGVybSwgc2VlIHRvb2xzL2JsaW5rLmMuICBPciB1c2UgVGhvbWFzCitEaWNrZXkncyB4dGVybSBhYm92ZSBwYXRjaGxldmVsIDEwNyAoc2VlIGFib3ZlIGZvciB3aGVyZSB0byBnZXQgaXQpLCB3aXRoCit0aGVzZSByZXNvdXJjZXM6CisJWFRlcm0qY3Vyc29yQmxpbms6CW9uCisJWFRlcm0qY3Vyc29yT25UaW1lOgk0MDAKKwlYVGVybSpjdXJzb3JPZmZUaW1lOgkyNTAKKwlYVGVybSpjdXJzb3JDb2xvcjoJV2hpdGUKKworCQkJCQkJCSpocHRlcm0tY29sb3IqCitUaGVzZSBzZXR0aW5ncyB3b3JrIChtb3JlIG9yIGxlc3MpIGZvciBhIGhwdGVybSwgd2hpY2ggb25seSBzdXBwb3J0cyA4Citmb3JlZ3JvdW5kIGNvbG9yczogPgorICAgOmlmIGhhcygidGVybWluZm8iKQorICAgOiAgc2V0IHRfQ289OAorICAgOiAgc2V0IHRfU2Y9PEVzYz5bJnYlcDElZFMKKyAgIDogIHNldCB0X1NiPTxFc2M+WyZ2N1MKKyAgIDplbHNlCisgICA6ICBzZXQgdF9Dbz04CisgICA6ICBzZXQgdF9TZj08RXNjPlsmdiVkUworICAgOiAgc2V0IHRfU2I9PEVzYz5bJnY3UworICAgOmVuZGlmCis8CVs8RXNjPiBpcyBhIHJlYWwgZXNjYXBlLCB0eXBlIENUUkwtViA8RXNjPl0KKworCQkJCQkJKkV0ZXJtKiAqZW5saWdodGVuZWQtdGVybWluYWwqCitUaGVzZSBzZXR0aW5ncyBoYXZlIGJlZW4gcmVwb3J0ZWQgdG8gd29yayBmb3IgdGhlIEVubGlnaHRlbmVkIHRlcm1pbmFsCitlbXVsYXRvciwgb3IgRXRlcm0uICBUaGV5IG1pZ2h0IHdvcmsgZm9yIGFsbCB4dGVybS1saWtlIHRlcm1pbmFscyB0aGF0IHVzZSB0aGUKK2JvbGQgYXR0cmlidXRlIHRvIGdldCBicmlnaHQgY29sb3JzLiAgQWRkIGFuICI6aWYiIGxpa2UgYWJvdmUgd2hlbiBuZWVkZWQuID4KKyAgICAgICA6c2V0IHRfQ289MTYKKyAgICAgICA6c2V0IHRfQUY9XltbJT8lcDElezh9JTwldDMlcDElZCVlJXAxJXsyMn0lKyVkOzElO20KKyAgICAgICA6c2V0IHRfQUI9XltbJT8lcDElezh9JTwldDQlcDElZCVlJXAxJXszMn0lKyVkOzElO20KKzwKKwkJCQkJCSpUVHByby10ZWxuZXQqCitUaGVzZSBzZXR0aW5ncyBzaG91bGQgd29yayBmb3IgVFRwcm8gdGVsbmV0LiAgVGVyYSBUZXJtIFBybyBpcyBhIGZyZWV3YXJlIC8KK29wZW4tc291cmNlIHByb2dyYW0gZm9yIE1TLVdpbmRvd3MuID4KKwlzZXQgdF9Dbz0xNgorCXNldCB0X0FCPV5bWyU/JXAxJXs4fSU8JXQlcDElezQwfSUrJWUlcDElezMyfSUrNTslOyVkbQorCXNldCB0X0FGPV5bWyU/JXAxJXs4fSU8JXQlcDElezMwfSUrJWUlcDElezIyfSUrMTslOyVkbQorQWxzbyBtYWtlIHN1cmUgVFRwcm8ncyBTZXR1cCAvIFdpbmRvdyAvIEZ1bGwgQ29sb3IgaXMgZW5hYmxlZCwgYW5kIG1ha2Ugc3VyZQordGhhdCBTZXR1cCAvIEZvbnQgLyBFbmFibGUgQm9sZCBpcyBOT1QgZW5hYmxlZC4KKyhpbmZvIHByb3ZpZGVkIGJ5IEpvaG4gTG92ZS1KZW5zZW4gPGVsamF5QEFkb2JlLkNPTT4pCisKKyB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RhZ3MgYi9ydW50aW1lL2RvYy90YWdzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzdhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy90YWdzCkBAIC0wLDAgKzEsNjY0OSBAQAorIQljaGFuZ2UudHh0CS8qISoKKyEhCWNoYW5nZS50eHQJLyohISoKKyMJcGF0dGVybi50eHQJLyojKgorJAltb3Rpb24udHh0CS8qJCoKKyRIT01FCW9wdGlvbnMudHh0CS8qJEhPTUUqCiskSE9NRS11c2UJdmVyc2lvbjUudHh0CS8qJEhPTUUtdXNlKgorJFZJTQlzdGFydGluZy50eHQJLyokVklNKgorJFZJTS11c2UJdmVyc2lvbjUudHh0CS8qJFZJTS11c2UqCiskVklNUlVOVElNRQlzdGFydGluZy50eHQJLyokVklNUlVOVElNRSoKKyUJbW90aW9uLnR4dAkvKiUqCismCWNoYW5nZS50eHQJLyomKgorJwltb3Rpb24udHh0CS8qJyoKKycnCW1vdGlvbi50eHQJLyonJyoKKycoCW1vdGlvbi50eHQJLyonKCoKKycpCW1vdGlvbi50eHQJLyonKSoKKycuCW1vdGlvbi50eHQJLyonLioKKycwCW1vdGlvbi50eHQJLyonMCoKKyc8CW1vdGlvbi50eHQJLyonPCoKKyc+CW1vdGlvbi50eHQJLyonPioKKydBCW1vdGlvbi50eHQJLyonQSoKKydbCW1vdGlvbi50eHQJLyonWyoKKyddCW1vdGlvbi50eHQJLyonXSoKKydeCW1vdGlvbi50eHQJLyonXioKKydhCW1vdGlvbi50eHQJLyonYSoKKydhY2QnCW9wdGlvbnMudHh0CS8qJ2FjZCcqCisnYWknCW9wdGlvbnMudHh0CS8qJ2FpJyoKKydha20nCW9wdGlvbnMudHh0CS8qJ2FrbScqCisnYWwnCW9wdGlvbnMudHh0CS8qJ2FsJyoKKydhbGVwaCcJb3B0aW9ucy50eHQJLyonYWxlcGgnKgorJ2FsbG93cmV2aW5zJwlvcHRpb25zLnR4dAkvKidhbGxvd3JldmlucycqCisnYWx0a2V5bWFwJwlvcHRpb25zLnR4dAkvKidhbHRrZXltYXAnKgorJ2FtYml3aWR0aCcJb3B0aW9ucy50eHQJLyonYW1iaXdpZHRoJyoKKydhbWJ3JwlvcHRpb25zLnR4dAkvKidhbWJ3JyoKKydhbnRpJwlvcHRpb25zLnR4dAkvKidhbnRpJyoKKydhbnRpYWxpYXMnCW9wdGlvbnMudHh0CS8qJ2FudGlhbGlhcycqCisnYXAnCXZpX2RpZmYudHh0CS8qJ2FwJyoKKydhcicJb3B0aW9ucy50eHQJLyonYXInKgorJ2FyYWInCW9wdGlvbnMudHh0CS8qJ2FyYWInKgorJ2FyYWJpYycJb3B0aW9ucy50eHQJLyonYXJhYmljJyoKKydhcmFiaWNzaGFwZScJb3B0aW9ucy50eHQJLyonYXJhYmljc2hhcGUnKgorJ2FyaScJb3B0aW9ucy50eHQJLyonYXJpJyoKKydhcnNoYXBlJwlvcHRpb25zLnR4dAkvKidhcnNoYXBlJyoKKydhcycJdG9kby50eHQJLyonYXMnKgorJ2F1dG9jaGRpcicJb3B0aW9ucy50eHQJLyonYXV0b2NoZGlyJyoKKydhdXRvaW5kZW50JwlvcHRpb25zLnR4dAkvKidhdXRvaW5kZW50JyoKKydhdXRvcHJpbnQnCXZpX2RpZmYudHh0CS8qJ2F1dG9wcmludCcqCisnYXV0b3JlYWQnCW9wdGlvbnMudHh0CS8qJ2F1dG9yZWFkJyoKKydhdXRvc2F2ZScJdG9kby50eHQJLyonYXV0b3NhdmUnKgorJ2F1dG93cml0ZScJb3B0aW9ucy50eHQJLyonYXV0b3dyaXRlJyoKKydhdXRvd3JpdGVhbGwnCW9wdGlvbnMudHh0CS8qJ2F1dG93cml0ZWFsbCcqCisnYXcnCW9wdGlvbnMudHh0CS8qJ2F3JyoKKydhd2EnCW9wdGlvbnMudHh0CS8qJ2F3YScqCisnYmFja2dyb3VuZCcJb3B0aW9ucy50eHQJLyonYmFja2dyb3VuZCcqCisnYmFja3NwYWNlJwlvcHRpb25zLnR4dAkvKidiYWNrc3BhY2UnKgorJ2JhY2t1cCcJb3B0aW9ucy50eHQJLyonYmFja3VwJyoKKydiYWNrdXBjb3B5JwlvcHRpb25zLnR4dAkvKidiYWNrdXBjb3B5JyoKKydiYWNrdXBkaXInCW9wdGlvbnMudHh0CS8qJ2JhY2t1cGRpcicqCisnYmFja3VwZXh0JwlvcHRpb25zLnR4dAkvKidiYWNrdXBleHQnKgorJ2JhY2t1cHNraXAnCW9wdGlvbnMudHh0CS8qJ2JhY2t1cHNraXAnKgorJ2JhbGxvb25kZWxheScJb3B0aW9ucy50eHQJLyonYmFsbG9vbmRlbGF5JyoKKydiYWxsb29uZXZhbCcJb3B0aW9ucy50eHQJLyonYmFsbG9vbmV2YWwnKgorJ2JkaXInCW9wdGlvbnMudHh0CS8qJ2JkaXInKgorJ2JkbGF5JwlvcHRpb25zLnR4dAkvKidiZGxheScqCisnYmVhdXRpZnknCXZpX2RpZmYudHh0CS8qJ2JlYXV0aWZ5JyoKKydiZXZhbCcJb3B0aW9ucy50eHQJLyonYmV2YWwnKgorJ2JleCcJb3B0aW9ucy50eHQJLyonYmV4JyoKKydiZicJdmlfZGlmZi50eHQJLyonYmYnKgorJ2JnJwlvcHRpb25zLnR4dAkvKidiZycqCisnYmgnCW9wdGlvbnMudHh0CS8qJ2JoJyoKKydiaW4nCW9wdGlvbnMudHh0CS8qJ2JpbicqCisnYmluYXJ5JwlvcHRpb25zLnR4dAkvKidiaW5hcnknKgorJ2Jpb3NrJwlvcHRpb25zLnR4dAkvKidiaW9zaycqCisnYmlvc2tleScJb3B0aW9ucy50eHQJLyonYmlvc2tleScqCisnYmsnCW9wdGlvbnMudHh0CS8qJ2JrJyoKKydia2MnCW9wdGlvbnMudHh0CS8qJ2JrYycqCisnYmwnCW9wdGlvbnMudHh0CS8qJ2JsJyoKKydib21iJwlvcHRpb25zLnR4dAkvKidib21iJyoKKydicmVha2F0JwlvcHRpb25zLnR4dAkvKidicmVha2F0JyoKKydicmsnCW9wdGlvbnMudHh0CS8qJ2JyaycqCisnYnJvd3NlZGlyJwlvcHRpb25zLnR4dAkvKidicm93c2VkaXInKgorJ2JzJwlvcHRpb25zLnR4dAkvKidicycqCisnYnNkaXInCW9wdGlvbnMudHh0CS8qJ2JzZGlyJyoKKydic2snCW9wdGlvbnMudHh0CS8qJ2JzaycqCisnYnQnCW9wdGlvbnMudHh0CS8qJ2J0JyoKKydidWZoaWRkZW4nCW9wdGlvbnMudHh0CS8qJ2J1ZmhpZGRlbicqCisnYnVmbGlzdGVkJwlvcHRpb25zLnR4dAkvKididWZsaXN0ZWQnKgorJ2J1ZnR5cGUnCW9wdGlvbnMudHh0CS8qJ2J1ZnR5cGUnKgorJ2Nhc2VtYXAnCW9wdGlvbnMudHh0CS8qJ2Nhc2VtYXAnKgorJ2NiJwlvcHRpb25zLnR4dAkvKidjYicqCisnY2N2JwlvcHRpb25zLnR4dAkvKidjY3YnKgorJ2NkJwlvcHRpb25zLnR4dAkvKidjZCcqCisnY2RwYXRoJwlvcHRpb25zLnR4dAkvKidjZHBhdGgnKgorJ2NlZGl0JwlvcHRpb25zLnR4dAkvKidjZWRpdCcqCisnY2YnCW9wdGlvbnMudHh0CS8qJ2NmJyoKKydjaCcJb3B0aW9ucy50eHQJLyonY2gnKgorJ2NoYXJhY3RlcicJaW50cm8udHh0CS8qJ2NoYXJhY3RlcicqCisnY2hhcmNvbnZlcnQnCW9wdGlvbnMudHh0CS8qJ2NoYXJjb252ZXJ0JyoKKydjaScJb3B0aW9ucy50eHQJLyonY2knKgorJ2NpbicJb3B0aW9ucy50eHQJLyonY2luJyoKKydjaW5kZW50JwlvcHRpb25zLnR4dAkvKidjaW5kZW50JyoKKydjaW5rJwlvcHRpb25zLnR4dAkvKidjaW5rJyoKKydjaW5rZXlzJwlvcHRpb25zLnR4dAkvKidjaW5rZXlzJyoKKydjaW5vJwlvcHRpb25zLnR4dAkvKidjaW5vJyoKKydjaW5vcHRpb25zJwlvcHRpb25zLnR4dAkvKidjaW5vcHRpb25zJyoKKydjaW53JwlvcHRpb25zLnR4dAkvKidjaW53JyoKKydjaW53b3JkcycJb3B0aW9ucy50eHQJLyonY2lud29yZHMnKgorJ2NsaXBib2FyZCcJb3B0aW9ucy50eHQJLyonY2xpcGJvYXJkJyoKKydjbWRoZWlnaHQnCW9wdGlvbnMudHh0CS8qJ2NtZGhlaWdodCcqCisnY21kd2luaGVpZ2h0JwlvcHRpb25zLnR4dAkvKidjbWR3aW5oZWlnaHQnKgorJ2NtcCcJb3B0aW9ucy50eHQJLyonY21wJyoKKydjbXMnCW9wdGlvbnMudHh0CS8qJ2NtcycqCisnY28nCW9wdGlvbnMudHh0CS8qJ2NvJyoKKydjb2x1bW5zJwlvcHRpb25zLnR4dAkvKidjb2x1bW5zJyoKKydjb20nCW9wdGlvbnMudHh0CS8qJ2NvbScqCisnY29tbWVudHMnCW9wdGlvbnMudHh0CS8qJ2NvbW1lbnRzJyoKKydjb21tZW50c3RyaW5nJwlvcHRpb25zLnR4dAkvKidjb21tZW50c3RyaW5nJyoKKydjb21wYXRpYmxlJwlvcHRpb25zLnR4dAkvKidjb21wYXRpYmxlJyoKKydjb21wbGV0ZScJb3B0aW9ucy50eHQJLyonY29tcGxldGUnKgorJ2NvbmZpcm0nCW9wdGlvbnMudHh0CS8qJ2NvbmZpcm0nKgorJ2NvbnNrJwlvcHRpb25zLnR4dAkvKidjb25zaycqCisnY29uc2tleScJb3B0aW9ucy50eHQJLyonY29uc2tleScqCisnY29weWluZGVudCcJb3B0aW9ucy50eHQJLyonY29weWluZGVudCcqCisnY3AnCW9wdGlvbnMudHh0CS8qJ2NwJyoKKydjcG8nCW9wdGlvbnMudHh0CS8qJ2NwbycqCisnY3BvcHRpb25zJwlvcHRpb25zLnR4dAkvKidjcG9wdGlvbnMnKgorJ2NwdCcJb3B0aW9ucy50eHQJLyonY3B0JyoKKydjc2NvcGVwYXRoY29tcCcJb3B0aW9ucy50eHQJLyonY3Njb3BlcGF0aGNvbXAnKgorJ2NzY29wZXByZycJb3B0aW9ucy50eHQJLyonY3Njb3BlcHJnJyoKKydjc2NvcGVxdWlja2ZpeCcJb3B0aW9ucy50eHQJLyonY3Njb3BlcXVpY2tmaXgnKgorJ2NzY29wZXRhZycJb3B0aW9ucy50eHQJLyonY3Njb3BldGFnJyoKKydjc2NvcGV0YWdvcmRlcicJb3B0aW9ucy50eHQJLyonY3Njb3BldGFnb3JkZXInKgorJ2NzY29wZXZlcmJvc2UnCW9wdGlvbnMudHh0CS8qJ2NzY29wZXZlcmJvc2UnKgorJ2NzcGMnCW9wdGlvbnMudHh0CS8qJ2NzcGMnKgorJ2NzcHJnJwlvcHRpb25zLnR4dAkvKidjc3ByZycqCisnY3NxZicJb3B0aW9ucy50eHQJLyonY3NxZicqCisnY3N0JwlvcHRpb25zLnR4dAkvKidjc3QnKgorJ2NzdG8nCW9wdGlvbnMudHh0CS8qJ2NzdG8nKgorJ2NzdmVyYicJb3B0aW9ucy50eHQJLyonY3N2ZXJiJyoKKydjd2gnCW9wdGlvbnMudHh0CS8qJ2N3aCcqCisnZGVidWcnCW9wdGlvbnMudHh0CS8qJ2RlYnVnJyoKKydkZWNvJwlvcHRpb25zLnR4dAkvKidkZWNvJyoKKydkZWYnCW9wdGlvbnMudHh0CS8qJ2RlZicqCisnZGVmaW5lJwlvcHRpb25zLnR4dAkvKidkZWZpbmUnKgorJ2RlbGNvbWJpbmUnCW9wdGlvbnMudHh0CS8qJ2RlbGNvbWJpbmUnKgorJ2RleCcJb3B0aW9ucy50eHQJLyonZGV4JyoKKydkZycJb3B0aW9ucy50eHQJLyonZGcnKgorJ2RpY3QnCW9wdGlvbnMudHh0CS8qJ2RpY3QnKgorJ2RpY3Rpb25hcnknCW9wdGlvbnMudHh0CS8qJ2RpY3Rpb25hcnknKgorJ2RpZmYnCW9wdGlvbnMudHh0CS8qJ2RpZmYnKgorJ2RpZmZleHByJwlvcHRpb25zLnR4dAkvKidkaWZmZXhwcicqCisnZGlmZm9wdCcJb3B0aW9ucy50eHQJLyonZGlmZm9wdCcqCisnZGlncmFwaCcJb3B0aW9ucy50eHQJLyonZGlncmFwaCcqCisnZGlwJwlvcHRpb25zLnR4dAkvKidkaXAnKgorJ2RpcicJb3B0aW9ucy50eHQJLyonZGlyJyoKKydkaXJlY3RvcnknCW9wdGlvbnMudHh0CS8qJ2RpcmVjdG9yeScqCisnZGlzcGxheScJb3B0aW9ucy50eHQJLyonZGlzcGxheScqCisnZHknCW9wdGlvbnMudHh0CS8qJ2R5JyoKKydlYScJb3B0aW9ucy50eHQJLyonZWEnKgorJ2VhZCcJb3B0aW9ucy50eHQJLyonZWFkJyoKKydlYWRpcmVjdGlvbicJb3B0aW9ucy50eHQJLyonZWFkaXJlY3Rpb24nKgorJ2ViJwlvcHRpb25zLnR4dAkvKidlYicqCisnZWQnCW9wdGlvbnMudHh0CS8qJ2VkJyoKKydlZGNvbXBhdGlibGUnCW9wdGlvbnMudHh0CS8qJ2VkY29tcGF0aWJsZScqCisnZWYnCW9wdGlvbnMudHh0CS8qJ2VmJyoKKydlZm0nCW9wdGlvbnMudHh0CS8qJ2VmbScqCisnZWknCW9wdGlvbnMudHh0CS8qJ2VpJyoKKydlaycJb3B0aW9ucy50eHQJLyonZWsnKgorJ2VuYycJb3B0aW9ucy50eHQJLyonZW5jJyoKKydlbmNvZGluZycJb3B0aW9ucy50eHQJLyonZW5jb2RpbmcnKgorJ2VuZG9mbGluZScJb3B0aW9ucy50eHQJLyonZW5kb2ZsaW5lJyoKKydlb2wnCW9wdGlvbnMudHh0CS8qJ2VvbCcqCisnZXAnCW9wdGlvbnMudHh0CS8qJ2VwJyoKKydlcXVhbGFsd2F5cycJb3B0aW9ucy50eHQJLyonZXF1YWxhbHdheXMnKgorJ2VxdWFscHJnJwlvcHRpb25zLnR4dAkvKidlcXVhbHByZycqCisnZXJyb3JiZWxscycJb3B0aW9ucy50eHQJLyonZXJyb3JiZWxscycqCisnZXJyb3JmaWxlJwlvcHRpb25zLnR4dAkvKidlcnJvcmZpbGUnKgorJ2Vycm9yZm9ybWF0JwlvcHRpb25zLnR4dAkvKidlcnJvcmZvcm1hdCcqCisnZXNja2V5cycJb3B0aW9ucy50eHQJLyonZXNja2V5cycqCisnZXQnCW9wdGlvbnMudHh0CS8qJ2V0JyoKKydldmVudGlnbm9yZScJb3B0aW9ucy50eHQJLyonZXZlbnRpZ25vcmUnKgorJ2V4JwlvcHRpb25zLnR4dAkvKidleCcqCisnZXhwYW5kdGFiJwlvcHRpb25zLnR4dAkvKidleHBhbmR0YWInKgorJ2V4cmMnCW9wdGlvbnMudHh0CS8qJ2V4cmMnKgorJ2ZjbCcJb3B0aW9ucy50eHQJLyonZmNsJyoKKydmY3MnCW9wdGlvbnMudHh0CS8qJ2ZjcycqCisnZmRjJwlvcHRpb25zLnR4dAkvKidmZGMnKgorJ2ZkZScJb3B0aW9ucy50eHQJLyonZmRlJyoKKydmZGknCW9wdGlvbnMudHh0CS8qJ2ZkaScqCisnZmRsJwlvcHRpb25zLnR4dAkvKidmZGwnKgorJ2ZkbHMnCW9wdGlvbnMudHh0CS8qJ2ZkbHMnKgorJ2ZkbScJb3B0aW9ucy50eHQJLyonZmRtJyoKKydmZG4nCW9wdGlvbnMudHh0CS8qJ2ZkbicqCisnZmRvJwlvcHRpb25zLnR4dAkvKidmZG8nKgorJ2ZkdCcJb3B0aW9ucy50eHQJLyonZmR0JyoKKydmZScJb3B0aW9ucy50eHQJLyonZmUnKgorJ2ZlbicJb3B0aW9ucy50eHQJLyonZmVuJyoKKydmZW5jJwlvcHRpb25zLnR4dAkvKidmZW5jJyoKKydmZW5jcycJb3B0aW9ucy50eHQJLyonZmVuY3MnKgorJ2ZmJwlvcHRpb25zLnR4dAkvKidmZicqCisnZmZzJwlvcHRpb25zLnR4dAkvKidmZnMnKgorJ2ZpbGVlbmNvZGluZycJb3B0aW9ucy50eHQJLyonZmlsZWVuY29kaW5nJyoKKydmaWxlZW5jb2RpbmdzJwlvcHRpb25zLnR4dAkvKidmaWxlZW5jb2RpbmdzJyoKKydmaWxlZm9ybWF0JwlvcHRpb25zLnR4dAkvKidmaWxlZm9ybWF0JyoKKydmaWxlZm9ybWF0cycJb3B0aW9ucy50eHQJLyonZmlsZWZvcm1hdHMnKgorJ2ZpbGV0eXBlJwlvcHRpb25zLnR4dAkvKidmaWxldHlwZScqCisnZmlsbGNoYXJzJwlvcHRpb25zLnR4dAkvKidmaWxsY2hhcnMnKgorJ2ZrJwlvcHRpb25zLnR4dAkvKidmaycqCisnZmttYXAnCW9wdGlvbnMudHh0CS8qJ2ZrbWFwJyoKKydmbCcJdmlfZGlmZi50eHQJLyonZmwnKgorJ2ZsYXNoJwl2aV9kaWZmLnR4dAkvKidmbGFzaCcqCisnZm1sJwlvcHRpb25zLnR4dAkvKidmbWwnKgorJ2ZtcicJb3B0aW9ucy50eHQJLyonZm1yJyoKKydmbycJb3B0aW9ucy50eHQJLyonZm8nKgorJ2ZvbGRjbG9zZScJb3B0aW9ucy50eHQJLyonZm9sZGNsb3NlJyoKKydmb2xkY29sdW1uJwlvcHRpb25zLnR4dAkvKidmb2xkY29sdW1uJyoKKydmb2xkZW5hYmxlJwlvcHRpb25zLnR4dAkvKidmb2xkZW5hYmxlJyoKKydmb2xkZXhwcicJb3B0aW9ucy50eHQJLyonZm9sZGV4cHInKgorJ2ZvbGRpZ25vcmUnCW9wdGlvbnMudHh0CS8qJ2ZvbGRpZ25vcmUnKgorJ2ZvbGRsZXZlbCcJb3B0aW9ucy50eHQJLyonZm9sZGxldmVsJyoKKydmb2xkbGV2ZWxzdGFydCcJb3B0aW9ucy50eHQJLyonZm9sZGxldmVsc3RhcnQnKgorJ2ZvbGRtYXJrZXInCW9wdGlvbnMudHh0CS8qJ2ZvbGRtYXJrZXInKgorJ2ZvbGRtZXRob2QnCW9wdGlvbnMudHh0CS8qJ2ZvbGRtZXRob2QnKgorJ2ZvbGRtaW5saW5lcycJb3B0aW9ucy50eHQJLyonZm9sZG1pbmxpbmVzJyoKKydmb2xkbmVzdG1heCcJb3B0aW9ucy50eHQJLyonZm9sZG5lc3RtYXgnKgorJ2ZvbGRvcGVuJwlvcHRpb25zLnR4dAkvKidmb2xkb3BlbicqCisnZm9sZHRleHQnCW9wdGlvbnMudHh0CS8qJ2ZvbGR0ZXh0JyoKKydmb3JtYXRvcHRpb25zJwlvcHRpb25zLnR4dAkvKidmb3JtYXRvcHRpb25zJyoKKydmb3JtYXRwcmcnCW9wdGlvbnMudHh0CS8qJ2Zvcm1hdHByZycqCisnZnAnCW9wdGlvbnMudHh0CS8qJ2ZwJyoKKydmdCcJb3B0aW9ucy50eHQJLyonZnQnKgorJ2djcicJb3B0aW9ucy50eHQJLyonZ2NyJyoKKydnZCcJb3B0aW9ucy50eHQJLyonZ2QnKgorJ2dkZWZhdWx0JwlvcHRpb25zLnR4dAkvKidnZGVmYXVsdCcqCisnZ2ZtJwlvcHRpb25zLnR4dAkvKidnZm0nKgorJ2dmbicJb3B0aW9ucy50eHQJLyonZ2ZuJyoKKydnZnMnCW9wdGlvbnMudHh0CS8qJ2dmcycqCisnZ2Z3JwlvcHRpb25zLnR4dAkvKidnZncnKgorJ2docicJb3B0aW9ucy50eHQJLyonZ2hyJyoKKydnbycJb3B0aW9ucy50eHQJLyonZ28nKgorJ2dwJwlvcHRpb25zLnR4dAkvKidncCcqCisnZ3InCXZpX2RpZmYudHh0CS8qJ2dyJyoKKydncmFwaGljJwl2aV9kaWZmLnR4dAkvKidncmFwaGljJyoKKydncmVwZm9ybWF0JwlvcHRpb25zLnR4dAkvKidncmVwZm9ybWF0JyoKKydncmVwcHJnJwlvcHRpb25zLnR4dAkvKidncmVwcHJnJyoKKydndWljdXJzb3InCW9wdGlvbnMudHh0CS8qJ2d1aWN1cnNvcicqCisnZ3VpZm9udCcJb3B0aW9ucy50eHQJLyonZ3VpZm9udCcqCisnZ3VpZm9udHNldCcJb3B0aW9ucy50eHQJLyonZ3VpZm9udHNldCcqCisnZ3VpZm9udHdpZGUnCW9wdGlvbnMudHh0CS8qJ2d1aWZvbnR3aWRlJyoKKydndWloZWFkcm9vbScJb3B0aW9ucy50eHQJLyonZ3VpaGVhZHJvb20nKgorJ2d1aW9wdGlvbnMnCW9wdGlvbnMudHh0CS8qJ2d1aW9wdGlvbnMnKgorJ2d1aXB0eScJb3B0aW9ucy50eHQJLyonZ3VpcHR5JyoKKydoYXJkdGFicycJdmlfZGlmZi50eHQJLyonaGFyZHRhYnMnKgorJ2hlbHBmaWxlJwlvcHRpb25zLnR4dAkvKidoZWxwZmlsZScqCisnaGVscGhlaWdodCcJb3B0aW9ucy50eHQJLyonaGVscGhlaWdodCcqCisnaGVscGxhbmcnCW9wdGlvbnMudHh0CS8qJ2hlbHBsYW5nJyoKKydoZicJb3B0aW9ucy50eHQJLyonaGYnKgorJ2hoJwlvcHRpb25zLnR4dAkvKidoaCcqCisnaGknCW9wdGlvbnMudHh0CS8qJ2hpJyoKKydoaWQnCW9wdGlvbnMudHh0CS8qJ2hpZCcqCisnaGlkZGVuJwlvcHRpb25zLnR4dAkvKidoaWRkZW4nKgorJ2hpZ2hsaWdodCcJb3B0aW9ucy50eHQJLyonaGlnaGxpZ2h0JyoKKydoaXN0b3J5JwlvcHRpb25zLnR4dAkvKidoaXN0b3J5JyoKKydoaycJb3B0aW9ucy50eHQJLyonaGsnKgorJ2hrbWFwJwlvcHRpb25zLnR4dAkvKidoa21hcCcqCisnaGttYXBwJwlvcHRpb25zLnR4dAkvKidoa21hcHAnKgorJ2hrcCcJb3B0aW9ucy50eHQJLyonaGtwJyoKKydobCcJb3B0aW9ucy50eHQJLyonaGwnKgorJ2hsZycJb3B0aW9ucy50eHQJLyonaGxnJyoKKydobHMnCW9wdGlvbnMudHh0CS8qJ2hscycqCisnaGxzZWFyY2gnCW9wdGlvbnMudHh0CS8qJ2hsc2VhcmNoJyoKKydodCcJdmlfZGlmZi50eHQJLyonaHQnKgorJ2ljJwlvcHRpb25zLnR4dAkvKidpYycqCisnaWNvbicJb3B0aW9ucy50eHQJLyonaWNvbicqCisnaWNvbnN0cmluZycJb3B0aW9ucy50eHQJLyonaWNvbnN0cmluZycqCisnaWdub3JlY2FzZScJb3B0aW9ucy50eHQJLyonaWdub3JlY2FzZScqCisnaW0nCW9wdGlvbnMudHh0CS8qJ2ltJyoKKydpbWFjdGl2YXRla2V5JwlvcHRpb25zLnR4dAkvKidpbWFjdGl2YXRla2V5JyoKKydpbWFrJwlvcHRpb25zLnR4dAkvKidpbWFrJyoKKydpbWMnCW9wdGlvbnMudHh0CS8qJ2ltYycqCisnaW1jbWRsaW5lJwlvcHRpb25zLnR4dAkvKidpbWNtZGxpbmUnKgorJ2ltZCcJb3B0aW9ucy50eHQJLyonaW1kJyoKKydpbWRpc2FibGUnCW9wdGlvbnMudHh0CS8qJ2ltZGlzYWJsZScqCisnaW1pJwlvcHRpb25zLnR4dAkvKidpbWknKgorJ2ltaW5zZXJ0JwlvcHRpb25zLnR4dAkvKidpbWluc2VydCcqCisnaW1zJwlvcHRpb25zLnR4dAkvKidpbXMnKgorJ2ltc2VhcmNoJwlvcHRpb25zLnR4dAkvKidpbXNlYXJjaCcqCisnaW5jJwlvcHRpb25zLnR4dAkvKidpbmMnKgorJ2luY2x1ZGUnCW9wdGlvbnMudHh0CS8qJ2luY2x1ZGUnKgorJ2luY2x1ZGVleHByJwlvcHRpb25zLnR4dAkvKidpbmNsdWRlZXhwcicqCisnaW5jc2VhcmNoJwlvcHRpb25zLnR4dAkvKidpbmNzZWFyY2gnKgorJ2luZGUnCW9wdGlvbnMudHh0CS8qJ2luZGUnKgorJ2luZGVudGV4cHInCW9wdGlvbnMudHh0CS8qJ2luZGVudGV4cHInKgorJ2luZGVudGtleXMnCW9wdGlvbnMudHh0CS8qJ2luZGVudGtleXMnKgorJ2luZGsnCW9wdGlvbnMudHh0CS8qJ2luZGsnKgorJ2luZXgnCW9wdGlvbnMudHh0CS8qJ2luZXgnKgorJ2luZicJb3B0aW9ucy50eHQJLyonaW5mJyoKKydpbmZlcmNhc2UnCW9wdGlvbnMudHh0CS8qJ2luZmVyY2FzZScqCisnaW5zZXJ0bW9kZScJb3B0aW9ucy50eHQJLyonaW5zZXJ0bW9kZScqCisnaXMnCW9wdGlvbnMudHh0CS8qJ2lzJyoKKydpc2YnCW9wdGlvbnMudHh0CS8qJ2lzZicqCisnaXNmbmFtZScJb3B0aW9ucy50eHQJLyonaXNmbmFtZScqCisnaXNpJwlvcHRpb25zLnR4dAkvKidpc2knKgorJ2lzaWRlbnQnCW9wdGlvbnMudHh0CS8qJ2lzaWRlbnQnKgorJ2lzaycJb3B0aW9ucy50eHQJLyonaXNrJyoKKydpc2tleXdvcmQnCW9wdGlvbnMudHh0CS8qJ2lza2V5d29yZCcqCisnaXNwJwlvcHRpb25zLnR4dAkvKidpc3AnKgorJ2lzcHJpbnQnCW9wdGlvbnMudHh0CS8qJ2lzcHJpbnQnKgorJ2pvaW5zcGFjZXMnCW9wdGlvbnMudHh0CS8qJ2pvaW5zcGFjZXMnKgorJ2pzJwlvcHRpb25zLnR4dAkvKidqcycqCisna2V5JwlvcHRpb25zLnR4dAkvKidrZXknKgorJ2tleW1hcCcJb3B0aW9ucy50eHQJLyona2V5bWFwJyoKKydrZXltb2RlbCcJb3B0aW9ucy50eHQJLyona2V5bW9kZWwnKgorJ2tleXdvcmRwcmcnCW9wdGlvbnMudHh0CS8qJ2tleXdvcmRwcmcnKgorJ2ttJwlvcHRpb25zLnR4dAkvKidrbScqCisna21wJwlvcHRpb25zLnR4dAkvKidrbXAnKgorJ2twJwlvcHRpb25zLnR4dAkvKidrcCcqCisnbGFuZ21hcCcJb3B0aW9ucy50eHQJLyonbGFuZ21hcCcqCisnbGFuZ21lbnUnCW9wdGlvbnMudHh0CS8qJ2xhbmdtZW51JyoKKydsYXN0c3RhdHVzJwlvcHRpb25zLnR4dAkvKidsYXN0c3RhdHVzJyoKKydsYXp5cmVkcmF3JwlvcHRpb25zLnR4dAkvKidsYXp5cmVkcmF3JyoKKydsYnInCW9wdGlvbnMudHh0CS8qJ2xicicqCisnbGNzJwlvcHRpb25zLnR4dAkvKidsY3MnKgorJ2xpbmVicmVhaycJb3B0aW9ucy50eHQJLyonbGluZWJyZWFrJyoKKydsaW5lcycJb3B0aW9ucy50eHQJLyonbGluZXMnKgorJ2xpbmVzcGFjZScJb3B0aW9ucy50eHQJLyonbGluZXNwYWNlJyoKKydsaXNwJwlvcHRpb25zLnR4dAkvKidsaXNwJyoKKydsaXNwd29yZHMnCW9wdGlvbnMudHh0CS8qJ2xpc3B3b3JkcycqCisnbGlzdCcJb3B0aW9ucy50eHQJLyonbGlzdCcqCisnbGlzdGNoYXJzJwlvcHRpb25zLnR4dAkvKidsaXN0Y2hhcnMnKgorJ2xtJwlvcHRpb25zLnR4dAkvKidsbScqCisnbG1hcCcJb3B0aW9ucy50eHQJLyonbG1hcCcqCisnbG9hZHBsdWdpbnMnCW9wdGlvbnMudHh0CS8qJ2xvYWRwbHVnaW5zJyoKKydscGwnCW9wdGlvbnMudHh0CS8qJ2xwbCcqCisnbHMnCW9wdGlvbnMudHh0CS8qJ2xzJyoKKydsc3AnCW9wdGlvbnMudHh0CS8qJ2xzcCcqCisnbHcnCW9wdGlvbnMudHh0CS8qJ2x3JyoKKydseicJb3B0aW9ucy50eHQJLyonbHonKgorJ21hJwlvcHRpb25zLnR4dAkvKidtYScqCisnbWFnaWMnCW9wdGlvbnMudHh0CS8qJ21hZ2ljJyoKKydtYWtlZWYnCW9wdGlvbnMudHh0CS8qJ21ha2VlZicqCisnbWFrZXByZycJb3B0aW9ucy50eHQJLyonbWFrZXByZycqCisnbWF0JwlvcHRpb25zLnR4dAkvKidtYXQnKgorJ21hdGNocGFpcnMnCW9wdGlvbnMudHh0CS8qJ21hdGNocGFpcnMnKgorJ21hdGNodGltZScJb3B0aW9ucy50eHQJLyonbWF0Y2h0aW1lJyoKKydtYXhmdW5jZGVwdGgnCW9wdGlvbnMudHh0CS8qJ21heGZ1bmNkZXB0aCcqCisnbWF4bWFwZGVwdGgnCW9wdGlvbnMudHh0CS8qJ21heG1hcGRlcHRoJyoKKydtYXhtZW0nCW9wdGlvbnMudHh0CS8qJ21heG1lbScqCisnbWF4bWVtdG90JwlvcHRpb25zLnR4dAkvKidtYXhtZW10b3QnKgorJ21lZicJb3B0aW9ucy50eHQJLyonbWVmJyoKKydtZW51aXRlbXMnCW9wdGlvbnMudHh0CS8qJ21lbnVpdGVtcycqCisnbWVzZycJdmlfZGlmZi50eHQJLyonbWVzZycqCisnbWZkJwlvcHRpb25zLnR4dAkvKidtZmQnKgorJ21oJwlvcHRpb25zLnR4dAkvKidtaCcqCisnbWlzJwlvcHRpb25zLnR4dAkvKidtaXMnKgorJ21sJwlvcHRpb25zLnR4dAkvKidtbCcqCisnbWxzJwlvcHRpb25zLnR4dAkvKidtbHMnKgorJ21tJwlvcHRpb25zLnR4dAkvKidtbScqCisnbW1kJwlvcHRpb25zLnR4dAkvKidtbWQnKgorJ21tdCcJb3B0aW9ucy50eHQJLyonbW10JyoKKydtb2QnCW9wdGlvbnMudHh0CS8qJ21vZCcqCisnbW9kZWxpbmUnCW9wdGlvbnMudHh0CS8qJ21vZGVsaW5lJyoKKydtb2RlbGluZXMnCW9wdGlvbnMudHh0CS8qJ21vZGVsaW5lcycqCisnbW9kaWZpYWJsZScJb3B0aW9ucy50eHQJLyonbW9kaWZpYWJsZScqCisnbW9kaWZpZWQnCW9wdGlvbnMudHh0CS8qJ21vZGlmaWVkJyoKKydtb3JlJwlvcHRpb25zLnR4dAkvKidtb3JlJyoKKydtb3VzZScJb3B0aW9ucy50eHQJLyonbW91c2UnKgorJ21vdXNlZicJb3B0aW9ucy50eHQJLyonbW91c2VmJyoKKydtb3VzZWZvY3VzJwlvcHRpb25zLnR4dAkvKidtb3VzZWZvY3VzJyoKKydtb3VzZWhpZGUnCW9wdGlvbnMudHh0CS8qJ21vdXNlaGlkZScqCisnbW91c2VtJwlvcHRpb25zLnR4dAkvKidtb3VzZW0nKgorJ21vdXNlbW9kZWwnCW9wdGlvbnMudHh0CS8qJ21vdXNlbW9kZWwnKgorJ21vdXNlcycJb3B0aW9ucy50eHQJLyonbW91c2VzJyoKKydtb3VzZXNoYXBlJwlvcHRpb25zLnR4dAkvKidtb3VzZXNoYXBlJyoKKydtb3VzZXQnCW9wdGlvbnMudHh0CS8qJ21vdXNldCcqCisnbW91c2V0aW1lJwlvcHRpb25zLnR4dAkvKidtb3VzZXRpbWUnKgorJ21wJwlvcHRpb25zLnR4dAkvKidtcCcqCisnbXBzJwlvcHRpb25zLnR4dAkvKidtcHMnKgorJ25mJwlvcHRpb25zLnR4dAkvKiduZicqCisnbm9hY2QnCW9wdGlvbnMudHh0CS8qJ25vYWNkJyoKKydub2FpJwlvcHRpb25zLnR4dAkvKidub2FpJyoKKydub2FrbScJb3B0aW9ucy50eHQJLyonbm9ha20nKgorJ25vYWxsb3dyZXZpbnMnCW9wdGlvbnMudHh0CS8qJ25vYWxsb3dyZXZpbnMnKgorJ25vYWx0a2V5bWFwJwlvcHRpb25zLnR4dAkvKidub2FsdGtleW1hcCcqCisnbm9hbnRpJwlvcHRpb25zLnR4dAkvKidub2FudGknKgorJ25vYW50aWFsaWFzJwlvcHRpb25zLnR4dAkvKidub2FudGlhbGlhcycqCisnbm9hcicJb3B0aW9ucy50eHQJLyonbm9hcicqCisnbm9hcmFiJwlvcHRpb25zLnR4dAkvKidub2FyYWInKgorJ25vYXJhYmljJwlvcHRpb25zLnR4dAkvKidub2FyYWJpYycqCisnbm9hcmFiaWNzaGFwZScJb3B0aW9ucy50eHQJLyonbm9hcmFiaWNzaGFwZScqCisnbm9hcmknCW9wdGlvbnMudHh0CS8qJ25vYXJpJyoKKydub2Fyc2hhcGUnCW9wdGlvbnMudHh0CS8qJ25vYXJzaGFwZScqCisnbm9hcycJdG9kby50eHQJLyonbm9hcycqCisnbm9hdXRvY2hkaXInCW9wdGlvbnMudHh0CS8qJ25vYXV0b2NoZGlyJyoKKydub2F1dG9pbmRlbnQnCW9wdGlvbnMudHh0CS8qJ25vYXV0b2luZGVudCcqCisnbm9hdXRvcmVhZCcJb3B0aW9ucy50eHQJLyonbm9hdXRvcmVhZCcqCisnbm9hdXRvc2F2ZScJdG9kby50eHQJLyonbm9hdXRvc2F2ZScqCisnbm9hdXRvd3JpdGUnCW9wdGlvbnMudHh0CS8qJ25vYXV0b3dyaXRlJyoKKydub2F1dG93cml0ZWFsbCcJb3B0aW9ucy50eHQJLyonbm9hdXRvd3JpdGVhbGwnKgorJ25vYXcnCW9wdGlvbnMudHh0CS8qJ25vYXcnKgorJ25vYXdhJwlvcHRpb25zLnR4dAkvKidub2F3YScqCisnbm9iYWNrdXAnCW9wdGlvbnMudHh0CS8qJ25vYmFja3VwJyoKKydub2JhbGxvb25ldmFsJwlvcHRpb25zLnR4dAkvKidub2JhbGxvb25ldmFsJyoKKydub2JldmFsJwlvcHRpb25zLnR4dAkvKidub2JldmFsJyoKKydub2JpbicJb3B0aW9ucy50eHQJLyonbm9iaW4nKgorJ25vYmluYXJ5JwlvcHRpb25zLnR4dAkvKidub2JpbmFyeScqCisnbm9iaW9zaycJb3B0aW9ucy50eHQJLyonbm9iaW9zaycqCisnbm9iaW9za2V5JwlvcHRpb25zLnR4dAkvKidub2Jpb3NrZXknKgorJ25vYmsnCW9wdGlvbnMudHh0CS8qJ25vYmsnKgorJ25vYmwnCW9wdGlvbnMudHh0CS8qJ25vYmwnKgorJ25vYm9tYicJb3B0aW9ucy50eHQJLyonbm9ib21iJyoKKydub2J1Zmxpc3RlZCcJb3B0aW9ucy50eHQJLyonbm9idWZsaXN0ZWQnKgorJ25vY2YnCW9wdGlvbnMudHh0CS8qJ25vY2YnKgorJ25vY2knCW9wdGlvbnMudHh0CS8qJ25vY2knKgorJ25vY2luJwlvcHRpb25zLnR4dAkvKidub2NpbicqCisnbm9jaW5kZW50JwlvcHRpb25zLnR4dAkvKidub2NpbmRlbnQnKgorJ25vY29tcGF0aWJsZScJb3B0aW9ucy50eHQJLyonbm9jb21wYXRpYmxlJyoKKydub2NvbmZpcm0nCW9wdGlvbnMudHh0CS8qJ25vY29uZmlybScqCisnbm9jb25zaycJb3B0aW9ucy50eHQJLyonbm9jb25zaycqCisnbm9jb25za2V5JwlvcHRpb25zLnR4dAkvKidub2NvbnNrZXknKgorJ25vY29weWluZGVudCcJb3B0aW9ucy50eHQJLyonbm9jb3B5aW5kZW50JyoKKydub2NwJwlvcHRpb25zLnR4dAkvKidub2NwJyoKKydub2NzY29wZXRhZycJb3B0aW9ucy50eHQJLyonbm9jc2NvcGV0YWcnKgorJ25vY3Njb3BldmVyYm9zZScJb3B0aW9ucy50eHQJLyonbm9jc2NvcGV2ZXJib3NlJyoKKydub2NzdCcJb3B0aW9ucy50eHQJLyonbm9jc3QnKgorJ25vY3N2ZXJiJwlvcHRpb25zLnR4dAkvKidub2NzdmVyYicqCisnbm9kZWNvJwlvcHRpb25zLnR4dAkvKidub2RlY28nKgorJ25vZGVsY29tYmluZScJb3B0aW9ucy50eHQJLyonbm9kZWxjb21iaW5lJyoKKydub2RnJwlvcHRpb25zLnR4dAkvKidub2RnJyoKKydub2RpZmYnCW9wdGlvbnMudHh0CS8qJ25vZGlmZicqCisnbm9kaWdyYXBoJwlvcHRpb25zLnR4dAkvKidub2RpZ3JhcGgnKgorJ25vZGlzYWJsZScJb3B0aW9ucy50eHQJLyonbm9kaXNhYmxlJyoKKydub2VhJwlvcHRpb25zLnR4dAkvKidub2VhJyoKKydub2ViJwlvcHRpb25zLnR4dAkvKidub2ViJyoKKydub2VkJwlvcHRpb25zLnR4dAkvKidub2VkJyoKKydub2VkY29tcGF0aWJsZScJb3B0aW9ucy50eHQJLyonbm9lZGNvbXBhdGlibGUnKgorJ25vZWsnCW9wdGlvbnMudHh0CS8qJ25vZWsnKgorJ25vZW5kb2ZsaW5lJwlvcHRpb25zLnR4dAkvKidub2VuZG9mbGluZScqCisnbm9lb2wnCW9wdGlvbnMudHh0CS8qJ25vZW9sJyoKKydub2VxdWFsYWx3YXlzJwlvcHRpb25zLnR4dAkvKidub2VxdWFsYWx3YXlzJyoKKydub2Vycm9yYmVsbHMnCW9wdGlvbnMudHh0CS8qJ25vZXJyb3JiZWxscycqCisnbm9lc2NrZXlzJwlvcHRpb25zLnR4dAkvKidub2VzY2tleXMnKgorJ25vZXQnCW9wdGlvbnMudHh0CS8qJ25vZXQnKgorJ25vZXgnCW9wdGlvbnMudHh0CS8qJ25vZXgnKgorJ25vZXhwYW5kdGFiJwlvcHRpb25zLnR4dAkvKidub2V4cGFuZHRhYicqCisnbm9leHJjJwlvcHRpb25zLnR4dAkvKidub2V4cmMnKgorJ25vZmVuJwlvcHRpb25zLnR4dAkvKidub2ZlbicqCisnbm9maycJb3B0aW9ucy50eHQJLyonbm9maycqCisnbm9ma21hcCcJb3B0aW9ucy50eHQJLyonbm9ma21hcCcqCisnbm9mb2xkZW5hYmxlJwlvcHRpb25zLnR4dAkvKidub2ZvbGRlbmFibGUnKgorJ25vZ2QnCW9wdGlvbnMudHh0CS8qJ25vZ2QnKgorJ25vZ2RlZmF1bHQnCW9wdGlvbnMudHh0CS8qJ25vZ2RlZmF1bHQnKgorJ25vZ3VpcHR5JwlvcHRpb25zLnR4dAkvKidub2d1aXB0eScqCisnbm9oaWQnCW9wdGlvbnMudHh0CS8qJ25vaGlkJyoKKydub2hpZGRlbicJb3B0aW9ucy50eHQJLyonbm9oaWRkZW4nKgorJ25vaGsnCW9wdGlvbnMudHh0CS8qJ25vaGsnKgorJ25vaGttYXAnCW9wdGlvbnMudHh0CS8qJ25vaGttYXAnKgorJ25vaGttYXBwJwlvcHRpb25zLnR4dAkvKidub2hrbWFwcCcqCisnbm9oa3AnCW9wdGlvbnMudHh0CS8qJ25vaGtwJyoKKydub2hscycJb3B0aW9ucy50eHQJLyonbm9obHMnKgorJ25vaGxzZWFyY2gnCW9wdGlvbnMudHh0CS8qJ25vaGxzZWFyY2gnKgorJ25vaWMnCW9wdGlvbnMudHh0CS8qJ25vaWMnKgorJ25vaWNvbicJb3B0aW9ucy50eHQJLyonbm9pY29uJyoKKydub2lnbm9yZWNhc2UnCW9wdGlvbnMudHh0CS8qJ25vaWdub3JlY2FzZScqCisnbm9pbScJb3B0aW9ucy50eHQJLyonbm9pbScqCisnbm9pbWMnCW9wdGlvbnMudHh0CS8qJ25vaW1jJyoKKydub2ltY21kbGluZScJb3B0aW9ucy50eHQJLyonbm9pbWNtZGxpbmUnKgorJ25vaW1kJwlvcHRpb25zLnR4dAkvKidub2ltZCcqCisnbm9pbmNzZWFyY2gnCW9wdGlvbnMudHh0CS8qJ25vaW5jc2VhcmNoJyoKKydub2luZicJb3B0aW9ucy50eHQJLyonbm9pbmYnKgorJ25vaW5mZXJjYXNlJwlvcHRpb25zLnR4dAkvKidub2luZmVyY2FzZScqCisnbm9pbnNlcnRtb2RlJwlvcHRpb25zLnR4dAkvKidub2luc2VydG1vZGUnKgorJ25vaXMnCW9wdGlvbnMudHh0CS8qJ25vaXMnKgorJ25vam9pbnNwYWNlcycJb3B0aW9ucy50eHQJLyonbm9qb2luc3BhY2VzJyoKKydub2pzJwlvcHRpb25zLnR4dAkvKidub2pzJyoKKydub2xhenlyZWRyYXcnCW9wdGlvbnMudHh0CS8qJ25vbGF6eXJlZHJhdycqCisnbm9sYnInCW9wdGlvbnMudHh0CS8qJ25vbGJyJyoKKydub2xpbmVicmVhaycJb3B0aW9ucy50eHQJLyonbm9saW5lYnJlYWsnKgorJ25vbGlzcCcJb3B0aW9ucy50eHQJLyonbm9saXNwJyoKKydub2xpc3QnCW9wdGlvbnMudHh0CS8qJ25vbGlzdCcqCisnbm9sb2FkcGx1Z2lucycJb3B0aW9ucy50eHQJLyonbm9sb2FkcGx1Z2lucycqCisnbm9scGwnCW9wdGlvbnMudHh0CS8qJ25vbHBsJyoKKydub2x6JwlvcHRpb25zLnR4dAkvKidub2x6JyoKKydub21hJwlvcHRpb25zLnR4dAkvKidub21hJyoKKydub21hZ2ljJwlvcHRpb25zLnR4dAkvKidub21hZ2ljJyoKKydub21oJwlvcHRpb25zLnR4dAkvKidub21oJyoKKydub21sJwlvcHRpb25zLnR4dAkvKidub21sJyoKKydub21vZCcJb3B0aW9ucy50eHQJLyonbm9tb2QnKgorJ25vbW9kZWxpbmUnCW9wdGlvbnMudHh0CS8qJ25vbW9kZWxpbmUnKgorJ25vbW9kaWZpYWJsZScJb3B0aW9ucy50eHQJLyonbm9tb2RpZmlhYmxlJyoKKydub21vZGlmaWVkJwlvcHRpb25zLnR4dAkvKidub21vZGlmaWVkJyoKKydub21vcmUnCW9wdGlvbnMudHh0CS8qJ25vbW9yZScqCisnbm9tb3VzZWYnCW9wdGlvbnMudHh0CS8qJ25vbW91c2VmJyoKKydub21vdXNlZm9jdXMnCW9wdGlvbnMudHh0CS8qJ25vbW91c2Vmb2N1cycqCisnbm9tb3VzZWhpZGUnCW9wdGlvbnMudHh0CS8qJ25vbW91c2VoaWRlJyoKKydub251JwlvcHRpb25zLnR4dAkvKidub251JyoKKydub251bWJlcicJb3B0aW9ucy50eHQJLyonbm9udW1iZXInKgorJ25vcGFzdGUnCW9wdGlvbnMudHh0CS8qJ25vcGFzdGUnKgorJ25vcGknCW9wdGlvbnMudHh0CS8qJ25vcGknKgorJ25vcHJlc2VydmVpbmRlbnQnCW9wdGlvbnMudHh0CS8qJ25vcHJlc2VydmVpbmRlbnQnKgorJ25vcHJldmlld3dpbmRvdycJb3B0aW9ucy50eHQJLyonbm9wcmV2aWV3d2luZG93JyoKKydub3B2dycJb3B0aW9ucy50eHQJLyonbm9wdncnKgorJ25vcmVhZG9ubHknCW9wdGlvbnMudHh0CS8qJ25vcmVhZG9ubHknKgorJ25vcmVtYXAnCW9wdGlvbnMudHh0CS8qJ25vcmVtYXAnKgorJ25vcmVzdG9yZXNjcmVlbicJb3B0aW9ucy50eHQJLyonbm9yZXN0b3Jlc2NyZWVuJyoKKydub3JldmlucycJb3B0aW9ucy50eHQJLyonbm9yZXZpbnMnKgorJ25vcmknCW9wdGlvbnMudHh0CS8qJ25vcmknKgorJ25vcmlnaHRsZWZ0JwlvcHRpb25zLnR4dAkvKidub3JpZ2h0bGVmdCcqCisnbm9yaWdodGxlZnRjbWQnCW9wdGlvbnMudHh0CS8qJ25vcmlnaHRsZWZ0Y21kJyoKKydub3JsJwlvcHRpb25zLnR4dAkvKidub3JsJyoKKydub3JsYycJb3B0aW9ucy50eHQJLyonbm9ybGMnKgorJ25vcm8nCW9wdGlvbnMudHh0CS8qJ25vcm8nKgorJ25vcnMnCW9wdGlvbnMudHh0CS8qJ25vcnMnKgorJ25vcnUnCW9wdGlvbnMudHh0CS8qJ25vcnUnKgorJ25vcnVsZXInCW9wdGlvbnMudHh0CS8qJ25vcnVsZXInKgorJ25vc2InCW9wdGlvbnMudHh0CS8qJ25vc2InKgorJ25vc2MnCW9wdGlvbnMudHh0CS8qJ25vc2MnKgorJ25vc2NiJwlvcHRpb25zLnR4dAkvKidub3NjYicqCisnbm9zY3JvbGxiaW5kJwlvcHRpb25zLnR4dAkvKidub3Njcm9sbGJpbmQnKgorJ25vc2NzJwlvcHRpb25zLnR4dAkvKidub3NjcycqCisnbm9zZWN1cmUnCW9wdGlvbnMudHh0CS8qJ25vc2VjdXJlJyoKKydub3NmdCcJb3B0aW9ucy50eHQJLyonbm9zZnQnKgorJ25vc2hlbGxzbGFzaCcJb3B0aW9ucy50eHQJLyonbm9zaGVsbHNsYXNoJyoKKydub3NoaWZ0cm91bmQnCW9wdGlvbnMudHh0CS8qJ25vc2hpZnRyb3VuZCcqCisnbm9zaG9ydG5hbWUnCW9wdGlvbnMudHh0CS8qJ25vc2hvcnRuYW1lJyoKKydub3Nob3djbWQnCW9wdGlvbnMudHh0CS8qJ25vc2hvd2NtZCcqCisnbm9zaG93ZnVsbHRhZycJb3B0aW9ucy50eHQJLyonbm9zaG93ZnVsbHRhZycqCisnbm9zaG93bWF0Y2gnCW9wdGlvbnMudHh0CS8qJ25vc2hvd21hdGNoJyoKKydub3Nob3dtb2RlJwlvcHRpb25zLnR4dAkvKidub3Nob3dtb2RlJyoKKydub3NpJwlvcHRpb25zLnR4dAkvKidub3NpJyoKKydub3NtJwlvcHRpb25zLnR4dAkvKidub3NtJyoKKydub3NtYXJ0Y2FzZScJb3B0aW9ucy50eHQJLyonbm9zbWFydGNhc2UnKgorJ25vc21hcnRpbmRlbnQnCW9wdGlvbnMudHh0CS8qJ25vc21hcnRpbmRlbnQnKgorJ25vc21hcnR0YWInCW9wdGlvbnMudHh0CS8qJ25vc21hcnR0YWInKgorJ25vc21kJwlvcHRpb25zLnR4dAkvKidub3NtZCcqCisnbm9zbicJb3B0aW9ucy50eHQJLyonbm9zbicqCisnbm9zb2wnCW9wdGlvbnMudHh0CS8qJ25vc29sJyoKKydub3NwbGl0YmVsb3cnCW9wdGlvbnMudHh0CS8qJ25vc3BsaXRiZWxvdycqCisnbm9zcGxpdHJpZ2h0JwlvcHRpb25zLnR4dAkvKidub3NwbGl0cmlnaHQnKgorJ25vc3ByJwlvcHRpb25zLnR4dAkvKidub3NwcicqCisnbm9zcicJb3B0aW9ucy50eHQJLyonbm9zcicqCisnbm9zc2wnCW9wdGlvbnMudHh0CS8qJ25vc3NsJyoKKydub3N0YScJb3B0aW9ucy50eHQJLyonbm9zdGEnKgorJ25vc3RhcnRvZmxpbmUnCW9wdGlvbnMudHh0CS8qJ25vc3RhcnRvZmxpbmUnKgorJ25vc3dhcGZpbGUnCW9wdGlvbnMudHh0CS8qJ25vc3dhcGZpbGUnKgorJ25vc3dmJwlvcHRpb25zLnR4dAkvKidub3N3ZicqCisnbm90YScJb3B0aW9ucy50eHQJLyonbm90YScqCisnbm90YWdic2VhcmNoJwlvcHRpb25zLnR4dAkvKidub3RhZ2JzZWFyY2gnKgorJ25vdGFncmVsYXRpdmUnCW9wdGlvbnMudHh0CS8qJ25vdGFncmVsYXRpdmUnKgorJ25vdGFnc3RhY2snCW9wdGlvbnMudHh0CS8qJ25vdGFnc3RhY2snKgorJ25vdGJpJwlvcHRpb25zLnR4dAkvKidub3RiaScqCisnbm90YmlkaScJb3B0aW9ucy50eHQJLyonbm90YmlkaScqCisnbm90YnMnCW9wdGlvbnMudHh0CS8qJ25vdGJzJyoKKydub3Rlcm1iaWRpJwlvcHRpb25zLnR4dAkvKidub3Rlcm1iaWRpJyoKKydub3RlcnNlJwlvcHRpb25zLnR4dAkvKidub3RlcnNlJyoKKydub3RleHRhdXRvJwlvcHRpb25zLnR4dAkvKidub3RleHRhdXRvJyoKKydub3RleHRtb2RlJwlvcHRpb25zLnR4dAkvKidub3RleHRtb2RlJyoKKydub3RmJwlvcHRpb25zLnR4dAkvKidub3RmJyoKKydub3Rnc3QnCW9wdGlvbnMudHh0CS8qJ25vdGdzdCcqCisnbm90aWxkZW9wJwlvcHRpb25zLnR4dAkvKidub3RpbGRlb3AnKgorJ25vdGltZW91dCcJb3B0aW9ucy50eHQJLyonbm90aW1lb3V0JyoKKydub3RpdGxlJwlvcHRpb25zLnR4dAkvKidub3RpdGxlJyoKKydub3RvJwlvcHRpb25zLnR4dAkvKidub3RvJyoKKydub3RvcCcJb3B0aW9ucy50eHQJLyonbm90b3AnKgorJ25vdHInCW9wdGlvbnMudHh0CS8qJ25vdHInKgorJ25vdHRpbWVvdXQnCW9wdGlvbnMudHh0CS8qJ25vdHRpbWVvdXQnKgorJ25vdHR5YnVpbHRpbicJb3B0aW9ucy50eHQJLyonbm90dHlidWlsdGluJyoKKydub3R0eWZhc3QnCW9wdGlvbnMudHh0CS8qJ25vdHR5ZmFzdCcqCisnbm90eCcJb3B0aW9ucy50eHQJLyonbm90eCcqCisnbm92YicJb3B0aW9ucy50eHQJLyonbm92YicqCisnbm92aWNlJwl2aV9kaWZmLnR4dAkvKidub3ZpY2UnKgorJ25vdmlzdWFsYmVsbCcJb3B0aW9ucy50eHQJLyonbm92aXN1YWxiZWxsJyoKKydub3dhJwlvcHRpb25zLnR4dAkvKidub3dhJyoKKydub3dhcm4nCW9wdGlvbnMudHh0CS8qJ25vd2FybicqCisnbm93YicJb3B0aW9ucy50eHQJLyonbm93YicqCisnbm93ZWlyZGludmVydCcJb3B0aW9ucy50eHQJLyonbm93ZWlyZGludmVydCcqCisnbm93ZmgnCW9wdGlvbnMudHh0CS8qJ25vd2ZoJyoKKydub3dpbGRtZW51JwlvcHRpb25zLnR4dAkvKidub3dpbGRtZW51JyoKKydub3dpbmZpeGhlaWdodCcJb3B0aW9ucy50eHQJLyonbm93aW5maXhoZWlnaHQnKgorJ25vd2l2JwlvcHRpb25zLnR4dAkvKidub3dpdicqCisnbm93bW51JwlvcHRpb25zLnR4dAkvKidub3dtbnUnKgorJ25vd3JhcCcJb3B0aW9ucy50eHQJLyonbm93cmFwJyoKKydub3dyYXBzY2FuJwlvcHRpb25zLnR4dAkvKidub3dyYXBzY2FuJyoKKydub3dyaXRlJwlvcHRpb25zLnR4dAkvKidub3dyaXRlJyoKKydub3dyaXRlYW55JwlvcHRpb25zLnR4dAkvKidub3dyaXRlYW55JyoKKydub3dyaXRlYmFja3VwJwlvcHRpb25zLnR4dAkvKidub3dyaXRlYmFja3VwJyoKKydub3dzJwlvcHRpb25zLnR4dAkvKidub3dzJyoKKyducmZvcm1hdHMnCW9wdGlvbnMudHh0CS8qJ25yZm9ybWF0cycqCisnbnUnCW9wdGlvbnMudHh0CS8qJ251JyoKKydudW1iZXInCW9wdGlvbnMudHh0CS8qJ251bWJlcicqCisnb2Z0JwlvcHRpb25zLnR4dAkvKidvZnQnKgorJ29wJwl2aV9kaWZmLnR4dAkvKidvcCcqCisnb3BlbicJdmlfZGlmZi50eHQJLyonb3BlbicqCisnb3B0aW1pemUnCXZpX2RpZmYudHh0CS8qJ29wdGltaXplJyoKKydvcHRpb24nCWludHJvLnR4dAkvKidvcHRpb24nKgorJ29zZmlsZXR5cGUnCW9wdGlvbnMudHh0CS8qJ29zZmlsZXR5cGUnKgorJ3BhJwlvcHRpb25zLnR4dAkvKidwYScqCisncGFyYScJb3B0aW9ucy50eHQJLyoncGFyYScqCisncGFyYWdyYXBocycJb3B0aW9ucy50eHQJLyoncGFyYWdyYXBocycqCisncGFzdGUnCW9wdGlvbnMudHh0CS8qJ3Bhc3RlJyoKKydwYXN0ZXRvZ2dsZScJb3B0aW9ucy50eHQJLyoncGFzdGV0b2dnbGUnKgorJ3BhdGNoZXhwcicJb3B0aW9ucy50eHQJLyoncGF0Y2hleHByJyoKKydwYXRjaG1vZGUnCW9wdGlvbnMudHh0CS8qJ3BhdGNobW9kZScqCisncGF0aCcJb3B0aW9ucy50eHQJLyoncGF0aCcqCisncGRldicJb3B0aW9ucy50eHQJLyoncGRldicqCisncGVuYycJb3B0aW9ucy50eHQJLyoncGVuYycqCisncGV4JwlvcHRpb25zLnR4dAkvKidwZXgnKgorJ3BleHByJwlvcHRpb25zLnR4dAkvKidwZXhwcicqCisncGZuJwlvcHRpb25zLnR4dAkvKidwZm4nKgorJ3BoZWFkZXInCW9wdGlvbnMudHh0CS8qJ3BoZWFkZXInKgorJ3BpJwlvcHRpb25zLnR4dAkvKidwaScqCisncG0nCW9wdGlvbnMudHh0CS8qJ3BtJyoKKydwb3B0JwlvcHRpb25zLnR4dAkvKidwb3B0JyoKKydwcmVzZXJ2ZWluZGVudCcJb3B0aW9ucy50eHQJLyoncHJlc2VydmVpbmRlbnQnKgorJ3ByZXZpZXdoZWlnaHQnCW9wdGlvbnMudHh0CS8qJ3ByZXZpZXdoZWlnaHQnKgorJ3ByZXZpZXd3aW5kb3cnCW9wdGlvbnMudHh0CS8qJ3ByZXZpZXd3aW5kb3cnKgorJ3ByaW50ZGV2aWNlJwlvcHRpb25zLnR4dAkvKidwcmludGRldmljZScqCisncHJpbnRlbmNvZGluZycJb3B0aW9ucy50eHQJLyoncHJpbnRlbmNvZGluZycqCisncHJpbnRleHByJwlvcHRpb25zLnR4dAkvKidwcmludGV4cHInKgorJ3ByaW50Zm9udCcJb3B0aW9ucy50eHQJLyoncHJpbnRmb250JyoKKydwcmludGhlYWRlcicJb3B0aW9ucy50eHQJLyoncHJpbnRoZWFkZXInKgorJ3ByaW50b3B0aW9ucycJb3B0aW9ucy50eHQJLyoncHJpbnRvcHRpb25zJyoKKydwcm9tcHQnCXZpX2RpZmYudHh0CS8qJ3Byb21wdCcqCisncHQnCW9wdGlvbnMudHh0CS8qJ3B0JyoKKydwdmgnCW9wdGlvbnMudHh0CS8qJ3B2aCcqCisncHZ3JwlvcHRpb25zLnR4dAkvKidwdncnKgorJ3F1b3RlCW1vdGlvbi50eHQJLyoncXVvdGUqCisncmVhZG9ubHknCW9wdGlvbnMudHh0CS8qJ3JlYWRvbmx5JyoKKydyZWRyYXcnCXZpX2RpZmYudHh0CS8qJ3JlZHJhdycqCisncmVtYXAnCW9wdGlvbnMudHh0CS8qJ3JlbWFwJyoKKydyZXBvcnQnCW9wdGlvbnMudHh0CS8qJ3JlcG9ydCcqCisncmVzdG9yZXNjcmVlbicJb3B0aW9ucy50eHQJLyoncmVzdG9yZXNjcmVlbicqCisncmV2aW5zJwlvcHRpb25zLnR4dAkvKidyZXZpbnMnKgorJ3JpJwlvcHRpb25zLnR4dAkvKidyaScqCisncmlnaHRsZWZ0JwlvcHRpb25zLnR4dAkvKidyaWdodGxlZnQnKgorJ3JpZ2h0bGVmdGNtZCcJb3B0aW9ucy50eHQJLyoncmlnaHRsZWZ0Y21kJyoKKydybCcJb3B0aW9ucy50eHQJLyoncmwnKgorJ3JsYycJb3B0aW9ucy50eHQJLyoncmxjJyoKKydybycJb3B0aW9ucy50eHQJLyoncm8nKgorJ3JzJwlvcHRpb25zLnR4dAkvKidycycqCisncnRwJwlvcHRpb25zLnR4dAkvKidydHAnKgorJ3J1JwlvcHRpb25zLnR4dAkvKidydScqCisncnVmJwlvcHRpb25zLnR4dAkvKidydWYnKgorJ3J1bGVyJwlvcHRpb25zLnR4dAkvKidydWxlcicqCisncnVsZXJmb3JtYXQnCW9wdGlvbnMudHh0CS8qJ3J1bGVyZm9ybWF0JyoKKydydW50aW1lcGF0aCcJb3B0aW9ucy50eHQJLyoncnVudGltZXBhdGgnKgorJ3NiJwlvcHRpb25zLnR4dAkvKidzYicqCisnc2JvJwlvcHRpb25zLnR4dAkvKidzYm8nKgorJ3NicicJb3B0aW9ucy50eHQJLyonc2JyJyoKKydzYycJb3B0aW9ucy50eHQJLyonc2MnKgorJ3NjYicJb3B0aW9ucy50eHQJLyonc2NiJyoKKydzY3InCW9wdGlvbnMudHh0CS8qJ3NjcicqCisnc2Nyb2xsJwlvcHRpb25zLnR4dAkvKidzY3JvbGwnKgorJ3Njcm9sbGJpbmQnCW9wdGlvbnMudHh0CS8qJ3Njcm9sbGJpbmQnKgorJ3Njcm9sbGp1bXAnCW9wdGlvbnMudHh0CS8qJ3Njcm9sbGp1bXAnKgorJ3Njcm9sbG9mZicJb3B0aW9ucy50eHQJLyonc2Nyb2xsb2ZmJyoKKydzY3JvbGxvcHQnCW9wdGlvbnMudHh0CS8qJ3Njcm9sbG9wdCcqCisnc2NzJwlvcHRpb25zLnR4dAkvKidzY3MnKgorJ3NlY3QnCW9wdGlvbnMudHh0CS8qJ3NlY3QnKgorJ3NlY3Rpb25zJwlvcHRpb25zLnR4dAkvKidzZWN0aW9ucycqCisnc2VjdXJlJwlvcHRpb25zLnR4dAkvKidzZWN1cmUnKgorJ3NlbCcJb3B0aW9ucy50eHQJLyonc2VsJyoKKydzZWxlY3Rpb24nCW9wdGlvbnMudHh0CS8qJ3NlbGVjdGlvbicqCisnc2VsZWN0bW9kZScJb3B0aW9ucy50eHQJLyonc2VsZWN0bW9kZScqCisnc2Vzc2lvbm9wdGlvbnMnCW9wdGlvbnMudHh0CS8qJ3Nlc3Npb25vcHRpb25zJyoKKydzZnQnCW9wdGlvbnMudHh0CS8qJ3NmdCcqCisnc2gnCW9wdGlvbnMudHh0CS8qJ3NoJyoKKydzaGNmJwlvcHRpb25zLnR4dAkvKidzaGNmJyoKKydzaGVsbCcJb3B0aW9ucy50eHQJLyonc2hlbGwnKgorJ3NoZWxsY21kZmxhZycJb3B0aW9ucy50eHQJLyonc2hlbGxjbWRmbGFnJyoKKydzaGVsbHBpcGUnCW9wdGlvbnMudHh0CS8qJ3NoZWxscGlwZScqCisnc2hlbGxxdW90ZScJb3B0aW9ucy50eHQJLyonc2hlbGxxdW90ZScqCisnc2hlbGxyZWRpcicJb3B0aW9ucy50eHQJLyonc2hlbGxyZWRpcicqCisnc2hlbGxzbGFzaCcJb3B0aW9ucy50eHQJLyonc2hlbGxzbGFzaCcqCisnc2hlbGx0eXBlJwlvcHRpb25zLnR4dAkvKidzaGVsbHR5cGUnKgorJ3NoZWxseHF1b3RlJwlvcHRpb25zLnR4dAkvKidzaGVsbHhxdW90ZScqCisnc2hpZnRyb3VuZCcJb3B0aW9ucy50eHQJLyonc2hpZnRyb3VuZCcqCisnc2hpZnR3aWR0aCcJb3B0aW9ucy50eHQJLyonc2hpZnR3aWR0aCcqCisnc2htJwlvcHRpb25zLnR4dAkvKidzaG0nKgorJ3Nob3J0bWVzcycJb3B0aW9ucy50eHQJLyonc2hvcnRtZXNzJyoKKydzaG9ydG5hbWUnCW9wdGlvbnMudHh0CS8qJ3Nob3J0bmFtZScqCisnc2hvd2JyZWFrJwlvcHRpb25zLnR4dAkvKidzaG93YnJlYWsnKgorJ3Nob3djbWQnCW9wdGlvbnMudHh0CS8qJ3Nob3djbWQnKgorJ3Nob3dmdWxsdGFnJwlvcHRpb25zLnR4dAkvKidzaG93ZnVsbHRhZycqCisnc2hvd21hdGNoJwlvcHRpb25zLnR4dAkvKidzaG93bWF0Y2gnKgorJ3Nob3dtb2RlJwlvcHRpb25zLnR4dAkvKidzaG93bW9kZScqCisnc2hxJwlvcHRpb25zLnR4dAkvKidzaHEnKgorJ3NpJwlvcHRpb25zLnR4dAkvKidzaScqCisnc2lkZXNjcm9sbCcJb3B0aW9ucy50eHQJLyonc2lkZXNjcm9sbCcqCisnc2lkZXNjcm9sbG9mZicJb3B0aW9ucy50eHQJLyonc2lkZXNjcm9sbG9mZicqCisnc2lzbycJb3B0aW9ucy50eHQJLyonc2lzbycqCisnc2onCW9wdGlvbnMudHh0CS8qJ3NqJyoKKydzbG0nCW9wdGlvbnMudHh0CS8qJ3NsbScqCisnc2xvdycJdmlfZGlmZi50eHQJLyonc2xvdycqCisnc2xvd29wZW4nCXZpX2RpZmYudHh0CS8qJ3Nsb3dvcGVuJyoKKydzbScJb3B0aW9ucy50eHQJLyonc20nKgorJ3NtYXJ0Y2FzZScJb3B0aW9ucy50eHQJLyonc21hcnRjYXNlJyoKKydzbWFydGluZGVudCcJb3B0aW9ucy50eHQJLyonc21hcnRpbmRlbnQnKgorJ3NtYXJ0dGFiJwlvcHRpb25zLnR4dAkvKidzbWFydHRhYicqCisnc21kJwlvcHRpb25zLnR4dAkvKidzbWQnKgorJ3NuJwlvcHRpb25zLnR4dAkvKidzbicqCisnc28nCW9wdGlvbnMudHh0CS8qJ3NvJyoKKydzb2Z0dGFic3RvcCcJb3B0aW9ucy50eHQJLyonc29mdHRhYnN0b3AnKgorJ3NvbCcJb3B0aW9ucy50eHQJLyonc29sJyoKKydzb3VyY2VhbnknCXZpX2RpZmYudHh0CS8qJ3NvdXJjZWFueScqCisnc3AnCW9wdGlvbnMudHh0CS8qJ3NwJyoKKydzcGxpdGJlbG93JwlvcHRpb25zLnR4dAkvKidzcGxpdGJlbG93JyoKKydzcGxpdHJpZ2h0JwlvcHRpb25zLnR4dAkvKidzcGxpdHJpZ2h0JyoKKydzcHInCW9wdGlvbnMudHh0CS8qJ3NwcicqCisnc3InCW9wdGlvbnMudHh0CS8qJ3NyJyoKKydzcnInCW9wdGlvbnMudHh0CS8qJ3NycicqCisnc3MnCW9wdGlvbnMudHh0CS8qJ3NzJyoKKydzc2wnCW9wdGlvbnMudHh0CS8qJ3NzbCcqCisnc3NvcCcJb3B0aW9ucy50eHQJLyonc3NvcCcqCisnc3QnCW9wdGlvbnMudHh0CS8qJ3N0JyoKKydzdGEnCW9wdGlvbnMudHh0CS8qJ3N0YScqCisnc3RhcnRvZmxpbmUnCW9wdGlvbnMudHh0CS8qJ3N0YXJ0b2ZsaW5lJyoKKydzdGF0dXNsaW5lJwlvcHRpb25zLnR4dAkvKidzdGF0dXNsaW5lJyoKKydzdGwnCW9wdGlvbnMudHh0CS8qJ3N0bCcqCisnc3RzJwlvcHRpb25zLnR4dAkvKidzdHMnKgorJ3N1JwlvcHRpb25zLnR4dAkvKidzdScqCisnc3VhJwlvcHRpb25zLnR4dAkvKidzdWEnKgorJ3N1ZmZpeGVzJwlvcHRpb25zLnR4dAkvKidzdWZmaXhlcycqCisnc3VmZml4ZXNhZGQnCW9wdGlvbnMudHh0CS8qJ3N1ZmZpeGVzYWRkJyoKKydzdycJb3B0aW9ucy50eHQJLyonc3cnKgorJ3N3YXBmaWxlJwlvcHRpb25zLnR4dAkvKidzd2FwZmlsZScqCisnc3dhcHN5bmMnCW9wdGlvbnMudHh0CS8qJ3N3YXBzeW5jJyoKKydzd2InCW9wdGlvbnMudHh0CS8qJ3N3YicqCisnc3dmJwlvcHRpb25zLnR4dAkvKidzd2YnKgorJ3N3aXRjaGJ1ZicJb3B0aW9ucy50eHQJLyonc3dpdGNoYnVmJyoKKydzd3MnCW9wdGlvbnMudHh0CS8qJ3N3cycqCisnc3hxJwlvcHRpb25zLnR4dAkvKidzeHEnKgorJ3N5bicJb3B0aW9ucy50eHQJLyonc3luJyoKKydzeW50YXgnCW9wdGlvbnMudHh0CS8qJ3N5bnRheCcqCisndF8jMicJdGVybS50eHQJLyondF8jMicqCisndF8jNCcJdGVybS50eHQJLyondF8jNCcqCisndF8lMScJdGVybS50eHQJLyondF8lMScqCisndF8laScJdGVybS50eHQJLyondF8laScqCisndF8mOCcJdGVybS50eHQJLyondF8mOCcqCisndF9ANycJdGVybS50eHQJLyondF9ANycqCisndF9BQicJdGVybS50eHQJLyondF9BQicqCisndF9BRicJdGVybS50eHQJLyondF9BRicqCisndF9BTCcJdGVybS50eHQJLyondF9BTCcqCisndF9DUycJdGVybS50eHQJLyondF9DUycqCisndF9DVicJdGVybS50eHQJLyondF9DVicqCisndF9DbycJdGVybS50eHQJLyondF9DbycqCisndF9ETCcJdGVybS50eHQJLyondF9ETCcqCisndF9GMScJdGVybS50eHQJLyondF9GMScqCisndF9GMicJdGVybS50eHQJLyondF9GMicqCisndF9GMycJdGVybS50eHQJLyondF9GMycqCisndF9GNCcJdGVybS50eHQJLyondF9GNCcqCisndF9GNScJdGVybS50eHQJLyondF9GNScqCisndF9GNicJdGVybS50eHQJLyondF9GNicqCisndF9GNycJdGVybS50eHQJLyondF9GNycqCisndF9GOCcJdGVybS50eHQJLyondF9GOCcqCisndF9GOScJdGVybS50eHQJLyondF9GOScqCisndF9JRScJdGVybS50eHQJLyondF9JRScqCisndF9JUycJdGVybS50eHQJLyondF9JUycqCisndF9LMScJdGVybS50eHQJLyondF9LMScqCisndF9LMycJdGVybS50eHQJLyondF9LMycqCisndF9LNCcJdGVybS50eHQJLyondF9LNCcqCisndF9LNScJdGVybS50eHQJLyondF9LNScqCisndF9LNicJdGVybS50eHQJLyondF9LNicqCisndF9LNycJdGVybS50eHQJLyondF9LNycqCisndF9LOCcJdGVybS50eHQJLyondF9LOCcqCisndF9LOScJdGVybS50eHQJLyondF9LOScqCisndF9LQScJdGVybS50eHQJLyondF9LQScqCisndF9LQicJdGVybS50eHQJLyondF9LQicqCisndF9LQycJdGVybS50eHQJLyondF9LQycqCisndF9LRCcJdGVybS50eHQJLyondF9LRCcqCisndF9LRScJdGVybS50eHQJLyondF9LRScqCisndF9LRicJdGVybS50eHQJLyondF9LRicqCisndF9LRycJdGVybS50eHQJLyondF9LRycqCisndF9LSCcJdGVybS50eHQJLyondF9LSCcqCisndF9LSScJdGVybS50eHQJLyondF9LSScqCisndF9LSicJdGVybS50eHQJLyondF9LSicqCisndF9LSycJdGVybS50eHQJLyondF9LSycqCisndF9LTCcJdGVybS50eHQJLyondF9LTCcqCisndF9SSScJdGVybS50eHQJLyondF9SSScqCisndF9SVicJdGVybS50eHQJLyondF9SVicqCisndF9TYicJdGVybS50eHQJLyondF9TYicqCisndF9TZicJdGVybS50eHQJLyondF9TZicqCisndF9XUCcJdGVybS50eHQJLyondF9XUCcqCisndF9XUycJdGVybS50eHQJLyondF9XUycqCisndF9aSCcJdGVybS50eHQJLyondF9aSCcqCisndF9aUicJdGVybS50eHQJLyondF9aUicqCisndF9hbCcJdGVybS50eHQJLyondF9hbCcqCisndF9iYycJdGVybS50eHQJLyondF9iYycqCisndF9jZCcJdGVybS50eHQJLyondF9jZCcqCisndF9jZScJdGVybS50eHQJLyondF9jZScqCisndF9jbCcJdGVybS50eHQJLyondF9jbCcqCisndF9jbScJdGVybS50eHQJLyondF9jbScqCisndF9jcycJdGVybS50eHQJLyondF9jcycqCisndF9kYScJdGVybS50eHQJLyondF9kYScqCisndF9kYicJdGVybS50eHQJLyondF9kYicqCisndF9kbCcJdGVybS50eHQJLyondF9kbCcqCisndF9mcycJdGVybS50eHQJLyondF9mcycqCisndF9rMScJdGVybS50eHQJLyondF9rMScqCisndF9rMicJdGVybS50eHQJLyondF9rMicqCisndF9rMycJdGVybS50eHQJLyondF9rMycqCisndF9rNCcJdGVybS50eHQJLyondF9rNCcqCisndF9rNScJdGVybS50eHQJLyondF9rNScqCisndF9rNicJdGVybS50eHQJLyondF9rNicqCisndF9rNycJdGVybS50eHQJLyondF9rNycqCisndF9rOCcJdGVybS50eHQJLyondF9rOCcqCisndF9rOScJdGVybS50eHQJLyondF9rOScqCisndF9rOycJdGVybS50eHQJLyondF9rOycqCisndF9rQicJdGVybS50eHQJLyondF9rQicqCisndF9rRCcJdGVybS50eHQJLyondF9rRCcqCisndF9rSScJdGVybS50eHQJLyondF9rSScqCisndF9rTicJdGVybS50eHQJLyondF9rTicqCisndF9rUCcJdGVybS50eHQJLyondF9rUCcqCisndF9rYicJdGVybS50eHQJLyondF9rYicqCisndF9rZCcJdGVybS50eHQJLyondF9rZCcqCisndF9rZScJdGVybS50eHQJLyondF9rZScqCisndF9raCcJdGVybS50eHQJLyondF9raCcqCisndF9rbCcJdGVybS50eHQJLyondF9rbCcqCisndF9rcicJdGVybS50eHQJLyondF9rcicqCisndF9rcycJdGVybS50eHQJLyondF9rcycqCisndF9rdScJdGVybS50eHQJLyondF9rdScqCisndF9sZScJdGVybS50eHQJLyondF9sZScqCisndF9tYicJdGVybS50eHQJLyondF9tYicqCisndF9tZCcJdGVybS50eHQJLyondF9tZCcqCisndF9tZScJdGVybS50eHQJLyondF9tZScqCisndF9tcicJdGVybS50eHQJLyondF9tcicqCisndF9tcycJdGVybS50eHQJLyondF9tcycqCisndF9uZCcJdGVybS50eHQJLyondF9uZCcqCisndF9vcCcJdGVybS50eHQJLyondF9vcCcqCisndF9zZScJdGVybS50eHQJLyondF9zZScqCisndF9zbycJdGVybS50eHQJLyondF9zbycqCisndF9zcicJdGVybS50eHQJLyondF9zcicqCisndF9zdGFyNycJdGVybS50eHQJLyondF9zdGFyNycqCisndF90ZScJdGVybS50eHQJLyondF90ZScqCisndF90aScJdGVybS50eHQJLyondF90aScqCisndF90cycJdGVybS50eHQJLyondF90cycqCisndF91ZScJdGVybS50eHQJLyondF91ZScqCisndF91cycJdGVybS50eHQJLyondF91cycqCisndF91dCcJdGVybS50eHQJLyondF91dCcqCisndF92YicJdGVybS50eHQJLyondF92YicqCisndF92ZScJdGVybS50eHQJLyondF92ZScqCisndF92aScJdGVybS50eHQJLyondF92aScqCisndF92cycJdGVybS50eHQJLyondF92cycqCisndF94cycJdGVybS50eHQJLyondF94cycqCisndGEnCW9wdGlvbnMudHh0CS8qJ3RhJyoKKyd0YWJzdG9wJwlvcHRpb25zLnR4dAkvKid0YWJzdG9wJyoKKyd0YWcnCW9wdGlvbnMudHh0CS8qJ3RhZycqCisndGFnYnNlYXJjaCcJb3B0aW9ucy50eHQJLyondGFnYnNlYXJjaCcqCisndGFnbGVuZ3RoJwlvcHRpb25zLnR4dAkvKid0YWdsZW5ndGgnKgorJ3RhZ3JlbGF0aXZlJwlvcHRpb25zLnR4dAkvKid0YWdyZWxhdGl2ZScqCisndGFncycJb3B0aW9ucy50eHQJLyondGFncycqCisndGFnc3RhY2snCW9wdGlvbnMudHh0CS8qJ3RhZ3N0YWNrJyoKKyd0YicJb3B0aW9ucy50eHQJLyondGInKgorJ3RiaScJb3B0aW9ucy50eHQJLyondGJpJyoKKyd0YmlkaScJb3B0aW9ucy50eHQJLyondGJpZGknKgorJ3RiaXMnCW9wdGlvbnMudHh0CS8qJ3RiaXMnKgorJ3RicycJb3B0aW9ucy50eHQJLyondGJzJyoKKyd0ZW5jJwlvcHRpb25zLnR4dAkvKid0ZW5jJyoKKyd0ZXJtJwlvcHRpb25zLnR4dAkvKid0ZXJtJyoKKyd0ZXJtYmlkaScJb3B0aW9ucy50eHQJLyondGVybWJpZGknKgorJ3Rlcm1lbmNvZGluZycJb3B0aW9ucy50eHQJLyondGVybWVuY29kaW5nJyoKKyd0ZXJzZScJb3B0aW9ucy50eHQJLyondGVyc2UnKgorJ3RleHRhdXRvJwlvcHRpb25zLnR4dAkvKid0ZXh0YXV0bycqCisndGV4dG1vZGUnCW9wdGlvbnMudHh0CS8qJ3RleHRtb2RlJyoKKyd0ZXh0d2lkdGgnCW9wdGlvbnMudHh0CS8qJ3RleHR3aWR0aCcqCisndGYnCW9wdGlvbnMudHh0CS8qJ3RmJyoKKyd0Z3N0JwlvcHRpb25zLnR4dAkvKid0Z3N0JyoKKyd0aGVzYXVydXMnCW9wdGlvbnMudHh0CS8qJ3RoZXNhdXJ1cycqCisndGlsZGVvcCcJb3B0aW9ucy50eHQJLyondGlsZGVvcCcqCisndGltZW91dCcJb3B0aW9ucy50eHQJLyondGltZW91dCcqCisndGltZW91dGxlbicJb3B0aW9ucy50eHQJLyondGltZW91dGxlbicqCisndGl0bGUnCW9wdGlvbnMudHh0CS8qJ3RpdGxlJyoKKyd0aXRsZWxlbicJb3B0aW9ucy50eHQJLyondGl0bGVsZW4nKgorJ3RpdGxlb2xkJwlvcHRpb25zLnR4dAkvKid0aXRsZW9sZCcqCisndGl0bGVzdHJpbmcnCW9wdGlvbnMudHh0CS8qJ3RpdGxlc3RyaW5nJyoKKyd0bCcJb3B0aW9ucy50eHQJLyondGwnKgorJ3RtJwlvcHRpb25zLnR4dAkvKid0bScqCisndG8nCW9wdGlvbnMudHh0CS8qJ3RvJyoKKyd0b29sYmFyJwlvcHRpb25zLnR4dAkvKid0b29sYmFyJyoKKyd0b29sYmFyaWNvbnNpemUnCW9wdGlvbnMudHh0CS8qJ3Rvb2xiYXJpY29uc2l6ZScqCisndG9wJwlvcHRpb25zLnR4dAkvKid0b3AnKgorJ3RyJwlvcHRpb25zLnR4dAkvKid0cicqCisndHMnCW9wdGlvbnMudHh0CS8qJ3RzJyoKKyd0c2wnCW9wdGlvbnMudHh0CS8qJ3RzbCcqCisndHNyJwlvcHRpb25zLnR4dAkvKid0c3InKgorJ3R0aW1lb3V0JwlvcHRpb25zLnR4dAkvKid0dGltZW91dCcqCisndHRpbWVvdXRsZW4nCW9wdGlvbnMudHh0CS8qJ3R0aW1lb3V0bGVuJyoKKyd0dG0nCW9wdGlvbnMudHh0CS8qJ3R0bScqCisndHR5JwlvcHRpb25zLnR4dAkvKid0dHknKgorJ3R0eWJ1aWx0aW4nCW9wdGlvbnMudHh0CS8qJ3R0eWJ1aWx0aW4nKgorJ3R0eWZhc3QnCW9wdGlvbnMudHh0CS8qJ3R0eWZhc3QnKgorJ3R0eW0nCW9wdGlvbnMudHh0CS8qJ3R0eW0nKgorJ3R0eW1vdXNlJwlvcHRpb25zLnR4dAkvKid0dHltb3VzZScqCisndHR5c2Nyb2xsJwlvcHRpb25zLnR4dAkvKid0dHlzY3JvbGwnKgorJ3R0eXR5cGUnCW9wdGlvbnMudHh0CS8qJ3R0eXR5cGUnKgorJ3R3JwlvcHRpb25zLnR4dAkvKid0dycqCisndHgnCW9wdGlvbnMudHh0CS8qJ3R4JyoKKyd1YycJb3B0aW9ucy50eHQJLyondWMnKgorJ3VsJwlvcHRpb25zLnR4dAkvKid1bCcqCisndW5kb2xldmVscycJb3B0aW9ucy50eHQJLyondW5kb2xldmVscycqCisndXBkYXRlY291bnQnCW9wdGlvbnMudHh0CS8qJ3VwZGF0ZWNvdW50JyoKKyd1cGRhdGV0aW1lJwlvcHRpb25zLnR4dAkvKid1cGRhdGV0aW1lJyoKKyd1dCcJb3B0aW9ucy50eHQJLyondXQnKgorJ3ZiJwlvcHRpb25zLnR4dAkvKid2YicqCisndmJzJwlvcHRpb25zLnR4dAkvKid2YnMnKgorJ3ZkaXInCW9wdGlvbnMudHh0CS8qJ3ZkaXInKgorJ3ZlJwlvcHRpb25zLnR4dAkvKid2ZScqCisndmVyYm9zZScJb3B0aW9ucy50eHQJLyondmVyYm9zZScqCisndmknCW9wdGlvbnMudHh0CS8qJ3ZpJyoKKyd2aWV3ZGlyJwlvcHRpb25zLnR4dAkvKid2aWV3ZGlyJyoKKyd2aWV3b3B0aW9ucycJb3B0aW9ucy50eHQJLyondmlld29wdGlvbnMnKgorJ3ZpbWluZm8nCW9wdGlvbnMudHh0CS8qJ3ZpbWluZm8nKgorJ3ZpcnR1YWxlZGl0JwlvcHRpb25zLnR4dAkvKid2aXJ0dWFsZWRpdCcqCisndmlzdWFsYmVsbCcJb3B0aW9ucy50eHQJLyondmlzdWFsYmVsbCcqCisndm9wJwlvcHRpb25zLnR4dAkvKid2b3AnKgorJ3cxMjAwJwl2aV9kaWZmLnR4dAkvKid3MTIwMCcqCisndzMwMCcJdmlfZGlmZi50eHQJLyondzMwMCcqCisndzk2MDAnCXZpX2RpZmYudHh0CS8qJ3c5NjAwJyoKKyd3YScJb3B0aW9ucy50eHQJLyond2EnKgorJ3dhaycJb3B0aW9ucy50eHQJLyond2FrJyoKKyd3YXJuJwlvcHRpb25zLnR4dAkvKid3YXJuJyoKKyd3YicJb3B0aW9ucy50eHQJLyond2InKgorJ3djJwlvcHRpb25zLnR4dAkvKid3YycqCisnd2NtJwlvcHRpb25zLnR4dAkvKid3Y20nKgorJ3dkJwlvcHRpb25zLnR4dAkvKid3ZCcqCisnd2VpcmRpbnZlcnQnCW9wdGlvbnMudHh0CS8qJ3dlaXJkaW52ZXJ0JyoKKyd3ZmgnCW9wdGlvbnMudHh0CS8qJ3dmaCcqCisnd2gnCW9wdGlvbnMudHh0CS8qJ3doJyoKKyd3aGljaHdyYXAnCW9wdGlvbnMudHh0CS8qJ3doaWNod3JhcCcqCisnd2knCXZpX2RpZmYudHh0CS8qJ3dpJyoKKyd3aWcnCW9wdGlvbnMudHh0CS8qJ3dpZycqCisnd2lsZGNoYXInCW9wdGlvbnMudHh0CS8qJ3dpbGRjaGFyJyoKKyd3aWxkY2hhcm0nCW9wdGlvbnMudHh0CS8qJ3dpbGRjaGFybScqCisnd2lsZGlnbm9yZScJb3B0aW9ucy50eHQJLyond2lsZGlnbm9yZScqCisnd2lsZG1lbnUnCW9wdGlvbnMudHh0CS8qJ3dpbGRtZW51JyoKKyd3aWxkbW9kZScJb3B0aW9ucy50eHQJLyond2lsZG1vZGUnKgorJ3dpbScJb3B0aW9ucy50eHQJLyond2ltJyoKKyd3aW5hbHRrZXlzJwlvcHRpb25zLnR4dAkvKid3aW5hbHRrZXlzJyoKKyd3aW5kb3cnCXZpX2RpZmYudHh0CS8qJ3dpbmRvdycqCisnd2luZml4aGVpZ2h0JwlvcHRpb25zLnR4dAkvKid3aW5maXhoZWlnaHQnKgorJ3dpbmhlaWdodCcJb3B0aW9ucy50eHQJLyond2luaGVpZ2h0JyoKKyd3aW5taW5oZWlnaHQnCW9wdGlvbnMudHh0CS8qJ3dpbm1pbmhlaWdodCcqCisnd2lubWlud2lkdGgnCW9wdGlvbnMudHh0CS8qJ3dpbm1pbndpZHRoJyoKKyd3aW53aWR0aCcJb3B0aW9ucy50eHQJLyond2lud2lkdGgnKgorJ3dpdicJb3B0aW9ucy50eHQJLyond2l2JyoKKyd3aXcnCW9wdGlvbnMudHh0CS8qJ3dpdycqCisnd20nCW9wdGlvbnMudHh0CS8qJ3dtJyoKKyd3bWgnCW9wdGlvbnMudHh0CS8qJ3dtaCcqCisnd21udScJb3B0aW9ucy50eHQJLyond21udScqCisnd213JwlvcHRpb25zLnR4dAkvKid3bXcnKgorJ3dyYXAnCW9wdGlvbnMudHh0CS8qJ3dyYXAnKgorJ3dyYXBtYXJnaW4nCW9wdGlvbnMudHh0CS8qJ3dyYXBtYXJnaW4nKgorJ3dyYXBzY2FuJwlvcHRpb25zLnR4dAkvKid3cmFwc2NhbicqCisnd3JpdGUnCW9wdGlvbnMudHh0CS8qJ3dyaXRlJyoKKyd3cml0ZWFueScJb3B0aW9ucy50eHQJLyond3JpdGVhbnknKgorJ3dyaXRlYmFja3VwJwlvcHRpb25zLnR4dAkvKid3cml0ZWJhY2t1cCcqCisnd3JpdGVkZWxheScJb3B0aW9ucy50eHQJLyond3JpdGVkZWxheScqCisnd3MnCW9wdGlvbnMudHh0CS8qJ3dzJyoKKyd3dycJb3B0aW9ucy50eHQJLyond3cnKgorJ3sJbW90aW9uLnR4dAkvKid7KgorJ30JbW90aW9uLnR4dAkvKid9KgorKAltb3Rpb24udHh0CS8qKCoKKykJbW90aW9uLnR4dAkvKikqCisrCW1vdGlvbi50eHQJLyorKgorKytiaW4JZWRpdGluZy50eHQJLyorK2JpbioKKysrYnVpbHRpbl90ZXJtcwl2YXJpb3VzLnR4dAkvKisrYnVpbHRpbl90ZXJtcyoKKysrZW5jCWVkaXRpbmcudHh0CS8qKytlbmMqCisrK2ZmCWVkaXRpbmcudHh0CS8qKytmZioKKysrbm9iaW4JZWRpdGluZy50eHQJLyorK25vYmluKgorKytvcHQJZWRpdGluZy50eHQJLyorK29wdCoKKytBUlAJdmFyaW91cy50eHQJLyorQVJQKgorK0dVSV9BdGhlbmEJdmFyaW91cy50eHQJLyorR1VJX0F0aGVuYSoKKytHVUlfQmVPUwl2YXJpb3VzLnR4dAkvKitHVUlfQmVPUyoKKytHVUlfR1RLCXZhcmlvdXMudHh0CS8qK0dVSV9HVEsqCisrR1VJX01vdGlmCXZhcmlvdXMudHh0CS8qK0dVSV9Nb3RpZioKKytHVUlfUGhvdG9uCXZhcmlvdXMudHh0CS8qK0dVSV9QaG90b24qCisrR1VJX25lWHRhdwl2YXJpb3VzLnR4dAkvKitHVUlfbmVYdGF3KgorK1gxMQl2YXJpb3VzLnR4dAkvKitYMTEqCisrYXJhYmljCXZhcmlvdXMudHh0CS8qK2FyYWJpYyoKKythdXRvY21kCXZhcmlvdXMudHh0CS8qK2F1dG9jbWQqCisrYmFsbG9vbl9ldmFsCXZhcmlvdXMudHh0CS8qK2JhbGxvb25fZXZhbCoKKyticm93c2UJdmFyaW91cy50eHQJLyorYnJvd3NlKgorK2J1aWx0aW5fdGVybXMJdmFyaW91cy50eHQJLyorYnVpbHRpbl90ZXJtcyoKKytieXRlX29mZnNldAl2YXJpb3VzLnR4dAkvKitieXRlX29mZnNldCoKKytjaW5kZW50CXZhcmlvdXMudHh0CS8qK2NpbmRlbnQqCisrY2xpZW50c2VydmVyCXZhcmlvdXMudHh0CS8qK2NsaWVudHNlcnZlcioKKytjbGlwYm9hcmQJdmFyaW91cy50eHQJLyorY2xpcGJvYXJkKgorK2NtZAllZGl0aW5nLnR4dAkvKitjbWQqCisrY21kbGluZV9jb21wbAl2YXJpb3VzLnR4dAkvKitjbWRsaW5lX2NvbXBsKgorK2NtZGxpbmVfaGlzdAl2YXJpb3VzLnR4dAkvKitjbWRsaW5lX2hpc3QqCisrY21kbGluZV9pbmZvCXZhcmlvdXMudHh0CS8qK2NtZGxpbmVfaW5mbyoKKytjb21tZW50cwl2YXJpb3VzLnR4dAkvKitjb21tZW50cyoKKytjcnlwdHYJdmFyaW91cy50eHQJLyorY3J5cHR2KgorK2NzY29wZQl2YXJpb3VzLnR4dAkvKitjc2NvcGUqCisrZGlhbG9nX2Nvbgl2YXJpb3VzLnR4dAkvKitkaWFsb2dfY29uKgorK2RpYWxvZ19jb25fZ3VpCXZhcmlvdXMudHh0CS8qK2RpYWxvZ19jb25fZ3VpKgorK2RpYWxvZ19ndWkJdmFyaW91cy50eHQJLyorZGlhbG9nX2d1aSoKKytkaWZmCXZhcmlvdXMudHh0CS8qK2RpZmYqCisrZGlncmFwaHMJdmFyaW91cy50eHQJLyorZGlncmFwaHMqCisrZG5kCXZhcmlvdXMudHh0CS8qK2RuZCoKKytlbWFjc190YWdzCXZhcmlvdXMudHh0CS8qK2VtYWNzX3RhZ3MqCisrZXZhbAl2YXJpb3VzLnR4dAkvKitldmFsKgorK2V4X2V4dHJhCXZhcmlvdXMudHh0CS8qK2V4X2V4dHJhKgorK2V4dHJhX3NlYXJjaAl2YXJpb3VzLnR4dAkvKitleHRyYV9zZWFyY2gqCisrZmFyc2kJdmFyaW91cy50eHQJLyorZmFyc2kqCisrZmVhdHVyZS1saXN0CXZhcmlvdXMudHh0CS8qK2ZlYXR1cmUtbGlzdCoKKytmaWxlX2luX3BhdGgJdmFyaW91cy50eHQJLyorZmlsZV9pbl9wYXRoKgorK2ZpbmRfaW5fcGF0aAl2YXJpb3VzLnR4dAkvKitmaW5kX2luX3BhdGgqCisrZm9sZGluZwl2YXJpb3VzLnR4dAkvKitmb2xkaW5nKgorK2Zvb3Rlcgl2YXJpb3VzLnR4dAkvKitmb290ZXIqCisrZm9yawl2YXJpb3VzLnR4dAkvKitmb3JrKgorK2dldHRleHQJdmFyaW91cy50eHQJLyorZ2V0dGV4dCoKKytoYW5ndWxfaW5wdXQJdmFyaW91cy50eHQJLyoraGFuZ3VsX2lucHV0KgorK2ljb252CXZhcmlvdXMudHh0CS8qK2ljb252KgorK2luc2VydF9leHBhbmQJdmFyaW91cy50eHQJLyoraW5zZXJ0X2V4cGFuZCoKKytqdW1wbGlzdAl2YXJpb3VzLnR4dAkvKitqdW1wbGlzdCoKKytrZXltYXAJdmFyaW91cy50eHQJLyora2V5bWFwKgorK2xhbmdtYXAJdmFyaW91cy50eHQJLyorbGFuZ21hcCoKKytsaWJjYWxsCXZhcmlvdXMudHh0CS8qK2xpYmNhbGwqCisrbGluZWJyZWFrCXZhcmlvdXMudHh0CS8qK2xpbmVicmVhayoKKytsaXNwaW5kZW50CXZhcmlvdXMudHh0CS8qK2xpc3BpbmRlbnQqCisrbGlzdGNtZHMJdmFyaW91cy50eHQJLyorbGlzdGNtZHMqCisrbG9jYWxtYXAJdmFyaW91cy50eHQJLyorbG9jYWxtYXAqCisrbWVudQl2YXJpb3VzLnR4dAkvKittZW51KgorK21rc2Vzc2lvbgl2YXJpb3VzLnR4dAkvKitta3Nlc3Npb24qCisrbW9kaWZ5X2ZuYW1lCXZhcmlvdXMudHh0CS8qK21vZGlmeV9mbmFtZSoKKyttb3VzZQl2YXJpb3VzLnR4dAkvKittb3VzZSoKKyttb3VzZV9kZWMJdmFyaW91cy50eHQJLyorbW91c2VfZGVjKgorK21vdXNlX2dwbQl2YXJpb3VzLnR4dAkvKittb3VzZV9ncG0qCisrbW91c2VfbmV0dGVybQl2YXJpb3VzLnR4dAkvKittb3VzZV9uZXR0ZXJtKgorK21vdXNlX3B0ZXJtCXZhcmlvdXMudHh0CS8qK21vdXNlX3B0ZXJtKgorK21vdXNlX3h0ZXJtCXZhcmlvdXMudHh0CS8qK21vdXNlX3h0ZXJtKgorK21vdXNlc2hhcGUJdmFyaW91cy50eHQJLyorbW91c2VzaGFwZSoKKyttdWx0aV9ieXRlCXZhcmlvdXMudHh0CS8qK211bHRpX2J5dGUqCisrbXVsdGlfYnl0ZV9pbWUJdmFyaW91cy50eHQJLyorbXVsdGlfYnl0ZV9pbWUqCisrbXVsdGlfbGFuZwl2YXJpb3VzLnR4dAkvKittdWx0aV9sYW5nKgorK25ldGJlYW5zX2ludGcJdmFyaW91cy50eHQJLyorbmV0YmVhbnNfaW50ZyoKKytvbGUJdmFyaW91cy50eHQJLyorb2xlKgorK29zZmlsZXR5cGUJdmFyaW91cy50eHQJLyorb3NmaWxldHlwZSoKKytwYXRoX2V4dHJhCXZhcmlvdXMudHh0CS8qK3BhdGhfZXh0cmEqCisrcGVybAl2YXJpb3VzLnR4dAkvKitwZXJsKgorK3Bvc3RzY3JpcHQJdmFyaW91cy50eHQJLyorcG9zdHNjcmlwdCoKKytwcmludGVyCXZhcmlvdXMudHh0CS8qK3ByaW50ZXIqCisrcHl0aG9uCXZhcmlvdXMudHh0CS8qK3B5dGhvbioKKytxdWlja2ZpeAl2YXJpb3VzLnR4dAkvKitxdWlja2ZpeCoKKytyaWdodGxlZnQJdmFyaW91cy50eHQJLyorcmlnaHRsZWZ0KgorK3J1YnkJdmFyaW91cy50eHQJLyorcnVieSoKKytzY3JvbGxiaW5kCXZhcmlvdXMudHh0CS8qK3Njcm9sbGJpbmQqCisrc2lnbnMJdmFyaW91cy50eHQJLyorc2lnbnMqCisrc21hcnRpbmRlbnQJdmFyaW91cy50eHQJLyorc21hcnRpbmRlbnQqCisrc25pZmYJdmFyaW91cy50eHQJLyorc25pZmYqCisrc3RhdHVzbGluZQl2YXJpb3VzLnR4dAkvKitzdGF0dXNsaW5lKgorK3N1bl93b3Jrc2hvcAl2YXJpb3VzLnR4dAkvKitzdW5fd29ya3Nob3AqCisrc3ludGF4CXZhcmlvdXMudHh0CS8qK3N5bnRheCoKKytzeXN0ZW0oKQl2YXJpb3VzLnR4dAkvKitzeXN0ZW0oKSoKKyt0YWdfYW55X3doaXRlCXZhcmlvdXMudHh0CS8qK3RhZ19hbnlfd2hpdGUqCisrdGFnX2JpbmFyeQl2YXJpb3VzLnR4dAkvKit0YWdfYmluYXJ5KgorK3RhZ19vbGRfc3RhdGljCXZhcmlvdXMudHh0CS8qK3RhZ19vbGRfc3RhdGljKgorK3RjbAl2YXJpb3VzLnR4dAkvKit0Y2wqCisrdGVybWluZm8JdmFyaW91cy50eHQJLyordGVybWluZm8qCisrdGVybXJlc3BvbnNlCXZhcmlvdXMudHh0CS8qK3Rlcm1yZXNwb25zZSoKKyt0ZXh0b2JqZWN0cwl2YXJpb3VzLnR4dAkvKit0ZXh0b2JqZWN0cyoKKyt0Z2V0ZW50CXZhcmlvdXMudHh0CS8qK3RnZXRlbnQqCisrdGl0bGUJdmFyaW91cy50eHQJLyordGl0bGUqCisrdG9vbGJhcgl2YXJpb3VzLnR4dAkvKit0b29sYmFyKgorK3VzZXJfY29tbWFuZHMJdmFyaW91cy50eHQJLyordXNlcl9jb21tYW5kcyoKKyt2ZXJ0c3BsaXQJdmFyaW91cy50eHQJLyordmVydHNwbGl0KgorK3ZpbWluZm8JdmFyaW91cy50eHQJLyordmltaW5mbyoKKyt2aXJ0dWFsZWRpdAl2YXJpb3VzLnR4dAkvKit2aXJ0dWFsZWRpdCoKKyt2aXN1YWwJdmFyaW91cy50eHQJLyordmlzdWFsKgorK3Zpc3VhbGV4dHJhCXZhcmlvdXMudHh0CS8qK3Zpc3VhbGV4dHJhKgorK3ZyZXBsYWNlCXZhcmlvdXMudHh0CS8qK3ZyZXBsYWNlKgorK3dpbGRpZ25vcmUJdmFyaW91cy50eHQJLyord2lsZGlnbm9yZSoKKyt3aWxkbWVudQl2YXJpb3VzLnR4dAkvKit3aWxkbWVudSoKKyt3aW5kb3dzCXZhcmlvdXMudHh0CS8qK3dpbmRvd3MqCisrd3JpdGViYWNrdXAJdmFyaW91cy50eHQJLyord3JpdGViYWNrdXAqCisreGZvbnRzZXQJdmFyaW91cy50eHQJLyoreGZvbnRzZXQqCisreGltCXZhcmlvdXMudHh0CS8qK3hpbSoKKyt4c21wCXZhcmlvdXMudHh0CS8qK3hzbXAqCisreHNtcF9pbnRlcmFjdAl2YXJpb3VzLnR4dAkvKit4c21wX2ludGVyYWN0KgorK3h0ZXJtX2NsaXBib2FyZAl2YXJpb3VzLnR4dAkvKit4dGVybV9jbGlwYm9hcmQqCisreHRlcm1fc2F2ZQl2YXJpb3VzLnR4dAkvKit4dGVybV9zYXZlKgorLAltb3Rpb24udHh0CS8qLCoKKy0JbW90aW9uLnR4dAkvKi0qCistKwlzdGFydGluZy50eHQJLyotKyoKKy0rLwlzdGFydGluZy50eHQJLyotK1wvKgorLStjCXN0YXJ0aW5nLnR4dAkvKi0rYyoKKy0rcmV2ZXJzZQlndWlfeDExLnR4dAkvKi0rcmV2ZXJzZSoKKy0rcnYJZ3VpX3gxMS50eHQJLyotK3J2KgorLS0Jc3RhcnRpbmcudHh0CS8qLS0qCistLS0Jc3RhcnRpbmcudHh0CS8qLS0tKgorLS1jbWQJc3RhcnRpbmcudHh0CS8qLS1jbWQqCistLWVjaG8td2lkCXN0YXJ0aW5nLnR4dAkvKi0tZWNoby13aWQqCistLWhlbHAJc3RhcnRpbmcudHh0CS8qLS1oZWxwKgorLS1saXRlcmFsCXN0YXJ0aW5nLnR4dAkvKi0tbGl0ZXJhbCoKKy0tbm9mb3JrCXN0YXJ0aW5nLnR4dAkvKi0tbm9mb3JrKgorLS1ub3BsdWdpbglzdGFydGluZy50eHQJLyotLW5vcGx1Z2luKgorLS1yZW1vdGUJcmVtb3RlLnR4dAkvKi0tcmVtb3RlKgorLS1yZW1vdGUtZXhwcglyZW1vdGUudHh0CS8qLS1yZW1vdGUtZXhwcioKKy0tcmVtb3RlLXNlbmQJcmVtb3RlLnR4dAkvKi0tcmVtb3RlLXNlbmQqCistLXJlbW90ZS1zaWxlbnQJcmVtb3RlLnR4dAkvKi0tcmVtb3RlLXNpbGVudCoKKy0tcmVtb3RlLXdhaXQJcmVtb3RlLnR4dAkvKi0tcmVtb3RlLXdhaXQqCistLXJlbW90ZS13YWl0LXNpbGVudAlyZW1vdGUudHh0CS8qLS1yZW1vdGUtd2FpdC1zaWxlbnQqCistLXJvbGUJc3RhcnRpbmcudHh0CS8qLS1yb2xlKgorLS1zZXJ2ZXJsaXN0CXJlbW90ZS50eHQJLyotLXNlcnZlcmxpc3QqCistLXNlcnZlcm5hbWUJcmVtb3RlLnR4dAkvKi0tc2VydmVybmFtZSoKKy0tc29ja2V0aWQJc3RhcnRpbmcudHh0CS8qLS1zb2NrZXRpZCoKKy0tdmVyc2lvbglzdGFydGluZy50eHQJLyotLXZlcnNpb24qCistQQlzdGFydGluZy50eHQJLyotQSoKKy1DCXN0YXJ0aW5nLnR4dAkvKi1DKgorLUQJc3RhcnRpbmcudHh0CS8qLUQqCistRQlzdGFydGluZy50eHQJLyotRSoKKy1GCXN0YXJ0aW5nLnR4dAkvKi1GKgorLUgJc3RhcnRpbmcudHh0CS8qLUgqCistTAlzdGFydGluZy50eHQJLyotTCoKKy1NCXN0YXJ0aW5nLnR4dAkvKi1NKgorLU4Jc3RhcnRpbmcudHh0CS8qLU4qCistTwlzdGFydGluZy50eHQJLyotTyoKKy1QCXN0YXJ0aW5nLnR4dAkvKi1QKgorLVIJc3RhcnRpbmcudHh0CS8qLVIqCistUwlzdGFydGluZy50eHQJLyotUyoKKy1UCXN0YXJ0aW5nLnR4dAkvKi1UKgorLVUJc3RhcnRpbmcudHh0CS8qLVUqCistVglzdGFydGluZy50eHQJLyotVioKKy1XCXN0YXJ0aW5nLnR4dAkvKi1XKgorLVgJc3RhcnRpbmcudHh0CS8qLVgqCistWglzdGFydGluZy50eHQJLyotWioKKy1iCXN0YXJ0aW5nLnR4dAkvKi1iKgorLWJhY2tncm91bmQJZ3VpX3gxMS50eHQJLyotYmFja2dyb3VuZCoKKy1iZwlndWlfeDExLnR4dAkvKi1iZyoKKy1ib2xkZm9udAlndWlfeDExLnR4dAkvKi1ib2xkZm9udCoKKy1ib3JkZXJ3aWR0aAlndWlfeDExLnR4dAkvKi1ib3JkZXJ3aWR0aCoKKy1idwlndWlfeDExLnR4dAkvKi1idyoKKy1jCXN0YXJ0aW5nLnR4dAkvKi1jKgorLWQJc3RhcnRpbmcudHh0CS8qLWQqCistZGV2CXN0YXJ0aW5nLnR4dAkvKi1kZXYqCistZGlzcGxheQlndWlfeDExLnR4dAkvKi1kaXNwbGF5KgorLWUJc3RhcnRpbmcudHh0CS8qLWUqCistZglzdGFydGluZy50eHQJLyotZioKKy1mZwlndWlfeDExLnR4dAkvKi1mZyoKKy1maWxlCXN0YXJ0aW5nLnR4dAkvKi1maWxlKgorLWZuCWd1aV94MTEudHh0CS8qLWZuKgorLWZvbnQJZ3VpX3gxMS50eHQJLyotZm9udCoKKy1mb3JlZ3JvdW5kCWd1aV94MTEudHh0CS8qLWZvcmVncm91bmQqCistZwlzdGFydGluZy50eHQJLyotZyoKKy1nZW9tCWd1aV94MTEudHh0CS8qLWdlb20qCistZ2VvbWV0cnkJZ3VpX3gxMS50eHQJLyotZ2VvbWV0cnkqCistZ2VvbWV0cnktZXhhbXBsZQlndWlfeDExLnR4dAkvKi1nZW9tZXRyeS1leGFtcGxlKgorLWd1aQlndWlfeDExLnR4dAkvKi1ndWkqCistaAlzdGFydGluZy50eHQJLyotaCoKKy1pCXN0YXJ0aW5nLnR4dAkvKi1pKgorLWljb25pYwlndWlfeDExLnR4dAkvKi1pY29uaWMqCistaXRhbGljZm9udAlndWlfeDExLnR4dAkvKi1pdGFsaWNmb250KgorLWwJc3RhcnRpbmcudHh0CS8qLWwqCistbQlzdGFydGluZy50eHQJLyotbSoKKy1tZW51Zm9udAlndWlfeDExLnR4dAkvKi1tZW51Zm9udCoKKy1tZW51Zm9udHNldAlndWlfeDExLnR4dAkvKi1tZW51Zm9udHNldCoKKy1tZW51aGVpZ2h0CWd1aV94MTEudHh0CS8qLW1lbnVoZWlnaHQqCistbWYJZ3VpX3gxMS50eHQJLyotbWYqCistbWgJZ3VpX3gxMS50eHQJLyotbWgqCistbglzdGFydGluZy50eHQJLyotbioKKy1uYglzdGFydGluZy50eHQJLyotbmIqCistbwlzdGFydGluZy50eHQJLyotbyoKKy1xCXN0YXJ0aW5nLnR4dAkvKi1xKgorLXFmCXN0YXJ0aW5nLnR4dAkvKi1xZioKKy1yCXN0YXJ0aW5nLnR4dAkvKi1yKgorLXJlZ2lzdGVyCWlmX29sZS50eHQJLyotcmVnaXN0ZXIqCistcmV2ZXJzZQlndWlfeDExLnR4dAkvKi1yZXZlcnNlKgorLXJ2CWd1aV94MTEudHh0CS8qLXJ2KgorLXMJc3RhcnRpbmcudHh0CS8qLXMqCistcy1leAlzdGFydGluZy50eHQJLyotcy1leCoKKy1zY3JvbGxiYXJ3aWR0aAlndWlfeDExLnR4dAkvKi1zY3JvbGxiYXJ3aWR0aCoKKy1zaWxlbnQJaWZfb2xlLnR4dAkvKi1zaWxlbnQqCistc3cJZ3VpX3gxMS50eHQJLyotc3cqCistdAlzdGFydGluZy50eHQJLyotdCoKKy10YWcJc3RhcnRpbmcudHh0CS8qLXRhZyoKKy11CXN0YXJ0aW5nLnR4dAkvKi11KgorLXVsCWd1aV94MTEudHh0CS8qLXVsKgorLXVucmVnaXN0ZXIJaWZfb2xlLnR4dAkvKi11bnJlZ2lzdGVyKgorLXYJc3RhcnRpbmcudHh0CS8qLXYqCistdmltCXN0YXJ0aW5nLnR4dAkvKi12aW0qCistdwlzdGFydGluZy50eHQJLyotdyoKKy13X25yCXN0YXJ0aW5nLnR4dAkvKi13X25yKgorLXgJc3RhcnRpbmcudHh0CS8qLXgqCisteHJtCWd1aV94MTEudHh0CS8qLXhybSoKKy15CXN0YXJ0aW5nLnR4dAkvKi15KgorLglyZXBlYXQudHh0CS8qLioKKy5YZGVmYXVsdHMJZ3VpX3gxMS50eHQJLyouWGRlZmF1bHRzKgorLmV4cmMJc3RhcnRpbmcudHh0CS8qLmV4cmMqCisuZ3ZpbXJjCWd1aS50eHQJLyouZ3ZpbXJjKgorLnZpbXJjCXN0YXJ0aW5nLnR4dAkvKi52aW1yYyoKKy8JcGF0dGVybi50eHQJLypcLyoKKy8kCXBhdHRlcm4udHh0CS8qXC8kKgorLy4JcGF0dGVybi50eHQJLypcLy4qCisvLzsJcGF0dGVybi50eHQJLypcL1wvOyoKKy88Q1I+CXBhdHRlcm4udHh0CS8qXC88Q1I+KgorL1tdCXBhdHRlcm4udHh0CS8qXC9bXSoKKy9cCXBhdHRlcm4udHh0CS8qXC9cXCoKKy9cJAlwYXR0ZXJuLnR4dAkvKlwvXFwkKgorL1wlIwlwYXR0ZXJuLnR4dAkvKlwvXFwlIyoKKy9cJSQJcGF0dGVybi50eHQJLypcL1xcJSQqCisvXCUoCXBhdHRlcm4udHh0CS8qXC9cXCUoKgorL1wlKFwpCXBhdHRlcm4udHh0CS8qXC9cXCUoXFwpKgorL1wlPGMJcGF0dGVybi50eHQJLypcL1xcJTxjKgorL1wlPGwJcGF0dGVybi50eHQJLypcL1xcJTxsKgorL1wlPHYJcGF0dGVybi50eHQJLypcL1xcJTx2KgorL1wlPmMJcGF0dGVybi50eHQJLypcL1xcJT5jKgorL1wlPmwJcGF0dGVybi50eHQJLypcL1xcJT5sKgorL1wlPnYJcGF0dGVybi50eHQJLypcL1xcJT52KgorL1wlW10JcGF0dGVybi50eHQJLypcL1xcJVtdKgorL1wlXglwYXR0ZXJuLnR4dAkvKlwvXFwlXioKKy9cJWMJcGF0dGVybi50eHQJLypcL1xcJWMqCisvXCVsCXBhdHRlcm4udHh0CS8qXC9cXCVsKgorL1wldglwYXR0ZXJuLnR4dAkvKlwvXFwldioKKy9cJglwYXR0ZXJuLnR4dAkvKlwvXFwmKgorL1woCXBhdHRlcm4udHh0CS8qXC9cXCgqCisvXChcKQlwYXR0ZXJuLnR4dAkvKlwvXFwoXFwpKgorL1wpCXBhdHRlcm4udHh0CS8qXC9cXCkqCisvXCsJcGF0dGVybi50eHQJLypcL1xcKyoKKy9cLglwYXR0ZXJuLnR4dAkvKlwvXFwuKgorL1wxCXBhdHRlcm4udHh0CS8qXC9cXDEqCisvXDIJcGF0dGVybi50eHQJLypcL1xcMioKKy9cMwlwYXR0ZXJuLnR4dAkvKlwvXFwzKgorL1w5CXBhdHRlcm4udHh0CS8qXC9cXDkqCisvXDwJcGF0dGVybi50eHQJLypcL1xcPCoKKy9cPQlwYXR0ZXJuLnR4dAkvKlwvXFw9KgorL1w+CXBhdHRlcm4udHh0CS8qXC9cXD4qCisvXD8JcGF0dGVybi50eHQJLypcL1xcPyoKKy9cQCEJcGF0dGVybi50eHQJLypcL1xcQCEqCisvXEA8IQlwYXR0ZXJuLnR4dAkvKlwvXFxAPCEqCisvXEA8PQlwYXR0ZXJuLnR4dAkvKlwvXFxAPD0qCisvXEA9CXBhdHRlcm4udHh0CS8qXC9cXEA9KgorL1xAPglwYXR0ZXJuLnR4dAkvKlwvXFxAPioKKy9cQQlwYXR0ZXJuLnR4dAkvKlwvXFxBKgorL1xDCXBhdHRlcm4udHh0CS8qXC9cXEMqCisvXEQJcGF0dGVybi50eHQJLypcL1xcRCoKKy9cRglwYXR0ZXJuLnR4dAkvKlwvXFxGKgorL1xICXBhdHRlcm4udHh0CS8qXC9cXEgqCisvXEkJcGF0dGVybi50eHQJLypcL1xcSSoKKy9cSwlwYXR0ZXJuLnR4dAkvKlwvXFxLKgorL1xMCXBhdHRlcm4udHh0CS8qXC9cXEwqCisvXE0JcGF0dGVybi50eHQJLypcL1xcTSoKKy9cTwlwYXR0ZXJuLnR4dAkvKlwvXFxPKgorL1xQCXBhdHRlcm4udHh0CS8qXC9cXFAqCisvXFMJcGF0dGVybi50eHQJLypcL1xcUyoKKy9cVQlwYXR0ZXJuLnR4dAkvKlwvXFxVKgorL1xWCXBhdHRlcm4udHh0CS8qXC9cXFYqCisvXFcJcGF0dGVybi50eHQJLypcL1xcVyoKKy9cWAlwYXR0ZXJuLnR4dAkvKlwvXFxYKgorL1xaCXBhdHRlcm4udHh0CS8qXC9cXFoqCisvXFtdCXBhdHRlcm4udHh0CS8qXC9cXFtdKgorL1xcCXBhdHRlcm4udHh0CS8qXC9cXFxcKgorL1xdCXBhdHRlcm4udHh0CS8qXC9cXF0qCisvXF4JcGF0dGVybi50eHQJLypcL1xcXioKKy9cXwlwYXR0ZXJuLnR4dAkvKlwvXFxfKgorL1xfJAlwYXR0ZXJuLnR4dAkvKlwvXFxfJCoKKy9cXy4JcGF0dGVybi50eHQJLypcL1xcXy4qCisvXF9BCXBhdHRlcm4udHh0CS8qXC9cXF9BKgorL1xfRAlwYXR0ZXJuLnR4dAkvKlwvXFxfRCoKKy9cX0YJcGF0dGVybi50eHQJLypcL1xcX0YqCisvXF9ICXBhdHRlcm4udHh0CS8qXC9cXF9IKgorL1xfSQlwYXR0ZXJuLnR4dAkvKlwvXFxfSSoKKy9cX0sJcGF0dGVybi50eHQJLypcL1xcX0sqCisvXF9MCXBhdHRlcm4udHh0CS8qXC9cXF9MKgorL1xfTwlwYXR0ZXJuLnR4dAkvKlwvXFxfTyoKKy9cX1AJcGF0dGVybi50eHQJLypcL1xcX1AqCisvXF9TCXBhdHRlcm4udHh0CS8qXC9cXF9TKgorL1xfVQlwYXR0ZXJuLnR4dAkvKlwvXFxfVSoKKy9cX1cJcGF0dGVybi50eHQJLypcL1xcX1cqCisvXF9YCXBhdHRlcm4udHh0CS8qXC9cXF9YKgorL1xfW10JcGF0dGVybi50eHQJLypcL1xcX1tdKgorL1xfXglwYXR0ZXJuLnR4dAkvKlwvXFxfXioKKy9cX2EJcGF0dGVybi50eHQJLypcL1xcX2EqCisvXF9kCXBhdHRlcm4udHh0CS8qXC9cXF9kKgorL1xfZglwYXR0ZXJuLnR4dAkvKlwvXFxfZioKKy9cX2gJcGF0dGVybi50eHQJLypcL1xcX2gqCisvXF9pCXBhdHRlcm4udHh0CS8qXC9cXF9pKgorL1xfawlwYXR0ZXJuLnR4dAkvKlwvXFxfayoKKy9cX2wJcGF0dGVybi50eHQJLypcL1xcX2wqCisvXF9vCXBhdHRlcm4udHh0CS8qXC9cXF9vKgorL1xfcAlwYXR0ZXJuLnR4dAkvKlwvXFxfcCoKKy9cX3MJcGF0dGVybi50eHQJLypcL1xcX3MqCisvXF91CXBhdHRlcm4udHh0CS8qXC9cXF91KgorL1xfdwlwYXR0ZXJuLnR4dAkvKlwvXFxfdyoKKy9cX3gJcGF0dGVybi50eHQJLypcL1xcX3gqCisvXGEJcGF0dGVybi50eHQJLypcL1xcYSoKKy9cYglwYXR0ZXJuLnR4dAkvKlwvXFxiKgorL1xiYXIJcGF0dGVybi50eHQJLypcL1xcYmFyKgorL1xjCXBhdHRlcm4udHh0CS8qXC9cXGMqCisvXGQJcGF0dGVybi50eHQJLypcL1xcZCoKKy9cZQlwYXR0ZXJuLnR4dAkvKlwvXFxlKgorL1xmCXBhdHRlcm4udHh0CS8qXC9cXGYqCisvXGgJcGF0dGVybi50eHQJLypcL1xcaCoKKy9caQlwYXR0ZXJuLnR4dAkvKlwvXFxpKgorL1xrCXBhdHRlcm4udHh0CS8qXC9cXGsqCisvXGwJcGF0dGVybi50eHQJLypcL1xcbCoKKy9cbQlwYXR0ZXJuLnR4dAkvKlwvXFxtKgorL1xuCXBhdHRlcm4udHh0CS8qXC9cXG4qCisvXG8JcGF0dGVybi50eHQJLypcL1xcbyoKKy9ccAlwYXR0ZXJuLnR4dAkvKlwvXFxwKgorL1xyCXBhdHRlcm4udHh0CS8qXC9cXHIqCisvXHMJcGF0dGVybi50eHQJLypcL1xccyoKKy9cc3RhcglwYXR0ZXJuLnR4dAkvKlwvXFxzdGFyKgorL1x0CXBhdHRlcm4udHh0CS8qXC9cXHQqCisvXHUJcGF0dGVybi50eHQJLypcL1xcdSoKKy9cdglwYXR0ZXJuLnR4dAkvKlwvXFx2KgorL1x3CXBhdHRlcm4udHh0CS8qXC9cXHcqCisvXHgJcGF0dGVybi50eHQJLypcL1xceCoKKy9ceigJc3ludGF4LnR4dAkvKlwvXFx6KCoKKy9ceihcKQlzeW50YXgudHh0CS8qXC9cXHooXFwpKgorL1x6MQlzeW50YXgudHh0CS8qXC9cXHoxKgorL1x6MglzeW50YXgudHh0CS8qXC9cXHoyKgorL1x6MwlzeW50YXgudHh0CS8qXC9cXHozKgorL1x6NAlzeW50YXgudHh0CS8qXC9cXHo0KgorL1x6NQlzeW50YXgudHh0CS8qXC9cXHo1KgorL1x6NglzeW50YXgudHh0CS8qXC9cXHo2KgorL1x6NwlzeW50YXgudHh0CS8qXC9cXHo3KgorL1x6OAlzeW50YXgudHh0CS8qXC9cXHo4KgorL1x6OQlzeW50YXgudHh0CS8qXC9cXHo5KgorL1x6ZQlwYXR0ZXJuLnR4dAkvKlwvXFx6ZSoKKy9cenMJcGF0dGVybi50eHQJLypcL1xcenMqCisvXHsJcGF0dGVybi50eHQJLypcL1xceyoKKy9cey0JcGF0dGVybi50eHQJLypcL1xcey0qCisvXH4JcGF0dGVybi50eHQJLypcL1xcfioKKy9eCXBhdHRlcm4udHh0CS8qXC9eKgorL2F0b20JcGF0dGVybi50eHQJLypcL2F0b20qCisvYmFyCXBhdHRlcm4udHh0CS8qXC9iYXIqCisvYnJhbmNoCXBhdHRlcm4udHh0CS8qXC9icmFuY2gqCisvY29sbGVjdGlvbglwYXR0ZXJuLnR4dAkvKlwvY29sbGVjdGlvbioKKy9jb25jYXQJcGF0dGVybi50eHQJLypcL2NvbmNhdCoKKy9keW4JdmFyaW91cy50eHQJLypcL2R5bioKKy9pZ25vcmVjYXNlCXBhdHRlcm4udHh0CS8qXC9pZ25vcmVjYXNlKgorL21hZ2ljCXBhdHRlcm4udHh0CS8qXC9tYWdpYyoKKy9tdWx0aQlwYXR0ZXJuLnR4dAkvKlwvbXVsdGkqCisvb3JkaW5hcnktYXRvbQlwYXR0ZXJuLnR4dAkvKlwvb3JkaW5hcnktYXRvbSoKKy9wYXR0ZXJuCXBhdHRlcm4udHh0CS8qXC9wYXR0ZXJuKgorL3BpZWNlCXBhdHRlcm4udHh0CS8qXC9waWVjZSoKKy9zdGFyCXBhdHRlcm4udHh0CS8qXC9zdGFyKgorL3plcm8td2lkdGgJcGF0dGVybi50eHQJLypcL3plcm8td2lkdGgqCisvfglwYXR0ZXJuLnR4dAkvKlwvfioKKzAJbW90aW9uLnR4dAkvKjAqCiswMS4xCXVzcl8wMS50eHQJLyowMS4xKgorMDEuMgl1c3JfMDEudHh0CS8qMDEuMioKKzAxLjMJdXNyXzAxLnR4dAkvKjAxLjMqCiswMS40CXVzcl8wMS50eHQJLyowMS40KgorMDIuMQl1c3JfMDIudHh0CS8qMDIuMSoKKzAyLjIJdXNyXzAyLnR4dAkvKjAyLjIqCiswMi4zCXVzcl8wMi50eHQJLyowMi4zKgorMDIuNAl1c3JfMDIudHh0CS8qMDIuNCoKKzAyLjUJdXNyXzAyLnR4dAkvKjAyLjUqCiswMi42CXVzcl8wMi50eHQJLyowMi42KgorMDIuNwl1c3JfMDIudHh0CS8qMDIuNyoKKzAyLjgJdXNyXzAyLnR4dAkvKjAyLjgqCiswMy4xCXVzcl8wMy50eHQJLyowMy4xKgorMDMuMTAJdXNyXzAzLnR4dAkvKjAzLjEwKgorMDMuMgl1c3JfMDMudHh0CS8qMDMuMioKKzAzLjMJdXNyXzAzLnR4dAkvKjAzLjMqCiswMy40CXVzcl8wMy50eHQJLyowMy40KgorMDMuNQl1c3JfMDMudHh0CS8qMDMuNSoKKzAzLjYJdXNyXzAzLnR4dAkvKjAzLjYqCiswMy43CXVzcl8wMy50eHQJLyowMy43KgorMDMuOAl1c3JfMDMudHh0CS8qMDMuOCoKKzAzLjkJdXNyXzAzLnR4dAkvKjAzLjkqCiswNC4xCXVzcl8wNC50eHQJLyowNC4xKgorMDQuMTAJdXNyXzA0LnR4dAkvKjA0LjEwKgorMDQuMgl1c3JfMDQudHh0CS8qMDQuMioKKzA0LjMJdXNyXzA0LnR4dAkvKjA0LjMqCiswNC40CXVzcl8wNC50eHQJLyowNC40KgorMDQuNQl1c3JfMDQudHh0CS8qMDQuNSoKKzA0LjYJdXNyXzA0LnR4dAkvKjA0LjYqCiswNC43CXVzcl8wNC50eHQJLyowNC43KgorMDQuOAl1c3JfMDQudHh0CS8qMDQuOCoKKzA0LjkJdXNyXzA0LnR4dAkvKjA0LjkqCiswNS4xCXVzcl8wNS50eHQJLyowNS4xKgorMDUuMgl1c3JfMDUudHh0CS8qMDUuMioKKzA1LjMJdXNyXzA1LnR4dAkvKjA1LjMqCiswNS40CXVzcl8wNS50eHQJLyowNS40KgorMDUuNQl1c3JfMDUudHh0CS8qMDUuNSoKKzA1LjYJdXNyXzA1LnR4dAkvKjA1LjYqCiswNS43CXVzcl8wNS50eHQJLyowNS43KgorMDYuMQl1c3JfMDYudHh0CS8qMDYuMSoKKzA2LjIJdXNyXzA2LnR4dAkvKjA2LjIqCiswNi4zCXVzcl8wNi50eHQJLyowNi4zKgorMDYuNAl1c3JfMDYudHh0CS8qMDYuNCoKKzA2LjUJdXNyXzA2LnR4dAkvKjA2LjUqCiswNi42CXVzcl8wNi50eHQJLyowNi42KgorMDcuMQl1c3JfMDcudHh0CS8qMDcuMSoKKzA3LjIJdXNyXzA3LnR4dAkvKjA3LjIqCiswNy4zCXVzcl8wNy50eHQJLyowNy4zKgorMDcuNAl1c3JfMDcudHh0CS8qMDcuNCoKKzA3LjUJdXNyXzA3LnR4dAkvKjA3LjUqCiswNy42CXVzcl8wNy50eHQJLyowNy42KgorMDcuNwl1c3JfMDcudHh0CS8qMDcuNyoKKzA4LjEJdXNyXzA4LnR4dAkvKjA4LjEqCiswOC4yCXVzcl8wOC50eHQJLyowOC4yKgorMDguMwl1c3JfMDgudHh0CS8qMDguMyoKKzA4LjQJdXNyXzA4LnR4dAkvKjA4LjQqCiswOC41CXVzcl8wOC50eHQJLyowOC41KgorMDguNgl1c3JfMDgudHh0CS8qMDguNioKKzA4LjcJdXNyXzA4LnR4dAkvKjA4LjcqCiswOC44CXVzcl8wOC50eHQJLyowOC44KgorMDkuMQl1c3JfMDkudHh0CS8qMDkuMSoKKzA5LjIJdXNyXzA5LnR4dAkvKjA5LjIqCiswOS4zCXVzcl8wOS50eHQJLyowOS4zKgorMDkuNAl1c3JfMDkudHh0CS8qMDkuNCoKKzEwLjEJdXNyXzEwLnR4dAkvKjEwLjEqCisxMC4yCXVzcl8xMC50eHQJLyoxMC4yKgorMTAuMwl1c3JfMTAudHh0CS8qMTAuMyoKKzEwLjQJdXNyXzEwLnR4dAkvKjEwLjQqCisxMC41CXVzcl8xMC50eHQJLyoxMC41KgorMTAuNgl1c3JfMTAudHh0CS8qMTAuNioKKzEwLjcJdXNyXzEwLnR4dAkvKjEwLjcqCisxMC44CXVzcl8xMC50eHQJLyoxMC44KgorMTAuOQl1c3JfMTAudHh0CS8qMTAuOSoKKzExLjEJdXNyXzExLnR4dAkvKjExLjEqCisxMS4yCXVzcl8xMS50eHQJLyoxMS4yKgorMTEuMwl1c3JfMTEudHh0CS8qMTEuMyoKKzExLjQJdXNyXzExLnR4dAkvKjExLjQqCisxMi4xCXVzcl8xMi50eHQJLyoxMi4xKgorMTIuMgl1c3JfMTIudHh0CS8qMTIuMioKKzEyLjMJdXNyXzEyLnR4dAkvKjEyLjMqCisxMi40CXVzcl8xMi50eHQJLyoxMi40KgorMTIuNQl1c3JfMTIudHh0CS8qMTIuNSoKKzEyLjYJdXNyXzEyLnR4dAkvKjEyLjYqCisxMi43CXVzcl8xMi50eHQJLyoxMi43KgorMTIuOAl1c3JfMTIudHh0CS8qMTIuOCoKKzIwLjEJdXNyXzIwLnR4dAkvKjIwLjEqCisyMC4yCXVzcl8yMC50eHQJLyoyMC4yKgorMjAuMwl1c3JfMjAudHh0CS8qMjAuMyoKKzIwLjQJdXNyXzIwLnR4dAkvKjIwLjQqCisyMC41CXVzcl8yMC50eHQJLyoyMC41KgorMjEuMQl1c3JfMjEudHh0CS8qMjEuMSoKKzIxLjIJdXNyXzIxLnR4dAkvKjIxLjIqCisyMS4zCXVzcl8yMS50eHQJLyoyMS4zKgorMjEuNAl1c3JfMjEudHh0CS8qMjEuNCoKKzIxLjUJdXNyXzIxLnR4dAkvKjIxLjUqCisyMS42CXVzcl8yMS50eHQJLyoyMS42KgorMjIuMQl1c3JfMjIudHh0CS8qMjIuMSoKKzIyLjIJdXNyXzIyLnR4dAkvKjIyLjIqCisyMi4zCXVzcl8yMi50eHQJLyoyMi4zKgorMjIuNAl1c3JfMjIudHh0CS8qMjIuNCoKKzIzLjEJdXNyXzIzLnR4dAkvKjIzLjEqCisyMy4yCXVzcl8yMy50eHQJLyoyMy4yKgorMjMuMwl1c3JfMjMudHh0CS8qMjMuMyoKKzIzLjQJdXNyXzIzLnR4dAkvKjIzLjQqCisyMy41CXVzcl8yMy50eHQJLyoyMy41KgorMjQuMQl1c3JfMjQudHh0CS8qMjQuMSoKKzI0LjEwCXVzcl8yNC50eHQJLyoyNC4xMCoKKzI0LjIJdXNyXzI0LnR4dAkvKjI0LjIqCisyNC4zCXVzcl8yNC50eHQJLyoyNC4zKgorMjQuNAl1c3JfMjQudHh0CS8qMjQuNCoKKzI0LjUJdXNyXzI0LnR4dAkvKjI0LjUqCisyNC42CXVzcl8yNC50eHQJLyoyNC42KgorMjQuNwl1c3JfMjQudHh0CS8qMjQuNyoKKzI0LjgJdXNyXzI0LnR4dAkvKjI0LjgqCisyNC45CXVzcl8yNC50eHQJLyoyNC45KgorMjUuMQl1c3JfMjUudHh0CS8qMjUuMSoKKzI1LjIJdXNyXzI1LnR4dAkvKjI1LjIqCisyNS4zCXVzcl8yNS50eHQJLyoyNS4zKgorMjUuNAl1c3JfMjUudHh0CS8qMjUuNCoKKzI1LjUJdXNyXzI1LnR4dAkvKjI1LjUqCisyNi4xCXVzcl8yNi50eHQJLyoyNi4xKgorMjYuMgl1c3JfMjYudHh0CS8qMjYuMioKKzI2LjMJdXNyXzI2LnR4dAkvKjI2LjMqCisyNi40CXVzcl8yNi50eHQJLyoyNi40KgorMjcuMQl1c3JfMjcudHh0CS8qMjcuMSoKKzI3LjIJdXNyXzI3LnR4dAkvKjI3LjIqCisyNy4zCXVzcl8yNy50eHQJLyoyNy4zKgorMjcuNAl1c3JfMjcudHh0CS8qMjcuNCoKKzI3LjUJdXNyXzI3LnR4dAkvKjI3LjUqCisyNy42CXVzcl8yNy50eHQJLyoyNy42KgorMjcuNwl1c3JfMjcudHh0CS8qMjcuNyoKKzI3LjgJdXNyXzI3LnR4dAkvKjI3LjgqCisyNy45CXVzcl8yNy50eHQJLyoyNy45KgorMjguMQl1c3JfMjgudHh0CS8qMjguMSoKKzI4LjEwCXVzcl8yOC50eHQJLyoyOC4xMCoKKzI4LjIJdXNyXzI4LnR4dAkvKjI4LjIqCisyOC4zCXVzcl8yOC50eHQJLyoyOC4zKgorMjguNAl1c3JfMjgudHh0CS8qMjguNCoKKzI4LjUJdXNyXzI4LnR4dAkvKjI4LjUqCisyOC42CXVzcl8yOC50eHQJLyoyOC42KgorMjguNwl1c3JfMjgudHh0CS8qMjguNyoKKzI4LjgJdXNyXzI4LnR4dAkvKjI4LjgqCisyOC45CXVzcl8yOC50eHQJLyoyOC45KgorMjkuMQl1c3JfMjkudHh0CS8qMjkuMSoKKzI5LjIJdXNyXzI5LnR4dAkvKjI5LjIqCisyOS4zCXVzcl8yOS50eHQJLyoyOS4zKgorMjkuNAl1c3JfMjkudHh0CS8qMjkuNCoKKzI5LjUJdXNyXzI5LnR4dAkvKjI5LjUqCisyaHRtbC52aW0Jc3ludGF4LnR4dAkvKjJodG1sLnZpbSoKKzMwLjEJdXNyXzMwLnR4dAkvKjMwLjEqCiszMC4yCXVzcl8zMC50eHQJLyozMC4yKgorMzAuMwl1c3JfMzAudHh0CS8qMzAuMyoKKzMwLjQJdXNyXzMwLnR4dAkvKjMwLjQqCiszMC41CXVzcl8zMC50eHQJLyozMC41KgorMzAuNgl1c3JfMzAudHh0CS8qMzAuNioKKzMxLjEJdXNyXzMxLnR4dAkvKjMxLjEqCiszMS4yCXVzcl8zMS50eHQJLyozMS4yKgorMzEuMwl1c3JfMzEudHh0CS8qMzEuMyoKKzMxLjQJdXNyXzMxLnR4dAkvKjMxLjQqCiszMS41CXVzcl8zMS50eHQJLyozMS41KgorNDAuMQl1c3JfNDAudHh0CS8qNDAuMSoKKzQwLjIJdXNyXzQwLnR4dAkvKjQwLjIqCis0MC4zCXVzcl80MC50eHQJLyo0MC4zKgorNDEuMQl1c3JfNDEudHh0CS8qNDEuMSoKKzQxLjEwCXVzcl80MS50eHQJLyo0MS4xMCoKKzQxLjExCXVzcl80MS50eHQJLyo0MS4xMSoKKzQxLjEyCXVzcl80MS50eHQJLyo0MS4xMioKKzQxLjIJdXNyXzQxLnR4dAkvKjQxLjIqCis0MS4zCXVzcl80MS50eHQJLyo0MS4zKgorNDEuNAl1c3JfNDEudHh0CS8qNDEuNCoKKzQxLjUJdXNyXzQxLnR4dAkvKjQxLjUqCis0MS42CXVzcl80MS50eHQJLyo0MS42KgorNDEuNwl1c3JfNDEudHh0CS8qNDEuNyoKKzQxLjgJdXNyXzQxLnR4dAkvKjQxLjgqCis0MS45CXVzcl80MS50eHQJLyo0MS45KgorNDIJdXNyXzQyLnR4dAkvKjQyKgorNDIuMQl1c3JfNDIudHh0CS8qNDIuMSoKKzQyLjIJdXNyXzQyLnR4dAkvKjQyLjIqCis0Mi4zCXVzcl80Mi50eHQJLyo0Mi4zKgorNDIuNAl1c3JfNDIudHh0CS8qNDIuNCoKKzQzLjEJdXNyXzQzLnR4dAkvKjQzLjEqCis0My4yCXVzcl80My50eHQJLyo0My4yKgorNDQuMQl1c3JfNDQudHh0CS8qNDQuMSoKKzQ0LjEwCXVzcl80NC50eHQJLyo0NC4xMCoKKzQ0LjExCXVzcl80NC50eHQJLyo0NC4xMSoKKzQ0LjEyCXVzcl80NC50eHQJLyo0NC4xMioKKzQ0LjIJdXNyXzQ0LnR4dAkvKjQ0LjIqCis0NC4zCXVzcl80NC50eHQJLyo0NC4zKgorNDQuNAl1c3JfNDQudHh0CS8qNDQuNCoKKzQ0LjUJdXNyXzQ0LnR4dAkvKjQ0LjUqCis0NC42CXVzcl80NC50eHQJLyo0NC42KgorNDQuNwl1c3JfNDQudHh0CS8qNDQuNyoKKzQ0LjgJdXNyXzQ0LnR4dAkvKjQ0LjgqCis0NC45CXVzcl80NC50eHQJLyo0NC45KgorNDUuMQl1c3JfNDUudHh0CS8qNDUuMSoKKzQ1LjIJdXNyXzQ1LnR4dAkvKjQ1LjIqCis0NS4zCXVzcl80NS50eHQJLyo0NS4zKgorNDUuNAl1c3JfNDUudHh0CS8qNDUuNCoKKzQ1LjUJdXNyXzQ1LnR4dAkvKjQ1LjUqCis5MC4xCXVzcl85MC50eHQJLyo5MC4xKgorOTAuMgl1c3JfOTAudHh0CS8qOTAuMioKKzkwLjMJdXNyXzkwLnR4dAkvKjkwLjMqCis5MC40CXVzcl85MC50eHQJLyo5MC40KgorOTAuNQl1c3JfOTAudHh0CS8qOTAuNSoKKzoJY21kbGluZS50eHQJLyo6KgorOiEJdmFyaW91cy50eHQJLyo6ISoKKzohIQl2YXJpb3VzLnR4dAkvKjohISoKKzohY21kCXZhcmlvdXMudHh0CS8qOiFjbWQqCis6IXN0YXJ0CW9zX3dpbjMyLnR4dAkvKjohc3RhcnQqCis6Iwl2YXJpb3VzLnR4dAkvKjojKgorOiQJY21kbGluZS50eHQJLyo6JCoKKzolCWNtZGxpbmUudHh0CS8qOiUqCis6JgljaGFuZ2UudHh0CS8qOiYqCis6JwljbWRsaW5lLnR4dAkvKjonKgorOiwJY21kbGluZS50eHQJLyo6LCoKKzouCWNtZGxpbmUudHh0CS8qOi4qCis6LwljbWRsaW5lLnR4dAkvKjpcLyoKKzo6LgljbWRsaW5lLnR4dAkvKjo6LioKKzo6OAljbWRsaW5lLnR4dAkvKjo6OCoKKzo6ZQljbWRsaW5lLnR4dAkvKjo6ZSoKKzo6Z3MJY21kbGluZS50eHQJLyo6OmdzKgorOjpoCWNtZGxpbmUudHh0CS8qOjpoKgorOjpwCWNtZGxpbmUudHh0CS8qOjpwKgorOjpyCWNtZGxpbmUudHh0CS8qOjpyKgorOjpzCWNtZGxpbmUudHh0CS8qOjpzKgorOjp0CWNtZGxpbmUudHh0CS8qOjp0KgorOjp+CWNtZGxpbmUudHh0CS8qOjp+KgorOjsJY21kbGluZS50eHQJLyo6OyoKKzo8CWNoYW5nZS50eHQJLyo6PCoKKzo8YWJ1Zj4JY21kbGluZS50eHQJLyo6PGFidWY+KgorOjxhZmlsZT4JY21kbGluZS50eHQJLyo6PGFmaWxlPioKKzo8YW1hdGNoPgljbWRsaW5lLnR4dAkvKjo8YW1hdGNoPioKKzo8Y1dPUkQ+CWNtZGxpbmUudHh0CS8qOjxjV09SRD4qCis6PGNmaWxlPgljbWRsaW5lLnR4dAkvKjo8Y2ZpbGU+KgorOjxjd29yZD4JY21kbGluZS50eHQJLyo6PGN3b3JkPioKKzo8c2ZpbGU+CWNtZGxpbmUudHh0CS8qOjxzZmlsZT4qCis6PQl2YXJpb3VzLnR4dAkvKjo9KgorOj4JY2hhbmdlLnR4dAkvKjo+KgorOj8JY21kbGluZS50eHQJLyo6PyoKKzpACXJlcGVhdC50eHQJLyo6QCoKKzpAOglyZXBlYXQudHh0CS8qOkA6KgorOkBACXJlcGVhdC50eHQJLyo6QEAqCis6RXhwbG9yZQlwaV9leHBsLnR4dAkvKjpFeHBsb3JlKgorOk1hbglmaWxldHlwZS50eHQJLyo6TWFuKgorOk4JZWRpdGluZy50eHQJLyo6TioKKzpOZXh0CWVkaXRpbmcudHh0CS8qOk5leHQqCis6UAl2YXJpb3VzLnR4dAkvKjpQKgorOlByaW50CXZhcmlvdXMudHh0CS8qOlByaW50KgorOlNleHBsb3JlCXBpX2V4cGwudHh0CS8qOlNleHBsb3JlKgorOlRPaHRtbAlzeW50YXgudHh0CS8qOlRPaHRtbCoKKzpYCWVkaXRpbmcudHh0CS8qOlgqCis6XGJhcgljbWRsaW5lLnR4dAkvKjpcXGJhcioKKzpfIQljbWRsaW5lLnR4dAkvKjpfISoKKzpfIwljbWRsaW5lLnR4dAkvKjpfIyoKKzpfIyMJY21kbGluZS50eHQJLyo6XyMjKgorOl8lCWNtZGxpbmUudHh0CS8qOl8lKgorOl8lOgljbWRsaW5lLnR4dAkvKjpfJToqCis6XyU8CWNtZGxpbmUudHh0CS8qOl8lPCoKKzphCWluc2VydC50eHQJLyo6YSoKKzphYgltYXAudHh0CS8qOmFiKgorOmFiYnJldmlhdGUJbWFwLnR4dAkvKjphYmJyZXZpYXRlKgorOmFiYnJldmlhdGUtPGJ1ZmZlcj4JbWFwLnR4dAkvKjphYmJyZXZpYXRlLTxidWZmZXI+KgorOmFiYnJldmlhdGUtbG9jYWwJbWFwLnR4dAkvKjphYmJyZXZpYXRlLWxvY2FsKgorOmFiYwltYXAudHh0CS8qOmFiYyoKKzphYmNsZWFyCW1hcC50eHQJLyo6YWJjbGVhcioKKzphYm8Jd2luZG93cy50eHQJLyo6YWJvKgorOmFib3ZlbGVmdAl3aW5kb3dzLnR4dAkvKjphYm92ZWxlZnQqCis6YWwJd2luZG93cy50eHQJLyo6YWwqCis6YWxsCXdpbmRvd3MudHh0CS8qOmFsbCoKKzphbQlndWkudHh0CS8qOmFtKgorOmFtZW51CWd1aS50eHQJLyo6YW1lbnUqCis6YW4JZ3VpLnR4dAkvKjphbioKKzphbm9yZW1lbnUJZ3VpLnR4dAkvKjphbm9yZW1lbnUqCis6YXBwZW5kCWluc2VydC50eHQJLyo6YXBwZW5kKgorOmFyCWVkaXRpbmcudHh0CS8qOmFyKgorOmFyZ2EJZWRpdGluZy50eHQJLyo6YXJnYSoKKzphcmdhZGQJZWRpdGluZy50eHQJLyo6YXJnYWRkKgorOmFyZ2QJZWRpdGluZy50eHQJLyo6YXJnZCoKKzphcmdkZWxldGUJZWRpdGluZy50eHQJLyo6YXJnZGVsZXRlKgorOmFyZ2RvCWVkaXRpbmcudHh0CS8qOmFyZ2RvKgorOmFyZ2UJZWRpdGluZy50eHQJLyo6YXJnZSoKKzphcmdlZGl0CWVkaXRpbmcudHh0CS8qOmFyZ2VkaXQqCis6YXJnZ2xvYmFsCWVkaXRpbmcudHh0CS8qOmFyZ2dsb2JhbCoKKzphcmdsb2NhbAllZGl0aW5nLnR4dAkvKjphcmdsb2NhbCoKKzphcmdzCWVkaXRpbmcudHh0CS8qOmFyZ3MqCis6YXJnc19mCWVkaXRpbmcudHh0CS8qOmFyZ3NfZioKKzphcmdzX2YhCWVkaXRpbmcudHh0CS8qOmFyZ3NfZiEqCis6YXJndQllZGl0aW5nLnR4dAkvKjphcmd1KgorOmFyZ3VtZW50CWVkaXRpbmcudHh0CS8qOmFyZ3VtZW50KgorOmFzCXZhcmlvdXMudHh0CS8qOmFzKgorOmFzY2lpCXZhcmlvdXMudHh0CS8qOmFzY2lpKgorOmF1CWF1dG9jbWQudHh0CS8qOmF1KgorOmF1ZwlhdXRvY21kLnR4dAkvKjphdWcqCis6YXVncm91cAlhdXRvY21kLnR4dAkvKjphdWdyb3VwKgorOmF1Z3JvdXAtZGVsZXRlCWF1dG9jbWQudHh0CS8qOmF1Z3JvdXAtZGVsZXRlKgorOmF1bglndWkudHh0CS8qOmF1bioKKzphdW5tZW51CWd1aS50eHQJLyo6YXVubWVudSoKKzphdXRvY21kCWF1dG9jbWQudHh0CS8qOmF1dG9jbWQqCis6Ygl3aW5kb3dzLnR4dAkvKjpiKgorOmJOCXdpbmRvd3MudHh0CS8qOmJOKgorOmJOZXh0CXdpbmRvd3MudHh0CS8qOmJOZXh0KgorOmJhCXdpbmRvd3MudHh0CS8qOmJhKgorOmJhZAl3aW5kb3dzLnR4dAkvKjpiYWQqCis6YmFkZAl3aW5kb3dzLnR4dAkvKjpiYWRkKgorOmJhbGwJd2luZG93cy50eHQJLyo6YmFsbCoKKzpiYXIJY21kbGluZS50eHQJLyo6YmFyKgorOmJkCXdpbmRvd3MudHh0CS8qOmJkKgorOmJkZWwJd2luZG93cy50eHQJLyo6YmRlbCoKKzpiZGVsZXRlCXdpbmRvd3MudHh0CS8qOmJkZWxldGUqCis6YmUJZ3VpLnR4dAkvKjpiZSoKKzpiZWhhdmUJZ3VpLnR4dAkvKjpiZWhhdmUqCis6YmVsCXdpbmRvd3MudHh0CS8qOmJlbCoKKzpiZWxvd3JpZ2h0CXdpbmRvd3MudHh0CS8qOmJlbG93cmlnaHQqCis6YmYJd2luZG93cy50eHQJLyo6YmYqCis6YmZpcnN0CXdpbmRvd3MudHh0CS8qOmJmaXJzdCoKKzpibAl3aW5kb3dzLnR4dAkvKjpibCoKKzpibGFzdAl3aW5kb3dzLnR4dAkvKjpibGFzdCoKKzpibQl3aW5kb3dzLnR4dAkvKjpibSoKKzpibW9kaWZpZWQJd2luZG93cy50eHQJLyo6Ym1vZGlmaWVkKgorOmJuCXdpbmRvd3MudHh0CS8qOmJuKgorOmJuZXh0CXdpbmRvd3MudHh0CS8qOmJuZXh0KgorOmJvdHJpZ2h0CXdpbmRvd3MudHh0CS8qOmJvdHJpZ2h0KgorOmJwCXdpbmRvd3MudHh0CS8qOmJwKgorOmJwcmV2aW91cwl3aW5kb3dzLnR4dAkvKjpicHJldmlvdXMqCis6YnIJd2luZG93cy50eHQJLyo6YnIqCis6YnJlYQlldmFsLnR4dAkvKjpicmVhKgorOmJyZWFrCWV2YWwudHh0CS8qOmJyZWFrKgorOmJyZWFrYQlyZXBlYXQudHh0CS8qOmJyZWFrYSoKKzpicmVha2FkZAlyZXBlYXQudHh0CS8qOmJyZWFrYWRkKgorOmJyZWFrZAlyZXBlYXQudHh0CS8qOmJyZWFrZCoKKzpicmVha2RlbAlyZXBlYXQudHh0CS8qOmJyZWFrZGVsKgorOmJyZWFrbAlyZXBlYXQudHh0CS8qOmJyZWFrbCoKKzpicmVha2xpc3QJcmVwZWF0LnR4dAkvKjpicmVha2xpc3QqCis6YnJld2luZAl3aW5kb3dzLnR4dAkvKjpicmV3aW5kKgorOmJybwllZGl0aW5nLnR4dAkvKjpicm8qCis6YnJvd3NlCWVkaXRpbmcudHh0CS8qOmJyb3dzZSoKKzpicm93c2Utc2V0CW9wdGlvbnMudHh0CS8qOmJyb3dzZS1zZXQqCis6YnUJd2luZG93cy50eHQJLyo6YnUqCis6YnVmCXdpbmRvd3MudHh0CS8qOmJ1ZioKKzpidWZkbwl3aW5kb3dzLnR4dAkvKjpidWZkbyoKKzpidWZmZXIJd2luZG93cy50eHQJLyo6YnVmZmVyKgorOmJ1ZmZlci0hCXdpbmRvd3MudHh0CS8qOmJ1ZmZlci0hKgorOmJ1ZmZlcnMJd2luZG93cy50eHQJLyo6YnVmZmVycyoKKzpidW4Jd2luZG93cy50eHQJLyo6YnVuKgorOmJ1bmxvYWQJd2luZG93cy50eHQJLyo6YnVubG9hZCoKKzpidwl3aW5kb3dzLnR4dAkvKjpidyoKKzpid2lwZQl3aW5kb3dzLnR4dAkvKjpid2lwZSoKKzpid2lwZW91dAl3aW5kb3dzLnR4dAkvKjpid2lwZW91dCoKKzpjCWNoYW5nZS50eHQJLyo6YyoKKzpjTglxdWlja2ZpeC50eHQJLyo6Y04qCis6Y05leHQJcXVpY2tmaXgudHh0CS8qOmNOZXh0KgorOmNOZglxdWlja2ZpeC50eHQJLyo6Y05mKgorOmNOZmlsZQlxdWlja2ZpeC50eHQJLyo6Y05maWxlKgorOmNhCW1hcC50eHQJLyo6Y2EqCis6Y2FiYnJldgltYXAudHh0CS8qOmNhYmJyZXYqCis6Y2FiYwltYXAudHh0CS8qOmNhYmMqCis6Y2FiY2xlYXIJbWFwLnR4dAkvKjpjYWJjbGVhcioKKzpjYWwJZXZhbC50eHQJLyo6Y2FsKgorOmNhbGwJZXZhbC50eHQJLyo6Y2FsbCoKKzpjYXQJZXZhbC50eHQJLyo6Y2F0KgorOmNhdGNoCWV2YWwudHh0CS8qOmNhdGNoKgorOmNjCXF1aWNrZml4LnR4dAkvKjpjYyoKKzpjY2wJcXVpY2tmaXgudHh0CS8qOmNjbCoKKzpjY2xvc2UJcXVpY2tmaXgudHh0CS8qOmNjbG9zZSoKKzpjZAllZGl0aW5nLnR4dAkvKjpjZCoKKzpjZC0JZWRpdGluZy50eHQJLyo6Y2QtKgorOmNlCWNoYW5nZS50eHQJLyo6Y2UqCis6Y2VudGVyCWNoYW5nZS50eHQJLyo6Y2VudGVyKgorOmNmCXF1aWNrZml4LnR4dAkvKjpjZioKKzpjZmlsZQlxdWlja2ZpeC50eHQJLyo6Y2ZpbGUqCis6Y2ZpcglxdWlja2ZpeC50eHQJLyo6Y2ZpcioKKzpjZmlyc3QJcXVpY2tmaXgudHh0CS8qOmNmaXJzdCoKKzpjZwlxdWlja2ZpeC50eHQJLyo6Y2cqCis6Y2dldGZpbGUJcXVpY2tmaXgudHh0CS8qOmNnZXRmaWxlKgorOmNoCWNoYW5nZS50eHQJLyo6Y2gqCis6Y2hhbmdlCWNoYW5nZS50eHQJLyo6Y2hhbmdlKgorOmNoYW5nZXMJbW90aW9uLnR4dAkvKjpjaGFuZ2VzKgorOmNoZAllZGl0aW5nLnR4dAkvKjpjaGQqCis6Y2hkaXIJZWRpdGluZy50eHQJLyo6Y2hkaXIqCis6Y2hlCXRhZ3NyY2gudHh0CS8qOmNoZSoKKzpjaGVja3BhdGgJdGFnc3JjaC50eHQJLyo6Y2hlY2twYXRoKgorOmNoZWNrdAllZGl0aW5nLnR4dAkvKjpjaGVja3QqCis6Y2hlY2t0aW1lCWVkaXRpbmcudHh0CS8qOmNoZWNrdGltZSoKKzpjbAlxdWlja2ZpeC50eHQJLyo6Y2wqCis6Y2xhCXF1aWNrZml4LnR4dAkvKjpjbGEqCis6Y2xhc3QJcXVpY2tmaXgudHh0CS8qOmNsYXN0KgorOmNsaXN0CXF1aWNrZml4LnR4dAkvKjpjbGlzdCoKKzpjbG8Jd2luZG93cy50eHQJLyo6Y2xvKgorOmNsb3NlCXdpbmRvd3MudHh0CS8qOmNsb3NlKgorOmNtCW1hcC50eHQJLyo6Y20qCis6Y21hcAltYXAudHh0CS8qOmNtYXAqCis6Y21hcF9sCW1hcC50eHQJLyo6Y21hcF9sKgorOmNtYXBjCW1hcC50eHQJLyo6Y21hcGMqCis6Y21hcGNsZWFyCW1hcC50eHQJLyo6Y21hcGNsZWFyKgorOmNtZQlndWkudHh0CS8qOmNtZSoKKzpjbWVudQlndWkudHh0CS8qOmNtZW51KgorOmNuCXF1aWNrZml4LnR4dAkvKjpjbioKKzpjbmV3CXF1aWNrZml4LnR4dAkvKjpjbmV3KgorOmNuZXdlcglxdWlja2ZpeC50eHQJLyo6Y25ld2VyKgorOmNuZXh0CXF1aWNrZml4LnR4dAkvKjpjbmV4dCoKKzpjbmYJcXVpY2tmaXgudHh0CS8qOmNuZioKKzpjbmZpbGUJcXVpY2tmaXgudHh0CS8qOmNuZmlsZSoKKzpjbm8JbWFwLnR4dAkvKjpjbm8qCis6Y25vcmVhCW1hcC50eHQJLyo6Y25vcmVhKgorOmNub3JlYWJicmV2CW1hcC50eHQJLyo6Y25vcmVhYmJyZXYqCis6Y25vcmVtYXAJbWFwLnR4dAkvKjpjbm9yZW1hcCoKKzpjbm9yZW1lCWd1aS50eHQJLyo6Y25vcmVtZSoKKzpjbm9yZW1lbnUJZ3VpLnR4dAkvKjpjbm9yZW1lbnUqCis6Y28JY2hhbmdlLnR4dAkvKjpjbyoKKzpjb2wJcXVpY2tmaXgudHh0CS8qOmNvbCoKKzpjb2xkZXIJcXVpY2tmaXgudHh0CS8qOmNvbGRlcioKKzpjb2xvCXN5bnRheC50eHQJLyo6Y29sbyoKKzpjb2xvcnNjaGVtZQlzeW50YXgudHh0CS8qOmNvbG9yc2NoZW1lKgorOmNvbQltYXAudHh0CS8qOmNvbSoKKzpjb21jCW1hcC50eHQJLyo6Y29tYyoKKzpjb21jbGVhcgltYXAudHh0CS8qOmNvbWNsZWFyKgorOmNvbW1hbmQJbWFwLnR4dAkvKjpjb21tYW5kKgorOmNvbW1hbmQtY29tcGxldGlvbgltYXAudHh0CS8qOmNvbW1hbmQtY29tcGxldGlvbioKKzpjb21tYW5kLWNvbXBsZXRpb24tY3VzdG9tCW1hcC50eHQJLyo6Y29tbWFuZC1jb21wbGV0aW9uLWN1c3RvbSoKKzpjb21tZW50CWV2YWwudHh0CS8qOmNvbW1lbnQqCis6Y29tcAlxdWlja2ZpeC50eHQJLyo6Y29tcCoKKzpjb21waWxlcglxdWlja2ZpeC50eHQJLyo6Y29tcGlsZXIqCis6Y29uCWV2YWwudHh0CS8qOmNvbioKKzpjb25mCWVkaXRpbmcudHh0CS8qOmNvbmYqCis6Y29uZmlybQllZGl0aW5nLnR4dAkvKjpjb25maXJtKgorOmNvbnRpbnVlCWV2YWwudHh0CS8qOmNvbnRpbnVlKgorOmNvcGUJcXVpY2tmaXgudHh0CS8qOmNvcGUqCis6Y29wZW4JcXVpY2tmaXgudHh0CS8qOmNvcGVuKgorOmNvcHkJY2hhbmdlLnR4dAkvKjpjb3B5KgorOmNwCXF1aWNrZml4LnR4dAkvKjpjcCoKKzpjcGYJcXVpY2tmaXgudHh0CS8qOmNwZioKKzpjcGZpbGUJcXVpY2tmaXgudHh0CS8qOmNwZmlsZSoKKzpjcHJldmlvdXMJcXVpY2tmaXgudHh0CS8qOmNwcmV2aW91cyoKKzpjcQlxdWlja2ZpeC50eHQJLyo6Y3EqCis6Y3F1aXQJcXVpY2tmaXgudHh0CS8qOmNxdWl0KgorOmNyCXF1aWNrZml4LnR4dAkvKjpjcioKKzpjcmV3aW5kCXF1aWNrZml4LnR4dAkvKjpjcmV3aW5kKgorOmNzCWlmX2NzY29wLnR4dAkvKjpjcyoKKzpjc2NvcGUJaWZfY3Njb3AudHh0CS8qOmNzY29wZSoKKzpjc3RhZwlpZl9jc2NvcC50eHQJLyo6Y3N0YWcqCis6Y3UJbWFwLnR4dAkvKjpjdSoKKzpjdW5hCW1hcC50eHQJLyo6Y3VuYSoKKzpjdW5hYmJyZXYJbWFwLnR4dAkvKjpjdW5hYmJyZXYqCis6Y3VubWFwCW1hcC50eHQJLyo6Y3VubWFwKgorOmN1bm1lCWd1aS50eHQJLyo6Y3VubWUqCis6Y3VubWVudQlndWkudHh0CS8qOmN1bm1lbnUqCis6Y3cJcXVpY2tmaXgudHh0CS8qOmN3KgorOmN3aW5kb3cJcXVpY2tmaXgudHh0CS8qOmN3aW5kb3cqCis6ZAljaGFuZ2UudHh0CS8qOmQqCis6ZGUJY2hhbmdlLnR4dAkvKjpkZSoKKzpkZWJ1ZwlyZXBlYXQudHh0CS8qOmRlYnVnKgorOmRlYnVnZwlyZXBlYXQudHh0CS8qOmRlYnVnZyoKKzpkZWJ1Z2dyZWVkeQlyZXBlYXQudHh0CS8qOmRlYnVnZ3JlZWR5KgorOmRlbAljaGFuZ2UudHh0CS8qOmRlbCoKKzpkZWxjCW1hcC50eHQJLyo6ZGVsYyoKKzpkZWxjb21tYW5kCW1hcC50eHQJLyo6ZGVsY29tbWFuZCoKKzpkZWxjcgl0b2RvLnR4dAkvKjpkZWxjcioKKzpkZWxldGUJY2hhbmdlLnR4dAkvKjpkZWxldGUqCis6ZGVsZglldmFsLnR4dAkvKjpkZWxmKgorOmRlbGZ1bmN0aW9uCWV2YWwudHh0CS8qOmRlbGZ1bmN0aW9uKgorOmRpCWNoYW5nZS50eHQJLyo6ZGkqCis6ZGlmZmcJZGlmZi50eHQJLyo6ZGlmZmcqCis6ZGlmZmdldAlkaWZmLnR4dAkvKjpkaWZmZ2V0KgorOmRpZmZwCWRpZmYudHh0CS8qOmRpZmZwKgorOmRpZmZwYXRjaAlkaWZmLnR4dAkvKjpkaWZmcGF0Y2gqCis6ZGlmZnB1CWRpZmYudHh0CS8qOmRpZmZwdSoKKzpkaWZmcHV0CWRpZmYudHh0CS8qOmRpZmZwdXQqCis6ZGlmZnMJZGlmZi50eHQJLyo6ZGlmZnMqCis6ZGlmZnNwbGl0CWRpZmYudHh0CS8qOmRpZmZzcGxpdCoKKzpkaWZmdAlkaWZmLnR4dAkvKjpkaWZmdCoKKzpkaWZmdGhpcwlkaWZmLnR4dAkvKjpkaWZmdGhpcyoKKzpkaWZmdQlkaWZmLnR4dAkvKjpkaWZmdSoKKzpkaWZmdXBkYXRlCWRpZmYudHh0CS8qOmRpZmZ1cGRhdGUqCis6ZGlnCWRpZ3JhcGgudHh0CS8qOmRpZyoKKzpkaWdyYXBocwlkaWdyYXBoLnR4dAkvKjpkaWdyYXBocyoKKzpkaXNwbGF5CWNoYW5nZS50eHQJLyo6ZGlzcGxheSoKKzpkagl0YWdzcmNoLnR4dAkvKjpkaioKKzpkanVtcAl0YWdzcmNoLnR4dAkvKjpkanVtcCoKKzpkbAl0YWdzcmNoLnR4dAkvKjpkbCoKKzpkbGlzdAl0YWdzcmNoLnR4dAkvKjpkbGlzdCoKKzpkbwlhdXRvY21kLnR4dAkvKjpkbyoKKzpkb2F1CWF1dG9jbWQudHh0CS8qOmRvYXUqCis6ZG9hdXRvYQlhdXRvY21kLnR4dAkvKjpkb2F1dG9hKgorOmRvYXV0b2FsbAlhdXRvY21kLnR4dAkvKjpkb2F1dG9hbGwqCis6ZG9hdXRvY21kCWF1dG9jbWQudHh0CS8qOmRvYXV0b2NtZCoKKzpkcgl3aW5kb3dzLnR4dAkvKjpkcioKKzpkcm9wCXdpbmRvd3MudHh0CS8qOmRyb3AqCis6ZHMJdGFnc3JjaC50eHQJLyo6ZHMqCis6ZHNlYXJjaAl0YWdzcmNoLnR4dAkvKjpkc2VhcmNoKgorOmRzcAl0YWdzcmNoLnR4dAkvKjpkc3AqCis6ZHNwbGl0CXRhZ3NyY2gudHh0CS8qOmRzcGxpdCoKKzplCWVkaXRpbmcudHh0CS8qOmUqCis6ZWMJZXZhbC50eHQJLyo6ZWMqCis6ZWNobwlldmFsLnR4dAkvKjplY2hvKgorOmVjaG9lCWV2YWwudHh0CS8qOmVjaG9lKgorOmVjaG9lcnIJZXZhbC50eHQJLyo6ZWNob2VycioKKzplY2hvaAlldmFsLnR4dAkvKjplY2hvaCoKKzplY2hvaGwJZXZhbC50eHQJLyo6ZWNob2hsKgorOmVjaG9tCWV2YWwudHh0CS8qOmVjaG9tKgorOmVjaG9tc2cJZXZhbC50eHQJLyo6ZWNob21zZyoKKzplY2hvbglldmFsLnR4dAkvKjplY2hvbioKKzplZGl0CWVkaXRpbmcudHh0CS8qOmVkaXQqCis6ZWRpdCEJZWRpdGluZy50eHQJLyo6ZWRpdCEqCis6ZWRpdCFfZgllZGl0aW5nLnR4dAkvKjplZGl0IV9mKgorOmVkaXRfZgllZGl0aW5nLnR4dAkvKjplZGl0X2YqCis6ZWwJZXZhbC50eHQJLyo6ZWwqCis6ZWxzZQlldmFsLnR4dAkvKjplbHNlKgorOmVsc2VpCWV2YWwudHh0CS8qOmVsc2VpKgorOmVsc2VpZglldmFsLnR4dAkvKjplbHNlaWYqCis6ZW0JZ3VpLnR4dAkvKjplbSoKKzplbWVudQlndWkudHh0CS8qOmVtZW51KgorOmVuCWV2YWwudHh0CS8qOmVuKgorOmVuZGYJZXZhbC50eHQJLyo6ZW5kZioKKzplbmRmdW5jdGlvbglldmFsLnR4dAkvKjplbmRmdW5jdGlvbioKKzplbmRpZglldmFsLnR4dAkvKjplbmRpZioKKzplbmR0CWV2YWwudHh0CS8qOmVuZHQqCis6ZW5kdHJ5CWV2YWwudHh0CS8qOmVuZHRyeSoKKzplbmR3CWV2YWwudHh0CS8qOmVuZHcqCis6ZW5kd2hpbGUJZXZhbC50eHQJLyo6ZW5kd2hpbGUqCis6ZW5lCWVkaXRpbmcudHh0CS8qOmVuZSoKKzplbmUhCWVkaXRpbmcudHh0CS8qOmVuZSEqCis6ZW5ldwllZGl0aW5nLnR4dAkvKjplbmV3KgorOmVuZXchCWVkaXRpbmcudHh0CS8qOmVuZXchKgorOmV4CWVkaXRpbmcudHh0CS8qOmV4KgorOmV4ZQlldmFsLnR4dAkvKjpleGUqCis6ZXhlY3V0ZQlldmFsLnR4dAkvKjpleGVjdXRlKgorOmV4aQllZGl0aW5nLnR4dAkvKjpleGkqCis6ZXhpdAllZGl0aW5nLnR4dAkvKjpleGl0KgorOmYJZWRpdGluZy50eHQJLyo6ZioKKzpmaQllZGl0aW5nLnR4dAkvKjpmaSoKKzpmaWxlCWVkaXRpbmcudHh0CS8qOmZpbGUqCis6ZmlsZV9mCWVkaXRpbmcudHh0CS8qOmZpbGVfZioKKzpmaWxlbmFtZQllZGl0aW5nLnR4dAkvKjpmaWxlbmFtZSoKKzpmaWxlcwl3aW5kb3dzLnR4dAkvKjpmaWxlcyoKKzpmaWxldAlmaWxldHlwZS50eHQJLyo6ZmlsZXQqCis6ZmlsZXR5cGUJZmlsZXR5cGUudHh0CS8qOmZpbGV0eXBlKgorOmZpbGV0eXBlLWluZGVudC1vZmYJZmlsZXR5cGUudHh0CS8qOmZpbGV0eXBlLWluZGVudC1vZmYqCis6ZmlsZXR5cGUtaW5kZW50LW9uCWZpbGV0eXBlLnR4dAkvKjpmaWxldHlwZS1pbmRlbnQtb24qCis6ZmlsZXR5cGUtb2ZmCWZpbGV0eXBlLnR4dAkvKjpmaWxldHlwZS1vZmYqCis6ZmlsZXR5cGUtb3ZlcnZpZXcJZmlsZXR5cGUudHh0CS8qOmZpbGV0eXBlLW92ZXJ2aWV3KgorOmZpbGV0eXBlLXBsdWdpbi1vZmYJZmlsZXR5cGUudHh0CS8qOmZpbGV0eXBlLXBsdWdpbi1vZmYqCis6ZmlsZXR5cGUtcGx1Z2luLW9uCWZpbGV0eXBlLnR4dAkvKjpmaWxldHlwZS1wbHVnaW4tb24qCis6ZmluCWVkaXRpbmcudHh0CS8qOmZpbioKKzpmaW5hCWV2YWwudHh0CS8qOmZpbmEqCis6ZmluYWxseQlldmFsLnR4dAkvKjpmaW5hbGx5KgorOmZpbmQJZWRpdGluZy50eHQJLyo6ZmluZCoKKzpmaW5pCXJlcGVhdC50eHQJLyo6ZmluaSoKKzpmaW5pc2gJcmVwZWF0LnR4dAkvKjpmaW5pc2gqCis6ZmlyCWVkaXRpbmcudHh0CS8qOmZpcioKKzpmaXJzdAllZGl0aW5nLnR4dAkvKjpmaXJzdCoKKzpmaXgJb3B0aW9ucy50eHQJLyo6Zml4KgorOmZpeGRlbAlvcHRpb25zLnR4dAkvKjpmaXhkZWwqCis6Zm8JZm9sZC50eHQJLyo6Zm8qCis6Zm9sZAlmb2xkLnR4dAkvKjpmb2xkKgorOmZvbGRjCWZvbGQudHh0CS8qOmZvbGRjKgorOmZvbGRjbG9zZQlmb2xkLnR4dAkvKjpmb2xkY2xvc2UqCis6Zm9sZGQJZm9sZC50eHQJLyo6Zm9sZGQqCis6Zm9sZGRvYwlmb2xkLnR4dAkvKjpmb2xkZG9jKgorOmZvbGRkb2Nsb3NlZAlmb2xkLnR4dAkvKjpmb2xkZG9jbG9zZWQqCis6Zm9sZGRvb3Blbglmb2xkLnR4dAkvKjpmb2xkZG9vcGVuKgorOmZvbGRvCWZvbGQudHh0CS8qOmZvbGRvKgorOmZvbGRvcGVuCWZvbGQudHh0CS8qOmZvbGRvcGVuKgorOmZ1CWV2YWwudHh0CS8qOmZ1KgorOmZ1bmN0aW9uCWV2YWwudHh0CS8qOmZ1bmN0aW9uKgorOmcJcmVwZWF0LnR4dAkvKjpnKgorOmdsb2JhbAlyZXBlYXQudHh0CS8qOmdsb2JhbCoKKzpnbwltb3Rpb24udHh0CS8qOmdvKgorOmdvdG8JbW90aW9uLnR4dAkvKjpnb3RvKgorOmdyCXF1aWNrZml4LnR4dAkvKjpncioKKzpncmVwCXF1aWNrZml4LnR4dAkvKjpncmVwKgorOmdyZXBhCXF1aWNrZml4LnR4dAkvKjpncmVwYSoKKzpncmVwYWRkCXF1aWNrZml4LnR4dAkvKjpncmVwYWRkKgorOmd1CWd1aV94MTEudHh0CS8qOmd1KgorOmd1aQlndWlfeDExLnR4dAkvKjpndWkqCis6Z3YJZ3VpX3gxMS50eHQJLyo6Z3YqCis6Z3ZpbQlndWlfeDExLnR4dAkvKjpndmltKgorOmgJdmFyaW91cy50eHQJLyo6aCoKKzpoYQl2YXJpb3VzLnR4dAkvKjpoYSoKKzpoYXJkY29weQl2YXJpb3VzLnR4dAkvKjpoYXJkY29weSoKKzpoZWxwCXZhcmlvdXMudHh0CS8qOmhlbHAqCis6aGVscGYJdmFyaW91cy50eHQJLyo6aGVscGYqCis6aGVscGZpbmQJdmFyaW91cy50eHQJLyo6aGVscGZpbmQqCis6aGVscGcJdmFyaW91cy50eHQJLyo6aGVscGcqCis6aGVscGdyZXAJdmFyaW91cy50eHQJLyo6aGVscGdyZXAqCis6aGVscHQJdmFyaW91cy50eHQJLyo6aGVscHQqCis6aGVscHRhZ3MJdmFyaW91cy50eHQJLyo6aGVscHRhZ3MqCis6aGkJc3ludGF4LnR4dAkvKjpoaSoKKzpoaS1kZWZhdWx0CXN5bnRheC50eHQJLyo6aGktZGVmYXVsdCoKKzpoaS1saW5rCXN5bnRheC50eHQJLyo6aGktbGluayoKKzpoaS1ub3JtYWwJc3ludGF4LnR4dAkvKjpoaS1ub3JtYWwqCis6aGktbm9ybWFsLWN0ZXJtCXN5bnRheC50eHQJLyo6aGktbm9ybWFsLWN0ZXJtKgorOmhpZGUJd2luZG93cy50eHQJLyo6aGlkZSoKKzpoaWdobGlnaHQJc3ludGF4LnR4dAkvKjpoaWdobGlnaHQqCis6aGlnaGxpZ2h0LWRlZmF1bHQJc3ludGF4LnR4dAkvKjpoaWdobGlnaHQtZGVmYXVsdCoKKzpoaWdobGlnaHQtbGluawlzeW50YXgudHh0CS8qOmhpZ2hsaWdodC1saW5rKgorOmhpZ2hsaWdodC1ub3JtYWwJc3ludGF4LnR4dAkvKjpoaWdobGlnaHQtbm9ybWFsKgorOmhpc3RvcnkJY21kbGluZS50eHQJLyo6aGlzdG9yeSoKKzpoaXN0b3J5LWluZGV4aW5nCWNtZGxpbmUudHh0CS8qOmhpc3RvcnktaW5kZXhpbmcqCis6aQlpbnNlcnQudHh0CS8qOmkqCis6aWEJbWFwLnR4dAkvKjppYSoKKzppYWJicmV2CW1hcC50eHQJLyo6aWFiYnJldioKKzppYWJjCW1hcC50eHQJLyo6aWFiYyoKKzppYWJjbGVhcgltYXAudHh0CS8qOmlhYmNsZWFyKgorOmlmCWV2YWwudHh0CS8qOmlmKgorOmlqCXRhZ3NyY2gudHh0CS8qOmlqKgorOmlqdW1wCXRhZ3NyY2gudHh0CS8qOmlqdW1wKgorOmlsCXRhZ3NyY2gudHh0CS8qOmlsKgorOmlsaXN0CXRhZ3NyY2gudHh0CS8qOmlsaXN0KgorOmltCW1hcC50eHQJLyo6aW0qCis6aW1hcAltYXAudHh0CS8qOmltYXAqCis6aW1hcF9sCW1hcC50eHQJLyo6aW1hcF9sKgorOmltYXBjCW1hcC50eHQJLyo6aW1hcGMqCis6aW1hcGNsZWFyCW1hcC50eHQJLyo6aW1hcGNsZWFyKgorOmltZQlndWkudHh0CS8qOmltZSoKKzppbWVudQlndWkudHh0CS8qOmltZW51KgorOmluCWluc2VydC50eHQJLyo6aW4qCis6aW5kZXgJaW5kZXgudHh0CS8qOmluZGV4KgorOmlubwltYXAudHh0CS8qOmlubyoKKzppbm9yZWEJbWFwLnR4dAkvKjppbm9yZWEqCis6aW5vcmVhYmJyZXYJbWFwLnR4dAkvKjppbm9yZWFiYnJldioKKzppbm9yZW1hcAltYXAudHh0CS8qOmlub3JlbWFwKgorOmlub3JlbWUJZ3VpLnR4dAkvKjppbm9yZW1lKgorOmlub3JlbWVudQlndWkudHh0CS8qOmlub3JlbWVudSoKKzppbnNlcnQJaW5zZXJ0LnR4dAkvKjppbnNlcnQqCis6aW50cm8Jc3RhcnRpbmcudHh0CS8qOmludHJvKgorOmlzCXRhZ3NyY2gudHh0CS8qOmlzKgorOmlzZWFyY2gJdGFnc3JjaC50eHQJLyo6aXNlYXJjaCoKKzppc3AJdGFnc3JjaC50eHQJLyo6aXNwKgorOmlzcGxpdAl0YWdzcmNoLnR4dAkvKjppc3BsaXQqCis6aXUJbWFwLnR4dAkvKjppdSoKKzppdW5hCW1hcC50eHQJLyo6aXVuYSoKKzppdW5hYmJyZXYJbWFwLnR4dAkvKjppdW5hYmJyZXYqCis6aXVubWFwCW1hcC50eHQJLyo6aXVubWFwKgorOml1bm1lCWd1aS50eHQJLyo6aXVubWUqCis6aXVubWVudQlndWkudHh0CS8qOml1bm1lbnUqCis6agljaGFuZ2UudHh0CS8qOmoqCis6am9pbgljaGFuZ2UudHh0CS8qOmpvaW4qCis6anUJbW90aW9uLnR4dAkvKjpqdSoKKzpqdW1wcwltb3Rpb24udHh0CS8qOmp1bXBzKgorOmsJbW90aW9uLnR4dAkvKjprKgorOmtlZQltb3Rpb24udHh0CS8qOmtlZSoKKzprZWVwagltb3Rpb24udHh0CS8qOmtlZXBqKgorOmtlZXBqdW1wcwltb3Rpb24udHh0CS8qOmtlZXBqdW1wcyoKKzprZWVwbWFya3MJbW90aW9uLnR4dAkvKjprZWVwbWFya3MqCis6bAl2YXJpb3VzLnR4dAkvKjpsKgorOmxhCWVkaXRpbmcudHh0CS8qOmxhKgorOmxhbgltbGFuZy50eHQJLyo6bGFuKgorOmxhbmcJbWxhbmcudHh0CS8qOmxhbmcqCis6bGFuZ3VhZ2UJbWxhbmcudHh0CS8qOmxhbmd1YWdlKgorOmxhc3QJZWRpdGluZy50eHQJLyo6bGFzdCoKKzpsYwllZGl0aW5nLnR4dAkvKjpsYyoKKzpsY2QJZWRpdGluZy50eHQJLyo6bGNkKgorOmxjaAllZGl0aW5nLnR4dAkvKjpsY2gqCis6bGNoZGlyCWVkaXRpbmcudHh0CS8qOmxjaGRpcioKKzpsZQljaGFuZ2UudHh0CS8qOmxlKgorOmxlZnQJY2hhbmdlLnR4dAkvKjpsZWZ0KgorOmxlZnRhCXdpbmRvd3MudHh0CS8qOmxlZnRhKgorOmxlZnRhYm92ZQl3aW5kb3dzLnR4dAkvKjpsZWZ0YWJvdmUqCis6bGV0CWV2YWwudHh0CS8qOmxldCoKKzpsZXQtJAlldmFsLnR4dAkvKjpsZXQtJCoKKzpsZXQtQAlldmFsLnR4dAkvKjpsZXQtQCoKKzpsZXQtZW52aXJvbm1lbnQJZXZhbC50eHQJLyo6bGV0LWVudmlyb25tZW50KgorOmxldC1vcHRpb24JZXZhbC50eHQJLyo6bGV0LW9wdGlvbioKKzpsZXQtcmVnaXN0ZXIJZXZhbC50eHQJLyo6bGV0LXJlZ2lzdGVyKgorOmxldC1zdGFyCWV2YWwudHh0CS8qOmxldC1zdGFyKgorOmxpc3QJdmFyaW91cy50eHQJLyo6bGlzdCoKKzpsbQltYXAudHh0CS8qOmxtKgorOmxtYXAJbWFwLnR4dAkvKjpsbWFwKgorOmxtYXBfbAltYXAudHh0CS8qOmxtYXBfbCoKKzpsbWFwYwltYXAudHh0CS8qOmxtYXBjKgorOmxtYXBjbGVhcgltYXAudHh0CS8qOmxtYXBjbGVhcioKKzpsbgltYXAudHh0CS8qOmxuKgorOmxub3JlbWFwCW1hcC50eHQJLyo6bG5vcmVtYXAqCis6bG8Jc3RhcnRpbmcudHh0CS8qOmxvKgorOmxvYWRrCW1ieXRlLnR4dAkvKjpsb2FkayoKKzpsb2Fka2V5bWFwCW1ieXRlLnR4dAkvKjpsb2Fka2V5bWFwKgorOmxvYWR2aWV3CXN0YXJ0aW5nLnR4dAkvKjpsb2FkdmlldyoKKzpsb2MJbW90aW9uLnR4dAkvKjpsb2MqCis6bG9ja21hcmtzCW1vdGlvbi50eHQJLyo6bG9ja21hcmtzKgorOmxzCXdpbmRvd3MudHh0CS8qOmxzKgorOmx1CW1hcC50eHQJLyo6bHUqCis6bHVubWFwCW1hcC50eHQJLyo6bHVubWFwKgorOm0JY2hhbmdlLnR4dAkvKjptKgorOm1hCW1vdGlvbi50eHQJLyo6bWEqCis6bWFrCXF1aWNrZml4LnR4dAkvKjptYWsqCis6bWFrZQlxdWlja2ZpeC50eHQJLyo6bWFrZSoKKzptYWtlX21ha2VwcmcJcXVpY2tmaXgudHh0CS8qOm1ha2VfbWFrZXByZyoKKzptYXAJbWFwLnR4dAkvKjptYXAqCis6bWFwIQltYXAudHh0CS8qOm1hcCEqCis6bWFwLTxidWZmZXI+CW1hcC50eHQJLyo6bWFwLTxidWZmZXI+KgorOm1hcC08c2NyaXB0PgltYXAudHh0CS8qOm1hcC08c2NyaXB0PioKKzptYXAtPHNpbGVudD4JbWFwLnR4dAkvKjptYXAtPHNpbGVudD4qCis6bWFwLTx1bmlxdWU+CW1hcC50eHQJLyo6bWFwLTx1bmlxdWU+KgorOm1hcC1sb2NhbAltYXAudHh0CS8qOm1hcC1sb2NhbCoKKzptYXAtc2NyaXB0CW1hcC50eHQJLyo6bWFwLXNjcmlwdCoKKzptYXAtc2lsZW50CW1hcC50eHQJLyo6bWFwLXNpbGVudCoKKzptYXAtc3BlY2lhbC1rZXlzCW1hcC50eHQJLyo6bWFwLXNwZWNpYWwta2V5cyoKKzptYXAtdW5kbwltYXAudHh0CS8qOm1hcC11bmRvKgorOm1hcF9sCW1hcC50eHQJLyo6bWFwX2wqCis6bWFwX2whCW1hcC50eHQJLyo6bWFwX2whKgorOm1hcGMJbWFwLnR4dAkvKjptYXBjKgorOm1hcGMhCW1hcC50eHQJLyo6bWFwYyEqCis6bWFwY2xlYXIJbWFwLnR4dAkvKjptYXBjbGVhcioKKzptYXBjbGVhciEJbWFwLnR4dAkvKjptYXBjbGVhciEqCis6bWFyawltb3Rpb24udHh0CS8qOm1hcmsqCis6bWFya3MJbW90aW9uLnR4dAkvKjptYXJrcyoKKzptYXQJcGF0dGVybi50eHQJLyo6bWF0KgorOm1hdGNoCXBhdHRlcm4udHh0CS8qOm1hdGNoKgorOm1lCWd1aS50eHQJLyo6bWUqCis6bWVudQlndWkudHh0CS8qOm1lbnUqCis6bWVudS08c2NyaXB0PglndWkudHh0CS8qOm1lbnUtPHNjcmlwdD4qCis6bWVudS08c2lsZW50PglndWkudHh0CS8qOm1lbnUtPHNpbGVudD4qCis6bWVudS1kaXNhYmxlCWd1aS50eHQJLyo6bWVudS1kaXNhYmxlKgorOm1lbnUtZW5hYmxlCWd1aS50eHQJLyo6bWVudS1lbmFibGUqCis6bWVudS1zY3JpcHQJZ3VpLnR4dAkvKjptZW51LXNjcmlwdCoKKzptZW51LXNpbGVudAlndWkudHh0CS8qOm1lbnUtc2lsZW50KgorOm1lbnV0CW1sYW5nLnR4dAkvKjptZW51dCoKKzptZW51dHJhbnMJbWxhbmcudHh0CS8qOm1lbnV0cmFucyoKKzptZW51dHJhbnNsYXRlCW1sYW5nLnR4dAkvKjptZW51dHJhbnNsYXRlKgorOm1lcwltZXNzYWdlLnR4dAkvKjptZXMqCis6bWVzc2FnZXMJbWVzc2FnZS50eHQJLyo6bWVzc2FnZXMqCis6bWsJc3RhcnRpbmcudHh0CS8qOm1rKgorOm1rZXhyYwlzdGFydGluZy50eHQJLyo6bWtleHJjKgorOm1rcwlzdGFydGluZy50eHQJLyo6bWtzKgorOm1rc2Vzc2lvbglzdGFydGluZy50eHQJLyo6bWtzZXNzaW9uKgorOm1rdglzdGFydGluZy50eHQJLyo6bWt2KgorOm1rdmllCXN0YXJ0aW5nLnR4dAkvKjpta3ZpZSoKKzpta3ZpZXcJc3RhcnRpbmcudHh0CS8qOm1rdmlldyoKKzpta3ZpbXJjCXN0YXJ0aW5nLnR4dAkvKjpta3ZpbXJjKgorOm1vCWNoYW5nZS50eHQJLyo6bW8qCis6bW9kCXRlcm0udHh0CS8qOm1vZCoKKzptb2RlCXRlcm0udHh0CS8qOm1vZGUqCis6bW92ZQljaGFuZ2UudHh0CS8qOm1vdmUqCis6bgllZGl0aW5nLnR4dAkvKjpuKgorOm5lCWVkaXRpbmcudHh0CS8qOm5lKgorOm5ldwl3aW5kb3dzLnR4dAkvKjpuZXcqCis6bmV4dAllZGl0aW5nLnR4dAkvKjpuZXh0KgorOm5leHRfZgllZGl0aW5nLnR4dAkvKjpuZXh0X2YqCis6bm0JbWFwLnR4dAkvKjpubSoKKzpubWFwCW1hcC50eHQJLyo6bm1hcCoKKzpubWFwX2wJbWFwLnR4dAkvKjpubWFwX2wqCis6bm1hcGMJbWFwLnR4dAkvKjpubWFwYyoKKzpubWFwY2xlYXIJbWFwLnR4dAkvKjpubWFwY2xlYXIqCis6bm1lCWd1aS50eHQJLyo6bm1lKgorOm5tZW51CWd1aS50eHQJLyo6bm1lbnUqCis6bm4JbWFwLnR4dAkvKjpubioKKzpubm9yZW1hcAltYXAudHh0CS8qOm5ub3JlbWFwKgorOm5ub3JlbWUJZ3VpLnR4dAkvKjpubm9yZW1lKgorOm5ub3JlbWVudQlndWkudHh0CS8qOm5ub3JlbWVudSoKKzpubwltYXAudHh0CS8qOm5vKgorOm5vIQltYXAudHh0CS8qOm5vISoKKzpub2gJcGF0dGVybi50eHQJLyo6bm9oKgorOm5vaGxzZWFyY2gJcGF0dGVybi50eHQJLyo6bm9obHNlYXJjaCoKKzpub3JlYQltYXAudHh0CS8qOm5vcmVhKgorOm5vcmVhYmJyZXYJbWFwLnR4dAkvKjpub3JlYWJicmV2KgorOm5vcmVtYXAJbWFwLnR4dAkvKjpub3JlbWFwKgorOm5vcmVtYXAhCW1hcC50eHQJLyo6bm9yZW1hcCEqCis6bm9yZW1lCWd1aS50eHQJLyo6bm9yZW1lKgorOm5vcmVtZW51CWd1aS50eHQJLyo6bm9yZW1lbnUqCis6bm9ybQl2YXJpb3VzLnR4dAkvKjpub3JtKgorOm5vcm1hbAl2YXJpb3VzLnR4dAkvKjpub3JtYWwqCis6bm9ybWFsLXJhbmdlCXZhcmlvdXMudHh0CS8qOm5vcm1hbC1yYW5nZSoKKzpudQl2YXJpb3VzLnR4dAkvKjpudSoKKzpudW1iZXIJdmFyaW91cy50eHQJLyo6bnVtYmVyKgorOm51bgltYXAudHh0CS8qOm51bioKKzpudW5tYXAJbWFwLnR4dAkvKjpudW5tYXAqCis6bnVubWUJZ3VpLnR4dAkvKjpudW5tZSoKKzpudW5tZW51CWd1aS50eHQJLyo6bnVubWVudSoKKzpvCXZpX2RpZmYudHh0CS8qOm8qCis6b20JbWFwLnR4dAkvKjpvbSoKKzpvbWFwCW1hcC50eHQJLyo6b21hcCoKKzpvbWFwX2wJbWFwLnR4dAkvKjpvbWFwX2wqCis6b21hcGMJbWFwLnR4dAkvKjpvbWFwYyoKKzpvbWFwY2xlYXIJbWFwLnR4dAkvKjpvbWFwY2xlYXIqCis6b21lCWd1aS50eHQJLyo6b21lKgorOm9tZW51CWd1aS50eHQJLyo6b21lbnUqCis6b24Jd2luZG93cy50eHQJLyo6b24qCis6b25seQl3aW5kb3dzLnR4dAkvKjpvbmx5KgorOm9ubwltYXAudHh0CS8qOm9ubyoKKzpvbm9yZW1hcAltYXAudHh0CS8qOm9ub3JlbWFwKgorOm9ub3JlbWUJZ3VpLnR4dAkvKjpvbm9yZW1lKgorOm9ub3JlbWVudQlndWkudHh0CS8qOm9ub3JlbWVudSoKKzpvcAl2aV9kaWZmLnR4dAkvKjpvcCoKKzpvcGVuCXZpX2RpZmYudHh0CS8qOm9wZW4qCis6b3B0CW9wdGlvbnMudHh0CS8qOm9wdCoKKzpvcHRpb25zCW9wdGlvbnMudHh0CS8qOm9wdGlvbnMqCis6b3UJbWFwLnR4dAkvKjpvdSoKKzpvdW5tYXAJbWFwLnR4dAkvKjpvdW5tYXAqCis6b3VubWUJZ3VpLnR4dAkvKjpvdW5tZSoKKzpvdW5tZW51CWd1aS50eHQJLyo6b3VubWVudSoKKzpwCXZhcmlvdXMudHh0CS8qOnAqCis6cGMJd2luZG93cy50eHQJLyo6cGMqCis6cGNsb3NlCXdpbmRvd3MudHh0CS8qOnBjbG9zZSoKKzpwZQlpZl9wZXJsLnR4dAkvKjpwZSoKKzpwZWQJd2luZG93cy50eHQJLyo6cGVkKgorOnBlZGl0CXdpbmRvd3MudHh0CS8qOnBlZGl0KgorOnBlcmwJaWZfcGVybC50eHQJLyo6cGVybCoKKzpwZXJsZAlpZl9wZXJsLnR4dAkvKjpwZXJsZCoKKzpwZXJsZG8JaWZfcGVybC50eHQJLyo6cGVybGRvKgorOnBvCXRhZ3NyY2gudHh0CS8qOnBvKgorOnBvcAl0YWdzcmNoLnR4dAkvKjpwb3AqCis6cG9wdQlndWkudHh0CS8qOnBvcHUqCis6cG9wdXAJZ3VpLnR4dAkvKjpwb3B1cCoKKzpwcAl3aW5kb3dzLnR4dAkvKjpwcCoKKzpwcG9wCXdpbmRvd3MudHh0CS8qOnBwb3AqCis6cHIJdmFyaW91cy50eHQJLyo6cHIqCis6cHJlCXJlY292ZXIudHh0CS8qOnByZSoKKzpwcmVzZXJ2ZQlyZWNvdmVyLnR4dAkvKjpwcmVzZXJ2ZSoKKzpwcmV2CWVkaXRpbmcudHh0CS8qOnByZXYqCis6cHJldmlvdXMJZWRpdGluZy50eHQJLyo6cHJldmlvdXMqCis6cHJpbnQJdmFyaW91cy50eHQJLyo6cHJpbnQqCis6cHJvCWNoYW5nZS50eHQJLyo6cHJvKgorOnByb21wdGZpbmQJY2hhbmdlLnR4dAkvKjpwcm9tcHRmaW5kKgorOnByb21wdHIJY2hhbmdlLnR4dAkvKjpwcm9tcHRyKgorOnByb21wdHJlcGwJY2hhbmdlLnR4dAkvKjpwcm9tcHRyZXBsKgorOnBzCXdpbmRvd3MudHh0CS8qOnBzKgorOnBzZWFyY2gJd2luZG93cy50eHQJLyo6cHNlYXJjaCoKKzpwdE4JdGFnc3JjaC50eHQJLyo6cHROKgorOnB0TmV4dAl0YWdzcmNoLnR4dAkvKjpwdE5leHQqCis6cHRhCXdpbmRvd3MudHh0CS8qOnB0YSoKKzpwdGFnCXdpbmRvd3MudHh0CS8qOnB0YWcqCis6cHRmCXRhZ3NyY2gudHh0CS8qOnB0ZioKKzpwdGZpcnN0CXRhZ3NyY2gudHh0CS8qOnB0Zmlyc3QqCis6cHRqCXRhZ3NyY2gudHh0CS8qOnB0aioKKzpwdGp1bXAJdGFnc3JjaC50eHQJLyo6cHRqdW1wKgorOnB0bAl0YWdzcmNoLnR4dAkvKjpwdGwqCis6cHRsYXN0CXRhZ3NyY2gudHh0CS8qOnB0bGFzdCoKKzpwdG4JdGFnc3JjaC50eHQJLyo6cHRuKgorOnB0bmV4dAl0YWdzcmNoLnR4dAkvKjpwdG5leHQqCis6cHRwCXRhZ3NyY2gudHh0CS8qOnB0cCoKKzpwdHByZXZpb3VzCXRhZ3NyY2gudHh0CS8qOnB0cHJldmlvdXMqCis6cHRyCXRhZ3NyY2gudHh0CS8qOnB0cioKKzpwdHJld2luZAl0YWdzcmNoLnR4dAkvKjpwdHJld2luZCoKKzpwdHMJdGFnc3JjaC50eHQJLyo6cHRzKgorOnB0c2VsZWN0CXRhZ3NyY2gudHh0CS8qOnB0c2VsZWN0KgorOnB1CWNoYW5nZS50eHQJLyo6cHUqCis6cHV0CWNoYW5nZS50eHQJLyo6cHV0KgorOnB3CWVkaXRpbmcudHh0CS8qOnB3KgorOnB3ZAllZGl0aW5nLnR4dAkvKjpwd2QqCis6cHkJaWZfcHl0aC50eHQJLyo6cHkqCis6cHlmCWlmX3B5dGgudHh0CS8qOnB5ZioKKzpweWZpbGUJaWZfcHl0aC50eHQJLyo6cHlmaWxlKgorOnB5dGhvbglpZl9weXRoLnR4dAkvKjpweXRob24qCis6cQllZGl0aW5nLnR4dAkvKjpxKgorOnFhCWVkaXRpbmcudHh0CS8qOnFhKgorOnFhbGwJZWRpdGluZy50eHQJLyo6cWFsbCoKKzpxdWl0CWVkaXRpbmcudHh0CS8qOnF1aXQqCis6cXVpdGEJZWRpdGluZy50eHQJLyo6cXVpdGEqCis6cXVpdGFsbAllZGl0aW5nLnR4dAkvKjpxdWl0YWxsKgorOnF1b3RlCWNtZGxpbmUudHh0CS8qOnF1b3RlKgorOnIJaW5zZXJ0LnR4dAkvKjpyKgorOnIhCWluc2VydC50eHQJLyo6ciEqCis6cmFuZ2UJY21kbGluZS50eHQJLyo6cmFuZ2UqCis6cmFuZ2UhCWNoYW5nZS50eHQJLyo6cmFuZ2UhKgorOnJlCWluc2VydC50eHQJLyo6cmUqCis6cmVhZAlpbnNlcnQudHh0CS8qOnJlYWQqCis6cmVhZCEJaW5zZXJ0LnR4dAkvKjpyZWFkISoKKzpyZWMJcmVjb3Zlci50eHQJLyo6cmVjKgorOnJlY292ZXIJcmVjb3Zlci50eHQJLyo6cmVjb3ZlcioKKzpyZWQJdW5kby50eHQJLyo6cmVkKgorOnJlZGkJdmFyaW91cy50eHQJLyo6cmVkaSoKKzpyZWRpcgl2YXJpb3VzLnR4dAkvKjpyZWRpcioKKzpyZWRvCXVuZG8udHh0CS8qOnJlZG8qCis6cmVkcgl2YXJpb3VzLnR4dAkvKjpyZWRyKgorOnJlZHJhdwl2YXJpb3VzLnR4dAkvKjpyZWRyYXcqCis6cmVkcmF3cwl2YXJpb3VzLnR4dAkvKjpyZWRyYXdzKgorOnJlZHJhd3N0YXR1cwl2YXJpb3VzLnR4dAkvKjpyZWRyYXdzdGF0dXMqCis6cmVnCWNoYW5nZS50eHQJLyo6cmVnKgorOnJlZ2lzdGVycwljaGFuZ2UudHh0CS8qOnJlZ2lzdGVycyoKKzpyZXMJd2luZG93cy50eHQJLyo6cmVzKgorOnJlc2l6ZQl3aW5kb3dzLnR4dAkvKjpyZXNpemUqCis6cmV0CWNoYW5nZS50eHQJLyo6cmV0KgorOnJldGFiCWNoYW5nZS50eHQJLyo6cmV0YWIqCis6cmV0dQlldmFsLnR4dAkvKjpyZXR1KgorOnJldHVybglldmFsLnR4dAkvKjpyZXR1cm4qCis6cmV3CWVkaXRpbmcudHh0CS8qOnJldyoKKzpyZXdpbmQJZWRpdGluZy50eHQJLyo6cmV3aW5kKgorOnJpCWNoYW5nZS50eHQJLyo6cmkqCis6cmlnaHQJY2hhbmdlLnR4dAkvKjpyaWdodCoKKzpyaWdodGIJd2luZG93cy50eHQJLyo6cmlnaHRiKgorOnJpZ2h0YmVsb3cJd2luZG93cy50eHQJLyo6cmlnaHRiZWxvdyoKKzpydQlyZXBlYXQudHh0CS8qOnJ1KgorOnJ1YglpZl9ydWJ5LnR4dAkvKjpydWIqCis6cnVieQlpZl9ydWJ5LnR4dAkvKjpydWJ5KgorOnJ1YnlkCWlmX3J1YnkudHh0CS8qOnJ1YnlkKgorOnJ1YnlkbwlpZl9ydWJ5LnR4dAkvKjpydWJ5ZG8qCis6cnVieWYJaWZfcnVieS50eHQJLyo6cnVieWYqCis6cnVieWZpbGUJaWZfcnVieS50eHQJLyo6cnVieWZpbGUqCis6cnVudGltZQlyZXBlYXQudHh0CS8qOnJ1bnRpbWUqCis6cnYJc3RhcnRpbmcudHh0CS8qOnJ2KgorOnJ2aW1pbmZvCXN0YXJ0aW5nLnR4dAkvKjpydmltaW5mbyoKKzpzCWNoYW5nZS50eHQJLyo6cyoKKzpzTgl3aW5kb3dzLnR4dAkvKjpzTioKKzpzTmV4dAl3aW5kb3dzLnR4dAkvKjpzTmV4dCoKKzpzXD0JY2hhbmdlLnR4dAkvKjpzXFw9KgorOnNfYwljaGFuZ2UudHh0CS8qOnNfYyoKKzpzX2ZsYWdzCWNoYW5nZS50eHQJLyo6c19mbGFncyoKKzpzYQl3aW5kb3dzLnR4dAkvKjpzYSoKKzpzYWwJd2luZG93cy50eHQJLyo6c2FsKgorOnNhbGwJd2luZG93cy50eHQJLyo6c2FsbCoKKzpzYXJndW1lbnQJd2luZG93cy50eHQJLyo6c2FyZ3VtZW50KgorOnNhdgllZGl0aW5nLnR4dAkvKjpzYXYqCis6c2F2ZWFzCWVkaXRpbmcudHh0CS8qOnNhdmVhcyoKKzpzYgl3aW5kb3dzLnR4dAkvKjpzYioKKzpzYk4Jd2luZG93cy50eHQJLyo6c2JOKgorOnNiTmV4dAl3aW5kb3dzLnR4dAkvKjpzYk5leHQqCis6c2JhCXdpbmRvd3MudHh0CS8qOnNiYSoKKzpzYmFsbAl3aW5kb3dzLnR4dAkvKjpzYmFsbCoKKzpzYmYJd2luZG93cy50eHQJLyo6c2JmKgorOnNiZmlyc3QJd2luZG93cy50eHQJLyo6c2JmaXJzdCoKKzpzYmwJd2luZG93cy50eHQJLyo6c2JsKgorOnNibGFzdAl3aW5kb3dzLnR4dAkvKjpzYmxhc3QqCis6c2JtCXdpbmRvd3MudHh0CS8qOnNibSoKKzpzYm1vZGlmaWVkCXdpbmRvd3MudHh0CS8qOnNibW9kaWZpZWQqCis6c2JuCXdpbmRvd3MudHh0CS8qOnNibioKKzpzYm5leHQJd2luZG93cy50eHQJLyo6c2JuZXh0KgorOnNicAl3aW5kb3dzLnR4dAkvKjpzYnAqCis6c2JwcmV2aW91cwl3aW5kb3dzLnR4dAkvKjpzYnByZXZpb3VzKgorOnNicgl3aW5kb3dzLnR4dAkvKjpzYnIqCis6c2JyZXdpbmQJd2luZG93cy50eHQJLyo6c2JyZXdpbmQqCis6c2J1ZmZlcgl3aW5kb3dzLnR4dAkvKjpzYnVmZmVyKgorOnNjcmlwCXJlcGVhdC50eHQJLyo6c2NyaXAqCis6c2NyaXB0ZQlyZXBlYXQudHh0CS8qOnNjcmlwdGUqCis6c2NyaXB0ZW5jb2RpbmcJcmVwZWF0LnR4dAkvKjpzY3JpcHRlbmNvZGluZyoKKzpzY3JpcHRuYW1lcwlyZXBlYXQudHh0CS8qOnNjcmlwdG5hbWVzKgorOnNjcwlpZl9jc2NvcC50eHQJLyo6c2NzKgorOnNjc2NvcGUJaWZfY3Njb3AudHh0CS8qOnNjc2NvcGUqCis6c2UJb3B0aW9ucy50eHQJLyo6c2UqCis6c2VhcmNoLWFyZ3MJdGFnc3JjaC50eHQJLyo6c2VhcmNoLWFyZ3MqCis6c2V0CW9wdGlvbnMudHh0CS8qOnNldCoKKzpzZXQrPQlvcHRpb25zLnR4dAkvKjpzZXQrPSoKKzpzZXQtJglvcHRpb25zLnR4dAkvKjpzZXQtJioKKzpzZXQtJnZpCW9wdGlvbnMudHh0CS8qOnNldC0mdmkqCis6c2V0LSZ2aW0Jb3B0aW9ucy50eHQJLyo6c2V0LSZ2aW0qCis6c2V0LT0Jb3B0aW9ucy50eHQJLyo6c2V0LT0qCis6c2V0LWFyZ3MJb3B0aW9ucy50eHQJLyo6c2V0LWFyZ3MqCis6c2V0LWJyb3dzZQlvcHRpb25zLnR4dAkvKjpzZXQtYnJvd3NlKgorOnNldC1kZWZhdWx0CW9wdGlvbnMudHh0CS8qOnNldC1kZWZhdWx0KgorOnNldC10ZXJtY2FwCW9wdGlvbnMudHh0CS8qOnNldC10ZXJtY2FwKgorOnNldC12ZXJib3NlCW9wdGlvbnMudHh0CS8qOnNldC12ZXJib3NlKgorOnNldF49CW9wdGlvbnMudHh0CS8qOnNldF49KgorOnNldF9lbnYJb3B0aW9ucy50eHQJLyo6c2V0X2VudioKKzpzZXRmCW9wdGlvbnMudHh0CS8qOnNldGYqCis6c2V0ZmlsZXR5cGUJb3B0aW9ucy50eHQJLyo6c2V0ZmlsZXR5cGUqCis6c2V0ZwlvcHRpb25zLnR4dAkvKjpzZXRnKgorOnNldGdsb2JhbAlvcHRpb25zLnR4dAkvKjpzZXRnbG9iYWwqCis6c2V0bAlvcHRpb25zLnR4dAkvKjpzZXRsKgorOnNldGxvY2FsCW9wdGlvbnMudHh0CS8qOnNldGxvY2FsKgorOnNmCXdpbmRvd3MudHh0CS8qOnNmKgorOnNmaW5kCXdpbmRvd3MudHh0CS8qOnNmaW5kKgorOnNmaXIJd2luZG93cy50eHQJLyo6c2ZpcioKKzpzZmlyc3QJd2luZG93cy50eHQJLyo6c2ZpcnN0KgorOnNoCXZhcmlvdXMudHh0CS8qOnNoKgorOnNoZWxsCXZhcmlvdXMudHh0CS8qOnNoZWxsKgorOnNpCWd1aV93MzIudHh0CS8qOnNpKgorOnNpZwlzaWduLnR4dAkvKjpzaWcqCis6c2lnbglzaWduLnR4dAkvKjpzaWduKgorOnNpZ24tZGVmaW5lCXNpZ24udHh0CS8qOnNpZ24tZGVmaW5lKgorOnNpZ24tZm5hbWUJc2lnbi50eHQJLyo6c2lnbi1mbmFtZSoKKzpzaWduLWp1bXAJc2lnbi50eHQJLyo6c2lnbi1qdW1wKgorOnNpZ24tbGlzdAlzaWduLnR4dAkvKjpzaWduLWxpc3QqCis6c2lnbi1wbGFjZQlzaWduLnR4dAkvKjpzaWduLXBsYWNlKgorOnNpZ24tdW5kZWZpbmUJc2lnbi50eHQJLyo6c2lnbi11bmRlZmluZSoKKzpzaWduLXVucGxhY2UJc2lnbi50eHQJLyo6c2lnbi11bnBsYWNlKgorOnNpbAl2YXJpb3VzLnR4dAkvKjpzaWwqCis6c2lsZW50CXZhcmlvdXMudHh0CS8qOnNpbGVudCoKKzpzaW1hbHQJZ3VpX3czMi50eHQJLyo6c2ltYWx0KgorOnNsCXZhcmlvdXMudHh0CS8qOnNsKgorOnNsYQl3aW5kb3dzLnR4dAkvKjpzbGEqCis6c2xhc3QJd2luZG93cy50eHQJLyo6c2xhc3QqCis6c2xlZXAJdmFyaW91cy50eHQJLyo6c2xlZXAqCis6c20JY2hhbmdlLnR4dAkvKjpzbSoKKzpzbWFnaWMJY2hhbmdlLnR4dAkvKjpzbWFnaWMqCis6c24Jd2luZG93cy50eHQJLyo6c24qCis6c25leHQJd2luZG93cy50eHQJLyo6c25leHQqCis6c25pCWlmX3NuaWZmLnR4dAkvKjpzbmkqCis6c25pZmYJaWZfc25pZmYudHh0CS8qOnNuaWZmKgorOnNubwljaGFuZ2UudHh0CS8qOnNubyoKKzpzbm9tYWdpYwljaGFuZ2UudHh0CS8qOnNub21hZ2ljKgorOnNvCXJlcGVhdC50eHQJLyo6c28qCis6c291cmNlCXJlcGVhdC50eHQJLyo6c291cmNlKgorOnNvdXJjZV9jcm5sCXJlcGVhdC50eHQJLyo6c291cmNlX2NybmwqCis6c3AJd2luZG93cy50eHQJLyo6c3AqCis6c3BsaXQJd2luZG93cy50eHQJLyo6c3BsaXQqCis6c3BsaXRfZgl3aW5kb3dzLnR4dAkvKjpzcGxpdF9mKgorOnNwcgl3aW5kb3dzLnR4dAkvKjpzcHIqCis6c3ByZXZpb3VzCXdpbmRvd3MudHh0CS8qOnNwcmV2aW91cyoKKzpzcmUJd2luZG93cy50eHQJLyo6c3JlKgorOnNyZXdpbmQJd2luZG93cy50eHQJLyo6c3Jld2luZCoKKzpzdAlzdGFydGluZy50eHQJLyo6c3QqCis6c3RhCXdpbmRvd3MudHh0CS8qOnN0YSoKKzpzdGFnCXdpbmRvd3MudHh0CS8qOnN0YWcqCis6c3RhcglyZXBlYXQudHh0CS8qOnN0YXIqCis6c3RhcnQJaW5zZXJ0LnR4dAkvKjpzdGFydCoKKzpzdGFydGluc2VydAlpbnNlcnQudHh0CS8qOnN0YXJ0aW5zZXJ0KgorOnN0agl0YWdzcmNoLnR4dAkvKjpzdGoqCis6c3RqdW1wCXRhZ3NyY2gudHh0CS8qOnN0anVtcCoKKzpzdG9wCXN0YXJ0aW5nLnR4dAkvKjpzdG9wKgorOnN0b3BpCWluc2VydC50eHQJLyo6c3RvcGkqCis6c3RvcGluc2VydAlpbnNlcnQudHh0CS8qOnN0b3BpbnNlcnQqCis6c3RzCXRhZ3NyY2gudHh0CS8qOnN0cyoKKzpzdHNlbGVjdAl0YWdzcmNoLnR4dAkvKjpzdHNlbGVjdCoKKzpzdQljaGFuZ2UudHh0CS8qOnN1KgorOnN1YnN0aXR1dGUJY2hhbmdlLnR4dAkvKjpzdWJzdGl0dXRlKgorOnN1bgl3aW5kb3dzLnR4dAkvKjpzdW4qCis6c3VuaGlkZQl3aW5kb3dzLnR4dAkvKjpzdW5oaWRlKgorOnN1cwlzdGFydGluZy50eHQJLyo6c3VzKgorOnN1c3BlbmQJc3RhcnRpbmcudHh0CS8qOnN1c3BlbmQqCis6c3YJd2luZG93cy50eHQJLyo6c3YqCis6c3ZpZXcJd2luZG93cy50eHQJLyo6c3ZpZXcqCis6c3cJcmVjb3Zlci50eHQJLyo6c3cqCis6c3dhcG5hbWUJcmVjb3Zlci50eHQJLyo6c3dhcG5hbWUqCis6c3kJc3ludGF4LnR4dAkvKjpzeSoKKzpzeW4Jc3ludGF4LnR4dAkvKjpzeW4qCis6c3luLWFyZ3VtZW50cwlzeW50YXgudHh0CS8qOnN5bi1hcmd1bWVudHMqCis6c3luLWNhc2UJc3ludGF4LnR4dAkvKjpzeW4tY2FzZSoKKzpzeW4tY2xlYXIJc3ludGF4LnR4dAkvKjpzeW4tY2xlYXIqCis6c3luLWNsdXN0ZXIJc3ludGF4LnR4dAkvKjpzeW4tY2x1c3RlcioKKzpzeW4tY29udGFpbmVkCXN5bnRheC50eHQJLyo6c3luLWNvbnRhaW5lZCoKKzpzeW4tY29udGFpbmVkaW4Jc3ludGF4LnR4dAkvKjpzeW4tY29udGFpbmVkaW4qCis6c3luLWNvbnRhaW5zCXN5bnRheC50eHQJLyo6c3luLWNvbnRhaW5zKgorOnN5bi1jb250ZXh0CXN5bnRheC50eHQJLyo6c3luLWNvbnRleHQqCis6c3luLWRlZmF1bHQtb3ZlcnJpZGUJdXNyXzA2LnR4dAkvKjpzeW4tZGVmYXVsdC1vdmVycmlkZSoKKzpzeW4tZGVmaW5lCXN5bnRheC50eHQJLyo6c3luLWRlZmluZSoKKzpzeW4tZGlzcGxheQlzeW50YXgudHh0CS8qOnN5bi1kaXNwbGF5KgorOnN5bi1lbmFibGUJc3ludGF4LnR4dAkvKjpzeW4tZW5hYmxlKgorOnN5bi1lbmQJc3ludGF4LnR4dAkvKjpzeW4tZW5kKgorOnN5bi1leGNsdWRlbmwJc3ludGF4LnR4dAkvKjpzeW4tZXhjbHVkZW5sKgorOnN5bi1leHQtbWF0Y2gJc3ludGF4LnR4dAkvKjpzeW4tZXh0LW1hdGNoKgorOnN5bi1leHRlbmQJc3ludGF4LnR4dAkvKjpzeW4tZXh0ZW5kKgorOnN5bi1maWxlLXJlbWFya3MJc3ludGF4LnR4dAkvKjpzeW4tZmlsZS1yZW1hcmtzKgorOnN5bi1maWxlcwlzeW50YXgudHh0CS8qOnN5bi1maWxlcyoKKzpzeW4tZm9sZAlzeW50YXgudHh0CS8qOnN5bi1mb2xkKgorOnN5bi1pbmNsdWRlCXN5bnRheC50eHQJLyo6c3luLWluY2x1ZGUqCis6c3luLWtlZXBlbmQJc3ludGF4LnR4dAkvKjpzeW4ta2VlcGVuZCoKKzpzeW4ta2V5d29yZAlzeW50YXgudHh0CS8qOnN5bi1rZXl3b3JkKgorOnN5bi1sYwlzeW50YXgudHh0CS8qOnN5bi1sYyoKKzpzeW4tbGVhZGluZwlzeW50YXgudHh0CS8qOnN5bi1sZWFkaW5nKgorOnN5bi1saXN0CXN5bnRheC50eHQJLyo6c3luLWxpc3QqCis6c3luLW1hbnVhbAl1c3JfMDYudHh0CS8qOnN5bi1tYW51YWwqCis6c3luLW1hdGNoCXN5bnRheC50eHQJLyo6c3luLW1hdGNoKgorOnN5bi1tYXRjaGdyb3VwCXN5bnRheC50eHQJLyo6c3luLW1hdGNoZ3JvdXAqCis6c3luLW11bHRpLWxpbmUJc3ludGF4LnR4dAkvKjpzeW4tbXVsdGktbGluZSoKKzpzeW4tbmV4dGdyb3VwCXN5bnRheC50eHQJLyo6c3luLW5leHRncm91cCoKKzpzeW4tb2ZmCXVzcl8wNi50eHQJLyo6c3luLW9mZioKKzpzeW4tb24Jc3ludGF4LnR4dAkvKjpzeW4tb24qCis6c3luLW9uZWxpbmUJc3ludGF4LnR4dAkvKjpzeW4tb25lbGluZSoKKzpzeW4tcGF0dGVybglzeW50YXgudHh0CS8qOnN5bi1wYXR0ZXJuKgorOnN5bi1wYXR0ZXJuLW9mZnNldAlzeW50YXgudHh0CS8qOnN5bi1wYXR0ZXJuLW9mZnNldCoKKzpzeW4tcHJpb3JpdHkJc3ludGF4LnR4dAkvKjpzeW4tcHJpb3JpdHkqCis6c3luLXFzdGFydAlzeW50YXgudHh0CS8qOnN5bi1xc3RhcnQqCis6c3luLXJlZ2lvbglzeW50YXgudHh0CS8qOnN5bi1yZWdpb24qCis6c3luLXJlc2V0CXN5bnRheC50eHQJLyo6c3luLXJlc2V0KgorOnN5bi1za2lwCXN5bnRheC50eHQJLyo6c3luLXNraXAqCis6c3luLXNraXBlbXB0eQlzeW50YXgudHh0CS8qOnN5bi1za2lwZW1wdHkqCis6c3luLXNraXBubAlzeW50YXgudHh0CS8qOnN5bi1za2lwbmwqCis6c3luLXNraXB3aGl0ZQlzeW50YXgudHh0CS8qOnN5bi1za2lwd2hpdGUqCis6c3luLXN0YXJ0CXN5bnRheC50eHQJLyo6c3luLXN0YXJ0KgorOnN5bi1zeW5jCXN5bnRheC50eHQJLyo6c3luLXN5bmMqCis6c3luLXN5bmMtY2NvbW1lbnQJc3ludGF4LnR4dAkvKjpzeW4tc3luYy1jY29tbWVudCoKKzpzeW4tc3luYy1maXJzdAlzeW50YXgudHh0CS8qOnN5bi1zeW5jLWZpcnN0KgorOnN5bi1zeW5jLWZvdXJ0aAlzeW50YXgudHh0CS8qOnN5bi1zeW5jLWZvdXJ0aCoKKzpzeW4tc3luYy1saW5lYnJlYWtzCXN5bnRheC50eHQJLyo6c3luLXN5bmMtbGluZWJyZWFrcyoKKzpzeW4tc3luYy1tYXhsaW5lcwlzeW50YXgudHh0CS8qOnN5bi1zeW5jLW1heGxpbmVzKgorOnN5bi1zeW5jLW1pbmxpbmVzCXN5bnRheC50eHQJLyo6c3luLXN5bmMtbWlubGluZXMqCis6c3luLXN5bmMtc2Vjb25kCXN5bnRheC50eHQJLyo6c3luLXN5bmMtc2Vjb25kKgorOnN5bi1zeW5jLXRoaXJkCXN5bnRheC50eHQJLyo6c3luLXN5bmMtdGhpcmQqCis6c3luLXRyYW5zcGFyZW50CXN5bnRheC50eHQJLyo6c3luLXRyYW5zcGFyZW50KgorOnN5bmNiaW5kCXNjcm9sbC50eHQJLyo6c3luY2JpbmQqCis6c3ludGF4CXN5bnRheC50eHQJLyo6c3ludGF4KgorOnN5bnRheC1lbmFibGUJc3ludGF4LnR4dAkvKjpzeW50YXgtZW5hYmxlKgorOnN5bnRheC1vbglzeW50YXgudHh0CS8qOnN5bnRheC1vbioKKzpzeW50YXgtcmVzZXQJc3ludGF4LnR4dAkvKjpzeW50YXgtcmVzZXQqCis6dAljaGFuZ2UudHh0CS8qOnQqCis6dE4JdGFnc3JjaC50eHQJLyo6dE4qCis6dE5leHQJdGFnc3JjaC50eHQJLyo6dE5leHQqCis6dGEJdGFnc3JjaC50eHQJLyo6dGEqCis6dGFnCXRhZ3NyY2gudHh0CS8qOnRhZyoKKzp0YWdzCXRhZ3NyY2gudHh0CS8qOnRhZ3MqCis6dGMJaWZfdGNsLnR4dAkvKjp0YyoKKzp0Y2wJaWZfdGNsLnR4dAkvKjp0Y2wqCis6dGNsZAlpZl90Y2wudHh0CS8qOnRjbGQqCis6dGNsZG8JaWZfdGNsLnR4dAkvKjp0Y2xkbyoKKzp0Y2xmCWlmX3RjbC50eHQJLyo6dGNsZioKKzp0Y2xmaWxlCWlmX3RjbC50eHQJLyo6dGNsZmlsZSoKKzp0ZQlndWlfdzMyLnR4dAkvKjp0ZSoKKzp0ZWFyb2ZmCWd1aV93MzIudHh0CS8qOnRlYXJvZmYqCis6dGYJdGFnc3JjaC50eHQJLyo6dGYqCis6dGZpcnN0CXRhZ3NyY2gudHh0CS8qOnRmaXJzdCoKKzp0aAlldmFsLnR4dAkvKjp0aCoKKzp0aHJvdwlldmFsLnR4dAkvKjp0aHJvdyoKKzp0agl0YWdzcmNoLnR4dAkvKjp0aioKKzp0anVtcAl0YWdzcmNoLnR4dAkvKjp0anVtcCoKKzp0bAl0YWdzcmNoLnR4dAkvKjp0bCoKKzp0bGFzdAl0YWdzcmNoLnR4dAkvKjp0bGFzdCoKKzp0bQlndWkudHh0CS8qOnRtKgorOnRtZW51CWd1aS50eHQJLyo6dG1lbnUqCis6dG4JdGFnc3JjaC50eHQJLyo6dG4qCis6dG5leHQJdGFnc3JjaC50eHQJLyo6dG5leHQqCis6dG9wbGVmdAl3aW5kb3dzLnR4dAkvKjp0b3BsZWZ0KgorOnRwCXRhZ3NyY2gudHh0CS8qOnRwKgorOnRwcmV2aW91cwl0YWdzcmNoLnR4dAkvKjp0cHJldmlvdXMqCis6dHIJdGFnc3JjaC50eHQJLyo6dHIqCis6dHJld2luZAl0YWdzcmNoLnR4dAkvKjp0cmV3aW5kKgorOnRyeQlldmFsLnR4dAkvKjp0cnkqCis6dHMJdGFnc3JjaC50eHQJLyo6dHMqCis6dHNlbGVjdAl0YWdzcmNoLnR4dAkvKjp0c2VsZWN0KgorOnR1CWd1aS50eHQJLyo6dHUqCis6dHVubWVudQlndWkudHh0CS8qOnR1bm1lbnUqCis6dQl1bmRvLnR4dAkvKjp1KgorOnVuCXVuZG8udHh0CS8qOnVuKgorOnVuYQltYXAudHh0CS8qOnVuYSoKKzp1bmFiYnJldmlhdGUJbWFwLnR4dAkvKjp1bmFiYnJldmlhdGUqCis6dW5kbwl1bmRvLnR4dAkvKjp1bmRvKgorOnVuaAl3aW5kb3dzLnR4dAkvKjp1bmgqCis6dW5oaWRlCXdpbmRvd3MudHh0CS8qOnVuaGlkZSoKKzp1bmwJZXZhbC50eHQJLyo6dW5sKgorOnVubGV0CWV2YWwudHh0CS8qOnVubGV0KgorOnVubQltYXAudHh0CS8qOnVubSoKKzp1bm0hCW1hcC50eHQJLyo6dW5tISoKKzp1bm1hcAltYXAudHh0CS8qOnVubWFwKgorOnVubWFwIQltYXAudHh0CS8qOnVubWFwISoKKzp1bm1lCWd1aS50eHQJLyo6dW5tZSoKKzp1bm1lbnUJZ3VpLnR4dAkvKjp1bm1lbnUqCis6dW5tZW51LWFsbAlndWkudHh0CS8qOnVubWVudS1hbGwqCis6dXAJZWRpdGluZy50eHQJLyo6dXAqCis6dXBkYXRlCWVkaXRpbmcudHh0CS8qOnVwZGF0ZSoKKzp2CXJlcGVhdC50eHQJLyo6dioKKzp2ZQl2YXJpb3VzLnR4dAkvKjp2ZSoKKzp2ZXJiCXZhcmlvdXMudHh0CS8qOnZlcmIqCis6dmVyYm9zZQl2YXJpb3VzLnR4dAkvKjp2ZXJib3NlKgorOnZlcnNpb24JdmFyaW91cy50eHQJLyo6dmVyc2lvbioKKzp2ZXJ0CXdpbmRvd3MudHh0CS8qOnZlcnQqCis6dmVydGljYWwJd2luZG93cy50eHQJLyo6dmVydGljYWwqCis6dmVydGljYWwtcmVzaXplCXdpbmRvd3MudHh0CS8qOnZlcnRpY2FsLXJlc2l6ZSoKKzp2Z2xvYmFsCXJlcGVhdC50eHQJLyo6dmdsb2JhbCoKKzp2aQllZGl0aW5nLnR4dAkvKjp2aSoKKzp2aWUJZWRpdGluZy50eHQJLyo6dmllKgorOnZpZXcJZWRpdGluZy50eHQJLyo6dmlldyoKKzp2aXN1YWwJZWRpdGluZy50eHQJLyo6dmlzdWFsKgorOnZpc3VhbF9leGFtcGxlCXZpc3VhbC50eHQJLyo6dmlzdWFsX2V4YW1wbGUqCis6dm0JbWFwLnR4dAkvKjp2bSoKKzp2bWFwCW1hcC50eHQJLyo6dm1hcCoKKzp2bWFwX2wJbWFwLnR4dAkvKjp2bWFwX2wqCis6dm1hcGMJbWFwLnR4dAkvKjp2bWFwYyoKKzp2bWFwY2xlYXIJbWFwLnR4dAkvKjp2bWFwY2xlYXIqCis6dm1lCWd1aS50eHQJLyo6dm1lKgorOnZtZW51CWd1aS50eHQJLyo6dm1lbnUqCis6dm4JbWFwLnR4dAkvKjp2bioKKzp2bmUJd2luZG93cy50eHQJLyo6dm5lKgorOnZuZXcJd2luZG93cy50eHQJLyo6dm5ldyoKKzp2bm9yZW1hcAltYXAudHh0CS8qOnZub3JlbWFwKgorOnZub3JlbWUJZ3VpLnR4dAkvKjp2bm9yZW1lKgorOnZub3JlbWVudQlndWkudHh0CS8qOnZub3JlbWVudSoKKzp2cwl3aW5kb3dzLnR4dAkvKjp2cyoKKzp2c3BsaXQJd2luZG93cy50eHQJLyo6dnNwbGl0KgorOnZ1CW1hcC50eHQJLyo6dnUqCis6dnVubWFwCW1hcC50eHQJLyo6dnVubWFwKgorOnZ1bm1lCWd1aS50eHQJLyo6dnVubWUqCis6dnVubWVudQlndWkudHh0CS8qOnZ1bm1lbnUqCis6dwllZGl0aW5nLnR4dAkvKjp3KgorOnchCWVkaXRpbmcudHh0CS8qOnchKgorOndOCWVkaXRpbmcudHh0CS8qOndOKgorOndOZXh0CWVkaXRpbmcudHh0CS8qOndOZXh0KgorOndfYQllZGl0aW5nLnR4dAkvKjp3X2EqCis6d19jCWVkaXRpbmcudHh0CS8qOndfYyoKKzp3X2YJZWRpdGluZy50eHQJLyo6d19mKgorOndhCWVkaXRpbmcudHh0CS8qOndhKgorOndhbGwJZWRpdGluZy50eHQJLyo6d2FsbCoKKzp3aAlldmFsLnR4dAkvKjp3aCoKKzp3aGlsZQlldmFsLnR4dAkvKjp3aGlsZSoKKzp3aW4JZ3VpLnR4dAkvKjp3aW4qCis6d2luYwl3aW5kb3dzLnR4dAkvKjp3aW5jKgorOndpbmNtZAl3aW5kb3dzLnR4dAkvKjp3aW5jbWQqCis6d2luZG8Jd2luZG93cy50eHQJLyo6d2luZG8qCis6d2lucAlndWkudHh0CS8qOndpbnAqCis6d2lucG9zCWd1aS50eHQJLyo6d2lucG9zKgorOndpbnNpemUJZ3VpLnR4dAkvKjp3aW5zaXplKgorOnduCWVkaXRpbmcudHh0CS8qOnduKgorOnduZXh0CWVkaXRpbmcudHh0CS8qOnduZXh0KgorOndwCWVkaXRpbmcudHh0CS8qOndwKgorOndwcmV2aW91cwllZGl0aW5nLnR4dAkvKjp3cHJldmlvdXMqCis6d3EJZWRpdGluZy50eHQJLyo6d3EqCis6d3FhCWVkaXRpbmcudHh0CS8qOndxYSoKKzp3cWFsbAllZGl0aW5nLnR4dAkvKjp3cWFsbCoKKzp3cml0ZQllZGl0aW5nLnR4dAkvKjp3cml0ZSoKKzp3cml0ZV9hCWVkaXRpbmcudHh0CS8qOndyaXRlX2EqCis6d3JpdGVfYwllZGl0aW5nLnR4dAkvKjp3cml0ZV9jKgorOndyaXRlX2YJZWRpdGluZy50eHQJLyo6d3JpdGVfZioKKzp3cwl3b3Jrc2hvcC50eHQJLyo6d3MqCis6d3N2ZXJiCXdvcmtzaG9wLnR4dAkvKjp3c3ZlcmIqCis6d3YJc3RhcnRpbmcudHh0CS8qOnd2KgorOnd2aW1pbmZvCXN0YXJ0aW5nLnR4dAkvKjp3dmltaW5mbyoKKzp4CWVkaXRpbmcudHh0CS8qOngqCis6eGEJZWRpdGluZy50eHQJLyo6eGEqCis6eGFsbAllZGl0aW5nLnR4dAkvKjp4YWxsKgorOnhpdAllZGl0aW5nLnR4dAkvKjp4aXQqCis6eQljaGFuZ2UudHh0CS8qOnkqCis6eWFuawljaGFuZ2UudHh0CS8qOnlhbmsqCis6egl2YXJpb3VzLnR4dAkvKjp6KgorOnojCXZhcmlvdXMudHh0CS8qOnojKgorOn4JY2hhbmdlLnR4dAkvKjp+KgorOwltb3Rpb24udHh0CS8qOyoKKzwJY2hhbmdlLnR4dAkvKjwqCis8Mi1MZWZ0TW91c2U+CXRlcm0udHh0CS8qPDItTGVmdE1vdXNlPioKKzwzLUxlZnRNb3VzZT4JdGVybS50eHQJLyo8My1MZWZ0TW91c2U+KgorPDQtTGVmdE1vdXNlPgl0ZXJtLnR4dAkvKjw0LUxlZnRNb3VzZT4qCis8PAljaGFuZ2UudHh0CS8qPDwqCis8PglpbnRyby50eHQJLyo8PioKKzxBLQlpbnRyby50eHQJLyo8QS0qCis8QlM+CW1vdGlvbi50eHQJLyo8QlM+KgorPEJhcj4JaW50cm8udHh0CS8qPEJhcj4qCis8QnNsYXNoPglpbnRyby50eHQJLyo8QnNsYXNoPioKKzxDLQlpbnRyby50eHQJLyo8Qy0qCis8Qy1EZWw+CW9zX2Rvcy50eHQJLyo8Qy1EZWw+KgorPEMtRW5kPgltb3Rpb24udHh0CS8qPEMtRW5kPioKKzxDLUhvbWU+CW1vdGlvbi50eHQJLyo8Qy1Ib21lPioKKzxDLUluc2VydD4Jb3NfZG9zLnR4dAkvKjxDLUluc2VydD4qCis8Qy1MZWZ0Pgltb3Rpb24udHh0CS8qPEMtTGVmdD4qCis8Qy1MZWZ0TW91c2U+CXRhZ3NyY2gudHh0CS8qPEMtTGVmdE1vdXNlPioKKzxDLU1vdXNlRG93bj4Jc2Nyb2xsLnR4dAkvKjxDLU1vdXNlRG93bj4qCis8Qy1Nb3VzZVVwPglzY3JvbGwudHh0CS8qPEMtTW91c2VVcD4qCis8Qy1QYWdlRG93bj4Jb3NfZG9zLnR4dAkvKjxDLVBhZ2VEb3duPioKKzxDLVBhZ2VVcD4Jb3NfZG9zLnR4dAkvKjxDLVBhZ2VVcD4qCis8Qy1SaWdodD4JbW90aW9uLnR4dAkvKjxDLVJpZ2h0PioKKzxDLVJpZ2h0TW91c2U+CXRhZ3NyY2gudHh0CS8qPEMtUmlnaHRNb3VzZT4qCis8Q1I+CW1vdGlvbi50eHQJLyo8Q1I+KgorPENTST4JaW50cm8udHh0CS8qPENTST4qCis8Q2hhci0+CW1hcC50eHQJLyo8Q2hhci0+KgorPENoYXI+CW1hcC50eHQJLyo8Q2hhcj4qCis8RC0JaW50cm8udHh0CS8qPEQtKgorPERlbD4JY2hhbmdlLnR4dAkvKjxEZWw+KgorPERvd24+CW1vdGlvbi50eHQJLyo8RG93bj4qCis8RHJvcD4JY2hhbmdlLnR4dAkvKjxEcm9wPioKKzxFT0w+CWludHJvLnR4dAkvKjxFT0w+KgorPEVuZD4JbW90aW9uLnR4dAkvKjxFbmQ+KgorPEVudGVyPglpbnRyby50eHQJLyo8RW50ZXI+KgorPEVzYz4JaW50cm8udHh0CS8qPEVzYz4qCis8RjEwPgl0ZXJtLnR4dAkvKjxGMTA+KgorPEYxMT4JdGVybS50eHQJLyo8RjExPioKKzxGMTI+CXRlcm0udHh0CS8qPEYxMj4qCis8RjEzPgl0ZXJtLnR4dAkvKjxGMTM+KgorPEYxND4JdGVybS50eHQJLyo8RjE0PioKKzxGMTU+CXRlcm0udHh0CS8qPEYxNT4qCis8RjE2Pgl0ZXJtLnR4dAkvKjxGMTY+KgorPEYxNz4JdGVybS50eHQJLyo8RjE3PioKKzxGMTg+CXRlcm0udHh0CS8qPEYxOD4qCis8RjE5Pgl0ZXJtLnR4dAkvKjxGMTk+KgorPEYxPgl2YXJpb3VzLnR4dAkvKjxGMT4qCis8RjI+CXRlcm0udHh0CS8qPEYyPioKKzxGMz4JdGVybS50eHQJLyo8RjM+KgorPEY0Pgl0ZXJtLnR4dAkvKjxGND4qCis8RjU+CXRlcm0udHh0CS8qPEY1PioKKzxGNj4JdGVybS50eHQJLyo8RjY+KgorPEY3Pgl0ZXJtLnR4dAkvKjxGNz4qCis8Rjg+CXRlcm0udHh0CS8qPEY4PioKKzxGOT4JdGVybS50eHQJLyo8Rjk+KgorPEhlbHA+CXZhcmlvdXMudHh0CS8qPEhlbHA+KgorPEhvbWU+CW1vdGlvbi50eHQJLyo8SG9tZT4qCis8SW5zZXJ0PglpbnNlcnQudHh0CS8qPEluc2VydD4qCis8TGVhZGVyPgltYXAudHh0CS8qPExlYWRlcj4qCis8TGVmdD4JbW90aW9uLnR4dAkvKjxMZWZ0PioKKzxMZWZ0RHJhZz4JdGVybS50eHQJLyo8TGVmdERyYWc+KgorPExlZnRNb3VzZT4JdmlzdWFsLnR4dAkvKjxMZWZ0TW91c2U+KgorPExlZnRSZWxlYXNlPgl2aXN1YWwudHh0CS8qPExlZnRSZWxlYXNlPioKKzxMb2NhbExlYWRlcj4JbWFwLnR4dAkvKjxMb2NhbExlYWRlcj4qCis8TS0JaW50cm8udHh0CS8qPE0tKgorPE1pZGRsZURyYWc+CXRlcm0udHh0CS8qPE1pZGRsZURyYWc+KgorPE1pZGRsZU1vdXNlPgljaGFuZ2UudHh0CS8qPE1pZGRsZU1vdXNlPioKKzxNaWRkbGVSZWxlYXNlPgl0ZXJtLnR4dAkvKjxNaWRkbGVSZWxlYXNlPioKKzxNb3VzZT4JdGVybS50eHQJLyo8TW91c2U+KgorPE1vdXNlRG93bj4Jc2Nyb2xsLnR4dAkvKjxNb3VzZURvd24+KgorPE1vdXNlVXA+CXNjcm9sbC50eHQJLyo8TW91c2VVcD4qCis8Tkw+CW1vdGlvbi50eHQJLyo8Tkw+KgorPE5vcD4JbWFwLnR4dAkvKjxOb3A+KgorPE51bD4JaW50cm8udHh0CS8qPE51bD4qCis8UGFnZURvd24+CXNjcm9sbC50eHQJLyo8UGFnZURvd24+KgorPFBhZ2VVcD4Jc2Nyb2xsLnR4dAkvKjxQYWdlVXA+KgorPFBsdWc+CW1hcC50eHQJLyo8UGx1Zz4qCis8UmV0dXJuPglpbnRyby50eHQJLyo8UmV0dXJuPioKKzxSaWdodD4JbW90aW9uLnR4dAkvKjxSaWdodD4qCis8UmlnaHREcmFnPgl0ZXJtLnR4dAkvKjxSaWdodERyYWc+KgorPFJpZ2h0TW91c2U+CXZpc3VhbC50eHQJLyo8UmlnaHRNb3VzZT4qCis8UmlnaHRSZWxlYXNlPgl0ZXJtLnR4dAkvKjxSaWdodFJlbGVhc2U+KgorPFMtCWludHJvLnR4dAkvKjxTLSoKKzxTLURlbD4Jb3NfZG9zLnR4dAkvKjxTLURlbD4qCis8Uy1Eb3duPglzY3JvbGwudHh0CS8qPFMtRG93bj4qCis8Uy1FbmQ+CXRlcm0udHh0CS8qPFMtRW5kPioKKzxTLUYxMD4JdGVybS50eHQJLyo8Uy1GMTA+KgorPFMtRjExPgl0ZXJtLnR4dAkvKjxTLUYxMT4qCis8Uy1GMTI+CXRlcm0udHh0CS8qPFMtRjEyPioKKzxTLUYxPglpbnRyby50eHQJLyo8Uy1GMT4qCis8Uy1GMj4JdGVybS50eHQJLyo8Uy1GMj4qCis8Uy1GMz4JdGVybS50eHQJLyo8Uy1GMz4qCis8Uy1GND4JdGVybS50eHQJLyo8Uy1GND4qCis8Uy1GNT4JdGVybS50eHQJLyo8Uy1GNT4qCis8Uy1GNj4JdGVybS50eHQJLyo8Uy1GNj4qCis8Uy1GNz4JdGVybS50eHQJLyo8Uy1GNz4qCis8Uy1GOD4JdGVybS50eHQJLyo8Uy1GOD4qCis8Uy1GOT4JdGVybS50eHQJLyo8Uy1GOT4qCis8Uy1Ib21lPgl0ZXJtLnR4dAkvKjxTLUhvbWU+KgorPFMtSW5zZXJ0Pglvc19kb3MudHh0CS8qPFMtSW5zZXJ0PioKKzxTLUxlZnQ+CW1vdGlvbi50eHQJLyo8Uy1MZWZ0PioKKzxTLUxlZnRNb3VzZT4JdGVybS50eHQJLyo8Uy1MZWZ0TW91c2U+KgorPFMtTW91c2VEb3duPglzY3JvbGwudHh0CS8qPFMtTW91c2VEb3duPioKKzxTLU1vdXNlVXA+CXNjcm9sbC50eHQJLyo8Uy1Nb3VzZVVwPioKKzxTLVJpZ2h0Pgltb3Rpb24udHh0CS8qPFMtUmlnaHQ+KgorPFMtUmlnaHRNb3VzZT4JdGVybS50eHQJLyo8Uy1SaWdodE1vdXNlPioKKzxTLVRhYj4JdGVybS50eHQJLyo8Uy1UYWI+KgorPFMtVXA+CXNjcm9sbC50eHQJLyo8Uy1VcD4qCis8Uy14RjE+CXRlcm0udHh0CS8qPFMteEYxPioKKzxTLXhGMj4JdGVybS50eHQJLyo8Uy14RjI+KgorPFMteEYzPgl0ZXJtLnR4dAkvKjxTLXhGMz4qCis8Uy14RjQ+CXRlcm0udHh0CS8qPFMteEY0PioKKzxTSUQ+CW1hcC50eHQJLyo8U0lEPioKKzxTTlI+CW1hcC50eHQJLyo8U05SPioKKzxTcGFjZT4JbW90aW9uLnR4dAkvKjxTcGFjZT4qCis8VGFiPgltb3Rpb24udHh0CS8qPFRhYj4qCis8VW5kbz4JdW5kby50eHQJLyo8VW5kbz4qCis8VXA+CW1vdGlvbi50eHQJLyo8VXA+KgorPGFidWY+CWNtZGxpbmUudHh0CS8qPGFidWY+KgorPGFmaWxlPgljbWRsaW5lLnR4dAkvKjxhZmlsZT4qCis8YW1hdGNoPgljbWRsaW5lLnR4dAkvKjxhbWF0Y2g+KgorPGFyZ3M+CW1hcC50eHQJLyo8YXJncz4qCis8YmFuZz4JbWFwLnR4dAkvKjxiYW5nPioKKzxjZmlsZT4JY21kbGluZS50eHQJLyo8Y2ZpbGU+KgorPGNoYXJhY3Rlcj4JaW50cm8udHh0CS8qPGNoYXJhY3Rlcj4qCis8Y291bnQ+CW1hcC50eHQJLyo8Y291bnQ+KgorPGswPgl0ZXJtLnR4dAkvKjxrMD4qCis8azE+CXRlcm0udHh0CS8qPGsxPioKKzxrMj4JdGVybS50eHQJLyo8azI+KgorPGszPgl0ZXJtLnR4dAkvKjxrMz4qCis8azQ+CXRlcm0udHh0CS8qPGs0PioKKzxrNT4JdGVybS50eHQJLyo8azU+KgorPGs2Pgl0ZXJtLnR4dAkvKjxrNj4qCis8azc+CXRlcm0udHh0CS8qPGs3PioKKzxrOD4JdGVybS50eHQJLyo8azg+KgorPGs5Pgl0ZXJtLnR4dAkvKjxrOT4qCis8a0RpdmlkZT4JdGVybS50eHQJLyo8a0RpdmlkZT4qCis8a0VuZD4JbW90aW9uLnR4dAkvKjxrRW5kPioKKzxrRW50ZXI+CXRlcm0udHh0CS8qPGtFbnRlcj4qCis8a0hvbWU+CW1vdGlvbi50eHQJLyo8a0hvbWU+KgorPGtNaW51cz4JdGVybS50eHQJLyo8a01pbnVzPioKKzxrTXVsdGlwbHk+CXRlcm0udHh0CS8qPGtNdWx0aXBseT4qCis8a1BhZ2VEb3duPglzY3JvbGwudHh0CS8qPGtQYWdlRG93bj4qCis8a1BhZ2VVcD4Jc2Nyb2xsLnR4dAkvKjxrUGFnZVVwPioKKzxrUGx1cz4JdGVybS50eHQJLyo8a1BsdXM+KgorPGtQb2ludD4JdGVybS50eHQJLyo8a1BvaW50PioKKzxsaW5lMT4JbWFwLnR4dAkvKjxsaW5lMT4qCis8bGluZTI+CW1hcC50eHQJLyo8bGluZTI+KgorPGx0PglpbnRyby50eHQJLyo8bHQ+KgorPHEtYXJncz4JbWFwLnR4dAkvKjxxLWFyZ3M+KgorPHJlZz4JbWFwLnR4dAkvKjxyZWc+KgorPHJlZ2lzdGVyPgltYXAudHh0CS8qPHJlZ2lzdGVyPioKKzxzZmlsZT4JY21kbGluZS50eHQJLyo8c2ZpbGU+KgorPHhDU0k+CWludHJvLnR4dAkvKjx4Q1NJPioKKzx4RW5kPgl0ZXJtLnR4dAkvKjx4RW5kPioKKzx4RW5kPi14dGVybQl0ZXJtLnR4dAkvKjx4RW5kPi14dGVybSoKKzx4RjE+CXRlcm0udHh0CS8qPHhGMT4qCis8eEYxPi14dGVybQl0ZXJtLnR4dAkvKjx4RjE+LXh0ZXJtKgorPHhGMj4JdGVybS50eHQJLyo8eEYyPioKKzx4RjI+LXh0ZXJtCXRlcm0udHh0CS8qPHhGMj4teHRlcm0qCis8eEYzPgl0ZXJtLnR4dAkvKjx4RjM+KgorPHhGMz4teHRlcm0JdGVybS50eHQJLyo8eEYzPi14dGVybSoKKzx4RjQ+CXRlcm0udHh0CS8qPHhGND4qCis8eEY0Pi14dGVybQl0ZXJtLnR4dAkvKjx4RjQ+LXh0ZXJtKgorPHhIb21lPgl0ZXJtLnR4dAkvKjx4SG9tZT4qCis8eEhvbWU+LXh0ZXJtCXRlcm0udHh0CS8qPHhIb21lPi14dGVybSoKKz0JY2hhbmdlLnR4dAkvKj0qCis9PQljaGFuZ2UudHh0CS8qPT0qCis+CWNoYW5nZS50eHQJLyo+KgorPj4JY2hhbmdlLnR4dAkvKj4+KgorPmNvbnQJcmVwZWF0LnR4dAkvKj5jb250KgorPmZpbmlzaAlyZXBlYXQudHh0CS8qPmZpbmlzaCoKKz5pbnRlcnJ1cHQJcmVwZWF0LnR4dAkvKj5pbnRlcnJ1cHQqCis+bmV4dAlyZXBlYXQudHh0CS8qPm5leHQqCis+cXVpdAlyZXBlYXQudHh0CS8qPnF1aXQqCis+c3RlcAlyZXBlYXQudHh0CS8qPnN0ZXAqCis/CXBhdHRlcm4udHh0CS8qPyoKKz88Q1I+CXBhdHRlcm4udHh0CS8qPzxDUj4qCitACXJlcGVhdC50eHQJLypAKgorQC8JY2hhbmdlLnR4dAkvKkBcLyoKK0A6CXJlcGVhdC50eHQJLypAOioKK0BACXJlcGVhdC50eHQJLypAQCoKK0EJaW5zZXJ0LnR4dAkvKkEqCitBQ0wJZWRpdGluZy50eHQJLypBQ0wqCitBVFRFTlRJT04JdXNyXzExLnR4dAkvKkFUVEVOVElPTioKK0FiYnJldmlhdGlvbnMJbWFwLnR4dAkvKkFiYnJldmlhdGlvbnMqCitBbGVwaAlvcHRpb25zLnR4dAkvKkFsZXBoKgorQW1pZ2EJb3NfYW1pZ2EudHh0CS8qQW1pZ2EqCitBcmFiaWMJYXJhYmljLnR4dAkvKkFyYWJpYyoKK0F0YXJpCW9zX21pbnQudHh0CS8qQXRhcmkqCitBdGhlbmEJZ3VpX3gxMS50eHQJLypBdGhlbmEqCitCCW1vdGlvbi50eHQJLypCKgorQmVCb3gJb3NfYmVvcy50eHQJLypCZUJveCoKK0JlT1MJb3NfYmVvcy50eHQJLypCZU9TKgorQnVmQWRkCWF1dG9jbWQudHh0CS8qQnVmQWRkKgorQnVmQ3JlYXRlCWF1dG9jbWQudHh0CS8qQnVmQ3JlYXRlKgorQnVmRGVsZXRlCWF1dG9jbWQudHh0CS8qQnVmRGVsZXRlKgorQnVmRW50ZXIJYXV0b2NtZC50eHQJLypCdWZFbnRlcioKK0J1ZkZpbGVQb3N0CWF1dG9jbWQudHh0CS8qQnVmRmlsZVBvc3QqCitCdWZGaWxlUHJlCWF1dG9jbWQudHh0CS8qQnVmRmlsZVByZSoKK0J1ZkhpZGRlbglhdXRvY21kLnR4dAkvKkJ1ZkhpZGRlbioKK0J1ZkxlYXZlCWF1dG9jbWQudHh0CS8qQnVmTGVhdmUqCitCdWZOZXcJYXV0b2NtZC50eHQJLypCdWZOZXcqCitCdWZOZXdGaWxlCWF1dG9jbWQudHh0CS8qQnVmTmV3RmlsZSoKK0J1ZlJlYWQJYXV0b2NtZC50eHQJLypCdWZSZWFkKgorQnVmUmVhZENtZAlhdXRvY21kLnR4dAkvKkJ1ZlJlYWRDbWQqCitCdWZSZWFkUG9zdAlhdXRvY21kLnR4dAkvKkJ1ZlJlYWRQb3N0KgorQnVmUmVhZFByZQlhdXRvY21kLnR4dAkvKkJ1ZlJlYWRQcmUqCitCdWZVbmxvYWQJYXV0b2NtZC50eHQJLypCdWZVbmxvYWQqCitCdWZXaW5FbnRlcglhdXRvY21kLnR4dAkvKkJ1ZldpbkVudGVyKgorQnVmV2luTGVhdmUJYXV0b2NtZC50eHQJLypCdWZXaW5MZWF2ZSoKK0J1ZldpcGVvdXQJYXV0b2NtZC50eHQJLypCdWZXaXBlb3V0KgorQnVmV3JpdGUJYXV0b2NtZC50eHQJLypCdWZXcml0ZSoKK0J1ZldyaXRlQ21kCWF1dG9jbWQudHh0CS8qQnVmV3JpdGVDbWQqCitCdWZXcml0ZVBvc3QJYXV0b2NtZC50eHQJLypCdWZXcml0ZVBvc3QqCitCdWZXcml0ZVByZQlhdXRvY21kLnR4dAkvKkJ1ZldyaXRlUHJlKgorQwljaGFuZ2UudHh0CS8qQyoKK0MtZWRpdGluZwl0aXBzLnR4dAkvKkMtZWRpdGluZyoKK0MtaW5kZW50aW5nCWluZGVudC50eHQJLypDLWluZGVudGluZyoKK0NPTVNQRUMJc3RhcnRpbmcudHh0CS8qQ09NU1BFQyoKK0NSLXVzZWQtZm9yLU5MCXBhdHRlcm4udHh0CS8qQ1ItdXNlZC1mb3ItTkwqCitDVFJMLTYJZWRpdGluZy50eHQJLypDVFJMLTYqCitDVFJMLUEJY2hhbmdlLnR4dAkvKkNUUkwtQSoKK0NUUkwtQglzY3JvbGwudHh0CS8qQ1RSTC1CKgorQ1RSTC1DCXBhdHRlcm4udHh0CS8qQ1RSTC1DKgorQ1RSTC1ECXNjcm9sbC50eHQJLypDVFJMLUQqCitDVFJMLUUJc2Nyb2xsLnR4dAkvKkNUUkwtRSoKK0NUUkwtRglzY3JvbGwudHh0CS8qQ1RSTC1GKgorQ1RSTC1HCWVkaXRpbmcudHh0CS8qQ1RSTC1HKgorQ1RSTC1ICW1vdGlvbi50eHQJLypDVFJMLUgqCitDVFJMLUkJbW90aW9uLnR4dAkvKkNUUkwtSSoKK0NUUkwtSgltb3Rpb24udHh0CS8qQ1RSTC1KKgorQ1RSTC1MCXZhcmlvdXMudHh0CS8qQ1RSTC1MKgorQ1RSTC1NCW1vdGlvbi50eHQJLypDVFJMLU0qCitDVFJMLU4JbW90aW9uLnR4dAkvKkNUUkwtTioKK0NUUkwtTwltb3Rpb24udHh0CS8qQ1RSTC1PKgorQ1RSTC1QCW1vdGlvbi50eHQJLypDVFJMLVAqCitDVFJMLVIJdW5kby50eHQJLypDVFJMLVIqCitDVFJMLVQJdGFnc3JjaC50eHQJLypDVFJMLVQqCitDVFJMLVUJc2Nyb2xsLnR4dAkvKkNUUkwtVSoKK0NUUkwtVS1jaGFuZ2VkCXZlcnNpb242LnR4dAkvKkNUUkwtVS1jaGFuZ2VkKgorQ1RSTC1WCXZpc3VhbC50eHQJLypDVFJMLVYqCitDVFJMLVYtYWx0ZXJuYXRpdmUJZ3VpX3czMi50eHQJLypDVFJMLVYtYWx0ZXJuYXRpdmUqCitDVFJMLVcJaW5kZXgudHh0CS8qQ1RSTC1XKgorQ1RSTC1XXysJd2luZG93cy50eHQJLypDVFJMLVdfKyoKK0NUUkwtV18tCXdpbmRvd3MudHh0CS8qQ1RSTC1XXy0qCitDVFJMLVdfPAl3aW5kb3dzLnR4dAkvKkNUUkwtV188KgorQ1RSTC1XXzxCUz4Jd2luZG93cy50eHQJLypDVFJMLVdfPEJTPioKK0NUUkwtV188RG93bj4Jd2luZG93cy50eHQJLypDVFJMLVdfPERvd24+KgorQ1RSTC1XXzxMZWZ0Pgl3aW5kb3dzLnR4dAkvKkNUUkwtV188TGVmdD4qCitDVFJMLVdfPFJpZ2h0Pgl3aW5kb3dzLnR4dAkvKkNUUkwtV188UmlnaHQ+KgorQ1RSTC1XXzxVcD4Jd2luZG93cy50eHQJLypDVFJMLVdfPFVwPioKK0NUUkwtV189CXdpbmRvd3MudHh0CS8qQ1RSTC1XXz0qCitDVFJMLVdfPgl3aW5kb3dzLnR4dAkvKkNUUkwtV18+KgorQ1RSTC1XX0NUUkwtQgl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLUIqCitDVFJMLVdfQ1RSTC1DCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtQyoKK0NUUkwtV19DVFJMLUQJdGFnc3JjaC50eHQJLypDVFJMLVdfQ1RSTC1EKgorQ1RSTC1XX0NUUkwtRgl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLUYqCitDVFJMLVdfQ1RSTC1ICXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtSCoKK0NUUkwtV19DVFJMLUkJdGFnc3JjaC50eHQJLypDVFJMLVdfQ1RSTC1JKgorQ1RSTC1XX0NUUkwtSgl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLUoqCitDVFJMLVdfQ1RSTC1LCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtSyoKK0NUUkwtV19DVFJMLUwJd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1MKgorQ1RSTC1XX0NUUkwtTgl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLU4qCitDVFJMLVdfQ1RSTC1PCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtTyoKK0NUUkwtV19DVFJMLVAJd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1QKgorQ1RSTC1XX0NUUkwtUQl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLVEqCitDVFJMLVdfQ1RSTC1SCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtUioKK0NUUkwtV19DVFJMLVMJd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1TKgorQ1RSTC1XX0NUUkwtVAl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLVQqCitDVFJMLVdfQ1RSTC1WCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtVioKK0NUUkwtV19DVFJMLVcJd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1XKgorQ1RSTC1XX0NUUkwtWAl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLVgqCitDVFJMLVdfQ1RSTC1aCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtWioKK0NUUkwtV19DVFJMLV0Jd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1dKgorQ1RSTC1XX0NUUkwtXgl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLV4qCitDVFJMLVdfQ1RSTC1fCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtXyoKK0NUUkwtV19ICXdpbmRvd3MudHh0CS8qQ1RSTC1XX0gqCitDVFJMLVdfSgl3aW5kb3dzLnR4dAkvKkNUUkwtV19KKgorQ1RSTC1XX0sJd2luZG93cy50eHQJLypDVFJMLVdfSyoKK0NUUkwtV19MCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0wqCitDVFJMLVdfUAl3aW5kb3dzLnR4dAkvKkNUUkwtV19QKgorQ1RSTC1XX1IJd2luZG93cy50eHQJLypDVFJMLVdfUioKK0NUUkwtV19TCXdpbmRvd3MudHh0CS8qQ1RSTC1XX1MqCitDVFJMLVdfVwl3aW5kb3dzLnR4dAkvKkNUUkwtV19XKgorQ1RSTC1XX10Jd2luZG93cy50eHQJLypDVFJMLVdfXSoKK0NUUkwtV19eCXdpbmRvd3MudHh0CS8qQ1RSTC1XX14qCitDVFJMLVdfXwl3aW5kb3dzLnR4dAkvKkNUUkwtV19fKgorQ1RSTC1XX2IJd2luZG93cy50eHQJLypDVFJMLVdfYioKK0NUUkwtV19iYXIJd2luZG93cy50eHQJLypDVFJMLVdfYmFyKgorQ1RSTC1XX2MJd2luZG93cy50eHQJLypDVFJMLVdfYyoKK0NUUkwtV19kCXRhZ3NyY2gudHh0CS8qQ1RSTC1XX2QqCitDVFJMLVdfZgl3aW5kb3dzLnR4dAkvKkNUUkwtV19mKgorQ1RSTC1XX2ddCXdpbmRvd3MudHh0CS8qQ1RSTC1XX2ddKgorQ1RSTC1XX2dfQ1RSTC1dCXdpbmRvd3MudHh0CS8qQ1RSTC1XX2dfQ1RSTC1dKgorQ1RSTC1XX2d9CXdpbmRvd3MudHh0CS8qQ1RSTC1XX2d9KgorQ1RSTC1XX2gJd2luZG93cy50eHQJLypDVFJMLVdfaCoKK0NUUkwtV19pCXRhZ3NyY2gudHh0CS8qQ1RSTC1XX2kqCitDVFJMLVdfagl3aW5kb3dzLnR4dAkvKkNUUkwtV19qKgorQ1RSTC1XX2sJd2luZG93cy50eHQJLypDVFJMLVdfayoKK0NUUkwtV19sCXdpbmRvd3MudHh0CS8qQ1RSTC1XX2wqCitDVFJMLVdfbgl3aW5kb3dzLnR4dAkvKkNUUkwtV19uKgorQ1RSTC1XX28Jd2luZG93cy50eHQJLypDVFJMLVdfbyoKK0NUUkwtV19wCXdpbmRvd3MudHh0CS8qQ1RSTC1XX3AqCitDVFJMLVdfcQl3aW5kb3dzLnR4dAkvKkNUUkwtV19xKgorQ1RSTC1XX3IJd2luZG93cy50eHQJLypDVFJMLVdfcioKK0NUUkwtV19zCXdpbmRvd3MudHh0CS8qQ1RSTC1XX3MqCitDVFJMLVdfdAl3aW5kb3dzLnR4dAkvKkNUUkwtV190KgorQ1RSTC1XX3YJd2luZG93cy50eHQJLypDVFJMLVdfdioKK0NUUkwtV193CXdpbmRvd3MudHh0CS8qQ1RSTC1XX3cqCitDVFJMLVdfeAl3aW5kb3dzLnR4dAkvKkNUUkwtV194KgorQ1RSTC1XX3oJd2luZG93cy50eHQJLypDVFJMLVdfeioKK0NUUkwtV199CXdpbmRvd3MudHh0CS8qQ1RSTC1XX30qCitDVFJMLVgJY2hhbmdlLnR4dAkvKkNUUkwtWCoKK0NUUkwtWQlzY3JvbGwudHh0CS8qQ1RSTC1ZKgorQ1RSTC1aCXN0YXJ0aW5nLnR4dAkvKkNUUkwtWioKK0NUUkwtXF9DVFJMLUcJaW50cm8udHh0CS8qQ1RSTC1cXF9DVFJMLUcqCitDVFJMLVxfQ1RSTC1OCWludHJvLnR4dAkvKkNUUkwtXFxfQ1RSTC1OKgorQ1RSTC1dCXRhZ3NyY2gudHh0CS8qQ1RSTC1dKgorQ1RSTC1eCWVkaXRpbmcudHh0CS8qQ1RSTC1eKgorQ1RSTC17Y2hhcn0JaW50cm8udHh0CS8qQ1RSTC17Y2hhcn0qCitDaGluZXNlCW1ieXRlLnR4dAkvKkNoaW5lc2UqCitDbWQtZXZlbnQJYXV0b2NtZC50eHQJLypDbWQtZXZlbnQqCitDbWRsaW5lCWNtZGxpbmUudHh0CS8qQ21kbGluZSoKK0NtZGxpbmUtbW9kZQljbWRsaW5lLnR4dAkvKkNtZGxpbmUtbW9kZSoKK0NtZHdpbkVudGVyCWF1dG9jbWQudHh0CS8qQ21kd2luRW50ZXIqCitDbWR3aW5MZWF2ZQlhdXRvY21kLnR4dAkvKkNtZHdpbkxlYXZlKgorQ29tbWFuZC1saW5lCWNtZGxpbmUudHh0CS8qQ29tbWFuZC1saW5lKgorQ29tbWFuZC1saW5lLW1vZGUJY21kbGluZS50eHQJLypDb21tYW5kLWxpbmUtbW9kZSoKK0NvbnRlbnRzCXF1aWNrcmVmLnR4dAkvKkNvbnRlbnRzKgorQ3Njb3BlCWlmX2NzY29wLnR4dAkvKkNzY29wZSoKK0N1cnNvckhvbGQJYXV0b2NtZC50eHQJLypDdXJzb3JIb2xkKgorQ3Vyc29ySG9sZC1leGFtcGxlCXdpbmRvd3MudHh0CS8qQ3Vyc29ySG9sZC1leGFtcGxlKgorQ3Vyc29ySU0JbWJ5dGUudHh0CS8qQ3Vyc29ySU0qCitECWNoYW5nZS50eHQJLypEKgorRE9TCW9zX2Rvcy50eHQJLypET1MqCitET1MtZm9ybWF0CWVkaXRpbmcudHh0CS8qRE9TLWZvcm1hdCoKK0RPUy1mb3JtYXQtd3JpdGUJZWRpdGluZy50eHQJLypET1MtZm9ybWF0LXdyaXRlKgorRFBNSQlvc19tc2Rvcy50eHQJLypEUE1JKgorRGlncmFwaHMJZGlncmFwaC50eHQJLypEaWdyYXBocyoKK0UJbW90aW9uLnR4dAkvKkUqCitFMTAJbWVzc2FnZS50eHQJLypFMTAqCitFMTAwCWRpZmYudHh0CS8qRTEwMCoKK0UxMDEJZGlmZi50eHQJLypFMTAxKgorRTEwMglkaWZmLnR4dAkvKkUxMDIqCitFMTAzCWRpZmYudHh0CS8qRTEwMyoKK0UxMDQJZGlncmFwaC50eHQJLypFMTA0KgorRTEwNQltYnl0ZS50eHQJLypFMTA1KgorRTEwNglldmFsLnR4dAkvKkUxMDYqCitFMTA3CWV2YWwudHh0CS8qRTEwNyoKK0UxMDgJZXZhbC50eHQJLypFMTA4KgorRTEwOQlldmFsLnR4dAkvKkUxMDkqCitFMTEJY21kbGluZS50eHQJLypFMTEqCitFMTEwCWV2YWwudHh0CS8qRTExMCoKK0UxMTEJZXZhbC50eHQJLypFMTExKgorRTExMglldmFsLnR4dAkvKkUxMTIqCitFMTEzCWV2YWwudHh0CS8qRTExMyoKK0UxMTQJZXZhbC50eHQJLypFMTE0KgorRTExNQlldmFsLnR4dAkvKkUxMTUqCitFMTE2CWV2YWwudHh0CS8qRTExNioKK0UxMTcJZXZhbC50eHQJLypFMTE3KgorRTExOAlldmFsLnR4dAkvKkUxMTgqCitFMTE5CWV2YWwudHh0CS8qRTExOSoKK0UxMgltZXNzYWdlLnR4dAkvKkUxMioKK0UxMjAJZXZhbC50eHQJLypFMTIwKgorRTEyMQlldmFsLnR4dAkvKkUxMjEqCitFMTIyCWV2YWwudHh0CS8qRTEyMioKK0UxMjMJZXZhbC50eHQJLypFMTIzKgorRTEyNAlldmFsLnR4dAkvKkUxMjQqCitFMTI1CWV2YWwudHh0CS8qRTEyNSoKK0UxMjYJZXZhbC50eHQJLypFMTI2KgorRTEyNwlldmFsLnR4dAkvKkUxMjcqCitFMTI4CWV2YWwudHh0CS8qRTEyOCoKK0UxMjkJZXZhbC50eHQJLypFMTI5KgorRTEzCW1lc3NhZ2UudHh0CS8qRTEzKgorRTEzMAlldmFsLnR4dAkvKkUxMzAqCitFMTMxCWV2YWwudHh0CS8qRTEzMSoKK0UxMzIJZXZhbC50eHQJLypFMTMyKgorRTEzMwlldmFsLnR4dAkvKkUxMzMqCitFMTM0CWNoYW5nZS50eHQJLypFMTM0KgorRTEzNQlhdXRvY21kLnR4dAkvKkUxMzUqCitFMTM2CXN0YXJ0aW5nLnR4dAkvKkUxMzYqCitFMTM3CXN0YXJ0aW5nLnR4dAkvKkUxMzcqCitFMTM4CXN0YXJ0aW5nLnR4dAkvKkUxMzgqCitFMTM5CW1lc3NhZ2UudHh0CS8qRTEzOSoKK0UxNAljbWRsaW5lLnR4dAkvKkUxNCoKK0UxNDAJbWVzc2FnZS50eHQJLypFMTQwKgorRTE0MQltZXNzYWdlLnR4dAkvKkUxNDEqCitFMTQyCW1lc3NhZ2UudHh0CS8qRTE0MioKK0UxNDMJYXV0b2NtZC50eHQJLypFMTQzKgorRTE0NAl2YXJpb3VzLnR4dAkvKkUxNDQqCitFMTQ1CXN0YXJ0aW5nLnR4dAkvKkUxNDUqCitFMTQ2CWNoYW5nZS50eHQJLypFMTQ2KgorRTE0NwlyZXBlYXQudHh0CS8qRTE0NyoKK0UxNDgJcmVwZWF0LnR4dAkvKkUxNDgqCitFMTQ5CXZhcmlvdXMudHh0CS8qRTE0OSoKK0UxNQlldmFsLnR4dAkvKkUxNSoKK0UxNTAJdmFyaW91cy50eHQJLypFMTUwKgorRTE1MQl2YXJpb3VzLnR4dAkvKkUxNTEqCitFMTUyCXZhcmlvdXMudHh0CS8qRTE1MioKK0UxNTMJdmFyaW91cy50eHQJLypFMTUzKgorRTE1NAl2YXJpb3VzLnR4dAkvKkUxNTQqCitFMTU1CXNpZ24udHh0CS8qRTE1NSoKK0UxNTYJc2lnbi50eHQJLypFMTU2KgorRTE1NwlzaWduLnR4dAkvKkUxNTcqCitFMTU4CXNpZ24udHh0CS8qRTE1OCoKK0UxNTkJc2lnbi50eHQJLypFMTU5KgorRTE2CWNtZGxpbmUudHh0CS8qRTE2KgorRTE2MAlzaWduLnR4dAkvKkUxNjAqCitFMTYxCXJlcGVhdC50eHQJLypFMTYxKgorRTE2MgltZXNzYWdlLnR4dAkvKkUxNjIqCitFMTYzCWVkaXRpbmcudHh0CS8qRTE2MyoKK0UxNjQJZWRpdGluZy50eHQJLypFMTY0KgorRTE2NQllZGl0aW5nLnR4dAkvKkUxNjUqCitFMTY2CW1lc3NhZ2UudHh0CS8qRTE2NioKK0UxNjcJcmVwZWF0LnR4dAkvKkUxNjcqCitFMTY4CXJlcGVhdC50eHQJLypFMTY4KgorRTE2OQltZXNzYWdlLnR4dAkvKkUxNjkqCitFMTcJbWVzc2FnZS50eHQJLypFMTcqCitFMTcwCWV2YWwudHh0CS8qRTE3MCoKK0UxNzEJZXZhbC50eHQJLypFMTcxKgorRTE3MgltZXNzYWdlLnR4dAkvKkUxNzIqCitFMTczCW1lc3NhZ2UudHh0CS8qRTE3MyoKK0UxNzQJbWFwLnR4dAkvKkUxNzQqCitFMTc1CW1hcC50eHQJLypFMTc1KgorRTE3NgltYXAudHh0CS8qRTE3NioKK0UxNzcJbWFwLnR4dAkvKkUxNzcqCitFMTc4CW1hcC50eHQJLypFMTc4KgorRTE3OQltYXAudHh0CS8qRTE3OSoKK0UxOAlldmFsLnR4dAkvKkUxOCoKK0UxODAJbWFwLnR4dAkvKkUxODAqCitFMTgxCW1hcC50eHQJLypFMTgxKgorRTE4MgltYXAudHh0CS8qRTE4MioKK0UxODMJbWFwLnR4dAkvKkUxODMqCitFMTg0CW1hcC50eHQJLypFMTg0KgorRTE4NQlzeW50YXgudHh0CS8qRTE4NSoKK0UxODYJZWRpdGluZy50eHQJLypFMTg2KgorRTE4NwllZGl0aW5nLnR4dAkvKkUxODcqCitFMTg4CWd1aS50eHQJLypFMTg4KgorRTE4OQltZXNzYWdlLnR4dAkvKkUxODkqCitFMTkJbWVzc2FnZS50eHQJLypFMTkqCitFMTkwCW1lc3NhZ2UudHh0CS8qRTE5MCoKK0UxOTEJbW90aW9uLnR4dAkvKkUxOTEqCitFMTkyCW1lc3NhZ2UudHh0CS8qRTE5MioKK0UxOTMJZXZhbC50eHQJLypFMTkzKgorRTE5NAltZXNzYWdlLnR4dAkvKkUxOTQqCitFMTk1CXN0YXJ0aW5nLnR4dAkvKkUxOTUqCitFMTk2CXZhcmlvdXMudHh0CS8qRTE5NioKK0UxOTcJbWxhbmcudHh0CS8qRTE5NyoKK0UxOTgJb3B0aW9ucy50eHQJLypFMTk4KgorRTE5OQljbWRsaW5lLnR4dAkvKkUxOTkqCitFMjAJbW90aW9uLnR4dAkvKkUyMCoKK0UyMDAJYXV0b2NtZC50eHQJLypFMjAwKgorRTIwMQlhdXRvY21kLnR4dAkvKkUyMDEqCitFMjAyCW9wdGlvbnMudHh0CS8qRTIwMioKK0UyMDMJYXV0b2NtZC50eHQJLypFMjAzKgorRTIwNAlhdXRvY21kLnR4dAkvKkUyMDQqCitFMjA1CWlmX3B5dGgudHh0CS8qRTIwNSoKK0UyMDYJb3B0aW9ucy50eHQJLypFMjA2KgorRTIwNwllZGl0aW5nLnR4dAkvKkUyMDcqCitFMjA4CW1lc3NhZ2UudHh0CS8qRTIwOCoKK0UyMDkJbWVzc2FnZS50eHQJLypFMjA5KgorRTIxCW9wdGlvbnMudHh0CS8qRTIxKgorRTIxMAltZXNzYWdlLnR4dAkvKkUyMTAqCitFMjExCW1lc3NhZ2UudHh0CS8qRTIxMSoKK0UyMTIJbWVzc2FnZS50eHQJLypFMjEyKgorRTIxMwlvcHRpb25zLnR4dAkvKkUyMTMqCitFMjE0CW9wdGlvbnMudHh0CS8qRTIxNCoKK0UyMTUJYXV0b2NtZC50eHQJLypFMjE1KgorRTIxNglhdXRvY21kLnR4dAkvKkUyMTYqCitFMjE3CWF1dG9jbWQudHh0CS8qRTIxNyoKK0UyMTgJYXV0b2NtZC50eHQJLypFMjE4KgorRTIxOQltZXNzYWdlLnR4dAkvKkUyMTkqCitFMjIJbWVzc2FnZS50eHQJLypFMjIqCitFMjIwCW1lc3NhZ2UudHh0CS8qRTIyMCoKK0UyMjIJbWVzc2FnZS50eHQJLypFMjIyKgorRTIyMwlvcHRpb25zLnR4dAkvKkUyMjMqCitFMjI0CW1hcC50eHQJLypFMjI0KgorRTIyNQltYXAudHh0CS8qRTIyNSoKK0UyMjYJbWFwLnR4dAkvKkUyMjYqCitFMjI3CW1hcC50eHQJLypFMjI3KgorRTIyOAltZXNzYWdlLnR4dAkvKkUyMjgqCitFMjI5CWd1aS50eHQJLypFMjI5KgorRTIzCW1lc3NhZ2UudHh0CS8qRTIzKgorRTIzMAlzdGFydGluZy50eHQJLypFMjMwKgorRTIzMQlvcHRpb25zLnR4dAkvKkUyMzEqCitFMjMyCW1lc3NhZ2UudHh0CS8qRTIzMioKK0UyMzMJZ3VpLnR4dAkvKkUyMzMqCitFMjM0CW9wdGlvbnMudHh0CS8qRTIzNCoKK0UyMzUJb3B0aW9ucy50eHQJLypFMjM1KgorRTIzNglvcHRpb25zLnR4dAkvKkUyMzYqCitFMjM3CXZhcmlvdXMudHh0CS8qRTIzNyoKK0UyMzgJdmFyaW91cy50eHQJLypFMjM4KgorRTIzOQlzaWduLnR4dAkvKkUyMzkqCitFMjQJbWVzc2FnZS50eHQJLypFMjQqCitFMjQwCXJlbW90ZS50eHQJLypFMjQwKgorRTI0MQlldmFsLnR4dAkvKkUyNDEqCitFMjQzCWlmX29sZS50eHQJLypFMjQzKgorRTI0NAlvcHRpb25zLnR4dAkvKkUyNDQqCitFMjQ1CW9wdGlvbnMudHh0CS8qRTI0NSoKK0UyNDYJYXV0b2NtZC50eHQJLypFMjQ2KgorRTI0NwlyZW1vdGUudHh0CS8qRTI0NyoKK0UyNDgJcmVtb3RlLnR4dAkvKkUyNDgqCitFMjUJbWVzc2FnZS50eHQJLypFMjUqCitFMjUwCW9wdGlvbnMudHh0CS8qRTI1MCoKK0UyNTEJcmVtb3RlLnR4dAkvKkUyNTEqCitFMjUyCW9wdGlvbnMudHh0CS8qRTI1MioKK0UyNTMJbWJ5dGUudHh0CS8qRTI1MyoKK0UyNTQJbWVzc2FnZS50eHQJLypFMjU0KgorRTI1NQlzaWduLnR4dAkvKkUyNTUqCitFMjU2CW1lc3NhZ2UudHh0CS8qRTI1NioKK0UyNTcJaWZfY3Njb3AudHh0CS8qRTI1NyoKK0UyNTgJcmVtb3RlLnR4dAkvKkUyNTgqCitFMjU5CWlmX2NzY29wLnR4dAkvKkUyNTkqCitFMjYJcmlsZWZ0LnR4dAkvKkUyNioKK0UyNjAJaWZfY3Njb3AudHh0CS8qRTI2MCoKK0UyNjEJaWZfY3Njb3AudHh0CS8qRTI2MSoKK0UyNjIJaWZfY3Njb3AudHh0CS8qRTI2MioKK0UyNjMJaWZfcHl0aC50eHQJLypFMjYzKgorRTI2NAlpZl9weXRoLnR4dAkvKkUyNjQqCitFMjY1CWlmX3J1YnkudHh0CS8qRTI2NSoKK0UyNjYJaWZfcnVieS50eHQJLypFMjY2KgorRTI2NwlpZl9ydWJ5LnR4dAkvKkUyNjcqCitFMjY4CWlmX3J1YnkudHh0CS8qRTI2OCoKK0UyNjkJaWZfcnVieS50eHQJLypFMjY5KgorRTI3CWZhcnNpLnR4dAkvKkUyNyoKK0UyNzAJaWZfcnVieS50eHQJLypFMjcwKgorRTI3MQlpZl9ydWJ5LnR4dAkvKkUyNzEqCitFMjcyCWlmX3J1YnkudHh0CS8qRTI3MioKK0UyNzMJaWZfcnVieS50eHQJLypFMjczKgorRTI3NAlpZl9zbmlmZi50eHQJLypFMjc0KgorRTI3NQlpZl9zbmlmZi50eHQJLypFMjc1KgorRTI3NglpZl9zbmlmZi50eHQJLypFMjc2KgorRTI3NwlyZW1vdGUudHh0CS8qRTI3NyoKK0UyNzgJaWZfc25pZmYudHh0CS8qRTI3OCoKK0UyNzkJaWZfc25pZmYudHh0CS8qRTI3OSoKK0UyOAlzeW50YXgudHh0CS8qRTI4KgorRTI4MAlpZl90Y2wudHh0CS8qRTI4MCoKK0UyODEJaWZfdGNsLnR4dAkvKkUyODEqCitFMjgyCXN0YXJ0aW5nLnR4dAkvKkUyODIqCitFMjgzCW1vdGlvbi50eHQJLypFMjgzKgorRTI4NAltYnl0ZS50eHQJLypFMjg0KgorRTI4NQltYnl0ZS50eHQJLypFMjg1KgorRTI4NgltYnl0ZS50eHQJLypFMjg2KgorRTI4NwltYnl0ZS50eHQJLypFMjg3KgorRTI4OAltYnl0ZS50eHQJLypFMjg4KgorRTI4OQltYnl0ZS50eHQJLypFMjg5KgorRTI5CWNoYW5nZS50eHQJLypFMjkqCitFMjkwCW1ieXRlLnR4dAkvKkUyOTAqCitFMjkxCW1ieXRlLnR4dAkvKkUyOTEqCitFMjkyCW1ieXRlLnR4dAkvKkUyOTIqCitFMjkzCW1lc3NhZ2UudHh0CS8qRTI5MyoKK0UyOTQJbWVzc2FnZS50eHQJLypFMjk0KgorRTI5NQltZXNzYWdlLnR4dAkvKkUyOTUqCitFMjk2CW1lc3NhZ2UudHh0CS8qRTI5NioKK0UyOTcJbWVzc2FnZS50eHQJLypFMjk3KgorRTI5OAltZXNzYWdlLnR4dAkvKkUyOTgqCitFMjk5CWlmX3BlcmwudHh0CS8qRTI5OSoKK0UzMAljaGFuZ2UudHh0CS8qRTMwKgorRTMwMAltZXNzYWdlLnR4dAkvKkUzMDAqCitFMzAxCW1lc3NhZ2UudHh0CS8qRTMwMSoKK0UzMDIJbWVzc2FnZS50eHQJLypFMzAyKgorRTMwMwltZXNzYWdlLnR4dAkvKkUzMDMqCitFMzA0CW1lc3NhZ2UudHh0CS8qRTMwNCoKK0UzMDUJcmVjb3Zlci50eHQJLypFMzA1KgorRTMwNglyZWNvdmVyLnR4dAkvKkUzMDYqCitFMzA3CXJlY292ZXIudHh0CS8qRTMwNyoKK0UzMDgJcmVjb3Zlci50eHQJLypFMzA4KgorRTMwOQlyZWNvdmVyLnR4dAkvKkUzMDkqCitFMzEJbWVzc2FnZS50eHQJLypFMzEqCitFMzEwCXJlY292ZXIudHh0CS8qRTMxMCoKK0UzMTEJcmVjb3Zlci50eHQJLypFMzExKgorRTMxMglyZWNvdmVyLnR4dAkvKkUzMTIqCitFMzEzCXJlY292ZXIudHh0CS8qRTMxMyoKK0UzMTQJcmVjb3Zlci50eHQJLypFMzE0KgorRTMxNQltZXNzYWdlLnR4dAkvKkUzMTUqCitFMzE2CW1lc3NhZ2UudHh0CS8qRTMxNioKK0UzMTcJbWVzc2FnZS50eHQJLypFMzE3KgorRTMxOAltZXNzYWdlLnR4dAkvKkUzMTgqCitFMzE5CW1lc3NhZ2UudHh0CS8qRTMxOSoKK0UzMgltZXNzYWdlLnR4dAkvKkUzMioKK0UzMjAJbWVzc2FnZS50eHQJLypFMzIwKgorRTMyMQllZGl0aW5nLnR4dAkvKkUzMjEqCitFMzIyCW1lc3NhZ2UudHh0CS8qRTMyMioKK0UzMjMJbWVzc2FnZS50eHQJLypFMzIzKgorRTMyNAl2YXJpb3VzLnR4dAkvKkUzMjQqCitFMzI1CXVzcl8xMS50eHQJLypFMzI1KgorRTMyNglyZWNvdmVyLnR4dAkvKkUzMjYqCitFMzI3CWd1aS50eHQJLypFMzI3KgorRTMyOAlndWkudHh0CS8qRTMyOCoKK0UzMjkJZ3VpLnR4dAkvKkUzMjkqCitFMzMJbWVzc2FnZS50eHQJLypFMzMqCitFMzMwCWd1aS50eHQJLypFMzMwKgorRTMzMQlndWkudHh0CS8qRTMzMSoKK0UzMzIJZ3VpLnR4dAkvKkUzMzIqCitFMzMzCWd1aS50eHQJLypFMzMzKgorRTMzNAlndWkudHh0CS8qRTMzNCoKK0UzMzUJZ3VpLnR4dAkvKkUzMzUqCitFMzM2CWd1aS50eHQJLypFMzM2KgorRTMzNwlndWkudHh0CS8qRTMzNyoKK0UzMzgJZWRpdGluZy50eHQJLypFMzM4KgorRTMzOQltZXNzYWdlLnR4dAkvKkUzMzkqCitFMzQJdmFyaW91cy50eHQJLypFMzQqCitFMzQwCXZpX2RpZmYudHh0CS8qRTM0MCoKK0UzNDEJbWVzc2FnZS50eHQJLypFMzQxKgorRTM0MgltZXNzYWdlLnR4dAkvKkUzNDIqCitFMzQzCW9wdGlvbnMudHh0CS8qRTM0MyoKK0UzNDQJb3B0aW9ucy50eHQJLypFMzQ0KgorRTM0NQlvcHRpb25zLnR4dAkvKkUzNDUqCitFMzQ2CW9wdGlvbnMudHh0CS8qRTM0NioKK0UzNDcJb3B0aW9ucy50eHQJLypFMzQ3KgorRTM0OAlwYXR0ZXJuLnR4dAkvKkUzNDgqCitFMzQ5CXBhdHRlcm4udHh0CS8qRTM0OSoKK0UzNQltZXNzYWdlLnR4dAkvKkUzNSoKK0UzNTAJZm9sZC50eHQJLypFMzUwKgorRTM1MQlmb2xkLnR4dAkvKkUzNTEqCitFMzUyCWZvbGQudHh0CS8qRTM1MioKK0UzNTMJY2hhbmdlLnR4dAkvKkUzNTMqCitFMzU0CWNoYW5nZS50eHQJLypFMzU0KgorRTM1NQlvcHRpb25zLnR4dAkvKkUzNTUqCitFMzU2CW1lc3NhZ2UudHh0CS8qRTM1NioKK0UzNTcJb3B0aW9ucy50eHQJLypFMzU3KgorRTM1OAlvcHRpb25zLnR4dAkvKkUzNTgqCitFMzU5CXRlcm0udHh0CS8qRTM1OSoKK0UzNgl3aW5kb3dzLnR4dAkvKkUzNioKK0UzNjAJdmFyaW91cy50eHQJLypFMzYwKgorRTM2MQlwYXR0ZXJuLnR4dAkvKkUzNjEqCitFMzYyCXRlcm0udHh0CS8qRTM2MioKK0UzNjMJcGF0dGVybi50eHQJLypFMzYzKgorRTM2NAlldmFsLnR4dAkvKkUzNjQqCitFMzY1CW9wdGlvbnMudHh0CS8qRTM2NSoKK0UzNjYJb3B0aW9ucy50eHQJLypFMzY2KgorRTM2NwlhdXRvY21kLnR4dAkvKkUzNjcqCitFMzY4CWV2YWwudHh0CS8qRTM2OCoKK0UzNjkJcGF0dGVybi50eHQJLypFMzY5KgorRTM3CW1lc3NhZ2UudHh0CS8qRTM3KgorRTM3MAl2YXJpb3VzLnR4dAkvKkUzNzAqCitFMzcxCXZhcmlvdXMudHh0CS8qRTM3MSoKK0UzNzIJcXVpY2tmaXgudHh0CS8qRTM3MioKK0UzNzMJcXVpY2tmaXgudHh0CS8qRTM3MyoKK0UzNzQJcXVpY2tmaXgudHh0CS8qRTM3NCoKK0UzNzUJcXVpY2tmaXgudHh0CS8qRTM3NSoKK0UzNzYJcXVpY2tmaXgudHh0CS8qRTM3NioKK0UzNzcJcXVpY2tmaXgudHh0CS8qRTM3NyoKK0UzNzgJcXVpY2tmaXgudHh0CS8qRTM3OCoKK0UzNzkJcXVpY2tmaXgudHh0CS8qRTM3OSoKK0UzOAltZXNzYWdlLnR4dAkvKkUzOCoKK0UzODAJcXVpY2tmaXgudHh0CS8qRTM4MCoKK0UzODEJcXVpY2tmaXgudHh0CS8qRTM4MSoKK0UzODIJb3B0aW9ucy50eHQJLypFMzgyKgorRTM4MwlwYXR0ZXJuLnR4dAkvKkUzODMqCitFMzg0CW9wdGlvbnMudHh0CS8qRTM4NCoKK0UzODUJb3B0aW9ucy50eHQJLypFMzg1KgorRTM4NglwYXR0ZXJuLnR4dAkvKkUzODYqCitFMzg3CXRhZ3NyY2gudHh0CS8qRTM4NyoKK0UzODgJdGFnc3JjaC50eHQJLypFMzg4KgorRTM4OQl0YWdzcmNoLnR4dAkvKkUzODkqCitFMzkJZGlncmFwaC50eHQJLypFMzkqCitFMzkwCXN5bnRheC50eHQJLypFMzkwKgorRTM5MQlzeW50YXgudHh0CS8qRTM5MSoKK0UzOTIJc3ludGF4LnR4dAkvKkUzOTIqCitFMzkzCXN5bnRheC50eHQJLypFMzkzKgorRTM5NAlzeW50YXgudHh0CS8qRTM5NCoKK0UzOTUJc3ludGF4LnR4dAkvKkUzOTUqCitFMzk2CXN5bnRheC50eHQJLypFMzk2KgorRTM5NwlzeW50YXgudHh0CS8qRTM5NyoKK0UzOTgJc3ludGF4LnR4dAkvKkUzOTgqCitFMzk5CXN5bnRheC50eHQJLypFMzk5KgorRTQwCW1lc3NhZ2UudHh0CS8qRTQwKgorRTQwMAlzeW50YXgudHh0CS8qRTQwMCoKK0U0MDEJc3ludGF4LnR4dAkvKkU0MDEqCitFNDAyCXN5bnRheC50eHQJLypFNDAyKgorRTQwMwlzeW50YXgudHh0CS8qRTQwMyoKK0U0MDQJc3ludGF4LnR4dAkvKkU0MDQqCitFNDA1CXN5bnRheC50eHQJLypFNDA1KgorRTQwNglzeW50YXgudHh0CS8qRTQwNioKK0U0MDcJc3ludGF4LnR4dAkvKkU0MDcqCitFNDA4CXN5bnRheC50eHQJLypFNDA4KgorRTQwOQlzeW50YXgudHh0CS8qRTQwOSoKK0U0MQltZXNzYWdlLnR4dAkvKkU0MSoKK0U0MTAJc3ludGF4LnR4dAkvKkU0MTAqCitFNDExCXN5bnRheC50eHQJLypFNDExKgorRTQxMglzeW50YXgudHh0CS8qRTQxMioKK0U0MTMJc3ludGF4LnR4dAkvKkU0MTMqCitFNDE0CXN5bnRheC50eHQJLypFNDE0KgorRTQxNQlzeW50YXgudHh0CS8qRTQxNSoKK0U0MTYJc3ludGF4LnR4dAkvKkU0MTYqCitFNDE3CXN5bnRheC50eHQJLypFNDE3KgorRTQxOAlzeW50YXgudHh0CS8qRTQxOCoKK0U0MTkJc3ludGF4LnR4dAkvKkU0MTkqCitFNDIJcXVpY2tmaXgudHh0CS8qRTQyKgorRTQyMAlzeW50YXgudHh0CS8qRTQyMCoKK0U0MjEJc3ludGF4LnR4dAkvKkU0MjEqCitFNDIyCXN5bnRheC50eHQJLypFNDIyKgorRTQyMwlzeW50YXgudHh0CS8qRTQyMyoKK0U0MjQJbWVzc2FnZS50eHQJLypFNDI0KgorRTQyNQl0YWdzcmNoLnR4dAkvKkU0MjUqCitFNDI2CXRhZ3NyY2gudHh0CS8qRTQyNioKK0U0MjcJdGFnc3JjaC50eHQJLypFNDI3KgorRTQyOAl0YWdzcmNoLnR4dAkvKkU0MjgqCitFNDI5CXRhZ3NyY2gudHh0CS8qRTQyOSoKK0U0MwltZXNzYWdlLnR4dAkvKkU0MyoKK0U0MzAJdGFnc3JjaC50eHQJLypFNDMwKgorRTQzMQl0YWdzcmNoLnR4dAkvKkU0MzEqCitFNDMyCW1lc3NhZ2UudHh0CS8qRTQzMioKK0U0MzMJb3B0aW9ucy50eHQJLypFNDMzKgorRTQzNAl0YWdzcmNoLnR4dAkvKkU0MzQqCitFNDM1CXRhZ3NyY2gudHh0CS8qRTQzNSoKK0U0MzYJdGVybS50eHQJLypFNDM2KgorRTQzNwl0ZXJtLnR4dAkvKkU0MzcqCitFNDM4CW1lc3NhZ2UudHh0CS8qRTQzOCoKK0U0MzkJbWVzc2FnZS50eHQJLypFNDM5KgorRTQ0CW1lc3NhZ2UudHh0CS8qRTQ0KgorRTQ0MAltZXNzYWdlLnR4dAkvKkU0NDAqCitFNDQxCXdpbmRvd3MudHh0CS8qRTQ0MSoKK0U0NDIJd2luZG93cy50eHQJLypFNDQyKgorRTQ0Mwl3aW5kb3dzLnR4dAkvKkU0NDMqCitFNDQ0CXdpbmRvd3MudHh0CS8qRTQ0NCoKK0U0NDUJd2luZG93cy50eHQJLypFNDQ1KgorRTQ0NgllZGl0aW5nLnR4dAkvKkU0NDYqCitFNDQ3CWVkaXRpbmcudHh0CS8qRTQ0NyoKK0U0NDgJdmFyaW91cy50eHQJLypFNDQ4KgorRTQ0OQlldmFsLnR4dAkvKkU0NDkqCitFNDUJbWVzc2FnZS50eHQJLypFNDUqCitFNDUwCW9zX21zZG9zLnR4dAkvKkU0NTAqCitFNDUxCW9zX21zZG9zLnR4dAkvKkU0NTEqCitFNDUyCW9zX21zZG9zLnR4dAkvKkU0NTIqCitFNDUzCW9zX21zZG9zLnR4dAkvKkU0NTMqCitFNDU0CW9zX21zZG9zLnR4dAkvKkU0NTQqCitFNDU1CXZhcmlvdXMudHh0CS8qRTQ1NSoKK0U0NTYJdmFyaW91cy50eHQJLypFNDU2KgorRTQ1Nwl2YXJpb3VzLnR4dAkvKkU0NTcqCitFNDU4CW1lc3NhZ2UudHh0CS8qRTQ1OCoKK0U0NTkJbWVzc2FnZS50eHQJLypFNDU5KgorRTQ2CW1lc3NhZ2UudHh0CS8qRTQ2KgorRTQ2MAltZXNzYWdlLnR4dAkvKkU0NjAqCitFNDYxCWV2YWwudHh0CS8qRTQ2MSoKK0U0NjIJZWRpdGluZy50eHQJLypFNDYyKgorRTQ2MwluZXRiZWFucy50eHQJLypFNDYzKgorRTQ2NAltZXNzYWdlLnR4dAkvKkU0NjQqCitFNDY1CWd1aS50eHQJLypFNDY1KgorRTQ2NglndWkudHh0CS8qRTQ2NioKK0U0NjcJbWFwLnR4dAkvKkU0NjcqCitFNDY4CW1hcC50eHQJLypFNDY4KgorRTQ2OQlpZl9jc2NvcC50eHQJLypFNDY5KgorRTQ3CW1lc3NhZ2UudHh0CS8qRTQ3KgorRTQ3MAljaGFuZ2UudHh0CS8qRTQ3MCoKK0U0NzEJbWVzc2FnZS50eHQJLypFNDcxKgorRTQ3MgllZGl0aW5nLnR4dAkvKkU0NzIqCitFNDczCW1lc3NhZ2UudHh0CS8qRTQ3MyoKK0U0NzQJbWVzc2FnZS50eHQJLypFNDc0KgorRTQ3NQltZXNzYWdlLnR4dAkvKkU0NzUqCitFNDc2CXBhdHRlcm4udHh0CS8qRTQ3NioKK0U0NzcJbWVzc2FnZS50eHQJLypFNDc3KgorRTQ3OAltZXNzYWdlLnR4dAkvKkU0NzgqCitFNDc5CWVkaXRpbmcudHh0CS8qRTQ3OSoKK0U0OAlldmFsLnR4dAkvKkU0OCoKK0U0ODAJZWRpdGluZy50eHQJLypFNDgwKgorRTQ4MQltZXNzYWdlLnR4dAkvKkU0ODEqCitFNDgyCW1lc3NhZ2UudHh0CS8qRTQ4MioKK0U0ODMJbWVzc2FnZS50eHQJLypFNDgzKgorRTQ4NAltZXNzYWdlLnR4dAkvKkU0ODQqCitFNDg1CW1lc3NhZ2UudHh0CS8qRTQ4NSoKK0U0ODYJcGF0dGVybi50eHQJLypFNDg2KgorRTQ4NwlvcHRpb25zLnR4dAkvKkU0ODcqCitFNDg4CW1lc3NhZ2UudHh0CS8qRTQ4OCoKK0U0ODkJaW50cm8udHh0CS8qRTQ4OSoKK0U0OQltZXNzYWdlLnR4dAkvKkU0OSoKK0U0OTAJZm9sZC50eHQJLypFNDkwKgorRTQ5MgltZXNzYWdlLnR4dAkvKkU0OTIqCitFNDkzCWNtZGxpbmUudHh0CS8qRTQ5MyoKK0U0OTQJZWRpdGluZy50eHQJLypFNDk0KgorRTQ5NQljbWRsaW5lLnR4dAkvKkU0OTUqCitFNDk2CWNtZGxpbmUudHh0CS8qRTQ5NioKK0U0OTcJY21kbGluZS50eHQJLypFNDk3KgorRTQ5OAljbWRsaW5lLnR4dAkvKkU0OTgqCitFNDk5CWNtZGxpbmUudHh0CS8qRTQ5OSoKK0U1MAlzeW50YXgudHh0CS8qRTUwKgorRTUwMAljbWRsaW5lLnR4dAkvKkU1MDAqCitFNTAxCWludHJvLnR4dAkvKkU1MDEqCitFNTAyCWVkaXRpbmcudHh0CS8qRTUwMioKK0U1MDMJZWRpdGluZy50eHQJLypFNTAzKgorRTUwNAllZGl0aW5nLnR4dAkvKkU1MDQqCitFNTA1CWVkaXRpbmcudHh0CS8qRTUwNSoKK0U1MDYJZWRpdGluZy50eHQJLypFNTA2KgorRTUwNwllZGl0aW5nLnR4dAkvKkU1MDcqCitFNTA4CWVkaXRpbmcudHh0CS8qRTUwOCoKK0U1MDkJZWRpdGluZy50eHQJLypFNTA5KgorRTUxCXBhdHRlcm4udHh0CS8qRTUxKgorRTUxMAllZGl0aW5nLnR4dAkvKkU1MTAqCitFNTEyCWVkaXRpbmcudHh0CS8qRTUxMioKK0U1MTMJb3B0aW9ucy50eHQJLypFNTEzKgorRTUxNAllZGl0aW5nLnR4dAkvKkU1MTQqCitFNTE1CXdpbmRvd3MudHh0CS8qRTUxNSoKK0U1MTYJd2luZG93cy50eHQJLypFNTE2KgorRTUxNwl3aW5kb3dzLnR4dAkvKkU1MTcqCitFNTE4CW9wdGlvbnMudHh0CS8qRTUxOCoKK0U1MTkJb3B0aW9ucy50eHQJLypFNTE5KgorRTUyCXN5bnRheC50eHQJLypFNTIqCitFNTIwCW9wdGlvbnMudHh0CS8qRTUyMCoKK0U1MjEJb3B0aW9ucy50eHQJLypFNTIxKgorRTUyMglvcHRpb25zLnR4dAkvKkU1MjIqCitFNTIzCW9wdGlvbnMudHh0CS8qRTUyMyoKK0U1MjQJb3B0aW9ucy50eHQJLypFNTI0KgorRTUyNQlvcHRpb25zLnR4dAkvKkU1MjUqCitFNTI2CW9wdGlvbnMudHh0CS8qRTUyNioKK0U1MjcJb3B0aW9ucy50eHQJLypFNTI3KgorRTUyOAlvcHRpb25zLnR4dAkvKkU1MjgqCitFNTI5CW9wdGlvbnMudHh0CS8qRTUyOSoKK0U1MwlwYXR0ZXJuLnR4dAkvKkU1MyoKK0U1MzAJb3B0aW9ucy50eHQJLypFNTMwKgorRTUzMQlvcHRpb25zLnR4dAkvKkU1MzEqCitFNTMzCW9wdGlvbnMudHh0CS8qRTUzMyoKK0U1MzQJb3B0aW9ucy50eHQJLypFNTM0KgorRTUzNQlvcHRpb25zLnR4dAkvKkU1MzUqCitFNTM2CW9wdGlvbnMudHh0CS8qRTUzNioKK0U1MzcJb3B0aW9ucy50eHQJLypFNTM3KgorRTUzOAlvcHRpb25zLnR4dAkvKkU1MzgqCitFNTM5CW9wdGlvbnMudHh0CS8qRTUzOSoKK0U1NAlwYXR0ZXJuLnR4dAkvKkU1NCoKK0U1NDAJb3B0aW9ucy50eHQJLypFNTQwKgorRTU0MQlvcHRpb25zLnR4dAkvKkU1NDEqCitFNTQyCW9wdGlvbnMudHh0CS8qRTU0MioKK0U1NDMJb3B0aW9ucy50eHQJLypFNTQzKgorRTU0NAlvcHRpb25zLnR4dAkvKkU1NDQqCitFNTQ1CW9wdGlvbnMudHh0CS8qRTU0NSoKK0U1NDYJb3B0aW9ucy50eHQJLypFNTQ2KgorRTU0NwlvcHRpb25zLnR4dAkvKkU1NDcqCitFNTQ4CW9wdGlvbnMudHh0CS8qRTU0OCoKK0U1NDkJb3B0aW9ucy50eHQJLypFNTQ5KgorRTU1CXBhdHRlcm4udHh0CS8qRTU1KgorRTU1MAlvcHRpb25zLnR4dAkvKkU1NTAqCitFNTUxCW9wdGlvbnMudHh0CS8qRTU1MSoKK0U1NTIJb3B0aW9ucy50eHQJLypFNTUyKgorRTU1MwlxdWlja2ZpeC50eHQJLypFNTUzKgorRTU1NAlwYXR0ZXJuLnR4dAkvKkU1NTQqCitFNTU1CXRhZ3NyY2gudHh0CS8qRTU1NSoKK0U1NTYJdGFnc3JjaC50eHQJLypFNTU2KgorRTU1Nwl0ZXJtLnR4dAkvKkU1NTcqCitFNTU4CXRlcm0udHh0CS8qRTU1OCoKK0U1NTkJdGVybS50eHQJLypFNTU5KgorRTU2CXBhdHRlcm4udHh0CS8qRTU2KgorRTU2MAlpZl9jc2NvcC50eHQJLypFNTYwKgorRTU2MQlpZl9jc2NvcC50eHQJLypFNTYxKgorRTU2MglpZl9jc2NvcC50eHQJLypFNTYyKgorRTU2MwlpZl9jc2NvcC50eHQJLypFNTYzKgorRTU2NAlpZl9jc2NvcC50eHQJLypFNTY0KgorRTU2NQlpZl9jc2NvcC50eHQJLypFNTY1KgorRTU2NglpZl9jc2NvcC50eHQJLypFNTY2KgorRTU2NwlpZl9jc2NvcC50eHQJLypFNTY3KgorRTU2OAlpZl9jc2NvcC50eHQJLypFNTY4KgorRTU2OQlpZl9jc2NvcC50eHQJLypFNTY5KgorRTU3CXBhdHRlcm4udHh0CS8qRTU3KgorRTU3MAltZXNzYWdlLnR4dAkvKkU1NzAqCitFNTcxCWlmX3RjbC50eHQJLypFNTcxKgorRTU3MglpZl90Y2wudHh0CS8qRTU3MioKK0U1NzMJcmVtb3RlLnR4dAkvKkU1NzMqCitFNTc0CXN0YXJ0aW5nLnR4dAkvKkU1NzQqCitFNTc1CXN0YXJ0aW5nLnR4dAkvKkU1NzUqCitFNTc2CXN0YXJ0aW5nLnR4dAkvKkU1NzYqCitFNTc3CXN0YXJ0aW5nLnR4dAkvKkU1NzcqCitFNTc4CWVkaXRpbmcudHh0CS8qRTU3OCoKK0U1NzkJZXZhbC50eHQJLypFNTc5KgorRTU4CXBhdHRlcm4udHh0CS8qRTU4KgorRTU4MAlldmFsLnR4dAkvKkU1ODAqCitFNTgxCWV2YWwudHh0CS8qRTU4MSoKK0U1ODIJZXZhbC50eHQJLypFNTgyKgorRTU4MwlldmFsLnR4dAkvKkU1ODMqCitFNTg0CWV2YWwudHh0CS8qRTU4NCoKK0U1ODUJZXZhbC50eHQJLypFNTg1KgorRTU4NglldmFsLnR4dAkvKkU1ODYqCitFNTg3CWV2YWwudHh0CS8qRTU4NyoKK0U1ODgJZXZhbC50eHQJLypFNTg4KgorRTU4OQlvcHRpb25zLnR4dAkvKkU1ODkqCitFNTkJcGF0dGVybi50eHQJLypFNTkqCitFNTkwCW9wdGlvbnMudHh0CS8qRTU5MCoKK0U1OTEJb3B0aW9ucy50eHQJLypFNTkxKgorRTU5MglvcHRpb25zLnR4dAkvKkU1OTIqCitFNTkzCW9wdGlvbnMudHh0CS8qRTU5MyoKK0U1OTQJb3B0aW9ucy50eHQJLypFNTk0KgorRTU5NQlvcHRpb25zLnR4dAkvKkU1OTUqCitFNTk2CW9wdGlvbnMudHh0CS8qRTU5NioKK0U1OTcJb3B0aW9ucy50eHQJLypFNTk3KgorRTU5OAlvcHRpb25zLnR4dAkvKkU1OTgqCitFNjAJcGF0dGVybi50eHQJLypFNjAqCitFNjAwCWV2YWwudHh0CS8qRTYwMCoKK0U2MDEJZXZhbC50eHQJLypFNjAxKgorRTYwMglldmFsLnR4dAkvKkU2MDIqCitFNjAzCWV2YWwudHh0CS8qRTYwMyoKK0U2MDQJZXZhbC50eHQJLypFNjA0KgorRTYwNQlldmFsLnR4dAkvKkU2MDUqCitFNjA2CWV2YWwudHh0CS8qRTYwNioKK0U2MDcJZXZhbC50eHQJLypFNjA3KgorRTYwOAlldmFsLnR4dAkvKkU2MDgqCitFNjA5CWlmX2NzY29wLnR4dAkvKkU2MDkqCitFNjEJcGF0dGVybi50eHQJLypFNjEqCitFNjEwCW9wdGlvbnMudHh0CS8qRTYxMCoKK0U2MTEJb3B0aW9ucy50eHQJLypFNjExKgorRTYxMglzaWduLnR4dAkvKkU2MTIqCitFNjEzCW9wdGlvbnMudHh0CS8qRTYxMyoKK0U2MTQJZWRpdGluZy50eHQJLypFNjE0KgorRTYxNQllZGl0aW5nLnR4dAkvKkU2MTUqCitFNjE2CWVkaXRpbmcudHh0CS8qRTYxNioKK0U2MTcJb3B0aW9ucy50eHQJLypFNjE3KgorRTYxOAl2YXJpb3VzLnR4dAkvKkU2MTgqCitFNjE5CXZhcmlvdXMudHh0CS8qRTYxOSoKK0U2MglwYXR0ZXJuLnR4dAkvKkU2MioKK0U2MjAJb3B0aW9ucy50eHQJLypFNjIwKgorRTYyMQl2YXJpb3VzLnR4dAkvKkU2MjEqCitFNjIyCWlmX2NzY29wLnR4dAkvKkU2MjIqCitFNjIzCWlmX2NzY29wLnR4dAkvKkU2MjMqCitFNjI0CXZhcmlvdXMudHh0CS8qRTYyNCoKK0U2MjUJaWZfY3Njb3AudHh0CS8qRTYyNSoKK0U2MjYJaWZfY3Njb3AudHh0CS8qRTYyNioKK0U2MjcJbmV0YmVhbnMudHh0CS8qRTYyNyoKK0U2MjgJbmV0YmVhbnMudHh0CS8qRTYyOCoKK0U2MjkJbmV0YmVhbnMudHh0CS8qRTYyOSoKK0U2MwlwYXR0ZXJuLnR4dAkvKkU2MyoKK0U2MzAJbmV0YmVhbnMudHh0CS8qRTYzMCoKK0U2MzEJbmV0YmVhbnMudHh0CS8qRTYzMSoKK0U2MzIJbmV0YmVhbnMudHh0CS8qRTYzMioKK0U2MzMJbmV0YmVhbnMudHh0CS8qRTYzMyoKK0U2MzQJbmV0YmVhbnMudHh0CS8qRTYzNCoKK0U2MzUJbmV0YmVhbnMudHh0CS8qRTYzNSoKK0U2MzYJbmV0YmVhbnMudHh0CS8qRTYzNioKK0U2MzcJbmV0YmVhbnMudHh0CS8qRTYzNyoKK0U2MzgJbmV0YmVhbnMudHh0CS8qRTYzOCoKK0U2MzkJbmV0YmVhbnMudHh0CS8qRTYzOSoKK0U2NAlwYXR0ZXJuLnR4dAkvKkU2NCoKK0U2NDAJbmV0YmVhbnMudHh0CS8qRTY0MCoKK0U2NDEJbmV0YmVhbnMudHh0CS8qRTY0MSoKK0U2NDIJbmV0YmVhbnMudHh0CS8qRTY0MioKK0U2NDMJbmV0YmVhbnMudHh0CS8qRTY0MyoKK0U2NDQJbmV0YmVhbnMudHh0CS8qRTY0NCoKK0U2NDUJbmV0YmVhbnMudHh0CS8qRTY0NSoKK0U2NDYJbmV0YmVhbnMudHh0CS8qRTY0NioKK0U2NDcJbmV0YmVhbnMudHh0CS8qRTY0NyoKK0U2NDgJbmV0YmVhbnMudHh0CS8qRTY0OCoKK0U2NDkJbmV0YmVhbnMudHh0CS8qRTY0OSoKK0U2NQlwYXR0ZXJuLnR4dAkvKkU2NSoKK0U2NTAJbmV0YmVhbnMudHh0CS8qRTY1MCoKK0U2NTEJbmV0YmVhbnMudHh0CS8qRTY1MSoKK0U2NTIJbmV0YmVhbnMudHh0CS8qRTY1MioKK0U2NTMJbmV0YmVhbnMudHh0CS8qRTY1MyoKK0U2NTQJbmV0YmVhbnMudHh0CS8qRTY1NCoKK0U2NTUJZXZhbC50eHQJLypFNjU1KgorRTY1NgluZXRiZWFucy50eHQJLypFNjU2KgorRTY1NwluZXRiZWFucy50eHQJLypFNjU3KgorRTY1OAluZXRiZWFucy50eHQJLypFNjU4KgorRTY1OQlpZl9weXRoLnR4dAkvKkU2NTkqCitFNjYJc3ludGF4LnR4dAkvKkU2NioKK0U2NjAJbmV0YmVhbnMudHh0CS8qRTY2MCoKK0U2NjEJdmFyaW91cy50eHQJLypFNjYxKgorRTY2Mgltb3Rpb24udHh0CS8qRTY2MioKK0U2NjMJbW90aW9uLnR4dAkvKkU2NjMqCitFNjY0CW1vdGlvbi50eHQJLypFNjY0KgorRTY2NQlndWlfeDExLnR4dAkvKkU2NjUqCitFNjY2CXF1aWNrZml4LnR4dAkvKkU2NjYqCitFNjY3CWVkaXRpbmcudHh0CS8qRTY2NyoKK0U2NjgJbmV0YmVhbnMudHh0CS8qRTY2OCoKK0U2NjkJc3ludGF4LnR4dAkvKkU2NjkqCitFNjcJc3ludGF4LnR4dAkvKkU2NyoKK0U2NzAJdmFyaW91cy50eHQJLypFNjcwKgorRTY3MQlzdGFydGluZy50eHQJLypFNjcxKgorRTY3MglzdGFydGluZy50eHQJLypFNjcyKgorRTY4CXBhdHRlcm4udHh0CS8qRTY4KgorRTY5CXBhdHRlcm4udHh0CS8qRTY5KgorRTcwCXBhdHRlcm4udHh0CS8qRTcwKgorRTcxCXBhdHRlcm4udHh0CS8qRTcxKgorRTcyCW1lc3NhZ2UudHh0CS8qRTcyKgorRTczCXRhZ3NyY2gudHh0CS8qRTczKgorRTc0CW1lc3NhZ2UudHh0CS8qRTc0KgorRTc1CXZpX2RpZmYudHh0CS8qRTc1KgorRTc2CXBhdHRlcm4udHh0CS8qRTc2KgorRTc3CW1lc3NhZ2UudHh0CS8qRTc3KgorRTc4CW1vdGlvbi50eHQJLypFNzgqCitFNzkJbWVzc2FnZS50eHQJLypFNzkqCitFODAJbWVzc2FnZS50eHQJLypFODAqCitFODAwCWFyYWJpYy50eHQJLypFODAwKgorRTgxCW1hcC50eHQJLypFODEqCitFODIJbWVzc2FnZS50eHQJLypFODIqCitFODMJbWVzc2FnZS50eHQJLypFODMqCitFODQJd2luZG93cy50eHQJLypFODQqCitFODUJb3B0aW9ucy50eHQJLypFODUqCitFODYJd2luZG93cy50eHQJLypFODYqCitFODcJd2luZG93cy50eHQJLypFODcqCitFODgJd2luZG93cy50eHQJLypFODgqCitFODkJbWVzc2FnZS50eHQJLypFODkqCitFOTAJbWVzc2FnZS50eHQJLypFOTAqCitFOTEJb3B0aW9ucy50eHQJLypFOTEqCitFOTIJbWVzc2FnZS50eHQJLypFOTIqCitFOTMJd2luZG93cy50eHQJLypFOTMqCitFOTQJd2luZG93cy50eHQJLypFOTQqCitFOTUJbWVzc2FnZS50eHQJLypFOTUqCitFOTYJZGlmZi50eHQJLypFOTYqCitFOTcJZGlmZi50eHQJLypFOTcqCitFOTgJZGlmZi50eHQJLypFOTgqCitFOTkJZGlmZi50eHQJLypFOTkqCitFWAlpbnRyby50eHQJLypFWCoKK0VYSU5JVAlzdGFydGluZy50eHQJLypFWElOSVQqCitFbHZpcwlpbnRyby50eHQJLypFbHZpcyoKK0VuY29kaW5nQ2hhbmdlZAlhdXRvY21kLnR4dAkvKkVuY29kaW5nQ2hhbmdlZCoKK0V0ZXJtCXN5bnRheC50eHQJLypFdGVybSoKK0V4CWludHJvLnR4dAkvKkV4KgorRXgtbW9kZQlpbnRyby50eHQJLypFeC1tb2RlKgorRgltb3Rpb24udHh0CS8qRioKK0ZBUQlpbnRyby50eHQJLypGQVEqCitGYXJzaQlmYXJzaS50eHQJLypGYXJzaSoKK0ZpbGVBcHBlbmRDbWQJYXV0b2NtZC50eHQJLypGaWxlQXBwZW5kQ21kKgorRmlsZUFwcGVuZFBvc3QJYXV0b2NtZC50eHQJLypGaWxlQXBwZW5kUG9zdCoKK0ZpbGVBcHBlbmRQcmUJYXV0b2NtZC50eHQJLypGaWxlQXBwZW5kUHJlKgorRmlsZUNoYW5nZWRSTwlhdXRvY21kLnR4dAkvKkZpbGVDaGFuZ2VkUk8qCitGaWxlQ2hhbmdlZFNoZWxsCWF1dG9jbWQudHh0CS8qRmlsZUNoYW5nZWRTaGVsbCoKK0ZpbGVFbmNvZGluZwlhdXRvY21kLnR4dAkvKkZpbGVFbmNvZGluZyoKK0ZpbGVSZWFkQ21kCWF1dG9jbWQudHh0CS8qRmlsZVJlYWRDbWQqCitGaWxlUmVhZFBvc3QJYXV0b2NtZC50eHQJLypGaWxlUmVhZFBvc3QqCitGaWxlUmVhZFByZQlhdXRvY21kLnR4dAkvKkZpbGVSZWFkUHJlKgorRmlsZVR5cGUJYXV0b2NtZC50eHQJLypGaWxlVHlwZSoKK0ZpbGVXcml0ZUNtZAlhdXRvY21kLnR4dAkvKkZpbGVXcml0ZUNtZCoKK0ZpbGVXcml0ZVBvc3QJYXV0b2NtZC50eHQJLypGaWxlV3JpdGVQb3N0KgorRmlsZVdyaXRlUHJlCWF1dG9jbWQudHh0CS8qRmlsZVdyaXRlUHJlKgorRmlsdGVyUmVhZFBvc3QJYXV0b2NtZC50eHQJLypGaWx0ZXJSZWFkUG9zdCoKK0ZpbHRlclJlYWRQcmUJYXV0b2NtZC50eHQJLypGaWx0ZXJSZWFkUHJlKgorRmlsdGVyV3JpdGVQb3N0CWF1dG9jbWQudHh0CS8qRmlsdGVyV3JpdGVQb3N0KgorRmlsdGVyV3JpdGVQcmUJYXV0b2NtZC50eHQJLypGaWx0ZXJXcml0ZVByZSoKK0ZvY3VzR2FpbmVkCWF1dG9jbWQudHh0CS8qRm9jdXNHYWluZWQqCitGb2N1c0xvc3QJYXV0b2NtZC50eHQJLypGb2N1c0xvc3QqCitGb2xkaW5nCWZvbGQudHh0CS8qRm9sZGluZyoKK0Z1bmNVbmRlZmluZWQJYXV0b2NtZC50eHQJLypGdW5jVW5kZWZpbmVkKgorRwltb3Rpb24udHh0CS8qRyoKK0dOT01FCWd1aV94MTEudHh0CS8qR05PTUUqCitHVEsJZ3VpX3gxMS50eHQJLypHVEsqCitHVEsrCWd1aV94MTEudHh0CS8qR1RLKyoKK0dVSQlndWkudHh0CS8qR1VJKgorR1VJLVgxMQlndWlfeDExLnR4dAkvKkdVSS1YMTEqCitHVUlFbnRlcglhdXRvY21kLnR4dAkvKkdVSUVudGVyKgorR25vbWUJZ3VpX3gxMS50eHQJLypHbm9tZSoKK0gJbW90aW9uLnR4dAkvKkgqCitJCWluc2VydC50eHQJLypJKgorSUNDRgl1Z2FuZGEudHh0CS8qSUNDRioKK0lNLXNlcnZlcgltYnl0ZS50eHQJLypJTS1zZXJ2ZXIqCitJTUUJbWJ5dGUudHh0CS8qSU1FKgorSW5zZXJ0CWluc2VydC50eHQJLypJbnNlcnQqCitJbnNlcnQtbW9kZQlpbnNlcnQudHh0CS8qSW5zZXJ0LW1vZGUqCitKCWNoYW5nZS50eHQJLypKKgorSmFwYW5lc2UJbWJ5dGUudHh0CS8qSmFwYW5lc2UqCitLCXZhcmlvdXMudHh0CS8qSyoKK0tvcmVhbgltYnl0ZS50eHQJLypLb3JlYW4qCitMCW1vdGlvbi50eHQJLypMKgorTGludXgtYmFja3NwYWNlCW9wdGlvbnMudHh0CS8qTGludXgtYmFja3NwYWNlKgorTQltb3Rpb24udHh0CS8qTSoKK01ESQlzdGFydGluZy50eHQJLypNREkqCitNUy1ET1MJb3NfbXNkb3MudHh0CS8qTVMtRE9TKgorTVMtV2luZG93cwlvc193aW4zMi50eHQJLypNUy1XaW5kb3dzKgorTVNET1MJb3NfbXNkb3MudHh0CS8qTVNET1MqCitNU1Zpc3VhbFN0dWRpbwlpZl9vbGUudHh0CS8qTVNWaXN1YWxTdHVkaW8qCitNVlMJb3NfMzkwLnR4dAkvKk1WUyoKK01hYwlvc19tYWMudHh0CS8qTWFjKgorTWFjLWZvcm1hdAllZGl0aW5nLnR4dAkvKk1hYy1mb3JtYXQqCitNYWMtZm9ybWF0LXdyaXRlCWVkaXRpbmcudHh0CS8qTWFjLWZvcm1hdC13cml0ZSoKK01hY2ludG9zaAlvc19tYWMudHh0CS8qTWFjaW50b3NoKgorTWFyawltb3Rpb24udHh0CS8qTWFyayoKK01pTlQJb3NfbWludC50eHQJLypNaU5UKgorTW9ycGhPUwlvc19hbWlnYS50eHQJLypNb3JwaE9TKgorTW90aWYJZ3VpX3gxMS50eHQJLypNb3RpZioKK04JcGF0dGVybi50eHQJLypOKgorTiUJbW90aW9uLnR4dAkvKk4lKgorTjoJY21kbGluZS50eHQJLypOOioKK048RGVsPgl2YXJpb3VzLnR4dAkvKk48RGVsPioKK05MLXVzZWQtZm9yLU51bAlwYXR0ZXJuLnR4dAkvKk5MLXVzZWQtZm9yLU51bCoKK05ldEJTRC1iYWNrc3BhY2UJb3B0aW9ucy50eHQJLypOZXRCU0QtYmFja3NwYWNlKgorTm9ybWFsCWludHJvLnR4dAkvKk5vcm1hbCoKK05vcm1hbC1tb2RlCWludHJvLnR4dAkvKk5vcm1hbC1tb2RlKgorTnJlYWQJcGlfbmV0cncudHh0CS8qTnJlYWQqCitOdmkJaW50cm8udHh0CS8qTnZpKgorTndyaXRlCXBpX25ldHJ3LnR4dAkvKk53cml0ZSoKK08JaW5zZXJ0LnR4dAkvKk8qCitPUy8yCW9zX29zMi50eHQJLypPU1wvMioKK09TMglvc19vczIudHh0CS8qT1MyKgorT1MzOTAJb3NfMzkwLnR4dAkvKk9TMzkwKgorT1MzOTAtTW90aWYJb3NfMzkwLnR4dAkvKk9TMzkwLU1vdGlmKgorT1MzOTAtYnVncwlvc18zOTAudHh0CS8qT1MzOTAtYnVncyoKK09TMzkwLWJ1aWxkaW5nCW9zXzM5MC50eHQJLypPUzM5MC1idWlsZGluZyoKK09TMzkwLWNoYW5nZXMJb3NfMzkwLnR4dAkvKk9TMzkwLWNoYW5nZXMqCitPUzM5MC1mZWVkYmFjawlvc18zOTAudHh0CS8qT1MzOTAtZmVlZGJhY2sqCitPUzM5MC1oYXMtZWJjZGljCW9zXzM5MC50eHQJLypPUzM5MC1oYXMtZWJjZGljKgorT1MzOTAtb3Blbi1zb3VyY2UJb3NfMzkwLnR4dAkvKk9TMzkwLW9wZW4tc291cmNlKgorT1MzOTAtd2Vha25lc3Nlcwlvc18zOTAudHh0CS8qT1MzOTAtd2Vha25lc3NlcyoKK09TMzkwLXh0ZXJtCW9zXzM5MC50eHQJLypPUzM5MC14dGVybSoKK09mZlRoZVNwb3QJbWJ5dGUudHh0CS8qT2ZmVGhlU3BvdCoKK09uVGhlU3BvdAltYnl0ZS50eHQJLypPblRoZVNwb3QqCitPcGVyYXRvci1wZW5kaW5nCWludHJvLnR4dAkvKk9wZXJhdG9yLXBlbmRpbmcqCitPcGVyYXRvci1wZW5kaW5nLW1vZGUJaW50cm8udHh0CS8qT3BlcmF0b3ItcGVuZGluZy1tb2RlKgorT3ZlclRoZVNwb3QJbWJ5dGUudHh0CS8qT3ZlclRoZVNwb3QqCitQCWNoYW5nZS50eHQJLypQKgorUGF0dGVybglwYXR0ZXJuLnR4dAkvKlBhdHRlcm4qCitQZXJsCWlmX3BlcmwudHh0CS8qUGVybCoKK1Bvc2l4CWludHJvLnR4dAkvKlBvc2l4KgorUHl0aG9uCWlmX3B5dGgudHh0CS8qUHl0aG9uKgorUQlpbnRyby50eHQJLypRKgorUS1jb21tYW5kLWNoYW5nZWQJdmVyc2lvbjUudHh0CS8qUS1jb21tYW5kLWNoYW5nZWQqCitRTlgJb3NfcW54LnR4dAkvKlFOWCoKK1FfYWIJcXVpY2tyZWYudHh0CS8qUV9hYioKK1FfYWMJcXVpY2tyZWYudHh0CS8qUV9hYyoKK1FfYWkJcXVpY2tyZWYudHh0CS8qUV9haSoKK1FfYnUJcXVpY2tyZWYudHh0CS8qUV9idSoKK1FfY2UJcXVpY2tyZWYudHh0CS8qUV9jZSoKK1FfY2gJcXVpY2tyZWYudHh0CS8qUV9jaCoKK1FfY20JcXVpY2tyZWYudHh0CS8qUV9jbSoKK1FfY28JcXVpY2tyZWYudHh0CS8qUV9jbyoKK1FfY3QJaGVscC50eHQJLypRX2N0KgorUV9kZQlxdWlja3JlZi50eHQJLypRX2RlKgorUV9kaQlxdWlja3JlZi50eHQJLypRX2RpKgorUV9lZAlxdWlja3JlZi50eHQJLypRX2VkKgorUV9ldAlxdWlja3JlZi50eHQJLypRX2V0KgorUV9leAlxdWlja3JlZi50eHQJLypRX2V4KgorUV9mbAlxdWlja3JlZi50eHQJLypRX2ZsKgorUV9mbwlxdWlja3JlZi50eHQJLypRX2ZvKgorUV9ndQlxdWlja3JlZi50eHQJLypRX2d1KgorUV9pbglxdWlja3JlZi50eHQJLypRX2luKgorUV9rbQlxdWlja3JlZi50eHQJLypRX2ttKgorUV9scglxdWlja3JlZi50eHQJLypRX2xyKgorUV9tYQlxdWlja3JlZi50eHQJLypRX21hKgorUV9vcAlxdWlja3JlZi50eHQJLypRX29wKgorUV9wYQlxdWlja3JlZi50eHQJLypRX3BhKgorUV9xZglxdWlja3JlZi50eHQJLypRX3FmKgorUV9yYQlxdWlja3JlZi50eHQJLypRX3JhKgorUV9yZQlxdWlja3JlZi50eHQJLypRX3JlKgorUV9zYwlxdWlja3JlZi50eHQJLypRX3NjKgorUV9zaQlxdWlja3JlZi50eHQJLypRX3NpKgorUV9zcwlxdWlja3JlZi50eHQJLypRX3NzKgorUV9zdAlxdWlja3JlZi50eHQJLypRX3N0KgorUV9zeQlxdWlja3JlZi50eHQJLypRX3N5KgorUV90YQlxdWlja3JlZi50eHQJLypRX3RhKgorUV90bQlxdWlja3JlZi50eHQJLypRX3RtKgorUV90bwlxdWlja3JlZi50eHQJLypRX3RvKgorUV91ZAlxdWlja3JlZi50eHQJLypRX3VkKgorUV91cglxdWlja3JlZi50eHQJLypRX3VyKgorUV92YwlxdWlja3JlZi50eHQJLypRX3ZjKgorUV92aQlxdWlja3JlZi50eHQJLypRX3ZpKgorUV92bQlxdWlja3JlZi50eHQJLypRX3ZtKgorUV93aQlxdWlja3JlZi50eHQJLypRX3dpKgorUV93cQlxdWlja3JlZi50eHQJLypRX3dxKgorUXVpY2tmaXgJcXVpY2tmaXgudHh0CS8qUXVpY2tmaXgqCitSCWNoYW5nZS50eHQJLypSKgorUklTQy1PUwlvc19yaXNjLnR4dAkvKlJJU0MtT1MqCitSSVNDT1MJb3NfcmlzYy50eHQJLypSSVNDT1MqCitSZW1vdGVSZXBseQlhdXRvY21kLnR4dAkvKlJlbW90ZVJlcGx5KgorUmVwbGFjZQlpbnNlcnQudHh0CS8qUmVwbGFjZSoKK1JlcGxhY2UtbW9kZQlpbnNlcnQudHh0CS8qUmVwbGFjZS1tb2RlKgorUm9vdAltYnl0ZS50eHQJLypSb290KgorUnVieQlpZl9ydWJ5LnR4dAkvKlJ1YnkqCitSdXNzaWFuCXJ1c3NpYW4udHh0CS8qUnVzc2lhbioKK1MJY2hhbmdlLnR4dAkvKlMqCitTSEVMTAlzdGFydGluZy50eHQJLypTSEVMTCoKK1NlbGVjdAl2aXN1YWwudHh0CS8qU2VsZWN0KgorU2VsZWN0LW1vZGUJdmlzdWFsLnR4dAkvKlNlbGVjdC1tb2RlKgorU2VsZWN0LW1vZGUtbWFwcGluZwl2aXN1YWwudHh0CS8qU2VsZWN0LW1vZGUtbWFwcGluZyoKK1Nlc3Npb24Jc3RhcnRpbmcudHh0CS8qU2Vzc2lvbioKK1N0ZGluUmVhZFBvc3QJYXV0b2NtZC50eHQJLypTdGRpblJlYWRQb3N0KgorU3RkaW5SZWFkUHJlCWF1dG9jbWQudHh0CS8qU3RkaW5SZWFkUHJlKgorU3ludGF4CWF1dG9jbWQudHh0CS8qU3ludGF4KgorVAltb3Rpb24udHh0CS8qVCoKK1RDTAlpZl90Y2wudHh0CS8qVENMKgorVEVSTQlzdGFydGluZy50eHQJLypURVJNKgorVFRwcm8tdGVsbmV0CXN5bnRheC50eHQJLypUVHByby10ZWxuZXQqCitUYWIJaW50cm8udHh0CS8qVGFiKgorVGNsCWlmX3RjbC50eHQJLypUY2wqCitUZXJtQ2hhbmdlZAlhdXRvY21kLnR4dAkvKlRlcm1DaGFuZ2VkKgorVGVybVJlc3BvbnNlCWF1dG9jbWQudHh0CS8qVGVybVJlc3BvbnNlKgorVQl1bmRvLnR4dAkvKlUqCitVVEYtOAltYnl0ZS50eHQJLypVVEYtOCoKK1VURjgteHRlcm0JbWJ5dGUudHh0CS8qVVRGOC14dGVybSoKK1VnYW5kYQl1Z2FuZGEudHh0CS8qVWdhbmRhKgorVW5pY29kZQltYnl0ZS50eHQJLypVbmljb2RlKgorVW5peAlvc191bml4LnR4dAkvKlVuaXgqCitVbml4LWZvcm1hdAllZGl0aW5nLnR4dAkvKlVuaXgtZm9ybWF0KgorVW5peC1mb3JtYXQtd3JpdGUJZWRpdGluZy50eHQJLypVbml4LWZvcm1hdC13cml0ZSoKK1VzZXIJYXV0b2NtZC50eHQJLypVc2VyKgorVXNlckdldHRpbmdCb3JlZAlhdXRvY21kLnR4dAkvKlVzZXJHZXR0aW5nQm9yZWQqCitWCXZpc3VhbC50eHQJLypWKgorVklNSU5JVAlzdGFydGluZy50eHQJLypWSU1JTklUKgorVk1TCW9zX3Ztcy50eHQJLypWTVMqCitWaQlpbnRyby50eHQJLypWaSoKK1ZpZXcJc3RhcnRpbmcudHh0CS8qVmlldyoKK1ZpbUVudGVyCWF1dG9jbWQudHh0CS8qVmltRW50ZXIqCitWaW1MZWF2ZQlhdXRvY21kLnR4dAkvKlZpbUxlYXZlKgorVmltTGVhdmVQcmUJYXV0b2NtZC50eHQJLypWaW1MZWF2ZVByZSoKK1ZpcnR1YWwtUmVwbGFjZS1tb2RlCWluc2VydC50eHQJLypWaXJ0dWFsLVJlcGxhY2UtbW9kZSoKK1Zpc1ZpbQlpZl9vbGUudHh0CS8qVmlzVmltKgorVmlzdWFsCXZpc3VhbC50eHQJLypWaXN1YWwqCitWaXN1YWwtbW9kZQl2aXN1YWwudHh0CS8qVmlzdWFsLW1vZGUqCitXCW1vdGlvbi50eHQJLypXKgorVzEwCW1lc3NhZ2UudHh0CS8qVzEwKgorVzExCW1lc3NhZ2UudHh0CS8qVzExKgorVzEyCW1lc3NhZ2UudHh0CS8qVzEyKgorVzEzCW1lc3NhZ2UudHh0CS8qVzEzKgorVzE0CW1lc3NhZ2UudHh0CS8qVzE0KgorVzE1CXJlcGVhdC50eHQJLypXMTUqCitXMTYJbWVzc2FnZS50eHQJLypXMTYqCitXMTcJYXJhYmljLnR4dAkvKlcxNyoKK1cxOAlzeW50YXgudHh0CS8qVzE4KgorV09SRAltb3Rpb24udHh0CS8qV09SRCoKK1dpbjMyCW9zX3dpbjMyLnR4dAkvKldpbjMyKgorV2luRW50ZXIJYXV0b2NtZC50eHQJLypXaW5FbnRlcioKK1dpbkxlYXZlCWF1dG9jbWQudHh0CS8qV2luTGVhdmUqCitYCWNoYW5nZS50eHQJLypYKgorWDExCW9wdGlvbnMudHh0CS8qWDExKgorWDExLWljb24JZ3VpX3gxMS50eHQJLypYMTEtaWNvbioKK1gxMV9tb3VzZV9zaGFwZXMJZ3VpX3gxMS50eHQJLypYMTFfbW91c2Vfc2hhcGVzKgorWDFEcmFnCXRlcm0udHh0CS8qWDFEcmFnKgorWDFNb3VzZQl0ZXJtLnR4dAkvKlgxTW91c2UqCitYMVJlbGVhc2UJdGVybS50eHQJLypYMVJlbGVhc2UqCitYMkRyYWcJdGVybS50eHQJLypYMkRyYWcqCitYMk1vdXNlCXRlcm0udHh0CS8qWDJNb3VzZSoKK1gyUmVsZWFzZQl0ZXJtLnR4dAkvKlgyUmVsZWFzZSoKK1hJTQltYnl0ZS50eHQJLypYSU0qCitYTEZECW1ieXRlLnR4dAkvKlhMRkQqCitZCWNoYW5nZS50eHQJLypZKgorWTJLCWludHJvLnR4dAkvKlkySyoKK1pRCWVkaXRpbmcudHh0CS8qWlEqCitaWgllZGl0aW5nLnR4dAkvKlpaKgorWwlpbmRleC50eHQJLypbKgorWyMJbW90aW9uLnR4dAkvKlsjKgorWycJbW90aW9uLnR4dAkvKlsnKgorWygJbW90aW9uLnR4dAkvKlsoKgorWysrb3B0XQllZGl0aW5nLnR4dAkvKlsrK29wdF0qCitbK2NtZF0JZWRpdGluZy50eHQJLypbK2NtZF0qCitbLwltb3Rpb24udHh0CS8qW1wvKgorWzphbG51bTpdCXBhdHRlcm4udHh0CS8qWzphbG51bTpdKgorWzphbHBoYTpdCXBhdHRlcm4udHh0CS8qWzphbHBoYTpdKgorWzpiYWNrc3BhY2U6XQlwYXR0ZXJuLnR4dAkvKls6YmFja3NwYWNlOl0qCitbOmJsYW5rOl0JcGF0dGVybi50eHQJLypbOmJsYW5rOl0qCitbOmNudHJsOl0JcGF0dGVybi50eHQJLypbOmNudHJsOl0qCitbOmRpZ2l0Ol0JcGF0dGVybi50eHQJLypbOmRpZ2l0Ol0qCitbOmVzY2FwZTpdCXBhdHRlcm4udHh0CS8qWzplc2NhcGU6XSoKK1s6Z3JhcGg6XQlwYXR0ZXJuLnR4dAkvKls6Z3JhcGg6XSoKK1s6bG93ZXI6XQlwYXR0ZXJuLnR4dAkvKls6bG93ZXI6XSoKK1s6cHJpbnQ6XQlwYXR0ZXJuLnR4dAkvKls6cHJpbnQ6XSoKK1s6cHVuY3Q6XQlwYXR0ZXJuLnR4dAkvKls6cHVuY3Q6XSoKK1s6cmV0dXJuOl0JcGF0dGVybi50eHQJLypbOnJldHVybjpdKgorWzpzcGFjZTpdCXBhdHRlcm4udHh0CS8qWzpzcGFjZTpdKgorWzp0YWI6XQlwYXR0ZXJuLnR4dAkvKls6dGFiOl0qCitbOnVwcGVyOl0JcGF0dGVybi50eHQJLypbOnVwcGVyOl0qCitbOnhkaWdpdDpdCXBhdHRlcm4udHh0CS8qWzp4ZGlnaXQ6XSoKK1s8TWlkZGxlTW91c2U+CWNoYW5nZS50eHQJLypbPE1pZGRsZU1vdXNlPioKK1tECXRhZ3NyY2gudHh0CS8qW0QqCitbSQl0YWdzcmNoLnR4dAkvKltJKgorW00JbW90aW9uLnR4dAkvKltNKgorW1AJY2hhbmdlLnR4dAkvKltQKgorW1sJbW90aW9uLnR4dAkvKltbKgorW10JbW90aW9uLnR4dAkvKltdKgorW19DVFJMLUQJdGFnc3JjaC50eHQJLypbX0NUUkwtRCoKK1tfQ1RSTC1JCXRhZ3NyY2gudHh0CS8qW19DVFJMLUkqCitbYAltb3Rpb24udHh0CS8qW2AqCitbYwlkaWZmLnR4dAkvKltjKgorW2NvdW50XQlpbnRyby50eHQJLypbY291bnRdKgorW2QJdGFnc3JjaC50eHQJLypbZCoKK1tmCWVkaXRpbmcudHh0CS8qW2YqCitbaQl0YWdzcmNoLnR4dAkvKltpKgorW20JbW90aW9uLnR4dAkvKlttKgorW3AJY2hhbmdlLnR4dAkvKltwKgorW3BhdHRlcm5dCXBhdHRlcm4udHh0CS8qW3BhdHRlcm5dKgorW3F1b3RleF0JaW50cm8udHh0CS8qW3F1b3RleF0qCitbcmFuZ2VdCWNtZGxpbmUudHh0CS8qW3JhbmdlXSoKK1tzdGFyCW1vdGlvbi50eHQJLypbc3RhcioKK1t6CWZvbGQudHh0CS8qW3oqCitbewltb3Rpb24udHh0CS8qW3sqCitcMAljaGFuZ2UudHh0CS8qXFwwKgorXQlpbmRleC50eHQJLypdKgorXSMJbW90aW9uLnR4dAkvKl0jKgorXScJbW90aW9uLnR4dAkvKl0nKgorXSkJbW90aW9uLnR4dAkvKl0pKgorXS8JbW90aW9uLnR4dAkvKl1cLyoKK108TWlkZGxlTW91c2U+CWNoYW5nZS50eHQJLypdPE1pZGRsZU1vdXNlPioKK11ECXRhZ3NyY2gudHh0CS8qXUQqCitdSQl0YWdzcmNoLnR4dAkvKl1JKgorXU0JbW90aW9uLnR4dAkvKl1NKgorXVAJY2hhbmdlLnR4dAkvKl1QKgorXVsJbW90aW9uLnR4dAkvKl1bKgorXV0JbW90aW9uLnR4dAkvKl1dKgorXV9DVFJMLUQJdGFnc3JjaC50eHQJLypdX0NUUkwtRCoKK11fQ1RSTC1JCXRhZ3NyY2gudHh0CS8qXV9DVFJMLUkqCitdYAltb3Rpb24udHh0CS8qXWAqCitdYwlkaWZmLnR4dAkvKl1jKgorXWQJdGFnc3JjaC50eHQJLypdZCoKK11mCWVkaXRpbmcudHh0CS8qXWYqCitdaQl0YWdzcmNoLnR4dAkvKl1pKgorXW0JbW90aW9uLnR4dAkvKl1tKgorXXAJY2hhbmdlLnR4dAkvKl1wKgorXXN0YXIJbW90aW9uLnR4dAkvKl1zdGFyKgorXXoJZm9sZC50eHQJLypdeioKK119CW1vdGlvbi50eHQJLypdfSoKK14JbW90aW9uLnR4dAkvKl4qCitfCW1vdGlvbi50eHQJLypfKgorX2V4cmMJc3RhcnRpbmcudHh0CS8qX2V4cmMqCitfZ3ZpbXJjCWd1aS50eHQJLypfZ3ZpbXJjKgorX3ZpbXJjCXN0YXJ0aW5nLnR4dAkvKl92aW1yYyoKK2AJbW90aW9uLnR4dAkvKmAqCitgKAltb3Rpb24udHh0CS8qYCgqCitgKQltb3Rpb24udHh0CS8qYCkqCitgLWV4cGFuc2lvbgllZGl0aW5nLnR4dAkvKmAtZXhwYW5zaW9uKgorYC4JbW90aW9uLnR4dAkvKmAuKgorYDAJbW90aW9uLnR4dAkvKmAwKgorYDwJbW90aW9uLnR4dAkvKmA8KgorYD4JbW90aW9uLnR4dAkvKmA+KgorYEEJbW90aW9uLnR4dAkvKmBBKgorYFsJbW90aW9uLnR4dAkvKmBbKgorYF0JbW90aW9uLnR4dAkvKmBdKgorYF4JbW90aW9uLnR4dAkvKmBeKgorYGAJbW90aW9uLnR4dAkvKmBgKgorYGEJbW90aW9uLnR4dAkvKmBhKgorYHF1b3RlCW1vdGlvbi50eHQJLypgcXVvdGUqCitgewltb3Rpb24udHh0CS8qYHsqCitgfQltb3Rpb24udHh0CS8qYH0qCithCWluc2VydC50eHQJLyphKgorYSgJbW90aW9uLnR4dAkvKmEoKgorYSkJbW90aW9uLnR4dAkvKmEpKgorYTQJb3B0aW9ucy50eHQJLyphNCoKK2E6Zmlyc3RsaW5lCWV2YWwudHh0CS8qYTpmaXJzdGxpbmUqCithOmxhc3RsaW5lCWV2YWwudHh0CS8qYTpsYXN0bGluZSoKK2E6dmFyCWV2YWwudHh0CS8qYTp2YXIqCithPAltb3Rpb24udHh0CS8qYTwqCithPgltb3Rpb24udHh0CS8qYT4qCithQgltb3Rpb24udHh0CS8qYUIqCithVwltb3Rpb24udHh0CS8qYVcqCithWwltb3Rpb24udHh0CS8qYVsqCithXQltb3Rpb24udHh0CS8qYV0qCithYgltb3Rpb24udHh0CS8qYWIqCithYmFuZG9uCWVkaXRpbmcudHh0CS8qYWJhbmRvbioKK2FiYnJldmlhdGlvbnMJbWFwLnR4dAkvKmFiYnJldmlhdGlvbnMqCithYmVsLXN5bnRheAlzeW50YXgudHh0CS8qYWJlbC1zeW50YXgqCithYmVsLnZpbQlzeW50YXgudHh0CS8qYWJlbC52aW0qCithY3RpdmUtYnVmZmVyCXdpbmRvd3MudHh0CS8qYWN0aXZlLWJ1ZmZlcioKK2FkYS1zeW50YXgJc3ludGF4LnR4dAkvKmFkYS1zeW50YXgqCithZGEudmltCXN5bnRheC50eHQJLyphZGEudmltKgorYWRkLWZpbGV0eXBlLXBsdWdpbgl1c3JfMDUudHh0CS8qYWRkLWZpbGV0eXBlLXBsdWdpbioKK2FkZC1nbG9iYWwtcGx1Z2luCXVzcl8wNS50eHQJLyphZGQtZ2xvYmFsLXBsdWdpbioKK2FkZC1sb2NhbC1oZWxwCXVzcl8wNS50eHQJLyphZGQtbG9jYWwtaGVscCoKK2FkZC1vcHRpb24tZmxhZ3MJb3B0aW9ucy50eHQJLyphZGQtb3B0aW9uLWZsYWdzKgorYWRkLXBsdWdpbgl1c3JfMDUudHh0CS8qYWRkLXBsdWdpbioKK2FkZGVkLTUuMQl2ZXJzaW9uNS50eHQJLyphZGRlZC01LjEqCithZGRlZC01LjIJdmVyc2lvbjUudHh0CS8qYWRkZWQtNS4yKgorYWRkZWQtNS4zCXZlcnNpb241LnR4dAkvKmFkZGVkLTUuMyoKK2FkZGVkLTUuNAl2ZXJzaW9uNS50eHQJLyphZGRlZC01LjQqCithZGRlZC01LjUJdmVyc2lvbjUudHh0CS8qYWRkZWQtNS41KgorYWRkZWQtNS42CXZlcnNpb241LnR4dAkvKmFkZGVkLTUuNioKK2FkZGVkLTUuNwl2ZXJzaW9uNS50eHQJLyphZGRlZC01LjcqCithZGRlZC01LjgJdmVyc2lvbjUudHh0CS8qYWRkZWQtNS44KgorYWRkZWQtNi4xCXZlcnNpb242LnR4dAkvKmFkZGVkLTYuMSoKK2FkZGVkLTYuMgl2ZXJzaW9uNi50eHQJLyphZGRlZC02LjIqCithZGRlZC02LjMJdmVyc2lvbjYudHh0CS8qYWRkZWQtNi4zKgorYWRkZWQtQmVPUwl2ZXJzaW9uNS50eHQJLyphZGRlZC1CZU9TKgorYWRkZWQtTWFjCXZlcnNpb241LnR4dAkvKmFkZGVkLU1hYyoKK2FkZGVkLVZNUwl2ZXJzaW9uNS50eHQJLyphZGRlZC1WTVMqCithZGRlZC1jbWRsaW5lLWFyZ3MJdmVyc2lvbjUudHh0CS8qYWRkZWQtY21kbGluZS1hcmdzKgorYWRkZWQtb3B0aW9ucwl2ZXJzaW9uNS50eHQJLyphZGRlZC1vcHRpb25zKgorYWRkZWQtcmVnZXhwCXZlcnNpb241LnR4dAkvKmFkZGVkLXJlZ2V4cCoKK2FkZGVkLXZhcmlvdXMJdmVyc2lvbjUudHh0CS8qYWRkZWQtdmFyaW91cyoKK2FkZGVkLXdpbjMyLUdVSQl2ZXJzaW9uNS50eHQJLyphZGRlZC13aW4zMi1HVUkqCithZnRlci1kaXJlY3RvcnkJb3B0aW9ucy50eHQJLyphZnRlci1kaXJlY3RvcnkqCithbGVwaAlvcHRpb25zLnR4dAkvKmFsZXBoKgorYWx0CWludHJvLnR4dAkvKmFsdCoKK2FsdC1pbnB1dAlkZWJ1Z2dlci50eHQJLyphbHQtaW5wdXQqCithbHRlcm5hdGUtZmlsZQllZGl0aW5nLnR4dAkvKmFsdGVybmF0ZS1maWxlKgorYW1pZ2Etd2luZG93CXN0YXJ0aW5nLnR4dAkvKmFtaWdhLXdpbmRvdyoKK2FudC1zeW50YXgJc3ludGF4LnR4dAkvKmFudC1zeW50YXgqCithbnQudmltCXN5bnRheC50eHQJLyphbnQudmltKgorYXAJbW90aW9uLnR4dAkvKmFwKgorYXBhY2hlLXN5bnRheAlzeW50YXgudHh0CS8qYXBhY2hlLXN5bnRheCoKK2FwYWNoZS52aW0Jc3ludGF4LnR4dAkvKmFwYWNoZS52aW0qCithcHBlbmQoKQlldmFsLnR4dAkvKmFwcGVuZCgpKgorYXJhYmljLnR4dAlhcmFiaWMudHh0CS8qYXJhYmljLnR4dCoKK2FyYWJpY2ZvbnRzCWFyYWJpYy50eHQJLyphcmFiaWNmb250cyoKK2FyYWJpY2tleW1hcAlhcmFiaWMudHh0CS8qYXJhYmlja2V5bWFwKgorYXJnYygpCWV2YWwudHh0CS8qYXJnYygpKgorYXJnaWR4KCkJZXZhbC50eHQJLyphcmdpZHgoKSoKK2FyZ2xpc3QJZWRpdGluZy50eHQJLyphcmdsaXN0KgorYXJnbGlzdC1wb3NpdGlvbgllZGl0aW5nLnR4dAkvKmFyZ2xpc3QtcG9zaXRpb24qCithcmdsaXN0LXF1aXQJdXNyXzA3LnR4dAkvKmFyZ2xpc3QtcXVpdCoKK2FyZ3VtZW50LWxpc3QJZWRpdGluZy50eHQJLyphcmd1bWVudC1saXN0KgorYXJndigpCWV2YWwudHh0CS8qYXJndigpKgorYXMJbW90aW9uLnR4dAkvKmFzKgorYXNtLXN5bnRheAlzeW50YXgudHh0CS8qYXNtLXN5bnRheCoKK2FzbS52aW0Jc3ludGF4LnR4dAkvKmFzbS52aW0qCithc202OGsJc3ludGF4LnR4dAkvKmFzbTY4ayoKK2FzbTY4ay1zeW50YXgJc3ludGF4LnR4dAkvKmFzbTY4ay1zeW50YXgqCithc21oODMwMC1zeW50YXgJc3ludGF4LnR4dAkvKmFzbWg4MzAwLXN5bnRheCoKK2FzbWg4MzAwLnZpbQlzeW50YXgudHh0CS8qYXNtaDgzMDAudmltKgorYXNwcGVybC1zeW50YXgJc3ludGF4LnR4dAkvKmFzcHBlcmwtc3ludGF4KgorYXNwdmJzLXN5bnRheAlzeW50YXgudHh0CS8qYXNwdmJzLXN5bnRheCoKK2F0aGVuYS1pbnRlbGxpbW91c2UJZ3VpLnR4dAkvKmF0aGVuYS1pbnRlbGxpbW91c2UqCithdHRyLWxpc3QJc3ludGF4LnR4dAkvKmF0dHItbGlzdCoKK2F1dGhvcglpbnRyby50eHQJLyphdXRob3IqCithdXRvLWZvcm1hdAljaGFuZ2UudHh0CS8qYXV0by1mb3JtYXQqCithdXRvLXNldHRpbmcJb3B0aW9ucy50eHQJLyphdXRvLXNldHRpbmcqCithdXRvLXNob3J0bmFtZQllZGl0aW5nLnR4dAkvKmF1dG8tc2hvcnRuYW1lKgorYXV0b2NtZC08Pgl0aXBzLnR4dAkvKmF1dG9jbWQtPD4qCithdXRvY21kLWRlZmluZQlhdXRvY21kLnR4dAkvKmF1dG9jbWQtZGVmaW5lKgorYXV0b2NtZC1ldmVudHMJYXV0b2NtZC50eHQJLyphdXRvY21kLWV2ZW50cyoKK2F1dG9jbWQtZXhlY3V0ZQlhdXRvY21kLnR4dAkvKmF1dG9jbWQtZXhlY3V0ZSoKK2F1dG9jbWQtZ3JvdXBzCWF1dG9jbWQudHh0CS8qYXV0b2NtZC1ncm91cHMqCithdXRvY21kLWludHJvCWF1dG9jbWQudHh0CS8qYXV0b2NtZC1pbnRybyoKK2F1dG9jbWQtbGlzdAlhdXRvY21kLnR4dAkvKmF1dG9jbWQtbGlzdCoKK2F1dG9jbWQtbmVzdGVkCWF1dG9jbWQudHh0CS8qYXV0b2NtZC1uZXN0ZWQqCithdXRvY21kLW9zZmlsZXR5cGVzCWZpbGV0eXBlLnR4dAkvKmF1dG9jbWQtb3NmaWxldHlwZXMqCithdXRvY21kLXBhdHRlcm5zCWF1dG9jbWQudHh0CS8qYXV0b2NtZC1wYXR0ZXJucyoKK2F1dG9jbWQtcmVtb3ZlCWF1dG9jbWQudHh0CS8qYXV0b2NtZC1yZW1vdmUqCithdXRvY21kLXNlYXJjaHBhdAlhdXRvY21kLnR4dAkvKmF1dG9jbWQtc2VhcmNocGF0KgorYXV0b2NtZC11c2UJYXV0b2NtZC50eHQJLyphdXRvY21kLXVzZSoKK2F1dG9jbWQudHh0CWF1dG9jbWQudHh0CS8qYXV0b2NtZC50eHQqCithdXRvY21kcy1rZXB0CXZlcnNpb241LnR4dAkvKmF1dG9jbWRzLWtlcHQqCithdXRvY29tbWFuZAlhdXRvY21kLnR4dAkvKmF1dG9jb21tYW5kKgorYXV0b2NvbW1hbmQtZXZlbnRzCWF1dG9jbWQudHh0CS8qYXV0b2NvbW1hbmQtZXZlbnRzKgorYXV0b2NvbW1hbmQtcGF0dGVybglhdXRvY21kLnR4dAkvKmF1dG9jb21tYW5kLXBhdHRlcm4qCithdXRvbG9hZC1mdW5jdGlvbnMJZXZhbC50eHQJLyphdXRvbG9hZC1mdW5jdGlvbnMqCithdm9pZC1oaXQtZW50ZXIJdmVyc2lvbjUudHh0CS8qYXZvaWQtaGl0LWVudGVyKgorYXcJbW90aW9uLnR4dAkvKmF3KgorYXsJbW90aW9uLnR4dAkvKmF7KgorYX0JbW90aW9uLnR4dAkvKmF9KgorYgltb3Rpb24udHh0CS8qYioKK2I6Y2hhbmdlZHRpY2stdmFyaWFibGUJZXZhbC50eHQJLypiOmNoYW5nZWR0aWNrLXZhcmlhYmxlKgorYjpjdXJyZW50X3N5bnRheC12YXJpYWJsZQlzeW50YXgudHh0CS8qYjpjdXJyZW50X3N5bnRheC12YXJpYWJsZSoKK2I6dmFyCWV2YWwudHh0CS8qYjp2YXIqCitiYWNrc2xhc2gJaW50cm8udHh0CS8qYmFja3NsYXNoKgorYmFja3NwYWNlCWludHJvLnR4dAkvKmJhY2tzcGFjZSoKK2JhY2tzcGFjZS1kZWxldGUJdmVyc2lvbjQudHh0CS8qYmFja3NwYWNlLWRlbGV0ZSoKK2JhY2t0aWNrLWV4cGFuc2lvbgllZGl0aW5nLnR4dAkvKmJhY2t0aWNrLWV4cGFuc2lvbioKK2JhY2t1cAllZGl0aW5nLnR4dAkvKmJhY2t1cCoKK2JhY2t1cC1jaGFuZ2VkCXZlcnNpb240LnR4dAkvKmJhY2t1cC1jaGFuZ2VkKgorYmFja3VwLWV4dGVuc2lvbgl2ZXJzaW9uNC50eHQJLypiYWNrdXAtZXh0ZW5zaW9uKgorYmFja3VwLXRhYmxlCWVkaXRpbmcudHh0CS8qYmFja3VwLXRhYmxlKgorYmFsbG9vbi1ldmFsCWRlYnVnZ2VyLnR4dAkvKmJhbGxvb24tZXZhbCoKK2Jhcgltb3Rpb24udHh0CS8qYmFyKgorYmFycwloZWxwLnR4dAkvKmJhcnMqCitiYXNlX2ZvbnRfbmFtZV9saXN0CW1ieXRlLnR4dAkvKmJhc2VfZm9udF9uYW1lX2xpc3QqCitiYXNpYy1zeW50YXgJc3ludGF4LnR4dAkvKmJhc2ljLXN5bnRheCoKK2Jhc2ljLnZpbQlzeW50YXgudHh0CS8qYmFzaWMudmltKgorYmVlcAlvcHRpb25zLnR4dAkvKmJlZXAqCitiZW9zLWNvbG9ycwlvc19iZW9zLnR4dAkvKmJlb3MtY29sb3JzKgorYmVvcy1jb21waWxpbmcJb3NfYmVvcy50eHQJLypiZW9zLWNvbXBpbGluZyoKK2Jlb3MtZHJhZ25kcm9wCW9zX2Jlb3MudHh0CS8qYmVvcy1kcmFnbmRyb3AqCitiZW9zLWZvbnRzCW9zX2Jlb3MudHh0CS8qYmVvcy1mb250cyoKK2Jlb3MtZ2VuZXJhbAlvc19iZW9zLnR4dAkvKmJlb3MtZ2VuZXJhbCoKK2Jlb3MtZ3VpCW9zX2Jlb3MudHh0CS8qYmVvcy1ndWkqCitiZW9zLWxhdW5jaAlvc19iZW9zLnR4dAkvKmJlb3MtbGF1bmNoKgorYmVvcy1tZXRhCW9zX2Jlb3MudHh0CS8qYmVvcy1tZXRhKgorYmVvcy1tb3VzZQlvc19iZW9zLnR4dAkvKmJlb3MtbW91c2UqCitiZW9zLXBlcmwJb3NfYmVvcy50eHQJLypiZW9zLXBlcmwqCitiZW9zLXRpbWVvdXQJb3NfYmVvcy50eHQJLypiZW9zLXRpbWVvdXQqCitiZW9zLXVuaWNvZGUJb3NfYmVvcy50eHQJLypiZW9zLXVuaWNvZGUqCitiZW9zLXV0ZjgJb3NfYmVvcy50eHQJLypiZW9zLXV0ZjgqCitiZW9zLXZpbWRpcglvc19iZW9zLnR4dAkvKmJlb3MtdmltZGlyKgorYmxvY2t3aXNlLWV4YW1wbGVzCXZpc3VhbC50eHQJLypibG9ja3dpc2UtZXhhbXBsZXMqCitibG9ja3dpc2Utb3BlcmF0b3JzCXZpc3VhbC50eHQJLypibG9ja3dpc2Utb3BlcmF0b3JzKgorYmxvY2t3aXNlLXJlZ2lzdGVyCWNoYW5nZS50eHQJLypibG9ja3dpc2UtcmVnaXN0ZXIqCitibG9ja3dpc2UtdmlzdWFsCXZpc3VhbC50eHQJLypibG9ja3dpc2UtdmlzdWFsKgorYm9vawlpbnRyby50eHQJLypib29rKgorYm9vbGVhbglvcHRpb25zLnR4dAkvKmJvb2xlYW4qCiticmVhay1maW5hbGx5CWV2YWwudHh0CS8qYnJlYWstZmluYWxseSoKK2Jyb3dzZSgpCWV2YWwudHh0CS8qYnJvd3NlKCkqCiticm93c2VmaWx0ZXIJZWRpdGluZy50eHQJLypicm93c2VmaWx0ZXIqCitidWZleGlzdHMoKQlldmFsLnR4dAkvKmJ1ZmV4aXN0cygpKgorYnVmZmVyLWhpZGRlbgl3aW5kb3dzLnR4dAkvKmJ1ZmZlci1oaWRkZW4qCitidWZmZXItbGlzdAl3aW5kb3dzLnR4dAkvKmJ1ZmZlci1saXN0KgorYnVmZmVyLXZhcmlhYmxlCWV2YWwudHh0CS8qYnVmZmVyLXZhcmlhYmxlKgorYnVmZmVyLXdyaXRlCWVkaXRpbmcudHh0CS8qYnVmZmVyLXdyaXRlKgorYnVmZmVyX2V4aXN0cygpCWV2YWwudHh0CS8qYnVmZmVyX2V4aXN0cygpKgorYnVmZmVyX25hbWUoKQlldmFsLnR4dAkvKmJ1ZmZlcl9uYW1lKCkqCitidWZmZXJfbnVtYmVyKCkJZXZhbC50eHQJLypidWZmZXJfbnVtYmVyKCkqCitidWZmZXJzCXdpbmRvd3MudHh0CS8qYnVmZmVycyoKK2J1ZmZlcnMtbWVudQlndWkudHh0CS8qYnVmZmVycy1tZW51KgorYnVmbGlzdGVkKCkJZXZhbC50eHQJLypidWZsaXN0ZWQoKSoKK2J1ZmxvYWRlZCgpCWV2YWwudHh0CS8qYnVmbG9hZGVkKCkqCitidWZuYW1lKCkJZXZhbC50eHQJLypidWZuYW1lKCkqCitidWZucigpCWV2YWwudHh0CS8qYnVmbnIoKSoKK2J1Zndpbm5yKCkJZXZhbC50eHQJLypidWZ3aW5ucigpKgorYnVnLWZpeGVzLTUJdmVyc2lvbjUudHh0CS8qYnVnLWZpeGVzLTUqCitidWctZml4ZXMtNgl2ZXJzaW9uNi50eHQJLypidWctZml4ZXMtNioKK2J1Zy1yZXBvcnRzCWludHJvLnR4dAkvKmJ1Zy1yZXBvcnRzKgorYnVncmVwb3J0LnZpbQlpbnRyby50eHQJLypidWdyZXBvcnQudmltKgorYnVncwlpbnRyby50eHQJLypidWdzKgorYnVpbHRpbi10ZXJtcwl0ZXJtLnR4dAkvKmJ1aWx0aW4tdGVybXMqCitidWlsdGluLXRvb2xzCWd1aS50eHQJLypidWlsdGluLXRvb2xzKgorYnVpbHRpbl90ZXJtcwl0ZXJtLnR4dAkvKmJ1aWx0aW5fdGVybXMqCitieXRlLWNvdW50CWVkaXRpbmcudHh0CS8qYnl0ZS1jb3VudCoKK2J5dGUybGluZSgpCWV2YWwudHh0CS8qYnl0ZTJsaW5lKCkqCitiemlwMglwaV9nemlwLnR4dAkvKmJ6aXAyKgorYwljaGFuZ2UudHh0CS8qYyoKK2Mtc3ludGF4CXN5bnRheC50eHQJLypjLXN5bnRheCoKK2MudmltCXN5bnRheC50eHQJLypjLnZpbSoKK2NXCWNoYW5nZS50eHQJLypjVyoKK2NfPEJTPgljbWRsaW5lLnR4dAkvKmNfPEJTPioKK2NfPEMtTGVmdD4JY21kbGluZS50eHQJLypjXzxDLUxlZnQ+KgorY188Qy1SPgljbWRsaW5lLnR4dAkvKmNfPEMtUj4qCitjXzxDLVI+XzxDLUE+CWNtZGxpbmUudHh0CS8qY188Qy1SPl88Qy1BPioKK2NfPEMtUj5fPEMtRj4JY21kbGluZS50eHQJLypjXzxDLVI+XzxDLUY+KgorY188Qy1SPl88Qy1PPgljbWRsaW5lLnR4dAkvKmNfPEMtUj5fPEMtTz4qCitjXzxDLVI+XzxDLVA+CWNtZGxpbmUudHh0CS8qY188Qy1SPl88Qy1QPioKK2NfPEMtUj5fPEMtUj4JY21kbGluZS50eHQJLypjXzxDLVI+XzxDLVI+KgorY188Qy1SPl88Qy1XPgljbWRsaW5lLnR4dAkvKmNfPEMtUj5fPEMtVz4qCitjXzxDLVJpZ2h0PgljbWRsaW5lLnR4dAkvKmNfPEMtUmlnaHQ+KgorY188Q1I+CWNtZGxpbmUudHh0CS8qY188Q1I+KgorY188RGVsPgljbWRsaW5lLnR4dAkvKmNfPERlbD4qCitjXzxEb3duPgljbWRsaW5lLnR4dAkvKmNfPERvd24+KgorY188RW5kPgljbWRsaW5lLnR4dAkvKmNfPEVuZD4qCitjXzxFc2M+CWNtZGxpbmUudHh0CS8qY188RXNjPioKK2NfPEhvbWU+CWNtZGxpbmUudHh0CS8qY188SG9tZT4qCitjXzxJbnNlcnQ+CWNtZGxpbmUudHh0CS8qY188SW5zZXJ0PioKK2NfPExlZnQ+CWNtZGxpbmUudHh0CS8qY188TGVmdD4qCitjXzxMZWZ0TW91c2U+CWNtZGxpbmUudHh0CS8qY188TGVmdE1vdXNlPioKK2NfPE5MPgljbWRsaW5lLnR4dAkvKmNfPE5MPioKK2NfPFBhZ2VEb3duPgljbWRsaW5lLnR4dAkvKmNfPFBhZ2VEb3duPioKK2NfPFBhZ2VVcD4JY21kbGluZS50eHQJLypjXzxQYWdlVXA+KgorY188UmlnaHQ+CWNtZGxpbmUudHh0CS8qY188UmlnaHQ+KgorY188Uy1Eb3duPgljbWRsaW5lLnR4dAkvKmNfPFMtRG93bj4qCitjXzxTLUxlZnQ+CWNtZGxpbmUudHh0CS8qY188Uy1MZWZ0PioKK2NfPFMtUmlnaHQ+CWNtZGxpbmUudHh0CS8qY188Uy1SaWdodD4qCitjXzxTLVRhYj4JY21kbGluZS50eHQJLypjXzxTLVRhYj4qCitjXzxTLVVwPgljbWRsaW5lLnR4dAkvKmNfPFMtVXA+KgorY188VGFiPgljbWRsaW5lLnR4dAkvKmNfPFRhYj4qCitjXzxVcD4JY21kbGluZS50eHQJLypjXzxVcD4qCitjX0NUUkwtQQljbWRsaW5lLnR4dAkvKmNfQ1RSTC1BKgorY19DVFJMLUIJY21kbGluZS50eHQJLypjX0NUUkwtQioKK2NfQ1RSTC1DCWNtZGxpbmUudHh0CS8qY19DVFJMLUMqCitjX0NUUkwtRAljbWRsaW5lLnR4dAkvKmNfQ1RSTC1EKgorY19DVFJMLUUJY21kbGluZS50eHQJLypjX0NUUkwtRSoKK2NfQ1RSTC1ICWNtZGxpbmUudHh0CS8qY19DVFJMLUgqCitjX0NUUkwtSQljbWRsaW5lLnR4dAkvKmNfQ1RSTC1JKgorY19DVFJMLUoJY21kbGluZS50eHQJLypjX0NUUkwtSioKK2NfQ1RSTC1LCWNtZGxpbmUudHh0CS8qY19DVFJMLUsqCitjX0NUUkwtTAljbWRsaW5lLnR4dAkvKmNfQ1RSTC1MKgorY19DVFJMLU4JY21kbGluZS50eHQJLypjX0NUUkwtTioKK2NfQ1RSTC1QCWNtZGxpbmUudHh0CS8qY19DVFJMLVAqCitjX0NUUkwtUQljbWRsaW5lLnR4dAkvKmNfQ1RSTC1RKgorY19DVFJMLVIJY21kbGluZS50eHQJLypjX0NUUkwtUioKK2NfQ1RSTC1SXz0JY21kbGluZS50eHQJLypjX0NUUkwtUl89KgorY19DVFJMLVJfQ1RSTC1BCWNtZGxpbmUudHh0CS8qY19DVFJMLVJfQ1RSTC1BKgorY19DVFJMLVJfQ1RSTC1GCWNtZGxpbmUudHh0CS8qY19DVFJMLVJfQ1RSTC1GKgorY19DVFJMLVJfQ1RSTC1PCWNtZGxpbmUudHh0CS8qY19DVFJMLVJfQ1RSTC1PKgorY19DVFJMLVJfQ1RSTC1QCWNtZGxpbmUudHh0CS8qY19DVFJMLVJfQ1RSTC1QKgorY19DVFJMLVJfQ1RSTC1SCWNtZGxpbmUudHh0CS8qY19DVFJMLVJfQ1RSTC1SKgorY19DVFJMLVJfQ1RSTC1XCWNtZGxpbmUudHh0CS8qY19DVFJMLVJfQ1RSTC1XKgorY19DVFJMLVUJY21kbGluZS50eHQJLypjX0NUUkwtVSoKK2NfQ1RSTC1WCWNtZGxpbmUudHh0CS8qY19DVFJMLVYqCitjX0NUUkwtVwljbWRsaW5lLnR4dAkvKmNfQ1RSTC1XKgorY19DVFJMLVkJY21kbGluZS50eHQJLypjX0NUUkwtWSoKK2NfQ1RSTC1cX0NUUkwtRwlpbnRyby50eHQJLypjX0NUUkwtXFxfQ1RSTC1HKgorY19DVFJMLVxfQ1RSTC1OCWludHJvLnR4dAkvKmNfQ1RSTC1cXF9DVFJMLU4qCitjX0NUUkwtXF9lCWNtZGxpbmUudHh0CS8qY19DVFJMLVxcX2UqCitjX0NUUkwtXgljbWRsaW5lLnR4dAkvKmNfQ1RSTC1eKgorY19DVFJMLV8JY21kbGluZS50eHQJLypjX0NUUkwtXyoKK2NfZGlncmFwaAljbWRsaW5lLnR4dAkvKmNfZGlncmFwaCoKK2Nfd2lsZGNoYXIJY21kbGluZS50eHQJLypjX3dpbGRjaGFyKgorY2FycmlhZ2UtcmV0dXJuCWludHJvLnR4dAkvKmNhcnJpYWdlLXJldHVybioKK2Nhc2UJY2hhbmdlLnR4dAkvKmNhc2UqCitjYXRjaC1hbGwJZXZhbC50eHQJLypjYXRjaC1hbGwqCitjYXRjaC1lcnJvcnMJZXZhbC50eHQJLypjYXRjaC1lcnJvcnMqCitjYXRjaC1pbnRlcnJ1cHQJZXZhbC50eHQJLypjYXRjaC1pbnRlcnJ1cHQqCitjYXRjaC1vcmRlcglldmFsLnR4dAkvKmNhdGNoLW9yZGVyKgorY2F0Y2gtdGV4dAlldmFsLnR4dAkvKmNhdGNoLXRleHQqCitjYwljaGFuZ2UudHh0CS8qY2MqCitjaGFuZ2UtbGlzdC1qdW1wcwltb3Rpb24udHh0CS8qY2hhbmdlLWxpc3QtanVtcHMqCitjaGFuZ2UudHh0CWNoYW5nZS50eHQJLypjaGFuZ2UudHh0KgorY2hhbmdlZC01LjEJdmVyc2lvbjUudHh0CS8qY2hhbmdlZC01LjEqCitjaGFuZ2VkLTUuMgl2ZXJzaW9uNS50eHQJLypjaGFuZ2VkLTUuMioKK2NoYW5nZWQtNS4zCXZlcnNpb241LnR4dAkvKmNoYW5nZWQtNS4zKgorY2hhbmdlZC01LjQJdmVyc2lvbjUudHh0CS8qY2hhbmdlZC01LjQqCitjaGFuZ2VkLTUuNQl2ZXJzaW9uNS50eHQJLypjaGFuZ2VkLTUuNSoKK2NoYW5nZWQtNS42CXZlcnNpb241LnR4dAkvKmNoYW5nZWQtNS42KgorY2hhbmdlZC01LjcJdmVyc2lvbjUudHh0CS8qY2hhbmdlZC01LjcqCitjaGFuZ2VkLTUuOAl2ZXJzaW9uNS50eHQJLypjaGFuZ2VkLTUuOCoKK2NoYW5nZWQtNi4xCXZlcnNpb242LnR4dAkvKmNoYW5nZWQtNi4xKgorY2hhbmdlZC02LjIJdmVyc2lvbjYudHh0CS8qY2hhbmdlZC02LjIqCitjaGFuZ2VkLTYuMwl2ZXJzaW9uNi50eHQJLypjaGFuZ2VkLTYuMyoKK2NoYW5nZWxpc3QJbW90aW9uLnR4dAkvKmNoYW5nZWxpc3QqCitjaGFuZ2Vsb2ctcGx1Z2luCWZpbGV0eXBlLnR4dAkvKmNoYW5nZWxvZy1wbHVnaW4qCitjaGFuZ2Vsb2ctc3ludGF4CXN5bnRheC50eHQJLypjaGFuZ2Vsb2ctc3ludGF4KgorY2hhbmdlbG9nLnZpbQlzeW50YXgudHh0CS8qY2hhbmdlbG9nLnZpbSoKK2NoYW5nZXRpY2sJZXZhbC50eHQJLypjaGFuZ2V0aWNrKgorY2hhbmdpbmcJY2hhbmdlLnR4dAkvKmNoYW5naW5nKgorY2hhcjJucigpCWV2YWwudHh0CS8qY2hhcjJucigpKgorY2hhcmFjdGVyd2lzZQltb3Rpb24udHh0CS8qY2hhcmFjdGVyd2lzZSoKK2NoYXJhY3Rlcndpc2UtcmVnaXN0ZXIJY2hhbmdlLnR4dAkvKmNoYXJhY3Rlcndpc2UtcmVnaXN0ZXIqCitjaGFyYWN0ZXJ3aXNlLXZpc3VhbAl2aXN1YWwudHh0CS8qY2hhcmFjdGVyd2lzZS12aXN1YWwqCitjaGFyY29udmVydF9mcm9tLXZhcmlhYmxlCWV2YWwudHh0CS8qY2hhcmNvbnZlcnRfZnJvbS12YXJpYWJsZSoKK2NoYXJjb252ZXJ0X3RvLXZhcmlhYmxlCWV2YWwudHh0CS8qY2hhcmNvbnZlcnRfdG8tdmFyaWFibGUqCitjaGFyc2V0CW1ieXRlLnR4dAkvKmNoYXJzZXQqCitjaGFyc2V0LWNvbnZlcnNpb24JbWJ5dGUudHh0CS8qY2hhcnNldC1jb252ZXJzaW9uKgorY2hpbGwtc3ludGF4CXN5bnRheC50eHQJLypjaGlsbC1zeW50YXgqCitjaGlsbC52aW0Jc3ludGF4LnR4dAkvKmNoaWxsLnZpbSoKK2NpbmRlbnQoKQlldmFsLnR4dAkvKmNpbmRlbnQoKSoKK2NpbmtleXMtZm9ybWF0CWluZGVudC50eHQJLypjaW5rZXlzLWZvcm1hdCoKK2Npbm9wdGlvbnMtdmFsdWVzCWluZGVudC50eHQJLypjaW5vcHRpb25zLXZhbHVlcyoKK2NsaWVudC1zZXJ2ZXIJcmVtb3RlLnR4dAkvKmNsaWVudC1zZXJ2ZXIqCitjbGllbnRzZXJ2ZXIJcmVtb3RlLnR4dAkvKmNsaWVudHNlcnZlcioKK2NsaXBib2FyZAlndWkudHh0CS8qY2xpcGJvYXJkKgorY21kYXJnLXZhcmlhYmxlCWV2YWwudHh0CS8qY21kYXJnLXZhcmlhYmxlKgorY21kYmFuZy12YXJpYWJsZQlldmFsLnR4dAkvKmNtZGJhbmctdmFyaWFibGUqCitjbWRsaW5lLWFyZ3VtZW50cwl2aV9kaWZmLnR4dAkvKmNtZGxpbmUtYXJndW1lbnRzKgorY21kbGluZS1jaGFuZ2VkCXZlcnNpb241LnR4dAkvKmNtZGxpbmUtY2hhbmdlZCoKK2NtZGxpbmUtY29tcGxldGlvbgljbWRsaW5lLnR4dAkvKmNtZGxpbmUtY29tcGxldGlvbioKK2NtZGxpbmUtZWRpdGluZwljbWRsaW5lLnR4dAkvKmNtZGxpbmUtZWRpdGluZyoKK2NtZGxpbmUtaGlzdG9yeQljbWRsaW5lLnR4dAkvKmNtZGxpbmUtaGlzdG9yeSoKK2NtZGxpbmUtbGluZXMJY21kbGluZS50eHQJLypjbWRsaW5lLWxpbmVzKgorY21kbGluZS1yYW5nZXMJY21kbGluZS50eHQJLypjbWRsaW5lLXJhbmdlcyoKK2NtZGxpbmUtc3BlY2lhbAljbWRsaW5lLnR4dAkvKmNtZGxpbmUtc3BlY2lhbCoKK2NtZGxpbmUtdG9vLWxvbmcJY21kbGluZS50eHQJLypjbWRsaW5lLXRvby1sb25nKgorY21kbGluZS13aW5kb3cJY21kbGluZS50eHQJLypjbWRsaW5lLXdpbmRvdyoKK2NtZGxpbmUudHh0CWNtZGxpbmUudHh0CS8qY21kbGluZS50eHQqCitjbWR3aW4JY21kbGluZS50eHQJLypjbWR3aW4qCitjbWR3aW4tY2hhcgljbWRsaW5lLnR4dAkvKmNtZHdpbi1jaGFyKgorY29ib2wtc3ludGF4CXN5bnRheC50eHQJLypjb2JvbC1zeW50YXgqCitjb2JvbC52aW0Jc3ludGF4LnR4dAkvKmNvYm9sLnZpbSoKK2NvZGVzZXQJbWJ5dGUudHh0CS8qY29kZXNldCoKK2NvZGluZy1zdHlsZQlkZXZlbG9wLnR4dAkvKmNvZGluZy1zdHlsZSoKK2NvbCgpCWV2YWwudHh0CS8qY29sKCkqCitjb2xkZnVzaW9uLXN5bnRheAlzeW50YXgudHh0CS8qY29sZGZ1c2lvbi1zeW50YXgqCitjb2xkZnVzaW9uLnZpbQlzeW50YXgudHh0CS8qY29sZGZ1c2lvbi52aW0qCitjb2xsYXBzZQl0aXBzLnR4dAkvKmNvbGxhcHNlKgorY29sb3IteHRlcm0Jc3ludGF4LnR4dAkvKmNvbG9yLXh0ZXJtKgorY29sb3JpbmcJc3ludGF4LnR4dAkvKmNvbG9yaW5nKgorY29sb3J0ZXN0LnZpbQlzeW50YXgudHh0CS8qY29sb3J0ZXN0LnZpbSoKK2NvbW1hbmQtbW9kZQlpbnRyby50eHQJLypjb21tYW5kLW1vZGUqCitjb21wYXRpYmxlLWRlZmF1bHQJc3RhcnRpbmcudHh0CS8qY29tcGF0aWJsZS1kZWZhdWx0KgorY29tcGlsZS1jaGFuZ2VzLTUJdmVyc2lvbjUudHh0CS8qY29tcGlsZS1jaGFuZ2VzLTUqCitjb21waWxlLWNoYW5nZXMtNgl2ZXJzaW9uNi50eHQJLypjb21waWxlLWNoYW5nZXMtNioKK2NvbXBpbGVyLW1hbngJcXVpY2tmaXgudHh0CS8qY29tcGlsZXItbWFueCoKK2NvbXBpbGVyLXB5dW5pdAlxdWlja2ZpeC50eHQJLypjb21waWxlci1weXVuaXQqCitjb21waWxlci1zZWxlY3QJcXVpY2tmaXgudHh0CS8qY29tcGlsZXItc2VsZWN0KgorY29tcGlsZXItdGV4CXF1aWNrZml4LnR4dAkvKmNvbXBpbGVyLXRleCoKK2NvbXBsLWN1cnJlbnQJaW5zZXJ0LnR4dAkvKmNvbXBsLWN1cnJlbnQqCitjb21wbC1kZWZpbmUJaW5zZXJ0LnR4dAkvKmNvbXBsLWRlZmluZSoKK2NvbXBsLWRpY3Rpb25hcnkJaW5zZXJ0LnR4dAkvKmNvbXBsLWRpY3Rpb25hcnkqCitjb21wbC1maWxlbmFtZQlpbnNlcnQudHh0CS8qY29tcGwtZmlsZW5hbWUqCitjb21wbC1nZW5lcmljCWluc2VydC50eHQJLypjb21wbC1nZW5lcmljKgorY29tcGwta2V5d29yZAlpbnNlcnQudHh0CS8qY29tcGwta2V5d29yZCoKK2NvbXBsLXRhZwlpbnNlcnQudHh0CS8qY29tcGwtdGFnKgorY29tcGwtdmltCWluc2VydC50eHQJLypjb21wbC12aW0qCitjb21wbC13aG9sZS1saW5lCWluc2VydC50eHQJLypjb21wbC13aG9sZS1saW5lKgorY29tcGxleC1jaGFuZ2UJY2hhbmdlLnR4dAkvKmNvbXBsZXgtY2hhbmdlKgorY29tcGxleC1yZXBlYXQJcmVwZWF0LnR4dAkvKmNvbXBsZXgtcmVwZWF0KgorY29tcHJlc3MJcGlfZ3ppcC50eHQJLypjb21wcmVzcyoKK2NvbmZpcm0oKQlldmFsLnR4dAkvKmNvbmZpcm0oKSoKK2Nvbm5lY3Rpb24tcmVmdXNlZAltZXNzYWdlLnR4dAkvKmNvbm5lY3Rpb24tcmVmdXNlZCoKK2NvbnNvbGUtbWVudXMJZ3VpLnR4dAkvKmNvbnNvbGUtbWVudXMqCitjb250cm9sCWludHJvLnR4dAkvKmNvbnRyb2wqCitjb252ZXJzaW9uLXNlcnZlcgltYnl0ZS50eHQJLypjb252ZXJzaW9uLXNlcnZlcioKK2NvbnZlcnQtdG8tSFRNTAlzeW50YXgudHh0CS8qY29udmVydC10by1IVE1MKgorY29udmVydC10by1YSFRNTAlzeW50YXgudHh0CS8qY29udmVydC10by1YSFRNTCoKK2NvbnZlcnQtdG8tWE1MCXN5bnRheC50eHQJLypjb252ZXJ0LXRvLVhNTCoKK2NvcHktZGlmZnMJZGlmZi50eHQJLypjb3B5LWRpZmZzKgorY29weS1tb3ZlCWNoYW5nZS50eHQJLypjb3B5LW1vdmUqCitjb3B5aW5nCXVnYW5kYS50eHQJLypjb3B5aW5nKgorY29weXJpZ2h0CXVnYW5kYS50eHQJLypjb3B5cmlnaHQqCitjb3VudAlpbnRyby50eHQJLypjb3VudCoKK2NvdW50LWJ5dGVzCXRpcHMudHh0CS8qY291bnQtYnl0ZXMqCitjb3VudC1pdGVtcwl0aXBzLnR4dAkvKmNvdW50LWl0ZW1zKgorY291bnQtdmFyaWFibGUJZXZhbC50eHQJLypjb3VudC12YXJpYWJsZSoKK2NvdW50MS12YXJpYWJsZQlldmFsLnR4dAkvKmNvdW50MS12YXJpYWJsZSoKK2NwLWRlZmF1bHQJdmVyc2lvbjUudHh0CS8qY3AtZGVmYXVsdCoKK2Nwby0hCW9wdGlvbnMudHh0CS8qY3BvLSEqCitjcG8tJAlvcHRpb25zLnR4dAkvKmNwby0kKgorY3BvLSUJb3B0aW9ucy50eHQJLypjcG8tJSoKK2Nwby08CW9wdGlvbnMudHh0CS8qY3BvLTwqCitjcG8tQQlvcHRpb25zLnR4dAkvKmNwby1BKgorY3BvLUIJb3B0aW9ucy50eHQJLypjcG8tQioKK2Nwby1DCW9wdGlvbnMudHh0CS8qY3BvLUMqCitjcG8tRAlvcHRpb25zLnR4dAkvKmNwby1EKgorY3BvLUUJb3B0aW9ucy50eHQJLypjcG8tRSoKK2Nwby1GCW9wdGlvbnMudHh0CS8qY3BvLUYqCitjcG8tSglvcHRpb25zLnR4dAkvKmNwby1KKgorY3BvLUsJb3B0aW9ucy50eHQJLypjcG8tSyoKK2Nwby1MCW9wdGlvbnMudHh0CS8qY3BvLUwqCitjcG8tTQlvcHRpb25zLnR4dAkvKmNwby1NKgorY3BvLU8Jb3B0aW9ucy50eHQJLypjcG8tTyoKK2Nwby1SCW9wdGlvbnMudHh0CS8qY3BvLVIqCitjcG8tUwlvcHRpb25zLnR4dAkvKmNwby1TKgorY3BvLVcJb3B0aW9ucy50eHQJLypjcG8tVyoKK2Nwby1hCW9wdGlvbnMudHh0CS8qY3BvLWEqCitjcG8tYglvcHRpb25zLnR4dAkvKmNwby1iKgorY3BvLWMJb3B0aW9ucy50eHQJLypjcG8tYyoKK2Nwby1kCW9wdGlvbnMudHh0CS8qY3BvLWQqCitjcG8tZQlvcHRpb25zLnR4dAkvKmNwby1lKgorY3BvLWYJb3B0aW9ucy50eHQJLypjcG8tZioKK2Nwby1nCW9wdGlvbnMudHh0CS8qY3BvLWcqCitjcG8taQlvcHRpb25zLnR4dAkvKmNwby1pKgorY3BvLWoJb3B0aW9ucy50eHQJLypjcG8taioKK2Nwby1rCW9wdGlvbnMudHh0CS8qY3BvLWsqCitjcG8tbAlvcHRpb25zLnR4dAkvKmNwby1sKgorY3BvLW0Jb3B0aW9ucy50eHQJLypjcG8tbSoKK2Nwby1uCW9wdGlvbnMudHh0CS8qY3BvLW4qCitjcG8tbwlvcHRpb25zLnR4dAkvKmNwby1vKgorY3BvLXAJb3B0aW9ucy50eHQJLypjcG8tcCoKK2Nwby1yCW9wdGlvbnMudHh0CS8qY3BvLXIqCitjcG8tcwlvcHRpb25zLnR4dAkvKmNwby1zKgorY3BvLXN0YXIJb3B0aW9ucy50eHQJLypjcG8tc3RhcioKK2Nwby10CW9wdGlvbnMudHh0CS8qY3BvLXQqCitjcG8tdQlvcHRpb25zLnR4dAkvKmNwby11KgorY3BvLXYJb3B0aW9ucy50eHQJLypjcG8tdioKK2Nwby13CW9wdGlvbnMudHh0CS8qY3BvLXcqCitjcG8teAlvcHRpb25zLnR4dAkvKmNwby14KgorY3BvLXkJb3B0aW9ucy50eHQJLypjcG8teSoKK2NyYXNoLXJlY292ZXJ5CXJlY292ZXIudHh0CS8qY3Jhc2gtcmVjb3ZlcnkqCitjcmVhdGluZy1tZW51cwlndWkudHh0CS8qY3JlYXRpbmctbWVudXMqCitjcmVkaXRzCWludHJvLnR4dAkvKmNyZWRpdHMqCitjcm9udGFiCW9wdGlvbnMudHh0CS8qY3JvbnRhYioKK2NzLWZpbmQJaWZfY3Njb3AudHh0CS8qY3MtZmluZCoKK2NzNy1wcm9ibGVtCXRlcm0udHh0CS8qY3M3LXByb2JsZW0qCitjc2NvcGUJaWZfY3Njb3AudHh0CS8qY3Njb3BlKgorY3Njb3BlLWNvbW1hbmRzCWlmX2NzY29wLnR4dAkvKmNzY29wZS1jb21tYW5kcyoKK2NzY29wZS1maW5kCWlmX2NzY29wLnR4dAkvKmNzY29wZS1maW5kKgorY3Njb3BlLWhvd3RvdXNlCWlmX2NzY29wLnR4dAkvKmNzY29wZS1ob3d0b3VzZSoKK2NzY29wZS1pbmZvCWlmX2NzY29wLnR4dAkvKmNzY29wZS1pbmZvKgorY3Njb3BlLWludHJvCWlmX2NzY29wLnR4dAkvKmNzY29wZS1pbnRybyoKK2NzY29wZS1saW1pdGF0aW9ucwlpZl9jc2NvcC50eHQJLypjc2NvcGUtbGltaXRhdGlvbnMqCitjc2NvcGUtb3B0aW9ucwlpZl9jc2NvcC50eHQJLypjc2NvcGUtb3B0aW9ucyoKK2NzY29wZS1zdWdnZXN0aW9ucwlpZl9jc2NvcC50eHQJLypjc2NvcGUtc3VnZ2VzdGlvbnMqCitjc2NvcGUtd2luMzIJaWZfY3Njb3AudHh0CS8qY3Njb3BlLXdpbjMyKgorY3Njb3BlX2Nvbm5lY3Rpb24oKQlldmFsLnR4dAkvKmNzY29wZV9jb25uZWN0aW9uKCkqCitjc2NvcGVwYXRoY29tcAlpZl9jc2NvcC50eHQJLypjc2NvcGVwYXRoY29tcCoKK2NzY29wZXByZwlpZl9jc2NvcC50eHQJLypjc2NvcGVwcmcqCitjc2NvcGVxdWlja2ZpeAlpZl9jc2NvcC50eHQJLypjc2NvcGVxdWlja2ZpeCoKK2NzY29wZXRhZwlpZl9jc2NvcC50eHQJLypjc2NvcGV0YWcqCitjc2NvcGV0YWdvcmRlcglpZl9jc2NvcC50eHQJLypjc2NvcGV0YWdvcmRlcioKK2NzY29wZXZlcmJvc2UJaWZfY3Njb3AudHh0CS8qY3Njb3BldmVyYm9zZSoKK2NzaC1zeW50YXgJc3ludGF4LnR4dAkvKmNzaC1zeW50YXgqCitjc2gudmltCXN5bnRheC50eHQJLypjc2gudmltKgorY3NwYwlpZl9jc2NvcC50eHQJLypjc3BjKgorY3NwcmcJaWZfY3Njb3AudHh0CS8qY3NwcmcqCitjc3FmCWlmX2NzY29wLnR4dAkvKmNzcWYqCitjc3QJaWZfY3Njb3AudHh0CS8qY3N0KgorY3N0bwlpZl9jc2NvcC50eHQJLypjc3RvKgorY3N2ZXJiCWlmX2NzY29wLnR4dAkvKmNzdmVyYioKK2N0YWdzCXRhZ3NyY2gudHh0CS8qY3RhZ3MqCitjdGFncy1nb25lCXZlcnNpb242LnR4dAkvKmN0YWdzLWdvbmUqCitjdGVybS1jb2xvcnMJc3ludGF4LnR4dAkvKmN0ZXJtLWNvbG9ycyoKK2N0cmwJaW50cm8udHh0CS8qY3RybCoKK2N0eXBlLXZhcmlhYmxlCWV2YWwudHh0CS8qY3R5cGUtdmFyaWFibGUqCitjdXJseS1icmFjZXMtZnVuY3Rpb24tbmFtZXMJZXZhbC50eHQJLypjdXJseS1icmFjZXMtZnVuY3Rpb24tbmFtZXMqCitjdXJseS1icmFjZXMtbmFtZXMJZXZhbC50eHQJLypjdXJseS1icmFjZXMtbmFtZXMqCitjdXJwb3MtdmlzdWFsCXZlcnNpb242LnR4dAkvKmN1cnBvcy12aXN1YWwqCitjdXJyZW50LWRpcmVjdG9yeQllZGl0aW5nLnR4dAkvKmN1cnJlbnQtZGlyZWN0b3J5KgorY3VycmVudC1maWxlCWVkaXRpbmcudHh0CS8qY3VycmVudC1maWxlKgorY3VycmVudF9jb21waWxlcglxdWlja2ZpeC50eHQJLypjdXJyZW50X2NvbXBpbGVyKgorY3Vyc29yKCkJZXZhbC50eHQJLypjdXJzb3IoKSoKK2N1cnNvci1ibGlua2luZwlvcHRpb25zLnR4dAkvKmN1cnNvci1ibGlua2luZyoKK2N1cnNvci1kb3duCWludHJvLnR4dAkvKmN1cnNvci1kb3duKgorY3Vyc29yLWxlZnQJaW50cm8udHh0CS8qY3Vyc29yLWxlZnQqCitjdXJzb3ItbW90aW9ucwltb3Rpb24udHh0CS8qY3Vyc29yLW1vdGlvbnMqCitjdXJzb3ItcG9zaXRpb24JcGF0dGVybi50eHQJLypjdXJzb3ItcG9zaXRpb24qCitjdXJzb3ItcmlnaHQJaW50cm8udHh0CS8qY3Vyc29yLXJpZ2h0KgorY3Vyc29yLXVwCWludHJvLnR4dAkvKmN1cnNvci11cCoKK2N1cnNvcl9kb3duCWludHJvLnR4dAkvKmN1cnNvcl9kb3duKgorY3Vyc29yX2xlZnQJaW50cm8udHh0CS8qY3Vyc29yX2xlZnQqCitjdXJzb3JfcmlnaHQJaW50cm8udHh0CS8qY3Vyc29yX3JpZ2h0KgorY3Vyc29yX3VwCWludHJvLnR4dAkvKmN1cnNvcl91cCoKK2N3CWNoYW5nZS50eHQJLypjdyoKK2N3ZWItc3ludGF4CXN5bnRheC50eHQJLypjd2ViLXN5bnRheCoKK2N3ZWIudmltCXN5bnRheC50eHQJLypjd2ViLnZpbSoKK2N5bmxpYi1zeW50YXgJc3ludGF4LnR4dAkvKmN5bmxpYi1zeW50YXgqCitjeW5saWIudmltCXN5bnRheC50eHQJLypjeW5saWIudmltKgorZAljaGFuZ2UudHh0CS8qZCoKK2RhQgltb3Rpb24udHh0CS8qZGFCKgorZGFXCW1vdGlvbi50eHQJLypkYVcqCitkYWIJbW90aW9uLnR4dAkvKmRhYioKK2RhcAltb3Rpb24udHh0CS8qZGFwKgorZGFzCW1vdGlvbi50eHQJLypkYXMqCitkYXYJcGlfbmV0cncudHh0CS8qZGF2KgorZGF3CW1vdGlvbi50eHQJLypkYXcqCitkZAljaGFuZ2UudHh0CS8qZGQqCitkZWJ1Zy1oaWdobGlnaHQJZGVidWdnZXIudHh0CS8qZGVidWctaGlnaGxpZ2h0KgorZGVidWctbW9kZQlyZXBlYXQudHh0CS8qZGVidWctbW9kZSoKK2RlYnVnLXNjcmlwdHMJcmVwZWF0LnR4dAkvKmRlYnVnLXNjcmlwdHMqCitkZWJ1Zy1zaWducwlkZWJ1Z2dlci50eHQJLypkZWJ1Zy1zaWducyoKK2RlYnVnLXZpbQlpbnRyby50eHQJLypkZWJ1Zy12aW0qCitkZWJ1Z2dlci1jb21waWxhdGlvbglkZWJ1Z2dlci50eHQJLypkZWJ1Z2dlci1jb21waWxhdGlvbioKK2RlYnVnZ2VyLWZlYXR1cmVzCWRlYnVnZ2VyLnR4dAkvKmRlYnVnZ2VyLWZlYXR1cmVzKgorZGVidWdnZXItaW50ZWdyYXRpb24JZGVidWdnZXIudHh0CS8qZGVidWdnZXItaW50ZWdyYXRpb24qCitkZWJ1Z2dlci1zdXBwb3J0CWRlYnVnZ2VyLnR4dAkvKmRlYnVnZ2VyLXN1cHBvcnQqCitkZWJ1Z2dlci50eHQJZGVidWdnZXIudHh0CS8qZGVidWdnZXIudHh0KgorZGVjLW1vdXNlCW9wdGlvbnMudHh0CS8qZGVjLW1vdXNlKgorZGVmaW5pdGlvbi1zZWFyY2gJdGFnc3JjaC50eHQJLypkZWZpbml0aW9uLXNlYXJjaCoKK2RlZmluaXRpb25zCWludHJvLnR4dAkvKmRlZmluaXRpb25zKgorZGVsZXRlKCkJZXZhbC50eHQJLypkZWxldGUoKSoKK2RlbGV0ZS1pbnNlcnQJY2hhbmdlLnR4dAkvKmRlbGV0ZS1pbnNlcnQqCitkZWxldGUtbWVudXMJZ3VpLnR4dAkvKmRlbGV0ZS1tZW51cyoKK2RlbGV0aW5nCWNoYW5nZS50eHQJLypkZWxldGluZyoKK2Rlc2lnbi1hc3N1bXB0aW9ucwlkZXZlbG9wLnR4dAkvKmRlc2lnbi1hc3N1bXB0aW9ucyoKK2Rlc2lnbi1jb21wYXRpYmxlCWRldmVsb3AudHh0CS8qZGVzaWduLWNvbXBhdGlibGUqCitkZXNpZ24tZGVjaXNpb25zCWRldmVsb3AudHh0CS8qZGVzaWduLWRlY2lzaW9ucyoKK2Rlc2lnbi1kb2N1bWVudGVkCWRldmVsb3AudHh0CS8qZGVzaWduLWRvY3VtZW50ZWQqCitkZXNpZ24tZmxleGlibGUJZGV2ZWxvcC50eHQJLypkZXNpZ24tZmxleGlibGUqCitkZXNpZ24tZ29hbHMJZGV2ZWxvcC50eHQJLypkZXNpZ24tZ29hbHMqCitkZXNpZ24taW1wcm92ZWQJZGV2ZWxvcC50eHQJLypkZXNpZ24taW1wcm92ZWQqCitkZXNpZ24tbWFpbnRhaW4JZGV2ZWxvcC50eHQJLypkZXNpZ24tbWFpbnRhaW4qCitkZXNpZ24tbXVsdGktcGxhdGZvcm0JZGV2ZWxvcC50eHQJLypkZXNpZ24tbXVsdGktcGxhdGZvcm0qCitkZXNpZ24tbm90CWRldmVsb3AudHh0CS8qZGVzaWduLW5vdCoKK2Rlc2lnbi1zcGVlZC1zaXplCWRldmVsb3AudHh0CS8qZGVzaWduLXNwZWVkLXNpemUqCitkZXNrdG9wLXN5bnRheAlzeW50YXgudHh0CS8qZGVza3RvcC1zeW50YXgqCitkZXNrdG9wLnZpbQlzeW50YXgudHh0CS8qZGVza3RvcC52aW0qCitkZXZlbG9wLnR4dAlkZXZlbG9wLnR4dAkvKmRldmVsb3AudHh0KgorZGV2ZWxvcG1lbnQJZGV2ZWxvcC50eHQJLypkZXZlbG9wbWVudCoKK2RoCWNoYW5nZS50eHQJLypkaCoKK2RpQgltb3Rpb24udHh0CS8qZGlCKgorZGlXCW1vdGlvbi50eHQJLypkaVcqCitkaWFsb2cJZ3VpX3czMi50eHQJLypkaWFsb2cqCitkaWFsb2dzLWFkZGVkCXZlcnNpb241LnR4dAkvKmRpYWxvZ3MtYWRkZWQqCitkaWIJbW90aW9uLnR4dAkvKmRpYioKK2RpZF9maWxldHlwZSgpCWV2YWwudHh0CS8qZGlkX2ZpbGV0eXBlKCkqCitkaWZmCWRpZmYudHh0CS8qZGlmZioKK2RpZmYtZGlmZmV4cHIJZGlmZi50eHQJLypkaWZmLWRpZmZleHByKgorZGlmZi1tb2RlCWRpZmYudHh0CS8qZGlmZi1tb2RlKgorZGlmZi1vcHRpb25zCWRpZmYudHh0CS8qZGlmZi1vcHRpb25zKgorZGlmZi1wYXRjaGV4cHIJZGlmZi50eHQJLypkaWZmLXBhdGNoZXhwcioKK2RpZmYudHh0CWRpZmYudHh0CS8qZGlmZi50eHQqCitkaWdyYXBoLWFyZwljaGFuZ2UudHh0CS8qZGlncmFwaC1hcmcqCitkaWdyYXBoLXRhYmxlCWRpZ3JhcGgudHh0CS8qZGlncmFwaC10YWJsZSoKK2RpZ3JhcGgudHh0CWRpZ3JhcGgudHh0CS8qZGlncmFwaC50eHQqCitkaWdyYXBocwlkaWdyYXBoLnR4dAkvKmRpZ3JhcGhzKgorZGlncmFwaHMtY2hhbmdlZAl2ZXJzaW9uNi50eHQJLypkaWdyYXBocy1jaGFuZ2VkKgorZGlncmFwaHMtZGVmYXVsdAlkaWdyYXBoLnR4dAkvKmRpZ3JhcGhzLWRlZmF1bHQqCitkaWdyYXBocy1kZWZpbmUJZGlncmFwaC50eHQJLypkaWdyYXBocy1kZWZpbmUqCitkaWdyYXBocy11c2UJZGlncmFwaC50eHQJLypkaWdyYXBocy11c2UqCitkaXAJbW90aW9uLnR4dAkvKmRpcCoKK2RpcmNvbG9ycy1zeW50YXgJc3ludGF4LnR4dAkvKmRpcmNvbG9ycy1zeW50YXgqCitkaXJjb2xvcnMudmltCXN5bnRheC50eHQJLypkaXJjb2xvcnMudmltKgorZGlzCW1vdGlvbi50eHQJLypkaXMqCitkaXNhYmxlLW1lbnVzCWd1aS50eHQJLypkaXNhYmxlLW1lbnVzKgorZGlzdHJpYnV0aW9uCWludHJvLnR4dAkvKmRpc3RyaWJ1dGlvbioKK2Rpdwltb3Rpb24udHh0CS8qZGl3KgorZGwJY2hhbmdlLnR4dAkvKmRsKgorZG8JZGlmZi50eHQJLypkbyoKK2RvYy1maWxlLWxpc3QJaGVscC50eHQJLypkb2MtZmlsZS1saXN0KgorZG9jYmstc3ludGF4CXN5bnRheC50eHQJLypkb2Niay1zeW50YXgqCitkb2Niay52aW0Jc3ludGF4LnR4dAkvKmRvY2JrLnZpbSoKK2RvY2Jrc2dtbC1zeW50YXgJc3ludGF4LnR4dAkvKmRvY2Jrc2dtbC1zeW50YXgqCitkb2Nia3NnbWwudmltCXN5bnRheC50eHQJLypkb2Nia3NnbWwudmltKgorZG9jYmt4bWwtc3ludGF4CXN5bnRheC50eHQJLypkb2Nia3htbC1zeW50YXgqCitkb2Nia3htbC52aW0Jc3ludGF4LnR4dAkvKmRvY2JreG1sLnZpbSoKK2RvY2Jvb2sJc3ludGF4LnR4dAkvKmRvY2Jvb2sqCitkb2N1bWVudGF0aW9uLTYJdmVyc2lvbjYudHh0CS8qZG9jdW1lbnRhdGlvbi02KgorZG9zCW9zX2Rvcy50eHQJLypkb3MqCitkb3MtOmNkCW9zX2Rvcy50eHQJLypkb3MtOmNkKgorZG9zLUNUUkwtQnJlYWsJb3NfZG9zLnR4dAkvKmRvcy1DVFJMLUJyZWFrKgorZG9zLWJhY2tzbGFzaAlvc19kb3MudHh0CS8qZG9zLWJhY2tzbGFzaCoKK2Rvcy1jb2xvcnMJb3NfZG9zLnR4dAkvKmRvcy1jb2xvcnMqCitkb3MtZmlsZS1mb3JtYXRzCW9zX2Rvcy50eHQJLypkb3MtZmlsZS1mb3JtYXRzKgorZG9zLWxvY2F0aW9ucwlvc19kb3MudHh0CS8qZG9zLWxvY2F0aW9ucyoKK2Rvcy1zaGVsbAlvc19kb3MudHh0CS8qZG9zLXNoZWxsKgorZG9zLXN0YW5kYXJkLW1hcHBpbmdzCW9zX2Rvcy50eHQJLypkb3Mtc3RhbmRhcmQtbWFwcGluZ3MqCitkb3MtdGVtcC1maWxlcwlvc19kb3MudHh0CS8qZG9zLXRlbXAtZmlsZXMqCitkb3MxNglvc19tc2Rvcy50eHQJLypkb3MxNioKK2RvczMyCW9zX21zZG9zLnR4dAkvKmRvczMyKgorZG9zYmF0Y2gtc3ludGF4CXN5bnRheC50eHQJLypkb3NiYXRjaC1zeW50YXgqCitkb3NiYXRjaC52aW0Jc3ludGF4LnR4dAkvKmRvc2JhdGNoLnZpbSoKK2RvdWJsZS1jbGljawl0ZXJtLnR4dAkvKmRvdWJsZS1jbGljayoKK2Rvd25sb2FkCWludHJvLnR4dAkvKmRvd25sb2FkKgorZHAJZGlmZi50eHQJLypkcCoKK2RyYWctbi1kcm9wCWd1aS50eHQJLypkcmFnLW4tZHJvcCoKK2RyYWctbi1kcm9wLXdpbjMyCWd1aV93MzIudHh0CS8qZHJhZy1uLWRyb3Atd2luMzIqCitkcmFnLXN0YXR1cy1saW5lCXRlcm0udHh0CS8qZHJhZy1zdGF0dXMtbGluZSoKK2R0ZC1zeW50YXgJc3ludGF4LnR4dAkvKmR0ZC1zeW50YXgqCitkdGQudmltCXN5bnRheC50eHQJLypkdGQudmltKgorZHlpbmctdmFyaWFibGUJZXZhbC50eHQJLypkeWluZy12YXJpYWJsZSoKK2UJbW90aW9uLnR4dAkvKmUqCitlYXN5CXN0YXJ0aW5nLnR4dAkvKmVhc3kqCitlZGl0LWEtZmlsZQllZGl0aW5nLnR4dAkvKmVkaXQtYS1maWxlKgorZWRpdC1iaW5hcnkJZWRpdGluZy50eHQJLyplZGl0LWJpbmFyeSoKK2VkaXQtZGlhbG9ncwllZGl0aW5nLnR4dAkvKmVkaXQtZGlhbG9ncyoKK2VkaXQtZmlsZXMJZWRpdGluZy50eHQJLyplZGl0LWZpbGVzKgorZWRpdC1pbnRybwllZGl0aW5nLnR4dAkvKmVkaXQtaW50cm8qCitlZGl0LW5vLWJyZWFrCXVzcl8yNS50eHQJLyplZGl0LW5vLWJyZWFrKgorZWRpdGluZy50eHQJZWRpdGluZy50eHQJLyplZGl0aW5nLnR4dCoKK2VmbS1lbnRyaWVzCXF1aWNrZml4LnR4dAkvKmVmbS1lbnRyaWVzKgorZWZtLWlnbm9yZQlxdWlja2ZpeC50eHQJLyplZm0taWdub3JlKgorZWlmZmVsLXN5bnRheAlzeW50YXgudHh0CS8qZWlmZmVsLXN5bnRheCoKK2VpZmZlbC52aW0Jc3ludGF4LnR4dAkvKmVpZmZlbC52aW0qCitlbWFjcy1rZXlzCXRpcHMudHh0CS8qZW1hY3Mta2V5cyoKK2VtYWNzLXRhZ3MJdGFnc3JjaC50eHQJLyplbWFjcy10YWdzKgorZW1hY3NfdGFncwl0YWdzcmNoLnR4dAkvKmVtYWNzX3RhZ3MqCitlbmNvZGluZy1uYW1lcwltYnl0ZS50eHQJLyplbmNvZGluZy1uYW1lcyoKK2VuY29kaW5nLXRhYmxlCW1ieXRlLnR4dAkvKmVuY29kaW5nLXRhYmxlKgorZW5jb2RpbmctdmFsdWVzCW1ieXRlLnR4dAkvKmVuY29kaW5nLXZhbHVlcyoKK2VuY3J5cHRpb24JZWRpdGluZy50eHQJLyplbmNyeXB0aW9uKgorZW5kCWludHJvLnR4dAkvKmVuZCoKK2VuZC1vZi1maWxlCXBhdHRlcm4udHh0CS8qZW5kLW9mLWZpbGUqCitlbmxpZ2h0ZW5lZC10ZXJtaW5hbAlzeW50YXgudHh0CS8qZW5saWdodGVuZWQtdGVybWluYWwqCitlcmxhbmctc3ludGF4CXN5bnRheC50eHQJLyplcmxhbmctc3ludGF4KgorZXJsYW5nLnZpbQlzeW50YXgudHh0CS8qZXJsYW5nLnZpbSoKK2Vycm1zZy12YXJpYWJsZQlldmFsLnR4dAkvKmVycm1zZy12YXJpYWJsZSoKK2Vycm9yLWZpbGUtZm9ybWF0CXF1aWNrZml4LnR4dAkvKmVycm9yLWZpbGUtZm9ybWF0KgorZXJyb3ItbWVzc2FnZXMJbWVzc2FnZS50eHQJLyplcnJvci1tZXNzYWdlcyoKK2Vycm9yZm9ybWF0CXF1aWNrZml4LnR4dAkvKmVycm9yZm9ybWF0KgorZXJyb3Jmb3JtYXQtSmlrZXMJcXVpY2tmaXgudHh0CS8qZXJyb3Jmb3JtYXQtSmlrZXMqCitlcnJvcmZvcm1hdC1MYVRlWAlxdWlja2ZpeC50eHQJLyplcnJvcmZvcm1hdC1MYVRlWCoKK2Vycm9yZm9ybWF0LVBlcmwJcXVpY2tmaXgudHh0CS8qZXJyb3Jmb3JtYXQtUGVybCoKK2Vycm9yZm9ybWF0LWFudAlxdWlja2ZpeC50eHQJLyplcnJvcmZvcm1hdC1hbnQqCitlcnJvcmZvcm1hdC1jaGFuZ2VkCXZlcnNpb240LnR4dAkvKmVycm9yZm9ybWF0LWNoYW5nZWQqCitlcnJvcmZvcm1hdC1qYWRlCXF1aWNrZml4LnR4dAkvKmVycm9yZm9ybWF0LWphZGUqCitlcnJvcmZvcm1hdC1qYXZhYwlxdWlja2ZpeC50eHQJLyplcnJvcmZvcm1hdC1qYXZhYyoKK2Vycm9yZm9ybWF0LW11bHRpLWxpbmUJcXVpY2tmaXgudHh0CS8qZXJyb3Jmb3JtYXQtbXVsdGktbGluZSoKK2Vycm9yZm9ybWF0LXNlcGFyYXRlLWZpbGVuYW1lCXF1aWNrZml4LnR4dAkvKmVycm9yZm9ybWF0LXNlcGFyYXRlLWZpbGVuYW1lKgorZXJyb3Jmb3JtYXRzCXF1aWNrZml4LnR4dAkvKmVycm9yZm9ybWF0cyoKK2VzY2FwZQlpbnRyby50eHQJLyplc2NhcGUqCitlc2NhcGUoKQlldmFsLnR4dAkvKmVzY2FwZSgpKgorZXNjYXBlLWJhcgl2ZXJzaW9uNC50eHQJLyplc2NhcGUtYmFyKgorZXZhbAlldmFsLnR4dAkvKmV2YWwqCitldmFsLWV4YW1wbGVzCWV2YWwudHh0CS8qZXZhbC1leGFtcGxlcyoKK2V2YWwtc2FuZGJveAlldmFsLnR4dAkvKmV2YWwtc2FuZGJveCoKK2V2YWwudHh0CWV2YWwudHh0CS8qZXZhbC50eHQqCitldmVudGhhbmRsZXIoKQlldmFsLnR4dAkvKmV2ZW50aGFuZGxlcigpKgorZXZpZXcJc3RhcnRpbmcudHh0CS8qZXZpZXcqCitldmltCXN0YXJ0aW5nLnR4dAkvKmV2aW0qCitldmltLWtleXMJc3RhcnRpbmcudHh0CS8qZXZpbS1rZXlzKgorZXZpbS52aW0Jc3RhcnRpbmcudHh0CS8qZXZpbS52aW0qCitleAlzdGFydGluZy50eHQJLypleCoKK2V4LWNtZC1pbmRleAlpbmRleC50eHQJLypleC1jbWQtaW5kZXgqCitleC1lZGl0LWluZGV4CWluZGV4LnR4dAkvKmV4LWVkaXQtaW5kZXgqCitleDoJb3B0aW9ucy50eHQJLypleDoqCitleGNlcHQtYXV0b2NtZAlldmFsLnR4dAkvKmV4Y2VwdC1hdXRvY21kKgorZXhjZXB0LWF1dG9jbWQtQ21kCWV2YWwudHh0CS8qZXhjZXB0LWF1dG9jbWQtQ21kKgorZXhjZXB0LWF1dG9jbWQtUG9zdAlldmFsLnR4dAkvKmV4Y2VwdC1hdXRvY21kLVBvc3QqCitleGNlcHQtYXV0b2NtZC1QcmUJZXZhbC50eHQJLypleGNlcHQtYXV0b2NtZC1QcmUqCitleGNlcHQtYXV0b2NtZC1pbGwJZXZhbC50eHQJLypleGNlcHQtYXV0b2NtZC1pbGwqCitleGNlcHQtY29tcGF0CWV2YWwudHh0CS8qZXhjZXB0LWNvbXBhdCoKK2V4Y2VwdC1leGFtaW5lCWV2YWwudHh0CS8qZXhjZXB0LWV4YW1pbmUqCitleGNlcHQtZnJvbS1maW5hbGx5CWV2YWwudHh0CS8qZXhjZXB0LWZyb20tZmluYWxseSoKK2V4Y2VwdC1oaWVyLXBhcmFtCWV2YWwudHh0CS8qZXhjZXB0LWhpZXItcGFyYW0qCitleGNlcHQtc2V2ZXJhbC1lcnJvcnMJZXZhbC50eHQJLypleGNlcHQtc2V2ZXJhbC1lcnJvcnMqCitleGNlcHQtc2luZ2xlLWxpbmUJZXZhbC50eHQJLypleGNlcHQtc2luZ2xlLWxpbmUqCitleGNlcHQtc3ludGF4LWVycglldmFsLnR4dAkvKmV4Y2VwdC1zeW50YXgtZXJyKgorZXhjZXB0LXN5bnRheC1lcnJvcglldmFsLnR4dAkvKmV4Y2VwdC1zeW50YXgtZXJyb3IqCitleGNlcHRpb24taGFuZGxpbmcJZXZhbC50eHQJLypleGNlcHRpb24taGFuZGxpbmcqCitleGNlcHRpb24tdmFyaWFibGUJZXZhbC50eHQJLypleGNlcHRpb24tdmFyaWFibGUqCitleGNsdXNpdmUJbW90aW9uLnR4dAkvKmV4Y2x1c2l2ZSoKK2V4ZWN1dGFibGUoKQlldmFsLnR4dAkvKmV4ZWN1dGFibGUoKSoKK2V4ZWN1dGUtbWVudXMJZ3VpLnR4dAkvKmV4ZWN1dGUtbWVudXMqCitleGltCXN0YXJ0aW5nLnR4dAkvKmV4aW0qCitleGlzdHMoKQlldmFsLnR4dAkvKmV4aXN0cygpKgorZXhwYW5kKCkJZXZhbC50eHQJLypleHBhbmQoKSoKK2V4cGFuZC1lbnYJb3B0aW9ucy50eHQJLypleHBhbmQtZW52KgorZXhwYW5kLWVudmlyb25tZW50LXZhcglvcHRpb25zLnR4dAkvKmV4cGFuZC1lbnZpcm9ubWVudC12YXIqCitleHBsLXN0YXJ0aW5nCXBpX2V4cGwudHh0CS8qZXhwbC1zdGFydGluZyoKK2V4cGxvcmVyLWRlbGV0ZQlwaV9leHBsLnR4dAkvKmV4cGxvcmVyLWRlbGV0ZSoKK2V4cGxvcmVyLXJlbmFtZQlwaV9leHBsLnR4dAkvKmV4cGxvcmVyLXJlbmFtZSoKK2V4cHIJZXZhbC50eHQJLypleHByKgorZXhwci0hCWV2YWwudHh0CS8qZXhwci0hKgorZXhwci0hPQlldmFsLnR4dAkvKmV4cHItIT0qCitleHByLSE9IwlldmFsLnR4dAkvKmV4cHItIT0jKgorZXhwci0hPT8JZXZhbC50eHQJLypleHByLSE9PyoKK2V4cHItIX4JZXZhbC50eHQJLypleHByLSF+KgorZXhwci0hfiMJZXZhbC50eHQJLypleHByLSF+IyoKK2V4cHItIX4/CWV2YWwudHh0CS8qZXhwci0hfj8qCitleHByLSUJZXZhbC50eHQJLypleHByLSUqCitleHByLSYmCWV2YWwudHh0CS8qZXhwci0mJioKK2V4cHItJwlldmFsLnR4dAkvKmV4cHItJyoKK2V4cHItKwlldmFsLnR4dAkvKmV4cHItKyoKK2V4cHItLQlldmFsLnR4dAkvKmV4cHItLSoKK2V4cHItLglldmFsLnR4dAkvKmV4cHItLioKK2V4cHItLwlldmFsLnR4dAkvKmV4cHItXC8qCitleHByLTwJZXZhbC50eHQJLypleHByLTwqCitleHByLTwjCWV2YWwudHh0CS8qZXhwci08IyoKK2V4cHItPD0JZXZhbC50eHQJLypleHByLTw9KgorZXhwci08PSMJZXZhbC50eHQJLypleHByLTw9IyoKK2V4cHItPD0/CWV2YWwudHh0CS8qZXhwci08PT8qCitleHByLTw/CWV2YWwudHh0CS8qZXhwci08PyoKK2V4cHItPT0JZXZhbC50eHQJLypleHByLT09KgorZXhwci09PSMJZXZhbC50eHQJLypleHByLT09IyoKK2V4cHItPT0/CWV2YWwudHh0CS8qZXhwci09PT8qCitleHByLT1+CWV2YWwudHh0CS8qZXhwci09fioKK2V4cHItPX4jCWV2YWwudHh0CS8qZXhwci09fiMqCitleHByLT1+PwlldmFsLnR4dAkvKmV4cHItPX4/KgorZXhwci0+CWV2YWwudHh0CS8qZXhwci0+KgorZXhwci0+IwlldmFsLnR4dAkvKmV4cHItPiMqCitleHByLT49CWV2YWwudHh0CS8qZXhwci0+PSoKK2V4cHItPj0jCWV2YWwudHh0CS8qZXhwci0+PSMqCitleHByLT49PwlldmFsLnR4dAkvKmV4cHItPj0/KgorZXhwci0+PwlldmFsLnR4dAkvKmV4cHItPj8qCitleHByLVtdCWV2YWwudHh0CS8qZXhwci1bXSoKK2V4cHItYmFyYmFyCWV2YWwudHh0CS8qZXhwci1iYXJiYXIqCitleHByLWVudglldmFsLnR4dAkvKmV4cHItZW52KgorZXhwci1lbnYtZXhwYW5kCWV2YWwudHh0CS8qZXhwci1lbnYtZXhwYW5kKgorZXhwci1mdW5jdGlvbglldmFsLnR4dAkvKmV4cHItZnVuY3Rpb24qCitleHByLW5lc3RpbmcJZXZhbC50eHQJLypleHByLW5lc3RpbmcqCitleHByLW51bWJlcglldmFsLnR4dAkvKmV4cHItbnVtYmVyKgorZXhwci1vcHRpb24JZXZhbC50eHQJLypleHByLW9wdGlvbioKK2V4cHItcXVvdGUJZXZhbC50eHQJLypleHByLXF1b3RlKgorZXhwci1yZWdpc3RlcglldmFsLnR4dAkvKmV4cHItcmVnaXN0ZXIqCitleHByLXN0YXIJZXZhbC50eHQJLypleHByLXN0YXIqCitleHByLXN0cmluZwlldmFsLnR4dAkvKmV4cHItc3RyaW5nKgorZXhwci11bmFyeS0rCWV2YWwudHh0CS8qZXhwci11bmFyeS0rKgorZXhwci11bmFyeS0tCWV2YWwudHh0CS8qZXhwci11bmFyeS0tKgorZXhwci12YXJpYWJsZQlldmFsLnR4dAkvKmV4cHItdmFyaWFibGUqCitleHByMQlldmFsLnR4dAkvKmV4cHIxKgorZXhwcjIJZXZhbC50eHQJLypleHByMioKK2V4cHIzCWV2YWwudHh0CS8qZXhwcjMqCitleHByNAlldmFsLnR4dAkvKmV4cHI0KgorZXhwcjUJZXZhbC50eHQJLypleHByNSoKK2V4cHI2CWV2YWwudHh0CS8qZXhwcjYqCitleHByNwlldmFsLnR4dAkvKmV4cHI3KgorZXhwcjgJZXZhbC50eHQJLypleHByOCoKK2V4cHI5CWV2YWwudHh0CS8qZXhwcjkqCitleHByZXNzaW9uCWV2YWwudHh0CS8qZXhwcmVzc2lvbioKK2V4cHJlc3Npb24tY29tbWFuZHMJZXZhbC50eHQJLypleHByZXNzaW9uLWNvbW1hbmRzKgorZXhwcmVzc2lvbi1zeW50YXgJZXZhbC50eHQJLypleHByZXNzaW9uLXN5bnRheCoKK2V4cmMJc3RhcnRpbmcudHh0CS8qZXhyYyoKK2V4dGVuc2lvbi1yZW1vdmFsCWNtZGxpbmUudHh0CS8qZXh0ZW5zaW9uLXJlbW92YWwqCitleHRlbnNpb25zLWltcHJvdmVtZW50cwl0b2RvLnR4dAkvKmV4dGVuc2lvbnMtaW1wcm92ZW1lbnRzKgorZgltb3Rpb24udHh0CS8qZioKK2ZhcQlpbnRyby50eHQJLypmYXEqCitmYXJzaQlmYXJzaS50eHQJLypmYXJzaSoKK2ZhcnNpLnR4dAlmYXJzaS50eHQJLypmYXJzaS50eHQqCitmYXNtLnZpbQlzeW50YXgudHh0CS8qZmFzbS52aW0qCitmZWF0dXJlLWxpc3QJZXZhbC50eHQJLypmZWF0dXJlLWxpc3QqCitmZXRjaAlwaV9uZXRydy50eHQJLypmZXRjaCoKK2ZpbGUtYnJvd3NlcglwaV9leHBsLnR4dAkvKmZpbGUtYnJvd3NlcioKK2ZpbGUtYnJvd3Nlci01LjIJdmVyc2lvbjUudHh0CS8qZmlsZS1icm93c2VyLTUuMioKK2ZpbGUtZXhwbG9yZXIJcGlfZXhwbC50eHQJLypmaWxlLWV4cGxvcmVyKgorZmlsZS1mb3JtYXRzCWVkaXRpbmcudHh0CS8qZmlsZS1mb3JtYXRzKgorZmlsZS1wYXR0ZXJuCWF1dG9jbWQudHh0CS8qZmlsZS1wYXR0ZXJuKgorZmlsZS1yZWFkCWluc2VydC50eHQJLypmaWxlLXJlYWQqCitmaWxlLXNlYXJjaGluZwllZGl0aW5nLnR4dAkvKmZpbGUtc2VhcmNoaW5nKgorZmlsZS10eXBlCWZpbGV0eXBlLnR4dAkvKmZpbGUtdHlwZSoKK2ZpbGUtdHlwZXMJZmlsZXR5cGUudHh0CS8qZmlsZS10eXBlcyoKK2ZpbGVfcmVhZGFibGUoKQlldmFsLnR4dAkvKmZpbGVfcmVhZGFibGUoKSoKK2ZpbGVlbmNvZGluZy1jaGFuZ2VkCXZlcnNpb242LnR4dAkvKmZpbGVlbmNvZGluZy1jaGFuZ2VkKgorZmlsZW5hbWUtYmFja3NsYXNoCWNtZGxpbmUudHh0CS8qZmlsZW5hbWUtYmFja3NsYXNoKgorZmlsZW5hbWUtbW9kaWZpZXJzCWNtZGxpbmUudHh0CS8qZmlsZW5hbWUtbW9kaWZpZXJzKgorZmlsZXJlYWRhYmxlKCkJZXZhbC50eHQJLypmaWxlcmVhZGFibGUoKSoKK2ZpbGV0eXBlCWZpbGV0eXBlLnR4dAkvKmZpbGV0eXBlKgorZmlsZXR5cGUtZGV0ZWN0CWZpbGV0eXBlLnR4dAkvKmZpbGV0eXBlLWRldGVjdCoKK2ZpbGV0eXBlLWlnbm9yZQlmaWxldHlwZS50eHQJLypmaWxldHlwZS1pZ25vcmUqCitmaWxldHlwZS1vdmVycnVsZQlmaWxldHlwZS50eHQJLypmaWxldHlwZS1vdmVycnVsZSoKK2ZpbGV0eXBlLXBsdWdpbgl1c3JfNDMudHh0CS8qZmlsZXR5cGUtcGx1Z2luKgorZmlsZXR5cGUtcGx1Z2lucwlmaWxldHlwZS50eHQJLypmaWxldHlwZS1wbHVnaW5zKgorZmlsZXR5cGUudHh0CWZpbGV0eXBlLnR4dAkvKmZpbGV0eXBlLnR4dCoKK2ZpbGV0eXBlZGV0ZWN0LWNoYW5nZWQJdmVyc2lvbjYudHh0CS8qZmlsZXR5cGVkZXRlY3QtY2hhbmdlZCoKK2ZpbGV0eXBlcwlmaWxldHlwZS50eHQJLypmaWxldHlwZXMqCitmaWxld3JpdGFibGUoKQlldmFsLnR4dAkvKmZpbGV3cml0YWJsZSgpKgorZmlsdGVyCWNoYW5nZS50eHQJLypmaWx0ZXIqCitmaW5kLW1hbnBhZ2UJdXNyXzEyLnR4dAkvKmZpbmQtbWFucGFnZSoKK2ZpbmQtcmVwbGFjZQl1c3JfMTAudHh0CS8qZmluZC1yZXBsYWNlKgorZml4ZWQtNS4xCXZlcnNpb241LnR4dAkvKmZpeGVkLTUuMSoKK2ZpeGVkLTUuMgl2ZXJzaW9uNS50eHQJLypmaXhlZC01LjIqCitmaXhlZC01LjMJdmVyc2lvbjUudHh0CS8qZml4ZWQtNS4zKgorZml4ZWQtNS40CXZlcnNpb241LnR4dAkvKmZpeGVkLTUuNCoKK2ZpeGVkLTUuNQl2ZXJzaW9uNS50eHQJLypmaXhlZC01LjUqCitmaXhlZC01LjYJdmVyc2lvbjUudHh0CS8qZml4ZWQtNS42KgorZml4ZWQtNS43CXZlcnNpb241LnR4dAkvKmZpeGVkLTUuNyoKK2ZpeGVkLTUuOAl2ZXJzaW9uNS50eHQJLypmaXhlZC01LjgqCitmaXhlZC02LjEJdmVyc2lvbjYudHh0CS8qZml4ZWQtNi4xKgorZml4ZWQtNi4yCXZlcnNpb242LnR4dAkvKmZpeGVkLTYuMioKK2ZpeGVkLTYuMwl2ZXJzaW9uNi50eHQJLypmaXhlZC02LjMqCitmbmFtZV9kaWZmLXZhcmlhYmxlCWV2YWwudHh0CS8qZm5hbWVfZGlmZi12YXJpYWJsZSoKK2ZuYW1lX2luLXZhcmlhYmxlCWV2YWwudHh0CS8qZm5hbWVfaW4tdmFyaWFibGUqCitmbmFtZV9uZXctdmFyaWFibGUJZXZhbC50eHQJLypmbmFtZV9uZXctdmFyaWFibGUqCitmbmFtZV9vdXQtdmFyaWFibGUJZXZhbC50eHQJLypmbmFtZV9vdXQtdmFyaWFibGUqCitmbmFtZW1vZGlmeSgpCWV2YWwudHh0CS8qZm5hbWVtb2RpZnkoKSoKK2ZvLXRhYmxlCWNoYW5nZS50eHQJLypmby10YWJsZSoKK2ZvbGQtYmVoYXZpb3IJZm9sZC50eHQJLypmb2xkLWJlaGF2aW9yKgorZm9sZC1jb2xvcnMJZm9sZC50eHQJLypmb2xkLWNvbG9ycyoKK2ZvbGQtY29tbWFuZHMJZm9sZC50eHQJLypmb2xkLWNvbW1hbmRzKgorZm9sZC1jcmVhdGUtbWFya2VyCWZvbGQudHh0CS8qZm9sZC1jcmVhdGUtbWFya2VyKgorZm9sZC1kZWxldGUtbWFya2VyCWZvbGQudHh0CS8qZm9sZC1kZWxldGUtbWFya2VyKgorZm9sZC1kaWZmCWZvbGQudHh0CS8qZm9sZC1kaWZmKgorZm9sZC1leHByCWZvbGQudHh0CS8qZm9sZC1leHByKgorZm9sZC1mb2xkY29sdW1uCWZvbGQudHh0CS8qZm9sZC1mb2xkY29sdW1uKgorZm9sZC1mb2xkbGV2ZWwJZm9sZC50eHQJLypmb2xkLWZvbGRsZXZlbCoKK2ZvbGQtZm9sZHRleHQJZm9sZC50eHQJLypmb2xkLWZvbGR0ZXh0KgorZm9sZC1pbmRlbnQJZm9sZC50eHQJLypmb2xkLWluZGVudCoKK2ZvbGQtbWFudWFsCWZvbGQudHh0CS8qZm9sZC1tYW51YWwqCitmb2xkLW1hcmtlcglmb2xkLnR4dAkvKmZvbGQtbWFya2VyKgorZm9sZC1tZXRob2RzCWZvbGQudHh0CS8qZm9sZC1tZXRob2RzKgorZm9sZC1vcHRpb25zCWZvbGQudHh0CS8qZm9sZC1vcHRpb25zKgorZm9sZC1zeW50YXgJZm9sZC50eHQJLypmb2xkLXN5bnRheCoKK2ZvbGQudHh0CWZvbGQudHh0CS8qZm9sZC50eHQqCitmb2xkY2xvc2VkKCkJZXZhbC50eHQJLypmb2xkY2xvc2VkKCkqCitmb2xkY2xvc2VkZW5kKCkJZXZhbC50eHQJLypmb2xkY2xvc2VkZW5kKCkqCitmb2xkZGFzaGVzLXZhcmlhYmxlCWV2YWwudHh0CS8qZm9sZGRhc2hlcy12YXJpYWJsZSoKK2ZvbGRlbmQtdmFyaWFibGUJZXZhbC50eHQJLypmb2xkZW5kLXZhcmlhYmxlKgorZm9sZGluZwlmb2xkLnR4dAkvKmZvbGRpbmcqCitmb2xkbGV2ZWwoKQlldmFsLnR4dAkvKmZvbGRsZXZlbCgpKgorZm9sZGxldmVsLXZhcmlhYmxlCWV2YWwudHh0CS8qZm9sZGxldmVsLXZhcmlhYmxlKgorZm9sZHN0YXJ0LXZhcmlhYmxlCWV2YWwudHh0CS8qZm9sZHN0YXJ0LXZhcmlhYmxlKgorZm9sZHRleHQoKQlldmFsLnR4dAkvKmZvbGR0ZXh0KCkqCitmb250LXNpemVzCWd1aV94MTEudHh0CS8qZm9udC1zaXplcyoKK2ZvbnRzZXQJbWJ5dGUudHh0CS8qZm9udHNldCoKK2ZvcmVncm91bmQoKQlldmFsLnR4dAkvKmZvcmVncm91bmQoKSoKK2ZvcmsJb3NfdW5peC50eHQJLypmb3JrKgorZm9ybS1zeW50YXgJc3ludGF4LnR4dAkvKmZvcm0tc3ludGF4KgorZm9ybS52aW0Jc3ludGF4LnR4dAkvKmZvcm0udmltKgorZm9ybWF0LWJ1bGxldC1saXN0CXRpcHMudHh0CS8qZm9ybWF0LWJ1bGxldC1saXN0KgorZm9ybWF0LWNvbW1lbnRzCWNoYW5nZS50eHQJLypmb3JtYXQtY29tbWVudHMqCitmb3JtYXR0aW5nCWNoYW5nZS50eHQJLypmb3JtYXR0aW5nKgorZm9ybWZlZWQJaW50cm8udHh0CS8qZm9ybWZlZWQqCitmb3J0cmFuLWluZGVudAlpbmRlbnQudHh0CS8qZm9ydHJhbi1pbmRlbnQqCitmb3J0cmFuLXBsdWdpbglmaWxldHlwZS50eHQJLypmb3J0cmFuLXBsdWdpbioKK2ZvcnRyYW4tc3ludGF4CXN5bnRheC50eHQJLypmb3J0cmFuLXN5bnRheCoKK2ZvcnRyYW4udmltCXN5bnRheC50eHQJLypmb3J0cmFuLnZpbSoKK2ZyZW5jaC1tYWlsbGlzdAlpbnRyby50eHQJLypmcmVuY2gtbWFpbGxpc3QqCitmcm9tYm9vawl1c3JfMDEudHh0CS8qZnJvbWJvb2sqCitmdHAJcGlfbmV0cncudHh0CS8qZnRwKgorZnRwbHVnaW4JdXNyXzQxLnR4dAkvKmZ0cGx1Z2luKgorZnRwbHVnaW4tZG9jcwlmaWxldHlwZS50eHQJLypmdHBsdWdpbi1kb2NzKgorZnRwbHVnaW4tbmFtZQl1c3JfMDUudHh0CS8qZnRwbHVnaW4tbmFtZSoKK2Z0cGx1Z2luLW92ZXJydWxlCWZpbGV0eXBlLnR4dAkvKmZ0cGx1Z2luLW92ZXJydWxlKgorZnRwbHVnaW4tc3BlY2lhbAl1c3JfNDEudHh0CS8qZnRwbHVnaW4tc3BlY2lhbCoKK2Z0cGx1Z2lucwl1c3JfMDUudHh0CS8qZnRwbHVnaW5zKgorZnVuY3Rpb24tYXJndW1lbnQJZXZhbC50eHQJLypmdW5jdGlvbi1hcmd1bWVudCoKK2Z1bmN0aW9uLWtleQlpbnRyby50eHQJLypmdW5jdGlvbi1rZXkqCitmdW5jdGlvbi1saXN0CXVzcl80MS50eHQJLypmdW5jdGlvbi1saXN0KgorZnVuY3Rpb24tcmFuZ2UtZXhhbXBsZQlldmFsLnR4dAkvKmZ1bmN0aW9uLXJhbmdlLWV4YW1wbGUqCitmdW5jdGlvbl9rZXkJaW50cm8udHh0CS8qZnVuY3Rpb25fa2V5KgorZnVuY3Rpb25zCWV2YWwudHh0CS8qZnVuY3Rpb25zKgorZnZ3bS1zeW50YXgJc3ludGF4LnR4dAkvKmZ2d20tc3ludGF4KgorZnZ3bS52aW0Jc3ludGF4LnR4dAkvKmZ2d20udmltKgorZnZ3bTJyYwlzeW50YXgudHh0CS8qZnZ3bTJyYyoKK2Z2d21yYwlzeW50YXgudHh0CS8qZnZ3bXJjKgorZwlpbmRleC50eHQJLypnKgorZyMJcGF0dGVybi50eHQJLypnIyoKK2ckCW1vdGlvbi50eHQJLypnJCoKK2cmCWNoYW5nZS50eHQJLypnJioKK2cnCW1vdGlvbi50eHQJLypnJyoKK2cnYQltb3Rpb24udHh0CS8qZydhKgorZywJbW90aW9uLnR4dAkvKmcsKgorZzAJbW90aW9uLnR4dAkvKmcwKgorZzgJdmFyaW91cy50eHQJLypnOCoKK2c6ZXhwbERhdGVGb3JtYXQJcGlfZXhwbC50eHQJLypnOmV4cGxEYXRlRm9ybWF0KgorZzpleHBsRGV0YWlsZWRIZWxwCXBpX2V4cGwudHh0CS8qZzpleHBsRGV0YWlsZWRIZWxwKgorZzpleHBsRGV0YWlsZWRMaXN0CXBpX2V4cGwudHh0CS8qZzpleHBsRGV0YWlsZWRMaXN0KgorZzpleHBsRGlyc0ZpcnN0CXBpX2V4cGwudHh0CS8qZzpleHBsRGlyc0ZpcnN0KgorZzpleHBsRmlsZUhhbmRsZXIJcGlfZXhwbC50eHQJLypnOmV4cGxGaWxlSGFuZGxlcioKK2c6ZXhwbEhpZGVGaWxlcwlwaV9leHBsLnR4dAkvKmc6ZXhwbEhpZGVGaWxlcyoKK2c6ZXhwbFNvcnRCeQlwaV9leHBsLnR4dAkvKmc6ZXhwbFNvcnRCeSoKK2c6ZXhwbFNwbGl0QmVsb3cJcGlfZXhwbC50eHQJLypnOmV4cGxTcGxpdEJlbG93KgorZzpleHBsU3BsaXRSaWdodAlwaV9leHBsLnR4dAkvKmc6ZXhwbFNwbGl0UmlnaHQqCitnOmV4cGxTdGFydEJlbG93CXBpX2V4cGwudHh0CS8qZzpleHBsU3RhcnRCZWxvdyoKK2c6ZXhwbFN0YXJ0UmlnaHQJcGlfZXhwbC50eHQJLypnOmV4cGxTdGFydFJpZ2h0KgorZzpleHBsU3VmZml4ZXNMYXN0CXBpX2V4cGwudHh0CS8qZzpleHBsU3VmZml4ZXNMYXN0KgorZzpleHBsVXNlU2VwYXJhdG9ycwlwaV9leHBsLnR4dAkvKmc6ZXhwbFVzZVNlcGFyYXRvcnMqCitnOmV4cGxWZXJ0aWNhbAlwaV9leHBsLnR4dAkvKmc6ZXhwbFZlcnRpY2FsKgorZzpleHBsV2luU2l6ZQlwaV9leHBsLnR4dAkvKmc6ZXhwbFdpblNpemUqCitnOnZhcglldmFsLnR4dAkvKmc6dmFyKgorZzsJbW90aW9uLnR4dAkvKmc7KgorZzxEb3duPgltb3Rpb24udHh0CS8qZzxEb3duPioKK2c8RW5kPgltb3Rpb24udHh0CS8qZzxFbmQ+KgorZzxIb21lPgltb3Rpb24udHh0CS8qZzxIb21lPioKK2c8TGVmdE1vdXNlPgl0YWdzcmNoLnR4dAkvKmc8TGVmdE1vdXNlPioKK2c8UmlnaHRNb3VzZT4JdGFnc3JjaC50eHQJLypnPFJpZ2h0TW91c2U+KgorZzxVcD4JbW90aW9uLnR4dAkvKmc8VXA+KgorZz8JY2hhbmdlLnR4dAkvKmc/KgorZz8/CWNoYW5nZS50eHQJLypnPz8qCitnP2c/CWNoYW5nZS50eHQJLypnP2c/KgorZ0QJcGF0dGVybi50eHQJLypnRCoKK2dFCW1vdGlvbi50eHQJLypnRSoKK2dICXZpc3VhbC50eHQJLypnSCoKK2dJCWluc2VydC50eHQJLypnSSoKK2dKCWNoYW5nZS50eHQJLypnSioKK2dQCWNoYW5nZS50eHQJLypnUCoKK2dRCWludHJvLnR4dAkvKmdRKgorZ1IJY2hhbmdlLnR4dAkvKmdSKgorZ1UJY2hhbmdlLnR4dAkvKmdVKgorZ1VVCWNoYW5nZS50eHQJLypnVVUqCitnVWdVCWNoYW5nZS50eHQJLypnVWdVKgorZ1YJdmlzdWFsLnR4dAkvKmdWKgorZ10JdGFnc3JjaC50eHQJLypnXSoKK2deCW1vdGlvbi50eHQJLypnXioKK2dfCW1vdGlvbi50eHQJLypnXyoKK2dfQ1RSTC1BCXZhcmlvdXMudHh0CS8qZ19DVFJMLUEqCitnX0NUUkwtRwllZGl0aW5nLnR4dAkvKmdfQ1RSTC1HKgorZ19DVFJMLUgJdmlzdWFsLnR4dAkvKmdfQ1RSTC1IKgorZ19DVFJMLV0JdGFnc3JjaC50eHQJLypnX0NUUkwtXSoKK2dgCW1vdGlvbi50eHQJLypnYCoKK2dgYQltb3Rpb24udHh0CS8qZ2BhKgorZ2EJdmFyaW91cy50eHQJLypnYSoKK2dkCXBhdHRlcm4udHh0CS8qZ2QqCitnZQltb3Rpb24udHh0CS8qZ2UqCitnZXRidWZ2YXIoKQlldmFsLnR4dAkvKmdldGJ1ZnZhcigpKgorZ2V0Y2hhcigpCWV2YWwudHh0CS8qZ2V0Y2hhcigpKgorZ2V0Y2hhcm1vZCgpCWV2YWwudHh0CS8qZ2V0Y2hhcm1vZCgpKgorZ2V0Y21kbGluZSgpCWV2YWwudHh0CS8qZ2V0Y21kbGluZSgpKgorZ2V0Y21kcG9zKCkJZXZhbC50eHQJLypnZXRjbWRwb3MoKSoKK2dldGN3ZCgpCWV2YWwudHh0CS8qZ2V0Y3dkKCkqCitnZXRmc2l6ZSgpCWV2YWwudHh0CS8qZ2V0ZnNpemUoKSoKK2dldGZ0aW1lKCkJZXZhbC50eHQJLypnZXRmdGltZSgpKgorZ2V0bGluZSgpCWV2YWwudHh0CS8qZ2V0bGluZSgpKgorZ2V0cmVnKCkJZXZhbC50eHQJLypnZXRyZWcoKSoKK2dldHJlZ3R5cGUoKQlldmFsLnR4dAkvKmdldHJlZ3R5cGUoKSoKK2dldHdpbnBvc3goKQlldmFsLnR4dAkvKmdldHdpbnBvc3goKSoKK2dldHdpbnBvc3koKQlldmFsLnR4dAkvKmdldHdpbnBvc3koKSoKK2dldHdpbnZhcigpCWV2YWwudHh0CS8qZ2V0d2ludmFyKCkqCitnZXgJc3RhcnRpbmcudHh0CS8qZ2V4KgorZ2YJZWRpdGluZy50eHQJLypnZioKK2dnCW1vdGlvbi50eHQJLypnZyoKK2doCXZpc3VhbC50eHQJLypnaCoKK2dpCWluc2VydC50eHQJLypnaSoKK2dqCW1vdGlvbi50eHQJLypnaioKK2drCW1vdGlvbi50eHQJLypnayoKK2dsb2IoKQlldmFsLnR4dAkvKmdsb2IoKSoKK2dsb2JhbC1pbWUJbWJ5dGUudHh0CS8qZ2xvYmFsLWltZSoKK2dsb2JhbC1sb2NhbAlvcHRpb25zLnR4dAkvKmdsb2JhbC1sb2NhbCoKK2dsb2JhbC12YXJpYWJsZQlldmFsLnR4dAkvKmdsb2JhbC12YXJpYWJsZSoKK2dsb2JwYXRoKCkJZXZhbC50eHQJLypnbG9icGF0aCgpKgorZ20JbW90aW9uLnR4dAkvKmdtKgorZ25vbWUtc2Vzc2lvbglndWlfeDExLnR4dAkvKmdub21lLXNlc3Npb24qCitnbwltb3Rpb24udHh0CS8qZ28qCitncAljaGFuZ2UudHh0CS8qZ3AqCitncG0tbW91c2UJdGVybS50eHQJLypncG0tbW91c2UqCitncQljaGFuZ2UudHh0CS8qZ3EqCitncWFwCWNoYW5nZS50eHQJLypncWFwKgorZ3FncQljaGFuZ2UudHh0CS8qZ3FncSoKK2dxcQljaGFuZ2UudHh0CS8qZ3FxKgorZ3IJY2hhbmdlLnR4dAkvKmdyKgorZ3JhcGhpYy1vcHRpb24tZ29uZQl2ZXJzaW9uNC50eHQJLypncmFwaGljLW9wdGlvbi1nb25lKgorZ3JlZWsJb3B0aW9ucy50eHQJLypncmVlayoKK2dyZXAJcXVpY2tmaXgudHh0CS8qZ3JlcCoKK2dyb2ZmLXN5bnRheAlzeW50YXgudHh0CS8qZ3JvZmYtc3ludGF4KgorZ3JvZmYudmltCXN5bnRheC50eHQJLypncm9mZi52aW0qCitncm91cC1uYW1lCXN5bnRheC50eHQJLypncm91cC1uYW1lKgorZ3MJdmFyaW91cy50eHQJLypncyoKK2dzcC52aW0Jc3ludGF4LnR4dAkvKmdzcC52aW0qCitnc3RhcglwYXR0ZXJuLnR4dAkvKmdzdGFyKgorZ3RrLXRvb2x0aXAtY29sb3JzCWd1aV94MTEudHh0CS8qZ3RrLXRvb2x0aXAtY29sb3JzKgorZ3UJY2hhbmdlLnR4dAkvKmd1KgorZ3VndQljaGFuZ2UudHh0CS8qZ3VndSoKK2d1aQlndWkudHh0CS8qZ3VpKgorZ3VpLWNsaXBib2FyZAlndWlfdzMyLnR4dAkvKmd1aS1jbGlwYm9hcmQqCitndWktY29sb3JzCXN5bnRheC50eHQJLypndWktY29sb3JzKgorZ3VpLWV4dHJhcwlndWkudHh0CS8qZ3VpLWV4dHJhcyoKK2d1aS1mb290ZXIJZGVidWdnZXIudHh0CS8qZ3VpLWZvb3RlcioKK2d1aS1mb3JrCWd1aV94MTEudHh0CS8qZ3VpLWZvcmsqCitndWktZ25vbWUJZ3VpX3gxMS50eHQJLypndWktZ25vbWUqCitndWktZ25vbWUtc2Vzc2lvbglndWlfeDExLnR4dAkvKmd1aS1nbm9tZS1zZXNzaW9uKgorZ3VpLWd0awlndWlfeDExLnR4dAkvKmd1aS1ndGsqCitndWktZ3RrLXNvY2tldGlkCWd1aV94MTEudHh0CS8qZ3VpLWd0ay1zb2NrZXRpZCoKK2d1aS1ob3Jpei1zY3JvbGwJZ3VpLnR4dAkvKmd1aS1ob3Jpei1zY3JvbGwqCitndWktaW5pdAlndWkudHh0CS8qZ3VpLWluaXQqCitndWktbW91c2UJZ3VpLnR4dAkvKmd1aS1tb3VzZSoKK2d1aS1tb3VzZS1mb2N1cwlndWkudHh0CS8qZ3VpLW1vdXNlLWZvY3VzKgorZ3VpLW1vdXNlLW1hcHBpbmcJZ3VpLnR4dAkvKmd1aS1tb3VzZS1tYXBwaW5nKgorZ3VpLW1vdXNlLW1vZGVsZXNzCWd1aS50eHQJLypndWktbW91c2UtbW9kZWxlc3MqCitndWktbW91c2UtbW92ZQlndWkudHh0CS8qZ3VpLW1vdXNlLW1vdmUqCitndWktbW91c2Utc2VsZWN0CWd1aS50eHQJLypndWktbW91c2Utc2VsZWN0KgorZ3VpLW1vdXNlLXN0YXR1cwlndWkudHh0CS8qZ3VpLW1vdXNlLXN0YXR1cyoKK2d1aS1tb3VzZS12YXJpb3VzCWd1aS50eHQJLypndWktbW91c2UtdmFyaW91cyoKK2d1aS1wdHkJZ3VpX3gxMS50eHQJLypndWktcHR5KgorZ3VpLXB0eS1lcmFzZQlndWlfeDExLnR4dAkvKmd1aS1wdHktZXJhc2UqCitndWktcmVzb3VyY2VzCWd1aV94MTEudHh0CS8qZ3VpLXJlc291cmNlcyoKK2d1aS1zY3JvbGxiYXJzCWd1aS50eHQJLypndWktc2Nyb2xsYmFycyoKK2d1aS1zZWxlY3Rpb25zCWd1aS50eHQJLypndWktc2VsZWN0aW9ucyoKK2d1aS1zaGVsbAlndWkudHh0CS8qZ3VpLXNoZWxsKgorZ3VpLXNoZWxsLXdpbjMyCWd1aV93MzIudHh0CS8qZ3VpLXNoZWxsLXdpbjMyKgorZ3VpLXN0YXJ0CWd1aS50eHQJLypndWktc3RhcnQqCitndWktdG9vbGJhcglndWkudHh0CS8qZ3VpLXRvb2xiYXIqCitndWktdmVydC1zY3JvbGwJZ3VpLnR4dAkvKmd1aS12ZXJ0LXNjcm9sbCoKK2d1aS13MTYJZ3VpX3cxNi50eHQJLypndWktdzE2KgorZ3VpLXczMglndWlfdzMyLnR4dAkvKmd1aS13MzIqCitndWktdzMyLWNtZGFyZ3MJZ3VpX3czMi50eHQJLypndWktdzMyLWNtZGFyZ3MqCitndWktdzMyLWRpYWxvZ3MJZ3VpX3czMi50eHQJLypndWktdzMyLWRpYWxvZ3MqCitndWktdzMyLXByaW50aW5nCWd1aV93MzIudHh0CS8qZ3VpLXczMi1wcmludGluZyoKK2d1aS13MzItc3RhcnQJZ3VpX3czMi50eHQJLypndWktdzMyLXN0YXJ0KgorZ3VpLXczMi12YXJpb3VzCWd1aV93MzIudHh0CS8qZ3VpLXczMi12YXJpb3VzKgorZ3VpLXczMnMJZ3VpX3czMi50eHQJLypndWktdzMycyoKK2d1aS13aW4zMi1tYXhpbWl6ZWQJZ3VpX3czMi50eHQJLypndWktd2luMzItbWF4aW1pemVkKgorZ3VpLXgxMQlndWlfeDExLnR4dAkvKmd1aS14MTEqCitndWkteDExLWF0aGVuYQlndWlfeDExLnR4dAkvKmd1aS14MTEtYXRoZW5hKgorZ3VpLXgxMS1jb21waWxpbmcJZ3VpX3gxMS50eHQJLypndWkteDExLWNvbXBpbGluZyoKK2d1aS14MTEtZ3RrCWd1aV94MTEudHh0CS8qZ3VpLXgxMS1ndGsqCitndWkteDExLW1pc2MJZ3VpX3gxMS50eHQJLypndWkteDExLW1pc2MqCitndWkteDExLW1vdGlmCWd1aV94MTEudHh0CS8qZ3VpLXgxMS1tb3RpZioKK2d1aS14MTEtbmVYdGF3CWd1aV94MTEudHh0CS8qZ3VpLXgxMS1uZVh0YXcqCitndWkteDExLXByaW50aW5nCWd1aV94MTEudHh0CS8qZ3VpLXgxMS1wcmludGluZyoKK2d1aS14MTEtc3RhcnQJZ3VpX3gxMS50eHQJLypndWkteDExLXN0YXJ0KgorZ3VpLXgxMS12YXJpb3VzCWd1aV94MTEudHh0CS8qZ3VpLXgxMS12YXJpb3VzKgorZ3VpLnR4dAlndWkudHh0CS8qZ3VpLnR4dCoKK2d1aV93MTYudHh0CWd1aV93MTYudHh0CS8qZ3VpX3cxNi50eHQqCitndWlfdzMyLnR4dAlndWlfdzMyLnR4dAkvKmd1aV93MzIudHh0KgorZ3VpX3gxMS50eHQJZ3VpX3gxMS50eHQJLypndWlfeDExLnR4dCoKK2d1aWZvbnR3aWRlX2d0azIJb3B0aW9ucy50eHQJLypndWlmb250d2lkZV9ndGsyKgorZ3Vpb3B0aW9uc19hCW9wdGlvbnMudHh0CS8qZ3Vpb3B0aW9uc19hKgorZ3V1CWNoYW5nZS50eHQJLypndXUqCitndgl2aXN1YWwudHh0CS8qZ3YqCitndmlldwlzdGFydGluZy50eHQJLypndmlldyoKK2d2aW0Jc3RhcnRpbmcudHh0CS8qZ3ZpbSoKK2d2aW1kaWZmCWRpZmYudHh0CS8qZ3ZpbWRpZmYqCitndmltcmMJZ3VpLnR4dAkvKmd2aW1yYyoKK2d3CWNoYW5nZS50eHQJLypndyoKK2d6aXAJcGlfZ3ppcC50eHQJLypnemlwKgorZ3ppcC1hdXRvY21kCXBpX2d6aXAudHh0CS8qZ3ppcC1hdXRvY21kKgorZ3ppcC1leGFtcGxlCWF1dG9jbWQudHh0CS8qZ3ppcC1leGFtcGxlKgorZ3ppcC1oZWxwZmlsZQl0aXBzLnR4dAkvKmd6aXAtaGVscGZpbGUqCitnfgljaGFuZ2UudHh0CS8qZ34qCitnfmd+CWNoYW5nZS50eHQJLypnfmd+KgorZ35+CWNoYW5nZS50eHQJLypnfn4qCitoCW1vdGlvbi50eHQJLypoKgoraGFuZ3VsCWhhbmd1bGluLnR4dAkvKmhhbmd1bCoKK2hhbmd1bGluLnR4dAloYW5ndWxpbi50eHQJLypoYW5ndWxpbi50eHQqCitoYXMoKQlldmFsLnR4dAkvKmhhcygpKgoraGFzLXBhdGNoCWV2YWwudHh0CS8qaGFzLXBhdGNoKgoraGFza2VsbC1zeW50YXgJc3ludGF4LnR4dAkvKmhhc2tlbGwtc3ludGF4KgoraGFza2VsbC52aW0Jc3ludGF4LnR4dAkvKmhhc2tlbGwudmltKgoraGFzbWFwdG8oKQlldmFsLnR4dAkvKmhhc21hcHRvKCkqCitoZWJyZXcJaGVicmV3LnR4dAkvKmhlYnJldyoKK2hlYnJldy50eHQJaGVicmV3LnR4dAkvKmhlYnJldy50eHQqCitoZWxwCXZhcmlvdXMudHh0CS8qaGVscCoKK2hlbHAtY29udGV4dAloZWxwLnR4dAkvKmhlbHAtY29udGV4dCoKK2hlbHAtdGFncwl0YWdzCTEKK2hlbHAtdHJhbnNsYXRlZAl2YXJpb3VzLnR4dAkvKmhlbHAtdHJhbnNsYXRlZCoKK2hlbHAteHRlcm0td2luZG93CXZhcmlvdXMudHh0CS8qaGVscC14dGVybS13aW5kb3cqCitoZWxwLnR4dAloZWxwLnR4dAkvKmhlbHAudHh0KgoraGV4LWVkaXRpbmcJdGlwcy50eHQJLypoZXgtZWRpdGluZyoKK2hpZGRlbi1idWZmZXIJd2luZG93cy50eHQJLypoaWRkZW4tYnVmZmVyKgoraGlkZGVuLWNoYW5nZWQJdmVyc2lvbjUudHh0CS8qaGlkZGVuLWNoYW5nZWQqCitoaWRkZW4tbWVudXMJZ3VpLnR4dAkvKmhpZGRlbi1tZW51cyoKK2hpZGRlbi1xdWl0CXdpbmRvd3MudHh0CS8qaGlkZGVuLXF1aXQqCitoaWdobGlnaHQtYXJncwlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LWFyZ3MqCitoaWdobGlnaHQtY2hhbmdlZAl2ZXJzaW9uNC50eHQJLypoaWdobGlnaHQtY2hhbmdlZCoKK2hpZ2hsaWdodC1jdGVybQlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LWN0ZXJtKgoraGlnaGxpZ2h0LWN0ZXJtYmcJc3ludGF4LnR4dAkvKmhpZ2hsaWdodC1jdGVybWJnKgoraGlnaGxpZ2h0LWN0ZXJtZmcJc3ludGF4LnR4dAkvKmhpZ2hsaWdodC1jdGVybWZnKgoraGlnaGxpZ2h0LWRlZmF1bHQJc3ludGF4LnR4dAkvKmhpZ2hsaWdodC1kZWZhdWx0KgoraGlnaGxpZ2h0LWZvbnQJc3ludGF4LnR4dAkvKmhpZ2hsaWdodC1mb250KgoraGlnaGxpZ2h0LWdyb3VwcwlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LWdyb3VwcyoKK2hpZ2hsaWdodC1ndWkJc3ludGF4LnR4dAkvKmhpZ2hsaWdodC1ndWkqCitoaWdobGlnaHQtZ3VpYmcJc3ludGF4LnR4dAkvKmhpZ2hsaWdodC1ndWliZyoKK2hpZ2hsaWdodC1ndWlmZwlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LWd1aWZnKgoraGlnaGxpZ2h0LXN0YXJ0CXN5bnRheC50eHQJLypoaWdobGlnaHQtc3RhcnQqCitoaWdobGlnaHQtc3RvcAlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LXN0b3AqCitoaWdobGlnaHQtdGVybQlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LXRlcm0qCitoaWdobGlnaHRJRCgpCWV2YWwudHh0CS8qaGlnaGxpZ2h0SUQoKSoKK2hpZ2hsaWdodF9leGlzdHMoKQlldmFsLnR4dAkvKmhpZ2hsaWdodF9leGlzdHMoKSoKK2hpcwljbWRsaW5lLnR4dAkvKmhpcyoKK2hpc3QtbmFtZXMJZXZhbC50eHQJLypoaXN0LW5hbWVzKgoraGlzdGFkZCgpCWV2YWwudHh0CS8qaGlzdGFkZCgpKgoraGlzdGRlbCgpCWV2YWwudHh0CS8qaGlzdGRlbCgpKgoraGlzdGdldCgpCWV2YWwudHh0CS8qaGlzdGdldCgpKgoraGlzdG5yKCkJZXZhbC50eHQJLypoaXN0bnIoKSoKK2hpc3RvcnkJY21kbGluZS50eHQJLypoaXN0b3J5KgoraGl0LWVudGVyCW1lc3NhZ2UudHh0CS8qaGl0LWVudGVyKgoraGl0LXJldHVybgltZXNzYWdlLnR4dAkvKmhpdC1yZXR1cm4qCitoaXRlc3QudmltCXN5bnRheC50eHQJLypoaXRlc3QudmltKgoraGprbAl1c3JfMDIudHh0CS8qaGprbCoKK2hsLUN1cnNvcglzeW50YXgudHh0CS8qaGwtQ3Vyc29yKgoraGwtQ3Vyc29ySU0Jc3ludGF4LnR4dAkvKmhsLUN1cnNvcklNKgoraGwtRGlmZkFkZAlzeW50YXgudHh0CS8qaGwtRGlmZkFkZCoKK2hsLURpZmZDaGFuZ2UJc3ludGF4LnR4dAkvKmhsLURpZmZDaGFuZ2UqCitobC1EaWZmRGVsZXRlCXN5bnRheC50eHQJLypobC1EaWZmRGVsZXRlKgoraGwtRGlmZlRleHQJc3ludGF4LnR4dAkvKmhsLURpZmZUZXh0KgoraGwtRGlyZWN0b3J5CXN5bnRheC50eHQJLypobC1EaXJlY3RvcnkqCitobC1FcnJvck1zZwlzeW50YXgudHh0CS8qaGwtRXJyb3JNc2cqCitobC1Gb2xkQ29sdW1uCXN5bnRheC50eHQJLypobC1Gb2xkQ29sdW1uKgoraGwtRm9sZGVkCXN5bnRheC50eHQJLypobC1Gb2xkZWQqCitobC1JbmNTZWFyY2gJc3ludGF4LnR4dAkvKmhsLUluY1NlYXJjaCoKK2hsLUxpbmVOcglzeW50YXgudHh0CS8qaGwtTGluZU5yKgoraGwtTWVudQlzeW50YXgudHh0CS8qaGwtTWVudSoKK2hsLU1vZGVNc2cJc3ludGF4LnR4dAkvKmhsLU1vZGVNc2cqCitobC1Nb3JlTXNnCXN5bnRheC50eHQJLypobC1Nb3JlTXNnKgoraGwtTm9uVGV4dAlzeW50YXgudHh0CS8qaGwtTm9uVGV4dCoKK2hsLU5vcm1hbAlzeW50YXgudHh0CS8qaGwtTm9ybWFsKgoraGwtUXVlc3Rpb24Jc3ludGF4LnR4dAkvKmhsLVF1ZXN0aW9uKgoraGwtU2Nyb2xsYmFyCXN5bnRheC50eHQJLypobC1TY3JvbGxiYXIqCitobC1TZWFyY2gJc3ludGF4LnR4dAkvKmhsLVNlYXJjaCoKK2hsLVNpZ25Db2x1bW4Jc3ludGF4LnR4dAkvKmhsLVNpZ25Db2x1bW4qCitobC1TcGVjaWFsS2V5CXN5bnRheC50eHQJLypobC1TcGVjaWFsS2V5KgoraGwtU3RhdHVzTGluZQlzeW50YXgudHh0CS8qaGwtU3RhdHVzTGluZSoKK2hsLVN0YXR1c0xpbmVOQwlzeW50YXgudHh0CS8qaGwtU3RhdHVzTGluZU5DKgoraGwtVGl0bGUJc3ludGF4LnR4dAkvKmhsLVRpdGxlKgoraGwtVG9vbHRpcAlzeW50YXgudHh0CS8qaGwtVG9vbHRpcCoKK2hsLVVzZXIxCXN5bnRheC50eHQJLypobC1Vc2VyMSoKK2hsLVVzZXIxLi45CXN5bnRheC50eHQJLypobC1Vc2VyMS4uOSoKK2hsLVZlcnRTcGxpdAlzeW50YXgudHh0CS8qaGwtVmVydFNwbGl0KgoraGwtVmlzdWFsCXN5bnRheC50eHQJLypobC1WaXN1YWwqCitobC1WaXN1YWxOT1MJc3ludGF4LnR4dAkvKmhsLVZpc3VhbE5PUyoKK2hsLVdhcm5pbmdNc2cJc3ludGF4LnR4dAkvKmhsLVdhcm5pbmdNc2cqCitobC1XaWxkTWVudQlzeW50YXgudHh0CS8qaGwtV2lsZE1lbnUqCitobElEKCkJZXZhbC50eHQJLypobElEKCkqCitobGV4aXN0cygpCWV2YWwudHh0CS8qaGxleGlzdHMoKSoKK2hvbHktZ3JhaWwJaW5kZXgudHh0CS8qaG9seS1ncmFpbCoKK2hvbWUJaW50cm8udHh0CS8qaG9tZSoKK2hvbWUtcmVwbGFjZQllZGl0aW5nLnR4dAkvKmhvbWUtcmVwbGFjZSoKK2hvc3RuYW1lKCkJZXZhbC50eHQJLypob3N0bmFtZSgpKgoraG93LWRvLWkJaG93dG8udHh0CS8qaG93LWRvLWkqCitob3ctdG8JaG93dG8udHh0CS8qaG93LXRvKgoraG93ZG9pCWhvd3RvLnR4dAkvKmhvd2RvaSoKK2hvd3RvCWhvd3RvLnR4dAkvKmhvd3RvKgoraG93dG8udHh0CWhvd3RvLnR4dAkvKmhvd3RvLnR4dCoKK2hwdGVybQl0ZXJtLnR4dAkvKmhwdGVybSoKK2hwdGVybS1jb2xvcglzeW50YXgudHh0CS8qaHB0ZXJtLWNvbG9yKgoraHRtbC1zeW50YXgJc3ludGF4LnR4dAkvKmh0bWwtc3ludGF4KgoraHRtbC52aW0Jc3ludGF4LnR4dAkvKmh0bWwudmltKgoraHRtbG9zLXN5bnRheAlzeW50YXgudHh0CS8qaHRtbG9zLXN5bnRheCoKK2h0bWxvcy52aW0Jc3ludGF4LnR4dAkvKmh0bWxvcy52aW0qCitodHRwCXBpX25ldHJ3LnR4dAkvKmh0dHAqCitpCWluc2VydC50eHQJLyppKgoraSgJbW90aW9uLnR4dAkvKmkoKgoraSkJbW90aW9uLnR4dAkvKmkpKgoraTwJbW90aW9uLnR4dAkvKmk8KgoraT4JbW90aW9uLnR4dAkvKmk+KgoraUIJbW90aW9uLnR4dAkvKmlCKgoraVcJbW90aW9uLnR4dAkvKmlXKgoraVsJbW90aW9uLnR4dAkvKmlbKgoraV0JbW90aW9uLnR4dAkvKmldKgoraV8wX0NUUkwtRAlpbnNlcnQudHh0CS8qaV8wX0NUUkwtRCoKK2lfPEJTPglpbnNlcnQudHh0CS8qaV88QlM+KgoraV88Qy1FbmQ+CWluc2VydC50eHQJLyppXzxDLUVuZD4qCitpXzxDLUhvbWU+CWluc2VydC50eHQJLyppXzxDLUhvbWU+KgoraV88Qy1MZWZ0PglpbnNlcnQudHh0CS8qaV88Qy1MZWZ0PioKK2lfPEMtUmlnaHQ+CWluc2VydC50eHQJLyppXzxDLVJpZ2h0PioKK2lfPENSPglpbnNlcnQudHh0CS8qaV88Q1I+KgoraV88RGVsPglpbnNlcnQudHh0CS8qaV88RGVsPioKK2lfPERvd24+CWluc2VydC50eHQJLyppXzxEb3duPioKK2lfPEVuZD4JaW5zZXJ0LnR4dAkvKmlfPEVuZD4qCitpXzxFc2M+CWluc2VydC50eHQJLyppXzxFc2M+KgoraV88RjE+CXZhcmlvdXMudHh0CS8qaV88RjE+KgoraV88SGVscD4JdmFyaW91cy50eHQJLyppXzxIZWxwPioKK2lfPEhvbWU+CWluc2VydC50eHQJLyppXzxIb21lPioKK2lfPEluc2VydD4JaW5zZXJ0LnR4dAkvKmlfPEluc2VydD4qCitpXzxMZWZ0PglpbnNlcnQudHh0CS8qaV88TGVmdD4qCitpXzxMZWZ0TW91c2U+CWluc2VydC50eHQJLyppXzxMZWZ0TW91c2U+KgoraV88TW91c2VEb3duPglpbnNlcnQudHh0CS8qaV88TW91c2VEb3duPioKK2lfPE1vdXNlVXA+CWluc2VydC50eHQJLyppXzxNb3VzZVVwPioKK2lfPE5MPglpbnNlcnQudHh0CS8qaV88Tkw+KgoraV88UGFnZURvd24+CWluc2VydC50eHQJLyppXzxQYWdlRG93bj4qCitpXzxQYWdlVXA+CWluc2VydC50eHQJLyppXzxQYWdlVXA+KgoraV88UmlnaHQ+CWluc2VydC50eHQJLyppXzxSaWdodD4qCitpXzxTLURvd24+CWluc2VydC50eHQJLyppXzxTLURvd24+KgoraV88Uy1MZWZ0PglpbnNlcnQudHh0CS8qaV88Uy1MZWZ0PioKK2lfPFMtTW91c2VEb3duPglpbnNlcnQudHh0CS8qaV88Uy1Nb3VzZURvd24+KgoraV88Uy1Nb3VzZVVwPglpbnNlcnQudHh0CS8qaV88Uy1Nb3VzZVVwPioKK2lfPFMtUmlnaHQ+CWluc2VydC50eHQJLyppXzxTLVJpZ2h0PioKK2lfPFMtVXA+CWluc2VydC50eHQJLyppXzxTLVVwPioKK2lfPFRhYj4JaW5zZXJ0LnR4dAkvKmlfPFRhYj4qCitpXzxVcD4JaW5zZXJ0LnR4dAkvKmlfPFVwPioKK2lfQlMJaW5zZXJ0LnR4dAkvKmlfQlMqCitpX0NUUkwtQAlpbnNlcnQudHh0CS8qaV9DVFJMLUAqCitpX0NUUkwtQQlpbnNlcnQudHh0CS8qaV9DVFJMLUEqCitpX0NUUkwtQi1nb25lCXZlcnNpb241LnR4dAkvKmlfQ1RSTC1CLWdvbmUqCitpX0NUUkwtQwlpbnNlcnQudHh0CS8qaV9DVFJMLUMqCitpX0NUUkwtRAlpbnNlcnQudHh0CS8qaV9DVFJMLUQqCitpX0NUUkwtRQlpbnNlcnQudHh0CS8qaV9DVFJMLUUqCitpX0NUUkwtR188RG93bj4JaW5zZXJ0LnR4dAkvKmlfQ1RSTC1HXzxEb3duPioKK2lfQ1RSTC1HXzxVcD4JaW5zZXJ0LnR4dAkvKmlfQ1RSTC1HXzxVcD4qCitpX0NUUkwtR19DVFJMLUoJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1HX0NUUkwtSioKK2lfQ1RSTC1HX0NUUkwtSwlpbnNlcnQudHh0CS8qaV9DVFJMLUdfQ1RSTC1LKgoraV9DVFJMLUdfaglpbnNlcnQudHh0CS8qaV9DVFJMLUdfaioKK2lfQ1RSTC1HX2sJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1HX2sqCitpX0NUUkwtR191CWluc2VydC50eHQJLyppX0NUUkwtR191KgoraV9DVFJMLUgJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1IKgoraV9DVFJMLUkJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1JKgoraV9DVFJMLUoJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1KKgoraV9DVFJMLUsJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1LKgoraV9DVFJMLUwJb3B0aW9ucy50eHQJLyppX0NUUkwtTCoKK2lfQ1RSTC1NCWluc2VydC50eHQJLyppX0NUUkwtTSoKK2lfQ1RSTC1OCWluc2VydC50eHQJLyppX0NUUkwtTioKK2lfQ1RSTC1PCWluc2VydC50eHQJLyppX0NUUkwtTyoKK2lfQ1RSTC1QCWluc2VydC50eHQJLyppX0NUUkwtUCoKK2lfQ1RSTC1RCWluc2VydC50eHQJLyppX0NUUkwtUSoKK2lfQ1RSTC1SCWluc2VydC50eHQJLyppX0NUUkwtUioKK2lfQ1RSTC1SX0NUUkwtTwlpbnNlcnQudHh0CS8qaV9DVFJMLVJfQ1RSTC1PKgoraV9DVFJMLVJfQ1RSTC1QCWluc2VydC50eHQJLyppX0NUUkwtUl9DVFJMLVAqCitpX0NUUkwtUl9DVFJMLVIJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1SX0NUUkwtUioKK2lfQ1RSTC1UCWluc2VydC50eHQJLyppX0NUUkwtVCoKK2lfQ1RSTC1VCWluc2VydC50eHQJLyppX0NUUkwtVSoKK2lfQ1RSTC1WCWluc2VydC50eHQJLyppX0NUUkwtVioKK2lfQ1RSTC1WX2RpZ2l0CWluc2VydC50eHQJLyppX0NUUkwtVl9kaWdpdCoKK2lfQ1RSTC1XCWluc2VydC50eHQJLyppX0NUUkwtVyoKK2lfQ1RSTC1YCWluc2VydC50eHQJLyppX0NUUkwtWCoKK2lfQ1RSTC1YX0NUUkwtRAlpbnNlcnQudHh0CS8qaV9DVFJMLVhfQ1RSTC1EKgoraV9DVFJMLVhfQ1RSTC1FCWluc2VydC50eHQJLyppX0NUUkwtWF9DVFJMLUUqCitpX0NUUkwtWF9DVFJMLUYJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1YX0NUUkwtRioKK2lfQ1RSTC1YX0NUUkwtSQlpbnNlcnQudHh0CS8qaV9DVFJMLVhfQ1RSTC1JKgoraV9DVFJMLVhfQ1RSTC1LCWluc2VydC50eHQJLyppX0NUUkwtWF9DVFJMLUsqCitpX0NUUkwtWF9DVFJMLUwJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1YX0NUUkwtTCoKK2lfQ1RSTC1YX0NUUkwtTglpbnNlcnQudHh0CS8qaV9DVFJMLVhfQ1RSTC1OKgoraV9DVFJMLVhfQ1RSTC1QCWluc2VydC50eHQJLyppX0NUUkwtWF9DVFJMLVAqCitpX0NUUkwtWF9DVFJMLVQJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1YX0NUUkwtVCoKK2lfQ1RSTC1YX0NUUkwtVglpbnNlcnQudHh0CS8qaV9DVFJMLVhfQ1RSTC1WKgoraV9DVFJMLVhfQ1RSTC1ZCWluc2VydC50eHQJLyppX0NUUkwtWF9DVFJMLVkqCitpX0NUUkwtWF9DVFJMLV0JaW5zZXJ0LnR4dAkvKmlfQ1RSTC1YX0NUUkwtXSoKK2lfQ1RSTC1ZCWluc2VydC50eHQJLyppX0NUUkwtWSoKK2lfQ1RSTC1aCW9wdGlvbnMudHh0CS8qaV9DVFJMLVoqCitpX0NUUkwtWwlpbnNlcnQudHh0CS8qaV9DVFJMLVsqCitpX0NUUkwtXF9DVFJMLUcJaW50cm8udHh0CS8qaV9DVFJMLVxcX0NUUkwtRyoKK2lfQ1RSTC1cX0NUUkwtTglpbnRyby50eHQJLyppX0NUUkwtXFxfQ1RSTC1OKgoraV9DVFJMLV0JaW5zZXJ0LnR4dAkvKmlfQ1RSTC1dKgoraV9DVFJMLV4JaW5zZXJ0LnR4dAkvKmlfQ1RSTC1eKgoraV9DVFJMLV8JaW5zZXJ0LnR4dAkvKmlfQ1RSTC1fKgoraV9ERUwJaW5zZXJ0LnR4dAkvKmlfREVMKgoraV9UYWIJaW5zZXJ0LnR4dAkvKmlfVGFiKgoraV9eX0NUUkwtRAlpbnNlcnQudHh0CS8qaV9eX0NUUkwtRCoKK2lfYmFja3NwYWNpbmcJaW5zZXJ0LnR4dAkvKmlfYmFja3NwYWNpbmcqCitpX2RpZ3JhcGgJZGlncmFwaC50eHQJLyppX2RpZ3JhcGgqCitpX2VzYwlpbnRyby50eHQJLyppX2VzYyoKK2lhNjQtc3ludGF4CXN5bnRheC50eHQJLyppYTY0LXN5bnRheCoKK2lhNjQudmltCXN5bnRheC50eHQJLyppYTY0LnZpbSoKK2liCW1vdGlvbi50eHQJLyppYioKK2ljY2YJdWdhbmRhLnR4dAkvKmljY2YqCitpY29uLWNoYW5nZWQJdmVyc2lvbjQudHh0CS8qaWNvbi1jaGFuZ2VkKgoraWNvbmlzZQlzdGFydGluZy50eHQJLyppY29uaXNlKgoraWNvbml6ZQlzdGFydGluZy50eHQJLyppY29uaXplKgoraWNvbnYoKQlldmFsLnR4dAkvKmljb252KCkqCitpZGVudC1zZWFyY2gJdGlwcy50eHQJLyppZGVudC1zZWFyY2gqCitpZl9jc2NvcC50eHQJaWZfY3Njb3AudHh0CS8qaWZfY3Njb3AudHh0KgoraWZfb2xlLnR4dAlpZl9vbGUudHh0CS8qaWZfb2xlLnR4dCoKK2lmX3BlcmwudHh0CWlmX3BlcmwudHh0CS8qaWZfcGVybC50eHQqCitpZl9weXRoLnR4dAlpZl9weXRoLnR4dAkvKmlmX3B5dGgudHh0KgoraWZfcnVieS50eHQJaWZfcnVieS50eHQJLyppZl9ydWJ5LnR4dCoKK2lmX3NuaWZmLnR4dAlpZl9zbmlmZi50eHQJLyppZl9zbmlmZi50eHQqCitpZl90Y2wudHh0CWlmX3RjbC50eHQJLyppZl90Y2wudHh0KgoraWdub3JlLWVycm9ycwlldmFsLnR4dAkvKmlnbm9yZS1lcnJvcnMqCitpbXByb3ZlZC1hdXRvY21kcy01LjQJdmVyc2lvbjUudHh0CS8qaW1wcm92ZWQtYXV0b2NtZHMtNS40KgoraW1wcm92ZWQtcXVpY2tmaXgJdmVyc2lvbjUudHh0CS8qaW1wcm92ZWQtcXVpY2tmaXgqCitpbXByb3ZlZC1zZXNzaW9ucwl2ZXJzaW9uNS50eHQJLyppbXByb3ZlZC1zZXNzaW9ucyoKK2ltcHJvdmVkLXZpbWluZm8JdmVyc2lvbjUudHh0CS8qaW1wcm92ZWQtdmltaW5mbyoKK2ltcHJvdmVtZW50cy01CXZlcnNpb241LnR4dAkvKmltcHJvdmVtZW50cy01KgoraW1wcm92ZW1lbnRzLTYJdmVyc2lvbjYudHh0CS8qaW1wcm92ZW1lbnRzLTYqCitpbmFjdGl2ZS1idWZmZXIJd2luZG93cy50eHQJLyppbmFjdGl2ZS1idWZmZXIqCitpbmNsdWRlLXNlYXJjaAl0YWdzcmNoLnR4dAkvKmluY2x1ZGUtc2VhcmNoKgoraW5jbHVzaXZlCW1vdGlvbi50eHQJLyppbmNsdXNpdmUqCitpbmNvbXAtc21hbGwtNgl2ZXJzaW9uNi50eHQJLyppbmNvbXAtc21hbGwtNioKK2luY29tcGF0aWJsZS01CXZlcnNpb241LnR4dAkvKmluY29tcGF0aWJsZS01KgoraW5jb21wYXRpYmxlLTYJdmVyc2lvbjYudHh0CS8qaW5jb21wYXRpYmxlLTYqCitpbmRlbnQoKQlldmFsLnR4dAkvKmluZGVudCgpKgoraW5kZW50LWV4cHJlc3Npb24JaW5kZW50LnR4dAkvKmluZGVudC1leHByZXNzaW9uKgoraW5kZW50LnR4dAlpbmRlbnQudHh0CS8qaW5kZW50LnR4dCoKK2luZGVudGtleXMtZm9ybWF0CWluZGVudC50eHQJLyppbmRlbnRrZXlzLWZvcm1hdCoKK2luZGV4CWluZGV4LnR4dAkvKmluZGV4KgoraW5kZXgudHh0CWluZGV4LnR4dAkvKmluZGV4LnR4dCoKK2luZm8tbWVzc2FnZQlzdGFydGluZy50eHQJLyppbmZvLW1lc3NhZ2UqCitpbmZvcm0tc3ludGF4CXN5bnRheC50eHQJLyppbmZvcm0tc3ludGF4KgoraW5mb3JtLnZpbQlzeW50YXgudHh0CS8qaW5mb3JtLnZpbSoKK2luaXRpYWxpemF0aW9uCXN0YXJ0aW5nLnR4dAkvKmluaXRpYWxpemF0aW9uKgoraW5wdXQoKQlldmFsLnR4dAkvKmlucHV0KCkqCitpbnB1dGRpYWxvZygpCWV2YWwudHh0CS8qaW5wdXRkaWFsb2coKSoKK2lucHV0cmVzdG9yZSgpCWV2YWwudHh0CS8qaW5wdXRyZXN0b3JlKCkqCitpbnB1dHNhdmUoKQlldmFsLnR4dAkvKmlucHV0c2F2ZSgpKgoraW5wdXRzZWNyZXQoKQlldmFsLnR4dAkvKmlucHV0c2VjcmV0KCkqCitpbnMtY29tcGxldGlvbglpbnNlcnQudHh0CS8qaW5zLWNvbXBsZXRpb24qCitpbnMtZXhwYW5kdGFiCWluc2VydC50eHQJLyppbnMtZXhwYW5kdGFiKgoraW5zLXJldmVyc2UJcmlsZWZ0LnR4dAkvKmlucy1yZXZlcnNlKgoraW5zLXNtYXJ0dGFiCWluc2VydC50eHQJLyppbnMtc21hcnR0YWIqCitpbnMtc29mdHRhYnN0b3AJaW5zZXJ0LnR4dAkvKmlucy1zb2Z0dGFic3RvcCoKK2lucy1zcGVjaWFsLWtleXMJaW5zZXJ0LnR4dAkvKmlucy1zcGVjaWFsLWtleXMqCitpbnMtc3BlY2lhbC1zcGVjaWFsCWluc2VydC50eHQJLyppbnMtc3BlY2lhbC1zcGVjaWFsKgoraW5zLXRleHR3aWR0aAlpbnNlcnQudHh0CS8qaW5zLXRleHR3aWR0aCoKK2luc2VydAlpbnNlcnQudHh0CS8qaW5zZXJ0KgoraW5zZXJ0LWluZGV4CWluZGV4LnR4dAkvKmluc2VydC1pbmRleCoKK2luc2VydC50eHQJaW5zZXJ0LnR4dAkvKmluc2VydC50eHQqCitpbnNlcnRfZXhwYW5kCWluc2VydC50eHQJLyppbnNlcnRfZXhwYW5kKgoraW5zZXJ0aW5nCWluc2VydC50eHQJLyppbnNlcnRpbmcqCitpbnNlcnRpbmctZXgJaW5zZXJ0LnR4dAkvKmluc2VydGluZy1leCoKK2luc2VydGluZy1maWxlCWluc2VydC50eHQJLyppbnNlcnRpbmctZmlsZSoKK2luc3RhbGwJdXNyXzkwLnR4dAkvKmluc3RhbGwqCitpbnN0YWxsLWhvbWUJdXNyXzkwLnR4dAkvKmluc3RhbGwtaG9tZSoKK2luc3RhbGwtcmVnaXN0cnkJZ3VpX3czMi50eHQJLyppbnN0YWxsLXJlZ2lzdHJ5KgoraW50ZWwtaXRhbml1bQlzeW50YXgudHh0CS8qaW50ZWwtaXRhbml1bSoKK2ludGVsbGltb3VzZS13aGVlbC1wcm9ibGVtcwlndWlfdzMyLnR4dAkvKmludGVsbGltb3VzZS13aGVlbC1wcm9ibGVtcyoKK2ludGVyZmFjZXMtNS4yCXZlcnNpb241LnR4dAkvKmludGVyZmFjZXMtNS4yKgoraW50ZXJuYWwtdmFyaWFibGVzCWV2YWwudHh0CS8qaW50ZXJuYWwtdmFyaWFibGVzKgoraW50ZXJuZXQJaW50cm8udHh0CS8qaW50ZXJuZXQqCitpbnRybwlpbnRyby50eHQJLyppbnRybyoKK2ludHJvLnR4dAlpbnRyby50eHQJLyppbnRyby50eHQqCitpcAltb3Rpb24udHh0CS8qaXAqCitpcwltb3Rpb24udHh0CS8qaXMqCitpc2RpcmVjdG9yeSgpCWV2YWwudHh0CS8qaXNkaXJlY3RvcnkoKSoKK2l3CW1vdGlvbi50eHQJLyppdyoKK2l7CW1vdGlvbi50eHQJLyppeyoKK2l9CW1vdGlvbi50eHQJLyppfSoKK2oJbW90aW9uLnR4dAkvKmoqCitqYXZhLWNpbm9wdGlvbnMJaW5kZW50LnR4dAkvKmphdmEtY2lub3B0aW9ucyoKK2phdmEtaW5kZW50aW5nCWluZGVudC50eHQJLypqYXZhLWluZGVudGluZyoKK2phdmEtc3ludGF4CXN5bnRheC50eHQJLypqYXZhLXN5bnRheCoKK2phdmEudmltCXN5bnRheC50eHQJLypqYXZhLnZpbSoKK2pzYnRlcm0tbW91c2UJb3B0aW9ucy50eHQJLypqc2J0ZXJtLW1vdXNlKgoranRhZ3MJdGFnc3JjaC50eHQJLypqdGFncyoKK2p1bXAtbW90aW9ucwltb3Rpb24udHh0CS8qanVtcC1tb3Rpb25zKgoranVtcGxpc3QJbW90aW9uLnR4dAkvKmp1bXBsaXN0KgoranVtcHRvLWRpZmZzCWRpZmYudHh0CS8qanVtcHRvLWRpZmZzKgorawltb3Rpb24udHh0CS8qayoKK2tjYwl1Z2FuZGEudHh0CS8qa2NjKgora2V5LWNvZGVzCWludHJvLnR4dAkvKmtleS1jb2RlcyoKK2tleS1jb2Rlcy1jaGFuZ2VkCXZlcnNpb240LnR4dAkvKmtleS1jb2Rlcy1jaGFuZ2VkKgora2V5LW1hcHBpbmcJbWFwLnR4dAkvKmtleS1tYXBwaW5nKgora2V5LW5vdGF0aW9uCWludHJvLnR4dAkvKmtleS1ub3RhdGlvbioKK2tleWNvZGVzCWludHJvLnR4dAkvKmtleWNvZGVzKgora2V5bWFwLWZpbGUtZm9ybWF0CW1ieXRlLnR4dAkvKmtleW1hcC1maWxlLWZvcm1hdCoKK2tleW1hcC1oZWJyZXcJbWJ5dGUudHh0CS8qa2V5bWFwLWhlYnJldyoKK2tleXBhZC0wCWludHJvLnR4dAkvKmtleXBhZC0wKgora2V5cGFkLTkJaW50cm8udHh0CS8qa2V5cGFkLTkqCitrZXlwYWQtZGl2aWRlCWludHJvLnR4dAkvKmtleXBhZC1kaXZpZGUqCitrZXlwYWQtZW5kCWludHJvLnR4dAkvKmtleXBhZC1lbmQqCitrZXlwYWQtZW50ZXIJaW50cm8udHh0CS8qa2V5cGFkLWVudGVyKgora2V5cGFkLWhvbWUJaW50cm8udHh0CS8qa2V5cGFkLWhvbWUqCitrZXlwYWQtbWludXMJaW50cm8udHh0CS8qa2V5cGFkLW1pbnVzKgora2V5cGFkLW11bHRpcGx5CWludHJvLnR4dAkvKmtleXBhZC1tdWx0aXBseSoKK2tleXBhZC1wYWdlLWRvd24JaW50cm8udHh0CS8qa2V5cGFkLXBhZ2UtZG93bioKK2tleXBhZC1wYWdlLXVwCWludHJvLnR4dAkvKmtleXBhZC1wYWdlLXVwKgora2V5cGFkLXBsdXMJaW50cm8udHh0CS8qa2V5cGFkLXBsdXMqCitrZXlwYWQtcG9pbnQJaW50cm8udHh0CS8qa2V5cGFkLXBvaW50Kgora25vd24tYnVncwl0b2RvLnR4dAkvKmtub3duLWJ1Z3MqCitsCW1vdGlvbi50eHQJLypsKgorbDp2YXIJZXZhbC50eHQJLypsOnZhcioKK2xhY2Utc3ludGF4CXN5bnRheC50eHQJLypsYWNlLXN5bnRheCoKK2xhY2UudmltCXN5bnRheC50eHQJLypsYWNlLnZpbSoKK2xhbmctdmFyaWFibGUJZXZhbC50eHQJLypsYW5nLXZhcmlhYmxlKgorbGFuZ3VhZ2UtbWFwcGluZwltYXAudHh0CS8qbGFuZ3VhZ2UtbWFwcGluZyoKK2xhc3QtcGF0dGVybglwYXR0ZXJuLnR4dAkvKmxhc3QtcGF0dGVybioKK2xhc3QtcG9zaXRpb24tanVtcAlldmFsLnR4dAkvKmxhc3QtcG9zaXRpb24tanVtcCoKK2xhc3RfYnVmZmVyX25yKCkJZXZhbC50eHQJLypsYXN0X2J1ZmZlcl9ucigpKgorbGNfdGltZS12YXJpYWJsZQlldmFsLnR4dAkvKmxjX3RpbWUtdmFyaWFibGUqCitsZWZ0LXJpZ2h0LW1vdGlvbnMJbW90aW9uLnR4dAkvKmxlZnQtcmlnaHQtbW90aW9ucyoKK2xlc3MJdmFyaW91cy50eHQJLypsZXNzKgorbGV0dGVyCW9wdGlvbnMudHh0CS8qbGV0dGVyKgorbGV4LXN5bnRheAlzeW50YXgudHh0CS8qbGV4LXN5bnRheCoKK2xleC52aW0Jc3ludGF4LnR4dAkvKmxleC52aW0qCitsaGFza2VsbC52aW0Jc3ludGF4LnR4dAkvKmxoYXNrZWxsLnZpbSoKK2xpYmNhbGwoKQlldmFsLnR4dAkvKmxpYmNhbGwoKSoKK2xpYmNhbGxucigpCWV2YWwudHh0CS8qbGliY2FsbG5yKCkqCitsaWNlbnNlCXVnYW5kYS50eHQJLypsaWNlbnNlKgorbGlkCXF1aWNrZml4LnR4dAkvKmxpZCoKK2xpbWl0cwl2aV9kaWZmLnR4dAkvKmxpbWl0cyoKK2xpbmUoKQlldmFsLnR4dAkvKmxpbmUoKSoKK2xpbmUtY29udGludWF0aW9uCXJlcGVhdC50eHQJLypsaW5lLWNvbnRpbnVhdGlvbioKK2xpbmUyYnl0ZSgpCWV2YWwudHh0CS8qbGluZTJieXRlKCkqCitsaW5lZmVlZAlpbnRyby50eHQJLypsaW5lZmVlZCoKK2xpbmV3aXNlCW1vdGlvbi50eHQJLypsaW5ld2lzZSoKK2xpbmV3aXNlLXJlZ2lzdGVyCWNoYW5nZS50eHQJLypsaW5ld2lzZS1yZWdpc3RlcioKK2xpbmV3aXNlLXZpc3VhbAl2aXN1YWwudHh0CS8qbGluZXdpc2UtdmlzdWFsKgorbGlzcGluZGVudCgpCWV2YWwudHh0CS8qbGlzcGluZGVudCgpKgorbGlzdC1yZXBlYXQJd2luZG93cy50eHQJLypsaXN0LXJlcGVhdCoKK2xpdGUtc3ludGF4CXN5bnRheC50eHQJLypsaXRlLXN5bnRheCoKK2xpdGUudmltCXN5bnRheC50eHQJLypsaXRlLnZpbSoKK2xpdGVyYWwtc3RyaW5nCWV2YWwudHh0CS8qbGl0ZXJhbC1zdHJpbmcqCitsbnVtLXZhcmlhYmxlCWV2YWwudHh0CS8qbG51bS12YXJpYWJsZSoKK2xvYWQtcGx1Z2lucwlzdGFydGluZy50eHQJLypsb2FkLXBsdWdpbnMqCitsb2FkLXZpbS1zY3JpcHQJcmVwZWF0LnR4dAkvKmxvYWQtdmltLXNjcmlwdCoKK2xvY2FsLWFkZGl0aW9ucwloZWxwLnR4dAkvKmxvY2FsLWFkZGl0aW9ucyoKK2xvY2FsLWZ1bmN0aW9uCWV2YWwudHh0CS8qbG9jYWwtZnVuY3Rpb24qCitsb2NhbC1vcHRpb25zCW9wdGlvbnMudHh0CS8qbG9jYWwtb3B0aW9ucyoKK2xvY2FsLXZhcmlhYmxlCWV2YWwudHh0CS8qbG9jYWwtdmFyaWFibGUqCitsb2NhbGUJbWJ5dGUudHh0CS8qbG9jYWxlKgorbG9jYWxlLW5hbWUJbWJ5dGUudHh0CS8qbG9jYWxlLW5hbWUqCitsb2NhbHRpbWUoKQlldmFsLnR4dAkvKmxvY2FsdGltZSgpKgorbG9uZy1saW5lcwl2ZXJzaW9uNS50eHQJLypsb25nLWxpbmVzKgorbG93ZXJjYXNlCWNoYW5nZS50eHQJLypsb3dlcmNhc2UqCitscGMtc3ludGF4CXN5bnRheC50eHQJLypscGMtc3ludGF4KgorbHBjLnZpbQlzeW50YXgudHh0CS8qbHBjLnZpbSoKK2x1YS1zeW50YXgJc3ludGF4LnR4dAkvKmx1YS1zeW50YXgqCitsdWEudmltCXN5bnRheC50eHQJLypsdWEudmltKgorbQltb3Rpb24udHh0CS8qbSoKK20nCW1vdGlvbi50eHQJLyptJyoKK21bCW1vdGlvbi50eHQJLyptWyoKK21dCW1vdGlvbi50eHQJLyptXSoKK21gCW1vdGlvbi50eHQJLyptYCoKK21hYwlvc19tYWMudHh0CS8qbWFjKgorbWFjLWJ1Zwlvc19tYWMudHh0CS8qbWFjLWJ1ZyoKK21hYy1jb21waWxlCW9zX21hYy50eHQJLyptYWMtY29tcGlsZSoKK21hYy1mYXEJb3NfbWFjLnR4dAkvKm1hYy1mYXEqCittYWMtZmlsZW5hbWUJb3NfbWFjLnR4dAkvKm1hYy1maWxlbmFtZSoKK21hYy1sYWNrCW9zX21hYy50eHQJLyptYWMtbGFjayoKK21hYy12aW1maWxlCW9zX21hYy50eHQJLyptYWMtdmltZmlsZSoKK21hY2ludG9zaAlvc19tYWMudHh0CS8qbWFjaW50b3NoKgorbWFjcm8JbWFwLnR4dAkvKm1hY3JvKgorbWFpbC1saXN0CWludHJvLnR4dAkvKm1haWwtbGlzdCoKK21haWwtcGx1Z2luCWZpbGV0eXBlLnR4dAkvKm1haWwtcGx1Z2luKgorbWFpbC52aW0Jc3ludGF4LnR4dAkvKm1haWwudmltKgorbWFpbGxpc3QJaW50cm8udHh0CS8qbWFpbGxpc3QqCittYWlsbGlzdC1hcmNoaXZlCWludHJvLnR4dAkvKm1haWxsaXN0LWFyY2hpdmUqCittYWtlLXN5bnRheAlzeW50YXgudHh0CS8qbWFrZS1zeW50YXgqCittYWtlLnZpbQlzeW50YXgudHh0CS8qbWFrZS52aW0qCittYW4tcGx1Z2luCWZpbGV0eXBlLnR4dAkvKm1hbi1wbHVnaW4qCittYW51YWwtY29weXJpZ2h0CXVzcl8wMS50eHQJLyptYW51YWwtY29weXJpZ2h0KgorbWFwLTxTSUQ+CW1hcC50eHQJLyptYXAtPFNJRD4qCittYXAtYW1iaWd1b3VzCW1hcC50eHQJLyptYXAtYW1iaWd1b3VzKgorbWFwLWJhY2t0aWNrCXRpcHMudHh0CS8qbWFwLWJhY2t0aWNrKgorbWFwLWNvbW1lbnRzCW1hcC50eHQJLyptYXAtY29tbWVudHMqCittYXAtZXhhbXBsZXMJbWFwLnR4dAkvKm1hcC1leGFtcGxlcyoKK21hcC1rZXlzLWZhaWxzCW1hcC50eHQJLyptYXAta2V5cy1mYWlscyoKK21hcC1saXN0aW5nCW1hcC50eHQJLyptYXAtbGlzdGluZyoKK21hcC1tb2RlcwltYXAudHh0CS8qbWFwLW1vZGVzKgorbWFwLW11bHRpYnl0ZQltYXAudHh0CS8qbWFwLW11bHRpYnl0ZSoKK21hcC1vdmVydmlldwltYXAudHh0CS8qbWFwLW92ZXJ2aWV3KgorbWFwLXNlbGYtZGVzdHJveQl0aXBzLnR4dAkvKm1hcC1zZWxmLWRlc3Ryb3kqCittYXAtdHlwaW5nCW1hcC50eHQJLyptYXAtdHlwaW5nKgorbWFwLXdoaWNoLWtleXMJbWFwLnR4dAkvKm1hcC13aGljaC1rZXlzKgorbWFwLnR4dAltYXAudHh0CS8qbWFwLnR4dCoKK21hcF9DVFJMX0MJbWFwLnR4dAkvKm1hcF9DVFJMX0MqCittYXBfYmFja3NsYXNoCW1hcC50eHQJLyptYXBfYmFja3NsYXNoKgorbWFwX2JhcgltYXAudHh0CS8qbWFwX2JhcioKK21hcF9lbXB0eV9yaHMJbWFwLnR4dAkvKm1hcF9lbXB0eV9yaHMqCittYXBfcmV0dXJuCW1hcC50eHQJLyptYXBfcmV0dXJuKgorbWFwX3NwYWNlX2luX2xocwltYXAudHh0CS8qbWFwX3NwYWNlX2luX2xocyoKK21hcF9zcGFjZV9pbl9yaHMJbWFwLnR4dAkvKm1hcF9zcGFjZV9pbl9yaHMqCittYXBhcmcoKQlldmFsLnR4dAkvKm1hcGFyZygpKgorbWFwY2hlY2soKQlldmFsLnR4dAkvKm1hcGNoZWNrKCkqCittYXBsZS1zeW50YXgJc3ludGF4LnR4dAkvKm1hcGxlLXN5bnRheCoKK21hcGxlLnZpbQlzeW50YXgudHh0CS8qbWFwbGUudmltKgorbWFwbGVhZGVyCW1hcC50eHQJLyptYXBsZWFkZXIqCittYXBsb2NhbGxlYWRlcgltYXAudHh0CS8qbWFwbG9jYWxsZWFkZXIqCittYXBwaW5nCW1hcC50eHQJLyptYXBwaW5nKgorbWFyawltb3Rpb24udHh0CS8qbWFyayoKK21hcmstbW90aW9ucwltb3Rpb24udHh0CS8qbWFyay1tb3Rpb25zKgorbWFzbS1zeW50YXgJc3ludGF4LnR4dAkvKm1hc20tc3ludGF4KgorbWFzbS52aW0Jc3ludGF4LnR4dAkvKm1hc20udmltKgorbWF0Y2goKQlldmFsLnR4dAkvKm1hdGNoKCkqCittYXRjaC1oaWdobGlnaHQJcGF0dGVybi50eHQJLyptYXRjaC1oaWdobGlnaHQqCittYXRjaGVuZCgpCWV2YWwudHh0CS8qbWF0Y2hlbmQoKSoKK21hdGNoaXQtaW5zdGFsbAl1c3JfMDUudHh0CS8qbWF0Y2hpdC1pbnN0YWxsKgorbWF0Y2hzdHIoKQlldmFsLnR4dAkvKm1hdGNoc3RyKCkqCittYnl0ZS1JTUUJbWJ5dGUudHh0CS8qbWJ5dGUtSU1FKgorbWJ5dGUtWElNCW1ieXRlLnR4dAkvKm1ieXRlLVhJTSoKK21ieXRlLWNvbnZlcnNpb24JbWJ5dGUudHh0CS8qbWJ5dGUtY29udmVyc2lvbioKK21ieXRlLWVuY29kaW5nCW1ieXRlLnR4dAkvKm1ieXRlLWVuY29kaW5nKgorbWJ5dGUtZmlyc3QJbWJ5dGUudHh0CS8qbWJ5dGUtZmlyc3QqCittYnl0ZS1mb250cy1NU3dpbgltYnl0ZS50eHQJLyptYnl0ZS1mb250cy1NU3dpbioKK21ieXRlLWZvbnRzLVgxMQltYnl0ZS50eHQJLyptYnl0ZS1mb250cy1YMTEqCittYnl0ZS1rZXltYXAJbWJ5dGUudHh0CS8qbWJ5dGUta2V5bWFwKgorbWJ5dGUtbG9jYWxlCW1ieXRlLnR4dAkvKm1ieXRlLWxvY2FsZSoKK21ieXRlLW9wdGlvbnMJbWJ5dGUudHh0CS8qbWJ5dGUtb3B0aW9ucyoKK21ieXRlLXRlcm1pbmFsCW1ieXRlLnR4dAkvKm1ieXRlLXRlcm1pbmFsKgorbWJ5dGUtdXRmOAltYnl0ZS50eHQJLyptYnl0ZS11dGY4KgorbWJ5dGUudHh0CW1ieXRlLnR4dAkvKm1ieXRlLnR4dCoKK21lbnUtY2hhbmdlcy01LjQJdmVyc2lvbjUudHh0CS8qbWVudS1jaGFuZ2VzLTUuNCoKK21lbnUtZXhhbXBsZXMJZ3VpLnR4dAkvKm1lbnUtZXhhbXBsZXMqCittZW51LXByaW9yaXR5CWd1aS50eHQJLyptZW51LXByaW9yaXR5KgorbWVudS1zZXBhcmF0b3IJZ3VpLnR4dAkvKm1lbnUtc2VwYXJhdG9yKgorbWVudS52aW0JZ3VpLnR4dAkvKm1lbnUudmltKgorbWVudXMJZ3VpLnR4dAkvKm1lbnVzKgorbWVzc2FnZS1oaXN0b3J5CW1lc3NhZ2UudHh0CS8qbWVzc2FnZS1oaXN0b3J5KgorbWVzc2FnZS50eHQJbWVzc2FnZS50eHQJLyptZXNzYWdlLnR4dCoKK21lc3NhZ2VzCW1lc3NhZ2UudHh0CS8qbWVzc2FnZXMqCittZXRhCWludHJvLnR4dAkvKm1ldGEqCittaW5pbWFsLWZlYXR1cmVzCW9zX21zZG9zLnR4dAkvKm1pbmltYWwtZmVhdHVyZXMqCittaXNzaW5nLWNvbW1hbmRzCXZpX2RpZmYudHh0CS8qbWlzc2luZy1jb21tYW5kcyoKK21pc3Npbmctb3B0aW9ucwl2aV9kaWZmLnR4dAkvKm1pc3Npbmctb3B0aW9ucyoKK21sYW5nLnR4dAltbGFuZy50eHQJLyptbGFuZy50eHQqCittb2RlKCkJZXZhbC50eHQJLyptb2RlKCkqCittb2RlLUV4CWludHJvLnR4dAkvKm1vZGUtRXgqCittb2RlLWNtZGxpbmUJY21kbGluZS50eHQJLyptb2RlLWNtZGxpbmUqCittb2RlLWlucy1yZXBsCWluc2VydC50eHQJLyptb2RlLWlucy1yZXBsKgorbW9kZS1yZXBsYWNlCWluc2VydC50eHQJLyptb2RlLXJlcGxhY2UqCittb2RlLXN3aXRjaGluZwlpbnRyby50eHQJLyptb2RlLXN3aXRjaGluZyoKK21vZGVsZXNzLWFuZC1jbGlwYm9hcmQJdmVyc2lvbjYudHh0CS8qbW9kZWxlc3MtYW5kLWNsaXBib2FyZCoKK21vZGVsZXNzLXNlbGVjdGlvbglndWkudHh0CS8qbW9kZWxlc3Mtc2VsZWN0aW9uKgorbW9kZWxpbmUJb3B0aW9ucy50eHQJLyptb2RlbGluZSoKK21vZGVsaW5lLWxvY2FsCW9wdGlvbnMudHh0CS8qbW9kZWxpbmUtbG9jYWwqCittb2RlbGluZS12ZXJzaW9uCW9wdGlvbnMudHh0CS8qbW9kZWxpbmUtdmVyc2lvbioKK21vby1zeW50YXgJc3ludGF4LnR4dAkvKm1vby1zeW50YXgqCittb28udmltCXN5bnRheC50eHQJLyptb28udmltKgorbW9yZS1jb21wYXRpYmxlCXZlcnNpb241LnR4dAkvKm1vcmUtY29tcGF0aWJsZSoKK21vcmUtcHJvbXB0CW1lc3NhZ2UudHh0CS8qbW9yZS1wcm9tcHQqCittb3Rpb24udHh0CW1vdGlvbi50eHQJLyptb3Rpb24udHh0KgorbW91c2UtbW9kZS10YWJsZQl0ZXJtLnR4dAkvKm1vdXNlLW1vZGUtdGFibGUqCittb3VzZS1vdmVydmlldwl0ZXJtLnR4dAkvKm1vdXNlLW92ZXJ2aWV3KgorbW91c2Utc3dhcC1idXR0b25zCXRlcm0udHh0CS8qbW91c2Utc3dhcC1idXR0b25zKgorbW91c2UtdXNpbmcJdGVybS50eHQJLyptb3VzZS11c2luZyoKK21zLWRvcwlvc19tc2Rvcy50eHQJLyptcy1kb3MqCittc2Rvcwlvc19tc2Rvcy50eHQJLyptc2RvcyoKK21zZG9zLWFycm93cwlvc19tc2Rvcy50eHQJLyptc2Rvcy1hcnJvd3MqCittc2Rvcy1jbGlwYm9hcmQtbGltaXRzCW9zX21zZG9zLnR4dAkvKm1zZG9zLWNsaXBib2FyZC1saW1pdHMqCittc2Rvcy1jb21waWxpbmcJb3NfbXNkb3MudHh0CS8qbXNkb3MtY29tcGlsaW5nKgorbXNkb3MtY29weS1wYXN0ZQlvc19tc2Rvcy50eHQJLyptc2Rvcy1jb3B5LXBhc3RlKgorbXNkb3MtZm5hbWUtZXh0ZW5zaW9ucwlvc19tc2Rvcy50eHQJLyptc2Rvcy1mbmFtZS1leHRlbnNpb25zKgorbXNkb3MtbGltaXRhdGlvbnMJb3NfbXNkb3MudHh0CS8qbXNkb3MtbGltaXRhdGlvbnMqCittc2Rvcy1saW5rZWQtZmlsZXMJb3NfbXNkb3MudHh0CS8qbXNkb3MtbGlua2VkLWZpbGVzKgorbXNkb3MtbG9uZ2ZuYW1lCW9zX21zZG9zLnR4dAkvKm1zZG9zLWxvbmdmbmFtZSoKK21zZG9zLW1vZGUJZ3VpX3czMi50eHQJLyptc2Rvcy1tb2RlKgorbXNkb3MtcHJvYmxlbXMJb3NfbXNkb3MudHh0CS8qbXNkb3MtcHJvYmxlbXMqCittc2Rvcy10ZXJtY2FwCW9zX21zZG9zLnR4dAkvKm1zZG9zLXRlcm1jYXAqCittc2Rvcy12ZXJzaW9ucwlvc19tc2Rvcy50eHQJLyptc2Rvcy12ZXJzaW9ucyoKK21zcWwtc3ludGF4CXN5bnRheC50eHQJLyptc3FsLXN5bnRheCoKK21zcWwudmltCXN5bnRheC50eHQJLyptc3FsLnZpbSoKK21zd2luLnZpbQlndWlfdzMyLnR4dAkvKm1zd2luLnZpbSoKK211bHRpLWJ5dGUJbWJ5dGUudHh0CS8qbXVsdGktYnl0ZSoKK211bHRpLWxhbmcJbWxhbmcudHh0CS8qbXVsdGktbGFuZyoKK211bHRpLXJlcGVhdAlyZXBlYXQudHh0CS8qbXVsdGktcmVwZWF0KgorbXVsdGlieXRlCW1ieXRlLnR4dAkvKm11bHRpYnl0ZSoKK211bHRpYnl0ZS1pbWUJbWJ5dGUudHh0CS8qbXVsdGlieXRlLWltZSoKK211bHRpYnl0ZS1pbnB1dAltYnl0ZS50eHQJLyptdWx0aWJ5dGUtaW5wdXQqCittdWx0aWxhbmcJbWxhbmcudHh0CS8qbXVsdGlsYW5nKgorbXVsdGlsYW5nLW1lbnVzCW1sYW5nLnR4dAkvKm11bHRpbGFuZy1tZW51cyoKK211bHRpbGFuZy1tZXNzYWdlcwltbGFuZy50eHQJLyptdWx0aWxhbmctbWVzc2FnZXMqCittdWx0aWxhbmctc2NyaXB0cwltbGFuZy50eHQJLyptdWx0aWxhbmctc2NyaXB0cyoKK215ZmlsZXR5cGVmaWxlCXN5bnRheC50eHQJLypteWZpbGV0eXBlZmlsZSoKK215c2NyaXB0c2ZpbGUJc3ludGF4LnR4dAkvKm15c2NyaXB0c2ZpbGUqCitteXN5bnRheGZpbGUJc3ludGF4LnR4dAkvKm15c3ludGF4ZmlsZSoKK215c3ludGF4ZmlsZS1hZGQJc3ludGF4LnR4dAkvKm15c3ludGF4ZmlsZS1hZGQqCitteXN5bnRheGZpbGUtcmVwbGFjZQlzeW50YXgudHh0CS8qbXlzeW50YXhmaWxlLXJlcGxhY2UqCituCXBhdHRlcm4udHh0CS8qbioKK25hc20tc3ludGF4CXN5bnRheC50eHQJLypuYXNtLXN5bnRheCoKK25hc20udmltCXN5bnRheC50eHQJLypuYXNtLnZpbSoKK25hdmlnYXRpb24JbW90aW9uLnR4dAkvKm5hdmlnYXRpb24qCituYi1jb21tYW5kcwluZXRiZWFucy50eHQJLypuYi1jb21tYW5kcyoKK25iLWV2ZW50cwluZXRiZWFucy50eHQJLypuYi1ldmVudHMqCituYi1mdW5jdGlvbnMJbmV0YmVhbnMudHh0CS8qbmItZnVuY3Rpb25zKgorbmItbWVzc2FnZXMJbmV0YmVhbnMudHh0CS8qbmItbWVzc2FnZXMqCituYi1zcGVjaWFsCW5ldGJlYW5zLnR4dAkvKm5iLXNwZWNpYWwqCituYi10ZXJtcwluZXRiZWFucy50eHQJLypuYi10ZXJtcyoKK25jZi1zeW50YXgJc3ludGF4LnR4dAkvKm5jZi1zeW50YXgqCituY2YudmltCXN5bnRheC50eHQJLypuY2YudmltKgorbmV0YmVhbnMJbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMqCituZXRiZWFucy1jb25maWd1cmUJbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMtY29uZmlndXJlKgorbmV0YmVhbnMtZG93bmxvYWQJbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMtZG93bmxvYWQqCituZXRiZWFucy1pbnRybwluZXRiZWFucy50eHQJLypuZXRiZWFucy1pbnRybyoKK25ldGJlYW5zLWtleWJpbmRpbmdzCW5ldGJlYW5zLnR4dAkvKm5ldGJlYW5zLWtleWJpbmRpbmdzKgorbmV0YmVhbnMtbWVzc2FnZXMJbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMtbWVzc2FnZXMqCituZXRiZWFucy1wcmVwYXJhdGlvbgluZXRiZWFucy50eHQJLypuZXRiZWFucy1wcmVwYXJhdGlvbioKK25ldGJlYW5zLXByb2JsZW1zCW5ldGJlYW5zLnR4dAkvKm5ldGJlYW5zLXByb2JsZW1zKgorbmV0YmVhbnMtcHJvdG9jb2wJbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMtcHJvdG9jb2wqCituZXRiZWFucy1ydW4JbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMtcnVuKgorbmV0YmVhbnMtc2V0dXAJbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMtc2V0dXAqCituZXRiZWFucy1zdXBwb3J0CW5ldGJlYW5zLnR4dAkvKm5ldGJlYW5zLXN1cHBvcnQqCituZXRiZWFucy50eHQJbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMudHh0KgorbmV0cncJcGlfbmV0cncudHh0CS8qbmV0cncqCituZXRydy1hY3RpdmF0ZQlwaV9uZXRydy50eHQJLypuZXRydy1hY3RpdmF0ZSoKK25ldHJ3LWNvbnRlbnRzCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWNvbnRlbnRzKgorbmV0cnctY3JlZGl0cwlwaV9uZXRydy50eHQJLypuZXRydy1jcmVkaXRzKgorbmV0cnctZGVidWcJcGlfbmV0cncudHh0CS8qbmV0cnctZGVidWcqCituZXRydy1leAlwaV9uZXRydy50eHQJLypuZXRydy1leCoKK25ldHJ3LWZpbGUJcGlfbmV0cncudHh0CS8qbmV0cnctZmlsZSoKK25ldHJ3LWZpeHVwCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWZpeHVwKgorbmV0cnctbmV0cmMJcGlfbmV0cncudHh0CS8qbmV0cnctbmV0cmMqCituZXRydy1uZXcJcGlfbmV0cncudHh0CS8qbmV0cnctbmV3KgorbmV0cnctbmV3c3R1ZmYJcGlfbmV0cncudHh0CS8qbmV0cnctbmV3c3R1ZmYqCituZXRydy1vcHRpb25zCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LW9wdGlvbnMqCituZXRydy1wYXNzd2QJcGlfbmV0cncudHh0CS8qbmV0cnctcGFzc3dkKgorbmV0cnctcHJvdG9jb2wJcGlfbmV0cncudHh0CS8qbmV0cnctcHJvdG9jb2wqCituZXRydy1yZWYJcGlfbmV0cncudHh0CS8qbmV0cnctcmVmKgorbmV0cnctdHJhbnNwYXJlbnQJcGlfbmV0cncudHh0CS8qbmV0cnctdHJhbnNwYXJlbnQqCituZXRydy11aWRwYXNzCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LXVpZHBhc3MqCituZXRydy11cmxzCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LXVybHMqCituZXRydy12YXIJcGlfbmV0cncudHh0CS8qbmV0cnctdmFyKgorbmV0cncteGZlcglwaV9uZXRydy50eHQJLypuZXRydy14ZmVyKgorbmV0cncudmltCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LnZpbSoKK25ldHRlcm0tbW91c2UJb3B0aW9ucy50eHQJLypuZXR0ZXJtLW1vdXNlKgorbmV0d29yawlwaV9uZXRydy50eHQJLypuZXR3b3JrKgorbmV3LTUJdmVyc2lvbjUudHh0CS8qbmV3LTUqCituZXctNgl2ZXJzaW9uNi50eHQJLypuZXctNioKK25ldy1HVEstR1VJCXZlcnNpb241LnR4dAkvKm5ldy1HVEstR1VJKgorbmV3LVNlbGVjdC1tb2RlCXZlcnNpb241LnR4dAkvKm5ldy1TZWxlY3QtbW9kZSoKK25ldy1WaWV3CXZlcnNpb242LnR4dAkvKm5ldy1WaWV3KgorbmV3LWFyZ3VtZW50LWxpc3QJdmVyc2lvbjYudHh0CS8qbmV3LWFyZ3VtZW50LWxpc3QqCituZXctYnVmdHlwZQl2ZXJzaW9uNi50eHQJLypuZXctYnVmdHlwZSoKK25ldy1jbWR3aW4JdmVyc2lvbjYudHh0CS8qbmV3LWNtZHdpbioKK25ldy1jb2xvci1zY2hlbWVzCXZlcnNpb242LnR4dAkvKm5ldy1jb2xvci1zY2hlbWVzKgorbmV3LWNvbW1hbmRzCXZlcnNpb241LnR4dAkvKm5ldy1jb21tYW5kcyoKK25ldy1jb21tYW5kcy01LjQJdmVyc2lvbjUudHh0CS8qbmV3LWNvbW1hbmRzLTUuNCoKK25ldy1kZWJ1Zy1pdGYJdmVyc2lvbjYudHh0CS8qbmV3LWRlYnVnLWl0ZioKK25ldy1kZWJ1Zy1tb2RlCXZlcnNpb242LnR4dAkvKm5ldy1kZWJ1Zy1tb2RlKgorbmV3LWRpZmYtbW9kZQl2ZXJzaW9uNi50eHQJLypuZXctZGlmZi1tb2RlKgorbmV3LWVuY3J5cHRpb24JdmVyc2lvbjUudHh0CS8qbmV3LWVuY3J5cHRpb24qCituZXctZXZpbQl2ZXJzaW9uNi50eHQJLypuZXctZXZpbSoKK25ldy1leC1jb21tYW5kcy01LjIJdmVyc2lvbjUudHh0CS8qbmV3LWV4LWNvbW1hbmRzLTUuMioKK25ldy1maWxlLWJyb3dzZXIJdmVyc2lvbjYudHh0CS8qbmV3LWZpbGUtYnJvd3NlcioKK25ldy1maWxlLXdyaXRpbmcJdmVyc2lvbjYudHh0CS8qbmV3LWZpbGUtd3JpdGluZyoKK25ldy1maWxldHlwZQlmaWxldHlwZS50eHQJLypuZXctZmlsZXR5cGUqCituZXctZmlsZXR5cGUtNS40CXZlcnNpb241LnR4dAkvKm5ldy1maWxldHlwZS01LjQqCituZXctZmlsZXR5cGUtcGx1Z2lucwl2ZXJzaW9uNi50eHQJLypuZXctZmlsZXR5cGUtcGx1Z2lucyoKK25ldy1maWxldHlwZS1zY3JpcHRzCWZpbGV0eXBlLnR4dAkvKm5ldy1maWxldHlwZS1zY3JpcHRzKgorbmV3LWZvbGRpbmcJdmVyc2lvbjYudHh0CS8qbmV3LWZvbGRpbmcqCituZXctZnVuY3Rpb25zLTUuMgl2ZXJzaW9uNS50eHQJLypuZXctZnVuY3Rpb25zLTUuMioKK25ldy1nbG9iYWwtdmFsdWVzCXZlcnNpb242LnR4dAkvKm5ldy1nbG9iYWwtdmFsdWVzKgorbmV3LWhpZ2hsaWdodGluZwl2ZXJzaW9uNS50eHQJLypuZXctaGlnaGxpZ2h0aW5nKgorbmV3LWluZGVudC1mbGV4CXZlcnNpb242LnR4dAkvKm5ldy1pbmRlbnQtZmxleCoKK25ldy1pdGVtcy02CXZlcnNpb242LnR4dAkvKm5ldy1pdGVtcy02KgorbmV3LWxpbmUtY29udGludWF0aW9uCXZlcnNpb241LnR4dAkvKm5ldy1saW5lLWNvbnRpbnVhdGlvbioKK25ldy1tdWx0aS1ieXRlCXZlcnNpb241LnR4dAkvKm5ldy1tdWx0aS1ieXRlKgorbmV3LW11bHRpLWxhbmcJdmVyc2lvbjYudHh0CS8qbmV3LW11bHRpLWxhbmcqCituZXctbmV0d29yay1maWxlcwl2ZXJzaW9uNi50eHQJLypuZXctbmV0d29yay1maWxlcyoKK25ldy1vcGVyYXRvci1tb2QJdmVyc2lvbjYudHh0CS8qbmV3LW9wZXJhdG9yLW1vZCoKK25ldy1vcHRpb25zLTUuMgl2ZXJzaW9uNS50eHQJLypuZXctb3B0aW9ucy01LjIqCituZXctb3B0aW9ucy01LjQJdmVyc2lvbjUudHh0CS8qbmV3LW9wdGlvbnMtNS40KgorbmV3LXBlcmwtcHl0aG9uCXZlcnNpb241LnR4dAkvKm5ldy1wZXJsLXB5dGhvbioKK25ldy1wbHVnaW5zCXZlcnNpb242LnR4dAkvKm5ldy1wbHVnaW5zKgorbmV3LXByaW50aW5nCXZlcnNpb242LnR4dAkvKm5ldy1wcmludGluZyoKK25ldy1ydW50aW1lLWRpcgl2ZXJzaW9uNS50eHQJLypuZXctcnVudGltZS1kaXIqCituZXctc2NyaXB0CXZlcnNpb241LnR4dAkvKm5ldy1zY3JpcHQqCituZXctc2NyaXB0LTUuNAl2ZXJzaW9uNS50eHQJLypuZXctc2NyaXB0LTUuNCoKK25ldy1zZWFyY2gtcGF0aAl2ZXJzaW9uNi50eHQJLypuZXctc2VhcmNoLXBhdGgqCituZXctc2VhcmNocGF0CXZlcnNpb242LnR4dAkvKm5ldy1zZWFyY2hwYXQqCituZXctc2Vzc2lvbi1maWxlcwl2ZXJzaW9uNS50eHQJLypuZXctc2Vzc2lvbi1maWxlcyoKK25ldy11bmxpc3RlZC1idWZmZXJzCXZlcnNpb242LnR4dAkvKm5ldy11bmxpc3RlZC1idWZmZXJzKgorbmV3LXVzZXItZGVmaW5lZAl2ZXJzaW9uNS50eHQJLypuZXctdXNlci1kZWZpbmVkKgorbmV3LXVzZXItbWFudWFsCXZlcnNpb242LnR4dAkvKm5ldy11c2VyLW1hbnVhbCoKK25ldy11dGYtOAl2ZXJzaW9uNi50eHQJLypuZXctdXRmLTgqCituZXctdmVydHNwbGl0CXZlcnNpb242LnR4dAkvKm5ldy12ZXJ0c3BsaXQqCituZXctdmltLXNlcnZlcgl2ZXJzaW9uNi50eHQJLypuZXctdmltLXNlcnZlcioKK25ldy12aXJ0ZWRpdAl2ZXJzaW9uNi50eHQJLypuZXctdmlydGVkaXQqCituZXdzCWludHJvLnR4dAkvKm5ld3MqCituZXh0bm9uYmxhbmsoKQlldmFsLnR4dAkvKm5leHRub25ibGFuaygpKgorbm8tZXZhbC1mZWF0dXJlCWV2YWwudHh0CS8qbm8tZXZhbC1mZWF0dXJlKgorbm9fYnVmZmVyc19tZW51CWd1aS50eHQJLypub19idWZmZXJzX21lbnUqCitub3JtYWwtaW5kZXgJaW5kZXgudHh0CS8qbm9ybWFsLWluZGV4Kgorbm90LWNvbXBhdGlibGUJdXNyXzAxLnR4dAkvKm5vdC1jb21wYXRpYmxlKgorbm90LWVkaXRlZAllZGl0aW5nLnR4dAkvKm5vdC1lZGl0ZWQqCitub3RhdGlvbglpbnRyby50eHQJLypub3RhdGlvbioKK25vdGVwYWQJZ3VpX3czMi50eHQJLypub3RlcGFkKgorbnIyY2hhcigpCWV2YWwudHh0CS8qbnIyY2hhcigpKgorbnJvZmYtc3ludGF4CXN5bnRheC50eHQJLypucm9mZi1zeW50YXgqCitucm9mZi52aW0Jc3ludGF4LnR4dAkvKm5yb2ZmLnZpbSoKK28JaW5zZXJ0LnR4dAkvKm8qCitvX0NUUkwtVgltb3Rpb24udHh0CS8qb19DVFJMLVYqCitvX1YJbW90aW9uLnR4dAkvKm9fVioKK29fdgltb3Rpb24udHh0CS8qb192Kgorb2JqZWN0LW1vdGlvbnMJbW90aW9uLnR4dAkvKm9iamVjdC1tb3Rpb25zKgorb2JqZWN0LXNlbGVjdAltb3Rpb24udHh0CS8qb2JqZWN0LXNlbGVjdCoKK29iamVjdHMJaW5kZXgudHh0CS8qb2JqZWN0cyoKK29idGFpbmluZy1leHRlZAluZXRiZWFucy50eHQJLypvYnRhaW5pbmctZXh0ZWQqCitvY2FtbC1zeW50YXgJc3ludGF4LnR4dAkvKm9jYW1sLXN5bnRheCoKK29jYW1sLnZpbQlzeW50YXgudHh0CS8qb2NhbWwudmltKgorb2xlLWFjdGl2YXRpb24JaWZfb2xlLnR4dAkvKm9sZS1hY3RpdmF0aW9uKgorb2xlLWV2YWwJaWZfb2xlLnR4dAkvKm9sZS1ldmFsKgorb2xlLWdldGh3bmQJaWZfb2xlLnR4dAkvKm9sZS1nZXRod25kKgorb2xlLWludGVyZmFjZQlpZl9vbGUudHh0CS8qb2xlLWludGVyZmFjZSoKK29sZS1tZXRob2RzCWlmX29sZS50eHQJLypvbGUtbWV0aG9kcyoKK29sZS1ub3JtYWwJaWZfb2xlLnR4dAkvKm9sZS1ub3JtYWwqCitvbGUtcmVnaXN0cmF0aW9uCWlmX29sZS50eHQJLypvbGUtcmVnaXN0cmF0aW9uKgorb2xlLXNlbmRrZXlzCWlmX29sZS50eHQJLypvbGUtc2VuZGtleXMqCitvbGUtc2V0Zm9yZWdyb3VuZAlpZl9vbGUudHh0CS8qb2xlLXNldGZvcmVncm91bmQqCitvbmxpbmUtaGVscAl2YXJpb3VzLnR4dAkvKm9ubGluZS1oZWxwKgorb3BlbmluZy13aW5kb3cJd2luZG93cy50eHQJLypvcGVuaW5nLXdpbmRvdyoKK29wZXJhdG9yCW1vdGlvbi50eHQJLypvcGVyYXRvcioKK29wdGlvbi1iYWNrc2xhc2gJb3B0aW9ucy50eHQJLypvcHRpb24tYmFja3NsYXNoKgorb3B0aW9uLWxpc3QJcXVpY2tyZWYudHh0CS8qb3B0aW9uLWxpc3QqCitvcHRpb24tc3VtbWFyeQlvcHRpb25zLnR4dAkvKm9wdGlvbi1zdW1tYXJ5Kgorb3B0aW9ucwlvcHRpb25zLnR4dAkvKm9wdGlvbnMqCitvcHRpb25zLWNoYW5nZWQJdmVyc2lvbjUudHh0CS8qb3B0aW9ucy1jaGFuZ2VkKgorb3B0aW9ucy50eHQJb3B0aW9ucy50eHQJLypvcHRpb25zLnR4dCoKK29zMglvc19vczIudHh0CS8qb3MyKgorb3MyYW5zaQlvc19vczIudHh0CS8qb3MyYW5zaSoKK29zMzkwCW9zXzM5MC50eHQJLypvczM5MCoKK29zXzM5MC50eHQJb3NfMzkwLnR4dAkvKm9zXzM5MC50eHQqCitvc19hbWlnYS50eHQJb3NfYW1pZ2EudHh0CS8qb3NfYW1pZ2EudHh0Kgorb3NfYmVvcy50eHQJb3NfYmVvcy50eHQJLypvc19iZW9zLnR4dCoKK29zX2Rvcy50eHQJb3NfZG9zLnR4dAkvKm9zX2Rvcy50eHQqCitvc19tYWMudHh0CW9zX21hYy50eHQJLypvc19tYWMudHh0Kgorb3NfbWludC50eHQJb3NfbWludC50eHQJLypvc19taW50LnR4dCoKK29zX21zZG9zLnR4dAlvc19tc2Rvcy50eHQJLypvc19tc2Rvcy50eHQqCitvc19vczIudHh0CW9zX29zMi50eHQJLypvc19vczIudHh0Kgorb3NfcW54LnR4dAlvc19xbngudHh0CS8qb3NfcW54LnR4dCoKK29zX3Jpc2MudHh0CW9zX3Jpc2MudHh0CS8qb3NfcmlzYy50eHQqCitvc191bml4LnR4dAlvc191bml4LnR4dAkvKm9zX3VuaXgudHh0Kgorb3Nfdm1zLnR4dAlvc192bXMudHh0CS8qb3Nfdm1zLnR4dCoKK29zX3dpbjMyLnR4dAlvc193aW4zMi50eHQJLypvc193aW4zMi50eHQqCitvdGhlci1mZWF0dXJlcwl2aV9kaWZmLnR4dAkvKm90aGVyLWZlYXR1cmVzKgorcAljaGFuZ2UudHh0CS8qcCoKK3BhZ2UtZG93bglpbnRyby50eHQJLypwYWdlLWRvd24qCitwYWdlLXVwCWludHJvLnR4dAkvKnBhZ2UtdXAqCitwYWdlX2Rvd24JaW50cm8udHh0CS8qcGFnZV9kb3duKgorcGFnZV91cAlpbnRyby50eHQJLypwYWdlX3VwKgorcGFnZXIJbWVzc2FnZS50eHQJLypwYWdlcioKK3BhcHAtc3ludGF4CXN5bnRheC50eHQJLypwYXBwLXN5bnRheCoKK3BhcHAudmltCXN5bnRheC50eHQJLypwYXBwLnZpbSoKK3BhcmFncmFwaAltb3Rpb24udHh0CS8qcGFyYWdyYXBoKgorcGFzY2FsLXN5bnRheAlzeW50YXgudHh0CS8qcGFzY2FsLXN5bnRheCoKK3Bhc2NhbC52aW0Jc3ludGF4LnR4dAkvKnBhc2NhbC52aW0qCitwYXR0ZXJuCXBhdHRlcm4udHh0CS8qcGF0dGVybioKK3BhdHRlcm4tYXRvbXMJcGF0dGVybi50eHQJLypwYXR0ZXJuLWF0b21zKgorcGF0dGVybi1tdWx0aS1ieXRlCXBhdHRlcm4udHh0CS8qcGF0dGVybi1tdWx0aS1ieXRlKgorcGF0dGVybi1tdWx0aS1pdGVtcwlwYXR0ZXJuLnR4dAkvKnBhdHRlcm4tbXVsdGktaXRlbXMqCitwYXR0ZXJuLW92ZXJ2aWV3CXBhdHRlcm4udHh0CS8qcGF0dGVybi1vdmVydmlldyoKK3BhdHRlcm4tc2VhcmNoZXMJcGF0dGVybi50eHQJLypwYXR0ZXJuLXNlYXJjaGVzKgorcGF0dGVybi50eHQJcGF0dGVybi50eHQJLypwYXR0ZXJuLnR4dCoKK3BlcmwJaWZfcGVybC50eHQJLypwZXJsKgorcGVybC1BcHBlbmQJaWZfcGVybC50eHQJLypwZXJsLUFwcGVuZCoKK3BlcmwtQnVmZmVyCWlmX3BlcmwudHh0CS8qcGVybC1CdWZmZXIqCitwZXJsLUJ1ZmZlcnMJaWZfcGVybC50eHQJLypwZXJsLUJ1ZmZlcnMqCitwZXJsLUNvdW50CWlmX3BlcmwudHh0CS8qcGVybC1Db3VudCoKK3BlcmwtRGVsZXRlCWlmX3BlcmwudHh0CS8qcGVybC1EZWxldGUqCitwZXJsLURvQ29tbWFuZAlpZl9wZXJsLnR4dAkvKnBlcmwtRG9Db21tYW5kKgorcGVybC1FdmFsCWlmX3BlcmwudHh0CS8qcGVybC1FdmFsKgorcGVybC1HZXQJaWZfcGVybC50eHQJLypwZXJsLUdldCoKK3BlcmwtR2V0Q3Vyc29yCWlmX3BlcmwudHh0CS8qcGVybC1HZXRDdXJzb3IqCitwZXJsLU1zZwlpZl9wZXJsLnR4dAkvKnBlcmwtTXNnKgorcGVybC1OYW1lCWlmX3BlcmwudHh0CS8qcGVybC1OYW1lKgorcGVybC1OdW1iZXIJaWZfcGVybC50eHQJLypwZXJsLU51bWJlcioKK3BlcmwtU2V0CWlmX3BlcmwudHh0CS8qcGVybC1TZXQqCitwZXJsLVNldEhlaWdodAlpZl9wZXJsLnR4dAkvKnBlcmwtU2V0SGVpZ2h0KgorcGVybC1TZXRPcHRpb24JaWZfcGVybC50eHQJLypwZXJsLVNldE9wdGlvbioKK3BlcmwtV2luZG93cwlpZl9wZXJsLnR4dAkvKnBlcmwtV2luZG93cyoKK3BlcmwtY29tcGlsaW5nCWlmX3BlcmwudHh0CS8qcGVybC1jb21waWxpbmcqCitwZXJsLWVkaXRpbmcJaWZfcGVybC50eHQJLypwZXJsLWVkaXRpbmcqCitwZXJsLW92ZXJ2aWV3CWlmX3BlcmwudHh0CS8qcGVybC1vdmVydmlldyoKK3BlcmwtcGF0dGVybnMJcGF0dGVybi50eHQJLypwZXJsLXBhdHRlcm5zKgorcGVybC1zeW50YXgJc3ludGF4LnR4dAkvKnBlcmwtc3ludGF4KgorcGVybC11c2luZwlpZl9wZXJsLnR4dAkvKnBlcmwtdXNpbmcqCitwZXJsLnZpbQlzeW50YXgudHh0CS8qcGVybC52aW0qCitwaG90b24tZm9udHMJb3NfcW54LnR4dAkvKnBob3Rvbi1mb250cyoKK3Bob3Rvbi1ndWkJb3NfcW54LnR4dAkvKnBob3Rvbi1ndWkqCitwaHAtc3ludGF4CXN5bnRheC50eHQJLypwaHAtc3ludGF4KgorcGhwLnZpbQlzeW50YXgudHh0CS8qcGhwLnZpbSoKK3BocDMtc3ludGF4CXN5bnRheC50eHQJLypwaHAzLXN5bnRheCoKK3BocDMudmltCXN5bnRheC50eHQJLypwaHAzLnZpbSoKK3BodG1sLXN5bnRheAlzeW50YXgudHh0CS8qcGh0bWwtc3ludGF4KgorcGh0bWwudmltCXN5bnRheC50eHQJLypwaHRtbC52aW0qCitwaV9leHBsLnR4dAlwaV9leHBsLnR4dAkvKnBpX2V4cGwudHh0KgorcGlfZ3ppcC50eHQJcGlfZ3ppcC50eHQJLypwaV9nemlwLnR4dCoKK3BpX25ldHJ3LnR4dAlwaV9uZXRydy50eHQJLypwaV9uZXRydy50eHQqCitwaV9zcGVjLnR4dAlwaV9zcGVjLnR4dAkvKnBpX3NwZWMudHh0KgorcGx1Z2luCXVzcl8wNS50eHQJLypwbHVnaW4qCitwbHVnaW4tZGV0YWlscwlmaWxldHlwZS50eHQJLypwbHVnaW4tZGV0YWlscyoKK3BsdWdpbi1maWxldHlwZQl1c3JfNDEudHh0CS8qcGx1Z2luLWZpbGV0eXBlKgorcGx1Z2luLXNwZWNpYWwJdXNyXzQxLnR4dAkvKnBsdWdpbi1zcGVjaWFsKgorcG9wdXAtbWVudQlndWkudHh0CS8qcG9wdXAtbWVudSoKK3BvcHVwLW1lbnUtYWRkZWQJdmVyc2lvbjUudHh0CS8qcG9wdXAtbWVudS1hZGRlZCoKK3BvcnRzLTUuMgl2ZXJzaW9uNS50eHQJLypwb3J0cy01LjIqCitwb3J0cy02CXZlcnNpb242LnR4dAkvKnBvcnRzLTYqCitwb3N0c2NyLXN5bnRheAlzeW50YXgudHh0CS8qcG9zdHNjci1zeW50YXgqCitwb3N0c2NyLnZpbQlzeW50YXgudHh0CS8qcG9zdHNjci52aW0qCitwb3N0c2NyaXB0LXByaW50LWVuY29kaW5nCXZhcmlvdXMudHh0CS8qcG9zdHNjcmlwdC1wcmludC1lbmNvZGluZyoKK3Bvc3RzY3JpcHQtcHJpbnQtdHJvdWJsZQl2YXJpb3VzLnR4dAkvKnBvc3RzY3JpcHQtcHJpbnQtdHJvdWJsZSoKK3Bvc3RzY3JpcHQtcHJpbnQtdXRpbAl2YXJpb3VzLnR4dAkvKnBvc3RzY3JpcHQtcHJpbnQtdXRpbCoKK3Bvc3RzY3JpcHQtcHJpbnRpbmcJdmFyaW91cy50eHQJLypwb3N0c2NyaXB0LXByaW50aW5nKgorcHB3aXotc3ludGF4CXN5bnRheC50eHQJLypwcHdpei1zeW50YXgqCitwcHdpei52aW0Jc3ludGF4LnR4dAkvKnBwd2l6LnZpbSoKK3ByZXNzLWVudGVyCW1lc3NhZ2UudHh0CS8qcHJlc3MtZW50ZXIqCitwcmVzcy1yZXR1cm4JbWVzc2FnZS50eHQJLypwcmVzcy1yZXR1cm4qCitwcmV2Y291bnQtdmFyaWFibGUJZXZhbC50eHQJLypwcmV2Y291bnQtdmFyaWFibGUqCitwcmV2aWV3LXdpbmRvdwl3aW5kb3dzLnR4dAkvKnByZXZpZXctd2luZG93KgorcHJldm5vbmJsYW5rKCkJZXZhbC50eHQJLypwcmV2bm9uYmxhbmsoKSoKK3ByaW50Y2FwLXN5bnRheAlzeW50YXgudHh0CS8qcHJpbnRjYXAtc3ludGF4KgorcHJpbnRpbmcJdmFyaW91cy50eHQJLypwcmludGluZyoKK3ByaW50aW5nLWZvcm1mZWVkCXZhcmlvdXMudHh0CS8qcHJpbnRpbmctZm9ybWZlZWQqCitwcm9nbmFtZS12YXJpYWJsZQlldmFsLnR4dAkvKnByb2duYW1lLXZhcmlhYmxlKgorcHJvZ3Jlc3Mtc3ludGF4CXN5bnRheC50eHQJLypwcm9ncmVzcy1zeW50YXgqCitwcm9ncmVzcy52aW0Jc3ludGF4LnR4dAkvKnByb2dyZXNzLnZpbSoKK3B0Y2FwLXN5bnRheAlzeW50YXgudHh0CS8qcHRjYXAtc3ludGF4KgorcHRjYXAudmltCXN5bnRheC50eHQJLypwdGNhcC52aW0qCitwdGVybS1tb3VzZQlvcHRpb25zLnR4dAkvKnB0ZXJtLW1vdXNlKgorcHV0CWNoYW5nZS50eHQJLypwdXQqCitwdXQtVmlzdWFsLW1vZGUJY2hhbmdlLnR4dAkvKnB1dC1WaXN1YWwtbW9kZSoKK3B5dGhvbglpZl9weXRoLnR4dAkvKnB5dGhvbioKK3B5dGhvbi1idWZmZXIJaWZfcHl0aC50eHQJLypweXRob24tYnVmZmVyKgorcHl0aG9uLWJ1ZmZlcnMJaWZfcHl0aC50eHQJLypweXRob24tYnVmZmVycyoKK3B5dGhvbi1jb21tYW5kCWlmX3B5dGgudHh0CS8qcHl0aG9uLWNvbW1hbmQqCitweXRob24tY29tbWFuZHMJaWZfcHl0aC50eHQJLypweXRob24tY29tbWFuZHMqCitweXRob24tY3VycmVudAlpZl9weXRoLnR4dAkvKnB5dGhvbi1jdXJyZW50KgorcHl0aG9uLWVycm9yCWlmX3B5dGgudHh0CS8qcHl0aG9uLWVycm9yKgorcHl0aG9uLWV2YWwJaWZfcHl0aC50eHQJLypweXRob24tZXZhbCoKK3B5dGhvbi1leGFtcGxlcwlpZl9weXRoLnR4dAkvKnB5dGhvbi1leGFtcGxlcyoKK3B5dGhvbi1pbnB1dAlpZl9weXRoLnR4dAkvKnB5dGhvbi1pbnB1dCoKK3B5dGhvbi1vdXRwdXQJaWZfcHl0aC50eHQJLypweXRob24tb3V0cHV0KgorcHl0aG9uLXJhbmdlCWlmX3B5dGgudHh0CS8qcHl0aG9uLXJhbmdlKgorcHl0aG9uLXN5bnRheAlzeW50YXgudHh0CS8qcHl0aG9uLXN5bnRheCoKK3B5dGhvbi12aW0JaWZfcHl0aC50eHQJLypweXRob24tdmltKgorcHl0aG9uLXdpbmRvdwlpZl9weXRoLnR4dAkvKnB5dGhvbi13aW5kb3cqCitweXRob24td2luZG93cwlpZl9weXRoLnR4dAkvKnB5dGhvbi13aW5kb3dzKgorcHl0aG9uLnZpbQlzeW50YXgudHh0CS8qcHl0aG9uLnZpbSoKK3EJcmVwZWF0LnR4dAkvKnEqCitxLwljbWRsaW5lLnR4dAkvKnFcLyoKK3E6CWNtZGxpbmUudHh0CS8qcToqCitxPwljbWRsaW5lLnR4dAkvKnE/KgorcW54CW9zX3FueC50eHQJLypxbngqCitxbngtY29tcGlsaW5nCW9zX3FueC50eHQJLypxbngtY29tcGlsaW5nKgorcW54LWdlbmVyYWwJb3NfcW54LnR4dAkvKnFueC1nZW5lcmFsKgorcW54LXRlcm1pbmFsCW9zX3FueC50eHQJLypxbngtdGVybWluYWwqCitxdWFrZS1zeW50YXgJc3ludGF4LnR4dAkvKnF1YWtlLXN5bnRheCoKK3F1YWtlLnZpbQlzeW50YXgudHh0CS8qcXVha2UudmltKgorcXVpY2tmaXgJcXVpY2tmaXgudHh0CS8qcXVpY2tmaXgqCitxdWlja2ZpeC02CXZlcnNpb242LnR4dAkvKnF1aWNrZml4LTYqCitxdWlja2ZpeC1kaXJlY3Rvcnktc3RhY2sJcXVpY2tmaXgudHh0CS8qcXVpY2tmaXgtZGlyZWN0b3J5LXN0YWNrKgorcXVpY2tmaXgtZXJyb3ItbGlzdHMJcXVpY2tmaXgudHh0CS8qcXVpY2tmaXgtZXJyb3ItbGlzdHMqCitxdWlja2ZpeC1tYW54CXF1aWNrZml4LnR4dAkvKnF1aWNrZml4LW1hbngqCitxdWlja2ZpeC12YWxpZAlxdWlja2ZpeC50eHQJLypxdWlja2ZpeC12YWxpZCoKK3F1aWNrZml4LXdpbmRvdwlxdWlja2ZpeC50eHQJLypxdWlja2ZpeC13aW5kb3cqCitxdWlja2ZpeC50eHQJcXVpY2tmaXgudHh0CS8qcXVpY2tmaXgudHh0KgorcXVpY2tyZWYJcXVpY2tyZWYudHh0CS8qcXVpY2tyZWYqCitxdWlja3JlZi50eHQJcXVpY2tyZWYudHh0CS8qcXVpY2tyZWYudHh0KgorcXVvdGUJY2hhbmdlLnR4dAkvKnF1b3RlKgorcXVvdGUjCWNoYW5nZS50eHQJLypxdW90ZSMqCitxdW90ZSUJY2hhbmdlLnR4dAkvKnF1b3RlJSoKK3F1b3RlKwlndWlfeDExLnR4dAkvKnF1b3RlKyoKK3F1b3RlLQljaGFuZ2UudHh0CS8qcXVvdGUtKgorcXVvdGUuCWNoYW5nZS50eHQJLypxdW90ZS4qCitxdW90ZS8JY2hhbmdlLnR4dAkvKnF1b3RlXC8qCitxdW90ZTAJY2hhbmdlLnR4dAkvKnF1b3RlMCoKK3F1b3RlMQljaGFuZ2UudHh0CS8qcXVvdGUxKgorcXVvdGUyCWNoYW5nZS50eHQJLypxdW90ZTIqCitxdW90ZTMJY2hhbmdlLnR4dAkvKnF1b3RlMyoKK3F1b3RlNAljaGFuZ2UudHh0CS8qcXVvdGU0KgorcXVvdGU5CWNoYW5nZS50eHQJLypxdW90ZTkqCitxdW90ZToJY2hhbmdlLnR4dAkvKnF1b3RlOioKK3F1b3RlPQljaGFuZ2UudHh0CS8qcXVvdGU9KgorcXVvdGVfCWNoYW5nZS50eHQJLypxdW90ZV8qCitxdW90ZV8jCWNoYW5nZS50eHQJLypxdW90ZV8jKgorcXVvdGVfJQljaGFuZ2UudHh0CS8qcXVvdGVfJSoKK3F1b3RlXy0JY2hhbmdlLnR4dAkvKnF1b3RlXy0qCitxdW90ZV8uCWNoYW5nZS50eHQJLypxdW90ZV8uKgorcXVvdGVfLwljaGFuZ2UudHh0CS8qcXVvdGVfXC8qCitxdW90ZV86CWNoYW5nZS50eHQJLypxdW90ZV86KgorcXVvdGVfPQljaGFuZ2UudHh0CS8qcXVvdGVfPSoKK3F1b3RlX2FscGhhCWNoYW5nZS50eHQJLypxdW90ZV9hbHBoYSoKK3F1b3RlX251bWJlcgljaGFuZ2UudHh0CS8qcXVvdGVfbnVtYmVyKgorcXVvdGVfcXVvdGUJY2hhbmdlLnR4dAkvKnF1b3RlX3F1b3RlKgorcXVvdGVffgljaGFuZ2UudHh0CS8qcXVvdGVffioKK3F1b3RlYQljaGFuZ2UudHh0CS8qcXVvdGVhKgorcXVvdGVjb21tYW5kcXVvdGUJaW50cm8udHh0CS8qcXVvdGVjb21tYW5kcXVvdGUqCitxdW90ZXBsdXMJZ3VpX3gxMS50eHQJLypxdW90ZXBsdXMqCitxdW90ZXF1b3RlCWNoYW5nZS50eHQJLypxdW90ZXF1b3RlKgorcXVvdGVzCXF1b3Rlcy50eHQJLypxdW90ZXMqCitxdW90ZXMudHh0CXF1b3Rlcy50eHQJLypxdW90ZXMudHh0KgorcXVvdGVzdGFyCWd1aS50eHQJLypxdW90ZXN0YXIqCitxdW90ZX4JY2hhbmdlLnR4dAkvKnF1b3RlfioKK3IJY2hhbmdlLnR4dAkvKnIqCityYXctdGVybWluYWwtbW9kZQl0ZXJtLnR4dAkvKnJhdy10ZXJtaW5hbC1tb2RlKgorcmNwCXBpX25ldHJ3LnR4dAkvKnJjcCoKK3JlYWQtbWVzc2FnZXMJaW5zZXJ0LnR4dAkvKnJlYWQtbWVzc2FnZXMqCityZWFkLW9ubHktc2hhcmUJZWRpdGluZy50eHQJLypyZWFkLW9ubHktc2hhcmUqCityZWFkLXN0ZGluCXZlcnNpb241LnR4dAkvKnJlYWQtc3RkaW4qCityZWFkbGluZS1zeW50YXgJc3ludGF4LnR4dAkvKnJlYWRsaW5lLXN5bnRheCoKK3JlYWRsaW5lLnZpbQlzeW50YXgudHh0CS8qcmVhZGxpbmUudmltKgorcmVjb3JkaW5nCXJlcGVhdC50eHQJLypyZWNvcmRpbmcqCityZWNvdmVyLnR4dAlyZWNvdmVyLnR4dAkvKnJlY292ZXIudHh0KgorcmVjb3ZlcnkJcmVjb3Zlci50eHQJLypyZWNvdmVyeSoKK3JlY3Vyc2l2ZV9tYXBwaW5nCW1hcC50eHQJLypyZWN1cnNpdmVfbWFwcGluZyoKK3JlZG8JdW5kby50eHQJLypyZWRvKgorcmVkby1yZWdpc3Rlcgl1bmRvLnR4dAkvKnJlZG8tcmVnaXN0ZXIqCityZWYJaW50cm8udHh0CS8qcmVmKgorcmVmZXJlbmNlCWludHJvLnR4dAkvKnJlZmVyZW5jZSoKK3JlZ2V4cAlwYXR0ZXJuLnR4dAkvKnJlZ2V4cCoKK3JlZ2V4cC1jaGFuZ2VzLTUuNAl2ZXJzaW9uNS50eHQJLypyZWdleHAtY2hhbmdlcy01LjQqCityZWdpc3RlcglzcG9uc29yLnR4dAkvKnJlZ2lzdGVyKgorcmVnaXN0ZXItZmFxCXNwb25zb3IudHh0CS8qcmVnaXN0ZXItZmFxKgorcmVnaXN0ZXItdmFyaWFibGUJZXZhbC50eHQJLypyZWdpc3Rlci12YXJpYWJsZSoKK3JlZ2lzdGVycwljaGFuZ2UudHh0CS8qcmVnaXN0ZXJzKgorcmVndWxhci1leHByZXNzaW9uCXBhdHRlcm4udHh0CS8qcmVndWxhci1leHByZXNzaW9uKgorcmVtb3RlLnR4dAlyZW1vdGUudHh0CS8qcmVtb3RlLnR4dCoKK3JlbW90ZV9leHByKCkJZXZhbC50eHQJLypyZW1vdGVfZXhwcigpKgorcmVtb3RlX2ZvcmVncm91bmQoKQlldmFsLnR4dAkvKnJlbW90ZV9mb3JlZ3JvdW5kKCkqCityZW1vdGVfcGVlaygpCWV2YWwudHh0CS8qcmVtb3RlX3BlZWsoKSoKK3JlbW90ZV9yZWFkKCkJZXZhbC50eHQJLypyZW1vdGVfcmVhZCgpKgorcmVtb3RlX3NlbmQoKQlldmFsLnR4dAkvKnJlbW90ZV9zZW5kKCkqCityZW1vdmUtZmlsZXR5cGUJZmlsZXR5cGUudHh0CS8qcmVtb3ZlLWZpbGV0eXBlKgorcmVtb3ZlLW9wdGlvbi1mbGFncwlvcHRpb25zLnR4dAkvKnJlbW92ZS1vcHRpb24tZmxhZ3MqCityZW5hbWUoKQlldmFsLnR4dAkvKnJlbmFtZSgpKgorcmVuYW1lLWZpbGVzCXRpcHMudHh0CS8qcmVuYW1lLWZpbGVzKgorcmVwZWF0LnR4dAlyZXBlYXQudHh0CS8qcmVwZWF0LnR4dCoKK3JlcGVhdGluZwlyZXBlYXQudHh0CS8qcmVwZWF0aW5nKgorcmVwbGFjaW5nCWNoYW5nZS50eHQJLypyZXBsYWNpbmcqCityZXNvbHZlKCkJZXZhbC50eHQJLypyZXNvbHZlKCkqCityZXN0b3JlLXBvc2l0aW9uCXRpcHMudHh0CS8qcmVzdG9yZS1wb3NpdGlvbioKK3Jlc3RyaWN0ZWQtbW9kZQlzdGFydGluZy50eHQJLypyZXN0cmljdGVkLW1vZGUqCityZXRhYi1leGFtcGxlCWNoYW5nZS50eHQJLypyZXRhYi1leGFtcGxlKgorcmV0aHJvdwlldmFsLnR4dAkvKnJldGhyb3cqCityZXh4LXN5bnRheAlzeW50YXgudHh0CS8qcmV4eC1zeW50YXgqCityZXh4LnZpbQlzeW50YXgudHh0CS8qcmV4eC52aW0qCityZ2IudHh0CWd1aV93MzIudHh0CS8qcmdiLnR4dCoKK3JndmlldwlzdGFydGluZy50eHQJLypyZ3ZpZXcqCityZ3ZpbQlzdGFydGluZy50eHQJLypyZ3ZpbSoKK3JpZ2h0LWp1c3RpZnkJY2hhbmdlLnR4dAkvKnJpZ2h0LWp1c3RpZnkqCityaWxlZnQJcmlsZWZ0LnR4dAkvKnJpbGVmdCoKK3JpbGVmdC50eHQJcmlsZWZ0LnR4dAkvKnJpbGVmdC50eHQqCityaXNjb3MJb3NfcmlzYy50eHQJLypyaXNjb3MqCityaXNjb3MtY29tbWFuZGxpbmUJb3NfcmlzYy50eHQJLypyaXNjb3MtY29tbWFuZGxpbmUqCityaXNjb3MtZmlsZXR5cGVzCW9zX3Jpc2MudHh0CS8qcmlzY29zLWZpbGV0eXBlcyoKK3Jpc2Nvcy1ndWkJb3NfcmlzYy50eHQJLypyaXNjb3MtZ3VpKgorcmlzY29zLWludGVycnVwdAlvc19yaXNjLnR4dAkvKnJpc2Nvcy1pbnRlcnJ1cHQqCityaXNjb3MtbG9jYXRpb25zCW9zX3Jpc2MudHh0CS8qcmlzY29zLWxvY2F0aW9ucyoKK3Jpc2Nvcy1tZW1vcnkJb3NfcmlzYy50eHQJLypyaXNjb3MtbWVtb3J5KgorcmlzY29zLW11bmdpbmcJb3NfcmlzYy50eHQJLypyaXNjb3MtbXVuZ2luZyoKK3Jpc2Nvcy1wb3J0aW5nCW9zX3Jpc2MudHh0CS8qcmlzY29zLXBvcnRpbmcqCityaXNjb3MtcmVtb3RlCW9zX3Jpc2MudHh0CS8qcmlzY29zLXJlbW90ZSoKK3Jpc2Nvcy1zaGVsbAlvc19yaXNjLnR4dAkvKnJpc2Nvcy1zaGVsbCoKK3Jpc2Nvcy10ZW1wLWZpbGVzCW9zX3Jpc2MudHh0CS8qcmlzY29zLXRlbXAtZmlsZXMqCityb3QxMwljaGFuZ2UudHh0CS8qcm90MTMqCityc3luYwlwaV9uZXRydy50eHQJLypyc3luYyoKK3J1YnkJaWZfcnVieS50eHQJLypydWJ5KgorcnVieS1idWZmZXIJaWZfcnVieS50eHQJLypydWJ5LWJ1ZmZlcioKK3J1YnktY29tbWFuZAlpZl9ydWJ5LnR4dAkvKnJ1YnktY29tbWFuZCoKK3J1YnktY29tbWFuZHMJaWZfcnVieS50eHQJLypydWJ5LWNvbW1hbmRzKgorcnVieS1ldmFsdWF0ZQlpZl9ydWJ5LnR4dAkvKnJ1YnktZXZhbHVhdGUqCitydWJ5LWdsb2JhbHMJaWZfcnVieS50eHQJLypydWJ5LWdsb2JhbHMqCitydWJ5LW1lc3NhZ2UJaWZfcnVieS50eHQJLypydWJ5LW1lc3NhZ2UqCitydWJ5LXNldF9vcHRpb24JaWZfcnVieS50eHQJLypydWJ5LXNldF9vcHRpb24qCitydWJ5LXN5bnRheAlzeW50YXgudHh0CS8qcnVieS1zeW50YXgqCitydWJ5LXZpbQlpZl9ydWJ5LnR4dAkvKnJ1YnktdmltKgorcnVieS13aW5kb3cJaWZfcnVieS50eHQJLypydWJ5LXdpbmRvdyoKK3J1YnkudmltCXN5bnRheC50eHQJLypydWJ5LnZpbSoKK3J1c3NpYW4JcnVzc2lhbi50eHQJLypydXNzaWFuKgorcnVzc2lhbi1pbnRybwlydXNzaWFuLnR4dAkvKnJ1c3NpYW4taW50cm8qCitydXNzaWFuLWlzc3VlcwlydXNzaWFuLnR4dAkvKnJ1c3NpYW4taXNzdWVzKgorcnVzc2lhbi1rZXltYXAJcnVzc2lhbi50eHQJLypydXNzaWFuLWtleW1hcCoKK3J1c3NpYW4tbDE4bglydXNzaWFuLnR4dAkvKnJ1c3NpYW4tbDE4bioKK3J1c3NpYW4udHh0CXJ1c3NpYW4udHh0CS8qcnVzc2lhbi50eHQqCitydmlldwlzdGFydGluZy50eHQJLypydmlldyoKK3J2aW0Jc3RhcnRpbmcudHh0CS8qcnZpbSoKK3J4dnQJc3ludGF4LnR4dAkvKnJ4dnQqCitzCWNoYW5nZS50eHQJLypzKgorcy9cJgljaGFuZ2UudHh0CS8qc1wvXFwmKgorcy9cMAljaGFuZ2UudHh0CS8qc1wvXFwwKgorcy9cMQljaGFuZ2UudHh0CS8qc1wvXFwxKgorcy9cMgljaGFuZ2UudHh0CS8qc1wvXFwyKgorcy9cMwljaGFuZ2UudHh0CS8qc1wvXFwzKgorcy9cOQljaGFuZ2UudHh0CS8qc1wvXFw5Kgorcy9cPENSPgljaGFuZ2UudHh0CS8qc1wvXFw8Q1I+Kgorcy9cRQljaGFuZ2UudHh0CS8qc1wvXFxFKgorcy9cTAljaGFuZ2UudHh0CS8qc1wvXFxMKgorcy9cVQljaGFuZ2UudHh0CS8qc1wvXFxVKgorcy9cXAljaGFuZ2UudHh0CS8qc1wvXFxcXCoKK3MvXGIJY2hhbmdlLnR4dAkvKnNcL1xcYioKK3MvXGUJY2hhbmdlLnR4dAkvKnNcL1xcZSoKK3MvXGwJY2hhbmdlLnR4dAkvKnNcL1xcbCoKK3MvXG4JY2hhbmdlLnR4dAkvKnNcL1xcbioKK3MvXHIJY2hhbmdlLnR4dAkvKnNcL1xccioKK3MvXHQJY2hhbmdlLnR4dAkvKnNcL1xcdCoKK3MvXHUJY2hhbmdlLnR4dAkvKnNcL1xcdSoKK3MvXH4JY2hhbmdlLnR4dAkvKnNcL1xcfioKK3M6dmFyCWV2YWwudHh0CS8qczp2YXIqCitzPENSPgljaGFuZ2UudHh0CS8qczxDUj4qCitzYW5kYm94CWV2YWwudHh0CS8qc2FuZGJveCoKK3NhdmUtZmlsZQllZGl0aW5nLnR4dAkvKnNhdmUtZmlsZSoKK3NhdmUtc2V0dGluZ3MJc3RhcnRpbmcudHh0CS8qc2F2ZS1zZXR0aW5ncyoKK3NjcAlwaV9uZXRydy50eHQJLypzY3AqCitzY3JpcHQtaGVyZQlpZl9wZXJsLnR4dAkvKnNjcmlwdC1oZXJlKgorc2NyaXB0LWxvY2FsCW1hcC50eHQJLypzY3JpcHQtbG9jYWwqCitzY3JpcHQtdmFyaWFibGUJZXZhbC50eHQJLypzY3JpcHQtdmFyaWFibGUqCitzY3JpcHRvdXQtY2hhbmdlZAl2ZXJzaW9uNC50eHQJLypzY3JpcHRvdXQtY2hhbmdlZCoKK3Njcm9sbC1iaW5kaW5nCXNjcm9sbC50eHQJLypzY3JvbGwtYmluZGluZyoKK3Njcm9sbC1jdXJzb3IJc2Nyb2xsLnR4dAkvKnNjcm9sbC1jdXJzb3IqCitzY3JvbGwtZG93bglzY3JvbGwudHh0CS8qc2Nyb2xsLWRvd24qCitzY3JvbGwtaG9yaXpvbnRhbAlzY3JvbGwudHh0CS8qc2Nyb2xsLWhvcml6b250YWwqCitzY3JvbGwtaW5zZXJ0CXRpcHMudHh0CS8qc2Nyb2xsLWluc2VydCoKK3Njcm9sbC1tb3VzZS13aGVlbAlzY3JvbGwudHh0CS8qc2Nyb2xsLW1vdXNlLXdoZWVsKgorc2Nyb2xsLXJlZ2lvbgl0ZXJtLnR4dAkvKnNjcm9sbC1yZWdpb24qCitzY3JvbGwtc21vb3RoCXRpcHMudHh0CS8qc2Nyb2xsLXNtb290aCoKK3Njcm9sbC11cAlzY3JvbGwudHh0CS8qc2Nyb2xsLXVwKgorc2Nyb2xsLnR4dAlzY3JvbGwudHh0CS8qc2Nyb2xsLnR4dCoKK3Njcm9sbGJpbmQtcXVpY2thZGoJc2Nyb2xsLnR4dAkvKnNjcm9sbGJpbmQtcXVpY2thZGoqCitzY3JvbGxiaW5kLXJlbGF0aXZlCXNjcm9sbC50eHQJLypzY3JvbGxiaW5kLXJlbGF0aXZlKgorc2Nyb2xsaW5nCXNjcm9sbC50eHQJLypzY3JvbGxpbmcqCitzZGwtc3ludGF4CXN5bnRheC50eHQJLypzZGwtc3ludGF4Kgorc2RsLnZpbQlzeW50YXgudHh0CS8qc2RsLnZpbSoKK3NlYXJjaCgpCWV2YWwudHh0CS8qc2VhcmNoKCkqCitzZWFyY2gtY29tbWFuZHMJcGF0dGVybi50eHQJLypzZWFyY2gtY29tbWFuZHMqCitzZWFyY2gtb2Zmc2V0CXBhdHRlcm4udHh0CS8qc2VhcmNoLW9mZnNldCoKK3NlYXJjaC1wYXR0ZXJuCXBhdHRlcm4udHh0CS8qc2VhcmNoLXBhdHRlcm4qCitzZWFyY2gtcmFuZ2UJcGF0dGVybi50eHQJLypzZWFyY2gtcmFuZ2UqCitzZWFyY2hwYWlyKCkJZXZhbC50eHQJLypzZWFyY2hwYWlyKCkqCitzZWN0aW9uCW1vdGlvbi50eHQJLypzZWN0aW9uKgorc2VkLXN5bnRheAlzeW50YXgudHh0CS8qc2VkLXN5bnRheCoKK3NlZC52aW0Jc3ludGF4LnR4dAkvKnNlZC52aW0qCitzZW5kLW1vbmV5CXNwb25zb3IudHh0CS8qc2VuZC1tb25leSoKK3NlbmQtdG8tbWVudQlndWlfdzMyLnR4dAkvKnNlbmQtdG8tbWVudSoKK3NlbmR0bwlndWlfdzMyLnR4dAkvKnNlbmR0byoKK3NlbnRlbmNlCW1vdGlvbi50eHQJLypzZW50ZW5jZSoKK3NlcnZlcjJjbGllbnQoKQlldmFsLnR4dAkvKnNlcnZlcjJjbGllbnQoKSoKK3NlcnZlcmxpc3QoKQlldmFsLnR4dAkvKnNlcnZlcmxpc3QoKSoKK3NlcnZlcm5hbWUtdmFyaWFibGUJZXZhbC50eHQJLypzZXJ2ZXJuYW1lLXZhcmlhYmxlKgorc2Vzc2lvbi1maWxlCXN0YXJ0aW5nLnR4dAkvKnNlc3Npb24tZmlsZSoKK3NldC1vcHRpb24Jb3B0aW9ucy50eHQJLypzZXQtb3B0aW9uKgorc2V0YnVmdmFyKCkJZXZhbC50eHQJLypzZXRidWZ2YXIoKSoKK3NldGNtZHBvcygpCWV2YWwudHh0CS8qc2V0Y21kcG9zKCkqCitzZXRsaW5lKCkJZXZhbC50eHQJLypzZXRsaW5lKCkqCitzZXRyZWcoKQlldmFsLnR4dAkvKnNldHJlZygpKgorc2V0d2ludmFyKCkJZXZhbC50eHQJLypzZXR3aW52YXIoKSoKK3NmdHAJcGlfbmV0cncudHh0CS8qc2Z0cCoKK3NnbWwtc3ludGF4CXN5bnRheC50eHQJLypzZ21sLXN5bnRheCoKK3NnbWwudmltCXN5bnRheC50eHQJLypzZ21sLnZpbSoKK3NoLXN5bnRheAlzeW50YXgudHh0CS8qc2gtc3ludGF4Kgorc2gudmltCXN5bnRheC50eHQJLypzaC52aW0qCitzaGVsbC13aW5kb3cJdGlwcy50eHQJLypzaGVsbC13aW5kb3cqCitzaGVsbF9lcnJvci12YXJpYWJsZQlldmFsLnR4dAkvKnNoZWxsX2Vycm9yLXZhcmlhYmxlKgorc2hpZnQJaW50cm8udHh0CS8qc2hpZnQqCitzaGlmdC1sZWZ0LXJpZ2h0CWNoYW5nZS50eHQJLypzaGlmdC1sZWZ0LXJpZ2h0Kgorc2hvcnQtbmFtZS1jaGFuZ2VkCXZlcnNpb240LnR4dAkvKnNob3J0LW5hbWUtY2hhbmdlZCoKK3Nob3dpbmctbWVudXMJZ3VpLnR4dAkvKnNob3dpbmctbWVudXMqCitzaWduLWNvbW1hbmRzCXNpZ24udHh0CS8qc2lnbi1jb21tYW5kcyoKK3NpZ24taW50cm8Jc2lnbi50eHQJLypzaWduLWludHJvKgorc2lnbi1zdXBwb3J0CXNpZ24udHh0CS8qc2lnbi1zdXBwb3J0Kgorc2lnbi50eHQJc2lnbi50eHQJLypzaWduLnR4dCoKK3NpZ25zCXNpZ24udHh0CS8qc2lnbnMqCitzaW1wbGUtY2hhbmdlCWNoYW5nZS50eHQJLypzaW1wbGUtY2hhbmdlKgorc2ltcGxpZnkoKQlldmFsLnR4dAkvKnNpbXBsaWZ5KCkqCitzaW5nbGUtcmVwZWF0CXJlcGVhdC50eHQJLypzaW5nbGUtcmVwZWF0Kgorc2tlbGV0b24JYXV0b2NtZC50eHQJLypza2VsZXRvbioKK3Nsb3ctZmFzdC10ZXJtaW5hbAl0ZXJtLnR4dAkvKnNsb3ctZmFzdC10ZXJtaW5hbCoKK3Nsb3ctc3RhcnQJc3RhcnRpbmcudHh0CS8qc2xvdy1zdGFydCoKK3Nsb3ctdGVybWluYWwJdGVybS50eHQJLypzbG93LXRlcm1pbmFsKgorc25pZmYJaWZfc25pZmYudHh0CS8qc25pZmYqCitzbmlmZi1jb21tYW5kcwlpZl9zbmlmZi50eHQJLypzbmlmZi1jb21tYW5kcyoKK3NuaWZmLWNvbXBpbGluZwlpZl9zbmlmZi50eHQJLypzbmlmZi1jb21waWxpbmcqCitzbmlmZi1pbnRybwlpZl9zbmlmZi50eHQJLypzbmlmZi1pbnRybyoKK3NwYWNlCWludHJvLnR4dAkvKnNwYWNlKgorc3BlYy1jdXN0b21pemluZwlwaV9zcGVjLnR4dAkvKnNwZWMtY3VzdG9taXppbmcqCitzcGVjLWhvdy10by11c2UtaXQJcGlfc3BlYy50eHQJLypzcGVjLWhvdy10by11c2UtaXQqCitzcGVjLXBsdWdpbglmaWxldHlwZS50eHQJLypzcGVjLXBsdWdpbioKK3NwZWMtc2V0dGluZy1hLW1hcAlwaV9zcGVjLnR4dAkvKnNwZWMtc2V0dGluZy1hLW1hcCoKK3NwZWNfY2hnbG9nX2Zvcm1hdAlwaV9zcGVjLnR4dAkvKnNwZWNfY2hnbG9nX2Zvcm1hdCoKK3NwZWNfY2hnbG9nX3ByZXBlbmQJcGlfc3BlYy50eHQJLypzcGVjX2NoZ2xvZ19wcmVwZW5kKgorc3BlY19jaGdsb2dfcmVsZWFzZV9pbmZvCXBpX3NwZWMudHh0CS8qc3BlY19jaGdsb2dfcmVsZWFzZV9pbmZvKgorc3BlY2lhbC1idWZmZXJzCXdpbmRvd3MudHh0CS8qc3BlY2lhbC1idWZmZXJzKgorc3BlZWQtdXAJdGlwcy50eHQJLypzcGVlZC11cCoKK3NwbGl0ZmluZAl3aW5kb3dzLnR4dAkvKnNwbGl0ZmluZCoKK3NwbGl0dmlldwl3aW5kb3dzLnR4dAkvKnNwbGl0dmlldyoKK3Nwb25zb3IJc3BvbnNvci50eHQJLypzcG9uc29yKgorc3BvbnNvci1mYXEJc3BvbnNvci50eHQJLypzcG9uc29yLWZhcSoKK3Nwb25zb3IudHh0CXNwb25zb3IudHh0CS8qc3BvbnNvci50eHQqCitzcG9vbglvc191bml4LnR4dAkvKnNwb29uKgorc3B1cC1zeW50YXgJc3ludGF4LnR4dAkvKnNwdXAtc3ludGF4Kgorc3B1cC52aW0Jc3ludGF4LnR4dAkvKnNwdXAudmltKgorc3NjYW5mCWV2YWwudHh0CS8qc3NjYW5mKgorc3RhbmRhcmQtcGx1Z2luCXVzcl8wNS50eHQJLypzdGFuZGFyZC1wbHVnaW4qCitzdGFuZGFyZC1wbHVnaW4tbGlzdAloZWxwLnR4dAkvKnN0YW5kYXJkLXBsdWdpbi1saXN0Kgorc3RhcglwYXR0ZXJuLnR4dAkvKnN0YXIqCitzdGFydC1vZi1maWxlCXBhdHRlcm4udHh0CS8qc3RhcnQtb2YtZmlsZSoKK3N0YXJ0aW5nCXN0YXJ0aW5nLnR4dAkvKnN0YXJ0aW5nKgorc3RhcnRpbmctYW1pZ2EJc3RhcnRpbmcudHh0CS8qc3RhcnRpbmctYW1pZ2EqCitzdGFydGluZy50eHQJc3RhcnRpbmcudHh0CS8qc3RhcnRpbmcudHh0Kgorc3RhcnR1cAlzdGFydGluZy50eHQJLypzdGFydHVwKgorc3RhcnR1cC1vcHRpb25zCXN0YXJ0aW5nLnR4dAkvKnN0YXJ0dXAtb3B0aW9ucyoKK3N0YXJ0dXAtdGVybWluYWwJdGVybS50eHQJLypzdGFydHVwLXRlcm1pbmFsKgorc3RhdGljLXRhZwl0YWdzcmNoLnR4dAkvKnN0YXRpYy10YWcqCitzdGF0dXMtbGluZQl3aW5kb3dzLnR4dAkvKnN0YXR1cy1saW5lKgorc3RhdHVzbXNnLXZhcmlhYmxlCWV2YWwudHh0CS8qc3RhdHVzbXNnLXZhcmlhYmxlKgorc3RyZnRpbWUoKQlldmFsLnR4dAkvKnN0cmZ0aW1lKCkqCitzdHJpZHgoKQlldmFsLnR4dAkvKnN0cmlkeCgpKgorc3RyaW5nLW1hdGNoCWV2YWwudHh0CS8qc3RyaW5nLW1hdGNoKgorc3RybGVuKCkJZXZhbC50eHQJLypzdHJsZW4oKSoKK3N0cnBhcnQoKQlldmFsLnR4dAkvKnN0cnBhcnQoKSoKK3N0cnJpZHgoKQlldmFsLnR4dAkvKnN0cnJpZHgoKSoKK3N0cnRyYW5zKCkJZXZhbC50eHQJLypzdHJ0cmFucygpKgorc3R5bGUtY2hhbmdlcwlkZXZlbG9wLnR4dAkvKnN0eWxlLWNoYW5nZXMqCitzdHlsZS1leGFtcGxlcwlkZXZlbG9wLnR4dAkvKnN0eWxlLWV4YW1wbGVzKgorc3R5bGUtZnVuY3Rpb25zCWRldmVsb3AudHh0CS8qc3R5bGUtZnVuY3Rpb25zKgorc3R5bGUtbmFtZXMJZGV2ZWxvcC50eHQJLypzdHlsZS1uYW1lcyoKK3N0eWxlLXNwYWNlcwlkZXZlbG9wLnR4dAkvKnN0eWxlLXNwYWNlcyoKK3N0eWxlLXZhcmlvdXMJZGV2ZWxvcC50eHQJLypzdHlsZS12YXJpb3VzKgorc3ViLW1lbnUtcHJpb3JpdHkJZ3VpLnR4dAkvKnN1Yi1tZW51LXByaW9yaXR5Kgorc3ViLXJlcGxhY2UtZXhwcmVzc2lvbgljaGFuZ2UudHh0CS8qc3ViLXJlcGxhY2UtZXhwcmVzc2lvbioKK3N1Yi1yZXBsYWNlLXNwZWNpYWwJY2hhbmdlLnR4dAkvKnN1Yi1yZXBsYWNlLXNwZWNpYWwqCitzdWJtYXRjaCgpCWV2YWwudHh0CS8qc3VibWF0Y2goKSoKK3N1YnNjcmliZS1tYWlsbGlzdAlpbnRyby50eHQJLypzdWJzY3JpYmUtbWFpbGxpc3QqCitzdWJzdGl0dXRlKCkJZXZhbC50eHQJLypzdWJzdGl0dXRlKCkqCitzdWJzdGl0dXRlLUNSCXZlcnNpb242LnR4dAkvKnN1YnN0aXR1dGUtQ1IqCitzdWZmaXhlcwljbWRsaW5lLnR4dAkvKnN1ZmZpeGVzKgorc3VzcGVuZAlzdGFydGluZy50eHQJLypzdXNwZW5kKgorc3dhcC1maWxlCXJlY292ZXIudHh0CS8qc3dhcC1maWxlKgorc3dhcGZpbGUtY2hhbmdlZAl2ZXJzaW9uNC50eHQJLypzd2FwZmlsZS1jaGFuZ2VkKgorc3luLXN5bmMtZ3JvdXBoZXJlCXN5bnRheC50eHQJLypzeW4tc3luYy1ncm91cGhlcmUqCitzeW4tc3luYy1ncm91cHRoZXJlCXN5bnRheC50eHQJLypzeW4tc3luYy1ncm91cHRoZXJlKgorc3luSUQoKQlldmFsLnR4dAkvKnN5bklEKCkqCitzeW5JRGF0dHIoKQlldmFsLnR4dAkvKnN5bklEYXR0cigpKgorc3luSUR0cmFucygpCWV2YWwudHh0CS8qc3luSUR0cmFucygpKgorc3luY2JpbmQJc2Nyb2xsLnR4dAkvKnN5bmNiaW5kKgorc3luY29sb3IJc3ludGF4LnR4dAkvKnN5bmNvbG9yKgorc3lubG9hZC0xCXN5bnRheC50eHQJLypzeW5sb2FkLTEqCitzeW5sb2FkLTIJc3ludGF4LnR4dAkvKnN5bmxvYWQtMioKK3N5bmxvYWQtMwlzeW50YXgudHh0CS8qc3lubG9hZC0zKgorc3lubG9hZC00CXN5bnRheC50eHQJLypzeW5sb2FkLTQqCitzeW5sb2FkLTUJc3ludGF4LnR4dAkvKnN5bmxvYWQtNSoKK3N5bmxvYWQtNglzeW50YXgudHh0CS8qc3lubG9hZC02Kgorc3ludGF4CXN5bnRheC50eHQJLypzeW50YXgqCitzeW50YXgtaGlnaGxpZ2h0aW5nCXN5bnRheC50eHQJLypzeW50YXgtaGlnaGxpZ2h0aW5nKgorc3ludGF4LWxvYWRpbmcJc3ludGF4LnR4dAkvKnN5bnRheC1sb2FkaW5nKgorc3ludGF4LXByaW50aW5nCXVzcl8wNi50eHQJLypzeW50YXgtcHJpbnRpbmcqCitzeW50YXgudHh0CXN5bnRheC50eHQJLypzeW50YXgudHh0Kgorc3ludGF4X2NtZAlzeW50YXgudHh0CS8qc3ludGF4X2NtZCoKK3N5cy1maWxlLWxpc3QJaGVscC50eHQJLypzeXMtZmlsZS1saXN0Kgorc3lzdGVtKCkJZXZhbC50eHQJLypzeXN0ZW0oKSoKK3N5c3RlbS12aW1yYwlzdGFydGluZy50eHQJLypzeXN0ZW0tdmltcmMqCitzfgljaGFuZ2UudHh0CS8qc34qCit0CW1vdGlvbi50eHQJLyp0KgordF8jMgl0ZXJtLnR4dAkvKnRfIzIqCit0XyM0CXRlcm0udHh0CS8qdF8jNCoKK3RfJTEJdGVybS50eHQJLyp0XyUxKgordF8laQl0ZXJtLnR4dAkvKnRfJWkqCit0XyY4CXRlcm0udHh0CS8qdF8mOCoKK3RfQDcJdGVybS50eHQJLyp0X0A3KgordF9BQgl0ZXJtLnR4dAkvKnRfQUIqCit0X0FGCXRlcm0udHh0CS8qdF9BRioKK3RfQUwJdGVybS50eHQJLyp0X0FMKgordF9DUwl0ZXJtLnR4dAkvKnRfQ1MqCit0X0NWCXRlcm0udHh0CS8qdF9DVioKK3RfQ28JdGVybS50eHQJLyp0X0NvKgordF9ETAl0ZXJtLnR4dAkvKnRfREwqCit0X0YxCXRlcm0udHh0CS8qdF9GMSoKK3RfRjIJdGVybS50eHQJLyp0X0YyKgordF9GMwl0ZXJtLnR4dAkvKnRfRjMqCit0X0Y0CXRlcm0udHh0CS8qdF9GNCoKK3RfRjUJdGVybS50eHQJLyp0X0Y1KgordF9GNgl0ZXJtLnR4dAkvKnRfRjYqCit0X0Y3CXRlcm0udHh0CS8qdF9GNyoKK3RfRjgJdGVybS50eHQJLyp0X0Y4KgordF9GOQl0ZXJtLnR4dAkvKnRfRjkqCit0X0lFCXRlcm0udHh0CS8qdF9JRSoKK3RfSVMJdGVybS50eHQJLyp0X0lTKgordF9LMQl0ZXJtLnR4dAkvKnRfSzEqCit0X0szCXRlcm0udHh0CS8qdF9LMyoKK3RfSzQJdGVybS50eHQJLyp0X0s0KgordF9LNQl0ZXJtLnR4dAkvKnRfSzUqCit0X0s2CXRlcm0udHh0CS8qdF9LNioKK3RfSzcJdGVybS50eHQJLyp0X0s3KgordF9LOAl0ZXJtLnR4dAkvKnRfSzgqCit0X0s5CXRlcm0udHh0CS8qdF9LOSoKK3RfS0EJdGVybS50eHQJLyp0X0tBKgordF9LQgl0ZXJtLnR4dAkvKnRfS0IqCit0X0tDCXRlcm0udHh0CS8qdF9LQyoKK3RfS0QJdGVybS50eHQJLyp0X0tEKgordF9LRQl0ZXJtLnR4dAkvKnRfS0UqCit0X0tGCXRlcm0udHh0CS8qdF9LRioKK3RfS0cJdGVybS50eHQJLyp0X0tHKgordF9LSAl0ZXJtLnR4dAkvKnRfS0gqCit0X0tJCXRlcm0udHh0CS8qdF9LSSoKK3RfS0oJdGVybS50eHQJLyp0X0tKKgordF9LSwl0ZXJtLnR4dAkvKnRfS0sqCit0X0tMCXRlcm0udHh0CS8qdF9LTCoKK3RfUkkJdGVybS50eHQJLyp0X1JJKgordF9SVgl0ZXJtLnR4dAkvKnRfUlYqCit0X1NiCXRlcm0udHh0CS8qdF9TYioKK3RfU2YJdGVybS50eHQJLyp0X1NmKgordF9XUAl0ZXJtLnR4dAkvKnRfV1AqCit0X1dTCXRlcm0udHh0CS8qdF9XUyoKK3RfWkgJdGVybS50eHQJLyp0X1pIKgordF9aUgl0ZXJtLnR4dAkvKnRfWlIqCit0X2FsCXRlcm0udHh0CS8qdF9hbCoKK3RfYmMJdGVybS50eHQJLyp0X2JjKgordF9jZAl0ZXJtLnR4dAkvKnRfY2QqCit0X2NkbAl2ZXJzaW9uNC50eHQJLyp0X2NkbCoKK3RfY2UJdGVybS50eHQJLyp0X2NlKgordF9jaQl2ZXJzaW9uNC50eHQJLyp0X2NpKgordF9jaWwJdmVyc2lvbjQudHh0CS8qdF9jaWwqCit0X2NsCXRlcm0udHh0CS8qdF9jbCoKK3RfY20JdGVybS50eHQJLyp0X2NtKgordF9jcmkJdmVyc2lvbjQudHh0CS8qdF9jcmkqCit0X2NzCXRlcm0udHh0CS8qdF9jcyoKK3RfY3NjCXZlcnNpb240LnR4dAkvKnRfY3NjKgordF9jdgl2ZXJzaW9uNC50eHQJLyp0X2N2KgordF9jdnYJdmVyc2lvbjQudHh0CS8qdF9jdnYqCit0X2RhCXRlcm0udHh0CS8qdF9kYSoKK3RfZGIJdGVybS50eHQJLyp0X2RiKgordF9kbAl0ZXJtLnR4dAkvKnRfZGwqCit0X2VkCXZlcnNpb240LnR4dAkvKnRfZWQqCit0X2VsCXZlcnNpb240LnR4dAkvKnRfZWwqCit0X2YxCXZlcnNpb240LnR4dAkvKnRfZjEqCit0X2YxMAl2ZXJzaW9uNC50eHQJLyp0X2YxMCoKK3RfZjIJdmVyc2lvbjQudHh0CS8qdF9mMioKK3RfZjMJdmVyc2lvbjQudHh0CS8qdF9mMyoKK3RfZjQJdmVyc2lvbjQudHh0CS8qdF9mNCoKK3RfZjUJdmVyc2lvbjQudHh0CS8qdF9mNSoKK3RfZjYJdmVyc2lvbjQudHh0CS8qdF9mNioKK3RfZjcJdmVyc2lvbjQudHh0CS8qdF9mNyoKK3RfZjgJdmVyc2lvbjQudHh0CS8qdF9mOCoKK3RfZjkJdmVyc2lvbjQudHh0CS8qdF9mOSoKK3RfZnMJdGVybS50eHQJLyp0X2ZzKgordF9oZWxwCXZlcnNpb240LnR4dAkvKnRfaGVscCoKK3RfaWwJdmVyc2lvbjQudHh0CS8qdF9pbCoKK3RfazEJdGVybS50eHQJLyp0X2sxKgordF9rMgl0ZXJtLnR4dAkvKnRfazIqCit0X2szCXRlcm0udHh0CS8qdF9rMyoKK3RfazQJdGVybS50eHQJLyp0X2s0KgordF9rNQl0ZXJtLnR4dAkvKnRfazUqCit0X2s2CXRlcm0udHh0CS8qdF9rNioKK3RfazcJdGVybS50eHQJLyp0X2s3KgordF9rOAl0ZXJtLnR4dAkvKnRfazgqCit0X2s5CXRlcm0udHh0CS8qdF9rOSoKK3RfazsJdGVybS50eHQJLyp0X2s7KgordF9rQgl0ZXJtLnR4dAkvKnRfa0IqCit0X2tECXRlcm0udHh0CS8qdF9rRCoKK3Rfa0kJdGVybS50eHQJLyp0X2tJKgordF9rTgl0ZXJtLnR4dAkvKnRfa04qCit0X2tQCXRlcm0udHh0CS8qdF9rUCoKK3Rfa2IJdGVybS50eHQJLyp0X2tiKgordF9rZAl0ZXJtLnR4dAkvKnRfa2QqCit0X2tlCXRlcm0udHh0CS8qdF9rZSoKK3Rfa2gJdGVybS50eHQJLyp0X2toKgordF9rbAl0ZXJtLnR4dAkvKnRfa2wqCit0X2tyCXRlcm0udHh0CS8qdF9rcioKK3Rfa3MJdGVybS50eHQJLyp0X2tzKgordF9rdQl0ZXJtLnR4dAkvKnRfa3UqCit0X2xlCXRlcm0udHh0CS8qdF9sZSoKK3RfbWIJdGVybS50eHQJLyp0X21iKgordF9tZAl0ZXJtLnR4dAkvKnRfbWQqCit0X21lCXRlcm0udHh0CS8qdF9tZSoKK3RfbXIJdGVybS50eHQJLyp0X21yKgordF9tcwl0ZXJtLnR4dAkvKnRfbXMqCit0X25kCXRlcm0udHh0CS8qdF9uZCoKK3Rfb3AJdGVybS50eHQJLyp0X29wKgordF9zZQl0ZXJtLnR4dAkvKnRfc2UqCit0X3NmMQl2ZXJzaW9uNC50eHQJLyp0X3NmMSoKK3Rfc2YxMAl2ZXJzaW9uNC50eHQJLyp0X3NmMTAqCit0X3NmMgl2ZXJzaW9uNC50eHQJLyp0X3NmMioKK3Rfc2YzCXZlcnNpb240LnR4dAkvKnRfc2YzKgordF9zZjQJdmVyc2lvbjQudHh0CS8qdF9zZjQqCit0X3NmNQl2ZXJzaW9uNC50eHQJLyp0X3NmNSoKK3Rfc2Y2CXZlcnNpb240LnR4dAkvKnRfc2Y2KgordF9zZjcJdmVyc2lvbjQudHh0CS8qdF9zZjcqCit0X3NmOAl2ZXJzaW9uNC50eHQJLyp0X3NmOCoKK3Rfc2Y5CXZlcnNpb240LnR4dAkvKnRfc2Y5KgordF9za2QJdmVyc2lvbjQudHh0CS8qdF9za2QqCit0X3NrbAl2ZXJzaW9uNC50eHQJLyp0X3NrbCoKK3Rfc2tyCXZlcnNpb240LnR4dAkvKnRfc2tyKgordF9za3UJdmVyc2lvbjQudHh0CS8qdF9za3UqCit0X3NvCXRlcm0udHh0CS8qdF9zbyoKK3Rfc3IJdGVybS50eHQJLyp0X3NyKgordF9zdGFyNwl0ZXJtLnR4dAkvKnRfc3RhcjcqCit0X3RiCXZlcnNpb240LnR4dAkvKnRfdGIqCit0X3RlCXRlcm0udHh0CS8qdF90ZSoKK3RfdGkJdGVybS50eHQJLyp0X3RpKgordF90cAl2ZXJzaW9uNC50eHQJLyp0X3RwKgordF90cwl0ZXJtLnR4dAkvKnRfdHMqCit0X3RzX29sZAl2ZXJzaW9uNC50eHQJLyp0X3RzX29sZCoKK3RfdWUJdGVybS50eHQJLyp0X3VlKgordF91bmRvCXZlcnNpb240LnR4dAkvKnRfdW5kbyoKK3RfdXMJdGVybS50eHQJLyp0X3VzKgordF91dAl0ZXJtLnR4dAkvKnRfdXQqCit0X3ZiCXRlcm0udHh0CS8qdF92YioKK3RfdmUJdGVybS50eHQJLyp0X3ZlKgordF92aQl0ZXJtLnR4dAkvKnRfdmkqCit0X3ZzCXRlcm0udHh0CS8qdF92cyoKK3RfeHMJdGVybS50eHQJLyp0X3hzKgordGFiCWludHJvLnR4dAkvKnRhYioKK3RhZwl0YWdzcmNoLnR4dAkvKnRhZyoKK3RhZy0hCXRhZ3NyY2gudHh0CS8qdGFnLSEqCit0YWctYW55LXdoaXRlCXRhZ3NyY2gudHh0CS8qdGFnLWFueS13aGl0ZSoKK3RhZy1iaW5hcnktc2VhcmNoCXRhZ3NyY2gudHh0CS8qdGFnLWJpbmFyeS1zZWFyY2gqCit0YWctY29tbWFuZHMJdGFnc3JjaC50eHQJLyp0YWctY29tbWFuZHMqCit0YWctZGV0YWlscwl0YWdzcmNoLnR4dAkvKnRhZy1kZXRhaWxzKgordGFnLWhpZ2hsaWdodAlzeW50YXgudHh0CS8qdGFnLWhpZ2hsaWdodCoKK3RhZy1tYXRjaGxpc3QJdGFnc3JjaC50eHQJLyp0YWctbWF0Y2hsaXN0KgordGFnLW9sZC1zdGF0aWMJdGFnc3JjaC50eHQJLyp0YWctb2xkLXN0YXRpYyoKK3RhZy1vdmVybG9hZGVkCXZlcnNpb241LnR4dAkvKnRhZy1vdmVybG9hZGVkKgordGFnLXByaW9yaXR5CXRhZ3NyY2gudHh0CS8qdGFnLXByaW9yaXR5KgordGFnLXJlZ2V4cAl0YWdzcmNoLnR4dAkvKnRhZy1yZWdleHAqCit0YWctc2VhcmNoCXRhZ3NyY2gudHh0CS8qdGFnLXNlYXJjaCoKK3RhZy1zZWN1cml0eQl0YWdzcmNoLnR4dAkvKnRhZy1zZWN1cml0eSoKK3RhZy1za2lwLWZpbGUJdGFnc3JjaC50eHQJLyp0YWctc2tpcC1maWxlKgordGFnLXN0YWNrCXRhZ3NyY2gudHh0CS8qdGFnLXN0YWNrKgordGFncwl0YWdzcmNoLnR4dAkvKnRhZ3MqCit0YWdzLWFuZC1zZWFyY2hlcwl0YWdzcmNoLnR4dAkvKnRhZ3MtYW5kLXNlYXJjaGVzKgordGFncy1maWxlLWNoYW5nZWQJdmVyc2lvbjUudHh0CS8qdGFncy1maWxlLWNoYW5nZWQqCit0YWdzLWZpbGUtZm9ybWF0CXRhZ3NyY2gudHh0CS8qdGFncy1maWxlLWZvcm1hdCoKK3RhZ3Mtb3B0aW9uCXRhZ3NyY2gudHh0CS8qdGFncy1vcHRpb24qCit0YWdzcmNoLnR4dAl0YWdzcmNoLnR4dAkvKnRhZ3NyY2gudHh0KgordGFnc3RhY2sJdGFnc3JjaC50eHQJLyp0YWdzdGFjayoKK3RjbAlpZl90Y2wudHh0CS8qdGNsKgordGNsLWJlZXAJaWZfdGNsLnR4dAkvKnRjbC1iZWVwKgordGNsLWJ1ZmZlcglpZl90Y2wudHh0CS8qdGNsLWJ1ZmZlcioKK3RjbC1idWZmZXItYXBwZW5kCWlmX3RjbC50eHQJLyp0Y2wtYnVmZmVyLWFwcGVuZCoKK3RjbC1idWZmZXItY21kcwlpZl90Y2wudHh0CS8qdGNsLWJ1ZmZlci1jbWRzKgordGNsLWJ1ZmZlci1jb21tYW5kCWlmX3RjbC50eHQJLyp0Y2wtYnVmZmVyLWNvbW1hbmQqCit0Y2wtYnVmZmVyLWNvdW50CWlmX3RjbC50eHQJLyp0Y2wtYnVmZmVyLWNvdW50KgordGNsLWJ1ZmZlci1kZWxjbWQJaWZfdGNsLnR4dAkvKnRjbC1idWZmZXItZGVsY21kKgordGNsLWJ1ZmZlci1kZWxldGUJaWZfdGNsLnR4dAkvKnRjbC1idWZmZXItZGVsZXRlKgordGNsLWJ1ZmZlci1leHByCWlmX3RjbC50eHQJLyp0Y2wtYnVmZmVyLWV4cHIqCit0Y2wtYnVmZmVyLWdldAlpZl90Y2wudHh0CS8qdGNsLWJ1ZmZlci1nZXQqCit0Y2wtYnVmZmVyLWluc2VydAlpZl90Y2wudHh0CS8qdGNsLWJ1ZmZlci1pbnNlcnQqCit0Y2wtYnVmZmVyLWxhc3QJaWZfdGNsLnR4dAkvKnRjbC1idWZmZXItbGFzdCoKK3RjbC1idWZmZXItbWFyawlpZl90Y2wudHh0CS8qdGNsLWJ1ZmZlci1tYXJrKgordGNsLWJ1ZmZlci1vcHRpb24JaWZfdGNsLnR4dAkvKnRjbC1idWZmZXItb3B0aW9uKgordGNsLWJ1ZmZlci1zZXQJaWZfdGNsLnR4dAkvKnRjbC1idWZmZXItc2V0KgordGNsLWJ1ZmZlci13aW5kb3dzCWlmX3RjbC50eHQJLyp0Y2wtYnVmZmVyLXdpbmRvd3MqCit0Y2wtYnVncwlpZl90Y2wudHh0CS8qdGNsLWJ1Z3MqCit0Y2wtY29tbWFuZAlpZl90Y2wudHh0CS8qdGNsLWNvbW1hbmQqCit0Y2wtY29tbWFuZHMJaWZfdGNsLnR4dAkvKnRjbC1jb21tYW5kcyoKK3RjbC1leC1jb21tYW5kcwlpZl90Y2wudHh0CS8qdGNsLWV4LWNvbW1hbmRzKgordGNsLWV4YW1wbGVzCWlmX3RjbC50eHQJLyp0Y2wtZXhhbXBsZXMqCit0Y2wtZXhwcglpZl90Y2wudHh0CS8qdGNsLWV4cHIqCit0Y2wtbGluZW51bWJlcnMJaWZfdGNsLnR4dAkvKnRjbC1saW5lbnVtYmVycyoKK3RjbC1taXNjCWlmX3RjbC50eHQJLyp0Y2wtbWlzYyoKK3RjbC1vcHRpb24JaWZfdGNsLnR4dAkvKnRjbC1vcHRpb24qCit0Y2wtb3V0cHV0CWlmX3RjbC50eHQJLyp0Y2wtb3V0cHV0KgordGNsLXZhci1jdXJyZW50CWlmX3RjbC50eHQJLyp0Y2wtdmFyLWN1cnJlbnQqCit0Y2wtdmFyLWxiYXNlCWlmX3RjbC50eHQJLyp0Y2wtdmFyLWxiYXNlKgordGNsLXZhci1saW5lCWlmX3RjbC50eHQJLyp0Y2wtdmFyLWxpbmUqCit0Y2wtdmFyLWxudW0JaWZfdGNsLnR4dAkvKnRjbC12YXItbG51bSoKK3RjbC12YXItcmFuZ2UJaWZfdGNsLnR4dAkvKnRjbC12YXItcmFuZ2UqCit0Y2wtdmFyaWFibGVzCWlmX3RjbC50eHQJLyp0Y2wtdmFyaWFibGVzKgordGNsLXdpbmRvdwlpZl90Y2wudHh0CS8qdGNsLXdpbmRvdyoKK3RjbC13aW5kb3ctYnVmZmVyCWlmX3RjbC50eHQJLyp0Y2wtd2luZG93LWJ1ZmZlcioKK3RjbC13aW5kb3ctY21kcwlpZl90Y2wudHh0CS8qdGNsLXdpbmRvdy1jbWRzKgordGNsLXdpbmRvdy1jb21tYW5kCWlmX3RjbC50eHQJLyp0Y2wtd2luZG93LWNvbW1hbmQqCit0Y2wtd2luZG93LWN1cnNvcglpZl90Y2wudHh0CS8qdGNsLXdpbmRvdy1jdXJzb3IqCit0Y2wtd2luZG93LWRlbGNtZAlpZl90Y2wudHh0CS8qdGNsLXdpbmRvdy1kZWxjbWQqCit0Y2wtd2luZG93LWV4cHIJaWZfdGNsLnR4dAkvKnRjbC13aW5kb3ctZXhwcioKK3RjbC13aW5kb3ctaGVpZ2h0CWlmX3RjbC50eHQJLyp0Y2wtd2luZG93LWhlaWdodCoKK3RjbC13aW5kb3ctb3B0aW9uCWlmX3RjbC50eHQJLyp0Y2wtd2luZG93LW9wdGlvbioKK3Rjc2gtc3R5bGUJY21kbGluZS50eHQJLyp0Y3NoLXN0eWxlKgordGNzaC1zeW50YXgJc3ludGF4LnR4dAkvKnRjc2gtc3ludGF4KgordGNzaC52aW0Jc3ludGF4LnR4dAkvKnRjc2gudmltKgordGVhci1vZmYtbWVudXMJZ3VpLnR4dAkvKnRlYXItb2ZmLW1lbnVzKgordGVsbmV0LUNUUkwtXQl0YWdzcmNoLnR4dAkvKnRlbG5ldC1DVFJMLV0qCit0ZW1wLWZpbGUtbmFtZQlldmFsLnR4dAkvKnRlbXAtZmlsZS1uYW1lKgordGVtcGxhdGUJYXV0b2NtZC50eHQJLyp0ZW1wbGF0ZSoKK3RlbXBuYW1lKCkJZXZhbC50eHQJLyp0ZW1wbmFtZSgpKgordGVybS1kZXBlbmRlbnQtc2V0dGluZ3MJdGVybS50eHQJLyp0ZXJtLWRlcGVuZGVudC1zZXR0aW5ncyoKK3Rlcm0tbGlzdAlzeW50YXgudHh0CS8qdGVybS1saXN0KgordGVybS50eHQJdGVybS50eHQJLyp0ZXJtLnR4dCoKK3Rlcm1jYXAJdGVybS50eHQJLyp0ZXJtY2FwKgordGVybWNhcC1jaGFuZ2VkCXZlcnNpb240LnR4dAkvKnRlcm1jYXAtY2hhbmdlZCoKK3Rlcm1jYXAtY29sb3JzCXRlcm0udHh0CS8qdGVybWNhcC1jb2xvcnMqCit0ZXJtY2FwLXN5bnRheAlzeW50YXgudHh0CS8qdGVybWNhcC1zeW50YXgqCit0ZXJtY2FwLXRpdGxlCXRlcm0udHh0CS8qdGVybWNhcC10aXRsZSoKK3Rlcm1pbmFsLWNvbG9ycwlvc191bml4LnR4dAkvKnRlcm1pbmFsLWNvbG9ycyoKK3Rlcm1pbmFsLWluZm8JdGVybS50eHQJLyp0ZXJtaW5hbC1pbmZvKgordGVybWluYWwtb3B0aW9ucwl0ZXJtLnR4dAkvKnRlcm1pbmFsLW9wdGlvbnMqCit0ZXJtaW5mbwl0ZXJtLnR4dAkvKnRlcm1pbmZvKgordGVybXJlc3BvbnNlLXZhcmlhYmxlCWV2YWwudHh0CS8qdGVybXJlc3BvbnNlLXZhcmlhYmxlKgordGV4LXN5bnRheAlzeW50YXgudHh0CS8qdGV4LXN5bnRheCoKK3RleC52aW0Jc3ludGF4LnR4dAkvKnRleC52aW0qCit0ZXh0LW9iamVjdHMJbW90aW9uLnR4dAkvKnRleHQtb2JqZWN0cyoKK3RleHQtb2JqZWN0cy1jaGFuZ2VkCXZlcnNpb241LnR4dAkvKnRleHQtb2JqZWN0cy1jaGFuZ2VkKgordGYtc3ludGF4CXN5bnRheC50eHQJLyp0Zi1zeW50YXgqCit0Zi52aW0Jc3ludGF4LnR4dAkvKnRmLnZpbSoKK3RoaXNfc2Vzc2lvbi12YXJpYWJsZQlldmFsLnR4dAkvKnRoaXNfc2Vzc2lvbi12YXJpYWJsZSoKK3Rocm93LWNhdGNoCWV2YWwudHh0CS8qdGhyb3ctY2F0Y2gqCit0aHJvdy1leHByZXNzaW9uCWV2YWwudHh0CS8qdGhyb3ctZXhwcmVzc2lvbioKK3Rocm93LWZyb20tY2F0Y2gJZXZhbC50eHQJLyp0aHJvdy1mcm9tLWNhdGNoKgordGhyb3ctdmFyaWFibGVzCWV2YWwudHh0CS8qdGhyb3ctdmFyaWFibGVzKgordGhyb3dwb2ludC12YXJpYWJsZQlldmFsLnR4dAkvKnRocm93cG9pbnQtdmFyaWFibGUqCit0aW1lc3RhbXAJZWRpdGluZy50eHQJLyp0aW1lc3RhbXAqCit0aW1lc3RhbXBzCWVkaXRpbmcudHh0CS8qdGltZXN0YW1wcyoKK3RpcHMJdGlwcy50eHQJLyp0aXBzKgordGlwcy50eHQJdGlwcy50eHQJLyp0aXBzLnR4dCoKK3RvZG8JdG9kby50eHQJLyp0b2RvKgordG9kby50eHQJdG9kby50eHQJLyp0b2RvLnR4dCoKK3RvZ2dsZQlvcHRpb25zLnR4dAkvKnRvZ2dsZSoKK3RvZ2dsZS1yZXZpbnMJdmVyc2lvbjQudHh0CS8qdG9nZ2xlLXJldmlucyoKK3RvbG93ZXIoKQlldmFsLnR4dAkvKnRvbG93ZXIoKSoKK3Rvb2xiYXItaWNvbglndWkudHh0CS8qdG9vbGJhci1pY29uKgordG91cHBlcigpCWV2YWwudHh0CS8qdG91cHBlcigpKgordHJvamFuLWhvcnNlCXN0YXJ0aW5nLnR4dAkvKnRyb2phbi1ob3JzZSoKK3RyeS1jb25kaXRpb25hbHMJZXZhbC50eHQJLyp0cnktY29uZGl0aW9uYWxzKgordHJ5LWVjaG9lcnIJZXZhbC50eHQJLyp0cnktZWNob2VycioKK3RyeS1maW5hbGx5CWV2YWwudHh0CS8qdHJ5LWZpbmFsbHkqCit0cnktbmVzdGVkCWV2YWwudHh0CS8qdHJ5LW5lc3RlZCoKK3RyeS1uZXN0aW5nCWV2YWwudHh0CS8qdHJ5LW5lc3RpbmcqCit0dXRvcgl1c3JfMDEudHh0CS8qdHV0b3IqCit0d2ljZQlpZl9jc2NvcC50eHQJLyp0d2ljZSoKK3R5cGUoKQlldmFsLnR4dAkvKnR5cGUoKSoKK3R5cGUtbWlzdGFrZXMJdGlwcy50eHQJLyp0eXBlLW1pc3Rha2VzKgordHlwZWNvcnItc2V0dGluZ3MJdXNyXzQxLnR4dAkvKnR5cGVjb3JyLXNldHRpbmdzKgordHlwZWNvcnIudHh0CXVzcl80MS50eHQJLyp0eXBlY29yci50eHQqCit1CXVuZG8udHh0CS8qdSoKK3VnYW5kYQl1Z2FuZGEudHh0CS8qdWdhbmRhKgordWdhbmRhLnR4dAl1Z2FuZGEudHh0CS8qdWdhbmRhLnR4dCoKK3VuZG8JdW5kby50eHQJLyp1bmRvKgordW5kby1jb21tYW5kcwl1bmRvLnR4dAkvKnVuZG8tY29tbWFuZHMqCit1bmRvLXJlZG8JdW5kby50eHQJLyp1bmRvLXJlZG8qCit1bmRvLXJlbWFya3MJdW5kby50eHQJLyp1bmRvLXJlbWFya3MqCit1bmRvLXR3by13YXlzCXVuZG8udHh0CS8qdW5kby10d28td2F5cyoKK3VuZG8udHh0CXVuZG8udHh0CS8qdW5kby50eHQqCit1bmRvX2Z0cGx1Z2luCXVzcl80MS50eHQJLyp1bmRvX2Z0cGx1Z2luKgordW5pY29kZQltYnl0ZS50eHQJLyp1bmljb2RlKgordW5peAlvc191bml4LnR4dAkvKnVuaXgqCit1bmxpc3RlZC1idWZmZXIJd2luZG93cy50eHQJLyp1bmxpc3RlZC1idWZmZXIqCit1cC1kb3duLW1vdGlvbnMJbW90aW9uLnR4dAkvKnVwLWRvd24tbW90aW9ucyoKK3VwcGVyY2FzZQljaGFuZ2UudHh0CS8qdXBwZXJjYXNlKgordXNlLWNwby1zYXZlCXVzcl80MS50eHQJLyp1c2UtY3BvLXNhdmUqCit1c2UtdmlzdWFsLWNtZHMJdmVyc2lvbjQudHh0CS8qdXNlLXZpc3VhbC1jbWRzKgordXNlZnVsLW1hcHBpbmdzCXRpcHMudHh0CS8qdXNlZnVsLW1hcHBpbmdzKgordXNlbmV0CWludHJvLnR4dAkvKnVzZW5ldCoKK3VzZXItY21kLWFtYmlndW91cwltYXAudHh0CS8qdXNlci1jbWQtYW1iaWd1b3VzKgordXNlci1jb21tYW5kcwltYXAudHh0CS8qdXNlci1jb21tYW5kcyoKK3VzZXItZnVuY3Rpb25zCWV2YWwudHh0CS8qdXNlci1mdW5jdGlvbnMqCit1c2VyLW1hbnVhbAl1c3JfdG9jLnR4dAkvKnVzZXItbWFudWFsKgordXNpbmctPFBsdWc+CXVzcl80MS50eHQJLyp1c2luZy08UGx1Zz4qCit1c2luZy1tZW51cwlndWkudHh0CS8qdXNpbmctbWVudXMqCit1c2luZy1zY3JpcHRzCXJlcGVhdC50eHQJLyp1c2luZy1zY3JpcHRzKgordXNpbmcteHhkCXRpcHMudHh0CS8qdXNpbmcteHhkKgordXNpbmdfQ1RSTC1WCW1hcC50eHQJLyp1c2luZ19DVFJMLVYqCit1c3JfMDEudHh0CXVzcl8wMS50eHQJLyp1c3JfMDEudHh0KgordXNyXzAyLnR4dAl1c3JfMDIudHh0CS8qdXNyXzAyLnR4dCoKK3Vzcl8wMy50eHQJdXNyXzAzLnR4dAkvKnVzcl8wMy50eHQqCit1c3JfMDQudHh0CXVzcl8wNC50eHQJLyp1c3JfMDQudHh0KgordXNyXzA1LnR4dAl1c3JfMDUudHh0CS8qdXNyXzA1LnR4dCoKK3Vzcl8wNi50eHQJdXNyXzA2LnR4dAkvKnVzcl8wNi50eHQqCit1c3JfMDcudHh0CXVzcl8wNy50eHQJLyp1c3JfMDcudHh0KgordXNyXzA4LnR4dAl1c3JfMDgudHh0CS8qdXNyXzA4LnR4dCoKK3Vzcl8wOS50eHQJdXNyXzA5LnR4dAkvKnVzcl8wOS50eHQqCit1c3JfMTAudHh0CXVzcl8xMC50eHQJLyp1c3JfMTAudHh0KgordXNyXzExLnR4dAl1c3JfMTEudHh0CS8qdXNyXzExLnR4dCoKK3Vzcl8xMi50eHQJdXNyXzEyLnR4dAkvKnVzcl8xMi50eHQqCit1c3JfMjAudHh0CXVzcl8yMC50eHQJLyp1c3JfMjAudHh0KgordXNyXzIxLnR4dAl1c3JfMjEudHh0CS8qdXNyXzIxLnR4dCoKK3Vzcl8yMi50eHQJdXNyXzIyLnR4dAkvKnVzcl8yMi50eHQqCit1c3JfMjMudHh0CXVzcl8yMy50eHQJLyp1c3JfMjMudHh0KgordXNyXzI0LnR4dAl1c3JfMjQudHh0CS8qdXNyXzI0LnR4dCoKK3Vzcl8yNS50eHQJdXNyXzI1LnR4dAkvKnVzcl8yNS50eHQqCit1c3JfMjYudHh0CXVzcl8yNi50eHQJLyp1c3JfMjYudHh0KgordXNyXzI3LnR4dAl1c3JfMjcudHh0CS8qdXNyXzI3LnR4dCoKK3Vzcl8yOC50eHQJdXNyXzI4LnR4dAkvKnVzcl8yOC50eHQqCit1c3JfMjkudHh0CXVzcl8yOS50eHQJLyp1c3JfMjkudHh0KgordXNyXzMwLnR4dAl1c3JfMzAudHh0CS8qdXNyXzMwLnR4dCoKK3Vzcl8zMS50eHQJdXNyXzMxLnR4dAkvKnVzcl8zMS50eHQqCit1c3JfNDAudHh0CXVzcl80MC50eHQJLyp1c3JfNDAudHh0KgordXNyXzQxLnR4dAl1c3JfNDEudHh0CS8qdXNyXzQxLnR4dCoKK3Vzcl80Mi50eHQJdXNyXzQyLnR4dAkvKnVzcl80Mi50eHQqCit1c3JfNDMudHh0CXVzcl80My50eHQJLyp1c3JfNDMudHh0KgordXNyXzQ0LnR4dAl1c3JfNDQudHh0CS8qdXNyXzQ0LnR4dCoKK3Vzcl80NS50eHQJdXNyXzQ1LnR4dAkvKnVzcl80NS50eHQqCit1c3JfOTAudHh0CXVzcl85MC50eHQJLyp1c3JfOTAudHh0KgordXNyX3RvYy50eHQJdXNyX3RvYy50eHQJLyp1c3JfdG9jLnR4dCoKK3V0Zi04CW1ieXRlLnR4dAkvKnV0Zi04KgordXRmLTgtY2hhci1hcmcJbWJ5dGUudHh0CS8qdXRmLTgtY2hhci1hcmcqCit1dGYtOC1pbi14d2luZG93cwltYnl0ZS50eHQJLyp1dGYtOC1pbi14d2luZG93cyoKK3V0Zi04LXR5cGluZwltYnl0ZS50eHQJLyp1dGYtOC10eXBpbmcqCit1dGY4CW1ieXRlLnR4dAkvKnV0ZjgqCit2CXZpc3VhbC50eHQJLyp2KgordjpjaGFyY29udmVydF9mcm9tCWV2YWwudHh0CS8qdjpjaGFyY29udmVydF9mcm9tKgordjpjaGFyY29udmVydF90bwlldmFsLnR4dAkvKnY6Y2hhcmNvbnZlcnRfdG8qCit2OmNtZGFyZwlldmFsLnR4dAkvKnY6Y21kYXJnKgordjpjbWRiYW5nCWV2YWwudHh0CS8qdjpjbWRiYW5nKgordjpjb3VudAlldmFsLnR4dAkvKnY6Y291bnQqCit2OmNvdW50MQlldmFsLnR4dAkvKnY6Y291bnQxKgordjpjdHlwZQlldmFsLnR4dAkvKnY6Y3R5cGUqCit2OmR5aW5nCWV2YWwudHh0CS8qdjpkeWluZyoKK3Y6ZXJybXNnCWV2YWwudHh0CS8qdjplcnJtc2cqCit2OmV4Y2VwdGlvbglldmFsLnR4dAkvKnY6ZXhjZXB0aW9uKgordjpmbmFtZV9kaWZmCWV2YWwudHh0CS8qdjpmbmFtZV9kaWZmKgordjpmbmFtZV9pbglldmFsLnR4dAkvKnY6Zm5hbWVfaW4qCit2OmZuYW1lX25ldwlldmFsLnR4dAkvKnY6Zm5hbWVfbmV3KgordjpmbmFtZV9vdXQJZXZhbC50eHQJLyp2OmZuYW1lX291dCoKK3Y6Zm9sZGRhc2hlcwlldmFsLnR4dAkvKnY6Zm9sZGRhc2hlcyoKK3Y6Zm9sZGVuZAlldmFsLnR4dAkvKnY6Zm9sZGVuZCoKK3Y6Zm9sZGxldmVsCWV2YWwudHh0CS8qdjpmb2xkbGV2ZWwqCit2OmZvbGRzdGFydAlldmFsLnR4dAkvKnY6Zm9sZHN0YXJ0KgordjpsYW5nCWV2YWwudHh0CS8qdjpsYW5nKgordjpsY190aW1lCWV2YWwudHh0CS8qdjpsY190aW1lKgordjpsbnVtCWV2YWwudHh0CS8qdjpsbnVtKgordjpwcmV2Y291bnQJZXZhbC50eHQJLyp2OnByZXZjb3VudCoKK3Y6cHJvZ25hbWUJZXZhbC50eHQJLyp2OnByb2duYW1lKgordjpyZWdpc3RlcglldmFsLnR4dAkvKnY6cmVnaXN0ZXIqCit2OnNlcnZlcm5hbWUJZXZhbC50eHQJLyp2OnNlcnZlcm5hbWUqCit2OnNoZWxsX2Vycm9yCWV2YWwudHh0CS8qdjpzaGVsbF9lcnJvcioKK3Y6c3RhdHVzbXNnCWV2YWwudHh0CS8qdjpzdGF0dXNtc2cqCit2OnRlcm1yZXNwb25zZQlldmFsLnR4dAkvKnY6dGVybXJlc3BvbnNlKgordjp0aGlzX3Nlc3Npb24JZXZhbC50eHQJLyp2OnRoaXNfc2Vzc2lvbioKK3Y6dGhyb3dwb2ludAlldmFsLnR4dAkvKnY6dGhyb3dwb2ludCoKK3Y6dmFyCWV2YWwudHh0CS8qdjp2YXIqCit2OnZlcnNpb24JZXZhbC50eHQJLyp2OnZlcnNpb24qCit2Ondhcm5pbmdtc2cJZXZhbC50eHQJLyp2Ondhcm5pbmdtc2cqCit2XyEJY2hhbmdlLnR4dAkvKnZfISoKK3ZfJAl2aXN1YWwudHh0CS8qdl8kKgordl86CWNtZGxpbmUudHh0CS8qdl86Kgordl88CWNoYW5nZS50eHQJLyp2XzwqCit2XzxCUz4JY2hhbmdlLnR4dAkvKnZfPEJTPioKK3ZfPERlbD4JY2hhbmdlLnR4dAkvKnZfPERlbD4qCit2Xz0JY2hhbmdlLnR4dAkvKnZfPSoKK3ZfPgljaGFuZ2UudHh0CS8qdl8+Kgordl9DCWNoYW5nZS50eHQJLyp2X0MqCit2X0NUUkwtQwl2aXN1YWwudHh0CS8qdl9DVFJMLUMqCit2X0NUUkwtRwl2aXN1YWwudHh0CS8qdl9DVFJMLUcqCit2X0NUUkwtSAljaGFuZ2UudHh0CS8qdl9DVFJMLUgqCit2X0NUUkwtTwl2aXN1YWwudHh0CS8qdl9DVFJMLU8qCit2X0NUUkwtVgl2aXN1YWwudHh0CS8qdl9DVFJMLVYqCit2X0NUUkwtWglzdGFydGluZy50eHQJLyp2X0NUUkwtWioKK3ZfQ1RSTC1cX0NUUkwtRwlpbnRyby50eHQJLyp2X0NUUkwtXFxfQ1RSTC1HKgordl9DVFJMLVxfQ1RSTC1OCWludHJvLnR4dAkvKnZfQ1RSTC1cXF9DVFJMLU4qCit2X0NUUkwtXQl0YWdzcmNoLnR4dAkvKnZfQ1RSTC1dKgordl9ECWNoYW5nZS50eHQJLyp2X0QqCit2X0oJY2hhbmdlLnR4dAkvKnZfSioKK3ZfSwl2YXJpb3VzLnR4dAkvKnZfSyoKK3ZfTwl2aXN1YWwudHh0CS8qdl9PKgordl9QCWNoYW5nZS50eHQJLyp2X1AqCit2X1IJY2hhbmdlLnR4dAkvKnZfUioKK3ZfUwljaGFuZ2UudHh0CS8qdl9TKgordl9VCWNoYW5nZS50eHQJLyp2X1UqCit2X1YJdmlzdWFsLnR4dAkvKnZfVioKK3ZfWAljaGFuZ2UudHh0CS8qdl9YKgordl9ZCWNoYW5nZS50eHQJLyp2X1kqCit2X2EJbW90aW9uLnR4dAkvKnZfYSoKK3ZfYSgJbW90aW9uLnR4dAkvKnZfYSgqCit2X2EpCW1vdGlvbi50eHQJLyp2X2EpKgordl9hPAltb3Rpb24udHh0CS8qdl9hPCoKK3ZfYT4JbW90aW9uLnR4dAkvKnZfYT4qCit2X2FCCW1vdGlvbi50eHQJLyp2X2FCKgordl9hVwltb3Rpb24udHh0CS8qdl9hVyoKK3ZfYVsJbW90aW9uLnR4dAkvKnZfYVsqCit2X2FdCW1vdGlvbi50eHQJLyp2X2FdKgordl9hYgltb3Rpb24udHh0CS8qdl9hYioKK3ZfYXAJbW90aW9uLnR4dAkvKnZfYXAqCit2X2FzCW1vdGlvbi50eHQJLyp2X2FzKgordl9hdwltb3Rpb24udHh0CS8qdl9hdyoKK3ZfYXsJbW90aW9uLnR4dAkvKnZfYXsqCit2X2F9CW1vdGlvbi50eHQJLyp2X2F9Kgordl9iXzwJdmlzdWFsLnR4dAkvKnZfYl88Kgordl9iXzxfZXhhbXBsZQl2aXN1YWwudHh0CS8qdl9iXzxfZXhhbXBsZSoKK3ZfYl8+CXZpc3VhbC50eHQJLyp2X2JfPioKK3ZfYl8+X2V4YW1wbGUJdmlzdWFsLnR4dAkvKnZfYl8+X2V4YW1wbGUqCit2X2JfQQl2aXN1YWwudHh0CS8qdl9iX0EqCit2X2JfQV9leGFtcGxlCXZpc3VhbC50eHQJLyp2X2JfQV9leGFtcGxlKgordl9iX0MJdmlzdWFsLnR4dAkvKnZfYl9DKgordl9iX0QJY2hhbmdlLnR4dAkvKnZfYl9EKgordl9iX0kJdmlzdWFsLnR4dAkvKnZfYl9JKgordl9iX0lfZXhhbXBsZQl2aXN1YWwudHh0CS8qdl9iX0lfZXhhbXBsZSoKK3ZfYl9jCXZpc3VhbC50eHQJLyp2X2JfYyoKK3ZfYl9yCXZpc3VhbC50eHQJLyp2X2JfcioKK3ZfYl9yX2V4YW1wbGUJdmlzdWFsLnR4dAkvKnZfYl9yX2V4YW1wbGUqCit2X2MJY2hhbmdlLnR4dAkvKnZfYyoKK3ZfZAljaGFuZ2UudHh0CS8qdl9kKgordl9nPwljaGFuZ2UudHh0CS8qdl9nPyoKK3ZfZ0oJY2hhbmdlLnR4dAkvKnZfZ0oqCit2X2dWCXZpc3VhbC50eHQJLyp2X2dWKgordl9nXQl0YWdzcmNoLnR4dAkvKnZfZ10qCit2X2dfQ1RSTC1HCWVkaXRpbmcudHh0CS8qdl9nX0NUUkwtRyoKK3ZfZ19DVFJMLV0JdGFnc3JjaC50eHQJLyp2X2dfQ1RSTC1dKgordl9nZgllZGl0aW5nLnR4dAkvKnZfZ2YqCit2X2dxCWNoYW5nZS50eHQJLyp2X2dxKgordl9ndgl2aXN1YWwudHh0CS8qdl9ndioKK3ZfaQltb3Rpb24udHh0CS8qdl9pKgordl9pKAltb3Rpb24udHh0CS8qdl9pKCoKK3ZfaSkJbW90aW9uLnR4dAkvKnZfaSkqCit2X2k8CW1vdGlvbi50eHQJLyp2X2k8Kgordl9pPgltb3Rpb24udHh0CS8qdl9pPioKK3ZfaUIJbW90aW9uLnR4dAkvKnZfaUIqCit2X2lXCW1vdGlvbi50eHQJLyp2X2lXKgordl9pWwltb3Rpb24udHh0CS8qdl9pWyoKK3ZfaV0JbW90aW9uLnR4dAkvKnZfaV0qCit2X2liCW1vdGlvbi50eHQJLyp2X2liKgordl9pcAltb3Rpb24udHh0CS8qdl9pcCoKK3ZfaXMJbW90aW9uLnR4dAkvKnZfaXMqCit2X2l3CW1vdGlvbi50eHQJLyp2X2l3Kgordl9pewltb3Rpb24udHh0CS8qdl9peyoKK3ZfaX0JbW90aW9uLnR4dAkvKnZfaX0qCit2X28JdmlzdWFsLnR4dAkvKnZfbyoKK3ZfcAljaGFuZ2UudHh0CS8qdl9wKgordl9yCWNoYW5nZS50eHQJLyp2X3IqCit2X3MJY2hhbmdlLnR4dAkvKnZfcyoKK3ZfdQljaGFuZ2UudHh0CS8qdl91Kgordl92CXZpc3VhbC50eHQJLyp2X3YqCit2X3gJY2hhbmdlLnR4dAkvKnZfeCoKK3ZfeQljaGFuZ2UudHh0CS8qdl95Kgordl9+CWNoYW5nZS50eHQJLyp2X34qCit2YXJpYWJsZXMJZXZhbC50eHQJLyp2YXJpYWJsZXMqCit2YXJpb3VzCXZhcmlvdXMudHh0CS8qdmFyaW91cyoKK3ZhcmlvdXMtY21kcwl2YXJpb3VzLnR4dAkvKnZhcmlvdXMtY21kcyoKK3ZhcmlvdXMtbW90aW9ucwltb3Rpb24udHh0CS8qdmFyaW91cy1tb3Rpb25zKgordmFyaW91cy50eHQJdmFyaW91cy50eHQJLyp2YXJpb3VzLnR4dCoKK3ZiLXN5bnRheAlzeW50YXgudHh0CS8qdmItc3ludGF4KgordmIudmltCXN5bnRheC50eHQJLyp2Yi52aW0qCit2ZXJib3NlCXN0YXJ0aW5nLnR4dAkvKnZlcmJvc2UqCit2ZXJpbG9nLWluZGVudAlpbmRlbnQudHh0CS8qdmVyaWxvZy1pbmRlbnQqCit2ZXJzaW9uLTUuMQl2ZXJzaW9uNS50eHQJLyp2ZXJzaW9uLTUuMSoKK3ZlcnNpb24tNS4yCXZlcnNpb241LnR4dAkvKnZlcnNpb24tNS4yKgordmVyc2lvbi01LjMJdmVyc2lvbjUudHh0CS8qdmVyc2lvbi01LjMqCit2ZXJzaW9uLTUuNAl2ZXJzaW9uNS50eHQJLyp2ZXJzaW9uLTUuNCoKK3ZlcnNpb24tNS41CXZlcnNpb241LnR4dAkvKnZlcnNpb24tNS41KgordmVyc2lvbi01LjYJdmVyc2lvbjUudHh0CS8qdmVyc2lvbi01LjYqCit2ZXJzaW9uLTUuNwl2ZXJzaW9uNS50eHQJLyp2ZXJzaW9uLTUuNyoKK3ZlcnNpb24tNS44CXZlcnNpb241LnR4dAkvKnZlcnNpb24tNS44KgordmVyc2lvbi02LjEJdmVyc2lvbjYudHh0CS8qdmVyc2lvbi02LjEqCit2ZXJzaW9uLTYuMgl2ZXJzaW9uNi50eHQJLyp2ZXJzaW9uLTYuMioKK3ZlcnNpb24tNi4zCXZlcnNpb242LnR4dAkvKnZlcnNpb24tNi4zKgordmVyc2lvbi12YXJpYWJsZQlldmFsLnR4dAkvKnZlcnNpb24tdmFyaWFibGUqCit2ZXJzaW9uNC50eHQJdmVyc2lvbjQudHh0CS8qdmVyc2lvbjQudHh0KgordmVyc2lvbjUudHh0CXZlcnNpb241LnR4dAkvKnZlcnNpb241LnR4dCoKK3ZlcnNpb242LnR4dAl2ZXJzaW9uNi50eHQJLyp2ZXJzaW9uNi50eHQqCit2aS1kaWZmZXJlbmNlcwl2aV9kaWZmLnR4dAkvKnZpLWRpZmZlcmVuY2VzKgordmk6CW9wdGlvbnMudHh0CS8qdmk6KgordmlfZGlmZi50eHQJdmlfZGlmZi50eHQJLyp2aV9kaWZmLnR4dCoKK3ZpZXcJc3RhcnRpbmcudHh0CS8qdmlldyoKK3ZpZXctZGlmZnMJZGlmZi50eHQJLyp2aWV3LWRpZmZzKgordmlldy1maWxlCXN0YXJ0aW5nLnR4dAkvKnZpZXctZmlsZSoKK3ZpZXdzLXNlc3Npb25zCXN0YXJ0aW5nLnR4dAkvKnZpZXdzLXNlc3Npb25zKgordmltLWFkZGl0aW9ucwl2aV9kaWZmLnR4dAkvKnZpbS1hZGRpdGlvbnMqCit2aW0tYW5ub3VuY2UJaW50cm8udHh0CS8qdmltLWFubm91bmNlKgordmltLWFyZ3VtZW50cwlzdGFydGluZy50eHQJLyp2aW0tYXJndW1lbnRzKgordmltLWRlZmF1bHQtZWRpdG9yCWd1aV93MzIudHh0CS8qdmltLWRlZmF1bHQtZWRpdG9yKgordmltLWRldglpbnRyby50eHQJLyp2aW0tZGV2KgordmltLW1hYwlpbnRyby50eHQJLyp2aW0tbWFjKgordmltLW1vZGVzCWludHJvLnR4dAkvKnZpbS1tb2RlcyoKK3ZpbS1tb2Rlcy1pbnRybwlpbnRyby50eHQJLyp2aW0tbW9kZXMtaW50cm8qCit2aW0tbXVsdGlieXRlCWludHJvLnR4dAkvKnZpbS1tdWx0aWJ5dGUqCit2aW0tc2NyaXB0LWludHJvCXVzcl80MS50eHQJLyp2aW0tc2NyaXB0LWludHJvKgordmltLXN5bnRheAlzeW50YXgudHh0CS8qdmltLXN5bnRheCoKK3ZpbS12YXJpYWJsZQlldmFsLnR4dAkvKnZpbS12YXJpYWJsZSoKK3ZpbS52aW0Jc3ludGF4LnR4dAkvKnZpbS52aW0qCit2aW06CW9wdGlvbnMudHh0CS8qdmltOioKK3ZpbWRldglpbnRyby50eHQJLyp2aW1kZXYqCit2aW1kaWZmCWRpZmYudHh0CS8qdmltZGlmZioKK3ZpbWZpbGVzCW9wdGlvbnMudHh0CS8qdmltZmlsZXMqCit2aW1pbmZvCXN0YXJ0aW5nLnR4dAkvKnZpbWluZm8qCit2aW1pbmZvLWVuY29kaW5nCXN0YXJ0aW5nLnR4dAkvKnZpbWluZm8tZW5jb2RpbmcqCit2aW1pbmZvLWVycm9ycwlzdGFydGluZy50eHQJLyp2aW1pbmZvLWVycm9ycyoKK3ZpbWluZm8tZmlsZQlzdGFydGluZy50eHQJLyp2aW1pbmZvLWZpbGUqCit2aW1pbmZvLWZpbGUtbWFya3MJc3RhcnRpbmcudHh0CS8qdmltaW5mby1maWxlLW1hcmtzKgordmltaW5mby1maWxlLW5hbWUJc3RhcnRpbmcudHh0CS8qdmltaW5mby1maWxlLW5hbWUqCit2aW1pbmZvLXJlYWQJc3RhcnRpbmcudHh0CS8qdmltaW5mby1yZWFkKgordmltaW5mby13cml0ZQlzdGFydGluZy50eHQJLyp2aW1pbmZvLXdyaXRlKgordmltcmMJc3RhcnRpbmcudHh0CS8qdmltcmMqCit2aW1yYy1maWxldHlwZQl1c3JfMDUudHh0CS8qdmltcmMtZmlsZXR5cGUqCit2aW1yYy1pbnRybwl1c3JfMDUudHh0CS8qdmltcmMtaW50cm8qCit2aW1yY19leGFtcGxlLnZpbQl1c3JfMDUudHh0CS8qdmltcmNfZXhhbXBsZS52aW0qCit2aW10dXRvcgl1c3JfMDEudHh0CS8qdmltdHV0b3IqCit2aXJ0Y29sKCkJZXZhbC50eHQJLyp2aXJ0Y29sKCkqCit2aXN1YWwtYmxvY2sJdmlzdWFsLnR4dAkvKnZpc3VhbC1ibG9jayoKK3Zpc3VhbC1jaGFuZ2UJdmlzdWFsLnR4dAkvKnZpc3VhbC1jaGFuZ2UqCit2aXN1YWwtZXhhbXBsZXMJdmlzdWFsLnR4dAkvKnZpc3VhbC1leGFtcGxlcyoKK3Zpc3VhbC1pbmRleAlpbmRleC50eHQJLyp2aXN1YWwtaW5kZXgqCit2aXN1YWwtbW9kZQl2aXN1YWwudHh0CS8qdmlzdWFsLW1vZGUqCit2aXN1YWwtb3BlcmF0b3JzCXZpc3VhbC50eHQJLyp2aXN1YWwtb3BlcmF0b3JzKgordmlzdWFsLXJlcGVhdAl2aXN1YWwudHh0CS8qdmlzdWFsLXJlcGVhdCoKK3Zpc3VhbC1zZWFyY2gJdmlzdWFsLnR4dAkvKnZpc3VhbC1zZWFyY2gqCit2aXN1YWwtc3RhcnQJdmlzdWFsLnR4dAkvKnZpc3VhbC1zdGFydCoKK3Zpc3VhbC11c2UJdmlzdWFsLnR4dAkvKnZpc3VhbC11c2UqCit2aXN1YWwudHh0CXZpc3VhbC50eHQJLyp2aXN1YWwudHh0KgordmlzdWFsbW9kZSgpCWV2YWwudHh0CS8qdmlzdWFsbW9kZSgpKgordm1zCW9zX3Ztcy50eHQJLyp2bXMqCit2bXMtYXV0aG9ycwlvc192bXMudHh0CS8qdm1zLWF1dGhvcnMqCit2bXMtY2hhbmdlcwlvc192bXMudHh0CS8qdm1zLWNoYW5nZXMqCit2bXMtY29tcGlsaW5nCW9zX3Ztcy50eHQJLyp2bXMtY29tcGlsaW5nKgordm1zLWRlcGxveQlvc192bXMudHh0CS8qdm1zLWRlcGxveSoKK3Ztcy1kb3dubG9hZAlvc192bXMudHh0CS8qdm1zLWRvd25sb2FkKgordm1zLWd1aQlvc192bXMudHh0CS8qdm1zLWd1aSoKK3Ztcy1ub3Rlcwlvc192bXMudHh0CS8qdm1zLW5vdGVzKgordm1zLXByb2JsZW1zCW9zX3Ztcy50eHQJLyp2bXMtcHJvYmxlbXMqCit2bXMtc3RhcnRlZAlvc192bXMudHh0CS8qdm1zLXN0YXJ0ZWQqCit2bXMtdXNhZ2UJb3Nfdm1zLnR4dAkvKnZtcy11c2FnZSoKK3ZvdGUtZm9yLWZlYXR1cmVzCXNwb25zb3IudHh0CS8qdm90ZS1mb3ItZmVhdHVyZXMqCit2b3Rlcy1jb3VudGVkCXNwb25zb3IudHh0CS8qdm90ZXMtY291bnRlZCoKK3ZvdGVzLWZvci1jaGFuZ2VzCXRvZG8udHh0CS8qdm90ZXMtZm9yLWNoYW5nZXMqCit2cmVwbGFjZS1tb2RlCWluc2VydC50eHQJLyp2cmVwbGFjZS1tb2RlKgordnQxMDAtY3Vyc29yLWtleXMJdGVybS50eHQJLyp2dDEwMC1jdXJzb3Ita2V5cyoKK3Z0MTAwLWZ1bmN0aW9uLWtleXMJdGVybS50eHQJLyp2dDEwMC1mdW5jdGlvbi1rZXlzKgordwltb3Rpb24udHh0CS8qdyoKK3czMi1jbGllbnRzZXJ2ZXIJcmVtb3RlLnR4dAkvKnczMi1jbGllbnRzZXJ2ZXIqCit3OnZhcglldmFsLnR4dAkvKnc6dmFyKgord2FybmluZ21zZy12YXJpYWJsZQlldmFsLnR4dAkvKndhcm5pbmdtc2ctdmFyaWFibGUqCit3aGl0ZS1zcGFjZQlwYXR0ZXJuLnR4dAkvKndoaXRlLXNwYWNlKgord2hpdGVzcGFjZQlwYXR0ZXJuLnR4dAkvKndoaXRlc3BhY2UqCit3aW4xNi0hc3RhcnQJZ3VpX3cxNi50eHQJLyp3aW4xNi0hc3RhcnQqCit3aW4xNi1jbGlwYm9hcmQJZ3VpX3cxNi50eHQJLyp3aW4xNi1jbGlwYm9hcmQqCit3aW4xNi1jb2xvcnMJZ3VpX3cxNi50eHQJLyp3aW4xNi1jb2xvcnMqCit3aW4xNi1kZWZhdWx0LWVkaXRvcglndWlfdzE2LnR4dAkvKndpbjE2LWRlZmF1bHQtZWRpdG9yKgord2luMTYtZGlhbG9ncwlndWlfdzE2LnR4dAkvKndpbjE2LWRpYWxvZ3MqCit3aW4xNi1kcmFnLW4tZHJvcAlndWlfdzE2LnR4dAkvKndpbjE2LWRyYWctbi1kcm9wKgord2luMTYtZ3VpCWd1aV93MTYudHh0CS8qd2luMTYtZ3VpKgord2luMTYtbWF4aW1pemVkCWd1aV93MTYudHh0CS8qd2luMTYtbWF4aW1pemVkKgord2luMTYtcHJpbnRpbmcJZ3VpX3cxNi50eHQJLyp3aW4xNi1wcmludGluZyoKK3dpbjE2LXNoZWxsCWd1aV93MTYudHh0CS8qd2luMTYtc2hlbGwqCit3aW4xNi1zdGFydAlndWlfdzE2LnR4dAkvKndpbjE2LXN0YXJ0Kgord2luMTYtdHJ1ZXR5cGUJZ3VpX3cxNi50eHQJLyp3aW4xNi10cnVldHlwZSoKK3dpbjE2LXZhcmlvdXMJZ3VpX3cxNi50eHQJLyp3aW4xNi12YXJpb3VzKgord2luMzIJb3Nfd2luMzIudHh0CS8qd2luMzIqCit3aW4zMi0hc3RhcnQJZ3VpX3czMi50eHQJLyp3aW4zMi0hc3RhcnQqCit3aW4zMi1jb2xvcnMJZ3VpX3czMi50eHQJLyp3aW4zMi1jb2xvcnMqCit3aW4zMi1jb21waWxpbmcJb3Nfd2luMzIudHh0CS8qd2luMzItY29tcGlsaW5nKgord2luMzItY3VyZGlyCW9zX3dpbjMyLnR4dAkvKndpbjMyLWN1cmRpcioKK3dpbjMyLWZhcQlvc193aW4zMi50eHQJLyp3aW4zMi1mYXEqCit3aW4zMi1nZXR0ZXh0CW1sYW5nLnR4dAkvKndpbjMyLWdldHRleHQqCit3aW4zMi1ndWkJZ3VpX3czMi50eHQJLyp3aW4zMi1ndWkqCit3aW4zMi1oaWRkZW4tbWVudXMJZ3VpLnR4dAkvKndpbjMyLWhpZGRlbi1tZW51cyoKK3dpbjMyLW1vdXNlCW9zX3dpbjMyLnR4dAkvKndpbjMyLW1vdXNlKgord2luMzItb3Blbi13aXRoLW1lbnUJZ3VpX3czMi50eHQJLyp3aW4zMi1vcGVuLXdpdGgtbWVudSoKK3dpbjMyLXBvcHVwLW1lbnUJZ3VpX3czMi50eHQJLyp3aW4zMi1wb3B1cC1tZW51Kgord2luMzItcHJvYmxlbXMJb3Nfd2luMzIudHh0CS8qd2luMzItcHJvYmxlbXMqCit3aW4zMi1yZXN0b3JlCW9zX3dpbjMyLnR4dAkvKndpbjMyLXJlc3RvcmUqCit3aW4zMi1zdGFydHVwCW9zX3dpbjMyLnR4dAkvKndpbjMyLXN0YXJ0dXAqCit3aW4zMi10ZXJtCW9zX3dpbjMyLnR4dAkvKndpbjMyLXRlcm0qCit3aW4zMi12aW1ydW4JZ3VpX3czMi50eHQJLyp3aW4zMi12aW1ydW4qCit3aW4zMi13aW4zLjEJb3Nfd2luMzIudHh0CS8qd2luMzItd2luMy4xKgord2luMzJzCW9zX3dpbjMyLnR4dAkvKndpbjMycyoKK3dpbmJ1Zm5yKCkJZXZhbC50eHQJLyp3aW5idWZucigpKgord2luY29sKCkJZXZhbC50eHQJLyp3aW5jb2woKSoKK3dpbmRvdy1jb250ZW50cwlpbnRyby50eHQJLyp3aW5kb3ctY29udGVudHMqCit3aW5kb3ctZXhpdAllZGl0aW5nLnR4dAkvKndpbmRvdy1leGl0Kgord2luZG93LW1vdmUtY3Vyc29yCXdpbmRvd3MudHh0CS8qd2luZG93LW1vdmUtY3Vyc29yKgord2luZG93LW1vdmluZwl3aW5kb3dzLnR4dAkvKndpbmRvdy1tb3ZpbmcqCit3aW5kb3ctcmVzaXplCXdpbmRvd3MudHh0CS8qd2luZG93LXJlc2l6ZSoKK3dpbmRvdy1zaXplCXRlcm0udHh0CS8qd2luZG93LXNpemUqCit3aW5kb3ctdGFnCXdpbmRvd3MudHh0CS8qd2luZG93LXRhZyoKK3dpbmRvdy12YXJpYWJsZQlldmFsLnR4dAkvKndpbmRvdy12YXJpYWJsZSoKK3dpbmRvd3MJd2luZG93cy50eHQJLyp3aW5kb3dzKgord2luZG93cy0zLjEJb3Nfd2luMzIudHh0CS8qd2luZG93cy0zLjEqCit3aW5kb3dzLWludHJvCXdpbmRvd3MudHh0CS8qd2luZG93cy1pbnRybyoKK3dpbmRvd3Mtc3RhcnRpbmcJd2luZG93cy50eHQJLyp3aW5kb3dzLXN0YXJ0aW5nKgord2luZG93cy50eHQJd2luZG93cy50eHQJLyp3aW5kb3dzLnR4dCoKK3dpbmRvd3M5NQlvc193aW4zMi50eHQJLyp3aW5kb3dzOTUqCit3aW5oZWlnaHQoKQlldmFsLnR4dAkvKndpbmhlaWdodCgpKgord2lubGluZSgpCWV2YWwudHh0CS8qd2lubGluZSgpKgord2lubnIoKQlldmFsLnR4dAkvKndpbm5yKCkqCit3aW5yZXN0Y21kKCkJZXZhbC50eHQJLyp3aW5yZXN0Y21kKCkqCit3aW53aWR0aCgpCWV2YWwudHh0CS8qd2lud2lkdGgoKSoKK3dvcmQJbW90aW9uLnR4dAkvKndvcmQqCit3b3JkLWNvdW50CWVkaXRpbmcudHh0CS8qd29yZC1jb3VudCoKK3dvcmQtbW90aW9ucwltb3Rpb24udHh0CS8qd29yZC1tb3Rpb25zKgord29ya2JlbmNoCXN0YXJ0aW5nLnR4dAkvKndvcmtiZW5jaCoKK3dvcmtzaG9wCXdvcmtzaG9wLnR4dAkvKndvcmtzaG9wKgord29ya3Nob3AtY29tbWFuZHMJd29ya3Nob3AudHh0CS8qd29ya3Nob3AtY29tbWFuZHMqCit3b3Jrc2hvcC1jb21waWxpbmcJd29ya3Nob3AudHh0CS8qd29ya3Nob3AtY29tcGlsaW5nKgord29ya3Nob3AtY29uZmlndXJlCXdvcmtzaG9wLnR4dAkvKndvcmtzaG9wLWNvbmZpZ3VyZSoKK3dvcmtzaG9wLWludHJvCXdvcmtzaG9wLnR4dAkvKndvcmtzaG9wLWludHJvKgord29ya3Nob3Atc3VwcG9ydAl3b3Jrc2hvcC50eHQJLyp3b3Jrc2hvcC1zdXBwb3J0Kgord29ya3Nob3AteHBtCXdvcmtzaG9wLnR4dAkvKndvcmtzaG9wLXhwbSoKK3dvcmtzaG9wLnR4dAl3b3Jrc2hvcC50eHQJLyp3b3Jrc2hvcC50eHQqCit3cmFwLW9mZglpbnRyby50eHQJLyp3cmFwLW9mZioKK3dyaXRlLWNvbXBpbGVyLXBsdWdpbgl1c3JfNDEudHh0CS8qd3JpdGUtY29tcGlsZXItcGx1Z2luKgord3JpdGUtZGV2aWNlCWVkaXRpbmcudHh0CS8qd3JpdGUtZGV2aWNlKgord3JpdGUtZmFpbAllZGl0aW5nLnR4dAkvKndyaXRlLWZhaWwqCit3cml0ZS1maWxldHlwZS1wbHVnaW4JdXNyXzQxLnR4dAkvKndyaXRlLWZpbGV0eXBlLXBsdWdpbioKK3dyaXRlLWxvY2FsLWhlbHAJdXNyXzQxLnR4dAkvKndyaXRlLWxvY2FsLWhlbHAqCit3cml0ZS1wbHVnaW4JdXNyXzQxLnR4dAkvKndyaXRlLXBsdWdpbioKK3dyaXRlLXF1aXQJZWRpdGluZy50eHQJLyp3cml0ZS1xdWl0Kgord3JpdGUtcmVhZG9ubHkJZWRpdGluZy50eHQJLyp3cml0ZS1yZWFkb25seSoKK3dyaXRpbmcJZWRpdGluZy50eHQJLyp3cml0aW5nKgord3d3CWludHJvLnR4dAkvKnd3dyoKK3gJY2hhbmdlLnR4dAkvKngqCit4LWlucHV0LW1ldGhvZAltYnl0ZS50eHQJLyp4LWlucHV0LW1ldGhvZCoKK3gtcmVzb3VyY2VzCXZlcnNpb241LnR4dAkvKngtcmVzb3VyY2VzKgoreDExLWNsaWVudHNlcnZlcglyZW1vdGUudHh0CS8qeDExLWNsaWVudHNlcnZlcioKK3gxMS1jdXQtYnVmZmVyCWd1aV94MTEudHh0CS8qeDExLWN1dC1idWZmZXIqCit4MTEtc2VsZWN0aW9uCWd1aV94MTEudHh0CS8qeDExLXNlbGVjdGlvbioKK3hmODZjb25mLXN5bnRheAlzeW50YXgudHh0CS8qeGY4NmNvbmYtc3ludGF4KgoreGY4NmNvbmYudmltCXN5bnRheC50eHQJLyp4Zjg2Y29uZi52aW0qCit4Zm9udHNldAltYnl0ZS50eHQJLyp4Zm9udHNldCoKK3hmcmVlLXh0ZXJtCXN5bnRheC50eHQJLyp4ZnJlZS14dGVybSoKK3hpbQltYnl0ZS50eHQJLyp4aW0qCit4aW0taW5wdXQtc3R5bGUJbWJ5dGUudHh0CS8qeGltLWlucHV0LXN0eWxlKgoreGl0ZXJtCXN5bnRheC50eHQJLyp4aXRlcm0qCit4bWwtZm9sZGluZwlzeW50YXgudHh0CS8qeG1sLWZvbGRpbmcqCit4bWwtc3ludGF4CXN5bnRheC50eHQJLyp4bWwtc3ludGF4KgoreG1sLnZpbQlzeW50YXgudHh0CS8qeG1sLnZpbSoKK3hwbS1zeW50YXgJc3ludGF4LnR4dAkvKnhwbS1zeW50YXgqCit4cG0udmltCXN5bnRheC50eHQJLyp4cG0udmltKgoreHRlcm0tOC1iaXQJdGVybS50eHQJLyp4dGVybS04LWJpdCoKK3h0ZXJtLThiaXQJdGVybS50eHQJLyp4dGVybS04Yml0KgoreHRlcm0tYmxpbmsJc3ludGF4LnR4dAkvKnh0ZXJtLWJsaW5rKgoreHRlcm0tYmxpbmtpbmctY3Vyc29yCXN5bnRheC50eHQJLyp4dGVybS1ibGlua2luZy1jdXJzb3IqCit4dGVybS1jbGlwYm9hcmQJdGVybS50eHQJLyp4dGVybS1jbGlwYm9hcmQqCit4dGVybS1jb2Rlcwl0ZXJtLnR4dAkvKnh0ZXJtLWNvZGVzKgoreHRlcm0tY29sb3IJc3ludGF4LnR4dAkvKnh0ZXJtLWNvbG9yKgoreHRlcm0tY29tbWFuZC1zZXJ2ZXIJdGVybS50eHQJLyp4dGVybS1jb21tYW5kLXNlcnZlcioKK3h0ZXJtLWNvcHktcGFzdGUJdGVybS50eHQJLyp4dGVybS1jb3B5LXBhc3RlKgoreHRlcm0tY3Vyc29yLWtleXMJdGVybS50eHQJLyp4dGVybS1jdXJzb3Ita2V5cyoKK3h0ZXJtLWVuZC1ob21lLWtleXMJdGVybS50eHQJLyp4dGVybS1lbmQtaG9tZS1rZXlzKgoreHRlcm0tZnVuY3Rpb24ta2V5cwl0ZXJtLnR4dAkvKnh0ZXJtLWZ1bmN0aW9uLWtleXMqCit4dGVybS1tb3VzZQlvcHRpb25zLnR4dAkvKnh0ZXJtLW1vdXNlKgoreHRlcm0tbW91c2Utd2hlZWwJc2Nyb2xsLnR4dAkvKnh0ZXJtLW1vdXNlLXdoZWVsKgoreHRlcm0tc2F2ZS1zY3JlZW4JdGlwcy50eHQJLyp4dGVybS1zYXZlLXNjcmVlbioKK3h0ZXJtLXNjcmVlbnMJdGlwcy50eHQJLyp4dGVybS1zY3JlZW5zKgoreHRlcm0tc2Nyb2xsLXJlZ2lvbgl0ZXJtLnR4dAkvKnh0ZXJtLXNjcm9sbC1yZWdpb24qCit4dGVybS1zaGlmdGVkLWtleXMJdGVybS50eHQJLyp4dGVybS1zaGlmdGVkLWtleXMqCit5CWNoYW5nZS50eHQJLyp5KgoreWFuawljaGFuZ2UudHh0CS8qeWFuayoKK3llLW9wdGlvbi1nb25lCXZlcnNpb240LnR4dAkvKnllLW9wdGlvbi1nb25lKgoreWVhci0yMDAwCWludHJvLnR4dAkvKnllYXItMjAwMCoKK3lvdXItcnVudGltZS1kaXIJdXNyXzQzLnR4dAkvKnlvdXItcnVudGltZS1kaXIqCit5eQljaGFuZ2UudHh0CS8qeXkqCit6CWluZGV4LnR4dAkvKnoqCit6KwlzY3JvbGwudHh0CS8qeisqCit6LQlzY3JvbGwudHh0CS8qei0qCit6LglzY3JvbGwudHh0CS8qei4qCit6L09TCW9zXzM5MC50eHQJLyp6XC9PUyoKK3o8Q1I+CXNjcm9sbC50eHQJLyp6PENSPioKK3o8TGVmdD4Jc2Nyb2xsLnR4dAkvKno8TGVmdD4qCit6PFJpZ2h0PglzY3JvbGwudHh0CS8qejxSaWdodD4qCit6QQlmb2xkLnR4dAkvKnpBKgorekMJZm9sZC50eHQJLyp6QyoKK3pECWZvbGQudHh0CS8qekQqCit6RQlmb2xkLnR4dAkvKnpFKgorekYJZm9sZC50eHQJLyp6RioKK3pICXNjcm9sbC50eHQJLyp6SCoKK3pMCXNjcm9sbC50eHQJLyp6TCoKK3pNCWZvbGQudHh0CS8qek0qCit6Tglmb2xkLnR4dAkvKnpOKgorek48Q1I+CXNjcm9sbC50eHQJLyp6TjxDUj4qCit6Twlmb2xkLnR4dAkvKnpPKgorek9TCW9zXzM5MC50eHQJLyp6T1MqCit6T1MtQnVncwlvc18zOTAudHh0CS8qek9TLUJ1Z3MqCit6T1MtTW90aWYJb3NfMzkwLnR4dAkvKnpPUy1Nb3RpZioKK3pPUy1idWlsZGluZwlvc18zOTAudHh0CS8qek9TLWJ1aWxkaW5nKgorek9TLWNoYW5nZXMJb3NfMzkwLnR4dAkvKnpPUy1jaGFuZ2VzKgorek9TLWZlZWRiYWNrCW9zXzM5MC50eHQJLyp6T1MtZmVlZGJhY2sqCit6T1MtaGFzLWViY2RpYwlvc18zOTAudHh0CS8qek9TLWhhcy1lYmNkaWMqCit6T1Mtb3Blbi1zb3VyY2UJb3NfMzkwLnR4dAkvKnpPUy1vcGVuLXNvdXJjZSoKK3pPUy13ZWFrbmVzc2VzCW9zXzM5MC50eHQJLyp6T1Mtd2Vha25lc3NlcyoKK3pPUy14dGVybQlvc18zOTAudHh0CS8qek9TLXh0ZXJtKgorelIJZm9sZC50eHQJLyp6UioKK3pYCWZvbGQudHh0CS8qelgqCit6XglzY3JvbGwudHh0CS8qel4qCit6YQlmb2xkLnR4dAkvKnphKgoremIJc2Nyb2xsLnR4dAkvKnpiKgoremMJZm9sZC50eHQJLyp6YyoKK3pkCWZvbGQudHh0CS8qemQqCit6ZQlzY3JvbGwudHh0CS8qemUqCit6Zglmb2xkLnR4dAkvKnpmKgoremgJc2Nyb2xsLnR4dAkvKnpoKgoremkJZm9sZC50eHQJLyp6aSoKK3pqCWZvbGQudHh0CS8qemoqCit6awlmb2xkLnR4dAkvKnprKgoremwJc2Nyb2xsLnR4dAkvKnpsKgorem0JZm9sZC50eHQJLyp6bSoKK3puCWZvbGQudHh0CS8qem4qCit6bwlmb2xkLnR4dAkvKnpvKgorenIJZm9sZC50eHQJLyp6cioKK3pzCXNjcm9sbC50eHQJLyp6cyoKK3p0CXNjcm9sbC50eHQJLyp6dCoKK3p2CWZvbGQudHh0CS8qenYqCit6eAlmb2xkLnR4dAkvKnp4KgorenoJc2Nyb2xsLnR4dAkvKnp6Kgorewltb3Rpb24udHh0CS8qeyoKK3tWaXN1YWx9CWludHJvLnR4dAkvKntWaXN1YWx9Kgore2FkZHJlc3N9CWNtZGxpbmUudHh0CS8qe2FkZHJlc3N9Kgore2NoYXIxLWNoYXIyfQlpbnRyby50eHQJLyp7Y2hhcjEtY2hhcjJ9Kgore2V2ZW50fQlhdXRvY21kLnR4dAkvKntldmVudH0qCit7ZmlsZX0JZWRpdGluZy50eHQJLyp7ZmlsZX0qCit7Z3JvdXAtbmFtZX0Jc3ludGF4LnR4dAkvKntncm91cC1uYW1lfSoKK3tsaHN9CW1hcC50eHQJLyp7bGhzfSoKK3ttb3Rpb259CWludHJvLnR4dAkvKnttb3Rpb259Kgore21vdmUtYXJvdW5kfQl2aXN1YWwudHh0CS8qe21vdmUtYXJvdW5kfSoKK3tvZmZzZXR9CXBhdHRlcm4udHh0CS8qe29mZnNldH0qCit7cGF0fQlhdXRvY21kLnR4dAkvKntwYXR9Kgore3Joc30JbWFwLnR4dAkvKntyaHN9Kgore3N1YmplY3R9CXZhcmlvdXMudHh0CS8qe3N1YmplY3R9Kgore30JaW50cm8udHh0CS8qe30qCit9CW1vdGlvbi50eHQJLyp9KgorfgljaGFuZ2UudHh0CS8qfioKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RhZ3NyY2gudHh0IGIvcnVudGltZS9kb2MvdGFnc3JjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4N2UwZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3RhZ3NyY2gudHh0CkBAIC0wLDAgKzEsODA5IEBACisqdGFnc3JjaC50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgQXByIDI5CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworVGFncyBhbmQgc3BlY2lhbCBzZWFyY2hlcwkJCQkqdGFncy1hbmQtc2VhcmNoZXMqCisKK1NlZSBzZWN0aW9uIHwyOS4xfCBvZiB0aGUgdXNlciBtYW51YWwgZm9yIGFuIGludHJvZHVjdGlvbi4KKworMS4gSnVtcCB0byBhIHRhZwkJfHRhZy1jb21tYW5kc3wKKzIuIFRhZyBzdGFjawkJCXx0YWctc3RhY2t8CiszLiBUYWcgbWF0Y2ggbGlzdAkJfHRhZy1tYXRjaGxpc3R8Cis0LiBUYWdzIGRldGFpbHMJCQl8dGFnLWRldGFpbHN8Cis1LiBUYWdzIGZpbGUgZm9ybWF0CQl8dGFncy1maWxlLWZvcm1hdHwKKzYuIEluY2x1ZGUgZmlsZSBzZWFyY2hlcwl8aW5jbHVkZS1zZWFyY2h8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSnVtcCB0byBhIHRhZwkJCQkJKnRhZy1jb21tYW5kcyoKKworCQkJCQkJCSp0YWcqICp0YWdzKgorQSB0YWcgaXMgYW4gaWRlbnRpZmllciB0aGF0IGFwcGVhcnMgaW4gYSAidGFncyIgZmlsZS4gIEl0IGlzIGEgc29ydCBvZiBsYWJlbAordGhhdCBjYW4gYmUganVtcGVkIHRvLiAgRm9yIGV4YW1wbGU6IEluIEMgcHJvZ3JhbXMgZWFjaCBmdW5jdGlvbiBuYW1lIGNhbiBiZQordXNlZCBhcyBhIHRhZy4gIFRoZSAidGFncyIgZmlsZSBoYXMgdG8gYmUgZ2VuZXJhdGVkIGJ5IGEgcHJvZ3JhbSBsaWtlIGN0YWdzLAorYmVmb3JlIHRoZSB0YWcgY29tbWFuZHMgY2FuIGJlIHVzZWQuCisKK1dpdGggdGhlICI6dGFnIiBjb21tYW5kIHRoZSBjdXJzb3Igd2lsbCBiZSBwb3NpdGlvbmVkIG9uIHRoZSB0YWcuICBXaXRoIHRoZQorQ1RSTC1dIGNvbW1hbmQsIHRoZSBrZXl3b3JkIG9uIHdoaWNoIHRoZSBjdXJzb3IgaXMgc3RhbmRpbmcgaXMgdXNlZCBhcyB0aGUKK3RhZy4gIElmIHRoZSBjdXJzb3IgaXMgbm90IG9uIGEga2V5d29yZCwgdGhlIGZpcnN0IGtleXdvcmQgdG8gdGhlIHJpZ2h0IG9mIHRoZQorY3Vyc29yIGlzIHVzZWQuCisKK1RoZSAiOnRhZyIgY29tbWFuZCB3b3JrcyB2ZXJ5IHdlbGwgZm9yIEMgcHJvZ3JhbXMuICBJZiB5b3Ugc2VlIGEgY2FsbCB0byBhCitmdW5jdGlvbiBhbmQgd29uZGVyIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLCBwb3NpdGlvbiB0aGUgY3Vyc29yIGluc2lkZSBvZiB0aGUKK2Z1bmN0aW9uIG5hbWUgYW5kIGhpdCBDVFJMLV0uICBUaGlzIHdpbGwgYnJpbmcgeW91IHRvIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLgorQW4gZWFzeSB3YXkgYmFjayBpcyB3aXRoIHRoZSBDVFJMLVQgY29tbWFuZC4gIEFsc28gcmVhZCBhYm91dCB0aGUgdGFnIHN0YWNrCitiZWxvdy4KKworCQkJCQkJKjp0YSogKjp0YWcqICpFNDI2KiAqRTQyOSoKKzp0YVtnXVshXSB7aWRlbnR9CUp1bXAgdG8gdGhlIGRlZmluaXRpb24gb2Yge2lkZW50fSwgdXNpbmcgdGhlCisJCQlpbmZvcm1hdGlvbiBpbiB0aGUgdGFncyBmaWxlKHMpLiAgUHV0IHtpZGVudH0gaW4gdGhlCisJCQl0YWcgc3RhY2suICBTZWUgfHRhZy0hfCBmb3IgWyFdLgorCQkJe2lkZW50fSBjYW4gYmUgYSByZWdleHAgcGF0dGVybiwgc2VlIHx0YWctcmVnZXhwfC4KKwkJCVdoZW4gdGhlcmUgYXJlIHNldmVyYWwgbWF0Y2hpbmcgdGFncyBmb3Ige2lkZW50fSwgdGhlCisJCQlmaXJzdCBvbmUgaXMganVtcGVkIHRvLiB8OnRuZXh0fC4KKworZzxMZWZ0TW91c2U+CQkJCQkJKmc8TGVmdE1vdXNlPioKKzxDLUxlZnRNb3VzZT4JCQkJCSo8Qy1MZWZ0TW91c2U+KiAqQ1RSTC1dKgorQ1RSTC1dCQkJSnVtcCB0byB0aGUgZGVmaW5pdGlvbiBvZiB0aGUga2V5d29yZCB1bmRlciB0aGUKKwkJCWN1cnNvci4gIFNhbWUgYXMgIjp0YWcge2lkZW50fSIsIHdoZXJlIHtpZGVudH0gaXMgdGhlCisJCQlrZXl3b3JkIHVuZGVyIG9yIGFmdGVyIGN1cnNvci4gIHtWaTogaWRlbnRpZmllciBhZnRlcgorCQkJdGhlIGN1cnNvcn0KKworCQkJCQkJCSp2X0NUUkwtXSoKK3tWaXN1YWx9Q1RSTC1dCQlTYW1lIGFzICI6dGFnIHtpZGVudH0iLCB3aGVyZSB7aWRlbnR9IGlzIHRoZSB0ZXh0IHRoYXQKKwkJCWlzIGhpZ2hsaWdodGVkLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSp0ZWxuZXQtQ1RSTC1dKgorQ1RSTC1dIGlzIHRoZSBkZWZhdWx0IHRlbG5ldCBlc2NhcGUga2V5LiAgV2hlbiB5b3UgdHlwZSBDVFJMLV0gdG8ganVtcCB0byBhCit0YWcsIHlvdSB3aWxsIGdldCB0aGUgdGVsbmV0IHByb21wdCBpbnN0ZWFkLiAgTW9zdCB2ZXJzaW9ucyBvZiB0ZWxuZXQgYWxsb3cKK2NoYW5naW5nIG9yIGRpc2FibGluZyB0aGUgZGVmYXVsdCBlc2NhcGUga2V5LiAgU2VlIHRoZSB0ZWxuZXQgbWFuIHBhZ2UuICBZb3UKK2NhbiAndGVsbmV0IC1FIHtIb3N0bmFtZX0nIHRvIGRpc2FibGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIsIG9yICd0ZWxuZXQgLWUKK3tFc2NhcGVDaGFyYWN0ZXJ9IHtIb3N0bmFtZX0nIHRvIHNwZWNpZnkgYW5vdGhlciBlc2NhcGUgY2hhcmFjdGVyLiAgSWYKK3Bvc3NpYmxlLCB0cnkgdG8gdXNlICJyc2giIGluc3RlYWQgb2YgInRlbG5ldCIgdG8gYXZvaWQgdGhpcyBwcm9ibGVtLgorCisJCQkJCQkJKnRhZy1wcmlvcml0eSoKK1doZW4gdGhlcmUgYXJlIG11bHRpcGxlIG1hdGNoZXMgZm9yIGEgdGFnLCB0aGlzIHByaW9yaXR5IGlzIHVzZWQ6CisxLiAiRlNDIiAgQSBmdWxsIG1hdGNoaW5nIHN0YXRpYyB0YWcgZm9yIHRoZSBjdXJyZW50IGZpbGUuCisyLiAiRiBDIiAgQSBmdWxsIG1hdGNoaW5nIGdsb2JhbCB0YWcgZm9yIHRoZSBjdXJyZW50IGZpbGUuCiszLiAiRiAgIiAgQSBmdWxsIG1hdGNoaW5nIGdsb2JhbCB0YWcgZm9yIGFub3RoZXIgZmlsZS4KKzQuICJGUyAiICBBIGZ1bGwgbWF0Y2hpbmcgc3RhdGljIHRhZyBmb3IgYW5vdGhlciBmaWxlLgorNS4gIiBTQyIgIEFuIGlnbm9yZS1jYXNlIG1hdGNoaW5nIHN0YXRpYyB0YWcgZm9yIHRoZSBjdXJyZW50IGZpbGUuCis2LiAiICBDIiAgQW4gaWdub3JlLWNhc2UgbWF0Y2hpbmcgZ2xvYmFsIHRhZyBmb3IgdGhlIGN1cnJlbnQgZmlsZS4KKzcuICIgICAiICBBbiBpZ25vcmUtY2FzZSBtYXRjaGluZyBnbG9iYWwgdGFnIGZvciBhbm90aGVyIGZpbGUuCis4LiAiIFMgIiAgQW4gaWdub3JlLWNhc2UgbWF0Y2hpbmcgc3RhdGljIHRhZyBmb3IgYW5vdGhlciBmaWxlLgorCitOb3RlIHRoYXQgd2hlbiB0aGUgY3VycmVudCBmaWxlIGNoYW5nZXMsIHRoZSBwcmlvcml0eSBsaXN0IGlzIG1vc3RseSBub3QKK2NoYW5nZWQsIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aGVuIHVzaW5nICI6dG5leHQiLiAgSXQgaXMgY2hhbmdlZCB3aGVuIHVzaW5nCisiOnRhZyB7aWRlbnR9Ii4KKworVGhlIGlnbm9yZS1jYXNlIG1hdGNoZXMgYXJlIG5vdCBmb3VuZCBmb3IgYSAiOnRhZyIgY29tbWFuZCB3aGVuIHRoZQorJ2lnbm9yZWNhc2UnIG9wdGlvbiBpcyBvZmYuICBUaGV5IGFyZSBmb3VuZCB3aGVuIGEgcGF0dGVybiBpcyB1c2VkIChzdGFydGluZword2l0aCBhICIvIikgYW5kIGZvciAiOnRzZWxlY3QiLCBhbHNvIHdoZW4gJ2lnbm9yZWNhc2UnIGlzIG9mZi4gIE5vdGUgdGhhdAordXNpbmcgaWdub3JlLWNhc2UgdGFnIHNlYXJjaGluZyBkaXNhYmxlcyBiaW5hcnkgc2VhcmNoaW5nIGluIHRoZSB0YWdzIGZpbGUsCit3aGljaCBjYXVzZXMgYSBzbG93ZG93bi4gIFRoaXMgY2FuIGJlIGF2b2lkZWQgYnkgZm9sZC1jYXNlIHNvcnRpbmcgdGhlIHRhZworZmlsZS4gIFNlZSB0aGUgJ3RhZ2JzZWFyY2gnIG9wdGlvbiBmb3IgYW4gZXhwbGFuYXRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVGFnIHN0YWNrCQkJCSp0YWctc3RhY2sqICp0YWdzdGFjayogKkU0MjUqCisKK09uIHRoZSB0YWcgc3RhY2sgaXMgcmVtZW1iZXJlZCB3aGljaCB0YWdzIHlvdSBqdW1wZWQgdG8sIGFuZCBmcm9tIHdoZXJlLgorVGFncyBhcmUgb25seSBwdXNoZWQgb250byB0aGUgc3RhY2sgd2hlbiB0aGUgJ3RhZ3N0YWNrJyBvcHRpb24gaXMgc2V0LgorCitnPFJpZ2h0TW91c2U+CQkJCQkJKmc8UmlnaHRNb3VzZT4qCis8Qy1SaWdodE1vdXNlPgkJCQkJKjxDLVJpZ2h0TW91c2U+KiAqQ1RSTC1UKgorQ1RSTC1UCQkJSnVtcCB0byBbY291bnRdIG9sZGVyIGVudHJ5IGluIHRoZSB0YWcgc3RhY2sKKwkJCShkZWZhdWx0IDEpLiAge25vdCBpbiBWaX0KKworCQkJCQkJKjpwbyogKjpwb3AqICpFNTU1KiAqRTU1NioKKzpbY291bnRdcG9bcF1bIV0JSnVtcCB0byBbY291bnRdIG9sZGVyIGVudHJ5IGluIHRhZyBzdGFjayAoZGVmYXVsdCAxKS4KKwkJCVNlZSB8dGFnLSF8IGZvciBbIV0uICB7bm90IGluIFZpfQorCis6W2NvdW50XXRhW2ddWyFdCUp1bXAgdG8gW2NvdW50XSBuZXdlciBlbnRyeSBpbiB0YWcgc3RhY2sgKGRlZmF1bHQgMSkuCisJCQlTZWUgfHRhZy0hfCBmb3IgWyFdLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6dGFncyoKKzp0YWdzCQkJU2hvdyB0aGUgY29udGVudHMgb2YgdGhlIHRhZyBzdGFjay4gIFRoZSBhY3RpdmUKKwkJCWVudHJ5IGlzIG1hcmtlZCB3aXRoIGEgJz4nLiAge25vdCBpbiBWaX0KKworVGhlIG91dHB1dCBvZiAiOnRhZ3MiIGxvb2tzIGxpa2UgdGhpczoKKworICAgIyBUTyB0YWcgICAgICBGUk9NIGxpbmUgaW4gZmlsZS9saW5lCisgICAxICAxIG1haW4JCSAxICBoYXJkZGlzazI6dGV4dC92aW0vdGVzdAorID4gMiAgMiBGdW5jQQkJNTggIGkgPSBGdW5jQSgxMCk7CisgICAzICAxIEZ1bmNDCSAgICAgICAzNTcgIGhhcmRkaXNrMjp0ZXh0L3ZpbS9zcmMvYW1pZ2EuYworCitUaGlzIGxpc3Qgc2hvd3MgdGhlIHRhZ3MgdGhhdCB5b3UganVtcGVkIHRvIGFuZCB0aGUgY3Vyc29yIHBvc2l0aW9uIGJlZm9yZQordGhhdCBqdW1wLiAgVGhlIG9sZGVyIHRhZ3MgYXJlIGF0IHRoZSB0b3AsIHRoZSBuZXdlciBhdCB0aGUgYm90dG9tLgorCitUaGUgJz4nIHBvaW50cyB0byB0aGUgYWN0aXZlIGVudHJ5LiAgVGhpcyBpcyB0aGUgdGFnIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZQorbmV4dCAiOnRhZyIgY29tbWFuZC4gIFRoZSBDVFJMLVQgYW5kICI6cG9wIiBjb21tYW5kIHdpbGwgdXNlIHRoZSBwb3NpdGlvbgorYWJvdmUgdGhlIGFjdGl2ZSBlbnRyeS4KKworQmVsb3cgdGhlICJUTyIgaXMgdGhlIG51bWJlciBvZiB0aGUgY3VycmVudCBtYXRjaCBpbiB0aGUgbWF0Y2ggbGlzdC4gIE5vdGUKK3RoYXQgdGhpcyBkb2Vzbid0IGNoYW5nZSB3aGVuIHVzaW5nICI6cG9wIiBvciAiOnRhZyIuCisKK1RoZSBsaW5lIG51bWJlciBhbmQgZmlsZSBuYW1lIGFyZSByZW1lbWJlcmVkIHRvIGJlIGFibGUgdG8gZ2V0IGJhY2sgdG8gd2hlcmUKK3lvdSB3ZXJlIGJlZm9yZSB0aGUgdGFnIGNvbW1hbmQuICBUaGUgbGluZSBudW1iZXIgd2lsbCBiZSBjb3JyZWN0LCBhbHNvIHdoZW4KK2RlbGV0aW5nL2luc2VydGluZyBsaW5lcywgdW5sZXNzIHRoaXMgd2FzIGRvbmUgYnkgYW5vdGhlciBwcm9ncmFtIChlLmcuCithbm90aGVyIGluc3RhbmNlIG9mIFZpbSkuCisKK0ZvciB0aGUgY3VycmVudCBmaWxlLCB0aGUgImZpbGUvbGluZSIgY29sdW1uIHNob3dzIHRoZSB0ZXh0IGF0IHRoZSBwb3NpdGlvbi4KK0FuIGluZGVudCBpcyByZW1vdmVkIGFuZCBhIGxvbmcgbGluZSBpcyB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSB3aW5kb3cuCisKK1lvdSBjYW4ganVtcCB0byBwcmV2aW91c2x5IHVzZWQgdGFncyB3aXRoIHNldmVyYWwgY29tbWFuZHMuICBTb21lIGV4YW1wbGVzOgorCisJIjpwb3AiIG9yIENUUkwtVAl0byBwb3NpdGlvbiBiZWZvcmUgcHJldmlvdXMgdGFnCisJe2NvdW50fUNUUkwtVAkJdG8gcG9zaXRpb24gYmVmb3JlIHtjb3VudH0gb2xkZXIgdGFnCisJIjp0YWciCQkJdG8gbmV3ZXIgdGFnCisJIjowdGFnIgkJCXRvIGxhc3QgdXNlZCB0YWcKKworVGhlIG1vc3Qgb2J2aW91cyB3YXkgdG8gdXNlIHRoaXMgaXMgd2hpbGUgYnJvd3NpbmcgdGhyb3VnaCB0aGUgY2FsbCBncmFwaCBvZgorYSBwcm9ncmFtLiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYWxsIGdyYXBoOgorCisJbWFpbiAgLS0tPiAgRnVuY0EgIC0tLT4gIEZ1bmNDCisJICAgICAgLS0tPiAgRnVuY0IKKworKEV4cGxhbmF0aW9uOiBtYWluIGNhbGxzIEZ1bmNBIGFuZCBGdW5jQjsgRnVuY0EgY2FsbHMgRnVuY0MpLgorWW91IGNhbiBnZXQgZnJvbSBtYWluIHRvIEZ1bmNBIGJ5IHVzaW5nIENUUkwtXSBvbiB0aGUgY2FsbCB0byBGdW5jQS4gIFRoZW4KK3lvdSBjYW4gQ1RSTC1dIHRvIGdldCB0byBGdW5jQy4gIElmIHlvdSBub3cgd2FudCB0byBnbyBiYWNrIHRvIG1haW4geW91IGNhbgordXNlIENUUkwtVCB0d2ljZS4gIFRoZW4geW91IGNhbiBDVFJMLV0gdG8gRnVuY0IuCisKK0lmIHlvdSBpc3N1ZSBhICI6dGEge2lkZW50fSIgb3IgQ1RSTC1dIGNvbW1hbmQsIHRoaXMgdGFnIGlzIGluc2VydGVkIGF0IHRoZQorY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RhY2suICBJZiB0aGUgc3RhY2sgd2FzIGZ1bGwgKGl0IGNhbiBob2xkIHVwIHRvIDIwCitlbnRyaWVzKSwgdGhlIG9sZGVzdCBlbnRyeSBpcyBkZWxldGVkIGFuZCB0aGUgb2xkZXIgZW50cmllcyBzaGlmdCBvbmUKK3Bvc2l0aW9uIHVwICh0aGVpciBpbmRleCBudW1iZXIgaXMgZGVjcmVtZW50ZWQgYnkgb25lKS4gIElmIHRoZSBsYXN0IHVzZWQKK2VudHJ5IHdhcyBub3QgYXQgdGhlIGJvdHRvbSwgdGhlIGVudHJpZXMgYmVsb3cgdGhlIGxhc3QgdXNlZCBvbmUgYXJlCitkZWxldGVkLiAgVGhpcyBtZWFucyB0aGF0IGFuIG9sZCBicmFuY2ggaW4gdGhlIGNhbGwgZ3JhcGggaXMgbG9zdC4gIEFmdGVyIHRoZQorY29tbWFuZHMgZXhwbGFpbmVkIGFib3ZlIHRoZSB0YWcgc3RhY2sgd2lsbCBsb29rIGxpa2UgdGhpczoKKworICAgIyBUTyB0YWcJRlJPTSBsaW5lIGluIGZpbGUKKyAgIDEgbWFpbgkgICAgICAgMSAgaGFyZGRpc2syOnRleHQvdmltL3Rlc3QKKyAgIDIgRnVuY0IJICAgICAgNTkgIGhhcmRkaXNrMjp0ZXh0L3ZpbS9zcmMvbWFpbi5jCisKKwkJCQkJCQkqRTczKgorV2hlbiB5b3UgdHJ5IHRvIHVzZSB0aGUgdGFnIHN0YWNrIHdoaWxlIGl0IGRvZXNuJ3QgY29udGFpbiBhbnl0aGluZyB5b3Ugd2lsbAorZ2V0IGFuIGVycm9yIG1lc3NhZ2UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gVGFnIG1hdGNoIGxpc3QJCQkJKnRhZy1tYXRjaGxpc3QqICpFNDI3KiAqRTQyOCoKKworV2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBtYXRjaGluZyB0YWdzLCB0aGVzZSBjb21tYW5kcyBjYW4gYmUgdXNlZCB0byBqdW1wCitiZXR3ZWVuIHRoZW0uICBOb3RlIHRoYXQgdGhlc2UgY29tbWFuZCBkb24ndCBjaGFuZ2UgdGhlIHRhZyBzdGFjaywgdGhleSBrZWVwCit0aGUgc2FtZSBlbnRyeS4KKworCQkJCQkJCSo6dHMqICo6dHNlbGVjdCoKKzp0c1tlbGVjdF1bIV0gW2lkZW50XQlMaXN0IHRoZSB0YWdzIHRoYXQgbWF0Y2ggW2lkZW50XSwgdXNpbmcgdGhlCisJCQlpbmZvcm1hdGlvbiBpbiB0aGUgdGFncyBmaWxlKHMpLgorCQkJV2hlbiBbaWRlbnRdIGlzIG5vdCBnaXZlbiwgdGhlIGxhc3QgdGFnIG5hbWUgZnJvbSB0aGUKKwkJCXRhZyBzdGFjayBpcyB1c2VkLgorCQkJV2l0aCBhICc+JyBpbiB0aGUgZmlyc3QgY29sdW1uIGlzIGluZGljYXRlZCB3aGljaCBpcworCQkJdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxpc3QgKGlmIHRoZXJlIGlzIG9uZSkuCisJCQlbaWRlbnRdIGNhbiBiZSBhIHJlZ2V4cCBwYXR0ZXJuLCBzZWUgfHRhZy1yZWdleHB8LgorCQkJU2VlIHx0YWctcHJpb3JpdHl8IGZvciB0aGUgcHJpb3JpdGllcyB1c2VkIGluIHRoZQorCQkJbGlzdGluZy4gIHtub3QgaW4gVml9CisJCQlFeGFtcGxlIG91dHB1dDoKKworPgorCSBuciBwcmkga2luZCB0YWcJCWZpbGUKKwkgIDEgRglmICAgIG1jaF9kZWxheQkJb3NfYW1pZ2EuYworCQkJbWNoX2RlbGF5KG1zZWMsIGlnbm9yZWlucHV0KQorCT4gMiBGCWYgICAgbWNoX2RlbGF5CQlvc19tc2Rvcy5jCisJCQltY2hfZGVsYXkobXNlYywgaWdub3JlaW5wdXQpCisJICAzIEYJZiAgICBtY2hfZGVsYXkJCW9zX3VuaXguYworCQkJbWNoX2RlbGF5KG1zZWMsIGlnbm9yZWlucHV0KQorCUVudGVyIG5yIG9mIGNob2ljZSAoPENSPiB0byBhYm9ydCk6Cis8CisJCQlTZWUgfHRhZy1wcmlvcml0eXwgZm9yIHRoZSAicHJpIiBjb2x1bW4uICBOb3RlIHRoYXQKKwkJCXRoaXMgZGVwZW5kcyBvbiB0aGUgY3VycmVudCBmaWxlLCB0aHVzIHVzaW5nCisJCQkiOnRzZWxlY3QgeHh4IiBjYW4gcHJvZHVjZSBkaWZmZXJlbnQgcmVzdWx0cy4KKwkJCVRoZSAia2luZCIgY29sdW1uIGdpdmVzIHRoZSBraW5kIG9mIHRhZywgaWYgdGhpcyB3YXMKKwkJCWluY2x1ZGVkIGluIHRoZSB0YWdzIGZpbGUuCisJCQlUaGUgImluZm8iIGNvbHVtbiBzaG93cyBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGJlCisJCQlmb3VuZCBpbiB0aGUgdGFncyBmaWxlLiAgSXQgZGVwZW5kcyBvbiB0aGUgcHJvZ3JhbQorCQkJdGhhdCBwcm9kdWNlZCB0aGUgdGFncyBmaWxlLgorCQkJV2hlbiB0aGUgbGlzdCBpcyBsb25nLCB5b3UgbWF5IGdldCB0aGUgfG1vcmUtcHJvbXB0fC4KKwkJCUlmIHlvdSBhbHJlYWR5IHNlZSB0aGUgdGFnIHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbgorCQkJdHlwZSAncScgYW5kIGVudGVyIHRoZSBudW1iZXIuCisKKwkJCQkJCQkqOnN0cyogKjpzdHNlbGVjdCoKKzpzdHNbZWxlY3RdWyFdIFtpZGVudF0JRG9lcyAiOnRzZWxlY3RbIV0gW2lkZW50XSIgYW5kIHNwbGl0cyB0aGUgd2luZG93IGZvcgorCQkJdGhlIHNlbGVjdGVkIHRhZy4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZ10qCitnXQkJCUxpa2UgQ1RSTC1dLCBidXQgdXNlICI6dHNlbGVjdCIgaW5zdGVhZCBvZiAiOnRhZyIuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKnZfZ10qCit7VmlzdWFsfWddCQlTYW1lIGFzICJnXSIsIGJ1dCB1c2UgdGhlIGhpZ2hsaWdodGVkIHRleHQgYXMgdGhlCisJCQlpZGVudGlmaWVyLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6dGoqICo6dGp1bXAqCis6dGpbdW1wXVshXSBbaWRlbnRdCUxpa2UgIjp0c2VsZWN0IiwgYnV0IGp1bXAgdG8gdGhlIHRhZyBkaXJlY3RseSB3aGVuCisJCQl0aGVyZSBpcyBvbmx5IG9uZSBtYXRjaC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnN0aiogKjpzdGp1bXAqCis6c3RqW3VtcF1bIV0gW2lkZW50XQlEb2VzICI6dGp1bXBbIV0gW2lkZW50XSIgYW5kIHNwbGl0cyB0aGUgd2luZG93IGZvciB0aGUKKwkJCXNlbGVjdGVkIHRhZy4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZ19DVFJMLV0qCitnIENUUkwtXQkJTGlrZSBDVFJMLV0sIGJ1dCB1c2UgIjp0anVtcCIgaW5zdGVhZCBvZiAiOnRhZyIuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKnZfZ19DVFJMLV0qCit7VmlzdWFsfWcgQ1RSTC1dCVNhbWUgYXMgImcgQ1RSTC1dIiwgYnV0IHVzZSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBhcworCQkJdGhlIGlkZW50aWZpZXIuICB7bm90IGluIFZpfQorCisJCQkJCQkJKjp0biogKjp0bmV4dCoKKzpbY291bnRddG5bZXh0XVshXQlKdW1wIHRvIFtjb3VudF0gbmV4dCBtYXRjaGluZyB0YWcgKGRlZmF1bHQgMSkuICBTZWUKKwkJCXx0YWctIXwgZm9yIFshXS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnRwKiAqOnRwcmV2aW91cyoKKzpbY291bnRddHBbcmV2aW91c11bIV0JSnVtcCB0byBbY291bnRdIHByZXZpb3VzIG1hdGNoaW5nIHRhZyAoZGVmYXVsdCAxKS4KKwkJCVNlZSB8dGFnLSF8IGZvciBbIV0uICB7bm90IGluIFZpfQorCisJCQkJCQkJKjp0TiogKjp0TmV4dCoKKzpbY291bnRddE5bZXh0XVshXQlTYW1lIGFzICI6dHByZXZpb3VzIi4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnRyKiAqOnRyZXdpbmQqCis6W2NvdW50XXRyW2V3aW5kXVshXQlKdW1wIHRvIGZpcnN0IG1hdGNoaW5nIHRhZy4gIElmIFtjb3VudF0gaXMgZ2l2ZW4sIGp1bXAKKwkJCXRvIFtjb3VudF10aCBtYXRjaGluZyB0YWcuICBTZWUgfHRhZy0hfCBmb3IgWyFdLiAge25vdAorCQkJaW4gVml9CisKKwkJCQkJCQkqOnRmKiAqOnRmaXJzdCoKKzpbY291bnRddGZbaXJzdF1bIV0JU2FtZSBhcyAiOnRyZXdpbmQiLiB7bm90IGluIFZpfQorCisJCQkJCQkJKjp0bCogKjp0bGFzdCoKKzp0bFthc3RdWyFdCQlKdW1wIHRvIGxhc3QgbWF0Y2hpbmcgdGFnLiAgU2VlIHx0YWctIXwgZm9yIFshXS4gIHtub3QKKwkJCWluIFZpfQorCisKK1doZW4gdGhlcmUgaXMgbm8gb3RoZXIgbWVzc2FnZSwgVmltIHNob3dzIHdoaWNoIG1hdGNoaW5nIHRhZyBoYXMgYmVlbiBqdW1wZWQKK3RvLCBhbmQgdGhlIG51bWJlciBvZiBtYXRjaGluZyB0YWdzOiA+CisJdGFnIDEgb2YgMyBvciBtb3JlCitUaGUgIiBvciBtb3JlIiBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgVmltIGRpZG4ndCB0cnkgYWxsIHRoZSB0YWdzIGZpbGVzIHlldC4KK1doZW4gdXNpbmcgIjp0bmV4dCIgYSBmZXcgdGltZXMsIG9yIHdpdGggIjp0bGFzdCIsIG1vcmUgbWF0Y2hlcyBtYXkgYmUgZm91bmQuCisKK1doZW4geW91IGRpZG4ndCBzZWUgdGhpcyBtZXNzYWdlIGJlY2F1c2Ugb2Ygc29tZSBvdGhlciBtZXNzYWdlLCBvciB5b3UganVzdAord2FudCB0byBrbm93IHdoZXJlIHlvdSBhcmUsIHRoaXMgY29tbWFuZCB3aWxsIHNob3cgaXQgYWdhaW4gKGFuZCBqdW1wIHRvIHRoZQorc2FtZSB0YWcgYXMgbGFzdCB0aW1lKTogPgorCTowdG4KKzwKKwkJCQkJCQkqdGFnLXNraXAtZmlsZSoKK1doZW4gYSBtYXRjaGluZyB0YWcgaXMgZm91bmQgZm9yIHdoaWNoIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIHRoaXMgbWF0Y2ggaXMKK3NraXBwZWQgYW5kIHRoZSBuZXh0IG1hdGNoaW5nIHRhZyBpcyB1c2VkLiAgVmltIHJlcG9ydHMgdGhpcywgdG8gbm90aWZ5IHlvdSBvZgorbWlzc2luZyBmaWxlcy4gIFdoZW4gdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBtYXRjaGVzIGhhcyBiZWVuIHJlYWNoZWQsIGFuIGVycm9yCittZXNzYWdlIGlzIGdpdmVuLgorCitUaGUgdGFnIG1hdGNoIGxpc3QgY2FuIGFsc28gYmUgdXNlZCBpbiB0aGUgcHJldmlldyB3aW5kb3cuICBUaGUgY29tbWFuZHMgYXJlCit0aGUgc2FtZSBhcyBhYm92ZSwgd2l0aCBhICJwIiBwcmVwZW5kZWQuCit7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcXVpY2tmaXh8IGZlYXR1cmV9CisKKwkJCQkJCQkqOnB0cyogKjpwdHNlbGVjdCoKKzpwdHNbZWxlY3RdWyFdIFtpZGVudF0JRG9lcyAiOnRzZWxlY3RbIV0gW2lkZW50XSIgYW5kIHNob3dzIHRoZSBuZXcgdGFnIGluIGEKKwkJCSJQcmV2aWV3IiB3aW5kb3cuIFNlZSB8OnB0YWd8IGZvciBtb3JlIGluZm8uCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpwdGoqICo6cHRqdW1wKgorOnB0alt1bXBdWyFdIFtpZGVudF0JRG9lcyAiOnRqdW1wWyFdIFtpZGVudF0iIGFuZCBzaG93cyB0aGUgbmV3IHRhZyBpbiBhCisJCQkiUHJldmlldyIgd2luZG93LiBTZWUgfDpwdGFnfCBmb3IgbW9yZSBpbmZvLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6cHRuKiAqOnB0bmV4dCoKKzpbY291bnRdcHRuW2V4dF1bIV0JIjp0bmV4dCIgaW4gdGhlIHByZXZpZXcgd2luZG93LiAgU2VlIHw6cHRhZ3wuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpwdHAqICo6cHRwcmV2aW91cyoKKzpbY291bnRdcHRwW3JldmlvdXNdWyFdCSI6dHByZXZpb3VzIiBpbiB0aGUgcHJldmlldyB3aW5kb3cuICBTZWUgfDpwdGFnfC4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqOnB0TiogKjpwdE5leHQqCis6W2NvdW50XXB0TltleHRdWyFdCVNhbWUgYXMgIjpwdHByZXZpb3VzIi4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnB0ciogKjpwdHJld2luZCoKKzpbY291bnRdcHRyW2V3aW5kXVshXQkiOnRyZXdpbmQiIGluIHRoZSBwcmV2aWV3IHdpbmRvdy4gIFNlZSB8OnB0YWd8LgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6cHRmKiAqOnB0Zmlyc3QqCis6W2NvdW50XXB0ZltpcnN0XVshXQlTYW1lIGFzICI6cHRyZXdpbmQiLiB7bm90IGluIFZpfQorCisJCQkJCQkJKjpwdGwqICo6cHRsYXN0KgorOnB0bFthc3RdWyFdCQkiOnRsYXN0IiBpbiB0aGUgcHJldmlldyB3aW5kb3cuICBTZWUgfDpwdGFnfC4KKwkJCXtub3QgaW4gVml9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVGFncyBkZXRhaWxzCQkJCQkJKnRhZy1kZXRhaWxzKgorCisJCQkJCQkJKnN0YXRpYy10YWcqCitBIHN0YXRpYyB0YWcgaXMgYSB0YWcgdGhhdCBpcyBkZWZpbmVkIGZvciBhIHNwZWNpZmljIGZpbGUuICBJbiBhIEMgcHJvZ3JhbQordGhpcyBjb3VsZCBiZSBhIHN0YXRpYyBmdW5jdGlvbi4KKworSW4gVmkganVtcGluZyB0byBhIHRhZyBzZXRzIHRoZSBjdXJyZW50IHNlYXJjaCBwYXR0ZXJuLiAgVGhpcyBtZWFucyB0aGF0Cit0aGUgIm4iIGNvbW1hbmQgYWZ0ZXIganVtcGluZyB0byBhIHRhZyBkb2VzIG5vdCBzZWFyY2ggZm9yIHRoZSBzYW1lIHBhdHRlcm4KK3RoYXQgaXQgZGlkIGJlZm9yZSBqdW1waW5nIHRvIHRoZSB0YWcuICBWaW0gZG9lcyBub3QgZG8gdGhpcyBhcyB3ZSBjb25zaWRlciBpdAordG8gYmUgYSBidWcuICBZb3UgY2FuIHN0aWxsIGZpbmQgdGhlIHRhZyBzZWFyY2ggcGF0dGVybiBpbiB0aGUgc2VhcmNoIGhpc3RvcnkuCitJZiB5b3UgcmVhbGx5IHdhbnQgdGhlIG9sZCBWaSBiZWhhdmlvciwgc2V0IHRoZSAndCcgZmxhZyBpbiAnY3BvcHRpb25zJy4KKworCQkJCQkJCSp0YWctYmluYXJ5LXNlYXJjaCoKK1ZpbSB1c2VzIGJpbmFyeSBzZWFyY2hpbmcgaW4gdGhlIHRhZ3MgZmlsZSB0byBmaW5kIHRoZSBkZXNpcmVkIHRhZyBxdWlja2x5Cisod2hlbiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSB8K3RhZ19iaW5hcnl8KS4gIEJ1dCB0aGlzIG9ubHkgd29ya3MgaWYgdGhlCit0YWdzIGZpbGUgd2FzIHNvcnRlZCBvbiBBU0NJSSBieXRlIHZhbHVlLiAgVGhlcmVmb3JlLCBpZiBubyBtYXRjaCB3YXMgZm91bmQsCithbm90aGVyIHRyeSBpcyBkb25lIHdpdGggYSBsaW5lYXIgc2VhcmNoLiAgSWYgeW91IG9ubHkgd2FudCB0aGUgbGluZWFyIHNlYXJjaCwKK3Jlc2V0IHRoZSAndGFnYnNlYXJjaCcgb3B0aW9uLiAgT3IgYmV0dGVyOiBTb3J0IHRoZSB0YWdzIGZpbGUhCisKK05vdGUgdGhhdCB0aGUgYmluYXJ5IHNlYXJjaGluZyBpcyBkaXNhYmxlZCB3aGVuIG5vdCBsb29raW5nIGZvciBhIHRhZyB3aXRoIGEKK3NwZWNpZmljIG5hbWUuICBUaGlzIGhhcHBlbnMgd2hlbiBpZ25vcmluZyBjYXNlIGFuZCB3aGVuIGEgcmVndWxhciBleHByZXNzaW9uCitpcyB1c2VkIHRoYXQgZG9lc24ndCBzdGFydCB3aXRoIGEgZml4ZWQgc3RyaW5nLiAgVGFnIHNlYXJjaGluZyBjYW4gYmUgYSBsb3QKK3Nsb3dlciB0aGVuLiAgVGhlIGZvcm1lciBjYW4gYmUgYXZvaWRlZCBieSBjYXNlLWZvbGQgc29ydGluZyB0aGUgdGFncyBmaWxlLgorU2VlICd0YWdic2VhcmNoJyBmb3IgZGV0YWlscy4KKworCQkJCQkJCSp0YWctcmVnZXhwKgorVGhlICI6dGFnIiBhbmQgInRzZWxlY3QiIGNvbW1hbmRzIGFjY2VwdCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmd1bWVudC4gIFNlZQorfHBhdHRlcm58IGZvciB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQuCitXaGVuIHRoZSBhcmd1bWVudCBzdGFydHMgd2l0aCAnLycsIGl0IGlzIHVzZWQgYXMgYSBwYXR0ZXJuLiAgSWYgdGhlIGFyZ3VtZW50Citkb2VzIG5vdCBzdGFydCB3aXRoICcvJywgaXQgaXMgdGFrZW4gbGl0ZXJhbGx5LCBhcyBhIGZ1bGwgdGFnIG5hbWUuCitFeGFtcGxlczogPgorICAgIDp0YWcgbWFpbgorPAlqdW1wcyB0byB0aGUgdGFnICJtYWluIiB0aGF0IGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eS4gPgorICAgIDp0YWcgL15nZXQKKzwJanVtcHMgdG8gdGhlIHRhZyB0aGF0IHN0YXJ0cyB3aXRoICJnZXQiIGFuZCBoYXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkuID4KKyAgICA6dGFnIC9ub3JtCis8CWxpc3RzIGFsbCB0aGUgdGFncyB0aGF0IGNvbnRhaW4gIm5vcm0iLCBpbmNsdWRpbmcgImlkX25vcm0iLgorV2hlbiB0aGUgYXJndW1lbnQgYm90aCBleGlzdHMgbGl0ZXJhbGx5LCBhbmQgbWF0Y2ggd2hlbiB1c2VkIGFzIGEgcmVnZXhwLCBhCitsaXRlcmFsIG1hdGNoIGhhcyBhIGhpZ2hlciBwcmlvcml0eS4gIEZvciBleGFtcGxlLCAiOnRhZyAvb3BlbiIgbWF0Y2hlcyAib3BlbiIKK2JlZm9yZSAib3Blbl9maWxlIiBhbmQgImZpbGVfb3BlbiIuCisKKwkJCQkJCQkqdGFnLSEqCitJZiB0aGUgdGFnIGlzIGluIHRoZSBjdXJyZW50IGZpbGUgdGhpcyB3aWxsIGFsd2F5cyB3b3JrLiAgT3RoZXJ3aXNlIHRoZQorcGVyZm9ybWVkIGFjdGlvbnMgZGVwZW5kIG9uIHdoZXRoZXIgdGhlIGN1cnJlbnQgZmlsZSB3YXMgY2hhbmdlZCwgd2hldGhlciBhICEKK2lzIGFkZGVkIHRvIHRoZSBjb21tYW5kIGFuZCBvbiB0aGUgJ2F1dG93cml0ZScgb3B0aW9uOgorCisgIHRhZyBpbiAgICAgICBmaWxlCSAgIGF1dG93cml0ZQkJCX4KK2N1cnJlbnQgZmlsZSAgY2hhbmdlZAkhICAgb3B0aW9uCSAgYWN0aW9uCX4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgeWVzCQkgeAl4ICAgICB4CSAgZ290byB0YWcKKyAgICBubwkJIG5vCXggICAgIHgJICByZWFkIG90aGVyIGZpbGUsIGdvdG8gdGFnCisgICAgbm8JCXllcyAgICB5ZXMgICAgeCAgIGFiYW5kb24gY3VycmVudCBmaWxlLCByZWFkIG90aGVyIGZpbGUsIGdvdG8KKwkJCQkgIHRhZworICAgIG5vCQl5ZXMJbm8gICAgb24gIHdyaXRlIGN1cnJlbnQgZmlsZSwgcmVhZCBvdGhlciBmaWxlLCBnb3RvCisJCQkJICB0YWcKKyAgICBubwkJeWVzCW5vICAgb2ZmICBmYWlsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIElmIHRoZSB0YWcgaXMgaW4gdGhlIGN1cnJlbnQgZmlsZSwgdGhlIGNvbW1hbmQgd2lsbCBhbHdheXMgd29yay4KKy0gSWYgdGhlIHRhZyBpcyBpbiBhbm90aGVyIGZpbGUgYW5kIHRoZSBjdXJyZW50IGZpbGUgd2FzIG5vdCBjaGFuZ2VkLCB0aGUKKyAgb3RoZXIgZmlsZSB3aWxsIGJlIG1hZGUgdGhlIGN1cnJlbnQgZmlsZSBhbmQgcmVhZCBpbnRvIHRoZSBidWZmZXIuCistIElmIHRoZSB0YWcgaXMgaW4gYW5vdGhlciBmaWxlLCB0aGUgY3VycmVudCBmaWxlIHdhcyBjaGFuZ2VkIGFuZCBhICEgaXMKKyAgYWRkZWQgdG8gdGhlIGNvbW1hbmQsIHRoZSBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IGZpbGUgYXJlIGxvc3QsIHRoZSBvdGhlcgorICBmaWxlIHdpbGwgYmUgbWFkZSB0aGUgY3VycmVudCBmaWxlIGFuZCByZWFkIGludG8gdGhlIGJ1ZmZlci4KKy0gSWYgdGhlIHRhZyBpcyBpbiBhbm90aGVyIGZpbGUsIHRoZSBjdXJyZW50IGZpbGUgd2FzIGNoYW5nZWQgYW5kIHRoZQorICAnYXV0b3dyaXRlJyBvcHRpb24gaXMgb24sIHRoZSBjdXJyZW50IGZpbGUgd2lsbCBiZSB3cml0dGVuLCB0aGUgb3RoZXIKKyAgZmlsZSB3aWxsIGJlIG1hZGUgdGhlIGN1cnJlbnQgZmlsZSBhbmQgcmVhZCBpbnRvIHRoZSBidWZmZXIuCistIElmIHRoZSB0YWcgaXMgaW4gYW5vdGhlciBmaWxlLCB0aGUgY3VycmVudCBmaWxlIHdhcyBjaGFuZ2VkIGFuZCB0aGUKKyAgJ2F1dG93cml0ZScgb3B0aW9uIGlzIG9mZiwgdGhlIGNvbW1hbmQgd2lsbCBmYWlsLiAgSWYgeW91IHdhbnQgdG8gc2F2ZQorICB0aGUgY2hhbmdlcywgdXNlIHRoZSAiOnciIGNvbW1hbmQgYW5kIHRoZW4gdXNlICI6dGFnIiB3aXRob3V0IGFuIGFyZ3VtZW50LgorICBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIHRhZyBpcyBwdXQgb24gdGhlIHN0YWNrIGFueXdheS4gIElmIHlvdSB3YW50IHRvIGxvc2UKKyAgdGhlIGNoYW5nZXMgeW91IGNhbiB1c2UgdGhlICI6dGFnISIgY29tbWFuZC4KKworCQkJCQkJCSp0YWctc2VjdXJpdHkqCitOb3RlIHRoYXQgVmltIGZvcmJpZHMgc29tZSBjb21tYW5kcywgZm9yIHNlY3VyaXR5IHJlYXNvbnMuICBUaGlzIHdvcmtzIGxpa2UKK3VzaW5nIHRoZSAnc2VjdXJlJyBvcHRpb24gZm9yIGV4cmMvdmltcmMgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgU2VlCit8dHJvamFuLWhvcnNlfCBhbmQgfHNhbmRib3h8LgorV2hlbiB0aGUge3RhZ2FkZHJlc3N9IGNoYW5nZXMgYSBidWZmZXIsIHlvdSB3aWxsIGdldCBhIHdhcm5pbmcgbWVzc2FnZToKKwkiV0FSTklORzogdGFnIGNvbW1hbmQgY2hhbmdlZCBhIGJ1ZmZlciEhISIKK0luIGEgZnV0dXJlIHZlcnNpb24gY2hhbmdpbmcgdGhlIGJ1ZmZlciB3aWxsIGJlIGltcG9zc2libGUuICBBbGwgdGhpcyBmb3IKK3NlY3VyaXR5IHJlYXNvbnM6IFNvbWVib2R5IG1pZ2h0IGhpZGUgYSBuYXN0eSBjb21tYW5kIGluIHRoZSB0YWdzIGZpbGUsIHdoaWNoCit3b3VsZCBvdGhlcndpc2UgZ28gdW5ub3RpY2VkLiAgRXhhbXBsZTogPgorCTokZHwvdGFnLWZ1bmN0aW9uLW5hbWUvCit7dGhpcyBzZWN1cml0eSBwcmV2ZW50aW9uIGlzIG5vdCBwcmVzZW50IGluIFZpfS4KKworSW4gVmkgdGhlICI6dGFnIiBjb21tYW5kIHNldHMgdGhlIGxhc3Qgc2VhcmNoIHBhdHRlcm4gd2hlbiB0aGUgdGFnIGlzIHNlYXJjaGVkCitmb3IuICBJbiBWaW0gdGhpcyBpcyBub3QgZG9uZSwgdGhlIHByZXZpb3VzIHNlYXJjaCBwYXR0ZXJuIGlzIHN0aWxsIHJlbWVtYmVyZWQsCit1bmxlc3MgdGhlICd0JyBmbGFnIGlzIHByZXNlbnQgaW4gJ2Nwb3B0aW9ucycuICBUaGUgc2VhcmNoIHBhdHRlcm4gaXMgYWx3YXlzCitwdXQgaW4gdGhlIHNlYXJjaCBoaXN0b3J5LCBzbyB5b3UgY2FuIG1vZGlmeSBpdCBpZiBzZWFyY2hpbmcgZmFpbHMuCisKKwkJCQkJKmVtYWNzLXRhZ3MqICplbWFjc190YWdzKiAqRTQzMCoKK0VtYWNzIHN0eWxlIHRhZyBmaWxlcyBhcmUgb25seSBzdXBwb3J0ZWQgaWYgVmltIHdhcyBjb21waWxlZCB3aXRoIHRoZQorfCtlbWFjc190YWdzfCBmZWF0dXJlIGVuYWJsZWQuICBTb3JyeSwgdGhlcmUgaXMgbm8gZXhwbGFuYXRpb24gYWJvdXQgRW1hY3MgdGFnCitmaWxlcyBoZXJlLCBpdCBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgOi0pLgorCisJCQkJCQkJKnRhZ3Mtb3B0aW9uKgorVGhlICd0YWdzJyBvcHRpb24gaXMgYSBsaXN0IG9mIGZpbGUgbmFtZXMuICBFYWNoIG9mIHRoZXNlIGZpbGVzIGlzIHNlYXJjaGVkCitmb3IgdGhlIHRhZy4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gdXNlIGEgZGlmZmVyZW50IHRhZ3MgZmlsZSB0aGFuIHRoZSBkZWZhdWx0CitmaWxlICJ0YWdzIi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gYWNjZXNzIGEgY29tbW9uIHRhZ3MgZmlsZS4KKworVGhlIG5leHQgZmlsZSBpbiB0aGUgbGlzdCBpcyBub3QgdXNlZCB3aGVuOgorLSBBIG1hdGNoaW5nIHN0YXRpYyB0YWcgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciBoYXMgYmVlbiBmb3VuZC4KKy0gQSBtYXRjaGluZyBnbG9iYWwgdGFnIGhhcyBiZWVuIGZvdW5kLgorVGhpcyBhbHNvIGRlcGVuZHMgb24gdGhlICdpZ25vcmVjYXNlJyBvcHRpb24uICBJZiBpdCBpcyBvZmYsIGFuZCB0aGUgdGFncyBmaWxlCitvbmx5IGhhcyBhIG1hdGNoIHdpdGhvdXQgbWF0Y2hpbmcgY2FzZSwgdGhlIG5leHQgdGFncyBmaWxlIGlzIHNlYXJjaGVkIGZvciBhCittYXRjaCB3aXRoIG1hdGNoaW5nIGNhc2UuICBJZiBubyB0YWcgd2l0aCBtYXRjaGluZyBjYXNlIGlzIGZvdW5kLCB0aGUgZmlyc3QKK21hdGNoIHdpdGhvdXQgbWF0Y2hpbmcgY2FzZSBpcyB1c2VkLiAgSWYgJ2lnbm9yZWNhc2UnIGlzIG9uLCBhbmQgYSBtYXRjaGluZworZ2xvYmFsIHRhZyB3aXRoIG9yIHdpdGhvdXQgbWF0Y2hpbmcgY2FzZSBpcyBmb3VuZCwgdGhpcyBvbmUgaXMgdXNlZCwgbm8KK2Z1cnRoZXIgdGFncyBmaWxlcyBhcmUgc2VhcmNoZWQuCisKK1doZW4gYSB0YWcgZmlsZSBuYW1lIHN0YXJ0cyB3aXRoICIuLyIsIHRoZSAnLicgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcGF0aCBvZgordGhlIGN1cnJlbnQgZmlsZS4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGEgdGFncyBmaWxlIGluIHRoZSBkaXJlY3RvcnkKK3doZXJlIHRoZSBjdXJyZW50IGZpbGUgaXMgKG5vIG1hdHRlciB3aGF0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcykuICBUaGUgaWRlYQorb2YgdXNpbmcgIi4vIiBpcyB0aGF0IHlvdSBjYW4gZGVmaW5lIHdoaWNoIHRhZyBmaWxlIGlzIHNlYXJjaGVkIGZpcnN0OiBJbiB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5ICgidGFncywuL3RhZ3MiKSBvciBpbiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGZpbGUKKygiLi90YWdzLHRhZ3MiKS4KKworRm9yIGV4YW1wbGU6ID4KKwk6c2V0IHRhZ3M9Li90YWdzLHRhZ3MsL2hvbWUvdXNlci9jb21tb250YWdzCisKK0luIHRoaXMgZXhhbXBsZSB0aGUgdGFnIHdpbGwgZmlyc3QgYmUgc2VhcmNoZWQgZm9yIGluIHRoZSBmaWxlICJ0YWdzIiBpbiB0aGUKK2RpcmVjdG9yeSB3aGVyZSB0aGUgY3VycmVudCBmaWxlIGlzLiAgTmV4dCB0aGUgInRhZ3MiIGZpbGUgaW4gdGhlIGN1cnJlbnQKK2RpcmVjdG9yeS4gIElmIGl0IGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlbiB0aGUgZmlsZSAiL2hvbWUvdXNlci9jb21tb250YWdzIgord2lsbCBiZSBzZWFyY2hlZCBmb3IgdGhlIHRhZy4KKworVGhpcyBjYW4gYmUgc3dpdGNoZWQgb2ZmIGJ5IGluY2x1ZGluZyB0aGUgJ2QnIGZsYWcgaW4gJ2Nwb3B0aW9ucycsIHRvIG1ha2UKK2l0IFZpIGNvbXBhdGlibGUuICAiLi90YWdzIiB3aWxsIHRoYW4gYmUgdGhlIHRhZ3MgZmlsZSBpbiB0aGUgY3VycmVudAorZGlyZWN0b3J5LCBpbnN0ZWFkIG9mIHRoZSB0YWdzIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgY3VycmVudCBmaWxlCitpcy4KKworSW5zdGVhZCBvZiB0aGUgY29tbWEgYSBzcGFjZSBtYXkgYmUgdXNlZC4gIFRoZW4gYSBiYWNrc2xhc2ggaXMgcmVxdWlyZWQgZm9yCit0aGUgc3BhY2UgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHN0cmluZyBvcHRpb246ID4KKwk6c2V0IHRhZ3M9dGFnc1wgL2hvbWUvdXNlci9jb21tb250YWdzCisKK1RvIGluY2x1ZGUgYSBzcGFjZSBpbiBhIGZpbGUgbmFtZSB1c2UgdGhyZWUgYmFja3NsYXNoZXMuICBUbyBpbmNsdWRlIGEgY29tbWEKK2luIGEgZmlsZSBuYW1lIHVzZSB0d28gYmFja3NsYXNoZXMuICBGb3IgZXhhbXBsZSwgdXNlOiA+CisJOnNldCB0YWdzPXRhZ1xcXCBmaWxlLC9ob21lL3VzZXIvY29tbW9uXFwsdGFncworCitmb3IgdGhlIGZpbGVzICJ0YWcgZmlsZSIgYW5kICIvaG9tZS91c2VyL2NvbW1vbix0YWdzIi4gIFRoZSAndGFncycgb3B0aW9uIHdpbGwKK2hhdmUgdGhlIHZhbHVlICJ0YWdcIGZpbGUsL2hvbWUvdXNlci9jb21tb25cLHRhZ3MiLgorCitJZiB0aGUgJ3RhZ3JlbGF0aXZlJyBvcHRpb24gaXMgb24gKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSBhbmQgdXNpbmcgYSB0YWcgZmlsZQoraW4gYW5vdGhlciBkaXJlY3RvcnksIGZpbGUgbmFtZXMgaW4gdGhhdCB0YWcgZmlsZSBhcmUgcmVsYXRpdmUgdG8gdGhlCitkaXJlY3Rvcnkgd2hlcmUgdGhlIHRhZyBmaWxlIGlzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFRhZ3MgZmlsZSBmb3JtYXQJCQkJKnRhZ3MtZmlsZS1mb3JtYXQqICpFNDMxKgorCisJCQkJCQkqY3RhZ3MqICpqdGFncyoKK0EgdGFncyBmaWxlIGNhbiBiZSBjcmVhdGVkIHdpdGggYW4gZXh0ZXJuYWwgY29tbWFuZCwgZm9yIGV4YW1wbGUgImN0YWdzIi4gIEl0Cit3aWxsIGNvbnRhaW4gYSB0YWcgZm9yIGVhY2ggZnVuY3Rpb24uICBTb21lIHZlcnNpb25zIG9mICJjdGFncyIgd2lsbCBhbHNvIG1ha2UKK2EgdGFnIGZvciBlYWNoICIjZGVmaW5lZCIgbWFjcm8sIHR5cGVkZWZzLCBlbnVtcywgZXRjLgorCitTb21lIHByb2dyYW1zIHRoYXQgZ2VuZXJhdGUgdGFncyBmaWxlczoKK2N0YWdzCQkJQXMgZm91bmQgb24gbW9zdCBVbml4IHN5c3RlbXMuICBPbmx5IHN1cHBvcnRzIEMuICBPbmx5CisJCQlkb2VzIHRoZSBiYXNpYyB3b3JrLgorZXh1YmVyYW50IGN0YWdzCQlUaGlzIGEgdmVyeSBnb29kIG9uZS4gIEl0IHdvcmtzIGZvciBDLCBDKyssIEphdmEsCisJCQlGb3J0cmFuLCBFaWZmZWwgYW5kIG90aGVycy4gIEl0IGNhbiBnZW5lcmF0ZSB0YWdzIGZvcgorCQkJbWFueSBpdGVtcy4gIFNlZSBodHRwOi8vY3RhZ3Muc291cmNlZm9yZ2UubmV0LgorZXRhZ3MJCQlDb25uZWN0ZWQgdG8gRW1hY3MuICBTdXBwb3J0cyBtYW55IGxhbmd1YWdlcy4KK0pUYWdzCQkJRm9yIEphdmEsIGluIEphdmEuICBJdCBjYW4gYmUgZm91bmQgYXQKKwkJCWh0dHA6Ly93d3cuZmxlaW5lci5jb20vanRhZ3MvLgorcHRhZ3MucHkJCUZvciBQeXRob24sIGluIFB5dGhvbi4gIEZvdW5kIGluIHlvdXIgUHl0aG9uIHNvdXJjZQorCQkJZGlyZWN0b3J5IGF0IFRvb2xzL3NjcmlwdHMvcHRhZ3MucHkuCitwdGFncwkJCUZvciBQZXJsLCBpbiBQZXJsLiAgSXQgY2FuIGJlIGZvdW5kIGF0CisJCQlodHRwOi8vd3d3LmVsZXZlcy5lbnMuZnI6ODA4MC9ob21lL250aGllcnkvVGFncy8uCitnbmF0eHJlZgkJRm9yIEFkYS4gIFNlZSBodHRwOi8vd3d3LmdudWFkYS5vcmcvLiAgZ25hdHhyZWYgaXMKKwkJCXBhcnQgb2YgdGhlIGduYXQgcGFja2FnZS4KKworCitUaGUgbGluZXMgaW4gdGhlIHRhZ3MgZmlsZSBtdXN0IGhhdmUgb25lIG9mIHRoZXNlIHRocmVlIGZvcm1hdHM6CisKKzEuICB7dGFnbmFtZX0JCXtUQUJ9IHt0YWdmaWxlfSB7VEFCfSB7dGFnYWRkcmVzc30KKzIuICB7dGFnZmlsZX06e3RhZ25hbWV9IHtUQUJ9IHt0YWdmaWxlfSB7VEFCfSB7dGFnYWRkcmVzc30KKzMuICB7dGFnbmFtZX0JCXtUQUJ9IHt0YWdmaWxlfSB7VEFCfSB7dGFnYWRkcmVzc30ge3Rlcm19IHtmaWVsZH0gLi4KKworVGhlIGZpcnN0IGlzIGEgbm9ybWFsIHRhZywgd2hpY2ggaXMgY29tcGxldGVseSBjb21wYXRpYmxlIHdpdGggVmkuICBJdCBpcyB0aGUKK29ubHkgZm9ybWF0IHByb2R1Y2VkIGJ5IHRyYWRpdGlvbmFsIGN0YWdzIGltcGxlbWVudGF0aW9ucy4gIFRoaXMgaXMgb2Z0ZW4gdXNlZAorZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBnbG9iYWwsIGFsc28gcmVmZXJlbmNlZCBpbiBvdGhlciBmaWxlcy4KKworVGhlIGxpbmVzIGluIHRoZSB0YWdzIGZpbGUgY2FuIGVuZCBpbiA8TEY+IG9yIDxDUj48TEY+LiAgT24gdGhlIE1hY2ludG9zaCA8Q1I+CithbHNvIHdvcmtzLiAgVGhlIDxDUj4gYW5kIDxOTD4gY2hhcmFjdGVycyBjYW4gbmV2ZXIgYXBwZWFyIGluc2lkZSBhIGxpbmUuCisKKwkJCQkJCQkqdGFnLW9sZC1zdGF0aWMqCitUaGUgc2Vjb25kIGZvcm1hdCBpcyBmb3IgYSBzdGF0aWMgdGFnIG9ubHkuICBJdCBpcyBvYnNvbGV0ZSBub3csIHJlcGxhY2VkIGJ5Cit0aGUgdGhpcmQgZm9ybWF0LiAgSXQgaXMgb25seSBzdXBwb3J0ZWQgYnkgRWx2aXMgMS54IGFuZCBWaW0gYW5kIGEgZmV3Cit2ZXJzaW9ucyBvZiBjdGFncy4gIEEgc3RhdGljIHRhZyBpcyBvZnRlbiB1c2VkIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgbG9jYWwsCitvbmx5IHJlZmVyZW5jZWQgaW4gdGhlIGZpbGUge3RhZ2ZpbGV9LiAgTm90ZSB0aGF0IGZvciB0aGUgc3RhdGljIHRhZywgdGhlIHR3bworb2NjdXJyZW5jZXMgb2Yge3RhZ2ZpbGV9IG11c3QgYmUgZXhhY3RseSB0aGUgc2FtZS4gIEFsc28gc2VlIHx0YWdzLW9wdGlvbnwKK2JlbG93LCBmb3IgaG93IHN0YXRpYyB0YWdzIGFyZSB1c2VkLgorCitUaGUgdGhpcmQgZm9ybWF0IGlzIG5ldy4gIEl0IGluY2x1ZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gb3B0aW9uYWwKK2ZpZWxkcyBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4gIEl0IGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggVmkuICBJdCBpcworb25seSBzdXBwb3J0ZWQgYnkgbmV3IHZlcnNpb25zIG9mIGN0YWdzIChzdWNoIGFzIEV4dWJlcmFudCBjdGFncykuCisKK3t0YWduYW1lfQlUaGUgaWRlbnRpZmllci4gIE5vcm1hbGx5IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24sIGJ1dCBpdCBjYW4KKwkJYmUgYW55IGlkZW50aWZpZXIuICBJdCBjYW5ub3QgY29udGFpbiBhIDxUYWI+Lgore1RBQn0JCU9uZSA8VGFiPiBjaGFyYWN0ZXIuICBOb3RlOiBwcmV2aW91cyB2ZXJzaW9ucyBhbGxvd2VkIGFueQorCQl3aGl0ZSBzcGFjZSBoZXJlLiAgVGhpcyBoYXMgYmVlbiBhYmFuZG9uZWQgdG8gYWxsb3cgc3BhY2VzIGluCisJCXt0YWdmaWxlfS4gIEl0IGNhbiBiZSByZS1lbmFibGVkIGJ5IGluY2x1ZGluZyB0aGUKKwkJfCt0YWdfYW55X3doaXRlfCBmZWF0dXJlIGF0IGNvbXBpbGUgdGltZS4gKnRhZy1hbnktd2hpdGUqCit7dGFnZmlsZX0JVGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgZGVmaW5pdGlvbiBvZiB7dGFnbmFtZX0uICBJdCBjYW4KKwkJaGF2ZSBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoLiAgSXQgbWF5IGNvbnRhaW4gZW52aXJvbm1lbnQKKwkJdmFyaWFibGVzIGFuZCB3aWxkY2FyZHMgKGFsdGhvdWdoIHRoZSB1c2Ugb2Ygd2lsZGNhcmRzIGlzCisJCWRvdWJ0ZnVsKS4gIEl0IGNhbm5vdCBjb250YWluIGEgPFRhYj4uCit7dGFnYWRkcmVzc30JVGhlIEV4IGNvbW1hbmQgdGhhdCBwb3NpdGlvbnMgdGhlIGN1cnNvciBvbiB0aGUgdGFnLiAgSXQgY2FuCisJCWJlIGFueSBFeCBjb21tYW5kLCBhbHRob3VnaCByZXN0cmljdGlvbnMgYXBwbHkgKHNlZQorCQl8dGFnLXNlY3VyaXR5fCkuICBQb3NpeCBvbmx5IGFsbG93cyBsaW5lIG51bWJlcnMgYW5kIHNlYXJjaAorCQljb21tYW5kcywgd2hpY2ggYXJlIG1vc3RseSB1c2VkLgore3Rlcm19CQk7IiBUaGUgdHdvIGNoYXJhY3RlcnMgc2VtaWNvbG9uIGFuZCBkb3VibGUgcXVvdGUuICBUaGlzIGlzCisJCWludGVycHJldGVkIGJ5IFZpIGFzIHRoZSBzdGFydCBvZiBhIGNvbW1lbnQsIHdoaWNoIG1ha2VzIHRoZQorCQlmb2xsb3dpbmcgYmUgaWdub3JlZC4gIFRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisJCXdpdGggVmksIGl0IGlnbm9yZXMgdGhlIGZvbGxvd2luZyBmaWVsZHMuCit7ZmllbGR9IC4uCUEgbGlzdCBvZiBvcHRpb25hbCBmaWVsZHMuICBFYWNoIGZpZWxkIGhhcyB0aGUgZm9ybToKKworCQkJPFRhYj57ZmllbGRuYW1lfTp7dmFsdWV9CisKKwkJVGhlIHtmaWVsZG5hbWV9IGlkZW50aWZpZXMgdGhlIGZpZWxkLCBhbmQgY2FuIG9ubHkgY29udGFpbgorCQlhbHBoYWJldGljYWwgY2hhcmFjdGVycyBbYS16QS1aXS4KKwkJVGhlIHt2YWx1ZX0gaXMgYW55IHN0cmluZywgYnV0IGNhbm5vdCBjb250YWluIGEgPFRhYj4uCisJCVRoZXNlIGNoYXJhY3RlcnMgYXJlIHNwZWNpYWw6CisJCQkiXHQiIHN0YW5kcyBmb3IgYSA8VGFiPgorCQkJIlxyIiBzdGFuZHMgZm9yIGEgPENSPgorCQkJIlxuIiBzdGFuZHMgZm9yIGEgPE5MPgorCQkJIlxcIiBzdGFuZHMgZm9yIGEgc2luZ2xlICdcJyBjaGFyYWN0ZXIKKworCQlUaGVyZSBpcyBvbmUgZmllbGQgdGhhdCBkb2Vzbid0IGhhdmUgYSAnOicuICBUaGlzIGlzIHRoZSBraW5kCisJCW9mIHRoZSB0YWcuICBJdCBpcyBoYW5kbGVkIGxpa2UgaXQgd2FzIHByZWNlZGVkIHdpdGggImtpbmQ6Ii4KKwkJU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIGN0YWdzIGZvciB0aGUga2luZHMgaXQgcHJvZHVjZXMuCisKKwkJVGhlIG9ubHkgb3RoZXIgZmllbGQgY3VycmVudGx5IHJlY29nbml6ZWQgYnkgVmltIGlzICJmaWxlOiIKKwkJKHdpdGggYW4gZW1wdHkgdmFsdWUpLiAgSXQgaXMgdXNlZCBmb3IgYSBzdGF0aWMgdGFnLgorCitUaGUgZmlyc3QgbGluZXMgaW4gdGhlIHRhZ3MgZmlsZSBjYW4gY29udGFpbiBsaW5lcyB0aGF0IHN0YXJ0IHdpdGgKKwkhX1RBR18KK1RoZXNlIGFyZSBzb3J0ZWQgdG8gdGhlIGZpcnN0IGxpbmVzLCBvbmx5IHJhcmUgdGFncyB0aGF0IHN0YXJ0IHdpdGggIiEiIGNhbgorc29ydCB0byBiZWZvcmUgdGhlbS4gIFZpbSByZWNvZ25pemVzIHR3byBpdGVtcy4gIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGxpbmUKK3RoYXQgaW5kaWNhdGVzIGlmIHRoZSBmaWxlIHdhcyBzb3J0ZWQuICBXaGVuIHRoaXMgbGluZSBpcyBmb3VuZCwgVmltIHVzZXMKK2JpbmFyeSBzZWFyY2hpbmcgZm9yIHRoZSB0YWdzIGZpbGU6CisJIV9UQUdfRklMRV9TT1JURUQ8VGFiPjE8VGFiPnthbnl0aGluZ30gfgorCitBIHRhZyBmaWxlIG1heSBiZSBjYXNlLWZvbGQgc29ydGVkIHRvIGF2b2lkIGEgbGluZWFyIHNlYXJjaCB3aGVuICdpZ25vcmVjYXNlJworaXMgb24uICBTZWUgJ3RhZ2JzZWFyY2gnIGZvciBkZXRhaWxzLiAgVGhlIHZhbHVlICcyJyBzaG91bGQgYmUgdXNlZCB0aGVuOgorCSFfVEFHX0ZJTEVfU09SVEVEPFRhYj4yPFRhYj57YW55dGhpbmd9IH4KKworVGhlIG90aGVyIHRhZyB0aGF0IFZpbSByZWNvZ25pemVzLCBidXQgb25seSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlCit8K211bHRpX2J5dGV8IGZlYXR1cmUsIGlzIHRoZSBlbmNvZGluZyBvZiB0aGUgdGFncyBmaWxlOgorCSFfVEFHX0ZJTEVfRU5DT0RJTkc8VGFiPnV0Zi04PFRhYj57YW55dGhpbmd9IH4KK0hlcmUgInV0Zi04IiBpcyB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgdGhlIHRhZ3MuICBWaW0gd2lsbCB0aGVuIGNvbnZlcnQgdGhlIHRhZworYmVpbmcgc2VhcmNoZWQgZm9yIGZyb20gJ2VuY29kaW5nJyB0byB0aGUgZW5jb2Rpbmcgb2YgdGhlIHRhZ3MgZmlsZS4gIEFuZCB3aGVuCitsaXN0aW5nIHRhZ3MgdGhlIHJldmVyc2UgaGFwcGVucy4gIFdoZW4gdGhlIGNvbnZlcnNpb24gZmFpbHMgdGhlIHVuY29udmVydGVkCit0YWcgaXMgdXNlZC4KKworCQkJCQkJCSp0YWctc2VhcmNoKgorVGhlIGNvbW1hbmQgY2FuIGJlIGFueSBFeCBjb21tYW5kLCBidXQgb2Z0ZW4gaXQgaXMgYSBzZWFyY2ggY29tbWFuZC4KK0V4YW1wbGVzOgorCXRhZzEJZmlsZTEJL15tYWluKGFyZ2MsIGFyZ3YpLyB+CisJdGFnMglmaWxlMgkxMDggfgorCitUaGUgY29tbWFuZCBpcyBhbHdheXMgZXhlY3V0ZWQgd2l0aCAnbWFnaWMnIG5vdCBzZXQuICBUaGUgb25seSBzcGVjaWFsCitjaGFyYWN0ZXJzIGluIGEgc2VhcmNoIHBhdHRlcm4gYXJlICJeIiAoYmVnaW4tb2YtbGluZSkgYW5kICIkIiAoPEVPTD4pLgorU2VlIHxwYXR0ZXJufC4gIE5vdGUgdGhhdCB5b3UgbXVzdCBwdXQgYSBiYWNrc2xhc2ggYmVmb3JlIGVhY2ggYmFja3NsYXNoIGluCit0aGUgc2VhcmNoIHRleHQuICBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFZpLgorCisJCQkJCQkJKkU0MzQqICpFNDM1KgorSWYgdGhlIGNvbW1hbmQgaXMgYSBub3JtYWwgc2VhcmNoIGNvbW1hbmQgKGl0IHN0YXJ0cyBhbmQgZW5kcyB3aXRoICIvIiBvcgorIj8iKSwgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGlzIGRvbmU6CistIFNlYXJjaGluZyBzdGFydHMgb24gbGluZSAxIG9mIHRoZSBmaWxlLgorICBUaGUgZGlyZWN0aW9uIG9mIHRoZSBzZWFyY2ggaXMgZm9yd2FyZCBmb3IgIi8iLCBiYWNrd2FyZCBmb3IgIj8iLgorICBOb3RlIHRoYXQgJ3dyYXBzY2FuJyBkb2VzIG5vdCBtYXR0ZXIsIHRoZSB3aG9sZSBmaWxlIGlzIGFsd2F5cyBzZWFyY2hlZC4ge1ZpCisgIGRvZXMgdXNlICd3cmFwc2NhbicsIHdoaWNoIGNhdXNlZCB0YWdzIHNvbWV0aW1lcyBub3QgYmUgZm91bmQpLiAge1ZpIHN0YXJ0cworICBzZWFyY2hpbmcgaW4gbGluZSAyIG9mIGFub3RoZXIgZmlsZS4gIEl0IGRvZXMgbm90IGZpbmQgYSB0YWcgaW4gbGluZSAxIG9mCisgIGFub3RoZXIgZmlsZSB3aGVuICd3cmFwc2NhbicgaXMgbm90IHNldH0KKy0gSWYgdGhlIHNlYXJjaCBmYWlscywgYW5vdGhlciB0cnkgaXMgZG9uZSBpZ25vcmluZyBjYXNlLiAgSWYgdGhhdCBmYWlscyB0b28sCisgIGEgc2VhcmNoIGlzIGRvbmUgZm9yOgorCSJedGFnbmFtZVsgXHRdKigiCisgICh0aGUgdGFnIHdpdGggJ14nIHByZXBlbmRlZCBhbmQgIlsgXHRdKigiIGFwcGVuZGVkKS4gIFdoZW4gdXNpbmcgZnVuY3Rpb24KKyAgbmFtZXMsIHRoaXMgd2lsbCBmaW5kIHRoZSBmdW5jdGlvbiBuYW1lIHdoZW4gaXQgaXMgaW4gY29sdW1uIDAuICBUaGlzIHdpbGwKKyAgaGVscCB3aGVuIHRoZSBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgdGFncyBmaWxlIHdhcworICBtYWRlLiAgSWYgdGhpcyBzZWFyY2ggYWxzbyBmYWlscyBhbm90aGVyIHNlYXJjaCBpcyBkb25lIHdpdGg6CisJIl5bI2EtekEtWl9dLipcPHRhZ25hbWVbIFx0XSooIgorICBUaGlzIG1lYW5zOiBBIGxpbmUgc3RhcnRpbmcgd2l0aCAnIycgb3IgYW4gaWRlbnRpZmllciBhbmQgY29udGFpbmluZyB0aGUgdGFnCisgIGZvbGxvd2VkIGJ5IHdoaXRlIHNwYWNlIGFuZCBhICcoJy4gIFRoaXMgd2lsbCBmaW5kIG1hY3JvIG5hbWVzIGFuZCBmdW5jdGlvbgorICBuYW1lcyB3aXRoIGEgdHlwZSBwcmVwZW5kZWQuICB7dGhlIGV4dHJhIHNlYXJjaGVzIGFyZSBub3QgaW4gVml9LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIEluY2x1ZGUgZmlsZSBzZWFyY2hlcwkJKmluY2x1ZGUtc2VhcmNoKiAqZGVmaW5pdGlvbi1zZWFyY2gqCisJCQkJCQkJKkUzODcqICpFMzg4KiAqRTM4OSoKKworVGhlc2UgY29tbWFuZHMgbG9vayBmb3IgYSBzdHJpbmcgaW4gdGhlIGN1cnJlbnQgZmlsZSBhbmQgaW4gYWxsIGVuY291bnRlcmVkCitpbmNsdWRlZCBmaWxlcyAocmVjdXJzaXZlbHkpLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGEKK3ZhcmlhYmxlLCBmdW5jdGlvbiBvciBtYWNyby4gIElmIHlvdSBvbmx5IHdhbnQgdG8gc2VhcmNoIGluIHRoZSBjdXJyZW50CitidWZmZXIsIHVzZSB0aGUgY29tbWFuZHMgbGlzdGVkIGF0IHxwYXR0ZXJuLXNlYXJjaGVzfC4KKworVGhlc2UgY29tbWFuZHMgYXJlIG5vdCBhdmFpbGFibGUgd2hlbiB0aGUgfCtmaW5kX2luX3BhdGh8IGZlYXR1cmUgd2FzIGRpc2FibGVkCithdCBjb21waWxlIHRpbWUuCisKK1doZW4gYSBsaW5lIGlzIGVuY291bnRlcmVkIHRoYXQgaW5jbHVkZXMgYW5vdGhlciBmaWxlLCB0aGF0IGZpbGUgaXMgc2VhcmNoZWQKK2JlZm9yZSBjb250aW51aW5nIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4gIEZpbGVzIGluY2x1ZGVkIGJ5IGluY2x1ZGVkIGZpbGVzIGFyZQorYWxzbyBzZWFyY2hlZC4gIFdoZW4gYW4gaW5jbHVkZSBmaWxlIGNvdWxkIG5vdCBiZSBmb3VuZCBpdCBpcyBzaWxlbnRseQoraWdub3JlZC4gIFVzZSB0aGUgfDpjaGVja3BhdGh8IGNvbW1hbmQgdG8gZGlzY292ZXIgd2hpY2ggZmlsZXMgY291bGQgbm90IGJlCitmb3VuZCwgcG9zc2libHkgeW91ciAncGF0aCcgb3B0aW9uIGlzIG5vdCBzZXQgdXAgY29ycmVjdGx5LiAgTm90ZTogdGhlCitpbmNsdWRlZCBmaWxlIGlzIHNlYXJjaGVkLCBub3QgYSBidWZmZXIgdGhhdCBtYXkgYmUgZWRpdGluZyB0aGF0IGZpbGUuICBPbmx5Citmb3IgdGhlIGN1cnJlbnQgZmlsZSB0aGUgbGluZXMgaW4gdGhlIGJ1ZmZlciBhcmUgdXNlZC4KKworVGhlIHN0cmluZyBjYW4gYmUgYW55IGtleXdvcmQgb3IgYSBkZWZpbmVkIG1hY3JvLiAgRm9yIHRoZSBrZXl3b3JkIGFueSBtYXRjaAord2lsbCBiZSBmb3VuZC4gIEZvciBkZWZpbmVkIG1hY3JvcyBvbmx5IGxpbmVzIHRoYXQgbWF0Y2ggd2l0aCB0aGUgJ2RlZmluZScKK29wdGlvbiB3aWxsIGJlIGZvdW5kLiAgVGhlIGRlZmF1bHQgaXMgIl4jXHMqZGVmaW5lIiwgd2hpY2ggaXMgZm9yIEMgcHJvZ3JhbXMuCitGb3Igb3RoZXIgbGFuZ3VhZ2VzIHlvdSBwcm9iYWJseSB3YW50IHRvIGNoYW5nZSB0aGlzLiAgU2VlICdkZWZpbmUnIGZvciBhbgorZXhhbXBsZSBmb3IgQysrLiAgVGhlIHN0cmluZyBjYW5ub3QgY29udGFpbiBhbiBlbmQtb2YtbGluZSwgb25seSBtYXRjaGVzCit3aXRoaW4gYSBsaW5lIGFyZSBmb3VuZC4KKworV2hlbiBhIG1hdGNoIGlzIGZvdW5kIGZvciBhIGRlZmluZWQgbWFjcm8sIHRoZSBkaXNwbGF5aW5nIG9mIGxpbmVzIGNvbnRpbnVlcword2l0aCB0aGUgbmV4dCBsaW5lIHdoZW4gYSBsaW5lIGVuZHMgaW4gYSBiYWNrc2xhc2guCisKK1RoZSBjb21tYW5kcyB0aGF0IHN0YXJ0IHdpdGggIlsiIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudAorZmlsZS4gIFRoZSBjb21tYW5kcyB0aGF0IHN0YXJ0IHdpdGggIl0iIHN0YXJ0IGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KKworVGhlICdpbmNsdWRlJyBvcHRpb24gaXMgdXNlZCB0byBkZWZpbmUgYSBsaW5lIHRoYXQgaW5jbHVkZXMgYW5vdGhlciBmaWxlLiAgVGhlCitkZWZhdWx0IGlzICJcXiNccyppbmNsdWRlIiwgd2hpY2ggaXMgZm9yIEMgcHJvZ3JhbXMuICBOb3RlOiBWaW0gZG9lcyBub3QKK3JlY29nbml6ZSBDIHN5bnRheCwgaWYgdGhlICdpbmNsdWRlJyBvcHRpb24gbWF0Y2hlcyBhIGxpbmUgaW5zaWRlCisiI2lmZGVmLyNlbmRpZiIgb3IgaW5zaWRlIGEgY29tbWVudCwgaXQgaXMgc2VhcmNoZWQgYW55d2F5LiAgVGhlICdpc2ZuYW1lJworb3B0aW9uIGlzIHVzZWQgdG8gcmVjb2duaXplIHRoZSBmaWxlIG5hbWUgdGhhdCBjb21lcyBhZnRlciB0aGUgbWF0Y2hlZAorcGF0dGVybi4KKworVGhlICdwYXRoJyBvcHRpb24gaXMgdXNlZCB0byBmaW5kIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBpbmNsdWRlIGZpbGVzIHRoYXQKK2RvIG5vdCBoYXZlIGFuIGFic29sdXRlIHBhdGguCisKK1RoZSAnY29tbWVudHMnIG9wdGlvbiBpcyB1c2VkIGZvciB0aGUgY29tbWFuZHMgdGhhdCBkaXNwbGF5IGEgc2luZ2xlIGxpbmUgb3IKK2p1bXAgdG8gYSBsaW5lLiAgSXQgZGVmaW5lcyBwYXR0ZXJucyB0aGF0IG1heSBzdGFydCBhIGNvbW1lbnQuICBUaG9zZSBsaW5lcworYXJlIGlnbm9yZWQgZm9yIHRoZSBzZWFyY2gsIHVubGVzcyBbIV0gaXMgdXNlZC4gIE9uZSBleGNlcHRpb246IFdoZW4gdGhlIGxpbmUKK21hdGNoZXMgdGhlIHBhdHRlcm4gIl4jICpkZWZpbmUiIGl0IGlzIG5vdCBjb25zaWRlcmVkIHRvIGJlIGEgY29tbWVudC4KKworSWYgeW91IHdhbnQgdG8gbGlzdCBtYXRjaGVzLCBhbmQgdGhlbiBzZWxlY3Qgb25lIHRvIGp1bXAgdG8sIHlvdSBjb3VsZCB1c2UgYQorbWFwcGluZyB0byBkbyB0aGF0IGZvciB5b3UuICBIZXJlIGlzIGFuIGV4YW1wbGU6ID4KKworICA6bWFwIDxGND4gW0k6bGV0IG5yID0gaW5wdXQoIldoaWNoIG9uZTogIik8QmFyPmV4ZSAibm9ybWFsICIgLiBuciAuIltcdCI8Q1I+Cis8CisJCQkJCQkJKltpKgorW2kJCQlEaXNwbGF5IHRoZSBmaXJzdCBsaW5lIHRoYXQgY29udGFpbnMgdGhlIGtleXdvcmQKKwkJCXVuZGVyIHRoZSBjdXJzb3IuICBUaGUgc2VhcmNoIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nCisJCQlvZiB0aGUgZmlsZS4gIExpbmVzIHRoYXQgbG9vayBsaWtlIGEgY29tbWVudCBhcmUKKwkJCWlnbm9yZWQgKHNlZSAnY29tbWVudHMnIG9wdGlvbikuICBJZiBhIGNvdW50IGlzIGdpdmVuLAorCQkJdGhlIGNvdW50J3RoIG1hdGNoaW5nIGxpbmUgaXMgZGlzcGxheWVkLCBhbmQgY29tbWVudAorCQkJbGluZXMgYXJlIG5vdCBpZ25vcmVkLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpdaSoKK11pCQkJbGlrZSAiW2kiLCBidXQgc3RhcnQgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6aXMqICo6aXNlYXJjaCoKKzpbcmFuZ2VdaXNbZWFyY2hdWyFdIFtjb3VudF0gWy9dcGF0dGVyblsvXQorCQkJTGlrZSAiW2kiICBhbmQgIl1pIiwgYnV0IHNlYXJjaCBpbiBbcmFuZ2VdIGxpbmVzCisJCQkoZGVmYXVsdDogd2hvbGUgZmlsZSkuCisJCQlTZWUgfDpzZWFyY2gtYXJnc3wgZm9yIFsvXSBhbmQgWyFdLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpbSSoKK1tJCQkJRGlzcGxheSBhbGwgbGluZXMgdGhhdCBjb250YWluIHRoZSBrZXl3b3JkIHVuZGVyIHRoZQorCQkJY3Vyc29yLiAgRmlsZW5hbWVzIGFuZCBsaW5lIG51bWJlcnMgYXJlIGRpc3BsYXllZAorCQkJZm9yIHRoZSBmb3VuZCBsaW5lcy4gIFRoZSBzZWFyY2ggc3RhcnRzIGF0IHRoZQorCQkJYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpdSSoKK11JCQkJbGlrZSAiW0kiLCBidXQgc3RhcnQgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6aWwqICo6aWxpc3QqCis6W3JhbmdlXWlsW2lzdF1bIV0gWy9dcGF0dGVyblsvXQorCQkJTGlrZSAiW0kiIGFuZCAiXUkiLCBidXQgc2VhcmNoIGluIFtyYW5nZV0gbGluZXMKKwkJCShkZWZhdWx0OiB3aG9sZSBmaWxlKS4KKwkJCVNlZSB8OnNlYXJjaC1hcmdzfCBmb3IgWy9dIGFuZCBbIV0uICB7bm90IGluIFZpfQorCisJCQkJCQkJKltfQ1RSTC1JKgorWyBDVFJMLUkJCUp1bXAgdG8gdGhlIGZpcnN0IGxpbmUgdGhhdCBjb250YWlucyB0aGUga2V5d29yZAorCQkJdW5kZXIgdGhlIGN1cnNvci4gIFRoZSBzZWFyY2ggc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcKKwkJCW9mIHRoZSBmaWxlLiAgTGluZXMgdGhhdCBsb29rIGxpa2UgYSBjb21tZW50IGFyZQorCQkJaWdub3JlZCAoc2VlICdjb21tZW50cycgb3B0aW9uKS4gIElmIGEgY291bnQgaXMgZ2l2ZW4sCisJCQl0aGUgY291bnQndGggbWF0Y2hpbmcgbGluZSBpcyBqdW1wZWQgdG8sIGFuZCBjb21tZW50CisJCQlsaW5lcyBhcmUgbm90IGlnbm9yZWQuICB7bm90IGluIFZpfQorCisJCQkJCQkJKl1fQ1RSTC1JKgorXSBDVFJMLUkJCWxpa2UgIlsgQ1RSTC1JIiwgYnV0IHN0YXJ0IGF0IHRoZSBjdXJyZW50IGN1cnNvcgorCQkJcG9zaXRpb24uICB7bm90IGluIFZpfQorCisJCQkJCQkJKjppaiogKjppanVtcCoKKzpbcmFuZ2VdaWpbdW1wXVshXSBbY291bnRdIFsvXXBhdHRlcm5bL10KKwkJCUxpa2UgIlsgQ1RSTC1JIiAgYW5kICJdIENUUkwtSSIsIGJ1dCBzZWFyY2ggaW4KKwkJCVtyYW5nZV0gbGluZXMgKGRlZmF1bHQ6IHdob2xlIGZpbGUpLgorCQkJU2VlIHw6c2VhcmNoLWFyZ3N8IGZvciBbL10gYW5kIFshXS4gIHtub3QgaW4gVml9CisKK0NUUkwtVyBDVFJMLUkJCQkJCSpDVFJMLVdfQ1RSTC1JKiAqQ1RSTC1XX2kqCitDVFJMLVcgaQkJT3BlbiBhIG5ldyB3aW5kb3csIHdpdGggdGhlIGN1cnNvciBvbiB0aGUgZmlyc3QgbGluZQorCQkJdGhhdCBjb250YWlucyB0aGUga2V5d29yZCB1bmRlciB0aGUgY3Vyc29yLiAgVGhlCisJCQlzZWFyY2ggc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBMaW5lcworCQkJdGhhdCBsb29rIGxpa2UgYSBjb21tZW50IGxpbmUgYXJlIGlnbm9yZWQgKHNlZQorCQkJJ2NvbW1lbnRzJyBvcHRpb24pLiAgSWYgYSBjb3VudCBpcyBnaXZlbiwgdGhlIGNvdW50J3RoCisJCQltYXRjaGluZyBsaW5lIGlzIGp1bXBlZCB0bywgYW5kIGNvbW1lbnQgbGluZXMgYXJlIG5vdAorCQkJaWdub3JlZC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmlzcCogKjppc3BsaXQqCis6W3JhbmdlXWlzcFtsaXRdWyFdIFtjb3VudF0gWy9dcGF0dGVyblsvXQorCQkJTGlrZSAiQ1RSTC1XIGkiICBhbmQgIkNUUkwtVyBpIiwgYnV0IHNlYXJjaCBpbgorCQkJW3JhbmdlXSBsaW5lcyAoZGVmYXVsdDogd2hvbGUgZmlsZSkuCisJCQlTZWUgfDpzZWFyY2gtYXJnc3wgZm9yIFsvXSBhbmQgWyFdLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpbZCoKK1tkCQkJRGlzcGxheSB0aGUgZmlyc3QgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGNvbnRhaW5zIHRoZQorCQkJbWFjcm8gdW5kZXIgdGhlIGN1cnNvci4gIFRoZSBzZWFyY2ggc3RhcnRzIGZyb20gdGhlCisJCQliZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBJZiBhIGNvdW50IGlzIGdpdmVuLCB0aGUKKwkJCWNvdW50J3RoIG1hdGNoaW5nIGxpbmUgaXMgZGlzcGxheWVkLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpdZCoKK11kCQkJbGlrZSAiW2QiLCBidXQgc3RhcnQgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6ZHMqICo6ZHNlYXJjaCoKKzpbcmFuZ2VdZHNbZWFyY2hdWyFdIFtjb3VudF0gWy9dc3RyaW5nWy9dCisJCQlMaWtlICJbZCIgIGFuZCAiXWQiLCBidXQgc2VhcmNoIGluIFtyYW5nZV0gbGluZXMKKwkJCShkZWZhdWx0OiB3aG9sZSBmaWxlKS4KKwkJCVNlZSB8OnNlYXJjaC1hcmdzfCBmb3IgWy9dIGFuZCBbIV0uICB7bm90IGluIFZpfQorCisJCQkJCQkJKltEKgorW0QJCQlEaXNwbGF5IGFsbCBtYWNybyBkZWZpbml0aW9ucyB0aGF0IGNvbnRhaW4gdGhlIG1hY3JvCisJCQl1bmRlciB0aGUgY3Vyc29yLiAgRmlsZW5hbWVzIGFuZCBsaW5lIG51bWJlcnMgYXJlCisJCQlkaXNwbGF5ZWQgZm9yIHRoZSBmb3VuZCBsaW5lcy4gIFRoZSBzZWFyY2ggc3RhcnRzCisJCQlmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICB7bm90IGluIFZpfQorCisJCQkJCQkJKl1EKgorXUQJCQlsaWtlICJbRCIsIGJ1dCBzdGFydCBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpkbCogKjpkbGlzdCoKKzpbcmFuZ2VdZGxbaXN0XVshXSBbL11zdHJpbmdbL10KKwkJCUxpa2UgIltEIiAgYW5kICJdRCIsIGJ1dCBzZWFyY2ggaW4gW3JhbmdlXSBsaW5lcworCQkJKGRlZmF1bHQ6IHdob2xlIGZpbGUpLgorCQkJU2VlIHw6c2VhcmNoLWFyZ3N8IGZvciBbL10gYW5kIFshXS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqW19DVFJMLUQqCitbIENUUkwtRAkJSnVtcCB0byB0aGUgZmlyc3QgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGNvbnRhaW5zIHRoZQorCQkJa2V5d29yZCB1bmRlciB0aGUgY3Vyc29yLiAgVGhlIHNlYXJjaCBzdGFydHMgZnJvbQorCQkJdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIElmIGEgY291bnQgaXMgZ2l2ZW4sIHRoZQorCQkJY291bnQndGggbWF0Y2hpbmcgbGluZSBpcyBqdW1wZWQgdG8uICB7bm90IGluIFZpfQorCisJCQkJCQkJKl1fQ1RSTC1EKgorXSBDVFJMLUQJCWxpa2UgIlsgQ1RSTC1EIiwgYnV0IHN0YXJ0IGF0IHRoZSBjdXJyZW50IGN1cnNvcgorCQkJcG9zaXRpb24uICB7bm90IGluIFZpfQorCisJCQkJCQkJKjpkaiogKjpkanVtcCoKKzpbcmFuZ2VdZGpbdW1wXVshXSBbY291bnRdIFsvXXN0cmluZ1svXQorCQkJTGlrZSAiWyBDVFJMLUQiICBhbmQgIl0gQ1RSTC1EIiwgYnV0IHNlYXJjaCAgaW4KKwkJCVtyYW5nZV0gbGluZXMgKGRlZmF1bHQ6IHdob2xlIGZpbGUpLgorCQkJU2VlIHw6c2VhcmNoLWFyZ3N8IGZvciBbL10gYW5kIFshXS4gIHtub3QgaW4gVml9CisKK0NUUkwtVyBDVFJMLUQJCQkJCSpDVFJMLVdfQ1RSTC1EKiAqQ1RSTC1XX2QqCitDVFJMLVcgZAkJT3BlbiBhIG5ldyB3aW5kb3csIHdpdGggdGhlIGN1cnNvciBvbiB0aGUgZmlyc3QKKwkJCW1hY3JvIGRlZmluaXRpb24gbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBrZXl3b3JkCisJCQl1bmRlciB0aGUgY3Vyc29yLiAgVGhlIHNlYXJjaCBzdGFydHMgZnJvbSB0aGUKKwkJCWJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIElmIGEgY291bnQgaXMgZ2l2ZW4sIHRoZQorCQkJY291bnQndGggbWF0Y2hpbmcgbGluZSBpcyBqdW1wZWQgdG8uICB7bm90IGluIFZpfQorCisJCQkJCQkJKjpkc3AqICo6ZHNwbGl0KgorOltyYW5nZV1kc3BbbGl0XVshXSBbY291bnRdIFsvXXN0cmluZ1svXQorCQkJTGlrZSAiQ1RSTC1XIGQiLCBidXQgc2VhcmNoIGluIFtyYW5nZV0gbGluZXMKKwkJCShkZWZhdWx0OiB3aG9sZSBmaWxlKS4KKwkJCVNlZSB8OnNlYXJjaC1hcmdzfCBmb3IgWy9dIGFuZCBbIV0uICB7bm90IGluIFZpfQorCisJCQkJCQkJKjpjaGUqICo6Y2hlY2twYXRoKgorOmNoZVtja3BhdGhdCQlMaXN0IGFsbCB0aGUgaW5jbHVkZWQgZmlsZXMgdGhhdCBjb3VsZCBub3QgYmUgZm91bmQuCisJCQl7bm90IGluIFZpfQorCis6Y2hlW2NrcGF0aF0hCQlMaXN0IGFsbCB0aGUgaW5jbHVkZWQgZmlsZXMuICB7bm90IGluIFZpfQorCisJCQkJCQkJCSo6c2VhcmNoLWFyZ3MqCitDb21tb24gYXJndW1lbnRzIGZvciB0aGUgY29tbWFuZHMgYWJvdmU6CitbIV0gICBXaGVuIGluY2x1ZGVkLCBmaW5kIG1hdGNoZXMgaW4gbGluZXMgdGhhdCBhcmUgcmVjb2duaXplZCBhcyBjb21tZW50cy4KKyAgICAgIFdoZW4gZXhjbHVkZWQsIGEgbWF0Y2ggaXMgaWdub3JlZCB3aGVuIHRoZSBsaW5lIGlzIHJlY29nbml6ZWQgYXMgYQorICAgICAgY29tbWVudCAoYWNjb3JkaW5nIHRvICdjb21tZW50cycpLCBvciB0aGUgbWF0Y2ggaXMgaW4gYSBDIGNvbW1lbnQgKGFmdGVyCisgICAgICAiLy8iIG9yIGluc2lkZSAvKiAqLykuICBOb3RlIHRoYXQgYSBtYXRjaCBtYXkgYmUgbWlzc2VkIGlmIGEgbGluZSBpcworICAgICAgcmVjb2duaXplZCBhcyBhIGNvbW1lbnQsIGJ1dCB0aGUgY29tbWVudCBlbmRzIGhhbGZ3YXkgdGhlIGxpbmUuCisgICAgICBBbmQgIGlmIHRoZSBsaW5lIGlzIGEgY29tbWVudCwgYnV0IGl0IGlzIG5vdCByZWNvZ25pemVkIChhY2NvcmRpbmcgdG8KKyAgICAgICdjb21tZW50cycpIGEgbWF0Y2ggbWF5IGJlIGZvdW5kIGluIGl0IGFueXdheS4gIEV4YW1wbGU6ID4KKwkJLyogY29tbWVudAorCQkgICBmb29iYXIgKi8KKzwgICAgIEEgbWF0Y2ggZm9yICJmb29iYXIiIGlzIGZvdW5kLCBiZWNhdXNlIHRoaXMgbGluZSBpcyBub3QgcmVjb2duaXplZCBhcyBhCisgICAgICBjb21tZW50IChldmVuIHRob3VnaCBzeW50YXggaGlnaGxpZ2h0aW5nIGRvZXMgcmVjb2duaXplIGl0KS4KKyAgICAgIE5vdGU6IFNpbmNlIGEgbWFjcm8gZGVmaW5pdGlvbiBtb3N0bHkgZG9lc24ndCBsb29rIGxpa2UgYSBjb21tZW50LCB0aGUKKyAgICAgIFshXSBtYWtlcyBubyBkaWZmZXJlbmNlIGZvciAiOmRsaXN0IiwgIjpkc2VhcmNoIiBhbmQgIjpkanVtcCIuCitbL10gICBBIHBhdHRlcm4gY2FuIGJlIHN1cnJvdW5kZWQgYnkgJy8nLiAgV2l0aG91dCAnLycgb25seSB3aG9sZSB3b3JkcyBhcmUKKyAgICAgIG1hdGNoZWQsIHVzaW5nIHRoZSBwYXR0ZXJuICJcPHBhdHRlcm5cPiIuICBPbmx5IGFmdGVyIHRoZSBzZWNvbmQgJy8nIGEKKyAgICAgIG5leHQgY29tbWFuZCBjYW4gYmUgYXBwZW5kZWQgd2l0aCAnfCcuICBFeGFtcGxlOiA+CisJOmlzZWFyY2ggL3N0cmluZy8gfCBlY2hvICJ0aGUgbGFzdCBvbmUiCis8ICAgICBGb3IgYSAiOmRqdW1wIiwgIjpkc3BsaXQiLCAiOmRsaXN0IiBhbmQgIjpkc2VhcmNoIiBjb21tYW5kIHRoZSBwYXR0ZXJuCisgICAgICBpcyB1c2VkIGFzIGEgbGl0ZXJhbCBzdHJpbmcsIG5vdCBhcyBhIHNlYXJjaCBwYXR0ZXJuLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdGVybS50eHQgYi9ydW50aW1lL2RvYy90ZXJtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGRkNjNlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdGVybS50eHQKQEAgLTAsMCArMSw4MDggQEAKKyp0ZXJtLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKYW4gMDkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitUZXJtaW5hbCBpbmZvcm1hdGlvbgkJCQkJKnRlcm1pbmFsLWluZm8qCisKK1ZpbSB1c2VzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZXJtaW5hbCB5b3UgYXJlIHVzaW5nIHRvIGZpbGwgdGhlIHNjcmVlbiBhbmQKK3JlY29nbml6ZSB3aGF0IGtleXMgeW91IGhpdC4gIElmIHRoaXMgaW5mb3JtYXRpb24gaXMgbm90IGNvcnJlY3QsIHRoZSBzY3JlZW4KK21heSBiZSBtZXNzZWQgdXAgb3Iga2V5cyBtYXkgbm90IGJlIHJlY29nbml6ZWQuICBUaGUgYWN0aW9ucyB3aGljaCBoYXZlIHRvIGJlCitwZXJmb3JtZWQgb24gdGhlIHNjcmVlbiBhcmUgYWNjb21wbGlzaGVkIGJ5IG91dHB1dHRpbmcgYSBzdHJpbmcgb2YKK2NoYXJhY3RlcnMuICBTcGVjaWFsIGtleXMgcHJvZHVjZSBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzLiAgVGhlc2Ugc3RyaW5ncyBhcmUKK3N0b3JlZCBpbiB0aGUgdGVybWluYWwgb3B0aW9ucywgc2VlIHx0ZXJtaW5hbC1vcHRpb25zfC4KKworTk9URTogTW9zdCBvZiB0aGlzIGlzIG5vdCB1c2VkIHdoZW4gcnVubmluZyB0aGUgfEdVSXwuCisKKzEuIFN0YXJ0dXAJCQl8c3RhcnR1cC10ZXJtaW5hbHwKKzIuIFRlcm1pbmFsIG9wdGlvbnMJCXx0ZXJtaW5hbC1vcHRpb25zfAorMy4gV2luZG93IHNpemUJCQl8d2luZG93LXNpemV8Cis0LiBTbG93IGFuZCBmYXN0IHRlcm1pbmFscwl8c2xvdy1mYXN0LXRlcm1pbmFsfAorNS4gVXNpbmcgdGhlIG1vdXNlCQl8bW91c2UtdXNpbmd8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gU3RhcnR1cAkJCQkJCSpzdGFydHVwLXRlcm1pbmFsKgorCitXaGVuIFZpbSBpcyBzdGFydGVkIGEgZGVmYXVsdCB0ZXJtaW5hbCB0eXBlIGlzIGFzc3VtZWQuICBGb3IgdGhlIEFtaWdhIHRoaXMgaXMKK2Egc3RhbmRhcmQgQ0xJIHdpbmRvdywgZm9yIE1TLURPUyB0aGUgcGMgdGVybWluYWwsIGZvciBVbml4IGFuIGFuc2kgdGVybWluYWwuCitBIGZldyBvdGhlciB0ZXJtaW5hbCB0eXBlcyBhcmUgYWx3YXlzIGF2YWlsYWJsZSwgc2VlIGJlbG93IHxidWlsdGluLXRlcm1zfC4KKworWW91IGNhbiBnaXZlIHRoZSB0ZXJtaW5hbCBuYW1lIHdpdGggdGhlICctVCcgVmltIGFyZ3VtZW50LiAgSWYgaXQgaXMgbm90IGdpdmVuCitWaW0gd2lsbCB0cnkgdG8gZ2V0IHRoZSBuYW1lIGZyb20gdGhlIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKwkJCQkqdGVybWNhcCogKnRlcm1pbmZvKiAqRTU1NyogKkU1NTgqICpFNTU5KgorT24gVW5peCB0aGUgdGVybWluZm8gZGF0YWJhc2Ugb3IgdGVybWNhcCBmaWxlIGlzIHVzZWQuICBUaGlzIGlzIHJlZmVycmVkIHRvIGFzCisidGVybWNhcCIgaW4gYWxsIHRoZSBkb2N1bWVudGF0aW9uLiAgQXQgY29tcGlsZSB0aW1lLCB3aGVuIHJ1bm5pbmcgY29uZmlndXJlLAordGhlIGNob2ljZSB3aGV0aGVyIHRvIHVzZSB0ZXJtaW5mbyBvciB0ZXJtY2FwIGlzIGRvbmUgYXV0b21hdGljYWxseS4gIFdoZW4KK3J1bm5pbmcgVmltIHRoZSBvdXRwdXQgb2YgIjp2ZXJzaW9uIiB3aWxsIHNob3cgfCt0ZXJtaW5mb3wgaWYgdGVybWluZm8gaXMKK3VzZWQuICBBbHNvIHNlZSB8eHRlcm0tc2NyZWVuc3wuCisKK09uIG5vbi1Vbml4IHN5c3RlbXMgYSB0ZXJtY2FwIGlzIG9ubHkgYXZhaWxhYmxlIGlmIFZpbSB3YXMgY29tcGlsZWQgd2l0aAorVEVSTUNBUCBkZWZpbmVkLgorCisJCQkJCSpidWlsdGluLXRlcm1zKiAqYnVpbHRpbl90ZXJtcyoKK1doaWNoIGJ1aWx0aW4gdGVybWluYWxzIGFyZSBhdmFpbGFibGUgZGVwZW5kcyBvbiBhIGZldyBkZWZpbmVzIGluIGZlYXR1cmUuaCwKK3doaWNoIG5lZWQgdG8gYmUgc2V0IGF0IGNvbXBpbGUgdGltZToKKyAgICBkZWZpbmUJCW91dHB1dCBvZiAiOnZlcnNpb24iCXRlcm1pbmFscyBidWlsdGluCX4KK05PX0JVSUxUSU5fVENBUFMJLWJ1aWx0aW5fdGVybXMJCW5vbmUKK1NPTUVfQlVJTFRJTl9UQ0FQUwkrYnVpbHRpbl90ZXJtcwkJbW9zdCBjb21tb24gb25lcyAoZGVmYXVsdCkKK0FMTF9CVUlMVElOX1RDQVBTCSsrYnVpbHRpbl90ZXJtcwkJYWxsIGF2YWlsYWJsZQorCitZb3UgY2FuIHNlZSBhIGxpc3Qgb2YgYXZhaWxhYmxlIGJ1aWx0aW4gdGVybWluYWxzIHdpdGggIjpzZXQgdGVybT14eHgiICh3aGVuCitub3QgcnVubmluZyB0aGUgR1VJKS4gIEFsc28gc2VlIHwrYnVpbHRpbl90ZXJtc3wuCisKK0lmIHRoZSB0ZXJtY2FwIGNvZGUgaXMgaW5jbHVkZWQgVmltIHdpbGwgdHJ5IHRvIGdldCB0aGUgc3RyaW5ncyBmb3IgdGhlCit0ZXJtaW5hbCB5b3UgYXJlIHVzaW5nIGZyb20gdGhlIHRlcm1jYXAgZmlsZSBhbmQgdGhlIGJ1aWx0aW4gdGVybWNhcHMuICBCb3RoCithcmUgYWx3YXlzIHVzZWQsIGlmIGFuIGVudHJ5IGZvciB0aGUgdGVybWluYWwgeW91IGFyZSB1c2luZyBpcyBwcmVzZW50LiAgV2hpY2gKK29uZSBpcyB1c2VkIGZpcnN0IGRlcGVuZHMgb24gdGhlICd0dHlidWlsdGluJyBvcHRpb246CisKKyd0dHlidWlsdGluJyBvbgkJMTogYnVpbHRpbiB0ZXJtY2FwCTI6IGV4dGVybmFsIHRlcm1jYXAKKyd0dHlidWlsdGluJyBvZmYJMTogZXh0ZXJuYWwgdGVybWNhcAkyOiBidWlsdGluIHRlcm1jYXAKKworSWYgYW4gb3B0aW9uIGlzIG1pc3NpbmcgaW4gb25lIG9mIHRoZW0sIGl0IHdpbGwgYmUgb2J0YWluZWQgZnJvbSB0aGUgb3RoZXIKK29uZS4gIElmIGFuIG9wdGlvbiBpcyBwcmVzZW50IGluIGJvdGgsIHRoZSBvbmUgZmlyc3QgZW5jb3VudGVyZWQgaXMgdXNlZC4KKworV2hpY2ggZXh0ZXJuYWwgdGVybWNhcCBmaWxlIGlzIHVzZWQgdmFyaWVzIGZyb20gc3lzdGVtIHRvIHN5c3RlbSBhbmQgbWF5CitkZXBlbmQgb24gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAiVEVSTUNBUCIgYW5kICJURVJNUEFUSCIuICBTZWUgIm1hbgordGdldGVudCIuCisKK1NldHRpbmdzIGRlcGVuZGluZyBvbiB0ZXJtaW5hbAkJCSp0ZXJtLWRlcGVuZGVudC1zZXR0aW5ncyoKKworSWYgeW91IHdhbnQgdG8gc2V0IG9wdGlvbnMgb3IgbWFwcGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgdGVybWluYWwgbmFtZSwgeW91CitjYW4gZG8gdGhpcyBiZXN0IGluIHlvdXIgLnZpbXJjLiAgRXhhbXBsZTogPgorCisgICBpZiAmdGVybSA9PSAieHRlcm0iCisgICAgIC4uLiB4dGVybSBtYXBzIGFuZCBzZXR0aW5ncyAuLi4KKyAgIGVsc2VpZiAmdGVybSA9fiAidnQxMC4iCisgICAgIC4uLiB2dDEwMCwgdnQxMDIgbWFwcyBhbmQgc2V0dGluZ3MgLi4uCisgICBlbmRpZgorPAorCQkJCQkJKnJhdy10ZXJtaW5hbC1tb2RlKgorRm9yIG5vcm1hbCBlZGl0aW5nIHRoZSB0ZXJtaW5hbCB3aWxsIGJlIHB1dCBpbnRvICJyYXciIG1vZGUuICBUaGUgc3RyaW5ncworZGVmaW5lZCB3aXRoICd0X3RpJyBhbmQgJ3Rfa3MnIHdpbGwgYmUgc2VudCB0byB0aGUgdGVybWluYWwuICBOb3JtYWxseSB0aGlzCitwdXRzIHRoZSB0ZXJtaW5hbCBpbiBhIHN0YXRlIHdoZXJlIHRoZSB0ZXJtY2FwIGNvZGVzIGFyZSB2YWxpZCBhbmQgYWN0aXZhdGVzCit0aGUgY3Vyc29yIGFuZCBmdW5jdGlvbiBrZXlzLiAgV2hlbiBWaW0gZXhpdHMgdGhlIHRlcm1pbmFsIHdpbGwgYmUgcHV0IGJhY2sKK2ludG8gdGhlIG1vZGUgaXQgd2FzIGJlZm9yZSBWaW0gc3RhcnRlZC4gIFRoZSBzdHJpbmdzIGRlZmluZWQgd2l0aCAndF90ZScgYW5kCisndF9rZScgd2lsbCBiZSBzZW50IHRvIHRoZSB0ZXJtaW5hbC4gIE9uIHRoZSBBbWlnYSwgd2l0aCBjb21tYW5kcyB0aGF0IGV4ZWN1dGUKK2FuIGV4dGVybmFsIGNvbW1hbmQgKGUuZy4sICIhISIpLCB0aGUgdGVybWluYWwgd2lsbCBiZSBwdXQgaW50byBOb3JtYWwgbW9kZQorZm9yIGEgbW9tZW50LiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gc3RvcCB0aGUgb3V0cHV0IHRvIHRoZSBzY3JlZW4gYnkKK2hpdHRpbmcgYSBwcmludGluZyBrZXkuICBPdXRwdXQgcmVzdW1lcyB3aGVuIHlvdSBoaXQgPEJTPi4KKworCQkJCQkJCSpjczctcHJvYmxlbSoKK05vdGU6IElmIHRoZSB0ZXJtaW5hbCBzZXR0aW5ncyBhcmUgY2hhbmdlZCBhZnRlciBydW5uaW5nIFZpbSwgeW91IG1pZ2h0IGhhdmUKK2FuIGlsbGVnYWwgY29tYmluYXRpb24gb2Ygc2V0dGluZ3MuICBUaGlzIGhhcyBiZWVuIHJlcG9ydGVkIG9uIFNvbGFyaXMgMi41Cit3aXRoICJzdHR5IGNzOCBwYXJlbmIiLCB3aGljaCBpcyByZXN0b3JlZCBhcyAic3R0eSBjczcgcGFyZW5iIi4gIFVzZQorInN0dHkgY3M4IC1wYXJlbmIgLWlzdHJpcCIgaW5zdGVhZCwgdGhpcyBpcyByZXN0b3JlZCBjb3JyZWN0bHkuCisKK1NvbWUgdGVybWNhcCBlbnRyaWVzIGFyZSB3cm9uZyBpbiB0aGUgc2Vuc2UgdGhhdCBhZnRlciBzZW5kaW5nICd0X2tzJyB0aGUKK2N1cnNvciBrZXlzIHNlbmQgY29kZXMgZGlmZmVyZW50IGZyb20gdGhlIGNvZGVzIGRlZmluZWQgaW4gdGhlIHRlcm1jYXAuICBUbworYXZvaWQgdGhpcyB5b3UgY2FuIHNldCAndF9rcycgKGFuZCAndF9rZScpIHRvIGVtcHR5IHN0cmluZ3MuICBUaGlzIG11c3QgYmUKK2RvbmUgZHVyaW5nIGluaXRpYWxpemF0aW9uIChzZWUgfGluaXRpYWxpemF0aW9ufCksIG90aGVyd2lzZSBpdCdzIHRvbyBsYXRlLgorCitTb21lIHRlcm1jYXAgZW50cmllcyBhc3N1bWUgdGhhdCB0aGUgaGlnaGVzdCBiaXQgaXMgYWx3YXlzIHJlc2V0LiAgRm9yCitleGFtcGxlOiBUaGUgY3Vyc29yLXVwIGVudHJ5IGZvciB0aGUgQW1pZ2EgY291bGQgYmUgIjprdT1cRVtBOiIuICBCdXQgdGhlCitBbWlnYSByZWFsbHkgc2VuZHMgIlwyMzNBIi4gIFRoaXMgd29ya3MgZmluZSBpZiB0aGUgaGlnaGVzdCBiaXQgaXMgcmVzZXQsCitlLmcuLCB3aGVuIHVzaW5nIGFuIEFtaWdhIG92ZXIgYSBzZXJpYWwgbGluZS4gIElmIHRoZSBjdXJzb3Iga2V5cyBkb24ndCB3b3JrLAordHJ5IHRoZSBlbnRyeSAiOmt1PVwyMzNBOiIuCisKK1NvbWUgdGVybWNhcCBlbnRyaWVzIGhhdmUgdGhlIGVudHJ5ICI6a3U9XEVbQToiLiAgQnV0IHRoZSBBbWlnYSByZWFsbHkgc2VuZHMKKyJcMjMzQSIuICBPbiBvdXRwdXQgIlxFWyIgYW5kICJcMjMzIiBhcmUgb2Z0ZW4gZXF1aXZhbGVudCwgb24gaW5wdXQgdGhleQorYXJlbid0LiAgWW91IHdpbGwgaGF2ZSB0byBjaGFuZ2UgdGhlIHRlcm1jYXAgZW50cnksIG9yIGNoYW5nZSB0aGUga2V5IGNvZGUgd2l0aAordGhlIDpzZXQgY29tbWFuZCB0byBmaXggdGhpcy4KKworTWFueSBjdXJzb3Iga2V5IGNvZGVzIHN0YXJ0IHdpdGggYW4gPEVzYz4uICBWaW0gbXVzdCBmaW5kIG91dCBpZiB0aGlzIGlzIGEKK3NpbmdsZSBoaXQgb2YgdGhlIDxFc2M+IGtleSBvciB0aGUgc3RhcnQgb2YgYSBjdXJzb3Iga2V5IHNlcXVlbmNlLiAgSXQgd2FpdHMKK2ZvciBhIG5leHQgY2hhcmFjdGVyIHRvIGFycml2ZS4gIElmIGl0IGRvZXMgbm90IGFycml2ZSB3aXRoaW4gb25lIHNlY29uZCBhCitzaW5nbGUgPEVzYz4gaXMgYXNzdW1lZC4gIE9uIHZlcnkgc2xvdyBzeXN0ZW1zIHRoaXMgbWF5IGZhaWwsIGNhdXNpbmcgY3Vyc29yCitrZXlzIG5vdCB0byB3b3JrIHNvbWV0aW1lcy4gIElmIHlvdSBkaXNjb3ZlciB0aGlzIHByb2JsZW0gcmVzZXQgdGhlICd0aW1lb3V0Jworb3B0aW9uLiAgVmltIHdpbGwgd2FpdCBmb3IgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGFycml2ZSBhZnRlciBhbiA8RXNjPi4gIElmCit5b3Ugd2FudCB0byBlbnRlciBhIHNpbmdsZSA8RXNjPiB5b3UgbXVzdCB0eXBlIGl0IHR3aWNlLiAgUmVzZXR0aW5nIHRoZQorJ2VzY2tleXMnIG9wdGlvbiBhdm9pZHMgdGhpcyBwcm9ibGVtIGluIEluc2VydCBtb2RlLCBidXQgeW91IGxvc2UgdGhlCitwb3NzaWJpbGl0eSB0byB1c2UgY3Vyc29yIGFuZCBmdW5jdGlvbiBrZXlzIGluIEluc2VydCBtb2RlLgorCitPbiB0aGUgQW1pZ2EgdGhlIHJlY29nbml0aW9uIG9mIHdpbmRvdyByZXNpemluZyBpcyBhY3RpdmF0ZWQgb25seSB3aGVuIHRoZQordGVybWluYWwgbmFtZSBpcyAiYW1pZ2EiIG9yICJidWlsdGluX2FtaWdhIi4KKworU29tZSB0ZXJtaW5hbHMgaGF2ZSBjb25mdXNpbmcgY29kZXMgZm9yIHRoZSBjdXJzb3Iga2V5cy4gIFRoZSB0ZWxldmlkZW8gOTI1IGlzCitzdWNoIGEgdGVybWluYWwuICBJdCBzZW5kcyBhIENUUkwtSCBmb3IgY3Vyc29yLWxlZnQuICBUaGlzIHdvdWxkIG1ha2UgaXQKK2ltcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggYSBiYWNrc3BhY2UgYW5kIGN1cnNvci1sZWZ0LiAgVG8gYXZvaWQgdGhpcyBwcm9ibGVtCitDVFJMLUggaXMgbmV2ZXIgcmVjb2duaXplZCBhcyBjdXJzb3ItbGVmdC4KKworCQkJCQkqdnQxMDAtY3Vyc29yLWtleXMqICp4dGVybS1jdXJzb3Ita2V5cyoKK090aGVyIHRlcm1pbmFscyAoZS5nLiwgdnQxMDAgYW5kIHh0ZXJtKSBoYXZlIGN1cnNvciBrZXlzIHRoYXQgc2VuZCA8RXNjPk9BLAorPEVzYz5PQiwgZXRjLiAgVW5mb3J0dW5hdGVseSB0aGVzZSBhcmUgdmFsaWQgY29tbWFuZHMgaW4gaW5zZXJ0IG1vZGU6IFN0b3AKK2luc2VydCwgT3BlbiBhIG5ldyBsaW5lIGFib3ZlIHRoZSBuZXcgb25lLCBzdGFydCBpbnNlcnRpbmcgJ0EnLCAnQicsIGV0Yy4KK0luc3RlYWQgb2YgcGVyZm9ybWluZyB0aGVzZSBjb21tYW5kcyBWaW0gd2lsbCBlcnJvbmVvdXNseSByZWNvZ25pemUgdGhpcyB0eXBlZAora2V5IHNlcXVlbmNlIGFzIGEgY3Vyc29yIGtleSBtb3ZlbWVudC4gIFRvIGF2b2lkIHRoaXMgYW5kIG1ha2UgVmltIGRvIHdoYXQgeW91Cit3YW50IGluIGVpdGhlciBjYXNlIHlvdSBjb3VsZCB1c2UgdGhlc2Ugc2V0dGluZ3M6ID4KKwk6c2V0IG5vdGltZW91dAkJIiBkb24ndCB0aW1lb3V0IG9uIG1hcHBpbmdzCisJOnNldCB0dGltZW91dAkJIiBkbyB0aW1lb3V0IG9uIHRlcm1pbmFsIGtleSBjb2RlcworCTpzZXQgdGltZW91dGxlbj0xMDAJIiB0aW1lb3V0IGFmdGVyIDEwMCBtc2VjCitUaGlzIHJlcXVpcmVzIHRoZSBrZXktY29kZXMgdG8gYmUgc2VudCB3aXRoaW4gMTAwbXNlYyBpbiBvcmRlciB0byByZWNvZ25pemUKK3RoZW0gYXMgYSBjdXJzb3Iga2V5LiAgV2hlbiB5b3UgdHlwZSB5b3Ugbm9ybWFsbHkgYXJlIG5vdCB0aGF0IGZhc3QsIHNvIHRoZXkKK2FyZSByZWNvZ25pemVkIGFzIGluZGl2aWR1YWwgdHlwZWQgY29tbWFuZHMsIGV2ZW4gdGhvdWdoIFZpbSByZWNlaXZlcyB0aGUgc2FtZQorc2VxdWVuY2Ugb2YgYnl0ZXMuCisKKwkJCQkqdnQxMDAtZnVuY3Rpb24ta2V5cyogKnh0ZXJtLWZ1bmN0aW9uLWtleXMqCitBbiB4dGVybSBjYW4gc2VuZCBmdW5jdGlvbiBrZXlzIEYxIHRvIEY0IGluIHR3byBtb2RlczogdnQxMDAgY29tcGF0aWJsZSBvcgorbm90LiAgQmVjYXVzZSBWaW0gY2Fubm90IGtub3cgd2hhdCB0aGUgeHRlcm0gaXMgc2VuZGluZywgYm90aCB0eXBlcyBvZiBrZXlzCithcmUgcmVjb2duaXplZC4gIFRoZSBzYW1lIGhhcHBlbnMgZm9yIHRoZSA8SG9tZT4gYW5kIDxFbmQ+IGtleXMuCisJCQlub3JtYWwJCQl2dDEwMCB+CisJPEYxPgl0X2sxCTxFc2M+WzExfgk8eEYxPgk8RXNjPk9QCSAgICAqPHhGMT4teHRlcm0qCisJPEYyPgl0X2syCTxFc2M+WzEyfgk8eEYyPgk8RXNjPk9RCSAgICAqPHhGMj4teHRlcm0qCisJPEYzPgl0X2szCTxFc2M+WzEzfgk8eEYzPgk8RXNjPk9SCSAgICAqPHhGMz4teHRlcm0qCisJPEY0Pgl0X2s0CTxFc2M+WzE0fgk8eEY0Pgk8RXNjPk9TCSAgICAqPHhGND4teHRlcm0qCisJPEhvbWU+CXRfa2gJPEVzYz5bN34JPHhIb21lPgk8RXNjPk9ICSAgICAqPHhIb21lPi14dGVybSoKKwk8RW5kPgl0X0A3CTxFc2M+WzR+CTx4RW5kPgk8RXNjPk9GCSAgICAqPHhFbmQ+LXh0ZXJtKgorCitXaGVuIFZpbSBzdGFydHMsIDx4RjE+IGlzIG1hcHBlZCB0byA8RjE+LCA8eEYyPiB0byA8RjI+IGV0Yy4gIFRoaXMgbWVhbnMgdGhhdAorYnkgZGVmYXVsdCBib3RoIGNvZGVzIGRvIHRoZSBzYW1lIHRoaW5nLiAgSWYgeW91IG1ha2UgYSBtYXBwaW5nIGZvciA8eEYyPiwKK2JlY2F1c2UgeW91ciB0ZXJtaW5hbCBkb2VzIGhhdmUgdHdvIGtleXMsIHRoZSBkZWZhdWx0IG1hcHBpbmcgaXMgb3ZlcndyaXR0ZW4sCit0aHVzIHlvdSBjYW4gdXNlIHRoZSA8RjI+IGFuZCA8eEYyPiBrZXlzIGZvciBzb21ldGhpbmcgZGlmZmVyZW50LgorCisJCQkJCQkJKnh0ZXJtLXNoaWZ0ZWQta2V5cyoKK05ld2VyIHZlcnNpb25zIG9mIHh0ZXJtIHN1cHBvcnQgc2hpZnRlZCBmdW5jdGlvbiBrZXlzIGFuZCBzcGVjaWFsIGtleXMuICBWaW0KK3JlY29nbml6ZXMgbW9zdCBvZiB0aGVtLiAgVXNlICI6c2V0IHRlcm1jYXAiIHRvIGNoZWNrIHdoaWNoIGFyZSBzdXBwb3J0ZWQgYW5kCit3aGF0IHRoZSBjb2RlcyBhcmUuICBNb3N0bHkgdGhlc2UgYXJlIG5vdCBpbiBhIHRlcm1jYXAsIHRoZXkgYXJlIG9ubHkKK3N1cHBvcnRlZCBieSB0aGUgYnVpbHRpbl94dGVybSB0ZXJtY2FwLgorCisJCQkJCQkJKnh0ZXJtLXNjcm9sbC1yZWdpb24qCitUaGUgZGVmYXVsdCB0ZXJtY2FwIGVudHJ5IGZvciB4dGVybSBvbiBTdW4gYW5kIG90aGVyIHBsYXRmb3JtcyBkb2VzIG5vdAorY29udGFpbiB0aGUgZW50cnkgZm9yIHNjcm9sbCByZWdpb25zLiAgQWRkICI6Y3M9XEVbJWklZDslZHI6IiB0byB0aGUgeHRlcm0KK2VudHJ5IGluIC9ldGMvdGVybWNhcCBhbmQgZXZlcnl0aGluZyBzaG91bGQgd29yay4KKworCQkJCQkJCSp4dGVybS1lbmQtaG9tZS1rZXlzKgorT24gc29tZSBzeXN0ZW1zIChhdCBsZWFzdCBvbiBGcmVlQlNEIHdpdGggWEZyZWU4NiAzLjEuMikgdGhlIGNvZGVzIHRoYXQgdGhlCis8RW5kPiBhbmQgPEhvbWU+IGtleXMgc2VuZCBjb250YWluIGEgPE51bD4gY2hhcmFjdGVyLiAgVG8gbWFrZSB0aGVzZSBrZXlzIHNlbmQKK3RoZSBwcm9wZXIga2V5IGNvZGUsIGFkZCB0aGVzZSBsaW5lcyB0byB5b3VyIH4vLlhkZWZhdWx0cyBmaWxlOgorCisqVlQxMDAuVHJhbnNsYXRpb25zOgkJI292ZXJyaWRlIFxuXAorCQk8S2V5PkhvbWU6IHN0cmluZygiMHgxYiIpIHN0cmluZygiWzd+IikgXG5cCisJCTxLZXk+RW5kOiBzdHJpbmcoIjB4MWIiKSBzdHJpbmcoIls4fiIpCisKKwkJCQkJCSp4dGVybS04Yml0KiAqeHRlcm0tOC1iaXQqCitYdGVybSBjYW4gYmUgcnVuIGluIGEgbW9kZSB3aGVyZSBpdCB1c2VzIDgtYml0IGVzY2FwZSBzZXF1ZW5jZXMuICBUaGUgQ1NJIGNvZGUKK2lzIHVzZWQgaW5zdGVhZCBvZiA8RXNjPlsuICBUaGUgYWR2YW50YWdlIGlzIHRoYXQgYW4gPEVzYz4gY2FuIHF1aWNrbHkgYmUKK3JlY29nbml6ZWQgaW4gSW5zZXJ0IG1vZGUsIGJlY2F1c2UgaXQgY2FuJ3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgc3RhcnQgb2YgYQorc3BlY2lhbCBrZXkuCitGb3IgdGhlIGJ1aWx0aW4gdGVybWNhcCBlbnRyaWVzLCBWaW0gY2hlY2tzIGlmIHRoZSAndGVybScgb3B0aW9uIGNvbnRhaW5zCisiOGJpdCIgYW55d2hlcmUuICBJdCB0aGVuIHVzZXMgOC1iaXQgY2hhcmFjdGVycyBmb3IgdGhlIHRlcm1jYXAgZW50cmllcywgdGhlCittb3VzZSBhbmQgYSBmZXcgb3RoZXIgdGhpbmdzLiAgWW91IHdvdWxkIG5vcm1hbGx5IHNldCAkVEVSTSBpbiB5b3VyIHNoZWxsIHRvCisieHRlcm0tOGJpdCIgYW5kIFZpbSBwaWNrcyB0aGlzIHVwIGFuZCBhZGp1c3RzIHRvIHRoZSA4LWJpdCBzZXR0aW5nCithdXRvbWF0aWNhbGx5LgorV2hlbiBWaW0gcmVjZWl2ZXMgYSByZXNwb25zZSB0byB0aGUgfHRfUlZ8IChyZXF1ZXN0IHZlcnNpb24pIHNlcXVlbmNlIGFuZCBpdAorc3RhcnRzIHdpdGggQ1NJLCBpdCBhc3N1bWVzIHRoYXQgdGhlIHRlcm1pbmFsIGlzIGluIDgtYml0IG1vZGUgYW5kIHdpbGwKK2NvbnZlcnQgYWxsIGtleSBzZXF1ZW5jZXMgdG8gdGhlaXIgOC1iaXQgdmFyaWFudHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVGVybWluYWwgb3B0aW9ucwkJCQkqdGVybWluYWwtb3B0aW9ucyogKkU0MzYqCisKK1RoZSB0ZXJtaW5hbCBvcHRpb25zIGNhbiBiZSBzZXQganVzdCBsaWtlIG5vcm1hbCBvcHRpb25zLiAgQnV0IHRoZXkgYXJlIG5vdAorc2hvd24gd2l0aCB0aGUgIjpzZXQgYWxsIiBjb21tYW5kLiAgSW5zdGVhZCB1c2UgIjpzZXQgdGVybWNhcCIuCisKK0l0IGlzIGFsd2F5cyBwb3NzaWJsZSB0byBjaGFuZ2UgaW5kaXZpZHVhbCBzdHJpbmdzIGJ5IHNldHRpbmcgdGhlCithcHByb3ByaWF0ZSBvcHRpb24uICBGb3IgZXhhbXBsZTogPgorCTpzZXQgdF9jZT1eVl5bW0sJKENUUkwtViwgPEVzYz4sIFssIEspCisKK3tWaTogbm8gdGVybWluYWwgb3B0aW9ucy4gIFlvdSBoYXZlIHRvIGV4aXQgVmksIGVkaXQgdGhlIHRlcm1jYXAgZW50cnkgYW5kCit0cnkgYWdhaW59CisKK1RoZSBvcHRpb25zIGFyZSBsaXN0ZWQgYmVsb3cuICBUaGUgYXNzb2NpYXRlZCB0ZXJtY2FwIGNvZGUgaXMgYWx3YXlzIGVxdWFsIHRvCit0aGUgbGFzdCB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3B0aW9uIG5hbWUuICBPbmx5IG9uZSB0ZXJtY2FwIGNvZGUgaXMKK3JlcXVpcmVkOiBDdXJzb3IgbW90aW9uLCAndF9jbScuCisKK1RoZSBvcHRpb25zICd0X2RhJywgJ3RfZGInLCAndF9tcycsICd0X3hzJyByZXByZXNlbnQgZmxhZ3MgaW4gdGhlIHRlcm1jYXAuCitXaGVuIHRoZSB0ZXJtY2FwIGZsYWcgaXMgcHJlc2VudCwgdGhlIG9wdGlvbiB3aWxsIGJlIHNldCB0byAieSIuICBCdXQgYW55Citub24tZW1wdHkgc3RyaW5nIG1lYW5zIHRoYXQgdGhlIGZsYWcgaXMgc2V0LiAgQW4gZW1wdHkgc3RyaW5nIG1lYW5zIHRoYXQgdGhlCitmbGFnIGlzIG5vdCBzZXQuICAndF9DUycgd29ya3MgbGlrZSB0aGlzIHRvbywgYnV0IGl0IGlzbid0IGEgdGVybWNhcCBmbGFnLgorCitPVVRQVVQgQ09ERVMKKwlvcHRpb24JbWVhbmluZwl+CisKKwl0X0FCCXNldCBiYWNrZ3JvdW5kIGNvbG9yIChBTlNJKQkJCSp0X0FCKiAqJ3RfQUInKgorCXRfQUYJc2V0IGZvcmVncm91bmQgY29sb3IgKEFOU0kpCQkJKnRfQUYqICondF9BRicqCisJdF9BTAlhZGQgbnVtYmVyIG9mIGJsYW5rIGxpbmVzCQkJKnRfQUwqICondF9BTCcqCisJdF9hbAlhZGQgbmV3IGJsYW5rIGxpbmUJCQkJKnRfYWwqICondF9hbCcqCisJdF9iYwliYWNrc3BhY2UgY2hhcmFjdGVyCQkJCSp0X2JjKiAqJ3RfYmMnKgorCXRfY2QJY2xlYXIgdG8gZW5kIG9mIHNjcmVlbgkJCQkqdF9jZCogKid0X2NkJyoKKwl0X2NlCWNsZWFyIHRvIGVuZCBvZiBsaW5lCQkJCSp0X2NlKiAqJ3RfY2UnKgorCXRfY2wJY2xlYXIgc2NyZWVuCQkJCQkqdF9jbCogKid0X2NsJyoKKwl0X2NtCWN1cnNvciBtb3Rpb24gKHJlcXVpcmVkISkJCSAgKkU0MzcqICp0X2NtKiAqJ3RfY20nKgorCXRfQ28JbnVtYmVyIG9mIGNvbG9ycwkJCQkqdF9DbyogKid0X0NvJyoKKwl0X0NTCWlmIG5vbi1lbXB0eSwgY3Vyc29yIHJlbGF0aXZlIHRvIHNjcm9sbCByZWdpb24JKnRfQ1MqICondF9DUycqCisJdF9jcwlkZWZpbmUgc2Nyb2xsaW5nIHJlZ2lvbgkJCQkqdF9jcyogKid0X2NzJyoKKwl0X0NWCWRlZmluZSB2ZXJ0aWNhbCBzY3JvbGxpbmcgcmVnaW9uCQkqdF9DViogKid0X0NWJyoKKwl0X2RhCWlmIG5vbi1lbXB0eSwgbGluZXMgZnJvbSBhYm92ZSBzY3JvbGwgZG93bgkqdF9kYSogKid0X2RhJyoKKwl0X2RiCWlmIG5vbi1lbXB0eSwgbGluZXMgZnJvbSBiZWxvdyBzY3JvbGwgdXAJKnRfZGIqICondF9kYicqCisJdF9ETAlkZWxldGUgbnVtYmVyIG9mIGxpbmVzCQkJCSp0X0RMKiAqJ3RfREwnKgorCXRfZGwJZGVsZXRlIGxpbmUJCQkJCSp0X2RsKiAqJ3RfZGwnKgorCXRfZnMJc2V0IHdpbmRvdyB0aXRsZSBlbmQgKGZyb20gc3RhdHVzIGxpbmUpCQkqdF9mcyogKid0X2ZzJyoKKwl0X2tlCWV4aXQgImtleXBhZCB0cmFuc21pdCIgbW9kZQkJCSp0X2tlKiAqJ3Rfa2UnKgorCXRfa3MJc3RhcnQgImtleXBhZCB0cmFuc21pdCIgbW9kZQkJCSp0X2tzKiAqJ3Rfa3MnKgorCXRfbGUJbW92ZSBjdXJzb3Igb25lIGNoYXIgbGVmdAkJCSp0X2xlKiAqJ3RfbGUnKgorCXRfbWIJYmxpbmtpbmcgbW9kZQkJCQkJKnRfbWIqICondF9tYicqCisJdF9tZAlib2xkIG1vZGUJCQkJCSp0X21kKiAqJ3RfbWQnKgorCXRfbWUJTm9ybWFsIG1vZGUgKHVuZG9lcyB0X21yLCB0X21iLCB0X21kIGFuZCBjb2xvcikJKnRfbWUqICondF9tZScqCisJdF9tcglyZXZlcnNlIChpbnZlcnQpIG1vZGUJCQkJKnRfbXIqICondF9tcicqCisJCQkJCQkJCSp0X21zKiAqJ3RfbXMnKgorCXRfbXMJaWYgbm9uLWVtcHR5LCBjdXJzb3IgY2FuIGJlIG1vdmVkIGluIHN0YW5kb3V0L2ludmVyc2UgbW9kZQorCXRfbmQJbm9uIGRlc3RydWN0aXZlIHNwYWNlIGNoYXJhY3RlcgkJCSp0X25kKiAqJ3RfbmQnKgorCXRfb3AJcmVzZXQgdG8gb3JpZ2luYWwgY29sb3IgcGFpcgkJCSp0X29wKiAqJ3Rfb3AnKgorCXRfUkkJY3Vyc29yIG51bWJlciBvZiBjaGFycyByaWdodAkJCSp0X1JJKiAqJ3RfUkknKgorCXRfU2IJc2V0IGJhY2tncm91bmQgY29sb3IJCQkJKnRfU2IqICondF9TYicqCisJdF9TZglzZXQgZm9yZWdyb3VuZCBjb2xvcgkJCQkqdF9TZiogKid0X1NmJyoKKwl0X3NlCXN0YW5kb3V0IGVuZAkJCQkJKnRfc2UqICondF9zZScqCisJdF9zbwlzdGFuZG91dCBtb2RlCQkJCQkqdF9zbyogKid0X3NvJyoKKwl0X3NyCXNjcm9sbCByZXZlcnNlIChiYWNrd2FyZCkJCQkqdF9zciogKid0X3NyJyoKKwl0X3RlCW91dCBvZiAidGVybWNhcCIgbW9kZQkJCQkqdF90ZSogKid0X3RlJyoKKwl0X3RpCXB1dCB0ZXJtaW5hbCBpbiAidGVybWNhcCIgbW9kZQkJCSp0X3RpKiAqJ3RfdGknKgorCXRfdHMJc2V0IHdpbmRvdyB0aXRsZSBzdGFydCAodG8gc3RhdHVzIGxpbmUpCQkqdF90cyogKid0X3RzJyoKKwl0X3VlCXVuZGVybGluZSBlbmQJCQkJCSp0X3VlKiAqJ3RfdWUnKgorCXRfdXMJdW5kZXJsaW5lIG1vZGUJCQkJCSp0X3VzKiAqJ3RfdXMnKgorCXRfdXQJY2xlYXJpbmcgdXNlcyB0aGUgY3VycmVudCBiYWNrZ3JvdW5kIGNvbG9yCSp0X3V0KiAqJ3RfdXQnKgorCXRfdmIJdmlzdWFsIGJlbGwJCQkJCSp0X3ZiKiAqJ3RfdmInKgorCXRfdmUJY3Vyc29yIHZpc2libGUJCQkJCSp0X3ZlKiAqJ3RfdmUnKgorCXRfdmkJY3Vyc29yIGludmlzaWJsZQkJCQkqdF92aSogKid0X3ZpJyoKKwl0X3ZzCWN1cnNvciB2ZXJ5IHZpc2libGUJCQkJKnRfdnMqICondF92cycqCisJCQkJCQkJCSp0X3hzKiAqJ3RfeHMnKgorCXRfeHMJaWYgbm9uLWVtcHR5LCBzdGFuZG91dCBub3QgZXJhc2VkIGJ5IG92ZXJ3cml0aW5nIChocHRlcm0pCisJdF9aSAlpdGFsaWNzIG1vZGUJCQkJCSp0X1pIKiAqJ3RfWkgnKgorCXRfWlIJaXRhbGljcyBlbmQJCQkJCSp0X1pSKiAqJ3RfWlInKgorCitBZGRlZCBieSBWaW0gKHRoZXJlIGFyZSBubyBzdGFuZGFyZCBjb2RlcyBmb3IgdGhlc2UpOgorCXRfSVMJc2V0IGljb24gdGV4dCBzdGFydAkJCQkqdF9JUyogKid0X0lTJyoKKwl0X0lFCXNldCBpY29uIHRleHQgZW5kCQkJCSp0X0lFKiAqJ3RfSUUnKgorCXRfV1AJc2V0IHdpbmRvdyBwb3NpdGlvbiAoWSwgWCkgaW4gcGl4ZWxzCQkqdF9XUCogKid0X1dQJyoKKwl0X1dTCXNldCB3aW5kb3cgc2l6ZSAoaGVpZ2h0LCB3aWR0aCkgaW4gY2hhcmFjdGVycwkqdF9XUyogKid0X1dTJyoKKwl0X1JWCXJlcXVlc3QgdGVybWluYWwgdmVyc2lvbiBzdHJpbmcgKGZvciB4dGVybSkJKnRfUlYqICondF9SVicqCisJCXx4dGVybS04Yml0fCB8djp0ZXJtcmVzcG9uc2V8IHwndHR5bW91c2UnfCB8eHRlcm0tY29kZXN8CisKK0tFWSBDT0RFUworTm90ZTogVXNlIHRoZSA8PiBmb3JtIGlmIHBvc3NpYmxlCisKKwlvcHRpb24JbmFtZQkJbWVhbmluZwl+CisKKwl0X2t1CTxVcD4JCWFycm93IHVwCQkJKnRfa3UqICondF9rdScqCisJdF9rZAk8RG93bj4JCWFycm93IGRvd24JCQkqdF9rZCogKid0X2tkJyoKKwl0X2tyCTxSaWdodD4JCWFycm93IHJpZ2h0CQkJKnRfa3IqICondF9rcicqCisJdF9rbAk8TGVmdD4JCWFycm93IGxlZnQJCQkqdF9rbCogKid0X2tsJyoKKwkJPFMtVXA+CQlzaGlmdCBhcnJvdyB1cAorCQk8Uy1Eb3duPglzaGlmdCBhcnJvdyBkb3duCisJdF8laQk8Uy1SaWdodD4Jc2hpZnQgYXJyb3cgcmlnaHQJCSp0XyVpKiAqJ3RfJWknKgorCXRfIzQJPFMtTGVmdD4Jc2hpZnQgYXJyb3cgbGVmdAkJKnRfIzQqICondF8jNCcqCisJdF9rMQk8RjE+CQlmdW5jdGlvbiBrZXkgMQkJCSp0X2sxKiAqJ3RfazEnKgorCQk8eEYxPgkJYWx0ZXJuYXRlIEYxCQkJKjx4RjE+KgorCXRfazIJPEYyPgkJZnVuY3Rpb24ga2V5IDIJCSo8RjI+KgkqdF9rMiogKid0X2syJyoKKwkJPHhGMj4JCWFsdGVybmF0ZSBGMgkJCSo8eEYyPioKKwl0X2szCTxGMz4JCWZ1bmN0aW9uIGtleSAzCQkqPEYzPioJKnRfazMqICondF9rMycqCisJCTx4RjM+CQlhbHRlcm5hdGUgRjMJCQkqPHhGMz4qCisJdF9rNAk8RjQ+CQlmdW5jdGlvbiBrZXkgNAkJKjxGND4qCSp0X2s0KiAqJ3RfazQnKgorCQk8eEY0PgkJYWx0ZXJuYXRlIEY0CQkJKjx4RjQ+KgorCXRfazUJPEY1PgkJZnVuY3Rpb24ga2V5IDUJCSo8RjU+KgkqdF9rNSogKid0X2s1JyoKKwl0X2s2CTxGNj4JCWZ1bmN0aW9uIGtleSA2CQkqPEY2PioJKnRfazYqICondF9rNicqCisJdF9rNwk8Rjc+CQlmdW5jdGlvbiBrZXkgNwkJKjxGNz4qCSp0X2s3KiAqJ3RfazcnKgorCXRfazgJPEY4PgkJZnVuY3Rpb24ga2V5IDgJCSo8Rjg+KgkqdF9rOCogKid0X2s4JyoKKwl0X2s5CTxGOT4JCWZ1bmN0aW9uIGtleSA5CQkqPEY5PioJKnRfazkqICondF9rOScqCisJdF9rOwk8RjEwPgkJZnVuY3Rpb24ga2V5IDEwCQkqPEYxMD4qCSp0X2s7KiAqJ3RfazsnKgorCXRfRjEJPEYxMT4JCWZ1bmN0aW9uIGtleSAxMQkJKjxGMTE+KiAqdF9GMSogKid0X0YxJyoKKwl0X0YyCTxGMTI+CQlmdW5jdGlvbiBrZXkgMTIJCSo8RjEyPioJKnRfRjIqICondF9GMicqCisJdF9GMwk8RjEzPgkJZnVuY3Rpb24ga2V5IDEzCQkqPEYxMz4qCSp0X0YzKiAqJ3RfRjMnKgorCXRfRjQJPEYxND4JCWZ1bmN0aW9uIGtleSAxNAkJKjxGMTQ+KgkqdF9GNCogKid0X0Y0JyoKKwl0X0Y1CTxGMTU+CQlmdW5jdGlvbiBrZXkgMTUJCSo8RjE1PioJKnRfRjUqICondF9GNScqCisJdF9GNgk8RjE2PgkJZnVuY3Rpb24ga2V5IDE2CQkqPEYxNj4qCSp0X0Y2KiAqJ3RfRjYnKgorCXRfRjcJPEYxNz4JCWZ1bmN0aW9uIGtleSAxNwkJKjxGMTc+KgkqdF9GNyogKid0X0Y3JyoKKwl0X0Y4CTxGMTg+CQlmdW5jdGlvbiBrZXkgMTgJCSo8RjE4PioJKnRfRjgqICondF9GOCcqCisJdF9GOQk8RjE5PgkJZnVuY3Rpb24ga2V5IDE5CQkqPEYxOT4qCSp0X0Y5KiAqJ3RfRjknKgorCQk8Uy1GMT4JCXNoaWZ0ZWQgZnVuY3Rpb24ga2V5IDEKKwkJPFMteEYxPgkJYWx0ZXJuYXRlIDxTLUYxPgkJKjxTLXhGMT4qCisJCTxTLUYyPgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgMgkJKjxTLUYyPioKKwkJPFMteEYyPgkJYWx0ZXJuYXRlIDxTLUYyPgkJKjxTLXhGMj4qCisJCTxTLUYzPgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgMwkJKjxTLUYzPioKKwkJPFMteEYzPgkJYWx0ZXJuYXRlIDxTLUYzPgkJKjxTLXhGMz4qCisJCTxTLUY0PgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgNAkJKjxTLUY0PioKKwkJPFMteEY0PgkJYWx0ZXJuYXRlIDxTLUY0PgkJKjxTLXhGND4qCisJCTxTLUY1PgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgNQkJKjxTLUY1PioKKwkJPFMtRjY+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA2CQkqPFMtRjY+KgorCQk8Uy1GNz4JCXNoaWZ0ZWQgZnVuY3Rpb24ga2V5IDcJCSo8Uy1GNz4qCisJCTxTLUY4PgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgOAkJKjxTLUY4PioKKwkJPFMtRjk+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA5CQkqPFMtRjk+KgorCQk8Uy1GMTA+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSAxMAkJKjxTLUYxMD4qCisJCTxTLUYxMT4JCXNoaWZ0ZWQgZnVuY3Rpb24ga2V5IDExCQkqPFMtRjExPioKKwkJPFMtRjEyPgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgMTIJCSo8Uy1GMTI+KgorCXRfJTEJPEhlbHA+CQloZWxwIGtleQkJCSp0XyUxKiAqJ3RfJTEnKgorCXRfJjgJPFVuZG8+CQl1bmRvIGtleQkJCSp0XyY4KiAqJ3RfJjgnKgorCXRfa0kJPEluc2VydD4JaW5zZXJ0IGtleQkJCSp0X2tJKiAqJ3Rfa0knKgorCXRfa0QJPERlbD4JCWRlbGV0ZSBrZXkJCQkqdF9rRCogKid0X2tEJyoKKwl0X2tiCTxCUz4JCWJhY2tzcGFjZSBrZXkJCQkqdF9rYiogKid0X2tiJyoKKwl0X2tCCTxTLVRhYj4JCWJhY2stdGFiIChzaGlmdC10YWIpICAqPFMtVGFiPiogKnRfa0IqICondF9rQicqCisJdF9raAk8SG9tZT4JCWhvbWUga2V5CQkJKnRfa2gqICondF9raCcqCisJdF8jMgk8Uy1Ib21lPglzaGlmdGVkIGhvbWUga2V5ICAgICAqPFMtSG9tZT4qICp0XyMyKiAqJ3RfIzInKgorCQk8eEhvbWU+CQlhbHRlcm5hdGUgaG9tZSBrZXkJCSo8eEhvbWU+KgorCXRfQDcJPEVuZD4JCWVuZCBrZXkJCQkJKnRfQDcqICondF9ANycqCisJdF8qNwk8Uy1FbmQ+CQlzaGlmdGVkIGVuZCBrZXkJKjxTLUVuZD4qICp0X3N0YXI3KiAqJ3Rfc3RhcjcnKgorCQk8eEVuZD4JCWFsdGVybmF0ZSBlbmQga2V5CQkqPHhFbmQ+KgorCXRfa1AJPFBhZ2VVcD4JcGFnZS11cCBrZXkJCQkqdF9rUCogKid0X2tQJyoKKwl0X2tOCTxQYWdlRG93bj4JcGFnZS1kb3duIGtleQkJCSp0X2tOKiAqJ3Rfa04nKgorCXRfSzEJPGtIb21lPgkJa2V5cGFkIGhvbWUga2V5CQkJKnRfSzEqICondF9LMScqCisJdF9LNAk8a0VuZD4JCWtleXBhZCBlbmQga2V5CQkJKnRfSzQqICondF9LNCcqCisJdF9LMwk8a1BhZ2VVcD4Ja2V5cGFkIHBhZ2UtdXAga2V5CQkqdF9LMyogKid0X0szJyoKKwl0X0s1CTxrUGFnZURvd24+CWtleXBhZCBwYWdlLWRvd24ga2V5CQkqdF9LNSogKid0X0s1JyoKKwl0X0s2CTxrUGx1cz4JCWtleXBhZCBwbHVzIGtleQkgICAgICAqPGtQbHVzPioJKnRfSzYqICondF9LNicqCisJdF9LNwk8a01pbnVzPglrZXlwYWQgbWludXMga2V5ICAgICAqPGtNaW51cz4qCSp0X0s3KiAqJ3RfSzcnKgorCXRfSzgJPGtEaXZpZGU+CWtleXBhZCBkaXZpZGUJICAgICo8a0RpdmlkZT4qICp0X0s4KiAqJ3RfSzgnKgorCXRfSzkJPGtNdWx0aXBseT4Ja2V5cGFkIG11bHRpcGx5ICAgKjxrTXVsdGlwbHk+KiAqdF9LOSogKid0X0s5JyoKKwl0X0tBCTxrRW50ZXI+CWtleXBhZCBlbnRlciBrZXkgICAgICo8a0VudGVyPioJKnRfS0EqICondF9LQScqCisJdF9LQgk8a1BvaW50PglrZXlwYWQgZGVjaW1hbCBwb2ludCAqPGtQb2ludD4qCSp0X0tCKiAqJ3RfS0InKgorCXRfS0MJPGswPgkJa2V5cGFkIDAJCSAqPGswPioJKnRfS0MqICondF9LQycqCisJdF9LRAk8azE+CQlrZXlwYWQgMQkJICo8azE+KgkqdF9LRCogKid0X0tEJyoKKwl0X0tFCTxrMj4JCWtleXBhZCAyCQkgKjxrMj4qCSp0X0tFKiAqJ3RfS0UnKgorCXRfS0YJPGszPgkJa2V5cGFkIDMJCSAqPGszPioJKnRfS0YqICondF9LRicqCisJdF9LRwk8azQ+CQlrZXlwYWQgNAkJICo8azQ+KgkqdF9LRyogKid0X0tHJyoKKwl0X0tICTxrNT4JCWtleXBhZCA1CQkgKjxrNT4qCSp0X0tIKiAqJ3RfS0gnKgorCXRfS0kJPGs2PgkJa2V5cGFkIDYJCSAqPGs2PioJKnRfS0kqICondF9LSScqCisJdF9LSgk8azc+CQlrZXlwYWQgNwkJICo8azc+KgkqdF9LSiogKid0X0tKJyoKKwl0X0tLCTxrOD4JCWtleXBhZCA4CQkgKjxrOD4qCSp0X0tLKiAqJ3RfS0snKgorCXRfS0wJPGs5PgkJa2V5cGFkIDkJCSAqPGs5PioJKnRfS0wqICondF9LTCcqCisJCTxNb3VzZT4JCWxlYWRlciBvZiBtb3VzZSBjb2RlCQkqPE1vdXNlPioKKworTm90ZSBhYm91dCB0X3NvIGFuZCB0X21yOiBXaGVuIHRoZSB0ZXJtY2FwIGVudHJ5ICJzbyIgaXMgbm90IHByZXNlbnQgdGhlCitlbnRyeSBmb3IgIm1yIiBpcyB1c2VkLiAgQW5kIHZpY2UgdmVyc2EuICBUaGUgc2FtZSBpcyBkb25lIGZvciAic2UiIGFuZCAibWUiLgorSWYgeW91ciB0ZXJtaW5hbCBzdXBwb3J0cyBib3RoIGludmVyc2lvbiBhbmQgc3RhbmRvdXQgbW9kZSwgeW91IGNhbiBzZWUgdHdvCitkaWZmZXJlbnQgbW9kZXMuICBJZiB5b3VyIHRlcm1pbmFsIHN1cHBvcnRzIG9ubHkgb25lIG9mIHRoZSBtb2RlcywgYm90aCB3aWxsCitsb29rIHRoZSBzYW1lLgorCitUaGUga2V5cGFkIGtleXMsIHdoZW4gdGhleSBhcmUgbm90IG1hcHBlZCwgYmVoYXZlIGxpa2UgdGhlIGVxdWl2YWxlbnQgbm9ybWFsCitrZXkuCisJCQkJCQkJKnh0ZXJtLWNvZGVzKgorVGhlcmUgaXMgYSBzcGVjaWFsIHRyaWNrIHRvIG9idGFpbiB0aGUga2V5IGNvZGVzIHdoaWNoIGN1cnJlbnRseSBvbmx5IHdvcmtzCitmb3IgeHRlcm0uICBXaGVuIHx0X1JWfCBpcyBkZWZpbmVkIGFuZCBhIHJlc3BvbnNlIGlzIHJlY2VpdmVkIHdoaWNoIGluZGljYXRlcworYW4geHRlcm0gd2l0aCBwYXRjaGxldmVsIDE0MSBvciBoaWdoZXIsIFZpbSB1c2VzIHNwZWNpYWwgZXNjYXBlIHNlcXVlbmNlcyB0bworcmVxdWVzdCB0aGUga2V5IGNvZGVzIGRpcmVjdGx5IGZyb20gdGhlIHh0ZXJtLiAgVGhlIHJlc3BvbnNlcyBhcmUgdXNlZCB0bworYWRqdXN0IHRoZSB2YXJpb3VzIHRfIGNvZGVzLiAgVGhpcyBhdm9pZHMgdGhlIHByb2JsZW0gdGhhdCB0aGUgeHRlcm0gY2FuCitwcm9kdWNlIGRpZmZlcmVudCBjb2RlcywgZGVwZW5kaW5nIG9uIHRoZSBtb2RlIGl0IGlzIGluICg4LWJpdCwgVlQxMDIsCitWVDIyMCwgZXRjLikuICBUaGUgcmVzdWx0IGlzIHRoYXQgY29kZXMgbGlrZSA8eEYxPiBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KK05vdGU6IFRoaXMgaXMgb25seSBkb25lIG9uIHN0YXJ0dXAuICBJZiB0aGUgeHRlcm0gb3B0aW9ucyBhcmUgY2hhbmdlZCBhZnRlcgorVmltIGhhcyBzdGFydGVkLCB0aGUgZXNjYXBlIHNlcXVlbmNlcyBtYXkgbm90IGJlIHJlY29nbml6ZWQgYW55IG1vcmUuCisKKwkJCQkJCQkqdGVybWNhcC1jb2xvcnMqCitOb3RlIGFib3V0IGNvbG9yczogVGhlICd0X0NvJyBvcHRpb24gdGVsbHMgVmltIHRoZSBudW1iZXIgb2YgY29sb3JzIGF2YWlsYWJsZS4KK1doZW4gaXQgaXMgbm9uLXplcm8sIHRoZSAndF9BQicgYW5kICd0X0FGJyBvcHRpb25zIGFyZSB1c2VkIHRvIHNldCB0aGUgY29sb3IuCitJZiBvbmUgb2YgdGhlc2UgaXMgbm90IGF2YWlsYWJsZSwgJ3RfU2InIGFuZCAndF9TZicgYXJlIHVzZWQuICAndF9tZScgaXMgdXNlZAordG8gcmVzZXQgdG8gdGhlIGRlZmF1bHQgY29sb3JzLgorCisJCQkJCQkJKnRlcm1jYXAtdGl0bGUqCitUaGUgJ3RfdHMnIGFuZCAndF9mcycgb3B0aW9ucyBhcmUgdXNlZCB0byBzZXQgdGhlIHdpbmRvdyB0aXRsZSBpZiB0aGUgdGVybWluYWwKK2FsbG93cyB0aXRsZSBzZXR0aW5nIHZpYSBzZW5kaW5nIHN0cmluZ3MuICBUaGV5IGFyZSBzZW50IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCit0aXRsZSBzdHJpbmcsIHJlc3BlY3RpdmVseS4gIFNpbWlsYXIgJ3RfSVMnIGFuZCAndF9JRScgIGFyZSB1c2VkIHRvIHNldCB0aGUKK2ljb24gdGV4dC4gIFRoZXNlIGFyZSBWaW0taW50ZXJuYWwgZXh0ZW5zaW9ucyBvZiB0aGUgVW5peCB0ZXJtY2FwLCBzbyB0aGV5CitjYW5ub3QgYmUgb2J0YWluZWQgZnJvbSBhbiBleHRlcm5hbCB0ZXJtY2FwLiAgSG93ZXZlciwgdGhlIGJ1aWx0aW4gdGVybWNhcAorY29udGFpbnMgc3VpdGFibGUgZW50cmllcyBmb3IgeHRlcm0gYW5kIGlyaXMtYW5zaSwgc28geW91IGRvbid0IG5lZWQgdG8gc2V0Cit0aGVtIGhlcmUuCisJCQkJCQkJKmhwdGVybSoKK0lmIGludmVyc2lvbiBvciBvdGhlciBoaWdobGlnaHRpbmcgZG9lcyBub3Qgd29yayBjb3JyZWN0bHksIHRyeSBzZXR0aW5nIHRoZQorJ3RfeHMnIG9wdGlvbiB0byBhIG5vbi1lbXB0eSBzdHJpbmcuICBUaGlzIG1ha2VzIHRoZSAndF9jZScgY29kZSBiZSB1c2VkIHRvCityZW1vdmUgaGlnaGxpZ2h0aW5nIGZyb20gYSBsaW5lLiAgVGhpcyBpcyByZXF1aXJlZCBmb3IgImhwdGVybSIuICBTZXR0aW5nIHRoZQorJ3dlaXJkaW52ZXJ0JyBvcHRpb24gaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBtYWtpbmcgJ3RfeHMnIG5vbi1lbXB0eSwgYW5kIHZpY2UKK3ZlcnNhLgorCisJCQkJCQkJKnNjcm9sbC1yZWdpb24qCitTb21lIHRlcm1jYXBzIGRvIG5vdCBpbmNsdWRlIGFuIGVudHJ5IGZvciAnY3MnIChzY3JvbGwgcmVnaW9uKSwgYWx0aG91Z2ggdGhlCit0ZXJtaW5hbCBkb2VzIHN1cHBvcnQgaXQuICBGb3IgZXhhbXBsZTogeHRlcm0gb24gYSBTdW4uICBZb3UgY2FuIHVzZSB0aGUKK2J1aWx0aW5feHRlcm0gb3IgZGVmaW5lIHRfY3MgeW91cnNlbGYuICBGb3IgZXhhbXBsZTogPgorCTpzZXQgdF9jcz1eVl5bWyVpJWQ7JWRyCitXaGVyZSBeViBpcyBDVFJMLVYgYW5kIF5bIGlzIDxFc2M+LgorCitUaGUgdmVydGljYWwgc2Nyb2xsIHJlZ2lvbiB0X0NWIGlzIG5vdCBhIHN0YW5kYXJkIHRlcm1jYXAgY29kZS4gIFZpbSB1c2VzIGl0CitpbnRlcm5hbGx5IGluIHRoZSBHVUkuICBCdXQgaXQgY2FuIGFsc28gYmUgZGVmaW5lZCBmb3IgYSB0ZXJtaW5hbCwgaWYgeW91IGNhbgorZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBpdC4gIFRoZSB0d28gYXJndW1lbnRzIGFyZSB0aGUgbGVmdCBhbmQgcmlnaHQgY29sdW1uIG9mCit0aGUgcmVnaW9uIHdoaWNoIHRvIHJlc3RyaWN0IHRoZSBzY3JvbGxpbmcgdG8uICBKdXN0IGxpa2UgdF9jcyBkZWZpbmVzIHRoZSB0b3AKK2FuZCBib3R0b20gbGluZXMuICBEZWZpbmluZyB0X0NWIHdpbGwgbWFrZSBzY3JvbGxpbmcgaW4gdmVydGljYWxseSBzcGxpdAord2luZG93cyBhIGxvdCBmYXN0ZXIuICBEb24ndCBzZXQgdF9DViB3aGVuIHRfZGEgb3IgdF9kYiBpcyBzZXQgKHRleHQgaXNuJ3QKK2NsZWFyZWQgd2hlbiBzY3JvbGxpbmcpLgorCitVbmZvcnR1bmF0ZWx5IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZWR1Y2UgZnJvbSB0aGUgdGVybWNhcCBob3cgY3Vyc29yCitwb3NpdGlvbmluZyBzaG91bGQgYmUgZG9uZSB3aGVuIHVzaW5nIGEgc2Nyb2xsaW5nIHJlZ2lvbjogUmVsYXRpdmUgdG8gdGhlCitiZWdpbm5pbmcgb2YgdGhlIHNjcmVlbiBvciByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY3JvbGxpbmcgcmVnaW9uLgorTW9zdCB0ZXJtaW5hbHMgdXNlIHRoZSBmaXJzdCBtZXRob2QuICBBIGtub3duIGV4Y2VwdGlvbiBpcyB0aGUgTVMtRE9TIGNvbnNvbGUKKyhwY3Rlcm0pLiAgVGhlICd0X0NTJyBvcHRpb24gc2hvdWxkIGJlIHNldCB0byBhbnkgc3RyaW5nIHdoZW4gY3Vyc29yCitwb3NpdGlvbmluZyBpcyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNjcm9sbGluZyByZWdpb24uICBJdCBzaG91bGQgYmUKK3NldCB0byBhbiBlbXB0eSBzdHJpbmcgb3RoZXJ3aXNlLiAgSXQgZGVmYXVsdHMgdG8gInllcyIgd2hlbiAndGVybScgaXMKKyJwY3Rlcm0iLgorCitOb3RlIGZvciB4dGVybSB1c2VyczogVGhlIHNoaWZ0ZWQgY3Vyc29yIGtleXMgbm9ybWFsbHkgZG9uJ3Qgd29yay4gIFlvdSBjYW4KKwltYWtlIHRoZW0gd29yayB3aXRoIHRoZSB4bW9kbWFwIGNvbW1hbmQgYW5kIHNvbWUgbWFwcGluZ3MgaW4gVmltLgorCisJR2l2ZSB0aGVzZSBjb21tYW5kcyBpbiB0aGUgeHRlcm06CisJCXhtb2RtYXAgLWUgImtleXN5bSBVcCA9IFVwIEYxMyIKKwkJeG1vZG1hcCAtZSAia2V5c3ltIERvd24gPSBEb3duIEYxNiIKKwkJeG1vZG1hcCAtZSAia2V5c3ltIExlZnQgPSBMZWZ0IEYxOCIKKwkJeG1vZG1hcCAtZSAia2V5c3ltIFJpZ2h0ID0gUmlnaHQgRjE5IgorCisJQW5kIHVzZSB0aGVzZSBtYXBwaW5ncyBpbiBWaW06CisJCTptYXAgPHRfRjM+IDxTLVVwPgorCQk6bWFwISA8dF9GMz4gPFMtVXA+CisJCTptYXAgPHRfRjY+IDxTLURvd24+CisJCTptYXAhIDx0X0Y2PiA8Uy1Eb3duPgorCQk6bWFwIDx0X0Y4PiA8Uy1MZWZ0PgorCQk6bWFwISA8dF9GOD4gPFMtTGVmdD4KKwkJOm1hcCA8dF9GOT4gPFMtUmlnaHQ+CisJCTptYXAhIDx0X0Y5PiA8Uy1SaWdodD4KKworSW5zdGVhZCBvZiwgc2F5LCA8Uy1VcD4geW91IGNhbiB1c2UgYW55IG90aGVyIGNvbW1hbmQgdGhhdCB5b3Ugd2FudCB0byB1c2UgdGhlCitzaGlmdC1jdXJzb3ItdXAga2V5IGZvci4gIChOb3RlOiBUbyBoZWxwIHBlb3BsZSB0aGF0IGhhdmUgYSBTdW4ga2V5Ym9hcmQgd2l0aAorbGVmdCBzaWRlIGtleXMgRjE0IGlzIG5vdCB1c2VkIGJlY2F1c2UgaXQgaXMgY29uZnVzZWQgd2l0aCB0aGUgdW5kbyBrZXk7IEYxNQoraXMgbm90IHVzZWQsIGJlY2F1c2UgaXQgZG9lcyBhIHdpbmRvdy10by1mcm9udDsgRjE3IGlzIG5vdCB1c2VkLCBiZWNhdXNlIGl0CitjbG9zZXMgdGhlIHdpbmRvdy4gIE9uIG90aGVyIHN5c3RlbXMgeW91IGNhbiBwcm9iYWJseSB1c2UgdGhlbS4pCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gV2luZG93IHNpemUJCQkJCQkqd2luZG93LXNpemUqCisKK1tUaGlzIGlzIGFib3V0IHRoZSBzaXplIG9mIHRoZSB3aG9sZSB3aW5kb3cgVmltIGlzIHVzaW5nLCBub3QgYSB3aW5kb3cgdGhhdCBpcworY3JlYXRlZCB3aXRoIHRoZSAiOnNwbGl0IiBjb21tYW5kLl0KKworSWYgeW91IGFyZSBydW5uaW5nIFZpbSBvbiBhbiBBbWlnYSBhbmQgdGhlIHRlcm1pbmFsIG5hbWUgaXMgImFtaWdhIiBvcgorImJ1aWx0aW5fYW1pZ2EiLCB0aGUgYW1pZ2Etc3BlY2lmaWMgd2luZG93IHJlc2l6aW5nIHdpbGwgYmUgZW5hYmxlZC4gIE9uIFVuaXgKK3N5c3RlbXMgdGhyZWUgbWV0aG9kcyBhcmUgdHJpZWQgdG8gZ2V0IHRoZSB3aW5kb3cgc2l6ZToKKworLSBhbiBpb2N0bCBjYWxsIChUSU9DR1NJWkUgb3IgVElPQ0dXSU5TWiwgZGVwZW5kcyBvbiB5b3VyIHN5c3RlbSkKKy0gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAiTElORVMiIGFuZCAiQ09MVU1OUyIKKy0gZnJvbSB0aGUgdGVybWNhcCBlbnRyaWVzICJsaSIgYW5kICJjbyIKKworSWYgZXZlcnl0aGluZyBmYWlscyBhIGRlZmF1bHQgc2l6ZSBvZiAyNCBsaW5lcyBhbmQgODAgY29sdW1ucyBpcyBhc3N1bWVkLiAgSWYKK2Egd2luZG93LXJlc2l6ZSBzaWduYWwgaXMgcmVjZWl2ZWQgdGhlIHNpemUgd2lsbCBiZSBzZXQgYWdhaW4uICBJZiB0aGUgd2luZG93CitzaXplIGlzIHdyb25nIHlvdSBjYW4gdXNlIHRoZSAnbGluZXMnIGFuZCAnY29sdW1ucycgb3B0aW9ucyB0byBzZXQgdGhlCitjb3JyZWN0IHZhbHVlcy4KKworT25lIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBzY3JlZW4gc2l6ZToKKworCQkJCQkJKjptb2QqICo6bW9kZSogKkUzNTkqICpFMzYyKgorOm1vZFtlXSBbbW9kZV0KKworV2l0aG91dCBhcmd1bWVudCB0aGlzIG9ubHkgZGV0ZWN0cyB0aGUgc2NyZWVuIHNpemUgYW5kIHJlZHJhd3MgdGhlIHNjcmVlbi4KK1dpdGggTVMtRE9TIGl0IGlzIHBvc3NpYmxlIHRvIHN3aXRjaCBzY3JlZW4gbW9kZS4gIFttb2RlXSBjYW4gYmUgb25lIG9mIHRoZXNlCit2YWx1ZXM6CisJImJ3NDAiCQk0MCBjb2x1bW5zIGJsYWNrJndoaXRlCisJImM0MCIJCTQwIGNvbHVtbnMgY29sb3IKKwkiYnc4MCIJCTgwIGNvbHVtbnMgYmxhY2smd2hpdGUKKwkiYzgwIgkJODAgY29sdW1ucyBjb2xvciAobW9zdCBwZW9wbGUgdXNlIHRoaXMpCisJIm1vbm8iCQk4MCBjb2x1bW5zIG1vbm9jaHJvbWUKKwkiYzQzNTAiCQk0MyBvciA1MCBsaW5lcyBFR0EvVkdBIG1vZGUKKwludW1iZXIJCW1vZGUgbnVtYmVyIHRvIHVzZSwgZGVwZW5kcyBvbiB5b3VyIHZpZGVvIGNhcmQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBTbG93IGFuZCBmYXN0IHRlcm1pbmFscwkJCSpzbG93LWZhc3QtdGVybWluYWwqCisJCQkJCQkqc2xvdy10ZXJtaW5hbCoKKworSWYgeW91IGhhdmUgYSBmYXN0IHRlcm1pbmFsIHlvdSBtYXkgbGlrZSB0byBzZXQgdGhlICdydWxlcicgb3B0aW9uLiAgVGhlCitjdXJzb3IgcG9zaXRpb24gaXMgc2hvd24gaW4gdGhlIHN0YXR1cyBsaW5lLiAgSWYgeW91IGFyZSB1c2luZyBob3Jpem9udGFsCitzY3JvbGxpbmcgKCd3cmFwJyBvcHRpb24gb2ZmKSBjb25zaWRlciBzZXR0aW5nICdzaWRlc2Nyb2xsJyB0byBhIHNtYWxsCitudW1iZXIuCisKK0lmIHlvdSBoYXZlIGEgc2xvdyB0ZXJtaW5hbCB5b3UgbWF5IHdhbnQgdG8gcmVzZXQgdGhlICdzaG93Y21kJyBvcHRpb24uCitUaGUgY29tbWFuZCBjaGFyYWN0ZXJzIHdpbGwgbm90IGJlIHNob3duIGluIHRoZSBzdGF0dXMgbGluZS4gIElmIHRoZSB0ZXJtaW5hbAorc2Nyb2xscyB2ZXJ5IHNsb3dseSwgc2V0IHRoZSAnc2Nyb2xsanVtcCcgdG8gNSBvciBzby4gIElmIHRoZSBjdXJzb3IgaXMgbW92ZWQKK29mZiB0aGUgc2NyZWVuIChlLmcuLCB3aXRoICJqIikgVmltIHdpbGwgc2Nyb2xsIDUgbGluZXMgYXQgYSB0aW1lLiAgQW5vdGhlcgorcG9zc2liaWxpdHkgaXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBWaW0gdXNlcyB3aXRoIHRoZSBjb21tYW5kCisientoZWlnaHR9PENSPiIuCisKK0lmIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlIHRlcm1pbmFsIGFyZSBhcnJpdmluZyB3aXRoIG1vcmUgdGhhbiAxIHNlY29uZAorYmV0d2VlbiB0aGVtIHlvdSBtaWdodCB3YW50IHRvIHNldCB0aGUgJ3RpbWVvdXQnIGFuZC9vciAndHRpbWVvdXQnIG9wdGlvbi4KK1NlZSB0aGUgIk9wdGlvbnMiIGNoYXB0ZXIgfG9wdGlvbnN8LgorCitJZiB5b3VyIHRlcm1pbmFsIGRvZXMgbm90IHN1cHBvcnQgYSBzY3JvbGxpbmcgcmVnaW9uLCBidXQgaXQgZG9lcyBzdXBwb3J0CitpbnNlcnQvZGVsZXRlIGxpbmUgY29tbWFuZHMsIHNjcm9sbGluZyB3aXRoIG11bHRpcGxlIHdpbmRvd3MgbWF5IG1ha2UgdGhlCitsaW5lcyBqdW1wIHVwIGFuZCBkb3duLiAgSWYgeW91IGRvbid0IHdhbnQgdGhpcyBzZXQgdGhlICd0dHlmYXN0JyBvcHRpb24uCitUaGlzIHdpbGwgcmVkcmF3IHRoZSB3aW5kb3cgaW5zdGVhZCBvZiBzY3JvbGwgaXQuCisKK0lmIHlvdXIgdGVybWluYWwgc2Nyb2xscyB2ZXJ5IHNsb3dseSwgYnV0IHJlZHJhd2luZyBpcyBub3Qgc2xvdywgc2V0IHRoZQorJ3R0eXNjcm9sbCcgb3B0aW9uIHRvIGEgc21hbGwgbnVtYmVyLCBlLmcuLCAzLiAgVGhpcyB3aWxsIG1ha2UgVmltIHJlZHJhdyB0aGUKK3NjcmVlbiBpbnN0ZWFkIG9mIHNjcm9sbGluZywgd2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuIDMgbGluZXMgdG8gYmUgc2Nyb2xsZWQuCisKK0lmIHlvdSBhcmUgdXNpbmcgYSBjb2xvciB0ZXJtaW5hbCB0aGF0IGlzIHNsb3csIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKwloaSBOb25UZXh0IGN0ZXJtPU5PTkUgY3Rlcm1mZz1OT05FCitUaGlzIGF2b2lkcyB0aGF0IHNwYWNlcyBhcmUgc2VudCB3aGVuIHRoZXkgaGF2ZSBkaWZmZXJlbnQgYXR0cmlidXRlcy4gIE9uIG1vc3QKK3Rlcm1pbmFscyB5b3UgY2FuJ3Qgc2VlIHRoaXMgYW55d2F5LgorCitJZiB5b3UgYXJlIHVzaW5nIFZpbSBvdmVyIGEgc2xvdyBzZXJpYWwgbGluZSwgeW91IG1pZ2h0IHdhbnQgdG8gdHJ5IHJ1bm5pbmcKK1ZpbSBpbnNpZGUgdGhlICJzY3JlZW4iIHByb2dyYW0uICBTY3JlZW4gd2lsbCBvcHRpbWl6ZSB0aGUgdGVybWluYWwgSS9PIHF1aXRlCithIGJpdC4KKworSWYgeW91IGFyZSB0ZXN0aW5nIHRlcm1jYXAgb3B0aW9ucywgYnV0IHlvdSBjYW5ub3Qgc2VlIHdoYXQgaXMgaGFwcGVuaW5nLAoreW91IG1pZ2h0IHdhbnQgdG8gc2V0IHRoZSAnd3JpdGVkZWxheScgb3B0aW9uLiAgV2hlbiBub24temVybywgb25lIGNoYXJhY3RlcgoraXMgc2VudCB0byB0aGUgdGVybWluYWwgYXQgYSB0aW1lIChkb2VzIG5vdCB3b3JrIGZvciBNUy1ET1MpLiAgVGhpcyBtYWtlcyB0aGUKK3NjcmVlbiB1cGRhdGluZyBhIGxvdCBzbG93ZXIsIG1ha2luZyBpdCBwb3NzaWJsZSB0byBzZWUgd2hhdCBpcyBoYXBwZW5pbmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gVXNpbmcgdGhlIG1vdXNlCQkJCQkqbW91c2UtdXNpbmcqCisKK1RoaXMgc2VjdGlvbiBpcyBhYm91dCB1c2luZyB0aGUgbW91c2Ugb24gYSB0ZXJtaW5hbCBvciBhIHRlcm1pbmFsIHdpbmRvdy4gIEhvdwordG8gdXNlIHRoZSBtb3VzZSBpbiBhIEdVSSB3aW5kb3cgaXMgZXhwbGFpbmVkIGluIHxndWktbW91c2V8LiAgRm9yIHNjcm9sbGluZword2l0aCBhIG1vdXNlIHdoZWVsIHNlZSB8c2Nyb2xsLW1vdXNlLXdoZWVsfC4KKworRG9uJ3QgZm9yZ2V0IHRvIGVuYWJsZSB0aGUgbW91c2Ugd2l0aCB0aGlzIGNvbW1hbmRzOiA+CisJOnNldCBtb3VzZT1hCitPdGhlcndpc2UgVmltIHdvbid0IHJlY29nbml6ZSB0aGUgbW91c2UgaW4gYWxsIG1vZGVzIChTZWUgJ21vdXNlJykuCisKK0N1cnJlbnRseSB0aGUgbW91c2UgaXMgc3VwcG9ydGVkIGZvciBVbml4IGluIGFuIHh0ZXJtIHdpbmRvdywgaW4gYSBMaW51eAorY29uc29sZSAod2l0aCBHUE0gfGdwbS1tb3VzZXwpLCBmb3IgTVMtRE9TIGFuZCBpbiBhIFdpbmRvd3MgY29uc29sZS4KK01vdXNlIGNsaWNrcyBjYW4gYmUgdXNlZCB0byBwb3NpdGlvbiB0aGUgY3Vyc29yLCBzZWxlY3QgYW4gYXJlYSBhbmQgcGFzdGUuCisKK1RoZXNlIGNoYXJhY3RlcnMgaW4gdGhlICdtb3VzZScgb3B0aW9uIHRlbGwgaW4gd2hpY2ggc2l0dWF0aW9ucyB0aGUgbW91c2Ugd2lsbAorYmUgdXNlZCBieSBWaW06CisJCW4JTm9ybWFsIG1vZGUKKwkJdglWaXN1YWwgbW9kZQorCQlpCUluc2VydCBtb2RlCisJCWMJQ29tbWFuZC1saW5lIG1vZGUKKwkJaAlhbGwgcHJldmlvdXMgbW9kZXMgd2hlbiBpbiBhIGhlbHAgZmlsZQorCQlhCWFsbCBwcmV2aW91cyBtb2RlcworCQlyCWZvciB8aGl0LWVudGVyfCBwcm9tcHQKKwkJQQlhdXRvLXNlbGVjdCBpbiBWaXN1YWwgbW9kZQorCitUaGUgZGVmYXVsdCBmb3IgJ21vdXNlJyBpcyBlbXB0eSwgdGhlIG1vdXNlIGlzIG5vdCB1c2VkLiAgTm9ybWFsbHkgeW91IHdvdWxkCitkbzogPgorCTpzZXQgbW91c2U9YQordG8gc3RhcnQgdXNpbmcgdGhlIG1vdXNlICh0aGlzIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyAnbW91c2UnIHRvICJudmljaCIpLgorSWYgeW91IG9ubHkgd2FudCB0byB1c2UgdGhlIG1vdXNlIGluIGEgZmV3IG1vZGVzIG9yIGFsc28gd2FudCB0byB1c2UgaXQgZm9yCit0aGUgdHdvIHF1ZXN0aW9ucyB5b3Ugd2lsbCBoYXZlIHRvIGNvbmNhdGVuYXRlIHRoZSBsZXR0ZXJzIGZvciB0aG9zZSBtb2Rlcy4KK0ZvciBleGFtcGxlOiA+CisJOnNldCBtb3VzZT1udgorV2lsbCBtYWtlIHRoZSBtb3VzZSB3b3JrIGluIE5vcm1hbCBtb2RlIGFuZCBWaXN1YWwgbW9kZS4gPgorCTpzZXQgbW91c2U9aAorV2lsbCBtYWtlIHRoZSBtb3VzZSB3b3JrIGluIGhlbHAgZmlsZXMgb25seSAoc28geW91IGNhbiB1c2UgImc8TGVmdE1vdXNlPiIgdG8KK2p1bXAgdG8gdGFncykuCisKK1doZXRoZXIgdGhlIHNlbGVjdGlvbiB0aGF0IGlzIHN0YXJ0ZWQgd2l0aCB0aGUgbW91c2UgaXMgaW4gVmlzdWFsIG1vZGUgb3IKK1NlbGVjdCBtb2RlIGRlcGVuZHMgb24gd2hldGhlciAibW91c2UiIGlzIGluY2x1ZGVkIGluIHRoZSAnc2VsZWN0bW9kZScKK29wdGlvbi4KKworSW4gYW4geHRlcm0sIHdpdGggdGhlIGN1cnJlbnRseSBhY3RpdmUgbW9kZSBpbmNsdWRlZCBpbiB0aGUgJ21vdXNlJyBvcHRpb24sCitub3JtYWwgbW91c2UgY2xpY2tzIGFyZSB1c2VkIGJ5IFZpbSwgbW91c2UgY2xpY2tzIHdpdGggdGhlIHNoaWZ0IG9yIGN0cmwga2V5CitwcmVzc2VkIGdvIHRvIHRoZSB4dGVybS4gIFdpdGggdGhlIGN1cnJlbnRseSBhY3RpdmUgbW9kZSBub3QgaW5jbHVkZWQgaW4KKydtb3VzZScgYWxsIG1vdXNlIGNsaWNrcyBnbyB0byB0aGUgeHRlcm0uCisKKwkJCQkJCQkqeHRlcm0tY2xpcGJvYXJkKgorSW4gdGhlIEF0aGVuYSBhbmQgTW90aWYgR1VJIHZlcnNpb25zLCB3aGVuIHJ1bm5pbmcgaW4gYSB0ZXJtaW5hbCBhbmQgdGhlcmUgaXMKK2FjY2VzcyB0byB0aGUgWC1zZXJ2ZXIgKERJU1BMQVkgaXMgc2V0KSwgdGhlIGNvcHkgYW5kIHBhc3RlIHdpbGwgYmVoYXZlIGxpa2UKK2luIHRoZSBHVUkuICBJZiBub3QsIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uIHdpbGwgaW5zZXJ0IHRoZSB1bm5hbWVkIHJlZ2lzdGVyLgorSW4gdGhhdCBjYXNlLCBoZXJlIGlzIGhvdyB5b3UgY29weSBhbmQgcGFzdGUgYSBwaWVjZSBvZiB0ZXh0OgorCitDb3B5L3Bhc3RlIHdpdGggdGhlIG1vdXNlIGFuZCBWaXN1YWwgbW9kZSAoJ21vdXNlJyBvcHRpb24gbXVzdCBiZSBzZXQsIHNlZQorYWJvdmUpOgorMS4gUHJlc3MgbGVmdCBtb3VzZSBidXR0b24gb24gZmlyc3QgbGV0dGVyIG9mIHRleHQsIG1vdmUgbW91c2UgcG9pbnRlciB0byBsYXN0CisgICBsZXR0ZXIgb2YgdGhlIHRleHQgYW5kIHJlbGVhc2UgdGhlIGJ1dHRvbi4gIFRoaXMgd2lsbCBzdGFydCBWaXN1YWwgbW9kZSBhbmQKKyAgIGhpZ2hsaWdodCB0aGUgc2VsZWN0ZWQgYXJlYS4KKzIuIFByZXNzICJ5IiB0byB5YW5rIHRoZSBWaXN1YWwgdGV4dCBpbiB0aGUgdW5uYW1lZCByZWdpc3Rlci4KKzMuIENsaWNrIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBhdCB0aGUgaW5zZXJ0IHBvc2l0aW9uLgorNC4gQ2xpY2sgdGhlIG1pZGRsZSBtb3VzZSBidXR0b24uCisKK1Nob3J0Y3V0OiBJZiB0aGUgaW5zZXJ0IHBvc2l0aW9uIGlzIG9uIHRoZSBzY3JlZW4gYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUKK1Zpc3VhbCB0ZXh0LCB5b3UgY2FuIGRvIDIsIDMgYW5kIDQgYWxsIGluIG9uZTogQ2xpY2sgdGhlIG1pZGRsZSBtb3VzZSBidXR0b24KK2F0IHRoZSBpbnNlcnQgcG9zaXRpb24uCisKK05vdGU6IFdoZW4gdGhlIHwtWHwgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGlzIHVzZWQsIFZpbSB3aWxsIG5vdCBjb25uZWN0IHRvIHRoZQorWCBzZXJ2ZXIgYW5kIGNvcHkvcGFzdGUgdG8gdGhlIFggY2xpcGJvYXJkIChzZWxlY3Rpb24pIHdpbGwgbm90IHdvcmsuICBVc2UgdGhlCitzaGlmdCBrZXkgd2l0aCB0aGUgbW91c2UgYnV0dG9ucyB0byBsZXQgdGhlIHh0ZXJtIGRvIHRoZSBzZWxlY3Rpb24uCisKKwkJCQkJCQkqeHRlcm0tY29tbWFuZC1zZXJ2ZXIqCitXaGVuIHRoZSBYLXNlcnZlciBjbGlwYm9hcmQgaXMgYXZhaWxhYmxlLCB0aGUgY29tbWFuZCBzZXJ2ZXIgZGVzY3JpYmVkIGluCit8eDExLWNsaWVudHNlcnZlcnwgY2FuIGJlIGVuYWJsZWQgd2l0aCB0aGUgLS1zZXJ2ZXJuYW1lIGNvbW1hbmQgbGluZSBhcmd1bWVudC4KKworCQkJCQkJCSp4dGVybS1jb3B5LXBhc3RlKgorTk9URTogSW4gc29tZSAob2xkZXIpIHh0ZXJtcywgaXQncyBub3QgcG9zc2libGUgdG8gbW92ZSB0aGUgY3Vyc29yIHBhc3QgY29sdW1uCis5NS4gIFRoaXMgaXMgYW4geHRlcm0gcHJvYmxlbSwgbm90IFZpbSdzLiAgR2V0IGEgbmV3ZXIgeHRlcm0gfGNvbG9yLXh0ZXJtfC4KKworQ29weS9wYXN0ZSBpbiB4dGVybSB3aXRoIChjdXJyZW50IG1vZGUgTk9UIGluY2x1ZGVkIGluICdtb3VzZScpOgorMS4gUHJlc3MgbGVmdCBtb3VzZSBidXR0b24gb24gZmlyc3QgbGV0dGVyIG9mIHRleHQsIG1vdmUgbW91c2UgcG9pbnRlciB0byBsYXN0CisgICBsZXR0ZXIgb2YgdGhlIHRleHQgYW5kIHJlbGVhc2UgdGhlIGJ1dHRvbi4KKzIuIFVzZSBub3JtYWwgVmltIGNvbW1hbmRzIHRvIHB1dCB0aGUgY3Vyc29yIGF0IHRoZSBpbnNlcnQgcG9zaXRpb24uCiszLiBQcmVzcyAiYSIgdG8gc3RhcnQgSW5zZXJ0IG1vZGUuCis0LiBDbGljayB0aGUgbWlkZGxlIG1vdXNlIGJ1dHRvbi4KKzUuIFByZXNzIEVTQyB0byBlbmQgSW5zZXJ0IG1vZGUuCisoVGhlIHNhbWUgY2FuIGJlIGRvbmUgd2l0aCBhbnl0aGluZyBpbiAnbW91c2UnIGlmIHlvdSBrZWVwIHRoZSBzaGlmdCBrZXkKK3ByZXNzZWQgd2hpbGUgdXNpbmcgdGhlIG1vdXNlLikKKworTm90ZTogaWYgeW91IGxvc2UgdGhlIDh0aCBiaXQgd2hlbiBwYXN0aW5nIChzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIHRyYW5zbGF0ZWQKK2ludG8gb3RoZXIgY2hhcmFjdGVycyksIHlvdSBtYXkgaGF2ZSB0byBkbyAic3R0eSBjczggLWlzdHJpcCAtcGFyZW5iIiBpbiB5b3VyCitzaGVsbCBiZWZvcmUgc3RhcnRpbmcgVmltLgorCitUaHVzIGluIGFuIHh0ZXJtIHRoZSBzaGlmdCBhbmQgY3RybCBrZXlzIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIG1vdXNlLiAgTW91c2UKK2NvbW1hbmRzIHJlcXVpcmluZyB0aGUgQ1RSTCBtb2RpZmllciBjYW4gYmUgc2ltdWxhdGVkIGJ5IHR5cGluZyB0aGUgImciIGtleQorYmVmb3JlIHVzaW5nIHRoZSBtb3VzZToKKwkiZzxMZWZ0TW91c2U+IglpcyAiPEMtTGVmdE1vdXNlPgkoanVtcCB0byB0YWcgdW5kZXIgbW91c2UgY2xpY2spCisJImc8UmlnaHRNb3VzZT4iIGlzICI8Qy1SaWdodE1vdXNlPgkoIkNUUkwtVCIpCisKKwkJCQkJKm1vdXNlLW1vZGUtdGFibGUqICptb3VzZS1vdmVydmlldyoKK0Egc2hvcnQgb3ZlcnZpZXcgb2Ygd2hhdCB0aGUgbW91c2UgYnV0dG9ucyBkbywgd2hlbiAnbW91c2Vtb2RlbCcgaXMgImV4dGVuZCI6CisKK05vcm1hbCBNb2RlOgorZXZlbnQJICAgICAgcG9zaXRpb24JICAgc2VsZWN0aW9uCSAgY2hhbmdlICBhY3Rpb24JfgorCSAgICAgICBjdXJzb3IJCQkgIHdpbmRvdwkJfgorPExlZnRNb3VzZT4gICAgIHllcwkgICAgIGVuZAkgICAgeWVzCis8Qy1MZWZ0TW91c2U+ICAgeWVzCSAgICAgZW5kCSAgICB5ZXMJICAgIkNUUkwtXSIgKDIpCis8Uy1MZWZ0TW91c2U+ICAgeWVzCSAgbm8gY2hhbmdlCSAgICB5ZXMJICAgIioiICgyKSAgICAqPFMtTGVmdE1vdXNlPioKKzxMZWZ0RHJhZz4gICAgICB5ZXMJc3RhcnQgb3IgZXh0ZW5kICgxKSBubwkJICAgICAgKjxMZWZ0RHJhZz4qCis8TGVmdFJlbGVhc2U+ICAgeWVzCXN0YXJ0IG9yIGV4dGVuZCAoMSkgbm8KKzxNaWRkbGVNb3VzZT4gICB5ZXMJICBpZiBub3QgYWN0aXZlICAgICBubwkgICBwdXQKKzxNaWRkbGVNb3VzZT4gICB5ZXMJICBpZiBhY3RpdmUJICAgIG5vCSAgIHlhbmsgYW5kIHB1dAorPFJpZ2h0TW91c2U+ICAgIHllcwlzdGFydCBvciBleHRlbmQgICAgIHllcworPFMtUmlnaHRNb3VzZT4gIHllcwkgICBubyBjaGFuZ2UJICAgIHllcwkgICAiIyIgKDIpICAgICo8Uy1SaWdodE1vdXNlPioKKzxDLVJpZ2h0TW91c2U+ICBubwkgICBubyBjaGFuZ2UJICAgIG5vCSAgICJDVFJMLVQiCis8UmlnaHREcmFnPiAgICAgeWVzCSAgICBleHRlbmQJICAgIG5vCQkgICAgICAqPFJpZ2h0RHJhZz4qCis8UmlnaHRSZWxlYXNlPiAgeWVzCSAgICBleHRlbmQJICAgIG5vCQkgICAgICAqPFJpZ2h0UmVsZWFzZT4qCisKK0luc2VydCBvciBSZXBsYWNlIE1vZGU6CitldmVudAkgICAgICBwb3NpdGlvbgkgICBzZWxlY3Rpb24JICBjaGFuZ2UgIGFjdGlvbgl+CisJICAgICAgIGN1cnNvcgkJCSAgd2luZG93CQl+Cis8TGVmdE1vdXNlPiAgICAgeWVzICAgICAoY2Fubm90IGJlIGFjdGl2ZSkgIHllcworPEMtTGVmdE1vdXNlPiAgIHllcyAgICAgKGNhbm5vdCBiZSBhY3RpdmUpICB5ZXMJICAgIkNUUkwtT15dIiAoMikKKzxTLUxlZnRNb3VzZT4gICB5ZXMgICAgIChjYW5ub3QgYmUgYWN0aXZlKSAgeWVzCSAgICJDVFJMLU8qIiAoMikKKzxMZWZ0RHJhZz4gICAgICB5ZXMgICAgIHN0YXJ0IG9yIGV4dGVuZCAoMSkgbm8JICAgbGlrZSBDVFJMLU8gKDEpCis8TGVmdFJlbGVhc2U+ICAgeWVzICAgICBzdGFydCBvciBleHRlbmQgKDEpIG5vCSAgIGxpa2UgQ1RSTC1PICgxKQorPE1pZGRsZU1vdXNlPiAgIG5vICAgICAgKGNhbm5vdCBiZSBhY3RpdmUpICBubwkgICBwdXQgcmVnaXN0ZXIKKzxSaWdodE1vdXNlPiAgICB5ZXMgICAgIHN0YXJ0IG9yIGV4dGVuZAkgICAgeWVzCSAgIGxpa2UgQ1RSTC1PCis8Uy1SaWdodE1vdXNlPiAgeWVzICAgICAoY2Fubm90IGJlIGFjdGl2ZSkgIHllcwkgICAiQ1RSTC1PIyIgKDIpCis8Qy1SaWdodE1vdXNlPiAgbm8JKGNhbm5vdCBiZSBhY3RpdmUpICBubwkgICAiQ1RSTC1PIENUUkwtVCIKKworSW4gYSBoZWxwIHdpbmRvdzoKK2V2ZW50CSAgICAgIHBvc2l0aW9uCSAgIHNlbGVjdGlvbgkgIGNoYW5nZSAgYWN0aW9uCX4KKwkgICAgICAgY3Vyc29yCQkJICB3aW5kb3cJCX4KKzwyLUxlZnRNb3VzZT4gICB5ZXMgICAgIChjYW5ub3QgYmUgYWN0aXZlKSAgbm8JICAgIl5dIiAoanVtcCB0byBoZWxwIHRhZykKKworV2hlbiAnbW91c2Vtb2RlbCcgaXMgInBvcHVwIiwgdGhlc2UgYXJlIGRpZmZlcmVudDoKKworTm9ybWFsIE1vZGU6CitldmVudAkgICAgICBwb3NpdGlvbgkgICBzZWxlY3Rpb24JICBjaGFuZ2UgIGFjdGlvbgl+CisJICAgICAgIGN1cnNvcgkJCSAgd2luZG93CQl+Cis8Uy1MZWZ0TW91c2U+CXllcwlzdGFydCBvciBleHRlbmQgKDEpIG5vCis8UmlnaHRNb3VzZT4Jbm8JcG9wdXAgbWVudQkgICAgbm8KKworSW5zZXJ0IG9yIFJlcGxhY2UgTW9kZToKK2V2ZW50CSAgICAgIHBvc2l0aW9uCSAgIHNlbGVjdGlvbgkgIGNoYW5nZSAgYWN0aW9uCX4KKwkgICAgICAgY3Vyc29yCQkJICB3aW5kb3cJCX4KKzxTLUxlZnRNb3VzZT4gICB5ZXMgICAgIHN0YXJ0IG9yIGV4dGVuZCAoMSkgbm8JICAgbGlrZSBDVFJMLU8gKDEpCis8UmlnaHRNb3VzZT4gICAgbm8JcG9wdXAgbWVudQkgICAgbm8KKworKDEpIG9ubHkgaWYgbW91c2UgcG9pbnRlciBtb3ZlZCBzaW5jZSBwcmVzcworKDIpIG9ubHkgaWYgY2xpY2sgaXMgaW4gc2FtZSBidWZmZXIKKworQ2xpY2tpbmcgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGNhdXNlcyB0aGUgY3Vyc29yIHRvIGJlIHBvc2l0aW9uZWQuICBJZiB0aGUKK2NsaWNrIGlzIGluIGFub3RoZXIgd2luZG93IHRoYXQgd2luZG93IGlzIG1hZGUgdGhlIGFjdGl2ZSB3aW5kb3cuICBXaGVuCitlZGl0aW5nIHRoZSBjb21tYW5kLWxpbmUgdGhlIGN1cnNvciBjYW4gb25seSBiZSBwb3NpdGlvbmVkIG9uIHRoZQorY29tbWFuZC1saW5lLiAgV2hlbiBpbiBJbnNlcnQgbW9kZSBWaW0gcmVtYWlucyBpbiBJbnNlcnQgbW9kZS4gIElmICdzY3JvbGxvZmYnCitpcyBzZXQsIGFuZCB0aGUgY3Vyc29yIGlzIHBvc2l0aW9uZWQgd2l0aGluICdzY3JvbGxvZmYnIGxpbmVzIGZyb20gdGhlIHdpbmRvdworYm9yZGVyLCB0aGUgdGV4dCBpcyBzY3JvbGxlZC4KKworQSBzZWxlY3Rpb24gY2FuIGJlIHN0YXJ0ZWQgYnkgcHJlc3NpbmcgdGhlIGxlZnQgbW91c2UgYnV0dG9uIG9uIHRoZSBmaXJzdAorY2hhcmFjdGVyLCBtb3ZpbmcgdGhlIG1vdXNlIHRvIHRoZSBsYXN0IGNoYXJhY3RlciwgdGhlbiByZWxlYXNpbmcgdGhlIG1vdXNlCitidXR0b24uICBZb3Ugd2lsbCBub3QgYWx3YXlzIHNlZSB0aGUgc2VsZWN0aW9uIHVudGlsIHlvdSByZWxlYXNlIHRoZSBidXR0b24sCitvbmx5IGluIHNvbWUgdmVyc2lvbnMgKEdVSSwgTVMtRE9TLCBXSU4zMikgd2lsbCB0aGUgZHJhZ2dpbmcgYmUgc2hvd24KK2ltbWVkaWF0ZWx5LiAgTm90ZSB0aGF0IHlvdSBjYW4gbWFrZSB0aGUgdGV4dCBzY3JvbGwgYnkgbW92aW5nIHRoZSBtb3VzZSBhdAorbGVhc3Qgb25lIGNoYXJhY3RlciBpbiB0aGUgZmlyc3QvbGFzdCBsaW5lIGluIHRoZSB3aW5kb3cgd2hlbiAnc2Nyb2xsb2ZmJyBpcworbm9uLXplcm8uCisKK0luIE5vcm1hbCwgVmlzdWFsIGFuZCBTZWxlY3QgbW9kZSBjbGlja2luZyB0aGUgcmlnaHQgbW91c2UgYnV0dG9uIGNhdXNlcyB0aGUKK1Zpc3VhbCBhcmVhIHRvIGJlIGV4dGVuZGVkLiAgV2hlbiAnbW91c2Vtb2RlbCcgaXMgInBvcHVwIiwgdGhlIGxlZnQgYnV0dG9uIGhhcwordG8gYmUgdXNlZCB3aGlsZSBrZWVwaW5nIHRoZSBzaGlmdCBrZXkgcHJlc3NlZC4gIFdoZW4gY2xpY2tpbmcgaW4gYSB3aW5kb3cKK3doaWNoIGlzIGVkaXRpbmcgYW5vdGhlciBidWZmZXIsIHRoZSBWaXN1YWwgb3IgU2VsZWN0IG1vZGUgaXMgc3RvcHBlZC4KKworCQkJCQkJCSpkb3VibGUtY2xpY2sqCitEb3VibGUsIHRyaXBsZSBhbmQgcXVhZHJ1cGxlIGNsaWNrcyBhcmUgc3VwcG9ydGVkIHdoZW4gdGhlIEdVSSBpcyBhY3RpdmUsCitmb3IgTVMtRE9TIGFuZCBXaW4zMiwgYW5kIGZvciBhbiB4dGVybSAoaWYgdGhlIGdldHRpbWVvZmRheSgpIGZ1bmN0aW9uIGlzCithdmFpbGFibGUpLiAgRm9yIHNlbGVjdGluZyB0ZXh0LCBleHRyYSBjbGlja3MgZXh0ZW5kIHRoZSBzZWxlY3Rpb246CisJY2xpY2sJCXNlbGVjdCB+CisJZG91YmxlCQl3b3JkIG9yICUgbWF0Y2gJCSo8Mi1MZWZ0TW91c2U+KgorCXRyaXBsZQkJbGluZQkJCSo8My1MZWZ0TW91c2U+KgorCXF1YWRydXBsZQlyZWN0YW5ndWxhciBibG9jawkqPDQtTGVmdE1vdXNlPioKK0V4Y2VwdGlvbjogSW4gYSBIZWxwIHdpbmRvdyBhIGRvdWJsZSBjbGljayBqdW1wcyB0byBoZWxwIGZvciB0aGUgd29yZCB0aGF0IGlzCitjbGlja2VkIG9uLgorQSBkb3VibGUgY2xpY2sgb24gYSB3b3JkIHNlbGVjdHMgdGhhdCB3b3JkLiAgJ2lza2V5d29yZCcgaXMgdXNlZCB0byBzcGVjaWZ5Cit3aGljaCBjaGFyYWN0ZXJzIGFyZSBpbmNsdWRlZCBpbiBhIHdvcmQuICBBIGRvdWJsZSBjbGljayBvbiBhIGNoYXJhY3RlcgordGhhdCBoYXMgYSBtYXRjaCBzZWxlY3RzIHVudGlsIHRoYXQgbWF0Y2ggKGxpa2UgdXNpbmcgInYlIikuICBJZiB0aGUgbWF0Y2ggaXMKK2FuICNpZi8jZWxzZS8jZW5kaWYgYmxvY2ssIHRoZSBzZWxlY3Rpb24gYmVjb21lcyBsaW5ld2lzZS4KK0ZvciBNUy1ET1MgYW5kIHh0ZXJtIHRoZSB0aW1lIGZvciBkb3VibGUgY2xpY2tpbmcgY2FuIGJlIHNldCB3aXRoIHRoZQorJ21vdXNldGltZScgb3B0aW9uLiAgRm9yIHRoZSBvdGhlciBzeXN0ZW1zIHRoaXMgdGltZSBpcyBkZWZpbmVkIG91dHNpZGUgb2YKK1ZpbS4KK0FuIGV4YW1wbGUsIGZvciB1c2luZyBhIGRvdWJsZSBjbGljayB0byBqdW1wIHRvIHRoZSB0YWcgdW5kZXIgdGhlIGN1cnNvcjogPgorCTptYXAgPDItTGVmdE1vdXNlPiA6ZXhlICJ0YWcgIi4gZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+CisKK0RyYWdnaW5nIHRoZSBtb3VzZSB3aXRoIGEgZG91YmxlIGNsaWNrIChidXR0b24tZG93biwgYnV0dG9uLXVwLCBidXR0b24tZG93bgorYW5kIHRoZW4gZHJhZykgd2lsbCByZXN1bHQgaW4gd2hvbGUgd29yZHMgdG8gYmUgc2VsZWN0ZWQuICBUaGlzIGNvbnRpbnVlcwordW50aWwgdGhlIGJ1dHRvbiBpcyByZWxlYXNlZCwgYXQgd2hpY2ggcG9pbnQgdGhlIHNlbGVjdGlvbiBpcyBwZXIgY2hhcmFjdGVyCithZ2Fpbi4KKworCQkJCQkJCSpncG0tbW91c2UqCitUaGUgR1BNIG1vdXNlIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdGhlIHwrbW91c2VfZ3BtfCBmZWF0dXJlIHdhcyBlbmFibGVkIGF0Citjb21waWxlIHRpbWUuICBUaGUgR1BNIG1vdXNlIGRyaXZlciAoTGludXggY29uc29sZSkgZG9lcyBub3Qgc3VwcG9ydCBxdWFkcnVwbGUKK2NsaWNrcy4KKworSW4gSW5zZXJ0IG1vZGUsIHdoZW4gYSBzZWxlY3Rpb24gaXMgc3RhcnRlZCwgVmltIGdvZXMgaW50byBOb3JtYWwgbW9kZQordGVtcG9yYXJpbHkuICBXaGVuIFZpc3VhbCBvciBTZWxlY3QgbW9kZSBlbmRzLCBpdCByZXR1cm5zIHRvIEluc2VydCBtb2RlLgorVGhpcyBpcyBsaWtlIHVzaW5nIENUUkwtTyBpbiBJbnNlcnQgbW9kZS4gIFNlbGVjdCBtb2RlIGlzIHVzZWQgd2hlbiB0aGUKKydzZWxlY3Rtb2RlJyBvcHRpb24gY29udGFpbnMgIm1vdXNlIi4KKworCQkJCQkJCSpkcmFnLXN0YXR1cy1saW5lKgorV2hlbiB3b3JraW5nIHdpdGggc2V2ZXJhbCB3aW5kb3dzLCB0aGUgc2l6ZSBvZiB0aGUgd2luZG93cyBjYW4gYmUgY2hhbmdlZCBieQorZHJhZ2dpbmcgdGhlIHN0YXR1cyBsaW5lIHdpdGggdGhlIG1vdXNlLiAgUG9pbnQgdGhlIG1vdXNlIGF0IGEgc3RhdHVzIGxpbmUsCitwcmVzcyB0aGUgbGVmdCBidXR0b24sIG1vdmUgdGhlIG1vdXNlIHRvIHRoZSBuZXcgcG9zaXRpb24gb2YgdGhlIHN0YXR1cyBsaW5lLAorcmVsZWFzZSB0aGUgYnV0dG9uLiAgSnVzdCBjbGlja2luZyB0aGUgbW91c2UgaW4gYSBzdGF0dXMgbGluZSBtYWtlcyB0aGF0IHdpbmRvdwordGhlIGN1cnJlbnQgd2luZG93LCB3aXRob3V0IG1vdmluZyB0aGUgY3Vyc29yLiAgSWYgYnkgc2VsZWN0aW5nIGEgd2luZG93IGl0Cit3aWxsIGNoYW5nZSBwb3NpdGlvbiBvciBzaXplLCB0aGUgZHJhZ2dpbmcgb2YgdGhlIHN0YXR1cyBsaW5lIHdpbGwgbG9vaworY29uZnVzaW5nLCBidXQgaXQgd2lsbCB3b3JrIChqdXN0IHRyeSBpdCkuCisKKwkJCQkJKjxNaWRkbGVSZWxlYXNlPiogKjxNaWRkbGVEcmFnPioKK01vdXNlIGNsaWNrcyBjYW4gYmUgbWFwcGVkLiAgVGhlIGNvZGVzIGZvciBtb3VzZSBjbGlja3MgYXJlOgorICAgICBjb2RlCSAgICBtb3VzZSBidXR0b24JICAgICAgbm9ybWFsIGFjdGlvbgl+CisgPExlZnRNb3VzZT4JIGxlZnQgcHJlc3NlZAkJICAgIHNldCBjdXJzb3IgcG9zaXRpb24KKyA8TGVmdERyYWc+CSBsZWZ0IG1vdmVkIHdoaWxlIHByZXNzZWQgICBleHRlbmQgc2VsZWN0aW9uCisgPExlZnRSZWxlYXNlPgkgbGVmdCByZWxlYXNlZAkJICAgIHNldCBzZWxlY3Rpb24gZW5kCisgPE1pZGRsZU1vdXNlPgkgbWlkZGxlIHByZXNzZWQJCSAgICBwYXN0ZSB0ZXh0IGF0IGN1cnNvciBwb3NpdGlvbgorIDxNaWRkbGVEcmFnPgkgbWlkZGxlIG1vdmVkIHdoaWxlIHByZXNzZWQgLQorIDxNaWRkbGVSZWxlYXNlPiBtaWRkbGUgcmVsZWFzZWQJICAgIC0KKyA8UmlnaHRNb3VzZT4JIHJpZ2h0IHByZXNzZWQJCSAgICBleHRlbmQgc2VsZWN0aW9uCisgPFJpZ2h0RHJhZz4JIHJpZ2h0IG1vdmVkIHdoaWxlIHByZXNzZWQgIGV4dGVuZCBzZWxlY3Rpb24KKyA8UmlnaHRSZWxlYXNlPiAgcmlnaHQgcmVsZWFzZWQJCSAgICBzZXQgc2VsZWN0aW9uIGVuZAorIDxYMU1vdXNlPgkgWDEgYnV0dG9uIHByZXNzZWQJICAgIC0JCQkqWDFNb3VzZSoKKyA8WDFEcmFnPgkgWDEgbW92ZWQgd2hpbGUgcHJlc3NlZAkgICAgLQkJCSpYMURyYWcqCisgPFgxUmVsZWFzZT4JIFgxIGJ1dHRvbiByZWxlYXNlCSAgICAtCQkJKlgxUmVsZWFzZSoKKyA8WDJNb3VzZT4JIFgyIGJ1dHRvbiBwcmVzc2VkCSAgICAtCQkJKlgyTW91c2UqCisgPFgyRHJhZz4JIFgyIG1vdmVkIHdoaWxlIHByZXNzZWQgICAgIC0JCQkqWDJEcmFnKgorIDxYMlJlbGVhc2U+CSBYMiBidXR0b24gcmVsZWFzZQkgICAgLQkJCSpYMlJlbGVhc2UqCisKK1RoZSBYMSBhbmQgWDIgYnV0dG9ucyByZWZlciB0byB0aGUgZXh0cmEgYnV0dG9ucyBmb3VuZCBvbiBzb21lIG1pY2UuICBUaGUKKydNaWNyb3NvZnQgRXhwbG9yZXInIG1vdXNlIGhhcyB0aGVzZSBidXR0b25zIGF2YWlsYWJsZSB0byB0aGUgcmlnaHQgdGh1bWIuCitDdXJyZW50bHkgWDEgYW5kIFgyIG9ubHkgd29yayBvbiBXaW4zMiBlbnZpcm9ubWVudHMuCisKK0V4YW1wbGVzOiA+CisJOm5vcmVtYXAgPE1pZGRsZU1vdXNlPiA8TGVmdE1vdXNlPjxNaWRkbGVNb3VzZT4KK1Bhc3RlIGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbWlkZGxlIG1vdXNlIGJ1dHRvbiBjbGljayAob3RoZXJ3aXNlIHRoZSBwYXN0ZQord291bGQgYmUgZG9uZSBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uKS4gPgorCisJOm5vcmVtYXAgPExlZnRSZWxlYXNlPiA8TGVmdFJlbGVhc2U+eQorSW1tZWRpYXRlbHkgeWFuayB0aGUgc2VsZWN0aW9uLCB3aGVuIHVzaW5nIFZpc3VhbCBtb2RlLgorCitOb3RlIHRoZSB1c2Ugb2YgIjpub3JlbWFwIiBpbnN0ZWFkIG9mICJtYXAiIHRvIGF2b2lkIGEgcmVjdXJzaXZlIG1hcHBpbmcuCis+CisJOm1hcCA8WDFNb3VzZT4gPEMtTz4KKwk6bWFwIDxYMk1vdXNlPiA8Qy1JPgorTWFwIHRoZSBYMSBhbmQgWDIgYnV0dG9ucyB0byBnbyBmb3J3YXJkcyBhbmQgYmFja3dhcmRzIGluIHRoZSBqdW1wIGxpc3QsIHNlZQorfENUUkwtT3wgYW5kIHxDVFJMLUl8LgorCisJCQkJCQkqbW91c2Utc3dhcC1idXR0b25zKgorVG8gc3dhcCB0aGUgbWVhbmluZyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgbW91c2UgYnV0dG9uczogPgorCTpub3JlbWFwCTxMZWZ0TW91c2U+CTxSaWdodE1vdXNlPgorCTpub3JlbWFwCTxMZWZ0RHJhZz4JPFJpZ2h0RHJhZz4KKwk6bm9yZW1hcAk8TGVmdFJlbGVhc2U+CTxSaWdodFJlbGVhc2U+CisJOm5vcmVtYXAJPFJpZ2h0TW91c2U+CTxMZWZ0TW91c2U+CisJOm5vcmVtYXAJPFJpZ2h0RHJhZz4JPExlZnREcmFnPgorCTpub3JlbWFwCTxSaWdodFJlbGVhc2U+CTxMZWZ0UmVsZWFzZT4KKwk6bm9yZW1hcAlnPExlZnRNb3VzZT4JPEMtUmlnaHRNb3VzZT4KKwk6bm9yZW1hcAlnPFJpZ2h0TW91c2U+CTxDLUxlZnRNb3VzZT4KKwk6bm9yZW1hcCEJPExlZnRNb3VzZT4JPFJpZ2h0TW91c2U+CisJOm5vcmVtYXAhCTxMZWZ0RHJhZz4JPFJpZ2h0RHJhZz4KKwk6bm9yZW1hcCEJPExlZnRSZWxlYXNlPgk8UmlnaHRSZWxlYXNlPgorCTpub3JlbWFwIQk8UmlnaHRNb3VzZT4JPExlZnRNb3VzZT4KKwk6bm9yZW1hcCEJPFJpZ2h0RHJhZz4JPExlZnREcmFnPgorCTpub3JlbWFwIQk8UmlnaHRSZWxlYXNlPgk8TGVmdFJlbGVhc2U+Cis8CisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdGlwcy50eHQgYi9ydW50aW1lL2RvYy90aXBzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDc0Nzc5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdGlwcy50eHQKQEAgLTAsMCArMSw0NDUgQEAKKyp0aXBzLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBGZWIgMTcKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitUaXBzIGFuZCBpZGVhcyBmb3IgdXNpbmcgVmltCQkJCSp0aXBzKgorCitEb24ndCBmb3JnZXQgdG8gYnJvd3NlIHRoZSB1c2VyIG1hbnVhbCwgaXQgYWxzbyBjb250YWlucyBsb3RzIG9mIHVzZWZ1bCB0aXBzCit8dXNyX3RvYy50eHR8LgorCitFZGl0aW5nIEMgcHJvZ3JhbXMJCQkJfEMtZWRpdGluZ3wKK0ZpbmRpbmcgd2hlcmUgaWRlbnRpZmllcnMgYXJlIHVzZWQJCXxpZGVudC1zZWFyY2h8CitTd2l0Y2hpbmcgc2NyZWVucyBpbiBhbiB4dGVybQkJCXx4dGVybS1zY3JlZW5zfAorU2Nyb2xsaW5nIGluIEluc2VydCBtb2RlCQkJfHNjcm9sbC1pbnNlcnR8CitTbW9vdGggc2Nyb2xsaW5nCQkJCXxzY3JvbGwtc21vb3RofAorQ29ycmVjdGluZyBjb21tb24gdHlwaW5nIG1pc3Rha2VzCQl8dHlwZS1taXN0YWtlc3wKK0NvdW50aW5nIHdvcmRzLCBsaW5lcywgZXRjLgkJCXxjb3VudC1pdGVtc3wKK1Jlc3RvcmluZyB0aGUgY3Vyc29yIHBvc2l0aW9uCQkJfHJlc3RvcmUtcG9zaXRpb258CitSZW5hbWluZyBmaWxlcwkJCQkJfHJlbmFtZS1maWxlc3wKK1NwZWVkaW5nIHVwIGV4dGVybmFsIGNvbW1hbmRzCQkJfHNwZWVkLXVwfAorVXNlZnVsIG1hcHBpbmdzCQkJCQl8dXNlZnVsLW1hcHBpbmdzfAorQ29tcHJlc3NpbmcgdGhlIGhlbHAgZmlsZXMJCQl8Z3ppcC1oZWxwZmlsZXwKK0hleCBlZGl0aW5nCQkJCQl8aGV4LWVkaXRpbmd8CitFeGVjdXRpbmcgc2hlbGwgY29tbWFuZHMgaW4gYSB3aW5kb3cJCXxzaGVsbC13aW5kb3d8CitVc2luZyA8PiBub3RhdGlvbiBpbiBhdXRvY29tbWFuZHMJCXxhdXRvY21kLTw+fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0VkaXRpbmcgQyBwcm9ncmFtcwkJCQkJKkMtZWRpdGluZyoKKworVGhlcmUgYXJlIHF1aXRlIGEgZmV3IGZlYXR1cmVzIGluIFZpbSB0byBoZWxwIHlvdSBlZGl0IEMgcHJvZ3JhbSBmaWxlcy4gIEhlcmUKK2lzIGFuIG92ZXJ2aWV3IHdpdGggdGFncyB0byBqdW1wIHRvOgorCit8dXNyXzI5LnR4dHwJCU1vdmluZyB0aHJvdWdoIHByb2dyYW1zIGNoYXB0ZXIgaW4gdGhlIHVzZXIgbWFudWFsLgorfHVzcl8zMC50eHR8CQlFZGl0aW5nIHByb2dyYW1zIGNoYXB0ZXIgaW4gdGhlIHVzZXIgbWFudWFsLgorfEMtaW5kZW50aW5nfAkJQXV0b21hdGljYWxseSBzZXQgdGhlIGluZGVudCBvZiBhIGxpbmUgd2hpbGUgdHlwaW5nCisJCQl0ZXh0LgorfD18CQkJUmUtaW5kZW50IGEgZmV3IGxpbmVzLgorfGZvcm1hdC1jb21tZW50c3wJRm9ybWF0IGNvbW1lbnRzLgorCit8OmNoZWNrcGF0aHwJCVNob3cgYWxsIHJlY3Vyc2l2ZWx5IGluY2x1ZGVkIGZpbGVzLgorfFtpfAkJCVNlYXJjaCBmb3IgaWRlbnRpZmllciB1bmRlciBjdXJzb3IgaW4gY3VycmVudCBhbmQKKwkJCWluY2x1ZGVkIGZpbGVzLgorfFtfQ1RSTC1JfAkJSnVtcCB0byBtYXRjaCBmb3IgIltpIgorfFtJfAkJCUxpc3QgYWxsIGxpbmVzIGluIGN1cnJlbnQgYW5kIGluY2x1ZGVkIGZpbGVzIHdoZXJlCisJCQlpZGVudGlmaWVyIHVuZGVyIHRoZSBjdXJzb3IgbWF0Y2hlcy4KK3xbZHwJCQlTZWFyY2ggZm9yIGRlZmluZSB1bmRlciBjdXJzb3IgaW4gY3VycmVudCBhbmQgaW5jbHVkZWQKKwkJCWZpbGVzLgorCit8Q1RSTC1dfAkJSnVtcCB0byB0YWcgdW5kZXIgY3Vyc29yIChlLmcuLCBkZWZpbml0aW9uIG9mIGEKKwkJCWZ1bmN0aW9uKS4KK3xDVFJMLVR8CQlKdW1wIGJhY2sgdG8gYmVmb3JlIGEgQ1RSTC1dIGNvbW1hbmQuCit8OnRzZWxlY3R8CQlTZWxlY3Qgb25lIHRhZyBvdXQgb2YgYSBsaXN0IG9mIG1hdGNoaW5nIHRhZ3MuCisKK3xnZHwJCQlHbyB0byBEZWNsYXJhdGlvbiBvZiBsb2NhbCB2YXJpYWJsZSB1bmRlciBjdXJzb3IuCit8Z0R8CQkJR28gdG8gRGVjbGFyYXRpb24gb2YgZ2xvYmFsIHZhcmlhYmxlIHVuZGVyIGN1cnNvci4KKworfGdmfAkJCUdvIHRvIGZpbGUgbmFtZSB1bmRlciB0aGUgY3Vyc29yLgorCit8JXwJCQlHbyB0byBtYXRjaGluZyAoKSwge30sIFtdLCAvKiAqLywgI2lmLCAjZWxzZSwgI2VuZGlmLgorfFsvfAkJCUdvIHRvIHByZXZpb3VzIHN0YXJ0IG9mIGNvbW1lbnQuCit8XS98CQkJR28gdG8gbmV4dCBlbmQgb2YgY29tbWVudC4KK3xbI3wJCQlHbyBiYWNrIHRvIHVuY2xvc2VkICNpZiwgI2lmZGVmLCBvciAjZWxzZS4KK3xdI3wJCQlHbyBmb3J3YXJkIHRvIHVuY2xvc2VkICNlbHNlIG9yICNlbmRpZi4KK3xbKHwJCQlHbyBiYWNrIHRvIHVuY2xvc2VkICcoJworfF0pfAkJCUdvIGZvcndhcmQgdG8gdW5jbG9zZWQgJyknCit8W3t8CQkJR28gYmFjayB0byB1bmNsb3NlZCAneycKK3xdfXwJCQlHbyBmb3J3YXJkIHRvIHVuY2xvc2VkICd9JworCit8dl9hYnwJCQlTZWxlY3QgImEgYmxvY2siIGZyb20gIlsoIiB0byAiXSkiLCBpbmNsdWRpbmcgYnJhY2VzCit8dl9pYnwJCQlTZWxlY3QgImlubmVyIGJsb2NrIiBmcm9tICJbKCIgdG8gIl0pIgorfHZfYUJ8CQkJU2VsZWN0ICJhIGJsb2NrIiBmcm9tICJbeyIgdG8gIl19IiwgaW5jbHVkaW5nIGJyYWNrZXRzCit8dl9pQnwJCQlTZWxlY3QgImlubmVyIGJsb2NrIiBmcm9tICJbeyIgdG8gIl19IgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0ZpbmRpbmcgd2hlcmUgaWRlbnRpZmllcnMgYXJlIHVzZWQJCQkqaWRlbnQtc2VhcmNoKgorCitZb3UgcHJvYmFibHkgYWxyZWFkeSBrbm93IHRoYXQgfHRhZ3N8IGNhbiBiZSB1c2VkIHRvIGp1bXAgdG8gdGhlIHBsYWNlIHdoZXJlIGEKK2Z1bmN0aW9uIG9yIHZhcmlhYmxlIGlzIGRlZmluZWQuICBCdXQgc29tZXRpbWVzIHlvdSB3aXNoIHlvdSBjb3VsZCBqdW1wIHRvIGFsbAordGhlIHBsYWNlcyB3aGVyZSBhIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQuICBUaGlzIGlzIHBvc3NpYmxlIGluCit0d28gd2F5czoKKzEuIFVzaW5nIHRoZSB8OmdyZXB8IGNvbW1hbmQuICBUaGlzIHNob3VsZCB3b3JrIG9uIG1vc3QgVW5peCBzeXN0ZW1zLAorICAgYnV0IGNhbiBiZSBzbG93IChpdCByZWFkcyBhbGwgZmlsZXMpIGFuZCBvbmx5IHNlYXJjaGVzIGluIG9uZSBkaXJlY3RvcnkuCisyLiBVc2luZyBJRCB1dGlscy4gIFRoaXMgaXMgZmFzdCBhbmQgd29ya3MgaW4gbXVsdGlwbGUgZGlyZWN0b3JpZXMuICBJdCB1c2VzIGEKKyAgIGRhdGFiYXNlIHRvIHN0b3JlIGxvY2F0aW9ucy4gIFlvdSB3aWxsIG5lZWQgc29tZSBhZGRpdGlvbmFsIHByb2dyYW1zIGZvcgorICAgdGhpcyB0byB3b3JrLiAgQW5kIHlvdSBuZWVkIHRvIGtlZXAgdGhlIGRhdGFiYXNlIHVwIHRvIGRhdGUuCisKK1VzaW5nIHRoZSBHTlUgaWQtdG9vbHM6CisKK1doYXQgeW91IG5lZWQ6CistIFRoZSBHTlUgaWQtdG9vbHMgaW5zdGFsbGVkIChta2lkIGlzIG5lZWRlZCB0byBjcmVhdGUgSUQgYW5kIGxpZCBpcyBuZWVkZWQgdG8KKyAgdXNlIHRoZSBtYWNyb3MpLgorLSBBbiBpZGVudGlmaWVyIGRhdGFiYXNlIGZpbGUgY2FsbGVkICJJRCIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgWW91IGNhbgorICBjcmVhdGUgaXQgd2l0aCB0aGUgc2hlbGwgY29tbWFuZCAibWtpZCBmaWxlMSBmaWxlMiAuLiIuCisKK1B1dCB0aGlzIGluIHlvdXIgLnZpbXJjOiA+CisJbWFwIF91IDpjYWxsIElEX3NlYXJjaCgpPEJhcj5leGVjdXRlICIvXFw8IiAuIGc6d29yZCAuICJcXD4iPENSPgorCW1hcCBfbiA6bjxCYXI+ZXhlY3V0ZSAiL1xcPCIgLiBnOndvcmQgLiAiXFw+IjxDUj4KKworCWZ1bmN0aW9uISBJRF9zZWFyY2goKQorCSAgbGV0IGc6d29yZCA9IGV4cGFuZCgiPGN3b3JkPiIpCisJICBsZXQgeCA9IHN5c3RlbSgibGlkIC0ta2V5PW5vbmUgIi4gZzp3b3JkKQorCSAgbGV0IHggPSBzdWJzdGl0dXRlKHgsICJcbiIsICIgIiwgImciKQorCSAgZXhlY3V0ZSAibmV4dCAiIC4geAorCWVuZGZ1bgorCitUbyB1c2UgaXQsIHBsYWNlIHRoZSBjdXJzb3Igb24gYSB3b3JkLCB0eXBlICJfdSIgYW5kIHZpbSB3aWxsIGxvYWQgdGhlIGZpbGUKK3RoYXQgY29udGFpbnMgdGhlIHdvcmQuICBTZWFyY2ggZm9yIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIHdvcmQgaW4gdGhlCitzYW1lIGZpbGUgd2l0aCAibiIuICBHbyB0byB0aGUgbmV4dCBmaWxlIHdpdGggIl9uIi4KKworVGhpcyBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBpZC11dGlscy0zLjIgKHdoaWNoIGlzIHRoZSBuYW1lIG9mIHRoZSBpZC10b29scworYXJjaGl2ZSBmaWxlIG9uIHlvdXIgY2xvc2VzdCBnbnUtZnRwLW1pcnJvcikuCisKK1t0aGUgaWRlYSBmb3IgdGhpcyBjb21lcyBmcm9tIEFuZHJlYXMgS3V0c2NoZXJhXQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1N3aXRjaGluZyBzY3JlZW5zIGluIGFuIHh0ZXJtCQkqeHRlcm0tc2NyZWVucyogKnh0ZXJtLXNhdmUtc2NyZWVuKgorCisoRnJvbSBjb21wLmVkaXRvcnMsIGJ5IEp1ZXJnZW4gV2VpZ2VydCwgaW4gcmVwbHkgdG8gYSBxdWVzdGlvbikKKworOj4gQW5vdGhlciBxdWVzdGlvbiBpcyB0aGF0IGFmdGVyIGV4aXRpbmcgdmltLCB0aGUgc2NyZWVuIGlzIGxlZnQgYXMgaXQKKzo+IHdhcywgaS5lLiB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgSSB3YXMgdmlld2luZyAoZWRpdGluZykgd2FzIGxlZnQgb24KKzo+IHRoZSBzY3JlZW4uIFRoZSBvdXRwdXQgZnJvbSBteSBwcmV2aW91cyBsaWtlICJscyIgd2VyZSBsb3N0LAorOj4gaWUuIG5vIGxvbmdlciBpbiB0aGUgc2Nyb2xsaW5nIGJ1ZmZlci4gSSBrbm93IHRoYXQgdGhlcmUgaXMgYSB3YXkgdG8KKzo+IHJlc3RvcmUgdGhlIHNjcmVlbiBhZnRlciBleGl0aW5nIHZpbSBvciBvdGhlciB2aSBsaWtlIGVkaXRvcnMsCis6PiBJIGp1c3QgZG9uJ3Qga25vdyBob3cuIEhlbHBzIGFyZSBhcHByZWNpYXRlZC4gVGhhbmtzLgorOgorOkkgaW1hZ2luZSBzb21lb25lIGVsc2UgY2FuIGFuc3dlciB0aGlzLiAgSSBhc3N1bWUgdGhvdWdoIHRoYXQgdmltIGFuZCB2aSBkbworOnRoZSBzYW1lIHRoaW5nIGFzIGVhY2ggb3RoZXIgZm9yIGEgZ2l2ZW4geHRlcm0gc2V0dXAuCisKK1RoZXkgbm90IG5lY2Vzc2FyaWx5IGRvIHRoZSBzYW1lIHRoaW5nLCBhcyB0aGlzIG1heSBiZSBhIHRlcm1jYXAgdnMuCit0ZXJtaW5mbyBwcm9ibGVtLiBZb3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgdGhlcmUgYXJlIHR3byBkYXRhYmFzZXMgZm9yCitkZXNjcmliaW5nIGF0dHJpYnV0ZXMgb2YgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgdGVybWluYWw6IHRlcm1jYXAgYW5kCit0ZXJtaW5mby4gVGhpcyBjYW4gY2F1c2UgZGlmZmVyZW5jZXMgd2hlbiB0aGUgZW50cmllcyBkaWZmZXIgQU5EIHdoZW4gb2YKK3RoZSBwcm9ncmFtcyBpbiBxdWVzdGlvbiBvbmUgdXNlcyB0ZXJtaW5mbyBhbmQgdGhlIG90aGVyIHVzZXMgdGVybWNhcAorKGFsc28gc2VlIHwrdGVybWluZm98KS4KKworSW4geW91ciBwYXJ0aWN1bGFyIHByb2JsZW0sIHlvdSBhcmUgbG9va2luZyBmb3IgdGhlIGNvbnRyb2wgc2VxdWVuY2VzCiteW1s/NDdoIGFuZCBeW1s/NDdsLiBUaGVzZSBzd2l0Y2ggYmV0d2VlbiB4dGVybXMgYWx0ZXJuYXRlIGFuZCBtYWluIHNjcmVlbgorYnVmZmVyLiBBcyBhIHF1aWNrIHdvcmthcm91bmQgYSBjb21tYW5kIHNlcXVlbmNlIGxpa2UgPgorCWVjaG8gLW4gIl5bWz80N2giOyB2aW0gLi4uIDsgZWNobyAtbiAiXltbPzQ3bCIKK21heSBkbyB3aGF0IHlvdSB3YW50LiAoTXkgbm90YXRpb24gXlsgbWVhbnMgdGhlIEVTQyBjaGFyYWN0ZXIsIGZ1cnRoZXIgZG93bgoreW91J2xsIHNlZSB0aGF0IHRoZSBkYXRhYmFzZXMgdXNlIFxFIGluc3RlYWQpLgorCitPbiBzdGFydHVwLCB2aW0gZWNob2VzIHRoZSB2YWx1ZSBvZiB0aGUgdGVybWNhcCB2YXJpYWJsZSB0aSAodGVybWluZm86CitzbWN1cCkgdG8gdGhlIHRlcm1pbmFsLiBXaGVuIGV4aXRpbmcsIGl0IGVjaG9lcyB0ZSAodGVybWluZm86IHJtY3VwKS4gVGh1cwordGhlc2UgdHdvIHZhcmlhYmxlcyBhcmUgdGhlIGNvcnJlY3QgcGxhY2Ugd2hlcmUgdGhlIGFib3ZlIG1lbnRpb25lZCBjb250cm9sCitzZXF1ZW5jZXMgc2hvdWxkIGdvLgorCitDb21wYXJlIHlvdXIgeHRlcm0gdGVybWNhcCBlbnRyeSAoZm91bmQgaW4gL2V0Yy90ZXJtY2FwKSB3aXRoIHlvdXIgeHRlcm0KK3Rlcm1pbmZvIGVudHJ5IChyZXRyaWV2ZWQgd2l0aCAvdXNyLzViaW4vaW5mb2NtcCAtQyB4dGVybSkuIEJvdGggc2hvdWxkCitjb250YWluIGVudHJpZXMgc2ltaWxhciB0bzogPgorCTp0ZT1cRVsySlxFWz80N2xcRTg6dGk9XEU3XEVbPzQ3aDoKKworUFM6IElmIHlvdSBmaW5kIGFueSBkaWZmZXJlbmNlLCBzb21lb25lICh5b3VyIHN5c2FkbWluPykgc2hvdWxkIGJldHRlciBjaGVjaworICAgIHRoZSBjb21wbGV0ZSB0ZXJtY2FwIGFuZCB0ZXJtaW5mbyBkYXRhYmFzZSBmb3IgY29uc2lzdGVuY3kuCisKK05PVEUgMTogSWYgeW91IHJlY29tcGlsZSBWaW0gd2l0aCBGRUFUX1hURVJNX1NBVkUgZGVmaW5lZCBpbiBmZWF0dXJlLmgsIHRoZQorYnVpbHRpbiB4dGVybSB3aWxsIGluY2x1ZGUgdGhlIG1lbnRpb25lZCAidGUiIGFuZCAidGkiIGVudHJpZXMuCisKK05PVEUgMjogSWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGUgc2NyZWVuIHN3aXRjaGluZywgYW5kIHlvdSBkb24ndCB3YW50IHRvCitjaGFuZ2UgeW91ciB0ZXJtY2FwLCB5b3UgY2FuIGFkZCB0aGVzZSBsaW5lcyB0byB5b3VyIC52aW1yYzogPgorCTpzZXQgdF90aT0gdF90ZT0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTY3JvbGxpbmcgaW4gSW5zZXJ0IG1vZGUJCQkJKnNjcm9sbC1pbnNlcnQqCisKK0lmIHlvdSBhcmUgaW4gaW5zZXJ0IG1vZGUgYW5kIHlvdSB3YW50IHRvIHNlZSBzb21ldGhpbmcgdGhhdCBpcyBqdXN0IG9mZiB0aGUKK3NjcmVlbiwgeW91IGNhbiB1c2UgQ1RSTC1YIENUUkwtRSBhbmQgQ1RSTC1YIENUUkwtWSB0byBzY3JvbGwgdGhlIHNjcmVlbi4KKwkJCQkJCXxpX0NUUkwtWF9DVFJMLUV8CisKK1RvIG1ha2UgdGhpcyBlYXNpZXIsIHlvdSBjb3VsZCB1c2UgdGhlc2UgbWFwcGluZ3M6ID4KKwk6aW5vcmVtYXAgPEMtRT4gPEMtWD48Qy1FPgorCTppbm9yZW1hcCA8Qy1ZPiA8Qy1YPjxDLVk+CisoVHlwZSB0aGlzIGxpdGVyYWxseSwgbWFrZSBzdXJlIHRoZSAnPCcgZmxhZyBpcyBub3QgaW4gJ2Nwb3B0aW9ucycpLgorWW91IHRoZW4gbG9zZSB0aGUgYWJpbGl0eSB0byBjb3B5IHRleHQgZnJvbSB0aGUgbGluZSBhYm92ZS9iZWxvdyB0aGUgY3Vyc29yCit8aV9DVFJMLUV8LgorCitBbHNvIGNvbnNpZGVyIHNldHRpbmcgJ3Njcm9sbG9mZicgdG8gYSBsYXJnZXIgdmFsdWUsIHNvIHRoYXQgeW91IGNhbiBhbHdheXMgc2VlCitzb21lIGNvbnRleHQgYXJvdW5kIHRoZSBjdXJzb3IuICBJZiAnc2Nyb2xsb2ZmJyBpcyBiaWdnZXIgdGhhbiBoYWxmIHRoZSB3aW5kb3cKK2hlaWdodCwgdGhlIGN1cnNvciB3aWxsIGFsd2F5cyBiZSBpbiB0aGUgbWlkZGxlIGFuZCB0aGUgdGV4dCBpcyBzY3JvbGxlZCB3aGVuCit0aGUgY3Vyc29yIGlzIG1vdmVkIHVwL2Rvd24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU21vb3RoIHNjcm9sbGluZwkJCQkJKnNjcm9sbC1zbW9vdGgqCisKK0lmIHlvdSBsaWtlIHRoZSBzY3JvbGxpbmcgdG8gZ28gYSBiaXQgc21vb3RoZXIsIHlvdSBjYW4gdXNlIHRoZXNlIG1hcHBpbmdzOiA+CisJOm1hcCA8Qy1VPiA8Qy1ZPjxDLVk+PEMtWT48Qy1ZPjxDLVk+PEMtWT48Qy1ZPjxDLVk+PEMtWT48Qy1ZPjxDLVk+PEMtWT48Qy1ZPjxDLVk+PEMtWT48Qy1ZPgorCTptYXAgPEMtRD4gPEMtRT48Qy1FPjxDLUU+PEMtRT48Qy1FPjxDLUU+PEMtRT48Qy1FPjxDLUU+PEMtRT48Qy1FPjxDLUU+PEMtRT48Qy1FPjxDLUU+PEMtRT4KKworKFR5cGUgdGhpcyBsaXRlcmFsbHksIG1ha2Ugc3VyZSB0aGUgJzwnIGZsYWcgaXMgbm90IGluICdjcG9wdGlvbnMnKS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3JyZWN0aW5nIGNvbW1vbiB0eXBpbmcgbWlzdGFrZXMJCQkqdHlwZS1taXN0YWtlcyoKKworV2hlbiB0aGVyZSBhcmUgYSBmZXcgd29yZHMgdGhhdCB5b3Uga2VlcCBvbiB0eXBpbmcgaW4gdGhlIHdyb25nIHdheSwgbWFrZQorYWJicmV2aWF0aW9ucyB0aGF0IGNvcnJlY3QgdGhlbS4gIEZvciBleGFtcGxlOiA+CisJOmFiIHRlaCB0aGUKKwk6YWIgZnJvIGZvcgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvdW50aW5nIHdvcmRzLCBsaW5lcywgZXRjLgkJCQkqY291bnQtaXRlbXMqCisKK1RvIGNvdW50IGhvdyBvZnRlbiBhbnkgcGF0dGVybiBvY2N1cnMgaW4gYSBidWZmZXIsIHNldCAncmVwb3J0JyB0byAwLCBhbmQgdXNlCit0aGUgc3Vic3RpdHV0ZSBjb21tYW5kIHRvIHJlcGxhY2UgdGhlIHBhdHRlcm4gd2l0aCBpdHNlbGYuICBUaGUgcmVwb3J0ZWQKK251bWJlciBvZiBzdWJzdGl0dXRpb25zIGlzIHRoZSBudW1iZXIgb2YgaXRlbXMuICBFeGFtcGxlczogPgorCisJOnNldCByZXBvcnQ9MAorCTolcy8uLyYvZwkJY2hhcmFjdGVycworCTolcy9caVwrLyYvZwkJd29yZHMKKwk6JXMvXgkJCWxpbmVzCisJOiVzL3RoZS8mL2cJCSJ0aGUiIGFueXdoZXJlCisJOiVzL1w8dGhlXD4vJi9nCQkidGhlIiBhcyBhIHdvcmQKKworWW91IG1pZ2h0IHdhbnQgdG8gcmVzZXQgJ2hsc2VhcmNoJyBvciBkbyAiOm5vaGxzZWFyY2giLgorCitUaGlzIGRvZXMgbm90IHdvcmsgaWYgdGhlICdtb2RpZmlhYmxlJyBvcHRpb24gaXMgb2ZmLiAgQW4gYWx0ZXJuYXRpdmUgaXMgdXNpbmcKK3x2X2dfQ1RSTC1HfCBpbiBWaXN1YWwgbW9kZS4KKworCQkJCQkJCSpjb3VudC1ieXRlcyoKK0lmIHlvdSB3YW50IHRvIGNvdW50IGJ5dGVzLCB5b3UgY2FuIHVzZSB0aGlzOgorCisJVmlzdWFsbHkgc2VsZWN0IHRoZSBjaGFyYWN0ZXJzIChibG9jayBpcyBhbHNvIHBvc3NpYmxlKQorCVVzZSAieSIgdG8geWFuayB0aGUgY2hhcmFjdGVycworCVVzZSB0aGUgc3RybGVuKCkgZnVuY3Rpb246ID4KKwkJOmVjaG8gc3RybGVuKEAiKQorQSBsaW5lIGJyZWFrIGlzIGNvdW50ZWQgZm9yIG9uZSBieXRlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1Jlc3RvcmluZyB0aGUgY3Vyc29yIHBvc2l0aW9uCQkJCSpyZXN0b3JlLXBvc2l0aW9uKgorCitTb21ldGltZXMgeW91IHdhbnQgdG8gd3JpdGUgYSBtYXBwaW5nIHRoYXQgbWFrZXMgYSBjaGFuZ2Ugc29tZXdoZXJlIGluIHRoZQorZmlsZSBhbmQgcmVzdG9yZXMgdGhlIGN1cnNvciBwb3NpdGlvbiwgd2l0aG91dCBzY3JvbGxpbmcgdGhlIHRleHQuICBGb3IKK2V4YW1wbGUsIHRvIGNoYW5nZSB0aGUgZGF0ZSBtYXJrIGluIGEgZmlsZTogPgorICAgOm1hcCA8RjI+IG1zSG10Z2cvTGFzdCBbY0NdaGFuZ2U6XHMqL2UrMTxDUj4iX0QiPXN0cmZ0aW1lKCIlWSAlYiAlZCIpPENSPnAndHp0YHMKKworQnJlYWtpbmcgdXAgc2F2aW5nIHRoZSBwb3NpdGlvbjoKKwltcwlzdG9yZSBjdXJzb3IgcG9zaXRpb24gaW4gdGhlICdzJyBtYXJrCisJSAlnbyB0byB0aGUgZmlyc3QgbGluZSBpbiB0aGUgd2luZG93CisJbXQJc3RvcmUgdGhpcyBwb3NpdGlvbiBpbiB0aGUgJ3QnIG1hcmsKKworQnJlYWtpbmcgdXAgcmVzdG9yaW5nIHRoZSBwb3NpdGlvbjoKKwkndAlnbyB0byB0aGUgbGluZSBwcmV2aW91c2x5IGF0IHRoZSB0b3Agb2YgdGhlIHdpbmRvdworCXp0CXNjcm9sbCB0byBtb3ZlIHRoaXMgbGluZSB0byB0aGUgdG9wIG9mIHRoZSB3aW5kb3cKKwlgcwlqdW1wIHRvIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVuYW1pbmcgZmlsZXMJCQkJCQkqcmVuYW1lLWZpbGVzKgorCitTYXkgSSBoYXZlIGEgZGlyZWN0b3J5IHdpdGggdGhlIGZvbGxvd2luZyBmaWxlcyBpbiB0aGVtIChkaXJlY3RvcnkgcGlja2VkIGF0CityYW5kb20gOi0pOgorCitidWZmZXIuYworY2hhcnNldC5jCitkaWdyYXBoLmMKKy4uLgorCithbmQgSSB3YW50IHRvIHJlbmFtZSAqLmMgKi5ibGEuICBJJ2QgZG8gaXQgbGlrZSB0aGlzOiA+CisKKwkkIHZpbQorCTpyISBscyAqLmMKKwk6JXMvXCguKlwpLmMvbXYgJiBcMS5ibGEKKwk6dyAhc2gKKwk6cSEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTcGVlZGluZyB1cCBleHRlcm5hbCBjb21tYW5kcwkJCQkqc3BlZWQtdXAqCisKK0luIHNvbWUgc2l0dWF0aW9ucywgZXhlY3V0aW9uIG9mIGFuIGV4dGVybmFsIGNvbW1hbmQgY2FuIGJlIHZlcnkgc2xvdy4gIFRoaXMKK2NhbiBhbHNvIHNsb3cgZG93biB3aWxkY2FyZCBleHBhbnNpb24gb24gVW5peC4gIEhlcmUgYXJlIGEgZmV3IHN1Z2dlc3Rpb25zIHRvCitpbmNyZWFzZSB0aGUgc3BlZWQuCisKK0lmIHlvdXIgLmNzaHJjIChvciBvdGhlciBmaWxlLCBkZXBlbmRpbmcgb24gdGhlIHNoZWxsIHVzZWQpIGlzIHZlcnkgbG9uZywgeW91CitzaG91bGQgc2VwYXJhdGUgaXQgaW50byBhIHNlY3Rpb24gZm9yIGludGVyYWN0aXZlIHVzZSBhbmQgYSBzZWN0aW9uIGZvcgorbm9uLWludGVyYWN0aXZlIHVzZSAob2Z0ZW4gY2FsbGVkIHNlY29uZGFyeSBzaGVsbHMpLiAgV2hlbiB5b3UgZXhlY3V0ZSBhCitjb21tYW5kIGZyb20gVmltIGxpa2UgIjohbHMiLCB5b3UgZG8gbm90IG5lZWQgdGhlIGludGVyYWN0aXZlIHRoaW5ncyAoZm9yCitleGFtcGxlLCBzZXR0aW5nIHRoZSBwcm9tcHQpLiAgUHV0IHRoZSBzdHVmZiB0aGF0IGlzIG5vdCBuZWVkZWQgYWZ0ZXIgdGhlc2UKK2xpbmVzOiA+CisKKwlpZiAoJD9wcm9tcHQgPT0gMCkgdGhlbgorCQlleGl0IDAKKwllbmRpZgorCitBbm90aGVyIHdheSBpcyB0byBpbmNsdWRlIHRoZSAiLWYiIGZsYWcgaW4gdGhlICdzaGVsbCcgb3B0aW9uLCBlLmcuOiA+CisKKwk6c2V0IHNoZWxsPWNzaFwgLWYKKworKHRoZSBiYWNrc2xhc2ggaXMgbmVlZGVkIHRvIGluY2x1ZGUgdGhlIHNwYWNlIGluIHRoZSBvcHRpb24pLgorVGhpcyB3aWxsIG1ha2UgY3NoIGNvbXBsZXRlbHkgc2tpcCB0aGUgdXNlIG9mIHRoZSAuY3NocmMgZmlsZS4gIFRoaXMgbWF5IGNhdXNlCitzb21lIHRoaW5ncyB0byBzdG9wIHdvcmtpbmcgdGhvdWdoLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1VzZWZ1bCBtYXBwaW5ncwkJCQkJCSp1c2VmdWwtbWFwcGluZ3MqCisKK0hlcmUgYXJlIGEgZmV3IG1hcHBpbmdzIHRoYXQgc29tZSBwZW9wbGUgbGlrZSB0byB1c2UuCisKKwkJCQkJCQkqbWFwLWJhY2t0aWNrKiAgPgorCTptYXAgJyBgCitNYWtlIHRoZSBzaW5nbGUgcXVvdGUgd29yayBsaWtlIGEgYmFja3RpY2suICBQdXRzIHRoZSBjdXJzb3Igb24gdGhlIGNvbHVtbiBvZgorYSBtYXJrLCBpbnN0ZWFkIG9mIGdvaW5nIHRvIHRoZSBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIGluIHRoZSBsaW5lLgorCisJCQkJCQkJKmVtYWNzLWtleXMqCitGb3IgRW1hY3Mtc3R5bGUgZWRpdGluZyBvbiB0aGUgY29tbWFuZC1saW5lOiA+CisJIiBzdGFydCBvZiBsaW5lCisJOmNub3JlbWFwIDxDLUE+CQk8SG9tZT4KKwkiIGJhY2sgb25lIGNoYXJhY3RlcgorCTpjbm9yZW1hcCA8Qy1CPgkJPExlZnQ+CisJIiBkZWxldGUgY2hhcmFjdGVyIHVuZGVyIGN1cnNvcgorCTpjbm9yZW1hcCA8Qy1EPgkJPERlbD4KKwkiIGVuZCBvZiBsaW5lCisJOmNub3JlbWFwIDxDLUU+CQk8RW5kPgorCSIgZm9yd2FyZCBvbmUgY2hhcmFjdGVyCisJOmNub3JlbWFwIDxDLUY+CQk8UmlnaHQ+CisJIiByZWNhbGwgbmV3ZXIgY29tbWFuZC1saW5lCisJOmNub3JlbWFwIDxDLU4+CQk8RG93bj4KKwkiIHJlY2FsbCBwcmV2aW91cyAob2xkZXIpIGNvbW1hbmQtbGluZQorCTpjbm9yZW1hcCA8Qy1QPgkJPFVwPgorCSIgYmFjayBvbmUgd29yZAorCTpjbm9yZW1hcCA8RXNjPjxDLUI+CTxTLUxlZnQ+CisJIiBmb3J3YXJkIG9uZSB3b3JkCisJOmNub3JlbWFwIDxFc2M+PEMtRj4JPFMtUmlnaHQ+CisKK05PVEU6IFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgJzwnIGZsYWcgaXMgZXhjbHVkZWQgZnJvbSAnY3BvcHRpb25zJy4gfDw+fAorCisJCQkJCQkJKmZvcm1hdC1idWxsZXQtbGlzdCoKK1RoaXMgbWFwcGluZyB3aWxsIGZvcm1hdCBhbnkgYnVsbGV0IGxpc3QuICBJdCByZXF1aXJlcyB0aGF0IHRoZXJlIGlzIGFuIGVtcHR5CitsaW5lIGFib3ZlIGFuZCBiZWxvdyBlYWNoIGxpc3QgZW50cnkuICBUaGUgZXhwcmVzc2lvbiBjb21tYW5kcyBhcmUgdXNlZCB0bworYmUgYWJsZSB0byBnaXZlIGNvbW1lbnRzIHRvIHRoZSBwYXJ0cyBvZiB0aGUgbWFwcGluZy4gPgorCisJOmxldCBtID0gICAgICI6bWFwIF9mICA6c2V0IGFpPENSPiIgICAgIiBuZWVkICdhdXRvaW5kZW50JyBzZXQKKwk6bGV0IG0gPSBtIC4gIntPPEVzYz4iCQkgICAgICAiIGFkZCBlbXB0eSBsaW5lIGFib3ZlIGl0ZW0KKwk6bGV0IG0gPSBtIC4gIn17KV5XIgkJICAgICAgIiBtb3ZlIHRvIHRleHQgYWZ0ZXIgYnVsbGV0CisJOmxldCBtID0gbSAuICJpICAgICA8Q1I+ICAgICA8RXNjPiIgICAgIiBhZGQgc3BhY2UgZm9yIGluZGVudAorCTpsZXQgbSA9IG0gLiAiZ3F9IgkJICAgICAgIiBmb3JtYXQgdGV4dCBhZnRlciB0aGUgYnVsbGV0CisJOmxldCBtID0gbSAuICJ7ZGQiCQkgICAgICAiIHJlbW92ZSB0aGUgZW1wdHkgbGluZQorCTpsZXQgbSA9IG0gLiAiNWxESiIJCSAgICAgICIgcHV0IHRleHQgYWZ0ZXIgYnVsbGV0CisJOmV4ZWN1dGUgbQkJCSAgICAgIHwiIGRlZmluZSB0aGUgbWFwcGluZworCisoPD4gbm90YXRpb24gfDw+fC4gIE5vdGUgdGhhdCB0aGlzIGlzIGFsbCB0eXBlZCBsaXRlcmFsbHkuICBeVyBpcyAiXiIgIlciLCBub3QKK0NUUkwtVy4gIFlvdSBjYW4gY29weS9wYXN0ZSB0aGlzIGludG8gVmltIGlmICc8JyBpcyBub3QgaW5jbHVkZWQgaW4KKydjcG9wdGlvbnMnKQorCitOb3RlIHRoYXQgdGhlIGxhc3QgY29tbWVudCBzdGFydHMgd2l0aCB8IiwgYmVjYXVzZSB0aGUgIjpleGVjdXRlIiBjb21tYW5kCitkb2Vzbid0IGFjY2VwdCBhIGNvbW1lbnQgZGlyZWN0bHkuCisKK1lvdSBhbHNvIG5lZWQgdG8gc2V0ICd0ZXh0d2lkdGgnIHRvIGEgbm9uLXplcm8gdmFsdWUsIGUuZy4sID4KKwk6c2V0IHR3PTcwCisKK0EgbWFwcGluZyB0aGF0IGRvZXMgYWJvdXQgdGhlIHNhbWUsIGJ1dCB0YWtlcyB0aGUgaW5kZW50IGZvciB0aGUgbGlzdCBmcm9tIHRoZQorZmlyc3QgbGluZSAoTm90ZTogdGhpcyBtYXBwaW5nIGlzIGEgc2luZ2xlIGxvbmcgbGluZSB3aXRoIGEgbG90IG9mIHNwYWNlcyk6ID4KKwk6bWFwIF9mIDpzZXQgYWk8Q1I+fXthICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFc2M+V1dtbWtEYG1pPENSPjxFc2M+a2tkZHBKZ3F9J21KTzxFc2M+agorPAorCQkJCQkJCSpjb2xsYXBzZSoKK1RoZXNlIHR3byBtYXBwaW5ncyByZWR1Y2UgYSBzZXF1ZW5jZSBvZiBlbXB0eSAoO2IpIG9yIGJsYW5rICg7bikgbGluZXMgaW50byBhCitzaW5nbGUgbGluZSA+CisgICAgOm1hcCA7YiAgIEdvWjxFc2M+OmcvXiQvLiwvLi8tajxDUj5HZGQKKyAgICA6bWFwIDtuICAgR29aPEVzYz46Zy9eWyA8VGFiPl0qJC8uLC9bXiA8VGFiPl0vLWo8Q1I+R2RkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29tcHJlc3NpbmcgdGhlIGhlbHAgZmlsZXMJCQkJKmd6aXAtaGVscGZpbGUqCisKK0ZvciB0aG9zZSBvZiB5b3Ugd2hvIGFyZSByZWFsbHkgc2hvcnQgb24gZGlzayBzcGFjZSwgeW91IGNhbiBjb21wcmVzcyB0aGUgaGVscAorZmlsZXMgYW5kIHN0aWxsIGJlIGFibGUgdG8gdmlldyB0aGVtIHdpdGggVmltLiAgVGhpcyBtYWtlcyBhY2Nlc3NpbmcgdGhlIGhlbHAKK2ZpbGVzIGEgYml0IHNsb3dlciBhbmQgcmVxdWlyZXMgdGhlICJnemlwIiBwcm9ncmFtLgorCisoMSkgQ29tcHJlc3MgYWxsIHRoZSBoZWxwIGZpbGVzOiAiZ3ppcCBkb2MvKi50eHQiLgorCisoMikgRWRpdCAiZG9jL3RhZ3MiIGFuZCBjaGFuZ2UgdGhlICIudHh0IiB0byAiLnR4dC5neiI6ID4KKwk6JXM9XChcdC4qXC50eHRcKVx0PVwxLmd6XHQ9CisKKygzKSBBZGQgdGhpcyBsaW5lIHRvIHlvdXIgdmltcmM6ID4KKwlzZXQgaGVscGZpbGU9e2Rpcm5hbWV9L2hlbHAudHh0Lmd6CisKK1doZXJlIHtkaXJuYW1lfSBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBoZWxwIGZpbGVzIGFyZS4gIFRoZSB8Z3ppcHwgcGx1Z2luCit3aWxsIHRha2UgY2FyZSBvZiBkZWNvbXByZXNzaW5nIHRoZSBmaWxlcy4KK1lvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0ICRWSU1SVU5USU1FIGlzIHNldCB0byB3aGVyZSB0aGUgb3RoZXIgVmltIGZpbGVzIGFyZSwKK3doZW4gdGhleSBhcmUgbm90IGluIHRoZSBzYW1lIGxvY2F0aW9uIGFzIHRoZSBjb21wcmVzc2VkICJkb2MiIGRpcmVjdG9yeS4gIFNlZQorfCRWSU1SVU5USU1FfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitFeGVjdXRpbmcgc2hlbGwgY29tbWFuZHMgaW4gYSB3aW5kb3cJCQkqc2hlbGwtd2luZG93KgorCitUaGVyZSBoYXZlIGJlZW4gcXVlc3Rpb25zIGZvciB0aGUgcG9zc2liaWxpdHkgdG8gZXhlY3V0ZSBhIHNoZWxsIGluIGEgd2luZG93CitpbnNpZGUgVmltLiAgVGhlIGFuc3dlcjogeW91IGNhbid0ISAgSW5jbHVkaW5nIHRoaXMgd291bGQgYWRkIGEgbG90IG9mIGNvZGUgdG8KK1ZpbSwgd2hpY2ggaXMgYSBnb29kIHJlYXNvbiBub3QgdG8gZG8gdGhpcy4gIEFmdGVyIGFsbCwgVmltIGlzIGFuIGVkaXRvciwgaXQKK2lzIG5vdCBzdXBwb3NlZCB0byBkbyBub24tZWRpdGluZyB0YXNrcy4gIEhvd2V2ZXIsIHRvIGdldCBzb21ldGhpbmcgbGlrZSB0aGlzLAoreW91IG1pZ2h0IHRyeSBzcGxpdHRpbmcgeW91ciB0ZXJtaW5hbCBzY3JlZW4gb3IgZGlzcGxheSB3aW5kb3cgd2l0aCB0aGUKKyJzcGxpdHZ0IiBwcm9ncmFtLiAgWW91IGNhbiBwcm9iYWJseSBmaW5kIGl0IG9uIHNvbWUgZnRwIHNlcnZlci4gIFRoZSBwZXJzb24KK3RoYXQga25vd3MgbW9yZSBhYm91dCB0aGlzIGlzIFNhbSBMYW50aW5nYSA8c2xvdWtlbkBjcy51Y2RhdmlzLmVkdT4uCitBbiBhbHRlcm5hdGl2ZSBpcyB0aGUgIndpbmRvdyIgY29tbWFuZCwgZm91bmQgb24gQlNEIFVuaXggc3lzdGVtcywgd2hpY2gKK3N1cHBvcnRzIG11bHRpcGxlIG92ZXJsYXBwZWQgd2luZG93cy4gIE9yIHRoZSAic2NyZWVuIiBwcm9ncmFtLCBmb3VuZCBhdAord3d3LnVuaS1lcmxhbmdlbi5kZSwgd2hpY2ggc3VwcG9ydHMgYSBzdGFjayBvZiB3aW5kb3dzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0hleCBlZGl0aW5nCQkJCQkqaGV4LWVkaXRpbmcqICp1c2luZy14eGQqCisKK1NlZSBzZWN0aW9uIHwyMy40fCBvZiB0aGUgdXNlciBtYW51YWwuCisKK0lmIG9uZSBoYXMgYSBwYXJ0aWN1bGFyIGV4dGVuc2lvbiB0aGF0IG9uZSB1c2VzIGZvciBiaW5hcnkgZmlsZXMgKHN1Y2ggYXMgZXhlLAorYmluLCBldGMpLCB5b3UgbWF5IGZpbmQgaXQgaGVscGZ1bCB0byBhdXRvbWF0ZSB0aGUgcHJvY2VzcyB3aXRoIHRoZSBmb2xsb3dpbmcKK2JpdCBvZiBhdXRvY21kcyBmb3IgeW91ciA8LnZpbXJjPi4gIENoYW5nZSB0aGF0ICIqLmJpbiIgdG8gd2hhdGV2ZXIKK2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4dGVuc2lvbihzKSB5b3UgZmluZCB5b3Vyc2VsZiB3YW50aW5nIHRvIGVkaXQ6ID4KKworCSIgdmltIC1iIDogZWRpdCBiaW5hcnkgdXNpbmcgeHhkLWZvcm1hdCEKKwlhdWdyb3VwIEJpbmFyeQorCSAgYXUhCisJICBhdSBCdWZSZWFkUHJlICAqLmJpbiBsZXQgJmJpbj0xCisJICBhdSBCdWZSZWFkUG9zdCAqLmJpbiBpZiAmYmluIHwgJSF4eGQKKwkgIGF1IEJ1ZlJlYWRQb3N0ICouYmluIHNldCBmdD14eGQgfCBlbmRpZgorCSAgYXUgQnVmV3JpdGVQcmUgKi5iaW4gaWYgJmJpbiB8ICUheHhkIC1yCisJICBhdSBCdWZXcml0ZVByZSAqLmJpbiBlbmRpZgorCSAgYXUgQnVmV3JpdGVQb3N0ICouYmluIGlmICZiaW4gfCAlIXh4ZAorCSAgYXUgQnVmV3JpdGVQb3N0ICouYmluIHNldCBub21vZCB8IGVuZGlmCisJYXVncm91cCBFTkQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVc2luZyA8PiBub3RhdGlvbiBpbiBhdXRvY29tbWFuZHMJCQkqYXV0b2NtZC08PioKKworVGhlIDw+IG5vdGF0aW9uIGlzIG5vdCByZWNvZ25pemVkIGluIHRoZSBhcmd1bWVudCBvZiBhbiA6YXV0b2NtZC4gIFRvIGF2b2lkCitoYXZpbmcgdG8gdXNlIHNwZWNpYWwgY2hhcmFjdGVycywgeW91IGNvdWxkIHVzZSBhIHNlbGYtZGVzdHJveWluZyBtYXBwaW5nIHRvCitnZXQgdGhlIDw+IG5vdGF0aW9uIGFuZCB0aGVuIGNhbGwgdGhlIG1hcHBpbmcgZnJvbSB0aGUgYXV0b2NtZC4gIEV4YW1wbGU6CisKKwkJCQkJCSptYXAtc2VsZi1kZXN0cm95KiAgPgorICIgVGhpcyBpcyBmb3IgYXV0b21hdGljYWxseSBhZGRpbmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gdGhlIG1lbnUgbGlzdC4KKyAiIEl0IHVzZXMgYSBzZWxmLWRlc3Ryb3lpbmcgbWFwcGluZyEKKyAiIDEuIHVzZSBhIGxpbmUgaW4gdGhlIGJ1ZmZlciB0byBjb252ZXJ0IHRoZSAnZG90cycgaW4gdGhlIGZpbGUgbmFtZSB0byBcLgorICIgMi4gc3RvcmUgdGhhdCBpbiByZWdpc3RlciAnIicKKyAiIDMuIGFkZCB0aGF0IG5hbWUgdG8gdGhlIEJ1ZmZlcnMgbWVudSBsaXN0CisgIiBXQVJOSU5HOiB0aGlzIGRvZXMgaGF2ZSBzb21lIHNpZGUgZWZmZWN0cywgbGlrZSBvdmVyd3JpdGluZyB0aGUKKyAiIGN1cnJlbnQgcmVnaXN0ZXIgY29udGVudHMgYW5kIHJlbW92aW5nIGFueSBtYXBwaW5nIGZvciB0aGUgImkiIGNvbW1hbmQuCisgIgorIGF1dG9jbWQgQnVmTmV3RmlsZSxCdWZSZWFkUHJlICogbm1hcCBpIDpudW5tYXAgaTxDUj5PPEMtUj4lPEVzYz46LmcvXC4vcy9cLi9cXC4vZzxDUj4wIjl5JHU6bWVudSBCdWZmZXJzLjxDLVI+OSA6YnVmZmVyIDxDLVI+JTxDLVY+PENSPjxDUj4KKyBhdXRvY21kIEJ1Zk5ld0ZpbGUsQnVmUmVhZFByZSAqIG5vcm1hbCBpCisKK0Fub3RoZXIgbWV0aG9kLCBwZXJoYXBzIGJldHRlciwgaXMgdG8gdXNlIHRoZSAiOmV4ZWN1dGUiIGNvbW1hbmQuICBJbiB0aGUKK3N0cmluZyB5b3UgY2FuIHVzZSB0aGUgPD4gbm90YXRpb24gYnkgcHJlY2VkaW5nIGl0IHdpdGggYSBiYWNrc2xhc2guICBEb24ndAorZm9yZ2V0IHRvIGRvdWJsZSB0aGUgbnVtYmVyIG9mIGV4aXN0aW5nIGJhY2tzbGFzaGVzIGFuZCBwdXQgYSBiYWNrc2xhc2ggYmVmb3JlCisnIicuCis+CisgIGF1dG9jbWQgQnVmTmV3RmlsZSxCdWZSZWFkUHJlICogZXhlICJub3JtYWwgT1w8Qy1SPiVcPEVzYz46LmcvXFwuL3MvXFwuL1xcXFwuL2dcPENSPjBcIjl5JHU6bWVudSBCdWZmZXJzLlw8Qy1SPjkgOmJ1ZmZlciBcPEMtUj4lXDxDLVY+XDxDUj5cPENSPiIKKworRm9yIGEgcmVhbCBidWZmZXIgbWVudSwgdXNlciBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgKHNlZSB8OmZ1bmN0aW9ufCksIGJ1dAordGhlbiB0aGUgPD4gbm90YXRpb24gaXNuJ3QgdXNlZCwgd2hpY2ggZGVmZWF0cyB1c2luZyBpdCBhcyBhbiBleGFtcGxlIGhlcmUuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90b2RvLnR4dCBiL3J1bnRpbWUvZG9jL3RvZG8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4Yjk1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy90b2RvLnR4dApAQCAtMCwwICsxLDM0NDEgQEAKKyp0b2RvLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMTMKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhcgorCisKKwkJCSAgICAgIFRPRE8gbGlzdCBmb3IgVmltCQkqdG9kbyoKKworVGhpcyBpcyBhIHZlZWVlcnkgbG9uZyBsaXN0IG9mIGtub3duIGJ1Z3MsIGN1cnJlbnQgd29yayBhbmQgZGVzaXJlZAoraW1wcm92ZW1lbnRzLiAgVG8gbWFrZSBpdCBhIGxpdHRsZSBiaXQgYWNjZXNzaWJsZSwgdGhlIGl0ZW1zIGFyZSBncm91cGVkIGJ5CitzdWJqZWN0LiAgSW4gdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgbGluZSBhIGNsYXNzaWZpY2F0aW9uIGlzIHVzZWQgdG8gYmUgYWJsZQordG8gbG9vayBmb3IgInRoZSBuZXh0IHRoaW5nIHRvIGRvIjoKKworUHJpb3JpdHkgY2xhc3NpZmljYXRpb246Cis5ICAgbmV4dCBwb2ludCByZWxlYXNlCis4ICAgbmV4dCByZWxlYXNlCis3ICAgYXMgc29vbiBhcyBwb3NzaWJsZQorNiAgIHNvb24KKzUgICBzaG91bGQgYmUgaW5jbHVkZWQKKzQgICBuaWNlIHRvIGhhdmUKKzMgICBjb25zaWRlciBpbmNsdWRpbmcKKzIgICBtYXliZSBub3QKKzEgICBwcm9iYWJseSBub3QKKy0gICB1bmNsYXNzaWZpZWQKKworCQkJCQkJICAgICp2b3Rlcy1mb3ItY2hhbmdlcyoKK1NlZSB8ZGV2ZWxvcC50eHR8IGZvciBkZXZlbG9wbWVudCBwbGFucy4gIFlvdSBjYW4gdm90ZSBmb3Igd2hpY2ggaXRlbXMgc2hvdWxkCitiZSB3b3JrZWQgb24sIGJ1dCBvbmx5IGlmIHlvdSBzcG9uc29yIFZpbSBkZXZlbG9wbWVudC4gIFNlZSB8c3BvbnNvcnwuCisKKwkJCQkJCQkqa25vd24tYnVncyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tIEtub3duIGJ1Z3MgYW5kIGN1cnJlbnQgd29yayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHVEsyOiBmb250IGRpYWxvZyB1c2VzIGZvbnQgc2l6ZSB6ZXJvIHdoZW4gJ2d1aWZvbnQnIGlzICJDb3VyaWVyIi4gIFBhdGNoIGZyb20KK1lhc3VoaXJvIE1hdHN1bW90bywgMjAwNCBKdW5lIDguCisKK1B5dGhvbiBpbmRlbnQ6ICMgYXNlcjogc3RpbGwgYWRkcyBleHRyYSBpbmRlbnQuCisKKworRm9yIHZlcnNpb24gNy4wOgorLSAgIEluY2x1ZGUgbWFueSBQQVRDSEVTOgorICAgIC0gICBJbmNsdWRlIHRoZSBrdmltIHBhdGNoLiBodHRwOi8vZnJlZW51eC5vcmcvdmltLyAoTWlja2FlbCBNYXJjaGFuZCkKKwlEbyBub3QgYWRkIFF0b3BpYSB5ZXQsIGl0IGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwuCistICAgbmV3IERBVEEgVFlQRVM6IGxpc3RzLCBkaWN0aW9uYXJpZXMgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZXMuCisgICAgQWRkIHR5cGUgY2hlY2tpbmc/ICBTZWUgfi92aW0vaWRlYXMudHh0LgorLSAgIEFkZCBTUEVMTENIRUNLRVIsIHdpdGggZWFzeSB0byBhZGQgc3VwcG9ydCBmb3IgbWFueSBsYW5ndWFnZXMuCistICAgUkVGQUNUT1JJTkc6IFRoZSBtYWluKCkgZnVuY3Rpb24gaXMgdmVyeSBsb25nLiAgTW92ZSBwYXJ0cyB0byBzZXBhcmF0ZQorICAgIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBsb29wcy4gIElkZWFzIGZyb20gV2FsdGVyIEJyaXNjb2UgKDIwMDMgQXByIDMsIDIwMDQKKyAgICBGZWIgOSkuCistICAgU3RvcmUgbWVzc2FnZXMgdG8gYWxsb3cgU0NST0xMSU5HIEJBQ0sgZm9yIGFsbCBjb21tYW5kcy4gIEFuZCBvdGhlciAibGVzcyIKKyAgICBsaWtlIGNvbW1hbmRzLgorLSAgICJJTlRFTExJU0VOU0UiLiAgRmlyc3QgY2xlYW51cCB0aGUgSW5zZXJ0LW1vZGUgY29tcGxldGlvbi4KKwlodHRwOi8vd3d3LnZpbS5vcmcvc2NyaXB0cy9zY3JpcHQucGhwP3NjcmlwdF9pZD03NDcKKwlodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2luc2VudmltCistICAgUEVSU0lTVEVOVCBVTkRPOiBzdG9yZSB1bmRvIGluIGEgZmlsZS4KKyAgICBTdXBwb3J0IG11bHRpcGxlIHRocmVhZHMuICBTaG93IHRoZSBsaXN0IG9mIGNoYW5nZXMgaW4gYSB3aW5kb3cgdG8gYmUgYWJsZQorICAgIHRvIHNlbGVjdCBhIHZlcnNpb24uCis3ICAgU1dBUCBGSUxFIENIQU5HRTogV2hlbiBhIGRvcyBmb3JtYXQgZmlsZSB3YXMgZWRpdGVkIHdpdGggIjplICsrZmY9dW5peCIsCisgICAgVmltIGlzIGtpbGxlZCBhbmQgdHJ5aW5nIHRvIHJlY292ZXIgdGhlIGZpbGUsICdmZicgd2lsbCBiZSBkb3MuICBTYW1lIGZvcgorICAgIG5vbi1kZWZhdWx0IGZpbGVlbmNvZGluZy4gIChNaXJvc2xhdyBEb2JyemFuc2tpLU5ldW1hbm4sIEp1bCAxNykKKyAgICBTaG91bGQgc3RvcmUgdGhlIHZhbHVlcyBpbiBibG9jayAwIG9mIHRoZSBzd2FwIGZpbGUsIGJ1dCB0aGF0IGlzIGFuCisgICAgaW5jb21wYXRpYmxlIGNoYW5nZS4KKzcgICBTdXBwb3J0IFdJTkRPVyBUQUJTLiAgV29ya3MgbGlrZSBzZXZlcmFsIHBhZ2VzLCBlYWNoIHdpdGggdGhlaXIgb3duCisgICAgc3BsaXQgd2luZG93cy4gIFBhdGNoIGZvciBHVEsgMS4yIGZyb20gQ2hyaXN0aWFuIE1pY2hvbiwgMjAwNCBKYW4gNi4KKyAgICBBbHNvIGZvciB0aGUgY29uc29sZSEKKy0gICBFTUJFRERJTkc6IE1ha2UgaXQgcG9zc2libGUgdG8gcnVuIFZpbSBpbnNpZGUgYSB3aW5kb3cgb2YgYW5vdGhlciBwcm9ncmFtLgorICAgIEZvciBYd2luZG93cyB0aGlzIGNhbiBiZSBkb25lIHdpdGggWFJlcGFyZW50V2luZG93KCkuCisgICAgRm9yIEdUSyBOZWlsIEJpcmQgaGFzIGEgcGF0Y2ggdG8gdXNlIFZpbSBsaWtlIGEgd2lkZ2V0LgorLSAgIEFkZCBDT0xVTU4gTlVNQkVSUyB0byAiOiIgY29tbWFuZHMgIjpsaW5lMSxsaW5lMltjb2wxLGNvbDJdY21kIi4gIEJsb2NrCisgICAgY2FuIGJlIHNlbGVjdGVkIHdpdGggQ1RSTC1WLiAgQWxsb3cgJyQnIChlbmQgb2YgbGluZSkgZm9yIGNvbDIuCistICAgQWRkIERFQlVHR0VSIElOVEVSRkFDRS4gIEltcGxlbWVudGF0aW9uIGZvciBnZGIgYnkgWGF2aWVyIGRlIEdheWUsCisgICAgYXNzaXN0ZWQgYnkgTWlrb2xhaiBNYWNob3dza2kuICBTaG91bGQgd29yayBsaWtlIGFuIElERS4gIFRyeSB0byBrZWVwIGl0CisgICAgZ2VuZXJpYy4gIEFsc28gZm91bmQgaGVyZTogaHR0cDovL3NrYXdpbmEuZXUub3JnL21pa29sYWovdmltZ2RiCisgICAgVG8gYmUgYWJsZSB0byBzdGFydCB0aGUgZGVidWdnZXIgZnJvbSBpbnNpZGUgVmltOiBGb3IgR1VJIHJ1biBhIHByb2dyYW0KKyAgICB3aXRoIGEgbmV0YmVhbnMgY29ubmVjdGlvbjsgZm9yIGNvbnNvbGU6IHN0YXJ0IGEgcHJvZ3JhbSB0aGF0IHNwbGl0cyB0aGUKKyAgICB0ZXJtaW5hbCwgcnVucyB0aGUgZGVidWdnZXIgaW4gb25lIHdpbmRvdyBhbmQgcmVjb25uZWN0IFZpbSBJL08gdG8gdGhlCisgICAgb3RoZXIgd2luZG93LgorICAgIFdpc2hlcyBmb3IgTmV0QmVhbnMgY29tbWFuZHM6CisgICAgLSBtYWtlIGl0IHBvc3NpYmxlIHRvIGhhdmUgJ2RlZmluZUFubm9UeXBlJyBhbHNvIGhhbmRsZSB0ZXJtaW5hbCBjb2xvcnMuCisgICAgLSBzZW5kICdiYWxsb29uVGV4dCcgZXZlbnRzIGZvciB0aGUgY3Vyc29yIHBvc2l0aW9uICh1c2luZyBDdXJzb3JIb2xkID8pCisgICAgICBpbiB0ZXJtaW5hbCBtb2RlLgorLSAgIFNUSUNLWSBDVVJTT1I6IEFkZCBhIHdheSBvZiBzY3JvbGxpbmcgdGhhdCBsZWF2ZXMgdGhlIGN1cnNvciB3aGVyZSBpdCBpcy4KKyAgICBFc3BlY2lhbGx5IHdoZW4gdXNpbmcgdGhlIHNjcm9sbGJhci4gIFR5cGluZyBhIGN1cnNvci1tb3ZlbWVudCBjb21tYW5kCisgICAgc2Nyb2xscyBiYWNrIHRvIHdoZXJlIHRoZSBjdXJzb3IgaXMuCisKKworVmkgaW5jb21wYXRpYmlsaXR5OgorOCAgIFdpdGggdW5kby9yZWRvIG9ubHkgbWFya3MgaW4gdGhlIGNoYW5nZWQgbGluZXMgc2hvdWxkIGJlIGNoYW5nZWQuICBPdGhlcgorICAgIG1hcmtzIHNob3VsZCBiZSBrZXB0LiAgVmkga2VlcHMgZWFjaCBtYXJrIGF0IHRoZSBzYW1lIHRleHQsIGV2ZW4gd2hlbiBpdAorICAgIGlzIGRlbGV0ZWQgb3IgcmVzdG9yZWQuIChXZWJiKQorICAgIEFsc286IEEgbWFyayBpcyBsb3N0IGFmdGVyOiBtYWtlIGNoYW5nZSwgdW5kbywgcmVkbyBhbmQgdW5kby4KKyAgICBFeGFtcGxlOiAie2QnJyIgdGhlbiAidSIgdGhlbiAiZCcnIjogZGVsZXRlcyBhbiBleHRyYSBsaW5lLCBiZWNhdXNlIHRoZSAnJworICAgIHBvc2l0aW9uIGlzIG9uZSBsaW5lIGRvd24uIChWZXNlbGlub3ZpYykKKzggICAiOmNoYW5nZSIgaW4gYSBzaW5nbGUtbGluZSBmaWxlIGFkZHMgYW4gZW1wdHkgbGluZS4gV2hlbiB0aGUgZmlsZSB1c2VkIHRvCisgICAgYmUgbG9uZ2VyIGEgIn4iIGxpbmUgaXMgZGlzcGxheWVkLCBidXQgdGhlcmUgcmVhbGx5IGlzIGFuIGVtcHR5IGxpbmUuCisgICAgKEhhYWtvbiBSaWlzZXIsIDIwMDMgRGVjIDMgYW5kIERlYyAxNikKKzggICAiOmFwcGVuZCIgYW5kICI6aW5zZXJ0IiBpbiBhbiBlbXB0eSBmaWxlIGFkZCBhbiBleHRyYSBlbXB0eSBsaW5lLiAoSGFha29uCisgICAgUmlpc2VyLCAyMDAzIERlYyAzKSAgVGVzdCBmb3IgTUxfRU1QVFkuCis4ICAgV2hlbiBzdGRpbiBpcyBub3QgYSB0dHksIGFuZCBWaW0gcmVhZHMgY29tbWFuZHMgZnJvbSBpdCwgYW4gZXJyb3Igc2hvdWxkCisgICAgbWFrZSBWaW0gZXhpdC4KKzcgICBVbml4IFZpbSAobm90IGd2aW0pOiBUeXBpbmcgQ1RSTC1DIGluIEV4IG1vZGUgc2hvdWxkIGZpbmlzaCB0aGUgbGluZQorICAgIChjdXJyZW50bHkgeW91IGNhbiBjb250aW51ZSB0eXBpbmcsIGJ1dCBpdCdzIHRydW5jYXRlZCBsYXRlciBhbnl3YXkpLgorICAgIFJlcXVpcmVzIGEgd2F5IHRvIG1ha2UgQ1RSTC1DIGludGVycnVwdCBzZWxlY3QoKSB3aGVuIGluIGNvb2tlZCBpbnB1dC4KKzggICBXaGVuIGxvYWRpbmcgYSBmaWxlIGluIHRoZSAuZXhyYywgVmkgbG9hZHMgdGhlIGFyZ3VtZW50IGFueXdheS4gIFZpbSBza2lwcworICAgIGxvYWRpbmcgdGhlIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGEgZmlsZSBhbHJlYWR5LiAgV2hlbiBubyBmaWxlIGFyZ3VtZW50CisgICAgZ2l2ZW4sIFZpIHN0YXJ0cyB3aXRoIGFuIGVtcHR5IGJ1ZmZlciwgVmltIGtlZXBzIHRoZSBsb2FkZWQgZmlsZS4gKEJlYXJkZWQpCis2ICAgSW4gSW5zZXJ0IG1vZGUsIHdoZW4gdXNpbmcgPEJTPiBvciA8RGVsPiwgZG9uJ3Qgd2lwZSBvdXQgdGhlIHRleHQsIGJ1dAorICAgIG9ubHkgbW92ZSBiYWNrIHRoZSBjdXJzb3IuCUJlaGF2ZXMgbGlrZSAnJCcgaW4gJ2Nwb3B0aW9ucycuICBVc2UgYSBmbGFnCisgICAgaW4gJ2Nwb3B0aW9ucycgdG8gc3dpdGNoIHRoaXMgb24vb2ZmLgorOCAgIFdoZW4gZWRpdGluZyBhIGZpbGUgd2hpY2ggaXMgYSBzeW1ib2xpYyBsaW5rLCBhbmQgdGhlbiBvcGVuaW5nIGFub3RoZXIKKyAgICBzeW1ib2xpYyBsaW5rIG9uIHRoZSBzYW1lIGZpbGUsIFZpbSB1c2VzIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCBvbmUuCisgICAgQWRqdXN0IHRoZSBmaWxlIG5hbWUgaW4gdGhlIGJ1ZmZlciB0byB0aGUgbGFzdCBvbmUgdXNlZD8gIFVzZSBzZXZlcmFsIGZpbGUKKyAgICBuYW1lcyBpbiBvbmUgYnVmZmVyPz8/CisgICAgQWxzbzogV2hlbiBmaXJzdCBlZGl0aW5nIGZpbGUgInRlc3QiLCB3aGljaCBpcyBzeW1saW5rIHRvICJ0ZXN0MiIsIGFuZAorICAgIHRoZW4gZWRpdGluZyAidGVzdDIiLCB5b3UgZW5kIHVwIGVkaXRpbmcgYnVmZmVyICJ0ZXN0IiBhZ2Fpbi4gIEl0J3Mgbm90CisgICAgbG9naWNhbCB0aGF0IHRoZSBuYW1lIHRoYXQgd2FzIGZpcnN0IHVzZWQgc3RpY2tzIHdpdGggdGhlIGJ1ZmZlci4KKzcgICBUaGUgIjp1bmRvIiBjb21tYW5kIHdvcmtzIGRpZmZlcmVudGx5IGluIEV4IG1vZGUuICBFZGl0IGEgZmlsZSwgbWFrZSBzb21lCisgICAgY2hhbmdlcywgIlEiLCAidW5kbyIgYW5kIF9hbGxfIGNoYW5nZXMgYXJlIHVuZG9uZSwgbGlrZSB0aGUgIjp2aXN1YWwiCisgICAgY29tbWFuZCB3YXMgb25lIGNvbW1hbmQuCis3ICAgVGhlICI6bWFwIiBjb21tYW5kIG91dHB1dCBvdmVyd3JpdGVzIHRoZSBjb21tYW5kLiAgUGVyaGFwcyBpdCBzaG91bGQga2VlcAorICAgIHRoZSAiOm1hcCIgd2hlbiBpdCdzIHVzZWQgd2l0aG91dCBhcmd1bWVudHM/Cis3ICAgQ1RSTC1MIGlzIG5vdCB0aGUgZW5kIG9mIGEgc2VjdGlvbj8gIEl0IGlzIGZvciBQb3NpeCEgIE1ha2UgaXQgYW4gb3B0aW9uLgorNyAgIEltcGxlbWVudCAncHJvbXB0JyBvcHRpb24uCUluaXQgdG8gb2ZmIHdoZW4gc3RkaW4gaXMgbm90IGEgdHR5LgorNyAgIENUUkwtVCBpbiBJbnNlcnQgbW9kZSBpbnNlcnRzICdzaGlmdHdpZHRoJyBvZiBzcGFjZXMgYXQgdGhlIGN1cnNvci4gIEFkZCBhCisgICAgZmxhZyBpbiAnY3BvcHRpb25zJyBmb3IgdGhpcy4KKzcgICBBZGQgYSB3YXkgdG8gc2VuZCBhbiBlbWFpbCBmb3IgYSBjcmFzaGVkIGVkaXQgc2Vzc2lvbi4gIENyZWF0ZSBhIGZpbGUgd2hlbgorICAgIG1ha2luZyBjaGFuZ2VzIChjb250YWluaW5nIG5hbWUgb2YgdGhlIHN3YXAgZmlsZSksIGRlbGV0ZSBpdCB3aGVuIHdyaXRpbmcKKyAgICB0aGUgZmlsZS4gIFN1cHBseSBhIHByb2dyYW0gdGhhdCBjYW4gY2hlY2sgZm9yIGNyYXNoZWQgc2Vzc2lvbnMgKGVpdGhlcgorICAgIGFsbCwgZm9yIGEgc3lzdGVtIHN0YXJ0dXAsIG9yIGZvciBvbmUgdXNlciwgZm9yIGluIGEgLmxvZ2luIGZpbGUpLgorNyAgIFZpIGRvZXNuJ3QgZG8gYXV0b2luZGVudGluZyB3aGVuIGlucHV0IGlzIG5vdCBmcm9tIGEgdHR5IChpbiBFeCBtb2RlKS4KKzcgICAiejM8Q1I+IiBzaG91bGQgc3RpbGwgdXNlIHRoZSB3aG9sZSB3aW5kb3csIGJ1dCBvbmx5IHJlZGlzcGxheSAzIGxpbmVzLgorNyAgICI6dGFnIHh4IiBzaG91bGQgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBub24tYmxhbmsuICBPciBzaG91bGQgaXQgZ28KKyAgICB0byB0aGUgbWF0Y2ggd2l0aCB0aGUgdGFnPwlPcHRpb24/Cis3ICAgSW1wbGVtZW50ICdhdXRvcHJpbnQnLydhcCcgb3B0aW9uLgorNyAgIEFkZCBmbGFnIGluICdjcG9wdGlvbnMnIHRoYXQgbWFrZXMgPEJTPiBhZnRlciBhIGNvdW50IHdvcmsgbGlrZSA8RGVsPgorICAgIChTYXlyZSkuCis3ICAgQWRkIGZsYWcgaW4gJ2Nwb3B0aW9ucycgdGhhdCBtYWtlcyBvcGVyYXRvciAoeWFuaywgZmlsdGVyKSBub3QgbW92ZSB0aGUKKyAgICBjdXJzb3IsIGF0IGxlYXN0IHdoZW4gY2FuY2VsbGVkLiAoZGVmYXVsdCBWaSBjb21wYXRpYmxlKS4KKzcgICBNYWtlICI1ZGQiIG9uIGxhc3QtYnV0LW9uZS1saW5lIG5vdCBkZWxldGUgYW55dGhpbmcgKFZpIGNvbXBhdGlibGUpLgorICAgIEFkZCBmbGFnIGluICdjcG9wdGlvbnMnIGZvciB0aGlzLiAgV2hlbiBub3QgcHJlc2VudCwgIjJkZCIgaW4gdGhlIGxhc3QKKyAgICBsaW5lIHNob3VsZCBkZWxldGUgdGhlIGxhc3QgbGluZS4gIFBhdGNoIGZyb20gZ3JlZW54IDIwMDIgQXByIDExLgorNyAgIFRoaXMgVmktdHJpY2sgZG9lc24ndCB3b3JrOiAiUSIgdG8gZ28gdG8gRXggbW9kZSwgdGhlbiAiZy9wYXR0ZXJuL3Zpc3VhbCIuCisgICAgSW4gVmkgeW91IGNhbiBlZGl0IGluIHZpc3VhbCBtb2RlLCBhbmQgd2hlbiBkb2luZyAiUSIgeW91IGp1bXAgdG8gdGhlIG5leHQKKyAgICBtYXRjaC4gIE52aSBjYW4gZG8gaXQgdG9vLgorNyAgIFN1cHBvcnQgJ1wnIGZvciBsaW5lIGNvbnRpbnVhdGlvbiBpbiBFeCBtb2RlIGZvciB0aGVzZSBjb21tYW5kczogKEx1ZWJraW5nKQorCWcvLi9hXAkJICAgIGcvcGF0dGVybjEvIHMvcGF0dGVybjIvcmVwMVxcCisJbGluZSAxXAkJICAgIGxpbmUgMlxcCisJbGluZSAyXAkJICAgIGxpbmUgM1xcCisJLgkJICAgIGxpbmU0LworNiAgICI6ZSAvdG1wLyR0dHkiIGRvZXNuJ3Qgd29yay4gICI6ZSAkdWlkIiBkb2VzLiAgSXMgJHR0eSBub3Qgc2V0IGJlY2F1c2Ugb2YKKyAgICB0aGUgd2F5IHRoZSBzaGVsbCBpcyBzdGFydGVkPworNiAgIFZpIGNvbXBhdGliaWxpdHkgKG9wdGlvbmFsKTogbWFrZSAiaWE8Q1I+PEVTQz4xMC4iIGRvIHRoZSBzYW1lIHN0cmFuZ2UKKyAgICB0aGluZy4gIChvbmx5IHJlcGVhdCBpbnNlcnQgZm9yIHRoZSBmaXJzdCBsaW5lKS4KKworCitHVEsrIDEgKE9LIGluIEdUSyAyKToKKzggICBXaGVuIG1lbnVzIGFyZSBkaXNhYmxlZCwgJ20nIHJlbW92ZWQgZnJvbSAnZ3Vpb3B0aW9ucycsIEFsdC1GIHN0aWxsIHBvcHMKKyAgICB1cCB0aGUgRmlsZSBtZW51LiAgQ2Fubm90IHJlcHJvZHVjZSB0aGlzOiBnaXZlcyBhIHdhcm5pbmcgZm9yIGEgTlVMTAorICAgIHBvaW50ZXIgaWYgdGhlIG1lbnUgd2FzIG5ldmVyIGRpc3BsYXllZC4KKzggICBXaGVuIHVzaW5nICJndmltIC1nZW9tIDQweDMwIiBvciBzZXR0aW5nICdjb2x1bW5zJyBpbiAuZ3ZpbXJjIG9yIHdpdGggYQorICAgIEdVSUVudGVyIGF1dG9jb21tYW5kLCB0aGUgd2lkdGggaXMgc3RpbGwgc2V0IHRvIGZpdCB0aGUgdG9vbGJhci4gIEFsc28KKyAgICBoYXBwZW5zIHdoZW4gY2hhbmdpbmcgdGhlIGZvbnQuICBIb3cgdG8gYXZvaWQgdGhhdCB0aGUgdG9vbGJhciBzcGVjaWZpZXMKKyAgICB0aGUgbWluaW1hbCB3aW5kb3cgd2lkdGg/Cis4ICAgV2hlbiB1c2luZyBhIHRoZW1lIHdpdGggZGlmZmVyZW50IHNjcm9sbGJhcnMgKGd0a3N0ZXApLCB0aGUgc2Nyb2xsYmFycyBjYW4KKyAgICBiZSB0b28gbmFycm93LiAoRHJhemVuIEthY2FyKQorOCAgIEZvbnQgIjd4MTQiIGhhcyBhIGJvbGQgdmVyc2lvbiAiN3gxNGJvbGQiLiAgVHJ5IHRvIGZpbmQgdGhlIGJvbGQgZm9udCBieQorICAgIGFwcGVuZGluZyAiYm9sZCIgd2hlbiB0aGVyZSBhcmUgbm90IDE0IGRhc2hlcy4KKworR1RLKyBHVUkga25vd24gYnVnczoKKzggICBHVEsgMjogQ29tYmluaW5nIFVURi04IGNoYXJhY3RlcnMgbm90IGRpc3BsYXllZCBwcm9wZXJseSBpbiBtZW51cyAoTWlrb2xhagorICAgIE1hY2hvd3NraSkgIFRoZXkgYXJlIGRpc3BsYXllZCBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzLiAgUHJvYmxlbSBpbgorICAgIGNyZWF0aW5nIGEgbGFiZWw/Cis5ICAgQ2FuJ3QgcGFzdGUgYSBWaXN1YWwgc2VsZWN0aW9uIGZyb20gR1RLLWd2aW0gdG8gdmltIGluIHh0ZXJtIG9yIE1vdGlmIGd2aW0KKyAgICB3aGVuIGl0IGlzIGxvbmdlciB0aGFuIDQwMDAgY2hhcmFjdGVycy4gIFdvcmtzIE9LIGZyb20gZ3ZpbSB0byBndmltIGFuZAorICAgIHZpbSB0byB2aW0uICBQYXN0aW5nIHRocm91Z2ggeHRlcm0gKHVzaW5nIHRoZSBzaGlmdCBrZXkpIGFsc28gd29ya3MuCisgICAgSXQgc3RhcnRzIHdvcmtpbmcgYWZ0ZXIgR1RLIGd2aW0gbG9zZXMgdGhlIHNlbGVjdGlvbiBhbmQgZ2FpbnMgaXQgYWdhaW4uCis3ICAgRE5EIGRvZXNuJ3Qgd29yayB3aXRoIEtERSAoYWxzbyB3aXRoIEdUSyAxKS4KKworCitXaW4zMiBHVUkga25vd24gYnVnczoKKzggICBPbiBXaW5kb3dzIDk4IHRoZSB1bmljb3dzIGxpYnJhcnkgaXMgbmVlZGVkIHRvIHN1cHBvcnQgZnVuY3Rpb25zIHdpdGggVUNTMgorICAgIGZpbGUgbmFtZXMuICBDYW4gd2UgbG9hZCB1bmljb3dzLmRsbCBkeW5hbWljYWxseT8KKzggICBUaGUgLVAgYXJndW1lbnQgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIG1hbnkgTURJIGFwcGxpY2F0aW9ucy4KKyAgICBUaGUgbGFzdCBhcmd1bWVudCBvZiBDcmVhdGVXaW5kb3dFeCgpIHNob3VsZCBiZSB1c2VkLCBzZWUgTVNETiBkb2NzLgorICAgIFR1dG9yaWFsOiBodHRwOi8vd2luMzJhc3NlbWJseS5vbmxpbmUuZnIvdHV0MzIuaHRtbAorOCAgIEluIGV2YWwuYywgaW8uaCBpcyBpbmNsdWRlZCB3aGVuIE1TV0lOMzIgaXMgZGVmaW5lZC4gIFNob3VsZG4ndCB0aGlzIGJlCisgICAgV0lOMzI/ICBPciBjYW4gaW5jbHVkaW5nIGlvLmggYmUgbW92ZWQgdG8gdmltLmg/IChEYW4gU2hhcnApCis3ICAgV2luZG93cyBYUDogV2hlbiB1c2luZyAiQ2xlYXJUeXBlIiBmb3IgdGV4dCBzbW9vdGhpbmcsIGEgY29sdW1uIG9mIHllbGxvdworICAgIHBpeGVscyByZW1haW5zIHdoZW4gdHlwaW5nIHNwYWNlcyBpbiBmcm9udCBvZiBhICJEIiAoJ2d1aWZvbnQnIHNldCB0bworICAgICJsdWNpZGFfY29uc29sZTpoOCIpLgorNiAgIFdpbjMyIEdVSTogV2l0aCAiLXUgTk9ORSAtVSBOT05FIiBhbmQgZG9pbmcgIkNUUkwtVyB2IiAiQ1RSTC1XIG8iLCB0aGUgIjoiCisgICAgb2YgIjpvbmx5IiBpcyBoaWdobGlnaHRlZCBsaWtlIHRoZSBjdXJzb3IuICAoTGlwZWxpcykKKzcgICBXaGVuIGZvbnQgc21vb3RoaW5nIGlzIGVuYWJsZWQsIHJlZHJhd2luZyBjYW4gYmVjb21lIHZlcnkgc2xvdy4gIFRoZSByZWFzb24KKyAgICBhcHBlYXJzIHRvIGJlIGRyYXdpbmcgd2l0aCBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQuICBXb3VsZCBpdCBiZSBwb3NzaWJsZQorICAgIHRvIHVzZSBhbiBvcGFxdWUgYmFja2dyb3VuZCBpbiBtb3N0IHBsYWNlcz8KKzggICBVc2UgYW5vdGhlciBkZWZhdWx0IGZvciAndGVybWVuY29kaW5nJzogdGhlIGFjdGl2ZSBjb2RlcGFnZS4gIE1lYW5zIHRoYXQKKyAgICB3aGVuICdlbmNvZGluZycgaXMgY2hhbmdlZCB0eXBpbmcgY2hhcmFjdGVycyBzdGlsbCB3b3JrcyBwcm9wZXJseS4KKyAgICBBbHRlcm5hdGl2ZTogdXNlIHRoZSBVbmljb2RlIGZ1bmN0aW9ucyB0byBvYnRhaW4gdHlwZWQgY2hhcmFjdGVycy4KKzggICBXaW4zMjogTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGFyZSBub3QgZGlzcGxheWVkLCBldmVuIHRob3VnaCB0aGUgc2FtZSBmb250CisgICAgaW4gTm90ZXBhZCBjYW4gZGlzcGxheSB0aGVtLiAoU3JpbmF0aCBBdmFkaGFudWxhKSAgVHJ5IHdpdGggdGhlCisgICAgVVRGLTgtZGVtby50eHQgcGFnZSB3aXRoIEFuZGFsZSBNb25vLgorNyAgIFRoZSBjdXJzb3IgY29sb3IgaW5kaWNhdGluZyBJTUUgbW9kZSBkb2Vzbid0IHdvcmsgcHJvcGVybHkuIChTaGl6aHUgUGFuLAorICAgIDIwMDQgTWF5IDkpCis4ICAgV2luMzI6IFdoZW4gY2xpY2tpbmcgb24gdGhlIGd2aW0gdGl0bGUgYmFyLCB3aGljaCBnaXZlcyBpdCBmb2N1cywgcHJvZHVjZXMKKyAgICBhIGZpbGUtY2hhbmdlZCBkaWFsb2csIGFmdGVyIGNsaWNraW5nIG9uIGEgYnV0dG9uIGluIHRoYXQgZGlhbG9nIHRoZSBndmltCisgICAgd2luZG93IGZvbGxvd3MgdGhlIG1vdXNlLiAgVGhlIGJ1dHRvbi11cCBldmVudCBpcyBsb3N0LiAgT25seSB3aXRoCisgICAgTVMtV2luZG93cyA5OD8KKyAgICBUcnkgdGhpczogIjpzZXQgc3cgdHMiLCBnZXQgZW50ZXItcHJvbXB0LCB0aGVuIGNoYW5nZSB0aGUgZmlsZSBpbiBhCisgICAgY29uc29sZSwgZ28gYmFjayB0byBWaW0gYW5kIGNsaWNrICJyZWxvYWQiIGluIHRoZSBkaWFsb2cgZm9yIHRoZSBjaGFuZ2VkCisgICAgZmlsZTogV2luZG93IG1vdmVzIHdpdGggdGhlIGN1cnNvciEKKyAgICBQdXQgZm9jdXMgZXZlbnQgaW4gaW5wdXQgYnVmZmVyIGFuZCBsZXQgZ2VuZXJpYyBWaW0gY29kZSBoYW5kbGUgaXQ/Cis4ICAgV2hlbiBhY3RpdmF0aW5nIHRoZSBWaW0gd2luZG93IHdpdGggbW91c2UgY2xpY2ssIGRvbid0IG1vdmUgY3Vyc29yIHRvCisgICAgbW91c2UgcG9zaXRpb24uICBDYXRjaCBXTV9NT1VTRUFDVElWQVRFLiAoTHVldmVsc21leWVyKQorOSAgIFRoZSBwcmludCBkaWFsb2cgdXNlcyBhIGZvbnQgd2hpY2ggZG9lc24ndCBkaXNwbGF5IG11bHRpLWJ5dGUgbWVzc2FnZXMuCisgICAgSW5jbHVkZSBwYXRjaCBmcm9tIFZpcGluIEFyYXZpbmQ/ICBVcGRhdGUgZnJvbSBZYXN1aGlybyBNYXRzdW1vdG8uCis4ICAgV2luMzI6IFdoZW4gbW91c2UgaXMgaGlkZGVuIGFuZCBpbiB0aGUgdG9vbGJhciwgbW92aW5nIGl0IHdvbid0IG1ha2UgaXQKKyAgICBhcHBlYXIuIChTYW1pIFNhbG9uZW4pCis4ICAgV2luZG93cyBOVDogd3JpdGluZyB0byBhdXguKiBtYWtlcyBWaW0gaGFuZy4gKEFjZXZlZG8pCis4ICAgV2luMzIgR1VJOiBXaXRoIG1heGltaXplZCB3aW5kb3csICI6c2V0IGdvLT1yIiBkb2Vzbid0IHVzZSB0aGUgc3BhY2UgdGhhdAorICAgIGNvbWVzIGF2YWlsYWJsZS4gKFBvdWNldCkgIEl0IHdvcmtzIE9LIG9uIFdpbiA5OCBidXQgZG9lc24ndCB3b3JrIG9uIFdpbgorICAgIE5UIDQuMC4gIExlYXZlcyBhIGdyZXkgYXJlYSB3aGVyZSB0aGUgc2Nyb2xsYmFyIHdhcy4gICI6c2V0IGdvKz1yIiBhbHNvCisgICAgZG9lc24ndCB3b3JrIHByb3Blcmx5LgorOCAgIFdoZW4gVmltIGlzIG1pbmltaXplZCBhbmQgd2hlbiBtYXhpbWl6aW5nIGl0IGEgZmlsZS1jaGFuZ2VkIGRpYWxvZyBwb3BzCisgICAgdXAsIFZpbSBpc24ndCBtYXhpbWl6ZWQuICBJdCBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGhlIGRpYWxvZywgc28gdGhhdCBpdAorICAgIGFwcGVhcnMgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uLiAoV2ViYikKKzkgICBXaGVuIHNlbGVjdGluZyBhdCB0aGUgbW9yZS1wcm9tcHQgb3IgaGl0LWVudGVyLXByb21wdCwgdGhlIHJpZ2h0IG1vdXNlCisgICAgYnV0dG9uIGRvZXNuJ3QgZ2l2ZSBwb3B1cCBtZW51LgorICAgIEF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0IENUUkwtWSBkb2Vzbid0IHdvcmsgdG8gY29weSB0aGUgbW9kZWxlc3MKKyAgICBzZWxlY3Rpb24uCisgICAgT24gdGhlIGNvbW1hbmQgbGluZSwgZG9uJ3QgZ2V0IGEgcG9wdXAgbWVudSBmb3IgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbi4KKyAgICBMZXQgdGhlIG1pZGRsZSBidXR0b24gcGFzdGUgc2VsZWN0ZWQgdGV4dCAobm90IHRoZSBjbGlwYm9hcmQgYnV0IHRoZQorICAgIG5vbi1WaXN1YWwgc2VsZWN0aW9uKT8gIE90aGVyd2lzZSBDVFJMLVkgaGFzIHRvIGJlIHVzZWQgdG8gY29weSB0aGUgdGV4dC4KKzggICBXaGVuICdncmVwcHJnJyBkb2Vzbid0IGV4ZWN1dGUsIHRoZSBlcnJvciBvbmx5IGZsYXNoZXMgYnksIHRoZQorICAgIHVzZXIgY2FuIGhhcmRseSBzZWUgd2hhdCBpcyB3cm9uZy4gKE1vb3JlKQorICAgIENvdWxkIHVzZSB2aW1ydW4gd2l0aCBhbiAiLW5vd2FpdCIgYXJndW1lbnQgdG8gb25seSB3YWl0IHdoZW4gYW4gZXJyb3IKKyAgICBvY2N1cnMsIGJ1dCAiY29tbWFuZC5jb20iIGRvZXNuJ3QgcmV0dXJuIGFuIGVycm9yIGNvZGUuCis4ICAgV2hlbiB0aGUgJ3NoZWxsJyBjYW5ub3QgYmUgZXhlY3V0ZWQsIHNob3VsZCBnaXZlIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1zZy4KKyAgICBFc3AuIGZvciBhIGZpbHRlciBjb21tYW5kLCBjdXJyZW50bHkgaXQgb25seSBjb21wbGFpbnMgdGhlIGZpbGUgY291bGQgbm90CisgICAgYmUgcmVhZC4KKzggICBNZXNzYWdlQm94IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzIGNhbiBiZSB0b28gYmlnLglUaGVyZSBpcyBubyB3YXkgdG8KKyAgICBzY3JvbGwgaXQsIG9yIGV2ZW4gaGl0IHRoZSBPSyBidXR0b24gKGJ1dCB5b3UgY2FuIGhpdCByZXR1cm4pLgorICAgIFVzZSBhIHNjcm9sbGFibGUgd2luZG93LgorNyAgIEFkZCBhbiBvcHRpb24gdG8gYWRkIG9uZSBwaXhlbCBjb2x1bW4gdG8gdGhlIGNoYXJhY3RlciB3aWR0aD8gIEx1Y2lkYQorICAgIENvbnNvbGUgaXRhbGljIGlzIHdpZGVyIHRoYW4gdGhlIG5vcm1hbCBmb250ICgiZCIgb3ZlcmxhcHMgd2l0aCBuZXh0IGNoYXIpLgorICAgIE9wcG9zaXRlIG9mICdsaW5lc3BhY2UnOiAnY29sdW1uc3BhY2UnLgorNyAgIEF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0IHNjcm9sbGluZyBub3cgbm8gbG9uZ2VyIHdvcmtzLiAgTmVlZCB0byB1c2UgdGhlCisgICAga2V5Ym9hcmQgdG8gZ2V0IGFyb3VuZCB0aGlzLiAgUHJldGVuZCA8Q1I+IHdhcyBoaXQgd2hlbiB0aGUgdXNlciB0cmllcyB0bworICAgIHNjcm9sbD8gIE5lZWQgdG8gYmUgYWJsZSB0byBnZXQgb3V0IG9mIGhpdC1lbnRlciBwcm9tcHQgd2l0aCB0aGUgbW91c2UKKyAgICBhbnl3YXkuCis3ICAgU2Nyb2xsYmFyIHdpZHRoIGRvZXNuJ3QgY2hhbmdlIHdoZW4gc2VsZWN0aW5nIG90aGVyIHdpbmRvd3MgYXBwZWFyYW5jZS4KKyAgICBBbHNvIGJhY2tncm91bmQgY29sb3Igb2YgVG9vbGJhciBhbmQgcmVjdGFuZ2xlIGJlbG93IHZlcnQuIHNjcm9sbGJhci4KKzcgICAiIXN0YXJ0IC9taW4gY21kIiBzaG91bGQgcnVuIGluIGEgbWluaW1pemVkIHdpbmRvdywgaW5zdGVhZCBvZiB1c2luZworICAgICIvbWluIiBhcyB0aGUgY29tbWFuZCBuYW1lLiAoUm9nYWxsKQorNiAgIERyYXdpbmcgdGV4dCB0cmFuc3BhcmVudGx5IGRvZXNuJ3Qgc2VlbSB0byB3b3JrICh3aGVuIGRyYXdpbmcgcGFydCBjdXJzb3IpLgorOCAgIENUUkwga2V5IGRvZXNuJ3QgYWx3YXlzIHdvcmsgaW4gY29tYmluYXRpb24gd2l0aCBBTFQga2V5LiAgSXQgZG9lcyB3b3JrCisgICAgZm9yIGZ1bmN0aW9uIGtleXMsIG5vdCBmb3IgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzLiAgUGVyaGFwcyB0aGlzIGlzIGJlY2F1c2UKKyAgICBDVFJMLUFMVCBpcyB1c2VkIGJ5IFdpbmRvd3MgYXMgQWx0R3I/Cis4ICAgQ1RSTC0tIGRvZXNuJ3Qgd29yayBmb3IgQVpFUlRZLCBiZWNhdXNlIGl0J3MgQ1RSTC1bIGZvciBRV0VSVFkuICBIb3cgZG8gd2UKKyAgICBrbm93IHdoaWNoIGtleWJvYXJkIGlzIGJlaW5nIHVzZWQ/Cis3ICAgV2hlbiBzY3JvbGxpbmcsIGFuZCBhIGJhY2tncm91bmQgY29sb3IgaXMgZGl0aGVyZWQsIHRoZSBkaXRoZXIgcGF0dGVybgorICAgIGRvZXNuJ3QgYWx3YXlzIGpvaW4gY29ycmVjdGx5IGJldHdlZW4gdGhlIHNjcm9sbGVkIGFyZWEgYW5kIHRoZSBuZXcgZHJhd24KKyAgICBhcmVhIChLb2xvc2Vpa2UpLgorOCAgIFdoZW4gZ3VpX2luaXRfZm9udCgpIGlzIGNhbGxlZCB3aXRoICIqIiwgcF9ndWlmb250IGlzIGZyZWVkIHdoaWxlIGl0IG1pZ2h0CisgICAgc3RpbGwgYmUgdXNlZCBzb21ld2hlcmUuICBUaGlzIGlzIHRvbyB0cmlja3ksIGRvIHRoZSBmb250IHNlbGVjdGlvbiBmaXJzdCwKKyAgICB0aGVuIHNldCB0aGUgbmV3IGZvbnQgYnkgbmFtZSAocmVxdWlyZXMgcHV0dGluZyBhbGwgbG9nZm9udCBwYXJhbWV0ZXJzIGluCisgICAgdGhlIGZvbnQgbmFtZSkuCisKKworQXRoZW5hIGFuZCBNb3RpZjoKKzkgICBDYW4gY29uZmlndXJlIGJlIGNoYW5nZWQgdG8gZGlzYWJsZSBuZXRiZWFucyBpZiB0aGUgWHBtIGxpYnJhcnkgaXMKKyAgICByZXF1aXJlZCBhbmQgaXQncyBtaXNzaW5nPworOCAgIFdoZW4gdXNpbmcgdGhlIHJlc291cmNlICJWaW0qYm9yZGVyd2lkdGggMiIgdGhlIHdpZGdldHMgYXJlIHBvc2l0aW9uZWQKKyAgICB3cm9uZy4KKzkgICBYSU0gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3IgU0dJL0lSSVguICBGaXggWElNIHNvIHRoYXQgJ2ltZGlzYWJsZScgY2FuCisgICAgYmUgb2ZmIGJ5IGRlZmF1bHQuCis5ICAgWElNIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3IgQXRoZW5hL01vdGlmLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKSBGb3Igbm93LAorICAgIGtlZXAgWElNIGFjdGl2ZSBhdCBhbGwgdGltZXMgd2hlbiB0aGUgaW5wdXQgbWV0aG9kIGhhcyB0aGUgcHJlZWRpdGluZworICAgIGZsYWcuCis4ICAgWDExOiBBIG1lbnUgdGhhdCBjb250YWlucyBhbiB1bWxhdXQgaXMgdHJ1bmNhdGVkIGF0IHRoYXQgY2hhcmFjdGVyLgorICAgIEhhcHBlbnMgd2hlbiB0aGUgbG9jYWxlIGlzICJDIiwgd2hpY2ggdXNlcyBBU0NJSSBpbnN0ZWFkIG9mIElTMC04ODU5LTEuCisgICAgSXMgdGhlcmUgYSB3YXkgdG8gdXNlIGxhdGluMSBieSBkZWZhdWx0PyAgR25vbWVfaW5pdCgpIHNlZW1zIHRvIGRvIHRoaXMuCis4ICAgUGVyaGFwcyB1c2UgZm9udHNldHMgZm9yIGV2ZXJ5dGhpbmc/Cis2ICAgV2hlbiBzdGFydGluZyBpbiBFbmdsaXNoIGFuZCBzd2l0Y2hpbmcgdGhlIGxhbmd1YWdlIHRvIEphcGFuZXNlLCBzZXR0aW5nCisgICAgdGhlIGxvY2FsZSB3aXRoICI6bGFuZyIsICdndWlmb250c2V0JyBhbmQgImhpIG1lbnUgZm9udD0iLCBkZWxldGluZyBhbGwKKyAgICBtZW51cyBhbmQgc2V0dGluZyB0aGVtIGFnYWluLCB0aGUgbWVudXMgZG9uJ3QgdXNlIHRoZSBuZXcgZm9udC4gIE1vc3Qgb2YKKyAgICB0aGUgdG9vbHRpcHMgd29yayB0aG91Z2guLi4KKzcgICBNb3RpZjogd2hlbiB1c2luZyBhIGZpbGUgc2VsZWN0aW9uIGRpYWxvZywgdGhlIHNwZWNpZmllZCBmaWxlIG5hbWUgaXMgbm90CisgICAgYWx3YXlzIHVzZWQgKHdoZW4gc3BlY2lmeWluZyBhIGZpbHRlciBvciBhbm90aGVyIGRpcmVjdG9yeSkuCis4ICAgV2hlbiAnZW5jb2RpbmcnIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IGxvY2FsZSAoZS5nLiwgdXRmLTgpIHRoZQorICAgIG1lbnUgc3RyaW5ncyBkb24ndCB3b3JrLiAgUmVxdWlyZXMgY29udmVyc2lvbiBmcm9tICdlbmNvZGluZycgdG8gdGhlCisgICAgY3VycmVudCBsb2NhbGUuICBXb3JrYXJvdW5kOiBzZXQgJ2xhbmdtZW51Jy4KKworCitBdGhlbmEgR1VJOgorOSAgIFdoZW4gZHJhZ2dpbmcgdGhlIHNjcm9sbGJhciB0aHVtYiB2ZXJ5IGZhc3QsIGZvY3VzIGlzIG9ubHkgb2J0YWluZWQgaW4KKyAgICB0aGUgc2Nyb2xsYmFyIGl0c2VsZi4gIEFuZCB0aGUgdGh1bWIgaXMgbm8gbG9uZ2VyIHVwZGF0ZWQgd2hlbiBtb3ZpbmcKKyAgICB0aHJvdWdoIGZpbGVzLgorNyAgIFRoZSBmaWxlIHNlbGVjdG9yIGlzIG5vdCByZXNpemFibGUuICBXaXRoIGEgYmlnIGZvbnQgaXQgaXMgZGlmZmljdWx0IHRvCisgICAgcmVhZCBsb25nIGZpbGUgbmFtZXMuIChTY2hyb2VkZXIpCis0ICAgUmUtd3JpdGUgdGhlIHdpZGdldCBhdHRhY2htZW50cyBhbmQgY29kZSBzbyB0aGF0IHdlIHdpbGwgbm90IGhhdmUgdG8gZ28KKyAgICB0aHJvdWdoIGFuZCBjYWxjdWxhdGUgdGhlIGFic29sdXRlIHBvc2l0aW9uIG9mIGV2ZXJ5IHdpZGdldCBldmVyeSB0aW1lIHRoZQorICAgIHdpbmRvdyBpcyByZWZyZXNoZWQvY2hhbmdlcyBzaXplLiAgVGhpcyB3aWxsIGhlbHAgdGhlICJmbGFzaGluZy13aWRnZXRzIgorICAgIHByb2JsZW0gZHVyaW5nIGEgcmVmcmVzaC4KKzUgICBXaGVuIHN0YXJ0aW5nIGd2aW0gd2l0aCBhbGwgdGhlIGRlZmF1bHQgY29sb3JzIGFuZCB0aGVuIHR5cGluZworICAgICI6aGkgTWVudSBndWliZz1jeWFuIiwgdGhlIG1lbnVzIGNoYW5nZSBjb2xvciBidXQgdGhlIGJhY2tncm91bmQgb2YgdGhlCisgICAgcHVsbHJpZ2h0IHBpeG1hcCBkb2Vzbid0IGNoYW5nZSBjb2xvcnMuCisgICAgSWYgeW91IHR5cGUgIjpoaSBNZW51IGd1aWJnPWN5YW4gZm9udD1hbnlmb250IiwgdGhlbiB0aGUgcGl4bWFwIGNoYW5nZXMKKyAgICBjb2xvcnMgYXMgaXQgc2hvdWxkLgorICAgIEFsbG9jYXRpbmcgYSBuZXcgcGl4bWFwIGFuZCBzZXR0aW5nIHRoZSByZXNvdXJjZSBkb2Vzbid0IGNoYW5nZSB0aGUKKyAgICBwdWxscmlnaHQgcGl4bWFwJ3MgY29sb3JzLiAgV2h5PyAgUG9zc2libGUgQXRoZW5hIGJ1Zz8KKworCitNb3RpZiBHVUk6Cis4ICAgUG9wdXAgbWVudSBvcmRlcmluZyBpcyB3cm9uZy4KKzggICBBY2NlbGVyYXRvcnMgZG9uJ3Qgd29yayBpbiBhIGRpYWxvZy4gIEluY2x1ZGUgcGF0Y2ggZnJvbSBNYXJ0aW4gRGFsZWNraQorICAgIChKYW4gMywgdGVzdGVkIGJ5IERhdmlkIEhhcnJpc29uKS4gIFNob3VsZCB3b3JrIHdpdGggQWx0LW8gdGhlbi4KKzcgICBVc2UgYWNjZWxlcmF0b3JzIGZvciB0aGUgTW90aWYgZmlsZSBzZWxlY3Rpb24gZGlhbG9nLiAgUGF0Y2ggZnJvbSBNYXJ0aW4KKyAgICBEYWxlY2tpIDIwMDIgSmFuIDExLgorNyAgIFVzZSBYbVN0cmluZ0NyZWF0ZUxvY2FsaXplZCgpIGluc3RlYWQgb2YgWG1TdHJpbmdDcmVhdGVTaW1wbGUoKT8KKyAgICBEYXZpZCBIYXJyaXNvbiBzYXlzIGl0J3MgT0sgKGl0IGV4aXN0cyBpbiBNb3RpZiAxLjIpLgorOCAgIFRoZSB0ZXh0cyBpbiB0aGUgZmluZC9yZXBsYWNlIGRpYWxvZyBkb24ndCB1c2UgdGhlIHJpZ2h0IGZvbnQuCis4ICAgTGVzc3RpZjogV2hlbiBkZWxldGluZyBhIG1lbnUgdGhhdCdzIHRvcm4gb2ZmLCB0aGUgdG9ybiBvZmYgbWVudSBiZWNvbWVzCisgICAgdmVyeSBzbWFsbCBpbnN0ZWFkIG9mIGRpc2FwcGVhcmluZy4gIFdoZW4gY2xvc2luZyBpdCwgVmltIGNyYXNoZXMuCisgICAgKFBoaWxsaXBwcykKKworCitHVUk6Cis5ICAgT24gU29sYXJpcywgY3JlYXRpbmcgdGhlIHBvcHVwIG1lbnUgY2F1c2VzIHRoZSByaWdodCBtb3VzZSBidXR0b24gbm8KKyAgICBsb25nZXIgdG8gd29yayBmb3IgZXh0ZW5kaW5nIHRoZSBzZWxlY3Rpb24uIChIYWxldnkpCis5ICAgV2hlbiBydW5uaW5nIGFuIGV4dGVybmFsIHByb2dyYW0sIGl0IGNhbid0IGFsd2F5cyBiZSBraWxsZWQgd2l0aCBDVFJMLUMuCisgICAgZS5nLiBvbiBTb2xhcmlzIDUuNSwgd2hlbiB1c2luZyAiSyIgKEtlZWNoKS4gIE90aGVyICdndWlwdHknIHByb2JsZW1zIG9uCisgICAgU29sYXJpcyAyLjYuIChNYXJsZXkpCis5ICAgT24gU29sYXJpczogVXNpbmcgYSAiLWdlb21ldHJ5IiBhcmd1bWVudCwgYmlnZ2VyIHRoYW4gdGhlIHdpbmRvdyB3aGVyZSBWaW0KKyAgICBpcyBzdGFydGVkIGZyb20sIGNhdXNlcyBlbXB0eSBsaW5lcyBiZWxvdyB0aGUgY21kbGluZS4gKHJhZikKKzggICBYMTEgR1VJOiBXaGVuIG1lbnUgaXMgZGlzYWJsZWQgYnkgZXhjbHVkaW5nICdtJyBmcm9tICdndWlvcHRpb25zJywgQUxUIGtleQorICAgIHNob3VsZCBub3QgYmUgdXNlZCB0byB0cmlnZ2VyIGEgbWVudSAobGlrZSB0aGUgV2luMzIgdmVyc2lvbikuCis4ICAgV2hlbiBzZXR0aW5nICdsYW5nbWVudScsIGl0IHNob3VsZCBiZSBlZmZlY3RpdmUgaW1tZWRpYXRlbHkuICBTdG9yZSBib3RoCisgICAgdGhlIEVuZ2xpc2ggYW5kIHRoZSB0cmFuc2xhdGVkIHRleHQgaW4gdGhlIG1lbnUgc3RydWN0dXJlLiAgUmUtZ2VuZXJhdGUKKyAgICB0aGUgdHJhbnNsYXRpb24gd2hlbiAnbGFuZ21lbnUnIGhhcyBjaGFuZ2VkLgorOCAgIEJhc2ljIGZsYXcgaW4gdGhlIEdVSSBjb2RlOiBOZXh0U2NyZWVuIGlzIHVwZGF0ZWQgYmVmb3JlIGNhbGxpbmcKKyAgICBndWlfd3JpdGUoKSwgYnV0IHRoZSBHVUkgY29kZSByZWxpZXMgb24gTmV4dFNjcmVlbiB0byByZXByZXNlbnQgdGhlIHN0YXRlCisgICAgb2Ygd2hlcmUgaXQgaXMgcHJvY2Vzc2luZyB0aGUgb3V0cHV0LgorICAgIE5lZWQgYmV0dGVyIHNlcGFyYXRpb24gb2YgVmltIGNvcmUgYW5kIEdVSSBjb2RlLgorOCAgIFdoZW4gZm9udHNldCBzdXBwb3J0IGlzIGVuYWJsZWQsIHNldHRpbmcgJ2d1aWZvbnQnIHRvIGEgc2luZ2xlIGZvbnQKKyAgICBkb2Vzbid0IHdvcmsuCis4ICAgTWVudSBwcmlvcml0eSBmb3Igc3ViLW1lbnVzIGZvcjogQW1pZ2EsIEJlT1MuCis4ICAgQWRkIG1lbnUgc2VwYXJhdG9ycyBmb3IgQW1pZ2EsIFJJU0NPUy4KKzggICBBZGQgYSBmZXcgbW9yZSBjb21tYW5kIG5hbWVzLiAgUGF0Y2ggZnJvbSBKaXJpIEJyZXppbmEgKDI4IGZlYiAyMDAyKS4KKzggICBBZGQgd2F5IHRvIHNwZWNpZnkgdGhlIGZpbGUgZmlsdGVyIGZvciB0aGUgYnJvd3NlIGRpYWxvZy4gIEF0IGxlYXN0IGZvcgorICAgIGJyb3dzZSgpLgorOCAgIEFkZCBkaWFsb2cgZm9yIHNlYXJjaC9yZXBsYWNlIHRvIG90aGVyIEdVSXM/ICBUayBoYXMgc29tZXRoaW5nIGZvciB0aGlzLAorICAgIHVzZSB0aGF0IGNvZGU/ICBPciB1c2UgY29uc29sZSBkaWFsb2cuCis4ICAgV2hlbiBzZWxlY3RpbmcgYSBmb250IHdpdGggdGhlIGZvbnQgZGlhbG9nIGFuZCB0aGUgZm9udCBpcyBpbnZhbGlkLCB0aGUKKyAgICBlcnJvciBtZXNzYWdlIGRpc2FwcGVhcnMgdG9vIHF1aWNrLgorOCAgIGd1aV9jaGVja19jb2xvcnMoKSBpcyBub3QgY2FsbGVkIGF0IHRoZSByaWdodCBtb21lbnQuICBEbyBpdCBtdWNoIGxhdGVyLAorICAgIHRvIGF2b2lkIHByb2JsZW1zLgorOCAgIGd1aV91cGRhdGVfY3Vyc29yKCkgaXMgY2FsbGVkIGZvciBhIGN1cnNvciBzaGFwZSBjaGFuZ2UsIGV2ZW4gd2hlbiB0aGVyZQorICAgIGFyZSBtYXBwaW5ncyB0byBiZSBwcm9jZXNzZWQuICBPbmx5IGRvIHNvbWV0aGluZyB3aGVuIGdvaW5nIHRvIHdhaXQgZm9yCisgICAgaW5wdXQuICBPciBtYXliZSBldmVyeSAxMDAgbXM/Cis4ICAgWDExOiBXaGVuIHRoZSB3aW5kb3cgc2l6ZSBpcyByZWR1Y2VkIHRvIGZpdCBvbiBzY3JlZW4sIHRoZXJlIGFyZSBibGFuaworICAgIGxpbmVzIGJlbG93IHRoZSB0ZXh0IGFuZCBib3R0b20gc2Nyb2xsYmFyLiAgImd2aW0gLWdlb21ldHJ5IDgweDc4KzArMCIuCisgICAgV2hlbiB0aGUgIiswKzAiIGlzIG9taXR0ZWQgaXQgd29ya3MuCis4ICAgV2hlbiBzdGFydGluZyBhbiBleHRlcm5hbCBjb21tYW5kLCBhbmQgJ2d1aXB0eScgc2V0LCBCUyBhbmQgREVMIGFyZSBtaXhlZAorICAgIHVwLiAgU2V0IGVyYXNlIGNoYXJhY3RlciBzb21laG93PworOCAgIEEgZGVhZCBjaXJjdW1mbGV4IGZvbGxvd2VkIGJ5IGEgc3BhY2Ugc2hvdWxkIGdpdmUgdGhlICdeJyBjaGFyYWN0ZXIKKyAgICAoUm9tbWVsKS4gIExvb2sgaG93IHh0ZXJtIGRvZXMgdGhpcy4KKyAgICBBbHNvOiBCZWRuYXIgaGFzIHNvbWUgY29kZSBmb3IgZGVhZCBrZXkgaGFuZGxpbmcuCisgICAgQWxzbzogTmVkaXQgNS4wLjIgd2l0aCBVU0VfWE1JTSBkb2VzIGl0IHJpZ2h0LiAoR2F5YSkKKzggICBUaGUgY29tcG9zZSBrZXkgZG9lc24ndCB3b3JrIHByb3Blcmx5IChDZXBhcykuICBCb3RoIGZvciBXaW4zMiBhbmQgWDExLgorNyAgIFRoZSBjdXJzb3IgaW4gYW4gaW5hY3RpdmUgd2luZG93IHNob3VsZCBiZSBob2xsb3cuICBDdXJyZW50bHkgaXQncyBub3QKKyAgICB2aXNpYmxlLgorNyAgIEdVSSBvbiBTb2xhcmlzIDIuNS4xLCB1c2luZyAvdXNyL2R0Ly4uOiBXaGVuIGd2aW0gc3RhcnRzLCBjdXJzb3IgaXMKKyAgICBob2xsb3csIGFmdGVyIHdpbmRvdyBsb3dlcmVkL3JhaXNlZCBpdCdzIE9LLiAoR29kZnJleSkKKzcgICBXaGVuIHN0YXJ0aW5nIEdVSSB3aXRoICI6Z3VpIiwgYW5kIHdpbmRvdyBpcyBtYWRlIHNtYWxsZXIgYmVjYXVzZSBpdAorICAgIGRvZXNuJ3QgZml0IG9uIHRoZSBzY3JlZW4sIHRoZXJlIGlzIGFuIGV4dHJhIHJlZHJhdy4KKzggICBXaGVuIHNldHRpbmcgZm9udCB3aXRoIC5YZGVmYXVsdHMsIHRoZXJlIGlzIGFuIGV4dHJhIGVtcHR5IGxpbmUgYXQgdGhlCisgICAgYm90dG9tLCB3aGljaCBkaXNhcHBlYXJzIHdoZW4gdXNpbmcgIjpzZXQgZ3VpZm9udD08VGFiPiIuIChDaGFkemVsZWspCis4ICAgV2hlbiBmb250IHNoYXBlIGNoYW5nZXMsIGJ1dCBub3QgdGhlIHNpemUsIGRvaW5nICI6c2V0IGZvbnQ9IiBkb2VzIG5vdAorICAgIHJlZHJhdyB0aGUgc2NyZWVuIHdpdGggdGhlIG5ldyBmb250LiAgQWxzbyBmb3IgV2luMzIuCisgICAgV2hlbiB0aGUgc2l6ZSBjaGFuZ2VzLCBvbiBTb2xhcmlzIDIuNSB0aGVyZSBpc24ndCBhIHJlZHJhdyBmb3IgdGhlCisgICAgcmVtYWluaW5nIHBhcnQgb2YgdGhlIHdpbmRvdyAoUGhpbGxpcHBzKS4KKy0gICBGbGFzaGVzIHJlYWxseSBiYWRseSBpbiBjZXJ0YWluIGNhc2VzIHdoZW4gcnVubmluZyByZW1vdGVseSBmcm9tIGEgU3VuLgorNCAgIFJlLXdyaXRlIHRoZSBjb2RlIHNvIHRoYXQgdGhlIGhpZ2hsaWdodGluZyBpc24ndCBjaGFuZ2VkIG11bHRpcGxlIHRpbWVzCisgICAgd2hlbiBkb2luZyBhICI6aGkgY2xlYXIiLiAgVGhlIGNvbG9yIGNoYW5nZXMgaGFwcGVuIHRocmVlIG9yIG1vcmUgdGltZXMKKyAgICBjdXJyZW50bHkuICBUaGlzIGlzIHZlcnkgb2J2aW91cyBvbiBhIDY2TWh6IDQ4Ni4KKworCitNU0RPUy9ESkdQUDoKKzkgICBQcmVzc2luZyBDVFJMLUMgb2Z0ZW4gY3Jhc2hlcyB0aGUgY29uc29sZSBWaW0gcnVucyBpbi4gKEtlbiBMaWFvKQorICAgIFdoZW4gJ2Jpb3NrZXknIGlzbid0IHNldCBpdCBkb2Vzbid0IGhhcHBlbi4gIENvdWxkIGJlIGEgcHJvYmxlbSB3aXRoIHRoZQorICAgIEJJT1MgZW11bGF0aW9uIG9mIHRoZSBjb25zb2xlLiAgVmVyc2lvbiA1LjYgYWxyZWFkeSBoYWQgdGhpcyBwcm9ibGVtLgorOCAgIERKR1BQOiAiY2QgYzoiIGNhbiB0YWtlIHVzIHRvIGEgZGlyZWN0b3J5IHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy4KKyAgICBjaGFuZ2VfZHJpdmUoKSBkb2Vzbid0IGNoZWNrIHRoaXMuICBIb3cgdG8gY2hlY2sgZm9yIHRoaXMgZXJyb3I/Cis5ICAgVGhlIDE2IGJpdCB2ZXJzaW9uIHJ1bnMgb3V0IG9mIG1lbW9yeSB2ZXJ5IHF1aWNrbHkuICBTaG91bGQgZmluZCB1bnVzZWQKKyAgICBjb2RlIGFuZCByZWR1Y2Ugc3RhdGljIGRhdGEuCis5ICAgQ3Jhc2ggd2hlbiBydW5uaW5nIG9uIFdpbmRvd3MgOTggaW4gYSBjb25zb2xlIHdpbmRvdyBhbmQgcHJlc3NpbmcgQ1RSTC1DLgorICAgIEhhcHBlbnMgbm93IGFuZCB0aGVuLiAgV2hlbiBkZWJ1Z2dpbmcgVmltIGluIGdkYiB0aGlzIGFsc28gaGFwcGVucy4gIFNpbmNlCisgICAgdGhlIGNvbnNvbGUgY3Jhc2hlcywgbWlnaHQgYmUgYSBidWcgaW4gdGhlIERPUyBjb25zb2xlLiAgUmVzZXR0aW5nCisgICAgJ2Jpb3NrZXknIGF2b2lkcyBpdCwgYnV0IHRoZW4gQ1RSTC1DIGRvZXNuJ3Qgd29yay4KKzkgICBET1M6IE1ha2UgQ1RSTC1GeCBhbmQgQUxULUZ4IHdvcmsuCisgICAgQ1RSTC1GMSA9IENFLTVFLCBDVFJMLUYyID0gQ0UtNUYsIC4uLCBDVFJMLUYxMCA9IENFLTY3CisgICAgQUxULUYxID0gQ0UtNjgsIEFMVC1GMiA9IENFLTY5LCAuLiwgQUxULUYxMCA9IENFLTcxCisgICAgU2hpZnRlZCBjdXJzb3Iga2V5cyBwcm9kdWNlIHNhbWUgY29kZXMgYXMgdW5zaGlmdGVkIGtleXMuICBVc2UgYmlvc2tleSgyKQorICAgIHRvIGdldCBtb2RpZmllciBtYXNrIGZvciA8Uy1DLU0tRng+LgorICAgIFVzZSBLX1NQRUNJQUwvS1NfTU9ESUZJRVIgY29kZXMgdG8gaW5zZXJ0IG1vZGlmaWVyIG1hc2sgaW4gaW5wdXQgc3RyZWFtPworICAgIE1ha2UgdGhpcyB3b3JrIGxpa2UgaW4gV2luMzIgY29uc29sZS4KKyAgICBNYXBwaW5nIHRoaW5ncyBsaWtlIDxNLUE+IGRvZXNuJ3Qgd29yaywgYmVjYXVzZSBpdCBnZW5lcmF0ZXMgYW4gZXh0ZW5kZWQKKyAgICBrZXkgY29kZS4gIFVzZSBhIHRyYW5zbGF0aW9uIHRhYmxlPworOSAgIENhbid0IHJlYWQgYW4gb3BlbmVkIHN3YXAgZmlsZSB3aGVuIHRoZSAic2hhcmUiIGNvbW1hbmQgaGFzIG5vdCBiZWVuIHVzZWQuCisgICAgQXQgbGVhc3QgaWdub3JlIHRoZSBzd2FwIGZpbGVzIHRoYXQgVmltIGhhcyBvcGVuZWQgaXRzZWxmLgorOCAgIFVzZSBESkdQUCAyLjAzLgorOCAgIFRoZSBEb3MzMiB2ZXJzaW9uIChESkdQUCkgY2FuJ3QgdXNlIGxvbmcgZmlsZSBuYW1lcyBvbiBXaW5kb3dzIE5ULgorICAgIENoZWNrIGlmIG5ldyBwYWNrYWdlIGNhbiBiZSB1c2VkICh2Mm1pc2MvbnRsZm4wOFtic10uemlwKS4KKzggICBzZXRsb2NhbGUoKSBpcyBib2d1cy4KKzggICBWaW0gYnVzeSB3YWl0cyBmb3IgbmV3IGNoYXJhY3RlcnMgb3IgbW91c2UgY2xpY2tzLglTaG91bGQgcHV0IGluIHNvbWUKKyAgICBzb3J0IG9mIHNsZWVwLCB0byBhdm9pZCBlYXRpbmcgNTAlIG9mIHRoZSBDUFUgdGltZS4gIFRlc3Qgb24gYW4gdW5wYXRjaGVkCisgICAgV2luZG93cyA5NSBzeXN0ZW0hCis4ICAgREpHUFA6IHdoZW4gc2hlbGwgaXMgYmFzaCwgbWFrZSBmYWlscy4gKERvbmFob2UpCis3ICAgSGl0dGluZyBDVFJMLVAgdHdpY2UgcXVpY2tseSAoZS5nLiBpbiBrZXl3b3JkIGNvbXBsZXRpb24pIG9uIGEgODA4OAorICAgIG1hY2hpbmUsIHN0YXJ0cyBwcmludGVyIGVjaG8hIChKb2huIE11bGxpbikuCis3ICAgTVNET1MgMTYgYml0IHZlcnNpb24gY2FuJ3Qgd29yayB3aXRoIENPTVNQRUMgdGhhdCBoYXMgYW4gYXJndW1lbnQsIGUuZy46CisgICAgQ09NU1BFQz1DOlxXSU5ET1dTXENPTU1BTkQuQ09NIC9FOjQwOTYgICAgKEJyYWRsZXkpCisgICAgQ2F1c2VkIGJ5IEJDQyBzeXN0ZW0oKSBmdW5jdGlvbiAoQm9ybGFuZCAibWFrZSIgaGFzIHRoZSBzYW1lIHByb2JsZW0pLgorOCAgIE1vdXNlOiBoYW5kbGUgbGVmdCZyaWdodCBidXR0b24gcHJlc3NlZCBhcyBtaWRkbGUgYnV0dG9uIHByZXNzZWQuICBBZGQKKyAgICBtb2RpZmllciBrZXlzIHNoaWZ0LCBjdHJsIGFuZCBhbHQuCis3ICAgV2hlbiB0b28gbWFueSBmaWxlcyBhcmUgb3BlbiAoZGVwZW5kcyBvbiBGSUxFUyksIHN0cmFuZ2UgdGhpbmdzIGhhcHBlbi4KKyAgICBUaGUgRG9zMTYgdmVyc2lvbiBydW5zIG91dCBvZiBtZW1vcnksIGluIHRoZSBEb3MzMiB2ZXJzaW9uICIhbHMiIGNhdXNlcyBhCisgICAgY3Jhc2guICBBbm90aGVyIHN5bXB0b206IC5zd3AgZmlsZXMgYXJlIG5vdCBkZWxldGVkLCBleGlzdGluZyBmaWxlcyBhcmUKKyAgICAiW05ldyBmaWxlXSIuCis3ICAgREpHUFAgdmVyc2lvbiBkb2Vzbid0IHdvcmsgd2l0aCBncmFwaGljcyBkaXNwbGF5IG1vZGUuICBTd2l0Y2ggdG8gYSBtb2RlCisgICAgdGhhdCBpcyBzdXBwb3J0ZWQ/Cis4ICAgREpHUFA6ICI6bW9kZSIgZG9lc24ndCB3b3JrIGZvciBtYW55IG1vZGVzLiAgRGlzYWJsZSB0aGVtLgorOCAgIERKR1BQOiBXaGVuIHN0YXJ0aW5nIGluIEV4IG1vZGUsIHNob3VsZG4ndCBjbGVhciB0aGUgc2NyZWVuLiAoV2FsdGVyCisgICAgQnJpc2NvZSkKKworCitNU0RPUywgT1MvMiBhbmQgV2luMzI6Cis4ICAgT1MvMjogQWRkIGJhY2t0aWNrIGV4cGFuc2lvbi4gIFVuZGVmaW5lIE5PX0VYUEFORFBBVEggYW5kIHVzZQorICAgIGdlbl9leHBhbmRfd2lsZGNhcmRzKCkuCis4ICAgT1MvMjogQWRkIGNsaXBib2FyZCBzdXBwb3J0PyAgU2VlIGV4YW1wbGUgY2xpcGJyZC5leGUgZnJvbSBBbGV4YW5kZXIKKyAgICBXYWduZXIuCis4ICAgT1MvMjogQWRkIEV4dGVuZGVkIEF0dHJpYnV0ZXMgc3VwcG9ydCBhbmQgZGVmaW5lIEhBVkVfQUNMLgorOCAgIE9TLzI6IFdoZW4gZWRpdGluZyBhIGZpbGUgbmFtZSAiZm9vLnR4dCIgdGhhdCBpcyBhY3R1YWxseSBjYWxsZWQgRk9PLnR4dCwKKyAgICB3cml0aW5nIHVzZXMgImZvby50eHQiLiAgU2hvdWxkIG9idGFpbiB0aGUgcmVhbCBmaWxlIG5hbWUuCis4ICAgU2hvdWxkICRVU0VSUFJPRklMRSBiZSB1c2VkIGluc3RlYWQgb2YgJEhPTUVEUklWRS8kSE9NRVBBVEg/Cis4ICAgV2luMzIgY29uc29sZTogPE0tVXA+IGFuZCA8TS1Eb3duPiBkb24ndCB3b3JrLiAoR2VkZGVzKSAgV2UgZG9uJ3QgaGF2ZQorICAgIHNwZWNpYWwga2V5cyBmb3IgdGhlc2UuICBTaG91bGQgdXNlIG1vZGlmaWVyICsga2V5LgorOCAgIFdpbjMyIGNvbnNvbGU6IGNhcHMtbG9jayBtYWtlcyBub24tYWxwaGEga2V5cyB3b3JrIGxpa2Ugd2l0aCBzaGlmdC4KKyAgICBTaG91bGQgd29yayBsaWtlIGluIHRoZSBHVUkgdmVyc2lvbi4KKzggICBFbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gRE9TIGFyZSBub3QgY2FzZSBzZW5zaXRpdmUuICBNYWtlIGEgZGVmaW5lIGZvcgorICAgIFNUUkNNUF9FTlYoKSwgYW5kIHVzZSBpdCB3aGVuIGNvbXBhcmluZyBlbnZpcm9ubWVudCB2YXIgbmFtZXMuCis4ICAgU2V0dGluZyAnc2hlbGxzbGFzaCcgaGFzIG5vIGltbWVkaWF0ZSBlZmZlY3QuICBDaGFuZ2UgYWxsIGZpbGUgbmFtZXMgd2hlbgorICAgIGl0IGlzIHNldC9yZXNldD8gIE9yIG9ubHkgdXNlIGl0IHdoZW4gYWN0dWFsbHkgZXhlY3V0aW5nIGEgc2hlbGwgY29tbWFuZD8KKzggICBXaGVuIGVkaXRpbmcgYSBmaWxlIG9uIGEgU2FtYmEgc2VydmVyLCBjYXNlIG1pZ2h0IG1hdHRlci4gICI6ZSBmaWxlIgorICAgIGZvbGxvd2VkIGJ5ICI6ZSBGSUxFIiB3aWxsIGVkaXQgImZpbGUiIGFnYWluLCBldmVuIHRob3VnaCAiRklMRSIgbWlnaHQgYmUKKyAgICBhbm90aGVyIG9uZS4gIFNldCBsYXN0IHVzZWQgbmFtZSBpbiBidWZsaXN0X25ldygpPyAgRml4IGRvX2VjbWQoKSwgZXRjLgorOCAgICI6bWtzZXNzaW9uIiBnZW5lcmF0ZXMgYSAiY2QiIGNvbW1hbmQgd2hlcmUgImFhXCNiYiIgbWVhbnMgZGlyZWN0b3J5ICIjYmIiCisgICAgaW4gImFhIiwgYnV0IGl0J3MgdXNlZCBhcyAiYWEjYmIiLiAoUm9uYWxkIEhvZWxsd2FydGgpCis4ICAgV2hlbiBhIGJ1ZmZlciBpcyBlZGl0aW5nIGEgZmlsZSBsaWtlICJmdHA6Ly9tYWNoL2ZpbGUiLCB3aGljaCBpcyBub3QgZ29pbmcKKyAgICB0byBiZSB1c2VkIGxpa2UgYSBub3JtYWwgZmlsZSBuYW1lLCBkb24ndCBjaGFuZ2UgdGhlIHNsYXNoZXMgdG8KKyAgICBiYWNrc2xhc2hlcy4gKFJvbmFsZCBIb2VsbHdhcnRoKQorCisKK1dpbmRvd3MgOTU6Cis4ICAgRWRpdGluZyBhIGZpbGUgYnkgaXQncyBzaG9ydCBmaWxlIG5hbWUgYW5kIHdyaXRpbmcgaXQsIG1ha2VzIHRoZSBsb25nIGZpbGUKKyAgICBuYW1lIGRpc2FwcGVhci4gIFNldHRpbmcgJ2JhY2t1cGNvcHknIGhlbHBzLgorICAgIFVzZSBGaW5kRmlyc3RGaWxlKCktPmNBbHRlcm5hdGVGaWxlTmFtZSBpbiBmbmFtZV9jYXNlKCkgKEdlb3JnZSBSZWlsbHkpLgorOCAgIERvaW5nIHdpbGRjYXJkIGV4cGFuc2lvbiwgd2lsbCBtYXRjaCB0aGUgc2hvcnQgZmlsZW5hbWUsIGJ1dCByZXN1bHQgaW4gdGhlCisgICAgbG9uZyBmaWxlbmFtZSAoYm90aCBESkdQUCBhbmQgV2luMzIpLgorCisKK1dpbjMyIGNvbnNvbGU6Cis5ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSBieSBpdHMgc2hvcnQgZmlsZSBuYW1lLCBpdCBzaG91bGQgYmUgZXhwYW5kZWQgaW50byBpdHMKKyAgICBsb25nIGZpbGUgbmFtZSwgdG8gYXZvaWQgcHJvYmxlbXMgbGlrZSB0aGVzZTogKE1jY29sbGlzdGVyKQorICAgICAxKSBDcmVhdGUgYSBmaWxlIGNhbGxlZCAiLmJhc2hyYyIgdXNpbmcgc29tZSBvdGhlciBlZGl0b3IuCisgICAgIDIpIERyYWcgdGhhdCBmaWxlIG9udG8gYSBzaG9ydGN1dCBvciB0aGUgYWN0dWFsIGV4ZWN1dGFibGUuCisgICAgIDMpIE5vdGUgdGhhdCB0aGUgZmlsZSBuYW1lIGlzIHNvbWV0aGluZyBsaWtlIEJBU0hSQ34xCisgICAgIDQpIEdvIHRvIEZpbGUtPlNhdmUgQXMgbWVudSBpdGVtIGFuZCB0eXBlICIuYmFzaHJjIiBhcyB0aGUgZmlsZSBuYW1lLgorICAgICA1KSBQcmVzcyAiWWVzIiB0byBpbmRpY2F0ZSB0aGF0IEkgd2FudCB0byBvdmVyd3JpdGUgdGhlIGZpbGUuCisgICAgIDYpIE5vdGUgdGhhdCB0aGUgbWVzc2FnZSAiRmlsZSBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIgaXMgZGlzcGxheWVkCisJYW5kIHRoZSBmaWxlIGlzIG5vdCBzYXZlZC4KKyAgICBVc2UgRmluZEZpcnN0RmlsZSgpIHRvIGV4cGFuZCBhIGZpbGUgbmFtZSBhbmQgZGlyZWN0b3J5IGluIHRoZSBwYXRoIHRvIGl0cworICAgIGxvbmcgbmFtZS4KKzggICBBbHNvIGltcGxlbWVudCAnY29uc2tleScgb3B0aW9uIGZvciB0aGUgV2luMzIgY29uc29sZSB2ZXJzaW9uPyAgTG9vayBhdAorICAgIGhvdyBYdmkgZG9lcyBjb25zb2xlIEkvTyB1bmRlciBXaW5kb3dzIE5ULgorNyAgIFJlLWluc3RhbGwgdGhlIHVzZSBvZiAkVEVSTSBhbmQgc3VwcG9ydCB0aGUgdXNlIG9mIGRpZmZlcmVudCB0ZXJtaW5hbHMsCisgICAgYmVzaWRlcyB0aGUgY29uc29sZS4KKzggICBVc2Ugb2YgPGFsdGdyPiBtb2RpZmllciBkb2Vzbid0IHdvcms/ICA1LjMgd2FzIE9LLiAoR2FyY2lhLVN1YXJlei9HdWNrZXMpCis5ICAgTWFwcGluZyA8Qy1TLVRhYj4gZG9lc24ndCB3b3JrIGNvcnJlY3RseS4gIEhvdyB0byBzZWUgdGhlIGRpZmZlcmVuY2Ugd2l0aAorICAgIDxDLVMtaT4/Cis5ICAgdG1wbmFtKCkgdXNlcyBmaWxlIGluIHJvb3Qgb2YgZmlsZSBzeXN0ZW06ICJcYXNkZiIuICBUaGF0IGRvZXNuJ3Qgd29yayBvbgorICAgIGEgTmV0d2FyZSBuZXR3b3JrIGRyaXZlLiAgVXNlIHNhbWUgZnVuY3Rpb24gYXMgZm9yIFdpbjMyIEdVST8KKzggICBJbiBvc193aW4zMi5oLCBIQVZFX1NUUklDTVAgYW5kIEhBVkVfU1RSTklDTVAgYXJlIGRlZmluZWQgb25seSBpZiBfX0dOVUNfXworICAgIGlzIG5vdCBkZWZpbmVkLiAgU2hvdWxkbid0IHRoYXQgYmUgdGhlIG90aGVyIHdheSBhcm91bmQ/Cis4ICAgIjp3aW5wb3MiIGRvZXNuJ3Qgd29yay4gIFBhdGNoIGZyb20gVmlwaW4gQXJhdmluZC4KKzcgICBVc2UgU2V0Q29uc29sZUNQKCkgYW5kIFNldENvbnNvbGVPdXRwdXRDUCgpIHRvIGltcGxlbWVudCAndGVybWVuY29kaW5nJz8KKyAgICBBdm9pZHMgdGhhdCBpbnB1dCBhbmQgb3V0cHV0IHdvcmsgZGlmZmVyZW50bHkuICBOZWVkIHRvIGJlIHJlc3RvcmVkIHdoZW4KKyAgICBleGl0aW5nLgorCisKK0FtaWdhOgorOCAgIEluIG1jaF9pbmNoYXIoKSBzaG91bGQgdXNlIGNvbnZlcnRfaW5wdXRfc2FmZSgpIHRvIGhhbmRsZSBpbmNvbXBsZXRlIGJ5dGUKKyAgICBzZXF1ZW5jZXMuCis5ICAgSW4gbWNoX2V4cGFuZHBhdGgoKSBhICIqIiBpcyB0byBiZSBleHBhbmRlZCwgYnV0ICJcKiIgaXNuJ3QuICBSZW1vdmUKKyAgICBiYWNrc2xhc2hlcyBpbiByZXN1bHQuCis4ICAgRXhlY3V0aW5nIGEgc2hlbGwsIG9ubHkgb25lIG9wdGlvbiBmb3IgJ3NoZWxsJyBpcyBzZXBhcmF0ZWQuICBTaG91bGQgZG8KKyAgICBhbGwgb3B0aW9ucywgdXNpbmcgd2hpdGUgc3BhY2Ugc2VwYXJhdGlvbi4KKworCitNYWNpbnRvc2g6Cis5ICAgTWFjOiBUaGUgbW90aW9uIHR5cGUgaXMgbm90IHN0b3JlZCBvbiB0aGUgY2xpcGJvYXJkLiAgVXNpbmcgIjpzZXQKKyAgICBjbGlwYm9hcmQ9dW5uYW1lZCIgbWFrZXMgInl5cCIgd29yayBjaGFyYWN0ZXJ3aXNlLiAoTWljaGFlbCBEZU1vbmV5KQorNyAgIExvYWRpbmcgdGhlIFBlcmwgbGlicmFyeSBvbmx5IHdvcmtzIG9uIE9TL1ggMTAuMiBvciAxMC4zLCBuZXZlciBvbiBib3RoLgorICAgIExvYWQgdGhlIFBlcmwgbGlicmFyeSBkeW5hbWljYWxseSBzZWUgUHl0aG9uIHNvdXJjZXMgZmlsZSBkeW5sb2FkX21hYworICAgIChKYWNrKQorICAgIGR5bmFtaWMgbGlua2luZzogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGVjaG5vdGVzL3RuMjAwMi90bjIwNjQuaHRtbAorOCAgIElucHV0dGluZyBVbmljb2RlIGNoYXJhY3RlcnMgZG9lcyBub3Qgd29yayBpbiB0aGUgdGVybWluYWwuICBUaGV5IGFwcGVhcgorICAgIHRvIGFycml2ZSBhcyB1cHBlciBhbmQgbG93ZXIgYnl0ZXMuIChEYXZpZCBCcm93biwgMjAwNCBBcHJpbCAxNykKKzggICBUeXBpbmcgVW5pY29kZSBjaGFyYWN0ZXJzIGRvZXNuJ3Qgd29yayBhdCBhbGwgaW4gdGhlIEdVSS4KKzggICBQYXRjaCB0byBhZGQgJ3RyYW5zcGFyZW5jeScgb3B0aW9uLiAgRGlzYWR2YW50YWdlOiBpdCdzIHNsb3cuIChFY2tlaGFyZAorICAgIEJlcm5zLCAyMDA0IE1heSA5KSBodHRwOi8vZWNraS50by92aW0taWNucy9UcmFuc0JhY2suZGlmZgorOCAgIFBhdGNoZXMgZnJvbSAiUmFpbiBEb2ciIEN1Y2thOgorICAgIC0gZ3VpZm9udCBzZWxlY3RvciAoMjAwMiBEZWMgMTUpCisgICAgLSBzY3JvbGxiYXIgKDIwMDIgRGVjIDgpCisgICAgLSBRdWFydHogZm9udHMgKDIwMDIgRGVjIDgpCis5ICAgUHJvYmxlbXMgaW4gQ2FyYm9uIHZlcnNpb24gZm9yIE9TIFg6IChCZW5qaSBGaXNoZXIpCisgICAgLSBrZXlib2FyZCBzaG9ydGN1dHMgaW4gdGhlIG1lbnVzIGdldCBsb3N0LgorOCAgIFRoZSBWaW0vQWJvdXQgbWVudSBkb2Vzbid0IHdvcmsuCis4ICAgIjpndWkiIGRvZXNuJ3QgZm9yay4gIEVuYWJsaW5nIHRoZSBjb2RlIGluIGd1aS5jIHRvIGZvcmsgY2F1c2VzIGEgU0VHVi4KKzggICBEZWZpbmUgdmltX21rZGlyKCkgZm9yIE1hY2ludG9zaC4KKzggICBEZWZpbmUgbWNoX3dyaXRhYmxlKCkgZm9yIE1hY2ludG9zaC4KKzkgICBXaGVuIERpc2tMb2NrIGlzIHJ1bm5pbmcsIHVzaW5nIGEgc3dhcCBmaWxlIGNhdXNlcyBhIGNyYXNoLiAgQXBwZWFycyB0byBiZQorICAgIGEgcHJvYmxlbSB3aXRoIHdyaXRpbmcgYSBmaWxlIHRoYXQgc3RhcnRzIHdpdGggYSBkb3QuIChHaWFjYWxvbmUpCis5ICAgT24gRzMgTWFjLCBPUyB2ZXJzaW9uIDgsIGNvbnRyb2wgc3RyaXAgY2F1c2VzIGNoYXJhY3RlcnMgbWVzc2VkIHVwIHdoZW4KKyAgICBzY3JvbGxpbmcgKENUUkwtTCBjbGVhbnMgaXQgdXApLiAoQmVuamkgRmlzaGVyKQorOSAgIE9uIEczIE1hYywgT1MgdmVyc2lvbiA4LCB2YXJpYWJsZS1zcGVlZCBzY3JvbGxpbmcgZG9lc24ndCB3b3JrLCBhZnRlciB0d28KKyAgICBzZWNvbmRzIG9mIHNjcm9sbGluZyB0aGUgc2NyZWVuIGZyZWV6ZXMuIChCZW5qaSBGaXNoZXIpCis5ICAgSW4gbWFjX2V4cGFuZHBhdGgoKSBjaGVjayB0aGF0IGhhbmRsaW5nIG9mIGJhY2tzbGFzaGVzIGlzIGRvbmUgcHJvcGVybHkuCis4ICAgU3RhbmRhcmQgTWFjIHNob3J0Y3V0cyBhcmUgbWlzc2luZy4gIChBbWVyaWdlKQorOCAgIEhhbmRsaW5nIG9mIG5vbi1maXhlZCB3aWR0aCBmb250cyBpcyB3cm9uZy4gKEFtZXJpZ2UpCisKKworIlNtYWxsIiBwcm9ibGVtczoKKzggICBXaGVuIGFuICI6ZWRpdCIgaXMgaW5zaWRlIGEgdHJ5IGNvbW1hbmQgYW5kIHRoZSBBVFRFTlRJT04gcHJvbXB0IGlzIHVzZWQsCisgICAgdGhlIDpjYXRjaCBjb21tYW5kcyBhcmUgYWx3YXlzIGV4ZWN1dGVkLCBhbHNvIHdoZW4gdGhlIGZpbGUgaXMgZWRpdGVkCisgICAgbm9ybWFsbHkuICBTaG91bGQgcmVzZXQgZGlkX2Vtc2cgYW5kIHVuZG8gc2lkZSBlZmZlY3RzLiAgQWxzbyBtYWtlIHN1cmUKKyAgICB0aGUgQVRURU5USU9OIG1lc3NhZ2Ugc2hvd3MgdXAuCis5ICAgV2hlbiB1c2luZyAiOmUgKytlbmM9Zm9vIGZpbGUiIGFuZCB0aGUgZmlsZSBpcyBhbHJlYWR5IGxvYWRlZCB3aXRoCisgICAgJ2ZpbGVlbmNvZGluZycgc2V0IHRvICJiYXIiLCB0aGVuIGRvX2VjbWQoKSB1c2VzIHRoYXQgYnVmZmVyLCBldmVuIHRob3VnaAorICAgIHRoZSBmaWxlZW5jb2RpbmcgZGlmZmVycy4gIFJlbG9hZCB0aGUgYnVmZmVyIGluIHRoaXMgc2l0dWF0aW9uPyAgTmVlZCB0bworICAgIGNoZWNrIGZvciB0aGUgYnVmZmVyIHRvIGJlIHVubW9kaWZpZWQuCis4ICAgIjpnLy8iIGdpdmVzICJQYXR0ZXJuIG5vdCBmb3VuZCBlcnJvciIgd2l0aCBFNDg2LiAgU2hvdWxkIG5vdCB1c2UgdGhlCisgICAgZXJyb3IgbnVtYmVyLCBpdCdzIG5vdCBhIHJlZ3VsYXIgZXJyb3IgbWVzc2FnZS4KKzcgICBWaW10dXRvciBsZWF2ZXMgZXNjYXBlIHNlcXVlbmNlIGluIHRlcm1pbmFsLiBUaGlzIGlzIHRoZSB4dGVybSByZXNwb25zZSB0bworICAgIHJlcXVlc3RpbmcgdGhlIHZlcnNpb24gbnVtYmVyLiAgKFlhc3VoaXJvIE1hdHN1bW90bykKKzggICBXaGVuIHJlZGlyZWN0aW5nIGFuZCB1c2luZyAiOnNpbGVudCIgdGhlIGN1cnJlbnQgY29sdW1uIGZvciBkaXNwbGF5aW5nIGFuZAorICAgIHJlZGlyZWN0aW9uIGNhbiBiZSBkaWZmZXJlbnQuICBVc2UgYSBzZXBhcmF0ZSB2YXJpYWJsZSB0byBob2xkIHRoZSBjb2x1bW4KKyAgICBmb3IgcmVkaXJlY3Rpb24uCis3ICAgVGhlcmUgaXMgbm8gd2F5IHRvIGNoYW5nZSBkaXJlY3RvcnkgYW5kIGdvIGJhY2sgd2l0aG91dCBjaGFuZ2luZyB0aGUgbG9jYWwKKyAgICBhbmQvb3IgZ2xvYmFsIGRpcmVjdG9yeS4gIEFkZCBhIHdheSB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCB3aW5kb3cgdXNlcworICAgIGEgbG9jYWwgZGlyZWN0b3J5LiAgQWRkIGNkY21kKCkgdGhhdCByZXR1cm5zICI6Y2QiIG9yICI6bGNkIj8KKzcgICBBZnRlciBydW5uaW5nICJtYWtlIHRlc3QiIHRoZSB3aW5kb3cgdGl0bGUgaXMgc29tZXRpbWVzIG5vdCByZXN0b3JlZC4KKyAgICBNb3N0bHkgc3RpY2tzIGF0ICJ0ZXN0My5pbiIsIGJ1dCBub3QgYWx3YXlzLiAgQXBwZWFycyB0byBoYXBwZW4gbW9yZSBvZnRlbgorICAgIHdoZW4gY29tcGlsZWQgd2l0aCBQeXRob24gKHRocmVhZGluZykuCis3ICAgVGhlIG1lc3NhZ2VzIGZvciAidmltIC0taGVscCIgYW5kICJ2aW0gLS12ZXJzaW9uIiBkb24ndCB1c2UKKyAgICAndGVybWVuY29kaW5nJy4KKzcgICBBVFRFTlRJT04gZGlhbG9nIGNob2ljZXMgYXJlIG1vcmUgbG9naWNhbCB3aGVuICJEZWxldGUgaXQnIGFwcGVhcnMgYmVmb3JlCisgICAgIlF1aXQiLiAgUGF0Y2ggYnkgUm9iZXJ0IFdlYmIsIDIwMDQgTWF5IDMuCis4ICAgV2hlbiAnc2Nyb2xsYmluZCcgaXMgc2V0LCBhIHdpbmRvdyB3b24ndCBzY3JvbGwgaG9yaXpvbnRhbGx5IGlmIHRoZSBjdXJzb3IKKyAgICBsaW5lIGlzIHRvbyBzaG9ydC4gIEFkZCBhIHdvcmQgaW4gJ3Njcm9sbG9wdCcgdG8gYWxsb3cgbW92aW5nIHRoZSBjdXJzb3IKKyAgICB0byBsb25nZXIgbGluZSB0aGF0IGlzIHZpc2libGUuICBBIHNpbWlsYXIgdGhpbmcgaXMgZG9uZSBmb3IgdGhlIEdVSSB3aGVuCisgICAgdXNpbmcgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyLgorNyAgIFZpc1ZpbSBjYW4gb25seSBvcGVuIG9uZSBmaWxlLiAgSGFyZCB0byBzb2x2ZTogZWFjaCBvcGVuZWQgZmlsZSBpcyBwYXNzZWQKKyAgICB3aXRoIGEgc2VwYXJhdGUgaW52b2NhdGlvbiwgd291bGQgbmVlZCB0byB1c2UgdGltZXN0YW1wcyB0byBrbm93IHRoZQorICAgIGludm9jYXRpb25zIGJlbG9uZyB0b2dldGhlci4KKzggICBXaGVuIGdpdmluZyBhICI6YndpcGVvdXQiIGNvbW1hbmQgYSBmaWxlLWNoYW5nZWQgZGlhbG9nIG1heSBwb3B1cCBmb3IgdGhpcworICAgIGJ1ZmZlciwgd2hpY2ggaXMgcG9pbnRsZXNzLiAgKE1pa2UgV2lsbGlhbXMpCis4ICAgT24gTVMtV2luZG93cyAiOm1ha2UiIGRvZXNuJ3Qgc2hvdyBvdXRwdXQgd2hpbGUgaXQgaXMgd29ya2luZy4gIFVzZSB0aGUKKyAgICB0ZWUuZXhlIGZyb20gIGh0dHA6Ly91bnh1dGlscy5zb3VyY2Vmb3JnZS5uZXQvID8gIEFib3V0IDE2IEtieXRlIGluIHRoZQorICAgIFVueFV0aWxzLnppcCBhcmNoaXZlLgorICAgIEFsdGVybmF0ZSBvbmU6IGh0dHA6Ly93d3cucHJhbW9keC4yMG0uY29tL3RlZV9mb3Jfd2luMzIuaHRtLCBidXQgV2FsdGVyCisgICAgQnJpc2NvZSBzYXlzIGl0J3Mgbm90IGFzIGdvb2QuCis4ICAgJ2ZpbGxjaGFycycgZG9lc24ndCB3b3JrIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCis5ICAgRWRpdGluZyBhIFhNTCBmaWxlIHdpdGggYSBsb25nIGxpbmUgaXMgZXh0cmVtZWx5IHNsb3cuICBFeGFtcGxlIGZpbGUgZnJvbQorICAgIFJhbmR5IFBhcmtlciAoRGVjIDEzKS4gIEVkaXRpbmcgdGhlIGRpY3Rpb25hcmllcyBmb3IgZW5nc3BjaGsgcGx1Z2luIHdpdGgKKyAgICBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIGFsc28gdmVyeSBzbG93LgorICAgIExpbWl0IHRoZSBzZWFyY2hpbmcgZm9yIGl0ZW1zIHRvIGEgZmV3IGh1bmRyZWQgY2hhcmFjdGVycz8KKzggICBDb21tYW5kIGxpbmUgY29tcGxldGlvbjogYnVmZmVycyAiZm9vLnR4dCIgYW5kICIuLi9iL2Zvby50eHQiLCBjb21wbGV0aW5nCisgICAgIjpidWYgZm9vPFRhYj4iIGRvZXNuJ3QgZmluZCB0aGUgc2Vjb25kIG9uZS4gKEdlb3JnZSBWLiBSZWlsbHkpCis3ICAgT3V0cHV0IGZvciAiOnNjcmlwdG5hbWVzIiBhbmQgIjpicmVha2xpc3QiIHNob3VsZCBzaG9ydGVuIHRoZSBmaWxlIG5hbWVzOgorICAgIHVzZSAifi8iIHdoZW4gcG9zc2libGUuCis4ICAgQWZ0ZXIgdXNpbmcgZGlmZiBtb2RlLCAiOnNldCBub2RpZmYiIGRvZXNuJ3QgcmVzdG9yZSB0aGUgb2xkIGZvbGRtZXRob2QuCisgICAgKFRob21hcyBTLiBVcmJhbikKKzcgICBtYl9vZmYyY2VsbHMoKSBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IG9uIHRoZSB0YWlsIGJ5dGUgb2YgYSBkb3VibGUtYnl0ZQorICAgIGNoYXJhY3Rlci4gKFlhc3VoaXJvIE1hdHN1bW90bykgIEl0IHNob3VsZCByZXR1cm4gMSB3aGVuIHVzZWQgb24gYSB0YWlsCisgICAgYnl0ZSwgbGlrZSBmb3IgdXRmLTguICBTdG9yZSBzZWNvbmQgYnl0ZSBvZiBkb3VibGUtYnl0ZSBpbiBTY3JlZW5MaW5lczJbXQorICAgIChsaWtlIGZvciBEQkNTX0pQTlUpIGFuZCBwdXQgYSB6ZXJvIGluIHRoZSBzZWNvbmQgYnl0ZSAobGlrZSBmb3IgVVRGLTgpLgorOCAgICdiYWNrdXBkaXInIGFuZCAnZGlyZWN0b3J5JyBzaG91bGQgdXNlICRUTVBESVIsICRUTVAgYW5kL29yICRURU1QIHdoZW4KKyAgICBkZWZpbmVkLgorNyAgIEluc2lkZSBhIGZ1bmN0aW9uIHdpdGggInBlcmwgPDxFT0YiIGEgbGluZSB3aXRoICIkaSsrIiBpcyByZWNvZ25pemVkIGFzIGFuCisgICAgIjppbnNlcnQiIGNvbW1hbmQsIGNhdXNpbmcgdGhlIGZvbGxvd2luZyAiZW5kZnVuY3Rpb24iIG5vdCB0byBiZSBmb3VuZC4KKyAgICBBZGQgc2tpcHBpbmcgdGhpcyBwZXJsIGNvbnN0cnVjdGlvbiBpbnNpZGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCis3ICAgV2hlbiAndHRpbWVvdXRsZW4nIGlzIDEwIGFuZCAndGltZW91dGxlbicgaXMgMTAwMCwgdGhlcmUgaXMgYSBrZXljb2RlCisgICAgIjxFc2M+YSIgYW5kIGEgbWFwcGluZyA8RXNjPngiLCB3aGVuIHR5cGluZyAiPEVzYz5hIiB3aXRoIGhhbGYgYSBzZWNvbmQKKyAgICBkZWxheSBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIGEga2V5Y29kZS4gKEhhbnMgR2luemVsKQorNyAgICI6Ym90cmlnaHQgMSBuZXciIHR3aWNlIGNhdXNlcyBhbGwgd2luZG93IGhlaWdodHMgdG8gYmUgY2hhbmdlZC4gIE1ha2UgdGhlCisgICAgYm90dG9tIHdpbmRvdyBvbmx5IGJpZ2dlciBhcyBtdWNoIGFzIG5lZWRlZC4KKzcgICAiW3AiIGRvZXNuJ3Qgd29yayBpbiBWaXN1YWwgbW9kZS4gKERhdmlkIEJyb3duKQorNyAgIFRoZSBDeWd3aW4gYW5kIE1pbmdXIG1ha2VmaWxlcyBkZWZpbmUgIlBDIiwgYnV0IGl0J3Mgbm90IHVzZWQgYW55d2hlcmUuCisgICAgUmVtb3ZlPyAoRGFuIFNoYXJwKQorOSAgIFRoZSBhcmd1bWVudCA8Zi1hcmdzPiBvZiBhIHVzZXIgY29tbWFuZCBkb2Vzbid0IGhhbmRsZSBiYWNrc2xhc2hlcworICAgIHByb3Blcmx5LiAiQ21kIFwgZSIgaXMgb25lIGFyZ3VtZW50LCAiQ21kIFxcIGUiIHN0aWxsIGlzIG9uZSBhcmd1bWVudC4KKyAgICAiQ21kIFwgIGUiIGlzIHR3byBhcmd1bWVudHMsIGZpcnN0IG9uZSBlbmRpbmcgaW4gc3BhY2UuIChLb250cmEgR2VyZ2VseSkKKzkgICBVc2VyIGNvbW1hbmRzIHVzZSB0aGUgY29udGV4dCBvZiB0aGUgc2NyaXB0IHRoZXkgd2VyZSBkZWZpbmVkIGluLiAgVGhpcworICAgIGNhdXNlcyBhICJzOnZhciIgYXJndW1lbnQgdG8gdW5leHBlY3RlZGx5IHVzZSBhIHZhcmlhYmxlIGluIHRoZSBkZWZpbmluZworICAgIHNjcmlwdCwgbm90IHRoZSBjYWxsaW5nIHNjcmlwdC4gIEFkZCBhbiBhcmd1bWVudCB0byAiOmNvbW1hbmQiOgorICAgICIta2VlcGNvbnRleHQiLiAgRG8gcmVwbGFjZSA8U0lEPiwgc28gdGhhdCBhIGZ1bmN0aW9uIGluIHRoZSBkZWZpbmluZworICAgIHNjcmlwdCBjYW4gYmUgY2FsbGVkLgorOCAgIFRoZSBKYXBhbmVzZSBtZXNzYWdlIHRyYW5zbGF0aW9ucyBmb3IgTVMtV2luZG93cyBhcmUgY2FsbGVkIGphLnNqaXMucG8sCisgICAgYnV0IHRoZXkgdXNlIGVuY29kaW5nIGNwOTMyLiAgUmVuYW1lIHRoZSBmaWxlIGFuZCBjaGVjayB0aGF0IGl0IHN0aWxsCisgICAgd29ya3MuCis5ICAgV2hlbiBhIHN5bnRheCByZWdpb24gZG9lcyBub3QgdXNlICJrZWVwZW5kIiBhbmQgYSBjb250YWluZWQgaXRlbSBkb2VzIHVzZQorICAgICJleHRlbmQiLCB0aGlzIG1ha2VzIHRoZSBvdXRlciByZWdpb24gc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBjb250YWluZWQKKyAgICByZWdpb24uIChMdXR6IEV5bWVycykgIEFub3RoZXIgZXhhbXBsZSBOb3YgMTQgMjAwMi4KKzggICBBIHZlcnkgbG9uZyBtZXNzYWdlIGluIGNvbmZpcm0oKSBjYW4ndCBiZSBxdWl0LiAgTWFrZSB0aGlzIHBvc3NpYmxlIHdpdGgKKyAgICBDVFJMLUMuCis3ICAgY2xpcF94MTFfb3duX3NlbGVjdGlvbigpIHVzZXMgQ3VycmVudFRpbWUsIHRoYXQgaXMgbm90IGFsbG93ZWQuICBWTkMgWAorICAgIHNlcnZlciBoYXMgYSBwcm9ibGVtIHdpdGggdGhpcy4gIChNYXJrIFdhZ2dvbmVyKSBSZW1lbWJlcmluZyB0aGUgdGltZXN0YW1wCisgICAgb2YgZXZlbnRzIGlzbid0IGFsd2F5cyBwb3NzaWJsZS4gIFdlIGRvbid0IGdldCB0aGVtIGluIGFuIHh0ZXJtLiAgR1RLCisgICAgZG9lc24ndCBvYnRhaW4gdGhlIHNlbGVjdGlvbiBhZ2FpbiB3aGVuIHRoZSB0aW1lc3RhbXAgZGlmZmVycywgdGh1cyBpdAorICAgIHdvbid0IHdvcmsgZm9yIEdUSyBhbnl3YXkuCis4ICAgV2hlbiB0aGUgY2xpcGJvYXJkIGlzbid0IHN1cHBvcnRlZDogIjp5YW5rKiIgZ2l2ZXMgYSBjb25mdXNpbmcgZXJyb3IKKyAgICBtZXNzYWdlLiAgU3BlY2lmaWNhbGx5IG1lbnRpb24gdGhhdCB0aGUgcmVnaXN0ZXIgbmFtZSBpcyBpbnZhbGlkLgorOCAgICJnZiIgYWx3YXlzIGV4Y2x1ZGVzIHRyYWlsaW5nIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMuIGZpbGVfbmFtZV9pbl9saW5lKCkKKyAgICBpcyBjdXJyZW50bHkgZml4ZWQgdG8gdXNlICIuLDo7ISIuICBBZGQgYW4gb3B0aW9uIHRvIG1ha2UgdGhpcworICAgIGNvbmZpZ3VyYWJsZT8KKzggICAnaGttYXAnIHNob3VsZCBwcm9iYWJseSBiZSBnbG9iYWwtbG9jYWwuCis5ICAgV2hlbiAiJCIgaXMgaW4gJ2Nwb3B0aW9ucycgYW5kIGZvbGRpbmcgaXMgYWN0aXZlLCBhICJDIiBjb21tYW5kIGNoYW5nZXMKKyAgICB0aGUgZm9sZHMgYW5kIHJlc2V0cyB3X2xpbmVzX3ZhbGlkLiAgVGhlIGRpc3BsYXkgdXBkYXRpbmcgZG9lc24ndCB3b3JrCisgICAgdGhlbi4gKFByaXRlc2ggTWlzdHJ5KQorOCAgICI6cyFmcm9tIXRvISIgd29ya3MsIGJ1dCAiOnNtYWdpYyFmcm9tIXRvISIgZG9lc24ndC4gIEl0IHNlZXMgdGhlICIhIiBhcyBhCisgICAgZmxhZyB0byB0byB0aGUgY29tbWFuZC4gIFNhbWUgZm9yICI6c25vbWFnaWMiLiAoSm9oYW4gU3BldHopCis4ICAgVXNpbmcgIjpzIiBpbiBhIGZ1bmN0aW9uIGNoYW5nZXMgdGhlIHByZXZpb3VzIHJlcGxhY2VtZW50IHN0cmluZy4gIFNhdmUKKyAgICAib2xkX3N1YiIgaW4gc2F2ZV9zZWFyY2hfcGF0dGVybnMoKT8KKzggICBXaGVuIGFwcGVuZGluZyB0byBhIGZpbGUgYW5kICdwYXRjaG1vZGUnIGlzbid0IGVtcHR5LCBhIGJhY2t1cCBmaWxlIGlzCisgICAgYWx3YXlzIHdyaXR0ZW4sIGV2ZW4gd2hlbiB0aGUgb3JpZ2luYWwgZmlsZSBhbHJlYWR5IGV4aXN0cy4KKzcgICBXaGVuIHVzaW5nICJkYXciIG9uIHRoZSBsYXN0IHdvcmQgaW4gYSBmaWxlIGFuZCB0aGlzIGlzIGEgc2luZ2xlIGxldHRlciwKKyAgICBub3RoaW5nIGlzIGRlbGV0ZWQuICBTaG91bGQgZGVsZXRlIHRoZSBsZXR0ZXIgYW5kIHByZWNlZGluZyB3aGl0ZSBzcGFjZS4KKzkgICBXaGVuIGdldHRpbmcgZm9jdXMgd2hpbGUgd3JpdGluZyBhIGxhcmdlIGZpbGUsIGNvdWxkIHdhcm4gZm9yIHRoaXMgZmlsZQorICAgIGJlaW5nIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0uICBBdm9pZCBjaGVja2luZyB0aGlzIHdoaWxlIHRoZSBmaWxlIGlzIGJlaW5nCisgICAgd3JpdHRlbi4KKzkgICBUaGUgIkVycm9yIGRldGVjdGVkIHdoaWxlIHByb2Nlc3NpbmcgbW9kZWxpbmVzIiBtZXNzYWdlIHNob3VsZCBoYXZlIGFuCisgICAgZXJyb3IgbnVtYmVyLgorNyAgIFRoZSBtZXNzYWdlIGluIGJ0X2RvbnR3cml0ZV9tc2coKSBjb3VsZCBiZSBjbGVhcmVyLgorOCAgIFVuaXg6IFdoZW4gbGliY2FsbCgpIGZhaWxzIHRoZXJlIGlzIG5vIGNsZWFyIGVycm9yIG1lc3NhZ2UuICBKb2hhbm5lcworICAgIFplbGxuZXIgaGFzIGEgcGF0Y2ggZm9yIHRoaXMuCis4ICAgVGhlIHNjcmlwdCBJRCB0aGF0IGlzIHN0b3JlZCB3aXRoIGFuIG9wdGlvbiBhbmQgZGlzcGxheWVkIHdpdGggIjp2ZXJib3NlCisgICAgc2V0IiBpc24ndCByZXNldCB3aGVuIHRoZSBvcHRpb24gaXMgc2V0IGludGVybmFsbHkuICBGb3IgZXhhbXBsZSB3aGVuCisgICAgJ2ZvbGRsZXZlbCcgaXMgc2V0IGZyb20gJ2ZvbGRsZXZlbHN0YXJ0Jy4KKzggICBJbiB0aGUgZmlsZWZvcm1hdCBkaWFsb2csICJDYW5jZWwiIGlzbid0IHRyYW5zbGF0ZWQuICBBZGQgYSBnbG9iYWwKKyAgICB2YXJpYWJsZSBmb3IgdGhpcy4gKEVkdWFyZG8gRmVybmFuZGV6KQorOSAgIFdoZW4gZWRpdGluZyBhIGZpbGUgd2l0aCAncmVhZG9ubHknIHNldCwgdGhlcmUgaXMgbm8gY2hlY2sgZm9yIGFuIGV4aXN0aW5nCisgICAgc3dhcCBmaWxlLiAgVGhlbiB1c2luZyAiOndyaXRlIiAod2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZXMpIGRvZXNuJ3QgZ2l2ZQorICAgIGEgd2FybmluZyBlaXRoZXIuICBTaG91bGQgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN3YXAgZmlsZSB3aXRob3V0IGNyZWF0aW5nCisgICAgb25lLgorNyAgIE9uIE1TLURPUyBvciBNUy1XaW5kb3dzLCB3aGVuIGVkaXRpbmcgdGhlIHNhbWUgZmlsZSBvdmVyIGEgbmV0d29yaywgdGhlCisgICAgZHJpdmUgbGV0dGVyIGlzIGRpZmZlcmVudCwgdGh1cyBhbiBleGlzdGluZyBzd2FwIGZpbGUgZG9lc24ndCBnZW5lcmF0ZSBhCisgICAgd2FybmluZy4gIFVzZSBzb21lIGZsYWcgdG8gaW5kaWNhdGUgdGhlIHN3YXAgZmlsZSBpcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyAgICBhcyB0aGUgb3JpZ2luYWwgZmlsZT8gIENvdWxkIG1ha2UgYjBfZm5hbWVbXSBzdGFydCB3aXRoIGEgc3BlY2lhbAorICAgIGNoYXJhY3RlciBsaWtlICI+Ii4KKzcgICBXaGVuICdzaG93YnJlYWsnIGlzIHNldCwgdGhlIGFtb3VudCBvZiBzcGFjZSBhIFRhYiBvY2N1cGllcyBjaGFuZ2VzLgorICAgIFNob3VsZCB3b3JrIGxpa2UgJ3Nob3dicmVhaycgaXMgaW5zZXJ0ZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgVGFicy4KKzcgICBXaGVuIHRoZXJlIGlzIGEgImhlbHAudHh0IiB3aW5kb3cgaW4gYSBzZXNzaW9uIGZpbGUsIHJlc3RvcmluZyB0aGF0CisgICAgc2Vzc2lvbiB3aWxsIG5vdCBnZXQgdGhlICJMT0NBTCBBRERJVElPTlMiIGJhY2suCis3ICAgV2hlbiAnbW91c2Vmb2N1cycgaXMgc2V0IGFuZCBzd2l0Y2hpbmcgdG8gYW5vdGhlciB3aW5kb3cgd2l0aCBhIHR5cGVkCisgICAgY29tbWFuZCwgdGhlIG1vdXNlIHBvaW50ZXIgbWF5IGJlIG1vdmVkIHRvIGEgcGFydCBvZiB0aGUgd2luZG93IHRoYXQncworICAgIGNvdmVyZWQgYnkgYW5vdGhlciB3aW5kb3cgYW5kIHdlIGxvc2UgZm9jdXMuICBPbmx5IG1vdmUgaW4gdGhlIHkKKyAgICBkaXJlY3Rpb24sIG5vdCBob3Jpem9udGFsbHk/Cis4ICAgV2hlbiB1c2luZyBDVFJMLUQgYWZ0ZXIgIjpoZWxwIiwgcmVzdHJpY3QgdGhlIG51bWJlciBvZiBtYXRjaGVzIHRvIGEKKyAgICB0aG91c2FuZCwgb3RoZXJ3aXNlIHVzaW5nIENUUkwtRCB3aXRob3V0IGFuIGFyZ3VtZW50IHRha2VzIHRvbyBsb25nLgorOCAgICI6aGFyZGNvcHkiOgorICAgIC0gUGF0Y2ggdG8gYXBwZW5kIENUUkwtRCB0byBQb3N0U2NyaXB0IG91dHB1dCAoTWlrZSBXaWxsaWFtcywgMjAwNCBKdW4gMTEpCisgICAgLSBVc2luZyB0aGUgY3Rlcm1fY29sb3JbXSB0YWJsZSBpcyB3cm9uZyB3aGVuIHRfY29sb3JzIGlzID4gMTYuCisgICAgLSBOZWVkIHRvIGhhbmRsZSB1bnByaW50YWJsZSBjaGFyYWN0ZXJzLgorICAgIC0gV2luMzI6IE9uIGEgQiZXIHByaW50ZXIgc3ludGF4IGhpZ2hsaWdodGluZyBpc24ndCB2aXNpYmxlLiAgUGVyZm9ybQorICAgICAgZGl0aGVyaW5nIHRvIG1ha2UgZ3JleSB0ZXh0PworICAgIC0gc3VwcG9ydCBwcmludGluZyBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICBQYXRjaCBmcm9tIE1vdG9ub2J1IEljaGltdXJhLgorICAgICAgTmV3IChiZXR0ZXIpIHBhdGNoIGZyb20gTWlrZSBXaWxsaWFtcyAoMjAwNCBKYW4gMjApCisgICAgLSBBZGQgYSBmbGFnIGluICdwcmludG9wdGlvbnMnIHRvIGFkZCBhbiBlbXB0eSBwYWdlIHRvIG1ha2UgdGhlIHRvdGFsCisgICAgICBudW1iZXIgZXZlbi4gICJhZGRlbXB0eSI/IChNaWtlIFdpbGxpYW1zKQorICAgIC0gU2hvdWxkIGludGVycHJldGVkIENUUkwtTCBhcyBhIHBhZ2UgYnJlYWsuCisgICAgLSBHcmV5IGxpbmUgbnVtYmVycyBhcmUgbm90IGFsd2F5cyByZWFkYWJsZS4gIEFkZCBmaWVsZCBpbiAncHJpbnRvcHRpb25zJy4KKyAgICAgIERlZmF1bHQgdG8gYmxhY2sgd2hlbiBubyBzeW50YXggaGlnaGxpZ2h0aW5nLgorICAgIC0gQmUgYWJsZSB0byBwcmludCBhIHdpbmRvdyBpbiBkaWZmIG1vZGUuCisgICAgLSBCZSBhYmxlIHRvIHNwZWNpZnkgYSBjb2xvcnNjaGVtZSB0byB1c2UgZm9yIHByaW50aW5nLiAgQW5kIGEgc2VwYXJhdGUKKyAgICAgIG9uZSBmb3IgQiZXIHByaW50aW5nIChpZiB0aGF0IGNhbiBiZSBkZXRlY3RlZCkuCis4ICAgSW4gVmlzdWFsIGJsb2NrIG1vZGUgd2l0aCAnbGJyJyBzZXQsIGEgY2hhbmdlIGNvbW1hbmQgZG9lc24ndCBpbnNlcnQgdGhlCisgICAgdGV4dCBpbiBmb2xsb3dpbmcgbGluZXMgd2hlcmUgdGhlIGxpbmVicmVhayBjaGFuZ2VzLgorOSAgIGRvc2luc3QuYzogVGhlIERKR1BQIHZlcnNpb24gY2FuJ3QgdW5pbnN0YWxsIHRoZSBVbmluc3RhbGwgcmVnaXN0cnkga2V5IG9uCisgICAgV2luZG93cyBOVC4gIEhvdyB0byBpbnN0YWxsIGEgLmluZiBmaWxlIG9uIFdpbmRvd3MgTlQgYW5kIGhvdyB0byBkZXRlY3QKKyAgICB0aGF0IFdpbmRvd3MgTlQgaXMgYmVpbmcgdXNlZD8KKzggICBXaGVuIG9wZW5pbmcgdGhlIHNhbWUgZmlsZSBvbiBVbml4IGFuZCBvbiBNUy1XaW5kb3dzLCB0aGVyZSBpcyBubworICAgIEFUVEVOVElPTiBtZXNzYWdlLCBiZWNhdXNlIHRoZSBwYXRoIGluIHRoZSBzd2FwIGZpbGUgaXMgZGlmZmVyZW50LiAgVXNpbmcKKyAgICBhIHJlbGF0aXZlIHBhdGggbmFtZSB3aWxsIGNhdXNlIG5vIEFUVEVOVElPTiBmb3IgVmltIDUuOC4KKyAgICBTb21laG93IGFkZCBhIGZsYWcgdGhhdCB0aGUgc3dhcCBmaWxlIGlzIGluIHRoZSBzYW1lIGRpciBhcyB0aGUgZmlsZT8KKzggICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgImJsb2NrLGluc2VydCIgYW5kIGVuY29kaW5nIGlzICJ1dGYtOCIsIHNlbGVjdGluZyBhCisgICAgYmxvY2sgb2Ygb25lIGRvdWJsZS13aWRlIGNoYXJhY3RlciwgdGhlbiAiZCIgZGVsZXRlcyBvbmx5IGhhbGYgb2YgaXQuCis4ICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCwgc2hvdWxkICJJIiBpbiBibG9ja3dpc2UgdmlzdWFsIG1vZGUgYWxzbyBpbnNlcnQKKyAgICBpbiBsaW5lcyB0aGF0IGRvbid0IGV4dGVuZCBpbnRvIHRoZSBibG9jaz8KKzggICBXaXRoICd2aXJ0dWFsZWRpdCcgc2V0LCBpbiBJbnNlcnQgbW9kZSBqdXN0IGFmdGVyIHRoZSBlbmQgb2YgbGluZSwgQ1RSTC1PCisgICAgeWggZG9lcyBub3QgeWFuayB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGxpbmUuIChQYXZlbCBQYXB1c2hldikKKyAgICBEb2luZyAiaGwiIGZpcnN0IGFwcGVhcnMgdG8gbWFrZSBpdCB3b3JrLgorOCAgIFdpdGggJ3ZpcnR1YWxlZGl0JyBzZXQgaXQncyBwb3NzaWJsZSB0byBtb3ZlIGludG8gdGhlIGJsYW5rIGFyZWEgZnJvbQorICAgICdsaW5lYnJlYWsnLgorOCAgIFdpdGggJ3ZpcnR1YWxlZGl0JyBzZXQgYW5kICdzZWxlY3Rpb24nICJleGNsdXNpdmUiLCBhIFZpc3VhbCBzZWxlY3Rpb24KKyAgICB0aGF0IGVuZHMgaW4gb3IgYWZ0ZXIgYSB0YWIsICJkIiBkb2Vzbid0IGRlbGV0ZSAocGFydCBvZikgdGhlIHRhYi4KKyAgICAoSGVsbXV0IFN0aWVnbGVyKQorOCAgIFdpdGggJ3ZpcnR1YWxlZGl0JyBzZXQsIGEgYmxvY2t3aXNlIFZpc3VhbCBzZWxlY3Rpb24gdGhhdCBzdGFydHMgYW5kIGVuZHMKKyAgICBpbiBhIHRhYiwgIjwiIHNoaWZ0cyB0b28gbXVjaC4gKEhlbG11dCBTdGllZ2xlcikKKzkgICBXaGVuIGp1bXBpbmcgdG8gYSB0YWcsIHRoZSBzZWFyY2ggcGF0dGVybiBpcyBwdXQgaW4gdGhlIGhpc3RvcnkuICBXaGVuCisgICAgJ21hZ2ljJyBpcyBvbiwgdGhlIHBhdHRlcm4gbWF5IG5vdCB3b3JrLiAgVHJhbnNsYXRlIHRoZSBwYXR0ZXJuIGRlcGVuZGluZworICAgIG9uIHBfbWFnaWMgd2hlbiBwdXR0aW5nIGl0IGluIHRoZSBoaXN0b3J5PyAgQWx0ZXJuYXRpdmU6IFN0b3JlIHZhbHVlIG9mCisgICAgJ21hZ2ljJyBpbiBoaXN0b3J5LiAgKE1hcmdvKQorOSAgIG9wdHdpbi52aW06IFJlc3RvcmluZyBhIG1hcHBpbmcgZm9yIDxTcGFjZT4gb3IgPENSPiBpcyBub3QgY29ycmVjdCBmb3IKKyAgICAiOm5vcmVtYXAiLiAgQWRkICJtYXBjbWQoe3N0cmluZ30sIHttb2RlfSk/ICBVc2UgY29kZSBmcm9tICI6bWtleHJjIi4KKzkgICBpbmNzZWFyY2ggaXMgaW5jb3JyZWN0IGZvciAiL3RoYXQvPFJldHVybj4vdGhpcy87Ly8iIChsYXN0IHNlYXJjaCBwYXR0ZXJuCisgICAgaXNuJ3QgdXBkYXRlZCkuCis5ICAgdGVybV9jb25zb2xlIGlzIHVzZWQgYmVmb3JlIGl0IGlzIHNldCAobXNkb3MsIEFtaWdhKS4KKzkgICBHZXQgb3V0LW9mLW1lbW9yeSBmb3IgIjpnL14vLCRzLy9ALyIgb24gMTAwMCBsaW5lcywgdGhpcyBpcyBub3QgaGFuZGxlZAorICAgIGNvcnJlY3RseS4gIEdldCBtYW55IGVycm9yIG1lc3NhZ2VzIHdoaWxlIHJlZHJhd2luZyB0aGUgc2NyZWVuLCB3aGljaAorICAgIGNhdXNlIGFub3RoZXIgcmVkcmF3LCBldGMuCis4ICAgWzxDLUk+IGRvZXNuJ3Qgd29yayB3aGVuICcqJyBpcyBpbiAnaXNrZXl3b3JkJy4gIGZpbmRfcGF0dGVybl9pbl9wYXRoKCkKKyAgICBtdXN0IGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uCis4ICAgVmltIGNhbiBvdmVyd3JpdGUgYSByZWFkLW9ubHkgZmlsZSB3aXRoICI6dyEiLiAgIjp3IiBjYW4ndCBvdmVyd3JpdGUgYW4KKyAgICBleGlzdGluZyBmaWxlLCAidyEiIGNhbiwgYnV0IHBlcmhhcHMgbm90IGEgcmVhZC1vbmx5IGZpbGU/ICBUaGVuIHVzZQorICAgICI6dyEhIiBmb3IgdGhhdC4KKyAgICBPciBhc2sgZm9yIHBlcm1pc3Npb24gdG8gb3ZlcndyaXRlIGl0IChpZiBmaWxlIGNhbiBiZSBtYWRlIHdyaXRhYmxlKSBhbmQKKyAgICByZXN0b3JlIGZpbGUgdG8gcmVhZG9ubHkgYWZ0ZXJ3YXJkcy4KKzcgICBXaGVuIGNvbXBpbGVkIHdpdGggInh0ZXJtX2NsaXBib2FyZCIsIHN0YXJ0dXAgY2FuIGJlIHNsb3dlciBhbmQgbWlnaHQgZ2V0CisgICAgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCAkRElTUExBWS4gIFRyeSBjb25uZWN0aW5nIHRvIHRoZSBYIHNlcnZlciBpbiB0aGUKKyAgICBiYWNrZ3JvdW5kIChmb3JrZWQpLCBzbyB0aGF0IFZpbSBzdGFydHMgdXAgcXVpY2tlcj8gIENvbm5lY3QgYXMgc29vbiBhcworICAgIHRoZSBjbGlwYm9hcmQgaXMgdG8gYmUgdXNlZCAoVmlzdWFsIHNlbGVjdCBtb2RlIHN0YXJ0cywgcGFzdGUgZnJvbQorICAgIGNsaXBib2FyZCkKKzcgICBYMTE6IFNvbWUgcGVvcGxlIHByZWZlciB0byB1c2UgQ0xJUEJPQVJEIGluc3RlYWQgb2YgUFJJTUFSWSBmb3IgdGhlIG5vcm1hbAorICAgIHNlbGVjdGlvbi4gIEFkZCBhbiAieGNsaXBib2FyZCIgYXJndW1lbnQgdG8gdGhlICdjbGlwYm9hcmQnIG9wdGlvbj8gKE1hcmsKKyAgICBXYWdnb25lcikKKzggICBGb3IgeHRlcm0gbmVlZCB0byBvcGVuIGEgY29ubmVjdGlvbiB0byB0aGUgWCBzZXJ2ZXIgdG8gZ2V0IHRoZSB3aW5kb3cKKyAgICB0aXRsZSwgd2hpY2ggY2FuIGJlIHNsb3cuICBDYW4gYWxzbyBnZXQgdGhlIHRpdGxlIHdpdGggIjxFc2M+WzIxdCIsIG5vCisgICAgbmVlZCB0byB1c2UgWDExIGNhbGxzLiAgVGhpcyByZXR1cm5zICI8RXNjPl1se3RpdGxlfTxFc2M+XCIuCis4ICAgV2hlbiB0aGUgYnVpbHRpbiB4dGVybSB0ZXJtY2FwIGNvbnRhaW5zIGNvZGVzIHRoYXQgYXJlIG5vdCB3YW50ZWQsIG5lZWQgYQorICAgIHdheSB0byBhdm9pZCB1c2luZyB0aGUgYnVpbHRpbiB0ZXJtY2FwLgorOCAgIFh0ZXJtIHNlbmRzIF5bW0ggZm9yIDxIb21lPiBhbmQgXltbRiBmb3IgPEVuZD4gaW4gc29tZSBtb2RlLiAgQWxzbworICAgIHJlY29nbml6ZSB0aGVzZSBrZXlzPyAgTW9zdGx5IHVzZWZ1bCBmb3IgeHRlcm0gc2ltdWxhdG9ycywgbGlrZSBnbm9tZXRlcm0uCisgICAgU2VlIGh0dHA6Ly9kaWNrZXkuaGlzLmNvbS94dGVybS94dGVybS5mYXEuaHRtbCN4dGVybV9wY19zdHlsZS4KKzggICAnWyBhbmQgJ10gc2hvdWxkIGJlIHNldCB0byBzdGFydC9lbmQgb2YgbGluZSB3aGVuIHVzaW5nIGEgbGluZXdpc2Ugb3BlcmF0b3IKKyAgICAoZS5nLiwgIjp3IikuCis4ICAgQ1RSTC1BIGNhbid0IGhhbmRsZSBiaWcgImxvbmciIG51bWJlcnMsIHRoZXkgYmVjb21lIG5lZ2F0aXZlLiAgQ2hlY2sgZm9yCisgICAgIi0iIGNoYXJhY3RlciwgaWYgbm90IHByZXNlbnQsIHVzZSB1bnNpZ25lZCBsb25nLgorOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mICIjIiBpbiB0aGUgZmlyc3QgY29sdW1uCisgICAgZm9yICI+PiIuCis4ICAgQWRkIHN1c3BlbmRpbmcgd2l0aCBDVFJMLVogYXQgdGhlICJtb3JlIiBwcm9tcHQsIGFuZCB3aGVuIGV4ZWN1dGluZyBhIGxvbmcKKyAgICBzY3JpcHQgaW4gZG9fY21kbGluZSgpLgorOCAgIFdoZW4gdXNpbmcgJ2hpZGRlbicsIG1hbnkgc3dhcCBmaWxlcyB3aWxsIGJlIG9wZW4uICBXaGVuIFZpbSBydW5zIGludG8gdGhlCisgICAgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBmaWxlcywgZXJyb3IgbWVzc2FnZXMgd2lsbCBhcHBlYXIuICBEZXRlY3QgdGhhdAorICAgIHRoaXMgcHJvYmxlbSBpcyBwcmVzZW50LCBhbmQgY2xvc2UgYW55IGhpZGRlbiBmaWxlcyB0aGF0IGRvbid0IGhhdmUKKyAgICBjaGFuZ2VzLgorOCAgIFdpdGggJ3ZpbWluZm8nIHNldCBzdWNoIHRoYXQgdGhlICIudmltaW5mbyIgZmlsZSBpcyB3cml0dGVuIG9uIGEgRkFUCisgICAgZmlsZXN5c3RlbSwgYW4gaWxsZWdhbCBmaWxlIG5hbWUgbWF5IGJlIGNyZWF0ZWQ6ICIudmltIi4KKzggICBGb3IgZWFjaCBidWZmZXIgdGhhdCBpcyBvcGVuZWQsIHRoZSB2aW1pbmZvIGZpbGUgaXMgb3BlbmVkIGFuZCByZWFkIHRvCisgICAgY2hlY2sgZm9yIGZpbGUgbWFya3MuICBUaGlzIGNhbiBiZSBzbG93LgorNyAgIEluIHh0ZXJtLCByZWNvZ25pemUgYm90aCB2dDEwMCBhbmQgdnQyMjAgY3Vyc29yIGtleXMuICBDaGFuZ2UKKyAgICBhZGRfdGVybWNvZGUoKSB0byBub3QgcmVtb3ZlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciBhIG5hbWUsIHdoZW4gaXQncworICAgIG5lZWRlZC4KKyAgICBOZWVkIGEgZ2VuZXJpYyBzb2x1dGlvbiB0byByZWNvZ25pemUgZGlmZmVyZW50IGNvZGVzIGZvciB0aGUgc2FtZSBrZXkuCis4ICAgQ29yZSBkdW1wIHdpdGhpbiBzaWduYWwgZnVuY3Rpb246IGdkYiBkb2Vzbid0IHNob3cgc3RhY2sgYmFja3RyYWNlISAgT3B0aW9uCisgICAgdG8gc2tpcCBjYXRjaF9zaWduYWxzKCk/Cis5ICAgUmVwZWF0aW5nIGEgImN3IiB3aXRoICIuIiBkb2Vzbid0IHdvcmsgaWYgdGhlIHRleHQgd2FzIHBhc3RlZCBmcm9tIHRoZQorICAgIGNsaXBib2FyZC4gKFRob21hcyBKb25lcykgIEl0J3MgYmVjYXVzZSB0aGUgbWVudS90b29sYmFyIGl0ZW0gZXhpdHMgSW5zZXJ0CisgICAgbW9kZSBhbmQgdXNlcyAiZ1AiLiAgSG93IHRvIGZpeCB0aGlzIHdpdGhvdXQgYnJlYWtpbmcgaW5zZXJ0aW5nIGEgYmxvY2sgb2YKKyAgICB0ZXh0PworOCAgIEluIFJlcGxhY2UgbW9kZSBwYXN0aW5nIGZyb20gdGhlIGNsaXBib2FyZCAodXNpbmcgbWVudSBvciB0b29sYmFyKSBpbnNlcnRzCisgICAgYWxsIHRoZSB0ZXh0LiAgQWRkICI6cm1lbnUiPworOCAgIFBhc3Rpbmcgd2l0aCB0aGUgbW91c2UgaW4gUmVwbGFjZSBtb2RlIGluc2VydHMgdGhlIHRleHQsIGluc3RlYWQgb2YKKyAgICBvdmVyd3JpdGluZywgd2hlbiBpdCBpcyBtb3JlIHRoYW4gb25lIGxpbmUuICBTYW1lIGZvciB1c2luZyA8Qy1SPi4KKzkgICBDVFJMLUUgYW5kIENUUkwtWSBkb24ndCB3b3JrIGluIHNtYWxsIHdpbmRvdyB3aGVuICdzbycgaXMgNCBhbmQgbGluZXMgYXJlCisgICAgd3JhcHBpbmcgKEFjZXZlZG8vaW4uMjI2KS4gIEUuZy4sIHdoZW4gdXNpbmcgQ1RSTC1FLCB3aW5kb3cgaGVpZ2h0IDcsCisgICAgd2luZG93IG1pZ2h0IGFjdHVhbGx5IHNjcm9sbCBkb3duIHdoZW4gbGFzdCBsaW5lIG9mIGJ1ZmZlciBpcyBkaXNwbGF5ZWQuCisgICAgLS0+IFJlbWVtYmVyIGlmIHRoZSBwcmV2aW91cyBjb21tYW5kIHdhcyAiY3Vyc29yIGZvbGxvd3Mgc2NyZWVuIiBvcgorICAgICJzY3JlZW4gZm9sbG93IGN1cnNvciIgYW5kIHVzZSB0aGlzIGluIGN1cnN1cGRhdGUoKS4KKzcgICB0aWxkZV9yZXBsYWNlKCkgY2FuIG9ubHkgaGFuZGxlICJ+LyIsIHNob3VsZCBhbHNvIGRvICJ+dXNlci8iLgorICAgIEdldCB0aGUgbGlzdCBvZiBob21lIGRpcmVjdG9yaWVzIChmcm9tIC9ldGMvcGFzc3dkPyAgVXNlIGdldHB3ZW50KCkpIGFuZAorICAgIHVzZSBzb21lIGNsZXZlciBhbGdvcml0aG0gdG8gbWF0Y2ggYSBwYXRoIHdpdGggdGhhdC4gIEZpbmQgY29tbW9uIHN0cmluZ3MKKyAgICBpbiB0aGUgbGlzdD8KKzggICBXaGVuIGRyYWdnaW5nIHN0YXR1cyBsaW5lIHdpdGggbW91c2UsIHNvbWV0aW1lcyBhIGp1bXAgd2hlbiBmaXJzdCBjbGlja2luZworICAgIG9uIHRoZSBzdGF0dXMgbGluZSAoY2F1c2VkIGJ5ICd3aW5oZWlnaHQnKS4gIFNlbGVjdCB3aW5kb3cgb24gYnV0dG9uIHVwLAorICAgIGluc3RlYWQgb2Ygb24gYnV0dG9uIGRvd24uCis4ICAgRHJhZ2dpbmcgdGhlIHN0YXR1cyBsaW5lIGRvZXNuJ3Qgc2Nyb2xsIGJ1dCByZWRyYXcuCis5ICAgRXZhbHVhdGluZyAnc3RhdHVzbGluZScgaW4gYnVpbGRfc3RsX3N0cl9obCgpIGRvZXMgbm90IHByb3Blcmx5IGNoZWNrIGZvcgorICAgIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGF2YWlsYWJsZSBidWZmZXIuCis4ICAgV2hlbiBwZXJmb3JtaW5nIGluY3JlbWVudGFsIHNlYXJjaCwgc2hvdWxkIGFib3J0IHNlYXJjaGluZyBhcyBzb29uIGFzIGEKKyAgICBjaGFyYWN0ZXIgaXMgdHlwZWQuCis4ICAgV2hlbiB0aGUgdmFsdWUgb2YgJE1BS0UgY29udGFpbnMgYSBwYXRoLCBjb25maWd1cmUgY2FuJ3QgaGFuZGxlIHRoaXMuCisgICAgSXQncyBhbiBhdXRvY29uZiBidWcuICBSZW1vdmUgdGhlIHBhdGggZnJvbSAkTUFLRSB0byB3b3JrIGFyb3VuZCBpdC4KKzggICBIb3cgdG8gc2V0IFZJTVJDX0ZJTEUgdG8gXCJzb21ldGhpbmdcIiBmb3IgY29uZmlndXJlPyAgV2h5IGRvZXMgdGhpcyBub3QKKyAgICB3b3JrOiBDRkxBR1M9Jy1EVklNUkNfRklMRT1cIi9teWRpci9teWZpbGVcIicgLi9jb25maWd1cmUKKzggICBUaGUgdGVtcG9yYXJ5IGZpbGUgaXMgc29tZXRpbWVzIG5vdCB3cml0YWJsZS4gIENoZWNrIGZvciB0aGlzLCBhbmQgdXNlIGFuCisgICAgYWx0ZXJuYXRlIG5hbWUgd2hlbiBpdCBpc24ndC4gIE9yIGFkZCB0aGUgJ3RlbXB0ZW1wbGF0ZScgb3B0aW9uOiB0ZW1wbGF0ZQorICAgIGZvciB0aGUgdGVtcCBmaWxlIG5hbWUgIjpzZXQgdGVtcHRlbXBsYXRlPS91c3IvdG1wLz8/Pz8/LnRtcCIuCisgICAgQWxzbzogV2luMzIgdmVyc2lvbiB1c2VzIFdpbmRvd3MgdGVtcCBkaXJlY3RvcnksIHdoaWNoIG1pZ2h0IG5vdCB3b3JrIGZvcgorICAgIGN5Z3dpbiBiYXNoLgorNyAgIEdldCBlcnJvciAiKiwgXCsgb3IgXCggb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIgZm9yIHBhdHRlcm4gIlwoLlwpXDFcezN9Ii4KKyAgICBSZW1lbWJlciBmbGFncyBmb3IgYmFja3JlZmVyZW5jZXMuCis3ICAgV2hlbiBzd2l0Y2hpbmcgdG8gRGF5bGlnaHQgU2F2aW5nIFRpbWUsIFZpbSBjb21wbGFpbnMgdGhhdCBhIGZpbGUgaGFzIGJlZW4KKyAgICBjaGFuZ2VkIHNpbmNlIGxhc3QgcmVhZC4gIENhbiB3ZSB1c2UgYSBmdW5jdGlvbiB0aGF0IHVzZXMgR01UPworNyAgIFdoZW4gY29tcGxldGluZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhZnRlciBhICckJywgY2hlY2sgZm9yIGZpbGUgbmFtZXMKKyAgICB0aGF0IGNvbnRhaW4gYSAnJCcgYWZ0ZXIgYWxsIGhhdmUgYmVlbiBmb3VuZC4KKzggICBXaGVuICJjbSIgdGVybWNhcCBlbnRyeSBpcyBtaXNzaW5nLCBzdGFydGluZyBndmltIHNob3VsZG4ndCBjb21wbGFpbiBhYm91dAorICAgIGl0LiAoTG9obmVyKSAgVHJ5IG91dCB3aXRoICJ2dDEwMCIgZW50cnksIGNtIHJlcGxhY2VkIHdpdGggY1guCis3ICAgV2hlbiBhbiBpbmNsdWRlIGZpbGUgc3RhcnRzIHdpdGggIi4uLyIsIHRoZSBjaGVjayBmb3IgYWxyZWFkeSB2aXNpdGluZworICAgIHRoaXMgZmlsZSBkb2Vzbid0IHdvcmsuICBOZWVkIHRvIHNpbXBsaWZ5IHRoZSBmaWxlIG5hbWUuCis4ICAgT24gU2luaXggU1lTX05NTE4gaXNuJ3QgZGVmaW5lZC4gIEluY2x1ZGUgcGF0Y2ggZnJvbSBDcmlzdGlhbm8gRGUgTWljaGVsZS4KKzcgICBUaGUgbmFtZXMgYW5kIGNvbW1lbnRzIGZvciB0aGUgYXJndW1lbnRzIG9mIGRvX2Jyb3dzZSgpIGFyZSBjb25mdXNpbmcuCisgICAgImRmbHQiIGlzbid0IHRoZSBkZWZhdWx0IGZpbGUgbmFtZSB3aGVuICJpbml0ZGlyIiBpcyBub3QgTlVMTCBhbmQKKyAgICAiaW5pdGRpciIgaXMgdGhlIGRlZmF1bHQgcGF0aCB0byBiZSB1c2VkLgorNyAgIFdoZW4gJ3Njcm9sbG9mZicgaXMgZXhhY3RseSBoYWxmIHRoZSB3aW5kb3cgaGVpZ2h0LCAiaiIgY2F1c2VzIGEgc2Nyb2xsIG9mCisgICAgdHdvIGxpbmVzIGF0IGEgdGltZS4gICJrIiBkb2Vzbid0IGRvIHRoaXMuIChDb3J5IFQuIEVjaG9scykKKzggICBXaGVuIHdyaXRlX3ZpbWluZm8oKSBpcyB1c2VkIHdoaWxlIHRoZXJlIGFyZSBtYW55IG9ycGhhbmVkIHZpbWluZm8KKyAgICB0ZW1wZmlsZXMgd3JpdGluZyB0aGUgdmltaW5mbyBmaWxlIGZhaWxzLiAgR2l2ZSBhIGNsZWFyIGVycm9yIG1lc3NhZ2Ugc28KKyAgICB0aGF0IHRoZSB1c2VyIGtub3dzIGhlIGhhcyB0byBkZWxldGUgdGhlIGZpbGVzLgorNyAgIEl0J3MgcG9zc2libGUgdG8gcmVkZWZpbmUgYSBzY3JpcHQtbG9jYWwgZnVuY3Rpb24gd2l0aCAiOmZ1bmMKKyAgICA8U05SPjEyM19UZXN0KCkiLiAoS3Jpc2huYSkgIERpc2FsbG93IHRoaXMuCis3ICAgQWZ0ZXIgIjolZCIgYW4gdW5kbyByZXBvcnRzIHRoZSBudW1iZXIgb2YgbGluZXMgYWRkZWQgYXMgaWYgdGhlcmUgc3RpbGwKKyAgICB3YXMgb25lIGxpbmUuCisKKworSSBjYW4ndCByZXByb2R1Y2UgdGhlc2UgKGlmIHlvdSBjYW4sIGxldCBtZSBrbm93IGhvdyEpOgorOSAgIE5UIDQuMCBvbiBOVEZTIGZpbGUgc3lzdGVtOiBFZGl0aW5nICIuYmFzaHJjIiAoZHJhZyBhbmQgZHJvcCksIGZpbGUKKyAgICBkaXNhcHBlYXJzLiAgRWRpdGluZyAiLnh5eiIgaXMgT0suICBBbHNvLCBkcmFnJmRyb3Agb25seSB3b3JrcyBmb3IgdGhyZWUKKyAgICBmaWxlcy4gKE1jQ29sbGlzdGVyKQorOCAgIE1vdGlmOiBUZWFyLW9mZiBtZW51IGl0ZW0gY3Jhc2hlcyBWaW0gb24gc29tZSBtYWNoaW5lcy4gIChOZXRoZXJ0b24pICBJdAorICAgIHdvcmtzIGZpbmUgZm9yIG1lLCBtYXliZSBpdCdzIGEgTW90aWYgcHJvYmxlbS4KKworCitQcm9ibGVtcyB0aGF0IHdpbGwgKHByb2JhYmx5KSBub3QgYmUgc29sdmVkOgorLSAgIEluIGEgdGVybWluYWwgd2l0aCAnbW91c2UnIHNldCBzdWNoIHRoYXQgdGhlIG1vdXNlIGlzIGFjdGl2ZSB3aGVuIGVudGVyaW5nCisgICAgYSBjb21tYW5kIGxpbmUsIGFmdGVyIGV4ZWN1dGluZyBhIHNoZWxsIGNvbW1hbmQgdGhhdCBzY3JvbGxzIHVwIHRoZQorICAgIGRpc3BsYXkgYW5kIHRoZW4gcHJlc3NpbmcgIjoiOiBTZWxlY3RpbmcgdGV4dCB3aXRoIHRoZSBtb3VzZSB3b3JrcyBsaWtlCisgICAgdGhlIGRpc3BsYXkgd2Fzbid0IHNjcm9sbGVkLiAgVmltIGRvZXNuJ3Qga25vdyBob3cgbXVjaCB0aGUgZXh0ZXJuYWwKKyAgICBjb21tYW5kIHNjcm9sbGVkIHVwIHRoZSBkaXNwbGF5LiAgVXNlIFNoaWZ0IHRvIHNlbGVjdCB0ZXh0LgorLSAgIFggd2luZG93czogV2hlbiAkRElTUExBWSBwb2ludHMgdG8gYSBYIHNlcnZlciB3aGVyZSB0aGVyZSBpcyBubyBhY2Nlc3MKKyAgICBwZXJtaXNzaW9uLCB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgWCBzZXJ2ZXIgY2F1c2VzIGFuIGVycm9yIG1lc3NhZ2UuCisgICAgWHRPcGVuRGlzcGxheSgpIHByaW50cyB0aGlzIGRpcmVjdGx5LCB0aGVyZSBpcyBubyB3YXkgdG8gYXZvaWQgaXQuCistICAgWCB3aW5kb3dzOiBTZXR0aW5nICdndWlmb250c2V0JyB0byBhbiBpbGxlZ2FsIHZhbHVlIHNvbWV0aW1lcyBjcmFzaGVzIFZpbS4KKyAgICBUaGlzIGlzIGNhdXNlZCBieSBhIGZhdWx0IGluIGEgWCBsaWJyYXJ5IGZ1bmN0aW9uLCBjYW4ndCBiZSBzb2x2ZWQgaW4gVmltLgorLSAgIE1vdGlmOiBXaGVuIGFkZGluZyBhIG1lbnUgaXRlbSAiRmluZCB0aGlzICZTeW1ib2wiLCB0aGUgInMiIGluICJ0aGlzIiB3aWxsCisgICAgYmUgdW5kZXJsaW5lZCwgaW5zdGVhZCBvZiBpbiAiU3ltYm9sIi4gIE1vdGlmIGRvZXNuJ3QgbGV0IHVzIHNwZWNpZnkgd2hpY2gKKyAgICBjaGFyYWN0ZXIgZ2V0cyB0aGUgaGlnaGxpZ2h0aW5nLgorLSAgIE1vdmluZyB0aGUgY3Vyc29yIHJlbW92ZXMgY29sb3IgaW4gY29sb3IteHRlcm0uICBUaGlzIGlzIGEgY29sb3IteHRlcm0KKyAgICBwcm9ibGVtISAgY29sb3IteHRlcm0gdmVyLiA2LjEgYmV0YSAzIGFuZCBsYXRlciB3b3JrIHByb3Blcmx5LgorLSAgIEluIHpzaCwgImd2aW0mIiBjaGFuZ2VzIHRoZSB0ZXJtaW5hbCBzZXR0aW5ncy4gIFRoaXMgaXMgYSB6c2ggcHJvYmxlbS4KKyAgICAoSmVubmluZ3MpCistICAgUHJvYmxlbSB3aXRoIEhQdGVybSB1bmRlciBYOiBvbGQgY29udGVudHMgb2Ygd2luZG93IGlzIGxvc3QgKENvc2VudGlubykuCistICAgQW1pZ2E6IFdoZW4gdXNpbmcgcXVpY2tmaXggd2l0aCB0aGUgTWFueCBjb21waWxlciB3ZSBvbmx5IGdldCB0aGUgZmlyc3QgMjUKKyAgICBlcnJvcnMuICBIb3cgZG8gd2UgZ2V0IHRoZSByZXN0PworLSAgIEFtaWdhOiBUaGUgIjpjcSIgY29tbWFuZCBkb2VzIG5vdCBhbHdheXMgYWJvcnQgdGhlIE1hbnggY29tcGlsZXIuICBXaHk/CistICAgTGludXg6IEEgZmlsZSB3aXRoIHByb3RlY3Rpb24gci0tcnctcnctIGlzIHNlZW4gcmVhZG9ubHkgZm9yIG90aGVycy4gVGhlCisgICAgYWNjZXNzKCkgZnVuY3Rpb24gaW4gR05VIGxpYmMgaXMgcHJvYmFibHkgd3JvbmcuCistICAgTVNET1M6IFdoZW4gdXNpbmcgc21hcnRkcml2ZSB3aXRoIHdyaXRlLWJhY2sgYnVmZmVyaW5nLCB3cml0aW5nIHRvIGEKKyAgICByZWFkb25seSBmbG9wcHkgd2lsbCBjYXVzZSBwcm9ibGVtcy4gIEhvdyB0byB0ZXN0IGZvciBhIHdyaXRhYmxlIGZsb3BweQorICAgIGZpcnN0PworLSAgIE1TRE9TOiBCb3RoIDE2IGFuZCAzMiBiaXQgdmVyc2lvbnM6IEZpbGUgbmFtZSBleHBhbnNpb24gZG9lc24ndCB3b3JrIGZvcgorICAgIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBhIGRvdC4gIFRoZXNlIHVzZWQgdG8gYmUgaWxsZWdhbCBmaWxlIG5hbWVzLgorLSAgIFdoZW4gZG9pbmcgYSBDVFJMLVogYW5kIHR5cGluZyBhIGNvbW1hbmQgZm9yIHRoZSBzaGVsbCwgd2hpbGUgVmltIGlzIGJ1c3kKKyAgICAoZS5nLiB3cml0aW5nIGEgZmlsZSksIHRoZSBjb21tYW5kIGZvciB0aGUgc2hlbGwgaXMgc29tZXRpbWVzIGVhdGVuIGJ5IFZpbSwKKyAgICBiZWNhdXNlIHRoZSB0ZXJtaW5hbCBtb2RlIGlzIGNoYW5nZWQgZnJvbSBSQVcgdG8gQ0JSRUFLLgorLSAgIEFuIG9sZCB2ZXJzaW9uIG9mIEdOVSB0Z290byBjYW4ndCBoYW5kbGUgdGhlIHRlcm1pbmZvIGNvZGUgZm9yICJBRiIuICBUaGUKKyAgICAiJXAxIiBpcyBpbnRlcnByZXRlZCBhcyAiJXAiIGFuZCAiMSIsIGNhdXNpbmcgY29sb3Igbm90IHRvIGJlIHdvcmtpbmcuCisgICAgRml4OiBDaGFuZ2UgdGhlICIlcDEiIGluIHRoZSAiQUYiIGFuZCAiQUIiIHRlcm1pbmZvIGVudHJpZXMgdG8gIiVwIi4KKyAgICAoQmVuemluZ2VyKS4KKy0gICBXaGVuIHJ1bm5pbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCBmcm9tIHRoZSBHVUksIHR5cGVhaGVhZCBpcyBnb2luZyB0byB0aGF0CisgICAgcHJvZ3JhbSwgbm90IHRvIFZpbS4gIEl0IGxvb2tzIGxpa2UgdGhlIHNoZWxsIGVhdHMgdGhlIGNoYXJhY3RlcnMsIFZpbQorICAgIGNhbid0IGdldCBiYWNrIHdoYXQgdGhlIGV4dGVybmFsIGNvbW1hbmQgZGlkbid0IHVzZS4KKy0gICBXaW4zMiBHVUk6IEVycm9yIGNvZGUgZnJvbSBleHRlcm5hbCBjb21tYW5kIG5vdCByZXR1cm5lZCBpbiBzaGVsbF9lcnJvci4KKyAgICBJdCBhcHBlYXJzIHRoYXQgY21kLmV4ZSBhbmQgY29tbWFuZC5jb20gZG9uJ3QgcmV0dXJuIGFuIGVycm9yIGNvZGUuCistICAgV2luMzIgR1VJOiBUaGUgVG9vbGJhciBpcyBhIGJpdCB0b28gaGlnaCB3aGVuIHRoZSBmbGF0IHN0eWxlIGlzIGJlaW5nCisgICAgdXNlZC4gIFdlIGRvbid0IGhhdmUgY29udHJvbCBvdmVyIHRoZSBoZWlnaHQgb2YgdGhlIFRvb2xiYXIuCistICAgV2luMzI6IEFsbCBmaWxlcyBjcmVhdGVkIG9uIHRoZSBkYXkgb2Ygc3dpdGNoaW5nIGZyb20gd2ludGVyIHRvIHN1bW1lcgorICAgIHRpbWUgY2F1c2UgImNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIiBtZXNzYWdlcy4gIEl0IGdvZXMgYXdheSB3aGVuCisgICAgdGhlIGZpbGUgaXMgd3JpdHRlbiBhZ2FpbiB0aGUgbmV4dCBkYXksIG9yIHRoZSB0aW1lem9uZSBpcyBhZGp1c3RlZC4KKyAgICBESkdQUCB2ZXJzaW9uIGlzIE9LLiAoWmFpbWkpICBMb29rcyBsaWtlIGEgcHJvYmxlbSB3aXRoIHRoZSBXaW4zMiBsaWJyYXJ5LgorICAgIFJlYm9vdGluZyBkb2Vzbid0IGhlbHAuICBUaW1lIHN0YW1wcyBsb29rIE9LIGluIGRpcmVjdG9yeS4gKFBlbm4pCisgICAgSXMgdGhpcyBvbiBGQVQgKHN0b3JlcyB3YWxsIGNsb2NrIHRpbWUpIG9yIE5URlMgKHN0b3JlcyBVVFMpPworLSAgIFdpbjMyLCBNUy1XaW5kb3dzIFhQOiAkSE9NRSB1c2VzIHRoZSB3cm9uZyBkcml2ZSB3aGVuIHRoZSB1c2VyIHByb2ZpbGVzCisgICAgYXJlIG5vdCBvbiB0aGUgYm9vdCBkaXNrLiAgVGhpcyBpcyBjYXVzZWQgYnkgYSB3cm9uZyB2YWx1ZSBvZiAkSE9NRURSSVZFLgorICAgIFRoaXMgaXMgYSBidWcgaW4gWFAsIHNlZSBNU0tCIGFydGljbGUgODE4MTM0LgorLSAgIFN1bk9TIDUuNS4xIHdpdGggTW90aWY6IFRoZSBmaWxlIG9wZW4gZGlhbG9nIGRvZXMgbm90IGhhdmUgYSBob3Jpem9udGFsCisgICAgc2Nyb2xsIGJhciBmb3IgdGhlICJmaWxlcyIgc2VsZWN0aW9uLiAgVGhpcyBpcyBhIHByb2JsZW0gaW4gdGhlIE1vdGlmCisgICAgbGlicmFyaWVzLCBnZXQgYSBwYXRjaCBmcm9tIFN1bi4KKy0gICBTb2xhcmlzIDIuNiB3aXRoIEdUSyBhbmQgUGVybDogZ3ZpbSBjcmFzaGVzIHdoZW4gc3RhcnRlZC4gIFByb2JsZW0gd2l0aCBYCisgICAgaW5wdXQgbWV0aG9kIGNhbGxlZCBmcm9tIEdESyBjb2RlLiAgV2l0aG91dCBQZXJsIGl0IGRvZXNuJ3QgY3Jhc2guCistICAgVk1TOiBWaW1kaWZmIGRvZXNuJ3Qgd29yayB3aXRoIHRoZSBWTVMgZGlmZiwgYmVjYXVzZSB0aGUgb3V0cHV0IGxvb2tzCisgICAgZGlmZmVyZW50LiAgVGhpcyBtYWtlcyB0ZXN0IDQ3IGZhaWwuICBJbnN0YWxsIGEgVW5peC1jb21wYXRpYmxlIGRpZmYuCistICAgVk1TIHY3LjEgYW5kIG9sZGVyOiBUZXN0cyAyMSBhbmQgMzIgZmFpbC4gIEZyb20gVk1TIHY3LjEtMiBhbmQgbmV3ZXIgVmltCisgICAgZG9lcyBub3QgaGF2ZSB0aGlzIGJlaGF2aW9yLiAoWm9sdGFuIEFycGFkZmZ5KQorLSAgIFdpbjMyIEdVSTogbW91c2Ugd2hlZWwgYWx3YXlzIHNjcm9sbHMgcmlnaHRtb3N0IHdpbmRvdy4gIFRoZSBldmVudHMgYXJyaXZlCisgICAgaW4gVmltIGFzIGlmIHRoZSByaWdodG1vc3Qgc2Nyb2xsYmFyIHdhcyB1c2VkLgorLSAgIEdUSyB3aXRoIEdub21lOiBQcm9kdWNlcyBhbiBlcnJvciBtZXNzYWdlIHdoZW4gc3RhcnRpbmcgdXA6CisJR2RrLVdBUk5JTkcgKio6IGxvY2FsZSBub3Qgc3VwcG9ydGVkIGJ5IEMgbGlicmFyeQorICAgIFRoaXMgaXMgY2F1c2VkIGJ5IHRoZSBnbm9tZSBsaWJyYXJ5IGdub21lX2luaXQoKSBzZXR0aW5nICRMQ19DVFlQRSB0bworICAgICJlbl9VUyIuICBOb3QgYWxsIHN5c3RlbXMgc3VwcG9ydCB0aGlzIGxvY2FsZSBuYW1lLCB0aHVzIGNhdXNpbmcgdGhlCisgICAgZXJyb3IuICBIb3BlZnVsbHkgYSBuZXdlciB2ZXJzaW9uIG9mIEdUSy9Hbm9tZSBmaXhlcyB0aGlzIHByb2JsZW0uCistICAgR1RLIDI6IFdpdGggdGhpcyBtYXBwaW5nIHRoZSBoaXQtZW50ZXIgcHJvbXB0IGlzIF9zb21ldGltZXNfIGJlbG93IHRoZQorICAgIHNjcmVlbiwgYXQgb3RoZXIgdGltZXMgdGhlcmUgaXMgYSBncmV5IGFyZWEgYmVsb3cgdGhlIGNvbW1hbmQgbGluZToKKwk6bm1hcCA8RjExPiA6aWYgJmd1aW9wdGlvbnM9fidtJyBcfCBzZXQgZ3Vpb3B0aW9ucy09bSBcfCBlbHNlIFx8IHNldCBndWlvcHRpb25zKz1tIFx8IGVuZGlmPGNyPgorLSAgIEdUSzogV2hlbiBwYXN0aW5nIGEgc2VsZWN0aW9uIGZyb20gVmltIHRvIHhjbGlwYm9hcmQgZ3ZpbSBjcmFzaGVzIHdpdGggYQorICAgIEFCUlQgc2lnbmFsLiAgUHJvYmFibHkgYW4gZXJyb3IgaW4gdGhlIGZpbGUgZ2Rrc2VsZWN0aW9uLmMsIHRoZSBhc3NlcnQKKyAgICBhbHdheXMgZmFpbHMgd2hlbiBYbWJUZXh0TGlzdFRvVGV4dFByb3BlcnR5KCkgZmFpbHMuIChUb20gQWxsYXJkKQorLSAgIFdoZW4gdXNpbmcgYW4geHRlcm0gdGhhdCBzdXBwb3J0cyB0aGUgdGVybXJlc3BvbnNlIGZlYXR1cmUsIGFuZCB0aGUgJ3RfQ28nCisgICAgdGVybWNhcCBvcHRpb24gd2FzIHdyb25nIHdoZW4gVmltIHN0YXJ0ZWQsIGl0IHdpbGwgYmUgY29ycmVjdGVkIHdoZW4gdGhlCisgICAgdGVybXJlc3BvbnNlIGlzIHJlY2VpdmVkLiAgU2luY2UgdGhlIG51bWJlciBvZiBjb2xvcnMgY2hhbmdlcywgdGhlCisgICAgaGlnaGxpZ2h0aW5nIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGFnYWluLiAgVGhpcyBtYXkgY2F1c2UgY29sb3JzIGRlZmluZWQKKyAgICBpbiB0aGUgdmltcmMgZmlsZSB0byBiZSBsb3N0LgorLSAgIE9uIFdpbmRvd3MgTlQgNC4wIHRoZSBudW1iZXIgb2YgZmlsZXMgcGFzc2VkIHRvIFZpbSB3aXRoIGRyYWcmZHJvcCBhbmQKKyAgICAiRWRpdCB3aXRoIFZpbSIgaXMgbGltaXRlZC4gIFRoZSBtYXhpbXVtIGNvbW1hbmQgbGluZSBsZW5ndGggaXMgMjU1IGNoYXJzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0gIGV4dGVuc2lvbnMgYW5kIGltcHJvdmVtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJCQkgICAgKmV4dGVuc2lvbnMtaW1wcm92ZW1lbnRzKgorCitEb2N1bWVudGF0aW9uOgorOCAgIEV4dGVuZCB1c3JfMjcudHh0IGEgYml0LiAoQWRhbSBTZXlmYXJ0aCkKKzkgICBNZXJnZSBpbiBpZGVhcyBmcm9tIH4vdmltL3BhdGNoZXMvdHV0b3IudHh0IChHYWJyaWVsIFphY2htYW5uKQorNyAgIEFkZCBhIHNlY3Rpb24gb24gZGVidWdnaW5nIHNjcmlwdHMgaW4gdGhlIHVzZXIgbWFudWFsLgorOSAgIE1ha2UgdGhlIFJlZmVyZW5jZSBNYW51YWwgbW9yZSBwcmVjaXNlLiAgRm9yIGVhY2ggY29tbWFuZCBtZW50aW9uOgorICAgIC0gY2hhbmdlIHRvIGN1cnNvciBwb3NpdGlvbiBhbmQgY3Vyc3dhbnQKKyAgICAtIGlmIGl0IGNhbiBiZSB1bmRvbmUgKHUvQ1RSTC1SKSBhbmQgcmVkb25lICguKQorICAgIC0gaG93IGl0IHdvcmtzIGZvciBmb2xkZWQgbGluZXMKKyAgICAtIGhvdyBpdCB3b3JrcyB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycworOSAgIEluIGNoYW5nZS50eHQsIHJlbWFyayBhYm91dCBKYXZhZG9jIGlzbid0IHJpZ2h0LiAgUmlnaHQgYWxpZ25tZW50IHdvdWxkCisgICAgd29yayB0b28uCis4ICAgU3ByZWFkIHRoZSB3aW5kb3dzIGNvbW1hbmRzIG92ZXIgdGhlIG90aGVyIGZpbGVzLiAgRm9yIGV4YW1wbGUsICI6c3RhZyIKKyAgICBzaG91bGQgYmUgd2l0aCAiOnRhZyIuICBDcm9zcy1saW5rIHdpdGggdGFncyB0byBhdm9pZCB0b28gbXVjaCBkb3VibGUKKyAgICB0ZXh0LgorOCAgIEFkZCB0YWdzIGZvciBhbGwgZmVhdHVyZXMsIGUuZy4gImd1aV9ydW5uaW5nIi4KKzcgICBNUy1XaW5kb3dzOiBXaGVuIGEgd3JvbmcgY29tbWFuZCBpcyB0eXBlZCB3aXRoIGFuIEFMVCBrZXksIGdpdmUgYSBoaW50IHRvCisgICAgbG9vayBhdCB0aGUgaGVscCBmb3IgJ3dpbmFsdGtleXMnLgorNyAgIEFkZCBhIGhlbHAudmltIHBsdWdpbiB0aGF0IG1hcHMgPFRhYj4gdG8ganVtcCB0byB0aGUgbmV4dCB0YWcgaW4gfHwgYW5kCisgICAgPEMtVGFiPiAoYW5kIDxTLVRhYj4pIHRvIHRoZSBwcmV2aW91cyB0YWcuCistICAgQ2hlY2sgdGV4dCBlZGl0b3IgY29tcGVuZGl1bSBmb3IgdmkgYW5kIFZpbSByZW1hcmtzLgorCisKK0hlbHA6CistICAgRmlyc3QgdHJ5IHVzaW5nIHRoZSAiOmhlbHAiIGFyZ3VtZW50IGxpdGVyYWxseSwgYmVmb3JlIHVzaW5nIGl0IGFzIGEKKyAgICBwYXR0ZXJuLiAgQW5kIHRoZW4gbWF0Y2ggaXQgYXMgcGFydCBvZiBhIHRhZy4KKy0gICBXaGVuIGEgaGVscCBpdGVtIGhhcyBtdWx0aXBsZSBtYXRjaGVzIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlICI6dG4iIHRvIGdvCisgICAgdG8gdGhlIG90aGVyIG1hdGNoZXMuCistICAgU3VwcG9ydCBhIHdheSB0byB2aWV3IChhbmQgZWRpdCkgLmluZm8gZmlsZXMuCistICAgRGVmYXVsdCBtYXBwaW5nIGZvciBoZWxwIGZpbGVzOiA8VGFiPiB0byBwb3NpdGlvbiBjdXJzb3Igb24gbmV4dCB8OnRhZ3wuCistICAgSW1wbGVtZW50IGEgInN0aWNreSIgaGVscCB3aW5kb3csIHNvbWUgaGVscCB0ZXh0IGxpbmVzIHRoYXQgYXJlIGFsd2F5cworICAgIGRpc3BsYXllZCBpbiBhIHdpbmRvdyB3aXRoIGZpeGVkIGhlaWdodC4gKEd1Y2tlcykgIFVzZSAifi8udmltaGVscCIgZmlsZSwKKyAgICB1c2VyIGNhbiBlZGl0IGl0IHRvIGluc2VydCBoaXMgZmF2b3JpdGUgY29tbWFuZHMsIG5ldyBhY2NvdW50IGNhbiBjb250YWluIGEKKyAgICBkZWZhdWx0IGNvbnRlbnRzLgorLSAgIE1ha2UgJ3dpbm1pbmhlaWdodCcgYSBsb2NhbCBvcHRpb24sIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNldCBhIG1pbmltYWwKKyAgICBoZWlnaHQgZm9yIHRoZSBoZWxwIHdpbmRvdyAoYW5kIG90aGVyIHdpbmRvd3MpLgorLSAgICI6aGVscCA6c15JIiBzaG91bGQgZXhwYW5kIHRvICI6aGVscCA6c3Vic3RpdHV0ZSIuCistICAgTWFrZSB0aGUgaGVscCBrZXkgKDxGMT4pIGNvbnRleHQgc2Vuc2l0aXZlPworLSAgIExlYXJuIG1vZGU6IHNob3cgc2hvcnQgaGVscCB3aGlsZSB0eXBpbmcgY29tbWFuZHMuCisKKworVXNlciBGcmllbmRsaWVyOgorOCAgIFdpbmRvd3MgaW5zdGFsbCB3aXRoIGluc3RhbGwuZXhlOiBVc2UgLmV4ZSBpbnN0ZWFkIG9mIC5iYXQgZmlsZXMgZm9yCisgICAgbGlua3MsIHNvIHRoYXQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHVubW9kaWZpZWQ/IChXYWx0ZXIKKyAgICBCcmlzY29lKQorOCAgIFdpbmRvd3MgaW5zdGFsbDogQmUgYWJsZSB0byBhc3NvY2lhdGUgVmltIHdpdGggYSBzZWxlY3Rpb24gb2YgZmlsZSB0eXBlcz8KKzggICBXaW5kb3dzIHVuaW5zdGFsbDogSGF2ZSB1bmluc3RhbC5jIGRlbGV0ZSB0aGUgdmltZmlsZXMgZGlyZWN0b3JpZXMgdGhhdAorICAgIGRvc2luc3QuYyBjcmVhdGVzLiAgTGlzdCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSAocmVjdXJzaXZlbHkpIGlmCisgICAgdGhlIHVzZXIgYXNrcyBmb3IgaXQuICBSZXF1aXJlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiAicm0gLXJmIi4KKzggICBSZW1lbWJlciB0aGUgbmFtZSBvZiB0aGUgdmltcmMgZmlsZSB0aGF0IHdhcyB1c2VkICh+Ly52aW1yYywgJFZJTS9fdmltcmMsCisgICAgJEhPTUUvX3ZpbXJjLCBldGMuKSBhbmQgYWRkICJlZGl0IHZpbXJjIiB0byB0aGUgRmlsZSBtZW51LgorLSAgIEFkZCBhIHdheSB0byBzYXZlIGxvY2FsIHNldHRpbmdzIGFuZCBtYXBwaW5ncyBpbnRvIGEgbmV3IHBsdWdpbiBmaWxlLgorICAgICI6bWtwbHVnaW4gPGZpbGU+Ij8KKzggICBBZGQgIjpwbHVnaW5pbnN0YWxsIiBjb21tYW5kLiAgQ2FuIGJlIHVzZWQgdG8gaW5zdGFsbCBhIHBsdWdpbiBmaWxlIHRoYXQKKyAgICBpbmNsdWRlcyBkb2N1bWVudGF0aW9uLiAgTGV0IHRoZSB1c2VyIHNlbGVjdCBhIGRpcmVjdG9yeSBmcm9tCisgICAgJ3J1bnRpbWVwYXRoJy4KKwkiIFZpbSBwbHVnaW4KKwk8bWFpbiBwbHVnaW4gY29kZT4KKwkiID4+PiBwbHVnaW4gaGVscCBzdGFydCA8PDwKKwk8cGx1Z2luIGRvY3M+CistICAgQWRkIG1hcHBpbmdzIGxvY2FsIHRvIGEgd2luZG93OiAiOm1hcCA8d2luZG93PiAuLi4iPworOSAgIEFkZCBidWZmZXItbG9jYWwgbWVudS4gIFNob3VsZCBvZmZlciBhIGNob2ljZSBiZXR3ZWVuIHJlbW92aW5nIHRoZSBtZW51IG9yCisgICAgZGlzYWJsaW5nIGl0LiAgQmUgY2FyZWZ1bCB0aGF0IHRlYXItb2ZmcyBkb24ndCBkaXNhcHBlYXIgKGtlZXAgb25lIGVtcHR5CisgICAgaXRlbT8pLgorICAgIEFsdGVybmF0aXZlOiB1c2UgQnVmRW50ZXIgYW5kIEJ1ZkxlYXZlIGF1dG9jb21tYW5kcy4KKzggICBBZGQgZmlsZSBsb2NraW5nLiAgTG9jayBhIGZpbGUgd2hlbiBzdGFydGluZyB0byBlZGl0IGl0IHdpdGggZmxvY2soKSBvcgorICAgIGZjbnRsKCkuICBUaGlzIHBhdGNoIGhhcyBhZHZpc29yeSBmaWxlIGxvY2tpbmcgd2hpbGUgcmVhZGluZy93cml0aW5nIHRoZQorICAgIGZpbGU6IH4vdmltL3BhdGNoZXMva2Fobl9maWxlX2xvY2tpbmcgLgorOCAgIG1ha2UgYSB2aW10dXRvciBzY3JpcHQgZm9yIEFtaWdhIGFuZCBvdGhlciBzeXN0ZW1zLgorNyAgIEFkZCB0aGUgYXJndW1lbnRzIGZvciBjb25maWd1cmUgdG8gdGhlICI6dmVyc2lvbiIgb3V0cHV0PworCisKK0RpZmYgbW9kZToKKzggICBBZGQgYSBjb21tYW5kIHRvIHN0b3AgZGlmZiBtb2RlOiAiOnNldCBub2RpZmYgZmRjID0gMCBub3Njcm9sbGJpbmQiCis4ICAgVXNlIGRpZmYgbW9kZSB0byBzaG93IHRoZSBjaGFuZ2VzIG1hZGUgaW4gYSBidWZmZXIgKGNvbXBhcmVkIHRvIHRoZSBmaWxlKS4KKyAgICBVc2UgYW4gdW5uYW1lZCBidWZmZXIsIGxpa2UgZG9pbmc6CisJbmV3IHwgc2V0IGJ0PW5vZmlsZSB8IHIgIyB8IDBkXyB8IGRpZmZ0aGlzIHwgd2luY21kIHAgfCBkaWZmdGhpcworNyAgIEFkZCBjdXJzb3ItYmluZGluZzogd2hlbiBtb3ZpbmcgdGhlIGN1cnNvciBpbiBvbmUgZGlmZidlZCBidWZmZXIsIGFsc28KKyAgICBtb3ZlIGl0IGluIG90aGVyIGRpZmYnZWQgYnVmZmVycywgc28gdGhhdCBDVFJMLVcgY29tbWFuZHMgZ28gdG8gdGhlIHNhbWUKKyAgICBsb2NhdGlvbi4KKworCitGb2xkaW5nOgorICAgIChjb21tYW5kcyBzdGlsbCBhdmFpbGFibGU6IHpnIHpHIHpJIHpKIHpLIHpwIHpQIHpxIHpRIHpWIHp3IHpXIHp5IHpZOworICAgIHNlY29uZGFyeTogekIgelMgelQgelopCis4ICAgQWRkIGRpZmZlcmVudCBoaWdobGlnaHRpbmcgZm9yIGEgZm9sZCBsaW5lIGRlcGVuZGluZyBvbiB0aGUgZm9sZCBsZXZlbC4KKyAgICAoTm9lbCBIZW5zb24pCis4ICAgV2hlbiBhIGNsb3NlZCBmb2xkIGlzIGRpc3BsYXllZCBvcGVuIGJlY2F1c2Ugb2YgJ2ZvbGRtaW5saW5lcycsIHRoZQorICAgIGJlaGF2aW9yIG9mIGNvbW1hbmRzIGlzIHN0aWxsIGxpa2UgdGhlIGZvbGQgaXMgY2xvc2VkLiAgSG93IHRvIG1ha2UgdGhlCisgICAgdXNlciBhd2FyZSBvZiB0aGlzPworOCAgIEFkZCBhbiBvcHRpb24gJ2ZvbGRza2lwJyB3aXRoIHZhbHVlcyBsaWtlICdmb2xkb3BlbicgdGhhdCBzcGVjaWZpZXMgd2hpY2gKKyAgICBjb21tYW5kcyBza2lwIG92ZXIgYSBjbG9zZWQgZm9sZC4KKzggICAiSCIgYW5kICJMIiBjb3VudCBidWZmZXIgbGluZXMgaW5zdGVhZCBvZiB3aW5kb3cgbGluZXMuIChTZXJ2YXRpdXMgQnJhbmR0KQorOCAgIEFkZCBhIHdheSB0byBhZGQgZm9sZC1wbHVnaW5zLiAgSm9oYW5uZXMgWmVsbG5lciBoYXMgb25lIGZvciBWQi4KKzcgICBXaGVuIHVzaW5nIDJodG1sLnZpbSwgYWxzbyByZXByb2R1Y2UgZm9sZHMgYXMgeW91IGNhbiBzZWUgdGhlbS4gIFdoZW4KKyAgICBzb21lb25lIGRvZXNuJ3Qgd2FudCB0aGUgZm9sZHMgaGUgY2FuIGRpc2FibGUgdGhlbSBiZWZvcmUgY29udmVydGluZy4KKyAgICBGaXJzdCBhdHRlbXB0IGJ5IENhcmwgT3N0ZXJ3aXNjaCwgMjAwNCBNYXkgMTAuCis3ICAgV2hlbiB1c2luZyBtYW51YWwgZm9sZGluZywgdGhlIHVuZG8gY29tbWFuZCBzaG91bGQgYWxzbyByZXN0b3JlIGZvbGRzLgorLSAgIEFsbG93IGNvbXBsZXRlbHkgaGlkaW5nIGEgY2xvc2VkIGZvbGQuICBSZXF1aXJlIHNob3dpbmcgYSBjaGFyYWN0ZXIgaW4KKyAgICAnZm9sZGNvbHVtbicgdG8gYXZvaWQgdGhlIG1pc3NpbmcgbGluZSBnb2VzIHVubm90aWNlZC4KKy0gICBXaGVuIHByZXNzaW5nIHRoZSBkb3duIGFycm93IG9mIGEgc2Nyb2xsYmFyLCBhIGNsb3NlZCBmb2xkIGRvZXNuJ3Qgc2Nyb2xsCisgICAgdW50aWwgYWZ0ZXIgYSBsb25nIHRpbWUuICBIb3cgdG8gbWFrZSBzY3JvbGxpbmcgd2l0aCBjbG9zZWQgZm9sZHMKKyAgICBzbW9vdGhlcj8KKy0gICBXaGVuIGNyZWF0aW5nIGEgc2Vzc2lvbiwgYWxzbyBzdG9yZSBmb2xkcyBmb3IgYnVmZmVycyBpbiB0aGUgYnVmZmVyIGxpc3QsCisgICAgdXNpbmcgdGhlIHdpbmluZm8gaW4gd2lfZm9sZHMuCistICAgJ2ZvbGRtZXRob2QnICJ0ZXh0b2JqZWN0IjogZm9sZCBvbiBzZWN0aW9ucyBhbmQgcGFyYWdyYXBoIHRleHQgb2JqZWN0cy4KKy0gICBBZGQgJ2hpZGVjb21tZW50JyBvcHRpb246IGRvbid0IGRpc3BsYXkgY29tbWVudHMgaW4gLyogKi8gYW5kIGFmdGVyIC8vLgorLSAgICJ6dSI6IHVuZG8gY2hhbmdlIGluIG1hbnVhbCBmb2xkLiAielUiIHJlZG8gY2hhbmdlIGluIG1hbnVhbCBmb2xkLiAgSG93IHRvCisgICAgaW1wbGVtZW50IHRoaXM/CistICAgInpKIiBjb21tYW5kOiBhZGQgdGhlIGxpbmUgb3IgZm9sZCBiZWxvdyB0aGUgZm9sZCBpbiB0aGUgZm9sZCB1bmRlciB0aGUKKyAgICBjdXJzb3IuCistICAgJ2ZvbGRtZXRob2QnICJzeW50YXgiOiAiZm9sZD0zIjogc2V0IGZvbGQgbGV2ZWwgZm9yIGEgcmVnaW9uLgorLSAgIENhbiBzZXQgJ2ZvbGR0ZXh0JyB0byBlbXB0eSBzdHJpbmc6IGRvbid0IGRpc3BsYXkgYW55IGxpbmUuICBIb3cgdG8KKyAgICBpbXBsZW1lbnQgdGhpcz8KKy0gICBBcHBseSBhIG5ldyBmb2xkbGV2ZWwgdG8gYSByYW5nZSBvZiBsaW5lcy4gKFN0ZXZlIExpdHQpCistICAgSGF2ZSBzb21lIHdheSB0byByZXN0cmljdCBjb21tYW5kcyB0byBub3QgZm9sZGVkIHRleHQuICBBbHNvIGNvbW1hbmRzIGxpa2UKKyAgICBzZWFyY2hlcy4KKworCitNdWx0aS1ieXRlIGNoYXJhY3RlcnM6Cis5ICAgV2hlbiB0aGUgdGFpbCBieXRlIG9mIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyIGlzIGlsbGVnYWwgKGUuZy4sIGEgQ1IpLCB0aGUKKyAgICBkaXNwbGF5IGlzIG1lc3NlZCB1cCAoWWFzdWhpcm8gTWF0c3Vtb3RvKS4gIFNob3VsZCBjaGVjayBmb3IgaWxsZWdhbAorICAgIGRvdWJsZS1ieXRlIGNoYXJhY3RlcnMgYW5kIGRpc3BsYXkgdGhlbSBkaWZmZXJlbnRseSAoZGlzcGxheSBlYWNoIHNpbmdsZQorICAgIGJ5dGUpLgorOCAgIEFkZCBhbiBpdGVtIGluICdmaWxlZW5jb2RpbmdzJyB0byBjaGVjayB0aGUgZmlyc3QgbGluZXMgb2YgYSBmaWxlIGZvcgorICAgIHRoZSBlbmNvZGluZy4gIFNlZSBQeXRob24gUEVQOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcGVwcy9wZXAtMDI2My5odG1sLgorICAgIFRvIGF2b2lkIGdldHRpbmcgYSB3cm9uZyBlbmNvZGluZyBvbmx5IGFjY2VwdCBzb21ldGhpbmcgRW1hY3MtbGlrZToKKyAgICAiLSotIGNvZGluZzogZW5jLW5hX21lLmZvbyAtKi0iIGFuZCAiLSotIGNvZGluZz0gZW5jLW5hX21lLmZvbyAtKi0iCisgICAgTWF0Y2ggd2l0aCAiLVwqLVxzKmNvZGluZ1s6PV1ccypcKFs6OndvcmQ6Oi1fLl1cK1wpXHMqLVwqLSIgYW5kIHVzZSBmaXJzdAorICAgIGl0ZW0uCis4ICAgQWRkIGFuIGl0ZW0gaW4gJ2ZpbGVlbmNvZGluZ3MnIHRvIGNoZWNrIHRoZSBmaXJzdCBsaW5lIG9mIGFuIFhNTCBmaWxlIGZvcgorICAgIHRoZSBlbmNvZGluZy4gPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4gIE9yICJjaGFyc2V0PVVURi04Ij8KKzggICBUaGUgcXVpY2tmaXggZmlsZSBpcyByZWFkIHdpdGhvdXQgY29udmVyc2lvbiwgdGh1cyBpbiAnZW5jb2RpbmcnLiAgQWRkIGFuCisgICAgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGVuY29kaW5nIG9mIHRoZSBlcnJvcmZpbGUgYW5kIGNvbnZlcnQgaXQuICBBbHNvIGZvcgorICAgICI6Z3JlcCIuCis4ICAgV2hlbiBhIGZpbGUgd2FzIGNvbnZlcnRlZCBmcm9tICdmaWxlZW5jb2RpbmcnIHRvICdlbmNvZGluZycsIGEgdGFnIHNlYXJjaAorICAgIHNob3VsZCBhbHNvIGRvIHRoaXMgb24gdGhlIHNlYXJjaCBwYXR0ZXJuLiAoQW5kcnplaiBNLiBPc3RydXN6a2EpCis3ICAgV2hlbiBjb252ZXJ0aW5nIGEgZmlsZSBmYWlscywgbWVudGlvbiB3aGljaCBieXRlIGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQsCisgICAgc28gdGhhdCB0aGUgdXNlciBjYW4gZml4IHRoZSBwcm9ibGVtLgorOCAgIEFkZCBjb25maWd1cmUgb3B0aW9uIHRvIGJlIGFibGUgdG8gZGlzYWJsZSB1c2luZyB0aGUgaWNvbnYgbGlicmFyeS4gKFVkbworICAgIFNjaHdlaWdlcnQpCis4ICAgQWRkIHBhdGNoIGZyb20gTXVyYW9rYSBUYXJvIChNYXIgMTYpIHRvIHN1cHBvcnQgaW5wdXQgbWV0aG9kIG9uIE1hYz8KKzkgICAnYWxlcGgnIHNob3VsZCBiZSBzZXQgdG8gMTQ4OCBmb3IgVW5pY29kZS4gKFp2aSBIYXInRWwpCis4ICAgU2hvdWxkIGFkZCB0ZXN0IGZvciB1c2luZyB2YXJpb3VzIGNvbW1hbmRzIHdpdGggbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorLSAgIEluY2x1ZGUgZmxpcGNhc2UgcGF0Y2g6IH4vdmltL3BhdGNoZXMvd2FsbC5mbGlwY2FzZTIgPyAgTWFrZSBpdCB3b3JrIGZvcgorICAgIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKzggICAnaW5mZXJjYXNlJyBkb2Vzbid0IHdvcmsgd2l0aCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCis4ICAgdG91cHBlcigpIGZ1bmN0aW9uIGRvZXNuJ3QgaGFuZGxlIGJ5dGUgY291bnQgY2hhbmdlcy4KKzggICBTdXBwb3J0IGZvdXIgY29tcG9zaW5nIGNoYXJhY3RlcnMsIG5lZWRlZCBmb3IgSGVicmV3LiAoUm9uIEFhcm9uKQorOCAgICJnYSIgc2hvdWxkIHNob3cgYWxsIGNvbXBvc2luZyBjaGFyYWN0ZXJzLCBhbHNvIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMi4KKzcgICBXaGVuIHNlYXJjaGluZywgc2hvdWxkIG9yZGVyIG9mIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGJlIGlnbm9yZWQ/Cis4ICAgU2hvdWxkIGltcGxlbWVudCAnZGVsY29tYmluZScgZm9yIGNvbW1hbmQgbGluZSBlZGl0aW5nLgorOCAgIERldGVjdCBvdmVybG9uZyBVVEYtOCBzZXF1ZW5jZXMgYW5kIGhhbmRsZSB0aGVtIGxpa2UgaWxsZWdhbCBieXRlcy4KKzggICAiOnMveC9cdVwxLyIgZG9lc24ndCB3b3JrLCBtYWtpbmcgdXBwZXJjYXNlIGlzbid0IGRvbmUgZm9yIG11bHRpLWJ5dGUKKyAgICBjaGFyYWN0ZXJzLgorOCAgIFVURi04OiAiciIgaW4gVmlzdWFsIG1vZGUgZG9lc24ndCB0YWtlIGNvbXBvc2luZyBjaGFyYWN0ZXJzLgorOCAgIFVURi04OiBXaGVuIHRoZXJlIGlzIGEgcHJlY29tcG9zZWQgY2hhcmFjdGVyIGluIHRoZSBmb250LCB1c2UgaXQgaW5zdGVhZAorICAgIG9mIGEgY2hhcmFjdGVyIGFuZCBhIGNvbXBvc2luZyBjaGFyYWN0ZXIuICBTZWUgeHRlcm0gZm9yIGFuIGV4YW1wbGUuCis3ICAgV2hlbiBhIGNoYXJhY3RlciBjYW4ndCBiZSBkaXNwbGF5ZWQsIGRpc3BsYXkgaXRzIGRpZ3JhcGggaW5zdGVhZC4KKyAgICAnZGlzcGxheScgb3B0aW9uIHRvIHNwZWNpZnkgdGhpcy4KKzcgICBVc2UgaWRlYXMgZm9yIG5sX2xhbmdpbmZvKCkgZnJvbSBNYXJrdXMgS3VobiBpbiBlbmNfZGVmYXVsdCgpOgorICAgICh3d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvbGFuZ2luZm8uYykKKy0gICBHVEsgYW5kIFdpbjMyOiBBbGxvdyBzZWxlY3RpbmcgZm9udHMgZm9yICdndWlmb250c2V0JyB3aXRoIHRoZQorICAgIGZvbnRzZWxlY3RvciBzb21laG93LgorLSAgIEdUSyBhbmQgV2luMzI6IG1ha2UgaXQgcG9zc2libGUgdG8gc2V0IHRoZSBmb250IGZvciB0aGUgbWVudSB0byBtYWtlIGl0CisgICAgcG9zc2libGUgdG8gaGF2ZSAnZW5jb2RpbmcnIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IGxvY2FsZS4KKy0gICBkYmNzX2NsYXNzKCkgb25seSB3b3JrcyBmb3IgSmFwYW5lc2UgYW5kIEtvcmVhbi4gIEltcGxlbWVudCB0aGlzIGZvcgorICAgIG90aGVyIGVuY29kaW5ncy4gIFRoZSAiZXVjLWpwIiBhbmQgImV1Yy1rciIgY2hvaWNlcyBtaWdodCBiZSB3cm9uZy4KKy0gICBGaW5kIHNvbWUgd2F5IHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSByaWdodCBHVUkgZm9udCBvciBmb250c2V0LAorICAgIGRlcGVuZGluZyBvbiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAnZW5jb2RpbmcnLgorICAgIElycmVsZXZhbnQgaW4gdGhlIEdUSysgMiBHVUkgc28gbG9uZyBhcyBVVEYtOCBpcyB1c2VkLgorICAgIEZvciBXaW5kb3dzLCB0aGUgY2hhcnNldF9wYWlyc1tdIHRhYmxlIGNvdWxkIGJlIHVzZWQuICBCdXQgaG93IGRvIHdlIGtub3cKKyAgICBpZiBhIGZvbnQgZXhpc3RzPworLSAgIERvIGtleWJvYXJkIGNvbnZlcnNpb24gZnJvbSAndGVybWVuY29kaW5nJyB0byAnZW5jb2RpbmcnIHdpdGgKKyAgICBjb252ZXJ0X2lucHV0KCkgZm9yIE1hYyBHVUksIFJpc2NPUyBHVUksIEJlT1MgR1VJLgorLSAgIEFkZCBtbmVtb25pY3MgZnJvbSBSRkMxMzQ1IGxvbmdlciB0aGFuIHR3byBjaGFyYWN0ZXJzLgorICAgIFN1cHBvcnQgQ1RSTC1LIF97bW5lbW9uaWN9XworNyAgIEluICItLSBJTlNFUlQgKGxhbmcpIC0tIiBzaG93IHRoZSBuYW1lIG9mIHRoZSBrZXltYXAgdXNlZCBpbnN0ZWFkIG9mCisgICAgImxhbmciLiAoSWx5YSBEb2dvbGF6a3kpCistICAgTWFrZSAnbGFuZ21hcCcgYWNjZXB0IG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKy0gICBEbyB3ZSBuZWVkIHRoZSByZXZlcnNlIG9mICdrZXltYXAnLCBsaWtlICdsYW5nbWFwJyBidXQgd2l0aCBmaWxlcyBhbmQKKyAgICBtdWx0aS1ieXRlIGNoYXJhY3RlcnM/ICBFLmcuLCB3aGVuIHVzaW5nIGEgUnVzc2lhbiBrZXlib2FyZC4KKy0gICBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIGVudGVyIG1hcHBpbmdzIHdoaWNoIGFyZSB1c2VkIHdoZW5ldmVyIG5vcm1hbCB0ZXh0CisgICAgY291bGQgYmUgZW50ZXJlZC4gIEUuZy4sIGZvciAiZiIgY29tbWFuZC4gIEJ1dCBub3QgaW4gTm9ybWFsIG1vZGUuICBTb3J0CisgICAgb2Ygb3Bwb3NpdGUgb2YgJ2xhbmdtYXAnLiAgVXNlICI6dG1hcCIgY29tbWFuZD8KKy0gICBXaGVuIGJyZWFraW5nIGEgbGluZSwgdGFrZSBwcm9wZXJ0aWVzIG9mIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBpbnRvCisgICAgYWNjb3VudC4gIFRoZSAibGluZWJyZWFrIiBwcm9ncmFtIGZyb20gQnJ1bm8gSGFpYmxlIGNhbiBkbyBpdDoKKyAgICBmdHA6Ly9mdHAuaWxvZy5mci9wdWIvVXNlcnMvaGFpYmxlL2dudS9saW5lYnJlYWstMC4xLnRhci5negorICAgIEJ1dCBpdCdzIHZlcnkgY29tcGxpY2F0ZWQuLi4KKworCitQcmludGluZzoKKy0gICBBZGQgInBhZ2Ugd2lkdGgiIHRvIHdyYXAgbG9uZyBsaW5lcy4KKy0gICBXaW4zMjogdXNlIGEgZm9udCBkaWFsb2cgZm9yIHNldHRpbmcgJ3ByaW50Zm9udCcuICBDYW4gcmV1c2UgdGhlIGNvZGUgZm9yCisgICAgdGhlICdndWlmb250JyBkaWFsb2csIHB1dCB0aGUgY29tbW9uIGNvZGUgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbi4KKy0gICBXaW4zMjogd2hlbiAncHJpbnRmb250JyBpcyBlbXB0eSB1c2UgJ2d1aWZvbnQnLgorLSAgIFVuaXg6IFVzZSBzb21lIGRpYWxvZyBib3ggdG8gZG8gdGhlIG9idmlvdXMgc2V0dGluZ3MgKHBhcGVyIHNpemUsIHByaW50ZXIKKyAgICBuYW1lLCBwb3J0cmFpdC9sYW5kc2NhcGUsIGV0YykuCistICAgV2luMzI6IGFkZCBvcHRpb25zIHRvIHByaW50IGRpYWxvZy4gIFBhdGNoIGZyb20gVmlwaW4gQXJhdmluZC4KKy0gICBQb3N0U2NyaXB0OiBvbmx5IHdvcmtzIGZvciA3LWJpdCBBU0NJSSBhbmQgRUJDRElDLiAgU2hvdWxkIHN1cHBvcnQKKyAgICBkaWZmZXJlbnQgJ2VuY29kaW5nJyB2YWx1ZXMgc29tZWhvdy4KKy0gICBBbGxvdyBzcGVjaWZ5aW5nIHRoZSBwYXBlciBzaXplLCBpbnN0ZWFkIG9mIHVzaW5nIGEgc3RhbmRhcmQgc2l6ZS4gIFNhbWUKKyAgICB1bml0cyBhcyBmb3IgdGhlIG1hcmdpbnMuCistICAgU3VwcG9ydCByaWdodC10by1sZWZ0IHRleHQ/Cis4ICAgTWFrZSB0aGUgZm9yZWdyb3VuZCBjb2xvciBkYXJrZW5pbmcgZnVuY3Rpb24gcHJlc2VydmUgdGhlIGh1ZSBvZiB0aGUKKyAgICBjb2xvci4KKworCitTeW50YXggaGlnaGxpZ2h0aW5nOgorLSAgIFBhdGNoIHRvIGFkZCBoaWdobGlnaHRpbmcgZm9yIHdoaXRlc3BhY2UuIChUb20gU2NodW1tLCAyMDAzIEp1bCA1KQorICAgIHVzZSB0aGUgcGF0Y2ggdGhhdCBrZWVwcyB1c2luZyBITEZfOCBpZiBITEZfV1MgaGFzIG5vdAorICAgIGJlZW4gZ2l2ZW4gdmFsdWVzLgorICAgIEFkZCBzZWN0aW9uIGluIGhlbHAgZmlsZXMgZm9yIHRoZXNlIGhpZ2hsaWdodCBncm91cHM/Cis4ICAgTWFrZSAiOnN5biBvZmYiIHVzZSAncnVudGltZXBhdGgnIGluc3RlYWQgb2YgJFZJTVJVTlRJTUUuIChHYXJ5IEpvaG5zb24pCisgICAgU2hvdWxkIGRvIHRoZSBzYW1lIGZvciAiOnN5biBvbiIgYW5kICI6c3luIG1hbnVhbCIuCis4ICAgU3VwcG9ydCAiY29udGFpbmVkaW4iIGFyZ3VtZW50IGZvciAiOnN5biBpbmNsdWRlIiwgc28gdGhhdCB0aGUgZGVmaW5lZAorICAgIGNsdXN0ZXIgY2FuIGJlIGFkZGVkIHRvIGV4aXN0aW5nIHN5bnRheCBpdGVtcy4KKzggICBDIHN5bnRheDogRG9uJ3QgaGlnaGxpZ2h0IHt9IGFzIGVycm9ycyBpbnNpZGUgKCkgd2hlbiB1c2VkIGxpa2UgdGhpczoKKyAgICAiKHsgc29tZXRoaW5nIH0pIiwgb2Z0ZW4gdXNlZCBpbiBHQ0MgY29kZS4KKzggICBXaGVuIGVkaXRpbmcgYSBuZXcgZmlsZSB3aXRob3V0IGEgbmFtZSBhbmQgZ2l2aW5nIGl0IGEgbmFtZSAoYnkgd3JpdGluZworICAgIGl0KSBhbmQgJ2ZpbGV0eXBlJyBpcyBub3Qgc2V0LCBkZXRlY3QgdGhlIGZpbGV0eXBlLiAgQXZvaWQgZG9pbmcgaXQgZm9yCisgICAgIjp3cSBmaWxlIi4KKzggICBNYWtlIGNvbnZlcnNpb24gdG8gSFRNTCBmYXN0ZXIgKFdyaXRlIGl0IGluIEMgb3IgcHJlLWNvbXBpbGUgdGhlIHNjcmlwdCkuCis5ICAgVGhlcmUgaXMgc3RpbGwgYSByZWRyYXcgYnVnIHNvbWV3aGVyZS4gIFByb2JhYmx5IGJlY2F1c2UgYSBjYWNoZWQgc3RhdGUgaXMKKyAgICB1c2VkIGluIGEgd3Jvbmcgd2F5LiAgSSBjYW4ndCByZXByb2R1Y2UgaXQuLi4KKzcgICBNYWtlIHN5bnRheCBrZXl3b3JkIHRhYmxlIGNvbmZpZ3VyYWJsZS4gIFNldCBudW1iZXIgb2YgYml0cyB1c2VkIHdpdGgKKyAgICAiOnN5biBjbGVhciBbaGFzaGJpdHNdIiwgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlYWxsb2NhdGUgdGhlIHRhYmxlLgorICAgIG1pbmltYWwgNCBiaXRzLCBtYXhpbWFsIDE2LiAoQ2FtcGJlbGwpCis3ICAgQmUgYWJsZSB0byBjaGFuZ2Ugb25seSB0aGUgYmFja2dyb3VuZCBoaWdobGlnaHRpbmcuICBVc2VmdWwgZm9yIERpZmYqIGFuZAorICAgIFNlYXJjaCBoaWdobGlnaHRpbmcuCis4ICAgQWxsb3cgdGhlIHVzZXIgdG8gYWRkIGl0ZW1zIHRvIHRoZSBTeW50YXggbWVudSBzb3J0ZWQsIHdpdGhvdXQgaGF2aW5nIHRvCisgICAgY2hhbmdlIHRoaXMgZm9yIGVhY2ggcmVsZWFzZS4KKzggICBBZGQgYSAibWF0Y2hjb250YWlucyIgZm9yIHJlZ2lvbnM6IGl0ZW1zIGNvbnRhaW5lZCBpbiB0aGUgc3RhcnQgb3IgZW5kCisgICAgcGF0dGVybiwgYnV0IG5vdCBpbiB0aGUgYm9keS4KKzggICBBZGQgYSAia2VlcGVuZC1jb250YWluZWQiIGFyZ3VtZW50OiBEb24ndCBjaGFuZ2UgdGhlIGVuZCBvZiBhbiBpdGVtIHRoaXMKKyAgICBvbmUgaXMgY29udGFpbmVkIGluLiAgTGlrZSAia2VlcGVuZCIgYnV0IHNwZWNpZmllZCBvbiB0aGUgY29udGFpbmVkIGl0ZW0sCisgICAgaW5zdGVhZCBvZiB0aGUgY29udGFpbmluZyBpdGVtLgorOCAgIEZvciBrZXl3b3JkcywgYWxsb3cgdG8gZGVmaW5lIHRoZSBzaXplIG9mIHRoZSBoYXNoIHRhYmxlIHdpdGggIjpzeW4KKyAgICBjbGVhciIuICBDaGFuZ2UgS0hBU0hfIGRlZmluZXMgaW50byB2YXJpYWJsZXMgc3RvcmVkIGluIGJ1ZmZlciBzdHJ1Y3QuCisgICAgVXNlIHNvbWV0aGluZyBlbHNlIHRoYW4gbGluZWFyIGxpbmtlZCBsaXN0IGZyb20gdGhlIGhhc2ggdGFibGUuIChDYW1wYmVsbCkKKzggICBjcHAudmltOiBJbiBDKysgaXQncyBhbGxvd2VkIHRvIHVzZSB7fSBpbnNpZGUgKCkuCis4ICAgU29tZSBzeW50YXggZmlsZXMgc2V0ICdpc2tleXdvcmQnLiAgV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciBmaWxldHlwZQorICAgIHRoaXMgaXNuJ3QgcmVzZXQuICBBZGQgYSBzcGVjaWFsIGtleXdvcmQgZGVmaW5pdGlvbiBmb3IgdGhlIHN5bnRheCBydWxlcz8KKyAgICBXaGVuIHRoaXMgaXMgZG9uZSwgdXNlIHZpbS52aW0gc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgaGVscCBmaWxlIGV4YW1wbGVzLAorICAgIGJ1dCB3aXRob3V0ICI6IiBpbiAnaXNrZXl3b3JkJyBmb3Igc3ludGF4LgorOCAgIEFkZCBzcGVjaWZpYyBzeW50YXggaXRlbSB0byBtYXRjaCB3aXRoIHBhcmVucy9icmFjZXMgdGhhdCBkb24ndCBoYXZlIGEKKyAgICAiJSIgbWF0Y2guICA6c3ludGF4IG5vbWF0Y2ggY01hdGNoRXJyb3IgKCx7LFssKSx9LF0gW2NvbnRhaW5lZF0KKzggICBIaWdobGlnaHQgdGhlIHRleHQgYmV0d2VlbiB0d28gbWF0Y2hpbmcgcGFyZW5zIChlLmcuLCB3aXRoIGEgZ3JleQorICAgIGJhY2tncm91bmQpIHdoZW4gb24gb25lIG9mIHRoZSBwYXJlbnMgb3IgaW4gYmV0d2VlbiB0aGVtLgorICAgIE9yIGhpZ2hsaWdodCB0aGUgbWF0Y2hpbmcgcGFyZW4gd2hlbiB0aGUgY3Vyc29yIGlzIG9uIG9uZS4KKzggICBBZGQgYSBjb21tYW5kIHRvIGp1bXAgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGhpZ2hsaWdodGVkIHdpdGggIkVycm9yIi4KKzggICBXaGVuIHVzaW5nIGEgY3Rlcm0sIGFuZCBubyBjdGVybWZnIG9yIGN0ZXJtYmcgYXJlIGRlZmluZWQsIHVzZSBzdGFydC9zdG9wCisgICAgc2VxdWVuY2VzLglBZGQgcmVtYXJrIGluIGRvY3MgdGhhdCA6aWYgJ3Rlcm0nID09ICJ0ZXJtLW5hbWUiIHNob3VsZCBiZQorICAgIHVzZWQuCis4ICAgQWRkIEBzcGVsbCBjbHVzdGVyIHRvIFN0cmluZyBhbmQgQ29tbWVudCBncm91cHMgZm9yIG1hbnkgbGFuZ3VhZ2VzLiAgV2lsbAorICAgIGFsbG93IHNwZWxsIGNoZWNraW5nLiAoRmxlaW5lcikKKzggICBXaGVuIGxpc3Rpbmcgc3ludGF4IGl0ZW1zLCB0cnkgdG8gc29ydCB0aGUga2V5d29yZHMgYWxwaGFiZXRpY2FsbHkuICBBbmQKKyAgICByZS1pbnNlcnQgdGhlIFtdIGlmIHBvc3NpYmxlLgorOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGNvbG9yIG9mIHRleHQgZm9yIFZpc3VhbCBoaWdobGlnaHQgZ3JvdXAgKGxpa2UgZm9yCisgICAgdGhlIEN1cnNvcikuCis4ICAgImZnIiBhbmQgImJnIiBkb24ndCB3b3JrIGluIGFuIHh0ZXJtLiAgR2V0IGRlZmF1bHQgY29sb3JzIGZyb20geHRlcm0gd2l0aAorICAgIGFuIEVTQyBzZXF1ZW5jZS4gIElkZWFzIGluOiB+L3ZpbS9wYXRjaGVzL3Zpa2FzLnh0ZXJtY29sb3JzIC4KKzggICBNYWtlIGl0IHBvc3NpYmxlIHRvIG9ubHkgaGlnaGxpZ2h0IGEgc3ViLWV4cHJlc3Npb24gb2YgYSBtYXRjaC4gIExpa2UKKyAgICB1c2luZyAiXDEiIGluIGEgIjpzIiBjb21tYW5kLgorOCAgIFN1cHBvcnQgZm9yIGRlbGV0aW5nIHN5bnRheCBpdGVtczoKKyAgICA6c3luIGtleXdvcmQgY1RvZG8gcmVtb3ZlIHRoaXMKKyAgICA6c3luIG1hdGNoIGNUb2RvIHJlbW92ZSAicGF0dGVybiIKKyAgICA6c3luIHJlZ2lvbiBjU3RyaW5nIHJlbW92ZSBzdGFydD0idGhpcyIgZW5kPSJ0aGF0IgorOCAgIEFkZCBwb3NzaWJpbGl0eSB0byBzeW5jIG9uIHNvbWV0aGluZyBlbHNlLCB3aGVuIHRoZSBzeW5jaW5nIGluIG9uZSB3YXkKKyAgICBkb2Vzbid0IGZpbmQgbWF0Y2guICBGb3IgSFRNTDogV2hlbiBubyB7c2NyaXB0fSBpcyBmb3VuZCwgdHJ5IGxvb2tpbmcgZm9yCisgICAgYSAnPCcuICAoRmxlaW5lcikKKzcgICBSZXBsYWNlIHRoZSBzeW5jaHJvbml6aW5nIG1ldGhvZCB3aXRoIGEgc3RhdGUgbWFjaGluZSBzcGVjaWZpY2F0aW9uPworICAgIFNob3VsZCBiZSBhYmxlIHRvIHN0YXJ0IGF0IGFueSBsaW5lIGluIHRoZSBmaWxlLCBzZWFyY2ggZm9yd2FyZHMgb3IKKyAgICBiYWNrd2FyZHMsIGFuZCB1c2UgdGhlIHJlc3VsdCBvZiBtYXRjaGluZyBhIHBhdHRlcm4uCis3ICAgVXNlIHBhcnNpbmcgbGlrZSBhd2ssIHNvIHRoYXQgZS5nLiwgYSAoIHdpdGhvdXQgYSBtYXRjaGluZyApIGNhbiBiZQorICAgIGRldGVjdGVkLgorOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gdXNlICJpbnZlcnRlZCIgaGlnaGxpZ2h0aW5nLCBpbnZlcnQgdGhlIG9yaWdpbmFsCisgICAgY2hhcmFjdGVyLiAgRm9yIFZpc3VhbCBtb2RlLiAoeHRlcm0tc2VsZWN0aW9uIGFscmVhZHkgZG9lcyB0aGlzKS4KKzggICBIaWdobGlnaHQgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIHdpdGggIlNwZWNpYWxDaGFyIiwgbGlua2VkIHRvCisgICAgIlNwZWNpYWwiLiAgRGlzcGxheSB0aGVtIHdpdGggdGhlIGRpZ3JhcGggY2hhcmFjdGVycywgaWYgcG9zc2libGUuCis3ICAgQWRkICJEZWZhdWx0RkciIGFuZCAiRGVmYXVsdEJHIiBmb3IgdGhlIGNvbG9ycyBvZiB0aGUgbWVudS4gKE1hcnRpbgorICAgIERhbGVja2kgaGFzIGEgcGF0Y2ggZm9yIE1vdGlmKQorOCAgIEhpZ2hsaWdodCB0aGUgY2xpcGJvYXJkLXNlbGVjdGlvbiB3aXRoIGEgaGlnaGxpZ2h0IGdyb3VwLgorOCAgIEJlIGFibGUgdG8gcmVzZXQgaGlnaGxpZ2h0aW5nIHRvIGl0cyBvcmlnaW5hbCAoZGVmYXVsdCkgdmFsdWVzLgorNyAgIEJlIGFibGUgdG8gd3JpdGUgY3VycmVudCBoaWdobGlnaHRpbmcgdG8gYSBmaWxlIGFzIGNvbW1hbmRzLCBzaW1pbGFyIHRvCisgICAgIjpta3ZpbXJjIi4KKzggICBJbXByb3ZlIGMudmltOgorICAgIC0gQWRkIGNoZWNrIGZvciB1bnRlcm1pbmF0ZWQgc3RyaW5ncywgd2l0aCBhIHZhcmlhYmxlIHRvIHN3aXRjaCBpdCBvbjoKKyAgICAgICJjX3N0cmljdF9hbnNpIi4KKyAgICAtIERldGVjdCB1bmJhbGFuY2VkICIjZW5kaWYiLiAgUmVxdWlyZXMgbG9va2luZyBiYWNrIGEgbG9uZyB3YXkuLi4KKzggICBBZGQgYW4gb3B0aW9uIHRvIHJlc3RyaWN0IHRoZSB1cGRhdGluZyBvZiBzeW50YXggaGlnaGxpZ2h0aW5nIHRvIHRoZQorICAgIGN1cnJlbnQgbGluZSB3aGlsZSBpbiBJbnNlcnQgbW9kZS4KKzggICBXaGVuIGd1ZXNzaW5nIHZhbHVlIG9mICdiYWNrZ3JvdW5kJywgdGhlIHN5bnRheCBmaWxlIGhhcyBhbHJlYWR5IGJlZW4KKyAgICBsb2FkZWQgKGZyb20gdGhlIC5ndmltcmMpLglBZnRlciBjaGFuZ2luZyAnYmFja2dyb3VuZCcsIGxvYWQgaXQgYWdhaW4/Cis4ICAgQWRkICI6c3luIHJlc3luYyIgY29tbWFuZCwgdG8gcmUtcGFyc2UgdGhlIHdob2xlIGZpbGUgdW50aWwgdGhlIGN1cnJlbnQKKyAgICBkaXNwbGF5IHBvc2l0aW9uLgorOCAgIFNob3VsZCBzdXBwb3J0ICJtZSIgb2Zmc2V0IGZvciBhIHJlZ2lvbiBzdGFydCBwYXR0ZXJuLiAgVG8gYmUgdXNlZCB0bworICAgIGFsbG93IHNlYXJjaGluZyBmb3IgdGhlIGVuZCBwYXR0ZXJuIGluc2lkZSB0aGUgbWF0Y2ggb2YgdGhlIGVuZCBwYXR0ZXJuLgorICAgIEV4YW1wbGU6IHN5biByZWdpb24gcGlrZVhYIHN0YXJ0PSIoW157XSIgZW5kPSIpIiBzaG91bGQgd29yayBvbiAiKCkiLgorOCAgIFdoZW4gdXNpbmcgYSByZWdleHAgZm9yICJjb250YWlucz0iLCBzaG91bGQgZGVsYXkgbWF0Y2hpbmcgd2l0aCBpdCB1bnRpbAorICAgIHJlZHJhd2luZyBoYXBwZW5zLiAgU2V0IGEgZmxhZyB3aGVuIGEgZ3JvdXAgaXMgYWRkZWQsIGNoZWNrIHRoaXMgZmxhZyB3aGVuCisgICAgaGlnaGxpZ2h0aW5nIHN0YXJ0cy4KKzcgICBBZGQgInNlbWl0cmFucyI6IEFkZCBoaWdobGlnaHRpbmcuICBFLmcuLCBtYWtlIHRoZSB0ZXh0IGJvbGQsIGJ1dCBrZWVwIHRoZQorICAgIGNvbG9ycy4gIEFuZCBhZGQgY29sb3JzLCBzbyB0aGF0IEdyZWVuK1JlZCBiZWNvbWVzIFllbGxvdy4KKyAgICBFLmcuIGZvciB0aGlzIGh0bWw6CisJPEI+IGJvbGQgdGV4dCA8ST4gaXRhbGljK2JvbGQgdGV4dCA8L0I+IGl0YWxpYyB0ZXh0IDwvST4KKzcgICBXaWxkIGlkZWE6IE5vdCBvbmx5IHNldCBoaWdobGlnaHRpbmcsIGJ1dCBhbHNvIGNoYW5nZSB3aGF0IGlzIGRpc3BsYXllZAorICAgIChlLmcuLCByZW1vdmUgY2hhcmFjdGVycywgc28gdGhhdCAiPEI+Ym9sZDwvQj4iIGNhbiBiZSBzaG93biBhcyAiYm9sZCIpOgorCTpzeW4gcmVnaW9uIGJvbGRzdHVmZiBzdGFydD0iPEI+IiBkaXNwbGF5PSIiIGVuZD0iPC9CPiIgZGlzcGxheT0iIgorNyAgIENUUkwtXSBjaGVja3MgdGhlIGhpZ2hsaWdodCBncm91cCBmb3IgZmluZGluZyBvdXQgd2hhdCB0aGUgdGFnIGlzLgorNyAgIEFkZCBhbiBleHBsYW5hdGlvbiBob3cgYSBsaXN0IG9mIHdvcmRzIGNhbiBiZSB1c2VkIHRvIGhpZ2hsaWdodCBtaXNzcGVsbGVkCisgICAgd29yZHMuCis4ICAgQWRkIHNwZWxsIGNoZWNraW5nLiAgVXNlICJpc3BlbGwgLWEiIHNvbWVob3cuCisgICAgfi92aW0vcGF0Y2hlcy93bV92aW0tNV80ZC56aXAgIGNhbiBiZSB1c2VkIGFzIGFuIGV4YW1wbGUgKGluY2x1ZGVzIGlzcGVsbAorICAgIGluc2lkZSBWaW0pLiAgR2F1dGFtIEl5ZXIgaGFzIGFuIGV4YW1wbGUgd2l0aCAiYXNwZWxsIi4gICJlbmdzcGNoayIgZnJvbQorICAgIENoYXJsZXMgQ2FtcGJlbGwgaXMgYSBnb29kIHdheS4gIFN1cHBvcnQgZm9yIGFwcHJveGltYXRlLXJlZ2V4cHMgd2lsbCBoZWxwCisgICAgKGFncmVwIGh0dHA6Ly93d3cudGdyaWVzLmRlL2FncmVwLykuCis3ICAgQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yICI6ZmluZCIgc2hvdWxkIHNlYXJjaCBpbiAncGF0aCcuCis4ICAgQWRkIG1vcmUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yIDpzeW50YXguCis4ICAgQWRkIG1vcmUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yIDpoaWdobGlnaHQuCis4ICAgQWRkIG1vcmUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yIDpzaWduLgorNyAgIFNob3VsZCBmaW5kIGEgYmV0dGVyIHdheSB0byBwYXJzZSB0aGUgOnN5bnRheCBhbmQgOmhpZ2hsaWdodCBjb21tYW5kcy4KKyAgICBVc2UgdGFibGVzIG9yIGxpc3RzIHRoYXQgY2FuIGJlIHNoYXJlZCBieSBwYXJzaW5nIGZvciBleGVjdXRpb24gYW5kCisgICAgY29tcGxldGlvbj8KKzggICBBZGQgQ29sb3JTY2hlbWVQb3N0IGF1dG9jb21tYW5kIGV2ZW50LCBzbyB0aGF0IHNjcmlwdHMgY2FuIHNldCB1cCB0aGVpcgorICAgIGhpZ2hsaWdodGluZy4gKFNhbG1hbiBIYWxpbSkKKzcgICBBZGQgYSBmZXcgc2V0cyBvZiBjb2xvcnMgKGUuZy4gQm9ybGFuZCBUdXJibyBDIG9uZSkuICBXaXRoIGEgbWVudSB0bworICAgIHNlbGVjdCBvbmUgb2YgdGhlIHNldHMuCis4ICAgQWRkIG9mZnNldHMgdG8gc3ViLW1hdGNoZXM6ICJcKGEqXCkgKiJoZT1lMS0xCisgICAgJ2UnIGlzIGVuZCBvZiBtYXRjaCAnZTEnIGlzIGVuZCBvZiBzdWItbWF0Y2ggMSwgJ3MyJyBpcyBzdGFydCBvZiBzdWJtYXRjaAorICAgIDIsIGV0Yy4KKzggICBJbiBJbnNlcnQgbW9kZSwgd2hlbiB0aGVyZSBhcmUgdHlwZWFoZWFkIGNoYXJhY3RlcnMsIHBvc3Rwb25lIHRoZQorICAgIGhpZ2hsaWdodGluZyAoZm9yICIuIiBjb21tYW5kKS4KKzggICBTeW5jaW5nIG9uIGNvbW1lbnRzIGlzbid0IDEwMCUgY29ycmVjdCB3aGVuIC8gLyBsaW5lcyBtaXggd2l0aCAvICogYW5kICogLy4KKyAgICBGb3IgZXhhbXBsZTogV2hhdCBhYm91dCBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAvIC8gYW5kIGNvbnRhaW5zICogLz8KKzggICBJZ25vcmUgLyAqIGFuZCAgKiAvIGluc2lkZSBzdHJpbmdzLCB3aGVuIHN5bmNpbmcuCis3ICAgQnVpbGQgYSBmZXcgbW9yZSBzeW50YXggZmlsZXMgZnJvbSB0aGUgZmlsZSAiL3Vzci9zaGFyZS9taXNjL3ZncmluZGVmcyI6CisgICAgSVNQLCBMREwsIEljb24sIHJhdGZvci4gIEFuZCBjaGVjayAibmVkaXQvc291cmNlL2hpZ2hsaWdodC5jIi4KKzYgICBBZGQgcG9zc2liaWxpdHkgdG8gaGF2ZSBiYWNrZ3JvdW5kIGNvbG9yIGNvbnRpbnVlIHVudGlsIHRoZSByaWdodCBlZGdlIG9mCisgICAgdGhlIHdpbmRvdy4gIFVzZWZ1bCBmb3IgY29tbWVudCBibG9ja3MgYW5kIGZ1bmN0aW9uIGhlYWRpbmdzLiAoUm9nYWxsKQorLSAgIE1ha2UgaXQgcG9zc2libGUgdG8gYWRkICJjb250YWlucyIgaXRlbXMgZm9yIGFsbCBpdGVtcyBpbiBhIGdyb3VwLglVc2VmdWwKKyAgICB3aGVuIGV4dGVuZGluZyBhbiBhbHJlYWR5IGV4aXN0aW5nIHN5bnRheCBmaWxlLgorLSAgIEFkZCBsaW5lLWNvbnRpbnVhdGlvbiBwYXR0ZXJuIGZvciBub24tc3luY2luZyBpdGVtcyB0b28/CistICAgQWRkIHBvc3NpYmlsaXR5IHRvIGhpZ2hsaWdodCBzcGVjaWZpYyBjb2x1bW5zIChmb3IgRm9ydHJhbikuICBPciBwdXQgYQorICAgIGxpbmUgaW4gYmV0d2VlbiBjb2x1bW5zIChlLmcuIGZvciAndGV4dHdpZHRoJykuCisgICAgUGF0Y2ggdG8gYWRkICdobGNvbHVtbicgZnJvbSBWaXQgU3RyYWRhbCwgMjAwNCBNYXkgMjAuCistICAgQWRkIHBvc3NpYmlsaXR5IHRvIGhpZ2hsaWdodCB0aGUgd2hvbGUgbGluZSwgaW5jbHVkaW5nIHRoZSByaWdodCBtYXJnaW4KKyAgICAoZm9yIGNvbW1lbnQgYmxvY2tzKS4KKy0gICBBZGQgJ2hsbWF0Y2gnIG9wdGlvbjogTGlzdCBvZiBmbGFnczoKKyAgICAnYyc6IGhpZ2hsaWdodCBtYXRjaCBmb3IgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuCisgICAgJ2InOiBoaWdobGlnaHQgdGhlIHByZXZpb3VzICgsIGFuZCBpdHMgbWF0Y2guCisgICAgJ2EnOiBoaWdobGlnaHQgYWxsIHRleHQgZnJvbSB0aGUgcHJldmlvdXMgKCB1bnRpbCBpdHMgbWF0Y2guCisJIEFsc28gZm9yIHt9LCA8PiwgZXRjLj8KKyAgICAnZSc6IGhpZ2hsaWdodCBhbGwgYnJhY2VzIHdpdGhvdXQgYSBtYXRjaCAoc2xvdz8pCisgICAgT1I6IGFkZCBhbiBhcmd1bWVudCAiY3Vyc29yIiB0byB0aGUgc3ludGF4IGNvbW1hbmQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlCisgICAgcmVnaW9uL21hdGNoL2tleXdvcmQgaXMgb25seSBoaWdobGlnaHRlZCB3aGVuIHRoZSBjdXJzb3IgaXMgb24gaXQuCisgICAgKENhbXBiZWxsKQorICAgIE9yIGRvIGl0IGxpa2UgRWx2aXM6IGRlZmluZSB0ZXh0IG9iamVjdHMgYW5kIGhvdyB0byBoaWdobGlnaHQgdGhlbSBhcm91bmQKKyAgICB0aGUgY3Vyc29yLiAoSWFpbiBUcnVza2V0dCkKKzcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBhbGwgd29yZHMgaW4gdGhlIHRhZ3MgZmlsZXMgYXMgS2V5d29yZC4KKyAgICBDYW4gYWxzbyBiZSBkb25lIHdpdGggYSBzY3JpcHQgKGJ1dCBpdCdzIHNsb3cpLgorNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gY2FsbCBhICI6IiBjb21tYW5kIHdoZW4gYSBtYXRjaCBpcyBmb3VuZC4gIFNob3VsZAorICAgIGFsbG93IGZvciBhZGRpbmcga2V5d29yZHMgZnJvbSB0aGUgdGV4dCAoZS5nLiB2YXJpYWJsZXMgdGhhdCBhcmUgc2V0KS4KKyAgICBBbmQgYWxsb3dzIGZvciBzZWN0aW9ucyB3aXRoIGRpZmZlcmVudCBoaWdobGlnaHRpbmcuCis3ICAgQWRkIGhpZ2hsaWdodCBncm91cCBmb3IgY29tbWFuZGxpbmU6ICJDb21tYW5kbGluZSIuICBNYWtlIHN1cmUgaXQKKyAgICBoaWdobGlnaHRzIHRoZSBjb21tYW5kIGxpbmUgd2hpbGUgdHlwaW5nIGEgY29tbWFuZCwgYW5kIGFueSBvdXRwdXQgZnJvbQorICAgIG1lc3NhZ2VzLiAgQW5kIGV4dGVybmFsIGNvbW1hbmRzPworOCAgIE1ha2UgYSB2ZXJzaW9uIHRoYXQgd29ya3MgbGlrZSBsZXNzLCBidXQgd2l0aCBoaWdobGlnaHRpbmc6IHJlYWQgc3RkaW4gZm9yCisgICAgdGV4dCwgZXhpdCBhdCBlbmQgb2YgZmlsZSwgZG9uJ3QgYWxsb3cgZWRpdGluZywgZXRjLiAgbW9yZWltPyAgbGVzc2ltPworNyAgIFNwZWNpYWxLZXkgaGlnaGxpZ2h0aW5nIG92ZXJydWxlcyBzeW50YXggaGlnaGxpZ2h0aW5nLiAgQ2FuJ3QgZ2l2ZSBhbgorICAgIHVucHJpbnRhYmxlIGNoYXIgYW5vdGhlciBjb2xvci4gIFdvdWxkIGJlIHVzZWZ1bCBmb3IgXk0gYXQgZW5kIG9mIGxpbmUuCisKKworQnVpbHQtaW4gc2NyaXB0IGxhbmd1YWdlOgorOCAgIEFkZCByZWZlcnJpbmcgdG8ga2V5IG9wdGlvbnMgd2l0aCAiJnRfeHgiLiAgQm90aCBmb3IgImVjaG8gJnRfeHgiIGFuZAorICAgICI6bGV0ICZ0X3h4ID0iLiAgVXNlZnVsIGZvciBtYWtpbmcgcG9ydGFibGUgbWFwcGluZ3MuCis4ICAgQWxsb3cgcmFuZ2UgZm9yICI6ZXhlYyIuICBQYXNzIGl0IG9uIHRvIHRoZSBleGVjdXRlZCBjb21tYW5kLiAoV2ViYikKKzggICBleGlzdHMoIiYmb3B0aW9uIikgdGVzdHMgaWYgJ29wdGlvbicgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuICBVc2VmdWwgZm9yCisgICAgJ3NoZWxsc2xhc2gnLCBmb3IgZXhhbXBsZS4KKzcgICBCZSBhYmxlIHRvIGNhbGwgYSBmdW5jdGlvbiB3aGlsZSBwYXNzaW5nIG9uIGEgdmFyaWFibGUgbnVtYmVyIG9mCisgICAgYXJndW1lbnRzOgorCTpmdW5jdGlvbiBGb28oYWJjLCAuLi4pCisJOiAgY2FsbCBCYXIoYTphYmMsIGE6KikKKyAgICBDaGFybGVzIENhbXBiZWxsIGhhcyBhIHBhdGNoIGZvciB0aGlzCis4ICAgSGF2ZSBhIGxvb2sgYXQgVlNFTC4gIFdvdWxkIGl0IGJlIHVzZWZ1bCB0byBpbmNsdWRlPyAoQmlnaGFtKQorOCAgIEFkZCAiOmZ1bmdyb3VwIiBjb21tYW5kLCB0byBncm91cCBmdW5jdGlvbiBkZWZpbml0aW9ucyB0b2dldGhlci4gIFdoZW4KKyAgICBlbmNvdW50ZXJlZCwgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgZ3JvdXAgYXJlIHJlbW92ZWQuICBTdWdnZXN0IHVzaW5nIGFuCisgICAgb2JzY3VyZSBuYW1lIHRvIGF2b2lkIG5hbWUgY2xhc2hlcy4gIFJlcXVpcmUgYSAiOmZ1bmdyb3VwIEVORCIgaW4gdGhlIHNhbWUKKyAgICBzb3VyY2VkIGZpbGU/ICBBc3N1bWUgdGhlIGdyb3VwIGVuZHMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gIEhhbmRsZQorICAgIG5lc3RlZCBwYWNrYWdlcz8KKyAgICBBbHRlcm5hdGl2ZTogU3VwcG9ydCBwYWNrYWdlcy4gIHtwYWNrYWdlLW5hbWV9OntmdW5jdGlvbi1uYW1lfSgpLgorICAgIFBhY2thZ2VzIGFyZSBsb2FkZWQgYXV0b21hdGljYWxseSB3aGVuIGZpcnN0IHVzZWQsIGZyb20KKyAgICAkVklNUlVOVElNRS9wYWNrYWdlcyAob3IgdXNlIGEgc2VhcmNoIHBhdGgpLgorNyAgIE1ha2UgZ2xvYnBhdGgoKSBhbHNvIHdvcmsgd2l0aCAiKioiIGFuZCB1cHdhcmRzIHNlYXJjaC4gKEJyaWFuIE1lZGxleSkKKzcgICBQcmUtcGFyc2Ugb3IgY29tcGlsZSBWaW0gc2NyaXB0cyBpbnRvIGEgYnl0ZWNvZGUuCisgICAgMS4gUHV0IHRoZSBieXRlY29kZSB3aXRoIHRoZSBvcmlnaW5hbCBzY3JpcHQsIHdpdGggYW4gIjppZgorICAgICAgIGhhcygnYnl0ZWNvZGUnKSIgYXJvdW5kIGl0LCBzbyB0aGF0IGl0J3Mgb25seSB1c2VkIHdpdGggYSBWaW0gdGhhdAorICAgICAgIHN1cHBvcnRzIGl0LiAgVXBkYXRlIHRoZSBjb2RlIHdpdGggYSBjb21tYW5kLCBjYW4gYmUgdXNlZCBpbiBhbgorICAgICAgIGF1dG9jb21tYW5kLgorICAgIDIuIFVzZSBhICIudmljIiBmaWxlIChsaWtlIFB5dGhvbiB1c2UgLnB5YykuICBDcmVhdGUgaXQgd2hlbiB3cml0aW5nIGEKKyAgICAgICAudmltIGZpbGUuICBQcm9ibGVtOiBkaXN0cmlidXRpb24uCisgICAgMy4gVXNlIGEgY2FjaGUgZGlyZWN0b3J5IGZvciBlYWNoIHVzZXIuICBIb3cgdG8gcmVjb2duaXplIHdoaWNoIGNhY2hlZAorICAgICAgIGZpbGUgYmVsb25ncyB0byBhIHNvdXJjZWQgc2NyaXB0PworNyAgIEFkZCAibiIgZmxhZyB0byBzZWFyY2goKSBmdW5jdGlvbiwganVzdCBsaWtlIHNlYXJjaHBhaXIoKS4gKEFsZXhleQorICAgIE1hcmluaWNoZXYpCis4ICAgQWRkICI6biIgdG8gZm5hbWVtb2RpZnkoKTogbm9ybWFsaXplIHBhdGgsIHJlbW92ZSAiLi4vIiB3aGVuIHBvc3NpYmxlLgorICAgIEFyaWMgQmx1bWVyIGhhcyBhIHBhdGNoIGZvciB0aGlzLgorNyAgIEFkZCBhcmd1bWVudCB0byB3aW53aWR0aCgpIHRvIHN1YnRyYWN0IHRoZSBzcGFjZSB0YWtlbiBieSAnZm9sZGNvbHVtbicsCisgICAgc2lnbnMgYW5kL29yICdudW1iZXInLgorOCAgIEFkZCBmdW5jdGlvbnM6CisJbXVsdGlieXRlaWR4KHN0cmluZywgaWR4KSBCeXRlIGluZGV4IGluIG11bHRpLWJ5dGUgY2hhcmFjdGVyLgorCQkJCVBhdGNoIGJ5IElseWEgU2hlciwgMjAwNCBGZWIgMjUKKwltZW51cHJvcCh7bmFtZX0sIHtpZHh9LCB7d2hhdH0pCisJCQkJR2V0IG1lbnUgcHJvcGVydHkgb2YgbWVudSB7bmFtZX0gaXRlbSB7aWR4fS4KKwkJCQltZW51cHJvcCgiIiwgMSwgIm5hbWUiKSByZXR1cm5zICJGaWxlIi4KKwkJCQltZW51cHJvcCgiRmlsZSIsIDEsICJuIikgcmV0dXJucyAibm1lbnUKKwkJCQlGaWxlLk9wZW4uLi4iIGFyZ3VtZW50LgorCQkJCVBhdGNoIGJ5IElseWEgU2hlciwgMjAwNCBBcHIgMjIKKwltYXBuYW1lKHtpZHh9LCBtb2RlKQlyZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGlkeCd0aCBtYXBwaW5nLgorCQkJCVBhdGNoIGJ5IElseWEgU2hlciwgMjAwNCBNYXIgNC4KKwltYXRjaCh7cGF0fSwge3N0cmluZ30gWyxzdGFydF0gWyxjb3VudF0pIGdldCBpbmRleCBvZiBjb3VudCd0aCBtYXRjaAorCQkJCVBhdGNoIGJ5IElseWEgU2hlciwgMjAwNCBNYXIgMzEKKwlzcHJpbnRmKGZvcm1hdCwgYXJnLCAuLikgSG93IHRvIHByZXZlbnQgYSBjcmFzaD8/PworCW1vdXNleCgpIG1vdXNleSgpCWdldCBwb3NpdGlvbiBvZiBtb3VzZSBwb2ludGVyIChwYXRjaCBieSBSb3NzCisJCQkJUHJlc3NlcikKKwlhdHRyaWJ1dGVzKCkJCXJldHVybiBmaWxlIHByb3RlY3Rpb24gZmxhZ3MgImRyd3hyd3hyd3giCisJbWtkaXIoZGlyKQkJQ3JlYXRlIGRpcmVjdG9yeQorCWNvcHkoZnJvbSwgdG8pCQlDb3B5IGEgZmlsZQorCXBlcmwoY21kKQkJY2FsbCBQZXJsIGFuZCByZXR1cm4gc3RyaW5nCisJc2hvcnRlbihmbmFtZSkJCXNob3J0ZW4gYSBmaWxlIG5hbWUsIGxpa2UgaG9tZV9yZXBsYWNlKCkKKwlpbnB1dChwcm9tcHQsIGNvbXBsZXRlKQlsaWtlIGlucHV0KCkgYnV0IGRvIHNwZWNpZmllZCBjb21wbGV0aW9uCisJaW5wdXRybCgpCQlsaWtlIGlucHV0KCkgYnV0IHJpZ2h0LXRvLWxlZnQKKwl2aXJ0dWFsbW9kZSgpCQlhZGQgYXJndW1lbnQgdG8gb2J0YWluIHdoZXRoZXIgIiQiIHdhcyB1c2VkIGluCisJCQkJVmlzdWFsIGJsb2NrIG1vZGUuCisJdGFndHlwZSh0YWcpCQlnZXQgdHlwZSBvZiB0YWcgKGFsc28gY2hlY2tzIGlmIGl0IGV4aXN0cykKKwlnZXRhY3AoKQkJV2luMzI6IGdldCBjb2RlcGFnZSAoR2xlbm4gTWF5bmFyZCkKKwl0cihleHByLCBmcm9tLCB0bykJdHJhbnNsYXRlIGNoYXJzIChQYXRjaCBmcm9tIFJvbiBBYXJvbiwgQXByIDgKKwkJCQkyMDA0KQorCWZpbmQoKQkJCWZpbmQgZmlsZSBpbiAncGF0aCcgKHBhdGNoIGZyb20gSm9oYW5uZXMKKwkJCQlaZWxsbmVyIDIwMDEgRGVjIDIwKQorCXJlYWxuYW1lKCkJCUdldCB1c2VyIG5hbWUgKGZpcnN0LCBsYXN0LCBmdWxsKQorCQkJCXVzZXJfZnVsbG5hbWUoKSBwYXRjaCBieSBOaWtvbGFpIFdlaWJ1bGwsIE5vdgorCQkJCTMgMjAwMikKKwlnZXRmcGVybSgpCQlmaWxlIHBlcm1pc3Npb25zLCBpbiBmb3JtICJyd3hyd3hyd3giCisJCQkJKHBhdGNoIGZyb20gTmlrb2xhaSBXZWlidWxsIDIwMDMgSmFuIDEzKQorCWdldGZ0eXBlKCkJCSJmaWxlIiwgImRpciIsICJsaW5rIiwgIm90aGVyIj8KKwkJCQkocGF0Y2ggZnJvbSBOaWtvbGFpIFdlaWJ1bGwgMjAwMyBKYW4gMTMpCisJc2V0YnVmbGluZSgpCQlzZXQgbGluZSBpbiBhbnkgYnVmZmVyIChwYXRjaCBmcm9tIFllZ2FwcGFuCisJCQkJTGFrc2htYW5hbiwgMjAwMyBKYW4gMjEpCisJZ2V0YnVmbGluZSgpCQlnZXQgbGluZSBmcm9tIGFueSBidWZmZXIKKwlkZWxldGVidWZsaW5lKCkJCWRlbGV0ZSBsaW5lIGluIGFueSBidWZmZXIKKwlhcHBlbmRidWZsaW5lKCkJCWFwcGVuZCBsaW5lIGluIGFueSBidWZmZXIKKwl3aW5ucigiJCIpCQlHZXQgbnVtYmVyIG9mIHdpbmRvd3MuICAocGF0Y2ggZnJvbSBOaWtvbGFpCisJCQkJV2VpYnVsbCAyMDAzIEphbiAxMykgKGFub3RoZXIgcGF0Y2ggZnJvbQorCQkJCVllZ2FwcGFuIExha3NobWFuYW4sIDIwMDMgQXVnIDMxKQorCXNlYXJjaCgpCQlBZGQgb3B0aW9uYWwgb2Zmc2V0IGFyZ3VtZW50LgorCQkJCUFkZCAnbicgZmxhZy4gIChwYXRjaCBmcm9tIE5pa29sYWkgV2VpYnVsbAorCQkJCTIwMDMgSmFuIDEzKQorCXNvcnQoKQkJCVNvcnQgYSBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmcuICBBbHNvOgorCQkJCSI6c29ydCIuCisJbGliY2FsbCgpCQlBbGxvdyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LgorCWxpYmNhbGxleHQoKQkJTGlrZSBsaWJjYWxsKCksIGJ1dCB1c2luZyBhIGNhbGxiYWNrIGZ1bmN0aW9uCisJCQkJdG8gYWxsb3cgdGhlIGxpYnJhcnkgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgb3IKKwkJCQlldmFsdWF0ZSBhbiBleHByZXNzaW9uLgorCWNvbmZpcm0oKQkJYWRkICJmbGFncyIgYXJndW1lbnQsIHdpdGggJ3YnIGZvciB2ZXJ0aWNhbAorCQkJCWxheW91dCBhbmQgJ2MnIGZvciBjb25zb2xlIGRpYWxvZy4gKEhhZWdnKQorCQkJCUZsZW1taW5nIE1hZHNlbiBoYXMgYSBwYXRjaCBmb3IgdGhlICdjJyBmbGFnCisJCQkJKDIwMDMgTWF5IDEzKQorCXN5c3RlbSh7Y21kfSwge2V4cHJ9KQlGaWx0ZXIge2V4cHJ9IHRocm91Z2ggdGhlIHNoZWxsIGNvbW1hbmQKKwkJCQl7Y21kfSBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCisJCQkJKFBhdGNoIGZyb20gWWVnYXBwYW4gTGFrc2htYW5hbikKKwlyYWlzZXdpbigpCQlyYWlzZSBndmltIHdpbmRvdyAoc2VlIEhpZXJBc3Npc3QgcGF0Y2ggZm9yCisJCQkJVGNsIGltcGxlbWVudGF0aW9uIH4vdmltL0hpZXJBc3Npc3QvICkKKwlnZXR0ZXh0KCkJCVRyYW5zbGF0ZSBhIG1lc3NhZ2UuICAoUGF0Y2ggZnJvbSBZYXN1aGlybworCQkJCU1hdHN1bW90bykgSG93IHRvIGdldCB0aGUgbWVzc2FnZXMgaW50byB0aGUKKwkJCQkucG8gZmlsZXM/CisJc3RycmVwKCkJCVJlcGVhdCBhIHN0cmluZyAocGF0Y2ggZnJvbSBDaHJpc3RvcGhlIFBvdWNldCwKKwkJCQkyMDAzIFNlcCAxMiwgYWxzbyBjb250YWlucyBYWCkKKwljaGFyMmhleCgpCQljb252ZXJ0IGNoYXIgc3RyaW5nIHRvIGhleCBzdHJpbmcuICBYWAorCWhleDJjaGFyKCkJCWNvbnZlcnQgaGV4IHN0cmluZyB0byBjaGFyIHN0cmluZy4gWFgKKzcgICBNYWtlIGJ1Zm5hbWUoIicwIikgcmV0dXJuIHRoZSBidWZmZXIgbmFtZSBmcm9tIG1hcmsgJzAuICBIb3cgdG8gZ2V0IHRoZQorICAgIGNvbHVtbiBhbmQgbGluZSBudW1iZXI/ICBjb2woIicwIikgY3VycmVudGx5IHJldHVybnMgemVyby4KKzggICBhcmdjKCkgcmV0dXJucyAwIHdoZW4gdXNpbmcgInZpbSAtdCB0YWciLiAgSG93IHRvIGRldGVjdCB0aGF0IG5vIGZpbGUgd2FzCisgICAgc3BlY2lmaWVkIGluIGFueSB3YXk/ICBUbyBiZSBhYmxlIHRvIGp1bXAgdG8gdGhlIGxhc3QgZWRpdGVkIGZpbGUuCis4ICAgUGFzcyB0aGUgZXhlY3V0YWJsZSBuYW1lIHRvIHRoZSBWaW0gc2NyaXB0cyBpbiBzb21lIHdheS4gIEFzIHY6YXJndjA/Cis4ICAgQWRkIGNvbW1hbmQgYXJndW1lbnRzIHdpdGggdGhyZWUgZGFzaGVzLCBwYXNzZWQgb24gdG8gVmltIHNjcmlwdHMuCis4ICAgV2hlbiBzdGFydGluZyB0byBzb3VyY2UgYSB2aW0gc2NyaXB0LCBkZWxldGUgYWxsIGZ1bmN0aW9ucyB0aGF0IGl0IGhhcworICAgIHByZXZpb3VzbHkgZGVmaW5lZD8gIEF2b2lkcyB1c2luZyAiOmZ1biEiIGFsbCB0aGUgdGltZS4KKzcgICBBZGQgb3B0aW9uYWwgYXJndW1lbnRzIHRvIHVzZXIgZnVuY3Rpb25zOgorCTpmdW5jIG15RnVuYyhhcmcxLCBhcmcyLCBhcmczID0gImJsYWgiLCBhcmc0ID0gMTcpCis2ICAgVXNlciBmdW5jdGlvbnM6IEZ1bmN0aW9ucyBsb2NhbCB0byBidWZmZXIgImI6ZnVuYygpIj8KKzggICBBZGQgIjpsZXQgdmFyW3tleHByfV0gPSB7ZXhwcn0iLiAgV2hlbiBwYXN0IHRoZSBlbmQgb2YgInZhciIganVzdCBpZ25vcmUuCis4ICAgVGhlICI9IHJlZ2lzdGVyIHNob3VsZCBiZSB3cml0YWJsZSwgaWYgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSwKKyAgICBvcHRpb24gb3IgZW52aXJvbm1lbnQgdmFyaWFibGUuCis4ICAgIjpsZXQgJm9wdGlvbiIgc2hvdWxkIGxpc3QgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24uCis3ICAgQWRkIHN5bklEbGlzdCgpLCBtYWtpbmcgdGhlIHdob2xlIGxpc3Qgb2Ygc3ludGF4IGl0ZW1zIG9uIHRoZQorICAgIHN0YWNrIGF2YWlsYWJsZSAoc2VwYXJhdGVkIHdpdGggJ1xuJykuCis4ICAgQWRkIGF1dG9jb21tYW5kLWV2ZW50IGZvciB3aGVuIGEgdmFyaWFibGUgaXMgY2hhbmdlZDoKKwk6YXUgVmFyQ2hhbmdlZCB7dmFybmFtZX0ge2NvbW1hbmRzfQorOCAgIEFkZCAiaGFzKCJndWlfY2FwYWJsZSIpIiwgdG8gY2hlY2sgaWYgdGhlIEdVSSBjYW4gYmUgc3RhcnRlZC4KKzggICBBZGQgcG9zc2liaWxpdHkgdG8gdXNlIHZhcmlhYmxlcyBsaWtlIHJlZ2lzdGVyczogY2hhcmFjdGVyd2lzZSAoZGVmYXVsdCksCisgICAgbGluZXdpc2UgKHdoZW4gZW5kaW5nIGluICdcbicpLCBibG9ja3dpc2UgKHdoZW4gZW5kaW5nIGluICdcMDAxJykuCXJlZzAsCisgICAgcmVnYSwgcmVnJSwgZXRjLiAgQWRkIGZ1bmN0aW9ucyBsaW5ld2lzZSh7ZXhwcn0pLCBibG9ja3dpc2Uoe2V4cHJ9KSBhbmQKKyAgICBjaGFyd2lzZSh7ZXhwcn0pLgorNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gZG8gYW55IGNvbW1hbmQgb24gYSBzdHJpbmcgdmFyaWFibGUgKG1ha2UgYSBidWZmZXIKKyAgICB3aXRoIG9uZSBsaW5lLCBjb250YWluaW5nIHRoZSBzdHJpbmcpLiAgTWF5YmUgYWRkIGFuIChpbnZpc2libGUpIHNjcmF0Y2gKKyAgICBidWZmZXIgZm9yIHRoaXM/CisJcmVzdWx0ID0gc2NyYXRjaChzdHJpbmcsIGNvbW1hbmQpCisJcmVzdWx0ID0gYXBwbHkoc3RyaW5nLCBjb21tYW5kKQorCXJlc3VsdCA9IGV4ZWN1dGUoc3RyaW5nLCBjb21tYW5kKQorICAgICJjb21tYW5kIiB3b3VsZCB1c2UgPD4gbm90YXRpb24uCisgICAgRG9lcyBzY3JhdGNoIGJ1ZmZlciBoYXZlIGEgbnVtYmVyPyAgT3IgcmUtdXNlIHNhbWUgbnVtYmVyPworNyAgIEFkZCBmdW5jdGlvbiB0byBnZW5lcmF0ZSB1bmlxdWUgbnVtYmVyIChkYXRlIGluIG1pbGxpc2Vjb25kcykuCis3ICAgQXV0b21hdGljYWxseSBsb2FkIGEgZnVuY3Rpb24gZnJvbSBhIGZpbGUgd2hlbiBpdCBpcyBjYWxsZWQuICBOZWVkIGFuCisgICAgb3B0aW9uIGZvciB0aGUgc2VhcmNoIHBhdGguIChTZWtlcmEpCis3ICAgUGVyc2lzdGVudCB2YXJpYWJsZXM6ICJwOnZhciI7IHN0b3JlZCBpbiB2aW1pbmZvIGZpbGUgYW5kIHNlc3Npb25zIGZpbGVzLgorNyAgIEluY2x1ZGUgc3VwcG9ydCBmb3IgYXJyYXlzPyAgUGF0Y2ggZnJvbSBSb2JlcnQgV2ViYi4KKyAgICBUaGlzIGlzIHJlc3RyaWN0ZWQgdG8gZml4ZWQtc2l6ZSBhcnJheXMgaW5kZXhlZCBieSBudW1iZXIuICBCZXR0ZXI6IFVzZQorICAgIGFzc29jaWF0aXZlIGFycmF5czogYVs1XSA9IDMsIGFbInNvbWUiXSA9ICd4Jy4gSW1wbGVtZW50IGJ5IHRyYW5zbGF0aW5nCisgICAgaW50byBvcmRpbmFyeSB2YXJpYWJsZXM6IGFbNV0gaXMgIi1hLTUiLCBhWyJzb21lIl0gaXMgImEtc29tZSIsIGFbNV1bNl0gaXMKKyAgICAiYS01LTYiLiAgQnV0IGhvdyB0byBkbyBhcnJheSBhc3NpZ25tZW50IGFuZCBjb25jYXRlbmF0aW9uPworICAgIEFsdGVybmF0aXZlOiB1c2UgZGljdGlvbmFyaWVzLCBsaWtlIFB5dGhvbi4KKworCitSb2J1c3RuZXNzOgorOCAgIFRoaXMgcGF0dGVybiBpbiBzeW50YXgvamF2YS52aW0gY2F1c2VzIGEgcmVjdXJzaXZlIGNhbGwgb2YgcmVnbWF0Y2goKToKKwlzeW4gbWF0Y2ggICBqYXZhU3RyaW5nRXJyb3IgICAgICArIlwoW14iXFxdXHxcXC5cKSokKworICAgIEEgbG9uZyBsaW5lIHdpdGggYSAiIGluIGl0IGNhbiBjYXVzZSBhIGNyYXNoIHdoZW4gaXQgcnVucyBvdXQgb2Ygc3RhY2sKKyAgICBzcGFjZSAob24gc3lzdGVtcyB3aGVyZSB0aGlzIGlzbid0IGNhdWdodCkuICBIb3cgY2FuIHdlIGNhdGNoIHRoaXMgZm9yCisgICAgbW9yZSBzeXN0ZW1zPworCisKK1BlcmZvcm1hbmNlOgorOCAgIExvYWRpbmcgcGx1Z2lucyB0YWtlcyBzdGFydHVwIHRpbWUuICBPbmx5IGxvYWQgdGhlIHBhcnQgdGhhdCBpcyB1c2VkIHRvCisgICAgdHJpZ2dlciB0aGUgcmVzdCwgYW5kIGxvYWQgdGhlIHJlc3Qgd2hlbiBpdCdzIG5lZWRlZD8KKzggICBUdXJuIGJfc3luX2ljIGFuZCBiX3N5bl9jb250YWluZWRpbiBpbnRvIGJfc3luX2ZsYWdzLgorOSAgIExvYWRpbmcgbWVudS52aW0gc3RpbGwgdGFrZXMgcXVpdGUgYSBiaXQgb2YgdGltZS4gIEhvdyB0byBtYWtlIGl0IGZhc3Rlcj8KKzggICBpbl9pZF9saXN0KCkgdGFrZXMgbXVjaCB0aW1lIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nLiAgQ2FjaGUgdGhlIHJlc3VsdD8KKzcgICBzZXRwY21hcmsoKSBzaGlmdHMgdGhlIGp1bXBsaXN0LCB0aGlzIHRha2VzIHF1aXRlIGEgYml0IG9mIHRpbWUgd2hlbgorICAgIGp1bXBpbmcgYXJvdW5kLiAgSW5zdGVhZCB1c2UgYW4gaW5kZXggZm9yIHRoZSBzdGFydD8KKzggICBXaGVuIGRpc3BsYXlpbmcgYSBzcGFjZSB3aXRoIG9ubHkgZm9yZWdyb3VuZCBoaWdobGlnaHRpbmcsIGl0J3MgdGhlIHNhbWUKKyAgICBhcyBhIHNwYWNlIHdpdGhvdXQgYXR0cmlidXRlcy4gIEF2b2lkIGRpc3BsYXlpbmcgc3BhY2VzIGZvciB0aGUgIn4iIGxpbmVzCisgICAgd2hlbiBzdGFydGluZyB1cCBpbiBhIGNvbG9yIHRlcm1pbmFsLgorOCAgIEF2b2lkIGFsbG9jKCkgZm9yIHNjcmF0Y2ggYnVmZmVyIHVzZSwgZXNwLiBpbiBzeW50YXguYy4gIEl0J3MgdmVyeSBzbG93IG9uCisgICAgV2luMTYuCis5ICAgU2V0dGluZyBHVUkgb3B0aW9ucyBpbiB0aGUgY29uc29sZSAoZS5nLiwgJ2d1aWZvbnQnKSBzaG91bGQgbm90IGNhdXNlIGEKKyAgICByZWRyYXcuCis4ICAgUHJvZmlsaW5nIHNob3dzIHRoYXQgaW5faWRfbGlzdCgpIGlzIHVzZWQgdmVyeSBvZnRlbiBmb3IgQyBjb2RlLiAgQ2FuIHRoaXMKKyAgICBmdW5jdGlvbiBiZSBpbXByb3ZlZD8KKzggICBGb3IgYW4gZXhpc3RpbmcgZmlsZSwgdGhlIHBhZ2Ugc2l6ZSBvZiB0aGUgc3dhcCBmaWxlIGlzIGFsd2F5cyB0aGUKKyAgICBkZWZhdWx0LCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBibG9jayBzaXplIG9mIHRoZSBkZXZpY2UsIGJlY2F1c2UgdGhlIHN3YXAKKyAgICBmaWxlIGlzIGNyZWF0ZWQgb25seSBhZnRlciBzZXR0aW5nIHRoZSBibG9jayBzaXplIGluIG1mX29wZW4oKS4gIEhvdyBjYW4KKyAgICB0aGlzIGJlIGltcHJvdmVkPworOCAgIFNldCBkZWZhdWx0IGZvciAndHR5c2Nyb2xsJyB0byBoYWxmIGEgc2NyZWVuIGhlaWdodD8gIFNob3VsZCBzcGVlZCB1cAorICAgIE1TLURPUyB2ZXJzaW9uLiAoTmVncmkpCis3ICAgQyBzeW50YXggaGlnaGxpZ2h0aW5nIGdldHMgYSBsb3Qgc2xvd2VyIHdoZW4gYWRkaW5nIGEgcmVnaW9uIGZvciBmb2xkaW5nCisgICAgZnJvbSB7IHRvIH0uIChDaGFybGVzIENhbXBiZWxsKSAgSW5zZXJ0aW5nIGEgInsiIGlzIHZlcnkgc2xvdy4gKGRtYW4pCis3ICAgSFRNTCBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIHNsb3cgZm9yIGxvbmcgbGluZXMuICBUcnkgZGlzcGxheWluZworICAgIGh0dHA6Ly93d3cudGhlcmVnaXN0ZXIuY28udWsvY29udGVudC80LzIyOTA4Lmh0bWwuIChBbmRyZSBQYW5nKQorNyAgIENoZWNrIGhvdyBwZXJmb3JtYW5jZSBvZiBsb2FkaW5nIHRoZSB3b3JkbGlzdCBjYW4gYmUgaW1wcm92ZWQgKGFkZGluZyBhCisgICAgbG90IG9mIGFiYnJldmlhdGlvbnMpLgorNyAgIERPUyBjb25zb2xlOiBBZGQgdF9ETCBzdXBwb3J0LCB0byBtYWtlIHNjcm9sbGluZyBmYXN0ZXIuCis3ICAgQ29tcGlsZSBFeCBjb21tYW5kcyB0byBieXRlIGNvZGVzLiAgU3RvcmUgYnl0ZSBjb2RlcyBpbiBhIHZpbSBzY3JpcHQgZmlsZQorICAgIGF0IHRoZSBlbmQsIGFmdGVyICJjb21waWxlZDouICBNYWtlIGl0IGxvb2sgbGlrZSBhIHNpbmdsZSBjb21tZW50IGxpbmUKKyAgICBmb3Igb2xkIFZpbSB2ZXJzaW9ucy4gIEluc2VydCBmaXJzdCBsaW5lICJWaW0gc2NyaXB0IGNvbXBpbGVkIDx0aW1lc3RhbXA+LgorICAgIE9ubHkgdXNlZCBjb21waWxlZCBjb2RlIHdoZW4gdGltZXN0YW1wIG1hdGNoZXMgdGhlIGZpbGUgc3RhdC4KKyAgICBBZGQgY29tbWFuZCB0byBjb21waWxlIGEgdmltIHNjcmlwdCBhbmQgYWRkIGl0IHRvIHRoZSBmaWxlIGluLXBsYWNlLgorICAgIFNwbGl0IEV4IGNvbW1hbmQgZXhlY3V0aW5nIGludG8gYSBwYXJzaW5nIGFuZCBleGVjdXRpbmcgcGhhc2UuCisgICAgVXNlIGNvbXBpbGVkIGNvZGUgZm9yIGZ1bmN0aW9ucywgd2hpbGUgbG9vcHMsIGV0Yy4KKzggICBXaGVuIGVkaXRpbmcgYSBmaWxlIHdpdGggZXh0cmVtZWx5IGxvbmcgbGluZXMgKGUuZy4sIGFuIGV4ZWN1dGFibGUpLCB0aGUKKyAgICAibGluZXJlc3QiIGluIHJlYWRmaWxlKCkgaXMgYWxsb2NhdGVkIHR3aWNlIHRvIGJlIGFibGUgdG8gY29weSB3aGF0IHdhcworICAgIHJlYWQgc28gZmFyLiAgVXNlIHJlYWxsb2MoKSBpbnN0ZWFkPyAgT3Igc3BsaXQgdGhlIGxpbmUgd2hlbiBhbGxvY2F0aW5nCisgICAgbWVtb3J5IGZhaWxzIGFuZCAibGluZXJlc3QiIGlzIGJpZyAoPiAxMDAwMDApPworOCAgIFdoZW4gZGVmaW5pbmcgYXV0b2NvbW1hbmRzIChlLmcuLCBmcm9tICRWSU1SVU5USU1FL2ZpbGV0eXBlLnZpbSksIG5lZWQgdG8KKyAgICBjb21wYXJlIGVhY2ggcGF0dGVybiB3aXRoIGFsbCBleGlzdGluZyBwYXR0ZXJucy4gIFVzZSBhIGhhc2ggY29kZSB0byBhdm9pZAorICAgIHVzaW5nIHN0cmNtcCgpIHRvbyBvZnRlbj8KKzcgICBJbmNsdWRlIHR1cmJvX2xvYWRlciBwYXRjaGVzLCBzcGVlZGluZyB1cCByZWFkaW5nIGEgZmlsZT8KKyAgICBTcGVlZCB1cCByZWFkaW5nIGEgZmlsZSBieSByZWFkaW5nIGl0IGludG8gYSBmaXhlZC1zaXplIGJ1ZmZlciwgY3JlYXRpbmcKKyAgICB0aGUgbGlzdCBvZiBpbmRleGVzIGluIGFub3RoZXIgYnVmZmVyLCBhbmQgdGhlbiBjb3B5aW5nIHRoZSByZXN1bHQgaW50byBhCisgICAgbWVtZmlsZSBibG9jayB3aXRoIHR3byBjb3BpZXMuICBUaGVuIHJlYWQgdGhlIG5leHQgYmxvY2sgaW50byBhbm90aGVyCisgICAgZml4ZWQtc2l6ZSBidWZmZXIsIGNyZWF0ZSB0aGUgc2Vjb25kIGxpc3Qgb2YgaW5kZXhlcyBhbmQgY29weSB0ZXh0IGZyb20KKyAgICB0aGUgdHdvIGJsb2NrcyB0byB0aGUgbWVtZmlsZSBibG9jay4KKzcgICBkb19jbWRsaW5lKCk6IEF2b2lkIHRoYXQgdGhlIGNvbW1hbmQgbGluZSBpcyBjb3BpZWQgdG8gYWxsb2NhdGVkIG1lbW9yeQorICAgIGFuZCBmcmVlZCBhZ2FpbiBsYXRlciBhbGwgdGhlIHRpbWUuICBGb3Igd2hpbGUgbG9vcHMsIGFuZCBmb3Igd2hlbiBjYWxsZWQKKyAgICB3aXRoIGFuIGFyZ3VtZW50IHRoYXQgY2FuIGJlIG1lc3NlZCB3aXRoLgorICAgIEdlbmVyaWMgc29sdXRpb246IE1ha2UgYSBzdHJ1Y3QgdGhhdCBjb250YWlucyBhIHBvaW50ZXIgYW5kIGEgZmxhZyB0aGF0CisgICAgaW5kaWNhdGVzIGlmIHRoZSBwb2ludGVyIHNob3VsZCBiZSBmcmVlZCB3aGVuIHJlcGxhY2VkLgorNyAgIENoZWNrIHRoYXQgdGhlIGZpbGUgc2l6ZSBpcyBub3QgbW9yZSB0aGFuICJzaXplb2YobG9uZykiLgorLSAgIEZ1cnRoZXIgaW1wcm92ZSBmaW5kaW5nIG1hcHBpbmdzIGluIG1hcGhhc2hbXSBpbiB2Z2V0b3JwZWVrKCkKKzggICBTeW50YXggaGlnaGxpZ2h0aW5nIGlzIHNsb3cgd2hlbiBkZWxldGluZyBsaW5lcy4gIFRyeSBpbgorICAgICRWSU1SVU5USU1FL2ZpbGV0eXBlLnZpbS4KKy0gICAib3V0IG9mIG1lbW9yeSIgYWZ0ZXIgZGVsZXRpbmcgKDEsJGQpIGFuZCBjaGFuZ2luZyAoOiVzL14vPiAvKSBhIGxvdCBvZgorICAgIGxpbmVzICgyNzAwMCkgYSBmZXcgdGltZXMuICBNZW1vcnkgZnJhZ21lbnRhdGlvbj8KKy0gICBIYXZlIGEgbG9vayBhdCBob3cgcGRrc2ggZG9lcyBtZW1vcnkgYWxsb2NhdGlvbiAoYWxsb2MuYykuIChEYWxlY2tpKQorLSAgIERvIHByb2ZpbGluZyBvbjoKKyAgICAtIDpnL3BhdC9ub3JtYWwgY21kCisgICAgLSAxMDAwaWk8RXNjPgorICAgIC0gZGVsZXRpbmcgMTBNYnl0ZSB3b3J0aCBvZiBsaW5lcyAobmV0c2NhcGUgYmluYXJ5KQorICAgIC0gIltpIiBhbmQgIltkIiAoWWVnYXBwYW4gTGFrc2htYW5hbikKKyAgICAtICI6Zy9eL20wIiBvbiBhIDQ1MEtieXRlIGZpbGUuICBBbmQgdGhlICJ1Ii4KKyAgICAtIGhpZ2hsaWdodGluZyAifi92aW0vdGVzdC9sb25nbGluZS50ZXgiLCAifi92aW0vdGVzdC9zY3dvb3AudGNsIiBhbmQKKyAgICAgICJ+L3ZpbS90ZXN0L2xvY2t1cC5wbCIuCisgICAgLSBsb2FkaW5nIGEgc3ludGF4IGZpbGUgdG8gaGlnaGxpZ2h0IGFsbCB3b3JkcyBub3QgZnJvbSBhIGRpY3Rpb25hcnkuCisgICAgLSBlZGl0aW5nIGEgdmltIHNjcmlwdCB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgb24gKGxvYWRpbmcgdmltLnZpbSkuCis3ICAgU2NyZWVuIHVwZGF0aW5nIGNhbiBiZSBmdXJ0aGVyIGltcHJvdmVkIGJ5IG9ubHkgcmVkcmF3aW5nIGxpbmVzIHRoYXQgd2VyZQorICAgIGNoYW5nZWQgKGFuZCBsaW5lcyBhZnRlciB0aGVtLCB3aGVuIHN5bnRheCBoaWdobGlnaHRpbmcgd2FzIHVzZWQsIGFuZCBpdAorICAgIGNoYW5nZWQpLgorICAgIC0gT24gZWFjaCBjaGFuZ2UsIHJlbWVtYmVyIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGNoYW5nZS4KKyAgICAtIFdoZW4gaW5zZXJ0aW5nL2RlbGV0aW5nIGxpbmVzLCByZW1lbWJlciBiZWdpbiwgZW5kLCBhbmQgbGluZSBjb3VudC4KKy0gICBVc2UgbWFjcm9zL2R1YXJ0ZS9jYXBpY3VhIGZvciBwcm9maWxpbmcuICBOdmkgMS43MSBpcyB0aGUgZmFzdGVzdCEKKy0gICBXaGVuIHVzaW5nIGEgZmlsZSB3aXRoIG9uZSBsb25nIGxpbmUgKDFNYnl0ZSksIHRoZW4gZG8gIiRoaGhoIiwgaXMgc3RpbGwKKyAgICB2ZXJ5IHNsb3cuICBBdm9pZCBjYWxsaW5nIGdldHZjb2woKSBmb3IgZWFjaCAiaCI/CistICAgRXhlY3V0aW5nIGEgcmVnaXN0ZXIsIGUuZy4gIjEwMDAwQEAiIGlzIHNsb3csIGJlY2F1c2UgaW5zX3R5cGVidWYgaGFzIHRvCisgICAgbW92ZSB0aGUgcHJldmlvdXMgY29tbWFuZHMgZm9yd2FyZCBlYWNoIHRpbWUuICBQYXNzIGNvdW50IGZyb20KKyAgICBub3JtYWxfY21kKCkgZG93biB0byBkb19leGVjcmVnKCkuCistICAgUmVwZWF0aW5nIGluc2VydCAiMTAwMGktPEVzYz4iIGRpc3BsYXlzIC0tSU5TRVJULS0gYWxsIHRoZSB0aW1lLCBiZWNhdXNlIG9mCisgICAgdGhlIDxFc2M+IGF0IHRoZSBlbmQuICBNYWtlIHRoaXMgd29yayBmYXN0ZXIgKGRpc2FibGUgcmVkcmF3aW5nKS4KKy0gICBBdm9pZCBjYWxscyB0byBwbGluZXMoKSBmb3IgY3Vyc29yIGxpbmUsIHVzZSB3X2NsaW5lX2hlaWdodC4KKy0gICBBZnRlciAiOnNldCBub3dyYXAiIHJlbW92ZSBzdXBlcmZsdW91cyByZWRyYXcgd2l0aCB3cm9uZyBob3IuIG9mZnNldCBpZgorICAgIGN1cnNvciBpcyByaWdodCBvZiB0aGUgc2NyZWVuLgorOCAgIE1ha2UgQ1RSTC1DIG9uIFVuaXggZ2VuZXJhdGUgYSBzaWduYWwsIGF2b2lkIHVzaW5nIHNlbGVjdCgpIHRvIGNoZWNrIGZvciBhCisgICAgQ1RSTC1DIChpdCdzIHNsb3cpLgorCisKK0NvZGUgc2l6ZToKKzggICBHVUk6IFdoZW4gTk9fQ09OU09MRSBpcyBkZWZpbmVkLCBtb3JlIGNvZGUgY2FuIGJlIGV4Y2x1ZGVkLgorLSAgIFB1dCBnZXRsaW5lKCkgYW5kIGNvb2tpZSBpbiBhIHN0cnVjdCwgc28gb25seSBvbmUgYXJndW1lbnQgaGFzIHRvIGJlCisgICAgcGFzc2VkIHRvIGRvX2NtZGxpbmUoKSBhbmQgb3RoZXIgZnVuY3Rpb25zLgorOCAgIE1ha2UgYSBHVUktb25seSB2ZXJzaW9uIGZvciBVbml4PworOCAgIEluIGJ1Zl93cml0ZSBfKCkgaXNuJ3QgbmVlZGVkIHdoZW4gc2V0dGluZyBlcnJtc2csIGRvIGl0IG9uY2Ugd2hlbiB1c2luZworICAgIGl0LgorNyAgIFdoZW4gY29tcGlsaW5nIHdpdGggYSBHVUktb25seSB2ZXJzaW9uLCB0aGUgY29kZSBmb3IgY3Rlcm0gY29sb3JzIGNhbiBiZQorICAgIGxlZnQgb3V0LgorOCAgIFdoZW4gY29tcGlsZWQgd2l0aCBhIEdVSS1vbmx5IHZlcnNpb24sIHRoZSB0ZXJtY2FwIGVudHJpZXMgZm9yIHRlcm1pbmFscworICAgIGNhbiBiZSByZW1vdmVkLgorOCAgIENhbiB0aGUgY2hlY2sgZm9yIGxpYmVsZiBpbiBjb25maWd1cmUuaW4gYmUgcmVtb3ZlZD8KKworCitNZXNzYWdlczoKKzggICBXaGVuIHVzaW5nICI6cSIgaW4gYSBjaGFuZ2VkIGZpbGUsIHRoZSBlcnJvciBzYXlzIHRvICJhZGQgISIuICBBZGQgdGhlCisgICAgY29tbWFuZCBzbyB0aGF0IGJlZ2lubmVycyB1bmRlcnN0YW5kIGl0OiAidXNlIDpxISIuCis4ICAgRm9yICd2ZXJib3NlJyBsZXZlbCAxMiBwcmludHMgY29tbWFuZHMgZnJvbSBzb3VyY2UnZWQgZmlsZXMuICBIb3cgdG8gc2tpcAorICAgIGxpbmVzIHRoYXQgYXJlbid0IGV4ZWN1dGVkPyAgUGVyaGFwcyBtb3ZlIHRoZSBlY2hvaW5nIHRvIGRvX2NtZGxpbmUoKT8KKzggICBVc2UgJ3JlcG9ydCcgZm9yICI6YmRlbCI/ICAoS3Jpc2huYSkgIFRvIGF2b2lkIHRoZXNlIG1lc3NhZ2VzIHdoZW4gdXNpbmcgYQorICAgIHNjcmlwdC4KKzggICAidmltIC0tdmVyc2lvbiIgb3V0cHV0IGdvZXMgdG8gc3RkZXJyLCBzaG91bGQgYmUgc3Rkb3V0LiAgQ2FuIGFsbCBvdXRwdXQKKyAgICBmcm9tIG1lc3NhZ2VzIHVzaW5nIHByaW50ZigpIGdvIHRvIHN0ZG91dD8KKy0gICBEZWxldGUgbWVzc2FnZSBhZnRlciBuZXcgY29tbWFuZCBoYXMgYmVlbiBlbnRlcmVkIGFuZCBoYXZlIHdhaXRlZCBmb3Iga2V5LgorICAgIFBlcmhhcHMgYWZ0ZXIgdGVuIHNlY29uZHM/CistICAgTWFrZSBtZXNzYWdlIGhpc3RvcnkgYXZhaWxhYmxlIGluICJtc2ciIHZhcmlhYmxlczogbXNnMSwgbXNnMiwgLi4gbXNnOS4KKzkgICBDaGVjayBoYW5kbGluZyBvZiBvdmVyd3JpdGluZyBvZiBtZXNzYWdlcyBhbmQgZGVsYXlzOgorICAgIFZlcnkgd3Jvbmc6IGVycm9ycyB3aGlsZSByZWRyYXdpbmcgY2F1c2UgZW5kbGVzcyBsb29wLgorICAgIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgZmlsZSBhbmQgc2NyZWVuIHNjcm9sbHMgYmVjYXVzZSBvZiB0aGUgbG9uZworICAgIG1lc3NhZ2UgYW5kIHJldHVybiBtdXN0IGJlIHR5cGVkLCBkb24ndCBzY3JvbGwgdGhlIHNjcmVlbiBiYWNrIGJlZm9yZQorICAgIHJlZHJhd2luZy4KKzcgICBBZGQgYW4gb3B0aW9uLCB3aGljaCBpcyBhIHJlZ2V4cCwgdGhhdCBkaXNhYmxlcyB3YXJuaW5nIG1lc3NhZ2VzIHdoaWNoCisgICAgbWF0Y2ggdGhhdCByZWdleHAgKFRzaXJraW4pLgorOCAgIFdoZW4gYWRkcmVzcyByYW5nZSBpcyB3cm9uZyB5b3Ugb25seSBnZXQgIkludmFsaWQgcmFuZ2UiLiAgQmUgYSBiaXQgbW9yZQorICAgIHNwZWNpZmljOiBOZWdhdGl2ZSwgYmV5b25kIGxhc3QgbGluZSwgcmV2ZXJzZSByYW5nZT8gIEluY2x1ZGUgdGhlIHRleHQuCis4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBpZ25vcmUgZXJyb3JzIGZvciBhIG1vbWVudCAoJ2Vycm9yaWdub3JlJz8pLiAgQW5vdGhlcgorICAgIG9wdGlvbiB0byBzd2l0Y2ggb2ZmIGdpdmluZyBlcnJvciBtZXNzYWdlcyAoJ2Vycm9ycXVpZXQnPykuICBBbHNvIGFuIG9wdGlvbgorICAgIG5vdCB0byBnaXZlIGFueSBtZXNzYWdlcyAoJ3F1aWV0Jyk/ICBPciAiOnF1aWV0IG9uIiwgIjpxdWlldCBvZmYiLgorICAgIENhcmVmdWw6IEZvciBhIHNldmVyZSBlcnJvciAob3V0IG9mIG1lbW9yeSksIGFuZCB3aGVuIHRoZSB1c2VyIHN0YXJ0cworICAgIHR5cGluZywgZXJyb3IgbWVzc2FnZXMgbXVzdCBiZSBzd2l0Y2hlZCBiYWNrIG9uLgorICAgIEFsc28gYSBmbGFnIHRvIGlnbm9yZSBlcnJvciBtZXNzYWdlcyBmb3Igc2hlbGwgY29tbWFuZHMgKGZvciBtYXBwaW5ncykuCistICAgT3B0aW9uIHRvIHNldCB0aW1lIGZvciBlbXNnKCkgc2xlZXAuIEludGVycnVwdCBzbGVlcCB3aGVuIGtleSBpcyB0eXBlZD8KKyAgICBzbGVlcCBiZWZvcmUgc2Vjb25kIG1lc3NhZ2U/Cis4ICAgSW4gRXggc2lsZW50IG1vZGUgb3Igd2hlbiByZWFkaW5nIGNvbW1hbmRzIGZyb20gYSBmaWxlLCB3aGF0IGV4YWN0bHkgaXMKKyAgICBub3QgcHJpbnRlZCBhbmQgd2hhdCBpcz8gIENoZWNrICI6cHJpbnQiLCAiOnNldCBhbGwiLCAiOmFyZ3MiLCAiOnZlcnMiLAorICAgIGV0Yy4gIEF0IGxlYXN0IHRoZXJlIHNob3VsZCBiZSBubyBwcm9tcHQuIChTbXVsZGVycykgIEFuZCBkb24ndCBjbGVhciB0aGUKKyAgICBzY3JlZW4gd2hlbiByZWFkaW5nIGNvbW1hbmRzIGZyb20gc3RkaW4uIChLZW5kYWxsKQorICAgIC0tPiBNYWtlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGluZm9ybWF0aXZlIG1lc3NhZ2VzLCBwcm9tcHRzLCBldGMuIGFuZAorCWVycm9yIG1lc3NhZ2VzLCBwcmludGluZyB0ZXh0LCBldGMuCis4ICAgV2luZG93IHNob3VsZCBiZSByZWRyYXduIHdoZW4gcmVzaXppbmcgYXQgdGhlIGhpdC1lbnRlciBwcm9tcHQuCisgICAgQWxzbyBhdCB0aGUgIjp0c2VsZWN0IiBwcm9tcHQuICBGaW5kIGEgZ2VuZXJpYyBzb2x1dGlvbiBmb3IgcmVkcmF3aW5nIHdoZW4KKyAgICBhIHByb21wdCBpcyBwcmVzZW50ICh3aXRoIGEgY2FsbGJhY2sgZnVuY3Rpb24/KS4KKworCitTY3JlZW4gdXBkYXRpbmc6Cis3ICAgQWRkIGEgc3RyaW5nIHRvIHRoZSAnZGlzcGxheScgb3B0aW9uIHRvIG1ha2UgQ1RSTC1FIGFuZCBDVFJMLVkgc2Nyb2xsIG9uZQorICAgIHNjcmVlbiBsaW5lLCBhbHNvIGlmIHRoaXMgbWVhbnMgdGhlIGZpcnN0IGxpbmUgZG9lc24ndCBzdGFydCB3aXRoIHRoZQorICAgIGZpcnN0IGNoYXJhY3RlciAobGlrZSB3aGF0IGhhcHBlbnMgd2l0aCBhIHNpbmdsZSBsaW5lIHRoYXQgZG9lc24ndCBmaXQpLgorLSAgIHNjcmVlbl9saW5lKCk6CisgICAgLSBpbnNlcnQvZGVsZXRlIGNoYXJhY3RlciBzdHVmZi4KKyAgICAtIGltcHJvdmUgZGVsZXRlIHJlc3Qgb2YgbGluZSAoc3BhY2VzIGF0IGVuZCBvZiBsaW5lKS4KKy0gICBXaGVuIG1vdmluZyBvciByZXNpemluZyB3aW5kb3csIHRyeSB0byBhdm9pZCBhIGNvbXBsZXRlIHJlZHJhdyAoZXNwLiB3aGVuCisgICAgZHJhZ2dpbmcgdGhlIHN0YXR1cyBsaW5lIHdpdGggdGhlIG1vdXNlKS4KKy0gICBXaGVuICdsYXp5cmVkcmF3JyBzZXQsIGRvbid0IGVjaG8gOmV4IGNvbW1hbmRzPyAgTmVlZCBhIGZsYWcgdG8gcmVkcmF3IHdoZW4KKyAgICB3YWl0aW5nIGZvciBhIGNoYXJhY3Rlci4KKzggICBBZGQgYSAiOnJlZnJlc2ggW3dpbm5yXSIgY29tbWFuZCwgdG8gZm9yY2UgdXBkYXRpbmcgYSB3aW5kb3cuICBVc2VmdWwgZnJvbQorICAgIGFuIGV2ZW50IGhhbmRsZXIgd2hlcmUgIjpub3JtYWwiIGNhbid0IGJlIHVzZWQuICBBbHNvIHVzZWZ1bCB3aGVuCisgICAgJ2xhenlyZWRyYXcnIGlzIHNldCBpbiBhIG1hcHBpbmcuCis3ICAgTWFrZSAnbGlzdCcgYW5kICdsaW5lYnJlYWsnIHdvcmsgdG9nZXRoZXIuCis3ICAgQWRkICJuYnNwIiBpbiAnbGlzdGNoYXJzJz8gIFBhdGNoIGZyb20gRGF2aWQgQmxhbmNoZXQsIDIwMDMgSnVsIDI4LgorCisKK1Njcm9sbGluZzoKKzggICBBZGQgInptIiBjb21tYW5kOiBzY3JvbGwgaG9yaXpvbnRhbGx5IHRvIHB1dCB0aGUgY3Vyc29yIGluIHRoZSBtaWRkbGUuCis2ICAgQWRkIG9wdGlvbiB0byBzZXQgdGhlIG92ZXJsYXAgZm9yIENUUkwtRiBhbmQgQ1RSTC1CLiAoR2FyaGkpCistICAgZXh0ZW5kICdzY3JvbGxiaW5kJyBvcHRpb246ICdzY3JvbGxvcHQnIHdvcmRzICJzZWFyY2giLCAicmVsYXRpdmUiLCBldGMuLgorICAgIEFsc28gJ2UneGVjdXRlIHNvbWUgY29tbWFuZHMgKHNlYXJjaCwgdmVydGljYWwgbW92ZW1lbnRzKSBpbiBhbGwgYm91bmQKKyAgICB3aW5kb3dzLgorNyAgIEFkZCAnc2Nyb2xsYmluZCcgZmVhdHVyZSB0byBtYWtlIHRoZSBvZmZzZXQgb2Ygb25lIHdpbmRvdyB3aXRoIHRoZSBuZXh0CisgICAgb25lIGVxdWFsIHRvIHRoZSB3aW5kb3cgaGVpZ2h0LiAgV2hlbiBlZGl0aW5nIG9uZSBmaWxlIGluIGJvdGggd2luZG93cyBpdAorICAgIGxvb2tzIGxpa2UgZWFjaCB3aW5kb3cgZGlzcGxheXMgYSBwYWdlIG9mIHRoZSBidWZmZXIuCistICAgQWxsb3cgc2Nyb2xsaW5nIGJ5IGRyYWdnaW5nIHdpdGggdGhlIG1vdXNlIChncmFiIGEgY2hhcmFjdGVyIGFuZCBtb3ZlIGl0CisgICAgdXAvZG93bikuICBMaWtlIHRoZSAiaGFuZCIgaW4gQWNyb2JhdCByZWFkZXIuICBVc2UgQWx0LUxlZnRNb3VzZSBmb3IgdGhpcz8KKyAgICAoR29sZGZhcmIpCistICAgQWRkIGNvbW1hbmQgdG8gZXhlY3V0ZSBzb21lIGNvbW1hbmRzIChzZWFyY2gsIHZlcnRpY2FsIG1vdmVtZW50cykgaW4gYWxsCisgICAgYm91bmQgd2luZG93cy4KKy0gICBBZGQgJ3NlYXJjaCcgb3B0aW9uIHRvICdzY3JvbGxvcHQnIHRvIGFsbG93ICdzY3JvbGxiaW5kJyB3aW5kb3dzIHRvCisgICAgYmUgYm91bmQgYnkgcmVnZXhwIHNlYXJjaGVzCistICAgQWRkICJ6PiIgYW5kICJ6PCI6IHNjcm9sbCBzaWRld2F5cyBvbmUgc2NyZWVuZnVsbC4gKENhbXBiZWxsKQorLSAgIEFkZCBvcHRpb24gdG8gc2V0IHRoZSBudW1iZXIgb2YgbGluZXMgd2hlbiBub3QgdG8gc2Nyb2xsLCBpbnN0ZWFkIG9mIHRoZQorICAgIGZpeGVkIG51bWJlciB1c2VkIG5vdyAoZm9yIHRlcm1pbmFscyB0aGF0IHNjcm9sbCBzbG93IHdpdGggYSBsYXJnZSBudW1iZXIKKyAgICBvZiBsaW5lcyBidXQgbm90IHdpdGggYSBzaW5nbGUgbGluZSkuCisKKworQXV0b2NvbmY6Cis4ICAgU2hvdWxkIHVzZSBhY2NvbmZpZy5oIHRvIGRlZmluZSBwcm90b3R5cGVzIHRoYXQgYXJlIHVzZWQgYnkgYXV0b2hlYWRlci4KKzggICBTb21lIGNvbXBpbGVycyBkb24ndCBnaXZlIGFuIGVycm9yIGZvciAiLU9QVDpPbGltaXQiIGJ1dCBhIHdhcm5pbmcuIChXZWJiKQorICAgIEFkZCBhIGNoZWNrIGZvciB0aGUgd2FybmluZywgc28gdGhhdCAiT2xpbWl0IiBjYW4gYmUgYWRkZWQgYXV0b21hdGljYWxseT8KKy0gICBBdXRvY29uZjogVXNlIEBkYXRhZGlyQCBmb3IgdGhlIHN5c3RlbSBpbmRlcGVuZGVudCBmaWxlcy4gIE1ha2Ugc3VyZSB0aGUKKyAgICBzeXN0ZW0gZGVwZW5kZW50IGFuZCBzeXN0ZW0gaW5kZXBlbmRlbnQgZmlsZXMgYXJlIHNlcGFyYXRlZC4gKExlaXRuZXIpLgorLSAgIEFkZCBhdXRvY29uZiBjaGVjayBmb3Igd2FpdHBpZCgpL3dhaXQ0KCkuCistICAgUmVtb3ZlIGZjbnRsKCkgZnJvbSBhdXRvY29uZiwgYWxsIHN5c3RlbXMgaGF2ZSBpdD8KKy0gICBTZXQgZGVmYXVsdCBmb3IgJ2RpY3Rpb25hcnknLCBhZGQgc2VhcmNoIGZvciBkaWN0aW9uYXJ5IHRvIGF1dG9jb25mLgorCisKK1BlcmwgaW50ZXJmYWNlOgorOCAgIFJlbmFtZSB0eXBlbWFwIGZpbGUgdG8gc29tZXRoaW5nIGVsc2U/Cis3ICAgQWRkIHBhdGNoIGZyb20gQmVub2l0IENlcnJpbmEgdG8gaW50ZWdyYXRlIFZpbSBhbmQgUGVybCBmdW5jdGlvbnMgYmV0dGVyLgorICAgIE5vdyBhbHNvIHdvcmtzIGZvciBSdWJ5ICgyMDAxIE5vdiAxMCkKKzcgICBNYWtlIGJ1ZmZlcnMgYWNjZXNzZWQgYXMgUGVybCBhcnJheXMuIChDbGFyaykKKzcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aCBub24tQU5TSSBDPworNiAgIFRjbC9UayBoYXMgdGhlICJsb2FkIiBjb21tYW5kOiBsb2FkIGEgc2hhcmVkIGxpYnJhcnkgKC5zbyBvciAuZGxsKS4KKworCitTaGFyZWQgbGlicmFyaWVzOgorNiAgIEFkZCBzdXBwb3J0IGZvciBsb2FkaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBjYWxsaW5nIGZ1bmN0aW9ucyBpbiBpdC4KKwk6bGlibG9hZCBpbnRlcm5hbC1uYW1lIGxpYm5hbWUKKwk6bGlidW5sb2FkIGludGVybmFsLW5hbWUKKwk6bGlibGlzdAorCTpsaWJjYWxsIGludGVybmFsLW5hbWUgZnVuY3Rpb24oYXJnMSwgYXJnMiwgLi4uKQorCTpsaWJjYWxsIGZ1bmN0aW9uKGFyZzEsIGFyZzIsIC4uLikKKyAgICBsaWJjYWxsKCkgY2FuIGhhdmUgb25seSBvbmUgaW50ZWdlciBvciBTdHJpbmcgYXJndW1lbnQgYXQgdGhlIG1vbWVudC4KKzYgICBIYXZlIGEgbG9vayBvbiBob3cgUGVybCBoYW5kbGVzIGxvYWRpbmcgZHluYW1pYyBsaWJyYXJpZXMuCisKKworVGFnczoKKzggICBBZGQgYSBjb21tYW5kIHRvIGp1bXAgdG8gYSBjZXJ0YWluIGtpbmQgb2YgdGFnLiAgQWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeQorICAgIHZhbHVlcyBmb3IgdGhlIG9wdGlvbmFsIGZpZWxkcy4gIEUuZy4sICI6dGFnIHNpemUgdHlwZT1tIi4KKzggICBBZGQgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGxpbmUgaW4gdGhlIHRhZ3MgZmlsZSBmb3IgYSBtYXRjaGluZyB0YWcuCisgICAgQ2FuIGJlIHVzZWQgdG8gZXh0cmFjdCBtb3JlIGluZm8gKGNsYXNzIG5hbWUsIGluaGVyaXRhbmNlLCBldGMuKSAoUmljbworICAgIEhlbmRyaWtzKQorNyAgIENvdW50IGJlZm9yZSBDVFJMLV06IGp1bXAgdG8gTid0aCBtYXRjaAorOCAgIFNjb3BlIGFyZ3VtZW50cyBmb3IgIjp0YWciLCBlLmcuOiAiOnRhZyBjbGFzczpjUGFnZSBvcGVuIiwgbGlrZSBFbHZpcy4KKzggICBXaGVuIG91dHB1dCBvZiAiOnRzZWxlY3QiIGlzIGxvbmcsIGdldHRpbmcgdGhlIG1vcmUtcHJvbXB0LCBzaG91bGQgYmUgYWJsZQorICAgIHRvIHR5cGUgdGhlIHRhZyBudW1iZXIgZGlyZWN0bHkuCis3ICAgQWRkIGEgdGFnLXNlbGVjdCB3aW5kb3cuICBXb3JrcyBsaWtlICI6Y3dpbmRvdyIuICAoTWljaGFsIE1hbGVja2kpCis3ICAgQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgdGhlICItdCB7dGFnfSIgYXJndW1lbnQgbXVsdGlwbGUgdGltZXMuICBPcGVuIGEKKyAgICB3aW5kb3cgZm9yIGVhY2ggdGFnLgorNyAgIE1ha2Ugb3V0cHV0IG9mICI6dHNlbGVjdCIgYSBiaXQgbmljZXIuICBVc2UgaGlnaGxpZ2h0aW5nPworNyAgIEhpZ2hsaWdodCB0aGUgInRhZyAxIG9mID4yIiBtZXNzYWdlLiAgTmV3IGhpZ2hsaWdodCBncm91cCwgb3Igc2FtZSBhcyAiaGl0CisgICAgYm90dG9tIiBzZWFyY2ggbWVzc2FnZS4KKzcgICBXaGVuIHVzaW5nICI6dGFnIiBhdCB0aGUgdG9wIG9mIHRoZSB0YWcgc3RhY2ssIHNob3VsZCBhZGQgYW5vdGhlciBlbnRyeSwKKyAgICBzbyBDVFJMLVQgY2FuIGJyaW5nIHlvdSBiYWNrIHRvIHdoZXJlIHlvdSBhcmUgbm93IEFORCB0byB3aGVyZSB5b3Ugd2VyZQorICAgIGJlZm9yZSB0aGUgcHJldmlvdXMgIjp0YWciIGNvbW1hbmQuIChXZWJiKQorNyAgIFdoZW4gdXNpbmcgQ1RSTC1dIG9uIHNvbWVDbGFzczo6c29tZU1ldGhvZCwgc2VwYXJhdGUgY2xhc3MgZnJvbSBtZXRob2QgYW5kCisgICAgdXNlICI6dGEgY2xhc3M6c29tZUNsYXNzIHNvbWVNZXRob2QiLgorICAgIEluY2x1ZGUgQysrIHRhZ3MgY2hhbmdlcyAoQmVydGluKS4JQ2hhbmdlICJjbGFzczo6ZnVuYyIgdGFnIGludG8gImZ1bmMiCisgICAgd2l0aCAiY2xhc3M9Y2xhc3MiPyAgRG9jcyBpbiBvbGRtYWlsL2JlcnRpbi9pbi54eHguCis3ICAgQWRkICI6dGFnYXJncyIsIHRvIHNldCB2YWx1ZXMgZm9yIGZpZWxkczoKKwk6dGFnYXJncyBjbGFzczpzb21lY2xhc3MgZmlsZTp2ZXJzaW9uLmMKKwk6dGFnYXJncyBjbGVhcgorICAgIFRoZXNlIGFyZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlcyAoY2hhbmdlcyB0aGUgb3JkZXIgb2YgcHJpb3JpdHkgaW4gdGFnCisgICAgbWF0Y2hpbmcpLgorNyAgIFN1cHBvcnQgZm9yICJndGFncyIgYW5kICJnbG9iYWwiPyAgV2l0aCAiOnJ0YWciIGNvbW1hbmQ/CisgICAgVGhlcmUgaXMgYW4gZXhhbXBsZSBmb3IgaG93IHRvIGRvIHRoaXMgaW4gTnZpLgorICAgIE9yIGRvIGl0IGxpa2UgRWx2aXM6ICd0YWdwcmcnIGFuZCAndGFncHJnb25jZScgb3B0aW9ucy4gKFlhbWFndWNoaSkKKyAgICBUaGUgRWx2aXMgbWV0aG9kIGlzIGZhciBtb3JlIGZsZXhpYmxlLCBkbyBpdCB0aGF0IHdheS4KKzcgICBTdXBwb3J0ICJjb2w6OTkiIGV4dHJhIGZpZWxkLCB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGluIHRoYXQgY29sdW1uLiAgV2l0aAorICAgIGEgZmxhZyBpbiAnY3BvcHRpb25zJyB0byBzd2l0Y2ggaXQgb2ZmIGFnYWluLgorNyAgIEJldHRlciBzdXBwb3J0IGZvciBqdW1waW5nIHRvIHdoZXJlIGEgZnVuY3Rpb24gb3IgdmFyaWFibGUgaXMgdXNlZC4gIFVzZQorICAgIHRoZSBpZC11dGlscywgd2l0aCBhIGNvbm5lY3Rpb24gdG8gImdpZCIgKEVtYWNzIGNhbiBkbyBpdCB0b28pLiAgQWRkCisgICAgIjppZHNlbGVjdCIsIHdoaWNoIHVzZXMgYW4gIklEIiBkYXRhYmFzZSAobWFkZSBieSAibWtpZCIpIGxpa2UgInRzZWxlY3QiLgorNyAgIEFkZCAndGFnbGlzdGZpbGVzJyBvcHRpb24sIHNob3cgZmlsZSBuYW1lIGFuZCB0eXBlIHdoZW4gbGlzdGluZyBtYXRjaGluZworICAgIHRhZ3MgbmFtZSB3aXRoIENUUkwtRCBjb21wbGV0aW9uLiAgUGF0Y2ggZnJvbSBZZWdhcHBhbiBMYWtzaG1hbmFuLgorCisKK1NlY3VyaXR5OgorLSAgIG5vdGhpbmcgYXQgdGhlIG1vbWVudAorCisKK1dpbjMyIEdVSToKKzggICBNYWtlIGRlYnVnIG1vZGUgd29yayB3aGlsZSBzdGFydGluZyB1cCAodmltIC1EKS4gIE9wZW4gY29uc29sZSB3aW5kb3cgZm9yCisgICAgdGhlIG1lc3NhZ2UgYW5kIGlucHV0PworNyAgIFRoZSBQeXRob24gaW50ZXJmYWNlIG9ubHkgd29ya3Mgd2l0aCBvbmUgdmVyc2lvbiBvZiBQeXRob24sIHNlbGVjdGVkIGF0CisgICAgY29tcGlsZSB0aW1lLiAgQ2FuIHRoaXMgYmUgbWFkZSB0byB3b3JrIHdpdGggdmVyc2lvbiAyLjEgYW5kIDIuMgorICAgIGR5bmFtaWNhbGx5PworNyAgIEd2aW1FeHQ6IHdoZW4gdGhlcmUgYXJlIHNldmVyYWwgZXhpc3RpbmcgVmltcywgbW92ZSB0aGUgbGlzdCB0byBhIHN1Ym1lbnUuCisgICAgKE1pa2UgTWNDb2xsaXN0ZXIpCis4ICAgV2hlbiB1c2luZyAiRWRpdCB3aXRoIFZpbSIgZm9yIG9uZSBmaWxlIGl0IGNoYW5nZXMgZGlyZWN0b3J5LCB3aGVuIHNldmVyYWwKKyAgICBmaWxlcyBhcmUgc2VsZWN0ZWQgYW5kIHVzaW5nICJFZGl0IHdpdGggc2luZ2xlIFZpbSIgdGhlIGRpcmVjdG9yeSBpc24ndAorICAgIGNoYW5nZWQuICBBdCBsZWFzdCBjaGFuZ2UgZGlyZWN0b3J5IHdoZW4gdGhlIHBhdGggaXMgdGhlIHNhbWUgZm9yIGFsbAorICAgIGZpbGVzLiAgUGVyaGFwcyBqdXN0IHVzZSB0aGUgcGF0aCBvZiB0aGUgZmlyc3QgZmlsZSBvciB1c2UgdGhlIGxvbmdlc3QKKyAgICBjb21tb24gcGFydCBvZiB0aGUgcGF0aC4KKzggICBBZGQgZm9udCBhcmd1bWVudCB0byBzZXQgdGhlIGxmQ2hhclNldC4gKEJvYmNpaykKKzggICBTb21laG93IGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSBzeXN0ZW0gbGFuZ3VhZ2UgYW5kIHNldCAkTEFORywgc28gdGhhdAorICAgIGdldHRleHQgYW5kIG1lbnVzIHdvcmsuCis4ICAgQ291bGQga2VlcCBjb25zb2xlIG9wZW4gdG8gcnVuIG11bHRpcGxlIGNvbW1hbmRzLCB0byBhdm9pZCB0aGUgbmVlZCB0byBoaXQKKyAgICByZXR1cm4gaW4gZXZlcnkgY29uc29sZS4KKyAgICBBbHNvOiBMb29rIGF0IGhvdyBFbWFjcyBkb2VzIHJ1bnMgZXh0ZXJuYWwgY29tbWFuZHM6CisJaHR0cDovL3d3dy5jcy53YXNoaW5ndG9uLmVkdS9ob21lcy92b2Vsa2VyL250ZW1hY3MuaHRtbC4KKzggICBOZWVkIGEgc2VwYXJhdGUgUG9wVXAgbWVudSBmb3IgbW9kZWxlc3Mgc2VsZWN0aW9uLiAgTmVlZCB0d28gbmV3IGNvbW1hbmRzOgorICAgIENvcHkgc2VsZWN0aW9uIHRvIGNsaXBib2FyZCwgUGFzdGUgc2VsZWN0aW9uIChhcyB0eXBlZCB0ZXh0KS4KKzggICBTdXBwb3J0IGNvcHkvcGFzdGUgZm9yIG90aGVyIGZpbGUgZm9ybWF0cy4gIEF0IGxlYXN0IEhUTUwsIHBlcmhhcHMgUlRGLgorICAgIEFkZCAiY29weSBzcGVjaWFsIiBhbmQgInBhc3RlIHNwZWNpYWwiIGNvbW1hbmRzPworNyAgIFVzZSBkaWZmZXJlbnQgZGVmYXVsdCBjb2xvcnMsIHRvIG1hdGNoIHRoZSBjdXJyZW50IFdpbmRvd3MgY29sb3Igc2NoZW1lLgorICAgIFN5c19XaW5kb3dUZXh0LCBTeXNfV2luZG93LCBldGMuIChMaW9uZWwgU2NoYWZmaGF1c2VyKQorNyAgIFVzZSA8Qy1UYWI+IHRvIGN5Y2xlIHRocm91Z2ggb3BlbiB3aW5kb3dzIChlLmcuLCB0aGUgZmluZCBkaWFsb2cpLgorNyAgIDxFc2M+IHNob3VsZCBjbG9zZSBhIGRpYWxvZy4KKzcgICBLZWVwIHRoZSBjb25zb2xlIGZvciBleHRlcm5hbCBjb21tYW5kcyBvcGVuLiAgRG9uJ3Qgd2FpdCBmb3IgYSBrZXkgdG8gYmUKKyAgICBoaXQuICBSZS1vcGVuIGl0IHdoZW4gdGhlIHVzZXIgaGFzIGNsb3NlZCBpdCBhbnl3YXkuICBPciB1c2UgYSBwcmVwZW5kZWQKKyAgICBjb21tYW5kOiAiOm5vd2FpdCB7Y21kfSIsIG9yICI6cXVpZXQiLCB3aGljaCBleGVjdXRlcyB7Y21kfSB3aXRob3V0IGFueQorICAgIHByb21wdHMuCis3ICAgU2hvdWxkIGJlIGFibGUgdG8gc2V0IGFuIG9wdGlvbiBzbyB0aGF0IHdoZW4geW91IGRvdWJsZSBjbGljayBhIGZpbGUgdGhhdAorICAgIGlzIGFzc29jaWF0ZWQgd2l0aCBWaW0sIHlvdSBjYW4gZWl0aGVyIGdldCBhIG5ldyBpbnN0YW5jZSBvZiBWaW0sIG9yIGhhdmUKKyAgICB0aGUgZmlsZSBhZGRlZCBpbnRvIGFuIGFscmVhZHkgcnVubmluZyBWaW0uCis3ICAgVGhlICItUCIgYXJndW1lbnQgb25seSB3b3JrcyBmb3IgdGhlIGN1cnJlbnQgY29kZXBhZ2UuICBVc2Ugd2lkZQorICAgIGZ1bmN0aW9ucyB0byBmaW5kIHRoZSB3aW5kb3cgdGl0bGUuCisKKworR1VJOgorOCAgIEFkZCBHVEsgMi4zIGZpbGUgZGlhbG9nIHN1cHBvcnQuICBQYXRjaCBieSBHcmFoYW1lIEJvd2xhbmQsIDIwMDQgTWFyIDE1LAorICAgIGJ1dCBpdCBkb2Vzbid0IHVzZSAiaW5pdGRpciIgb3IgImRmbHQiLgorOCAgIE1ha2UgaW5wdXRkaWFsb2coKSB3b3JrIGZvciBQaG90b24sIEFtaWdhLCBSaXNjT1MuCistICAgPEMtLT4gY2Fubm90IGJlIG1hcHBlZC4gIFNob3VsZCBiZSBwb3NzaWJsZSB0byByZWNvZ25pemUgdGhpcyBhcyBhCisgICAgbm9ybWFsICItIiB3aXRoIHRoZSBDdHJsIG1vZGlmaWVyLgorNyAgIEltcGxlbWVudCAiOnBvcHVwIiBmb3Igb3RoZXIgc3lzdGVtcyB0aGFuIFdpbmRvd3MuCis4ICAgSW1wbGVtZW50ICI6dGVhcm9mZiIgZm9yIG90aGVyIHN5c3RlbXMgdGhhbiBXaW4zMiBHVUkuCis2ICAgSW1wbGVtZW50ICI6dW50ZWFyb2ZmIjogaGlkZSBhIHRvcm4tb2ZmIG1lbnUuCis4ICAgV2hlbiB1c2luZyB0aGUgc2Nyb2xsYmFyIHRvIHNjcm9sbCwgZG9uJ3QgbW92ZSB0aGUgY3Vyc29yIHBvc2l0aW9uLiAgV2hlbgorICAgIG1vdmluZyB0aGUgY3Vyc29yOiBzY3JvbGwgdG8gdGhlIGN1cnNvciBwb3NpdGlvbi4KKzkgICBNYWtlIDxTLUluc2VydD4gcGFzdGUgZnJvbSB0aGUgY2xpcGJvYXJkIGJ5IGRlZmF1bHQuIChLdW56ZSkKKzcgICBNZW51IGxvY2FsIHRvIGEgYnVmZmVyLCBsaWtlIG1hcHBpbmdzLiAgT3IgbG9jYWwgdG8gYSBmaWxldHlwZT8KKzggICBJbiBCdWZmZXJzIG1lbnUsIGFkZCBhIGNob2ljZSB3aGV0aGVyIHNlbGVjdGluZyBhIGJ1ZmZlciBvcGVucyBpdCBpbiB0aGUKKyAgICBjdXJyZW50IHdpbmRvdywgc3BsaXRzIHRoZSB3aW5kb3cgb3IgdXNlcyAiOmhpZGUiLgorOCAgIERyYWdnaW5nIHRoZSBtb3VzZSBwb2ludGVyIG91dHNpZGUgb2YgYSBWaW0gV2luZG93IHNob3VsZCBtYWtlIHRoZSB0ZXh0CisgICAgc2Nyb2xsLiAgUmV0dXJuIGEgdmFsdWUgZnJvbSBndWlfc2VuZF9tb3VzZV9ldmVudCgpIHRvIHRoZSBtYWNoaW5lCisgICAgc3BlY2lmaWMgY29kZSB0byBpbmRpY2F0ZSB0aGUgdGltZSBpbiB3aGljaCB0aGUgZXZlbnQgc2hvdWxkIGJlIHJlcGVhdGVkLgorOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gaWdub3JlIGEgbW91c2UgY2xpY2sgd2hlbiBpdCdzIHVzZWQgdG8gZ2l2ZSBWaW0gKGd2aW0pCisgICAgd2luZG93IGZvY3VzLiAgQWxzbyB3aGVuIGEgbW91c2UgY2xpY2sgaXMgdXNlZCB0byBicmluZyBhIHdpbmRvdyB0byBmcm9udC4KKzggICBNYWtlIHRoZSBzcGxpdCBpbnRvIHN5c3RlbSBpbmRlcGVuZGVudCBjb2RlIGFuZCBzeXN0ZW0gc3BlY2lmaWMgY29kZSBtb3JlCisgICAgZXhwbGljaXQuICBUaGVyZSBhcmUgdG9vIG1hbnkgI2lmZGVmcyBpbiBndWkuYy4KKyAgICBJZiBwb3NzaWJsZSwgc2VwYXJhdGUgdGhlIFZpbSBjb2RlIGNvbXBsZXRlbHkgZnJvbSB0aGUgR1VJIGNvZGUsIHRvIGFsbG93CisgICAgcnVubmluZyB0aGVtIGluIHNlcGFyYXRlIHByb2Nlc3Nlcy4KKzggICBTdXBwb3J0IGEgYmFja2dyb3VuZCBiaXRtYXAuICBVc2VmdWwgZm9yIG1hcmtpbmcgYSBjb2x1bW4uICBQYXRjaCBmcm9tCisgICAgSGVhdGhlciBEb3ducyAoR1RLKSBhbmQgVmluY2UgTmVncmkgKFdpbjMyKS4KKzcgICBYMTE6IFN1cHBvcnQgY3Vyc29yQ29sb3IgcmVzb3VyY2UgYW5kICItY3IiIGFyZ3VtZW50LgorOCAgIFgxMSAoYW5kIG90aGVycyk6IENUUkwtOyBpcyBub3QgZGlmZmVyZW50IGZyb20gJzsnLiAgU2V0IHRoZSBtb2RpZmllciBtYXNrCisgICAgdG8gaW5jbHVkZSBDVFJMIGZvciBrZXlzIHdoZXJlIENUUkwgcHJvZHVjZXMgdGhlIHNhbWUgQVNDSUkgY29kZS4KKzcgICBBZGQgc29tZSBjb2RlIHRvIGhhbmRsZSBwcm9wb3J0aW9uYWwgZm9udHM/ICBOZWVkIHRvIGRyYXcgZWFjaCBjaGFyYWN0ZXIKKyAgICBzZXBhcmF0ZWx5IChsaWtlIHh0ZXJtKS4gIEFsc28gZm9yIHdoZW4gYSBkb3VibGUtd2lkdGggZm9udCBpcyBub3QgZXhhY3RseQorICAgIGRvdWJsZS13aWR0aC4gKE1hZWRhKQorOCAgIFNob3VsZCB0YWtlIGZvbnQgZnJvbSB4dGVybSB3aGVyZSBndmltIHdhcyBzdGFydGVkIChpZiBubyBvdGhlciBkZWZhdWx0KS4KKzggICBTZWxlY3RpbmcgZm9udCBuYW1lcyBpbiBYMTEgaXMgZGlmZmljdWx0LCBtYWtlIGEgc2NyaXB0IG9yIHNvbWV0aGluZyB0bworICAgIHNlbGVjdCBvbmUuICBNYXJ0aW4gRGFsZWNraSBoYXMgYSBmb250IHNlbGVjdG9yIGZvciBNb3RpZiwgYnV0IGl0IG5lZWRzIGEKKyAgICBiaXQgbW9yZSB3b3JrLgorNyAgIE1vdGlmOiB1c2UgdGhlIG1lbnUgZm9udCBjb25zaXN0ZW50bHkuICBQYXRjaCBmcm9tIE1hcnRpbiBEYWxlY2tpIDIwMDIgSmFuCisgICAgMTEuCis4ICAgVmlzdWFsIGhpZ2hsaWdodGluZyBzaG91bGQga2VlcCB0aGUgc2FtZSBmb250IChib2xkLCBpdGFsaWMsIGV0Yy4pLgorOCAgIEFkZCBmbGFnIHRvICdndWlvcHRpb25zJyB0byBub3QgcHV0IGFueXRoaW5nIGluIHRoZSBjbGlwYm9hcmQgYXQgYWxsPworOCAgIFNob3VsZCBzdXBwb3J0IGEgd2F5IHRvIHVzZSBrZXlzIHRoYXQgd2UgZG9uJ3QgcmVjb2duaXplIHlldC4gIEFkZCBhCisgICAgY29tbWFuZCB0aGF0IGFkZHMgZW50cmllcyB0byBzcGVjaWFsX2tleXMgc29tZWhvdy4JSG93IGRvIHdlIG1ha2UgdGhpcworICAgIHBvcnRhYmxlIChYMTEsIFdpbjMyLCAuLik/Cis3ICAgQWRkIGEgZmxhZyB0byAnZ3Vpb3B0aW9ucycgdGhhdCB0ZWxscyBub3QgdG8gcmVtb3ZlIGluYWN0aXZlIG1lbnUgaXRlbXMuCisgICAgRm9yIHN5c3RlbXMgd2hlcmUgZ3JleWluZy1vdXQgb3IgcmVtb3ZpbmcgbWVudSBpdGVtcyBpcyB2ZXJ5IHNsb3cuICBUaGUKKyAgICBtZW51IGl0ZW1zIHdvdWxkIHJlbWFpbiB2aXNpYmx5IG5vcm1hbGx5LCBidXQgbm90IGRvIGFueXRoaW5nLgorNyAgIEFkZCAiOm1pbmltaXplIiBhbmQgIjptYXhpbWl6ZSIsIHdoaWNoIGljb25pemUgdGhlIHdpbmRvdyBhbmQgYmFjay4KKyAgICBVc2VmdWwgd2hlbiB1c2luZyBndmltIHRvIHJ1biBhIHNjcmlwdCAoZS5nLiAyaHRtbC52aW0pLgorNyAgIFgxMTogSXMgaXQgcG9zc2libGUgdG8gZnJlZSBhbGxvY2F0ZWQgY29sb3JzLCBzbyB0aGF0IG90aGVyIHByb2dyYW1zIGNhbgorICAgIHVzZSB0aGVtIGFnYWluPyAgT3RoZXJ3aXNlLCBhbGxvdyBkaXNhYmxpbmcgYWxsb2NhdGluZyB0aGUgZGVmYXVsdCBjb2xvcnMuCisgICAgT3IgYWxsb2NhdGUgYW4gb3duIGNvbG9ybWFwIChjaGVjayBVQUUpLiAgV2l0aCBhbiBvcHRpb24gdG8gdXNlIGl0LiAgRm9yCisgICAgdGhlIGNvbW1hbmRsaW5lLCAiLWluc3RhbGwiIGlzIG1vc3RseSB1c2VkIGZvciBYMTEgcHJvZ3JhbXMuCis3ICAgQWRkIGNvbW1hbmQgbGluZSBhcmd1bWVudCBmb3IgImd2aW0iIG5vdCB0byBzdGFydCB0aGUgR1VJLiAgU29ydCBvZiB0aGUKKyAgICBpbnZlcnNlIG9mICJ2aW0gLWciLiAoVmlrYXMpCis3ICAgU2hvdWxkIHN1cHBvcnQgbXVsdGktY29sdW1uIG1lbnVzLgorLSAgIFNob3VsZCBhZGQgb3B0aW9uIGZvciB3aGVyZSB0byBwdXQgdGhlICJIZWxwIiBtZW51OiBsaWtlIE1vdGlmIGF0IHRoZSBmYXIKKyAgICByaWdodCwgb3Igd2l0aCB0aGUgb3RoZXIgbWVudXMgKGJ1dCBzdGlsbCBhdCB0aGUgcmlnaHQpLgorLSAgIEFkZCBtZW51IGl0ZW0gdG8gIktlZXAgSW5zZXJ0IG1vZGUiLgorOCAgICI6bWtndmltcmMiIGNvbW1hbmQsIHRoYXQgaW5jbHVkZXMgbWVudXMuCis2ICAgQmlnIGNoYW5nZTogTW92ZSBHVUkgdG8gc2VwYXJhdGUgcHJvZ3JhbSAidmltZ3VpIiwgdG8gbWFrZSBzdGFydHVwIG9mIHZpbSBhCisgICAgbG90IGZhc3RlciwgYnV0IHN0aWxsIGJlIGFibGUgdG8gZG8gInZpbSAtZyIgb3IgIjpndWkiLgorNyAgIE1vcmUgZXhwbGljaXQgbW91c2UgYnV0dG9uIGJpbmRpbmcgaW5zdGVhZCBvZiAnbW91c2Vtb2RlbCc/Cis3ICAgQWRkIG9wdGlvbiB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cgb24gdGhlIHNjcmVlbi4gICd3aW5kb3dwb3MnLAorICAgIHdoaWNoIGhhcyBhIHZhbHVlIG9mICIxMjMsNDU2IjogPHg+LDx5Pi4KKyAgICBPciBhZGQgYSBjb21tYW5kLCBsaWtlICI6d2luc2l6ZSI/Cis3ICAgQWRkIHRvb2xiYXIgZm9yIG1vcmUgR1VJcy4KKzggICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSAiYW1lbnUgaWNvbj1CdWlsdEluIyMiLCBzbyB0aGF0IHRoZSB0b29sYmFyIGl0ZW0KKyAgICBuYW1lIGNhbiBiZSBjaG9zZW4gZnJlZS4KKzcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHB1dCB0aGUgdG9vbGJhciBvbiB0b3AsIGxlZnQsIHJpZ2h0IGFuZC9vciBib3R0b20gb2YKKyAgICB0aGUgd2luZG93PyAgQWxsb3dzIGZvciBzb2Z0a2V5LWxpa2UgdXNlLgorNiAgIFNlcGFyYXRlIHRoZSBwYXJ0IG9mIFZpbSB0aGF0IGRvZXMgdGhlIGVkaXRpbmcgZnJvbSB0aGUgcGFydCB0aGF0IHJ1bnMgdGhlCisgICAgR1VJLiAgQ29tbXVuaWNhdGUgdGhyb3VnaCBhIHBzZXVkby10dHkuICBWaW0gc3RhcnRzIHVwLCBjcmVhdGVzIGEKKyAgICBwdHkgdGhhdCBpcyBjb25uZWN0ZWQgdG8gdGhlIHRlcm1pbmFsLiAgV2hlbiB0aGUgR1VJIHN0YXJ0cywgdGhlIHB0eSBpcworICAgIHJlY29ubmVjdGVkIHRvIHRoZSBHVUkgcHJvY2Vzcy4gIFdoZW4gdGhlIEdVSSBzdG9wcywgaXQgaXMgY29ubmVjdGVkIHRvCisgICAgdGhlIHRlcm1pbmFsIGFnYWluLiAgQWxzbyB1c2UgdGhlIHB0eSBmb3IgZXh0ZXJuYWwgcHJvY2Vzc2VzLCBpdCBsb29rcworICAgIGxpa2UgYSB2dDEwMCB0ZXJtaW5hbCB0byB0aGVtLiAgVmltIHVzZXMgZXh0cmEgY29tbWFuZHMgdG8gY29tbXVuaWNhdGUgR1VJCisgICAgdGhpbmdzLgorNyAgIE1vdGlmOiBGb3IgYSBjb25maXJtKCkgZGlhbG9nIDxFbnRlcj4gc2hvdWxkIGJlIGlnbm9yZWQgd2hlbiBubyBkZWZhdWx0CisgICAgYnV0dG9uIHNlbGVjdGVkLCA8RXNjPiBzaG91bGQgY2xvc2UgdGhlIGRpYWxvZy4KKy0gICBNb3RpZiBzdGVhbHMgPEYxMD4gZnJvbSB1cywgdG8gcG9wIHVwIG1lbnVzIHdpdGggdGhlIGtleWJvYXJkLiAgSG93IGRvIHdlCisgICAgZ2V0IGl0IGJhY2sgaWYgd2Ugd2FudCBpdD8KKy0gICBNb3RpZjogYWRkIDNEIHNoYWRpbmcgZm9yIHRoZSBtZW51IGVudHJpZXM/ICBQYXRjaCBmcm9tIE1hcnRpbiBEYWxlY2tpLgorLSAgIFBhc3RlIGluIEluc2VydCBtb2RlIHNob3VsZCBub3QgZG8gYXV0b3dyYXAgZXRjLiAgT3IgbWF5YmUgdGhpcyBzaG91bGQgYmUKKyAgICBjaGFuZ2VhYmxlIHdpdGggYW4gb3B0aW9uPworLSAgIFB1dCBhIG5pY2UgcGljdHVyZSBpbiB0aGUgaWNvbiAoYnV0IGhvdyBkbyB3ZSBkbyB0aGF0PykuCis3ICAgV2hlbiB1c2luZyBhIHBzZXVkby10dHkgVmltIHNob3VsZCBiZWhhdmUgbGlrZSBzb21lIHRlcm1pbmFsICh2dDUyIGxvb2tzCisgICAgc2ltcGxlIGVub3VnaCkuIFRlcm1pbmFsIGNvZGVzIHRvL2Zyb20gc2hlbGwgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCistICAgV291bGQgaXQgYmUgdXNlZnVsIHRvIGJlIGFibGUgdG8gcXVpdCB0aGUgR1VJIGFuZCBnbyBiYWNrIHRvIHRoZSB0ZXJtaW5hbAorICAgIHdoZXJlIGl0IHdhcyBzdGFydGVkIGZyb20/Cis3ICAgU3VwcG9ydCAiLXZpc3VhbCA8dHlwZT4iIGNvbW1hbmQgbGluZSBhcmd1bWVudC4KKworCitWTVM6CistICAgSW1wcm92ZW1lbnQ6IHJld3JpdGUgdGVybS9UVFkgaGFuZGxpbmcuCistICAgSW1wcm92ZW1lbnQ6IGNyZWF0ZSBWTVMgR1RLIHJ1bnRpbWUgbGlicmFyaWVzIG9uIE9wZW5WTVMgNy4xLTIgKHRvZGF5IEdUSworICAgIHdvcmtzIGp1c3Qgb24gNy4zKS4KKworCitBdXRvY29tbWFuZHM6Cis5ICAgTWFrZSBzdXJlIHRoYXQgc2lkZSBlZmZlY3RzIG9mIGF1dG9jb21tYW5kcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuICBEb24ndAorICAgIGV4ZWN1dGUgYXV0b2NvbW1hbmRzIHdoZW4gYSBidWZmZXIgb3Igd2luZG93IGlzIGhhbGZ3YXkgc29tZSBjaGFuZ2VzLgorICAgIE1vdmUgYWxsIGFwcGx5X2F1dG9jbWRzKCkgY2FsbHMgdG8gYSBoaWdoZXIgbGV2ZWwgd2hlcmUgbmVlZGVkLgorOCAgIEFkZCBTY3JpcHRSZWFkQ21kIGV2ZW50OiB1c2VkIHRvIGxvYWQgcmVtb3RlIFZpbSBzY3JpcHRzLCBlLmcuCisgICAgInZpbSAtdSBodHRwOi8vbWFjaC9wYXRoL3ZpbXJjIi4KKzggICBVc2UgYW5vdGhlciBvcHRpb24gdGhhbiAndXBkYXRldGltZScgZm9yIHRoZSBDdXJzb3JIb2xkIGV2ZW50LiAgVGhlIHR3bworICAgIHRoaW5ncyBhcmUgdW5yZWxhdGVkIGZvciB0aGUgdXNlciAoYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBtb3JlCisgICAgZGlmZmljdWx0KS4KKzggICBBbHNvIHRyaWdnZXIgQ3Vyc29ySG9sZCBpbiBJbnNlcnQgbW9kZT8KKzcgICBBZGQgYXV0b2NvbW1hbmQgZXZlbnQgZm9yIHdoZW4gYSBidWZmZXIgY2Fubm90IGJlIGFiYW5kb25lZC4gIFNvIHRoYXQgdXNlcgorICAgIGNhbiBkZWZpbmUgdGhlIGFjdGlvbiB0YWtpbmcgKGF1dG93cml0ZSwgZGlhbG9nLCBmYWlsKSBiYXNlZCBvbiB0aGUga2luZAorICAgIG9mIGZpbGUuIChZYWtvdiBMZXJuZXIpICBPciBpcyBCdWZMZWF2ZSBzdWZmaWNpZW50PworOCAgIENhbid0IHVzZSAiOm5vcm1hbCIgaW4gQ3Vyc29ySG9sZCBhdXRvY29tbWFuZHMuICBNYWtlIHRoZSBDdXJzb3JIb2xkIGV2ZW50CisgICAgaW5zZXJ0IGEgc3BlY2lhbCBrZXkgY29kZSwgYW5kIGNhbGwgdGhlIGF1dG9jb21tYW5kIGZ1bmN0aW9ucyBmcm9tIGEKKyAgICBoaWdoZXIgbGV2ZWwsIHNvIHRoYXQgdmdldGMoKSBpc24ndCB1c2VkIHJlY3Vyc2l2ZWx5LgorOCAgIEF1dG9jb21tYW5kcyBzaG91bGQgbm90IGNoYW5nZSByZWdpc3RlcnMuICBBbmQgbWFya3M/ICBBbmQgdGhlIGp1bXBsaXN0PworICAgIEFuZCBhbnl0aGluZyBlbHNlPworOCAgIEF1dG9jb21tYW5kIGZvciB3aGVuIG1vZGlmaWVkIGZpbGVzIGhhdmUgYmVlbiBmb3VuZCwgd2hlbiBnZXR0aW5nIGlucHV0CisgICAgZm9jdXMgYWdhaW4gKGUuZy4sIEZpbGVDaGFuZ2VkRm9jdXMpLgorICAgIENoZWNrIHdoZW46IGdldHRpbmcgZm9jdXMsIGp1bXBpbmcgdG8gYW5vdGhlciBidWZmZXIsIC4uLgorOCAgIEFkZCBhdXRvY29tbWFuZHMsIHVzZXIgZnVuY3Rpb25zIGFuZCB1c2VyIGNvbW1hbmRzIHRvICI6bWt2aW1yYyIuCis4ICAgQWRkICJUYWdKdW1wRmlsZSIgYXV0b2NvbW1hbmQ6IFdoZW4ganVtcGluZyB0byBhbm90aGVyIGZpbGUgZm9yIGEgdGFnLgorICAgIENhbiBiZSB1c2VkIHRvIG9wZW4gIm1haW4uYy5neiIgd2hlbiAibWFpbi5jIiBpc24ndCBmb3VuZC4KKzYgICBBZGQgS2V5bWFwQ2hhbmdlZCBldmVudCwgc28gdGhhdCB0aGUgZWZmZWN0cyBvZiBhIGRpZmZlcmVudCBrZXltYXAgY2FuIGJlCisgICAgaGFuZGxlZCAoZS5nLiwgb3RoZXIgZm9udCkgKFJvbiBBYXJvbikKKzcgICBBZGQgYSB3YXkgdG8gc2tpcCBhbiBhdXRvY29tbWFuZCBpZiBnb2luZyBmcm9tIG9uZSAqLmMgZmlsZSB0byBhbm90aGVyICouYworICAgIGZpbGUuCis3ICAgV2hlbiB0cnlpbmcgdG8gb3BlbiBhIGRpcmVjdG9yeSwgZG9uJ3QgbG9hZCB0aGUgZmlsZSBidXQgdHJpZ2dlciBhbgorICAgIGF1dG9jb21tYW5kIGV2ZW50IE9wZW5EaXJlY3RvcnkuCis3ICAgQWRkIGZpbGUgdHlwZSBpbiBmcm9udCBvZiBmaWxlIHBhdHRlcm46IDxkPiBmb3IgZGlyZWN0b3J5LCA8bD4gZm9yIGxpbmssCisgICAgPHg+IGZvciBleGVjdXRhYmxlLCBldGMuICA8Jnh4eD4gZm9yIFJpc2MgT1MuICBXaXRoIGNvbW1hcyB0byBzZXBhcmF0ZQorICAgIGFsdGVybmF0aXZlcy4gIFRoZSBhdXRvY29tbWFuZCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gYm90aCB0aGUgZmlsZSB0eXBlCisgICAgQU5EIHRoZSBmaWxlIHBhdHRlcm4gbWF0Y2guIChMZW9uYXJkKQorNSAgIEFkZCBvcHRpb24gdGhhdCBzcGVjaWZpZXMgZXh0ZW5zaW9ucyB3aGljaCBhcmUgdG8gYmUgZGlzY2FyZGVkIGZyb20gdGhlCisgICAgZmlsZSBuYW1lLiAgRS5nLiAnYXVzdWZmaXgnLCB3aXRoICIuZ3osLm9yaWciLiAgU3VjaCB0aGF0IGZpbGUuYy5neiB3aWxsCisgICAgdHJpZ2dlciB0aGUgIiouYyIgYXV0b2NvbW1hbmRzLiAgKEJlbGFiYXMpCis3ICAgQWRkIHNvbWV0aGluZyB0byBicmVhayB0aGUgYXV0b2NvbW1hbmRzIGZvciB0aGUgY3VycmVudCBldmVudCwgYW5kIGZvcgorICAgIHdoYXQgZm9sbG93cy4gIFVzZWZ1bCBmb3IgYSAiQnVmV3JpdGVQcmUiIHRoYXQgd2FudHMgdG8gYXZvaWQgd3JpdGluZyB0aGUKKyAgICBmaWxlLgorOCAgIFdoZW4gZWRpdGluZyAidHQuZ3oiLCB3aGljaCBpcyBpbiBET1MgZm9ybWF0LCAnZmlsZWZvcm1hdCcgc3RheXMgYXQKKyAgICAidW5peCIsIHRodXMgd3JpdGluZyB0aGUgZmlsZSBjaGFuZ2VzIGl0LiAgU29tZWhvdyBkZXRlY3QgdGhhdCB0aGUgcmVhZAorICAgIGNvbW1hbmQgdXNlZCBkb3MgZmlsZWZvcm1hdC4gIFNhbWUgZm9yICdmaWxlZW5jb2RpbmcnLgorOCAgIEFkZCBidWZmZXItbG9jYWwgYXV0b2NvbW1hbmRzPyAgUmVkdWNlcyBvdmVyaGVhZCBmb3IgYXV0b2NvbW1hbmRzIHRoYXQKKyAgICB0cmlnZ2VyIG9mdGVuIChpbnNlcnRpbmcgYSBjaGFyYWN0ZXIsIHN3aXRjaGluZyBtb2RlKS4KKwk6YXUgRXZlbnQgPGJ1ZmZlcj4gZG8tc29tZXRoaW5nCisgICAgRS5nLjoKKwk6YXUgQnVmRW50ZXIgPGJ1ZmZlcj4gbWVudSBlbmFibGUgLi4uCisJOmF1IEJ1ZkxlYXZlIDxidWZmZXI+IG1lbnUgZGlzYWJsZSAuLi4KKyAgICBQYXRjaCBmcm9tIFlha292IExlcm5lciwgaW5jbHVkaW5nIHRlc3QgKDIwMDQgSmFuIDcpLgorLSAgIEFkZCBldmVudHMgdG8gYXV0b2NvbW1hbmRzOgorICAgIEVycm9yCSAgICAtIFdoZW4gYW4gZXJyb3IgaGFwcGVucworICAgIE5vcm1hbEVudGVyCSAgICAtIEVudGVyaW5nIE5vcm1hbCBtb2RlCisgICAgSW5zZXJ0RW50ZXIJICAgIC0gRW50ZXJpbmcgSW5zZXJ0IG1vZGUKKyAgICBSZXBsYWNlRW50ZXIgICAgLSBFbnRlcmluZyBSZXBsYWNlIG1vZGUKKyAgICBDbWRFbnRlcgkgICAgLSBFbnRlcmluZyBDbWRsaW5lIG1vZGUKKyAgICBWaXN1YWxFbnRlcgkgICAgLSBFbnRlcmluZyBWaXN1YWwgbW9kZQorICAgIENtZFVuZGVmaW5lZCAgICAtIExpa2UgRnVuY1VuZGVmaW5lZCBidXQgZm9yIHVzZXIgY29tbWFuZHMuCisgICAgKkxlYXZlCSAgICAtIExlYXZpbmcgdGhlIG1vZGUKKyAgICBTZWFyY2hQb3N0CSAgICAtIEFmdGVyIGRvaW5nIGEgc2VhcmNoIGNvbW1hbmQgKGUuZy4gdG8gZG8gIk0iKQorICAgIFByZURpckNoYW5nZWQvUG9zdERpckNoYW5nZWQKKwkJICAgIC0gQmVmb3JlL2FmdGVyICI6Y2QiIGhhcyBiZWVuIHVzZWQgKGZvciBjaGFuZ2luZyB0aGUKKwkJICAgICAgd2luZG93IHRpdGxlKQorICAgIEJ1ZlJlYWRBY3Rpb24gICAtIHJlcGxhY2VzIHJlYWRpbmcgYSBmaWxlCisgICAgQnVmV3JpdGVBY3Rpb24gIC0gcmVwbGFjZXMgd3JpdGluZyBhIGZpbGUKKyAgICBTaHV0RG93bgkgICAgLSB3aGVuIHRoZSBzeXN0ZW0gaXMgYWJvdXQgdG8gc2h1dCBkb3duCisgICAgSW5zZXJ0Q2hhclByZSAgIC0gdXNlciB0eXBlZCBjaGFyYWN0ZXIgSW5zZXJ0IG1vZGUsIGJlZm9yZSBpbnNlcnRpbmcgdGhlCisJCSAgICAgIGNoYXIuICBQYXR0ZXJuIGlzIG1hdGNoZWQgd2l0aCB0ZXh0IGJlZm9yZSB0aGUgY3Vyc29yLgorCQkgICAgICBTZXQgdjpjaGFyIHRvIHRoZSBjaGFyYWN0ZXIsIGNhbiBiZSBjaGFuZ2VkLgorCQkgICAgICAobm90IHRyaWdnZXJlZCB3aGVuICdwYXN0ZScgaXMgc2V0KS4KKyAgICBJbnNlcnRDaGFyUG9zdCAgLSB1c2VyIHR5cGVkIGEgY2hhcmFjdGVyIGluIEluc2VydCBtb2RlLCBhZnRlciBpbnNlcnRpbmcKKwkJICAgICAgdGhlIGNoYXIuCisgICAgQnVmTW9kaWZpZWQJICAgIC0gV2hlbiBhIGJ1ZmZlciBiZWNvbWVzIG1vZGlmaWVkLCBvciB1bm1vZGlmaWVkIChmb3IKKwkJICAgICAgcHV0dGluZyBhIFsrXSBpbiB0aGUgd2luZG93IHRpdGxlIG9yIGNoZWNraW5nIG91dCB0aGUKKwkJICAgICAgZmlsZSBmcm9tIENWUykuCisgICAgQnVmRmlyc3RDaGFuZ2UgIC0gV2hlbiBtYWtpbmcgYSBjaGFuZ2UsIHdoZW4gJ21vZGlmaWVkJyBpcyBzZXQuICBDYW4gYmUKKwkJICAgICAgdXNlZCB0byBkbyBhIDpwcmVzZXJ2ZSBmb3IgcmVtb3RlIGZpbGVzLgorICAgIEJ1ZkNoYW5nZQkgICAgLSBhZnRlciBhIGNoYW5nZSB3YXMgbWFkZS4gIFNldCBzb21lIHZhcmlhYmxlcyB0byBpbmRpY2F0ZQorCQkgICAgICB0aGUgcG9zaXRpb24gYW5kIG51bWJlciBvZiBpbnNlcnRlZC9kZWxldGVkIGxpbmVzLCBzbworCQkgICAgICB0aGF0IG1hcmtzIGNhbiBiZSB1cGRhdGVkLiAgSGllckFzc2lzdCBoYXMgcGF0Y2ggdG8gYWRkCisJCSAgICAgIEJ1ZkNoYW5nZVByZSwgQnVmQ2hhbmdlUG9zdCBhbmQgUmV2ZXJ0QnVmLiAoU2hhaCkKKyAgICBXaW5SZXNpemVkCSAgICAtIFdoZW4gYSB3aW5kb3cgaGFzIGJlZW4gcmVzaXplZAorICAgIFZpbVJlc2l6ZWQJICAgIC0gV2hlbiB0aGUgVmltIHdpbmRvdyBoYXMgYmVlbiByZXNpemVkIChTSUdXSU5DSCkKKwkJICAgICAgcGF0Y2ggZnJvbSBZYWtvdiBMZXJuZXIsIDIwMDMgSnVseSAyNC4KKy0gICBBZGQgYXV0b2NvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgZXZlcnkgc28gbWFueSBzZWNvbmRzPyAgRm9yIHdyaXRpbmcgdGhlCisgICAgZmlsZSBub3cgYW5kIHRoZW4gKCdhdXRvc2F2ZScpLgorCQkJCSAgKidhdXRvc2F2ZScqIConYXMnKiAqJ25vYXV0b3NhdmUnKiAqJ25vYXMnKgorICAgICdhdXRvc2F2ZScgJ2F3JyBudW1iZXIgIChkZWZhdWx0IDApCisJICAgIEF1dG9tYXRpY2FsbHkgd3JpdGUgdGhlIGN1cnJlbnQgYnVmZmVyIHRvIGZpbGUgTiBzZWNvbmRzIGFmdGVyIHRoZQorCSAgICBsYXN0IGNoYW5nZSBoYXMgYmVlbiBtYWRlIGFuZCB3aGVuIHwnbW9kaWZpZWQnfCBpcyBzdGlsbCBzZXQuCisJICAgIERlZmF1bHQ6IDAgPSBkbyBub3QgYXV0b3NhdmUgdGhlIGJ1ZmZlci4KKyAgICBBbHRlcm5hdGl2ZTogaGF2ZSAnYXV0b3NhdmUnIHVzZSAndXBkYXRldGltZScgYW5kICd1cGRhdGVjb3VudCcgYnV0IG1ha2UKKyAgICB0aGVtIHNhdmUgdGhlIGZpbGUgaXRzZWxmIGJlc2lkZXMgdGhlIHN3YXBmaWxlLgorCisKK0luc2VydCBtb2RlIGNvbXBsZXRpb24vZXhwYW5zaW9uOgorOCAgIFdoZW4gdGhlcmUgaXMgbm8gd29yZCBiZWZvcmUgdGhlIGN1cnNvciBidXQgc29tZXRoaW5nIGxpa2UgInN5cy4iIGNvbXBsZXRlCisgICAgd2l0aCAic3lzLiIuICBXb3JrcyB3ZWxsIGZvciBDIGFuZCBzaW1pbGFyIGxhbmd1YWdlcy4KKzkgICBeWF5MIGNvbXBsZXRpb24gZG9lc24ndCByZXBlYXQgY29ycmVjdGx5LiAgSXQgdXNlcyB0aGUgZmlyc3QgbWF0Y2ggd2l0aAorICAgIHRoZSBsYXN0IGFkZGVkIGxpbmUsIGluc3RlYWQgb2YgY29udGludWluZyB3aGVyZSB0aGUgbGFzdCBtYXRjaCBlbmRlZC4KKyAgICAoV2ViYikKKzggICBUaGUgY29kZSBoYXMgYmVjb21lIHRvbyBjb21wbGV4LiAgUmVkZXNpZ24gaXQsIG9yIGF0IGxlYXN0IGFkZCBwcm9wZXIKKyAgICBjb21tZW50cy4KKzggICBBZGQgb3B0aW9uIHRvIHNldCBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIEluc2VydCBtb2RlIGNvbXBsZXRpb246CisgICAgLSBpZ25vcmUvbWF0Y2ggY2FzZQorICAgIC0gZGlmZmVyZW50IGNoYXJhY3RlcnMgdGhhbiAnaXNrZXl3b3JkJworOCAgIEFkZCBleHByZXNzaW9uLWV4cGFuc2lvbiwgc28gdGhhdCB0aGUgdXNlciBjYW4gZGVmaW5lIGhpcyBvd24ga2luZCBvZgorICAgIGNvbXBsZXRpb24uICBQYXRjaCBmcm9tIFRhcm8gTXVyYW9rYSwgMjAwMyBBdWcgMjYuCis4ICAgQWRkIGEgY29tbWFuZCB0byB1bmRvIHRoZSBjb21wbGV0aW9uLCBnbyBiYWNrIHRvIHRoZSBvcmlnaW5hbCB0ZXh0LgorOCAgIFVzZSB0aGUgY2xhc3MgaW5mb3JtYXRpb24gaW4gdGhlIHRhZ3MgZmlsZSB0byBkbyBjb250ZXh0LXNlbnNpdGl2ZQorICAgIGNvbXBsZXRpb24uICBBZnRlciAiZm9vLiIgY29tcGxldGUgYWxsIG1lbWJlciBmdW5jdGlvbnMvdmFyaWFibGVzIG9mCisgICAgImZvbyIuICBOZWVkIHRvIHNlYXJjaCBiYWNrd2FyZHMgZm9yIHRoZSBjbGFzcyBkZWZpbml0aW9uIG9mIGZvby4KKyAgICBTaG91bGQgd29yayBmb3IgQysrIGFuZCBKYXZhLgorICAgIEV2ZW4gbW9yZSBjb250ZXh0IHdvdWxkIGJlIG5pY2U6ICJpbXBvcnQgamF2YS5eTiIgLT4gImlvIiwgImxhbmciLCBldGMuCis3ICAgV2hlbiBleHBhbmRpbmcgJEhPTUUvZGlyIHdpdGggXlheRiBrZWVwIHRoZSAkSE9NRSAod2l0aCBhbiBvcHRpb24/KS4KKzcgICBBZGQgQ1RSTC1YIGNvbW1hbmQgaW4gSW5zZXJ0IG1vZGUgbGlrZSBDVFJMLVggQ1RSTC1OLCB0aGF0IGNvbXBsZXRlcyBXT1JEUworICAgIGluc3RlYWQgb2Ygd29yZHMuCis4ICAgQWRkIENUUkwtWCBDVFJMLVI6IGNvbXBsZXRlIHdvcmRzIGZyb20gcmVnaXN0ZXIgY29udGVudHMuCis4ICAgQWRkIGNvbXBsZXRpb24gb2YgcHJldmlvdXNseSBpbnNlcnRlZCB0ZXh0cyAobGlrZSB3aGF0IENUUkwtQSBkb2VzKS4KKyAgICBSZXF1aXJlcyByZW1lbWJlcmluZyBhIG51bWJlciBvZiBpbnNlcnRpb25zLgorOCAgIEFkZCAnZicgZmxhZyB0byAnY29tcGxldGUnOiBFeHBhbmQgZmlsZSBuYW1lcy4KKyAgICBBbHNvIGFwcGx5ICdjb21wbGV0ZScgdG8gd2hvbGUgbGluZSBjb21wbGV0aW9uLgorLSAgIE1ha2UgaXQgcG9zc2libGUgdG8gc2VhcmNoIGluY2x1ZGUgZmlsZXMgaW4gc2V2ZXJhbCBwbGFjZXMuICBVc2UgdGhlCisgICAgJ3BhdGgnIG9wdGlvbj8gIENhbiB0aGlzIGJlIGRvbmUgd2l0aCB0aGUgZGljdGlvbmFyeSBjb21wbGV0aW9uICh1c2UKKyAgICB3aWxkY2FyZHMgaW4gdGhlIGZpbGUgbmFtZSk/CistICAgTWFrZSBDVFJMLVggQ1RSTC1LIGRvIGEgYmluYXJ5IHNlYXJjaCBpbiB0aGUgZGljdGlvbmFyeSAoaWYgaXQncyBzb3J0ZWQpLgorLSAgIFNwZWVkIHVwIENUUkwtWCBDVFJMLUsgZGljdGlvbmFyeSBzZWFyY2hpbmcgKGRvbid0IHVzZSBhIHJlZ2V4cD8pLgorLSAgIFNldCBhIG1hcmsgYXQgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBtYXRjaCB3YXMgZm91bmQgKGZpbGUgbWFyaywgY291bGQKKyAgICBiZSBpbiBhbm90aGVyIGZpbGUpLgorLSAgIEFkZCBDVFJMLUEgY29tbWFuZCBpbiBDVFJMLVggbW9kZTogc2hvdyBhbGwgbWF0Y2hlcy4KKy0gICBNYWtlIENUUkwtWCBDVFJMLUwgdXNlIHRoZSAnY29tcGxldGUnIG9wdGlvbj8KKy0gICBBZGQgY29tbWFuZCBpbiBDVFJMLVggbW9kZSB0byBhZGQgZm9sbG93aW5nIHdvcmRzIHRvIHRoZSBjb21wbGV0ZWQgc3RyaW5nCisgICAgKGUuZy4gdG8gY29tcGxldGUgIlBvaW50ZXItPmVsZW1lbnQiIHdpdGggQ1RSTC1YIENUUkwtUCBDVFJMLVcgQ1RSTC1XKQorLSAgIENUUkwtWCBDVFJMLUY6IFVzZSAncGF0aCcgdG8gZmluZCBjb21wbGV0aW9ucy4KKy0gICBDVFJMLVggQ1RSTC1GOiBPcHRpb24gdG8gdXNlIGZvcndhcmQgc2xhc2hlcyBvbiBNUy1XaW5kb3dzPworLSAgIENUUkwtWCBDVFJMLUY6IERvbid0IHJlcGxhY2UgIiRWSU0iIHdpdGggdGhlIGFjdHVhbCB2YWx1ZS4gKEtlbGx5KQorOCAgIEFkZCBvcHRpb24gJ2lzZXhwYW5kJywgY29udGFpbmluZyBjaGFyYWN0ZXJzIHdoZW4gZG9pbmcgZXhwYW5zaW9uIChzbyB0aGF0CisgICAgIi4iIGFuZCAiXCIgY2FuIGJlIGluY2x1ZGVkLCB3aXRob3V0IGNoYW5naW5nICdpc2tleXdvcmQnKS4gKEdvbGRmYXJiKQorICAgIEFsc286ICdpc3RhZ3dvcmQnOiBjaGFyYWN0ZXJzIHVzZWQgZm9yIENUUkwtXS4KKyAgICBXaGVuICdpc2V4cGFuZCcgb3IgJ2lzdGFnd29yZCcgYXJlIGVtcHR5LCB1c2UgJ2lza2V5d29yZCcuCistICAgQWxsb3cgbGlzdGluZyBhbGwgbWF0Y2hlcyBpbiBzb21lIHdheSAoYW5kIHBpY2tpbmcgb25lIGZyb20gdGhlIGxpc3QpLgorCisKK0NvbW1hbmQgbGluZSBlZGl0aW5nOgorNyAgIEFkZCBjb21tYW5kcyAoa2V5cykgdG8gZGVsZXRlIGZyb20gdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBjb21tYW5kCisgICAgbGluZS4KKzggICBDdXN0b20gY29tcGxldGlvbiBvZiB1c2VyIGNvbW1hbmRzIGNhbid0IHVzZSB0aGUgc3RhbmRhcmQgY29tcGxldGlvbgorICAgIGZ1bmN0aW9ucy4gIEFkZCBhIGhvb2sgdG8gaW52b2tlIGEgdXNlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHR5cGUgb2YKKyAgICBjb21wbGV0aW9uIHRvIGJlIGRvbmU6ICJmaWxlIiwgInRhZyIsICJjdXN0b20iLCBldGMuCistICAgQWRkIGZsYWdzIHRvICd3aGljaHdyYXAnIGZvciBjb21tYW5kIGxpbmUgZWRpdGluZyAoY3Vyc29yIHJpZ2h0IGF0IGVuZCBvZgorICAgIGxpbmVzIHdyYXBzIHRvIHN0YXJ0IG9mIGxpbmUpLgorLSAgIE1ha2UgZWRpdGluZyB0aGUgY29tbWFuZCBsaW5lIHdvcmsgbGlrZSBJbnNlcnQgbW9kZSBpbiBhIHNpbmdsZS1saW5lIHZpZXcKKyAgICBvbiBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIHRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeS4gIEJ1dCB0aGlzIGhhcyBtYW55CisgICAgZGlzYWR2YW50YWdlcywgb25seSBpbXBsZW1lbnQgaXQgd2hlbiB0aGVzZSBjYW4gYmUgc29sdmVkLiAgRWx2aXMgaGFzIHJ1bgorICAgIGludG8gdGhlc2UsIHNlZSByZW1hcmtzIGZyb20gU3RldmUgKH4vTWFpbC9vbGRtYWlsL2tpcmtlbmRhbGwvaW4uMDAwMTIpLgorICAgIC0gR29pbmcgYmFjayBpbiBoaXN0b3J5IGFuZCBlZGl0aW5nIGEgbGluZSB0aGVyZSB3b3VsZCBjaGFuZ2UgdGhlIGhpc3RvcnkuCisgICAgICBXb3VsZCBzdGlsbCBuZWVkIHRvIGtlZXAgYSBjb3B5IG9mIHRoZSBoaXN0b3J5IGVsc2V3aGVyZS4gIExpa2UgdGhlCisgICAgICBjbWR3aW4gZG9lcyBub3cgYWxyZWFkeS4KKyAgICAtIFVzZSBDVFJMLU8gdG8gZXhlY3V0ZSBvbmUgTm9ybWFsIG1vZGUgY29tbWFuZC4gIEhvdyB0byBzd2l0Y2ggdG8gbm9ybWFsCisgICAgICBtb2RlIGZvciBtb3JlIGNvbW1hbmRzPyAgPEVzYz4gc2hvdWxkIGNhbmNlbCB0aGUgY29tbWFuZCBsaW5lLiAgQ1RSTC1UPworICAgIC0gVG8gYWxsb3cgIi8iIGFuZCAiPSBuZWVkIHRvIHJlY3Vyc2l2ZWx5IGNhbGwgZ2V0Y21kbGluZSgpLCBvdmVyd3JpdGUgdGhlCisgICAgICBjbWRsaW5lLiAgQnV0IHRoZW4gd2UgYXJlIGVkaXRpbmcgYSBjb21tYW5kLWxpbmUgYWdhaW4uICBIb3cgdG8gYXZvaWQKKyAgICAgIHRoYXQgdGhlIHVzZXIgZ2V0cyBjb25mdXNlZCBieSB0aGUgc3RhY2sgb2YgY29tbWFuZCBsaW5lcz8KKyAgICAtIFVzZSBlZGl0KCkgZm9yIG5vcm1hbCBjbWRsaW5lIGVkaXRpbmc/ICBXb3VsZCBoYXZlIHRvIGludGVncmF0ZQorICAgICAgZ2V0Y21kbGluZSgpIGludG8gZWRpdCgpLiAgTmVlZCB0byBzb2x2ZSBjb25mbGljdHMgYmV0d2VlbiBJbnNlcnQgbW9kZQorICAgICAgYW5kIENvbW1hbmQtbGluZSBtb2RlIGNvbW1hbmRzLiAgTWFrZSBpdCB3b3JrIGxpa2UgS29ybiBzaGVsbCBhbmQgdGNzaC4KKyAgICAgIFByb2JsZW1zOgorCS0gSW5zZXJ0OiBjb21wbGV0aW9uIHdpdGggJ3dpbGRjaGFyJworCS0gSW5zZXJ0OiB1c2UgY21kbGluZSBhYmJyZXZpYXRpb25zCisJLSBJbnNlcnQ6IENUUkwtRCBkZWxldGVzIGluZGVudCBpbnN0ZWFkIG9mIGxpc3RpbmcgbWF0Y2hlcworCS0gTm9ybWFsOiBubyBDVFJMLVcgY29tbWFuZHMKKwktIE5vcm1hbDogbm8gIjoiIGNvbW1hbmRzPworCS0gTm9ybWFsOiBhbGxvdyBWaXN1YWwgbW9kZSBvbmx5IHdpdGhpbiBvbmUgbGluZS4KKyAgICAtIHdoZXJlIHRvIHNob3cgaW5zZXJ0L25vcm1hbCBtb2RlIG1lc3NhZ2U/ICBDaGFuZ2UgaGlnaGxpZ2h0aW5nIG9mCisgICAgICBjaGFyYWN0ZXIgaW4gZmlyc3QgY29sdW1uPworICAgIC0gSW1wbGVtZW50YXRpb24gaWRlYXM6CisgICAgICAtIFNldCAiY3Vyd2luIiBhbmQgImN1cmJ1ZiIgdG8gdGhlIGNvbW1hbmQgbGluZSB3aW5kb3cgYW5kIGJ1ZmZlci4KKyAgICAgIC0gY3Vyd2luLT53X3RvcGxpbmUgaXMgYWx3YXlzIGVxdWFsIHRvIGN1cndpbi0+d19jdXJzb3IubG51bS4KKyAgICAgIC0gbmV2ZXIgc2V0ICdudW1iZXInLCBubyBmb2xkaW5nLCBldGMuICBObyBzdGF0dXMgbGluZS4KKyAgICAgIC0gc3luYyB1bmRvIGFmdGVyIGVudGVyaW5nIGEgY29tbWFuZCBsaW5lPworICAgICAgLSB1c2UgTlZfTk9DTCBmbGFnIGZvciBjb21tYW5kcyB0aGF0IGFyZSBub3QgYWxsb3dlZCBpbiBDb21tYW5kLWxpbmUKKwlNb2RlLgorCisKK0NvbW1hbmQgbGluZSBjb21wbGV0aW9uOgorOCAgIENoYW5nZSBleHBhbmRfaW50ZXJhY3RpdmVseSBpbnRvIGEgZmxhZyB0aGF0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC4KKzggICBXaXRoIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIGFmdGVyICclJyBhbmQgJyMnLCBleHBhbmQgY3VycmVudC9hbHRlcm5hdGUKKyAgICBmaWxlIG5hbWUsIHNvIGl0IGNhbiBiZSBlZGl0ZWQuICBBbHNvIHdpdGggbW9kaWZpZXJzLCBzdWNoIGFzICIlOmgiLgorOCAgIFdoZW4gY29tcGxldGluZyBjb21tYW5kIG5hbWVzLCBlaXRoZXIgc29ydCB0aGVtIG9uIHRoZSBsb25nIG5hbWUsIG9yIGxpc3QKKyAgICB0aGVtIHdpdGggdGhlIG9wdGlvbmFsIHBhcnQgaW5zaWRlIFtdLgorNyAgIENvbXBsZXRpb24gb2YgbmV0d29yayBzaGFyZXMsIHBhdGNoIGJ5IFlhc3VoaXJvIE1hdHN1bW90by4KKzcgICBDb21wbGV0aW9uIG9mICI6bWFwIHggIjogZmlsbCBpbiB0aGUgY3VycmVudCBtYXBwaW5nLCBzbyB0aGF0IGl0IGNhbiBiZQorICAgIGVkaXRlZC4gKFN2ZW4gR3Vja2VzKQorNyAgIEFkZCBjb21wbGV0aW9uIGZvciB3aGVuIGVudGVyaW5nIGFuIGV4cHJlc3Npb24gYWZ0ZXIgQ1RSTC1SPSBhbmQgIj0uCisgICAgKFNlcnZhdGl1cyBCcmFuZHQpCistICAgRm9yICd3aWxkbWVudSc6IFNpbXBsaWZ5ICIuLi9iYXIiIHdoZW4gcG9zc2libGUuCistICAgV2hlbiB1c2luZyA8VXA+IGluIHdpbGRtZW51IG1vZGUgZm9yIGEgc3VibWVudSwgc2hvdWxkIGdvIGJhY2sgdG8gdGhlCisgICAgY3VycmVudCBtZW51LCBub3QgdGhlIGZpcnN0IG9uZS4gIEUuZy4sICI6ZW1lbnUgRmlsZS5TYXZlPFVwPiIuCis4ICAgRm9yICI6ZmluZCIgYW5kICI6c2ZpbmQiIGV4cGFuZCBmaWxlcyBmb3VuZCBpbiAncGF0aCcuCis4ICAgQWRkIGNtZGxpbmUgY29tcGxldGlvbiBmb3IgdGhlICI6ZGVidWciIGNvbW1hbmQuCis4ICAgV2hlbiB1c2luZyBiYWNrdGljayBleHBhbnNpb24sIHRoZSBleHRlcm5hbCBjb21tYW5kIG1heSB3cml0ZSBhIGdyZWV0aW5nCisgICAgbWVzc2FnZS4gIEFkZCBhbiBvcHRpb24gb3IgY29tbWFuZHMgdG8gcmVtb3ZlIGxpbmVzIHRoYXQgbWF0Y2ggYSByZWdleHA/Cis3ICAgV2hlbiBsaXN0aW5nIG1hdGNoZXMgb2YgZmlsZXMsIGRpc3BsYXkgdGhlIGNvbW1vbiBwYXRoIHNlcGFyYXRlbHkgZnJvbSB0aGUKKyAgICBmaWxlIG5hbWVzLCBpZiB0aGlzIG1ha2VzIHRoZSBsaXN0aW5nIHNob3J0ZXIuIChXZWJiKQorLSAgIEFkZCBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgIjppbGlzdCIgYW5kIGZyaWVuZHMsIHNob3cgbWF0Y2hpbmcKKyAgICBpZGVudGlmaWVycyAoV2ViYikuCis4ICAgQWRkIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIGZvciAib2xkIHZhbHVlIiBvZiBhIGNvbW1hbmQuICAiOmFyZ3MgPGtleT4iCisgICAgd291bGQgcmVzdWx0IGluIHRoZSBjdXJyZW50IGxpc3Qgb2YgYXJndW1lbnRzLCB3aGljaCB5b3UgY2FuIHRoZW4gZWRpdC4KKzcgICBBZGQgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gd2l0aCBDVFJMLVgsIGp1c3QgbGlrZSBJbnNlcnQgbW9kZSBjb21wbGV0aW9uLgorICAgIFVzZWZ1bCBmb3IgIjpzL3dvcmQveHgvIi4KKy0gICBBZGQgY29tbWFuZCB0byBnbyBiYWNrIHRvIHRoZSB0ZXh0IGFzIGl0IHdhcyBiZWZvcmUgY29tcGxldGlvbiBzdGFydGVkLgorICAgIEFsc28gdG8gYmUgdXNlZCBmb3IgPFVwPiBpbiB0aGUgY29tbWFuZCBsaW5lLgorLSAgIEFkZCAnd2lsZGxvbmdlc3QnIG9wdGlvbjogS2V5IHRvIHVzZSB0byBmaW5kIGxvbmdlc3QgY29tbW9uIG1hdGNoIGZvcgorICAgIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIChkZWZhdWx0IENUUkwtTCksIGxpa2UgJ3dpbGRjaGFyJy4gKENyZWd1dCkKKyAgICBBbHNvOiB3aGVuIHRoZXJlIGFyZSBzZXZlcmFsIG1hdGNoZXMsIHNob3cgdGhlbSBsaW5lIGEgQ1RSTC1ELgorLSAgIEFkZCBjb21wbGV0aW9uIGZvciBFbnZpcm9ubWVudCB2YXJpYWJsZXM6ICI6ZWNobyAkU0g8VGFiPiIgLT4gIiRTSEVMTCIuCisKKworQ29tbWFuZCBsaW5lIGhpc3Rvcnk6CistICAgQWRkICJLZXlXYXNUeXBlZCIgZmxhZzogSXQncyByZXNldCBiZWZvcmUgZWFjaCBjb21tYW5kIGFuZCBzZXQgd2hlbiBhCisgICAgY2hhcmFjdGVyIGZyb20gdGhlIGtleWJvYXJkIGlzIGNvbnN1bWVkLiBWYWx1ZSBpcyB1c2VkIHRvIGRlY2lkZSB0byBwdXQgYQorICAgIGNvbW1hbmQgbGluZSBpbiBoaXN0b3J5IG9yIG5vdC4gUHV0IGxpbmUgaW4gaGlzdG9yeSBpZiBpdCBkaWRuJ3QKKyAgICBjb21wbGV0ZWx5IHJlc3VsdGVkIGZyb20gb25lIG1hcHBpbmcuCistICAgV2hlbiB1c2luZyAiOmJyb3dzZSIsIGFsc28gcHV0IHRoZSByZXN1bHRpbmcgZWRpdCBjb21tYW5kIGluIHRoZSBoaXN0b3J5LAorICAgIHNvIHRoYXQgaXQgY2FuIGJlIHJlcGVhdGVkLiAoRGVtaXJlbCkKKworCitJbnNlcnQgbW9kZToKKzkgICBXaGVuICdhdXRvaW5kZW50JyBpcyBzZXQsIGhpdHRpbmcgPENSPiB0d2ljZSwgd2hpbGUgdGhlcmUgaXMgdGV4dCBhZnRlcgorICAgIHRoZSBjdXJzb3IsIGRvZXNuJ3QgZGVsZXRlIHRoZSBhdXRvaW5kZW50IGluIHRoZSByZXN1bHRpbmcgYmxhbmsgbGluZS4KKyAgICAoUmljaCBXYWxlcykgVGhpcyBpcyBWaSBjb21wYXRpYmxlLCBidXQgaXQgbG9va3MgbGlrZSBhIGJ1Zy4gIFJpY2ggaGFzIGEKKyAgICBzdWdnZXN0aW9uIGZvciBhIHBhdGNoIHRvIGZpeCB0aGlzLgorOCAgIFdoZW4gdXNpbmcgQ1RSTC1PIGluIEluc2VydCBtb2RlLCB0aGVuIGV4ZWN1dGluZyBhbiBpbnNlcnQgY29tbWFuZAorICAgICJhIiBvciAiaSIsIHNob3VsZCB3ZSByZXR1cm4gdG8gSW5zZXJ0IG1vZGUgYWZ0ZXIgPEVzYz4/IChFZ2dpbmspCisgICAgUGVyaGFwcyBpdCBjYW4gYmUgYWxsb3dlZCBhIHNpbmdsZSB0aW1lLCB0byBiZSBhYmxlIHRvIGRvCisgICAgIjxDLU8+MTBheHl6PEVzYz4iLiAgTmVzdGluZyB0aGlzIGZ1cnRoZXIgaXMgY29uZnVzaW5nLgorICAgICI6bWFwIDxGMj4gNWFhYmM8RXNjPiIgd29ya3Mgb25seSBvbmNlIGZyb20gSW5zZXJ0IG1vZGUuCis3ICAgVXNlIENUUkwtRyA8Y291bnQ+IHRvIHJlcGVhdCB3aGF0IGZvbGxvd3MuICBVc2VmdWwgZm9yIGluc2VydGluZyBhCisgICAgY2hhcmFjdGVyIG11bHRpcGxlIHRpbWVzIG9yIHJlcGVhdGluZyBDVFJMLVkuCis3ICAgTWFrZSAiOnN0YXJ0aW5zZXJ0IiBjb21tYW5kIHdvcmsgZGlyZWN0bHkgZm9yIGZ1bmN0aW9ucyBhbmQgc2NyaXB0cz8KKyAgICBBbHNvIG1ha2UgaXQgcG9zc2libGUgdG8gYXBwZW5kIChpdCdzIGRpZmZpY3VsdCBhdCBlbmQgb2YgbGluZSkuCisgICAgQW5kIGFkZCAiOnN0YXJ0cmVwbGFjZSIgKHBhdGNoIGJ5IENoYXJsZXMgQ2FtcGJlbGwsIDIwMDQgSmFuIDksCisgICAgaHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI1BhdGNoKQorNyAgIFVzZSAnbWF0Y2hwYWlycycgZm9yICdzaG93bWF0Y2gnOiBXaGVuIGluc2VydGluZyBhIGNoYXJhY3RlciBjaGVjayBpZiBpdAorICAgIGFwcGVhcnMgaW4gdGhlIHJocyBvZiAnbWF0Y2hwYWlycycuCistICAgSW4gSW5zZXJ0IG1vZGUgKGFuZCBjb21tYW5kIGxpbmUgZWRpdGluZz8pOiBBbGxvdyB1bmRvIG9mIHRoZSBsYXN0IHR5cGVkCisgICAgY2hhcmFjdGVyLglUaGlzIGlzIHVzZWZ1bCBmb3IgQ1RSTC1VLCBDVFJMLVcsIGRlbGV0ZSBhbmQgYmFja3NwYWNlLCBhbmQKKyAgICBhbHNvIGZvciBjaGFyYWN0ZXJzIHRoYXQgd3JhcCB0byB0aGUgbmV4dCBsaW5lLgorICAgIEFsc286IGJlIGFibGUgdG8gdW5kbyBDVFJMLVIgKGluc2VydCByZWdpc3RlcikuCisgICAgUG9zc2libHkgdXNlICdiYWNrc3BhY2UnPSJ3aG9sZSIgZm9yIGEgbW9kZSB3aGVyZSBhdCBsZWFzdCBhIDxDUj4gdGhhdAorICAgIGluc2VydHMgYXV0b2luZGVudCBpcyB1bmRvbmUgYnkgYSBzaW5nbGUgPEJTPi4KKy0gICBVc2UgQ1RSTC1HIGluIEluc2VydCBtb2RlIGZvciBhbiBleHRyYSByYW5nZSBvZiBjb21tYW5kcywgbGlrZSAiZyIgaW4KKyAgICBOb3JtYWwgbW9kZS4KKy0gICBNYWtlICdwYXN0ZScgd29yayB3aXRob3V0IHJlc2V0dGluZyBvdGhlciBvcHRpb25zLCBidXQgb3ZlcnJpZGUgdGhlaXIKKyAgICB2YWx1ZS4gIEF2b2lkcyBwcm9ibGVtcyB3aGVuIGNoYW5naW5nIGZpbGVzIGFuZCBtb2RlbGluZXMgb3IgYXV0b2NvbW1hbmRzCisgICAgYXJlIHVzZWQuCistICAgV2hlbiB0eXBpbmcgQ1RSTC1WIGFuZCBhIGRpZ2l0IGhpZ2hlciB0aGFuIDIsIG9ubHkgZXhwZWN0IHR3byBkaWdpdHMuCistICAgSW5zZXJ0IGJpbmFyeSBudW1iZXJzIHdpdGggQ1RSTC1WIGIuCistICAgTWFrZSBpdCBwb3NzaWJsZSB0byB1bmRvIDxCUz4sIDxDLVc+IGFuZCA8Qy1VPi4gIEJhc2ggdXNlcyBDVFJMLVkuCisKKworJ2NpbmRlbnQnLCAnc21hcnRpbmRlbnQnOgorOCAgIFdyb25nIGluZGVudCBmb3IgIjoiIGFmdGVyIGEgbWV0aG9kIHdpdGggbGluZSBicmVhayBpbiBhcmd1bWVudHM6CisJRm9vOjpGb28gKGludCBvbmUsCisJCSAgICBpbnQgdHdvKQorCTogc29tZXRoaW5nKDQpCisJe30KKzggICBXcm9uZyBpbmRlbnQgZm9yICI6IiBhZnRlciBhIG1ldGhvZCB3aXRoIG11bHRpcGxlIGxpbmVzOgorCUZvbzo6Rm9vIChpbnQgb25lLCBpbnQgdHdvKQorCQk6IHNvbWV0aGluZyg0KSwKKwlzb21ldGhpbmdlbHNlKDMpCisJe30KKzkgICBUb28gbXVjaCBpbmRlbnQgZm9yICJsdWx1IjogKFV3ZSBaZWlzYmVyZ2VyKQorICAgICAgIGludCBtYWluICgpCisgICAgICAgeworCSBpZiAobGFsYSkKKwkgICBkbworCSAgICAgKysoKmxvbG8pOworCSAgIHdoaWxlIChsaWxpCisJCSAgJiYgbGVsZSk7CisJICAgbHVsdTsKKyAgICAgICB9Cis5ICAgRnVuY3Rpb24gZ2V0cyBleHRyYSBpbmRlbnQ6IChKYW1heCkKKwl2b2lkIGZ1bmN0aW9uKGludCBwYXJhbSkgeworCSAgICAgaWYgKGZhbHNlKQorCQkgcmV0dXJuOworCX0KKzkgICBicmFjZSBub3QgaW5kZW50ZWQgY29ycmVjdGx5OgorCWNhc2UgJ2MnOiAgIGlmIChjb25kKQorCQkJeworICAgIFNob3VsZCBhbGlnbiB3aXRoICJpZiIgaW4gY2FzZSBzdGF0ZW1lbnQuCis3ICAgQWxsb3cgYWxpZ25pbmcgYSBjbG9zaW5nICIpIiB3aXRoIHRoZSBsaW5lIGFib3ZlLCBpbnN0ZWFkIG9mIHRoZSBtYXRjaGluZworICAgICIoIjogKFJpZWhtKSBpZiAoYXNkZmFzZGYgJiYKKwkJCWFzZGYKKwkJCSkKKzggICBKYXZhOiBJbnNpZGUgYW4gYW5vbnltb3VzIGNsYXNzLCBhZnRlciBhbiAiZWxzZSIgb3IgInRyeSIgdGhlIGluZGVudCBpcworICAgIHRvbyBzbWFsbC4gKFZpbmNlbnQgQmVyZ2JhdWVyKQorOCAgIEluIEMrKyBpdCdzIHBvc3NpYmxlIHRvIGhhdmUge30gaW5zaWRlICgpOiAoS2lyc2huYSkKKwkJZnVuYygKKwkJCW5ldyBTdHJpbmdbXSB7CisJCQkgICAgImFzZGYiLAorCQkJICAgICJhc2RmIgorCQkJfQorCQkgICAgKTsKKzcgICBTZXBhcmF0ZSAiKDAiIG9wdGlvbiBpbnRvIGluc2lkZS9vdXRzaWRlIGEgZnVuY3Rpb24gKFplbGxuZXIpOgorCWZ1bmMoCisJICAgaW50IHgpCS8vIGluZGVudCBsaWtlICIoNCIKKwl7CisJICAgaWYgKGEKKwkgICAgICAgJiYgYikJLy8gaW5kZW50IGxpa2UgIigwIgorOCAgIFN0cmFuZ2UgcHJvYmxlbSB3aXRoIHRoaXMgY29kZSwgImhlbGxvIiBpcyBpbmRlbnRlZCB3cm9uZzogKEdhcnkgSG9sbG93YXkpCisgICAgbWFpbigpIHsgY2hhcglmb29bXSA9ICIvKiI7CisJIC8qIFRoaXMgaXMgYSBjb21tZW50OyB0aGUgaW5kZW50YXRpb24gb2YgQworCSAgKiBzb3VyY2UgYmVsb3cgdGhpcyBjb21tZW50IGdldHMgbWVzc2VkIHVwIGR1ZSB0byB0aGUgc3RyaW5nIGFib3ZlLgorCSAgKi8KKwkgIGhlbGxvCis5ICAgVXNpbmcgInsiIGluIGEgY29tbWVudDogKEhlbG11dCBTdGllZ2xlcikKKyAgICBpZiAoYSkKKyAgICB7CisJICAgIGlmIChiKQorCSAgICB7CisJCSAgICAvLyB7CisJICAgIH0KKwkgICAgfSA8LS0gdGhpcyBpcyBpbmRlbnRlZCBpbmNvcnJlY3QKKzkgICBXcm9uZyBpbmRlbnQgZm9yIGNpbm89KDQsIHJlbW92aW5nIHRoZSAodm9pZCkgZml4ZXMgaXQ6IChaZWxsbmVyKQorCSh2b2lkKSBNeUZhbmN5RnVuY3Rpb24oCisJCQkgICAgICAgYXJndW1lbnQpOworLSAgIE1ha2Ugc21hcnRpbmRlbnRpbmcgY29uZmlndXJhYmxlLiBBZGQgJ3Npb3B0aW9ucycsIGUuZy4gJyMnIHNldHRpbmcgdGhlCisgICAgaW5kZW50IHRvIDAgc2hvdWxkIGJlIHN3aXRjaGVkIG9uL29mZi4KKzcgICBTdXBwb3J0IEFOU0kgc3R5bGUgZnVuY3Rpb24gaGVhZGVyLCB3aXRoIGVhY2ggYXJndW1lbnQgb24gaXRzIG93biBsaW5lLgorLSAgICJbcCIgYW5kICJdcCIgc2hvdWxkIHVzZSAnY2luZGVudCcgY29kZSBpZiBpdCdzIG9uIChvbmx5IGZvciB0aGUgZmlyc3QKKyAgICBsaW5lKS4KKy0gICBBZGQgb3B0aW9uIHRvICdjaW5kZW50JyB0byBzZXQgaW5kZW50IGZvciBjb21tZW50cyBvdXRzaWRlIG9mIHt9PworLSAgIE1ha2UgYSBjb21tYW5kIHRvIGxpbmUgdXAgYSBjb21tZW50IGFmdGVyIGEgY29kZSBsaW5lIHdpdGggYSBwcmV2aW91cworICAgIGNvbW1lbnQgYWZ0ZXIgYSBjb2RlIGxpbmUuCUNhbiAnY2luZGVudCcgZG8gdGhpcyBhdXRvbWF0aWNhbGx5PworNyAgIEFkZCAnaicgZmxhZyB0byAnZm9ybWF0b3B0aW9ucyc6IFJlbW92ZSBjb21tZW50IGxlYWRlciB3aGVuIGpvaW5pbmcgbGluZXMuCistICAgV2hlbiAnY2luZGVudCdpbmcgYSAnfScsIHNob3dtYXRjaCBpcyBkb25lIGJlZm9yZSBmaXhpbmcgdGhlIGluZGVudC4gIEl0CisgICAgbG9va3MgYmV0dGVyIHdoZW4gdGhlIGluZGVudCBpcyBmaXhlZCBiZWZvcmUgdGhlIHNob3dtYXRjaC4gKFdlYmIpCistICAgQWRkIG9wdGlvbiB0byBtYWtlIGluZGVudGluZyB3b3JrIGluIGNvbW1lbnRzIHRvbyAoZm9yIGNvbW1lbnRlZC1vdXQKKyAgICBjb2RlKSwgdW5sZXNzIHRoZSBsaW5lIHN0YXJ0cyB3aXRoICIqIi4KKy0gICBEb24ndCB1c2UgJ2NpbmRlbnQnIHdoZW4gZG9pbmcgZm9ybWF0dGluZyB3aXRoICJncSI/CistICAgV2hlbiBmb3JtYXR0aW5nIGEgY29tbWVudCBhZnRlciBzb21lIHRleHQsIGluc2VydCB0aGUgJyonIGZvciB0aGUgbmV3IGxpbmUKKyAgICAoaW5kZW50IGlzIGNvcnJlY3QgaWYgJ2NpbmRlbnQnIGlzIHNldCwgYnV0ICcqJyBkb2Vzbid0IGdldCBpbnNlcnRlZCkuCis4ICAgV2hlbiAnY29tbWVudHMnIGhhcyBib3RoICJzMTovKixtYjoqLGV4OiovIiBhbmQgInMxOigqLG1iOiosZXg6KikiLCB0aGUKKyAgICAneCcgZmxhZyBhbHdheXMgdXNlcyB0aGUgZmlyc3QgbWF0Y2guICBOZWVkIHRvIGNvbnRpbnVlIGxvb2tpbmcgZm9yIG1vcmUKKyAgICBtYXRjaGVzIG9mICIqIiBhbmQgcmVtZW1iZXIgYWxsIGNoYXJhY3RlcnMgdGhhdCBjb3VsZCBlbmQgdGhlIGNvbW1lbnQuCistICAgRm9yIHNtYXJ0aW5kZW50OiBXaGVuIHR5cGluZyAnZWxzZScgbGluZSBpdCB1cCB3aXRoIG1hdGNoaW5nICdpZicuCistICAgJ3NtYXJ0aW5kZW50JzogYWxsb3cgcGF0dGVybnMgaW4gJ2NpbndvcmRzJywgZm9yIGUuZy4gVGVYIGZpbGVzLCB3aGVyZQorICAgIGxpbmVzIHN0YXJ0IHdpdGggIlxpdGVtIi4KKy0gICBTdXBwb3J0IHRoaXMgc3R5bGUgb2YgY29tbWVudHMgKHdpdGggYW4gb3B0aW9uKTogKEJyb3duKQorCS8qIGhlcmUgaXMgYSBjb21tZW50IHRoYXQKKwlpcyBqdXN0IGF1dG9pbmRlbnRlZCwgYW5kCisJbm90aGluZyBlbHNlICovCistICAgQWRkIHdvcmRzIHRvICdjaW53b3JkcycgdG8gcmVkdWNlIHRoZSBpbmRlbnQsIGUuZy4sICJlbmQiIG9yICJmaSIuCis3ICAgVXNlIFRhYnMgZm9yIHRoZSBpbmRlbnQgb2Ygc3RhcnRpbmcgbGluZXMsIHBhZCB3aXRoIHNwYWNlcyBmb3IKKyAgICBjb250aW51YXRpb24gbGluZXMuICBBbGxvd3MgY2hhbmdpbmcgJ3RhYnN0b3AnIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUKKyAgICBpbmRlbnRzLgorICAgIEFuZC9vcjogQWRkIG9wdGlvbiB0byBjb3B5IGluZGVudCBhcy1pcywgd2l0aG91dCBjaGFuZ2luZyBzcGFjZXMgdG8gdGFicy4KKyAgICBhbHNvIGZvciAnYXV0b2luZGVudCcuICAna2VlcHRhYnMnOiB3aGVuIHNldCBkb24ndCBjaGFuZ2UgdGhlIHRhYnMgYW5kCisgICAgc3BhY2VzIHVzZWQgZm9yIGluZGVudCwgd2hlbiB0aGUgaW5kZW50IHJlbWFpbnMgdGhlIHNhbWUgb3IgaW5jcmVhc2VzLgorCisKK0phdmE6Cis4ICAgQ2FuIGhhdmUge30gY29uc3RydWN0cyBpbnNpZGUgcGFyZW5zLiAgSW5jbHVkZSBjaGFuZ2VzIGZyb20gU3RldmUKKyAgICBPZGVuZGFobD8KKzggICBSZWNvZ25pemUgImltcG9ydCBqYXZhLnV0aWwuVmVjdG9yIiBhbmQgdXNlICRDTEFTU1BBVEggdG8gZmluZCBmaWxlcyBmb3IKKyAgICAiW2kiIGNvbW1hbmRzIGFuZCBmcmllbmRzLgorLSAgIEZvciBmaWxlcyBmb3VuZCB3aXRoICdpbmNsdWRlJzogaGFuZGxlICIqIiBpbiBpbmNsdWRlZCBuYW1lLCBmb3IgSmF2YS4KKyAgICAoSmFzb24pCistICAgSG93IHRvIG1ha2UgYSAicGFja2FnZSBqYXZhLnV0aWwiIGNhdXNlIGFsbCBjbGFzc2VzIGluIHRoZSBwYWNrYWdlIHRvIGJlCisgICAgc2VhcmNoZWQ/ICBBbHNvIGZvciAiaW1wb3J0IGphdmEudXRpbC4qIi4gKE1hcmsgQnJvcGh5KQorCisKKydjb21tZW50cyc6Cis4ICAgV2hlbiBmb3JtYXR0aW5nIEMgY29tbWVudHMgdGhhdCBhcmUgYWZ0ZXIgY29kZSwgdGhlICIqIiBpc24ndCByZXBlYXRlZAorICAgIGxpa2UgaXQncyBkb25lIHdoZW4gdGhlcmUgaXMgbm8gY29kZS4gIEFuZCB0aGVyZSBpcyBubyBhdXRvbWF0aWMgd3JhcHBpbmcuCisgICAgUmVjb2duaXplIGNvbW1lbnRzIHRoYXQgY29tZSBhZnRlciBjb2RlLiAgU2hvdWxkIGluc2VydCB0aGUgY29tbWVudCBsZWFkZXIKKyAgICB3aGVuIGl0J3MgIiMiIG9yICIvLyIuCis3ICAgV2hlbiB1c2luZyAiY29tbWVudHM9Zmc6LS0iLCBWaW0gaW5zZXJ0cyB0aHJlZSBzcGFjZXMgZm9yIGEgbmV3IGxpbmUuCisgICAgV2hlbiBoaXR0aW5nIGEgVEFCLCB0aGVzZSBzcGFjZXMgY291bGQgYmUgcmVtb3ZlZC4KKzcgICBUaGUgJ24nZXN0aW5nIGZsYWcgZG9lc24ndCBkbyB0aGUgaW5kZW50aW5nIG9mIHRoZSBsYXN0IChyaWdodG1vc3QpIGl0ZW0uCis2ICAgTWFrZSBzdHJpbmdzIGluICdjb21tZW50cycgb3B0aW9uIGEgUkUsIHRvIGJlIGFibGUgdG8gbWF0Y2ggbW9yZQorICAgIGNvbXBsaWNhdGVkIHRoaW5ncy4gKFBoaWxsaXBwcykgIFVzZSBhIHNwZWNpYWwgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGEKKyAgICByZWdleHAgaXMgdXNlZC4KKzggICBNYWtlIHRoZSAnY29tbWVudHMnIG9wdGlvbiB3aXRoICIvKiAqICovIiBsaW5lcyBvbmx5IHJlcGVhdCB0aGUgIioiIGxpbmUKKyAgICB3aGVuIHRoZXJlIGlzIGEgIi8qIiBiZWZvcmUgaXQ/ICBPciBpbmNsdWRlIHRoaXMgaW4gJ2NpbmRlbnQnPworCisKK1ZpcnR1YWwgZWRpdDoKKzggICBNYWtlIHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciB3b3JrIHRvIG1vdmUgdGhlIHRleHQgZnVydGhlciBsZWZ0LgorNyAgIEFkZCBhIG1vZGUgd2hlcmUgdGhlIGN1cnNvciBpcyBvbmx5IGFsbG93ZWQgdG8gZ28gb25lIGNoYXJhY3RlciBhZnRlciB0aGUKKyAgICBlbmQgb2YgdGhlIGxpbmU/Cis3ICAgQWxsb3cgc3BlY2lmeWluZyBpdCBzZXBhcmF0ZWx5IGZvciBUYWJzIGFuZCBiZXlvbmQgZW5kLW9mLWxpbmU/CisKKworVGV4dCBvYmplY3RzOgorOCAgIEFkZCB0ZXN0IHNjcmlwdCBmb3IgdGV4dCBvYmplY3QgY29tbWFuZHMgImF3IiwgImlXIiwgZXRjLgorNyAgIEFkZCB0ZXh0IG9iamVjdCBmb3IgY3VycmVudCBzZWFyY2ggcGF0dGVybjogImEvIiBhbmQgImkvIi4gIE1ha2VzIGl0CisgICAgcG9zc2libGUgdG8gdHVybiB0ZXh0IGhpZ2hsaWdodGVkIGZvciAnaGxzZWFyY2gnIGludG8gYSBWaXN1YWwgYXJlYS4KKzggICBBZGQgImdwIiBhbmQgImdQIiBjb21tYW5kczogaW5zZXJ0IHRleHQgYW5kIG1ha2Ugc3VyZSB0aGVyZSBpcyBhIHNpbmdsZQorICAgIHNwYWNlIGJlZm9yZSBpdCwgdW5sZXNzIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSwgYW5kIGFmdGVyIGl0LCB1bmxlc3MgYXQKKyAgICB0aGUgZW5kIG9mIHRoZSBsaW5lIG9yIGJlZm9yZSBhICIuIi4KKzcgICBBZGQgb2JqZWN0cyB3aXRoIGJhY2t3YXJkcyBleHRlbnNpb24/ICBVc2UgIkkiIGFuZCAiQSIuICBUaHVzICIyZEFzIgorICAgIGRlbGV0ZXMgdGhlIGN1cnJlbnQgYW5kIHByZXZpb3VzIHNlbnRlbmNlLiAoSmVucyBQYXVsdXMpCis3ICAgQWRkICJneyIgYW5kICJnfSIgdG8gbW92ZSB0byB0aGUgZmlyc3QvbGFzdCBjaGFyYWN0ZXIgb2YgYSBwYXJhZ3JhcGgKKyAgICAoaW5zdGVhZCBvZiB0aGUgbGluZSBqdXN0IGJlZm9yZS9hZnRlciBhIHBhcmFncmFwaCBhcyB3aXRoICJ7IiBhbmQgIn0iKS4KKzggICBBZGQgImEnIiBhbmQgJ2EiJzogYSBzaW5nbGUgb3IgZG91YmxlIHF1b3RlZCBzdHJpbmcuIChUaW0gQ2hhc2UpCisgICAgUGF0Y2ggZnJvbSBUYXJvIE11cmFva2EgKDIwMDMgRGVjIDE2KS4KKzYgICBJZ25vcmUgY29tbWVudCBsZWFkZXJzIGZvciBvYmplY3RzLiAgTWFrZSAiZGFzIiB3b3JrIGluIHJlcGx5LWVtYWlsLgorNSAgIE1ha2UgaXQgcG9zc2libGUgdG8gdXNlIHN5bnRheCBncm91cCBtYXRjaGVzIGFzIGEgdGV4dCBvYmplY3QuICBGb3IKKyAgICBleGFtcGxlLCBkZWZpbmUgYSAiY2NJdGVtIiBncm91cCwgdGhlbiBkbyAiZGE8Y2NJdGVtPiIgdG8gZGVsZXRlIG9uZS4KKyAgICBPciwgbWF5YmUganVzdCBkZWZpbmUgImRhaSIsIGRlbGV0ZS1hbi1pdGVtLCB0byBkZWxldGUgdGhlIHN5bnRheCBpdGVtIHRoZQorICAgIGN1cnNvciBpcyBvbi4KKworCitTZWxlY3QgbW9kZToKKzggICBJbiBibG9ja3dpc2UgbW9kZSwgdHlwZWQgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgdGhlIGJsb2NrLAorICAgIGJhY2tzcGFjZSBkZWxldGVzIGEgY29sdW1uIGJlZm9yZSB0aGUgYmxvY2suIChTdGV2ZSBIYWxsKQorNyAgIEFsdC1sZWZ0bW91c2Ugc3RhcnRzIGJsb2NrIG1vZGUgc2VsZWN0aW9uIGluIE1TIFdvcmQuCisgICAgU2VlIGh0dHA6Ly93d3cudmltLm9yZy90aXBzL3RpcC5waHA/dGlwX2lkPTc0MworNyAgIEFkZCBDbWRsaW5lLXNlbGVjdCBtb2RlLiAgTGlrZSBTZWxlY3QgbW9kZSwgYnV0IHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAtIENoYW5nZSBndWlfc2VuZF9tb3VzZV9ldmVudCgpIHRvIHBhc3Mgb24gbW91c2UgZXZlbnRzIHdoZW4gJ21vdXNlJworICAgICAgY29udGFpbnMgJ0MnIG9yICdBJy4KKyAgICAtIENhdGNoIG1vdXNlIGV2ZW50cyBpbiBleF9nZXRsbi5jLiAgQWxzbyBzaGlmdC1jdXJzb3IsIGV0Yy4sIGxpa2UgaW4KKyAgICAgIG5vcm1hbF9jbWQoKS4KKyAgICAtIHJlbWVtYmVyIHN0YXJ0IGFuZCBlbmQgb2Ygc2VsZWN0aW9uIGluIGNtZGxpbmVfaW5mby4KKyAgICAtIFR5cGluZyB0ZXh0IHJlcGxhY2VzIHRoZSBzZWxlY3Rpb24uCisKKworVmlzdWFsIG1vZGU6CistICAgV2hlbiBkcmFnZ2luZyB0aGUgVmlzdWFsIHNlbGVjdGlvbiB3aXRoIHRoZSBtb3VzZSBhbmQgJ3Njcm9sbG9mZicgaXMgemVybywKKyAgICBiZWhhdmUgbGlrZSAnc2Nyb2xsb2ZmJyBpcyBvbmUsIHNvIHRoYXQgdGhlIHRleHQgc2Nyb2xscyB3aGVuIHRoZSBwb2ludGVyCisgICAgaXMgaW4gdGhlIHRvcCBsaW5lLgorOCAgIFdoZW4gdXNpbmcgIkkiIG9yICJBIiBpbiBWaXN1YWwgYmxvY2sgbW9kZSwgc2hvcnQgbGluZXMgZG8gbm90IGdldCB0aGUgbmV3CisgICAgdGV4dC4gIG1ha2UgaXQgcG9zc2libGUgdG8gYWRkIHRoZSB0ZXh0IHRvIHNob3J0IGxpbmVzIHRvbywgd2l0aCBwYWRkaW5nCisgICAgd2hlcmUgbmVlZGVkLgorNyAgIFdpdGggYSBWaXN1YWwgYmxvY2sgc2VsZWN0ZWQsICIyeCIgZGVsZXRlcyBhIGJsb2NrIG9mIGRvdWJsZSB0aGUgd2lkdGgsCisgICAgIjN5IiB5YW5rcyBhIGJsb2NrIG9mIHRyaXBsZSB3aWR0aCwgZXRjLgorNyAgIFdoZW4gc2VsZWN0aW5nIGxpbmV3aXNlLCB1c2luZyAiaXRleHQiIHNob3VsZCBpbnNlcnQgInRleHQiIGF0IHRoZSBzdGFydAorICAgIG9mIGVhY2ggc2VsZWN0ZWQgbGluZS4KKzggICBXaGF0IGlzICJSIiBzdXBwb3NlZCB0byBkbyBpbiBWaXN1YWwgbW9kZT8KKzggICBNYWtlIFZpc3VhbCBtb2RlIGxvY2FsIHRvIHRoZSBidWZmZXIuICBBbGxvdyBjaGFuZ2luZyB0byBhbm90aGVyIGJ1ZmZlci4KKyAgICBXaGVuIHN0YXJ0aW5nIGEgbmV3IFZpc3VhbCBzZWxlY3Rpb24sIHJlbW92ZSB0aGUgVmlzdWFsIHNlbGVjdGlvbiBpbiBhbnkKKyAgICBvdGhlciBidWZmZXIuIChSb24gQWFyb24pCis4ICAgU3VwcG9ydCBkcmFnZ2luZyB0aGUgVmlzdWFsIGFyZWEgdG8gZHJvcCBpdCBzb21ld2hlcmUgZWxzZS4gKFJvbiBBYXJvbiwKKyAgICBCZW4gR29kZnJleSkKKzcgICBTdXBwb3J0IGRyYWdnaW5nIHRoZSBWaXN1YWwgYXJlYSB0byBkcm9wIGl0IGluIGFub3RoZXIgcHJvZ3JhbSwgYW5kCisgICAgcmVjZWl2ZSBkcm9wcGVkIHRleHQgZnJvbSBhbm90aGVyIHByb2dyYW0uIChCZW4gR29kZnJleSkKKzcgICBXaXRoIGJsb2Nrd2lzZSBWaXN1YWwgbW9kZSBhbmQgImMiLCAiQyIsICJJIiwgIkEiLCBldGMuLCBhbGxvdyB0aGUgdXNlIG9mCisgICAgYSA8Q1I+LiAgVGhlIGVudGVyZWQgbGluZXMgYXJlIHJlcGVhdGVkIG92ZXIgdGhlIFZpc3VhbCBhcmVhLgorNyAgIENUUkwtViA6cyBzaG91bGQgc3Vic3RpdHV0ZSBvbmx5IGluIHRoZSBibG9jaywgbm90IHRvIHdob2xlIGxpbmVzLiAoRGF2aWQKKyAgICBZb3VuZyBpcyB3b3JraW5nIG9uIHRoaXMpCis3ICAgRmlsdGVyaW5nIGEgYmxvY2sgc2hvdWxkIG9ubHkgYXBwbHkgdG8gdGhlIGJsb2NrLCBub3QgdG8gdGhlIHdob2xlIGxpbmVzLgorICAgIFdoZW4gdGhlIG51bWJlciBvZiBsaW5lcyBpcyBpbmNyZWFzZWQsIGFkZCBsaW5lcy4gV2hlbiBkZWNyZWFzZWQsIHBhZGQgd2l0aAorICAgIHNwYWNlcyBvciBkZWxldGU/IFVzZSAiOmA8LGA+IiBvbiB0aGUgY29tbWFuZCBsaW5lLgorOCAgIEFmdGVyIGZpbHRlcmluZyB0aGUgVmlzdWFsIGFyZWEsIG1ha2UgImd2IiBzZWxlY3QgdGhlIGZpbHRlcmVkIHRleHQ/CisgICAgQ3VycmVudGx5ICJndiIgb25seSBzZWxlY3RzIGEgc2luZ2xlIGxpbmUsIG5vdCB1c2VmdWwuCis3ICAgRG9uJ3QgbW92ZSB0aGUgY3Vyc29yIHdoZW4gc2Nyb2xsaW5nPyAgTmVlZGVkIHdoZW4gdGhlIHNlbGVjdGlvbiBzaG91bGQKKyAgICBzdGF5IHRoZSBzYW1lLiAgU2Nyb2xsIHRvIHRoZSBjdXJzb3IgYXQgYW55IG1vdmVtZW50IGNvbW1hbmQuICBXaXRoIGFuCisgICAgb3B0aW9uIQorNyAgIEluIFZpc3VhbCBibG9jayBtb2RlLCBuZWVkIHRvIGJlIGFibGUgdG8gZGVmaW5lIGEgY29ybmVyIG9uIGEgcG9zaXRpb24KKyAgICB0aGF0IGRvZXNuJ3QgaGF2ZSB0ZXh0PyAgQWxzbzogd2hlbiB1c2luZyB0aGUgbW91c2UsIGJlIGFibGUgdG8gc2VsZWN0CisgICAgcGFydCBvZiBhIFRBQi4gIEV2ZW4gbW9yZTogQWRkIGEgbW9kZSB3aGVyZSB0aGUgY3Vyc29yIGNhbiBiZSBvbiBhIHNjcmVlbgorICAgIHBvc2l0aW9uIHdoZXJlIHRoZXJlIGlzIG5vIHRleHQuICBXaGVuIHR5cGluZywgYWRkIHNwYWNlcyB0byBmaWxsIHRoZSBnYXAuCisgICAgT3RoZXIgc29sdXRpb246IEFsd2F5cyB1c2UgY3Vyc3dhbnQsIHNvIHRoYXQgeW91IGNhbiBtb3ZlIHRoZSBjdXJzb3IgdG8KKyAgICB0aGUgcmlnaHQgY29sdW1uLCBhbmQgdGhlbiB1c2UgdXAvZG93biBtb3ZlbWVudHMgdG8gc2VsZWN0IHRoZSBsaW5lLAorICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGNvbHVtbi4KKzYgICAiOmxlZnQiIGFuZCAiOnJpZ2h0IiBzaG91bGQgd29yayBpbiBWaXN1YWwgYmxvY2sgbW9kZS4KKzcgICBGb3IgVmlzdWFsIG1vZGU6IENvbW1hbmQgdG8gZG8gYSBzZWFyY2ggZm9yIHRoZSBzdHJpbmcgaW4gdGhlIG1hcmtlZCBhcmVhLgorICAgIE9ubHkgd2hlbiBmZXdlciB0aGFuIHR3byBsaW5lcy4gVXNlICJnLyIgYW5kICJnYiIuICBQYXRjaCBmcm9tIFllZ2FwcGFuCisgICAgTGFrc2htYW5hbi4KKzcgICBDVFJMLUkgYW5kIENUUkwtTyBzaG91bGQgd29yayBpbiBWaXN1YWwgbW9kZSwgYnV0IG9ubHkganVtcCB0byBtYXJrcyBpbiB0aGUKKyAgICBjdXJyZW50IGJ1ZmZlci4KKzcgICBDVFJMLUEgYW5kIENUUkwtWCBzaG91bGQgaW5jcmVhc2UvZGVjcmVhc2UgYWxsIG51bWJlcnMgaW4gdGhlIFZpc3VhbCBhcmVhLgorNiAgIEluIG5vbi1CbG9jayBtb2RlLCAiSSIgc2hvdWxkIGluc2VydCB0aGUgc2FtZSB0ZXh0IGluIGZyb250IG9mIGVhY2ggbGluZSwKKyAgICBiZWZvcmUgdGhlIGZpcnN0IG5vbi1ibGFuaywgImdJIiBpbiBjb2x1bW4gMS4KKzYgICBJbiBub24tQmxvY2sgbW9kZSwgIkEiIHNob3VsZCBhcHBlbmQgdGhlIHNhbWUgdGV4dCBhZnRlciBlYWNoIGxpbmUuCis2ICAgIjonPCwnPnNvdXJjZSIgc2hvdWxkIHJlYWQgdGhlIHNlbGVjdGVkIGxpbmVzIGFuZCAiOnNvdXJjZSIgdGhlbS4KKzYgICBXaGVuIGluIGJsb2Nrd2lzZSB2aXN1YWwgc2VsZWN0aW9uIChDVFJMLVYpLCBhbGxvdyBjdXJzb3IgdG8gYmUgcGxhY2VkCisgICAgcmlnaHQgb2YgdGhlIGxpbmUuIENvdWxkIGFsc28gYWxsb3cgY3Vyc29yIHRvIGJlIHBsYWNlZCBhbnl3aGVyZSBvbiBhIFRBQgorICAgIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVyLgorNiAgIEFkZCBjb21tYW5kcyB0byBtb3ZlIHNlbGVjdGVkIHRleHQsIHdpdGhvdXQgZGVzZWxlY3RpbmcuCisKKworTW9yZSBhZHZhbmNlZCByZXBlYXRpbmcgY29tbWFuZHM6CistICAgQWRkICIuIiBjb21tYW5kIGZvciB2aXN1YWwgbW9kZTogcmVkbyBsYXN0IHZpc3VhbCBjb21tYW5kIChlLmcuICI6Zm10IikuCis3ICAgUmVwZWF0aW5nICJkOntjbWR9IiB3aXRoICIuIiBkb2Vzbid0IHdvcmsuIChCZW5qaSBGaXNoZXIpIFNvbWVob3cgcmVtZW1iZXIKKyAgICB0aGUgY29tbWFuZCBsaW5lIHNvIHRoYXQgaXQgY2FuIGJlIHJlcGVhdGVkPworLSAgIEFkZCAiLiIgY29tbWFuZCBhZnRlciBvcGVyYXRvcjogcmVwZWF0IGxhc3QgY29tbWFuZCBvZiBzYW1lIG9wZXJhdG9yLiBFLmcuCisgICAgImMuIiB3aWxsIHJlcGVhdCBsYXN0IGNoYW5nZSwgYWxzbyB3aGVuICJ4IiB1c2VkIHNpbmNlIHRoZW4gKFdlYmIpLgorICAgICJ5LiIgd2lsbCByZXBlYXQgbGFzdCB5YW5rLgorICAgICJjMi4iIHdpbGwgcmVwZWF0IHRoZSBsYXN0IGJ1dCBvbmUgY2hhbmdlPworICAgIEFsc286IGtlZXAgaGlzdG9yeSBvZiBOb3JtYWwgbW9kZSBjb21tYW5kcywgYWRkIGNvbW1hbmQgdG8gbGlzdCB0aGUgaGlzdG9yeQorICAgIGFuZC9vciBwaWNrIGFuIG9sZGVyIGNvbW1hbmQuCistICAgSGlzdG9yeSBzdGFjayBmb3IgLiBjb21tYW5kPyAgVXNlICJnLiIgY29tbWFuZC4KKworCitNYXBwaW5ncyBhbmQgQWJicmV2aWF0aW9uczoKKzggICBMZXQgIjp2ZXJib3NlIG1hcCB4eCIgcmVwb3J0IHdoZXJlIHRoZSBtYXBwaW5nIHdhcyBzZXQsIGp1c3QgbGlrZSB3aXRoCisgICAgIjp2ZXJib3NlIHNldCIuCis4ICAgV2hlbiAiMCIgaXMgbWFwcGVkIChpdCBpcyBhIG1vdmVtZW50IGNvbW1hbmQpIHRoaXMgbWFwcGluZyBzaG91bGQgbm90IGJlCisgICAgdXNlZCBhZnRlciB0eXBpbmcgYW5vdGhlciBudW1iZXIsIGUuZy4gIjIwbCIuIChDaGFybGVzIENhbXBiZWxsKQorICAgIElzIHRoaXMgcG9zc2libGUgd2l0aG91dCBkaXNhYmxpbmcgdGhlIG1hcHBpbmcgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kPworOCAgIFNob3VsZCBtYXBwaW5nIDxDLUE+IGFuZCA8Qy1TLUE+IGJvdGggd29yaz8KKzcgICAiOmFiYnIgYiBieXRlIiwgYXBwZW5kICJiICIgdG8gYW4gZXhpc3Rpbmcgd29yZCBzdGlsbCBleHBhbmRzIHRvICJieXRlIi4KKyAgICBUaGlzIGlzIFZpIGNvbXBhdGlibGUsIGJ1dCBjYW4gd2UgYXZvaWQgaXQgYW55d2F5PworOCAgICI6dmVyYm9zZSBtYXAiIGNvdWxkIHNob3cgdGhlIHNjcmlwdCB3aGVyZSB0aGUgbWFwcGluZyB3YXMgZGVmaW5lZC4KKyAgICBtX3NjcmlwdF9JRCBjYW4gYmUgdXNlZC4KKzggICBUbyBtYWtlIGEgbWFwcGluZyB3b3JrIHdpdGggYSBwcmVwZW5kZWQgInggdG8gc2VsZWN0IGEgcmVnaXN0ZXIsIHN0b3JlIHRoZQorICAgIGxhc3QgX3R5cGVkXyByZWdpc3RlciBuYW1lIGFuZCBhY2Nlc3MgaXQgd2l0aCAiJi4KKzggICBBZGQgIjphbWFwIiwgbGlrZSAiOmFtZW51Ii4KKzggICBBZGQgIjpjYWIhIiwgYWJicmV2aWF0aW9ucyB0aGF0IG9ubHkgYXBwbHkgdG8gQ29tbWFuZC1saW5lIG1vZGUgYW5kIG5vdCB0bworICAgIGVudGVyaW5nIHNlYXJjaCBzdHJpbmdzLgorOCAgIEFkZCBhIGZsYWcgdG8gIjphYmJyZXYiIHRvIGVhdCB0aGUgY2hhcmFjdGVyIHRoYXQgdHJpZ2dlcnMgdGhlCisgICAgYWJicmV2aWF0aW9uLiAgVGh1cyAiYWJiIGFiIHh4eCIgYW5kIHR5cGluZyAiYWI8U3BhY2U+IiBpbnNlcnRzICJ4eHgiIGFuZAorICAgIG5vdCB0aGUgPFNwYWNlPi4KKzggICBBbGxvdyBtYXBwaW5nIG9mIENUUkwtQCAoYW55d2hlcmUgaW4gdGhlIExIUykuCis4ICAgR2l2ZSBhIHdhcm5pbmcgd2hlbiB1c2luZyBDVFJMLUMgaW4gdGhlIGxocyBvZiBhIG1hcHBpbmcuICBJdCB3aWxsIG5ldmVyCisgICAgKD8pIHdvcmsuCis3ICAgIjp2ZXJib3NlIG1hcCIgc2hvdWxkIGRpc3BsYXkgd2hlcmUgYSBtYXBwaW5nIHdhcyBkZWZpbmVkLCBsaWtlICI6dmVyYm9zZQorICAgIHNldCIuCis4ICAgQWRkIGEgd2F5IHRvIHNhdmUgYSBjdXJyZW50IG1hcHBpbmcgYW5kIHJlc3RvcmUgaXQgbGF0ZXIuICBVc2UgYSBmdW5jdGlvbgorICAgIHRoYXQgcmV0dXJucyB0aGUgbWFwcGluZyBjb21tYW5kIHRvIHJlc3RvcmUgaXQ6IG1hcGNtZCgpPyAgbWFwY2hlY2soKSBpcworICAgIG5vdCBmb29sIHByb29mLiAgSG93IHRvIGhhbmRsZSBhbWJpZ3VvdXMgbWFwcGluZ3M/Cis3ICAgQWRkIDwweDhmPiAoaGV4KSwgPDAzMz4gKG9jdGFsKSBhbmQgPDEyMz4gKGRlY2ltYWwpIHRvIDw+IG5vdGF0aW9uPworNyAgIEFsbG93IG1hcHBpbmcgIlEiIGFuZCAiUX0iIGF0IHRoZSBzYW1lIHRpbWUuICBOZWVkIHRvIHB1dCBhIGZsYWcgd2l0aCAiUSIsCisgICAgdGhhdCBpdCBuZWVkcyBhbiBleHRyYSBjaGFyYWN0ZXIgYmVmb3JlIGl0IGNhbiBtYXRjaC4gU2VlIFZpbGUgJ21hcGxvbmdlcicKKyAgICBvcHRpb24uCis3ICAgV2hlbiBzb21lb25lIHRyaWVzIHRvIHVubWFwIHdpdGggYSB0cmFpbGluZyBzcGFjZSwgYW5kIGl0IGZhaWxzLCB0cnkKKyAgICB1bm1hcHBpbmcgd2l0aG91dCB0aGUgdHJhaWxpbmcgc3BhY2UuICBIZWxwcyBmb3IgIjp1bm1hcCB4eCB8IHVubWFwIHl5Ii4KKzcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIG1hcCAnd2lsZGNoYXInLCBidXQgb25seSB3aGVuIGl0J3MgYSBzcGVjaWFsIGNoYXJhY3RlcgorICAgIChsaWtlIENUUkwtRSkuICBDdXJyZW50bHkgaXQncyBvbmx5IHJlY29nbml6ZWQgd2hlbiB0eXBlZC4gIFVzZWZ1bCBmb3IKKyAgICBtYXBwaW5nIGEga2V5IHRvIGRvIHNvbWV0aGluZyBhbmQgdGhlbiBjb21wbGV0aW9uLgorNyAgIEFkZCBhIG1hcHBpbmcgdGhhdCB3b3JrcyBhbHdheXMsIGZvciByZW1hcHBpbmcgdGhlIGtleWJvYXJkLgorNiAgIENvbnRleHQtc2Vuc2l0aXZlIGFiYnJldmlhdGlvbnM6IFNwZWNpZnkgc3ludGF4IGdyb3VwKHMpIGluIHdoaWNoIHRoZQorICAgIGFiYnJldmlhdGlvbnMgYXJlIHRvIGJlIHVzZWQuCistICAgQWRkIG1hcHBpbmdzIHRoYXQgdGFrZSBhcmd1bWVudHMuICBDb3VsZCB3b3JrIGxpa2UgdGhlICI6cyIgY29tbWFuZC4gIEZvcgorICAgIGV4YW1wbGUsIGZvciBhIG1vdXNlIGVzY2FwZSBzZXF1ZW5jZToKKwk6bWFwZXhwICA8RXNjPntcKFswLTldKlwpLFwoWzAtOV0qXCk7CUhcMWpcMmwKKy0gICBNYWtlIGl0IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSA8TnVsPiBpbiB0aGUgbGhzIGFuZCByaHMgb2YgYSBtYXBwaW5nLgorLSAgIEFkZCBjb21tYW5kIHRvIHJlcGVhdCBhIHdob2xlIG1hcHBpbmcgKCIuIiBvbmx5IHJlcGVhdHMgdGhlIGxhc3QgY2hhbmdlIGluCisgICAgYSBtYXBwaW5nKS4gIEFsc286IFJlcGVhdCBhIHdob2xlIGluc2VydCBjb21tYW5kLCBpbmNsdWRpbmcgYW55IG1hcHBpbmdzCisgICAgdGhhdCBpdCBpbmNsdWRlZC4gIFNvcnQtb2YgYXV0b21hdGljIHJlY29yZGluZz8KKy0gICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVuZG8gYWxsIHRoZSBjb21tYW5kcyBmcm9tIGEgbWFwcGluZywgaW5jbHVkaW5nIGEKKyAgICB0cmFpbGluZyB1bmZpbmlzaGVkIGNvbW1hbmQsIGUuZy4gZm9yICI6bWFwIEsgaVheW3IiLgorLSAgIEFkZCBhbiBvcHRpb24gdG8gIjptYXAiIHRoYXQgbWFrZXMgaXQgZGlzcGxheSB0aGUgc3BlY2lhbCBrZXlzIGluCisgICAgPD4gbm90YXRpb24gKGUuZy4gPENSPiBpbnN0ZWFkIG9mIF5NKS4gIE9yIGp1c3QgYWx3YXlzIGRvIHRoaXM/CistICAgSW5jbHVkZSBhbiBvcHRpb24gKG9yIGZsYWcgdG8gJ2Nwb3B0aW9ucycpIHRoYXQgbWFrZXMgZXJyb3JzIGluIG1hcHBpbmdzCisgICAgbm90IGZsdXNoIHRoZSByZXN0IG9mIHRoZSBtYXBwaW5nIChsaWtlIG52aSBkb2VzKS4KKy0gICBVc2UgY29udGV4dCBzZW5zaXRpdmVuZXNzIG9mIGNvbXBsZXRpb24gdG8gc3dpdGNoIGFiYnJldmlhdGlvbnMgYW5kCisgICAgbWFwcGluZ3Mgb2ZmIGZvciA6dW5hYiBhbmQgOnVubWFwLgorNiAgIFdoZW4gdXNpbmcgbWFwcGluZ3MgaW4gSW5zZXJ0IG1vZGUsIGluc2VydCBjaGFyYWN0ZXJzIGZvciBpbmNvbXBsZXRlCisgICAgbWFwcGluZ3MgZmlyc3QsIHRoZW4gcmVtb3ZlIHRoZW0gYWdhaW4gd2hlbiBhIG1hcHBpbmcgbWF0Y2hlcy4gIEF2b2lkcworICAgIHRoYXQgY2hhcmFjdGVycyB0aGF0IGFyZSB0aGUgc3RhcnQgb2Ygc29tZSBtYXBwaW5nIGFyZSBub3Qgc2hvd24gdW50aWwgeW91CisgICAgaGl0IGFub3RoZXIgY2hhcmFjdGVyLgorLSAgIEFkZCBvcHRpb25hbCA8TnVtYmVyPiBhcmd1bWVudCBmb3IgbWFwcGluZ3M6CisgICAgOm1hcCA8TnVtYmVyPnEJICAgICBeV15XPE51bWJlcj5HCisgICAgOm1hcCA8TnVtYmVyPnE8TnVtYmVyPnQgIF5XXlc8TnVtYmVyMS0xPkc8TnVtYmVyMj5sCisgICAgOm1hcCBxPENoYXI+CSAgICA6cy88Q2hhcj4vXHVcMC9nCisgICAgT3IgaW1wbGljaXQ6CisgICAgOm1hcCBxCQkJPFJlZ2lzdGVyPmQ8TnVtYmVyPiQKKy0gICBBZGQgbWFwcGluZ3MgZm9yIHJlcGxhY2UgbW9kZTogIjpybWFwIi4gIEhvdyBkbyB3ZSB0aGVuIGVudGVyIG1hcHBpbmdzIGZvcgorICAgIG5vbi1yZXBsYWNlIEluc2VydCBtb2RlPworLSAgIEFkZCBzZXBhcmF0ZSBtYXBwaW5ncyBmb3IgVmlzdWFsLWNoYXJhY3Rlci9ibG9jay9saW5lIG1vZGU/Cis2ICAgQWxpYXMgZm9yIE5vcm1hbCBtb2RlIGNvbW1hbmRzLCB3b3JrcyBsaWtlIDpzdWJzdGl0dXRlPyAgV291bGQgYWxsb3cKKyAgICBtYXBwaW5ncyB3aXRoIGFyZ3VtZW50cy4KKy0gICBBZGQgJ21hcHN0b3AnIGNvbW1hbmQsIHRvIHN0b3AgcmVjdXJzaXZlIG1hcHBpbmdzLgorLSAgIExpc3QgbWFwcGluZ3MgdGhhdCBoYXZlIGEgcmF3IGVzY2FwZSBzZXF1ZW5jZSBib3RoIHdpdGggdGhlIG5hbWUgb2YgdGhlIGtleQorICAgIGZvciB0aGF0IGVzY2FwZSBzZXF1ZW5jZSAoaWYgdGhlcmUgaXMgb25lKSBhbmQgdGhlIHNlcXVlbmNlIGl0c2VsZi4KKy0gICBMaXN0IG1hcHBpbmdzOiBPbmNlIHdpdGggc3BlY2lhbCBrZXlzIGxpc3RlZCBhcyA8Piwgb25jZSB3aXRoIG1ldGEgY2hhcnMgYXMKKyAgICA8TS1hPiwgb25jZSB3aXRoIHRoZSBieXRlIHZhbHVlcyAob2N0YWw/KS4gU29ydCBvZiAic3BlbGwgbWFwcGluZyIgY29tbWFuZD8KKy0gICBXaGVuIGVudGVyaW5nIG1hcHBpbmdzOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIGVudGVyIG1ldGEga2V5cyBsaWtlIHRoZXkKKyAgICBhcmUgZGlzcGxheWVkLCB3aXRoaW4gPD46IDxNLWE+LCA8fkA+IG9yIDx8YT4uCistICAgQWxsb3cgbXVsdGlwbGUgYXJndW1lbnRzIHRvIDp1bm1hcC4KKy0gICBDb21tYW5kIHRvIHNob3cga2V5cyB0aGF0IGFyZSBub3QgdXNlZCBhbmQgYXZhaWxhYmxlIGZvciBtYXBwaW5nCisgICAgIjpmcmVla2V5cyIuCistICAgQWxsb3cgYW55IGNoYXJhY3RlciBleGNlcHQgd2hpdGUgc3BhY2UgaW4gYWJicmV2aWF0aW9ucyBsaHMgKFJpZWhtKS4KKworCitJbmNzZWFyY2g6CistICAgQWRkIGEgbGltaXQgdG8gdGhlIG51bWJlciBvZiBsaW5lcyB0aGF0IGFyZSBzZWFyY2hlZCBmb3IgJ2luY3NlYXJjaCc/CistICAgV2hlbiBubyBtYXRjaCBpcyBmb3VuZCBhbmQgdGhlIHVzZXIgdHlwZXMgbW9yZSwgdGhlIHNjcmVlbiBpcyByZWRyYXduCisgICAgYW55d2F5LiAgQ291bGQgc2tpcCB0aGF0LiAgRXNwLiBpZiB0aGUgbGluZSB3cmFwcyBhbmQgdGhlIHRleHQgaXMgc2Nyb2xsZWQKKyAgICB1cCBldmVyeSB0aW1lLgorLSAgIFRlbXBvcmFyaWx5IG9wZW4gZm9sZHMgdG8gc2hvdyB3aGVyZSB0aGUgc2VhcmNoIGVuZHMgdXAuICBSZXN0b3JlIHRoZQorICAgIGZvbGRzIHdoZW4gZ29pbmcgdG8gYW5vdGhlciBsaW5lLgorLSAgIFdoZW4gaW5jc2VhcmNoIHVzZWQgYW5kIGhpdHRpbmcgcmV0dXJuLCBubyBuZWVkIHRvIHNlYXJjaCBhZ2FpbiBpbiBtYW55CisgICAgY2FzZXMsIHNhdmVzIGEgbG90IG9mIHRpbWUgaW4gYmlnIGZpbGVzLiAoU2xvb3RtYW4gd2FudHMgdG8gd29yayBvbiB0aGlzPykKKyAgICBXaGVuIG5vdCB1c2luZyBzcGVjaWFsIGNoYXJhY3RlcnMsIGNhbiBjb250aW51ZSBzZWFyY2ggZnJvbSB0aGUgbGFzdCBtYXRjaAorICAgIChvciBub3QgYXQgYWxsLCB3aGVuIHRoZXJlIHdhcyBubyBtYXRjaCkuICBTZWUgb2xkbWFpbC93ZWJiL2luLjg3Mi4KKy0gICBXaXRoIGluY3NlYXJjaCwgdXNlIENUUkwtTi9DVFJMLVAgdG8gZ28gdG8gbmV4dC9wcmV2aW91cyBtYXRjaCwgc29tZSBvdGhlcgorICAgIGtleSB0byBjb3B5IG1hdGNoZWQgd29yZCB0byBzZWFyY2ggcGF0dGVybiAoQWxleGFuZGVyIFNjaG1pZCkuCisKKworU2VhcmNoaW5nOgorOCAgIEFkZCBhIG1lY2hhbmlzbSBmb3IgcmVjdXJzaXZlbmVzczogIlwoKFteKCldKlxAQFteKCldKilcKVxAciIuICBcQEAgc3RhbmRzCisgICAgZm9yICJnbyByZWN1cnNpdmUgaGVyZSIgYW5kIFxAciBtYXJrcyB0aGUgcmVjdXJzaXZlIGF0b20uCitpdGVtIHN0YWNrIHRvIGFsbG93IG1hdGNoaW5nICgpLiAgT25lIHNpZGUgaXMgInB1c2ggWCBvbgorICAgIHRoZSBzdGFjayBpZiBwcmV2aW91cyBhdG9tIG1hdGNoZWQiLiAgT3RoZXIgc2lkZSBpcyAibWF0Y2ggd2l0aCB0b3Agb2YKKyAgICBzdGFjaywgcG9wIGl0IHdoZW4gaXQgbWF0Y2hlcyIuICBVc2UgIlxAcFgiIGFuZCAiXEBtIj8KKwlFeGFtcGxlOiBcKChcQHApLlx7LX1cQG1cKSoKKzcgICBBZGQgYW4gb3B0aW9uIHRvIGFjY2VwdCBhIG1hdGNoIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24uICBBbHNvIGZvcgorICAgIHNlYXJjaCgpLiAoQnJldHQpCis3ICAgQWRkIHBhdHRlcm4gaXRlbSB0byB1c2UgcHJvcGVydGllcyBvZiBVbmljb2RlIGNoYXJhY3RlcnMuICBJbiBQZXJsIGl0J3MKKyAgICAiXHB7TH0iIGZvciBhIGxldHRlci4gIFNlZSBSZWd1bGFyIEV4cHJlc3Npb24gUG9ja2V0IFJlZmVyZW5jZS4KKzcgICBXaGVuICdyaWdodGxlZnQnIGlzIHNldCwgdGhlIHNlYXJjaCBwYXR0ZXJuIHNob3VsZCBiZSBkaXNwbGF5ZWQgcmlnaHQgdG8KKyAgICBsZWZ0IGFzIHdlbGw/ICBTZWUgcGF0Y2ggb2YgRGVjIDI2LiAoTmFkaW0gU2hhaWtsaSkKKzggICBXb3VsZCBpdCBiZSBwb3NzaWJsZSB0byBhbGxvdyAiOjIzLDQ1L3BhdC9mbGFncyIgdG8gc2VhcmNoIGZvciAicGF0IiBpbgorICAgIGxpbmVzIDIzIHRvIDQ1PyAgT3IgZG9lcyB0aGlzIGNvbmZsaWN0IHdpdGggRXggcmFuZ2Ugc3ludGF4PworOCAgIEFsbG93IGlkZW50aWNhbCBwYWlycyBpbiAnbWF0Y2hwYWlycycuICBSZXN0cmljdCB0aGUgc2VhcmNoIHRvIHRoZSBjdXJyZW50CisgICAgbGluZS4KKzcgICBBbGxvdyBsb25nZXIgcGFpcnMgaW4gJ21hdGNocGFpcnMnLiAgVXNlIH4vdmltL21hY3Jvcy9tYXRjaGl0LnZpbSBhcyBhbgorICAgIGV4YW1wbGUuCis4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBkZWZpbmUgdGhlIGNoYXJhY3RlciB0aGF0ICIlIiBjaGVja3MgZm9yIGluCisgICAgI2lmLyNlbmRpZi4gIEZvciBubWFrZSBpdCdzICFpZi8hZW5kaWYuCistICAgRm9yICIlIiBjb21tYW5kOiBzZXQgaGllcmFyY2h5IGZvciB3aGljaCB0aGluZ3MgaW5jbHVkZSBvdGhlciB0aGluZ3MgdGhhdAorICAgIHNob3VsZCBiZSBpZ25vcmVkIChsaWtlICIqLyIgb3IgIiNlbmRpZiIgaW5zaWRlIC8qICovKS4KKyAgICBBbHNvOiB1c2UgIiUiIHRvIGp1bXAgZnJvbSBzdGFydCB0byBlbmQgb2Ygc3ludGF4IHJlZ2lvbiBhbmQgYmFjay4KKyAgICBBbHRlcm5hdGl2ZTogdXNlIG1hdGNoaXQudmltCis4ICAgIi86L2UrMSIgZ2V0cyBzdHVjayBvbiBhIG1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuICBEbyB3ZSBjYXJlPworOCAgIEEgcGF0dGVybiBsaWtlICJcKFteYV1cK1wpXCsiIHRha2VzIGFuIGF3ZnVsIGxvbmcgdGltZS4gIFJlY29nbml6ZSB0aGF0CisgICAgdGhlIHJlY3Vyc2l2ZSAiXCsiIGlzIG1lYW5pbmdsZXNzIGFuZCBvcHRpbWl6ZSBmb3IgaXQuCisgICAgVGhpcyBvbmUgaXMgYWxzbyB2ZXJ5IHNsb3cgb24gIi8qIHNvbWUgY29tbWVudCAqLyI6ICJeXC9cKlwoLipbXi9dXCkqJCIuCis3ICAgUmVjb2duaXplICJbYS16XSIsICJbMC05XSIsIGV0Yy4gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBmYXN0ZXIgIlxsIiBhbmQKKyAgICAiXGQiLgorNyAgIEFkZCBhIHdheSB0byBzcGVjaWZ5IGNoYXJhY3RlcnMgYXMgaGV4LCBvY3RhbCBvciA8Qy1NPiBmb3JtLiAgQ291bGQgYmUKKyAgICBcJTFheCwgXCUyMDBvIGFuZCBcJTxDLU0+LiAgQWxzbyBcJTEyMzR1IGZvciBtdWx0aS1ieXRlIGNoYXJzLgorOCAgIEZsYWdzIHRoYXQgYXBwbHkgdG8gdGhlIHdob2xlIHBhdHRlcm4uCisgICAgVGhpcyB3b3JrcyBmb3IgYWxsIHBsYWNlcyB3aGVyZSBhIHJlZ2V4cCBpcyB1c2VkLgorICAgIEFkZCAiXHEiIHRvIG5vdCBzdG9yZSB0aGlzIHBhdHRlcm4gYXMgdGhlIGxhc3Qgc2VhcmNoIHBhdHRlcm4/Cis4ICAgQWRkIGFuIGFyZ3VtZW50IGFmdGVyICI6cy9wYXQvc3RyLyIgZm9yIGEgcmFuZ2Ugb2YgbWF0Y2hlcy4gIEZvciBleGFtcGxlLAorICAgICI6cy9wYXQvc3RyLyMzLTQiIHRvIHJlcGxhY2Ugb25seSB0aGUgdGhpcmQgYW5kIGZvdXJ0aCAicGF0IiBpbiBhIGxpbmUuCis4ICAgQWRkIGFuIG9wdGlvbiBub3QgdG8gdXNlICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIGZvciAiOnMiIGFuZCAiOmciCisgICAgY29tbWFuZHMuIChLYWhuKSAgSXQgd291bGQgd29yayBsaWtlICI6bm9oIiBpcyB1c2VkIGFmdGVyIHRoYXQgY29tbWFuZC4KKyAgICBBbHNvOiBBbiBleHRyYSBmbGFnIHRvIGRvIHRoaXMgb25jZSwgYW5kIGEgZmxhZyB0byBrZWVwIHRoZSBleGlzdGluZworICAgIHNlYXJjaCBwYXR0ZXJuLgorLSAgIEFkZCBcJWh7Z3JvdXAtbmFtZX07IHRvIHNlYXJjaCBmb3IgYSBzcGVjaWZpYyBoaWdobGlnaHQgZ3JvdXAuCisgICAgQWRkIFwlc3tzeW50YXgtZ3JvdXB9OyB0byBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgc3ludGF4IGdyb3VwLgorLSAgIFN1cHBvcnQgUGVybCByZWdleHAuICBVc2UgUENSRSAoUGVybCBDb21wYXRpYmxlIFJFKSBwYWNrYWdlLiAoU2hhZGUpCisgICAgT3IgdHJhbnNsYXRlIHRoZSBwYXR0ZXJuIHRvIGEgVmltIG9uZS4KKyAgICBEb24ndCBzd2l0Y2ggb24gd2l0aCBhbiBvcHRpb24gZm9yIHR5cGVkIGNvbW1hbmRzL21hcHBpbmdzL2Z1bmN0aW9ucywgaXQncworICAgIHRvbyBjb25mdXNpbmcuICBVc2UgIlxAQCIgaW4gdGhlIHBhdHRlcm4sIHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzLgorNyAgIEFkZCBQT1NJWCByZWdleHAsIGxpa2UgTnZpLCB3aXRoICdleHRlbmRlZCcgb3B0aW9uPyAgSXQncyBsaWtlIHZlcnktbWFnaWMuCistICAgUmVtZW1iZXIgZmxhZ3MgZm9yIGJhY2tyZWZlcmVuY2VkIGl0ZW1zLCBzbyB0aGF0ICIqIiBjYW4gYmUgdXNlZCBhZnRlciBpdC4KKyAgICBDaGVjayB3aXRoICJcKFxTXClcMVx7M30iLiAoSGVtbWVybGluZykKKy0gICBBZGQgZmxhZ3MgdG8gc2VhcmNoIGNvbW1hbmQgKGFsc28gZm9yICI6cyI/KToKKyAgICBpCWlnbm9yZSBjYXNlCisgICAgSQl1c2UgY2FzZQorICAgIHAJdXNlIFBlcmwgcmVnZXhwIHN5bnRheCAob3IgUE9TSVg/KQorICAgIHYJdXNlIFZpIHJlZ2V4cCBzeW50YXgKKyAgICBmCWZvcmdldCBwYXR0ZXJuLCBkb24ndCBrZWVwIGl0IGZvciAibiIgY29tbWFuZAorICAgIEYgICByZW1lbWJlciBwYXR0ZXJuLCBrZWVwIGl0IGZvciAibiIgY29tbWFuZAorICAgIFBlcmwgdXNlcyB0aGVzZSB0b286CisgICAgZQlldmFsdWF0ZSB0aGUgcmlnaHQgc2lkZSBhcyBhbiBleHByZXNzaW9uIChQZXJsIG9ubHkpCisgICAgbQltdWx0aXBsZSBsaW5lIGV4cHJlc3Npb24gKHdlIGRvbid0IG5lZWQgaXQpCisgICAgbwljb21waWxlIG9ubHkgb25jZSAoUGVybCBvbmx5KQorICAgIHMJc2luZ2xlIGxpbmUgZXhwcmVzc2lvbiAod2UgZG9uJ3QgbmVlZCBpdCkKKyAgICB4CWV4dGVuZGVkIHJlZ2V4cCAod2UgZG9uJ3QgbmVlZCBpdCkKKyAgICBXaGVuIHVzZWQgYWZ0ZXIgIjpnIiBjb21tYW5kLCBiYWNrc2xhc2ggbmVlZGVkIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHRoZQorICAgIGZvbGxvd2luZyBjb21tYW5kLgorICAgIEFkZCAnc2VhcmNoZmxhZ3MnIGZvciBkZWZhdWx0IGZsYWdzIChyZXBsYWNlcyAnZ2RlZmF1bHQnKS4KKy0gICBBZGQgY29tbWFuZCB0byBkaXNwbGF5IHRoZSBsYXN0IHVzZWQgc3Vic3RpdHV0ZSBwYXR0ZXJuIGFuZCBsYXN0IHVzZWQKKyAgICBwYXR0ZXJuLiAoTWFyZ28pICBNYXliZSBtYWtlIGl0IGFjY2Vzc2libGUgdGhyb3VnaCBhIHJlZ2lzdGVyIChsaWtlICIvCisgICAgZm9yIHNlYXJjaCBzdHJpbmcpPworNyAgIFVzZSBULXNlYXJjaCBhbGdvcml0aG0sIHRvIHNwZWVkIHVwIHNlYXJjaGluZyBmb3Igc3RyaW5ncyB3aXRob3V0IHNwZWNpYWwKKyAgICBjaGFyYWN0ZXJzLiAgU2VlIEMndCBhcnRpY2xlLCBBdWd1c3QgMTk5Ny4KKy0gICBBZGQgJ2Z1enp5Y2FzZScgb3B0aW9uLCBzbyB0aGF0IGNhc2UgZG9lc24ndCBtYXR0ZXIsIGFuZCAnLScgYW5kICdfJyBhcmUKKyAgICBlcXVpdmFsZW50IChmb3IgVW5peCBmaWxlbmFtZXMpLgorLSAgIEFkZCAndicgZmxhZyB0byBzZWFyY2ggY29tbWFuZDogZW50ZXIgVmlzdWFsIG1vZGUsIHdpdGggdGhlIG1hdGNoaW5nIHRleHQKKyAgICBhcyBWaXN1YWwgYXJlYS4gKHZhcmlhdGlvbiBvbiBpZGVhIGZyb20gQmVydGluKQorLSAgIFNlYXJjaGluZzogIi90aGlzLy90aGF0LyIgc2hvdWxkIGZpbmQgInRoYXQiIGFmdGVyICJ0aGlzIi4KKy0gICBBZGQgZ2xvYmFsIHNlYXJjaCBjb21tYW5kczogSW5zdGVhZCBvZiB3cmFwcGluZyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsCisgICAgdGhleSBjb250aW51ZSBpbiBhbm90aGVyIGJ1ZmZlci4gVXNlIGZsYWcgYWZ0ZXIgc2VhcmNoIHBhdHRlcm46CisgICAgYQlmb3IgdGhlIG5leHQgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdAorICAgIGYJZm9yIGZpbGUgaW4gdGhlIGJ1ZmZlciBsaXN0CisgICAgdwlmb3IgZmlsZSBlZGl0ZWQgaW4gYSB3aW5kb3cuCisgICAgZS5nLiAiL3BhdC9mIi4gVGhlbiAibiIgYW5kICJOIiB3b3JrIHRocm91Z2ggZmlsZXMgdG9vLiAiZiIgZmxhZyBhbHNvIGZvcgorICAgICI6cy9wYXQvZm9vL2YiPz8/IFRoZW4gd2hlbiAnYXV0b3dyaXRlJyBhbmQgJ2hpZGRlbicgYXJlIGJvdGggbm90IHNldCwgYXNrCisgICAgYmVmb3JlIHNhdmluZyBmaWxlczogIlNhdmUgbW9kaWZpZWQgYnVmZmVyICIvcGF0aC9maWxlIj8gKFllcy9IaWRlL05vCisgICAgU2F2ZS1hbGwvaGlkZS1BbGwvUXVpdCkgIi4KKy0gICAiOnMvcGF0L2Zvby8zIjogZmluZCAzcmQgbWF0Y2ggb2YgInBhdCIsIGxpa2Ugc2VkLiAoVGhvbWFzIEtvZWhsZXIpCistICAgU3BlY2lhbCBjaGFyYWN0ZXJzIGluIHBhdHRlcm5zOgorICAgIEluc2lkZSBbXToKKyAgICBcMDEyICBvY3RhbCBjaGFyYWN0ZXIKKyAgICBcMHgxYSBoZXggY2hhcmFjdGVyCisgICAgXDA8QlM+IFwwPEVzYz46IHNwZWNpYWwgY2hhcmFjdGVyCis3ICAgV2hlbiBzZWFyY2hpbmcgd2l0aCAnbicgZ2l2ZSBtZXNzYWdlIHdoZW4gZ2V0dGluZyBiYWNrIHdoZXJlIHRoZSBzZWFyY2gKKyAgICBmaXJzdCBzdGFydGVkLiBSZW1lbWJlciBzdGFydCBvZiBzZWFyY2ggaW4gJy8gbWFyay4KKzcgICBBZGQgb3B0aW9uIHRoYXQgc2Nyb2xscyBzY3JlZW4gdG8gcHV0IGN1cnNvciBpbiBtaWRkbGUgb2Ygc2NyZWVuIGFmdGVyCisgICAgc2VhcmNoIGFsd2F5cy93aGVuIG9mZi1zY3JlZW4vbmV2ZXIuICBBbmQgYWZ0ZXIgYSAiOnRhZyIgY29tbWFuZC4gIE1heWJlCisgICAgc3BlY2lmeSBob3cgbWFueSBsaW5lcyBiZWxvdyB0aGUgc2NyZWVuIGNhdXNlcyBhIHJlZHJhdyB3aXRoIHRoZSBjdXJzb3IgaW4KKyAgICB0aGUgbWlkZGxlIChkZWZhdWx0IHdvdWxkIGJlIGhhbGYgYSBzY3JlZW4sIHplcm8gbWVhbnMgYWx3YXlzKS4KKzYgICBTdXBwb3J0IG11bHRpcGxlIHNlYXJjaCBidWZmZXJzLCBzbyBtYWNyb3MgY2FuIGJlIG1hZGUgd2l0aG91dCBzaWRlCisgICAgZWZmZWN0cy4KKzcgICBGcm9tIHh2aW06IEFsbG93IGEgbmV3bGluZSBpbiBzZWFyY2ggcGF0dGVybnMgKGFsc28gZm9yIDpzLCBjYW4gZGVsZXRlCisgICAgbmV3bGluZSkuICBBZGQgQk9XLCBFT1csIE5FV0wsIE5MT1JBTlksIE5MQlVUQU5ZLCBtYWdpYyAnbicgYW5kICdyJywgZXRjLgorICAgIFtub3QgaW4geHZpbTpdIEFkZCBvcHRpb24gdG8gc3dpdGNoIG9uIG1hdGNoZXMgY3Jvc3NpbmcgT05FIGxpbmUgYm91bmRhcnkuCis3ICAgQWRkICI6aXNlbGVjdCIsIGEgY29tYmluYXRpb24gb2YgIjppbGlzdCIgYW5kICI6dHNlbGVjdCIuIChBYXJvbikKKyAgICBBbHNvICI6ZHNlbGVjdCIuCisKKworVW5kbzoKKy0gICBXaGVuIGFjY2lkZW50YWxseSBoaXR0aW5nICJSIiBpbnN0ZWFkIG9mIEN0cmwtUiwgZnVydGhlciBDdHJsLVIgaXMgbm90CisgICAgcG9zc2libGUsIGV2ZW4gd2hlbiB0eXBpbmcgPEVzYz4gaW1tZWRpYXRlbHkuIChHcmFobikgIEFsc28gZm9yICJpIiwgImEiLAorICAgIGV0Yy4gIFBvc3Rwb25lIHNhdmluZyBmb3IgdW5kbyB1bnRpbCBzb21ldGhpbmcgaXMgcmVhbGx5IGluc2VydGVkPworOCAgIFdoZW4gSW5zZXJ0aW5nIGEgbG90IG9mIHRleHQsIGl0IGNhbiBvbmx5IGJlIHVuZG9uZSBhcyBhIHdob2xlLiAgTWFrZSB1bmRvCisgICAgc3luYyBwb2ludHMgYXQgZXZlcnkgbGluZSBvciB3b3JkLiAgQ291bGQgcmVjb2duaXplIHRoZSBzdGFydCBvZiBhIG5ldworICAgIHdvcmQgKHdoaXRlIHNwYWNlIGFuZCB0aGVuIG5vbi13aGl0ZSBzcGFjZSkgYW5kIGJhY2tzcGFjaW5nLgorICAgIENhbiBhbHJlYWR5IHVzZSBDVFJMLUcgdSwgYnV0IHRoYXQgcmVxdWlyZXMgcmVtYXBwaW5nIGEgbG90IG9mIHRoaW5ncy4KKzggICBNYWtlIHVuZG8gbW9yZSBtZW1vcnktZWZmaWNpZW50OiBDb21wYXJlIHRleHQgYmVmb3JlIGFuZCBhZnRlciBjaGFuZ2UsCisgICAgb25seSByZW1lbWJlciB0aGUgbGluZXMgdGhhdCByZWFsbHkgY2hhbmdlZC4KKzcgICBBZGQgdW5kbyBmb3IgYSByYW5nZSBvZiBsaW5lcy4gIENhbiBjaGFuZ2UgdGhlc2UgYmFjayB0byBhIHByZXZpb3VzCisgICAgdmVyc2lvbiB3aXRob3V0IGNoYW5naW5nIHRoZSByZXN0IG9mIHRoZSBmaWxlLiAgU3RvcCBkb2luZyB0aGlzIHdoZW4gYQorICAgIGNoYW5nZSBpbmNsdWRlcyBvbmx5IHNvbWUgb2YgdGhlc2UgbGluZXMgYW5kIGNoYW5nZXMgdGhlIGxpbmUgY291bnQuICBOZWVkCisgICAgdG8gc3RvcmUgdGhlc2UgdW5kbyBhY3Rpb25zIGFzIGEgc2VwYXJhdGUgY2hhbmdlIHRoYXQgY2FuIGJlIHVuZG9uZS4KKzcgICBBZGQgYW4gdW5kbyB0cmVlOiBXaGVuIG1ha2luZyBhIGNoYW5nZSwgaW5zdGVhZCBvZiBjbGVhcmluZyBhbnkgZnV0dXJlCisgICAgdW5kbyAodGh1cyByZWRvKSBpbmZvLCBtYWtlIGEgbmV3IGJyYW5jaC4gIEhvdyB0byBuYXZpZ2F0ZSB0aHJvdWdoIHRoZQorICAgIHVuZG8gdHJlZT8KKy0gICBGb3IgdV9zYXZlKCkgaW5jbHVkZSB0aGUgY29sdW1uIG51bWJlci4gVGhpcyBjYW4gYmUgdXNlZCB0byBzZXQgJ1sgYW5kICddLgorICAgIEFuZCBpbiB0aGUgZnV0dXJlIHRoZSB1bmRvIGNhbiBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IChXZWJiKS4KKy0gICBJbiBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnM6IEZyZWUgYWxsb2NhdGVkIHNwYWNlIGluIHVuZG8sIGFuZCByZWR1Y2UgdGhlCisgICAgbnVtYmVyIG9mIHVuZG8gbGV2ZWxzICh3aXRoIGNvbmZpcm1hdGlvbikuCistICAgSW5zdGVhZCBvZiBbK10sIGdpdmUgdGhlIG51bWJlciBvZiBjaGFuZ2VzIHNpbmNlIHRoZSBsYXN0IHdyaXRlOiBbKzEyM10uCisgICAgV2hlbiB1bmRvaW5nIHRvIGJlZm9yZSB0aGUgbGFzdCB3cml0ZSwgY2hhbmdlIHRoaXMgdG8gYSBuZWdhdGl2ZSBudW1iZXI6CisgICAgWy05OV0uCistICAgV2l0aCB1bmRvIHdpdGggc2ltcGxlIGxpbmUgZGVsZXRlL2luc2VydDogb3B0aW1pemUgc2NyZWVuIHVwZGF0aW5nLgorLSAgIFdoZW4gZXhlY3V0aW5nIG1hY3JvJ3M6IFNhdmUgZWFjaCBsaW5lIGZvciB1bmRvIG9ubHkgb25jZS4KKy0gICBTdG9yZSB1bmRvIGluZm8gaW4gYSBmaWxlIHRoYXQgc3Vydml2ZXMgdW50aWwgdGhlIG5leHQgZWRpdC4gIFRoZW4gaXQncworICAgIHBvc3NpYmxlIHRvIHVuZG8gdG8gYmVmb3JlIHRoZSBjdXJyZW50IGVkaXRpbmcgc2Vzc2lvbi4gIENvbWJpbmVkIHdpdGgKKyAgICB2aW1pbmZvPworLSAgIFdoZW4gZG9pbmcgYSBnbG9iYWwgc3Vic3RpdHV0ZSwgY2F1c2luZyBhbG1vc3QgYWxsIGxpbmVzIHRvIGJlIGNoYW5nZWQsCisgICAgdW5kbyBpbmZvIGJlY29tZXMgdmVyeSBiaWcuICBQdXQgdW5kbyBpbmZvIGluIHN3YXAgZmlsZT8/CisKKworQnVmZmVyIGxpc3Q6Cis4ICAgQWRkIHBhdGNoIGZyb20gQ2hhcmxlcyBDYW1wYmVsbCB0byBoYXZlICI6MGZpbGUhIiByZW1vdmUgdGhlIG5hbWUgb2YgdGhlCisgICAgY3VycmVudCBidWZmZXIuICgyMDAzIEp1bmUgMTcpCis3ICAgQ29tbWFuZCB0byBleGVjdXRlIGEgY29tbWFuZCBpbiBhbm90aGVyIGJ1ZmZlcjogIjppbmJ1ZiB7YnVmbmFtZX0ge2NtZH0iLgorICAgIEFsc28gZm9yIG90aGVyIHdpbmRvd3M6ICI6aW53aW4ge3dpbm5yfSB7Y21kfSIuICBIb3cgdG8gbWFrZSBzdXJlIHRoYXQKKyAgICB0aGlzIHdvcmtzIHByb3Blcmx5IGZvciBhbGwgY29tbWFuZHMsIGFuZCBzdGlsbCBiZSBhYmxlIHRvIHJldHVybiB0byB0aGUKKyAgICBjdXJyZW50IGJ1ZmZlci93aW5kb3c/ICBFLmcuOiAiOmluYnVmIHh4eCBvbmx5Ii4KKzggICBBZGQgRmlsZS57cmVjZW50X2ZpbGVzfSBtZW51IGVudHJpZXM6IFJlY2VudGx5IGVkaXRlZCBmaWxlcy4KKyAgICBSb24gQWFyb24gaGFzIGEgcGx1Z2luIGZvciB0aGlzOiBtcnUudmltLgorOCAgIFVuaXg6IENoZWNrIGFsbCB1c2VzIG9mIGZuYW1lY21wKCkgYW5kIGZuYW1lbmNtcCgpIGlmIHRoZXkgc2hvdWxkIGNoZWNrCisgICAgaW5vZGUgdG9vLgorNyAgIEFkZCBhbm90aGVyIG51bWJlciBmb3IgYSBidWZmZXIsIHdoaWNoIGlzIHZpc2libGUgZm9yIHRoZSB1c2VyLiAgV2hlbgorICAgIGNyZWF0aW5nIGEgbmV3IGJ1ZmZlciwgdXNlIHRoZSBsb3dlc3QgbnVtYmVyIG5vdCBpbiB1c2UuIChvciB0aGUgaGlnaGVzdAorICAgIG51bWJlciBpbiB1c2UgcGx1cyBvbmU/KQorNyAgIE9mZmVyIHNvbWUgYnVmZmVyIHNlbGVjdGlvbiBmcm9tIHRoZSBjb21tYW5kIGxpbmU/ICBMaWtlIHVzaW5nICI6bHMiIGFuZAorICAgIGFza2luZyBmb3IgYSBidWZmZXIgbnVtYmVyLiAoWmFjaG1hbm4pCistICAgV2hlbiBzdGFydGluZyB0byBlZGl0IGEgZmlsZSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIGJ1ZmZlciBsaXN0LCB1c2UgdGhlCisgICAgZmlsZSBuYW1lIGFyZ3VtZW50IGZvciB0aGUgbmV3IHNob3J0IGZpbGUgbmFtZS4gKFdlYmIpCistICAgQWRkIGFuIG9wdGlvbiB0byBtYWtlICI6Ym5leHQiIGFuZCAiOmJwcmV2IiB3cmFwIGFyb3VuZCB0aGUgZW5kIG9mIHRoZQorICAgIGJ1ZmZlciBsaXN0LiAgQWxzbyBmb3IgIjpuZXh0IiBhbmQgIjpwcmV2Ij8KKzcgICBBZGQgYXJndW1lbnQgdG8gIjpscyIgd2hpY2ggaXMgYSBwYXR0ZXJuIGZvciBidWZmZXJzIHRvIGxpc3QuCisgICAgRS5nLiAiOmxzICouYyIuIChUaG9tcHNvbikKKzcgICBBZGQgZXhwYW5zaW9uIG9mIGJ1ZmZlciBuYW1lcywgc28gdGhhdCAiKi5jIiBpcyBleHBhbmRlZCB0byBhbGwgYnVmZmVyCisgICAgbmFtZXMuICBOZWVkZWQgZm9yICI6YmRlbCAqLmMiLCAiOmJ1bmxvYWQgKi5jIiwgZXRjLgorOCAgIFN1cHBvcnQgZm9yIDxhZmlsZT4gd2hlcmUgYSBidWZmZXIgbmFtZSBpcyBleHBlY3RlZC4KKzggICBTb21lIGNvbW1hbmRzIGRvbid0IHVzZSBsaW5lIG51bWJlcnMsIGJ1dCBidWZmZXIgbnVtYmVycy4gJyQnCisgICAgc2hvdWxkIHRoZW4gbWVhbiB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IGJ1ZmZlci4gIEUuZy46ICI0LCRiZGVsIi4KKzcgICBBZGQgYW4gb3B0aW9uIHRvIG1vc3RseSB1c2Ugc2xhc2hlcyBpbiBmaWxlIG5hbWVzLiAgU2VwYXJhdGVseSBmb3IKKyAgICBpbnRlcm5hbCB1c2UgYW5kIGZvciB3aGVuIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBwcm9ncmFtPworCisKK1N3YXAgKC5zd3ApIGZpbGVzOgorOCAgIElmIHdyaXRpbmcgdG8gdGhlIHN3YXAgZmlsZSBmYWlscywgc2hvdWxkIHRyeSB0byBvcGVuIG9uZSBpbiBhbm90aGVyCisgICAgZGlyZWN0b3J5IGZyb20gJ2RpcicuICBVc2VmdWwgaW4gY2FzZSB0aGUgZmlsZSBzeXN0ZW0gaXMgZnVsbCBhbmQgd2hlbgorICAgIHRoZXJlIGFyZSBzaG9ydCBmaWxlIG5hbWUgcHJvYmxlbXMuCis4ICAgQWxzbyB1c2UgdGhlIGNvZGUgdG8gdHJ5IHVzaW5nIGEgc2hvcnQgZmlsZSBuYW1lIGZvciB0aGUgYmFja3VwIGFuZCBzd2FwCisgICAgZmlsZSBmb3IgdGhlIFdpbjMyIGFuZCBEb3MgMzIgYml0IHZlcnNpb25zLgorOCAgIFdoZW4gYSBmaWxlIGlzIGVkaXRlZCBieSByb290LCBhZGQgJExPR05BTUUgdG8ga25vdyB3aG8gZGlkIHN1LgorOCAgIFdoZW4gdGhlIGVkaXRlZCBmaWxlIGlzIGEgc3ltbGluaywgdHJ5IHRvIHB1dCB0aGUgc3dhcCBmaWxlIGluIHRoZSBzYW1lCisgICAgZGlyIGFzIHRoZSBhY3R1YWwgZmlsZS4gQWRqdXN0IEZ1bGxOYW1lKCkuCUF2b2lkcyBlZGl0aW5nIHRoZSBzYW1lIGZpbGUKKyAgICB0d2ljZSAoZS5nLiB3aGVuIHVzaW5nIHF1aWNrZml4KS4gIEFsc28gdHJ5IHRvIG1ha2UgdGhlIG5hbWUgb2YgdGhlIGJhY2t1cAorICAgIGZpbGUgdGhlIHNhbWUgYXMgdGhlIGFjdHVhbCBmaWxlPworICAgIFVzZSB0aGUgY29kZSBmb3IgcmVzb2x2ZSgpPworNyAgIFN0b3JlIHRoZSBvcHRpb25zICdmaWxlZW5jb2RpbmcnLCAnZmlsZWZvcm1hdCcsIGV0Yy4gaW4gdGhlIHN3YXBmaWxlLAorICAgIGJlY2F1c2UgdGhleSBjaGFuZ2Ugd2hhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGZpbGUuICBSZXF1aXJlcyBhZGRpbmcKKyAgICBhbm90aGVyIGJsb2NrIHRvIHRoZSBzd2FwZmlsZS4KKzcgICBXaGVuIHVzaW5nIDY0IGJpdCBpbm9kZSBudW1iZXJzLCBhbHNvIHN0b3JlIHRoZSB0b3AgMzIgYml0cy4gIEFkZCBhbm90aGVyCisgICAgZmllbGQgZm9yIHRoaXMsIHVzaW5nIHBhcnQgb2YgYm9fZm5hbWVbXSwgdG8ga2VlcCBpdCBjb21wYXRpYmxlLgorNyAgIFdoZW4gZWRpdGluZyBhIGZpbGUgb24gcmVtb3ZhYmxlIG1lZGlhLCBzaG91bGQgcHV0IHN3YXAgZmlsZSBzb21ld2hlcmUKKyAgICBlbHNlLiAgVXNlIHNvbWV0aGluZyBsaWtlICdyJyBmbGFnIGluICd2aW1pbmZvJy4gJ2RpcmF2b2lkJz8KKyAgICBBbHNvOiBCZSBhYmxlIHRvIHNwZWNpZnkgbWluaW11bSBkaXNrIHNwYWNlLCBza2lwIGRpcmVjdG9yeSB3aGVuIG5vdAorICAgIGVub3VnaCByb29tLgorNyAgIEFkZCBhIGNvbmZpZ3VyZSBjaGVjayBmb3Igd2hpY2ggZGlyZWN0b3J5IHNob3VsZCBiZSB1c2VkOiAvdG1wLCAvdmFyL3RtcAorICAgIG9yIC92YXIvcHJlc2VydmUuCistICAgQWRkIGFuIG9wdGlvbiB0byBjcmVhdGUgYSBzd2FwIGZpbGUgb25seSB3aGVuIG1ha2luZyB0aGUgZmlyc3QgY2hhbmdlIHRvCisgICAgdGhlIGJ1ZmZlci4gIChMaWFuZykgIE9yIG9ubHkgd2hlbiB0aGUgYnVmZmVyIGlzIG5vdCByZWFkLW9ubHkuCistICAgQWRkIG9wdGlvbiB0byBzZXQgInVtYXNrIiBmb3IgYmFja3VwIGZpbGVzIGFuZCBzd2FwIGZpbGVzIChBbnR3ZXJwZW4pLgorICAgICdiYWNrdXB1bWFzaycgYW5kICdzd2FwdW1hc2snPyAgT3IgJ3VtYXNrYmFjaycgYW5kICd1bWFza3N3YXAnPworLSAgIFdoZW4gZWRpdGluZyBhIHJlYWRvbmx5IGZpbGUsIGRvbid0IHVzZSBhIHN3YXAgZmlsZSBidXQgcmVhZCBwYXJ0cyBmcm9tIHRoZQorICAgIG9yaWdpbmFsIGZpbGUuICBBbHNvIGRvIHRoaXMgd2hlbiB0aGUgZmlsZSBpcyBodWdlICg+J21heG1lbScpLiAgV2UgZG8KKyAgICBuZWVkIHRvIGxvYWQgdGhlIGZpbGUgb25jZSB0byBjb3VudCB0aGUgbnVtYmVyIG9mIGxpbmVzPyAgUGVyaGFwcyBrZWVwIGEKKyAgICBjYWNoZWQgbGlzdCBvZiB3aGljaCBsaW5lIGlzIHdoZXJlLgorCisKK1ZpbWluZm86Cis3ICAgQ2FuIHByb2JhYmx5IHJlbW92ZSB0aGUgY29kZSB0aGF0IGNoZWNrcyBmb3IgYSB3cml0YWJsZSB2aW1pbmZvIGZpbGUsCisgICAgYmVjYXVzZSB3ZSBub3cgZG8gdGhlIGNob3duKCkgZm9yIHJvb3QsIGFuZCBvdGhlcnMgY2FuJ3Qgb3ZlcndyaXRlIHNvbWVvbmUKKyAgICBlbHNlJ3MgdmltaW5mbyBmaWxlLgorOCAgIEFkZCBhcmd1bWVudCB0byBrZWVwIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgd2hlbiBWaW0gaXMgc3RhcnRlZCB3aXRoIGEgZmlsZQorICAgIG5hbWUuIChTY2hpbGQpCis4ICAgS2VlcCB0aGUgbGFzdCB1c2VkIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSBicm93c2VyIChGaWxlL09wZW4gbWVudSkuCis4ICAgUmVtZW1iZXIgdGhlIGxhc3QgdXNlZCByZWdpc3RlciBmb3IgIkBAIi4KKzggICBSZW1lbWJlciBhIGxpc3Qgb2YgbGFzdCBhY2Nlc3NlZCBmaWxlcy4gIFRvIGJlIHVzZWQgaW4gdGhlCisgICAgIkZpbGUuT3BlbiBSZWNlbnQiIG1lbnUuICBEZWZhdWx0IGlzIHRvIHJlbWVtYmVyIDEwIGZpbGVzIG9yIHNvLgorICAgIEFsc28gcmVtZW1iZXIgd2hpY2ggZmlsZXMgaGF2ZSBiZWVuIHJlYWQgYW5kIHdyaXR0ZW4uICBIb3cgdG8gZGlzcGxheQorICAgIHRoaXM/Cis3ICAgQWxzbyBzdG9yZSB0aGUgIi4gcmVnaXN0ZXIgKGxhc3QgaW5zZXJ0ZWQgdGV4dCkuCis3ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBzdG9yZSBidWZmZXIgbmFtZXMgaW4gdmltaW5mbyBmaWxlIHJlbGF0aXZlIHRvIHNvbWUKKyAgICBkaXJlY3RvcnksIHRvIG1ha2UgdGhlbSBwb3J0YWJsZSBvdmVyIGEgbmV0d29yay4gKEFhcm9uKQorNiAgIFN0b3JlIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnRseSBvcGVuZWQgd2luZG93cy4gIFNvIHRoYXQgd2hlbiBxdWl0dGluZworICAgIFZpbSwgYW5kIHRoZW4gc3RhcnRpbmcgYWdhaW4gKHdpdGhvdXQgYSBmaWxlIG5hbWUgYXJndW1lbnQpLCB5b3Ugc2VlIHRoZQorICAgIHNhbWUgZmlsZXMgaW4gdGhlIHdpbmRvd3MuICBVc2UgIjpta3Nlc3Npb24iIGNvZGU/CistICAgTWFrZSBtYXJrcyBwcmVzZW50IGluIC52aW1pbmZvIHVzYWJsZSBhcyBmaWxlIG1hcmtzOiBEaXNwbGF5IGEgbGlzdCBvZgorICAgICJsYXN0IHZpc2l0ZWQgZmlsZXMiIGFuZCBzZWxlY3Qgb25lIHRvIGp1bXAgdG8uCisKKworTW9kZWxpbmVzOgorOCAgIEJlZm9yZSB0cnlpbmcgdG8gZXhlY3V0ZSBhIG1vZGVsaW5lLCBjaGVjayB0aGF0IGl0IGxvb2tzIGxpa2Ugb25lICh2YWxpZAorICAgIG9wdGlvbiBuYW1lcykuICBJZiBpdCdzIHZlcnkgd3JvbmcsIHNpbGVudGx5IGlnbm9yZSBpdC4KKyAgICBJZ25vcmUgYSBsaW5lIHRoYXQgc3RhcnRzIHdpdGggIlN1YmplY3Q6ICIuCistICAgV2hlbiBhbiBvcHRpb24gdmFsdWUgaXMgY29taW5nIGZyb20gYSBtb2RlbGluZSwgZG8gbm90IGNhcnJ5IGl0IG92ZXIgdG8KKyAgICBhbm90aGVyIGVkaXRlZCBmaWxlPyAgV291bGQgbmVlZCB0byByZW1lbWJlciB0aGUgdmFsdWUgZnJvbSBiZWZvcmUgdGhlCisgICAgbW9kZWxpbmUgc2V0dGluZy4KKy0gICBBbGxvdyBzZXR0aW5nIGEgdmFyaWFibGUgZnJvbSBhIG1vZGVsaW5lPyAgT25seSBhbGxvdyB1c2luZyBmaXhlZCBzdHJpbmdzLAorICAgIG5vIGZ1bmN0aW9uIGNhbGxzLCB0byBhdm9pZCBhIHNlY3VyaXR5IHByb2JsZW0uCistICAgQWxsb3cgIjpkb2F1dG8gQnVmUmVhZCB4LmNwcCIgaW4gbW9kZWxpbmVzLCB0byBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IKKyAgICAuY3BwIGZpbGVzLgorLSAgIFN1cHBvcnQgdGhlICJhYmJyZXZpYXRlIiBjb21tYW5kIGluIG1vZGVsaW5lcyAoS2Vhcm5zKS4gIENhcmVmdWwgZm9yCisgICAgY2hhcmFjdGVycyBhZnRlciA8RXNjPiwgdGhhdCBpcyBhIHNlY3VyaXR5IGxlYWsuCistICAgQWRkIG9wdGlvbiBzZXR0aW5nIHRvIGFzayB1c2VyIGlmIGhlIHdhbnRzIHRvIGhhdmUgdGhlIG1vZGVsaW5lcyBleGVjdXRlZAorICAgIG9yIG5vdC4gIFNhbWUgZm9yIC5leHJjIGluIGxvY2FsIGRpci4KKworCitPcHRpb25zOgorOCAgIE1ha2UgIjpta3Nlc3Npb24iIHN0b3JlIGJ1ZmZlci1zcGVjaWZpYyBvcHRpb25zIGZvciB0aGUgc3BlY2lmaWMgYnVmZmVyLgorOCAgIFdpdGggIjpta3Nlc3Npb24iIGFsd2F5cyBzdG9yZSB0aGUgJ3Nlc3Npb25vcHRpb25zJyBvcHRpb24sIGV2ZW4gd2hlbgorICAgICJvcHRpb25zIiBpc24ndCBpbiBpdC4gKFN0LUFtYW50KQorNyAgIFNldHRpbmcgYW4gb3B0aW9uIGFsd2F5cyBzZXRzICJ3X3NldF9jdXJzd2FudCIsIHdoaWxlIHRoaXMgaXMgb25seQorICAgIHJlcXVpcmVkIGZvciBhIGZldyBvcHRpb25zLiAgT25seSBkbyBpdCBmb3IgdGhvc2Ugb3B0aW9ucyB0byBhdm9pZCB0aGUKKyAgICBzaWRlIGVmZmVjdC4KKzggICBXaGVuIHVzaW5nICI6bWtzZXNzaW9uIiwgYWxzbyBzdG9yZSBhIGNvbW1hbmQgdG8gcmVzZXQgYWxsIG9wdGlvbnMgdG8KKyAgICB0aGVpciBkZWZhdWx0IHZhbHVlLCBiZWZvcmUgc2V0dGluZyB0aGUgb3B0aW9ucyB0aGF0IGFyZSBub3QgYXQgdGhlaXIKKyAgICBkZWZhdWx0IHZhbHVlLgorOCAgIFNob3VsZCAiOm1rc2Vzc2lvbiIgcmVzdG9yZSB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hlbiB3cml0aW5nIHRoZQorICAgIHNlc3Npb24sIG9yIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHNlc3Npb24gZmlsZSBpcz8gIFByb2JhYmx5IG5lZWQgYSB3b3JkCisgICAgaW4gJ3Nlc3Npb25vcHRpb25zJyB0byBtYWtlIGEgY2hvaWNlOgorICAgICJjdXJkaXIiIChjZCB0byBjdXJyZW50IGRpcmVjdG9yeSB3aGVuIHNlc3Npb24gZmlsZSB3YXMgZ2VuZXJhdGVkKQorICAgICJzZXNzaW9uZGlyIiAoY2QgdG8gZGlyZWN0b3J5IG9mIHNlc3Npb24gZmlsZSkKKyAgICAibm9kaXIiIChkb24ndCBjZCBhdCBhbGwpCis4ICAgTWFrZSAib2xkIiBudW1iZXIgb3B0aW9ucyB0aGF0IHJlYWxseSBnaXZlIGEgbnVtYmVyIG9mIGVmZmVjdHMgaW50byBzdHJpbmcKKyAgICBvcHRpb25zIHRoYXQgYXJlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuICBUaGUgb2xkIG51bWJlciB2YWx1ZXMgc2hvdWxkCisgICAgYWxzbyBiZSBzdXBwb3J0ZWQuCis4ICAgQWRkIGNvbW1hbmRzIHRvIHNhdmUgYW5kIHJlc3RvcmUgYW4gb3B0aW9uLCB3aGljaCBhbHNvIHByZXNlcnZlcyB0aGUgZmxhZworICAgIHRoYXQgbWFya3MgaWYgdGhlIG9wdGlvbiB3YXMgc2V0LiAgVXNlZnVsIHRvIGtlZXAgdGhlIGVmZmVjdCBvZiBzZXR0aW5nCisgICAgJ2NvbXBhdGlibGUnIGFmdGVyICI6c3ludGF4IG9uIiBoYXMgYmVlbiB1c2VkLgorNyAgIFRoZXJlIGlzICd0aXRsZW9sZCcsIHdoeSBpcyB0aGVyZSBubyAnaWNvbm9sZCc/IChDaGF6ZWxhcykKKzcgICBNYWtlICdzY3JvbGxvZmYnIGEgZ2xvYmFsLWxvY2FsIG9wdGlvbiwgc28gdGhhdCBpdCBjYW4gYmUgZGlmZmVyZW50IGluIHRoZQorICAgIHF1aWNrZml4IHdpbmRvdywgZm9yIGV4YW1wbGUuIChHYXJ5IEhvbGxvd2F5KQorNyAgIEFkZCBwbHVnaW5zIGZvciBmb3JtYXR0aW5nLiAgU2hvdWxkIGJlIGFibGUgdG8gbWFrZSBhIGNob2ljZSBkZXBlbmRpbmcgb24KKyAgICB0aGUgbGFuZ3VhZ2Ugb2YgYSBmaWxlIChFbmdsaXNoL0tvcmVhbi9KYXBhbmVzZS9ldGMuKS4KKworCitFeHRlcm5hbCBjb21tYW5kczoKKzggICBXaGVuIGZpbHRlcmluZyB0ZXh0LCByZWRpcmVjdCBzdGRlcnIgc28gdGhhdCBpdCBjYW4ndCBtZXNzIHVwIHRoZSBzY3JlZW4KKyAgICBhbmQgVmltIGRvZXNuJ3QgbmVlZCB0byByZWRyYXcgaXQuICBBbHNvIGZvciAiOnIgIWNtZCIuCis0ICAgU2V0IHNlcGFyYXRlIHNoZWxsIGZvciAiOnNoIiwgcGlwaW5nICJyYW5nZSFmaWx0ZXIiLCByZWFkaW5nIHRleHQgInIgIWxzIgorICAgIGFuZCB3cml0aW5nIHRleHQgIncgIXdjIi4gKERldXRzY2hlKSAgQWxsb3cgYXJndW1lbnRzIGZvciBmYXN0IHN0YXJ0IChlLmcuCisgICAgLWYpLgorNCAgIEFsbG93IGRpcmVjdCBleGVjdXRpb24sIHdpdGhvdXQgdXNpbmcgYSBzaGVsbC4KKzQgICBSdW4gYW4gZXh0ZXJuYWwgY29tbWFuZCBpbiB0aGUgYmFja2dyb3VuZC4gIEJ1dCBob3cgYWJvdXQgSS9PIGluIHRoZSBHVUk/CisgICAgQ2FyZWZ1bDogZG9uJ3QgdHVybiBWaW0gaW50byBhIHNoZWxsIQorNCAgIEFkZCBmZWF0dXJlIHRvIGRpc2FibGUgdXNpbmcgYSBzaGVsbCBvciBleHRlcm5hbCBjb21tYW5kcy4KKworCitNdWx0aXBsZSBXaW5kb3dzOgorNyAgICJ2aW0gLW9PIGZpbGUgLi4uIiB1c2UgYm90aCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzcGxpdHMuCis4ICAgQWRkIENUUkwtVyBUOiBnbyB0byB0aGUgdG9wIHdpbmRvdyBpbiB0aGUgY29sdW1uIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4KKyAgICBBbmQgQ1RSTC1XIEI6IGdvIHRvIGJvdHRvbSB3aW5kb3cuCis3ICAgVXNlIENUUkwtVyA8VGFiPiwgbGlrZSBhbHQtdGFiLCB0byBzd2l0Y2ggYmV0d2VlbiBidWZmZXJzLiAgUmVwZWF0IDxUYWI+CisgICAgdG8gc2VsZWN0IGFub3RoZXIgYnVmZmVyIChvbmx5IGxvYWRlZCBvbmVzPyksIDxCUz4gdG8gZ28gYmFjaywgPEVudGVyPiB0bworICAgIHNlbGVjdCBidWZmZXIsIDxFc2M+IHRvIGdvIGJhY2sgdG8gb3JpZ2luYWwgYnVmZmVyLgorNyAgIEFkZCBhICd3aW5maXh3aWR0aCcgb3B0aW9uLCBzaW1pbGFyIHRvICd3aW5maXhoZWlnaHQnLgorNiAgIEFkZCBhbiBvcHRpb24gdG8gcmVzaXplIHRoZSBzaGVsbCB3aGVuIHNwbGl0dGluZyBhbmQvb3IgY2xvc2luZyBhIHdpbmRvdy4KKyAgICAiOnZzcCIgd291bGQgbWFrZSB0aGUgc2hlbGwgd2lkZXIgYnkgYXMgbWFueSBjb2x1bW5zIGFzIG5lZWRlZCBmb3IgdGhlIG5ldworICAgIHdpbmRvdy4gIFNwZWNpZnkgYSBtYXhpbXVtIHNpemUgKG9yIHVzZSB0aGUgc2NyZWVuIHNpemUpLiAiOmNsb3NlIiB3b3VsZAorICAgIHNocmluayB0aGUgc2hlbGwgYnkgYXMgbWFueSBjb2x1bW5zIGFzIGNvbWUgYXZhaWxhYmxlLiAoRGVtaXJlbCkKKzcgICBXaGVuIHN0YXJ0aW5nIFZpbSBzZXZlcmFsIHRpbWVzLCBpbnN0YW50aWF0ZSBhIFZpbSBzZXJ2ZXIsIHRoYXQgYWxsb3dzCisgICAgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgVmltcy4gIEZlZWxzIGxpa2Ugb25lIFZpbSBydW5uaW5nIHdpdGgKKyAgICBtdWx0aXBsZSB0b3AtbGV2ZWwgd2luZG93cy4gIEVzcC4gdXNlZnVsIHdoZW4gVmltIGlzIHN0YXJ0ZWQgZnJvbSBhbiBJREUKKyAgICB0b28uICBSZXF1aXJlcyBzb21lIGZvcm0gb2YgaW50ZXIgcHJvY2VzcyBjb21tdW5pY2F0aW9uLgorLSAgIFN1cHBvcnQgYSBjb25uZWN0aW9uIHRvIGFuIGV4dGVybmFsIHZpZXdlci4gIENvdWxkIGNhbGwgdGhlIHZpZXdlcgorICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgc29tZSBzZWNvbmRzIG9mIG5vbi1hY3Rpdml0eSwgb3Igd2l0aCBhIGNvbW1hbmQuCisgICAgQWxsb3cgc29tZSB3YXkgb2YgcmVwb3J0aW5nIHNjcm9sbGluZyBhbmQgY3Vyc29yIHBvc2l0aW9uaW5nIGluIHRoZSB2aWV3ZXIKKyAgICB0byBWaW0sIHNvIHRoYXQgdGhlIGxpbmsgYmV0d2VlbiB0aGUgdmlld2VkIGFuZCBlZGl0ZWQgdGV4dCBjYW4gYmUgbWFkZS4KKworCitNYXJrczoKKzggICBXaGVuIGN1cnNvciBpcyBmaXJzdCBtb3ZlZCBiZWNhdXNlIG9mIHNjcm9sbGluZywgc2V0IGEgbWFyayBhdCB0aGlzCisgICAgcG9zaXRpb24uICAoUmltb24gQmFycikgIFVzZSAnLS4KKzggICBBZGQgYSBjb21tYW5kIHRvIGp1bXAgdG8gYSBtYXJrIGFuZCBtYWtlIHRoZSBtb3Rpb24gaW5jbHVzaXZlLiBnJ20gYW5kIGdgbT8KKzggICBUaGUgJyIgbWFyayBpcyBzZXQgdG8gdGhlIGZpcnN0IGxpbmUsIGV2ZW4gd2hlbiBkb2luZyAiOm5leHQiIGEgZmV3IHRpbWVzLgorICAgIE9ubHkgc2V0IHRoZSAnIiBtYXJrIHdoZW4gdGhlIGN1cnNvciB3YXMgcmVhbGx5IG1vdmVkIGluIGEgZmlsZS4KKzggICBNYWtlIGBgIGFuZCAnJywgd2hpY2ggd291bGQgcG9zaXRpb24gdGhlIG5ldyBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIG1pZGRsZQorICAgIG9mIHRoZSB3aW5kb3csIHJlc3RvcmUgdGhlIG9sZCB0b3BsaW5lIChvciByZWxhdGl2ZSBwb3NpdGlvbikgZnJvbSB3aGVuCisgICAgdGhlIG1hcmsgd2FzIHNldC4KKzcgICBNYWtlIGEgbGlzdCBvZiBmaWxlIG1hcmtzIGluIGEgc2VwYXJhdGUgd2luZG93LiAgRm9yIGxpc3RpbmcgYWxsIGJ1ZmZlcnMsCisgICAgbWF0Y2hpbmcgdGFncywgZXJyb3JzLCBldGMuICBOb3JtYWwgY29tbWFuZHMgdG8gbW92ZSBhcm91bmQuICBBZGQgY29tbWFuZHMKKyAgICB0byBqdW1wIHRvIHRoZSBtYXJrIChpbiBjdXJyZW50IHdpbmRvdyBvciBuZXcgd2luZG93KS4gIFN0YXJ0IGl0IHdpdGgKKyAgICAiOmJyb3dzZSBtYXJrcyI/Cis2ICAgQWRkIGEgbWVudSB0aGF0IGxpc3RzIHRoZSBNYXJrcyBsaWtlICI6bWFya3MiLiAoQW1lcmlnZSkKKzggICBNYWtlIGl0IHBvc3NpYmxlIHRvIGRlbGV0ZSBtYXJrcy4gIENoYXJsZXMgQ2FtcGJlbGwgaGFzIGEgcGF0Y2ggdGhhdCBkb2VzCisgICAgdGhpcyB3aXRoIHRoZSBtYXJrY2xlYXIoKSBmdW5jdGlvbiAoMjAwNCBKYW4gOSkuICBBbmQgdGhlICI6ZGVsbWFyayIKKyAgICBjb21tYW5kICgyMDA0IEZlYiA5KQorNyAgIEZvciAiOmp1bXBzIiwgIjp0YWdzIiBhbmQgIjptYXJrcyIsIGZvciBub3QgbG9hZGVkIGJ1ZmZlcnMsIHJlbWVtYmVyIHRoZQorICAgIHRleHQgYXQgdGhlIG1hcmsuICBIaWdobGlnaHQgdGhlIGNvbHVtbiB3aXRoIHRoZSBtYXJrLgorNyAgIEhpZ2hsaWdodCBlYWNoIG1hcmsgaW4gc29tZSB3YXkgKFdpdGggIk1hcmsiIGhpZ2hsaWdodCBncm91cCkuCisgICAgT3IgZGlzcGxheSBtYXJrcyBpbiBhIHNlcGFyYXRlIGNvbHVtbiwgbGlrZSAnbnVtYmVyJyBkb2VzLgorNyAgIFVzZSBkIm0gdG8gZGVsZXRlIHJlY3Rhbmd1bGFyIGFyZWEgZnJvbSBjdXJzb3IgdG8gbWFyayBtIChsaWtlIFZpbGUncyBcbQorICAgIGNvbW1hbmQpLgorNyAgIFRyeSB0byBrZWVwIG1hcmtzIGluIHRoZSBzYW1lIHBvc2l0aW9uIHdoZW46CisgICAgLSByZXBsYWNpbmcgd2l0aCBhIGxpbmUgYnJlYWssIGxpa2UgaW4gIjpzL3BhdC9eTS8iLCBtb3ZlIG1hcmtzIGFmdGVyIHRoZQorICAgICAgbGluZSBicmVhayBjb2x1bW4gdG8gdGhlIG5leHQgbGluZS4gKEFjZXZlZG8pCisgICAgLSBpbnNlcnRpbmcvZGVsZXRpbmcgY2hhcmFjdGVycyBpbiBhIGxpbmUuCis1ICAgSW5jbHVkZSBtYXJrcyBmb3Igc3RhcnQvZW5kIG9mIHRoZSBjdXJyZW50IHdvcmQgYW5kIHNlY3Rpb24uICBVc2VmdWwgaW4KKyAgICBtYXBwaW5ncy4KKzYgICBBZGQgInVubmFtZWQgbWFyayIgZmVhdHVyZTogTGlrZSBtYXJrcyBmb3IgdGhlICI6ZyIgY29tbWFuZCwgYnV0IHBsYWNlIGFuZAorICAgIHVucGxhY2UgdGhlbSB3aXRoIGNvbW1hbmRzIGJlZm9yZSBkb2luZyBzb21ldGhpbmcgd2l0aCB0aGUgbGluZXMuCisgICAgSGlnaGxpZ2h0IHRoZSBtYXJrZWQgbGluZXMgc29tZWhvdy4KKworCitEaWdyYXBoczoKKzcgICBNYWtlICJnYSIgc2hvdyB0aGUgZGlncmFwaCBmb3IgYSBjaGFyYWN0ZXIsIGlmIGl0IGV4aXN0cy4KKyAgICBBbHNvIHRoZSBrZXltYXA/CistICAgTWFrZSBpdCBwb3NzaWJsZSB0byBlbnRlciAicjxDLUU+IiBhbmQgInI8Qy1ZPiIgKGdldCBjaGFyYWN0ZXIgZnJvbSBsaW5lCisgICAgYmVsb3cvYWJvdmUpLgorLSAgIFVzZSBkaWdyYXBoIHRhYmxlIHRvIHRlbGwgVmltIGFib3V0IHRoZSBjb2xsYXRpbmcgc2VxdWVuY2Ugb2Ygc3BlY2lhbAorICAgIGNoYXJhY3RlcnM/Cis4ICAgQWRkIGNvbW1hbmQgdG8gcmVtb3ZlIChhbGwpIGRpZ3JhcGhzLiAoQnJvd24pCis3ICAgU3VwcG9ydCBkaWZmZXJlbnQgc2V0cyBvZiBkaWdyYXBocyAoZGVwZW5kaW5nIG9uIHRoZSBjaGFyYWN0ZXIgc2V0PykuICBBdAorICAgIGxlYXN0IExhdGluMS9Vbmljb2RlLCBMYXRpbi0yLCBNUy1ET1MgKGVzcC4gZm9yIFdpbjMyKS4KKworCitXcml0aW5nIGZpbGVzOgorLSAgIEluIHZpbV9yZW5hbWUoKSwgc2hvdWxkIGxvY2sgImZyb20iIGZpbGUgd2hlbiBkZWxldGluZyAidG8iIGZpbGUgZm9yCisgICAgc3lzdGVtcyBvdGhlciB0aGFuIEFtaWdhLiAgQXZvaWRzIHByb2JsZW1zIHdpdGggdW5leHBlY3RlZCBsb25nbmFtZSB0bworICAgIHNob3J0bmFtZSBjb252ZXJzaW9uLgorOCAgIHdyaXRlIG1jaF9pc2RldmljZSgpIGZvciBBbWlnYSwgTWFjLCBWTVMsIGV0Yy4KKzggICBXaGVuIGFwcGVuZGluZyB0byBhIGZpbGUsIFZpbSBzaG91bGQgYWxzbyBtYWtlIGEgYmFja3VwIGFuZCBhICdwYXRjaG1vZGUnCisgICAgZmlsZS4KKzggICAnYmFja3Vwc2tpcCcgZG9lc24ndCB3cml0ZSBhIGJhY2t1cCBmaWxlIGF0IGFsbCwgYSBiaXQgZGFuZ2Vyb3VzIGZvciBzb21lCisgICAgYXBwbGljYXRpb25zLiAgQWRkICdiYWNrdXBlbHNld2hlcmUnIHRvIHdyaXRlIGEgYmFja3VwIGZpbGUgaW4gYW5vdGhlcgorICAgIGRpcmVjdG9yeT8gIE9yIGFkZCBhIGZsYWcgdG8gJ2JhY2t1cGRpcic/Cis3ICAgVGhlICdkaXJlY3RvcnknIG9wdGlvbiBzdXBwb3J0cyBjaGFuZ2luZyBwYXRoIHNlcGFyYXRvcnMgdG8gIiUiIHRvIG1ha2UKKyAgICBmaWxlIG5hbWVzIHVuaXF1ZSwgYWxzbyBzdXBwb3J0IHRoaXMgZm9yICdiYWNrdXBkaXInLiAoTWlrb2xhaiBNYWNob3dza2kpCis2ICAgQWRkIGFuIG9wdGlvbiB0byB3cml0ZSBhIG5ldywgbnVtYmVyZWQsIGJhY2t1cCBmaWxlIGVhY2ggdGltZS4gIExpa2UKKyAgICAncGF0Y2htb2RlJywgZS5nLiwgJ2JhY2t1cG1vZGUnLgorNiAgIE1ha2UgaXQgcG9zc2libGUgdG8gd3JpdGUgJ3BhdGNobW9kZScgZmlsZXMgdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgorICAgIEUuZy4sICI6c2V0IHBhdGNobW9kZT1+L2JhY2t1cHMvKi5vcmlnIi4gKFRob21hcykKKzYgICBBZGQgYW4gb3B0aW9uIHRvIHByZXBlbmQgc29tZXRoaW5nIHRvIHRoZSBiYWNrdXAgZmlsZSBuYW1lLiAgRS5nLiwgIiMiLgorICAgIE9yIG1heWJlIGFsbG93IGEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBiYWNrdXAgZmlsZSBuYW1lPworOCAgIE9ubHkgbWFrZSBhIGJhY2t1cCB3aGVuIG92ZXJ3cml0aW5nIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUuIEF2b2lkcworICAgIGxvc2luZyB0aGUgb3JpZ2luYWwgd2hlbiB3cml0aW5nIHR3aWNlLiAoU2xvb3RtYW4pCis3ICAgT24gbm9uLVVuaXggbWFjaGluZXMsIGFsc28gb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBmaWxlIGluIHNvbWUgc2l0dWF0aW9ucworICAgIChmaWxlIHN5c3RlbSBmdWxsLCBpdCdzIGEgbGluayBvbiBhbiBORlMgcGFydGl0aW9uKS4KKzcgICBXaGVuIGVkaXRpbmcgYSBmaWxlLCBjaGVjayB0aGF0IGl0IGhhcyBiZWVuIGNoYW5nZSBvdXRzaWRlIG9mIFZpbSBtb3JlCisgICAgb2Z0ZW4sIG5vdCBvbmx5IHdoZW4gd3JpdGluZyBvdmVyIGl0LiAgRS5nLiwgYXQgdGhlIHRpbWUgdGhlIHN3YXAgZmlsZSBpcworICAgIGZsdXNoZWQuICBPciBldmVyeSB0ZW4gc2Vjb25kcyBvciBzbyAodXNlIHRoZSB0aW1lIG9mIGRheSwgY2hlY2sgaXQgYmVmb3JlCisgICAgd2FpdGluZyBmb3IgYSBjaGFyYWN0ZXIgdG8gYmUgdHlwZWQpLgorOCAgIFdoZW4gYSBmaWxlIHdhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCwgc2hvdyB0aGlzIGluIHRoZSBzdGF0dXMKKyAgICBsaW5lIG9mIHRoZSB3aW5kb3csIGxpa2UgIlt0aW1lXSIuCisgICAgTWFrZSBpdCBlYXNpZXIgdG8gcmVsb2FkIGFsbCBvdXRkYXRlZCBmaWxlcyB0aGF0IGRvbid0IGhhdmUgY2hhbmdlcy4KKyAgICBBdXRvbWF0aWMgYW5kL29yIHdpdGggYSBjb21tYW5kLgorCisKK1N1YnN0aXR1dGU6Cis4ICAgTWFrZSBpdCBlYXNpZXIgdG8gcmVwbGFjZSBpbiBhbGwgZmlsZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QuIEUuZy46CisgICAgIjphcmdzdWIvb2xkd29yZC9uZXd3b3JkLyIuICBXb3JrcyBsaWtlICI6YXJnZG8gJXMvb2xkd29yZC9uZXd3b3JkL2d8dyIuCistICAgOnMvLy9wIHByaW50cyB0aGUgbGluZSBhZnRlciBhIHN1YnN0aXR1dGlvbi4KKy0gICBXaXRoIDpzLy8vYyByZXBsYWNlIFwmLCB+LCBldGMuIHdoZW4gc2hvd2luZyB0aGUgcmVwbGFjZW1lbnQgcGF0dGVybi4KKzggICBXaXRoIDpzLy8vYyBhbGxvdyBzY3JvbGxpbmcgaG9yaXpvbnRhbGx5IHdoZW4gJ25vd3JhcCcgaXMgZWZmZWN0aXZlLgorICAgIEFsc28gYWxsb3cgYSBjb3VudCBiZWZvcmUgdGhlIHNjcm9sbGluZyBrZXlzLgorLSAgIEFkZCBudW1iZXIgb3B0aW9uIHRvICI6cy8vMiI6IHJlcGxhY2Ugc2Vjb25kIG9jY3VycmVuY2Ugb2Ygc3RyaW5nPyBPcjoKKyAgICA6cy8vL04gc3Vic3RpdHV0ZXMgTiB0aW1lcy4KKy0gICBBZGQgYW5zd2VycyB0byAiOnN1YnN0aXR1dGUiIHdpdGggJ2MnIGZsYWcsIHVzZWQgaW4gYSAiOmdsb2JhbCIsIGUuZy46CisgICAgIjpnL3BhdDEvcy9wYXQyL3BhdDMvY2ciOiAnQScgZG8gYWxsIHJlbWFpbmluZyByZXBsYWNlbWVudHMsICdRJyBkb24ndCBkbworICAgIGFueSByZXBsYWNlbWVudHMsICd1JyB1bmRvIGxhc3Qgc3Vic3RpdHV0aW9uLgorNyAgIFN1YnN0aXR1dGUgaW4gYSBibG9jayBvZiB0ZXh0LiAgVXNlIHtsaW5lfS57Y29sdW1ufSBub3RhdGlvbiBpbiBhbiBFeAorICAgIHJhbmdlLCBlLmcuOiAiOjEuMywkLjVzIiBtZWFucyB0byBzdWJzdGl0dXRlIGZyb20gbGluZSAxIGNvbHVtbiAzIHRvIHRoZQorICAgIGxhc3QgbGluZSBjb2x1bW4gNS4KKzUgICBBZGQgY29tbWFuZHMgdG8gYm9va21hcmsgbGluZXMsIGRpc3BsYXkgYm9va21hcmtzLCByZW1vdmUgYm9va21hcmtzLAorICAgIG9wZXJhdGUgb24gbGluZXMgd2l0aCBib29rbWFya3MsIGV0Yy4gIExpa2UgIjpnbG9iYWwiIGJ1dCB3aXRoIHRoZQorICAgIHBvc3NpYmlsaXR5IHRvIGtlZXAgdGhlIGJvb2ttYXJrcyBhbmQgdXNlIHRoZW0gd2l0aCBzZXZlcmFsIGNvbW1hbmRzLgorICAgIChTdGFuaXNsYXYgU2l0YXIpCisKKworTW91c2Ugc3VwcG9ydDoKKzcgICBXaW4zMjogQWRkIHBhdGNoIGZvciA1LWJ1dHRvbiBtb3VzZS4gKE1pY2hhZWwgR2VkZGVzIDIwMDEgTm92IDI2KQorOCAgIEFkZCAnbycgZmxhZyB0byAnbW91c2UnPworNyAgIEJlIGFibGUgdG8gc2V0IGEgJ21vdXNlc2hhcGUnIGZvciB0aGUgcG9wdXAgbWVudS4KKzggICBBZGQgJ21vdXNlJyBmbGFnLCB3aGljaCBzZXRzIGEgYmVoYXZpb3IgbGlrZSBWaXN1YWwgbW9kZSwgYnV0IGF1dG9tYXRpYworICAgIHlhbmtpbmcgYXQgdGhlIGJ1dHRvbi11cCBldmVudC4gIE9yIGxpa2UgU2VsZWN0IG1vZGUsIGJ1dCB0eXBpbmcgZ2V0cyB5b3UKKyAgICBvdXQgb2YgU2VsZWN0IG1vZGUsIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZSB0ZXh0LiAoQmhhc2thcikKKzcgICBDaGVja291dCBzeXNtb3VzZSgpIGZvciBGcmVlQlNEIGNvbnNvbGUgbW91c2Ugc3VwcG9ydC4KKy0gICBJbXBsZW1lbnQgbW91c2Ugc3VwcG9ydCBmb3IgdGhlIEFtaWdhIGNvbnNvbGUuCistICAgVXNpbmcgcmlnaHQgbW91c2UgYnV0dG9uIHRvIGV4dGVuZCBhIGJsb2Nrd2lzZSBzZWxlY3Rpb24gc2hvdWxkIGF0dGFjaCB0bworICAgIHRoZSBuZWFyZXN0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlIChmb3VyIHBvc3NpYmxlIGNvcm5lcnMpLgorLSAgIFByZWNlZGUgbW91c2UgY2xpY2sgYnkgYSBudW1iZXIgdG8gc2ltdWxhdGUgZG91YmxlIGNsaWNrcz8hPworLSAgIFdoZW4gbW91c2UgY2xpY2sgYWZ0ZXIgJ3InIGNvbW1hbmQsIGdldCBjaGFyYWN0ZXIgdGhhdCB3YXMgcG9pbnRlZCB0by4KKworCitDcnlwdCBhbmQgc2VjdXJpdHk6Cis4ICAgQWxzbyBjcnlwdCB0aGUgc3dhcGZpbGUsIGVhY2ggYmxvY2sgc2VwYXJhdGVseS4gIENoYW5nZSBtZl93cml0ZSgpIGFuZAorICAgIG1mX3JlYWQoKS4gIEhvdyB0byBnZXQgYl9wX2tleSB0byB0aGVzZSBmdW5jdGlvbnM/Cis3ICAgU3VwcG9ydCBhIHN0cm9uZ2VyIGVuY3J5cHRpb24uICBKYXNvbiBIb2x0IGltcGxlbWVudGVkIEFFUyAoTWF5IDYgMjAwMykuCis4ICAgTG9jayBhbGwgdXNlZCBtZW1vcnkgc28gdGhhdCBpdCBkb2Vzbid0IGdldCBzd2FwcGVkIHRvIGRpc2sgKHVuY3J5cHRlZCkuCisgICAgUGF0Y2ggYnkgSmFzb24gSG9sdCwgMjAwMyBNYXkgMjMuCisKKworQXJndW1lbnQgbGlzdDoKKzYgICBBZGQgY29tbWFuZCB0byBwdXQgYWxsIGZpbGVuYW1lcyBmcm9tIHRoZSB0YWcgZmlsZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisgICAgV2hlbiBnaXZlbiBhbiBhcmd1bWVudCwgb25seSB1c2UgdGhlIGZpbGVzIHdoZXJlIHRoYXQgYXJndW1lbnQgbWF0Y2hlcworICAgIChsaWtlIGBncmVwIC1sIGlkZW50YCkgYW5kIGp1bXAgdG8gdGhlIGZpcnN0IG1hdGNoLgorNiAgIEFkZCBjb21tYW5kIHRvIGZvcm0gYW4gYXJncyBsaXN0IGZyb20gYWxsIHRoZSBidWZmZXJzPworCisKK1JlZ2lzdGVyczoKKzggICBEb24ndCBkaXNwbGF5IGVtcHR5IHJlZ2lzdGVycyB3aXRoICI6ZGlzcGxheSIuIChFdGllbm5lKQorOCAgIE1ha2UgdGhlICMgcmVnaXN0ZXIgd3JpdGFibGUsIHNvIHRoYXQgaXQgY2FuIGJlIHJlc3RvcmVkIGFmdGVyIGp1bXBpbmcKKyAgICBhcm91bmQgaW4gd2luZG93cy4KKzggICBBZGQgcHV0IGNvbW1hbmQgdGhhdCBvdmVyd3JpdGVzIGV4aXN0aW5nIHRleHQuICBTaG91bGQgYWxzbyB3b3JrIGZvcgorICAgIGJsb2Nrcy4gIFVzZWZ1bCB0byBtb3ZlIHRleHQgYXJvdW5kIGluIGEgdGFibGUuICBXb3JrcyBsaWtlIHVzaW5nICJSIF5SIHIiCisgICAgZm9yIGV2ZXJ5IGxpbmUuCis2ICAgV2hlbiB5YW5raW5nIGludG8gdGhlIHVubmFtZWQgcmVnaXN0ZXJzIHNldmVyYWwgdGltZXMsIHNvbWVob3cgbWFrZSB0aGUKKyAgICBwcmV2aW91cyBjb250ZW50cyBhbHNvIGF2YWlsYWJsZSAobGlrZSBpdCdzIGRvbmUgZm9yIGRlbGV0aW5nKS4gIFdoYXQKKyAgICByZWdpc3RlciBuYW1lcyB0byB1c2U/ICBnIjEsIGciMiwgZXRjLj8KKy0gICBXaGVuIGFwcGVuZGluZyB0byBhIHJlZ2lzdGVyLCBhbHNvIHJlcG9ydCB0aGUgdG90YWwgcmVzdWx0aW5nIG51bWJlciBvZgorICAgIGxpbmVzLiAgT3IganVzdCBzYXkgIjk5IG1vcmUgbGluZXMgeWFua2VkIiwgYWRkIHRoZSAibW9yZSIuCistICAgV2hlbiBpbnNlcnRpbmcgYSByZWdpc3RlciBpbiBJbnNlcnQgbW9kZSB3aXRoIENUUkwtUiwgZG9uJ3QgaW5zZXJ0IGNvbW1lbnQKKyAgICBsZWFkZXIgd2hlbiBsaW5lIHdyYXBzPworLSAgIFRoZSAiOkByIiBjb21tYW5kcyBzaG91bGQgdGFrZSBhIHJhbmdlIGFuZCBleGVjdXRlIHRoZSByZWdpc3RlciBmb3IgZWFjaAorICAgIGxpbmUgaW4gdGhlIHJhbmdlLgorLSAgIEFkZCAiUCIgY29tbWFuZCB0byBpbnNlcnQgY29udGVudHMgb2YgdW5uYW1lZCByZWdpc3RlciwgbW92ZSBzZWxlY3RlZCB0ZXh0CisJdG8gcG9zaXRpb24gb2YgcHJldmlvdXMgZGVsZXRlZCAodG8gc3dhcCBmb28gYW5kIGJhciBpbiAiICsgZm9vIikKKzggICBTaG91bGQgYmUgYWJsZSB0byB5YW5rIGFuZCBkZWxldGUgaW50byB0aGUgIi8gcmVnaXN0ZXIuCisgICAgSG93IHRvIHRha2UgY2FyZSBvZiB0aGUgZmxhZ3MgKG9mZnNldCwgbWFnaWMpPworNyAgIEFkZCAhIHJlZ2lzdGVyLCBmb3Igc2hlbGwgY29tbWFuZHMuIChwYXRjaCBmcm9tIEdyZW5pZSkKKworRGVidWcgbW9kZToKKzcgICBBZGQgc29tZXRoaW5nIHRvIGVuYWJsZSBkZWJ1Z2dpbmcgd2hlbiBhIHJlbW90ZSBtZXNzYWdlIGlzIHJlY2VpdmVkLgorOCAgIEFkZCBicmVha3BvaW50cyBmb3Igc2V0dGluZyBhbiBvcHRpb24KKzggICBBZGQgYnJlYWtwb2l0cyBmb3IgYXNzaWduaW5nIHRvIGEgdmFyaWFibGUuCis3ICAgQWRkIGEgd2F0Y2hwb2ludCBpbiB0aGUgZGVidWcgbW9kZTogQW4gZXhwcmVzc2lvbiB0aGF0IGJyZWFrcyBleGVjdXRpb24KKyAgICB3aGVuIGV2YWx1YXRpbmcgdG8gbm9uLXplcm8uCis3ICAgU3RvcmUgdGhlIGhpc3RvcnkgZnJvbSBkZWJ1ZyBtb2RlIGluIHZpbWluZm8uCis3ICAgTWFrZSB0aGUgZGVidWcgbW9kZSBoaXN0b3J5IGF2YWlsYWJsZSB3aXRoIGhpc3RnZXQoKSBldCBhbC4KKworCitWYXJpb3VzIGltcHJvdmVtZW50czoKKzggICBBZGQgIjpyZW5hbWUiIGNvbW1hbmQ6IHJlbmFtZSB0aGUgZmlsZSBvZiB0aGUgY3VycmVudCBidWZmZXIgYW5kIHJlbmFtZQorICAgIHRoZSBidWZmZXIuICBCdWZmZXIgbWF5IGJlIG1vZGlmaWVkLgorNyAgIEFkZCB0aGUgTXpTY2hlbWUgaW50ZXJmYWNlLiAgUGF0Y2ggb24gaHR0cDovL2lhbXBoZXQubm0ucnUvc2NoZW1lLworICAgIChTZXJnZXkgS2hvcmV2KQorNiAgIEluIHRoZSBxdWlja2ZpeCB3aW5kb3cgc3RhdHVzbGluZSBhZGQgdGhlIGNvbW1hbmQgdXNlZCB0byBnZXQgdGhlIGxpc3Qgb2YKKyAgICBlcnJvcnMsIGUuZy4gIjptYWtlIGZvbyIsICI6Z3JlcCBzb21ldGhpbmcgKi5jIi4KKzYgICBQeXRob24gaW50ZXJmYWNlOiBhZGQgdmltLm1lc3NhZ2UoKSBmdW5jdGlvbi4gKE1pY2hhbCBWaXRlY2VrLCAyMDAyIE5vdiA1KQorNyAgIFN1cHBvcnQgdXNpbmcgIjp2ZXJ0IiB3aXRoIFVzZXIgY29tbWFuZHMuICBBZGQgZXhwYW5kYWJsZSBpdGVtcyA8dmVydD4uCisgICAgRG8gdGhlIHNhbWUgZm9yICI6YnJvd3NlIiBhbmQgIjpjb25maXJtIj8KKyAgICBGb3IgIjpzaWxlbnQiIGFuZCAiOmRlYnVnIiBhcHBseSB0byB0aGUgd2hvbGUgdXNlciBjb21tYW5kLgorNyAgIEFsbG93IGEgd2luZG93IG5vdCB0byBoYXZlIGEgc3RhdHVzbGluZS4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBhCisgICAgd2luZG93IGFzIGEgYnVmZmVyLXRhYiBzZWxlY3Rpb24uCis3ICAgQWRkIGFuIGludmlzaWJsZSBidWZmZXIgd2hpY2ggY2FuIGJlIGVkaXRlZC4gIEZvciB1c2UgaW4gc2NyaXB0cyB0aGF0IHdhbnQKKyAgICB0byBtYW5pcHVsYXRlIHRleHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgd2luZG93IGxheW91dC4KKzggICBBZGQgYSBjb21tYW5kIHRvIHJldmVydCB0byB0aGUgc2F2ZWQgdmVyc2lvbiBvZiBmaWxlOyB1bmRvIG9yIHJlZG8gdW50aWwKKyAgICBhbGwgY2hhbmdlcyBhcmUgZ29uZS4KKzggICBNYWtlICdzdGF0dXNsaW5lJyBsb2NhbCwgc28gdGhhdCBlYWNoIHdpbmRvdyBjYW4gaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZS4KKyAgICBCdXQgc2hvdWxkIGl0IGFsc28gYmUgbG9jYWwgdG8gYSBidWZmZXI/IChZZWdhcHBhbiBMYWtzaG1hbmFuIGhhcyBhIHBhdGNoLAorICAgIDIwMDIgZmViIDE1KQorNyAgIEFkZCBhICI6Y3BmaWxlIiwgZ28gaW4gdGhlIG90aGVyIGRpcmVjdGlvbiBhcyAiOmNuZmlsZSIuCis2ICAgInZpbSAtcSAtIiBzaG91bGQgcmVhZCB0aGUgbGlzdCBvZiBlcnJvcnMgZnJvbSBzdGRpbi4gKEdhdXRhbSBNdWR1bnVyaSkKKzggICBJbiB0aGUgZ3ppcCBwbHVnaW4sIGFsc28gcmVjb2duaXplICouZ3oub3JpZywgKi5nei5iYWssIGV0Yy4gIExpa2UgaXQncworICAgIGRvbmUgZm9yIGZpbGV0eXBlIGRldGVjdGlvbi4gIFBhdGNoIGZyb20gV2FsdGVyIEJyaXNjb2UsIDIwMDMgSnVsIDEuCis4ICAgQWRkICItLXJlbW90ZS1mYWlsIjogV2hlbiBjb250YWN0aW5nIHRoZSBzZXJ2ZXIgZmFpbHMsIGV4aXQgVmltLgorICAgIEFkZCAiLS1yZW1vdGUtc2VsZiI6IFdoZW4gY29udGFjdGluZyB0aGUgc2VydmVyIGZhaWxzLCBkbyBpdCBpbiB0aGlzIFZpbS4KKyAgICBPdmVycnVsZXMgdGhlIGRlZmF1bHQgb2YgIi0tcmVtb3RlLXNlbmQiIHRvIGZhaWwgYW5kICItLXJlbW90ZSIgdG8gZG8gaXQKKyAgICBpbiB0aGlzIFZpbS4KKzggICBXaGVuIFZpbSB3YXMgc3RhcnRlZCB3aXRob3V0IGEgc2VydmVyLCBtYWtlIGl0IHBvc3NpYmxlIHRvIHN0YXJ0IG9uZSwgYXMKKyAgICBpZiB0aGUgIi0tc2VydmVybmFtZSIgYXJndW1lbnQgd2FzIGdpdmVuLiAiOnN0YXJ0c2VydmVyIDxuYW1lPiI/Cis4ICAgTm8gYWRkcmVzcyByYW5nZSBjYW4gYmUgdXNlZCBiZWZvcmUgdGhlIGNvbW1hbmQgbW9kaWZpZXJzLiAgVGhpcyBtYWtlcworICAgIHRoZW0gZGlmZmljdWx0IHRvIHVzZSBpbiBhIG1lbnUgZm9yIFZpc3VhbCBtb2RlLiAgQWNjZXB0IHRoZSByYW5nZSBhbmQKKyAgICBoYXZlIGl0IGFwcGx5IHRvIHRoZSBmb2xsb3dpbmcgY29tbWFuZC4KKzggICBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHNldCAnZmlsZWZvcm1hdHMnIHRvIGZvcmNlIGEgZm9ybWF0IGFuZCBzdHJpcCBvdGhlcgorICAgIENSIGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZSwgZm9yICJkb3MiIGZpbGVzIHJlbW92ZSBDUiBjaGFyYWN0ZXJzIGF0IHRoZQorICAgIGVuZCBvZiB0aGUgbGluZSwgc28gdGhhdCBhIGZpbGUgd2l0aCBtaXhlZCBsaW5lIGVuZGluZ3MgaXMgY2xlYW5lZCB1cC4KKyAgICBUbyBqdXN0IG5vdCBkaXNwbGF5IHRoZSBDUiBjaGFyYWN0ZXJzOiBBZGQgYSBmbGFnIHRvICdkaXNwbGF5Jz8KKzcgICBBZGQgYSAiLUAgZmlsZWxpc3QiIGFyZ3VtZW50OiByZWFkIGZpbGUgbmFtZXMgZnJvbSBhIGZpbGUuIChEYXZpZCBLb3RjaGFuCisgICAgaGFzIGEgcGF0Y2ggZm9yIGl0KQorNyAgIFNvbWUgY29tcGlsZXJzIGdpdmUgZXJyb3IgbWVzc2FnZXMgaW4gd2hpY2ggdGhlIGZpbGUgbmFtZSBkb2VzIG5vdCBoYXZlIGEKKyAgICBwYXRoLiAgQmUgYWJsZSB0byBzcGVjaWZ5IHRoYXQgJ3BhdGgnIGlzIHVzZWQgZm9yIHRoZXNlIGZpbGVzLgorOCAgIEFkZCB0ZXJtIGVudHJpZXMgZm9yIGZ1bmN0aW9uIGtleXMgb24geHRlcm0gd2l0aCBhbHQgYW5kIGN0cmwgKG5ldyBpbiBwbAorICAgIDk0KS4gIEUuZy4sIENvbnRyb2wgYWRkcyAiOzUiIGluICI8RXNjPlsyMDs1fiIuICBGaW5kIGEgZ2VuZXJpYyB3YXkgdG8KKyAgICBwcmVwZW5kIGEgbW9kaWZpZXIgaW4gY29uc29sZSBtb2RlLCB0byBhdm9pZCBoYXZpbmcgdG8gc3BlY2lmeSBlYWNoCisgICAgaW5kaXZpZHVhbCBtb2RpZmllZCBrZXkuCisgICAgU3RldmUgV2FsbCBoYXMgYSBwYXRjaCAoMjAwMiBNYXIgMTIpIGZvciBhZGRpbmcgZnVuY3Rpb24ga2V5cyB1cCB0byAzNywKKyAgICB3aXRoIG1vZGlmaWVycy4KKzcgICBYdGVybSBzZW5kcyA8RXNjPk8zRiBmb3IgPE0tRW5kPi4gIFNpbWlsYXJseSBmb3Igb3RoZXIgPE0tSG9tZT4sIDxNLUxlZnQ+LAorICAgIGV0Yy4gIENvbWJpbmF0aW9ucyBvZiBBbHQsIEN0cmwgYW5kIFNoaWZ0IGFyZSBhbHNvIHBvc3NpYmxlLiAgUmVjb2duaXplCisgICAgdGhlc2UgdG8gYXZvaWQgaW5zZXJ0aW5nIHRoZSByYXcgYnl0ZSBzZXF1ZW5jZSwgaGFuZGxlIGxpa2UgdGhlIGtleQorICAgIHdpdGhvdXQgbW9kaWZpZXIgKHVubGVzcyBtYXBwZWQpLgorOCAgIEFkZCAiOmJyZWFrZGVsICoiOiBkZWxldGUgYWxsIGJyZWFrcG9pbnRzLgorNyAgIFN1cHBvcnQgIjpicm93c2UgZWRpdCIgaW4gY29uc29sZSwgdXNpbmcgZXhwbG9yZXIudmltPworNiAgIEFkZCAiZ0ciOiBsaWtlIHdoYXQgImdqIiBpcyB0byAiaiI6IGdvIHRvIHRoZSBOJ3RoIHdpbmRvdyBsaW5lLgorOCAgIEFkZCBjb21tYW5kIGxpa2UgIjpub3JtYWwiIHRoYXQgYWNjZXB0cyA8S2V5PiBub3RhdGlvbiBsaWtlICI6bWFwIi4KKzkgICBTdXBwb3J0IEFDTHMgb24gbW9yZSBzeXN0ZW1zLgorNyAgIEFkZCBNb2RlTXNnVmlzdWFsLCBNb2RlTXNnSW5zZXJ0LCBldGMuIHNvIHRoYXQgZWFjaCBtb2RlIG1lc3NhZ2UgY2FuIGJlCisgICAgaGlnaGxpZ2h0ZWQgZGlmZmVyZW50bHkuCis4ICAgQWxsb3cgdXNpbmcgIioqIiBhcyBhIHdpbGRjYXJkIGluIGNvbW1hbmRzIGxpa2UgIjpuZXh0IiBhbmQgIjphcmdzIi4KKzggICBQcm92aWRlIGEgd2F5IHRvIGF2b2lkIHdpbGRjYXJkIGV4cGFuc2lvbi4gIFVzZSBkb3VibGUgcXVvdGVzLCBsaWtlIGluIHRoZQorICAgIHNoZWxsPyAgOmVkaXQgIm15W2ZpbGVdLnR4dCIgIChjdXJyZW50bHkgd29ya3MgaWYgdGhlcmUgaXMgbm8gIm15Zi50eHQiKQorNyAgIEFkZCBhIG1lc3NhZ2UgYXJlYSBmb3IgdGhlIHVzZXIuICBTZXQgc29tZSBvcHRpb24gdG8gcmVzZXJ2ZSBzcGFjZSAoYWJvdmUKKyAgICB0aGUgY29tbWFuZCBsaW5lPykuICBVc2UgYW4gIjplY2hvdXNlciIgY29tbWFuZCB0byBkaXNwbGF5IHRoZSBtZXNzYWdlCisgICAgKHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIHNwYWNlKS4KKzcgICBBZGQgJXMgdG8gJ2tleXdvcmRwcmcnOiByZXBsYWNlIHdpdGggd29yZCB1bmRlciB0aGUgY3Vyc29yLiAoWmVsbG5lcikKKzggICBTdXBwb3J0IHByaW50aW5nIG9uIFVuaXguICBDYW4gdXNlICJscGFuc2kuYyIgYXMgYW4gZXhhbXBsZS4gKEJvb2tvdXQpCis4ICAgQWRkIHB1dCBjb21tYW5kIHRoYXQgcmVwbGFjZXMgdGhlIHRleHQgdW5kZXIgaXQuICBFc3AuIGZvciBibG9ja3dpc2UKKyAgICBWaXN1YWwgbW9kZS4KKzcgICBFbmhhbmNlIHRlcm1yZXBvbnNlIHN0dWZmOiBBZGQgdF9DVig/KTogcGF0dGVybiBvZiB0ZXJtIHJlc3BvbnNlLCB1c2UKKyAgICByZWdleHA6ICJcZVxbWz4/XVswLTk7XSpjIiwgYnV0IG9ubHkgY2hlY2sganVzdCBhZnRlciBzZW5kaW5nIHRfUlYuCis3ICAgQWRkICJnfCIgY29tbWFuZDogbW92ZSB0byBOJ3RoIGNvbHVtbiBmcm9tIHRoZSBsZWZ0IG1hcmdpbiAoYWZ0ZXIgd3JhcHBpbmcKKyAgICBhbmQgYXBwbHlpbmcgJ2xlZnRjb2wnKS4gIFdvcmtzIGFzICJ8IiBsaWtlIHdoYXQgImcwIiBpcyB0byAiMCIuCis3ICAgQWRkIHBhdGNoIGZyb20gV2FsbCBmb3IgdGhpcyBvbmUgKCB+L01haWwvb2xkbWFpbC93YWxsL2luLjAwMDE5ICk6CisgICAgJ2ZsaXBjYXNlJyB2YXJpYWJsZTogdXBwZXIvbG93ZXJjYXNlIHBhaXJzLgorICAgIEluc2VydCBjb21tYSdzIGJldHdlZW4gcGFpcnMgYW5kIGFsbG93IGEgcmFuZ2UsIG1ha2UgaXQgbG9vayBsaWtlCisgICAgJ2lzZm5hbWUnLiAgRS5nLiAiOnNldCBmbGlwY2FzZT1hLXpBLVoseFgsMjMtMzM6MTQzLTE1MyIuICBUaGUgY29sb24gdG8KKyAgICBzZXBhcmF0ZSB0aGUgZnJvbSBhbmQgdG8gcGFydCBpcyBvcHRpb25hbC4KKzcgICBTdXBwb3J0IHNldHRpbmcgJ2VxdWFscHJnJyB0byBhIHVzZXIgZnVuY3Rpb24gbmFtZS4KKzkgICBBZGQgY3Vyc29yLWNvbHVtbiBoaWdobGlnaHRpbmcuICBFbmFibGUgaXQgd2l0aCAnY3Vyc29yY29sdW1uJyBvcHRpb24sIHNldAorICAgIGhpZ2hsaWdodGluZyB3aXRoICJDdXJzb3JDb2x1bW4iIGdyb3VwLiAgVXNlZnVsIGZvciBhbGlnbmluZyB0ZXh0LgorICAgIEFsc28gY3Vyc29yLXJvdyBoaWdobGlnaHRpbmcuCisgICAgUGF0Y2ggZnJvbSBZYXN1aGlybyBNYXRzdW1vdG8gZm9yIHVuZGVybGluaW5nIHRoZSBjdXJzb3IgbGluZSwgMjAwNCBNYXIgMjQuCisgICAgQWx0ZXJuYXRpZTogd2hlbiAnbnVtYmVyJyBpcyBzZXQgaGlnaGxpZ2h0IHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgbGluZS4KKzcgICBIaWdobGlnaHQgdGhlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGVuZC1vZi1saW5lIGRpZmZlcmVudGx5LgorNyAgIFdoZW4gJ3doaWNod3JhcCcgY29udGFpbnMgImwiLCAiJGRsIiBzaG91bGQgam9pbiBsaW5lcz8KKzggICBJbmNsdWRlIGEgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBwcm9ncmFtIHRocm91Z2ggYSBwaXBlPyAgU2VlIHBhdGNoZXMKKyAgICBmcm9tIEZlbGJpbmdlciBmb3IgYSBtYXRoZW1hdGljYSBpbnRlcmZhY2UuCisgICAgT3IgdXNlIGVtYWNzIHNlcnZlciBraW5kIG9mIHRoaW5nPworOCAgIEFkZCBhbiBhcmd1bWVudCB0byBjb25maWd1cmUgdG8gdXNlICRDRkxBR1MgYW5kIG5vdCBtb2RpZnkgaXQ/IChNb29uZXkpCis4ICAgRW5hYmxpbmcgZmVhdHVyZXMgaXMgYSBtaXggb2YgY29uZmlndXJlIGFyZ3VtZW50cyBhbmQgZGVmaW5lcyBpbgorICAgIGZlYXR1cmUuaC4gIEhvdyB0byBtYWtlIHRoaXMgY29uc2lzdGVudD8gIEZlYXR1cmUuaCBpcyByZXF1aXJlZCBmb3IKKyAgICBub24tdW5peCBzeXN0ZW1zLiAgUGVyaGFwcyBsZXQgY29uZmlndXJlIGRlZmluZSBDT05GX1hYWCwgYW5kIHVzZSAjaWZkZWYKKyAgICBDT05GX1hYWCBpbiBmZWF0dXJlLmg/ICBUaGVuIHdoYXQgc2hvdWxkIG1pbi1mZWF0dXJlcyBhbmQgbWF4LWZlYXR1cmVzIGRvPworOCAgIEFkZCAiZ15FIiBhbmQgImdeWSIsIHRvIHNjcm9sbCBhIHNjcmVlbi1mdWxsIGxpbmUgdXAgYW5kIGRvd24uCis2ICAgQWRkICI6dGltZXIiIGNvbW1hbmQsIHRvIHNldCBhIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgYXQgYSBjZXJ0YWluCisgICAgaW50ZXJ2YWwsIG9yIG9uY2UgYWZ0ZXIgc29tZSB0aW1lIGhhcyBlbGFwc2VkLiAoQWFyb24pCis4ICAgQWRkICI6Y29uZmlybSIgaGFuZGxpbmcgaW4gb3Blbl9leGZpbGUoKSwgZm9yIHdoZW4gZmlsZSBhbHJlYWR5IGV4aXN0cy4KKzggICBVc2UgY29uZmlybS9kaWFsb2cgc3R1ZmYgdG8gYXNrIHRoZSB1c2VyLCB3aGVuIGEgZmlsZSBoYXMgY2hhbmdlZCBvdXRzaWRlCisgICAgb2YgVmltLCBpZiBoZSB3YW50cyB0byByZWxvYWQgaXQuICBUcmlnZ2VyZWQgd2hlbiBmb2N1cyBnYWluZWQsIGFmdGVyCisgICAgc2hlbGwgY29tbWFuZCwgd2hlbiBlbnRlcmluZyBhbm90aGVyIGJ1ZmZlciwgZXRjLi4KKyAgICBBbHNvIGRvIHRoaXMgd2hlbiBlZGl0aW5nIGEgbmV3IGZpbGUsIGFuZCBhbm90aGVyIGFwcGxpY2F0aW9uIGNyZWF0ZXMKKyAgICB0aGUgZmlsZSBiZWZvcmUgZG9pbmcgIjp3IiBpbiBWaW0uCisgICAgQWxzbyBjaGVjayBpZiB0aGUgZmlsZSBwcm90ZWN0aW9uIGhhcyBjaGFuZ2VkLiAgV2hlbiBjaGVja2luZyBhIGZpbGUgaW50bworICAgIFJDUyBpdCBpcyBtYWRlIHJlYWQtb25seSwgd2hlbiBjaGVja2luZyBvdXQgaXQgaXMgbWFkZSByZWFkLXdyaXRlLgorOCAgIFdoZW4gcXVpdHRpbmcgd2l0aCBjaGFuZ2VkIGZpbGVzLCBtYWtlIHRoZSBkaWFsb2cgbGlzdCB0aGUgY2hhbmdlZCBmaWxlCisgICAgYW5kIGFsbG93ICJ3cml0ZSBhbGwiLCAiZGlzY2FyZCBhbGwiLCAid3JpdGUgc29tZSIuICBUaGUgbGFzdCBvbmUgd291bGQKKyAgICB0aGVuIGFzayAid3JpdGUiIG9yICJkaXNjYXJkIiBmb3IgZWFjaCBjaGFuZ2VkIGZpbGUuICBQYXRjaCBpbiBIaWVyQXNzaXN0CisgICAgZG9lcyBzb21ldGhpbmcgbGlrZSB0aGlzLiAoU2hhaCkKKzcgICBVc2UgZ3Jvd2FycmF5IGZvciByZXBsYWNlIHN0YWNrLgorNyAgIEhhdmUgYSBsb29rIGF0IHZpSCAoSGVsbGVuaWMgb3IgR3JlZWsgdmVyc2lvbiBvZiBWaW0pLiAgQnV0IGEgc29sdXRpb24KKyAgICBvdXRzaWRlIG9mIFZpbSBtaWdodCBiZSBzYXRpc2ZhY3RvcnkgKEhhcml0c2lzKS4KKzMgICBNYWtlICIyZCUiIHdvcmsgbGlrZSAiZCVkJSIgaW5zdGVhZCBvZiAiZDIlIj8KKzggICBNYWtlICJtb3JlIiBwcm9tcHQgYWNjZXB0IGNvbW1hbmQgY2hhcmFjdGVycywgbGlrZSAiaGl0LWVudGVyIiBwcm9tcHQ/CisgICAgT3IgZXh0ZW5kIGl0IHdpdGggbW9yZSBjb21tYW5kcywgbGlrZSAibGVzcyI6ICdiJyBmb3IgYmFjaywgJ2onIGZvciBvbmUKKyAgICBsaW5lIGRvd24sIGV0Yy4KKzggICBGb3IgdGhlICItLW1vcmUtLSIgcHJvbXB0LCBzdXBwb3J0IHRoZSAnYidhY2sgY29tbWFuZCBmb3IgbW9yZSBjb21tYW5kcy4KKyAgICBQb3NzaWJsZSBpbXBsZW1lbnRhdGlvbjogRG8gaXQgYXQgYSB2ZXJ5IGxvdyBsZXZlbCwgY2FjaGluZyB0aGUgbGluZXMgdGhhdAorICAgIGFyZSBvbiB0aGUgc2NyZWVuICh3aXRoIGhpZ2hsaWdodCBhdHRyaWJ1dGVzKS4gIEF2b2lkcyB0aGF0IGNoYW5nZXMgaGF2ZQorICAgIHRvIGJlIG1hZGUgZm9yIGFsbCBmdW5jdGlvbnMgdGhhdCBsaXN0IHNvbWV0aGluZy4KKzcgICAiZyBDVFJMLU8iIGp1bXBzIGJhY2sgdG8gbGFzdCB1c2VkIGJ1ZmZlci4JU2tpcCBDVFJMLU8ganVtcHMgaW4gdGhlIHNhbWUKKyAgICBidWZmZXIuICBNYWtlIGp1bXBsaXN0IHJlbWVtYmVyIHRoZSBsYXN0IHRlbiBhY2Nlc3NlZCBidWZmZXJzPworLSAgIEtlZXAgYSBsaXN0IG9mIG1vc3QgcmVjZW50bHkgdXNlZCBmaWxlcyBmb3IgZWFjaCB3aW5kb3csIHVzZSAiW28iIHRvIGdvCisgICAgYmFjayAob2xkZXIgZmlsZSkgYW5kICJdbiIgdG8gZ28gZm9yd2FyZCAobmV3ZXIgZmlsZSkgKGxpa2UgXk8gYW5kIF5JIGZvcgorICAgIGp1bXBzKSAoV2ViYikuIFVzZSAiOmZpbGVzIiBhbmQgIjpscyIgdG8gbGlzdCB0aGUgZmlsZXMgaW4gaGlzdG9yeSBvcmRlci4KKzcgICBBZGQgYSBoaXN0b3J5IG9mIHJlY2VudGx5IGFjY2Vzc2VkIGJ1ZmZlci4JTWF5YmUgbWFrZSAiMiBDVFJMLV4iIGp1bXAgdG8KKyAgICB0aGUgMm5kIHByZXZpb3VzbHkgdmlzaXRlZCBidWZmZXIsICIzIENUUkwtXiIgdG8gdGhlIHRoaXJkLCBldGMuICBPciB1c2UKKyAgICAiMyBnIENUUkwtXiIgZm9yIHRoaXM/Cis3ICAgQWRkIGFuIG9wdGlvbiB0byBzZXQgdGhlIHdpZHRoIG9mIHRoZSAnbnVtYmVyJyBjb2x1bW4uICBFaWdodCBwb3NpdGlvbnMgaXMKKyAgICBvZnRlbiBtb3JlIHRoYW4gbmVlZGVkLiAgT3IgYWRqdXN0IHRoZSB3aWR0aCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlPworICAgIEFkZCBwYXRjaCB0aGF0IGFkZHMgJ251bWJlcmxlbicgb3B0aW9uLiAoSmFtZXMgSGFydmV5KQorICAgIE90aGVyIHBhdGNoIHdpdGggbWluIGFuZCBtYXggZnJvbSBFbW1hbnVlbCBSZW5pZXJpcyAoMjAwMiBKdWwgMjQpCisgICAgT3RoZXIgcGF0Y2ggd2l0aG91dCBhbiBvcHRpb24gYnkgR2lsbGVzIFJveSAoMjAwMiBKdWwgMjUpCistICAgQWRkIGNvZGUgdG8gZGlzYWJsZSB0aGUgQ0FQUyBrZXkgd2hlbiBnb2luZyBmcm9tIEluc2VydCB0byBOb3JtYWwgbW9kZS4KKy0gICBTZXQgZGF0ZS9wcm90ZWN0aW9uL2V0Yy4gb2YgdGhlIHBhdGNoZmlsZSB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgZmlsZS4KKy0gICBVc2UgZ3Jvd2FycmF5IGZvciB0ZXJtY29kZXNbXSBpbiB0ZXJtLmMKKy0gICBBZGQgPHdpbmRvdy05OT4sIGxpa2UgPGN3b3JkPiBidXQgdXNlIGZpbGVuYW1lIG9mIDk5J3RoIHdpbmRvdy4KKzcgICBBZGQgYSB3YXkgdG8gY2hhbmdlIGFuIG9wZXJhdG9yIHRvIGFsd2F5cyB3b3JrIGNoYXJhY3Rlcndpc2UtaW5jbHVzaXZlCisgICAgKGxpa2UgInYiIG1ha2VzIHRoZSBvcGVyYXRvciBjaGFyYWN0ZXJ3aXNlLWV4Y2x1c2l2ZSkuICAieCIgY291bGQgYmUgdXNlZC4KKy0gICBNYWtlIGEgc2V0IG9mIG9wZXJhdGlvbnMgb24gbGlzdCBvZiBuYW1lczogZXhwYW5kIHdpbGRjYXJkcywgcmVwbGFjZSBob21lCisgICAgZGlyLCBhcHBlbmQgYSBzdHJpbmcsIGRlbGV0ZSBhIHN0cmluZywgZXRjLgorLSAgIFJlbW92ZSBta3RlbXAoKSBhbmQgdXNlIHRtcG5hbWUoKSBvbmx5PyAgQ3RhZ3MgZG9lcyB0aGlzLgorLSAgIFdoZW4gcmVwbGFjaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIHRoZXJlIGlzIG9uZSB0aGF0IGlzIG5vdCBzZXQsCisgICAgdHVybiBpdCBpbnRvIGFuIGVtcHR5IHN0cmluZz8gIE9ubHkgd2hlbiBleHBhbmRpbmcgb3B0aW9ucz8gKEhpZWJlcnQpCistICAgT3B0aW9uIHRvIHNldCBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkIGluc3RlYWQgb2YgcHJvZHVjaW5nIGEgYmVlcCAoZS5nLiB0bworICAgIGNhbGwgInBsYXkgbmV3YmVlcC5hdSIpLgorLSAgIEFkZCBvcHRpb24gdG8gc2hvdyB0aGUgY3VycmVudCBmdW5jdGlvbiBuYW1lIGluIHRoZSBzdGF0dXMgbGluZS4gIE1vcmUgb3IKKyAgICBsZXNzIHdoYXQgeW91IGZpbmQgd2l0aCAiW1trIiwgbGlrZSBob3cgJ2NpbmRlbnQnIHJlY29nbml6ZXMgYSBmdW5jdGlvbi4KKyAgICAoQmhhdHQpLgorLSAgICJbciIgYW5kICJdciI6IGxpa2UgInAiIGFuZCAiUCIsIGJ1dCByZXBsYWNlIGluc3RlYWQgb2YgaW5zZXJ0IChlc3AuIGZvcgorICAgIGJsb2Nrd2lzZSByZWdpc3RlcnMpLgorLSAgIEFkZCAndGltZWNoZWNrJyBvcHRpb24sIG9uIGJ5IGRlZmF1bHQuICBNYWtlcyBpdCBwb3NzaWJsZSB0byBzd2l0Y2ggb2ZmIHRoZQorICAgIHRpbWVzdGFtcCB3YXJuaW5nIGFuZCBxdWVzdGlvbi4gKERvZHQpLgorLSAgIEFkZCBhbiBvcHRpb24gdG8gc2V0IHRoZSB0aW1lIGFmdGVyIHdoaWNoIFZpbSBzaG91bGQgY2hlY2sgdGhlIHRpbWVzdGFtcHMKKyAgICBvZiB0aGUgZmlsZXMuICBPbmx5IGNoZWNrIHdoZW4gYW4gZXZlbnQgb2NjdXJzIChlLmcuLCBjaGFyYWN0ZXIgdHlwZWQsCisgICAgbW91c2UgbW92ZWQpLiAgVXNlZnVsIGZvciBub24tR1VJIHZlcnNpb25zIHdoZXJlIGtleWJvYXJkIGZvY3VzIGlzbid0CisgICAgbm90aWNlYWJsZS4KKzkgICBXaGVuIHVzaW5nICI6dyA8Zm5hbWU+IiBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBmaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyCisgICAgYnVmZmVyLiAgR2l2ZSBhIHdhcm5pbmcgcmlnaHQgYXdheSwgZG9uJ3Qgd2FpdCBmb3IgYSBzaGVsbCBjb21tYW5kLgorLSAgIE1ha2UgJ3NtYXJ0Y2FzZScgd29yayBldmVuIHRob3VnaCAnaWMnIGlzbid0IHNldCAoV2ViYikuCis3ICAgQWRkICI6anVzdGlmeSIgY29tbWFuZC4gIFBhdGNoIGZyb20gVml0IFN0cmFkYWwgMjAwMiBOb3YgMjUuCis3ICAgV2hlbiBmb3JtYXR0aW5nIHRleHQsIGFsbG93IHRvIGJyZWFrIHRoZSBsaW5lIGF0IGEgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisgICAgVXNlIGFuIG9wdGlvbiBmb3IgdGhpczogJ2JyZWFrY2hhcnMnPyAgVXNlZnVsIGZvciBmb3JtYXR0aW5nIEZvcnRyYW4gY29kZS4KKy0gICBBZGQgZmxhZyB0byAnZm9ybWF0b3B0aW9ucycgdG8gYmUgYWJsZSB0byBmb3JtYXQgYm9vay1zdHlsZSBwYXJhZ3JhcGhzCisgICAgKGZpcnN0IGxpbmUgb2YgcGFyYWdyYXBoIGhhcyBsYXJnZXIgaW5kZW50LCBubyBlbXB0eSBsaW5lcyBiZXR3ZWVuCisgICAgcGFyYWdyYXBocykuICBDb21wbGVtZW50cyB0aGUgJzInIGZsYWcuICBVc2UgJz4nIGZsYWcgd2hlbiBsYXJnZXIgaW5kZW50CisgICAgc3RhcnRzIGEgbmV3IHBhcmFncmFwaCwgdXNlICc8JyBmbGFnIHdoZW4gc21hbGxlciBpbmRlbnQgc3RhcnRzIGEgbmV3CisgICAgcGFyYWdyYXBoLglCb3RoIHN0YXJ0IGEgbmV3IHBhcmFncmFwaCBvbiBhbnkgaW5kZW50IGNoYW5nZS4KKzggICBBZGQgJ2Zvcm1hdGV4cHInIG9wdGlvbjogVXNlZCBmb3IgZm9ybWF0dGluZyBvcGVyYXRvciAiZ3EiIGluc3RlYWQgb2YgdGhlCisgICAgYnVpbHRpbiBmb3JtYXR0aW5nIG9yICdmb3JtYXRwcmcnLgorOCAgIEFsbG93IHVzaW5nIGEgdHJhaWxpbmcgc3BhY2UgdG8gc2lnbmFsIGEgcGFyYWdyYXBoIHRoYXQgY29udGludWVzIG9uIHRoZQorICAgIG5leHQgbGluZSAoTUlNRSB0ZXh0L3BsYWluOyBmb3JtYXQ9Zmxvd2VkLCBSRkMgMjY0NikuICBDYW4gYmUgdXNlZCBmb3IKKyAgICBjb250aW51b3VzIGZvcm1hdHRpbmcuICBDb3VsZCB1c2UgJ2F1dG9mb3JtYXQnIG9wdGlvbiwgd2hpY2ggc3BlY2lmaWVzIGEKKyAgICByZWdleHAgd2hpY2ggdHJpZ2dlcnMgYXV0by1mb3JtYXR0aW5nIChmb3Igb25lIGxpbmUpLgorICAgICI6c2V0IGF1dG9mb3JtYXQ9XFxzJCIuCistICAgQmUgYWJsZSB0byByZWRlZmluZSB3aGVyZSBhIHNlbnRlbmNlIHN0b3BzLiAgVXNlIGEgcmVnZXhwIHBhdHRlcm4/Cis3ICAgQWRkIGNvbW1hbmQgImcpIiB0byBnbyB0byB0aGUgZW5kIG9mIGEgc2VudGVuY2UsICJnKCIgdG8gZ28gYmFjayB0byB0aGUKKyAgICBlbmQgb2YgYSBzZW50ZW5jZS4gKFNlcnZhdGl1cyBCcmFuZHQpCistICAgQmUgYWJsZSB0byByZWRlZmluZSB3aGVyZSBhIHBhcmFncmFwaCBzdGFydHMuICBGb3IgIltbIiB3aGVyZSB0aGUgJ3snIGlzCisgICAgbm90IGluIGNvbHVtbiAxLgorNiAgIEFkZCAiOmNkcHJldiI6IGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIGRpcmVjdG9yeS4gIE5lZWQgdG8gcmVtZW1iZXIgYQorICAgIHN0YWNrIG9mIHByZXZpb3VzIGRpcmVjdG9yaWVzLiAgV2UgYWxzbyBuZWVkICI6Y2RuZXh0Ii4KKzcgICBTaG91bGQgIjpjZCIgZm9yIE1TLURPUyBnbyB0byAkSE9NRSwgd2hlbiBpdCdzIGRlZmluZWQ/CistICAgTWFrZSAiZ3E8Q1I+IiB3b3JrIG9uIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGZpbGUuICBNYXliZSBmb3IgZXZlcnkgb3BlcmF0b3I/Cis4ICAgZmluZG1hdGNobGltaXQoKSBzaG91bGQgYmUgYWJsZSB0byBza2lwIGNvbW1lbnRzLiAgU29sdmVzIHByb2JsZW0gb2YKKyAgICBtYXRjaGluZyB0aGUgJ3snIGluIC8qIGlmIChmb28pIHsgKi8gKEZpdmVhc2gpCistICAgZmluZG1hdGNoKCkgc2hvdWxkIGJlIGFkanVzdGVkIGZvciBMaXNwLiAgU2VlIHJlbWFyayBhdCBnZXRfbGlzcF9pbmRlbnQoKS4KKyAgICBFc3AuIFwoIGFuZCBcKSBzaG91bGQgYmUgc2tpcHBlZC4gKERvcmFpIFNpdGFyYW0sIGluY29tcGxldGUgcGF0Y2ggTWFyIDE4KQorLSAgIEFkZCBtb3JlIHJlZGlyZWN0aW5nIG9mIEV4IGNvbW1hbmRzOgorCTpyZWRpciBAPiByZWdpc3RlciAgKGFwcGVuZCkKKwk6cmVkaXIgIyAgYnVmbmFtZQorCTpyZWRpciAjPiBidWZuYW1lICAgKGFwcGVuZCkKKwk6cmVkaXIgPSAgdmFyaWFibGUKKwk6cmVkaXIgPT4gdmFyaWFibGUgIChhcHBlbmQpCistICAgU2V0dGluZyBvZiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgZm9yIGEgYnVmZmVyIG9yIHdpbmRvdywgd2l0aAorICAgICI6c2V0IHdpbmRvdy5vcHRpb24iIG9yICI6c2V0IGJ1ZmZlci5vcHRpb249dmFsIi4gIE9yIHVzZSAiOmJ1ZmZlci5zZXQiLgorICAgIEFsc286ICJidWZmZXIubWFwIDxGMT4gcXVpdCIuCis2ICAgV291bGQgaXQgYmUgcG9zc2libGUgdG8gY2hhbmdlIHRoZSBjb2xvciBvZiB0aGUgY3Vyc29yIGluIHRoZSBXaW4zMgorICAgIGNvbnNvbGU/ICAoS2xhdXMgSGFzdCkKKy0gICBBZGQgOmRlbGNyIGNvbW1hbmQ6CisJCQkgICAgKjpkZWxjcioKKyAgICAgOltyYW5nZV1kZWxjclshXQlDaGVjayBbcmFuZ2VdIGxpbmVzIChkZWZhdWx0OiB3aG9sZSBidWZmZXIpIGZvciBsaW5lcworCQkJZW5kaW5nIGluIDxDUj4uICBJZiBhbGwgbGluZXMgZW5kIGluIDxDUj4sIG9yIFshXSBpcworCQkJdXNlZCwgcmVtb3ZlIHRoZSA8Q1I+IGF0IHRoZSBlbmQgb2YgbGluZXMgaW4gW3JhbmdlXS4KKwkJCUEgQ1RSTC1aIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgaXMgcmVtb3ZlZC4gIElmCisJCQlbcmFuZ2VdIGlzIG9taXR0ZWQsIG9yIGl0IGlzIHRoZSB3aG9sZSBmaWxlLCBhbmQgYWxsCisJCQlsaW5lcyBlbmQgaW4gPENSPiAndGV4dG1vZGUnIGlzIHNldC4gIHtub3QgaW4gVml9CistICAgU2hvdWxkIGludGVncmF0ZSBhZGRzdGFyKCkgYW5kIGZpbGVfcGF0X3RvX3JlZ19wYXQoKS4KKy0gICBXaGVuIHdvcmtpbmcgb3ZlciBhIHNlcmlhbCBsaW5lIHdpdGggNyBiaXQgY2hhcmFjdGVycywgcmVtb3ZlIG1ldGEKKyAgICBjaGFyYWN0ZXJzIGZyb20gJ2lzcHJpbnQnLgorLSAgIFVzZSBmY2hkaXIoKSBpbiBpbml0X2hvbWVkaXIoKSwgbGlrZSBpbiBGdWxsTmFtZSgpLgorLSAgIEluIHdpbl91cGRhdGUoKSwgd2hlbiB0aGUgR1VJIGlzIGFjdGl2ZSwgYWx3YXlzIHVzZSB0aGUgc2Nyb2xsaW5nIGFyZWEuCisgICAgQXZvaWQgdGhhdCB0aGUgbGFzdCBzdGF0dXMgbGluZSBpcyBkZWxldGVkIGFuZCBuZWVkcyB0byBiZSByZWRyYXduLgorLSAgIFRoYXQgImNUeCIgZmFpbHMgd2hlbiB0aGUgY3Vyc29yIGlzIGp1c3QgYWZ0ZXIgJ3gnIGlzIFZpIGNvbXBhdGlibGUsIGJ1dAorICAgIG1heSBub3QgYmUgd2hhdCB5b3UgZXhwZWN0LiAgQWRkIGEgZmxhZyBpbiAnY3BvcHRpb25zJyBmb3IgdGhpcz8gIE1vcmUKKyAgICBnZW5lcmFsOiBBZGQgYW4gb3B0aW9uIHRvIGFsbG93ICJjIiB0byB3b3JrIHdpdGggYSBudWxsIG1vdGlvbi4KKy0gICBHaXZlIGJldHRlciBlcnJvciBtZXNzYWdlcyBieSB1c2luZyBlcnJubyAoc3RyZXJyb3IoKSkuCistICAgR2l2ZSAiVXNhZ2U6IiBlcnJvciBtZXNzYWdlIHdoZW4gY29tbWFuZCB1c2VkIHdpdGggd3JvbmcgYXJndW1lbnRzIChsaWtlCisgICAgTnZpKS4KKy0gICBNYWtlICdyZXN0b3Jlc2NyZWVuJyBvcHRpb24gYWxzbyB3b3JrIGZvciB4dGVybSAoYW5kIG90aGVycyksIHJlcGxhY2VzIHRoZQorICAgIFNBVkVfWFRFUk1fU0NSRUVOIGRlZmluZS4KKzcgICBTdXBwb3J0IGZvciAiOndpbnBvcyIgSW4geHRlcm06IHJlcG9ydCB0aGUgY3VycmVudCB3aW5kb3cgcG9zaXRpb24uCistICAgR2l2ZSB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiB1c2luZyAiOnNldCB0X3h4PWFzZGYiIGZvciBhIHRlcm1jYXAgY29kZSB0aGF0CisgICAgVmltIGRvZXNuJ3Qga25vdyBhYm91dC4gIEFkZCBmbGFnIGluICdzaG9ydG1lc3MnPworNiAgIEFkZCAiOmNoZSA8ZmlsZT4iLCBsaXN0IGFsbCB0aGUgaW5jbHVkZSBwYXRocyB3aGljaCBsZWFkIHRvIHRoaXMgZmlsZS4KKy0gICBGb3IgYSBjb21tYW5kbGluZSB0aGF0IGhhcyBzZXZlcmFsIGNvbW1hbmRzICg6cywgOmQsIGV0Yy4pIHN1bW1hcml6ZSB0aGUKKyAgICBjaGFuZ2VzIGFsbCB0b2dldGhlciBpbnN0ZWFkIG9mIGZvciBlYWNoIGNvbW1hbmQgKGUuZy4gZm9yIHRoZSByb3QxMworICAgIG1hY3JvKS4KKy0gICBBZGQgY29tbWFuZCBsaWtlICJbSSIgdGhhdCBhbHNvIHNob3dzIHRoZSB0cmVlIG9mIGluY2x1ZGVkIGZpbGVzLgorLSAgIEFkZCBjb21tYW5kIGxpa2UgIjp0cyIgdGhhdCBzaG93cyB0aGUgb3V0cHV0IG9mICJbSSIgYW5kIGFza3MgZm9yIGEgbWF0Y2gKKyAgICB0byBqdW1wIHRvLiAoWmVsbG5lcikKKy0gICAiOnNldCBzbV5MIiByZXN1bHRzIGluICI6c2V0IHMiLCBiZWNhdXNlIHNob3J0IG5hbWVzIG9mIG9wdGlvbnMgYXJlIGFsc28KKyAgICBleHBhbmRlZC4gIElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzPworLSAgIEFkZCAiOkAhIiBjb21tYW5kLCB0byAiOkAiIGxpa2Ugd2hhdCAiOnNvdXJjZSEiIGlzIHRvICI6c291cmNlIi4KKzggICBBZGQgIjpAOiEiOiByZXBlYXQgbGFzdCBjb21tYW5kIHdpdGggZm9yY2VpdCBzZXQuCistICAgU2hvdWxkIGJlIHBvc3NpYmxlIHRvIHdyaXRlIHRvIGEgZGV2aWNlLCBlLmcuICI6dyEgL2Rldi9udWxsIi4KKy0gICBBZGQgJ3Rfbm9ybWFsJzogVXNlZCB3aGVuZXZlciB0X21lLCB0X3NlLCB0X3VlIG9yIHRfWnIgaXMgZW1wdHkuCistICAgIjpjYWIgbWFwIHRlc3QgXlZ8IGplIiwgIjpjdW5hYiBtYXAiIGRvZXNuJ3Qgd29yay4JVGhpcyBpcyB2aSBjb21wYXRpYmxlIQorLSAgIENUUkwtVyBDVFJMLUUgYW5kIENUUkwtVyBDVFJMLVkgc2hvdWxkIG1vdmUgdGhlIGN1cnJlbnQgd2luZG93IHVwIG9yIGRvd24KKyAgICBpZiBpdCBpcyBub3QgdGhlIGZpcnN0IG9yIGxhc3Qgd2luZG93LgorLSAgIEluY2x1ZGUtZmlsZS1zZWFyY2ggY29tbWFuZHMgc2hvdWxkIGxvb2sgaW4gdGhlIGxvYWRlZCBidWZmZXIgb2YgYSBmaWxlIChpZgorICAgIHRoZXJlIGlzIG9uZSkgaW5zdGVhZCBvZiB0aGUgZmlsZSBpdHNlbGYuCis3ICAgQ2hhbmdlICducmZvcm1hdHMnIHRvIGluY2x1ZGUgdGhlIGxlYWRlciBmb3IgZWFjaCBmb3JtYXQuICBFeGFtcGxlOgorCW5yZm9ybWF0cz1oZXg6JCxiaW5hcnk6YixvY3RhbDowCisgICAgQWRkIHNldHRpbmcgb2YgJ25yZm9ybWF0cycgdG8gc3ludGF4IGZpbGVzLgorLSAgICdwYXRoJyBjYW4gYmVjb21lIHZlcnkgbG9uZywgZG9uJ3QgdXNlIE5hbWVCdWZmIGZvciBleHBhbnNpb24uCistICAgV2hlbiB1bmhpZGluZyBhIGhpZGRlbiBidWZmZXIsIHB1dCB0aGUgc2FtZSBsaW5lIGF0IHRvcCBvZiB0aGUgd2luZG93IGFzCisgICAgdGhlIG9uZSBiZWZvcmUgaGlkaW5nIGl0LiBPcjoga2VlcCB0aGUgc2FtZSByZWxhdGl2ZSBjdXJzb3IgcG9zaXRpb24gKHNvCisgICAgbWFueSBwZXJjZW50IGRvd24gdGhlIHdpbmRvd3MpLgorLSAgIE1ha2UgaXQgcG9zc2libGUgZm9yIHRoZSAnc2hvd2JyZWFrJyB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICBsaW5lLiAgVXNlIGEgY29tbWEgdG8gc2VwYXJhdGUgdGhlIHBhcnQgYXQgdGhlIGVuZCBhbmQgdGhlIHN0YXJ0IG9mIHRoZQorICAgIGxpbmU/ICBIaWdobGlnaHQgdGhlIGxpbmVicmVhayBjaGFyYWN0ZXJzLCBhZGQgZmxhZyBpbiAnaGlnaGxpZ2h0Jy4KKy0gICBTb21lIHN0cmluZyBvcHRpb25zIHNob3VsZCBiZSBleHBhbmRlZCBpZiB0aGV5IGhhdmUgd2lsZGNhcmRzLCBlLmcuCisgICAgJ2RpY3Rpb25hcnknIHdoZW4gaXQgaXMgIiouaCIuCistICAgVXNlIGEgc3BlY2lmaWMgdHlwZSBmb3IgbnVtYmVyIGFuZCBib29sZWFuIG9wdGlvbnMsIG1ha2luZyBpdCBwb3NzaWJsZSB0bworICAgIGNoYW5nZSBpdCBmb3Igc3BlY2lmaWMgbWFjaGluZXMgKGUuZy4gd2hlbiBhIGxvbmcgaXMgNjQgYml0KS4KKy0gICBBZGQgb3B0aW9uIGZvciA8SW5zZXJ0PiBpbiByZXBsYWNlIG1vZGUgZ29pbmcgdG8gbm9ybWFsIG1vZGUuIChOdWdlbnQpCistICAgQWRkIGEgbmV4dC9wcmV2aW91cyBwb3NzaWJpbGl0eSB0byAiW15JIiBhbmQgZnJpZW5kcy4KKy0gICBBZGQgcG9zc2liaWxpdHkgdG8gY2hhbmdlIHRoZSBIT01FIGRpcmVjdG9yeS4gIFVzZSB0aGUgZGlyZWN0b3J5IGZyb20gdGhlCisgICAgcGFzc3dkIGZpbGU/IChBbnR3ZXJwZW4pCistICAgV2hlbiBkb2luZyAiW15JIiBvciAiW15EIiBhZGQgcG9zaXRpb24gdG8gdGFnIHN0YWNrLgorLSAgIEFkZCBjb21tYW5kIHRvIHB1dCBjdXJyZW50IHBvc2l0aW9uIHRvIHRhZyBzdGFjazogIjp0cHVzaCIuCis4ICAgQWRkIGNvbW1hbmRzIHRvIHB1c2ggYW5kIHBvcCBhbGwgb3IgaW5kaXZpZHVhbCBvcHRpb25zLiAiOnNldHB1c2ggdHciLAorICAgICI6c2V0cG9wIHR3IiwgIjpzZXRwdXNoIGFsbCIuICBNYXliZSBwdXNoaW5nL3BvcHBpbmcgYWxsIG9wdGlvbnMgaXMKKyAgICBzdWZmaWNpZW50LiAgIjpzZXRmbHVzaCIgcmVzZXRzIHRoZSBvcHRpb24gc3RhY2s/CisgICAgSG93IHRvIGhhbmRsZSBhbiBhYm9ydGVkIG1hcHBpbmc/ICBSZW1lbWJlciBwb3NpdGlvbiBpbiB0YWcgc3RhY2sgd2hlbgorICAgIG1hcHBpbmcgc3RhcnRzLCByZXN0b3JlIGl0IHdoZW4gYW4gZXJyb3IgYWJvcnRzIHRoZSBtYXBwaW5nPworLSAgIFVzZSBhIGJ1aWx0aW4gZ3JlcCBjb21tYW5kIGZvciAiOmdyZXAiPyAgTWFrZXMgaXQgcG9zc2libGUgdG8gYWRkIHRoZQorICAgIGNvbHVtbiBudW1iZXIuICBDYW4gdXNlIHRoZSBjb2RlIG9mICI6aGVscGdyZXAiLgorICAgIEFsc28gc3VwcG9ydCB1c2luZyAiKioiIGluIGZpbGVuYW1lLCBzbyB0aGF0IGEgZGlyZWN0b3J5IHRyZWUgY2FuIGJlCisgICAgc2VhcmNoZWQuCistICAgQ2hhbmdlICI6Zml4ZGVsIiBpbnRvIG9wdGlvbiAnZml4ZGVsJywgdF9kZWwgd2lsbCBiZSBhZGp1c3RlZCBlYWNoIHRpbWUKKyAgICB0X2JzIGlzIHNldD8gKFdlYmIpCistICAgImdjIjogZ290byBjaGFyYWN0ZXIsIG1vdmUgYWJzb2x1dGUgY2hhcmFjdGVyIHBvc2l0aW9ucyBmb3J3YXJkLCBhbHNvCisgICAgY291bnRpbmcgbmV3bGluZXMuICJnQyIgZ29lcyBiYWNrd2FyZHMgKFdlaWdlcnQpLgorLSAgIFdoZW4gZG9pbmcgQ1RSTC1eLCByZWRyYXcgYnVmZmVyIHdpdGggdGhlIHNhbWUgdG9wbGluZSAoRGVtaXJlbCkuIFN0b3JlCisgICAgY3Vyc29yIHJvdyBhbmQgd2luZG93IGhlaWdodCB0byByZWRyYXcgY3Vyc29yIGF0IHNhbWUgcGVyY2VudGFnZSBvZiB3aW5kb3cKKyAgICAoV2ViYikuCistICAgQmVzaWRlcyByZW1lbWJlcmluZyB0aGUgbGFzdCB1c2VkIGxpbmUgbnVtYmVyIG9mIGEgZmlsZSwgYWxzbyByZW1lbWJlciB0aGUKKyAgICBjb2x1bW4uIFVzZSBpdCB3aXRoIENUUkwtXiBldC4gYWwuCistICAgQ2hlY2sgZm9yIG5vbi1kaWdpdHMgd2hlbiBzZXR0aW5nIGEgbnVtYmVyIG9wdGlvbiAoY2FyZWZ1bCB3aGVuIGVudGVyaW5nCisgICAgaGV4IGNvZGVzIGxpa2UgMHhmZikuCistICAgQWRkIG9wdGlvbiB0byBtYWtlICIuIiByZWRvIHRoZSAiQHIiIGNvbW1hbmQsIGluc3RlYWQgb2YgdGhlIGxhc3QgY29tbWFuZAorICAgIGV4ZWN1dGVkIGJ5IGl0LiAgQWxzbyB0byBtYWtlICIuIiByZWRvIHRoZSB3aG9sZSBtYXBwaW5nLiAgQmFzaWNhbGx5OiByZWRvCisgICAgdGhlIGxhc3QgVFlQRUQgY29tbWFuZC4KKy0gICBTdXBwb3J0IFVSTCBsaW5rcyBmb3IgXlheRiBpbiBJbnNlcnQgbW9kZSwgbGlrZSBmb3IgImdmIi4KKy0gICBTdXBwb3J0ICVuYW1lJSBleHBhbnNpb24gZm9yICJnZiIgb24gV2luZG93cy4KKy0gICBNYWtlICJnZiIgd29yayBvbiAiZmlsZTovL2M6L3BhdGgvbmFtZSIuICAiZmlsZTovYzovIiBhbmQgImZpbGU6Ly8vYzovIgorICAgIHNob3VsZCBhbHNvIHdvcms/CistICAgQWRkICd1cmxwYXRoJywgdXNlZCBsaWtlICdwYXRoJyBmb3Igd2hlbiAiZ2YiIHVzZWQgb24gYW4gVVJMPworOCAgIFdoZW4gdXNpbmcgImdmIiBvbiBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUsIHdoaWxlIGVkaXRpbmcgYSByZW1vdGUgZmlsZQorICAgIChzdGFydHMgd2l0aCBzY3A6Ly8gb3IgaHR0cDovLykgc2hvdWxkIHByZXBlbmQgdGhlIG1ldGhvZCBhbmQgbWFjaGluZQorICAgIG5hbWUuCistICAgV2hlbiBmaW5kaW5nIGFuIFVSTCBvciBmaWxlIG5hbWUsIGFuZCBpdCBkb2Vzbid0IGV4aXN0LCB0cnkgcmVtb3ZpbmcgYQorICAgIHRyYWlsaW5nICcuJy4KKy0gICBBZGQgIjpwYXRoIiBjb21tYW5kIG1vZGlmaWVyLiAgU2hvdWxkIHdvcmsgZm9yIGV2ZXJ5IGNvbW1hbmQgdGhhdCB0YWtlcyBhCisgICAgZmlsZSBuYW1lIGFyZ3VtZW50LCB0byBzZWFyY2ggZm9yIHRoZSBmaWxlIG5hbWUgaW4gJ3BhdGgnLglVc2UKKyAgICBmaW5kX2ZpbGVfaW5fcGF0aCgpLgorLSAgIEhpZ2hsaWdodCBjb250cm9sIGNoYXJhY3RlcnMgb24gdGhlIHNjcmVlbjogU2hvd3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorICAgIENUUkwtWCBhbmQgIl4iIGZvbGxvd2VkIGJ5ICJYIiAoQ29sb24pLgorLSAgIEludGVncmF0ZSBwYXJzaW5nIG9mIGNtZGxpbmUgY29tbWFuZCBhbmQgcGFyc2luZyBmb3IgZXhwYW5zaW9uLgorLSAgIENyZWF0ZSBhIHByb2dyYW0gdGhhdCBjYW4gdHJhbnNsYXRlIGEgLnN3cCBmaWxlIGZyb20gYW55IG1hY2hpbmUgaW50byBhCisgICAgZm9ybSB1c2FibGUgYnkgVmltIG9uIHRoZSBjdXJyZW50IG1hY2hpbmUuCistICAgQWRkICI6bm9ybyIgY29tbWFuZDogUmVzZXQgJ3JvJyBmbGFnIGZvciBhbGwgYnVmZmVycywgZXhjZXB0IG9uZXMgdGhhdCBoYXZlCisgICAgYSByZWFkb25seSBmaWxlLiAiOm5vcm8hIiB3aWxsIHJlc2V0IGFsbCAncm8nIGZsYWdzLgorLSAgIEFkZCBhIHZhcmlhbnQgb2YgQ1RSTC1WIHRoYXQgc3RvcHMgaW50ZXJwcmV0YXRpb24gb2YgbW9yZSB0aGFuIG9uZQorICAgIGNoYXJhY3Rlci4JRm9yIGVudGVyaW5nIG1hcHBpbmdzIG9uIHRoZSBjb21tYW5kIGxpbmUgd2hlcmUgYSBrZXkgY29udGFpbnMKKyAgICBzZXZlcmFsIHNwZWNpYWwgY2hhcmFjdGVycywgZS5nLiBhIHRyYWlsaW5nIG5ld2xpbmUuCistICAgQWRkIHJlZ2V4IGZvciAncGFyYWdyYXBocycgYW5kICdzZWN0aW9ucyc6ICdwYXJhcmUnIGFuZCAnc2VjdHJlJy4gQ29tYmluZQorICAgIHRoZSB0d28gaW50byBhIHJlZ2V4IGZvciBzZWFyY2hpbmcuIChOZWQgS29ueikKKy0gICBNYWtlICcyJyBvcHRpb24gaW4gJ2Zvcm1hdG9wdGlvbnMnIGFsc28gd29yayBpbnNpZGUgY29tbWVudHMuCistICAgQWRkICdzJyBmbGFnIHRvICdmb3JtYXRvcHRpb25zJzogRG8gbm90IGJyZWFrIHdoZW4gaW5zaWRlIGEgc3RyaW5nLiAoRG9kdCkKKy0gICBXaGVuIHdpbmRvdyBzaXplIGNoYW5nZWQgKHdpdGggdGhlIG1vdXNlKSBhbmQgbWFkZSB0b28gc21hbGwsIHNldCBpdCBiYWNrCisgICAgdG8gdGhlIG1pbmltYWwgc2l6ZS4KKy0gICBBZGQgIl0+IiBhbmQgIls8Iiwgc2hpZnQgY29tbWVudCBhdCBlbmQgb2YgbGluZSAoY29tbWFuZDsgIC8qIGNvbW1lbnQgKi8pLgorLSAgIFNob3VsZCBub3QgY2FsbCBjdXJzb3JjbWQoKSBmb3IgZWFjaCB2Z2V0YygpIGluIGdldGNtZGxpbmUoKS4KKy0gICAiOnNwbGl0IGZpbGUxIGZpbGUyIiBhZGRzIHR3byBtb3JlIHdpbmRvd3MgKFdlYmIpLgorLSAgIERvbid0IGdpdmUgbWVzc2FnZSAiSW5jb21wbGV0ZSBsYXN0IGxpbmUiIHdoZW4gZWRpdGluZyBiaW5hcnkgZmlsZS4KKy0gICBBZGQgIjphIiwgIjppIiBmb3IgcHJlbG9hZGluZyBvZiBuYW1lZCBidWZmZXJzLgorLSAgIEFsbG93IGF1dG93cml0ZSB3aGVuIGRvaW5nICI6ZSBmaWxlIiAod2l0aCBhbiBvcHRpb24gJ2VhdycpLgorLSAgIEFsbG93IGEgIitjb21tYW5kIiBhcmd1bWVudCBiZWZvcmUgZWFjaCBmaWxlIG5hbWUgaW4gdGhlIFZpbSBjb21tYW5kIGxpbmU6CisgICAgInZpbSArMTIzIGZpbGUxICsyMzQgZmlsZTIgKzM0NSBmaWxlMyIuID8/PworLSAgIFdoZW4gZW50ZXJpbmcgdGV4dCwga2VlcCBvdGhlciB3aW5kb3dzIG9uIHNhbWUgYnVmZmVyIHVwZGF0ZWQgKHdoZW4gYSBsaW5lCisgICAgZW50ZXJlZCk/CistICAgQ2hlY2sgb3V0IGhvdyBzY3JlZW4gZG9lcyBvdXRwdXQgb3B0aW1pemluZy4gIEFwcGFyZW50bHkgdGhpcyBpcyBwb3NzaWJsZQorICAgIGFzIGFuIG91dHB1dCBmaWx0ZXIuCistICAgSW4gZG9zdWIoKSByZWdleGVjIGlzIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgbGluZS4gVHJ5IHRvIGF2b2lkIHRoaXMuCistICAgV2luZG93IHVwZGF0aW5nIGZyb20gbWVtbGluZS5jOiBpbnNlcnQvZGVsZXRlL3JlcGxhY2UgbGluZS4KKy0gICBPcHRpbWl6ZSBtbF9hcHBlbmQoKSBmb3Igc3BlZWQsIGVzcC4gZm9yIHJlYWRpbmcgYSBmaWxlLgorLSAgIFYuLmMgc2hvdWxkIGtlZXAgaW5kZW50IHdoZW4gJ2FpJyBpcyBzZXQsIGp1c3QgbGlrZSBbY291bnRdY2MuCistICAgVXBkYXRlc2NyaXB0KCkgY2FuIGJlIGRvbmUgZmFzdGVyIHdpdGggYSBzdHJpbmcgaW5zdGVhZCBvZiBhIGNoYXIuCistICAgU2NyZWVuIHVwZGF0aW5nIGlzIGluZWZmaWNpZW50IHdpdGggQ1RSTC1GIGFuZCBDVFJMLUIgd2hlbiB0aGVyZSBhcmUgbG9uZworICAgIGxpbmVzLgorLSAgIFVwcGVyY2FzZSBjaGFyYWN0ZXJzIGluIGV4IGNvbW1hbmRzIGNhbiBiZSBtYWRlIGxvd2VyY2FzZT8KKzggICBBZGQgb3B0aW9uIHRvIHNob3cgY2hhcmFjdGVycyBpbiB0ZXh0IG5vdCBhcyAifEEiIGJ1dCBhcyBkZWNpbWFsICgiXjEyOSIpLAorICAgIGhleCAoIlx4ODEiKSBvciBvY3RhbCAoIlwyMDEiKSBvciBtZXRhIChNLXgpLiAgTnZpIGhhcyB0aGUgJ29jdGFsJyBvcHRpb24KKyAgICB0byBzd2l0Y2ggZnJvbSBoZXggdG8gb2N0YWwuICBWaWxlIGNhbiBzaG93IHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gaGV4CisgICAgb3IgaW4gb2N0YWwuCis3ICAgVGlnaHRlciBpbnRlZ3JhdGlvbiB3aXRoIHh4ZCB0byBlZGl0IGJpbmFyeSBmaWxlcy4gIE1ha2UgaXQgbW9yZQorICAgIGVhc3kvb2J2aW91cyB0byB1c2UuICBDb21tYW5kIGxpbmUgYXJndW1lbnQ/CistICAgSG93IGRvZXMgdmkgZGV0ZWN0IHdoZXRoZXIgYSBmaWx0ZXIgaGFzIG1lc3NlZCB1cCB0aGUgc2NyZWVuPyBDaGVjayBzb3VyY2UuCisgICAgQWZ0ZXIgIjp3ICFjb21tYW5kIiBhIHdhaXRfcmV0dXJuPworLSAgIEltcHJvdmUgc2NyZWVuIHVwZGF0aW5nIGNvZGUgZm9yIGRvcHV0KCkgKHVzZSBzX2lucygpKS4KKy0gICBXaXRoICdwJyBjb21tYW5kIG9uIGxhc3QgbGluZTogc2Nyb2xsIHNjcmVlbiB1cCAoYWxzbyBmb3IgdGVybWluYWxzIHdpdGhvdXQKKyAgICBpbnNlcnQgbGluZSBjb21tYW5kKS4KKy0gICBVc2UgaW5zZXJ0L2RlbGV0ZSBjaGFyIHdoZW4gdGVybWluYWwgc3VwcG9ydHMgaXQuCistICAgT3B0aW1pemUgc2NyZWVuIHJlZHJhdyBmb3Igc2xvdyB0ZXJtaW5hbHMuCistICAgT3B0aW1pemUgImR3IiBmb3IgbG9uZyByb3cgb2Ygc3BhY2VzIChzYXksIDMwMDAwKS4KKy0gICBBZGQgIi1kIG51bGwiIGZvciBlZGl0aW5nIGZyb20gYSBzY3JpcHQgZmlsZSB3aXRob3V0IGRpc3BsYXlpbmcuCistICAgSW4gSW5zZXJ0IG1vZGU6IFJlbWVtYmVyIHRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSByZW1vdmVkIHdpdGggYmFja3NwYWNlCisgICAgYW5kIHJlLWluc2VydCB0aGVtIG9uZSBhdCBhIHRpbWUgd2l0aCA8a2V5MT4sIGFsbCB0b2dldGhlciB3aXRoIDxrZXkyPi4KKy0gICBBbWlnYTogQWRkIHBvc3NpYmlsaXR5IHRvIHNldCBhIGtleW1hcC4gVGhlIGNvZGUgaW4gYW1pZ2EuYyBkb2VzIG5vdCB3b3JrCisgICAgeWV0LgorLSAgIEltcGxlbWVudCAncmVkcmF3JyBvcHRpb24uCistICAgQWRkIHNwZWNpYWwgY29kZSB0byAnc2VjdGlvbnMnIG9wdGlvbiB0byBkZWZpbmUgc29tZXRoaW5nIGVsc2UgYnV0ICd7JyBvcgorICAgICd9JyBhcyB0aGUgc3RhcnQgb2YgYSBzZWN0aW9uIChlLmcuIG9uZSBzaGlmdHdpZHRoIHRvIHRoZSByaWdodCkuCistICAgQWRkICdpbmRlbnQnIG9wdGlvbjogQWx3YXlzIHVzZSB0aGlzIGFtb3VudCBvZiBpbmRlbnQgd2hlbiBzdGFydGluZyBhIG5ldworICAgIGxpbmUgYW5kIHdoZW4gZm9ybWF0dGluZyB0ZXh0LgorLSAgIFVzZSBwaXBlcyBmb3IgZmlsdGVyaW5nIG9uIFVuaXguICBSZXF1aXJlcyB1c2luZyBmb3JrKCkgdG8gYmUgYWJsZSB0byByZWFkCisgICAgYW5kIHdyaXRlIGF0IHRoZSBzYW1lIHRpbWUsIG9yIHNvbWUgc2VsZWN0KCkgbWVjaGFuaXNtLgorNyAgIEFsbG93IHVzaW5nIFZpbSBpbiBhIHBpcGU6ICJscyB8IHZpbSAtdSB4eHgudmltIC0gfCB5eXkiLiAgT25seSBuZWVkcworICAgIGltcGxlbWVudGluZyAiOnciIHRvIHN0ZG91dCBpbiB0aGUgYnVmZmVyIHRoYXQgd2FzIHJlYWQgZnJvbSBzdGRpbi4KKzggICBBbGxvdyBvcGVuaW5nIGFuIHVubmFtZWQgYnVmZmVyIHdpdGggIjplICFjbWQiIGFuZCAiOnNwICFjbWQiLiAgVmlsZSBjYW4KKyAgICBkbyBpdC4KKy0gICBBZGQgY29tbWFuZHMgbGlrZSBdXSBhbmQgW1sgdGhhdCBkbyBub3QgaW5jbHVkZSB0aGUgbGluZSBqdW1wZWQgdG8uCistICAgV2hlbiA6dW5hYiB3aXRob3V0IG1hdGNoaW5nICJmcm9tIiBwYXJ0IGFuZCBzZXZlcmFsIG1hdGNoaW5nICJ0byIgcGFydHMsCisgICAgZGVsZXRlIHRoZSBlbnRyeSB0aGF0IHdhcyB1c2VkIGxhc3QsIGluc3RlYWQgb2YgdGhlIGZpcnN0IGluIHRoZSBsaXN0LgorLSAgIEFkZCB0ZXh0IGp1c3RpZmljYXRpb24gb3B0aW9uLgorLSAgIFNldCBib29sZWFuIG9wdGlvbnMgb24vb2ZmIHdpdGggIjpzZXQgcGFzdGU9b2ZmIiwgIjpzZXQgcGFzdGU9b24iLgorLSAgIEFmdGVyICJpbnYiaW5nIGFuIG9wdGlvbiBzaG93IHRoZSB2YWx1ZTogIjpzZXQgaW52cGFzdGUiIGdpdmVzICJwYXN0ZSBpcworICAgIG9mZiIuCistICAgQ2hlY2sgaGFuZGxpbmcgb2YgQ1RSTC1WIGFuZCAnXCcgZm9yICI6IiBjb21tYW5kcyB0aGF0IGRvIG5vdCBoYXZlIFRSTEJBUi4KKy0gICBXaGVuIGEgZmlsZSBjYW5ub3QgYmUgb3BlbmVkIGJ1dCBkb2VzIGV4aXN0LCBnaXZlIGVycm9yIG1lc3NhZ2UuCistICAgQW1pZ2E6IFdoZW4gJ3InIHByb3RlY3Rpb24gYml0IGlzIG5vdCBzZXQsIGZpbGUgY2FuIHN0aWxsIGJlIG9wZW5lZCBidXQKKyAgICBnaXZlcyByZWFkIGVycm9ycy4gQ2hlY2sgcHJvdGVjdGlvbiBiZWZvcmUgb3BlbmluZy4KKy0gICBXaGVuIHdyaXRpbmcgY2hlY2sgZm9yIGZpbGUgZXhpc3RzIGJ1dCBubyBwZXJtaXNzaW9uLCAiUGVybWlzc2lvbiBkZW5pZWQiLgorLSAgIElmIGZpbGUgZG9lcyBub3QgZXhpc3RzLCBjaGVjayBpZiBkaXJlY3RvcnkgZXhpc3RzLgorLSAgIE1TRE9TOiBhbHRob3VnaCB0X2N2IGFuZCB0X2NpIGFyZSBub3Qgc2V0LCBkbyBpbnZlcnQgY2hhciB1bmRlciBjdXJzb3IuCistICAgU2V0dGluZ3MgZWRpdCBtb2RlOiBtYWtlIGZpbGUgd2l0aCAiOnNldCBvcHQ9eHgiLCBlZGl0IGl0LCBwYXJzZSBpdCBhcyBleAorICAgIGNvbW1hbmRzLgorLSAgICI6c2V0IC13IGFsbCI6IGxpc3Qgb25lIG9wdGlvbiBwZXIgbGluZS4KKy0gICBBbWlnYTogdGVzdCBmb3IgJ3cnIGZsYWcgd2hlbiByZWFkaW5nIGEgZmlsZS4KKy0gICA6dGFibGUgY29tbWFuZCAoV2ViYikKKy0gICBBZGQgbmV3IG9wZXJhdG9yOiBjbGVhciwgbWFrZSBhcmVhIHdoaXRlIChyZXBsYWNlIHdpdGggc3BhY2VzKTogImcgIi4KKy0gICBNYWtlIGl0IHBvc3NpYmxlIGZvciBhIHVzZXIgdG8gZGVmaW5lIGEgbmV3IG9wZXJhdG9yLiAgSW1wbGVtZW50YXRpb24gd2l0aAorICAgIGludGVybmFsIHNjcmlwdGluZyBsYW5ndWFnZSBvciBQZXJsPworLSAgIEFkZCBjb21tYW5kIHRvICI6cmVhZCIgYSBmaWxlIGF0IGEgY2VydGFpbiBjb2x1bW4gKGJsb2Nrd2lzZSByZWFkPykuCistICAgQWRkIHNvcnQgb2YgcmVwbGFjZSBtb2RlIHdoZXJlIGNhc2UgaXMgdGFrZW4gZnJvbSB0aGUgb2xkIHRleHQgKEdvbGRmYXJiKS4KKy0gICBBbGxvdyBtdWx0aXBsZSBhcmd1bWVudHMgZm9yICI6cmVhZCIsIHJlYWQgYWxsIHRoZSBmaWxlcy4KKy0gICBTdXBwb3J0IGZvciB0YWJzIGluIHNwZWNpZmljIGNvbHVtbnM6ICI6c2V0IHRhYmNvbD04LDIwLDM0LDU2IiAoRGVtaXJlbCkuCistICAgQWRkICdzZWFyY2hkaXInIG9wdGlvbjogRGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBmaWxlIG5hbWUgYmVpbmcgZWRpdGVkCisgICAgKERlbWlyZWwpLgorLSAgIE1vZGlmaWVyIGZvciB0aGUgcHV0IGNvbW1hbmQ6IENoYW5nZSB0byBsaW5ld2lzZSwgY2hhcndpc2UsIGJsb2Nrd2lzZSwgZXRjLgorLSAgIEFkZCBjb21tYW5kcyBmb3Igc2F2aW5nIGFuZCByZXN0b3Jpbmcgb3B0aW9ucyAiOnNldCBzYXZlIiAic2V0IHJlc3RvcmUiLAorICAgIGZvciB1c2UgaW4gbWFjcm8ncyBhbmQgdGhlIGxpa2UuCistICAgS2VlcCBvdXRwdXQgZnJvbSBsaXN0aW5ncyBpbiBhIHdpbmRvdywgc28geW91IGNhbiBoYXZlIGEgbG9vayBhdCBpdCB3aGlsZQorICAgIHdvcmtpbmcgaW4gYW5vdGhlciB3aW5kb3cuIFB1dCBjbWRsaW5lIGluIGEgc2VwYXJhdGUgd2luZG93PworLSAgIEFkZCBwb3NzaWJpbGl0eSB0byBwdXQgb3V0cHV0IG9mIGV4IGNvbW1hbmRzIGluIGEgYnVmZmVyIG9yIGZpbGUsIGUuZy4gZm9yCisgICAgIjpzZXQgYWxsIi4gICI6ciA6c2V0IGFsbCI/CistICAgJ2VkaXQnIG9wdGlvbjogV2hlbiBvZmYgY2hhbmdpbmcgdGhlIGJ1ZmZlciBpcyBub3QgcG9zc2libGUgKFJlYWxseQorICAgIHJlYWQtb25seSBtb2RlKS4KKy0gICBXaGVuIHRoZSAnZXF1YWxhbHdheXMnIG9wdGlvbiBpcyBzZXQsIGNyZWF0aW5nIGEgbmV3IHdpbmRvdyBzaG91bGQgbm90CisgICAgcmVzdWx0IGluIHdpbmRvd3MgdG8gYmVjb21lIGJpZ2dlci4gRGVsZXRpbmcgYSB3aW5kb3cgc2hvdWxkIG5vdCByZXN1bHQgaW4KKyAgICBhIHdpbmRvdyB0byBiZWNvbWUgc21hbGxlciAoV2ViYikuCistICAgV2hlbiByZXNpemluZyB0aGUgd2hvbGUgVmltIHdpbmRvdywgdGhlIHdpbmRvd3MgaW5zaWRlIHNob3VsZCBiZSByZXNpemVkCisgICAgcHJvcG9ydGlvbmFsbHkgKFdlYmIpLgorLSAgIEluY2x1ZGUgb3B0aW9ucyBkaXJlY3RseSBpbiBvcHRpb24gdGFibGUsIG5vIGluZGlyZWN0IHBvaW50ZXJzLiBVc2UKKyAgICBta29wdHRhYiB0byBtYWtlIG9wdGlvbiB0YWJsZT8KKy0gICBXaGVuIGRvaW5nICI6dyBkaXIiLCB3aGVyZSAiZGlyIiBpcyBhIGRpcmVjdG9yeSBuYW1lLCB3cml0ZSB0aGUgY3VycmVudAorICAgIGZpbGUgaW50byB0aGF0IGRpcmVjdG9yeSwgd2l0aCB0aGUgY3VycmVudCBmaWxlIG5hbWUgKHdpdGhvdXQgdGhlIHBhdGgpPworLSAgIFN1cHBvcnQgZm9yICdkaWN0aW9uYXJ5J3MgdGhhdCBhcmUgc29ydGVkLCBtYWtlcyBhY2Nlc3MgYSBsb3QgZmFzdGVyCisgICAgKEhhcml0c2lzKS4KKy0gICBBZGQgIl5WcngiIG9uIHRoZSBjb21tYW5kIGxpbmUsIHJlcGxhY2Ugd2l0aCBjb250ZW50cyBvZiByZWdpc3RlciB4LiBVc2VkCisgICAgaW5zdGVhZCBvZiBDVFJMLVIgdG8gbWFrZSByZXBlYXRpbmcgcG9zc2libGUuIChNYXJpbmljaGV2KQorLSAgIEFkZCAiXlZiIiBvbiB0aGUgY29tbWFuZCBsaW5lLCByZXBsYWNlIHdpdGggd29yZCBiZWZvcmUgb3IgdW5kZXIgdGhlCisgICAgY3Vyc29yPworLSAgIE9wdGlvbiB0byBtYWtlIGEgLnN3cCBmaWxlIG9ubHkgd2hlbiBhIGNoYW5nZSBpcyBtYWRlIChUZW1wbGV0b24pLgorLSAgIFN1cHBvcnQgbWFwcGluZyBmb3IgcmVwbGFjZSBtb2RlIGFuZCAiciIgY29tbWFuZCAoVmkgZG9lc24ndCBkbyB0aGlzKT8KKzUgICBBZGQgJ2lnbm9yZWZpbGVjYXNlJyBvcHRpb246IElnbm9yZSBjYXNlIHdoZW4gZXhwYW5kaW5nIGZpbGUgbmFtZXMuCisgICAgIjplIG1hPFRhYj4iIHdvdWxkIGFsc28gZmluZCAiTWFrZWZpbGUiIG9uIFVuaXguCis4ICAgU29ydGluZyBvZiBmaWxlbmFtZXMgZm9yIGNvbXBsZXRpb24gaXMgd3Jvbmcgb24gc3lzdGVtcyB0aGF0IGlnbm9yZSBjYXNlCisgICAgb2YgZmlsZW5hbWVzLiAgQWRkICdpZ25vcmVmbmNhc2UnIG9wdGlvbi4gIFdoZW4gc2V0LCBjYXNlIGluIGZpbGVuYW1lcyBpcworICAgIGlnbm9yZWQgZm9yIHNvcnRpbmcgdGhlbS4gUGF0Y2ggYnkgTWlrZSBXaWxsaWFtczoKKyAgICB+L3ZpbS9wYXRjaGVzL2lnbm9yZWZuY2FzZS4gIEFsc28gY2hhbmdlIHdoYXQgbWF0Y2hlcz8gIE9yIHVzZSBhbm90aGVyCisgICAgb3B0aW9uIG5hbWUuCis4ICAgU2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBWaW0gaW4gYW5vdGhlciBkaXJlY3RvcnksIHdpdGggJChzcmNkaXIpIHNldCB0bworICAgIHdoZXJlIHRoZSBzb3VyY2VzIGFyZS4gQWRkICQoc3JjZGlyKSBpbiB0aGUgTWFrZWZpbGUgaW4gYSBsb3Qgb2YgcGxhY2VzLgorICAgIChOZXRoZXJ0b24pCis2ICAgTWFrZSBpdCBjb25maWd1cmFibGUgd2hlbiAiSiIgaW5zZXJ0cyBhIHNwYWNlIG9yIG5vdC4gIFNob3VsZCBub3QgYWRkIGEKKyAgICBzcGFjZSBhZnRlciAiKCIsIGZvciBleGFtcGxlLgorNSAgIFdoZW4gaW5zZXJ0aW5nIHNwYWNlcyBhZnRlciB0aGUgZW5kLW9mLWxpbmUgZm9yICd2aXJ0dWFsZWRpdCcsIHVzZSB0YWJzCisgICAgd2hlbiB0aGUgdXNlciB3YW50cyB0aGlzIChlLmcuLCBhZGQgYSAidGFiIiBmaWVsZCB0byAndmlydHVhbGVkaXQnKS4KKyAgICAoU2VydmF0aXVzIEJyYW5kdCkKKworCitGcm9tIEVsdmlzOgorLSAgIFVzZSAiaW5zdG1hbi5zaCIgdG8gaW5zdGFsbCBtYW5wYWdlcz8KKy0gICBBZGQgIjphbGlhcyIgY29tbWFuZC4KKy0gICBmb250Y2hhbmdlcyByZWNvZ25pemVkICJcXGZCIiBldGMuCistICAgU2VhcmNoIHBhdHRlcm5zOgorICAgICAgXEAJbWF0Y2ggd29yZCB1bmRlciBjdXJzb3IuCisgICAgYnV0IGRvOgorICAgICAgXEB3CW1hdGNoIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3I/CisgICAgICBcQFcJbWF0Y2ggdGhlIFdPUkQgdW5kZXIgdGhlIGN1cnNvcj8KKzggICAiOndpbmRvdyIgY29tbWFuZDoKKyAgICA6d2luICsJbmV4dCB3aW5kb3cgKHVwKQorICAgIDp3aW4gKysJaWRlbSwgd3JhcHBpbmcKKyAgICA6d2luIC0JcHJldmlvdXMgd2luZG93IChkb3duKQorICAgIDp3aW4gLS0JaWRlbSwgd3JhcHBpbmcKKyAgICA6d2luIG5yCXRvIHdpbmRvdyBudW1iZXIgIm5yIgorICAgIDp3aW4gbmFtZQl0byB3aW5kb3cgZWRpdGluZyBidWZmZXIgIm5hbWUiCis3ICAgIjpjYyIgY29tcGlsZXMgYSBzaW5nbGUgZmlsZSAoZGVmYXVsdDogY3VycmVudCBvbmUpLiAgJ2NjcHJnJyAgIG9wdGlvbiBpcworICAgIHByb2dyYW0gdG8gdXNlIHdpdGggIjpjYyIuICBVc2UgIjpjb21waWxlIiBpbnN0ZWFkIG9mICI6Y2MiPworCisKK0Zyb20gTnZpOgorLSAgICdzZWFyY2hpbmNyJyBvcHRpb24sIGFsaWFzIGZvciAnaW5jc2VhcmNoJz8KKy0gICAnbGVmdHJpZ2h0JyBvcHRpb24sIGFsaWFzIGZvciAnbm93cmFwJz8KKy0gICBIYXZlIGEgbG9vayBhdCAidmkvZG9jL3ZpLmNoYXJ0IiwgZm9yIE52aSBzcGVjaWFsdGllcy4KKzggICBBZGQgJ2tleXRpbWUnLCB0aW1lIGluIDEvMTAgc2VjIGZvciBtYXBwaW5nIHRpbWVvdXQ/CistICAgQWRkICdmaWxlYycgb3B0aW9uIGFzIGFuIGFsdGVybmF0aXZlIGZvciAnd2lsZGNoYXInLgorNiAgIFN1cHBvcnQgTnZpIGNvbW1hbmQgbmFtZXMgYXMgYW4gYWxpYXM6CisgICAgOmJnCQkgICAgOmhpZGUKKyAgICA6ZmcJZm5hbWUJICAgIDpidWYgZm5hbWUgKHdpdGggJ2hpZGRlbicgc2V0PykKKyAgICA6ZGlzIGIJICAgIDpscworICAgIDpFZGl0IGZuYW1lCSAgICA6c3BsaXQgZm5hbWUKKyAgICA6RmcgZm5hbWUJICAgIDpzYnVmIGZuYW1lICh3aXRoICdoaWRkZW4nIHNldD8pCisgICAgOk5leHQJICAgIDpzbmV4dCAoY2FuJ3QgZG8gdGhpcywgYWxyZWFkeSB1c2UgOk5leHQpCisgICAgOlByZXZpb3VzCSAgICA6c3ByZXZpb3VzCisgICAgOlRhZwkgICAgOnN0YWcKKworCitGcm9tIHh2aToKKy0gICBDVFJMLV8gOiBzd2FwIDh0aCBiaXQgb2YgY2hhcmFjdGVyLgorLSAgIEFkZCBlZ3JlcC1saWtlIHJlZ2V4IHR5cGUsIGxpa2UgeHZpIChOZWQgS29ueikgb3IgUGVybCAoRW1tYW51ZWwgTW9nZW5ldCkKKworCitGcm9tIHZpbGU6CistICAgV2hlbiBob3Jpem9udGFsIHNjcm9sbGluZywgdXNlICc+JyBmb3IgbGluZXMgY29udGludWluZyByaWdodCBvZiBhIHdpbmRvdy4KKy0gICBTdXBwb3J0IHB1dHRpbmcgLnN3cCBmaWxlcyBpbiAvdG1wOiBDb21tYW5kIGluIHJjLmxvY2FsIHRvIG1vdmUgLnN3cCBmaWxlcworICAgIGZyb20gL3RtcCB0byBzb21lIGRpcmVjdG9yeSBiZWZvcmUgZGVsZXRpbmcgZmlsZXMuCisKKworRmFyIGZ1dHVyZSBhbmQgImJpZyIgZXh0ZW5zaW9uczoKKy0gICBNYWtlIGl0IGVhc3kgdG8gc2V0dXAgVmltIGZvciBncm91cHMgb2YgdXNlcnM6IG5vdmljZSB2aSB1c2Vycywgbm92aWNlCisgICAgVmltIHVzZXJzLCBDIHByb2dyYW1tZXJzLCB4dGVybSB1c2VycywgR1VJIHVzZXJzLC4uLgorLSAgIENoYW5nZSBsYXlvdXQgb2YgYmxvY2tzIGluIHN3YXAgZmlsZTogVGV4dCBhdCB0aGUgc3RhcnQsIHdpdGggJ1xuJyBpbgorICAgIGJldHdlZW4gbGluZXMgKGp1c3QgbG9hZCB0aGUgZmlsZSB3aXRob3V0IGNoYW5nZXMsIGV4Y2VwdCBmb3IgTWFjKS4KKyAgICBJbmRleGVzIGZvciBsaW5lcyBhcmUgZnJvbSB0aGUgZW5kIG9mIHRoZSBibG9jayBiYWNrd2FyZHMuICBJdCdzIHRoZQorICAgIGN1cnJlbnQgbGF5b3V0IG1pcnJvcmVkLgorLSAgIE1ha2UgaXQgcG9zc2libGUgdG8gZWRpdCBhIHJlZ2lzdGVyLCBpbiBhIHdpbmRvdywgbGlrZSBhIGJ1ZmZlci4KKy0gICBBZGQgc3R1ZmYgdG8gc3ludGF4IGhpZ2hsaWdodGluZyB0byBjaGFuZ2UgdGhlIHRleHQgKHVwcGVyLWNhc2Uga2V5d29yZHMsCisgICAgc2V0IGluZGVudCwgZGVmaW5lIG90aGVyIGhpZ2hsaWdodGluZywgZXRjLikuCistICAgTW9kZSB0byBrZWVwIEMtY29kZSBmb3JtYXR0ZWQgYWxsIHRoZSB0aW1lIChzb3J0IG9mIG9uLWxpbmUgaW5kZW50KS4KKy0gICBTZXZlcmFsIHRvcC1sZXZlbCB3aW5kb3dzIGluIG9uZSBWaW0gc2Vzc2lvbi4gIEJlIGFibGUgdG8gdXNlIGEgZGlmZmVyZW50CisgICAgZm9udCBpbiBlYWNoIHRvcC1sZXZlbCB3aW5kb3cuCistICAgQWxsb3cgZWRpdGluZyBhYm92ZSBzdGFydCBhbmQgYmVsb3cgZW5kIG9mIGJ1ZmZlciAoZmxhZyBpbiAndmlydHVhbGVkaXQnKS4KKy0gICBTbWFydCBjdXQvcGFzdGU6IHJlY29nbml6ZSB3b3JkcyBhbmQgYWRqdXN0IHNwYWNlcyBiZWZvcmUvYWZ0ZXIgdGhlbS4KKy0gICBBZGQgb3BlbiBtb2RlLCB1c2UgaXQgd2hlbiB0ZXJtaW5hbCBoYXMgbm8gY3Vyc29yIHBvc2l0aW9uaW5nLgorLSAgIFNwZWNpYWwgImRyYXdpbmcgbW9kZSI6IGEgbGluZSBpcyBkcmF3biB3aGVyZSB0aGUgY3Vyc29yIGlzIG1vdmVkIHRvLgorICAgIEJhY2tzcGFjZSBkZWxldGVzIGFsb25nIHRoZSBsaW5lIChmcm9tIGp2aW0pLgorLSAgIEltcGxlbWVudCAiOkJzZXQiLCBzZXQgb3B0aW9uIGluIGFsbCBidWZmZXJzLiAgQWxzbyAiOldzZXQiLCBzZXQgaW4gYWxsCisgICAgd2luZG93cywgIjpBc2V0LCBzZXQgaW4gYWxsIGFyZ3VtZW50cyBhbmQgIjpUc2V0Iiwgc2V0IGluIGFsbCBmaWxlcworICAgIG1lbnRpb25lZCBpbiB0aGUgdGFncyBmaWxlLgorICAgIEFkZCBidWZmZXIvYXJnIHJhbmdlLCBsaWtlIGluICI6Miw1QiVzLy4uLiIgKGRvIHdlIHJlYWxseSBuZWVkIHRoaXM/Pz8pCisgICAgQWRkIHNlYXJjaCBzdHJpbmc6ICJCLyouYy8lcy8uLiI/ICBPciAiOkYvKi5jLyVzLy4uIj8KKy0gICBTdXBwb3J0IGZvciB1bmRlcmxpbmluZyAodW5kZXJzY29yZS1CUy1jaGFyKSwgYm9sZCAoY2hhci1CUy1jaGFyKSBhbmQgb3RoZXIKKyAgICBzdGFuZG91dCBtb2RlcyBzd2l0Y2hlZCBvbi9vZmYgd2l0aCAsICdvdmVyc3RyaWtlJyBvcHRpb24gKFJlaXRlcikuCistICAgQWRkIHZlcnRpY2FsIG1vZGUgKFBhdWwgSnVyeSwgRGVtaXJlbCk6ICI1dmR3IiBkZWxldGVzIGEgd29yZCBpbiBmaXZlCisgICAgbGluZXMsICIzdml0ZXh0RVNDIiB3aWxsIGluc2VydCAidGV4dCIgaW4gdGhyZWUgbGluZXMsIGV0Yy4uCis0ICAgUmVjb2duaXplIGwsICMsIHAgYXMgJ2ZsYWdzJyB0byBFWCBjb21tYW5kczoKKyAgICA6Zy9SRS8jbCBzaGFsbCBwcmludCBsaW5lcyB3aXRoIGxpbmUgbnVtYmVycyBhbmQgaW4gbGlzdCBmb3JtYXQuCisgICAgOmcvUkUvZHAgc2hhbGwgcHJpbnQgbGluZXMgdGhhdCBhcmUgZGVsZXRlZC4KKyAgICBQT1NJWDogQ29tbWFuZHMgd2hlcmUgZmxhZ3Mgc2hhbGwgYXBwbHkgdG8gYWxsIGxpbmVzIHdyaXR0ZW46IGxpc3QsCisgICAgbnVtYmVyLCBvcGVuLCBwcmludCwgc3Vic3RpdHV0ZSwgdmlzdWFsLCAmLCB6LiBGb3Igb3RoZXIgY29tbWFuZHMsIGZsYWdzCisgICAgc2hhbGwgYXBwbHkgdG8gdGhlIGN1cnJlbnQgbGluZSBhZnRlciB0aGUgY29tbWFuZCBjb21wbGV0ZXMuICBFeGFtcGxlczoKKyAgICA6NywxMGogI2wgSm9pbiB0aGUgbGluZXMgNy0xMCBhbmQgcHJpbnQgdGhlIHJlc3VsdCBpbiBsaXN0CistICAgQWxsb3cgdHdvIG9yIG1vcmUgdXNlcnMgdG8gZWRpdCB0aGUgc2FtZSBmaWxlIGF0IHRoZSBzYW1lIHRpbWUuICBDaGFuZ2VzCisgICAgYXJlIHJlZmxlY3RlZCBpbiBlYWNoIFZpbSBpbW1lZGlhdGVseS4gIENvdWxkIHdvcmsgd2l0aCBsb2NhbCBmaWxlcyBidXQKKyAgICBhbHNvIG92ZXIgdGhlIGludGVybmV0LiAgU2VlIGh0dHA6Ly93d3cuY29kaW5nbW9ua2V5cy5kZS9zdWJldGhhZWRpdC8uCisKKwordmltOnR3PTc4OnN3PTQ6c3RzPTQ6dHM9ODpmdD1oZWxwOm5vcmw6Cit2aW06IHNldCBmbys9biA6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91Z2FuZGEudHh0IGIvcnVudGltZS9kb2MvdWdhbmRhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmRmN2M3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdWdhbmRhLnR4dApAQCAtMCwwICsxLDI3NyBAQAorKnVnYW5kYS50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAxMgorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKKwkJCSp1Z2FuZGEqICpVZ2FuZGEqICpjb3B5aW5nKiAqY29weXJpZ2h0KiAqbGljZW5zZSoKK1NVTU1BUlkKKwkJCQkJCQkJKmljY2YqICpJQ0NGKgorVmltIGlzIENoYXJpdHl3YXJlLiAgWW91IGNhbiB1c2UgYW5kIGNvcHkgaXQgYXMgbXVjaCBhcyB5b3UgbGlrZSwgYnV0IHlvdSBhcmUKK2VuY291cmFnZWQgdG8gbWFrZSBhIGRvbmF0aW9uIGZvciBuZWVkeSBjaGlsZHJlbiBpbiBVZ2FuZGEuICBQbGVhc2Ugc2VlIHxrY2N8CitiZWxvdyBvciB2aXNpdCB0aGUgSUNDRiB3ZWIgc2l0ZSwgYXZhaWxhYmxlIGF0IHRoZXNlIFVSTHM6CisKKwlodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy8KKwlodHRwOi8vd3d3LnZpbS5vcmcvaWNjZi8KKworWW91IGNhbiBhbHNvIHNwb25zb3IgdGhlIGRldmVsb3BtZW50IG9mIFZpbS4gIFZpbSBzcG9uc29ycyBjYW4gdm90ZSBmb3IKK2ZlYXR1cmVzLiAgU2VlIHxzcG9uc29yfC4KKworVGhlIE9wZW4gUHVibGljYXRpb24gTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBWaW0gZG9jdW1lbnRhdGlvbiwgc2VlCit8bWFudWFsLWNvcHlyaWdodHwuCisKKz09PSBiZWdpbiBvZiBsaWNlbnNlID09PQorCitWSU0gTElDRU5TRQorCitJKSAgVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiBkaXN0cmlidXRpbmcgdW5tb2RpZmllZCBjb3BpZXMgb2YgVmltIGV4Y2VwdAorICAgIHRoYXQgdGhleSBtdXN0IGluY2x1ZGUgdGhpcyBsaWNlbnNlIHRleHQuICBZb3UgY2FuIGFsc28gZGlzdHJpYnV0ZQorICAgIHVubW9kaWZpZWQgcGFydHMgb2YgVmltLCBsaWtld2lzZSB1bnJlc3RyaWN0ZWQgZXhjZXB0IHRoYXQgdGhleSBtdXN0CisgICAgaW5jbHVkZSB0aGlzIGxpY2Vuc2UgdGV4dC4gIFlvdSBhcmUgYWxzbyBhbGxvd2VkIHRvIGluY2x1ZGUgZXhlY3V0YWJsZXMKKyAgICB0aGF0IHlvdSBtYWRlIGZyb20gdGhlIHVubW9kaWZpZWQgVmltIHNvdXJjZXMsIHBsdXMgeW91ciBvd24gdXNhZ2UKKyAgICBleGFtcGxlcyBhbmQgVmltIHNjcmlwdHMuCisKK0lJKSBJdCBpcyBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgYSBtb2RpZmllZCAob3IgZXh0ZW5kZWQpIHZlcnNpb24gb2YgVmltLAorICAgIGluY2x1ZGluZyBleGVjdXRhYmxlcyBhbmQvb3Igc291cmNlIGNvZGUsIHdoZW4gdGhlIGZvbGxvd2luZyBmb3VyCisgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgIDEpIFRoaXMgbGljZW5zZSB0ZXh0IG11c3QgYmUgaW5jbHVkZWQgdW5tb2RpZmllZC4KKyAgICAyKSBUaGUgbW9kaWZpZWQgVmltIG11c3QgYmUgZGlzdHJpYnV0ZWQgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZml2ZSB3YXlzOgorICAgICAgIGEpIElmIHlvdSBtYWtlIGNoYW5nZXMgdG8gVmltIHlvdXJzZWxmLCB5b3UgbXVzdCBjbGVhcmx5IGRlc2NyaWJlIGluCisJICB0aGUgZGlzdHJpYnV0aW9uIGhvdyB0byBjb250YWN0IHlvdS4gIFdoZW4gdGhlIG1haW50YWluZXIgYXNrcyB5b3UKKwkgIChpbiBhbnkgd2F5KSBmb3IgYSBjb3B5IG9mIHRoZSBtb2RpZmllZCBWaW0geW91IGRpc3RyaWJ1dGVkLCB5b3UKKwkgIG11c3QgbWFrZSB5b3VyIGNoYW5nZXMsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgYXZhaWxhYmxlIHRvIHRoZQorCSAgbWFpbnRhaW5lciB3aXRob3V0IGZlZS4gIFRoZSBtYWludGFpbmVyIHJlc2VydmVzIHRoZSByaWdodCB0bworCSAgaW5jbHVkZSB5b3VyIGNoYW5nZXMgaW4gdGhlIG9mZmljaWFsIHZlcnNpb24gb2YgVmltLiAgV2hhdCB0aGUKKwkgIG1haW50YWluZXIgd2lsbCBkbyB3aXRoIHlvdXIgY2hhbmdlcyBhbmQgdW5kZXIgd2hhdCBsaWNlbnNlIHRoZXkKKwkgIHdpbGwgYmUgZGlzdHJpYnV0ZWQgaXMgbmVnb3RpYWJsZS4gIElmIHRoZXJlIGhhcyBiZWVuIG5vIG5lZ290aWF0aW9uCisJICB0aGVuIHRoaXMgbGljZW5zZSwgb3IgYSBsYXRlciB2ZXJzaW9uLCBhbHNvIGFwcGxpZXMgdG8geW91ciBjaGFuZ2VzLgorCSAgVGhlIGN1cnJlbnQgbWFpbnRhaW5lciBpcyBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPi4gIElmIHRoaXMKKwkgIGNoYW5nZXMgaXQgd2lsbCBiZSBhbm5vdW5jZWQgaW4gYXBwcm9wcmlhdGUgcGxhY2VzIChtb3N0IGxpa2VseQorCSAgdmltLnNmLm5ldCwgd3d3LnZpbS5vcmcgYW5kL29yIGNvbXAuZWRpdG9ycykuICBXaGVuIGl0IGlzIGNvbXBsZXRlbHkKKwkgIGltcG9zc2libGUgdG8gY29udGFjdCB0aGUgbWFpbnRhaW5lciwgdGhlIG9ibGlnYXRpb24gdG8gc2VuZCBoaW0KKwkgIHlvdXIgY2hhbmdlcyBjZWFzZXMuICBPbmNlIHRoZSBtYWludGFpbmVyIGhhcyBjb25maXJtZWQgdGhhdCBoZSBoYXMKKwkgIHJlY2VpdmVkIHlvdXIgY2hhbmdlcyB0aGV5IHdpbGwgbm90IGhhdmUgdG8gYmUgc2VudCBhZ2Fpbi4KKyAgICAgICBiKSBJZiB5b3UgaGF2ZSByZWNlaXZlZCBhIG1vZGlmaWVkIFZpbSB0aGF0IHdhcyBkaXN0cmlidXRlZCBhcworCSAgbWVudGlvbmVkIHVuZGVyIGEpIHlvdSBhcmUgYWxsb3dlZCB0byBmdXJ0aGVyIGRpc3RyaWJ1dGUgaXQKKwkgIHVubW9kaWZpZWQsIGFzIG1lbnRpb25lZCBhdCBJKS4gIElmIHlvdSBtYWtlIGFkZGl0aW9uYWwgY2hhbmdlcyB0aGUKKwkgIHRleHQgdW5kZXIgYSkgYXBwbGllcyB0byB0aG9zZSBjaGFuZ2VzLgorICAgICAgIGMpIFByb3ZpZGUgYWxsIHRoZSBjaGFuZ2VzLCBpbmNsdWRpbmcgc291cmNlIGNvZGUsIHdpdGggZXZlcnkgY29weSBvZgorCSAgdGhlIG1vZGlmaWVkIFZpbSB5b3UgZGlzdHJpYnV0ZS4gIFRoaXMgbWF5IGJlIGRvbmUgaW4gdGhlIGZvcm0gb2YgYQorCSAgY29udGV4dCBkaWZmLiAgWW91IGNhbiBjaG9vc2Ugd2hhdCBsaWNlbnNlIHRvIHVzZSBmb3IgbmV3IGNvZGUgeW91CisJICBhZGQuICBUaGUgY2hhbmdlcyBhbmQgdGhlaXIgbGljZW5zZSBtdXN0IG5vdCByZXN0cmljdCBvdGhlcnMgZnJvbQorCSAgbWFraW5nIHRoZWlyIG93biBjaGFuZ2VzIHRvIHRoZSBvZmZpY2lhbCB2ZXJzaW9uIG9mIFZpbS4KKyAgICAgICBkKSBXaGVuIHlvdSBoYXZlIGEgbW9kaWZpZWQgVmltIHdoaWNoIGluY2x1ZGVzIGNoYW5nZXMgYXMgbWVudGlvbmVkCisJICB1bmRlciBjKSwgeW91IGNhbiBkaXN0cmlidXRlIGl0IHdpdGhvdXQgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUKKwkgIGNoYW5nZXMgaWYgdGhlIGZvbGxvd2luZyB0aHJlZSBjb25kaXRpb25zIGFyZSBtZXQ6CisJICAtIFRoZSBsaWNlbnNlIHRoYXQgYXBwbGllcyB0byB0aGUgY2hhbmdlcyBwZXJtaXRzIHlvdSB0byBkaXN0cmlidXRlCisJICAgIHRoZSBjaGFuZ2VzIHRvIHRoZSBWaW0gbWFpbnRhaW5lciB3aXRob3V0IGZlZSBvciByZXN0cmljdGlvbiwgYW5kCisJICAgIHBlcm1pdHMgdGhlIFZpbSBtYWludGFpbmVyIHRvIGluY2x1ZGUgdGhlIGNoYW5nZXMgaW4gdGhlIG9mZmljaWFsCisJICAgIHZlcnNpb24gb2YgVmltIHdpdGhvdXQgZmVlIG9yIHJlc3RyaWN0aW9uLgorCSAgLSBZb3Uga2VlcCB0aGUgY2hhbmdlcyBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYWZ0ZXIgbGFzdAorCSAgICBkaXN0cmlidXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbW9kaWZpZWQgVmltLiAgV2hlbiB0aGUgbWFpbnRhaW5lcgorCSAgICBvciBzb21lb25lIHdobyB5b3UgZGlzdHJpYnV0ZWQgdGhlIG1vZGlmaWVkIFZpbSB0byBhc2tzIHlvdSAoaW4KKwkgICAgYW55IHdheSkgZm9yIHRoZSBjaGFuZ2VzIHdpdGhpbiB0aGlzIHBlcmlvZCwgeW91IG11c3QgbWFrZSB0aGVtCisJICAgIGF2YWlsYWJsZSB0byBoaW0uCisJICAtIFlvdSBjbGVhcmx5IGRlc2NyaWJlIGluIHRoZSBkaXN0cmlidXRpb24gaG93IHRvIGNvbnRhY3QgeW91LiAgVGhpcworCSAgICBjb250YWN0IGluZm9ybWF0aW9uIG11c3QgcmVtYWluIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycworCSAgICBhZnRlciBsYXN0IGRpc3RyaWJ1dGluZyB0aGUgY29ycmVzcG9uZGluZyBtb2RpZmllZCBWaW0sIG9yIGFzIGxvbmcKKwkgICAgYXMgcG9zc2libGUuCisgICAgICAgZSkgV2hlbiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgYXBwbGllcyB0byB0aGUgY2hhbmdlcywKKwkgIHlvdSBjYW4gZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgVmltIHVuZGVyIHRoZSBHTlUgR1BMIHZlcnNpb24gMiBvcgorCSAgYW55IGxhdGVyIHZlcnNpb24uCisgICAgMykgQSBtZXNzYWdlIG11c3QgYmUgYWRkZWQsIGF0IGxlYXN0IGluIHRoZSBvdXRwdXQgb2YgdGhlICI6dmVyc2lvbiIKKyAgICAgICBjb21tYW5kIGFuZCBpbiB0aGUgaW50cm8gc2NyZWVuLCBzdWNoIHRoYXQgdGhlIHVzZXIgb2YgdGhlIG1vZGlmaWVkIFZpbQorICAgICAgIGlzIGFibGUgdG8gc2VlIHRoYXQgaXQgd2FzIG1vZGlmaWVkLiAgV2hlbiBkaXN0cmlidXRpbmcgYXMgbWVudGlvbmVkCisgICAgICAgdW5kZXIgMillKSBhZGRpbmcgdGhlIG1lc3NhZ2UgaXMgb25seSByZXF1aXJlZCBmb3IgYXMgZmFyIGFzIHRoaXMgZG9lcworICAgICAgIG5vdCBjb25mbGljdCB3aXRoIHRoZSBsaWNlbnNlIHVzZWQgZm9yIHRoZSBjaGFuZ2VzLgorICAgIDQpIFRoZSBjb250YWN0IGluZm9ybWF0aW9uIGFzIHJlcXVpcmVkIHVuZGVyIDIpYSkgYW5kIDIpZCkgbXVzdCBub3QgYmUKKyAgICAgICByZW1vdmVkIG9yIGNoYW5nZWQsIGV4Y2VwdCB0aGF0IHRoZSBwZXJzb24gaGltc2VsZiBjYW4gbWFrZQorICAgICAgIGNvcnJlY3Rpb25zLgorCitJSUkpIElmIHlvdSBkaXN0cmlidXRlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBWaW0sIHlvdSBhcmUgZW5jb3VyYWdlZCB0byB1c2UKKyAgICAgdGhlIFZpbSBsaWNlbnNlIGZvciB5b3VyIGNoYW5nZXMgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gdGhlCisgICAgIG1haW50YWluZXIsIGluY2x1ZGluZyB0aGUgc291cmNlIGNvZGUuICBUaGUgcHJlZmVycmVkIHdheSB0byBkbyB0aGlzIGlzCisgICAgIGJ5IGUtbWFpbCBvciBieSB1cGxvYWRpbmcgdGhlIGZpbGVzIHRvIGEgc2VydmVyIGFuZCBlLW1haWxpbmcgdGhlIFVSTC4KKyAgICAgSWYgdGhlIG51bWJlciBvZiBjaGFuZ2VzIGlzIHNtYWxsIChlLmcuLCBhIG1vZGlmaWVkIE1ha2VmaWxlKSBlLW1haWxpbmcgYQorICAgICBjb250ZXh0IGRpZmYgd2lsbCBkby4gIFRoZSBlLW1haWwgYWRkcmVzcyB0byBiZSB1c2VkIGlzCisgICAgIDxtYWludGFpbmVyQHZpbS5vcmc+CisKK0lWKSAgSXQgaXMgbm90IGFsbG93ZWQgdG8gcmVtb3ZlIHRoaXMgbGljZW5zZSBmcm9tIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFZpbQorICAgICBzb3VyY2VzLCBwYXJ0cyBvZiBpdCBvciBmcm9tIGEgbW9kaWZpZWQgdmVyc2lvbi4gIFlvdSBtYXkgdXNlIHRoaXMKKyAgICAgbGljZW5zZSBmb3IgcHJldmlvdXMgVmltIHJlbGVhc2VzIGluc3RlYWQgb2YgdGhlIGxpY2Vuc2UgdGhhdCB0aGV5IGNhbWUKKyAgICAgd2l0aCwgYXQgeW91ciBvcHRpb24uCisKKz09PSBlbmQgb2YgbGljZW5zZSA9PT0KKworTm90ZToKKworLSBJZiB5b3UgYXJlIGhhcHB5IHdpdGggVmltLCBwbGVhc2UgZXhwcmVzcyB0aGF0IGJ5IHJlYWRpbmcgdGhlIHJlc3Qgb2YgdGhpcworICBmaWxlIGFuZCBjb25zaWRlciBoZWxwaW5nIG5lZWR5IGNoaWxkcmVuIGluIFVnYW5kYS4KKworLSBJZiB5b3Ugd2FudCB0byBzdXBwb3J0IGZ1cnRoZXIgVmltIGRldmVsb3BtZW50IGNvbnNpZGVyIGJlY29taW5nIGEKKyAgfHNwb25zb3J8LgorCistIEFjY29yZGluZyB0byBSaWNoYXJkIFN0YWxsbWFuIHRoZSBWaW0gbGljZW5zZSBpcyBHTlUgR1BMIGNvbXBhdGlibGUuCisgIEEgZmV3IG1pbm9yIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgc2luY2UgaGUgY2hlY2tlZCBpdCwgYnV0IHRoYXQgc2hvdWxkIG5vdAorICBtYWtlIGEgZGlmZmVyZW5jZS4KKworLSBJZiB5b3UgbGluayBWaW0gd2l0aCBhIGxpYnJhcnkgdGhhdCBnb2VzIHVuZGVyIHRoZSBHTlUgR1BMLCB0aGlzIGxpbWl0cworICBmdXJ0aGVyIGRpc3RyaWJ1dGlvbiB0byB0aGUgR05VIEdQTC4gIEFsc28gd2hlbiB5b3UgZGlkbid0IGFjdHVhbGx5IGNoYW5nZQorICBhbnl0aGluZyBpbiBWaW0uCisKKy0gT25jZSBhIGNoYW5nZSBpcyBpbmNsdWRlZCB0aGF0IGdvZXMgdW5kZXIgdGhlIEdOVSBHUEwsIHRoaXMgZm9yY2VzIGFsbAorICBmdXJ0aGVyIGNoYW5nZXMgdG8gYWxzbyBiZSBtYWRlIHVuZGVyIHRoZSBHTlUgR1BMIG9yIGEgY29tcGF0aWJsZSBsaWNlbnNlLgorCistIElmIHlvdSBkaXN0cmlidXRlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBWaW0sIHlvdSBjYW4gaW5jbHVkZSB5b3VyIG5hbWUgYW5kCisgIGNvbnRhY3QgaW5mb3JtYXRpb24gd2l0aCB0aGUgIi0td2l0aC1tb2RpZmllZC1ieSIgY29uZmlndXJlIGFyZ3VtZW50IG9yIHRoZQorICBNT0RJRklFRF9CWSBkZWZpbmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorS2liYWFsZSBDaGlsZHJlbidzIENlbnRyZQkJCQkJCSprY2MqCisKK0tpYmFhbGUgQ2hpbGRyZW4ncyBDZW50cmUgKEtDQykgaXMgbG9jYXRlZCBpbiBLaWJhYWxlLCBhIHNtYWxsIHRvd24gaW4gdGhlCitzb3V0aCBvZiBVZ2FuZGEsIG5lYXIgVGFuemFuaWEsIGluIEVhc3QgQWZyaWNhLiAgVGhlIGFyZWEgaXMga25vd24gYXMgUmFrYWkKK0Rpc3RyaWN0LiAgVGhlIHBvcHVsYXRpb24gaXMgbW9zdGx5IGZhcm1lcnMuICBBbHRob3VnaCBwZW9wbGUgYXJlIHBvb3IsIHRoZXJlCitpcyBlbm91Z2ggZm9vZC4gIEJ1dCB0aGlzIGRpc3RyaWN0IGlzIHN1ZmZlcmluZyBmcm9tIEFJRFMgbW9yZSB0aGFuIGFueSBvdGhlcgorcGFydCBvZiB0aGUgd29ybGQuICBTb21lIHNheSB0aGF0IGl0IHN0YXJ0ZWQgdGhlcmUuICBFc3RpbWF0aW9ucyBhcmUgdGhhdCAxMAordG8gMzAlIG9mIHRoZSBVZ2FuZGFucyBhcmUgaW5mZWN0ZWQgd2l0aCBISVYuICBCZWNhdXNlIHBhcmVudHMgZGllLCB0aGVyZSBhcmUKK21hbnkgb3JwaGFucy4gIEluIHRoaXMgZGlzdHJpY3QgYWJvdXQgNjAsMDAwIGNoaWxkcmVuIGhhdmUgbG9zdCBvbmUgb3IgYm90aAorcGFyZW50cywgb3V0IG9mIGEgcG9wdWxhdGlvbiBvZiAzNTAsMDAwLiAgQW5kIHRoaXMgaXMgc3RpbGwgY29udGludWluZy4KKworVGhlIGNoaWxkcmVuIG5lZWQgYSBsb3Qgb2YgaGVscC4gIFRoZSBLQ0MgaXMgd29ya2luZyBoYXJkIHRvIHByb3ZpZGUgdGhlIG5lZWR5Cit3aXRoIGZvb2QsIG1lZGljYWwgY2FyZSBhbmQgZWR1Y2F0aW9uLiAgRm9vZCBhbmQgbWVkaWNhbCBjYXJlIHRvIGtlZXAgdGhlbQoraGVhbHRoeSBub3csIGFuZCBlZHVjYXRpb24gc28gdGhhdCB0aGV5IGNhbiB0YWtlIGNhcmUgb2YgdGhlbXNlbHZlcyBpbiB0aGUKK2Z1dHVyZS4gIEtDQyB3b3JrcyBvbiBhIENocmlzdGlhbiBiYXNlLCBidXQgaGVscCBpcyBnaXZlbiB0byBjaGlsZHJlbiBvZiBhbnkKK3JlbGlnaW9uLgorCitUaGUga2V5IHRvIHNvbHZpbmcgdGhlIHByb2JsZW1zIGluIHRoaXMgYXJlYSBpcyBlZHVjYXRpb24uICBUaGlzIGhhcyBiZWVuCituZWdsZWN0ZWQgaW4gdGhlIHBhc3QgeWVhcnMgd2l0aCBwcmVzaWRlbnQgSWRpIEFtaW4gYW5kIHRoZSBmb2xsb3dpbmcgY2l2aWwKK3dhcnMuICBOb3cgdGhhdCB0aGUgZ292ZXJubWVudCBpcyBzdGFibGUgYWdhaW4sIHRoZSBjaGlsZHJlbiBhbmQgcGFyZW50cyBoYXZlCit0byBsZWFybiBob3cgdG8gdGFrZSBjYXJlIG9mIHRoZW1zZWx2ZXMgYW5kIGhvdyB0byBhdm9pZCBpbmZlY3Rpb25zLiAgVGhlcmUgaXMKK2Fsc28gaGVscCBmb3IgcGVvcGxlIHdobyBhcmUgaWxsIGFuZCBodW5ncnksIGJ1dCB0aGUgcHJpbWFyeSBnb2FsIGlzIHRvCitwcmV2ZW50IHBlb3BsZSBmcm9tIGdldHRpbmcgaWxsIGFuZCB0byB0ZWFjaCB0aGVtIGhvdyB0byBncm93IGhlYWx0aHkgZm9vZC4KKworTW9zdCBvZiB0aGUgb3JwaGFucyBhcmUgbGl2aW5nIGluIGFuIGV4dGVuZGVkIGZhbWlseS4gIEFuIHVuY2xlIG9yIG9sZGVyCitzaXN0ZXIgaXMgdGFraW5nIGNhcmUgb2YgdGhlbS4gIEJlY2F1c2UgdGhlc2UgZmFtaWxpZXMgYXJlIGJpZyBhbmQgdGhlIGluY29tZQorKGlmIGFueSkgaXMgbG93LCBhIGNoaWxkIGlzIGx1Y2t5IGlmIGl0IGdldHMgaGVhbHRoeSBmb29kLiAgQ2xvdGhlcywgbWVkaWNhbAorY2FyZSBhbmQgc2Nob29saW5nIGlzIGJleW9uZCBpdHMgcmVhY2guICBUbyBoZWxwIHRoZXNlIG5lZWR5IGNoaWxkcmVuLCBhCitzcG9uc29yc2hpcCBwcm9ncmFtIHdhcyBwdXQgaW50byBwbGFjZS4gIEEgY2hpbGQgY2FuIGJlIGZpbmFuY2lhbGx5IGFkb3B0ZWQuCitGb3IgYSBmZXcgZG9sbGFycyBhIG1vbnRoIEtDQyBzZWVzIHRvIGl0IHRoYXQgdGhlIGNoaWxkIGdldHMgaW5kaXNwZW5zYWJsZQoraXRlbXMsIGlzIGhlYWx0aHksIGdvZXMgdG8gc2Nob29sIGFuZCBLQ0MgdGFrZXMgY2FyZSBvZiBhbnl0aGluZyBlbHNlIHRoYXQKK25lZWRzIHRvIGJlIGRvbmUgZm9yIHRoZSBjaGlsZCBhbmQgdGhlIGZhbWlseSB0aGF0IHN1cHBvcnRzIGl0LgorCitCZXNpZGVzIGhlbHBpbmcgdGhlIGNoaWxkIGRpcmVjdGx5LCB0aGUgZW52aXJvbm1lbnQgd2hlcmUgdGhlIGNoaWxkIGdyb3dzIHVwCituZWVkcyB0byBiZSBpbXByb3ZlZC4gIEtDQyBoZWxwcyBzY2hvb2xzIHRvIGltcHJvdmUgdGhlaXIgdGVhY2hpbmcgbWV0aG9kcy4KK1RoZXJlIGlzIGEgZGVtb25zdHJhdGlvbiBzY2hvb2wgYXQgdGhlIGNlbnRyZSBhbmQgdGVhY2hlciB0cmFpbmluZ3MgYXJlIGdpdmVuLgorSGVhbHRoIHdvcmtlcnMgYXJlIGJlaW5nIHRyYWluZWQsIGh5Z2llbmUgZWR1Y2F0aW9uIGlzIGNhcnJpZWQgb3V0IGFuZAoraG91c2Vob2xkcyBhcmUgc3RpbXVsYXRlZCB0byBidWlsZCBhIHByb3BlciBsYXRyaW5lLiAgSSBoZWxwZWQgc2V0dGluZyB1cCBhCitwcm9kdWN0aW9uIHNpdGUgZm9yIGNlbWVudCBzbGFicy4gIFRoZXNlIGFyZSB1c2VkIHRvIGJ1aWxkIGEgZ29vZCBsYXRyaW5lLgorVGhleSBhcmUgc29sZCBiZWxvdyBjb3N0IHByaWNlLgorCitUaGVyZSBpcyBhIHNtYWxsIGNsaW5pYyBhdCB0aGUgcHJvamVjdCwgd2hpY2ggcHJvdmlkZXMgY2hpbGRyZW4gYW5kIHRoZWlyCitmYW1pbHkgd2l0aCBtZWRpY2FsIGhlbHAuICBXaGVuIG5lZWRlZCwgdHJhbnNwb3J0IHRvIGEgaG9zcGl0YWwgaXMgb2ZmZXJlZC4KK0ltbXVuaXphdGlvbiBwcm9ncmFtcyBhcmUgY2FycmllZCBvdXQgYW5kIGhlbHAgaXMgcHJvdmlkZWQgd2hlbiBhbiBlcGlkZW1pYyBpcworYnJlYWtpbmcgb3V0IChtZWFzbGVzIGFuZCBjaG9sZXJhIGhhdmUgYmVlbiBhIHByb2JsZW0pLgorCitTdW1tZXIgMTk5NCB0byBzdW1tZXIgMTk5NSBJIHNwZW50IGEgd2hvbGUgeWVhciBhdCB0aGUgY2VudHJlLCB3b3JraW5nIGFzIGEKK3ZvbHVudGVlci4gIEkgaGF2ZSBoZWxwZWQgdG8gZXhwYW5kIHRoZSBjZW50cmUgYW5kIHdvcmtlZCBpbiB0aGUgYXJlYSBvZiB3YXRlcgorYW5kIHNhbml0YXRpb24uICBJIGxlYXJuZWQgdGhhdCB0aGUgaGVscCB0aGF0IHRoZSBLQ0MgcHJvdmlkZXMgcmVhbGx5IGhlbHBzLgorTm93IHRoYXQgSSdtIGJhY2sgaW4gSG9sbGFuZCwgSSB3b3VsZCBsaWtlIHRvIGNvbnRpbnVlIHN1cHBvcnRpbmcgS0NDLiAgVG8gZG8KK3RoaXMgSSdtIHJhaXNpbmcgZnVuZHMgYW5kIG9yZ2FuaXppbmcgdGhlIHNwb25zb3JzaGlwIHByb2dyYW0uICBQbGVhc2UKK2NvbnNpZGVyIG9uZSBvZiB0aGVzZSBwb3NzaWJpbGl0aWVzOgorCisxLiAgU3BvbnNvciBhIGNoaWxkIGluIHByaW1hcnkgc2Nob29sOiAxNyBldXJvIGEgbW9udGggKG9yIG1vcmUpLgorMi4gIFNwb25zb3IgYSBjaGlsZCBpbiBzZWNvbmRhcnkgc2Nob29sOiAyNSBldXJvIGEgbW9udGggKG9yIG1vcmUpLgorMy4gIFNwb25zb3IgdGhlIGNsaW5pYzogQW55IGFtb3VudCBhIG1vbnRoIG9yIHF1YXJ0ZXIKKzQuICBBIG9uZS10aW1lIGRvbmF0aW9uCisKK0NvbXBhcmVkIHdpdGggb3RoZXIgb3JnYW5pemF0aW9ucyB0aGF0IGRvIGNoaWxkIHNwb25zb3JzaGlwIHRoZSBhbW91bnRzIGFyZQordmVyeSBsb3cuICBUaGlzIGlzIGJlY2F1c2UgdGhlIG1vbmV5IGdvZXMgZGlyZWN0bHkgdG8gdGhlIGNlbnRyZS4gIExlc3MgdGhhbgorNSUgaXMgdXNlZCBmb3IgYWRtaW5pc3RyYXRpb24uICBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgdGhpcyBpcyBhIHNtYWxsCitvcmdhbml6YXRpb24gdGhhdCB3b3JrcyB3aXRoIHZvbHVudGVlcnMuICBJZiB5b3Ugd291bGQgbGlrZSB0byBzcG9uc29yIGEKK2NoaWxkLCB5b3Ugc2hvdWxkIGhhdmUgdGhlIGludGVudGlvbiB0byBkbyB0aGlzIGZvciBhdCBsZWFzdCBvbmUgeWVhci4KKworSG93IGRvIHlvdSBrbm93IHRoYXQgdGhlIG1vbmV5IHdpbGwgYmUgc3BlbnQgcmlnaHQ/ICBGaXJzdCBvZiBhbGwgeW91IGhhdmUgbXkKK3BlcnNvbmFsIGd1YXJhbnRlZSBhcyB0aGUgYXV0aG9yIG9mIFZpbS4gIEkgdHJ1c3QgdGhlIHBlb3BsZSB0aGF0IGFyZSB3b3JraW5nCithdCB0aGUgY2VudHJlLCBJIGtub3cgdGhlbSBwZXJzb25hbGx5LiAgRnVydGhlciBtb3JlLCB0aGUgY2VudHJlIGlzCitjby1zcG9uc29yZWQgYW5kIGluc3BlY3RlZCBieSBXb3JsZCBWaXNpb24sIFNhdmUgdGhlIENoaWxkcmVuIEZ1bmQgYW5kCitJbnRlcm5hdGlvbmFsIENoaWxkIENhcmUgRnVuZC4gIFRoZSBjZW50cmUgaXMgdmlzaXRlZCBhYm91dCBvbmNlIGEgeWVhciB0bworY2hlY2sgdGhlIHByb2dyZXNzIChhdCBvdXIgb3duIGNvc3QpLiAgSSBoYXZlIHZpc2l0ZWQgdGhlIGNlbnRyZSBteXNlbGYgaW4KKzE5OTYsIDE5OTgsIDIwMDAsIDIwMDEgYW5kIDIwMDMuICBUaGUgdmlzaXQgcmVwb3J0cyBhcmUgb24gdGhlIElDQ0Ygd2ViIHNpdGUuCisKK0lmIHlvdSBoYXZlIGFueSBmdXJ0aGVyIHF1ZXN0aW9ucywgc2VuZCBtZSBlLW1haWw6IDxCcmFtQHZpbS5vcmc+LgorCitUaGUgYWRkcmVzcyBvZiB0aGUgY2VudHJlIGlzOgorCQkJS2liYWFsZSBDaGlsZHJlbidzIENlbnRyZQorCQkJcC5vLiBib3ggMTY1OAorCQkJTWFzYWthLCBVZ2FuZGEsIEVhc3QgQWZyaWNhCisKK1NlbmRpbmcgbW9uZXk6CisKK0NoZWNrIHRoZSBJQ0NGIHdlYiBzaXRlIGZvciB0aGUgbGF0ZXN0IGluZm9ybWF0aW9uISAgU2VlIHxpY2NmfCBmb3IgdGhlIFVSTC4KKworCitVU0EgYW5kIENhbmFkYTogQ29udGFjdCBLaWJhYWxlIENoaWxkcmVuJ3MgRnVuZCAoS0NGKSBpbiBTdXJyZXksIENhbmFkYS4gIFRoZXkKKwkJdGFrZSBjYXJlIG9mIHRoZSBDYW5hZGlhbiBzcG9uc29ycyBmb3IgdGhlIGNoaWxkcmVuIGluCisJCUtpYmFhbGUuICBZb3UgY2FuIHNlbmQgdGhlbSBhIG9uZSB0aW1lIGRvbmF0aW9uIGRpcmVjdGx5LgorCQlQbGVhc2Ugc2VuZCBtZSBhIG5vdGUgc28gdGhhdCBrbm93IHdoYXQgaGFzIGJlZW4gZG9uYXRlZAorCQliZWNhdXNlIG9mIFZpbS4gIEFzayBLQ0YgZm9yIGluZm9ybWF0aW9uIGFib3V0IHNwb25zb3JzaGlwLgorCQkJS2liYWFsZSBDaGlsZHJlbidzIEZ1bmQgYy9vIFBhY2lmaWMgQWNhZGVteQorCQkJMTAyMzgtMTY4IFN0cmVldAorCQkJU3VycmV5LCBCLkMuIFY0TiAxWjQKKwkJCUNhbmFkYQorCQkJUGhvbmU6IDYwNC01ODEtNTM1MworCQlJZiB5b3UgbWFrZSBhIGRvbmF0aW9uIHRvIEtpYmFhbGUgQ2hpbGRyZW4ncyBGdW5kIChLQ0YpIHlvdQorCQl3aWxsIHJlY2VpdmUgYSB0YXggcmVjZWlwdCB3aGljaCBjYW4gYmUgc3VibWl0dGVkIHdpdGggeW91cgorCQl0YXggcmV0dXJuICh1bmRlciB0aGUgRnJlZSBUcmFkZSBBZ3JlZW1lbnQgdGF4IHJlY2VpcHRzIGlzc3VlZAorCQlieSBhbiBvcmdhbml6YXRpb24gcmVnaXN0ZXJlZCBpbiBDYW5hZGEgYXJlIGZ1bGx5IGFjY2VwdGVkIGJ5CisJCXRoZSBJUlMgaW4gdGhlIFVTQSwgd2l0aCBhIGZldyBjb25kaXRpb25zKS4KKworSG9sbGFuZDoJVHJhbnNmZXIgdG8gdGhlIGFjY291bnQgb2YgIlN0aWNodGluZyBJQ0NGIEhvbGxhbmQiIGluIFZlbmxvLgorCQlUaGlzIHdpbGwgYWxsb3cgZm9yIHRheCBkZWR1Y3Rpb24gKGlmIHlvdSBsaXZlIGluIEhvbGxhbmQpIQorCQkJUG9zdGJhbmssIG5yLiA0NTQ4Nzc0CisKK0dlcm1hbnk6CUl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgZG9uYXRpb25zIHRoYXQgYWxsb3cgZm9yIGEgdGF4IHJldHVybi4KKwkJQ2hlY2sgdGhlIElDQ0Ygd2ViIHNpdGUgZm9yIHRoZSBsYXRlc3QgaW5mb3JtYXRpb246CisJCQlodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy9nZXJtYW55Lmh0bWwKKworV29ybGQ6CQlVc2UgYSBwb3N0YWwgbW9uZXkgb3JkZXIuICBUaGF0IHNob3VsZCBiZSBwb3NzaWJsZSBmcm9tIGFueQorCQljb3VudHJ5LCBtb3N0bHkgZnJvbSB0aGUgcG9zdCBvZmZpY2UuICBVc2UgdGhpcyBuYW1lICh3aGljaCBpcworCQlpbiBteSBwYXNzcG9ydCk6ICJBYnJhaGFtIE1vb2xlbmFhciIuICBVc2UgRXVybyBmb3IgdGhlCisJCWN1cnJlbmN5IGlmIHBvc3NpYmxlLgorCitFdXJvcGU6CQlVc2UgYSBiYW5rIHRyYW5zZmVyIGlmIHBvc3NpYmxlLiAgWW91ciBiYW5rIHNob3VsZCBoYXZlIGEgZm9ybQorCQl0aGF0IHlvdSBjYW4gdXNlIGZvciB0aGlzLiAgU2VlICJPdGhlcnMiIGJlbG93IGZvciB0aGUgc3dpZnQKKwkJY29kZSBhbmQgSUJBTiBudW1iZXIuCisJCUFueSBvdGhlciBtZXRob2Qgc2hvdWxkIHdvcmsuICBBc2sgZm9yIGluZm9ybWF0aW9uIGFib3V0CisJCXNwb25zb3JzaGlwLgorCitDcmVkaXQgQ2FyZDoJWW91IGNhbiB1c2UgUGF5UGFsIHRvIHNlbmQgbW9uZXkgd2l0aCBhIENyZWRpdCBjYXJkLiAgVGhpcyBpcworCQl0aGUgbW9zdCB3aWRlbHkgdXNlZCBJbnRlcm5ldCBiYXNlZCBwYXltZW50IHN5c3RlbS4gIEl0J3MKKwkJcmVhbGx5IHNpbXBsZSB0byB1c2UuICBVc2UgdGhpcyBsaW5rIHRvIGZpbmQgbW9yZSBpbmZvOgorCQkJaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9hZmZpbC9wYWw9QnJhbSU0MG1vb2xlbmFhci5uZXQKKwkJVGhlIGUtbWFpbCBhZGRyZXNzIGZvciBzZW5kaW5nIHRoZSBtb25leSB0byBpczoKKwkJCUJyYW1AaWNjZi1ob2xsYW5kLm9yZworCQlGb3IgYW1vdW50cyBhYm92ZSAkMTUwIHNlbmRpbmcgYSBjaGVxdWUgaXMgcHJlZmVycmVkLgorCitPdGhlcnM6CQlUcmFuc2ZlciB0byBvbmUgb2YgdGhlc2UgYWNjb3VudHMgaWYgcG9zc2libGU6CisJCSAgICBQb3N0YmFuaywgYWNjb3VudCA0NTQ4Nzc0CisJCQkJU3dpZnQgY29kZTogSU5HQiBOTCAyQQorCQkJCUlCQU46IE5MNDcgUFNUQiAwMDA0IDU0ODcgNzQKKwkJCXVuZGVyIHRoZSBuYW1lICJzdGljaHRpbmcgSUNDRiBIb2xsYW5kIiwgVmVubG8KKwkJICAgIElmIHRoYXQgZG9lc24ndCB3b3JrOgorCQkgICAgUmFib2JhbmsgVmVubG8sIGFjY291bnQgMzc2NS4wNS4xMTcKKwkJCQlTd2lmdCBjb2RlOiBSQUJPIE5MIDJVCisJCQl1bmRlciB0aGUgbmFtZSAiQnJhbSBNb29sZW5hYXIiLCBWZW5sbworCQlPdGhlcndpc2UsIHNlbmQgYSBjaGVxdWUgaW4gZXVybyBvciBVUyBkb2xsYXJzIHRvIHRoZSBhZGRyZXNzCisJCWJlbG93LiAgTWluaW1hbCBhbW91bnQ6ICQ3MCAobXkgYmFuayBkb2VzIG5vdCBhY2NlcHQgc21hbGxlcgorCQlhbW91bnRzIGZvciBmb3JlaWduIGNoZXF1ZXMsIHNvcnJ5KQorCitBZGRyZXNzIHRvIHNlbmQgY2hlcXVlcyB0bzoKKwkJCXN0aWNodGluZyBJQ0NGIEhvbGxhbmQKKwkJCUJyYW0gTW9vbGVuYWFyCisJCQlDbGVtYXRpc3N0cmFhdCAzMAorCQkJNTkyNSBCRSAgVmVubG8KKwkJCVRoZSBOZXRoZXJsYW5kcworCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdW5kby50eHQgYi9ydW50aW1lL2RvYy91bmRvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzNmYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdW5kby50eHQKQEAgLTAsMCArMSwxMTcgQEAKKyp1bmRvLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBPY3QgMjEKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitVbmRvIGFuZCByZWRvCQkJCQkJKnVuZG8tcmVkbyoKKworVGhlIGJhc2ljcyBhcmUgZXhwbGFpbmVkIGluIHNlY3Rpb24gfDAyLjV8IG9mIHRoZSB1c2VyIG1hbnVhbC4KKworMS4gVW5kbyBhbmQgcmVkbyBjb21tYW5kcwl8dW5kby1jb21tYW5kc3wKKzIuIFR3byB3YXlzIG9mIHVuZG8JCXx1bmRvLXR3by13YXlzfAorMy4gUmVtYXJrcyBhYm91dCB1bmRvCQl8dW5kby1yZW1hcmtzfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFVuZG8gYW5kIHJlZG8gY29tbWFuZHMJCQkJKnVuZG8tY29tbWFuZHMqCisKKzxVbmRvPgkJb3IJCQkJCSp1bmRvKiAqPFVuZG8+KiAqdSoKK3UJCQlVbmRvIFtjb3VudF0gY2hhbmdlcy4gIHtWaTogb25seSBvbmUgbGV2ZWx9CisKKwkJCQkJCQkqOnUqICo6dW4qICo6dW5kbyoKKzp1W25kb10JCQlVbmRvIG9uZSBjaGFuZ2UuICB7Vmk6IG9ubHkgb25lIGxldmVsfQorCisJCQkJCQkJKkNUUkwtUioKK0NUUkwtUgkJCVJlZG8gW2NvdW50XSBjaGFuZ2VzIHdoaWNoIHdlcmUgdW5kb25lLiAge1ZpOiByZWRyYXcKKwkJCXNjcmVlbn0KKworCQkJCQkJCSo6cmVkKiAqOnJlZG8qICpyZWRvKgorOnJlZFtvXQkJCVJlZG8gb25lIGNoYW5nZSB3aGljaCB3YXMgdW5kb25lLiAge1ZpOiBubyByZWRvfQorCisJCQkJCQkJKlUqCitVCQkJVW5kbyBhbGwgbGF0ZXN0IGNoYW5nZXMgb24gb25lIGxpbmUuICB7Vmk6IHdoaWxlIG5vdAorCQkJbW92ZWQgb2ZmIG9mIGl0fQorCitUaGUgbGFzdCBjaGFuZ2VzIGFyZSByZW1lbWJlcmVkLiAgWW91IGNhbiB1c2UgdGhlIHVuZG8gYW5kIHJlZG8gY29tbWFuZHMgYWJvdmUKK3RvIHJldmVydCB0aGUgdGV4dCB0byBob3cgaXQgd2FzIGJlZm9yZSBlYWNoIGNoYW5nZS4gIFlvdSBjYW4gYWxzbyBhcHBseSB0aGUKK2NoYW5nZXMgYWdhaW4sIGdldHRpbmcgYmFjayB0aGUgdGV4dCBiZWZvcmUgdGhlIHVuZG8uCisKK1RoZSAiVSIgY29tbWFuZCBpcyB0cmVhdGVkIGJ5IHVuZG8vcmVkbyBqdXN0IGxpa2UgYW55IG90aGVyIGNvbW1hbmQuICBUaHVzIGEKKyJ1IiBjb21tYW5kIHVuZG9lcyBhICJVIiBjb21tYW5kIGFuZCBhICdDVFJMLVInIGNvbW1hbmQgcmVkb2VzIGl0IGFnYWluLiAgV2hlbgorbWl4aW5nICJVIiwgInUiIGFuZCAnQ1RSTC1SJyB5b3Ugd2lsbCBub3RpY2UgdGhhdCB0aGUgIlUiIGNvbW1hbmQgd2lsbAorcmVzdG9yZSB0aGUgc2l0dWF0aW9uIG9mIGEgbGluZSB0byBiZWZvcmUgdGhlIHByZXZpb3VzICJVIiBjb21tYW5kLiAgVGhpcyBtYXkKK2JlIGNvbmZ1c2luZy4gIFRyeSBpdCBvdXQgdG8gZ2V0IHVzZWQgdG8gaXQuCitUaGUgIlUiIGNvbW1hbmQgd2lsbCBhbHdheXMgbWFyayB0aGUgYnVmZmVyIGFzIGNoYW5nZWQuICBXaGVuICJVIiBjaGFuZ2VzIHRoZQorYnVmZmVyIGJhY2sgdG8gaG93IGl0IHdhcyB3aXRob3V0IGNoYW5nZXMsIGl0IGlzIHN0aWxsIGNvbnNpZGVyZWQgY2hhbmdlZC4KK1VzZSAidSIgdG8gdW5kbyBjaGFuZ2VzIHVudGlsIHRoZSBidWZmZXIgYmVjb21lcyB1bmNoYW5nZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVHdvIHdheXMgb2YgdW5kbwkJCQkJKnVuZG8tdHdvLXdheXMqCisKK0hvdyB1bmRvIGFuZCByZWRvIGNvbW1hbmRzIHdvcmsgZGVwZW5kcyBvbiB0aGUgJ3UnIGZsYWcgaW4gJ2Nwb3B0aW9ucycuCitUaGVyZSBpcyB0aGUgVmltIHdheSAoJ3UnIGV4Y2x1ZGVkKSBhbmQgdGhlIHZpLWNvbXBhdGlibGUgd2F5ICgndScgaW5jbHVkZWQpLgorSW4gdGhlIFZpbSB3YXksICJ1dSIgdW5kb2VzIHR3byBjaGFuZ2VzLiAgSW4gdGhlIFZpLWNvbXBhdGlibGUgd2F5LCAidXUiIGRvZXMKK25vdGhpbmcgKHVuZG9lcyBhbiB1bmRvKS4KKworJ3UnIGV4Y2x1ZGVkLCB0aGUgVmltIHdheToKK1lvdSBjYW4gZ28gYmFjayBpbiB0aW1lIHdpdGggdGhlIHVuZG8gY29tbWFuZC4gIFlvdSBjYW4gdGhlbiBnbyBmb3J3YXJkIGFnYWluCit3aXRoIHRoZSByZWRvIGNvbW1hbmQuICBJZiB5b3UgbWFrZSBhIG5ldyBjaGFuZ2UgYWZ0ZXIgdGhlIHVuZG8gY29tbWFuZCwKK3RoZSByZWRvIHdpbGwgbm90IGJlIHBvc3NpYmxlIGFueW1vcmUuCisKKyd1JyBpbmNsdWRlZCwgdGhlIFZpLWNvbXBhdGlibGUgd2F5OgorVGhlIHVuZG8gY29tbWFuZCB1bmRvZXMgdGhlIHByZXZpb3VzIGNoYW5nZSwgYW5kIGFsc28gdGhlIHByZXZpb3VzIHVuZG8gY29tbWFuZC4KK1RoZSByZWRvIGNvbW1hbmQgcmVwZWF0cyB0aGUgcHJldmlvdXMgdW5kbyBjb21tYW5kLiAgSXQgZG9lcyBOT1QgcmVwZWF0IGEKK2NoYW5nZSBjb21tYW5kLCB1c2UgIi4iIGZvciB0aGF0LgorCitFeGFtcGxlcwlWaW0gd2F5CQkJVmktY29tcGF0aWJsZSB3YXkJfgorInV1IgkJdHdvIHRpbWVzIHVuZG8JCW5vLW9wCisidSBDVFJMLVIiCW5vLW9wCQkJdHdvIHRpbWVzIHVuZG8KKworUmF0aW9uYWxlOiAgTnZpIHVzZXMgdGhlICIuIiBjb21tYW5kIGluc3RlYWQgb2YgQ1RSTC1SLiAgVW5mb3J0dW5hdGVseSwgdGhpcworCSAgICBpcyBub3QgVmkgY29tcGF0aWJsZS4gIEZvciBleGFtcGxlICJkd2R3dS4iIGluIFZpIGRlbGV0ZXMgdHdvCisJICAgIHdvcmRzLCBpbiBOdmkgaXQgZG9lcyBub3RoaW5nLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFJlbWFya3MgYWJvdXQgdW5kbwkJCQkJKnVuZG8tcmVtYXJrcyoKKworVGhlIG51bWJlciBvZiBjaGFuZ2VzIHRoYXQgYXJlIHJlbWVtYmVyZWQgaXMgc2V0IHdpdGggdGhlICd1bmRvbGV2ZWxzJyBvcHRpb24uCitJZiBpdCBpcyB6ZXJvLCB0aGUgVmktY29tcGF0aWJsZSB3YXkgaXMgYWx3YXlzIHVzZWQuICBJZiBpdCBpcyBuZWdhdGl2ZSBubwordW5kbyBpcyBwb3NzaWJsZS4gIFVzZSB0aGlzIGlmIHlvdSBhcmUgcnVubmluZyBvdXQgb2YgbWVtb3J5LgorCitNYXJrcyBmb3IgdGhlIGJ1ZmZlciAoJ2EgdG8gJ3opIGFyZSBhbHNvIHNhdmVkIGFuZCByZXN0b3JlZCwgdG9nZXRoZXIgd2l0aCB0aGUKK3RleHQuICB7VmkgZG9lcyB0aGlzIGEgbGl0dGxlIGJpdCBkaWZmZXJlbnR9CisKK1doZW4gYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIHVuZG9uZSwgdGhlIGJ1ZmZlciBpcyBub3QgY29uc2lkZXJlZCB0byBiZSBjaGFuZ2VkLgorSXQgaXMgdGhlbiBwb3NzaWJsZSB0byBleGl0IFZpbSB3aXRoICI6cSIgaW5zdGVhZCBvZiAiOnEhIiB7bm90IGluIFZpfS4gIE5vdGUKK3RoYXQgdGhpcyBpcyByZWxhdGl2ZSB0byB0aGUgbGFzdCB3cml0ZSBvZiB0aGUgZmlsZS4gIFR5cGluZyAidSIgYWZ0ZXIgIjp3IgorYWN0dWFsbHkgY2hhbmdlcyB0aGUgYnVmZmVyLCBjb21wYXJlZCB0byB3aGF0IHdhcyB3cml0dGVuLCBzbyB0aGUgYnVmZmVyIGlzCitjb25zaWRlcmVkIGNoYW5nZWQgdGhlbi4KKworV2hlbiBtYW51YWwgfGZvbGRpbmd8IGlzIGJlaW5nIHVzZWQsIHRoZSBmb2xkcyBhcmUgbm90IHNhdmVkIGFuZCByZXN0b3JlZC4KK09ubHkgY2hhbmdlcyBjb21wbGV0ZWx5IHdpdGhpbiBhIGZvbGQgd2lsbCBrZWVwIHRoZSBmb2xkIGFzIGl0IHdhcywgYmVjYXVzZQordGhlIGZpcnN0IGFuZCBsYXN0IGxpbmUgb2YgdGhlIGZvbGQgZG9uJ3QgY2hhbmdlLgorCitUaGUgbnVtYmVyZWQgcmVnaXN0ZXJzIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHVuZG9pbmcgZGVsZXRlcy4gIEVhY2ggdGltZSB5b3UKK2RlbGV0ZSB0ZXh0LCBpdCBpcyBwdXQgaW50byByZWdpc3RlciAiMS4gIFRoZSBjb250ZW50cyBvZiByZWdpc3RlciAiMSBhcmUKK3NoaWZ0ZWQgdG8gIjIsIGV0Yy4gIFRoZSBjb250ZW50cyBvZiByZWdpc3RlciAiOSBhcmUgbG9zdC4gIFlvdSBjYW4gbm93IGdldAorYmFjayB0aGUgbW9zdCByZWNlbnQgZGVsZXRlZCB0ZXh0IHdpdGggdGhlIHB1dCBjb21tYW5kOiAnIjFQJy4gIChhbHNvLCBpZiB0aGUKK2RlbGV0ZWQgdGV4dCB3YXMgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBkZWxldGUgb3IgY29weSBvcGVyYXRpb24sICdQJyBvciAncCcKK2Fsc28gd29ya3MgYXMgdGhpcyBwdXRzIHRoZSBjb250ZW50cyBvZiB0aGUgdW5uYW1lZCByZWdpc3RlcikuICBZb3UgY2FuIGdldAorYmFjayB0aGUgdGV4dCBvZiB0aHJlZSBkZWxldGVzIGFnbyB3aXRoICciM1AnLgorCisJCQkJCQkqcmVkby1yZWdpc3RlcioKK0lmIHlvdSB3YW50IHRvIGdldCBiYWNrIG1vcmUgdGhhbiBvbmUgcGFydCBvZiBkZWxldGVkIHRleHQsIHlvdSBjYW4gdXNlIGEKK3NwZWNpYWwgZmVhdHVyZSBvZiB0aGUgcmVwZWF0IGNvbW1hbmQgIi4iLiAgSXQgd2lsbCBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHRoZQorcmVnaXN0ZXIgdXNlZC4gIFNvIGlmIHlvdSBmaXJzdCBkbyAiIjFQIiwgdGhlIGZvbGxvd2luZyAiLiIgd2lsbCByZXN1bHQgaW4gYQorJyIyUCcuICBSZXBlYXRpbmcgdGhpcyB3aWxsIHJlc3VsdCBpbiBhbGwgbnVtYmVyZWQgcmVnaXN0ZXJzIGJlaW5nIGluc2VydGVkLgorCitFeGFtcGxlOglJZiB5b3UgZGVsZXRlZCB0ZXh0IHdpdGggJ2RkLi4uLicgaXQgY2FuIGJlIHJlc3RvcmVkIHdpdGgKKwkJJyIxUC4uLi4nLgorCitJZiB5b3UgZG9uJ3Qga25vdyBpbiB3aGljaCByZWdpc3RlciB0aGUgZGVsZXRlZCB0ZXh0IGlzLCB5b3UgY2FuIHVzZSB0aGUKKzpkaXNwbGF5IGNvbW1hbmQuICBBbiBhbHRlcm5hdGl2ZSBpcyB0byB0cnkgdGhlIGZpcnN0IHJlZ2lzdGVyIHdpdGggJyIxUCcsIGFuZAoraWYgaXQgaXMgbm90IHdoYXQgeW91IHdhbnQgZG8gJ3UuJy4gIFRoaXMgd2lsbCByZW1vdmUgdGhlIGNvbnRlbnRzIG9mIHRoZQorZmlyc3QgcHV0LCBhbmQgcmVwZWF0IHRoZSBwdXQgY29tbWFuZCBmb3IgdGhlIHNlY29uZCByZWdpc3Rlci4gIFJlcGVhdCB0aGUKKyd1LicgdW50aWwgeW91IGdvdCB3aGF0IHlvdSB3YW50LgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzAxLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8wMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhNjAzYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8wMS50eHQKQEAgLTAsMCArMSwxODAgQEAKKyp1c3JfMDEudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDEKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgIEFib3V0IHRoZSBtYW51YWxzCisKKworVGhpcyBjaGFwdGVyIGludHJvZHVjZXMgdGhlIG1hbnVhbHMgYXZhaWxhYmxlIHdpdGggVmltLiAgUmVhZCB0aGlzIHRvIGtub3cgdGhlCitjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBjb21tYW5kcyBhcmUgZXhwbGFpbmVkLgorCit8MDEuMXwJVHdvIG1hbnVhbHMKK3wwMS4yfAlWaW0gaW5zdGFsbGVkCit8MDEuM3wJVXNpbmcgdGhlIFZpbSB0dXRvcgorfDAxLjR8CUNvcHlyaWdodAorCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8wMi50eHR8ICBUaGUgZmlyc3Qgc3RlcHMgaW4gVmltCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMS4xKglUd28gbWFudWFscworCitUaGUgVmltIGRvY3VtZW50YXRpb24gY29uc2lzdHMgb2YgdHdvIHBhcnRzOgorCisxLiBUaGUgVXNlciBtYW51YWwKKyAgIFRhc2sgb3JpZW50ZWQgZXhwbGFuYXRpb25zLCBmcm9tIHNpbXBsZSB0byBjb21wbGV4LiAgUmVhZHMgZnJvbSBzdGFydCB0bworICAgZW5kIGxpa2UgYSBib29rLgorCisyLiBUaGUgUmVmZXJlbmNlIG1hbnVhbAorICAgUHJlY2lzZSBkZXNjcmlwdGlvbiBvZiBob3cgZXZlcnl0aGluZyBpbiBWaW0gd29ya3MuCisKK1RoZSBub3RhdGlvbiB1c2VkIGluIHRoZXNlIG1hbnVhbHMgaXMgZXhwbGFpbmVkIGhlcmU6IHxub3RhdGlvbnwKKworCitKVU1QSU5HIEFST1VORAorCitUaGUgdGV4dCBjb250YWlucyBoeXBlcmxpbmtzIGJldHdlZW4gdGhlIHR3byBwYXJ0cywgYWxsb3dpbmcgeW91IHRvIHF1aWNrbHkKK2p1bXAgYmV0d2VlbiB0aGUgZGVzY3JpcHRpb24gb2YgYW4gZWRpdGluZyB0YXNrIGFuZCBhIHByZWNpc2UgZXhwbGFuYXRpb24gb2YKK3RoZSBjb21tYW5kcyBhbmQgb3B0aW9ucyB1c2VkIGZvciBpdC4gIFVzZSB0aGVzZSB0d28gY29tbWFuZHM6CisKKwlQcmVzcyAgQ1RSTC1dICB0byBqdW1wIHRvIGEgc3ViamVjdCB1bmRlciB0aGUgY3Vyc29yLgorCVByZXNzICBDVFJMLU8gIHRvIGp1bXAgYmFjayAocmVwZWF0IHRvIGdvIGZ1cnRoZXIgYmFjaykuCisKK01hbnkgbGlua3MgYXJlIGluIHZlcnRpY2FsIGJhcnMsIGxpa2UgdGhpczogfGJhcnN8LiAgQW4gb3B0aW9uIG5hbWUsIGxpa2UKKydudW1iZXInLCBhIGNvbW1hbmQgaW4gZG91YmxlIHF1b3RlcyBsaWtlICI6d3JpdGUiIGFuZCBhbnkgb3RoZXIgd29yZCBjYW4gYWxzbworYmUgdXNlZCBhcyBhIGxpbmsuICBUcnkgaXQgb3V0OiBNb3ZlIHRoZSBjdXJzb3IgdG8gIENUUkwtXSAgYW5kIHByZXNzIENUUkwtXQorb24gaXQuCisKK090aGVyIHN1YmplY3RzIGNhbiBiZSBmb3VuZCB3aXRoIHRoZSAiOmhlbHAiIGNvbW1hbmQsIHNlZSB8aGVscC50eHR8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMS4yKglWaW0gaW5zdGFsbGVkCisKK01vc3Qgb2YgdGhlIG1hbnVhbHMgYXNzdW1lIHRoYXQgVmltIGhhcyBiZWVuIHByb3Blcmx5IGluc3RhbGxlZC4gIElmIHlvdQorZGlkbid0IGRvIHRoYXQgeWV0LCBvciBpZiBWaW0gZG9lc24ndCBydW4gcHJvcGVybHkgKGUuZy4sIGZpbGVzIGNhbid0IGJlIGZvdW5kCitvciBpbiB0aGUgR1VJIHRoZSBtZW51cyBkbyBub3Qgc2hvdyB1cCkgZmlyc3QgcmVhZCB0aGUgY2hhcHRlciBvbgoraW5zdGFsbGF0aW9uOiB8dXNyXzkwLnR4dHwuCisJCQkJCQkJKm5vdC1jb21wYXRpYmxlKgorVGhlIG1hbnVhbHMgb2Z0ZW4gYXNzdW1lIHlvdSBhcmUgdXNpbmcgVmltIHdpdGggVmktY29tcGF0aWJpbGl0eSBzd2l0Y2hlZAorb2ZmLiAgRm9yIG1vc3QgY29tbWFuZHMgdGhpcyBkb2Vzbid0IG1hdHRlciwgYnV0IHNvbWV0aW1lcyBpdCBpcyBpbXBvcnRhbnQsCitlLmcuLCBmb3IgbXVsdGktbGV2ZWwgdW5kby4gIEFuIGVhc3kgd2F5IHRvIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSByaWdodAorc2V0dXAsIGNvcHkgdGhlIGV4YW1wbGUgdmltcmMgZmlsZS4gIEJ5IGRvaW5nIHRoaXMgaW5zaWRlIFZpbSB5b3UgZG9uJ3QgaGF2ZQordG8gY2hlY2sgb3V0IHdoZXJlIGl0IGlzIGxvY2F0ZWQuICBIb3cgdG8gZG8gdGhpcyBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0geW91CithcmUgdXNpbmc6CisKK1VuaXg6ID4KKwk6IWNwIC1pICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltIH4vLnZpbXJjCitNUy1ET1MsIE1TLVdpbmRvd3MsIE9TLzI6ID4KKwk6IWNvcHkgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0gJFZJTS9fdmltcmMKK0FtaWdhOiA+CisJOiFjb3B5ICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltICRWSU0vLnZpbXJjCisKK0lmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzIHlvdSBwcm9iYWJseSB3YW50IHRvIGtlZXAgaXQuCisKK0lmIHlvdSBzdGFydCBWaW0gbm93LCB0aGUgJ2NvbXBhdGlibGUnIG9wdGlvbiBzaG91bGQgYmUgb2ZmLiAgWW91IGNhbiBjaGVjayBpdAord2l0aCB0aGlzIGNvbW1hbmQ6ID4KKworCTpzZXQgY29tcGF0aWJsZT8KKworSWYgaXQgcmVzcG9uZHMgd2l0aCAibm9jb21wYXRpYmxlIiB5b3UgYXJlIGRvaW5nIHdlbGwuICBJZiB0aGUgcmVzcG9uc2UgaXMKKyJjb21wYXRpYmxlIiB5b3UgYXJlIGluIHRyb3VibGUuICBZb3Ugd2lsbCBoYXZlIHRvIGZpbmQgb3V0IHdoeSB0aGUgb3B0aW9uIGlzCitzdGlsbCBzZXQuICBQZXJoYXBzIHRoZSBmaWxlIHlvdSB3cm90ZSBhYm92ZSBpcyBub3QgZm91bmQuICBVc2UgdGhpcyBjb21tYW5kCit0byBmaW5kIG91dDogPgorCisJOnNjcmlwdG5hbWVzCisKK0lmIHlvdXIgZmlsZSBpcyBub3QgaW4gdGhlIGxpc3QsIGNoZWNrIGl0cyBsb2NhdGlvbiBhbmQgbmFtZS4gIElmIGl0IGlzIGluIHRoZQorbGlzdCwgdGhlcmUgbXVzdCBiZSBzb21lIG90aGVyIHBsYWNlIHdoZXJlIHRoZSAnY29tcGF0aWJsZScgb3B0aW9uIGlzIHN3aXRjaGVkCitiYWNrIG9uLgorCitGb3IgbW9yZSBpbmZvIHNlZSB8dmltcmN8IGFuZCB8Y29tcGF0aWJsZS1kZWZhdWx0fC4KKworCU5vdGU6CisJVGhpcyBtYW51YWwgaXMgYWJvdXQgdXNpbmcgVmltIGluIHRoZSBub3JtYWwgd2F5LiAgVGhlcmUgaXMgYW4KKwlhbHRlcm5hdGl2ZSBjYWxsZWQgImV2aW0iIChlYXN5IFZpbSkuICBUaGlzIGlzIHN0aWxsIFZpbSwgYnV0IHVzZWQgaW4KKwlhIHdheSB0aGF0IHJlc2VtYmxlcyBhIGNsaWNrLWFuZC10eXBlIGVkaXRvciBsaWtlIE5vdGVwYWQuICBJdCBhbHdheXMKKwlzdGF5cyBpbiBJbnNlcnQgbW9kZSwgdGh1cyBpdCBmZWVscyB2ZXJ5IGRpZmZlcmVudC4gIEl0IGlzIG5vdAorCWV4cGxhaW5lZCBpbiB0aGUgdXNlciBtYW51YWwsIHNpbmNlIGl0IHNob3VsZCBiZSBtb3N0bHkgc2VsZgorCWV4cGxhbmF0b3J5LiAgU2VlIHxldmltLWtleXN8IGZvciBkZXRhaWxzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMS4zKglVc2luZyB0aGUgVmltIHR1dG9yCQkJCSp0dXRvciogKnZpbXR1dG9yKgorCitJbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIHRleHQgKGJvcmluZyEpIHlvdSBjYW4gdXNlIHRoZSB2aW10dXRvciB0byBsZWFybiB5b3VyCitmaXJzdCBWaW0gY29tbWFuZHMuICBUaGlzIGlzIGEgMzAgbWludXRlIHR1dG9yaWFsIHRoYXQgdGVhY2hlcyB0aGUgbW9zdCBiYXNpYworVmltIGZ1bmN0aW9uYWxpdHkgaGFuZHMtb24uCisKK09uIFVuaXggYW5kIE1TLVdpbmRvd3MsIGlmIFZpbSBoYXMgYmVlbiBwcm9wZXJseSBpbnN0YWxsZWQsIHlvdSBjYW4gc3RhcnQgaXQKK2Zyb20gdGhlIHNoZWxsOgorPgorCXZpbXR1dG9yCisKK1RoaXMgd2lsbCBtYWtlIGEgY29weSBvZiB0aGUgdHV0b3IgZmlsZSwgc28gdGhhdCB5b3UgY2FuIGVkaXQgaXQgd2l0aG91dAordGhlIHJpc2sgb2YgZGFtYWdpbmcgdGhlIG9yaWdpbmFsLgorICAgVGhlcmUgYXJlIGEgZmV3IHRyYW5zbGF0ZWQgdmVyc2lvbnMgb2YgdGhlIHR1dG9yLiAgVG8gZmluZCBvdXQgaWYgeW91cnMgaXMKK2F2YWlsYWJsZSwgdXNlIHRoZSB0d28tbGV0dGVyIGxhbmd1YWdlIGNvZGUuICBGb3IgRnJlbmNoOiA+CisKKwl2aW10dXRvciBmcgorCitGb3IgT3BlblZNUywgaWYgVmltIGhhcyBiZWVuIHByb3Blcmx5IGluc3RhbGxlZCwgeW91IGNhbiBzdGFydCB2aW10dXRvciBmcm9tIGEKK1ZNUyBwcm9tcHQgd2l0aDogPgorCisJQFZJTTp2aW10dXRvcgorCitPcHRpb25hbGx5IGFkZCB0aGUgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlIGFzIGFib3ZlLgorCisKK09uIG90aGVyIHN5c3RlbXMsIHlvdSBoYXZlIHRvIGRvIGEgbGl0dGxlIHdvcms6CisKKzEuIENvcHkgdGhlIHR1dG9yIGZpbGUuICBZb3UgY2FuIGRvIHRoaXMgd2l0aCBWaW0gKGl0IGtub3dzIHdoZXJlIHRvIGZpbmQgaXQpOgorPgorCXZpbSAtdSBOT05FIC1jICdlICRWSU1SVU5USU1FL3R1dG9yL3R1dG9yJyAtYyAndyEgVFVUT1JDT1BZJyAtYyAncScKKzwKKyAgIFRoaXMgd2lsbCB3cml0ZSB0aGUgZmlsZSAiVFVUT1JDT1BZIiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBUbyB1c2UgYQordHJhbnNsYXRlZCB2ZXJzaW9uIG9mIHRoZSB0dXRvciwgYXBwZW5kIHRoZSB0d28tbGV0dGVyIGxhbmd1YWdlIGNvZGUgdG8gdGhlCitmaWxlbmFtZS4gIEZvciBGcmVuY2g6Cis+CisJdmltIC11IE5PTkUgLWMgJ2UgJFZJTVJVTlRJTUUvdHV0b3IvdHV0b3IuZnInIC1jICd3ISBUVVRPUkNPUFknIC1jICdxJworPAorMi4gRWRpdCB0aGUgY29waWVkIGZpbGUgd2l0aCBWaW06Cis+CisJdmltIC11IE5PTkUgLWMgInNldCBub2NwIiBUVVRPUkNPUFkKKzwKKyAgIFRoZSBleHRyYSBhcmd1bWVudHMgbWFrZSBzdXJlIFZpbSBpcyBzdGFydGVkIGluIGEgZ29vZCBtb29kLgorCiszLiBEZWxldGUgdGhlIGNvcGllZCBmaWxlIHdoZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIGl0OgorPgorCWRlbCBUVVRPUkNPUFkKKzwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAxLjQqCUNvcHlyaWdodAkJCQkJKm1hbnVhbC1jb3B5cmlnaHQqCisKK1RoZSBWaW0gdXNlciBtYW51YWwgYW5kIHJlZmVyZW5jZSBtYW51YWwgYXJlIENvcHlyaWdodCAoYykgMTk4OC0yMDAzIGJ5IEJyYW0KK01vb2xlbmFhci4gVGhpcyBtYXRlcmlhbCBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgc2V0IGZvcnRoIGluIHRoZSBPcGVuIFB1YmxpY2F0aW9uIExpY2Vuc2UsIHYxLjAgb3IgbGF0ZXIuICBUaGUKK2xhdGVzdCB2ZXJzaW9uIGlzIHByZXNlbnRseSBhdmFpbGFibGUgYXQ6CisJICAgICBodHRwOi8vd3d3Lm9wZW5jb250ZW50Lm9yZy9vcGwuc2h0bWwKKworUGVvcGxlIHdobyBjb250cmlidXRlIHRvIHRoZSBtYW51YWxzIG11c3QgYWdyZWUgd2l0aCB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UuCisJCQkJCQkJKmZyb21ib29rKgorUGFydHMgb2YgdGhlIHVzZXIgbWFudWFsIGNvbWUgZnJvbSB0aGUgYm9vayAiVmkgSU1wcm92ZWQgLSBWaW0iIGJ5IFN0ZXZlCitPdWFsbGluZSAocHVibGlzaGVkIGJ5IE5ldyBSaWRlcnMgUHVibGlzaGluZywgSVNCTjogMDczNTcxMDAxNSkuICBUaGUgT3BlbgorUHVibGljYXRpb24gTGljZW5zZSBhcHBsaWVzIHRvIHRoaXMgYm9vay4gIE9ubHkgc2VsZWN0ZWQgcGFydHMgYXJlIGluY2x1ZGVkCithbmQgdGhlc2UgaGF2ZSBiZWVuIG1vZGlmaWVkIChlLmcuLCBieSByZW1vdmluZyB0aGUgcGljdHVyZXMsIHVwZGF0aW5nIHRoZQordGV4dCBmb3IgVmltIDYuMCBhbmQgZml4aW5nIG1pc3Rha2VzKS4gIFRoZSBvbWlzc2lvbiBvZiB0aGUgfGZyb21ib29rfCB0YWcKK2RvZXMgbm90IG1lYW4gdGhhdCB0aGUgdGV4dCBkb2VzIG5vdCBjb21lIGZyb20gdGhlIGJvb2suCisKK01hbnkgdGhhbmtzIHRvIFN0ZXZlIE91YWxsaW5lIGFuZCBOZXcgUmlkZXJzIGZvciBjcmVhdGluZyB0aGlzIGJvb2sgYW5kCitwdWJsaXNoaW5nIGl0IHVuZGVyIHRoZSBPUEwhICBJdCBoYXMgYmVlbiBhIGdyZWF0IGhlbHAgd2hpbGUgd3JpdGluZyB0aGUgdXNlcgorbWFudWFsLiAgTm90IG9ubHkgYnkgcHJvdmlkaW5nIGxpdGVyYWwgdGV4dCwgYnV0IGFsc28gYnkgc2V0dGluZyB0aGUgdG9uZSBhbmQKK3N0eWxlLgorCitJZiB5b3UgbWFrZSBtb25leSB0aHJvdWdoIHNlbGxpbmcgdGhlIG1hbnVhbHMsIHlvdSBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0bworZG9uYXRlIHBhcnQgb2YgdGhlIHByb2ZpdCB0byBoZWxwIEFJRFMgdmljdGltcyBpbiBVZ2FuZGEuICBTZWUgfGljY2Z8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzAyLnR4dHwgIFRoZSBmaXJzdCBzdGVwcyBpbiBWaW0KKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMDIudHh0IGIvcnVudGltZS9kb2MvdXNyXzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDMyMDZiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzAyLnR4dApAQCAtMCwwICsxLDUwNCBAQAorKnVzcl8wMi50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1biAwOAorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgIFRoZSBmaXJzdCBzdGVwcyBpbiBWaW0KKworCitUaGlzIGNoYXB0ZXIgcHJvdmlkZXMganVzdCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZWRpdCBhIGZpbGUgd2l0aCBWaW0uICBOb3QKK3dlbGwgb3IgZmFzdCwgYnV0IHlvdSBjYW4gZWRpdC4gIFRha2Ugc29tZSB0aW1lIHRvIHByYWN0aWNlIHdpdGggdGhlc2UKK2NvbW1hbmRzLCB0aGV5IGZvcm0gdGhlIGJhc2UgZm9yIHdoYXQgZm9sbG93cy4KKworfDAyLjF8CVJ1bm5pbmcgVmltIGZvciB0aGUgRmlyc3QgVGltZQorfDAyLjJ8CUluc2VydGluZyB0ZXh0Cit8MDIuM3wJTW92aW5nIGFyb3VuZAorfDAyLjR8CURlbGV0aW5nIGNoYXJhY3RlcnMKK3wwMi41fAlVbmRvIGFuZCBSZWRvCit8MDIuNnwJT3RoZXIgZWRpdGluZyBjb21tYW5kcworfDAyLjd8CUdldHRpbmcgb3V0Cit8MDIuOHwJRmluZGluZyBoZWxwCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzAzLnR4dHwgIE1vdmluZyBhcm91bmQKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzAxLnR4dHwgIEFib3V0IHRoZSBtYW51YWxzCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMi4xKglSdW5uaW5nIFZpbSBmb3IgdGhlIEZpcnN0IFRpbWUKKworVG8gc3RhcnQgVmltLCBlbnRlciB0aGlzIGNvbW1hbmQ6ID4KKworCWd2aW0gZmlsZS50eHQKKworSW4gVU5JWCB5b3UgY2FuIHR5cGUgdGhpcyBhdCBhbnkgY29tbWFuZCBwcm9tcHQuICBJZiB5b3UgYXJlIHJ1bm5pbmcgTWljcm9zb2Z0CitXaW5kb3dzLCBvcGVuIGFuIE1TLURPUyBwcm9tcHQgd2luZG93IGFuZCBlbnRlciB0aGUgY29tbWFuZC4KKyAgIEluIGVpdGhlciBjYXNlLCBWaW0gc3RhcnRzIGVkaXRpbmcgYSBmaWxlIGNhbGxlZCBmaWxlLnR4dC4gIEJlY2F1c2UgdGhpcworaXMgYSBuZXcgZmlsZSwgeW91IGdldCBhIGJsYW5rIHdpbmRvdy4gVGhpcyBpcyB3aGF0IHlvdXIgc2NyZWVuIHdpbGwgbG9vaworbGlrZToKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCMJCQkJCXwKKwl8fgkJCQkJfAorCXx+CQkJCQl8CisJfH4JCQkJCXwKKwl8fgkJCQkJfAorCXwiZmlsZS50eHQiIFtOZXcgZmlsZV0JCQl8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJKCcjIiBpcyB0aGUgY3Vyc29yIHBvc2l0aW9uLikKKworVGhlIHRpbGRlICh+KSBsaW5lcyBpbmRpY2F0ZSBsaW5lcyBub3QgaW4gdGhlIGZpbGUuICBJbiBvdGhlciB3b3Jkcywgd2hlbiBWaW0KK3J1bnMgb3V0IG9mIGZpbGUgdG8gZGlzcGxheSwgaXQgZGlzcGxheXMgdGlsZGUgbGluZXMuICBBdCB0aGUgYm90dG9tIG9mIHRoZQorc2NyZWVuLCBhIG1lc3NhZ2UgbGluZSBpbmRpY2F0ZXMgdGhlIGZpbGUgaXMgbmFtZWQgZmlsZS50eHQgYW5kIHNob3dzIHRoYXQgeW91CithcmUgY3JlYXRpbmcgYSBuZXcgZmlsZS4gIFRoZSBtZXNzYWdlIGluZm9ybWF0aW9uIGlzIHRlbXBvcmFyeSBhbmQgb3RoZXIKK2luZm9ybWF0aW9uIG92ZXJ3cml0ZXMgaXQuCisKKworVEhFIFZJTSBDT01NQU5ECisKK1RoZSBndmltIGNvbW1hbmQgY2F1c2VzIHRoZSBlZGl0b3IgdG8gY3JlYXRlIGEgbmV3IHdpbmRvdyBmb3IgZWRpdGluZy4gIElmIHlvdQordXNlIHRoaXMgY29tbWFuZDogPgorCisJdmltIGZpbGUudHh0CisKK3RoZSBlZGl0aW5nIG9jY3VycyBpbnNpZGUgeW91ciBjb21tYW5kIHdpbmRvdy4gIEluIG90aGVyIHdvcmRzLCBpZiB5b3UgYXJlCitydW5uaW5nIGluc2lkZSBhbiB4dGVybSwgdGhlIGVkaXRvciB1c2VzIHlvdXIgeHRlcm0gd2luZG93LiAgSWYgeW91IGFyZSB1c2luZworYW4gTVMtRE9TIGNvbW1hbmQgcHJvbXB0IHdpbmRvdyB1bmRlciBNaWNyb3NvZnQgV2luZG93cywgdGhlIGVkaXRpbmcgb2NjdXJzCitpbnNpZGUgdGhpcyB3aW5kb3cuICBUaGUgdGV4dCBpbiB0aGUgd2luZG93IHdpbGwgbG9vayB0aGUgc2FtZSBmb3IgYm90aAordmVyc2lvbnMsIGJ1dCB3aXRoIGd2aW0geW91IGhhdmUgZXh0cmEgZmVhdHVyZXMsIGxpa2UgYSBtZW51IGJhci4gIE1vcmUgYWJvdXQKK3RoYXQgbGF0ZXIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAyLjIqCUluc2VydGluZyB0ZXh0CisKK1RoZSBWaW0gZWRpdG9yIGlzIGEgbW9kYWwgZWRpdG9yLiAgVGhhdCBtZWFucyB0aGF0IHRoZSBlZGl0b3IgYmVoYXZlcworZGlmZmVyZW50bHksIGRlcGVuZGluZyBvbiB3aGljaCBtb2RlIHlvdSBhcmUgaW4uICBUaGUgdHdvIGJhc2ljIG1vZGVzIGFyZQorY2FsbGVkIE5vcm1hbCBtb2RlIGFuZCBJbnNlcnQgbW9kZS4gIEluIE5vcm1hbCBtb2RlIHRoZSBjaGFyYWN0ZXJzIHlvdSB0eXBlCithcmUgY29tbWFuZHMuICBJbiBJbnNlcnQgbW9kZSB0aGUgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgYXMgdGV4dC4KKyAgIFNpbmNlIHlvdSBoYXZlIGp1c3Qgc3RhcnRlZCBWaW0gaXQgd2lsbCBiZSBpbiBOb3JtYWwgbW9kZS4gIFRvIHN0YXJ0IEluc2VydAorbW9kZSB5b3UgdHlwZSB0aGUgImkiIGNvbW1hbmQgKGkgZm9yIEluc2VydCkuICBUaGVuIHlvdSBjYW4gZW50ZXIKK3RoZSB0ZXh0LiAgSXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBmaWxlLiAgRG8gbm90IHdvcnJ5IGlmIHlvdSBtYWtlCittaXN0YWtlczsgeW91IGNhbiBjb3JyZWN0IHRoZW0gbGF0ZXIuICBUbyBlbnRlciB0aGUgZm9sbG93aW5nIHByb2dyYW1tZXIncworbGltZXJpY2ssIHRoaXMgaXMgd2hhdCB5b3UgdHlwZTogPgorCisJaUEgdmVyeSBpbnRlbGxpZ2VudCB0dXJ0bGUKKwlGb3VuZCBwcm9ncmFtbWluZyBVTklYIGEgaHVyZGxlCisKK0FmdGVyIHR5cGluZyAidHVydGxlIiB5b3UgcHJlc3MgdGhlIDxFbnRlcj4ga2V5IHRvIHN0YXJ0IGEgbmV3IGxpbmUuICBGaW5hbGx5Cit5b3UgcHJlc3MgdGhlIDxFc2M+IGtleSB0byBzdG9wIEluc2VydCBtb2RlIGFuZCBnbyBiYWNrIHRvIE5vcm1hbCBtb2RlLiAgWW91Citub3cgaGF2ZSB0d28gbGluZXMgb2YgdGV4dCBpbiB5b3VyIFZpbSB3aW5kb3c6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxBIHZlcnkgaW50ZWxsaWdlbnQgdHVydGxlCQl8CisJfEZvdW5kIHByb2dyYW1taW5nIFVOSVggYSBodXJkbGUJfAorCXx+CQkJCQl8CisJfH4JCQkJCXwKKwl8CQkJCQl8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCitXSEFUIElTIFRIRSBNT0RFPworCitUbyBiZSBhYmxlIHRvIHNlZSB3aGF0IG1vZGUgeW91IGFyZSBpbiwgdHlwZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpzZXQgc2hvd21vZGUKKworWW91IHdpbGwgbm90aWNlIHRoYXQgd2hlbiB0eXBpbmcgdGhlIGNvbG9uIFZpbSBtb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBsYXN0CitsaW5lIG9mIHRoZSB3aW5kb3cuICBUaGF0J3Mgd2hlcmUgeW91IHR5cGUgY29sb24gY29tbWFuZHMgKGNvbW1hbmRzIHRoYXQgc3RhcnQKK3dpdGggYSBjb2xvbikuICBGaW5pc2ggdGhpcyBjb21tYW5kIGJ5IHByZXNzaW5nIHRoZSA8RW50ZXI+IGtleSAoYWxsIGNvbW1hbmRzCit0aGF0IHN0YXJ0IHdpdGggYSBjb2xvbiBhcmUgZmluaXNoZWQgdGhpcyB3YXkpLgorICAgTm93LCBpZiB5b3UgdHlwZSB0aGUgImkiIGNvbW1hbmQgVmltIHdpbGwgZGlzcGxheSAtLUlOU0VSVC0tIGF0IHRoZSBib3R0b20KK29mIHRoZSB3aW5kb3cuICBUaGlzIGluZGljYXRlcyB5b3UgYXJlIGluIEluc2VydCBtb2RlLgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8QSB2ZXJ5IGludGVsbGlnZW50IHR1cnRsZQkJfAorCXxGb3VuZCBwcm9ncmFtbWluZyBVTklYIGEgaHVyZGxlCXwKKwl8fgkJCQkJfAorCXx+CQkJCQl8CisJfC0tIElOU0VSVCAtLQkJCQl8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworSWYgeW91IHByZXNzIDxFc2M+IHRvIGdvIGJhY2sgdG8gTm9ybWFsIG1vZGUgdGhlIGxhc3QgbGluZSB3aWxsIGJlIG1hZGUgYmxhbmsuCisKKworR0VUVElORyBPVVQgT0YgVFJPVUJMRQorCitPbmUgb2YgdGhlIHByb2JsZW1zIGZvciBWaW0gbm92aWNlcyBpcyBtb2RlIGNvbmZ1c2lvbiwgd2hpY2ggaXMgY2F1c2VkIGJ5Citmb3JnZXR0aW5nIHdoaWNoIG1vZGUgeW91IGFyZSBpbiBvciBieSBhY2NpZGVudGFsbHkgdHlwaW5nIGEgY29tbWFuZCB0aGF0Citzd2l0Y2hlcyBtb2Rlcy4gIFRvIGdldCBiYWNrIHRvIE5vcm1hbCBtb2RlLCBubyBtYXR0ZXIgd2hhdCBtb2RlIHlvdSBhcmUgaW4sCitwcmVzcyB0aGUgPEVzYz4ga2V5LiAgU29tZXRpbWVzIHlvdSBoYXZlIHRvIHByZXNzIGl0IHR3aWNlLiAgSWYgVmltIGJlZXBzIGJhY2sKK2F0IHlvdSwgeW91IGFscmVhZHkgYXJlIGluIE5vcm1hbCBtb2RlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMi4zKglNb3ZpbmcgYXJvdW5kCisKK0FmdGVyIHlvdSByZXR1cm4gdG8gTm9ybWFsIG1vZGUsIHlvdSBjYW4gbW92ZSBhcm91bmQgYnkgdXNpbmcgdGhlc2Uga2V5czoKKworCWggICBsZWZ0CQkJCQkJKmhqa2wqCisJaiAgIGRvd24KKwlrICAgdXAKKwlsICAgcmlnaHQKKworQXQgZmlyc3QsIGl0IG1heSBhcHBlYXIgdGhhdCB0aGVzZSBjb21tYW5kcyB3ZXJlIGNob3NlbiBhdCByYW5kb20uICBBZnRlciBhbGwsCit3aG8gZXZlciBoZWFyZCBvZiB1c2luZyBsIGZvciByaWdodD8gIEJ1dCBhY3R1YWxseSwgdGhlcmUgaXMgYSB2ZXJ5IGdvb2QKK3JlYXNvbiBmb3IgdGhlc2UgY2hvaWNlczogTW92aW5nIHRoZSBjdXJzb3IgaXMgdGhlIG1vc3QgY29tbW9uIHRoaW5nIHlvdSBkbyBpbgorYW4gZWRpdG9yLCBhbmQgdGhlc2Uga2V5cyBhcmUgb24gdGhlIGhvbWUgcm93IG9mIHlvdXIgcmlnaHQgaGFuZC4gIEluIG90aGVyCit3b3JkcywgdGhlc2UgY29tbWFuZHMgYXJlIHBsYWNlZCB3aGVyZSB5b3UgY2FuIHR5cGUgdGhlbSB0aGUgZmFzdGVzdAorKGVzcGVjaWFsbHkgd2hlbiB5b3UgdHlwZSB3aXRoIHRlbiBmaW5nZXJzKS4KKworCU5vdGU6CisJWW91IGNhbiBhbHNvIG1vdmUgdGhlIGN1cnNvciBieSB1c2luZyB0aGUgYXJyb3cga2V5cy4gIElmIHlvdSBkbywKKwlob3dldmVyLCB5b3UgZ3JlYXRseSBzbG93IGRvd24geW91ciBlZGl0aW5nIGJlY2F1c2UgdG8gcHJlc3MgdGhlIGFycm93CisJa2V5cywgeW91IG11c3QgbW92ZSB5b3VyIGhhbmQgZnJvbSB0aGUgdGV4dCBrZXlzIHRvIHRoZSBhcnJvdyBrZXlzLgorCUNvbnNpZGVyaW5nIHRoYXQgeW91IG1pZ2h0IGJlIGRvaW5nIGl0IGh1bmRyZWRzIG9mIHRpbWVzIGFuIGhvdXIsIHRoaXMKKwljYW4gdGFrZSBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aW1lLgorCSAgIEFsc28sIHRoZXJlIGFyZSBrZXlib2FyZHMgd2hpY2ggZG8gbm90IGhhdmUgYXJyb3cga2V5cywgb3Igd2hpY2gKKwlsb2NhdGUgdGhlbSBpbiB1bnVzdWFsIHBsYWNlczsgdGhlcmVmb3JlLCBrbm93aW5nIHRoZSB1c2Ugb2YgdGhlIGhqa2wKKwlrZXlzIGhlbHBzIGluIHRob3NlIHNpdHVhdGlvbnMuCisKK09uZSB3YXkgdG8gcmVtZW1iZXIgdGhlc2UgY29tbWFuZHMgaXMgdGhhdCBoIGlzIG9uIHRoZSBsZWZ0LCBsIGlzIG9uIHRoZQorcmlnaHQgYW5kIGogcG9pbnRzIGRvd24uICBJbiBhIHBpY3R1cmU6ID4KKworCQkgICAgICAgaworCQkgICBoICAgICBsCisJCSAgICAgagorCitUaGUgYmVzdCB3YXkgdG8gbGVhcm4gdGhlc2UgY29tbWFuZHMgaXMgYnkgdXNpbmcgdGhlbS4gIFVzZSB0aGUgImkiIGNvbW1hbmQgdG8KK2luc2VydCBzb21lIG1vcmUgbGluZXMgb2YgdGV4dC4gIFRoZW4gdXNlIHRoZSBoamtsIGtleXMgdG8gbW92ZSBhcm91bmQgYW5kCitpbnNlcnQgYSB3b3JkIHNvbWV3aGVyZS4gIERvbid0IGZvcmdldCB0byBwcmVzcyA8RXNjPiB0byBnbyBiYWNrIHRvIE5vcm1hbAorbW9kZS4gIFRoZSB8dmltdHV0b3J8IGlzIGFsc28gYSBuaWNlIHdheSB0byBsZWFybiBieSBkb2luZy4KKworRm9yIEphcGFuZXNlIHVzZXJzLCBIaXJvc2hpIEl3YXRhbmkgc3VnZ2VzdGVkIHVzaW5nIHRoaXM6CisKKwkJCUtvbXNvbW9sc2sKKwkJCSAgICBeCisJCQkgICAgfAorCSAgIEh1YW4gSG8JPC0tLSAtLS0+ICBMb3MgQW5nZWxlcworCShZZWxsb3cgcml2ZXIpCSAgICB8CisJCQkgICAgdgorCQkJICBKYXZhICh0aGUgaXNsYW5kLCBub3QgdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMi40KglEZWxldGluZyBjaGFyYWN0ZXJzCisKK1RvIGRlbGV0ZSBhIGNoYXJhY3RlciwgbW92ZSB0aGUgY3Vyc29yIG92ZXIgaXQgYW5kIHR5cGUgIngiLiAgKFRoaXMgaXMgYQordGhyb3diYWNrIHRvIHRoZSBvbGQgZGF5cyBvZiB0aGUgdHlwZXdyaXRlciwgd2hlbiB5b3UgZGVsZXRlZCB0aGluZ3MgYnkgdHlwaW5nCit4eHh4IG92ZXIgdGhlbS4pICBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgbGluZSwgZm9yCitleGFtcGxlLCBhbmQgdHlwZSB4eHh4eHh4IChzZXZlbiB4J3MpIHRvIGRlbGV0ZSAiQSB2ZXJ5ICIuICBUaGUgcmVzdWx0IHNob3VsZAorbG9vayBsaWtlIHRoaXM6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxpbnRlbGxpZ2VudCB0dXJ0bGUJCQl8CisJfEZvdW5kIHByb2dyYW1taW5nIFVOSVggYSBodXJkbGUJfAorCXx+CQkJCQl8CisJfH4JCQkJCXwKKwl8CQkJCQl8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworTm93IHlvdSBjYW4gaW5zZXJ0IG5ldyB0ZXh0LCBmb3IgZXhhbXBsZSBieSB0eXBpbmc6ID4KKworCWlBIHlvdW5nIDxFc2M+CisKK1RoaXMgYmVnaW5zIGFuIGluc2VydCAodGhlIGkpLCBpbnNlcnRzIHRoZSB3b3JkcyAiQSB5b3VuZyIsIGFuZCB0aGVuIGV4aXRzCitpbnNlcnQgbW9kZSAodGhlIGZpbmFsIDxFc2M+KS4JVGhlIHJlc3VsdDoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfEEgeW91bmcgaW50ZWxsaWdlbnQgdHVydGxlCQl8CisJfEZvdW5kIHByb2dyYW1taW5nIFVOSVggYSBodXJkbGUJfAorCXx+CQkJCQl8CisJfH4JCQkJCXwKKwl8CQkJCQl8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCitERUxFVElORyBBIExJTkUKKworVG8gZGVsZXRlIGEgd2hvbGUgbGluZSB1c2UgdGhlICJkZCIgY29tbWFuZC4gIFRoZSBmb2xsb3dpbmcgbGluZSB3aWxsCit0aGVuIG1vdmUgdXAgdG8gZmlsbCB0aGUgZ2FwOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8Rm91bmQgcHJvZ3JhbW1pbmcgVU5JWCBhIGh1cmRsZQl8CisJfH4JCQkJCXwKKwl8fgkJCQkJfAorCXx+CQkJCQl8CisJfAkJCQkJfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworREVMRVRJTkcgQSBMSU5FIEJSRUFLCisKK0luIFZpbSB5b3UgY2FuIGpvaW4gdHdvIGxpbmVzIHRvZ2V0aGVyLCB3aGljaCBtZWFucyB0aGF0IHRoZSBsaW5lIGJyZWFrCitiZXR3ZWVuIHRoZW0gaXMgZGVsZXRlZC4gIFRoZSAiSiIgY29tbWFuZCBkb2VzIHRoaXMuCisgICBUYWtlIHRoZXNlIHR3byBsaW5lczoKKworCUEgeW91bmcgaW50ZWxsaWdlbnQgfgorCXR1cnRsZSB+CisKK01vdmUgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgbGluZSBhbmQgcHJlc3MgIkoiOgorCisJQSB5b3VuZyBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMi41KglVbmRvIGFuZCBSZWRvCisKK1N1cHBvc2UgeW91IGRlbGV0ZSB0b28gbXVjaC4gIFdlbGwsIHlvdSBjYW4gdHlwZSBpdCBpbiBhZ2FpbiwgYnV0IGFuIGVhc2llcgord2F5IGV4aXN0cy4gIFRoZSAidSIgY29tbWFuZCB1bmRvZXMgdGhlIGxhc3QgZWRpdC4gIFRha2UgYSBsb29rIGF0IHRoaXMgaW4KK2FjdGlvbjogQWZ0ZXIgdXNpbmcgImRkIiB0byBkZWxldGUgdGhlIGZpcnN0IGxpbmUsICJ1IiBicmluZ3MgaXQgYmFjay4KKyAgIEFub3RoZXIgb25lOiBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIEEgaW4gdGhlIGZpcnN0IGxpbmU6CisKKwlBIHlvdW5nIGludGVsbGlnZW50IHR1cnRsZSB+CisKK05vdyB0eXBlIHh4eHh4eHggdG8gZGVsZXRlICJBIHlvdW5nIi4gIFRoZSByZXN1bHQgaXMgYXMgZm9sbG93czoKKworCSBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCitUeXBlICJ1IiB0byB1bmRvIHRoZSBsYXN0IGRlbGV0ZS4gIFRoYXQgZGVsZXRlIHJlbW92ZWQgdGhlIGcsIHNvIHRoZSB1bmRvCityZXN0b3JlcyB0aGUgY2hhcmFjdGVyLgorCisJZyBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCitUaGUgbmV4dCB1IGNvbW1hbmQgcmVzdG9yZXMgdGhlIG5leHQtdG8tbGFzdCBjaGFyYWN0ZXIgZGVsZXRlZDoKKworCW5nIGludGVsbGlnZW50IHR1cnRsZSB+CisKK1RoZSBuZXh0IHUgY29tbWFuZCBnaXZlcyB5b3UgdGhlIHUsIGFuZCBzbyBvbjoKKworCXVuZyBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCW91bmcgaW50ZWxsaWdlbnQgdHVydGxlIH4KKwl5b3VuZyBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCSB5b3VuZyBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCUEgeW91bmcgaW50ZWxsaWdlbnQgdHVydGxlIH4KKworCU5vdGU6CisJSWYgeW91IHR5cGUgInUiIHR3aWNlLCBhbmQgdGhlIHJlc3VsdCBpcyB0aGF0IHlvdSBnZXQgdGhlIHNhbWUgdGV4dAorCWJhY2ssIHlvdSBoYXZlIFZpbSBjb25maWd1cmVkIHRvIHdvcmsgVmkgY29tcGF0aWJsZS4gIExvb2sgaGVyZSB0byBmaXgKKwl0aGlzOiB8bm90LWNvbXBhdGlibGV8LgorCSAgIFRoaXMgdGV4dCBhc3N1bWVzIHlvdSB3b3JrICJUaGUgVmltIFdheSIuICBZb3UgbWlnaHQgcHJlZmVyIHRvIHVzZQorCXRoZSBnb29kIG9sZCBWaSB3YXksIGJ1dCB5b3Ugd2lsbCBoYXZlIHRvIHdhdGNoIG91dCBmb3Igc21hbGwKKwlkaWZmZXJlbmNlcyBpbiB0aGUgdGV4dCB0aGVuLgorCisKK1JFRE8KKworSWYgeW91IHVuZG8gdG9vIG1hbnkgdGltZXMsIHlvdSBjYW4gcHJlc3MgQ1RSTC1SIChyZWRvKSB0byByZXZlcnNlIHRoZQorcHJlY2VkaW5nIGNvbW1hbmQuICBJbiBvdGhlciB3b3JkcywgaXQgdW5kb2VzIHRoZSB1bmRvLiAgVG8gc2VlIHRoaXMgaW4KK2FjdGlvbiwgcHJlc3MgQ1RSTC1SIHR3aWNlLiAgVGhlIGNoYXJhY3RlciBBIGFuZCB0aGUgc3BhY2UgYWZ0ZXIgaXQgZGlzYXBwZWFyOgorCisJeW91bmcgaW50ZWxsaWdlbnQgdHVydGxlIH4KKworVGhlcmUncyBhIHNwZWNpYWwgdmVyc2lvbiBvZiB0aGUgdW5kbyBjb21tYW5kLCB0aGUgIlUiICh1bmRvIGxpbmUpIGNvbW1hbmQuCitUaGUgdW5kbyBsaW5lIGNvbW1hbmQgdW5kb2VzIGFsbCB0aGUgY2hhbmdlcyBtYWRlIG9uIHRoZSBsYXN0IGxpbmUgdGhhdCB3YXMKK2VkaXRlZC4gIFR5cGluZyB0aGlzIGNvbW1hbmQgdHdpY2UgY2FuY2VscyB0aGUgcHJlY2VkaW5nICJVIi4KKworCUEgdmVyeSBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCSAgeHh4eAkJCQlEZWxldGUgdmVyeQorCisJQSBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCQkgICAgICB4eHh4eHgJCURlbGV0ZSB0dXJ0bGUKKworCUEgaW50ZWxsaWdlbnQgfgorCQkJCQlSZXN0b3JlIGxpbmUgd2l0aCAiVSIKKwlBIHZlcnkgaW50ZWxsaWdlbnQgdHVydGxlIH4KKwkJCQkJVW5kbyAiVSIgd2l0aCAidSIKKwlBIGludGVsbGlnZW50IH4KKworVGhlICJVIiBjb21tYW5kIGlzIGEgY2hhbmdlIGJ5IGl0c2VsZiwgd2hpY2ggdGhlICJ1IiBjb21tYW5kIHVuZG9lcyBhbmQgQ1RSTC1SCityZWRvZXMuICBUaGlzIG1pZ2h0IGJlIGEgYml0IGNvbmZ1c2luZy4gIERvbid0IHdvcnJ5LCB3aXRoICJ1IiBhbmQgQ1RSTC1SIHlvdQorY2FuIGdvIHRvIGFueSBvZiB0aGUgc2l0dWF0aW9ucyB5b3UgaGFkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMi42KglPdGhlciBlZGl0aW5nIGNvbW1hbmRzCisKK1ZpbSBoYXMgYSBsYXJnZSBudW1iZXIgb2YgY29tbWFuZHMgdG8gY2hhbmdlIHRoZSB0ZXh0LiAgU2VlIHxRX2lufCBhbmQgYmVsb3cuCitIZXJlIGFyZSBhIGZldyBvZnRlbiB1c2VkIG9uZXMuCisKKworQVBQRU5ESU5HCisKK1RoZSAiaSIgY29tbWFuZCBpbnNlcnRzIGEgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuCitUaGF0IHdvcmtzIGZpbmU7IGJ1dCB3aGF0IGhhcHBlbnMgaWYgeW91IHdhbnQgdG8gYWRkIHN0dWZmIHRvIHRoZSBlbmQgb2YgdGhlCitsaW5lPyAgRm9yIHRoYXQgeW91IG5lZWQgdG8gaW5zZXJ0IHRleHQgYWZ0ZXIgdGhlIGN1cnNvci4gIFRoaXMgaXMgZG9uZSB3aXRoCit0aGUgImEiIChhcHBlbmQpIGNvbW1hbmQuCisgICBGb3IgZXhhbXBsZSwgdG8gY2hhbmdlIHRoZSBsaW5lCisKKwlhbmQgdGhhdCdzIG5vdCBzYXlpbmcgbXVjaCBmb3IgdGhlIHR1cnRsZS4gfgordG8KKwlhbmQgdGhhdCdzIG5vdCBzYXlpbmcgbXVjaCBmb3IgdGhlIHR1cnRsZSEhISB+CisKK21vdmUgdGhlIGN1cnNvciBvdmVyIHRvIHRoZSBkb3QgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4gVGhlbiB0eXBlICJ4IiB0bworZGVsZXRlIHRoZSBwZXJpb2QuICBUaGUgY3Vyc29yIGlzIG5vdyBwb3NpdGlvbmVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgb24gdGhlCitlIGluIHR1cnRsZS4gIE5vdyB0eXBlID4KKworCWEhISE8RXNjPgorCit0byBhcHBlbmQgdGhyZWUgZXhjbGFtYXRpb24gcG9pbnRzIGFmdGVyIHRoZSBlIGluIHR1cnRsZToKKworCWFuZCB0aGF0J3Mgbm90IHNheWluZyBtdWNoIGZvciB0aGUgdHVydGxlISEhIH4KKworCitPUEVOSU5HIFVQIEEgTkVXIExJTkUKKworVGhlICJvIiBjb21tYW5kIGNyZWF0ZXMgYSBuZXcsIGVtcHR5IGxpbmUgYmVsb3cgdGhlIGN1cnNvciBhbmQgcHV0cyBWaW0gaW4KK0luc2VydCBtb2RlLiAgVGhlbiB5b3UgY2FuIHR5cGUgdGhlIHRleHQgZm9yIHRoZSBuZXcgbGluZS4KKyAgIFN1cHBvc2UgdGhlIGN1cnNvciBpcyBzb21ld2hlcmUgaW4gdGhlIGZpcnN0IG9mIHRoZXNlIHR3byBsaW5lczoKKworCUEgdmVyeSBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCUZvdW5kIHByb2dyYW1taW5nIFVOSVggYSBodXJkbGUgfgorCitJZiB5b3Ugbm93IHVzZSB0aGUgIm8iIGNvbW1hbmQgYW5kIHR5cGUgbmV3IHRleHQ6ID4KKworCW9UaGF0IGxpa2VkIHVzaW5nIFZpbTxFc2M+CisKK1RoZSByZXN1bHQgaXM6CisKKwlBIHZlcnkgaW50ZWxsaWdlbnQgdHVydGxlIH4KKwlUaGF0IGxpa2VkIHVzaW5nIFZpbSB+CisJRm91bmQgcHJvZ3JhbW1pbmcgVU5JWCBhIGh1cmRsZSB+CisKK1RoZSAiTyIgY29tbWFuZCAodXBwZXJjYXNlKSBvcGVucyBhIGxpbmUgYWJvdmUgdGhlIGN1cnNvci4KKworCitVU0lORyBBIENPVU5UCisKK1N1cHBvc2UgeW91IHdhbnQgdG8gbW92ZSB1cCBuaW5lIGxpbmVzLiAgWW91IGNhbiB0eXBlICJra2tra2tra2siIG9yIHlvdSBjYW4KK2VudGVyIHRoZSBjb21tYW5kICI5ayIuICBJbiBmYWN0LCB5b3UgY2FuIHByZWNlZGUgbWFueSBjb21tYW5kcyB3aXRoIGEgbnVtYmVyLgorRWFybGllciBpbiB0aGlzIGNoYXB0ZXIsIGZvciBpbnN0YW5jZSwgeW91IGFkZGVkIHRocmVlIGV4Y2xhbWF0aW9uIHBvaW50cyB0bwordGhlIGVuZCBvZiBhIGxpbmUgYnkgdHlwaW5nICJhISEhPEVzYz4iLiAgQW5vdGhlciB3YXkgdG8gZG8gdGhpcyBpcyB0byB1c2UgdGhlCitjb21tYW5kICIzYSE8RXNjPiIuICBUaGUgY291bnQgb2YgMyB0ZWxscyB0aGUgY29tbWFuZCB0aGF0IGZvbGxvd3MgdG8gdHJpcGxlCitpdHMgZWZmZWN0LiAgU2ltaWxhcmx5LCB0byBkZWxldGUgdGhyZWUgY2hhcmFjdGVycywgdXNlIHRoZSBjb21tYW5kICIzeCIuICBUaGUKK2NvdW50IGFsd2F5cyBjb21lcyBiZWZvcmUgdGhlIGNvbW1hbmQgaXQgYXBwbGllcyB0by4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDIuNyoJR2V0dGluZyBvdXQKKworVG8gZXhpdCwgdXNlIHRoZSAiWloiIGNvbW1hbmQuICBUaGlzIGNvbW1hbmQgd3JpdGVzIHRoZSBmaWxlIGFuZCBleGl0cy4KKworCU5vdGU6CisJVW5saWtlIG1hbnkgb3RoZXIgZWRpdG9ycywgVmltIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgbWFrZSBhIGJhY2t1cAorCWZpbGUuICBJZiB5b3UgdHlwZSAiWloiLCB5b3VyIGNoYW5nZXMgYXJlIGNvbW1pdHRlZCBhbmQgdGhlcmUncyBubworCXR1cm5pbmcgYmFjay4gIFlvdSBjYW4gY29uZmlndXJlIHRoZSBWaW0gZWRpdG9yIHRvIHByb2R1Y2UgYmFja3VwCisJZmlsZXMsIHNlZSB8MDcuNHwuCisKKworRElTQ0FSRElORyBDSEFOR0VTCisKK1NvbWV0aW1lcyB5b3Ugd2lsbCBtYWtlIGEgc2VxdWVuY2Ugb2YgY2hhbmdlcyBhbmQgc3VkZGVubHkgcmVhbGl6ZSB5b3Ugd2VyZQorYmV0dGVyIG9mZiBiZWZvcmUgeW91IHN0YXJ0ZWQuICBOb3QgdG8gd29ycnk7IFZpbSBoYXMgYQorcXVpdC1hbmQtdGhyb3ctdGhpbmdzLWF3YXkgY29tbWFuZC4gIEl0IGlzOiA+CisKKwk6cSEKKworRG9uJ3QgZm9yZ2V0IHRvIHByZXNzIDxFbnRlcj4gdG8gZmluaXNoIHRoZSBjb21tYW5kLgorCitGb3IgdGhvc2Ugb2YgeW91IGludGVyZXN0ZWQgaW4gdGhlIGRldGFpbHMsIHRoZSB0aHJlZSBwYXJ0cyBvZiB0aGlzIGNvbW1hbmQKK2FyZSB0aGUgY29sb24gKDopLCB3aGljaCBlbnRlcnMgQ29tbWFuZC1saW5lIG1vZGU7IHRoZSBxIGNvbW1hbmQsIHdoaWNoIHRlbGxzCit0aGUgZWRpdG9yIHRvIHF1aXQ7IGFuZCB0aGUgb3ZlcnJpZGUgY29tbWFuZCBtb2RpZmllciAoISkuCisgICBUaGUgb3ZlcnJpZGUgY29tbWFuZCBtb2RpZmllciBpcyBuZWVkZWQgYmVjYXVzZSBWaW0gaXMgcmVsdWN0YW50IHRvIHRocm93Cithd2F5IGNoYW5nZXMuICBJZiB5b3Ugd2VyZSB0byBqdXN0IHR5cGUgIjpxIiwgVmltIHdvdWxkIGRpc3BsYXkgYW4gZXJyb3IKK21lc3NhZ2UgYW5kIHJlZnVzZSB0byBleGl0OgorCisJRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAodXNlICEgdG8gb3ZlcnJpZGUpIH4KKworQnkgc3BlY2lmeWluZyB0aGUgb3ZlcnJpZGUsIHlvdSBhcmUgaW4gZWZmZWN0IHRlbGxpbmcgVmltLCAiSSBrbm93IHRoYXQgd2hhdAorSSdtIGRvaW5nIGxvb2tzIHN0dXBpZCwgYnV0IEknbSBhIGJpZyBib3kgYW5kIHJlYWxseSB3YW50IHRvIGRvIHRoaXMuIgorCitJZiB5b3Ugd2FudCB0byBjb250aW51ZSBlZGl0aW5nIHdpdGggVmltOiBUaGUgIjplISIgY29tbWFuZCByZWxvYWRzIHRoZQorb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDIuOCoJRmluZGluZyBoZWxwCisKK0V2ZXJ5dGhpbmcgeW91IGFsd2F5cyB3YW50ZWQgdG8ga25vdyBjYW4gYmUgZm91bmQgaW4gdGhlIFZpbSBoZWxwIGZpbGVzLgorRG9uJ3QgYmUgYWZyYWlkIHRvIGFzayEKKyAgIFRvIGdldCBnZW5lcmljIGhlbHAgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOmhlbHAKKworWW91IGNvdWxkIGFsc28gdXNlIHRoZSBmaXJzdCBmdW5jdGlvbiBrZXkgPEYxPi4gIElmIHlvdXIga2V5Ym9hcmQgaGFzIGEgPEhlbHA+CitrZXkgaXQgbWlnaHQgd29yayBhcyB3ZWxsLgorICAgSWYgeW91IGRvbid0IHN1cHBseSBhIHN1YmplY3QsICI6aGVscCIgZGlzcGxheXMgdGhlIGdlbmVyYWwgaGVscCB3aW5kb3cuCitUaGUgY3JlYXRvcnMgb2YgVmltIGRpZCBzb21ldGhpbmcgdmVyeSBjbGV2ZXIgKG9yIHZlcnkgbGF6eSkgd2l0aCB0aGUgaGVscAorc3lzdGVtOiBUaGV5IG1hZGUgdGhlIGhlbHAgd2luZG93IGEgbm9ybWFsIGVkaXRpbmcgd2luZG93LiAgWW91IGNhbiB1c2UgYWxsCit0aGUgbm9ybWFsIFZpbSBjb21tYW5kcyB0byBtb3ZlIHRocm91Z2ggdGhlIGhlbHAgaW5mb3JtYXRpb24uICBUaGVyZWZvcmUgaCwgaiwKK2ssIGFuZCBsIG1vdmUgbGVmdCwgZG93biwgdXAgYW5kIHJpZ2h0LgorICAgVG8gZ2V0IG91dCBvZiB0aGUgaGVscCB3aW5kb3csIHVzZSB0aGUgc2FtZSBjb21tYW5kIHlvdSB1c2UgdG8gZ2V0IG91dCBvZgordGhlIGVkaXRvcjogIlpaIi4gIFRoaXMgd2lsbCBvbmx5IGNsb3NlIHRoZSBoZWxwIHdpbmRvdywgbm90IGV4aXQgVmltLgorCitBcyB5b3UgcmVhZCB0aGUgaGVscCB0ZXh0LCB5b3Ugd2lsbCBub3RpY2Ugc29tZSB0ZXh0IGVuY2xvc2VkIGluIHZlcnRpY2FsIGJhcnMKKyhmb3IgZXhhbXBsZSwgfGhlbHB8KS4gIFRoaXMgaW5kaWNhdGVzIGEgaHlwZXJsaW5rLiAgSWYgeW91IHBvc2l0aW9uIHRoZQorY3Vyc29yIGFueXdoZXJlIGJldHdlZW4gdGhlIGJhcnMgYW5kIHByZXNzIENUUkwtXSAoanVtcCB0byB0YWcpLCB0aGUgaGVscAorc3lzdGVtIHRha2VzIHlvdSB0byB0aGUgaW5kaWNhdGVkIHN1YmplY3QuIChGb3IgcmVhc29ucyBub3QgZGlzY3Vzc2VkIGhlcmUsCit0aGUgVmltIHRlcm1pbm9sb2d5IGZvciBhIGh5cGVybGluayBpcyB0YWcuICBTbyBDVFJMLV0ganVtcHMgdG8gdGhlIGxvY2F0aW9uCitvZiB0aGUgdGFnIGdpdmVuIGJ5IHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuKQorICAgQWZ0ZXIgYSBmZXcganVtcHMsIHlvdSBtaWdodCB3YW50IHRvIGdvIGJhY2suICBDVFJMLVQgKHBvcCB0YWcpIHRha2VzIHlvdQorYmFjayB0byB0aGUgcHJlY2VkaW5nIHBvc2l0aW9uLiAgQ1RSTC1PIChqdW1wIHRvIG9sZGVyIHBvc2l0aW9uKSBhbHNvIHdvcmtzCituaWNlbHkgaGVyZS4KKyAgIEF0IHRoZSB0b3Agb2YgdGhlIGhlbHAgc2NyZWVuLCB0aGVyZSBpcyB0aGUgbm90YXRpb24gKmhlbHAudHh0Ki4gIFRoaXMgbmFtZQorYmV0d2VlbiAiKiIgY2hhcmFjdGVycyBpcyB1c2VkIGJ5IHRoZSBoZWxwIHN5c3RlbSB0byBkZWZpbmUgYSB0YWcgKGh5cGVybGluaworZGVzdGluYXRpb24pLgorICAgU2VlIHwyOS4xfCBmb3IgZGV0YWlscyBhYm91dCB1c2luZyB0YWdzLgorCitUbyBnZXQgaGVscCBvbiBhIGdpdmVuIHN1YmplY3QsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpoZWxwIHtzdWJqZWN0fQorCitUbyBnZXQgaGVscCBvbiB0aGUgIngiIGNvbW1hbmQsIGZvciBleGFtcGxlLCBlbnRlciB0aGUgZm9sbG93aW5nOiA+CisKKwk6aGVscCB4CisKK1RvIGZpbmQgb3V0IGhvdyB0byBkZWxldGUgdGV4dCwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOmhlbHAgZGVsZXRpbmcKKworVG8gZ2V0IGEgY29tcGxldGUgaW5kZXggb2YgYWxsIFZpbSBjb21tYW5kcywgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOmhlbHAgaW5kZXgKKworV2hlbiB5b3UgbmVlZCB0byBnZXQgaGVscCBmb3IgYSBjb250cm9sIGNoYXJhY3RlciBjb21tYW5kIChmb3IgZXhhbXBsZSwKK0NUUkwtQSksIHlvdSBuZWVkIHRvIHNwZWxsIGl0IHdpdGggdGhlIHByZWZpeCAiQ1RSTC0iLiA+CisKKwk6aGVscCBDVFJMLUEKKworVGhlIFZpbSBlZGl0b3IgaGFzIG1hbnkgZGlmZmVyZW50IG1vZGVzLiAgQnkgZGVmYXVsdCwgdGhlIGhlbHAgc3lzdGVtIGRpc3BsYXlzCit0aGUgbm9ybWFsLW1vZGUgY29tbWFuZHMuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIGRpc3BsYXlzIGhlbHAKK2ZvciB0aGUgbm9ybWFsLW1vZGUgQ1RSTC1IIGNvbW1hbmQ6ID4KKworCTpoZWxwIENUUkwtSAorCitUbyBpZGVudGlmeSBvdGhlciBtb2RlcywgdXNlIGEgbW9kZSBwcmVmaXguICBJZiB5b3Ugd2FudCB0aGUgaGVscCBmb3IgdGhlCitpbnNlcnQtbW9kZSB2ZXJzaW9uIG9mIGEgY29tbWFuZCwgdXNlICJpXyIuICBGb3IgQ1RSTC1IIHRoaXMgZ2l2ZXMgeW91IHRoZQorZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpoZWxwIGlfQ1RSTC1ICisKK1doZW4geW91IHN0YXJ0IHRoZSBWaW0gZWRpdG9yLCB5b3UgY2FuIHVzZSBzZXZlcmFsIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCitUaGVzZSBhbGwgYmVnaW4gd2l0aCBhIGRhc2ggKC0pLiAgVG8gZmluZCB3aGF0IHRoZSAtdCBhcmd1bWVudCBkb2VzLCBmb3IKK2V4YW1wbGUsIHVzZSB0aGUgY29tbWFuZDogPgorCisJOmhlbHAgLXQKKworVGhlIFZpbSBlZGl0b3IgaGFzIGEgbnVtYmVyIG9mIG9wdGlvbnMgdGhhdCBlbmFibGUgeW91IHRvIGNvbmZpZ3VyZSBhbmQKK2N1c3RvbWl6ZSB0aGUgZWRpdG9yLiAgSWYgeW91IHdhbnQgaGVscCBmb3IgYW4gb3B0aW9uLCB5b3UgbmVlZCB0byBlbmNsb3NlIGl0CitpbiBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzLiAgVG8gZmluZCBvdXQgd2hhdCB0aGUgJ251bWJlcicgb3B0aW9uIGRvZXMsIGZvcgorZXhhbXBsZSwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOmhlbHAgJ251bWJlcicKKworVGhlIHRhYmxlIHdpdGggYWxsIG1vZGUgcHJlZml4ZXMgY2FuIGJlIGZvdW5kIGhlcmU6IHxoZWxwLWNvbnRleHR8LgorCitTcGVjaWFsIGtleXMgYXJlIGVuY2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzLiBUbyBmaW5kIGhlbHAgb24gdGhlIHVwLWFycm93IGtleQoraW4gSW5zZXJ0IG1vZGUsIGZvciBpbnN0YW5jZSwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOmhlbHAgaV88VXA+CisKK0lmIHlvdSBzZWUgYW4gZXJyb3IgbWVzc2FnZSB0aGF0IHlvdSBkb24ndCB1bmRlcnN0YW5kLCBmb3IgZXhhbXBsZToKKworCUUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKHVzZSAhIHRvIG92ZXJyaWRlKSB+CisKK1lvdSBjYW4gdXNlIHRoZSBlcnJvciBJRCBhdCB0aGUgc3RhcnQgdG8gZmluZCBoZWxwIGFib3V0IGl0OiA+CisKKwk6aGVscCBFMzcKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8wMy50eHR8ICBNb3ZpbmcgYXJvdW5kCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzAzLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlZjJhZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8wMy50eHQKQEAgLTAsMCArMSw2NTQgQEAKKyp1c3JfMDMudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKYW4gMTcKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgTW92aW5nIGFyb3VuZAorCisKK0JlZm9yZSB5b3UgY2FuIGluc2VydCBvciBkZWxldGUgdGV4dCB0aGUgY3Vyc29yIGhhcyB0byBiZSBtb3ZlZCB0byB0aGUgcmlnaHQKK3BsYWNlLiAgVmltIGhhcyBhIGxhcmdlIG51bWJlciBvZiBjb21tYW5kcyB0byBwb3NpdGlvbiB0aGUgY3Vyc29yLiAgVGhpcworY2hhcHRlciBzaG93cyB5b3UgaG93IHRvIHVzZSB0aGUgbW9zdCBpbXBvcnRhbnQgb25lcy4gIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YKK3RoZXNlIGNvbW1hbmRzIGJlbG93IHxRX2xyfC4KKworfDAzLjF8CVdvcmQgbW92ZW1lbnQKK3wwMy4yfAlNb3ZpbmcgdG8gdGhlIHN0YXJ0IG9yIGVuZCBvZiBhIGxpbmUKK3wwMy4zfAlNb3ZpbmcgdG8gYSBjaGFyYWN0ZXIKK3wwMy40fAlNYXRjaGluZyBhIHBhcmVuCit8MDMuNXwJTW92aW5nIHRvIGEgc3BlY2lmaWMgbGluZQorfDAzLjZ8CVRlbGxpbmcgd2hlcmUgeW91IGFyZQorfDAzLjd8CVNjcm9sbGluZyBhcm91bmQKK3wwMy44fAlTaW1wbGUgc2VhcmNoZXMKK3wwMy45fAlTaW1wbGUgc2VhcmNoIHBhdHRlcm5zCit8MDMuMTB8CVVzaW5nIG1hcmtzCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzA0LnR4dHwgIE1ha2luZyBzbWFsbCBjaGFuZ2VzCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl8wMi50eHR8ICBUaGUgZmlyc3Qgc3RlcHMgaW4gVmltCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMy4xKglXb3JkIG1vdmVtZW50CisKK1RvIG1vdmUgdGhlIGN1cnNvciBmb3J3YXJkIG9uZSB3b3JkLCB1c2UgdGhlICJ3IiBjb21tYW5kLiAgTGlrZSBtb3N0IFZpbQorY29tbWFuZHMsIHlvdSBjYW4gdXNlIGEgbnVtZXJpYyBwcmVmaXggdG8gbW92ZSBwYXN0IG11bHRpcGxlIHdvcmRzLiAgRm9yCitleGFtcGxlLCAiM3ciIG1vdmVzIHRocmVlIHdvcmRzLiAgVGhpcyBmaWd1cmUgc2hvd3MgaG93IGl0IHdvcmtzOgorCisJVGhpcyBpcyBhIGxpbmUgd2l0aCBleGFtcGxlIHRleHQgfgorCSAgLS0tPi0tPi0+LS0tLS0tLS0tLS0tLS0tLS0+CisJICAgdyAgdyAgdyAgICAzdworCitOb3RpY2UgdGhhdCAidyIgbW92ZXMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHdvcmQgaWYgaXQgYWxyZWFkeSBpcyBhdCB0aGUKK3N0YXJ0IG9mIGEgd29yZC4KKyAgIFRoZSAiYiIgY29tbWFuZCBtb3ZlcyBiYWNrd2FyZCB0byB0aGUgc3RhcnQgb2YgdGhlIHByZXZpb3VzIHdvcmQ6CisKKwlUaGlzIGlzIGEgbGluZSB3aXRoIGV4YW1wbGUgdGV4dCB+CisJPC0tLS08LS08LTwtLS0tLS0tLS08LS0tCisJICAgYiAgIGIgYiAgICAyYiAgICAgIGIKKworVGhlcmUgaXMgYWxzbyB0aGUgImUiIGNvbW1hbmQgdGhhdCBtb3ZlcyB0byB0aGUgbmV4dCBlbmQgb2YgYSB3b3JkIGFuZCAiZ2UiLAord2hpY2ggbW92ZXMgdG8gdGhlIHByZXZpb3VzIGVuZCBvZiBhIHdvcmQ6CisKKwlUaGlzIGlzIGEgbGluZSB3aXRoIGV4YW1wbGUgdGV4dCB+CisJICAgPC0gICA8LS0tIC0tLS0tPiAgIC0tLS0+CisJICAgZ2UgICAgZ2UgICAgIGUgICAgICAgZQorCitJZiB5b3UgYXJlIGF0IHRoZSBsYXN0IHdvcmQgb2YgYSBsaW5lLCB0aGUgInciIGNvbW1hbmQgd2lsbCB0YWtlIHlvdSB0byB0aGUKK2ZpcnN0IHdvcmQgaW4gdGhlIG5leHQgbGluZS4gIFRodXMgeW91IGNhbiB1c2UgdGhpcyB0byBtb3ZlIHRocm91Z2ggYQorcGFyYWdyYXBoLCBtdWNoIGZhc3RlciB0aGFuIHVzaW5nICJsIi4gICJiIiBkb2VzIHRoZSBzYW1lIGluIHRoZSBvdGhlcgorZGlyZWN0aW9uLgorCitBIHdvcmQgZW5kcyBhdCBhIG5vbi13b3JkIGNoYXJhY3Rlciwgc3VjaCBhcyBhICIuIiwgIi0iIG9yICIpIi4gIFRvIGNoYW5nZQord2hhdCBWaW0gY29uc2lkZXJzIHRvIGJlIGEgd29yZCwgc2VlIHRoZSAnaXNrZXl3b3JkJyBvcHRpb24uCisgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG1vdmUgYnkgd2hpdGUtc3BhY2Ugc2VwYXJhdGVkIFdPUkRzLiAgVGhpcyBpcyBub3QgYQord29yZCBpbiB0aGUgbm9ybWFsIHNlbnNlLCB0aGF0J3Mgd2h5IHRoZSB1cHBlcmNhc2UgaXMgdXNlZC4gIFRoZSBjb21tYW5kcyBmb3IKK21vdmluZyBieSBXT1JEcyBhcmUgYWxzbyB1cHBlcmNhc2UsIGFzIHRoaXMgZmlndXJlIHNob3dzOgorCisJICAgICAgIGdlICAgICAgYgkgIHcJCQkJZQorCSAgICAgICA8LSAgICAgPC0JIC0tLT4JCQkgICAgICAgLS0tPgorCVRoaXMgaXMtYSBsaW5lLCB3aXRoIHNwZWNpYWwvc2VwYXJhdGVkL3dvcmRzIChhbmQgc29tZSBtb3JlKS4gfgorCSAgIDwtLS0tLSA8LS0tLS0JIC0tLS0tLS0tLS0tLS0tLS0tLS0tPgkgICAgICAgLS0tLS0+CisJICAgICBnRSAgICAgIEIJCQkgVwkJCSBFCisKK1dpdGggdGhpcyBtaXggb2YgbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2UgY29tbWFuZHMsIHlvdSBjYW4gcXVpY2tseSBtb3ZlCitmb3J3YXJkIGFuZCBiYWNrd2FyZCB0aHJvdWdoIGEgcGFyYWdyYXBoLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMy4yKglNb3ZpbmcgdG8gdGhlIHN0YXJ0IG9yIGVuZCBvZiBhIGxpbmUKKworVGhlICIkIiBjb21tYW5kIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiBhIGxpbmUuICBJZiB5b3VyIGtleWJvYXJkIGhhcworYW4gPEVuZD4ga2V5IGl0IHdpbGwgZG8gdGhlIHNhbWUgdGhpbmcuCisKK1RoZSAiXiIgY29tbWFuZCBtb3ZlcyB0byB0aGUgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvZiB0aGUgbGluZS4gIFRoZSAiMCIKK2NvbW1hbmQgKHplcm8pIG1vdmVzIHRvIHRoZSB2ZXJ5IGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbGluZS4gIFRoZSA8SG9tZT4ga2V5Citkb2VzIHRoZSBzYW1lIHRoaW5nLiAgSW4gYSBwaWN0dXJlOgorCisJCSAgXgorCSAgICAgPC0tLS0tLS0tLS0tLQorCS4uLi4uVGhpcyBpcyBhIGxpbmUgd2l0aCBleGFtcGxlIHRleHQgfgorCTwtLS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLT4KKwkJMAkJICAgJAorCisodGhlICIuLi4uLiIgaW5kaWNhdGVzIGJsYW5rcyBoZXJlKQorCisgICBUaGUgIiQiIGNvbW1hbmQgdGFrZXMgYSBjb3VudCwgbGlrZSBtb3N0IG1vdmVtZW50IGNvbW1hbmRzLiAgQnV0IG1vdmluZyB0bwordGhlIGVuZCBvZiB0aGUgbGluZSBzZXZlcmFsIHRpbWVzIGRvZXNuJ3QgbWFrZSBzZW5zZS4gIFRoZXJlZm9yZSBpdCBjYXVzZXMgdGhlCitlZGl0b3IgdG8gbW92ZSB0byB0aGUgZW5kIG9mIGFub3RoZXIgbGluZS4gIEZvciBleGFtcGxlLCAiMSQiIG1vdmVzIHlvdSB0bwordGhlIGVuZCBvZiB0aGUgZmlyc3QgbGluZSAodGhlIG9uZSB5b3UncmUgb24pLCAiMiQiIHRvIHRoZSBlbmQgb2YgdGhlIG5leHQKK2xpbmUsIGFuZCBzbyBvbi4KKyAgIFRoZSAiMCIgY29tbWFuZCBkb2Vzbid0IHRha2UgYSBjb3VudCBhcmd1bWVudCwgYmVjYXVzZSB0aGUgIjAiIHdvdWxkIGJlCitwYXJ0IG9mIHRoZSBjb3VudC4gIFVuZXhwZWN0ZWRseSwgdXNpbmcgYSBjb3VudCB3aXRoICJeIiBkb2Vzbid0IGhhdmUgYW55CitlZmZlY3QuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAzLjMqCU1vdmluZyB0byBhIGNoYXJhY3RlcgorCitPbmUgb2YgdGhlIG1vc3QgdXNlZnVsIG1vdmVtZW50IGNvbW1hbmRzIGlzIHRoZSBzaW5nbGUtY2hhcmFjdGVyIHNlYXJjaAorY29tbWFuZC4gIFRoZSBjb21tYW5kICJmeCIgc2VhcmNoZXMgZm9yd2FyZCBpbiB0aGUgbGluZSBmb3IgdGhlIHNpbmdsZQorY2hhcmFjdGVyIHguICBIaW50OiAiZiIgc3RhbmRzIGZvciAiRmluZCIuCisgICBGb3IgZXhhbXBsZSwgeW91IGFyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb2xsb3dpbmcgbGluZS4gIFN1cHBvc2UgeW91Cit3YW50IHRvIGdvIHRvIHRoZSBoIG9mIGh1bWFuLiAgSnVzdCBleGVjdXRlIHRoZSBjb21tYW5kICJmaCIgYW5kIHRoZSBjdXJzb3IKK3dpbGwgYmUgcG9zaXRpb25lZCBvdmVyIHRoZSBoOgorCisJVG8gZXJyIGlzIGh1bWFuLiAgVG8gcmVhbGx5IGZvdWwgdXAgeW91IG5lZWQgYSBjb21wdXRlci4gfgorCS0tLS0tLS0tLS0+LS0tLS0tLS0tLS0tLS0tPgorCSAgICBmaAkJIGZ5CisKK1RoaXMgYWxzbyBzaG93cyB0aGF0IHRoZSBjb21tYW5kICJmeSIgbW92ZXMgdG8gdGhlIGVuZCBvZiB0aGUgd29yZCByZWFsbHkuCisgICBZb3UgY2FuIHNwZWNpZnkgYSBjb3VudDsgdGhlcmVmb3JlLCB5b3UgY2FuIGdvIHRvIHRoZSAibCIgb2YgImZvdWwiIHdpdGgKKyIzZmwiOgorCisJVG8gZXJyIGlzIGh1bWFuLiAgVG8gcmVhbGx5IGZvdWwgdXAgeW91IG5lZWQgYSBjb21wdXRlci4gfgorCQkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KKwkJCSAgIDNmbAorCitUaGUgIkYiIGNvbW1hbmQgc2VhcmNoZXMgdG8gdGhlIGxlZnQ6CisKKwlUbyBlcnIgaXMgaHVtYW4uICBUbyByZWFsbHkgZm91bCB1cCB5b3UgbmVlZCBhIGNvbXB1dGVyLiB+CisJCSAgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJICAgIEZoCisKK1RoZSAidHgiIGNvbW1hbmQgd29ya3MgbGlrZSB0aGUgImZ4IiBjb21tYW5kLCBleGNlcHQgaXQgc3RvcHMgb25lIGNoYXJhY3RlcgorYmVmb3JlIHRoZSBzZWFyY2hlZCBjaGFyYWN0ZXIuICBIaW50OiAidCIgc3RhbmRzIGZvciAiVG8iLiAgVGhlIGJhY2t3YXJkCit2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZCBpcyAiVHgiLgorCisJVG8gZXJyIGlzIGh1bWFuLiAgVG8gcmVhbGx5IGZvdWwgdXAgeW91IG5lZWQgYSBjb21wdXRlci4gfgorCQkgICA8LS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tPgorCQkJVGgJCXRuCisKK1RoZXNlIGZvdXIgY29tbWFuZHMgY2FuIGJlIHJlcGVhdGVkIHdpdGggIjsiLiAgIiwiIHJlcGVhdHMgaW4gdGhlIG90aGVyCitkaXJlY3Rpb24uICBUaGUgY3Vyc29yIGlzIG5ldmVyIG1vdmVkIHRvIGFub3RoZXIgbGluZS4gIE5vdCBldmVuIHdoZW4gdGhlCitzZW50ZW5jZSBjb250aW51ZXMuCisKK1NvbWV0aW1lcyB5b3Ugd2lsbCBzdGFydCBhIHNlYXJjaCwgb25seSB0byByZWFsaXplIHRoYXQgeW91IGhhdmUgdHlwZWQgdGhlCit3cm9uZyBjb21tYW5kLiAgWW91IHR5cGUgImYiIHRvIHNlYXJjaCBiYWNrd2FyZCwgZm9yIGV4YW1wbGUsIG9ubHkgdG8gcmVhbGl6ZQordGhhdCB5b3UgcmVhbGx5IG1lYW50ICJGIi4gIFRvIGFib3J0IGEgc2VhcmNoLCBwcmVzcyA8RXNjPi4gIFNvICJmPEVzYz4iIGlzIGFuCithYm9ydGVkIGZvcndhcmQgc2VhcmNoIGFuZCBkb2Vzbid0IGRvIGFueXRoaW5nLiAgTm90ZTogPEVzYz4gY2FuY2VscyBtb3N0CitvcGVyYXRpb25zLCBub3QganVzdCBzZWFyY2hlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDMuNCoJTWF0Y2hpbmcgYSBwYXJlbgorCitXaGVuIHdyaXRpbmcgYSBwcm9ncmFtIHlvdSBvZnRlbiBlbmQgdXAgd2l0aCBuZXN0ZWQgKCkgY29uc3RydWN0cy4gIFRoZW4gdGhlCisiJSIgY29tbWFuZCBpcyB2ZXJ5IGhhbmR5OiBJdCBtb3ZlcyB0byB0aGUgbWF0Y2hpbmcgcGFyZW4uICBJZiB0aGUgY3Vyc29yIGlzCitvbiBhICIoIiBpdCB3aWxsIG1vdmUgdG8gdGhlIG1hdGNoaW5nICIpIi4gIElmIGl0J3Mgb24gYSAiKSIgaXQgd2lsbCBtb3ZlIHRvCit0aGUgbWF0Y2hpbmcgIigiLgorCisJCQkgICAgJQorCQkJIDwtLS0tLT4KKwkJaWYgKGEgPT0gKGIgKiBjKSAvIGQpIH4KKwkJICAgPC0tLS0tLS0tLS0tLS0tLS0+CisJCQkgICAgJQorCitUaGlzIGFsc28gd29ya3MgZm9yIFtdIGFuZCB7fSBwYWlycy4gIChUaGlzIGNhbiBiZSBkZWZpbmVkIHdpdGggdGhlCisnbWF0Y2hwYWlycycgb3B0aW9uLikKKworV2hlbiB0aGUgY3Vyc29yIGlzIG5vdCBvbiBhIHVzZWZ1bCBjaGFyYWN0ZXIsICIlIiB3aWxsIHNlYXJjaCBmb3J3YXJkIHRvIGZpbmQKK29uZS4gIFRodXMgaWYgdGhlIGN1cnNvciBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgb2YgdGhlIHByZXZpb3VzIGV4YW1wbGUsCisiJSIgd2lsbCBzZWFyY2ggZm9yd2FyZCBhbmQgZmluZCB0aGUgZmlyc3QgIigiLiAgVGhlbiBpdCBtb3ZlcyB0byBpdHMgbWF0Y2g6CisKKwkJaWYgKGEgPT0gKGIgKiBjKSAvIGQpIH4KKwkJLS0tKy0tLS0tLS0tLS0tLS0tLS0+CisJCQkgICAlCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAzLjUqCU1vdmluZyB0byBhIHNwZWNpZmljIGxpbmUKKworSWYgeW91IGFyZSBhIEMgb3IgQysrIHByb2dyYW1tZXIsIHlvdSBhcmUgZmFtaWxpYXIgd2l0aCBlcnJvciBtZXNzYWdlcyBzdWNoIGFzCit0aGUgZm9sbG93aW5nOgorCisJcHJvZy5jOjMzOiBqICAgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pIH4KKworVGhpcyB0ZWxscyB5b3UgdGhhdCB5b3UgbWlnaHQgd2FudCB0byBmaXggc29tZXRoaW5nIG9uIGxpbmUgMzMuICBTbyBob3cgZG8geW91CitmaW5kIGxpbmUgMzM/ICBPbmUgd2F5IGlzIHRvIGRvICI5OTk5ayIgdG8gZ28gdG8gdGhlIHRvcCBvZiB0aGUgZmlsZSBhbmQgIjMyaiIKK3RvIGdvIGRvd24gdGhpcnR5IHR3byBsaW5lcy4gIEl0IGlzIG5vdCBhIGdvb2Qgd2F5LCBidXQgaXQgd29ya3MuICBBIG11Y2gKK2JldHRlciB3YXkgb2YgZG9pbmcgdGhpbmdzIGlzIHRvIHVzZSB0aGUgIkciIGNvbW1hbmQuICBXaXRoIGEgY291bnQsIHRoaXMKK2NvbW1hbmQgcG9zaXRpb25zIHlvdSBhdCB0aGUgZ2l2ZW4gbGluZSBudW1iZXIuICBGb3IgZXhhbXBsZSwgIjMzRyIgcHV0cyB5b3UKK29uIGxpbmUgMzMuICAoRm9yIGEgYmV0dGVyIHdheSBvZiBnb2luZyB0aHJvdWdoIGEgY29tcGlsZXIncyBlcnJvciBsaXN0LCBzZWUKK3x1c3JfMzAudHh0fCwgZm9yIGluZm9ybWF0aW9uIG9uIHRoZSA6bWFrZSBjb21tYW5kLikKKyAgIFdpdGggbm8gYXJndW1lbnQsICJHIiBwb3NpdGlvbnMgeW91IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuICBBIHF1aWNrIHdheSB0bworZ28gdG8gdGhlIHN0YXJ0IG9mIGEgZmlsZSB1c2UgImdnIi4gICIxRyIgd2lsbCBkbyB0aGUgc2FtZSwgYnV0IGlzIGEgdGlueSBiaXQKK21vcmUgdHlwaW5nLgorCisJICAgIHwJZmlyc3QgbGluZSBvZiBhIGZpbGUgICBeCisJICAgIHwJdGV4dCB0ZXh0IHRleHQgdGV4dCAgICB8CisJICAgIHwJdGV4dCB0ZXh0IHRleHQgdGV4dCAgICB8ICBnZworCTdHICB8CXRleHQgdGV4dCB0ZXh0IHRleHQgICAgfAorCSAgICB8CXRleHQgdGV4dCB0ZXh0IHRleHQKKwkgICAgfAl0ZXh0IHRleHQgdGV4dCB0ZXh0CisJICAgIFYJdGV4dCB0ZXh0IHRleHQgdGV4dCAgICB8CisJCXRleHQgdGV4dCB0ZXh0IHRleHQgICAgfCAgRworCQl0ZXh0IHRleHQgdGV4dCB0ZXh0ICAgIHwKKwkJbGFzdCBsaW5lIG9mIGEgZmlsZSAgICBWCisKK0Fub3RoZXIgd2F5IHRvIG1vdmUgdG8gYSBsaW5lIGlzIHVzaW5nIHRoZSAiJSIgY29tbWFuZCB3aXRoIGEgY291bnQuICBGb3IKK2V4YW1wbGUgIjUwJSIgbW92ZXMgeW91IHRvIGhhbGZ3YXkgdGhlIGZpbGUuICAiOTAlIiBnb2VzIHRvIG5lYXIgdGhlIGVuZC4KKworVGhlIHByZXZpb3VzIGFzc3VtZXMgdGhhdCB5b3Ugd2FudCB0byBtb3ZlIHRvIGEgbGluZSBpbiB0aGUgZmlsZSwgbm8gbWF0dGVyIGlmCitpdCdzIGN1cnJlbnRseSB2aXNpYmxlIG9yIG5vdC4gIFdoYXQgaWYgeW91IHdhbnQgdG8gbW92ZSB0byBvbmUgb2YgdGhlIGxpbmVzCit5b3UgY2FuIHNlZT8gIFRoaXMgZmlndXJlIHNob3dzIHRoZSB0aHJlZSBjb21tYW5kcyB5b3UgY2FuIHVzZToKKworCQkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJSCAtLT4JfCB0ZXh0IHNhbXBsZSB0ZXh0CSAgICB8CisJCQl8IHNhbXBsZSB0ZXh0CQkgICAgfAorCQkJfCB0ZXh0IHNhbXBsZSB0ZXh0CSAgICB8CisJCQl8IHNhbXBsZSB0ZXh0CQkgICAgfAorCQlNIC0tPgl8IHRleHQgc2FtcGxlIHRleHQJICAgIHwKKwkJCXwgc2FtcGxlIHRleHQJCSAgICB8CisJCQl8IHRleHQgc2FtcGxlIHRleHQJICAgIHwKKwkJCXwgc2FtcGxlIHRleHQJCSAgICB8CisJCUwgLS0+CXwgdGV4dCBzYW1wbGUgdGV4dAkgICAgfAorCQkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworSGludHM6ICJIIiBzdGFuZHMgZm9yIEhvbWUsICJNIiBmb3IgTWlkZGxlIGFuZCAiTCIgZm9yIExhc3QuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAzLjYqCVRlbGxpbmcgd2hlcmUgeW91IGFyZQorCitUbyBzZWUgd2hlcmUgeW91IGFyZSBpbiBhIGZpbGUsIHRoZXJlIGFyZSB0aHJlZSB3YXlzOgorCisxLiAgVXNlIHRoZSBDVFJMLUcgY29tbWFuZC4gIFlvdSBnZXQgYSBtZXNzYWdlIGxpa2UgdGhpcyAoYXNzdW1pbmcgdGhlICdydWxlcicKKyAgICBvcHRpb24gaXMgb2ZmKToKKworCSJ1c3JfMDMudHh0IiBsaW5lIDIzMyBvZiA2NTAgLS0zNSUtLSBjb2wgNDUtNTIgfgorCisgICAgVGhpcyBzaG93cyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB5b3UgYXJlIGVkaXRpbmcsIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUKKyAgICBjdXJzb3IgaXMsIHRoZSB0b3RhbCBudW1iZXIgb2YgbGluZXMsIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB3YXkgdGhyb3VnaAorICAgIHRoZSBmaWxlIGFuZCB0aGUgY29sdW1uIG9mIHRoZSBjdXJzb3IuCisgICAgICAgU29tZXRpbWVzIHlvdSB3aWxsIHNlZSBhIHNwbGl0IGNvbHVtbiBudW1iZXIuICBGb3IgZXhhbXBsZSwgImNvbCAyLTkiLgorICAgIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGN1cnNvciBpcyBwb3NpdGlvbmVkIG9uIHRoZSBzZWNvbmQgY2hhcmFjdGVyLCBidXQKKyAgICBiZWNhdXNlIGNoYXJhY3RlciBvbmUgaXMgYSB0YWIsIG9jY3VweWluZyBlaWdodCBzcGFjZXMgd29ydGggb2YgY29sdW1ucywKKyAgICB0aGUgc2NyZWVuIGNvbHVtbiBpcyA5LgorCisyLiAgU2V0IHRoZSAnbnVtYmVyJyBvcHRpb24uICBUaGlzIHdpbGwgZGlzcGxheSBhIGxpbmUgbnVtYmVyIGluIGZyb250IG9mCisgICAgZXZlcnkgbGluZTogPgorCisJOnNldCBudW1iZXIKKzwKKyAgICBUbyBzd2l0Y2ggdGhpcyBvZmYgYWdhaW46ID4KKworCTpzZXQgbm9udW1iZXIKKzwKKyAgICBTaW5jZSAnbnVtYmVyJyBpcyBhIGJvb2xlYW4gb3B0aW9uLCBwcmVwZW5kaW5nICJubyIgdG8gaXRzIG5hbWUgaGFzIHRoZQorICAgIGVmZmVjdCBvZiBzd2l0Y2hpbmcgaXQgb2ZmLiAgQSBib29sZWFuIG9wdGlvbiBoYXMgb25seSB0aGVzZSB0d28gdmFsdWVzLAorICAgIGl0IGlzIGVpdGhlciBvbiBvciBvZmYuCisgICAgICAgVmltIGhhcyBtYW55IG9wdGlvbnMuICBCZXNpZGVzIHRoZSBib29sZWFuIG9uZXMgdGhlcmUgYXJlIG9wdGlvbnMgd2l0aAorICAgIGEgbnVtZXJpY2FsIHZhbHVlIGFuZCBzdHJpbmcgb3B0aW9ucy4gIFlvdSB3aWxsIHNlZSBleGFtcGxlcyBvZiB0aGlzIHdoZXJlCisgICAgdGhleSBhcmUgdXNlZC4KKworMy4gIFNldCB0aGUgJ3J1bGVyJyBvcHRpb24uICBUaGlzIHdpbGwgZGlzcGxheSB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZQorICAgIGxvd2VyIHJpZ2h0IGNvcm5lciBvZiB0aGUgVmltIHdpbmRvdzogPgorCisJOnNldCBydWxlcgorCitVc2luZyB0aGUgJ3J1bGVyJyBvcHRpb24gaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCBpdCBkb2Vzbid0IHRha2UgbXVjaCByb29tLAordGh1cyB0aGVyZSBpcyBtb3JlIHNwYWNlIGZvciB5b3VyIHRleHQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAzLjcqCVNjcm9sbGluZyBhcm91bmQKKworVGhlIENUUkwtVSBjb21tYW5kIHNjcm9sbHMgZG93biBoYWxmIGEgc2NyZWVuIG9mIHRleHQuICBUaGluayBvZiBsb29raW5nCit0aHJvdWdoIGEgdmlld2luZyB3aW5kb3cgYXQgdGhlIHRleHQgYW5kIG1vdmluZyB0aGlzIHdpbmRvdyB1cCBieSBoYWxmIHRoZQoraGVpZ2h0IG9mIHRoZSB3aW5kb3cuICBUaHVzIHRoZSB3aW5kb3cgbW92ZXMgdXAgb3ZlciB0aGUgdGV4dCwgd2hpY2ggaXMKK2JhY2t3YXJkIGluIHRoZSBmaWxlLiAgRG9uJ3Qgd29ycnkgaWYgeW91IGhhdmUgYSBsaXR0bGUgdHJvdWJsZSByZW1lbWJlcmluZword2hpY2ggZW5kIGlzIHVwLiAgTW9zdCB1c2VycyBoYXZlIHRoZSBzYW1lIHByb2JsZW0uCisgICBUaGUgQ1RSTC1EIGNvbW1hbmQgbW92ZXMgdGhlIHZpZXdpbmcgd2luZG93IGRvd24gaGFsZiBhIHNjcmVlbiBpbiB0aGUgZmlsZSwKK3RodXMgc2Nyb2xscyB0aGUgdGV4dCB1cCBoYWxmIGEgc2NyZWVuLgorCisJCQkJICAgICAgICstLS0tLS0tLS0tLS0tLS0tKworCQkJCSAgICAgICB8IHNvbWUgdGV4dAl8CisJCQkJICAgICAgIHwgc29tZSB0ZXh0CXwKKwkJCQkgICAgICAgfCBzb21lIHRleHQJfAorCSstLS0tLS0tLS0tLS0tLS0rCSAgICAgICB8IHNvbWUgdGV4dAl8CisJfCBzb21lIHRleHQJfCAgQ1RSTC1VICAtLT4gfAkJfAorCXwJCXwJICAgICAgIHwgMTIzNDU2CQl8CisJfCAxMjM0NTYJfAkgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0rCisJfCA3ODkwCQl8CisJfAkJfAkgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0rCisJfCBleGFtcGxlCXwgIENUUkwtRCAtLT4gIHwgNzg5MAkJfAorCSstLS0tLS0tLS0tLS0tLS0rCSAgICAgICB8CQl8CisJCQkJICAgICAgIHwgZXhhbXBsZQl8CisJCQkJICAgICAgIHwgZXhhbXBsZQl8CisJCQkJICAgICAgIHwgZXhhbXBsZQl8CisJCQkJICAgICAgIHwgZXhhbXBsZQl8CisJCQkJICAgICAgICstLS0tLS0tLS0tLS0tLS0tKworCitUbyBzY3JvbGwgb25lIGxpbmUgYXQgYSB0aW1lIHVzZSBDVFJMLUUgKHNjcm9sbCB1cCkgYW5kIENUUkwtWSAoc2Nyb2xsIGRvd24pLgorVGhpbmsgb2YgQ1RSTC1FIHRvIGdpdmUgeW91IG9uZSBsaW5lIEV4dHJhLiAgKElmIHlvdSB1c2UgTVMtV2luZG93cyBjb21wYXRpYmxlCitrZXkgbWFwcGluZ3MgQ1RSTC1ZIHdpbGwgcmVkbyBhIGNoYW5nZSBpbnN0ZWFkIG9mIHNjcm9sbC4pCisKK1RvIHNjcm9sbCBmb3J3YXJkIGJ5IGEgd2hvbGUgc2NyZWVuIChleGNlcHQgZm9yIHR3byBsaW5lcykgdXNlIENUUkwtRi4gIFRoZQorb3RoZXIgd2F5IGlzIGJhY2t3YXJkLCBDVFJMLUIgaXMgdGhlIGNvbW1hbmQgdG8gdXNlLiAgRm9ydHVuYXRlbHkgQ1RSTC1GIGlzCitGb3J3YXJkIGFuZCBDVFJMLUIgaXMgQmFja3dhcmQsIHRoYXQncyBlYXN5IHRvIHJlbWVtYmVyLgorCitBIGNvbW1vbiBpc3N1ZSBpcyB0aGF0IGFmdGVyIG1vdmluZyBkb3duIG1hbnkgbGluZXMgd2l0aCAiaiIgeW91ciBjdXJzb3IgaXMgYXQKK3RoZSBib3R0b20gb2YgdGhlIHNjcmVlbi4gIFlvdSB3b3VsZCBsaWtlIHRvIHNlZSB0aGUgY29udGV4dCBvZiB0aGUgbGluZSB3aXRoCit0aGUgY3Vyc29yLiAgVGhhdCdzIGRvbmUgd2l0aCB0aGUgInp6IiBjb21tYW5kLgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLSsJCSArLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgc29tZSB0ZXh0CSAgIHwJCSB8IHNvbWUgdGV4dAkgICAgfAorCXwgc29tZSB0ZXh0CSAgIHwJCSB8IHNvbWUgdGV4dAkgICAgfAorCXwgc29tZSB0ZXh0CSAgIHwJCSB8IHNvbWUgdGV4dAkgICAgfAorCXwgc29tZSB0ZXh0CSAgIHwgICB6eiAgLS0+CSB8IGxpbmUgd2l0aCBjdXJzb3IgfAorCXwgc29tZSB0ZXh0CSAgIHwJCSB8IHNvbWUgdGV4dAkgICAgfAorCXwgc29tZSB0ZXh0CSAgIHwJCSB8IHNvbWUgdGV4dAkgICAgfAorCXwgbGluZSB3aXRoIGN1cnNvciB8CQkgfCBzb21lIHRleHQJICAgIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tKwkJICstLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSAienQiIGNvbW1hbmQgcHV0cyB0aGUgY3Vyc29yIGxpbmUgYXQgdGhlIHRvcCwgInpiIiBhdCB0aGUgYm90dG9tLiAgVGhlcmUKK2FyZSBhIGZldyBtb3JlIHNjcm9sbGluZyBjb21tYW5kcywgc2VlIHxRX3NjfC4gIFRvIGFsd2F5cyBrZWVwIGEgZmV3IGxpbmVzIG9mCitjb250ZXh0IGFyb3VuZCB0aGUgY3Vyc29yLCB1c2UgdGhlICdzY3JvbGxvZmYnIG9wdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDMuOCoJU2ltcGxlIHNlYXJjaGVzCisKK1RvIHNlYXJjaCBmb3IgYSBzdHJpbmcsIHVzZSB0aGUgIi9zdHJpbmciIGNvbW1hbmQuICBUbyBmaW5kIHRoZSB3b3JkIGluY2x1ZGUsCitmb3IgZXhhbXBsZSwgdXNlIHRoZSBjb21tYW5kOiA+CisKKwkvaW5jbHVkZQorCitZb3Ugd2lsbCBub3RpY2UgdGhhdCB3aGVuIHlvdSB0eXBlIHRoZSAiLyIgdGhlIGN1cnNvciBqdW1wcyB0byB0aGUgbGFzdCBsaW5lCitvZiB0aGUgVmltIHdpbmRvdywgbGlrZSB3aXRoIGNvbG9uIGNvbW1hbmRzLiAgVGhhdCBpcyB3aGVyZSB5b3UgdHlwZSB0aGUgd29yZC4KK1lvdSBjYW4gcHJlc3MgdGhlIGJhY2tzcGFjZSBrZXkgKGJhY2thcnJvdyBvciA8QlM+KSB0byBtYWtlIGNvcnJlY3Rpb25zLiAgVXNlCit0aGUgPExlZnQ+IGFuZCA8UmlnaHQ+IGN1cnNvciBrZXlzIHdoZW4gbmVjZXNzYXJ5LgorICAgUHJlc3NpbmcgPEVudGVyPiBleGVjdXRlcyB0aGUgY29tbWFuZC4KKworCU5vdGU6CisJVGhlIGNoYXJhY3RlcnMgLipbXV4lL1w/fiQgaGF2ZSBzcGVjaWFsIG1lYW5pbmcuIElmIHlvdSB3YW50IHRvIHVzZQorCXRoZW0gaW4gYSBzZWFyY2ggeW91IG11c3QgcHV0IGEgXCBpbiBmcm9udCBvZiB0aGVtLiAgU2VlIGJlbG93LgorCitUbyBmaW5kIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIHNhbWUgc3RyaW5nIHVzZSB0aGUgIm4iIGNvbW1hbmQuICBVc2UgdGhpcwordG8gZmluZCB0aGUgZmlyc3QgI2luY2x1ZGUgYWZ0ZXIgdGhlIGN1cnNvcjogPgorCisJLyNpbmNsdWRlCisKK0FuZCB0aGVuIHR5cGUgIm4iIHNldmVyYWwgdGltZXMuICBZb3Ugd2lsbCBtb3ZlIHRvIGVhY2ggI2luY2x1ZGUgaW4gdGhlIHRleHQuCitZb3UgY2FuIGFsc28gdXNlIGEgY291bnQgaWYgeW91IGtub3cgd2hpY2ggbWF0Y2ggeW91IHdhbnQuICBUaHVzICIzbiIgZmluZHMKK3RoZSB0aGlyZCBtYXRjaC4gIFVzaW5nIGEgY291bnQgd2l0aCAiLyIgZG9lc24ndCB3b3JrLgorCitUaGUgIj8iIGNvbW1hbmQgd29ya3MgbGlrZSAiLyIgYnV0IHNlYXJjaGVzIGJhY2t3YXJkczogPgorCisJP3dvcmQKKworVGhlICJOIiBjb21tYW5kIHJlcGVhdHMgdGhlIGxhc3Qgc2VhcmNoIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uICBUaHVzIHVzaW5nCisiTiIgYWZ0ZXIgYSAiLyIgY29tbWFuZCBzZWFyY2ggYmFja3dhcmRzLCB1c2luZyAiTiIgYWZ0ZXIgIj8iIHNlYXJjaGVzCitmb3J3YXJkLgorCisKK0lHTk9SSU5HIENBU0UKKworTm9ybWFsbHkgeW91IGhhdmUgdG8gdHlwZSBleGFjdGx5IHdoYXQgeW91IHdhbnQgdG8gZmluZC4gIElmIHlvdSBkb24ndCBjYXJlCithYm91dCB1cHBlciBvciBsb3dlcmNhc2UgaW4gYSB3b3JkLCBzZXQgdGhlICdpZ25vcmVjYXNlJyBvcHRpb246ID4KKworCTpzZXQgaWdub3JlY2FzZQorCitJZiB5b3Ugbm93IHNlYXJjaCBmb3IgIndvcmQiLCBpdCB3aWxsIGFsc28gbWF0Y2ggIldvcmQiIGFuZCAiV09SRCIuICBUbyBtYXRjaAorY2FzZSBhZ2FpbjogPgorCisJOnNldCBub2lnbm9yZWNhc2UKKworCitISVNUT1JZCisKK1N1cHBvc2UgeW91IGRvIHRocmVlIHNlYXJjaGVzOiA+CisKKwkvb25lCisJL3R3bworCS90aHJlZQorCitOb3cgbGV0J3Mgc3RhcnQgc2VhcmNoaW5nIGJ5IHR5cGluZyBhIHNpbXBsZSAiLyIgd2l0aG91dCBwcmVzc2luZyA8RW50ZXI+LiAgSWYKK3lvdSBwcmVzcyA8VXA+ICh0aGUgY3Vyc29yIGtleSksIFZpbSBwdXRzICIvdGhyZWUiIG9uIHRoZSBjb21tYW5kIGxpbmUuCitQcmVzc2luZyA8RW50ZXI+IGF0IHRoaXMgcG9pbnQgc2VhcmNoZXMgZm9yIHRocmVlLiAgSWYgeW91IGRvIG5vdCBwcmVzcworPEVudGVyPiwgYnV0IHByZXNzIDxVcD4gaW5zdGVhZCwgVmltIGNoYW5nZXMgdGhlIHByb21wdCB0byAiL3R3byIuICBBbm90aGVyCitwcmVzcyBvZiA8VXA+IG1vdmVzIHlvdSB0byAiL29uZSIuCisgICBZb3UgY2FuIGFsc28gdXNlIHRoZSA8RG93bj4gY3Vyc29yIGtleSB0byBtb3ZlIHRocm91Z2ggdGhlIGhpc3Rvcnkgb2YKK3NlYXJjaCBjb21tYW5kcyBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLgorCitJZiB5b3Uga25vdyB3aGF0IGEgcHJldmlvdXNseSB1c2VkIHBhdHRlcm4gc3RhcnRzIHdpdGgsIGFuZCB5b3Ugd2FudCB0byB1c2UgaXQKK2FnYWluLCB0eXBlIHRoYXQgY2hhcmFjdGVyIGJlZm9yZSBwcmVzc2luZyA8VXA+LiAgV2l0aCB0aGUgcHJldmlvdXMgZXhhbXBsZSwKK3lvdSBjYW4gdHlwZSAiL288VXA+IiBhbmQgVmltIHdpbGwgcHV0ICIvb25lIiBvbiB0aGUgY29tbWFuZCBsaW5lLgorCitUaGUgY29tbWFuZHMgc3RhcnRpbmcgd2l0aCAiOiIgYWxzbyBoYXZlIGEgaGlzdG9yeS4gIFRoYXQgYWxsb3dzIHlvdSB0byByZWNhbGwKK2EgcHJldmlvdXMgY29tbWFuZCBhbmQgZXhlY3V0ZSBpdCBhZ2Fpbi4gIFRoZXNlIHR3byBoaXN0b3JpZXMgYXJlIHNlcGFyYXRlLgorCisKK1NFQVJDSElORyBGT1IgQSBXT1JEIElOIFRIRSBURVhUCisKK1N1cHBvc2UgeW91IHNlZSB0aGUgd29yZCAiVGhlTG9uZ0Z1bmN0aW9uTmFtZSIgaW4gdGhlIHRleHQgYW5kIHlvdSB3YW50IHRvCitmaW5kIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgaXQuICBZb3UgY291bGQgdHlwZSAiL1RoZUxvbmdGdW5jdGlvbk5hbWUiLCBidXQKK3RoYXQncyBhIGxvdCBvZiB0eXBpbmcuICBBbmQgd2hlbiB5b3UgbWFrZSBhIG1pc3Rha2UgVmltIHdvbid0IGZpbmQgaXQuCisgICBUaGVyZSBpcyBhbiBlYXNpZXIgd2F5OiBQb3NpdGlvbiB0aGUgY3Vyc29yIG9uIHRoZSB3b3JkIGFuZCB1c2UgdGhlICIqIgorY29tbWFuZC4gIFZpbSB3aWxsIGdyYWIgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciBhbmQgdXNlIGl0IGFzIHRoZSBzZWFyY2gKK3N0cmluZy4KKyAgIFRoZSAiIyIgY29tbWFuZCBkb2VzIHRoZSBzYW1lIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uICBZb3UgY2FuIHByZXBlbmQgYQorY291bnQ6ICIzKiIgc2VhcmNoZXMgZm9yIHRoZSB0aGlyZCBvY2N1cnJlbmNlIG9mIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuCisKKworU0VBUkNISU5HIEZPUiBXSE9MRSBXT1JEUworCitJZiB5b3UgdHlwZSAiL3RoZSIgaXQgd2lsbCBhbHNvIG1hdGNoICJ0aGVyZSIuICBUbyBvbmx5IGZpbmQgd29yZHMgdGhhdCBlbmQKK2luICJ0aGUiIHVzZTogPgorCisJL3RoZVw+CisKK1RoZSAiXD4iIGl0ZW0gaXMgYSBzcGVjaWFsIG1hcmtlciB0aGF0IG9ubHkgbWF0Y2hlcyBhdCB0aGUgZW5kIG9mIGEgd29yZC4KK1NpbWlsYXJseSAiXDwiIG9ubHkgbWF0Y2hlcyBhdCB0aGUgYmVnaW4gb2YgYSB3b3JkLiAgVGh1cyB0byBzZWFyY2ggZm9yIHRoZQord29yZCAidGhlIiBvbmx5OiA+CisKKwkvXDx0aGVcPgorCitUaGlzIGRvZXMgbm90IG1hdGNoICJ0aGVyZSIgb3IgInNvb3RoZSIuICBOb3RpY2UgdGhhdCB0aGUgIioiIGFuZCAiIyIgY29tbWFuZHMKK3VzZSB0aGVzZSBzdGFydC1vZi13b3JkIGFuZCBlbmQtb2Ytd29yZCBtYXJrZXJzIHRvIG9ubHkgZmluZCB3aG9sZSB3b3JkcyAoeW91CitjYW4gdXNlICJnKiIgYW5kICJnIyIgdG8gbWF0Y2ggcGFydGlhbCB3b3JkcykuCisKKworSElHSExJR0hUSU5HIE1BVENIRVMKKworV2hpbGUgZWRpdGluZyBhIHByb2dyYW0geW91IHNlZSBhIHZhcmlhYmxlIGNhbGxlZCAibnIiLiAgWW91IHdhbnQgdG8gY2hlY2sKK3doZXJlIGl0J3MgdXNlZC4gIFlvdSBjb3VsZCBtb3ZlIHRoZSBjdXJzb3IgdG8gIm5yIiBhbmQgdXNlIHRoZSAiKiIgY29tbWFuZAorYW5kIHByZXNzICJuIiB0byBnbyBhbG9uZyBhbGwgdGhlIG1hdGNoZXMuCisgICBUaGVyZSBpcyBhbm90aGVyIHdheS4gIFR5cGUgdGhpcyBjb21tYW5kOiA+CisKKwk6c2V0IGhsc2VhcmNoCisKK0lmIHlvdSBub3cgc2VhcmNoIGZvciAibnIiLCBWaW0gd2lsbCBoaWdobGlnaHQgYWxsIG1hdGNoZXMuICBUaGF0IGlzIGEgdmVyeQorZ29vZCB3YXkgdG8gc2VlIHdoZXJlIHRoZSB2YXJpYWJsZSBpcyB1c2VkLCB3aXRob3V0IHRoZSBuZWVkIHRvIHR5cGUgY29tbWFuZHMuCisgICBUbyBzd2l0Y2ggdGhpcyBvZmY6ID4KKworCTpzZXQgbm9obHNlYXJjaAorCitUaGVuIHlvdSBuZWVkIHRvIHN3aXRjaCBpdCBvbiBhZ2FpbiBpZiB5b3Ugd2FudCB0byB1c2UgaXQgZm9yIHRoZSBuZXh0IHNlYXJjaAorY29tbWFuZC4gIElmIHlvdSBvbmx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBoaWdobGlnaHRpbmcsIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpub2hsc2VhcmNoCisKK1RoaXMgZG9lc24ndCByZXNldCB0aGUgb3B0aW9uLiAgSW5zdGVhZCwgaXQgZGlzYWJsZXMgdGhlIGhpZ2hsaWdodGluZy4gIEFzCitzb29uIGFzIHlvdSBleGVjdXRlIGEgc2VhcmNoIGNvbW1hbmQsIHRoZSBoaWdobGlnaHRpbmcgd2lsbCBiZSB1c2VkIGFnYWluLgorQWxzbyBmb3IgdGhlICJuIiBhbmQgIk4iIGNvbW1hbmRzLgorCisKK1RVTklORyBTRUFSQ0hFUworCitUaGVyZSBhcmUgYSBmZXcgb3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgc2VhcmNoaW5nIHdvcmtzLiAgVGhlc2UgYXJlIHRoZQorZXNzZW50aWFsIG9uZXM6Cis+CisJOnNldCBpbmNzZWFyY2gKKworVGhpcyBtYWtlcyBWaW0gZGlzcGxheSB0aGUgbWF0Y2ggZm9yIHRoZSBzdHJpbmcgd2hpbGUgeW91IGFyZSBzdGlsbCB0eXBpbmcgaXQuCitVc2UgdGhpcyB0byBjaGVjayBpZiB0aGUgcmlnaHQgbWF0Y2ggd2lsbCBiZSBmb3VuZC4gIFRoZW4gcHJlc3MgPEVudGVyPiB0bworcmVhbGx5IGp1bXAgdG8gdGhhdCBsb2NhdGlvbi4gIE9yIHR5cGUgbW9yZSB0byBjaGFuZ2UgdGhlIHNlYXJjaCBzdHJpbmcuCis+CisJOnNldCBub3dyYXBzY2FuCisKK1RoaXMgc3RvcHMgdGhlIHNlYXJjaCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgT3IsIHdoZW4geW91IGFyZSBzZWFyY2hpbmcKK2JhY2t3YXJkcywgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLiAgVGhlICd3cmFwc2Nhbicgb3B0aW9uIGlzIG9uIGJ5IGRlZmF1bHQsCit0aHVzIHNlYXJjaGluZyB3cmFwcyBhcm91bmQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKworCitJTlRFUk1FWlpPCisKK0lmIHlvdSBsaWtlIG9uZSBvZiB0aGUgb3B0aW9ucyBtZW50aW9uZWQgYmVmb3JlLCBhbmQgc2V0IGl0IGVhY2ggdGltZSB5b3UgdXNlCitWaW0sIHlvdSBjYW4gcHV0IHRoZSBjb21tYW5kIGluIHlvdXIgVmltIHN0YXJ0dXAgZmlsZS4KKyAgIEVkaXQgdGhlIGZpbGUsIGFzIG1lbnRpb25lZCBhdCB8bm90LWNvbXBhdGlibGV8LiAgT3IgdXNlIHRoaXMgY29tbWFuZCB0bworZmluZCBvdXQgd2hlcmUgaXQgaXM6ID4KKworCTpzY3JpcHRuYW1lcworCitFZGl0IHRoZSBmaWxlLCBmb3IgZXhhbXBsZSB3aXRoOiA+CisKKwk6ZWRpdCB+Ly52aW1yYworCitUaGVuIGFkZCBhIGxpbmUgd2l0aCB0aGUgY29tbWFuZCB0byBzZXQgdGhlIG9wdGlvbiwganVzdCBsaWtlIHlvdSB0eXBlZCBpdCBpbgorVmltLiAgRXhhbXBsZTogPgorCisJR286c2V0IGhsc2VhcmNoPEVzYz4KKworIkciIG1vdmVzIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuICAibyIgc3RhcnRzIGEgbmV3IGxpbmUsIHdoZXJlIHlvdSB0eXBlIHRoZQorIjpzZXQiIGNvbW1hbmQuICBZb3UgZW5kIGluc2VydCBtb2RlIHdpdGggPEVzYz4uICBUaGVuIHdyaXRlIHRoZSBmaWxlOiA+CisKKwlaWgorCitJZiB5b3Ugbm93IHN0YXJ0IFZpbSBhZ2FpbiwgdGhlICdobHNlYXJjaCcgb3B0aW9uIHdpbGwgYWxyZWFkeSBiZSBzZXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAzLjkqCVNpbXBsZSBzZWFyY2ggcGF0dGVybnMKKworVGhlIFZpbSBlZGl0b3IgdXNlcyByZWd1bGFyIGV4cHJlc3Npb25zIHRvIHNwZWNpZnkgd2hhdCB0byBzZWFyY2ggZm9yLgorUmVndWxhciBleHByZXNzaW9ucyBhcmUgYW4gZXh0cmVtZWx5IHBvd2VyZnVsIGFuZCBjb21wYWN0IHdheSB0byBzcGVjaWZ5IGEKK3NlYXJjaCBwYXR0ZXJuLiAgVW5mb3J0dW5hdGVseSwgdGhpcyBwb3dlciBjb21lcyBhdCBhIHByaWNlLCBiZWNhdXNlIHJlZ3VsYXIKK2V4cHJlc3Npb25zIGFyZSBhIGJpdCB0cmlja3kgdG8gc3BlY2lmeS4KKyAgIEluIHRoaXMgc2VjdGlvbiB3ZSBtZW50aW9uIG9ubHkgYSBmZXcgZXNzZW50aWFsIG9uZXMuICBNb3JlIGFib3V0IHNlYXJjaAorcGF0dGVybnMgYW5kIGNvbW1hbmRzIGluIGNoYXB0ZXIgMjcgfHVzcl8yNy50eHR8LiAgWW91IGNhbiBmaW5kIHRoZSBmdWxsCitleHBsYW5hdGlvbiBoZXJlOiB8cGF0dGVybnwuCisKKworQkVHSU5OSU5HIEFORCBFTkQgT0YgQSBMSU5FCisKK1RoZSBeIGNoYXJhY3RlciBtYXRjaGVzIHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLiAgT24gYW4gRW5nbGlzaC1VUyBrZXlib2FyZAoreW91IGZpbmQgaXQgYWJvdmUgdGhlIDYuICBUaGUgcGF0dGVybiAiaW5jbHVkZSIgbWF0Y2hlcyB0aGUgd29yZCBpbmNsdWRlCithbnl3aGVyZSBvbiB0aGUgbGluZS4gIEJ1dCB0aGUgcGF0dGVybiAiXmluY2x1ZGUiIG1hdGNoZXMgdGhlIHdvcmQgaW5jbHVkZQorb25seSBpZiBpdCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKyAgIFRoZSAkIGNoYXJhY3RlciBtYXRjaGVzIHRoZSBlbmQgb2YgYSBsaW5lLiAgVGhlcmVmb3JlLCAid2FzJCIgbWF0Y2hlcyB0aGUKK3dvcmQgd2FzIG9ubHkgaWYgaXQgaXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUuCisKK0xldCdzIG1hcmsgdGhlIHBsYWNlcyB3aGVyZSAidGhlIiBtYXRjaGVzIGluIHRoaXMgZXhhbXBsZSBsaW5lIHdpdGggIngiczoKKworCXRoZSBzb2xkZXIgaG9sZGluZyBvbmUgb2YgdGhlIGNoaXBzIG1lbHRlZCBhbmQgdGhlIH4KKwl4eHgJCQkgIHh4eAkJICAgICAgIHh4eAorCitVc2luZyAiL3RoZSQiIHdlIGZpbmQgdGhpcyBtYXRjaDoKKworCXRoZSBzb2xkZXIgaG9sZGluZyBvbmUgb2YgdGhlIGNoaXBzIG1lbHRlZCBhbmQgdGhlIH4KKwkJCQkJCSAgICAgICB4eHgKKworQW5kIHdpdGggIi9edGhlIiB3ZSBmaW5kIHRoaXMgb25lOgorCXRoZSBzb2xkZXIgaG9sZGluZyBvbmUgb2YgdGhlIGNoaXBzIG1lbHRlZCBhbmQgdGhlIH4KKwl4eHgKKworWW91IGNhbiB0cnkgc2VhcmNoaW5nIHdpdGggIi9edGhlJCIsIGl0IHdpbGwgb25seSBtYXRjaCBhIHNpbmdsZSBsaW5lCitjb25zaXN0aW5nIG9mICJ0aGUiLiAgV2hpdGUgc3BhY2UgZG9lcyBtYXR0ZXIgaGVyZSwgdGh1cyBpZiBhIGxpbmUgY29udGFpbnMgYQorc3BhY2UgYWZ0ZXIgdGhlIHdvcmQsIGxpa2UgInRoZSAiLCB0aGUgcGF0dGVybiB3aWxsIG5vdCBtYXRjaC4KKworCitNQVRDSElORyBBTlkgU0lOR0xFIENIQVJBQ1RFUgorCitUaGUgLiAoZG90KSBjaGFyYWN0ZXIgbWF0Y2hlcyBhbnkgZXhpc3RpbmcgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUsIHRoZQorcGF0dGVybiAiYy5tIiBtYXRjaGVzIGEgc3RyaW5nIHdob3NlIGZpcnN0IGNoYXJhY3RlciBpcyBhIGMsIHdob3NlIHNlY29uZAorY2hhcmFjdGVyIGlzIGFueXRoaW5nLCBhbmQgd2hvc2UgdGhlIHRoaXJkIGNoYXJhY3RlciBpcyBtLiAgRXhhbXBsZToKKworCVdlIHVzZSBhIGNvbXB1dGVyIHRoYXQgYmVjYW1lIHRoZSBjdW1taW4gd2ludGVyLiB+CisJCSB4eHgJCSB4eHgJICB4eHgKKworCitNQVRDSElORyBTUEVDSUFMIENIQVJBQ1RFUlMKKworSWYgeW91IHJlYWxseSB3YW50IHRvIG1hdGNoIGEgZG90LCB5b3UgbXVzdCBhdm9pZCBpdHMgc3BlY2lhbCBtZWFuaW5nIGJ5CitwdXR0aW5nIGEgYmFja3NsYXNoIGJlZm9yZSBpdC4KKyAgIElmIHlvdSBzZWFyY2ggZm9yICJ0ZXIuIiwgeW91IHdpbGwgZmluZCB0aGVzZSBtYXRjaGVzOgorCisJV2UgdXNlIGEgY29tcHV0ZXIgdGhhdCBiZWNhbWUgdGhlIGN1bW1pbiB3aW50ZXIuIH4KKwkJICAgICAgeHh4eAkJCSAgICB4eHh4CisKK1NlYXJjaGluZyBmb3IgInRlclwuIiBvbmx5IGZpbmRzIHRoZSBzZWNvbmQgbWF0Y2guCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAzLjEwKglVc2luZyBtYXJrcworCitXaGVuIHlvdSBtYWtlIGEganVtcCB0byBhIHBvc2l0aW9uIHdpdGggdGhlICJHIiBjb21tYW5kLCBWaW0gcmVtZW1iZXJzIHRoZQorcG9zaXRpb24gZnJvbSBiZWZvcmUgdGhpcyBqdW1wLiAgVGhpcyBwb3NpdGlvbiBpcyBjYWxsZWQgYSBtYXJrLiAgVG8gZ28gYmFjaword2hlcmUgeW91IGNhbWUgZnJvbSwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJYGAKKworVGhpcyBgIGlzIGEgYmFja3RpY2sgb3Igb3BlbiBzaW5nbGUtcXVvdGUgY2hhcmFjdGVyLgorICAgSWYgeW91IHVzZSB0aGUgc2FtZSBjb21tYW5kIGEgc2Vjb25kIHRpbWUgeW91IHdpbGwganVtcCBiYWNrIGFnYWluLiAgVGhhdCdzCitiZWNhdXNlIHRoZSBgIGNvbW1hbmQgaXMgYSBqdW1wIGl0c2VsZiwgYW5kIHRoZSBwb3NpdGlvbiBmcm9tIGJlZm9yZSB0aGlzIGp1bXAKK2lzIHJlbWVtYmVyZWQuCisKK0dlbmVyYWxseSwgZXZlcnkgdGltZSB5b3UgZG8gYSBjb21tYW5kIHRoYXQgY2FuIG1vdmUgdGhlIGN1cnNvciBmdXJ0aGVyIHRoYW4KK3dpdGhpbiB0aGUgc2FtZSBsaW5lLCB0aGlzIGlzIGNhbGxlZCBhIGp1bXAuICBUaGlzIGluY2x1ZGVzIHRoZSBzZWFyY2gKK2NvbW1hbmRzICIvIiBhbmQgIm4iIChpdCBkb2Vzbid0IG1hdHRlciBob3cgZmFyIGF3YXkgdGhlIG1hdGNoIGlzKS4gIEJ1dCBub3QKK3RoZSBjaGFyYWN0ZXIgc2VhcmNoZXMgd2l0aCAiZngiIGFuZCAidHgiIG9yIHRoZSB3b3JkIG1vdmVtZW50cyAidyIgYW5kICJlIi4KKyAgIEFsc28sICJqIiBhbmQgImsiIGFyZSBub3QgY29uc2lkZXJlZCB0byBiZSBhIGp1bXAuICBFdmVuIHdoZW4geW91IHVzZSBhCitjb3VudCB0byBtYWtlIHRoZW0gbW92ZSB0aGUgY3Vyc29yIHF1aXRlIGEgbG9uZyB3YXkgYXdheS4KKworVGhlIGBgIGNvbW1hbmQganVtcHMgYmFjayBhbmQgZm9ydGgsIGJldHdlZW4gdHdvIHBvaW50cy4gIFRoZSBDVFJMLU8gY29tbWFuZAoranVtcHMgdG8gb2xkZXIgcG9zaXRpb25zIChIaW50OiBPIGZvciBvbGRlcikuICBDVFJMLUkgdGhlbiBqdW1wcyBiYWNrIHRvIG5ld2VyCitwb3NpdGlvbnMgKEhpbnQ6IEkgaXMganVzdCBuZXh0IHRvIE8gb24gdGhlIGtleWJvYXJkKS4gIENvbnNpZGVyIHRoaXMgc2VxdWVuY2UKK29mIGNvbW1hbmRzOiA+CisKKwkzM0cKKwkvXlRoZQorCUNUUkwtTworCitZb3UgZmlyc3QganVtcCB0byBsaW5lIDMzLCB0aGVuIHNlYXJjaCBmb3IgYSBsaW5lIHRoYXQgc3RhcnRzIHdpdGggIlRoZSIuCitUaGVuIHdpdGggQ1RSTC1PIHlvdSBqdW1wIGJhY2sgdG8gbGluZSAzMy4gIEFub3RoZXIgQ1RSTC1PIHRha2VzIHlvdSBiYWNrIHRvCit3aGVyZSB5b3Ugc3RhcnRlZC4gIElmIHlvdSBub3cgdXNlIENUUkwtSSB5b3UganVtcCB0byBsaW5lIDMzIGFnYWluLiAgQW5kCit0byB0aGUgbWF0Y2ggZm9yICJUaGUiIHdpdGggYW5vdGhlciBDVFJMLUkuCisKKworCSAgICAgfAlleGFtcGxlIHRleHQgICBeCSAgICAgfAorCTMzRyAgfAlleGFtcGxlIHRleHQgICB8ICBDVFJMLU8gICAgIHwgQ1RSTC1JCisJICAgICB8CWV4YW1wbGUgdGV4dCAgIHwJICAgICB8CisJICAgICBWCWxpbmUgMzMgdGV4dCAgIF4JICAgICBWCisJICAgICB8CWV4YW1wbGUgdGV4dCAgIHwJICAgICB8CisgICAgICAgL15UaGUgfAlleGFtcGxlIHRleHQgICB8ICBDVFJMLU8gICAgIHwgQ1RSTC1JCisJICAgICBWCVRoZXJlIHlvdSBhcmUgIHwJICAgICBWCisJCWV4YW1wbGUgdGV4dAorCisJTm90ZToKKwlDVFJMLUkgaXMgdGhlIHNhbWUgYXMgPFRhYj4uCisKK1RoZSAiOmp1bXBzIiBjb21tYW5kIGdpdmVzIGEgbGlzdCBvZiBwb3NpdGlvbnMgeW91IGp1bXBlZCB0by4gIFRoZSBlbnRyeSB3aGljaAoreW91IHVzZWQgbGFzdCBpcyBtYXJrZWQgd2l0aCBhICI+Ii4KKworCitOQU1FRCBNQVJLUworCitWaW0gZW5hYmxlcyB5b3UgdG8gcGxhY2UgeW91ciBvd24gbWFya3MgaW4gdGhlIHRleHQuICBUaGUgY29tbWFuZCAibWEiIG1hcmtzCit0aGUgcGxhY2UgdW5kZXIgdGhlIGN1cnNvciBhcyBtYXJrIGEuICBZb3UgY2FuIHBsYWNlIDI2IG1hcmtzIChhIHRocm91Z2ggeikgaW4KK3lvdXIgdGV4dC4gIFlvdSBjYW4ndCBzZWUgdGhlbSwgaXQncyBqdXN0IGEgcG9zaXRpb24gdGhhdCBWaW0gcmVtZW1iZXJzLgorICAgVG8gZ28gdG8gYSBtYXJrLCB1c2UgdGhlIGNvbW1hbmQgYHttYXJrfSwgd2hlcmUgInttYXJrfSBpcyB0aGUgbWFyayBsZXR0ZXIuCitUaHVzIHRvIG1vdmUgdG8gdGhlIGEgbWFyazoKKz4KKwlgYQorCitUaGUgY29tbWFuZCAnbWFyayAoc2luZ2xlIHF1b3RhdGlvbiBtYXJrLCBvciBhcG9zdHJvcGhlKSBtb3ZlcyB5b3UgdG8gdGhlCitiZWdpbm5pbmcgb2YgdGhlIGxpbmUgY29udGFpbmluZyB0aGUgbWFyay4gIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBgbWFyaworY29tbWFuZCwgd2hpY2ggbW92ZXMgeW91IHRvIG1hcmtlZCBjb2x1bW4uCisKK1RoZSBtYXJrcyBjYW4gYmUgdmVyeSB1c2VmdWwgd2hlbiB3b3JraW5nIG9uIHR3byByZWxhdGVkIHBhcnRzIGluIGEgZmlsZS4KK1N1cHBvc2UgeW91IGhhdmUgc29tZSB0ZXh0IG5lYXIgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIHlvdSBuZWVkIHRvIGxvb2sgYXQsCit3aGlsZSB3b3JraW5nIG9uIHNvbWUgdGV4dCBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUuCisgICBNb3ZlIHRvIHRoZSB0ZXh0IGF0IHRoZSBzdGFydCBhbmQgcGxhY2UgdGhlIHMgKHN0YXJ0KSBtYXJrIHRoZXJlOiA+CisKKwltcworCitUaGUgbW92ZSB0byB0aGUgdGV4dCB5b3Ugd2FudCB0byB3b3JrIG9uIGFuZCBwdXQgdGhlIGUgKGVuZCkgbWFyayB0aGVyZTogPgorCisJbWUKKworTm93IHlvdSBjYW4gbW92ZSBhcm91bmQsIGFuZCB3aGVuIHlvdSB3YW50IHRvIGxvb2sgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLAoreW91IHVzZSB0aGlzIHRvIGp1bXAgdGhlcmU6ID4KKworCSdzCisKK1RoZW4geW91IGNhbiB1c2UgJycgdG8ganVtcCBiYWNrIHRvIHdoZXJlIHlvdSB3ZXJlLCBvciAnZSB0byBqdW1wIHRvIHRoZSB0ZXh0Cit5b3Ugd2VyZSB3b3JraW5nIG9uIGF0IHRoZSBlbmQuCisgICBUaGVyZSBpcyBub3RoaW5nIHNwZWNpYWwgYWJvdXQgdXNpbmcgcyBmb3Igc3RhcnQgYW5kIGUgZm9yIGVuZCwgdGhleSBhcmUKK2p1c3QgZWFzeSB0byByZW1lbWJlci4KKworWW91IGNhbiB1c2UgdGhpcyBjb21tYW5kIHRvIGdldCBhIGxpc3Qgb2YgbWFya3M6ID4KKworCTptYXJrcworCitZb3Ugd2lsbCBub3RpY2UgYSBmZXcgc3BlY2lhbCBtYXJrcy4gIFRoZXNlIGluY2x1ZGU6CisKKwknCVRoZSBjdXJzb3IgcG9zaXRpb24gYmVmb3JlIGRvaW5nIGEganVtcAorCSIJVGhlIGN1cnNvciBwb3NpdGlvbiB3aGVuIGxhc3QgZWRpdGluZyB0aGUgZmlsZQorCVsJU3RhcnQgb2YgdGhlIGxhc3QgY2hhbmdlCisJXQlFbmQgb2YgdGhlIGxhc3QgY2hhbmdlCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMDQudHh0fCAgTWFraW5nIHNtYWxsIGNoYW5nZXMKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMDQudHh0IGIvcnVudGltZS9kb2MvdXNyXzA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTllMjc4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzA0LnR4dApAQCAtMCwwICsxLDUxNCBAQAorKnVzcl8wNC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1biAwOAorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICBNYWtpbmcgc21hbGwgY2hhbmdlcworCisKK1RoaXMgY2hhcHRlciBzaG93cyB5b3Ugc2V2ZXJhbCB3YXlzIG9mIG1ha2luZyBjb3JyZWN0aW9ucyBhbmQgbW92aW5nIHRleHQKK2Fyb3VuZC4gIEl0IHRlYWNoZXMgeW91IHRoZSB0aHJlZSBiYXNpYyB3YXlzIHRvIGNoYW5nZSB0ZXh0OiBvcGVyYXRvci1tb3Rpb24sCitWaXN1YWwgbW9kZSBhbmQgdGV4dCBvYmplY3RzLgorCit8MDQuMXwJT3BlcmF0b3JzIGFuZCBtb3Rpb25zCit8MDQuMnwJQ2hhbmdpbmcgdGV4dAorfDA0LjN8CVJlcGVhdGluZyBhIGNoYW5nZQorfDA0LjR8CVZpc3VhbCBtb2RlCit8MDQuNXwJTW92aW5nIHRleHQKK3wwNC42fAlDb3B5aW5nIHRleHQKK3wwNC43fAlVc2luZyB0aGUgY2xpcGJvYXJkCit8MDQuOHwJVGV4dCBvYmplY3RzCit8MDQuOXwJUmVwbGFjZSBtb2RlCit8MDQuMTB8CUNvbmNsdXNpb24KKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMDUudHh0fCAgU2V0IHlvdXIgc2V0dGluZ3MKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzAzLnR4dHwgIE1vdmluZyBhcm91bmQKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA0LjEqCU9wZXJhdG9ycyBhbmQgbW90aW9ucworCitJbiBjaGFwdGVyIDIgeW91IGxlYXJuZWQgdGhlICJ4IiBjb21tYW5kIHRvIGRlbGV0ZSBhIHNpbmdsZSBjaGFyYWN0ZXIuICBBbmQKK3VzaW5nIGEgY291bnQ6ICI0eCIgZGVsZXRlcyBmb3VyIGNoYXJhY3RlcnMuCisgICBUaGUgImR3IiBjb21tYW5kIGRlbGV0ZXMgYSB3b3JkLiAgWW91IG1heSByZWNvZ25pemUgdGhlICJ3IiBjb21tYW5kIGFzIHRoZQorbW92ZSB3b3JkIGNvbW1hbmQuICBJbiBmYWN0LCB0aGUgImQiIGNvbW1hbmQgbWF5IGJlIGZvbGxvd2VkIGJ5IGFueSBtb3Rpb24KK2NvbW1hbmQsIGFuZCBpdCBkZWxldGVzIGZyb20gdGhlIGN1cnJlbnQgbG9jYXRpb24gdG8gdGhlIHBsYWNlIHdoZXJlIHRoZQorY3Vyc29yIHdpbmRzIHVwLgorICAgVGhlICI0dyIgY29tbWFuZCwgZm9yIGV4YW1wbGUsIG1vdmVzIHRoZSBjdXJzb3Igb3ZlciBmb3VyIHdvcmRzLiAgVGhlIGQ0dworY29tbWFuZCBkZWxldGVzIGZvdXIgd29yZHMuCisKKwlUbyBlcnIgaXMgaHVtYW4uIFRvIHJlYWxseSBmb3VsIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuIH4KKwkJCSAtLS0tLS0tLS0tLS0tLS0tLS0+CisJCQkJIGQ0dworCisJVG8gZXJyIGlzIGh1bWFuLiB5b3UgbmVlZCBhIGNvbXB1dGVyLiB+CisKK1ZpbSBvbmx5IGRlbGV0ZXMgdXAgdG8gdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBtb3Rpb24gdGFrZXMgdGhlIGN1cnNvci4gIFRoYXQncworYmVjYXVzZSBWaW0ga25vd3MgdGhhdCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBkZWxldGUgdGhlIGZpcnN0IGNoYXJhY3Rlcgorb2YgYSB3b3JkLiAgSWYgeW91IHVzZSB0aGUgImUiIGNvbW1hbmQgdG8gbW92ZSB0byB0aGUgZW5kIG9mIGEgd29yZCwgVmltCitndWVzc2VzIHRoYXQgeW91IGRvIHdhbnQgdG8gaW5jbHVkZSB0aGF0IGxhc3QgY2hhcmFjdGVyOgorCisJVG8gZXJyIGlzIGh1bWFuLiB5b3UgbmVlZCBhIGNvbXB1dGVyLiB+CisJCQktLS0tLS0tLT4KKwkJCSAgIGQyZQorCisJVG8gZXJyIGlzIGh1bWFuLiBhIGNvbXB1dGVyLiB+CisKK1doZXRoZXIgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIGlzIGluY2x1ZGVkIGRlcGVuZHMgb24gdGhlIGNvbW1hbmQgeW91Cit1c2VkIHRvIG1vdmUgdG8gdGhhdCBjaGFyYWN0ZXIuICBUaGUgcmVmZXJlbmNlIG1hbnVhbCBjYWxscyB0aGlzICJleGNsdXNpdmUiCit3aGVuIHRoZSBjaGFyYWN0ZXIgaXNuJ3QgaW5jbHVkZWQgYW5kICJpbmNsdXNpdmUiIHdoZW4gaXQgaXMuCisKK1RoZSAiJCIgY29tbWFuZCBtb3ZlcyB0byB0aGUgZW5kIG9mIGEgbGluZS4gIFRoZSAiZCQiIGNvbW1hbmQgZGVsZXRlcyBmcm9tIHRoZQorY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuICBUaGlzIGlzIGFuIGluY2x1c2l2ZSBtb3Rpb24sIHRodXMgdGhlIGxhc3QKK2NoYXJhY3RlciBvZiB0aGUgbGluZSBpcyBpbmNsdWRlZCBpbiB0aGUgZGVsZXRlIG9wZXJhdGlvbjoKKworCVRvIGVyciBpcyBodW1hbi4gYSBjb21wdXRlci4gfgorCQkgICAgICAgLS0tLS0tLS0tLS0tPgorCQkJICAgIGQkCisKKwlUbyBlcnIgaXMgaHVtYW4gfgorCitUaGVyZSBpcyBhIHBhdHRlcm4gaGVyZTogb3BlcmF0b3ItbW90aW9uLiAgWW91IGZpcnN0IHR5cGUgYW4gb3BlcmF0b3IgY29tbWFuZC4KK0ZvciBleGFtcGxlLCAiZCIgaXMgdGhlIGRlbGV0ZSBvcGVyYXRvci4gIFRoZW4geW91IHR5cGUgYSBtb3Rpb24gY29tbWFuZCBsaWtlCisiNGwiIG9yICJ3Ii4gIFRoaXMgd2F5IHlvdSBjYW4gb3BlcmF0ZSBvbiBhbnkgdGV4dCB5b3UgY2FuIG1vdmUgb3Zlci4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDQuMioJQ2hhbmdpbmcgdGV4dAorCitBbm90aGVyIG9wZXJhdG9yIGlzICJjIiwgY2hhbmdlLiAgSXQgYWN0cyBqdXN0IGxpa2UgdGhlICJkIiBvcGVyYXRvciwgZXhjZXB0CitpdCBsZWF2ZXMgeW91IGluIEluc2VydCBtb2RlLiAgRm9yIGV4YW1wbGUsICJjdyIgY2hhbmdlcyBhIHdvcmQuICBPciBtb3JlCitzcGVjaWZpY2FsbHksIGl0IGRlbGV0ZXMgYSB3b3JkIGFuZCB0aGVuIHB1dHMgeW91IGluIEluc2VydCBtb2RlLgorCisJVG8gZXJyIGlzIGh1bWFuIH4KKwkgICAtLS0tLS0tPgorCSAgICAgYzJ3YmU8RXNjPgorCisJVG8gYmUgaHVtYW4gfgorCitUaGlzICJjMndiZTxFc2M+IiBjb250YWlucyB0aGVzZSBiaXRzOgorCisJYwl0aGUgY2hhbmdlIG9wZXJhdG9yCisJMncJbW92ZSB0d28gd29yZHMgKHRoZXkgYXJlIGRlbGV0ZWQgYW5kIEluc2VydCBtb2RlIHN0YXJ0ZWQpCisJYmUJaW5zZXJ0IHRoaXMgdGV4dAorCTxFc2M+CWJhY2sgdG8gTm9ybWFsIG1vZGUKKworSWYgeW91IGhhdmUgcGFpZCBhdHRlbnRpb24sIHlvdSB3aWxsIGhhdmUgbm90aWNlZCBzb21ldGhpbmcgc3RyYW5nZTogVGhlIHNwYWNlCitiZWZvcmUgImh1bWFuIiBpc24ndCBkZWxldGVkLiAgVGhlcmUgaXMgYSBzYXlpbmcgdGhhdCBmb3IgZXZlcnkgcHJvYmxlbSB0aGVyZQoraXMgYW4gYW5zd2VyIHRoYXQgaXMgc2ltcGxlLCBjbGVhciwgYW5kIHdyb25nLiAgVGhhdCBpcyB0aGUgY2FzZSB3aXRoIHRoZQorZXhhbXBsZSB1c2VkIGhlcmUgZm9yIHRoZSAiY3ciIGNvbW1hbmQuICBUaGUgYyBvcGVyYXRvciB3b3JrcyBqdXN0IGxpa2UgdGhlCitkIG9wZXJhdG9yLCB3aXRoIG9uZSBleGNlcHRpb246ICJjdyIuICBJdCBhY3R1YWxseSB3b3JrcyBsaWtlICJjZSIsIGNoYW5nZSB0bworZW5kIG9mIHdvcmQuICBUaHVzIHRoZSBzcGFjZSBhZnRlciB0aGUgd29yZCBpc24ndCBpbmNsdWRlZC4gIFRoaXMgaXMgYW4KK2V4Y2VwdGlvbiB0aGF0IGRhdGVzIGJhY2sgdG8gdGhlIG9sZCBWaS4gIFNpbmNlIG1hbnkgcGVvcGxlIGFyZSB1c2VkIHRvIGl0Citub3csIHRoZSBpbmNvbnNpc3RlbmN5IGhhcyByZW1haW5lZCBpbiBWaW0uCisKKworTU9SRSBDSEFOR0VTCisKK0xpa2UgImRkIiBkZWxldGVzIGEgd2hvbGUgbGluZSwgImNjIiBjaGFuZ2VzIGEgd2hvbGUgbGluZS4gIEl0IGtlZXBzIHRoZQorZXhpc3RpbmcgaW5kZW50IChsZWFkaW5nIHdoaXRlIHNwYWNlKSB0aG91Z2guCisKK0p1c3QgbGlrZSAiZCQiIGRlbGV0ZXMgdW50aWwgdGhlIGVuZCBvZiB0aGUgbGluZSwgImMkIiBjaGFuZ2VzIHVudGlsIHRoZSBlbmQKK29mIHRoZSBsaW5lLiAgSXQncyBsaWtlIGRvaW5nICJkJCIgdG8gZGVsZXRlIHRoZSB0ZXh0IGFuZCB0aGVuICJhIiB0byBzdGFydAorSW5zZXJ0IG1vZGUgYW5kIGFwcGVuZCBuZXcgdGV4dC4KKworCitTSE9SVENVVFMKKworU29tZSBvcGVyYXRvci1tb3Rpb24gY29tbWFuZHMgYXJlIHVzZWQgc28gb2Z0ZW4gdGhhdCB0aGV5IGhhdmUgYmVlbiBnaXZlbiBhCitzaW5nbGUgbGV0dGVyIGNvbW1hbmQ6CisKKwl4ICBzdGFuZHMgZm9yICBkbCAgKGRlbGV0ZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvcikKKwlYICBzdGFuZHMgZm9yICBkaCAgKGRlbGV0ZSBjaGFyYWN0ZXIgbGVmdCBvZiB0aGUgY3Vyc29yKQorCUQgIHN0YW5kcyBmb3IgIGQkICAoZGVsZXRlIHRvIGVuZCBvZiB0aGUgbGluZSkKKwlDICBzdGFuZHMgZm9yICBjJCAgKGNoYW5nZSB0byBlbmQgb2YgdGhlIGxpbmUpCisJcyAgc3RhbmRzIGZvciAgY2wgIChjaGFuZ2Ugb25lIGNoYXJhY3RlcikKKwlTICBzdGFuZHMgZm9yICBjYyAgKGNoYW5nZSBhIHdob2xlIGxpbmUpCisKKworV0hFUkUgVE8gUFVUIFRIRSBDT1VOVAorCitUaGUgY29tbWFuZHMgIjNkdyIgYW5kICJkM3ciIGRlbGV0ZSB0aHJlZSB3b3Jkcy4gIElmIHlvdSB3YW50IHRvIGdldCByZWFsbHkKK3BpY2t5IGFib3V0IHRoaW5ncywgdGhlIGZpcnN0IGNvbW1hbmQsICIzZHciLCBkZWxldGVzIG9uZSB3b3JkIHRocmVlIHRpbWVzOwordGhlIGNvbW1hbmQgImQzdyIgZGVsZXRlcyB0aHJlZSB3b3JkcyBvbmNlLiAgVGhpcyBpcyBhIGRpZmZlcmVuY2Ugd2l0aG91dCBhCitkaXN0aW5jdGlvbi4gIFlvdSBjYW4gYWN0dWFsbHkgcHV0IGluIHR3byBjb3VudHMsIGhvd2V2ZXIuICBGb3IgZXhhbXBsZSwKKyIzZDJ3IiBkZWxldGVzIHR3byB3b3JkcywgcmVwZWF0ZWQgdGhyZWUgdGltZXMsIGZvciBhIHRvdGFsIG9mIHNpeCB3b3Jkcy4KKworCitSRVBMQUNJTkcgV0lUSCBPTkUgQ0hBUkFDVEVSCisKK1RoZSAiciIgY29tbWFuZCBpcyBub3QgYW4gb3BlcmF0b3IuICBJdCB3YWl0cyBmb3IgeW91IHRvIHR5cGUgYSBjaGFyYWN0ZXIsIGFuZAord2lsbCByZXBsYWNlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciB3aXRoIGl0LiAgWW91IGNvdWxkIGRvIHRoZSBzYW1lCit3aXRoICJjbCIgb3Igd2l0aCB0aGUgInMiIGNvbW1hbmQsIGJ1dCB3aXRoICJyIiB5b3UgZG9uJ3QgaGF2ZSB0byBwcmVzcyA8RXNjPgorCisJdGhlcmUgaXMgc29tZXJoaW5nIGdyb25nIGhlcmUgfgorCXJUCSAgICAgcnQgICAgcncKKworCVRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyBoZXJlIH4KKworVXNpbmcgYSBjb3VudCB3aXRoICJyIiBjYXVzZXMgdGhhdCBtYW55IGNoYXJhY3RlcnMgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUKK3NhbWUgY2hhcmFjdGVyLiAgRXhhbXBsZToKKworCVRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyBoZXJlIH4KKwkJCSAgIDVyeAorCisJVGhlcmUgaXMgc29tZXRoaW5nIHh4eHh4IGhlcmUgfgorCitUbyByZXBsYWNlIGEgY2hhcmFjdGVyIHdpdGggYSBsaW5lIGJyZWFrIHVzZSAicjxFbnRlcj4iLiAgVGhpcyBkZWxldGVzIG9uZQorY2hhcmFjdGVyIGFuZCBpbnNlcnRzIGEgbGluZSBicmVhay4gIFVzaW5nIGEgY291bnQgaGVyZSBvbmx5IGFwcGxpZXMgdG8gdGhlCitudW1iZXIgb2YgY2hhcmFjdGVycyBkZWxldGVkOiAiNHI8RW50ZXI+IiByZXBsYWNlcyBmb3VyIGNoYXJhY3RlcnMgd2l0aCBvbmUKK2xpbmUgYnJlYWsuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA0LjMqCVJlcGVhdGluZyBhIGNoYW5nZQorCitUaGUgIi4iIGNvbW1hbmQgaXMgb25lIG9mIHRoZSBtb3N0IHNpbXBsZSB5ZXQgcG93ZXJmdWwgY29tbWFuZHMgaW4gVmltLiAgSXQKK3JlcGVhdHMgdGhlIGxhc3QgY2hhbmdlLiAgRm9yIGluc3RhbmNlLCBzdXBwb3NlIHlvdSBhcmUgZWRpdGluZyBhbiBIVE1MIGZpbGUKK2FuZCB3YW50IHRvIGRlbGV0ZSBhbGwgdGhlIDxCPiB0YWdzLiAgWW91IHBvc2l0aW9uIHRoZSBjdXJzb3Igb24gdGhlIGZpcnN0IDwKK2FuZCBkZWxldGUgdGhlIDxCPiB3aXRoIHRoZSBjb21tYW5kICJkZj4iLiAgWW91IHRoZW4gZ28gdG8gdGhlIDwgb2YgdGhlIG5leHQKKzwvQj4gYW5kIGtpbGwgaXQgdXNpbmcgdGhlICIuIiBjb21tYW5kLiAgVGhlICIuIiBjb21tYW5kIGV4ZWN1dGVzIHRoZSBsYXN0CitjaGFuZ2UgY29tbWFuZCAoaW4gdGhpcyBjYXNlLCAiZGY+IikuICBUbyBkZWxldGUgYW5vdGhlciB0YWcsIHBvc2l0aW9uIHRoZQorY3Vyc29yIG9uIHRoZSA8IGFuZCB1c2UgdGhlICIuIiBjb21tYW5kLgorCisJCQkgICAgICBUbyA8Qj5nZW5lcmF0ZTwvQj4gYSB0YWJsZSBvZiA8Qj5jb250ZW50cyB+CisJZjwgICBmaW5kIGZpcnN0IDwgICAgIC0tLT4KKwlkZj4gIGRlbGV0ZSB0byA+CSAtLT4KKwlmPCAgIGZpbmQgbmV4dCA8CSAgIC0tLS0tLS0tLT4KKwkuICAgIHJlcGVhdCBkZj4JCQkgICAgLS0tPgorCWY8ICAgZmluZCBuZXh0IDwJCSAgICAgICAtLS0tLS0tLS0tLS0tPgorCS4gICAgcmVwZWF0IGRmPgkJCQkJICAgIC0tPgorCitUaGUgIi4iIGNvbW1hbmQgd29ya3MgZm9yIGFsbCBjaGFuZ2VzIHlvdSBtYWtlLCBleGNlcHQgZm9yIHRoZSAidSIgKHVuZG8pLAorQ1RSTC1SIChyZWRvKSBhbmQgY29tbWFuZHMgdGhhdCBzdGFydCB3aXRoIGEgY29sb24gKDopLgorCitBbm90aGVyIGV4YW1wbGU6IFlvdSB3YW50IHRvIGNoYW5nZSB0aGUgd29yZCAiZm91ciIgdG8gImZpdmUiLiAgSXQgYXBwZWFycworc2V2ZXJhbCB0aW1lcyBpbiB5b3VyIHRleHQuICBZb3UgY2FuIGRvIHRoaXMgcXVpY2tseSB3aXRoIHRoaXMgc2VxdWVuY2Ugb2YKK2NvbW1hbmRzOgorCisJL2ZvdXI8RW50ZXI+CWZpbmQgdGhlIGZpcnN0IHN0cmluZyAiZm91ciIKKwljd2ZpdmU8RXNjPgljaGFuZ2UgdGhlIHdvcmQgdG8gImZpdmUiCisJbgkJZmluZCB0aGUgbmV4dCAiZm91ciIKKwkuCQlyZXBlYXQgdGhlIGNoYW5nZSB0byAiZml2ZScKKwluCQlmaW5kIHRoZSBuZXh0ICJmb3VyIgorCS4JCXJlcGVhdCB0aGUgY2hhbmdlCisJCQlldGMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA0LjQqCVZpc3VhbCBtb2RlCisKK1RvIGRlbGV0ZSBzaW1wbGUgaXRlbXMgdGhlIG9wZXJhdG9yLW1vdGlvbiBjaGFuZ2VzIHdvcmsgcXVpdGUgd2VsbC4gIEJ1dCBvZnRlbgoraXQncyBub3Qgc28gZWFzeSB0byBkZWNpZGUgd2hpY2ggY29tbWFuZCB3aWxsIG1vdmUgb3ZlciB0aGUgdGV4dCB5b3Ugd2FudCB0bworY2hhbmdlLiAgVGhlbiB5b3UgY2FuIHVzZSBWaXN1YWwgbW9kZS4KKworWW91IHN0YXJ0IFZpc3VhbCBtb2RlIGJ5IHByZXNzaW5nICJ2Ii4gIFlvdSBtb3ZlIHRoZSBjdXJzb3Igb3ZlciB0aGUgdGV4dCB5b3UKK3dhbnQgdG8gd29yayBvbi4gIFdoaWxlIHlvdSBkbyB0aGlzLCB0aGUgdGV4dCBpcyBoaWdobGlnaHRlZC4gIEZpbmFsbHkgdHlwZQordGhlIG9wZXJhdG9yIGNvbW1hbmQuCisgICBGb3IgZXhhbXBsZSwgdG8gZGVsZXRlIGZyb20gaGFsZndheSBvbmUgd29yZCB0byBoYWxmd2F5IGFub3RoZXIgd29yZDoKKworCQlUaGlzIGlzIGFuIGV4YW1pbmF0aW9uIHNhbXBsZSBvZiB2aXN1YWwgbW9kZSB+CisJCQkgICAgICAgLS0tLS0tLS0tLT4KKwkJCQkgdmVsbGxsZAorCisJCVRoaXMgaXMgYW4gZXhhbXBsZSBvZiB2aXN1YWwgbW9kZSB+CisKK1doZW4gZG9pbmcgdGhpcyB5b3UgZG9uJ3QgcmVhbGx5IGhhdmUgdG8gY291bnQgaG93IG1hbnkgdGltZXMgeW91IGhhdmUgdG8KK3ByZXNzICJsIiB0byBlbmQgdXAgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uLiAgWW91IGNhbiBpbW1lZGlhdGVseSBzZWUgd2hhdCB0ZXh0Cit3aWxsIGJlIGRlbGV0ZWQgd2hlbiB5b3UgcHJlc3MgImQiLgorCitJZiBhdCBhbnkgdGltZSB5b3UgZGVjaWRlIHlvdSBkb24ndCB3YW50IHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIGhpZ2hsaWdodGVkCit0ZXh0LCBqdXN0IHByZXNzIDxFc2M+IGFuZCBWaXN1YWwgbW9kZSB3aWxsIHN0b3Agd2l0aG91dCBkb2luZyBhbnl0aGluZy4KKworCitTRUxFQ1RJTkcgTElORVMKKworSWYgeW91IHdhbnQgdG8gd29yayBvbiB3aG9sZSBsaW5lcywgdXNlICJWIiB0byBzdGFydCBWaXN1YWwgbW9kZS4gIFlvdSB3aWxsCitzZWUgcmlnaHQgYXdheSB0aGF0IHRoZSB3aG9sZSBsaW5lIGlzIGhpZ2hsaWdodGVkLCB3aXRob3V0IG1vdmluZyBhcm91bmQuCitXaGVuIHlvdSBtb3ZlIGxlZnQgb3IgcmlnaHQgbm90aGluZyBjaGFuZ2VzLiAgV2hlbiB5b3UgbW92ZSB1cCBvciBkb3duIHRoZQorc2VsZWN0aW9uIGlzIGV4dGVuZGVkIHdob2xlIGxpbmVzIGF0IGEgdGltZS4KKyAgIEZvciBleGFtcGxlLCBzZWxlY3QgdGhyZWUgbGluZXMgd2l0aCAiVmpqIjoKKworCQkJICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQkJICB8IHRleHQgbW9yZSB0ZXh0CSAgIHwKKwkJICAgICAgID4+IHwgbW9yZSB0ZXh0IG1vcmUgdGV4dCAgICB8IHwKKwlzZWxlY3RlZCBsaW5lcyA+PiB8IHRleHQgdGV4dCB0ZXh0CSAgIHwgfCBWamoKKwkJICAgICAgID4+IHwgdGV4dCBtb3JlCQkgICB8IFYKKwkJCSAgfCBtb3JlIHRleHQgbW9yZQkgICB8CisJCQkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworU0VMRUNUSU5HIEJMT0NLUworCitJZiB5b3Ugd2FudCB0byB3b3JrIG9uIGEgcmVjdGFuZ3VsYXIgYmxvY2sgb2YgY2hhcmFjdGVycywgdXNlIENUUkwtViB0byBzdGFydAorVmlzdWFsIG1vZGUuICBUaGlzIGlzIHZlcnkgdXNlZnVsIHdoZW4gd29ya2luZyBvbiB0YWJsZXMuCisKKwkJbmFtZQkJUTEJUTIJUTMKKwkJcGllcnJlCQkxMjMJNDU1CTIzNAorCQlqb2huCQkwCTkwCTM5CisJCXN0ZXZlCQkzOTIJNjMJMzM0CisKK1RvIGRlbGV0ZSB0aGUgbWlkZGxlICJRMiIgY29sdW1uLCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlICJRIiBvZiAiUTIiLiAgUHJlc3MKK0NUUkwtViB0byBzdGFydCBibG9ja3dpc2UgVmlzdWFsIG1vZGUuICBOb3cgbW92ZSB0aGUgY3Vyc29yIHRocmVlIGxpbmVzIGRvd24KK3dpdGggIjNqIiBhbmQgdG8gdGhlIG5leHQgd29yZCB3aXRoICJ3Ii4gIFlvdSBjYW4gc2VlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YKK3RoZSBsYXN0IGNvbHVtbiBpcyBpbmNsdWRlZC4gIFRvIGV4Y2x1ZGUgaXQsIHVzZSAiaCIuICBOb3cgcHJlc3MgImQiIGFuZCB0aGUKK21pZGRsZSBjb2x1bW4gaXMgZ29uZS4KKworCitHT0lORyBUTyBUSEUgT1RIRVIgU0lERQorCitJZiB5b3UgaGF2ZSBzZWxlY3RlZCBzb21lIHRleHQgaW4gVmlzdWFsIG1vZGUsIGFuZCBkaXNjb3ZlciB0aGF0IHlvdSBuZWVkIHRvCitjaGFuZ2UgdGhlIG90aGVyIGVuZCBvZiB0aGUgc2VsZWN0aW9uLCB1c2UgdGhlICJvIiBjb21tYW5kIChIaW50OiBvIGZvciBvdGhlcgorZW5kKS4gIFRoZSBjdXJzb3Igd2lsbCBnbyB0byB0aGUgb3RoZXIgZW5kLCBhbmQgeW91IGNhbiBtb3ZlIHRoZSBjdXJzb3IgdG8KK2NoYW5nZSB3aGVyZSB0aGUgc2VsZWN0aW9uIHN0YXJ0cy4gIFByZXNzaW5nICJvIiBhZ2FpbiBicmluZ3MgeW91IGJhY2sgdG8gdGhlCitvdGhlciBlbmQuCisKK1doZW4gdXNpbmcgYmxvY2t3aXNlIHNlbGVjdGlvbiwgeW91IGhhdmUgZm91ciBjb3JuZXJzLiAgIm8iIG9ubHkgdGFrZXMgeW91IHRvCitvbmUgb2YgdGhlIG90aGVyIGNvcm5lcnMsIGRpYWdvbmFsbHkuICBVc2UgIk8iIHRvIG1vdmUgdG8gdGhlIG90aGVyIGNvcm5lciBpbgordGhlIHNhbWUgbGluZS4KKworTm90ZSB0aGF0ICJvIiBhbmQgIk8iIGluIFZpc3VhbCBtb2RlIHdvcmsgdmVyeSBkaWZmZXJlbnQgZnJvbSBOb3JtYWwgbW9kZSwKK3doZXJlIHRoZXkgb3BlbiBhIG5ldyBsaW5lIGJlbG93IG9yIGFib3ZlIHRoZSBjdXJzb3IuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA0LjUqCU1vdmluZyB0ZXh0CisKK1doZW4geW91IGRlbGV0ZSBzb21ldGhpbmcgd2l0aCB0aGUgImQiLCAieCIsIG9yIGFub3RoZXIgY29tbWFuZCwgdGhlIHRleHQgaXMKK3NhdmVkLiAgWW91IGNhbiBwYXN0ZSBpdCBiYWNrIGJ5IHVzaW5nIHRoZSBwIGNvbW1hbmQuIChUaGUgVmltIG5hbWUgZm9yCit0aGlzIGlzIHB1dCkuCisgICBUYWtlIGEgbG9vayBhdCBob3cgdGhpcyB3b3Jrcy4gIEZpcnN0IHlvdSB3aWxsIGRlbGV0ZSBhbiBlbnRpcmUgbGluZSwgYnkKK3B1dHRpbmcgdGhlIGN1cnNvciBvbiB0aGUgbGluZSB5b3Ugd2FudCB0byBkZWxldGUgYW5kIHR5cGluZyAiZGQiLiAgTm93IHlvdQorbW92ZSB0aGUgY3Vyc29yIHRvIHdoZXJlIHlvdSB3YW50IHRvIHB1dCB0aGUgbGluZSBhbmQgdXNlIHRoZSAicCIgKHB1dCkKK2NvbW1hbmQuICBUaGUgbGluZSBpcyBpbnNlcnRlZCBvbiB0aGUgbGluZSBiZWxvdyB0aGUgY3Vyc29yLgorCisJYSBsaW5lCQlhIGxpbmUJICAgICAgYSBsaW5lCisJbGluZSAyCSAgZGQJbGluZSAzCSAgcCAgIGxpbmUgMworCWxpbmUgMwkJCSAgICAgIGxpbmUgMgorCitCZWNhdXNlIHlvdSBkZWxldGVkIGFuIGVudGlyZSBsaW5lLCB0aGUgInAiIGNvbW1hbmQgcGxhY2VkIHRoZSB0ZXh0IGxpbmUgYmVsb3cKK3RoZSBjdXJzb3IuICBJZiB5b3UgZGVsZXRlIHBhcnQgb2YgYSBsaW5lIChhIHdvcmQsIGZvciBpbnN0YW5jZSksIHRoZSAicCIKK2NvbW1hbmQgcHV0cyBpdCBqdXN0IGFmdGVyIHRoZSBjdXJzb3IuCisKKwlTb21lIG1vcmUgYm9yaW5nIHRyeSB0ZXh0IHRvIG91dCBjb21tYW5kcy4gfgorCQkJIC0tLS0+CisJCQkgIGR3CisKKwlTb21lIG1vcmUgYm9yaW5nIHRleHQgdG8gb3V0IGNvbW1hbmRzLiB+CisJCQkgLS0tLS0tLT4KKwkJCSAgICB3ZWxwCisKKwlTb21lIG1vcmUgYm9yaW5nIHRleHQgdG8gdHJ5IG91dCBjb21tYW5kcy4gfgorCisKK01PUkUgT04gUFVUVElORworCitUaGUgIlAiIGNvbW1hbmQgcHV0cyB0ZXh0IGxpa2UgInAiLCBidXQgYmVmb3JlIHRoZSBjdXJzb3IuICBXaGVuIHlvdSBkZWxldGVkIGEKK3dob2xlIGxpbmUgd2l0aCAiZGQiLCAiUCIgd2lsbCBwdXQgaXQgYmFjayBhYm92ZSB0aGUgY3Vyc29yLiAgV2hlbiB5b3UgZGVsZXRlZAorYSB3b3JkIHdpdGggImR3IiwgIlAiIHdpbGwgcHV0IGl0IGJhY2sganVzdCBiZWZvcmUgdGhlIGN1cnNvci4KKworWW91IGNhbiByZXBlYXQgcHV0dGluZyBhcyBtYW55IHRpbWVzIGFzIHlvdSBsaWtlLiAgVGhlIHNhbWUgdGV4dCB3aWxsIGJlIHVzZWQuCisKK1lvdSBjYW4gdXNlIGEgY291bnQgd2l0aCAicCIgYW5kICJQIi4gIFRoZSB0ZXh0IHdpbGwgYmUgcmVwZWF0ZWQgYXMgbWFueSB0aW1lcworYXMgc3BlY2lmaWVkIHdpdGggdGhlIGNvdW50LiAgVGh1cyAiZGQiIGFuZCB0aGVuICIzcCIgcHV0cyB0aHJlZSBjb3BpZXMgb2YgdGhlCitzYW1lIGRlbGV0ZWQgbGluZS4KKworCitTV0FQUElORyBUV08gQ0hBUkFDVEVSUworCitGcmVxdWVudGx5IHdoZW4geW91IGFyZSB0eXBpbmcsIHlvdXIgZmluZ2VycyBnZXQgYWhlYWQgb2YgeW91ciBicmFpbiAob3IgdGhlCitvdGhlciB3YXkgYXJvdW5kPykuICBUaGUgcmVzdWx0IGlzIGEgdHlwbyBzdWNoIGFzICJ0ZWgiIGZvciAidGhlIi4gIFZpbQorbWFrZXMgaXQgZWFzeSB0byBjb3JyZWN0IHN1Y2ggcHJvYmxlbXMuICBKdXN0IHB1dCB0aGUgY3Vyc29yIG9uIHRoZSBlIG9mICJ0ZWgiCithbmQgZXhlY3V0ZSB0aGUgY29tbWFuZCAieHAiLiAgVGhpcyB3b3JrcyBhcyBmb2xsb3dzOiAieCIgZGVsZXRlcyB0aGUKK2NoYXJhY3RlciBlIGFuZCBwbGFjZXMgaXQgaW4gYSByZWdpc3Rlci4gICJwIiBwdXRzIHRoZSB0ZXh0IGFmdGVyIHRoZSBjdXJzb3IsCit3aGljaCBpcyBhZnRlciB0aGUgaC4KKworCXRlaCAgICAgdGggICAgIHRoZSB+CisJIHggICAgICAgcAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNC42KglDb3B5aW5nIHRleHQKKworVG8gY29weSB0ZXh0IGZyb20gb25lIHBsYWNlIHRvIGFub3RoZXIsIHlvdSBjb3VsZCBkZWxldGUgaXQsIHVzZSAidSIgdG8gdW5kbwordGhlIGRlbGV0aW9uIGFuZCB0aGVuICJwIiB0byBwdXQgaXQgc29tZXdoZXJlIGVsc2UuICBUaGVyZSBpcyBhbiBlYXNpZXIgd2F5OgoreWFua2luZy4gIFRoZSAieSIgb3BlcmF0b3IgY29waWVzIHRleHQgaW50byBhIHJlZ2lzdGVyLiAgVGhlbiBhICJwIiBjb21tYW5kCitjYW4gYmUgdXNlZCB0byBwdXQgaXQuCisgICBZYW5raW5nIGlzIGp1c3QgYSBWaW0gbmFtZSBmb3IgY29weWluZy4gIFRoZSAiYyIgbGV0dGVyIHdhcyBhbHJlYWR5IHVzZWQKK2ZvciB0aGUgY2hhbmdlIG9wZXJhdG9yLCBhbmQgInkiIHdhcyBzdGlsbCBhdmFpbGFibGUuICBDYWxsaW5nIHRoaXMKK29wZXJhdG9yICJ5YW5rIiBtYWRlIGl0IGVhc2llciB0byByZW1lbWJlciB0byB1c2UgdGhlICJ5IiBrZXkuCisKK1NpbmNlICJ5IiBpcyBhbiBvcGVyYXRvciwgeW91IHVzZSAieXciIHRvIHlhbmsgYSB3b3JkLiAgQSBjb3VudCBpcyBwb3NzaWJsZSBhcwordXN1YWwuICBUbyB5YW5rIHR3byB3b3JkcyB1c2UgInkydyIuICBFeGFtcGxlOgorCisJbGV0IHNxciA9IExvbmdWYXJpYWJsZSAqIH4KKwkJIC0tLS0tLS0tLS0tLS0tPgorCQkgICAgICAgeTJ3CisKKwlsZXQgc3FyID0gTG9uZ1ZhcmlhYmxlICogfgorCQkJICAgICAgIHAKKworCWxldCBzcXIgPSBMb25nVmFyaWFibGUgKiBMb25nVmFyaWFibGUgfgorCitOb3RpY2UgdGhhdCAieXciIGluY2x1ZGVzIHRoZSB3aGl0ZSBzcGFjZSBhZnRlciBhIHdvcmQuICBJZiB5b3UgZG9uJ3Qgd2FudAordGhpcywgdXNlICJ5ZSIuCisKK1RoZSAieXkiIGNvbW1hbmQgeWFua3MgYSB3aG9sZSBsaW5lLCBqdXN0IGxpa2UgImRkIiBkZWxldGVzIGEgd2hvbGUgbGluZS4KK1VuZXhwZWN0ZWRseSwgd2hpbGUgIkQiIGRlbGV0ZXMgZnJvbSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUsICJZIgord29ya3MgbGlrZSAieXkiLCBpdCB5YW5rcyB0aGUgd2hvbGUgbGluZS4gIFdhdGNoIG91dCBmb3IgdGhpcyBpbmNvbnNpc3RlbmN5IQorVXNlICJ5JCIgdG8geWFuayB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCisJYSB0ZXh0IGxpbmUgICB5eQlhIHRleHQgbGluZQkgICAgICAgYSB0ZXh0IGxpbmUKKwlsaW5lIDIJCQlsaW5lIDIJCXAgICAgICBsaW5lIDIKKwlsYXN0IGxpbmUJCWxhc3QgbGluZQkgICAgICAgYSB0ZXh0IGxpbmUKKwkJCQkJCSAgICAgICBsYXN0IGxpbmUKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDQuNyoJVXNpbmcgdGhlIGNsaXBib2FyZAorCitJZiB5b3UgYXJlIHVzaW5nIHRoZSBHVUkgdmVyc2lvbiBvZiBWaW0gKGd2aW0pLCB5b3UgY2FuIGZpbmQgdGhlICJDb3B5IiBpdGVtCitpbiB0aGUgIkVkaXQiIG1lbnUuICBGaXJzdCBzZWxlY3Qgc29tZSB0ZXh0IHdpdGggVmlzdWFsIG1vZGUsIHRoZW4gdXNlIHRoZQorRWRpdC9Db3B5IG1lbnUuICBUaGUgc2VsZWN0ZWQgdGV4dCBpcyBub3cgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQuICBZb3UgY2FuCitwYXN0ZSB0aGUgdGV4dCBpbiBvdGhlciBwcm9ncmFtcy4gIEluIFZpbSBpdHNlbGYgdG9vLgorCitJZiB5b3UgaGF2ZSBjb3BpZWQgdGV4dCB0byB0aGUgY2xpcGJvYXJkIGluIGFub3RoZXIgYXBwbGljYXRpb24sIHlvdSBjYW4gcGFzdGUKK2l0IGluIFZpbSB3aXRoIHRoZSBFZGl0L1Bhc3RlIG1lbnUuICBUaGlzIHdvcmtzIGluIE5vcm1hbCBtb2RlIGFuZCBJbnNlcnQKK21vZGUuICBJbiBWaXN1YWwgbW9kZSB0aGUgc2VsZWN0ZWQgdGV4dCBpcyByZXBsYWNlZCB3aXRoIHRoZSBwYXN0ZWQgdGV4dC4KKworVGhlICJDdXQiIG1lbnUgaXRlbSBkZWxldGVzIHRoZSB0ZXh0IGJlZm9yZSBpdCdzIHB1dCBvbiB0aGUgY2xpcGJvYXJkLiAgVGhlCisiQ29weSIsICJDdXQiIGFuZCAiUGFzdGUiIGl0ZW1zIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiB0aGUgcG9wdXAgbWVudSAob25seQord2hlbiB0aGVyZSBpcyBhIHBvcHVwIG1lbnUsIG9mIGNvdXJzZSkuICBJZiB5b3VyIFZpbSBoYXMgYSB0b29sYmFyLCB5b3UgY2FuCithbHNvIGZpbmQgdGhlc2UgaXRlbXMgdGhlcmUuCisKK0lmIHlvdSBhcmUgbm90IHVzaW5nIHRoZSBHVUksIG9yIGlmIHlvdSBkb24ndCBsaWtlIHVzaW5nIGEgbWVudSwgeW91IGhhdmUgdG8KK3VzZSBhbm90aGVyIHdheS4gIFlvdSB1c2UgdGhlIG5vcm1hbCAieSIgKHlhbmspIGFuZCAicCIgKHB1dCkgY29tbWFuZHMsIGJ1dAorcHJlcGVuZCAiKiAoZG91YmxlLXF1b3RlIHN0YXIpIGJlZm9yZSBpdC4gIFRvIGNvcHkgYSBsaW5lIHRvIHRoZSBjbGlwYm9hcmQ6ID4KKworCSIqeXkKKworVG8gcHV0IHRleHQgZnJvbSB0aGUgY2xpcGJvYXJkIGJhY2sgaW50byB0aGUgdGV4dDogPgorCisJIipwCisKK1RoaXMgb25seSB3b3JrcyBvbiB2ZXJzaW9ucyBvZiBWaW0gdGhhdCBpbmNsdWRlIGNsaXBib2FyZCBzdXBwb3J0LiAgTW9yZSBhYm91dAordGhlIGNsaXBib2FyZCBpbiBzZWN0aW9uIHwwOS4zfCBhbmQgaGVyZTogfGNsaXBib2FyZHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA0LjgqCVRleHQgb2JqZWN0cworCitJZiB0aGUgY3Vyc29yIGlzIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkIGFuZCB3YW50IHRvIGRlbGV0ZSB0aGF0IHdvcmQsIHlvdQorbmVlZCB0byBtb3ZlIGJhY2sgdG8gaXRzIHN0YXJ0IGJlZm9yZSB5b3UgY2FuIGRvICJkdyIuICBUaGVyZSBpcyBhIHNpbXBsZXIgd2F5Cit0byBkbyB0aGlzOiAiZGF3Ii4KKworCXRoaXMgaXMgc29tZSBleGFtcGxlIHRleHQuIH4KKwkJICAgICAgIGRhdworCisJdGhpcyBpcyBzb21lIHRleHQuIH4KKworVGhlICJkIiBvZiAiZGF3IiBpcyB0aGUgZGVsZXRlIG9wZXJhdG9yLiAgImF3IiBpcyBhIHRleHQgb2JqZWN0LiAgSGludDogImF3Igorc3RhbmRzIGZvciAiQSBXb3JkIi4gIFRodXMgImRhdyIgaXMgIkRlbGV0ZSBBIFdvcmQiLiAgVG8gYmUgcHJlY2lzZSwgdGhlIHdoaXRlCitzcGFjZSBhZnRlciB0aGUgd29yZCBpcyBhbHNvIGRlbGV0ZWQgKHRoZSB3aGl0ZSBzcGFjZSBiZWZvcmUgdGhlIHdvcmQgYXQgdGhlCitlbmQgb2YgdGhlIGxpbmUpLgorCitVc2luZyB0ZXh0IG9iamVjdHMgaXMgdGhlIHRoaXJkIHdheSB0byBtYWtlIGNoYW5nZXMgaW4gVmltLiAgV2UgYWxyZWFkeSBoYWQKK29wZXJhdG9yLW1vdGlvbiBhbmQgVmlzdWFsIG1vZGUuICBOb3cgd2UgYWRkIG9wZXJhdG9yLXRleHQgb2JqZWN0LgorICAgSXQgaXMgdmVyeSBzaW1pbGFyIHRvIG9wZXJhdG9yLW1vdGlvbiwgYnV0IGluc3RlYWQgb2Ygb3BlcmF0aW5nIG9uIHRoZSB0ZXh0CitiZXR3ZWVuIHRoZSBjdXJzb3IgcG9zaXRpb24gYmVmb3JlIGFuZCBhZnRlciBhIG1vdmVtZW50IGNvbW1hbmQsIHRoZSB0ZXh0CitvYmplY3QgaXMgdXNlZCBhcyBhIHdob2xlLiAgSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4gdGhlIG9iamVjdCB0aGUgY3Vyc29yCit3YXMuCisKK1RvIGNoYW5nZSBhIHdob2xlIHNlbnRlbmNlIHVzZSAiY2lzIi4gIFRha2UgdGhpcyB0ZXh0OgorCisJSGVsbG8gdGhlcmUuICBUaGlzIH4KKwlpcyBhbiBleGFtcGxlLiAgSnVzdCB+CisJc29tZSB0ZXh0LiB+CisKK01vdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWNvbmQgbGluZSwgb24gImlzIGFuIi4gIE5vdyB1c2UgImNpcyI6CisKKwlIZWxsbyB0aGVyZS4gICAgSnVzdCB+CisJc29tZSB0ZXh0LiB+CisKK1RoZSBjdXJzb3IgaXMgaW4gYmV0d2VlbiB0aGUgYmxhbmtzIGluIHRoZSBmaXJzdCBsaW5lLiAgTm93IHlvdSB0eXBlIHRoZSBuZXcKK3NlbnRlbmNlICJBbm90aGVyIGxpbmUuIjoKKworCUhlbGxvIHRoZXJlLiAgQW5vdGhlciBsaW5lLiAgSnVzdCB+CisJc29tZSB0ZXh0LiB+CisKKyJjaXMiIGNvbnNpc3RzIG9mIHRoZSAiYyIgKGNoYW5nZSkgb3BlcmF0b3IgYW5kIHRoZSAiaXMiIHRleHQgb2JqZWN0LiAgVGhpcworc3RhbmRzIGZvciAiSW5uZXIgU2VudGVuY2UiLiAgVGhlcmUgaXMgYWxzbyB0aGUgImFzIiAoYSBzZW50ZW5jZSkgb2JqZWN0LiAgVGhlCitkaWZmZXJlbmNlIGlzIHRoYXQgImFzIiBpbmNsdWRlcyB0aGUgd2hpdGUgc3BhY2UgYWZ0ZXIgdGhlIHNlbnRlbmNlIGFuZCAiaXMiCitkb2Vzbid0LiAgSWYgeW91IHdvdWxkIGRlbGV0ZSBhIHNlbnRlbmNlLCB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHdoaXRlIHNwYWNlCithdCB0aGUgc2FtZSB0aW1lLCB0aHVzIHVzZSAiZGFzIi4gIElmIHlvdSB3YW50IHRvIHR5cGUgbmV3IHRleHQgdGhlIHdoaXRlCitzcGFjZSBjYW4gcmVtYWluLCB0aHVzIHlvdSB1c2UgImNpcyIuCisKK1lvdSBjYW4gYWxzbyB1c2UgdGV4dCBvYmplY3RzIGluIFZpc3VhbCBtb2RlLiAgSXQgd2lsbCBpbmNsdWRlIHRoZSB0ZXh0IG9iamVjdAoraW4gdGhlIFZpc3VhbCBzZWxlY3Rpb24uICBWaXN1YWwgbW9kZSBjb250aW51ZXMsIHRodXMgeW91IGNhbiBkbyB0aGlzIHNldmVyYWwKK3RpbWVzLiAgRm9yIGV4YW1wbGUsIHN0YXJ0IFZpc3VhbCBtb2RlIHdpdGggInYiIGFuZCBzZWxlY3QgYSBzZW50ZW5jZSB3aXRoCisiYXMiLiAgTm93IHlvdSBjYW4gcmVwZWF0ICJhcyIgdG8gaW5jbHVkZSBtb3JlIHNlbnRlbmNlcy4gIEZpbmFsbHkgeW91IHVzZSBhbgorb3BlcmF0b3IgdG8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHNlbGVjdGVkIHNlbnRlbmNlcy4KKworWW91IGNhbiBmaW5kIGEgbG9uZyBsaXN0IG9mIHRleHQgb2JqZWN0cyBoZXJlOiB8dGV4dC1vYmplY3RzfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDQuOSoJUmVwbGFjZSBtb2RlCisKK1RoZSAiUiIgY29tbWFuZCBjYXVzZXMgVmltIHRvIGVudGVyIHJlcGxhY2UgbW9kZS4gIEluIHRoaXMgbW9kZSwgZWFjaAorY2hhcmFjdGVyIHlvdSB0eXBlIHJlcGxhY2VzIHRoZSBvbmUgdW5kZXIgdGhlIGN1cnNvci4gIFRoaXMgY29udGludWVzIHVudGlsCit5b3UgdHlwZSA8RXNjPi4KKyAgIEluIHRoaXMgZXhhbXBsZSB5b3Ugc3RhcnQgUmVwbGFjZSBtb2RlIG9uIHRoZSBmaXJzdCAidCIgb2YgInRleHQiOgorCisJVGhpcyBpcyB0ZXh0LiB+CisJCVJpbnRlcmVzdGluZy48RXNjPgorCisJVGhpcyBpcyBpbnRlcmVzdGluZy4gfgorCitZb3UgbWF5IGhhdmUgbm90aWNlZCB0aGF0IHRoaXMgY29tbWFuZCByZXBsYWNlZCA1IGNoYXJhY3RlcnMgaW4gdGhlIGxpbmUgd2l0aAordHdlbHZlIG90aGVycy4gVGhlICJSIiBjb21tYW5kIGF1dG9tYXRpY2FsbHkgZXh0ZW5kcyB0aGUgbGluZSBpZiBpdCBydW5zIG91dAorb2YgY2hhcmFjdGVycyB0byByZXBsYWNlLiAgSXQgd2lsbCBub3QgY29udGludWUgb24gdGhlIG5leHQgbGluZS4KKworWW91IGNhbiBzd2l0Y2ggYmV0d2VlbiBJbnNlcnQgbW9kZSBhbmQgUmVwbGFjZSBtb2RlIHdpdGggdGhlIDxJbnNlcnQ+IGtleS4KKworV2hlbiB5b3UgdXNlIDxCUz4gKGJhY2tzcGFjZSkgdG8gbWFrZSBjb3JyZWN0aW9uLCB5b3Ugd2lsbCBub3RpY2UgdGhhdCB0aGUKK29sZCB0ZXh0IGlzIHB1dCBiYWNrLiAgVGh1cyBpdCB3b3JrcyBsaWtlIGFuIHVuZG8gY29tbWFuZCBmb3IgdGhlIGxhc3QgdHlwZWQKK2NoYXJhY3Rlci4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDQuMTAqCUNvbmNsdXNpb24KKworVGhlIG9wZXJhdG9ycywgbW92ZW1lbnQgY29tbWFuZHMgYW5kIHRleHQgb2JqZWN0cyBnaXZlIHlvdSB0aGUgcG9zc2liaWxpdHkgdG8KK21ha2UgbG90cyBvZiBjb21iaW5hdGlvbnMuICBOb3cgdGhhdCB5b3Uga25vdyBob3cgaXQgd29ya3MsIHlvdSBjYW4gdXNlIE4KK29wZXJhdG9ycyB3aXRoIE0gbW92ZW1lbnQgY29tbWFuZHMgdG8gbWFrZSBOICogTSBjb21tYW5kcyEKKworWW91IGNhbiBmaW5kIGEgbGlzdCBvZiBvcGVyYXRvcnMgaGVyZTogfG9wZXJhdG9yfAorCitGb3IgZXhhbXBsZSwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgd2F5cyB0byBkZWxldGUgcGllY2VzIG9mIHRleHQuICBIZXJlIGFyZSBhCitmZXcgb2Z0ZW4gdXNlZCBvbmVzOgorCit4CWRlbGV0ZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciAoc2hvcnQgZm9yICJkbCIpCitYCWRlbGV0ZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjdXJzb3IgKHNob3J0IGZvciAiZGgiKQorRAlkZWxldGUgZnJvbSBjdXJzb3IgdG8gZW5kIG9mIGxpbmUgKHNob3J0IGZvciAiZCQiKQorZHcJZGVsZXRlIGZyb20gY3Vyc29yIHRvIG5leHQgc3RhcnQgb2Ygd29yZAorZGIJZGVsZXRlIGZyb20gY3Vyc29yIHRvIHByZXZpb3VzIHN0YXJ0IG9mIHdvcmQKK2RpdwlkZWxldGUgd29yZCB1bmRlciB0aGUgY3Vyc29yIChleGNsdWRpbmcgd2hpdGUgc3BhY2UpCitkYXcJZGVsZXRlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciAoaW5jbHVkaW5nIHdoaXRlIHNwYWNlKQorZEcJZGVsZXRlIHVudGlsIHRoZSBlbmQgb2YgdGhlIGZpbGUKK2RnZwlkZWxldGUgdW50aWwgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlCisKK0lmIHlvdSB1c2UgImMiIGluc3RlYWQgb2YgImQiIHRoZXkgYmVjb21lIGNoYW5nZSBjb21tYW5kcy4gIEFuZCB3aXRoICJ5IiB5b3UKK3lhbmsgdGhlIHRleHQuICBBbmQgc28gZm9ydGguCisKKworVGhlcmUgYXJlIGEgZmV3IG9mdGVuIHVzZWQgY29tbWFuZHMgdG8gbWFrZSBjaGFuZ2VzIHRoYXQgZGlkbid0IGZpdCBzb21ld2hlcmUKK2Vsc2U6CisKKwl+CWNoYW5nZSBjYXNlIG9mIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciwgYW5kIG1vdmUgdGhlCisJCWN1cnNvciB0byB0aGUgbmV4dCBjaGFyYWN0ZXIuICBUaGlzIGlzIG5vdCBhbiBvcGVyYXRvciAodW5sZXNzCisJCSd0aWxkZW9wJyBpcyBzZXQpLCB0aHVzIHlvdSBjYW4ndCB1c2UgaXQgd2l0aCBhIG1vdGlvbgorCQljb21tYW5kLiAgSXQgZG9lcyB3b3JrcyBpbiBWaXN1YWwgbW9kZSBhbmQgY2hhbmdlcyBjYXNlIGZvcgorCQlhbGwgdGhlIHNlbGVjdGVkIHRleHQgdGhlbi4KKworCUkJU3RhcnQgSW5zZXJ0IG1vZGUgYWZ0ZXIgbW92aW5nIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0CisJCW5vbi1ibGFuayBpbiB0aGUgbGluZS4KKworCUEJU3RhcnQgSW5zZXJ0IG1vZGUgYWZ0ZXIgbW92aW5nIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUKKwkJbGluZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8wNS50eHR8ICBTZXQgeW91ciBzZXR0aW5ncworCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8wNS50eHQgYi9ydW50aW1lL2RvYy91c3JfMDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOWViYTQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMDUudHh0CkBAIC0wLDAgKzEsNjE2IEBACisqdXNyXzA1LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWFyIDEyCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgICBTZXQgeW91ciBzZXR0aW5ncworCisKK1ZpbSBjYW4gYmUgdHVuZWQgdG8gd29yayBsaWtlIHlvdSB3YW50IGl0IHRvLiAgVGhpcyBjaGFwdGVyIHNob3dzIHlvdSBob3cgdG8KK21ha2UgVmltIHN0YXJ0IHdpdGggb3B0aW9ucyBzZXQgdG8gZGlmZmVyZW50IHZhbHVlcy4gIEFkZCBwbHVnaW5zIHRvIGV4dGVuZAorVmltcyBjYXBhYmlsaXRpZXMuICBPciBkZWZpbmUgeW91ciBvd24gbWFjcm9zLgorCit8MDUuMXwJVGhlIHZpbXJjIGZpbGUKK3wwNS4yfAlUaGUgZXhhbXBsZSB2aW1yYyBmaWxlIGV4cGxhaW5lZAorfDA1LjN8CVNpbXBsZSBtYXBwaW5ncworfDA1LjR8CUFkZGluZyBhIHBsdWdpbgorfDA1LjV8CUFkZGluZyBhIGhlbHAgZmlsZQorfDA1LjZ8CVRoZSBvcHRpb24gd2luZG93Cit8MDUuN3wJT2Z0ZW4gdXNlZCBvcHRpb25zCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzA2LnR4dHwgIFVzaW5nIHN5bnRheCBoaWdobGlnaHRpbmcKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzA0LnR4dHwgIE1ha2luZyBzbWFsbCBjaGFuZ2VzCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNS4xKglUaGUgdmltcmMgZmlsZQkJCQkJKnZpbXJjLWludHJvKgorCitZb3UgcHJvYmFibHkgZ290IHRpcmVkIG9mIHR5cGluZyBjb21tYW5kcyB0aGF0IHlvdSB1c2UgdmVyeSBvZnRlbi4gIFRvIHN0YXJ0Cit3aXRoIGFsbCB5b3VyIGZhdm9yaXRlIG9wdGlvbiBzZXR0aW5ncyBhbmQgbWFwcGluZ3MsIHlvdSB3cml0ZSB0aGVtIGluIHdoYXQgaXMKK2NhbGxlZCB0aGUgdmltcmMgZmlsZS4gIFZpbSByZWFkcyB0aGlzIGZpbGUgd2hlbiBpdCBzdGFydHMgdXAuCisKK0lmIHlvdSBoYXZlIHRyb3VibGUgZmluZGluZyB5b3VyIHZpbXJjIGZpbGUsIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpzY3JpcHRuYW1lcworCitPbmUgb2YgdGhlIGZpcnN0IGZpbGVzIGluIHRoZSBsaXN0IHNob3VsZCBiZSBjYWxsZWQgIi52aW1yYyIgb3IgIl92aW1yYyIgYW5kCitpcyBsb2NhdGVkIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisgICBJZiB5b3UgZG9uJ3QgaGF2ZSBhIHZpbXJjIGZpbGUgeWV0LCBzZWUgfHZpbXJjfCB0byBmaW5kIG91dCB3aGVyZSB5b3UgY2FuCitjcmVhdGUgYSB2aW1yYyBmaWxlLiAgQWxzbywgdGhlICI6dmVyc2lvbiIgY29tbWFuZCBtZW50aW9ucyB0aGUgbmFtZSBvZiB0aGUKKyJ1c2VyIHZpbXJjIGZpbGUiIFZpbSBsb29rcyBmb3IuCisKK0ZvciBVbml4IHRoaXMgZmlsZSBpcyBhbHdheXMgdXNlZDogPgorCisJfi8udmltcmMKKworRm9yIE1TLURPUyBhbmQgTVMtV2luZG93cyBpdCBpcyBtb3N0bHkgb25lIG9mIHRoZXNlOiA+CisKKwkkSE9NRS9fdmltcmMKKwkkVklNL192aW1yYworCitUaGUgdmltcmMgZmlsZSBjYW4gY29udGFpbiBhbGwgdGhlIGNvbW1hbmRzIHRoYXQgeW91IHR5cGUgYWZ0ZXIgYSBjb2xvbi4gIFRoZQorbW9zdCBzaW1wbGUgb25lcyBhcmUgZm9yIHNldHRpbmcgb3B0aW9ucy4gIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCBWaW0gdG8KK2Fsd2F5cyBzdGFydCB3aXRoIHRoZSAnaW5jc2VhcmNoJyBvcHRpb24gb24sIGFkZCB0aGlzIGxpbmUgeW91IHlvdXIgdmltcmMKK2ZpbGU6ID4KKworCXNldCBpbmNzZWFyY2gKKworRm9yIHRoaXMgbmV3IGxpbmUgdG8gdGFrZSBlZmZlY3QgeW91IG5lZWQgdG8gZXhpdCBWaW0gYW5kIHN0YXJ0IGl0IGFnYWluLgorTGF0ZXIgeW91IHdpbGwgbGVhcm4gaG93IHRvIGRvIHRoaXMgd2l0aG91dCBleGl0aW5nIFZpbS4KKworVGhpcyBjaGFwdGVyIG9ubHkgZXhwbGFpbnMgdGhlIG1vc3QgYmFzaWMgaXRlbXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cKK3RvIHdyaXRlIGEgVmltIHNjcmlwdCBmaWxlOiB8dXNyXzQxLnR4dHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA1LjIqCVRoZSBleGFtcGxlIHZpbXJjIGZpbGUgZXhwbGFpbmVkCQkqdmltcmNfZXhhbXBsZS52aW0qCisKK0luIHRoZSBmaXJzdCBjaGFwdGVyIHdhcyBleHBsYWluZWQgaG93IHRoZSBleGFtcGxlIHZpbXJjIChpbmNsdWRlZCBpbiB0aGUKK1ZpbSBkaXN0cmlidXRpb24pIGZpbGUgY2FuIGJlIHVzZWQgdG8gbWFrZSBWaW0gc3RhcnR1cCBpbiBub3QtY29tcGF0aWJsZSBtb2RlCisoc2VlIHxub3QtY29tcGF0aWJsZXwpLiAgVGhlIGZpbGUgY2FuIGJlIGZvdW5kIGhlcmU6CisKKwkkVklNUlVOVElNRS92aW1yY19leGFtcGxlLnZpbSB+CisKK0luIHRoaXMgc2VjdGlvbiB3ZSB3aWxsIGV4cGxhaW4gdGhlIHZhcmlvdXMgY29tbWFuZHMgdXNlZCBpbiB0aGlzIGZpbGUuICBUaGlzCit3aWxsIGdpdmUgeW91IGhpbnRzIGFib3V0IGhvdyB0byBzZXQgdXAgeW91ciBvd24gcHJlZmVyZW5jZXMuICBOb3QgZXZlcnl0aGluZword2lsbCBiZSBleHBsYWluZWQgdGhvdWdoLiAgVXNlIHRoZSAiOmhlbHAiIGNvbW1hbmQgdG8gZmluZCBvdXQgbW9yZS4KKworPgorCXNldCBub2NvbXBhdGlibGUKKworQXMgbWVudGlvbmVkIGluIHRoZSBmaXJzdCBjaGFwdGVyLCB0aGVzZSBtYW51YWxzIGV4cGxhaW4gVmltIHdvcmtpbmcgaW4gYW4KK2ltcHJvdmVkIHdheSwgdGh1cyBub3QgY29tcGxldGVseSBWaSBjb21wYXRpYmxlLiAgU2V0dGluZyB0aGUgJ2NvbXBhdGlibGUnCitvcHRpb24gb2ZmLCB0aHVzICdub2NvbXBhdGlibGUnIHRha2VzIGNhcmUgb2YgdGhpcy4KKworPgorCXNldCBiYWNrc3BhY2U9aW5kZW50LGVvbCxzdGFydAorCitUaGlzIHNwZWNpZmllcyB3aGVyZSBpbiBJbnNlcnQgbW9kZSB0aGUgPEJTPiBpcyBhbGxvd2VkIHRvIGRlbGV0ZSB0aGUKK2NoYXJhY3RlciBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLiAgVGhlIHRocmVlIGl0ZW1zLCBzZXBhcmF0ZWQgYnkgY29tbWFzLCB0ZWxsCitWaW0gdG8gZGVsZXRlIHRoZSB3aGl0ZSBzcGFjZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsIGEgbGluZSBicmVhayBhbmQgdGhlCitjaGFyYWN0ZXIgYmVmb3JlIHdoZXJlIEluc2VydCBtb2RlIHN0YXJ0ZWQuCis+CisKKwlzZXQgYXV0b2luZGVudAorCitUaGlzIG1ha2VzIFZpbSB1c2UgdGhlIGluZGVudCBvZiB0aGUgcHJldmlvdXMgbGluZSBmb3IgYSBuZXdseSBjcmVhdGVkIGxpbmUuCitUaHVzIHRoZXJlIGlzIHRoZSBzYW1lIGFtb3VudCBvZiB3aGl0ZSBzcGFjZSBiZWZvcmUgdGhlIG5ldyBsaW5lLiAgRm9yIGV4YW1wbGUKK3doZW4gcHJlc3NpbmcgPEVudGVyPiBpbiBJbnNlcnQgbW9kZSwgYW5kIHdoZW4gdXNpbmcgdGhlICJvIiBjb21tYW5kIHRvIG9wZW4gYQorbmV3IGxpbmUuCis+CisKKwlpZiBoYXMoInZtcyIpCisJICBzZXQgbm9iYWNrdXAKKwllbHNlCisJICBzZXQgYmFja3VwCisJZW5kaWYKKworVGhpcyB0ZWxscyBWaW0gdG8ga2VlcCBhIGJhY2t1cCBjb3B5IG9mIGEgZmlsZSB3aGVuIG92ZXJ3cml0aW5nIGl0LiAgQnV0IG5vdAorb24gdGhlIFZNUyBzeXN0ZW0sIHNpbmNlIGl0IGtlZXBzIG9sZCB2ZXJzaW9ucyBvZiBmaWxlcyBhbHJlYWR5LiAgVGhlIGJhY2t1cAorZmlsZSB3aWxsIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgb3JpZ2luYWwgZmlsZSB3aXRoICJ+IiBhZGRlZC4gIFNlZSB8MDcuNHwKKz4KKworCXNldCBoaXN0b3J5PTUwCisKK0tlZXAgNTAgY29tbWFuZHMgYW5kIDUwIHNlYXJjaCBwYXR0ZXJucyBpbiB0aGUgaGlzdG9yeS4gIFVzZSBhbm90aGVyIG51bWJlciBpZgoreW91IHdhbnQgdG8gcmVtZW1iZXIgZmV3ZXIgb3IgbW9yZSBsaW5lcy4KKz4KKworCXNldCBydWxlcgorCitBbHdheXMgZGlzcGxheSB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIGxvd2VyIHJpZ2h0IGNvcm5lciBvZiB0aGUKK1ZpbSB3aW5kb3cuCisKKz4KKwlzZXQgc2hvd2NtZAorCitEaXNwbGF5IGFuIGluY29tcGxldGUgY29tbWFuZCBpbiB0aGUgbG93ZXIgcmlnaHQgY29ybmVyIG9mIHRoZSBWaW0gd2luZG93LAorbGVmdCBvZiB0aGUgcnVsZXIuICBGb3IgZXhhbXBsZSwgd2hlbiB5b3UgdHlwZSAiMmYiLCBWaW0gaXMgd2FpdGluZyBmb3IgeW91IHRvCit0eXBlIHRoZSBjaGFyYWN0ZXIgdG8gZmluZCBhbmQgIjJmIiBpcyBkaXNwbGF5ZWQuICBXaGVuIHlvdSBwcmVzcyAidyIgbmV4dCwKK3RoZSAiMmZ3IiBjb21tYW5kIGlzIGV4ZWN1dGVkIGFuZCB0aGUgZGlzcGxheWVkICIyZiIgaXMgcmVtb3ZlZC4KKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXx0ZXh0IGluIHRoZSBWaW0gd2luZG93CQkJCSAgfAorCXx+CQkJCQkJICB8CisJfH4JCQkJCQkgIHwKKwl8LS0gVklTVUFMIC0tCQkJMmYgICAgIDQzLDggICAxNyUgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSBeXl5eXl5eXl5eXgkJICAgICAgXl5eXl5eXl4gXl5eXl5eXl5eXgorCSAgJ3Nob3dtb2RlJwkJICAgICAnc2hvd2NtZCcJJ3J1bGVyJworCis+CisJc2V0IGluY3NlYXJjaAorCitEaXNwbGF5IHRoZSBtYXRjaCBmb3IgYSBzZWFyY2ggcGF0dGVybiB3aGVuIGhhbGZ3YXkgdHlwaW5nIGl0LgorCis+CisJbWFwIFEgZ3EKKworVGhpcyBkZWZpbmVzIGEga2V5IG1hcHBpbmcuICBNb3JlIGFib3V0IHRoYXQgaW4gdGhlIG5leHQgc2VjdGlvbi4gIFRoaXMKK2RlZmluZXMgdGhlICJRIiBjb21tYW5kIHRvIGRvIGZvcm1hdHRpbmcgd2l0aCB0aGUgImdxIiBvcGVyYXRvci4gIFRoaXMgaXMgaG93CitpdCB3b3JrZWQgYmVmb3JlIFZpbSA1LjAuICBPdGhlcndpc2UgdGhlICJRIiBjb21tYW5kIHN0YXJ0cyBFeCBtb2RlLCBidXQgeW91Cit3aWxsIG5vdCBuZWVkIGl0LgorCis+CisJdm5vcmVtYXAgcCA8RXNjPjpsZXQgY3VycmVudF9yZWcgPSBAIjxDUj5ndnM8Qy1SPj1jdXJyZW50X3JlZzxDUj48RXNjPgorCitUaGlzIGlzIGEgY29tcGxpY2F0ZWQgbWFwcGluZy4gIEl0IHdpbGwgbm90IGJlIGV4cGxhaW5lZCBob3cgaXQgd29ya3MgaGVyZS4KK1doYXQgaXQgZG9lcyBpcyB0byBtYWtlICJwIiBpbiBWaXN1YWwgbW9kZSBvdmVyd3JpdGUgdGhlIHNlbGVjdGVkIHRleHQgd2l0aAordGhlIHByZXZpb3VzbHkgeWFua2VkIHRleHQuICBZb3UgY2FuIHNlZSB0aGF0IG1hcHBpbmdzIGNhbiBiZSB1c2VkIHRvIGRvIHF1aXRlCitjb21wbGljYXRlZCB0aGluZ3MuICBTdGlsbCwgaXQgaXMganVzdCBhIHNlcXVlbmNlIG9mIGNvbW1hbmRzIHRoYXQgYXJlCitleGVjdXRlZCBsaWtlIHlvdSB0eXBlZCB0aGVtLgorCis+CisJaWYgJnRfQ28gPiAyIHx8IGhhcygiZ3VpX3J1bm5pbmciKQorCSAgc3ludGF4IG9uCisJICBzZXQgaGxzZWFyY2gKKwllbmRpZgorCitUaGlzIHN3aXRjaGVzIG9uIHN5bnRheCBoaWdobGlnaHRpbmcsIGJ1dCBvbmx5IGlmIGNvbG9ycyBhcmUgYXZhaWxhYmxlLiAgQW5kCit0aGUgJ2hsc2VhcmNoJyBvcHRpb24gdGVsbHMgVmltIHRvIGhpZ2hsaWdodCBtYXRjaGVzIHdpdGggdGhlIGxhc3QgdXNlZCBzZWFyY2gKK3BhdHRlcm4uICBUaGUgImlmIiBjb21tYW5kIGlzIHZlcnkgdXNlZnVsIHRvIHNldCBvcHRpb25zIG9ubHkgd2hlbiBzb21lCitjb25kaXRpb24gaXMgbWV0LiAgTW9yZSBhYm91dCB0aGF0IGluIHx1c3JfNDEudHh0fC4KKworCQkJCQkJCSp2aW1yYy1maWxldHlwZSogID4KKwlmaWxldHlwZSBwbHVnaW4gaW5kZW50IG9uCisKK1RoaXMgc3dpdGNoZXMgb24gdGhyZWUgdmVyeSBjbGV2ZXIgbWVjaGFuaXNtczoKKzEuIEZpbGV0eXBlIGRldGVjdGlvbi4KKyAgIFdoZW5ldmVyIHlvdSBzdGFydCBlZGl0aW5nIGEgZmlsZSwgVmltIHdpbGwgdHJ5IHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mCisgICBmaWxlIHRoaXMgaXMuICBXaGVuIHlvdSBlZGl0ICJtYWluLmMiLCBWaW0gd2lsbCBzZWUgdGhlICIuYyIgZXh0ZW5zaW9uIGFuZAorICAgcmVjb2duaXplIHRoaXMgYXMgYSAiYyIgZmlsZXR5cGUuICBXaGVuIHlvdSBlZGl0IGEgZmlsZSB0aGF0IHN0YXJ0cyB3aXRoCisgICAiIyEvYmluL3NoIiwgVmltIHdpbGwgcmVjb2duaXplIGl0IGFzIGEgInNoIiBmaWxldHlwZS4KKyAgIFRoZSBmaWxldHlwZSBkZXRlY3Rpb24gaXMgdXNlZCBmb3Igc3ludGF4IGhpZ2hsaWdodGluZyBhbmQgdGhlIG90aGVyIHR3bworICAgaXRlbXMgYmVsb3cuCisgICBTZWUgfGZpbGV0eXBlc3wuCisKKzIuIFVzaW5nIGZpbGV0eXBlIHBsdWdpbiBmaWxlcworICAgTWFueSBkaWZmZXJlbnQgZmlsZXR5cGVzIGFyZSBlZGl0ZWQgd2l0aCBkaWZmZXJlbnQgb3B0aW9ucy4gIEZvciBleGFtcGxlLAorICAgd2hlbiB5b3UgZWRpdCBhICJjIiBmaWxlLCBpdCdzIHZlcnkgdXNlZnVsIHRvIHNldCB0aGUgJ2NpbmRlbnQnIG9wdGlvbiB0bworICAgYXV0b21hdGljYWxseSBpbmRlbnQgdGhlIGxpbmVzLiAgVGhlc2UgY29tbW9ubHkgdXNlZnVsIG9wdGlvbiBzZXR0aW5ncyBhcmUKKyAgIGluY2x1ZGVkIHdpdGggVmltIGluIGZpbGV0eXBlIHBsdWdpbnMuICBZb3UgY2FuIGFsc28gYWRkIHlvdXIgb3duLCBzZWUKKyAgIHx3cml0ZS1maWxldHlwZS1wbHVnaW58LgorCiszLiBVc2luZyBpbmRlbnQgZmlsZXMKKyAgIFdoZW4gZWRpdGluZyBwcm9ncmFtcywgdGhlIGluZGVudCBvZiBhIGxpbmUgY2FuIG9mdGVuIGJlIGNvbXB1dGVkCisgICBhdXRvbWF0aWNhbGx5LiAgVmltIGNvbWVzIHdpdGggdGhlc2UgaW5kZW50IHJ1bGVzIGZvciBhIG51bWJlciBvZgorICAgZmlsZXR5cGVzLiAgU2VlIHw6ZmlsZXR5cGUtaW5kZW50LW9ufCBhbmQgJ2luZGVudGV4cHInLgorCis+CisJYXV0b2NtZCBGaWxlVHlwZSB0ZXh0IHNldGxvY2FsIHRleHR3aWR0aD03OAorCitUaGlzIG1ha2VzIFZpbSBicmVhayB0ZXh0IHRvIGF2b2lkIGxpbmVzIGdldHRpbmcgbG9uZ2VyIHRoYW4gNzggY2hhcmFjdGVycy4KK0J1dCBvbmx5IGZvciBmaWxlcyB0aGF0IGhhdmUgYmVlbiBkZXRlY3RlZCB0byBiZSBwbGFpbiB0ZXh0LiAgVGhlcmUgYXJlCithY3R1YWxseSB0d28gcGFydHMgaGVyZS4gICJhdXRvY21kIEZpbGVUeXBlIHRleHQiIGlzIGFuIGF1dG9jb21tYW5kLiAgVGhpcworZGVmaW5lcyB0aGF0IHdoZW4gdGhlIGZpbGUgdHlwZSBpcyBzZXQgdG8gInRleHQiIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpcworYXV0b21hdGljYWxseSBleGVjdXRlZC4gICJzZXRsb2NhbCB0ZXh0d2lkdGg9NzgiIHNldHMgdGhlICd0ZXh0d2lkdGgnIG9wdGlvbgordG8gNzgsIGJ1dCBvbmx5IGxvY2FsbHkgaW4gb25lIGZpbGUuCis+CisKKwlhdXRvY21kIEJ1ZlJlYWRQb3N0ICoKKwkgICAgXCBpZiBsaW5lKCInXCIiKSA+IDAgJiYgbGluZSgiJ1wiIikgPD0gbGluZSgiJCIpIHwKKwkgICAgXCAgIGV4ZSAibm9ybWFsIGdgXCIiIHwKKwkgICAgXCBlbmRpZgorCitBbm90aGVyIGF1dG9jb21tYW5kLiAgVGhpcyB0aW1lIGl0IGlzIHVzZWQgYWZ0ZXIgcmVhZGluZyBhbnkgZmlsZS4gIFRoZQorY29tcGxpY2F0ZWQgc3R1ZmYgYWZ0ZXIgaXQgY2hlY2tzIGlmIHRoZSAnIiBtYXJrIGlzIGRlZmluZWQsIGFuZCBqdW1wcyB0byBpdAoraWYgc28uICBUaGUgYmFja3NsYXNoIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgaXMgdXNlZCB0byBjb250aW51ZSB0aGUgY29tbWFuZAorZnJvbSB0aGUgcHJldmlvdXMgbGluZS4gIFRoYXQgYXZvaWRzIGEgbGluZSBnZXR0aW5nIHZlcnkgbG9uZy4KK1NlZSB8bGluZS1jb250aW51YXRpb258LiAgVGhpcyBvbmx5IHdvcmtzIGluIGEgVmltIHNjcmlwdCBmaWxlLCBub3Qgd2hlbgordHlwaW5nIGNvbW1hbmRzIGF0IHRoZSBjb21tYW5kLWxpbmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA1LjMqCVNpbXBsZSBtYXBwaW5ncworCitBIG1hcHBpbmcgZW5hYmxlcyB5b3UgdG8gYmluZCBhIHNldCBvZiBWaW0gY29tbWFuZHMgdG8gYSBzaW5nbGUga2V5LiAgU3VwcG9zZSwKK2ZvciBleGFtcGxlLCB0aGF0IHlvdSBuZWVkIHRvIHN1cnJvdW5kIGNlcnRhaW4gd29yZHMgd2l0aCBjdXJseSBicmFjZXMuICBJbgorb3RoZXIgd29yZHMsIHlvdSBuZWVkIHRvIGNoYW5nZSBhIHdvcmQgc3VjaCBhcyAiYW1vdW50IiBpbnRvICJ7YW1vdW50fSIuICBXaXRoCit0aGUgOm1hcCBjb21tYW5kLCB5b3UgY2FuIHRlbGwgVmltIHRoYXQgdGhlIEY1IGtleSBkb2VzIHRoaXMgam9iLiAgVGhlIGNvbW1hbmQKK2lzIGFzIGZvbGxvd3M6ID4KKworCTptYXAgPEY1PiBpezxFc2M+ZWF9PEVzYz4KKzwKKwlOb3RlOgorCVdoZW4gZW50ZXJpbmcgdGhpcyBjb21tYW5kLCB5b3UgbXVzdCBlbnRlciA8RjU+IGJ5IHR5cGluZyBmb3VyCisJY2hhcmFjdGVycy4gIFNpbWlsYXJseSwgPEVzYz4gaXMgbm90IGVudGVyZWQgYnkgcHJlc3NpbmcgdGhlIDxFc2M+CisJa2V5LCBidXQgYnkgdHlwaW5nIGZpdmUgY2hhcmFjdGVycy4gIFdhdGNoIG91dCBmb3IgdGhpcyBkaWZmZXJlbmNlCisJd2hlbiByZWFkaW5nIHRoZSBtYW51YWwhCisKK0xldCdzIGJyZWFrIHRoaXMgZG93bjoKKyAgICA8RjU+CVRoZSBGNSBmdW5jdGlvbiBrZXkuICBUaGlzIGlzIHRoZSB0cmlnZ2VyIGtleSB0aGF0IGNhdXNlcyB0aGUKKwkJY29tbWFuZCB0byBiZSBleGVjdXRlZCBhcyB0aGUga2V5IGlzIHByZXNzZWQuCisKKyAgICBpezxFc2M+CUluc2VydCB0aGUgeyBjaGFyYWN0ZXIuICBUaGUgPEVzYz4ga2V5IGVuZHMgSW5zZXJ0IG1vZGUuCisKKyAgICBlCQlNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIHdvcmQuCisKKyAgICBhfTxFc2M+CUFwcGVuZCB0aGUgfSB0byB0aGUgd29yZC4KKworQWZ0ZXIgeW91IGV4ZWN1dGUgdGhlICI6bWFwIiBjb21tYW5kLCBhbGwgeW91IGhhdmUgdG8gZG8gdG8gcHV0IHt9IGFyb3VuZCBhCit3b3JkIGlzIHRvIHB1dCB0aGUgY3Vyc29yIG9uIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIHByZXNzIEY1LgorCitJbiB0aGlzIGV4YW1wbGUsIHRoZSB0cmlnZ2VyIGlzIGEgc2luZ2xlIGtleTsgaXQgY2FuIGJlIGFueSBzdHJpbmcuICBCdXQgd2hlbgoreW91IHVzZSBhbiBleGlzdGluZyBWaW0gY29tbWFuZCwgdGhhdCBjb21tYW5kIHdpbGwgbm8gbG9uZ2VyIGJlIGF2YWlsYWJsZS4KK1lvdSBiZXR0ZXIgYXZvaWQgdGhhdC4KKyAgIE9uZSBrZXkgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIG1hcHBpbmdzIGlzIHRoZSBiYWNrc2xhc2guICBTaW5jZSB5b3UKK3Byb2JhYmx5IHdhbnQgdG8gZGVmaW5lIG1vcmUgdGhhbiBvbmUgbWFwcGluZywgYWRkIGFub3RoZXIgY2hhcmFjdGVyLiAgWW91Citjb3VsZCBtYXAgIlxwIiB0byBhZGQgcGFyZW5zIGFyb3VuZCBhIHdvcmQsIGFuZCAiXGMiIHRvIGFkZCBjdXJseSBicmFjZXMsIGZvcgorZXhhbXBsZTogPgorCisJOm1hcCBccCBpKDxFc2M+ZWEpPEVzYz4KKwk6bWFwIFxjIGl7PEVzYz5lYX08RXNjPgorCitZb3UgbmVlZCB0byB0eXBlIHRoZSBcIGFuZCB0aGUgcCBxdWlja2x5IGFmdGVyIGFub3RoZXIsIHNvIHRoYXQgVmltIGtub3dzIHRoZXkKK2JlbG9uZyB0b2dldGhlci4KKworVGhlICI6bWFwIiBjb21tYW5kICh3aXRoIG5vIGFyZ3VtZW50cykgbGlzdHMgeW91ciBjdXJyZW50IG1hcHBpbmdzLiAgQXQKK2xlYXN0IHRoZSBvbmVzIGZvciBOb3JtYWwgbW9kZS4gIE1vcmUgYWJvdXQgbWFwcGluZ3MgaW4gc2VjdGlvbiB8NDAuMXwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA1LjQqCUFkZGluZyBhIHBsdWdpbgkJCQkJKmFkZC1wbHVnaW4qICpwbHVnaW4qCisKK1ZpbSdzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGV4dGVuZGVkIGJ5IGFkZGluZyBwbHVnaW5zLiAgQSBwbHVnaW4gaXMgbm90aGluZworbW9yZSB0aGFuIGEgVmltIHNjcmlwdCBmaWxlIHRoYXQgaXMgbG9hZGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBWaW0gc3RhcnRzLiAgWW91CitjYW4gYWRkIGEgcGx1Z2luIHZlcnkgZWFzaWx5IGJ5IGRyb3BwaW5nIGl0IGluIHlvdXIgcGx1Z2luIGRpcmVjdG9yeS4KK3tub3QgYXZhaWxhYmxlIHdoZW4gVmltIHdhcyBjb21waWxlZCB3aXRob3V0IHRoZSB8K2V2YWx8IGZlYXR1cmV9CisKK1RoZXJlIGFyZSB0d28gdHlwZXMgb2YgcGx1Z2luczoKKworICAgIGdsb2JhbCBwbHVnaW46IFVzZWQgZm9yIGFsbCBraW5kcyBvZiBmaWxlcworICBmaWxldHlwZSBwbHVnaW46IE9ubHkgdXNlZCBmb3IgYSBzcGVjaWZpYyB0eXBlIG9mIGZpbGUKKworVGhlIGdsb2JhbCBwbHVnaW5zIHdpbGwgYmUgZGlzY3Vzc2VkIGZpcnN0LCB0aGVuIHRoZSBmaWxldHlwZSBvbmVzCit8YWRkLWZpbGV0eXBlLXBsdWdpbnwuCisKKworR0xPQkFMIFBMVUdJTlMJCQkJCQkqc3RhbmRhcmQtcGx1Z2luKgorCitXaGVuIHlvdSBzdGFydCBWaW0sIGl0IHdpbGwgYXV0b21hdGljYWxseSBsb2FkIGEgbnVtYmVyIG9mIGdsb2JhbCBwbHVnaW5zLgorWW91IGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgZm9yIHRoaXMuICBUaGV5IGFkZCBmdW5jdGlvbmFsaXR5IHRoYXQgbW9zdAorcGVvcGxlIHdpbGwgd2FudCB0byB1c2UsIGJ1dCB3aGljaCB3YXMgaW1wbGVtZW50ZWQgYXMgYSBWaW0gc2NyaXB0IGluc3RlYWQgb2YKK2JlaW5nIGNvbXBpbGVkIGludG8gVmltLiAgWW91IGNhbiBmaW5kIHRoZW0gbGlzdGVkIGluIHRoZSBoZWxwIGluZGV4Cit8c3RhbmRhcmQtcGx1Z2luLWxpc3R8LiAgQWxzbyBzZWUgfGxvYWQtcGx1Z2luc3wuCisKKwkJCQkJCQkqYWRkLWdsb2JhbC1wbHVnaW4qCitZb3UgY2FuIGFkZCBhIGdsb2JhbCBwbHVnaW4gdG8gYWRkIGZ1bmN0aW9uYWxpdHkgdGhhdCB3aWxsIGFsd2F5cyBiZSBwcmVzZW50Cit3aGVuIHlvdSB1c2UgVmltLiAgVGhlcmUgYXJlIG9ubHkgdHdvIHN0ZXBzIGZvciBhZGRpbmcgYSBnbG9iYWwgcGx1Z2luOgorMS4gR2V0IGEgY29weSBvZiB0aGUgcGx1Z2luLgorMi4gRHJvcCBpdCBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5LgorCisKK0dFVFRJTkcgQSBHTE9CQUwgUExVR0lOCisKK1doZXJlIGNhbiB5b3UgZmluZCBwbHVnaW5zPworLSBTb21lIGNvbWUgd2l0aCBWaW0uICBZb3UgY2FuIGZpbmQgdGhlbSBpbiB0aGUgZGlyZWN0b3J5ICRWSU1SVU5USU1FL21hY3JvcworICBhbmQgaXRzIHN1Yi1kaXJlY3Rvcmllcy4KKy0gRG93bmxvYWQgZnJvbSB0aGUgbmV0LCBjaGVjayBvdXQgaHR0cDovL3ZpbS5zZi5uZXQuCistIFRoZXkgYXJlIHNvbWV0aW1lcyBwb3N0ZWQgaW4gYSBWaW0gfG1haWxsaXN0fC4KKy0gWW91IGNvdWxkIHdyaXRlIG9uZSB5b3Vyc2VsZiwgc2VlIHx3cml0ZS1wbHVnaW58LgorCisKK1VTSU5HIEEgR0xPQkFMIFBMVUdJTgorCitGaXJzdCByZWFkIHRoZSB0ZXh0IGluIHRoZSBwbHVnaW4gaXRzZWxmIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lhbCBjb25kaXRpb25zLgorVGhlbiBjb3B5IHRoZSBmaWxlIHRvIHlvdXIgcGx1Z2luIGRpcmVjdG9yeToKKworCXN5c3RlbQkJcGx1Z2luIGRpcmVjdG9yeSB+CisJVW5peAkJfi8udmltL3BsdWdpbi8KKwlQQyBhbmQgT1MvMgkkSE9NRS92aW1maWxlcy9wbHVnaW4gb3IgJFZJTS92aW1maWxlcy9wbHVnaW4KKwlBbWlnYQkJczp2aW1maWxlcy9wbHVnaW4KKwlNYWNpbnRvc2gJJFZJTTp2aW1maWxlczpwbHVnaW4KKwlNYWMgT1MgWAl+Ly52aW0vcGx1Z2luLworCVJJU0MtT1MJCUNob2ljZXM6dmltZmlsZXMucGx1Z2luCisKK0V4YW1wbGUgZm9yIFVuaXggKGFzc3VtaW5nIHlvdSBkaWRuJ3QgaGF2ZSBhIHBsdWdpbiBkaXJlY3RvcnkgeWV0KTogPgorCisJbWtkaXIgfi8udmltCisJbWtkaXIgfi8udmltL3BsdWdpbgorCWNwIC91c3IvbG9jYWwvc2hhcmUvdmltL3ZpbTYwL21hY3Jvcy9qdXN0aWZ5LnZpbSB+Ly52aW0vcGx1Z2luCisKK1RoYXQncyBhbGwhICBOb3cgeW91IGNhbiB1c2UgdGhlIGNvbW1hbmRzIGRlZmluZWQgaW4gdGhpcyBwbHVnaW4gdG8ganVzdGlmeQordGV4dC4KKworCitGSUxFVFlQRSBQTFVHSU5TCQkJKmFkZC1maWxldHlwZS1wbHVnaW4qICpmdHBsdWdpbnMqCisKK1RoZSBWaW0gZGlzdHJpYnV0aW9uIGNvbWVzIHdpdGggYSBzZXQgb2YgcGx1Z2lucyBmb3IgZGlmZmVyZW50IGZpbGV0eXBlcyB0aGF0Cit5b3UgY2FuIHN0YXJ0IHVzaW5nIHdpdGggdGhpcyBjb21tYW5kOiA+CisKKwk6ZmlsZXR5cGUgcGx1Z2luIG9uCisKK1RoYXQncyBhbGwhICBTZWUgfHZpbXJjLWZpbGV0eXBlfC4KKworSWYgeW91IGFyZSBtaXNzaW5nIGEgcGx1Z2luIGZvciBhIGZpbGV0eXBlIHlvdSBhcmUgdXNpbmcsIG9yIHlvdSBmb3VuZCBhCitiZXR0ZXIgb25lLCB5b3UgY2FuIGFkZCBpdC4gIFRoZXJlIGFyZSB0d28gc3RlcHMgZm9yIGFkZGluZyBhIGZpbGV0eXBlIHBsdWdpbjoKKzEuIEdldCBhIGNvcHkgb2YgdGhlIHBsdWdpbi4KKzIuIERyb3AgaXQgaW4gdGhlIHJpZ2h0IGRpcmVjdG9yeS4KKworCitHRVRUSU5HIEEgRklMRVRZUEUgUExVR0lOCisKK1lvdSBjYW4gZmluZCB0aGVtIGluIHRoZSBzYW1lIHBsYWNlcyBhcyB0aGUgZ2xvYmFsIHBsdWdpbnMuICBXYXRjaCBvdXQgaWYgdGhlCit0eXBlIG9mIGZpbGUgaXMgbWVudGlvbmVkLCB0aGVuIHlvdSBrbm93IGlmIHRoZSBwbHVnaW4gaXMgYSBnbG9iYWwgb3IgYQorZmlsZXR5cGUgb25lLiAgVGhlIHNjcmlwdHMgaW4gJFZJTVJVTlRJTUUvbWFjcm9zIGFyZSBnbG9iYWwgb25lcywgdGhlIGZpbGV0eXBlCitwbHVnaW5zIGFyZSBpbiAkVklNUlVOVElNRS9mdHBsdWdpbi4KKworCitVU0lORyBBIEZJTEVUWVBFIFBMVUdJTgkJCQkJKmZ0cGx1Z2luLW5hbWUqCisKK1lvdSBjYW4gYWRkIGEgZmlsZXR5cGUgcGx1Z2luIGJ5IGRyb3BwaW5nIGl0IGluIHRoZSByaWdodCBkaXJlY3RvcnkuICBUaGUKK25hbWUgb2YgdGhpcyBkaXJlY3RvcnkgaXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IG1lbnRpb25lZCBhYm92ZSBmb3IgZ2xvYmFsCitwbHVnaW5zLCBidXQgdGhlIGxhc3QgcGFydCBpcyAiZnRwbHVnaW4iLiAgU3VwcG9zZSB5b3UgaGF2ZSBmb3VuZCBhIHBsdWdpbiBmb3IKK3RoZSAic3R1ZmYiIGZpbGV0eXBlLCBhbmQgeW91IGFyZSBvbiBVbml4LiAgVGhlbiB5b3UgY2FuIG1vdmUgdGhpcyBmaWxlIHRvIHRoZQorZnRwbHVnaW4gZGlyZWN0b3J5OiA+CisKKwltdiB0aGVmaWxlIH4vLnZpbS9mdHBsdWdpbi9zdHVmZi52aW0KKworSWYgdGhhdCBmaWxlIGFscmVhZHkgZXhpc3RzIHlvdSBhbHJlYWR5IGhhdmUgYSBwbHVnaW4gZm9yICJzdHVmZiIuICBZb3UgbWlnaHQKK3dhbnQgdG8gY2hlY2sgaWYgdGhlIGV4aXN0aW5nIHBsdWdpbiBkb2Vzbid0IGNvbmZsaWN0IHdpdGggdGhlIG9uZSB5b3UgYXJlCithZGRpbmcuICBJZiBpdCdzIE9LLCB5b3UgY2FuIGdpdmUgdGhlIG5ldyBvbmUgYW5vdGhlciBuYW1lOiA+CisKKwltdiB0aGVmaWxlIH4vLnZpbS9mdHBsdWdpbi9zdHVmZl90b28udmltCisKK1RoZSB1bmRlcnNjb3JlIGlzIHVzZWQgdG8gc2VwYXJhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGV0eXBlIGZyb20gdGhlIHJlc3QsCit3aGljaCBjYW4gYmUgYW55dGhpbmcuICBJZiB5b3Ugd291bGQgdXNlICJvdGhlcnN0dWZmLnZpbSIgaXQgd291bGRuJ3Qgd29yaywgaXQKK3dvdWxkIGJlIGxvYWRlZCBmb3IgdGhlICJvdGhlcnN0dWZmIiBmaWxldHlwZS4KKworT24gTVMtRE9TIHlvdSBjYW5ub3QgdXNlIGxvbmcgZmlsZW5hbWVzLiAgWW91IHdvdWxkIHJ1biBpbnRvIHRyb3VibGUgaWYgeW91CithZGQgYSBzZWNvbmQgcGx1Z2luIGFuZCB0aGUgZmlsZXR5cGUgaGFzIG1vcmUgdGhhbiBzaXggY2hhcmFjdGVycy4gIFlvdSBjYW4KK3VzZSBhbiBleHRyYSBkaXJlY3RvcnkgdG8gZ2V0IGFyb3VuZCB0aGlzOiA+CisKKwlta2RpciAkVklNL3ZpbWZpbGVzL2Z0cGx1Z2luL2ZvcnRyYW4KKwljb3B5IHRoZWZpbGUgJFZJTS92aW1maWxlcy9mdHBsdWdpbi9mb3J0cmFuL3Rvby52aW0KKworVGhlIGdlbmVyaWMgbmFtZXMgZm9yIHRoZSBmaWxldHlwZSBwbHVnaW5zIGFyZTogPgorCisJZnRwbHVnaW4vPGZpbGV0eXBlPi52aW0KKwlmdHBsdWdpbi88ZmlsZXR5cGU+XzxuYW1lPi52aW0KKwlmdHBsdWdpbi88ZmlsZXR5cGU+LzxuYW1lPi52aW0KKworSGVyZSAiPG5hbWU+IiBjYW4gYmUgYW55IG5hbWUgdGhhdCB5b3UgcHJlZmVyLgorRXhhbXBsZXMgZm9yIHRoZSAic3R1ZmYiIGZpbGV0eXBlIG9uIFVuaXg6ID4KKworCX4vLnZpbS9mdHBsdWdpbi9zdHVmZi52aW0KKwl+Ly52aW0vZnRwbHVnaW4vc3R1ZmZfZGVmLnZpbQorCX4vLnZpbS9mdHBsdWdpbi9zdHVmZi9oZWFkZXIudmltCisKK1RoZSA8ZmlsZXR5cGU+IHBhcnQgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGV0eXBlIHRoZSBwbHVnaW4gaXMgdG8gYmUgdXNlZCBmb3IuCitPbmx5IGZpbGVzIG9mIHRoaXMgZmlsZXR5cGUgd2lsbCB1c2UgdGhlIHNldHRpbmdzIGZyb20gdGhlIHBsdWdpbi4gIFRoZSA8bmFtZT4KK3BhcnQgb2YgdGhlIHBsdWdpbiBmaWxlIGRvZXNuJ3QgbWF0dGVyLCB5b3UgY2FuIHVzZSBpdCB0byBoYXZlIHNldmVyYWwgcGx1Z2lucworZm9yIHRoZSBzYW1lIGZpbGV0eXBlLiAgTm90ZSB0aGF0IGl0IG11c3QgZW5kIGluICIudmltIi4KKworCitGdXJ0aGVyIHJlYWRpbmc6Cit8ZmlsZXR5cGUtcGx1Z2luc3wJRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZpbGV0eXBlIHBsdWdpbnMgYW5kIGluZm9ybWF0aW9uCisJCQlhYm91dCBob3cgdG8gYXZvaWQgdGhhdCBtYXBwaW5ncyBjYXVzZSBwcm9ibGVtcy4KK3xsb2FkLXBsdWdpbnN8CQlXaGVuIHRoZSBnbG9iYWwgcGx1Z2lucyBhcmUgbG9hZGVkIGR1cmluZyBzdGFydHVwLgorfGZ0cGx1Z2luLW92ZXJydWxlfAlPdmVycnVsaW5nIHRoZSBzZXR0aW5ncyBmcm9tIGEgZ2xvYmFsIHBsdWdpbi4KK3x3cml0ZS1wbHVnaW58CQlIb3cgdG8gd3JpdGUgYSBwbHVnaW4gc2NyaXB0LgorfHBsdWdpbi1kZXRhaWxzfAlGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyBwbHVnaW5zIG9yIHdoZW4geW91cgorCQkJcGx1Z2luIGRvZXNuJ3Qgd29yay4KK3xuZXctZmlsZXR5cGV8CQlIb3cgdG8gZGV0ZWN0IGEgbmV3IGZpbGUgdHlwZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDUuNSoJQWRkaW5nIGEgaGVscCBmaWxlCQkqYWRkLWxvY2FsLWhlbHAqICptYXRjaGl0LWluc3RhbGwqCisKK0lmIHlvdSBhcmUgbHVja3ksIHRoZSBwbHVnaW4geW91IGluc3RhbGxlZCBhbHNvIGNvbWVzIHdpdGggYSBoZWxwIGZpbGUuICBXZQord2lsbCBleHBsYWluIGhvdyB0byBpbnN0YWxsIHRoZSBoZWxwIGZpbGUsIHNvIHRoYXQgeW91IGNhbiBlYXNpbHkgZmluZCBoZWxwCitmb3IgeW91ciBuZXcgcGx1Z2luLgorICAgTGV0IHVzIHVzZSB0aGUgIm1hdGNoaXQudmltIiBwbHVnaW4gYXMgYW4gZXhhbXBsZSAoaXQgaXMgaW5jbHVkZWQgd2l0aAorVmltKS4gIFRoaXMgcGx1Z2luIG1ha2VzIHRoZSAiJSIgY29tbWFuZCBqdW1wIHRvIG1hdGNoaW5nIEhUTUwgdGFncywKK2lmL2Vsc2UvZW5kaWYgaW4gVmltIHNjcmlwdHMsIGV0Yy4gIFZlcnkgdXNlZnVsLCBhbHRob3VnaCBpdCdzIG5vdCBiYWNrd2FyZHMKK2NvbXBhdGlibGUgKHRoYXQncyB3aHkgaXQgaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCkuCisgICBUaGlzIHBsdWdpbiBjb21lcyB3aXRoIGRvY3VtZW50YXRpb246ICJtYXRjaGl0LnR4dCIuICBMZXQncyBmaXJzdCBjb3B5IHRoZQorcGx1Z2luIHRvIHRoZSByaWdodCBkaXJlY3RvcnkuICBUaGlzIHRpbWUgd2Ugd2lsbCBkbyBpdCBmcm9tIGluc2lkZSBWaW0sIHNvCit0aGF0IHdlIGNhbiB1c2UgJFZJTVJVTlRJTUUuICAoWW91IG1heSBza2lwIHNvbWUgb2YgdGhlICJta2RpciIgY29tbWFuZHMgaWYKK3lvdSBhbHJlYWR5IGhhdmUgdGhlIGRpcmVjdG9yeS4pID4KKworCTohbWtkaXIgfi8udmltCisJOiFta2RpciB+Ly52aW0vcGx1Z2luCisJOiFjcCAkVklNUlVOVElNRS9tYWNyb3MvbWF0Y2hpdC52aW0gfi8udmltL3BsdWdpbgorCitOb3cgY3JlYXRlIGEgImRvYyIgZGlyZWN0b3J5IGluIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgaW4gJ3J1bnRpbWVwYXRoJy4gPgorCisJOiFta2RpciB+Ly52aW0vZG9jCisKK0NvcHkgdGhlIGhlbHAgZmlsZSB0byB0aGUgImRvYyIgZGlyZWN0b3J5LiA+CisKKwk6IWNwICRWSU1SVU5USU1FL21hY3Jvcy9tYXRjaGl0LnR4dCB+Ly52aW0vZG9jCisKK05vdyBjb21lcyB0aGUgdHJpY2ssIHdoaWNoIGFsbG93cyB5b3UgdG8ganVtcCB0byB0aGUgc3ViamVjdHMgaW4gdGhlIG5ldyBoZWxwCitmaWxlOiBHZW5lcmF0ZSB0aGUgbG9jYWwgdGFncyBmaWxlIHdpdGggdGhlIHw6aGVscHRhZ3N8IGNvbW1hbmQuID4KKworCTpoZWxwdGFncyB+Ly52aW0vZG9jCisKK05vdyB5b3UgY2FuIHVzZSB0aGUgPgorCisJOmhlbHAgZyUKKworY29tbWFuZCB0byBmaW5kIGhlbHAgZm9yICJnJSIgaW4gdGhlIGhlbHAgZmlsZSB5b3UganVzdCBhZGRlZC4gIFlvdSBjYW4gc2VlIGFuCitlbnRyeSBmb3IgdGhlIGxvY2FsIGhlbHAgZmlsZSB3aGVuIHlvdSBkbzogPgorCisJOmhlbHAgbG9jYWwtYWRkaXRpb25zCisKK1RoZSB0aXRsZSBsaW5lcyBmcm9tIHRoZSBsb2NhbCBoZWxwIGZpbGVzIGFyZSBhdXRvbWFnaWNhbGx5IGFkZGVkIHRvIHRoaXMKK3NlY3Rpb24uICBUaGVyZSB5b3UgY2FuIHNlZSB3aGljaCBsb2NhbCBoZWxwIGZpbGVzIGhhdmUgYmVlbiBhZGRlZCBhbmQganVtcCB0bwordGhlbSB0aHJvdWdoIHRoZSB0YWcuCisKK0ZvciB3cml0aW5nIGEgbG9jYWwgaGVscCBmaWxlLCBzZWUgfHdyaXRlLWxvY2FsLWhlbHB8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNS42KglUaGUgb3B0aW9uIHdpbmRvdworCitJZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGFuIG9wdGlvbiB0aGF0IGRvZXMgd2hhdCB5b3Ugd2FudCwgeW91IGNhbiBzZWFyY2ggaW4KK3RoZSBoZWxwIGZpbGVzIGhlcmU6IHxvcHRpb25zfC4gIEFub3RoZXIgd2F5IGlzIGJ5IHVzaW5nIHRoaXMgY29tbWFuZDogPgorCisJOm9wdGlvbnMKKworVGhpcyBvcGVucyBhIG5ldyB3aW5kb3csIHdpdGggYSBsaXN0IG9mIG9wdGlvbnMgd2l0aCBhIG9uZS1saW5lIGV4cGxhbmF0aW9uLgorVGhlIG9wdGlvbnMgYXJlIGdyb3VwZWQgYnkgc3ViamVjdC4gIE1vdmUgdGhlIGN1cnNvciB0byBhIHN1YmplY3QgYW5kIHByZXNzCis8RW50ZXI+IHRvIGp1bXAgdGhlcmUuICBQcmVzcyA8RW50ZXI+IGFnYWluIHRvIGp1bXAgYmFjay4gIE9yIHVzZSBDVFJMLU8uCisKK1lvdSBjYW4gY2hhbmdlIHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24uICBGb3IgZXhhbXBsZSwgbW92ZSB0byB0aGUgImRpc3BsYXlpbmcKK3RleHQiIHN1YmplY3QuICBUaGVuIG1vdmUgdGhlIGN1cnNvciBkb3duIHRvIHRoaXMgbGluZToKKworCXNldCB3cmFwCW5vd3JhcCB+CisKK1doZW4geW91IGhpdCA8RW50ZXI+LCB0aGUgbGluZSB3aWxsIGNoYW5nZSB0bzoKKworCXNldCBub3dyYXAJd3JhcCB+CisKK1RoZSBvcHRpb24gaGFzIG5vdyBiZWVuIHN3aXRjaGVkIG9mZi4KKworSnVzdCBhYm92ZSB0aGlzIGxpbmUgaXMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgJ3dyYXAnIG9wdGlvbi4gIE1vdmUgdGhlCitjdXJzb3Igb25lIGxpbmUgdXAgdG8gcGxhY2UgaXQgaW4gdGhpcyBsaW5lLiAgTm93IGhpdCA8RW50ZXI+IGFuZCB5b3UganVtcCB0bwordGhlIGZ1bGwgaGVscCBvbiB0aGUgJ3dyYXAnIG9wdGlvbi4KKworRm9yIG9wdGlvbnMgdGhhdCB0YWtlIGEgbnVtYmVyIG9yIHN0cmluZyBhcmd1bWVudCB5b3UgY2FuIGVkaXQgdGhlIHZhbHVlLgorVGhlbiBwcmVzcyA8RW50ZXI+IHRvIGFwcGx5IHRoZSBuZXcgdmFsdWUuICBGb3IgZXhhbXBsZSwgbW92ZSB0aGUgY3Vyc29yIGEgZmV3CitsaW5lcyB1cCB0byB0aGlzIGxpbmU6CisKKwlzZXQgc289MCB+CisKK1Bvc2l0aW9uIHRoZSBjdXJzb3Igb24gdGhlIHplcm8gd2l0aCAiJCIuICBDaGFuZ2UgaXQgaW50byBhIGZpdmUgd2l0aCAicjUiLgorVGhlbiBwcmVzcyA8RW50ZXI+IHRvIGFwcGx5IHRoZSBuZXcgdmFsdWUuICBXaGVuIHlvdSBub3cgbW92ZSB0aGUgY3Vyc29yCithcm91bmQgeW91IHdpbGwgbm90aWNlIHRoYXQgdGhlIHRleHQgc3RhcnRzIHNjcm9sbGluZyBiZWZvcmUgeW91IHJlYWNoIHRoZQorYm9yZGVyLiAgVGhpcyBpcyB3aGF0IHRoZSAnc2Nyb2xsb2ZmJyBvcHRpb24gZG9lcywgaXQgc3BlY2lmaWVzIGFuIG9mZnNldAorZnJvbSB0aGUgd2luZG93IGJvcmRlciB3aGVyZSBzY3JvbGxpbmcgc3RhcnRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNS43KglPZnRlbiB1c2VkIG9wdGlvbnMKKworVGhlcmUgYXJlIGFuIGF3ZnVsIGxvdCBvZiBvcHRpb25zLiAgTW9zdCBvZiB0aGVtIHlvdSB3aWxsIGhhcmRseSBldmVyIHVzZS4KK1NvbWUgb2YgdGhlIG1vcmUgdXNlZnVsIG9uZXMgd2lsbCBiZSBtZW50aW9uZWQgaGVyZS4gIERvbid0IGZvcmdldCB5b3UgY2FuCitmaW5kIG1vcmUgaGVscCBvbiB0aGVzZSBvcHRpb25zIHdpdGggdGhlICI6aGVscCIgY29tbWFuZCwgd2l0aCBzaW5nbGUgcXVvdGVzCitiZWZvcmUgYW5kIGFmdGVyIHRoZSBvcHRpb24gbmFtZS4gIEZvciBleGFtcGxlOiA+CisKKwk6aGVscCAnd3JhcCcKKworSW4gY2FzZSB5b3UgaGF2ZSBtZXNzZWQgdXAgYW4gb3B0aW9uIHZhbHVlLCB5b3UgY2FuIHNldCBpdCBiYWNrIHRvIHRoZQorZGVmYXVsdCBieSBwdXR0aW5nIGEgYW1wZXJzYW5kICgmKSBhZnRlciB0aGUgb3B0aW9uIG5hbWUuICBFeGFtcGxlOiA+CisKKwk6c2V0IGlza2V5d29yZCYKKworCitOT1QgV1JBUFBJTkcgTElORVMKKworVmltIG5vcm1hbGx5IHdyYXBzIGxvbmcgbGluZXMsIHNvIHRoYXQgeW91IGNhbiBzZWUgYWxsIG9mIHRoZSB0ZXh0LiAgU29tZXRpbWVzCitpdCdzIGJldHRlciB0byBsZXQgdGhlIHRleHQgY29udGludWUgcmlnaHQgb2YgdGhlIHdpbmRvdy4gIFRoZW4geW91IG5lZWQgdG8KK3Njcm9sbCB0aGUgdGV4dCBsZWZ0LXJpZ2h0IHRvIHNlZSBhbGwgb2YgYSBsb25nIGxpbmUuICBTd2l0Y2ggd3JhcHBpbmcgb2Ygd2l0aAordGhpcyBjb21tYW5kOiA+CisKKwk6c2V0IG5vd3JhcAorCitWaW0gd2lsbCBhdXRvbWF0aWNhbGx5IHNjcm9sbCB0aGUgdGV4dCB3aGVuIHlvdSBtb3ZlIHRvIHRleHQgdGhhdCBpcyBub3QKK2Rpc3BsYXllZC4gIFRvIHNlZSBhIGNvbnRleHQgb2YgdGVuIGNoYXJhY3RlcnMsIGRvIHRoaXM6ID4KKworCTpzZXQgc2lkZXNjcm9sbD0xMAorCitUaGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSB0ZXh0IGluIHRoZSBmaWxlLCBvbmx5IHRoZSB3YXkgaXQgaXMgZGlzcGxheWVkLgorCisKK1dSQVBQSU5HIE1PVkVNRU5UIENPTU1BTkRTCisKK01vc3QgY29tbWFuZHMgZm9yIG1vdmluZyBhcm91bmQgd2lsbCBzdG9wIG1vdmluZyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhCitsaW5lLiAgWW91IGNhbiBjaGFuZ2UgdGhhdCB3aXRoIHRoZSAnd2hpY2h3cmFwJyBvcHRpb24uICBUaGlzIHNldHMgaXQgdG8gdGhlCitkZWZhdWx0IHZhbHVlOiA+CisKKwk6c2V0IHdoaWNod3JhcD1iLHMKKworVGhpcyBhbGxvd3MgdGhlIDxCUz4ga2V5LCB3aGVuIHVzZWQgaW4gdGhlIGZpcnN0IHBvc2l0aW9uIG9mIGEgbGluZSwgdG8gbW92ZQordGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lLiAgQW5kIHRoZSA8U3BhY2U+IGtleSBtb3ZlcyBmcm9tCit0aGUgZW5kIG9mIGEgbGluZSB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgb25lLgorCitUbyBhbGxvdyB0aGUgY3Vyc29yIGtleXMgPExlZnQ+IGFuZCA8UmlnaHQ+IHRvIGFsc28gd3JhcCwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOnNldCB3aGljaHdyYXA9YixzLDwsPgorCitUaGlzIGlzIHN0aWxsIG9ubHkgZm9yIE5vcm1hbCBtb2RlLiAgVG8gbGV0IDxMZWZ0PiBhbmQgPFJpZ2h0PiBkbyB0aGlzIGluCitJbnNlcnQgbW9kZSBhcyB3ZWxsOiA+CisKKwk6c2V0IHdoaWNod3JhcD1iLHMsPCw+LFssXQorCitUaGVyZSBhcmUgYSBmZXcgb3RoZXIgZmxhZ3MgdGhhdCBjYW4gYmUgYWRkZWQsIHNlZSAnd2hpY2h3cmFwJy4KKworCitWSUVXSU5HIFRBQlMKKworV2hlbiB0aGVyZSBhcmUgdGFicyBpbiBhIGZpbGUsIHlvdSBjYW5ub3Qgc2VlIHdoZXJlIHRoZXkgYXJlLiAgVG8gbWFrZSB0aGVtCit2aXNpYmxlOiA+CisKKwk6c2V0IGxpc3QKKworTm93IGV2ZXJ5IFRhYiBpcyBkaXNwbGF5ZWQgYXMgXkkuICBBbmQgYSAkIGlzIGRpc3BsYXllZCBhdCB0aGUgZW5kIG9mIGVhY2gKK2xpbmUsIHNvIHRoYXQgeW91IGNhbiBzcG90IHRyYWlsaW5nIHNwYWNlcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBnbyB1bm5vdGljZWQuCisgICBBIGRpc2FkdmFudGFnZSBpcyB0aGF0IHRoaXMgbG9va3MgdWdseSB3aGVuIHRoZXJlIGFyZSBtYW55IFRhYnMgaW4gYSBmaWxlLgorSWYgeW91IGhhdmUgYSBjb2xvciB0ZXJtaW5hbCwgb3IgYXJlIHVzaW5nIHRoZSBHVUksIFZpbSBjYW4gc2hvdyB0aGUgc3BhY2VzCithbmQgdGFicyBhcyBoaWdobGlnaHRlZCBjaGFyYWN0ZXJzLiAgVXNlIHRoZSAnbGlzdGNoYXJzJyBvcHRpb246ID4KKworCTpzZXQgbGlzdGNoYXJzPXRhYjo+LSx0cmFpbDotCisKK05vdyBldmVyeSB0YWIgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgIj4tLS0iICh3aXRoIG1vcmUgb3IgbGVzcyAiLSIpIGFuZCB0cmFpbGluZword2hpdGUgc3BhY2UgYXMgIi0iLiAgTG9va3MgYSBsb3QgYmV0dGVyLCBkb2Vzbid0IGl0PworCisKK0tFWVdPUkRTCisKK1RoZSAnaXNrZXl3b3JkJyBvcHRpb24gc3BlY2lmaWVzIHdoaWNoIGNoYXJhY3RlcnMgY2FuIGFwcGVhciBpbiBhIHdvcmQ6ID4KKworCTpzZXQgaXNrZXl3b3JkCis8CSAgaXNrZXl3b3JkPUAsNDgtNTcsXywxOTItMjU1IH4KKworVGhlICJAIiBzdGFuZHMgZm9yIGFsbCBhbHBoYWJldGljIGxldHRlcnMuICAiNDgtNTciIHN0YW5kcyBmb3IgQVNDSUkKK2NoYXJhY3RlcnMgNDggdG8gNTcsIHdoaWNoIGFyZSB0aGUgbnVtYmVycyAwIHRvIDkuICAiMTkyLTI1NSIgYXJlIHRoZQorcHJpbnRhYmxlIGxhdGluIGNoYXJhY3RlcnMuCisgICBTb21ldGltZXMgeW91IHdpbGwgd2FudCB0byBpbmNsdWRlIGEgZGFzaCBpbiBrZXl3b3Jkcywgc28gdGhhdCBjb21tYW5kcworbGlrZSAidyIgY29uc2lkZXIgInVwcGVyLWNhc2UiIHRvIGJlIG9uZSB3b3JkLiAgWW91IGNhbiBkbyBpdCBsaWtlIHRoaXM6ID4KKworCTpzZXQgaXNrZXl3b3JkKz0tCisJOnNldCBpc2tleXdvcmQKKzwJICBpc2tleXdvcmQ9QCw0OC01NyxfLDE5Mi0yNTUsLSB+CisKK0lmIHlvdSBsb29rIGF0IHRoZSBuZXcgdmFsdWUsIHlvdSB3aWxsIHNlZSB0aGF0IFZpbSBoYXMgYWRkZWQgYSBjb21tYSBmb3IgeW91LgorICAgVG8gcmVtb3ZlIGEgY2hhcmFjdGVyIHVzZSAiLT0iLiAgRm9yIGV4YW1wbGUsIHRvIHJlbW92ZSB0aGUgdW5kZXJzY29yZTogPgorCisJOnNldCBpc2tleXdvcmQtPV8KKwk6c2V0IGlza2V5d29yZAorPAkgIGlza2V5d29yZD1ALDQ4LTU3LDE5Mi0yNTUsLSB+CisKK1RoaXMgdGltZSBhIGNvbW1hIGlzIGF1dG9tYXRpY2FsbHkgZGVsZXRlZC4KKworCitST09NIEZPUiBNRVNTQUdFUworCitXaGVuIFZpbSBzdGFydHMgdGhlcmUgaXMgb25lIGxpbmUgYXQgdGhlIGJvdHRvbSB0aGF0IGlzIHVzZWQgZm9yIG1lc3NhZ2VzLgorV2hlbiBhIG1lc3NhZ2UgaXMgbG9uZywgaXQgaXMgZWl0aGVyIHRydW5jYXRlZCwgdGh1cyB5b3UgY2FuIG9ubHkgc2VlIHBhcnQgb2YKK2l0LCBvciB0aGUgdGV4dCBzY3JvbGxzIGFuZCB5b3UgaGF2ZSB0byBwcmVzcyA8RW50ZXI+IHRvIGNvbnRpbnVlLgorICAgWW91IGNhbiBzZXQgdGhlICdjbWRoZWlnaHQnIG9wdGlvbiB0byB0aGUgbnVtYmVyIG9mIGxpbmVzIHVzZWQgZm9yCittZXNzYWdlcy4gIEV4YW1wbGU6ID4KKworCTpzZXQgY21kaGVpZ2h0PTMKKworVGhpcyBkb2VzIG1lYW4gdGhlcmUgaXMgbGVzcyByb29tIHRvIGVkaXQgdGV4dCwgdGh1cyBpdCdzIGEgY29tcHJvbWlzZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8wNi50eHR8ICBVc2luZyBzeW50YXggaGlnaGxpZ2h0aW5nCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzA2LnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8wNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczMTc2MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8wNi50eHQKQEAgLTAsMCArMSwyNzcgQEAKKyp1c3JfMDYudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMiBKdWwgMTQKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgVXNpbmcgc3ludGF4IGhpZ2hsaWdodGluZworCisKK0JsYWNrIGFuZCB3aGl0ZSB0ZXh0IGlzIGJvcmluZy4gIFdpdGggY29sb3JzIHlvdXIgZmlsZSBjb21lcyB0byBsaWZlLiAgVGhpcworbm90IG9ubHkgbG9va3MgbmljZSwgaXQgYWxzbyBzcGVlZHMgdXAgeW91ciB3b3JrLiAgQ2hhbmdlIHRoZSBjb2xvcnMgdXNlZCBmb3IKK3RoZSBkaWZmZXJlbnQgc29ydHMgb2YgdGV4dC4gIFByaW50IHlvdXIgdGV4dCwgd2l0aCB0aGUgY29sb3JzIHlvdSBzZWUgb24gdGhlCitzY3JlZW4uCisKK3wwNi4xfAlTd2l0Y2hpbmcgaXQgb24KK3wwNi4yfAlObyBvciB3cm9uZyBjb2xvcnM/Cit8MDYuM3wJRGlmZmVyZW50IGNvbG9ycworfDA2LjR8CVdpdGggY29sb3JzIG9yIHdpdGhvdXQgY29sb3JzCit8MDYuNXwJUHJpbnRpbmcgd2l0aCBjb2xvcnMKK3wwNi42fAlGdXJ0aGVyIHJlYWRpbmcKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMDcudHh0fCAgRWRpdGluZyBtb3JlIHRoYW4gb25lIGZpbGUKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzA1LnR4dHwgIFNldCB5b3VyIHNldHRpbmdzCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNi4xKglTd2l0Y2hpbmcgaXQgb24KKworSXQgYWxsIHN0YXJ0cyB3aXRoIG9uZSBzaW1wbGUgY29tbWFuZDogPgorCisJOnN5bnRheCBlbmFibGUKKworVGhhdCBzaG91bGQgd29yayBpbiBtb3N0IHNpdHVhdGlvbnMgdG8gZ2V0IGNvbG9yIGluIHlvdXIgZmlsZXMuICBWaW0gd2lsbAorYXV0b21hZ2ljYWxseSBkZXRlY3QgdGhlIHR5cGUgb2YgZmlsZSBhbmQgbG9hZCB0aGUgcmlnaHQgc3ludGF4IGhpZ2hsaWdodGluZy4KK1N1ZGRlbmx5IGNvbW1lbnRzIGFyZSBibHVlLCBrZXl3b3JkcyBicm93biBhbmQgc3RyaW5ncyByZWQuICBUaGlzIG1ha2VzIGl0CitlYXN5IHRvIG92ZXJ2aWV3IHRoZSBmaWxlLiAgQWZ0ZXIgYSB3aGlsZSB5b3Ugd2lsbCBmaW5kIHRoYXQgYmxhY2smd2hpdGUgdGV4dAorc2xvd3MgeW91IGRvd24hCisKK0lmIHlvdSBhbHdheXMgd2FudCB0byB1c2Ugc3ludGF4IGhpZ2hsaWdodGluZywgcHV0IHRoZSAiOnN5bnRheCBlbmFibGUiCitjb21tYW5kIGluIHlvdXIgfHZpbXJjfCBmaWxlLgorCitJZiB5b3Ugd2FudCBzeW50YXggaGlnaGxpZ2h0aW5nIG9ubHkgd2hlbiB0aGUgdGVybWluYWwgc3VwcG9ydHMgY29sb3JzLCB5b3UKK2NhbiBwdXQgdGhpcyBpbiB5b3VyIHx2aW1yY3wgZmlsZTogPgorCisJaWYgJnRfQ28gPiAxCisJICAgc3ludGF4IGVuYWJsZQorCWVuZGlmCisKK0lmIHlvdSB3YW50IHN5bnRheCBoaWdobGlnaHRpbmcgb25seSBpbiB0aGUgR1VJIHZlcnNpb24sIHB1dCB0aGUgIjpzeW50YXgKK2VuYWJsZSIgY29tbWFuZCBpbiB5b3VyIHxndmltcmN8IGZpbGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA2LjIqCU5vIG9yIHdyb25nIGNvbG9ycz8KKworVGhlcmUgY2FuIGJlIGEgbnVtYmVyIG9mIHJlYXNvbnMgd2h5IHlvdSBkb24ndCBzZWUgY29sb3JzOgorCistIFlvdXIgdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydCBjb2xvcnMuCisJVmltIHdpbGwgdXNlIGJvbGQsIGl0YWxpYyBhbmQgdW5kZXJsaW5lZCB0ZXh0LCBidXQgdGhpcyBkb2Vzbid0IGxvb2sKKwl2ZXJ5IG5pY2UuICBZb3UgcHJvYmFibHkgd2lsbCB3YW50IHRvIHRyeSB0byBnZXQgYSB0ZXJtaW5hbCB3aXRoCisJY29sb3JzLiAgRm9yIFVuaXgsIEkgcmVjb21tZW5kIHRoZSB4dGVybSBmcm9tIHRoZSBYRnJlZTg2IHByb2plY3Q6CisJfHhmcmVlLXh0ZXJtfC4KKworLSBZb3VyIHRlcm1pbmFsIGRvZXMgc3VwcG9ydCBjb2xvcnMsIGJ1dCBWaW0gZG9lc24ndCBrbm93IHRoaXMuCisJTWFrZSBzdXJlIHlvdXIgJFRFUk0gc2V0dGluZyBpcyBjb3JyZWN0LiAgRm9yIGV4YW1wbGUsIHdoZW4gdXNpbmcgYW4KKwl4dGVybSB0aGF0IHN1cHBvcnRzIGNvbG9yczogPgorCisJCXNldGVudiBURVJNIHh0ZXJtLWNvbG9yCis8CisJb3IgKGRlcGVuZGluZyBvbiB5b3VyIHNoZWxsKTogPgorCisJCVRFUk09eHRlcm0tY29sb3I7IGV4cG9ydCBURVJNCisKKzwJVGhlIHRlcm1pbmFsIG5hbWUgbXVzdCBtYXRjaCB0aGUgdGVybWluYWwgeW91IGFyZSB1c2luZy4gIElmIGl0CisJc3RpbGwgZG9lc24ndCB3b3JrLCBoYXZlIGEgbG9vayBhdCB8eHRlcm0tY29sb3J8LCB3aGljaCBzaG93cyBhIGZldworCXdheXMgdG8gbWFrZSBWaW0gZGlzcGxheSBjb2xvcnMgKG5vdCBvbmx5IGZvciBhbiB4dGVybSkuCisKKy0gVGhlIGZpbGUgdHlwZSBpcyBub3QgcmVjb2duaXplZC4KKwlWaW0gZG9lc24ndCBrbm93IGFsbCBmaWxlIHR5cGVzLCBhbmQgc29tZXRpbWVzIGl0J3MgbmVhciB0byBpbXBvc3NpYmxlCisJdG8gdGVsbCB3aGF0IGxhbmd1YWdlIGEgZmlsZSB1c2VzLiAgVHJ5IHRoaXMgY29tbWFuZDogPgorCisJCTpzZXQgZmlsZXR5cGUKKzwKKwlJZiB0aGUgcmVzdWx0IGlzICJmaWxldHlwZT0iIHRoZW4gdGhlIHByb2JsZW0gaXMgaW5kZWVkIHRoYXQgVmltCisJZG9lc24ndCBrbm93IHdoYXQgdHlwZSBvZiBmaWxlIHRoaXMgaXMuICBZb3UgY2FuIHNldCB0aGUgdHlwZQorCW1hbnVhbGx5OiA+CisKKwkJOnNldCBmaWxldHlwZT1mb3J0cmFuCisKKzwJVG8gc2VlIHdoaWNoIHR5cGVzIGFyZSBhdmFpbGFibGUsIGxvb2sgaW4gdGhlIGRpcmVjdG9yeQorCSRWSU1SVU5USU1FL3N5bnRheC4gIEZvciB0aGUgR1VJIHlvdSBjYW4gdXNlIHRoZSBTeW50YXggbWVudS4KKwlTZXR0aW5nIHRoZSBmaWxldHlwZSBjYW4gYWxzbyBiZSBkb25lIHdpdGggYSB8bW9kZWxpbmV8LCBzbyB0aGF0IHRoZQorCWZpbGUgd2lsbCBiZSBoaWdobGlnaHRlZCBlYWNoIHRpbWUgeW91IGVkaXQgaXQuICBGb3IgZXhhbXBsZSwgdGhpcworCWxpbmUgY2FuIGJlIHVzZWQgaW4gYSBNYWtlZmlsZSAocHV0IGl0IG5lYXIgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUKKwlmaWxlKTogPgorCisJCSMgdmltOiBzeW50YXg9bWFrZQorCis8CVlvdSBtaWdodCBrbm93IGhvdyB0byBkZXRlY3QgdGhlIGZpbGUgdHlwZSB5b3Vyc2VsZi4gIE9mdGVuIHRoZSBmaWxlCisJbmFtZSBleHRlbnNpb24gKGFmdGVyIHRoZSBkb3QpIGNhbiBiZSB1c2VkLgorCVNlZSB8bmV3LWZpbGV0eXBlfCBmb3IgaG93IHRvIHRlbGwgVmltIHRvIGRldGVjdCB0aGF0IGZpbGUgdHlwZS4KKworLSBUaGVyZSBpcyBubyBoaWdobGlnaHRpbmcgZm9yIHlvdXIgZmlsZSB0eXBlLgorCVlvdSBjb3VsZCB0cnkgdXNpbmcgYSBzaW1pbGFyIGZpbGUgdHlwZSBieSBtYW51YWxseSBzZXR0aW5nIGl0IGFzCisJbWVudGlvbmVkIGFib3ZlLiAgSWYgdGhhdCBpc24ndCBnb29kIGVub3VnaCwgeW91IGNhbiB3cml0ZSB5b3VyIG93bgorCXN5bnRheCBmaWxlLCBzZWUgfG15c3ludGF4ZmlsZXwuCisKKworT3IgdGhlIGNvbG9ycyBjb3VsZCBiZSB3cm9uZzoKKworLSBUaGUgY29sb3JlZCB0ZXh0IGlzIHZlcnkgaGFyZCB0byByZWFkLgorCVZpbSBndWVzc2VzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRoYXQgeW91IGFyZSB1c2luZy4gIElmIGl0IGlzIGJsYWNrCisJKG9yIGFub3RoZXIgZGFyayBjb2xvcikgaXQgd2lsbCB1c2UgbGlnaHQgY29sb3JzIGZvciB0ZXh0LiAgSWYgaXQgaXMKKwl3aGl0ZSAob3IgYW5vdGhlciBsaWdodCBjb2xvcikgaXQgd2lsbCB1c2UgZGFyayBjb2xvcnMgZm9yIHRleHQuICBJZgorCVZpbSBndWVzc2VkIHdyb25nIHRoZSB0ZXh0IHdpbGwgYmUgaGFyZCB0byByZWFkLiAgVG8gc29sdmUgdGhpcywgc2V0CisJdGhlICdiYWNrZ3JvdW5kJyBvcHRpb24uICBGb3IgYSBkYXJrIGJhY2tncm91bmQ6ID4KKworCQk6c2V0IGJhY2tncm91bmQ9ZGFyaworCis8CUFuZCBmb3IgYSBsaWdodCBiYWNrZ3JvdW5kOiA+CisKKwkJOnNldCBiYWNrZ3JvdW5kPWxpZ2h0CisKKzwJTWFrZSBzdXJlIHlvdSBwdXQgdGhpcyBfYmVmb3JlXyB0aGUgIjpzeW50YXggZW5hYmxlIiBjb21tYW5kLAorCW90aGVyd2lzZSB0aGUgY29sb3JzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gc2V0LiAgWW91IGNvdWxkIGRvCisJIjpzeW50YXggcmVzZXQiIGFmdGVyIHNldHRpbmcgJ2JhY2tncm91bmQnIHRvIG1ha2UgVmltIHNldCB0aGUgZGVmYXVsdAorCWNvbG9ycyBhZ2Fpbi4KKworLSBUaGUgY29sb3JzIGFyZSB3cm9uZyB3aGVuIHNjcm9sbGluZyBib3R0b20gdG8gdG9wLgorCVZpbSBkb2Vzbid0IHJlYWQgdGhlIHdob2xlIGZpbGUgdG8gcGFyc2UgdGhlIHRleHQuICBJdCBzdGFydHMgcGFyc2luZworCXdoZXJldmVyIHlvdSBhcmUgdmlld2luZyB0aGUgZmlsZS4gIFRoYXQgc2F2ZXMgYSBsb3Qgb2YgdGltZSwgYnV0CisJc29tZXRpbWVzIHRoZSBjb2xvcnMgYXJlIHdyb25nLiAgQSBzaW1wbGUgZml4IGlzIGhpdHRpbmcgQ1RSTC1MLiAgT3IKKwlzY3JvbGwgYmFjayBhIGJpdCBhbmQgdGhlbiBmb3J3YXJkIGFnYWluLgorCUZvciBhIHJlYWwgZml4LCBzZWUgfDpzeW4tc3luY3wuICBTb21lIHN5bnRheCBmaWxlcyBoYXZlIGEgd2F5IHRvIG1ha2UKKwlpdCBsb29rIGZ1cnRoZXIgYmFjaywgc2VlIHRoZSBoZWxwIGZvciB0aGUgc3BlY2lmaWMgc3ludGF4IGZpbGUuICBGb3IKKwlleGFtcGxlLCB8dGV4LnZpbXwgZm9yIHRoZSBUZVggc3ludGF4LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNi4zKglEaWZmZXJlbnQgY29sb3JzCQkJCSo6c3luLWRlZmF1bHQtb3ZlcnJpZGUqCisKK0lmIHlvdSBkb24ndCBsaWtlIHRoZSBkZWZhdWx0IGNvbG9ycywgeW91IGNhbiBzZWxlY3QgYW5vdGhlciBjb2xvciBzY2hlbWUuICBJbgordGhlIEdVSSB1c2UgdGhlIEVkaXQvQ29sb3IgU2NoZW1lIG1lbnUuICBZb3UgY2FuIGFsc28gdHlwZSB0aGUgY29tbWFuZDogPgorCisJOmNvbG9yc2NoZW1lIGV2ZW5pbmcKKworImV2ZW5pbmciIGlzIHRoZSBuYW1lIG9mIHRoZSBjb2xvciBzY2hlbWUuICBUaGVyZSBhcmUgc2V2ZXJhbCBvdGhlcnMgeW91IG1pZ2h0Cit3YW50IHRvIHRyeSBvdXQuICBMb29rIGluIHRoZSBkaXJlY3RvcnkgJFZJTVJVTlRJTUUvY29sb3JzLgorCitXaGVuIHlvdSBmb3VuZCB0aGUgY29sb3Igc2NoZW1lIHRoYXQgeW91IGxpa2UsIGFkZCB0aGUgIjpjb2xvcnNjaGVtZSIgY29tbWFuZAordG8geW91ciB8dmltcmN8IGZpbGUuCisKK1lvdSBjb3VsZCBhbHNvIHdyaXRlIHlvdXIgb3duIGNvbG9yIHNjaGVtZS4gIFRoaXMgaXMgaG93IHlvdSBkbyBpdDoKKworMS4gU2VsZWN0IGEgY29sb3Igc2NoZW1lIHRoYXQgY29tZXMgY2xvc2UuICBDb3B5IHRoaXMgZmlsZSB0byB5b3VyIG93biBWaW0KKyAgIGRpcmVjdG9yeS4gIEZvciBVbml4LCB0aGlzIHNob3VsZCB3b3JrOiA+CisKKwkhbWtkaXIgfi8udmltL2NvbG9ycworCSFjcCAkVklNUlVOVElNRS9jb2xvcnMvbW9ybmluZy52aW0gfi8udmltL2NvbG9ycy9taW5lLnZpbQorPAorICAgVGhpcyBpcyBkb25lIGZyb20gVmltLCBiZWNhdXNlIGl0IGtub3dzIHRoZSB2YWx1ZSBvZiAkVklNUlVOVElNRS4KKworMi4gRWRpdCB0aGUgY29sb3Igc2NoZW1lIGZpbGUuICBUaGVzZSBlbnRyaWVzIGFyZSB1c2VmdWw6CisKKwl0ZXJtCQlhdHRyaWJ1dGVzIGluIGEgQiZXIHRlcm1pbmFsCisJY3Rlcm0JCWF0dHJpYnV0ZXMgaW4gYSBjb2xvciB0ZXJtaW5hbAorCWN0ZXJtZmcJCWZvcmVncm91bmQgY29sb3IgaW4gYSBjb2xvciB0ZXJtaW5hbAorCWN0ZXJtYmcJCWJhY2tncm91bmQgY29sb3IgaW4gYSBjb2xvciB0ZXJtaW5hbAorCWd1aQkJYXR0cmlidXRlcyBpbiB0aGUgR1VJCisJZ3VpZmcJCWZvcmVncm91bmQgY29sb3IgaW4gdGhlIEdVSQorCWd1aWJnCQliYWNrZ3JvdW5kIGNvbG9yIGluIHRoZSBHVUkKKworICAgRm9yIGV4YW1wbGUsIHRvIG1ha2UgY29tbWVudHMgZ3JlZW46ID4KKworCTpoaWdobGlnaHQgQ29tbWVudCBjdGVybWZnPWdyZWVuIGd1aWZnPWdyZWVuCis8CisgICBBdHRyaWJ1dGVzIHlvdSBjYW4gdXNlIGZvciAiY3Rlcm0iIGFuZCAiZ3VpIiBhcmUgImJvbGQiIGFuZCAidW5kZXJsaW5lIi4KKyAgIElmIHlvdSB3YW50IGJvdGgsIHVzZSAiYm9sZCx1bmRlcmxpbmUiLiAgRm9yIGRldGFpbHMgc2VlIHRoZSB8OmhpZ2hsaWdodHwKKyAgIGNvbW1hbmQuCisKKzMuIFRlbGwgVmltIHRvIGFsd2F5cyB1c2UgeW91ciBjb2xvciBzY2hlbWUuICBQdXQgdGhpcyBsaW5lIGluIHlvdXIgfHZpbXJjfDogPgorCisJY29sb3JzY2hlbWUgbWluZQorCitJZiB5b3Ugd2FudCB0byBzZWUgd2hhdCB0aGUgbW9zdCBvZnRlbiB1c2VkIGNvbG9yIGNvbWJpbmF0aW9ucyBsb29rIGxpa2UsIHVzZQordGhlc2UgY29tbWFuZHM6ID4KKworCTplZGl0ICRWSU1SVU5USU1FL3N5bnRheC9jb2xvcnRlc3QudmltCisJOnNvdXJjZSAlCisKK1lvdSB3aWxsIHNlZSB0ZXh0IGluIHZhcmlvdXMgY29sb3IgY29tYmluYXRpb25zLiAgWW91IGNhbiBjaGVjayB3aGljaCBvbmVzIGFyZQorcmVhZGFibGUgYW5kIGxvb2sgbmljZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDYuNCoJV2l0aCBjb2xvcnMgb3Igd2l0aG91dCBjb2xvcnMKKworRGlzcGxheWluZyB0ZXh0IGluIGNvbG9yIHRha2VzIGEgbG90IG9mIGVmZm9ydC4gIElmIHlvdSBmaW5kIHRoZSBkaXNwbGF5aW5nCit0b28gc2xvdywgeW91IG1pZ2h0IHdhbnQgdG8gZGlzYWJsZSBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciBhIG1vbWVudDogPgorCisJOnN5bnRheCBjbGVhcgorCitXaGVuIGVkaXRpbmcgYW5vdGhlciBmaWxlIChvciB0aGUgc2FtZSBvbmUpIHRoZSBjb2xvcnMgd2lsbCBjb21lIGJhY2suCisKKwkJCQkJCQkqOnN5bi1vZmYqCitJZiB5b3Ugd2FudCB0byBzdG9wIGhpZ2hsaWdodGluZyBjb21wbGV0ZWx5IHVzZTogPgorCisJOnN5bnRheCBvZmYKKworVGhpcyB3aWxsIGNvbXBsZXRlbHkgZGlzYWJsZSBzeW50YXggaGlnaGxpZ2h0aW5nIGFuZCByZW1vdmUgaXQgaW1tZWRpYXRlbHkgZm9yCithbGwgYnVmZmVycy4KKworCQkJCQkJCSo6c3luLW1hbnVhbCoKK0lmIHlvdSB3YW50IHN5bnRheCBoaWdobGlnaHRpbmcgb25seSBmb3Igc3BlY2lmaWMgZmlsZXMsIHVzZSB0aGlzOiA+CisKKwk6c3ludGF4IG1hbnVhbAorCitUaGlzIHdpbGwgZW5hYmxlIHRoZSBzeW50YXggaGlnaGxpZ2h0aW5nLCBidXQgbm90IHN3aXRjaCBpdCBvbiBhdXRvbWF0aWNhbGx5Cit3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBidWZmZXIuICBUbyBzd2l0Y2ggaGlnaGxpZ2h0aW5nIG9uIGZvciB0aGUgY3VycmVudAorYnVmZmVyLCBzZXQgdGhlICdzeW50YXgnIG9wdGlvbjogPgorCisJOnNldCBzeW50YXg9T04KKzwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA2LjUqCVByaW50aW5nIHdpdGggY29sb3JzCQkJCSpzeW50YXgtcHJpbnRpbmcqCisKK0luIHRoZSBNUy1XaW5kb3dzIHZlcnNpb24geW91IGNhbiBwcmludCB0aGUgY3VycmVudCBmaWxlIHdpdGggdGhpcyBjb21tYW5kOiA+CisKKwk6aGFyZGNvcHkKKworWW91IHdpbGwgZ2V0IHRoZSB1c3VhbCBwcmludGVyIGRpYWxvZywgd2hlcmUgeW91IGNhbiBzZWxlY3QgdGhlIHByaW50ZXIgYW5kIGEKK2ZldyBzZXR0aW5ncy4gIElmIHlvdSBoYXZlIGEgY29sb3IgcHJpbnRlciwgdGhlIHBhcGVyIG91dHB1dCBzaG91bGQgbG9vayB0aGUKK3NhbWUgYXMgd2hhdCB5b3Ugc2VlIGluc2lkZSBWaW0uICBCdXQgd2hlbiB5b3UgdXNlIGEgZGFyayBiYWNrZ3JvdW5kIHRoZQorY29sb3JzIHdpbGwgYmUgYWRqdXN0ZWQgdG8gbG9vayBnb29kIG9uIHdoaXRlIHBhcGVyLgorCitUaGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zIHRoYXQgY2hhbmdlIHRoZSB3YXkgVmltIHByaW50czoKKwkncHJpbnRkZXZpY2UnCisJJ3ByaW50aGVhZGVyJworCSdwcmludGZvbnQnCisJJ3ByaW50b3B0aW9ucycKKworVG8gcHJpbnQgb25seSBhIHJhbmdlIG9mIGxpbmVzLCAgdXNlIFZpc3VhbCBtb2RlIHRvIHNlbGVjdCB0aGUgbGluZXMgYW5kIHRoZW4KK3R5cGUgdGhlIGNvbW1hbmQ6ID4KKworCXYxMDBqOmhhcmRjb3B5CisKKyJ2IiBzdGFydHMgVmlzdWFsIG1vZGUuICAiMTAwaiIgbW92ZXMgYSBodW5kcmVkIGxpbmVzIGRvd24sIHRoZXkgd2lsbCBiZQoraGlnaGxpZ2h0ZWQuICBUaGVuICI6aGFyZGNvcHkiIHdpbGwgcHJpbnQgdGhvc2UgbGluZXMuICBZb3UgY2FuIHVzZSBvdGhlcgorY29tbWFuZHMgdG8gbW92ZSBpbiBWaXN1YWwgbW9kZSwgb2YgY291cnNlLgorCitUaGlzIGFsc28gd29ya3Mgb24gVW5peCwgaWYgeW91IGhhdmUgYSBQb3N0U2NyaXB0IHByaW50ZXIuICBPdGhlcndpc2UsIHlvdQord2lsbCBoYXZlIHRvIGRvIGEgYml0IG1vcmUgd29yay4gIFlvdSBuZWVkIHRvIGNvbnZlcnQgdGhlIHRleHQgdG8gSFRNTCBmaXJzdCwKK2FuZCB0aGVuIHByaW50IGl0IGZyb20gYSB3ZWIgYnJvd3NlciBzdWNoIGFzIE5ldHNjYXBlLgorCitDb252ZXJ0IHRoZSBjdXJyZW50IGZpbGUgdG8gSFRNTCB3aXRoIHRoaXMgY29tbWFuZDogPgorCisJOnNvdXJjZSAkVklNUlVOVElNRS9zeW50YXgvMmh0bWwudmltCisKK1lvdSB3aWxsIHNlZSBpdCBjcnVuY2hpbmcgYXdheSwgdGhpcyBjYW4gdGFrZSBxdWl0ZSBhIHdoaWxlIGZvciBhIGxhcmdlIGZpbGUuCitTb21lIHRpbWUgbGF0ZXIgYW5vdGhlciB3aW5kb3cgc2hvd3MgdGhlIEhUTUwgY29kZS4gIE5vdyB3cml0ZSB0aGlzIHNvbWV3aGVyZQorKGRvZXNuJ3QgbWF0dGVyIHdoZXJlLCB5b3UgdGhyb3cgaXQgYXdheSBsYXRlcik6Cis+CisJOndyaXRlIG1haW4uYy5odG1sCisKK09wZW4gdGhpcyBmaWxlIGluIHlvdXIgZmF2b3JpdGUgYnJvd3NlciBhbmQgcHJpbnQgaXQgZnJvbSB0aGVyZS4gIElmIGFsbCBnb2VzCit3ZWxsLCB0aGUgb3V0cHV0IHNob3VsZCBsb29rIGV4YWN0bHkgYXMgaXQgZG9lcyBpbiBWaW0uICBTZWUgfDJodG1sLnZpbXwgZm9yCitkZXRhaWxzLiAgRG9uJ3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGUgSFRNTCBmaWxlIHdoZW4geW91IGFyZSBkb25lIHdpdGggaXQuCisKK0luc3RlYWQgb2YgcHJpbnRpbmcsIHlvdSBjb3VsZCBhbHNvIHB1dCB0aGUgSFRNTCBmaWxlIG9uIGEgd2ViIHNlcnZlciwgYW5kIGxldAorb3RoZXJzIGxvb2sgYXQgdGhlIGNvbG9yZWQgdGV4dC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDYuNioJRnVydGhlciByZWFkaW5nCisKK3x1c3JfNDQudHh0fCAgWW91ciBvd24gc3ludGF4IGhpZ2hsaWdodGVkLgorfHN5bnRheHwgICAgICBBbGwgdGhlIGRldGFpbHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMDcudHh0fCAgRWRpdGluZyBtb3JlIHRoYW4gb25lIGZpbGUKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMDcudHh0IGIvcnVudGltZS9kb2MvdXNyXzA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDE5Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzA3LnR4dApAQCAtMCwwICsxLDQ3OSBAQAorKnVzcl8wNy50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1hciAxMgorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICBFZGl0aW5nIG1vcmUgdGhhbiBvbmUgZmlsZQorCisKK05vIG1hdHRlciBob3cgbWFueSBmaWxlcyB5b3UgaGF2ZSwgeW91IGNhbiBlZGl0IHRoZW0gd2l0aG91dCBsZWF2aW5nIFZpbS4KK0RlZmluZSBhIGxpc3Qgb2YgZmlsZXMgdG8gd29yayBvbiBhbmQganVtcCBmcm9tIG9uZSB0byB0aGUgb3RoZXIuICBDb3B5IHRleHQKK2Zyb20gb25lIGZpbGUgYW5kIHB1dCBpdCBpbiBhbm90aGVyIG9uZS4KKworfDA3LjF8CUVkaXQgYW5vdGhlciBmaWxlCit8MDcuMnwJQSBsaXN0IG9mIGZpbGVzCit8MDcuM3wJSnVtcGluZyBmcm9tIGZpbGUgdG8gZmlsZQorfDA3LjR8CUJhY2t1cCBmaWxlcworfDA3LjV8CUNvcHkgdGV4dCBiZXR3ZWVuIGZpbGVzCit8MDcuNnwJVmlld2luZyBhIGZpbGUKK3wwNy43fAlDaGFuZ2luZyB0aGUgZmlsZSBuYW1lCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzA4LnR4dHwgIFNwbGl0dGluZyB3aW5kb3dzCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl8wNi50eHR8ICBVc2luZyBzeW50YXggaGlnaGxpZ2h0aW5nCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNy4xKglFZGl0IGFub3RoZXIgZmlsZQorCitTbyBmYXIgeW91IGhhZCB0byBzdGFydCBWaW0gZm9yIGV2ZXJ5IGZpbGUgeW91IHdhbnRlZCB0byBlZGl0LiAgVGhlcmUgaXMgYQorc2ltcGxlciB3YXkuICBUbyBzdGFydCBlZGl0aW5nIGFub3RoZXIgZmlsZSwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOmVkaXQgZm9vLnR4dAorCitZb3UgY2FuIHVzZSBhbnkgZmlsZSBuYW1lIGluc3RlYWQgb2YgImZvby50eHQiLiAgVmltIHdpbGwgY2xvc2UgdGhlIGN1cnJlbnQKK2ZpbGUgYW5kIG9wZW4gdGhlIG5ldyBvbmUuICBJZiB0aGUgY3VycmVudCBmaWxlIGhhcyB1bnNhdmVkIGNoYW5nZXMsIGhvd2V2ZXIsCitWaW0gZGlzcGxheXMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZG9lcyBub3Qgb3BlbiB0aGUgbmV3IGZpbGU6CisKKwlFMzc6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlICh1c2UgISB0byBvdmVycmlkZSkgfgorCisJTm90ZToKKwlWaW0gcHV0cyBhbiBlcnJvciBJRCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBlcnJvciBtZXNzYWdlLiAgSWYgeW91IGRvCisJbm90IHVuZGVyc3RhbmQgdGhlIG1lc3NhZ2Ugb3Igd2hhdCBjYXVzZWQgaXQsIGxvb2sgaW4gdGhlIGhlbHAgc3lzdGVtCisJZm9yIHRoaXMgSUQuICBJbiB0aGlzIGNhc2U6ID4KKworCQk6aGVscCBFMzcKKworQXQgdGhpcyBwb2ludCwgeW91IGhhdmUgYSBudW1iZXIgb2YgYWx0ZXJuYXRpdmVzLiAgWW91IGNhbiB3cml0ZSB0aGUgZmlsZQordXNpbmcgdGhpcyBjb21tYW5kOiA+CisKKwk6d3JpdGUKKworT3IgeW91IGNhbiBmb3JjZSBWaW0gdG8gZGlzY2FyZCB5b3VyIGNoYW5nZXMgYW5kIGVkaXQgdGhlIG5ldyBmaWxlLCB1c2luZyB0aGUKK2ZvcmNlICghKSBjaGFyYWN0ZXI6ID4KKworCTplZGl0ISBmb28udHh0CisKK0lmIHlvdSB3YW50IHRvIGVkaXQgYW5vdGhlciBmaWxlLCBidXQgbm90IHdyaXRlIHRoZSBjaGFuZ2VzIGluIHRoZSBjdXJyZW50CitmaWxlIHlldCwgeW91IGNhbiBtYWtlIGl0IGhpZGRlbjogPgorCisJOmhpZGUgZWRpdCBmb28udHh0CisKK1RoZSB0ZXh0IHdpdGggY2hhbmdlcyBpcyBzdGlsbCB0aGVyZSwgYnV0IHlvdSBjYW4ndCBzZWUgaXQuICBUaGlzIGlzIGZ1cnRoZXIKK2V4cGxhaW5lZCBpbiBzZWN0aW9uIHwyMi40fDogVGhlIGJ1ZmZlciBsaXN0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNy4yKglBIGxpc3Qgb2YgZmlsZXMKKworWW91IGNhbiBzdGFydCBWaW0gdG8gZWRpdCBhIHNlcXVlbmNlIG9mIGZpbGVzLiAgRm9yIGV4YW1wbGU6ID4KKworCXZpbSBvbmUuYyB0d28uYyB0aHJlZS5jCisKK1RoaXMgY29tbWFuZCBzdGFydHMgVmltIGFuZCB0ZWxscyBpdCB0aGF0IHlvdSB3aWxsIGJlIGVkaXRpbmcgdGhyZWUgZmlsZXMuCitWaW0gZGlzcGxheXMganVzdCB0aGUgZmlyc3QgZmlsZS4gIEFmdGVyIHlvdSBoYXZlIGRvbmUgeW91ciB0aGluZyBpbiB0aGlzCitmaWxlLCB0byBlZGl0IHRoZSBuZXh0IGZpbGUgeW91IHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpuZXh0CisKK0lmIHlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgY3VycmVudCBmaWxlLCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IKK21lc3NhZ2UgYW5kIHRoZSAiOm5leHQiIHdpbGwgbm90IHdvcmsuICBUaGlzIGlzIHRoZSBzYW1lIHByb2JsZW0gYXMgd2l0aAorIjplZGl0IiBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uICBUbyBhYmFuZG9uIHRoZSBjaGFuZ2VzOiA+CisKKwk6bmV4dCEKKworQnV0IG1vc3RseSB5b3Ugd2FudCB0byBzYXZlIHRoZSBjaGFuZ2VzIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IGZpbGUuICBUaGVyZQoraXMgYSBzcGVjaWFsIGNvbW1hbmQgZm9yIHRoaXM6ID4KKworCTp3bmV4dAorCitUaGlzIGRvZXMgdGhlIHNhbWUgYXMgdXNpbmcgdHdvIHNlcGFyYXRlIGNvbW1hbmRzOiA+CisKKwk6d3JpdGUKKwk6bmV4dAorCisKK1dIRVJFIEFNIEk/CisKK1RvIHNlZSB3aGljaCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0IHlvdSBhcmUgZWRpdGluZywgbG9vayBpbiB0aGUgd2luZG93Cit0aXRsZS4gIEl0IHNob3VsZCBzaG93IHNvbWV0aGluZyBsaWtlICIoMiBvZiAzKSIuICBUaGlzIG1lYW5zIHlvdSBhcmUgZWRpdGluZwordGhlIHNlY29uZCBmaWxlIG91dCBvZiB0aHJlZSBmaWxlcy4KKyAgIElmIHlvdSB3YW50IHRvIHNlZSB0aGUgbGlzdCBvZiBmaWxlcywgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOmFyZ3MKKworVGhpcyBpcyBzaG9ydCBmb3IgImFyZ3VtZW50cyIuICBUaGUgb3V0cHV0IG1pZ2h0IGxvb2sgbGlrZSB0aGlzOgorCisJb25lLmMgW3R3by5jXSB0aHJlZS5jIH4KKworVGhlc2UgYXJlIHRoZSBmaWxlcyB5b3Ugc3RhcnRlZCBWaW0gd2l0aC4gIFRoZSBvbmUgeW91IGFyZSBjdXJyZW50bHkgZWRpdGluZywKKyJ0d28uYyIsIGlzIGluIHNxdWFyZSBicmFja2V0cy4KKworCitNT1ZJTkcgVE8gT1RIRVIgQVJHVU1FTlRTCisKK1RvIGdvIGJhY2sgb25lIGZpbGU6ID4KKworCTpwcmV2aW91cworCitUaGlzIGlzIGp1c3QgbGlrZSB0aGUgIjpuZXh0IiBjb21tYW5kLCBleGNlcHQgdGhhdCBpdCBtb3ZlcyBpbiB0aGUgb3RoZXIKK2RpcmVjdGlvbi4gIEFnYWluLCB0aGVyZSBpcyBhIHNob3J0Y3V0IGNvbW1hbmQgZm9yIHdoZW4geW91IHdhbnQgdG8gd3JpdGUgdGhlCitmaWxlIGZpcnN0OiA+CisKKwk6d3ByZXZpb3VzCisKK1RvIG1vdmUgdG8gdGhlIHZlcnkgbGFzdCBmaWxlIGluIHRoZSBsaXN0OiA+CisKKwk6bGFzdAorCitBbmQgdG8gbW92ZSBiYWNrIHRvIHRoZSBmaXJzdCBvbmUgYWdhaW46ID4KKworCTpmaXJzdAorCitUaGVyZSBpcyBubyAiOndsYXN0IiBvciAiOndmaXJzdCIgY29tbWFuZCB0aG91Z2ghCisKK1lvdSBjYW4gdXNlIGEgY291bnQgZm9yICI6bmV4dCIgYW5kICI6cHJldmlvdXMiLiAgVG8gc2tpcCB0d28gZmlsZXMgZm9yd2FyZDogPgorCisJOjJuZXh0CisKKworQVVUT01BVElDIFdSSVRJTkcKKworV2hlbiBtb3ZpbmcgYXJvdW5kIHRoZSBmaWxlcyBhbmQgbWFraW5nIGNoYW5nZXMsIHlvdSBoYXZlIHRvIHJlbWVtYmVyIHRvIHVzZQorIjp3cml0ZSIuICBPdGhlcndpc2UgeW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuICBJZiB5b3UgYXJlIHN1cmUgeW91CithbHdheXMgd2FudCB0byB3cml0ZSBtb2RpZmllZCBmaWxlcywgeW91IGNhbiB0ZWxsIFZpbSB0byBhdXRvbWF0aWNhbGx5IHdyaXRlCit0aGVtOiA+CisKKwk6c2V0IGF1dG93cml0ZQorCitXaGVuIHlvdSBhcmUgZWRpdGluZyBhIGZpbGUgd2hpY2ggeW91IG1heSBub3Qgd2FudCB0byB3cml0ZSwgc3dpdGNoIGl0IG9mZgorYWdhaW46ID4KKworCTpzZXQgbm9hdXRvd3JpdGUKKworCitFRElUSU5HIEFOT1RIRVIgTElTVCBPRiBGSUxFUworCitZb3UgY2FuIHJlZGVmaW5lIHRoZSBsaXN0IG9mIGZpbGVzIHdpdGhvdXQgdGhlIG5lZWQgdG8gZXhpdCBWaW0gYW5kIHN0YXJ0IGl0CithZ2Fpbi4gIFVzZSB0aGlzIGNvbW1hbmQgdG8gZWRpdCB0aHJlZSBvdGhlciBmaWxlczogPgorCisJOmFyZ3MgZml2ZS5jIHNpeC5jIHNldmVuLmgKKworT3IgdXNlIGEgd2lsZGNhcmQsIGxpa2UgaXQncyB1c2VkIGluIHRoZSBzaGVsbDogPgorCisJOmFyZ3MgKi50eHQKKworVmltIHdpbGwgdGFrZSB5b3UgdG8gdGhlIGZpcnN0IGZpbGUgaW4gdGhlIGxpc3QuICBBZ2FpbiwgaWYgdGhlIGN1cnJlbnQgZmlsZQoraGFzIGNoYW5nZXMsIHlvdSBjYW4gZWl0aGVyIHdyaXRlIHRoZSBmaWxlIGZpcnN0LCBvciB1c2UgIjphcmdzISIgKHdpdGggIQorYWRkZWQpIHRvIGFiYW5kb24gdGhlIGNoYW5nZXMuCisKKworRElEIFlPVSBFRElUIFRIRSBMQVNUIEZJTEU/CisJCQkJCQkJKmFyZ2xpc3QtcXVpdCoKK1doZW4geW91IHVzZSBhIGxpc3Qgb2YgZmlsZXMsIFZpbSBhc3N1bWVzIHlvdSB3YW50IHRvIGVkaXQgdGhlbSBhbGwuICBUbworcHJvdGVjdCB5b3UgZnJvbSBleGl0aW5nIHRvbyBlYXJseSwgeW91IHdpbGwgZ2V0IHRoaXMgZXJyb3Igd2hlbiB5b3UgZGlkbid0CitlZGl0IHRoZSBsYXN0IGZpbGUgaW4gdGhlIGxpc3QgeWV0OgorCisJRTE3MzogNDYgbW9yZSBmaWxlcyB0byBlZGl0IH4KKworSWYgeW91IHJlYWxseSB3YW50IHRvIGV4aXQsIGp1c3QgZG8gaXQgYWdhaW4uICBUaGVuIGl0IHdpbGwgd29yayAoYnV0IG5vdCB3aGVuCit5b3UgZGlkIG90aGVyIGNvbW1hbmRzIGluIGJldHdlZW4pLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNy4zKglKdW1waW5nIGZyb20gZmlsZSB0byBmaWxlCisKK1RvIHF1aWNrbHkganVtcCBiZXR3ZWVuIHR3byBmaWxlcywgcHJlc3MgQ1RSTC1eIChvbiBFbmdsaXNoLVVTIGtleWJvYXJkcyB0aGUgXgoraXMgYWJvdmUgdGhlIDYga2V5KS4gIEV4YW1wbGU6ID4KKworCTphcmdzIG9uZS5jIHR3by5jIHRocmVlLmMKKworWW91IGFyZSBub3cgaW4gb25lLmMuID4KKworCTpuZXh0CisKK05vdyB5b3UgYXJlIGluIHR3by5jLiAgTm93IHVzZSBDVFJMLV4gdG8gZ28gYmFjayB0byBvbmUuYy4gIEFub3RoZXIgQ1RSTC1eIGFuZAoreW91IGFyZSBiYWNrIGluIHR3by5jLiAgQW5vdGhlciBDVFJMLV4gYW5kIHlvdSBhcmUgaW4gb25lLmMgYWdhaW4uICBJZiB5b3Ugbm93CitkbzogPgorCisJOm5leHQKKworWW91IGFyZSBpbiB0aHJlZS5jLiAgTm90aWNlIHRoYXQgdGhlIENUUkwtXiBjb21tYW5kIGRvZXMgbm90IGNoYW5nZSB0aGUgaWRlYQorb2Ygd2hlcmUgeW91IGFyZSBpbiB0aGUgbGlzdCBvZiBmaWxlcy4gIE9ubHkgY29tbWFuZHMgbGlrZSAiOm5leHQiIGFuZAorIjpwcmV2aW91cyIgZG8gdGhhdC4KKworVGhlIGZpbGUgeW91IHdlcmUgcHJldmlvdXNseSBlZGl0aW5nIGlzIGNhbGxlZCB0aGUgImFsdGVybmF0ZSIgZmlsZS4gIFdoZW4geW91CitqdXN0IHN0YXJ0ZWQgVmltIENUUkwtXiB3aWxsIG5vdCB3b3JrLCBzaW5jZSB0aGVyZSBpc24ndCBhIHByZXZpb3VzIGZpbGUuCisKKworUFJFREVGSU5FRCBNQVJLUworCitBZnRlciBqdW1waW5nIHRvIGFub3RoZXIgZmlsZSwgeW91IGNhbiB1c2UgdHdvIHByZWRlZmluZWQgbWFya3Mgd2hpY2ggYXJlIHZlcnkKK3VzZWZ1bDogPgorCisJYCIKKworVGhpcyB0YWtlcyB5b3UgdG8gdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBjdXJzb3Igd2FzIHdoZW4geW91IGxlZnQgdGhlIGZpbGUuCitBbm90aGVyIG1hcmsgdGhhdCBpcyByZW1lbWJlcmVkIGlzIHRoZSBwb3NpdGlvbiB3aGVyZSB5b3UgbWFkZSB0aGUgbGFzdAorY2hhbmdlOiA+CisKKwlgLgorCitTdXBwb3NlIHlvdSBhcmUgZWRpdGluZyB0aGUgZmlsZSAib25lLnR4dCIuICBTb21ld2hlcmUgaGFsZndheSB0aGUgZmlsZSB5b3UKK3VzZSAieCIgdG8gZGVsZXRlIGEgY2hhcmFjdGVyLiAgVGhlbiB5b3UgZ28gdG8gdGhlIGxhc3QgbGluZSB3aXRoICJHIiBhbmQKK3dyaXRlIHRoZSBmaWxlIHdpdGggIjp3Ii4gIFlvdSBlZGl0IHNldmVyYWwgb3RoZXIgZmlsZXMsIGFuZCB0aGVuIHVzZSAiOmVkaXQKK29uZS50eHQiIHRvIGNvbWUgYmFjayB0byAib25lLnR4dCIuICBJZiB5b3Ugbm93IHVzZSBgIiBWaW0ganVtcHMgdG8gdGhlIGxhc3QKK2xpbmUgb2YgdGhlIGZpbGUuICBVc2luZyBgLiB0YWtlcyB5b3UgdG8gdGhlIHBvc2l0aW9uIHdoZXJlIHlvdSBkZWxldGVkIHRoZQorY2hhcmFjdGVyLiAgRXZlbiB3aGVuIHlvdSBtb3ZlIGFyb3VuZCBpbiB0aGUgZmlsZSBgIiBhbmQgYC4gd2lsbCB0YWtlIHlvdSB0bwordGhlIHJlbWVtYmVyZWQgcG9zaXRpb24uICBBdCBsZWFzdCB1bnRpbCB5b3UgbWFrZSBhbm90aGVyIGNoYW5nZSBvciBsZWF2ZSB0aGUKK2ZpbGUuCisKKworRklMRSBNQVJLUworCitJbiBjaGFwdGVyIDQgd2FzIGV4cGxhaW5lZCBob3cgeW91IGNhbiBwbGFjZSBhIG1hcmsgaW4gYSBmaWxlIHdpdGggIm14IiBhbmQKK2p1bXAgdG8gdGhhdCBwb3NpdGlvbiB3aXRoICJgeCIuICBUaGF0IHdvcmtzIHdpdGhpbiBvbmUgZmlsZS4gIElmIHlvdSBlZGl0Cithbm90aGVyIGZpbGUgYW5kIHBsYWNlIG1hcmtzIHRoZXJlLCB0aGVzZSBhcmUgc3BlY2lmaWMgZm9yIHRoYXQgZmlsZS4gIFRodXMKK2VhY2ggZmlsZSBoYXMgaXRzIG93biBzZXQgb2YgbWFya3MsIHRoZXkgYXJlIGxvY2FsIHRvIHRoZSBmaWxlLgorICAgU28gZmFyIHdlIHdlcmUgdXNpbmcgbWFya3Mgd2l0aCBhIGxvd2VyY2FzZSBsZXR0ZXIuICBUaGVyZSBhcmUgYWxzbyBtYXJrcword2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyLiAgVGhlc2UgYXJlIGdsb2JhbCwgdGhleSBjYW4gYmUgdXNlZCBmcm9tIGFueSBmaWxlLgorRm9yIGV4YW1wbGUgc3VwcG9zZSB0aGF0IHdlIGFyZSBlZGl0aW5nIHRoZSBmaWxlICJmb28udHh0Ii4gIEdvIHRvIGhhbGZ3YXkgdGhlCitmaWxlICgiNTAlIikgYW5kIHBsYWNlIHRoZSBGIG1hcmsgdGhlcmUgKEYgZm9yIGZvbyk6ID4KKworCTUwJW1GCisKK05vdyBlZGl0IHRoZSBmaWxlICJiYXIudHh0IiBhbmQgcGxhY2UgdGhlIEIgbWFyayAoQiBmb3IgYmFyKSBhdCBpdHMgbGFzdCBsaW5lOgorPgorCUdtQgorCitOb3cgeW91IGNhbiB1c2UgdGhlICInRiIgY29tbWFuZCB0byBqdW1wIGJhY2sgdG8gaGFsZndheSBmb28udHh0LiAgT3IgZWRpdCB5ZXQKK2Fub3RoZXIgZmlsZSwgdHlwZSAiJ0IiIGFuZCB5b3UgYXJlIGF0IHRoZSBlbmQgb2YgYmFyLnR4dCBhZ2Fpbi4KKworVGhlIGZpbGUgbWFya3MgYXJlIHJlbWVtYmVyZWQgdW50aWwgdGhleSBhcmUgcGxhY2VkIHNvbWV3aGVyZSBlbHNlLiAgVGh1cyB5b3UKK2NhbiBwbGFjZSB0aGUgbWFyaywgZG8gaG91cnMgb2YgZWRpdGluZyBhbmQgc3RpbGwgYmUgYWJsZSB0byBqdW1wIGJhY2sgdG8gdGhhdAorbWFyay4KKyAgIEl0J3Mgb2Z0ZW4gdXNlZnVsIHRvIHRoaW5rIG9mIGEgc2ltcGxlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgbWFyayBsZXR0ZXIKK2FuZCB3aGVyZSBpdCBpcyBwbGFjZWQuICBGb3IgZXhhbXBsZSwgdXNlIHRoZSBIIG1hcmsgaW4gYSBoZWFkZXIgZmlsZSwgTSBpbgorYSBNYWtlZmlsZSBhbmQgQyBpbiBhIEMgY29kZSBmaWxlLgorCitUbyBzZWUgd2hlcmUgYSBzcGVjaWZpYyBtYXJrIGlzLCBnaXZlIGFuIGFyZ3VtZW50IHRvIHRoZSAiOm1hcmtzIiBjb21tYW5kOiA+CisKKwk6bWFya3MgTQorCitZb3UgY2FuIGFsc28gZ2l2ZSBzZXZlcmFsIGFyZ3VtZW50czogPgorCisJOm1hcmtzIE1DUAorCitEb24ndCBmb3JnZXQgdGhhdCB5b3UgY2FuIHVzZSBDVFJMLU8gYW5kIENUUkwtSSB0byBqdW1wIHRvIG9sZGVyIGFuZCBuZXdlcgorcG9zaXRpb25zIHdpdGhvdXQgcGxhY2luZyBtYXJrcyB0aGVyZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDcuNCoJQmFja3VwIGZpbGVzCisKK1VzdWFsbHkgVmltIGRvZXMgbm90IHByb2R1Y2UgYSBiYWNrdXAgZmlsZS4gSWYgeW91IHdhbnQgdG8gaGF2ZSBvbmUsIGFsbCB5b3UKK25lZWQgdG8gZG8gaXMgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpzZXQgYmFja3VwCisKK1RoZSBuYW1lIG9mIHRoZSBiYWNrdXAgZmlsZSBpcyB0aGUgb3JpZ2luYWwgZmlsZSB3aXRoIGEgIH4gIGFkZGVkIHRvIHRoZSBlbmQuCitJZiB5b3VyIGZpbGUgaXMgbmFtZWQgZGF0YS50eHQsIGZvciBleGFtcGxlLCB0aGUgYmFja3VwIGZpbGUgbmFtZSBpcworZGF0YS50eHR+LgorICAgSWYgeW91IGRvIG5vdCBsaWtlIHRoZSBmYWN0IHRoYXQgdGhlIGJhY2t1cCBmaWxlcyBlbmQgd2l0aCB+LCB5b3UgY2FuCitjaGFuZ2UgdGhlIGV4dGVuc2lvbjogPgorCisJOnNldCBiYWNrdXBleHQ9LmJhaworCitUaGlzIHdpbGwgdXNlIGRhdGEudHh0LmJhayBpbnN0ZWFkIG9mIGRhdGEudHh0fi4KKyAgIEFub3RoZXIgb3B0aW9uIHRoYXQgbWF0dGVycyBoZXJlIGlzICdiYWNrdXBkaXInLiAgSXQgc3BlY2lmaWVzIHdoZXJlIHRoZQorYmFja3VwIGZpbGUgaXMgd3JpdHRlbi4gIFRoZSBkZWZhdWx0LCB0byB3cml0ZSB0aGUgYmFja3VwIGluIHRoZSBzYW1lCitkaXJlY3RvcnkgYXMgdGhlIG9yaWdpbmFsIGZpbGUsIHdpbGwgbW9zdGx5IGJlIHRoZSByaWdodCB0aGluZy4KKworCU5vdGU6CisJV2hlbiB0aGUgJ2JhY2t1cCcgb3B0aW9uIGlzbid0IHNldCBidXQgdGhlICd3cml0ZWJhY2t1cCcgaXMsIFZpbSB3aWxsCisJc3RpbGwgY3JlYXRlIGEgYmFja3VwIGZpbGUuICBIb3dldmVyLCBpdCBpcyBkZWxldGVkIGFzIHNvb24gYXMgd3JpdGluZworCXRoZSBmaWxlIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiAgVGhpcyBmdW5jdGlvbnMgYXMgYSBzYWZldHkKKwlhZ2FpbnN0IGxvc2luZyB5b3VyIG9yaWdpbmFsIGZpbGUgd2hlbiB3cml0aW5nIGZhaWxzIGluIHNvbWUgd2F5IChkaXNrCisJZnVsbCBpcyB0aGUgbW9zdCBjb21tb24gY2F1c2U7IGJlaW5nIGhpdCBieSBsaWdodG5pbmcgbWlnaHQgYmUKKwlhbm90aGVyLCBhbHRob3VnaCBsZXNzIGNvbW1vbikuCisKKworS0VFUElORyBUSEUgT1JJR0lOQUwgRklMRQorCitJZiB5b3UgYXJlIGVkaXRpbmcgc291cmNlIGZpbGVzLCB5b3UgbWlnaHQgd2FudCB0byBrZWVwIHRoZSBmaWxlIGJlZm9yZSB5b3UKK21ha2UgYW55IGNoYW5nZXMuICBCdXQgdGhlIGJhY2t1cCBmaWxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZWFjaCB0aW1lIHlvdSB3cml0ZQordGhlIGZpbGUuICBUaHVzIGl0IG9ubHkgY29udGFpbnMgdGhlIHByZXZpb3VzIHZlcnNpb24sIG5vdCB0aGUgZmlyc3Qgb25lLgorICAgVG8gbWFrZSBWaW0ga2VlcCB0aGUgb3JpZ2luYWwgZmlsZSwgc2V0IHRoZSAncGF0Y2htb2RlJyBvcHRpb24uICBUaGlzCitzcGVjaWZpZXMgdGhlIGV4dGVuc2lvbiB1c2VkIGZvciB0aGUgZmlyc3QgYmFja3VwIG9mIGEgY2hhbmdlZCBmaWxlLiAgVXN1YWxseQoreW91IHdvdWxkIGRvIHRoaXM6ID4KKworCTpzZXQgcGF0Y2htb2RlPS5vcmlnCisKK1doZW4geW91IG5vdyBlZGl0IHRoZSBmaWxlIGRhdGEudHh0IGZvciB0aGUgZmlyc3QgdGltZSwgbWFrZSBjaGFuZ2VzIGFuZCB3cml0ZQordGhlIGZpbGUsIFZpbSB3aWxsIGtlZXAgYSBjb3B5IG9mIHRoZSB1bmNoYW5nZWQgZmlsZSB1bmRlciB0aGUgbmFtZQorImRhdGEudHh0Lm9yaWciLgorICAgSWYgeW91IG1ha2UgZnVydGhlciBjaGFuZ2VzIHRvIHRoZSBmaWxlLCBWaW0gd2lsbCBub3RpY2UgdGhhdAorImRhdGEudHh0Lm9yaWciIGFscmVhZHkgZXhpc3RzIGFuZCBsZWF2ZSBpdCBhbG9uZS4gIEZ1cnRoZXIgYmFja3VwIGZpbGVzIHdpbGwKK3RoZW4gYmUgY2FsbGVkICJkYXRhLnR4dH4iIChvciB3aGF0ZXZlciB5b3Ugc3BlY2lmaWVkIHdpdGggJ2JhY2t1cGV4dCcpLgorICAgSWYgeW91IGxlYXZlICdwYXRjaG1vZGUnIGVtcHR5ICh0aGF0IGlzIHRoZSBkZWZhdWx0KSwgdGhlIG9yaWdpbmFsIGZpbGUKK3dpbGwgbm90IGJlIGtlcHQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA3LjUqCUNvcHkgdGV4dCBiZXR3ZWVuIGZpbGVzCisKK1RoaXMgZXhwbGFpbnMgaG93IHRvIGNvcHkgdGV4dCBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIuICBMZXQncyBzdGFydCB3aXRoIGEKK3NpbXBsZSBleGFtcGxlLiAgRWRpdCB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGNvcHkuICBNb3ZlCit0aGUgY3Vyc29yIHRvIHRoZSBzdGFydCBvZiB0aGUgdGV4dCBhbmQgcHJlc3MgInYiLiAgVGhpcyBzdGFydHMgVmlzdWFsIG1vZGUuCitOb3cgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQgYW5kIHByZXNzICJ5Ii4gIFRoaXMgeWFua3MgKGNvcGllcykKK3RoZSBzZWxlY3RlZCB0ZXh0LgorICAgVG8gY29weSB0aGUgYWJvdmUgcGFyYWdyYXBoLCB5b3Ugd291bGQgZG86ID4KKworCTplZGl0IHRoaXNmaWxlCisJL1RoaXMKKwl2ampqaiR5CisKK05vdyBlZGl0IHRoZSBmaWxlIHlvdSB3YW50IHRvIHB1dCB0aGUgdGV4dCBpbi4gIE1vdmUgdGhlIGN1cnNvciB0byB0aGUKK2NoYXJhY3RlciB3aGVyZSB5b3Ugd2FudCB0aGUgdGV4dCB0byBhcHBlYXIgYWZ0ZXIuICBVc2UgInAiIHRvIHB1dCB0aGUgdGV4dAordGhlcmUuID4KKwk6ZWRpdCBvdGhlcmZpbGUKKwkvVGhlcmUKKwlwCisKK09mIGNvdXJzZSB5b3UgY2FuIHVzZSBtYW55IG90aGVyIGNvbW1hbmRzIHRvIHlhbmsgdGhlIHRleHQuICBGb3IgZXhhbXBsZSwgdG8KK3NlbGVjdCB3aG9sZSBsaW5lcyBzdGFydCBWaXN1YWwgbW9kZSB3aXRoICJWIi4gIE9yIHVzZSBDVFJMLVYgdG8gc2VsZWN0IGEKK3JlY3Rhbmd1bGFyIGJsb2NrLiAgT3IgdXNlICJZIiB0byB5YW5rIGEgc2luZ2xlIGxpbmUsICJ5YXciIHRvIHlhbmstYS13b3JkLAorZXRjLgorICAgVGhlICJwIiBjb21tYW5kIHB1dHMgdGhlIHRleHQgYWZ0ZXIgdGhlIGN1cnNvci4gIFVzZSAiUCIgdG8gcHV0IHRoZSB0ZXh0CitiZWZvcmUgdGhlIGN1cnNvci4gIE5vdGljZSB0aGF0IFZpbSByZW1lbWJlcnMgaWYgeW91IHlhbmtlZCBhIHdob2xlIGxpbmUgb3IgYQorYmxvY2ssIGFuZCBwdXRzIGl0IGJhY2sgdGhhdCB3YXkuCisKKworVVNJTkcgUkVHSVNURVJTCisKK1doZW4geW91IHdhbnQgdG8gY29weSBzZXZlcmFsIHBpZWNlcyBvZiB0ZXh0IGZyb20gb25lIGZpbGUgdG8gYW5vdGhlciwgaGF2aW5nCit0byBzd2l0Y2ggYmV0d2VlbiB0aGUgZmlsZXMgYW5kIHdyaXRpbmcgdGhlIHRhcmdldCBmaWxlIHRha2VzIGEgbG90IG9mIHRpbWUuCitUbyBhdm9pZCB0aGlzLCBjb3B5IGVhY2ggcGllY2Ugb2YgdGV4dCB0byBpdHMgb3duIHJlZ2lzdGVyLgorICAgQSByZWdpc3RlciBpcyBhIHBsYWNlIHdoZXJlIFZpbSBzdG9yZXMgdGV4dC4gIEhlcmUgd2Ugd2lsbCB1c2UgdGhlCityZWdpc3RlcnMgbmFtZWQgYSB0byB6IChsYXRlciB5b3Ugd2lsbCBmaW5kIG91dCB0aGVyZSBhcmUgb3RoZXJzKS4gIExldCdzIGNvcHkKK2Egc2VudGVuY2UgdG8gdGhlIGYgcmVnaXN0ZXIgKGYgZm9yIEZpcnN0KTogPgorCisJImZ5YXMKKworVGhlICJ5YXMiIGNvbW1hbmQgeWFua3MgYSBzZW50ZW5jZSBsaWtlIGJlZm9yZS4gIEl0J3MgdGhlICJmIHRoYXQgdGVsbHMgVmltCit0aGUgdGV4dCBzaG91bGQgYmUgcGxhY2UgaW4gdGhlIGYgcmVnaXN0ZXIuICBUaGlzIG11c3QgY29tZSBqdXN0IGJlZm9yZSB0aGUKK3lhbmsgY29tbWFuZC4KKyAgIE5vdyB5YW5rIHRocmVlIHdob2xlIGxpbmVzIHRvIHRoZSBsIHJlZ2lzdGVyIChsIGZvciBsaW5lKTogPgorCisJImwzWQorCitUaGUgY291bnQgY291bGQgYmUgYmVmb3JlIHRoZSAibCBqdXN0IGFzIHdlbGwuICBUbyB5YW5rIGEgYmxvY2sgb2YgdGV4dCB0byB0aGUKK2IgKGZvciBibG9jaykgcmVnaXN0ZXI6ID4KKworCUNUUkwtVmpqd3ciYnkKKworTm90aWNlIHRoYXQgdGhlIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24gImIgaXMganVzdCBiZWZvcmUgdGhlICJ5IiBjb21tYW5kLgorVGhpcyBpcyByZXF1aXJlZC4gIElmIHlvdSB3b3VsZCBoYXZlIHB1dCBpdCBiZWZvcmUgdGhlICJ3IiBjb21tYW5kLCBpdCB3b3VsZAorbm90IGhhdmUgd29ya2VkLgorICAgTm93IHlvdSBoYXZlIHRocmVlIHBpZWNlcyBvZiB0ZXh0IGluIHRoZSBmLCBsIGFuZCBiIHJlZ2lzdGVycy4gIEVkaXQKK2Fub3RoZXIgZmlsZSwgbW92ZSBhcm91bmQgYW5kIHBsYWNlIHRoZSB0ZXh0IHdoZXJlIHlvdSB3YW50IGl0OiA+CisKKwkiZnAKKworQWdhaW4sIHRoZSByZWdpc3RlciBzcGVjaWZpY2F0aW9uICJmIGNvbWVzIGJlZm9yZSB0aGUgInAiIGNvbW1hbmQuCisgICBZb3UgY2FuIHB1dCB0aGUgcmVnaXN0ZXJzIGluIGFueSBvcmRlci4gIEFuZCB0aGUgdGV4dCBzdGF5cyBpbiB0aGUgcmVnaXN0ZXIKK3VudGlsIHlvdSB5YW5rIHNvbWV0aGluZyBlbHNlIGludG8gaXQuICBUaHVzIHlvdSBjYW4gcHV0IGl0IGFzIG1hbnkgdGltZXMgYXMKK3lvdSBsaWtlLgorCitXaGVuIHlvdSBkZWxldGUgdGV4dCwgeW91IGNhbiBhbHNvIHNwZWNpZnkgYSByZWdpc3Rlci4gIFVzZSB0aGlzIHRvIG1vdmUKK3NldmVyYWwgcGllY2VzIG9mIHRleHQgYXJvdW5kLiAgRm9yIGV4YW1wbGUsIHRvIGRlbGV0ZS1hLXdvcmQgYW5kIHdyaXRlIGl0IGluCit0aGUgdyByZWdpc3RlcjogPgorCisJIndkYXcKKworQWdhaW4sIHRoZSByZWdpc3RlciBzcGVjaWZpY2F0aW9uIGNvbWVzIGJlZm9yZSB0aGUgZGVsZXRlIGNvbW1hbmQgImQiLgorCisKK0FQUEVORElORyBUTyBBIEZJTEUKKworV2hlbiBjb2xsZWN0aW5nIGxpbmVzIG9mIHRleHQgaW50byBvbmUgZmlsZSwgeW91IGNhbiB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6d3JpdGUgPj4gbG9nZmlsZQorCitUaGlzIHdpbGwgd3JpdGUgdGhlIHRleHQgb2YgdGhlIGN1cnJlbnQgZmlsZSB0byB0aGUgZW5kIG9mICJsb2dmaWxlIi4gIFRodXMgaXQKK2lzIGFwcGVuZGVkLiAgVGhpcyBhdm9pZHMgdGhhdCB5b3UgaGF2ZSB0byBjb3B5IHRoZSBsaW5lcywgZWRpdCB0aGUgbG9nIGZpbGUKK2FuZCBwdXQgdGhlbSB0aGVyZS4gIFRodXMgeW91IHNhdmUgdHdvIHN0ZXBzLiAgQnV0IHlvdSBjYW4gb25seSBhcHBlbmQgdG8gdGhlCitlbmQgb2YgYSBmaWxlLgorICAgVG8gYXBwZW5kIG9ubHkgYSBmZXcgbGluZXMsIHNlbGVjdCB0aGVtIGluIFZpc3VhbCBtb2RlIGJlZm9yZSB0eXBpbmcKKyI6d3JpdGUiLiAgSW4gY2hhcHRlciAxMCB5b3Ugd2lsbCBsZWFybiBvdGhlciB3YXlzIHRvIHNlbGVjdCBhIHJhbmdlIG9mIGxpbmVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNy42KglWaWV3aW5nIGEgZmlsZQorCitTb21ldGltZXMgeW91IG9ubHkgd2FudCB0byBzZWUgd2hhdCBhIGZpbGUgY29udGFpbnMsIHdpdGhvdXQgdGhlIGludGVudGlvbiB0bworZXZlciB3cml0ZSBpdCBiYWNrLiAgVGhlcmUgaXMgdGhlIHJpc2sgdGhhdCB5b3UgdHlwZSAiOnciIHdpdGhvdXQgdGhpbmtpbmcgYW5kCitvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIGZpbGUgYW55d2F5LiAgVG8gYXZvaWQgdGhpcywgZWRpdCB0aGUgZmlsZSByZWFkLW9ubHkuCisgICBUbyBzdGFydCBWaW0gaW4gcmVhZG9ubHkgbW9kZSwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJdmltIC1SIGZpbGUKKworT24gVW5peCB0aGlzIGNvbW1hbmQgc2hvdWxkIGRvIHRoZSBzYW1lIHRoaW5nOiA+CisKKwl2aWV3IGZpbGUKKworWW91IGFyZSBub3cgZWRpdGluZyAiZmlsZSIgaW4gcmVhZC1vbmx5IG1vZGUuICBXaGVuIHlvdSB0cnkgdXNpbmcgIjp3IiB5b3UKK3dpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UgYW5kIHRoZSBmaWxlIHdvbid0IGJlIHdyaXR0ZW4uCisgICBXaGVuIHlvdSB0cnkgdG8gbWFrZSBhIGNoYW5nZSB0byB0aGUgZmlsZSBWaW0gd2lsbCBnaXZlIHlvdSBhIHdhcm5pbmc6CisKKwlXMTA6IFdhcm5pbmc6IENoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSB+CisKK1RoZSBjaGFuZ2Ugd2lsbCBiZSBkb25lIHRob3VnaC4gIFRoaXMgYWxsb3dzIGZvciBmb3JtYXR0aW5nIHRoZSBmaWxlLCBmb3IKK2V4YW1wbGUsIHRvIGJlIGFibGUgdG8gcmVhZCBpdCBlYXNpbHkuCisgICBJZiB5b3UgbWFrZSBjaGFuZ2VzIHRvIGEgZmlsZSBhbmQgZm9yZ290IHRoYXQgaXQgd2FzIHJlYWQtb25seSwgeW91IGNhbgorc3RpbGwgd3JpdGUgaXQuICBBZGQgdGhlICEgdG8gdGhlIHdyaXRlIGNvbW1hbmQgdG8gZm9yY2Ugd3JpdGluZy4KKworSWYgeW91IHJlYWxseSB3YW50IHRvIGZvcmJpZCBtYWtpbmcgY2hhbmdlcyBpbiBhIGZpbGUsIGRvIHRoaXM6ID4KKworCXZpbSAtTSBmaWxlCisKK05vdyBldmVyeSBhdHRlbXB0IHRvIGNoYW5nZSB0aGUgdGV4dCB3aWxsIGZhaWwuICBUaGUgaGVscCBmaWxlcyBhcmUgbGlrZSB0aGlzLAorZm9yIGV4YW1wbGUuICBJZiB5b3UgdHJ5IHRvIG1ha2UgYSBjaGFuZ2UgeW91IGdldCB0aGlzIGVycm9yIG1lc3NhZ2U6CisKKwlFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYgfgorCitZb3UgY291bGQgdXNlIHRoZSAtTSBhcmd1bWVudCB0byBzZXR1cCBWaW0gdG8gd29yayBpbiBhIHZpZXdlciBtb2RlLiAgVGhpcyBpcworb25seSB2b2x1bnRhcnkgdGhvdWdoLCBzaW5jZSB0aGVzZSBjb21tYW5kcyB3aWxsIHJlbW92ZSB0aGUgcHJvdGVjdGlvbjogPgorCisJOnNldCBtb2RpZmlhYmxlCisJOnNldCB3cml0ZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNy43KglDaGFuZ2luZyB0aGUgZmlsZSBuYW1lCisKK0EgY2xldmVyIHdheSB0byBzdGFydCBlZGl0aW5nIGEgbmV3IGZpbGUgaXMgYnkgdXNpbmcgYW4gZXhpc3RpbmcgZmlsZSB0aGF0Citjb250YWlucyBtb3N0IG9mIHdoYXQgeW91IG5lZWQuICBGb3IgZXhhbXBsZSwgeW91IHN0YXJ0IHdyaXRpbmcgYSBuZXcgcHJvZ3JhbQordG8gbW92ZSBhIGZpbGUuICBZb3Uga25vdyB0aGF0IHlvdSBhbHJlYWR5IGhhdmUgYSBwcm9ncmFtIHRoYXQgY29waWVzIGEgZmlsZSwKK3RodXMgeW91IHN0YXJ0IHdpdGg6ID4KKworCTplZGl0IGNvcHkuYworCitZb3UgY2FuIGRlbGV0ZSB0aGUgc3R1ZmYgeW91IGRvbid0IG5lZWQuICBOb3cgeW91IG5lZWQgdG8gc2F2ZSB0aGUgZmlsZSB1bmRlcgorYSBuZXcgbmFtZS4gIFRoZSAiOnNhdmVhcyIgY29tbWFuZCBjYW4gYmUgdXNlZCBmb3IgdGhpczogPgorCisJOnNhdmVhcyBtb3ZlLmMKKworVmltIHdpbGwgd3JpdGUgdGhlIGZpbGUgdW5kZXIgdGhlIGdpdmVuIG5hbWUsIGFuZCBlZGl0IHRoYXQgZmlsZS4gIFRodXMgdGhlCituZXh0IHRpbWUgeW91IGRvICI6d3JpdGUiLCBpdCB3aWxsIHdyaXRlICJtb3ZlLmMiLiAgImNvcHkuYyIgcmVtYWlucwordW5tb2RpZmllZC4KKyAgIFdoZW4geW91IHdhbnQgdG8gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHlvdSBhcmUgZWRpdGluZywgYnV0IGRvbid0Cit3YW50IHRvIHdyaXRlIHRoZSBmaWxlLCB5b3UgY2FuIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpmaWxlIG1vdmUuYworCitWaW0gd2lsbCBtYXJrIHRoZSBmaWxlIGFzICJub3QgZWRpdGVkIi4gIFRoaXMgbWVhbnMgdGhhdCBWaW0ga25vd3MgdGhpcyBpcyBub3QKK3RoZSBmaWxlIHlvdSBzdGFydGVkIGVkaXRpbmcuICBXaGVuIHlvdSB0cnkgdG8gd3JpdGUgdGhlIGZpbGUsIHlvdSBtaWdodCBnZXQKK3RoaXMgbWVzc2FnZToKKworCUUxMzogRmlsZSBleGlzdHMgKHVzZSAhIHRvIG92ZXJyaWRlKSB+CisKK1RoaXMgcHJvdGVjdHMgeW91IGZyb20gYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIGFub3RoZXIgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8wOC50eHR8ICBTcGxpdHRpbmcgd2luZG93cworCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8wOC50eHQgYi9ydW50aW1lL2RvYy91c3JfMDgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZjgzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMDgudHh0CkBAIC0wLDAgKzEsNTExIEBACisqdXNyXzA4LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA0CisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgICBTcGxpdHRpbmcgd2luZG93cworCisKK0Rpc3BsYXkgdHdvIGRpZmZlcmVudCBmaWxlcyBhYm92ZSBlYWNoIG90aGVyLiAgT3IgdmlldyB0d28gbG9jYXRpb25zIGluIHRoZQorZmlsZSBhdCB0aGUgc2FtZSB0aW1lLiAgU2VlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGZpbGVzIGJ5IHB1dHRpbmcgdGhlbQorc2lkZSBieSBzaWRlLiAgQWxsIHRoaXMgaXMgcG9zc2libGUgd2l0aCBzcGxpdCB3aW5kb3dzLgorCit8MDguMXwJU3BsaXQgYSB3aW5kb3cKK3wwOC4yfAlTcGxpdCBhIHdpbmRvdyBvbiBhbm90aGVyIGZpbGUKK3wwOC4zfAlXaW5kb3cgc2l6ZQorfDA4LjR8CVZlcnRpY2FsIHNwbGl0cworfDA4LjV8CU1vdmluZyB3aW5kb3dzCit8MDguNnwJQ29tbWFuZHMgZm9yIGFsbCB3aW5kb3dzCit8MDguN3wJVmlld2luZyBkaWZmZXJlbmNlcyB3aXRoIHZpbWRpZmYKK3wwOC44fAlWYXJpb3VzCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzA5LnR4dHwgIFVzaW5nIHRoZSBHVUkKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzA3LnR4dHwgIEVkaXRpbmcgbW9yZSB0aGFuIG9uZSBmaWxlCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowOC4xKglTcGxpdCBhIHdpbmRvdworCitUaGUgZWFzaWVzdCB3YXkgdG8gb3BlbiBhIG5ldyB3aW5kb3cgaXMgdG8gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOnNwbGl0CisKK1RoaXMgY29tbWFuZCBzcGxpdHMgdGhlIHNjcmVlbiBpbnRvIHR3byB3aW5kb3dzIGFuZCBsZWF2ZXMgdGhlIGN1cnNvciBpbiB0aGUKK3RvcCBvbmU6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8LyogZmlsZSBvbmUuYyAqLwkJICAgfAorCXx+CQkJCSAgIHwKKwl8fgkJCQkgICB8CisJfG9uZS5jPT09PT09PT09PT09PT09PT09PT09PT09PT09PT18CisJfC8qIGZpbGUgb25lLmMgKi8JCSAgIHwKKwl8fgkJCQkgICB8CisJfG9uZS5jPT09PT09PT09PT09PT09PT09PT09PT09PT09PT18CisJfAkJCQkgICB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1doYXQgeW91IHNlZSBoZXJlIGlzIHR3byB3aW5kb3dzIG9uIHRoZSBzYW1lIGZpbGUuICBUaGUgbGluZSB3aXRoICI9PT09IiBpcwordGhhdCBzdGF0dXMgbGluZS4gIEl0IGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3aW5kb3cgYWJvdmUgaXQuICAoSW4KK3ByYWN0aWNlIHRoZSBzdGF0dXMgbGluZSB3aWxsIGJlIGluIHJldmVyc2UgdmlkZW8uKQorICAgVGhlIHR3byB3aW5kb3dzIGFsbG93IHlvdSB0byB2aWV3IHR3byBwYXJ0cyBvZiB0aGUgc2FtZSBmaWxlLiAgRm9yIGV4YW1wbGUsCit5b3UgY291bGQgbWFrZSB0aGUgdG9wIHdpbmRvdyBzaG93IHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgb2YgYSBwcm9ncmFtLCBhbmQKK3RoZSBib3R0b20gb25lIHRoZSBjb2RlIHRoYXQgdXNlcyB0aGVzZSB2YXJpYWJsZXMuCisKK1RoZSBDVFJMLVcgdyBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGp1bXAgYmV0d2VlbiB0aGUgd2luZG93cy4gIElmIHlvdSBhcmUgaW4KK3RoZSB0b3Agd2luZG93LCBDVFJMLVcgdyBqdW1wcyB0byB0aGUgd2luZG93IGJlbG93IGl0LiAgSWYgeW91IGFyZSBpbiB0aGUKK2JvdHRvbSB3aW5kb3cgaXQgd2lsbCBqdW1wIHRvIHRoZSBmaXJzdCB3aW5kb3cuIChDVFJMLVcgQ1RSTC1XIGRvZXMgdGhlIHNhbWUKK3RoaW5nLCBpbiBjYXNlIHlvdSBsZXQgZ28gb2YgdGhlIENUUkwga2V5IGEgYml0IGxhdGVyLikKKworCitDTE9TRSBUSEUgV0lORE9XCisKK1RvIGNsb3NlIGEgd2luZG93LCB1c2UgdGhlIGNvbW1hbmQ6ID4KKworCTpjbG9zZQorCitBY3R1YWxseSwgYW55IGNvbW1hbmQgdGhhdCBxdWl0cyBlZGl0aW5nIGEgZmlsZSB3b3JrcywgbGlrZSAiOnF1aXQiIGFuZCAiWloiLgorQnV0ICI6Y2xvc2UiIHByZXZlbnRzIHlvdSBmcm9tIGFjY2lkZW50YWxseSBleGl0aW5nIFZpbSB3aGVuIHlvdSBjbG9zZSB0aGUKK2xhc3Qgd2luZG93LgorCisKK0NMT1NJTkcgQUxMIE9USEVSIFdJTkRPV1MKKworSWYgeW91IGhhdmUgb3BlbmVkIGEgd2hvbGUgYnVuY2ggb2Ygd2luZG93cywgYnV0IG5vdyB3YW50IHRvIGNvbmNlbnRyYXRlIG9uCitvbmUgb2YgdGhlbSwgdGhpcyBjb21tYW5kIHdpbGwgYmUgdXNlZnVsOiA+CisKKwk6b25seQorCitUaGlzIGNsb3NlcyBhbGwgd2luZG93cywgZXhjZXB0IGZvciB0aGUgY3VycmVudCBvbmUuICBJZiBhbnkgb2YgdGhlIG90aGVyCit3aW5kb3dzIGhhcyBjaGFuZ2VzLCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgdGhhdCB3aW5kb3cgd29uJ3QgYmUKK2Nsb3NlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDguMioJU3BsaXQgYSB3aW5kb3cgb24gYW5vdGhlciBmaWxlCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZCBvcGVucyBhIHNlY29uZCB3aW5kb3cgYW5kIHN0YXJ0cyBlZGl0aW5nIHRoZSBnaXZlbiBmaWxlOgorPgorCTpzcGxpdCB0d28uYworCitJZiB5b3Ugd2VyZSBlZGl0aW5nIG9uZS5jLCB0aGVuIHRoZSByZXN1bHQgbG9va3MgbGlrZSB0aGlzOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfC8qIGZpbGUgdHdvLmMgKi8JCSAgIHwKKwl8fgkJCQkgICB8CisJfH4JCQkJICAgfAorCXx0d28uYz09PT09PT09PT09PT09PT09PT09PT09PT09PT09fAorCXwvKiBmaWxlIG9uZS5jICovCQkgICB8CisJfH4JCQkJICAgfAorCXxvbmUuYz09PT09PT09PT09PT09PT09PT09PT09PT09PT09fAorCXwJCQkJICAgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUbyBvcGVuIGEgd2luZG93IG9uIGEgbmV3LCBlbXB0eSBmaWxlLCB1c2UgdGhpczogPgorCisJOm5ldworCitZb3UgY2FuIHJlcGVhdCB0aGUgIjpzcGxpdCIgYW5kICI6bmV3IiBjb21tYW5kcyB0byBjcmVhdGUgYXMgbWFueSB3aW5kb3dzIGFzCit5b3UgbGlrZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDguMyoJV2luZG93IHNpemUKKworVGhlICI6c3BsaXQiIGNvbW1hbmQgY2FuIHRha2UgYSBudW1iZXIgYXJndW1lbnQuICBJZiBzcGVjaWZpZWQsIHRoaXMgd2lsbCBiZQordGhlIGhlaWdodCBvZiB0aGUgbmV3IHdpbmRvdy4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIG9wZW5zIGEgbmV3IHdpbmRvdwordGhyZWUgbGluZXMgaGlnaCBhbmQgc3RhcnRzIGVkaXRpbmcgdGhlIGZpbGUgYWxwaGEuYzogPgorCisJOjNzcGxpdCBhbHBoYS5jCisKK0ZvciBleGlzdGluZyB3aW5kb3dzIHlvdSBjYW4gY2hhbmdlIHRoZSBzaXplIGluIHNldmVyYWwgd2F5cy4gIFdoZW4geW91IGhhdmUgYQord29ya2luZyBtb3VzZSwgaXQgaXMgZWFzeTogTW92ZSB0aGUgbW91c2UgcG9pbnRlciB0byB0aGUgc3RhdHVzIGxpbmUgdGhhdAorc2VwYXJhdGVzIHR3byB3aW5kb3dzLCBhbmQgZHJhZyBpdCB1cCBvciBkb3duLgorCitUbyBpbmNyZWFzZSB0aGUgc2l6ZSBvZiBhIHdpbmRvdzogPgorCisJQ1RSTC1XICsKKworVG8gZGVjcmVhc2UgaXQ6ID4KKworCUNUUkwtVyAtCisKK0JvdGggb2YgdGhlc2UgY29tbWFuZHMgdGFrZSBhIGNvdW50IGFuZCBpbmNyZWFzZSBvciBkZWNyZWFzZSB0aGUgd2luZG93IHNpemUKK2J5IHRoYXQgbWFueSBsaW5lcy4gIFRodXMgIjQgQ1RSTC1XICsiIG1ha2UgdGhlIHdpbmRvdyBmb3VyIGxpbmVzIGhpZ2hlci4KKworVG8gc2V0IHRoZSB3aW5kb3cgaGVpZ2h0IHRvIGEgc3BlY2lmaWVkIG51bWJlciBvZiBsaW5lczogPgorCisJe2hlaWdodH1DVFJMLVcgXworCitUaGF0J3M6IGEgbnVtYmVyIHtoZWlnaHR9LCBDVFJMLVcgYW5kIHRoZW4gYW4gdW5kZXJzY29yZSAodGhlIC0ga2V5IHdpdGggU2hpZnQKK29uIEVuZ2xpc2gtVVMga2V5Ym9hcmRzKS4KKyAgIFRvIG1ha2UgYSB3aW5kb3cgYXMgaGlnaCBhcyBpdCBjYW4gYmUsIHVzZSB0aGUgQ1RSTC1XIF8gY29tbWFuZCB3aXRob3V0IGEKK2NvdW50LgorCisKK1VTSU5HIFRIRSBNT1VTRQorCitJbiBWaW0geW91IGNhbiBkbyBtYW55IHRoaW5ncyB2ZXJ5IHF1aWNrbHkgZnJvbSB0aGUga2V5Ym9hcmQuICBVbmZvcnR1bmF0ZWx5LAordGhlIHdpbmRvdyByZXNpemluZyBjb21tYW5kcyByZXF1aXJlIHF1aXRlIGEgYml0IG9mIHR5cGluZy4gIEluIHRoaXMgY2FzZSwKK3VzaW5nIHRoZSBtb3VzZSBpcyBmYXN0ZXIuICBQb3NpdGlvbiB0aGUgbW91c2UgcG9pbnRlciBvbiBhIHN0YXR1cyBsaW5lLiAgTm93CitwcmVzcyB0aGUgbGVmdCBtb3VzZSBidXR0b24gYW5kIGRyYWcuICBUaGUgc3RhdHVzIGxpbmUgd2lsbCBtb3ZlLCB0aHVzIG1ha2luZwordGhlIHdpbmRvdyBvbiBvbmUgc2lkZSBoaWdoZXIgYW5kIHRoZSBvdGhlciBzbWFsbGVyLgorCisKK09QVElPTlMKKworVGhlICd3aW5oZWlnaHQnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIGEgbWluaW1hbCBkZXNpcmVkIGhlaWdodCBvZiBhIHdpbmRvdyBhbmQKKyd3aW5taW5oZWlnaHQnIHRvIGEgaGFyZCBtaW5pbXVtIGhlaWdodC4KKyAgIExpa2V3aXNlLCB0aGVyZSBpcyAnd2lud2lkdGgnIGZvciB0aGUgbWluaW1hbCBkZXNpcmVkIHdpZHRoIGFuZAorJ3dpbm1pbndpZHRoJyBmb3IgdGhlIGhhcmQgbWluaW11bSB3aWR0aC4KKyAgIFRoZSAnZXF1YWxhbHdheXMnIG9wdGlvbiwgd2hlbiBzZXQsIG1ha2VzIFZpbSBlcXVhbGl6ZSB0aGUgd2luZG93cyBzaXplcword2hlbiBhIHdpbmRvdyBpcyBjbG9zZWQgb3Igb3BlbmVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowOC40KglWZXJ0aWNhbCBzcGxpdHMKKworVGhlICI6c3BsaXQiIGNvbW1hbmQgY3JlYXRlcyB0aGUgbmV3IHdpbmRvdyBhYm92ZSB0aGUgY3VycmVudCBvbmUuICBUbyBtYWtlCit0aGUgd2luZG93IGFwcGVhciBhdCB0aGUgbGVmdCBzaWRlLCB1c2U6ID4KKworCTp2c3BsaXQKKworb3I6ID4KKwk6dnNwbGl0IHR3by5jCisKK1RoZSByZXN1bHQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8LyogZmlsZSB0d28uYyAqLyAgIHwvKiBmaWxlIG9uZS5jICovICB8CisJfH4JCSAgICB8fgkJICAgICAgIHwKKwl8fgkJICAgIHx+CQkgICAgICAgfAorCXx+CQkgICAgfH4JCSAgICAgICB8CisJfHR3by5jPT09PT09PT09PT09PT09b25lLmM9PT09PT09PT09PT09fAorCXwJCQkJICAgICAgIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0FjdHVhbGx5LCB0aGUgfCBsaW5lcyBpbiB0aGUgbWlkZGxlIHdpbGwgYmUgaW4gcmV2ZXJzZSB2aWRlby4gIFRoaXMgaXMgY2FsbGVkCit0aGUgdmVydGljYWwgc2VwYXJhdG9yLiAgSXQgc2VwYXJhdGVzIHRoZSB0d28gd2luZG93cyBsZWZ0IGFuZCByaWdodCBvZiBpdC4KKworVGhlcmUgaXMgYWxzbyB0aGUgIjp2bmV3IiBjb21tYW5kLCB0byBvcGVuIGEgdmVydGljYWxseSBzcGxpdCB3aW5kb3cgb24gYSBuZXcsCitlbXB0eSBmaWxlLiAgQW5vdGhlciB3YXkgdG8gZG8gdGhpczogPgorCisJOnZlcnRpY2FsIG5ldworCitUaGUgIjp2ZXJ0aWNhbCIgY29tbWFuZCBjYW4gYmUgaW5zZXJ0ZWQgYmVmb3JlIGFub3RoZXIgY29tbWFuZCB0aGF0IHNwbGl0cyBhCit3aW5kb3cuICBUaGlzIHdpbGwgY2F1c2UgdGhhdCBjb21tYW5kIHRvIHNwbGl0IHRoZSB3aW5kb3cgdmVydGljYWxseSBpbnN0ZWFkCitvZiBob3Jpem9udGFsbHkuICAoSWYgdGhlIGNvbW1hbmQgZG9lc24ndCBzcGxpdCBhIHdpbmRvdywgaXQgd29ya3MKK3VubW9kaWZpZWQuKQorCisKK01PVklORyBCRVRXRUVOIFdJTkRPV1MKKworU2luY2UgeW91IGNhbiBzcGxpdCB3aW5kb3dzIGhvcml6b250YWxseSBhbmQgdmVydGljYWxseSBhcyBtdWNoIGFzIHlvdSBsaWtlLAoreW91IGNhbiBjcmVhdGUgYW55IGxheW91dCBvZiB3aW5kb3dzLiAgVGhlbiB5b3UgY2FuIHVzZSB0aGVzZSBjb21tYW5kcyB0byBtb3ZlCitiZXR3ZWVuIHRoZW06CisKKwlDVFJMLVcgaAltb3ZlIHRvIHRoZSB3aW5kb3cgb24gdGhlIGxlZnQKKwlDVFJMLVcgagltb3ZlIHRvIHRoZSB3aW5kb3cgYmVsb3cKKwlDVFJMLVcgawltb3ZlIHRvIHRoZSB3aW5kb3cgYWJvdmUKKwlDVFJMLVcgbAltb3ZlIHRvIHRoZSB3aW5kb3cgb24gdGhlIHJpZ2h0CisKKwlDVFJMLVcgdAltb3ZlIHRvIHRoZSBUT1Agd2luZG93CisJQ1RSTC1XIGIJbW92ZSB0byB0aGUgQk9UVE9NIHdpbmRvdworCitZb3Ugd2lsbCBub3RpY2UgdGhlIHNhbWUgbGV0dGVycyBhcyB1c2VkIGZvciBtb3ZpbmcgdGhlIGN1cnNvci4gIEFuZCB0aGUKK2N1cnNvciBrZXlzIGNhbiBhbHNvIGJlIHVzZWQsIGlmIHlvdSBsaWtlLgorICAgTW9yZSBjb21tYW5kcyB0byBtb3ZlIHRvIG90aGVyIHdpbmRvd3M6IHxRX3dpfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDguNSoJTW92aW5nIHdpbmRvd3MKKworWW91IGhhdmUgc3BsaXQgYSBmZXcgd2luZG93cywgYnV0IG5vdyB0aGV5IGFyZSBpbiB0aGUgd3JvbmcgcGxhY2UuICBUaGVuIHlvdQorbmVlZCBhIGNvbW1hbmQgdG8gbW92ZSB0aGUgd2luZG93IHNvbWV3aGVyZSBlbHNlLiAgRm9yIGV4YW1wbGUsIHlvdSBoYXZlIHRocmVlCit3aW5kb3dzIGxpa2UgdGhpczoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwvKiBmaWxlIHR3by5jICovCQkgICB8CisJfH4JCQkJICAgfAorCXx+CQkJCSAgIHwKKwl8dHdvLmM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8LyogZmlsZSB0aHJlZS5jICovCQkgICB8CisJfH4JCQkJICAgfAorCXx+CQkJCSAgIHwKKwl8dGhyZWUuYz09PT09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8LyogZmlsZSBvbmUuYyAqLwkJICAgfAorCXx+CQkJCSAgIHwKKwl8b25lLmM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8CQkJCSAgIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworQ2xlYXJseSB0aGUgbGFzdCBvbmUgc2hvdWxkIGJlIGF0IHRoZSB0b3AuICBHbyB0byB0aGF0IHdpbmRvdyAodXNpbmcgQ1RSTC1XIHcpCithbmQgdGhlIHR5cGUgdGhpcyBjb21tYW5kOiA+CisKKwlDVFJMLVcgSworCitUaGlzIHVzZXMgdGhlIHVwcGVyY2FzZSBsZXR0ZXIgSy4gIFdoYXQgaGFwcGVucyBpcyB0aGF0IHRoZSB3aW5kb3cgaXMgbW92ZWQgdG8KK3RoZSB2ZXJ5IHRvcC4gIFlvdSB3aWxsIG5vdGljZSB0aGF0IEsgaXMgYWdhaW4gdXNlZCBmb3IgbW92aW5nIHVwd2FyZHMuCisgICBXaGVuIHlvdSBoYXZlIHZlcnRpY2FsIHNwbGl0cywgQ1RSTC1XIEsgd2lsbCBtb3ZlIHRoZSBjdXJyZW50IHdpbmRvdyB0byB0aGUKK3RvcCBhbmQgbWFrZSBpdCBvY2N1cHkgdGhlIGZ1bGwgd2l0aCBvZiB0aGUgVmltIHdpbmRvdy4gIElmIHRoaXMgaXMgeW91cgorbGF5b3V0OgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfC8qIHR3by5jICovICB8LyogdGhyZWUuYyAqLyAgfC8qIG9uZS5jICovICB8CisJfH4JICAgICAgfH4JICAgICAgfH4JICAgIHwKKwl8fgkgICAgICB8fgkgICAgICB8fgkgICAgfAorCXx+CSAgICAgIHx+CSAgICAgIHx+CSAgICB8CisJfH4JICAgICAgfH4JICAgICAgfH4JICAgIHwKKwl8fgkgICAgICB8fgkgICAgICB8fgkgICAgfAorCXx0d28uYz09PT09PT09PXRocmVlLmM9PT09PT09PT1vbmUuYz09PT09PT09fAorCXwJCQkJCSAgICB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZW4gdXNpbmcgQ1RSTC1XIEsgaW4gdGhlIG1pZGRsZSB3aW5kb3cgKHRocmVlLmMpIHdpbGwgcmVzdWx0IGluOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfC8qIHRocmVlLmMgKi8JCQkJICAgIHwKKwl8fgkJCQkJICAgIHwKKwl8fgkJCQkJICAgIHwKKwl8dGhyZWUuYz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8LyogdHdvLmMgKi8JICAgICAgIHwvKiBvbmUuYyAqLwkgICAgfAorCXx+CQkgICAgICAgfH4JCSAgICB8CisJfHR3by5jPT09PT09PT09PT09PT09PT09b25lLmM9PT09PT09PT09PT09PT18CisJfAkJCQkJICAgIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIG90aGVyIHRocmVlIHNpbWlsYXIgY29tbWFuZHMgKHlvdSBjYW4gcHJvYmFibHkgZ3Vlc3MgdGhlc2Ugbm93KToKKworCUNUUkwtVyBICW1vdmUgd2luZG93IHRvIHRoZSBmYXIgbGVmdAorCUNUUkwtVyBKCW1vdmUgd2luZG93IHRvIHRoZSBib3R0b20KKwlDVFJMLVcgTAltb3ZlIHdpbmRvdyB0byB0aGUgZmFyIHJpZ2h0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA4LjYqCUNvbW1hbmRzIGZvciBhbGwgd2luZG93cworCitXaGVuIHlvdSBoYXZlIHNldmVyYWwgd2luZG93cyBvcGVuIGFuZCB5b3Ugd2FudCB0byBxdWl0IFZpbSwgeW91IGNhbiBjbG9zZQorZWFjaCB3aW5kb3cgc2VwYXJhdGVseS4gIEEgcXVpY2tlciB3YXkgaXMgdXNpbmcgdGhpcyBjb21tYW5kOiA+CisKKwk6cWFsbAorCitUaGlzIHN0YW5kcyBmb3IgInF1aXQgYWxsIi4gIElmIGFueSBvZiB0aGUgd2luZG93cyBjb250YWluIGNoYW5nZXMsIFZpbSB3aWxsCitub3QgZXhpdC4gIFRoZSBjdXJzb3Igd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHBvc2l0aW9uZWQgaW4gYSB3aW5kb3cgd2l0aAorY2hhbmdlcy4gIFlvdSBjYW4gdGhlbiBlaXRoZXIgdXNlICI6d3JpdGUiIHRvIHNhdmUgdGhlIGNoYW5nZXMsIG9yICI6cXVpdCEiIHRvCit0aHJvdyB0aGVtIGF3YXkuCisKK0lmIHlvdSBrbm93IHRoZXJlIGFyZSB3aW5kb3dzIHdpdGggY2hhbmdlcywgYW5kIHlvdSB3YW50IHRvIHNhdmUgYWxsIHRoZXNlCitjaGFuZ2VzLCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6d2FsbAorCitUaGlzIHN0YW5kcyBmb3IgIndyaXRlIGFsbCIuICBCdXQgYWN0dWFsbHksIGl0IG9ubHkgd3JpdGVzIGZpbGVzIHdpdGgKK2NoYW5nZXMuICBWaW0ga25vd3MgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHdyaXRlIGZpbGVzIHRoYXQgd2VyZSBub3QKK2NoYW5nZWQuCisgICBBbmQgdGhlbiB0aGVyZSBpcyB0aGUgY29tYmluYXRpb24gb2YgIjpxYWxsIiBhbmQgIjp3YWxsIjogdGhlICJ3cml0ZSBhbmQKK3F1aXQgYWxsIiBjb21tYW5kOiA+CisKKwk6d3FhbGwKKworVGhpcyB3cml0ZXMgYWxsIG1vZGlmaWVkIGZpbGVzIGFuZCBxdWl0cyBWaW0uCisgICBGaW5hbGx5LCB0aGVyZSBpcyBhIGNvbW1hbmQgdGhhdCBxdWl0cyBWaW0gYW5kIHRocm93cyBhd2F5IGFsbCBjaGFuZ2VzOiA+CisKKwk6cWFsbCEKKworQmUgY2FyZWZ1bCwgdGhlcmUgaXMgbm8gd2F5IHRvIHVuZG8gdGhpcyBjb21tYW5kIQorCisKK09QRU5JTkcgQSBXSU5ET1cgRk9SIEFMTCBBUkdVTUVOVFMKKworVG8gbWFrZSBWaW0gb3BlbiBhIHdpbmRvdyBmb3IgZWFjaCBmaWxlLCBzdGFydCBpdCB3aXRoIHRoZSAiLW8iIGFyZ3VtZW50OiA+CisKKwl2aW0gLW8gb25lLnR4dCB0d28udHh0IHRocmVlLnR4dAorCitUaGlzIHJlc3VsdHMgaW46CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8ZmlsZSBvbmUudHh0CQkJfAorCXx+CQkJCXwKKwl8b25lLnR4dD09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8ZmlsZSB0d28udHh0CQkJfAorCXx+CQkJCXwKKwl8dHdvLnR4dD09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8ZmlsZSB0aHJlZS50eHQJCQl8CisJfH4JCQkJfAorCXx0aHJlZS50eHQ9PT09PT09PT09PT09PT09PT09PT09fAorCXwJCQkJfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUaGUgIi1PIiBhcmd1bWVudCBpcyB1c2VkIHRvIGdldCB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MuCisgICBXaGVuIFZpbSBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRoZSAiOmFsbCIgY29tbWFuZCBvcGVucyBhIHdpbmRvdyBmb3IgZWFjaAorZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdC4gICI6dmVydGljYWwgYWxsIiBkb2VzIGl0IHdpdGggdmVydGljYWwgc3BsaXRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowOC43KglWaWV3aW5nIGRpZmZlcmVuY2VzIHdpdGggdmltZGlmZgorCitUaGVyZSBpcyBhIHNwZWNpYWwgd2F5IHRvIHN0YXJ0IFZpbSwgd2hpY2ggc2hvd3MgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvCitmaWxlcy4gIExldCdzIHRha2UgYSBmaWxlICJtYWluLmMiIGFuZCBpbnNlcnQgYSBmZXcgY2hhcmFjdGVycyBpbiBvbmUgbGluZS4KK1dyaXRlIHRoaXMgZmlsZSB3aXRoIHRoZSAnYmFja3VwJyBvcHRpb24gc2V0LCBzbyB0aGF0IHRoZSBiYWNrdXAgZmlsZQorIm1haW4uY34iIHdpbGwgY29udGFpbiB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgZmlsZS4KKyAgIFR5cGUgdGhpcyBjb21tYW5kIGluIGEgc2hlbGwgKG5vdCBpbiBWaW0pOiA+CisKKwl2aW1kaWZmIG1haW4uY34gbWFpbi5jCisKK1ZpbSB3aWxsIHN0YXJ0LCB3aXRoIHR3byB3aW5kb3dzIHNpZGUgYnkgc2lkZS4gIFlvdSB3aWxsIG9ubHkgc2VlIHRoZSBsaW5lCitpbiB3aGljaCB5b3UgYWRkZWQgY2hhcmFjdGVycywgYW5kIGEgZmV3IGxpbmVzIGFib3ZlIGFuZCBiZWxvdyBpdC4KKworCSBWVgkJICAgICAgVlYKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCsgKy0tMTIzIGxpbmVzOiAvKiBhfCsgKy0tMTIzIGxpbmVzOiAvKiBhfCAgPC0gZm9sZAorCXwgIHRleHQJCSAgICAgfAl0ZXh0CQkgIHwKKwl8ICB0ZXh0CQkgICAgIHwJdGV4dAkJICB8CisJfCAgdGV4dAkJICAgICB8CXRleHQJCSAgfAorCXwgIHRleHQJCSAgICAgfAljaGFuZ2VkIHRleHQJICB8ICA8LSBjaGFuZ2VkIGxpbmUKKwl8ICB0ZXh0CQkgICAgIHwJdGV4dAkJICB8CisJfCAgdGV4dAkJICAgICB8CS0tLS0tLS0tLS0tLS0tLS0tLXwgIDwtIGRlbGV0ZWQgbGluZQorCXwgIHRleHQJCSAgICAgfAl0ZXh0CQkgIHwKKwl8ICB0ZXh0CQkgICAgIHwJdGV4dAkJICB8CisJfCAgdGV4dAkJICAgICB8CXRleHQJCSAgfAorCXwrICstLTQzMiBsaW5lczogdGV4dHwrICstLTQzMiBsaW5lczogdGV4dHwgIDwtIGZvbGQKKwl8ICB+CQkgICAgIHwJfgkJICB8CisJfCAgfgkJICAgICB8CX4JCSAgfAorCXxtYWluLmN+PT09PT09PT09PT09PT1tYWluLmM9PT09PT09PT09PT09PXwKKwl8CQkJCQkgIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyhUaGlzIHBpY3R1cmUgZG9lc24ndCBzaG93IHRoZSBoaWdobGlnaHRpbmcsIHVzZSB0aGUgdmltZGlmZiBjb21tYW5kIGZvciBhCitiZXR0ZXIgbG9vay4pCisKK1RoZSBsaW5lcyB0aGF0IHdlcmUgbm90IG1vZGlmaWVkIGhhdmUgYmVlbiBjb2xsYXBzZWQgaW50byBvbmUgbGluZS4gIFRoaXMgaXMKK2NhbGxlZCBhIGNsb3NlZCBmb2xkLiAgVGhleSBhcmUgaW5kaWNhdGVkIGluIHRoZSBwaWN0dXJlIHdpdGggIjwtIGZvbGQiLiAgVGh1cwordGhlIHNpbmdsZSBmb2xkIGxpbmUgYXQgdGhlIHRvcCBzdGFuZHMgZm9yIDEyMyB0ZXh0IGxpbmVzLiAgVGhlc2UgbGluZXMgYXJlCitlcXVhbCBpbiBib3RoIGZpbGVzLgorICAgVGhlIGxpbmUgbWFya2VkIHdpdGggIjwtIGNoYW5nZWQgbGluZSIgaXMgaGlnaGxpZ2h0ZWQsIGFuZCB0aGUgaW5zZXJ0ZWQKK3RleHQgaXMgZGlzcGxheWVkIHdpdGggYW5vdGhlciBjb2xvci4gIFRoaXMgY2xlYXJseSBzaG93cyB3aGF0IHRoZSBkaWZmZXJlbmNlCitpcyBiZXR3ZWVuIHRoZSB0d28gZmlsZXMuCisgICBUaGUgbGluZSB0aGF0IHdhcyBkZWxldGVkIGlzIGRpc3BsYXllZCB3aXRoICItLS0iIGluIHRoZSBtYWluLmMgd2luZG93LgorU2VlIHRoZSAiPC0gZGVsZXRlZCBsaW5lIiBtYXJrZXIgaW4gdGhlIHBpY3R1cmUuICBUaGVzZSBjaGFyYWN0ZXJzIGFyZSBub3QKK3JlYWxseSB0aGVyZS4gIFRoZXkganVzdCBmaWxsIHVwIG1haW4uYywgc28gdGhhdCBpdCBkaXNwbGF5cyB0aGUgc2FtZSBudW1iZXIKK29mIGxpbmVzIGFzIHRoZSBvdGhlciB3aW5kb3cuCisKKworVEhFIEZPTEQgQ09MVU1OCisKK0VhY2ggd2luZG93IGhhcyBhIGNvbHVtbiBvbiB0aGUgbGVmdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGJhY2tncm91bmQuICBJbgordGhlIHBpY3R1cmUgYWJvdmUgdGhlc2UgYXJlIGluZGljYXRlZCB3aXRoICJWViIuICBZb3Ugbm90aWNlIHRoZXJlIGlzIGEgcGx1cworY2hhcmFjdGVyIHRoZXJlLCBpbiBmcm9udCBvZiBlYWNoIGNsb3NlZCBmb2xkLiAgTW92ZSB0aGUgbW91c2UgcG9pbnRlciB0byB0aGF0CitwbHVzIGFuZCBjbGljayB0aGUgbGVmdCBidXR0b24uICBUaGUgZm9sZCB3aWxsIG9wZW4sIGFuZCB5b3UgY2FuIHNlZSB0aGUgdGV4dAordGhhdCBpdCBjb250YWlucy4KKyAgIFRoZSBmb2xkIGNvbHVtbiBjb250YWlucyBhIG1pbnVzIHNpZ24gZm9yIGFuIG9wZW4gZm9sZC4gIElmIHlvdSBjbGljayBvbgordGhpcyAtLCB0aGUgZm9sZCB3aWxsIGNsb3NlLgorICAgT2J2aW91c2x5LCB0aGlzIG9ubHkgd29ya3Mgd2hlbiB5b3UgaGF2ZSBhIHdvcmtpbmcgbW91c2UuICBZb3UgY2FuIGFsc28gdXNlCisiem8iIHRvIG9wZW4gYSBmb2xkIGFuZCAiemMiIHRvIGNsb3NlIGl0LgorCisKK0RJRkZJTkcgSU4gVklNCisKK0Fub3RoZXIgd2F5IHRvIHN0YXJ0IGluIGRpZmYgbW9kZSBjYW4gYmUgZG9uZSBmcm9tIGluc2lkZSBWaW0uICBFZGl0IHRoZQorIm1haW4uYyIgZmlsZSwgdGhlbiBtYWtlIGEgc3BsaXQgYW5kIHNob3cgdGhlIGRpZmZlcmVuY2VzOiA+CisKKwk6ZWRpdCBtYWluLmMKKwk6dmVydGljYWwgZGlmZnNwbGl0IG1haW4uY34gCisKK1RoZSAiOnZlcnRpY2FsIiBjb21tYW5kIGlzIHVzZWQgdG8gbWFrZSB0aGUgd2luZG93IHNwbGl0IHZlcnRpY2FsbHkuICBJZiB5b3UKK29taXQgdGhpcywgeW91IHdpbGwgZ2V0IGEgaG9yaXpvbnRhbCBzcGxpdC4KKworSWYgeW91IGhhdmUgYSBwYXRjaCBvciBkaWZmIGZpbGUsIHlvdSBjYW4gdXNlIHRoZSB0aGlyZCB3YXkgdG8gc3RhcnQgZGlmZgorbW9kZS4gIEZpcnN0IGVkaXQgdGhlIGZpbGUgdG8gd2hpY2ggdGhlIHBhdGNoIGFwcGxpZXMuICBUaGVuIHRlbGwgVmltIHRoZSBuYW1lCitvZiB0aGUgcGF0Y2ggZmlsZTogPgorCisJOmVkaXQgbWFpbi5jCisJOnZlcnRpY2FsIGRpZmZwYXRjaCBtYWluLmMuZGlmZgorCitXQVJOSU5HOiBUaGUgcGF0Y2ggZmlsZSBtdXN0IGNvbnRhaW4gb25seSBvbmUgcGF0Y2gsIGZvciB0aGUgZmlsZSB5b3UgYXJlCitlZGl0aW5nLiAgT3RoZXJ3aXNlIHlvdSB3aWxsIGdldCBhIGxvdCBvZiBlcnJvciBtZXNzYWdlcywgYW5kIHNvbWUgZmlsZXMgbWlnaHQKK2JlIHBhdGNoZWQgdW5leHBlY3RlZGx5LgorICAgVGhlIHBhdGNoaW5nIHdpbGwgb25seSBiZSBkb25lIHRvIHRoZSBjb3B5IG9mIHRoZSBmaWxlIGluIFZpbS4gIFRoZSBmaWxlIG9uCit5b3VyIGhhcmRkaXNrIHdpbGwgcmVtYWluIHVubW9kaWZpZWQgKHVudGlsIHlvdSBkZWNpZGUgdG8gd3JpdGUgdGhlIGZpbGUpLgorCisKK1NDUk9MTCBCSU5ESU5HCisKK1doZW4gdGhlIGZpbGVzIGhhdmUgbW9yZSBjaGFuZ2VzLCB5b3UgY2FuIHNjcm9sbCBpbiB0aGUgdXN1YWwgd2F5LiAgVmltIHdpbGwKK3RyeSB0byBrZWVwIGJvdGggdGhlIHdpbmRvd3Mgc3RhcnQgYXQgdGhlIHNhbWUgcG9zaXRpb24sIHNvIHlvdSBjYW4gZWFzaWx5IHNlZQordGhlIGRpZmZlcmVuY2VzIHNpZGUgYnkgc2lkZS4KKyAgIFdoZW4geW91IGRvbid0IHdhbnQgdGhpcyBmb3IgYSBtb21lbnQsIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpzZXQgbm9zY3JvbGxiaW5kCisKKworSlVNUElORyBUTyBDSEFOR0VTCisKK1doZW4geW91IGhhdmUgZGlzYWJsZWQgZm9sZGluZyBpbiBzb21lIHdheSwgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byBmaW5kIHRoZQorY2hhbmdlcy4gIFVzZSB0aGlzIGNvbW1hbmQgdG8ganVtcCBmb3J3YXJkIHRvIHRoZSBuZXh0IGNoYW5nZTogPgorCisJXWMKKworVG8gZ28gdGhlIG90aGVyIHdheSB1c2U6ID4KKworCVtjCisKK1ByZXBlbmRlZCBhIGNvdW50IHRvIGp1bXAgZnVydGhlciBhd2F5LgorCisKK1JFTU9WSU5HIENIQU5HRVMKKworWW91IGNhbiBtb3ZlIHRleHQgZnJvbSBvbmUgd2luZG93IHRvIHRoZSBvdGhlci4gIFRoaXMgZWl0aGVyIHJlbW92ZXMKK2RpZmZlcmVuY2VzIG9yIGFkZHMgbmV3IG9uZXMuICBWaW0gZG9lc24ndCBrZWVwIHRoZSBoaWdobGlnaHRpbmcgdXBkYXRlZCBpbgorYWxsIHNpdHVhdGlvbnMuICBUbyB1cGRhdGUgaXQgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOmRpZmZ1cGRhdGUKKworVG8gcmVtb3ZlIGEgZGlmZmVyZW5jZSwgeW91IGNhbiBtb3ZlIHRoZSB0ZXh0IGluIGEgaGlnaGxpZ2h0ZWQgYmxvY2sgZnJvbSBvbmUKK3dpbmRvdyB0byBhbm90aGVyLiAgVGFrZSB0aGUgIm1haW4uYyIgYW5kICJtYWluLmN+IiBleGFtcGxlIGFib3ZlLiAgTW92ZSB0aGUKK2N1cnNvciB0byB0aGUgbGVmdCB3aW5kb3csIG9uIHRoZSBsaW5lIHRoYXQgd2FzIGRlbGV0ZWQgaW4gdGhlIG90aGVyIHdpbmRvdy4KK05vdyB0eXBlIHRoaXMgY29tbWFuZDogPgorCisJZHAKKworVGhlIGNoYW5nZSB3aWxsIGJlIHJlbW92ZWQgYnkgcHV0dGluZyB0aGUgdGV4dCBvZiB0aGUgY3VycmVudCB3aW5kb3cgaW4gdGhlCitvdGhlciB3aW5kb3cuICAiZHAiIHN0YW5kcyBmb3IgImRpZmYgcHV0Ii4KKyAgIFlvdSBjYW4gYWxzbyBkbyBpdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmlnaHQKK3dpbmRvdywgdG8gdGhlIGxpbmUgd2hlcmUgImNoYW5nZWQiIHdhcyBpbnNlcnRlZC4gIE5vdyB0eXBlIHRoaXMgY29tbWFuZDogPgorCisJZG8KKworVGhlIGNoYW5nZSB3aWxsIG5vdyBiZSByZW1vdmVkIGJ5IGdldHRpbmcgdGhlIHRleHQgZnJvbSB0aGUgb3RoZXIgd2luZG93LgorU2luY2UgdGhlcmUgYXJlIG5vIGNoYW5nZXMgbGVmdCBub3csIFZpbSBwdXRzIGFsbCB0ZXh0IGluIGEgY2xvc2VkIGZvbGQuCisiZG8iIHN0YW5kcyBmb3IgImRpZmYgb2J0YWluIi4gICJkZyIgd291bGQgaGF2ZSBiZWVuIGJldHRlciwgYnV0IHRoYXQgYWxyZWFkeQoraGFzIGEgZGlmZmVyZW50IG1lYW5pbmcgKCJkZ2ciIGRlbGV0ZXMgZnJvbSB0aGUgY3Vyc29yIHVudGlsIHRoZSBmaXJzdCBsaW5lKS4KKworRm9yIGRldGFpbHMgYWJvdXQgZGlmZiBtb2RlLCBzZWUgfHZpbWRpZmZ8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowOC44KglWYXJpb3VzCisKK1RoZSAnbGFzdHN0YXR1cycgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hlbiB0aGUgbGFzdCB3aW5kb3cgaGFzIGEKK3N0YXR1c2xpbmU6CisKKwkwCW5ldmVyCisJMQlvbmx5IHdoZW4gdGhlcmUgYXJlIHNwbGl0IHdpbmRvd3MgKHRoZSBkZWZhdWx0KQorCTIJYWx3YXlzCisKK01hbnkgY29tbWFuZHMgdGhhdCBlZGl0IGFub3RoZXIgZmlsZSBoYXZlIGEgdmFyaWFudCB0aGF0IHNwbGl0cyB0aGUgd2luZG93LgorRm9yIENvbW1hbmQtbGluZSBjb21tYW5kcyB0aGlzIGlzIGRvbmUgYnkgcHJlcGVuZGluZyBhbiAicyIuICBGb3IgZXhhbXBsZToKKyI6dGFnIiBqdW1wcyB0byBhIHRhZywgIjpzdGFnIiBzcGxpdHMgdGhlIHdpbmRvdyBhbmQganVtcHMgdG8gYQordGFnLgorICAgRm9yIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGEgQ1RSTC1XIGlzIHByZXBlbmRlZC4gIENUUkwtXiBqdW1wcyB0byB0aGUKK2FsdGVybmF0ZSBmaWxlLCBDVFJMLVcgQ1RSTC1eIHNwbGl0cyB0aGUgd2luZG93IGFuZCBlZGl0cyB0aGUgYWx0ZXJuYXRlIGZpbGUuCisKK1RoZSAnc3BsaXRiZWxvdycgb3B0aW9uIGNhbiBiZSBzZXQgdG8gbWFrZSBhIG5ldyB3aW5kb3cgYXBwZWFyIGJlbG93IHRoZQorY3VycmVudCB3aW5kb3cuICBUaGUgJ3NwbGl0cmlnaHQnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIG1ha2UgYSB2ZXJ0aWNhbGx5IHNwbGl0Cit3aW5kb3cgYXBwZWFyIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHdpbmRvdy4KKworV2hlbiBzcGxpdHRpbmcgYSB3aW5kb3cgeW91IGNhbiBwcmVwZW5kIGEgbW9kaWZpZXIgY29tbWFuZCB0byB0ZWxsIHdoZXJlIHRoZQord2luZG93IGlzIHRvIGFwcGVhcjoKKworCTpsZWZ0YWJvdmUge2NtZH0JbGVmdCBvciBhYm92ZSB0aGUgY3VycmVudCB3aW5kb3cKKwk6YWJvdmVsZWZ0IHtjbWR9CWlkZW0KKwk6cmlnaHRiZWxvdyB7Y21kfQlyaWdodCBvciBiZWxvdyB0aGUgY3VycmVudCB3aW5kb3cKKwk6YmVsb3dyaWdodCB7Y21kfQlpZGVtCisJOnRvcGxlZnQge2NtZH0JCWF0IHRoZSB0b3Agb3IgbGVmdCBvZiB0aGUgVmltIHdpbmRvdworCTpib3RyaWdodCB7Y21kfQkJYXQgdGhlIGJvdHRvbSBvciByaWdodCBvZiB0aGUgVmltIHdpbmRvdworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzA5LnR4dHwgIFVzaW5nIHRoZSBHVUkKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMDkudHh0IGIvcnVudGltZS9kb2MvdXNyXzA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk3YjE4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzA5LnR4dApAQCAtMCwwICsxLDI4OSBAQAorKnVzcl8wOS50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAxIFNlcCAwMworCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJCVVzaW5nIHRoZSBHVUkKKworCitWaW0gd29ya3MgaW4gYW4gb3JkaW5hcnkgdGVybWluYWwuICBHVmltIGNhbiBkbyB0aGUgc2FtZSB0aGluZ3MgYW5kIGEgZmV3Cittb3JlLiAgVGhlIEdVSSBvZmZlcnMgbWVudXMsIGEgdG9vbGJhciwgc2Nyb2xsYmFycyBhbmQgb3RoZXIgaXRlbXMuICBUaGlzCitjaGFwdGVyIGlzIGFib3V0IHRoZXNlIGV4dHJhIHRoaW5ncyB0aGF0IHRoZSBHVUkgb2ZmZXJzLgorCit8MDkuMXwJUGFydHMgb2YgdGhlIEdVSQorfDA5LjJ8CVVzaW5nIHRoZSBtb3VzZQorfDA5LjN8CVRoZSBjbGlwYm9hcmQKK3wwOS40fAlTZWxlY3QgbW9kZQorCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8xMC50eHR8ICBNYWtpbmcgYmlnIGNoYW5nZXMKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzA4LnR4dHwgIFNwbGl0dGluZyB3aW5kb3dzCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowOS4xKglQYXJ0cyBvZiB0aGUgR1VJCisKK1lvdSBtaWdodCBoYXZlIGFuIGljb24gb24geW91ciBkZXNrdG9wIHRoYXQgc3RhcnRzIGdWaW0uICBPdGhlcndpc2UsIG9uZSBvZgordGhlc2UgY29tbWFuZHMgc2hvdWxkIGRvIGl0OiA+CisKKwlndmltIGZpbGUudHh0CisJdmltIC1nIGZpbGUudHh0CisKK0lmIHRoaXMgZG9lc24ndCB3b3JrIHlvdSBkb24ndCBoYXZlIGEgdmVyc2lvbiBvZiBWaW0gd2l0aCBHVUkgc3VwcG9ydC4gIFlvdQord2lsbCBoYXZlIHRvIGluc3RhbGwgb25lIGZpcnN0LgorICAgVmltIHdpbGwgb3BlbiBhIHdpbmRvdyBhbmQgZGlzcGxheSAiZmlsZS50eHQiIGluIGl0LiAgV2hhdCB0aGUgd2luZG93IGxvb2tzCitsaWtlIGRlcGVuZHMgb24gdGhlIHZlcnNpb24gb2YgVmltLiAgSXQgc2hvdWxkIHJlc2VtYmxlIHRoZSBmb2xsb3dpbmcgcGljdHVyZQorKGZvciBhcyBmYXIgYXMgdGhpcyBjYW4gYmUgc2hvd24gaW4gQVNDSUkhKS4KKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgZmlsZS50eHQgKyAofi9kaXIpIC0gVklNCQkJICAgWCB8CTwtIHdpbmRvdyB0aXRsZQorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgRmlsZQlFZGl0ICBUb29scyAgU3ludGF4ICBCdWZmZXJzICBXaW5kb3cgIEhlbHAgICB8CTwtIG1lbnViYXIKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8IGFhYSAgYmJiICBjY2MgIGRkZCAgZWVlICBmZmYJZ2dnICBoaGggIGlpaSAgampqICAgfAk8LSB0b29sYmFyCisJfCBhYWEgIGJiYiAgY2NjICBkZGQgIGVlZSAgZmZmCWdnZyAgaGhoICBpaWkgIGpqaiAgIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8IGZpbGUgdGV4dAkJCQkJIHwgXiB8CisJfCB+CQkJCQkJIHwgIyB8CisJfCB+CQkJCQkJIHwgIyB8CTwtIHNjcm9sbGJhcgorCXwgfgkJCQkJCSB8ICMgfAorCXwgfgkJCQkJCSB8ICMgfAorCXwgfgkJCQkJCSB8ICMgfAorCXwJCQkJCQkgfCBWIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIGxhcmdlc3Qgc3BhY2UgaXMgb2NjdXBpZWQgYnkgdGhlIGZpbGUgdGV4dC4gIFRoaXMgc2hvd3MgdGhlIGZpbGUgaW4gdGhlCitzYW1lIHdheSBhcyBpbiBhIHRlcm1pbmFsLiAgV2l0aCBzb21lIGRpZmZlcmVudCBjb2xvcnMgYW5kIGFub3RoZXIgZm9udAorcGVyaGFwcy4KKworCitUSEUgV0lORE9XIFRJVExFCisKK0F0IHRoZSB2ZXJ5IHRvcCBpcyB0aGUgd2luZG93IHRpdGxlLiAgVGhpcyBpcyBkcmF3biBieSB5b3VyIHdpbmRvdyBzeXN0ZW0uCitWaW0gd2lsbCBzZXQgdGhlIHRpdGxlIHRvIHNob3cgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4gIEZpcnN0IGNvbWVzIHRoZQorbmFtZSBvZiB0aGUgZmlsZS4gIFRoZW4gc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUKK2luIHBhcmVucy4gIFRoZXNlIHNwZWNpYWwgY2hhcmFjdGVyIGNhbiBiZSBwcmVzZW50OgorCisJLQlUaGUgZmlsZSBjYW5ub3QgYmUgbW9kaWZpZWQgKGUuZy4sIGEgaGVscCBmaWxlKQorCSsJVGhlIGZpbGUgY29udGFpbnMgY2hhbmdlcworCT0JVGhlIGZpbGUgaXMgcmVhZC1vbmx5CisJPSsJVGhlIGZpbGUgaXMgcmVhZC1vbmx5LCBjb250YWlucyBjaGFuZ2VzIGFueXdheQorCitJZiBub3RoaW5nIGlzIHNob3duIHlvdSBoYXZlIGFuIG9yZGluYXJ5LCB1bmNoYW5nZWQgZmlsZS4KKworCitUSEUgTUVOVUJBUgorCitZb3Uga25vdyBob3cgbWVudXMgd29yaywgcmlnaHQ/ICBWaW0gaGFzIHRoZSB1c3VhbCBpdGVtcywgcGx1cyBhIGZldyBtb3JlLgorQnJvd3NlIHRoZW0gdG8gZ2V0IGFuIGlkZWEgb2Ygd2hhdCB5b3UgY2FuIHVzZSB0aGVtIGZvci4gIEEgcmVsZXZhbnQgc3VibWVudQoraXMgRWRpdC9HbG9iYWwgU2V0dGluZ3MuICBZb3Ugd2lsbCBmaW5kIHRoZXNlIGVudHJpZXM6CisKKwlUb2dnbGUgVG9vbGJhcgkJbWFrZSB0aGUgdG9vbGJhciBhcHBlYXIvZGlzYXBwZWFyCisJVG9nZ2xlIEJvdHRvbSBTY3JvbGxiYXIJbWFrZSBhIHNjcm9sbGJhciBhcHBlYXIvZGlzYXBwZWFyIGF0IHRoZSBib3R0b20KKwlUb2dnbGUgTGVmdCBTY3JvbGxiYXIJbWFrZSBhIHNjcm9sbGJhciBhcHBlYXIvZGlzYXBwZWFyIGF0IHRoZSBsZWZ0CisJVG9nZ2xlIFJpZ2h0IFNjcm9sbGJhcgltYWtlIGEgc2Nyb2xsYmFyIGFwcGVhci9kaXNhcHBlYXIgYXQgdGhlIHJpZ2h0CisKK09uIG1vc3Qgc3lzdGVtcyB5b3UgY2FuIHRlYXItb2ZmIHRoZSBtZW51cy4gIFNlbGVjdCB0aGUgdG9wIGl0ZW0gb2YgdGhlIG1lbnUsCit0aGUgb25lIHRoYXQgbG9va3MgbGlrZSBhIGRhc2hlZCBsaW5lLiAgWW91IHdpbGwgZ2V0IGEgc2VwYXJhdGUgd2luZG93IHdpdGgKK3RoZSBpdGVtcyBvZiB0aGUgbWVudS4gIEl0IHdpbGwgaGFuZyBhcm91bmQgdW50aWwgeW91IGNsb3NlIHRoZSB3aW5kb3cuCisKKworVEhFIFRPT0xCQVIKKworVGhpcyBjb250YWlucyBpY29ucyBmb3IgdGhlIG1vc3Qgb2Z0ZW4gdXNlZCBhY3Rpb25zLiAgSG9wZWZ1bGx5IHRoZSBpY29ucyBhcmUKK3NlbGYtZXhwbGFuYXRvcnkuICBUaGVyZSBhcmUgdG9vbHRpcHMgdG8gZ2V0IGFuIGV4dHJhIGhpbnQgKG1vdmUgdGhlIG1vdXNlCitwb2ludGVyIHRvIHRoZSBpY29uIHdpdGhvdXQgY2xpY2tpbmcgYW5kIGRvbid0IG1vdmUgaXQgZm9yIGEgc2Vjb25kKS4KKworVGhlICJFZGl0L0dsb2JhbCBTZXR0aW5ncy9Ub2dnbGUgVG9vbGJhciIgbWVudSBpdGVtIGNhbiBiZSB1c2VkIHRvIG1ha2UgdGhlCit0b29sYmFyIGRpc2FwcGVhci4gIElmIHlvdSBuZXZlciB3YW50IGEgdG9vbGJhciwgdXNlIHRoaXMgY29tbWFuZCBpbiB5b3VyCit2aW1yYyBmaWxlOiA+CisKKwk6c2V0IGd1aW9wdGlvbnMtPVQKKworVGhpcyByZW1vdmVzIHRoZSAnVCcgZmxhZyBmcm9tIHRoZSAnZ3Vpb3B0aW9ucycgb3B0aW9uLiAgT3RoZXIgcGFydHMgb2YgdGhlCitHVUkgY2FuIGFsc28gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCB3aXRoIHRoaXMgb3B0aW9uLiAgU2VlIHRoZSBoZWxwIGZvciBpdC4KKworCitUSEUgU0NST0xMQkFSUworCitCeSBkZWZhdWx0IHRoZXJlIGlzIG9uZSBzY3JvbGxiYXIgb24gdGhlIHJpZ2h0LiAgSXQgZG9lcyB0aGUgb2J2aW91cyB0aGluZy4KK1doZW4geW91IHNwbGl0IHRoZSB3aW5kb3csIGVhY2ggd2luZG93IHdpbGwgZ2V0IGl0cyBvd24gc2Nyb2xsYmFyLgorICAgWW91IGNhbiBtYWtlIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgYXBwZWFyIHdpdGggdGhlIG1lbnUgaXRlbQorRWRpdC9HbG9iYWwgU2V0dGluZ3MvVG9nZ2xlIEJvdHRvbSBTY3JvbGxiYXIuICBUaGlzIGlzIHVzZWZ1bCBpbiBkaWZmIG1vZGUsIG9yCit3aGVuIHRoZSAnd3JhcCcgb3B0aW9uIGhhcyBiZWVuIHJlc2V0IChtb3JlIGFib3V0IHRoYXQgbGF0ZXIpLgorCitXaGVuIHRoZXJlIGFyZSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MsIG9ubHkgdGhlIHdpbmRvd3Mgb24gdGhlIHJpZ2h0IHNpZGUKK3dpbGwgaGF2ZSBhIHNjcm9sbGJhci4gIEhvd2V2ZXIsIHdoZW4geW91IG1vdmUgdGhlIGN1cnNvciB0byBhIHdpbmRvdyBvbiB0aGUKK2xlZnQsIGl0IHdpbGwgYmUgdGhpcyBvbmUgdGhlIHRoYXQgc2Nyb2xsYmFyIGNvbnRyb2xzLiAgVGhpcyB0YWtlcyBhIGJpdCBvZgordGltZSB0byBnZXQgdXNlZCB0by4KKyAgIFdoZW4geW91IHdvcmsgd2l0aCB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MsIGNvbnNpZGVyIGFkZGluZyBhIHNjcm9sbGJhciBvbgordGhlIGxlZnQuICBUaGlzIGNhbiBiZSBkb25lIHdpdGggYSBtZW51IGl0ZW0sIG9yIHdpdGggdGhlICdndWlvcHRpb25zJyBvcHRpb246Cis+CisJOnNldCBndWlvcHRpb25zKz1sCisKK1RoaXMgYWRkcyB0aGUgJ2wnIGZsYWcgdG8gJ2d1aW9wdGlvbnMnLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowOS4yKglVc2luZyB0aGUgbW91c2UKKworU3RhbmRhcmRzIGFyZSB3b25kZXJmdWwuICBJbiBNaWNyb3NvZnQgV2luZG93cywgeW91IGNhbiB1c2UgdGhlIG1vdXNlIHRvCitzZWxlY3QgdGV4dCBpbiBhIHN0YW5kYXJkIG1hbm5lci4gIFRoZSBYIFdpbmRvdyBzeXN0ZW0gYWxzbyBoYXMgYSBzdGFuZGFyZAorc3lzdGVtIGZvciB1c2luZyB0aGUgbW91c2UuICBVbmZvcnR1bmF0ZWx5LCB0aGVzZSB0d28gc3RhbmRhcmRzIGFyZSBub3QgdGhlCitzYW1lLgorICAgRm9ydHVuYXRlbHksIHlvdSBjYW4gY3VzdG9taXplIFZpbS4gIFlvdSBjYW4gbWFrZSB0aGUgYmVoYXZpb3Igb2YgdGhlIG1vdXNlCit3b3JrIGxpa2UgYW4gWCBXaW5kb3cgc3lzdGVtIG1vdXNlIG9yIGEgTWljcm9zb2Z0IFdpbmRvd3MgbW91c2UuIFRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgbWFrZXMgdGhlIG1vdXNlIGJlaGF2ZSBsaWtlIGFuIFggV2luZG93IG1vdXNlOiA+CisKKwk6YmVoYXZlIHh0ZXJtCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZCBtYWtlcyB0aGUgbW91c2Ugd29yayBsaWtlIGEgTWljcm9zb2Z0IFdpbmRvd3MgbW91c2U6ID4KKworCTpiZWhhdmUgbXN3aW4KKworVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIG1vdXNlIG9uIFVOSVggc3lzdGVtcyBpcyB4dGVybS4gIFRoZSBkZWZhdWx0CitiZWhhdmlvciBvbiBhIE1pY3Jvc29mdCBXaW5kb3dzIHN5c3RlbSBpcyBzZWxlY3RlZCBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbgorcHJvY2Vzcy4gIEZvciBkZXRhaWxzIGFib3V0IHdoYXQgdGhlIHR3byBiZWhhdmlvcnMgYXJlLCBzZWUgfDpiZWhhdmV8LiAgSGVyZQorZm9sbG93cyBhIHN1bW1hcnkuCisKKworWFRFUk0gTU9VU0UgQkVIQVZJT1IKKworTGVmdCBtb3VzZSBjbGljawkJcG9zaXRpb24gdGhlIGN1cnNvcgorTGVmdCBtb3VzZSBkcmFnCQkJc2VsZWN0IHRleHQgaW4gVmlzdWFsIG1vZGUKK01pZGRsZSBtb3VzZSBjbGljawkJcGFzdGUgdGV4dCBmcm9tIHRoZSBjbGlwYm9hcmQKK1JpZ2h0IG1vdXNlIGNsaWNrCQlleHRlbmQgdGhlIHNlbGVjdGVkIHRleHQgdW50aWwgdGhlIG1vdXNlCisJCQkJcG9pbnRlcgorCisKK01TV0lOIE1PVVNFIEJFSEFWSU9SCisKK0xlZnQgbW91c2UgY2xpY2sJCXBvc2l0aW9uIHRoZSBjdXJzb3IKK0xlZnQgbW91c2UgZHJhZwkJCXNlbGVjdCB0ZXh0IGluIFNlbGVjdCBtb2RlIChzZWUgfDA5LjR8KQorTGVmdCBtb3VzZSBjbGljaywgd2l0aCBTaGlmdAlleHRlbmQgdGhlIHNlbGVjdGVkIHRleHQgdW50aWwgdGhlIG1vdXNlCisJCQkJcG9pbnRlcgorTWlkZGxlIG1vdXNlIGNsaWNrCQlwYXN0ZSB0ZXh0IGZyb20gdGhlIGNsaXBib2FyZAorUmlnaHQgbW91c2UgY2xpY2sJCWRpc3BsYXkgYSBwb3AtdXAgbWVudQorCisKK1RoZSBtb3VzZSBjYW4gYmUgZnVydGhlciB0dW5lZC4gIENoZWNrIG91dCB0aGVzZSBvcHRpb25zIGlmIHlvdSB3YW50IHRvIGNoYW5nZQordGhlIHdheSBob3cgdGhlIG1vdXNlIHdvcmtzOgorCisJJ21vdXNlJwkJCWluIHdoaWNoIG1vZGUgdGhlIG1vdXNlIGlzIHVzZWQgYnkgVmltCisJJ21vdXNlbW9kZWwnCQl3aGF0IGVmZmVjdCBhIG1vdXNlIGNsaWNrIGhhcworCSdtb3VzZXRpbWUnCQl0aW1lIGJldHdlZW4gY2xpY2tzIGZvciBhIGRvdWJsZS1jbGljaworCSdtb3VzZWhpZGUnCQloaWRlIHRoZSBtb3VzZSB3aGlsZSB0eXBpbmcKKwknc2VsZWN0bW9kZScJCXdoZXRoZXIgdGhlIG1vdXNlIHN0YXJ0cyBWaXN1YWwgb3IgU2VsZWN0IG1vZGUKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDkuMyoJVGhlIGNsaXBib2FyZAorCitJbiBzZWN0aW9uIHwwNC43fCB0aGUgYmFzaWMgdXNlIG9mIHRoZSBjbGlwYm9hcmQgd2FzIGV4cGxhaW5lZC4gIFRoZXJlIGlzIG9uZQorZXNzZW50aWFsIHRoaW5nIHRvIGV4cGxhaW4gYWJvdXQgWC13aW5kb3dzOiBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHBsYWNlcyB0bworZXhjaGFuZ2UgdGV4dCBiZXR3ZWVuIHByb2dyYW1zLiAgTVMtV2luZG93cyBkb2Vzbid0IGhhdmUgdGhpcy4KKworSW4gWC1XaW5kb3dzIHRoZXJlIGlzIHRoZSAiY3VycmVudCBzZWxlY3Rpb24iLiAgVGhpcyBpcyB0aGUgdGV4dCB0aGF0IGlzCitjdXJyZW50bHkgaGlnaGxpZ2h0ZWQuICBJbiBWaW0gdGhpcyBpcyB0aGUgVmlzdWFsIGFyZWEgKHRoaXMgYXNzdW1lcyB5b3UgYXJlCit1c2luZyB0aGUgZGVmYXVsdCBvcHRpb24gc2V0dGluZ3MpLiAgWW91IGNhbiBwYXN0ZSB0aGlzIHNlbGVjdGlvbiBpbiBhbm90aGVyCithcHBsaWNhdGlvbiB3aXRob3V0IGFueSBmdXJ0aGVyIGFjdGlvbi4KKyAgIEZvciBleGFtcGxlLCBpbiB0aGlzIHRleHQgc2VsZWN0IGEgZmV3IHdvcmRzIHdpdGggdGhlIG1vdXNlLiAgVmltIHdpbGwKK3N3aXRjaCB0byBWaXN1YWwgbW9kZSBhbmQgaGlnaGxpZ2h0IHRoZSB0ZXh0LiAgTm93IHN0YXJ0IGFub3RoZXIgZ1ZpbSwgd2l0aG91dAorYSBmaWxlIG5hbWUgYXJndW1lbnQsIHNvIHRoYXQgaXQgZGlzcGxheXMgYW4gZW1wdHkgd2luZG93LiAgQ2xpY2sgdGhlIG1pZGRsZQorbW91c2UgYnV0dG9uLiAgVGhlIHNlbGVjdGVkIHRleHQgd2lsbCBiZSBpbnNlcnRlZC4KKworVGhlICJjdXJyZW50IHNlbGVjdGlvbiIgd2lsbCBvbmx5IHJlbWFpbiB2YWxpZCB1bnRpbCBzb21lIG90aGVyIHRleHQgaXMKK3NlbGVjdGVkLiAgQWZ0ZXIgZG9pbmcgdGhlIHBhc3RlIGluIHRoZSBvdGhlciBnVmltLCBub3cgc2VsZWN0IHNvbWUgY2hhcmFjdGVycworaW4gdGhhdCB3aW5kb3cuICBZb3Ugd2lsbCBub3RpY2UgdGhhdCB0aGUgd29yZHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc2VsZWN0ZWQKK2luIHRoZSBvdGhlciBnVmltIHdpbmRvdyBhcmUgZGlzcGxheWVkIGRpZmZlcmVudGx5LiAgVGhpcyBtZWFucyB0aGF0IGl0IG5vCitsb25nZXIgaXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgorCitZb3UgZG9uJ3QgbmVlZCB0byBzZWxlY3QgdGV4dCB3aXRoIHRoZSBtb3VzZSwgdXNpbmcgdGhlIGtleWJvYXJkIGNvbW1hbmRzIGZvcgorVmlzdWFsIG1vZGUgd29ya3MganVzdCBhcyB3ZWxsLgorCisKK1RIRSBSRUFMIENMSVBCT0FSRAorCitOb3cgZm9yIHRoZSBvdGhlciBwbGFjZSB3aXRoIHdoaWNoIHRleHQgY2FuIGJlIGV4Y2hhbmdlZC4gIFdlIGNhbGwgdGhpcyB0aGUKKyJyZWFsIGNsaXBib2FyZCIsIHRvIGF2b2lkIGNvbmZ1c2lvbi4gIE9mdGVuIGJvdGggdGhlICJjdXJyZW50IHNlbGVjdGlvbiIgYW5kCit0aGUgInJlYWwgY2xpcGJvYXJkIiBhcmUgY2FsbGVkIGNsaXBib2FyZCwgeW91J2xsIGhhdmUgdG8gZ2V0IHVzZWQgdG8gdGhhdC4KKyAgIFRvIHB1dCB0ZXh0IG9uIHRoZSByZWFsIGNsaXBib2FyZCwgc2VsZWN0IGEgZmV3IGRpZmZlcmVudCB3b3JkcyBpbiBvbmUgb2YKK3RoZSBnVmltcyB5b3UgaGF2ZSBydW5uaW5nLiAgVGhlbiB1c2UgdGhlIEVkaXQvQ29weSBtZW51IGVudHJ5LiAgTm93IHRoZSB0ZXh0CitoYXMgYmVlbiBjb3BpZWQgdG8gdGhlIHJlYWwgY2xpcGJvYXJkLiAgWW91IGNhbid0IHNlZSB0aGlzLCB1bmxlc3MgeW91IGhhdmUKK3NvbWUgYXBwbGljYXRpb24gdGhhdCBzaG93cyB0aGUgY2xpcGJvYXJkIGNvbnRlbnRzIChlLmcuLCBLREUncyBrbGlwcGVyKS4KKyAgIE5vdyBzZWxlY3QgdGhlIG90aGVyIGdWaW0sIHBvc2l0aW9uIHRoZSBjdXJzb3Igc29tZXdoZXJlIGFuZCB1c2UgdGhlCitFZGl0L1Bhc3RlIG1lbnUuICBZb3Ugd2lsbCBzZWUgdGhlIHRleHQgZnJvbSB0aGUgcmVhbCBjbGlwYm9hcmQgaXMgaW5zZXJ0ZWQuCisKKworVVNJTkcgQk9USAorCitUaGlzIHVzZSBvZiBib3RoIHRoZSAiY3VycmVudCBzZWxlY3Rpb24iIGFuZCB0aGUgInJlYWwgY2xpcGJvYXJkIiBtaWdodCBzb3VuZAorYSBiaXQgY29uZnVzaW5nLiAgQnV0IGl0IGlzIHZlcnkgdXNlZnVsLiAgTGV0J3Mgc2hvdyB0aGlzIHdpdGggYW4gZXhhbXBsZS4KK1VzZSBvbmUgZ1ZpbSB3aXRoIGEgdGV4dCBmaWxlIGFuZCBwZXJmb3JtIHRoZXNlIGFjdGlvbnM6CisKKy0gIFNlbGVjdCB0d28gd29yZHMgaW4gVmlzdWFsIG1vZGUuCistICBVc2UgdGhlIEVkaXQvQ29weSBtZW51IHRvIGdldCB0aGVzZSB3b3JkcyBvbnRvIHRoZSBjbGlwYm9hcmQuCistICBTZWxlY3Qgb25lIG90aGVyIHdvcmQgaW4gVmlzdWFsIG1vZGUuCistICBVc2UgdGhlIEVkaXQvUGFzdGUgbWVudSBpdGVtLiAgV2hhdCB3aWxsIGhhcHBlbiBpcyB0aGF0IHRoZSBzaW5nbGUgc2VsZWN0ZWQKKyAgIHdvcmQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdHdvIHdvcmRzIGZyb20gdGhlIGNsaXBib2FyZC4KKy0gIE1vdmUgdGhlIG1vdXNlIHBvaW50ZXIgc29tZXdoZXJlIGVsc2UgYW5kIGNsaWNrIHRoZSBtaWRkbGUgYnV0dG9uLiAgWW91CisgICB3aWxsIHNlZSB0aGF0IHRoZSB3b3JkIHlvdSBqdXN0IG92ZXJ3cm90ZSB3aXRoIHRoZSBjbGlwYm9hcmQgaXMgaW5zZXJ0ZWQKKyAgIGhlcmUuCisKK0lmIHlvdSB1c2UgdGhlICJjdXJyZW50IHNlbGVjdGlvbiIgYW5kIHRoZSAicmVhbCBjbGlwYm9hcmQiIHdpdGggY2FyZSwgeW91IGNhbgorZG8gYSBsb3Qgb2YgdXNlZnVsIGVkaXRpbmcgd2l0aCB0aGVtLgorCisKK1VTSU5HIFRIRSBLRVlCT0FSRAorCitJZiB5b3UgZG9uJ3QgbGlrZSB1c2luZyB0aGUgbW91c2UsIHlvdSBjYW4gYWNjZXNzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQKK3RoZSByZWFsIGNsaXBib2FyZCB3aXRoIHR3byByZWdpc3RlcnMuICBUaGUgIiogcmVnaXN0ZXIgaXMgZm9yIHRoZSBjdXJyZW50CitzZWxlY3Rpb24uCisgICBUbyBtYWtlIHRleHQgYmVjb21lIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgdXNlIFZpc3VhbCBtb2RlLiAgRm9yIGV4YW1wbGUsCit0byBzZWxlY3QgYSB3aG9sZSBsaW5lIGp1c3QgcHJlc3MgIlYiLgorICAgVG8gaW5zZXJ0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBiZWZvcmUgdGhlIGN1cnNvcjogPgorCisJIipQCisKK05vdGljZSB0aGUgdXBwZXJjYXNlICJQIi4gIFRoZSBsb3dlcmNhc2UgInAiIHB1dHMgdGhlIHRleHQgYWZ0ZXIgdGhlIGN1cnNvci4KKworVGhlICIrIHJlZ2lzdGVyIGlzIHVzZWQgZm9yIHRoZSByZWFsIGNsaXBib2FyZC4gIEZvciBleGFtcGxlLCB0byBjb3B5IHRoZSB0ZXh0Citmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24gdW50aWwgdGhlIGVuZCBvZiB0aGUgbGluZSB0byB0aGUgY2xpcGJvYXJkOiA+CisKKwkiK3kkCisKK1JlbWVtYmVyLCAieSIgaXMgeWFuaywgd2hpY2ggaXMgVmltJ3MgY29weSBjb21tYW5kLgorICAgVG8gaW5zZXJ0IHRoZSBjb250ZW50cyBvZiB0aGUgcmVhbCBjbGlwYm9hcmQgYmVmb3JlIHRoZSBjdXJzb3I6ID4KKworCSIrUAorCitJdCdzIHRoZSBzYW1lIGFzIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24sIGJ1dCB1c2VzIHRoZSBwbHVzICgrKSByZWdpc3RlcgoraW5zdGVhZCBvZiB0aGUgc3RhciAoKikgcmVnaXN0ZXIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA5LjQqCVNlbGVjdCBtb2RlCisKK0FuZCBub3cgc29tZXRoaW5nIHRoYXQgaXMgdXNlZCBtb3JlIG9mdGVuIG9uIE1TLVdpbmRvd3MgdGhhbiBvbiBYLVdpbmRvd3MuCitCdXQgYm90aCBjYW4gZG8gaXQuICBZb3UgYWxyZWFkeSBrbm93IGFib3V0IFZpc3VhbCBtb2RlLiAgU2VsZWN0IG1vZGUgaXMgbGlrZQorVmlzdWFsIG1vZGUsIGJlY2F1c2UgaXQgaXMgYWxzbyB1c2VkIHRvIHNlbGVjdCB0ZXh0LiAgQnV0IHRoZXJlIGlzIGFuIG9idmlvdXMKK2RpZmZlcmVuY2U6IFdoZW4gdHlwaW5nIHRleHQsIHRoZSBzZWxlY3RlZCB0ZXh0IGlzIGRlbGV0ZWQgYW5kIHRoZSB0eXBlZCB0ZXh0CityZXBsYWNlcyBpdC4KKworVG8gc3RhcnQgd29ya2luZyB3aXRoIFNlbGVjdCBtb2RlLCB5b3UgbXVzdCBmaXJzdCBlbmFibGUgaXQgKGZvciBNUy1XaW5kb3dzCitpdCBpcyBwcm9iYWJseSBhbHJlYWR5IGVuYWJsZWQsIGJ1dCB5b3UgY2FuIGRvIHRoaXMgYW55d2F5KTogPgorCisJOnNldCBzZWxlY3Rtb2RlKz1tb3VzZQorCitOb3cgdXNlIHRoZSBtb3VzZSB0byBzZWxlY3Qgc29tZSB0ZXh0LiAgSXQgaXMgaGlnaGxpZ2h0ZWQgbGlrZSBpbiBWaXN1YWwgbW9kZS4KK05vdyBwcmVzcyBhIGxldHRlci4gIFRoZSBzZWxlY3RlZCB0ZXh0IGlzIGRlbGV0ZWQsIGFuZCB0aGUgc2luZ2xlIGxldHRlcgorcmVwbGFjZXMgaXQuICBZb3UgYXJlIGluIEluc2VydCBtb2RlIG5vdywgdGh1cyB5b3UgY2FuIGNvbnRpbnVlIHR5cGluZy4KKworU2luY2UgdHlwaW5nIG5vcm1hbCB0ZXh0IGNhdXNlcyB0aGUgc2VsZWN0ZWQgdGV4dCB0byBiZSBkZWxldGVkLCB5b3UgY2FuIG5vdAordXNlIHRoZSBub3JtYWwgbW92ZW1lbnQgY29tbWFuZHMgImhqa2wiLCAidyIsIGV0Yy4gIEluc3RlYWQsIHVzZSB0aGUgc2hpZnRlZAorZnVuY3Rpb24ga2V5cy4gIDxTLUxlZnQ+IChzaGlmdGVkIGN1cnNvciBsZWZ0IGtleSkgbW92ZXMgdGhlIGN1cnNvciBsZWZ0LiAgVGhlCitzZWxlY3RlZCB0ZXh0IGlzIGNoYW5nZWQgbGlrZSBpbiBWaXN1YWwgbW9kZS4gIFRoZSBvdGhlciBzaGlmdGVkIGN1cnNvciBrZXlzCitkbyB3aGF0IHlvdSBleHBlY3QuICA8Uy1FbmQ+IGFuZCA8Uy1Ib21lPiBhbHNvIHdvcmsuCisKK1lvdSBjYW4gdHVuZSB0aGUgd2F5IFNlbGVjdCBtb2RlIHdvcmtzIHdpdGggdGhlICdzZWxlY3Rtb2RlJyBvcHRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMTAudHh0fCAgTWFraW5nIGJpZyBjaGFuZ2VzCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzEwLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3ZDJmOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8xMC50eHQKQEAgLTAsMCArMSw4MjIgQEAKKyp1c3JfMTAudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXIgMTIKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgTWFraW5nIGJpZyBjaGFuZ2VzCisKKworSW4gY2hhcHRlciA0IHNldmVyYWwgd2F5cyB0byBtYWtlIHNtYWxsIGNoYW5nZXMgd2VyZSBleHBsYWluZWQuICBUaGlzIGNoYXB0ZXIKK2dvZXMgaW50byBtYWtpbmcgY2hhbmdlcyB0aGF0IGFyZSByZXBlYXRlZCBvciBjYW4gYWZmZWN0IGEgbGFyZ2UgYW1vdW50IG9mCit0ZXh0LiAgVGhlIFZpc3VhbCBtb2RlIGFsbG93cyBkb2luZyB2YXJpb3VzIHRoaW5ncyB3aXRoIGJsb2NrcyBvZiB0ZXh0LiAgVXNlCithbiBleHRlcm5hbCBwcm9ncmFtIHRvIGRvIHJlYWxseSBjb21wbGljYXRlZCB0aGluZ3MuCisKK3wxMC4xfAlSZWNvcmQgYW5kIHBsYXliYWNrIGNvbW1hbmRzCit8MTAuMnwJU3Vic3RpdHV0aW9uCit8MTAuM3wJQ29tbWFuZCByYW5nZXMKK3wxMC40fAlUaGUgZ2xvYmFsIGNvbW1hbmQKK3wxMC41fAlWaXN1YWwgYmxvY2sgbW9kZQorfDEwLjZ8CVJlYWRpbmcgYW5kIHdyaXRpbmcgcGFydCBvZiBhIGZpbGUKK3wxMC43fAlGb3JtYXR0aW5nIHRleHQKK3wxMC44fAlDaGFuZ2luZyBjYXNlCit8MTAuOXwJVXNpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbQorCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8xMS50eHR8ICBSZWNvdmVyaW5nIGZyb20gYSBjcmFzaAorIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMDkudHh0fCAgVXNpbmcgdGhlIEdVSQorVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTAuMSoJUmVjb3JkIGFuZCBwbGF5YmFjayBjb21tYW5kcworCitUaGUgIi4iIGNvbW1hbmQgcmVwZWF0cyB0aGUgcHJlY2VkaW5nIGNoYW5nZS4gIEJ1dCB3aGF0IGlmIHlvdSB3YW50IHRvIGRvCitzb21ldGhpbmcgbW9yZSBjb21wbGV4IHRoYW4gYSBzaW5nbGUgY2hhbmdlPyAgVGhhdCdzIHdoZXJlIGNvbW1hbmQgcmVjb3JkaW5nCitjb21lcyBpbi4gIFRoZXJlIGFyZSB0aHJlZSBzdGVwczoKKworMS4gVGhlICJxe3JlZ2lzdGVyfSIgY29tbWFuZCBzdGFydHMgcmVjb3JkaW5nIGtleXN0cm9rZXMgaW50byB0aGUgcmVnaXN0ZXIKKyAgIG5hbWVkIHtyZWdpc3Rlcn0uICBUaGUgcmVnaXN0ZXIgbmFtZSBtdXN0IGJlIGJldHdlZW4gYSBhbmQgei4KKzIuIFR5cGUgeW91ciBjb21tYW5kcy4KKzMuIFRvIGZpbmlzaCByZWNvcmRpbmcsIHByZXNzIHEgKHdpdGhvdXQgYW55IGV4dHJhIGNoYXJhY3RlcikuCisKK1lvdSBjYW4gbm93IGV4ZWN1dGUgdGhlIG1hY3JvIGJ5IHR5cGluZyB0aGUgY29tbWFuZCAiQHtyZWdpc3Rlcn0iLgorCitUYWtlIGEgbG9vayBhdCBob3cgdG8gdXNlIHRoZXNlIGNvbW1hbmRzIGluIHByYWN0aWNlLiAgWW91IGhhdmUgYSBsaXN0IG9mCitmaWxlbmFtZXMgdGhhdCBsb29rIGxpa2UgdGhpczoKKworCXN0ZGlvLmggfgorCWZjbnRsLmggfgorCXVuaXN0ZC5oIH4KKwlzdGRsaWIuaCB+CisKK0FuZCB3aGF0IHlvdSB3YW50IGlzIHRoZSBmb2xsb3dpbmc6CisKKwkjaW5jbHVkZSAic3RkaW8uaCIgfgorCSNpbmNsdWRlICJmY250bC5oIiB+CisJI2luY2x1ZGUgInVuaXN0ZC5oIiB+CisJI2luY2x1ZGUgInN0ZGxpYi5oIiB+CisKK1lvdSBzdGFydCBieSBtb3ZpbmcgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZmlyc3QgbGluZS4gIE5leHQgeW91CitleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKwlxYQkJCVN0YXJ0IHJlY29yZGluZyBhIG1hY3JvIGluIHJlZ2lzdGVyIGEuCisJXgkJCU1vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4KKwlpI2luY2x1ZGUgIjxFc2M+CUluc2VydCB0aGUgc3RyaW5nICNpbmNsdWRlICIgYXQgdGhlIGJlZ2lubmluZworCQkJCW9mIHRoZSBsaW5lLgorCSQJCQlNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisJYSI8RXNjPgkJCUFwcGVuZCB0aGUgY2hhcmFjdGVyIGRvdWJsZSBxdW90YXRpb24gbWFyayAoIikKKwkJCQl0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCWoJCQlHbyB0byB0aGUgbmV4dCBsaW5lLgorCXEJCQlTdG9wIHJlY29yZGluZyB0aGUgbWFjcm8uCisKK05vdyB0aGF0IHlvdSBoYXZlIGRvbmUgdGhlIHdvcmsgb25jZSwgeW91IGNhbiByZXBlYXQgdGhlIGNoYW5nZSBieSB0eXBpbmcgdGhlCitjb21tYW5kICJAYSIgdGhyZWUgdGltZXMuCisgICBUaGUgIkBhIiBjb21tYW5kIGNhbiBiZSBwcmVjZWRlZCBieSBhIGNvdW50LCB3aGljaCB3aWxsIGNhdXNlIHRoZSBtYWNybyB0bworYmUgZXhlY3V0ZWQgdGhhdCBudW1iZXIgb2YgdGltZXMuICBJbiB0aGlzIGNhc2UgeW91IHdvdWxkIHR5cGU6ID4KKworCTNAYQorCisKK01PVkUgQU5EIEVYRUNVVEUKKworWW91IG1pZ2h0IGhhdmUgdGhlIGxpbmVzIHlvdSB3YW50IHRvIGNoYW5nZSBpbiB2YXJpb3VzIHBsYWNlcy4gIEp1c3QgbW92ZSB0aGUKK2N1cnNvciB0byBlYWNoIGxvY2F0aW9uIGFuZCB1c2UgdGhlICJAYSIgY29tbWFuZC4gIElmIHlvdSBoYXZlIGRvbmUgdGhhdCBvbmNlLAoreW91IGNhbiBkbyBpdCBhZ2FpbiB3aXRoICJAQCIuICBUaGF0J3MgYSBiaXQgZWFzaWVyIHRvIHR5cGUuICBJZiB5b3Ugbm93CitleGVjdXRlIHJlZ2lzdGVyIGIgd2l0aCAiQGIiLCB0aGUgbmV4dCAiQEAiIHdpbGwgdXNlIHJlZ2lzdGVyIGIuCisgICBJZiB5b3UgY29tcGFyZSB0aGUgcGxheWJhY2sgbWV0aG9kIHdpdGggdXNpbmcgIi4iLCB0aGVyZSBhcmUgc2V2ZXJhbAorZGlmZmVyZW5jZXMuICBGaXJzdCBvZiBhbGwsICIuIiBjYW4gb25seSByZXBlYXQgb25lIGNoYW5nZS4gIEFzIHNlZW4gaW4gdGhlCitleGFtcGxlIGFib3ZlLCAiQGEiIGNhbiBkbyBzZXZlcmFsIGNoYW5nZXMsIGFuZCBtb3ZlIGFyb3VuZCBhcyB3ZWxsLgorU2Vjb25kbHksICIuIiBjYW4gb25seSByZW1lbWJlciB0aGUgbGFzdCBjaGFuZ2UuICBFeGVjdXRpbmcgYSByZWdpc3RlciBhbGxvd3MKK3lvdSB0byBtYWtlIGFueSBjaGFuZ2VzIGFuZCB0aGVuIHN0aWxsIHVzZSAiQGEiIHRvIHJlcGxheSB0aGUgcmVjb3JkZWQKK2NvbW1hbmRzLiAgRmluYWxseSwgeW91IGNhbiB1c2UgMjYgZGlmZmVyZW50IHJlZ2lzdGVycy4gIFRodXMgeW91IGNhbiByZW1lbWJlcgorMjYgZGlmZmVyZW50IGNvbW1hbmQgc2VxdWVuY2VzIHRvIGV4ZWN1dGUuCisKKworVVNJTkcgUkVHSVNURVJTCisKK1RoZSByZWdpc3RlcnMgdXNlZCBmb3IgcmVjb3JkaW5nIGFyZSB0aGUgc2FtZSBvbmVzIHlvdSB1c2VkIGZvciB5YW5rIGFuZAorZGVsZXRlIGNvbW1hbmRzLiAgVGhpcyBhbGxvd3MgeW91IHRvIG1peCByZWNvcmRpbmcgd2l0aCBvdGhlciBjb21tYW5kcyB0bworbWFuaXB1bGF0ZSB0aGUgcmVnaXN0ZXJzLgorICAgU3VwcG9zZSB5b3UgaGF2ZSByZWNvcmRlZCBhIGZldyBjb21tYW5kcyBpbiByZWdpc3RlciBuLiAgV2hlbiB5b3UgZXhlY3V0ZQordGhpcyB3aXRoICJAbiIgeW91IG5vdGljZSB5b3UgZGlkIHNvbWV0aGluZyB3cm9uZy4gIFlvdSBjb3VsZCB0cnkgcmVjb3JkaW5nCithZ2FpbiwgYnV0IHBlcmhhcHMgeW91IHdpbGwgbWFrZSBhbm90aGVyIG1pc3Rha2UuICBJbnN0ZWFkLCB1c2UgdGhpcyB0cmljazoKKworCUcJCQlHbyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCW88RXNjPgkJCUNyZWF0ZSBhbiBlbXB0eSBsaW5lLgorCSJucAkJCVB1dCB0aGUgdGV4dCBmcm9tIHRoZSBuIHJlZ2lzdGVyLiAgWW91IG5vdyBzZWUKKwkJCQl0aGUgY29tbWFuZHMgeW91IHR5cGVkIGFzIHRleHQgaW4gdGhlIGZpbGUuCisJe2VkaXRzfQkJCUNoYW5nZSB0aGUgY29tbWFuZHMgdGhhdCB3ZXJlIHdyb25nLiAgVGhpcyBpcworCQkJCWp1c3QgbGlrZSBlZGl0aW5nIHRleHQuCisJMAkJCUdvIHRvIHRoZSBzdGFydCBvZiB0aGUgbGluZS4KKwkibnkkCQkJWWFuayB0aGUgY29ycmVjdGVkIGNvbW1hbmRzIGludG8gdGhlIG4KKwkJCQlyZWdpc3Rlci4KKwlkZAkJCURlbGV0ZSB0aGUgc2NyYXRjaCBsaW5lLgorCitOb3cgeW91IGNhbiBleGVjdXRlIHRoZSBjb3JyZWN0ZWQgY29tbWFuZHMgd2l0aCAiQG4iLiAgKElmIHlvdXIgcmVjb3JkZWQKK2NvbW1hbmRzIGluY2x1ZGUgbGluZSBicmVha3MsIGFkanVzdCB0aGUgbGFzdCB0d28gaXRlbXMgaW4gdGhlIGV4YW1wbGUgdG8KK2luY2x1ZGUgYWxsIHRoZSBsaW5lcy4pCisKKworQVBQRU5ESU5HIFRPIEEgUkVHSVNURVIKKworU28gZmFyIHdlIGhhdmUgdXNlZCBhIGxvd2VyY2FzZSBsZXR0ZXIgZm9yIHRoZSByZWdpc3RlciBuYW1lLiAgVG8gYXBwZW5kIHRvIGEKK3JlZ2lzdGVyLCB1c2UgYW4gdXBwZXJjYXNlIGxldHRlci4KKyAgIFN1cHBvc2UgeW91IGhhdmUgcmVjb3JkZWQgYSBjb21tYW5kIHRvIGNoYW5nZSBhIHdvcmQgdG8gcmVnaXN0ZXIgYy4gIEl0Cit3b3JrcyBwcm9wZXJseSwgYnV0IHlvdSB3b3VsZCBsaWtlIHRvIGFkZCBhIHNlYXJjaCBmb3IgdGhlIG5leHQgd29yZCB0bworY2hhbmdlLiAgVGhpcyBjYW4gYmUgZG9uZSB3aXRoOiA+CisKKwlxQy93b3JkPEVudGVyPnEKKworWW91IHN0YXJ0IHdpdGggInFDIiwgd2hpY2ggcmVjb3JkcyB0byB0aGUgYyByZWdpc3RlciBhbmQgYXBwZW5kcy4gIFRodXMKK3dyaXRpbmcgdG8gYW4gdXBwZXJjYXNlIHJlZ2lzdGVyIG5hbWUgbWVhbnMgdG8gYXBwZW5kIHRvIHRoZSByZWdpc3RlciB3aXRoCit0aGUgc2FtZSBsZXR0ZXIsIGJ1dCBsb3dlcmNhc2UuCisKK1RoaXMgd29ya3MgYm90aCB3aXRoIHJlY29yZGluZyBhbmQgd2l0aCB5YW5rIGFuZCBkZWxldGUgY29tbWFuZHMuICBGb3IKK2V4YW1wbGUsIHlvdSB3YW50IHRvIGNvbGxlY3QgYSBzZXF1ZW5jZSBvZiBsaW5lcyBpbnRvIHRoZSBhIHJlZ2lzdGVyLiAgWWFuawordGhlIGZpcnN0IGxpbmUgd2l0aDogPgorCisJImFZCisKK05vdyBtb3ZlIHRvIHRoZSBzZWNvbmQgbGluZSwgYW5kIHR5cGU6ID4KKworCSJBWQorCitSZXBlYXQgdGhpcyBjb21tYW5kIGZvciBhbGwgbGluZXMuICBUaGUgYSByZWdpc3RlciBub3cgY29udGFpbnMgYWxsIHRob3NlCitsaW5lcywgaW4gdGhlIG9yZGVyIHlvdSB5YW5rZWQgdGhlbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTAuMioJU3Vic3RpdHV0aW9uCQkJCQkJKmZpbmQtcmVwbGFjZSoKKworVGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZCBlbmFibGVzIHlvdSB0byBwZXJmb3JtIHN0cmluZyByZXBsYWNlbWVudHMgb24gYQord2hvbGUgcmFuZ2Ugb2YgbGluZXMuICBUaGUgZ2VuZXJhbCBmb3JtIG9mIHRoaXMgY29tbWFuZCBpcyBhcyBmb2xsb3dzOiA+CisKKwk6W3JhbmdlXXN1YnN0aXR1dGUvZnJvbS90by9bZmxhZ3NdCisKK1RoaXMgY29tbWFuZCBjaGFuZ2VzIHRoZSAiZnJvbSIgc3RyaW5nIHRvIHRoZSAidG8iIHN0cmluZyBpbiB0aGUgbGluZXMKK3NwZWNpZmllZCB3aXRoIFtyYW5nZV0uICBGb3IgZXhhbXBsZSwgeW91IGNhbiBjaGFuZ2UgIlByb2Zlc3NvciIgdG8gIlRlYWNoZXIiCitpbiBhbGwgbGluZXMgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTolc3Vic3RpdHV0ZS9Qcm9mZXNzb3IvVGVhY2hlci8KKzwKKwlOb3RlOgorCVRoZSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQgaXMgYWxtb3N0IG5ldmVyIHNwZWxsZWQgb3V0IGNvbXBsZXRlbHkuCisJTW9zdCBvZiB0aGUgdGltZSwgcGVvcGxlIHVzZSB0aGUgYWJicmV2aWF0ZWQgdmVyc2lvbiAiOnMiLiAgRnJvbSBoZXJlCisJb24gdGhlIGFiYnJldmlhdGlvbiB3aWxsIGJlIHVzZWQuCisKK1RoZSAiJSIgYmVmb3JlIHRoZSBjb21tYW5kIHNwZWNpZmllcyB0aGUgY29tbWFuZCB3b3JrcyBvbiBhbGwgbGluZXMuICBXaXRob3V0CithIHJhbmdlLCAiOnMiIG9ubHkgd29ya3Mgb24gdGhlIGN1cnJlbnQgbGluZS4gIE1vcmUgYWJvdXQgcmFuZ2VzIGluIHRoZSBuZXh0CitzZWN0aW9uIHwxMC4zfC4KKworQnkgZGVmYXVsdCwgdGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZCBjaGFuZ2VzIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb24KK2VhY2ggbGluZS4gIEZvciBleGFtcGxlLCB0aGUgcHJlY2VkaW5nIGNvbW1hbmQgY2hhbmdlcyB0aGUgbGluZToKKworCVByb2Zlc3NvciBTbWl0aCBjcml0aWNpemVkIFByb2Zlc3NvciBKb2huc29uIHRvZGF5LiB+CisKK3RvOgorCisJVGVhY2hlciBTbWl0aCBjcml0aWNpemVkIFByb2Zlc3NvciBKb2huc29uIHRvZGF5LiB+CisKK1RvIGNoYW5nZSBldmVyeSBvY2N1cnJlbmNlIG9uIHRoZSBsaW5lLCB5b3UgbmVlZCB0byBhZGQgdGhlIGcgKGdsb2JhbCkgZmxhZy4KK1RoZSBjb21tYW5kOiA+CisKKwk6JXMvUHJvZmVzc29yL1RlYWNoZXIvZworCityZXN1bHRzIGluIChzdGFydGluZyB3aXRoIHRoZSBvcmlnaW5hbCBsaW5lKToKKworCVRlYWNoZXIgU21pdGggY3JpdGljaXplZCBUZWFjaGVyIEpvaG5zb24gdG9kYXkuIH4KKworT3RoZXIgZmxhZ3MgaW5jbHVkZSBwIChwcmludCksIHdoaWNoIGNhdXNlcyB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kIHRvIHByaW50CitvdXQgZWFjaCBsaW5lIGl0IGNoYW5nZXMuICBUaGUgYyAoY29uZmlybSkgZmxhZyB0ZWxscyAiOnN1YnN0aXR1dGUiIHRvIGFzayB5b3UKK2ZvciBjb25maXJtYXRpb24gYmVmb3JlIGl0IHBlcmZvcm1zIGVhY2ggc3Vic3RpdHV0aW9uLiAgRW50ZXIgdGhlIGZvbGxvd2luZzogPgorCisJOiVzL1Byb2Zlc3Nvci9UZWFjaGVyL2MKKworVmltIGZpbmRzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICJQcm9mZXNzb3IiIGFuZCBkaXNwbGF5cyB0aGUgdGV4dCBpdCBpcworYWJvdXQgdG8gY2hhbmdlLiAgWW91IGdldCB0aGUgZm9sbG93aW5nIHByb21wdDogPgorCisJcmVwbGFjZSB3aXRoIFRlYWNoZXIgKHkvbi9hL3EvbC9eRS9eWSk/CisKK0F0IHRoaXMgcG9pbnQsIHlvdSBtdXN0IGVudGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFuc3dlcnM6CisKKwl5CQlZZXM7IG1ha2UgdGhpcyBjaGFuZ2UuCisJbgkJTm87IHNraXAgdGhpcyBtYXRjaC4KKwlhCQlBbGw7IG1ha2UgdGhpcyBjaGFuZ2UgYW5kIGFsbCByZW1haW5pbmcgb25lcyB3aXRob3V0CisJCQlmdXJ0aGVyIGNvbmZpcm1hdGlvbi4KKwlxCQlRdWl0OyBkb24ndCBtYWtlIGFueSBtb3JlIGNoYW5nZXMuCisJbAkJTGFzdDsgbWFrZSB0aGlzIGNoYW5nZSBhbmQgdGhlbiBxdWl0LgorCUNUUkwtRQkJU2Nyb2xsIHRoZSB0ZXh0IG9uZSBsaW5lIHVwLgorCUNUUkwtWQkJU2Nyb2xsIHRoZSB0ZXh0IG9uZSBsaW5lIGRvd24uCisKKworVGhlICJmcm9tIiBwYXJ0IG9mIHRoZSBzdWJzdGl0dXRlIGNvbW1hbmQgaXMgYWN0dWFsbHkgYSBwYXR0ZXJuLiAgVGhlIHNhbWUKK2tpbmQgYXMgdXNlZCBmb3IgdGhlIHNlYXJjaCBjb21tYW5kLiAgRm9yIGV4YW1wbGUsIHRoaXMgY29tbWFuZCBvbmx5CitzdWJzdGl0dXRlcyAidGhlIiB3aGVuIGl0IGFwcGVhcnMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZTogPgorCisJOnMvXnRoZS90aGVzZS8KKworSWYgeW91IGFyZSBzdWJzdGl0dXRpbmcgd2l0aCBhICJmcm9tIiBvciAidG8iIHBhcnQgdGhhdCBpbmNsdWRlcyBhIHNsYXNoLCB5b3UKK25lZWQgdG8gcHV0IGEgYmFja3NsYXNoIGJlZm9yZSBpdC4gIEEgc2ltcGxlciB3YXkgaXMgdG8gdXNlIGFub3RoZXIgY2hhcmFjdGVyCitpbnN0ZWFkIG9mIHRoZSBzbGFzaC4gIEEgcGx1cywgZm9yIGV4YW1wbGU6ID4KKworCTpzK29uZS90d28rb25lIG9yIHR3bysKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTAuMyoJQ29tbWFuZCByYW5nZXMKKworVGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZCwgYW5kIG1hbnkgb3RoZXIgOiBjb21tYW5kcywgY2FuIGJlIGFwcGxpZWQgdG8gYQorc2VsZWN0aW9uIG9mIGxpbmVzLiAgVGhpcyBpcyBjYWxsZWQgYSByYW5nZS4KKyAgIFRoZSBzaW1wbGUgZm9ybSBvZiBhIHJhbmdlIGlzIHtudW1iZXJ9LHtudW1iZXJ9LiAgRm9yIGV4YW1wbGU6ID4KKworCToxLDVzL3RoaXMvdGhhdC9nCisKK0V4ZWN1dGVzIHRoZSBzdWJzdGl0dXRlIGNvbW1hbmQgb24gdGhlIGxpbmVzIDEgdG8gNS4gIExpbmUgNSBpcyBpbmNsdWRlZC4KK1RoZSByYW5nZSBpcyBhbHdheXMgcGxhY2VkIGJlZm9yZSB0aGUgY29tbWFuZC4KKworQSBzaW5nbGUgbnVtYmVyIGNhbiBiZSB1c2VkIHRvIGFkZHJlc3Mgb25lIHNwZWNpZmljIGxpbmU6ID4KKworCTo1NHMvUHJlc2lkZW50L0Zvb2wvCisKK1NvbWUgY29tbWFuZHMgd29yayBvbiB0aGUgd2hvbGUgZmlsZSB3aGVuIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHJhbmdlLiAgVG8gbWFrZQordGhlbSB3b3JrIG9uIHRoZSBjdXJyZW50IGxpbmUgdGhlICIuIiBhZGRyZXNzIGlzIHVzZWQuICBUaGUgIjp3cml0ZSIgY29tbWFuZAord29ya3MgbGlrZSB0aGF0LiAgV2l0aG91dCBhIHJhbmdlLCBpdCB3cml0ZXMgdGhlIHdob2xlIGZpbGUuICBUbyBtYWtlIGl0IHdyaXRlCitvbmx5IHRoZSBjdXJyZW50IGxpbmUgaW50byBhIGZpbGU6ID4KKworCToud3JpdGUgb3RoZXJmaWxlCisKK1RoZSBmaXJzdCBsaW5lIGFsd2F5cyBoYXMgbnVtYmVyIG9uZS4gIEhvdyBhYm91dCB0aGUgbGFzdCBsaW5lPyAgVGhlICIkIgorY2hhcmFjdGVyIGlzIHVzZWQgZm9yIHRoaXMuICBGb3IgZXhhbXBsZSwgdG8gc3Vic3RpdHV0ZSBpbiB0aGUgbGluZXMgZnJvbSB0aGUKK2N1cnNvciB0byB0aGUgZW5kOiA+CisKKwk6Liwkcy95ZXMvbm8vCisKK1RoZSAiJSIgcmFuZ2UgdGhhdCB3ZSB1c2VkIGJlZm9yZSwgaXMgYWN0dWFsbHkgYSBzaG9ydCB3YXkgdG8gc2F5ICIxLCQiLCBmcm9tCit0aGUgZmlyc3QgdG8gdGhlIGxhc3QgbGluZS4KKworCitVU0lORyBBIFBBVFRFUk4gSU4gQSBSQU5HRQorCitTdXBwb3NlIHlvdSBhcmUgZWRpdGluZyBhIGNoYXB0ZXIgaW4gYSBib29rLCBhbmQgd2FudCB0byByZXBsYWNlIGFsbAorb2NjdXJyZW5jZXMgb2YgImdyZXkiIHdpdGggImdyYXkiLiAgQnV0IG9ubHkgaW4gdGhpcyBjaGFwdGVyLCBub3QgaW4gdGhlIG5leHQKK29uZS4gIFlvdSBrbm93IHRoYXQgb25seSBjaGFwdGVyIGJvdW5kYXJpZXMgaGF2ZSB0aGUgd29yZCAiQ2hhcHRlciIgaW4gdGhlCitmaXJzdCBjb2x1bW4uICBUaGlzIGNvbW1hbmQgd2lsbCB3b3JrIHRoZW46ID4KKworCTo/XkNoYXB0ZXI/LC9eQ2hhcHRlci9zPWdyZXk9Z3JheT1nCisKK1lvdSBjYW4gc2VlIGEgc2VhcmNoIHBhdHRlcm4gaXMgdXNlZCB0d2ljZS4gIFRoZSBmaXJzdCAiP15DaGFwdGVyPyIgZmluZHMgdGhlCitsaW5lIGFib3ZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRoYXQgbWF0Y2hlcyB0aGlzIHBhdHRlcm4uICBUaHVzIHRoZSA/cGF0dGVybj8KK3JhbmdlIGlzIHVzZWQgdG8gc2VhcmNoIGJhY2t3YXJkcy4gIFNpbWlsYXJseSwgIi9eQ2hhcHRlci8iIGlzIHVzZWQgdG8gc2VhcmNoCitmb3J3YXJkIGZvciB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY2hhcHRlci4KKyAgIFRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHRoZSBzbGFzaGVzLCB0aGUgIj0iIGNoYXJhY3RlciB3YXMgdXNlZCBpbiB0aGUKK3N1YnN0aXR1dGUgY29tbWFuZCBoZXJlLiAgQSBzbGFzaCBvciBhbm90aGVyIGNoYXJhY3RlciB3b3VsZCBoYXZlIHdvcmtlZCBhcword2VsbC4KKworCitBREQgQU5EIFNVQlRSQUNUCisKK1RoZXJlIGlzIGEgc2xpZ2h0IGVycm9yIGluIHRoZSBhYm92ZSBjb21tYW5kOiBJZiB0aGUgdGl0bGUgb2YgdGhlIG5leHQgY2hhcHRlcgoraGFkIGluY2x1ZGVkICJncmV5IiBpdCB3b3VsZCBiZSByZXBsYWNlZCBhcyB3ZWxsLiAgTWF5YmUgdGhhdCdzIHdoYXQgeW91Cit3YW50ZWQsIGJ1dCB3aGF0IGlmIHlvdSBkaWRuJ3Q/ICBUaGVuIHlvdSBjYW4gc3BlY2lmeSBhbiBvZmZzZXQuCisgICBUbyBzZWFyY2ggZm9yIGEgcGF0dGVybiBhbmQgdGhlbiB1c2UgdGhlIGxpbmUgYWJvdmUgaXQ6ID4KKworCS9DaGFwdGVyLy0xCisKK1lvdSBjYW4gdXNlIGFueSBudW1iZXIgaW5zdGVhZCBvZiB0aGUgMS4gIFRvIGFkZHJlc3MgdGhlIHNlY29uZCBsaW5lIGJlbG93IHRoZQorbWF0Y2g6ID4KKworCS9DaGFwdGVyLysyCisKK1RoZSBvZmZzZXRzIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCB0aGUgb3RoZXIgaXRlbXMgaW4gYSByYW5nZS4gIExvb2sgYXQgdGhpcworb25lOiA+CisKKwk6LiszLCQtNQorCitUaGlzIHNwZWNpZmllcyB0aGUgcmFuZ2UgdGhhdCBzdGFydHMgdGhyZWUgbGluZXMgYmVsb3cgdGhlIGN1cnNvciBhbmQgZW5kcworZml2ZSBsaW5lcyBiZWZvcmUgdGhlIGxhc3QgbGluZSBpbiB0aGUgZmlsZS4KKworCitVU0lORyBNQVJLUworCitJbnN0ZWFkIG9mIGZpZ3VyaW5nIG91dCB0aGUgbGluZSBudW1iZXJzIG9mIGNlcnRhaW4gcG9zaXRpb25zLCByZW1lbWJlcmluZyB0aGVtCithbmQgdHlwaW5nIHRoZW0gaW4gYSByYW5nZSwgeW91IGNhbiB1c2UgbWFya3MuCisgICBQbGFjZSB0aGUgbWFya3MgYXMgbWVudGlvbmVkIGluIGNoYXB0ZXIgMy4gIEZvciBleGFtcGxlLCB1c2UgIm10IiB0byBtYXJrCit0aGUgdG9wIG9mIGFuIGFyZWEgYW5kICJtYiIgdG8gbWFyayB0aGUgYm90dG9tLiAgVGhlbiB5b3UgY2FuIHVzZSB0aGlzIHJhbmdlCit0byBzcGVjaWZ5IHRoZSBsaW5lcyBiZXR3ZWVuIHRoZSBtYXJrcyAoaW5jbHVkaW5nIHRoZSBsaW5lcyB3aXRoIHRoZSBtYXJrcyk6ID4KKworCTondCwnYgorCisKK1ZJU1VBTCBNT0RFIEFORCBSQU5HRVMKKworWW91IGNhbiBzZWxlY3QgdGV4dCB3aXRoIFZpc3VhbCBtb2RlLiAgSWYgeW91IHRoZW4gcHJlc3MgIjoiIHRvIHN0YXJ0IGEgY29sb24KK2NvbW1hbmQsIHlvdSB3aWxsIHNlZSB0aGlzOiA+CisKKwk6JzwsJz4KKworTm93IHlvdSBjYW4gdHlwZSB0aGUgY29tbWFuZCBhbmQgaXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSByYW5nZSBvZiBsaW5lcyB0aGF0Cit3YXMgdmlzdWFsbHkgc2VsZWN0ZWQuCisKKwlOb3RlOgorCVdoZW4gdXNpbmcgVmlzdWFsIG1vZGUgdG8gc2VsZWN0IHBhcnQgb2YgYSBsaW5lLCBvciB1c2luZyBDVFJMLVYgdG8KKwlzZWxlY3QgYSBibG9jayBvZiB0ZXh0LCB0aGUgY29sb24gY29tbWFuZHMgd2lsbCBzdGlsbCBhcHBseSB0byB3aG9sZQorCWxpbmVzLiAgVGhpcyBtaWdodCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBWaW0uCisKK1RoZSAnPCBhbmQgJz4gYXJlIGFjdHVhbGx5IG1hcmtzLCBwbGFjZWQgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIFZpc3VhbAorc2VsZWN0aW9uLiAgVGhlIG1hcmtzIHJlbWFpbiBhdCB0aGVpciBwb3NpdGlvbiB1bnRpbCBhbm90aGVyIFZpc3VhbCBzZWxlY3Rpb24KK2lzIG1hZGUuICBUaHVzIHlvdSBjYW4gdXNlIHRoZSAiJzwiIGNvbW1hbmQgdG8ganVtcCB0byBwb3NpdGlvbiB3aGVyZSB0aGUKK1Zpc3VhbCBhcmVhIHN0YXJ0ZWQuICBBbmQgeW91IGNhbiBtaXggdGhlIG1hcmtzIHdpdGggb3RoZXIgaXRlbXM6ID4KKworCTonPiwkCisKK1RoaXMgYWRkcmVzc2VzIHRoZSBsaW5lcyBmcm9tIHRoZSBlbmQgb2YgdGhlIFZpc3VhbCBhcmVhIHRvIHRoZSBlbmQgb2YgdGhlCitmaWxlLgorCisKK0EgTlVNQkVSIE9GIExJTkVTCisKK1doZW4geW91IGtub3cgaG93IG1hbnkgbGluZXMgeW91IHdhbnQgdG8gY2hhbmdlLCB5b3UgY2FuIHR5cGUgdGhlIG51bWJlciBhbmQKK3RoZW4gIjoiLiAgRm9yIGV4YW1wbGUsIHdoZW4geW91IHR5cGUgIjU6IiwgeW91IHdpbGwgZ2V0OiA+CisKKwk6LiwuKzQKKworTm93IHlvdSBjYW4gdHlwZSB0aGUgY29tbWFuZCB5b3Ugd2FudCB0byB1c2UuICBJdCB3aWxsIHVzZSB0aGUgcmFuZ2UgIi4iCisoY3VycmVudCBsaW5lKSB1bnRpbCAiLis0IiAoZm91ciBsaW5lcyBkb3duKS4gIFRodXMgaXQgc3BhbnMgZml2ZSBsaW5lcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTAuNCoJVGhlIGdsb2JhbCBjb21tYW5kCisKK1RoZSAiOmdsb2JhbCIgY29tbWFuZCBpcyBvbmUgb2YgdGhlIG1vcmUgcG93ZXJmdWwgZmVhdHVyZXMgb2YgVmltLiAgSXQgYWxsb3dzCit5b3UgdG8gZmluZCBhIG1hdGNoIGZvciBhIHBhdHRlcm4gYW5kIGV4ZWN1dGUgYSBjb21tYW5kIHRoZXJlLiAgVGhlIGdlbmVyYWwKK2Zvcm0gaXM6ID4KKworCTpbcmFuZ2VdZ2xvYmFsL3twYXR0ZXJufS97Y29tbWFuZH0KKworVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQuICBCdXQsIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZQorbWF0Y2hlZCB0ZXh0IHdpdGggb3RoZXIgdGV4dCwgdGhlIGNvbW1hbmQge2NvbW1hbmR9IGlzIGV4ZWN1dGVkLgorCisJTm90ZToKKwlUaGUgY29tbWFuZCBleGVjdXRlZCBmb3IgIjpnbG9iYWwiIG11c3QgYmUgb25lIHRoYXQgc3RhcnRzIHdpdGggYQorCWNvbG9uLiAgTm9ybWFsIG1vZGUgY29tbWFuZHMgY2FuIG5vdCBiZSB1c2VkIGRpcmVjdGx5LiAgVGhlIHw6bm9ybWFsfAorCWNvbW1hbmQgY2FuIGRvIHRoaXMgZm9yIHlvdS4KKworU3VwcG9zZSB5b3Ugd2FudCB0byBjaGFuZ2UgImZvb2JhciIgdG8gImJhcmZvbyIsIGJ1dCBvbmx5IGluIEMrKyBzdHlsZQorY29tbWVudHMuICBUaGVzZSBjb21tZW50cyBzdGFydCB3aXRoICIvLyIuICBVc2UgdGhpcyBjb21tYW5kOiA+CisKKwk6ZysvLytzL2Zvb2Jhci9iYXJmb28vZworCitUaGlzIHN0YXJ0cyB3aXRoICI6ZyIuICBUaGF0IGlzIHNob3J0IGZvciAiOmdsb2JhbCIsIGp1c3QgbGlrZSAiOnMiIGlzIHNob3J0Citmb3IgIjpzdWJzdGl0dXRlIi4gIFRoZW4gdGhlIHBhdHRlcm4sIGVuY2xvc2VkIGluIHBsdXMgY2hhcmFjdGVycy4gIFNpbmNlIHRoZQorcGF0dGVybiB3ZSBhcmUgbG9va2luZyBmb3IgY29udGFpbnMgYSBzbGFzaCwgdGhpcyB1c2VzIHRoZSBwbHVzIGNoYXJhY3RlciB0bworc2VwYXJhdGUgdGhlIHBhdHRlcm4uICBOZXh0IGNvbWVzIHRoZSBzdWJzdGl0dXRlIGNvbW1hbmQgdGhhdCBjaGFuZ2VzICJmb29iYXIiCitpbnRvICJiYXJmb28iLgorICAgVGhlIGRlZmF1bHQgcmFuZ2UgZm9yIHRoZSBnbG9iYWwgY29tbWFuZCBpcyB0aGUgd2hvbGUgZmlsZS4gIFRodXMgbm8gcmFuZ2UKK3dhcyBzcGVjaWZpZWQgaW4gdGhpcyBleGFtcGxlLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSAiOnN1YnN0aXR1dGUiLCB3aGljaAord29ya3Mgb24gb25lIGxpbmUgd2l0aG91dCBhIHJhbmdlLgorICAgVGhlIGNvbW1hbmQgaXNuJ3QgcGVyZmVjdCwgc2luY2UgaXQgYWxzbyBtYXRjaGVzIGxpbmVzIHdoZXJlICIvLyIgYXBwZWFycworaGFsZndheSBhIGxpbmUsIGFuZCB0aGUgc3Vic3RpdHV0aW9uIHdpbGwgYWxzbyB0YWtlIHBsYWNlIGJlZm9yZSB0aGUgIi8vIi4KKworSnVzdCBsaWtlIHdpdGggIjpzdWJzdGl0dXRlIiwgYW55IHBhdHRlcm4gY2FuIGJlIHVzZWQuICBXaGVuIHlvdSBsZWFybiBtb3JlCitjb21wbGljYXRlZCBwYXR0ZXJucyBsYXRlciwgeW91IGNhbiB1c2UgdGhlbSBoZXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMC41KglWaXN1YWwgYmxvY2sgbW9kZQorCitXaXRoIENUUkwtViB5b3UgY2FuIHN0YXJ0IHNlbGVjdGlvbiBvZiBhIHJlY3Rhbmd1bGFyIGFyZWEgb2YgdGV4dC4gIFRoZXJlIGFyZQorYSBmZXcgY29tbWFuZHMgdGhhdCBkbyBzb21ldGhpbmcgc3BlY2lhbCB3aXRoIHRoZSB0ZXh0IGJsb2NrLgorCitUaGVyZSBpcyBzb21ldGhpbmcgc3BlY2lhbCBhYm91dCB1c2luZyB0aGUgIiQiIGNvbW1hbmQgaW4gVmlzdWFsIGJsb2NrIG1vZGUuCitXaGVuIHRoZSBsYXN0IG1vdGlvbiBjb21tYW5kIHVzZWQgd2FzICIkIiwgYWxsIGxpbmVzIGluIHRoZSBWaXN1YWwgc2VsZWN0aW9uCit3aWxsIGV4dGVuZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBsaW5lLCBhbHNvIHdoZW4gdGhlIGxpbmUgd2l0aCB0aGUgY3Vyc29yIGlzCitzaG9ydGVyLiAgVGhpcyByZW1haW5zIGVmZmVjdGl2ZSB1bnRpbCB5b3UgdXNlIGEgbW90aW9uIGNvbW1hbmQgdGhhdCBtb3ZlcyB0aGUKK2N1cnNvciBob3Jpem9udGFsbHkuICBUaHVzIHVzaW5nICJqIiBrZWVwcyBpdCwgImgiIHN0b3BzIGl0LgorCisKK0lOU0VSVElORyBURVhUCisKK1RoZSBjb21tYW5kICAiSXtzdHJpbmd9PEVzYz4iIGluc2VydHMgdGhlIHRleHQge3N0cmluZ30gaW4gZWFjaCBsaW5lLCBqdXN0CitsZWZ0IG9mIHRoZSB2aXN1YWwgYmxvY2suICBZb3Ugc3RhcnQgYnkgcHJlc3NpbmcgQ1RSTC1WIHRvIGVudGVyIHZpc3VhbCBibG9jaworbW9kZS4gIE5vdyB5b3UgbW92ZSB0aGUgY3Vyc29yIHRvIGRlZmluZSB5b3VyIGJsb2NrLiAgTmV4dCB5b3UgdHlwZSBJIHRvIGVudGVyCitJbnNlcnQgbW9kZSwgZm9sbG93ZWQgYnkgdGhlIHRleHQgdG8gaW5zZXJ0LiAgQXMgeW91IHR5cGUsIHRoZSB0ZXh0IGFwcGVhcnMgb24KK3RoZSBmaXJzdCBsaW5lIG9ubHkuCisgICBBZnRlciB5b3UgcHJlc3MgPEVzYz4gdG8gZW5kIHRoZSBpbnNlcnQsIHRoZSB0ZXh0IHdpbGwgbWFnaWNhbGx5IGJlCitpbnNlcnRlZCBpbiB0aGUgcmVzdCBvZiB0aGUgbGluZXMgY29udGFpbmVkIGluIHRoZSB2aXN1YWwgc2VsZWN0aW9uLiAgRXhhbXBsZToKKworCWluY2x1ZGUgb25lIH4KKwlpbmNsdWRlIHR3byB+CisJaW5jbHVkZSB0aHJlZSB+CisJaW5jbHVkZSBmb3VyIH4KKworTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSAibyIgb2YgIm9uZSIgYW5kIHByZXNzIENUUkwtVi4gIE1vdmUgaXQgZG93biB3aXRoICIzaiIKK3RvICJmb3VyIi4gIFlvdSBub3cgaGF2ZSBhIGJsb2NrIHNlbGVjdGlvbiB0aGF0IHNwYW5zIGZvdXIgbGluZXMuICBOb3cgdHlwZTogPgorCisJSW1haW4uPEVzYz4KKworVGhlIHJlc3VsdDoKKworCWluY2x1ZGUgbWFpbi5vbmUgfgorCWluY2x1ZGUgbWFpbi50d28gfgorCWluY2x1ZGUgbWFpbi50aHJlZSB+CisJaW5jbHVkZSBtYWluLmZvdXIgfgorCitJZiB0aGUgYmxvY2sgc3BhbnMgc2hvcnQgbGluZXMgdGhhdCBkbyBub3QgZXh0ZW5kIGludG8gdGhlIGJsb2NrLCB0aGUgdGV4dCBpcworbm90IGluc2VydGVkIGluIHRoYXQgbGluZS4gIEZvciBleGFtcGxlLCBtYWtlIGEgVmlzdWFsIGJsb2NrIHNlbGVjdGlvbiB0aGF0CitpbmNsdWRlcyB0aGUgd29yZCAibG9uZyIgaW4gdGhlIGZpcnN0IGFuZCBsYXN0IGxpbmUgb2YgdGhpcyB0ZXh0LCBhbmQgdGh1cyBoYXMKK25vIHRleHQgc2VsZWN0ZWQgaW4gdGhlIHNlY29uZCBsaW5lOgorCisJVGhpcyBpcyBhIGxvbmcgbGluZSB+CisJc2hvcnQgfgorCUFueSBvdGhlciBsb25nIGxpbmUgfgorCisJCSAgXl5eXiBzZWxlY3RlZCBibG9jaworCitOb3cgdXNlIHRoZSBjb21tYW5kICJJdmVyeSA8RXNjPiIuICBUaGUgcmVzdWx0IGlzOgorCisJVGhpcyBpcyBhIHZlcnkgbG9uZyBsaW5lIH4KKwlzaG9ydCB+CisJQW55IG90aGVyIHZlcnkgbG9uZyBsaW5lIH4KKworSW4gdGhlIHNob3J0IGxpbmUgbm8gdGV4dCB3YXMgaW5zZXJ0ZWQuCisKK0lmIHRoZSBzdHJpbmcgeW91IGluc2VydCBjb250YWlucyBhIG5ld2xpbmUsIHRoZSAiSSIgYWN0cyBqdXN0IGxpa2UgYSBOb3JtYWwKK2luc2VydCBjb21tYW5kIGFuZCBhZmZlY3RzIG9ubHkgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGJsb2NrLgorCitUaGUgIkEiIGNvbW1hbmQgd29ya3MgdGhlIHNhbWUgd2F5LCBleGNlcHQgdGhhdCBpdCBhcHBlbmRzIGFmdGVyIHRoZSByaWdodAorc2lkZSBvZiB0aGUgYmxvY2suCisgICBUaGVyZSBpcyBvbmUgc3BlY2lhbCBjYXNlIGZvciAiQSI6IFNlbGVjdCBhIFZpc3VhbCBibG9jayBhbmQgdGhlbiB1c2UgIiQiCit0byBtYWtlIHRoZSBibG9jayBleHRlbmQgdG8gdGhlIGVuZCBvZiBlYWNoIGxpbmUuICBVc2luZyAiQSIgbm93IHdpbGwgYXBwZW5kCit0aGUgdGV4dCB0byB0aGUgZW5kIG9mIGVhY2ggbGluZS4KKyAgIFVzaW5nIHRoZSBzYW1lIGV4YW1wbGUgZnJvbSBhYm92ZSwgYW5kIHRoZW4gdHlwaW5nICIkQSBYWFg8RXNjPiwgeW91IGdldAordGhpcyByZXN1bHQ6CisKKwlUaGlzIGlzIGEgbG9uZyBsaW5lIFhYWCB+CisJc2hvcnQgWFhYIH4KKwlBbnkgb3RoZXIgbG9uZyBsaW5lIFhYWCB+CisKK1RoaXMgcmVhbGx5IHJlcXVpcmVzIHVzaW5nIHRoZSAiJCIgY29tbWFuZC4gIFZpbSByZW1lbWJlcnMgdGhhdCBpdCB3YXMgdXNlZC4KK01ha2luZyB0aGUgc2FtZSBzZWxlY3Rpb24gYnkgbW92aW5nIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgbG9uZ2VzdCBsaW5lCit3aXRoIG90aGVyIG1vdmVtZW50IGNvbW1hbmRzIHdpbGwgbm90IGhhdmUgdGhlIHNhbWUgcmVzdWx0LgorCisKK0NIQU5HSU5HIFRFWFQKKworVGhlIFZpc3VhbCBibG9jayAiYyIgY29tbWFuZCBkZWxldGVzIHRoZSBibG9jayBhbmQgdGhlbiB0aHJvd3MgeW91IGludG8gSW5zZXJ0Cittb2RlIHRvIGVuYWJsZSB5b3UgdG8gdHlwZSBpbiBhIHN0cmluZy4gIFRoZSBzdHJpbmcgd2lsbCBiZSBpbnNlcnRlZCBpbiBlYWNoCitsaW5lIGluIHRoZSBibG9jay4KKyAgIFN0YXJ0aW5nIHdpdGggdGhlIHNhbWUgc2VsZWN0aW9uIG9mIHRoZSAibG9uZyIgd29yZHMgYXMgYWJvdmUsIHRoZW4gdHlwaW5nCisiY19MT05HXzxFc2M+IiwgeW91IGdldCB0aGlzOgorCisJVGhpcyBpcyBhIF9MT05HXyBsaW5lIH4KKwlzaG9ydCB+CisJQW55IG90aGVyIF9MT05HXyBsaW5lIH4KKworSnVzdCBsaWtlIHdpdGggIkkiIHRoZSBzaG9ydCBsaW5lIGlzIG5vdCBjaGFuZ2VkLiAgQWxzbywgeW91IGNhbid0IGVudGVyIGEKK25ld2xpbmUgaW4gdGhlIG5ldyB0ZXh0LgorCitUaGUgIkMiIGNvbW1hbmQgZGVsZXRlcyB0ZXh0IGZyb20gdGhlIGxlZnQgZWRnZSBvZiB0aGUgYmxvY2sgdG8gdGhlIGVuZCBvZgorbGluZS4gIEl0IHRoZW4gcHV0cyB5b3UgaW4gSW5zZXJ0IG1vZGUgc28gdGhhdCB5b3UgY2FuIHR5cGUgaW4gYSBzdHJpbmcsCit3aGljaCBpcyBhZGRlZCB0byB0aGUgZW5kIG9mIGVhY2ggbGluZS4KKyAgIFN0YXJ0aW5nIHdpdGggdGhlIHNhbWUgdGV4dCBhZ2FpbiwgYW5kIHR5cGluZyAiQ25ldyB0ZXh0PEVzYz4iIHlvdSBnZXQ6CisKKwlUaGlzIGlzIGEgbmV3IHRleHQgfgorCXNob3J0IH4KKwlBbnkgb3RoZXIgbmV3IHRleHQgfgorCitOb3RpY2UgdGhhdCwgZXZlbiB0aG91Z2ggb25seSB0aGUgImxvbmciIHdvcmQgd2FzIHNlbGVjdGVkLCB0aGUgdGV4dCBhZnRlciBpdAoraXMgZGVsZXRlZCBhcyB3ZWxsLiAgVGh1cyBvbmx5IHRoZSBsb2NhdGlvbiBvZiB0aGUgbGVmdCBlZGdlIG9mIHRoZSB2aXN1YWwKK2Jsb2NrIHJlYWxseSBtYXR0ZXJzLgorICAgQWdhaW4sIHNob3J0IGxpbmVzIHRoYXQgZG8gbm90IHJlYWNoIGludG8gdGhlIGJsb2NrIGFyZSBleGNsdWRlZC4KKworT3RoZXIgY29tbWFuZHMgdGhhdCBjaGFuZ2UgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGJsb2NrOgorCisJfglzd2FwIGNhc2UJKGEgLT4gQSBhbmQgQSAtPiBhKQorCVUJbWFrZSB1cHBlcmNhc2UgIChhIC0+IEEgYW5kIEEgLT4gQSkKKwl1CW1ha2UgbG93ZXJjYXNlICAoYSAtPiBhIGFuZCBBIC0+IGEpCisKKworRklMTElORyBXSVRIIEEgQ0hBUkFDVEVSCisKK1RvIGZpbGwgdGhlIHdob2xlIGJsb2NrIHdpdGggb25lIGNoYXJhY3RlciwgdXNlIHRoZSAiciIgY29tbWFuZC4gIEFnYWluLAorc3RhcnRpbmcgd2l0aCB0aGUgc2FtZSBleGFtcGxlIHRleHQgZnJvbSBhYm92ZSwgYW5kIHRoZW4gdHlwaW5nICJyeCI6CisKKwlUaGlzIGlzIGEgeHh4eCBsaW5lIH4KKwlzaG9ydCB+CisJQW55IG90aGVyIHh4eHggbGluZSB+CisKKworCU5vdGU6CisJSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBjaGFyYWN0ZXJzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBsaW5lIGluIHRoZQorCWJsb2NrLCBjaGVjayBvdXQgdGhlICd2aXJ0dWFsZWRpdCcgZmVhdHVyZSBpbiBjaGFwdGVyIDI1LgorCisKK1NISUZUSU5HCisKK1RoZSBjb21tYW5kICI+IiBzaGlmdHMgdGhlIHNlbGVjdGVkIHRleHQgdG8gdGhlIHJpZ2h0IG9uZSBzaGlmdCBhbW91bnQsCitpbnNlcnRpbmcgd2hpdGVzcGFjZS4gIFRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBzaGlmdCBpcyB0aGUgbGVmdCBlZGdlIG9mCit0aGUgdmlzdWFsIGJsb2NrLgorICAgV2l0aCB0aGUgc2FtZSBleGFtcGxlIGFnYWluLCAiPiIgZ2l2ZXMgdGhpcyByZXN1bHQ6CisKKwlUaGlzIGlzIGEJICBsb25nIGxpbmUgfgorCXNob3J0IH4KKwlBbnkgb3RoZXIJICBsb25nIGxpbmUgfgorCitUaGUgc2hpZnQgYW1vdW50IGlzIHNwZWNpZmllZCB3aXRoIHRoZSAnc2hpZnR3aWR0aCcgb3B0aW9uLiAgVG8gY2hhbmdlIGl0IHRvCit1c2UgNCBzcGFjZXM6ID4KKworCTpzZXQgc2hpZnR3aWR0aD00CisKK1RoZSAiPCIgY29tbWFuZCByZW1vdmVzIG9uZSBzaGlmdCBhbW91bnQgb2Ygd2hpdGVzcGFjZSBhdCB0aGUgbGVmdAorZWRnZSBvZiB0aGUgYmxvY2suICBUaGlzIGNvbW1hbmQgaXMgbGltaXRlZCBieSB0aGUgYW1vdW50IG9mIHRleHQgdGhhdCBpcwordGhlcmU7IHNvIGlmIHRoZXJlIGlzIGxlc3MgdGhhbiBhIHNoaWZ0IGFtb3VudCBvZiB3aGl0ZXNwYWNlIGF2YWlsYWJsZSwgaXQKK3JlbW92ZXMgd2hhdCBpdCBjYW4uCisKKworSk9JTklORyBMSU5FUworCitUaGUgIkoiIGNvbW1hbmQgam9pbnMgYWxsIHNlbGVjdGVkIGxpbmVzIHRvZ2V0aGVyIGludG8gb25lIGxpbmUuICBUaHVzIGl0CityZW1vdmVzIHRoZSBsaW5lIGJyZWFrcy4gIEFjdHVhbGx5LCB0aGUgbGluZSBicmVhaywgbGVhZGluZyB3aGl0ZSBzcGFjZSBhbmQKK3RyYWlsaW5nIHdoaXRlIHNwYWNlIGlzIHJlcGxhY2VkIGJ5IG9uZSBzcGFjZS4gIFR3byBzcGFjZXMgYXJlIHVzZWQgYWZ0ZXIgYQorbGluZSBlbmRpbmcgKHRoYXQgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUgJ2pvaW5zcGFjZXMnIG9wdGlvbikuCisgICBMZXQncyB1c2UgdGhlIGV4YW1wbGUgdGhhdCB3ZSBnb3Qgc28gZmFtaWxpYXIgd2l0aCBub3cuICBUaGUgcmVzdWx0IG9mCit1c2luZyB0aGUgIkoiIGNvbW1hbmQ6CisKKwlUaGlzIGlzIGEgbG9uZyBsaW5lIHNob3J0IEFueSBvdGhlciBsb25nIGxpbmUgfgorCitUaGUgIkoiIGNvbW1hbmQgZG9lc24ndCByZXF1aXJlIGEgYmxvY2t3aXNlIHNlbGVjdGlvbi4gIEl0IHdvcmtzIHdpdGggInYiIGFuZAorIlYiIHNlbGVjdGlvbiBpbiBleGFjdGx5IHRoZSBzYW1lIHdheS4KKworSWYgeW91IGRvbid0IHdhbnQgdGhlIHdoaXRlIHNwYWNlIHRvIGJlIGNoYW5nZWQsIHVzZSB0aGUgImdKIiBjb21tYW5kLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMC42KglSZWFkaW5nIGFuZCB3cml0aW5nIHBhcnQgb2YgYSBmaWxlCisKK1doZW4geW91IGFyZSB3cml0aW5nIGFuIGUtbWFpbCBtZXNzYWdlLCB5b3UgbWF5IHdhbnQgdG8gaW5jbHVkZSBhbm90aGVyIGZpbGUuCitUaGlzIGNhbiBiZSBkb25lIHdpdGggdGhlICI6cmVhZCB7ZmlsZW5hbWV9IiBjb21tYW5kLiAgVGhlIHRleHQgb2YgdGhlIGZpbGUgaXMKK3B1dCBiZWxvdyB0aGUgY3Vyc29yIGxpbmUuCisgICBTdGFydGluZyB3aXRoIHRoaXMgdGV4dDoKKworCUhpIEpvaG4sIH4KKwlIZXJlIGlzIHRoZSBkaWZmIHRoYXQgZml4ZXMgdGhlIGJ1ZzogfgorCUJ5ZSwgUGllcnJlLiB+CisKK01vdmUgdGhlIGN1cnNvciB0byB0aGUgc2Vjb25kIGxpbmUgYW5kIHR5cGU6ID4KKworCTpyZWFkIHBhdGNoCisKK1RoZSBmaWxlIG5hbWVkICJwYXRjaCIgd2lsbCBiZSBpbnNlcnRlZCwgd2l0aCB0aGlzIHJlc3VsdDoKKworCUhpIEpvaG4sIH4KKwlIZXJlIGlzIHRoZSBkaWZmIHRoYXQgZml4ZXMgdGhlIGJ1ZzogfgorCTJjMiB+CisJPAlmb3IgKGkgPSAwOyBpIDw9IGxlbmd0aDsgKytpKSB+CisJLS0tIH4KKwk+CWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgfgorCUJ5ZSwgUGllcnJlLiB+CisKK1RoZSAiOnJlYWQiIGNvbW1hbmQgYWNjZXB0cyBhIHJhbmdlLiAgVGhlIGZpbGUgd2lsbCBiZSBwdXQgYmVsb3cgdGhlIGxhc3QgbGluZQorbnVtYmVyIG9mIHRoaXMgcmFuZ2UuICBUaHVzICI6JHIgcGF0Y2giIGFwcGVuZHMgdGhlIGZpbGUgInBhdGNoIiBhdCB0aGUgZW5kIG9mCit0aGUgZmlsZS4KKyAgIFdoYXQgaWYgeW91IHdhbnQgdG8gcmVhZCB0aGUgZmlsZSBhYm92ZSB0aGUgZmlyc3QgbGluZT8gIFRoaXMgY2FuIGJlIGRvbmUKK3dpdGggdGhlIGxpbmUgbnVtYmVyIHplcm8uICBUaGlzIGxpbmUgZG9lc24ndCByZWFsbHkgZXhpc3QsIHlvdSB3aWxsIGdldCBhbgorZXJyb3IgbWVzc2FnZSB3aGVuIHVzaW5nIGl0IHdpdGggbW9zdCBjb21tYW5kcy4gIEJ1dCB0aGlzIGNvbW1hbmQgaXMgYWxsb3dlZDoKKz4KKwk6MHJlYWQgcGF0Y2gKKworVGhlIGZpbGUgInBhdGNoIiB3aWxsIGJlIHB1dCBhYm92ZSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZS4KKworCitXUklUSU5HIEEgUkFOR0UgT0YgTElORVMKKworVG8gd3JpdGUgYSByYW5nZSBvZiBsaW5lcyB0byBhIGZpbGUsIHRoZSAiOndyaXRlIiBjb21tYW5kIGNhbiBiZSB1c2VkLgorV2l0aG91dCBhIHJhbmdlIGl0IHdyaXRlcyB0aGUgd2hvbGUgZmlsZS4gIFdpdGggYSByYW5nZSBvbmx5IHRoZSBzcGVjaWZpZWQKK2xpbmVzIGFyZSB3cml0dGVuOiA+CisKKwk6Liwkd3JpdGUgdGVtcG8KKworVGhpcyB3cml0ZXMgdGhlIGxpbmVzIGZyb20gdGhlIGN1cnNvciB1bnRpbCB0aGUgZW5kIG9mIHRoZSBmaWxlIGludG8gdGhlIGZpbGUKKyJ0ZW1wbyIuICBJZiB0aGlzIGZpbGUgYWxyZWFkeSBleGlzdHMgeW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuICBWaW0KK3Byb3RlY3RzIHlvdSBmcm9tIGFjY2lkZW50YWxseSBvdmVyd3JpdGluZyBhbiBleGlzdGluZyBmaWxlLiAgSWYgeW91IGtub3cgd2hhdAoreW91IGFyZSBkb2luZyBhbmQgd2FudCB0byBvdmVyd3JpdGUgdGhlIGZpbGUsIGFwcGVuZCAhOiA+CisKKwk6Liwkd3JpdGUhIHRlbXBvCisKK0NBUkVGVUw6IFRoZSAhIG11c3QgZm9sbG93IHRoZSAiOndyaXRlIiBjb21tYW5kIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdoaXRlCitzcGFjZS4gIE90aGVyd2lzZSBpdCBiZWNvbWVzIGEgZmlsdGVyIGNvbW1hbmQsIHdoaWNoIGlzIGV4cGxhaW5lZCBsYXRlciBpbgordGhpcyBjaGFwdGVyLgorCisKK0FQUEVORElORyBUTyBBIEZJTEUKKworSW4gdGhlIGZpcnN0IHNlY3Rpb24gb2YgdGhpcyBjaGFwdGVyIHdhcyBleHBsYWluZWQgaG93IHRvIGNvbGxlY3QgYSBudW1iZXIgb2YKK2xpbmVzIGludG8gYSByZWdpc3Rlci4gIFRoZSBzYW1lIGNhbiBiZSBkb25lIHRvIGNvbGxlY3QgbGluZXMgaW4gYSBmaWxlLgorV3JpdGUgdGhlIGZpcnN0IGxpbmUgd2l0aCB0aGlzIGNvbW1hbmQ6ID4KKworCToud3JpdGUgY29sbGVjdGlvbgorCitOb3cgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBzZWNvbmQgbGluZSB5b3Ugd2FudCB0byBjb2xsZWN0LCBhbmQgdHlwZSB0aGlzOiA+CisKKwk6LndyaXRlID4+Y29sbGVjdGlvbgorCitUaGUgIj4+IiB0ZWxscyBWaW0gdGhlICJjb2xsZWN0aW9uIiBmaWxlIGlzIG5vdCB0byBiZSB3cml0dGVuIGFzIGEgbmV3IGZpbGUsCitidXQgdGhlIGxpbmUgbXVzdCBiZSBhcHBlbmRlZCBhdCB0aGUgZW5kLiAgIFlvdSBjYW4gcmVwZWF0IHRoaXMgYXMgbWFueSB0aW1lcworYXMgeW91IGxpa2UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjEwLjcqCUZvcm1hdHRpbmcgdGV4dAorCitXaGVuIHlvdSBhcmUgdHlwaW5nIHBsYWluIHRleHQsIGl0J3MgbmljZSBpZiB0aGUgbGVuZ3RoIG9mIGVhY2ggbGluZSBpcworYXV0b21hdGljYWxseSB0cmltbWVkIHRvIGZpdCBpbiB0aGUgd2luZG93LiAgVG8gbWFrZSB0aGlzIGhhcHBlbiB3aGlsZQoraW5zZXJ0aW5nIHRleHQsIHNldCB0aGUgJ3RleHR3aWR0aCcgb3B0aW9uOiA+CisKKwk6c2V0IHRleHR3aWR0aD03MgorCitZb3UgbWlnaHQgcmVtZW1iZXIgdGhhdCBpbiB0aGUgZXhhbXBsZSB2aW1yYyBmaWxlIHRoaXMgY29tbWFuZCB3YXMgdXNlZCBmb3IKK2V2ZXJ5IHRleHQgZmlsZS4gIFRodXMgaWYgeW91IGFyZSB1c2luZyB0aGF0IHZpbXJjIGZpbGUsIHlvdSB3ZXJlIGFscmVhZHkKK3VzaW5nIGl0LiAgVG8gY2hlY2sgdGhlIGN1cnJlbnQgdmFsdWUgb2YgJ3RleHR3aWR0aCc6ID4KKworCTpzZXQgdGV4dHdpZHRoCisKK05vdyBsaW5lcyB3aWxsIGJlIGJyb2tlbiB0byB0YWtlIG9ubHkgdXAgdG8gNzIgY2hhcmFjdGVycy4gIEJ1dCB3aGVuIHlvdQoraW5zZXJ0IHRleHQgaGFsZndheSBhIGxpbmUsIG9yIHdoZW4geW91IGRlbGV0ZSBhIGZldyB3b3JkcywgdGhlIGxpbmVzIHdpbGwgZ2V0Cit0b28gbG9uZyBvciB0b28gc2hvcnQuICBWaW0gZG9lc24ndCBhdXRvbWF0aWNhbGx5IHJlZm9ybWF0IHRoZSB0ZXh0LgorICAgVG8gdGVsbCBWaW0gdG8gZm9ybWF0IHRoZSBjdXJyZW50IHBhcmFncmFwaDogPgorCisJZ3FhcAorCitUaGlzIHN0YXJ0cyB3aXRoIHRoZSAiZ3EiIGNvbW1hbmQsIHdoaWNoIGlzIGFuIG9wZXJhdG9yLiAgRm9sbG93aW5nIGlzICJhcCIsCit0aGUgdGV4dCBvYmplY3QgdGhhdCBzdGFuZHMgZm9yICJhIHBhcmFncmFwaCIuICBBIHBhcmFncmFwaCBpcyBzZXBhcmF0ZWQgZnJvbQordGhlIG5leHQgcGFyYWdyYXBoIGJ5IGFuIGVtcHR5IGxpbmUuCisKKwlOb3RlOgorCUEgYmxhbmsgbGluZSwgd2hpY2ggY29udGFpbnMgd2hpdGUgc3BhY2UsIGRvZXMgTk9UIHNlcGFyYXRlCisJcGFyYWdyYXBocy4gIFRoaXMgaXMgaGFyZCB0byBub3RpY2UhCisKK0luc3RlYWQgb2YgImFwIiB5b3UgY291bGQgdXNlIGFueSBtb3Rpb24gb3IgdGV4dCBvYmplY3QuICBJZiB5b3VyIHBhcmFncmFwaHMKK2FyZSBwcm9wZXJseSBzZXBhcmF0ZWQsIHlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZCB0byBmb3JtYXQgdGhlIHdob2xlIGZpbGU6ID4KKworCWdnZ3FHCisKKyJnZyIgdGFrZXMgeW91IHRvIHRoZSBmaXJzdCBsaW5lLCAiZ3EiIGlzIHRoZSBmb3JtYXQgb3BlcmF0b3IgYW5kICJHIiB0aGUKK21vdGlvbiB0aGF0IGp1bXBzIHRvIHRoZSBsYXN0IGxpbmUuCisKK0luIGNhc2UgeW91ciBwYXJhZ3JhcGhzIGFyZW4ndCBjbGVhcmx5IGRlZmluZWQsIHlvdSBjYW4gZm9ybWF0IGp1c3QgdGhlIGxpbmVzCit5b3UgbWFudWFsbHkgc2VsZWN0LiAgTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBsaW5lIHlvdSB3YW50IHRvIGZvcm1hdC4KK1N0YXJ0IHdpdGggdGhlIGNvbW1hbmQgImdxaiIuICBUaGlzIGZvcm1hdHMgdGhlIGN1cnJlbnQgbGluZSBhbmQgdGhlIG9uZSBiZWxvdworaXQuICBJZiB0aGUgZmlyc3QgbGluZSB3YXMgc2hvcnQsIHdvcmRzIGZyb20gdGhlIG5leHQgbGluZSB3aWxsIGJlIGFwcGVuZGVkLgorSWYgaXQgd2FzIHRvbyBsb25nLCB3b3JkcyB3aWxsIGJlIG1vdmVkIHRvIHRoZSBuZXh0IGxpbmUuICBUaGUgY3Vyc29yIG1vdmVzIHRvCit0aGUgc2Vjb25kIGxpbmUuICBOb3cgeW91IGNhbiB1c2UgIi4iIHRvIHJlcGVhdCB0aGUgY29tbWFuZC4gIEtlZXAgZG9pbmcgdGhpcwordW50aWwgeW91IGFyZSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZvcm1hdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTAuOCoJQ2hhbmdpbmcgY2FzZQorCitZb3UgaGF2ZSB0ZXh0IHdpdGggc2VjdGlvbiBoZWFkZXJzIGluIGxvd2VyY2FzZS4gIFlvdSB3YW50IHRvIG1ha2UgdGhlIHdvcmQKKyJzZWN0aW9uIiBhbGwgdXBwZXJjYXNlLiAgRG8gdGhpcyB3aXRoIHRoZSAiZ1UiIG9wZXJhdG9yLiAgU3RhcnQgd2l0aCB0aGUKK2N1cnNvciBpbiB0aGUgZmlyc3QgY29sdW1uOiA+CisKKwkJCSAgICAgZ1V3Cis8CXNlY3Rpb24gaGVhZGVyCSAgICAtLS0tPiAgICAgIFNFQ1RJT04gaGVhZGVyCisKK1RoZSAiZ3UiIG9wZXJhdG9yIGRvZXMgZXhhY3RseSB0aGUgb3Bwb3NpdGU6ID4KKworCQkJICAgICBndXcKKzwJU0VDVElPTiBoZWFkZXIJICAgIC0tLS0+ICAgICAgc2VjdGlvbiBoZWFkZXIKKworWW91IGNhbiBhbHNvIHVzZSAiZ34iIHRvIHN3YXAgY2FzZS4gIEFsbCB0aGVzZSBhcmUgb3BlcmF0b3JzLCB0aHVzIHRoZXkgd29yaword2l0aCBhbnkgbW90aW9uIGNvbW1hbmQsIHdpdGggdGV4dCBvYmplY3RzIGFuZCBpbiBWaXN1YWwgbW9kZS4KKyAgIFRvIG1ha2UgYW4gb3BlcmF0b3Igd29yayBvbiBsaW5lcyB5b3UgZG91YmxlIGl0LiAgVGhlIGRlbGV0ZSBvcGVyYXRvciBpcworImQiLCB0aHVzIHRvIGRlbGV0ZSBhIGxpbmUgeW91IHVzZSAiZGQiLiAgU2ltaWxhcmx5LCAiZ3VndSIgbWFrZXMgYSB3aG9sZSBsaW5lCitsb3dlcmNhc2UuICBUaGlzIGNhbiBiZSBzaG9ydGVuZWQgdG8gImd1dSIuICAiZ1VnVSIgaXMgc2hvcnRlbmVkIHRvICJnVVUiIGFuZAorImd+Z34iIHRvICJnfn4iLiAgRXhhbXBsZTogPgorCisJCQkJZ35+IAorPAlTb21lIEdJUkxTIGhhdmUgRnVuICAgIC0tLS0+ICAgc09NRSBnaXJscyBIQVZFIGZVTiB+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjEwLjkqCVVzaW5nIGFuIGV4dGVybmFsIHByb2dyYW0KKworVmltIGhhcyBhIHZlcnkgcG93ZXJmdWwgc2V0IG9mIGNvbW1hbmRzLCBpdCBjYW4gZG8gYW55dGhpbmcuICBCdXQgdGhlcmUgbWF5CitzdGlsbCBiZSBzb21ldGhpbmcgdGhhdCBhbiBleHRlcm5hbCBjb21tYW5kIGNhbiBkbyBiZXR0ZXIgb3IgZmFzdGVyLgorICAgVGhlIGNvbW1hbmQgIiF7bW90aW9ufXtwcm9ncmFtfSIgdGFrZXMgYSBibG9jayBvZiB0ZXh0IGFuZCBmaWx0ZXJzIGl0Cit0aHJvdWdoIGFuIGV4dGVybmFsIHByb2dyYW0uICBJbiBvdGhlciB3b3JkcywgaXQgcnVucyB0aGUgc3lzdGVtIGNvbW1hbmQKK3JlcHJlc2VudGVkIGJ5IHtwcm9ncmFtfSwgZ2l2aW5nIGl0IHRoZSBibG9jayBvZiB0ZXh0IHJlcHJlc2VudGVkIGJ5IHttb3Rpb259CithcyBpbnB1dC4gIFRoZSBvdXRwdXQgb2YgdGhpcyBjb21tYW5kIHRoZW4gcmVwbGFjZXMgdGhlIHNlbGVjdGVkIGJsb2NrLgorICAgQmVjYXVzZSB0aGlzIHN1bW1hcml6ZXMgYmFkbHkgaWYgeW91IGFyZSB1bmZhbWlsaWFyIHdpdGggVU5JWCBmaWx0ZXJzLCB0YWtlCithIGxvb2sgYXQgYW4gZXhhbXBsZS4gIFRoZSBzb3J0IGNvbW1hbmQgc29ydHMgYSBmaWxlLiAgSWYgeW91IGV4ZWN1dGUgdGhlCitmb2xsb3dpbmcgY29tbWFuZCwgdGhlIHVuc29ydGVkIGZpbGUgaW5wdXQudHh0IHdpbGwgYmUgc29ydGVkIGFuZCB3cml0dGVuIHRvCitvdXRwdXQudHh0LiAoVGhpcyB3b3JrcyBvbiBib3RoIFVOSVggYW5kIE1pY3Jvc29mdCBXaW5kb3dzLikgPgorCisJc29ydCA8aW5wdXQudHh0ID5vdXRwdXQudHh0CisKK05vdyBkbyB0aGUgc2FtZSB0aGluZyBpbiBWaW0uICBZb3Ugd2FudCB0byBzb3J0IGxpbmVzIDEgdGhyb3VnaCA1IG9mIGEgZmlsZS4KK1lvdSBzdGFydCBieSBwdXR0aW5nIHRoZSBjdXJzb3Igb24gbGluZSAxLiAgTmV4dCB5b3UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nCitjb21tYW5kOiA+CisKKwkhNUcKKworVGhlICIhIiB0ZWxscyBWaW0gdGhhdCB5b3UgYXJlIHBlcmZvcm1pbmcgYSBmaWx0ZXIgb3BlcmF0aW9uLiAgVGhlIFZpbSBlZGl0b3IKK2V4cGVjdHMgYSBtb3Rpb24gY29tbWFuZCB0byBmb2xsb3csIGluZGljYXRpbmcgd2hpY2ggcGFydCBvZiB0aGUgZmlsZSB0bworZmlsdGVyLiAgVGhlICI1RyIgY29tbWFuZCB0ZWxscyBWaW0gdG8gZ28gdG8gbGluZSA1LCBzbyBpdCBub3cga25vd3MgdGhhdCBpdAoraXMgdG8gZmlsdGVyIGxpbmVzIDEgKHRoZSBjdXJyZW50IGxpbmUpIHRocm91Z2ggNS4KKyAgIEluIGFudGljaXBhdGlvbiBvZiB0aGUgZmlsdGVyaW5nLCB0aGUgY3Vyc29yIGRyb3BzIHRvIHRoZSBib3R0b20gb2YgdGhlCitzY3JlZW4gYW5kIGEgISBwcm9tcHQgZGlzcGxheXMuICBZb3UgY2FuIG5vdyB0eXBlIGluIHRoZSBuYW1lIG9mIHRoZSBmaWx0ZXIKK3Byb2dyYW0sIGluIHRoaXMgY2FzZSAic29ydCIuICBUaGVyZWZvcmUsIHlvdXIgZnVsbCBjb21tYW5kIGlzIGFzIGZvbGxvd3M6ID4KKworCSE1R3NvcnQ8RW50ZXI+CisKK1RoZSByZXN1bHQgaXMgdGhhdCB0aGUgc29ydCBwcm9ncmFtIGlzIHJ1biBvbiB0aGUgZmlyc3QgNSBsaW5lcy4gIFRoZSBvdXRwdXQKK29mIHRoZSBwcm9ncmFtIHJlcGxhY2VzIHRoZXNlIGxpbmVzLgorCisJbGluZSA1NQkJCSAgICAgIGxpbmUgMTEKKwlsaW5lIDMzCQkJICAgICAgbGluZSAyMgorCWxpbmUgMTEJCS0tPgkgICAgICBsaW5lIDMzCisJbGluZSAyMgkJCSAgICAgIGxpbmUgNDQKKwlsaW5lIDQ0CQkJICAgICAgbGluZSA1NQorCWxhc3QgbGluZQkJICAgICAgbGFzdCBsaW5lCisKK1RoZSAiISEiIGNvbW1hbmQgZmlsdGVycyB0aGUgY3VycmVudCBsaW5lIHRocm91Z2ggYSBmaWx0ZXIuICBJbiBVbml4IHRoZSAiZGF0ZSIKK2NvbW1hbmQgcHJpbnRzIHRoZSBjdXJyZW50IHRpbWUgYW5kIGRhdGUuICAiISFkYXRlPEVudGVyPiIgcmVwbGFjZXMgdGhlIGN1cnJlbnQKK2xpbmUgd2l0aCB0aGUgb3V0cHV0IG9mICJkYXRlIi4gIFRoaXMgaXMgdXNlZnVsIHRvIGFkZCBhIHRpbWVzdGFtcCB0byBhIGZpbGUuCisKKworV0hFTiBJVCBET0VTTidUIFdPUksKKworU3RhcnRpbmcgYSBzaGVsbCwgc2VuZGluZyBpdCB0ZXh0IGFuZCBjYXB0dXJpbmcgdGhlIG91dHB1dCByZXF1aXJlcyB0aGF0IFZpbQora25vd3MgaG93IHRoZSBzaGVsbCB3b3JrcyBleGFjdGx5LiAgV2hlbiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIGZpbHRlcmluZywKK2NoZWNrIHRoZSB2YWx1ZXMgb2YgdGhlc2Ugb3B0aW9uczoKKworCSdzaGVsbCcJCXNwZWNpZmllcyB0aGUgcHJvZ3JhbSB0aGF0IFZpbSB1c2VzIHRvIGV4ZWN1dGUKKwkJCWV4dGVybmFsIHByb2dyYW1zLgorCSdzaGVsbGNtZGZsYWcnCWFyZ3VtZW50IHRvIHBhc3MgYSBjb21tYW5kIHRvIHRoZSBzaGVsbAorCSdzaGVsbHF1b3RlJwlxdW90ZSB0byBiZSB1c2VkIGFyb3VuZCB0aGUgY29tbWFuZAorCSdzaGVsbHhxdW90ZScJcXVvdGUgdG8gYmUgdXNlZCBhcm91bmQgdGhlIGNvbW1hbmQgYW5kIHJlZGlyZWN0aW9uCisJJ3NoZWxsdHlwZScJa2luZCBvZiBzaGVsbCAob25seSBmb3IgdGhlIEFtaWdhKQorCSdzaGVsbHNsYXNoJwl1c2UgZm9yd2FyZCBzbGFzaGVzIGluIHRoZSBjb21tYW5kIChvbmx5IGZvcgorCQkJTVMtV2luZG93cyBhbmQgYWxpa2VzKQorCSdzaGVsbHJlZGlyJwlzdHJpbmcgdXNlZCB0byB3cml0ZSB0aGUgY29tbWFuZCBvdXRwdXQgaW50byBhIGZpbGUKKworT24gVW5peCB0aGlzIGlzIGhhcmRseSBldmVyIGEgcHJvYmxlbSwgYmVjYXVzZSB0aGVyZSBhcmUgdHdvIGtpbmRzIG9mIHNoZWxsczoKKyJzaCIgbGlrZSBhbmQgImNzaCIgbGlrZS4gIFZpbSBjaGVja3MgdGhlICdzaGVsbCcgb3B0aW9uIGFuZCBzZXRzIHJlbGF0ZWQKK29wdGlvbnMgYXV0b21hdGljYWxseSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgc2VlcyAiY3NoIiBzb21ld2hlcmUgaW4KKydzaGVsbCcuCisgICBPbiBNUy1XaW5kb3dzLCBob3dldmVyLCB0aGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgc2hlbGxzIGFuZCB5b3UgbWlnaHQgaGF2ZQordG8gdHVuZSB0aGUgb3B0aW9ucyB0byBtYWtlIGZpbHRlcmluZyB3b3JrLiAgQ2hlY2sgdGhlIGhlbHAgZm9yIHRoZSBvcHRpb25zCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitSRUFESU5HIENPTU1BTkQgT1VUUFVUCisKK1RvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpbnRvIHRoZSBmaWxlLCB1c2UgdGhpczoKKworb24gVW5peDogPgorCTpyZWFkICFscworb24gTVMtV2luZG93czogPgorCTpyZWFkICFkaXIKKworVGhlIG91dHB1dCBvZiB0aGUgImxzIiBvciAiZGlyIiBjb21tYW5kIGlzIGNhcHR1cmVkIGFuZCBpbnNlcnRlZCBpbiB0aGUgdGV4dCwKK2JlbG93IHRoZSBjdXJzb3IuICBUaGlzIGlzIHNpbWlsYXIgdG8gcmVhZGluZyBhIGZpbGUsIGV4Y2VwdCB0aGF0IHRoZSAiISIgaXMKK3VzZWQgdG8gdGVsbCBWaW0gdGhhdCBhIGNvbW1hbmQgZm9sbG93cy4KKyAgIFRoZSBjb21tYW5kIG1heSBoYXZlIGFyZ3VtZW50cy4gIEFuZCBhIHJhbmdlIGNhbiBiZSB1c2VkIHRvIHRlbGwgd2hlcmUgVmltCitzaG91bGQgcHV0IHRoZSBsaW5lczogPgorCisJOjByZWFkICFkYXRlIC11CisKK1RoaXMgaW5zZXJ0cyB0aGUgY3VycmVudCB0aW1lIGFuZCBkYXRlIGluIFVUQyBmb3JtYXQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4KKyhXZWxsLCBpZiB5b3UgaGF2ZSBhIGRhdGUgY29tbWFuZCB0aGF0IGFjY2VwdHMgdGhlICItdSIgYXJndW1lbnQuKSAgTm90ZSB0aGUKK2RpZmZlcmVuY2Ugd2l0aCB1c2luZyAiISFkYXRlIjogdGhhdCByZXBsYWNlZCBhIGxpbmUsIHdoaWxlICI6cmVhZCAhZGF0ZSIgd2lsbAoraW5zZXJ0IGEgbGluZS4KKworCitXUklUSU5HIFRFWFQgVE8gQSBDT01NQU5ECisKK1RoZSBVbml4IGNvbW1hbmQgIndjIiBjb3VudHMgd29yZHMuICBUbyBjb3VudCB0aGUgd29yZHMgaW4gdGhlIGN1cnJlbnQgZmlsZTogPgorCisJOndyaXRlICF3YworCitUaGlzIGlzIHRoZSBzYW1lIHdyaXRlIGNvbW1hbmQgYXMgYmVmb3JlLCBidXQgaW5zdGVhZCBvZiBhIGZpbGUgbmFtZSB0aGUgIiEiCitjaGFyYWN0ZXIgaXMgdXNlZCBhbmQgdGhlIG5hbWUgb2YgYW4gZXh0ZXJuYWwgY29tbWFuZC4gIFRoZSB3cml0dGVuIHRleHQgd2lsbAorYmUgcGFzc2VkIHRvIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBhcyBpdHMgc3RhbmRhcmQgaW5wdXQuICBUaGUgb3V0cHV0IGNvdWxkCitsb29rIGxpa2UgdGhpczoKKworICAgICAgIDQgICAgICA0NyAgICAgMjQ5IH4KKworVGhlICJ3YyIgY29tbWFuZCBpc24ndCB2ZXJib3NlLiAgVGhpcyBtZWFucyB5b3UgaGF2ZSA0IGxpbmVzLCA0NyB3b3JkcyBhbmQgMjQ5CitjaGFyYWN0ZXJzLgorCitXYXRjaCBvdXQgZm9yIHRoaXMgbWlzdGFrZTogPgorCisJOndyaXRlISB3YworCitUaGlzIHdpbGwgd3JpdGUgdGhlIGZpbGUgIndjIiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdpdGggZm9yY2UuICBXaGl0ZQorc3BhY2UgaXMgaW1wb3J0YW50IGhlcmUhCisKKworUkVEUkFXSU5HIFRIRSBTQ1JFRU4KKworSWYgdGhlIGV4dGVybmFsIGNvbW1hbmQgcHJvZHVjZWQgYW4gZXJyb3IgbWVzc2FnZSwgdGhlIGRpc3BsYXkgbWF5IGhhdmUgYmVlbgorbWVzc2VkIHVwLiAgVmltIGlzIHZlcnkgZWZmaWNpZW50IGFuZCBvbmx5IHJlZHJhd3MgdGhvc2UgcGFydHMgb2YgdGhlIHNjcmVlbgordGhhdCBpdCBrbm93cyBuZWVkIHJlZHJhd2luZy4gIEJ1dCBpdCBjYW4ndCBrbm93IGFib3V0IHdoYXQgYW5vdGhlciBwcm9ncmFtCitoYXMgd3JpdHRlbi4gIFRvIHRlbGwgVmltIHRvIHJlZHJhdyB0aGUgc2NyZWVuOiA+CisKKwlDVFJMLUwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8xMS50eHR8ICBSZWNvdmVyaW5nIGZyb20gYSBjcmFzaAorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8xMS50eHQgYi9ydW50aW1lL2RvYy91c3JfMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZmYzODQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMTEudHh0CkBAIC0wLDAgKzEsMjg3IEBACisqdXNyXzExLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgQXByIDIzCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICBSZWNvdmVyaW5nIGZyb20gYSBjcmFzaAorCisKK0RpZCB5b3VyIGNvbXB1dGVyIGNyYXNoPyAgQW5kIHlvdSBqdXN0IHNwZW50IGhvdXJzIGVkaXRpbmc/ICBEb24ndCBwYW5pYyEgIFZpbQora2VlcHMgZW5vdWdoIGluZm9ybWF0aW9uIG9uIGhhcmRkaXNrIHRvIGJlIGFibGUgdG8gcmVzdG9yZSBtb3N0IG9mIHlvdXIgd29yay4KK1RoaXMgY2hhcHRlciBzaG93cyB5b3UgaG93IHRvIGdldCB5b3VyIHdvcmsgYmFjayBhbmQgZXhwbGFpbnMgaG93IHRoZSBzd2FwCitmaWxlIGlzIHVzZWQuCisKK3wxMS4xfAlCYXNpYyByZWNvdmVyeQorfDExLjJ8CVdoZXJlIGlzIHRoZSBzd2FwIGZpbGU/Cit8MTEuM3wJQ3Jhc2hlZCBvciBub3Q/Cit8MTEuNHwJRnVydGhlciByZWFkaW5nCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzEyLnR4dHwgIENsZXZlciB0cmlja3MKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzEwLnR4dHwgIE1ha2luZyBiaWcgY2hhbmdlcworVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTEuMSoJQmFzaWMgcmVjb3ZlcnkKKworSW4gbW9zdCBjYXNlcyByZWNvdmVyaW5nIGEgZmlsZSBpcyBxdWl0ZSBzaW1wbGUsIGFzc3VtaW5nIHlvdSBrbm93IHdoaWNoIGZpbGUKK3lvdSB3ZXJlIGVkaXRpbmcgKGFuZCB0aGUgaGFyZGRpc2sgaXMgc3RpbGwgd29ya2luZykuICBTdGFydCBWaW0gb24gdGhlIGZpbGUsCit3aXRoIHRoZSAiLXIiIGFyZ3VtZW50IGFkZGVkOiA+CisKKwl2aW0gLXIgaGVscC50eHQKKworVmltIHdpbGwgcmVhZCB0aGUgc3dhcCBmaWxlICh1c2VkIHRvIHN0b3JlIHRleHQgeW91IHdlcmUgZWRpdGluZykgYW5kIG1heSByZWFkCitiaXRzIGFuZCBwaWVjZXMgb2YgdGhlIG9yaWdpbmFsIGZpbGUuICBJZiBhbGwgaXMgd2VsbCwgeW91IHdpbGwgc2VlIHRoZXNlCittZXNzYWdlcyAod2l0aCBkaWZmZXJlbnQgZmlsZSBuYW1lcywgb2YgY291cnNlKToKKworCVVzaW5nIHN3YXAgZmlsZSAiLmhlbHAudHh0LnN3cCIgfgorCU9yaWdpbmFsIGZpbGUgIn4vdmltL3J1bnRpbWUvZG9jL2hlbHAudHh0IiB+CisJUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIH4KKwkoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWUgfgorCWFuZCBydW4gZGlmZiB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIHRvIGNoZWNrIGZvciBjaGFuZ2VzKSB+CisJRGVsZXRlIHRoZSAuc3dwIGZpbGUgYWZ0ZXJ3YXJkcy4gfgorCitUbyBiZSBvbiB0aGUgc2FmZSBzaWRlLCB3cml0ZSB0aGlzIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lOiA+CisKKwk6d3JpdGUgaGVscC50eHQucmVjb3ZlcmVkCisKK0NvbXBhcmUgdGhlIGZpbGUgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBpZiB5b3UgZW5kZWQgdXAgd2l0aCB3aGF0IHlvdQorZXhwZWN0ZWQuICBWaW1kaWZmIGlzIHZlcnkgdXNlZnVsIGZvciB0aGlzIHwwOC43fC4gIFdhdGNoIG91dCBmb3IgdGhlIG9yaWdpbmFsCitmaWxlIHRvIGNvbnRhaW4gYSBtb3JlIHJlY2VudCB2ZXJzaW9uICh5b3Ugc2F2ZWQgdGhlIGZpbGUganVzdCBiZWZvcmUgdGhlCitjb21wdXRlciBjcmFzaGVkKS4gIEFuZCBjaGVjayB0aGF0IG5vIGxpbmVzIGFyZSBtaXNzaW5nIChzb21ldGhpbmcgd2VudCB3cm9uZwordGhhdCBWaW0gY291bGQgbm90IHJlY292ZXIpLgorICAgSWYgVmltIHByb2R1Y2VzIHdhcm5pbmcgbWVzc2FnZXMgd2hlbiByZWNvdmVyaW5nLCByZWFkIHRoZW0gY2FyZWZ1bGx5LgorVGhpcyBpcyByYXJlIHRob3VnaC4KKworSXQncyBub3JtYWwgdGhhdCB0aGUgbGFzdCBmZXcgY2hhbmdlcyBjYW4gbm90IGJlIHJlY292ZXJlZC4gIFZpbSBmbHVzaGVzIHRoZQorY2hhbmdlcyB0byBkaXNrIHdoZW4geW91IGRvbid0IHR5cGUgZm9yIGFib3V0IGZvdXIgc2Vjb25kcywgb3IgYWZ0ZXIgdHlwaW5nCithYm91dCB0d28gaHVuZHJlZCBjaGFyYWN0ZXJzLiAgVGhpcyBpcyBzZXQgd2l0aCB0aGUgJ3VwZGF0ZXRpbWUnIGFuZAorJ3VwZGF0ZWNvdW50JyBvcHRpb25zLiAgVGh1cyB3aGVuIFZpbSBkaWRuJ3QgZ2V0IGEgY2hhbmNlIHRvIHNhdmUgaXRzZWxmIHdoZW4KK3RoZSBzeXN0ZW0gd2VudCBkb3duLCB0aGUgY2hhbmdlcyBhZnRlciB0aGUgbGFzdCBmbHVzaCB3aWxsIGJlIGxvc3QuCisKK0lmIHlvdSB3ZXJlIGVkaXRpbmcgd2l0aG91dCBhIGZpbGUgbmFtZSwgZ2l2ZSBhbiBlbXB0eSBzdHJpbmcgYXMgYXJndW1lbnQ6ID4KKworCXZpbSAtciAiIgorCitZb3UgbXVzdCBiZSBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5LCBvdGhlcndpc2UgVmltIGNhbid0IGZpbmQgdGhlIHN3YXAgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTEuMioJV2hlcmUgaXMgdGhlIHN3YXAgZmlsZT8KKworVmltIGNhbiBzdG9yZSB0aGUgc3dhcCBmaWxlIGluIHNldmVyYWwgcGxhY2VzLiAgTm9ybWFsbHkgaXQgaXMgaW4gdGhlIHNhbWUKK2RpcmVjdG9yeSBhcyB0aGUgb3JpZ2luYWwgZmlsZS4gIFRvIGZpbmQgaXQsIGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZQorZmlsZSwgYW5kIHVzZTogPgorCisJdmltIC1yCisKK1ZpbSB3aWxsIGxpc3QgdGhlIHN3YXAgZmlsZXMgdGhhdCBpdCBjYW4gZmluZC4gIEl0IHdpbGwgYWxzbyBsb29rIGluIG90aGVyCitkaXJlY3RvcmllcyB3aGVyZSB0aGUgc3dhcCBmaWxlIGZvciBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgbWF5IGJlCitsb2NhdGVkLiAgSXQgd2lsbCBub3QgZmluZCBzd2FwIGZpbGVzIGluIGFueSBvdGhlciBkaXJlY3RvcmllcyB0aG91Z2gsIGl0Citkb2Vzbid0IHNlYXJjaCB0aGUgZGlyZWN0b3J5IHRyZWUuCisgICBUaGUgb3V0cHV0IGNvdWxkIGxvb2sgbGlrZSB0aGlzOgorCisJU3dhcCBmaWxlcyBmb3VuZDogfgorCSAgIEluIGN1cnJlbnQgZGlyZWN0b3J5OiB+CisJMS4gICAgLm1haW4uYy5zd3AgfgorCQkgIG93bmVkIGJ5OiBtb29sICAgZGF0ZWQ6IFR1ZSBNYXkgMjkgMjE6MDA6MjUgMjAwMSB+CisJCSBmaWxlIG5hbWU6IH5tb29sL3ZpbS92aW02L3NyYy9tYWluLmMgfgorCQkgIG1vZGlmaWVkOiBZRVMgfgorCQkgdXNlciBuYW1lOiBtb29sICAgaG9zdCBuYW1lOiBtYXNha2EubW9vbGVuYWFyLm5ldCB+CisJCXByb2Nlc3MgSUQ6IDEyNTI1IH4KKwkgICBJbiBkaXJlY3Rvcnkgfi90bXA6IH4KKwkgICAgICAtLSBub25lIC0tIH4KKwkgICBJbiBkaXJlY3RvcnkgL3Zhci90bXA6IH4KKwkgICAgICAtLSBub25lIC0tIH4KKwkgICBJbiBkaXJlY3RvcnkgL3RtcDogfgorCSAgICAgIC0tIG5vbmUgLS0gfgorCitJZiB0aGVyZSBhcmUgc2V2ZXJhbCBzd2FwIGZpbGVzIHRoYXQgbG9vayBsaWtlIHRoZXkgbWF5IGJlIHRoZSBvbmUgeW91IHdhbnQgdG8KK3VzZSwgYSBsaXN0IGlzIGdpdmVuIG9mIHRoZXNlIHN3YXAgZmlsZXMgYW5kIHlvdSBhcmUgcmVxdWVzdGVkIHRvIGVudGVyIHRoZQorbnVtYmVyIG9mIHRoZSBvbmUgeW91IHdhbnQgdG8gdXNlLiAgQ2FyZWZ1bGx5IGxvb2sgYXQgdGhlIGRhdGVzIHRvIGRlY2lkZQord2hpY2ggb25lIHlvdSB3YW50IHRvIHVzZS4KKyAgIEluIGNhc2UgeW91IGRvbid0IGtub3cgd2hpY2ggb25lIHRvIHVzZSwganVzdCB0cnkgdGhlbSBvbmUgYnkgb25lIGFuZCBjaGVjawordGhlIHJlc3VsdGluZyBmaWxlcyBpZiB0aGV5IGFyZSB3aGF0IHlvdSBleHBlY3RlZC4KKworCitVU0lORyBBIFNQRUNJRklDIFNXQVAgRklMRQorCitJZiB5b3Uga25vdyB3aGljaCBzd2FwIGZpbGUgbmVlZHMgdG8gYmUgdXNlZCwgeW91IGNhbiByZWNvdmVyIGJ5IGdpdmluZyB0aGUKK3N3YXAgZmlsZSBuYW1lLiAgVmltIHdpbGwgdGhlbiBmaW5kcyBvdXQgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUgZnJvbQordGhlIHN3YXAgZmlsZS4KKworRXhhbXBsZTogPgorCXZpbSAtciAuaGVscC50eHQuc3dvCisKK1RoaXMgaXMgYWxzbyBoYW5keSB3aGVuIHRoZSBzd2FwIGZpbGUgaXMgaW4gYW5vdGhlciBkaXJlY3RvcnkgdGhhbiBleHBlY3RlZC4KK0lmIHRoaXMgc3RpbGwgZG9lcyBub3Qgd29yaywgc2VlIHdoYXQgZmlsZSBuYW1lcyBWaW0gcmVwb3J0cyBhbmQgcmVuYW1lIHRoZQorZmlsZXMgYWNjb3JkaW5nbHkuICBDaGVjayB0aGUgJ2RpcmVjdG9yeScgb3B0aW9uIHRvIHNlZSB3aGVyZSBWaW0gbWF5IGhhdmUKK3B1dCB0aGUgc3dhcCBmaWxlLgorCisJTm90ZToKKwlWaW0gdHJpZXMgdG8gZmluZCB0aGUgc3dhcCBmaWxlIGJ5IHNlYXJjaGluZyB0aGUgZGlyZWN0b3JpZXMgaW4gdGhlCisJJ2Rpcicgb3B0aW9uLCBsb29raW5nIGZvciBmaWxlcyB0aGF0IG1hdGNoICJmaWxlbmFtZS5zdz8iLiAgSWYKKwl3aWxkY2FyZCBleHBhbnNpb24gZG9lc24ndCB3b3JrIChlLmcuLCB3aGVuIHRoZSAnc2hlbGwnIG9wdGlvbiBpcworCWludmFsaWQpLCBWaW0gZG9lcyBhIGRlc3BlcmF0ZSB0cnkgdG8gZmluZCB0aGUgZmlsZSAiZmlsZW5hbWUuc3dwIi4KKwlJZiB0aGF0IGZhaWxzIHRvbywgeW91IHdpbGwgaGF2ZSB0byBnaXZlIHRoZSBuYW1lIG9mIHRoZSBzd2FwZmlsZQorCWl0c2VsZiB0byBiZSBhYmxlIHRvIHJlY292ZXIgdGhlIGZpbGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjExLjMqCUNyYXNoZWQgb3Igbm90PwkJCQkJKkFUVEVOVElPTiogKkUzMjUqCisKK1ZpbSB0cmllcyB0byBwcm90ZWN0IHlvdSBmcm9tIGRvaW5nIHN0dXBpZCB0aGluZ3MuICBTdXBwb3NlIHlvdSBpbm5vY2VudGx5CitzdGFydCBlZGl0aW5nIGEgZmlsZSwgZXhwZWN0aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSB0byBzaG93IHVwLiAgSW5zdGVhZCwKK1ZpbSBwcm9kdWNlcyBhIHZlcnkgbG9uZyBtZXNzYWdlOgorCisJCUUzMjU6IEFUVEVOVElPTiB+CisJRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgIi5tYWluLmMuc3dwIiB+CisJCSAgb3duZWQgYnk6IG1vb2wgICBkYXRlZDogVHVlIE1heSAyOSAyMTowOToyOCAyMDAxIH4KKwkJIGZpbGUgbmFtZTogfm1vb2wvdmltL3ZpbTYvc3JjL21haW4uYyB+CisJCSAgbW9kaWZpZWQ6IG5vIH4KKwkJIHVzZXIgbmFtZTogbW9vbCAgIGhvc3QgbmFtZTogbWFzYWthLm1vb2xlbmFhci5uZXQgfgorCQlwcm9jZXNzIElEOiAxMjU1OSAoc3RpbGwgcnVubmluZykgfgorCVdoaWxlIG9wZW5pbmcgZmlsZSAibWFpbi5jIiB+CisJCSAgICAgZGF0ZWQ6IFR1ZSBNYXkgMjkgMTk6NDY6MTIgMjAwMSB+CisgfgorCSgxKSBBbm90aGVyIHByb2dyYW0gbWF5IGJlIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS4gfgorCSAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d28gfgorCSAgICBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGZpbGUgd2hlbiBtYWtpbmcgY2hhbmdlcy4gfgorCSAgICBRdWl0LCBvciBjb250aW51ZSB3aXRoIGNhdXRpb24uIH4KKyB+CisJKDIpIEFuIGVkaXQgc2Vzc2lvbiBmb3IgdGhpcyBmaWxlIGNyYXNoZWQuIH4KKwkgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdXNlICI6cmVjb3ZlciIgb3IgInZpbSAtciBtYWluLmMiIH4KKwkgICAgdG8gcmVjb3ZlciB0aGUgY2hhbmdlcyAoc2VlICI6aGVscCByZWNvdmVyeSIpLiB+CisJICAgIElmIHlvdSBkaWQgdGhpcyBhbHJlYWR5LCBkZWxldGUgdGhlIHN3YXAgZmlsZSAiLm1haW4uYy5zd3AiIH4KKwkgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLiB+CisKK1lvdSBnZXQgdGhpcyBtZXNzYWdlLCBiZWNhdXNlLCB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBmaWxlLCBWaW0gY2hlY2tzIGlmIGEKK3N3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyBmb3IgdGhhdCBmaWxlLiAgSWYgdGhlcmUgaXMgb25lLCB0aGVyZSBtdXN0IGJlCitzb21ldGhpbmcgd3JvbmcuICBJdCBtYXkgYmUgb25lIG9mIHRoZXNlIHR3byBzaXR1YXRpb25zLgorCisxLiBBbm90aGVyIGVkaXQgc2Vzc2lvbiBpcyBhY3RpdmUgb24gdGhpcyBmaWxlLiAgTG9vayBpbiB0aGUgbWVzc2FnZSBmb3IgdGhlCisgICBsaW5lIHdpdGggInByb2Nlc3MgSUQiLiAgSXQgbWlnaHQgbG9vayBsaWtlIHRoaXM6CisKKwkJcHJvY2VzcyBJRDogMTI1NTkgKHN0aWxsIHJ1bm5pbmcpIH4KKworICAgVGhlIHRleHQgIihzdGlsbCBydW5uaW5nKSIgaW5kaWNhdGVzIHRoYXQgdGhlIHByb2Nlc3MgZWRpdGluZyB0aGlzIGZpbGUKKyAgIHJ1bnMgb24gdGhlIHNhbWUgY29tcHV0ZXIuICBXaGVuIHdvcmtpbmcgb24gYSBub24tVW5peCBzeXN0ZW0geW91IHdpbGwgbm90CisgICBnZXQgdGhpcyBleHRyYSBoaW50LiAgV2hlbiBlZGl0aW5nIGEgZmlsZSBvdmVyIGEgbmV0d29yaywgeW91IG1heSBub3Qgc2VlCisgICB0aGUgaGludCwgYmVjYXVzZSB0aGUgcHJvY2VzcyBtaWdodCBiZSBydW5uaW5nIG9uIGFub3RoZXIgY29tcHV0ZXIuICBJbgorICAgdGhvc2UgdHdvIGNhc2VzIHlvdSBtdXN0IGZpbmQgb3V0IHdoYXQgdGhlIHNpdHVhdGlvbiBpcyB5b3Vyc2VsZi4KKyAgICAgIElmIHRoZXJlIGlzIGFub3RoZXIgVmltIGVkaXRpbmcgdGhlIHNhbWUgZmlsZSwgY29udGludWluZyB0byBlZGl0IHdpbGwKKyAgIHJlc3VsdCBpbiB0d28gdmVyc2lvbnMgb2YgdGhlIHNhbWUgZmlsZS4gIFRoZSBvbmUgdGhhdCBpcyB3cml0dGVuIGxhc3Qgd2lsbAorICAgb3ZlcndyaXRlIHRoZSBvdGhlciBvbmUsIHJlc3VsdGluZyBpbiBsb3NzIG9mIGNoYW5nZXMuICBZb3UgYmV0dGVyIHF1aXQKKyAgIHRoaXMgVmltLgorCisyLiBUaGUgc3dhcCBmaWxlIG1pZ2h0IGJlIHRoZSByZXN1bHQgZnJvbSBhIHByZXZpb3VzIGNyYXNoIG9mIFZpbSBvciB0aGUKKyAgIGNvbXB1dGVyLiAgQ2hlY2sgdGhlIGRhdGVzIG1lbnRpb25lZCBpbiB0aGUgbWVzc2FnZS4gIElmIHRoZSBkYXRlIG9mIHRoZQorICAgc3dhcCBmaWxlIGlzIG5ld2VyIHRoYW4gdGhlIGZpbGUgeW91IHdlcmUgZWRpdGluZywgYW5kIHRoaXMgbGluZSBhcHBlYXJzOgorCisJCW1vZGlmaWVkOiBZRVMgfgorCisgICBUaGVuIHlvdSB2ZXJ5IGxpa2VseSBoYXZlIGEgY3Jhc2hlZCBlZGl0IHNlc3Npb24gdGhhdCBpcyB3b3J0aCByZWNvdmVyaW5nLgorICAgICAgSWYgdGhlIGRhdGUgb2YgdGhlIGZpbGUgaXMgbmV3ZXIgdGhhbiB0aGUgZGF0ZSBvZiB0aGUgc3dhcCBmaWxlLCB0aGVuCisgICBlaXRoZXIgaXQgd2FzIGNoYW5nZWQgYWZ0ZXIgdGhlIGNyYXNoIChwZXJoYXBzIHlvdSByZWNvdmVyZWQgaXQgZWFybGllciwKKyAgIGJ1dCBkaWRuJ3QgZGVsZXRlIHRoZSBzd2FwIGZpbGU/KSwgb3IgZWxzZSB0aGUgZmlsZSB3YXMgc2F2ZWQgYmVmb3JlIHRoZQorICAgY3Jhc2ggYnV0IGFmdGVyIHRoZSBsYXN0IHdyaXRlIG9mIHRoZSBzd2FwIGZpbGUgKHRoZW4geW91J3JlIGx1Y2t5OiB5b3UKKyAgIGRvbid0IGV2ZW4gbmVlZCB0aGF0IG9sZCBzd2FwIGZpbGUpLiBWaW0gd2lsbCB3YXJuIHlvdSBmb3IgdGhpcyB3aXRoIHRoaXMKKyAgIGV4dHJhIGxpbmU6CisKKyAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlISB+CisKKworVU5SRUFEQUJMRSBTV0FQIEZJTEUKKworU29tZXRpbWVzIHRoZSBsaW5lCisKKwlbY2Fubm90IGJlIHJlYWRdIH4KKword2lsbCBhcHBlYXIgdW5kZXIgdGhlIG5hbWUgb2YgdGhlIHN3YXAgZmlsZS4gVGhpcyBjYW4gYmUgZ29vZCBvciBiYWQsCitkZXBlbmRpbmcgb24gY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgZ29vZCBpZiBhIHByZXZpb3VzIGVkaXRpbmcgc2Vzc2lvbiBjcmFzaGVkIHdpdGhvdXQgaGF2aW5nIG1hZGUgYW55CitjaGFuZ2VzIHRvIHRoZSBmaWxlLiBUaGVuIGEgZGlyZWN0b3J5IGxpc3Rpbmcgb2YgdGhlIHN3YXAgZmlsZSB3aWxsIHNob3cKK3RoYXQgaXQgaGFzIHplcm8gYnl0ZXMuIFlvdSBtYXkgZGVsZXRlIGl0IGFuZCBwcm9jZWVkLgorCitJdCBpcyBzbGlnaHRseSBiYWQgaWYgeW91IGRvbid0IGhhdmUgcmVhZCBwZXJtaXNzaW9uIGZvciB0aGUgc3dhcCBmaWxlLiBZb3UKK21heSB3YW50IHRvIHZpZXcgdGhlIGZpbGUgcmVhZC1vbmx5LCBvciBxdWl0LiBPbiBtdWx0aS11c2VyIHN5c3RlbXMsIGlmIHlvdQoreW91cnNlbGYgZGlkIHRoZSBsYXN0IGNoYW5nZXMgdW5kZXIgYSBkaWZmZXJlbnQgbG9naW4gbmFtZSwgYSBsb2dvdXQKK2ZvbGxvd2VkIGJ5IGEgbG9naW4gdW5kZXIgdGhhdCBvdGhlciBuYW1lIG1pZ2h0IGN1cmUgdGhlICJyZWFkIGVycm9yIi4gT3IKK2Vsc2UgeW91IG1pZ2h0IHdhbnQgdG8gZmluZCBvdXQgd2hvIGxhc3QgZWRpdGVkIChvciBpcyBlZGl0aW5nKSB0aGUgZmlsZSBhbmQKK2hhdmUgYSB0YWxrIHdpdGggdGhlbS4KKworSXQgaXMgdmVyeSBiYWQgaWYgaXQgbWVhbnMgdGhlcmUgaXMgYSBwaHlzaWNhbCByZWFkIGVycm9yIG9uIHRoZSBkaXNrCitjb250YWluaW5nIHRoZSBzd2FwIGZpbGUuICBGb3J0dW5hdGVseSwgdGhpcyBhbG1vc3QgbmV2ZXIgaGFwcGVucy4KK1lvdSBtYXkgd2FudCB0byB2aWV3IHRoZSBmaWxlIHJlYWQtb25seSBhdCBmaXJzdCAoaWYgeW91IGNhbiksIHRvIHNlZSB0aGUKK2V4dGVudCBvZiB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgImZvcmdvdHRlbiIuICBJZiB5b3UgYXJlIHRoZSBvbmUgaW4gY2hhcmdlIG9mCit0aGF0IGZpbGUsIGJlIHByZXBhcmVkIHRvIHJlZG8geW91ciBsYXN0IGNoYW5nZXMuCisKKworV0hBVCBUTyBETz8KKworSWYgZGlhbG9ncyBhcmUgc3VwcG9ydGVkIHlvdSB3aWxsIGJlIGFza2VkIHRvIHNlbGVjdCBvbmUgb2YgZml2ZSBjaG9pY2VzOgorCisgIFN3YXAgZmlsZSAiLm1haW4uYy5zd3AiIGFscmVhZHkgZXhpc3RzISB+CisgIFtPXXBlbiBSZWFkLU9ubHksIChFKWRpdCBhbnl3YXksIChSKWVjb3ZlciwgKFEpdWl0LCAoQSlib3J0LCAoRCllbGV0ZSBpdDogfgorCitPICBPcGVuIHRoZSBmaWxlIHJlYWRvbmx5LiAgVXNlIHRoaXMgd2hlbiB5b3UganVzdCB3YW50IHRvIHZpZXcgdGhlIGZpbGUgYW5kCisgICBkb24ndCBuZWVkIHRvIHJlY292ZXIgaXQuICBZb3UgbWlnaHQgd2FudCB0byB1c2UgdGhpcyB3aGVuIHlvdSBrbm93IHNvbWVvbmUKKyAgIGVsc2UgaXMgZWRpdGluZyB0aGUgZmlsZSwgYnV0IHlvdSBqdXN0IHdhbnQgdG8gbG9vayBpbiBpdCBhbmQgbm90IG1ha2UKKyAgIGNoYW5nZXMuCisKK0UgIEVkaXQgdGhlIGZpbGUgYW55d2F5LiAgVXNlIHRoaXMgd2l0aCBjYXV0aW9uISAgSWYgdGhlIGZpbGUgaXMgYmVpbmcgZWRpdGVkCisgICBpbiBhbm90aGVyIFZpbSwgeW91IG1pZ2h0IGVuZCB1cCB3aXRoIHR3byB2ZXJzaW9ucyBvZiB0aGUgZmlsZS4gIFZpbSB3aWxsCisgICB0cnkgdG8gd2FybiB5b3Ugd2hlbiB0aGlzIGhhcHBlbnMsIGJ1dCBiZXR0ZXIgYmUgc2FmZSB0aGVuIHNvcnJ5LgorCitSICBSZWNvdmVyIHRoZSBmaWxlIGZyb20gdGhlIHN3YXAgZmlsZS4gIFVzZSB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIHN3YXAKKyAgIGZpbGUgY29udGFpbnMgY2hhbmdlcyB0aGF0IHlvdSB3YW50IHRvIHJlY292ZXIuCisKK1EgIFF1aXQuICBUaGlzIGF2b2lkcyBzdGFydGluZyB0byBlZGl0IHRoZSBmaWxlLiAgVXNlIHRoaXMgaWYgdGhlcmUgaXMgYW5vdGhlcgorICAgVmltIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS4KKyAgICAgIFdoZW4geW91IGp1c3Qgc3RhcnRlZCBWaW0sIHRoaXMgd2lsbCBleGl0IFZpbS4gIFdoZW4gc3RhcnRpbmcgVmltIHdpdGgKKyAgIGZpbGVzIGluIHNldmVyYWwgd2luZG93cywgVmltIHF1aXRzIG9ubHkgaWYgdGhlcmUgaXMgYSBzd2FwIGZpbGUgZm9yIHRoZQorICAgZmlyc3Qgb25lLiAgV2hlbiB1c2luZyBhbiBlZGl0IGNvbW1hbmQsIHRoZSBmaWxlIHdpbGwgbm90IGJlIGxvYWRlZCBhbmQgeW91CisgICBhcmUgdGFrZW4gYmFjayB0byB0aGUgcHJldmlvdXNseSBlZGl0ZWQgZmlsZS4KKworQSAgQWJvcnQuICBMaWtlIFF1aXQsIGJ1dCBhbHNvIGFib3J0IGZ1cnRoZXIgY29tbWFuZHMuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCisgICBsb2FkaW5nIGEgc2NyaXB0IHRoYXQgZWRpdHMgc2V2ZXJhbCBmaWxlcywgc3VjaCBhcyBhIHNlc3Npb24gd2l0aCBtdWx0aXBsZQorICAgd2luZG93cy4KKworRCAgRGVsZXRlIHRoZSBzd2FwIGZpbGUuICBVc2UgdGhpcyB3aGVuIHlvdSBhcmUgc3VyZSB5b3Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICBGb3IgZXhhbXBsZSwgd2hlbiBpdCBkb2Vzbid0IGNvbnRhaW4gY2hhbmdlcywgb3Igd2hlbiB0aGUgZmlsZSBpdHNlbGYgaXMKKyAgIG5ld2VyIHRoYW4gdGhlIHN3YXAgZmlsZS4KKyAgICAgIE9uIFVuaXggdGhpcyBjaG9pY2UgaXMgb25seSBvZmZlcmVkIHdoZW4gdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIHRoZQorICAgc3dhcCBmaWxlIGRvZXMgbm90IGFwcGVhciB0byBiZSBydW5uaW5nLgorCitJZiB5b3UgZG8gbm90IGdldCB0aGUgZGlhbG9nICh5b3UgYXJlIHJ1bm5pbmcgYSB2ZXJzaW9uIG9mIFZpbSB0aGF0IGRvZXMgbm90CitzdXBwb3J0IGl0KSwgeW91IHdpbGwgaGF2ZSB0byBkbyBpdCBtYW51YWxseS4gIFRvIHJlY292ZXIgdGhlIGZpbGUsIHVzZSB0aGlzCitjb21tYW5kOiA+CisKKwk6cmVjb3ZlcgorCisKK1ZpbSBjYW5ub3QgYWx3YXlzIGRldGVjdCB0aGF0IGEgc3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIGZvciBhIGZpbGUuICBUaGlzIGlzCit0aGUgY2FzZSB3aGVuIHRoZSBvdGhlciBlZGl0IHNlc3Npb24gcHV0cyB0aGUgc3dhcCBmaWxlcyBpbiBhbm90aGVyIGRpcmVjdG9yeQorb3Igd2hlbiB0aGUgcGF0aCBuYW1lIGZvciB0aGUgZmlsZSBpcyBkaWZmZXJlbnQgd2hlbiBlZGl0aW5nIGl0IG9uIGRpZmZlcmVudAorbWFjaGluZXMuICBUaGVyZWZvcmUsIGRvbid0IHJlbHkgb24gVmltIGFsd2F5cyB3YXJuaW5nIHlvdS4KKworSWYgeW91IHJlYWxseSBkb24ndCB3YW50IHRvIHNlZSB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gYWRkIHRoZSAnQScgZmxhZyB0byB0aGUKKydzaG9ydG1lc3MnIG9wdGlvbi4gIEJ1dCBpdCdzIHZlcnkgdW51c3VhbCB0aGF0IHlvdSBuZWVkIHRoaXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjExLjQqCUZ1cnRoZXIgcmVhZGluZworCit8c3dhcC1maWxlfAlBbiBleHBsYW5hdGlvbiBhYm91dCB3aGVyZSB0aGUgc3dhcCBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhbmQKKwkJd2hhdCBpdHMgbmFtZSBpcy4KK3w6cHJlc2VydmV8CU1hbnVhbGx5IGZsdXNoaW5nIHRoZSBzd2FwIGZpbGUgdG8gZGlzay4KK3w6c3dhcG5hbWV8CVNlZSB0aGUgbmFtZSBvZiB0aGUgc3dhcCBmaWxlIGZvciB0aGUgY3VycmVudCBmaWxlLgorJ3VwZGF0ZWNvdW50JwlOdW1iZXIgb2Yga2V5IHN0cm9rZXMgYWZ0ZXIgd2hpY2ggdGhlIHN3YXAgZmlsZSBpcyBmbHVzaGVkIHRvCisJCWRpc2suCisndXBkYXRldGltZScJVGltZW91dCBhZnRlciB3aGljaCB0aGUgc3dhcCBmaWxlIGlzIGZsdXNoZWQgdG8gZGlzay4KKydzd2Fwc3luYycJV2hldGhlciB0aGUgZGlzayBpcyBzeW5jZWQgd2hlbiB0aGUgc3dhcCBmaWxlIGlzIGZsdXNoZWQuCisnZGlyZWN0b3J5JwlMaXN0IG9mIGRpcmVjdG9yeSBuYW1lcyB3aGVyZSB0byBzdG9yZSB0aGUgc3dhcCBmaWxlLgorJ21heG1lbScJTGltaXQgZm9yIG1lbW9yeSB1c2FnZSBiZWZvcmUgd3JpdGluZyB0ZXh0IHRvIHRoZSBzd2FwIGZpbGUuCisnbWF4bWVtdG90JwlTYW1lLCBidXQgZm9yIGFsbCBmaWxlcyBpbiB0b3RhbC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8xMi50eHR8ICBDbGV2ZXIgdHJpY2tzCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzEyLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFiZjI0NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8xMi50eHQKQEAgLTAsMCArMSwzNTggQEAKKyp1c3JfMTIudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDEKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCQlDbGV2ZXIgdHJpY2tzCisKKworQnkgY29tYmluaW5nIHNldmVyYWwgY29tbWFuZHMgeW91IGNhbiBtYWtlIFZpbSBkbyBuZWFybHkgZXZlcnl0aGluZy4gIEluIHRoaXMKK2NoYXB0ZXIgYSBudW1iZXIgb2YgdXNlZnVsIGNvbWJpbmF0aW9ucyB3aWxsIGJlIHByZXNlbnRlZC4gIFRoaXMgdXNlcyB0aGUKK2NvbW1hbmRzIGludHJvZHVjZWQgaW4gdGhlIHByZXZpb3VzIGNoYXB0ZXJzIGFuZCBhIGZldyBtb3JlLgorCit8MTIuMXwJUmVwbGFjZSBhIHdvcmQKK3wxMi4yfAlDaGFuZ2UgIkxhc3QsIEZpcnN0IiB0byAiRmlyc3QgTGFzdCIKK3wxMi4zfAlTb3J0IGEgbGlzdAorfDEyLjR8CVJldmVyc2UgbGluZSBvcmRlcgorfDEyLjV8CUNvdW50IHdvcmRzCit8MTIuNnwJRmluZCBhIG1hbiBwYWdlCit8MTIuN3wJVHJpbSBibGFua3MKK3wxMi44fAlGaW5kIHdoZXJlIGEgd29yZCBpcyB1c2VkCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzIwLnR4dHwgIFR5cGluZyBjb21tYW5kLWxpbmUgY29tbWFuZHMgcXVpY2tseQorIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMTEudHh0fCAgUmVjb3ZlcmluZyBmcm9tIGEgY3Jhc2gKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjEyLjEqCVJlcGxhY2UgYSB3b3JkCisKK1RoZSBzdWJzdGl0dXRlIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgYSB3b3JkIHdpdGgKK2Fub3RoZXIgd29yZDogPgorCisJOiVzL2ZvdXIvNC9nCisKK1RoZSAiJSIgcmFuZ2UgbWVhbnMgdG8gcmVwbGFjZSBpbiBhbGwgbGluZXMuICBUaGUgImciIGZsYWcgYXQgdGhlIGVuZCBjYXVzZXMKK2FsbCB3b3JkcyBpbiBhIGxpbmUgdG8gYmUgcmVwbGFjZWQuCisgICBUaGlzIHdpbGwgbm90IGRvIHRoZSByaWdodCB0aGluZyBpZiB5b3VyIGZpbGUgYWxzbyBjb250YWlucyAidGhpcnR5Zm91ciIuCitJdCB3b3VsZCBiZSByZXBsYWNlZCB3aXRoICJ0aGlydHk0Ii4gIFRvIGF2b2lkIHRoaXMsIHVzZSB0aGUgIlw8IiBpdGVtIHRvCittYXRjaCB0aGUgc3RhcnQgb2YgYSB3b3JkOiA+CisKKwk6JXMvXDxmb3VyLzQvZworCitPYnZpb3VzbHksIHRoaXMgc3RpbGwgZ29lcyB3cm9uZyBvbiAiZm91cnR5Ii4gIFVzZSAiXD4iIHRvIG1hdGNoIHRoZSBlbmQgb2YgYQord29yZDogPgorCisJOiVzL1w8Zm91clw+LzQvZworCitJZiB5b3UgYXJlIHByb2dyYW1taW5nLCB5b3UgbWlnaHQgd2FudCB0byByZXBsYWNlICJmb3VyIiBpbiBjb21tZW50cywgYnV0IG5vdAoraW4gdGhlIGNvZGUuICBTaW5jZSB0aGlzIGlzIGRpZmZpY3VsdCB0byBzcGVjaWZ5LCBhZGQgdGhlICJjIiBmbGFnIHRvIGhhdmUgdGhlCitzdWJzdGl0dXRlIGNvbW1hbmQgcHJvbXB0IHlvdSBmb3IgZWFjaCByZXBsYWNlbWVudDogPgorCisKKwk6JXMvXDxmb3VyXD4vNC9nYworCisKK1JFUExBQ0lORyBJTiBTRVZFUkFMIEZJTEVTCisKK1N1cHBvc2UgeW91IHdhbnQgdG8gcmVwbGFjZSBhIHdvcmQgaW4gbW9yZSB0aGFuIG9uZSBmaWxlLiAgWW91IGNvdWxkIGVkaXQgZWFjaAorZmlsZSBhbmQgdHlwZSB0aGUgY29tbWFuZCBtYW51YWxseS4gIEl0J3MgYSBsb3QgZmFzdGVyIHRvIHVzZSByZWNvcmQgYW5kCitwbGF5YmFjay4KKyAgIExldCdzIGFzc3VtZSB5b3UgaGF2ZSBhIGRpcmVjdG9yeSB3aXRoIEMrKyBmaWxlcywgYWxsIGVuZGluZyBpbiAiLmNwcCIuCitUaGVyZSBpcyBhIGZ1bmN0aW9uIGNhbGxlZCAiR2V0UmVzcCIgdGhhdCB5b3Ugd2FudCB0byByZW5hbWUgdG8gIkdldEFuc3dlciIuCisKKwl2aW0gKi5jcHAJCVN0YXJ0IFZpbSwgZGVmaW5pbmcgdGhlIGFyZ3VtZW50IGxpc3QgdG8KKwkJCQljb250YWluIGFsbCB0aGUgQysrIGZpbGVzLiAgWW91IGFyZSBub3cgaW4gdGhlCisJCQkJZmlyc3QgZmlsZS4KKwlxcQkJCVN0YXJ0IHJlY29yZGluZyBpbnRvIHRoZSBxIHJlZ2lzdGVyCisJOiVzL1w8R2V0UmVzcFw+L0dldEFuc3dlci9nCisJCQkJRG8gdGhlIHJlcGxhY2VtZW50cyBpbiB0aGUgZmlyc3QgZmlsZS4KKwk6d25leHQJCQlXcml0ZSB0aGlzIGZpbGUgYW5kIG1vdmUgdG8gdGhlIG5leHQgb25lLgorCXEJCQlTdG9wIHJlY29yZGluZy4KKwlAcQkJCUV4ZWN1dGUgdGhlIHEgcmVnaXN0ZXIuICBUaGlzIHdpbGwgcmVwbGF5IHRoZQorCQkJCXN1YnN0aXR1dGlvbiBhbmQgIjp3bmV4dCIuICBZb3UgY2FuIHZlcmlmeQorCQkJCXRoYXQgdGhpcyBkb2Vzbid0IHByb2R1Y2UgYW4gZXJyb3IgbWVzc2FnZS4KKwk5OTlAcQkJCUV4ZWN1dGUgdGhlIHEgcmVnaXN0ZXIgb24gdGhlIHJlbWFpbmluZyBmaWxlcy4KKworQXQgdGhlIGxhc3QgZmlsZSB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZSwgYmVjYXVzZSAiOnduZXh0IiBjYW5ub3QgbW92ZQordG8gdGhlIG5leHQgZmlsZS4gIFRoaXMgc3RvcHMgdGhlIGV4ZWN1dGlvbiwgYW5kIGV2ZXJ5dGhpbmcgaXMgZG9uZS4KKworCU5vdGU6CisJV2hlbiBwbGF5aW5nIGJhY2sgYSByZWNvcmRlZCBzZXF1ZW5jZSwgYW4gZXJyb3Igc3RvcHMgdGhlIGV4ZWN1dGlvbi4KKwlUaGVyZWZvcmUsIG1ha2Ugc3VyZSB5b3UgZG9uJ3QgZ2V0IGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWNvcmRpbmcuCisKK1RoZXJlIGlzIG9uZSBjYXRjaDogSWYgb25lIG9mIHRoZSAuY3BwIGZpbGVzIGRvZXMgbm90IGNvbnRhaW4gdGhlIHdvcmQKKyJHZXRSZXNwIiwgeW91IHdpbGwgZ2V0IGFuIGVycm9yIGFuZCByZXBsYWNpbmcgd2lsbCBzdG9wLiAgVG8gYXZvaWQgdGhpcywgYWRkCit0aGUgImUiIGZsYWcgdG8gdGhlIHN1YnN0aXR1dGUgY29tbWFuZDogPgorCisJOiVzL1w8R2V0UmVzcFw+L0dldEFuc3dlci9nZQorCitUaGUgImUiIGZsYWcgdGVsbHMgIjpzdWJzdGl0dXRlIiB0aGF0IG5vdCBmaW5kaW5nIGEgbWF0Y2ggaXMgbm90IGFuIGVycm9yLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMi4yKglDaGFuZ2UgIkxhc3QsIEZpcnN0IiB0byAiRmlyc3QgTGFzdCIKKworWW91IGhhdmUgYSBsaXN0IG9mIG5hbWVzIGluIHRoaXMgZm9ybToKKworCURvZSwgSm9obiB+CisJU21pdGgsIFBldGVyIH4KKworWW91IHdhbnQgdG8gY2hhbmdlIHRoYXQgdG86CisKKwlKb2huIERvZSB+CisJUGV0ZXIgU21pdGggfgorCitUaGlzIGNhbiBiZSBkb25lIHdpdGgganVzdCBvbmUgY29tbWFuZDogPgorCisJOiVzL1woW14sXSpcKSwgXCguKlwpL1wyIFwxLworCitMZXQncyBicmVhayB0aGlzIGRvd24gaW4gcGFydHMuICBPYnZpb3VzbHkgaXQgc3RhcnRzIHdpdGggYSBzdWJzdGl0dXRlCitjb21tYW5kLiAgVGhlICIlIiBpcyB0aGUgbGluZSByYW5nZSwgd2hpY2ggc3RhbmRzIGZvciB0aGUgd2hvbGUgZmlsZS4gIFRodXMKK3RoZSBzdWJzdGl0dXRpb24gaXMgZG9uZSBpbiBldmVyeSBsaW5lIGluIHRoZSBmaWxlLgorICAgVGhlIGFyZ3VtZW50cyBmb3IgdGhlIHN1YnN0aXR1dGUgY29tbWFuZCBhcmUgIi9mcm9tL3RvLyIuICBUaGUgc2xhc2hlcworc2VwYXJhdGUgdGhlICJmcm9tIiBwYXR0ZXJuIGFuZCB0aGUgInRvIiBzdHJpbmcuICBUaGlzIGlzIHdoYXQgdGhlICJmcm9tIgorcGF0dGVybiBjb250YWluczoKKwkJCQkJCQlcKFteLF0qXCksIFwoLipcKSB+CisKKwlUaGUgZmlyc3QgcGFydCBiZXR3ZWVuIFwoIFwpIG1hdGNoZXMgIkxhc3QiCVwoICAgICBcKQorCSAgICBtYXRjaCBhbnl0aGluZyBidXQgYSBjb21tYQkJCSAgW14sXQorCSAgICBhbnkgbnVtYmVyIG9mIHRpbWVzCQkJCSAgICAgICoKKwltYXRjaGVzICIsICIgbGl0ZXJhbGx5CQkJCQkgLAorCVRoZSBzZWNvbmQgcGFydCBiZXR3ZWVuIFwoIFwpIG1hdGNoZXMgIkZpcnN0IgkJICAgXCggIFwpCisJICAgIGFueSBjaGFyYWN0ZXIJCQkJCSAgICAgLgorCSAgICBhbnkgbnVtYmVyIG9mIHRpbWVzCQkJCQkgICAgICAqCisKK0luIHRoZSAidG8iIHBhcnQgd2UgaGF2ZSAiXDIiIGFuZCAiXDEiLiAgVGhlc2UgYXJlIGNhbGxlZCBiYWNrcmVmZXJlbmNlcy4KK1RoZXkgcmVmZXIgdG8gdGhlIHRleHQgbWF0Y2hlZCBieSB0aGUgIlwoIFwpIiBwYXJ0cyBpbiB0aGUgcGF0dGVybi4gICJcMiIKK3JlZmVycyB0byB0aGUgdGV4dCBtYXRjaGVkIGJ5IHRoZSBzZWNvbmQgIlwoIFwpIiwgd2hpY2ggaXMgdGhlICJGaXJzdCIgbmFtZS4KKyJcMSIgcmVmZXJzIHRvIHRoZSBmaXJzdCAiXCggXCkiLCB3aGljaCBpcyB0aGUgIkxhc3QiIG5hbWUuCisgICBZb3UgY2FuIHVzZSB1cCB0byBuaW5lIGJhY2tyZWZlcmVuY2VzIGluIHRoZSAidG8iIHBhcnQgb2YgYSBzdWJzdGl0dXRlCitjb21tYW5kLiAgIlwwIiBzdGFuZHMgZm9yIHRoZSB3aG9sZSBtYXRjaGVkIHBhdHRlcm4uICBUaGVyZSBhcmUgYSBmZXcgbW9yZQorc3BlY2lhbCBpdGVtcyBpbiBhIHN1YnN0aXR1dGUgY29tbWFuZCwgc2VlIHxzdWItcmVwbGFjZS1zcGVjaWFsfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTIuMyoJU29ydCBhIGxpc3QKKworSW4gYSBNYWtlZmlsZSB5b3Ugb2Z0ZW4gaGF2ZSBhIGxpc3Qgb2YgZmlsZXMuICBGb3IgZXhhbXBsZToKKworCU9CSlMgPSBcIH4KKwkJdmVyc2lvbi5vIFwgfgorCQlwY2gubyBcIH4KKwkJZ2V0b3B0Lm8gXCB+CisJCXV0aWwubyBcIH4KKwkJZ2V0b3B0MS5vIFwgfgorCQlpbnAubyBcIH4KKwkJcGF0Y2gubyBcIH4KKwkJYmFja3VwLm8gfgorCitUbyBzb3J0IHRoaXMgbGlzdCwgZmlsdGVyIHRoZSB0ZXh0IHRocm91Z2ggdGhlIGV4dGVybmFsIHNvcnQgY29tbWFuZDogPgorCisJL15PQkpTCisJagorCTouLC9eJC8tMSFzb3J0CisKK1RoaXMgZ29lcyB0byB0aGUgZmlyc3QgbGluZSwgd2hlcmUgIk9CSlMiIGlzIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgbGluZS4KK1RoZW4gaXQgZ29lcyBvbmUgbGluZSBkb3duIGFuZCBmaWx0ZXJzIHRoZSBsaW5lcyB1bnRpbCB0aGUgbmV4dCBlbXB0eSBsaW5lLgorWW91IGNvdWxkIGFsc28gc2VsZWN0IHRoZSBsaW5lcyBpbiBWaXN1YWwgbW9kZSBhbmQgdGhlbiB1c2UgIiFzb3J0Ii4gIFRoYXQncworZWFzaWVyIHRvIHR5cGUsIGJ1dCBtb3JlIHdvcmsgd2hlbiB0aGVyZSBhcmUgbWFueSBsaW5lcy4KKyAgIFRoZSByZXN1bHQgaXMgdGhpczoKKworCU9CSlMgPSBcIH4KKwkJYmFja3VwLm8gfgorCQlnZXRvcHQubyBcIH4KKwkJZ2V0b3B0MS5vIFwgfgorCQlpbnAubyBcIH4KKwkJcGF0Y2gubyBcIH4KKwkJcGNoLm8gXCB+CisJCXV0aWwubyBcIH4KKwkJdmVyc2lvbi5vIFwgfgorCisKK05vdGljZSB0aGF0IGEgYmFja3NsYXNoIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGxpbmUKK2NvbnRpbnVlcy4gIEFmdGVyIHNvcnRpbmcsIHRoaXMgaXMgd3JvbmchICBUaGUgImJhY2t1cC5vIiBsaW5lIHRoYXQgd2FzIGF0Cit0aGUgZW5kIGRpZG4ndCBoYXZlIGEgYmFja3NsYXNoLiAgTm93IHRoYXQgaXQgc29ydHMgdG8gYW5vdGhlciBwbGFjZSwgaXQKK211c3QgaGF2ZSBhIGJhY2tzbGFzaC4KKyAgIFRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBhZGQgdGhlIGJhY2tzbGFzaCB3aXRoICJBIFw8RXNjPiIuICBZb3UgY2FuCitrZWVwIHRoZSBiYWNrc2xhc2ggaW4gdGhlIGxhc3QgbGluZSwgaWYgeW91IG1ha2Ugc3VyZSBhbiBlbXB0eSBsaW5lIGNvbWVzCithZnRlciBpdC4gIFRoYXQgd2F5IHlvdSBkb24ndCBoYXZlIHRoaXMgcHJvYmxlbSBhZ2Fpbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTIuNCoJUmV2ZXJzZSBsaW5lIG9yZGVyCisKK1RoZSB8Omdsb2JhbHwgY29tbWFuZCBjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgfDptb3ZlfCBjb21tYW5kIHRvIG1vdmUgYWxsIHRoZQorbGluZXMgYmVmb3JlIHRoZSBmaXJzdCBsaW5lLCByZXN1bHRpbmcgaW4gYSByZXZlcnNlZCBmaWxlLiAgVGhlIGNvbW1hbmQgaXM6ID4KKworCTpnbG9iYWwvXi9tIDAKKworQWJicmV2aWF0ZWQ6ID4KKworCTpnL14vbSAwCisKK1RoZSAiXiIgcmVndWxhciBleHByZXNzaW9uIG1hdGNoZXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSAoZXZlbiBpZiB0aGUgbGluZQoraXMgYmxhbmspLiAgVGhlIHw6bW92ZXwgY29tbWFuZCBtb3ZlcyB0aGUgbWF0Y2hpbmcgbGluZSB0byBhZnRlciB0aGUgbXl0aGljYWwKK3plcm90aCBsaW5lLCBzbyB0aGUgY3VycmVudCBtYXRjaGluZyBsaW5lIGJlY29tZXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUuCitBcyB0aGUgfDpnbG9iYWx8IGNvbW1hbmQgaXMgbm90IGNvbmZ1c2VkIGJ5IHRoZSBjaGFuZ2luZyBsaW5lIG51bWJlcmluZywKK3w6Z2xvYmFsfCBwcm9jZWVkcyB0byBtYXRjaCBhbGwgcmVtYWluaW5nIGxpbmVzIG9mIHRoZSBmaWxlIGFuZCBwdXRzIGVhY2ggYXMKK3RoZSBmaXJzdC4KKworVGhpcyBhbHNvIHdvcmtzIG9uIGEgcmFuZ2Ugb2YgbGluZXMuICBGaXJzdCBtb3ZlIHRvIGFib3ZlIHRoZSBmaXJzdCBsaW5lIGFuZAorbWFyayBpdCB3aXRoICJtdCIuICBUaGVuIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgbGFzdCBsaW5lIGluIHRoZSByYW5nZSBhbmQKK3R5cGU6ID4KKworCTondCsxLC5nL14vbSAndAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMi41KglDb3VudCB3b3JkcworCitTb21ldGltZXMgeW91IGhhdmUgdG8gd3JpdGUgYSB0ZXh0IHdpdGggYSBtYXhpbXVtIG51bWJlciBvZiB3b3Jkcy4gIFZpbSBjYW4KK2NvdW50IHRoZSB3b3JkcyBmb3IgeW91LgorICAgV2hlbiB0aGUgd2hvbGUgZmlsZSBpcyB3aGF0IHlvdSB3YW50IHRvIGNvdW50IHRoZSB3b3JkcyBpbiwgdXNlIHRoaXMKK2NvbW1hbmQ6ID4KKworCWcgQ1RSTC1HCisKK0RvIG5vdCB0eXBlIGEgc3BhY2UgYWZ0ZXIgdGhlIGcsIHRoaXMgaXMganVzdCB1c2VkIGhlcmUgdG8gbWFrZSB0aGUgY29tbWFuZAorZWFzeSB0byByZWFkLgorICAgVGhlIG91dHB1dCBsb29rcyBsaWtlIHRoaXM6CisKKwlDb2wgMSBvZiAwOyBMaW5lIDE0MSBvZiAxNTc7IFdvcmQgNzQ4IG9mIDc3NDsgQnl0ZSA0NDg5IG9mIDQ5NzYgfgorCitZb3UgY2FuIHNlZSBvbiB3aGljaCB3b3JkIHlvdSBhcmUgKDc0OCksIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIHdvcmRzIGluIHRoZQorZmlsZSAoNzc0KS4KKworV2hlbiB0aGUgdGV4dCBpcyBvbmx5IHBhcnQgb2YgYSBmaWxlLCB5b3UgY291bGQgbW92ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHRleHQsCit0eXBlICJnIENUUkwtRyIsIG1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgdGV4dCwgdHlwZSAiZyBDVFJMLUciIGFnYWluLCBhbmQgdGhlbgordXNlIHlvdXIgYnJhaW4gdG8gY29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgd29yZCBwb3NpdGlvbi4gIFRoYXQncyBhIGdvb2QKK2V4ZXJjaXNlLCBidXQgdGhlcmUgaXMgYW4gZWFzaWVyIHdheS4gIFdpdGggVmlzdWFsIG1vZGUsIHNlbGVjdCB0aGUgdGV4dCB5b3UKK3dhbnQgdG8gY291bnQgd29yZHMgaW4uICBUaGVuIHR5cGUgZyBDVFJMLUcuICBUaGUgcmVzdWx0OgorCisJU2VsZWN0ZWQgNSBvZiAyOTMgTGluZXM7IDcwIG9mIDE4ODQgV29yZHM7IDM1OSBvZiAxMDkyOCBCeXRlcyB+CisKK0ZvciBvdGhlciB3YXlzIHRvIGNvdW50IHdvcmRzLCBsaW5lcyBhbmQgb3RoZXIgaXRlbXMsIHNlZSB8Y291bnQtaXRlbXN8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMi42KglGaW5kIGEgbWFuIHBhZ2UJCQkJCSpmaW5kLW1hbnBhZ2UqCisKK1doaWxlIGVkaXRpbmcgYSBzaGVsbCBzY3JpcHQgb3IgQyBwcm9ncmFtLCB5b3UgYXJlIHVzaW5nIGEgY29tbWFuZCBvciBmdW5jdGlvbgordGhhdCB5b3Ugd2FudCB0byBmaW5kIHRoZSBtYW4gcGFnZSBmb3IgKHRoaXMgaXMgb24gVW5peCkuICBMZXQncyBmaXJzdCB1c2UgYQorc2ltcGxlIHdheTogTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSB3b3JkIHlvdSB3YW50IHRvIGZpbmQgaGVscCBvbiBhbmQgcHJlc3MgPgorCisJSworCitWaW0gd2lsbCBydW4gdGhlIGV4dGVybmFsICJtYW4iIHByb2dyYW0gb24gdGhlIHdvcmQuICBJZiB0aGUgbWFuIHBhZ2UgaXMKK2ZvdW5kLCBpdCBpcyBkaXNwbGF5ZWQuICBUaGlzIHVzZXMgdGhlIG5vcm1hbCBwYWdlciB0byBzY3JvbGwgdGhyb3VnaCB0aGUgdGV4dAorKG1vc3RseSB0aGUgIm1vcmUiIHByb2dyYW0pLiAgV2hlbiB5b3UgZ2V0IHRvIHRoZSBlbmQgcHJlc3NpbmcgPEVudGVyPiB3aWxsCitnZXQgeW91IGJhY2sgaW50byBWaW0uCisKK0EgZGlzYWR2YW50YWdlIGlzIHRoYXQgeW91IGNhbid0IHNlZSB0aGUgbWFuIHBhZ2UgYW5kIHRoZSB0ZXh0IHlvdSBhcmUgd29ya2luZworb24gYXQgdGhlIHNhbWUgdGltZS4gIFRoZXJlIGlzIGEgdHJpY2sgdG8gbWFrZSB0aGUgbWFuIHBhZ2UgYXBwZWFyIGluIGEgVmltCit3aW5kb3cuICBGaXJzdCwgbG9hZCB0aGUgbWFuIGZpbGV0eXBlIHBsdWdpbjogPgorCisJOnJ1bnRpbWUhIGZ0cGx1Z2luL21hbi52aW0KKworUHV0IHRoaXMgY29tbWFuZCBpbiB5b3VyIHZpbXJjIGZpbGUgaWYgeW91IGludGVuZCB0byBkbyB0aGlzIG9mdGVuLiAgTm93IHlvdQorY2FuIHVzZSB0aGUgIjpNYW4iIGNvbW1hbmQgdG8gb3BlbiBhIHdpbmRvdyBvbiBhIG1hbiBwYWdlOiA+CisKKwk6TWFuIGNzaAorCitZb3UgY2FuIHNjcm9sbCBhcm91bmQgYW5kIHRoZSB0ZXh0IGlzIGhpZ2hsaWdodGVkLiAgVGhpcyBhbGxvd3MgeW91IHRvIGZpbmQKK3RoZSBoZWxwIHlvdSB3ZXJlIGxvb2tpbmcgZm9yLiAgVXNlIENUUkwtVyB3IHRvIGp1bXAgdG8gdGhlIHdpbmRvdyB3aXRoIHRoZQordGV4dCB5b3Ugd2VyZSB3b3JraW5nIG9uLgorICAgVG8gZmluZCBhIG1hbiBwYWdlIGluIGEgc3BlY2lmaWMgc2VjdGlvbiwgcHV0IHRoZSBzZWN0aW9uIG51bWJlciBmaXJzdC4KK0ZvciBleGFtcGxlLCB0byBsb29rIGluIHNlY3Rpb24gMyBmb3IgImVjaG8iOiA+CisKKwk6TWFuIDMgZWNobworCitUbyBqdW1wIHRvIGFub3RoZXIgbWFuIHBhZ2UsIHdoaWNoIGlzIGluIHRoZSB0ZXh0IHdpdGggdGhlIHR5cGljYWwgZm9ybQorIndvcmQoMSkiLCBwcmVzcyBDVFJMLV0gb24gaXQuICBGdXJ0aGVyICI6TWFuIiBjb21tYW5kcyB3aWxsIHVzZSB0aGUgc2FtZQord2luZG93LgorCitUbyBkaXNwbGF5IGEgbWFuIHBhZ2UgZm9yIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IsIHVzZSB0aGlzOiA+CisKKwlcSworCisoSWYgeW91IHJlZGVmaW5lZCB0aGUgPExlYWRlcj4sIHVzZSBpdCBpbnN0ZWFkIG9mIHRoZSBiYWNrc2xhc2gpLgorRm9yIGV4YW1wbGUsIHlvdSB3YW50IHRvIGtub3cgdGhlIHJldHVybiB2YWx1ZSBvZiAic3Ryc3RyKCkiIHdoaWxlIGVkaXRpbmcKK3RoaXMgbGluZToKKworCWlmIChzdHJzdHIoaW5wdXQsICJhYXAiKSA9PSApIH4KKworTW92ZSB0aGUgY3Vyc29yIHRvIHNvbWV3aGVyZSBvbiAic3Ryc3RyIiBhbmQgdHlwZSAiXEsiLiAgQSB3aW5kb3cgd2lsbCBvcGVuCit0byBkaXNwbGF5IHRoZSBtYW4gcGFnZSBmb3Igc3Ryc3RyKCkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjEyLjcqCVRyaW0gYmxhbmtzCisKK1NvbWUgcGVvcGxlIGZpbmQgc3BhY2VzIGFuZCB0YWJzIGF0IHRoZSBlbmQgb2YgYSBsaW5lIHVzZWxlc3MsIHdhc3RlZnVsLCBhbmQKK3VnbHkuICBUbyByZW1vdmUgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIGV2ZXJ5IGxpbmUsIGV4ZWN1dGUgdGhlIGZvbGxvd2luZworY29tbWFuZDogPgorCisJOiVzL1xzXCskLy8KKworVGhlIGxpbmUgcmFuZ2UgIiUiIGlzIHVzZWQsIHRodXMgdGhpcyB3b3JrcyBvbiB0aGUgd2hvbGUgZmlsZS4gIFRoZSBwYXR0ZXJuCit0aGF0IHRoZSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQgbWF0Y2hlcyB3aXRoIGlzICJcc1wrJCIuICBUaGlzIGZpbmRzIHdoaXRlCitzcGFjZSBjaGFyYWN0ZXJzIChccyksIDEgb3IgbW9yZSBvZiB0aGVtIChcKyksIGJlZm9yZSB0aGUgZW5kLW9mLWxpbmUgKCQpLgorTGF0ZXIgd2lsbCBiZSBleHBsYWluZWQgaG93IHlvdSB3cml0ZSBwYXR0ZXJucyBsaWtlIHRoaXMgfHVzcl8yNy50eHR8LgorICAgVGhlICJ0byIgcGFydCBvZiB0aGUgc3Vic3RpdHV0ZSBjb21tYW5kIGlzIGVtcHR5OiAiLy8iLiAgVGh1cyBpdCByZXBsYWNlcword2l0aCBub3RoaW5nLCBlZmZlY3RpdmVseSBkZWxldGluZyB0aGUgbWF0Y2hlZCB3aGl0ZSBzcGFjZS4KKworQW5vdGhlciB3YXN0ZWZ1bCB1c2Ugb2Ygc3BhY2VzIGlzIHBsYWNpbmcgdGhlbSBiZWZvcmUgYSBUYWIuICBPZnRlbiB0aGVzZSBjYW4KK2JlIGRlbGV0ZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgYW1vdW50IG9mIHdoaXRlIHNwYWNlLiAgQnV0IG5vdCBhbHdheXMhCitUaGVyZWZvcmUsIHlvdSBjYW4gYmVzdCBkbyB0aGlzIG1hbnVhbGx5LiAgVXNlIHRoaXMgc2VhcmNoIGNvbW1hbmQ6ID4KKworCS8gCQorCitZb3UgY2Fubm90IHNlZSBpdCwgYnV0IHRoZXJlIGlzIGEgc3BhY2UgYmVmb3JlIGEgdGFiIGluIHRoaXMgY29tbWFuZC4gIFRodXMKK2l0J3MgIi88U3BhY2U+PFRhYj4iLiAgIE5vdyB1c2UgIngiIHRvIGRlbGV0ZSB0aGUgc3BhY2UgYW5kIGNoZWNrIHRoYXQgdGhlCithbW91bnQgb2Ygd2hpdGUgc3BhY2UgZG9lc24ndCBjaGFuZ2UuICBZb3UgbWlnaHQgaGF2ZSB0byBpbnNlcnQgYSBUYWIgaWYgaXQKK2RvZXMgY2hhbmdlLiAgVHlwZSAibiIgdG8gZmluZCB0aGUgbmV4dCBtYXRjaC4gIFJlcGVhdCB0aGlzIHVudGlsIG5vIG1vcmUKK21hdGNoZXMgY2FuIGJlIGZvdW5kLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMi44KglGaW5kIHdoZXJlIGEgd29yZCBpcyB1c2VkCisKK0lmIHlvdSBhcmUgYSBVTklYIHVzZXIsIHlvdSBjYW4gdXNlIGEgY29tYmluYXRpb24gb2YgVmltIGFuZCB0aGUgZ3JlcCBjb21tYW5kCit0byBlZGl0IGFsbCB0aGUgZmlsZXMgdGhhdCBjb250YWluIGEgZ2l2ZW4gd29yZC4gIFRoaXMgaXMgZXh0cmVtZWx5IHVzZWZ1bCBpZgoreW91IGFyZSB3b3JraW5nIG9uIGEgcHJvZ3JhbSBhbmQgd2FudCB0byB2aWV3IG9yIGVkaXQgYWxsIHRoZSBmaWxlcyB0aGF0Citjb250YWluIGEgc3BlY2lmaWMgdmFyaWFibGUuCisgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3Ugd2FudCB0byBlZGl0IGFsbCB0aGUgQyBwcm9ncmFtIGZpbGVzIHRoYXQgY29udGFpbgordGhlIHdvcmQgImZyYW1lX2NvdW50ZXIiLiAgVG8gZG8gdGhpcyB5b3UgdXNlIHRoZSBjb21tYW5kOiA+CisKKwl2aW0gYGdyZXAgLWwgZnJhbWVfY291bnRlciAqLmNgCisKK0xldCdzIGxvb2sgYXQgdGhpcyBjb21tYW5kIGluIGRldGFpbC4gIFRoZSBncmVwIGNvbW1hbmQgc2VhcmNoZXMgdGhyb3VnaCBhIHNldAorb2YgZmlsZXMgZm9yIGEgZ2l2ZW4gd29yZC4gIEJlY2F1c2UgdGhlIC1sIGFyZ3VtZW50IGlzIHNwZWNpZmllZCwgdGhlIGNvbW1hbmQKK3dpbGwgb25seSBsaXN0IHRoZSBmaWxlcyBjb250YWluaW5nIHRoZSB3b3JkIGFuZCBub3QgcHJpbnQgdGhlIG1hdGNoaW5nIGxpbmVzLgorVGhlIHdvcmQgaXQgaXMgc2VhcmNoaW5nIGZvciBpcyAiZnJhbWVfY291bnRlciIuICBBY3R1YWxseSwgdGhpcyBjYW4gYmUgYW55CityZWd1bGFyIGV4cHJlc3Npb24uICAoTm90ZTogV2hhdCBncmVwIHVzZXMgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaXMgbm90CitleGFjdGx5IHRoZSBzYW1lIGFzIHdoYXQgVmltIHVzZXMuKQorICAgVGhlIGVudGlyZSBjb21tYW5kIGlzIGVuY2xvc2VkIGluIGJhY2t0aWNrcyAoYCkuICBUaGlzIHRlbGxzIHRoZSBVTklYIHNoZWxsCit0byBydW4gdGhpcyBjb21tYW5kIGFuZCBwcmV0ZW5kIHRoYXQgdGhlIHJlc3VsdHMgd2VyZSB0eXBlZCBvbiB0aGUgY29tbWFuZAorbGluZS4gIFNvIHdoYXQgaGFwcGVucyBpcyB0aGF0IHRoZSBncmVwIGNvbW1hbmQgaXMgcnVuIGFuZCBwcm9kdWNlcyBhIGxpc3Qgb2YKK2ZpbGVzLCB0aGVzZSBmaWxlcyBhcmUgcHV0IG9uIHRoZSBWaW0gY29tbWFuZCBsaW5lLiAgVGhpcyByZXN1bHRzIGluIFZpbQorZWRpdGluZyB0aGUgZmlsZSBsaXN0IHRoYXQgaXMgdGhlIG91dHB1dCBvZiBncmVwLiAgWW91IGNhbiB0aGVuIHVzZSBjb21tYW5kcworbGlrZSAiOm5leHQiIGFuZCAiOmZpcnN0IiB0byBicm93c2UgdGhyb3VnaCB0aGUgZmlsZXMuCisKKworRklORElORyBFQUNIIExJTkUKKworVGhlIGFib3ZlIGNvbW1hbmQgb25seSBmaW5kcyB0aGUgZmlsZXMgaW4gd2hpY2ggdGhlIHdvcmQgaXMgZm91bmQuICBZb3Ugc3RpbGwKK2hhdmUgdG8gZmluZCB0aGUgd29yZCB3aXRoaW4gdGhlIGZpbGVzLgorICAgVmltIGhhcyBhIGJ1aWx0LWluIGNvbW1hbmQgdGhhdCB5b3UgY2FuIHVzZSB0byBzZWFyY2ggYSBzZXQgb2YgZmlsZXMgZm9yIGEKK2dpdmVuIHN0cmluZy4gIElmIHlvdSB3YW50IHRvIGZpbmQgYWxsIG9jY3VycmVuY2VzIG9mICJlcnJvcl9zdHJpbmciIGluIGFsbCBDCitwcm9ncmFtIGZpbGVzLCBmb3IgZXhhbXBsZSwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6Z3JlcCBlcnJvcl9zdHJpbmcgKi5jCisKK1RoaXMgY2F1c2VzIFZpbSB0byBzZWFyY2ggZm9yIHRoZSBzdHJpbmcgImVycm9yX3N0cmluZyIgaW4gYWxsIHRoZSBzcGVjaWZpZWQKK2ZpbGVzICgqLmMpLiAgVGhlIGVkaXRvciB3aWxsIG5vdyBvcGVuIHRoZSBmaXJzdCBmaWxlIHdoZXJlIGEgbWF0Y2ggaXMgZm91bmQKK2FuZCBwb3NpdGlvbiB0aGUgY3Vyc29yIG9uIHRoZSBmaXJzdCBtYXRjaGluZyBsaW5lLiAgVG8gZ28gdG8gdGhlIG5leHQKK21hdGNoaW5nIGxpbmUgKG5vIG1hdHRlciBpbiB3aGF0IGl0IGlzIGZpbGUpLCB1c2UgdGhlICI6Y25leHQiIGNvbW1hbmQuICBUbyBnbwordG8gdGhlIHByZXZpb3VzIG1hdGNoLCB1c2UgdGhlICI6Y3ByZXYiIGNvbW1hbmQuICBVc2UgIjpjbGlzdCIgdG8gc2VlIGFsbCB0aGUKK21hdGNoZXMgYW5kIHdoZXJlIHRoZXkgYXJlLgorICAgVGhlICI6Z3JlcCIgY29tbWFuZCB1c2VzIHRoZSBleHRlcm5hbCBjb21tYW5kcyBncmVwIChvbiBVbml4KSBvciBmaW5kc3RyCisob24gV2luZG93cykuICBZb3UgY2FuIGNoYW5nZSB0aGlzIGJ5IHNldHRpbmcgdGhlIG9wdGlvbiAnZ3JlcHByZycuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMjAudHh0fCAgVHlwaW5nIGNvbW1hbmQtbGluZSBjb21tYW5kcyBxdWlja2x5CisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzIwLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8yMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4OWE0NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8yMC50eHQKQEAgLTAsMCArMSwzODQgQEAKKyp1c3JfMjAudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBBcHIgMzAKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJICAgICBUeXBpbmcgY29tbWFuZC1saW5lIGNvbW1hbmRzIHF1aWNrbHkKKworCitWaW0gaGFzIGEgZmV3IGdlbmVyaWMgZmVhdHVyZXMgdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8gZW50ZXIgY29tbWFuZHMuICBDb2xvbgorY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkLCBlZGl0ZWQgYW5kIHJlcGVhdGVkLiAgQ29tcGxldGlvbiBpcyBhdmFpbGFibGUgZm9yCituZWFybHkgZXZlcnl0aGluZy4KKworfDIwLjF8CUNvbW1hbmQgbGluZSBlZGl0aW5nCit8MjAuMnwJQ29tbWFuZCBsaW5lIGFiYnJldmlhdGlvbnMKK3wyMC4zfAlDb21tYW5kIGxpbmUgY29tcGxldGlvbgorfDIwLjR8CUNvbW1hbmQgbGluZSBoaXN0b3J5Cit8MjAuNXwJQ29tbWFuZCBsaW5lIHdpbmRvdworCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8yMS50eHR8ICBHbyBhd2F5IGFuZCBjb21lIGJhY2sKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzEyLnR4dHwgIENsZXZlciB0cmlja3MKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIwLjEqCUNvbW1hbmQgbGluZSBlZGl0aW5nCisKK1doZW4geW91IHVzZSBhIGNvbG9uICg6KSBjb21tYW5kIG9yIHNlYXJjaCBmb3IgYSBzdHJpbmcgd2l0aCAvIG9yID8sIFZpbSBwdXRzCit0aGUgY3Vyc29yIG9uIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi4gIFRoZXJlIHlvdSB0eXBlIHRoZSBjb21tYW5kIG9yIHNlYXJjaAorcGF0dGVybi4gIFRoaXMgaXMgY2FsbGVkIHRoZSBDb21tYW5kIGxpbmUuICBBbHNvIHdoZW4gaXQncyB1c2VkIGZvciBlbnRlcmluZyBhCitzZWFyY2ggY29tbWFuZC4KKworVGhlIG1vc3Qgb2J2aW91cyB3YXkgdG8gZWRpdCB0aGUgY29tbWFuZCB5b3UgdHlwZSBpcyBieSBwcmVzc2luZyB0aGUgPEJTPiBrZXkuCitUaGlzIGVyYXNlcyB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY3Vyc29yLiAgVG8gZXJhc2UgYW5vdGhlciBjaGFyYWN0ZXIsCit0eXBlZCBlYXJsaWVyLCBmaXJzdCBtb3ZlIHRoZSBjdXJzb3Igd2l0aCB0aGUgY3Vyc29yIGtleXMuCisgICBGb3IgZXhhbXBsZSwgeW91IGhhdmUgdHlwZWQgdGhpczogPgorCisJOnMvY29sL3BpZy8KKworQmVmb3JlIHlvdSBoaXQgPEVudGVyPiwgeW91IG5vdGljZSB0aGF0ICJjb2wiIHNob3VsZCBiZSAiY293Ii4gIFRvIGNvcnJlY3QKK3RoaXMsIHlvdSB0eXBlIDxMZWZ0PiBmaXZlIHRpbWVzLiAgVGhlIGN1cnNvciBpcyBub3cganVzdCBhZnRlciAiY29sIi4gIFR5cGUKKzxCUz4gYW5kICJ3IiB0byBjb3JyZWN0OiA+CisKKwk6cy9jb3cvcGlnLworCitOb3cgeW91IGNhbiBwcmVzcyA8RW50ZXI+IGRpcmVjdGx5LiAgWW91IGRvbid0IGhhdmUgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIHRoZQorZW5kIG9mIHRoZSBsaW5lIGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbW1hbmQuCisKK1RoZSBtb3N0IG9mdGVuIHVzZWQga2V5cyB0byBtb3ZlIGFyb3VuZCBpbiB0aGUgY29tbWFuZCBsaW5lOgorCisJPExlZnQ+CQkJb25lIGNoYXJhY3RlciBsZWZ0CisJPFJpZ2h0PgkJCW9uZSBjaGFyYWN0ZXIgcmlnaHQKKwk8Uy1MZWZ0PiBvciA8Qy1MZWZ0PglvbmUgd29yZCBsZWZ0CisJPFMtUmlnaHQ+IG9yIDxDLVJpZ2h0PglvbmUgd29yZCByaWdodAorCUNUUkwtQiBvciA8SG9tZT4JdG8gYmVnaW4gb2YgY29tbWFuZCBsaW5lCisJQ1RSTC1FIG9yIDxFbmQ+CQl0byBlbmQgb2YgY29tbWFuZCBsaW5lCisKKwlOb3RlOgorCTxTLUxlZnQ+IChjdXJzb3IgbGVmdCBrZXkgd2l0aCBTaGlmdCBrZXkgcHJlc3NlZCkgYW5kIDxDLUxlZnQ+IChjdXJzb3IKKwlsZWZ0IGtleSB3aXRoIENvbnRyb2wgcHJlc3NlZCkgd2lsbCBub3Qgd29yayBvbiBhbGwga2V5Ym9hcmRzLiAgU2FtZQorCWZvciB0aGUgb3RoZXIgU2hpZnQgYW5kIENvbnRyb2wgY29tYmluYXRpb25zLgorCitZb3UgY2FuIGFsc28gdXNlIHRoZSBtb3VzZSB0byBtb3ZlIHRoZSBjdXJzb3IuCisKKworREVMRVRJTkcKKworQXMgbWVudGlvbmVkLCA8QlM+IGRlbGV0ZXMgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGN1cnNvci4gIFRvIGRlbGV0ZSBhIHdob2xlCit3b3JkIHVzZSBDVFJMLVcuCisKKwkvdGhlIGZpbmUgcGlnIH4KKworCQkgICAgIENUUkwtVworCisJL3RoZSBmaW5lIH4KKworQ1RSTC1VIHJlbW92ZXMgYWxsIHRleHQsIHRodXMgYWxsb3dzIHlvdSB0byBzdGFydCBhbGwgb3ZlciBhZ2Fpbi4KKworCitPVkVSU1RSSUtFCisKK1RoZSA8SW5zZXJ0PiBrZXkgdG9nZ2xlcyBiZXR3ZWVuIGluc2VydGluZyBjaGFyYWN0ZXJzIGFuZCByZXBsYWNpbmcgdGhlCitleGlzdGluZyBvbmVzLiAgU3RhcnQgd2l0aCB0aGlzIHRleHQ6CisKKwkvdGhlIGZpbmUgcGlnIH4KKworTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBzdGFydCBvZiAiZmluZSIgd2l0aCA8Uy1MZWZ0PiB0d2ljZSAob3IgPExlZnQ+IGVpZ2h0Cit0aW1lcywgaWYgPFMtTGVmdD4gZG9lc24ndCB3b3JrKS4gIE5vdyBwcmVzcyA8SW5zZXJ0PiB0byBzd2l0Y2ggdG8gb3ZlcnN0cmlrZQorYW5kIHR5cGUgImdyZWF0IjoKKworCS90aGUgZ3JlYXRwaWcgfgorCitPb3BzLCB3ZSBsb3N0IHRoZSBzcGFjZS4gIE5vdywgZG9uJ3QgdXNlIDxCUz4sIGJlY2F1c2UgaXQgd291bGQgZGVsZXRlIHRoZQorInQiICh0aGlzIGlzIGRpZmZlcmVudCBmcm9tIFJlcGxhY2UgbW9kZSkuICBJbnN0ZWFkLCBwcmVzcyA8SW5zZXJ0PiB0byBzd2l0Y2gKK2Zyb20gb3ZlcnN0cmlrZSB0byBpbnNlcnRpbmcsIGFuZCB0eXBlIHRoZSBzcGFjZToKKworCS90aGUgZ3JlYXQgcGlnIH4KKworCitDQU5DRUxMSU5HCisKK1lvdSB0aG91Z2h0IG9mIGV4ZWN1dGluZyBhIDogb3IgLyBjb21tYW5kLCBidXQgY2hhbmdlZCB5b3VyIG1pbmQuICBUbyBnZXQgcmlkCitvZiB3aGF0IHlvdSBhbHJlYWR5IHR5cGVkLCB3aXRob3V0IGV4ZWN1dGluZyBpdCwgcHJlc3MgQ1RSTC1DIG9yIDxFc2M+LgorCisJTm90ZToKKwk8RXNjPiBpcyB0aGUgdW5pdmVyc2FsICJnZXQgb3V0IiBrZXkuICBVbmZvcnR1bmF0ZWx5LCBpbiB0aGUgZ29vZCBvbGQKKwlWaSBwcmVzc2luZyA8RXNjPiBpbiBhIGNvbW1hbmQgbGluZSBleGVjdXRlZCB0aGUgY29tbWFuZCEgIFNpbmNlIHRoYXQKKwltaWdodCBiZSBjb25zaWRlcmVkIHRvIGJlIGEgYnVnLCBWaW0gdXNlcyA8RXNjPiB0byBjYW5jZWwgdGhlIGNvbW1hbmQuCisJQnV0IHdpdGggdGhlICdjcG9wdGlvbnMnIG9wdGlvbiBpdCBjYW4gYmUgbWFkZSBWaSBjb21wYXRpYmxlLiAgQW5kCisJd2hlbiB1c2luZyBhIG1hcHBpbmcgKHdoaWNoIG1pZ2h0IGJlIHdyaXR0ZW4gZm9yIFZpKSA8RXNjPiBhbHNvIHdvcmtzCisJVmkgY29tcGF0aWJsZS4gIFRoZXJlZm9yZSwgdXNpbmcgQ1RSTC1DIGlzIGEgbWV0aG9kIHRoYXQgYWx3YXlzIHdvcmtzLgorCitJZiB5b3UgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWFuZCBsaW5lLCBwcmVzc2luZyA8QlM+IHdpbGwgY2FuY2VsIHRoZQorY29tbWFuZC4gIEl0J3MgbGlrZSBkZWxldGluZyB0aGUgIjoiIG9yICIvIiB0aGF0IHRoZSBsaW5lIHN0YXJ0cyB3aXRoLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMC4yKglDb21tYW5kIGxpbmUgYWJicmV2aWF0aW9ucworCitTb21lIG9mIHRoZSAiOiIgY29tbWFuZHMgYXJlIHJlYWxseSBsb25nLiAgV2UgYWxyZWFkeSBtZW50aW9uZWQgdGhhdAorIjpzdWJzdGl0dXRlIiBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gIjpzIi4gIFRoaXMgaXMgYSBnZW5lcmljIG1lY2hhbmlzbSwgYWxsCisiOiIgY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkLgorCitIb3cgc2hvcnQgY2FuIGEgY29tbWFuZCBnZXQ/ICBUaGVyZSBhcmUgMjYgbGV0dGVycywgYW5kIG1hbnkgbW9yZSBjb21tYW5kcy4KK0ZvciBleGFtcGxlLCAiOnNldCIgYWxzbyBzdGFydHMgd2l0aCAiOnMiLCBidXQgIjpzIiBkb2Vzbid0IHN0YXJ0IGEgIjpzZXQiCitjb21tYW5kLiAgSW5zdGVhZCAiOnNldCIgY2FuIGJlIGFiYnJldmlhdGVkIHRvICI6c2UiLgorICAgV2hlbiB0aGUgc2hvcnRlciBmb3JtIG9mIGEgY29tbWFuZCBjb3VsZCBiZSB1c2VkIGZvciB0d28gY29tbWFuZHMsIGl0CitzdGFuZHMgZm9yIG9ubHkgb25lIG9mIHRoZW0uICBUaGVyZSBpcyBubyBsb2dpYyBiZWhpbmQgd2hpY2ggb25lLCB5b3UgaGF2ZSB0bworbGVhcm4gdGhlbS4gIEluIHRoZSBoZWxwIGZpbGVzIHRoZSBzaG9ydGVzdCBmb3JtIHRoYXQgd29ya3MgaXMgbWVudGlvbmVkLiAgRm9yCitleGFtcGxlOiA+CisKKwk6c1t1YnN0aXR1dGVdCisKK1RoaXMgbWVhbnMgdGhhdCB0aGUgc2hvcnRlc3QgZm9ybSBvZiAiOnN1YnN0aXR1dGUiIGlzICI6cyIuICBUaGUgZm9sbG93aW5nCitjaGFyYWN0ZXJzIGFyZSBvcHRpb25hbC4gIFRodXMgIjpzdSIgYW5kICI6c3ViIiBhbHNvIHdvcmsuCisKK0luIHRoZSB1c2VyIG1hbnVhbCB3ZSB3aWxsIGVpdGhlciB1c2UgdGhlIGZ1bGwgbmFtZSBvZiBjb21tYW5kLCBvciBhIHNob3J0Cit2ZXJzaW9uIHRoYXQgaXMgc3RpbGwgcmVhZGFibGUuICBGb3IgZXhhbXBsZSwgIjpmdW5jdGlvbiIgY2FuIGJlIGFiYnJldmlhdGVkCit0byAiOmZ1Ii4gIEJ1dCBzaW5jZSBtb3N0IHBlb3BsZSBkb24ndCB1bmRlcnN0YW5kIHdoYXQgdGhhdCBzdGFuZHMgZm9yLCB3ZQord2lsbCB1c2UgIjpmdW4iLiAgKFZpbSBkb2Vzbid0IGhhdmUgYSAiOmZ1bm55IiBjb21tYW5kLCBvdGhlcndpc2UgIjpmdW4iIHdvdWxkCitiZSBjb25mdXNpbmcgdG9vLikKKworSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpbiBWaW0gc2NyaXB0cyB5b3Ugd3JpdGUgdGhlIGZ1bGwgY29tbWFuZCBuYW1lLiAgVGhhdAorbWFrZXMgaXQgZWFzaWVyIHRvIHJlYWQgYmFjayB3aGVuIHlvdSBtYWtlIGxhdGVyIGNoYW5nZXMuICBFeGNlcHQgZm9yIHNvbWUKK29mdGVuIHVzZWQgY29tbWFuZHMgbGlrZSAiOnciICgiOndyaXRlIikgYW5kICI6ciIgKCI6cmVhZCIpLgorICAgQSBwYXJ0aWN1bGFybHkgY29uZnVzaW5nIG9uZSBpcyAiOmVuZCIsIHdoaWNoIGNvdWxkIHN0YW5kIGZvciAiOmVuZGlmIiwKKyI6ZW5kd2hpbGUiIG9yICI6ZW5kZnVuY3Rpb24iLiAgVGhlcmVmb3JlLCBhbHdheXMgdXNlIHRoZSBmdWxsIG5hbWUuCisKKworU0hPUlQgT1BUSU9OIE5BTUVTCisKK0luIHRoZSB1c2VyIG1hbnVhbCB0aGUgbG9uZyB2ZXJzaW9uIG9mIHRoZSBvcHRpb24gbmFtZXMgaXMgdXNlZC4gIE1hbnkgb3B0aW9ucworYWxzbyBoYXZlIGEgc2hvcnQgbmFtZS4gIFVubGlrZSAiOiIgY29tbWFuZHMsIHRoZXJlIGlzIG9ubHkgb25lIHNob3J0IG5hbWUKK3RoYXQgd29ya3MuICBGb3IgZXhhbXBsZSwgdGhlIHNob3J0IG5hbWUgb2YgJ2F1dG9pbmRlbnQnIGlzICdhaScuICBUaHVzIHRoZXNlCit0d28gY29tbWFuZHMgZG8gdGhlIHNhbWUgdGhpbmc6ID4KKworCTpzZXQgYXV0b2luZGVudAorCTpzZXQgYWkKKworWW91IGNhbiBmaW5kIHRoZSBmdWxsIGxpc3Qgb2YgbG9uZyBhbmQgc2hvcnQgbmFtZXMgaGVyZTogfG9wdGlvbi1saXN0fC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjAuMyoJQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24KKworVGhpcyBpcyBvbmUgb2YgdGhvc2UgVmltIGZlYXR1cmVzIHRoYXQsIGJ5IGl0c2VsZiwgaXMgYSByZWFzb24gdG8gc3dpdGNoIGZyb20KK1ZpIHRvIFZpbS4gIE9uY2UgeW91IGhhdmUgdXNlZCB0aGlzLCB5b3UgY2FuJ3QgZG8gd2l0aG91dC4KKworU3VwcG9zZSB5b3UgaGF2ZSBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZXNlIGZpbGVzOgorCisJaW5mby50eHQKKwlpbnRyby50eHQKKwlib2R5b2Z0aGVwYXBlci50eHQKKworVG8gZWRpdCB0aGUgbGFzdCBvbmUsIHlvdSB1c2UgdGhlIGNvbW1hbmQ6ID4KKworCTplZGl0IGJvZHlvZnRoZXBhcGVyLnR4dAorCitJdCdzIGVhc3kgdG8gdHlwZSB0aGlzIHdyb25nLiAgQSBtdWNoIHF1aWNrZXIgd2F5IGlzOiA+CisKKwk6ZWRpdCBiPFRhYj4KKworV2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIHNhbWUgY29tbWFuZC4gIFdoYXQgaGFwcGVuZWQ/ICBUaGUgPFRhYj4ga2V5IGRvZXMKK2NvbXBsZXRpb24gb2YgdGhlIHdvcmQgYmVmb3JlIHRoZSBjdXJzb3IuICBJbiB0aGlzIGNhc2UgImIiLiAgVmltIGxvb2tzIGluIHRoZQorZGlyZWN0b3J5IGFuZCBmaW5kcyBvbmx5IG9uZSBmaWxlIHRoYXQgc3RhcnRzIHdpdGggYSAiYiIuICBUaGF0IG11c3QgYmUgdGhlCitvbmUgeW91IGFyZSBsb29raW5nIGZvciwgdGh1cyBWaW0gY29tcGxldGVzIHRoZSBmaWxlIG5hbWUgZm9yIHlvdS4KKworTm93IHR5cGU6ID4KKworCTplZGl0IGk8VGFiPgorCitWaW0gd2lsbCBiZWVwLCBhbmQgZ2l2ZSB5b3U6ID4KKworCTplZGl0IGluZm8udHh0CisKK1RoZSBiZWVwIG1lYW5zIHRoYXQgVmltIGhhcyBmb3VuZCBtb3JlIHRoYW4gb25lIG1hdGNoLiAgSXQgdGhlbiB1c2VzIHRoZSBmaXJzdAorbWF0Y2ggaXQgZm91bmQgKGFscGhhYmV0aWNhbGx5KS4gIElmIHlvdSBwcmVzcyA8VGFiPiBhZ2FpbiwgeW91IGdldDogPgorCisJOmVkaXQgaW50cm8udHh0CisKK1RodXMsIGlmIHRoZSBmaXJzdCA8VGFiPiBkb2Vzbid0IGdpdmUgeW91IHRoZSBmaWxlIHlvdSB3ZXJlIGxvb2tpbmcgZm9yLCBwcmVzcworaXQgYWdhaW4uICBJZiB0aGVyZSBhcmUgbW9yZSBtYXRjaGVzLCB5b3Ugd2lsbCBzZWUgdGhlbSBhbGwsIG9uZSBhdCBhIHRpbWUuCisgICBJZiB5b3UgcHJlc3MgPFRhYj4gb24gdGhlIGxhc3QgbWF0Y2hpbmcgZW50cnksIHlvdSB3aWxsIGdvIGJhY2sgdG8gd2hhdCB5b3UKK2ZpcnN0IHR5cGVkOiA+CisKKwk6ZWRpdCBpCisKK1RoZW4gaXQgc3RhcnRzIGFsbCBvdmVyIGFnYWluLiAgVGh1cyBWaW0gY3ljbGVzIHRocm91Z2ggdGhlIGxpc3Qgb2YgbWF0Y2hlcy4KK1VzZSBDVFJMLVAgdG8gZ28gdGhyb3VnaCB0aGUgbGlzdCBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uOgorCisJICAgICAgPC0tLS0tLS0tLS0tLS0tLS0tLS0gPFRhYj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJCQkJCQkJICB8CisJCSAgPFRhYj4gLS0+CQkgICAgICAgPFRhYj4gLS0+CisJOmVkaXQgaQkJICAgICAgOmVkaXQgaW5mby50eHQJCSAgIDplZGl0IGludHJvLnR4dAorCQkgIDwtLSBDVFJMLVAJCSAgICAgICA8LS0gQ1RSTC1QCisJICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENUUkwtUCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+CisKKworQ09OVEVYVAorCitXaGVuIHlvdSB0eXBlICI6c2V0IGkiIGluc3RlYWQgb2YgIjplZGl0IGkiIGFuZCBwcmVzcyA8VGFiPiB5b3UgZ2V0OiA+CisKKwk6c2V0IGljb24KKworSGV5LCB3aHkgZGlkbid0IHlvdSBnZXQgIjpzZXQgaW5mby50eHQiPyAgVGhhdCdzIGJlY2F1c2UgVmltIGhhcyBjb250ZXh0CitzZW5zaXRpdmUgY29tcGxldGlvbi4gIFRoZSBraW5kIG9mIHdvcmRzIFZpbSB3aWxsIGxvb2sgZm9yIGRlcGVuZHMgb24gdGhlCitjb21tYW5kIGJlZm9yZSBpdC4gIFZpbSBrbm93cyB0aGF0IHlvdSBjYW5ub3QgdXNlIGEgZmlsZSBuYW1lIGp1c3QgYWZ0ZXIgYQorIjpzZXQiIGNvbW1hbmQsIGJ1dCB5b3UgY2FuIHVzZSBhbiBvcHRpb24gbmFtZS4KKyAgIEFnYWluLCBpZiB5b3UgcmVwZWF0IHR5cGluZyB0aGUgPFRhYj4sIFZpbSB3aWxsIGN5Y2xlIHRocm91Z2ggYWxsIG1hdGNoZXMuCitUaGVyZSBhcmUgcXVpdGUgYSBmZXcsIGl0J3MgYmV0dGVyIHRvIHR5cGUgbW9yZSBjaGFyYWN0ZXJzIGZpcnN0OiA+CisKKwk6c2V0IGlzazxUYWI+CisKK0dpdmVzOiA+CisKKwk6c2V0IGlza2V5d29yZAorCitOb3cgdHlwZSAiPSIgYW5kIHByZXNzIDxUYWI+OiA+CisKKwk6c2V0IGlza2V5d29yZD1ALDQ4LTU3LF8sMTkyLTI1NQorCitXaGF0IGhhcHBlbnMgaGVyZSBpcyB0aGF0IFZpbSBpbnNlcnRzIHRoZSBvbGQgdmFsdWUgb2YgdGhlIG9wdGlvbi4gIE5vdyB5b3UKK2NhbiBlZGl0IGl0LgorICAgV2hhdCBpcyBjb21wbGV0ZWQgd2l0aCA8VGFiPiBpcyB3aGF0IFZpbSBleHBlY3RzIGluIHRoYXQgcGxhY2UuICBKdXN0IHRyeQoraXQgb3V0IHRvIHNlZSBob3cgaXQgd29ya3MuICBJbiBzb21lIHNpdHVhdGlvbnMgeW91IHdpbGwgbm90IGdldCB3aGF0IHlvdQord2FudC4gIFRoYXQncyBlaXRoZXIgYmVjYXVzZSBWaW0gZG9lc24ndCBrbm93IHdoYXQgeW91IHdhbnQsIG9yIGJlY2F1c2UKK2NvbXBsZXRpb24gd2FzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhhdCBzaXR1YXRpb24uICBJbiB0aGF0IGNhc2UgeW91IHdpbGwgZ2V0CithIDxUYWI+IGluc2VydGVkIChkaXNwbGF5ZWQgYXMgXkkpLgorCisKK0xJU1QgTUFUQ0hFUworCitXaGVuIHRoZXJlIGFyZSBtYW55IG1hdGNoZXMsIHlvdSB3b3VsZCBsaWtlIHRvIHNlZSBhbiBvdmVydmlldy4gIERvIHRoaXMgYnkKK3ByZXNzaW5nIENUUkwtRC4gIEZvciBleGFtcGxlLCBwcmVzc2luZyBDVFJMLUQgYWZ0ZXI6ID4KKworCTpzZXQgaXMKKworcmVzdWx0cyBpbjogPgorCisJOnNldCBpcworCWluY3NlYXJjaCAgaXNmbmFtZSAgICBpc2lkZW50ICAgIGlza2V5d29yZCAgaXNwcmludAorCTpzZXQgaXMKKworVmltIGxpc3RzIHRoZSBtYXRjaGVzIGFuZCB0aGVuIGNvbWVzIGJhY2sgd2l0aCB0aGUgdGV4dCB5b3UgdHlwZWQuICBZb3UgY2FuCitub3cgY2hlY2sgdGhlIGxpc3QgZm9yIHRoZSBpdGVtIHlvdSB3YW50ZWQuICBJZiBpdCBpc24ndCB0aGVyZSwgeW91IGNhbiB1c2UKKzxCUz4gdG8gY29ycmVjdCB0aGUgd29yZC4gIElmIHRoZXJlIGFyZSBtYW55IG1hdGNoZXMsIHR5cGUgYSBmZXcgbW9yZQorY2hhcmFjdGVycyBiZWZvcmUgcHJlc3NpbmcgPFRhYj4gdG8gY29tcGxldGUgdGhlIHJlc3QuCisgICBJZiB5b3UgaGF2ZSB3YXRjaGVkIGNhcmVmdWxseSwgeW91IHdpbGwgaGF2ZSBub3RpY2VkIHRoYXQgImluY3NlYXJjaCIKK2RvZXNuJ3Qgc3RhcnQgd2l0aCAiaXMiLiAgSW4gdGhpcyBjYXNlICJpcyIgc3RhbmRzIGZvciB0aGUgc2hvcnQgbmFtZSBvZgorImluY3NlYXJjaCIuIChNYW55IG9wdGlvbnMgaGF2ZSBhIHNob3J0IGFuZCBhIGxvbmcgbmFtZS4pICBWaW0gaXMgY2xldmVyCitlbm91Z2ggdG8ga25vdyB0aGF0IHlvdSBtaWdodCBoYXZlIHdhbnRlZCB0byBleHBhbmQgdGhlIHNob3J0IG5hbWUgb2YgdGhlCitvcHRpb24gaW50byB0aGUgbG9uZyBuYW1lLgorCisKK1RIRVJFIElTIE1PUkUKKworVGhlIENUUkwtTCBjb21tYW5kIGNvbXBsZXRlcyB0aGUgd29yZCB0byB0aGUgbG9uZ2VzdCB1bmFtYmlndW91cyBzdHJpbmcuICBJZgoreW91IHR5cGUgIjplZGl0IGkiIGFuZCB0aGVyZSBhcmUgZmlsZXMgImluZm8udHh0IiBhbmQgImluZm9fYmFja3VwLnR4dCIgeW91Cit3aWxsIGdldCAiOmVkaXQgaW5mbyIuCisKK1RoZSAnd2lsZG1vZGUnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIHdheSBjb21wbGV0aW9uIHdvcmtzLgorVGhlICd3aWxkbWVudScgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGdldCBhIG1lbnUtbGlrZSBsaXN0IG9mIG1hdGNoZXMuCitVc2UgdGhlICdzdWZmaXhlcycgb3B0aW9uIHRvIHNwZWNpZnkgZmlsZXMgdGhhdCBhcmUgbGVzcyBpbXBvcnRhbnQgYW5kIGFwcGVhcgorYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBmaWxlcy4KK1RoZSAnd2lsZGlnbm9yZScgb3B0aW9uIHNwZWNpZmllcyBmaWxlcyB0aGF0IGFyZSBub3QgbGlzdGVkIGF0IGFsbC4KKworTW9yZSBhYm91dCBhbGwgb2YgdGhpcyBoZXJlOiB8Y21kbGluZS1jb21wbGV0aW9ufAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMC40KglDb21tYW5kIGxpbmUgaGlzdG9yeQorCitJbiBjaGFwdGVyIDMgd2UgYnJpZWZseSBtZW50aW9uZWQgdGhlIGhpc3RvcnkuICBUaGUgYmFzaWNzIGFyZSB0aGF0IHlvdSBjYW4KK3VzZSB0aGUgPFVwPiBrZXkgdG8gcmVjYWxsIGFuIG9sZGVyIGNvbW1hbmQgbGluZS4gIDxEb3duPiB0aGVuIHRha2VzIHlvdSBiYWNrCit0byBuZXdlciBjb21tYW5kcy4KKworVGhlcmUgYXJlIGFjdHVhbGx5IGZvdXIgaGlzdG9yaWVzLiAgVGhlIG9uZXMgd2Ugd2lsbCBtZW50aW9uIGhlcmUgYXJlIGZvciAiOiIKK2NvbW1hbmRzIGFuZCBmb3IgIi8iIGFuZCAiPyIgc2VhcmNoIGNvbW1hbmRzLiAgVGhlICIvIiBhbmQgIj8iIGNvbW1hbmRzIHNoYXJlCit0aGUgc2FtZSBoaXN0b3J5LCBiZWNhdXNlIHRoZXkgYXJlIGJvdGggc2VhcmNoIGNvbW1hbmRzLiAgVGhlIHR3byBvdGhlcgoraGlzdG9yaWVzIGFyZSBmb3IgZXhwcmVzc2lvbnMgYW5kIGlucHV0IGxpbmVzIGZvciB0aGUgaW5wdXQoKSBmdW5jdGlvbi4KK3xjbWRsaW5lLWhpc3Rvcnl8CisKK1N1cHBvc2UgeW91IGhhdmUgZG9uZSBhICI6c2V0IiBjb21tYW5kLCB0eXBlZCB0ZW4gbW9yZSBjb2xvbiBjb21tYW5kcyBhbmQgdGhlbgord2FudCB0byByZXBlYXQgdGhhdCAiOnNldCIgY29tbWFuZCBhZ2Fpbi4gIFlvdSBjb3VsZCBwcmVzcyAiOiIgYW5kIHRoZW4gdGVuCit0aW1lcyA8VXA+LiAgVGhlcmUgaXMgYSBxdWlja2VyIHdheTogPgorCisJOnNlPFVwPgorCitWaW0gd2lsbCBub3cgZ28gYmFjayB0byB0aGUgcHJldmlvdXMgY29tbWFuZCB0aGF0IHN0YXJ0ZWQgd2l0aCAic2UiLiAgWW91IGhhdmUKK2EgZ29vZCBjaGFuY2UgdGhhdCB0aGlzIGlzIHRoZSAiOnNldCIgY29tbWFuZCB5b3Ugd2VyZSBsb29raW5nIGZvci4gIEF0IGxlYXN0Cit5b3Ugc2hvdWxkIG5vdCBoYXZlIHRvIHByZXNzIDxVcD4gdmVyeSBvZnRlbiAodW5sZXNzICI6c2V0IiBjb21tYW5kcyBpcyBhbGwKK3lvdSBoYXZlIGRvbmUpLgorCitUaGUgPFVwPiBrZXkgd2lsbCB1c2UgdGhlIHRleHQgdHlwZWQgc28gZmFyIGFuZCBjb21wYXJlIGl0IHdpdGggdGhlIGxpbmVzIGluCit0aGUgaGlzdG9yeS4gIE9ubHkgbWF0Y2hpbmcgbGluZXMgd2lsbCBiZSB1c2VkLgorICAgSWYgeW91IGRvIG5vdCBmaW5kIHRoZSBsaW5lIHlvdSB3ZXJlIGxvb2tpbmcgZm9yLCB1c2UgPERvd24+IHRvIGdvIGJhY2sgdG8KK3doYXQgeW91IHR5cGVkIGFuZCBjb3JyZWN0IHRoYXQuICBPciB1c2UgQ1RSTC1VIHRvIHN0YXJ0IGFsbCBvdmVyIGFnYWluLgorCitUbyBzZWUgYWxsIHRoZSBsaW5lcyBpbiB0aGUgaGlzdG9yeTogPgorCisJOmhpc3RvcnkKKworVGhhdCdzIHRoZSBoaXN0b3J5IG9mICI6IiBjb21tYW5kcy4gIFRoZSBzZWFyY2ggaGlzdG9yeSBpcyBkaXNwbGF5ZWQgd2l0aCB0aGlzCitjb21tYW5kOiA+CisKKwk6aGlzdG9yeSAvCisKK0NUUkwtUCB3aWxsIHdvcmsgbGlrZSA8VXA+LCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHlvdSBhbHJlYWR5Cit0eXBlZC4gIFNpbWlsYXJseSBmb3IgQ1RSTC1OIGFuZCA8RG93bj4uICBDVFJMLVAgc3RhbmRzIGZvciBwcmV2aW91cywgQ1RSTC1OCitmb3IgbmV4dC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjAuNSoJQ29tbWFuZCBsaW5lIHdpbmRvdworCitUeXBpbmcgdGhlIHRleHQgaW4gdGhlIGNvbW1hbmQgbGluZSB3b3JrcyBkaWZmZXJlbnQgZnJvbSB0eXBpbmcgdGV4dCBpbiBJbnNlcnQKK21vZGUuICBJdCBkb2Vzbid0IGFsbG93IG1hbnkgY29tbWFuZHMgdG8gY2hhbmdlIHRoZSB0ZXh0LiAgRm9yIG1vc3QgY29tbWFuZHMKK3RoYXQncyBPSywgYnV0IHNvbWV0aW1lcyB5b3UgaGF2ZSB0byB0eXBlIGEgY29tcGxpY2F0ZWQgY29tbWFuZC4gIFRoYXQncyB3aGVyZQordGhlIGNvbW1hbmQgbGluZSB3aW5kb3cgaXMgdXNlZnVsLgorCitPcGVuIHRoZSBjb21tYW5kIGxpbmUgd2luZG93IHdpdGggdGhpcyBjb21tYW5kOiA+CisKKwlxOgorCitWaW0gbm93IG9wZW5zIGEgKHNtYWxsKSB3aW5kb3cgYXQgdGhlIGJvdHRvbS4gIEl0IGNvbnRhaW5zIHRoZSBjb21tYW5kIGxpbmUKK2hpc3RvcnksIGFuZCBhbiBlbXB0eSBsaW5lIGF0IHRoZSBlbmQ6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8b3RoZXIgd2luZG93CQkJICAgICAgfAorCXx+CQkJCSAgICAgIHwKKwl8ZmlsZS50eHQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8OmUgYwkJCQkgICAgICB8CisJfDplIGNvbmZpZy5oLmluCQkJICAgICAgfAorCXw6c2V0IHBhdGg9LiwvdXNyL2luY2x1ZGUsLAkgICAgICB8CisJfDpzZXQgaXNrZXl3b3JkPUAsNDgtNTcsXywxOTItMjU1ICAgICB8CisJfDpzZXQgaXMJCQkgICAgICB8CisJfDpxCQkJCSAgICAgIHwKKwl8OgkJCQkgICAgICB8CisJfGNvbW1hbmQtbGluZT09PT09PT09PT09PT09PT09PT09PT09PT18CisJfAkJCQkgICAgICB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1lvdSBhcmUgbm93IGluIE5vcm1hbCBtb2RlLiAgWW91IGNhbiB1c2UgdGhlICJoamtsIiBrZXlzIHRvIG1vdmUgYXJvdW5kLiAgRm9yCitleGFtcGxlLCBtb3ZlIHVwIHdpdGggIjVrIiB0byB0aGUgIjplIGNvbmZpZy5oLmluIiBsaW5lLiAgVHlwZSAiJGgiIHRvIGdvIHRvCit0aGUgImkiIG9mICJpbiIgYW5kIHR5cGUgImN3b3V0Ii4gIE5vdyB5b3UgaGF2ZSBjaGFuZ2VkIHRoZSBsaW5lIHRvOgorCisJOmUgY29uZmlnLmgub3V0IH4KKworTm93IHByZXNzIDxFbnRlcj4gYW5kIHRoaXMgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkLiAgVGhlIGNvbW1hbmQgbGluZSB3aW5kb3cKK3dpbGwgY2xvc2UuCisgICBUaGUgPEVudGVyPiBjb21tYW5kIHdpbGwgZXhlY3V0ZSB0aGUgbGluZSB1bmRlciB0aGUgY3Vyc29yLiAgSXQgZG9lc24ndAorbWF0dGVyIHdoZXRoZXIgVmltIGlzIGluIEluc2VydCBtb2RlIG9yIGluIE5vcm1hbCBtb2RlLgorICAgQ2hhbmdlcyBpbiB0aGUgY29tbWFuZCBsaW5lIHdpbmRvdyBhcmUgbG9zdC4gIFRoZXkgZG8gbm90IHJlc3VsdCBpbiB0aGUKK2hpc3RvcnkgdG8gYmUgY2hhbmdlZC4gIEV4Y2VwdCB0aGF0IHRoZSBjb21tYW5kIHlvdSBleGVjdXRlIHdpbGwgYmUgYWRkZWQgdG8KK3RoZSBlbmQgb2YgdGhlIGhpc3RvcnksIGxpa2Ugd2l0aCBhbGwgZXhlY3V0ZWQgY29tbWFuZHMuCisKK1RoZSBjb21tYW5kIGxpbmUgd2luZG93IGlzIHZlcnkgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gaGF2ZSBvdmVydmlldyBvZiB0aGUKK2hpc3RvcnksIGxvb2t1cCBhIHNpbWlsYXIgY29tbWFuZCwgY2hhbmdlIGl0IGEgYml0IGFuZCBleGVjdXRlIGl0LiAgQSBzZWFyY2gKK2NvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZmluZCBzb21ldGhpbmcuCisgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSB0aGUgIj9jb25maWciIHNlYXJjaCBjb21tYW5kIGNvdWxkIGhhdmUgYmVlbiB1c2VkCit0byBmaW5kIHRoZSBwcmV2aW91cyBjb21tYW5kIHRoYXQgY29udGFpbnMgImNvbmZpZyIuICBJdCdzIGEgYml0IHN0cmFuZ2UsCitiZWNhdXNlIHlvdSBhcmUgdXNpbmcgYSBjb21tYW5kIGxpbmUgdG8gc2VhcmNoIGluIHRoZSBjb21tYW5kIGxpbmUgd2luZG93LgorV2hpbGUgdHlwaW5nIHRoYXQgc2VhcmNoIGNvbW1hbmQgeW91IGNhbid0IG9wZW4gYW5vdGhlciBjb21tYW5kIGxpbmUgd2luZG93LAordGhlcmUgY2FuIGJlIG9ubHkgb25lLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzIxLnR4dHwgIEdvIGF3YXkgYW5kIGNvbWUgYmFjaworCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8yMS50eHQgYi9ydW50aW1lL2RvYy91c3JfMjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNzdiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMjEudHh0CkBAIC0wLDAgKzEsNDU2IEBACisqdXNyXzIxLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWFyIDI5CisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICBHbyBhd2F5IGFuZCBjb21lIGJhY2sKKworCitUaGlzIGNoYXB0ZXIgZ29lcyBpbnRvIG1peGluZyB0aGUgdXNlIG9mIG90aGVyIHByb2dyYW1zIHdpdGggVmltLiAgRWl0aGVyIGJ5CitleGVjdXRpbmcgcHJvZ3JhbSBmcm9tIGluc2lkZSBWaW0gb3IgYnkgbGVhdmluZyBWaW0gYW5kIGNvbWluZyBiYWNrIGxhdGVyLgorRnVydGhlcm1vcmUsIHRoaXMgaXMgYWJvdXQgdGhlIHdheXMgdG8gcmVtZW1iZXIgdGhlIHN0YXRlIG9mIFZpbSBhbmQgcmVzdG9yZQoraXQgbGF0ZXIuCisKK3wyMS4xfAlTdXNwZW5kIGFuZCByZXN1bWUKK3wyMS4yfAlFeGVjdXRpbmcgc2hlbGwgY29tbWFuZHMKK3wyMS4zfAlSZW1lbWJlcmluZyBpbmZvcm1hdGlvbjsgdmltaW5mbworfDIxLjR8CVNlc3Npb25zCit8MjEuNXwJVmlld3MKK3wyMS42fAlNb2RlbGluZXMKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMjIudHh0fCAgRmluZGluZyB0aGUgZmlsZSB0byBlZGl0CisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl8yMC50eHR8ICBUeXBpbmcgY29tbWFuZC1saW5lIGNvbW1hbmRzIHF1aWNrbHkKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIxLjEqCVN1c3BlbmQgYW5kIHJlc3VtZQorCitMaWtlIG1vc3QgVW5peCBwcm9ncmFtcyBWaW0gY2FuIGJlIHN1c3BlbmRlZCBieSBwcmVzc2luZyBDVFJMLVouICBUaGlzIHN0b3BzCitWaW0gYW5kIHRha2VzIHlvdSBiYWNrIHRvIHRoZSBzaGVsbCBpdCB3YXMgc3RhcnRlZCBpbi4gIFlvdSBjYW4gdGhlbiBkbyBhbnkKK290aGVyIGNvbW1hbmRzIHVudGlsIHlvdSBhcmUgYm9yZWQgd2l0aCB0aGVtLiAgVGhlbiBicmluZyBiYWNrIFZpbSB3aXRoIHRoZQorImZnIiBjb21tYW5kLiA+CisKKwlDVFJMLVoKKwl7YW55IHNlcXVlbmNlIG9mIHNoZWxsIGNvbW1hbmRzfQorCWZnCisKK1lvdSBhcmUgcmlnaHQgYmFjayB3aGVyZSB5b3UgbGVmdCBWaW0sIG5vdGhpbmcgaGFzIGNoYW5nZWQuCisgICBJbiBjYXNlIHByZXNzaW5nIENUUkwtWiBkb2Vzbid0IHdvcmssIHlvdSBjYW4gYWxzbyB1c2UgIjpzdXNwZW5kIi4KK0Rvbid0IGZvcmdldCB0byBicmluZyBWaW0gYmFjayB0byB0aGUgZm9yZWdyb3VuZCwgeW91IHdvdWxkIGxvc2UgYW55IGNoYW5nZXMKK3RoYXQgeW91IG1hZGUhCisKK09ubHkgVW5peCBoYXMgc3VwcG9ydCBmb3IgdGhpcy4gIE9uIG90aGVyIHN5c3RlbXMgVmltIHdpbGwgc3RhcnQgYSBzaGVsbCBmb3IKK3lvdS4gIFRoaXMgYWxzbyBoYXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYmVpbmcgYWJsZSB0byBleGVjdXRlIHNoZWxsIGNvbW1hbmRzLgorQnV0IGl0J3MgYSBuZXcgc2hlbGwsIG5vdCB0aGUgb25lIHRoYXQgeW91IHN0YXJ0ZWQgVmltIGZyb20uCisgICBXaGVuIHlvdSBhcmUgcnVubmluZyB0aGUgR1VJIHlvdSBjYW4ndCBnbyBiYWNrIHRvIHRoZSBzaGVsbCB3aGVyZSBWaW0gd2FzCitzdGFydGVkLiAgQ1RSTC1aIHdpbGwgbWluaW1pemUgdGhlIFZpbSB3aW5kb3cgaW5zdGVhZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjEuMioJRXhlY3V0aW5nIHNoZWxsIGNvbW1hbmRzCisKK1RvIGV4ZWN1dGUgYSBzaW5nbGUgc2hlbGwgY29tbWFuZCBmcm9tIFZpbSB1c2UgIjohe2NvbW1hbmR9Ii4gIEZvciBleGFtcGxlLCB0bworc2VlIGEgZGlyZWN0b3J5IGxpc3Rpbmc6ID4KKworCTohbHMKKwk6IWRpcgorCitUaGUgZmlyc3Qgb25lIGlzIGZvciBVbml4LCB0aGUgc2Vjb25kIG9uZSBmb3IgTVMtV2luZG93cy4KKyAgIFZpbSB3aWxsIGV4ZWN1dGUgdGhlIHByb2dyYW0uICBXaGVuIGl0IGVuZHMgeW91IHdpbGwgZ2V0IGEgcHJvbXB0IHRvIGhpdAorPEVudGVyPi4gIFRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIGEgbG9vayBhdCB0aGUgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQgYmVmb3JlCityZXR1cm5pbmcgdG8gdGhlIHRleHQgeW91IHdlcmUgZWRpdGluZy4KKyAgIFRoZSAiISIgaXMgYWxzbyB1c2VkIGluIG90aGVyIHBsYWNlcyB3aGVyZSBhIHByb2dyYW0gaXMgcnVuLiAgTGV0J3MgdGFrZQorYSBsb29rIGF0IGFuIG92ZXJ2aWV3OgorCisJOiF7cHJvZ3JhbX0JCWV4ZWN1dGUge3Byb2dyYW19CisJOnIgIXtwcm9ncmFtfQkJZXhlY3V0ZSB7cHJvZ3JhbX0gYW5kIHJlYWQgaXRzIG91dHB1dAorCTp3ICF7cHJvZ3JhbX0JCWV4ZWN1dGUge3Byb2dyYW19IGFuZCBzZW5kIHRleHQgdG8gaXRzIGlucHV0CisJOltyYW5nZV0he3Byb2dyYW19CWZpbHRlciB0ZXh0IHRocm91Z2gge3Byb2dyYW19CisKK05vdGljZSB0aGF0IHRoZSBwcmVjZW5zZSBvZiBhIHJhbmdlIGJlZm9yZSAiIXtwcm9ncmFtfSIgbWFrZXMgYSBiaWcKK2RpZmZlcmVuY2UuICBXaXRob3V0IGl0IGV4ZWN1dGVzIHRoZSBwcm9ncmFtIG5vcm1hbGx5LCB3aXRoIHRoZSByYW5nZSBhIG51bWJlcgorb2YgdGV4dCBsaW5lcyBpcyBmaWx0ZXJlZCB0aHJvdWdoIHRoZSBwcm9ncmFtLgorCitFeGVjdXRpbmcgYSB3aG9sZSByb3cgb2YgcHJvZ3JhbXMgdGhpcyB3YXkgaXMgcG9zc2libGUuICBCdXQgYSBzaGVsbCBpcyBtdWNoCitiZXR0ZXIgYXQgaXQuICBZb3UgY2FuIHN0YXJ0IGEgbmV3IHNoZWxsIHRoaXMgd2F5OiA+CisKKwk6c2hlbGwKKworVGhpcyBpcyBzaW1pbGFyIHRvIHVzaW5nIENUUkwtWiB0byBzdXNwZW5kIFZpbS4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgYSBuZXcKK3NoZWxsIGlzIHN0YXJ0ZWQuCisKK1doZW4gdXNpbmcgdGhlIEdVSSB0aGUgc2hlbGwgd2lsbCBiZSB1c2luZyB0aGUgVmltIHdpbmRvdyBmb3IgaXRzIGlucHV0IGFuZAorb3V0cHV0LiAgU2luY2UgVmltIGlzIG5vdCBhIHRlcm1pbmFsIGVtdWxhdG9yLCB0aGlzIHdpbGwgbm90IHdvcmsgcGVyZmVjdGx5LgorSWYgeW91IGhhdmUgdHJvdWJsZSwgdHJ5IHRvZ2dsaW5nIHRoZSAnZ3VpcHR5JyBvcHRpb24uICBJZiB0aGlzIHN0aWxsIGRvZXNuJ3QKK3dvcmsgd2VsbCBlbm91Z2gsIHN0YXJ0IGEgbmV3IHRlcm1pbmFsIHRvIHJ1biB0aGUgc2hlbGwgaW4uICBGb3IgZXhhbXBsZSB3aXRoOgorPgorCToheHRlcm0mCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIxLjMqCVJlbWVtYmVyaW5nIGluZm9ybWF0aW9uOyB2aW1pbmZvCisKK0FmdGVyIGVkaXRpbmcgZm9yIGEgd2hpbGUgeW91IHdpbGwgaGF2ZSB0ZXh0IGluIHJlZ2lzdGVycywgbWFya3MgaW4gdmFyaW91cworZmlsZXMsIGEgY29tbWFuZCBsaW5lIGhpc3RvcnkgZmlsbGVkIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgY29tbWFuZHMuICBXaGVuCit5b3UgZXhpdCBWaW0gYWxsIG9mIHRoaXMgaXMgbG9zdC4gIEJ1dCB5b3UgY2FuIGdldCBpdCBiYWNrIQorCitUaGUgdmltaW5mbyBmaWxlIGlzIGRlc2lnbmVkIHRvIHN0b3JlIHN0YXR1cyBpbmZvcm1hdGlvbjoKKworCUNvbW1hbmQtbGluZSBhbmQgU2VhcmNoIHBhdHRlcm4gaGlzdG9yeQorCVRleHQgaW4gcmVnaXN0ZXJzCisJTWFya3MgZm9yIHZhcmlvdXMgZmlsZXMKKwlUaGUgYnVmZmVyIGxpc3QKKwlHbG9iYWwgdmFyaWFibGVzCisKK0VhY2ggdGltZSB5b3UgZXhpdCBWaW0gaXQgd2lsbCBzdG9yZSB0aGlzIGluZm9ybWF0aW9uIGluIGEgZmlsZSwgdGhlIHZpbWluZm8KK2ZpbGUuICBXaGVuIFZpbSBzdGFydHMgYWdhaW4sIHRoZSB2aW1pbmZvIGZpbGUgaXMgcmVhZCBhbmQgdGhlIGluZm9ybWF0aW9uCityZXN0b3JlZC4KKworVGhlICd2aW1pbmZvJyBvcHRpb24gaXMgc2V0IGJ5IGRlZmF1bHQgdG8gcmVzdG9yZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIGl0ZW1zLgorWW91IG1pZ2h0IHdhbnQgdG8gc2V0IGl0IHRvIHJlbWVtYmVyIG1vcmUgaW5mb3JtYXRpb24uICBUaGlzIGlzIGRvbmUgdGhyb3VnaAordGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6c2V0IHZpbWluZm89c3RyaW5nCisKK1RoZSBzdHJpbmcgc3BlY2lmaWVzIHdoYXQgdG8gc2F2ZS4gIFRoZSBzeW50YXggb2YgdGhpcyBzdHJpbmcgaXMgYW4gb3B0aW9uCitjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgYW4gYXJndW1lbnQuICBUaGUgb3B0aW9uL2FyZ3VtZW50IHBhaXJzIGFyZSBzZXBhcmF0ZWQgYnkKK2NvbW1hcy4KKyAgIFRha2UgYSBsb29rIGF0IGhvdyB5b3UgY2FuIGJ1aWxkIHVwIHlvdXIgb3duIHZpbWluZm8gc3RyaW5nLiAgRmlyc3QsIHRoZSAnCitvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IGhvdyBtYW55IGZpbGVzIGZvciB3aGljaCB5b3Ugc2F2ZSBtYXJrcyAoYS16KS4gIFBpY2sKK2EgbmljZSBldmVuIG51bWJlciBmb3IgdGhpcyBvcHRpb24gKDEwMDAsIGZvciBpbnN0YW5jZSkuICBZb3VyIGNvbW1hbmQgbm93Citsb29rcyBsaWtlIHRoaXM6ID4KKworCTpzZXQgdmltaW5mbz0nMTAwMAorCitUaGUgZiBvcHRpb24gY29udHJvbHMgd2hldGhlciBnbG9iYWwgbWFya3MgKEEtWiBhbmQgMC05KSBhcmUgc3RvcmVkLiAgSWYgdGhpcworb3B0aW9uIGlzIDAsIG5vbmUgYXJlIHN0b3JlZC4gSWYgaXQgaXMgMSBvciB5b3UgZG8gbm90IHNwZWNpZnkgYW4gZiBvcHRpb24sCit0aGUgbWFya3MgYXJlIHN0b3JlZC4gIFlvdSB3YW50IHRoaXMgZmVhdHVyZSwgc28gbm93IHlvdSBoYXZlIHRoaXM6ID4KKworCTpzZXQgdmltaW5mbz0nMTAwMCxmMQorCitUaGUgPCBvcHRpb24gY29udHJvbHMgaG93IG1hbnkgbGluZXMgYXJlIHNhdmVkIGZvciBlYWNoIG9mIHRoZSByZWdpc3RlcnMuICBCeQorZGVmYXVsdCwgYWxsIHRoZSBsaW5lcyBhcmUgc2F2ZWQuICBJZiAwLCBub3RoaW5nIGlzIHNhdmVkLiAgVG8gYXZvaWQgYWRkaW5nCit0aG91c2FuZHMgb2YgbGluZXMgdG8geW91ciB2aW1pbmZvIGZpbGUgKHdoaWNoIG1pZ2h0IG5ldmVyIGdldCB1c2VkIGFuZCBtYWtlcworc3RhcnRpbmcgVmltIHNsb3dlcikgeW91IHVzZSBhIG1heGltdW0gb2YgNTAwIGxpbmVzOiA+CisKKwk6c2V0IHZpbWluZm89JzEwMDAsZjEsPDUwMAorPAorT3RoZXIgb3B0aW9ucyB5b3UgbWlnaHQgd2FudCB0byB1c2U6CisJOgludW1iZXIgb2YgbGluZXMgdG8gc2F2ZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeQorCUAJbnVtYmVyIG9mIGxpbmVzIHRvIHNhdmUgZnJvbSB0aGUgaW5wdXQgbGluZSBoaXN0b3J5CisJLwludW1iZXIgb2YgbGluZXMgdG8gc2F2ZSBmcm9tIHRoZSBzZWFyY2ggaGlzdG9yeQorCXIJcmVtb3ZhYmxlIG1lZGlhLCBmb3Igd2hpY2ggbm8gbWFya3Mgd2lsbCBiZSBzdG9yZWQgKGNhbiBiZQorCQl1c2VkIHNldmVyYWwgdGltZXMpCisJIQlnbG9iYWwgdmFyaWFibGVzIHRoYXQgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIGFuZAorCQlkb24ndCBjb250YWluIGxvd2VyY2FzZSBsZXR0ZXJzCisJaAlkaXNhYmxlICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIHdoZW4gc3RhcnRpbmcKKwklCXRoZSBidWZmZXIgbGlzdCAob25seSByZXN0b3JlZCB3aGVuIHN0YXJ0aW5nIFZpbSB3aXRob3V0IGZpbGUKKwkJYXJndW1lbnRzKQorCWMJY29udmVydCB0aGUgdGV4dCB1c2luZyAnZW5jb2RpbmcnCisJbgluYW1lIHVzZWQgZm9yIHRoZSB2aW1pbmZvIGZpbGUgKG11c3QgYmUgdGhlIGxhc3Qgb3B0aW9uKQorCitTZWUgdGhlICd2aW1pbmZvJyBvcHRpb24gYW5kIHx2aW1pbmZvLWZpbGV8IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitXaGVuIHlvdSBydW4gVmltIG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvbmUgZXhpdGluZyB3aWxsIHN0b3JlIGl0cworaW5mb3JtYXRpb24uICBUaGlzIG1heSBjYXVzZSBpbmZvcm1hdGlvbiB0aGF0IHByZXZpb3VzbHkgZXhpdGluZyBWaW1zIHN0b3JlZAordG8gYmUgbG9zdC4gIEVhY2ggaXRlbSBjYW4gYmUgcmVtZW1iZXJlZCBvbmx5IG9uY2UuCisKKworR0VUVElORyBCQUNLIFRPIFdIRVJFIFlPVSBXRVJFCisKK1lvdSBhcmUgaGFsZndheSBlZGl0aW5nIGEgZmlsZSBhbmQgaXQncyB0aW1lIHRvIGxlYXZlIGZvciBob2xpZGF5cy4gIFlvdSBleGl0CitWaW0gYW5kIGdvIGVuam95IHlvdXJzZWx2ZXMsIGZvcmdldHRpbmcgYWxsIGFib3V0IHlvdXIgd29yay4gIEFmdGVyIGEgY291cGxlCitvZiB3ZWVrcyB5b3Ugc3RhcnQgVmltLCBhbmQgdHlwZToKKz4KKwknMAorCitBbmQgeW91IGFyZSByaWdodCBiYWNrIHdoZXJlIHlvdSBsZWZ0IFZpbS4gIFNvIHlvdSBjYW4gZ2V0IG9uIHdpdGggeW91ciB3b3JrLgorICAgVmltIGNyZWF0ZXMgYSBtYXJrIGVhY2ggdGltZSB5b3UgZXhpdCBWaW0uICBUaGUgbGFzdCBvbmUgaXMgJzAuICBUaGUKK3Bvc2l0aW9uIHRoYXQgJzAgcG9pbnRlZCB0byBpcyBtYWRlICcxLiAgQW5kICcxIGlzIG1hZGUgdG8gJzIsIGFuZCBzbyBmb3J0aC4KK01hcmsgJzkgaXMgbG9zdC4KKyAgIFRoZSAiOm1hcmtzIiBjb21tYW5kIGlzIHVzZWZ1bCB0byBmaW5kIG91dCB3aGVyZSAnMCB0byAnOSB3aWxsIHRha2UgeW91LgorCisKK01PVkUgSU5GTyBGUk9NIE9ORSBWSU0gVE8gQU5PVEhFUgorCitZb3UgY2FuIHVzZSB0aGUgIjp3dmltaW5mbyIgYW5kICI6cnZpbWluZm8iIGNvbW1hbmRzIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlCitpbmZvcm1hdGlvbiB3aGlsZSBzdGlsbCBydW5uaW5nIFZpbS4gIFRoaXMgaXMgdXNlZnVsIGZvciBleGNoYW5naW5nIHJlZ2lzdGVyCitjb250ZW50cyBiZXR3ZWVuIHR3byBpbnN0YW5jZXMgb2YgVmltLCBmb3IgZXhhbXBsZS4gIEluIHRoZSBmaXJzdCBWaW0gZG86ID4KKworCTp3dmltaW5mbyEgfi90bXAvdmltaW5mbworCitBbmQgaW4gdGhlIHNlY29uZCBWaW0gZG86ID4KKworCTpydmltaW5mbyEgfi90bXAvdmltaW5mbworCitPYnZpb3VzbHksIHRoZSAidyIgc3RhbmRzIGZvciAid3JpdGUiIGFuZCB0aGUgInIiIGZvciAicmVhZCIuCisgICBUaGUgISBjaGFyYWN0ZXIgaXMgdXNlZCBieSAiOnd2aW1pbmZvIiB0byBmb3JjZWZ1bGx5IG92ZXJ3cml0ZSBhbiBleGlzdGluZworZmlsZS4gIFdoZW4gaXQgaXMgb21pdHRlZCwgYW5kIHRoZSBmaWxlIGV4aXN0cywgdGhlIGluZm9ybWF0aW9uIGlzIG1lcmdlZCBpbnRvCit0aGUgZmlsZS4KKyAgIFRoZSAhIGNoYXJhY3RlciB1c2VkIGZvciAiOnJ2aW1pbmZvIiBtZWFucyB0aGF0IGFsbCB0aGUgaW5mb3JtYXRpb24gaXMKK3VzZWQsIHRoaXMgbWF5IG92ZXJ3cml0ZSBleGlzdGluZyBpbmZvcm1hdGlvbi4gIFdpdGhvdXQgdGhlICEgb25seSBpbmZvcm1hdGlvbgordGhhdCB3YXNuJ3Qgc2V0IGlzIHVzZWQuCisgICBUaGVzZSBjb21tYW5kcyBjYW4gYWxzbyBiZSB1c2VkIHRvIHN0b3JlIGluZm8gYW5kIHVzZSBpdCBhZ2FpbiBsYXRlci4gIFlvdQorY291bGQgbWFrZSBhIGRpcmVjdG9yeSBmdWxsIG9mIHZpbWluZm8gZmlsZXMsIGVhY2ggY29udGFpbmluZyBpbmZvIGZvciBhCitkaWZmZXJlbnQgcHVycG9zZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjEuNCoJU2Vzc2lvbnMKKworU3VwcG9zZSB5b3UgYXJlIGVkaXRpbmcgYWxvbmcsIGFuZCBpdCBpcyB0aGUgZW5kIG9mIHRoZSBkYXkuICBZb3Ugd2FudCB0byBxdWl0Cit3b3JrIGFuZCBwaWNrIHVwIHdoZXJlIHlvdSBsZWZ0IG9mZiB0aGUgbmV4dCBkYXkuICBZb3UgY2FuIGRvIHRoaXMgYnkgc2F2aW5nCit5b3VyIGVkaXRpbmcgc2Vzc2lvbiBhbmQgcmVzdG9yaW5nIGl0IHRoZSBuZXh0IGRheS4KKyAgIEEgVmltIHNlc3Npb24gY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHlvdSBhcmUgZWRpdGluZy4KK1RoaXMgaW5jbHVkZXMgdGhpbmdzIHN1Y2ggYXMgdGhlIGZpbGUgbGlzdCwgd2luZG93IGxheW91dCwgZ2xvYmFsIHZhcmlhYmxlcywKK29wdGlvbnMgYW5kIG90aGVyIGluZm9ybWF0aW9uLiAoRXhhY3RseSB3aGF0IGlzIHJlbWVtYmVyZWQgaXMgY29udHJvbGxlZCBieQordGhlICdzZXNzaW9ub3B0aW9ucycgb3B0aW9uLCBkZXNjcmliZWQgYmVsb3cuKQorICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIGNyZWF0ZXMgYSBzZXNzaW9uIGZpbGU6ID4KKworCTpta3Nlc3Npb24gdmltYm9vay52aW0KKworTGF0ZXIgaWYgeW91IHdhbnQgdG8gcmVzdG9yZSB0aGlzIHNlc3Npb24sIHlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZDogPgorCisJOnNvdXJjZSB2aW1ib29rLnZpbQorCitJZiB5b3Ugd2FudCB0byBzdGFydCBWaW0gYW5kIHJlc3RvcmUgYSBzcGVjaWZpYyBzZXNzaW9uLCB5b3UgY2FuIHVzZSB0aGUKK2ZvbGxvd2luZyBjb21tYW5kOiA+CisKKwl2aW0gLVMgdmltYm9vay52aW0KKworVGhpcyB0ZWxscyBWaW0gdG8gcmVhZCBhIHNwZWNpZmljIGZpbGUgb24gc3RhcnR1cC4gIFRoZSAnUycgc3RhbmRzIGZvcgorc2Vzc2lvbiAoYWN0dWFsbHksIHlvdSBjYW4gc291cmNlIGFueSBWaW0gc2NyaXB0IHdpdGggLVMsIHRodXMgaXQgbWlnaHQgYXMKK3dlbGwgc3RhbmQgZm9yICJzb3VyY2UiKS4KKworVGhlIHdpbmRvd3MgdGhhdCB3ZXJlIG9wZW4gYXJlIHJlc3RvcmVkLCB3aXRoIHRoZSBzYW1lIHBvc2l0aW9uIGFuZCBzaXplIGFzCitiZWZvcmUuICBNYXBwaW5ncyBhbmQgb3B0aW9uIHZhbHVlcyBhcmUgbGlrZSBiZWZvcmUuCisgICBXaGF0IGV4YWN0bHkgaXMgcmVzdG9yZWQgZGVwZW5kcyBvbiB0aGUgJ3Nlc3Npb25vcHRpb25zJyBvcHRpb24uICBUaGUKK2RlZmF1bHQgdmFsdWUgaXMgImJsYW5rLGJ1ZmZlcnMsY3VyZGlyLGZvbGRzLGhlbHAsb3B0aW9ucyx3aW5zaXplIi4KKworCWJsYW5rCQlrZWVwIGVtcHR5IHdpbmRvd3MKKwlidWZmZXJzCQlhbGwgYnVmZmVycywgbm90IG9ubHkgdGhlIG9uZXMgaW4gYSB3aW5kb3cKKwljdXJkaXIJCXRoZSBjdXJyZW50IGRpcmVjdG9yeQorCWZvbGRzCQlmb2xkcywgYWxzbyBtYW51YWxseSBjcmVhdGVkIG9uZXMKKwloZWxwCQl0aGUgaGVscCB3aW5kb3cKKwlvcHRpb25zCQlhbGwgb3B0aW9ucyBhbmQgbWFwcGluZ3MKKwl3aW5zaXplCQl3aW5kb3cgc2l6ZXMKKworQ2hhbmdlIHRoaXMgdG8geW91ciBsaWtpbmcuICBUbyBhbHNvIHJlc3RvcmUgdGhlIHNpemUgb2YgdGhlIFZpbSB3aW5kb3csIGZvcgorZXhhbXBsZSwgdXNlOiA+CisKKwk6c2V0IHNlc3Npb25vcHRpb25zKz1yZXNpemUKKworCitTRVNTSU9OIEhFUkUsIFNFU1NJT04gVEhFUkUKKworVGhlIG9idmlvdXMgd2F5IHRvIHVzZSBzZXNzaW9ucyBpcyB3aGVuIHdvcmtpbmcgb24gZGlmZmVyZW50IHByb2plY3RzLgorU3VwcG9zZSB5b3Ugc3RvcmUgeW91IHNlc3Npb24gZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSAifi8udmltIi4gIFlvdSBhcmUKK2N1cnJlbnRseSB3b3JraW5nIG9uIHRoZSAic2VjcmV0IiBwcm9qZWN0IGFuZCBoYXZlIHRvIHN3aXRjaCB0byB0aGUgImJvcmluZyIKK3Byb2plY3Q6ID4KKworCTp3YWxsCisJOm1rc2Vzc2lvbiEgfi8udmltL3NlY3JldC52aW0KKwk6c291cmNlIH4vLnZpbS9ib3JpbmcudmltCisKK1RoaXMgZmlyc3QgdXNlcyAiOndhbGwiIHRvIHdyaXRlIGFsbCBtb2RpZmllZCBmaWxlcy4gIFRoZW4gdGhlIGN1cnJlbnQgc2Vzc2lvbgoraXMgc2F2ZWQsIHVzaW5nICI6bWtzZXNzaW9uISIuICBUaGlzIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzIHNlc3Npb24uICBUaGUKK25leHQgdGltZSB5b3UgbG9hZCB0aGUgc2VjcmV0IHNlc3Npb24geW91IGNhbiBjb250aW51ZSB3aGVyZSB5b3Ugd2VyZSBhdCB0aGlzCitwb2ludC4gIEFuZCBmaW5hbGx5IHlvdSBsb2FkIHRoZSBuZXcgImJvcmluZyIgc2Vzc2lvbi4KKworSWYgeW91IG9wZW4gaGVscCB3aW5kb3dzLCBzcGxpdCBhbmQgY2xvc2UgdmFyaW91cyB3aW5kb3csIGFuZCBnZW5lcmFsbHkgbWVzcwordXAgdGhlIHdpbmRvdyBsYXlvdXQsIHlvdSBjYW4gZ28gYmFjayB0byB0aGUgbGFzdCBzYXZlZCBzZXNzaW9uOiA+CisKKwk6c291cmNlIH4vLnZpbS9ib3JpbmcudmltCisKK1RodXMgeW91IGhhdmUgY29tcGxldGUgY29udHJvbCBvdmVyIHdoZXRoZXIgeW91IHdhbnQgdG8gY29udGludWUgbmV4dCB0aW1lCit3aGVyZSB5b3UgYXJlIG5vdywgYnkgc2F2aW5nIHRoZSBjdXJyZW50IHNldHVwIGluIGEgc2Vzc2lvbiwgb3Iga2VlcCB0aGUKK3Nlc3Npb24gZmlsZSBhcyBhIHN0YXJ0aW5nIHBvaW50LgorICAgQW5vdGhlciB3YXkgb2YgdXNpbmcgc2Vzc2lvbnMgaXMgdG8gY3JlYXRlIGEgd2luZG93IGxheW91dCB0aGF0IHlvdSBsaWtlIHRvCit1c2UsIGFuZCBzYXZlIHRoaXMgaW4gYSBzZXNzaW9uLiAgVGhlbiB5b3UgY2FuIGdvIGJhY2sgdG8gdGhpcyBsYXlvdXQgd2hlbmV2ZXIKK3lvdSB3YW50LgorICAgRm9yIGV4YW1wbGUsIHRoaXMgaXMgYSBuaWNlIGxheW91dCB0byB1c2U6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8CQkgICBWSU0gLSBtYWluIGhlbHAgZmlsZSAgfAorCXwJCQkJCSB8CisJfE1vdmUgYXJvdW5kOiAgVXNlIHRoZSBjdXJzb3Iga2V5cywgb3IgImh8CisJfGhlbHAudHh0PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18CisJfGV4cGxvcmVyICAgfAkJCQkgfAorCXxkaXIJICAgIHx+CQkJCSB8CisJfGRpcgkgICAgfH4JCQkJIHwKKwl8ZmlsZQkgICAgfH4JCQkJIHwKKwl8ZmlsZQkgICAgfH4JCQkJIHwKKwl8ZmlsZQkgICAgfH4JCQkJIHwKKwl8ZmlsZQkgICAgfH4JCQkJIHwKKwl8fi89PT09PT09PT18W05vIEZpbGVdPT09PT09PT09PT09PT09PT09PXwKKwl8CQkJCQkgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUaGlzIGhhcyBhIGhlbHAgd2luZG93IGF0IHRoZSB0b3AsIHNvIHRoYXQgeW91IGNhbiByZWFkIHRoaXMgdGV4dC4gIFRoZSBuYXJyb3cKK3ZlcnRpY2FsIHdpbmRvdyBvbiB0aGUgbGVmdCBjb250YWlucyBhIGZpbGUgZXhwbG9yZXIuICBUaGlzIGlzIGEgVmltIHBsdWdpbgordGhhdCBsaXN0cyB0aGUgY29udGVudHMgb2YgYSBkaXJlY3RvcnkuICBZb3UgY2FuIHNlbGVjdCBmaWxlcyB0byBlZGl0IHRoZXJlLgorTW9yZSBhYm91dCB0aGlzIGluIHRoZSBuZXh0IGNoYXB0ZXIuCisgICBDcmVhdGUgdGhpcyBmcm9tIGEganVzdCBzdGFydGVkIFZpbSB3aXRoOiA+CisKKwk6aGVscAorCUNUUkwtVyB3CisJOnZlcnRpY2FsIHNwbGl0IH4vCisKK1lvdSBjYW4gcmVzaXplIHRoZSB3aW5kb3dzIGEgYml0IHRvIHlvdXIgbGlraW5nLiAgVGhlbiBzYXZlIHRoZSBzZXNzaW9uIHdpdGg6Cis+CisJOm1rc2Vzc2lvbiB+Ly52aW0vbWluZS52aW0KKworTm93IHlvdSBjYW4gc3RhcnQgVmltIHdpdGggdGhpcyBsYXlvdXQ6ID4KKworCXZpbSAtUyB+Ly52aW0vbWluZS52aW0KKworSGludDogVG8gb3BlbiBhIGZpbGUgeW91IHNlZSBsaXN0ZWQgaW4gdGhlIGV4cGxvcmVyIHdpbmRvdyBpbiB0aGUgZW1wdHkKK3dpbmRvdywgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaWxlbmFtZSBhbmQgcHJlc3MgIk8iLiAgRG91YmxlIGNsaWNraW5nIHdpdGgKK3RoZSBtb3VzZSB3aWxsIGFsc28gZG8gdGhpcy4KKworCitVTklYIEFORCBNUy1XSU5ET1dTCisKK1NvbWUgcGVvcGxlIGhhdmUgdG8gZG8gd29yayBvbiBNUy1XaW5kb3dzIHN5c3RlbXMgb25lIGRheSBhbmQgb24gVW5peCBhbm90aGVyCitkYXkuICBJZiB5b3UgYXJlIG9uZSBvZiB0aGVtLCBjb25zaWRlciBhZGRpbmcgInNsYXNoIiBhbmQgInVuaXgiIHRvCisnc2Vzc2lvbm9wdGlvbnMnLiAgVGhlIHNlc3Npb24gZmlsZXMgd2lsbCB0aGVuIGJlIHdyaXR0ZW4gaW4gYSBmb3JtYXQgdGhhdCBjYW4KK2JlIHVzZWQgb24gYm90aCBzeXN0ZW1zLiAgVGhpcyBpcyB0aGUgY29tbWFuZCB0byBwdXQgaW4geW91ciB2aW1yYyBmaWxlOiA+CisKKwk6c2V0IHNlc3Npb25vcHRpb25zKz11bml4LHNsYXNoCisKK1ZpbSB3aWxsIHVzZSB0aGUgVW5peCBmb3JtYXQgdGhlbiwgYmVjYXVzZSB0aGUgTVMtV2luZG93cyBWaW0gY2FuIHJlYWQgYW5kCit3cml0ZSBVbml4IGZpbGVzLCBidXQgVW5peCBWaW0gY2FuJ3QgcmVhZCBNUy1XaW5kb3dzIGZvcm1hdCBzZXNzaW9uIGZpbGVzLgorU2ltaWxhcmx5LCBNUy1XaW5kb3dzIFZpbSB1bmRlcnN0YW5kcyBmaWxlIG5hbWVzIHdpdGggLyB0byBzZXBhcmF0ZSBuYW1lcywgYnV0CitVbml4IFZpbSBkb2Vzbid0IHVuZGVyc3RhbmQgXC4KKworCitTRVNTSU9OUyBBTkQgVklNSU5GTworCitTZXNzaW9ucyBzdG9yZSBtYW55IHRoaW5ncywgYnV0IG5vdCB0aGUgcG9zaXRpb24gb2YgbWFya3MsIGNvbnRlbnRzIG9mCityZWdpc3RlcnMgYW5kIHRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeS4gIFlvdSBuZWVkIHRvIHVzZSB0aGUgdmltaW5mbyBmZWF0dXJlCitmb3IgdGhlc2UgdGhpbmdzLgorICAgSW4gbW9zdCBzaXR1YXRpb25zIHlvdSB3aWxsIHdhbnQgdG8gdXNlIHNlc3Npb25zIHNlcGFyYXRlbHkgZnJvbSB2aW1pbmZvLgorVGhpcyBjYW4gYmUgdXNlZCB0byBzd2l0Y2ggdG8gYW5vdGhlciBzZXNzaW9uLCBidXQga2VlcCB0aGUgY29tbWFuZCBsaW5lCitoaXN0b3J5LiAgQW5kIHlhbmsgdGV4dCBpbnRvIHJlZ2lzdGVycyBpbiBvbmUgc2Vzc2lvbiwgYW5kIHBhc3RlIGl0IGJhY2sgaW4KK2Fub3RoZXIgc2Vzc2lvbi4KKyAgIFlvdSBtaWdodCBwcmVmZXIgdG8ga2VlcCB0aGUgaW5mbyB3aXRoIHRoZSBzZXNzaW9uLiAgWW91IHdpbGwgaGF2ZSB0byBkbwordGhpcyB5b3Vyc2VsZiB0aGVuLiAgRXhhbXBsZTogPgorCisJOm1rc2Vzc2lvbiEgfi8udmltL3NlY3JldC52aW0KKwk6d3ZpbWluZm8hIH4vLnZpbS9zZWNyZXQudmltaW5mbworCitBbmQgdG8gcmVzdG9yZSB0aGlzIGFnYWluOiA+CisKKwk6c291cmNlIH4vLnZpbS9zZWNyZXQudmltCisJOnJ2aW1pbmZvISB+Ly52aW0vc2VjcmV0LnZpbWluZm8KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjEuNSoJVmlld3MKKworQSBzZXNzaW9uIHN0b3JlcyB0aGUgbG9va3Mgb2YgdGhlIHdob2xlIG9mIFZpbS4gIFdoZW4geW91IHdhbnQgdG8gc3RvcmUgdGhlCitwcm9wZXJ0aWVzIGZvciBvbmUgd2luZG93IG9ubHksIHVzZSBhIHZpZXcuCisgICBUaGUgdXNlIG9mIGEgdmlldyBpcyBmb3Igd2hlbiB5b3Ugd2FudCB0byBlZGl0IGEgZmlsZSBpbiBhIHNwZWNpZmljIHdheS4KK0ZvciBleGFtcGxlLCB5b3UgaGF2ZSBsaW5lIG51bWJlcnMgZW5hYmxlZCB3aXRoIHRoZSAnbnVtYmVyJyBvcHRpb24gYW5kCitkZWZpbmVkIGEgZmV3IGZvbGRzLiAgSnVzdCBsaWtlIHdpdGggc2Vzc2lvbnMsIHlvdSBjYW4gcmVtZW1iZXIgdGhpcyB2aWV3IG9uCit0aGUgZmlsZSBhbmQgcmVzdG9yZSBpdCBsYXRlci4gIEFjdHVhbGx5LCB3aGVuIHlvdSBzdG9yZSBhIHNlc3Npb24sIGl0IHN0b3JlcwordGhlIHZpZXcgb2YgZWFjaCB3aW5kb3cuCisgICBUaGVyZSBhcmUgdHdvIGJhc2ljIHdheXMgdG8gdXNlIHZpZXdzLiAgVGhlIGZpcnN0IGlzIHRvIGxldCBWaW0gcGljayBhIG5hbWUKK2ZvciB0aGUgdmlldyBmaWxlLiAgWW91IGNhbiByZXN0b3JlIHRoZSB2aWV3IHdoZW4geW91IGxhdGVyIGVkaXQgdGhlIHNhbWUKK2ZpbGUuICBUbyBzdG9yZSB0aGUgdmlldyBmb3IgdGhlIGN1cnJlbnQgd2luZG93OiA+CisKKwk6bWt2aWV3CisKK1ZpbSB3aWxsIGRlY2lkZSB3aGVyZSB0byBzdG9yZSB0aGUgdmlldy4gIFdoZW4geW91IGxhdGVyIGVkaXQgdGhlIHNhbWUgZmlsZQoreW91IGdldCB0aGUgdmlldyBiYWNrIHdpdGggdGhpcyBjb21tYW5kOiA+CisKKwk6bG9hZHZpZXcKKworVGhhdCdzIGVhc3ksIGlzbid0IGl0PworICAgTm93IHlvdSB3YW50IHRvIHZpZXcgdGhlIGZpbGUgd2l0aG91dCB0aGUgJ251bWJlcicgb3B0aW9uIG9uLCBvciB3aXRoIGFsbAorZm9sZHMgb3BlbiwgeW91IGNhbiBzZXQgdGhlIG9wdGlvbnMgdG8gbWFrZSB0aGUgd2luZG93IGxvb2sgdGhhdCB3YXkuICBUaGVuCitzdG9yZSB0aGlzIHZpZXcgd2l0aDogPgorCisJOm1rdmlldyAxCisKK09idmlvdXNseSwgeW91IGNhbiBnZXQgdGhpcyBiYWNrIHdpdGg6ID4KKworCTpsb2FkdmlldyAxCisKK05vdyB5b3UgY2FuIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28gdmlld3Mgb24gdGhlIGZpbGUgYnkgdXNpbmcgIjpsb2FkdmlldyIgd2l0aAorYW5kIHdpdGhvdXQgdGhlICIxIiBhcmd1bWVudC4KKyAgIFlvdSBjYW4gc3RvcmUgdXAgdG8gdGVuIHZpZXdzIGZvciB0aGUgc2FtZSBmaWxlIHRoaXMgd2F5LCBvbmUgdW5udW1iZXJlZAorYW5kIG5pbmUgbnVtYmVyZWQgMSB0byA5LgorCisKK0EgVklFVyBXSVRIIEEgTkFNRQorCitUaGUgc2Vjb25kIGJhc2ljIHdheSB0byB1c2Ugdmlld3MgaXMgYnkgc3RvcmluZyB0aGUgdmlldyBpbiBhIGZpbGUgd2l0aCBhIG5hbWUKK3lvdSBjaG9zZS4gIFRoaXMgdmlldyBjYW4gYmUgbG9hZGVkIHdoaWxlIGVkaXRpbmcgYW5vdGhlciBmaWxlLiAgVmltIHdpbGwgdGhlbgorc3dpdGNoIHRvIGVkaXRpbmcgdGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZSB2aWV3LiAgVGh1cyB5b3UgY2FuIHVzZSB0aGlzIHRvCitxdWlja2x5IHN3aXRjaCB0byBlZGl0aW5nIGFub3RoZXIgZmlsZSwgd2l0aCBhbGwgaXRzIG9wdGlvbnMgc2V0IGFzIHlvdSBzYXZlZAordGhlbS4KKyAgIEZvciBleGFtcGxlLCB0byBzYXZlIHRoZSB2aWV3IG9mIHRoZSBjdXJyZW50IGZpbGU6ID4KKworCTpta3ZpZXcgfi8udmltL21haW4udmltCisKK1lvdSBjYW4gcmVzdG9yZSBpdCB3aXRoOiA+CisKKwk6c291cmNlIH4vLnZpbS9tYWluLnZpbQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMS42KglNb2RlbGluZXMKKworV2hlbiBlZGl0aW5nIGEgc3BlY2lmaWMgZmlsZSwgeW91IG1pZ2h0IHNldCBvcHRpb25zIHNwZWNpZmljYWxseSBmb3IgdGhhdAorZmlsZS4gIFR5cGluZyB0aGVzZSBjb21tYW5kcyBlYWNoIHRpbWUgaXMgYm9yaW5nLiAgVXNpbmcgYSBzZXNzaW9uIG9yIHZpZXcgZm9yCitlZGl0aW5nIGEgZmlsZSBkb2Vzbid0IHdvcmsgd2hlbiBzaGFyaW5nIHRoZSBmaWxlIGJldHdlZW4gc2V2ZXJhbCBwZW9wbGUuCisgICBUaGUgc29sdXRpb24gZm9yIHRoaXMgc2l0dWF0aW9uIGlzIGFkZGluZyBhIG1vZGVsaW5lIHRvIHRoZSBmaWxlLiAgVGhpcyBpcworYSBsaW5lIG9mIHRleHQgdGhhdCB0ZWxscyBWaW0gdGhlIHZhbHVlcyBvZiBvcHRpb25zLCB0byBiZSB1c2VkIGluIHRoaXMgZmlsZQorb25seS4KKyAgIEEgdHlwaWNhbCBleGFtcGxlIGlzIGEgQyBwcm9ncmFtIHdoZXJlIHlvdSBtYWtlIGluZGVudHMgYnkgYSBtdWx0aXBsZSBvZiA0CitzcGFjZXMuICBUaGlzIHJlcXVpcmVzIHNldHRpbmcgdGhlICdzaGlmdHdpZHRoJyBvcHRpb24gdG8gNC4gIFRoaXMgbW9kZWxpbmUKK3dpbGwgZG8gdGhhdDoKKworCS8qIHZpbTpzZXQgc2hpZnR3aWR0aD00OiAqLyB+CisKK1B1dCB0aGlzIGxpbmUgYXMgb25lIG9mIHRoZSBmaXJzdCBvciBsYXN0IGZpdmUgbGluZXMgaW4gdGhlIGZpbGUuICBXaGVuCitlZGl0aW5nIHRoZSBmaWxlLCB5b3Ugd2lsbCBub3RpY2UgdGhhdCAnc2hpZnR3aWR0aCcgd2lsbCBoYXZlIGJlZW4gc2V0IHRvCitmb3VyLiAgV2hlbiBlZGl0aW5nIGFub3RoZXIgZmlsZSwgaXQncyBzZXQgYmFjayB0byB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBlaWdodC4KKyAgIEZvciBzb21lIGZpbGVzIHRoZSBtb2RlbGluZSBmaXRzIHdlbGwgaW4gdGhlIGhlYWRlciwgdGh1cyBpdCBjYW4gYmUgcHV0IGF0Cit0aGUgdG9wIG9mIHRoZSBmaWxlLiAgRm9yIHRleHQgZmlsZXMgYW5kIG90aGVyIGZpbGVzIHdoZXJlIHRoZSBtb2RlbGluZSBnZXRzCitpbiB0aGUgd2F5IG9mIHRoZSBub3JtYWwgY29udGVudHMsIHB1dCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCitUaGUgJ21vZGVsaW5lcycgb3B0aW9uIHNwZWNpZmllcyBob3cgbWFueSBsaW5lcyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUKK2ZpbGUgYXJlIGluc3BlY3RlZCBmb3IgY29udGFpbmluZyBhIG1vZGVsaW5lLiAgVG8gaW5zcGVjdCB0ZW4gbGluZXM6ID4KKworCTpzZXQgbW9kZWxpbmVzPTEwCisKK1RoZSAnbW9kZWxpbmUnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzd2l0Y2ggdGhpcyBvZmYuICBEbyB0aGlzIHdoZW4geW91IGFyZQord29ya2luZyBhcyByb290IG9yIGRvbid0IHRydXN0IHRoZSBmaWxlcyB5b3UgYXJlIGVkaXRpbmc6ID4KKworCTpzZXQgbm9tb2RlbGluZQorCitVc2UgdGhpcyBmb3JtYXQgZm9yIHRoZSBtb2RlbGluZToKKworCWFueS10ZXh0IHZpbTpzZXQge29wdGlvbn09e3ZhbHVlfSAuLi4gOiBhbnktdGV4dCB+CisKK1RoZSAiYW55LXRleHQiIGluZGljYXRlcyB0aGF0IHlvdSBjYW4gcHV0IGFueSB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBhcnQKK3RoYXQgVmltIHdpbGwgdXNlLiAgVGhpcyBhbGxvd3MgbWFraW5nIGl0IGxvb2sgbGlrZSBhIGNvbW1lbnQsIGxpa2Ugd2hhdCB3YXMKK2RvbmUgYWJvdmUgd2l0aCAvKiBhbmQgKi8uCisgICBUaGUgIiB2aW06IiBwYXJ0IGlzIHdoYXQgbWFrZXMgVmltIHJlY29nbml6ZSB0aGlzIGxpbmUuICBUaGUgbXVzdCBiZSB3aGl0ZQorc3BhY2UgYmVmb3JlICJ2aW0iLCBvciAidmltIiBtdXN0IGJlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZS4gIFRodXMgdXNpbmcKK3NvbWV0aGluZyBsaWtlICJndmltOiIgd2lsbCBub3Qgd29yay4KKyAgIFRoZSBwYXJ0IGJldHdlZW4gdGhlIGNvbG9ucyBpcyBhICI6c2V0IiBjb21tYW5kLiAgSXQgd29ya3MgdGhlIHNhbWUgd2F5IGFzCit0eXBpbmcgdGhlICI6c2V0IiBjb21tYW5kLCBleGNlcHQgdGhhdCB5b3UgbmVlZCB0byBpbnNlcnQgYSBiYWNrc2xhc2ggYmVmb3JlIGEKK2NvbG9uIChvdGhlcndpc2UgaXQgd291bGQgYmUgc2VlbiBhcyB0aGUgZW5kIG9mIHRoZSBtb2RlbGluZSkuCisKK0Fub3RoZXIgZXhhbXBsZToKKworCS8vIHZpbTpzZXQgdGV4dHdpZHRoPTcyIGRpcj1jXDpcdG1wOiAgdXNlIGM6XHRtcCBoZXJlIH4KKworVGhlcmUgaXMgYW4gZXh0cmEgYmFja3NsYXNoIGJlZm9yZSB0aGUgZmlyc3QgY29sb24sIHNvIHRoYXQgaXQncyBpbmNsdWRlZCBpbgordGhlICI6c2V0IiBjb21tYW5kLiAgVGhlIHRleHQgYWZ0ZXIgdGhlIHNlY29uZCBjb2xvbiBpcyBpZ25vcmVkLCB0aHVzIGEgcmVtYXJrCitjYW4gYmUgcGxhY2VkIHRoZXJlLgorCitGb3IgbW9yZSBkZXRhaWxzIHNlZSB8bW9kZWxpbmV8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzIyLnR4dHwgIEZpbmRpbmcgdGhlIGZpbGUgdG8gZWRpdAorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8yMi50eHQgYi9ydW50aW1lL2RvYy91c3JfMjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTVjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMjIudHh0CkBAIC0wLDAgKzEsMzY0IEBACisqdXNyXzIyLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDMgTWFyIDE3CisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICBGaW5kaW5nIHRoZSBmaWxlIHRvIGVkaXQKKworCitGaWxlcyBjYW4gYmUgZm91bmQgZXZlcnl3aGVyZS4gIFNvIGhvdyBkbyB5b3UgZmluZCB0aGVtPyAgVmltIG9mZmVycyB2YXJpb3VzCit3YXlzIHRvIGJyb3dzZSB0aGUgZGlyZWN0b3J5IHRyZWUuICBUaGVyZSBhcmUgY29tbWFuZHMgdG8ganVtcCB0byBhIGZpbGUgdGhhdAoraXMgbWVudGlvbmVkIGluIGFub3RoZXIuICBBbmQgVmltIHJlbWVtYmVycyB3aGljaCBmaWxlcyBoYXZlIGJlZW4gZWRpdGVkCitiZWZvcmUuCisKK3wyMi4xfAlUaGUgZmlsZSBleHBsb3JlcgorfDIyLjJ8CVRoZSBjdXJyZW50IGRpcmVjdG9yeQorfDIyLjN8CUZpbmRpbmcgYSBmaWxlCit8MjIuNHwJVGhlIGJ1ZmZlciBsaXN0CisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzIzLnR4dHwgIEVkaXRpbmcgb3RoZXIgZmlsZXMKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzIxLnR4dHwgIEdvIGF3YXkgYW5kIGNvbWUgYmFjaworVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjIuMSoJVGhlIGZpbGUgZXhwbG9yZXIKKworVmltIGhhcyBhIHBsdWdpbiB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGVkaXQgYSBkaXJlY3RvcnkuICBUcnkgdGhpczogPgorCisJOmVkaXQgLgorCitUaHJvdWdoIHRoZSBtYWdpYyBvZiBhdXRvY29tbWFuZHMgYW5kIFZpbSBzY3JpcHRzLCB0aGUgd2luZG93IHdpbGwgYmUgZmlsbGVkCit3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5LiAgSXQgbG9va3MgbGlrZSB0aGlzOgorCisJIiBQcmVzcyA/IGZvciBrZXlib2FyZCBzaG9ydGN1dHMgfgorCSIgU29ydGVkIGJ5IG5hbWUgKC5iYWssfiwubywuaCwuaW5mbywuc3dwLC5vYmosLm9yaWcsLnJlaiBhdCBlbmQgb2YgbGlzdCkgfgorCSI9IC9ob21lL21vb2wvdmltL3ZpbTYvcnVudGltZS9kb2MvIH4KKwkuLi8gfgorCWNoZWNrLyB+CisJTWFrZWZpbGUgfgorCWF1dG9jbWQudHh0IH4KKwljaGFuZ2UudHh0IH4KKwlldmFsLnR4dH4gfgorCWZpbGV0eXBlLnR4dH4gfgorCWhlbHAudHh0LmluZm8gfgorCitZb3UgY2FuIHNlZSB0aGVzZSBpdGVtczoKKzEuICBBIGNvbW1lbnQgYWJvdXQgdXNpbmcgPyB0byBnZXQgaGVscCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGZpbGUKKyAgICBleHBsb3Jlci4KKzIuICBUaGUgc2Vjb25kIGxpbmUgbWVudGlvbnMgaG93IHRoZSBpdGVtcyBpbiB0aGUgZGlyZWN0b3J5IGFyZSBsaXN0ZWQuICBUaGV5CisgICAgY2FuIGJlIHNvcnRlZCBpbiBzZXZlcmFsIHdheXMuCiszLiAgVGhlIHRoaXJkIGxpbmUgaXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorNC4gIFRoZSAiLi4vIiBkaXJlY3RvcnkgaXRlbS4gIFRoaXMgaXMgdGhlIHBhcmVudCBkaXJlY3RvcnkuCis1LiAgVGhlIGRpcmVjdG9yeSBuYW1lcy4KKzYuICBUaGUgb3JkaW5hcnkgZmlsZSBuYW1lcy4gIEFzIG1lbnRpb25lZCBpbiB0aGUgc2Vjb25kIGxpbmUsIHNvbWUgYXJlIG5vdAorICAgIGhlcmUgYnV0ICJhdCB0aGUgZW5kIG9mIHRoZSBsaXN0Ii4KKzcuICBUaGUgbGVzcyBvcmRpbmFyeSBmaWxlIG5hbWVzLiAgWW91IGFyZSBleHBlY3RlZCB0byB1c2UgdGhlc2UgbGVzcyBvZnRlbiwKKyAgICB0aGVyZWZvcmUgdGhleSBoYXZlIGJlZW4gbW92ZWQgdG8gdGhlIGVuZC4KKworSWYgeW91IGhhdmUgc3ludGF4IGhpZ2hsaWdodGluZyBlbmFibGVkLCB0aGUgZGlmZmVyZW50IHBhcnRzIGFyZSBoaWdobGlnaHRlZAordG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BvdCB0aGVtLgorCitZb3UgY2FuIHVzZSBOb3JtYWwgbW9kZSBWaW0gY29tbWFuZHMgdG8gbW92ZSBhcm91bmQgaW4gdGhlIHRleHQuICBGb3IgZXhhbXBsZSwKK21vdmUgdG8gYSBmaWxlIGFuZCBwcmVzcyA8RW50ZXI+LiAgTm93IHlvdSBhcmUgZWRpdGluZyB0aGF0IGZpbGUuICBUbyBnbyBiYWNrCit0byB0aGUgZXhwbG9yZXIgdXNlICI6ZWRpdCAuIiBhZ2Fpbi4gIENUUkwtTyBhbHNvIHdvcmtzLgorICAgVHJ5IHVzaW5nIDxFbnRlcj4gd2hpbGUgdGhlIGN1cnNvciBpcyBvbiBhIGRpcmVjdG9yeSBuYW1lLiAgVGhlIHJlc3VsdCBpcwordGhhdCB0aGUgZXhwbG9yZXIgbW92ZXMgaW50byB0aGF0IGRpcmVjdG9yeSBhbmQgZGlzcGxheXMgdGhlIGl0ZW1zIGZvdW5kCit0aGVyZS4gIFByZXNzaW5nIDxFbnRlcj4gb24gdGhlIGZpcnN0IGRpcmVjdG9yeSAiLi4vIiBtb3ZlcyB5b3Ugb25lIGxldmVsCitoaWdoZXIuICBQcmVzc2luZyAiLSIgZG9lcyB0aGUgc2FtZSB0aGluZywgd2l0aG91dCB0aGUgbmVlZCB0byBtb3ZlIHRvIHRoZQorIi4uLyIgaXRlbSBmaXJzdC4KKworWW91IGNhbiBwcmVzcyA/IHRvIGdldCBzaG9ydCBoZWxwIG9uIHRoZSB0aGluZ3MgeW91IGNhbiBkbyBpbiB0aGUgZXhwbG9yZXIuCitUaGlzIGlzIHdoYXQgeW91IGdldDoKKworCSIgPGVudGVyPiA6IG9wZW4gZmlsZSBvciBkaXJlY3RvcnkgfgorCSIgbyA6IG9wZW4gbmV3IHdpbmRvdyBmb3IgZmlsZS9kaXJlY3RvcnkgfgorCSIgTyA6IG9wZW4gZmlsZSBpbiBwcmV2aW91c2x5IHZpc2l0ZWQgd2luZG93IH4KKwkiIHAgOiBwcmV2aWV3IHRoZSBmaWxlIH4KKwkiIGkgOiB0b2dnbGUgc2l6ZS9kYXRlIGxpc3RpbmcgfgorCSIgcyA6IHNlbGVjdCBzb3J0IGZpZWxkICAgIHIgOiByZXZlcnNlIHNvcnQgfgorCSIgLSA6IGdvIHVwIG9uZSBsZXZlbCAgICAgIGMgOiBjZCB0byB0aGlzIGRpciB+CisJIiBSIDogcmVuYW1lIGZpbGUJICAgRCA6IGRlbGV0ZSBmaWxlIH4KKwkiIDpoZWxwIGZpbGUtZXhwbG9yZXIgZm9yIGRldGFpbGVkIGhlbHAgfgorCitUaGUgZmlyc3QgZmV3IGNvbW1hbmRzIGFyZSBmb3Igc2VsZWN0aW5nIGEgZmlsZSB0byBkaXNwbGF5LiAgRGVwZW5kaW5nIG9uIHdoYXQKK2NvbW1hbmQgeW91IHVzZSwgdGhlIGZpbGUgYXBwZWFycyBzb21ld2hlcmU6CisKKwk8RW50ZXI+CQlVc2VzIHRoZSBjdXJyZW50IHdpbmRvdy4KKwlvCQlPcGVucyBhIG5ldyB3aW5kb3cuCisJTwkJVXNlcyB0aGUgcHJldmlvdXNseSB2aXNpdGVkIHdpbmRvdy4KKwlwCQlVc2VzIHRoZSBwcmV2aWV3IHdpbmRvdywgYW5kIG1vdmVzIHRoZSBjdXJzb3IgYmFjaworCQkJaW50byB0aGUgZXhwbG9yZXIgd2luZG93LiB8cHJldmlldy13aW5kb3d8CisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIHVzZWQgdG8gZGlzcGxheSBvdGhlciBpbmZvcm1hdGlvbjoKKworCWkJCURpc3BsYXkgdGhlIHNpemUgYW5kIGRhdGUgZm9yIHRoZSBmaWxlLiAgVXNpbmcgaSBhZ2FpbgorCQkJd2lsbCBoaWRlIHRoZSBpbmZvcm1hdGlvbi4KKwlzCQlVc2UgdGhlIGZpZWxkIHRoZSBjdXJzb3IgaXMgaW4gdG8gc29ydCBvbi4gIEZpcnN0CisJCQlkaXNwbGF5IHRoZSBzaXplIGFuZCBkYXRlIHdpdGggaS4gIFRoZW4gTW92ZSB0aGUKKwkJCWN1cnNvciB0byB0aGUgc2l6ZSBvZiBhbnkgZmlsZSBhbmQgcHJlc3Mgcy4gIFRoZSBmaWxlcworCQkJd2lsbCBub3cgYmUgc29ydGVkIG9uIHNpemUuICBQcmVzcyBzIHdpbGUgdGhlIGN1cnNvcgorCQkJaXMgb24gYSBkYXRlIGFuZCB0aGUgaXRlbXMgd2lsbCBiZSBzb3J0ZWQgb24gZGF0ZS4KKwlyCQlyZXZlcnNlIHRoZSBzb3J0aW5nIG9yZGVyIChlaXRoZXIgc2l6ZSBvciBkYXRlKQorCitUaGVyZSBhcmUgYSBmZXcgZXh0cmEgY29tbWFuZHM6CisKKwljCQlDaGFuZ2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRvIHRoZSBkaXNwbGF5ZWQKKwkJCWRpcmVjdG9yeS4gIFlvdSBjYW4gdGhlbiB0eXBlIGFuICI6ZWRpdCIgY29tbWFuZCBmb3IKKwkJCW9uZSBvZiB0aGUgZmlsZXMgd2l0aG91dCBwcmVwZW5kaW5nIHRoZSBwYXRoLgorCVIJCVJlbmFtZSB0aGUgZmlsZSB1bmRlciB0aGUgY3Vyc29yLiAgWW91IHdpbGwgYmUKKwkJCXByb21wdGVkIGZvciB0aGUgbmV3IG5hbWUuCisJRAkJRGVsZXRlIHRoZSBmaWxlIHVuZGVyIHRoZSBjdXJzb3IuICBZb3Ugd2lsbCBnZXQgYQorCQkJcHJvbXB0IHRvIGNvbmZpcm0gdGhpcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjIuMioJVGhlIGN1cnJlbnQgZGlyZWN0b3J5CisKK0p1c3QgbGlrZSB0aGUgc2hlbGwsIFZpbSBoYXMgdGhlIGNvbmNlcHQgb2YgYSBjdXJyZW50IGRpcmVjdG9yeS4gIFN1cHBvc2UgeW91CithcmUgaW4geW91ciBob21lIGRpcmVjdG9yeSBhbmQgd2FudCB0byBlZGl0IHNldmVyYWwgZmlsZXMgaW4gYSBkaXJlY3RvcnkKKyJWZXJ5TG9uZ0ZpbGVOYW1lIi4gIFlvdSBjb3VsZCBkbzogPgorCisJOmVkaXQgVmVyeUxvbmdGaWxlTmFtZS9maWxlMS50eHQKKwk6ZWRpdCBWZXJ5TG9uZ0ZpbGVOYW1lL2ZpbGUyLnR4dAorCTplZGl0IFZlcnlMb25nRmlsZU5hbWUvZmlsZTMudHh0CisKK1RvIGF2b2lkIG11Y2ggb2YgdGhlIHR5cGluZywgZG8gdGhpczogPgorCisJOmNkIFZlcnlMb25nRmlsZU5hbWUKKwk6ZWRpdCBmaWxlMS50eHQKKwk6ZWRpdCBmaWxlMi50eHQKKwk6ZWRpdCBmaWxlMy50eHQKKworVGhlICI6Y2QiIGNvbW1hbmQgY2hhbmdlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBZb3UgY2FuIHNlZSB3aGF0IHRoZSBjdXJyZW50CitkaXJlY3RvcnkgaXMgd2l0aCB0aGUgIjpwd2QiIGNvbW1hbmQ6ID4KKworCTpwd2QKKwkvaG9tZS9CcmFtL1ZlcnlMb25nRmlsZU5hbWUKKworVmltIHJlbWVtYmVycyB0aGUgbGFzdCBkaXJlY3RvcnkgdGhhdCB5b3UgdXNlZC4gIFVzZSAiY2QgLSIgdG8gZ28gYmFjayB0byBpdC4KK0V4YW1wbGU6ID4KKworCTpwd2QKKwkvaG9tZS9CcmFtL1ZlcnlMb25nRmlsZU5hbWUKKwk6Y2QgL2V0YworCTpwd2QKKwkvZXRjCisJOmNkIC0KKwk6cHdkCisJL2hvbWUvQnJhbS9WZXJ5TG9uZ0ZpbGVOYW1lCisJOmNkIC0KKwk6cHdkCisJL2V0YworCisKK1dJTkRPVyBMT0NBTCBESVJFQ1RPUlkKKworV2hlbiB5b3Ugc3BsaXQgYSB3aW5kb3csIGJvdGggd2luZG93cyB1c2UgdGhlIHNhbWUgY3VycmVudCBkaXJlY3RvcnkuICBXaGVuCit5b3Ugd2FudCB0byBlZGl0IGEgbnVtYmVyIG9mIGZpbGVzIHNvbWV3aGVyZSBlbHNlIGluIHRoZSBuZXcgd2luZG93LCB5b3UgY2FuCittYWtlIGl0IHVzZSBhIGRpZmZlcmVudCBkaXJlY3RvcnksIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGluCit0aGUgb3RoZXIgd2luZG93LiAgVGhpcyBpcyBjYWxsZWQgYSBsb2NhbCBkaXJlY3RvcnkuID4KKworCTpwd2QKKwkvaG9tZS9CcmFtL1ZlcnlMb25nRmlsZU5hbWUKKwk6c3BsaXQKKwk6bGNkIC9ldGMKKwk6cHdkCisJL2V0YworCUNUUkwtVyB3CisJOnB3ZAorCS9ob21lL0JyYW0vVmVyeUxvbmdGaWxlTmFtZQorCitTbyBsb25nIGFzIG5vICI6bGNkIiBjb21tYW5kIGhhcyBiZWVuIHVzZWQsIGFsbCB3aW5kb3dzIHNoYXJlIHRoZSBzYW1lIGN1cnJlbnQKK2RpcmVjdG9yeS4gIERvaW5nIGEgIjpjZCIgY29tbWFuZCBpbiBvbmUgd2luZG93IHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSBvZiB0aGUgb3RoZXIgd2luZG93LgorICAgRm9yIGEgd2luZG93IHdoZXJlICI6bGNkIiBoYXMgYmVlbiB1c2VkIGEgZGlmZmVyZW50IGN1cnJlbnQgZGlyZWN0b3J5IGlzCityZW1lbWJlcmVkLiAgVXNpbmcgIjpjZCIgb3IgIjpsY2QiIGluIG90aGVyIHdpbmRvd3Mgd2lsbCBub3QgY2hhbmdlIGl0LgorICAgV2hlbiB1c2luZyBhICI6Y2QiIGNvbW1hbmQgaW4gYSB3aW5kb3cgdGhhdCB1c2VzIGEgZGlmZmVyZW50IGN1cnJlbnQKK2RpcmVjdG9yeSwgaXQgd2lsbCBnbyBiYWNrIHRvIHVzaW5nIHRoZSBzaGFyZWQgZGlyZWN0b3J5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMi4zKglGaW5kaW5nIGEgZmlsZQorCitZb3UgYXJlIGVkaXRpbmcgYSBDIHByb2dyYW0gdGhhdCBjb250YWlucyB0aGlzIGxpbmU6CisKKwkjaW5jbHVkZSAiaW5pdHMuaCIgfgorCitZb3Ugd2FudCB0byBzZWUgd2hhdCBpcyBpbiB0aGF0ICJpbml0cy5oIiBmaWxlLiAgTW92ZSB0aGUgY3Vyc29yIG9uIHRoZSBuYW1lCitvZiB0aGUgZmlsZSBhbmQgdHlwZTogPgorCisJZ2YKKworVmltIHdpbGwgZmluZCB0aGUgZmlsZSBhbmQgZWRpdCBpdC4KKyAgIFdoYXQgaWYgdGhlIGZpbGUgaXMgbm90IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeT8gIFZpbSB3aWxsIHVzZSB0aGUgJ3BhdGgnCitvcHRpb24gdG8gZmluZCB0aGUgZmlsZS4gIFRoaXMgb3B0aW9uIGlzIGEgbGlzdCBvZiBkaXJlY3RvcnkgbmFtZXMgd2hlcmUgdG8KK2xvb2sgZm9yIHlvdXIgZmlsZS4KKyAgIFN1cHBvc2UgeW91IGhhdmUgeW91ciBpbmNsdWRlIGZpbGVzIGxvY2F0ZWQgaW4gImM6L3Byb2cvaW5jbHVkZSIuICBUaGlzCitjb21tYW5kIHdpbGwgYWRkIGl0IHRvIHRoZSAncGF0aCcgb3B0aW9uOiA+CisKKwk6c2V0IHBhdGgrPWM6L3Byb2cvaW5jbHVkZQorCitUaGlzIGRpcmVjdG9yeSBpcyBhbiBhYnNvbHV0ZSBwYXRoLiAgTm8gbWF0dGVyIHdoZXJlIHlvdSBhcmUsIGl0IHdpbGwgYmUgdGhlCitzYW1lIHBsYWNlLiAgV2hhdCBpZiB5b3UgaGF2ZSBsb2NhdGVkIGZpbGVzIGluIGEgc3ViZGlyZWN0b3J5LCBiZWxvdyB3aGVyZSB0aGUKK2ZpbGUgaXM/ICBUaGVuIHlvdSBjYW4gc3BlY2lmeSBhIHJlbGF0aXZlIHBhdGggbmFtZS4gIFRoaXMgc3RhcnRzIHdpdGggYSBkb3Q6Cis+CisJOnNldCBwYXRoKz0uL3Byb3RvCisKK1RoaXMgdGVsbHMgVmltIHRvIGxvb2sgaW4gdGhlIGRpcmVjdG9yeSAicHJvdG8iLCBiZWxvdyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZQorZmlsZSBpbiB3aGljaCB5b3UgdXNlICJnZiIgaXMuICBUaHVzIHVzaW5nICJnZiIgb24gImluaXRzLmgiIHdpbGwgbWFrZSBWaW0KK2xvb2sgZm9yICJwcm90by9pbml0cy5oIiwgc3RhcnRpbmcgaW4gdGhlIGRpcmVjdG9yeSBvZiB0aGUgZmlsZS4KKyAgIFdpdGhvdXQgdGhlICIuLyIsIHRodXMgInByb3RvIiwgVmltIHdvdWxkIGxvb2sgaW4gdGhlICJwcm90byIgZGlyZWN0b3J5CitiZWxvdyB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBBbmQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG1pZ2h0IG5vdCBiZSB3aGVyZSB0aGUKK2ZpbGUgdGhhdCB5b3UgYXJlIGVkaXRpbmcgaXMgbG9jYXRlZC4KKworVGhlICdwYXRoJyBvcHRpb24gYWxsb3dzIHNwZWNpZnlpbmcgdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHRvIHNlYXJjaCBmb3IgZmlsZXMKK2luIG1hbnkgbW9yZSB3YXlzLiAgU2VlIHRoZSBoZWxwIG9uIHRoZSAncGF0aCcgb3B0aW9uLgorICAgVGhlICdpc2ZuYW1lJyBvcHRpb24gaXMgdXNlZCB0byBkZWNpZGUgd2hpY2ggY2hhcmFjdGVycyBhcmUgaW5jbHVkZWQgaW4gdGhlCitmaWxlIG5hbWUsIGFuZCB3aGljaCBvbmVzIGFyZSBub3QgKGUuZy4sIHRoZSAiIGNoYXJhY3RlciBpbiB0aGUgZXhhbXBsZQorYWJvdmUpLgorCitXaGVuIHlvdSBrbm93IHRoZSBmaWxlIG5hbWUsIGJ1dCBpdCdzIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgZmlsZSwgeW91IGNhbgordHlwZSBpdDogPgorCisJOmZpbmQgaW5pdHMuaAorCitWaW0gd2lsbCB0aGVuIHVzZSB0aGUgJ3BhdGgnIG9wdGlvbiB0byB0cnkgYW5kIGxvY2F0ZSB0aGUgZmlsZS4gIFRoaXMgaXMgdGhlCitzYW1lIGFzIHRoZSAiOmVkaXQiIGNvbW1hbmQsIGV4Y2VwdCBmb3IgdGhlIHVzZSBvZiAncGF0aCcuCisKK1RvIG9wZW4gdGhlIGZvdW5kIGZpbGUgaW4gYSBuZXcgd2luZG93IHVzZSBDVFJMLVcgZiBpbnN0ZWFkIG9mICJnZiIsIG9yIHVzZQorIjpzZmluZCIgaW5zdGVhZCBvZiAiOmZpbmQiLgorCisKK0EgbmljZSB3YXkgdG8gZGlyZWN0bHkgc3RhcnQgVmltIHRvIGVkaXQgYSBmaWxlIHNvbWV3aGVyZSBpbiB0aGUgJ3BhdGgnOiA+CisKKwl2aW0gIitmaW5kIHN0ZGlvLmgiCisKK1RoaXMgZmluZHMgdGhlIGZpbGUgInN0ZGlvLmgiIGluIHlvdXIgdmFsdWUgb2YgJ3BhdGgnLiAgVGhlIHF1b3RlcyBhcmUKK25lY2Vzc2FyeSB0byBoYXZlIG9uZSBhcmd1bWVudCB8LStjfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjIuNCoJVGhlIGJ1ZmZlciBsaXN0CisKK1RoZSBWaW0gZWRpdG9yIHVzZXMgdGhlIHRlcm0gYnVmZmVyIHRvIGRlc2NyaWJlIGEgZmlsZSBiZWluZyBlZGl0ZWQuCitBY3R1YWxseSwgYSBidWZmZXIgaXMgYSBjb3B5IG9mIHRoZSBmaWxlIHRoYXQgeW91IGVkaXQuICBXaGVuIHlvdSBmaW5pc2gKK2NoYW5naW5nIHRoZSBidWZmZXIsIHlvdSB3cml0ZSB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0byB0aGUgZmlsZS4KK0J1ZmZlcnMgbm90IG9ubHkgY29udGFpbiBmaWxlIGNvbnRlbnRzLCBidXQgYWxzbyBhbGwgdGhlIG1hcmtzLCBzZXR0aW5ncywgYW5kCitvdGhlciBzdHVmZiB0aGF0IGdvZXMgd2l0aCBpdC4KKworCitISURERU4gQlVGRkVSUworCitTdXBwb3NlIHlvdSBhcmUgZWRpdGluZyB0aGUgZmlsZSBvbmUudHh0IGFuZCBuZWVkIHRvIGVkaXQgdGhlIGZpbGUgdHdvLnR4dC4KK1lvdSBjb3VsZCBzaW1wbHkgdXNlICI6ZWRpdCB0d28udHh0IiwgYnV0IHNpbmNlIHlvdSBtYWRlIGNoYW5nZXMgdG8gb25lLnR4dAordGhhdCB3b24ndCB3b3JrLiAgWW91IGFsc28gZG9uJ3Qgd2FudCB0byB3cml0ZSBvbmUudHh0IHlldC4gIFZpbSBoYXMgYQorc29sdXRpb24gZm9yIHlvdTogPgorCisJOmhpZGUgZWRpdCB0d28udHh0CisKK1RoZSBidWZmZXIgIm9uZS50eHQiIGRpc2FwcGVhcnMgZnJvbSB0aGUgc2NyZWVuLCBidXQgVmltIHN0aWxsIGtub3dzIHRoYXQgeW91CithcmUgZWRpdGluZyB0aGlzIGJ1ZmZlciwgc28gaXQga2VlcHMgdGhlIG1vZGlmaWVkIHRleHQuICBUaGlzIGlzIGNhbGxlZCBhCitoaWRkZW4gYnVmZmVyOiBUaGUgYnVmZmVyIGNvbnRhaW5zIHRleHQsIGJ1dCB5b3UgY2FuJ3Qgc2VlIGl0LgorICAgVGhlICI6aGlkZSIgY29tbWFuZCBhcmd1bWVudCBpcyBhbm90aGVyIGNvbW1hbmQuICBJdCBtYWtlcyB0aGF0IGNvbW1hbmQKK2JlaGF2ZSBsaWtlIHRoZSAnaGlkZGVuJyBvcHRpb24gd2FzIHNldC4gIFlvdSBjb3VsZCBhbHNvIHNldCB0aGlzIG9wdGlvbgoreW91cnNlbGYuICBUaGUgZWZmZWN0IGlzIHRoYXQgd2hlbiBhbnkgYnVmZmVyIGlzIGFiYW5kb25lZCwgaXQgYmVjb21lcyBoaWRkZW4uCisgICBCZSBjYXJlZnVsISAgV2hlbiB5b3UgaGF2ZSBoaWRkZW4gYnVmZmVycyB3aXRoIGNoYW5nZXMsIGRvbid0IGV4aXQgVmltCit3aXRob3V0IG1ha2luZyBzdXJlIHlvdSBoYXZlIHNhdmVkIGFsbCB0aGUgYnVmZmVycy4KKworCitJTkFDVElWRSBCVUZGRVJTCisKKyAgIFdoZW4gYSBidWZmZXIgaGFzIGJlZW4gdXNlZCBvbmNlLCBWaW0gcmVtZW1iZXJzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgaXQuCitXaGVuIGl0IGlzIG5vdCBkaXNwbGF5ZWQgaW4gYSB3aW5kb3cgYW5kIGl0IGlzIG5vdCBoaWRkZW4sIGl0IGlzIHN0aWxsIGluIHRoZQorYnVmZmVyIGxpc3QuICBUaGlzIGlzIGNhbGxlZCBhbiBpbmFjdGl2ZSBidWZmZXIuICBPdmVydmlldzoKKworICAgQWN0aXZlCQlBcHBlYXJzIGluIGEgd2luZG93LCB0ZXh0IGxvYWRlZC4KKyAgIEhpZGRlbgkJTm90IGluIGEgd2luZG93LCB0ZXh0IGxvYWRlZC4KKyAgIEluYWN0aXZlCQlOb3QgaW4gYSB3aW5kb3csIG5vIHRleHQgbG9hZGVkLgorCitUaGUgaW5hY3RpdmUgYnVmZmVycyBhcmUgcmVtZW1iZXJlZCwgYmVjYXVzZSBWaW0ga2VlcHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlbSwKK2xpa2UgbWFya3MuICBBbmQgcmVtZW1iZXJpbmcgdGhlIGZpbGUgbmFtZSBpcyB1c2VmdWwgdG9vLCBzbyB0aGF0IHlvdSBjYW4gc2VlCit3aGljaCBmaWxlcyB5b3UgaGF2ZSBlZGl0ZWQuICBBbmQgZWRpdCB0aGVtIGFnYWluLgorCisKK0xJU1RJTkcgQlVGRkVSUworCitWaWV3IHRoZSBidWZmZXIgbGlzdCB3aXRoIHRoaXMgY29tbWFuZDogPgorCisJOmJ1ZmZlcnMKKworQSBjb21tYW5kIHdoaWNoIGRvZXMgdGhlIHNhbWUsIGlzIG5vdCBzbyBvYnZpb3VzIHRvIGxpc3QgYnVmZmVycywgYnV0IGlzIG11Y2gKK3Nob3J0ZXIgdG8gdHlwZTogPgorCisJOmxzCisKK1RoZSBvdXRwdXQgY291bGQgbG9vayBsaWtlIHRoaXM6CisKKyAgMSAjaAkiaGVscC50eHQiCQkJbGluZSA2MiB+CisgIDIgJWwrCSJ1c3JfMjEudHh0IgkJCWxpbmUgMSB+CisgIDMJInVzcl90b2MudHh0IgkJCWxpbmUgMSB+CisKK1RoZSBmaXJzdCBjb2x1bW4gY29udGFpbnMgdGhlIGJ1ZmZlciBudW1iZXIuICBZb3UgY2FuIHVzZSB0aGlzIHRvIGVkaXQgdGhlCitidWZmZXIgd2l0aG91dCBoYXZpbmcgdG8gdHlwZSB0aGUgbmFtZSwgc2VlIGJlbG93LgorICAgQWZ0ZXIgdGhlIGJ1ZmZlciBudW1iZXIgY29tZSB0aGUgZmxhZ3MuICBUaGVuIHRoZSBuYW1lIG9mIHRoZSBmaWxlCithbmQgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBjdXJzb3Igd2FzIHRoZSBsYXN0IHRpbWUuCisgICBUaGUgZmxhZ3MgdGhhdCBjYW4gYXBwZWFyIGFyZSB0aGVzZSAoZnJvbSBsZWZ0IHRvIHJpZ2h0KToKKworCXUJQnVmZmVyIGlzIHVubGlzdGVkIHx1bmxpc3RlZC1idWZmZXJ8LgorCSAlCUN1cnJlbnQgYnVmZmVyLgorCSAjCUFsdGVybmF0ZSBidWZmZXIuCisJICBsCUJ1ZmZlciBpcyBsb2FkZWQgYW5kIGRpc3BsYXllZC4KKwkgIGgJQnVmZmVyIGlzIGxvYWRlZCBidXQgaGlkZGVuLgorCSAgID0JQnVmZmVyIGlzIHJlYWQtb25seS4KKwkgICAtCUJ1ZmZlciBpcyBub3QgbW9kaWZpYWJsZSwgdGhlICdtb2RpZmlhYmxlJyBvcHRpb24gaXMgb2ZmLgorCSAgICArCUJ1ZmZlciBoYXMgYmVlbiBtb2RpZmllZC4KKworCitFRElUSU5HIEEgQlVGRkVSCisKK1lvdSBjYW4gZWRpdCBhIGJ1ZmZlciBieSBpdHMgbnVtYmVyLiAgVGhhdCBhdm9pZHMgaGF2aW5nIHRvIHR5cGUgdGhlIGZpbGUKK25hbWU6ID4KKworCTpidWZmZXIgMgorCitCdXQgdGhlIG9ubHkgd2F5IHRvIGtub3cgdGhlIG51bWJlciBpcyBieSBsb29raW5nIGluIHRoZSBidWZmZXIgbGlzdC4gIFlvdSBjYW4KK3VzZSB0aGUgbmFtZSwgb3IgcGFydCBvZiBpdCwgaW5zdGVhZDogPgorCisJOmJ1ZmZlciBoZWxwCisKK1ZpbSB3aWxsIGZpbmQgYSBiZXN0IG1hdGNoIGZvciB0aGUgbmFtZSB5b3UgdHlwZS4gIElmIHRoZXJlIGlzIG9ubHkgb25lCitidWZmZXIgdGhhdCBtYXRjaGVzIHRoZSBuYW1lLCBpdCB3aWxsIGJlIHVzZWQuICBJbiB0aGlzIGNhc2UgImhlbHAudHh0Ii4KKyAgIFRvIG9wZW4gYSBidWZmZXIgaW4gYSBuZXcgd2luZG93OiA+CisKKwk6c2J1ZmZlciAzCisKK1RoaXMgd29ya3Mgd2l0aCBhIG5hbWUgYXMgd2VsbC4KKworCitVU0lORyBUSEUgQlVGRkVSIExJU1QKKworWW91IGNhbiBtb3ZlIGFyb3VuZCBpbiB0aGUgYnVmZmVyIGxpc3Qgd2l0aCB0aGVzZSBjb21tYW5kczoKKworCTpibmV4dAkJZ28gdG8gbmV4dCBidWZmZXIKKwk6YnByZXZpb3VzCWdvIHRvIHByZXZpb3VzIGJ1ZmZlcgorCTpiZmlyc3QJCWdvIHRvIHRoZSBmaXJzdCBidWZmZXIKKwk6Ymxhc3QJCWdvIHRvIHRoZSBsYXN0IGJ1ZmZlcgorCitUbyByZW1vdmUgYSBidWZmZXIgZnJvbSB0aGUgbGlzdCwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOmJkZWxldGUgMworCitBZ2FpbiwgdGhpcyBhbHNvIHdvcmtzIHdpdGggYSBuYW1lLgorICAgSWYgeW91IGRlbGV0ZSBhIGJ1ZmZlciB0aGF0IHdhcyBhY3RpdmUgKHZpc2libGUgaW4gYSB3aW5kb3cpLCB0aGF0IHdpbmRvdword2lsbCBiZSBjbG9zZWQuICBJZiB5b3UgZGVsZXRlIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlIGN1cnJlbnQgd2luZG93IHdpbGwgYmUKK2Nsb3NlZC4gIElmIGl0IHdhcyB0aGUgbGFzdCB3aW5kb3csIFZpbSB3aWxsIGZpbmQgYW5vdGhlciBidWZmZXIgdG8gZWRpdC4gIFlvdQorY2FuJ3QgYmUgZWRpdGluZyBub3RoaW5nIQorCisJTm90ZToKKwlFdmVuIGFmdGVyIHJlbW92aW5nIHRoZSBidWZmZXIgd2l0aCAiOmJkZWxldGUiIFZpbSBzdGlsbCByZW1lbWJlcnMgaXQuCisJSXQncyBhY3R1YWxseSBtYWRlICJ1bmxpc3RlZCIsIGl0IG5vIGxvbmdlciBhcHBlYXJzIGluIHRoZSBsaXN0IGZyb20KKwkiOmJ1ZmZlcnMiLiAgVGhlICI6YnVmZmVycyEiIGNvbW1hbmQgd2lsbCBsaXN0IHVubGlzdGVkIGJ1ZmZlcnMgKHllcywKKwlWaW0gY2FuIGRvIHRoZSBpbXBvc3NpYmxlKS4gIFRvIHJlYWxseSBtYWtlIFZpbSBmb3JnZXQgYWJvdXQgYSBidWZmZXIsCisJdXNlICI6YndpcGUiLiAgQWxzbyBzZWUgdGhlICdidWZsaXN0ZWQnIG9wdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8yMy50eHR8ICBFZGl0aW5nIG90aGVyIGZpbGVzCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzIzLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8yMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlOTk4MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8yMy50eHQKQEAgLTAsMCArMSwzNDMgQEAKKyp1c3JfMjMudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMSBTZXAgMDMKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgRWRpdGluZyBvdGhlciBmaWxlcworCisKK1RoaXMgY2hhcHRlciBpcyBhYm91dCBlZGl0aW5nIGZpbGVzIHRoYXQgYXJlIG5vdCBvcmRpbmFyeSBmaWxlcy4gIFdpdGggVmltIHlvdQorY2FuIGVkaXQgZmlsZXMgdGhhdCBhcmUgY29tcHJlc3NlZCBvciBlbmNyeXB0ZWQuICBTb21lIGZpbGVzIG5lZWQgdG8gYmUKK2FjY2Vzc2VkIG92ZXIgdGhlIGludGVybmV0LiAgV2l0aCBzb21lIHJlc3RyaWN0aW9ucywgYmluYXJ5IGZpbGVzIGNhbiBiZQorZWRpdGVkIGFzIHdlbGwuCisKK3wyMy4xfAlET1MsIE1hYyBhbmQgVW5peCBmaWxlcworfDIzLjJ8CUZpbGVzIG9uIHRoZSBpbnRlcm5ldAorfDIzLjN8CUVuY3J5cHRpb24KK3wyMy40fAlCaW5hcnkgZmlsZXMKK3wyMy41fAlDb21wcmVzc2VkIGZpbGVzCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzI0LnR4dHwgIEluc2VydGluZyBxdWlja2x5CisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl8yMi50eHR8ICBGaW5kaW5nIHRoZSBmaWxlIHRvIGVkaXQKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIzLjEqCURPUywgTWFjIGFuZCBVbml4IGZpbGVzCisKK0JhY2sgaW4gdGhlIGVhcmx5IGRheXMsIHRoZSBvbGQgVGVsZXR5cGUgbWFjaGluZXMgdXNlZCB0d28gY2hhcmFjdGVycyB0bworc3RhcnQgYSBuZXcgbGluZS4gIE9uZSB0byBtb3ZlIHRoZSBjYXJyaWFnZSBiYWNrIHRvIHRoZSBmaXJzdCBwb3NpdGlvbgorKGNhcnJpYWdlIHJldHVybiwgPENSPiksIGFub3RoZXIgdG8gbW92ZSB0aGUgcGFwZXIgdXAgKGxpbmUgZmVlZCwgPExGPikuCisgICBXaGVuIGNvbXB1dGVycyBjYW1lIG91dCwgc3RvcmFnZSB3YXMgZXhwZW5zaXZlLiAgU29tZSBwZW9wbGUgZGVjaWRlZCB0aGF0Cit0aGV5IGRpZCBub3QgbmVlZCB0d28gY2hhcmFjdGVycyBmb3IgZW5kLW9mLWxpbmUuICBUaGUgVU5JWCBwZW9wbGUgZGVjaWRlZAordGhleSBjb3VsZCB1c2UgPExpbmUgRmVlZD4gb25seSBmb3IgZW5kLW9mLWxpbmUuICBUaGUgQXBwbGUgcGVvcGxlCitzdGFuZGFyZGl6ZWQgb24gPENSPi4gIFRoZSBNUy1ET1MgKGFuZCBNaWNyb3NvZnQgV2luZG93cykgZm9sa3MgZGVjaWRlZCB0bwora2VlcCB0aGUgb2xkIDxDUj48TEY+LgorICAgVGhpcyBtZWFucyB0aGF0IGlmIHlvdSB0cnkgdG8gbW92ZSBhIGZpbGUgZnJvbSBvbmUgc3lzdGVtIHRvIGFub3RoZXIsIHlvdQoraGF2ZSBsaW5lLWJyZWFrIHByb2JsZW1zLiAgVGhlIFZpbSBlZGl0b3IgYXV0b21hdGljYWxseSByZWNvZ25pemVzIHRoZQorZGlmZmVyZW50IGZpbGUgZm9ybWF0cyBhbmQgaGFuZGxlcyB0aGluZ3MgcHJvcGVybHkgYmVoaW5kIHlvdXIgYmFjay4KKyAgIFRoZSBvcHRpb24gJ2ZpbGVmb3JtYXRzJyBjb250YWlucyB0aGUgdmFyaW91cyBmb3JtYXRzIHRoYXQgd2lsbCBiZSB0cmllZAord2hlbiBhIG5ldyBmaWxlIGlzIGVkaXRlZC4gIFRoZSBmb2xsb3dpbmcgY29tbWFuZCwgZm9yIGV4YW1wbGUsIHRlbGxzIFZpbSB0bwordHJ5IFVOSVggZm9ybWF0IGZpcnN0IGFuZCBNUy1ET1MgZm9ybWF0IHNlY29uZDogPgorCisJOnNldCBmaWxlZm9ybWF0cz11bml4LGRvcworCitZb3Ugd2lsbCBub3RpY2UgdGhlIGZvcm1hdCBpbiB0aGUgbWVzc2FnZSB5b3UgZ2V0IHdoZW4gZWRpdGluZyBhIGZpbGUuICBZb3UKK2Rvbid0IHNlZSBhbnl0aGluZyBpZiB5b3UgZWRpdCBhIG5hdGl2ZSBmaWxlIGZvcm1hdC4gIFRodXMgZWRpdGluZyBhIFVuaXggZmlsZQorb24gVW5peCB3b24ndCByZXN1bHQgaW4gYSByZW1hcmsuICBCdXQgd2hlbiB5b3UgZWRpdCBhIGRvcyBmaWxlLCBWaW0gd2lsbAorbm90aWZ5IHlvdSBvZiB0aGlzOgorCisJIi90bXAvdGVzdCIgW2Rvc10gM0wsIDcxQyB+CisKK0ZvciBhIE1hYyBmaWxlIHlvdSB3b3VsZCBzZWUgIlttYWNdIi4KKyAgIFRoZSBkZXRlY3RlZCBmaWxlIGZvcm1hdCBpcyBzdG9yZWQgaW4gdGhlICdmaWxlZm9ybWF0JyBvcHRpb24uICBUbyBzZWUKK3doaWNoIGZvcm1hdCB5b3UgaGF2ZSwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpzZXQgZmlsZWZvcm1hdD8KKworVGhlIHRocmVlIG5hbWVzIHRoYXQgVmltIHVzZXMgYXJlOgorCisJdW5peAkJPExGPgorCWRvcwkJPENSPjxMRj4KKwltYWMJCTxDUj4KKworCitVU0lORyBUSEUgTUFDIEZPUk1BVAorCitPbiBVbml4LCA8TEY+IGlzIHVzZWQgdG8gYnJlYWsgYSBsaW5lLiAgSXQncyBub3QgdW51c3VhbCB0byBoYXZlIGEgPENSPgorY2hhcmFjdGVyIGhhbGZ3YXkgYSBsaW5lLiAgSW5jaWRlbnRhbGx5LCB0aGlzIGhhcHBlbnMgcXVpdGUgb2Z0ZW4gaW4gVmkgKGFuZAorVmltKSBzY3JpcHRzLgorICAgT24gdGhlIE1hY2ludG9zaCwgd2hlcmUgPENSPiBpcyB0aGUgbGluZSBicmVhayBjaGFyYWN0ZXIsIGl0J3MgcG9zc2libGUgdG8KK2hhdmUgYSA8TEY+IGNoYXJhY3RlciBoYWxmd2F5IGEgbGluZS4KKyAgIFRoZSByZXN1bHQgaXMgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byBiZSAxMDAlIHN1cmUgd2hldGhlciBhIGZpbGUKK2NvbnRhaW5pbmcgYm90aCA8Q1I+IGFuZCA8TEY+IGNoYXJhY3RlcnMgaXMgYSBNYWMgb3IgYSBVbml4IGZpbGUuICBUaGVyZWZvcmUsCitWaW0gYXNzdW1lcyB0aGF0IG9uIFVuaXggeW91IHByb2JhYmx5IHdvbid0IGVkaXQgYSBNYWMgZmlsZSwgYW5kIGRvZXNuJ3QgY2hlY2sKK2ZvciB0aGlzIHR5cGUgb2YgZmlsZS4gIFRvIGNoZWNrIGZvciB0aGlzIGZvcm1hdCBhbnl3YXksIGFkZCAibWFjIiB0bworJ2ZpbGVmb3JtYXRzJzogPgorCisJOnNldCBmaWxlZm9ybWF0cys9bWFjCisKK1RoZW4gVmltIHdpbGwgdGFrZSBhIGd1ZXNzIGF0IHRoZSBmaWxlIGZvcm1hdC4gIFdhdGNoIG91dCBmb3Igc2l0dWF0aW9ucyB3aGVyZQorVmltIGd1ZXNzZXMgd3JvbmcuCisKKworT1ZFUlJVTElORyBUSEUgRk9STUFUCisKK0lmIHlvdSB1c2UgdGhlIGdvb2Qgb2xkIFZpIGFuZCB0cnkgdG8gZWRpdCBhbiBNUy1ET1MgZm9ybWF0IGZpbGUsIHlvdSB3aWxsCitmaW5kIHRoYXQgZWFjaCBsaW5lIGVuZHMgd2l0aCBhIF5NIGNoYXJhY3Rlci4gKF5NIGlzIDxDUj4pLiAgVGhlIGF1dG9tYXRpYworZGV0ZWN0aW9uIGF2b2lkcyB0aGlzLiAgU3VwcG9zZSB5b3UgZG8gd2FudCB0byBlZGl0IHRoZSBmaWxlIHRoYXQgd2F5PyAgVGhlbgoreW91IG5lZWQgdG8gb3ZlcnJ1bGUgdGhlIGZvcm1hdDogPgorCisJOmVkaXQgKytmZj11bml4IGZpbGUudHh0CisKK1RoZSAiKysiIHN0cmluZyBpcyBhbiBpdGVtIHRoYXQgdGVsbHMgVmltIHRoYXQgYW4gb3B0aW9uIG5hbWUgZm9sbG93cywgd2hpY2gKK292ZXJydWxlcyB0aGUgZGVmYXVsdCBmb3IgdGhpcyBzaW5nbGUgY29tbWFuZC4gICIrK2ZmIiBpcyB1c2VkIGZvcgorJ2ZpbGVmb3JtYXQnLiAgWW91IGNvdWxkIGFsc28gdXNlICIrK2ZmPW1hYyIgb3IgIisrZmY9ZG9zIi4KKyAgIFRoaXMgZG9lc24ndCB3b3JrIGZvciBhbnkgb3B0aW9uLCBvbmx5ICIrK2ZmIiBhbmQgIisrZW5jIiBhcmUgY3VycmVudGx5CitpbXBsZW1lbnRlZC4gIFRoZSBmdWxsIG5hbWVzICIrK2ZpbGVmb3JtYXQiIGFuZCAiKytlbmNvZGluZyIgYWxzbyB3b3JrLgorCisKK0NPTlZFUlNJT04KKworWW91IGNhbiB1c2UgdGhlICdmaWxlZm9ybWF0JyBvcHRpb24gdG8gY29udmVydCBmcm9tIG9uZSBmaWxlIGZvcm1hdCB0bworYW5vdGhlci4gIFN1cHBvc2UsIGZvciBleGFtcGxlLCB0aGF0IHlvdSBoYXZlIGFuIE1TLURPUyBmaWxlIG5hbWVkIFJFQURNRS5UWFQKK3RoYXQgeW91IHdhbnQgdG8gY29udmVydCB0byBVTklYIGZvcm1hdC4gIFN0YXJ0IGJ5IGVkaXRpbmcgdGhlIE1TLURPUyBmb3JtYXQKK2ZpbGU6ID4KKwl2aW0gUkVBRE1FLlRYVAorCitWaW0gd2lsbCByZWNvZ25pemUgdGhpcyBhcyBhIGRvcyBmb3JtYXQgZmlsZS4gIE5vdyBjaGFuZ2UgdGhlIGZpbGUgZm9ybWF0IHRvCitVTklYOiA+CisKKwk6c2V0IGZpbGVmb3JtYXQ9dW5peAorCTp3cml0ZQorCitUaGUgZmlsZSBpcyB3cml0dGVuIGluIFVuaXggZm9ybWF0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMy4yKglGaWxlcyBvbiB0aGUgaW50ZXJuZXQKKworU29tZW9uZSBzZW5kcyB5b3UgYW4gZS1tYWlsIG1lc3NhZ2UsIHdoaWNoIHJlZmVycyB0byBhIGZpbGUgYnkgaXRzIFVSTC4gIEZvcgorZXhhbXBsZToKKworCVlvdSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gaGVyZTogfgorCQlmdHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL1JFQURNRSB+CisKK1lvdSBjb3VsZCBzdGFydCBhIHByb2dyYW0gdG8gZG93bmxvYWQgdGhlIGZpbGUsIHNhdmUgaXQgb24geW91ciBsb2NhbCBkaXNrIGFuZAordGhlbiBzdGFydCBWaW0gdG8gZWRpdCBpdC4KKyAgIFRoZXJlIGlzIGEgbXVjaCBzaW1wbGVyIHdheS4gIE1vdmUgdGhlIGN1cnNvciB0byBhbnkgY2hhcmFjdGVyIG9mIHRoZSBVUkwuCitUaGVuIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCWdmCisKK1dpdGggYSBiaXQgb2YgbHVjaywgVmltIHdpbGwgZmlndXJlIG91dCB3aGljaCBwcm9ncmFtIHRvIHVzZSBmb3IgZG93bmxvYWRpbmcKK3RoZSBmaWxlLCBkb3dubG9hZCBpdCBhbmQgZWRpdCB0aGUgY29weS4gIFRvIG9wZW4gdGhlIGZpbGUgaW4gYSBuZXcgd2luZG93IHVzZQorQ1RSTC1XIGYuCisgICBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZyB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZS4gIEl0J3MgcG9zc2libGUgdGhhdAordGhlIFVSTCBpcyB3cm9uZywgeW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byByZWFkIGl0LCB0aGUgbmV0d29yayBjb25uZWN0aW9uCitpcyBkb3duLCBldGMuICBVbmZvcnR1bmF0ZWx5LCBpdCdzIGhhcmQgdG8gdGVsbCB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yLiAgWW91CittaWdodCB3YW50IHRvIHRyeSB0aGUgbWFudWFsIHdheSBvZiBkb3dubG9hZGluZyB0aGUgZmlsZS4KKworQWNjZXNzaW5nIGZpbGVzIG92ZXIgdGhlIGludGVybmV0IHdvcmtzIHdpdGggdGhlIG5ldHJ3IHBsdWdpbi4gIEN1cnJlbnRseSBVUkxzCit3aXRoIHRoZXNlIGZvcm1hdHMgYXJlIHJlY29nbml6ZWQ6CisKKwlmdHA6Ly8JCXVzZXMgZnRwCisJcmNwOi8vCQl1c2VzIHJjcAorCXNjcDovLwkJdXNlcyBzY3AKKwlodHRwOi8vCQl1c2VzIHdnZXQgKHJlYWRpbmcgb25seSkKKworVmltIGRvZXNuJ3QgZG8gdGhlIGNvbW11bmljYXRpb24gaXRzZWxmLCBpdCByZWxpZXMgb24gdGhlIG1lbnRpb25lZCBwcm9ncmFtcwordG8gYmUgYXZhaWxhYmxlIG9uIHlvdXIgY29tcHV0ZXIuICBPbiBtb3N0IFVuaXggc3lzdGVtcyAiZnRwIiBhbmQgInJjcCIgd2lsbAorYmUgcHJlc2VudC4gICJzY3AiIGFuZCAid2dldCIgbWlnaHQgbmVlZCB0byBiZSBpbnN0YWxsZWQuCisKK1ZpbSBkZXRlY3RzIHRoZXNlIFVSTHMgZm9yIGVhY2ggY29tbWFuZCB0aGF0IHN0YXJ0cyBlZGl0aW5nIGEgbmV3IGZpbGUsIGFsc28KK3dpdGggIjplZGl0IiBhbmQgIjpzcGxpdCIsIGZvciBleGFtcGxlLiAgV3JpdGUgY29tbWFuZHMgYWxzbyB3b3JrLCBleGNlcHQgZm9yCitodHRwOi8vLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiwgYWxzbyBhYm91dCBwYXNzd29yZHMsIHNlZSB8bmV0cnd8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMy4zKglFbmNyeXB0aW9uCisKK1NvbWUgaW5mb3JtYXRpb24geW91IHByZWZlciB0byBrZWVwIHRvIHlvdXJzZWxmLiAgRm9yIGV4YW1wbGUsIHdoZW4gd3JpdGluZworYSB0ZXN0IG9uIGEgY29tcHV0ZXIgdGhhdCBzdHVkZW50cyBhbHNvIHVzZS4gIFlvdSBkb24ndCB3YW50IGNsZXZlciBzdHVkZW50cwordG8gZmlndXJlIG91dCBhIHdheSB0byByZWFkIHRoZSBxdWVzdGlvbnMgYmVmb3JlIHRoZSBleGFtIHN0YXJ0cy4gIFZpbSBjYW4KK2VuY3J5cHQgdGhlIGZpbGUgZm9yIHlvdSwgd2hpY2ggZ2l2ZXMgeW91IHNvbWUgcHJvdGVjdGlvbi4KKyAgIFRvIHN0YXJ0IGVkaXRpbmcgYSBuZXcgZmlsZSB3aXRoIGVuY3J5cHRpb24sIHVzZSB0aGUgIi14IiBhcmd1bWVudCB0byBzdGFydAorVmltLiAgRXhhbXBsZTogPgorCisJdmltIC14IGV4YW0udHh0CisKK1ZpbSBwcm9tcHRzIHlvdSBmb3IgYSBrZXkgdXNlZCBmb3IgZW5jcnlwdGluZyBhbmQgZGVjcnlwdGluZyB0aGUgZmlsZToKKworCUVudGVyIGVuY3J5cHRpb24ga2V5OiB+CisKK0NhcmVmdWxseSB0eXBlIHRoZSBzZWNyZXQga2V5IG5vdy4gIFlvdSBjYW5ub3Qgc2VlIHRoZSBjaGFyYWN0ZXJzIHlvdSB0eXBlLAordGhleSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHN0YXJzLiAgVG8gYXZvaWQgdGhlIHNpdHVhdGlvbiB0aGF0IGEgdHlwaW5nIG1pc3Rha2UKK3dpbGwgY2F1c2UgdHJvdWJsZSwgVmltIGFza3MgeW91IHRvIGVudGVyIHRoZSBrZXkgYWdhaW46CisKKwlFbnRlciBzYW1lIGtleSBhZ2FpbjogfgorCitZb3UgY2FuIG5vdyBlZGl0IHRoaXMgZmlsZSBub3JtYWxseSBhbmQgcHV0IGluIGFsbCB5b3VyIHNlY3JldHMuICBXaGVuIHlvdQorZmluaXNoIGVkaXRpbmcgdGhlIGZpbGUgYW5kIHRlbGwgVmltIHRvIGV4aXQsIHRoZSBmaWxlIGlzIGVuY3J5cHRlZCBhbmQKK3dyaXR0ZW4uCisgICBXaGVuIHlvdSBlZGl0IHRoZSBmaWxlIHdpdGggVmltLCBpdCB3aWxsIGFzayB5b3UgdG8gZW50ZXIgdGhlIHNhbWUga2V5CithZ2Fpbi4gIFlvdSBkb24ndCBuZWVkIHRvIHVzZSB0aGUgIi14IiBhcmd1bWVudC4gIFlvdSBjYW4gYWxzbyB1c2UgdGhlIG5vcm1hbAorIjplZGl0IiBjb21tYW5kLiAgVmltIGFkZHMgYSBtYWdpYyBzdHJpbmcgdG8gdGhlIGZpbGUgYnkgd2hpY2ggaXQgcmVjb2duaXplcwordGhhdCB0aGUgZmlsZSB3YXMgZW5jcnlwdGVkLgorICAgSWYgeW91IHRyeSB0byB2aWV3IHRoaXMgZmlsZSB1c2luZyBhbm90aGVyIHByb2dyYW0sIGFsbCB5b3UgZ2V0IGlzIGdhcmJhZ2UuCitBbHNvLCBpZiB5b3UgZWRpdCB0aGUgZmlsZSB3aXRoIFZpbSBhbmQgZW50ZXIgdGhlIHdyb25nIGtleSwgeW91IGdldCBnYXJiYWdlLgorVmltIGRvZXMgbm90IGhhdmUgYSBtZWNoYW5pc20gdG8gY2hlY2sgaWYgdGhlIGtleSBpcyB0aGUgcmlnaHQgb25lICh0aGlzIG1ha2VzCitpdCBtdWNoIGhhcmRlciB0byBicmVhayB0aGUga2V5KS4KKworCitTV0lUQ0hJTkcgRU5DUllQVElPTiBPTiBBTkQgT0ZGCisKK1RvIGRpc2FibGUgdGhlIGVuY3J5cHRpb24gb2YgYSBmaWxlLCBzZXQgdGhlICdrZXknIG9wdGlvbiB0byBhbiBlbXB0eSBzdHJpbmc6Cis+CisJOnNldCBrZXk9CisKK1RoZSBuZXh0IHRpbWUgeW91IHdyaXRlIHRoZSBmaWxlIHRoaXMgd2lsbCBiZSBkb25lIHdpdGhvdXQgZW5jcnlwdGlvbi4KKyAgIFNldHRpbmcgdGhlICdrZXknIG9wdGlvbiB0byBlbmFibGUgZW5jcnlwdGlvbiBpcyBub3QgYSBnb29kIGlkZWEsIGJlY2F1c2UKK3RoZSBwYXNzd29yZCBhcHBlYXJzIGluIHRoZSBjbGVhci4gIEFueW9uZSBzaG91bGRlci1zdXJmaW5nIGNhbiByZWFkIHlvdXIKK3Bhc3N3b3JkLgorICAgVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB0aGUgIjpYIiBjb21tYW5kIHdhcyBjcmVhdGVkLiAgSXQgYXNrcyB5b3UgZm9yIGFuCitlbmNyeXB0aW9uIGtleSwganVzdCBsaWtlIHRoZSAiLXgiIGFyZ3VtZW50IGRpZDogPgorCisJOlgKKwlFbnRlciBlbmNyeXB0aW9uIGtleTogKioqKioqCisJRW50ZXIgc2FtZSBrZXkgYWdhaW46ICoqKioqKgorCisKK0xJTUlUUyBPTiBFTkNSWVBUSU9OCisKK1RoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSB1c2VkIGJ5IFZpbSBpcyB3ZWFrLiAgSXQgaXMgZ29vZCBlbm91Z2ggdG8ga2VlcCBvdXQKK3RoZSBjYXN1YWwgcHJvd2xlciwgYnV0IG5vdCBnb29kIGVub3VnaCB0byBrZWVwIG91dCBhIGNyeXB0b2xvZ3kgZXhwZXJ0IHdpdGgKK2xvdHMgb2YgdGltZSBvbiBoaXMgaGFuZHMuICBBbHNvIHlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCB0aGUgc3dhcCBmaWxlIGlzIG5vdAorZW5jcnlwdGVkOyBzbyB3aGlsZSB5b3UgYXJlIGVkaXRpbmcsIHBlb3BsZSB3aXRoIHN1cGVydXNlciBwcml2aWxlZ2VzIGNhbiByZWFkCit0aGUgdW5lbmNyeXB0ZWQgdGV4dCBmcm9tIHRoaXMgZmlsZS4KKyAgIE9uZSB3YXkgdG8gYXZvaWQgbGV0dGluZyBwZW9wbGUgcmVhZCB5b3VyIHN3YXAgZmlsZSBpcyB0byBhdm9pZCB1c2luZyBvbmUuCitJZiB0aGUgLW4gYXJndW1lbnQgaXMgc3VwcGxpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgbm8gc3dhcCBmaWxlIGlzIHVzZWQKKyhpbnN0ZWFkLCBWaW0gcHV0cyBldmVyeXRoaW5nIGluIG1lbW9yeSkuICBGb3IgZXhhbXBsZSwgdG8gZWRpdCB0aGUgZW5jcnlwdGVkCitmaWxlICJmaWxlLnR4dCIgd2l0aG91dCBhIHN3YXAgZmlsZSB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwl2aW0gLXggLW4gZmlsZS50eHQKKworV2hlbiBhbHJlYWR5IGVkaXRpbmcgYSBmaWxlLCB0aGUgc3dhcGZpbGUgY2FuIGJlIGRpc2FibGVkIHdpdGg6ID4KKworCTpzZXRsb2NhbCBub3N3YXBmaWxlCisKK1NpbmNlIHRoZXJlIGlzIG5vIHN3YXBmaWxlLCByZWNvdmVyeSB3aWxsIGJlIGltcG9zc2libGUuICBTYXZlIHRoZSBmaWxlIGEgYml0Cittb3JlIG9mdGVuIHRvIGF2b2lkIHRoZSByaXNrIG9mIGxvc2luZyB5b3VyIGNoYW5nZXMuCisKK1doaWxlIHRoZSBmaWxlIGlzIGluIG1lbW9yeSwgaXQgaXMgaW4gcGxhaW4gdGV4dC4gIEFueW9uZSB3aXRoIHByaXZpbGVnZSBjYW4KK2xvb2sgaW4gdGhlIGVkaXRvcidzIG1lbW9yeSBhbmQgZGlzY292ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgorICAgSWYgeW91IHVzZSBhIHZpbWluZm8gZmlsZSwgYmUgYXdhcmUgdGhhdCB0aGUgY29udGVudHMgb2YgdGV4dCByZWdpc3RlcnMgYXJlCit3cml0dGVuIG91dCBpbiB0aGUgY2xlYXIgYXMgd2VsbC4KKyAgIElmIHlvdSByZWFsbHkgd2FudCB0byBzZWN1cmUgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSwgZWRpdCBpdCBvbmx5IG9uIGEKK3BvcnRhYmxlIGNvbXB1dGVyIG5vdCBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrLCB1c2UgZ29vZCBlbmNyeXB0aW9uIHRvb2xzLCBhbmQKK2tlZXAgdGhlIGNvbXB1dGVyIGxvY2tlZCB1cCBpbiBhIGJpZyBzYWZlIHdoZW4gbm90IGluIHVzZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjMuNCoJQmluYXJ5IGZpbGVzCisKK1lvdSBjYW4gZWRpdCBiaW5hcnkgZmlsZXMgd2l0aCBWaW0uICBWaW0gd2Fzbid0IHJlYWxseSBtYWRlIGZvciB0aGlzLCB0aHVzCit0aGVyZSBhcmUgYSBmZXcgcmVzdHJpY3Rpb25zLiAgQnV0IHlvdSBjYW4gcmVhZCBhIGZpbGUsIGNoYW5nZSBhIGNoYXJhY3RlciBhbmQKK3dyaXRlIGl0IGJhY2ssIHdpdGggdGhlIHJlc3VsdCB0aGF0IG9ubHkgdGhhdCBvbmUgY2hhcmFjdGVyIHdhcyBjaGFuZ2VkIGFuZAordGhlIGZpbGUgaXMgaWRlbnRpY2FsIG90aGVyd2lzZS4KKyAgIFRvIG1ha2Ugc3VyZSB0aGF0IFZpbSBkb2VzIG5vdCB1c2UgaXRzIGNsZXZlciB0cmlja3MgaW4gdGhlIHdyb25nIHdheSwgYWRkCit0aGUgIi1iIiBhcmd1bWVudCB3aGVuIHN0YXJ0aW5nIFZpbTogPgorCisJdmltIC1iIGRhdGFmaWxlCisKK1RoaXMgc2V0cyB0aGUgJ2JpbmFyeScgb3B0aW9uLiAgVGhlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgdW5leHBlY3RlZCBzaWRlCitlZmZlY3RzIGFyZSB0dXJuZWQgb2ZmLiAgRm9yIGV4YW1wbGUsICd0ZXh0d2lkdGgnIGlzIHNldCB0byB6ZXJvLCB0byBhdm9pZAorYXV0b21hdGljIGZvcm1hdHRpbmcgb2YgbGluZXMuICBBbmQgZmlsZXMgYXJlIGFsd2F5cyByZWFkIGluIFVuaXggZmlsZSBmb3JtYXQuCisKK0JpbmFyeSBtb2RlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSBhIG1lc3NhZ2UgaW4gYSBwcm9ncmFtLiAgQmUgY2FyZWZ1bCBub3QgdG8KK2luc2VydCBvciBkZWxldGUgYW55IGNoYXJhY3RlcnMsIGl0IHdvdWxkIHN0b3AgdGhlIHByb2dyYW0gZnJvbSB3b3JraW5nLiAgVXNlCisiUiIgdG8gZW50ZXIgcmVwbGFjZSBtb2RlLgorCitNYW55IGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgd2lsbCBiZSB1bnByaW50YWJsZS4gIFRvIHNlZSB0aGVtIGluIEhleCBmb3JtYXQ6ID4KKworCTpzZXQgZGlzcGxheT11aGV4CisKK090aGVyd2lzZSwgdGhlICJnYSIgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSBjaGFyYWN0ZXIKK3VuZGVyIHRoZSBjdXJzb3IuICBUaGUgb3V0cHV0LCB3aGVuIHRoZSBjdXJzb3IgaXMgb24gYW4gPEVzYz4sIGxvb2tzIGxpa2UKK3RoaXM6CisKKwk8Xls+ICAyNywgIEhleCAxYiwgIE9jdGFsIDAzMyB+CisKK1RoZXJlIG1pZ2h0IG5vdCBiZSBtYW55IGxpbmUgYnJlYWtzIGluIHRoZSBmaWxlLiAgVG8gZ2V0IHNvbWUgb3ZlcnZpZXcgc3dpdGNoCit0aGUgJ3dyYXAnIG9wdGlvbiBvZmY6ID4KKworCTpzZXQgbm93cmFwCisKKworQllURSBQT1NJVElPTgorCitUbyBzZWUgb24gd2hpY2ggYnl0ZSB5b3UgYXJlIGluIHRoZSBmaWxlIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCWcgQ1RSTC1HCisKK1RoZSBvdXRwdXQgaXMgdmVyYm9zZToKKworICAgIENvbCA5LTE2IG9mIDktMTY7IExpbmUgMjc3IG9mIDMzMDsgV29yZCAxODA2IG9mIDIwNTg7IEJ5dGUgMTA1ODAgb2YgMTIyMDYgfgorCitUaGUgbGFzdCB0d28gbnVtYmVycyBhcmUgdGhlIGJ5dGUgcG9zaXRpb24gaW4gdGhlIGZpbGUgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YKK2J5dGVzLiAgVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgaG93ICdmaWxlZm9ybWF0JyBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgYnl0ZXMKK3RoYXQgYSBsaW5lIGJyZWFrIHVzZXMuCisgICAgVG8gbW92ZSB0byBhIHNwZWNpZmljIGJ5dGUgaW4gdGhlIGZpbGUsIHVzZSB0aGUgImdvIiBjb21tYW5kLiAgRm9yCitleGFtcGxlLCB0byBtb3ZlIHRvIGJ5dGUgMjM0NTogPgorCisJMjM0NWdvCisKKworVVNJTkcgWFhECisKK0EgcmVhbCBiaW5hcnkgZWRpdG9yIHNob3dzIHRoZSB0ZXh0IGluIHR3byB3YXlzOiBhcyBpdCBpcyBhbmQgaW4gaGV4IGZvcm1hdC4KK1lvdSBjYW4gZG8gdGhpcyBpbiBWaW0gYnkgZmlyc3QgY29udmVydGluZyB0aGUgZmlsZSB3aXRoIHRoZSAieHhkIiBwcm9ncmFtLgorVGhpcyBjb21lcyB3aXRoIFZpbS4KKyAgIEZpcnN0IGVkaXQgdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGU6ID4KKworCXZpbSAtYiBkYXRhZmlsZQorCitOb3cgY29udmVydCB0aGUgZmlsZSB0byBhIGhleCBkdW1wIHdpdGggeHhkOiA+CisKKwk6JSF4eGQKKworVGhlIHRleHQgd2lsbCBsb29rIGxpa2UgdGhpczoKKworCTAwMDAwMDA6IDFmOGIgMDgwOCAzOWQ3IDE3M2IgMDIwMyA3NDc0IDAwMmIgNGU0OSAgLi4uLjkuLjsuLnR0LitOSSB+CisJMDAwMDAxMDogNGIyYyA4NjYwIGViOWMgZWNhYyBjNDYyIGViOTQgMzQ1ZSAyZTMwICBLLC5gLi4uLi5iLi40Xi4wIH4KKwkwMDAwMDIwOiAzNzNiIDI3MzEgMGIyMiAwY2E2IGMxYTIgZDY2OSAxMDM1IDM5ZDkgIDc7JzEuIi4uLi4uaS41OS4gfgorCitZb3UgY2FuIG5vdyB2aWV3IGFuZCBlZGl0IHRoZSB0ZXh0IGFzIHlvdSBsaWtlLiAgVmltIHRyZWF0cyB0aGUgaW5mb3JtYXRpb24gYXMKK29yZGluYXJ5IHRleHQuICBDaGFuZ2luZyB0aGUgaGV4IGRvZXMgbm90IGNhdXNlIHRoZSBwcmludGFibGUgY2hhcmFjdGVyIHRvIGJlCitjaGFuZ2VkLCBvciB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgIEZpbmFsbHkgY29udmVydCBpdCBiYWNrIHdpdGg6Cis+CisJOiUheHhkIC1yCisKK09ubHkgY2hhbmdlcyBpbiB0aGUgaGV4IHBhcnQgYXJlIHVzZWQuICBDaGFuZ2VzIGluIHRoZSBwcmludGFibGUgdGV4dCBwYXJ0IG9uCit0aGUgcmlnaHQgYXJlIGlnbm9yZWQuCisKK1NlZSB0aGUgbWFudWFsIHBhZ2Ugb2YgeHhkIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMy41KglDb21wcmVzc2VkIGZpbGVzCisKK1RoaXMgaXMgZWFzeTogWW91IGNhbiBlZGl0IGEgY29tcHJlc3NlZCBmaWxlIGp1c3QgbGlrZSBhbnkgb3RoZXIgZmlsZS4gIFRoZQorImd6aXAiIHBsdWdpbiB0YWtlcyBjYXJlIG9mIGRlY29tcHJlc3NpbmcgdGhlIGZpbGUgd2hlbiB5b3UgZWRpdCBpdC4gIEFuZAorY29tcHJlc3NpbmcgaXQgYWdhaW4gd2hlbiB5b3Ugd3JpdGUgaXQuCisgICBUaGVzZSBjb21wcmVzc2lvbiBtZXRob2RzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOgorCisJLloJY29tcHJlc3MKKwkuZ3oJZ3ppcAorCS5iejIJYnppcDIKKworVmltIHVzZXMgdGhlIG1lbnRpb25lZCBwcm9ncmFtcyB0byBkbyB0aGUgYWN0dWFsIGNvbXByZXNzaW9uIGFuZAorZGVjb21wcmVzc2lvbi4gIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgdGhlIHByb2dyYW1zIGZpcnN0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzI0LnR4dHwgIEluc2VydGluZyBxdWlja2x5CisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzI0LnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8yNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyNzRkMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8yNC50eHQKQEAgLTAsMCArMSw1NzMgQEAKKyp1c3JfMjQudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBBdWcgMTgKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgSW5zZXJ0aW5nIHF1aWNrbHkKKworCitXaGVuIGVudGVyaW5nIHRleHQsIFZpbSBvZmZlcnMgdmFyaW91cyB3YXlzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGtleXN0cm9rZXMKK2FuZCBhdm9pZCB0eXBpbmcgbWlzdGFrZXMuICBVc2UgSW5zZXJ0IG1vZGUgY29tcGxldGlvbiB0byByZXBlYXQgcHJldmlvdXNseQordHlwZWQgd29yZHMuICBBYmJyZXZpYXRlIGxvbmcgd29yZHMgdG8gc2hvcnQgb25lcy4gIFR5cGUgY2hhcmFjdGVycyB0aGF0CithcmVuJ3Qgb24geW91ciBrZXlib2FyZC4KKworfDI0LjF8CU1ha2luZyBjb3JyZWN0aW9ucworfDI0LjJ8CVNob3dpbmcgbWF0Y2hlcworfDI0LjN8CUNvbXBsZXRpb24KK3wyNC40fAlSZXBlYXRpbmcgYW4gaW5zZXJ0Cit8MjQuNXwJQ29weWluZyBmcm9tIGFub3RoZXIgbGluZQorfDI0LjZ8CUluc2VydGluZyBhIHJlZ2lzdGVyCit8MjQuN3wJQWJicmV2aWF0aW9ucworfDI0Ljh8CUVudGVyaW5nIHNwZWNpYWwgY2hhcmFjdGVycworfDI0Ljl8CURpZ3JhcGhzCit8MjQuMTB8CU5vcm1hbCBtb2RlIGNvbW1hbmRzCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzI1LnR4dHwgIEVkaXRpbmcgZm9ybWF0dGVkIHRleHQKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzIzLnR4dHwgIEVkaXRpbmcgb3RoZXIgZmlsZXMKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI0LjEqCU1ha2luZyBjb3JyZWN0aW9ucworCitUaGUgPEJTPiBrZXkgd2FzIGFscmVhZHkgbWVudGlvbmVkLiAgSXQgZGVsZXRlcyB0aGUgY2hhcmFjdGVyIGp1c3QgYmVmb3JlIHRoZQorY3Vyc29yLiAgVGhlIDxEZWw+IGtleSBkb2VzIHRoZSBzYW1lIGZvciB0aGUgY2hhcmFjdGVyIHVuZGVyIChhZnRlcikgdGhlCitjdXJzb3IuCisgICBXaGVuIHlvdSB0eXBlZCBhIHdob2xlIHdvcmQgd3JvbmcsIHVzZSBDVFJMLVc6CisKKwlUaGUgaG9yc2UgaGFkIGZhbGxlbiB0byB0aGUgc2t5IH4KKwkJCQkgICAgICAgQ1RSTC1XCisJVGhlIGhvcnNlIGhhZCBmYWxsZW4gdG8gdGhlIH4KKworSWYgeW91IHJlYWxseSBtZXNzZWQgdXAgYSBsaW5lIGFuZCB3YW50IHRvIHN0YXJ0IG92ZXIsIHVzZSBDVFJMLVUgdG8gZGVsZXRlCitpdC4gIFRoaXMga2VlcHMgdGhlIHRleHQgYWZ0ZXIgdGhlIGN1cnNvciBhbmQgdGhlIGluZGVudC4gIE9ubHkgdGhlIHRleHQgZnJvbQordGhlIGZpcnN0IG5vbi1ibGFuayB0byB0aGUgY3Vyc29yIGlzIGRlbGV0ZWQuICBXaXRoIHRoZSBjdXJzb3Igb24gdGhlICJmIiBvZgorImZhbGxlbiIgaW4gdGhlIG5leHQgbGluZSBwcmVzc2luZyBDVFJMLVUgZG9lcyB0aGlzOgorCisJVGhlIGhvcnNlIGhhZCBmYWxsZW4gdG8gdGhlIH4KKwkJICAgICAgQ1RSTC1VCisJZmFsbGVuIHRvIHRoZSB+CisKK1doZW4geW91IHNwb3QgYSBtaXN0YWtlIGEgZmV3IHdvcmRzIGJhY2ssIHlvdSBuZWVkIHRvIG1vdmUgdGhlIGN1cnNvciB0aGVyZSB0bworY29ycmVjdCBpdC4gIEZvciBleGFtcGxlLCB5b3UgdHlwZWQgdGhpczoKKworCVRoZSBob3JzZSBoYWQgZm9sbGVuIHRvIHRoZSBncm91bmQgfgorCitZb3UgbmVlZCB0byBjaGFuZ2UgImZvbGxlbiIgdG8gImZhbGxlbiIuICBXaXRoIHRoZSBjdXJzb3IgYXQgdGhlIGVuZCwgeW91Cit3b3VsZCB0eXBlIHRoaXMgdG8gY29ycmVjdCBpdDogPgorCisJCQkJCTxFc2M+NGJscmFBCisKKzwJZ2V0IG91dCBvZiBJbnNlcnQgbW9kZQkJPEVzYz4KKwlmb3VyIHdvcmRzIGJhY2sJCQkgICAgIDRiCisJbW92ZSBvbiB0b3Agb2YgdGhlICJvIgkJICAgICAgIGwKKwlyZXBsYWNlIHdpdGggImEiCQkJcmEKKwlyZXN0YXJ0IEluc2VydCBtb2RlCQkJICBBCisKK0Fub3RoZXIgd2F5IHRvIGRvIHRoaXM6ID4KKworCQk8Qy1MZWZ0PjxDLUxlZnQ+PEMtTGVmdD48Qy1MZWZ0PjxSaWdodD48RGVsPmE8RW5kPgorCis8CWZvdXIgd29yZHMgYmFjawkJICAgICA8Qy1MZWZ0PjxDLUxlZnQ+PEMtTGVmdD48Qy1MZWZ0PgorCW1vdmUgb24gdG9wIG9mIHRoZSAibyIJCQk8UmlnaHQ+CisJZGVsZXRlIHRoZSAibyIJCQkJICAgICAgIDxEZWw+CisJaW5zZXJ0IGFuICJhIgkJCQkJICAgIGEKKwlnbyB0byBlbmQgb2YgdGhlIGxpbmUJCQkJICAgICA8RW5kPgorCitUaGlzIHVzZXMgc3BlY2lhbCBrZXlzIHRvIG1vdmUgYXJvdW5kLCB3aGlsZSByZW1haW5pbmcgaW4gSW5zZXJ0IG1vZGUuICBUaGlzCityZXNlbWJsZXMgd2hhdCB5b3Ugd291bGQgZG8gaW4gYSBtb2RlbGVzcyBlZGl0b3IuICBJdCdzIGVhc2llciB0byByZW1lbWJlciwKK2J1dCB0YWtlcyBtb3JlIHRpbWUgKHlvdSBoYXZlIHRvIG1vdmUgeW91ciBoYW5kIGZyb20gdGhlIGxldHRlcnMgdG8gdGhlIGN1cnNvcgora2V5cywgYW5kIHRoZSA8RW5kPiBrZXkgaXMgaGFyZCB0byBwcmVzcyB3aXRob3V0IGxvb2tpbmcgYXQgdGhlIGtleWJvYXJkKS4KKyAgIFRoZXNlIHNwZWNpYWwga2V5cyBhcmUgbW9zdCB1c2VmdWwgd2hlbiB3cml0aW5nIGEgbWFwcGluZyB0aGF0IGRvZXNuJ3QKK2xlYXZlIEluc2VydCBtb2RlLiAgVGhlIGV4dHJhIHR5cGluZyBkb2Vzbid0IG1hdHRlciB0aGVuLgorICAgQW4gb3ZlcnZpZXcgb2YgdGhlIGtleXMgeW91IGNhbiB1c2UgaW4gSW5zZXJ0IG1vZGU6CisKKwk8Qy1Ib21lPgl0byBzdGFydCBvZiB0aGUgZmlsZQorCTxQYWdlVXA+CWEgd2hvbGUgc2NyZWVuZnVsIHVwCisJPEhvbWU+CQl0byBzdGFydCBvZiBsaW5lCisJPFMtTGVmdD4Jb25lIHdvcmQgbGVmdAorCTxDLUxlZnQ+CW9uZSB3b3JkIGxlZnQKKwk8Uy1SaWdodD4Jb25lIHdvcmQgcmlnaHQKKwk8Qy1SaWdodD4Jb25lIHdvcmQgcmlnaHQKKwk8RW5kPgkJdG8gZW5kIG9mIHRoZSBsaW5lCisJPFBhZ2VEb3duPglhIHdob2xlIHNjcmVlbmZ1bCBkb3duCisJPEMtRW5kPgkJdG8gZW5kIG9mIHRoZSBmaWxlCisKK1RoZXJlIGFyZSBhIGZldyBtb3JlLCBzZWUgfGlucy1zcGVjaWFsLXNwZWNpYWx8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNC4yKglTaG93aW5nIG1hdGNoZXMKKworV2hlbiB5b3UgdHlwZSBhICkgaXQgd291bGQgYmUgbmljZSB0byBzZWUgd2l0aCB3aGljaCAoIGl0IG1hdGNoZXMuICBUbyBtYWtlCitWaW0gZG8gdGhhdCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6c2V0IHNob3dtYXRjaAorCitXaGVuIHlvdSBub3cgdHlwZSBhIHRleHQgbGlrZSAiKGV4YW1wbGUpIiwgYXMgc29vbiBhcyB5b3UgdHlwZSB0aGUgKSBWaW0gd2lsbAorYnJpZWZseSBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG1hdGNoaW5nICgsIGtlZXAgaXQgdGhlcmUgZm9yIGhhbGYgYSBzZWNvbmQsCithbmQgbW92ZSBiYWNrIHRvIHdoZXJlIHlvdSB3ZXJlIHR5cGluZy4KKyAgIEluIGNhc2UgdGhlcmUgaXMgbm90IG1hdGNoaW5nICgsIFZpbSB3aWxsIGJlZXAuICBUaGVuIHlvdSBrbm93IHRoYXQgeW91CittaWdodCBoYXZlIGZvcmdvdHRlbiB0aGUgKCBzb21ld2hlcmUsIG9yIHR5cGVkIGEgKSB0b28gbWFueS4KKyAgIFRoZSBtYXRjaCB3aWxsIGFsc28gYmUgc2hvd24gZm9yIFtdIGFuZCB7fSBwYWlycy4gIFlvdSBkb24ndCBoYXZlIHRvIHdhaXQKK3dpdGggdHlwaW5nIHRoZSBuZXh0IGNoYXJhY3RlciwgYXMgc29vbiBhcyBWaW0gc2VlcyBpdCB0aGUgY3Vyc29yIHdpbGwgbW92ZQorYmFjayBhbmQgaW5zZXJ0aW5nIGNvbnRpbnVlcyBhcyBiZWZvcmUuCisgICBZb3UgY2FuIGNoYW5nZSB0aGUgdGltZSBWaW0gd2FpdHMgd2l0aCB0aGUgJ21hdGNodGltZScgb3B0aW9uLiAgRm9yCitleGFtcGxlLCB0byBtYWtlIFZpbSB3YWl0IG9uZSBhbmQgYSBoYWxmIHNlY29uZDogPgorCisJOnNldCBtYXRjaHRpbWU9MTUKKworVGhlIHRpbWUgaXMgc3BlY2lmaWVkIGluIHRlbnRocyBvZiBhIHNlY29uZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjQuMyoJQ29tcGxldGlvbgorCitWaW0gY2FuIGF1dG9tYXRpY2FsbHkgY29tcGxldGUgd29yZHMgb24gaW5zZXJ0aW9uLiAgWW91IHR5cGUgdGhlIGZpcnN0IHBhcnQgb2YKK2Egd29yZCwgcHJlc3MgQ1RSTC1QLCBhbmQgVmltIGd1ZXNzZXMgdGhlIHJlc3QuCisgICBTdXBwb3NlLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3UgYXJlIGNyZWF0aW5nIGEgQyBwcm9ncmFtIGFuZCB3YW50IHRvIHR5cGUgaW4KK3RoZSBmb2xsb3dpbmc6CisKKwl0b3RhbCA9IGNoX2FycmF5WzBdICsgY2hfYXJyYXlbMV0gKyBjaF9hcnJheVsyXTsgfgorCitZb3Ugc3RhcnQgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKKworCXRvdGFsID0gY2hfYXJyYXlbMF0gKyBjaF8gfgorCitBdCB0aGlzIHBvaW50LCB5b3UgdGVsbCBWaW0gdG8gY29tcGxldGUgdGhlIHdvcmQgdXNpbmcgdGhlIGNvbW1hbmQgQ1RSTC1QLgorVmltIHNlYXJjaGVzIGZvciBhIHdvcmQgdGhhdCBzdGFydHMgd2l0aCB3aGF0J3MgaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4gIEluCit0aGlzIGNhc2UsIGl0IGlzICJjaF8iLCB3aGljaCBtYXRjaGVzIHdpdGggdGhlIHdvcmQgY2hfYXJyYXkuICBTbyB0eXBpbmcKK0NUUkwtUCBnaXZlcyB5b3UgdGhlIGZvbGxvd2luZzoKKworCXRvdGFsID0gY2hfYXJyYXlbMF0gKyBjaF9hcnJheSB+CisKK0FmdGVyIGEgbGl0dGxlIG1vcmUgdHlwaW5nLCB5b3UgZ2V0IHRoaXMgKGVuZGluZyBpbiBhIHNwYWNlKToKKworCXRvdGFsID0gY2hfYXJyYXlbMF0gKyBjaF9hcnJheVsxXSArICB+CisKK0lmIHlvdSBub3cgdHlwZSBDVFJMLVAgVmltIHdpbGwgc2VhcmNoIGFnYWluIGZvciBhIHdvcmQgdGhhdCBjb21wbGV0ZXMgdGhlCit3b3JkIGJlZm9yZSB0aGUgY3Vyc29yLiAgU2luY2UgdGhlcmUgaXMgbm90aGluZyBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLCBpdAorZmluZHMgdGhlIGZpcnN0IHdvcmQgYmFja3dhcmRzLCB3aGljaCBpcyAiY2hfYXJyYXkiLiAgVHlwaW5nIENUUkwtUCBhZ2FpbgorZ2l2ZXMgeW91IHRoZSBuZXh0IHdvcmQgdGhhdCBtYXRjaGVzLCBpbiB0aGlzIGNhc2UgInRvdGFsIi4gIEEgdGhpcmQgQ1RSTC1QCitzZWFyY2hlcyBmdXJ0aGVyIGJhY2suICBJZiB0aGVyZSBpcyBub3RoaW5nIGVsc2UsIGl0IGNhdXNlcyB0aGUgZWRpdG9yIHRvIHJ1bgorb3V0IG9mIHdvcmRzLCBzbyBpdCByZXR1cm5zIHRvIHRoZSBvcmlnaW5hbCB0ZXh0LCB3aGljaCBpcyBub3RoaW5nLiAgQSBmb3VydGgKK0NUUkwtUCBjYXVzZXMgdGhlIGVkaXRvciB0byBzdGFydCBvdmVyIGFnYWluIHdpdGggImNoX2FycmF5Ii4KKworVG8gc2VhcmNoIGZvcndhcmQsIHVzZSBDVFJMLU4uICBTaW5jZSB0aGUgc2VhcmNoIHdyYXBzIGFyb3VuZCB0aGUgZW5kIG9mIHRoZQorZmlsZSwgQ1RSTC1OIGFuZCBDVFJMLVAgd2lsbCBmaW5kIHRoZSBzYW1lIG1hdGNoZXMsIGJ1dCBpbiBhIGRpZmZlcmVudAorc2VxdWVuY2UuICBIaW50OiBDVFJMLU4gaXMgTmV4dC1tYXRjaCBhbmQgQ1RSTC1QIGlzIFByZXZpb3VzLW1hdGNoLgorCitUaGUgVmltIGVkaXRvciBnb2VzIHRocm91Z2ggYSBsb3Qgb2YgZWZmb3J0IHRvIGZpbmQgd29yZHMgdG8gY29tcGxldGUuICBCeQorZGVmYXVsdCwgaXQgc2VhcmNoZXMgdGhlIGZvbGxvd2luZyBwbGFjZXM6CisKKwkxLiBDdXJyZW50IGZpbGUKKwkyLiBGaWxlcyBpbiBvdGhlciB3aW5kb3dzCisJMy4gT3RoZXIgbG9hZGVkIGZpbGVzIChoaWRkZW4gYnVmZmVycykKKwk0LiBGaWxlcyB3aGljaCBhcmUgbm90IGxvYWRlZCAoaW5hY3RpdmUgYnVmZmVycykKKwk1LiBUYWcgZmlsZXMKKwk2LiBBbGwgZmlsZXMgI2luY2x1ZGVkIGJ5IHRoZSBjdXJyZW50IGZpbGUKKworCitPUFRJT05TCisKK1lvdSBjYW4gY3VzdG9taXplIHRoZSBzZWFyY2ggb3JkZXIgd2l0aCB0aGUgJ2NvbXBsZXRlJyBvcHRpb24uCisKK1RoZSAnaWdub3JlY2FzZScgb3B0aW9uIGlzIHVzZWQuICBXaGVuIGl0IGlzIHNldCwgY2FzZSBkaWZmZXJlbmNlcyBhcmUgaWdub3JlZAord2hlbiBzZWFyY2hpbmcgZm9yIG1hdGNoZXMuCisKK0Egc3BlY2lhbCBvcHRpb24gZm9yIGNvbXBsZXRpb24gaXMgJ2luZmVyY2FzZScuICBUaGlzIGlzIHVzZWZ1bCB0byBmaW5kCittYXRjaGVzIHdoaWxlIGlnbm9yaW5nIGNhc2UgKCdpZ25vcmVjYXNlJyBtdXN0IGJlIHNldCkgYnV0IHN0aWxsIHVzaW5nIHRoZQorY2FzZSBvZiB0aGUgd29yZCB0eXBlZCBzbyBmYXIuICBUaHVzIGlmIHlvdSB0eXBlICJGb3IiIGFuZCBWaW0gZmluZHMgYSBtYXRjaAorImZvcnR1bmF0ZWx5IiwgaXQgd2lsbCByZXN1bHQgaW4gIkZvcnR1bmF0ZWx5Ii4KKworCitDT01QTEVUSU5HIFNQRUNJRklDIElURU1TCisKK0lmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBsb29raW5nIGZvciwgeW91IGNhbiB1c2UgdGhlc2UgY29tbWFuZHMgdG8gY29tcGxldGUKK3dpdGggYSBjZXJ0YWluIHR5cGUgb2YgaXRlbToKKworCUNUUkwtWCBDVFJMLUYJCWZpbGUgbmFtZXMKKwlDVFJMLVggQ1RSTC1MCQl3aG9sZSBsaW5lcworCUNUUkwtWCBDVFJMLUQJCW1hY3JvIGRlZmluaXRpb25zIChhbHNvIGluIGluY2x1ZGVkIGZpbGVzKQorCUNUUkwtWCBDVFJMLUkJCWN1cnJlbnQgYW5kIGluY2x1ZGVkIGZpbGVzCisJQ1RSTC1YIENUUkwtSwkJd29yZHMgZnJvbSBhIGRpY3Rpb25hcnkKKwlDVFJMLVggQ1RSTC1UCQl3b3JkcyBmcm9tIGEgdGhlc2F1cnVzCisJQ1RSTC1YIENUUkwtXQkJdGFncworCUNUUkwtWCBDVFJMLVYJCVZpbSBjb21tYW5kIGxpbmUKKworQWZ0ZXIgZWFjaCBvZiB0aGVtIENUUkwtTiBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBuZXh0IG1hdGNoLCBDVFJMLVAgdG8gZmluZAordGhlIHByZXZpb3VzIG1hdGNoLgorICAgTW9yZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBvZiB0aGVzZSBjb21tYW5kcyBoZXJlOiB8aW5zLWNvbXBsZXRpb258LgorCisKK0NPTVBMRVRJTkcgRklMRSBOQU1FUworCitMZXQncyB0YWtlIENUUkwtWCBDVFJMLUYgYXMgYW4gZXhhbXBsZS4gIFRoaXMgd2lsbCBmaW5kIGZpbGUgbmFtZXMuICBJdCBzY2FucwordGhlIGN1cnJlbnQgZGlyZWN0b3J5IGZvciBmaWxlcyBhbmQgZGlzcGxheXMgZWFjaCBvbmUgdGhhdCBtYXRjaGVzIHRoZSB3b3JkIGluCitmcm9udCBvZiB0aGUgY3Vyc29yLgorICAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBmaWxlcyBpbiB0aGUgY3VycmVudAorZGlyZWN0b3J5OgorCisJbWFpbi5jICBzdWJfY291bnQuYyAgc3ViX2RvbmUuYyAgc3ViX2V4aXQuYworCitOb3cgZW50ZXIgSW5zZXJ0IG1vZGUgYW5kIHN0YXJ0IHR5cGluZzoKKworCVRoZSBleGl0IGNvZGUgaXMgaW4gdGhlIGZpbGUgc3ViIH4KKworQXQgdGhpcyBwb2ludCwgeW91IGVudGVyIHRoZSBjb21tYW5kIENUUkwtWCBDVFJMLUYuICBWaW0gbm93IGNvbXBsZXRlcyB0aGUKK2N1cnJlbnQgd29yZCAic3ViIiBieSBsb29raW5nIGF0IHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBUaGUKK2ZpcnN0IG1hdGNoIGlzIHN1Yl9jb3VudC5jLiAgVGhpcyBpcyBub3QgdGhlIG9uZSB5b3Ugd2FudCwgc28geW91IG1hdGNoIHRoZQorbmV4dCBmaWxlIGJ5IHR5cGluZyBDVFJMLU4uICBUaGlzIG1hdGNoIGlzIHN1Yl9kb25lLmMuICBUeXBpbmcgQ1RSTC1OIGFnYWluCit0YWtlcyB5b3UgdG8gc3ViX2V4aXQuYy4gIFRoZSByZXN1bHRzOgorCisJVGhlIGV4aXQgY29kZSBpcyBpbiB0aGUgZmlsZSBzdWJfZXhpdC5jIH4KKworSWYgdGhlIGZpbGUgbmFtZSBzdGFydHMgd2l0aCAvIChVbml4KSBvciBDOlwgKE1TLVdpbmRvd3MpIHlvdSBjYW4gZmluZCBhbGwKK2ZpbGVzIGluIHRoZSBmaWxlIHN5c3RlbS4gIEZvciBleGFtcGxlLCB0eXBlICIvdSIgYW5kIENUUkwtWCBDVFJMLUYuICBUaGlzCit3aWxsIG1hdGNoICIvdXNyIiAodGhpcyBpcyBvbiBVbml4KToKKworCXRoZSBmaWxlIGlzIGZvdW5kIGluIC91c3IvIH4KKworSWYgeW91IG5vdyBwcmVzcyBDVFJMLU4geW91IGdvIGJhY2sgdG8gIi91Ii4gIEluc3RlYWQsIHRvIGFjY2VwdCB0aGUgIi91c3IvIgorYW5kIGdvIG9uZSBkaXJlY3RvcnkgbGV2ZWwgZGVlcGVyLCB1c2UgQ1RSTC1YIENUUkwtRiBhZ2FpbjoKKworCXRoZSBmaWxlIGlzIGZvdW5kIGluIC91c3IvWDExUjYvIH4KKworVGhlIHJlc3VsdHMgZGVwZW5kIG9uIHdoYXQgaXMgZm91bmQgaW4geW91ciBmaWxlIHN5c3RlbSwgb2YgY291cnNlLiAgVGhlCittYXRjaGVzIGFyZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI0LjQqCVJlcGVhdGluZyBhbiBpbnNlcnQKKworSWYgeW91IHByZXNzIENUUkwtQSwgdGhlIGVkaXRvciBpbnNlcnRzIHRoZSB0ZXh0IHlvdSB0eXBlZCB0aGUgbGFzdCB0aW1lIHlvdQord2VyZSBpbiBJbnNlcnQgbW9kZS4KKyAgIEFzc3VtZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IGhhdmUgYSBmaWxlIHRoYXQgYmVnaW5zIHdpdGggdGhlIGZvbGxvd2luZzoKKworCSJmaWxlLmgiIH4KKwkvKiBNYWluIHByb2dyYW0gYmVnaW5zICovIH4KKworWW91IGVkaXQgdGhpcyBmaWxlIGJ5IGluc2VydGluZyAiI2luY2x1ZGUgIiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdAorbGluZToKKworCSNpbmNsdWRlICJmaWxlLmgiIH4KKwkvKiBNYWluIHByb2dyYW0gYmVnaW5zICovIH4KKworWW91IGdvIGRvd24gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lIHVzaW5nIHRoZSBjb21tYW5kcyAial4iLiAgWW91Citub3cgc3RhcnQgdG8gaW5zZXJ0IGEgbmV3ICIjaW5jbHVkZSIgbGluZS4gIFNvIHlvdSB0eXBlOiA+CisKKwlpIENUUkwtQQorCitUaGUgcmVzdWx0IGlzIGFzIGZvbGxvd3M6CisKKwkjaW5jbHVkZSAiZmlsZS5oIiB+CisJI2luY2x1ZGUgLyogTWFpbiBwcm9ncmFtIGJlZ2lucyAqLyB+CisKK1RoZSAiI2luY2x1ZGUgIiB3YXMgaW5zZXJ0ZWQgYmVjYXVzZSBDVFJMLUEgaW5zZXJ0cyB0aGUgdGV4dCBvZiB0aGUgcHJldmlvdXMKK2luc2VydC4gIE5vdyB5b3UgdHlwZSAgIm1haW4uaCI8RW50ZXI+ICB0byBmaW5pc2ggdGhlIGxpbmU6CisKKworCSNpbmNsdWRlICJmaWxlLmgiIH4KKwkjaW5jbHVkZSAibWFpbi5oIiB+CisJLyogTWFpbiBwcm9ncmFtIGJlZ2lucyAqLyB+CisKK1RoZSBDVFJMLUAgY29tbWFuZCBkb2VzIGEgQ1RSTC1BIGFuZCB0aGVuIGV4aXRzIEluc2VydCBtb2RlLiAgVGhhdCdzIGEgcXVpY2sKK3dheSBvZiBkb2luZyBleGFjdGx5IHRoZSBzYW1lIGluc2VydGlvbiBhZ2Fpbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjQuNSoJQ29weWluZyBmcm9tIGFub3RoZXIgbGluZQorCitUaGUgQ1RSTC1ZIGNvbW1hbmQgaW5zZXJ0cyB0aGUgY2hhcmFjdGVyIGFib3ZlIHRoZSBjdXJzb3IuICBUaGlzIGlzIHVzZWZ1bAord2hlbiB5b3UgYXJlIGR1cGxpY2F0aW5nIGEgcHJldmlvdXMgbGluZS4gIEZvciBleGFtcGxlLCB5b3UgaGF2ZSB0aGlzIGxpbmUgb2YKK0MgY29kZToKKworCWJfYXJyYXlbaV0tPnNfbmV4dCA9IGFfYXJyYXlbaV0tPnNfbmV4dDsgfgorCitOb3cgeW91IG5lZWQgdG8gdHlwZSB0aGUgc2FtZSBsaW5lLCBidXQgd2l0aCAic19wcmV2IiBpbnN0ZWFkIG9mICJzX25leHQiLgorU3RhcnQgdGhlIG5ldyBsaW5lLCBhbmQgcHJlc3MgQ1RSTC1ZIDE0IHRpbWVzLCB1bnRpbCB5b3UgYXJlIGF0IHRoZSAibiIgb2YKKyJuZXh0IjoKKworCWJfYXJyYXlbaV0tPnNfbmV4dCA9IGFfYXJyYXlbaV0tPnNfbmV4dDsgfgorCWJfYXJyYXlbaV0tPnNfIH4KKworTm93IHlvdSB0eXBlICJwcmV2IjoKKworCWJfYXJyYXlbaV0tPnNfbmV4dCA9IGFfYXJyYXlbaV0tPnNfbmV4dDsgfgorCWJfYXJyYXlbaV0tPnNfcHJldiB+CisKK0NvbnRpbnVlIHByZXNzaW5nIENUUkwtWSB1bnRpbCB0aGUgZm9sbG93aW5nICJuZXh0IjoKKworCWJfYXJyYXlbaV0tPnNfbmV4dCA9IGFfYXJyYXlbaV0tPnNfbmV4dDsgfgorCWJfYXJyYXlbaV0tPnNfcHJldiA9IGFfYXJyYXlbaV0tPnNfIH4KKworTm93IHR5cGUgInByZXY7IiB0byBmaW5pc2ggaXQgb2ZmLgorCitUaGUgQ1RSTC1FIGNvbW1hbmQgYWN0cyBsaWtlIENUUkwtWSBleGNlcHQgaXQgaW5zZXJ0cyB0aGUgY2hhcmFjdGVyIGJlbG93IHRoZQorY3Vyc29yLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNC42KglJbnNlcnRpbmcgYSByZWdpc3RlcgorCitUaGUgY29tbWFuZCBDVFJMLVIge3JlZ2lzdGVyfSBpbnNlcnRzIHRoZSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuICBUaGlzIGlzCit1c2VmdWwgdG8gYXZvaWQgaGF2aW5nIHRvIHR5cGUgYSBsb25nIHdvcmQuICBGb3IgZXhhbXBsZSwgeW91IG5lZWQgdG8gdHlwZQordGhpczoKKworCXIgPSBWZXJ5TG9uZ0Z1bmN0aW9uKGEpICsgVmVyeUxvbmdGdW5jdGlvbihiKSArIFZlcnlMb25nRnVuY3Rpb24oYykgfgorCitUaGUgZnVuY3Rpb24gbmFtZSBpcyBkZWZpbmVkIGluIGEgZGlmZmVyZW50IGZpbGUuICBFZGl0IHRoYXQgZmlsZSBhbmQgbW92ZSB0aGUKK2N1cnNvciBvbiB0b3Agb2YgdGhlIGZ1bmN0aW9uIG5hbWUgdGhlcmUsIGFuZCB5YW5rIGl0IGludG8gcmVnaXN0ZXIgdjogPgorCisJInZ5aXcKKworInYgaXMgdGhlIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24sICJ5aXciIGlzIHlhbmstaW5uZXItd29yZC4gIE5vdyBlZGl0IHRoZSBmaWxlCit3aGVyZSB0aGUgbmV3IGxpbmUgaXMgdG8gYmUgaW5zZXJ0ZWQsIGFuZCB0eXBlIHRoZSBmaXJzdCBsZXR0ZXJzOgorCisJciA9IH4KKworTm93IHVzZSBDVFJMLVIgdiB0byBpbnNlcnQgdGhlIGZ1bmN0aW9uIG5hbWU6CisKKwlyID0gVmVyeUxvbmdGdW5jdGlvbiB+CisKK1lvdSBjb250aW51ZSB0byB0eXBlIHRoZSBjaGFyYWN0ZXJzIGluIGJldHdlZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIGFuZCB1c2UKK0NUUkwtUiB2IHR3byB0aW1lcyBtb3JlLgorICAgWW91IGNvdWxkIGhhdmUgZG9uZSB0aGUgc2FtZSB3aXRoIGNvbXBsZXRpb24uICBVc2luZyBhIHJlZ2lzdGVyIGlzIHVzZWZ1bAord2hlbiB0aGVyZSBhcmUgbWFueSB3b3JkcyB0aGF0IHN0YXJ0IHdpdGggdGhlIHNhbWUgY2hhcmFjdGVycy4KKworSWYgdGhlIHJlZ2lzdGVyIGNvbnRhaW5zIGNoYXJhY3RlcnMgc3VjaCBhcyA8QlM+IG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycywKK3RoZXkgYXJlIGludGVycHJldGVkIGFzIGlmIHRoZXkgaGFkIGJlZW4gdHlwZWQgZnJvbSB0aGUga2V5Ym9hcmQuICBJZiB5b3UgZG8KK25vdCB3YW50IHRoaXMgdG8gaGFwcGVuICh5b3UgcmVhbGx5IHdhbnQgdGhlIDxCUz4gdG8gYmUgaW5zZXJ0ZWQgaW4gdGhlIHRleHQpLAordXNlIHRoZSBjb21tYW5kIENUUkwtUiBDVFJMLVIge3JlZ2lzdGVyfS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjQuNyoJQWJicmV2aWF0aW9ucworCitBbiBhYmJyZXZpYXRpb24gaXMgYSBzaG9ydCB3b3JkIHRoYXQgdGFrZXMgdGhlIHBsYWNlIG9mIGEgbG9uZyBvbmUuICBGb3IKK2V4YW1wbGUsICJhZCIgc3RhbmRzIGZvciAiYWR2ZXJ0aXNlbWVudCIuICBWaW0gZW5hYmxlcyB5b3UgdG8gdHlwZSBhbgorYWJicmV2aWF0aW9uIGFuZCB0aGVuIHdpbGwgYXV0b21hdGljYWxseSBleHBhbmQgaXQgZm9yIHlvdS4KKyAgIFRvIHRlbGwgVmltIHRvIGV4cGFuZCAiYWQiIGludG8gImFkdmVydGlzZW1lbnQiIGV2ZXJ5IHRpbWUgeW91IGluc2VydCBpdCwKK3VzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTppYWJicmV2IGFkIGFkdmVydGlzZW1lbnQKKworTm93LCB3aGVuIHlvdSB0eXBlICJhZCIsIHRoZSB3aG9sZSB3b3JkICJhZHZlcnRpc2VtZW50IiB3aWxsIGJlIGluc2VydGVkIGludG8KK3RoZSB0ZXh0LiAgVGhpcyBpcyB0cmlnZ2VyZWQgYnkgdHlwaW5nIGEgY2hhcmFjdGVyIHRoYXQgY2FuJ3QgYmUgcGFydCBvZiBhCit3b3JkLCBmb3IgZXhhbXBsZSBhIHNwYWNlOgorCisJV2hhdCBJcyBFbnRlcmVkCQlXaGF0IFlvdSBTZWUKKwlJIHNhdyB0aGUgYQkJSSBzYXcgdGhlIGEgfgorCUkgc2F3IHRoZSBhZAkJSSBzYXcgdGhlIGFkIH4KKwlJIHNhdyB0aGUgYWQ8U3BhY2U+CUkgc2F3IHRoZSBhZHZlcnRpc2VtZW50PFNwYWNlPiB+CisKK1RoZSBleHBhbnNpb24gZG9lc24ndCBoYXBwZW4gd2hlbiB0eXBpbmcganVzdCAiYWQiLiAgVGhhdCBhbGxvd3MgeW91IHRvIHR5cGUgYQord29yZCBsaWtlICJhZGQiLCB3aGljaCB3aWxsIG5vdCBnZXQgZXhwYW5kZWQuICBPbmx5IHdob2xlIHdvcmRzIGFyZSBjaGVja2VkCitmb3IgYWJicmV2aWF0aW9ucy4KKworCitBQkJSRVZJQVRJTkcgU0VWRVJBTCBXT1JEUworCitJdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgYW4gYWJicmV2aWF0aW9uIHRoYXQgcmVzdWx0cyBpbiBtdWx0aXBsZSB3b3Jkcy4gIEZvcgorZXhhbXBsZSwgdG8gZGVmaW5lICJKQiIgYXMgIkphY2sgQmVubnkiLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6aWFiYnJldiBKQiBKYWNrIEJlbm55CisKK0FzIGEgcHJvZ3JhbW1lciwgSSB1c2UgdHdvIHJhdGhlciB1bnVzdWFsIGFiYnJldmlhdGlvbnM6ID4KKworCTppYWJicmV2ICNiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJOmlhYmJyZXYgI2UgPFNwYWNlPioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK1RoZXNlIGFyZSB1c2VkIGZvciBjcmVhdGluZyBib3hlZCBjb21tZW50cy4gIFRoZSBjb21tZW50IHN0YXJ0cyB3aXRoICNiLCB3aGljaAorZHJhd3MgdGhlIHRvcCBsaW5lLiAgSSB0aGVuIHR5cGUgdGhlIGNvbW1lbnQgdGV4dCBhbmQgdXNlICNlIHRvIGRyYXcgdGhlCitib3R0b20gbGluZS4KKyAgIE5vdGljZSB0aGF0IHRoZSAjZSBhYmJyZXZpYXRpb24gYmVnaW5zIHdpdGggYSBzcGFjZS4gIEluIG90aGVyIHdvcmRzLCB0aGUKK2ZpcnN0IHR3byBjaGFyYWN0ZXJzIGFyZSBzcGFjZS1zdGFyLiAgVXN1YWxseSBWaW0gaWdub3JlcyBzcGFjZXMgYmV0d2VlbiB0aGUKK2FiYnJldmlhdGlvbiBhbmQgdGhlIGV4cGFuc2lvbi4gIFRvIGF2b2lkIHRoYXQgcHJvYmxlbSwgSSBzcGVsbCBzcGFjZSBhcyBzZXZlbgorY2hhcmFjdGVyczogPCwgUywgcCwgYSwgYywgZSwgPi4KKworCU5vdGU6CisJIjppYWJicmV2IiBpcyBhIGxvbmcgd29yZCB0byB0eXBlLiAgIjppYWIiIHdvcmtzIGp1c3QgYXMgd2VsbC4KKwlUaGF0J3MgYWJicmV2aWF0aW5nIHRoZSBhYmJyZXZpYXRlIGNvbW1hbmQhCisKKworRklYSU5HIFRZUElORyBNSVNUQUtFUworCitJdCdzIHZlcnkgY29tbW9uIHRvIG1ha2UgdGhlIHNhbWUgdHlwaW5nIG1pc3Rha2UgZXZlcnkgdGltZS4gIEZvciBleGFtcGxlLAordHlwaW5nICJ0ZWgiIGluc3RlYWQgb2YgInRoZSIuICBZb3UgY2FuIGZpeCB0aGlzIHdpdGggYW4gYWJicmV2aWF0aW9uOiA+CisKKwk6YWJicmV2aWF0ZSB0ZWggdGhlCisKK1lvdSBjYW4gYWRkIGEgd2hvbGUgbGlzdCBvZiB0aGVzZS4gIEFkZCBvbmUgZWFjaCB0aW1lIHlvdSBkaXNjb3ZlciBhIGNvbW1vbgorbWlzdGFrZS4KKworCitMSVNUSU5HIEFCQlJFVklBVElPTlMKKworVGhlICI6YWJicmV2aWF0ZSIgY29tbWFuZCBsaXN0cyB0aGUgYWJicmV2aWF0aW9uczoKKworCTphYmJyZXZpYXRlCisJaSAgI2UJCSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpICAjYgkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJaSAgSkIJCSBKYWNrIEJlbm55CisJaSAgYWQJCSBhZHZlcnRpc2VtZW50CisJISAgdGVoCQkgdGhlCisKK1RoZSAiaSIgaW4gdGhlIGZpcnN0IGNvbHVtbiBpbmRpY2F0ZXMgSW5zZXJ0IG1vZGUuICBUaGVzZSBhYmJyZXZpYXRpb25zIGFyZQorb25seSBhY3RpdmUgaW4gSW5zZXJ0IG1vZGUuICBPdGhlciBwb3NzaWJsZSBjaGFyYWN0ZXJzIGFyZToKKworCWMJQ29tbWFuZC1saW5lIG1vZGUJCQk6Y2FiYnJldgorCSEJYm90aCBJbnNlcnQgYW5kIENvbW1hbmQtbGluZSBtb2RlCTphYmJyZXZpYXRlCisKK1NpbmNlIGFiYnJldmlhdGlvbnMgYXJlIG5vdCBvZnRlbiB1c2VmdWwgaW4gQ29tbWFuZC1saW5lIG1vZGUsIHlvdSB3aWxsIG1vc3RseQordXNlIHRoZSAiOmlhYmJyZXYiIGNvbW1hbmQuICBUaGF0IGF2b2lkcywgZm9yIGV4YW1wbGUsIHRoYXQgImFkIiBnZXRzIGV4cGFuZGVkCit3aGVuIHR5cGluZyBhIGNvbW1hbmQgbGlrZTogPgorCisJOmVkaXQgYWQKKworCitERUxFVElORyBBQkJSRVZJQVRJT05TCisKK1RvIGdldCByaWQgb2YgYW4gYWJicmV2aWF0aW9uLCB1c2UgdGhlICI6dW5hYmJyZXZpYXRlIiBjb21tYW5kLiAgU3VwcG9zZSB5b3UKK2hhdmUgdGhlIGZvbGxvd2luZyBhYmJyZXZpYXRpb246ID4KKworCTphYmJyZXZpYXRlIEBmIGZyZXNoCisKK1lvdSBjYW4gcmVtb3ZlIGl0IHdpdGggdGhpcyBjb21tYW5kOiA+CisKKwk6dW5hYmJyZXZpYXRlIEBmCisKK1doaWxlIHlvdSB0eXBlIHRoaXMsIHlvdSB3aWxsIG5vdGljZSB0aGF0IEBmIGlzIGV4cGFuZGVkIHRvICJmcmVzaCIuICBEb24ndAord29ycnkgYWJvdXQgdGhpcywgVmltIHVuZGVyc3RhbmRzIGl0IGFueXdheSAoZXhjZXB0IHdoZW4geW91IGhhdmUgYW4KK2FiYnJldmlhdGlvbiBmb3IgImZyZXNoIiwgYnV0IHRoYXQncyB2ZXJ5IHVubGlrZWx5KS4KKyAgIFRvIHJlbW92ZSBhbGwgdGhlIGFiYnJldmlhdGlvbnM6ID4KKworCTphYmNsZWFyCisKKyI6dW5hYmJyZXZpYXRlIiBhbmQgIjphYmNsZWFyIiBhbHNvIGNvbWUgaW4gdGhlIHZhcmlhbnRzIGZvciBJbnNlcnQgbW9kZQorKCI6aXVuYWJicmV2aWF0ZSBhbmQgIjppYWJjbGVhciIpIGFuZCBDb21tYW5kLWxpbmUgbW9kZSAoIjpjdW5hYmJyZXZpYXRlIiBhbmQKKyI6Y2FiY2xlYXIiKS4KKworCitSRU1BUFBJTkcgQUJCUkVWSUFUSU9OUworCitUaGVyZSBpcyBvbmUgdGhpbmcgdG8gd2F0Y2ggb3V0IGZvciB3aGVuIGRlZmluaW5nIGFuIGFiYnJldmlhdGlvbjogVGhlCityZXN1bHRpbmcgc3RyaW5nIHNob3VsZCBub3QgYmUgbWFwcGVkLiAgRm9yIGV4YW1wbGU6ID4KKworCTphYmJyZXZpYXRlIEBhIGFkZGVyCisJOmltYXAgZGQgZGlzay1kb29yCisKK1doZW4geW91IG5vdyB0eXBlIEBhLCB5b3Ugd2lsbCBnZXQgImFkaXNrLWRvb3JlciIuICBUaGF0J3Mgbm90IHdoYXQgeW91IHdhbnQuCitUbyBhdm9pZCB0aGlzLCB1c2UgdGhlICI6bm9yZWFiYnJldiIgY29tbWFuZC4gIEl0IGRvZXMgdGhlIHNhbWUgYXMKKyI6YWJicmV2aWF0ZSIsIGJ1dCBhdm9pZHMgdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyBpcyB1c2VkIGZvciBtYXBwaW5nczogPgorCisJOm5vcmVhYmJyZXYgQGEgYWRkZXIKKworRm9ydHVuYXRlbHksIGl0J3MgdW5saWtlbHkgdGhhdCB0aGUgcmVzdWx0IG9mIGFuIGFiYnJldmlhdGlvbiBpcyBtYXBwZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI0LjgqCUVudGVyaW5nIHNwZWNpYWwgY2hhcmFjdGVycworCitUaGUgQ1RSTC1WIGNvbW1hbmQgaXMgdXNlZCB0byBpbnNlcnQgdGhlIG5leHQgY2hhcmFjdGVyIGxpdGVyYWxseS4gIEluIG90aGVyCit3b3JkcywgYW55IHNwZWNpYWwgbWVhbmluZyB0aGUgY2hhcmFjdGVyIGhhcywgaXQgd2lsbCBiZSBpZ25vcmVkLiAgRm9yCitleGFtcGxlOiA+CisKKwlDVFJMLVYgPEVzYz4KKworSW5zZXJ0cyBhbiBlc2NhcGUgY2hhcmFjdGVyLiAgVGh1cyB5b3UgZG9uJ3QgbGVhdmUgSW5zZXJ0IG1vZGUuICAoRG9uJ3QgdHlwZQordGhlIHNwYWNlIGFmdGVyIENUUkwtViwgaXQncyBvbmx5IHRvIG1ha2UgdGhpcyBlYXNpZXIgdG8gcmVhZCkuCisKKwlOb3RlOgorCU9uIE1TLVdpbmRvd3MgQ1RSTC1WIGlzIHVzZWQgdG8gcGFzdGUgdGV4dC4gIFVzZSBDVFJMLVEgaW5zdGVhZCBvZgorCUNUUkwtVi4gIE9uIFVuaXgsIG9uIHRoZSBvdGhlciBoYW5kLCBDVFJMLVEgZG9lcyBub3Qgd29yayBvbiBzb21lCisJdGVybWluYWxzLCBiZWNhdXNlIGl0IGhhcyBhIHNwZWNpYWwgbWVhbmluZy4KKworWW91IGNhbiBhbHNvIHVzZSB0aGUgY29tbWFuZCBDVFJMLVYge2RpZ2l0c30gdG8gaW5zZXJ0IGEgY2hhcmFjdGVyIHdpdGggdGhlCitkZWNpbWFsIG51bWJlciB7ZGlnaXRzfS4gIEZvciBleGFtcGxlLCB0aGUgY2hhcmFjdGVyIG51bWJlciAxMjcgaXMgdGhlIDxEZWw+CitjaGFyYWN0ZXIgKGJ1dCBub3QgbmVjZXNzYXJpbHkgdGhlIDxEZWw+IGtleSEpLiAgVG8gaW5zZXJ0IDxEZWw+IHR5cGU6ID4KKworCUNUUkwtViAxMjcKKworWW91IGNhbiBlbnRlciBjaGFyYWN0ZXJzIHVwIHRvIDI1NSB0aGlzIHdheS4gIFdoZW4geW91IHR5cGUgZmV3ZXIgdGhhbiB0d28KK2RpZ2l0cywgYSBub24tZGlnaXQgd2lsbCB0ZXJtaW5hdGUgdGhlIGNvbW1hbmQuICBUbyBhdm9pZCB0aGUgbmVlZCBvZiB0eXBpbmcgYQorbm9uLWRpZ2l0LCBwcmVwZW5kIG9uZSBvciB0d28gemVyb3MgdG8gbWFrZSB0aHJlZSBkaWdpdHMuCisgICBBbGwgdGhlIG5leHQgY29tbWFuZHMgaW5zZXJ0IGEgPFRhYj4gYW5kIHRoZW4gYSBkb3Q6CisKKwlDVFJMLVYgOS4KKwlDVFJMLVYgMDkuCisJQ1RSTC1WIDAwOS4KKworVG8gZW50ZXIgYSBjaGFyYWN0ZXIgaW4gaGV4YWRlY2ltYWwsIHVzZSBhbiAieCIgYWZ0ZXIgdGhlIENUUkwtVjogPgorCisJQ1RSTC1WIHg3ZgorCitUaGlzIGFsc28gZ29lcyB1cCB0byBjaGFyYWN0ZXIgMjU1IChDVFJMLVYgeGZmKS4gIFlvdSBjYW4gdXNlICJvIiB0byB0eXBlIGEKK2NoYXJhY3RlciBhcyBhbiBvY3RhbCBudW1iZXIgYW5kIHR3byBtb3JlIG1ldGhvZHMgYWxsb3cgeW91IHRvIHR5cGUgdXAgdG8KK2EgMTYgYml0IGFuZCBhIDMyIGJpdCBudW1iZXIgKGUuZy4sIGZvciBhIFVuaWNvZGUgY2hhcmFjdGVyKTogPgorCisJQ1RSTC1WIG8xMjMKKwlDVFJMLVYgdTEyMzQKKwlDVFJMLVYgVTEyMzQ1Njc4CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI0LjkqCURpZ3JhcGhzCisKK1NvbWUgY2hhcmFjdGVycyBhcmUgbm90IG9uIHRoZSBrZXlib2FyZC4gIEZvciBleGFtcGxlLCB0aGUgY29weXJpZ2h0IGNoYXJhY3RlcgorKKkpLiAgVG8gdHlwZSB0aGVzZSBjaGFyYWN0ZXJzIGluIFZpbSwgeW91IHVzZSBkaWdyYXBocywgd2hlcmUgdHdvIGNoYXJhY3RlcnMKK3JlcHJlc2VudCBvbmUuICBUbyBlbnRlciBhIKksIGZvciBleGFtcGxlLCB5b3UgcHJlc3MgdGhyZWUga2V5czogPgorCisJQ1RSTC1LIENvCisKK1RvIGZpbmQgb3V0IHdoYXQgZGlncmFwaHMgYXJlIGF2YWlsYWJsZSwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOmRpZ3JhcGhzCisKK1ZpbSB3aWxsIGRpc3BsYXkgdGhlIGRpZ3JhcGggdGFibGUuICBIZXJlIGFyZSB0aHJlZSBsaW5lcyBvZiBpdDoKKworICBBQyB+XyAxNTkgIE5TIHwgIDE2MCAgIUkgoSAgMTYxICBDdCCiICAxNjIgIFBkIKMgIDE2MyAgQ3UgpCAgMTY0ICBZZSClICAxNjUgfgorICBCQiCmICAxNjYgIFNFIKcgIDE2NyAgJzogqCAgMTY4ICBDbyCpICAxNjkgIC1hIKogIDE3MCAgPDwgqyAgMTcxICBOTyCsICAxNzIgfgorICAtLSCtICAxNzMgIFJnIK4gIDE3NCAgJ20gryAgMTc1ICBERyCwICAxNzYgICstILEgIDE3NyAgMlMgsiAgMTc4ICAzUyCzICAxNzkgfgorCitUaGlzIHNob3dzLCBmb3IgZXhhbXBsZSwgdGhhdCB0aGUgZGlncmFwaCB5b3UgZ2V0IGJ5IHR5cGluZyBDVFJMLUsgUGQgaXMgdGhlCitjaGFyYWN0ZXIgKKMpLiAgVGhpcyBpcyBjaGFyYWN0ZXIgbnVtYmVyIDE2MyAoZGVjaW1hbCkuCisgICBQZCBpcyBzaG9ydCBmb3IgUG91bmQuICBNb3N0IGRpZ3JhcGhzIGFyZSBzZWxlY3RlZCB0byBnaXZlIHlvdSBhIGhpbnQgYWJvdXQKK3RoZSBjaGFyYWN0ZXIgdGhleSB3aWxsIHByb2R1Y2UuICBJZiB5b3UgbG9vayB0aHJvdWdoIHRoZSBsaXN0IHlvdSB3aWxsCit1bmRlcnN0YW5kIHRoZSBsb2dpYy4KKyAgIFlvdSBjYW4gZXhjaGFuZ2UgdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2hhcmFjdGVyLCBpZiB0aGVyZSBpcyBubyBkaWdyYXBoIGZvcgordGhhdCBjb21iaW5hdGlvbi4gIFRodXMgQ1RSTC1LIGRQIGFsc28gd29ya3MuICBTaW5jZSB0aGVyZSBpcyBubyBkaWdyYXBoIGZvcgorImRQIiBWaW0gd2lsbCBhbHNvIHNlYXJjaCBmb3IgYSAiUGQiIGRpZ3JhcGguCisKKwlOb3RlOgorCVRoZSBkaWdyYXBocyBkZXBlbmQgb24gdGhlIGNoYXJhY3RlciBzZXQgdGhhdCBWaW0gYXNzdW1lcyB5b3UgYXJlCisJdXNpbmcuICBPbiBNUy1ET1MgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gTVMtV2luZG93cy4gIEFsd2F5cyB1c2UKKwkiOmRpZ3JhcGhzIiB0byBmaW5kIG91dCB3aGljaCBkaWdyYXBocyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZS4KKworWW91IGNhbiBkZWZpbmUgeW91ciBvd24gZGlncmFwaHMuICBFeGFtcGxlOiA+CisKKwk6ZGlncmFwaCBhIiDkCisKK1RoaXMgZGVmaW5lcyB0aGF0IENUUkwtSyBhIiBpbnNlcnRzIGFuIOQgY2hhcmFjdGVyLiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlCitjaGFyYWN0ZXIgd2l0aCBhIGRlY2ltYWwgbnVtYmVyLiAgVGhpcyBkZWZpbmVzIHRoZSBzYW1lIGRpZ3JhcGg6ID4KKworCTpkaWdyYXBoIGEiIDIyOAorCitNb3JlIGluZm9ybWF0aW9uIGFib3V0IGRpZ3JhcGhzIGhlcmU6IHxkaWdyYXBoc3wKKyAgIEFub3RoZXIgd2F5IHRvIGluc2VydCBzcGVjaWFsIGNoYXJhY3RlcnMgaXMgd2l0aCBhIGtleW1hcC4gIE1vcmUgYWJvdXQgdGhhdAoraGVyZTogfDQ1LjV8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI0LjEwKglOb3JtYWwgbW9kZSBjb21tYW5kcworCitJbnNlcnQgbW9kZSBvZmZlcnMgYSBsaW1pdGVkIG51bWJlciBvZiBjb21tYW5kcy4gIEluIE5vcm1hbCBtb2RlIHlvdSBoYXZlIG1hbnkKK21vcmUuICBXaGVuIHlvdSB3YW50IHRvIHVzZSBvbmUsIHlvdSB1c3VhbGx5IGxlYXZlIEluc2VydCBtb2RlIHdpdGggPEVzYz4sCitleGVjdXRlIHRoZSBOb3JtYWwgbW9kZSBjb21tYW5kLCBhbmQgcmUtZW50ZXIgSW5zZXJ0IG1vZGUgd2l0aCAiaSIgb3IgImEiLgorICAgVGhlcmUgaXMgYSBxdWlja2VyIHdheS4gIFdpdGggQ1RSTC1PIHtjb21tYW5kfSB5b3UgY2FuIGV4ZWN1dGUgYW55IE5vcm1hbAorbW9kZSBjb21tYW5kIGZyb20gSW5zZXJ0IG1vZGUuICBGb3IgZXhhbXBsZSwgdG8gZGVsZXRlIGZyb20gdGhlIGN1cnNvciB0byB0aGUKK2VuZCBvZiB0aGUgbGluZTogPgorCisJQ1RSTC1PIEQKKworWW91IGNhbiBleGVjdXRlIG9ubHkgb25lIE5vcm1hbCBtb2RlIGNvbW1hbmQgdGhpcyB3YXkuICBCdXQgeW91IGNhbiBzcGVjaWZ5IGEKK3JlZ2lzdGVyIG9yIGEgY291bnQuICBBIG1vcmUgY29tcGxpY2F0ZWQgZXhhbXBsZTogPgorCisJQ1RSTC1PICJnM2R3CisKK1RoaXMgZGVsZXRlcyB1cCB0byB0aGUgdGhpcmQgd29yZCBpbnRvIHJlZ2lzdGVyIGcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMjUudHh0fCAgRWRpdGluZyBmb3JtYXR0ZWQgdGV4dAorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8yNS50eHQgYi9ydW50aW1lL2RvYy91c3JfMjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZTcyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMjUudHh0CkBAIC0wLDAgKzEsNTc4IEBACisqdXNyXzI1LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDMgSnVuIDIxCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgIEVkaXRpbmcgZm9ybWF0dGVkIHRleHQKKworCitUZXh0IGhhcmRseSBldmVyIGNvbWVzIGluIG9uZSBzZW50ZW5jZSBwZXIgbGluZS4gIFRoaXMgY2hhcHRlciBpcyBhYm91dAorYnJlYWtpbmcgc2VudGVuY2VzIHRvIG1ha2UgdGhlbSBmaXQgb24gYSBwYWdlIGFuZCBvdGhlciBmb3JtYXR0aW5nLgorVmltIGFsc28gaGFzIHVzZWZ1bCBmZWF0dXJlcyBmb3IgZWRpdGluZyBzaW5nbGUtbGluZSBwYXJhZ3JhcGhzIGFuZCB0YWJsZXMuCisKK3wyNS4xfAlCcmVha2luZyBsaW5lcworfDI1LjJ8CUFsaWduaW5nIHRleHQKK3wyNS4zfAlJbmRlbnRzIGFuZCB0YWJzCit8MjUuNHwJRGVhbGluZyB3aXRoIGxvbmcgbGluZXMKK3wyNS41fAlFZGl0aW5nIHRhYmxlcworCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8yNi50eHR8ICBSZXBlYXRpbmcKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzI0LnR4dHwgIEluc2VydGluZyBxdWlja2x5CitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNS4xKglCcmVha2luZyBsaW5lcworCitWaW0gaGFzIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0aGF0IG1ha2UgZGVhbGluZyB3aXRoIHRleHQgZWFzaWVyLiAgQnkgZGVmYXVsdCwKK3RoZSBlZGl0b3IgZG9lcyBub3QgcGVyZm9ybSBhdXRvbWF0aWMgbGluZSBicmVha3MuICBJbiBvdGhlciB3b3JkcywgeW91IGhhdmUKK3RvIHByZXNzIDxFbnRlcj4geW91cnNlbGYuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBhcmUgd3JpdGluZyBwcm9ncmFtcyB3aGVyZQoreW91IHdhbnQgdG8gZGVjaWRlIHdoZXJlIHRoZSBsaW5lIGVuZHMuICBJdCBpcyBub3Qgc28gZ29vZCB3aGVuIHlvdSBhcmUKK2NyZWF0aW5nIGRvY3VtZW50YXRpb24gYW5kIHdhbnQgdGhlIHRleHQgdG8gYmUgYXQgbW9zdCA3MCBjaGFyYWN0ZXIgd2lkZS4KKyAgIElmIHlvdSBzZXQgdGhlICd0ZXh0d2lkdGgnIG9wdGlvbiwgVmltIGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBsaW5lIGJyZWFrcy4KK1N1cHBvc2UsIGZvciBleGFtcGxlLCB0aGF0IHlvdSB3YW50IGEgdmVyeSBuYXJyb3cgY29sdW1uIG9mIG9ubHkgMzAKK2NoYXJhY3RlcnMuICBZb3UgbmVlZCB0byBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOnNldCB0ZXh0d2lkdGg9MzAKKworTm93IHlvdSBzdGFydCB0eXBpbmcgKHJ1bGVyIGFkZGVkKToKKworCQkgMQkgICAyCSAgICAgMworCTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1CisJSSB0YXVnaHQgcHJvZ3JhbW1pbmcgZm9yIGEgd2hpIH4KKworSWYgeW91IHR5cGUgImwiIG5leHQsIHRoaXMgbWFrZXMgdGhlIGxpbmUgbG9uZ2VyIHRoYW4gdGhlIDMwLWNoYXJhY3RlciBsaW1pdC4KK1doZW4gVmltIHNlZXMgdGhpcywgaXQgaW5zZXJ0cyBhIGxpbmUgYnJlYWsgYW5kIHlvdSBnZXQgdGhlIGZvbGxvd2luZzoKKworCQkgMQkgICAyCSAgICAgMworCTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1CisJSSB0YXVnaHQgcHJvZ3JhbW1pbmcgZm9yIGEgfgorCXdoaWwgfgorCitDb250aW51aW5nIG9uLCB5b3UgY2FuIHR5cGUgaW4gdGhlIHJlc3Qgb2YgdGhlIHBhcmFncmFwaDoKKworCQkgMQkgICAyCSAgICAgMworCTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1CisJSSB0YXVnaHQgcHJvZ3JhbW1pbmcgZm9yIGEgfgorCXdoaWxlLiBPbmUgdGltZSwgSSB3YXMgc3RvcHBlZCB+CisJYnkgdGhlIEZvcnQgV29ydGggcG9saWNlLCB+CisJYmVjYXVzZSBteSBob21ld29yayB3YXMgdG9vIH4KKwloYXJkLiBUcnVlIHN0b3J5LiB+CisKK1lvdSBkbyBub3QgaGF2ZSB0byB0eXBlIG5ld2xpbmVzOyBWaW0gcHV0cyB0aGVtIGluIGF1dG9tYXRpY2FsbHkuCisKKwlOb3RlOgorCVRoZSAnd3JhcCcgb3B0aW9uIG1ha2VzIFZpbSBkaXNwbGF5IGxpbmVzIHdpdGggYSBsaW5lIGJyZWFrLCBidXQgdGhpcworCWRvZXNuJ3QgaW5zZXJ0IGEgbGluZSBicmVhayBpbiB0aGUgZmlsZS4KKworCitSRUZPUk1BVFRJTkcKKworVGhlIFZpbSBlZGl0b3IgaXMgbm90IGEgd29yZCBwcm9jZXNzb3IuICBJbiBhIHdvcmQgcHJvY2Vzc29yLCBpZiB5b3UgZGVsZXRlCitzb21ldGhpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFyYWdyYXBoLCB0aGUgbGluZSBicmVha3MgYXJlIHJld29ya2VkLiAgSW4KK1ZpbSB0aGV5IGFyZSBub3Q7IHNvIGlmIHlvdSBkZWxldGUgdGhlIHdvcmQgInByb2dyYW1taW5nIiBmcm9tIHRoZSBmaXJzdCBsaW5lLAorYWxsIHlvdSBnZXQgaXMgYSBzaG9ydCBsaW5lOgorCisJCSAxCSAgIDIJICAgICAzCisJMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUKKwlJIHRhdWdodCBmb3IgYSB+CisJd2hpbGUuIE9uZSB0aW1lLCBJIHdhcyBzdG9wcGVkIH4KKwlieSB0aGUgRm9ydCBXb3J0aCBwb2xpY2UsIH4KKwliZWNhdXNlIG15IGhvbWV3b3JrIHdhcyB0b28gfgorCWhhcmQuIFRydWUgc3RvcnkuIH4KKworVGhpcyBkb2VzIG5vdCBsb29rIGdvb2QuICBUbyBnZXQgdGhlIHBhcmFncmFwaCBpbnRvIHNoYXBlIHlvdSB1c2UgdGhlICJncSIKK29wZXJhdG9yLgorICAgTGV0J3MgZmlyc3QgdXNlIHRoaXMgd2l0aCBhIFZpc3VhbCBzZWxlY3Rpb24uICBTdGFydGluZyBmcm9tIHRoZSBmaXJzdAorbGluZSwgdHlwZTogPgorCisJdjRqZ3EKKworInYiIHRvIHN0YXJ0IFZpc3VhbCBtb2RlLCAiNGonIHRvIG1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoIGFuZCB0aGVuCit0aGUgImdxIiBvcGVyYXRvci4gIFRoZSByZXN1bHQgaXM6CisKKwkJIDEJICAgMgkgICAgIDMKKwkxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NQorCUkgdGF1Z2h0IGZvciBhIHdoaWxlLiBPbmUgfgorCXRpbWUsIEkgd2FzIHN0b3BwZWQgYnkgdGhlIH4KKwlGb3J0IFdvcnRoIHBvbGljZSwgYmVjYXVzZSBteSB+CisJaG9tZXdvcmsgd2FzIHRvbyBoYXJkLiBUcnVlIH4KKwlzdG9yeS4gfgorCitOb3RlOiB0aGVyZSBpcyBhIHdheSB0byBkbyBhdXRvbWF0aWMgZm9ybWF0dGluZyBmb3Igc3BlY2lmaWMgdHlwZXMgb2YgdGV4dAorbGF5b3V0cywgc2VlIHxhdXRvLWZvcm1hdHwuCisKK1NpbmNlICJncSIgaXMgYW4gb3BlcmF0b3IsIHlvdSBjYW4gdXNlIG9uZSBvZiB0aGUgdGhyZWUgd2F5cyB0byBzZWxlY3QgdGhlCit0ZXh0IGl0IHdvcmtzIG9uOiBXaXRoIFZpc3VhbCBtb2RlLCB3aXRoIGEgbW92ZW1lbnQgYW5kIHdpdGggYSB0ZXh0IG9iamVjdC4KKyAgIFRoZSBleGFtcGxlIGFib3ZlIGNvdWxkIGFsc28gYmUgZG9uZSB3aXRoICJncTRqIi4gIFRoYXQncyBsZXNzIHR5cGluZywgYnV0Cit5b3UgaGF2ZSB0byBrbm93IHRoZSBsaW5lIGNvdW50LiAgQSBtb3JlIHVzZWZ1bCBtb3Rpb24gY29tbWFuZCBpcyAifSIuICBUaGlzCittb3ZlcyB0byB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoLiAgVGh1cyAiZ3F9IiBmb3JtYXRzIGZyb20gdGhlIGN1cnNvciB0byB0aGUKK2VuZCBvZiB0aGUgY3VycmVudCBwYXJhZ3JhcGguCisgICBBIHZlcnkgdXNlZnVsIHRleHQgb2JqZWN0IHRvIHVzZSB3aXRoICJncSIgaXMgdGhlIHBhcmFncmFwaC4gIFRyeSB0aGlzOiA+CisKKwlncWFwCisKKyJhcCIgc3RhbmRzIGZvciAiYS1wYXJhZ3JhcGgiLiAgVGhpcyBmb3JtYXRzIHRoZSB0ZXh0IG9mIG9uZSBwYXJhZ3JhcGgKKyhzZXBhcmF0ZWQgYnkgZW1wdHkgbGluZXMpLiAgQWxzbyB0aGUgcGFydCBiZWZvcmUgdGhlIGN1cnNvci4KKyAgIElmIHlvdSBoYXZlIHlvdXIgcGFyYWdyYXBocyBzZXBhcmF0ZWQgYnkgZW1wdHkgbGluZXMsIHlvdSBjYW4gZm9ybWF0IHRoZQord2hvbGUgZmlsZSBieSB0eXBpbmcgdGhpczogPgorCisJZ2dncUcKKworImdnIiB0byBtb3ZlIHRvIHRoZSBmaXJzdCBsaW5lLCAiZ3FHIiB0byBmb3JtYXQgdW50aWwgdGhlIGxhc3QgbGluZS4KKyAgIFdhcm5pbmc6IElmIHlvdXIgcGFyYWdyYXBocyBhcmUgbm90IHByb3Blcmx5IHNlcGFyYXRlZCwgdGhleSB3aWxsIGJlIGpvaW5lZAordG9nZXRoZXIuICBBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIGhhdmUgYSBsaW5lIHdpdGggYSBzcGFjZSBvciBUYWIuICBUaGF0J3MgYQorYmxhbmsgbGluZSwgYnV0IG5vdCBhbiBlbXB0eSBsaW5lLgorCitWaW0gaXMgYWJsZSBmb3JtYXQgbW9yZSB0aGFuIGp1c3QgcGxhaW4gdGV4dC4gIFNlZSB8Zm8tdGFibGV8IGZvciBob3cgdG8KK2NoYW5nZSB0aGlzLiAgU2VlIHRoZSAnam9pbnNwYWNlcycgb3B0aW9uIHRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mIHNwYWNlcyB1c2VkCithZnRlciBhIGZ1bGwgc3RvcC4KKyAgIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSBhbiBleHRlcm5hbCBwcm9ncmFtIGZvciBmb3JtYXR0aW5nLiAgVGhpcyBpcyB1c2VmdWwKK2lmIHlvdXIgdGV4dCBjYW4ndCBiZSBwcm9wZXJseSBmb3JtYXR0ZWQgd2l0aCBWaW0ncyBidWlsdGluIGNvbW1hbmQuICBTZWUgdGhlCisnZm9ybWF0cHJnJyBvcHRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI1LjIqCUFsaWduaW5nIHRleHQKKworVG8gY2VudGVyIGEgcmFuZ2Ugb2YgbGluZXMsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTp7cmFuZ2V9Y2VudGVyIFt3aWR0aF0KKwore3JhbmdlfSBpcyB0aGUgdXN1YWwgY29tbWFuZC1saW5lIHJhbmdlLiAgW3dpZHRoXSBpcyBhbiBvcHRpb25hbCBsaW5lIHdpZHRoIHRvCit1c2UgZm9yIGNlbnRlcmluZy4gIElmIFt3aWR0aF0gaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mCisndGV4dHdpZHRoJy4gIChJZiAndGV4dHdpZHRoJyBpcyAwLCB0aGUgZGVmYXVsdCBpcyA4MC4pCisgICBGb3IgZXhhbXBsZTogPgorCisJOjEsNWNlbnRlciA0MAorCityZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICBJIHRhdWdodCBmb3IgYSB3aGlsZS4gT25lIH4KKyAgICAgICB0aW1lLCBJIHdhcyBzdG9wcGVkIGJ5IHRoZSB+CisgICAgIEZvcnQgV29ydGggcG9saWNlLCBiZWNhdXNlIG15IH4KKyAgICAgIGhvbWV3b3JrIHdhcyB0b28gaGFyZC4gVHJ1ZSB+CisJCSBzdG9yeS4gfgorCisKK1JJR0hUIEFMSUdOTUVOVAorCitTaW1pbGFybHksIHRoZSAiOnJpZ2h0IiBjb21tYW5kIHJpZ2h0LWp1c3RpZmllcyB0aGUgdGV4dDogPgorCisJOjEsNXJpZ2h0IDM3CisKK2dpdmVzIHRoaXMgcmVzdWx0OgorCisJICAgIEkgdGF1Z2h0IGZvciBhIHdoaWxlLiBPbmUgfgorCSAgIHRpbWUsIEkgd2FzIHN0b3BwZWQgYnkgdGhlIH4KKwlGb3J0IFdvcnRoIHBvbGljZSwgYmVjYXVzZSBteSB+CisJICBob21ld29yayB3YXMgdG9vIGhhcmQuIFRydWUgfgorCQkJICAgICAgIHN0b3J5LiB+CisKK0xFRlQgQUxJR05NRU5UCisKK0ZpbmFsbHkgdGhlcmUgaXMgdGhpcyBjb21tYW5kOiA+CisKKwk6e3JhbmdlfWxlZnQgW21hcmdpbl0KKworVW5saWtlICI6Y2VudGVyIiBhbmQgIjpyaWdodCIsIGhvd2V2ZXIsIHRoZSBhcmd1bWVudCB0byAiOmxlZnQiIGlzIG5vdCB0aGUKK2xlbmd0aCBvZiB0aGUgbGluZS4gIEluc3RlYWQgaXQgaXMgdGhlIGxlZnQgbWFyZ2luLiAgSWYgaXQgaXMgb21pdHRlZCwgdGhlCit0ZXh0IHdpbGwgYmUgcHV0IGFnYWluc3QgdGhlIGxlZnQgc2lkZSBvZiB0aGUgc2NyZWVuICh1c2luZyBhIHplcm8gbWFyZ2luCit3b3VsZCBkbyB0aGUgc2FtZSkuICBJZiBpdCBpcyA1LCB0aGUgdGV4dCB3aWxsIGJlIGluZGVudGVkIDUgc3BhY2VzLiAgRm9yCitleGFtcGxlLCB1c2UgdGhlc2UgY29tbWFuZHM6ID4KKworCToxbGVmdCA1CisJOjIsNWxlZnQKKworVGhpcyByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6CisKKwkgICAgIEkgdGF1Z2h0IGZvciBhIHdoaWxlLiBPbmUgfgorCXRpbWUsIEkgd2FzIHN0b3BwZWQgYnkgdGhlIH4KKwlGb3J0IFdvcnRoIHBvbGljZSwgYmVjYXVzZSBteSB+CisJaG9tZXdvcmsgd2FzIHRvbyBoYXJkLiBUcnVlIH4KKwlzdG9yeS4gfgorCisKK0pVU1RJRllJTkcgVEVYVAorCitWaW0gaGFzIG5vIGJ1aWx0LWluIHdheSBvZiBqdXN0aWZ5aW5nIHRleHQuICBIb3dldmVyLCB0aGVyZSBpcyBhIG5lYXQgbWFjcm8KK3BhY2thZ2UgdGhhdCBkb2VzIHRoZSBqb2IuICBUbyB1c2UgdGhpcyBwYWNrYWdlLCBleGVjdXRlIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQ6ID4KKworCTpydW50aW1lIG1hY3Jvcy9qdXN0aWZ5LnZpbQorCitUaGlzIFZpbSBzY3JpcHQgZmlsZSBkZWZpbmVzIGEgbmV3IHZpc3VhbCBjb21tYW5kICJfaiIuIFRvIGp1c3RpZnkgYSBibG9jayBvZgordGV4dCwgaGlnaGxpZ2h0IHRoZSB0ZXh0IGluIFZpc3VhbCBtb2RlIGFuZCB0aGVuIGV4ZWN1dGUgIl9qIi4KKyAgIExvb2sgaW4gdGhlIGZpbGUgZm9yIG1vcmUgZXhwbGFuYXRpb25zLiAgVG8gZ28gdGhlcmUsIGRvICJnZiIgb24gdGhpcyBuYW1lOgorJFZJTVJVTlRJTUUvbWFjcm9zL2p1c3RpZnkudmltLgorCitBbiBhbHRlcm5hdGl2ZSBpcyB0byBmaWx0ZXIgdGhlIHRleHQgdGhyb3VnaCBhbiBleHRlcm5hbCBwcm9ncmFtLiAgRXhhbXBsZTogPgorCisJOiUhZm10CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI1LjMqCUluZGVudHMgYW5kIHRhYnMKKworSW5kZW50cyBjYW4gYmUgdXNlZCB0byBtYWtlIHRleHQgc3RhbmQgb3V0IGZyb20gdGhlIHJlc3QuICBUaGUgZXhhbXBsZSB0ZXh0cworaW4gdGhpcyBtYW51YWwsIGZvciBleGFtcGxlLCBhcmUgaW5kZW50ZWQgYnkgZWlnaHQgc3BhY2VzIG9yIGEgdGFiLiAgWW91IHdvdWxkCitub3JtYWxseSBlbnRlciB0aGlzIGJ5IHR5cGluZyBhIHRhYiBhdCB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLiAgVGFrZSB0aGlzCit0ZXh0OgorCXRoZSBmaXJzdCBsaW5lIH4KKwl0aGUgc2Vjb25kIGxpbmUgfgorCitUaGlzIGlzIGVudGVyZWQgYnkgdHlwaW5nIGEgdGFiLCBzb21lIHRleHQsIDxFbnRlcj4sIHRhYiBhbmQgbW9yZSB0ZXh0LgorICAgVGhlICdhdXRvaW5kZW50JyBvcHRpb24gaW5zZXJ0cyBpbmRlbnRzIGF1dG9tYXRpY2FsbHk6ID4KKworCTpzZXQgYXV0b2luZGVudAorCitXaGVuIGEgbmV3IGxpbmUgaXMgc3RhcnRlZCBpdCBnZXRzIHRoZSBzYW1lIGluZGVudCBhcyB0aGUgcHJldmlvdXMgbGluZS4gIEluCit0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIHRhYiBhZnRlciB0aGUgPEVudGVyPiBpcyBub3QgbmVlZGVkIGFueW1vcmUuCisKKworSU5DUkVBU0lORyBJTkRFTlQKKworVG8gaW5jcmVhc2UgdGhlIGFtb3VudCBvZiBpbmRlbnQgaW4gYSBsaW5lLCB1c2UgdGhlICI+IiBvcGVyYXRvci4gIE9mdGVuIHRoaXMKK2lzIHVzZWQgYXMgIj4+Iiwgd2hpY2ggYWRkcyBpbmRlbnQgdG8gdGhlIGN1cnJlbnQgbGluZS4KKyAgIFRoZSBhbW91bnQgb2YgaW5kZW50IGFkZGVkIGlzIHNwZWNpZmllZCB3aXRoIHRoZSAnc2hpZnR3aWR0aCcgb3B0aW9uLiAgVGhlCitkZWZhdWx0IHZhbHVlIGlzIDguICBUbyBtYWtlICI+PiIgaW5zZXJ0IGZvdXIgc3BhY2VzIHdvcnRoIG9mIGluZGVudCwgZm9yCitleGFtcGxlLCB0eXBlIHRoaXM6ID4KKworCTpzZXQgc2hpZnR3aWR0aD00CisKK1doZW4gdXNlZCBvbiB0aGUgc2Vjb25kIGxpbmUgb2YgdGhlIGV4YW1wbGUgdGV4dCwgdGhpcyBpcyB3aGF0IHlvdSBnZXQ6CisKKwl0aGUgZmlyc3QgbGluZSB+CisJICAgIHRoZSBzZWNvbmQgbGluZSB+CisKKyI0Pj4iIHdpbGwgaW5jcmVhc2UgdGhlIGluZGVudCBvZiBmb3VyIGxpbmVzLgorCisKK1RBQlNUT1AKKworSWYgeW91IHdhbnQgdG8gbWFrZSBpbmRlbnRzIGEgbXVsdGlwbGUgb2YgNCwgeW91IHNldCAnc2hpZnR3aWR0aCcgdG8gNC4gIEJ1dAord2hlbiBwcmVzc2luZyBhIFRhYiB5b3Ugc3RpbGwgZ2V0IDggc3BhY2VzIHdvcnRoIG9mIGluZGVudC4gIFRvIGNoYW5nZSB0aGlzLAorc2V0IHRoZSAnc29mdHRhYnN0b3AnIG9wdGlvbjogPgorCisJOnNldCBzb2Z0dGFic3RvcD00CisKK1RoaXMgd2lsbCBtYWtlIHRoZSA8VGFiPiBrZXkgaW5zZXJ0IDQgc3BhY2VzIHdvcnRoIG9mIGluZGVudC4gIElmIHRoZXJlIGFyZQorYWxyZWFkeSBmb3VyIHNwYWNlcywgYSA8VGFiPiBjaGFyYWN0ZXIgaXMgdXNlZCAoc2F2aW5nIHNldmVuIGNoYXJhY3RlcnMgaW4gdGhlCitmaWxlKS4gIChJZiB5b3UgYWx3YXlzIHdhbnQgc3BhY2VzIGFuZCBubyB0YWIgY2hhcmFjdGVycywgc2V0IHRoZSAnZXhwYW5kdGFiJworb3B0aW9uLikKKworCU5vdGU6CisJWW91IGNvdWxkIHNldCB0aGUgJ3RhYnN0b3AnIG9wdGlvbiB0byA0LiAgSG93ZXZlciwgaWYgeW91IGVkaXQgdGhlCisJZmlsZSBhbm90aGVyIHRpbWUsIHdpdGggJ3RhYnN0b3AnIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBvZiA4LCBpdAorCXdpbGwgbG9vayB3cm9uZy4gIEluIG90aGVyIHByb2dyYW1zIGFuZCB3aGVuIHByaW50aW5nIHRoZSBpbmRlbnQgd2lsbAorCWFsc28gYmUgd3JvbmcuICBUaGVyZWZvcmUgaXQgaXMgcmVjb21tZW5kZWQgdG8ga2VlcCAndGFic3RvcCcgYXQgZWlnaHQKKwlhbGwgdGhlIHRpbWUuICBUaGF0J3MgdGhlIHN0YW5kYXJkIHZhbHVlIGV2ZXJ5d2hlcmUuCisKKworQ0hBTkdJTkcgVEFCUworCitZb3UgZWRpdCBhIGZpbGUgd2hpY2ggd2FzIHdyaXR0ZW4gd2l0aCBhIHRhYnN0b3Agb2YgMy4gIEluIFZpbSBpdCBsb29rcyB1Z2x5LAorYmVjYXVzZSBpdCB1c2VzIHRoZSBub3JtYWwgdGFic3RvcCB2YWx1ZSBvZiA4LiAgWW91IGNhbiBmaXggdGhpcyBieSBzZXR0aW5nCisndGFic3RvcCcgdG8gMy4gIEJ1dCB5b3UgaGF2ZSB0byBkbyB0aGlzIGV2ZXJ5IHRpbWUgeW91IGVkaXQgdGhpcyBmaWxlLgorICAgVmltIGNhbiBjaGFuZ2UgdGhlIHVzZSBvZiB0YWJzdG9wcyBpbiB5b3VyIGZpbGUuICBGaXJzdCwgc2V0ICd0YWJzdG9wJyB0bworbWFrZSB0aGUgaW5kZW50cyBsb29rIGdvb2QsIHRoZW4gdXNlIHRoZSAiOnJldGFiIiBjb21tYW5kOiA+CisKKwk6c2V0IHRhYnN0b3A9MworCTpyZXRhYiA4CisKK1RoZSAiOnJldGFiIiBjb21tYW5kIHdpbGwgY2hhbmdlICd0YWJzdG9wJyB0byA4LCB3aGlsZSBjaGFuZ2luZyB0aGUgdGV4dCBzdWNoCit0aGF0IGl0IGxvb2tzIHRoZSBzYW1lLiAgSXQgY2hhbmdlcyBzcGFucyBvZiB3aGl0ZSBzcGFjZSBpbnRvIHRhYnMgYW5kIHNwYWNlcworZm9yIHRoaXMuICBZb3UgY2FuIG5vdyB3cml0ZSB0aGUgZmlsZS4gIE5leHQgdGltZSB5b3UgZWRpdCBpdCB0aGUgaW5kZW50cyB3aWxsCitiZSByaWdodCB3aXRob3V0IHNldHRpbmcgYW4gb3B0aW9uLgorICAgV2FybmluZzogV2hlbiB1c2luZyAiOnJldGFiIiBvbiBhIHByb2dyYW0sIGl0IG1heSBjaGFuZ2Ugd2hpdGUgc3BhY2UgaW5zaWRlCithIHN0cmluZyBjb25zdGFudC4gIFRoZXJlZm9yZSBpdCdzIGEgZ29vZCBoYWJpdCB0byB1c2UgIlx0IiBpbnN0ZWFkIG9mIGEKK3JlYWwgdGFiLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNS40KglEZWFsaW5nIHdpdGggbG9uZyBsaW5lcworCitTb21ldGltZXMgeW91IHdpbGwgYmUgZWRpdGluZyBhIGZpbGUgdGhhdCBpcyB3aWRlciB0aGFuIHRoZSBudW1iZXIgb2YgY29sdW1ucworaW4gdGhlIHdpbmRvdy4gIFdoZW4gdGhhdCBvY2N1cnMsIFZpbSB3cmFwcyB0aGUgbGluZXMgc28gdGhhdCBldmVyeXRoaW5nIGZpdHMKK29uIHRoZSBzY3JlZW4uCisgICBJZiB5b3Ugc3dpdGNoIHRoZSAnd3JhcCcgb3B0aW9uIG9mZiwgZWFjaCBsaW5lIGluIHRoZSBmaWxlIHNob3dzIHVwIGFzIG9uZQorbGluZSBvbiB0aGUgc2NyZWVuLiAgVGhlbiB0aGUgZW5kcyBvZiB0aGUgbG9uZyBsaW5lcyBkaXNhcHBlYXIgb2ZmIHRoZSBzY3JlZW4KK3RvIHRoZSByaWdodC4KKyAgIFdoZW4geW91IG1vdmUgdGhlIGN1cnNvciB0byBhIGNoYXJhY3RlciB0aGF0IGNhbid0IGJlIHNlZW4sIFZpbSB3aWxsIHNjcm9sbAordGhlIHRleHQgdG8gc2hvdyBpdC4gIFRoaXMgaXMgbGlrZSBtb3ZpbmcgYSB2aWV3cG9ydCBvdmVyIHRoZSB0ZXh0IGluIHRoZQoraG9yaXpvbnRhbCBkaXJlY3Rpb24uCisgICBCeSBkZWZhdWx0LCBWaW0gZG9lcyBub3QgZGlzcGxheSBhIGhvcml6b250YWwgc2Nyb2xsYmFyIGluIHRoZSBHVUkuICBJZiB5b3UKK3dhbnQgdG8gZW5hYmxlIG9uZSwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOnNldCBndWlvcHRpb25zKz1iCisKK09uZSBob3Jpem9udGFsIHNjcm9sbGJhciB3aWxsIGFwcGVhciBhdCB0aGUgYm90dG9tIG9mIHRoZSBWaW0gd2luZG93LgorCitJZiB5b3UgZG9uJ3QgaGF2ZSBhIHNjcm9sbGJhciBvciBkb24ndCB3YW50IHRvIHVzZSBpdCwgdXNlIHRoZXNlIGNvbW1hbmRzIHRvCitzY3JvbGwgdGhlIHRleHQuICBUaGUgY3Vyc29yIHdpbGwgc3RheSBpbiB0aGUgc2FtZSBwbGFjZSwgYnV0IGl0J3MgbW92ZSBiYWNrCitpbnRvIHRoZSB2aXNpYmxlIHRleHQgaWYgbmVjZXNzYXJ5LgorCisJemgJCXNjcm9sbCByaWdodAorCTR6aAkJc2Nyb2xsIGZvdXIgY2hhcmFjdGVycyByaWdodAorCXpICQlzY3JvbGwgaGFsZiBhIHdpbmRvdyB3aWR0aCByaWdodAorCXplCQlzY3JvbGwgcmlnaHQgdG8gcHV0IHRoZSBjdXJzb3IgYXQgdGhlIGVuZAorCXpsCQlzY3JvbGwgbGVmdAorCTR6bAkJc2Nyb2xsIGZvdXIgY2hhcmFjdGVycyBsZWZ0CisJekwJCXNjcm9sbCBoYWxmIGEgd2luZG93IHdpZHRoIGxlZnQKKwl6cwkJc2Nyb2xsIGxlZnQgdG8gcHV0IHRoZSBjdXJzb3IgYXQgdGhlIHN0YXJ0CisKK0xldCdzIGF0dGVtcHQgdG8gc2hvdyB0aGlzIHdpdGggb25lIGxpbmUgb2YgdGV4dC4gIFRoZSBjdXJzb3IgaXMgb24gdGhlICJ3IiBvZgorIndoaWNoIi4gIFRoZSAiY3VycmVudCB3aW5kb3ciIGFib3ZlIHRoZSBsaW5lIGluZGljYXRlcyB0aGUgdGV4dCB0aGF0IGlzCitjdXJyZW50bHkgdmlzaWJsZS4gIFRoZSAid2luZG93InMgYmVsb3cgdGhlIHRleHQgaW5kaWNhdGUgdGhlIHRleHQgdGhhdCBpcwordmlzaWJsZSBhZnRlciB0aGUgY29tbWFuZCBsZWZ0IG9mIGl0LgorCisJCQkgICAgICB8PC0tIGN1cnJlbnQgd2luZG93IC0tPnwKKwkJc29tZSBsb25nIHRleHQsIHBhcnQgb2Ygd2hpY2ggaXMgdmlzaWJsZSBpbiB0aGUgd2luZG93IH4KKwl6ZQkgIHw8LS0JICAgd2luZG93ICAgICAtLT58CisJekgJICAgfDwtLSAgICAgd2luZG93ICAgICAtLT58CisJNHpoCQkgIHw8LS0JICAgd2luZG93ICAgICAtLT58CisJemgJCSAgICAgfDwtLSAgICAgd2luZG93CSAtLT58CisJemwJCSAgICAgICB8PC0tCXdpbmRvdwkgICAtLT58CisJNHpsCQkJICB8PC0tCSAgIHdpbmRvdyAgICAgLS0+fAorCXpMCQkJCXw8LS0JIHdpbmRvdyAgICAgLS0+fAorCXpzCQkJICAgICAgIHw8LS0Jd2luZG93CSAgIC0tPnwKKworCitNT1ZJTkcgV0lUSCBXUkFQIE9GRgorCitXaGVuICd3cmFwJyBpcyBvZmYgYW5kIHRoZSB0ZXh0IGhhcyBzY3JvbGxlZCBob3Jpem9udGFsbHksIHlvdSBjYW4gdXNlIHRoZQorZm9sbG93aW5nIGNvbW1hbmRzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhIGNoYXJhY3RlciB5b3UgY2FuIHNlZS4gIFRodXMgdGV4dAorbGVmdCBhbmQgcmlnaHQgb2YgdGhlIHdpbmRvdyBpcyBpZ25vcmVkLiAgVGhlc2UgbmV2ZXIgY2F1c2UgdGhlIHRleHQgdG8KK3Njcm9sbDoKKworCWcwCQl0byBmaXJzdCB2aXNpYmxlIGNoYXJhY3RlciBpbiB0aGlzIGxpbmUKKwlnXgkJdG8gZmlyc3Qgbm9uLWJsYW5rIHZpc2libGUgY2hhcmFjdGVyIGluIHRoaXMgbGluZQorCWdtCQl0byBtaWRkbGUgb2YgdGhpcyBsaW5lCisJZyQJCXRvIGxhc3QgdmlzaWJsZSBjaGFyYWN0ZXIgaW4gdGhpcyBsaW5lCisKKwkJfDwtLQkgd2luZG93ICAgIC0tPnwKKwlzb21lIGxvbmcgICAgdGV4dCwgcGFydCBvZiB3aGljaCBpcyB2aXNpYmxlIH4KKwkJIGcwICBnXiAgICBnbQkgICAgIGckCisKKworQlJFQUtJTkcgQVQgV09SRFMJCQkJKmVkaXQtbm8tYnJlYWsqCisKK1doZW4gcHJlcGFyaW5nIHRleHQgZm9yIHVzZSBieSBhbm90aGVyIHByb2dyYW0sIHlvdSBtaWdodCBoYXZlIHRvIG1ha2UKK3BhcmFncmFwaHMgd2l0aG91dCBhIGxpbmUgYnJlYWsuICBBIGRpc2FkdmFudGFnZSBvZiB1c2luZyAnbm93cmFwJyBpcyB0aGF0IHlvdQorY2FuJ3Qgc2VlIHRoZSB3aG9sZSBzZW50ZW5jZSB5b3UgYXJlIHdvcmtpbmcgb24uICBXaGVuICd3cmFwJyBpcyBvbiwgd29yZHMgYXJlCiticm9rZW4gaGFsZndheSwgd2hpY2ggbWFrZXMgdGhlbSBoYXJkIHRvIHJlYWQuCisgICBBIGdvb2Qgc29sdXRpb24gZm9yIGVkaXRpbmcgdGhpcyBraW5kIG9mIHBhcmFncmFwaCBpcyBzZXR0aW5nIHRoZQorJ2xpbmVicmVhaycgb3B0aW9uLiAgVmltIHRoZW4gYnJlYWtzIGxpbmVzIGF0IGFuIGFwcHJvcHJpYXRlIHBsYWNlIHdoZW4KK2Rpc3BsYXlpbmcgdGhlIGxpbmUuICBUaGUgdGV4dCBpbiB0aGUgZmlsZSByZW1haW5zIHVuY2hhbmdlZC4KKyAgIFdpdGhvdXQgJ2xpbmVicmVhaycgdGV4dCBtaWdodCBsb29rIGxpa2UgdGhpczoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfGxldHRlciBnZW5lcmF0aW9uIHByb2dyYW0gZm9yIGEgYnwKKwl8YW5rLiAgVGhleSB3YW50ZWQgdG8gc2VuZCBvdXQgYSBzfAorCXxwZWNpYWwsIHBlcnNvbmFsaXplZCBsZXR0ZXIgdG8gdGh8CisJfGVpciByaWNoZXN0IDEwMDAgY3VzdG9tZXJzLiAgVW5mb3wKKwl8cnR1bmF0ZWx5IGZvciB0aGUgcHJvZ3JhbW1lciwgaGUgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCitBZnRlcjogPgorCisJOnNldCBsaW5lYnJlYWsKKworaXQgbG9va3MgbGlrZSB0aGlzOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8bGV0dGVyIGdlbmVyYXRpb24gcHJvZ3JhbSBmb3IgYSAgfAorCXxiYW5rLiAgVGhleSB3YW50ZWQgdG8gc2VuZCBvdXQgYSB8CisJfHNwZWNpYWwsIHBlcnNvbmFsaXplZCBsZXR0ZXIgdG8gIHwKKwl8dGhlaXIgcmljaGVzdCAxMDAwIGN1c3RvbWVycy4gICAgfAorCXxVbmZvcnR1bmF0ZWx5IGZvciB0aGUgcHJvZ3JhbW1lcix8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworUmVsYXRlZCBvcHRpb25zOgorJ2JyZWFrYXQnIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVycyB3aGVyZSBhIGJyZWFrIGNhbiBiZSBpbnNlcnRlZC4KKydzaG93YnJlYWsnIHNwZWNpZmllcyBhIHN0cmluZyB0byBzaG93IGF0IHRoZSBzdGFydCBvZiBicm9rZW4gbGluZS4KK1NldCAndGV4dHdpZHRoJyB0byB6ZXJvIHRvIGF2b2lkIGEgcGFyYWdyYXBoIHRvIGJlIHNwbGl0LgorCisKK01PVklORyBCWSBWSVNJQkxFIExJTkVTCisKK1RoZSAiaiIgYW5kICJrIiBjb21tYW5kcyBtb3ZlIHRvIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBsaW5lcy4gIFdoZW4gdXNlZCBvbgorYSBsb25nIGxpbmUsIHRoaXMgbWVhbnMgbW92aW5nIGEgbG90IG9mIHNjcmVlbiBsaW5lcyBhdCBvbmNlLgorICAgVG8gbW92ZSBvbmx5IG9uZSBzY3JlZW4gbGluZSwgdXNlIHRoZSAiZ2oiIGFuZCAiZ2siIGNvbW1hbmRzLiAgV2hlbiBhIGxpbmUKK2RvZXNuJ3Qgd3JhcCB0aGV5IGRvIHRoZSBzYW1lIGFzICJqIiBhbmQgImsiLiAgV2hlbiB0aGUgbGluZSBkb2VzIHdyYXAsIHRoZXkKK21vdmUgdG8gYSBjaGFyYWN0ZXIgZGlzcGxheWVkIG9uZSBsaW5lIGJlbG93IG9yIGFib3ZlLgorICAgWW91IG1pZ2h0IGxpa2UgdG8gdXNlIHRoZXNlIG1hcHBpbmdzLCB3aGljaCBiaW5kIHRoZXNlIG1vdmVtZW50IGNvbW1hbmRzIHRvCit0aGUgY3Vyc29yIGtleXM6ID4KKworCTptYXAgPFVwPiBnaworCTptYXAgPERvd24+IGdqCisKKworVFVSTklORyBBIFBBUkFHUkFQSCBJTlRPIE9ORSBMSU5FCisKK0lmIHlvdSB3YW50IHRvIGltcG9ydCB0ZXh0IGludG8gYSBwcm9ncmFtIGxpa2UgTVMtV29yZCwgZWFjaCBwYXJhZ3JhcGggc2hvdWxkCitiZSBhIHNpbmdsZSBsaW5lLiAgSWYgeW91ciBwYXJhZ3JhcGhzIGFyZSBjdXJyZW50bHkgc2VwYXJhdGVkIHdpdGggZW1wdHkKK2xpbmVzLCB0aGlzIGlzIGhvdyB5b3UgdHVybiBlYWNoIHBhcmFncmFwaCBpbnRvIGEgc2luZ2xlIGxpbmU6ID4KKworCTpnLy4vLC9eJC9qb2luCisKK1RoYXQgbG9va3MgY29tcGxpY2F0ZWQuICBMZXQncyBicmVhayBpdCB1cCBpbiBwaWVjZXM6CisKKwk6Zy8uLwkJQSAiOmdsb2JhbCIgY29tbWFuZCB0aGF0IGZpbmRzIGFsbCBsaW5lcyB0aGF0IGNvbnRhaW4KKwkJCWF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIuCisJICAgICAsL14kLwlBIHJhbmdlLCBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IGxpbmUgKHRoZSBub24tZW1wdHkKKwkJCWxpbmUpIHVudGlsIGFuIGVtcHR5IGxpbmUuCisJCSAgam9pbglUaGUgIjpqb2luIiBjb21tYW5kIGpvaW5zIHRoZSByYW5nZSBvZiBsaW5lcyB0b2dldGhlcgorCQkJaW50byBvbmUgbGluZS4KKworU3RhcnRpbmcgd2l0aCB0aGlzIHRleHQsIGNvbnRhaW5pbmcgZWlnaHQgbGluZXMgYnJva2VuIGF0IGNvbHVtbiAzMDoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxBIGxldHRlciBnZW5lcmF0aW9uIHByb2dyYW0JICAgfAorCXxmb3IgYSBiYW5rLiAgVGhleSB3YW50ZWQgdG8JICAgfAorCXxzZW5kIG91dCBhIHNwZWNpYWwsCQkgICB8CisJfHBlcnNvbmFsaXplZCBsZXR0ZXIuCQkgICB8CisJfAkJCQkgICB8CisJfFRvIHRoZWlyIHJpY2hlc3QgMTAwMAkJICAgfAorCXxjdXN0b21lcnMuICBVbmZvcnR1bmF0ZWx5IGZvcgkgICB8CisJfHRoZSBwcm9ncmFtbWVyLAkJICAgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitZb3UgZW5kIHVwIHdpdGggdHdvIGxpbmVzOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfEEgbGV0dGVyIGdlbmVyYXRpb24gcHJvZ3JhbSBmb3IgYSB8CisJfGJhbmsuCVRoZXkgd2FudGVkIHRvIHNlbmQgb3V0IGEgc3wKKwl8cGVjaWFsLCBwZXJzb25hbGl6ZWQgbGV0dGVyLgkgICB8CisJfFRvIHRoZWlyIHJpY2hlc3QgMTAwMCBjdXN0b21lcnMuICB8CisJfFVuZm9ydHVuYXRlbHkgZm9yIHRoZSBwcm9ncmFtbWVyLCB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK05vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qgd29yayB3aGVuIHRoZSBzZXBhcmF0aW5nIGxpbmUgaXMgYmxhbmsgYnV0IG5vdCBlbXB0eTsKK3doZW4gaXQgY29udGFpbnMgc3BhY2VzIGFuZC9vciB0YWJzLiAgVGhpcyBjb21tYW5kIGRvZXMgd29yayB3aXRoIGJsYW5rIGxpbmVzOgorPgorCTpnL1xTLywvXlxzKiQvam9pbgorCitUaGlzIHN0aWxsIHJlcXVpcmVzIGEgYmxhbmsgb3IgZW1wdHkgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGZvciB0aGUgbGFzdAorcGFyYWdyYXBoIHRvIGJlIGpvaW5lZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjUuNSoJRWRpdGluZyB0YWJsZXMKKworU3VwcG9zZSB5b3UgYXJlIGVkaXRpbmcgYSB0YWJsZSB3aXRoIGZvdXIgY29sdW1uczoKKworCW5pY2UgdGFibGUJICB0ZXN0IDEJdGVzdCAyCSAgICB0ZXN0IDMgfgorCWlucHV0IEEJCSAgMC41MzQgfgorCWlucHV0IEIJCSAgMC45MTMgfgorCitZb3UgbmVlZCB0byBlbnRlciBudW1iZXJzIGluIHRoZSB0aGlyZCBjb2x1bW4uICBZb3UgY291bGQgbW92ZSB0byB0aGUgc2Vjb25kCitsaW5lLCB1c2UgIkEiLCBlbnRlciBhIGxvdCBvZiBzcGFjZXMgYW5kIHR5cGUgdGhlIHRleHQuCisgICBGb3IgdGhpcyBraW5kIG9mIGVkaXRpbmcgdGhlcmUgaXMgYSBzcGVjaWFsIG9wdGlvbjogPgorCisJc2V0IHZpcnR1YWxlZGl0PWFsbAorCitOb3cgeW91IGNhbiBtb3ZlIHRoZSBjdXJzb3IgdG8gcG9zaXRpb25zIHdoZXJlIHRoZXJlIGlzbid0IGFueSB0ZXh0LiAgVGhpcyBpcworY2FsbGVkICJ2aXJ0dWFsIHNwYWNlIi4gIEVkaXRpbmcgYSB0YWJsZSBpcyBhIGxvdCBlYXNpZXIgdGhpcyB3YXkuCisgICBNb3ZlIHRoZSBjdXJzb3IgYnkgc2VhcmNoaW5nIGZvciB0aGUgaGVhZGVyIG9mIHRoZSBsYXN0IGNvbHVtbjogPgorCisJL3Rlc3QgMworCitOb3cgcHJlc3MgImoiIGFuZCB5b3UgYXJlIHJpZ2h0IHdoZXJlIHlvdSBjYW4gZW50ZXIgdGhlIHZhbHVlIGZvciAiaW5wdXQgQSIuCitUeXBpbmcgIjAuNjkzIiByZXN1bHRzIGluOgorCisJbmljZSB0YWJsZQkgIHRlc3QgMSAgICAgdGVzdCAyCSB0ZXN0IDMgfgorCWlucHV0IEEJCSAgMC41MzQJCQkgMC42OTMgfgorCWlucHV0IEIJCSAgMC45MTMgfgorCitWaW0gaGFzIGF1dG9tYXRpY2FsbHkgZmlsbGVkIHRoZSBnYXAgaW4gZnJvbnQgb2YgdGhlIG5ldyB0ZXh0IGZvciB5b3UuICBOb3csCit0byBlbnRlciB0aGUgbmV4dCBmaWVsZCBpbiB0aGlzIGNvbHVtbiB1c2UgIkJqIi4gICJCIiBtb3ZlcyBiYWNrIHRvIHRoZSBzdGFydAorb2YgYSB3aGl0ZSBzcGFjZSBzZXBhcmF0ZWQgd29yZC4gIFRoZW4gImoiIG1vdmVzIHRvIHRoZSBwbGFjZSB3aGVyZSB0aGUgbmV4dAorZmllbGQgY2FuIGJlIGVudGVyZWQuCisKKwlOb3RlOgorCVlvdSBjYW4gbW92ZSB0aGUgY3Vyc29yIGFueXdoZXJlIGluIHRoZSBkaXNwbGF5LCBhbHNvIGJleW9uZCB0aGUgZW5kCisJb2YgYSBsaW5lLiAgQnV0IFZpbSB3aWxsIG5vdCBpbnNlcnQgc3BhY2VzIHRoZXJlLCB1bnRpbCB5b3UgaW5zZXJ0IGEKKwljaGFyYWN0ZXIgaW4gdGhhdCBwb3NpdGlvbi4KKworCitDT1BZSU5HIEEgQ09MVU1OCisKK1lvdSB3YW50IHRvIGFkZCBhIGNvbHVtbiwgd2hpY2ggc2hvdWxkIGJlIGEgY29weSBvZiB0aGUgdGhpcmQgY29sdW1uIGFuZAorcGxhY2VkIGJlZm9yZSB0aGUgInRlc3QgMSIgY29sdW1uLiAgRG8gdGhpcyBpbiBzZXZlbiBzdGVwczoKKzEuICBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGxlZnQgdXBwZXIgY29ybmVyIG9mIHRoaXMgY29sdW1uLCBlLmcuLCB3aXRoCisgICAgIi90ZXN0IDMiLgorMi4gIFByZXNzIENUUkwtViB0byBzdGFydCBibG9ja3dpc2UgVmlzdWFsIG1vZGUuCiszLiAgTW92ZSB0aGUgY3Vyc29yIGRvd24gdHdvIGxpbmVzIHdpdGggIjJqIi4gIFlvdSBhcmUgbm93IGluICJ2aXJ0dWFsIHNwYWNlIjoKKyAgICB0aGUgImlucHV0IEIiIGxpbmUgb2YgdGhlICJ0ZXN0IDMiIGNvbHVtbi4KKzQuICBNb3ZlIHRoZSBjdXJzb3IgcmlnaHQsIHRvIGluY2x1ZGUgdGhlIHdob2xlIGNvbHVtbiBpbiB0aGUgc2VsZWN0aW9uLCBwbHVzCisgICAgdGhlIHNwYWNlIHRoYXQgeW91IHdhbnQgYmV0d2VlbiB0aGUgY29sdW1ucy4gICI5bCIgc2hvdWxkIGRvIGl0LgorNS4gIFlhbmsgdGhlIHNlbGVjdGVkIHJlY3RhbmdsZSB3aXRoICJ5Ii4KKzYuICBNb3ZlIHRoZSBjdXJzb3IgdG8gInRlc3QgMSIsIHdoZXJlIHRoZSBuZXcgY29sdW1uIG11c3QgYmUgcGxhY2VkLgorNy4gIFByZXNzICJQIi4KKworVGhlIHJlc3VsdCBzaG91bGQgYmU6CisKKwluaWNlIHRhYmxlCSAgdGVzdCAzICAgIHRlc3QgMSAgICAgdGVzdCAyCSAgIHRlc3QgMyB+CisJaW5wdXQgQQkJICAwLjY5MyAgICAgMC41MzQJCSAgIDAuNjkzIH4KKwlpbnB1dCBCCQkJICAgIDAuOTEzIH4KKworTm90aWNlIHRoYXQgdGhlIHdob2xlICJ0ZXN0IDEiIGNvbHVtbiB3YXMgc2hpZnRlZCByaWdodCwgYWxzbyB0aGUgbGluZSB3aGVyZQordGhlICJ0ZXN0IDMiIGNvbHVtbiBkaWRuJ3QgaGF2ZSB0ZXh0LgorCitHbyBiYWNrIHRvIG5vbi12aXJ0dWFsIGN1cnNvciBtb3ZlbWVudHMgd2l0aDogPgorCisJOnNldCB2aXJ0dWFsZWRpdD0KKworCitWSVJUVUFMIFJFUExBQ0UgTU9ERQorCitUaGUgZGlzYWR2YW50YWdlIG9mIHVzaW5nICd2aXJ0dWFsZWRpdCcgaXMgdGhhdCBpdCAiZmVlbHMiIGRpZmZlcmVudC4gIFlvdQorY2FuJ3QgcmVjb2duaXplIHRhYnMgb3Igc3BhY2VzIGJleW9uZCB0aGUgZW5kIG9mIGxpbmUgd2hlbiBtb3ZpbmcgdGhlIGN1cnNvcgorYXJvdW5kLiAgQW5vdGhlciBtZXRob2QgY2FuIGJlIHVzZWQ6IFZpcnR1YWwgUmVwbGFjZSBtb2RlLgorICAgU3VwcG9zZSB5b3UgaGF2ZSBhIGxpbmUgaW4gYSB0YWJsZSB0aGF0IGNvbnRhaW5zIGJvdGggdGFicyBhbmQgb3RoZXIKK2NoYXJhY3RlcnMuICBVc2UgInJ4IiBvbiB0aGUgZmlyc3QgdGFiOgorCisJaW5wCTAuNjkzICAgMC41MzQJMC42OTMgfgorCisJICAgICAgIHwKKwkgICByeCAgfAorCSAgICAgICBWCisKKwlpbnB4MC42OTMgICAwLjUzNAkwLjY5MyB+CisKK1RoZSBsYXlvdXQgaXMgbWVzc2VkIHVwLiAgVG8gYXZvaWQgdGhhdCwgdXNlIHRoZSAiZ3IiIGNvbW1hbmQ6CisKKwlpbnAJMC42OTMgICAwLjUzNAkwLjY5MyB+CisKKwkgICAgICAgfAorCSAgZ3J4ICB8CisJICAgICAgIFYKKworCWlucHgJMC42OTMgICAwLjUzNAkwLjY5MyB+CisKK1doYXQgaGFwcGVucyBpcyB0aGF0IHRoZSAiZ3IiIGNvbW1hbmQgbWFrZXMgc3VyZSB0aGUgbmV3IGNoYXJhY3RlciB0YWtlcyB0aGUKK3JpZ2h0IGFtb3VudCBvZiBzY3JlZW4gc3BhY2UuICBFeHRyYSBzcGFjZXMgb3IgdGFicyBhcmUgaW5zZXJ0ZWQgdG8gZmlsbCB0aGUKK2dhcC4gIFRodXMgd2hhdCBhY3R1YWxseSBoYXBwZW5zIGlzIHRoYXQgYSB0YWIgaXMgcmVwbGFjZWQgYnkgIngiIGFuZCB0aGVuCitibGFua3MgYWRkZWQgdG8gbWFrZSB0aGUgdGV4dCBhZnRlciBpdCBrZWVwIGl0J3MgcGxhY2UuICBJbiB0aGlzIGNhc2UgYQordGFiIGlzIGluc2VydGVkLgorICAgV2hlbiB5b3UgbmVlZCB0byByZXBsYWNlIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyLCB5b3UgdXNlIHRoZSAiUiIgY29tbWFuZAordG8gZ28gdG8gUmVwbGFjZSBtb2RlIChzZWUgfDA0Ljl8KS4gIFRoaXMgbWVzc2VzIHVwIHRoZSBsYXlvdXQgYW5kIHJlcGxhY2VzCit0aGUgd3JvbmcgY2hhcmFjdGVyczoKKworCWlucAkwCTAuNTM0CTAuNjkzIH4KKworCQl8CisJIFIwLjc4NiB8CisJCVYKKworCWlucAkwLjc4NjM0CTAuNjkzIH4KKworVGhlICJnUiIgY29tbWFuZCB1c2VzIFZpcnR1YWwgUmVwbGFjZSBtb2RlLiAgVGhpcyBwcmVzZXJ2ZXMgdGhlIGxheW91dDoKKworCWlucAkwCTAuNTM0CTAuNjkzIH4KKworCQl8CisJZ1IwLjc4NiB8CisJCVYKKworCWlucAkwLjc4NgkwLjUzNAkwLjY5MyB+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMjYudHh0fCAgUmVwZWF0aW5nCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzI2LnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8yNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4NzYzZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8yNi50eHQKQEAgLTAsMCArMSwyMjEgQEAKKyp1c3JfMjYudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMiBPY3QgMjkKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCQkgIFJlcGVhdGluZworCisKK0FuIGVkaXRpbmcgdGFzayBpcyBoYXJkbHkgZXZlciB1bnN0cnVjdHVyZWQuICBBIGNoYW5nZSBvZnRlbiBuZWVkcyB0byBiZSBtYWRlCitzZXZlcmFsIHRpbWVzLiAgSW4gdGhpcyBjaGFwdGVyIGEgbnVtYmVyIG9mIHVzZWZ1bCB3YXlzIHRvIHJlcGVhdCBhIGNoYW5nZQord2lsbCBiZSBleHBsYWluZWQuCisKK3wyNi4xfAlSZXBlYXRpbmcgd2l0aCBWaXN1YWwgbW9kZQorfDI2LjJ8CUFkZCBhbmQgc3VidHJhY3QKK3wyNi4zfAlNYWtpbmcgYSBjaGFuZ2UgaW4gbWFueSBmaWxlcworfDI2LjR8CVVzaW5nIFZpbSBmcm9tIGEgc2hlbGwgc2NyaXB0CisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzI3LnR4dHwgIFNlYXJjaCBjb21tYW5kcyBhbmQgcGF0dGVybnMKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzI1LnR4dHwgIEVkaXRpbmcgZm9ybWF0dGVkIHRleHQKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI2LjEqCVJlcGVhdGluZyB3aXRoIFZpc3VhbCBtb2RlCisKK1Zpc3VhbCBtb2RlIGlzIHZlcnkgaGFuZHkgZm9yIG1ha2luZyBhIGNoYW5nZSBpbiBhbnkgc2VxdWVuY2Ugb2YgbGluZXMuICBZb3UKK2NhbiBzZWUgdGhlIGhpZ2hsaWdodGVkIHRleHQsIHRodXMgeW91IGNhbiBjaGVjayBpZiB0aGUgY29ycmVjdCBsaW5lcyBhcmUKK2NoYW5nZWQuICBCdXQgbWFraW5nIHRoZSBzZWxlY3Rpb24gdGFrZXMgc29tZSB0eXBpbmcuICBUaGUgImd2IiBjb21tYW5kCitzZWxlY3RzIHRoZSBzYW1lIGFyZWEgYWdhaW4uICBUaGlzIGFsbG93cyB5b3UgdG8gZG8gYW5vdGhlciBvcGVyYXRpb24gb24gdGhlCitzYW1lIHRleHQuCisgICBTdXBwb3NlIHlvdSBoYXZlIHNvbWUgbGluZXMgd2hlcmUgeW91IHdhbnQgdG8gY2hhbmdlICIyMDAxIiB0byAiMjAwMiIgYW5kCisiMjAwMCIgdG8gIjIwMDEiOgorCisJVGhlIGZpbmFuY2lhbCByZXN1bHRzIGZvciAyMDAxIGFyZSBiZXR0ZXIgfgorCXRoYW4gZm9yIDIwMDAuICBUaGUgaW5jb21lIGluY3JlYXNlZCBieSA1MCUsIH4KKwlldmVuIHRob3VnaCAyMDAxIGhhZCBtb3JlIHJhaW4gdGhhbiAyMDAwLiB+CisJCQkyMDAwCQkyMDAxIH4KKwlpbmNvbWUJCTQ1LDQwMwkJNjYsMjM0IH4KKworRmlyc3QgY2hhbmdlICIyMDAxIiB0byAiMjAwMiIuICBTZWxlY3QgdGhlIGxpbmVzIGluIFZpc3VhbCBtb2RlLCBhbmQgdXNlOiA+CisKKwk6cy8yMDAxLzIwMDIvZworCitOb3cgdXNlICJndiIgdG8gcmVzZWxlY3QgdGhlIHNhbWUgdGV4dC4gIEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIHRoZSBjdXJzb3IKK2lzLiAgVGhlbiB1c2UgIjpzLzIwMDAvMjAwMS9nIiB0byBtYWtlIHRoZSBzZWNvbmQgY2hhbmdlLgorICAgT2J2aW91c2x5LCB5b3UgY2FuIHJlcGVhdCB0aGVzZSBjaGFuZ2VzIHNldmVyYWwgdGltZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI2LjIqCUFkZCBhbmQgc3VidHJhY3QKKworV2hlbiByZXBlYXRpbmcgdGhlIGNoYW5nZSBvZiBvbmUgbnVtYmVyIGludG8gYW5vdGhlciwgeW91IG9mdGVuIGhhdmUgYSBmaXhlZAorb2Zmc2V0LiAgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIG9uZSB3YXMgYWRkZWQgdG8gZWFjaCB5ZWFyLiAgSW5zdGVhZCBvZiB0eXBpbmcKK2Egc3Vic3RpdHV0ZSBjb21tYW5kIGZvciBlYWNoIHllYXIgdGhhdCBhcHBlYXJzLCB0aGUgQ1RSTC1BIGNvbW1hbmQgY2FuIGJlCit1c2VkLgorICAgVXNpbmcgdGhlIHNhbWUgdGV4dCBhcyBhYm92ZSwgc2VhcmNoIGZvciBhIHllYXI6ID4KKworCS8xOVswLTldWzAtOV1cfDIwWzAtOV1bMC05XQorCitOb3cgcHJlc3MgQ1RSTC1BLiAgVGhlIHllYXIgd2lsbCBiZSBpbmNyZWFzZWQgYnkgb25lOgorCisJVGhlIGZpbmFuY2lhbCByZXN1bHRzIGZvciAyMDAyIGFyZSBiZXR0ZXIgfgorCXRoYW4gZm9yIDIwMDAuICBUaGUgaW5jb21lIGluY3JlYXNlZCBieSA1MCUsIH4KKwlldmVuIHRob3VnaCAyMDAxIGhhZCBtb3JlIHJhaW4gdGhhbiAyMDAwLiB+CisJCQkyMDAwCQkyMDAxIH4KKwlpbmNvbWUJCTQ1LDQwMwkJNjYsMjM0IH4KKworVXNlICJuIiB0byBmaW5kIHRoZSBuZXh0IHllYXIsIGFuZCBwcmVzcyAiLiIgdG8gcmVwZWF0IHRoZSBDVFJMLUEgKCIuIiBpcyBhCitiaXQgcXVpY2tlciB0byB0eXBlKS4gIFJlcGVhdCAibiIgYW5kICIuIiBmb3IgYWxsIHllYXJzIHRoYXQgYXBwZWFyLgorICAgSGludDogc2V0IHRoZSAnaGxzZWFyY2gnIG9wdGlvbiB0byBzZWUgdGhlIG1hdGNoZXMgeW91IGFyZSBnb2luZyB0byBjaGFuZ2UsCit0aGVuIHlvdSBjYW4gbG9vayBhaGVhZCBhbmQgZG8gaXQgZmFzdGVyLgorCitBZGRpbmcgbW9yZSB0aGFuIG9uZSBjYW4gYmUgZG9uZSBieSBwcmVwZW5kaW5nIHRoZSBudW1iZXIgdG8gQ1RSTC1BLiAgU3VwcG9zZQoreW91IGhhdmUgdGhpcyBsaXN0OgorCisJMS4gIGl0ZW0gZm91ciB+CisJMi4gIGl0ZW0gZml2ZSB+CisJMy4gIGl0ZW0gc2l4IH4KKworTW92ZSB0aGUgY3Vyc29yIHRvICIxLiIgYW5kIHR5cGU6ID4KKworCTMgQ1RSTC1BCisKK1RoZSAiMS4iIHdpbGwgY2hhbmdlIHRvICI0LiIuICBBZ2FpbiwgeW91IGNhbiB1c2UgIi4iIHRvIHJlcGVhdCB0aGlzIG9uIHRoZQorb3RoZXIgbnVtYmVycy4KKworQW5vdGhlciBleGFtcGxlOgorCisJMDA2CWZvbyBiYXIgfgorCTAwNwlmb28gYmFyIH4KKworVXNpbmcgQ1RSTC1BIG9uIHRoZXNlIG51bWJlcnMgcmVzdWx0cyBpbjoKKworCTAwNwlmb28gYmFyIH4KKwkwMTAJZm9vIGJhciB+CisKKzcgcGx1cyBvbmUgaXMgMTA/ICBXaGF0IGhhcHBlbmVkIGhlcmUgaXMgdGhhdCBWaW0gcmVjb2duaXplZCAiMDA3IiBhcyBhbiBvY3RhbAorbnVtYmVyLCBiZWNhdXNlIHRoZXJlIGlzIGEgbGVhZGluZyB6ZXJvLiAgVGhpcyBub3RhdGlvbiBpcyBvZnRlbiB1c2VkIGluIEMKK3Byb2dyYW1zLiAgSWYgeW91IGRvIG5vdCB3YW50IGEgbnVtYmVyIHdpdGggbGVhZGluZyB6ZXJvcyB0byBiZSBoYW5kbGVkIGFzCitvY3RhbCwgdXNlIHRoaXM6ID4KKworCTpzZXQgbnJmb3JtYXRzLT1vY3RhbAorCitUaGUgQ1RSTC1YIGNvbW1hbmQgZG9lcyBzdWJ0cmFjdGlvbiBpbiBhIHNpbWlsYXIgd2F5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNi4zKglNYWtpbmcgYSBjaGFuZ2UgaW4gbWFueSBmaWxlcworCitTdXBwb3NlIHlvdSBoYXZlIGEgdmFyaWFibGUgY2FsbGVkICJ4X2NudCIgYW5kIHlvdSB3YW50IHRvIGNoYW5nZSBpdCB0bworInhfY291bnRlciIuICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gc2V2ZXJhbCBvZiB5b3VyIEMgZmlsZXMuICBZb3UgbmVlZCB0bworY2hhbmdlIGl0IGluIGFsbCBmaWxlcy4gIFRoaXMgaXMgaG93IHlvdSBkbyBpdC4KKyAgIFB1dCBhbGwgdGhlIHJlbGV2YW50IGZpbGVzIGluIHRoZSBhcmd1bWVudCBsaXN0OiA+CisKKwk6YXJncyAqLmMKKzwKK1RoaXMgZmluZHMgYWxsIEMgZmlsZXMgYW5kIGVkaXRzIHRoZSBmaXJzdCBvbmUuICBOb3cgeW91IGNhbiBwZXJmb3JtIGEKK3N1YnN0aXR1dGlvbiBjb21tYW5kIG9uIGFsbCB0aGVzZSBmaWxlczogPgorCisJOmFyZ2RvICVzL1w8eF9jbnRcPi94X2NvdW50ZXIvZ2UgfCB1cGRhdGUKKworVGhlICI6YXJnZG8iIGNvbW1hbmQgdGFrZXMgYW4gYXJndW1lbnQgdGhhdCBpcyBhbm90aGVyIGNvbW1hbmQuICBUaGF0IGNvbW1hbmQKK3dpbGwgYmUgZXhlY3V0ZWQgb24gYWxsIGZpbGVzIGluIHRoZSBhcmd1bWVudCBsaXN0LgorICAgVGhlICIlcyIgc3Vic3RpdHV0ZSBjb21tYW5kIHRoYXQgZm9sbG93cyB3b3JrcyBvbiBhbGwgbGluZXMuICBJdCBmaW5kcyB0aGUKK3dvcmQgInhfY250IiB3aXRoICJcPHhfY250XD4iLiAgVGhlICJcPCIgYW5kICJcPiIgYXJlIHVzZWQgdG8gbWF0Y2ggdGhlIHdob2xlCit3b3JkIG9ubHksIGFuZCBub3QgInB4X2NudCIgb3IgInhfY250MiIuCisgICBUaGUgZmxhZ3MgZm9yIHRoZSBzdWJzdGl0dXRlIGNvbW1hbmQgaW5jbHVkZSAiZyIgdG8gcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMKK29mICJ4X2NudCIgaW4gdGhlIHNhbWUgbGluZS4gIFRoZSAiZSIgZmxhZyBpcyB1c2VkIHRvIGF2b2lkIGFuIGVycm9yIG1lc3NhZ2UKK3doZW4gInhfY250IiBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGZpbGUuICBPdGhlcndpc2UgIjphcmdkbyIgd291bGQgYWJvcnQgb24KK3RoZSBmaXJzdCBmaWxlIHdoZXJlICJ4X2NudCIgd2FzIG5vdCBmb3VuZC4KKyAgIFRoZSAifCIgc2VwYXJhdGVzIHR3byBjb21tYW5kcy4gIFRoZSBmb2xsb3dpbmcgInVwZGF0ZSIgY29tbWFuZCB3cml0ZXMgdGhlCitmaWxlIG9ubHkgaWYgaXQgd2FzIGNoYW5nZWQuICBJZiBubyAieF9jbnQiIHdhcyBjaGFuZ2VkIHRvICJ4X2NvdW50ZXIiIG5vdGhpbmcKK2hhcHBlbnMuCisKK1RoZXJlIGlzIGFsc28gdGhlICI6d2luZG8iIGNvbW1hbmQsIHdoaWNoIGV4ZWN1dGVzIGl0cyBhcmd1bWVudCBpbiBhbGwKK3dpbmRvd3MuICBBbmQgIjpidWZkbyIgZXhlY3V0ZXMgaXRzIGFyZ3VtZW50IG9uIGFsbCBidWZmZXJzLiAgQmUgY2FyZWZ1bCB3aXRoCit0aGlzLCBiZWNhdXNlIHlvdSBtaWdodCBoYXZlIG1vcmUgZmlsZXMgaW4gdGhlIGJ1ZmZlciBsaXN0IHRoYW4geW91IHRoaW5rLgorQ2hlY2sgdGhpcyB3aXRoIHRoZSAiOmJ1ZmZlcnMiIGNvbW1hbmQgKG9yICI6bHMiKS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjYuNCoJVXNpbmcgVmltIGZyb20gYSBzaGVsbCBzY3JpcHQKKworU3VwcG9zZSB5b3UgaGF2ZSBhIGxvdCBvZiBmaWxlcyBpbiB3aGljaCB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIHN0cmluZworIi1wZXJzb24tIiB0byAiSm9uZXMiIGFuZCB0aGVuIHByaW50IGl0LiAgSG93IGRvIHlvdSBkbyB0aGF0PyAgT25lIHdheSBpcyB0bworZG8gYSBsb3Qgb2YgdHlwaW5nLiAgVGhlIG90aGVyIGlzIHRvIHdyaXRlIGEgc2hlbGwgc2NyaXB0IHRvIGRvIHRoZSB3b3JrLgorICAgVGhlIFZpbSBlZGl0b3IgZG9lcyBhIHN1cGVyYiBqb2IgYXMgYSBzY3JlZW4tb3JpZW50ZWQgZWRpdG9yIHdoZW4gdXNpbmcKK05vcm1hbCBtb2RlIGNvbW1hbmRzLiAgRm9yIGJhdGNoIHByb2Nlc3NpbmcsIGhvd2V2ZXIsIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGRvCitub3QgcmVzdWx0IGluIGNsZWFyLCBjb21tZW50ZWQgY29tbWFuZCBmaWxlczsgc28gaGVyZSB5b3Ugd2lsbCB1c2UgRXggbW9kZQoraW5zdGVhZC4gIFRoaXMgbW9kZSBnaXZlcyB5b3UgYSBuaWNlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgdGhhdCBtYWtlcyBpdCBlYXN5Cit0byBwdXQgaW50byBhIGJhdGNoIGZpbGUuICAoIkV4IGNvbW1hbmQiIGlzIGp1c3QgYW5vdGhlciBuYW1lIGZvciBhCitjb21tYW5kLWxpbmUgKDopIGNvbW1hbmQuKQorICAgVGhlIEV4IG1vZGUgY29tbWFuZHMgeW91IG5lZWQgYXJlIGFzIGZvbGxvd3M6ID4KKworCSVzLy1wZXJzb24tL0pvbmVzL2cKKwl3cml0ZSB0ZW1wZmlsZQorCXF1aXQKKworWW91IHB1dCB0aGVzZSBjb21tYW5kcyBpbiB0aGUgZmlsZSAiY2hhbmdlLnZpbSIuICBOb3cgdG8gcnVuIHRoZSBlZGl0b3IgaW4KK2JhdGNoIG1vZGUsIHVzZSB0aGlzIHNoZWxsIHNjcmlwdDogPgorCisJZm9yIGZpbGUgaW4gKi50eHQ7IGRvCisJICB2aW0gLWUgLXMgJGZpbGUgPCBjaGFuZ2UudmltCisJICBscHIgLXIgdGVtcGZpbGUKKwlkb25lCisKK1RoZSBmb3ItZG9uZSBsb29wIGlzIGEgc2hlbGwgY29uc3RydWN0IHRvIHJlcGVhdCB0aGUgdHdvIGxpbmVzIGluIGJldHdlZW4sCit3aGlsZSB0aGUgJGZpbGUgdmFyaWFibGUgaXMgc2V0IHRvIGEgZGlmZmVyZW50IGZpbGUgbmFtZSBlYWNoIHRpbWUuCisgICBUaGUgc2Vjb25kIGxpbmUgcnVucyB0aGUgVmltIGVkaXRvciBpbiBFeCBtb2RlICgtZSBhcmd1bWVudCkgb24gdGhlIGZpbGUKKyRmaWxlIGFuZCByZWFkcyBjb21tYW5kcyBmcm9tIHRoZSBmaWxlICJjaGFuZ2UudmltIi4gIFRoZSAtcyBhcmd1bWVudCB0ZWxscworVmltIHRvIG9wZXJhdGUgaW4gc2lsZW50IG1vZGUuICBJbiBvdGhlciB3b3JkcywgZG8gbm90IGtlZXAgb3V0cHV0dGluZyB0aGUKKzpwcm9tcHQsIG9yIGFueSBvdGhlciBwcm9tcHQgZm9yIHRoYXQgbWF0dGVyLgorICAgVGhlICJscHIgLXIgdGVtcGZpbGUiIGNvbW1hbmQgcHJpbnRzIHRoZSByZXN1bHRpbmcgInRlbXBmaWxlIiBhbmQgZGVsZXRlcworaXQgKHRoYXQncyB3aGF0IHRoZSAtciBhcmd1bWVudCBkb2VzKS4KKworCitSRUFESU5HIEZST00gU1RESU4KKworVmltIGNhbiByZWFkIHRleHQgb24gc3RhbmRhcmQgaW5wdXQuICBTaW5jZSB0aGUgbm9ybWFsIHdheSBpcyB0byByZWFkIGNvbW1hbmRzCit0aGVyZSwgeW91IG11c3QgdGVsbCBWaW0gdG8gcmVhZCB0ZXh0IGluc3RlYWQuICBUaGlzIGlzIGRvbmUgYnkgcGFzc2luZyB0aGUKKyItIiBhcmd1bWVudCBpbiBwbGFjZSBvZiBhIGZpbGUuICBFeGFtcGxlOiA+CisKKwlscyB8IHZpbSAtCisKK1RoaXMgYWxsb3dzIHlvdSB0byBlZGl0IHRoZSBvdXRwdXQgb2YgdGhlICJscyIgY29tbWFuZCwgd2l0aG91dCBmaXJzdCBzYXZpbmcKK3RoZSB0ZXh0IGluIGEgZmlsZS4KKyAgIElmIHlvdSB1c2UgdGhlIHN0YW5kYXJkIGlucHV0IHRvIHJlYWQgdGV4dCBmcm9tLCB5b3UgY2FuIHVzZSB0aGUgIi1TIgorYXJndW1lbnQgdG8gcmVhZCBhIHNjcmlwdDogPgorCisJcHJvZHVjZXIgfCB2aW0gLVMgY2hhbmdlLnZpbSAtCisKKworTk9STUFMIE1PREUgU0NSSVBUUworCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gdXNlIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGluIGEgc2NyaXB0LCB5b3UgY2FuIHVzZSBpdAorbGlrZSB0aGlzOiA+CisKKwl2aW0gLXMgc2NyaXB0IGZpbGUudHh0IC4uLgorPAorCU5vdGU6CisJIi1zIiBoYXMgYSBkaWZmZXJlbnQgbWVhbmluZyB3aGVuIGl0IGlzIHVzZWQgd2l0aG91dCAiLWUiLiAgSGVyZSBpdAorCW1lYW5zIHRvIHNvdXJjZSB0aGUgInNjcmlwdCIgYXMgTm9ybWFsIG1vZGUgY29tbWFuZHMuICBXaGVuIHVzZWQgd2l0aAorCSItZSIgaXQgbWVhbnMgdG8gYmUgc2lsZW50LCBhbmQgZG9lc24ndCB1c2UgdGhlIG5leHQgYXJndW1lbnQgYXMgYQorCWZpbGUgbmFtZS4KKworVGhlIGNvbW1hbmRzIGluICJzY3JpcHQiIGFyZSBleGVjdXRlZCBsaWtlIHlvdSB0eXBlZCB0aGVtLiAgRG9uJ3QgZm9yZ2V0IHRoYXQKK2EgbGluZSBicmVhayBpcyBpbnRlcnByZXRlZCBhcyBwcmVzc2luZyA8RW50ZXI+LiAgSW4gTm9ybWFsIG1vZGUgdGhhdCBtb3ZlcwordGhlIGN1cnNvciB0byB0aGUgbmV4dCBsaW5lLgorICAgVG8gY3JlYXRlIHRoZSBzY3JpcHQgeW91IGNhbiBlZGl0IHRoZSBzY3JpcHQgZmlsZSBhbmQgdHlwZSB0aGUgY29tbWFuZHMuCitZb3UgbmVlZCB0byBpbWFnaW5lIHdoYXQgdGhlIHJlc3VsdCB3b3VsZCBiZSwgd2hpY2ggY2FuIGJlIGEgYml0IGRpZmZpY3VsdC4KK0Fub3RoZXIgd2F5IGlzIHRvIHJlY29yZCB0aGUgY29tbWFuZHMgd2hpbGUgeW91IHBlcmZvcm0gdGhlbSBtYW51YWxseS4gIFRoaXMKK2lzIGhvdyB5b3UgZG8gdGhhdDogPgorCisJdmltIC13IHNjcmlwdCBmaWxlLnR4dCAuLi4KKworQWxsIHR5cGVkIGtleXMgd2lsbCBiZSB3cml0dGVuIHRvICJzY3JpcHQiLiAgSWYgeW91IG1ha2UgYSBzbWFsbCBtaXN0YWtlIHlvdQorY2FuIGp1c3QgY29udGludWUgYW5kIHJlbWVtYmVyIHRvIGVkaXQgdGhlIHNjcmlwdCBsYXRlci4KKyAgIFRoZSAiLXciIGFyZ3VtZW50IGFwcGVuZHMgdG8gYW4gZXhpc3Rpbmcgc2NyaXB0LiAgVGhhdCBpcyBnb29kIHdoZW4geW91Cit3YW50IHRvIHJlY29yZCB0aGUgc2NyaXB0IGJpdCBieSBiaXQuICBJZiB5b3Ugd2FudCB0byBzdGFydCBmcm9tIHNjcmF0Y2ggYW5kCitzdGFydCBhbGwgb3ZlciwgdXNlIHRoZSAiLVciIGFyZ3VtZW50LiAgSXQgb3ZlcndyaXRlcyBhbnkgZXhpc3RpbmcgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8yNy50eHR8ICBTZWFyY2ggY29tbWFuZHMgYW5kIHBhdHRlcm5zCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzI3LnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8yNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmYjE5MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8yNy50eHQKQEAgLTAsMCArMSw1NjMgQEAKKyp1c3JfMjcudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBPY3QgMjgKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSBTZWFyY2ggY29tbWFuZHMgYW5kIHBhdHRlcm5zCisKKworSW4gY2hhcHRlciAzIGEgZmV3IHNpbXBsZSBzZWFyY2ggcGF0dGVybnMgd2VyZSBtZW50aW9uZWQgfDAzLjl8LiAgVmltIGNhbiBkbworbXVjaCBtb3JlIGNvbXBsZXggc2VhcmNoZXMuICBUaGlzIGNoYXB0ZXIgZXhwbGFpbnMgdGhlIG1vc3Qgb2Z0ZW4gdXNlZCBvbmVzLgorQSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOiB8cGF0dGVybnwKKworfDI3LjF8CUlnbm9yaW5nIGNhc2UKK3wyNy4yfAlXcmFwcGluZyBhcm91bmQgdGhlIGZpbGUgZW5kCit8MjcuM3wJT2Zmc2V0cworfDI3LjR8CU1hdGNoaW5nIG11bHRpcGxlIHRpbWVzCit8MjcuNXwJQWx0ZXJuYXRpdmVzCit8MjcuNnwJQ2hhcmFjdGVyIHJhbmdlcworfDI3Ljd8CUNoYXJhY3RlciBjbGFzc2VzCit8MjcuOHwJTWF0Y2hpbmcgYSBsaW5lIGJyZWFrCit8MjcuOXwJRXhhbXBsZXMKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMjgudHh0fCAgRm9sZGluZworIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMjYudHh0fCAgUmVwZWF0aW5nCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNy4xKglJZ25vcmluZyBjYXNlCisKK0J5IGRlZmF1bHQsIFZpbSdzIHNlYXJjaGVzIGFyZSBjYXNlIHNlbnNpdGl2ZS4gIFRoZXJlZm9yZSwgImluY2x1ZGUiLAorIklOQ0xVREUiLCBhbmQgIkluY2x1ZGUiIGFyZSB0aHJlZSBkaWZmZXJlbnQgd29yZHMgYW5kIGEgc2VhcmNoIHdpbGwgbWF0Y2gKK29ubHkgb25lIG9mIHRoZW0uCisgICBOb3cgc3dpdGNoIG9uIHRoZSAnaWdub3JlY2FzZScgb3B0aW9uOiA+CisKKwk6c2V0IGlnbm9yZWNhc2UKKworU2VhcmNoIGZvciAiaW5jbHVkZSIgYWdhaW4sIGFuZCBub3cgaXQgd2lsbCBtYXRjaCAiSW5jbHVkZSIsICJJTkNMVURFIiBhbmQKKyJJbkNsVURlIi4gIChTZXQgdGhlICdobHNlYXJjaCcgb3B0aW9uIHRvIHF1aWNrbHkgc2VlIHdoZXJlIGEgcGF0dGVybgorbWF0Y2hlcy4pCisgICBZb3UgY2FuIHN3aXRjaCB0aGlzIG9mZiBhZ2FpbiB3aXRoOiA+CisKKwk6c2V0IG5vaWdub3JlY2FzZQorCitCdXQgbGV0cyBrZWVwIGl0IHNldCwgYW5kIHNlYXJjaCBmb3IgIklOQ0xVREUiLiAgSXQgd2lsbCBtYXRjaCBleGFjdGx5IHRoZQorc2FtZSB0ZXh0IGFzICJpbmNsdWRlIiBkaWQuICBOb3cgc2V0IHRoZSAnc21hcnRjYXNlJyBvcHRpb246ID4KKworCTpzZXQgaWdub3JlY2FzZSBzbWFydGNhc2UKKworSWYgeW91IGhhdmUgYSBwYXR0ZXJuIHdpdGggYXQgbGVhc3Qgb25lIHVwcGVyY2FzZSBjaGFyYWN0ZXIsIHRoZSBzZWFyY2gKK2JlY29tZXMgY2FzZSBzZW5zaXRpdmUuICBUaGUgaWRlYSBpcyB0aGF0IHlvdSBkaWRuJ3QgaGF2ZSB0byB0eXBlIHRoYXQKK3VwcGVyY2FzZSBjaGFyYWN0ZXIsIHNvIHlvdSBtdXN0IGhhdmUgZG9uZSBpdCBiZWNhdXNlIHlvdSB3YW50ZWQgY2FzZSB0bworbWF0Y2guICBUaGF0J3Mgc21hcnQhCisgICAgV2l0aCB0aGVzZSB0d28gb3B0aW9ucyBzZXQgeW91IGZpbmQgdGhlIGZvbGxvd2luZyBtYXRjaGVzOgorCisJcGF0dGVybgkJCW1hdGNoZXMJfgorCXdvcmQJCQl3b3JkLCBXb3JkLCBXT1JELCBXb1JkLCBldGMuCisJV29yZAkJCVdvcmQKKwlXT1JECQkJV09SRAorCVdvUmQJCQlXb1JkCisKKworQ0FTRSBJTiBPTkUgUEFUVEVSTgorCitJZiB5b3Ugd2FudCB0byBpZ25vcmUgY2FzZSBmb3Igb25lIHNwZWNpZmljIHBhdHRlcm4sIHlvdSBjYW4gZG8gdGhpcyBieQorcHJlcGVuZGluZyB0aGUgIlxjIiBzdHJpbmcuICBVc2luZyAiXEMiIHdpbGwgbWFrZSB0aGUgcGF0dGVybiB0byBtYXRjaCBjYXNlLgorVGhpcyBvdmVycnVsZXMgdGhlICdpZ25vcmVjYXNlJyBhbmQgJ3NtYXJ0Y2FzZScgb3B0aW9ucywgd2hlbiAiXGMiIG9yICJcQyIgaXMKK3VzZWQgdGhlaXIgdmFsdWUgZG9lc24ndCBtYXR0ZXIuCisKKwlwYXR0ZXJuCQkJbWF0Y2hlcwl+CisJXEN3b3JkCQkJd29yZAorCVxDV29yZAkJCVdvcmQKKwlcY3dvcmQJCQl3b3JkLCBXb3JkLCBXT1JELCBXb1JkLCBldGMuCisJXGNXb3JkCQkJd29yZCwgV29yZCwgV09SRCwgV29SZCwgZXRjLgorCitBIGJpZyBhZHZhbnRhZ2Ugb2YgdXNpbmcgIlxjIiBhbmQgIlxDIiBpcyB0aGF0IGl0IHN0aWNrcyB3aXRoIHRoZSBwYXR0ZXJuLgorVGh1cyBpZiB5b3UgcmVwZWF0IGEgcGF0dGVybiBmcm9tIHRoZSBzZWFyY2ggaGlzdG9yeSwgdGhlIHNhbWUgd2lsbCBoYXBwZW4sIG5vCittYXR0ZXIgaWYgJ2lnbm9yZWNhc2UnIG9yICdzbWFydGNhc2UnIHdhcyBjaGFuZ2VkLgorCisJTm90ZToKKwlUaGUgdXNlIG9mICJcIiBpdGVtcyBpbiBzZWFyY2ggcGF0dGVybnMgZGVwZW5kcyBvbiB0aGUgJ21hZ2ljJyBvcHRpb24uCisJSW4gdGhpcyBjaGFwdGVycyB3ZSB3aWxsIGFzc3VtZSAnbWFnaWMnIGlzIG9uLCBiZWNhdXNlIHRoYXQgaXMgdGhlCisJc3RhbmRhcmQgYW5kIHJlY29tbWVuZGVkIHNldHRpbmcuICBJZiB5b3Ugd291bGQgY2hhbmdlICdtYWdpYycsIG1hbnkKKwlzZWFyY2ggcGF0dGVybnMgd291bGQgc3VkZGVubHkgYmVjb21lIGludmFsaWQuCisKKwlOb3RlOgorCUlmIHlvdXIgc2VhcmNoIHRha2VzIG11Y2ggbG9uZ2VyIHRoYW4geW91IGV4cGVjdGVkLCB5b3UgY2FuIGludGVycnVwdAorCWl0IHdpdGggQ1RSTC1DIG9uIFVuaXggYW5kICBDVFJMLUJyZWFrIG9uIE1TLURPUyBhbmQgTVMtV2luZG93cy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjcuMioJV3JhcHBpbmcgYXJvdW5kIHRoZSBmaWxlIGVuZAorCitCeSBkZWZhdWx0LCBhIGZvcndhcmQgc2VhcmNoIHN0YXJ0cyBzZWFyY2hpbmcgZm9yIHRoZSBnaXZlbiBzdHJpbmcgYXQgdGhlCitjdXJyZW50IGN1cnNvciBsb2NhdGlvbi4gIEl0IHRoZW4gcHJvY2VlZHMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gIElmIGl0IGhhcworbm90IGZvdW5kIHRoZSBzdHJpbmcgYnkgdGhhdCB0aW1lLCBpdCBzdGFydHMgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBzZWFyY2hlcworZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgdG8gdGhlIGN1cnNvciBsb2NhdGlvbi4KKyAgIEtlZXAgaW4gbWluZCB0aGF0IHdoZW4gcmVwZWF0aW5nIHRoZSAibiIgY29tbWFuZCB0byBzZWFyY2ggZm9yIHRoZSBuZXh0CittYXRjaCwgeW91IGV2ZW50dWFsbHkgZ2V0IGJhY2sgdG8gdGhlIGZpcnN0IG1hdGNoLiAgSWYgeW91IGRvbid0IG5vdGljZSB0aGlzCit5b3Uga2VlcCBzZWFyY2hpbmcgZm9yZXZlciEgIFRvIGdpdmUgeW91IGEgaGludCwgVmltIGRpc3BsYXlzIHRoaXMgbWVzc2FnZToKKworCXNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCB+CisKK0lmIHlvdSB1c2UgdGhlICI/IiBjb21tYW5kLCB0byBzZWFyY2ggaW4gdGhlIG90aGVyIGRpcmVjdGlvbiwgeW91IGdldCB0aGlzCittZXNzYWdlOgorCisJc2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIH4KKworU3RpbGwsIHlvdSBkb24ndCBrbm93IHdoZW4geW91IGFyZSBiYWNrIGF0IHRoZSBmaXJzdCBtYXRjaC4gIE9uZSB3YXkgdG8gc2VlCit0aGlzIGlzIGJ5IHN3aXRjaGluZyBvbiB0aGUgJ3J1bGVyJyBvcHRpb246ID4KKworCTpzZXQgcnVsZXIKKworVmltIHdpbGwgZGlzcGxheSB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBsb3dlciByaWdodGhhbmQgY29ybmVyIG9mIHRoZQord2luZG93IChpbiB0aGUgc3RhdHVzIGxpbmUgaWYgdGhlcmUgaXMgb25lKS4gIEl0IGxvb2tzIGxpa2UgdGhpczoKKworCTEwMSwyOSAgICAgICA4NCUgfgorCitUaGUgZmlyc3QgbnVtYmVyIGlzIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgY3Vyc29yLiAgUmVtZW1iZXIgdGhlIGxpbmUgbnVtYmVyCit3aGVyZSB5b3Ugc3RhcnRlZCwgc28gdGhhdCB5b3UgY2FuIGNoZWNrIGlmIHlvdSBwYXNzZWQgdGhpcyBwb3NpdGlvbiBhZ2Fpbi4KKworCitOT1QgV1JBUFBJTkcKKworVG8gdHVybiBvZmYgc2VhcmNoIHdyYXBwaW5nLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6c2V0IG5vd3JhcHNjYW4KKworTm93IHdoZW4gdGhlIHNlYXJjaCBoaXRzIHRoZSBlbmQgb2YgdGhlIGZpbGUsIGFuIGVycm9yIG1lc3NhZ2UgZGlzcGxheXM6CisKKwlFMzg1OiBzZWFyY2ggaGl0IEJPVFRPTSB3aXRob3V0IG1hdGNoIGZvcjogZm9yZXZlciB+CisKK1RodXMgeW91IGNhbiBmaW5kIGFsbCBtYXRjaGVzIGJ5IGdvaW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsZSB3aXRoICJnZyIgYW5kCitrZWVwIHNlYXJjaGluZyB1bnRpbCB5b3Ugc2VlIHRoaXMgbWVzc2FnZS4KKyAgIElmIHlvdSBzZWFyY2ggaW4gdGhlIG90aGVyIGRpcmVjdGlvbiwgdXNpbmcgIj8iLCB5b3UgZ2V0OgorCisJRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6IGZvcmV2ZXIgfgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNy4zKglPZmZzZXRzCisKK0J5IGRlZmF1bHQsIHRoZSBzZWFyY2ggY29tbWFuZCBsZWF2ZXMgdGhlIGN1cnNvciBwb3NpdGlvbmVkIG9uIHRoZSBiZWdpbm5pbmcKK29mIHRoZSBwYXR0ZXJuLiAgWW91IGNhbiB0ZWxsIFZpbSB0byBsZWF2ZSBpdCBzb21lIG90aGVyIHBsYWNlIGJ5IHNwZWNpZnlpbmcKK2FuIG9mZnNldC4gIEZvciB0aGUgZm9yd2FyZCBzZWFyY2ggY29tbWFuZCAiLyIsIHRoZSBvZmZzZXQgaXMgc3BlY2lmaWVkIGJ5CithcHBlbmRpbmcgYSBzbGFzaCAoLykgYW5kIHRoZSBvZmZzZXQ6ID4KKworCS9kZWZhdWx0LzIKKworVGhpcyBjb21tYW5kIHNlYXJjaGVzIGZvciB0aGUgcGF0dGVybiAiZGVmYXVsdCIgYW5kIHRoZW4gbW92ZXMgdG8gdGhlCitiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCBsaW5lIHBhc3QgdGhlIHBhdHRlcm4uICBVc2luZyB0aGlzIGNvbW1hbmQgb24gdGhlCitwYXJhZ3JhcGggYWJvdmUsIFZpbSBmaW5kcyB0aGUgd29yZCAiZGVmYXVsdCIgaW4gdGhlIGZpcnN0IGxpbmUuICBUaGVuIHRoZQorY3Vyc29yIGlzIG1vdmVkIHR3byBsaW5lcyBkb3duIGFuZCBsYW5kcyBvbiAiYW4gb2Zmc2V0Ii4KKworSWYgdGhlIG9mZnNldCBpcyBhIHNpbXBsZSBudW1iZXIsIHRoZSBjdXJzb3Igd2lsbCBiZSBwbGFjZWQgYXQgdGhlIGJlZ2lubmluZworb2YgdGhlIGxpbmUgdGhhdCBtYW55IGxpbmVzIGZyb20gdGhlIG1hdGNoLiAgVGhlIG9mZnNldCBudW1iZXIgY2FuIGJlIHBvc2l0aXZlCitvciBuZWdhdGl2ZS4gIElmIGl0IGlzIHBvc2l0aXZlLCB0aGUgY3Vyc29yIG1vdmVzIGRvd24gdGhhdCBtYW55IGxpbmVzOyBpZgorbmVnYXRpdmUsIGl0IG1vdmVzIHVwLgorCisKK0NIQVJBQ1RFUiBPRkZTRVRTCisKK1RoZSAiZSIgb2Zmc2V0IGluZGljYXRlcyBhbiBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBtYXRjaC4gIEl0IG1vdmVzIHRoZQorY3Vyc29yIG9udG8gdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBtYXRjaC4gIFRoZSBjb21tYW5kOiA+CisKKwkvY29uc3QvZQorCitwdXRzIHRoZSBjdXJzb3Igb24gdGhlICJ0IiBvZiAiY29uc3QiLgorICAgRnJvbSB0aGF0IHBvc2l0aW9uLCBhZGRpbmcgYSBudW1iZXIgbW92ZXMgZm9yd2FyZCB0aGF0IG1hbnkgY2hhcmFjdGVycy4KK1RoaXMgY29tbWFuZCBtb3ZlcyB0byB0aGUgY2hhcmFjdGVyIGp1c3QgYWZ0ZXIgdGhlIG1hdGNoOiA+CisKKwkvY29uc3QvZSsxCisKK0EgcG9zaXRpdmUgbnVtYmVyIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHJpZ2h0LCBhIG5lZ2F0aXZlIG51bWJlciBtb3ZlcyBpdCB0bwordGhlIGxlZnQuICBGb3IgZXhhbXBsZTogPgorCisJL2NvbnN0L2UtMQorCittb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSAicyIgb2YgImNvbnN0Ii4KKworSWYgdGhlIG9mZnNldCBiZWdpbnMgd2l0aCAiYiIsIHRoZSBjdXJzb3IgbW92ZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKK3BhdHRlcm4uICBUaGF0J3Mgbm90IHZlcnkgdXNlZnVsLCBzaW5jZSBsZWF2aW5nIG91dCB0aGUgImIiIGRvZXMgdGhlIHNhbWUKK3RoaW5nLiAgSXQgZG9lcyBnZXQgdXNlZnVsIHdoZW4gYSBudW1iZXIgaXMgYWRkZWQgb3Igc3VidHJhY3RlZC4gIFRoZSBjdXJzb3IKK3RoZW4gZ29lcyBmb3J3YXJkIG9yIGJhY2t3YXJkIHRoYXQgbWFueSBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGU6ID4KKworCS9jb25zdC9iKzIKKworTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYXRjaCBhbmQgdGhlbiB0d28gY2hhcmFjdGVycyB0byB0aGUKK3JpZ2h0LiAgVGh1cyBpdCBsYW5kcyBvbiB0aGUgIm4iLgorCisKK1JFUEVBVElORworCitUbyByZXBlYXQgc2VhcmNoaW5nIGZvciB0aGUgcHJldmlvdXNseSB1c2VkIHNlYXJjaCBwYXR0ZXJuLCBidXQgd2l0aCBhCitkaWZmZXJlbnQgb2Zmc2V0LCBsZWF2ZSBvdXQgdGhlIHBhdHRlcm46ID4KKworCS90aGF0CisJLy9lCisKK0lzIGVxdWFsIHRvOiA+CisKKwkvdGhhdC9lCisKK1RvIHJlcGVhdCB3aXRoIHRoZSBzYW1lIG9mZnNldDogPgorCisJLworCisibiIgZG9lcyB0aGUgc2FtZSB0aGluZy4gIFRvIHJlcGVhdCB3aGlsZSByZW1vdmluZyBhIHByZXZpb3VzbHkgdXNlZCBvZmZzZXQ6ID4KKworCS8vCisKKworU0VBUkNISU5HIEJBQ0tXQVJEUworCitUaGUgIj8iIGNvbW1hbmQgdXNlcyBvZmZzZXRzIGluIHRoZSBzYW1lIHdheSwgYnV0IHlvdSBtdXN0IHVzZSAiPyIgdG8gc2VwYXJhdGUKK3RoZSBvZmZzZXQgZnJvbSB0aGUgcGF0dGVybiwgaW5zdGVhZCBvZiAiLyI6ID4KKworCT9jb25zdD9lLTIKKworVGhlICJiIiBhbmQgImUiIGtlZXAgdGhlaXIgbWVhbmluZywgdGhleSBkb24ndCBjaGFuZ2UgZGlyZWN0aW9uIHdpdGggdGhlIHVzZQorb2YgIj8iLgorCisKK1NUQVJUIFBPU0lUSU9OCisKK1doZW4gc3RhcnRpbmcgYSBzZWFyY2gsIGl0IG5vcm1hbGx5IHN0YXJ0cyBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uLiAgV2hlbiB5b3UKK3NwZWNpZnkgYSBsaW5lIG9mZnNldCwgdGhpcyBjYW4gY2F1c2UgdHJvdWJsZS4gIEZvciBleGFtcGxlOiA+CisKKwkvY29uc3QvLTIKKworVGhpcyBmaW5kcyB0aGUgbmV4dCB3b3JkICJjb25zdCIgYW5kIHRoZW4gbW92ZXMgdHdvIGxpbmVzIHVwLiAgSWYgeW91Cit1c2UgIm4iIHRvIHNlYXJjaCBhZ2FpbiwgVmltIGNvdWxkIHN0YXJ0IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCBmaW5kIHRoZSBzYW1lCisiY29uc3QiIG1hdGNoLiAgVGhlbiB1c2luZyB0aGUgb2Zmc2V0IGFnYWluLCB5b3Ugd291bGQgYmUgYmFjayB3aGVyZSB5b3Ugc3RhcnRlZC4KK1lvdSB3b3VsZCBiZSBzdHVjayEKKyAgIEl0IGNvdWxkIGJlIHdvcnNlOiBTdXBwb3NlIHRoZXJlIGlzIGFub3RoZXIgbWF0Y2ggd2l0aCAiY29uc3QiIGluIHRoZSBuZXh0CitsaW5lLiAgVGhlbiByZXBlYXRpbmcgdGhlIGZvcndhcmQgc2VhcmNoIHdvdWxkIGZpbmQgdGhpcyBtYXRjaCBhbmQgbW92ZSB0d28KK2xpbmVzIHVwLiAgVGh1cyB5b3Ugd291bGQgYWN0dWFsbHkgbW92ZSB0aGUgY3Vyc29yIGJhY2shCisKK1doZW4geW91IHNwZWNpZnkgYSBjaGFyYWN0ZXIgb2Zmc2V0LCBWaW0gd2lsbCBjb21wZW5zYXRlIGZvciB0aGlzLiAgVGh1cyB0aGUKK3NlYXJjaCBzdGFydHMgYSBmZXcgY2hhcmFjdGVycyBmb3J3YXJkIG9yIGJhY2t3YXJkLCBzbyB0aGF0IHRoZSBzYW1lIG1hdGNoCitpc24ndCBmb3VuZCBhZ2Fpbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjcuNCoJTWF0Y2hpbmcgbXVsdGlwbGUgdGltZXMKKworVGhlICIqIiBpdGVtIHNwZWNpZmllcyB0aGF0IHRoZSBpdGVtIGJlZm9yZSBpdCBjYW4gbWF0Y2ggYW55IG51bWJlciBvZiB0aW1lcy4KK1RodXM6ID4KKworCS9hKgorCittYXRjaGVzICJhIiwgImFhIiwgImFhYSIsIGV0Yy4gIEJ1dCBhbHNvICIiICh0aGUgZW1wdHkgc3RyaW5nKSwgYmVjYXVzZSB6ZXJvCit0aW1lcyBpcyBpbmNsdWRlZC4KKyAgIFRoZSAiKiIgb25seSBhcHBsaWVzIHRvIHRoZSBpdGVtIGRpcmVjdGx5IGJlZm9yZSBpdC4gIFRodXMgImFiKiIgbWF0Y2hlcworImEiLCAiYWIiLCAiYWJiIiwgImFiYmIiLCBldGMuICBUbyBtYXRjaCBhIHdob2xlIHN0cmluZyBtdWx0aXBsZSB0aW1lcywgaXQKK211c3QgYmUgZ3JvdXBlZCBpbnRvIG9uZSBpdGVtLiAgVGhpcyBpcyBkb25lIGJ5IHB1dHRpbmcgIlwoIiBiZWZvcmUgaXQgYW5kCisiXCkiIGFmdGVyIGl0LiAgVGh1cyB0aGlzIGNvbW1hbmQ6ID4KKworCS9cKGFiXCkqCisKK01hdGNoZXM6ICJhYiIsICJhYmFiIiwgImFiYWJhYiIsIGV0Yy4gIEFuZCBhbHNvICIiLgorCitUbyBhdm9pZCBtYXRjaGluZyB0aGUgZW1wdHkgc3RyaW5nLCB1c2UgIlwrIi4gIFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGl0ZW0KK21hdGNoIG9uZSBvciBtb3JlIHRpbWVzLiA+CisKKwkvYWJcKworCitNYXRjaGVzICJhYiIsICJhYmIiLCAiYWJiYiIsIGV0Yy4gIEl0IGRvZXMgbm90IG1hdGNoICJhIiB3aGVuIG5vICJiIiBmb2xsb3dzLgorCitUbyBtYXRjaCBhbiBvcHRpb25hbCBpdGVtLCB1c2UgIlw9Ii4gIEV4YW1wbGU6ID4KKworCS9mb2xkZXJzXD0KKworTWF0Y2hlcyAiZm9sZGVyIiBhbmQgImZvbGRlcnMiLgorCisKK1NQRUNJRklDIENPVU5UUworCitUbyBtYXRjaCBhIHNwZWNpZmljIG51bWJlciBvZiBpdGVtcyB1c2UgdGhlIGZvcm0gIlx7bixtfSIuICAibiIgYW5kICJtIiBhcmUKK251bWJlcnMuICBUaGUgaXRlbSBiZWZvcmUgaXQgd2lsbCBiZSBtYXRjaGVkICJuIiB0byAibSIgdGltZXMgfGluY2x1c2l2ZXwuCitFeGFtcGxlOiA+CisKKwkvYWJcezMsNX0KKworbWF0Y2hlcyAiYWJiYiIsICJhYmJiYiIgYW5kICJhYmJiYmIiLgorICBXaGVuICJuIiBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB6ZXJvLiAgV2hlbiAibSIgaXMgb21pdHRlZCBpdCBkZWZhdWx0cwordG8gaW5maW5pdHkuICBXaGVuICIsbSIgaXMgb21pdHRlZCwgaXQgbWF0Y2hlcyBleGFjdGx5ICJuIiB0aW1lcy4KK0V4YW1wbGVzOgorCisJcGF0dGVybgkJbWF0Y2ggY291bnQgfgorCVx7LDR9CQkwLCAxLCAyLCAzIG9yIDQKKwlcezMsfQkJMywgNCwgNSwgZXRjLgorCVx7MCwxfQkJMCBvciAxLCBzYW1lIGFzIFw9CisJXHswLH0JCTAgb3IgbW9yZSwgc2FtZSBhcyAqCisJXHsxLH0JCTEgb3IgbW9yZSwgc2FtZSBhcyBcKworCVx7M30JCTMKKworCitNQVRDSElORyBBUyBMSVRUTEUgQVMgUE9TU0lCTEUKKworVGhlIGl0ZW1zIHNvIGZhciBtYXRjaCBhcyBtYW55IGNoYXJhY3RlcnMgYXMgdGhleSBjYW4gZmluZC4gIFRvIG1hdGNoIGFzIGZldworYXMgcG9zc2libGUsIHVzZSAiXHstbixtfSIuICBJdCB3b3JrcyB0aGUgc2FtZSBhcyAiXHtuLG19IiwgZXhjZXB0IHRoYXQgdGhlCittaW5pbWFsIGFtb3VudCBwb3NzaWJsZSBpcyB1c2VkLgorICAgRm9yIGV4YW1wbGUsIHVzZTogPgorCisJL2FiXHstMSwzfQorCitXaWxsIG1hdGNoICJhYiIgaW4gImFiYmIiLiAgQWN0dWFsbHksIGl0IHdpbGwgbmV2ZXIgbWF0Y2ggbW9yZSB0aGFuIG9uZSBiLAorYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gdG8gbWF0Y2ggbW9yZS4gIEl0IHJlcXVpcmVzIHNvbWV0aGluZyBlbHNlIHRvIGZvcmNlCitpdCB0byBtYXRjaCBtb3JlIHRoYW4gdGhlIGxvd2VyIGxpbWl0LgorICAgVGhlIHNhbWUgcnVsZXMgYXBwbHkgdG8gcmVtb3ZpbmcgIm4iIGFuZCAibSIuICBJdCdzIGV2ZW4gcG9zc2libGUgdG8gcmVtb3ZlCitib3RoIG9mIHRoZSwgcmVzdWx0aW5nIGluICJcey19Ii4gIFRoaXMgbWF0Y2hlcyB0aGUgaXRlbSBiZWZvcmUgaXQgemVybyBvcgorbW9yZSB0aW1lcywgYXMgZmV3IGFzIHBvc3NpYmxlLiAgVGhlIGl0ZW0gYnkgaXRzZWxmIGFsd2F5cyBtYXRjaCB6ZXJvIHRpbWVzLgorSXQgaXMgdXNlZnVsIHdoZW4gY29tYmluZWQgd2l0aCBzb21ldGhpbmcgZWxzZS4gIEV4YW1wbGU6ID4KKworCS9hLlx7LX1iCisKK1RoaXMgbWF0Y2hlcyAiYXhiIiBpbiAiYXhieGIiLiAgSWYgdGhpcyBwYXR0ZXJuIHdvdWxkIGJlIHVzZWQ6ID4KKworCS9hLipiCisKK0l0IHdvdWxkIHRyeSB0byBtYXRjaCBhcyBtYW55IGNoYXJhY3RlcnMgYXMgcG9zc2libGUgd2l0aCAiLioiLCB0aHVzIGl0CittYXRjaGVzICJheGJ4YiIgYXMgYSB3aG9sZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjcuNSoJQWx0ZXJuYXRpdmVzCisKK1RoZSAib3IiIG9wZXJhdG9yIGluIGEgcGF0dGVybiBpcyAiXHwiLiAgRXhhbXBsZTogPgorCisJL2Zvb1x8YmFyCisKK1RoaXMgbWF0Y2hlcyAiZm9vIiBvciAiYmFyIi4gIE1vcmUgYWx0ZXJuYXRpdmVzIGNhbiBiZSBjb25jYXRlbmF0ZWQ6ID4KKworCS9vbmVcfHR3b1x8dGhyZWUKKworTWF0Y2hlcyAib25lIiwgInR3byIgYW5kICJ0aHJlZSIuCisgICBUbyBtYXRjaCBtdWx0aXBsZSB0aW1lcywgdGhlIHdob2xlIHRoaW5nIG11c3QgYmUgcGxhY2VkIGluICJcKCIgYW5kICJcKSI6ID4KKworCS9cKGZvb1x8YmFyXClcKworCitUaGlzIG1hdGNoZXMgImZvbyIsICJmb29iYXIiLCAiZm9vZm9vIiwgImJhcmZvb2JhciIsIGV0Yy4KKyAgIEFub3RoZXIgZXhhbXBsZTogPgorCisJL2VuZFwoaWZcfHdoaWxlXHxmb3JcKQorCitUaGlzIG1hdGNoZXMgImVuZGlmIiwgImVuZHdoaWxlIiBhbmQgImVuZGZvciIuCisKK0EgcmVsYXRlZCBpdGVtIGlzICJcJiIuICBUaGlzIHJlcXVpcmVzIHRoYXQgYm90aCBhbHRlcm5hdGl2ZXMgbWF0Y2ggaW4gdGhlCitzYW1lIHBsYWNlLiAgVGhlIHJlc3VsdGluZyBtYXRjaCB1c2VzIHRoZSBsYXN0IGFsdGVybmF0aXZlLiAgRXhhbXBsZTogPgorCisJL2ZvcmV2ZXJcJi4uLgorCitUaGlzIG1hdGNoZXMgImZvciIgaW4gImZvcmV2ZXIiLiAgSXQgd2lsbCBub3QgbWF0Y2ggImZvcnR1aW4iLCBmb3IgZXhhbXBsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjcuNioJQ2hhcmFjdGVyIHJhbmdlcworCitUbyBtYXRjaCAiYSIsICJiIiBvciAiYyIgeW91IGNvdWxkIHVzZSAiL2FcfGJcfGMiLiAgV2hlbiB5b3Ugd2FudCB0byBtYXRjaCBhbGwKK2xldHRlcnMgZnJvbSAiYSIgdG8gInoiIHRoaXMgZ2V0cyB2ZXJ5IGxvbmcuICBUaGVyZSBpcyBhIHNob3J0ZXIgbWV0aG9kOiA+CisKKwkvW2Etel0KKworVGhlIFtdIGNvbnN0cnVjdCBtYXRjaGVzIGEgc2luZ2xlIGNoYXJhY3Rlci4gIEluc2lkZSB5b3Ugc3BlY2lmeSB3aGljaAorY2hhcmFjdGVycyB0byBtYXRjaC4gIFlvdSBjYW4gaW5jbHVkZSBhIGxpc3Qgb2YgY2hhcmFjdGVycywgbGlrZSB0aGlzOiA+CisKKwkvWzAxMjM0NTY3ODlhYmNkZWZdCisKK1RoaXMgd2lsbCBtYXRjaCBhbnkgb2YgdGhlIGNoYXJhY3RlcnMgaW5jbHVkZWQuICBGb3IgY29uc2VjdXRpdmUgY2hhcmFjdGVycworeW91IGNhbiBzcGVjaWZ5IHRoZSByYW5nZS4gICIwLTMiIHN0YW5kcyBmb3IgIjAxMjMiLiAgIncteiIgc3RhbmRzIGZvciAid3h5eiIuCitUaHVzIHRoZSBzYW1lIGNvbW1hbmQgYXMgYWJvdmUgY2FuIGJlIHNob3J0ZW5lZCB0bzogPgorCisJL1swLTlhLWZdCisKK1RvIG1hdGNoIHRoZSAiLSIgY2hhcmFjdGVyIGl0c2VsZiBtYWtlIGl0IHRoZSBmaXJzdCBvciBsYXN0IG9uZSBpbiB0aGUgcmFuZ2UuCitUaGVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGFjY2VwdGVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVzZSB0aGVtIGluc2lkZSBhCitbXSByYW5nZSAodGhleSBjYW4gYWN0dWFsbHkgYmUgdXNlZCBhbnl3aGVyZSBpbiB0aGUgc2VhcmNoIHBhdHRlcm4pOgorCisJXGUJPEVzYz4KKwlcdAk8VGFiPgorCVxyCTxDUj4KKwlcYgk8QlM+CisKK1RoZXJlIGFyZSBhIGZldyBtb3JlIHNwZWNpYWwgY2FzZXMgZm9yIFtdIHJhbmdlcywgc2VlIHwvW118IGZvciB0aGUgd2hvbGUKK3N0b3J5LgorCisKK0NPTVBMRU1FTlRFRCBSQU5HRQorCitUbyBhdm9pZCBtYXRjaGluZyBhIHNwZWNpZmljIGNoYXJhY3RlciwgdXNlICJeIiBhdCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlLgorVGhlIFtdIGl0ZW0gdGhlbiBtYXRjaGVzIGV2ZXJ5dGhpbmcgYnV0IHRoZSBjaGFyYWN0ZXJzIGluY2x1ZGVkLiAgRXhhbXBsZTogPgorCisJLyJbXiJdKiIKKzwKKwkgIgkgIGEgZG91YmxlIHF1b3RlCisJICBbXiJdCSAgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIGRvdWJsZSBxdW90ZQorCSAgICAgICoJICBhcyBtYW55IGFzIHBvc3NpYmxlCisJICAgICAgICIgIGEgZG91YmxlIHF1b3RlIGFnYWluCisKK1RoaXMgbWF0Y2hlcyAiZm9vIiBhbmQgIjMheCIsIGluY2x1ZGluZyB0aGUgZG91YmxlIHF1b3Rlcy4KKworCitQUkVERUZJTkVEIFJBTkdFUworCitBIG51bWJlciBvZiByYW5nZXMgYXJlIHVzZWQgdmVyeSBvZnRlbi4gIFZpbSBwcm92aWRlcyBhIHNob3J0Y3V0IGZvciB0aGVzZS4KK0ZvciBleGFtcGxlOiA+CisKKwkvXGEKKworRmluZHMgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzLiAgVGhpcyBpcyBlcXVhbCB0byB1c2luZyAiL1thLXpBLVpdIi4gIEhlcmUgYXJlIGEKK2ZldyBtb3JlIG9mIHRoZXNlOgorCisJaXRlbQltYXRjaGVzCQkJZXF1aXZhbGVudCB+CisJXGQJZGlnaXQJCQlbMC05XQorCVxECW5vbi1kaWdpdAkJW14wLTldCisJXHgJaGV4IGRpZ2l0CQlbMC05YS1mQS1GXQorCVxYCW5vbi1oZXggZGlnaXQJCVteMC05YS1mQS1GXQorCVxzCXdoaXRlIHNwYWNlCQlbIAldICAgICAoPFRhYj4gYW5kIDxTcGFjZT4pCisJXFMJbm9uLXdoaXRlIGNoYXJhY3RlcnMJW14gCV0gICAgIChub3QgPFRhYj4gYW5kIDxTcGFjZT4pCisJXGwJbG93ZXJjYXNlIGFscGhhCQlbYS16XQorCVxMCW5vbi1sb3dlcmNhc2UgYWxwaGEJW15hLXpdCisJXHUJdXBwZXJjYXNlIGFscGhhCQlbQS1aXQorCVxVCW5vbi11cHBlcmNhc2UgYWxwaGEJW15BLVpdCisKKwlOb3RlOgorCVVzaW5nIHRoZXNlIHByZWRlZmluZWQgcmFuZ2VzIHdvcmtzIGEgbG90IGZhc3RlciB0aGFuIHRoZSBjaGFyYWN0ZXIKKwlyYW5nZSBpdCBzdGFuZHMgZm9yLgorCVRoZXNlIGl0ZW1zIGNhbiBub3QgYmUgdXNlZCBpbnNpZGUgW10uICBUaHVzICJbXGRcbF0iIGRvZXMgTk9UIHdvcmsgdG8KKwltYXRjaCBhIGRpZ2l0IG9yIGxvd2VyY2FzZSBhbHBoYS4gIFVzZSAiXChcZFx8XGxcKSIgaW5zdGVhZC4KKworU2VlIHwvXHN8IGZvciB0aGUgd2hvbGUgbGlzdCBvZiB0aGVzZSByYW5nZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI3LjcqCUNoYXJhY3RlciBjbGFzc2VzCisKK1RoZSBjaGFyYWN0ZXIgcmFuZ2UgbWF0Y2hlcyBhIGZpeGVkIHNldCBvZiBjaGFyYWN0ZXJzLiAgQSBjaGFyYWN0ZXIgY2xhc3MgaXMKK3NpbWlsYXIsIGJ1dCB3aXRoIGFuIGVzc2VudGlhbCBkaWZmZXJlbmNlOiBUaGUgc2V0IG9mIGNoYXJhY3RlcnMgY2FuIGJlCityZWRlZmluZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgc2VhcmNoIHBhdHRlcm4uCisgICBGb3IgZXhhbXBsZSwgc2VhcmNoIGZvciB0aGlzIHBhdHRlcm46ID4KKworCS9cZlwrCisKK1RoZSAiXGYiIGl0ZW1zIHN0YW5kcyBmb3IgZmlsZSBuYW1lIGNoYXJhY3RlcnMuICBUaHVzIHRoaXMgbWF0Y2hlcyBhIHNlcXVlbmNlCitvZiBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIGEgZmlsZSBuYW1lLgorICAgV2hpY2ggY2hhcmFjdGVycyBjYW4gYmUgcGFydCBvZiBhIGZpbGUgbmFtZSBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0geW91IGFyZQordXNpbmcuICBPbiBNUy1XaW5kb3dzLCB0aGUgYmFja3NsYXNoIGlzIGluY2x1ZGVkLCBvbiBVbml4IGl0IGlzIG5vdC4gIFRoaXMgaXMKK3NwZWNpZmllZCB3aXRoIHRoZSAnaXNmbmFtZScgb3B0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFVuaXggaXM6ID4KKworCTpzZXQgaXNmbmFtZQorCWlzZm5hbWU9QCw0OC01NywvLC4sLSxfLCssLCwjLCQsJSx+LD0KKworRm9yIG90aGVyIHN5c3RlbXMgdGhlIGRlZmF1bHQgdmFsdWUgaXMgZGlmZmVyZW50LiAgVGh1cyB5b3UgY2FuIG1ha2UgYSBzZWFyY2gKK3BhdHRlcm4gd2l0aCAiXGYiIHRvIG1hdGNoIGEgZmlsZSBuYW1lLCBhbmQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGFkanVzdCB0bwordGhlIHN5c3RlbSB5b3UgYXJlIHVzaW5nIGl0IG9uLgorCisJTm90ZToKKwlBY3R1YWxseSwgVW5peCBhbGxvd3MgdXNpbmcganVzdCBhYm91dCBhbnkgY2hhcmFjdGVyIGluIGEgZmlsZSBuYW1lLAorCWluY2x1ZGluZyB3aGl0ZSBzcGFjZS4gIEluY2x1ZGluZyB0aGVzZSBjaGFyYWN0ZXJzIGluICdpc2ZuYW1lJyB3b3VsZAorCWJlIHRoZW9yZXRpY2FsbHkgY29ycmVjdC4gIEJ1dCBpdCB3b3VsZCBtYWtlIGl0IGltcG9zc2libGUgdG8gZmluZCB0aGUKKwllbmQgb2YgYSBmaWxlIG5hbWUgaW4gdGV4dC4gIFRodXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgJ2lzZm5hbWUnIGlzIGEKKwljb21wcm9taXNlLgorCitUaGUgY2hhcmFjdGVyIGNsYXNzZXMgYXJlOgorCisJaXRlbQltYXRjaGVzCQkJCW9wdGlvbiB+CisJXGkJaWRlbnRpZmllciBjaGFyYWN0ZXJzCQknaXNpZGVudCcKKwlcSQlsaWtlIFxpLCBleGNsdWRpbmcgZGlnaXRzCisJXGsJa2V5d29yZCBjaGFyYWN0ZXJzCQknaXNrZXl3b3JkJworCVxLCWxpa2UgXGssIGV4Y2x1ZGluZyBkaWdpdHMKKwlccAlwcmludGFibGUgY2hhcmFjdGVycwkJJ2lzcHJpbnQnCisJXFAJbGlrZSBccCwgZXhjbHVkaW5nIGRpZ2l0cworCVxmCWZpbGUgbmFtZSBjaGFyYWN0ZXJzCQknaXNmbmFtZScKKwlcRglsaWtlIFxmLCBleGNsdWRpbmcgZGlnaXRzCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI3LjgqCU1hdGNoaW5nIGEgbGluZSBicmVhaworCitWaW0gY2FuIGZpbmQgYSBwYXR0ZXJuIHRoYXQgaW5jbHVkZXMgYSBsaW5lIGJyZWFrLiAgWW91IG5lZWQgdG8gc3BlY2lmeSB3aGVyZQordGhlIGxpbmUgYnJlYWsgaGFwcGVucywgYmVjYXVzZSBhbGwgaXRlbXMgbWVudGlvbmVkIHNvIGZhciBkb24ndCBtYXRjaCBhIGxpbmUKK2JyZWFrLgorICAgVG8gY2hlY2sgZm9yIGEgbGluZSBicmVhayBpbiBhIHNwZWNpZmljIHBsYWNlLCB1c2UgdGhlICJcbiIgaXRlbTogPgorCisJL3RoZVxud29yZAorCitUaGlzIHdpbGwgbWF0Y2ggYXQgYSBsaW5lIHRoYXQgZW5kcyBpbiAidGhlIiBhbmQgdGhlIG5leHQgbGluZSBzdGFydHMgd2l0aAorIndvcmQiLiAgVG8gbWF0Y2ggInRoZSB3b3JkIiBhcyB3ZWxsLCB5b3UgbmVlZCB0byBtYXRjaCBhIHNwYWNlIG9yIGEgbGluZQorYnJlYWsuICBUaGUgaXRlbSB0byB1c2UgZm9yIGl0IGlzICJcX3MiOiA+CisKKwkvdGhlXF9zd29yZAorCitUbyBhbGxvdyBhbnkgYW1vdW50IG9mIHdoaXRlIHNwYWNlOiA+CisKKwkvdGhlXF9zXCt3b3JkCisKK1RoaXMgYWxzbyBtYXRjaGVzIHdoZW4gInRoZSAgIiBpcyBhdCB0aGUgZW5kIG9mIGEgbGluZSBhbmQgIiAgIHdvcmQiIGF0IHRoZQorc3RhcnQgb2YgdGhlIG5leHQgb25lLgorCisiXHMiIG1hdGNoZXMgd2hpdGUgc3BhY2UsICJcX3MiIG1hdGNoZXMgd2hpdGUgc3BhY2Ugb3IgYSBsaW5lIGJyZWFrLgorU2ltaWxhcmx5LCAiXGEiIG1hdGNoZXMgYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIsIGFuZCAiXF9hIiBtYXRjaGVzIGFuCithbHBoYWJldGljIGNoYXJhY3RlciBvciBhIGxpbmUgYnJlYWsuICBUaGUgb3RoZXIgY2hhcmFjdGVyIGNsYXNzZXMgYW5kIHJhbmdlcworY2FuIGJlIG1vZGlmaWVkIGluIHRoZSBzYW1lIHdheSBieSBpbnNlcnRpbmcgYSAiXyIuCisKK01hbnkgb3RoZXIgaXRlbXMgY2FuIGJlIG1hZGUgdG8gbWF0Y2ggYSBsaW5lIGJyZWFrIGJ5IHByZXBlbmRpbmcgIlxfIi4gIEZvcgorZXhhbXBsZTogIlxfLiIgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIG9yIGEgbGluZSBicmVhay4KKworCU5vdGU6CisJIlxfLioiIG1hdGNoZXMgZXZlcnl0aGluZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgQmUgY2FyZWZ1bCB3aXRoCisJdGhpcywgaXQgY2FuIG1ha2UgYSBzZWFyY2ggY29tbWFuZCB2ZXJ5IHNsb3cuCisKK0Fub3RoZXIgZXhhbXBsZSBpcyAiXF9bXSIsIGEgY2hhcmFjdGVyIHJhbmdlIHRoYXQgaW5jbHVkZXMgYSBsaW5lIGJyZWFrOiA+CisKKwkvIlxfW14iXSoiCisKK1RoaXMgZmluZHMgYSB0ZXh0IGluIGRvdWJsZSBxdW90ZXMgdGhhdCBtYXkgYmUgc3BsaXQgdXAgaW4gc2V2ZXJhbCBsaW5lcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjcuOSoJRXhhbXBsZXMKKworSGVyZSBhcmUgYSBmZXcgc2VhcmNoIHBhdHRlcm5zIHlvdSBtaWdodCBmaW5kIHVzZWZ1bC4gIFRoaXMgc2hvd3MgaG93IHRoZQoraXRlbXMgbWVudGlvbmVkIGFib3ZlIGNhbiBiZSBjb21iaW5lZC4KKworCitGSU5ESU5HIEEgQ0FMSUZPUk5JQSBMSUNFTlNFIFBMQVRFCisKK0Egc2FtcGxlIGxpY2Vuc2UgcGxhY2UgbnVtYmVyIGlzICIxTUdVMTAzIi4gIEl0IGhhcyBvbmUgZGlnaXQsIHRocmVlIHVwcGVyY2FzZQorbGV0dGVycyBhbmQgdGhyZWUgZGlnaXRzLiAgRGlyZWN0bHkgcHV0dGluZyB0aGlzIGludG8gYSBzZWFyY2ggcGF0dGVybjogPgorCisJL1xkXHVcdVx1XGRcZFxkCisKK0Fub3RoZXIgd2F5IGlzIHRvIHNwZWNpZnkgdGhhdCB0aGVyZSBhcmUgdGhyZWUgZGlnaXRzIGFuZCBsZXR0ZXJzIHdpdGggYQorY291bnQ6ID4KKworCS9cZFx1XHszfVxkXHszfQorCitVc2luZyBbXSByYW5nZXMgaW5zdGVhZDogPgorCisJL1swLTldW0EtWl1cezN9WzAtOV1cezN9CisKK1doaWNoIG9uZSBvZiB0aGVzZSB5b3Ugc2hvdWxkIHVzZT8gIFdoaWNoZXZlciBvbmUgeW91IGNhbiByZW1lbWJlci4gIFRoZQorc2ltcGxlIHdheSB5b3UgY2FuIHJlbWVtYmVyIGlzIG11Y2ggZmFzdGVyIHRoYW4gdGhlIGZhbmN5IHdheSB0aGF0IHlvdSBjYW4ndC4KK0lmIHlvdSBjYW4gcmVtZW1iZXIgdGhlbSBhbGwsIHRoZW4gYXZvaWQgdGhlIGxhc3Qgb25lLCBiZWNhdXNlIGl0J3MgYm90aCBtb3JlCit0eXBpbmcgYW5kIHNsb3dlciB0byBleGVjdXRlLgorCisKK0ZJTkRJTkcgQU4gSURFTlRJRklFUgorCitJbiBDIHByb2dyYW1zIChhbmQgbWFueSBvdGhlciBjb21wdXRlciBsYW5ndWFnZXMpIGFuIGlkZW50aWZpZXIgc3RhcnRzIHdpdGggYQorbGV0dGVyIGFuZCBmdXJ0aGVyIGNvbnNpc3RzIG9mIGxldHRlcnMgYW5kIGRpZ2l0cy4gIFVuZGVyc2NvcmVzIGNhbiBiZSB1c2VkCit0b28uICBUaGlzIGNhbiBiZSBmb3VuZCB3aXRoOiA+CisKKwkvXDxcaFx3Klw+CisKKyJcPCIgYW5kICJcPiIgYXJlIHVzZWQgdG8gZmluZCBvbmx5IHdob2xlIHdvcmRzLiAgIlxoIiBzdGFuZHMgZm9yICJbQS1aYS16X10iCithbmQgIlx3IiBmb3IgIlswLTlBLVphLXpfXSIuCisKKwlOb3RlOgorCSJcPCIgYW5kICJcPiIgZGVwZW5kIG9uIHRoZSAnaXNrZXl3b3JkJyBvcHRpb24uICBJZiBpdCBpbmNsdWRlcyAiLSIsCisJZm9yIGV4YW1wbGUsIHRoZW4gImlkZW50LSIgaXMgbm90IG1hdGNoZWQuICBJbiB0aGlzIHNpdHVhdGlvbiB1c2U6ID4KKworCQkvXHdcQDwhXGhcdypcd1xAIQorPAorCVRoaXMgY2hlY2tzIGlmICJcdyIgZG9lcyBub3QgbWF0Y2ggYmVmb3JlIG9yIGFmdGVyIHRoZSBpZGVudGlmaWVyLgorCVNlZSB8L1xAPCF8IGFuZCB8L1xAIXwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMjgudHh0fCAgRm9sZGluZworCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8yOC50eHQgYi9ydW50aW1lL2RvYy91c3JfMjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmRjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMjgudHh0CkBAIC0wLDAgKzEsNDI2IEBACisqdXNyXzI4LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDMgRGVjIDIxCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkJICAgRm9sZGluZworCisKK1N0cnVjdHVyZWQgdGV4dCBjYW4gYmUgc2VwYXJhdGVkIGluIHNlY3Rpb25zLiAgQW5kIHNlY3Rpb25zIGluIHN1Yi1zZWN0aW9ucy4KK0ZvbGRpbmcgYWxsb3dzIHlvdSB0byBkaXNwbGF5IGEgc2VjdGlvbiBhcyBvbmUgbGluZSwgcHJvdmlkaW5nIGFuIG92ZXJ2aWV3LgorVGhpcyBjaGFwdGVyIGV4cGxhaW5zIHRoZSBkaWZmZXJlbnQgd2F5cyB0aGlzIGNhbiBiZSBkb25lLgorCit8MjguMXwJV2hhdCBpcyBmb2xkaW5nPworfDI4LjJ8CU1hbnVhbCBmb2xkaW5nCit8MjguM3wJV29ya2luZyB3aXRoIGZvbGRzCit8MjguNHwJU2F2aW5nIGFuZCByZXN0b3JpbmcgZm9sZHMKK3wyOC41fAlGb2xkaW5nIGJ5IGluZGVudAorfDI4LjZ8CUZvbGRpbmcgd2l0aCBtYXJrZXJzCit8MjguN3wJRm9sZGluZyBieSBzeW50YXgKK3wyOC44fAlGb2xkaW5nIGJ5IGV4cHJlc3Npb24KK3wyOC45fAlGb2xkaW5nIHVuY2hhbmdlZCBsaW5lcworfDI4LjEwfCBXaGljaCBmb2xkIG1ldGhvZCB0byB1c2U/CisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzI5LnR4dHwgIE1vdmluZyB0aHJvdWdoIHByb2dyYW1zCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl8yNy50eHR8ICBTZWFyY2ggY29tbWFuZHMgYW5kIHBhdHRlcm5zCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyOC4xKglXaGF0IGlzIGZvbGRpbmc/CisKK0ZvbGRpbmcgaXMgdXNlZCB0byBzaG93IGEgcmFuZ2Ugb2YgbGluZXMgaW4gdGhlIGJ1ZmZlciBhcyBhIHNpbmdsZSBsaW5lIG9uIHRoZQorc2NyZWVuLiAgTGlrZSBhIHBpZWNlIG9mIHBhcGVyIHdoaWNoIGlzIGZvbGRlZCB0byBtYWtlIGl0IHNob3J0ZXI6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgbGluZSAxCQkgfAorCXwgbGluZSAyCQkgfAorCXwgbGluZSAzCQkgfAorCXxfX19fX19fX19fX19fX19fX19fX19fXyB8CisJXAkJCSBcCisJIFxfX19fX19fX19fX19fX19fX19fX19fX19cCisJIC8gZm9sZGVkIGxpbmVzCQkgIC8KKwkvX19fX19fX19fX19fX19fX19fX19fX19fLworCXwgbGluZSAxMgkJIHwKKwl8IGxpbmUgMTMJCSB8CisJfCBsaW5lIDE0CQkgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSB0ZXh0IGlzIHN0aWxsIGluIHRoZSBidWZmZXIsIHVuY2hhbmdlZC4gIE9ubHkgdGhlIHdheSBsaW5lcyBhcmUgZGlzcGxheWVkCitpcyBhZmZlY3RlZCBieSBmb2xkaW5nLgorCitUaGUgYWR2YW50YWdlIG9mIGZvbGRpbmcgaXMgdGhhdCB5b3UgY2FuIGdldCBhIGJldHRlciBvdmVydmlldyBvZiB0aGUKK3N0cnVjdHVyZSBvZiB0ZXh0LCBieSBmb2xkaW5nIGxpbmVzIG9mIGEgc2VjdGlvbiBhbmQgcmVwbGFjaW5nIGl0IHdpdGggYSBsaW5lCit0aGF0IGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgc2VjdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjguMioJTWFudWFsIGZvbGRpbmcKKworVHJ5IGl0IG91dDogUG9zaXRpb24gdGhlIGN1cnNvciBpbiBhIHBhcmFncmFwaCBhbmQgdHlwZTogPgorCisJemZhcAorCitZb3Ugd2lsbCBzZWUgdGhhdCB0aGUgcGFyYWdyYXBoIGlzIHJlcGxhY2VkIGJ5IGEgaGlnaGxpZ2h0ZWQgbGluZS4gIFlvdSBoYXZlCitjcmVhdGVkIGEgZm9sZC4gIHx6ZnwgaXMgYW4gb3BlcmF0b3IgYW5kIHxhcHwgYSB0ZXh0IG9iamVjdCBzZWxlY3Rpb24uICBZb3UKK2NhbiB1c2UgdGhlIHx6Znwgb3BlcmF0b3Igd2l0aCBhbnkgbW92ZW1lbnQgY29tbWFuZCB0byBjcmVhdGUgYSBmb2xkIGZvciB0aGUKK3RleHQgdGhhdCBpdCBtb3ZlZCBvdmVyLiAgfHpmfCBhbHNvIHdvcmtzIGluIFZpc3VhbCBtb2RlLgorCitUbyB2aWV3IHRoZSB0ZXh0IGFnYWluLCBvcGVuIHRoZSBmb2xkIGJ5IHR5cGluZzogPgorCisJem8KKworQW5kIHlvdSBjYW4gY2xvc2UgdGhlIGZvbGQgYWdhaW4gd2l0aDogPgorCisJemMKKworQWxsIHRoZSBmb2xkaW5nIGNvbW1hbmRzIHN0YXJ0IHdpdGggInoiLiAgV2l0aCBzb21lIGZhbnRhc3ksIHRoaXMgbG9va3MgbGlrZSBhCitmb2xkZWQgcGllY2Ugb2YgcGFwZXIsIHNlZW4gZnJvbSB0aGUgc2lkZS4gIFRoZSBsZXR0ZXIgYWZ0ZXIgdGhlICJ6IiBoYXMgYQorbW5lbW9uaWMgbWVhbmluZyB0byBtYWtlIGl0IGVhc2llciB0byByZW1lbWJlciB0aGUgY29tbWFuZHM6CisKKwl6ZglGLW9sZCBjcmVhdGlvbgorCXpvCU8tcGVuIGEgZm9sZAorCXpjCUMtbG9zZSBhIGZvbGQKKworRm9sZHMgY2FuIGJlIG5lc3RlZDogQSByZWdpb24gb2YgdGV4dCB0aGF0IGNvbnRhaW5zIGZvbGRzIGNhbiBiZSBmb2xkZWQKK2FnYWluLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZm9sZCBlYWNoIHBhcmFncmFwaCBpbiB0aGlzIHNlY3Rpb24sIGFuZCB0aGVuCitmb2xkIGFsbCB0aGUgc2VjdGlvbnMgaW4gdGhpcyBjaGFwdGVyLiAgVHJ5IGl0IG91dC4gIFlvdSB3aWxsIG5vdGljZSB0aGF0CitvcGVuaW5nIHRoZSBmb2xkIGZvciB0aGUgd2hvbGUgY2hhcHRlciB3aWxsIHJlc3RvcmUgdGhlIG5lc3RlZCBmb2xkcyBhcyB0aGV5Cit3ZXJlLCBzb21lIG1heSBiZSBvcGVuIGFuZCBzb21lIG1heSBiZSBjbG9zZWQuCisKK1N1cHBvc2UgeW91IGhhdmUgY3JlYXRlZCBzZXZlcmFsIGZvbGRzLCBhbmQgbm93IHdhbnQgdG8gdmlldyBhbGwgdGhlIHRleHQuCitZb3UgY291bGQgZ28gdG8gZWFjaCBmb2xkIGFuZCB0eXBlICJ6byIuICBUbyBkbyB0aGlzIGZhc3RlciwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJenIKKworVGhpcyB3aWxsIFItZWR1Y2UgdGhlIGZvbGRpbmcuICBUaGUgb3Bwb3NpdGUgaXM6ID4KKworCXptCisKK1RoaXMgZm9sZHMgTS1vcmUuICBZb3UgY2FuIHJlcGVhdCAienIiIGFuZCAiem0iIHRvIG9wZW4gYW5kIGNsb3NlIG5lc3RlZCBmb2xkcworb2Ygc2V2ZXJhbCBsZXZlbHMuCisKK0lmIHlvdSBoYXZlIG5lc3RlZCBzZXZlcmFsIGxldmVscyBkZWVwLCB5b3UgY2FuIG9wZW4gYWxsIG9mIHRoZW0gd2l0aDogPgorCisJelIKKworVGhpcyBSLWVkdWNlcyBmb2xkcyB1bnRpbCB0aGVyZSBhcmUgbm9uZSBsZWZ0LiAgQW5kIHlvdSBjYW4gY2xvc2UgYWxsIGZvbGRzCit3aXRoOiA+CisKKwl6TQorCitUaGlzIGZvbGRzIE0tb3JlIGFuZCBNLW9yZS4KKworWW91IGNhbiBxdWlja2x5IGRpc2FibGUgdGhlIGZvbGRpbmcgd2l0aCB0aGUgfHpufCBjb21tYW5kLiAgVGhlbiB8ek58IGJyaW5ncworYmFjayB0aGUgZm9sZGluZyBhcyBpdCB3YXMuICB8eml8IHRvZ2dsZXMgYmV0d2VlbiB0aGUgdHdvLiAgVGhpcyBpcyBhIHVzZWZ1bAord2F5IG9mIHdvcmtpbmc6CistIGNyZWF0ZSBmb2xkcyB0byBnZXQgb3ZlcnZpZXcgb24geW91ciBmaWxlCistIG1vdmUgYXJvdW5kIHRvIHdoZXJlIHlvdSB3YW50IHRvIGRvIHlvdXIgd29yaworLSBkbyB8eml8IHRvIGxvb2sgYXQgdGhlIHRleHQgYW5kIGVkaXQgaXQKKy0gZG8gfHppfCBhZ2FpbiB0byBnbyBiYWNrIHRvIG1vdmluZyBhcm91bmQKKworTW9yZSBhYm91dCBtYW51YWwgZm9sZGluZyBpbiB0aGUgcmVmZXJlbmNlIG1hbnVhbDogfGZvbGQtbWFudWFsfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyOC4zKglXb3JraW5nIHdpdGggZm9sZHMKKworV2hlbiBzb21lIGZvbGRzIGFyZSBjbG9zZWQsIG1vdmVtZW50IGNvbW1hbmRzIGxpa2UgImoiIGFuZCAiayIgbW92ZSBvdmVyIGEKK2ZvbGQgbGlrZSBpdCB3YXMgYSBzaW5nbGUsIGVtcHR5IGxpbmUuICBUaGlzIGFsbG93cyB5b3UgdG8gcXVpY2tseSBtb3ZlIGFyb3VuZAorb3ZlciBmb2xkZWQgdGV4dC4KKworWW91IGNhbiB5YW5rLCBkZWxldGUgYW5kIHB1dCBmb2xkcyBhcyBpZiBpdCB3YXMgYSBzaW5nbGUgbGluZS4gIFRoaXMgaXMgdmVyeQordXNlZnVsIGlmIHlvdSB3YW50IHRvIHJlb3JkZXIgZnVuY3Rpb25zIGluIGEgcHJvZ3JhbS4gIEZpcnN0IG1ha2Ugc3VyZSB0aGF0CitlYWNoIGZvbGQgY29udGFpbnMgYSB3aG9sZSBmdW5jdGlvbiAob3IgYSBiaXQgbGVzcykgYnkgc2VsZWN0aW5nIHRoZSByaWdodAorJ2ZvbGRtZXRob2QnLiAgVGhlbiBkZWxldGUgdGhlIGZ1bmN0aW9uIHdpdGggImRkIiwgbW92ZSB0aGUgY3Vyc29yIGFuZCBwdXQgaXQKK3dpdGggInAiLiAgSWYgc29tZSBsaW5lcyBvZiB0aGUgZnVuY3Rpb24gYXJlIGFib3ZlIG9yIGJlbG93IHRoZSBmb2xkLCB5b3UgY2FuCit1c2UgVmlzdWFsIHNlbGVjdGlvbjoKKy0gcHV0IHRoZSBjdXJzb3Igb24gdGhlIGZpcnN0IGxpbmUgdG8gYmUgbW92ZWQKKy0gaGl0ICJWIiB0byBzdGFydCBWaXN1YWwgbW9kZQorLSBwdXQgdGhlIGN1cnNvciBvbiB0aGUgbGFzdCBsaW5lIHRvIGJlIG1vdmVkCistIGhpdCAiZCIgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBsaW5lcy4KKy0gbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBuZXcgcG9zaXRpb24gYW5kICJwInV0IHRoZSBsaW5lcyB0aGVyZS4KKworSXQgaXMgc29tZXRpbWVzIGRpZmZpY3VsdCB0byBzZWUgb3IgcmVtZW1iZXIgd2hlcmUgYSBmb2xkIGlzIGxvY2F0ZWQsIHRodXMKK3doZXJlIGEgfHpvfCBjb21tYW5kIHdvdWxkIGFjdHVhbGx5IHdvcmsuICBUbyBzZWUgdGhlIGRlZmluZWQgZm9sZHM6ID4KKworCTpzZXQgZm9sZGNvbHVtbj00CisKK1RoaXMgd2lsbCBzaG93IGEgc21hbGwgY29sdW1uIG9uIHRoZSBsZWZ0IG9mIHRoZSB3aW5kb3cgdG8gaW5kaWNhdGUgZm9sZHMuCitBICIrIiBpcyBzaG93biBmb3IgYSBjbG9zZWQgZm9sZC4gIEEgIi0iIGlzIHNob3duIGF0IHRoZSBzdGFydCBvZiBlYWNoIG9wZW4KK2ZvbGQgYW5kICJ8IiBhdCBmb2xsb3dpbmcgbGluZXMgb2YgdGhlIGZvbGQuCisKK1lvdSBjYW4gdXNlIHRoZSBtb3VzZSB0byBvcGVuIGEgZm9sZCBieSBjbGlja2luZyBvbiB0aGUgIisiIGluIHRoZSBmb2xkY29sdW1uLgorQ2xpY2tpbmcgb24gdGhlICItIiBvciBhICJ8IiBiZWxvdyBpdCB3aWxsIGNsb3NlIGFuIG9wZW4gZm9sZC4KKworVG8gb3BlbiBhbGwgZm9sZHMgYXQgdGhlIGN1cnNvciBsaW5lIHVzZSB8ek98LgorVG8gY2xvc2UgYWxsIGZvbGRzIGF0IHRoZSBjdXJzb3IgbGluZSB1c2UgfHpDfC4KK1RvIGRlbGV0ZSBhIGZvbGQgYXQgdGhlIGN1cnNvciBsaW5lIHVzZSB8emR8LgorVG8gZGVsZXRlIGFsbCBmb2xkcyBhdCB0aGUgY3Vyc29yIGxpbmUgdXNlIHx6RHwuCisKK1doZW4gaW4gSW5zZXJ0IG1vZGUsIHRoZSBmb2xkIGF0IHRoZSBjdXJzb3IgbGluZSBpcyBuZXZlciBjbG9zZWQuICBUaGF0IGFsbG93cworeW91IHRvIHNlZSB3aGF0IHlvdSB0eXBlIQorCitGb2xkcyBhcmUgb3BlbmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBqdW1waW5nIGFyb3VuZCBvciBtb3ZpbmcgdGhlIGN1cnNvciBsZWZ0CitvciByaWdodC4gIEZvciBleGFtcGxlLCB0aGUgIjAiIGNvbW1hbmQgb3BlbnMgdGhlIGZvbGQgdW5kZXIgdGhlIGN1cnNvcgorKGlmICdmb2xkb3BlbicgY29udGFpbnMgImhvciIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0KS4gIFRoZSAnZm9sZG9wZW4nIG9wdGlvbgorY2FuIGJlIGNoYW5nZWQgdG8gb3BlbiBmb2xkcyBmb3Igc3BlY2lmaWMgY29tbWFuZHMuICBJZiB5b3Ugd2FudCB0aGUgbGluZQordW5kZXIgdGhlIGN1cnNvciBhbHdheXMgdG8gYmUgb3BlbiwgZG8gdGhpczogPgorCisJOnNldCBmb2xkb3Blbj1hbGwKKworV2FybmluZzogWW91IHdvbid0IGJlIGFibGUgdG8gbW92ZSBvbnRvIGEgY2xvc2VkIGZvbGQgdGhlbi4gIFlvdSBtaWdodCB3YW50IHRvCit1c2UgdGhpcyBvbmx5IHRlbXBvcmFyaWx5IGFuZCB0aGVuIHNldCBpdCBiYWNrIHRvIHRoZSBkZWZhdWx0OiA+CisKKwk6c2V0IGZvbGRvcGVuJgorCitZb3UgY2FuIG1ha2UgZm9sZHMgY2xvc2UgYXV0b21hdGljYWxseSB3aGVuIHlvdSBtb3ZlIG91dCBvZiBpdDogPgorCisJOnNldCBmb2xkY2xvc2U9YWxsCisKK1RoaXMgd2lsbCByZS1hcHBseSAnZm9sZGxldmVsJyB0byBhbGwgZm9sZHMgdGhhdCBkb24ndCBjb250YWluIHRoZSBjdXJzb3IuCitZb3UgaGF2ZSB0byB0cnkgaXQgb3V0IGlmIHlvdSBsaWtlIGhvdyB0aGlzIGZlZWxzLiAgVXNlIHx6bXwgdG8gZm9sZCBtb3JlIGFuZAorfHpyfCB0byBmb2xkIGxlc3MgKHJlZHVjZSBmb2xkcykuCisKK1RoZSBmb2xkaW5nIGlzIGxvY2FsIHRvIHRoZSB3aW5kb3cuICBUaGlzIGFsbG93cyB5b3UgdG8gb3BlbiB0d28gd2luZG93cyBvbgordGhlIHNhbWUgYnVmZmVyLCBvbmUgd2l0aCBmb2xkcyBhbmQgb25lIHdpdGhvdXQgZm9sZHMuICBPciBvbmUgd2l0aCBhbGwgZm9sZHMKK2Nsb3NlZCBhbmQgb25lIHdpdGggYWxsIGZvbGRzIG9wZW4uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI4LjQqCVNhdmluZyBhbmQgcmVzdG9yaW5nIGZvbGRzCisKK1doZW4geW91IGFiYW5kb24gYSBmaWxlIChzdGFydGluZyB0byBlZGl0IGFub3RoZXIgb25lKSwgdGhlIHN0YXRlIG9mIHRoZSBmb2xkcworaXMgbG9zdC4gIElmIHlvdSBjb21lIGJhY2sgdG8gdGhlIHNhbWUgZmlsZSBsYXRlciwgYWxsIG1hbnVhbGx5IG9wZW5lZCBhbmQKK2Nsb3NlZCBmb2xkcyBhcmUgYmFjayB0byB0aGVpciBkZWZhdWx0LiAgV2hlbiBmb2xkcyBoYXZlIGJlZW4gY3JlYXRlZAorbWFudWFsbHksIGFsbCBmb2xkcyBhcmUgZ29uZSEgIFRvIHNhdmUgdGhlIGZvbGRzIHVzZSB0aGUgfDpta3ZpZXd8IGNvbW1hbmQ6ID4KKworCTpta3ZpZXcKKworVGhpcyB3aWxsIHN0b3JlIHRoZSBzZXR0aW5ncyBhbmQgb3RoZXIgdGhpbmdzIHRoYXQgaW5mbHVlbmNlIHRoZSB2aWV3IG9uIHRoZQorZmlsZS4gIFlvdSBjYW4gY2hhbmdlIHdoYXQgaXMgc3RvcmVkIHdpdGggdGhlICd2aWV3b3B0aW9ucycgb3B0aW9uLgorV2hlbiB5b3UgY29tZSBiYWNrIHRvIHRoZSBzYW1lIGZpbGUgbGF0ZXIsIHlvdSBjYW4gbG9hZCB0aGUgdmlldyBhZ2FpbjogPgorCisJOmxvYWR2aWV3CisKK1lvdSBjYW4gc3RvcmUgdXAgdG8gdGVuIHZpZXdzIG9uIG9uZSBmaWxlLiAgRm9yIGV4YW1wbGUsIHRvIHNhdmUgdGhlIGN1cnJlbnQKK3NldHVwIGFzIHRoZSB0aGlyZCB2aWV3IGFuZCBsb2FkIHRoZSBzZWNvbmQgdmlldzogPgorCisJOm1rdmlldyAzCisJOmxvYWR2aWV3IDIKKworTm90ZSB0aGF0IHdoZW4geW91IGluc2VydCBvciBkZWxldGUgbGluZXMgdGhlIHZpZXdzIG1pZ2h0IGJlY29tZSBpbnZhbGlkLgorQWxzbyBjaGVjayBvdXQgdGhlICd2aWV3ZGlyJyBvcHRpb24sIHdoaWNoIHNwZWNpZmllcyB3aGVyZSB0aGUgdmlld3MgYXJlCitzdG9yZWQuICBZb3UgbWlnaHQgd2FudCB0byBkZWxldGUgb2xkIHZpZXdzIG5vdyBhbmQgdGhlbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjguNSoJRm9sZGluZyBieSBpbmRlbnQKKworRGVmaW5pbmcgZm9sZHMgd2l0aCB8emZ8IGlzIGEgbG90IG9mIHdvcmsuICBJZiB5b3VyIHRleHQgaXMgc3RydWN0dXJlZCBieQorZ2l2aW5nIGxvd2VyIGxldmVsIGl0ZW1zIGEgbGFyZ2VyIGluZGVudCwgeW91IGNhbiB1c2UgdGhlIGluZGVudCBmb2xkaW5nCittZXRob2QuICBUaGlzIHdpbGwgY3JlYXRlIGZvbGRzIGZvciBldmVyeSBzZXF1ZW5jZSBvZiBsaW5lcyB3aXRoIHRoZSBzYW1lCitpbmRlbnQuICBMaW5lcyB3aXRoIGEgbGFyZ2VyIGluZGVudCB3aWxsIGJlY29tZSBuZXN0ZWQgZm9sZHMuICBUaGlzIHdvcmtzIHdlbGwKK3dpdGggbWFueSBwcm9ncmFtbWluZyBsYW5ndWFnZXMuCisKK1RyeSB0aGlzIGJ5IHNldHRpbmcgdGhlICdmb2xkbWV0aG9kJyBvcHRpb246ID4KKworCTpzZXQgZm9sZG1ldGhvZD1pbmRlbnQKKworVGhlbiB5b3UgY2FuIHVzZSB0aGUgfHptfCBhbmQgfHpyfCBjb21tYW5kcyB0byBmb2xkIG1vcmUgYW5kIHJlZHVjZSBmb2xkaW5nLgorSXQncyBlYXN5IHRvIHNlZSBvbiB0aGlzIGV4YW1wbGUgdGV4dDoKKworVGhpcyBsaW5lIGlzIG5vdCBpbmRlbnRlZAorCVRoaXMgbGluZSBpcyBpbmRlbnRlZCBvbmNlCisJCVRoaXMgbGluZSBpcyBpbmRlbnRlZCB0d2ljZQorCQlUaGlzIGxpbmUgaXMgaW5kZW50ZWQgdHdpY2UKKwlUaGlzIGxpbmUgaXMgaW5kZW50ZWQgb25jZQorVGhpcyBsaW5lIGlzIG5vdCBpbmRlbnRlZAorCVRoaXMgbGluZSBpcyBpbmRlbnRlZCBvbmNlCisJVGhpcyBsaW5lIGlzIGluZGVudGVkIG9uY2UKKworTm90ZSB0aGF0IHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZSBhbW91bnQgb2YgaW5kZW50IGFuZCB0aGUgZm9sZCBkZXB0aCBkZXBlbmRzCitvbiB0aGUgJ3NoaWZ0d2lkdGgnIG9wdGlvbi4gIEVhY2ggJ3NoaWZ0d2lkdGgnIHdvcnRoIG9mIGluZGVudCBhZGRzIG9uZSB0byB0aGUKK2RlcHRoIG9mIHRoZSBmb2xkLiAgVGhpcyBpcyBjYWxsZWQgYSBmb2xkIGxldmVsLgorCitXaGVuIHlvdSB1c2UgdGhlIHx6cnwgYW5kIHx6bXwgY29tbWFuZHMgeW91IGFjdHVhbGx5IGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZQorJ2ZvbGRsZXZlbCcgb3B0aW9uLiAgWW91IGNvdWxkIGFsc28gc2V0IGl0IGRpcmVjdGx5OiA+CisKKwk6c2V0IGZvbGRsZXZlbD0zCisKK1RoaXMgbWVhbnMgdGhhdCBhbGwgZm9sZHMgd2l0aCB0aHJlZSB0aW1lcyBhICdzaGlmdHdpZHRoJyBpbmRlbnQgb3IgbW9yZSB3aWxsCitiZSBjbG9zZWQuICBUaGUgbG93ZXIgdGhlIGZvbGRsZXZlbCwgdGhlIG1vcmUgZm9sZHMgd2lsbCBiZSBjbG9zZWQuICBXaGVuCisnZm9sZGxldmVsJyBpcyB6ZXJvLCBhbGwgZm9sZHMgYXJlIGNsb3NlZC4gIHx6TXwgZG9lcyBzZXQgJ2ZvbGRsZXZlbCcgdG8gemVyby4KK1RoZSBvcHBvc2l0ZSBjb21tYW5kIHx6Unwgc2V0cyAnZm9sZGxldmVsJyB0byB0aGUgZGVlcGVzdCBmb2xkIGxldmVsIHRoYXQgaXMKK3ByZXNlbnQgaW4gdGhlIGZpbGUuCisKK1RodXMgdGhlcmUgYXJlIHR3byB3YXlzIHRvIG9wZW4gYW5kIGNsb3NlIHRoZSBmb2xkczoKKyhBKSBCeSBzZXR0aW5nIHRoZSBmb2xkIGxldmVsLgorICAgIFRoaXMgZ2l2ZXMgYSB2ZXJ5IHF1aWNrIHdheSBvZiAiem9vbWluZyBvdXQiIHRvIHZpZXcgdGhlIHN0cnVjdHVyZSBvZiB0aGUKKyAgICB0ZXh0LCBtb3ZlIHRoZSBjdXJzb3IsIGFuZCAiem9vbSBpbiIgb24gdGhlIHRleHQgYWdhaW4uCisKKyhCKSBCeSB1c2luZyB8em98IGFuZCB8emN8IGNvbW1hbmRzIHRvIG9wZW4gb3IgY2xvc2Ugc3BlY2lmaWMgZm9sZHMuCisgICAgVGhpcyBhbGxvd3Mgb3BlbmluZyBvbmx5IHRob3NlIGZvbGRzIHRoYXQgeW91IHdhbnQgdG8gYmUgb3Blbiwgd2hpbGUgb3RoZXIKKyAgICBmb2xkcyByZW1haW4gY2xvc2VkLgorCitUaGlzIGNhbiBiZSBjb21iaW5lZDogWW91IGNhbiBmaXJzdCBjbG9zZSBtb3N0IGZvbGRzIGJ5IHVzaW5nIHx6bXwgYSBmZXcgdGltZXMKK2FuZCB0aGVuIG9wZW4gYSBzcGVjaWZpYyBmb2xkIHdpdGggfHpvfC4gIE9yIG9wZW4gYWxsIGZvbGRzIHdpdGggfHpSfCBhbmQKK3RoZW4gY2xvc2Ugc3BlY2lmaWMgZm9sZHMgd2l0aCB8emN8LgorCitCdXQgeW91IGNhbm5vdCBtYW51YWxseSBkZWZpbmUgZm9sZHMgd2hlbiAnZm9sZG1ldGhvZCcgaXMgImluZGVudCIsIGFzIHRoYXQKK3dvdWxkIGNvbmZsaWN0IHdpdGggdGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlIGluZGVudCBhbmQgdGhlIGZvbGQgbGV2ZWwuCisKK01vcmUgYWJvdXQgZm9sZGluZyBieSBpbmRlbnQgaW4gdGhlIHJlZmVyZW5jZSBtYW51YWw6IHxmb2xkLWluZGVudHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjguNioJRm9sZGluZyB3aXRoIG1hcmtlcnMKKworTWFya2VycyBpbiB0aGUgdGV4dCBhcmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBzdGFydCBhbmQgZW5kIG9mIGEgZm9sZCByZWdpb24uCitUaGlzIGdpdmVzIHByZWNpc2UgY29udHJvbCBvdmVyIHdoaWNoIGxpbmVzIGFyZSBpbmNsdWRlZCBpbiBhIGZvbGQuICBUaGUKK2Rpc2FkdmFudGFnZSBpcyB0aGF0IHRoZSB0ZXh0IG5lZWRzIHRvIGJlIG1vZGlmaWVkLgorCitUcnkgaXQ6ID4KKworCTpzZXQgZm9sZG1ldGhvZD1tYXJrZXIKKworRXhhbXBsZSB0ZXh0LCBhcyBpdCBjb3VsZCBhcHBlYXIgaW4gYSBDIHByb2dyYW06CisKKwkvKiBmb29iYXIgKCkge3t7ICovCisJaW50IGZvb2JhcigpCisJeworCQkvKiByZXR1cm4gYSB2YWx1ZSB7e3sgKi8KKwkJcmV0dXJuIDQyOworCQkvKiB9fX0gKi8KKwl9CisJLyogfX19ICovCisKK05vdGljZSB0aGF0IHRoZSBmb2xkZWQgbGluZSB3aWxsIGRpc3BsYXkgdGhlIHRleHQgYmVmb3JlIHRoZSBtYXJrZXIuICBUaGlzIGlzCit2ZXJ5IHVzZWZ1bCB0byB0ZWxsIHdoYXQgdGhlIGZvbGQgY29udGFpbnMuCisKK0l0J3MgcXVpdGUgYW5ub3lpbmcgd2hlbiB0aGUgbWFya2VycyBkb24ndCBwYWlyIHVwIGNvcnJlY3RseSBhZnRlciBtb3Zpbmcgc29tZQorbGluZXMgYXJvdW5kLiAgVGhpcyBjYW4gYmUgYXZvaWRlZCBieSB1c2luZyBudW1iZXJlZCBtYXJrZXJzLiAgRXhhbXBsZToKKworCS8qIGdsb2JhbCB2YXJpYWJsZXMge3t7MSAqLworCWludCB2YXJBLCB2YXJCOworCisJLyogZnVuY3Rpb25zIHt7ezEgKi8KKwkvKiBmdW5jQSgpIHt7ezIgKi8KKwl2b2lkIGZ1bmNBKCkge30KKworCS8qIGZ1bmNCKCkge3t7MiAqLworCXZvaWQgZnVuY0IoKSB7fQorCS8qIH19fTEgKi8KKworQXQgZXZlcnkgbnVtYmVyZWQgbWFya2VyIGEgZm9sZCBhdCB0aGUgc3BlY2lmaWVkIGxldmVsIGJlZ2lucy4gIFRoaXMgd2lsbCBtYWtlCithbnkgZm9sZCBhdCBhIGhpZ2hlciBsZXZlbCBzdG9wIGhlcmUuICBZb3UgY2FuIGp1c3QgdXNlIG51bWJlcmVkIHN0YXJ0IG1hcmtlcnMKK3RvIGRlZmluZSBhbGwgZm9sZHMuICBPbmx5IHdoZW4geW91IHdhbnQgdG8gZXhwbGljaXRseSBzdG9wIGEgZm9sZCBiZWZvcmUKK2Fub3RoZXIgc3RhcnRzIHlvdSBuZWVkIHRvIGFkZCBhbiBlbmQgbWFya2VyLgorCitNb3JlIGFib3V0IGZvbGRpbmcgd2l0aCBtYXJrZXJzIGluIHRoZSByZWZlcmVuY2UgbWFudWFsOiB8Zm9sZC1tYXJrZXJ8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI4LjcqCUZvbGRpbmcgYnkgc3ludGF4CisKK0ZvciBlYWNoIGxhbmd1YWdlIFZpbSB1c2VzIGEgZGlmZmVyZW50IHN5bnRheCBmaWxlLiAgVGhpcyBkZWZpbmVzIHRoZSBjb2xvcnMKK2ZvciB2YXJpb3VzIGl0ZW1zIGluIHRoZSBmaWxlLiAgSWYgeW91IGFyZSByZWFkaW5nIHRoaXMgaW4gVmltLCBpbiBhIHRlcm1pbmFsCit0aGF0IHN1cHBvcnRzIGNvbG9ycywgdGhlIGNvbG9ycyB5b3Ugc2VlIGFyZSBtYWRlIHdpdGggdGhlICJoZWxwIiBzeW50YXggZmlsZS4KKyAgIEluIHRoZSBzeW50YXggZmlsZXMgaXQgaXMgcG9zc2libGUgdG8gYWRkIHN5bnRheCBpdGVtcyB0aGF0IGhhdmUgdGhlICJmb2xkIgorYXJndW1lbnQuICBUaGVzZSBkZWZpbmUgYSBmb2xkIHJlZ2lvbi4gIFRoaXMgcmVxdWlyZXMgd3JpdGluZyBhIHN5bnRheCBmaWxlCithbmQgYWRkaW5nIHRoZXNlIGl0ZW1zIGluIGl0LiAgVGhhdCdzIG5vdCBzbyBlYXN5IHRvIGRvLiAgQnV0IG9uY2UgaXQncyBkb25lLAorYWxsIGZvbGRpbmcgaGFwcGVucyBhdXRvbWF0aWNhbGx5LgorICAgSGVyZSB3ZSdsbCBhc3N1bWUgeW91IGFyZSB1c2luZyBhbiBleGlzdGluZyBzeW50YXggZmlsZS4gIFRoZW4gdGhlcmUgaXMKK25vdGhpbmcgbW9yZSB0byBleHBsYWluLiAgWW91IGNhbiBvcGVuIGFuZCBjbG9zZSBmb2xkcyBhcyBleHBsYWluZWQgYWJvdmUuCitUaGUgZm9sZHMgd2lsbCBiZSBjcmVhdGVkIGFuZCBkZWxldGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgZWRpdCB0aGUgZmlsZS4KKworTW9yZSBhYm91dCBmb2xkaW5nIGJ5IHN5bnRheCBpbiB0aGUgcmVmZXJlbmNlIG1hbnVhbDogfGZvbGQtc3ludGF4fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyOC44KglGb2xkaW5nIGJ5IGV4cHJlc3Npb24KKworVGhpcyBpcyBzaW1pbGFyIHRvIGZvbGRpbmcgYnkgaW5kZW50LCBidXQgaW5zdGVhZCBvZiB1c2luZyB0aGUgaW5kZW50IG9mIGEKK2xpbmUgYSB1c2VyIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBjb21wdXRlIHRoZSBmb2xkIGxldmVsIG9mIGEgbGluZS4gIFlvdSBjYW4KK3VzZSB0aGlzIGZvciB0ZXh0IHdoZXJlIHNvbWV0aGluZyBpbiB0aGUgdGV4dCBpbmRpY2F0ZXMgd2hpY2ggbGluZXMgYmVsb25nCit0b2dldGhlci4gIEFuIGV4YW1wbGUgaXMgYW4gZS1tYWlsIG1lc3NhZ2Ugd2hlcmUgdGhlIHF1b3RlZCB0ZXh0IGlzIGluZGljYXRlZAorYnkgYSAiPiIgYmVmb3JlIHRoZSBsaW5lLiAgVG8gZm9sZCB0aGVzZSBxdW90ZXMgdXNlIHRoaXM6ID4KKworCTpzZXQgZm9sZG1ldGhvZD1leHByCisJOnNldCBmb2xkZXhwcj1zdHJsZW4oc3Vic3RpdHV0ZShzdWJzdGl0dXRlKGdldGxpbmUodjpsbnVtKSwnXFxzJywnJyxcImdcIiksJ1tePl0uKicsJycsJycpKQorCitZb3UgY2FuIHRyeSBpdCBvdXQgb24gdGhpcyB0ZXh0OgorCis+IHF1b3RlZCB0ZXh0IGhlIHdyb3RlCis+IHF1b3RlZCB0ZXh0IGhlIHdyb3RlCis+ID4gZG91YmxlIHF1b3RlZCB0ZXh0IEkgd3JvdGUKKz4gPiBkb3VibGUgcXVvdGVkIHRleHQgSSB3cm90ZQorCitFeHBsYW5hdGlvbiBmb3IgdGhlICdmb2xkZXhwcicgdXNlZCBpbiB0aGUgZXhhbXBsZSAoaW5zaWRlIG91dCk6CisgICBnZXRsaW5lKHY6bG51bSkJCQlnZXRzIHRoZSBjdXJyZW50IGxpbmUKKyAgIHN1YnN0aXR1dGUoLi4uLCdcXHMnLCcnLCdnJykJCXJlbW92ZXMgYWxsIHdoaXRlIHNwYWNlIGZyb20gdGhlIGxpbmUKKyAgIHN1YnN0aXR1dGUoLi4uLCdbXj5dLionLCcnLCcnKSkJcmVtb3ZlcyBldmVyeXRoaW5nIGFmdGVyIGxlYWRpbmcgJz4ncworICAgc3RybGVuKC4uLikJCQkJY291bnRzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgd2hpY2gKKwkJCQkJaXMgdGhlIG51bWJlciBvZiAnPidzIGZvdW5kCisKK05vdGUgdGhhdCBhIGJhY2tzbGFzaCBtdXN0IGJlIGluc2VydGVkIGJlZm9yZSBldmVyeSBzcGFjZSwgZG91YmxlIHF1b3RlIGFuZAorYmFja3NsYXNoIGZvciB0aGUgIjpzZXQiIGNvbW1hbmQuICBJZiB0aGlzIGNvbmZ1c2VzIHlvdSwgZG8gPgorCisJOnNldCBmb2xkZXhwcgorCit0byBjaGVjayB0aGUgYWN0dWFsIHJlc3VsdGluZyB2YWx1ZS4gIFRvIGNvcnJlY3QgYSBjb21wbGljYXRlZCBleHByZXNzaW9uLCB1c2UKK3RoZSBjb21tYW5kLWxpbmUgY29tcGxldGlvbjogPgorCisJOnNldCBmb2xkZXhwcj08VGFiPgorCitXaGVyZSA8VGFiPiBpcyBhIHJlYWwgVGFiLiAgVmltIHdpbGwgZmlsbCBpbiB0aGUgcHJldmlvdXMgdmFsdWUsIHdoaWNoIHlvdSBjYW4KK3RoZW4gZWRpdC4KKworV2hlbiB0aGUgZXhwcmVzc2lvbiBnZXRzIG1vcmUgY29tcGxpY2F0ZWQgeW91IHNob3VsZCBwdXQgaXQgaW4gYSBmdW5jdGlvbiBhbmQKK3NldCAnZm9sZGV4cHInIHRvIGNhbGwgdGhhdCBmdW5jdGlvbi4KKworTW9yZSBhYm91dCBmb2xkaW5nIGJ5IGV4cHJlc3Npb24gaW4gdGhlIHJlZmVyZW5jZSBtYW51YWw6IHxmb2xkLWV4cHJ8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI4LjkqCUZvbGRpbmcgdW5jaGFuZ2VkIGxpbmVzCisKK1RoaXMgaXMgdXNlZnVsIHdoZW4geW91IHNldCB0aGUgJ2RpZmYnIG9wdGlvbiBpbiB0aGUgc2FtZSB3aW5kb3cuICBUaGUKK3x2aW1kaWZmfCBjb21tYW5kIGRvZXMgdGhpcyBmb3IgeW91LiAgRXhhbXBsZTogPgorCisJc2V0bG9jYWwgZGlmZiBmb2xkbWV0aG9kPWRpZmYgc2Nyb2xsYmluZCBub3dyYXAgZm9sZGxldmVsPTEKKworRG8gdGhpcyBpbiBldmVyeSB3aW5kb3cgdGhhdCBzaG93cyBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZSBzYW1lIGZpbGUuICBZb3UKK3dpbGwgY2xlYXJseSBzZWUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGZpbGVzLCB3aGlsZSB0aGUgdGV4dCB0aGF0IGRpZG4ndAorY2hhbmdlIGlzIGZvbGRlZC4KKworRm9yIG1vcmUgZGV0YWlscyBzZWUgfGZvbGQtZGlmZnwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI4LjEwKiBXaGljaCBmb2xkIG1ldGhvZCB0byB1c2U/CisKK0FsbCB0aGVzZSBwb3NzaWJpbGl0aWVzIG1ha2VzIHlvdSB3b25kZXIgd2hpY2ggbWV0aG9kIHlvdSBzaG91bGQgY2hvc2UuCitVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBubyBnb2xkZW4gcnVsZS4gIEhlcmUgYXJlIHNvbWUgaGludHMuCisKK0lmIHRoZXJlIGlzIGEgc3ludGF4IGZpbGUgd2l0aCBmb2xkaW5nIGZvciB0aGUgbGFuZ3VhZ2UgeW91IGFyZSBlZGl0aW5nLCB0aGF0CitpcyBwcm9iYWJseSB0aGUgYmVzdCBjaG9pY2UuICBJZiB0aGVyZSBpc24ndCBvbmUsIHlvdSBtaWdodCB0cnkgdG8gd3JpdGUgaXQuCitUaGlzIHJlcXVpcmVzIGEgZ29vZCBrbm93bGVkZ2Ugb2Ygc2VhcmNoIHBhdHRlcm5zLiAgSXQncyBub3QgZWFzeSwgYnV0IHdoZW4KK2l0J3Mgd29ya2luZyB5b3Ugd2lsbCBub3QgaGF2ZSB0byBkZWZpbmUgZm9sZHMgbWFudWFsbHkuCisKK1R5cGluZyBjb21tYW5kcyB0byBtYW51YWxseSBmb2xkIHJlZ2lvbnMgY2FuIGJlIHVzZWQgZm9yIHVuc3RydWN0dXJlZCB0ZXh0LgorVGhlbiB1c2UgdGhlIHw6bWt2aWV3fCBjb21tYW5kIHRvIHNhdmUgYW5kIHJlc3RvcmUgeW91ciBmb2xkcy4KKworVGhlIG1hcmtlciBtZXRob2QgcmVxdWlyZXMgeW91IHRvIGNoYW5nZSB0aGUgZmlsZS4gIElmIHlvdSBhcmUgc2hhcmluZyB0aGUKK2ZpbGVzIHdpdGggb3RoZXIgcGVvcGxlIG9yIHlvdSBoYXZlIHRvIG1lZXQgY29tcGFueSBzdGFuZGFyZHMsIHlvdSBtaWdodCBub3QKK2JlIGFsbG93ZWQgdG8gYWRkIHRoZW0uCisgICBUaGUgbWFpbiBhZHZhbnRhZ2Ugb2YgbWFya2VycyBpcyB0aGF0IHlvdSBjYW4gcHV0IHRoZW0gZXhhY3RseSB3aGVyZSB5b3UKK3dhbnQgdGhlbS4gIFRoYXQgYXZvaWRzIHRoYXQgYSBmZXcgbGluZXMgYXJlIG1pc3NlZCB3aGVuIHlvdSBjdXQgYW5kIHBhc3RlCitmb2xkcy4gIEFuZCB5b3UgY2FuIGFkZCBhIGNvbW1lbnQgYWJvdXQgd2hhdCBpcyBjb250YWluZWQgaW4gdGhlIGZvbGQuCisKK0ZvbGRpbmcgYnkgaW5kZW50IGlzIHNvbWV0aGluZyB0aGF0IHdvcmtzIGluIG1hbnkgZmlsZXMsIGJ1dCBub3QgYWx3YXlzIHZlcnkKK3dlbGwuICBVc2UgaXQgd2hlbiB5b3UgY2FuJ3QgdXNlIG9uZSBvZiB0aGUgb3RoZXIgbWV0aG9kcy4gIEhvd2V2ZXIsIGl0IGlzCit2ZXJ5IHVzZWZ1bCBmb3Igb3V0bGluaW5nLiAgVGhlbiB5b3Ugc3BlY2lmaWNhbGx5IHVzZSBvbmUgJ3NoaWZ0d2lkdGgnIGZvcgorZWFjaCBuZXN0aW5nIGxldmVsLgorCitGb2xkaW5nIHdpdGggZXhwcmVzc2lvbnMgY2FuIG1ha2UgZm9sZHMgaW4gYWxtb3N0IGFueSBzdHJ1Y3R1cmVkIHRleHQuICBJdCBpcworcXVpdGUgc2ltcGxlIHRvIHNwZWNpZnksIGVzcGVjaWFsbHkgaWYgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgYSBmb2xkIGNhbiBlYXNpbHkKK2JlIHJlY29nbml6ZWQuCisgICBJZiB5b3UgdXNlIHRoZSAiZXhwciIgbWV0aG9kIHRvIGRlZmluZSBmb2xkcywgYnV0IHRoZXkgYXJlIG5vdCBleGFjdGx5IGhvdworeW91IHdhbnQgdGhlbSwgeW91IGNvdWxkIHN3aXRjaCB0byB0aGUgIm1hbnVhbCIgbWV0aG9kLiAgVGhpcyB3aWxsIG5vdCByZW1vdmUKK3RoZSBkZWZpbmVkIGZvbGRzLiAgVGhlbiB5b3UgY2FuIGRlbGV0ZSBvciBhZGQgZm9sZHMgbWFudWFsbHkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMjkudHh0fCAgTW92aW5nIHRocm91Z2ggcHJvZ3JhbXMKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMjkudHh0IGIvcnVudGltZS9kb2MvdXNyXzI5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTA2Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzI5LnR4dApAQCAtMCwwICsxLDYxMyBAQAorKnVzcl8yOS50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEZlYiAxMgorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgIE1vdmluZyB0aHJvdWdoIHByb2dyYW1zCisKKworVGhlIGNyZWF0b3Igb2YgVmltIGlzIGEgY29tcHV0ZXIgcHJvZ3JhbW1lci4gIEl0J3Mgbm8gc3VycHJpc2UgdGhhdCBWaW0KK2NvbnRhaW5zIG1hbnkgZmVhdHVyZXMgdG8gYWlkIGluIHdyaXRpbmcgcHJvZ3JhbXMuICBKdW1wIGFyb3VuZCB0byBmaW5kIHdoZXJlCitpZGVudGlmaWVycyBhcmUgZGVmaW5lZCBhbmQgdXNlZC4gIFByZXZpZXcgZGVjbGFyYXRpb25zIGluIGEgc2VwYXJhdGUgd2luZG93LgorVGhlcmUgaXMgbW9yZSBpbiB0aGUgbmV4dCBjaGFwdGVyLgorCit8MjkuMXwJVXNpbmcgdGFncworfDI5LjJ8CVRoZSBwcmV2aWV3IHdpbmRvdworfDI5LjN8CU1vdmluZyB0aHJvdWdoIGEgcHJvZ3JhbQorfDI5LjR8CUZpbmRpbmcgZ2xvYmFsIGlkZW50aWZpZXJzCit8MjkuNXwJRmluZGluZyBsb2NhbCBpZGVudGlmaWVycworCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8zMC50eHR8ICBFZGl0aW5nIHByb2dyYW1zCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl8yOC50eHR8ICBGb2xkaW5nCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyOS4xKglVc2luZyB0YWdzCisKK1doYXQgaXMgYSB0YWc/ICBJdCBpcyBhIGxvY2F0aW9uIHdoZXJlIGFuIGlkZW50aWZpZXIgaXMgZGVmaW5lZC4gIEFuIGV4YW1wbGUKK2lzIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBhIEMgb3IgQysrIHByb2dyYW0uICBBIGxpc3Qgb2YgdGFncyBpcyBrZXB0IGluIGEKK3RhZ3MgZmlsZS4gIFRoaXMgY2FuIGJlIHVzZWQgYnkgVmltIHRvIGRpcmVjdGx5IGp1bXAgZnJvbSBhbnkgcGxhY2UgdG8gdGhlCit0YWcsIHRoZSBwbGFjZSB3aGVyZSBhbiBpZGVudGlmaWVyIGlzIGRlZmluZWQuCisgICBUbyBnZW5lcmF0ZSB0aGUgdGFncyBmaWxlIGZvciBhbGwgQyBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHVzZSB0aGUKK2ZvbGxvd2luZyBjb21tYW5kOiA+CisKKwljdGFncyAqLmMKKworImN0YWdzIiBpcyBhIHNlcGFyYXRlIHByb2dyYW0uICBNb3N0IFVuaXggc3lzdGVtcyBhbHJlYWR5IGhhdmUgaXQgaW5zdGFsbGVkLgorSWYgeW91IGRvIG5vdCBoYXZlIGl0IHlldCwgeW91IGNhbiBmaW5kIEV4dWJlcmFudCBjdGFncyBoZXJlOgorCisJaHR0cDovL2N0YWdzLnNmLm5ldCB+CisKK05vdyB3aGVuIHlvdSBhcmUgaW4gVmltIGFuZCB5b3Ugd2FudCB0byBnbyB0byBhIGZ1bmN0aW9uIGRlZmluaXRpb24sIHlvdSBjYW4KK2p1bXAgdG8gaXQgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6dGFnIHN0YXJ0bGlzdAorCitUaGlzIGNvbW1hbmQgd2lsbCBmaW5kIHRoZSBmdW5jdGlvbiAic3RhcnRsaXN0IiBldmVuIGlmIGl0IGlzIGluIGFub3RoZXIgZmlsZS4KKyAgIFRoZSBDVFJMLV0gY29tbWFuZCBqdW1wcyB0byB0aGUgdGFnIG9mIHRoZSB3b3JkIHRoYXQgaXMgdW5kZXIgdGhlIGN1cnNvci4KK1RoaXMgbWFrZXMgaXQgZWFzeSB0byBleHBsb3JlIGEgdGFuZ2xlIG9mIEMgY29kZS4gIFN1cHBvc2UsIGZvciBleGFtcGxlLCB0aGF0Cit5b3UgYXJlIGluIHRoZSBmdW5jdGlvbiAid3JpdGVfYmxvY2siLiAgWW91IGNhbiBzZWUgdGhhdCBpdCBjYWxscworIndyaXRlX2xpbmUiLiAgQnV0IHdoYXQgZG9lcyAid3JpdGVfbGluZSIgZG8/ICBCeSBwbGFjaW5nIHRoZSBjdXJzb3Igb24gdGhlCitjYWxsIHRvICJ3cml0ZV9saW5lIiBhbmQgcHJlc3NpbmcgQ1RSTC1dLCB5b3UganVtcCB0byB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzCitmdW5jdGlvbi4KKyAgIFRoZSAid3JpdGVfbGluZSIgZnVuY3Rpb24gY2FsbHMgIndyaXRlX2NoYXIiLiAgWW91IG5lZWQgdG8gZmlndXJlIG91dCB3aGF0CitpdCBkb2VzLiAgU28geW91IHBvc2l0aW9uIHRoZSBjdXJzb3Igb3ZlciB0aGUgY2FsbCB0byAid3JpdGVfY2hhciIgYW5kIHByZXNzCitDVFJMLV0uICBOb3cgeW91IGFyZSBhdCB0aGUgZGVmaW5pdGlvbiBvZiAid3JpdGVfY2hhciIuCisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8dm9pZCB3cml0ZV9ibG9jayhjaGFyICoqczsgaW50IGNudCkgIHwKKwl8ewkJCQkgICAgICB8CisJfCAgIGludCBpOwkJCSAgICAgIHwKKwl8ICAgZm9yIChpID0gMDsgaSA8IGNudDsgKytpKQkgICAgICB8CisJfCAgICAgIHdyaXRlX2xpbmUoc1tpXSk7CSAgICAgIHwKKwl8fQkgICAgfAkJCSAgICAgIHwKKwkrLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJICAgIHwKKwkgICAgIENUUkwtXSB8CisJCSAgICB8CSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJICAgICstLT4gfHZvaWQgd3JpdGVfbGluZShjaGFyICpzKSAgICB8CisJCQkgfHsJCQkgICAgICB8CisJCQkgfCAgIHdoaWxlICgqcyAhPSAwKQkgICAgICB8CisJCQkgfAl3cml0ZV9jaGFyKCpzKyspOyAgICAgfAorCQkJIHx9CSAgfAkJICAgICAgfAorCQkJICstLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tKworCQkJCSAgfAorCQkJICAgQ1RSTC1dIHwKKwkJCQkgIHwgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJCQkgICstLT4gfHZvaWQgd3JpdGVfY2hhcihjaGFyIGMpCQkgICAgfAorCQkJCSAgICAgICB8ewkJCQkgICAgfAorCQkJCSAgICAgICB8ICAgIHB1dGNoYXIoKGludCkodW5zaWduZWQgY2hhciljKTsgfAorCQkJCSAgICAgICB8fQkJCQkgICAgfAorCQkJCSAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUaGUgIjp0YWdzIiBjb21tYW5kIHNob3dzIHRoZSBsaXN0IG9mIHRhZ3MgdGhhdCB5b3UgdHJhdmVyc2VkIHRocm91Z2g6CisKKwk6dGFncworCSAgIyBUTyB0YWcJICAgRlJPTSBsaW5lICBpbiBmaWxlL3RleHQgfgorCSAgMSAgMSB3cml0ZV9saW5lCSAgIDggIHdyaXRlX2Jsb2NrLmMgfgorCSAgMiAgMSB3cml0ZV9jaGFyCSAgIDcgIHdyaXRlX2xpbmUuYyB+CisJPiB+Cis+CitOb3cgdG8gZ28gYmFjay4gIFRoZSBDVFJMLVQgY29tbWFuZCBnb2VzIHRvIHRoZSBwcmVjZWRpbmcgdGFnLiAgSW4gdGhlIGV4YW1wbGUKK2Fib3ZlIHlvdSBnZXQgYmFjayB0byB0aGUgIndyaXRlX2xpbmUiIGZ1bmN0aW9uLCBpbiB0aGUgY2FsbCB0byAid3JpdGVfY2hhciIuCisgICBUaGlzIGNvbW1hbmQgdGFrZXMgYSBjb3VudCBhcmd1bWVudCB0aGF0IGluZGljYXRlcyBob3cgbWFueSB0YWdzIHRvIGp1bXAKK2JhY2suICBZb3UgaGF2ZSBnb25lIGZvcndhcmQsIGFuZCBub3cgYmFjay4gIExldCdzIGdvIGZvcndhcmQgYWdhaW4uICBUaGUKK2ZvbGxvd2luZyBjb21tYW5kIGdvZXMgdG8gdGhlIHRhZyBvbiB0b3Agb2YgdGhlIGxpc3Q6ID4KKworCTp0YWcKKworWW91IGNhbiBwcmVmaXggaXQgd2l0aCBhIGNvdW50IGFuZCBqdW1wIGZvcndhcmQgdGhhdCBtYW55IHRhZ3MuICBGb3IgZXhhbXBsZToKKyI6M3RhZyIuICBDVFJMLVQgYWxzbyBjYW4gYmUgcHJlY2VkZWQgd2l0aCBhIGNvdW50LgorICAgVGhlc2UgY29tbWFuZHMgdGh1cyBhbGxvdyB5b3UgdG8gZ28gZG93biBhIGNhbGwgdHJlZSB3aXRoIENUUkwtXSBhbmQgYmFjawordXAgYWdhaW4gd2l0aCBDVFJMLVQuICBVc2UgIjp0YWdzIiB0byBmaW5kIG91dCB3aGVyZSB5b3UgYXJlLgorCisKK1NQTElUIFdJTkRPV1MKKworVGhlICI6dGFnIiBjb21tYW5kIHJlcGxhY2VzIHRoZSBmaWxlIGluIHRoZSBjdXJyZW50IHdpbmRvdyB3aXRoIHRoZSBvbmUKK2NvbnRhaW5pbmcgdGhlIG5ldyBmdW5jdGlvbi4gIEJ1dCBzdXBwb3NlIHlvdSB3YW50IHRvIHNlZSBub3Qgb25seSB0aGUgb2xkCitmdW5jdGlvbiBidXQgYWxzbyB0aGUgbmV3IG9uZT8gIFlvdSBjYW4gc3BsaXQgdGhlIHdpbmRvdyB1c2luZyB0aGUgIjpzcGxpdCIKK2NvbW1hbmQgZm9sbG93ZWQgYnkgdGhlICI6dGFnIiBjb21tYW5kLiAgVmltIGhhcyBhIHNob3J0aGFuZCBjb21tYW5kIHRoYXQgZG9lcworYm90aDogPgorCTpzdGFnIHRhZ25hbWUKKworVG8gc3BsaXQgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBqdW1wIHRvIHRoZSB0YWcgdW5kZXIgdGhlIGN1cnNvciB1c2UgdGhpcworY29tbWFuZDogPgorCisJQ1RSTC1XIF0KKworSWYgYSBjb3VudCBpcyBzcGVjaWZpZWQsIHRoZSBuZXcgd2luZG93IHdpbGwgYmUgdGhhdCBtYW55IGxpbmVzIGhpZ2guCisKKworTU9SRSBUQUdTIEZJTEVTCisKK1doZW4geW91IGhhdmUgZmlsZXMgaW4gbWFueSBkaXJlY3RvcmllcywgeW91IGNhbiBjcmVhdGUgYSB0YWdzIGZpbGUgaW4gZWFjaCBvZgordGhlbS4gIFZpbSB3aWxsIHRoZW4gb25seSBiZSBhYmxlIHRvIGp1bXAgdG8gdGFncyB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuCisgICBUbyBmaW5kIG1vcmUgdGFncyBmaWxlcywgc2V0IHRoZSAndGFncycgb3B0aW9uIHRvIGluY2x1ZGUgYWxsIHRoZSByZWxldmFudAordGFncyBmaWxlcy4gIEV4YW1wbGU6ID4KKworCTpzZXQgdGFncz0uL3RhZ3MsLi8uLi90YWdzLC4vKi90YWdzCisKK1RoaXMgZmluZHMgYSB0YWdzIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjdXJyZW50IGZpbGUsIG9uZQorZGlyZWN0b3J5IGxldmVsIGhpZ2hlciBhbmQgaW4gYWxsIHN1YmRpcmVjdG9yaWVzLgorICAgVGhpcyBpcyBxdWl0ZSBhIG51bWJlciBvZiB0YWdzIGZpbGVzLCBidXQgaXQgbWF5IHN0aWxsIG5vdCBiZSBlbm91Z2guICBGb3IKK2V4YW1wbGUsIHdoZW4gZWRpdGluZyBhIGZpbGUgaW4gIn4vcHJvai9zcmMiLCB5b3Ugd2lsbCBub3QgZmluZCB0aGUgdGFncyBmaWxlCisifi9wcm9qL3N1Yi90YWdzIi4gIEZvciB0aGlzIHNpdHVhdGlvbiBWaW0gb2ZmZXJzIHRvIHNlYXJjaCBhIHdob2xlIGRpcmVjdG9yeQordHJlZSBmb3IgdGFncyBmaWxlcy4gIEV4YW1wbGU6ID4KKworCTpzZXQgdGFncz1+L3Byb2ovKiovdGFncworCisKK09ORSBUQUdTIEZJTEUKKworV2hlbiBWaW0gaGFzIHRvIHNlYXJjaCBtYW55IHBsYWNlcyBmb3IgdGFncyBmaWxlcywgeW91IGNhbiBoZWFyIHRoZSBkaXNrCityYXR0bGluZy4gIEl0IG1heSBnZXQgYSBiaXQgc2xvdy4gIEluIHRoYXQgY2FzZSBpdCdzIGJldHRlciB0byBzcGVuZCB0aGlzCit0aW1lIHdoaWxlIGdlbmVyYXRpbmcgb25lIGJpZyB0YWdzIGZpbGUuICBZb3UgbWlnaHQgZG8gdGhpcyBvdmVybmlnaHQuCisgICBUaGlzIHJlcXVpcmVzIHRoZSBFeHViZXJhbnQgY3RhZ3MgcHJvZ3JhbSwgbWVudGlvbmVkIGFib3ZlLiAgSXQgb2ZmZXJzIGFuCithcmd1bWVudCB0byBzZWFyY2ggYSB3aG9sZSBkaXJlY3RvcnkgdHJlZTogPgorCisJY2Qgfi9wcm9qCisJY3RhZ3MgLVIgLgorCitUaGUgbmljZSB0aGluZyBhYm91dCB0aGlzIGlzIHRoYXQgRXh1YmVyYW50IGN0YWdzIHJlY29nbml6ZXMgdmFyaW91cyBmaWxlCit0eXBlcy4gIFRodXMgdGhpcyBkb2Vzbid0IHdvcmsganVzdCBmb3IgQyBhbmQgQysrIHByb2dyYW1zLCBhbHNvIGZvciBFaWZmZWwKK2FuZCBldmVuIFZpbSBzY3JpcHRzLiAgU2VlIHRoZSBjdGFncyBkb2N1bWVudGF0aW9uIHRvIHR1bmUgdGhpcy4KKyAgIE5vdyB5b3Ugb25seSBuZWVkIHRvIHRlbGwgVmltIHdoZXJlIHlvdXIgYmlnIHRhZ3MgZmlsZSBpczogPgorCisJOnNldCB0YWdzPX4vcHJvai90YWdzCisKKworTVVMVElQTEUgTUFUQ0hFUworCitXaGVuIGEgZnVuY3Rpb24gaXMgZGVmaW5lZCBtdWx0aXBsZSB0aW1lcyAob3IgYSBtZXRob2QgaW4gc2V2ZXJhbCBjbGFzc2VzKSwKK3RoZSAiOnRhZyIgY29tbWFuZCB3aWxsIGp1bXAgdG8gdGhlIGZpcnN0IG9uZS4gIElmIHRoZXJlIGlzIGEgbWF0Y2ggaW4gdGhlCitjdXJyZW50IGZpbGUsIHRoYXQgb25lIGlzIHVzZWQgZmlyc3QuCisgICBZb3UgY2FuIG5vdyBqdW1wIHRvIG90aGVyIG1hdGNoZXMgZm9yIHRoZSBzYW1lIHRhZyB3aXRoOiA+CisKKwk6dG5leHQKKworUmVwZWF0IHRoaXMgdG8gZmluZCBmdXJ0aGVyIG1hdGNoZXMuICBJZiB0aGVyZSBhcmUgbWFueSwgeW91IGNhbiBzZWxlY3Qgd2hpY2gKK29uZSB0byBqdW1wIHRvOiA+CisKKwk6dHNlbGVjdCB0YWduYW1lCisKK1ZpbSB3aWxsIHByZXNlbnQgeW91IHdpdGggYSBsaXN0IG9mIGNob2ljZXM6CisKKwkgICMgcHJpIGtpbmQgdGFnCSAgICAgICBmaWxlIH4KKwkgIDEgRglmICAgIG1jaF9pbml0CSAgICAgICBvc19hbWlnYS5jIH4KKwkJICAgICAgIG1jaF9pbml0KCkgfgorCSAgMiBGCWYgICAgbWNoX2luaXQJICAgICAgIG9zX21hYy5jIH4KKwkJICAgICAgIG1jaF9pbml0KCkgfgorCSAgMyBGCWYgICAgbWNoX2luaXQJICAgICAgIG9zX21zZG9zLmMgfgorCQkgICAgICAgbWNoX2luaXQodm9pZCkgfgorCSAgNCBGCWYgICAgbWNoX2luaXQJICAgICAgIG9zX3Jpc2Nvcy5jIH4KKwkJICAgICAgIG1jaF9pbml0KCkgfgorCUVudGVyIG5yIG9mIGNob2ljZSAoPENSPiB0byBhYm9ydCk6ICB+CisKK1lvdSBjYW4gbm93IGVudGVyIHRoZSBudW1iZXIgKGluIHRoZSBmaXJzdCBjb2x1bW4pIG9mIHRoZSBtYXRjaCB0aGF0IHlvdSB3b3VsZAorbGlrZSB0byBqdW1wIHRvLiAgVGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdGhlciBjb2x1bW5zIGdpdmUgeW91IGEgZ29vZCBpZGVhIG9mCit3aGVyZSB0aGUgbWF0Y2ggaXMgZGVmaW5lZC4KKworVG8gbW92ZSBiZXR3ZWVuIHRoZSBtYXRjaGluZyB0YWdzLCB0aGVzZSBjb21tYW5kcyBjYW4gYmUgdXNlZDoKKworCTp0Zmlyc3QJCQlnbyB0byBmaXJzdCBtYXRjaAorCTpbY291bnRddHByZXZpb3VzCWdvIHRvIFtjb3VudF0gcHJldmlvdXMgbWF0Y2gKKwk6W2NvdW50XXRuZXh0CQlnbyB0byBbY291bnRdIG5leHQgbWF0Y2gKKwk6dGxhc3QJCQlnbyB0byBsYXN0IG1hdGNoCisKK0lmIFtjb3VudF0gaXMgb21pdHRlZCB0aGVuIG9uZSBpcyB1c2VkLgorCisKK0dVRVNTSU5HIFRBRyBOQU1FUworCitDb21tYW5kIGxpbmUgY29tcGxldGlvbiBpcyBhIGdvb2Qgd2F5IHRvIGF2b2lkIHR5cGluZyBhIGxvbmcgdGFnIG5hbWUuICBKdXN0Cit0eXBlIHRoZSBmaXJzdCBiaXQgYW5kIHByZXNzIDxUYWI+OiA+CisKKwk6dGFnIHdyaXRlXzxUYWI+CisKK1lvdSB3aWxsIGdldCB0aGUgZmlyc3QgbWF0Y2guICBJZiBpdCdzIG5vdCB0aGUgb25lIHlvdSB3YW50LCBwcmVzcyA8VGFiPiB1bnRpbAoreW91IGZpbmQgdGhlIHJpZ2h0IG9uZS4KKyAgIFNvbWV0aW1lcyB5b3Ugb25seSBrbm93IHBhcnQgb2YgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbi4gIE9yIHlvdSBoYXZlIG1hbnkKK3RhZ3MgdGhhdCBzdGFydCB3aXRoIHRoZSBzYW1lIHN0cmluZywgYnV0IGVuZCBkaWZmZXJlbnRseS4gIFRoZW4geW91IGNhbiB0ZWxsCitWaW0gdG8gdXNlIGEgcGF0dGVybiB0byBmaW5kIHRoZSB0YWcuCisgICBTdXBwb3NlIHlvdSB3YW50IHRvIGp1bXAgdG8gYSB0YWcgdGhhdCBjb250YWlucyAiYmxvY2siLiAgRmlyc3QgdHlwZQordGhpczogPgorCisJOnRhZyAvYmxvY2sKKworTm93IHVzZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbjogcHJlc3MgPFRhYj4uICBWaW0gd2lsbCBmaW5kIGFsbCB0YWdzIHRoYXQKK2NvbnRhaW4gImJsb2NrIiBhbmQgdXNlIHRoZSBmaXJzdCBtYXRjaC4KKyAgIFRoZSAiLyIgYmVmb3JlIGEgdGFnIG5hbWUgdGVsbHMgVmltIHRoYXQgd2hhdCBmb2xsb3dzIGlzIG5vdCBhIGxpdGVyYWwgdGFnCituYW1lLCBidXQgYSBwYXR0ZXJuLiAgWW91IGNhbiB1c2UgYWxsIHRoZSBpdGVtcyBmb3Igc2VhcmNoIHBhdHRlcm5zIGhlcmUuICBGb3IKK2V4YW1wbGUsIHN1cHBvc2UgeW91IHdhbnQgdG8gc2VsZWN0IGEgdGFnIHRoYXQgc3RhcnRzIHdpdGggIndyaXRlXyI6ID4KKworCTp0c2VsZWN0IC9ed3JpdGVfCisKK1RoZSAiXiIgc3BlY2lmaWVzIHRoYXQgdGhlIHRhZyBzdGFydHMgd2l0aCAid3JpdGVfIi4gIE90aGVyd2lzZSBpdCB3b3VsZCBhbHNvCitiZSBmb3VuZCBoYWxmd2F5IGEgdGFnIG5hbWUuICBTaW1pbGFybHkgIiQiIGF0IHRoZSBlbmQgbWFrZXMgc3VyZSB0aGUgcGF0dGVybgorbWF0Y2hlcyB1bnRpbCB0aGUgZW5kIG9mIGEgdGFnLgorCisKK0EgVEFHUyBCUk9XU0VSCisKK1NpbmNlIENUUkwtXSB0YWtlcyB5b3UgdG8gdGhlIGRlZmluaXRpb24gb2YgdGhlIGlkZW50aWZpZXIgdW5kZXIgdGhlIGN1cnNvciwKK3lvdSBjYW4gdXNlIGEgbGlzdCBvZiBpZGVudGlmaWVyIG5hbWVzIGFzIGEgdGFibGUgb2YgY29udGVudHMuICBIZXJlIGlzIGFuCitleGFtcGxlLgorICAgRmlyc3QgY3JlYXRlIGEgbGlzdCBvZiBpZGVudGlmaWVycyAodGhpcyByZXF1aXJlcyBFeHViZXJhbnQgY3RhZ3MpOiA+CisKKwljdGFncyAtLWMtdHlwZXM9ZiAtZiBmdW5jdGlvbnMgKi5jCisKK05vdyBzdGFydCBWaW0gd2l0aG91dCBhIGZpbGUsIGFuZCBlZGl0IHRoaXMgZmlsZSBpbiBWaW0sIGluIGEgdmVydGljYWxseSBzcGxpdAord2luZG93OiA+CisKKwl2aW0KKwk6dnNwbGl0IGZ1bmN0aW9ucworCitUaGUgd2luZG93IGNvbnRhaW5zIGEgbGlzdCBvZiBhbGwgdGhlIGZ1bmN0aW9ucy4gIFRoZXJlIGlzIHNvbWUgbW9yZSBzdHVmZiwKK2J1dCB5b3UgY2FuIGlnbm9yZSB0aGF0LiAgRG8gIjpzZXRsb2NhbCB0cz05OSIgdG8gY2xlYW4gaXQgdXAgYSBiaXQuCisgICBJbiB0aGlzIHdpbmRvdywgZGVmaW5lIGEgbWFwcGluZzogPgorCisJOm5ub3JlbWFwIDxidWZmZXI+IDxDUj4gMHllPEMtVz53OnRhZyA8Qy1SPiI8Q1I+CisKK01vdmUgdGhlIGN1cnNvciB0byB0aGUgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBnbyB0by4KK05vdyBwcmVzcyA8RW50ZXI+LiAgVmltIHdpbGwgZ28gdG8gdGhlIG90aGVyIHdpbmRvdyBhbmQganVtcCB0byB0aGUgc2VsZWN0ZWQKK2Z1bmN0aW9uLgorCisKK1JFTEFURUQgSVRFTVMKKworWW91IGNhbiBzZXQgJ2lnbm9yZWNhc2UnIHRvIG1ha2UgY2FzZSBpbiB0YWcgbmFtZXMgYmUgaWdub3JlZC4KKworVGhlICd0YWdic2VhcmNoJyBvcHRpb24gdGVsbHMgaWYgdGhlIHRhZ3MgZmlsZSBpcyBzb3J0ZWQgb3Igbm90LiAgVGhlIGRlZmF1bHQKK2lzIHRvIGFzc3VtZSBhIHNvcnRlZCB0YWdzIGZpbGUsIHdoaWNoIG1ha2VzIGEgdGFncyBzZWFyY2ggYSBsb3QgZmFzdGVyLCBidXQKK2RvZXNuJ3Qgd29yayBpZiB0aGUgdGFncyBmaWxlIGlzbid0IHNvcnRlZC4KKworVGhlICd0YWdsZW5ndGgnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byB0ZWxsIFZpbSB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50CitjaGFyYWN0ZXJzIGluIGEgdGFnLgorCitXaGVuIHlvdSB1c2UgdGhlIFNOaUZGKyBwcm9ncmFtLCB5b3UgY2FuIHVzZSB0aGUgVmltIGludGVyZmFjZSB0byBpdCB8c25pZmZ8LgorU05pRkYrIGlzIGEgY29tbWVyY2lhbCBwcm9ncmFtLgorCitDc2NvcGUgaXMgYSBmcmVlIHByb2dyYW0uICBJdCBkb2VzIG5vdCBvbmx5IGZpbmQgcGxhY2VzIHdoZXJlIGFuIGlkZW50aWZpZXIgaXMKK2RlY2xhcmVkLCBidXQgYWxzbyB3aGVyZSBpdCBpcyB1c2VkLiAgU2VlIHxjc2NvcGV8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyOS4yKglUaGUgcHJldmlldyB3aW5kb3cKKworV2hlbiB5b3UgZWRpdCBjb2RlIHRoYXQgY29udGFpbnMgYSBmdW5jdGlvbiBjYWxsLCB5b3UgbmVlZCB0byB1c2UgdGhlIGNvcnJlY3QKK2FyZ3VtZW50cy4gIFRvIGtub3cgd2hhdCB2YWx1ZXMgdG8gcGFzcyB5b3UgY2FuIGxvb2sgYXQgaG93IHRoZSBmdW5jdGlvbiBpcworZGVmaW5lZC4gIFRoZSB0YWdzIG1lY2hhbmlzbSB3b3JrcyB2ZXJ5IHdlbGwgZm9yIHRoaXMuICBQcmVmZXJhYmx5IHRoZQorZGVmaW5pdGlvbiBpcyBkaXNwbGF5ZWQgaW4gYW5vdGhlciB3aW5kb3cuICBGb3IgdGhpcyB0aGUgcHJldmlldyB3aW5kb3cgY2FuIGJlCit1c2VkLgorICAgVG8gb3BlbiBhIHByZXZpZXcgd2luZG93IHRvIGRpc3BsYXkgdGhlIGZ1bmN0aW9uICJ3cml0ZV9jaGFyIjogPgorCisJOnB0YWcgd3JpdGVfY2hhcgorCitWaW0gd2lsbCBvcGVuIGEgd2luZG93LCBhbmQganVtcHMgdG8gdGhlIHRhZyAid3JpdGVfY2hhciIuICBUaGVuIGl0IHRha2VzIHlvdQorYmFjayB0byB0aGUgb3JpZ2luYWwgcG9zaXRpb24uICBUaHVzIHlvdSBjYW4gY29udGludWUgdHlwaW5nIHdpdGhvdXQgdGhlIG5lZWQKK3RvIHVzZSBhIENUUkwtVyBjb21tYW5kLgorICAgSWYgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBhcHBlYXJzIGluIHRoZSB0ZXh0LCB5b3UgY2FuIGdldCBpdHMgZGVmaW5pdGlvbgoraW4gdGhlIHByZXZpZXcgd2luZG93IHdpdGg6ID4KKworCUNUUkwtVyB9CisKK1RoZXJlIGlzIGEgc2NyaXB0IHRoYXQgYXV0b21hdGljYWxseSBkaXNwbGF5cyB0aGUgdGV4dCB3aGVyZSB0aGUgd29yZCB1bmRlcgordGhlIGN1cnNvciB3YXMgZGVmaW5lZC4gIFNlZSB8Q3Vyc29ySG9sZC1leGFtcGxlfC4KKworVG8gY2xvc2UgdGhlIHByZXZpZXcgd2luZG93IHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpwY2xvc2UKKworVG8gZWRpdCBhIHNwZWNpZmljIGZpbGUgaW4gdGhlIHByZXZpZXcgd2luZG93LCB1c2UgIjpwZWRpdCIuICBUaGlzIGNhbiBiZQordXNlZnVsIHRvIGVkaXQgYSBoZWFkZXIgZmlsZSwgZm9yIGV4YW1wbGU6ID4KKworCTpwZWRpdCBkZWZzLmgKKworRmluYWxseSwgIjpwc2VhcmNoIiBjYW4gYmUgdXNlZCB0byBmaW5kIGEgd29yZCBpbiB0aGUgY3VycmVudCBmaWxlIGFuZCBhbnkKK2luY2x1ZGVkIGZpbGVzIGFuZCBkaXNwbGF5IHRoZSBtYXRjaCBpbiB0aGUgcHJldmlldyB3aW5kb3cuICBUaGlzIGlzCitlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHVzaW5nIGxpYnJhcnkgZnVuY3Rpb25zLCBmb3Igd2hpY2ggeW91IGRvIG5vdCBoYXZlIGEKK3RhZ3MgZmlsZS4gIEV4YW1wbGU6ID4KKworCTpwc2VhcmNoIHBvcGVuCisKK1RoaXMgd2lsbCBzaG93IHRoZSAic3RkaW8uaCIgZmlsZSBpbiB0aGUgcHJldmlldyB3aW5kb3csIHdpdGggdGhlIGZ1bmN0aW9uCitwcm90b3R5cGUgZm9yIHBvcGVuKCk6CisKKwlGSUxFCSpwb3BlbiBfX1AoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7IH4KKworWW91IGNhbiBzcGVjaWZ5IHRoZSBoZWlnaHQgb2YgdGhlIHByZXZpZXcgd2luZG93LCB3aGVuIGl0IGlzIG9wZW5lZCwgd2l0aCB0aGUKKydwcmV2aWV3aGVpZ2h0JyBvcHRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI5LjMqCU1vdmluZyB0aHJvdWdoIGEgcHJvZ3JhbQorCitTaW5jZSBhIHByb2dyYW0gaXMgc3RydWN0dXJlZCwgVmltIGNhbiByZWNvZ25pemUgaXRlbXMgaW4gaXQuICBTcGVjaWZpYworY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gbW92ZSBhcm91bmQuCisgICBDIHByb2dyYW1zIG9mdGVuIGNvbnRhaW4gY29uc3RydWN0cyBsaWtlIHRoaXM6CisKKwkjaWZkZWYgVVNFX1BPUEVOIH4KKwkgICAgZmQgPSBwb3BlbigibHMiLCAiciIpIH4KKwkjZWxzZSB+CisJICAgIGZkID0gZm9wZW4oInRtcCIsICJ3IikgfgorCSNlbmRpZiB+CisKK0J1dCB0aGVuIG11Y2ggbG9uZ2VyLCBhbmQgcG9zc2libHkgbmVzdGVkLiAgUG9zaXRpb24gdGhlIGN1cnNvciBvbiB0aGUKKyIjaWZkZWYiIGFuZCBwcmVzcyAlLiAgVmltIHdpbGwganVtcCB0byB0aGUgIiNlbHNlIi4gIFByZXNzaW5nICUgYWdhaW4gdGFrZXMKK3lvdSB0byB0aGUgIiNlbmRpZiIuICBBbm90aGVyICUgdGFrZXMgeW91IHRvIHRoZSAiI2lmZGVmIiBhZ2Fpbi4KKyAgIFdoZW4gdGhlIGNvbnN0cnVjdCBpcyBuZXN0ZWQsIFZpbSB3aWxsIGZpbmQgdGhlIG1hdGNoaW5nIGl0ZW1zLiAgVGhpcyBpcyBhCitnb29kIHdheSB0byBjaGVjayBpZiB5b3UgZGlkbid0IGZvcmdldCBhbiAiI2VuZGlmIi4KKyAgIFdoZW4geW91IGFyZSBzb21ld2hlcmUgaW5zaWRlIGEgIiNpZiIgLSAiI2VuZGlmIiwgeW91IGNhbiBqdW1wIHRvIHRoZSBzdGFydAorb2YgaXQgd2l0aDogPgorCisJWyMKKworSWYgeW91IGFyZSBub3QgYWZ0ZXIgYSAiI2lmIiBvciAiI2lmZGVmIiBWaW0gd2lsbCBiZWVwLiAgVG8ganVtcCBmb3J3YXJkIHRvCit0aGUgbmV4dCAiI2Vsc2UiIG9yICIjZW5kaWYiIHVzZTogPgorCisJXSMKKworVGhlc2UgdHdvIGNvbW1hbmRzIHNraXAgYW55ICIjaWYiIC0gIiNlbmRpZiIgYmxvY2tzIHRoYXQgdGhleSBlbmNvdW50ZXIuCitFeGFtcGxlOgorCisJI2lmIGRlZmluZWQoSEFTX0lOQ19IKSB+CisJICAgIGEgPSBhICsgaW5jKCk7IH4KKwkjIGlmZGVmIFVTRV9USEVNRSB+CisJICAgIGEgKz0gMzsgfgorCSMgZW5kaWYgfgorCSAgICBzZXRfd2lkdGgoYSk7IH4KKworV2l0aCB0aGUgY3Vyc29yIGluIHRoZSBsYXN0IGxpbmUsICJbIyIgbW92ZXMgdG8gdGhlIGZpcnN0IGxpbmUuICBUaGUgIiNpZmRlZiIKKy0gIiNlbmRpZiIgYmxvY2sgaW4gdGhlIG1pZGRsZSBpcyBza2lwcGVkLgorCisKK01PVklORyBJTiBDT0RFIEJMT0NLUworCitJbiBDIGNvZGUgYmxvY2tzIGFyZSBlbmNsb3NlZCBpbiB7fS4gIFRoZXNlIGNhbiBnZXQgcHJldHR5IGxvbmcuICBUbyBtb3ZlIHRvCit0aGUgc3RhcnQgb2YgdGhlIG91dGVyIGJsb2NrIHVzZSB0aGUgIltbIiBjb21tYW5kLiAgVXNlICJdWyIgdG8gZmluZCB0aGUgZW5kLgorVGhpcyBhc3N1bWVzIHRoYXQgdGhlICJ7IiBhbmQgIn0iIGFyZSBpbiB0aGUgZmlyc3QgY29sdW1uLgorICAgVGhlICJbeyIgY29tbWFuZCBtb3ZlcyB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgYmxvY2suICBJdCBza2lwcyBvdmVyCitwYWlycyBvZiB7fSBhdCB0aGUgc2FtZSBsZXZlbC4gICJdfSIganVtcHMgdG8gdGhlIGVuZC4KKyAgIEFuIG92ZXJ2aWV3OgorCisJCQlmdW5jdGlvbihpbnQgYSkKKwkgICArLT4JCXsKKwkgICB8CQkgICAgaWYgKGEpCisJICAgfAkgICArLT4JICAgIHsKKwlbWyB8CSAgIHwJCWZvciAoOzspCSAgICAgICAtLSsKKwkgICB8CSAgIHwJICArLT4JewkJCSB8CisJICAgfAlbeyB8CSAgfAkgICAgZm9vKDMyKTsJCSB8ICAgICAtLSsKKwkgICB8CSAgIHwgICBbeyB8CSAgICBpZiAoYmFyKGEpKSAgLS0rCSB8IF19CSB8CisJICAgKy0tCSAgIHwJICArLS0JCWJyZWFrOwkgICB8IF19ICB8CSB8CisJCSAgIHwJCX0JCSA8LSsJIHwJIHwgXVsKKwkJICAgKy0tCQlmb29iYXIoYSkJCSB8CSB8CisJCQkgICAgfQkJCSAgICAgICA8LSsJIHwKKwkJCX0JCQkJICAgICAgIDwtKworCitXaGVuIHdyaXRpbmcgQysrIG9yIEphdmEsIHRoZSBvdXRlciB7fSBibG9jayBpcyBmb3IgdGhlIGNsYXNzLiAgVGhlIG5leHQgbGV2ZWwKK29mIHt9IGlzIGZvciBhIG1ldGhvZC4gIFdoZW4gc29tZXdoZXJlIGluc2lkZSBhIGNsYXNzIHVzZSAiW20iIHRvIGZpbmQgdGhlCitwcmV2aW91cyBzdGFydCBvZiBhIG1ldGhvZC4gICJdbSIgZmluZHMgdGhlIG5leHQgZW5kIG9mIGEgbWV0aG9kLgorCitBZGRpdGlvbmFsbHksICJbXSIgbW92ZXMgYmFja3dhcmQgdG8gdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGFuZCAiXV0iIG1vdmVzCitmb3J3YXJkIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBmdW5jdGlvbi4gIFRoZSBlbmQgb2YgYSBmdW5jdGlvbiBpcyBkZWZpbmVkCitieSBhICJ9IiBpbiB0aGUgZmlyc3QgY29sdW1uLgorCisJCQkJaW50IGZ1bmMxKHZvaWQpCisJCQkJeworCQkJCQlyZXR1cm4gMTsKKwkJICArLS0tLS0tLS0tLT4gIH0KKwkJICB8CisJICAgICAgW10gIHwJCWludCBmdW5jMih2b2lkKQorCQkgIHwJICAgKy0+CXsKKwkJICB8ICAgIFtbICB8CQlpZiAoZmxhZykKKwlzdGFydAkgICstLQkgICArLS0JCQlyZXR1cm4gZmxhZzsKKwkJICB8ICAgIF1bICB8CQlyZXR1cm4gMjsKKwkJICB8CSAgICstPgl9CisJICAgICAgXV0gIHwKKwkJICB8CQlpbnQgZnVuYzModm9pZCkKKwkJICArLS0tLS0tLS0tLT4JeworCQkJCQlyZXR1cm4gMzsKKwkJCQl9CisKK0Rvbid0IGZvcmdldCB5b3UgY2FuIGFsc28gdXNlICIlIiB0byBtb3ZlIGJldHdlZW4gbWF0Y2hpbmcgKCksIHt9IGFuZCBbXS4KK1RoYXQgYWxzbyB3b3JrcyB3aGVuIHRoZXkgYXJlIG1hbnkgbGluZXMgYXBhcnQuCisKKworTU9WSU5HIElOIEJSQUNFUworCitUaGUgIlsoIiBhbmQgIl0pIiBjb21tYW5kcyB3b3JrIHNpbWlsYXIgdG8gIlt7IiBhbmQgIl19IiwgZXhjZXB0IHRoYXQgdGhleQord29yayBvbiAoKSBwYWlycyBpbnN0ZWFkIG9mIHt9IHBhaXJzLgorPgorCQkJCSAgWygKKzwJCSAgICA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCSAgICAgIDwtLS0tLS0tCisJCWlmIChhID09IGIgJiYgKGMgPT0gZCB8fCAoZSA+IGYpKSAmJiB4ID4geSkgfgorCQkJCSAgLS0tLS0tLS0tLS0tLS0+CisJCQkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiA+CisJCQkJICAgICAgIF0pCisKK01PVklORyBJTiBDT01NRU5UUworCitUbyBtb3ZlIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIGEgY29tbWVudCB1c2UgIlsvIi4gIE1vdmUgZm9yd2FyZCB0byB0aGUgZW5kIG9mIGEKK2NvbW1lbnQgd2l0aCAiXS8iLiAgVGhpcyBvbmx5IHdvcmtzIGZvciAvKiAtICovIGNvbW1lbnRzLgorCisJICArLT4JICArLT4gLyoKKwkgIHwgICAgWy8gfCAgICAqIEEgY29tbWVudCBhYm91dCAgICAgIC0tKworICAgICAgIFsvIHwJICArLS0gICogd29uZGVyZnVsIGxpZmUuCXwgXS8KKwkgIHwJICAgICAgICovCQkgICAgICA8LSsKKwkgIHwKKwkgICstLQkgICAgICAgZm9vID0gYmFyICogMzsJICAgICAgLS0rCisJCQkJCQl8IF0vCisJCSAgICAgICAvKiBhIHNob3J0IGNvbW1lbnQgKi8gIDwtKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyOS40KglGaW5kaW5nIGdsb2JhbCBpZGVudGlmaWVycworCitZb3UgYXJlIGVkaXRpbmcgYSBDIHByb2dyYW0gYW5kIHdvbmRlciBpZiBhIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGFzICJpbnQiIG9yCisidW5zaWduZWQiLiAgQSBxdWljayB3YXkgdG8gZmluZCB0aGlzIGlzIHdpdGggdGhlICJbSSIgY29tbWFuZC4KKyAgIFN1cHBvc2UgdGhlIGN1cnNvciBpcyBvbiB0aGUgd29yZCAiY29sdW1uIi4gIFR5cGU6ID4KKworCVtJCisKK1ZpbSB3aWxsIGxpc3QgdGhlIG1hdGNoaW5nIGxpbmVzIGl0IGNhbiBmaW5kLiAgTm90IG9ubHkgaW4gdGhlIGN1cnJlbnQgZmlsZSwKK2J1dCBhbHNvIGluIGFsbCBpbmNsdWRlZCBmaWxlcyAoYW5kIGZpbGVzIGluY2x1ZGVkIGluIHRoZW0sIGV0Yy4pLiAgVGhlIHJlc3VsdAorbG9va3MgbGlrZSB0aGlzOgorCisJc3RydWN0cy5oIH4KKwkgMTogICAyOSAgICAgdW5zaWduZWQgICAgIGNvbHVtbjsgICAgLyogY29sdW1uIG51bWJlciAqLyB+CisKK1RoZSBhZHZhbnRhZ2Ugb3ZlciB1c2luZyB0YWdzIG9yIHRoZSBwcmV2aWV3IHdpbmRvdyBpcyB0aGF0IGluY2x1ZGVkIGZpbGVzIGFyZQorc2VhcmNoZWQuICBJbiBtb3N0IGNhc2VzIHRoaXMgcmVzdWx0cyBpbiB0aGUgcmlnaHQgZGVjbGFyYXRpb24gdG8gYmUgZm91bmQuCitBbHNvIHdoZW4gdGhlIHRhZ3MgZmlsZSBpcyBvdXQgb2YgZGF0ZS4gIEFsc28gd2hlbiB5b3UgZG9uJ3QgaGF2ZSB0YWdzIGZvciB0aGUKK2luY2x1ZGVkIGZpbGVzLgorICAgSG93ZXZlciwgYSBmZXcgdGhpbmdzIG11c3QgYmUgcmlnaHQgZm9yICJbSSIgdG8gZG8gaXRzIHdvcmsuICBGaXJzdCBvZiBhbGwsCit0aGUgJ2luY2x1ZGUnIG9wdGlvbiBtdXN0IHNwZWNpZnkgaG93IGEgZmlsZSBpcyBpbmNsdWRlZC4gIFRoZSBkZWZhdWx0IHZhbHVlCit3b3JrcyBmb3IgQyBhbmQgQysrLiAgRm9yIG90aGVyIGxhbmd1YWdlcyB5b3Ugd2lsbCBoYXZlIHRvIGNoYW5nZSBpdC4KKworCitMT0NBVElORyBJTkNMVURFRCBGSUxFUworCisgICBWaW0gd2lsbCBmaW5kIGluY2x1ZGVkIGZpbGVzIGluIHRoZSBwbGFjZXMgc3BlY2lmaWVkIHdpdGggdGhlICdwYXRoJworb3B0aW9uLiAgSWYgYSBkaXJlY3RvcnkgaXMgbWlzc2luZywgc29tZSBpbmNsdWRlIGZpbGVzIHdpbGwgbm90IGJlIGZvdW5kLiAgWW91CitjYW4gZGlzY292ZXIgdGhpcyB3aXRoIHRoaXMgY29tbWFuZDogPgorCisJOmNoZWNrcGF0aAorCitJdCB3aWxsIGxpc3QgdGhlIGluY2x1ZGUgZmlsZXMgdGhhdCBjb3VsZCBub3QgYmUgZm91bmQuICBBbHNvIGZpbGVzIGluY2x1ZGVkCitieSB0aGUgZmlsZXMgdGhhdCBjb3VsZCBiZSBmb3VuZC4gIEFuIGV4YW1wbGUgb2YgdGhlIG91dHB1dDoKKworCS0tLSBJbmNsdWRlZCBmaWxlcyBub3QgZm91bmQgaW4gcGF0aCAtLS0gfgorCTxpby5oPiB+CisJdmltLmggLS0+IH4KKwkgIDxmdW5jdGlvbnMuaD4gfgorCSAgPGNsaWIvZXhlY19wcm90b3MuaD4gfgorCitUaGUgImlvLmgiIGZpbGUgaXMgaW5jbHVkZWQgYnkgdGhlIGN1cnJlbnQgZmlsZSBhbmQgY2FuJ3QgYmUgZm91bmQuICAidmltLmgiCitjYW4gYmUgZm91bmQsIHRodXMgIjpjaGVja3BhdGgiIGdvZXMgaW50byB0aGlzIGZpbGUgYW5kIGNoZWNrcyB3aGF0IGl0CitpbmNsdWRlcy4gIFRoZSAiZnVuY3Rpb25zLmgiIGFuZCAiY2xpYi9leGVjX3Byb3Rvcy5oIiBmaWxlcywgaW5jbHVkZWQgYnkKKyJ2aW0uaCIgYXJlIG5vdCBmb3VuZC4KKworCU5vdGU6CisJVmltIGlzIG5vdCBhIGNvbXBpbGVyLiAgSXQgZG9lcyBub3QgcmVjb2duaXplICIjaWZkZWYiIHN0YXRlbWVudHMuCisJVGhpcyBtZWFucyBldmVyeSAiI2luY2x1ZGUiIHN0YXRlbWVudCBpcyB1c2VkLCBhbHNvIHdoZW4gaXQgY29tZXMKKwlhZnRlciAiI2lmIE5FVkVSIi4KKworVG8gZml4IHRoZSBmaWxlcyB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZCwgYWRkIGEgZGlyZWN0b3J5IHRvIHRoZSAncGF0aCcKK29wdGlvbi4gIEEgZ29vZCBwbGFjZSB0byBmaW5kIG91dCBhYm91dCB0aGlzIGlzIHRoZSBNYWtlZmlsZS4gIExvb2sgb3V0IGZvcgorbGluZXMgdGhhdCBjb250YWluICItSSIgaXRlbXMsIGxpa2UgIi1JL3Vzci9sb2NhbC9YMTEiLiAgVG8gYWRkIHRoaXMgZGlyZWN0b3J5Cit1c2U6ID4KKworCTpzZXQgcGF0aCs9L3Vzci9sb2NhbC9YMTEKKworV2hlbiB0aGVyZSBhcmUgbWFueSBzdWJkaXJlY3RvcmllcywgeW91IGFuIHVzZSB0aGUgIioiIHdpbGRjYXJkLiAgRXhhbXBsZTogPgorCisJOnNldCBwYXRoKz0vdXNyLyovaW5jbHVkZQorCitUaGlzIHdvdWxkIGZpbmQgZmlsZXMgaW4gIi91c3IvbG9jYWwvaW5jbHVkZSIgYXMgd2VsbCBhcyAiL3Vzci9YMTEvaW5jbHVkZSIuCisKK1doZW4gd29ya2luZyBvbiBhIHByb2plY3Qgd2l0aCBhIHdob2xlIG5lc3RlZCB0cmVlIG9mIGluY2x1ZGVkIGZpbGVzLCB0aGUgIioqIgoraXRlbXMgaXMgdXNlZnVsLiAgVGhpcyB3aWxsIHNlYXJjaCBkb3duIGluIGFsbCBzdWJkaXJlY3Rvcmllcy4gIEV4YW1wbGU6ID4KKworCTpzZXQgcGF0aCs9L3Byb2plY3RzL2ludmVudC8qKi9pbmNsdWRlCisKK1RoaXMgd2lsbCBmaW5kIGZpbGVzIGluIHRoZSBkaXJlY3RvcmllczoKKworCS9wcm9qZWN0cy9pbnZlbnQvaW5jbHVkZSB+CisJL3Byb2plY3RzL2ludmVudC9tYWluL2luY2x1ZGUgfgorCS9wcm9qZWN0cy9pbnZlbnQvbWFpbi9vcy9pbmNsdWRlIH4KKwlldGMuCisKK1RoZXJlIGFyZSBldmVuIG1vcmUgcG9zc2liaWxpdGllcy4gIENoZWNrIG91dCB0aGUgJ3BhdGgnIG9wdGlvbiBmb3IgaW5mby4KKyAgIElmIHlvdSB3YW50IHRvIHNlZSB3aGljaCBpbmNsdWRlZCBmaWxlcyBhcmUgYWN0dWFsbHkgZm91bmQsIHVzZSB0aGlzCitjb21tYW5kOiA+CisKKwk6Y2hlY2twYXRoIQorCitZb3Ugd2lsbCBnZXQgYSAodmVyeSBsb25nKSBsaXN0IG9mIGluY2x1ZGVkIGZpbGVzLCB0aGUgZmlsZXMgdGhleSBpbmNsdWRlLCBhbmQKK3NvIG9uLiAgVG8gc2hvcnRlbiB0aGUgbGlzdCBhIGJpdCwgVmltIHNob3dzICIoQWxyZWFkeSBsaXN0ZWQpIiBmb3IgZmlsZXMgdGhhdAord2VyZSBmb3VuZCBiZWZvcmUgYW5kIGRvZXNuJ3QgbGlzdCB0aGUgaW5jbHVkZWQgZmlsZXMgaW4gdGhlcmUgYWdhaW4uCisKKworSlVNUElORyBUTyBBIE1BVENICisKKyJbSSIgcHJvZHVjZXMgYSBsaXN0IHdpdGggb25seSBvbmUgbGluZSBvZiB0ZXh0LiAgV2hlbiB5b3Ugd2FudCB0byBoYXZlIGEKK2Nsb3NlciBsb29rIGF0IHRoZSBmaXJzdCBpdGVtLCB5b3UgY2FuIGp1bXAgdG8gdGhhdCBsaW5lIHdpdGggdGhlIGNvbW1hbmQ6ID4KKworCVs8VGFiPgorCitZb3UgY2FuIGFsc28gdXNlICJbIENUUkwtSSIsIHNpbmNlIENUUkwtSSBpcyB0aGUgc2FtZSBhcyBwcmVzc2luZyA8VGFiPi4KKworVGhlIGxpc3QgdGhhdCAiW0kiIHByb2R1Y2VzIGhhcyBhIG51bWJlciBhdCB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLiAgV2hlbiB5b3UKK3dhbnQgdG8ganVtcCB0byBhbm90aGVyIGl0ZW0gdGhhbiB0aGUgZmlyc3Qgb25lLCB0eXBlIHRoZSBudW1iZXIgZmlyc3Q6ID4KKworCTNbPFRhYj4KKworV2lsbCBqdW1wIHRvIHRoZSB0aGlyZCBpdGVtIGluIHRoZSBsaXN0LiAgUmVtZW1iZXIgdGhhdCB5b3UgY2FuIHVzZSBDVFJMLU8gdG8KK2p1bXAgYmFjayB0byB3aGVyZSB5b3Ugc3RhcnRlZCBmcm9tLgorCisKK1JFTEFURUQgQ09NTUFORFMKKworCVtpCQlvbmx5IGxpc3RzIHRoZSBmaXJzdCBtYXRjaAorCV1JCQlvbmx5IGxpc3RzIGl0ZW1zIGJlbG93IHRoZSBjdXJzb3IKKwldaQkJb25seSBsaXN0cyB0aGUgZmlyc3QgaXRlbSBiZWxvdyB0aGUgY3Vyc29yCisKKworRklORElORyBERUZJTkVEIElERU5USUZJRVJTCisKK1RoZSAiW0kiIGNvbW1hbmQgZmluZHMgYW55IGlkZW50aWZpZXIuICBUbyBmaW5kIG9ubHkgbWFjcm9zLCBkZWZpbmVkIHdpdGgKKyIjZGVmaW5lIiB1c2U6ID4KKworCVtECisKK0FnYWluLCB0aGlzIHNlYXJjaGVzIGluIGluY2x1ZGVkIGZpbGVzLiAgVGhlICdkZWZpbmUnIG9wdGlvbiBzcGVjaWZpZXMgd2hhdCBhCitsaW5lIGxvb2tzIGxpa2UgdGhhdCBkZWZpbmVzIHRoZSBpdGVtcyBmb3IgIltEIi4gIFlvdSBjb3VsZCBjaGFuZ2UgaXQgdG8gbWFrZQoraXQgd29yayB3aXRoIG90aGVyIGxhbmd1YWdlcyB0aGFuIEMgb3IgQysrLgorICAgVGhlIGNvbW1hbmRzIHJlbGF0ZWQgdG8gIltEIiBhcmU6CisKKwlbZAkJb25seSBsaXN0cyB0aGUgZmlyc3QgbWF0Y2gKKwldRAkJb25seSBsaXN0cyBpdGVtcyBiZWxvdyB0aGUgY3Vyc29yCisJXWQJCW9ubHkgbGlzdHMgdGhlIGZpcnN0IGl0ZW0gYmVsb3cgdGhlIGN1cnNvcgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyOS41KglGaW5kaW5nIGxvY2FsIGlkZW50aWZpZXJzCisKK1RoZSAiW0kiIGNvbW1hbmQgc2VhcmNoZXMgaW5jbHVkZWQgZmlsZXMuICBUbyBzZWFyY2ggaW4gdGhlIGN1cnJlbnQgZmlsZSBvbmx5LAorYW5kIGp1bXAgdG8gdGhlIGZpcnN0IHBsYWNlIHdoZXJlIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IgaXMgdXNlZDogPgorCisJZ0QKKworSGludDogR290byBEZWZpbml0aW9uLiAgVGhpcyBjb21tYW5kIGlzIHZlcnkgdXNlZnVsIHRvIGZpbmQgYSB2YXJpYWJsZSBvcgorZnVuY3Rpb24gdGhhdCB3YXMgZGVjbGFyZWQgbG9jYWxseSAoInN0YXRpYyIsIGluIEMgdGVybXMpLiAgRXhhbXBsZSAoY3Vyc29yIG9uCisiY291bnRlciIpOgorCisJICAgKy0+ICAgc3RhdGljIGludCBjb3VudGVyID0gMDsKKwkgICB8CisJICAgfCAgICAgaW50IGdldF9jb3VudGVyKHZvaWQpCisJZ0QgfCAgICAgeworCSAgIHwJICAgICArK2NvdW50ZXI7CisJICAgKy0tCSAgICAgcmV0dXJuIGNvdW50ZXI7CisJCSB9CisKK1RvIHJlc3RyaWN0IHRoZSBzZWFyY2ggZXZlbiBmdXJ0aGVyLCBhbmQgbG9vayBvbmx5IGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLAordXNlIHRoaXMgY29tbWFuZDogPgorCisJZ2QKKworVGhpcyB3aWxsIGdvIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFuZCBmaW5kIHRoZSBmaXJzdAorb2NjdXJyZW5jZSBvZiB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yLiAgQWN0dWFsbHksIGl0IHNlYXJjaGVzIGJhY2t3YXJkcyB0bworYW4gZW1wdHkgbGluZSBhYm92ZSB0aGUgYSAieyIgaW4gdGhlIGZpcnN0IGNvbHVtbi4gIEZyb20gdGhlcmUgaXQgc2VhcmNoZXMKK2ZvcndhcmQgZm9yIHRoZSBpZGVudGlmaWVyLiAgRXhhbXBsZSAoY3Vyc29yIG9uICJpZHgiKToKKworCQlpbnQgZmluZF9lbnRyeShjaGFyICpuYW1lKQorCQl7CisJICAgKy0+CSAgICBpbnQgaWR4OworCSAgIHwKKwlnZCB8CSAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IHRhYmxlX2xlbjsgKytpZHgpCisJICAgfAkJaWYgKHN0cmNtcCh0YWJsZVtpZHhdLm5hbWUsIG5hbWUpID09IDApCisJICAgKy0tCQkgICAgcmV0dXJuIGlkeDsKKwkJfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzMwLnR4dHwgIEVkaXRpbmcgcHJvZ3JhbXMKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMzAudHh0IGIvcnVudGltZS9kb2MvdXNyXzMwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODhmMDYwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzMwLnR4dApAQCAtMCwwICsxLDY0MyBAQAorKnVzcl8zMC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEphbiAxNworCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICAgRWRpdGluZyBwcm9ncmFtcworCisKK1ZpbSBoYXMgdmFyaW91cyBjb21tYW5kcyB0aGF0IGFpZCBpbiB3cml0aW5nIGNvbXB1dGVyIHByb2dyYW1zLiAgQ29tcGlsZSBhCitwcm9ncmFtIGFuZCBkaXJlY3RseSBqdW1wIHRvIHJlcG9ydGVkIGVycm9ycy4gIEF1dG9tYXRpY2FsbHkgc2V0IHRoZSBpbmRlbnQKK2ZvciBtYW55IGxhbmd1YWdlcyBhbmQgZm9ybWF0IGNvbW1lbnRzLgorCit8MzAuMXwJQ29tcGlsaW5nCit8MzAuMnwJSW5kZW50aW5nIEMgZmlsZXMKK3wzMC4zfAlBdXRvbWF0aWMgaW5kZW50aW5nCit8MzAuNHwJT3RoZXIgaW5kZW50aW5nCit8MzAuNXwJVGFicyBhbmQgc3BhY2VzCit8MzAuNnwJRm9ybWF0dGluZyBjb21tZW50cworCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8zMS50eHR8ICBFeHBsb2l0aW5nIHRoZSBHVUkKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzI5LnR4dHwgIE1vdmluZyB0aHJvdWdoIHByb2dyYW1zCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyozMC4xKglDb21waWxpbmcKKworVmltIGhhcyBhIHNldCBvZiBzbyBjYWxsZWQgInF1aWNrZml4IiBjb21tYW5kcy4gIFRoZXkgZW5hYmxlIHlvdSB0byBjb21waWxlIGEKK3Byb2dyYW0gZnJvbSB3aXRoaW4gVmltIGFuZCB0aGVuIGdvIHRocm91Z2ggdGhlIGVycm9ycyBnZW5lcmF0ZWQgYW5kIGZpeCB0aGVtCisoaG9wZWZ1bGx5KS4gIFlvdSBjYW4gdGhlbiByZWNvbXBpbGUgYW5kIGZpeCBhbnkgbmV3IGVycm9ycyB0aGF0IGFyZSBmb3VuZAordW50aWwgZmluYWxseSB5b3VyIHByb2dyYW0gY29tcGlsZXMgd2l0aG91dCBhbnkgZXJyb3IuCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZCBydW5zIHRoZSBwcm9ncmFtICJtYWtlIiAoc3VwcGx5aW5nIGl0IHdpdGggYW55IGFyZ3VtZW50Cit5b3UgZ2l2ZSkgYW5kIGNhcHR1cmVzIHRoZSByZXN1bHRzOiA+CisKKwk6bWFrZSB7YXJndW1lbnRzfQorCitJZiBlcnJvcnMgd2VyZSBnZW5lcmF0ZWQsIHRoZXkgYXJlIGNhcHR1cmVkIGFuZCB0aGUgZWRpdG9yIHBvc2l0aW9ucyB5b3Ugd2hlcmUKK3RoZSBmaXJzdCBlcnJvciBvY2N1cnJlZC4KKyAgIFRha2UgYSBsb29rIGF0IGFuIGV4YW1wbGUgIjptYWtlIiBzZXNzaW9uLiAoVHlwaWNhbCA6bWFrZSBzZXNzaW9ucyBnZW5lcmF0ZQorZmFyIG1vcmUgZXJyb3JzIGFuZCBmZXdlciBzdHVwaWQgb25lcy4pICBBZnRlciB0eXBpbmcgIjptYWtlIiB0aGUgc2NyZWVuIGxvb2tzCitsaWtlIHRoaXM6CisKKwk6IW1ha2UgfCAmdGVlIC90bXAvdmltMjE1OTUzLmVyciB+CisJZ2NjIC1nIC1XYWxsIC1vIHByb2cgbWFpbi5jIHN1Yi5jIH4KKwltYWluLmM6IEluIGZ1bmN0aW9uICdtYWluJzogfgorCW1haW4uYzo2OiB0b28gbWFueSBhcmd1bWVudHMgdG8gZnVuY3Rpb24gJ2RvX3N1YicgfgorCW1haW4uYzogQXQgdG9wIGxldmVsOiB+CisJbWFpbi5jOjEwOiBwYXJzZSBlcnJvciBiZWZvcmUgJ30nIH4KKwltYWtlOiAqKiogW3Byb2ddIEVycm9yIDEgfgorCisJMiByZXR1cm5lZCB+CisJIm1haW4uYyIgMTFMLCAxMTFDIH4KKwkoMyBvZiA2KTogdG9vIG1hbnkgYXJndW1lbnRzIHRvIGZ1bmN0aW9uICdkb19zdWInIH4KKwlIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIH4KKworRnJvbSB0aGlzIHlvdSBjYW4gc2VlIHRoYXQgeW91IGhhdmUgZXJyb3JzIGluIHRoZSBmaWxlICJtYWluLmMiLiAgV2hlbiB5b3UKK3ByZXNzIDxFbnRlcj4sIFZpbSBkaXNwbGF5cyB0aGUgZmlsZSAibWFpbi5jIiwgd2l0aCB0aGUgY3Vyc29yIHBvc2l0aW9uZWQgb24KK2xpbmUgNiwgdGhlIGZpcnN0IGxpbmUgd2l0aCBhbiBlcnJvci4gIFlvdSBkaWQgbm90IG5lZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBvcgordGhlIGxpbmUgbnVtYmVyLCBWaW0ga25ldyB3aGVyZSB0byBnbyBieSBsb29raW5nIGluIHRoZSBlcnJvciBtZXNzYWdlcy4KKworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8aW50IG1haW4oKQkJCQkJICAgIHwKKwkJfHsJCQkJCQkgICAgfAorCQl8CWludCBpPTM7CQkJCSAgICB8CisgICAgICBjdXJzb3IgLT4gfAlkb19zdWIoImZvbyIpOwkJCQkgICAgfAorCQl8CSsraTsJCQkJCSAgICB8CisJCXwJcmV0dXJuICgwKTsJCQkJICAgIHwKKwkJfH0JCQkJCQkgICAgfAorCQl8fQkJCQkJCSAgICB8CisJCXwgfgkJCQkJCSAgICB8CisJCXwoMyBvZiAxMik6IHRvbyBtYW55IGFyZ3VtZW50cyB0byBmdW5jdGlvbiAnZG9fc3ViJyB8CisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZCBnb2VzIHRvIHdoZXJlIHRoZSBuZXh0IGVycm9yIG9jY3VyczogPgorCisJOmNuZXh0CisKK1ZpbSBqdW1wcyB0byBsaW5lIDEwLCB0aGUgbGFzdCBsaW5lIGluIHRoZSBmaWxlLCB3aGVyZSB0aGVyZSBpcyBhbiBleHRyYSAnfScuCisgICBXaGVuIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSwgVmltIHdpbGwgc2hvcnRlbiB0aGUgZXJyb3IgbWVzc2FnZS4gIFRvIHNlZQordGhlIHdob2xlIG1lc3NhZ2UgdXNlOiA+CisKKwk6Y2MKKworWW91IGNhbiBnZXQgYW4gb3ZlcnZpZXcgb2YgYWxsIHRoZSBlcnJvciBtZXNzYWdlcyB3aXRoIHRoZSAiOmNsaXN0IiBjb21tYW5kLgorVGhlIG91dHB1dCBsb29rcyBsaWtlIHRoaXM6ID4KKworCTpjbGlzdAorPAkzIG1haW4uYzogNjp0b28gbWFueSBhcmd1bWVudHMgdG8gZnVuY3Rpb24gJ2RvX3N1YicgfgorCTUgbWFpbi5jOiAxMDpwYXJzZSBlcnJvciBiZWZvcmUgJ30nIH4KKworT25seSB0aGUgbGluZXMgd2hlcmUgVmltIHJlY29nbml6ZWQgYSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIGFyZSBsaXN0ZWQKK2hlcmUuICBJdCBhc3N1bWVzIHRob3NlIGFyZSB0aGUgaW50ZXJlc3RpbmcgbGluZXMgYW5kIHRoZSByZXN0IGlzIGp1c3QgYm9yaW5nCittZXNzYWdlcy4gIEhvd2V2ZXIsIHNvbWV0aW1lcyB1bnJlY29nbml6ZWQgbGluZXMgZG8gY29udGFpbiBzb21ldGhpbmcgeW91IHdhbnQKK3RvIHNlZS4gIE91dHB1dCBmcm9tIHRoZSBsaW5rZXIsIGZvciBleGFtcGxlLCBhYm91dCBhbiB1bmRlZmluZWQgZnVuY3Rpb24uCitUbyBzZWUgYWxsIHRoZSBtZXNzYWdlcyBhZGQgYSAiISIgdG8gdGhlIGNvbW1hbmQ6ID4KKworCTpjbGlzdCEKKzwJMSBnY2MgLWcgLVdhbGwgLW8gcHJvZyBtYWluLmMgc3ViLmMgfgorCTIgbWFpbi5jOiBJbiBmdW5jdGlvbiAnbWFpbic6IH4KKwkzIG1haW4uYzo2OiB0b28gbWFueSBhcmd1bWVudHMgdG8gZnVuY3Rpb24gJ2RvX3N1YicgfgorCTQgbWFpbi5jOiBBdCB0b3AgbGV2ZWw6IH4KKwk1IG1haW4uYzoxMDogcGFyc2UgZXJyb3IgYmVmb3JlICd9JyB+CisJNiBtYWtlOiAqKiogW3Byb2ddIEVycm9yIDEgfgorCitWaW0gd2lsbCBoaWdobGlnaHQgdGhlIGN1cnJlbnQgZXJyb3IuICBUbyBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBlcnJvciwgdXNlOgorPgorCTpjcHJldmlvdXMKKworT3RoZXIgY29tbWFuZHMgdG8gbW92ZSBhcm91bmQgaW4gdGhlIGVycm9yIGxpc3Q6CisKKwk6Y2ZpcnN0CQl0byBmaXJzdCBlcnJvcgorCTpjbGFzdAkJdG8gbGFzdCBlcnJvcgorCTpjYyAzCQl0byBlcnJvciBuciAzCisKKworVVNJTkcgQU5PVEhFUiBDT01QSUxFUgorCitUaGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byBydW4gd2hlbiB0aGUgIjptYWtlIiBjb21tYW5kIGlzIGV4ZWN1dGVkIGlzIGRlZmluZWQKK2J5IHRoZSAnbWFrZXByZycgb3B0aW9uLiAgVXN1YWxseSB0aGlzIGlzIHNldCB0byAibWFrZSIsIGJ1dCBWaXN1YWwgQysrIHVzZXJzCitzaG91bGQgc2V0IHRoaXMgdG8gIm5tYWtlIiBieSBleGVjdXRpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6c2V0IG1ha2Vwcmc9bm1ha2UKKworWW91IGNhbiBhbHNvIGluY2x1ZGUgYXJndW1lbnRzIGluIHRoaXMgb3B0aW9uLiAgU3BlY2lhbCBjaGFyYWN0ZXJzIG5lZWQgdG8KK2JlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaC4gIEV4YW1wbGU6ID4KKworCTpzZXQgbWFrZXByZz1ubWFrZVwgLWZcIHByb2plY3QubWFrCisKK1lvdSBjYW4gaW5jbHVkZSBzcGVjaWFsIFZpbSBrZXl3b3JkcyBpbiB0aGUgY29tbWFuZCBzcGVjaWZpY2F0aW9uLiAgVGhlICUKK2NoYXJhY3RlciBleHBhbmRzIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuICBTbyBpZiB5b3UgZXhlY3V0ZSB0aGUKK2NvbW1hbmQ6ID4KKwk6c2V0IG1ha2Vwcmc9bWFrZVwgJQorCitXaGVuIHlvdSBhcmUgZWRpdGluZyBtYWluLmMsIHRoZW4gIjptYWtlIiBleGVjdXRlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCW1ha2UgbWFpbi5jCisKK1RoaXMgaXMgbm90IHRvbyB1c2VmdWwsIHNvIHlvdSB3aWxsIHJlZmluZSB0aGUgY29tbWFuZCBhIGxpdHRsZSBhbmQgdXNlIHRoZSA6cgorKHJvb3QpIG1vZGlmaWVyOiA+CisKKwk6c2V0IG1ha2Vwcmc9bWFrZVwgJTpyLm8KKworTm93IHRoZSBjb21tYW5kIGV4ZWN1dGVkIGlzIGFzIGZvbGxvd3M6ID4KKworCW1ha2UgbWFpbi5vCisKK01vcmUgYWJvdXQgdGhlc2UgbW9kaWZpZXJzIGhlcmU6IHxmaWxlbmFtZS1tb2RpZmllcnN8LgorCisKK09MRCBFUlJPUiBMSVNUUworCitTdXBwb3NlIHlvdSAiOm1ha2UiIGEgcHJvZ3JhbS4gIFRoZXJlIGlzIGFuIHdhcm5pbmcgbWVzc2FnZSBpbiBvbmUgZmlsZSBhbmQgYW4KK2Vycm9yIG1lc3NhZ2UgaW4gYW5vdGhlci4gIFlvdSBmaXggdGhlIGVycm9yIGFuZCB1c2UgIjptYWtlIiBhZ2FpbiB0byBjaGVjayBpZgoraXQgd2FzIHJlYWxseSBmaXhlZC4gIE5vdyB5b3Ugd2FudCB0byBsb29rIGF0IHRoZSB3YXJuaW5nIG1lc3NhZ2UuICBJdCBkb2Vzbid0CitzaG93IHVwIGluIHRoZSBsYXN0IGVycm9yIGxpc3QsIHNpbmNlIHRoZSBmaWxlIHdpdGggdGhlIHdhcm5pbmcgd2Fzbid0Citjb21waWxlZCBhZ2Fpbi4gIFlvdSBjYW4gZ28gYmFjayB0byB0aGUgcHJldmlvdXMgZXJyb3IgbGlzdCB3aXRoOiA+CisKKwk6Y29sZGVyCisKK1RoZW4gdXNlICI6Y2xpc3QiIGFuZCAiOmNjIHtucn0iIHRvIGp1bXAgdG8gdGhlIHBsYWNlIHdpdGggdGhlIHdhcm5pbmcuCisgICBUbyBnbyBmb3J3YXJkIHRvIHRoZSBuZXh0IGVycm9yIGxpc3Q6ID4KKworCTpjbmV3ZXIKKworVmltIHJlbWVtYmVycyB0ZW4gZXJyb3IgbGlzdHMuCisKKworU1dJVENISU5HIENPTVBJTEVSUworCitZb3UgaGF2ZSB0byB0ZWxsIFZpbSB3aGF0IGZvcm1hdCB0aGUgZXJyb3IgbWVzc2FnZXMgYXJlIHRoYXQgeW91ciBjb21waWxlcgorcHJvZHVjZXMuICBUaGlzIGlzIGRvbmUgd2l0aCB0aGUgJ2Vycm9yZm9ybWF0JyBvcHRpb24uICBUaGUgc3ludGF4IG9mIHRoaXMKK29wdGlvbiBpcyBxdWl0ZSBjb21wbGljYXRlZCBhbmQgaXQgY2FuIGJlIG1hZGUgdG8gZml0IGFsbW9zdCBhbnkgY29tcGlsZXIuCitZb3UgY2FuIGZpbmQgdGhlIGV4cGxhbmF0aW9uIGhlcmU6IHxlcnJvcmZvcm1hdHwuCisKK1lvdSBtaWdodCBiZSB1c2luZyB2YXJpb3VzIGRpZmZlcmVudCBjb21waWxlcnMuICBTZXR0aW5nIHRoZSAnbWFrZXByZycgb3B0aW9uLAorYW5kIGVzcGVjaWFsbHkgdGhlICdlcnJvcmZvcm1hdCcgZWFjaCB0aW1lIGlzIG5vdCBlYXN5LiAgVmltIG9mZmVycyBhIHNpbXBsZQorbWV0aG9kIGZvciB0aGlzLiAgRm9yIGV4YW1wbGUsIHRvIHN3aXRjaCB0byB1c2luZyB0aGUgTWljcm9zb2Z0IFZpc3VhbCBDKysKK2NvbXBpbGVyOiA+CisKKwk6Y29tcGlsZXIgbXN2YworCitUaGlzIHdpbGwgZmluZCB0aGUgVmltIHNjcmlwdCBmb3IgdGhlICJtc3ZjIiBjb21waWxlciBhbmQgc2V0IHRoZSBhcHByb3ByaWF0ZQorb3B0aW9ucy4KKyAgIFlvdSBjYW4gd3JpdGUgeW91ciBvd24gY29tcGlsZXIgZmlsZXMuICBTZWUgfHdyaXRlLWNvbXBpbGVyLXBsdWdpbnwuCisKKworT1VUUFVUIFJFRElSRUNUSU9OCisKK1RoZSAiOm1ha2UiIGNvbW1hbmQgcmVkaXJlY3RzIHRoZSBvdXRwdXQgb2YgdGhlIGV4ZWN1dGVkIHByb2dyYW0gdG8gYW4gZXJyb3IKK2ZpbGUuICBIb3cgdGhpcyB3b3JrcyBkZXBlbmRzIG9uIHZhcmlvdXMgdGhpbmdzLCBzdWNoIGFzIHRoZSAnc2hlbGwnLiAgSWYgeW91cgorIjptYWtlIiBjb21tYW5kIGRvZXNuJ3QgY2FwdHVyZSB0aGUgb3V0cHV0LCBjaGVjayB0aGUgJ21ha2VlZicgYW5kCisnc2hlbGxwaXBlJyBvcHRpb25zLiAgVGhlICdzaGVsbHF1b3RlJyBhbmQgJ3NoZWxseHF1b3RlJyBvcHRpb25zIG1pZ2h0IGFsc28KK21hdHRlci4KKworSW4gY2FzZSB5b3UgY2FuJ3QgZ2V0ICI6bWFrZSIgdG8gcmVkaXJlY3QgdGhlIGZpbGUgZm9yIHlvdSwgYW4gYWx0ZXJuYXRpdmUgaXMKK3RvIGNvbXBpbGUgdGhlIHByb2dyYW0gaW4gYW5vdGhlciB3aW5kb3cgYW5kIHJlZGlyZWN0IHRoZSBvdXRwdXQgaW50byBhIGZpbGUuCitUaGVuIGhhdmUgVmltIHJlYWQgdGhpcyBmaWxlIHdpdGg6ID4KKworCTpjZmlsZSB7ZmlsZW5hbWV9CisKK0p1bXBpbmcgdG8gZXJyb3JzIHdpbGwgd29yayBsaWtlIHdpdGggdGhlICI6bWFrZSIgY29tbWFuZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMzAuMioJSW5kZW50aW5nIEMgZmlsZXMKKworQSBwcm9ncmFtIGlzIG11Y2ggZWFzaWVyIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGUgbGluZXMgaGF2ZSBiZWVuIHByb3Blcmx5CitpbmRlbnRlZC4gIFZpbSBvZmZlcnMgdmFyaW91cyB3YXlzIHRvIG1ha2UgdGhpcyBsZXNzIHdvcmsuCisgICBGb3IgQyBwcm9ncmFtcyBzZXQgdGhlICdjaW5kZW50JyBvcHRpb24uICBWaW0ga25vd3MgYSBsb3QgYWJvdXQgQyBwcm9ncmFtcworYW5kIHdpbGwgdHJ5IHZlcnkgaGFyZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUgaW5kZW50IGZvciB5b3UuICBTZXQgdGhlCisnc2hpZnR3aWR0aCcgb3B0aW9uIHRvIHRoZSBhbW91bnQgb2Ygc3BhY2VzIHlvdSB3YW50IGZvciBhIGRlZXBlciBsZXZlbC4gIEZvdXIKK3NwYWNlcyB3aWxsIHdvcmsgZmluZS4gIE9uZSAiOnNldCIgY29tbWFuZCB3aWxsIGRvIGl0OiA+CisKKwk6c2V0IGNpbmRlbnQgc2hpZnR3aWR0aD00CisKK1dpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgd2hlbiB5b3UgdHlwZSBzb21ldGhpbmcgc3VjaCBhcyAiaWYgKHgpIiwgdGhlIG5leHQKK2xpbmUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGluZGVudGVkIGFuIGFkZGl0aW9uYWwgbGV2ZWwuCisKKwkJCQkgICAgaWYgKGZsYWcpCisJQXV0b21hdGljIGluZGVudCAgIC0tLT4JCWRvX3RoZV93b3JrKCk7CisJQXV0b21hdGljIHVuaW5kZW50IDwtLQkgICAgaWYgKG90aGVyX2ZsYWcpIHsKKwlBdXRvbWF0aWMgaW5kZW50ICAgLS0tPgkJZG9fZmlsZSgpOworCWtlZXAgaW5kZW50CQkJZG9fc29tZV9tb3JlKCk7CisJQXV0b21hdGljIHVuaW5kZW50IDwtLQkgICAgfQorCitXaGVuIHlvdSB0eXBlIHNvbWV0aGluZyBpbiBjdXJseSBicmFjZXMgKHt9KSwgdGhlIHRleHQgd2lsbCBiZSBpbmRlbnRlZCBhdCB0aGUKK3N0YXJ0IGFuZCB1bmluZGVudGVkIGF0IHRoZSBlbmQuICBUaGUgdW5pbmRlbnRpbmcgd2lsbCBoYXBwZW4gYWZ0ZXIgdHlwaW5nIHRoZQorJ30nLCBzaW5jZSBWaW0gY2FuJ3QgZ3Vlc3Mgd2hhdCB5b3UgYXJlIGdvaW5nIHRvIHR5cGUuCisKK09uZSBzaWRlIGVmZmVjdCBvZiBhdXRvbWF0aWMgaW5kZW50YXRpb24gaXMgdGhhdCBpdCBoZWxwcyB5b3UgY2F0Y2ggZXJyb3JzIGluCit5b3VyIGNvZGUgZWFybHkuICBXaGVuIHlvdSB0eXBlIGEgfSB0byBmaW5pc2ggYSBmdW5jdGlvbiwgb25seSB0byBmaW5kIHRoYXQKK3RoZSBhdXRvbWF0aWMgaW5kZW50YXRpb24gZ2l2ZXMgaXQgbW9yZSBpbmRlbnQgdGhhbiB3aGF0IHlvdSBleHBlY3RlZCwgdGhlcmUKK2lzIHByb2JhYmx5IGEgfSBtaXNzaW5nLiAgVXNlIHRoZSAiJSIgY29tbWFuZCB0byBmaW5kIG91dCB3aGljaCB7IG1hdGNoZXMgdGhlCit9IHlvdSB0eXBlZC4KKyAgIEEgbWlzc2luZyApIGFuZCA7IGFsc28gY2F1c2UgZXh0cmEgaW5kZW50LiAgVGh1cyBpZiB5b3UgZ2V0IG1vcmUgd2hpdGUKK3NwYWNlIHRoYW4geW91IHdvdWxkIGV4cGVjdCwgY2hlY2sgdGhlIHByZWNlZGluZyBsaW5lcy4KKworV2hlbiB5b3UgaGF2ZSBjb2RlIHRoYXQgaXMgYmFkbHkgZm9ybWF0dGVkLCBvciB5b3UgaW5zZXJ0ZWQgYW5kIGRlbGV0ZWQgbGluZXMsCit5b3UgbmVlZCB0byByZS1pbmRlbnQgdGhlIGxpbmVzLiAgVGhlICI9IiBvcGVyYXRvciBkb2VzIHRoaXMuICBUaGUgc2ltcGxlc3QKK2Zvcm0gaXM6ID4KKworCT09CisKK1RoaXMgaW5kZW50cyB0aGUgY3VycmVudCBsaW5lLiAgTGlrZSB3aXRoIGFsbCBvcGVyYXRvcnMsIHRoZXJlIGFyZSB0aHJlZSB3YXlzCit0byB1c2UgaXQuICBJbiBWaXN1YWwgbW9kZSAiPSIgaW5kZW50cyB0aGUgc2VsZWN0ZWQgbGluZXMuICBBIHVzZWZ1bCB0ZXh0CitvYmplY3QgaXMgImF7Ii4gIFRoaXMgc2VsZWN0cyB0aGUgY3VycmVudCB7fSBibG9jay4gIFRodXMsIHRvIHJlLWluZGVudCB0aGUKK2NvZGUgY29kZSBibG9jayB0aGUgY3Vyc29yIGlzIGluOiA+CisKKwk9YXsKKworSSB5b3UgaGF2ZSByZWFsbHkgYmFkbHkgaW5kZW50ZWQgY29kZSwgeW91IGNhbiByZS1pbmRlbnQgdGhlIHdob2xlIGZpbGUgd2l0aDoKKz4KKwlnZz1HCisKK0hvd2V2ZXIsIGRvbid0IGRvIHRoaXMgaW4gZmlsZXMgdGhhdCBoYXZlIGJlZW4gY2FyZWZ1bGx5IGluZGVudGVkIG1hbnVhbGx5LgorVGhlIGF1dG9tYXRpYyBpbmRlbnRpbmcgZG9lcyBhIGdvb2Qgam9iLCBidXQgaW4gc29tZSBzaXR1YXRpb25zIHlvdSBtaWdodCB3YW50Cit0byBvdmVycnVsZSBpdC4KKworCitTRVRUSU5HIElOREVOVCBTVFlMRQorCitEaWZmZXJlbnQgcGVvcGxlIGhhdmUgZGlmZmVyZW50IHN0eWxlcyBvZiBpbmRlbnRhdGlvbi4gIEJ5IGRlZmF1bHQgVmltIGRvZXMgYQorcHJldHR5IGdvb2Qgam9iIG9mIGluZGVudGluZyBpbiBhIHdheSB0aGF0IDkwJSBvZiBwcm9ncmFtbWVycyBkby4gIFRoZXJlIGFyZQorZGlmZmVyZW50IHN0eWxlcywgaG93ZXZlcjsgc28gaWYgeW91IHdhbnQgdG8sIHlvdSBjYW4gY3VzdG9taXplIHRoZQoraW5kZW50YXRpb24gc3R5bGUgd2l0aCB0aGUgJ2Npbm9wdGlvbnMnIG9wdGlvbi4KKyAgIEJ5IGRlZmF1bHQgJ2Npbm9wdGlvbnMnIGlzIGVtcHR5IGFuZCBWaW0gdXNlcyB0aGUgZGVmYXVsdCBzdHlsZS4gIFlvdSBjYW4KK2FkZCB2YXJpb3VzIGl0ZW1zIHdoZXJlIHlvdSB3YW50IHNvbWV0aGluZyBkaWZmZXJlbnQuICBGb3IgZXhhbXBsZSwgdG8gbWFrZQorY3VybHkgYnJhY2VzIGJlIHBsYWNlZCBsaWtlIHRoaXM6CisKKwlpZiAoZmxhZykgfgorCSAgeyB+CisJICAgIGkgPSA4OyB+CisJICAgIGogPSAwOyB+CisJICB9IH4KKworVXNlIHRoaXMgY29tbWFuZDogPgorCisJOnNldCBjaW5vcHRpb25zKz17MgorCitUaGVyZSBhcmUgbWFueSBvZiB0aGVzZSBpdGVtcy4gIFNlZSB8Y2lub3B0aW9ucy12YWx1ZXN8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyozMC4zKglBdXRvbWF0aWMgaW5kZW50aW5nCisKK1lvdSBkb24ndCB3YW50IHRvIHN3aXRjaCBvbiB0aGUgJ2NpbmRlbnQnIG9wdGlvbiBtYW51YWxseSBldmVyeSB0aW1lIHlvdSBlZGl0CithIEMgZmlsZS4gIFRoaXMgaXMgaG93IHlvdSBtYWtlIGl0IHdvcmsgYXV0b21hdGljYWxseTogPgorCisJOmZpbGV0eXBlIGluZGVudCBvbgorCitBY3R1YWxseSwgdGhpcyBkb2VzIGEgbG90IG1vcmUgdGhhbiBzd2l0Y2hpbmcgb24gJ2NpbmRlbnQnIGZvciBDIGZpbGVzLiAgRmlyc3QKK29mIGFsbCwgaXQgZW5hYmxlcyBkZXRlY3RpbmcgdGhlIHR5cGUgb2YgYSBmaWxlLiAgVGhhdCdzIHRoZSBzYW1lIGFzIHdoYXQgaXMKK3VzZWQgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcuCisgICBXaGVuIHRoZSBmaWxldHlwZSBpcyBrbm93biwgVmltIHdpbGwgc2VhcmNoIGZvciBhbiBpbmRlbnQgZmlsZSBmb3IgdGhpcwordHlwZSBvZiBmaWxlLiAgVGhlIFZpbSBkaXN0cmlidXRpb24gaW5jbHVkZXMgYSBudW1iZXIgb2YgdGhlc2UgZm9yIHZhcmlvdXMKK3Byb2dyYW1taW5nIGxhbmd1YWdlcy4gIFRoaXMgaW5kZW50IGZpbGUgd2lsbCB0aGVuIHByZXBhcmUgZm9yIGF1dG9tYXRpYworaW5kZW50aW5nIHNwZWNpZmljYWxseSBmb3IgdGhpcyBmaWxlLgorCitJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgYXV0b21hdGljIGluZGVudGluZywgeW91IGNhbiBzd2l0Y2ggaXQgb2ZmIGFnYWluOiA+CisKKwk6ZmlsZXR5cGUgaW5kZW50IG9mZgorCitJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgaW5kZW50aW5nIGZvciBvbmUgc3BlY2lmaWMgdHlwZSBvZiBmaWxlLCB0aGlzIGlzIGhvdyB5b3UKK2F2b2lkIGl0LiAgQ3JlYXRlIGEgZmlsZSB3aXRoIGp1c3QgdGhpcyBvbmUgbGluZTogPgorCisJOmxldCBiOmRpZF9pbmRlbnQgPSAxCisKK05vdyB5b3UgbmVlZCB0byB3cml0ZSB0aGlzIGluIGEgZmlsZSB3aXRoIGEgc3BlY2lmaWMgbmFtZToKKworCXtkaXJlY3Rvcnl9L2luZGVudC97ZmlsZXR5cGV9LnZpbQorCitUaGUge2ZpbGV0eXBlfSBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0eXBlLCBzdWNoIGFzICJjcHAiIG9yICJqYXZhIi4gIFlvdSBjYW4KK3NlZSB0aGUgZXhhY3QgbmFtZSB0aGF0IFZpbSBkZXRlY3RlZCB3aXRoIHRoaXMgY29tbWFuZDogPgorCisJOnNldCBmaWxldHlwZQorCitJbiB0aGlzIGZpbGUgdGhlIG91dHB1dCBpczoKKworCWZpbGV0eXBlPWhlbHAgfgorCitUaGlzIHlvdSB3b3VsZCB1c2UgImhlbHAiIGZvciB7ZmlsZXR5cGV9LgorICAgRm9yIHRoZSB7ZGlyZWN0b3J5fSBwYXJ0IHlvdSBuZWVkIHRvIHVzZSB5b3VyIHJ1bnRpbWUgZGlyZWN0b3J5LiAgTG9vayBhdAordGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQ6ID4KKworCXNldCBydW50aW1lcGF0aAorCitOb3cgdXNlIHRoZSBmaXJzdCBpdGVtLCB0aGUgbmFtZSBiZWZvcmUgdGhlIGZpcnN0IGNvbW1hLiAgVGh1cyBpZiB0aGUgb3V0cHV0Citsb29rcyBsaWtlIHRoaXM6CisKKwlydW50aW1lcGF0aD1+Ly52aW0sL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltNjAvcnVudGltZSx+Ly52aW0vYWZ0ZXIgfgorCitZb3UgdXNlICJ+Ly52aW0iIGZvciB7ZGlyZWN0b3J5fS4gIFRoZW4gdGhlIHJlc3VsdGluZyBmaWxlIG5hbWUgaXM6CisKKwl+Ly52aW0vaW5kZW50L2hlbHAudmltIH4KKworSW5zdGVhZCBvZiBzd2l0Y2hpbmcgdGhlIGluZGVudGluZyBvZmYsIHlvdSBjb3VsZCB3cml0ZSB5b3VyIG93biBpbmRlbnQgZmlsZS4KK0hvdyB0byBkbyB0aGF0IGlzIGV4cGxhaW5lZCBoZXJlOiB8aW5kZW50LWV4cHJlc3Npb258LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyozMC40KglPdGhlciBpbmRlbnRpbmcKKworVGhlIG1vc3Qgc2ltcGxlIGZvcm0gb2YgYXV0b21hdGljIGluZGVudGluZyBpcyB3aXRoIHRoZSAnYXV0b2luZGVudCcgb3B0aW9uLgorSXQgdXNlcyB0aGUgaW5kZW50IGZyb20gdGhlIHByZXZpb3VzIGxpbmUuICBBIGJpdCBzbWFydGVyIGlzIHRoZSAnc21hcnRpbmRlbnQnCitvcHRpb24uICBUaGlzIGlzIHVzZWZ1bCBmb3IgbGFuZ3VhZ2VzIHdoZXJlIG5vIGluZGVudCBmaWxlIGlzIGF2YWlsYWJsZS4KKydzbWFydGluZGVudCdpcyBub3QgYXMgc21hcnQgYXMgJ2NpbmRlbnQnLCBidXQgc21hcnRlciB0aGFuICdhdXRvaW5kZW50Jy4KKyAgIFdpdGggJ3NtYXJ0aW5kZW50JyBzZXQsIGFuIGV4dHJhIGxldmVsIG9mIGluZGVudGF0aW9uIGlzIGFkZGVkIGZvciBlYWNoIHsKK2FuZCByZW1vdmVkIGZvciBlYWNoIH0uICBBbiBleHRyYSBsZXZlbCBvZiBpbmRlbnRhdGlvbiB3aWxsIGFsc28gYmUgYWRkZWQgZm9yCithbnkgb2YgdGhlIHdvcmRzIGluIHRoZSAnY2lud29yZHMnIG9wdGlvbi4gIExpbmVzIHRoYXQgYmVnaW4gd2l0aCAjIGFyZQordHJlYXRlZCBzcGVjaWFsbHk6IGFsbCBpbmRlbnRhdGlvbiBpcyByZW1vdmVkLiAgVGhpcyBpcyBkb25lIHNvIHRoYXQKK3ByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgYWxsIHN0YXJ0IGluIGNvbHVtbiAxLiAgVGhlIGluZGVudGF0aW9uIGlzCityZXN0b3JlZCBmb3IgdGhlIG5leHQgbGluZS4KKworCitDT1JSRUNUSU5HIElOREVOVFMKKworV2hlbiB5b3UgYXJlIHVzaW5nICdhdXRvaW5kZW50JyBvciAnc21hcnRpbmRlbnQnIHRvIGdldCB0aGUgaW5kZW50IG9mIHRoZQorcHJldmlvdXMgbGluZSwgdGhlcmUgd2lsbCBiZSBtYW55IHRpbWVzIHdoZW4geW91IG5lZWQgdG8gYWRkIG9yIHJlbW92ZSBvbmUKKydzaGlmdHdpZHRoJyB3b3J0aCBvZiBpbmRlbnQuICBBIHF1aWNrIHdheSB0byBkbyB0aGlzIGlzIHVzaW5nIHRoZSBDVFJMLUQgYW5kCitDVFJMLVQgY29tbWFuZHMgaW4gSW5zZXJ0IG1vZGUuCisgICBGb3IgZXhhbXBsZSwgeW91IGFyZSB0eXBpbmcgYSBzaGVsbCBzY3JpcHQgdGhhdCBpcyBzdXBwb3NlZCB0byBsb29rIGxpa2UKK3RoaXM6CisKKwlpZiB0ZXN0IC1uIGE7IHRoZW4gfgorCSAgIGVjaG8gYSB+CisJICAgZWNobyAiLS0tLS0tLSIgfgorCWZpIH4KKworU3RhcnQgb2ZmIGJ5IHNldHRpbmcgdGhlc2Ugb3B0aW9uOiA+CisKKwk6c2V0IGF1dG9pbmRlbnQgc2hpZnR3aWR0aD0zCisKK1lvdSBzdGFydCBieSB0eXBpbmcgdGhlIGZpcnN0IGxpbmUsIDxFbnRlcj4gYW5kIHRoZSBzdGFydCBvZiB0aGUgc2Vjb25kIGxpbmU6CisKKwlpZiB0ZXN0IC1uIGE7IHRoZW4gfgorCWVjaG8gfgorCitOb3cgeW91IHNlZSB0aGF0IHlvdSBuZWVkIGFuIGV4dHJhIGluZGVudC4gIFR5cGUgQ1RSTC1ULiAgVGhlIHJlc3VsdDoKKworCWlmIHRlc3QgLW4gYTsgdGhlbiB+CisJICAgZWNobyB+CisKK1RoZSBDVFJMLVQgY29tbWFuZCwgaW4gSW5zZXJ0IG1vZGUsIGFkZHMgb25lICdzaGlmdHdpZHRoJyB0byB0aGUgaW5kZW50LCBubworbWF0dGVyIHdoZXJlIGluIHRoZSBsaW5lIHlvdSBhcmUuCisgICBZb3UgY29udGludWUgdHlwaW5nIHRoZSBzZWNvbmQgbGluZSwgPEVudGVyPiBhbmQgdGhlIHRoaXJkIGxpbmUuICBUaGlzIHRpbWUKK3RoZSBpbmRlbnQgaXMgT0suICBUaGVuIDxFbnRlcj4gYW5kIHRoZSBsYXN0IGxpbmUuICBOb3cgeW91IGhhdmUgdGhpczoKKworCWlmIHRlc3QgLW4gYTsgdGhlbiB+CisJICAgZWNobyBhIH4KKwkgICBlY2hvICItLS0tLS0tIiB+CisJICAgZmkgfgorCitUbyByZW1vdmUgdGhlIHN1cGVyZmx1b3VzIGluZGVudCBpbiB0aGUgbGFzdCBsaW5lIHByZXNzIENUUkwtRC4gIFRoaXMgZGVsZXRlcworb25lICdzaGlmdHdpZHRoJyB3b3J0aCBvZiBpbmRlbnQsIG5vIG1hdHRlciB3aGVyZSB5b3UgYXJlIGluIHRoZSBsaW5lLgorICAgV2hlbiB5b3UgYXJlIGluIE5vcm1hbCBtb2RlLCB5b3UgY2FuIHVzZSB0aGUgIj4+IiBhbmQgIjw8IiBjb21tYW5kcyB0bworc2hpZnQgbGluZXMuICAiPiIgYW5kICI8IiBhcmUgb3BlcmF0b3JzLCB0aHVzIHlvdSBoYXZlIHRoZSB1c3VhbCB0aHJlZSB3YXlzIHRvCitzcGVjaWZ5IHRoZSBsaW5lcyB5b3Ugd2FudCB0byBpbmRlbnQuICBBIHVzZWZ1bCBjb21iaW5hdGlvbiBpczogPgorCisJPml7CisKK1RoaXMgYWRkcyBvbmUgaW5kZW50IHRvIHRoZSBjdXJyZW50IGJsb2NrIG9mIGxpbmVzLCBpbnNpZGUge30uICBUaGUgeyBhbmQgfQorbGluZXMgdGhlbXNlbHZlcyBhcmUgbGVmdCB1bm1vZGlmaWVkLiAgIj5heyIgaW5jbHVkZXMgdGhlbS4gIEluIHRoaXMgZXhhbXBsZQordGhlIGN1cnNvciBpcyBvbiAicHJpbnRmIjoKKworCW9yaWdpbmFsIHRleHQJCWFmdGVyICI+aXsiCQlhZnRlciAiPmF7IgorCisJaWYgKGZsYWcpCQlpZiAoZmxhZykJCWlmIChmbGFnKSB+CisJewkJCXsJCQkgICAgeyB+CisJcHJpbnRmKCJ5ZXMiKTsJCSAgICBwcmludGYoInllcyIpOwkgICAgcHJpbnRmKCJ5ZXMiKTsgfgorCWZsYWcgPSAwOwkJICAgIGZsYWcgPSAwOwkJICAgIGZsYWcgPSAwOyAgfgorCX0JCQl9CQkJICAgIH0gfgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyozMC41KglUYWJzIGFuZCBzcGFjZXMKKworJ3RhYnN0b3AnIGlzIHNldCB0byBlaWdodCBieSBkZWZhdWx0LiAgQWx0aG91Z2ggeW91IGNhbiBjaGFuZ2UgaXQsIHlvdSBxdWlja2x5CitydW4gaW50byB0cm91YmxlIGxhdGVyLiAgT3RoZXIgcHJvZ3JhbXMgd29uJ3Qga25vdyB3aGF0IHRhYnN0b3AgdmFsdWUgeW91Cit1c2VkLiAgVGhleSBwcm9iYWJseSB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgZWlnaHQsIGFuZCB5b3VyIHRleHQgc3VkZGVubHkKK2xvb2tzIHZlcnkgZGlmZmVyZW50LiAgQWxzbywgbW9zdCBwcmludGVycyB1c2UgYSBmaXhlZCB0YWJzdG9wIHZhbHVlIG9mIGVpZ2h0LgorVGh1cyBpdCdzIGJlc3QgdG8ga2VlcCAndGFic3RvcCcgYWxvbmUuICAoSWYgeW91IGVkaXQgYSBmaWxlIHdoaWNoIHdhcyB3cml0dGVuCit3aXRoIGEgZGlmZmVyZW50IHRhYnN0b3Agc2V0dGluZywgc2VlIHwyNS4zfCBmb3IgaG93IHRvIGZpeCB0aGF0LikKKyAgIEZvciBpbmRlbnRpbmcgbGluZXMgaW4gYSBwcm9ncmFtLCB1c2luZyBhIG11bHRpcGxlIG9mIGVpZ2h0IHNwYWNlcyBtYWtlcworeW91IHF1aWNrbHkgcnVuIGludG8gdGhlIHJpZ2h0IGJvcmRlciBvZiB0aGUgd2luZG93LiAgVXNpbmcgYSBzaW5nbGUgc3BhY2UKK2RvZXNuJ3QgcHJvdmlkZSBlbm91Z2ggdmlzdWFsIGRpZmZlcmVuY2UuICBNYW55IHBlb3BsZSBwcmVmZXIgdG8gdXNlIGZvdXIKK3NwYWNlcywgYSBnb29kIGNvbXByb21pc2UuCisgICBTaW5jZSBhIDxUYWI+IGlzIGVpZ2h0IHNwYWNlcyBhbmQgeW91IHdhbnQgdG8gdXNlIGFuIGluZGVudCBvZiBmb3VyIHNwYWNlcywKK3lvdSBjYW4ndCB1c2UgYSA8VGFiPiBjaGFyYWN0ZXIgdG8gbWFrZSB5b3VyIGluZGVudC4gIFRoZXJlIGFyZSB0d28gd2F5cyB0bworaGFuZGxlIHRoaXM6CisKKzEuICBVc2UgYSBtaXggb2YgPFRhYj4gYW5kIHNwYWNlIGNoYXJhY3RlcnMuICBTaW5jZSBhIDxUYWI+IHRha2VzIHRoZSBwbGFjZSBvZgorICAgIGVpZ2h0IHNwYWNlcywgeW91IGhhdmUgZmV3ZXIgY2hhcmFjdGVycyBpbiB5b3VyIGZpbGUuICBJbnNlcnRpbmcgYSA8VGFiPgorICAgIGlzIHF1aWNrZXIgdGhhbiBlaWdodCBzcGFjZXMuICBCYWNrc3BhY2luZyB3b3JrcyBmYXN0ZXIgYXMgd2VsbC4KKworMi4gIFVzZSBzcGFjZXMgb25seS4gIFRoaXMgYXZvaWRzIHRoZSB0cm91YmxlIHdpdGggcHJvZ3JhbXMgdGhhdCB1c2UgYQorICAgIGRpZmZlcmVudCB0YWJzdG9wIHZhbHVlLgorCitGb3J0dW5hdGVseSwgVmltIHN1cHBvcnRzIGJvdGggbWV0aG9kcyBxdWl0ZSB3ZWxsLgorCisKK1NQQUNFUyBBTkQgVEFCUworCitJZiB5b3UgYXJlIHVzaW5nIGEgY29tYmluYXRpb24gb2YgdGFicyBhbmQgc3BhY2VzLCB5b3UganVzdCBlZGl0IG5vcm1hbGx5LgorVGhlIFZpbSBkZWZhdWx0cyBkbyBhIGZpbmUgam9iIG9mIGhhbmRsaW5nIHRoaW5ncy4KKyAgIFlvdSBjYW4gbWFrZSBsaWZlIGEgbGl0dGxlIGVhc2llciBieSBzZXR0aW5nIHRoZSAnc29mdHRhYnN0b3AnIG9wdGlvbi4KK1RoaXMgb3B0aW9uIHRlbGxzIFZpbSB0byBtYWtlIHRoZSA8VGFiPiBrZXkgbG9vayBhbmQgZmVlbCBhcyBpZiB0YWJzIHdlcmUgc2V0CithdCB0aGUgdmFsdWUgb2YgJ3NvZnR0YWJzdG9wJywgYnV0IGFjdHVhbGx5IHVzZSBhIGNvbWJpbmF0aW9uIG9mIHRhYnMgYW5kCitzcGFjZXMuCisgICBBZnRlciB5b3UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQsIGV2ZXJ5IHRpbWUgeW91IHByZXNzIHRoZSA8VGFiPiBrZXkKK3RoZSBjdXJzb3IgbW92ZXMgdG8gdGhlIG5leHQgNC1jb2x1bW4gYm91bmRhcnk6ID4KKworCTpzZXQgc29mdHRhYnN0b3A9NAorCitXaGVuIHlvdSBzdGFydCBpbiB0aGUgZmlyc3QgY29sdW1uIGFuZCBwcmVzcyA8VGFiPiwgeW91IGdldCA0IHNwYWNlcyBpbnNlcnRlZAoraW4geW91ciB0ZXh0LiAgVGhlIHNlY29uZCB0aW1lLCBWaW0gdGFrZXMgb3V0IHRoZSA0IHNwYWNlcyBhbmQgcHV0cyBpbiBhIDxUYWI+CisodGh1cyB0YWtpbmcgeW91IHRvIGNvbHVtbiA4KS4gIFRodXMgVmltIHVzZXMgYXMgbWFueSA8VGFiPnMgYXMgcG9zc2libGUsIGFuZAordGhlbiBmaWxscyB1cCB3aXRoIHNwYWNlcy4KKyAgIFdoZW4gYmFja3NwYWNpbmcgaXQgd29ya3MgdGhlIG90aGVyIHdheSBhcm91bmQuICBBIDxCUz4gd2lsbCBhbHdheXMgZGVsZXRlCit0aGUgYW1vdW50IHNwZWNpZmllZCB3aXRoICdzb2Z0dGFic3RvcCcuICBUaGVuIDxUYWJzPiBhcmUgdXNlZCBhcyBtYW55IGFzCitwb3NzaWJsZSBhbmQgc3BhY2VzIHRvIGZpbGwgdGhlIGdhcC4KKyAgIFRoZSBmb2xsb3dpbmcgc2hvd3Mgd2hhdCBoYXBwZW5zIHByZXNzaW5nIDxUYWI+IGEgZmV3IHRpbWVzLCBhbmQgdGhlbiB1c2luZworPEJTPi4gIEEgIi4iIHN0YW5kcyBmb3IgYSBzcGFjZSBhbmQgIi0tLS0tLS0+IiBmb3IgYSA8VGFiPi4KKworCXR5cGUJCQkgIHJlc3VsdCB+CisJPFRhYj4JCQkgIC4uLi4KKwk8VGFiPjxUYWI+CQkgIC0tLS0tLS0+CisJPFRhYj48VGFiPjxUYWI+CQkgIC0tLS0tLS0+Li4uLgorCTxUYWI+PFRhYj48VGFiPjxCUz4JICAtLS0tLS0tPgorCTxUYWI+PFRhYj48VGFiPjxCUz48QlM+ICAgLi4uLgorCitBbiBhbHRlcm5hdGl2ZSBpcyB0byB1c2UgdGhlICdzbWFydHRhYicgb3B0aW9uLiAgV2hlbiBpdCdzIHNldCwgVmltIHVzZXMKKydzaGlmdHdpZHRoJyBmb3IgYSA8VGFiPiB0eXBlZCBpbiB0aGUgaW5kZW50IG9mIGEgbGluZSwgYW5kIGEgcmVhbCA8VGFiPiB3aGVuCit0eXBlZCBhZnRlciB0aGUgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3Rlci4gIEhvd2V2ZXIsIDxCUz4gZG9lc24ndCB3b3JrIGxpa2UKK3dpdGggJ3NvZnR0YWJzdG9wJy4KKworCitKVVNUIFNQQUNFUworCitJZiB5b3Ugd2FudCBhYnNvbHV0ZWx5IG5vIHRhYnMgaW4geW91ciBmaWxlLCB5b3UgY2FuIHNldCB0aGUgJ2V4cGFuZHRhYicKK29wdGlvbjogPgorCisJOnNldCBleHBhbmR0YWIKKworV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSA8VGFiPiBrZXkgaW5zZXJ0cyBhIHNlcmllcyBvZiBzcGFjZXMuICBUaHVzIHlvdQorZ2V0IHRoZSBzYW1lIGFtb3VudCBvZiB3aGl0ZSBzcGFjZSBhcyBpZiBhIDxUYWI+IGNoYXJhY3RlciB3YXMgaW5zZXJ0ZWQsIGJ1dAordGhlcmUgaXNuJ3QgYSByZWFsIDxUYWI+IGNoYXJhY3RlciBpbiB5b3VyIGZpbGUuCisgICBUaGUgYmFja3NwYWNlIGtleSB3aWxsIGRlbGV0ZSBlYWNoIHNwYWNlIGJ5IGl0c2VsZi4gIFRodXMgYWZ0ZXIgdHlwaW5nIG9uZQorPFRhYj4geW91IGhhdmUgdG8gcHJlc3MgdGhlIDxCUz4ga2V5IHVwIHRvIGVpZ2h0IHRpbWVzIHRvIHVuZG8gaXQuICBJZiB5b3UgYXJlCitpbiB0aGUgaW5kZW50LCBwcmVzc2luZyBDVFJMLUQgd2lsbCBiZSBhIGxvdCBxdWlja2VyLgorCisKK0NIQU5HSU5HIFRBQlMgSU4gU1BBQ0VTIChBTkQgQkFDSykKKworU2V0dGluZyAnZXhwYW5kdGFiJyBkb2VzIG5vdCBhZmZlY3QgYW55IGV4aXN0aW5nIHRhYnMuICBJbiBvdGhlciB3b3JkcywgYW55Cit0YWJzIGluIHRoZSBkb2N1bWVudCByZW1haW4gdGFicy4gIElmIHlvdSB3YW50IHRvIGNvbnZlcnQgdGFicyB0byBzcGFjZXMsIHVzZQordGhlICI6cmV0YWIiIGNvbW1hbmQuICBVc2UgdGhlc2UgY29tbWFuZHM6ID4KKworCTpzZXQgZXhwYW5kdGFiCisJOiVyZXRhYgorCitOb3cgVmltIHdpbGwgaGF2ZSBjaGFuZ2VkIGFsbCBpbmRlbnRzIHRvIHVzZSBzcGFjZXMgaW5zdGVhZCBvZiB0YWJzLiAgSG93ZXZlciwKK2FsbCB0YWJzIHRoYXQgY29tZSBhZnRlciBhIG5vbi1ibGFuayBjaGFyYWN0ZXIgYXJlIGtlcHQuICBJZiB5b3Ugd2FudCB0aGVzZSB0bworYmUgY29udmVydGVkIGFzIHdlbGwsIGFkZCBhICE6ID4KKworCTolcmV0YWIhCisKK1RoaXMgaXMgYSBsaXR0bGUgYml0IGRhbmdlcm91cywgYmVjYXVzZSBpdCBjYW4gYWxzbyBjaGFuZ2UgdGFicyBpbnNpZGUgYQorc3RyaW5nLiAgVG8gY2hlY2sgaWYgdGhlc2UgZXhpc3QsIHlvdSBjb3VsZCB1c2UgdGhpczogPgorCisJLyJbXiJcdF0qXHRbXiJdKiIKKworSXQncyByZWNvbW1lbmRlZCBub3QgdG8gdXNlIGhhcmQgdGFicyBpbnNpZGUgYSBzdHJpbmcuICBSZXBsYWNlIHRoZW0gd2l0aAorIlx0IiB0byBhdm9pZCB0cm91YmxlLgorCitUaGUgb3RoZXIgd2F5IGFyb3VuZCB3b3JrcyBqdXN0IGFzIHdlbGw6ID4KKworCTpzZXQgbm9leHBhbmR0YWIKKwk6JXJldGFiIQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyozMC42KglGb3JtYXR0aW5nIGNvbW1lbnRzCisKK09uZSBvZiB0aGUgZ3JlYXQgdGhpbmdzIGFib3V0IFZpbSBpcyB0aGF0IGl0IHVuZGVyc3RhbmRzIGNvbW1lbnRzLiAgWW91IGNhbgorYXNrIFZpbSB0byBmb3JtYXQgYSBjb21tZW50IGFuZCBpdCB3aWxsIGRvIHRoZSByaWdodCB0aGluZy4KKyAgIFN1cHBvc2UsIGZvciBleGFtcGxlLCB0aGF0IHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgY29tbWVudDoKKworCS8qIH4KKwkgKiBUaGlzIGlzIGEgdGVzdCB+CisJICogb2YgdGhlIHRleHQgZm9ybWF0dGluZy4gfgorCSAqLyB+CisKK1lvdSB0aGVuIGFzayBWaW0gdG8gZm9ybWF0IGl0IGJ5IHBvc2l0aW9uaW5nIHRoZSBjdXJzb3IgYXQgdGhlIHN0YXJ0IG9mIHRoZQorY29tbWVudCBhbmQgdHlwZTogPgorCisJZ3FdLworCisiZ3EiIGlzIHRoZSBvcGVyYXRvciB0byBmb3JtYXQgdGV4dC4gICJdLyIgaXMgdGhlIG1vdGlvbiB0aGF0IHRha2VzIHlvdSB0byB0aGUKK2VuZCBvZiBhIGNvbW1lbnQuICBUaGUgcmVzdWx0IGlzOgorCisJLyogfgorCSAqIFRoaXMgaXMgYSB0ZXN0IG9mIHRoZSB0ZXh0IGZvcm1hdHRpbmcuIH4KKwkgKi8gfgorCitOb3RpY2UgdGhhdCBWaW0gcHJvcGVybHkgaGFuZGxlZCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZS4KKyAgQW4gYWx0ZXJuYXRpdmUgaXMgdG8gc2VsZWN0IHRoZSB0ZXh0IHRoYXQgaXMgdG8gYmUgZm9ybWF0dGVkIGluIFZpc3VhbCBtb2RlCithbmQgdHlwZSAiZ3EiLgorCitUbyBhZGQgYSBuZXcgbGluZSB0byB0aGUgY29tbWVudCwgcG9zaXRpb24gdGhlIGN1cnNvciBvbiB0aGUgbWlkZGxlIGxpbmUgYW5kCitwcmVzcyAibyIuICBUaGUgcmVzdWx0IGxvb2tzIGxpa2UgdGhpczoKKworCS8qIH4KKwkgKiBUaGlzIGlzIGEgdGVzdCBvZiB0aGUgdGV4dCBmb3JtYXR0aW5nLiB+CisJICogfgorCSAqLyB+CisKK1ZpbSBoYXMgYXV0b21hdGljYWxseSBpbnNlcnRlZCBhIHN0YXIgYW5kIGEgc3BhY2UgZm9yIHlvdS4gIE5vdyB5b3UgY2FuIHR5cGUKK3RoZSBjb21tZW50IHRleHQuICBXaGVuIGl0IGdldHMgbG9uZ2VyIHRoYW4gJ3RleHR3aWR0aCcsIFZpbSB3aWxsIGJyZWFrIHRoZQorbGluZS4gIEFnYWluLCB0aGUgc3RhciBpcyBpbnNlcnRlZCBhdXRvbWF0aWNhbGx5OgorCisJLyogfgorCSAqIFRoaXMgaXMgYSB0ZXN0IG9mIHRoZSB0ZXh0IGZvcm1hdHRpbmcuIH4KKwkgKiBUeXBpbmcgYSBsb3Qgb2YgdGV4dCBoZXJlIHdpbGwgbWFrZSBWaW0gfgorCSAqIGJyZWFrIH4KKwkgKi8gfgorCitGb3IgdGhpcyB0byB3b3JrIHNvbWUgZmxhZ3MgbXVzdCBiZSBwcmVzZW50IGluICdmb3JtYXRvcHRpb25zJzoKKworCXIJaW5zZXJ0IHRoZSBzdGFyIHdoZW4gdHlwaW5nIDxFbnRlcj4gaW4gSW5zZXJ0IG1vZGUKKwlvCWluc2VydCB0aGUgc3RhciB3aGVuIHVzaW5nICJvIiBvciAiTyIgaW4gTm9ybWFsIG1vZGUKKwljCWJyZWFrIGNvbW1lbnQgdGV4dCBhY2NvcmRpbmcgdG8gJ3RleHR3aWR0aCcKKworU2VlIHxmby10YWJsZXwgZm9yIG1vcmUgZmxhZ3MuCisKKworREVGSU5JTkcgQSBDT01NRU5UCisKK1RoZSAnY29tbWVudHMnIG9wdGlvbiBkZWZpbmVzIHdoYXQgYSBjb21tZW50IGxvb2tzIGxpa2UuICBWaW0gZGlzdGluZ3Vpc2hlcworYmV0d2VlbiBhIHNpbmdsZS1saW5lIGNvbW1lbnQgYW5kIGEgY29tbWVudCB0aGF0IGhhcyBhIGRpZmZlcmVudCBzdGFydCwgZW5kCithbmQgbWlkZGxlIHBhcnQuCisgICBNYW55IHNpbmdsZS1saW5lIGNvbW1lbnRzIHN0YXJ0IHdpdGggYSBzcGVjaWZpYyBjaGFyYWN0ZXIuICBJbiBDKysgLy8gaXMKK3VzZWQsIGluIE1ha2VmaWxlcyAjLCBpbiBWaW0gc2NyaXB0cyAiLiAgRm9yIGV4YW1wbGUsIHRvIG1ha2UgVmltIHVuZGVyc3RhbmQKK0MrKyBjb21tZW50czogPgorCisJOnNldCBjb21tZW50cz06Ly8KKworVGhlIGNvbG9uIHNlcGFyYXRlcyB0aGUgZmxhZ3Mgb2YgYW4gaXRlbSBmcm9tIHRoZSB0ZXh0IGJ5IHdoaWNoIHRoZSBjb21tZW50IGlzCityZWNvZ25pemVkLiAgVGhlIGdlbmVyYWwgZm9ybSBvZiBhbiBpdGVtIGluICdjb21tZW50cycgaXM6CisKKwl7ZmxhZ3N9Ont0ZXh0fQorCitUaGUge2ZsYWdzfSBwYXJ0IGNhbiBiZSBlbXB0eSwgYXMgaW4gdGhpcyBjYXNlLgorICAgU2V2ZXJhbCBvZiB0aGVzZSBpdGVtcyBjYW4gYmUgY29uY2F0ZW5hdGVkLCBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgVGhpcworYWxsb3dzIHJlY29nbml6aW5nIGRpZmZlcmVudCB0eXBlcyBvZiBjb21tZW50cyBhdCB0aGUgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGUsCitsZXQncyBlZGl0IGFuIGUtbWFpbCBtZXNzYWdlLiAgV2hlbiByZXBseWluZywgdGhlIHRleHQgdGhhdCBvdGhlcnMgd3JvdGUgaXMKK3ByZWNlZGVkIHdpdGggIj4iIGFuZCAiISIgY2hhcmFjdGVycy4gIFRoaXMgY29tbWFuZCB3b3VsZCB3b3JrOiA+CisKKwk6c2V0IGNvbW1lbnRzPW46PixuOiEKKworVGhlcmUgYXJlIHR3byBpdGVtcywgb25lIGZvciBjb21tZW50cyBzdGFydGluZyB3aXRoICI+IiBhbmQgb25lIGZvciBjb21tZW50cwordGhhdCBzdGFydCB3aXRoICIhIi4gIEJvdGggdXNlIHRoZSBmbGFnICJuIi4gIFRoaXMgbWVhbnMgdGhhdCB0aGVzZSBjb21tZW50cworbmVzdC4gIFRodXMgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIj4iIG1heSBoYXZlIGFub3RoZXIgY29tbWVudCBhZnRlciB0aGUgIj4iLgorVGhpcyBhbGxvd3MgZm9ybWF0dGluZyBhIG1lc3NhZ2UgbGlrZSB0aGlzOgorCisJPiAhIERpZCB5b3Ugc2VlIHRoYXQgc2l0ZT8gfgorCT4gISBJdCBsb29rcyByZWFsbHkgZ3JlYXQuIH4KKwk+IEkgZG9uJ3QgbGlrZSBpdC4gIFRoZSB+CisJPiBjb2xvcnMgYXJlIHRlcnJpYmxlLiB+CisJV2hhdCBpcyB0aGUgVVJMIG9mIHRoYXQgfgorCXNpdGU/IH4KKworVHJ5IHNldHRpbmcgJ3RleHR3aWR0aCcgdG8gYSBkaWZmZXJlbnQgdmFsdWUsIGUuZy4sIDgwLCBhbmQgZm9ybWF0IHRoZSB0ZXh0IGJ5CitWaXN1YWxseSBzZWxlY3RpbmcgaXQgYW5kIHR5cGluZyAiZ3EiLiAgVGhlIHJlc3VsdCBpczoKKworCT4gISBEaWQgeW91IHNlZSB0aGF0IHNpdGU/IEl0IGxvb2tzIHJlYWxseSBncmVhdC4gfgorCT4gSSBkb24ndCBsaWtlIGl0LiAgVGhlIGNvbG9ycyBhcmUgdGVycmlibGUuIH4KKwlXaGF0IGlzIHRoZSBVUkwgb2YgdGhhdCBzaXRlPyB+CisKK1lvdSB3aWxsIG5vdGljZSB0aGF0IFZpbSBkaWQgbm90IG1vdmUgdGV4dCBmcm9tIG9uZSB0eXBlIG9mIGNvbW1lbnQgdG8KK2Fub3RoZXIuICBUaGUgIkkiIGluIHRoZSBzZWNvbmQgbGluZSB3b3VsZCBoYXZlIGZpdCBhdCB0aGUgZW5kIG9mIHRoZSBmaXJzdAorbGluZSwgYnV0IHNpbmNlIHRoYXQgbGluZSBzdGFydHMgd2l0aCAiPiAhIiBhbmQgdGhlIHNlY29uZCBsaW5lIHdpdGggIj4iLCBWaW0KK2tub3dzIHRoYXQgdGhpcyBpcyBhIGRpZmZlcmVudCBraW5kIG9mIGNvbW1lbnQuCisKKworQSBUSFJFRSBQQVJUIENPTU1FTlQKKworQSBDIGNvbW1lbnQgc3RhcnRzIHdpdGggIi8qIiwgaGFzICIqIiBpbiB0aGUgbWlkZGxlIGFuZCAiKi8iIGF0IHRoZSBlbmQuICBUaGUKK2VudHJ5IGluICdjb21tZW50cycgZm9yIHRoaXMgbG9va3MgbGlrZSB0aGlzOiA+CisKKwk6c2V0IGNvbW1lbnRzPXMxOi8qLG1iOiosZXg6Ki8KKworVGhlIHN0YXJ0IGlzIGRlZmluZWQgd2l0aCAiczE6LyoiLiAgVGhlICJzIiBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEKK3RocmVlLXBpZWNlIGNvbW1lbnQuICBUaGUgY29sb24gc2VwYXJhdGVzIHRoZSBmbGFncyBmcm9tIHRoZSB0ZXh0IGJ5IHdoaWNoIHRoZQorY29tbWVudCBpcyByZWNvZ25pemVkOiAiLyoiLiAgVGhlcmUgaXMgb25lIGZsYWc6ICIxIi4gIFRoaXMgdGVsbHMgVmltIHRoYXQgdGhlCittaWRkbGUgcGFydCBoYXMgYW4gb2Zmc2V0IG9mIG9uZSBzcGFjZS4KKyAgIFRoZSBtaWRkbGUgcGFydCAibWI6KiIgc3RhcnRzIHdpdGggIm0iLCB3aGljaCBpbmRpY2F0ZXMgaXQgaXMgYSBtaWRkbGUKK3BhcnQuICBUaGUgImIiIGZsYWcgbWVhbnMgdGhhdCBhIGJsYW5rIG11c3QgZm9sbG93IHRoZSB0ZXh0LiAgT3RoZXJ3aXNlIFZpbQord291bGQgY29uc2lkZXIgdGV4dCBsaWtlICIqcG9pbnRlciIgYWxzbyB0byBiZSB0aGUgbWlkZGxlIG9mIGEgY29tbWVudC4KKyAgIFRoZSBlbmQgcGFydCAiZXg6Ki8iIGhhcyB0aGUgImUiIGZvciBpZGVudGlmaWNhdGlvbi4gIFRoZSAieCIgZmxhZyBoYXMgYQorc3BlY2lhbCBtZWFuaW5nLiAgSXQgbWVhbnMgdGhhdCBhZnRlciBWaW0gYXV0b21hdGljYWxseSBpbnNlcnRlZCBhIHN0YXIsCit0eXBpbmcgLyB3aWxsIHJlbW92ZSB0aGUgZXh0cmEgc3BhY2UuCisKK0ZvciBtb3JlIGRldGFpbHMgc2VlIHxmb3JtYXQtY29tbWVudHN8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzMxLnR4dHwgIEV4cGxvaXRpbmcgdGhlIEdVSQorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8zMS50eHQgYi9ydW50aW1lL2RvYy91c3JfMzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzZiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMzEudHh0CkBAIC0wLDAgKzEsMjY3IEBACisqdXNyXzMxLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDMgT2N0IDIxCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgICBFeHBsb2l0aW5nIHRoZSBHVUkKKworCitWaW0gd29ya3Mgd2VsbCBpbiBhIHRlcm1pbmFsLCBidXQgdGhlIEdVSSBoYXMgYSBmZXcgZXh0cmEgaXRlbXMuICBBIGZpbGUKK2Jyb3dzZXIgY2FuIGJlIHVzZWQgZm9yIGNvbW1hbmRzIHRoYXQgdXNlIGEgZmlsZS4gIEEgZGlhbG9nIHRvIG1ha2UgYSBjaG9pY2UKK2JldHdlZW4gYWx0ZXJuYXRpdmVzLiAgVXNlIGtleWJvYXJkIHNob3J0Y3V0cyB0byBhY2Nlc3MgbWVudSBpdGVtcyBxdWlja2x5LgorCit8MzEuMXwJVGhlIGZpbGUgYnJvd3NlcgorfDMxLjJ8CUNvbmZpcm1hdGlvbgorfDMxLjN8CU1lbnUgc2hvcnRjdXRzCit8MzEuNHwJVmltIHdpbmRvdyBwb3NpdGlvbiBhbmQgc2l6ZQorfDMxLjV8CVZhcmlvdXMKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfNDAudHh0fCAgTWFrZSBuZXcgY29tbWFuZHMKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzMwLnR4dHwgIEVkaXRpbmcgcHJvZ3JhbXMKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjMxLjEqCVRoZSBmaWxlIGJyb3dzZXIKKworV2hlbiB1c2luZyB0aGUgRmlsZS9PcGVuLi4uIG1lbnUgeW91IGdldCBhIGZpbGUgYnJvd3Nlci4gIFRoaXMgbWFrZXMgaXQgZWFzaWVyCit0byBmaW5kIHRoZSBmaWxlIHlvdSB3YW50IHRvIGVkaXQuICBCdXQgd2hhdCBpZiB5b3Ugd2FudCB0byBzcGxpdCBhIHdpbmRvdyB0bworZWRpdCBhbm90aGVyIGZpbGU/ICBUaGVyZSBpcyBubyBtZW51IGVudHJ5IGZvciB0aGlzLiAgWW91IGNvdWxkIGZpcnN0IHVzZQorV2luZG93L1NwbGl0IGFuZCB0aGVuIEZpbGUvT3Blbi4uLiwgYnV0IHRoYXQncyBtb3JlIHdvcmsuCisgICBTaW5jZSB5b3UgYXJlIHR5cGluZyBtb3N0IGNvbW1hbmRzIGluIFZpbSwgb3BlbmluZyB0aGUgZmlsZSBicm93c2VyIHdpdGggYQordHlwZWQgY29tbWFuZCBpcyBwb3NzaWJsZSBhcyB3ZWxsLiAgVG8gbWFrZSB0aGUgc3BsaXQgY29tbWFuZCB1c2UgdGhlIGZpbGUKK2Jyb3dzZXIsIHByZXBlbmQgImJyb3dzZSI6ID4KKworCTpicm93c2Ugc3BsaXQKKworU2VsZWN0IGEgZmlsZSBhbmQgdGhlbiB0aGUgIjpzcGxpdCIgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIHdpdGggaXQuICBJZiB5b3UKK2NhbmNlbCB0aGUgZmlsZSBkaWFsb2cgbm90aGluZyBoYXBwZW5zLCB0aGUgd2luZG93IGlzbid0IHNwbGl0LgorICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBmaWxlIG5hbWUgYXJndW1lbnQuICBUaGlzIGlzIHVzZWQgdG8gdGVsbCB0aGUgZmlsZQorYnJvd3NlciB3aGVyZSB0byBzdGFydC4gIEV4YW1wbGU6ID4KKworCTpicm93c2Ugc3BsaXQgL2V0YworCitUaGUgZmlsZSBicm93c2VyIHdpbGwgcG9wIHVwLCBzdGFydGluZyBpbiB0aGUgZGlyZWN0b3J5ICIvZXRjIi4KKworVGhlICI6YnJvd3NlIiBjb21tYW5kIGNhbiBiZSBwcmVwZW5kZWQgdG8ganVzdCBhYm91dCBhbnkgY29tbWFuZCB0aGF0IG9wZW5zIGEKK2ZpbGUuCisgICBJZiBubyBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkLCBWaW0gd2lsbCBkZWNpZGUgd2hlcmUgdG8gc3RhcnQgdGhlIGZpbGUKK2Jyb3dzZXIuICBCeSBkZWZhdWx0IGl0IHVzZXMgdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBsYXN0IHRpbWUuICBUaHVzIHdoZW4KK3lvdSB1c2VkICI6YnJvd3NlIHNwbGl0IiBhbmQgc2VsZWN0ZWQgYSBmaWxlIGluICIvdXNyL2xvY2FsL3NoYXJlIiwgdGhlIG5leHQKK3RpbWUgeW91IHVzZSBhICI6YnJvd3NlIiBpdCB3aWxsIHN0YXJ0IGluICIvdXNyL2xvY2FsL3NoYXJlIiBhZ2Fpbi4KKyAgIFRoaXMgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUgJ2Jyb3dzZWRpcicgb3B0aW9uLiAgSXQgY2FuIGhhdmUgb25lIG9mIHRocmVlCit2YWx1ZXM6CisKKwlsYXN0CQlVc2UgdGhlIGxhc3QgZGlyZWN0b3J5IGJyb3dzZWQgKGRlZmF1bHQpCisJYnVmZmVyCQlVc2UgdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjdXJyZW50IGJ1ZmZlcgorCWN1cnJlbnQJCXVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnkKKworRm9yIGV4YW1wbGUsIHdoZW4geW91IGFyZSBpbiB0aGUgZGlyZWN0b3J5ICIvdXNyIiwgZWRpdGluZyB0aGUgZmlsZQorIi91c3IvbG9jYWwvc2hhcmUvcmVhZG1lIiwgdGhlbiB0aGUgY29tbWFuZDogPgorCisJOnNldCBicm93c2VkaXI9YnVmZmVyCisJOmJyb3dzZSBlZGl0CisKK1dpbGwgc3RhcnQgdGhlIGJyb3dzZXIgaW4gIi91c3IvbG9jYWwvc2hhcmUiLiAgQWx0ZXJuYXRpdmVseTogPgorCisJOnNldCBicm93c2VkaXI9Y3VycmVudAorCTpicm93c2UgZWRpdAorCitXaWxsIHN0YXJ0IHRoZSBicm93c2VyIGluICIvdXNyIi4KKworCU5vdGU6CisJVG8gYXZvaWQgdXNpbmcgdGhlIG1vdXNlLCBtb3N0IGZpbGUgYnJvd3NlcnMgb2ZmZXIgdXNpbmcga2V5IHByZXNzZXMKKwl0byBuYXZpZ2F0ZS4gIFNpbmNlIHRoaXMgaXMgZGlmZmVyZW50IGZvciBldmVyeSBzeXN0ZW0sIGl0IGlzIG5vdAorCWV4cGxhaW5lZCBoZXJlLiAgVmltIHVzZXMgYSBzdGFuZGFyZCBicm93c2VyIHdoZW4gcG9zc2libGUsIHlvdXIKKwlzeXN0ZW0gZG9jdW1lbnRhdGlvbiBzaG91bGQgY29udGFpbiBhbiBleHBsYW5hdGlvbiBvbiB0aGUga2V5Ym9hcmQKKwlzaG9ydGN1dHMgc29tZXdoZXJlLgorCitXaGVuIHlvdSBhcmUgbm90IHVzaW5nIHRoZSBHVUkgdmVyc2lvbiwgeW91IGNvdWxkIHVzZSB0aGUgZmlsZSBleHBsb3JlciB3aW5kb3cKK3RvIHNlbGVjdCBmaWxlcyBsaWtlIGluIGEgZmlsZSBicm93c2VyLiAgSG93ZXZlciwgdGhpcyBkb2Vzbid0IHdvcmsgZm9yIHRoZQorIjpicm93c2UiIGNvbW1hbmQuICBTZWUgfGZpbGUtZXhwbG9yZXJ8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyozMS4yKglDb25maXJtYXRpb24KKworVmltIHByb3RlY3RzIHlvdSBmcm9tIGFjY2lkZW50YWxseSBvdmVyd3JpdGluZyBhIGZpbGUgYW5kIG90aGVyIHdheXMgdG8gbG9zZQorY2hhbmdlcy4gIElmIHlvdSBkbyBzb21ldGhpbmcgdGhhdCBtaWdodCBiZSBhIGJhZCB0aGluZyB0byBkbywgVmltIHByb2R1Y2VzIGFuCitlcnJvciBtZXNzYWdlIGFuZCBzdWdnZXN0cyBhcHBlbmRpbmcgISBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXQuCisgICBUbyBhdm9pZCByZXR5cGluZyB0aGUgY29tbWFuZCB3aXRoIHRoZSAhLCB5b3UgY2FuIG1ha2UgVmltIGdpdmUgeW91IGEKK2RpYWxvZy4gIFlvdSBjYW4gdGhlbiBwcmVzcyAiT0siIG9yICJDYW5jZWwiIHRvIHRlbGwgVmltIHdoYXQgeW91IHdhbnQuCisgICBGb3IgZXhhbXBsZSwgeW91IGFyZSBlZGl0aW5nIGEgZmlsZSBhbmQgbWFkZSBjaGFuZ2VzIHRvIGl0LiAgWW91IHN0YXJ0CitlZGl0aW5nIGFub3RoZXIgZmlsZSB3aXRoOiA+CisKKwk6Y29uZmlybSBlZGl0IGZvby50eHQKKworVmltIHdpbGwgcG9wIHVwIGEgZGlhbG9nIHRoYXQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8CQkJCSAgICB8CisJfCAgID8JU2F2ZSBjaGFuZ2VzIHRvICJiYXIudHh0Ij8gIHwKKwl8CQkJCSAgICB8CisJfCAgIFlFUyAgIE5PCQkgQ0FOQ0VMICAgICB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitOb3cgbWFrZSB5b3VyIGNob2ljZS4gIElmIHlvdSBkbyB3YW50IHRvIHNhdmUgdGhlIGNoYW5nZXMsIHNlbGVjdCAiWUVTIi4gIElmCit5b3Ugd2FudCB0byBsb3NlIHRoZSBjaGFuZ2VzIGZvciBldmVyOiAiTk8iLiAgSWYgeW91IGZvcmdvdCB3aGF0IHlvdSB3ZXJlCitkb2luZyBhbmQgd2FudCB0byBjaGVjayB3aGF0IHJlYWxseSBjaGFuZ2VkIHVzZSAiQ0FOQ0VMIi4gIFlvdSB3aWxsIGJlIGJhY2sgaW4KK3RoZSBzYW1lIGZpbGUsIHdpdGggdGhlIGNoYW5nZXMgc3RpbGwgdGhlcmUuCisKK0p1c3QgbGlrZSAiOmJyb3dzZSIsIHRoZSAiOmNvbmZpcm0iIGNvbW1hbmQgY2FuIGJlIHByZXBlbmRlZCB0byBtb3N0IGNvbW1hbmRzCit0aGF0IGVkaXQgYW5vdGhlciBmaWxlLiAgVGhleSBjYW4gYWxzbyBiZSBjb21iaW5lZDogPgorCisJOmNvbmZpcm0gYnJvd3NlIGVkaXQKKworVGhpcyB3aWxsIHByb2R1Y2UgYSBkaWFsb2cgd2hlbiB0aGUgY3VycmVudCBidWZmZXIgd2FzIGNoYW5nZWQuICBUaGVuIGl0IHdpbGwKK3BvcCB1cCBhIGZpbGUgYnJvd3NlciB0byBzZWxlY3QgdGhlIGZpbGUgdG8gZWRpdC4KKworCU5vdGU6CisJSW4gdGhlIGRpYWxvZyB5b3UgY2FuIHVzZSB0aGUga2V5Ym9hcmQgdG8gc2VsZWN0IHRoZSBjaG9pY2UuCisJVHlwaWNhbGx5IHRoZSA8VGFiPiBrZXkgYW5kIHRoZSBjdXJzb3Iga2V5cyBjaGFuZ2UgdGhlIGNob2ljZS4KKwlQcmVzc2luZyA8RW50ZXI+IHNlbGVjdHMgdGhlIGNob2ljZS4gIFRoaXMgZGVwZW5kcyBvbiB0aGUgc3lzdGVtCisJdGhvdWdoLgorCitXaGVuIHlvdSBhcmUgbm90IHVzaW5nIHRoZSBHVUksIHRoZSAiOmNvbmZpcm0iIGNvbW1hbmQgd29ya3MgYXMgd2VsbC4gIEluc3RlYWQKK29mIHBvcHBpbmcgdXAgYSBkaWFsb2csIFZpbSB3aWxsIHByaW50IHRoZSBtZXNzYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIFZpbQord2luZG93IGFuZCBhc2sgeW91IHRvIHByZXNzIGEga2V5IHRvIG1ha2UgYSBjaG9pY2UuID4KKworCTpjb25maXJtIGVkaXQgbWFpbi5jCis8CVNhdmUgY2hhbmdlcyB0byAiVW50aXRsZWQiPyB+CisJW1ldZXMsIChOKW8sIChDKWFuY2VsOiAgfgorCitZb3UgY2FuIG5vdyBwcmVzcyB0aGUgc2luZ2xlIGtleSBmb3IgdGhlIGNob2ljZS4gIFlvdSBkb24ndCBoYXZlIHRvIHByZXNzCis8RW50ZXI+LCB1bmxpa2Ugb3RoZXIgdHlwaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjMxLjMqCU1lbnUgc2hvcnRjdXRzCisKK1RoZSBrZXlib2FyZCBpcyB1c2VkIGZvciBhbGwgVmltIGNvbW1hbmRzLiAgVGhlIG1lbnVzIHByb3ZpZGUgYSBzaW1wbGUgd2F5IHRvCitzZWxlY3QgY29tbWFuZHMsIHdpdGhvdXQga25vd2luZyB3aGF0IHRoZXkgYXJlIGNhbGxlZC4gIEJ1dCB5b3UgaGF2ZSB0byBtb3ZlCit5b3VyIGhhbmQgZnJvbSB0aGUga2V5Ym9hcmQgYW5kIGdyYWIgdGhlIG1vdXNlLgorICAgTWVudXMgY2FuIG9mdGVuIGJlIHNlbGVjdGVkIHdpdGgga2V5cyBhcyB3ZWxsLiAgVGhpcyBkZXBlbmRzIG9uIHlvdXIKK3N5c3RlbSwgYnV0IG1vc3Qgb2Z0ZW4gaXQgd29ya3MgdGhpcyB3YXkuICBVc2UgdGhlIDxBbHQ+IGtleSBpbiBjb21iaW5hdGlvbgord2l0aCB0aGUgdW5kZXJsaW5lZCBsZXR0ZXIgb2YgYSBtZW51LiAgRm9yIGV4YW1wbGUsIDxBLXc+ICg8QWx0PiBhbmQgdykgcG9wcwordXAgdGhlIFdpbmRvdyBtZW51LgorICAgSW4gdGhlIFdpbmRvdyBtZW51LCB0aGUgInNwbGl0IiBpdGVtIGhhcyB0aGUgcCB1bmRlcmxpbmVkLiAgVG8gc2VsZWN0IGl0LAorbGV0IGdvIG9mIHRoZSA8QWx0PiBrZXkgYW5kIHByZXNzIHAuCisKK0FmdGVyIHRoZSBmaXJzdCBzZWxlY3Rpb24gb2YgYSBtZW51IHdpdGggdGhlIDxBbHQ+IGtleSwgeW91IGNhbiB1c2UgdGhlIGN1cnNvcgora2V5cyB0byBtb3ZlIHRocm91Z2ggdGhlIG1lbnVzLiAgPFJpZ2h0PiBzZWxlY3RzIGEgc3VibWVudSBhbmQgPGxlZnQ+IGNsb3NlcworaXQuICA8RXNjPiBhbHNvIGNsb3NlcyBhIG1lbnUuICA8RW50ZXI+IHNlbGVjdHMgYSBtZW51IGl0ZW0uCisKK1RoZXJlIGlzIGEgY29uZmxpY3QgYmV0d2VlbiB1c2luZyB0aGUgPEFsdD4ga2V5IHRvIHNlbGVjdCBtZW51IGl0ZW1zLCBhbmQKK3VzaW5nIDxBbHQ+IGtleSBjb21iaW5hdGlvbnMgZm9yIG1hcHBpbmdzLiAgVGhlICd3aW5hbHRrZXlzJyBvcHRpb24gdGVsbHMgVmltCit3aGF0IGl0IHNob3VsZCBkbyB3aXRoIHRoZSA8QWx0PiBrZXkuCisgICBUaGUgZGVmYXVsdCB2YWx1ZSAibWVudSIgaXMgdGhlIHNtYXJ0IGNob2ljZTogSWYgdGhlIGtleSBjb21iaW5hdGlvbiBpcyBhCittZW51IHNob3J0Y3V0IGl0IGNhbid0IGJlIG1hcHBlZC4gIEFsbCBvdGhlciBrZXlzIGFyZSBhdmFpbGFibGUgZm9yIG1hcHBpbmcuCisgICBUaGUgdmFsdWUgIm5vIiBkb2Vzbid0IHVzZSBhbnkgPEFsdD4ga2V5cyBmb3IgdGhlIG1lbnVzLiAgVGh1cyB5b3UgbXVzdCB1c2UKK3RoZSBtb3VzZSBmb3IgdGhlIG1lbnVzLCBhbmQgYWxsIDxBbHQ+IGtleXMgY2FuIGJlIG1hcHBlZC4KKyAgIFRoZSB2YWx1ZSAieWVzIiBtZWFucyB0aGF0IFZpbSB3aWxsIHVzZSBhbnkgPEFsdD4ga2V5cyBmb3IgdGhlIG1lbnVzLiAgU29tZQorPEFsdD4ga2V5IGNvbWJpbmF0aW9ucyBtYXkgYWxzbyBkbyBvdGhlciB0aGluZ3MgdGhhbiBzZWxlY3RpbmcgYSBtZW51LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyozMS40KglWaW0gd2luZG93IHBvc2l0aW9uIGFuZCBzaXplCisKK1RvIHNlZSB0aGUgY3VycmVudCBWaW0gd2luZG93IHBvc2l0aW9uIG9uIHRoZSBzY3JlZW4gdXNlOiA+CisKKwk6d2lucG9zCisKK1RoaXMgd2lsbCBvbmx5IHdvcmsgaW4gdGhlIEdVSS4gIFRoZSBvdXRwdXQgbWF5IGxvb2sgbGlrZSB0aGlzOgorCisJV2luZG93IHBvc2l0aW9uOiBYIDI3MiwgWSAxMDMgfgorCitUaGUgcG9zaXRpb24gaXMgZ2l2ZW4gaW4gc2NyZWVuIHBpeGVscy4gIE5vdyB5b3UgY2FuIHVzZSB0aGUgbnVtYmVycyB0byBtb3ZlCitWaW0gc29tZXdoZXJlIGVsc2UuICBGb3IgZXhhbXBsZSwgdG8gbW92ZSBpdCB0byB0aGUgbGVmdCBhIGh1bmRyZWQgcGl4ZWxzOiA+CisKKwk6d2lucG9zIDE3MiAxMDMKKzwKKwlOb3RlOgorCVRoZXJlIG1heSBiZSBhIHNtYWxsIG9mZnNldCBiZXR3ZWVuIHRoZSByZXBvcnRlZCBwb3NpdGlvbiBhbmQgd2hlcmUKKwl0aGUgd2luZG93IG1vdmVzLiAgVGhpcyBpcyBiZWNhdXNlIG9mIHRoZSBib3JkZXIgYXJvdW5kIHRoZSB3aW5kb3cuCisJVGhpcyBpcyBhZGRlZCBieSB0aGUgd2luZG93IG1hbmFnZXIuCisKK1lvdSBjYW4gdXNlIHRoaXMgY29tbWFuZCBpbiB5b3VyIHN0YXJ0dXAgc2NyaXB0IHRvIHBvc2l0aW9uIHRoZSB3aW5kb3cgYXQgYQorc3BlY2lmaWMgcG9zaXRpb24uCisKK1RoZSBzaXplIG9mIHRoZSBWaW0gd2luZG93IGlzIGNvbXB1dGVkIGluIGNoYXJhY3RlcnMuICBUaHVzIHRoaXMgZGVwZW5kcyBvbgordGhlIHNpemUgb2YgdGhlIGZvbnQgYmVpbmcgdXNlZC4gIFlvdSBjYW4gc2VlIHRoZSBjdXJyZW50IHNpemUgd2l0aCB0aGlzCitjb21tYW5kOiA+CisKKwk6c2V0IGxpbmVzIGNvbHVtbnMKKworVG8gY2hhbmdlIHRoZSBzaXplIHNldCB0aGUgJ2xpbmVzJyBhbmQvb3IgJ2NvbHVtbnMnIG9wdGlvbnMgdG8gYSBuZXcgdmFsdWU6ID4KKworCTpzZXQgbGluZXM9NTAKKwk6c2V0IGNvbHVtbnM9ODAKKworT2J0YWluaW5nIHRoZSBzaXplIHdvcmtzIGluIGEgdGVybWluYWwganVzdCBsaWtlIGluIHRoZSBHVUkuICBTZXR0aW5nIHRoZSBzaXplCitpcyBub3QgcG9zc2libGUgaW4gbW9zdCB0ZXJtaW5hbHMuCisKK1lvdSBjYW4gc3RhcnQgdGhlIFgtV2luZG93cyB2ZXJzaW9uIG9mIGd2aW0gd2l0aCBhbiBhcmd1bWVudCB0byBzcGVjaWZ5IHRoZQorc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhlIHdpbmRvdzogPgorCisJZ3ZpbSAtZ2VvbWV0cnkge3dpZHRofXh7aGVpZ2h0fSt7eF9vZmZzZXR9K3t5X29mZnNldH0KKwore3dpZHRofSBhbmQge2hlaWdodH0gYXJlIGluIGNoYXJhY3RlcnMsIHt4X29mZnNldH0gYW5kIHt5X29mZnNldH0gYXJlIGluCitwaXhlbHMuICBFeGFtcGxlOiA+CisKKwlndmltIC1nZW9tZXRyeSA4MHgyNSsxMDArMzAwCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjMxLjUqCVZhcmlvdXMKKworWW91IGNhbiB1c2UgZ3ZpbSB0byBlZGl0IGFuIGUtbWFpbCBtZXNzYWdlLiAgSW4geW91ciBlLW1haWwgcHJvZ3JhbSB5b3UgbXVzdAorc2VsZWN0IGd2aW0gdG8gYmUgdGhlIGVkaXRvciBmb3IgbWVzc2FnZXMuICBXaGVuIHlvdSB0cnkgdGhhdCwgeW91IHdpbGwKK3NlZSB0aGF0IGl0IGRvZXNuJ3Qgd29yazogVGhlIG1haWwgcHJvZ3JhbSB0aGlua3MgdGhhdCBlZGl0aW5nIGlzIGZpbmlzaGVkLAord2hpbGUgZ3ZpbSBpcyBzdGlsbCBydW5uaW5nIQorICAgV2hhdCBoYXBwZW5zIGlzIHRoYXQgZ3ZpbSBkaXNjb25uZWN0cyBmcm9tIHRoZSBzaGVsbCBpdCB3YXMgc3RhcnRlZCBpbi4KK1RoYXQgaXMgZmluZSB3aGVuIHlvdSBzdGFydCBndmltIGluIGEgdGVybWluYWwsIHNvIHRoYXQgeW91IGNhbiBkbyBvdGhlciB3b3JrCitpbiB0aGF0IHRlcm1pbmFsLiAgQnV0IHdoZW4geW91IHJlYWxseSB3YW50IHRvIHdhaXQgZm9yIGd2aW0gdG8gZmluaXNoLCB5b3UKK211c3QgcHJldmVudCBpdCBmcm9tIGRpc2Nvbm5lY3RpbmcuICBUaGUgIi1mIiBhcmd1bWVudCBkb2VzIHRoaXM6ID4KKworCWd2aW0gLWYgZmlsZS50eHQKKworVGhlICItZiIgc3RhbmRzIGZvciBmb3JlZ3JvdW5kLiAgTm93IFZpbSB3aWxsIGJsb2NrIHRoZSBzaGVsbCBpdCB3YXMgc3RhcnRlZAoraW4gdW50aWwgeW91IGZpbmlzaCBlZGl0aW5nIGFuZCBleGl0LgorCisKK0RFTEFZRUQgU1RBUlQgT0YgVEhFIEdVSQorCitPbiBVbml4IGl0J3MgcG9zc2libGUgdG8gZmlyc3Qgc3RhcnQgVmltIGluIGEgdGVybWluYWwuICBUaGF0J3MgdXNlZnVsIGlmIHlvdQorZG8gdmFyaW91cyB0YXNrcyBpbiB0aGUgc2FtZSBzaGVsbC4gIElmIHlvdSBhcmUgZWRpdGluZyBhIGZpbGUgYW5kIGRlY2lkZSB5b3UKK3dhbnQgdG8gdXNlIHRoZSBHVUkgYWZ0ZXIgYWxsLCB5b3UgY2FuIHN0YXJ0IGl0IHdpdGg6ID4KKworCTpndWkKKworVmltIHdpbGwgb3BlbiB0aGUgR1VJIHdpbmRvdyBhbmQgbm8gbG9uZ2VyIHVzZSB0aGUgdGVybWluYWwuICBZb3UgY2FuIGNvbnRpbnVlCit1c2luZyB0aGUgdGVybWluYWwgZm9yIHNvbWV0aGluZyBlbHNlLiAgVGhlICItZiIgYXJndW1lbnQgaXMgdXNlZCBoZXJlIHRvIHJ1bgordGhlIEdVSSBpbiB0aGUgZm9yZWdyb3VuZC4gIFlvdSBjYW4gYWxzbyB1c2UgIjpndWkgLWYiLgorCisKK1RIRSBHVklNIFNUQVJUVVAgRklMRQorCitXaGVuIGd2aW0gc3RhcnRzLCBpdCByZWFkcyB0aGUgZ3ZpbXJjIGZpbGUuICBUaGF0J3Mgc2ltaWxhciB0byB0aGUgdmltcmMgZmlsZQordXNlZCB3aGVuIHN0YXJ0aW5nIFZpbS4gIFRoZSBndmltcmMgZmlsZSBjYW4gYmUgdXNlZCBmb3Igc2V0dGluZ3MgYW5kIGNvbW1hbmRzCit0aGF0IGFyZSBvbmx5IHRvIGJlIHVzZWQgd2hlbiB0aGUgR1VJIGlzIGdvaW5nIHRvIGJlIHN0YXJ0ZWQuICBGb3IgZXhhbXBsZSwKK3lvdSBjYW4gc2V0IHRoZSAnbGluZXMnIG9wdGlvbiB0byBzZXQgYSBkaWZmZXJlbnQgd2luZG93IHNpemU6ID4KKworCTpzZXQgbGluZXM9NTUKKworWW91IGRvbid0IHdhbnQgdG8gZG8gdGhpcyBpbiBhIHRlcm1pbmFsLCBzaW5jZSBpdCdzIHNpemUgaXMgZml4ZWQgKGV4Y2VwdCBmb3IKK2FuIHh0ZXJtIHRoYXQgc3VwcG9ydHMgcmVzaXppbmcpLgorICAgVGhlIGd2aW1yYyBmaWxlIGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgc2FtZSBsb2NhdGlvbnMgYXMgdGhlIHZpbXJjIGZpbGUuCitOb3JtYWxseSBpdCdzIG5hbWUgaXMgIn4vLmd2aW1yYyIgZm9yIFVuaXggYW5kICIkVklNL19ndmltcmMiIGZvciBNUy1XaW5kb3dzLgorICAgSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgbm9ybWFsIGd2aW1yYyBmaWxlLCB5b3UgY2FuCitzcGVjaWZ5IGFub3RoZXIgb25lIHdpdGggdGhlICItVSIgYXJndW1lbnQ6ID4KKworCWd2aW0gLVUgdGhpc3JjIC4uLgorCitUaGF0IGFsbG93cyBzdGFydGluZyBndmltIGZvciBkaWZmZXJlbnQga2luZHMgb2YgZWRpdGluZy4gIFlvdSBjb3VsZCBzZXQKK2Fub3RoZXIgZm9udCBzaXplLCBmb3IgZXhhbXBsZS4KKyAgIFRvIGNvbXBsZXRlbHkgc2tpcCByZWFkaW5nIGEgZ3ZpbXJjIGZpbGU6ID4KKworCWd2aW0gLVUgTk9ORSAuLi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl80MC50eHR8ICBNYWtlIG5ldyBjb21tYW5kcworCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl80MC50eHQgYi9ydW50aW1lL2RvYy91c3JfNDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjY0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfNDAudHh0CkBAIC0wLDAgKzEsNjU1IEBACisqdXNyXzQwLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRmViIDEzCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgICBNYWtlIG5ldyBjb21tYW5kcworCisKK1ZpbSBpcyBhbiBleHRlbnNpYmxlIGVkaXRvci4gIFlvdSBjYW4gdGFrZSBhIHNlcXVlbmNlIG9mIGNvbW1hbmRzIHlvdSB1c2UKK29mdGVuIGFuZCB0dXJuIGl0IGludG8gYSBuZXcgY29tbWFuZC4gIE9yIHJlZGVmaW5lIGFuIGV4aXN0aW5nIGNvbW1hbmQuCitBdXRvY29tbWFuZHMgbWFrZSBpdCBwb3NzaWJsZSB0byBleGVjdXRlIGNvbW1hbmRzIGF1dG9tYXRpY2FsbHkuCisKK3w0MC4xfAlLZXkgbWFwcGluZworfDQwLjJ8CURlZmluaW5nIGNvbW1hbmQtbGluZSBjb21tYW5kcworfDQwLjN8CUF1dG9jb21tYW5kcworCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl80MS50eHR8ICBXcml0ZSBhIFZpbSBzY3JpcHQKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzMxLnR4dHwgIEV4cGxvaXRpbmcgdGhlIEdVSQorVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDAuMSoJS2V5IG1hcHBpbmcKKworQSBzaW1wbGUgbWFwcGluZyB3YXMgZXhwbGFpbmVkIGluIHNlY3Rpb24gfDA1LjN8LiAgVGhlIHByaW5jaXBsZSBpcyB0aGF0IG9uZQorc2VxdWVuY2Ugb2Yga2V5IHN0cm9rZXMgaXMgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgc2VxdWVuY2Ugb2Yga2V5IHN0cm9rZXMuCitUaGlzIGlzIGEgc2ltcGxlLCB5ZXQgcG93ZXJmdWwgbWVjaGFuaXNtLgorICAgVGhlIHNpbXBsZXN0IGZvcm0gaXMgdGhhdCBvbmUga2V5IGlzIG1hcHBlZCB0byBhIHNlcXVlbmNlIG9mIGtleXMuICBTaW5jZQordGhlIGZ1bmN0aW9uIGtleXMsIGV4Y2VwdCA8RjE+LCBoYXZlIG5vIHByZWRlZmluZWQgbWVhbmluZyBpbiBWaW0sIHRoZXNlIGFyZSBhCitnb29kIGNob2ljZSB0byBtYXAuICBFeGFtcGxlOiA+CisKKwk6bWFwIDxGMj4gR29EYXRlOiA8RXNjPjpyZWFkICFkYXRlPENSPmtKCisKK1RoaXMgc2hvd3MgaG93IHRocmVlIG1vZGVzIGFyZSB1c2VkLiAgQWZ0ZXIgZ29pbmcgdG8gdGhlIGxhc3QgbGluZSB3aXRoICJHIiwKK3RoZSAibyIgY29tbWFuZCBvcGVucyBhIG5ldyBsaW5lIGFuZCBzdGFydHMgSW5zZXJ0IG1vZGUuICBUaGUgdGV4dCAiRGF0ZTogIiBpcworaW5zZXJ0ZWQgYW5kIDxFc2M+IHRha2VzIHlvdSBvdXQgb2YgaW5zZXJ0IG1vZGUuCisgICBOb3RpY2UgdGhlIHVzZSBvZiBzcGVjaWFsIGtleXMgaW5zaWRlIDw+LiAgVGhpcyBpcyBjYWxsZWQgYW5nbGUgYnJhY2tldAorbm90YXRpb24uICBZb3UgdHlwZSB0aGVzZSBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzLCBub3QgYnkgcHJlc3NpbmcgdGhlIGtleQoraXRzZWxmLiAgVGhpcyBtYWtlcyB0aGUgbWFwcGluZ3MgYmV0dGVyIHJlYWRhYmxlIGFuZCB5b3UgY2FuIGNvcHkgYW5kIHBhc3RlCit0aGUgdGV4dCB3aXRob3V0IHByb2JsZW1zLgorICAgVGhlICI6IiBjaGFyYWN0ZXIgdGFrZXMgVmltIHRvIHRoZSBjb21tYW5kIGxpbmUuICBUaGUgIjpyZWFkICFkYXRlIiBjb21tYW5kCityZWFkcyB0aGUgb3V0cHV0IGZyb20gdGhlICJkYXRlIiBjb21tYW5kIGFuZCBhcHBlbmRzIGl0IGJlbG93IHRoZSBjdXJyZW50CitsaW5lLiAgVGhlIDxDUj4gaXMgcmVxdWlyZWQgdG8gZXhlY3V0ZSB0aGUgIjpyZWFkIiBjb21tYW5kLgorICAgQXQgdGhpcyBwb2ludCBvZiBleGVjdXRpb24gdGhlIHRleHQgbG9va3MgbGlrZSB0aGlzOgorCisJRGF0ZTogIH4KKwlGcmkgSnVuIDE1IDEyOjU0OjM0IENFU1QgMjAwMSB+CisKK05vdyAia0oiIG1vdmVzIHRoZSBjdXJzb3IgdXAgYW5kIGpvaW5zIHRoZSBsaW5lcyB0b2dldGhlci4KKyAgIFRvIGRlY2lkZSB3aGljaCBrZXkgb3Iga2V5cyB5b3UgdXNlIGZvciBtYXBwaW5nLCBzZWUgfG1hcC13aGljaC1rZXlzfC4KKworCitNQVBQSU5HIEFORCBNT0RFUworCitUaGUgIjptYXAiIGNvbW1hbmQgZGVmaW5lcyByZW1hcHBpbmcgZm9yIGtleXMgaW4gTm9ybWFsIG1vZGUuICBZb3UgY2FuIGFsc28KK2RlZmluZSBtYXBwaW5ncyBmb3Igb3RoZXIgbW9kZXMuICBGb3IgZXhhbXBsZSwgIjppbWFwIiBhcHBsaWVzIHRvIEluc2VydCBtb2RlLgorWW91IGNhbiB1c2UgaXQgdG8gaW5zZXJ0IGEgZGF0ZSBiZWxvdyB0aGUgY3Vyc29yOiA+CisKKwk6aW1hcCA8RjI+IDxDUj5EYXRlOiA8RXNjPjpyZWFkICFkYXRlPENSPmtKCisKK0l0IGxvb2tzIGEgbG90IGxpa2UgdGhlIG1hcHBpbmcgZm9yIDxGMj4gaW4gTm9ybWFsIG1vZGUsIG9ubHkgdGhlIHN0YXJ0IGlzCitkaWZmZXJlbnQuICBUaGUgPEYyPiBtYXBwaW5nIGZvciBOb3JtYWwgbW9kZSBpcyBzdGlsbCB0aGVyZS4gIFRodXMgeW91IGNhbiBtYXAKK3RoZSBzYW1lIGtleSBkaWZmZXJlbnRseSBmb3IgZWFjaCBtb2RlLgorICAgTm90aWNlIHRoYXQsIGFsdGhvdWdoIHRoaXMgbWFwcGluZyBzdGFydHMgaW4gSW5zZXJ0IG1vZGUsIGl0IGVuZHMgaW4gTm9ybWFsCittb2RlLiAgSWYgeW91IHdhbnQgaXQgdG8gY29udGludWUgaW4gSW5zZXJ0IG1vZGUsIGFwcGVuZCBhICJhIiB0byB0aGUgbWFwcGluZy4KKworSGVyZSBpcyBhbiBvdmVydmlldyBvZiBtYXAgY29tbWFuZHMgYW5kIGluIHdoaWNoIG1vZGUgdGhleSB3b3JrOgorCisJOm1hcAkJTm9ybWFsLCBWaXN1YWwgYW5kIE9wZXJhdG9yLXBlbmRpbmcKKwk6dm1hcAkJVmlzdWFsCisJOm5tYXAJCU5vcm1hbAorCTpvbWFwCQlPcGVyYXRvci1wZW5kaW5nCisJOm1hcCEJCUluc2VydCBhbmQgQ29tbWFuZC1saW5lCisJOmltYXAJCUluc2VydAorCTpjbWFwCQlDb21tYW5kLWxpbmUKKworT3BlcmF0b3ItcGVuZGluZyBtb2RlIGlzIHdoZW4geW91IHR5cGVkIGFuIG9wZXJhdG9yIGNoYXJhY3Rlciwgc3VjaCBhcyAiZCIgb3IKKyJ5IiwgYW5kIHlvdSBhcmUgZXhwZWN0ZWQgdG8gdHlwZSB0aGUgbW90aW9uIGNvbW1hbmQgb3IgYSB0ZXh0IG9iamVjdC4gIFRodXMKK3doZW4geW91IHR5cGUgImR3IiwgdGhlICJ3IiBpcyBlbnRlcmVkIGluIG9wZXJhdG9yLXBlbmRpbmcgbW9kZS4KKworU3VwcG9zZSB0aGF0IHlvdSB3YW50IHRvIGRlZmluZSA8Rjc+IHNvIHRoYXQgdGhlIGNvbW1hbmQgZDxGNz4gZGVsZXRlcyBhIEMKK3Byb2dyYW0gYmxvY2sgKHRleHQgZW5jbG9zZWQgaW4gY3VybHkgYnJhY2VzLCB7fSkuICBTaW1pbGFybHkgeTxGNz4gd291bGQgeWFuawordGhlIHByb2dyYW0gYmxvY2sgaW50byB0aGUgdW5uYW1lZCByZWdpc3Rlci4gIFRoZXJlZm9yZSwgd2hhdCB5b3UgbmVlZCB0byBkbworaXMgdG8gZGVmaW5lIDxGNz4gdG8gc2VsZWN0IHRoZSBjdXJyZW50IHByb2dyYW0gYmxvY2suICBZb3UgY2FuIGRvIHRoaXMgd2l0aAordGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6b21hcCA8Rjc+IGF7CisKK1RoaXMgY2F1c2VzIDxGNz4gdG8gcGVyZm9ybSBhIHNlbGVjdCBibG9jayAiYXsiIGluIG9wZXJhdG9yLXBlbmRpbmcgbW9kZSwganVzdAorbGlrZSB5b3UgdHlwZWQgaXQuICBUaGlzIG1hcHBpbmcgaXMgdXNlZnVsIGlmIHR5cGluZyBhIHsgb24geW91ciBrZXlib2FyZCBpcyBhCitiaXQgZGlmZmljdWx0LgorCisKK0xJU1RJTkcgTUFQUElOR1MKKworVG8gc2VlIHRoZSBjdXJyZW50bHkgZGVmaW5lZCBtYXBwaW5ncywgdXNlICI6bWFwIiB3aXRob3V0IGFyZ3VtZW50cy4gIE9yIG9uZQorb2YgdGhlIHZhcmlhbnRzIHRoYXQgaW5jbHVkZSB0aGUgbW9kZSBpbiB3aGljaCB0aGV5IHdvcmsuICBUaGUgb3V0cHV0IGNvdWxkCitsb29rIGxpa2UgdGhpczoKKworCSAgIF9nCQkgOmNhbGwgTXlHcmVwKDEpPENSPiB+CisJdiAgPEYyPgkJIDpzL14vPiAvPENSPjpub2g8Q1I+YGAgfgorCW4gIDxGMj4JCSA6Liwkcy9eLz4gLzxDUj46bm9oPENSPmBgIH4KKwkgICA8eEhvbWU+CSA8SG9tZT4KKwkgICA8eEVuZD4JIDxFbmQ+CisKKworVGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgbGlzdCBzaG93cyBpbiB3aGljaCBtb2RlIHRoZSBtYXBwaW5nIGlzIGVmZmVjdGl2ZS4KK1RoaXMgaXMgIm4iIGZvciBOb3JtYWwgbW9kZSwgImkiIGZvciBJbnNlcnQgbW9kZSwgZXRjLiAgQSBibGFuayBpcyB1c2VkIGZvciBhCittYXBwaW5nIGRlZmluZWQgd2l0aCAiOm1hcCIsIHRodXMgZWZmZWN0aXZlIGluIGJvdGggTm9ybWFsIGFuZCBWaXN1YWwgbW9kZS4KKyAgIE9uZSB1c2VmdWwgcHVycG9zZSBvZiBsaXN0aW5nIHRoZSBtYXBwaW5nIGlzIHRvIGNoZWNrIGlmIHNwZWNpYWwga2V5cyBpbiA8PgorZm9ybSBoYXZlIGJlZW4gcmVjb2duaXplZCAodGhpcyBvbmx5IHdvcmtzIHdoZW4gY29sb3IgaXMgc3VwcG9ydGVkKS4gIEZvcgorZXhhbXBsZSwgd2hlbiA8RXNjPiBpcyBkaXNwbGF5ZWQgaW4gY29sb3IsIGl0IHN0YW5kcyBmb3IgdGhlIGVzY2FwZSBjaGFyYWN0ZXIuCitXaGVuIGl0IGhhcyB0aGUgc2FtZSBjb2xvciBhcyB0aGUgb3RoZXIgdGV4dCwgaXQgaXMgZml2ZSBjaGFyYWN0ZXJzLgorCisKK1JFTUFQUElORworCitUaGUgcmVzdWx0IG9mIGEgbWFwcGluZyBpcyBpbnNwZWN0ZWQgZm9yIG90aGVyIG1hcHBpbmdzIGluIGl0LiAgRm9yIGV4YW1wbGUsCit0aGUgbWFwcGluZ3MgZm9yIDxGMj4gYWJvdmUgY291bGQgYmUgc2hvcnRlbmVkIHRvOiA+CisKKwk6bWFwIDxGMj4gRzxGMz4KKwk6aW1hcCA8RjI+IDxFc2M+PEYzPgorCTptYXAgPEYzPiAgb0RhdGU6IDxFc2M+OnJlYWQgIWRhdGU8Q1I+a0oKKworRm9yIE5vcm1hbCBtb2RlIDxGMj4gaXMgbWFwcGVkIHRvIGdvIHRvIHRoZSBsYXN0IGxpbmUsIGFuZCB0aGVuIGJlaGF2ZSBsaWtlCis8RjM+IHdhcyBwcmVzc2VkLiAgSW4gSW5zZXJ0IG1vZGUgPEYyPiBzdG9wcyBJbnNlcnQgbW9kZSB3aXRoIDxFc2M+IGFuZCB0aGVuCithbHNvIHVzZXMgPEYzPi4gIFRoZW4gPEYzPiBpcyBtYXBwZWQgdG8gZG8gdGhlIGFjdHVhbCB3b3JrLgorCitTdXBwb3NlIHlvdSBoYXJkbHkgZXZlciB1c2UgRXggbW9kZSwgYW5kIHdhbnQgdG8gdXNlIHRoZSAiUSIgY29tbWFuZCB0byBmb3JtYXQKK3RleHQgKHRoaXMgd2FzIHNvIGluIG9sZCB2ZXJzaW9ucyBvZiBWaW0pLiAgVGhpcyBtYXBwaW5nIHdpbGwgZG8gaXQ6ID4KKworCTptYXAgUSBncQorCitCdXQsIGluIHJhcmUgY2FzZXMgeW91IG5lZWQgdG8gdXNlIEV4IG1vZGUgYW55d2F5LiAgTGV0J3MgbWFwICJnUSIgdG8gUSwgc28KK3RoYXQgeW91IGNhbiBzdGlsbCBnbyB0byBFeCBtb2RlOiA+CisKKwk6bWFwIGdRIFEKKworV2hhdCBoYXBwZW5zIG5vdyBpcyB0aGF0IHdoZW4geW91IHR5cGUgImdRIiBpdCBpcyBtYXBwZWQgdG8gIlEiLiAgU28gZmFyIHNvCitnb29kLiAgQnV0IHRoZW4gIlEiIGlzIG1hcHBlZCB0byAiZ3EiLCB0aHVzIHR5cGluZyAiZ1EiIHJlc3VsdHMgaW4gImdxIiwgYW5kCit5b3UgZG9uJ3QgZ2V0IHRvIEV4IG1vZGUgYXQgYWxsLgorICAgVG8gYXZvaWQga2V5cyB0byBiZSBtYXBwZWQgYWdhaW4sIHVzZSB0aGUgIjpub3JlbWFwIiBjb21tYW5kOiA+CisKKwk6bm9yZW1hcCBnUSBRCisKK05vdyBWaW0ga25vd3MgdGhhdCB0aGUgIlEiIGlzIG5vdCB0byBiZSBpbnNwZWN0ZWQgZm9yIG1hcHBpbmdzIHRoYXQgYXBwbHkgdG8KK2l0LiAgVGhlcmUgaXMgYSBzaW1pbGFyIGNvbW1hbmQgZm9yIGV2ZXJ5IG1vZGU6CisKKwk6bm9yZW1hcAlOb3JtYWwsIFZpc3VhbCBhbmQgT3BlcmF0b3ItcGVuZGluZworCTp2bm9yZW1hcAlWaXN1YWwKKwk6bm5vcmVtYXAJTm9ybWFsCisJOm9ub3JlbWFwCU9wZXJhdG9yLXBlbmRpbmcKKwk6bm9yZW1hcCEJSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUKKwk6aW5vcmVtYXAJSW5zZXJ0CisJOmNub3JlbWFwCUNvbW1hbmQtbGluZQorCisKK1JFQ1VSU0lWRSBNQVBQSU5HCisKK1doZW4gYSBtYXBwaW5nIHRyaWdnZXJzIGl0c2VsZiwgaXQgd2lsbCBydW4gZm9yZXZlci4gIFRoaXMgY2FuIGJlIHVzZWQgdG8KK3JlcGVhdCBhbiBhY3Rpb24gYW4gdW5saW1pdGVkIG51bWJlciBvZiB0aW1lcy4KKyAgIEZvciBleGFtcGxlLCB5b3UgaGF2ZSBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBjb250YWluIGEgdmVyc2lvbiBudW1iZXIgaW4gdGhlCitmaXJzdCBsaW5lLiAgWW91IGVkaXQgdGhlc2UgZmlsZXMgd2l0aCAidmltICoudHh0Ii4gIFlvdSBhcmUgbm93IGVkaXRpbmcgdGhlCitmaXJzdCBmaWxlLiAgRGVmaW5lIHRoaXMgbWFwcGluZzogPgorCisJOm1hcCAsLCA6cy81LjEvNS4yLzxDUj46d25leHQ8Q1I+LCwKKworTm93IHlvdSB0eXBlICIsLCIuICBUaGlzIHRyaWdnZXJzIHRoZSBtYXBwaW5nLiAgSXQgcmVwbGFjZXMgIjUuMSIgd2l0aCAiNS4yIgoraW4gdGhlIGZpcnN0IGxpbmUuICBUaGVuIGl0IGRvZXMgYSAiOnduZXh0IiB0byB3cml0ZSB0aGUgZmlsZSBhbmQgZWRpdCB0aGUKK25leHQgb25lLiAgVGhlIG1hcHBpbmcgZW5kcyBpbiAiLCwiLiAgVGhpcyB0cmlnZ2VycyB0aGUgc2FtZSBtYXBwaW5nIGFnYWluLAordGh1cyBkb2luZyB0aGUgc3Vic3RpdHV0aW9uLCBldGMuCisgICBUaGlzIGNvbnRpbnVlcyB1bnRpbCB0aGVyZSBpcyBhbiBlcnJvci4gIEluIHRoaXMgY2FzZSBpdCBjb3VsZCBiZSBhIGZpbGUKK3doZXJlIHRoZSBzdWJzdGl0dXRlIGNvbW1hbmQgZG9lc24ndCBmaW5kIGEgbWF0Y2ggZm9yICI1LjEiLiAgWW91IGNhbiB0aGVuCittYWtlIGEgY2hhbmdlIHRvIGluc2VydCAiNS4xIiBhbmQgY29udGludWUgYnkgdHlwaW5nICIsLCIgYWdhaW4uICBPciB0aGUKKyI6d25leHQiIGZhaWxzLCBiZWNhdXNlIHlvdSBhcmUgaW4gdGhlIGxhc3QgZmlsZSBpbiB0aGUgbGlzdC4KKyAgIFdoZW4gYSBtYXBwaW5nIHJ1bnMgaW50byBhbiBlcnJvciBoYWxmd2F5LCB0aGUgcmVzdCBvZiB0aGUgbWFwcGluZyBpcworZGlzY2FyZGVkLiAgQ1RSTC1DIGludGVycnVwdHMgdGhlIG1hcHBpbmcgKENUUkwtQnJlYWsgb24gTVMtV2luZG93cykuCisKKworREVMRVRFIEEgTUFQUElORworCitUbyByZW1vdmUgYSBtYXBwaW5nIHVzZSB0aGUgIjp1bm1hcCIgY29tbWFuZC4gIEFnYWluLCB0aGUgbW9kZSB0aGUgdW5tYXBwaW5nCithcHBsaWVzIHRvIGRlcGVuZHMgb24gdGhlIGNvbW1hbmQgdXNlZDoKKworCTp1bm1hcAkJTm9ybWFsLCBWaXN1YWwgYW5kIE9wZXJhdG9yLXBlbmRpbmcKKwk6dnVubWFwCQlWaXN1YWwKKwk6bnVubWFwCQlOb3JtYWwKKwk6b3VubWFwCQlPcGVyYXRvci1wZW5kaW5nCisJOnVubWFwIQkJSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUKKwk6aXVubWFwCQlJbnNlcnQKKwk6Y3VubWFwCQlDb21tYW5kLWxpbmUKKworVGhlcmUgaXMgYSB0cmljayB0byBkZWZpbmUgYSBtYXBwaW5nIHRoYXQgd29ya3MgaW4gTm9ybWFsIGFuZCBPcGVyYXRvci1wZW5kaW5nCittb2RlLCBidXQgbm90IGluIFZpc3VhbCBtb2RlLiAgRmlyc3QgZGVmaW5lIGl0IGZvciBhbGwgdGhyZWUgbW9kZXMsIHRoZW4KK2RlbGV0ZSBpdCBmb3IgVmlzdWFsIG1vZGU6ID4KKworCTptYXAgPEMtQT4gLy0tLT48Q1I+CisJOnZ1bm1hcCA8Qy1BPgorCitOb3RpY2UgdGhhdCB0aGUgZml2ZSBjaGFyYWN0ZXJzICI8Qy1BPiIgc3RhbmQgZm9yIHRoZSBzaW5nbGUga2V5IENUUkwtQS4KKworVG8gcmVtb3ZlIGFsbCBtYXBwaW5ncyB1c2UgdGhlIHw6bWFwY2xlYXJ8IGNvbW1hbmQuICBZb3UgY2FuIGd1ZXNzIHRoZQordmFyaWF0aW9ucyBmb3IgZGlmZmVyZW50IG1vZGVzIGJ5IG5vdy4gIEJlIGNhcmVmdWwgd2l0aCB0aGlzIGNvbW1hbmQsIGl0IGNhbid0CitiZSB1bmRvbmUuCisKKworU1BFQ0lBTCBDSEFSQUNURVJTCisKK1RoZSAiOm1hcCIgY29tbWFuZCBjYW4gYmUgZm9sbG93ZWQgYnkgYW5vdGhlciBjb21tYW5kLiAgQSB8IGNoYXJhY3Rlcgorc2VwYXJhdGVzIHRoZSB0d28gY29tbWFuZHMuICBUaGlzIGFsc28gbWVhbnMgdGhhdCBhIHwgY2hhcmFjdGVyIGNhbid0IGJlIHVzZWQKK2luc2lkZSBhIG1hcCBjb21tYW5kLiAgVG8gaW5jbHVkZSBvbmUsIHVzZSA8QmFyPiAoZml2ZSBjaGFyYWN0ZXJzKS4gIEV4YW1wbGU6Cis+CisJOm1hcCA8Rjg+IDp3cml0ZSA8QmFyPiAhY2hlY2tpbiAlPENSPgorCitUaGUgc2FtZSBwcm9ibGVtIGFwcGxpZXMgdG8gdGhlICI6dW5tYXAiIGNvbW1hbmQsIHdpdGggdGhlIGFkZGl0aW9uIHRoYXQgeW91CitoYXZlIHRvIHdhdGNoIG91dCBmb3IgdHJhaWxpbmcgd2hpdGUgc3BhY2UuICBUaGVzZSB0d28gY29tbWFuZHMgYXJlIGRpZmZlcmVudDoKKz4KKwk6dW5tYXAgYSB8IHVubWFwIGIKKwk6dW5tYXAgYXwgdW5tYXAgYgorCitUaGUgZmlyc3QgY29tbWFuZCB0cmllcyB0byB1bm1hcCAiYSAiLCB3aXRoIGEgdHJhaWxpbmcgc3BhY2UuCisKK1doZW4gdXNpbmcgYSBzcGFjZSBpbnNpZGUgYSBtYXBwaW5nLCB1c2UgPFNwYWNlPiAoc2V2ZW4gY2hhcmFjdGVycyk6ID4KKworCTptYXAgPFNwYWNlPiBXCisKK1RoaXMgbWFrZXMgdGhlIHNwYWNlYmFyIG1vdmUgYSBibGFuay1zZXBhcmF0ZWQgd29yZCBmb3J3YXJkLgorCitJdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IGEgY29tbWVudCBkaXJlY3RseSBhZnRlciBhIG1hcHBpbmcsIGJlY2F1c2UgdGhlICIKK2NoYXJhY3RlciBpcyBjb25zaWRlcmVkIHRvIGJlIHBhcnQgb2YgdGhlIG1hcHBpbmcuICBZb3UgY2FuIHVzZSB8IiwgdGhpcworc3RhcnRzIGEgbmV3LCBlbXB0eSBjb21tYW5kIHdpdGggYSBjb21tZW50LiAgRXhhbXBsZTogPgorCisJOm1hcCA8U3BhY2U+IFd8ICAgICAiIFVzZSBzcGFjZWJhciB0byBtb3ZlIGZvcndhcmQgYSB3b3JkCisKKworTUFQUElOR1MgQU5EIEFCQlJFVklBVElPTlMKKworQWJicmV2aWF0aW9ucyBhcmUgYSBsb3QgbGlrZSBJbnNlcnQgbW9kZSBtYXBwaW5ncy4gIFRoZSBhcmd1bWVudHMgYXJlIGhhbmRsZWQKK2luIHRoZSBzYW1lIHdheS4gIFRoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhlIHdheSB0aGV5IGFyZSB0cmlnZ2VyZWQuICBBbgorYWJicmV2aWF0aW9uIGlzIHRyaWdnZXJlZCBieSB0eXBpbmcgYSBub24td29yZCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHdvcmQuICBBCittYXBwaW5nIGlzIHRyaWdnZXJlZCB3aGVuIHR5cGluZyB0aGUgbGFzdCBjaGFyYWN0ZXIuCisgICBBbm90aGVyIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgY2hhcmFjdGVycyB5b3UgdHlwZSBmb3IgYW4gYWJicmV2aWF0aW9uIGFyZQoraW5zZXJ0ZWQgaW4gdGhlIHRleHQgd2hpbGUgeW91IHR5cGUgdGhlbS4gIFdoZW4gdGhlIGFiYnJldmlhdGlvbiBpcyB0cmlnZ2VyZWQKK3RoZXNlIGNoYXJhY3RlcnMgYXJlIGRlbGV0ZWQgYW5kIHJlcGxhY2VkIGJ5IHdoYXQgdGhlIGFiYnJldmlhdGlvbiBwcm9kdWNlcy4KK1doZW4gdHlwaW5nIHRoZSBjaGFyYWN0ZXJzIGZvciBhIG1hcHBpbmcsIG5vdGhpbmcgaXMgaW5zZXJ0ZWQgdW50aWwgeW91IHR5cGUKK3RoZSBsYXN0IGNoYXJhY3RlciB0aGF0IHRyaWdnZXJzIGl0LiAgSWYgdGhlICdzaG93Y21kJyBvcHRpb24gaXMgc2V0LCB0aGUKK3R5cGVkIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBpbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBWaW0gd2luZG93LgorICAgQW4gZXhjZXB0aW9uIGlzIHdoZW4gYSBtYXBwaW5nIGlzIGFtYmlndW91cy4gIFN1cHBvc2UgeW91IGhhdmUgZG9uZSB0d28KK21hcHBpbmdzOiA+CisKKwk6aW1hcCBhYSBmb28KKwk6aW1hcCBhYWEgYmFyCisKK05vdywgd2hlbiB5b3UgdHlwZSAiYWEiLCBWaW0gZG9lc24ndCBrbm93IGlmIGl0IHNob3VsZCBhcHBseSB0aGUgZmlyc3Qgb3IgdGhlCitzZWNvbmQgbWFwcGluZy4gIEl0IHdhaXRzIGZvciBhbm90aGVyIGNoYXJhY3RlciB0byBiZSB0eXBlZC4gIElmIGl0IGlzIGFuICJhIiwKK3RoZSBzZWNvbmQgbWFwcGluZyBpcyBhcHBsaWVkIGFuZCByZXN1bHRzIGluICJiYXIiLiAgSWYgaXQgaXMgYSBzcGFjZSwgZm9yCitleGFtcGxlLCB0aGUgZmlyc3QgbWFwcGluZyBpcyBhcHBsaWVkLCByZXN1bHRpbmcgaW4gImZvbyIsIGFuZCB0aGVuIHRoZSBzcGFjZQoraXMgaW5zZXJ0ZWQuCisKKworQURESVRJT05BTExZLi4uCisKK1RoZSA8c2NyaXB0PiBrZXl3b3JkIGNhbiBiZSB1c2VkIHRvIG1ha2UgYSBtYXBwaW5nIGxvY2FsIHRvIGEgc2NyaXB0LiAgU2VlCit8Om1hcC08c2NyaXB0PnwuCisKK1RoZSA8YnVmZmVyPiBrZXl3b3JkIGNhbiBiZSB1c2VkIHRvIG1ha2UgYSBtYXBwaW5nIGxvY2FsIHRvIGEgc3BlY2lmaWMgYnVmZmVyLgorU2VlIHw6bWFwLTxidWZmZXI+fAorCitUaGUgPHVuaXF1ZT4ga2V5d29yZCBjYW4gYmUgdXNlZCB0byBtYWtlIGRlZmluaW5nIGEgbmV3IG1hcHBpbmcgZmFpbCB3aGVuIGl0CithbHJlYWR5IGV4aXN0cy4gIE90aGVyd2lzZSBhIG5ldyBtYXBwaW5nIHNpbXBseSBvdmVyd3JpdGVzIHRoZSBvbGQgb25lLiAgU2VlCit8Om1hcC08dW5pcXVlPnwuCisKK1RvIG1ha2UgYSBrZXkgZG8gbm90aGluZywgbWFwIGl0IHRvIDxOb3A+IChmaXZlIGNoYXJhY3RlcnMpLiAgVGhpcyB3aWxsIG1ha2UKK3RoZSA8Rjc+IGtleSBkbyBub3RoaW5nIGF0IGFsbDogPgorCisJOm1hcCA8Rjc+IDxOb3A+fCBtYXAhIDxGNz4gPE5vcD4KKworVGhlcmUgbXVzdCBiZSBubyBzcGFjZSBhZnRlciA8Tm9wPi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDAuMioJRGVmaW5pbmcgY29tbWFuZC1saW5lIGNvbW1hbmRzCisKK1RoZSBWaW0gZWRpdG9yIGVuYWJsZXMgeW91IHRvIGRlZmluZSB5b3VyIG93biBjb21tYW5kcy4gIFlvdSBleGVjdXRlIHRoZXNlCitjb21tYW5kcyBqdXN0IGxpa2UgYW55IG90aGVyIENvbW1hbmQtbGluZSBtb2RlIGNvbW1hbmQuCisgICBUbyBkZWZpbmUgYSBjb21tYW5kLCB1c2UgdGhlICI6Y29tbWFuZCIgY29tbWFuZCwgYXMgZm9sbG93czogPgorCisJOmNvbW1hbmQgRGVsZXRlRmlyc3QgMWRlbGV0ZQorCitOb3cgd2hlbiB5b3UgZXhlY3V0ZSB0aGUgY29tbWFuZCAiOkRlbGV0ZUZpcnN0IiBWaW0gZXhlY3V0ZXMgIjoxZGVsZXRlIiwgd2hpY2gKK2RlbGV0ZXMgdGhlIGZpcnN0IGxpbmUuCisKKwlOb3RlOgorCVVzZXItZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsIGxldHRlci4gIFlvdSBjYW5ub3QKKwl1c2UgIjpYIiwgIjpOZXh0IiBhbmQgIjpQcmludCIuICBUaGUgdW5kZXJzY29yZSBjYW5ub3QgYmUgdXNlZCEgIFlvdQorCWNhbiB1c2UgZGlnaXRzLCBidXQgdGhpcyBpcyBkaXNjb3VyYWdlZC4KKworVG8gbGlzdCB0aGUgdXNlci1kZWZpbmVkIGNvbW1hbmRzLCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOmNvbW1hbmQKKworSnVzdCBsaWtlIHdpdGggdGhlIGJ1aWx0aW4gY29tbWFuZHMsIHRoZSB1c2VyIGRlZmluZWQgY29tbWFuZHMgY2FuIGJlCithYmJyZXZpYXRlZC4gIFlvdSBuZWVkIHRvIHR5cGUganVzdCBlbm91Z2ggdG8gZGlzdGluZ3Vpc2ggdGhlIGNvbW1hbmQgZnJvbQorYW5vdGhlci4gIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIGNhbiBiZSB1c2VkIHRvIGdldCB0aGUgZnVsbCBuYW1lLgorCisKK05VTUJFUiBPRiBBUkdVTUVOVFMKKworVXNlci1kZWZpbmVkIGNvbW1hbmRzIGNhbiB0YWtlIGEgc2VyaWVzIG9mIGFyZ3VtZW50cy4gIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzCittdXN0IGJlIHNwZWNpZmllZCBieSB0aGUgLW5hcmdzIG9wdGlvbi4gIEZvciBpbnN0YW5jZSwgdGhlIGV4YW1wbGUKKzpEZWxldGVGaXJzdCBjb21tYW5kIHRha2VzIG5vIGFyZ3VtZW50cywgc28geW91IGNvdWxkIGhhdmUgZGVmaW5lZCBpdCBhcworZm9sbG93czogPgorCisJOmNvbW1hbmQgLW5hcmdzPTAgRGVsZXRlRmlyc3QgMWRlbGV0ZQorCitIb3dldmVyLCBiZWNhdXNlIHplcm8gYXJndW1lbnRzIGlzIHRoZSBkZWZhdWx0LCB5b3UgZG8gbm90IG5lZWQgdG8gYWRkCisiLW5hcmdzPTAiLiAgVGhlIG90aGVyIHZhbHVlcyBvZiAtbmFyZ3MgYXJlIGFzIGZvbGxvd3M6CisKKwktbmFyZ3M9MAlObyBhcmd1bWVudHMKKwktbmFyZ3M9MQlPbmUgYXJndW1lbnQKKwktbmFyZ3M9KglBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cworCS1uYXJncz0/CVplcm8gb3Igb25lIGFyZ3VtZW50CisJLW5hcmdzPSsJT25lIG9yIG1vcmUgYXJndW1lbnRzCisKKworVVNJTkcgVEhFIEFSR1VNRU5UUworCitJbnNpZGUgdGhlIGNvbW1hbmQgZGVmaW5pdGlvbiwgdGhlIGFyZ3VtZW50cyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlCis8YXJncz4ga2V5d29yZC4gIEZvciBleGFtcGxlOiA+CisKKwk6Y29tbWFuZCAtbmFyZ3M9KyBTYXkgOmVjaG8gIjxhcmdzPiIKKworTm93IHdoZW4geW91IHR5cGUgPgorCisJOlNheSBIZWxsbyBXb3JsZAorCitWaW0gZWNob2VzICJIZWxsbyBXb3JsZCIuICBIb3dldmVyLCBpZiB5b3UgYWRkIGEgZG91YmxlIHF1b3RlLCBpdCB3b24ndCB3b3JrLgorRm9yIGV4YW1wbGU6ID4KKworCTpTYXkgaGUgc2FpZCAiaGVsbG8iCisKK1RvIGdldCBzcGVjaWFsIGNoYXJhY3RlcnMgdHVybmVkIGludG8gYSBzdHJpbmcsIHByb3Blcmx5IGVzY2FwZWQgdG8gdXNlIGFzIGFuCitleHByZXNzaW9uLCB1c2UgIjxxLWFyZ3M+IjogPgorCisJOmNvbW1hbmQgLW5hcmdzPSsgU2F5IDplY2hvIDxxLWFyZ3M+CisKK05vdyB0aGUgYWJvdmUgIjpTYXkiIGNvbW1hbmQgd2lsbCByZXN1bHQgaW4gdGhpcyB0byBiZSBleGVjdXRlZDogPgorCisJOmVjaG8gImhlIHNhaWQgXCJoZWxsb1wiIgorCitUaGUgPGYtYXJncz4ga2V5d29yZCBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyB0aGUgPGFyZ3M+IGtleXdvcmQsCitleGNlcHQgaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIHVzZSBhcyBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cy4gIEZvciBleGFtcGxlOgorPgorCTpjb21tYW5kIC1uYXJncz0qIERvSXQgOmNhbGwgQUZ1bmN0aW9uKDxmLWFyZ3M+KQorCTpEb0l0IGEgYiBjCisKK0V4ZWN1dGVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOmNhbGwgQUZ1bmN0aW9uKCJhIiwgImIiLCAiYyIpCisKKworTElORSBSQU5HRQorCitTb21lIGNvbW1hbmRzIHRha2UgYSByYW5nZSBhcyB0aGVpciBhcmd1bWVudC4gIFRvIHRlbGwgVmltIHRoYXQgeW91IGFyZQorZGVmaW5pbmcgc3VjaCBhIGNvbW1hbmQsIHlvdSBuZWVkIHRvIHNwZWNpZnkgYSAtcmFuZ2Ugb3B0aW9uLiAgVGhlIHZhbHVlcyBmb3IKK3RoaXMgb3B0aW9uIGFyZSBhcyBmb2xsb3dzOgorCisJLXJhbmdlCQlSYW5nZSBpcyBhbGxvd2VkOyBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IGxpbmUuCisJLXJhbmdlPSUJUmFuZ2UgaXMgYWxsb3dlZDsgZGVmYXVsdCBpcyB0aGUgd2hvbGUgZmlsZS4KKwktcmFuZ2U9e2NvdW50fQlSYW5nZSBpcyBhbGxvd2VkOyB0aGUgbGFzdCBudW1iZXIgaW4gaXQgaXMgdXNlZCBhcyBhCisJCQlzaW5nbGUgbnVtYmVyIHdob3NlIGRlZmF1bHQgaXMge2NvdW50fS4KKworV2hlbiBhIHJhbmdlIGlzIHNwZWNpZmllZCwgdGhlIGtleXdvcmRzIDxsaW5lMT4gYW5kIDxsaW5lMj4gZ2V0IHRoZSB2YWx1ZXMgb2YKK3RoZSBmaXJzdCBhbmQgbGFzdCBsaW5lIGluIHRoZSByYW5nZS4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQKK2RlZmluZXMgdGhlIFNhdmVJdCBjb21tYW5kLCB3aGljaCB3cml0ZXMgb3V0IHRoZSBzcGVjaWZpZWQgcmFuZ2UgdG8gdGhlIGZpbGUKKyJzYXZlX2ZpbGUiOiA+CisKKwk6Y29tbWFuZCAtcmFuZ2U9JSBTYXZlSXQgOjxsaW5lMT4sPGxpbmUyPndyaXRlISBzYXZlX2ZpbGUKKworCitPVEhFUiBPUFRJT05TCisKK1NvbWUgb2YgdGhlIG90aGVyIG9wdGlvbnMgYW5kIGtleXdvcmRzIGFyZSBhcyBmb2xsb3dzOgorCisJLWNvdW50PXtudW1iZXJ9CQlUaGUgY29tbWFuZCBjYW4gdGFrZSBhIGNvdW50IHdob3NlIGRlZmF1bHQgaXMKKwkJCQl7bnVtYmVyfS4gIFRoZSByZXN1bHRpbmcgY291bnQgY2FuIGJlIHVzZWQKKwkJCQl0aHJvdWdoIHRoZSA8Y291bnQ+IGtleXdvcmQuCisJLWJhbmcJCQlZb3UgY2FuIHVzZSBhICEuIElmIHByZXNlbnQsIHVzaW5nIDxiYW5nPiB3aWxsCisJCQkJcmVzdWx0IGluIGEgIS4KKwktcmVnaXN0ZXIJCVlvdSBjYW4gc3BlY2lmeSBhIHJlZ2lzdGVyLiAoVGhlIGRlZmF1bHQgaXMKKwkJCQl0aGUgdW5uYW1lZCByZWdpc3Rlci4pCisJCQkJVGhlIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIGFzCisJCQkJPHJlZz4gKGEuay5hLiA8cmVnaXN0ZXI+KS4KKwktY29tcGxldGU9e3R5cGV9CVR5cGUgb2YgY29tbWFuZC1saW5lIGNvbXBsZXRpb24gdXNlZC4gIFNlZQorCQkJCXw6Y29tbWFuZC1jb21wbGV0aW9ufCBmb3IgdGhlIGxpc3Qgb2YgcG9zc2libGUKKwkJCQl2YWx1ZXMuCisJLWJhcgkJCVRoZSBjb21tYW5kIGNhbiBiZSBmb2xsb3dlZCBieSB8IGFuZCBhbm90aGVyCisJCQkJY29tbWFuZCwgb3IgIiBhbmQgYSBjb21tZW50LgorCS1idWZmZXIJCQlUaGUgY29tbWFuZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQKKwkJCQlidWZmZXIuCisKK0ZpbmFsbHksIHlvdSBoYXZlIHRoZSA8bHQ+IGtleXdvcmQuICBJdCBzdGFuZHMgZm9yIHRoZSBjaGFyYWN0ZXIgPC4gIFVzZSB0aGlzCit0byBlc2NhcGUgdGhlIHNwZWNpYWwgbWVhbmluZyBvZiB0aGUgPD4gaXRlbXMgbWVudGlvbmVkLgorCisKK1JFREVGSU5JTkcgQU5EIERFTEVUSU5HCisKK1RvIHJlZGVmaW5lIHRoZSBzYW1lIGNvbW1hbmQgdXNlIHRoZSAhIGFyZ3VtZW50OiA+CisKKwk6Y29tbWFuZCAtbmFyZ3M9KyBTYXkgOmVjaG8gIjxhcmdzPiIKKwk6Y29tbWFuZCEgLW5hcmdzPSsgU2F5IDplY2hvIDxxLWFyZ3M+CisKK1RvIGRlbGV0ZSBhIHVzZXIgY29tbWFuZCB1c2UgIjpkZWxjb21tYW5kIi4gIEl0IHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LCB3aGljaAoraXMgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuICBFeGFtcGxlOiA+CisKKwk6ZGVsY29tbWFuZCBTYXZlSXQKKworVG8gZGVsZXRlIGFsbCB0aGUgdXNlciBjb21tYW5kczogPgorCisJOmNvbWNsZWFyCisKK0NhcmVmdWwsIHRoaXMgY2FuJ3QgYmUgdW5kb25lIQorCitNb3JlIGRldGFpbHMgYWJvdXQgYWxsIHRoaXMgaW4gdGhlIHJlZmVyZW5jZSBtYW51YWw6IHx1c2VyLWNvbW1hbmRzfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDAuMyoJQXV0b2NvbW1hbmRzCisKK0FuIGF1dG9jb21tYW5kIGlzIGEgY29tbWFuZCB0aGF0IGlzIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkgaW4gcmVzcG9uc2UgdG8gc29tZQorZXZlbnQsIHN1Y2ggYXMgYSBmaWxlIGJlaW5nIHJlYWQgb3Igd3JpdHRlbiBvciBhIGJ1ZmZlciBjaGFuZ2UuIFRocm91Z2ggdGhlCit1c2Ugb2YgYXV0b2NvbW1hbmRzIHlvdSBjYW4gdHJhaW4gVmltIHRvIGVkaXQgY29tcHJlc3NlZCBmaWxlcywgZm9yIGV4YW1wbGUuCitUaGF0IGlzIHVzZWQgaW4gdGhlIHxnemlwfCBwbHVnaW4uCisgICBBdXRvY29tbWFuZHMgYXJlIHZlcnkgcG93ZXJmdWwuICBVc2UgdGhlbSB3aXRoIGNhcmUgYW5kIHRoZXkgd2lsbCBoZWxwIHlvdQorYXZvaWQgdHlwaW5nIG1hbnkgY29tbWFuZHMuICBVc2UgdGhlbSBjYXJlbGVzc2x5IGFuZCB0aGV5IHdpbGwgY2F1c2UgYSBsb3Qgb2YKK3Ryb3VibGUuCisKK1N1cHBvc2UgeW91IHdhbnQgdG8gcmVwbGFjZSBhIGRhdGUgc3RhbXAgb24gdGhlIGVuZCBvZiBhIGZpbGUgZXZlcnkgdGltZSBpdCBpcword3JpdHRlbi4gIEZpcnN0IHlvdSBkZWZpbmUgYSBmdW5jdGlvbjogPgorCisJOmZ1bmN0aW9uIERhdGVJbnNlcnQoKQorCTogICRkZWxldGUKKwk6ICByZWFkICFkYXRlCisJOmVuZGZ1bmN0aW9uCisKK1lvdSB3YW50IHRoaXMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGVhY2ggdGltZSwganVzdCBiZWZvcmUgYSBmaWxlIGlzIHdyaXR0ZW4uCitUaGlzIHdpbGwgbWFrZSB0aGF0IGhhcHBlbjogPgorCisJOmF1dG9jbWQgRmlsZVdyaXRlUHJlICogIGNhbGwgRGF0ZUluc2VydCgpCisKKyJGaWxlV3JpdGVQcmUiIGlzIHRoZSBldmVudCBmb3Igd2hpY2ggdGhpcyBhdXRvY29tbWFuZCBpcyB0cmlnZ2VyZWQ6IEp1c3QKK2JlZm9yZSAocHJlKSB3cml0aW5nIGEgZmlsZS4gIFRoZSAiKiIgaXMgYSBwYXR0ZXJuIHRvIG1hdGNoIHdpdGggdGhlIGZpbGUKK25hbWUuICBJbiB0aGlzIGNhc2UgaXQgbWF0Y2hlcyBhbGwgZmlsZXMuCisgICBXaXRoIHRoaXMgY29tbWFuZCBlbmFibGVkLCB3aGVuIHlvdSBkbyBhICI6d3JpdGUiLCBWaW0gY2hlY2tzIGZvciBhbnkKK21hdGNoaW5nIEZpbGVXcml0ZVByZSBhdXRvY29tbWFuZHMgYW5kIGV4ZWN1dGVzIHRoZW0sIGFuZCB0aGVuIGl0CitwZXJmb3JtcyB0aGUgIjp3cml0ZSIuCisgICBUaGUgZ2VuZXJhbCBmb3JtIG9mIHRoZSA6YXV0b2NtZCBjb21tYW5kIGlzIGFzIGZvbGxvd3M6ID4KKworCTphdXRvY21kIFtncm91cF0ge2V2ZW50c30ge2ZpbGVfcGF0dGVybn0gW25lc3RlZF0ge2NvbW1hbmR9CisKK1RoZSBbZ3JvdXBdIG5hbWUgaXMgb3B0aW9uYWwuICBJdCBpcyB1c2VkIGluIG1hbmFnaW5nIGFuZCBjYWxsaW5nIHRoZSBjb21tYW5kcworKG1vcmUgb24gdGhpcyBsYXRlcikuICBUaGUge2V2ZW50c30gcGFyYW1ldGVyIGlzIGEgbGlzdCBvZiBldmVudHMgKGNvbW1hCitzZXBhcmF0ZWQpIHRoYXQgdHJpZ2dlciB0aGUgY29tbWFuZC4KKyAgIHtmaWxlX3BhdHRlcm59IGlzIGEgZmlsZW5hbWUsIHVzdWFsbHkgd2l0aCB3aWxkY2FyZHMuICBGb3IgZXhhbXBsZSwgdXNpbmcKKyIqLnR4dCIgbWFrZXMgdGhlIGF1dG9jb21tYW5kIGJlIHVzZWQgZm9yIGFsbCBmaWxlcyB3aG9zZSBuYW1lIGVuZCBpbiAiLnR4dCIuCitUaGUgb3B0aW9uYWwgW25lc3RlZF0gZmxhZyBhbGxvd3MgZm9yIG5lc3Rpbmcgb2YgYXV0b2NvbW1hbmRzIChzZWUgYmVsb3cpLCBhbmQKK2ZpbmFsbHksIHtjb21tYW5kfSBpcyB0aGUgY29tbWFuZCB0byBiZSBleGVjdXRlZC4KKworCitFVkVOVFMKKworT25lIG9mIHRoZSBtb3N0IHVzZWZ1bCBldmVudHMgaXMgQnVmUmVhZFBvc3QuICBJdCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgYSBuZXcKK2ZpbGUgaXMgYmVpbmcgZWRpdGVkLiAgSXQgaXMgY29tbW9ubHkgdXNlZCB0byBzZXQgb3B0aW9uIHZhbHVlcy4gIEZvciBleGFtcGxlLAoreW91IGtub3cgdGhhdCAiKi5nc20iIGZpbGVzIGFyZSBHTlUgYXNzZW1ibHkgbGFuZ3VhZ2UuICBUbyBnZXQgdGhlIHN5bnRheCBmaWxlCityaWdodCwgZGVmaW5lIHRoaXMgYXV0b2NvbW1hbmQ6ID4KKworCTphdXRvY21kIEJ1ZlJlYWRQb3N0ICouZ3NtICBzZXQgZmlsZXR5cGU9YXNtCisKK0lmIFZpbSBpcyBhYmxlIHRvIGRldGVjdCB0aGUgdHlwZSBvZiBmaWxlLCBpdCB3aWxsIHNldCB0aGUgJ2ZpbGV0eXBlJyBvcHRpb24KK2ZvciB5b3UuICBUaGlzIHRyaWdnZXJzIHRoZSBGaWxldHlwZSBldmVudC4gIFVzZSB0aGlzIHRvIGRvIHNvbWV0aGluZyB3aGVuIGEKK2NlcnRhaW4gdHlwZSBvZiBmaWxlIGlzIGVkaXRlZC4gIEZvciBleGFtcGxlLCB0byBsb2FkIGEgbGlzdCBvZiBhYmJyZXZpYXRpb25zCitmb3IgdGV4dCBmaWxlczogPgorCisJOmF1dG9jbWQgRmlsZXR5cGUgdGV4dCAgc291cmNlIH4vLnZpbS9hYmJyZXZzLnZpbQorCitXaGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBuZXcgZmlsZSwgeW91IGNvdWxkIG1ha2UgVmltIGluc2VydCBhIHNrZWxldG9uOiA+CisKKwk6YXV0b2NtZCBCdWZOZXdGaWxlICouW2NoXSAgMHJlYWQgfi9za2VsZXRvbnMvc2tlbC5jCisKK1NlZSB8YXV0b2NtZC1ldmVudHN8IGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgZXZlbnRzLgorCisKK1BBVFRFUk5TCisKK1RoZSB7ZmlsZV9wYXR0ZXJufSBhcmd1bWVudCBjYW4gYWN0dWFsbHkgYmUgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlCitwYXR0ZXJucy4gIEZvciBleGFtcGxlOiAiKi5jLCouaCIgbWF0Y2hlcyBmaWxlcyBlbmRpbmcgaW4gIi5jIiBhbmQgIi5oIi4KKyAgIFRoZSB1c3VhbCBmaWxlIHdpbGRjYXJkcyBjYW4gYmUgdXNlZC4gIEhlcmUgaXMgYSBzdW1tYXJ5IG9mIHRoZSBtb3N0IG9mdGVuCit1c2VkIG9uZXM6CisKKwkqCQlNYXRjaCBhbnkgY2hhcmFjdGVyIGFueSBudW1iZXIgb2YgdGltZXMKKwk/CQlNYXRjaCBhbnkgY2hhcmFjdGVyIG9uY2UKKwlbYWJjXQkJTWF0Y2ggdGhlIGNoYXJhY3RlciBhLCBiIG9yIGMKKwkuCQlNYXRjaGVzIGEgZG90CisJYXtiLGN9CQlNYXRjaGVzICJhYiIgYW5kICJhYyIKKworV2hlbiB0aGUgcGF0dGVybiBpbmNsdWRlcyBhIHNsYXNoICgvKSBWaW0gd2lsbCBjb21wYXJlIGRpcmVjdG9yeSBuYW1lcy4KK1dpdGhvdXQgdGhlIHNsYXNoIG9ubHkgdGhlIGxhc3QgcGFydCBvZiBhIGZpbGUgbmFtZSBpcyB1c2VkLiAgRm9yIGV4YW1wbGUsCisiKi50eHQiIG1hdGNoZXMgIi9ob21lL2JpZXAvcmVhZG1lLnR4dCIuICBUaGUgcGF0dGVybiAiL2hvbWUvYmllcC8qIiB3b3VsZAorYWxzbyBtYXRjaCBpdC4gIEJ1dCAiaG9tZS9mb28vKi50eHQiIHdvdWxkbid0LgorICAgV2hlbiBpbmNsdWRpbmcgYSBzbGFzaCwgVmltIG1hdGNoZXMgdGhlIHBhdHRlcm4gYWdhaW5zdCBib3RoIHRoZSBmdWxsIHBhdGgKK29mIHRoZSBmaWxlICgiL2hvbWUvYmllcC9yZWFkbWUudHh0IikgYW5kIHRoZSByZWxhdGl2ZSBwYXRoIChlLmcuLAorImJpZXAvcmVhZG1lLnR4dCIpLgorCisJTm90ZToKKwlXaGVuIHdvcmtpbmcgb24gYSBzeXN0ZW0gdGhhdCB1c2VzIGEgYmFja3NsYXNoIGFzIGZpbGUgc2VwYXJhdG9yLCBzdWNoCisJYXMgTVMtV2luZG93cywgeW91IHN0aWxsIHVzZSBmb3J3YXJkIHNsYXNoZXMgaW4gYXV0b2NvbW1hbmRzLiAgVGhpcworCW1ha2VzIGl0IGVhc2llciB0byB3cml0ZSB0aGUgcGF0dGVybiwgc2luY2UgYSBiYWNrc2xhc2ggaGFzIGEgc3BlY2lhbAorCW1lYW5pbmcuICBJdCBhbHNvIG1ha2VzIHRoZSBhdXRvY29tbWFuZHMgcG9ydGFibGUuCisKKworREVMRVRJTkcKKworVG8gZGVsZXRlIGFuIGF1dG9jb21tYW5kLCB1c2UgdGhlIHNhbWUgY29tbWFuZCBhcyB3aGF0IGl0IHdhcyBkZWZpbmVkIHdpdGgsCitidXQgbGVhdmUgb3V0IHRoZSB7Y29tbWFuZH0gYXQgdGhlIGVuZCBhbmQgdXNlIGEgIS4gIEV4YW1wbGU6ID4KKworCTphdXRvY21kISBGaWxlV3JpdGVQcmUgKgorCitUaGlzIHdpbGwgZGVsZXRlIGFsbCBhdXRvY29tbWFuZHMgZm9yIHRoZSAiRmlsZVdyaXRlUHJlIiBldmVudCB0aGF0IHVzZSB0aGUKKyIqIiBwYXR0ZXJuLgorCisKK0xJU1RJTkcKKworVG8gbGlzdCBhbGwgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGF1dG9jb21tYW5kcywgdXNlIHRoaXM6ID4KKworCTphdXRvY21kCisKK1RoZSBsaXN0IGNhbiBiZSB2ZXJ5IGxvbmcsIGVzcGVjaWFsbHkgd2hlbiBmaWxldHlwZSBkZXRlY3Rpb24gaXMgdXNlZC4gIFRvCitsaXN0IG9ubHkgcGFydCBvZiB0aGUgY29tbWFuZHMsIHNwZWNpZnkgdGhlIGdyb3VwLCBldmVudCBhbmQvb3IgcGF0dGVybi4gIEZvcgorZXhhbXBsZSwgdG8gbGlzdCBhbGwgQnVmTmV3RmlsZSBhdXRvY29tbWFuZHM6ID4KKworCTphdXRvY21kIEJ1Zk5ld0ZpbGUKKworVG8gbGlzdCBhbGwgYXV0b2NvbW1hbmRzIGZvciB0aGUgcGF0dGVybiAiKi5jIjogPgorCisJOmF1dG9jbWQgKiAqLmMKKworVXNpbmcgIioiIGZvciB0aGUgZXZlbnQgd2lsbCBsaXN0IGFsbCB0aGUgZXZlbnRzLiAgVG8gbGlzdCBhbGwgYXV0b2NvbW1hbmRzCitmb3IgdGhlIGNwcm9ncmFtcyBncm91cDogPgorCisJOmF1dG9jbWQgY3Byb2dyYW1zCisKKworR1JPVVBTCisKK1RoZSB7Z3JvdXB9IGl0ZW0sIHVzZWQgd2hlbiBkZWZpbmluZyBhbiBhdXRvY29tbWFuZCwgZ3JvdXBzIHJlbGF0ZWQgYXV0b2NvbW1hbmRzCit0b2dldGhlci4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGVsZXRlIGFsbCB0aGUgYXV0b2NvbW1hbmRzIGluIGEgY2VydGFpbiBncm91cCwKK2ZvciBleGFtcGxlLgorICAgV2hlbiBkZWZpbmluZyBzZXZlcmFsIGF1dG9jb21tYW5kcyBmb3IgYSBjZXJ0YWluIGdyb3VwLCB1c2UgdGhlICI6YXVncm91cCIKK2NvbW1hbmQuICBGb3IgZXhhbXBsZSwgbGV0J3MgZGVmaW5lIGF1dG9jb21tYW5kcyBmb3IgQyBwcm9ncmFtczogPgorCisJOmF1Z3JvdXAgY3Byb2dyYW1zCisJOiAgYXV0b2NtZCBCdWZSZWFkUG9zdCAqLmMsKi5oIDpzZXQgc3c9NCBzdHM9NAorCTogIGF1dG9jbWQgQnVmUmVhZFBvc3QgKi5jcHAgICA6c2V0IHN3PTMgc3RzPTMKKwk6YXVncm91cCBFTkQKKworVGhpcyB3aWxsIGRvIHRoZSBzYW1lIGFzOiA+CisKKwk6YXV0b2NtZCBjcHJvZ3JhbXMgQnVmUmVhZFBvc3QgKi5jLCouaCA6c2V0IHN3PTQgc3RzPTQKKwk6YXV0b2NtZCBjcHJvZ3JhbXMgQnVmUmVhZFBvc3QgKi5jcHAgICA6c2V0IHN3PTMgc3RzPTMKKworVG8gZGVsZXRlIGFsbCBhdXRvY29tbWFuZHMgaW4gdGhlICJjcHJvZ3JhbXMiIGdyb3VwOiA+CisKKwk6YXV0b2NtZCEgY3Byb2dyYW1zCisKKworTkVTVElORworCitHZW5lcmFsbHksIGNvbW1hbmRzIGV4ZWN1dGVkIGFzIHRoZSByZXN1bHQgb2YgYW4gYXV0b2NvbW1hbmQgZXZlbnQgd2lsbCBub3QKK3RyaWdnZXIgYW55IG5ldyBldmVudHMuICBJZiB5b3UgcmVhZCBhIGZpbGUgaW4gcmVzcG9uc2UgdG8gYSBGaWxlQ2hhbmdlZFNoZWxsCitldmVudCwgaXQgd2lsbCBub3QgdHJpZ2dlciB0aGUgYXV0b2NvbW1hbmRzIHRoYXQgd291bGQgc2V0IHRoZSBzeW50YXgsIGZvcgorZXhhbXBsZS4gIFRvIG1ha2UgdGhlIGV2ZW50cyB0cmlnZ2VyZWQsIGFkZCB0aGUgIm5lc3RlZCIgYXJndW1lbnQ6ID4KKworCTphdXRvY21kIEZpbGVDaGFuZ2VkU2hlbGwgKiBuZXN0ZWQgIGVkaXQKKworCitFWEVDVVRJTkcgQVVUT0NPTU1BTkRTCisKK0l0IGlzIHBvc3NpYmxlIHRvIHRyaWdnZXIgYW4gYXV0b2NvbW1hbmQgYnkgcHJldGVuZGluZyBhbiBldmVudCBoYXMgb2NjdXJyZWQuCitUaGlzIGlzIHVzZWZ1bCB0byBoYXZlIG9uZSBhdXRvY29tbWFuZCB0cmlnZ2VyIGFub3RoZXIgb25lLiAgRXhhbXBsZTogPgorCisJOmF1dG9jbWQgQnVmUmVhZFBvc3QgKi5uZXcgIGV4ZWN1dGUgImRvYXV0b2NtZCBCdWZSZWFkUG9zdCAiIC4gZXhwYW5kKCI8YWZpbGU+OnIiKQorCitUaGlzIGRlZmluZXMgYW4gYXV0b2NvbW1hbmQgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiBhIG5ldyBmaWxlIGhhcyBiZWVuIGVkaXRlZC4KK1RoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gIi5uZXciLiAgVGhlICI6ZXhlY3V0ZSIgY29tbWFuZCB1c2VzIGV4cHJlc3Npb24KK2V2YWx1YXRpb24gdG8gZm9ybSBhIG5ldyBjb21tYW5kIGFuZCBleGVjdXRlIGl0LiAgV2hlbiBlZGl0aW5nIHRoZSBmaWxlCisidHJ5b3V0LmMubmV3IiB0aGUgZXhlY3V0ZWQgY29tbWFuZCB3aWxsIGJlOiA+CisKKwk6ZG9hdXRvY21kIEJ1ZlJlYWRQb3N0IHRyeW91dC5jCisKK1RoZSBleHBhbmQoKSBmdW5jdGlvbiB0YWtlcyB0aGUgIjxhZmlsZT4iIGFyZ3VtZW50LCB3aGljaCBzdGFuZHMgZm9yIHRoZSBmaWxlCituYW1lIHRoZSBhdXRvY29tbWFuZCB3YXMgZXhlY3V0ZWQgZm9yLCBhbmQgdGFrZXMgdGhlIHJvb3Qgb2YgdGhlIGZpbGUgbmFtZQord2l0aCAiOnIiLgorCisiOmRvYXV0b2NtZCIgZXhlY3V0ZXMgb24gdGhlIGN1cnJlbnQgYnVmZmVyLiAgVGhlICI6ZG9hdXRvYWxsIiBjb21tYW5kIHdvcmtzCitsaWtlICJkb2F1dG9jbWQiIGV4Y2VwdCBpdCBleGVjdXRlcyBvbiBhbGwgdGhlIGJ1ZmZlcnMuCisKKworVVNJTkcgTk9STUFMIE1PREUgQ09NTUFORFMKKworVGhlIGNvbW1hbmRzIGV4ZWN1dGVkIGJ5IGFuIGF1dG9jb21tYW5kIGFyZSBDb21tYW5kLWxpbmUgY29tbWFuZC4gIElmIHlvdSB3YW50Cit0byB1c2UgYSBOb3JtYWwgbW9kZSBjb21tYW5kLCB0aGUgIjpub3JtYWwiIGNvbW1hbmQgY2FuIGJlIHVzZWQuICBFeGFtcGxlOiA+CisKKwk6YXV0b2NtZCBCdWZSZWFkUG9zdCAqLmxvZyBub3JtYWwgRworCitUaGlzIHdpbGwgbWFrZSB0aGUgY3Vyc29yIGp1bXAgdG8gdGhlIGxhc3QgbGluZSBvZiAqLmxvZyBmaWxlcyB3aGVuIHlvdSBzdGFydAordG8gZWRpdCBpdC4KKyAgIFVzaW5nIHRoZSAiOm5vcm1hbCIgY29tbWFuZCBpcyBhIGJpdCB0cmlja3kuICBGaXJzdCBvZiBhbGwsIG1ha2Ugc3VyZSBpdHMKK2FyZ3VtZW50IGlzIGEgY29tcGxldGUgY29tbWFuZCwgaW5jbHVkaW5nIGFsbCB0aGUgYXJndW1lbnRzLiAgV2hlbiB5b3UgdXNlICJpIgordG8gZ28gdG8gSW5zZXJ0IG1vZGUsIHRoZXJlIG11c3QgYWxzbyBiZSBhIDxFc2M+IHRvIGxlYXZlIEluc2VydCBtb2RlIGFnYWluLgorSWYgeW91IHVzZSBhICIvIiB0byBzdGFydCBhIHNlYXJjaCBwYXR0ZXJuLCB0aGVyZSBtdXN0IGJlIGEgPENSPiB0byBleGVjdXRlCitpdC4KKyAgIFRoZSAiOm5vcm1hbCIgY29tbWFuZCB1c2VzIGFsbCB0aGUgdGV4dCBhZnRlciBpdCBhcyBjb21tYW5kcy4gIFRodXMgdGhlcmUKK2NhbiBiZSBubyB8IGFuZCBhbm90aGVyIGNvbW1hbmQgZm9sbG93aW5nLiAgVG8gd29yayBhcm91bmQgdGhpcywgcHV0IHRoZQorIjpub3JtYWwiIGNvbW1hbmQgaW5zaWRlIGFuICI6ZXhlY3V0ZSIgY29tbWFuZC4gIFRoaXMgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZQordG8gcGFzcyB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGluIGEgY29udmVuaWVudCB3YXkuICBFeGFtcGxlOiA+CisKKwk6YXV0b2NtZCBCdWZSZWFkUG9zdCAqLmNoZyBleGVjdXRlICJub3JtYWwgT05ldyBlbnRyeTpcPEVzYz4iIHwKKwkJXCAxcmVhZCAhZGF0ZQorCitUaGlzIGFsc28gc2hvd3MgdGhlIHVzZSBvZiBhIGJhY2tzbGFzaCB0byBicmVhayBhIGxvbmcgY29tbWFuZCBpbnRvIG1vcmUKK2xpbmVzLiAgVGhpcyBjYW4gYmUgdXNlZCBpbiBWaW0gc2NyaXB0cyAobm90IGF0IHRoZSBjb21tYW5kIGxpbmUpLgorCitXaGVuIHlvdSB3YW50IHRoZSBhdXRvY29tbWFuZCBkbyBzb21ldGhpbmcgY29tcGxpY2F0ZWQsIHdoaWNoIGludm9sdmVzIGp1bXBpbmcKK2Fyb3VuZCBpbiB0aGUgZmlsZSBhbmQgdGhlbiByZXR1cm5pbmcgdG8gdGhlIG9yaWdpbmFsIHBvc2l0aW9uLCB5b3UgbWF5IHdhbnQKK3RvIHJlc3RvcmUgdGhlIHZpZXcgb24gdGhlIGZpbGUuICBTZWUgfHJlc3RvcmUtcG9zaXRpb258IGZvciBhbiBleGFtcGxlLgorCisKK0lHTk9SSU5HIEVWRU5UUworCitBdCB0aW1lcywgeW91IHdpbGwgbm90IHdhbnQgdG8gdHJpZ2dlciBhbiBhdXRvY29tbWFuZC4gIFRoZSAnZXZlbnRpZ25vcmUnCitvcHRpb24gY29udGFpbnMgYSBsaXN0IG9mIGV2ZW50cyB0aGF0IHdpbGwgYmUgdG90YWxseSBpZ25vcmVkLiAgRm9yIGV4YW1wbGUsCit0aGUgZm9sbG93aW5nIGNhdXNlcyBldmVudHMgZm9yIGVudGVyaW5nIGFuZCBsZWF2aW5nIGEgd2luZG93IHRvIGJlIGlnbm9yZWQ6ID4KKworCTpzZXQgZXZlbnRpZ25vcmU9V2luRW50ZXIsV2luTGVhdmUKKworVG8gaWdub3JlIGFsbCBldmVudHMsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpzZXQgZXZlbnRpZ25vcmU9YWxsCisKK1RvIHNldCBpdCBiYWNrIHRvIHRoZSBub3JtYWwgYmVoYXZpb3IsIG1ha2UgJ2V2ZW50aWdub3JlJyBlbXB0eTogPgorCisJOnNldCBldmVudGlnbm9yZT0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl80MS50eHR8ICBXcml0ZSBhIFZpbSBzY3JpcHQKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfNDEudHh0IGIvcnVudGltZS9kb2MvdXNyXzQxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGVhMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzQxLnR4dApAQCAtMCwwICsxLDE3MjQgQEAKKyp1c3JfNDEudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDYKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgIFdyaXRlIGEgVmltIHNjcmlwdAorCisKK1RoZSBWaW0gc2NyaXB0IGxhbmd1YWdlIGlzIHVzZWQgZm9yIHRoZSBzdGFydHVwIHZpbXJjIGZpbGUsIHN5bnRheCBmaWxlcywgYW5kCittYW55IG90aGVyIHRoaW5ncy4gIFRoaXMgY2hhcHRlciBleHBsYWlucyB0aGUgaXRlbXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIFZpbQorc2NyaXB0LiAgVGhlcmUgYXJlIGEgbG90IG9mIHRoZW0sIHRodXMgdGhpcyBpcyBhIGxvbmcgY2hhcHRlci4KKworfDQxLjF8CUludHJvZHVjdGlvbgorfDQxLjJ8CVZhcmlhYmxlcworfDQxLjN8CUV4cHJlc3Npb25zCit8NDEuNHwJQ29uZGl0aW9uYWxzCit8NDEuNXwJRXhlY3V0aW5nIGFuIGV4cHJlc3Npb24KK3w0MS42fAlVc2luZyBmdW5jdGlvbnMKK3w0MS43fAlEZWZpbmluZyBhIGZ1bmN0aW9uCit8NDEuOHwJRXhjZXB0aW9ucworfDQxLjl8CVZhcmlvdXMgcmVtYXJrcworfDQxLjEwfAlXcml0aW5nIGEgcGx1Z2luCit8NDEuMTF8CVdyaXRpbmcgYSBmaWxldHlwZSBwbHVnaW4KK3w0MS4xMnwJV3JpdGluZyBhIGNvbXBpbGVyIHBsdWdpbgorCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl80Mi50eHR8ICBBZGQgbmV3IG1lbnVzCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl80MC50eHR8ICBNYWtlIG5ldyBjb21tYW5kcworVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDEuMSoJSW50cm9kdWN0aW9uCQkJCQkqdmltLXNjcmlwdC1pbnRybyoKKworWW91ciBmaXJzdCBleHBlcmllbmNlIHdpdGggVmltIHNjcmlwdHMgaXMgdGhlIHZpbXJjIGZpbGUuICBWaW0gcmVhZHMgaXQgd2hlbgoraXQgc3RhcnRzIHVwIGFuZCBleGVjdXRlcyB0aGUgY29tbWFuZHMuICBZb3UgY2FuIHNldCBvcHRpb25zIHRvIHZhbHVlcyB5b3UKK3ByZWZlci4gIEFuZCB5b3UgY2FuIHVzZSBhbnkgY29sb24gY29tbWFuZCBpbiBpdCAoY29tbWFuZHMgdGhhdCBzdGFydCB3aXRoIGEKKyI6IjsgdGhlc2UgYXJlIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBFeCBjb21tYW5kcyBvciBjb21tYW5kLWxpbmUgY29tbWFuZHMpLgorICAgU3ludGF4IGZpbGVzIGFyZSBhbHNvIFZpbSBzY3JpcHRzLiAgQXMgYXJlIGZpbGVzIHRoYXQgc2V0IG9wdGlvbnMgZm9yIGEKK3NwZWNpZmljIGZpbGUgdHlwZS4gIEEgY29tcGxpY2F0ZWQgbWFjcm8gY2FuIGJlIGRlZmluZWQgYnkgYSBzZXBhcmF0ZSBWaW0KK3NjcmlwdCBmaWxlLiAgWW91IGNhbiB0aGluayBvZiBvdGhlciB1c2VzIHlvdXJzZWxmLgorCitMZXQncyBzdGFydCB3aXRoIGEgc2ltcGxlIGV4YW1wbGU6ID4KKworCTpsZXQgaSA9IDEKKwk6d2hpbGUgaSA8IDUKKwk6ICBlY2hvICJjb3VudCBpcyIgaQorCTogIGxldCBpID0gaSArIDEKKwk6ZW5kd2hpbGUKKzwKKwlOb3RlOgorCVRoZSAiOiIgY2hhcmFjdGVycyBhcmUgbm90IHJlYWxseSBuZWVkZWQgaGVyZS4gIFlvdSBvbmx5IG5lZWQgdG8gdXNlCisJdGhlbSB3aGVuIHlvdSB0eXBlIGEgY29tbWFuZC4gIEluIGEgVmltIHNjcmlwdCBmaWxlIHRoZXkgY2FuIGJlIGxlZnQKKwlvdXQuICBXZSB3aWxsIHVzZSB0aGVtIGhlcmUgYW55d2F5IHRvIG1ha2UgY2xlYXIgdGhlc2UgYXJlIGNvbG9uCisJY29tbWFuZHMgYW5kIG1ha2UgdGhlbSBzdGFuZCBvdXQgZnJvbSBOb3JtYWwgbW9kZSBjb21tYW5kcy4KKworVGhlICI6bGV0IiBjb21tYW5kIGFzc2lnbnMgYSB2YWx1ZSB0byBhIHZhcmlhYmxlLiAgVGhlIGdlbmVyaWMgZm9ybSBpczogPgorCisJOmxldCB7dmFyaWFibGV9ID0ge2V4cHJlc3Npb259CisKK0luIHRoaXMgY2FzZSB0aGUgdmFyaWFibGUgbmFtZSBpcyAiaSIgYW5kIHRoZSBleHByZXNzaW9uIGlzIGEgc2ltcGxlIHZhbHVlLAordGhlIG51bWJlciBvbmUuCisgICBUaGUgIjp3aGlsZSIgY29tbWFuZCBzdGFydHMgYSBsb29wLiAgVGhlIGdlbmVyaWMgZm9ybSBpczogPgorCisJOndoaWxlIHtjb25kaXRpb259CisJOiAge3N0YXRlbWVudHN9CisJOmVuZHdoaWxlCisKK1RoZSBzdGF0ZW1lbnRzIHVudGlsIHRoZSBtYXRjaGluZyAiOmVuZHdoaWxlIiBhcmUgZXhlY3V0ZWQgZm9yIGFzIGxvbmcgYXMgdGhlCitjb25kaXRpb24gaXMgdHJ1ZS4gIFRoZSBjb25kaXRpb24gdXNlZCBoZXJlIGlzIHRoZSBleHByZXNzaW9uICJpIDwgNSIuICBUaGlzCitpcyB0cnVlIHdoZW4gdGhlIHZhcmlhYmxlIGkgaXMgc21hbGxlciB0aGFuIGZpdmUuCisgICBUaGUgIjplY2hvIiBjb21tYW5kIHByaW50cyBpdHMgYXJndW1lbnRzLiAgSW4gdGhpcyBjYXNlIHRoZSBzdHJpbmcgImNvdW50CitpcyIgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgaS4gIFNpbmNlIGkgaXMgb25lLCB0aGlzIHdpbGwgcHJpbnQ6CisKKwljb3VudCBpcyAxIH4KKworVGhlbiB0aGVyZSBpcyBhbm90aGVyICI6bGV0IGkgPSIgY29tbWFuZC4gIFRoZSB2YWx1ZSB1c2VkIGlzIHRoZSBleHByZXNzaW9uICJpCisrIDEiLiAgVGhpcyBhZGRzIG9uZSB0byB0aGUgdmFyaWFibGUgaSBhbmQgYXNzaWducyB0aGUgbmV3IHZhbHVlIHRvIHRoZSBzYW1lCit2YXJpYWJsZS4KKyAgIFRoZSBvdXRwdXQgb2YgdGhlIGV4YW1wbGUgY29kZSBpczoKKworCWNvdW50IGlzIDEgfgorCWNvdW50IGlzIDIgfgorCWNvdW50IGlzIDMgfgorCWNvdW50IGlzIDQgfgorCisJTm90ZToKKwlJZiB5b3UgaGFwcGVuIHRvIHdyaXRlIGEgd2hpbGUgbG9vcCB0aGF0IGtlZXBzIG9uIHJ1bm5pbmcsIHlvdSBjYW4KKwlpbnRlcnJ1cHQgaXQgYnkgcHJlc3NpbmcgQ1RSTC1DIChDVFJMLUJyZWFrIG9uIE1TLVdpbmRvd3MpLgorCisKK1RIUkVFIEtJTkRTIE9GIE5VTUJFUlMKKworTnVtYmVycyBjYW4gYmUgZGVjaW1hbCwgaGV4YWRlY2ltYWwgb3Igb2N0YWwuICBBIGhleGFkZWNpbWFsIG51bWJlciBzdGFydHMKK3dpdGggIjB4IiBvciAiMFgiLiAgRm9yIGV4YW1wbGUgIjB4MWYiIGlzIDMxLiAgQW4gb2N0YWwgbnVtYmVyIHN0YXJ0cyB3aXRoIGEKK3plcm8uICAiMDE3IiBpcyAxNS4gIENhcmVmdWw6IGRvbid0IHB1dCBhIHplcm8gYmVmb3JlIGEgZGVjaW1hbCBudW1iZXIsIGl0Cit3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIG9jdGFsIG51bWJlciEKKyAgIFRoZSAiOmVjaG8iIGNvbW1hbmQgYWx3YXlzIHByaW50cyBkZWNpbWFsIG51bWJlcnMuICBFeGFtcGxlOiA+CisKKwk6ZWNobyAweDdmIDAzNgorPAkxMjcgMzAgfgorCitBIG51bWJlciBpcyBtYWRlIG5lZ2F0aXZlIHdpdGggYSBtaW51cyBzaWduLiAgVGhpcyBhbHNvIHdvcmtzIGZvciBoZXhhZGVjaW1hbAorYW5kIG9jdGFsIG51bWJlcnMuICAgQSBtaW51cyBzaWduIGlzIGFsc28gZm9yIHN1YnRyYWN0aW9uLiAgQ29tcGFyZSB0aGlzIHdpdGgKK3RoZSBwcmV2aW91cyBleGFtcGxlOiA+CisKKwk6ZWNobyAweDdmIC0wMzYKKzwJOTcgfgorCitXaGl0ZSBzcGFjZSBpbiBhbiBleHByZXNzaW9uIGlzIGlnbm9yZWQuICBIb3dldmVyLCBpdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBpdAorZm9yIHNlcGFyYXRpbmcgaXRlbXMsIHRvIG1ha2UgdGhlIGV4cHJlc3Npb24gZWFzaWVyIHRvIHJlYWQuICBGb3IgZXhhbXBsZSwgdG8KK2F2b2lkIHRoZSBjb25mdXNpb24gd2l0aCBhIG5lZ2F0aXZlIG51bWJlciwgcHV0IGEgc3BhY2UgYmV0d2VlbiB0aGUgbWludXMgc2lnbgorYW5kIHRoZSBmb2xsb3dpbmcgbnVtYmVyOiA+CisKKwk6ZWNobyAweDdmIC0gMDM2CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQxLjIqCVZhcmlhYmxlcworCitBIHZhcmlhYmxlIG5hbWUgY29uc2lzdHMgb2YgQVNDSUkgbGV0dGVycywgZGlnaXRzIGFuZCB0aGUgdW5kZXJzY29yZS4gIEl0CitjYW5ub3Qgc3RhcnQgd2l0aCBhIGRpZ2l0LiAgVmFsaWQgdmFyaWFibGUgbmFtZXMgYXJlOgorCisJY291bnRlcgorCV9hYXAzCisJdmVyeV9sb25nX3ZhcmlhYmxlX25hbWVfd2l0aF91bmRlcnNjb3JlcworCUZ1bmNMZW5ndGgKKwlMRU5HVEgKKworSW52YWxpZCBuYW1lcyBhcmUgImZvbytiYXIiIGFuZCAiNnZhciIuCisgICBUaGVzZSB2YXJpYWJsZXMgYXJlIGdsb2JhbC4gIFRvIHNlZSBhIGxpc3Qgb2YgY3VycmVudGx5IGRlZmluZWQgdmFyaWFibGVzCit1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6bGV0CisKK1lvdSBjYW4gdXNlIGdsb2JhbCB2YXJpYWJsZXMgZXZlcnl3aGVyZS4gIFRoaXMgYWxzbyBtZWFucyB0aGF0IHdoZW4gdGhlCit2YXJpYWJsZSAiY291bnQiIGlzIHVzZWQgaW4gb25lIHNjcmlwdCBmaWxlLCBpdCBtaWdodCBhbHNvIGJlIHVzZWQgaW4gYW5vdGhlcgorZmlsZS4gIFRoaXMgbGVhZHMgdG8gY29uZnVzaW9uIGF0IGxlYXN0LCBhbmQgcmVhbCBwcm9ibGVtcyBhdCB3b3JzdC4gIFRvIGF2b2lkCit0aGlzLCB5b3UgY2FuIHVzZSBhIHZhcmlhYmxlIGxvY2FsIHRvIGEgc2NyaXB0IGZpbGUgYnkgcHJlcGVuZGluZyAiczoiLiAgRm9yCitleGFtcGxlLCBvbmUgc2NyaXB0IGNvbnRhaW5zIHRoaXMgY29kZTogPgorCisJOmxldCBzOmNvdW50ID0gMQorCTp3aGlsZSBzOmNvdW50IDwgNQorCTogIHNvdXJjZSBvdGhlci52aW0KKwk6ICBsZXQgczpjb3VudCA9IHM6Y291bnQgKyAxCisJOmVuZHdoaWxlCisKK1NpbmNlICJzOmNvdW50IiBpcyBsb2NhbCB0byB0aGlzIHNjcmlwdCwgeW91IGNhbiBiZSBzdXJlIHRoYXQgc291cmNpbmcgdGhlCisib3RoZXIudmltIiBzY3JpcHQgd2lsbCBub3QgY2hhbmdlIHRoaXMgdmFyaWFibGUuICBJZiAib3RoZXIudmltIiBhbHNvIHVzZXMgYW4KKyJzOmNvdW50IiB2YXJpYWJsZSwgaXQgd2lsbCBiZSBhIGRpZmZlcmVudCBjb3B5LCBsb2NhbCB0byB0aGF0IHNjcmlwdC4gIE1vcmUKK2Fib3V0IHNjcmlwdC1sb2NhbCB2YXJpYWJsZXMgaGVyZTogfHNjcmlwdC12YXJpYWJsZXwuCisKK1RoZXJlIGFyZSBtb3JlIGtpbmRzIG9mIHZhcmlhYmxlcywgc2VlIHxpbnRlcm5hbC12YXJpYWJsZXN8LiAgVGhlIG1vc3Qgb2Z0ZW4KK3VzZWQgb25lcyBhcmU6CisKKwliOm5hbWUJCXZhcmlhYmxlIGxvY2FsIHRvIGEgYnVmZmVyCisJdzpuYW1lCQl2YXJpYWJsZSBsb2NhbCB0byBhIHdpbmRvdworCWc6bmFtZQkJZ2xvYmFsIHZhcmlhYmxlIChhbHNvIGluIGEgZnVuY3Rpb24pCisJdjpuYW1lCQl2YXJpYWJsZSBwcmVkZWZpbmVkIGJ5IFZpbQorCisKK0RFTEVUSU5HIFZBUklBQkxFUworCitWYXJpYWJsZXMgdGFrZSB1cCBtZW1vcnkgYW5kIHNob3cgdXAgaW4gdGhlIG91dHB1dCBvZiB0aGUgIjpsZXQiIGNvbW1hbmQuICBUbworZGVsZXRlIGEgdmFyaWFibGUgdXNlIHRoZSAiOnVubGV0IiBjb21tYW5kLiAgRXhhbXBsZTogPgorCisJOnVubGV0IHM6Y291bnQKKworVGhpcyBkZWxldGVzIHRoZSBzY3JpcHQtbG9jYWwgdmFyaWFibGUgInM6Y291bnQiIHRvIGZyZWUgdXAgdGhlIG1lbW9yeSBpdAordXNlcy4gIElmIHlvdSBhcmUgbm90IHN1cmUgaWYgdGhlIHZhcmlhYmxlIGV4aXN0cywgYW5kIGRvbid0IHdhbnQgYW4gZXJyb3IKK21lc3NhZ2Ugd2hlbiBpdCBkb2Vzbid0LCBhcHBlbmQgITogPgorCisJOnVubGV0ISBzOmNvdW50CisKK1doZW4gYSBzY3JpcHQgZmluaXNoZXMsIHRoZSBsb2NhbCB2YXJpYWJsZXMgdXNlZCB0aGVyZSB3aWxsIG5vdCBiZQorYXV0b21hdGljYWxseSBmcmVlZC4gIFRoZSBuZXh0IHRpbWUgdGhlIHNjcmlwdCBleGVjdXRlcywgaXQgY2FuIHN0aWxsIHVzZSB0aGUKK29sZCB2YWx1ZS4gIEV4YW1wbGU6ID4KKworCTppZiAhZXhpc3RzKCJzOmNhbGxfY291bnQiKQorCTogIGxldCBzOmNhbGxfY291bnQgPSAwCisJOmVuZGlmCisJOmxldCBzOmNhbGxfY291bnQgPSBzOmNhbGxfY291bnQgKyAxCisJOmVjaG8gImNhbGxlZCIgczpjYWxsX2NvdW50ICJ0aW1lcyIKKworVGhlICJleGlzdHMoKSIgZnVuY3Rpb24gY2hlY2tzIGlmIGEgdmFyaWFibGUgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiAgSXRzCithcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgeW91IHdhbnQgdG8gY2hlY2suICBOb3QgdGhlIHZhcmlhYmxlCitpdHNlbGYhICBJZiB5b3Ugd291bGQgZG8gdGhpczogPgorCisJOmlmICFleGlzdHMoczpjYWxsX2NvdW50KQorCitUaGVuIHRoZSB2YWx1ZSBvZiBzOmNhbGxfY291bnQgd2lsbCBiZSB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0aGF0CitleGlzdHMoKSBjaGVja3MuICBUaGF0J3Mgbm90IHdoYXQgeW91IHdhbnQuCisgICBUaGUgZXhjbGFtYXRpb24gbWFyayAhIG5lZ2F0ZXMgYSB2YWx1ZS4gIFdoZW4gdGhlIHZhbHVlIHdhcyB0cnVlLCBpdAorYmVjb21lcyBmYWxzZS4gIFdoZW4gaXQgd2FzIGZhbHNlLCBpdCBiZWNvbWVzIHRydWUuICBZb3UgY2FuIHJlYWQgaXQgYXMgIm5vdCIuCitUaHVzICJpZiAhZXhpc3RzKCkiIGNhbiBiZSByZWFkIGFzICJpZiBub3QgZXhpc3RzKCkiLgorICAgV2hhdCBWaW0gY2FsbHMgdHJ1ZSBpcyBhbnl0aGluZyB0aGF0IGlzIG5vdCB6ZXJvLiAgT25seSB6ZXJvIGlzIGZhbHNlLgorCisKK1NUUklORyBWQVJJQUJMRVMgQU5EIENPTlNUQU5UUworCitTbyBmYXIgb25seSBudW1iZXJzIHdlcmUgdXNlZCBmb3IgdGhlIHZhcmlhYmxlIHZhbHVlLiAgU3RyaW5ncyBjYW4gYmUgdXNlZCBhcword2VsbC4gIE51bWJlcnMgYW5kIHN0cmluZ3MgYXJlIHRoZSBvbmx5IHR3byB0eXBlcyBvZiB2YXJpYWJsZXMgdGhhdCBWaW0KK3N1cHBvcnRzLiAgVGhlIHR5cGUgaXMgZHluYW1pYywgaXQgaXMgc2V0IGVhY2ggdGltZSB3aGVuIGFzc2lnbmluZyBhIHZhbHVlIHRvCit0aGUgdmFyaWFibGUgd2l0aCAiOmxldCIuCisgICBUbyBhc3NpZ24gYSBzdHJpbmcgdmFsdWUgdG8gYSB2YXJpYWJsZSwgeW91IG5lZWQgdG8gdXNlIGEgc3RyaW5nIGNvbnN0YW50LgorVGhlcmUgYXJlIHR3byB0eXBlcyBvZiB0aGVzZS4gIEZpcnN0IHRoZSBzdHJpbmcgaW4gZG91YmxlIHF1b3RlczogPgorCisJOmxldCBuYW1lID0gInBldGVyIgorCTplY2hvIG5hbWUKKzwJcGV0ZXIgfgorCitJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGEgZG91YmxlIHF1b3RlIGluc2lkZSB0aGUgc3RyaW5nLCBwdXQgYSBiYWNrc2xhc2ggaW4KK2Zyb250IG9mIGl0OiA+CisKKwk6bGV0IG5hbWUgPSAiXCJwZXRlclwiIgorCTplY2hvIG5hbWUKKzwJInBldGVyIiB+CisKK1RvIGF2b2lkIHRoZSBuZWVkIGZvciBhIGJhY2tzbGFzaCwgeW91IGNhbiB1c2UgYSBzdHJpbmcgaW4gc2luZ2xlIHF1b3RlczogPgorCisJOmxldCBuYW1lID0gJyJwZXRlciInCisJOmVjaG8gbmFtZQorPAkicGV0ZXIiIH4KKworSW5zaWRlIGEgc2luZ2xlLXF1b3RlIHN0cmluZyBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIHRha2VuIGxpdGVyYWxseS4gIFRoZQorZHJhd2JhY2sgaXMgdGhhdCBpdCdzIGltcG9zc2libGUgdG8gaW5jbHVkZSBhIHNpbmdsZSBxdW90ZS4gIEEgYmFja3NsYXNoIGlzCit0YWtlbiBsaXRlcmFsbHkgYXMgd2VsbCwgdGh1cyB5b3UgY2FuJ3QgdXNlIGl0IHRvIGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUKK2NoYXJhY3RlciBhZnRlciBpdC4KKyAgIEluIGRvdWJsZS1xdW90ZSBzdHJpbmdzIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBzcGVjaWFsIGNoYXJhY3RlcnMuICBIZXJlIGFyZQorYSBmZXcgdXNlZnVsIG9uZXM6CisKKwlcdAkJPFRhYj4KKwlcbgkJPE5MPiwgbGluZSBicmVhaworCVxyCQk8Q1I+LCA8RW50ZXI+CisJXGUJCTxFc2M+CisJXGIJCTxCUz4sIGJhY2tzcGFjZQorCVwiCQkiCisJXFwJCVwsIGJhY2tzbGFzaAorCVw8RXNjPgkJPEVzYz4KKwlcPEMtVz4JCUNUUkwtVworCitUaGUgbGFzdCB0d28gYXJlIGp1c3QgZXhhbXBsZXMuICBUaGUgICJcPG5hbWU+IiBmb3JtIGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUKK3RoZSBzcGVjaWFsIGtleSAibmFtZSIuCisgICBTZWUgfGV4cHItcXVvdGV8IGZvciB0aGUgZnVsbCBsaXN0IG9mIHNwZWNpYWwgaXRlbXMgaW4gYSBzdHJpbmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQxLjMqCUV4cHJlc3Npb25zCisKK1ZpbSBoYXMgYSByaWNoLCB5ZXQgc2ltcGxlIHdheSB0byBoYW5kbGUgZXhwcmVzc2lvbnMuICBZb3UgY2FuIHJlYWQgdGhlCitkZWZpbml0aW9uIGhlcmU6IHxleHByZXNzaW9uLXN5bnRheHwuICBIZXJlIHdlIHdpbGwgc2hvdyB0aGUgbW9zdCBjb21tb24KK2l0ZW1zLgorICAgVGhlIG51bWJlcnMsIHN0cmluZ3MgYW5kIHZhcmlhYmxlcyBtZW50aW9uZWQgYWJvdmUgYXJlIGV4cHJlc3Npb25zIGJ5Cit0aGVtc2VsdmVzLiAgVGh1cyBldmVyeXdoZXJlIGFuIGV4cHJlc3Npb24gaXMgZXhwZWN0ZWQsIHlvdSBjYW4gdXNlIGEgbnVtYmVyLAorc3RyaW5nIG9yIHZhcmlhYmxlLiAgT3RoZXIgYmFzaWMgaXRlbXMgaW4gYW4gZXhwcmVzc2lvbiBhcmU6CisKKwkkTkFNRQkJZW52aXJvbm1lbnQgdmFyaWFibGUKKwkmbmFtZQkJb3B0aW9uCisJQHIJCXJlZ2lzdGVyCisKK0V4YW1wbGVzOiA+CisKKwk6ZWNobyAiVGhlIHZhbHVlIG9mICd0YWJzdG9wJyBpcyIgJnRzCisJOmVjaG8gIllvdXIgaG9tZSBkaXJlY3RvcnkgaXMiICRIT01FCisJOmlmIEBhID4gNQorCitUaGUgJm5hbWUgZm9ybSBjYW4gYmUgdXNlZCB0byBzYXZlIGFuIG9wdGlvbiB2YWx1ZSwgc2V0IGl0IHRvIGEgbmV3IHZhbHVlLAorZG8gc29tZXRoaW5nIGFuZCByZXN0b3JlIHRoZSBvbGQgdmFsdWUuICBFeGFtcGxlOiA+CisKKwk6bGV0IHNhdmVfaWMgPSAmaWMKKwk6c2V0IG5vaWMKKwk6L1RoZSBTdGFydC8sJGRlbGV0ZQorCTpsZXQgJmljID0gc2F2ZV9pYworCitUaGlzIG1ha2VzIHN1cmUgdGhlICJUaGUgU3RhcnQiIHBhdHRlcm4gaXMgdXNlZCB3aXRoIHRoZSAnaWdub3JlY2FzZScgb3B0aW9uCitvZmYuICBTdGlsbCwgaXQga2VlcHMgdGhlIHZhbHVlIHRoYXQgdGhlIHVzZXIgaGFkIHNldC4KKworCitNQVRIRU1BVElDUworCitJdCBiZWNvbWVzIG1vcmUgaW50ZXJlc3RpbmcgaWYgd2UgY29tYmluZSB0aGVzZSBiYXNpYyBpdGVtcy4gIExldCdzIHN0YXJ0IHdpdGgKK21hdGhlbWF0aWNzIG9uIG51bWJlcnM6CisKKwlhICsgYgkJYWRkCisJYSAtIGIJCXN1YnRyYWN0CisJYSAqIGIJCW11bHRpcGx5CisJYSAvIGIJCWRpdmlkZQorCWEgJSBiCQltb2R1bG8KKworVGhlIHVzdWFsIHByZWNlZGVuY2UgaXMgdXNlZC4gIEV4YW1wbGU6ID4KKworCTplY2hvIDEwICsgNSAqIDIKKzwJMjAgfgorCitHcm91cGluZyBpcyBkb25lIHdpdGggYnJhY2VzLiAgTm8gc3VycHJpc2VzIGhlcmUuICBFeGFtcGxlOiA+CisKKwk6ZWNobyAoMTAgKyA1KSAqIDIKKzwJMzAgfgorCitTdHJpbmdzIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCAiLiIuICBFeGFtcGxlOiA+CisKKwk6ZWNobyAiZm9vIiAuICJiYXIiCis8CWZvb2JhciB+CisKK1doZW4gdGhlICI6ZWNobyIgY29tbWFuZCBnZXRzIG11bHRpcGxlIGFyZ3VtZW50cywgaXQgc2VwYXJhdGVzIHRoZW0gd2l0aCBhCitzcGFjZS4gIEluIHRoZSBleGFtcGxlIHRoZSBhcmd1bWVudCBpcyBhIHNpbmdsZSBleHByZXNzaW9uLCB0aHVzIG5vIHNwYWNlIGlzCitpbnNlcnRlZC4KKworQm9ycm93ZWQgZnJvbSB0aGUgQyBsYW5ndWFnZSBpcyB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbjoKKworCWEgPyBiIDogYworCitJZiAiYSIgZXZhbHVhdGVzIHRvIHRydWUgImIiIGlzIHVzZWQsIG90aGVyd2lzZSAiYyIgaXMgdXNlZC4gIEV4YW1wbGU6ID4KKworCTpsZXQgaSA9IDQKKwk6ZWNobyBpID4gNSA/ICJpIGlzIGJpZyIgOiAiaSBpcyBzbWFsbCIKKzwJaSBpcyBzbWFsbCB+CisKK1RoZSB0aHJlZSBwYXJ0cyBvZiB0aGUgY29uc3RydWN0cyBhcmUgYWx3YXlzIGV2YWx1YXRlZCBmaXJzdCwgdGh1cyB5b3UgY291bGQKK3NlZSBpdCB3b3JrIGFzOgorCisJKGEpID8gKGIpIDogKGMpCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQxLjQqCUNvbmRpdGlvbmFscworCitUaGUgIjppZiIgY29tbWFuZHMgZXhlY3V0ZXMgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnRzLCB1bnRpbCB0aGUgbWF0Y2hpbmcKKyI6ZW5kaWYiLCBvbmx5IHdoZW4gYSBjb25kaXRpb24gaXMgbWV0LiAgVGhlIGdlbmVyaWMgZm9ybSBpczoKKworCTppZiB7Y29uZGl0aW9ufQorCSAgIHtzdGF0ZW1lbnRzfQorCTplbmRpZgorCitPbmx5IHdoZW4gdGhlIGV4cHJlc3Npb24ge2NvbmRpdGlvbn0gZXZhbHVhdGVzIHRvIHRydWUgKG5vbi16ZXJvKSB3aWxsIHRoZQore3N0YXRlbWVudHN9IGJlIGV4ZWN1dGVkLiAgVGhlc2UgbXVzdCBzdGlsbCBiZSB2YWxpZCBjb21tYW5kcy4gIElmIHRoZXkKK2NvbnRhaW4gZ2FyYmFnZSwgVmltIHdvbid0IGJlIGFibGUgdG8gZmluZCB0aGUgIjplbmRpZiIuCisgICBZb3UgY2FuIGFsc28gdXNlICI6ZWxzZSIuICBUaGUgZ2VuZXJpYyBmb3JtIGZvciB0aGlzIGlzOgorCisJOmlmIHtjb25kaXRpb259CisJICAge3N0YXRlbWVudHN9CisJOmVsc2UKKwkgICB7c3RhdGVtZW50c30KKwk6ZW5kaWYKKworVGhlIHNlY29uZCB7c3RhdGVtZW50c30gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgZmlyc3Qgb25lIGlzbid0LgorICAgRmluYWxseSwgdGhlcmUgaXMgIjplbHNlaWYiOgorCisJOmlmIHtjb25kaXRpb259CisJICAge3N0YXRlbWVudHN9CisJOmVsc2VpZiB7Y29uZGl0aW9ufQorCSAgIHtzdGF0ZW1lbnRzfQorCTplbmRpZgorCitUaGlzIHdvcmtzIGp1c3QgbGlrZSB1c2luZyAiOmVsc2UiIGFuZCB0aGVuICJpZiIsIGJ1dCB3aXRob3V0IHRoZSBuZWVkIGZvciBhbgorZXh0cmEgIjplbmRpZiIuCisgICBBIHVzZWZ1bCBleGFtcGxlIGZvciB5b3VyIHZpbXJjIGZpbGUgaXMgY2hlY2tpbmcgdGhlICd0ZXJtJyBvcHRpb24gYW5kCitkb2luZyBzb21ldGhpbmcgZGVwZW5kaW5nIHVwb24gaXRzIHZhbHVlOiA+CisKKwk6aWYgJnRlcm0gPT0gInh0ZXJtIgorCTogICIgRG8gc3R1ZmYgZm9yIHh0ZXJtCisJOmVsc2VpZiAmdGVybSA9PSAidnQxMDAiCisJOiAgIiBEbyBzdHVmZiBmb3IgYSB2dDEwMCB0ZXJtaW5hbAorCTplbHNlCisJOiAgIiBEbyBzb21ldGhpbmcgZm9yIG90aGVyIHRlcm1pbmFscworCTplbmRpZgorCisKK0xPR0lDIE9QRVJBVElPTlMKKworV2UgYWxyZWFkeSB1c2VkIHNvbWUgb2YgdGhlbSBpbiB0aGUgZXhhbXBsZXMuICBUaGVzZSBhcmUgdGhlIG1vc3Qgb2Z0ZW4gdXNlZAorb25lczoKKworCWEgPT0gYgkJZXF1YWwgdG8KKwlhICE9IGIJCW5vdCBlcXVhbCB0bworCWEgPiAgYgkJZ3JlYXRlciB0aGFuCisJYSA+PSBiCQlncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KKwlhIDwgIGIJCWxlc3MgdGhhbgorCWEgPD0gYgkJbGVzcyB0aGFuIG9yIGVxdWFsIHRvCisKK1RoZSByZXN1bHQgaXMgb25lIGlmIHRoZSBjb25kaXRpb24gaXMgbWV0IGFuZCB6ZXJvIG90aGVyd2lzZS4gIEFuIGV4YW1wbGU6ID4KKworCTppZiB2OnZlcnNpb24gPj0gNjAwCisJOiAgZWNobyAiY29uZ3JhdHVsYXRpb25zIgorCTplbHNlCisJOiAgZWNobyAieW91IGFyZSB1c2luZyBhbiBvbGQgdmVyc2lvbiwgdXBncmFkZSEiCisJOmVuZGlmCisKK0hlcmUgInY6dmVyc2lvbiIgaXMgYSB2YXJpYWJsZSBkZWZpbmVkIGJ5IFZpbSwgd2hpY2ggaGFzIHRoZSB2YWx1ZSBvZiB0aGUgVmltCit2ZXJzaW9uLiAgNjAwIGlzIGZvciB2ZXJzaW9uIDYuMC4gIFZlcnNpb24gNi4xIGhhcyB0aGUgdmFsdWUgNjAxLiAgVGhpcyBpcwordmVyeSB1c2VmdWwgdG8gd3JpdGUgYSBzY3JpcHQgdGhhdCB3b3JrcyB3aXRoIG11bHRpcGxlIHZlcnNpb25zIG9mIFZpbS4KK3x2OnZlcnNpb258CisKK1RoZSBsb2dpYyBvcGVyYXRvcnMgd29yayBib3RoIGZvciBudW1iZXJzIGFuZCBzdHJpbmdzLiAgV2hlbiBjb21wYXJpbmcgdHdvCitzdHJpbmdzLCB0aGUgbWF0aGVtYXRpY2FsIGRpZmZlcmVuY2UgaXMgdXNlZC4gIFRoaXMgY29tcGFyZXMgYnl0ZSB2YWx1ZXMsCit3aGljaCBtYXkgbm90IGJlIHJpZ2h0IGZvciBzb21lIGxhbmd1YWdlcy4KKyAgIFdoZW4gY29tcGFyaW5nIGEgc3RyaW5nIHdpdGggYSBudW1iZXIsIHRoZSBzdHJpbmcgaXMgZmlyc3QgY29udmVydGVkIHRvIGEKK251bWJlci4gIFRoaXMgaXMgYSBiaXQgdHJpY2t5LCBiZWNhdXNlIHdoZW4gYSBzdHJpbmcgZG9lc24ndCBsb29rIGxpa2UgYQorbnVtYmVyLCB0aGUgbnVtYmVyIHplcm8gaXMgdXNlZC4gIEV4YW1wbGU6ID4KKworCTppZiAwID09ICJvbmUiCisJOiAgZWNobyAieWVzIgorCTplbmRpZgorCitUaGlzIHdpbGwgZWNobyAieWVzIiwgYmVjYXVzZSAib25lIiBkb2Vzbid0IGxvb2sgbGlrZSBhIG51bWJlciwgdGh1cyBpdCBpcworY29udmVydGVkIHRvIHRoZSBudW1iZXIgemVyby4KKworRm9yIHN0cmluZ3MgdGhlcmUgYXJlIHR3byBtb3JlIGl0ZW1zOgorCisJYSA9fiBiCQltYXRjaGVzIHdpdGgKKwlhICF+IGIJCWRvZXMgbm90IG1hdGNoIHdpdGgKKworVGhlIGxlZnQgaXRlbSAiYSIgaXMgdXNlZCBhcyBhIHN0cmluZy4gIFRoZSByaWdodCBpdGVtICJiIiBpcyB1c2VkIGFzIGEKK3BhdHRlcm4sIGxpa2Ugd2hhdCdzIHVzZWQgZm9yIHNlYXJjaGluZy4gIEV4YW1wbGU6ID4KKworCTppZiBzdHIgPX4gIiAiCisJOiAgZWNobyAic3RyIGNvbnRhaW5zIGEgc3BhY2UiCisJOmVuZGlmCisJOmlmIHN0ciAhfiAnXC4kJworCTogIGVjaG8gInN0ciBkb2VzIG5vdCBlbmQgaW4gYSBmdWxsIHN0b3AiCisJOmVuZGlmCisKK05vdGljZSB0aGUgdXNlIG9mIGEgc2luZ2xlLXF1b3RlIHN0cmluZyBmb3IgdGhlIHBhdHRlcm4uICBUaGlzIGlzIHVzZWZ1bCwKK2JlY2F1c2UgYmFja3NsYXNoZXMgbmVlZCB0byBiZSBkb3VibGVkIGluIGEgZG91YmxlLXF1b3RlIHN0cmluZyBhbmQgcGF0dGVybnMKK3RlbmQgdG8gY29udGFpbiBtYW55IGJhY2tzbGFzaGVzLgorCitUaGUgJ2lnbm9yZWNhc2UnIG9wdGlvbiBpcyB1c2VkIHdoZW4gY29tcGFyaW5nIHN0cmluZ3MuICBXaGVuIHlvdSBkb24ndCB3YW50Cit0aGF0LCBhcHBlbmQgIiMiIHRvIG1hdGNoIGNhc2UgYW5kICI/IiB0byBpZ25vcmUgY2FzZS4gIFRodXMgIj09PyIgY29tcGFyZXMKK3R3byBzdHJpbmdzIHRvIGJlIGVxdWFsIHdoaWxlIGlnbm9yaW5nIGNhc2UuICBBbmQgIiF+IyIgY2hlY2tzIGlmIGEgcGF0dGVybgorZG9lc24ndCBtYXRjaCwgYWxzbyBjaGVja2luZyB0aGUgY2FzZSBvZiBsZXR0ZXJzLiAgRm9yIHRoZSBmdWxsIHRhYmxlIHNlZQorfGV4cHItPT18LgorCisKK01PUkUgTE9PUElORworCitUaGUgIjp3aGlsZSIgY29tbWFuZCB3YXMgYWxyZWFkeSBtZW50aW9uZWQuICBUd28gbW9yZSBzdGF0ZW1lbnRzIGNhbiBiZSB1c2VkCitpbiBiZXR3ZWVuIHRoZSAiOndoaWxlIiBhbmQgdGhlICI6ZW5kd2hpbGUiOgorCisJOmNvbnRpbnVlCQlKdW1wIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSB3aGlsZSBsb29wOyB0aGUKKwkJCQlsb29wIGNvbnRpbnVlcy4KKwk6YnJlYWsJCQlKdW1wIGZvcndhcmQgdG8gdGhlICI6ZW5kd2hpbGUiOyB0aGUgbG9vcCBpcworCQkJCWRpc2NvbnRpbnVlZC4KKworRXhhbXBsZTogPgorCisJOndoaWxlIGNvdW50ZXIgPCA0MAorCTogIGNhbGwgZG9fc29tZXRoaW5nKCkKKwk6ICBpZiBza2lwX2ZsYWcKKwk6ICAgIGNvbnRpbnVlCisJOiAgZW5kaWYKKwk6ICBpZiBmaW5pc2hlZF9mbGFnCisJOiAgICBicmVhaworCTogIGVuZGlmCisJOiAgc2xlZXAgNTBtCisJOmVuZHdoaWxlCisKK1RoZSAiOnNsZWVwIiBjb21tYW5kIG1ha2VzIFZpbSB0YWtlIGEgbmFwLiAgVGhlICI1MG0iIHNwZWNpZmllcyBmaWZ0eQorbWlsbGlzZWNvbmRzLiAgQW5vdGhlciBleGFtcGxlIGlzICI6c2xlZXAgNCIsIHdoaWNoIHNsZWVwcyBmb3IgZm91ciBzZWNvbmRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0MS41KglFeGVjdXRpbmcgYW4gZXhwcmVzc2lvbgorCitTbyBmYXIgdGhlIGNvbW1hbmRzIGluIHRoZSBzY3JpcHQgd2VyZSBleGVjdXRlZCBieSBWaW0gZGlyZWN0bHkuICBUaGUKKyI6ZXhlY3V0ZSIgY29tbWFuZCBhbGxvd3MgZXhlY3V0aW5nIHRoZSByZXN1bHQgb2YgYW4gZXhwcmVzc2lvbi4gIFRoaXMgaXMgYQordmVyeSBwb3dlcmZ1bCB3YXkgdG8gYnVpbGQgY29tbWFuZHMgYW5kIGV4ZWN1dGUgdGhlbS4KKyAgIEFuIGV4YW1wbGUgaXMgdG8ganVtcCB0byBhIHRhZywgd2hpY2ggaXMgY29udGFpbmVkIGluIGEgdmFyaWFibGU6ID4KKworCTpleGVjdXRlICJ0YWcgIiAuIHRhZ19uYW1lCisKK1RoZSAiLiIgaXMgdXNlZCB0byBjb25jYXRlbmF0ZSB0aGUgc3RyaW5nICJ0YWcgIiB3aXRoIHRoZSB2YWx1ZSBvZiB2YXJpYWJsZQorInRhZ19uYW1lIi4gIFN1cHBvc2UgInRhZ19uYW1lIiBoYXMgdGhlIHZhbHVlICJnZXRfY21kIiwgdGhlbiB0aGUgY29tbWFuZCB0aGF0Cit3aWxsIGJlIGV4ZWN1dGVkIGlzOiA+CisKKwk6dGFnIGdldF9jbWQKKworVGhlICI6ZXhlY3V0ZSIgY29tbWFuZCBjYW4gb25seSBleGVjdXRlIGNvbG9uIGNvbW1hbmRzLiAgVGhlICI6bm9ybWFsIiBjb21tYW5kCitleGVjdXRlcyBOb3JtYWwgbW9kZSBjb21tYW5kcy4gIEhvd2V2ZXIsIGl0cyBhcmd1bWVudCBpcyBub3QgYW4gZXhwcmVzc2lvbiBidXQKK3RoZSBsaXRlcmFsIGNvbW1hbmQgY2hhcmFjdGVycy4gIEV4YW1wbGU6ID4KKworCTpub3JtYWwgZ2c9RworCitUaGlzIGp1bXBzIHRvIHRoZSBmaXJzdCBsaW5lIGFuZCBmb3JtYXRzIGFsbCBsaW5lcyB3aXRoIHRoZSAiPSIgb3BlcmF0b3IuCisgICBUbyBtYWtlICI6bm9ybWFsIiB3b3JrIHdpdGggYW4gZXhwcmVzc2lvbiwgY29tYmluZSAiOmV4ZWN1dGUiIHdpdGggaXQuCitFeGFtcGxlOiA+CisKKwk6ZXhlY3V0ZSAibm9ybWFsICIgLiBub3JtYWxfY29tbWFuZHMKKworVGhlIHZhcmlhYmxlICJub3JtYWxfY29tbWFuZHMiIG11c3QgY29udGFpbiB0aGUgTm9ybWFsIG1vZGUgY29tbWFuZHMuCisgICBNYWtlIHN1cmUgdGhhdCB0aGUgYXJndW1lbnQgZm9yICI6bm9ybWFsIiBpcyBhIGNvbXBsZXRlIGNvbW1hbmQuICBPdGhlcndpc2UKK1ZpbSB3aWxsIHJ1biBpbnRvIHRoZSBlbmQgb2YgdGhlIGFyZ3VtZW50IGFuZCBhYm9ydCB0aGUgY29tbWFuZC4gIEZvciBleGFtcGxlLAoraWYgeW91IHN0YXJ0IEluc2VydCBtb2RlLCB5b3UgbXVzdCBsZWF2ZSBJbnNlcnQgbW9kZSBhcyB3ZWxsLiAgVGhpcyB3b3JrczogPgorCisJOmV4ZWN1dGUgIm5vcm1hbCBJbmV3IHRleHQgXDxFc2M+IgorCitUaGlzIGluc2VydHMgIm5ldyB0ZXh0ICIgaW4gdGhlIGN1cnJlbnQgbGluZS4gIE5vdGljZSB0aGUgdXNlIG9mIHRoZSBzcGVjaWFsCitrZXkgIlw8RXNjPiIuICBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gZW50ZXIgYSByZWFsIDxFc2M+IGNoYXJhY3RlciBpbiB5b3VyCitzY3JpcHQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQxLjYqCVVzaW5nIGZ1bmN0aW9ucworCitWaW0gZGVmaW5lcyBtYW55IGZ1bmN0aW9ucyBhbmQgcHJvdmlkZXMgYSBsYXJnZSBhbW91bnQgb2YgZnVuY3Rpb25hbGl0eSB0aGF0Cit3YXkuICBBIGZldyBleGFtcGxlcyB3aWxsIGJlIGdpdmVuIGluIHRoaXMgc2VjdGlvbi4gIFlvdSBjYW4gZmluZCB0aGUgd2hvbGUKK2xpc3QgaGVyZTogfGZ1bmN0aW9uc3wuCisKK0EgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlICI6Y2FsbCIgY29tbWFuZC4gIFRoZSBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgaW4KK2JldHdlZW4gYnJhY2VzLCBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgRXhhbXBsZTogPgorCisJOmNhbGwgc2VhcmNoKCJEYXRlOiAiLCAiVyIpCisKK1RoaXMgY2FsbHMgdGhlIHNlYXJjaCgpIGZ1bmN0aW9uLCB3aXRoIGFyZ3VtZW50cyAiRGF0ZTogIiBhbmQgIlciLiAgVGhlCitzZWFyY2goKSBmdW5jdGlvbiB1c2VzIGl0cyBmaXJzdCBhcmd1bWVudCBhcyBhIHNlYXJjaCBwYXR0ZXJuIGFuZCB0aGUgc2Vjb25kCitvbmUgYXMgZmxhZ3MuICBUaGUgIlciIGZsYWcgbWVhbnMgdGhlIHNlYXJjaCBkb2Vzbid0IHdyYXAgYXJvdW5kIHRoZSBlbmQgb2YKK3RoZSBmaWxlLgorCitBIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW4gYW4gZXhwcmVzc2lvbi4gIEV4YW1wbGU6ID4KKworCTpsZXQgbGluZSA9IGdldGxpbmUoIi4iKQorCTpsZXQgcmVwbCA9IHN1YnN0aXR1dGUobGluZSwgJ1xhJywgIioiLCAiZyIpCisJOmNhbGwgc2V0bGluZSgiLiIsIHJlcGwpCisKK1RoZSBnZXRsaW5lKCkgZnVuY3Rpb24gb2J0YWlucyBhIGxpbmUgZnJvbSB0aGUgY3VycmVudCBmaWxlLiAgSXRzIGFyZ3VtZW50IGlzCithIHNwZWNpZmljYXRpb24gb2YgdGhlIGxpbmUgbnVtYmVyLiAgSW4gdGhpcyBjYXNlICIuIiBpcyB1c2VkLCB3aGljaCBtZWFucyB0aGUKK2xpbmUgd2hlcmUgdGhlIGN1cnNvciBpcy4KKyAgIFRoZSBzdWJzdGl0dXRlKCkgZnVuY3Rpb24gZG9lcyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgIjpzdWJzdGl0dXRlIgorY29tbWFuZC4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgc3RyaW5nIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlCitzdWJzdGl0dXRpb24uICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBwYXR0ZXJuLCB0aGUgdGhpcmQgdGhlIHJlcGxhY2VtZW50CitzdHJpbmcuICBGaW5hbGx5LCB0aGUgbGFzdCBhcmd1bWVudHMgYXJlIHRoZSBmbGFncy4KKyAgIFRoZSBzZXRsaW5lKCkgZnVuY3Rpb24gc2V0cyB0aGUgbGluZSwgc3BlY2lmaWVkIGJ5IHRoZSBmaXJzdCBhcmd1bWVudCwgdG8gYQorbmV3IHN0cmluZywgdGhlIHNlY29uZCBhcmd1bWVudC4gIEluIHRoaXMgZXhhbXBsZSB0aGUgbGluZSB1bmRlciB0aGUgY3Vyc29yIGlzCityZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHN1YnN0aXR1dGUoKS4gIFRodXMgdGhlIGVmZmVjdCBvZiB0aGUgdGhyZWUKK3N0YXRlbWVudHMgaXMgZXF1YWwgdG86ID4KKworCTpzdWJzdGl0dXRlL1xhLyovZworCitVc2luZyB0aGUgZnVuY3Rpb25zIGJlY29tZXMgbW9yZSBpbnRlcmVzdGluZyB3aGVuIHlvdSBkbyBtb3JlIHdvcmsgYmVmb3JlIGFuZAorYWZ0ZXIgdGhlIHN1YnN0aXR1dGUoKSBjYWxsLgorCisKK0ZVTkNUSU9OUwkJCQkJCSpmdW5jdGlvbi1saXN0KgorCitUaGVyZSBhcmUgbWFueSBmdW5jdGlvbnMuICBXZSB3aWxsIG1lbnRpb24gdGhlbSBoZXJlLCBncm91cGVkIGJ5IHdoYXQgdGhleSBhcmUKK3VzZWQgZm9yLiAgWW91IGNhbiBmaW5kIGFuIGFscGhhYmV0aWNhbCBsaXN0IGhlcmU6IHxmdW5jdGlvbnN8LiAgVXNlIENUUkwtXSBvbgordGhlIGZ1bmN0aW9uIG5hbWUgdG8ganVtcCB0byBkZXRhaWxlZCBoZWxwIG9uIGl0LgorCitTdHJpbmcgbWFuaXB1bGF0aW9uOgorCWNoYXIybnIoKQkJZ2V0IEFTQ0lJIHZhbHVlIG9mIGEgY2hhcmFjdGVyCisJbnIyY2hhcigpCQlnZXQgYSBjaGFyYWN0ZXIgYnkgaXRzIEFTQ0lJIHZhbHVlCisJZXNjYXBlKCkJCWVzY2FwZSBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIHdpdGggYSAnXCcKKwlzdHJ0cmFucygpCQl0cmFuc2xhdGUgYSBzdHJpbmcgdG8gbWFrZSBpdCBwcmludGFibGUKKwl0b2xvd2VyKCkJCXR1cm4gYSBzdHJpbmcgdG8gbG93ZXJjYXNlCisJdG91cHBlcigpCQl0dXJuIGEgc3RyaW5nIHRvIHVwcGVyY2FzZQorCW1hdGNoKCkJCQlwb3NpdGlvbiB3aGVyZSBhIHBhdHRlcm4gbWF0Y2hlcyBpbiBhIHN0cmluZworCW1hdGNoZW5kKCkJCXBvc2l0aW9uIHdoZXJlIGEgcGF0dGVybiBtYXRjaCBlbmRzIGluIGEgc3RyaW5nCisJbWF0Y2hzdHIoKQkJbWF0Y2ggb2YgYSBwYXR0ZXJuIGluIGEgc3RyaW5nCisJc3RyaWR4KCkJCWZpcnN0IGluZGV4IG9mIGEgc2hvcnQgc3RyaW5nIGluIGEgbG9uZyBzdHJpbmcKKwlzdHJyaWR4KCkJCWxhc3QgaW5kZXggb2YgYSBzaG9ydCBzdHJpbmcgaW4gYSBsb25nIHN0cmluZworCXN0cmxlbigpCQlsZW5ndGggb2YgYSBzdHJpbmcKKwlzdWJzdGl0dXRlKCkJCXN1YnN0aXR1dGUgYSBwYXR0ZXJuIG1hdGNoIHdpdGggYSBzdHJpbmcKKwlzdWJtYXRjaCgpCQlnZXQgYSBzcGVjaWZpYyBtYXRjaCBpbiBhICI6c3Vic3RpdHV0ZSIKKwlzdHJwYXJ0KCkJCWdldCBwYXJ0IG9mIGEgc3RyaW5nCisJZXhwYW5kKCkJCWV4cGFuZCBzcGVjaWFsIGtleXdvcmRzCisJdHlwZSgpCQkJdHlwZSBvZiBhIHZhcmlhYmxlCisJaWNvbnYoKQkJCWNvbnZlcnQgdGV4dCBmcm9tIG9uZSBlbmNvZGluZyB0byBhbm90aGVyCisKK1dvcmtpbmcgd2l0aCB0ZXh0IGluIHRoZSBjdXJyZW50IGJ1ZmZlcjoKKwlieXRlMmxpbmUoKQkJZ2V0IGxpbmUgbnVtYmVyIGF0IGEgc3BlY2lmaWMgYnl0ZSBjb3VudAorCWxpbmUyYnl0ZSgpCQlieXRlIGNvdW50IGF0IGEgc3BlY2lmaWMgbGluZQorCWNvbCgpCQkJY29sdW1uIG51bWJlciBvZiB0aGUgY3Vyc29yIG9yIGEgbWFyaworCXZpcnRjb2woKQkJc2NyZWVuIGNvbHVtbiBvZiB0aGUgY3Vyc29yIG9yIGEgbWFyaworCWxpbmUoKQkJCWxpbmUgbnVtYmVyIG9mIHRoZSBjdXJzb3Igb3IgbWFyaworCXdpbmNvbCgpCQl3aW5kb3cgY29sdW1uIG51bWJlciBvZiB0aGUgY3Vyc29yCisJd2lubGluZSgpCQl3aW5kb3cgbGluZSBudW1iZXIgb2YgdGhlIGN1cnNvcgorCWN1cnNvcigpCQlwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IGEgbGluZS9jb2x1bW4KKwlnZXRsaW5lKCkJCWdldCBhIGxpbmUgZnJvbSB0aGUgYnVmZmVyCisJc2V0bGluZSgpCQlyZXBsYWNlIGEgbGluZSBpbiB0aGUgYnVmZmVyCisJYXBwZW5kKCkJCWFwcGVuZCB7c3RyaW5nfSBiZWxvdyBsaW5lIHtsbnVtfQorCWluZGVudCgpCQlpbmRlbnQgb2YgYSBzcGVjaWZpYyBsaW5lCisJY2luZGVudCgpCQlpbmRlbnQgYWNjb3JkaW5nIHRvIEMgaW5kZW50aW5nCisJbGlzcGluZGVudCgpCQlpbmRlbnQgYWNjb3JkaW5nIHRvIExpc3AgaW5kZW50aW5nCisJbmV4dG5vbmJsYW5rKCkJCWZpbmQgbmV4dCBub24tYmxhbmsgbGluZQorCXByZXZub25ibGFuaygpCQlmaW5kIHByZXZpb3VzIG5vbi1ibGFuayBsaW5lCisJc2VhcmNoKCkJCWZpbmQgYSBtYXRjaCBmb3IgYSBwYXR0ZXJuCisJc2VhcmNocGFpcigpCQlmaW5kIHRoZSBvdGhlciBlbmQgb2YgYSBzdGFydC9za2lwL2VuZAorCitTeXN0ZW0gZnVuY3Rpb25zIGFuZCBtYW5pcHVsYXRpb24gb2YgZmlsZXM6CisJYnJvd3NlKCkJCXB1dCB1cCBhIGZpbGUgcmVxdWVzdGVyCisJZ2xvYigpCQkJZXhwYW5kIHdpbGRjYXJkcworCWdsb2JwYXRoKCkJCWV4cGFuZCB3aWxkY2FyZHMgaW4gYSBudW1iZXIgb2YgZGlyZWN0b3JpZXMKKwlyZXNvbHZlKCkJCWZpbmQgb3V0IHdoZXJlIGEgc2hvcnRjdXQgcG9pbnRzIHRvCisJZm5hbWVtb2RpZnkoKQkJbW9kaWZ5IGEgZmlsZSBuYW1lCisJZXhlY3V0YWJsZSgpCQljaGVjayBpZiBhbiBleGVjdXRhYmxlIHByb2dyYW0gZXhpc3RzCisJZmlsZXJlYWRhYmxlKCkJCWNoZWNrIGlmIGEgZmlsZSBjYW4gYmUgcmVhZAorCWZpbGV3cml0YWJsZSgpCQljaGVjayBpZiBhIGZpbGUgY2FuIGJlIHdyaXR0ZW4gdG8KKwlpc2RpcmVjdG9yeSgpCQljaGVjayBpZiBhIGRpcmVjdG9yeSBleGlzdHMKKwlnZXRjd2QoKQkJZ2V0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisJZ2V0ZnNpemUoKQkJZ2V0IHRoZSBzaXplIG9mIGEgZmlsZQorCWdldGZ0aW1lKCkJCWdldCBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZQorCWxvY2FsdGltZSgpCQlnZXQgY3VycmVudCB0aW1lCisJc3RyZnRpbWUoKQkJY29udmVydCB0aW1lIHRvIGEgc3RyaW5nCisJdGVtcG5hbWUoKQkJZ2V0IHRoZSBuYW1lIG9mIGEgdGVtcG9yYXJ5IGZpbGUKKwlkZWxldGUoKQkJZGVsZXRlIGEgZmlsZQorCXJlbmFtZSgpCQlyZW5hbWUgYSBmaWxlCisJc3lzdGVtKCkJCWdldCB0aGUgcmVzdWx0IG9mIGEgc2hlbGwgY29tbWFuZAorCWhvc3RuYW1lKCkJCW5hbWUgb2YgdGhlIHN5c3RlbQorCitCdWZmZXJzLCB3aW5kb3dzIGFuZCB0aGUgYXJndW1lbnQgbGlzdDoKKwlhcmdjKCkJCQludW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYXJndW1lbnQgbGlzdAorCWFyZ2lkeCgpCQljdXJyZW50IHBvc2l0aW9uIGluIHRoZSBhcmd1bWVudCBsaXN0CisJYXJndigpCQkJZ2V0IG9uZSBlbnRyeSBmcm9tIHRoZSBhcmd1bWVudCBsaXN0CisJYnVmZXhpc3RzKCkJCWNoZWNrIGlmIGEgYnVmZmVyIGV4aXN0cworCWJ1Zmxpc3RlZCgpCQljaGVjayBpZiBhIGJ1ZmZlciBleGlzdHMgYW5kIGlzIGxpc3RlZAorCWJ1ZmxvYWRlZCgpCQljaGVjayBpZiBhIGJ1ZmZlciBleGlzdHMgYW5kIGlzIGxvYWRlZAorCWJ1Zm5hbWUoKQkJZ2V0IHRoZSBuYW1lIG9mIGEgc3BlY2lmaWMgYnVmZmVyCisJYnVmbnIoKQkJCWdldCB0aGUgYnVmZmVyIG51bWJlciBvZiBhIHNwZWNpZmljIGJ1ZmZlcgorCXdpbm5yKCkJCQlnZXQgdGhlIHdpbmRvdyBudW1iZXIgZm9yIHRoZSBjdXJyZW50IHdpbmRvdworCWJ1Zndpbm5yKCkJCWdldCB0aGUgd2luZG93IG51bWJlciBvZiBhIHNwZWNpZmljIGJ1ZmZlcgorCXdpbmJ1Zm5yKCkJCWdldCB0aGUgYnVmZmVyIG51bWJlciBvZiBhIHNwZWNpZmljIHdpbmRvdworCWdldGJ1ZnZhcigpCQlnZXQgYSB2YXJpYWJsZSB2YWx1ZSBmcm9tIGEgc3BlY2lmaWMgYnVmZmVyCisJc2V0YnVmdmFyKCkJCXNldCBhIHZhcmlhYmxlIGluIGEgc3BlY2lmaWMgYnVmZmVyCisJZ2V0d2ludmFyKCkJCWdldCBhIHZhcmlhYmxlIHZhbHVlIGZyb20gYSBzcGVjaWZpYyB3aW5kb3cKKwlzZXR3aW52YXIoKQkJc2V0IGEgdmFyaWFibGUgaW4gYSBzcGVjaWZpYyB3aW5kb3cKKworRm9sZGluZzoKKwlmb2xkY2xvc2VkKCkJCWNoZWNrIGZvciBhIGNsb3NlZCBmb2xkIGF0IGEgc3BlY2lmaWMgbGluZQorCWZvbGRjbG9zZWRlbmQoKQkJbGlrZSBmb2xkY2xvc2VkKCkgYnV0IHJldHVybiB0aGUgbGFzdCBsaW5lCisJZm9sZGxldmVsKCkJCWNoZWNrIGZvciB0aGUgZm9sZCBsZXZlbCBhdCBhIHNwZWNpZmljIGxpbmUKKwlmb2xkdGV4dCgpCQlnZW5lcmF0ZSB0aGUgbGluZSBkaXNwbGF5ZWQgZm9yIGEgY2xvc2VkIGZvbGQKKworU3ludGF4IGhpZ2hsaWdodGluZzoKKwlobGV4aXN0cygpCQljaGVjayBpZiBhIGhpZ2hsaWdodCBncm91cCBleGlzdHMKKwlobElEKCkJCQlnZXQgSUQgb2YgYSBoaWdobGlnaHQgZ3JvdXAKKwlzeW5JRCgpCQkJZ2V0IHN5bnRheCBJRCBhdCBhIHNwZWNpZmljIHBvc2l0aW9uCisJc3luSURhdHRyKCkJCWdldCBhIHNwZWNpZmljIGF0dHJpYnV0ZSBvZiBhIHN5bnRheCBJRAorCXN5bklEdHJhbnMoKQkJZ2V0IHRyYW5zbGF0ZWQgc3ludGF4IElECisKK0hpc3Rvcnk6CisJaGlzdGFkZCgpCQlhZGQgYW4gaXRlbSB0byBhIGhpc3RvcnkKKwloaXN0ZGVsKCkJCWRlbGV0ZSBhbiBpdGVtIGZyb20gYSBoaXN0b3J5CisJaGlzdGdldCgpCQlnZXQgYW4gaXRlbSBmcm9tIGEgaGlzdG9yeQorCWhpc3RucigpCQlnZXQgaGlnaGVzdCBpbmRleCBvZiBhIGhpc3RvcnkgbGlzdAorCitJbnRlcmFjdGl2ZToKKwljb25maXJtKCkJCWxldCB0aGUgdXNlciBtYWtlIGEgY2hvaWNlCisJZ2V0Y2hhcigpCQlnZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgdXNlcgorCWdldGNoYXJtb2QoKQkJZ2V0IG1vZGlmaWVycyBmb3IgdGhlIGxhc3QgdHlwZWQgY2hhcmFjdGVyCisJaW5wdXQoKQkJCWdldCBhIGxpbmUgZnJvbSB0aGUgdXNlcgorCWlucHV0c2VjcmV0KCkJCWdldCBhIGxpbmUgZnJvbSB0aGUgdXNlciB3aXRob3V0IHNob3dpbmcgaXQKKwlpbnB1dGRpYWxvZygpCQlnZXQgYSBsaW5lIGZyb20gdGhlIHVzZXIgaW4gYSBkaWFsb2cKKwlpbnB1dHJlc2F2ZQkJc2F2ZSBhbmQgY2xlYXIgdHlwZWFoZWFkCisJaW5wdXRyZXN0b3JlKCkJCXJlc3RvcmUgdHlwZWFoZWFkCisKK1ZpbSBzZXJ2ZXI6CisJc2VydmVybGlzdCgpCQlyZXR1cm4gdGhlIGxpc3Qgb2Ygc2VydmVyIG5hbWVzCisJcmVtb3RlX3NlbmQoKQkJc2VuZCBjb21tYW5kIGNoYXJhY3RlcnMgdG8gYSBWaW0gc2VydmVyCisJcmVtb3RlX2V4cHIoKQkJZXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBpbiBhIFZpbSBzZXJ2ZXIKKwlzZXJ2ZXIyY2xpZW50KCkJCXNlbmQgYSByZXBseSB0byBhIGNsaWVudCBvZiBhIFZpbSBzZXJ2ZXIKKwlyZW1vdGVfcGVlaygpCQljaGVjayBpZiB0aGVyZSBpcyBhIHJlcGx5IGZyb20gYSBWaW0gc2VydmVyCisJcmVtb3RlX3JlYWQoKQkJcmVhZCBhIHJlcGx5IGZyb20gYSBWaW0gc2VydmVyCisJZm9yZWdyb3VuZCgpCQltb3ZlIHRoZSBWaW0gd2luZG93IHRvIHRoZSBmb3JlZ3JvdW5kCisJcmVtb3RlX2ZvcmVncm91bmQoKQltb3ZlIHRoZSBWaW0gc2VydmVyIHdpbmRvdyB0byB0aGUgZm9yZWdyb3VuZAorCitWYXJpb3VzOgorCW1vZGUoKQkJCWdldCBjdXJyZW50IGVkaXRpbmcgbW9kZQorCXZpc3VhbG1vZGUoKQkJbGFzdCB2aXN1YWwgbW9kZSB1c2VkCisJaGFzbWFwdG8oKQkJY2hlY2sgaWYgYSBtYXBwaW5nIGV4aXN0cworCW1hcGNoZWNrKCkJCWNoZWNrIGlmIGEgbWF0Y2hpbmcgbWFwcGluZyBleGlzdHMKKwltYXBhcmcoKQkJZ2V0IHJocyBvZiBhIG1hcHBpbmcKKwlleGlzdHMoKQkJY2hlY2sgaWYgYSB2YXJpYWJsZSwgZnVuY3Rpb24sIGV0Yy4gZXhpc3RzCisJaGFzKCkJCQljaGVjayBpZiBhIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGluIFZpbQorCWNzY29wZV9jb25uZWN0aW9uKCkJY2hlY2sgaWYgYSBjc2NvcGUgY29ubmVjdGlvbiBleGlzdHMKKwlkaWRfZmlsZXR5cGUoKQkJY2hlY2sgaWYgYSBGaWxlVHlwZSBhdXRvY29tbWFuZCB3YXMgdXNlZAorCWV2ZW50aGFuZGxlcigpCQljaGVjayBpZiBpbnZva2VkIGJ5IGFuIGV2ZW50IGhhbmRsZXIKKwlnZXR3aW5wb3N4KCkJCVggcG9zaXRpb24gb2YgdGhlIEdVSSBWaW0gd2luZG93CisJZ2V0d2lucG9zeSgpCQlZIHBvc2l0aW9uIG9mIHRoZSBHVUkgVmltIHdpbmRvdworCXdpbmhlaWdodCgpCQlnZXQgaGVpZ2h0IG9mIGEgc3BlY2lmaWMgd2luZG93CisJd2lud2lkdGgoKQkJZ2V0IHdpZHRoIG9mIGEgc3BlY2lmaWMgd2luZG93CisJbGliY2FsbCgpCQljYWxsIGEgZnVuY3Rpb24gaW4gYW4gZXh0ZXJuYWwgbGlicmFyeQorCWxpYmNhbGxucigpCQlpZGVtLCByZXR1cm5pbmcgYSBudW1iZXIKKwlnZXRyZWcoKQkJZ2V0IGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIKKwlnZXRyZWd0eXBlKCkJCWdldCB0eXBlIG9mIGEgcmVnaXN0ZXIKKwlzZXRyZWcoKQkJc2V0IGNvbnRlbnRzIGFuZCB0eXBlIG9mIGEgcmVnaXN0ZXIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDEuNyoJRGVmaW5pbmcgYSBmdW5jdGlvbgorCitWaW0gZW5hYmxlcyB5b3UgdG8gZGVmaW5lIHlvdXIgb3duIGZ1bmN0aW9ucy4gIFRoZSBiYXNpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbgorYmVnaW5zIGFzIGZvbGxvd3M6ID4KKworCTpmdW5jdGlvbiB7bmFtZX0oe3ZhcjF9LCB7dmFyMn0sIC4uLikKKwk6ICB7Ym9keX0KKwk6ZW5kZnVuY3Rpb24KKzwKKwlOb3RlOgorCUZ1bmN0aW9uIG5hbWVzIG11c3QgYmVnaW4gd2l0aCBhIGNhcGl0YWwgbGV0dGVyLgorCitMZXQncyBkZWZpbmUgYSBzaG9ydCBmdW5jdGlvbiB0byByZXR1cm4gdGhlIHNtYWxsZXIgb2YgdHdvIG51bWJlcnMuICBJdCBzdGFydHMKK3dpdGggdGhpcyBsaW5lOiA+CisKKwk6ZnVuY3Rpb24gTWluKG51bTEsIG51bTIpCisKK1RoaXMgdGVsbHMgVmltIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIG5hbWVkICJNaW4iIGFuZCBpdCB0YWtlcyB0d28gYXJndW1lbnRzOgorIm51bTEiIGFuZCAibnVtMiIuCisgICBUaGUgZmlyc3QgdGhpbmcgeW91IG5lZWQgdG8gZG8gaXMgdG8gY2hlY2sgdG8gc2VlIHdoaWNoIG51bWJlciBpcyBzbWFsbGVyOgorICAgPgorCTogIGlmIGE6bnVtMSA8IGE6bnVtMgorCitUaGUgc3BlY2lhbCBwcmVmaXggImE6IiB0ZWxscyBWaW0gdGhhdCB0aGUgdmFyaWFibGUgaXMgYSBmdW5jdGlvbiBhcmd1bWVudC4KK0xldCdzIGFzc2lnbiB0aGUgdmFyaWFibGUgInNtYWxsZXIiIHRoZSB2YWx1ZSBvZiB0aGUgc21hbGxlc3QgbnVtYmVyOiA+CisKKwk6ICBpZiBhOm51bTEgPCBhOm51bTIKKwk6ICAgIGxldCBzbWFsbGVyID0gYTpudW0xCisJOiAgZWxzZQorCTogICAgbGV0IHNtYWxsZXIgPSBhOm51bTIKKwk6ICBlbmRpZgorCitUaGUgdmFyaWFibGUgInNtYWxsZXIiIGlzIGEgbG9jYWwgdmFyaWFibGUuICBWYXJpYWJsZXMgdXNlZCBpbnNpZGUgYSBmdW5jdGlvbgorYXJlIGxvY2FsIHVubGVzcyBwcmVmaXhlZCBieSBzb21ldGhpbmcgbGlrZSAiZzoiLCAiYToiLCBvciAiczoiLgorCisJTm90ZToKKwlUbyBhY2Nlc3MgYSBnbG9iYWwgdmFyaWFibGUgZnJvbSBpbnNpZGUgYSBmdW5jdGlvbiB5b3UgbXVzdCBwcmVwZW5kCisJImc6IiB0byBpdC4gIFRodXMgImc6Y291bnQiIGluc2lkZSBhIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHRoZSBnbG9iYWwKKwl2YXJpYWJsZSAiY291bnQiLCBhbmQgImNvdW50IiBpcyBhbm90aGVyIHZhcmlhYmxlLCBsb2NhbCB0byB0aGUKKwlmdW5jdGlvbi4KKworWW91IG5vdyB1c2UgdGhlICI6cmV0dXJuIiBzdGF0ZW1lbnQgdG8gcmV0dXJuIHRoZSBzbWFsbGVzdCBudW1iZXIgdG8gdGhlIHVzZXIuCitGaW5hbGx5LCB5b3UgZW5kIHRoZSBmdW5jdGlvbjogPgorCisJOiAgcmV0dXJuIHNtYWxsZXIKKwk6ZW5kZnVuY3Rpb24KKworVGhlIGNvbXBsZXRlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYXMgZm9sbG93czogPgorCisJOmZ1bmN0aW9uIE1pbihudW0xLCBudW0yKQorCTogIGlmIGE6bnVtMSA8IGE6bnVtMgorCTogICAgbGV0IHNtYWxsZXIgPSBhOm51bTEKKwk6ICBlbHNlCisJOiAgICBsZXQgc21hbGxlciA9IGE6bnVtMgorCTogIGVuZGlmCisJOiAgcmV0dXJuIHNtYWxsZXIKKwk6ZW5kZnVuY3Rpb24KKworQSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIGEgYnVpbHRpbgorZnVuY3Rpb24uICBPbmx5IHRoZSBuYW1lIGlzIGRpZmZlcmVudC4gIFRoZSBNaW4gZnVuY3Rpb24gY2FuIGJlIHVzZWQgbGlrZQordGhpczogPgorCisJOmVjaG8gTWluKDUsIDgpCisKK09ubHkgbm93IHdpbGwgdGhlIGZ1bmN0aW9uIGJlIGV4ZWN1dGVkIGFuZCB0aGUgbGluZXMgYmUgaW50ZXJwcmV0ZWQgYnkgVmltLgorSWYgdGhlcmUgYXJlIG1pc3Rha2VzLCBsaWtlIHVzaW5nIGFuIHVuZGVmaW5lZCB2YXJpYWJsZSBvciBmdW5jdGlvbiwgeW91IHdpbGwKK25vdyBnZXQgYW4gZXJyb3IgbWVzc2FnZS4gIFdoZW4gZGVmaW5pbmcgdGhlIGZ1bmN0aW9uIHRoZXNlIGVycm9ycyBhcmUgbm90CitkZXRlY3RlZC4KKworV2hlbiBhIGZ1bmN0aW9uIHJlYWNoZXMgIjplbmRmdW5jdGlvbiIgb3IgIjpyZXR1cm4iIGlzIHVzZWQgd2l0aG91dCBhbgorYXJndW1lbnQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHplcm8uCisKK1RvIHJlZGVmaW5lIGEgZnVuY3Rpb24gdGhhdCBhbHJlYWR5IGV4aXN0cywgdXNlIHRoZSAhIGZvciB0aGUgIjpmdW5jdGlvbiIKK2NvbW1hbmQ6ID4KKworCTpmdW5jdGlvbiEgIE1pbihudW0xLCBudW0yLCBudW0zKQorCisKK1VTSU5HIEEgUkFOR0UKKworVGhlICI6Y2FsbCIgY29tbWFuZCBjYW4gYmUgZ2l2ZW4gYSBsaW5lIHJhbmdlLiAgVGhpcyBjYW4gaGF2ZSBvbmUgb2YgdHdvCittZWFuaW5ncy4gIFdoZW4gYSBmdW5jdGlvbiBoYXMgYmVlbiBkZWZpbmVkIHdpdGggdGhlICJyYW5nZSIga2V5d29yZCwgaXQgd2lsbAordGFrZSBjYXJlIG9mIHRoZSBsaW5lIHJhbmdlIGl0c2VsZi4KKyAgVGhlIGZ1bmN0aW9uIHdpbGwgYmUgcGFzc2VkIHRoZSB2YXJpYWJsZXMgImE6Zmlyc3RsaW5lIiBhbmQgImE6bGFzdGxpbmUiLgorVGhlc2Ugd2lsbCBoYXZlIHRoZSBsaW5lIG51bWJlcnMgZnJvbSB0aGUgcmFuZ2UgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aC4KK0V4YW1wbGU6ID4KKworCTpmdW5jdGlvbiBDb3VudF93b3JkcygpIHJhbmdlCisJOiAgbGV0IG4gPSBhOmZpcnN0bGluZQorCTogIGxldCBjb3VudCA9IDAKKwk6ICB3aGlsZSBuIDw9IGE6bGFzdGxpbmUKKwk6ICAgIGxldCBjb3VudCA9IGNvdW50ICsgV29yZGNvdW50KGdldGxpbmUobikpCisJOiAgICBsZXQgbiA9IG4gKyAxCisJOiAgZW5kd2hpbGUKKwk6ICBlY2hvICJmb3VuZCAiIC4gY291bnQgLiAiIHdvcmRzIgorCTplbmRmdW5jdGlvbgorCitZb3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoOiA+CisKKwk6MTAsMzBjYWxsIENvdW50X3dvcmRzKCkKKworSXQgd2lsbCBiZSBleGVjdXRlZCBvbmNlIGFuZCBlY2hvIHRoZSBudW1iZXIgb2Ygd29yZHMuCisgICBUaGUgb3RoZXIgd2F5IHRvIHVzZSBhIGxpbmUgcmFuZ2UgaXMgYnkgZGVmaW5pbmcgYSBmdW5jdGlvbiB3aXRob3V0IHRoZQorInJhbmdlIiBrZXl3b3JkLiAgVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGV2ZXJ5IGxpbmUgaW4gdGhlCityYW5nZSwgd2l0aCB0aGUgY3Vyc29yIGluIHRoYXQgbGluZS4gIEV4YW1wbGU6ID4KKworCTpmdW5jdGlvbiAgTnVtYmVyKCkKKwk6ICBlY2hvICJsaW5lICIgLiBsaW5lKCIuIikgLiAiIGNvbnRhaW5zOiAiIC4gZ2V0bGluZSgiLiIpCisJOmVuZGZ1bmN0aW9uCisKK0lmIHlvdSBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aDogPgorCisJOjEwLDE1Y2FsbCBOdW1iZXIoKQorCitUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgc2l4IHRpbWVzLgorCisKK1ZBUklBQkxFIE5VTUJFUiBPRiBBUkdVTUVOVFMKKworVmltIGVuYWJsZXMgeW91IHRvIGRlZmluZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KK1RoZSBmb2xsb3dpbmcgY29tbWFuZCwgZm9yIGluc3RhbmNlLCBkZWZpbmVzIGEgZnVuY3Rpb24gdGhhdCBtdXN0IGhhdmUgMQorYXJndW1lbnQgKHN0YXJ0KSBhbmQgY2FuIGhhdmUgdXAgdG8gMjAgYWRkaXRpb25hbCBhcmd1bWVudHM6ID4KKworCTpmdW5jdGlvbiBTaG93KHN0YXJ0LCAuLi4pCisKK1RoZSB2YXJpYWJsZSAiYToxIiBjb250YWlucyB0aGUgZmlyc3Qgb3B0aW9uYWwgYXJndW1lbnQsICJhOjIiIHRoZSBzZWNvbmQsIGFuZAorc28gb24uICBUaGUgdmFyaWFibGUgImE6MCIgY29udGFpbnMgdGhlIG51bWJlciBvZiBleHRyYSBhcmd1bWVudHMuCisgICBGb3IgZXhhbXBsZTogPgorCisJOmZ1bmN0aW9uIFNob3coc3RhcnQsIC4uLikKKwk6ICBlY2hvaGwgVGl0bGUKKwk6ICBlY2hvICJTaG93IGlzICIgLiBhOnN0YXJ0CisJOiAgZWNob2hsIE5vbmUKKwk6ICBsZXQgaW5kZXggPSAxCisJOiAgd2hpbGUgaW5kZXggPD0gYTowCisJOiAgICBlY2hvICIgIEFyZyAiIC4gaW5kZXggLiAiIGlzICIgLiBhOntpbmRleH0KKwk6ICAgIGxldCBpbmRleCA9IGluZGV4ICsgMQorCTogIGVuZHdoaWxlCisJOiAgZWNobyAiIgorCTplbmRmdW5jdGlvbgorCitUaGlzIHVzZXMgdGhlICI6ZWNob2hsIiBjb21tYW5kIHRvIHNwZWNpZnkgdGhlIGhpZ2hsaWdodGluZyB1c2VkIGZvciB0aGUKK2ZvbGxvd2luZyAiOmVjaG8iIGNvbW1hbmQuICAiOmVjaG9obCBOb25lIiBzdG9wcyBpdCBhZ2Fpbi4gIFRoZSAiOmVjaG9uIgorY29tbWFuZCB3b3JrcyBsaWtlICI6ZWNobyIsIGJ1dCBkb2Vzbid0IG91dHB1dCBhIGxpbmUgYnJlYWsuCisKKworTElTVElORyBGVU5DVElPTlMKKworVGhlICI6ZnVuY3Rpb24iIGNvbW1hbmQgbGlzdHMgdGhlIG5hbWVzIGFuZCBhcmd1bWVudHMgb2YgYWxsIHVzZXItZGVmaW5lZAorZnVuY3Rpb25zOiA+CisKKwk6ZnVuY3Rpb24KKzwJZnVuY3Rpb24gU2hvdyhzdGFydCwgLi4uKSB+CisJZnVuY3Rpb24gR2V0VmltSW5kZW50KCkgfgorCWZ1bmN0aW9uIFNldFN5bihuYW1lKSB+CisKK1RvIHNlZSB3aGF0IGEgZnVuY3Rpb24gZG9lcywgdXNlIGl0cyBuYW1lIGFzIGFuIGFyZ3VtZW50IGZvciAiOmZ1bmN0aW9uIjogPgorCisJOmZ1bmN0aW9uIFNldFN5bgorPAkxICAgICBpZiAmc3ludGF4ID09ICcnIH4KKwkyICAgICAgIGxldCAmc3ludGF4ID0gYTpuYW1lIH4KKwkzICAgICBlbmRpZiB+CisJICAgZW5kZnVuY3Rpb24gfgorCisKK0RFQlVHR0lORworCitUaGUgbGluZSBudW1iZXIgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBnZXQgYW4gZXJyb3IgbWVzc2FnZSBvciB3aGVuIGRlYnVnZ2luZy4KK1NlZSB8ZGVidWctc2NyaXB0c3wgYWJvdXQgZGVidWdnaW5nIG1vZGUuCisgICBZb3UgY2FuIGFsc28gc2V0IHRoZSAndmVyYm9zZScgb3B0aW9uIHRvIDEyIG9yIGhpZ2hlciB0byBzZWUgYWxsIGZ1bmN0aW9uCitjYWxscy4gIFNldCBpdCB0byAxNSBvciBoaWdoZXIgdG8gc2VlIGV2ZXJ5IGV4ZWN1dGVkIGxpbmUuCisKKworREVMRVRJTkcgQSBGVU5DVElPTgorCitUbyBkZWxldGUgdGhlIFNob3coKSBmdW5jdGlvbjogPgorCisJOmRlbGZ1bmN0aW9uIFNob3cKKworWW91IGdldCBhbiBlcnJvciB3aGVuIHRoZSBmdW5jdGlvbiBkb2Vzbid0IGV4aXN0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0MS44KglFeGNlcHRpb25zCisKK0xldCdzIHN0YXJ0IHdpdGggYW4gZXhhbXBsZTogPgorCisJOnRyeQorCTogICByZWFkIH4vdGVtcGxhdGVzL3Bhc2NhbC50bXBsCisJOmNhdGNoIC9FNDg0Oi8KKwk6ICAgZWNobyAiU29ycnksIHRoZSBQYXNjYWwgdGVtcGxhdGUgZmlsZSBjYW5ub3QgYmUgZm91bmQuIgorCTplbmR0cnkKKworVGhlICI6cmVhZCIgY29tbWFuZCB3aWxsIGZhaWwgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuICBJbnN0ZWFkIG9mCitnZW5lcmF0aW5nIGFuIGVycm9yIG1lc3NhZ2UsIHRoaXMgY29kZSBjYXRjaGVzIHRoZSBlcnJvciBhbmQgZ2l2ZXMgdGhlIHVzZXIgYQorbmljZSBtZXNzYWdlIGluc3RlYWQuCisKK0ZvciB0aGUgY29tbWFuZHMgaW4gYmV0d2VlbiAiOnRyeSIgYW5kICI6ZW5kdHJ5IiBlcnJvcnMgYXJlIHR1cm5lZCBpbnRvCitleGNlcHRpb25zLiAgQW4gZXhjZXB0aW9uIGlzIGEgc3RyaW5nLiAgSW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IgdGhlIHN0cmluZworY29udGFpbnMgdGhlIGVycm9yIG1lc3NhZ2UuICBBbmQgZXZlcnkgZXJyb3IgbWVzc2FnZSBoYXMgYSBudW1iZXIuICBJbiB0aGlzCitjYXNlLCB0aGUgZXJyb3Igd2UgY2F0Y2ggY29udGFpbnMgIkU0ODQ6Ii4gIFRoaXMgbnVtYmVyIGlzIGd1YXJhbnRlZWQgdG8gc3RheQordGhlIHNhbWUgKHRoZSB0ZXh0IG1heSBjaGFuZ2UsIGUuZy4sIGl0IG1heSBiZSB0cmFuc2xhdGVkKS4KKworV2hlbiB0aGUgIjpyZWFkIiBjb21tYW5kIGNhdXNlcyBhbm90aGVyIGVycm9yLCB0aGUgcGF0dGVybiAiRTQ4NDoiIHdpbGwgbm90CittYXRjaCBpbiBpdC4gIFRodXMgdGhpcyBleGNlcHRpb24gd2lsbCBub3QgYmUgY2F1Z2h0IGFuZCByZXN1bHQgaW4gdGhlIHVzdWFsCitlcnJvciBtZXNzYWdlLgorCitZb3UgbWlnaHQgYmUgdGVtcHRlZCB0byBkbyB0aGlzOiA+CisKKwk6dHJ5CisJOiAgIHJlYWQgfi90ZW1wbGF0ZXMvcGFzY2FsLnRtcGwKKwk6Y2F0Y2gKKwk6ICAgZWNobyAiU29ycnksIHRoZSBQYXNjYWwgdGVtcGxhdGUgZmlsZSBjYW5ub3QgYmUgZm91bmQuIgorCTplbmR0cnkKKworVGhpcyBtZWFucyBhbGwgZXJyb3JzIGFyZSBjYXVnaHQuICBCdXQgdGhlbiB5b3Ugd2lsbCBub3Qgc2VlIGVycm9ycyB0aGF0IGFyZQordXNlZnVsLCBzdWNoIGFzICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiLgorCitBbm90aGVyIHVzZWZ1bCBtZWNoYW5pc20gaXMgdGhlICI6ZmluYWxseSIgY29tbWFuZDogPgorCisJOmxldCB0bXAgPSB0ZW1wbmFtZSgpCisJOnRyeQorCTogICBleGUgIi4sJHdyaXRlICIgLiB0bXAKKwk6ICAgZXhlICIhZmlsdGVyICIgLiB0bXAKKwk6ICAgLiwkZGVsZXRlCisJOiAgIGV4ZSAiJHJlYWQgIiAuIHRtcAorCTpmaW5hbGx5CisJOiAgIGNhbGwgZGVsZXRlKHRtcCkKKwk6ZW5kdHJ5CisKK1RoaXMgZmlsdGVycyB0aGUgbGluZXMgZnJvbSB0aGUgY3Vyc29yIHVudGlsIHRoZSBlbmQgb2YgdGhlIGZpbGUgdGhyb3VnaCB0aGUKKyJmaWx0ZXIiIGNvbW1hbmQsIHdoaWNoIHRha2VzIGEgZmlsZSBuYW1lIGFyZ3VtZW50LiAgTm8gbWF0dGVyIGlmIHRoZQorZmlsdGVyaW5nIHdvcmtzLCBzb21ldGhpbmcgZ29lcyB3cm9uZyBpbiBiZXR3ZWVuICI6dHJ5IiBhbmQgIjpmaW5hbGx5IiBvciB0aGUKK3VzZXIgY2FuY2VscyB0aGUgZmlsdGVyaW5nIGJ5IHByZXNzaW5nIENUUkwtQywgdGhlICJjYWxsIGRlbGV0ZSh0bXApIiBpcworYWx3YXlzIGV4ZWN1dGVkLiAgVGhpcyBtYWtlcyBzdXJlIHlvdSBkb24ndCBsZWF2ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgYmVoaW5kLgorCitNb3JlIGluZm9ybWF0aW9uIGFib3V0IGV4Y2VwdGlvbiBoYW5kbGluZyBjYW4gYmUgZm91bmQgaW4gdGhlIHJlZmVyZW5jZQorbWFudWFsOiB8ZXhjZXB0aW9uLWhhbmRsaW5nfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDEuOSoJVmFyaW91cyByZW1hcmtzCisKK0hlcmUgaXMgYSBzdW1tYXJ5IG9mIGl0ZW1zIHRoYXQgYXBwbHkgdG8gVmltIHNjcmlwdHMuICBUaGV5IGFyZSBhbHNvIG1lbnRpb25lZAorZWxzZXdoZXJlLCBidXQgZm9ybSBhIG5pY2UgY2hlY2tsaXN0LgorCitUaGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVyIGRlcGVuZHMgb24gdGhlIHN5c3RlbS4gIEZvciBVbml4IGEgc2luZ2xlIDxOTD4KK2NoYXJhY3RlciBpcyB1c2VkLiAgRm9yIE1TLURPUywgV2luZG93cywgT1MvMiBhbmQgdGhlIGxpa2UsIDxDUj48TEY+IGlzIHVzZWQuCitUaGlzIGlzIGltcG9ydGFudCB3aGVuIHVzaW5nIG1hcHBpbmdzIHRoYXQgZW5kIGluIGEgPENSPi4gIFNlZSB8OnNvdXJjZV9jcm5sfC4KKworCitXSElURSBTUEFDRQorCitCbGFuayBsaW5lcyBhcmUgYWxsb3dlZCBhbmQgaWdub3JlZC4KKworTGVhZGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKGJsYW5rcyBhbmQgVEFCcykgYXJlIGFsd2F5cyBpZ25vcmVkLiAgVGhlCit3aGl0ZXNwYWNlcyBiZXR3ZWVuIHBhcmFtZXRlcnMgKGUuZy4gYmV0d2VlbiB0aGUgJ3NldCcgYW5kIHRoZSAnY3BvcHRpb25zJyBpbgordGhlIGV4YW1wbGUgYmVsb3cpIGFyZSByZWR1Y2VkIHRvIG9uZSBibGFuayBjaGFyYWN0ZXIgYW5kIHBsYXlzIHRoZSByb2xlIG9mIGEKK3NlcGFyYXRvciwgdGhlIHdoaXRlc3BhY2VzIGFmdGVyIHRoZSBsYXN0ICh2aXNpYmxlKSBjaGFyYWN0ZXIgbWF5IG9yIG1heSBub3QKK2JlIGlnbm9yZWQgZGVwZW5kaW5nIG9uIHRoZSBzaXR1YXRpb24sIHNlZSBiZWxvdy4KKworRm9yIGEgIjpzZXQiIGNvbW1hbmQgaW52b2x2aW5nIHRoZSAiPSIgKGVxdWFsKSBzaWduLCBzdWNoIGFzIGluOiA+CisKKwk6c2V0IGNwb3B0aW9ucyAgICA9YUFCY2VGc3QKKwordGhlIHdoaXRlc3BhY2UgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSAiPSIgc2lnbiBpcyBpZ25vcmVkLiAgQnV0IHRoZXJlIGNhbiBiZQorbm8gd2hpdGVzcGFjZSBhZnRlciB0aGUgIj0iIHNpZ24hCisKK1RvIGluY2x1ZGUgYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpbiB0aGUgdmFsdWUgb2YgYW4gb3B0aW9uLCBpdCBtdXN0IGJlCitlc2NhcGVkIGJ5IGEgIlwiIChiYWNrc2xhc2gpICBhcyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6ID4KKworCTpzZXQgdGFncz1teVwgbmljZVwgZmlsZQorCitUaGUgc2FtZSBleGFtcGxlIHdyaXR0ZW4gYXMgPgorCisJOnNldCB0YWdzPW15IG5pY2UgZmlsZQorCit3aWxsIGlzc3VlIGFuIGVycm9yLCBiZWNhdXNlIGl0IGlzIGludGVycHJldGVkIGFzOiA+CisKKwk6c2V0IHRhZ3M9bXkKKwk6c2V0IG5pY2UKKwk6c2V0IGZpbGUKKworCitDT01NRU5UUworCitUaGUgY2hhcmFjdGVyICIgKHRoZSBkb3VibGUgcXVvdGUgbWFyaykgc3RhcnRzIGEgY29tbWVudC4gIEV2ZXJ5dGhpbmcgYWZ0ZXIKK2FuZCBpbmNsdWRpbmcgdGhpcyBjaGFyYWN0ZXIgdW50aWwgdGhlIGVuZC1vZi1saW5lIGlzIGNvbnNpZGVyZWQgYSBjb21tZW50IGFuZAoraXMgaWdub3JlZCwgZXhjZXB0IGZvciBjb21tYW5kcyB0aGF0IGRvbid0IGNvbnNpZGVyIGNvbW1lbnRzLCBhcyBzaG93biBpbgorZXhhbXBsZXMgYmVsb3cuICBBIGNvbW1lbnQgY2FuIHN0YXJ0IG9uIGFueSBjaGFyYWN0ZXIgcG9zaXRpb24gb24gdGhlIGxpbmUuCisKK1RoZXJlIGlzIGEgbGl0dGxlICJjYXRjaCIgd2l0aCBjb21tZW50cyBmb3Igc29tZSBjb21tYW5kcy4gIEV4YW1wbGVzOiA+CisKKwk6YWJicmV2IGRldiBkZXZlbG9wbWVudAkJIiBzaG9ydGhhbmQKKwk6bWFwIDxGMz4gbyNpbmNsdWRlCQkiIGluc2VydCBpbmNsdWRlCisJOmV4ZWN1dGUgY21kCQkJIiBkbyBpdAorCTohbHMgKi5jCQkJIiBsaXN0IEMgZmlsZXMKKworVGhlIGFiYnJldmlhdGlvbiAnZGV2JyB3aWxsIGJlIGV4cGFuZGVkIHRvICdkZXZlbG9wbWVudCAgICAgIiBzaG9ydGhhbmQnLiAgVGhlCittYXBwaW5nIG9mIDxGMz4gd2lsbCBhY3R1YWxseSBiZSB0aGUgd2hvbGUgbGluZSBhZnRlciB0aGUgJ28jIC4uLi4nIGluY2x1ZGluZwordGhlICciIGluc2VydCBpbmNsdWRlJy4gIFRoZSAiZXhlY3V0ZSIgY29tbWFuZCB3aWxsIGdpdmUgYW4gZXJyb3IuICBUaGUgIiEiCitjb21tYW5kIHdpbGwgc2VuZCBldmVyeXRoaW5nIGFmdGVyIGl0IHRvIHRoZSBzaGVsbCwgY2F1c2luZyBhbiBlcnJvciBmb3IgYW4KK3VubWF0Y2hlZCAnIicgY2hhcmFjdGVyLgorICAgVGhlcmUgY2FuIGJlIG5vIGNvbW1lbnQgYWZ0ZXIgIjptYXAiLCAiOmFiYnJldmlhdGUiLCAiOmV4ZWN1dGUiIGFuZCAiISIKK2NvbW1hbmRzICh0aGVyZSBhcmUgYSBmZXcgbW9yZSBjb21tYW5kcyB3aXRoIHRoaXMgcmVzdHJpY3Rpb24pLiAgRm9yIHRoZQorIjptYXAiLCAiOmFiYnJldmlhdGUiIGFuZCAiOmV4ZWN1dGUiIGNvbW1hbmRzIHRoZXJlIGlzIGEgdHJpY2s6ID4KKworCTphYmJyZXYgZGV2IGRldmVsb3BtZW50fCIgc2hvcnRoYW5kCisJOm1hcCA8RjM+IG8jaW5jbHVkZXwiIGluc2VydCBpbmNsdWRlCisJOmV4ZWN1dGUgY21kCQkJfCIgZG8gaXQKKworV2l0aCB0aGUgJ3wnIGNoYXJhY3RlciB0aGUgY29tbWFuZCBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgbmV4dCBvbmUuICBBbmQgdGhhdAorbmV4dCBjb21tYW5kIGlzIG9ubHkgYSBjb21tZW50LgorCitOb3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3aGl0ZSBzcGFjZSBiZWZvcmUgdGhlICd8JyBpbiB0aGUgYWJicmV2aWF0aW9uIGFuZAorbWFwcGluZy4gIEZvciB0aGVzZSBjb21tYW5kcywgYW55IGNoYXJhY3RlciB1bnRpbCB0aGUgZW5kLW9mLWxpbmUgb3IgJ3wnIGlzCitpbmNsdWRlZC4gIEFzIGEgY29uc2VxdWVuY2Ugb2YgdGhpcyBiZWhhdmlvciwgeW91IGRvbid0IGFsd2F5cyBzZWUgdGhhdAordHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBpbmNsdWRlZDogPgorCisJOm1hcCA8RjQ+IG8jaW5jbHVkZSAgCisKK1RvIGF2b2lkIHRoZXNlIHByb2JsZW1zLCB5b3UgY2FuIHNldCB0aGUgJ2xpc3QnIG9wdGlvbiB3aGVuIGVkaXRpbmcgdmltcmMKK2ZpbGVzLgorCisKK1BJVEZBTExTCisKK0V2ZW4gYmlnZ2VyIHByb2JsZW0gYXJpc2VzIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTogPgorCisJOm1hcCAsYWIgbyNpbmNsdWRlCisJOnVubWFwICxhYiAKKworSGVyZSB0aGUgdW5tYXAgY29tbWFuZCB3aWxsIG5vdCB3b3JrLCBiZWNhdXNlIGl0IHRyaWVzIHRvIHVubWFwICIsYWIgIi4gIFRoaXMKK2RvZXMgbm90IGV4aXN0IGFzIGEgbWFwcGVkIHNlcXVlbmNlLiAgQW4gZXJyb3Igd2lsbCBiZSBpc3N1ZWQsIHdoaWNoIGlzIHZlcnkKK2hhcmQgdG8gaWRlbnRpZnksIGJlY2F1c2UgdGhlIGVuZGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpbiAiOnVubWFwICxhYiAiIGlzCitub3QgdmlzaWJsZS4KKworQW5kIHRoaXMgaXMgdGhlIHNhbWUgYXMgd2hhdCBoYXBwZW5zIHdoZW4gb25lIHVzZXMgYSBjb21tZW50IGFmdGVyIGFuICd1bm1hcCcKK2NvbW1hbmQ6ID4KKworCTp1bm1hcCAsYWIgICAgICIgY29tbWVudAorCitIZXJlIHRoZSBjb21tZW50IHBhcnQgd2lsbCBiZSBpZ25vcmVkLiAgSG93ZXZlciwgVmltIHdpbGwgdHJ5IHRvIHVubWFwCisnLGFiICAgICAnLCB3aGljaCBkb2VzIG5vdCBleGlzdC4gIFJld3JpdGUgaXQgYXM6ID4KKworCTp1bm1hcCAsYWJ8ICAgICIgY29tbWVudAorCisKK1JFU1RPUklORyBUSEUgVklFVworCitTb21ldGltZXMgeW91IHdhbnQgdG8gbWFrZSBhIGNoYW5nZSBhbmQgZ28gYmFjayB0byB3aGVyZSBjdXJzb3Igd2FzLgorUmVzdG9yaW5nIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiB3b3VsZCBhbHNvIGJlIG5pY2UsIHNvIHRoYXQgdGhlIHNhbWUgbGluZQorYXBwZWFycyBhdCB0aGUgdG9wIG9mIHRoZSB3aW5kb3cuCisgICBUaGlzIGV4YW1wbGUgeWFua3MgdGhlIGN1cnJlbnQgbGluZSwgcHV0cyBpdCBhYm92ZSB0aGUgZmlyc3QgbGluZSBpbiB0aGUKK2ZpbGUgYW5kIHRoZW4gcmVzdG9yZXMgdGhlIHZpZXc6ID4KKworCW1hcCAscCBtYSJhWUhtYmdnImFQYGJ6dGBhCisKK1doYXQgdGhpcyBkb2VzOiA+CisJbWEiYVlIbWJnZyJhUGBienRgYQorPAltYQkJCXNldCBtYXJrIGEgYXQgY3Vyc29yIHBvc2l0aW9uCisJICAiYVkJCQl5YW5rIGN1cnJlbnQgbGluZSBpbnRvIHJlZ2lzdGVyIGEKKwkgICAgIEhtYgkJZ28gdG8gdG9wIGxpbmUgaW4gd2luZG93IGFuZCBzZXQgbWFyayBiIHRoZXJlCisJCWdnCQlnbyB0byBmaXJzdCBsaW5lIGluIGZpbGUKKwkJICAiYVAJCXB1dCB0aGUgeWFua2VkIGxpbmUgYWJvdmUgaXQKKwkJICAgICBgYgkJZ28gYmFjayB0byB0b3AgbGluZSBpbiBkaXNwbGF5CisJCSAgICAgICB6dAlwb3NpdGlvbiB0aGUgdGV4dCBpbiB0aGUgd2luZG93IGFzIGJlZm9yZQorCQkJIGBhCWdvIGJhY2sgdG8gc2F2ZWQgY3Vyc29yIHBvc2l0aW9uCisKKworUEFDS0FHSU5HCisKK1RvIGF2b2lkIHlvdXIgZnVuY3Rpb24gbmFtZXMgdG8gaW50ZXJmZXJlIHdpdGggZnVuY3Rpb25zIHRoYXQgeW91IGdldCBmcm9tCitvdGhlcnMsIHVzZSB0aGlzIHNjaGVtZToKKy0gUHJlcGVuZCBhIHVuaXF1ZSBzdHJpbmcgYmVmb3JlIGVhY2ggZnVuY3Rpb24gbmFtZS4gIEkgb2Z0ZW4gdXNlIGFuCisgIGFiYnJldmlhdGlvbi4gIEZvciBleGFtcGxlLCAiT1dfIiBpcyB1c2VkIGZvciB0aGUgb3B0aW9uIHdpbmRvdyBmdW5jdGlvbnMuCistIFB1dCB0aGUgZGVmaW5pdGlvbiBvZiB5b3VyIGZ1bmN0aW9ucyB0b2dldGhlciBpbiBhIGZpbGUuICBTZXQgYSBnbG9iYWwKKyAgdmFyaWFibGUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZnVuY3Rpb25zIGhhdmUgYmVlbiBsb2FkZWQuICBXaGVuIHNvdXJjaW5nIHRoZQorICBmaWxlIGFnYWluLCBmaXJzdCB1bmxvYWQgdGhlIGZ1bmN0aW9ucy4KK0V4YW1wbGU6ID4KKworCSIgVGhpcyBpcyB0aGUgWFhYIHBhY2thZ2UKKworCWlmIGV4aXN0cygiWFhYX2xvYWRlZCIpCisJICBkZWxmdW4gWFhYX29uZQorCSAgZGVsZnVuIFhYWF90d28KKwllbmRpZgorCisJZnVuY3Rpb24gWFhYX29uZShhKQorCQkuLi4gYm9keSBvZiBmdW5jdGlvbiAuLi4KKwllbmRmdW4KKworCWZ1bmN0aW9uIFhYWF90d28oYikKKwkJLi4uIGJvZHkgb2YgZnVuY3Rpb24gLi4uCisJZW5kZnVuCisKKwlsZXQgWFhYX2xvYWRlZCA9IDEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDEuMTAqCVdyaXRpbmcgYSBwbHVnaW4JCQkJKndyaXRlLXBsdWdpbioKKworWW91IGNhbiB3cml0ZSBhIFZpbSBzY3JpcHQgaW4gc3VjaCBhIHdheSB0aGF0IG1hbnkgcGVvcGxlIGNhbiB1c2UgaXQuICBUaGlzIGlzCitjYWxsZWQgYSBwbHVnaW4uICBWaW0gdXNlcnMgY2FuIGRyb3AgeW91ciBzY3JpcHQgaW4gdGhlaXIgcGx1Z2luIGRpcmVjdG9yeSBhbmQKK3VzZSBpdHMgZmVhdHVyZXMgcmlnaHQgYXdheSB8YWRkLXBsdWdpbnwuCisKK1RoZXJlIGFyZSBhY3R1YWxseSB0d28gdHlwZXMgb2YgcGx1Z2luczoKKworICBnbG9iYWwgcGx1Z2luczogRm9yIGFsbCB0eXBlcyBvZiBmaWxlcy4KK2ZpbGV0eXBlIHBsdWdpbnM6IE9ubHkgZm9yIGZpbGVzIG9mIGEgc3BlY2lmaWMgdHlwZS4KKworSW4gdGhpcyBzZWN0aW9uIHRoZSBmaXJzdCB0eXBlIGlzIGV4cGxhaW5lZC4gIE1vc3QgaXRlbXMgYXJlIGFsc28gcmVsZXZhbnQgZm9yCit3cml0aW5nIGZpbGV0eXBlIHBsdWdpbnMuICBUaGUgc3BlY2lmaWNzIGZvciBmaWxldHlwZSBwbHVnaW5zIGFyZSBpbiB0aGUgbmV4dAorc2VjdGlvbiB8d3JpdGUtZmlsZXR5cGUtcGx1Z2lufC4KKworCitOQU1FCisKK0ZpcnN0IG9mIGFsbCB5b3UgbXVzdCBjaG9vc2UgYSBuYW1lIGZvciB5b3VyIHBsdWdpbi4gIFRoZSBmZWF0dXJlcyBwcm92aWRlZAorYnkgdGhlIHBsdWdpbiBzaG91bGQgYmUgY2xlYXIgZnJvbSBpdHMgbmFtZS4gIEFuZCBpdCBzaG91bGQgYmUgdW5saWtlbHkgdGhhdAorc29tZW9uZSBlbHNlIHdyaXRlcyBhIHBsdWdpbiB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IHdoaWNoIGRvZXMgc29tZXRoaW5nCitkaWZmZXJlbnQuICBBbmQgcGxlYXNlIGxpbWl0IHRoZSBuYW1lIHRvIDggY2hhcmFjdGVycywgdG8gYXZvaWQgcHJvYmxlbXMgb24KK29sZCBXaW5kb3dzIHN5c3RlbXMuCisKK0Egc2NyaXB0IHRoYXQgY29ycmVjdHMgdHlwaW5nIG1pc3Rha2VzIGNvdWxkIGJlIGNhbGxlZCAidHlwZWNvcnIudmltIi4gIFdlCit3aWxsIHVzZSBpdCBoZXJlIGFzIGFuIGV4YW1wbGUuCisKK0ZvciB0aGUgcGx1Z2luIHRvIHdvcmsgZm9yIGV2ZXJ5Ym9keSwgaXQgc2hvdWxkIGZvbGxvdyBhIGZldyBndWlkZWxpbmVzLiAgVGhpcword2lsbCBiZSBleHBsYWluZWQgc3RlcC1ieS1zdGVwLiAgVGhlIGNvbXBsZXRlIGV4YW1wbGUgcGx1Z2luIGlzIGF0IHRoZSBlbmQuCisKKworQk9EWQorCitMZXQncyBzdGFydCB3aXRoIHRoZSBib2R5IG9mIHRoZSBwbHVnaW4sIHRoZSBsaW5lcyB0aGF0IGRvIHRoZSBhY3R1YWwgd29yazogPgorCisgMTQJaWFiYnJldiB0ZWggdGhlCisgMTUJaWFiYnJldiBvdGVociBvdGhlcgorIDE2CWlhYmJyZXYgd25hdCB3YW50CisgMTcJaWFiYnJldiBzeW5jaHJvbmlzYXRpb24KKyAxOAkJXCBzeW5jaHJvbml6YXRpb24KKyAxOQlsZXQgczpjb3VudCA9IDQKKworVGhlIGFjdHVhbCBsaXN0IHNob3VsZCBiZSBtdWNoIGxvbmdlciwgb2YgY291cnNlLgorCitUaGUgbGluZSBudW1iZXJzIGhhdmUgb25seSBiZWVuIGFkZGVkIHRvIGV4cGxhaW4gYSBmZXcgdGhpbmdzLCBkb24ndCBwdXQgdGhlbQoraW4geW91ciBwbHVnaW4gZmlsZSEKKworCitIRUFERVIKKworWW91IHdpbGwgcHJvYmFibHkgYWRkIG5ldyBjb3JyZWN0aW9ucyB0byB0aGUgcGx1Z2luIGFuZCBzb29uIGhhdmUgc2V2ZXJhbAordmVyc2lvbnMgbGF5aW5nIGFyb3VuZC4gIEFuZCB3aGVuIGRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHBlb3BsZSB3aWxsIHdhbnQgdG8KK2tub3cgd2hvIHdyb3RlIHRoaXMgd29uZGVyZnVsIHBsdWdpbiBhbmQgd2hlcmUgdGhleSBjYW4gc2VuZCByZW1hcmtzLgorVGhlcmVmb3JlLCBwdXQgYSBoZWFkZXIgYXQgdGhlIHRvcCBvZiB5b3VyIHBsdWdpbjogPgorCisgIDEJIiBWaW0gZ2xvYmFsIHBsdWdpbiBmb3IgY29ycmVjdGluZyB0eXBpbmcgbWlzdGFrZXMKKyAgMgkiIExhc3QgQ2hhbmdlOgkyMDAwIE9jdCAxNQorICAzCSIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKworQWJvdXQgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmc6IFNpbmNlIHBsdWdpbnMgYXJlIHZlcnkgdXNlZnVsIGFuZCBpdCdzIGhhcmRseQord29ydGggcmVzdHJpY3RpbmcgdGhlaXIgZGlzdHJpYnV0aW9uLCBwbGVhc2UgY29uc2lkZXIgbWFraW5nIHlvdXIgcGx1Z2luCitlaXRoZXIgcHVibGljIGRvbWFpbiBvciB1c2UgdGhlIFZpbSB8bGljZW5zZXwuICBBIHNob3J0IG5vdGUgYWJvdXQgdGhpcyBuZWFyCit0aGUgdG9wIG9mIHRoZSBwbHVnaW4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuICBFeGFtcGxlOiA+CisKKyAgNAkiIExpY2Vuc2U6CVRoaXMgZmlsZSBpcyBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisKKworTElORSBDT05USU5VQVRJT04sIEFWT0lESU5HIFNJREUgRUZGRUNUUwkJKnVzZS1jcG8tc2F2ZSoKKworSW4gbGluZSAxOCBhYm92ZSwgdGhlIGxpbmUtY29udGludWF0aW9uIG1lY2hhbmlzbSBpcyB1c2VkIHxsaW5lLWNvbnRpbnVhdGlvbnwuCitVc2VycyB3aXRoICdjb21wYXRpYmxlJyBzZXQgd2lsbCBydW4gaW50byB0cm91YmxlIGhlcmUsIHRoZXkgd2lsbCBnZXQgYW4gZXJyb3IKK21lc3NhZ2UuICBXZSBjYW4ndCBqdXN0IHJlc2V0ICdjb21wYXRpYmxlJywgYmVjYXVzZSB0aGF0IGhhcyBhIGxvdCBvZiBzaWRlCitlZmZlY3RzLiAgVG8gYXZvaWQgdGhpcywgd2Ugd2lsbCBzZXQgdGhlICdjcG9wdGlvbnMnIG9wdGlvbiB0byBpdHMgVmltIGRlZmF1bHQKK3ZhbHVlIGFuZCByZXN0b3JlIGl0IGxhdGVyLiAgVGhhdCB3aWxsIGFsbG93IHRoZSB1c2Ugb2YgbGluZS1jb250aW51YXRpb24gYW5kCittYWtlIHRoZSBzY3JpcHQgd29yayBmb3IgbW9zdCBwZW9wbGUuICBJdCBpcyBkb25lIGxpa2UgdGhpczogPgorCisgMTEJbGV0IHM6c2F2ZV9jcG8gPSAmY3BvCisgMTIJc2V0IGNwbyZ2aW0KKyAuLgorIDQyCWxldCAmY3BvID0gczpzYXZlX2NwbworCitXZSBmaXJzdCBzdG9yZSB0aGUgb2xkIHZhbHVlIG9mICdjcG9wdGlvbnMnIGluIHRoZSBzOnNhdmVfY3BvIHZhcmlhYmxlLiAgQXQKK3RoZSBlbmQgb2YgdGhlIHBsdWdpbiB0aGlzIHZhbHVlIGlzIHJlc3RvcmVkLgorCitOb3RpY2UgdGhhdCBhIHNjcmlwdC1sb2NhbCB2YXJpYWJsZSBpcyB1c2VkIHxzOnZhcnwuICBBIGdsb2JhbCB2YXJpYWJsZSBjb3VsZAorYWxyZWFkeSBiZSBpbiB1c2UgZm9yIHNvbWV0aGluZyBlbHNlLiAgQWx3YXlzIHVzZSBzY3JpcHQtbG9jYWwgdmFyaWFibGVzIGZvcgordGhpbmdzIHRoYXQgYXJlIG9ubHkgdXNlZCBpbiB0aGUgc2NyaXB0LgorCisKK05PVCBMT0FESU5HCisKK0l0J3MgcG9zc2libGUgdGhhdCBhIHVzZXIgZG9lc24ndCBhbHdheXMgd2FudCB0byBsb2FkIHRoaXMgcGx1Z2luLiAgT3IgdGhlCitzeXN0ZW0gYWRtaW5pc3RyYXRvciBoYXMgZHJvcHBlZCBpdCBpbiB0aGUgc3lzdGVtLXdpZGUgcGx1Z2luIGRpcmVjdG9yeSwgYnV0IGEKK3VzZXIgaGFzIGhpcyBvd24gcGx1Z2luIGhlIHdhbnRzIHRvIHVzZS4gIFRoZW4gdGhlIHVzZXIgbXVzdCBoYXZlIGEgY2hhbmNlIHRvCitkaXNhYmxlIGxvYWRpbmcgdGhpcyBzcGVjaWZpYyBwbHVnaW4uICBUaGlzIHdpbGwgbWFrZSBpdCBwb3NzaWJsZTogPgorCisgIDYJaWYgZXhpc3RzKCJsb2FkZWRfdHlwZWNvcnIiKQorICA3CSAgZmluaXNoCisgIDgJZW5kaWYKKyAgOQlsZXQgbG9hZGVkX3R5cGVjb3JyID0gMQorCitUaGlzIGFsc28gYXZvaWRzIHRoYXQgd2hlbiB0aGUgc2NyaXB0IGlzIGxvYWRlZCB0d2ljZSBpdCB3b3VsZCBjYXVzZSBlcnJvcgorbWVzc2FnZXMgZm9yIHJlZGVmaW5pbmcgZnVuY3Rpb25zIGFuZCBjYXVzZSB0cm91YmxlIGZvciBhdXRvY29tbWFuZHMgdGhhdCBhcmUKK2FkZGVkIHR3aWNlLgorCisKK01BUFBJTkcKKworTm93IGxldCdzIG1ha2UgdGhlIHBsdWdpbiBtb3JlIGludGVyZXN0aW5nOiBXZSB3aWxsIGFkZCBhIG1hcHBpbmcgdGhhdCBhZGRzIGEKK2NvcnJlY3Rpb24gZm9yIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuICBXZSBjb3VsZCBqdXN0IHBpY2sgYSBrZXkgc2VxdWVuY2UKK2ZvciB0aGlzIG1hcHBpbmcsIGJ1dCB0aGUgdXNlciBtaWdodCBhbHJlYWR5IHVzZSBpdCBmb3Igc29tZXRoaW5nIGVsc2UuICBUbworYWxsb3cgdGhlIHVzZXIgdG8gZGVmaW5lIHdoaWNoIGtleXMgYSBtYXBwaW5nIGluIGEgcGx1Z2luIHVzZXMsIHRoZSA8TGVhZGVyPgoraXRlbSBjYW4gYmUgdXNlZDogPgorCisgMjIJICBtYXAgPHVuaXF1ZT4gPExlYWRlcj5hICA8UGx1Zz5UeXBlY29yckFkZAorCitUaGUgIjxQbHVnPlR5cGVjb3JyQWRkIiB0aGluZyB3aWxsIGRvIHRoZSB3b3JrLCBtb3JlIGFib3V0IHRoYXQgZnVydGhlciBvbi4KKworVGhlIHVzZXIgY2FuIHNldCB0aGUgIm1hcGxlYWRlciIgdmFyaWFibGUgdG8gdGhlIGtleSBzZXF1ZW5jZSB0aGF0IGhlIHdhbnRzCit0aGlzIG1hcHBpbmcgdG8gc3RhcnQgd2l0aC4gIFRodXMgaWYgdGhlIHVzZXIgaGFzIGRvbmU6ID4KKworCWxldCBtYXBsZWFkZXIgPSAiXyIKKwordGhlIG1hcHBpbmcgd2lsbCBkZWZpbmUgIl9hIi4gIElmIHRoZSB1c2VyIGRpZG4ndCBkbyB0aGlzLCB0aGUgZGVmYXVsdCB2YWx1ZQord2lsbCBiZSB1c2VkLCB3aGljaCBpcyBhIGJhY2tzbGFzaC4gIFRoZW4gYSBtYXAgZm9yICJcYSIgd2lsbCBiZSBkZWZpbmVkLgorCitOb3RlIHRoYXQgPHVuaXF1ZT4gaXMgdXNlZCwgdGhpcyB3aWxsIGNhdXNlIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIG1hcHBpbmcKK2FscmVhZHkgaGFwcGVuZWQgdG8gZXhpc3QuIHw6bWFwLTx1bmlxdWU+fAorCitCdXQgd2hhdCBpZiB0aGUgdXNlciB3YW50cyB0byBkZWZpbmUgaGlzIG93biBrZXkgc2VxdWVuY2U/ICBXZSBjYW4gYWxsb3cgdGhhdAord2l0aCB0aGlzIG1lY2hhbmlzbTogPgorCisgMjEJaWYgIWhhc21hcHRvKCc8UGx1Zz5UeXBlY29yckFkZCcpCisgMjIJICBtYXAgPHVuaXF1ZT4gPExlYWRlcj5hICA8UGx1Zz5UeXBlY29yckFkZAorIDIzCWVuZGlmCisKK1RoaXMgY2hlY2tzIGlmIGEgbWFwcGluZyB0byAiPFBsdWc+VHlwZWNvcnJBZGQiIGFscmVhZHkgZXhpc3RzLCBhbmQgb25seQorZGVmaW5lcyB0aGUgbWFwcGluZyBmcm9tICI8TGVhZGVyPmEiIGlmIGl0IGRvZXNuJ3QuICBUaGUgdXNlciB0aGVuIGhhcyBhCitjaGFuY2Ugb2YgcHV0dGluZyB0aGlzIGluIGhpcyB2aW1yYyBmaWxlOiA+CisKKwltYXAgLGMgIDxQbHVnPlR5cGVjb3JyQWRkCisKK1RoZW4gdGhlIG1hcHBlZCBrZXkgc2VxdWVuY2Ugd2lsbCBiZSAiLGMiIGluc3RlYWQgb2YgIl9hIiBvciAiXGEiLgorCisKK1BJRUNFUworCitJZiBhIHNjcmlwdCBnZXRzIGxvbmdlciwgeW91IG9mdGVuIHdhbnQgdG8gYnJlYWsgdXAgdGhlIHdvcmsgaW4gcGllY2VzLiAgWW91CitjYW4gdXNlIGZ1bmN0aW9ucyBvciBtYXBwaW5ncyBmb3IgdGhpcy4gIEJ1dCB5b3UgZG9uJ3Qgd2FudCB0aGVzZSBmdW5jdGlvbnMKK2FuZCBtYXBwaW5ncyB0byBpbnRlcmZlcmUgd2l0aCB0aGUgb25lcyBmcm9tIG90aGVyIHNjcmlwdHMuICBGb3IgZXhhbXBsZSwgeW91Citjb3VsZCBkZWZpbmUgYSBmdW5jdGlvbiBBZGQoKSwgYnV0IGFub3RoZXIgc2NyaXB0IGNvdWxkIHRyeSB0byBkZWZpbmUgdGhlIHNhbWUKK2Z1bmN0aW9uLiAgVG8gYXZvaWQgdGhpcywgd2UgZGVmaW5lIHRoZSBmdW5jdGlvbiBsb2NhbCB0byB0aGUgc2NyaXB0IGJ5CitwcmVwZW5kaW5nIGl0IHdpdGggInM6Ii4KKworV2Ugd2lsbCBkZWZpbmUgYSBmdW5jdGlvbiB0aGF0IGFkZHMgYSBuZXcgdHlwaW5nIGNvcnJlY3Rpb246ID4KKworIDMwCWZ1bmN0aW9uIHM6QWRkKGZyb20sIGNvcnJlY3QpCisgMzEJICBsZXQgdG8gPSBpbnB1dCgidHlwZSB0aGUgY29ycmVjdGlvbiBmb3IgIiAuIGE6ZnJvbSAuICI6ICIpCisgMzIJICBleGUgIjppYWJicmV2ICIgLiBhOmZyb20gLiAiICIgLiB0bworIC4uCisgMzYJZW5kZnVuY3Rpb24KKworTm93IHdlIGNhbiBjYWxsIHRoZSBmdW5jdGlvbiBzOkFkZCgpIGZyb20gd2l0aGluIHRoaXMgc2NyaXB0LiAgSWYgYW5vdGhlcgorc2NyaXB0IGFsc28gZGVmaW5lcyBzOkFkZCgpLCBpdCB3aWxsIGJlIGxvY2FsIHRvIHRoYXQgc2NyaXB0IGFuZCBjYW4gb25seQorYmUgY2FsbGVkIGZyb20gdGhlIHNjcmlwdCBpdCB3YXMgZGVmaW5lZCBpbi4gIFRoZXJlIGNhbiBhbHNvIGJlIGEgZ2xvYmFsIEFkZCgpCitmdW5jdGlvbiAod2l0aG91dCB0aGUgInM6IiksIHdoaWNoIGlzIGFnYWluIGFub3RoZXIgZnVuY3Rpb24uCisKKzxTSUQ+IGNhbiBiZSB1c2VkIHdpdGggbWFwcGluZ3MuICBJdCBnZW5lcmF0ZXMgYSBzY3JpcHQgSUQsIHdoaWNoIGlkZW50aWZpZXMKK3RoZSBjdXJyZW50IHNjcmlwdC4gIEluIG91ciB0eXBpbmcgY29ycmVjdGlvbiBwbHVnaW4gd2UgdXNlIGl0IGxpa2UgdGhpczogPgorCisgMjQJbm9yZW1hcCA8dW5pcXVlPiA8c2NyaXB0PiA8UGx1Zz5UeXBlY29yckFkZCAgPFNJRD5BZGQKKyAuLgorIDI4CW5vcmVtYXAgPFNJRD5BZGQgIDpjYWxsIDxTSUQ+QWRkKGV4cGFuZCgiPGN3b3JkPiIpLCAxKTxDUj4KKworVGh1cyB3aGVuIGEgdXNlciB0eXBlcyAiXGEiLCB0aGlzIHNlcXVlbmNlIGlzIGludm9rZWQ6ID4KKworCVxhICAtPiAgPFBsdWc+VHlwZWNvcnJBZGQgIC0+ICA8U0lEPkFkZCAgLT4gIDpjYWxsIDxTSUQ+QWRkKCkKKworSWYgYW5vdGhlciBzY3JpcHQgd291bGQgYWxzbyBtYXAgPFNJRD5BZGQsIGl0IHdvdWxkIGdldCBhbm90aGVyIHNjcmlwdCBJRCBhbmQKK3RodXMgZGVmaW5lIGFub3RoZXIgbWFwcGluZy4KKworTm90ZSB0aGF0IGluc3RlYWQgb2YgczpBZGQoKSB3ZSB1c2UgPFNJRD5BZGQoKSBoZXJlLiAgVGhhdCBpcyBiZWNhdXNlIHRoZQorbWFwcGluZyBpcyB0eXBlZCBieSB0aGUgdXNlciwgdGh1cyBvdXRzaWRlIG9mIHRoZSBzY3JpcHQuICBUaGUgPFNJRD4gaXMKK3RyYW5zbGF0ZWQgdG8gdGhlIHNjcmlwdCBJRCwgc28gdGhhdCBWaW0ga25vd3MgaW4gd2hpY2ggc2NyaXB0IHRvIGxvb2sgZm9yCit0aGUgQWRkKCkgZnVuY3Rpb24uCisKK1RoaXMgaXMgYSBiaXQgY29tcGxpY2F0ZWQsIGJ1dCBpdCdzIHJlcXVpcmVkIGZvciB0aGUgcGx1Z2luIHRvIHdvcmsgdG9nZXRoZXIKK3dpdGggb3RoZXIgcGx1Z2lucy4gIFRoZSBiYXNpYyBydWxlIGlzIHRoYXQgeW91IHVzZSA8U0lEPkFkZCgpIGluIG1hcHBpbmdzIGFuZAorczpBZGQoKSBpbiBvdGhlciBwbGFjZXMgKHRoZSBzY3JpcHQgaXRzZWxmLCBhdXRvY29tbWFuZHMsIHVzZXIgY29tbWFuZHMpLgorCitXZSBjYW4gYWxzbyBhZGQgYSBtZW51IGVudHJ5IHRvIGRvIHRoZSBzYW1lIGFzIHRoZSBtYXBwaW5nOiA+CisKKyAyNglub3JlbWVudSA8c2NyaXB0PiBQbHVnaW4uQWRkXCBDb3JyZWN0aW9uICAgICAgPFNJRD5BZGQKKworVGhlICJQbHVnaW4iIG1lbnUgaXMgcmVjb21tZW5kZWQgZm9yIGFkZGluZyBtZW51IGl0ZW1zIGZvciBwbHVnaW5zLiAgSW4gdGhpcworY2FzZSBvbmx5IG9uZSBpdGVtIGlzIHVzZWQuICBXaGVuIGFkZGluZyBtb3JlIGl0ZW1zLCBjcmVhdGluZyBhIHN1Ym1lbnUgaXMKK3JlY29tbWVuZGVkLiAgRm9yIGV4YW1wbGUsICJQbHVnaW4uQ1ZTIiBjb3VsZCBiZSB1c2VkIGZvciBhIHBsdWdpbiB0aGF0IG9mZmVycworQ1ZTIG9wZXJhdGlvbnMgIlBsdWdpbi5DVlMuY2hlY2tpbiIsICJQbHVnaW4uQ1ZTLmNoZWNrb3V0IiwgZXRjLgorCitOb3RlIHRoYXQgaW4gbGluZSAyOCAiOm5vcmVtYXAiIGlzIHVzZWQgdG8gYXZvaWQgdGhhdCBhbnkgb3RoZXIgbWFwcGluZ3MgY2F1c2UKK3Ryb3VibGUuICBTb21lb25lIG1heSBoYXZlIHJlbWFwcGVkICI6Y2FsbCIsIGZvciBleGFtcGxlLiAgSW4gbGluZSAyNCB3ZSBhbHNvCit1c2UgIjpub3JlbWFwIiwgYnV0IHdlIGRvIHdhbnQgIjxTSUQ+QWRkIiB0byBiZSByZW1hcHBlZC4gIFRoaXMgaXMgd2h5CisiPHNjcmlwdD4iIGlzIHVzZWQgaGVyZS4gIFRoaXMgb25seSBhbGxvd3MgbWFwcGluZ3Mgd2hpY2ggYXJlIGxvY2FsIHRvIHRoZQorc2NyaXB0LiB8Om1hcC08c2NyaXB0PnwgIFRoZSBzYW1lIGlzIGRvbmUgaW4gbGluZSAyNiBmb3IgIjpub3JlbWVudSIuCit8Om1lbnUtPHNjcmlwdD58CisKKworPFNJRD4gQU5EIDxQbHVnPgkJCQkJKnVzaW5nLTxQbHVnPioKKworQm90aCA8U0lEPiBhbmQgPFBsdWc+IGFyZSB1c2VkIHRvIGF2b2lkIHRoYXQgbWFwcGluZ3Mgb2YgdHlwZWQga2V5cyBpbnRlcmZlcmUKK3dpdGggbWFwcGluZ3MgdGhhdCBhcmUgb25seSB0byBiZSB1c2VkIGZyb20gb3RoZXIgbWFwcGluZ3MuICBOb3RlIHRoZQorZGlmZmVyZW5jZSBiZXR3ZWVuIHVzaW5nIDxTSUQ+IGFuZCA8UGx1Zz46CisKKzxQbHVnPglpcyB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIHNjcmlwdC4gIEl0IGlzIHVzZWQgZm9yIG1hcHBpbmdzIHdoaWNoIHRoZQorCXVzZXIgbWlnaHQgd2FudCB0byBtYXAgYSBrZXkgc2VxdWVuY2UgdG8uICA8UGx1Zz4gaXMgYSBzcGVjaWFsIGNvZGUKKwl0aGF0IGEgdHlwZWQga2V5IHdpbGwgbmV2ZXIgcHJvZHVjZS4KKwlUbyBtYWtlIGl0IHZlcnkgdW5saWtlbHkgdGhhdCBvdGhlciBwbHVnaW5zIHVzZSB0aGUgc2FtZSBzZXF1ZW5jZSBvZgorCWNoYXJhY3RlcnMsIHVzZSB0aGlzIHN0cnVjdHVyZTogPFBsdWc+IHNjcmlwdG5hbWUgbWFwbmFtZQorCUluIG91ciBleGFtcGxlIHRoZSBzY3JpcHRuYW1lIGlzICJUeXBlY29yciIgYW5kIHRoZSBtYXBuYW1lIGlzICJBZGQiLgorCVRoaXMgcmVzdWx0cyBpbiAiPFBsdWc+VHlwZWNvcnJBZGQiLiAgT25seSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCisJc2NyaXB0bmFtZSBhbmQgbWFwbmFtZSBpcyB1cHBlcmNhc2UsIHNvIHRoYXQgd2UgY2FuIHNlZSB3aGVyZSBtYXBuYW1lCisJc3RhcnRzLgorCis8U0lEPglpcyB0aGUgc2NyaXB0IElELCBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIHNjcmlwdC4KKwlJbnRlcm5hbGx5IFZpbSB0cmFuc2xhdGVzIDxTSUQ+IHRvICI8U05SPjEyM18iLCB3aGVyZSAiMTIzIiBjYW4gYmUgYW55CisJbnVtYmVyLiAgVGh1cyBhIGZ1bmN0aW9uICI8U0lEPkFkZCgpIiB3aWxsIGhhdmUgYSBuYW1lICI8U05SPjExX0FkZCgpIgorCWluIG9uZSBzY3JpcHQsIGFuZCAiPFNOUj4yMl9BZGQoKSIgaW4gYW5vdGhlci4gIFlvdSBjYW4gc2VlIHRoaXMgaWYKKwl5b3UgdXNlIHRoZSAiOmZ1bmN0aW9uIiBjb21tYW5kIHRvIGdldCBhIGxpc3Qgb2YgZnVuY3Rpb25zLiAgVGhlCisJdHJhbnNsYXRpb24gb2YgPFNJRD4gaW4gbWFwcGluZ3MgaXMgZXhhY3RseSB0aGUgc2FtZSwgdGhhdCdzIGhvdyB5b3UKKwljYW4gY2FsbCBhIHNjcmlwdC1sb2NhbCBmdW5jdGlvbiBmcm9tIGEgbWFwcGluZy4KKworCitVU0VSIENPTU1BTkQKKworTm93IGxldCdzIGFkZCBhIHVzZXIgY29tbWFuZCB0byBhZGQgYSBjb3JyZWN0aW9uOiA+CisKKyAzOAlpZiAhZXhpc3RzKCI6Q29ycmVjdCIpCisgMzkJICBjb21tYW5kIC1uYXJncz0xICBDb3JyZWN0ICA6Y2FsbCBzOkFkZCg8cS1hcmdzPiwgMCkKKyA0MAllbmRpZgorCitUaGUgdXNlciBjb21tYW5kIGlzIGRlZmluZWQgb25seSBpZiBubyBjb21tYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5CitleGlzdHMuICBPdGhlcndpc2Ugd2Ugd291bGQgZ2V0IGFuIGVycm9yIGhlcmUuICBPdmVycmlkaW5nIHRoZSBleGlzdGluZyB1c2VyCitjb21tYW5kIHdpdGggIjpjb21tYW5kISIgaXMgbm90IGEgZ29vZCBpZGVhLCB0aGlzIHdvdWxkIHByb2JhYmx5IG1ha2UgdGhlIHVzZXIKK3dvbmRlciB3aHkgdGhlIGNvbW1hbmQgaGUgZGVmaW5lZCBoaW1zZWxmIGRvZXNuJ3Qgd29yay4gIHw6Y29tbWFuZHwKKworCitTQ1JJUFQgVkFSSUFCTEVTCisKK1doZW4gYSB2YXJpYWJsZSBzdGFydHMgd2l0aCAiczoiIGl0IGlzIGEgc2NyaXB0IHZhcmlhYmxlLiAgSXQgY2FuIG9ubHkgYmUgdXNlZAoraW5zaWRlIGEgc2NyaXB0LiAgT3V0c2lkZSB0aGUgc2NyaXB0IGl0J3Mgbm90IHZpc2libGUuICBUaGlzIGF2b2lkcyB0cm91YmxlCit3aXRoIHVzaW5nIHRoZSBzYW1lIHZhcmlhYmxlIG5hbWUgaW4gZGlmZmVyZW50IHNjcmlwdHMuICBUaGUgdmFyaWFibGVzIHdpbGwgYmUKK2tlcHQgYXMgbG9uZyBhcyBWaW0gaXMgcnVubmluZy4gIEFuZCB0aGUgc2FtZSB2YXJpYWJsZXMgYXJlIHVzZWQgd2hlbiBzb3VyY2luZwordGhlIHNhbWUgc2NyaXB0IGFnYWluLiB8czp2YXJ8CisKK1RoZSBmdW4gaXMgdGhhdCB0aGVzZSB2YXJpYWJsZXMgY2FuIGFsc28gYmUgdXNlZCBpbiBmdW5jdGlvbnMsIGF1dG9jb21tYW5kcworYW5kIHVzZXIgY29tbWFuZHMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc2NyaXB0LiAgSW4gb3VyIGV4YW1wbGUgd2UgY2FuIGFkZAorYSBmZXcgbGluZXMgdG8gY291bnQgdGhlIG51bWJlciBvZiBjb3JyZWN0aW9uczogPgorCisgMTkJbGV0IHM6Y291bnQgPSA0CisgLi4KKyAzMAlmdW5jdGlvbiBzOkFkZChmcm9tLCBjb3JyZWN0KQorIC4uCisgMzQJICBsZXQgczpjb3VudCA9IHM6Y291bnQgKyAxCisgMzUJICBlY2hvIHM6Y291bnQgLiAiIGNvcnJlY3Rpb25zIG5vdyIKKyAzNgllbmRmdW5jdGlvbgorCitGaXJzdCBzOmNvdW50IGlzIGluaXRpYWxpemVkIHRvIDQgaW4gdGhlIHNjcmlwdCBpdHNlbGYuICBXaGVuIGxhdGVyIHRoZQorczpBZGQoKSBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IGluY3JlbWVudHMgczpjb3VudC4gIEl0IGRvZXNuJ3QgbWF0dGVyIGZyb20KK3doZXJlIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkLCBzaW5jZSBpdCBoYXMgYmVlbiBkZWZpbmVkIGluIHRoZSBzY3JpcHQsIGl0Cit3aWxsIHVzZSB0aGUgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhpcyBzY3JpcHQuCisKKworVEhFIFJFU1VMVAorCitIZXJlIGlzIHRoZSByZXN1bHRpbmcgY29tcGxldGUgZXhhbXBsZTogPgorCisgIDEJIiBWaW0gZ2xvYmFsIHBsdWdpbiBmb3IgY29ycmVjdGluZyB0eXBpbmcgbWlzdGFrZXMKKyAgMgkiIExhc3QgQ2hhbmdlOgkyMDAwIE9jdCAxNQorICAzCSIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyAgNAkiIExpY2Vuc2U6CVRoaXMgZmlsZSBpcyBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgIDUKKyAgNglpZiBleGlzdHMoImxvYWRlZF90eXBlY29yciIpCisgIDcJICBmaW5pc2gKKyAgOAllbmRpZgorICA5CWxldCBsb2FkZWRfdHlwZWNvcnIgPSAxCisgMTAKKyAxMQlsZXQgczpzYXZlX2NwbyA9ICZjcG8KKyAxMglzZXQgY3BvJnZpbQorIDEzCisgMTQJaWFiYnJldiB0ZWggdGhlCisgMTUJaWFiYnJldiBvdGVociBvdGhlcgorIDE2CWlhYmJyZXYgd25hdCB3YW50CisgMTcJaWFiYnJldiBzeW5jaHJvbmlzYXRpb24KKyAxOAkJXCBzeW5jaHJvbml6YXRpb24KKyAxOQlsZXQgczpjb3VudCA9IDQKKyAyMAorIDIxCWlmICFoYXNtYXB0bygnPFBsdWc+VHlwZWNvcnJBZGQnKQorIDIyCSAgbWFwIDx1bmlxdWU+IDxMZWFkZXI+YSAgPFBsdWc+VHlwZWNvcnJBZGQKKyAyMwllbmRpZgorIDI0CW5vcmVtYXAgPHVuaXF1ZT4gPHNjcmlwdD4gPFBsdWc+VHlwZWNvcnJBZGQgIDxTSUQ+QWRkCisgMjUKKyAyNglub3JlbWVudSA8c2NyaXB0PiBQbHVnaW4uQWRkXCBDb3JyZWN0aW9uICAgICAgPFNJRD5BZGQKKyAyNworIDI4CW5vcmVtYXAgPFNJRD5BZGQgIDpjYWxsIDxTSUQ+QWRkKGV4cGFuZCgiPGN3b3JkPiIpLCAxKTxDUj4KKyAyOQorIDMwCWZ1bmN0aW9uIHM6QWRkKGZyb20sIGNvcnJlY3QpCisgMzEJICBsZXQgdG8gPSBpbnB1dCgidHlwZSB0aGUgY29ycmVjdGlvbiBmb3IgIiAuIGE6ZnJvbSAuICI6ICIpCisgMzIJICBleGUgIjppYWJicmV2ICIgLiBhOmZyb20gLiAiICIgLiB0bworIDMzCSAgaWYgYTpjb3JyZWN0IHwgZXhlICJub3JtYWwgdml3c1w8Qy1SPlwiIFxiXGUiIHwgZW5kaWYKKyAzNAkgIGxldCBzOmNvdW50ID0gczpjb3VudCArIDEKKyAzNQkgIGVjaG8gczpjb3VudCAuICIgY29ycmVjdGlvbnMgbm93IgorIDM2CWVuZGZ1bmN0aW9uCisgMzcKKyAzOAlpZiAhZXhpc3RzKCI6Q29ycmVjdCIpCisgMzkJICBjb21tYW5kIC1uYXJncz0xICBDb3JyZWN0ICA6Y2FsbCBzOkFkZCg8cS1hcmdzPiwgMCkKKyA0MAllbmRpZgorIDQxCisgNDIJbGV0ICZjcG8gPSBzOnNhdmVfY3BvCisKK0xpbmUgMzMgd2Fzbid0IGV4cGxhaW5lZCB5ZXQuICBJdCBhcHBsaWVzIHRoZSBuZXcgY29ycmVjdGlvbiB0byB0aGUgd29yZCB1bmRlcgordGhlIGN1cnNvci4gIFRoZSB8Om5vcm1hbHwgY29tbWFuZCBpcyB1c2VkIHRvIHVzZSB0aGUgbmV3IGFiYnJldmlhdGlvbi4gIE5vdGUKK3RoYXQgbWFwcGluZ3MgYW5kIGFiYnJldmlhdGlvbnMgYXJlIGV4cGFuZGVkIGhlcmUsIGV2ZW4gdGhvdWdoIHRoZSBmdW5jdGlvbgord2FzIGNhbGxlZCBmcm9tIGEgbWFwcGluZyBkZWZpbmVkIHdpdGggIjpub3JlbWFwIi4KKworVXNpbmcgInVuaXgiIGZvciB0aGUgJ2ZpbGVmb3JtYXQnIG9wdGlvbiBpcyByZWNvbW1lbmRlZC4gIFRoZSBWaW0gc2NyaXB0cyB3aWxsCit0aGVuIHdvcmsgZXZlcnl3aGVyZS4gIFNjcmlwdHMgd2l0aCAnZmlsZWZvcm1hdCcgc2V0IHRvICJkb3MiIGRvIG5vdCB3b3JrIG9uCitVbml4LiAgQWxzbyBzZWUgfDpzb3VyY2VfY3JubHwuICBUbyBiZSBzdXJlIGl0IGlzIHNldCByaWdodCwgZG8gdGhpcyBiZWZvcmUKK3dyaXRpbmcgdGhlIGZpbGU6ID4KKworCTpzZXQgZmlsZWZvcm1hdD11bml4CisKKworRE9DVU1FTlRBVElPTgkJCQkJCSp3cml0ZS1sb2NhbC1oZWxwKgorCitJdCdzIGEgZ29vZCBpZGVhIHRvIGFsc28gd3JpdGUgc29tZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIHBsdWdpbi4gIEVzcGVjaWFsbHkKK3doZW4gaXRzIGJlaGF2aW9yIGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyLiAgU2VlIHxhZGQtbG9jYWwtaGVscHwgZm9yIGhvdwordGhleSBhcmUgaW5zdGFsbGVkLgorCitIZXJlIGlzIGEgc2ltcGxlIGV4YW1wbGUgZm9yIGEgcGx1Z2luIGhlbHAgZmlsZSwgY2FsbGVkICJ0eXBlY29yci50eHQiOiA+CisKKyAgMQkqdHlwZWNvcnIudHh0KglQbHVnaW4gZm9yIGNvcnJlY3RpbmcgdHlwaW5nIG1pc3Rha2VzCisgIDIKKyAgMwlJZiB5b3UgbWFrZSB0eXBpbmcgbWlzdGFrZXMsIHRoaXMgcGx1Z2luIHdpbGwgaGF2ZSB0aGVtIGNvcnJlY3RlZAorICA0CWF1dG9tYXRpY2FsbHkuCisgIDUKKyAgNglUaGVyZSBhcmUgY3VycmVudGx5IG9ubHkgYSBmZXcgY29ycmVjdGlvbnMuICBBZGQgeW91ciBvd24gaWYgeW91IGxpa2UuCisgIDcKKyAgOAlNYXBwaW5nczoKKyAgOQk8TGVhZGVyPmEgICBvciAgIDxQbHVnPlR5cGVjb3JyQWRkCisgMTAJCUFkZCBhIGNvcnJlY3Rpb24gZm9yIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuCisgMTEKKyAxMglDb21tYW5kczoKKyAxMwk6Q29ycmVjdCB7d29yZH0KKyAxNAkJQWRkIGEgY29ycmVjdGlvbiBmb3Ige3dvcmR9LgorIDE1CisgMTYJCQkJCQkJKnR5cGVjb3JyLXNldHRpbmdzKgorIDE3CVRoaXMgcGx1Z2luIGRvZXNuJ3QgaGF2ZSBhbnkgc2V0dGluZ3MuCisKK1RoZSBmaXJzdCBsaW5lIGlzIGFjdHVhbGx5IHRoZSBvbmx5IG9uZSBmb3Igd2hpY2ggdGhlIGZvcm1hdCBtYXR0ZXJzLiAgSXQgd2lsbAorYmUgZXh0cmFjdGVkIGZyb20gdGhlIGhlbHAgZmlsZSB0byBiZSBwdXQgaW4gdGhlICJMT0NBTCBBRERJVElPTlM6IiBzZWN0aW9uIG9mCitoZWxwLnR4dCB8bG9jYWwtYWRkaXRpb25zfC4gIFRoZSBmaXJzdCAiKiIgbXVzdCBiZSBpbiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZQorZmlyc3QgbGluZS4gIEFmdGVyIGFkZGluZyB5b3VyIGhlbHAgZmlsZSBkbyAiOmhlbHAiIGFuZCBjaGVjayB0aGF0IHRoZSBlbnRyaWVzCitsaW5lIHVwIG5pY2VseS4KKworWW91IGNhbiBhZGQgbW9yZSB0YWdzIGluc2lkZSAqKiBpbiB5b3VyIGhlbHAgZmlsZS4gIEJ1dCBiZSBjYXJlZnVsIG5vdCB0byB1c2UKK2V4aXN0aW5nIGhlbHAgdGFncy4gIFlvdSB3b3VsZCBwcm9iYWJseSB1c2UgdGhlIG5hbWUgb2YgeW91ciBwbHVnaW4gaW4gbW9zdCBvZgordGhlbSwgbGlrZSAidHlwZWNvcnItc2V0dGluZ3MiIGluIHRoZSBleGFtcGxlLgorCitVc2luZyByZWZlcmVuY2VzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBoZWxwIGluIHx8IGlzIHJlY29tbWVuZGVkLiAgVGhpcyBtYWtlcworaXQgZWFzeSBmb3IgdGhlIHVzZXIgdG8gZmluZCBhc3NvY2lhdGVkIGhlbHAuCisKKworRklMRVRZUEUgREVURUNUSU9OCQkJCQkqcGx1Z2luLWZpbGV0eXBlKgorCitJZiB5b3VyIGZpbGV0eXBlIGlzIG5vdCBhbHJlYWR5IGRldGVjdGVkIGJ5IFZpbSwgeW91IHNob3VsZCBjcmVhdGUgYSBmaWxldHlwZQorZGV0ZWN0aW9uIHNuaXBwZXQgaW4gYSBzZXBhcmF0ZSBmaWxlLiAgSXQgaXMgdXN1YWxseSBpbiB0aGUgZm9ybSBvZiBhbgorYXV0b2NvbW1hbmQgdGhhdCBzZXRzIHRoZSBmaWxldHlwZSB3aGVuIHRoZSBmaWxlIG5hbWUgbWF0Y2hlcyBhIHBhdHRlcm4uCitFeGFtcGxlOiA+CisKKwlhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5mb28JCQlzZXQgZmlsZXR5cGU9Zm9vZm9vCisKK1dyaXRlIHRoaXMgc2luZ2xlLWxpbmUgZmlsZSBhcyAiZnRkZXRlY3QvZm9vZm9vLnZpbSIgaW4gdGhlIGZpcnN0IGRpcmVjdG9yeQordGhhdCBhcHBlYXJzIGluICdydW50aW1lcGF0aCcuICBGb3IgVW5peCB0aGF0IHdvdWxkIGJlCisifi8udmltL2Z0ZGV0ZWN0L2Zvb2Zvby52aW0iLiAgVGhlIGNvbnZlbnRpb24gaXMgdG8gdXNlIHRoZSBuYW1lIG9mIHRoZQorZmlsZXR5cGUgZm9yIHRoZSBzY3JpcHQgbmFtZS4KKworWW91IGNhbiBtYWtlIG1vcmUgY29tcGxpY2F0ZWQgY2hlY2tzIGlmIHlvdSBsaWtlLCBmb3IgZXhhbXBsZSB0byBpbnNwZWN0IHRoZQorY29udGVudHMgb2YgdGhlIGZpbGUgdG8gcmVjb2duaXplIHRoZSBsYW5ndWFnZS4gIEFsc28gc2VlIHxuZXctZmlsZXR5cGV8LgorCisKK1NVTU1BUlkJCQkJCQkJKnBsdWdpbi1zcGVjaWFsKgorCitTdW1tYXJ5IG9mIHNwZWNpYWwgdGhpbmdzIHRvIHVzZSBpbiBhIHBsdWdpbjoKKworczpuYW1lCQkJVmFyaWFibGVzIGxvY2FsIHRvIHRoZSBzY3JpcHQuCisKKzxTSUQ+CQkJU2NyaXB0LUlELCB1c2VkIGZvciBtYXBwaW5ncyBhbmQgZnVuY3Rpb25zIGxvY2FsIHRvCisJCQl0aGUgc2NyaXB0LgorCitoYXNtYXB0bygpCQlGdW5jdGlvbiB0byB0ZXN0IGlmIHRoZSB1c2VyIGFscmVhZHkgZGVmaW5lZCBhIG1hcHBpbmcKKwkJCWZvciBmdW5jdGlvbmFsaXR5IHRoZSBzY3JpcHQgb2ZmZXJzLgorCis8TGVhZGVyPgkJVmFsdWUgb2YgIm1hcGxlYWRlciIsIHdoaWNoIHRoZSB1c2VyIGRlZmluZXMgYXMgdGhlCisJCQlrZXlzIHRoYXQgcGx1Z2luIG1hcHBpbmdzIHN0YXJ0IHdpdGguCisKKzptYXAgPHVuaXF1ZT4JCUdpdmUgYSB3YXJuaW5nIGlmIGEgbWFwcGluZyBhbHJlYWR5IGV4aXN0cy4KKworOm5vcmVtYXAgPHNjcmlwdD4JVXNlIG9ubHkgbWFwcGluZ3MgbG9jYWwgdG8gdGhlIHNjcmlwdCwgbm90IGdsb2JhbAorCQkJbWFwcGluZ3MuCisKK2V4aXN0cygiOkNtZCIpCQlDaGVjayBpZiBhIHVzZXIgY29tbWFuZCBhbHJlYWR5IGV4aXN0cy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDEuMTEqCVdyaXRpbmcgYSBmaWxldHlwZSBwbHVnaW4JKndyaXRlLWZpbGV0eXBlLXBsdWdpbiogKmZ0cGx1Z2luKgorCitBIGZpbGV0eXBlIHBsdWdpbiBpcyBsaWtlIGEgZ2xvYmFsIHBsdWdpbiwgZXhjZXB0IHRoYXQgaXQgc2V0cyBvcHRpb25zIGFuZAorZGVmaW5lcyBtYXBwaW5ncyBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyIG9ubHkuICBTZWUgfGFkZC1maWxldHlwZS1wbHVnaW58IGZvcgoraG93IHRoaXMgdHlwZSBvZiBwbHVnaW4gaXMgdXNlZC4KKworRmlyc3QgcmVhZCB0aGUgc2VjdGlvbiBvbiBnbG9iYWwgcGx1Z2lucyBhYm92ZSB8NDEuMTB8LiAgQWxsIHRoYXQgaXMgc2FpZCB0aGVyZQorYWxzbyBhcHBsaWVzIHRvIGZpbGV0eXBlIHBsdWdpbnMuICBUaGVyZSBhcmUgYSBmZXcgZXh0cmFzLCB3aGljaCBhcmUgZXhwbGFpbmVkCitoZXJlLiAgVGhlIGVzc2VudGlhbCB0aGluZyBpcyB0aGF0IGEgZmlsZXR5cGUgcGx1Z2luIHNob3VsZCBvbmx5IGhhdmUgYW4KK2VmZmVjdCBvbiB0aGUgY3VycmVudCBidWZmZXIuCisKKworRElTQUJMSU5HCisKK0lmIHlvdSBhcmUgd3JpdGluZyBhIGZpbGV0eXBlIHBsdWdpbiB0byBiZSB1c2VkIGJ5IG1hbnkgcGVvcGxlLCB0aGV5IG5lZWQgYQorY2hhbmNlIHRvIGRpc2FibGUgbG9hZGluZyBpdC4gIFB1dCB0aGlzIGF0IHRoZSB0b3Agb2YgdGhlIHBsdWdpbjogPgorCisJIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCisJaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisJICBmaW5pc2gKKwllbmRpZgorCWxldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworVGhpcyBhbHNvIG5lZWRzIHRvIGJlIHVzZWQgdG8gYXZvaWQgdGhhdCB0aGUgc2FtZSBwbHVnaW4gaXMgZXhlY3V0ZWQgdHdpY2UgZm9yCit0aGUgc2FtZSBidWZmZXIgKGhhcHBlbnMgd2hlbiB1c2luZyBhbiAiOmVkaXQiIGNvbW1hbmQgd2l0aG91dCBhcmd1bWVudHMpLgorCitOb3cgdXNlcnMgY2FuIGRpc2FibGUgbG9hZGluZyB0aGUgZGVmYXVsdCBwbHVnaW4gY29tcGxldGVseSBieSBtYWtpbmcgYQorZmlsZXR5cGUgcGx1Z2luIHdpdGggb25seSB0aGlzIGxpbmU6ID4KKworCWxldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworVGhpcyBkb2VzIHJlcXVpcmUgdGhhdCB0aGUgZmlsZXR5cGUgcGx1Z2luIGRpcmVjdG9yeSBjb21lcyBiZWZvcmUgJFZJTVJVTlRJTUUKK2luICdydW50aW1lcGF0aCchCisKK0lmIHlvdSBkbyB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBwbHVnaW4sIGJ1dCBvdmVycnVsZSBvbmUgb2YgdGhlIHNldHRpbmdzLAoreW91IGNhbiB3cml0ZSB0aGUgZGlmZmVyZW50IHNldHRpbmcgaW4gYSBzY3JpcHQ6ID4KKworCXNldGxvY2FsIHRleHR3aWR0aD03MAorCitOb3cgd3JpdGUgdGhpcyBpbiB0aGUgImFmdGVyIiBkaXJlY3RvcnksIHNvIHRoYXQgaXQgZ2V0cyBzb3VyY2VkIGFmdGVyIHRoZQorZGlzdHJpYnV0ZWQgInZpbS52aW0iIGZ0cGx1Z2luIHxhZnRlci1kaXJlY3Rvcnl8LiAgRm9yIFVuaXggdGhpcyB3b3VsZCBiZQorIn4vLnZpbS9hZnRlci9mdHBsdWdpbi92aW0udmltIi4gIE5vdGUgdGhhdCB0aGUgZGVmYXVsdCBwbHVnaW4gd2lsbCBoYXZlIHNldAorImI6ZGlkX2Z0cGx1Z2luIiwgYnV0IGl0IGlzIGlnbm9yZWQgaGVyZS4KKworCitPUFRJT05TCisKK1RvIG1ha2Ugc3VyZSB0aGUgZmlsZXR5cGUgcGx1Z2luIG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudCBidWZmZXIgdXNlIHRoZSA+CisKKwk6c2V0bG9jYWwKKworY29tbWFuZCB0byBzZXQgb3B0aW9ucy4gIEFuZCBvbmx5IHNldCBvcHRpb25zIHdoaWNoIGFyZSBsb2NhbCB0byBhIGJ1ZmZlciAoc2VlCit0aGUgaGVscCBmb3IgdGhlIG9wdGlvbiB0byBjaGVjayB0aGF0KS4gIFdoZW4gdXNpbmcgfDpzZXRsb2NhbHwgZm9yIGdsb2JhbAorb3B0aW9ucyBvciBvcHRpb25zIGxvY2FsIHRvIGEgd2luZG93LCB0aGUgdmFsdWUgd2lsbCBjaGFuZ2UgZm9yIG1hbnkgYnVmZmVycywKK2FuZCB0aGF0IGlzIG5vdCB3aGF0IGEgZmlsZXR5cGUgcGx1Z2luIHNob3VsZCBkby4KKworV2hlbiBhbiBvcHRpb24gaGFzIGEgdmFsdWUgdGhhdCBpcyBhIGxpc3Qgb2YgZmxhZ3Mgb3IgaXRlbXMsIGNvbnNpZGVyIHVzaW5nCisiKz0iIGFuZCAiLT0iIHRvIGtlZXAgdGhlIGV4aXN0aW5nIHZhbHVlLiAgQmUgYXdhcmUgdGhhdCB0aGUgdXNlciBtYXkgaGF2ZQorY2hhbmdlZCBhbiBvcHRpb24gdmFsdWUgYWxyZWFkeS4gIEZpcnN0IHJlc2V0dGluZyB0byB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQKK3RoZW4gY2hhbmdpbmcgaXQgb2Z0ZW4gYSBnb29kIGlkZWEuICBFeGFtcGxlOiA+CisKKwk6c2V0bG9jYWwgZm9ybWF0b3B0aW9ucyYgZm9ybWF0b3B0aW9ucys9cm8KKworCitNQVBQSU5HUworCitUbyBtYWtlIHN1cmUgbWFwcGluZ3Mgd2lsbCBvbmx5IHdvcmsgaW4gdGhlIGN1cnJlbnQgYnVmZmVyIHVzZSB0aGUgPgorCisJOm1hcCA8YnVmZmVyPgorCitjb21tYW5kLiAgVGhpcyBuZWVkcyB0byBiZSBjb21iaW5lZCB3aXRoIHRoZSB0d28tc3RlcCBtYXBwaW5nIGV4cGxhaW5lZCBhYm92ZS4KK0FuIGV4YW1wbGUgb2YgaG93IHRvIGRlZmluZSBmdW5jdGlvbmFsaXR5IGluIGEgZmlsZXR5cGUgcGx1Z2luOiA+CisKKwlpZiAhaGFzbWFwdG8oJzxQbHVnPkphdmFJbXBvcnQnKQorCSAgbWFwIDxidWZmZXI+IDx1bmlxdWU+IDxMb2NhbExlYWRlcj5pIDxQbHVnPkphdmFJbXBvcnQKKwllbmRpZgorCW5vcmVtYXAgPGJ1ZmZlcj4gPHVuaXF1ZT4gPFBsdWc+SmF2YUltcG9ydCBvaW1wb3J0ICIiPExlZnQ+PEVzYz4KKworfGhhc21hcHRvKCl8IGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGFscmVhZHkgZGVmaW5lZCBhIG1hcCB0bworPFBsdWc+SmF2YUltcG9ydC4gIElmIG5vdCwgdGhlbiB0aGUgZmlsZXR5cGUgcGx1Z2luIGRlZmluZXMgdGhlIGRlZmF1bHQKK21hcHBpbmcuICBUaGlzIHN0YXJ0cyB3aXRoIHw8TG9jYWxMZWFkZXI+fCwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdAordGhlIGtleShzKSBoZSB3YW50cyBmaWxldHlwZSBwbHVnaW4gbWFwcGluZ3MgdG8gc3RhcnQgd2l0aC4gIFRoZSBkZWZhdWx0IGlzIGEKK2JhY2tzbGFzaC4KKyI8dW5pcXVlPiIgaXMgdXNlZCB0byBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgb3IKK292ZXJsYXBzIHdpdGggYW4gZXhpc3RpbmcgbWFwcGluZy4KK3w6bm9yZW1hcHwgaXMgdXNlZCB0byBhdm9pZCB0aGF0IGFueSBvdGhlciBtYXBwaW5ncyB0aGF0IHRoZSB1c2VyIGhhcyBkZWZpbmVkCitpbnRlcmZlcmVzLiAgWW91IG1pZ2h0IHdhbnQgdG8gdXNlICI6bm9yZW1hcCA8c2NyaXB0PiIgdG8gYWxsb3cgcmVtYXBwaW5nCittYXBwaW5ncyBkZWZpbmVkIGluIHRoaXMgc2NyaXB0IHRoYXQgc3RhcnQgd2l0aCA8U0lEPi4KKworVGhlIHVzZXIgbXVzdCBoYXZlIGEgY2hhbmNlIHRvIGRpc2FibGUgdGhlIG1hcHBpbmdzIGluIGEgZmlsZXR5cGUgcGx1Z2luLAord2l0aG91dCBkaXNhYmxpbmcgZXZlcnl0aGluZy4gIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBob3cgdGhpcyBpcyBkb25lIGZvciBhCitwbHVnaW4gZm9yIHRoZSBtYWlsIGZpbGV0eXBlOiA+CisKKwkiIEFkZCBtYXBwaW5ncywgdW5sZXNzIHRoZSB1c2VyIGRpZG4ndCB3YW50IHRoaXMuCisJaWYgIWV4aXN0cygibm9fcGx1Z2luX21hcHMiKSAmJiAhZXhpc3RzKCJub19tYWlsX21hcHMiKQorCSAgIiBRdW90ZSB0ZXh0IGJ5IGluc2VydGluZyAiPiAiCisJICBpZiAhaGFzbWFwdG8oJzxQbHVnPk1haWxRdW90ZScpCisJICAgIHZtYXAgPGJ1ZmZlcj4gPExvY2FsTGVhZGVyPnEgPFBsdWc+TWFpbFF1b3RlCisJICAgIG5tYXAgPGJ1ZmZlcj4gPExvY2FsTGVhZGVyPnEgPFBsdWc+TWFpbFF1b3RlCisJICBlbmRpZgorCSAgdm5vcmVtYXAgPGJ1ZmZlcj4gPFBsdWc+TWFpbFF1b3RlIDpzL14vPiAvPENSPgorCSAgbm5vcmVtYXAgPGJ1ZmZlcj4gPFBsdWc+TWFpbFF1b3RlIDouLCRzL14vPiAvPENSPgorCWVuZGlmCisKK1R3byBnbG9iYWwgdmFyaWFibGVzIGFyZSB1c2VkOgorbm9fcGx1Z2luX21hcHMJCWRpc2FibGVzIG1hcHBpbmdzIGZvciBhbGwgZmlsZXR5cGUgcGx1Z2lucworbm9fbWFpbF9tYXBzCQlkaXNhYmxlcyBtYXBwaW5ncyBmb3IgYSBzcGVjaWZpYyBmaWxldHlwZQorCisKK1VTRVIgQ09NTUFORFMKKworVG8gYWRkIGEgdXNlciBjb21tYW5kIGZvciBhIHNwZWNpZmljIGZpbGUgdHlwZSwgc28gdGhhdCBpdCBjYW4gb25seSBiZSB1c2VkIGluCitvbmUgYnVmZmVyLCB1c2UgdGhlICItYnVmZmVyIiBhcmd1bWVudCB0byB8OmNvbW1hbmR8LiAgRXhhbXBsZTogPgorCisJOmNvbW1hbmQgLWJ1ZmZlciAgTWFrZSAgbWFrZSAlOnIucworCisKK1ZBUklBQkxFUworCitBIGZpbGV0eXBlIHBsdWdpbiB3aWxsIGJlIHNvdXJjZWQgZm9yIGVhY2ggYnVmZmVyIG9mIHRoZSB0eXBlIGl0J3MgZm9yLiAgTG9jYWwKK3NjcmlwdCB2YXJpYWJsZXMgfHM6dmFyfCB3aWxsIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCBpbnZvY2F0aW9ucy4gIFVzZSBsb2NhbAorYnVmZmVyIHZhcmlhYmxlcyB8Yjp2YXJ8IGlmIHlvdSB3YW50IGEgdmFyaWFibGUgc3BlY2lmaWNhbGx5IGZvciBvbmUgYnVmZmVyLgorCisKK0ZVTkNUSU9OUworCitXaGVuIGRlZmluaW5nIGEgZnVuY3Rpb24sIHRoaXMgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UuICBCdXQgdGhlIGZpbGV0eXBlCitwbHVnaW4gd2lsbCBiZSBzb3VyY2VkIGV2ZXJ5IHRpbWUgYSBmaWxlIHdpdGggdGhpcyBmaWxldHlwZSB3aWxsIGJlIG9wZW5lZC4KK1RoaXMgY29uc3RydWN0IG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgb25seSBkZWZpbmVkIG9uY2U6ID4KKworCTppZiAhZXhpc3RzKCIqczpGdW5jIikKKwk6ICBmdW5jdGlvbiBzOkZ1bmMoYXJnKQorCTogICAgLi4uCisJOiAgZW5kZnVuY3Rpb24KKwk6ZW5kaWYKKzwKKworVU5ETwkJCQkJCQkqdW5kb19mdHBsdWdpbioKKworV2hlbiB0aGUgdXNlciBkb2VzICI6c2V0ZmlsZXR5cGUgeHl6IiB0aGUgZWZmZWN0IG9mIHRoZSBwcmV2aW91cyBmaWxldHlwZQorc2hvdWxkIGJlIHVuZG9uZS4gIFNldCB0aGUgYjp1bmRvX2Z0cGx1Z2luIHZhcmlhYmxlIHRvIHRoZSBjb21tYW5kcyB0aGF0IHdpbGwKK3VuZG8gdGhlIHNldHRpbmdzIGluIHlvdXIgZmlsZXR5cGUgcGx1Z2luLiAgRXhhbXBsZTogPgorCisJbGV0IGI6dW5kb19mdHBsdWdpbiA9ICJzZXRsb2NhbCBmbzwgY29tPCB0dzwgY29tbWVudHN0cmluZzwiCisJCVwgLiAifCB1bmxldCBiOm1hdGNoX2lnbm9yZWNhc2UgYjptYXRjaF93b3JkcyBiOm1hdGNoX3NraXAiCisKK1VzaW5nICI6c2V0bG9jYWwiIHdpdGggIjwiIGFmdGVyIHRoZSBvcHRpb24gbmFtZSByZXNldHMgdGhlIG9wdGlvbiB0byBpdHMKK2dsb2JhbCB2YWx1ZS4gIFRoYXQgaXMgbW9zdGx5IHRoZSBiZXN0IHdheSB0byByZXNldCB0aGUgb3B0aW9uIHZhbHVlLgorCitUaGlzIGRvZXMgcmVxdWlyZSByZW1vdmluZyB0aGUgIkMiIGZsYWcgZnJvbSAnY3BvcHRpb25zJyB0byBhbGxvdyBsaW5lCitjb250aW51YXRpb24sIGFzIG1lbnRpb25lZCBhYm92ZSB8dXNlLWNwby1zYXZlfC4KKworCitGSUxFIE5BTUUKKworVGhlIGZpbGV0eXBlIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbGUgbmFtZSB8ZnRwbHVnaW4tbmFtZXwuICBVc2Ugb25lIG9mCit0aGVzZSB0aHJlZSBmb3JtczoKKworCS4uLi9mdHBsdWdpbi9zdHVmZi52aW0KKwkuLi4vZnRwbHVnaW4vc3R1ZmZfZm9vLnZpbQorCS4uLi9mdHBsdWdpbi9zdHVmZi9iYXIudmltCisKKyJzdHVmZiIgaXMgdGhlIGZpbGV0eXBlLCAiZm9vIiBhbmQgImJhciIgYXJlIGFyYml0cmFyeSBuYW1lcy4KKworCitTVU1NQVJZCQkJCQkJCSpmdHBsdWdpbi1zcGVjaWFsKgorCitTdW1tYXJ5IG9mIHNwZWNpYWwgdGhpbmdzIHRvIHVzZSBpbiBhIGZpbGV0eXBlIHBsdWdpbjoKKworPExvY2FsTGVhZGVyPgkJVmFsdWUgb2YgIm1hcGxvY2FsbGVhZGVyIiwgd2hpY2ggdGhlIHVzZXIgZGVmaW5lcyBhcworCQkJdGhlIGtleXMgdGhhdCBmaWxldHlwZSBwbHVnaW4gbWFwcGluZ3Mgc3RhcnQgd2l0aC4KKworOm1hcCA8YnVmZmVyPgkJRGVmaW5lIGEgbWFwcGluZyBsb2NhbCB0byB0aGUgYnVmZmVyLgorCis6bm9yZW1hcCA8c2NyaXB0PglPbmx5IHJlbWFwIG1hcHBpbmdzIGRlZmluZWQgaW4gdGhpcyBzY3JpcHQgdGhhdCBzdGFydAorCQkJd2l0aCA8U0lEPi4KKworOnNldGxvY2FsCQlTZXQgYW4gb3B0aW9uIGZvciB0aGUgY3VycmVudCBidWZmZXIgb25seS4KKworOmNvbW1hbmQgLWJ1ZmZlcglEZWZpbmUgYSB1c2VyIGNvbW1hbmQgbG9jYWwgdG8gdGhlIGJ1ZmZlci4KKworZXhpc3RzKCIqczpGdW5jIikJQ2hlY2sgaWYgYSBmdW5jdGlvbiB3YXMgYWxyZWFkeSBkZWZpbmVkLgorCitBbHNvIHNlZSB8cGx1Z2luLXNwZWNpYWx8LCB0aGUgc3BlY2lhbCB0aGluZ3MgdXNlZCBmb3IgYWxsIHBsdWdpbnMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQxLjEyKglXcml0aW5nIGEgY29tcGlsZXIgcGx1Z2luCQkqd3JpdGUtY29tcGlsZXItcGx1Z2luKgorCitBIGNvbXBpbGVyIHBsdWdpbiBzZXRzIG9wdGlvbnMgZm9yIHVzZSB3aXRoIGEgc3BlY2lmaWMgY29tcGlsZXIuICBUaGUgdXNlciBjYW4KK2xvYWQgaXQgd2l0aCB0aGUgfDpjb21waWxlcnwgY29tbWFuZC4gIFRoZSBtYWluIHVzZSBpcyB0byBzZXQgdGhlCisnZXJyb3Jmb3JtYXQnIGFuZCAnbWFrZXByZycgb3B0aW9ucy4KKworRWFzaWVzdCBpcyB0byBoYXZlIGEgbG9vayBhdCBleGFtcGxlcy4gIFRoaXMgY29tbWFuZCB3aWxsIGVkaXQgYWxsIHRoZSBkZWZhdWx0Citjb21waWxlciBwbHVnaW5zOiA+CisKKwk6bmV4dCAkVklNUlVOVElNRS9jb21waWxlci8qLnZpbQorCitVc2UgfDpuZXh0fCB0byBnbyB0byB0aGUgbmV4dCBwbHVnaW4gZmlsZS4KKworVGhlcmUgYXJlIHR3byBzcGVjaWFsIGl0ZW1zIGFib3V0IHRoZXNlIGZpbGVzLiAgRmlyc3QgaXMgYSBtZWNoYW5pc20gdG8gYWxsb3cKK2EgdXNlciB0byBvdmVycnVsZSBvciBhZGQgdG8gdGhlIGRlZmF1bHQgZmlsZS4gIFRoZSBkZWZhdWx0IGZpbGVzIHN0YXJ0IHdpdGg6ID4KKworCTppZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorCTogIGZpbmlzaAorCTplbmRpZgorCTpsZXQgY3VycmVudF9jb21waWxlciA9ICJtaW5lIgorCitXaGVuIHlvdSB3cml0ZSBhIGNvbXBpbGVyIGZpbGUgYW5kIHB1dCBpdCBpbiB5b3VyIHBlcnNvbmFsIHJ1bnRpbWUgZGlyZWN0b3J5CisoZS5nLiwgfi8udmltL2NvbXBpbGVyIGZvciBVbml4KSwgeW91IHNldCB0aGUgImN1cnJlbnRfY29tcGlsZXIiIHZhcmlhYmxlIHRvCittYWtlIHRoZSBkZWZhdWx0IGZpbGUgc2tpcCB0aGUgc2V0dGluZ3MuCisKK1RoZSBzZWNvbmQgbWVjaGFuaXNtIGlzIHRvIHVzZSAiOnNldCIgZm9yICI6Y29tcGlsZXIhIiBhbmQgIjpzZXRsb2NhbCIgZm9yCisiOmNvbXBpbGVyIi4gIFZpbSBkZWZpbmVzIHRoZSAiOkNvbXBpbGVyU2V0IiB1c2VyIGNvbW1hbmQgZm9yIHRoaXMuICBIb3dldmVyLAorb2xkZXIgVmltIHZlcnNpb25zIGRvbid0LCB0aHVzIHlvdXIgcGx1Z2luIHNob3VsZCBkZWZpbmUgaXQgdGhlbi4gIFRoaXMgaXMgYW4KK2V4YW1wbGU6ID4KKworICBpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIKKyAgICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorICBlbmRpZgorICBDb21waWxlclNldCBlcnJvcmZvcm1hdCYJCSIgdXNlIHRoZSBkZWZhdWx0ICdlcnJvcmZvcm1hdCcKKyAgQ29tcGlsZXJTZXQgbWFrZXByZz1ubWFrZQorCitXaGVuIHlvdSB3cml0ZSBhIGNvbXBpbGVyIHBsdWdpbiBmb3IgdGhlIFZpbSBkaXN0cmlidXRpb24gb3IgZm9yIGEgc3lzdGVtLXdpZGUKK3J1bnRpbWUgZGlyZWN0b3J5LCB1c2UgdGhlIG1lY2hhbmlzbSBtZW50aW9uZWQgYWJvdmUuICBXaGVuCisiY3VycmVudF9jb21waWxlciIgd2FzIGFscmVhZHkgc2V0IGJ5IGEgdXNlciBwbHVnaW4gbm90aGluZyB3aWxsIGJlIGRvbmUuCisKK1doZW4geW91IHdyaXRlIGEgY29tcGlsZXIgcGx1Z2luIHRvIG92ZXJydWxlIHNldHRpbmdzIGZyb20gYSBkZWZhdWx0IHBsdWdpbiwKK2Rvbid0IGNoZWNrICJjdXJyZW50X2NvbXBpbGVyIi4gIFRoaXMgcGx1Z2luIGlzIHN1cHBvc2VkIHRvIGJlIGxvYWRlZAorbGFzdCwgdGh1cyBpdCBzaG91bGQgYmUgaW4gYSBkaXJlY3RvcnkgYXQgdGhlIGVuZCBvZiAncnVudGltZXBhdGgnLiAgRm9yIFVuaXgKK3RoYXQgY291bGQgYmUgfi8udmltL2FmdGVyL2NvbXBpbGVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzQyLnR4dHwgIEFkZCBuZXcgbWVudXMKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfNDIudHh0IGIvcnVudGltZS9kb2MvdXNyXzQyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTYwZDZiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzQyLnR4dApAQCAtMCwwICsxLDM2NSBAQAorKnVzcl80Mi50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAyIE9jdCAwOAorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICAgQWRkIG5ldyBtZW51cworCisKK0J5IG5vdyB5b3Uga25vdyB0aGF0IFZpbSBpcyB2ZXJ5IGZsZXhpYmxlLiAgVGhpcyBpbmNsdWRlcyB0aGUgbWVudXMgdXNlZCBpbgordGhlIEdVSS4gIFlvdSBjYW4gZGVmaW5lIHlvdXIgb3duIG1lbnUgZW50cmllcyB0byBtYWtlIGNlcnRhaW4gY29tbWFuZHMgZWFzaWx5CithY2Nlc3NpYmxlLiAgVGhpcyBpcyBmb3IgbW91c2UtaGFwcHkgdXNlcnMgb25seS4KKworfDQyLjF8CUludHJvZHVjdGlvbgorfDQyLjJ8CU1lbnUgY29tbWFuZHMKK3w0Mi4zfAlWYXJpb3VzCit8NDIuNHwJVG9vbGJhciBhbmQgcG9wdXAgbWVudXMKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfNDMudHh0fCAgVXNpbmcgZmlsZXR5cGVzCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl80MS50eHR8ICBXcml0ZSBhIFZpbSBzY3JpcHQKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQyLjEqCUludHJvZHVjdGlvbgorCitUaGUgbWVudXMgdGhhdCBWaW0gdXNlcyBhcmUgZGVmaW5lZCBpbiB0aGUgZmlsZSAiJFZJTVJVTlRJTUUvbWVudS52aW0iLiAgSWYKK3lvdSB3YW50IHRvIHdyaXRlIHlvdXIgb3duIG1lbnVzLCB5b3UgbWlnaHQgZmlyc3Qgd2FudCB0byBsb29rIHRocm91Z2ggdGhhdAorZmlsZS4KKyAgIFRvIGRlZmluZSBhIG1lbnUgaXRlbSwgdXNlIHRoZSAiOm1lbnUiIGNvbW1hbmQuICBUaGUgYmFzaWMgZm9ybSBvZiB0aGlzCitjb21tYW5kIGlzIGFzIGZvbGxvd3M6ID4KKworCTptZW51IHttZW51LWl0ZW19IHtrZXlzfQorCitUaGUge21lbnUtaXRlbX0gZGVzY3JpYmVzIHdoZXJlIG9uIHRoZSBtZW51IHRvIHB1dCB0aGUgaXRlbS4gIEEgdHlwaWNhbAore21lbnUtaXRlbX0gaXMgIkZpbGUuU2F2ZSIsIHdoaWNoIHJlcHJlc2VudHMgdGhlIGl0ZW0gIlNhdmUiIHVuZGVyIHRoZQorIkZpbGUiIG1lbnUuICBBIGRvdCBpcyB1c2VkIHRvIHNlcGFyYXRlIHRoZSBuYW1lcy4gIEV4YW1wbGU6ID4KKworCTptZW51IEZpbGUuU2F2ZSAgOnVwZGF0ZTxDUj4KKworVGhlICI6dXBkYXRlIiBjb21tYW5kIHdyaXRlcyB0aGUgZmlsZSB3aGVuIGl0IHdhcyBtb2RpZmllZC4KKyAgIFlvdSBjYW4gYWRkIGFub3RoZXIgbGV2ZWw6ICJFZGl0LlNldHRpbmdzLlNoaWZ0d2lkdGgiIGRlZmluZXMgYSBzdWJtZW51CisiU2V0dGluZ3MiIHVuZGVyIHRoZSAiRWRpdCIgbWVudSwgd2l0aCBhbiBpdGVtICJTaGlmdHdpZHRoIi4gIFlvdSBjb3VsZCB1c2UKK2V2ZW4gZGVlcGVyIGxldmVscy4gIERvbid0IHVzZSB0aGlzIHRvbyBtdWNoLCB5b3UgbmVlZCB0byBtb3ZlIHRoZSBtb3VzZSBxdWl0ZQorYSBiaXQgdG8gdXNlIHN1Y2ggYW4gaXRlbS4KKyAgIFRoZSAiOm1lbnUiIGNvbW1hbmQgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSAiOm1hcCIgY29tbWFuZDogdGhlIGxlZnQgc2lkZQorc3BlY2lmaWVzIGhvdyB0aGUgaXRlbSBpcyB0cmlnZ2VyZWQgYW5kIHRoZSByaWdodCBoYW5kIHNpZGUgZGVmaW5lcyB0aGUKK2NoYXJhY3RlcnMgdGhhdCBhcmUgZXhlY3V0ZWQuICB7a2V5c30gYXJlIGNoYXJhY3RlcnMsIHRoZXkgYXJlIHVzZWQganVzdCBsaWtlCit5b3Ugd291bGQgaGF2ZSB0eXBlZCB0aGVtLiAgVGh1cyBpbiBJbnNlcnQgbW9kZSwgd2hlbiB7a2V5c30gaXMgcGxhaW4gdGV4dCwKK3RoYXQgdGV4dCBpcyBpbnNlcnRlZC4KKworCitBQ0NFTEVSQVRPUlMKKworVGhlIGFtcGVyc2FuZCBjaGFyYWN0ZXIgKCYpIGlzIHVzZWQgdG8gaW5kaWNhdGUgYW4gYWNjZWxlcmF0b3IuICBGb3IgaW5zdGFuY2UsCit5b3UgY2FuIHVzZSBBbHQtRiB0byBzZWxlY3QgIkZpbGUiIGFuZCBTIHRvIHNlbGVjdCAiU2F2ZSIuICAoVGhlICd3aW5hbHRrZXlzJworb3B0aW9uIG1heSBkaXNhYmxlIHRoaXMgdGhvdWdoISkuICBUaGVyZWZvcmUsIHRoZSB7bWVudS1pdGVtfSBsb29rcyBsaWtlCisiJkZpbGUuJlNhdmUiLiAgVGhlIGFjY2VsZXJhdG9yIGNoYXJhY3RlcnMgd2lsbCBiZSB1bmRlcmxpbmVkIGluIHRoZSBtZW51LgorICAgWW91IG11c3QgdGFrZSBjYXJlIHRoYXQgZWFjaCBrZXkgaXMgdXNlZCBvbmx5IG9uY2UgaW4gZWFjaCBtZW51LiAgT3RoZXJ3aXNlCit5b3Ugd2lsbCBub3Qga25vdyB3aGljaCBvZiB0aGUgdHdvIHdpbGwgYWN0dWFsbHkgYmUgdXNlZC4gIFZpbSBkb2Vzbid0IHdhcm4KK3lvdSBmb3IgdGhpcy4KKworCitQUklPUklUSUVTCisKK1RoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiB0aGUgRmlsZS5TYXZlIG1lbnUgaXRlbSBpcyBhcyBmb2xsb3dzOiA+CisKKwk6bWVudSAxMC4zNDAgJkZpbGUuJlNhdmU8VGFiPjp3ICA6Y29uZmlybSB3PENSPgorCitUaGUgbnVtYmVyIDEwLjM0MCBpcyBjYWxsZWQgdGhlIHByaW9yaXR5IG51bWJlci4gIEl0IGlzIHVzZWQgYnkgdGhlIGVkaXRvciB0bworZGVjaWRlIHdoZXJlIGl0IHBsYWNlcyB0aGUgbWVudSBpdGVtLiAgVGhlIGZpcnN0IG51bWJlciAoMTApIGluZGljYXRlcyB0aGUKK3Bvc2l0aW9uIG9uIHRoZSBtZW51IGJhci4gIExvd2VyIG51bWJlcmVkIG1lbnVzIGFyZSBwb3NpdGlvbmVkIHRvIHRoZSBsZWZ0LAoraGlnaGVyIG51bWJlcnMgdG8gdGhlIHJpZ2h0LgorICAgVGhlc2UgYXJlIHRoZSBwcmlvcml0aWVzIHVzZWQgZm9yIHRoZSBzdGFuZGFyZCBtZW51czoKKworCSAgMTAJMjAgICAgIDQwICAgICA1MCAgICAgIDYwICAgICAgIDcwCQk5OTk5CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgRmlsZQlFZGl0ICBUb29scyAgU3ludGF4ICBCdWZmZXJzICBXaW5kb3cJCUhlbHAgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK05vdGljZSB0aGF0IHRoZSBIZWxwIG1lbnUgaXMgZ2l2ZW4gYSB2ZXJ5IGhpZ2ggbnVtYmVyLCB0byBtYWtlIGl0IGFwcGVhciBvbgordGhlIGZhciByaWdodC4KKyAgIFRoZSBzZWNvbmQgbnVtYmVyICgzNDApIGRldGVybWluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBpdGVtIHdpdGhpbiB0aGUKK3B1bGwtZG93biBtZW51LiAgTG93ZXIgbnVtYmVycyBnbyBvbiB0b3AsIGhpZ2hlciBudW1iZXIgb24gdGhlIGJvdHRvbS4gIFRoZXNlCithcmUgdGhlIHByaW9yaXRpZXMgaW4gdGhlIEZpbGUgbWVudToKKworCQkJKy0tLS0tLS0tLS0tLS0tLS0tKworCSAgICAxMC4zMTAJfE9wZW4uLi4JICB8CisJICAgIDEwLjMyMAl8U3BsaXQtT3Blbi4uLgkgIHwKKwkgICAgMTAuMzI1CXxOZXcJCSAgfAorCSAgICAxMC4zMzAJfENsb3NlCQkgIHwKKwkgICAgMTAuMzM1CXwtLS0tLS0tLS0tLS0tLS0tIHwKKwkgICAgMTAuMzQwCXxTYXZlCQkgIHwKKwkgICAgMTAuMzUwCXxTYXZlIEFzLi4uCSAgfAorCSAgICAxMC40MDAJfC0tLS0tLS0tLS0tLS0tLS0gfAorCSAgICAxMC40MTAJfFNwbGl0IERpZmYgd2l0aCAgfAorCSAgICAxMC40MjAJfFNwbGl0IFBhdGNoZWQgQnkgfAorCSAgICAxMC41MDAJfC0tLS0tLS0tLS0tLS0tLS0gfAorCSAgICAxMC41MTAJfFByaW50CQkgIHwKKwkgICAgMTAuNjAwCXwtLS0tLS0tLS0tLS0tLS0tIHwKKwkgICAgMTAuNjEwCXxTYXZlLUV4aXQJICB8CisJICAgIDEwLjYyMAl8RXhpdAkJICB8CisJCQkrLS0tLS0tLS0tLS0tLS0tLS0rCisKK05vdGljZSB0aGF0IHRoZXJlIGlzIHJvb20gaW4gYmV0d2VlbiB0aGUgbnVtYmVycy4gIFRoaXMgaXMgd2hlcmUgeW91IGNhbgoraW5zZXJ0IHlvdXIgb3duIGl0ZW1zLCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gKGl0J3Mgb2Z0ZW4gYmV0dGVyIHRvIGxlYXZlIHRoZQorc3RhbmRhcmQgbWVudXMgYWxvbmUgYW5kIGFkZCBhIG5ldyBtZW51IGZvciB5b3VyIG93biBpdGVtcykuCisgICBXaGVuIHlvdSBjcmVhdGUgYSBzdWJtZW51LCB5b3UgY2FuIGFkZCBhbm90aGVyICIubnVtYmVyIiB0byB0aGUgcHJpb3JpdHkuCitUaHVzIGVhY2ggbmFtZSBpbiB7bWVudS1pdGVtfSBoYXMgaXRzIHByaW9yaXR5IG51bWJlci4KKworCitTUEVDSUFMIENIQVJBQ1RFUlMKKworVGhlIHttZW51LWl0ZW19IGluIHRoaXMgZXhhbXBsZSBpcyAiJkZpbGUuJlNhdmU8VGFiPjp3Ii4gVGhpcyBicmluZ3MgdXAgYW4KK2ltcG9ydGFudCBwb2ludDoge21lbnUtaXRlbX0gbXVzdCBiZSBvbmUgd29yZC4gIElmIHlvdSB3YW50IHRvIHB1dCBhIGRvdCwKK3NwYWNlIG9yIHRhYnMgaW4gdGhlIG5hbWUsIHlvdSBlaXRoZXIgdXNlIHRoZSA8PiBub3RhdGlvbiAoPFNwYWNlPiBhbmQgPFRhYj4sCitmb3IgaW5zdGFuY2UpIG9yIHVzZSB0aGUgYmFja3NsYXNoIChcKSBlc2NhcGUuID4KKworCTptZW51IDEwLjMwNSAmRmlsZS4mRG9cIEl0XC5cLlwuIDpleGl0PENSPgorCitJbiB0aGlzIGV4YW1wbGUsIHRoZSBuYW1lIG9mIHRoZSBtZW51IGl0ZW0gIkRvIEl0Li4uIiBjb250YWlucyBhIHNwYWNlIGFuZCB0aGUKK2NvbW1hbmQgaXMgIjpleGl0PENSPiIuCisKK1RoZSA8VGFiPiBjaGFyYWN0ZXIgaW4gYSBtZW51IG5hbWUgaXMgdXNlZCB0byBzZXBhcmF0ZSB0aGUgcGFydCB0aGF0IGRlZmluZXMKK3RoZSBtZW51IG5hbWUgZnJvbSB0aGUgcGFydCB0aGF0IGdpdmVzIGEgaGludCB0byB0aGUgdXNlci4gIFRoZSBwYXJ0IGFmdGVyIHRoZQorPFRhYj4gaXMgZGlzcGxheWVkIHJpZ2h0IGFsaWduZWQgaW4gdGhlIG1lbnUuICBJbiB0aGUgRmlsZS5TYXZlIG1lbnUgdGhlIG5hbWUKK3VzZWQgaXMgIiZGaWxlLiZTYXZlPFRhYj46dyIuICBUaHVzIHRoZSBtZW51IG5hbWUgaXMgIkZpbGUuU2F2ZSIgYW5kIHRoZSBoaW50CitpcyAiOnciLgorCisKK1NFUEFSQVRPUlMKKworVGhlIHNlcGFyYXRvciBsaW5lcywgdXNlZCB0byBncm91cCByZWxhdGVkIG1lbnUgaXRlbXMgdG9nZXRoZXIsIGNhbiBiZSBkZWZpbmVkCitieSB1c2luZyBhIG5hbWUgdGhhdCBzdGFydHMgYW5kIGVuZHMgaW4gYSAnLScuICBGb3IgZXhhbXBsZSAiLXNlcC0iLiAgV2hlbgordXNpbmcgc2V2ZXJhbCBzZXBhcmF0b3JzIHRoZSBuYW1lcyBtdXN0IGJlIGRpZmZlcmVudC4gIE90aGVyd2lzZSB0aGUgbmFtZXMKK2Rvbid0IG1hdHRlci4KKyAgIFRoZSBjb21tYW5kIGZyb20gYSBzZXBhcmF0b3Igd2lsbCBuZXZlciBiZSBleGVjdXRlZCwgYnV0IHlvdSBoYXZlIHRvIGRlZmluZQorb25lIGFueXdheS4gIEEgc2luZ2xlIGNvbG9uIHdpbGwgZG8uICBFeGFtcGxlOiA+CisKKwk6YW1lbnUgMjAuNTEwIEVkaXQuLXNlcDMtIDoKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDIuMioJTWVudSBjb21tYW5kcworCitZb3UgY2FuIGRlZmluZSBtZW51IGl0ZW1zIHRoYXQgZXhpc3QgZm9yIG9ubHkgY2VydGFpbiBtb2Rlcy4gIFRoaXMgd29ya3MganVzdAorbGlrZSB0aGUgdmFyaWF0aW9ucyBvbiB0aGUgIjptYXAiIGNvbW1hbmQ6CisKKwk6bWVudQkJTm9ybWFsLCBWaXN1YWwgYW5kIE9wZXJhdG9yLXBlbmRpbmcgbW9kZQorCTpubWVudQkJTm9ybWFsIG1vZGUKKwk6dm1lbnUJCVZpc3VhbCBtb2RlCisJOm9tZW51CQlPcGVyYXRvci1wZW5kaW5nIG1vZGUKKwk6bWVudSEJCUluc2VydCBhbmQgQ29tbWFuZC1saW5lIG1vZGUKKwk6aW1lbnUJCUluc2VydCBtb2RlCisJOmNtZW51CQlDb21tYW5kLWxpbmUgbW9kZQorCTphbWVudQkJQWxsIG1vZGVzCisKK1RvIGF2b2lkIHRoYXQgdGhlIGNvbW1hbmRzIG9mIGEgbWVudSBpdGVtIGFyZSBiZWluZyBtYXBwZWQsIHVzZSB0aGUgY29tbWFuZAorIjpub3JlbWVudSIsICI6bm5vcmVtZW51IiwgIjphbm9yZW1lbnUiLCBldGMuCisKKworVVNJTkcgOkFNRU5VCisKK1RoZSAiOmFtZW51IiBjb21tYW5kIGlzIGEgYml0IGRpZmZlcmVudC4gIEl0IGFzc3VtZXMgdGhhdCB0aGUge2tleXN9IHlvdQorZ2l2ZSBhcmUgdG8gYmUgZXhlY3V0ZWQgaW4gTm9ybWFsIG1vZGUuICBXaGVuIFZpbSBpcyBpbiBWaXN1YWwgb3IgSW5zZXJ0IG1vZGUKK3doZW4gdGhlIG1lbnUgaXMgdXNlZCwgVmltIGZpcnN0IGhhcyB0byBnbyBiYWNrIHRvIE5vcm1hbCBtb2RlLiAgIjphbWVudSIKK2luc2VydHMgYSBDVFJMLUMgb3IgQ1RSTC1PIGZvciB5b3UuICBGb3IgZXhhbXBsZSwgaWYgeW91IHVzZSB0aGlzIGNvbW1hbmQ6Cis+CisJOmFtZW51ICA5MC4xMDAgTWluZS5GaW5kXCBXb3JkICAqCisKK1RoZW4gdGhlIHJlc3VsdGluZyBtZW51IGNvbW1hbmRzIHdpbGwgYmU6CisKKwlOb3JtYWwgbW9kZToJCSoKKwlWaXN1YWwgbW9kZToJCUNUUkwtQyAqCisJT3BlcmF0b3ItcGVuZGluZyBtb2RlOglDVFJMLUMgKgorCUluc2VydCBtb2RlOgkJQ1RSTC1PICoKKwlDb21tYW5kLWxpbmUgbW9kZToJQ1RSTC1DICoKKworV2hlbiBpbiBDb21tYW5kLWxpbmUgbW9kZSB0aGUgQ1RSTC1DIHdpbGwgYWJhbmRvbiB0aGUgY29tbWFuZCB0eXBlZCBzbyBmYXIuCitJbiBWaXN1YWwgYW5kIE9wZXJhdG9yLXBlbmRpbmcgbW9kZSBDVFJMLUMgd2lsbCBzdG9wIHRoZSBtb2RlLiAgVGhlIENUUkwtTyBpbgorSW5zZXJ0IG1vZGUgd2lsbCBleGVjdXRlIHRoZSBjb21tYW5kIGFuZCB0aGVuIHJldHVybiB0byBJbnNlcnQgbW9kZS4KKyAgIENUUkwtTyBvbmx5IHdvcmtzIGZvciBvbmUgY29tbWFuZC4gIElmIHlvdSBuZWVkIHRvIHVzZSB0d28gb3IgbW9yZQorY29tbWFuZHMsIHB1dCB0aGVtIGluIGEgZnVuY3Rpb24gYW5kIGNhbGwgdGhhdCBmdW5jdGlvbi4gIEV4YW1wbGU6ID4KKworCTphbWVudSAgTWluZS5OZXh0XCBGaWxlICA6Y2FsbCA8U0lEPk5leHRGaWxlKCk8Q1I+CisJOmZ1bmN0aW9uIDxTSUQ+TmV4dEZpbGUoKQorCTogIG5leHQKKwk6ICAxL15Db2RlCisJOmVuZGZ1bmN0aW9uCisKK1RoaXMgbWVudSBlbnRyeSBnb2VzIHRvIHRoZSBuZXh0IGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3Qgd2l0aCAiOm5leHQiLiAgVGhlbgoraXQgc2VhcmNoZXMgZm9yIHRoZSBsaW5lIHRoYXQgc3RhcnRzIHdpdGggIkNvZGUiLgorICAgVGhlIDxTSUQ+IGJlZm9yZSB0aGUgZnVuY3Rpb24gbmFtZSBpcyB0aGUgc2NyaXB0IElELiAgVGhpcyBtYWtlcyB0aGUKK2Z1bmN0aW9uIGxvY2FsIHRvIHRoZSBjdXJyZW50IFZpbSBzY3JpcHQgZmlsZS4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdoZW4gYQorZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGRlZmluZWQgaW4gYW5vdGhlciBzY3JpcHQgZmlsZS4gIFNlZSB8PFNJRD58LgorCisKK1NJTEVOVCBNRU5VUworCitUaGUgbWVudSBleGVjdXRlcyB0aGUge2tleXN9IGFzIGlmIHlvdSB0eXBlZCB0aGVtLiAgRm9yIGEgIjoiIGNvbW1hbmQgdGhpcworbWVhbnMgeW91IHdpbGwgc2VlIHRoZSBjb21tYW5kIGJlaW5nIGVjaG9lZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgSWYgaXQncyBhCitsb25nIGNvbW1hbmQsIHRoZSBoaXQtRW50ZXIgcHJvbXB0IHdpbGwgYXBwZWFyLiAgVGhhdCBjYW4gYmUgdmVyeSBhbm5veWluZyEKKyAgIFRvIGF2b2lkIHRoaXMsIG1ha2UgdGhlIG1lbnUgc2lsZW50LiAgVGhpcyBpcyBkb25lIHdpdGggdGhlIDxzaWxlbnQ+Cithcmd1bWVudC4gIEZvciBleGFtcGxlLCB0YWtlIHRoZSBjYWxsIHRvIE5leHRGaWxlKCkgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUuCitXaGVuIHlvdSB1c2UgdGhpcyBtZW51LCB5b3Ugd2lsbCBzZWUgdGhpcyBvbiB0aGUgY29tbWFuZCBsaW5lOgorCisJOmNhbGwgPFNOUj4zNF9OZXh0RmlsZSgpIH4KKworVG8gYXZvaWQgdGhpcyB0ZXh0IG9uIHRoZSBjb21tYW5kIGxpbmUsIGluc2VydCAiPHNpbGVudD4iIGFzIHRoZSBmaXJzdAorYXJndW1lbnQ6ID4KKworCTphbWVudSA8c2lsZW50PiBNaW5lLk5leHRcIEZpbGUgOmNhbGwgPFNJRD5OZXh0RmlsZSgpPENSPgorCitEb24ndCB1c2UgIjxzaWxlbnQ+IiB0b28gb2Z0ZW4uICBJdCBpcyBub3QgbmVlZGVkIGZvciBzaG9ydCBjb21tYW5kcy4gIElmIHlvdQorbWFrZSBhIG1lbnUgZm9yIHNvbWVvbmUgZWxzZSwgYmVpbmcgYWJsZSB0aGUgc2VlIHRoZSBleGVjdXRlZCBjb21tYW5kIHdpbGwKK2dpdmUgaGltIGEgaGludCBhYm91dCB3aGF0IGhlIGNvdWxkIGhhdmUgdHlwZWQsIGluc3RlYWQgb2YgdXNpbmcgdGhlIG1vdXNlLgorCisKK0xJU1RJTkcgTUVOVVMKKworV2hlbiBhIG1lbnUgY29tbWFuZCBpcyB1c2VkIHdpdGhvdXQgYSB7a2V5c30gcGFydCwgaXQgbGlzdHMgdGhlIGFscmVhZHkKK2RlZmluZWQgbWVudXMuICBZb3UgY2FuIHNwZWNpZnkgYSB7bWVudS1pdGVtfSwgb3IgcGFydCBvZiBpdCwgdG8gbGlzdCBzcGVjaWZpYworbWVudXMuICBFeGFtcGxlOiA+CisKKwk6YW1lbnUKKworVGhpcyBsaXN0cyBhbGwgbWVudXMuICBUaGF0J3MgYSBsb25nIGxpc3QhICBCZXR0ZXIgc3BlY2lmeSB0aGUgbmFtZSBvZiBhIG1lbnUKK3RvIGdldCBhIHNob3J0ZXIgbGlzdDogPgorCisJOmFtZW51IEVkaXQKKworVGhpcyBsaXN0cyBvbmx5IHRoZSAiRWRpdCIgbWVudSBpdGVtcyBmb3IgYWxsIG1vZGVzLiAgVG8gbGlzdCBvbmx5IG9uZQorc3BlY2lmaWMgbWVudSBpdGVtIGZvciBJbnNlcnQgbW9kZTogPgorCisJOmltZW51IEVkaXQuVW5kbworCitUYWtlIGNhcmUgdGhhdCB5b3UgdHlwZSBleGFjdGx5IHRoZSByaWdodCBuYW1lLiAgQ2FzZSBtYXR0ZXJzIGhlcmUuICBCdXQgdGhlCisnJicgZm9yIGFjY2VsZXJhdG9ycyBjYW4gYmUgb21pdHRlZC4gIFRoZSA8VGFiPiBhbmQgd2hhdCBjb21lcyBhZnRlciBpdCBjYW4gYmUKK2xlZnQgb3V0IGFzIHdlbGwuCisKKworREVMRVRJTkcgTUVOVVMKKworVG8gZGVsZXRlIGEgbWVudSwgdGhlIHNhbWUgY29tbWFuZCBpcyB1c2VkIGFzIGZvciBsaXN0aW5nLCBidXQgd2l0aCAibWVudSIKK2NoYW5nZWQgdG8gInVubWVudSIuICBUaHVzICI6bWVudSIgYmVjb21lcywgIjp1bm1lbnUiLCAiOm5tZW51IiBiZWNvbWVzCisiOm51bm1lbnUiLCBldGMuICBUbyBkZWxldGUgdGhlICJUb29scy5NYWtlIiBpdGVtIGZvciBJbnNlcnQgbW9kZTogPgorCisJOml1bm1lbnUgVG9vbHMuTWFrZQorCitZb3UgY2FuIGRlbGV0ZSBhIHdob2xlIG1lbnUsIHdpdGggYWxsIGl0cyBpdGVtcywgYnkgdXNpbmcgdGhlIG1lbnUgbmFtZS4KK0V4YW1wbGU6ID4KKworCTphdW5tZW51IFN5bnRheAorCitUaGlzIGRlbGV0ZXMgdGhlIFN5bnRheCBtZW51IGFuZCBhbGwgdGhlIGl0ZW1zIGluIGl0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0Mi4zKglWYXJpb3VzCisKK1lvdSBjYW4gY2hhbmdlIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBtZW51cyB3aXRoIGZsYWdzIGluICdndWlvcHRpb25zJy4gIEluIHRoZQorZGVmYXVsdCB2YWx1ZSB0aGV5IGFyZSBhbGwgaW5jbHVkZWQuICBZb3UgY2FuIHJlbW92ZSBhIGZsYWcgd2l0aCBhIGNvbW1hbmQKK2xpa2U6ID4KKworCTpzZXQgZ3Vpb3B0aW9ucy09bQorPAorCW0JCVdoZW4gcmVtb3ZlZCB0aGUgbWVudWJhciBpcyBub3QgZGlzcGxheWVkLgorCisJTQkJV2hlbiByZW1vdmVkIHRoZSBkZWZhdWx0IG1lbnVzIGFyZSBub3QgbG9hZGVkLgorCisJZwkJV2hlbiByZW1vdmVkIHRoZSBpbmFjdGl2ZSBtZW51IGl0ZW1zIGFyZSBub3QgbWFkZSBncmV5CisJCQlidXQgYXJlIGNvbXBsZXRlbHkgcmVtb3ZlZC4gIChEb2VzIG5vdCB3b3JrIG9uIGFsbAorCQkJc3lzdGVtcy4pCisKKwl0CQlXaGVuIHJlbW92ZWQgdGhlIHRlYXJvZmYgZmVhdHVyZSBpcyBub3QgZW5hYmxlZC4KKworVGhlIGRvdHRlZCBsaW5lIGF0IHRoZSB0b3Agb2YgYSBtZW51IGlzIG5vdCBhIHNlcGFyYXRvciBsaW5lLiAgV2hlbiB5b3Ugc2VsZWN0Cit0aGlzIGl0ZW0sIHRoZSBtZW51IGlzICJ0ZWFyZWQtb2ZmIjogSXQgaXMgZGlzcGxheWVkIGluIGEgc2VwYXJhdGUgd2luZG93LgorVGhpcyBpcyBjYWxsZWQgYSB0ZWFyb2ZmIG1lbnUuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB1c2UgdGhlIHNhbWUgbWVudQorb2Z0ZW4uCisKK0ZvciB0cmFuc2xhdGluZyBtZW51IGl0ZW1zLCBzZWUgfDptZW51dHJhbnN8LgorCitTaW5jZSB0aGUgbW91c2UgaGFzIHRvIGJlIHVzZWQgdG8gc2VsZWN0IGEgbWVudSBpdGVtLCBpdCBpcyBhIGdvb2QgaWRlYSB0byB1c2UKK3RoZSAiOmJyb3dzZSIgY29tbWFuZCBmb3Igc2VsZWN0aW5nIGEgZmlsZS4gIEFuZCAiOmNvbmZpcm0iIHRvIGdldCBhIGRpYWxvZworaW5zdGVhZCBvZiBhbiBlcnJvciBtZXNzYWdlLCBlLmcuLCB3aGVuIHRoZSBjdXJyZW50IGJ1ZmZlciBjb250YWlucyBjaGFuZ2VzLgorVGhlc2UgdHdvIGNhbiBiZSBjb21iaW5lZDogPgorCisJOmFtZW51IEZpbGUuT3BlbiAgOmJyb3dzZSBjb25maXJtIGVkaXQ8Q1I+CisKK1RoZSAiOmJyb3dzZSIgbWFrZXMgYSBmaWxlIGJyb3dzZXIgYXBwZWFyIHRvIHNlbGVjdCB0aGUgZmlsZSB0byBlZGl0LiAgVGhlCisiOmNvbmZpcm0iIHdpbGwgcG9wIHVwIGEgZGlhbG9nIHdoZW4gdGhlIGN1cnJlbnQgYnVmZmVyIGhhcyBjaGFuZ2VzLiAgWW91IGNhbgordGhlbiBzZWxlY3QgdG8gc2F2ZSB0aGUgY2hhbmdlcywgdGhyb3cgdGhlbSBhd2F5IG9yIGNhbmNlbCB0aGUgY29tbWFuZC4KKyAgIEZvciBtb3JlIGNvbXBsaWNhdGVkIGl0ZW1zLCB0aGUgY29uZmlybSgpIGFuZCBpbnB1dGRpYWxvZygpIGZ1bmN0aW9ucyBjYW4KK2JlIHVzZWQuICBUaGUgZGVmYXVsdCBtZW51cyBjb250YWluIGEgZmV3IGV4YW1wbGVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0Mi40KglUb29sYmFyIGFuZCBwb3B1cCBtZW51cworCitUaGVyZSBhcmUgdHdvIHNwZWNpYWwgbWVudXM6IFRvb2xCYXIgYW5kIFBvcFVwLiAgSXRlbXMgdGhhdCBzdGFydCB3aXRoIHRoZXNlCituYW1lcyBkbyBub3QgYXBwZWFyIGluIHRoZSBub3JtYWwgbWVudSBiYXIuCisKKworVE9PTEJBUgorCitUaGUgdG9vbGJhciBhcHBlYXJzIG9ubHkgd2hlbiB0aGUgIlQiIGZsYWcgaXMgaW5jbHVkZWQgaW4gdGhlICdndWlvcHRpb25zJworb3B0aW9uLgorICAgVGhlIHRvb2xiYXIgdXNlcyBpY29ucyByYXRoZXIgdGhhbiB0ZXh0IHRvIHJlcHJlc2VudCB0aGUgY29tbWFuZC4gIEZvcgorZXhhbXBsZSwgdGhlIHttZW51LWl0ZW19IG5hbWVkICJUb29sQmFyLk5ldyIgY2F1c2VzIHRoZSAiTmV3IiBpY29uIHRvIGFwcGVhcgorb24gdGhlIHRvb2xiYXIuCisgICBUaGUgVmltIGVkaXRvciBoYXMgMjggYnVpbHQtaW4gaWNvbnMuICBZb3UgY2FuIGZpbmQgYSB0YWJsZSBoZXJlOgorfGJ1aWx0aW4tdG9vbHN8LiAgTW9zdCBvZiB0aGVtIGFyZSB1c2VkIGluIHRoZSBkZWZhdWx0IHRvb2xiYXIuICBZb3UgY2FuCityZWRlZmluZSB3aGF0IHRoZXNlIGl0ZW1zIGRvIChhZnRlciB0aGUgZGVmYXVsdCBtZW51cyBhcmUgc2V0dXApLgorICAgWW91IGNhbiBhZGQgYW5vdGhlciBiaXRtYXAgZm9yIGEgdG9vbGJhciBpdGVtLiAgT3IgZGVmaW5lIGEgbmV3IHRvb2xiYXIKK2l0ZW0gd2l0aCBhIGJpdG1hcC4gIEZvciBleGFtcGxlLCBkZWZpbmUgYSBuZXcgdG9vbGJhciBpdGVtIHdpdGg6ID4KKworCTp0bWVudSBUb29sQmFyLkNvbXBpbGUgIENvbXBpbGUgdGhlIGN1cnJlbnQgZmlsZQorCTphbWVudSBUb29sQmFyLkNvbXBpbGUgIDohY2MgJSAtbyAlOnI8Q1I+CisKK05vdyB5b3UgbmVlZCB0byBjcmVhdGUgdGhlIGljb24uICBGb3IgTVMtV2luZG93cyBpdCBtdXN0IGJlIGluIGJpdG1hcCBmb3JtYXQsCit3aXRoIHRoZSBuYW1lICJDb21waWxlLmJtcCIuICBGb3IgVW5peCBYUE0gZm9ybWF0IGlzIHVzZWQsIHRoZSBmaWxlIG5hbWUgaXMKKyJDb21waWxlLnhwbSIuICBUaGUgc2l6ZSBtdXN0IGJlIDE4IGJ5IDE4IHBpeGVscy4gIE9uIE1TLVdpbmRvd3Mgb3RoZXIgc2l6ZXMKK2NhbiBiZSB1c2VkIGFzIHdlbGwsIGJ1dCBpdCB3aWxsIGxvb2sgdWdseS4KKyAgIFB1dCB0aGUgYml0bWFwIGluIHRoZSBkaXJlY3RvcnkgImJpdG1hcHMiIGluIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgZnJvbQorJ3J1bnRpbWVwYXRoJy4gIEUuZy4sIGZvciBVbml4ICJ+Ly52aW0vYml0bWFwcy9Db21waWxlLnhwbSIuCisKK1lvdSBjYW4gZGVmaW5lIHRvb2x0aXBzIGZvciB0aGUgaXRlbXMgaW4gdGhlIHRvb2xiYXIuICBBIHRvb2x0aXAgaXMgYSBzaG9ydAordGV4dCB0aGF0IGV4cGxhaW5zIHdoYXQgYSB0b29sYmFyIGl0ZW0gd2lsbCBkby4gIEZvciBleGFtcGxlICJPcGVuIGZpbGUiLiAgSXQKK2FwcGVhcnMgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBpcyBvbiB0aGUgaXRlbSwgd2l0aG91dCBtb3ZpbmcgZm9yIGEgbW9tZW50LgorVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpZiB0aGUgbWVhbmluZyBvZiB0aGUgcGljdHVyZSBpc24ndCB0aGF0IG9idmlvdXMuCitFeGFtcGxlOiA+CisKKwk6dG1lbnUgVG9vbEJhci5NYWtlICBSdW4gbWFrZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKzwKKwlOb3RlOgorCVBheSBhdHRlbnRpb24gdG8gdGhlIGNhc2UgdXNlZC4gICJUb29sYmFyIiBhbmQgInRvb2xiYXIiIGFyZSBkaWZmZXJlbnQKKwlmcm9tICJUb29sQmFyIiEKKworVG8gcmVtb3ZlIGEgdG9vbHRpcCwgdXNlIHRoZSB8OnR1bm1lbnV8IGNvbW1hbmQuCisKK1RoZSAndG9vbGJhcicgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgdGV4dCBpbnN0ZWFkIG9mIGEgYml0bWFwLCBvciBib3RoCit0ZXh0IGFuZCBhIGJpdG1hcC4gIE1vc3QgcGVvcGxlIHVzZSBqdXN0IHRoZSBiaXRtYXAsIHNpbmNlIHRoZSB0ZXh0IHRha2VzCitxdWl0ZSBhIGJpdCBvZiBzcGFjZS4KKworCitQT1BVUCBNRU5VCisKK1RoZSBwb3B1cCBtZW51IHBvcHMgdXAgd2hlcmUgdGhlIG1vdXNlIHBvaW50ZXIgaXMuICBPbiBNUy1XaW5kb3dzIHlvdSBhY3RpdmF0ZQoraXQgYnkgY2xpY2tpbmcgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbi4gIFRoZW4geW91IGNhbiBzZWxlY3QgYW4gaXRlbSB3aXRoIHRoZQorbGVmdCBtb3VzZSBidXR0b24uICBPbiBVbml4IHRoZSBwb3B1cCBtZW51IGlzIHVzZWQgYnkgcHJlc3NpbmcgYW5kIGhvbGRpbmcgdGhlCityaWdodCBtb3VzZSBidXR0b24uCisgICBUaGUgcG9wdXAgbWVudSBvbmx5IGFwcGVhcnMgd2hlbiB0aGUgJ21vdXNlbW9kZWwnIGhhcyBiZWVuIHNldCB0byAicG9wdXAiCitvciAicG9wdXBfc2V0cG9zIi4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBpcyB0aGF0ICJwb3B1cF9zZXRwb3MiCittb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBtb3VzZSBwb2ludGVyIHBvc2l0aW9uLiAgV2hlbiBjbGlja2luZyBpbnNpZGUgYQorc2VsZWN0aW9uLCB0aGUgc2VsZWN0aW9uIHdpbGwgYmUgdXNlZCB1bm1vZGlmaWVkLiAgV2hlbiB0aGVyZSBpcyBhIHNlbGVjdGlvbgorYnV0IHlvdSBjbGljayBvdXRzaWRlIG9mIGl0LCB0aGUgc2VsZWN0aW9uIGlzIHJlbW92ZWQuCisgICBUaGVyZSBpcyBhIHNlcGFyYXRlIHBvcHVwIG1lbnUgZm9yIGVhY2ggbW9kZS4gIFRodXMgdGhlcmUgYXJlIG5ldmVyIGdyZXkKK2l0ZW1zIGxpa2UgaW4gdGhlIG5vcm1hbCBtZW51cy4KKworV2hhdCBpcyB0aGUgbWVhbmluZyBvZiBsaWZlLCB0aGUgdW5pdmVyc2UgYW5kIGV2ZXJ5dGhpbmc/ICAqNDIqCitEb3VnbGFzIEFkYW1zLCB0aGUgb25seSBwZXJzb24gd2hvIGtuZXcgd2hhdCB0aGlzIHF1ZXN0aW9uIHJlYWxseSB3YXMgYWJvdXQgaXMKK25vdyBkZWFkLCB1bmZvcnR1bmF0ZWx5LiAgU28gbm93IHlvdSBtaWdodCB3b25kZXIgd2hhdCB0aGUgbWVhbmluZyBvZiBkZWF0aAoraXMuLi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl80My50eHR8ICBVc2luZyBmaWxldHlwZXMKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfNDMudHh0IGIvcnVudGltZS9kb2MvdXNyXzQzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDRiOGIyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzQzLnR4dApAQCAtMCwwICsxLDE3MiBAQAorKnVzcl80My50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAyIEp1bCAxNAorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICAgIFVzaW5nIGZpbGV0eXBlcworCisKK1doZW4geW91IGFyZSBlZGl0aW5nIGEgZmlsZSBvZiBhIGNlcnRhaW4gdHlwZSwgZm9yIGV4YW1wbGUgYSBDIHByb2dyYW0gb3IgYQorc2hlbGwgc2NyaXB0LCB5b3Ugb2Z0ZW4gdXNlIHRoZSBzYW1lIG9wdGlvbiBzZXR0aW5ncyBhbmQgbWFwcGluZ3MuICBZb3UKK3F1aWNrbHkgZ2V0IHRpcmVkIG9mIG1hbnVhbGx5IHNldHRpbmcgdGhlc2UgZWFjaCB0aW1lLiAgVGhpcyBjaGFwdGVyIGV4cGxhaW5zCitob3cgdG8gZG8gaXQgYXV0b21hdGljYWxseS4KKworfDQzLjF8CVBsdWdpbnMgZm9yIGEgZmlsZXR5cGUKK3w0My4yfAlBZGRpbmcgYSBmaWxldHlwZQorCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl80NC50eHR8ICBZb3VyIG93biBzeW50YXggaGlnaGxpZ2h0ZWQKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzQyLnR4dHwgIEFkZCBuZXcgbWVudXMKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQzLjEqCVBsdWdpbnMgZm9yIGEgZmlsZXR5cGUJCQkJKmZpbGV0eXBlLXBsdWdpbioKKworSG93IHRvIHN0YXJ0IHVzaW5nIGZpbGV0eXBlIHBsdWdpbnMgaGFzIGFscmVhZHkgYmVlbiBkaXNjdXNzZWQgaGVyZToKK3xhZGQtZmlsZXR5cGUtcGx1Z2lufC4gIEJ1dCB5b3UgcHJvYmFibHkgYXJlIG5vdCBzYXRpc2ZpZWQgd2l0aCB0aGUgZGVmYXVsdAorc2V0dGluZ3MsIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4ga2VwdCBtaW5pbWFsLiAgU3VwcG9zZSB0aGF0IGZvciBDIGZpbGVzIHlvdQord2FudCB0byBzZXQgdGhlICdzb2Z0dGFic3RvcCcgb3B0aW9uIHRvIDQgYW5kIGRlZmluZSBhIG1hcHBpbmcgdG8gaW5zZXJ0IGEKK3RocmVlLWxpbmUgY29tbWVudC4gIFlvdSBkbyB0aGlzIHdpdGggb25seSB0d28gc3RlcHM6CisKKwkJCQkJCQkqeW91ci1ydW50aW1lLWRpcioKKzEuIENyZWF0ZSB5b3VyIG93biBydW50aW1lIGRpcmVjdG9yeS4gIE9uIFVuaXggdGhpcyB1c3VhbGx5IGlzICJ+Ly52aW0iLiAgSW4KKyAgIHRoaXMgZGlyZWN0b3J5IGNyZWF0ZSB0aGUgImZ0cGx1Z2luIiBkaXJlY3Rvcnk6ID4KKworCW1rZGlyIH4vLnZpbQorCW1rZGlyIH4vLnZpbS9mdHBsdWdpbgorPAorICAgV2hlbiB5b3UgYXJlIG5vdCBvbiBVbml4LCBjaGVjayB0aGUgdmFsdWUgb2YgdGhlICdydW50aW1lcGF0aCcgb3B0aW9uIHRvCisgICBzZWUgd2hlcmUgVmltIHdpbGwgbG9vayBmb3IgdGhlICJmdHBsdWdpbiIgZGlyZWN0b3J5OiA+CisKKwlzZXQgcnVudGltZXBhdGgKKworPCAgWW91IHdvdWxkIG5vcm1hbGx5IHVzZSB0aGUgZmlyc3QgZGlyZWN0b3J5IG5hbWUgKGJlZm9yZSB0aGUgZmlyc3QgY29tbWEpLgorICAgWW91IG1pZ2h0IHdhbnQgdG8gcHJlcGVuZCBhIGRpcmVjdG9yeSBuYW1lIHRvIHRoZSAncnVudGltZXBhdGgnIG9wdGlvbiBpbgorICAgeW91ciB8dmltcmN8IGZpbGUgaWYgeW91IGRvbid0IGxpa2UgdGhlIGRlZmF1bHQgdmFsdWUuCisKKzIuIENyZWF0ZSB0aGUgZmlsZSAifi8udmltL2Z0cGx1Z2luL2MudmltIiwgd2l0aCB0aGUgY29udGVudHM6ID4KKworCXNldGxvY2FsIHNvZnR0YWJzdG9wPTQKKwlub3JlbWFwIDxidWZmZXI+IDxMb2NhbExlYWRlcj5jIG8vKioqKioqKioqKioqKio8Q1I+PENSPi88RXNjPgorCitUcnkgZWRpdGluZyBhIEMgZmlsZS4gIFlvdSBzaG91bGQgbm90aWNlIHRoYXQgdGhlICdzb2Z0dGFic3RvcCcgb3B0aW9uIGlzIHNldAordG8gNC4gIEJ1dCB3aGVuIHlvdSBlZGl0IGFub3RoZXIgZmlsZSBpdCdzIHJlc2V0IHRvIHRoZSBkZWZhdWx0IHplcm8uICBUaGF0IGlzCitiZWNhdXNlIHRoZSAiOnNldGxvY2FsIiBjb21tYW5kIHdhcyB1c2VkLiAgVGhpcyBzZXRzIHRoZSAnc29mdHRhYnN0b3AnIG9wdGlvbgorb25seSBsb2NhbGx5IHRvIHRoZSBidWZmZXIuICBBcyBzb29uIGFzIHlvdSBlZGl0IGFub3RoZXIgYnVmZmVyLCBpdCB3aWxsIGJlCitzZXQgdG8gdGhlIHZhbHVlIHNldCBmb3IgdGhhdCBidWZmZXIuICBGb3IgYSBuZXcgYnVmZmVyIGl0IHdpbGwgZ2V0IHRoZQorZGVmYXVsdCB2YWx1ZSBvciB0aGUgdmFsdWUgZnJvbSB0aGUgbGFzdCAiOnNldCIgY29tbWFuZC4KKworTGlrZXdpc2UsIHRoZSBtYXBwaW5nIGZvciAiXGMiIHdpbGwgZGlzYXBwZWFyIHdoZW4gZWRpdGluZyBhbm90aGVyIGJ1ZmZlci4KK1RoZSAiOm1hcCA8YnVmZmVyPiIgY29tbWFuZCBjcmVhdGVzIGEgbWFwcGluZyB0aGF0IGlzIGxvY2FsIHRvIHRoZSBjdXJyZW50CitidWZmZXIuICBUaGlzIHdvcmtzIHdpdGggYW55IG1hcHBpbmcgY29tbWFuZDogIjptYXAhIiwgIjp2bWFwIiwgZXRjLiAgVGhlCit8PExvY2FsTGVhZGVyPnwgaW4gdGhlIG1hcHBpbmcgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdmFsdWUgb2YgIm1hcGxvY2FsbGVhZGVyIi4KKworWW91IGNhbiBmaW5kIGV4YW1wbGVzIGZvciBmaWxldHlwZSBwbHVnaW5zIGluIHRoaXMgZGlyZWN0b3J5OiA+CisKKwkkVklNUlVOVElNRS9mdHBsdWdpbi8KKworTW9yZSBkZXRhaWxzIGFib3V0IHdyaXRpbmcgYSBmaWxldHlwZSBwbHVnaW4gY2FuIGJlIGZvdW5kIGhlcmU6Cit8d3JpdGUtcGx1Z2lufC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDMuMioJQWRkaW5nIGEgZmlsZXR5cGUKKworSWYgeW91IGFyZSB1c2luZyBhIHR5cGUgb2YgZmlsZSB0aGF0IGlzIG5vdCByZWNvZ25pemVkIGJ5IFZpbSwgdGhpcyBpcyBob3cgdG8KK2dldCBpdCByZWNvZ25pemVkLiAgWW91IG5lZWQgYSBydW50aW1lIGRpcmVjdG9yeSBvZiB5b3VyIG93bi4gIFNlZQorfHlvdXItcnVudGltZS1kaXJ8IGFib3ZlLgorCitDcmVhdGUgYSBmaWxlICJmaWxldHlwZS52aW0iIHdoaWNoIGNvbnRhaW5zIGFuIGF1dG9jb21tYW5kIGZvciB5b3VyIGZpbGV0eXBlLgorKEF1dG9jb21tYW5kcyB3ZXJlIGV4cGxhaW5lZCBpbiBzZWN0aW9uIHw0MC4zfC4pICBFeGFtcGxlOiA+CisKKwlhdWdyb3VwIGZpbGV0eXBlZGV0ZWN0CisJYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoueHl6CXNldGYgeHl6CisJYXVncm91cCBFTkQKKworVGhpcyB3aWxsIHJlY29nbml6ZSBhbGwgZmlsZXMgdGhhdCBlbmQgaW4gIi54eXoiIGFzIHRoZSAieHl6IiBmaWxldHlwZS4gIFRoZQorIjphdWdyb3VwIiBjb21tYW5kcyBwdXQgdGhpcyBhdXRvY29tbWFuZCBpbiB0aGUgImZpbGV0eXBlZGV0ZWN0IiBncm91cC4gIFRoaXMKK2FsbG93cyByZW1vdmluZyBhbGwgYXV0b2NvbW1hbmRzIGZvciBmaWxldHlwZSBkZXRlY3Rpb24gd2hlbiBkb2luZyAiOmZpbGV0eXBlCitvZmYiLiAgVGhlICJzZXRmIiBjb21tYW5kIHdpbGwgc2V0IHRoZSAnZmlsZXR5cGUnIG9wdGlvbiB0byBpdHMgYXJndW1lbnQsCit1bmxlc3MgaXQgd2FzIHNldCBhbHJlYWR5LiAgVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGF0ICdmaWxldHlwZScgaXNuJ3Qgc2V0Cit0d2ljZS4KKworWW91IGNhbiB1c2UgbWFueSBkaWZmZXJlbnQgcGF0dGVybnMgdG8gbWF0Y2ggdGhlIG5hbWUgb2YgeW91ciBmaWxlLiAgRGlyZWN0b3J5CituYW1lcyBjYW4gYWxzbyBiZSBpbmNsdWRlZC4gIFNlZSB8YXV0b2NtZC1wYXR0ZXJuc3wuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVzCit1bmRlciAiL3Vzci9zaGFyZS9zY3JpcHRzLyIgYXJlIGFsbCAicnVieSIgZmlsZXMsIGJ1dCBkb24ndCBoYXZlIHRoZSBleHBlY3RlZAorZmlsZSBuYW1lIGV4dGVuc2lvbi4gIEFkZGluZyB0aGlzIHRvIHRoZSBleGFtcGxlIGFib3ZlOiA+CisKKwlhdWdyb3VwIGZpbGV0eXBlZGV0ZWN0CisJYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoueHl6CQkJc2V0ZiB4eXoKKwlhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL3Vzci9zaGFyZS9zY3JpcHRzLyoJc2V0ZiBydWJ5CisJYXVncm91cCBFTkQKKworSG93ZXZlciwgaWYgeW91IG5vdyBlZGl0IGEgZmlsZSAvdXNyL3NoYXJlL3NjcmlwdHMvUkVBRE1FLnR4dCwgdGhpcyBpcyBub3QgYQorcnVieSBmaWxlLiAgVGhlIGRhbmdlciBvZiBhIHBhdHRlcm4gZW5kaW5nIGluICIqIiBpcyB0aGF0IGl0IHF1aWNrbHkgbWF0Y2hlcwordG9vIG1hbnkgZmlsZXMuICBUbyBhdm9pZCB0cm91YmxlIHdpdGggdGhpcywgcHV0IHRoZSBmaWxldHlwZS52aW0gZmlsZSBpbgorYW5vdGhlciBkaXJlY3RvcnksIG9uZSB0aGF0IGlzIGF0IHRoZSBlbmQgb2YgJ3J1bnRpbWVwYXRoJy4gIEZvciBVbml4IGZvcgorZXhhbXBsZSwgeW91IGNvdWxkIHVzZSAifi8udmltL2FmdGVyL2ZpbGV0eXBlLnZpbSIuCisgICBZb3Ugbm93IHB1dCB0aGUgZGV0ZWN0aW9uIG9mIHRleHQgZmlsZXMgaW4gfi8udmltL2ZpbGV0eXBlLnZpbTogPgorCisJYXVncm91cCBmaWxldHlwZWRldGVjdAorCWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnR4dAkJCXNldGYgdGV4dAorCWF1Z3JvdXAgRU5ECisKK1RoYXQgZmlsZSBpcyBmb3VuZCBpbiAncnVudGltZXBhdGgnIGZpcnN0LiAgVGhlbiB1c2UgdGhpcyBpbgorfi8udmltL2FmdGVyL2ZpbGV0eXBlLnZpbSwgd2hpY2ggaXMgZm91bmQgbGFzdDogPgorCisJYXVncm91cCBmaWxldHlwZWRldGVjdAorCWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvdXNyL3NoYXJlL3NjcmlwdHMvKglzZXRmIHJ1YnkKKwlhdWdyb3VwIEVORAorCitXaGF0IHdpbGwgaGFwcGVuIG5vdyBpcyB0aGF0IFZpbSBzZWFyY2hlcyBmb3IgImZpbGV0eXBlLnZpbSIgZmlsZXMgaW4gZWFjaAorZGlyZWN0b3J5IGluICdydW50aW1lcGF0aCcuICBGaXJzdCB+Ly52aW0vZmlsZXR5cGUudmltIGlzIGZvdW5kLiAgVGhlCithdXRvY29tbWFuZCB0byBjYXRjaCAqLnR4dCBmaWxlcyBpcyBkZWZpbmVkIHRoZXJlLiAgVGhlbiBWaW0gZmluZHMgdGhlCitmaWxldHlwZS52aW0gZmlsZSBpbiAkVklNUlVOVElNRSwgd2hpY2ggaXMgaGFsZndheSAncnVudGltZXBhdGgnLiAgRmluYWxseQorfi8udmltL2FmdGVyL2ZpbGV0eXBlLnZpbSBpcyBmb3VuZCBhbmQgdGhlIGF1dG9jb21tYW5kIGZvciBkZXRlY3RpbmcgcnVieQorZmlsZXMgaW4gL3Vzci9zaGFyZS9zY3JpcHRzIGlzIGFkZGVkLgorICAgV2hlbiB5b3Ugbm93IGVkaXQgL3Vzci9zaGFyZS9zY3JpcHRzL1JFQURNRS50eHQsIHRoZSBhdXRvY29tbWFuZHMgYXJlCitjaGVja2VkIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgZGVmaW5lZC4gIFRoZSAqLnR4dCBwYXR0ZXJuIG1hdGNoZXMsCit0aHVzICJzZXRmIHRleHQiIGlzIGV4ZWN1dGVkIHRvIHNldCB0aGUgZmlsZXR5cGUgdG8gInRleHQiLiAgVGhlIHBhdHRlcm4gZm9yCitydWJ5IG1hdGNoZXMgdG9vLCBhbmQgdGhlICJzZXRmIHJ1YnkiIGlzIGV4ZWN1dGVkLiAgQnV0IHNpbmNlICdmaWxldHlwZScgd2FzCithbHJlYWR5IHNldCB0byAidGV4dCIsIG5vdGhpbmcgaGFwcGVucyBoZXJlLgorICAgV2hlbiB5b3UgZWRpdCB0aGUgZmlsZSAvdXNyL3NoYXJlL3NjcmlwdHMvZm9vYmFyIHRoZSBzYW1lIGF1dG9jb21tYW5kcyBhcmUKK2NoZWNrZWQuICBPbmx5IHRoZSBvbmUgZm9yIHJ1YnkgbWF0Y2hlcyBhbmQgInNldGYgcnVieSIgc2V0cyAnZmlsZXR5cGUnIHRvCitydWJ5LgorCisKK1JFQ09HTklaSU5HIEJZIENPTlRFTlRTCisKK0lmIHlvdXIgZmlsZSBjYW5ub3QgYmUgcmVjb2duaXplZCBieSBpdHMgZmlsZSBuYW1lLCB5b3UgbWlnaHQgYmUgYWJsZSB0bworcmVjb2duaXplIGl0IGJ5IGl0cyBjb250ZW50cy4gIEZvciBleGFtcGxlLCBtYW55IHNjcmlwdCBmaWxlcyBzdGFydCB3aXRoIGEKK2xpbmUgbGlrZToKKworCSMhL2Jpbi94eXogfgorCitUbyByZWNvZ25pemUgdGhpcyBzY3JpcHQgY3JlYXRlIGEgZmlsZSAic2NyaXB0cy52aW0iIGluIHlvdXIgcnVudGltZSBkaXJlY3RvcnkKKyhzYW1lIHBsYWNlIHdoZXJlIGZpbGV0eXBlLnZpbSBnb2VzKS4gIEl0IG1pZ2h0IGxvb2sgbGlrZSB0aGlzOiA+CisKKwlpZiBkaWRfZmlsZXR5cGUoKQorCSAgZmluaXNoCisJZW5kaWYKKwlpZiBnZXRsaW5lKDEpID1+ICdeIyEuKlsvXFxdeHl6XD4nCisJICBzZXRmIHh5egorCWVuZGlmCisKK1RoZSBmaXJzdCBjaGVjayB3aXRoIGRpZF9maWxldHlwZSgpIGlzIHRvIGF2b2lkIHRoYXQgeW91IHdpbGwgY2hlY2sgdGhlCitjb250ZW50cyBvZiBmaWxlcyBmb3Igd2hpY2ggdGhlIGZpbGV0eXBlIHdhcyBhbHJlYWR5IGRldGVjdGVkIGJ5IHRoZSBmaWxlCituYW1lLiAgVGhhdCBhdm9pZHMgd2FzdGluZyB0aW1lIG9uIGNoZWNraW5nIHRoZSBmaWxlIHdoZW4gdGhlICJzZXRmIiBjb21tYW5kCit3b24ndCBkbyBhbnl0aGluZy4KKyAgIFRoZSBzY3JpcHRzLnZpbSBmaWxlIGlzIHNvdXJjZWQgYnkgYW4gYXV0b2NvbW1hbmQgaW4gdGhlIGRlZmF1bHQKK2ZpbGV0eXBlLnZpbSBmaWxlLiAgVGhlcmVmb3JlLCB0aGUgb3JkZXIgb2YgY2hlY2tzIGlzOgorCisJMS4gZmlsZXR5cGUudmltIGZpbGVzIGJlZm9yZSAkVklNUlVOVElNRSBpbiAncnVudGltZXBhdGgnCisJMi4gZmlyc3QgcGFydCBvZiAkVklNUlVOVElNRS9maWxldHlwZS52aW0KKwkzLiBhbGwgc2NyaXB0cy52aW0gZmlsZXMgaW4gJ3J1bnRpbWVwYXRoJworCTQuIHJlbWFpbmRlciBvZiAkVklNUlVOVElNRS9maWxldHlwZS52aW0KKwk1LiBmaWxldHlwZS52aW0gZmlsZXMgYWZ0ZXIgJFZJTVJVTlRJTUUgaW4gJ3J1bnRpbWVwYXRoJworCitJZiB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IGZvciB5b3UsIGFkZCBhbiBhdXRvY29tbWFuZCB0aGF0IG1hdGNoZXMgYWxsIGZpbGVzCithbmQgc291cmNlcyBhIHNjcmlwdCBvciBleGVjdXRlcyBhIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl80NC50eHR8ICBZb3VyIG93biBzeW50YXggaGlnaGxpZ2h0ZWQKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfNDQudHh0IGIvcnVudGltZS9kb2MvdXNyXzQ0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjFjNDFlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzQ0LnR4dApAQCAtMCwwICsxLDcxOSBAQAorKnVzcl80NC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAyIE9jdCAxMAorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJIFlvdXIgb3duIHN5bnRheCBoaWdobGlnaHRlZAorCisKK1ZpbSBjb21lcyB3aXRoIGhpZ2hsaWdodGluZyBmb3IgYSBjb3VwbGUgb2YgaHVuZHJlZCBkaWZmZXJlbnQgZmlsZSB0eXBlcy4gIElmCit0aGUgZmlsZSB5b3UgYXJlIGVkaXRpbmcgaXNuJ3QgaW5jbHVkZWQsIHJlYWQgdGhpcyBjaGFwdGVyIHRvIGZpbmQgb3V0IGhvdyB0bworZ2V0IHRoaXMgdHlwZSBvZiBmaWxlIGhpZ2hsaWdodGVkLiAgQWxzbyBzZWUgfDpzeW4tZGVmaW5lfCBpbiB0aGUgcmVmZXJlbmNlCittYW51YWwuCisKK3w0NC4xfAlCYXNpYyBzeW50YXggY29tbWFuZHMKK3w0NC4yfAlLZXl3b3JkcworfDQ0LjN8CU1hdGNoZXMKK3w0NC40fAlSZWdpb25zCit8NDQuNXwJTmVzdGVkIGl0ZW1zCit8NDQuNnwJRm9sbG93aW5nIGdyb3VwcworfDQ0Ljd8CU90aGVyIGFyZ3VtZW50cworfDQ0Ljh8CUNsdXN0ZXJzCit8NDQuOXwJSW5jbHVkaW5nIGFub3RoZXIgc3ludGF4IGZpbGUKK3w0NC4xMHwJU3luY2hyb25pemluZworfDQ0LjExfAlJbnN0YWxsaW5nIGEgc3ludGF4IGZpbGUKK3w0NC4xMnwJUG9ydGFibGUgc3ludGF4IGZpbGUgbGF5b3V0CisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzQ1LnR4dHwgIFNlbGVjdCB5b3VyIGxhbmd1YWdlCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl80My50eHR8ICBVc2luZyBmaWxldHlwZXMKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ0LjEqCUJhc2ljIHN5bnRheCBjb21tYW5kcworCitVc2luZyBhbiBleGlzdGluZyBzeW50YXggZmlsZSB0byBzdGFydCB3aXRoIHdpbGwgc2F2ZSB5b3UgYSBsb3Qgb2YgdGltZS4gIFRyeQorZmluZGluZyBhIHN5bnRheCBmaWxlIGluICRWSU1SVU5USU1FL3N5bnRheCBmb3IgYSBsYW5ndWFnZSB0aGF0IGlzIHNpbWlsYXIuCitUaGVzZSBmaWxlcyB3aWxsIGFsc28gc2hvdyB5b3UgdGhlIG5vcm1hbCBsYXlvdXQgb2YgYSBzeW50YXggZmlsZS4gIFRvCit1bmRlcnN0YW5kIGl0LCB5b3UgbmVlZCB0byByZWFkIHRoZSBmb2xsb3dpbmcuCisKK0xldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2ljIGFyZ3VtZW50cy4gIEJlZm9yZSB3ZSBzdGFydCBkZWZpbmluZyBhbnkgbmV3CitzeW50YXgsIHdlIG5lZWQgdG8gY2xlYXIgb3V0IGFueSBvbGQgZGVmaW5pdGlvbnM6ID4KKworCTpzeW50YXggY2xlYXIKKworVGhpcyBpc24ndCByZXF1aXJlZCBpbiB0aGUgZmluYWwgc3ludGF4IGZpbGUsIGJ1dCB2ZXJ5IHVzZWZ1bCB3aGVuCitleHBlcmltZW50aW5nLgorCitUaGVyZSBhcmUgbW9yZSBzaW1wbGlmaWNhdGlvbnMgaW4gdGhpcyBjaGFwdGVyLiAgSWYgeW91IGFyZSB3cml0aW5nIGEgc3ludGF4CitmaWxlIHRvIGJlIHVzZWQgYnkgb3RoZXJzLCByZWFkIGFsbCB0aGUgd2F5IHRocm91Z2ggdGhlIGVuZCB0byBmaW5kIG91dCB0aGUKK2RldGFpbHMuCisKKworTElTVElORyBERUZJTkVEIElURU1TCisKK1RvIGNoZWNrIHdoaWNoIHN5bnRheCBpdGVtcyBhcmUgY3VycmVudGx5IGRlZmluZWQsIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpzeW50YXgKKworWW91IGNhbiB1c2UgdGhpcyB0byBjaGVjayB3aGljaCBpdGVtcyBoYXZlIGFjdHVhbGx5IGJlZW4gZGVmaW5lZC4gIFF1aXRlCit1c2VmdWwgd2hlbiB5b3UgYXJlIGV4cGVyaW1lbnRpbmcgd2l0aCBhIG5ldyBzeW50YXggZmlsZS4gIEl0IGFsc28gc2hvd3MgdGhlCitjb2xvcnMgdXNlZCBmb3IgZWFjaCBpdGVtLCB3aGljaCBoZWxwcyB0byBmaW5kIG91dCB3aGF0IGlzIHdoYXQuCisgICBUbyBsaXN0IHRoZSBpdGVtcyBpbiBhIHNwZWNpZmljIHN5bnRheCBncm91cCB1c2U6ID4KKworCTpzeW50YXggbGlzdCB7Z3JvdXAtbmFtZX0KKworVGhpcyBhbHNvIGNhbiBiZSB1c2VkIHRvIGxpc3QgY2x1c3RlcnMgKGV4cGxhaW5lZCBpbiB8NDQuOHwpLiAgSnVzdCBpbmNsdWRlCit0aGUgQCBpbiB0aGUgbmFtZS4KKworCitNQVRDSElORyBDQVNFCisKK1NvbWUgbGFuZ3VhZ2VzIGFyZSBub3QgY2FzZSBzZW5zaXRpdmUsIHN1Y2ggYXMgUGFzY2FsLiAgT3RoZXJzLCBzdWNoIGFzIEMsIGFyZQorY2FzZSBzZW5zaXRpdmUuICBZb3UgbmVlZCB0byB0ZWxsIHdoaWNoIHR5cGUgeW91IGhhdmUgd2l0aCB0aGUgZm9sbG93aW5nCitjb21tYW5kczogPgorCTpzeW50YXggY2FzZSBtYXRjaAorCTpzeW50YXggY2FzZSBpZ25vcmUKKworVGhlICJtYXRjaCIgYXJndW1lbnQgbWVhbnMgdGhhdCBWaW0gd2lsbCBtYXRjaCB0aGUgY2FzZSBvZiBzeW50YXggZWxlbWVudHMuCitUaGVyZWZvcmUsICJpbnQiIGRpZmZlcnMgZnJvbSAiSW50IiBhbmQgIklOVCIuICBJZiB0aGUgImlnbm9yZSIgYXJndW1lbnQgaXMKK3VzZWQsIHRoZSBmb2xsb3dpbmcgYXJlIGVxdWl2YWxlbnQ6ICJQcm9jZWR1cmUiLCAiUFJPQ0VEVVJFIiBhbmQgInByb2NlZHVyZSIuCisgICBUaGUgIjpzeW50YXggY2FzZSIgY29tbWFuZHMgY2FuIGFwcGVhciBhbnl3aGVyZSBpbiBhIHN5bnRheCBmaWxlIGFuZCBhZmZlY3QKK3RoZSBzeW50YXggZGVmaW5pdGlvbnMgdGhhdCBmb2xsb3cuICBJbiBtb3N0IGNhc2VzLCB5b3UgaGF2ZSBvbmx5IG9uZSAiOnN5bnRheAorY2FzZSIgY29tbWFuZCBpbiB5b3VyIHN5bnRheCBmaWxlOyBpZiB5b3Ugd29yayB3aXRoIGFuIHVudXN1YWwgbGFuZ3VhZ2UgdGhhdAorY29udGFpbnMgYm90aCBjYXNlLXNlbnNpdGl2ZSBhbmQgbm9uLWNhc2Utc2Vuc2l0aXZlIGVsZW1lbnRzLCBob3dldmVyLCB5b3UgY2FuCitzY2F0dGVyIHRoZSAiOnN5bnRheCBjYXNlIiBjb21tYW5kIHRocm91Z2hvdXQgdGhlIGZpbGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ0LjIqCUtleXdvcmRzCisKK1RoZSBtb3N0IGJhc2ljIHN5bnRheCBlbGVtZW50cyBhcmUga2V5d29yZHMuICBUbyBkZWZpbmUgYSBrZXl3b3JkLCB1c2UgdGhlCitmb2xsb3dpbmcgZm9ybTogPgorCisJOnN5bnRheCBrZXl3b3JkIHtncm91cH0ge2tleXdvcmR9IC4uLgorCitUaGUge2dyb3VwfSBpcyB0aGUgbmFtZSBvZiBhIHN5bnRheCBncm91cC4gIFdpdGggdGhlICI6aGlnaGxpZ2h0IiBjb21tYW5kIHlvdQorY2FuIGFzc2lnbiBjb2xvcnMgdG8gYSB7Z3JvdXB9LiAgVGhlIHtrZXl3b3JkfSBhcmd1bWVudCBpcyBhbiBhY3R1YWwga2V5d29yZC4KK0hlcmUgYXJlIGEgZmV3IGV4YW1wbGVzOiA+CisKKwk6c3ludGF4IGtleXdvcmQgeFR5cGUgaW50IGxvbmcgY2hhcgorCTpzeW50YXgga2V5d29yZCB4U3RhdGVtZW50IGlmIHRoZW4gZWxzZSBlbmRpZgorCitUaGlzIGV4YW1wbGUgdXNlcyB0aGUgZ3JvdXAgbmFtZXMgInhUeXBlIiBhbmQgInhTdGF0ZW1lbnQiLiAgQnkgY29udmVudGlvbiwKK2VhY2ggZ3JvdXAgbmFtZSBpcyBwcmVmaXhlZCBieSB0aGUgZmlsZXR5cGUgZm9yIHRoZSBsYW5ndWFnZSBiZWluZyBkZWZpbmVkLgorVGhpcyBleGFtcGxlIGRlZmluZXMgc3ludGF4IGZvciB0aGUgeCBsYW5ndWFnZSAoZVhhbXBsZSBsYW5ndWFnZSB3aXRob3V0IGFuCitpbnRlcmVzdGluZyBuYW1lKS4gIEluIGEgc3ludGF4IGZpbGUgZm9yICJjc2giIHNjcmlwdHMgdGhlIG5hbWUgImNzaFR5cGUiCit3b3VsZCBiZSB1c2VkLiAgVGh1cyB0aGUgcHJlZml4IGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiAnZmlsZXR5cGUnLgorICAgVGhlc2UgY29tbWFuZHMgY2F1c2UgdGhlIHdvcmRzICJpbnQiLCAibG9uZyIgYW5kICJjaGFyIiB0byBiZSBoaWdobGlnaHRlZAorb25lIHdheSBhbmQgdGhlIHdvcmRzICJpZiIsICJ0aGVuIiwgImVsc2UiIGFuZCAiZW5kaWYiIHRvIGJlIGhpZ2hsaWdodGVkCithbm90aGVyIHdheS4gIE5vdyB5b3UgbmVlZCB0byBjb25uZWN0IHRoZSB4IGdyb3VwIG5hbWVzIHRvIHN0YW5kYXJkIFZpbQorbmFtZXMuICBZb3UgZG8gdGhpcyB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6ID4KKworCTpoaWdobGlnaHQgbGluayB4VHlwZSBUeXBlCisJOmhpZ2hsaWdodCBsaW5rIHhTdGF0ZW1lbnQgU3RhdGVtZW50CisKK1RoaXMgdGVsbHMgVmltIHRvIGhpZ2hsaWdodCAieFR5cGUiIGxpa2UgIlR5cGUiIGFuZCAieFN0YXRlbWVudCIgbGlrZQorIlN0YXRlbWVudCIuICBTZWUgfGdyb3VwLW5hbWV8IGZvciB0aGUgc3RhbmRhcmQgbmFtZXMuCisKKworVU5VU1VBTCBLRVlXT1JEUworCitUaGUgY2hhcmFjdGVycyB1c2VkIGluIGEga2V5d29yZCBtdXN0IGJlIGluIHRoZSAnaXNrZXl3b3JkJyBvcHRpb24uICBJZiB5b3UKK3VzZSBhbm90aGVyIGNoYXJhY3RlciwgdGhlIHdvcmQgd2lsbCBuZXZlciBtYXRjaC4gIFZpbSBkb2Vzbid0IGdpdmUgYSB3YXJuaW5nCittZXNzYWdlIGZvciB0aGlzLgorICAgVGhlIHggbGFuZ3VhZ2UgdXNlcyB0aGUgJy0nIGNoYXJhY3RlciBpbiBrZXl3b3Jkcy4gIFRoaXMgaXMgaG93IGl0J3MgZG9uZToKKz4KKwk6c2V0bG9jYWwgaXNrZXl3b3JkKz0tCisJOnN5bnRheCBrZXl3b3JkIHhTdGF0ZW1lbnQgd2hlbi1ub3QKKworVGhlICI6c2V0bG9jYWwiIGNvbW1hbmQgaXMgdXNlZCB0byBjaGFuZ2UgJ2lza2V5d29yZCcgb25seSBmb3IgdGhlIGN1cnJlbnQKK2J1ZmZlci4gIFN0aWxsIGl0IGRvZXMgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBjb21tYW5kcyBsaWtlICJ3IiBhbmQgIioiLiAgSWYKK3RoYXQgaXMgbm90IHdhbnRlZCwgZG9uJ3QgZGVmaW5lIGEga2V5d29yZCBidXQgdXNlIGEgbWF0Y2ggKGV4cGxhaW5lZCBpbiB0aGUKK25leHQgc2VjdGlvbikuCisKK1RoZSB4IGxhbmd1YWdlIGFsbG93cyBmb3IgYWJicmV2aWF0aW9ucy4gIEZvciBleGFtcGxlLCAibmV4dCIgY2FuIGJlCithYmJyZXZpYXRlZCB0byAibiIsICJuZSIgb3IgIm5leCIuICBZb3UgY2FuIGRlZmluZSB0aGVtIGJ5IHVzaW5nIHRoaXMgY29tbWFuZDoKKz4KKwk6c3ludGF4IGtleXdvcmQgeFN0YXRlbWVudCBuW2V4dF0KKworVGhpcyBkb2Vzbid0IG1hdGNoICJuZXh0b25lIiwga2V5d29yZHMgYWx3YXlzIG1hdGNoIHdob2xlIHdvcmRzIG9ubHkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ0LjMqCU1hdGNoZXMKKworQ29uc2lkZXIgZGVmaW5pbmcgc29tZXRoaW5nIGEgYml0IG1vcmUgY29tcGxleC4gIFlvdSB3YW50IHRvIG1hdGNoIG9yZGluYXJ5CitpZGVudGlmaWVycy4gIFRvIGRvIHRoaXMsIHlvdSBkZWZpbmUgYSBtYXRjaCBzeW50YXggaXRlbS4gIFRoaXMgb25lIG1hdGNoZXMKK2FueSB3b3JkIGNvbnNpc3Rpbmcgb2Ygb25seSBsb3dlcmNhc2UgbGV0dGVyczogPgorCisJOnN5bnRheCBtYXRjaCB4SWRlbnRpZmllciAvXDxcbFwrXD4vCis8CisJTm90ZToKKwlLZXl3b3JkcyBvdmVycnVsZSBhbnkgb3RoZXIgc3ludGF4IGl0ZW0uICBUaHVzIHRoZSBrZXl3b3JkcyAiaWYiLAorCSJ0aGVuIiwgZXRjLiwgd2lsbCBiZSBrZXl3b3JkcywgYXMgZGVmaW5lZCB3aXRoIHRoZSAiOnN5bnRheCBrZXl3b3JkIgorCWNvbW1hbmRzIGFib3ZlLCBldmVuIHRob3VnaCB0aGV5IGFsc28gbWF0Y2ggdGhlIHBhdHRlcm4gZm9yCisJeElkZW50aWZpZXIuCisKK1RoZSBwYXJ0IGF0IHRoZSBlbmQgaXMgYSBwYXR0ZXJuLCBsaWtlIGl0J3MgdXNlZCBmb3Igc2VhcmNoaW5nLiAgVGhlIC8vIGlzCit1c2VkIHRvIHN1cnJvdW5kIHRoZSBwYXR0ZXJuIChsaWtlIGhvdyBpdCdzIGRvbmUgaW4gYSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQpLgorWW91IGNhbiB1c2UgYW55IG90aGVyIGNoYXJhY3RlciwgbGlrZSBhIHBsdXMgb3IgYSBxdW90ZS4KKworTm93IGRlZmluZSBhIG1hdGNoIGZvciBhIGNvbW1lbnQuICBJbiB0aGUgeCBsYW5ndWFnZSBpdCBpcyBhbnl0aGluZyBmcm9tICMgdG8KK3RoZSBlbmQgb2YgYSBsaW5lOiA+CisKKwk6c3ludGF4IG1hdGNoIHhDb21tZW50IC8jLiovCisKK1NpbmNlIHlvdSBjYW4gdXNlIGFueSBzZWFyY2ggcGF0dGVybiwgeW91IGNhbiBoaWdobGlnaHQgdmVyeSBjb21wbGV4IHRoaW5ncword2l0aCBhIG1hdGNoIGl0ZW0uICBTZWUgfHBhdHRlcm58IGZvciBoZWxwIG9uIHNlYXJjaCBwYXR0ZXJucy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDQuNCoJUmVnaW9ucworCitJbiB0aGUgZXhhbXBsZSB4IGxhbmd1YWdlLCBzdHJpbmdzIGFyZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGF0aW9uIG1hcmtzICgiKS4KK1RvIGhpZ2hsaWdodCBzdHJpbmdzIHlvdSBkZWZpbmUgYSByZWdpb24uICBZb3UgbmVlZCBhIHJlZ2lvbiBzdGFydCAoZG91YmxlCitxdW90ZSkgYW5kIGEgcmVnaW9uIGVuZCAoZG91YmxlIHF1b3RlKS4gIFRoZSBkZWZpbml0aW9uIGlzIGFzIGZvbGxvd3M6ID4KKworCTpzeW50YXggcmVnaW9uIHhTdHJpbmcgc3RhcnQ9LyIvIGVuZD0vIi8KKworVGhlICJzdGFydCIgYW5kICJlbmQiIGRpcmVjdGl2ZXMgZGVmaW5lIHRoZSBwYXR0ZXJucyB1c2VkIHRvIGZpbmQgdGhlIHN0YXJ0CithbmQgZW5kIG9mIHRoZSByZWdpb24uICBCdXQgd2hhdCBhYm91dCBzdHJpbmdzIHRoYXQgbG9vayBsaWtlIHRoaXM/CisKKwkiQSBzdHJpbmcgd2l0aCBhIGRvdWJsZSBxdW90ZSAoXCIpIGluIGl0IiB+CisKK1RoaXMgY3JlYXRlcyBhIHByb2JsZW06IFRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN0cmluZword2lsbCBlbmQgdGhlIHJlZ2lvbi4gIFlvdSBuZWVkIHRvIHRlbGwgVmltIHRvIHNraXAgb3ZlciBhbnkgZXNjYXBlZCBkb3VibGUKK3F1b3RlcyBpbiB0aGUgc3RyaW5nLiAgRG8gdGhpcyB3aXRoIHRoZSBza2lwIGtleXdvcmQ6ID4KKworCTpzeW50YXggcmVnaW9uIHhTdHJpbmcgc3RhcnQ9LyIvIHNraXA9L1xcIi8gZW5kPS8iLworCitUaGUgZG91YmxlIGJhY2tzbGFzaCBtYXRjaGVzIGEgc2luZ2xlIGJhY2tzbGFzaCwgc2luY2UgdGhlIGJhY2tzbGFzaCBpcyBhCitzcGVjaWFsIGNoYXJhY3RlciBpbiBzZWFyY2ggcGF0dGVybnMuCisKK1doZW4gdG8gdXNlIGEgcmVnaW9uIGluc3RlYWQgb2YgYSBtYXRjaD8gIFRoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCBhIG1hdGNoCitpdGVtIGlzIGEgc2luZ2xlIHBhdHRlcm4sIHdoaWNoIG11c3QgbWF0Y2ggYXMgYSB3aG9sZS4gIEEgcmVnaW9uIHN0YXJ0cyBhcworc29vbiBhcyB0aGUgInN0YXJ0IiBwYXR0ZXJuIG1hdGNoZXMuICBXaGV0aGVyIHRoZSAiZW5kIiBwYXR0ZXJuIGlzIGZvdW5kIG9yCitub3QgZG9lc24ndCBtYXR0ZXIuICBUaHVzIHdoZW4gdGhlIGl0ZW0gZGVwZW5kcyBvbiB0aGUgImVuZCIgcGF0dGVybiB0byBtYXRjaCwKK3lvdSBjYW5ub3QgdXNlIGEgcmVnaW9uLiAgT3RoZXJ3aXNlLCByZWdpb25zIGFyZSBvZnRlbiBzaW1wbGVyIHRvIGRlZmluZS4gIEFuZAoraXQgaXMgZWFzaWVyIHRvIHVzZSBuZXN0ZWQgaXRlbXMsIGFzIGlzIGV4cGxhaW5lZCBpbiB0aGUgbmV4dCBzZWN0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0NC41KglOZXN0ZWQgaXRlbXMKKworVGFrZSBhIGxvb2sgYXQgdGhpcyBjb21tZW50OgorCisJJUdldCBpbnB1dCAgVE9ETzogU2tpcCB3aGl0ZSBzcGFjZSB+CisKK1lvdSB3YW50IHRvIGhpZ2hsaWdodCBUT0RPIGluIGJpZyB5ZWxsb3cgbGV0dGVycywgZXZlbiB0aG91Z2ggaXQgaXMgaW4gYQorY29tbWVudCB0aGF0IGlzIGhpZ2hsaWdodGVkIGJsdWUuICBUbyBsZXQgVmltIGtub3cgYWJvdXQgdGhpcywgeW91IGRlZmluZSB0aGUKK2ZvbGxvd2luZyBzeW50YXggZ3JvdXBzOiA+CisKKwk6c3ludGF4IGtleXdvcmQgeFRvZG8gVE9ETyBjb250YWluZWQKKwk6c3ludGF4IG1hdGNoIHhDb21tZW50IC8lLiovIGNvbnRhaW5zPXhUb2RvCisKK0luIHRoZSBmaXJzdCBsaW5lLCB0aGUgImNvbnRhaW5lZCIgYXJndW1lbnQgdGVsbHMgVmltIHRoYXQgdGhpcyBrZXl3b3JkIGNhbgorZXhpc3Qgb25seSBpbnNpZGUgYW5vdGhlciBzeW50YXggaXRlbS4gIFRoZSBuZXh0IGxpbmUgaGFzICJjb250YWlucz14VG9kbyIuCitUaGlzIGluZGljYXRlcyB0aGF0IHRoZSB4VG9kbyBzeW50YXggZWxlbWVudCBpcyBpbnNpZGUgaXQuICBUaGUgcmVzdWx0IGlzIHRoYXQKK3RoZSBjb21tZW50IGxpbmUgYXMgYSB3aG9sZSBpcyBtYXRjaGVkIHdpdGggInhDb21tZW50IiBhbmQgbWFkZSBibHVlLiAgVGhlCit3b3JkIFRPRE8gaW5zaWRlIGl0IGlzIG1hdGNoZWQgYnkgeFRvZG8gYW5kIGhpZ2hsaWdodGVkIHllbGxvdyAoaGlnaGxpZ2h0aW5nCitmb3IgeFRvZG8gd2FzIHNldHVwIGZvciB0aGlzKS4KKworCitSRUNVUlNJVkUgTkVTVElORworCitUaGUgeCBsYW5ndWFnZSBkZWZpbmVzIGNvZGUgYmxvY2tzIGluIGN1cmx5IGJyYWNlcy4gIEFuZCBhIGNvZGUgYmxvY2sgbWF5Citjb250YWluIG90aGVyIGNvZGUgYmxvY2tzLiAgVGhpcyBjYW4gYmUgZGVmaW5lZCB0aGlzIHdheTogPgorCisJOnN5bnRheCByZWdpb24geEJsb2NrIHN0YXJ0PS97LyBlbmQ9L30vIGNvbnRhaW5zPXhCbG9jaworCitTdXBwb3NlIHlvdSBoYXZlIHRoaXMgdGV4dDoKKworCXdoaWxlIGkgPCBiIHsgfgorCQlpZiBhIHsgfgorCQkJYiA9IGM7IH4KKwkJfSB+CisJfSB+CisKK0ZpcnN0IGEgeEJsb2NrIHN0YXJ0cyBhdCB0aGUgeyBpbiB0aGUgZmlyc3QgbGluZS4gIEluIHRoZSBzZWNvbmQgbGluZSBhbm90aGVyCit7IGlzIGZvdW5kLiAgU2luY2Ugd2UgYXJlIGluc2lkZSBhIHhCbG9jayBpdGVtLCBhbmQgaXQgY29udGFpbnMgaXRzZWxmLCBhCituZXN0ZWQgeEJsb2NrIGl0ZW0gd2lsbCBzdGFydCBoZXJlLiAgVGh1cyB0aGUgImIgPSBjIiBsaW5lIGlzIGluc2lkZSB0aGUKK3NlY29uZCBsZXZlbCB4QmxvY2sgcmVnaW9uLiAgVGhlbiBhIH0gaXMgZm91bmQgaW4gdGhlIG5leHQgbGluZSwgd2hpY2ggbWF0Y2hlcword2l0aCB0aGUgZW5kIHBhdHRlcm4gb2YgdGhlIHJlZ2lvbi4gIFRoaXMgZW5kcyB0aGUgbmVzdGVkIHhCbG9jay4gIEJlY2F1c2UgdGhlCit9IGlzIGluY2x1ZGVkIGluIHRoZSBuZXN0ZWQgcmVnaW9uLCBpdCBpcyBoaWRkZW4gZnJvbSB0aGUgZmlyc3QgeEJsb2NrIHJlZ2lvbi4KK1RoZW4gYXQgdGhlIGxhc3QgfSB0aGUgZmlyc3QgeEJsb2NrIHJlZ2lvbiBlbmRzLgorCisKK0tFRVBJTkcgVEhFIEVORAorCitDb25zaWRlciB0aGUgZm9sbG93aW5nIHR3byBzeW50YXggaXRlbXM6ID4KKworCTpzeW50YXggcmVnaW9uIHhDb21tZW50IHN0YXJ0PS8lLyBlbmQ9LyQvIGNvbnRhaW5lZAorCTpzeW50YXggcmVnaW9uIHhQcmVQcm9jIHN0YXJ0PS8jLyBlbmQ9LyQvIGNvbnRhaW5zPXhDb21tZW50CisKK1lvdSBkZWZpbmUgYSBjb21tZW50IGFzIGFueXRoaW5nIGZyb20gJSB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgQQorcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyBhbnl0aGluZyBmcm9tICMgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gIEJlY2F1c2UgeW91CitjYW4gaGF2ZSBhIGNvbW1lbnQgb24gYSBwcmVwcm9jZXNzb3IgbGluZSwgdGhlIHByZXByb2Nlc3NvciBkZWZpbml0aW9uCitpbmNsdWRlcyBhICJjb250YWlucz14Q29tbWVudCIgYXJndW1lbnQuICBOb3cgbG9vayB3aGF0IGhhcHBlbnMgd2l0aCB0aGlzCit0ZXh0OgorCisJI2RlZmluZSBYID0gWSAgJSBDb21tZW50IHRleHQgfgorCWludCBmb28gPSAxOyB+CisKK1doYXQgeW91IHNlZSBpcyB0aGF0IHRoZSBzZWNvbmQgbGluZSBpcyBhbHNvIGhpZ2hsaWdodGVkIGFzIHhQcmVQcm9jLiAgVGhlCitwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIHNob3VsZCBlbmQgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4gIFRoYXQgaXMgd2h5Cit5b3UgaGF2ZSB1c2VkICJlbmQ9LyQvIi4gIFNvIHdoYXQgaXMgZ29pbmcgd3Jvbmc/CisgICBUaGUgcHJvYmxlbSBpcyB0aGUgY29udGFpbmVkIGNvbW1lbnQuICBUaGUgY29tbWVudCBzdGFydHMgd2l0aCAlIGFuZCBlbmRzCithdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgQWZ0ZXIgdGhlIGNvbW1lbnQgZW5kcywgdGhlIHByZXByb2Nlc3NvciBzeW50YXgKK2NvbnRpbnVlcy4gIFRoaXMgaXMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGluZSBoYXMgYmVlbiBzZWVuLCBzbyB0aGUgbmV4dAorbGluZSBpcyBpbmNsdWRlZCBhcyB3ZWxsLgorICAgVG8gYXZvaWQgdGhpcyBwcm9ibGVtIGFuZCB0byBhdm9pZCBhIGNvbnRhaW5lZCBzeW50YXggaXRlbSBlYXRpbmcgYSBuZWVkZWQKK2VuZCBvZiBsaW5lLCB1c2UgdGhlICJrZWVwZW5kIiBhcmd1bWVudC4gIFRoaXMgdGFrZXMgY2FyZSBvZgordGhlIGRvdWJsZSBlbmQtb2YtbGluZSBtYXRjaGluZzogPgorCisJOnN5bnRheCByZWdpb24geENvbW1lbnQgc3RhcnQ9LyUvIGVuZD0vJC8gY29udGFpbmVkCisJOnN5bnRheCByZWdpb24geFByZVByb2Mgc3RhcnQ9LyMvIGVuZD0vJC8gY29udGFpbnM9eENvbW1lbnQga2VlcGVuZAorCisKK0NPTlRBSU5JTkcgTUFOWSBJVEVNUworCitZb3UgY2FuIHVzZSB0aGUgY29udGFpbnMgYXJndW1lbnQgdG8gc3BlY2lmeSB0aGF0IGV2ZXJ5dGhpbmcgY2FuIGJlIGNvbnRhaW5lZC4KK0ZvciBleGFtcGxlOiA+CisKKwk6c3ludGF4IHJlZ2lvbiB4TGlzdCBzdGFydD0vXFsvIGVuZD0vXF0vIGNvbnRhaW5zPUFMTAorCitBbGwgc3ludGF4IGl0ZW1zIHdpbGwgYmUgY29udGFpbmVkIGluIHRoaXMgb25lLiAgSXQgYWxzbyBjb250YWlucyBpdHNlbGYsIGJ1dAorbm90IGF0IHRoZSBzYW1lIHBvc2l0aW9uICh0aGF0IHdvdWxkIGNhdXNlIGFuIGVuZGxlc3MgbG9vcCkuCisgICBZb3UgY2FuIHNwZWNpZnkgdGhhdCBzb21lIGdyb3VwcyBhcmUgbm90IGNvbnRhaW5lZC4gIFRodXMgY29udGFpbiBhbGwKK2dyb3VwcyBidXQgdGhlIG9uZXMgdGhhdCBhcmUgbGlzdGVkOgorPgorCTpzeW50YXggcmVnaW9uIHhMaXN0IHN0YXJ0PS9cWy8gZW5kPS9cXS8gY29udGFpbnM9QUxMQlVULHhTdHJpbmcKKworV2l0aCB0aGUgIlRPUCIgaXRlbSB5b3UgY2FuIGluY2x1ZGUgYWxsIGl0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSBhICJjb250YWluZWQiCithcmd1bWVudC4gICJDT05UQUlORUQiIGlzIHVzZWQgdG8gb25seSBpbmNsdWRlIGl0ZW1zIHdpdGggYSAiY29udGFpbmVkIgorYXJndW1lbnQuICBTZWUgfDpzeW4tY29udGFpbnN8IGZvciB0aGUgZGV0YWlscy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDQuNioJRm9sbG93aW5nIGdyb3VwcworCitUaGUgeCBsYW5ndWFnZSBoYXMgc3RhdGVtZW50cyBpbiB0aGlzIGZvcm06CisKKwlpZiAoY29uZGl0aW9uKSB0aGVuIH4KKworWW91IHdhbnQgdG8gaGlnaGxpZ2h0IHRoZSB0aHJlZSBpdGVtcyBkaWZmZXJlbnRseS4gIEJ1dCAiKGNvbmRpdGlvbikiIGFuZAorInRoZW4iIG1pZ2h0IGFsc28gYXBwZWFyIGluIG90aGVyIHBsYWNlcywgd2hlcmUgdGhleSBnZXQgZGlmZmVyZW50CitoaWdobGlnaHRpbmcuICBUaGlzIGlzIGhvdyB5b3UgY2FuIGRvIHRoaXM6ID4KKworCTpzeW50YXggbWF0Y2ggeElmIC9pZi8gbmV4dGdyb3VwPXhJZkNvbmRpdGlvbiBza2lwd2hpdGUKKwk6c3ludGF4IG1hdGNoIHhJZkNvbmRpdGlvbiAvKFteKV0qKS8gY29udGFpbmVkIG5leHRncm91cD14VGhlbiBza2lwd2hpdGUKKwk6c3ludGF4IG1hdGNoIHhUaGVuIC90aGVuLyBjb250YWluZWQKKworVGhlICJuZXh0Z3JvdXAiIGFyZ3VtZW50IHNwZWNpZmllcyB3aGljaCBpdGVtIGNhbiBjb21lIG5leHQuICBUaGlzIGlzIG5vdAorcmVxdWlyZWQuICBJZiBub25lIG9mIHRoZSBpdGVtcyB0aGF0IGFyZSBzcGVjaWZpZWQgYXJlIGZvdW5kLCBub3RoaW5nIGhhcHBlbnMuCitGb3IgZXhhbXBsZSwgaW4gdGhpcyB0ZXh0OgorCisJaWYgbm90IChjb25kaXRpb24pIHRoZW4gfgorCitUaGUgImlmIiBpcyBtYXRjaGVkIGJ5IHhJZi4gICJub3QiIGRvZXNuJ3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBuZXh0Z3JvdXAKK3hJZkNvbmRpdGlvbiwgdGh1cyBvbmx5IHRoZSAiaWYiIGlzIGhpZ2hsaWdodGVkLgorCitUaGUgInNraXB3aGl0ZSIgYXJndW1lbnQgdGVsbHMgVmltIHRoYXQgd2hpdGUgc3BhY2UgKHNwYWNlcyBhbmQgdGFicykgbWF5CithcHBlYXIgaW4gYmV0d2VlbiB0aGUgaXRlbXMuICBTaW1pbGFyIGFyZ3VtZW50cyBhcmUgInNraXBubCIsIHdoaWNoIGFsbG93cyBhCitsaW5lIGJyZWFrIGluIGJldHdlZW4gdGhlIGl0ZW1zLCBhbmQgInNraXBlbXB0eSIsIHdoaWNoIGFsbG93cyBlbXB0eSBsaW5lcy4KK05vdGljZSB0aGF0ICJza2lwbmwiIGRvZXNuJ3Qgc2tpcCBhbiBlbXB0eSBsaW5lLCBzb21ldGhpbmcgbXVzdCBtYXRjaCBhZnRlcgordGhlIGxpbmUgYnJlYWsuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ0LjcqCU90aGVyIGFyZ3VtZW50cworCitNQVRDSEdST1VQCisKK1doZW4geW91IGRlZmluZSBhIHJlZ2lvbiwgdGhlIGVudGlyZSByZWdpb24gaXMgaGlnaGxpZ2h0ZWQgYWNjb3JkaW5nIHRvIHRoZQorZ3JvdXAgbmFtZSBzcGVjaWZpZWQuICBUbyBoaWdobGlnaHQgdGhlIHRleHQgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgKCkgd2l0aAordGhlIGdyb3VwIHhJbnNpZGUsIGZvciBleGFtcGxlLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6c3ludGF4IHJlZ2lvbiB4SW5zaWRlIHN0YXJ0PS8oLyBlbmQ9LykvCisKK1N1cHBvc2UsIHRoYXQgeW91IHdhbnQgdG8gaGlnaGxpZ2h0IHRoZSBwYXJlbnRoZXNlcyBkaWZmZXJlbnRseS4gIFlvdSBjYW4gZG8KK3RoaXMgd2l0aCBhIGxvdCBvZiBjb252b2x1dGVkIHJlZ2lvbiBzdGF0ZW1lbnRzLCBvciB5b3UgY2FuIHVzZSB0aGUKKyJtYXRjaGdyb3VwIiBhcmd1bWVudC4gIFRoaXMgdGVsbHMgVmltIHRvIGhpZ2hsaWdodCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhCityZWdpb24gd2l0aCBhIGRpZmZlcmVudCBoaWdobGlnaHQgZ3JvdXAgKGluIHRoaXMgY2FzZSwgdGhlIHhQYXJlbiBncm91cCk6ID4KKworCTpzeW50YXggcmVnaW9uIHhJbnNpZGUgbWF0Y2hncm91cD14UGFyZW4gc3RhcnQ9LygvIGVuZD0vKS8KKworVGhlICJtYXRjaGdyb3VwIiBhcmd1bWVudCBhcHBsaWVzIHRvIHRoZSBzdGFydCBvciBlbmQgbWF0Y2ggdGhhdCBjb21lcyBhZnRlcgoraXQuICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSBib3RoIHN0YXJ0IGFuZCBlbmQgYXJlIGhpZ2hsaWdodGVkIHdpdGggeFBhcmVuLgorVG8gaGlnaGxpZ2h0IHRoZSBlbmQgd2l0aCB4UGFyZW5FbmQ6ID4KKworCTpzeW50YXggcmVnaW9uIHhJbnNpZGUgbWF0Y2hncm91cD14UGFyZW4gc3RhcnQ9LygvCisJCVwgbWF0Y2hncm91cD14UGFyZW5FbmQgZW5kPS8pLworCitBIHNpZGUgZWZmZWN0IG9mIHVzaW5nICJtYXRjaGdyb3VwIiBpcyB0aGF0IGNvbnRhaW5lZCBpdGVtcyB3aWxsIG5vdCBtYXRjaCBpbgordGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgcmVnaW9uLiAgVGhlIGV4YW1wbGUgZm9yICJ0cmFuc3BhcmVudCIgdXNlcyB0aGlzLgorCisKK1RSQU5TUEFSRU5UCisKK0luIGEgQyBsYW5ndWFnZSBmaWxlIHlvdSB3b3VsZCBsaWtlIHRvIGhpZ2hsaWdodCB0aGUgKCkgdGV4dCBhZnRlciBhICJ3aGlsZSIKK2RpZmZlcmVudGx5IGZyb20gdGhlICgpIHRleHQgYWZ0ZXIgYSAiZm9yIi4gIEluIGJvdGggb2YgdGhlc2UgdGhlcmUgY2FuIGJlCituZXN0ZWQgKCkgaXRlbXMsIHdoaWNoIHNob3VsZCBiZSBoaWdobGlnaHRlZCBpbiB0aGUgc2FtZSB3YXkuICBZb3UgbXVzdCBtYWtlCitzdXJlIHRoZSAoKSBoaWdobGlnaHRpbmcgc3RvcHMgYXQgdGhlIG1hdGNoaW5nICkuICBUaGlzIGlzIG9uZSB3YXkgdG8gZG8gdGhpczoKKz4KKwk6c3ludGF4IHJlZ2lvbiBjV2hpbGUgbWF0Y2hncm91cD1jV2hpbGUgc3RhcnQ9L3doaWxlXHMqKC8gZW5kPS8pLworCQlcIGNvbnRhaW5zPWNDb25kTmVzdAorCTpzeW50YXggcmVnaW9uIGNGb3IgbWF0Y2hncm91cD1jRm9yIHN0YXJ0PS9mb3JccyooLyBlbmQ9LykvCisJCVwgY29udGFpbnM9Y0NvbmROZXN0CisJOnN5bnRheCByZWdpb24gY0NvbmROZXN0IHN0YXJ0PS8oLyBlbmQ9LykvIGNvbnRhaW5lZCB0cmFuc3BhcmVudAorCitOb3cgeW91IGNhbiBnaXZlIGNXaGlsZSBhbmQgY0ZvciBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nLiAgVGhlIGNDb25kTmVzdCBpdGVtCitjYW4gYXBwZWFyIGluIGVpdGhlciBvZiB0aGVtLCBidXQgdGFrZSBvdmVyIHRoZSBoaWdobGlnaHRpbmcgb2YgdGhlIGl0ZW0gaXQgaXMKK2NvbnRhaW5lZCBpbi4gIFRoZSAidHJhbnNwYXJlbnQiIGFyZ3VtZW50IGNhdXNlcyB0aGlzLgorICAgTm90aWNlIHRoYXQgdGhlICJtYXRjaGdyb3VwIiBhcmd1bWVudCBoYXMgdGhlIHNhbWUgZ3JvdXAgYXMgdGhlIGl0ZW0KK2l0c2VsZi4gIFdoeSBkZWZpbmUgaXQgdGhlbj8gIFdlbGwsIHRoZSBzaWRlIGVmZmVjdCBvZiB1c2luZyBhIG1hdGNoZ3JvdXAgaXMKK3RoYXQgY29udGFpbmVkIGl0ZW1zIGFyZSBub3QgZm91bmQgaW4gdGhlIG1hdGNoIHdpdGggdGhlIHN0YXJ0IGl0ZW0gdGhlbi4KK1RoaXMgYXZvaWRzIHRoYXQgdGhlIGNDb25kTmVzdCBncm91cCBtYXRjaGVzIHRoZSAoIGp1c3QgYWZ0ZXIgdGhlICJ3aGlsZSIgb3IKKyJmb3IiLiAgSWYgdGhpcyB3b3VsZCBoYXBwZW4sIGl0IHdvdWxkIHNwYW4gdGhlIHdob2xlIHRleHQgdW50aWwgdGhlIG1hdGNoaW5nCispIGFuZCB0aGUgcmVnaW9uIHdvdWxkIGNvbnRpbnVlIGFmdGVyIGl0LiAgTm93IGNDb25kTmVzdCBvbmx5IG1hdGNoZXMgYWZ0ZXIKK3RoZSBtYXRjaCB3aXRoIHRoZSBzdGFydCBwYXR0ZXJuLCB0aHVzIGFmdGVyIHRoZSBmaXJzdCAoLgorCisKK09GRlNFVFMKKworU3VwcG9zZSB5b3Ugd2FudCB0byBkZWZpbmUgYSByZWdpb24gZm9yIHRoZSB0ZXh0IGJldHdlZW4gKCBhbmQgKSBhZnRlciBhbgorImlmIi4gIEJ1dCB5b3UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAiaWYiIG9yIHRoZSAoIGFuZCApLiAgWW91IGNhbiBkbyB0aGlzCitieSBzcGVjaWZ5aW5nIG9mZnNldHMgZm9yIHRoZSBwYXR0ZXJucy4gIEV4YW1wbGU6ID4KKworCTpzeW50YXggcmVnaW9uIHhDb25kIHN0YXJ0PS9pZlxzKigvbXM9ZSsxIGVuZD0vKS9tZT1zLTEKKworVGhlIG9mZnNldCBmb3IgdGhlIHN0YXJ0IHBhdHRlcm4gaXMgIm1zPWUrMSIuICAibXMiIHN0YW5kcyBmb3IgTWF0Y2ggU3RhcnQuCitUaGlzIGRlZmluZXMgYW4gb2Zmc2V0IGZvciB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoLiAgTm9ybWFsbHkgdGhlIG1hdGNoIHN0YXJ0cword2hlcmUgdGhlIHBhdHRlcm4gbWF0Y2hlcy4gICJlKzEiIG1lYW5zIHRoYXQgdGhlIG1hdGNoIG5vdyBzdGFydHMgYXQgdGhlIGVuZAorb2YgdGhlIHBhdHRlcm4gbWF0Y2gsIGFuZCB0aGVuIG9uZSBjaGFyYWN0ZXIgZnVydGhlci4KKyAgIFRoZSBvZmZzZXQgZm9yIHRoZSBlbmQgcGF0dGVybiBpcyAibWU9cy0xIi4gICJtZSIgc3RhbmRzIGZvciBNYXRjaCBFbmQuCisicy0xIiBtZWFucyB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4gbWF0Y2ggYW5kIHRoZW4gb25lIGNoYXJhY3RlciBiYWNrLiAgVGhlCityZXN1bHQgaXMgdGhhdCBpbiB0aGlzIHRleHQ6CisKKwlpZiAoZm9vID09IGJhcikgfgorCitPbmx5IHRoZSB0ZXh0ICJmb28gPT0gYmFyIiB3aWxsIGJlIGhpZ2hsaWdodGVkIGFzIHhDb25kLgorCitNb3JlIGFib3V0IG9mZnNldHMgaGVyZTogfDpzeW4tcGF0dGVybi1vZmZzZXR8LgorCisKK09ORUxJTkUKKworVGhlICJvbmVsaW5lIiBhcmd1bWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVnaW9uIGRvZXMgbm90IGNyb3NzIGEgbGluZQorYm91bmRhcnkuICBGb3IgZXhhbXBsZTogPgorCisJOnN5bnRheCByZWdpb24geElmVGhlbiBzdGFydD0vaWYvIGVuZD0vdGhlbi8gb25lbGluZQorCitUaGlzIGRlZmluZXMgYSByZWdpb24gdGhhdCBzdGFydHMgYXQgImlmIiBhbmQgZW5kcyBhdCAidGhlbiIuICBCdXQgaWYgdGhlcmUgaXMKK25vICJ0aGVuIiBhZnRlciB0aGUgImlmIiwgdGhlIHJlZ2lvbiBkb2Vzbid0IG1hdGNoLgorCisJTm90ZToKKwlXaGVuIHVzaW5nICJvbmVsaW5lIiB0aGUgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgaWYgdGhlIGVuZCBwYXR0ZXJuCisJZG9lc24ndCBtYXRjaCBpbiB0aGUgc2FtZSBsaW5lLiAgV2l0aG91dCAib25lbGluZSIgVmltIGRvZXMgX25vdF8KKwljaGVjayBpZiB0aGVyZSBpcyBhIG1hdGNoIGZvciB0aGUgZW5kIHBhdHRlcm4uICBUaGUgcmVnaW9uIHN0YXJ0cyBldmVuCisJd2hlbiB0aGUgZW5kIHBhdHRlcm4gZG9lc24ndCBtYXRjaCBpbiB0aGUgcmVzdCBvZiB0aGUgZmlsZS4KKworCitDT05USU5VQVRJT04gTElORVMgQU5EIEFWT0lESU5HIFRIRU0KKworVGhpbmdzIG5vdyBiZWNvbWUgYSBsaXR0bGUgbW9yZSBjb21wbGV4LiAgTGV0J3MgZGVmaW5lIGEgcHJlcHJvY2Vzc29yIGxpbmUuCitUaGlzIHN0YXJ0cyB3aXRoIGEgIyBpbiB0aGUgZmlyc3QgY29sdW1uIGFuZCBjb250aW51ZXMgdW50aWwgdGhlIGVuZCBvZiB0aGUKK2xpbmUuICBBIGxpbmUgdGhhdCBlbmRzIHdpdGggXCBtYWtlcyB0aGUgbmV4dCBsaW5lIGEgY29udGludWF0aW9uIGxpbmUuICBUaGUKK3dheSB5b3UgaGFuZGxlIHRoaXMgaXMgdG8gYWxsb3cgdGhlIHN5bnRheCBpdGVtIHRvIGNvbnRhaW4gYSBjb250aW51YXRpb24KK3BhdHRlcm46ID4KKworCTpzeW50YXggcmVnaW9uIHhQcmVQcm9jIHN0YXJ0PS9eIy8gZW5kPS8kLyBjb250YWlucz14TGluZUNvbnRpbnVlCisJOnN5bnRheCBtYXRjaCB4TGluZUNvbnRpbnVlICJcXCQiIGNvbnRhaW5lZAorCitJbiB0aGlzIGNhc2UsIGFsdGhvdWdoIHhQcmVQcm9jIG5vcm1hbGx5IG1hdGNoZXMgYSBzaW5nbGUgbGluZSwgdGhlIGdyb3VwCitjb250YWluZWQgaW4gaXQgKG5hbWVseSB4TGluZUNvbnRpbnVlKSBsZXRzIGl0IGdvIG9uIGZvciBtb3JlIHRoYW4gb25lIGxpbmUuCitGb3IgZXhhbXBsZSwgaXQgd291bGQgbWF0Y2ggYm90aCBvZiB0aGVzZSBsaW5lczoKKworCSNkZWZpbmUgU1BBTSAgc3BhbSBzcGFtIHNwYW0gXCB+CisJCQliYWNvbiBhbmQgc3BhbSB+CisKK0luIHRoaXMgY2FzZSwgdGhpcyBpcyB3aGF0IHlvdSB3YW50LiAgSWYgaXQgaXMgbm90IHdoYXQgeW91IHdhbnQsIHlvdSBjYW4gY2FsbAorZm9yIHRoZSByZWdpb24gdG8gYmUgb24gYSBzaW5nbGUgbGluZSBieSBhZGRpbmcgImV4Y2x1ZGVubCIgdG8gdGhlIGNvbnRhaW5lZAorcGF0dGVybi4gIEZvciBleGFtcGxlLCB5b3Ugd2FudCB0byBoaWdobGlnaHQgImVuZCIgaW4geFByZVByb2MsIGJ1dCBvbmx5IGF0Cit0aGUgZW5kIG9mIHRoZSBsaW5lLiAgVG8gYXZvaWQgbWFraW5nIHRoZSB4UHJlUHJvYyBjb250aW51ZSBvbiB0aGUgbmV4dCBsaW5lLAorbGlrZSB4TGluZUNvbnRpbnVlIGRvZXMsIHVzZSAiZXhjbHVkZW5sIiBsaWtlIHRoaXM6ID4KKworCTpzeW50YXggcmVnaW9uIHhQcmVQcm9jIHN0YXJ0PS9eIy8gZW5kPS8kLworCQlcIGNvbnRhaW5zPXhMaW5lQ29udGludWUseFByZVByb2NFbmQKKwk6c3ludGF4IG1hdGNoIHhQcmVQcm9jRW5kIGV4Y2x1ZGVubCAvZW5kJC8gY29udGFpbmVkCisJOnN5bnRheCBtYXRjaCB4TGluZUNvbnRpbnVlICJcXCQiIGNvbnRhaW5lZAorCisiZXhjbHVkZW5sIiBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgdGhlIHBhdHRlcm4uICBTaW5jZSAieExpbmVDb250aW51ZSIgZG9lc24ndAoraGF2ZSAiZXhjbHVkZW5sIiwgYSBtYXRjaCB3aXRoIGl0IHdpbGwgZXh0ZW5kIHhQcmVQcm9jIHRvIHRoZSBuZXh0IGxpbmUgYXMKK2JlZm9yZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDQuOCoJQ2x1c3RlcnMKKworT25lIG9mIHRoZSB0aGluZ3MgeW91IHdpbGwgbm90aWNlIGFzIHlvdSBzdGFydCB0byB3cml0ZSBhIHN5bnRheCBmaWxlIGlzIHRoYXQKK3lvdSB3aW5kIHVwIGdlbmVyYXRpbmcgYSBsb3Qgb2Ygc3ludGF4IGdyb3Vwcy4gIFZpbSBlbmFibGVzIHlvdSB0byBkZWZpbmUgYQorY29sbGVjdGlvbiBvZiBzeW50YXggZ3JvdXBzIGNhbGxlZCBhIGNsdXN0ZXIuCisgICBTdXBwb3NlIHlvdSBoYXZlIGEgbGFuZ3VhZ2UgdGhhdCBjb250YWlucyBmb3IgbG9vcHMsIGlmIHN0YXRlbWVudHMsIHdoaWxlCitsb29wcywgYW5kIGZ1bmN0aW9ucy4gIEVhY2ggb2YgdGhlbSBjb250YWlucyB0aGUgc2FtZSBzeW50YXggZWxlbWVudHM6IG51bWJlcnMKK2FuZCBpZGVudGlmaWVycy4gIFlvdSBkZWZpbmUgdGhlbSBsaWtlIHRoaXM6ID4KKworCTpzeW50YXggbWF0Y2ggeEZvciAvXmZvci4qLyBjb250YWlucz14TnVtYmVyLHhJZGVudAorCTpzeW50YXggbWF0Y2ggeElmIC9eaWYuKi8gY29udGFpbnM9eE51bWJlcix4SWRlbnQKKwk6c3ludGF4IG1hdGNoIHhXaGlsZSAvXndoaWxlLiovIGNvbnRhaW5zPXhOdW1iZXIseElkZW50CisKK1lvdSBoYXZlIHRvIHJlcGVhdCB0aGUgc2FtZSAiY29udGFpbnM9IiBldmVyeSB0aW1lLiAgSWYgeW91IHdhbnQgdG8gYWRkCithbm90aGVyIGNvbnRhaW5lZCBpdGVtLCB5b3UgaGF2ZSB0byBhZGQgaXQgdGhyZWUgdGltZXMuICBTeW50YXggY2x1c3RlcnMKK3NpbXBsaWZ5IHRoZXNlIGRlZmluaXRpb25zIGJ5IGVuYWJsaW5nIHlvdSB0byBoYXZlIG9uZSBjbHVzdGVyIHN0YW5kIGZvcgorc2V2ZXJhbCBzeW50YXggZ3JvdXBzLgorICAgVG8gZGVmaW5lIGEgY2x1c3RlciBmb3IgdGhlIHR3byBpdGVtcyB0aGF0IHRoZSB0aHJlZSBncm91cHMgY29udGFpbiwgdXNlCit0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpzeW50YXggY2x1c3RlciB4U3RhdGUgY29udGFpbnM9eE51bWJlcix4SWRlbnQKKworQ2x1c3RlcnMgYXJlIHVzZWQgaW5zaWRlIG90aGVyIHN5bnRheCBpdGVtcyBqdXN0IGxpa2UgYW55IHN5bnRheCBncm91cC4KK1RoZWlyIG5hbWVzIHN0YXJ0IHdpdGggQC4gIFRodXMsIHlvdSBjYW4gZGVmaW5lIHRoZSB0aHJlZSBncm91cHMgbGlrZSB0aGlzOiA+CisKKwk6c3ludGF4IG1hdGNoIHhGb3IgL15mb3IuKi8gY29udGFpbnM9QHhTdGF0ZQorCTpzeW50YXggbWF0Y2ggeElmIC9eaWYuKi8gY29udGFpbnM9QHhTdGF0ZQorCTpzeW50YXggbWF0Y2ggeFdoaWxlIC9ed2hpbGUuKi8gY29udGFpbnM9QHhTdGF0ZQorCitZb3UgY2FuIGFkZCBuZXcgZ3JvdXAgbmFtZXMgdG8gdGhpcyBjbHVzdGVyIHdpdGggdGhlICJhZGQiIGFyZ3VtZW50OiA+CisKKwk6c3ludGF4IGNsdXN0ZXIgeFN0YXRlIGFkZD14U3RyaW5nCisKK1lvdSBjYW4gcmVtb3ZlIHN5bnRheCBncm91cHMgZnJvbSB0aGlzIGxpc3QgYXMgd2VsbDogPgorCisJOnN5bnRheCBjbHVzdGVyIHhTdGF0ZSByZW1vdmU9eE51bWJlcgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0NC45KglJbmNsdWRpbmcgYW5vdGhlciBzeW50YXggZmlsZQorCitUaGUgQysrIGxhbmd1YWdlIHN5bnRheCBpcyBhIHN1cGVyc2V0IG9mIHRoZSBDIGxhbmd1YWdlLiAgQmVjYXVzZSB5b3UgZG8gbm90Cit3YW50IHRvIHdyaXRlIHR3byBzeW50YXggZmlsZXMsIHlvdSBjYW4gaGF2ZSB0aGUgQysrIHN5bnRheCBmaWxlIHJlYWQgaW4gdGhlCitvbmUgZm9yIEMgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6cnVudGltZSEgc3ludGF4L2MudmltCisKK1RoZSAiOnJ1bnRpbWUhIiBjb21tYW5kIHNlYXJjaGVzICdydW50aW1lcGF0aCcgZm9yIGFsbCAic3ludGF4L2MudmltIiBmaWxlcy4KK1RoaXMgbWFrZXMgdGhlIEMgc3ludGF4IGJlIGRlZmluZWQgbGlrZSBmb3IgQyBmaWxlcy4gIElmIHlvdSBoYXZlIHJlcGxhY2VkIHRoZQorYy52aW0gc3ludGF4IGZpbGUsIG9yIGFkZGVkIGl0ZW1zIHdpdGggYW4gZXh0cmEgZmlsZSwgdGhlc2Ugd2lsbCBiZSBsb2FkZWQgYXMKK3dlbGwuCisgICBBZnRlciBsb2FkaW5nIHRoZSBDIHN5bnRheCBpdGVtcyB0aGUgc3BlY2lmaWMgQysrIGl0ZW1zIGNhbiBiZSBkZWZpbmVkLgorRm9yIGV4YW1wbGUsIGFkZCBrZXl3b3JkcyB0aGF0IGFyZSBub3QgdXNlZCBpbiBDOiA+CisKKwk6c3ludGF4IGtleXdvcmQgY3BwU3RhdGVtZW50CW5ldyBkZWxldGUgdGhpcyBmcmllbmQgdXNpbmcKKworVGhpcyB3b3JrcyBqdXN0IGxpa2UgaW4gYW55IG90aGVyIHN5bnRheCBmaWxlLgorCitOb3cgY29uc2lkZXIgdGhlIFBlcmwgbGFuZ3VhZ2UuICBJdCBjb25zaXN0cyBvZiB0d28gZGlzdGluY3QgcGFydHM6IGEKK2RvY3VtZW50YXRpb24gc2VjdGlvbiBpbiBQT0QgZm9ybWF0LCBhbmQgYSBwcm9ncmFtIHdyaXR0ZW4gaW4gUGVybCBpdHNlbGYuCitUaGUgUE9EIHNlY3Rpb24gc3RhcnRzIHdpdGggIj1oZWFkIiBhbmQgZW5kcyB3aXRoICI9Y3V0Ii4KKyAgIFlvdSB3YW50IHRvIGRlZmluZSB0aGUgUE9EIHN5bnRheCBpbiBvbmUgZmlsZSwgYW5kIHVzZSBpdCBmcm9tIHRoZSBQZXJsCitzeW50YXggZmlsZS4gIFRoZSAiOnN5bnRheCBpbmNsdWRlIiBjb21tYW5kIHJlYWRzIGluIGEgc3ludGF4IGZpbGUgYW5kIHN0b3JlcwordGhlIGVsZW1lbnRzIGl0IGRlZmluZWQgaW4gYSBzeW50YXggY2x1c3Rlci4gIEZvciBQZXJsLCB0aGUgc3RhdGVtZW50cyBhcmUgYXMKK2ZvbGxvd3M6ID4KKworCTpzeW50YXggaW5jbHVkZSBAUG9kIDxzZmlsZT46cDpoL3BvZC52aW0KKwk6c3ludGF4IHJlZ2lvbiBwZXJsUE9EIHN0YXJ0PS9ePWhlYWQvIGVuZD0vXj1jdXQvIGNvbnRhaW5zPUBQb2QKKworV2hlbiAiPWhlYWQiIGlzIGZvdW5kIGluIGEgUGVybCBmaWxlLCB0aGUgcGVybFBPRCByZWdpb24gc3RhcnRzLiAgSW4gdGhpcworcmVnaW9uIHRoZSBAUG9kIGNsdXN0ZXIgaXMgY29udGFpbmVkLiAgQWxsIHRoZSBpdGVtcyBkZWZpbmVkIGFzIHRvcC1sZXZlbAoraXRlbXMgaW4gdGhlIHBvZC52aW0gc3ludGF4IGZpbGVzIHdpbGwgbWF0Y2ggaGVyZS4gIFdoZW4gIj1jdXQiIGlzIGZvdW5kLCB0aGUKK3JlZ2lvbiBlbmRzIGFuZCB3ZSBnbyBiYWNrIHRvIHRoZSBpdGVtcyBkZWZpbmVkIGluIHRoZSBQZXJsIGZpbGUuCisgICBUaGUgIjpzeW50YXggaW5jbHVkZSIgY29tbWFuZCBpcyBjbGV2ZXIgZW5vdWdoIHRvIGlnbm9yZSBhICI6c3ludGF4IGNsZWFyIgorY29tbWFuZCBpbiB0aGUgaW5jbHVkZWQgZmlsZS4gIEFuZCBhbiBhcmd1bWVudCBzdWNoIGFzICJjb250YWlucz1BTEwiIHdpbGwKK29ubHkgY29udGFpbiBpdGVtcyBkZWZpbmVkIGluIHRoZSBpbmNsdWRlZCBmaWxlLCBub3QgaW4gdGhlIGZpbGUgdGhhdCBpbmNsdWRlcworaXQuCisgICBUaGUgIjxzZmlsZT46cDpoLyIgcGFydCB1c2VzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUgKDxzZmlsZT4pLAorZXhwYW5kcyBpdCB0byBhIGZ1bGwgcGF0aCAoOnApIGFuZCB0aGVuIHRha2VzIHRoZSBoZWFkICg6aCkuICBUaGlzIHJlc3VsdHMgaW4KK3RoZSBkaXJlY3RvcnkgbmFtZSBvZiB0aGUgZmlsZS4gIFRoaXMgY2F1c2VzIHRoZSBwb2QudmltIGZpbGUgaW4gdGhlIHNhbWUKK2RpcmVjdG9yeSB0byBiZSBpbmNsdWRlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDQuMTAqCVN5bmNocm9uaXppbmcKKworQ29tcGlsZXJzIGhhdmUgaXQgZWFzeS4gIFRoZXkgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpbGUgYW5kIHBhcnNlIGl0CitzdHJhaWdodCB0aHJvdWdoLiAgVmltIGRvZXMgbm90IGhhdmUgaXQgc28gZWFzeS4gIEl0IG11c3Qgc3RhcnQgaW4gdGhlIG1pZGRsZSwKK3doZXJlIHRoZSBlZGl0aW5nIGlzIGJlaW5nIGRvbmUuICBTbyBob3cgZG9lcyBpdCB0ZWxsIHdoZXJlIGl0IGlzPworICAgVGhlIHNlY3JldCBpcyB0aGUgIjpzeW50YXggc3luYyIgY29tbWFuZC4gIFRoaXMgdGVsbHMgVmltIGhvdyB0byBmaWd1cmUgb3V0Cit3aGVyZSBpdCBpcy4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdGVsbHMgVmltIHRvIHNjYW4gYmFja3dhcmQKK2ZvciB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBhIEMtc3R5bGUgY29tbWVudCBhbmQgYmVnaW4gc3ludGF4IGNvbG9yaW5nIGZyb20KK3RoZXJlOiA+CisKKwk6c3ludGF4IHN5bmMgY2NvbW1lbnQKKworWW91IGNhbiB0dW5lIHRoaXMgcHJvY2Vzc2luZyB3aXRoIHNvbWUgYXJndW1lbnRzLiAgVGhlICJtaW5saW5lcyIgYXJndW1lbnQKK3RlbGxzIFZpbSB0aGUgbWluaW11bSBudW1iZXIgb2YgbGluZXMgdG8gbG9vayBiYWNrd2FyZCwgYW5kICJtYXhsaW5lcyIgdGVsbHMKK3RoZSBlZGl0b3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHNjYW4uCisgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRlbGxzIFZpbSB0byBsb29rIGF0IGxlYXN0IDEwIGxpbmVzCitiZWZvcmUgdGhlIHRvcCBvZiB0aGUgc2NyZWVuOiA+CisKKwk6c3ludGF4IHN5bmMgY2NvbW1lbnQgbWlubGluZXM9MTAgbWF4bGluZXM9NTAwCisKK0lmIGl0IGNhbm5vdCBmaWd1cmUgb3V0IHdoZXJlIGl0IGlzIGluIHRoYXQgc3BhY2UsIGl0IHN0YXJ0cyBsb29raW5nIGZhcnRoZXIKK2FuZCBmYXJ0aGVyIGJhY2sgdW50aWwgaXQgZmlndXJlcyBvdXQgd2hhdCB0byBkby4gIEJ1dCBpdCBsb29rcyBubyBmYXJ0aGVyCitiYWNrIHRoYW4gNTAwIGxpbmVzLiAoQSBsYXJnZSAibWF4bGluZXMiIHNsb3dzIGRvd24gcHJvY2Vzc2luZy4gIEEgc21hbGwgb25lCittaWdodCBjYXVzZSBzeW5jaHJvbml6YXRpb24gdG8gZmFpbC4pCisgICBUbyBtYWtlIHN5bmNocm9uaXppbmcgZ28gYSBiaXQgZmFzdGVyLCB0ZWxsIFZpbSB3aGljaCBzeW50YXggaXRlbXMgY2FuIGJlCitza2lwcGVkLiAgRXZlcnkgbWF0Y2ggYW5kIHJlZ2lvbiB0aGF0IG9ubHkgbmVlZHMgdG8gYmUgdXNlZCB3aGVuIGFjdHVhbGx5CitkaXNwbGF5aW5nIHRleHQgY2FuIGJlIGdpdmVuIHRoZSAiZGlzcGxheSIgYXJndW1lbnQuCisgICBCeSBkZWZhdWx0LCB0aGUgY29tbWVudCB0byBiZSBmb3VuZCB3aWxsIGJlIGNvbG9yZWQgYXMgcGFydCBvZiB0aGUgQ29tbWVudAorc3ludGF4IGdyb3VwLiAgSWYgeW91IHdhbnQgdG8gY29sb3IgdGhpbmdzIGFub3RoZXIgd2F5LCB5b3UgY2FuIHNwZWNpZnkgYQorZGlmZmVyZW50IHN5bnRheCBncm91cDogPgorCisJOnN5bnRheCBzeW5jIGNjb21tZW50IHhBbHRDb21tZW50CisKK0lmIHlvdXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZG9lcyBub3QgaGF2ZSBDLXN0eWxlIGNvbW1lbnRzIGluIGl0LCB5b3UgY2FuIHRyeQorYW5vdGhlciBtZXRob2Qgb2Ygc3luY2hyb25pemF0aW9uLiAgVGhlIHNpbXBsZXN0IHdheSBpcyB0byB0ZWxsIFZpbSB0byBzcGFjZQorYmFjayBhIG51bWJlciBvZiBsaW5lcyBhbmQgdHJ5IHRvIGZpZ3VyZSBvdXQgdGhpbmdzIGZyb20gdGhlcmUuICBUaGUgZm9sbG93aW5nCitjb21tYW5kIHRlbGxzIFZpbSB0byBnbyBiYWNrIDE1MCBsaW5lcyBhbmQgc3RhcnQgcGFyc2luZyBmcm9tIHRoZXJlOiA+CisKKwk6c3ludGF4IHN5bmMgbWlubGluZXM9MTUwCisKK0EgbGFyZ2UgIm1pbmxpbmVzIiB2YWx1ZSBjYW4gbWFrZSBWaW0gc2xvd2VyLCBlc3BlY2lhbGx5IHdoZW4gc2Nyb2xsaW5nCitiYWNrd2FyZHMgaW4gdGhlIGZpbGUuCisgICBGaW5hbGx5LCB5b3UgY2FuIHNwZWNpZnkgYSBzeW50YXggZ3JvdXAgdG8gbG9vayBmb3IgYnkgdXNpbmcgdGhpcyBjb21tYW5kOgorPgorCTpzeW50YXggc3luYyBtYXRjaCB7c3luYy1ncm91cC1uYW1lfQorCQlcIGdyb3VwaGVyZSB7Z3JvdXAtbmFtZX0ge3BhdHRlcm59CisKK1RoaXMgdGVsbHMgVmltIHRoYXQgd2hlbiBpdCBzZWVzIHtwYXR0ZXJufSB0aGUgc3ludGF4IGdyb3VwIG5hbWVkIHtncm91cC1uYW1lfQorYmVnaW5zIGp1c3QgYWZ0ZXIgdGhlIHBhdHRlcm4gZ2l2ZW4uICBUaGUge3N5bmMtZ3JvdXAtbmFtZX0gaXMgdXNlZCB0byBnaXZlIGEKK25hbWUgdG8gdGhpcyBzeW5jaHJvbml6YXRpb24gc3BlY2lmaWNhdGlvbi4gIEZvciBleGFtcGxlLCB0aGUgc2ggc2NyaXB0aW5nCitsYW5ndWFnZSBiZWdpbnMgYW4gaWYgc3RhdGVtZW50IHdpdGggImlmIiBhbmQgZW5kcyBpdCB3aXRoICJmaSI6CisKKwlpZiBbIC0tZiBmaWxlLnR4dCBdIDsgdGhlbiB+CisJCWVjaG8gIkZpbGUgZXhpc3RzIiB+CisJZmkgfgorCitUbyBkZWZpbmUgYSAiZ3JvdXBoZXJlIiBkaXJlY3RpdmUgZm9yIHRoaXMgc3ludGF4LCB5b3UgdXNlIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQ6ID4KKworCTpzeW50YXggc3luYyBtYXRjaCBzaElmU3luYyBncm91cGhlcmUgc2hJZiAiXDxpZlw+IgorCitUaGUgImdyb3VwdGhlcmUiIGFyZ3VtZW50IHRlbGxzIFZpbSB0aGF0IHRoZSBwYXR0ZXJuIGVuZHMgYSBncm91cC4gIEZvcgorZXhhbXBsZSwgdGhlIGVuZCBvZiB0aGUgaWYvZmkgZ3JvdXAgaXMgYXMgZm9sbG93czogPgorCisJOnN5bnRheCBzeW5jIG1hdGNoIHNoSWZTeW5jIGdyb3VwdGhlcmUgTk9ORSAiXDxmaVw+IgorCitJbiB0aGlzIGV4YW1wbGUsIHRoZSBOT05FIHRlbGxzIFZpbSB0aGF0IHlvdSBhcmUgbm90IGluIGFueSBzcGVjaWFsIHN5bnRheAorcmVnaW9uLiAgSW4gcGFydGljdWxhciwgeW91IGFyZSBub3QgaW5zaWRlIGFuIGlmIGJsb2NrLgorCitZb3UgYWxzbyBjYW4gZGVmaW5lIG1hdGNoZXMgYW5kIHJlZ2lvbnMgdGhhdCBhcmUgd2l0aCBubyAiZ3JvdXBoZXJlIiBvcgorImdyb3VwdGhlcmUiIGFyZ3VtZW50cy4gIFRoZXNlIGdyb3VwcyBhcmUgZm9yIHN5bnRheCBncm91cHMgc2tpcHBlZCBkdXJpbmcKK3N5bmNocm9uaXphdGlvbi4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNraXBzIG92ZXIgYW55dGhpbmcgaW5zaWRlIHt9LAorZXZlbiBpZiBpdCB3b3VsZCBub3JtYWxseSBtYXRjaCBhbm90aGVyIHN5bmNocm9uaXphdGlvbiBtZXRob2Q6ID4KKworCTpzeW50YXggc3luYyBtYXRjaCB4U3BlY2lhbCAvey4qfS8KKworTW9yZSBhYm91dCBzeW5jaHJvbml6aW5nIGluIHRoZSByZWZlcmVuY2UgbWFudWFsOiB8OnN5bi1zeW5jfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDQuMTEqCUluc3RhbGxpbmcgYSBzeW50YXggZmlsZQorCitXaGVuIHlvdXIgbmV3IHN5bnRheCBmaWxlIGlzIHJlYWR5IHRvIGJlIHVzZWQsIGRyb3AgaXQgaW4gYSAic3ludGF4IiBkaXJlY3RvcnkKK2luICdydW50aW1lcGF0aCcuICBGb3IgVW5peCB0aGF0IHdvdWxkIGJlICJ+Ly52aW0vc3ludGF4Ii4KKyAgVGhlIG5hbWUgb2YgdGhlIHN5bnRheCBmaWxlIG11c3QgYmUgZXF1YWwgdG8gdGhlIGZpbGUgdHlwZSwgd2l0aCAiLnZpbSIKK2FkZGVkLiAgVGh1cyBmb3IgdGhlIHggbGFuZ3VhZ2UsIHRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGUgd291bGQgYmU6CisKKwl+Ly52aW0vc3ludGF4L3gudmltIH4KKworWW91IG11c3QgYWxzbyBtYWtlIHRoZSBmaWxlIHR5cGUgYmUgcmVjb2duaXplZC4gIFNlZSB8NDMuMnwuCisKK0lmIHlvdXIgZmlsZSB3b3JrcyB3ZWxsLCB5b3UgbWlnaHQgd2FudCB0byBtYWtlIGl0IGF2YWlsYWJsZSB0byBvdGhlciBWaW0KK3VzZXJzLiAgRmlyc3QgcmVhZCB0aGUgbmV4dCBzZWN0aW9uIHRvIG1ha2Ugc3VyZSB5b3VyIGZpbGUgd29ya3Mgd2VsbCBmb3IKK290aGVycy4gIFRoZW4gZS1tYWlsIGl0IHRvIHRoZSBWaW0gbWFpbnRhaW5lcjogPG1haW50YWluZXJAdmltLm9yZz4uICBBbHNvCitleHBsYWluIGhvdyB0aGUgZmlsZXR5cGUgY2FuIGJlIGRldGVjdGVkLiAgV2l0aCBhIGJpdCBvZiBsdWNrIHlvdXIgZmlsZSB3aWxsCitiZSBpbmNsdWRlZCBpbiB0aGUgbmV4dCBWaW0gdmVyc2lvbiEKKworCitBRERJTkcgVE8gQU4gRVhJU1RJTkcgU1lOVEFYIEZJTEUKKworV2Ugd2VyZSBhc3N1bWluZyB5b3Ugd2VyZSBhZGRpbmcgYSBjb21wbGV0ZWx5IG5ldyBzeW50YXggZmlsZS4gIFdoZW4gYW4gZXhpc3RpbmcKK3N5bnRheCBmaWxlIHdvcmtzLCBidXQgaXMgbWlzc2luZyBzb21lIGl0ZW1zLCB5b3UgY2FuIGFkZCBpdGVtcyBpbiBhIHNlcGFyYXRlCitmaWxlLiAgVGhhdCBhdm9pZHMgY2hhbmdpbmcgdGhlIGRpc3RyaWJ1dGVkIHN5bnRheCBmaWxlLCB3aGljaCB3aWxsIGJlIGxvc3QKK3doZW4gaW5zdGFsbGluZyBhIG5ldyB2ZXJzaW9uIG9mIFZpbS4KKyAgIFdyaXRlIHN5bnRheCBjb21tYW5kcyBpbiB5b3VyIGZpbGUsIHBvc3NpYmx5IHVzaW5nIGdyb3VwIG5hbWVzIGZyb20gdGhlCitleGlzdGluZyBzeW50YXguICBGb3IgZXhhbXBsZSwgdG8gYWRkIG5ldyB2YXJpYWJsZSB0eXBlcyB0byB0aGUgQyBzeW50YXggZmlsZToKKz4KKwk6c3ludGF4IGtleXdvcmQgY1R5cGUgb2ZmX3QgdWludAorCitXcml0ZSB0aGUgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG9yaWdpbmFsIHN5bnRheCBmaWxlLiAgSW4gdGhpcyBjYXNlCisiYy52aW0iLiAgUGxhY2UgaXQgaW4gYSBkaXJlY3RvcnkgbmVhciB0aGUgZW5kIG9mICdydW50aW1lcGF0aCcuICBUaGlzIG1ha2VzCitpdCBsb2FkZWQgYWZ0ZXIgdGhlIG9yaWdpbmFsIHN5bnRheCBmaWxlLiAgRm9yIFVuaXggdGhpcyB3b3VsZCBiZToKKworCX4vLnZpbS9hZnRlci9zeW50YXgvYy52aW0gfgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0NC4xMioJUG9ydGFibGUgc3ludGF4IGZpbGUgbGF5b3V0CisKK1dvdWxkbid0IGl0IGJlIG5pY2UgaWYgYWxsIFZpbSB1c2VycyBleGNoYW5nZSBzeW50YXggZmlsZXM/ICBUbyBtYWtlIHRoaXMKK3Bvc3NpYmxlLCB0aGUgc3ludGF4IGZpbGUgbXVzdCBmb2xsb3cgYSBmZXcgZ3VpZGVsaW5lcy4KKworU3RhcnQgd2l0aCBhIGhlYWRlciB0aGF0IGV4cGxhaW5zIHdoYXQgdGhlIHN5bnRheCBmaWxlIGlzIGZvciwgd2hvIG1haW50YWlucworaXQgYW5kIHdoZW4gaXQgd2FzIGxhc3QgdXBkYXRlZC4gIERvbid0IGluY2x1ZGUgdG9vIG11Y2ggaW5mb3JtYXRpb24gYWJvdXQKK2NoYW5nZXMgaGlzdG9yeSwgbm90IG1hbnkgcGVvcGxlIHdpbGwgcmVhZCBpdC4gIEV4YW1wbGU6ID4KKworCSIgVmltIHN5bnRheCBmaWxlCisJIiBMYW5ndWFnZToJQworCSIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKwkiIExhc3QgQ2hhbmdlOgkyMDAxIEp1biAxOAorCSIgUmVtYXJrOglJbmNsdWRlZCBieSB0aGUgQysrIHN5bnRheC4KKworVXNlIHRoZSBzYW1lIGxheW91dCBhcyB0aGUgb3RoZXIgc3ludGF4IGZpbGVzLiAgVXNpbmcgYW4gZXhpc3Rpbmcgc3ludGF4IGZpbGUKK2FzIGFuIGV4YW1wbGUgd2lsbCBzYXZlIHlvdSBhIGxvdCBvZiB0aW1lLgorCitDaG9vc2UgYSBnb29kLCBkZXNjcmlwdGl2ZSBuYW1lIGZvciB5b3VyIHN5bnRheCBmaWxlLiAgVXNlIGxvd2VyY2FzZSBsZXR0ZXJzCithbmQgZGlnaXRzLiAgRG9uJ3QgbWFrZSBpdCB0b28gbG9uZywgaXQgaXMgdXNlZCBpbiBtYW55IHBsYWNlczogVGhlIG5hbWUgb2YKK3RoZSBzeW50YXggZmlsZSAibmFtZS52aW0iLCAnZmlsZXR5cGUnLCBiOmN1cnJlbnRfc3ludGF4IHRoZSBzdGFydCBvZiBlYWNoCitzeW50YXggZ3JvdXAgKG5hbWVUeXBlLCBuYW1lU3RhdGVtZW50LCBuYW1lU3RyaW5nLCBldGMpLgorCitTdGFydCB3aXRoIGEgY2hlY2sgZm9yICJiOmN1cnJlbnRfc3ludGF4Ii4gIElmIGl0IGlzIGRlZmluZWQsIHNvbWUgb3RoZXIKK3N5bnRheCBmaWxlLCBlYXJsaWVyIGluICdydW50aW1lcGF0aCcgd2FzIGFscmVhZHkgbG9hZGVkLiAgVG8gYmUgY29tcGF0aWJsZQord2l0aCBWaW0gNS44IHVzZTogPgorCisJaWYgdmVyc2lvbiA8IDYwMAorCSAgc3ludGF4IGNsZWFyCisJZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisJICBmaW5pc2gKKwllbmRpZgorCitTZXQgImI6Y3VycmVudF9zeW50YXgiIHRvIHRoZSBuYW1lIG9mIHRoZSBzeW50YXggYXQgdGhlIGVuZC4gIERvbid0IGZvcmdldAordGhhdCBpbmNsdWRlZCBmaWxlcyBkbyB0aGlzIHRvbywgeW91IG1pZ2h0IGhhdmUgdG8gcmVzZXQgImI6Y3VycmVudF9zeW50YXgiIGlmCit5b3UgaW5jbHVkZSB0d28gZmlsZXMuCisKK0lmIHlvdSB3YW50IHlvdXIgc3ludGF4IGZpbGUgdG8gd29yayB3aXRoIFZpbSA1LngsIGFkZCBhIGNoZWNrIGZvciB2OnZlcnNpb24uCitTZWUgeWFjYy52aW0gZm9yIGFuIGV4YW1wbGUuCisKK0RvIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgYSB1c2VyIHByZWZlcmVuY2UuICBEb24ndCBzZXQgJ3RhYnN0b3AnLAorJ2V4cGFuZHRhYicsIGV0Yy4gIFRoZXNlIGJlbG9uZyBpbiBhIGZpbGV0eXBlIHBsdWdpbi4KKworRG8gbm90IGluY2x1ZGUgbWFwcGluZ3Mgb3IgYWJicmV2aWF0aW9ucy4gIE9ubHkgaW5jbHVkZSBzZXR0aW5nICdpc2tleXdvcmQnIGlmCitpdCBpcyByZWFsbHkgbmVjZXNzYXJ5IGZvciByZWNvZ25pemluZyBrZXl3b3Jkcy4KKworQXZvaWQgdXNpbmcgc3BlY2lmaWMgY29sb3JzLiAgTGluayB0byB0aGUgc3RhbmRhcmQgaGlnaGxpZ2h0IGdyb3VwcyB3aGVuZXZlcgorcG9zc2libGUuICBEb24ndCBmb3JnZXQgdGhhdCBzb21lIHBlb3BsZSB1c2UgYSBkaWZmZXJlbnQgYmFja2dyb3VuZCBjb2xvciwgb3IKK2hhdmUgb25seSBlaWdodCBjb2xvcnMgYXZhaWxhYmxlLgorRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggVmltIDUuOCB0aGlzIGNvbnN0cnVjdGlvbiBpcyB1c2VkOiA+CisKKwlpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY19zeW5faW5pdHMiKQorCSAgaWYgdmVyc2lvbiA8IDUwOAorCSAgICBsZXQgZGlkX2Nfc3luX2luaXRzID0gMQorCSAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCSAgZWxzZQorCSAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKwkgIGVuZGlmCisKKwkgIEhpTGluayBuYW1lU3RyaW5nCVN0cmluZworCSAgSGlMaW5rIG5hbWVOdW1iZXIJTnVtYmVyCisJICAuLi4gZXRjIC4uLgorCisJICBkZWxjb21tYW5kIEhpTGluaworCWVuZGlmCisKK0FkZCB0aGUgImRpc3BsYXkiIGFyZ3VtZW50IHRvIGl0ZW1zIHRoYXQgYXJlIG5vdCB1c2VkIHdoZW4gc3luY2luZywgdG8gc3BlZWQKK3VwIHNjcm9sbGluZyBiYWNrd2FyZHMgYW5kIENUUkwtTC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl80NS50eHR8ICBTZWxlY3QgeW91ciBsYW5ndWFnZQorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl80NS50eHQgYi9ydW50aW1lL2RvYy91c3JfNDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNGIwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfNDUudHh0CkBAIC0wLDAgKzEsNDE5IEBACisqdXNyXzQ1LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA4CisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgIFNlbGVjdCB5b3VyIGxhbmd1YWdlCisKKworVGhlIG1lc3NhZ2VzIGluIFZpbSBjYW4gYmUgZ2l2ZW4gaW4gc2V2ZXJhbCBsYW5ndWFnZXMuICBUaGlzIGNoYXB0ZXIgZXhwbGFpbnMKK2hvdyB0byBjaGFuZ2Ugd2hpY2ggb25lIGlzIHVzZWQuICBBbHNvLCB0aGUgZGlmZmVyZW50IHdheXMgdG8gd29yayB3aXRoIGZpbGVzCitpbiB2YXJpb3VzIGxhbmd1YWdlcyBpcyBleHBsYWluZWQuCisKK3w0NS4xfAlMYW5ndWFnZSBmb3IgTWVzc2FnZXMKK3w0NS4yfAlMYW5ndWFnZSBmb3IgTWVudXMKK3w0NS4zfAlVc2luZyBhbm90aGVyIGVuY29kaW5nCit8NDUuNHwJRWRpdGluZyBmaWxlcyB3aXRoIGEgZGlmZmVyZW50IGVuY29kaW5nCit8NDUuNXwJRW50ZXJpbmcgbGFuZ3VhZ2UgdGV4dAorCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl85MC50eHR8ICBJbnN0YWxsaW5nIFZpbQorIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfNDQudHh0fCAgWW91ciBvd24gc3ludGF4IGhpZ2hsaWdodGVkCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0NS4xKglMYW5ndWFnZSBmb3IgTWVzc2FnZXMKKworV2hlbiB5b3Ugc3RhcnQgVmltLCBpdCBjaGVja3MgdGhlIGVudmlyb25tZW50IHRvIGZpbmQgb3V0IHdoYXQgbGFuZ3VhZ2UgeW91CithcmUgdXNpbmcuICBNb3N0bHkgdGhpcyBzaG91bGQgd29yayBmaW5lLCBhbmQgeW91IGdldCB0aGUgbWVzc2FnZXMgaW4geW91cgorbGFuZ3VhZ2UgKGlmIHRoZXkgYXJlIGF2YWlsYWJsZSkuICBUbyBzZWUgd2hhdCB0aGUgY3VycmVudCBsYW5ndWFnZSBpcywgdXNlCit0aGlzIGNvbW1hbmQ6ID4KKworCTpsYW5ndWFnZQorCitJZiBpdCByZXBsaWVzIHdpdGggIkMiLCB0aGlzIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGJlaW5nIHVzZWQsIHdoaWNoIGlzCitFbmdsaXNoLgorCisJTm90ZToKKwlVc2luZyBkaWZmZXJlbnQgbGFuZ3VhZ2VzIG9ubHkgd29ya3Mgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHRvIGhhbmRsZQorCWl0LiAgVG8gZmluZCBvdXQgaWYgaXQgd29ya3MsIHVzZSB0aGUgIjp2ZXJzaW9uIiBjb21tYW5kIGFuZCBjaGVjayB0aGUKKwlvdXRwdXQgZm9yICIrZ2V0dGV4dCIgYW5kICIrbXVsdGlfbGFuZyIuICBJZiB0aGV5IGFyZSB0aGVyZSwgeW91IGFyZQorCU9LLiAgSWYgeW91IHNlZSAiLWdldHRleHQiIG9yICItbXVsdGlfbGFuZyIgeW91IHdpbGwgaGF2ZSB0byBmaW5kCisJYW5vdGhlciBWaW0uCisKK1doYXQgaWYgeW91IHdvdWxkIGxpa2UgeW91ciBtZXNzYWdlcyBpbiBhIGRpZmZlcmVudCBsYW5ndWFnZT8gIFRoZXJlIGFyZQorc2V2ZXJhbCB3YXlzLiAgV2hpY2ggb25lIHlvdSBzaG91bGQgdXNlIGRlcGVuZHMgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB5b3VyCitzeXN0ZW0uCisgICBUaGUgZmlyc3Qgd2F5IGlzIHRvIHNldCB0aGUgZW52aXJvbm1lbnQgdG8gdGhlIGRlc2lyZWQgbGFuZ3VhZ2UgYmVmb3JlCitzdGFydGluZyBWaW0uICBFeGFtcGxlIGZvciBVbml4OiA+CisKKwllbnYgTEFORz1kZV9ERS5JU09fODg1OS0xICB2aW0KKworVGhpcyBvbmx5IHdvcmtzIGlmIHRoZSBsYW5ndWFnZSBpcyBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0uICBUaGUgYWR2YW50YWdlIGlzCit0aGF0IGFsbCB0aGUgR1VJIG1lc3NhZ2VzIGFuZCB0aGluZ3MgaW4gbGlicmFyaWVzIHdpbGwgdXNlIHRoZSByaWdodCBsYW5ndWFnZQorYXMgd2VsbC4gIEEgZGlzYWR2YW50YWdlIGlzIHRoYXQgeW91IG11c3QgZG8gdGhpcyBiZWZvcmUgc3RhcnRpbmcgVmltLiAgSWYgeW91Cit3YW50IHRvIGNoYW5nZSBsYW5ndWFnZSB3aGlsZSBWaW0gaXMgcnVubmluZywgeW91IGNhbiB1c2UgdGhlIHNlY29uZCBtZXRob2Q6ID4KKworCTpsYW5ndWFnZSBmcl9GUi5JU09fODg1OS0xCisKK1RoaXMgd2F5IHlvdSBjYW4gdHJ5IG91dCBzZXZlcmFsIG5hbWVzIGZvciB5b3VyIGxhbmd1YWdlLiAgWW91IHdpbGwgZ2V0IGFuCitlcnJvciBtZXNzYWdlIHdoZW4gaXQncyBub3Qgc3VwcG9ydGVkIG9uIHlvdXIgc3lzdGVtLiAgWW91IGRvbid0IGdldCBhbiBlcnJvcgord2hlbiB0cmFuc2xhdGVkIG1lc3NhZ2VzIGFyZSBub3QgYXZhaWxhYmxlLiAgVmltIHdpbGwgc2lsZW50bHkgZmFsbCBiYWNrIHRvCit1c2luZyBFbmdsaXNoLgorICAgVG8gZmluZCBvdXQgd2hpY2ggbGFuZ3VhZ2VzIGFyZSBzdXBwb3J0ZWQgb24geW91ciBzeXN0ZW0sIGZpbmQgdGhlCitkaXJlY3Rvcnkgd2hlcmUgdGhleSBhcmUgbGlzdGVkLiAgT24gbXkgc3lzdGVtIGl0IGlzICIvdXNyL3NoYXJlL2xvY2FsZSIuICBPbgorc29tZSBzeXN0ZW1zIGl0J3MgaW4gIi91c3IvbGliL2xvY2FsZSIuICBUaGUgbWFudWFsIHBhZ2UgZm9yICJzZXRsb2NhbGUiCitzaG91bGQgZ2l2ZSB5b3UgYSBoaW50IHdoZXJlIGl0IGlzIGZvdW5kIG9uIHlvdXIgc3lzdGVtLgorICAgQmUgY2FyZWZ1bCB0byB0eXBlIHRoZSBuYW1lIGV4YWN0bHkgYXMgaXQgc2hvdWxkIGJlLiAgVXBwZXIgYW5kIGxvd2VyY2FzZQorbWF0dGVyLCBhbmQgdGhlICctJyBhbmQgJ18nIGNoYXJhY3RlcnMgYXJlIGVhc2lseSBjb25mdXNlZC4KKworWW91IGNhbiBhbHNvIHNldCB0aGUgbGFuZ3VhZ2Ugc2VwYXJhdGVseSBmb3IgbWVzc2FnZXMsIGVkaXRlZCB0ZXh0IGFuZCB0aGUKK3RpbWUgZm9ybWF0LiAgU2VlIHw6bGFuZ3VhZ2V8LgorCisKK0RPLUlULVlPVVJTRUxGIE1FU1NBR0UgVFJBTlNMQVRJT04KKworSWYgdHJhbnNsYXRlZCBtZXNzYWdlcyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgeW91ciBsYW5ndWFnZSwgeW91IGNvdWxkIHdyaXRlCit0aGVtIHlvdXJzZWxmLiAgVG8gZG8gdGhpcywgZ2V0IHRoZSBzb3VyY2UgY29kZSBmb3IgVmltIGFuZCB0aGUgR05VIGdldHRleHQKK3BhY2thZ2UuICBBZnRlciB1bnBhY2tpbmcgdGhlIHNvdXJjZXMsIGluc3RydWN0aW9ucyBjYW4gYmUgZm91bmQgaW4gdGhlCitkaXJlY3Rvcnkgc3JjL3BvL1JFQURNRS50eHQuCisgICBJdCdzIG5vdCB0b28gZGlmZmljdWx0IHRvIGRvIHRoZSB0cmFuc2xhdGlvbi4gIFlvdSBkb24ndCBuZWVkIHRvIGJlIGEKK3Byb2dyYW1tZXIuICBZb3UgbXVzdCBrbm93IGJvdGggRW5nbGlzaCBhbmQgdGhlIGxhbmd1YWdlIHlvdSBhcmUgdHJhbnNsYXRpbmcKK3RvLCBvZiBjb3Vyc2UuCisgICBXaGVuIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIHRyYW5zbGF0aW9uLCBjb25zaWRlciBtYWtpbmcgaXQgYXZhaWxhYmxlCit0byBvdGhlcnMuICBVcGxvYWQgaXQgYXQgdmltLW9ubGluZSAoaHR0cDovL3ZpbS5zZi5uZXQpIG9yIGUtbWFpbCBpdCB0bwordGhlIFZpbSBtYWludGFpbmVyIDxtYWludGFpbmVyQHZpbS5vcmc+LiAgT3IgYm90aC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDUuMioJTGFuZ3VhZ2UgZm9yIE1lbnVzCisKK1RoZSBkZWZhdWx0IG1lbnVzIGFyZSBpbiBFbmdsaXNoLiAgVG8gYmUgYWJsZSB0byB1c2UgeW91ciBsb2NhbCBsYW5ndWFnZSwgdGhleQorbXVzdCBiZSB0cmFuc2xhdGVkLiAgTm9ybWFsbHkgdGhpcyBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgZm9yIHlvdSBpZiB0aGUKK2Vudmlyb25tZW50IGlzIHNldCBmb3IgeW91ciBsYW5ndWFnZSwganVzdCBsaWtlIHdpdGggbWVzc2FnZXMuICBZb3UgZG9uJ3QgbmVlZAordG8gZG8gYW55dGhpbmcgZXh0cmEgZm9yIHRoaXMuICBCdXQgaXQgb25seSB3b3JrcyBpZiB0cmFuc2xhdGlvbnMgZm9yIHRoZQorbGFuZ3VhZ2UgYXJlIGF2YWlsYWJsZS4KKyAgIFN1cHBvc2UgeW91IGFyZSBpbiBHZXJtYW55LCB3aXRoIHRoZSBsYW5ndWFnZSBzZXQgdG8gR2VybWFuLCBidXQgcHJlZmVyIHRvCit1c2UgIkZpbGUiIGluc3RlYWQgb2YgIkRhdGVpIi4gIFlvdSBjYW4gc3dpdGNoIGJhY2sgdG8gdXNpbmcgdGhlIEVuZ2xpc2ggbWVudXMKK3RoaXMgd2F5OiA+CisKKwk6c2V0IGxhbmdtZW51PW5vbmUKKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEgbGFuZ3VhZ2U6ID4KKworCTpzZXQgbGFuZ21lbnU9bmxfTkwuSVNPXzg4NTktMQorCitMaWtlIGFib3ZlLCBkaWZmZXJlbmNlcyBiZXR3ZWVuICItIiBhbmQgIl8iIG1hdHRlci4gIEhvd2V2ZXIsIHVwcGVyL2xvd2VyY2FzZQorZGlmZmVyZW5jZXMgYXJlIGlnbm9yZWQgaGVyZS4KKyAgIFRoZSAnbGFuZ21lbnUnIG9wdGlvbiBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIG1lbnVzIGFyZSBsb2FkZWQuICBPbmNlIHRoZQorbWVudXMgaGF2ZSBiZWVuIGRlZmluZWQgY2hhbmdpbmcgJ2xhbmdtZW51JyBoYXMgbm8gZGlyZWN0IGVmZmVjdC4gIFRoZXJlZm9yZSwKK3B1dCB0aGUgY29tbWFuZCB0byBzZXQgJ2xhbmdtZW51JyBpbiB5b3VyIHZpbXJjIGZpbGUuCisgICBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gc3dpdGNoIG1lbnUgbGFuZ3VhZ2Ugd2hpbGUgcnVubmluZyBWaW0sIHlvdSBjYW4gZG8gaXQKK3RoaXMgd2F5OiA+CisKKwk6c291cmNlICRWSU1SVU5USU1FL2RlbG1lbnUudmltCisJOnNldCBsYW5nbWVudT1kZV9ERS5JU09fODg1OS0xCisJOnNvdXJjZSAkVklNUlVOVElNRS9tZW51LnZpbQorCitUaGVyZSBpcyBvbmUgZHJhd2JhY2s6IEFsbCBtZW51cyB0aGF0IHlvdSBkZWZpbmVkIHlvdXJzZWxmIHdpbGwgYmUgZ29uZS4gIFlvdQord2lsbCBuZWVkIHRvIHJlZGVmaW5lIHRoZW0gYXMgd2VsbC4KKworCitETy1JVC1ZT1VSU0VMRiBNRU5VIFRSQU5TTEFUSU9OCisKK1RvIHNlZSB3aGljaCBtZW51IHRyYW5zbGF0aW9ucyBhcmUgYXZhaWxhYmxlLCBsb29rIGluIHRoaXMgZGlyZWN0b3J5OgorCisJJFZJTVJVTlRJTUUvbGFuZyB+CisKK1RoZSBmaWxlcyBhcmUgY2FsbGVkIG1lbnVfe2xhbmd1YWdlfS52aW0uICBJZiB5b3UgZG9uJ3Qgc2VlIHRoZSBsYW5ndWFnZSB5b3UKK3dhbnQgdG8gdXNlLCB5b3UgY2FuIGRvIHlvdXIgb3duIHRyYW5zbGF0aW9ucy4gIFRoZSBzaW1wbGVzdCB3YXkgdG8gZG8gdGhpcyBpcworYnkgY29weWluZyBvbmUgb2YgdGhlIGV4aXN0aW5nIGxhbmd1YWdlIGZpbGVzLCBhbmQgY2hhbmdlIGl0LgorICAgRmlyc3QgZmluZCBvdXQgdGhlIG5hbWUgb2YgeW91ciBsYW5ndWFnZSB3aXRoIHRoZSAiOmxhbmd1YWdlIiBjb21tYW5kLiAgVXNlCit0aGlzIG5hbWUsIGJ1dCB3aXRoIGFsbCBsZXR0ZXJzIG1hZGUgbG93ZXJjYXNlLiAgVGhlbiBjb3B5IHRoZSBmaWxlIHRvIHlvdXIKK293biBydW50aW1lIGRpcmVjdG9yeSwgYXMgZm91bmQgZWFybHkgaW4gJ3J1bnRpbWVwYXRoJy4gIEZvciBleGFtcGxlLCBmb3IgVW5peAoreW91IHdvdWxkIGRvOiA+CisKKwk6IWNwICRWSU1SVU5USU1FL2xhbmcvbWVudV9rb19rci5ldWNrci52aW0gfi8udmltL2xhbmcvbWVudV9ubF9iZS5pc29fODg1OS0xLnZpbQorCitZb3Ugd2lsbCBmaW5kIGhpbnRzIGZvciB0aGUgdHJhbnNsYXRpb24gaW4gIiRWSU1SVU5USU1FL2xhbmcvUkVBRE1FLnR4dCIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ1LjMqCVVzaW5nIGFub3RoZXIgZW5jb2RpbmcKKworVmltIGd1ZXNzZXMgdGhhdCB0aGUgZmlsZXMgeW91IGFyZSBnb2luZyB0byBlZGl0IGFyZSBlbmNvZGVkIGZvciB5b3VyCitsYW5ndWFnZS4gIEZvciBtYW55IEV1cm9wZWFuIGxhbmd1YWdlcyB0aGlzIGlzICJsYXRpbjEiLiAgVGhlbiBlYWNoIGJ5dGUgaXMKK29uZSBjaGFyYWN0ZXIuICBUaGF0IG1lYW5zIHRoZXJlIGFyZSAyNTYgZGlmZmVyZW50IGNoYXJhY3RlcnMgcG9zc2libGUuICBGb3IKK0FzaWFuIGxhbmd1YWdlcyB0aGlzIGlzIG5vdCBzdWZmaWNpZW50LiAgVGhlc2UgbW9zdGx5IHVzZSBhIGRvdWJsZS1ieXRlCitlbmNvZGluZywgcHJvdmlkaW5nIGZvciBvdmVyIHRlbiB0aG91c2FuZCBwb3NzaWJsZSBjaGFyYWN0ZXJzLiAgVGhpcyBzdGlsbAoraXNuJ3QgZW5vdWdoIHdoZW4gYSB0ZXh0IGlzIHRvIGNvbnRhaW4gc2V2ZXJhbCBkaWZmZXJlbnQgbGFuZ3VhZ2VzLiAgVGhpcyBpcword2hlcmUgVW5pY29kZSBjb21lcyBpbi4gIEl0IHdhcyBkZXNpZ25lZCB0byBpbmNsdWRlIGFsbCBjaGFyYWN0ZXJzIHVzZWQgaW4KK2NvbW1vbmx5IHVzZWQgbGFuZ3VhZ2VzLiAgVGhpcyBpcyB0aGUgIlN1cGVyIGVuY29kaW5nIHRoYXQgcmVwbGFjZXMgYWxsCitvdGhlcnMiLiAgQnV0IGl0IGlzbid0IHVzZWQgdGhhdCBtdWNoIHlldC4KKyAgIEZvcnR1bmF0ZWx5LCBWaW0gc3VwcG9ydHMgdGhlc2UgdGhyZWUga2luZHMgb2YgZW5jb2RpbmdzLiAgQW5kLCB3aXRoIHNvbWUKK3Jlc3RyaWN0aW9ucywgeW91IGNhbiB1c2UgdGhlbSBldmVuIHdoZW4geW91ciBlbnZpcm9ubWVudCB1c2VzIGFub3RoZXIKK2xhbmd1YWdlIHRoYW4gdGhlIHRleHQuCisgICBOZXZlcnRoZWxlc3MsIHdoZW4geW91IG9ubHkgZWRpdCBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgZW5jb2Rpbmcgb2YgeW91cgorbGFuZ3VhZ2UsIHRoZSBkZWZhdWx0IHNob3VsZCB3b3JrIGZpbmUgYW5kIHlvdSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiAgVGhlCitmb2xsb3dpbmcgaXMgb25seSByZWxldmFudCB3aGVuIHlvdSB3YW50IHRvIGVkaXQgZGlmZmVyZW50IGxhbmd1YWdlcy4KKworCU5vdGU6CisJVXNpbmcgZGlmZmVyZW50IGVuY29kaW5ncyBvbmx5IHdvcmtzIHdoZW4gVmltIHdhcyBjb21waWxlZCB0byBoYW5kbGUKKwlpdC4gIFRvIGZpbmQgb3V0IGlmIGl0IHdvcmtzLCB1c2UgdGhlICI6dmVyc2lvbiIgY29tbWFuZCBhbmQgY2hlY2sgdGhlCisJb3V0cHV0IGZvciAiK211bHRpX2J5dGUiLiAgSWYgaXQncyB0aGVyZSwgeW91IGFyZSBPSy4gIElmIHlvdSBzZWUKKwkiLW11bHRpX2J5dGUiIHlvdSB3aWxsIGhhdmUgdG8gZmluZCBhbm90aGVyIFZpbS4KKworCitVU0lORyBVTklDT0RFIElOIFRIRSBHVUkKKworVGhlIG5pY2UgdGhpbmcgYWJvdXQgVW5pY29kZSBpcyB0aGF0IG90aGVyIGVuY29kaW5ncyBjYW4gYmUgY29udmVydGVkIHRvIGl0CithbmQgYmFjayB3aXRob3V0IGxvc2luZyBpbmZvcm1hdGlvbi4gIFdoZW4geW91IG1ha2UgVmltIHVzZSBVbmljb2RlCitpbnRlcm5hbGx5LCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGVkaXQgZmlsZXMgaW4gYW55IGVuY29kaW5nLgorICAgVW5mb3J0dW5hdGVseSwgdGhlIG51bWJlciBvZiBzeXN0ZW1zIHN1cHBvcnRpbmcgVW5pY29kZSBpcyBzdGlsbCBsaW1pdGVkLgorVGh1cyBpdCdzIHVubGlrZWx5IHRoYXQgeW91ciBsYW5ndWFnZSB1c2VzIGl0LiAgWW91IG5lZWQgdG8gdGVsbCBWaW0geW91IHdhbnQKK3RvIHVzZSBVbmljb2RlLCBhbmQgaG93IHRvIGhhbmRsZSBpbnRlcmZhY2luZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uCisgICBMZXQncyBzdGFydCB3aXRoIHRoZSBHVUkgdmVyc2lvbiBvZiBWaW0sIHdoaWNoIGlzIGFibGUgdG8gZGlzcGxheSBVbmljb2RlCitjaGFyYWN0ZXJzLiAgVGhpcyBzaG91bGQgd29yazogPgorCisJOnNldCBlbmNvZGluZz11dGYtOAorCTpzZXQgZ3VpZm9udD0tbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvMTA2NDYtMQorCitUaGUgJ2VuY29kaW5nJyBvcHRpb24gdGVsbHMgVmltIHRoZSBlbmNvZGluZyBvZiB0aGUgY2hhcmFjdGVycyB0aGF0IHlvdSB1c2UuCitUaGlzIGFwcGxpZXMgdG8gdGhlIHRleHQgaW4gYnVmZmVycyAoZmlsZXMgeW91IGFyZSBlZGl0aW5nKSwgcmVnaXN0ZXJzLCBWaW0KK3NjcmlwdCBmaWxlcywgZXRjLiAgWW91IGNhbiByZWdhcmQgJ2VuY29kaW5nJyBhcyB0aGUgc2V0dGluZyBmb3IgdGhlIGludGVybmFscworb2YgVmltLgorICAgVGhpcyBleGFtcGxlIGFzc3VtZXMgeW91IGhhdmUgdGhpcyBmb250IG9uIHlvdXIgc3lzdGVtLiAgVGhlIG5hbWUgaW4gdGhlCitleGFtcGxlIGlzIGZvciB0aGUgWCBXaW5kb3cgU3lzdGVtLiAgVGhpcyBmb250IGlzIGluIGEgcGFja2FnZSB0aGF0IGlzIHVzZWQgdG8KK2VuaGFuY2UgeHRlcm0gd2l0aCBVbmljb2RlIHN1cHBvcnQuICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGlzIGZvbnQsIHlvdSBtaWdodAorZmluZCBpdCBoZXJlOgorCisJaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L2Rvd25sb2FkL3Vjcy1mb250cy50YXIuZ3ogfgorCitGb3IgTVMtV2luZG93cywgc29tZSBmb250cyBoYXZlIGEgbGltaXRlZCBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzLiAgVHJ5Cit1c2luZyB0aGUgIkNvdXJpZXIgTmV3IiBmb250LiAgWW91IGNhbiB1c2UgdGhlIEVkaXQvU2VsZWN0IEZvbnQuLi4gbWVudSB0bworc2VsZWN0IGFuZCB0cnkgb3V0IHRoZSBmb250cyBhdmFpbGFibGUuICBPbmx5IGZpeGVkLXdpZHRoIGZvbnRzIGNhbiBiZSB1c2VkCit0aG91Z2guICBFeGFtcGxlOiA+CisKKwk6c2V0IGd1aWZvbnQ9Y291cmllcl9uZXc6aDEyCisKK0lmIGl0IGRvZXNuJ3Qgd29yayB3ZWxsLCB0cnkgZ2V0dGluZyBhIGZvbnRwYWNrLiAgSWYgTWljcm9zb2Z0IGRpZG4ndCBtb3ZlIGl0LAoreW91IGNhbiBmaW5kIGl0IGhlcmU6CisKKwlodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9mb250cGFjay9kZWZhdWx0Lmh0bSB+CisKK05vdyB5b3UgaGF2ZSB0b2xkIFZpbSB0byB1c2UgVW5pY29kZSBpbnRlcm5hbGx5IGFuZCBkaXNwbGF5IHRleHQgd2l0aCBhCitVbmljb2RlIGZvbnQuICBUeXBlZCBjaGFyYWN0ZXJzIHN0aWxsIGFycml2ZSBpbiB0aGUgZW5jb2Rpbmcgb2YgeW91ciBvcmlnaW5hbAorbGFuZ3VhZ2UuICBUaGlzIHJlcXVpcmVzIGNvbnZlcnRpbmcgdGhlbSB0byBVbmljb2RlLiAgVGVsbCBWaW0gdGhlIGxhbmd1YWdlCitmcm9tIHdoaWNoIHRvIGNvbnZlcnQgd2l0aCB0aGUgJ3Rlcm1lbmNvZGluZycgb3B0aW9uLiAgWW91IGNhbiBkbyBpdCBsaWtlCit0aGlzOiA+CisKKwk6bGV0ICZ0ZXJtZW5jb2RpbmcgPSAmZW5jb2RpbmcKKwk6c2V0IGVuY29kaW5nPXV0Zi04CisKK1RoaXMgYXNzaWducyB0aGUgb2xkIHZhbHVlIG9mICdlbmNvZGluZycgdG8gJ3Rlcm1lbmNvZGluZycgYmVmb3JlIHNldHRpbmcKKydlbmNvZGluZycgdG8gdXRmLTguICBZb3Ugd2lsbCBoYXZlIHRvIHRyeSBvdXQgaWYgdGhpcyByZWFsbHkgd29ya3MgZm9yIHlvdXIKK3NldHVwLiAgSXQgc2hvdWxkIHdvcmsgZXNwZWNpYWxseSB3ZWxsIHdoZW4gdXNpbmcgYW4gaW5wdXQgbWV0aG9kIGZvciBhbiBBc2lhbgorbGFuZ3VhZ2UsIGFuZCB5b3Ugd2FudCB0byBlZGl0IFVuaWNvZGUgdGV4dC4KKworCitVU0lORyBVTklDT0RFIElOIEEgVU5JQ09ERSBURVJNSU5BTAorCitUaGVyZSBhcmUgdGVybWluYWxzIHRoYXQgc3VwcG9ydCBVbmljb2RlIGRpcmVjdGx5LiAgVGhlIHN0YW5kYXJkIHh0ZXJtIHRoYXQKK2NvbWVzIHdpdGggWEZyZWU4NiBpcyBvbmUgb2YgdGhlbS4gIExldCdzIHVzZSB0aGF0IGFzIGFuIGV4YW1wbGUuCisgICBGaXJzdCBvZiBhbGwsIHRoZSB4dGVybSBtdXN0IGhhdmUgYmVlbiBjb21waWxlZCB3aXRoIFVuaWNvZGUgc3VwcG9ydC4gIFNlZQorfFVURjgteHRlcm18IGhvdyB0byBjaGVjayB0aGF0IGFuZCBob3cgdG8gY29tcGlsZSBpdCB3aGVuIG5lZWRlZC4KKyAgIFN0YXJ0IHRoZSB4dGVybSB3aXRoIHRoZSAiLXU4IiBhcmd1bWVudC4gIFlvdSBtaWdodCBhbHNvIG5lZWQgc28gc3BlY2lmeSBhCitmb250LiAgRXhhbXBsZTogPgorCisgICB4dGVybSAtdTggLWZuIC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc28xMDY0Ni0xCisKK05vdyB5b3UgY2FuIHJ1biBWaW0gaW5zaWRlIHRoaXMgdGVybWluYWwuICBTZXQgJ2VuY29kaW5nJyB0byAidXRmLTgiIGFzCitiZWZvcmUuICBUaGF0J3MgYWxsLgorCisKK1VTSU5HIFVOSUNPREUgSU4gQU4gT1JESU5BUlkgVEVSTUlOQUwKKworU3VwcG9zZSB5b3Ugd2FudCB0byB3b3JrIHdpdGggVW5pY29kZSBmaWxlcywgYnV0IGRvbid0IGhhdmUgYSB0ZXJtaW5hbCB3aXRoCitVbmljb2RlIHN1cHBvcnQuICBZb3UgY2FuIGRvIHRoaXMgd2l0aCBWaW0sIGFsdGhvdWdoIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90CitzdXBwb3J0ZWQgYnkgdGhlIHRlcm1pbmFsIHdpbGwgbm90IGJlIGRpc3BsYXllZC4gIFRoZSBsYXlvdXQgb2YgdGhlIHRleHQKK3dpbGwgYmUgcHJlc2VydmVkLiAgPgorCisJOmxldCAmdGVybWVuY29kaW5nID0gJmVuY29kaW5nCisJOnNldCBlbmNvZGluZz11dGYtOAorCitUaGlzIGlzIHRoZSBzYW1lIGFzIHdoYXQgd2FzIHVzZWQgZm9yIHRoZSBHVUkuICBCdXQgaXQgd29ya3MgZGlmZmVyZW50bHk6IFZpbQord2lsbCBjb252ZXJ0IHRoZSBkaXNwbGF5ZWQgdGV4dCBiZWZvcmUgc2VuZGluZyBpdCB0byB0aGUgdGVybWluYWwuICBUaGF0Cithdm9pZHMgdGhhdCB0aGUgZGlzcGxheSBpcyBtZXNzZWQgdXAgd2l0aCBzdHJhbmdlIGNoYXJhY3RlcnMuCisgICBGb3IgdGhpcyB0byB3b3JrIHRoZSBjb252ZXJzaW9uIGJldHdlZW4gJ3Rlcm1lbmNvZGluZycgYW5kICdlbmNvZGluZycgbXVzdAorYmUgcG9zc2libGUuICBWaW0gd2lsbCBjb252ZXJ0IGZyb20gbGF0aW4xIHRvIFVuaWNvZGUsIHRodXMgdGhhdCBhbHdheXMgd29ya3MuCitGb3Igb3RoZXIgY29udmVyc2lvbnMgdGhlIHwraWNvbnZ8IGZlYXR1cmUgaXMgcmVxdWlyZWQuCisgICBUcnkgZWRpdGluZyBhIGZpbGUgd2l0aCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gaXQuICBZb3Ugd2lsbCBub3RpY2UgdGhhdCBWaW0KK3dpbGwgcHV0IGEgcXVlc3Rpb24gbWFyayAob3IgdW5kZXJzY29yZSBvciBzb21lIG90aGVyIGNoYXJhY3RlcikgaW4gcGxhY2VzCit3aGVyZSBhIGNoYXJhY3RlciBzaG91bGQgYmUgdGhhdCB0aGUgdGVybWluYWwgY2FuJ3QgZGlzcGxheS4gIE1vdmUgdGhlIGN1cnNvcgordG8gYSBxdWVzdGlvbiBtYXJrIGFuZCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwlnYQorCitWaW0gd2lsbCBkaXNwbGF5IGEgbGluZSB3aXRoIHRoZSBjb2RlIG9mIHRoZSBjaGFyYWN0ZXIuICBUaGlzIGdpdmVzIHlvdSBhIGhpbnQKK2Fib3V0IHdoYXQgY2hhcmFjdGVyIGl0IGlzLiAgWW91IGNhbiBsb29rIGl0IHVwIGluIGEgVW5pY29kZSB0YWJsZS4gIFlvdSBjb3VsZAorYWN0dWFsbHkgdmlldyBhIGZpbGUgdGhhdCB3YXksIGlmIHlvdSBoYXZlIGxvdHMgb2YgdGltZSBhdCBoYW5kLgorCisJTm90ZToKKwlTaW5jZSAnZW5jb2RpbmcnIGlzIHVzZWQgZm9yIGFsbCB0ZXh0IGluc2lkZSBWaW0sIGNoYW5naW5nIGl0IG1ha2VzCisJYWxsIG5vbi1BU0NJSSB0ZXh0IGludmFsaWQuICBZb3Ugd2lsbCBub3RpY2UgdGhpcyB3aGVuIHVzaW5nIHJlZ2lzdGVycworCWFuZCB0aGUgJ3ZpbWluZm8nIGZpbGUgKGUuZy4sIGEgcmVtZW1iZXJlZCBzZWFyY2ggcGF0dGVybikuICBJdCdzCisJcmVjb21tZW5kZWQgdG8gc2V0ICdlbmNvZGluZycgaW4geW91ciB2aW1yYyBmaWxlLCBhbmQgbGVhdmUgaXQgYWxvbmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ1LjQqCUVkaXRpbmcgZmlsZXMgd2l0aCBhIGRpZmZlcmVudCBlbmNvZGluZworCitTdXBwb3NlIHlvdSBoYXZlIHNldHVwIFZpbSB0byB1c2UgVW5pY29kZSwgYW5kIHlvdSB3YW50IHRvIGVkaXQgYSBmaWxlIHRoYXQgaXMKK2luIDE2LWJpdCBVbmljb2RlLiAgU291bmRzIHNpbXBsZSwgcmlnaHQ/ICBXZWxsLCBWaW0gYWN0dWFsbHkgdXNlcyB1dGYtOAorZW5jb2RpbmcgaW50ZXJuYWxseSwgdGh1cyB0aGUgMTYtYml0IGVuY29kaW5nIG11c3QgYmUgY29udmVydGVkLiAgVGh1cyB0aGVyZQoraXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNoYXJhY3RlciBzZXQgKFVuaWNvZGUpIGFuZCB0aGUgZW5jb2RpbmcgKHV0Zi04IG9yCisxNi1iaXQpLgorICAgVmltIHdpbGwgdHJ5IHRvIGRldGVjdCB3aGF0IGtpbmQgb2YgZmlsZSB5b3UgYXJlIGVkaXRpbmcuICBJdCB1c2VzIHRoZQorZW5jb2RpbmcgbmFtZXMgaW4gdGhlICdmaWxlZW5jb2RpbmdzJyBvcHRpb24uICBXaGVuIHVzaW5nIFVuaWNvZGUsIHRoZSBkZWZhdWx0Cit2YWx1ZSBpczogInVjcy1ib20sdXRmLTgsbGF0aW4xIi4gIFRoaXMgbWVhbnMgdGhhdCBWaW0gY2hlY2tzIHRoZSBmaWxlIHRvIHNlZQoraWYgaXQncyBvbmUgb2YgdGhlc2UgZW5jb2RpbmdzOgorCisJdWNzLWJvbQkJRmlsZSBtdXN0IHN0YXJ0IHdpdGggYSBCeXRlIE9yZGVyIE1hcmsgKEJPTSkuICBUaGlzCisJCQlhbGxvd3MgZGV0ZWN0aW9uIG9mIDE2LWJpdCwgMzItYml0IGFuZCB1dGYtOCBVbmljb2RlCisJCQllbmNvZGluZ3MuCisJdXRmLTgJCXV0Zi04IFVuaWNvZGUuICBUaGlzIGlzIHJlamVjdGVkIHdoZW4gYSBzZXF1ZW5jZSBvZgorCQkJYnl0ZXMgaXMgaWxsZWdhbCBpbiB1dGYtOC4KKwlsYXRpbjEJCVRoZSBnb29kIG9sZCA4LWJpdCBlbmNvZGluZy4gIEFsd2F5cyB3b3Jrcy4KKworV2hlbiB5b3Ugc3RhcnQgZWRpdGluZyB0aGF0IDE2LWJpdCBVbmljb2RlIGZpbGUsIGFuZCBpdCBoYXMgYSBCT00sIFZpbSB3aWxsCitkZXRlY3QgdGhpcyBhbmQgY29udmVydCB0aGUgZmlsZSB0byB1dGYtOCB3aGVuIHJlYWRpbmcgaXQuICBUaGUgJ2ZpbGVlbmNvZGluZycKK29wdGlvbiAod2l0aG91dCBzIGF0IHRoZSBlbmQpIGlzIHNldCB0byB0aGUgZGV0ZWN0ZWQgdmFsdWUuICBJbiB0aGlzIGNhc2UgaXQKK2lzICJ1Y3MtMmxlIi4gIFRoYXQgbWVhbnMgaXQncyBVbmljb2RlLCB0d28gYnl0ZXMgYW5kIGxpdHRsZS1lbmRpYW4uICBUaGlzCitmaWxlIGZvcm1hdCBpcyBjb21tb24gb24gTVMtV2luZG93cyAoZS5nLiwgZm9yIHJlZ2lzdHJ5IGZpbGVzKS4KKyAgIFdoZW4gd3JpdGluZyB0aGUgZmlsZSwgVmltIHdpbGwgY29tcGFyZSAnZmlsZWVuY29kaW5nJyB3aXRoICdlbmNvZGluZycuICBJZgordGhleSBhcmUgZGlmZmVyZW50LCB0aGUgdGV4dCB3aWxsIGJlIGNvbnZlcnRlZC4KKyAgIEFuIGVtcHR5IHZhbHVlIGZvciAnZmlsZWVuY29kaW5nJyBtZWFucyB0aGF0IG5vIGNvbnZlcnNpb24gaXMgdG8gYmUgZG9uZS4KK1RodXMgdGhlIHRleHQgaXMgYXNzdW1lZCB0byBiZSBlbmNvZGVkIHdpdGggJ2VuY29kaW5nJy4KKworSWYgdGhlIGRlZmF1bHQgJ2ZpbGVlbmNvZGluZ3MnIHZhbHVlIGlzIG5vdCBnb29kIGZvciB5b3UsIHNldCBpdCB0byB0aGUKK2VuY29kaW5ncyB5b3Ugd2FudCBWaW0gdG8gdHJ5LiAgT25seSB3aGVuIGEgdmFsdWUgaXMgZm91bmQgdG8gYmUgaW52YWxpZCB3aWxsCit0aGUgbmV4dCBvbmUgYmUgdXNlZC4gIFB1dHRpbmcgImxhdGluMSIgZmlyc3QgZG9lc24ndCB3b3JrLCBiZWNhdXNlIGl0IGlzCituZXZlciBpbGxlZ2FsLiAgQW4gZXhhbXBsZSwgdG8gZmFsbCBiYWNrIHRvIEphcGFuZXNlIHdoZW4gdGhlIGZpbGUgZG9lc24ndAoraGF2ZSBhIEJPTSBhbmQgaXNuJ3QgdXRmLTg6ID4KKworCTpzZXQgZmlsZWVuY29kaW5ncz11Y3MtYm9tLHV0Zi04LHNqaXMKKworU2VlIHxlbmNvZGluZy12YWx1ZXN8IGZvciBzdWdnZXN0ZWQgdmFsdWVzLiAgT3RoZXIgdmFsdWVzIG1heSB3b3JrIGFzIHdlbGwuCitUaGlzIGRlcGVuZHMgb24gdGhlIGNvbnZlcnNpb24gYXZhaWxhYmxlLgorCisKK0ZPUkNJTkcgQU4gRU5DT0RJTkcKKworSWYgdGhlIGF1dG9tYXRpYyBkZXRlY3Rpb24gZG9lc24ndCB3b3JrIHlvdSBtdXN0IHRlbGwgVmltIHdoYXQgZW5jb2RpbmcgdGhlCitmaWxlIGlzLiAgRXhhbXBsZTogPgorCisJOmVkaXQgKytlbmM9a29pOC1yIHJ1c3NpYW4udHh0CisKK1RoZSAiKytlbmMiIHBhcnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB0byBiZSB1c2VkIGZvciB0aGlzIGZpbGUKK29ubHkuICBWaW0gd2lsbCBjb252ZXJ0IHRoZSBmaWxlIGZyb20gdGhlIHNwZWNpZmllZCBlbmNvZGluZywgUnVzc2lhbiBpbiB0aGlzCitleGFtcGxlLCB0byAnZW5jb2RpbmcnLiAgJ2ZpbGVlbmNvZGluZycgd2lsbCBhbHNvIGJlIHNldCB0byB0aGUgc3BlY2lmaWVkCitlbmNvZGluZywgc28gdGhhdCB0aGUgcmV2ZXJzZSBjb252ZXJzaW9uIGNhbiBiZSBkb25lIHdoZW4gd3JpdGluZyB0aGUgZmlsZS4KKyAgIFRoZSBzYW1lIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHdoZW4gd3JpdGluZyB0aGUgZmlsZS4gIFRoaXMgd2F5IHlvdSBjYW4KK2FjdHVhbGx5IHVzZSBWaW0gdG8gY29udmVydCBhIGZpbGUuICBFeGFtcGxlOiA+CisKKwk6d3JpdGUgKytlbmM9dXRmLTggcnVzc2lhbi50eHQKKzwKKwlOb3RlOgorCUNvbnZlcnNpb24gbWF5IHJlc3VsdCBpbiBsb3N0IGNoYXJhY3RlcnMuICBDb252ZXJzaW9uIGZyb20gYW4gZW5jb2RpbmcKKwl0byBVbmljb2RlIGFuZCBiYWNrIGlzIG1vc3RseSBmcmVlIG9mIHRoaXMgcHJvYmxlbSwgdW5sZXNzIHRoZXJlIGFyZQorCWlsbGVnYWwgY2hhcmFjdGVycy4gIENvbnZlcnNpb24gZnJvbSBVbmljb2RlIHRvIG90aGVyIGVuY29kaW5ncyBvZnRlbgorCWxvc2VzIGluZm9ybWF0aW9uIHdoZW4gdGhlcmUgd2FzIG1vcmUgdGhhbiBvbmUgbGFuZ3VhZ2UgaW4gdGhlIGZpbGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ1LjUqCUVudGVyaW5nIGxhbmd1YWdlIHRleHQKKworQ29tcHV0ZXIga2V5Ym9hcmRzIGRvbid0IGhhdmUgbXVjaCBtb3JlIHRoYW4gYSBodW5kcmVkIGtleXMuICBTb21lIGxhbmd1YWdlcworaGF2ZSB0aG91c2FuZHMgb2YgY2hhcmFjdGVycywgVW5pY29kZSBoYXMgdGVuIHRob3VzYW5kcy4gIFNvIGhvdyBkbyB5b3UgdHlwZQordGhlc2UgY2hhcmFjdGVycz8KKyAgIEZpcnN0IG9mIGFsbCwgd2hlbiB5b3UgZG9uJ3QgdXNlIHRvbyBtYW55IG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMsIHlvdQorY2FuIHVzZSBkaWdyYXBocy4gIFRoaXMgd2FzIGFscmVhZHkgZXhwbGFpbmVkIGluIHwyNC45fC4KKyAgIFdoZW4geW91IHVzZSBhIGxhbmd1YWdlIHRoYXQgdXNlcyBtYW55IG1vcmUgY2hhcmFjdGVycyB0aGFuIGtleXMgb24geW91cgora2V5Ym9hcmQsIHlvdSB3aWxsIHdhbnQgdG8gdXNlIGFuIElucHV0IE1ldGhvZCAoSU0pLiAgVGhpcyByZXF1aXJlcyBsZWFybmluZwordGhlIHRyYW5zbGF0aW9uIGZyb20gdHlwZWQga2V5cyB0byByZXN1bHRpbmcgY2hhcmFjdGVyLiAgV2hlbiB5b3UgbmVlZCBhbiBJTQoreW91IHByb2JhYmx5IGFscmVhZHkgaGF2ZSBvbmUgb24geW91ciBzeXN0ZW0uICBJdCBzaG91bGQgd29yayB3aXRoIFZpbSBsaWtlCit3aXRoIG90aGVyIHByb2dyYW1zLiAgRm9yIGRldGFpbHMgc2VlIHxtYnl0ZS1YSU18IGZvciB0aGUgWCBXaW5kb3cgc3lzdGVtIGFuZAorfG1ieXRlLUlNRXwgZm9yIE1TLVdpbmRvd3MuCisKKworS0VZTUFQUworCitGb3Igc29tZSBsYW5ndWFnZXMgdGhlIGNoYXJhY3RlciBzZXQgaXMgZGlmZmVyZW50IGZyb20gbGF0aW4sIGJ1dCB1c2VzIGEKK3NpbWlsYXIgbnVtYmVyIG9mIGNoYXJhY3RlcnMuICBJdCdzIHBvc3NpYmxlIHRvIG1hcCBrZXlzIHRvIGNoYXJhY3RlcnMuICBWaW0KK3VzZXMga2V5bWFwcyBmb3IgdGhpcy4KKyAgIFN1cHBvc2UgeW91IHdhbnQgdG8gdHlwZSBIZWJyZXcuICBZb3UgY2FuIGxvYWQgdGhlIGtleW1hcCBsaWtlIHRoaXM6ID4KKworCTpzZXQga2V5bWFwPWhlYnJldworCitWaW0gd2lsbCB0cnkgdG8gZmluZCBhIGtleW1hcCBmaWxlIGZvciB5b3UuICBUaGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mCisnZW5jb2RpbmcnLiAgSWYgbm8gbWF0Y2hpbmcgZmlsZSB3YXMgZm91bmQsIHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlLgorCitOb3cgeW91IGNhbiB0eXBlIEhlYnJldyBpbiBJbnNlcnQgbW9kZS4gIEluIE5vcm1hbCBtb2RlLCBhbmQgd2hlbiB0eXBpbmcgYSAiOiIKK2NvbW1hbmQsIFZpbSBhdXRvbWF0aWNhbGx5IHN3aXRjaGVzIHRvIEVuZ2xpc2guICBZb3UgY2FuIHVzZSB0aGlzIGNvbW1hbmQgdG8KK3N3aXRjaCBiZXR3ZWVuIEhlYnJldyBhbmQgRW5nbGlzaDogPgorCisJQ1RSTC1eCisKK1RoaXMgb25seSB3b3JrcyBpbiBJbnNlcnQgbW9kZSBhbmQgQ29tbWFuZC1saW5lIG1vZGUuICBJbiBOb3JtYWwgbW9kZSBpdCBkb2VzCitzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgKGp1bXBzIHRvIGFsdGVybmF0ZSBmaWxlKS4KKyAgIFRoZSB1c2FnZSBvZiB0aGUga2V5bWFwIGlzIGluZGljYXRlZCBpbiB0aGUgbW9kZSBtZXNzYWdlLCBpZiB5b3UgaGF2ZSB0aGUKKydzaG93bW9kZScgb3B0aW9uIHNldC4gIEluIHRoZSBHVUkgVmltIHdpbGwgaW5kaWNhdGUgdGhlIHVzYWdlIG9mIGtleW1hcHMgd2l0aAorYSBkaWZmZXJlbnQgY3Vyc29yIGNvbG9yLgorICAgWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgdXNhZ2Ugb2YgdGhlIGtleW1hcCB3aXRoIHRoZSAnaW1pbnNlcnQnIGFuZAorJ2ltc2VhcmNoJyBvcHRpb25zLgorCitUbyBzZWUgdGhlIGxpc3Qgb2YgbWFwcGluZ3MsIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpsbWFwCisKK1RvIGZpbmQgb3V0IHdoaWNoIGtleW1hcCBmaWxlcyBhcmUgYXZhaWxhYmxlLCBpbiB0aGUgR1VJIHlvdSBjYW4gdXNlIHRoZQorRWRpdC9LZXltYXAgbWVudS4gIE90aGVyd2lzZSB5b3UgY2FuIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTplY2hvIGdsb2JwYXRoKCZydHAsICJrZXltYXAvKi52aW0iKQorCisKK0RPLUlULVlPVVJTRUxGIEtFWU1BUFMKKworWW91IGNhbiBjcmVhdGUgeW91ciBvd24ga2V5bWFwIGZpbGUuICBJdCdzIG5vdCB2ZXJ5IGRpZmZpY3VsdC4gIFN0YXJ0IHdpdGgKK2Ega2V5bWFwIGZpbGUgdGhhdCBpcyBzaW1pbGFyIHRvIHRoZSBsYW5ndWFnZSB5b3Ugd2FudCB0byB1c2UuICBDb3B5IGl0IHRvIHRoZQorImtleW1hcCIgZGlyZWN0b3J5IGluIHlvdXIgcnVudGltZSBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwgZm9yIFVuaXgsIHlvdQord291bGQgdXNlIHRoZSBkaXJlY3RvcnkgIn4vLnZpbS9rZXltYXAiLgorICAgVGhlIG5hbWUgb2YgdGhlIGtleW1hcCBmaWxlIG11c3QgbG9vayBsaWtlIHRoaXM6CisKKwlrZXltYXAve25hbWV9LnZpbSB+CitvcgorCWtleW1hcC97bmFtZX1fe2VuY29kaW5nfS52aW0gfgorCit7bmFtZX0gaXMgdGhlIG5hbWUgb2YgdGhlIGtleW1hcC4gIENob3NlIGEgbmFtZSB0aGF0IGlzIG9idmlvdXMsIGJ1dCBkaWZmZXJlbnQKK2Zyb20gZXhpc3Rpbmcga2V5bWFwcyAodW5sZXNzIHlvdSB3YW50IHRvIHJlcGxhY2UgYW4gZXhpc3Rpbmcga2V5bWFwIGZpbGUpLgore25hbWV9IGNhbm5vdCBjb250YWluIGFuIHVuZGVyc2NvcmUuICBPcHRpb25hbGx5LCBhZGQgdGhlIGVuY29kaW5nIHVzZWQgYWZ0ZXIKK2FuIHVuZGVyc2NvcmUuICBFeGFtcGxlczoKKworCWtleW1hcC9oZWJyZXcudmltIH4KKwlrZXltYXAvaGVicmV3X3V0Zi04LnZpbSB+CisKK1RoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBzaG91bGQgYmUgc2VsZi1leHBsYW5hdG9yeS4gIExvb2sgYXQgYSBmZXcgb2YgdGhlCitrZXltYXBzIHRoYXQgYXJlIGRpc3RyaWJ1dGVkIHdpdGggVmltLiAgRm9yIHRoZSBkZXRhaWxzLCBzZWUgfG1ieXRlLWtleW1hcHwuCisKKworTEFTVCBSRVNPUlQKKworSWYgYWxsIG90aGVyIG1ldGhvZHMgZmFpbCwgeW91IGNhbiBlbnRlciBhbnkgY2hhcmFjdGVyIHdpdGggQ1RSTC1WOgorCisJZW5jb2RpbmcgICB0eXBlCQkJcmFuZ2UgfgorCTgtYml0CSAgIENUUkwtViAxMjMJCWRlY2ltYWwgMC0yNTUKKwk4LWJpdAkgICBDVFJMLVYgeCBhMQkJaGV4YWRlY2ltYWwgMDAtZmYKKwkxNi1iaXQgICAgIENUUkwtViB1IDAxM2IJaGV4YWRlY2ltYWwgMDAwMC1mZmZmCisJMzEtYml0CSAgIENUUkwtViBVIDAwMTMwM2E0CWhleGFkZWNpbWFsIDAwMDAwMDAwLTdmZmZmZmZmCisKK0Rvbid0IHR5cGUgdGhlIHNwYWNlcy4gIFNlZSB8aV9DVFJMLVZfZGlnaXR8IGZvciB0aGUgZGV0YWlscy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl85MC50eHR8ICBJbnN0YWxsaW5nIFZpbQorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl85MC50eHQgYi9ydW50aW1lL2RvYy91c3JfOTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOWM0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfOTAudHh0CkBAIC0wLDAgKzEsNDk4IEBACisqdXNyXzkwLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWFyIDIxCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkJSW5zdGFsbGluZyBWaW0KKworCQkJCQkJCQkqaW5zdGFsbCoKK0JlZm9yZSB5b3UgY2FuIHVzZSBWaW0geW91IGhhdmUgdG8gaW5zdGFsbCBpdC4gIERlcGVuZGluZyBvbiB5b3VyIHN5c3RlbSBpdCdzCitzaW1wbGUgb3IgZWFzeS4gIFRoaXMgY2hhcHRlciBnaXZlcyBhIGZldyBoaW50cyBhbmQgYWxzbyBleHBsYWlucyBob3cKK3VwZ3JhZGluZyB0byBhIG5ldyB2ZXJzaW9uIGlzIGRvbmUuCisKK3w5MC4xfAlVbml4Cit8OTAuMnwJTVMtV2luZG93cworfDkwLjN8CVVwZ3JhZGluZworfDkwLjR8CUNvbW1vbiBpbnN0YWxsYXRpb24gaXNzdWVzCit8OTAuNXwJVW5pbnN0YWxsaW5nIFZpbQorCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl80NS50eHR8ICBTZWxlY3QgeW91ciBsYW5ndWFnZQorVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqOTAuMSoJVW5peAorCitGaXJzdCB5b3UgaGF2ZSB0byBkZWNpZGUgaWYgeW91IGFyZSBnb2luZyB0byBpbnN0YWxsIFZpbSBzeXN0ZW0td2lkZSBvciBmb3IgYQorc2luZ2xlIHVzZXIuICBUaGUgaW5zdGFsbGF0aW9uIGlzIGFsbW9zdCB0aGUgc2FtZSwgYnV0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgVmltCitpcyBpbnN0YWxsZWQgaW4gZGlmZmVycy4KKyAgIEZvciBhIHN5c3RlbS13aWRlIGluc3RhbGxhdGlvbiB0aGUgYmFzZSBkaXJlY3RvcnkgIi91c3IvbG9jYWwiIGlzIG9mdGVuCit1c2VkLiAgQnV0IHRoaXMgbWF5IGJlIGRpZmZlcmVudCBmb3IgeW91ciBzeXN0ZW0uICBUcnkgZmluZGluZyBvdXQgd2hlcmUgb3RoZXIKK3BhY2thZ2VzIGFyZSBpbnN0YWxsZWQuCisgICBXaGVuIGluc3RhbGxpbmcgZm9yIGEgc2luZ2xlIHVzZXIsIHlvdSBjYW4gdXNlIHlvdXIgaG9tZSBkaXJlY3RvcnkgYXMgdGhlCitiYXNlLiAgVGhlIGZpbGVzIHdpbGwgYmUgcGxhY2VkIGluIHN1YmRpcmVjdG9yaWVzIGxpa2UgImJpbiIgYW5kICJzaGFyZWQvdmltIi4KKworCitGUk9NIEEgUEFDS0FHRQorCitZb3UgY2FuIGdldCBwcmVjb21waWxlZCBiaW5hcmllcyBmb3IgbWFueSBkaWZmZXJlbnQgVU5JWCBzeXN0ZW1zLiAgVGhlcmUgaXMgYQorbG9uZyBsaXN0IHdpdGggbGlua3Mgb24gdGhpcyBwYWdlOgorCisJaHR0cDovL3d3dy52aW0ub3JnL2JpbmFyaWVzLmh0bWwgfgorCitWb2x1bnRlZXJzIG1haW50YWluIHRoZSBiaW5hcmllcywgc28gdGhleSBhcmUgb2Z0ZW4gb3V0IG9mIGRhdGUuICBJdCBpcyBhCitnb29kIGlkZWEgdG8gY29tcGlsZSB5b3VyIG93biBVTklYIHZlcnNpb24gZnJvbSB0aGUgc291cmNlLiAgQWxzbywgY3JlYXRpbmcKK3RoZSBlZGl0b3IgZnJvbSB0aGUgc291cmNlIGFsbG93cyB5b3UgdG8gY29udHJvbCB3aGljaCBmZWF0dXJlcyBhcmUgY29tcGlsZWQuCitUaGlzIGRvZXMgcmVxdWlyZSBhIGNvbXBpbGVyIHRob3VnaC4KKworSWYgeW91IGhhdmUgYSBMaW51eCBkaXN0cmlidXRpb24sIHRoZSAidmkiIHByb2dyYW0gaXMgcHJvYmFibHkgYSBtaW5pbWFsCit2ZXJzaW9uIG9mIFZpbS4gIEl0IGRvZXNuJ3QgZG8gc3ludGF4IGhpZ2hsaWdodGluZywgZm9yIGV4YW1wbGUuICBUcnkgZmluZGluZworYW5vdGhlciBWaW0gcGFja2FnZSBpbiB5b3VyIGRpc3RyaWJ1dGlvbiwgb3Igc2VhcmNoIG9uIHRoZSB3ZWIgc2l0ZS4KKworCitGUk9NIFNPVVJDRVMKKworVG8gY29tcGlsZSBhbmQgaW5zdGFsbCBWaW0sIHlvdSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZzoKKworCS0gIEEgQyBjb21waWxlciAoR0NDIHByZWZlcnJlZCkKKwktICBUaGUgR1pJUCBwcm9ncmFtICh5b3UgY2FuIGdldCBpdCBmcm9tIHd3dy5nbnUub3JnKQorCS0gIFRoZSBWaW0gc291cmNlIGFuZCBydW50aW1lIGFyY2hpdmVzCisKK1RvIGdldCB0aGUgVmltIGFyY2hpdmVzLCBsb29rIGluIHRoaXMgZmlsZSBmb3IgYSBtaXJyb3IgbmVhciB5b3UsIHRoaXMgc2hvdWxkCitwcm92aWRlIHRoZSBmYXN0ZXN0IGRvd25sb2FkOgorCisJZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS9NSVJST1JTIH4KKworT3IgdXNlIHRoZSBob21lIHNpdGUgZnRwLnZpbS5vcmcsIGlmIHlvdSB0aGluayBpdCdzIGZhc3QgZW5vdWdoLiAgR28gdG8gdGhlCisidW5peCIgZGlyZWN0b3J5IGFuZCB5b3UnbGwgZmluZCBhIGxpc3Qgb2YgZmlsZXMgdGhlcmUuICBUaGUgdmVyc2lvbiBudW1iZXIgaXMKK2VtYmVkZGVkIGluIHRoZSBmaWxlIG5hbWUuICBZb3Ugd2lsbCB3YW50IHRvIGdldCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbi4KKyAgIFlvdSBjYW4gZ2V0IHRoZSBmaWxlcyBmb3IgVW5peCBpbiB0d28gd2F5czogT25lIGJpZyBhcmNoaXZlIHRoYXQgY29udGFpbnMKK2V2ZXJ5dGhpbmcsIG9yIGZvdXIgc21hbGxlciBvbmVzIHRoYXQgZWFjaCBmaXQgb24gYSBmbG9wcHkgZGlzay4gIEZvciB2ZXJzaW9uCis2LjEgdGhlIHNpbmdsZSBiaWcgb25lIGlzIGNhbGxlZDoKKworCXZpbS02LjEudGFyLmJ6MiB+CisKK1lvdSBuZWVkIHRoZSBiemlwMiBwcm9ncmFtIHRvIHVuY29tcHJlc3MgaXQuICBJZiB5b3UgZG9uJ3QgaGF2ZSBpdCwgZ2V0IHRoZQorZm91ciBzbWFsbGVyIGZpbGVzLCB3aGljaCBjYW4gYmUgdW5jb21wcmVzc2VkIHdpdGggZ3ppcC4gIEZvciBWaW0gNi4xIHRoZXkgYXJlCitjYWxsZWQ6CisKKwl2aW0tNi4xLXNyYzEudGFyLmd6IH4KKwl2aW0tNi4xLXNyYzIudGFyLmd6IH4KKwl2aW0tNi4xLXJ0MS50YXIuZ3ogfgorCXZpbS02LjEtcnQyLnRhci5neiB+CisKKworQ09NUElMSU5HCisKK0ZpcnN0IGNyZWF0ZSBhIHRvcCBkaXJlY3RvcnkgdG8gd29yayBpbiwgZm9yIGV4YW1wbGU6ID4KKworCW1rZGlyIH4vdmltCisJY2Qgfi92aW0KKworVGhlbiB1bnBhY2sgdGhlIGFyY2hpdmVzIHRoZXJlLiAgSWYgeW91IGhhdmUgdGhlIG9uZSBiaWcgYXJjaGl2ZSwgeW91IHVucGFjaworaXQgbGlrZSB0aGlzOiA+CisKKwliemlwMiAtZCAtYyBwYXRoL3ZpbS02LjEudGFyLmJ6MiB8IHRhciB4ZiAtCisKK0NoYW5nZSAicGF0aCIgdG8gd2hlcmUgeW91IGhhdmUgZG93bmxvYWRlZCB0aGUgZmlsZS4gPgorCisJZ3ppcCAtZCAtYyBwYXRoL3ZpbS02LjEtc3JjMS50YXIuZ3ogfCB0YXIgeGYgLQorCWd6aXAgLWQgLWMgcGF0aC92aW0tNi4xLXNyYzIudGFyLmd6IHwgdGFyIHhmIC0KKwlnemlwIC1kIC1jIHBhdGgvdmltLTYuMS1ydDEudGFyLmd6IHwgdGFyIHhmIC0KKwlnemlwIC1kIC1jIHBhdGgvdmltLTYuMS1ydDIudGFyLmd6IHwgdGFyIHhmIC0KKworSWYgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCBnZXR0aW5nIHRoZSBkZWZhdWx0IGZlYXR1cmVzLCBhbmQgeW91ciBlbnZpcm9ubWVudAoraXMgc2V0dXAgcHJvcGVybHksIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb21waWxlIFZpbSB3aXRoIGp1c3QgdGhpczogPgorCisJY2QgdmltNjEvc3JjCisJbWFrZQorCitUaGUgbWFrZSBwcm9ncmFtIHdpbGwgcnVuIGNvbmZpZ3VyZSBhbmQgY29tcGlsZSBldmVyeXRoaW5nLiAgRnVydGhlciBvbiB3ZQord2lsbCBleHBsYWluIGhvdyB0byBjb21waWxlIHdpdGggZGlmZmVyZW50IGZlYXR1cmVzLgorICAgSWYgdGhlcmUgYXJlIGVycm9ycyB3aGlsZSBjb21waWxpbmcsIGNhcmVmdWxseSBsb29rIGF0IHRoZSBlcnJvciBtZXNzYWdlcy4KK1RoZXJlIHNob3VsZCBiZSBhIGhpbnQgYWJvdXQgd2hhdCB3ZW50IHdyb25nLiAgSG9wZWZ1bGx5IHlvdSB3aWxsIGJlIGFibGUgdG8KK2NvcnJlY3QgaXQuICBZb3UgbWlnaHQgaGF2ZSB0byBkaXNhYmxlIHNvbWUgZmVhdHVyZXMgdG8gbWFrZSBWaW0gY29tcGlsZS4KK0xvb2sgaW4gdGhlIE1ha2VmaWxlIGZvciBzcGVjaWZpYyBoaW50cyBmb3IgeW91ciBzeXN0ZW0uCisKKworVEVTVElORworCitOb3cgeW91IGNhbiBjaGVjayBpZiBjb21waWxpbmcgd29ya2VkIE9LOiA+CisKKwltYWtlIHRlc3QKKworVGhpcyB3aWxsIHJ1biBhIHNlcXVlbmNlIG9mIHRlc3Qgc2NyaXB0cyB0byB2ZXJpZnkgdGhhdCBWaW0gd29ya3MgYXMgZXhwZWN0ZWQuCitWaW0gd2lsbCBiZSBzdGFydGVkIG1hbnkgdGltZXMgYW5kIGFsbCBraW5kcyBvZiB0ZXh0IGFuZCBtZXNzYWdlcyBmbGFzaCBieS4KK0lmIGl0IGlzIGFscmlnaHQgeW91IHdpbGwgZmluYWxseSBzZWU6CisKKwl0ZXN0IHJlc3VsdHM6IH4KKwlBTEwgRE9ORSB+CisKK0lmIHRoZXJlIGFyZSBvbmUgb3IgdHdvIG1lc3NhZ2VzIGFib3V0IGZhaWxlZCB0ZXN0cywgVmltIG1pZ2h0IHN0aWxsIHdvcmssIGJ1dAorbm90IHBlcmZlY3RseS4gIElmIHlvdSBzZWUgYSBsb3Qgb2YgZXJyb3IgbWVzc2FnZXMgb3IgVmltIGRvZXNuJ3QgZmluaXNoIHVudGlsCit0aGUgZW5kLCB0aGVyZSBtdXN0IGJlIHNvbWV0aGluZyB3cm9uZy4gIEVpdGhlciB0cnkgdG8gZmluZCBvdXQgeW91cnNlbGYsIG9yCitmaW5kIHNvbWVvbmUgd2hvIGNhbiBzb2x2ZSBpdC4gIFlvdSBjb3VsZCBsb29rIGluIHRoZSB8bWFpbGxpc3QtYXJjaGl2ZXwgZm9yIGEKK3NvbHV0aW9uLiAgSWYgZXZlcnl0aGluZyBlbHNlIGZhaWxzLCB5b3UgY291bGQgYXNrIGluIHRoZSB2aW0gfG1haWxsaXN0fCBpZgorc29tZW9uZSBjYW4gaGVscCB5b3UuCisKKworSU5TVEFMTElORworCQkJCQkJCSppbnN0YWxsLWhvbWUqCitJZiB5b3Ugd2FudCB0byBpbnN0YWxsIGluIHlvdXIgaG9tZSBkaXJlY3RvcnksIGVkaXQgdGhlIE1ha2VmaWxlIGFuZCBzZWFyY2gKK2ZvciBhIGxpbmU6CisKKwkjcHJlZml4ID0gJChIT01FKSB+CisKK1JlbW92ZSB0aGUgIyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuCisgICBXaGVuIGluc3RhbGxpbmcgZm9yIHRoZSB3aG9sZSBzeXN0ZW0sIFZpbSBoYXMgbW9zdCBsaWtlbHkgYWxyZWFkeSBzZWxlY3RlZAorYSBnb29kIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgZm9yIHlvdS4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IG9uZSwgc2VlIGJlbG93LgorWW91IG5lZWQgdG8gYmVjb21lIHJvb3QgZm9yIHRoZSBmb2xsb3dpbmcuCisKK1RvIGluc3RhbGwgVmltIGRvOiA+CisKKwltYWtlIGluc3RhbGwKKworVGhhdCBzaG91bGQgbW92ZSBhbGwgdGhlIHJlbGV2YW50IGZpbGVzIHRvIHRoZSByaWdodCBwbGFjZS4gIE5vdyB5b3UgY2FuIHRyeQorcnVubmluZyB2aW0gdG8gdmVyaWZ5IHRoYXQgaXQgd29ya3MuICBVc2UgdHdvIHNpbXBsZSB0ZXN0cyB0byBjaGVjayBpZiBWaW0gY2FuCitmaW5kIGl0cyBydW50aW1lIGZpbGVzOiA+CisKKwk6aGVscAorCTpzeW50YXggZW5hYmxlCisKK0lmIHRoaXMgZG9lc24ndCB3b3JrLCB1c2UgdGhpcyBjb21tYW5kIHRvIGNoZWNrIHdoZXJlIFZpbSBpcyBsb29raW5nIGZvciB0aGUKK3J1bnRpbWUgZmlsZXM6ID4KKworCTplY2hvICRWSU1SVU5USU1FCisKK1lvdSBjYW4gYWxzbyBzdGFydCBWaW0gd2l0aCB0aGUgIi1WIiBhcmd1bWVudCB0byBzZWUgd2hhdCBoYXBwZW5zIGR1cmluZworc3RhcnR1cDogPgorCisJdmltIC1WCisKK0Rvbid0IGZvcmdldCB0aGF0IHRoZSB1c2VyIG1hbnVhbCBhc3N1bWVzIHlvdSBWaW0gaW4gYSBjZXJ0YWluIHdheS4gIEFmdGVyCitpbnN0YWxsaW5nIFZpbSwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgYXQgfG5vdC1jb21wYXRpYmxlfCB0byBtYWtlIFZpbSB3b3JrCithcyBhc3N1bWVkIGluIHRoaXMgbWFudWFsLgorCisKK1NFTEVDVElORyBGRUFUVVJFUworCitWaW0gaGFzIG1hbnkgd2F5cyB0byBzZWxlY3QgZmVhdHVyZXMuICBPbmUgb2YgdGhlIHNpbXBsZSB3YXlzIGlzIHRvIGVkaXQgdGhlCitNYWtlZmlsZS4gIFRoZXJlIGFyZSBtYW55IGRpcmVjdGlvbnMgYW5kIGV4YW1wbGVzLiAgT2Z0ZW4geW91IGNhbiBlbmFibGUgb3IKK2Rpc2FibGUgYSBmZWF0dXJlIGJ5IHVuY29tbWVudGluZyBhIGxpbmUuCisgICBBbiBhbHRlcm5hdGl2ZSBpcyB0byBydW4gImNvbmZpZ3VyZSIgc2VwYXJhdGVseS4gIFRoaXMgYWxsb3dzIHlvdSB0bworc3BlY2lmeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWFudWFsbHkuICBUaGUgZGlzYWR2YW50YWdlIGlzIHRoYXQgeW91IGhhdmUgdG8KK2ZpZ3VyZSBvdXQgd2hhdCBleGFjdGx5IHRvIHR5cGUuCisgICBTb21lIG9mIHRoZSBtb3N0IGludGVyZXN0aW5nIGNvbmZpZ3VyZSBhcmd1bWVudHMgZm9sbG93LiAgVGhlc2UgY2FuIGFsc28gYmUKK2VuYWJsZWQgZnJvbSB0aGUgTWFrZWZpbGUuCisKKwktLXByZWZpeD17ZGlyZWN0b3J5fQkJVG9wIGRpcmVjdG9yeSB3aGVyZSB0byBpbnN0YWxsIFZpbS4KKworCS0td2l0aC1mZWF0dXJlcz10aW55CQlDb21waWxlIHdpdGggbWFueSBmZWF0dXJlcyBkaXNhYmxlZC4KKwktLXdpdGgtZmVhdHVyZXM9c21hbGwJCUNvbXBpbGUgd2l0aCBzb21lIGZlYXR1cmVzIGRpc2FibGVkLgorCS0td2l0aC1mZWF0dXJlcz1iaWcJCUNvbXBpbGUgd2l0aCBtb3JlIGZlYXR1cmVzIGVuYWJsZWQuCisJLS13aXRoLWZlYXR1cmVzPWh1Z2UJCUNvbXBpbGUgd2l0aCBtb3N0IGZlYXR1cmVzIGVuYWJsZWQuCisJCQkJCVNlZSB8K2ZlYXR1cmUtbGlzdHwgZm9yIHdoaWNoIGZlYXR1cmUKKwkJCQkJaXMgZW5hYmxlZCBpbiB3aGljaCBjYXNlLgorCisJLS1lbmFibGUtcGVybGludGVycAkJRW5hYmxlIHRoZSBQZXJsIGludGVyZmFjZS4gIFRoZXJlIGFyZQorCQkJCQlzaW1pbGFyIGFyZ3VtZW50cyBmb3IgcnVieSwgcHl0aG9uIGFuZAorCQkJCQl0Y2wuCisKKwktLWRpc2FibGUtZ3VpCQkJRG8gbm90IGNvbXBpbGUgdGhlIEdVSSBpbnRlcmZhY2UuCisJLS13aXRob3V0LXgJCQlEbyBub3QgY29tcGlsZSBYLXdpbmRvd3MgZmVhdHVyZXMuCisJCQkJCVdoZW4gYm90aCBvZiB0aGVzZSBhcmUgdXNlZCwgVmltIHdpbGwKKwkJCQkJbm90IGNvbm5lY3QgdG8gdGhlIFggc2VydmVyLCB3aGljaAorCQkJCQltYWtlcyBzdGFydHVwIGZhc3Rlci4KKworVG8gc2VlIHRoZSB3aG9sZSBsaXN0IHVzZTogPgorCisJLi9jb25maWd1cmUgLS1oZWxwCisKK1lvdSBjYW4gZmluZCBhIGJpdCBvZiBleHBsYW5hdGlvbiBmb3IgZWFjaCBmZWF0dXJlLCBhbmQgbGlua3MgZm9yIG1vcmUKK2luZm9ybWF0aW9uIGhlcmU6IHxmZWF0dXJlLWxpc3R8LgorICAgRm9yIHRoZSBhZHZlbnR1cm91cywgZWRpdCB0aGUgZmlsZSAiZmVhdHVyZS5oIi4gIFlvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlCitzb3VyY2UgY29kZSB5b3Vyc2VsZiEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqOTAuMioJTVMtV2luZG93cworCitUaGVyZSBhcmUgdHdvIHdheXMgdG8gaW5zdGFsbCB0aGUgVmltIHByb2dyYW0gZm9yIE1pY3Jvc29mdCBXaW5kb3dzLiAgWW91IGNhbgordW5jb21wcmVzcyBzZXZlcmFsIGFyY2hpdmVzLCBvciB1c2UgYSBzZWxmLWluc3RhbGxpbmcgYmlnIGFyY2hpdmUuICBNb3N0IHVzZXJzCit3aXRoIGZhaXJseSByZWNlbnQgY29tcHV0ZXJzIHdpbGwgcHJlZmVyIHRoZSBzZWNvbmQgbWV0aG9kLiAgRm9yIHRoZSBmaXJzdAorb25lLCB5b3Ugd2lsbCBuZWVkOgorCisJLSBBbiBhcmNoaXZlIHdpdGggYmluYXJpZXMgZm9yIFZpbS4KKwktIFRoZSBWaW0gcnVudGltZSBhcmNoaXZlLgorCS0gQSBwcm9ncmFtIHRvIHVucGFjayB0aGUgemlwIGZpbGVzLgorCitUbyBnZXQgdGhlIFZpbSBhcmNoaXZlcywgbG9vayBpbiB0aGlzIGZpbGUgZm9yIGEgbWlycm9yIG5lYXIgeW91LCB0aGlzIHNob3VsZAorcHJvdmlkZSB0aGUgZmFzdGVzdCBkb3dubG9hZDoKKworCWZ0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vTUlSUk9SUyB+CisKK09yIHVzZSB0aGUgaG9tZSBzaXRlIGZ0cC52aW0ub3JnLCBpZiB5b3UgdGhpbmsgaXQncyBmYXN0IGVub3VnaC4gIEdvIHRvIHRoZQorInBjIiBkaXJlY3RvcnkgYW5kIHlvdSdsbCBmaW5kIGEgbGlzdCBvZiBmaWxlcyB0aGVyZS4gIFRoZSB2ZXJzaW9uIG51bWJlciBpcworZW1iZWRkZWQgaW4gdGhlIGZpbGUgbmFtZS4gIFlvdSB3aWxsIHdhbnQgdG8gZ2V0IHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uLgorV2Ugd2lsbCB1c2UgIjYxIiBoZXJlLCB3aGljaCBpcyB2ZXJzaW9uIDYuMS4KKworCWd2aW02MS5leGUJCVRoZSBzZWxmLWluc3RhbGxpbmcgYXJjaGl2ZS4KKworVGhpcyBpcyBhbGwgeW91IG5lZWQgZm9yIHRoZSBzZWNvbmQgbWV0aG9kLiAgSnVzdCBsYXVuY2ggdGhlIGV4ZWN1dGFibGUsIGFuZAorZm9sbG93IHRoZSBwcm9tcHRzLgorCitGb3IgdGhlIGZpcnN0IG1ldGhvZCB5b3UgbXVzdCBjaG9zZSBvbmUgb2YgdGhlIGJpbmFyeSBhcmNoaXZlcy4gIFRoZXNlIGFyZQorYXZhaWxhYmxlOgorCisJZ3ZpbTYxLnppcAkJVGhlIG5vcm1hbCBNUy1XaW5kb3dzIEdVSSB2ZXJzaW9uLgorCWd2aW02MW9sZS56aXAJCVRoZSBNUy1XaW5kb3dzIEdVSSB2ZXJzaW9uIHdpdGggT0xFIHN1cHBvcnQuCisJCQkJVXNlcyBtb3JlIG1lbW9yeSwgc3VwcG9ydHMgaW50ZXJmYWNpbmcgd2l0aAorCQkJCW90aGVyIE9MRSBhcHBsaWNhdGlvbnMuCisJdmltNjF3MzIuemlwCQkzMiBiaXQgTVMtV2luZG93cyBjb25zb2xlIHZlcnNpb24uICBGb3IgdXNlIGluCisJCQkJYSBXaW4gTlQvMjAwMC9YUCBjb25zb2xlLiAgRG9lcyBub3Qgd29yayB3ZWxsCisJCQkJb24gV2luIDk1Lzk4LgorCXZpbTYxZDMyLnppcAkJMzIgYml0IE1TLURPUyB2ZXJzaW9uLiAgRm9yIHVzZSBpbiB0aGUKKwkJCQlXaW4gOTUvOTggY29uc29sZSB3aW5kb3cuCisJdmltNjFkMTYuemlwCQkxNiBiaXQgTVMtRE9TIHZlcnNpb24uICBPbmx5IGZvciBvbGQgc3lzdGVtcy4KKwkJCQlEb2VzIG5vdCBzdXBwb3J0IGxvbmcgZmlsZW5hbWVzLgorCitZb3Ugb25seSBuZWVkIG9uZSBvZiB0aGVtLiAgQWx0aG91Z2ggeW91IGNvdWxkIGluc3RhbGwgYm90aCBhIEdVSSBhbmQgYQorY29uc29sZSB2ZXJzaW9uLiAgWW91IGFsd2F5cyBuZWVkIHRvIGdldCB0aGUgYXJjaGl2ZSB3aXRoIHJ1bnRpbWUgZmlsZXMuCisKKwl2aW02MXJ0LnppcAkJVGhlIHJ1bnRpbWUgZmlsZXMuCisKK1VzZSB5b3VyIHVuLXppcCBwcm9ncmFtIHRvIHVucGFjayB0aGUgZmlsZXMuICBGb3IgZXhhbXBsZSwgdXNpbmcgdGhlICJ1bnppcCIKK3Byb2dyYW06ID4KKworCWNkIGM6XAorCXVuemlwIHBhdGhcZ3ZpbTYxLnppcAorCXVuemlwIHBhdGhcdmltNjFydC56aXAKKworVGhpcyB3aWxsIHVucGFjayB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSAiYzpcdmltXHZpbTYxIi4gIElmIHlvdSBhbHJlYWR5CitoYXZlIGEgInZpbSIgZGlyZWN0b3J5IHNvbWV3aGVyZSwgeW91IHdpbGwgd2FudCB0byBtb3ZlIHRvIHRoZSBkaXJlY3RvcnkganVzdAorYWJvdmUgaXQuCisgICBOb3cgY2hhbmdlIHRvIHRoZSAidmltXHZpbTYxIiBkaXJlY3RvcnkgYW5kIHJ1biB0aGUgaW5zdGFsbCBwcm9ncmFtOiA+CisKKwlpbnN0YWxsCisKK0NhcmVmdWxseSBsb29rIHRocm91Z2ggdGhlIG1lc3NhZ2VzIGFuZCBzZWxlY3QgdGhlIG9wdGlvbnMgeW91IHdhbnQgdG8gdXNlLgorSWYgeW91IGZpbmFsbHkgc2VsZWN0ICJkbyBpdCIgdGhlIGluc3RhbGwgcHJvZ3JhbSB3aWxsIGNhcnJ5IG91dCB0aGUgYWN0aW9ucworeW91IHNlbGVjdGVkLgorICAgVGhlIGluc3RhbGwgcHJvZ3JhbSBkb2Vzbid0IG1vdmUgdGhlIHJ1bnRpbWUgZmlsZXMuICBUaGV5IHJlbWFpbiB3aGVyZSB5b3UKK3VucGFja2VkIHRoZW0uCisKK0luIGNhc2UgeW91IGFyZSBub3Qgc2F0aXNmaWVkIHdpdGggdGhlIGZlYXR1cmVzIGluY2x1ZGVkIGluIHRoZSBzdXBwbGllZAorYmluYXJpZXMsIHlvdSBjb3VsZCB0cnkgY29tcGlsaW5nIFZpbSB5b3Vyc2VsZi4gIEdldCB0aGUgc291cmNlIGFyY2hpdmUgZnJvbQordGhlIHNhbWUgbG9jYXRpb24gYXMgd2hlcmUgdGhlIGJpbmFyaWVzIGFyZS4gIFlvdSBuZWVkIGEgY29tcGlsZXIgZm9yIHdoaWNoIGEKK21ha2VmaWxlIGV4aXN0cy4gIE1pY3Jvc29mdCBWaXN1YWwgQyB3b3JrcywgYnV0IGlzIGV4cGVuc2l2ZS4gIFRoZSBGcmVlCitCb3JsYW5kIGNvbW1hbmQtbGluZSBjb21waWxlciA1LjUgY2FuIGJlIHVzZWQsIGFzIHdlbGwgYXMgdGhlIGZyZWUgTWluZ1cgYW5kCitDeWd3aW4gY29tcGlsZXJzLiAgQ2hlY2sgdGhlIGZpbGUgc3JjL0lOU1RBTExwYy50eHQgZm9yIGhpbnRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo5MC4zKglVcGdyYWRpbmcKKworSWYgeW91IGFyZSBydW5uaW5nIG9uZSB2ZXJzaW9uIG9mIFZpbSBhbmQgd2FudCB0byBpbnN0YWxsIGFub3RoZXIsIGhlcmUgaXMKK3doYXQgdG8gZG8uCisKKworVU5JWAorCitXaGVuIHlvdSB0eXBlICJtYWtlIGluc3RhbGwiIHRoZSBydW50aW1lIGZpbGVzIHdpbGwgYmUgY29waWVkIHRvIGEgZGlyZWN0b3J5Cit3aGljaCBpcyBzcGVjaWZpYyBmb3IgdGhpcyB2ZXJzaW9uLiAgVGh1cyB0aGV5IHdpbGwgbm90IG92ZXJ3cml0ZSBhIHByZXZpb3VzCit2ZXJzaW9uLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgdHdvIG9yIG1vcmUgdmVyc2lvbnMgbmV4dCB0bworZWFjaCBvdGhlci4KKyAgIFRoZSBleGVjdXRhYmxlICJ2aW0iIHdpbGwgb3ZlcndyaXRlIGFuIG9sZGVyIHZlcnNpb24uICBJZiB5b3UgZG9uJ3QgY2FyZQorYWJvdXQga2VlcGluZyB0aGUgb2xkIHZlcnNpb24sIHJ1bm5pbmcgIm1ha2UgaW5zdGFsbCIgd2lsbCB3b3JrIGZpbmUuICBZb3UgY2FuCitkZWxldGUgdGhlIG9sZCBydW50aW1lIGZpbGVzIG1hbnVhbGx5LiAgSnVzdCBkZWxldGUgdGhlIGRpcmVjdG9yeSB3aXRoIHRoZQordmVyc2lvbiBudW1iZXIgaW4gaXQgYW5kIGFsbCBmaWxlcyBiZWxvdyBpdC4gIEV4YW1wbGU6ID4KKworCXJtIC1yZiAvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW01OAorCitUaGVyZSBhcmUgbm9ybWFsbHkgbm8gY2hhbmdlZCBmaWxlcyBiZWxvdyB0aGlzIGRpcmVjdG9yeS4gIElmIHlvdSBkaWQgY2hhbmdlCit0aGUgImZpbGV0eXBlLnZpbSIgZmlsZSwgZm9yIGV4YW1wbGUsIHlvdSBiZXR0ZXIgbWVyZ2UgdGhlIGNoYW5nZXMgaW50byB0aGUKK25ldyB2ZXJzaW9uIGJlZm9yZSBkZWxldGluZyBpdC4KKworSWYgeW91IGFyZSBjYXJlZnVsIGFuZCB3YW50IHRvIHRyeSBvdXQgdGhlIG5ldyB2ZXJzaW9uIGZvciBhIHdoaWxlIGJlZm9yZQorc3dpdGNoaW5nIHRvIGl0LCBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiB1bmRlciBhbm90aGVyIG5hbWUuICBZb3UgbmVlZCB0bworc3BlY2lmeSBhIGNvbmZpZ3VyZSBhcmd1bWVudC4gIEZvciBleGFtcGxlOiA+CisKKwkuL2NvbmZpZ3VyZSAtLXdpdGgtdmltLW5hbWU9dmltNgorCitCZWZvcmUgcnVubmluZyAibWFrZSBpbnN0YWxsIiwgeW91IGNvdWxkIHVzZSAibWFrZSAtbiBpbnN0YWxsIiB0byBjaGVjayB0aGF0CitubyB2YWx1YWJsZSBleGlzdGluZyBmaWxlcyBhcmUgb3ZlcndyaXR0ZW4uCisgICBXaGVuIHlvdSBmaW5hbGx5IGRlY2lkZSB0byBzd2l0Y2ggdG8gdGhlIG5ldyB2ZXJzaW9uLCBhbGwgeW91IG5lZWQgdG8gZG8gaXMKK3RvIHJlbmFtZSB0aGUgYmluYXJ5IHRvICJ2aW0iLiAgRm9yIGV4YW1wbGU6ID4KKworCW12IC91c3IvbG9jYWwvYmluL3ZpbTYgL3Vzci9sb2NhbC9iaW4vdmltCisKKworTVMtV0lORE9XUworCitVcGdyYWRpbmcgaXMgbW9zdGx5IGVxdWFsIHRvIGluc3RhbGxpbmcgYSBuZXcgdmVyc2lvbi4gIEp1c3QgdW5wYWNrIHRoZSBmaWxlcworaW4gdGhlIHNhbWUgcGxhY2UgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24uICBBIG5ldyBkaXJlY3Rvcnkgd2lsbCBiZSBjcmVhdGVkLAorZS5nLiwgInZpbTYxIiwgZm9yIHRoZSBmaWxlcyBvZiB0aGUgbmV3IHZlcnNpb24uICBZb3VyIHJ1bnRpbWUgZmlsZXMsIHZpbXJjCitmaWxlLCB2aW1pbmZvLCBldGMuIHdpbGwgYmUgbGVmdCBhbG9uZS4KKyAgIElmIHlvdSB3YW50IHRvIHJ1biB0aGUgbmV3IHZlcnNpb24gbmV4dCB0byB0aGUgb2xkIG9uZSwgeW91IHdpbGwgaGF2ZSB0byBkbworc29tZSBoYW5kd29yay4gIERvbid0IHJ1biB0aGUgaW5zdGFsbCBwcm9ncmFtLCBpdCB3aWxsIG92ZXJ3cml0ZSBhIGZldyBmaWxlcworb2YgdGhlIG9sZCB2ZXJzaW9uLiAgRXhlY3V0ZSB0aGUgbmV3IGJpbmFyaWVzIGJ5IHNwZWNpZnlpbmcgdGhlIGZ1bGwgcGF0aC4KK1RoZSBwcm9ncmFtIHNob3VsZCBiZSBhYmxlIHRvIGF1dG9tYXRpY2FsbHkgZmluZCB0aGUgcnVudGltZSBmaWxlcyBmb3IgdGhlCityaWdodCB2ZXJzaW9uLiAgSG93ZXZlciwgdGhpcyB3b24ndCB3b3JrIGlmIHlvdSBzZXQgdGhlICRWSU1SVU5USU1FIHZhcmlhYmxlCitzb21ld2hlcmUuCisgICBJZiB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHRoZSB1cGdyYWRlLCB5b3UgY2FuIGRlbGV0ZSB0aGUgZmlsZXMgb2YgdGhlCitwcmV2aW91cyB2ZXJzaW9uLiAgU2VlIHw5MC41fC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqOTAuNCoJQ29tbW9uIGluc3RhbGxhdGlvbiBpc3N1ZXMKKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzb21lIG9mIHRoZSBjb21tb24gcHJvYmxlbXMgdGhhdCBvY2N1ciB3aGVuIGluc3RhbGxpbmcKK1ZpbSBhbmQgc3VnZ2VzdHMgc29tZSBzb2x1dGlvbnMuICBJdCBhbHNvIGNvbnRhaW5zIGFuc3dlcnMgdG8gbWFueQoraW5zdGFsbGF0aW9uIHF1ZXN0aW9ucy4KKworCitROiBJIERvIE5vdCBIYXZlIFJvb3QgUHJpdmlsZWdlcy4gIEhvdyBEbyBJIEluc3RhbGwgVmltPyAoVW5peCkKKworVXNlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBjb21tYW5kIHRvIGluc3RhbGwgVmltIGluIGEgZGlyZWN0b3J5IGNhbGxlZAorJEhPTUUvdmltOiA+CisKKwkuL2NvbmZpZ3VyZSAtLXByZWZpeD0kSE9NRQorCitUaGlzIGdpdmVzIHlvdSBhIHBlcnNvbmFsIGNvcHkgb2YgVmltLiAgWW91IG5lZWQgdG8gcHV0ICRIT01FL2JpbiBpbiB5b3VyCitwYXRoIHRvIGV4ZWN1dGUgdGhlIGVkaXRvci4gIEFsc28gc2VlIHxpbnN0YWxsLWhvbWV8LgorCisKK1E6IFRoZSBDb2xvcnMgQXJlIE5vdCBSaWdodCBvbiBNeSBTY3JlZW4uIChVbml4KQorCitDaGVjayB5b3VyIHRlcm1pbmFsIHNldHRpbmdzIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiBhIHNoZWxsOiA+CisKKwllY2hvICRURVJNCisKK0lmIHRoZSB0ZXJtaW5hbCB0eXBlIGxpc3RlZCBpcyBub3QgY29ycmVjdCwgZml4IGl0LiAgRm9yIG1vcmUgaGludHMsIHNlZQorfDA2LjJ8LiAgQW5vdGhlciBzb2x1dGlvbiBpcyB0byBhbHdheXMgdXNlIHRoZSBHVUkgdmVyc2lvbiBvZiBWaW0sIGNhbGxlZAorZ3ZpbS4gIFRoaXMgYXZvaWRzIHRoZSBuZWVkIGZvciBhIGNvcnJlY3QgdGVybWluYWwgc2V0dXAuCisKKworUTogTXkgQmFja3NwYWNlIEFuZCBEZWxldGUgS2V5cyBEb24ndCBXb3JrIFJpZ2h0CisKK1RoZSBkZWZpbml0aW9uIG9mIHdoYXQga2V5IHNlbmRzIHdoYXQgY29kZSBpcyB2ZXJ5IHVuY2xlYXIgZm9yIGJhY2tzcGFjZSA8QlM+CithbmQgRGVsZXRlIDxEZWw+IGtleXMuICBGaXJzdCBvZiBhbGwsIGNoZWNrIHlvdXIgJFRFUk0gc2V0dGluZy4gIElmIHRoZXJlIGlzCitub3RoaW5nIHdyb25nIHdpdGggaXQsIHRyeSB0aGlzOiA+CisKKwk6c2V0IHRfa2I9XlY8QlM+CisJOnNldCB0X2tEPV5WPERlbD4KKworSW4gdGhlIGZpcnN0IGxpbmUgeW91IG5lZWQgdG8gcHJlc3MgQ1RSTC1WIGFuZCB0aGVuIGhpdCB0aGUgYmFja3NwYWNlIGtleS4KK0luIHRoZSBzZWNvbmQgbGluZSB5b3UgbmVlZCB0byBwcmVzcyBDVFJMLVYgYW5kIHRoZW4gaGl0IHRoZSBEZWxldGUga2V5LgorWW91IGNhbiBwdXQgdGhlc2UgbGluZXMgaW4geW91ciB2aW1yYyBmaWxlLCBzZWUgfDA1LjF8LiAgQSBkaXNhZHZhbnRhZ2UgaXMKK3RoYXQgaXQgd29uJ3Qgd29yayB3aGVuIHlvdSB1c2UgYW5vdGhlciB0ZXJtaW5hbCBzb21lIGRheS4gIExvb2sgaGVyZSBmb3IKK2FsdGVybmF0ZSBzb2x1dGlvbnM6IHw6Zml4ZGVsfC4KKworCitROiBJIEFtIFVzaW5nIFJlZEhhdCBMaW51eC4gIENhbiBJIFVzZSB0aGUgVmltIFRoYXQgQ29tZXMgd2l0aCB0aGUgU3lzdGVtPworCitCeSBkZWZhdWx0IFJlZEhhdCBpbnN0YWxscyBhIG1pbmltYWwgdmVyc2lvbiBvZiBWaW0uICBDaGVjayB5b3VyIFJQTSBwYWNrYWdlcworZm9yIHNvbWV0aGluZyBuYW1lZCAiVmltLWVuaGFuY2VkLXZlcnNpb24ucnBtIiBhbmQgaW5zdGFsbCB0aGF0LgorCisKK1E6IEhvdyBEbyBJIFR1cm4gU3ludGF4IENvbG9yaW5nIE9uPyAgSG93IGRvIEkgbWFrZSBwbHVnaW5zIHdvcms/CisKK1VzZSB0aGUgZXhhbXBsZSB2aW1yYyBzY3JpcHQuICBZb3UgY2FuIGZpbmQgYW4gZXhwbGFuYXRpb24gb24gaG93IHRvIHVzZSBpdAoraGVyZTogfG5vdC1jb21wYXRpYmxlfC4KKworU2VlIGNoYXB0ZXIgNiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgc3ludGF4IGhpZ2hsaWdodGluZzogfHVzcl8wNi50eHR8LgorCisKK1E6IFdoYXQgSXMgYSBHb29kIHZpbXJjIEZpbGUgdG8gVXNlPworCitTZWUgdGhlIHd3dy52aW0ub3JnIFdlYiBzaXRlIGZvciBzZXZlcmFsIGdvb2QgZXhhbXBsZXMuCisKKworUTogV2hlcmUgRG8gSSBGaW5kIGEgR29vZCBWaW0gUGx1Z2luPworCitTZWUgdGhlIFZpbS1vbmxpbmUgc2l0ZTogaHR0cDovL3ZpbS5zZi5uZXQuICBNYW55IHVzZXJzIGhhdmUgdXBsb2FkZWQgdXNlZnVsCitWaW0gc2NyaXB0cyBhbmQgcGx1Z2lucyB0aGVyZS4KKworCitROiBXaGVyZSBEbyBJIEZpbmQgTW9yZSBUaXBzPworCitTZWUgdGhlIFZpbS1vbmxpbmUgc2l0ZTogaHR0cDovL3ZpbS5zZi5uZXQuICBUaGVyZSBpcyBhbiBhcmNoaXZlIHdpdGggaGludHMKK2Zyb20gVmltIHVzZXJzLiAgWW91IG1pZ2h0IGFsc28gd2FudCB0byBzZWFyY2ggaW4gdGhlIHxtYWlsbGlzdC1hcmNoaXZlfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqOTAuNSoJVW5pbnN0YWxsaW5nIFZpbQorCitJbiB0aGUgdW5saWtlbHkgZXZlbnQgeW91IHdhbnQgdG8gdW5pbnN0YWxsIFZpbSBjb21wbGV0ZWx5LCB0aGlzIGlzIGhvdyB5b3UgZG8KK2l0LgorCisKK1VOSVgKKworV2hlbiB5b3UgaW5zdGFsbGVkIFZpbSBhcyBhIHBhY2thZ2UsIGNoZWNrIHlvdXIgcGFja2FnZSBtYW5hZ2VyIHRvIGZpbmQgb3V0Citob3cgdG8gcmVtb3ZlIHRoZSBwYWNrYWdlIGFnYWluLgorICAgSWYgeW91IGluc3RhbGxlZCBWaW0gZnJvbSBzb3VyY2VzIHlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZDogPgorCisJbWFrZSB1bmluc3RhbGwKKworSG93ZXZlciwgaWYgeW91IGhhdmUgZGVsZXRlZCB0aGUgb3JpZ2luYWwgZmlsZXMgb3IgeW91IHVzZWQgYW4gYXJjaGl2ZSB0aGF0Citzb21lb25lIHN1cHBsaWVkLCB5b3UgY2FuJ3QgZG8gdGhpcy4gIERvIGRlbGV0ZSB0aGUgZmlsZXMgbWFudWFsbHksIGhlcmUgaXMgYW4KK2V4YW1wbGUgZm9yIHdoZW4gIi91c3IvbG9jYWwiIHdhcyB1c2VkIGFzIHRoZSByb290OiA+CisKKwlybSAtcmYgL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltNjEKKwlybSAvdXNyL2xvY2FsL2Jpbi9ldmlldworCXJtIC91c3IvbG9jYWwvYmluL2V2aW0KKwlybSAvdXNyL2xvY2FsL2Jpbi9leAorCXJtIC91c3IvbG9jYWwvYmluL2d2aWV3CisJcm0gL3Vzci9sb2NhbC9iaW4vZ3ZpbQorCXJtIC91c3IvbG9jYWwvYmluL2d2aW0KKwlybSAvdXNyL2xvY2FsL2Jpbi9ndmltZGlmZgorCXJtIC91c3IvbG9jYWwvYmluL3JndmlldworCXJtIC91c3IvbG9jYWwvYmluL3JndmltCisJcm0gL3Vzci9sb2NhbC9iaW4vcnZpZXcKKwlybSAvdXNyL2xvY2FsL2Jpbi9ydmltCisJcm0gL3Vzci9sb2NhbC9iaW4vcnZpbQorCXJtIC91c3IvbG9jYWwvYmluL3ZpZXcKKwlybSAvdXNyL2xvY2FsL2Jpbi92aW0KKwlybSAvdXNyL2xvY2FsL2Jpbi92aW1kaWZmCisJcm0gL3Vzci9sb2NhbC9iaW4vdmltdHV0b3IKKwlybSAvdXNyL2xvY2FsL2Jpbi94eGQKKwlybSAvdXNyL2xvY2FsL21hbi9tYW4xL2V2aWV3LjEKKwlybSAvdXNyL2xvY2FsL21hbi9tYW4xL2V2aW0uMQorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEvZXguMQorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEvZ3ZpZXcuMQorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEvZ3ZpbS4xCisJcm0gL3Vzci9sb2NhbC9tYW4vbWFuMS9ndmltZGlmZi4xCisJcm0gL3Vzci9sb2NhbC9tYW4vbWFuMS9yZ3ZpZXcuMQorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEvcmd2aW0uMQorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEvcnZpZXcuMQorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEvcnZpbS4xCisJcm0gL3Vzci9sb2NhbC9tYW4vbWFuMS92aWV3LjEKKwlybSAvdXNyL2xvY2FsL21hbi9tYW4xL3ZpbS4xCisJcm0gL3Vzci9sb2NhbC9tYW4vbWFuMS92aW1kaWZmLjEKKwlybSAvdXNyL2xvY2FsL21hbi9tYW4xL3ZpbXR1dG9yLjEKKwlybSAvdXNyL2xvY2FsL21hbi9tYW4xL3h4ZC4xCisKKworTVMtV0lORE9XUworCitJZiB5b3UgaW5zdGFsbGVkIFZpbSB3aXRoIHRoZSBzZWxmLWluc3RhbGxpbmcgYXJjaGl2ZSB5b3UgY2FuIHJ1bgordGhlICJ1bmluc3RhbGwtZ3VpIiBwcm9ncmFtIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBvdGhlciBWaW0KK3Byb2dyYW1zLCBlLmcuICJjOlx2aW1cdmltNjEiLiAgWW91IGNhbiBhbHNvIGxhdW5jaCBpdCBmcm9tIHRoZSBTdGFydCBtZW51IGlmCitpbnN0YWxsZWQgdGhlIFZpbSBlbnRyaWVzIHRoZXJlLiAgVGhpcyB3aWxsIHJlbW92ZSBtb3N0IG9mIHRoZSBmaWxlcywgbWVudQorZW50cmllcyBhbmQgZGVza3RvcCBzaG9ydGN1dHMuICBTb21lIGZpbGVzIG1heSByZW1haW4gaG93ZXZlciwgYXMgdGhleSBuZWVkIGEKK1dpbmRvd3MgcmVzdGFydCBiZWZvcmUgYmVpbmcgZGVsZXRlZC4KKyAgIFlvdSB3aWxsIGJlIGdpdmVuIHRoZSBvcHRpb24gdG8gcmVtb3ZlIHRoZSB3aG9sZSAidmltIiBkaXJlY3RvcnkuICBJdAorcHJvYmFibHkgY29udGFpbnMgeW91ciB2aW1yYyBmaWxlIGFuZCBvdGhlciBydW50aW1lIGZpbGVzIHRoYXQgeW91IGNyZWF0ZWQsIHNvCitiZSBjYXJlZnVsLgorCitFbHNlLCBpZiB5b3UgaW5zdGFsbGVkIFZpbSB3aXRoIHRoZSB6aXAgYXJjaGl2ZXMsIHRoZSBwcmVmZXJyZWQgd2F5IGlzIHRvIHVzZQordGhlICJ1bmluc3RhbCIgcHJvZ3JhbSAobm90ZSB0aGUgbWlzc2luZyBsIGF0IHRoZSBlbmQpLiAgWW91IGNhbiBmaW5kIGl0IGluCit0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlICJpbnN0YWxsIiBwcm9ncmFtLCBlLmcuLCAiYzpcdmltXHZpbTYxIi4gIFRoaXMKK3Nob3VsZCBhbHNvIHdvcmsgZnJvbSB0aGUgdXN1YWwgImluc3RhbGwvcmVtb3ZlIHNvZnR3YXJlIiBwYWdlLgorICAgSG93ZXZlciwgdGhpcyBvbmx5IHJlbW92ZXMgdGhlIHJlZ2lzdHJ5IGVudHJpZXMgZm9yIFZpbS4gIFlvdSBoYXZlIHRvCitkZWxldGUgdGhlIGZpbGVzIHlvdXJzZWxmLiAgU2ltcGx5IHNlbGVjdCB0aGUgZGlyZWN0b3J5ICJ2aW1cdmltNjEiIGFuZCBkZWxldGUKK2l0IHJlY3Vyc2l2ZWx5LiAgVGhlcmUgc2hvdWxkIGJlIG5vIGZpbGVzIHRoZXJlIHRoYXQgeW91IGNoYW5nZWQsIGJ1dCB5b3UKK21pZ2h0IHdhbnQgdG8gY2hlY2sgdGhhdCBmaXJzdC4KKyAgIFRoZSAidmltIiBkaXJlY3RvcnkgcHJvYmFibHkgY29udGFpbnMgeW91ciB2aW1yYyBmaWxlIGFuZCBvdGhlciBydW50aW1lCitmaWxlcyB0aGF0IHlvdSBjcmVhdGVkLiAgWW91IG1pZ2h0IHdhbnQgdG8ga2VlcCB0aGF0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfdG9jLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl90b2MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzFkZGEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfdG9jLnR4dApAQCAtMCwwICsxLDM0MCBAQAorKnVzcl90b2MudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBBdWcgMTgKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgIFRhYmxlIE9mIENvbnRlbnRzCQkJKnVzZXItbWFudWFsKgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK092ZXJ2aWV3IH4KKworR2V0dGluZyBTdGFydGVkCit8dXNyXzAxLnR4dHwgIEFib3V0IHRoZSBtYW51YWxzCit8dXNyXzAyLnR4dHwgIFRoZSBmaXJzdCBzdGVwcyBpbiBWaW0KK3x1c3JfMDMudHh0fCAgTW92aW5nIGFyb3VuZAorfHVzcl8wNC50eHR8ICBNYWtpbmcgc21hbGwgY2hhbmdlcworfHVzcl8wNS50eHR8ICBTZXQgeW91ciBzZXR0aW5ncworfHVzcl8wNi50eHR8ICBVc2luZyBzeW50YXggaGlnaGxpZ2h0aW5nCit8dXNyXzA3LnR4dHwgIEVkaXRpbmcgbW9yZSB0aGFuIG9uZSBmaWxlCit8dXNyXzA4LnR4dHwgIFNwbGl0dGluZyB3aW5kb3dzCit8dXNyXzA5LnR4dHwgIFVzaW5nIHRoZSBHVUkKK3x1c3JfMTAudHh0fCAgTWFraW5nIGJpZyBjaGFuZ2VzCit8dXNyXzExLnR4dHwgIFJlY292ZXJpbmcgZnJvbSBhIGNyYXNoCit8dXNyXzEyLnR4dHwgIENsZXZlciB0cmlja3MKKworRWRpdGluZyBFZmZlY3RpdmVseQorfHVzcl8yMC50eHR8ICBUeXBpbmcgY29tbWFuZC1saW5lIGNvbW1hbmRzIHF1aWNrbHkKK3x1c3JfMjEudHh0fCAgR28gYXdheSBhbmQgY29tZSBiYWNrCit8dXNyXzIyLnR4dHwgIEZpbmRpbmcgdGhlIGZpbGUgdG8gZWRpdAorfHVzcl8yMy50eHR8ICBFZGl0aW5nIG90aGVyIGZpbGVzCit8dXNyXzI0LnR4dHwgIEluc2VydGluZyBxdWlja2x5Cit8dXNyXzI1LnR4dHwgIEVkaXRpbmcgZm9ybWF0dGVkIHRleHQKK3x1c3JfMjYudHh0fCAgUmVwZWF0aW5nCit8dXNyXzI3LnR4dHwgIFNlYXJjaCBjb21tYW5kcyBhbmQgcGF0dGVybnMKK3x1c3JfMjgudHh0fCAgRm9sZGluZworfHVzcl8yOS50eHR8ICBNb3ZpbmcgdGhyb3VnaCBwcm9ncmFtcworfHVzcl8zMC50eHR8ICBFZGl0aW5nIHByb2dyYW1zCit8dXNyXzMxLnR4dHwgIEV4cGxvaXRpbmcgdGhlIEdVSQorCitUdW5pbmcgVmltCit8dXNyXzQwLnR4dHwgIE1ha2UgbmV3IGNvbW1hbmRzCit8dXNyXzQxLnR4dHwgIFdyaXRlIGEgVmltIHNjcmlwdAorfHVzcl80Mi50eHR8ICBBZGQgbmV3IG1lbnVzCit8dXNyXzQzLnR4dHwgIFVzaW5nIGZpbGV0eXBlcworfHVzcl80NC50eHR8ICBZb3VyIG93biBzeW50YXggaGlnaGxpZ2h0ZWQKK3x1c3JfNDUudHh0fCAgU2VsZWN0IHlvdXIgbGFuZ3VhZ2UKKworTWFraW5nIFZpbSBSdW4KK3x1c3JfOTAudHh0fCAgSW5zdGFsbGluZyBWaW0KKworCitUaGUgdXNlciBtYW51YWwgaXMgYXZhaWxhYmxlIGFzIGEgc2luZ2xlLCByZWFkeSB0byBwcmludCBIVE1MIGFuZCBQREYgZmlsZQoraGVyZToKKwlodHRwOi8vdmltZG9jLnNmLm5ldAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0dldHRpbmcgU3RhcnRlZCB+CisKK1JlYWQgdGhpcyBmcm9tIHN0YXJ0IHRvIGVuZCB0byBsZWFybiB0aGUgZXNzZW50aWFsIGNvbW1hbmRzLgorCit8dXNyXzAxLnR4dHwgIEFib3V0IHRoZSBtYW51YWxzCisJCXwwMS4xfAlUd28gbWFudWFscworCQl8MDEuMnwJVmltIGluc3RhbGxlZAorCQl8MDEuM3wJVXNpbmcgdGhlIFZpbSB0dXRvcgorCQl8MDEuNHwJQ29weXJpZ2h0CisKK3x1c3JfMDIudHh0fCAgVGhlIGZpcnN0IHN0ZXBzIGluIFZpbQorCQl8MDIuMXwJUnVubmluZyBWaW0gZm9yIHRoZSBGaXJzdCBUaW1lCisJCXwwMi4yfAlJbnNlcnRpbmcgdGV4dAorCQl8MDIuM3wJTW92aW5nIGFyb3VuZAorCQl8MDIuNHwJRGVsZXRpbmcgY2hhcmFjdGVycworCQl8MDIuNXwJVW5kbyBhbmQgUmVkbworCQl8MDIuNnwJT3RoZXIgZWRpdGluZyBjb21tYW5kcworCQl8MDIuN3wJR2V0dGluZyBvdXQKKwkJfDAyLjh8CUZpbmRpbmcgaGVscAorCit8dXNyXzAzLnR4dHwgIE1vdmluZyBhcm91bmQKKwkJfDAzLjF8CVdvcmQgbW92ZW1lbnQKKwkJfDAzLjJ8CU1vdmluZyB0byB0aGUgc3RhcnQgb3IgZW5kIG9mIGEgbGluZQorCQl8MDMuM3wJTW92aW5nIHRvIGEgY2hhcmFjdGVyCisJCXwwMy40fAlNYXRjaGluZyBhIHBhcmVuCisJCXwwMy41fAlNb3ZpbmcgdG8gYSBzcGVjaWZpYyBsaW5lCisJCXwwMy42fAlUZWxsaW5nIHdoZXJlIHlvdSBhcmUKKwkJfDAzLjd8CVNjcm9sbGluZyBhcm91bmQKKwkJfDAzLjh8CVNpbXBsZSBzZWFyY2hlcworCQl8MDMuOXwJU2ltcGxlIHNlYXJjaCBwYXR0ZXJucworCQl8MDMuMTB8CVVzaW5nIG1hcmtzCisKK3x1c3JfMDQudHh0fCAgTWFraW5nIHNtYWxsIGNoYW5nZXMKKwkJfDA0LjF8CU9wZXJhdG9ycyBhbmQgbW90aW9ucworCQl8MDQuMnwJQ2hhbmdpbmcgdGV4dAorCQl8MDQuM3wJUmVwZWF0aW5nIGEgY2hhbmdlCisJCXwwNC40fAlWaXN1YWwgbW9kZQorCQl8MDQuNXwJTW92aW5nIHRleHQKKwkJfDA0LjZ8CUNvcHlpbmcgdGV4dAorCQl8MDQuN3wJVXNpbmcgdGhlIGNsaXBib2FyZAorCQl8MDQuOHwJVGV4dCBvYmplY3RzCisJCXwwNC45fAlSZXBsYWNlIG1vZGUKKwkJfDA0LjEwfAlDb25jbHVzaW9uCisKK3x1c3JfMDUudHh0fCAgU2V0IHlvdXIgc2V0dGluZ3MKKwkJfDA1LjF8CVRoZSB2aW1yYyBmaWxlCisJCXwwNS4yfAlUaGUgZXhhbXBsZSB2aW1yYyBmaWxlIGV4cGxhaW5lZAorCQl8MDUuM3wJU2ltcGxlIG1hcHBpbmdzCisJCXwwNS40fAlBZGRpbmcgYSBwbHVnaW4KKwkJfDA1LjV8CUFkZGluZyBhIGhlbHAgZmlsZQorCQl8MDUuNnwJVGhlIG9wdGlvbiB3aW5kb3cKKwkJfDA1Ljd8CU9mdGVuIHVzZWQgb3B0aW9ucworCit8dXNyXzA2LnR4dHwgIFVzaW5nIHN5bnRheCBoaWdobGlnaHRpbmcKKwkJfDA2LjF8CVN3aXRjaGluZyBpdCBvbgorCQl8MDYuMnwJTm8gb3Igd3JvbmcgY29sb3JzPworCQl8MDYuM3wJRGlmZmVyZW50IGNvbG9ycworCQl8MDYuNHwJV2l0aCBjb2xvcnMgb3Igd2l0aG91dCBjb2xvcnMKKwkJfDA2LjV8CVByaW50aW5nIHdpdGggY29sb3JzCisJCXwwNi42fAlGdXJ0aGVyIHJlYWRpbmcKKworfHVzcl8wNy50eHR8ICBFZGl0aW5nIG1vcmUgdGhhbiBvbmUgZmlsZQorCQl8MDcuMXwJRWRpdCBhbm90aGVyIGZpbGUKKwkJfDA3LjJ8CUEgbGlzdCBvZiBmaWxlcworCQl8MDcuM3wJSnVtcGluZyBmcm9tIGZpbGUgdG8gZmlsZQorCQl8MDcuNHwJQmFja3VwIGZpbGVzCisJCXwwNy41fAlDb3B5IHRleHQgYmV0d2VlbiBmaWxlcworCQl8MDcuNnwJVmlld2luZyBhIGZpbGUKKwkJfDA3Ljd8CUNoYW5naW5nIHRoZSBmaWxlIG5hbWUKKworfHVzcl8wOC50eHR8ICBTcGxpdHRpbmcgd2luZG93cworCQl8MDguMXwJU3BsaXQgYSB3aW5kb3cKKwkJfDA4LjJ8CVNwbGl0IGEgd2luZG93IG9uIGFub3RoZXIgZmlsZQorCQl8MDguM3wJV2luZG93IHNpemUKKwkJfDA4LjR8CVZlcnRpY2FsIHNwbGl0cworCQl8MDguNXwJTW92aW5nIHdpbmRvd3MKKwkJfDA4LjZ8CUNvbW1hbmRzIGZvciBhbGwgd2luZG93cworCQl8MDguN3wJVmlld2luZyBkaWZmZXJlbmNlcyB3aXRoIHZpbWRpZmYKKwkJfDA4Ljh8CVZhcmlvdXMKKworfHVzcl8wOS50eHR8ICBVc2luZyB0aGUgR1VJCisJCXwwOS4xfAlQYXJ0cyBvZiB0aGUgR1VJCisJCXwwOS4yfAlVc2luZyB0aGUgbW91c2UKKwkJfDA5LjN8CVRoZSBjbGlwYm9hcmQKKwkJfDA5LjR8CVNlbGVjdCBtb2RlCisKK3x1c3JfMTAudHh0fCAgTWFraW5nIGJpZyBjaGFuZ2VzCisJCXwxMC4xfAlSZWNvcmQgYW5kIHBsYXliYWNrIGNvbW1hbmRzCisJCXwxMC4yfAlTdWJzdGl0dXRpb24KKwkJfDEwLjN8CUNvbW1hbmQgcmFuZ2VzCisJCXwxMC40fAlUaGUgZ2xvYmFsIGNvbW1hbmQKKwkJfDEwLjV8CVZpc3VhbCBibG9jayBtb2RlCisJCXwxMC42fAlSZWFkaW5nIGFuZCB3cml0aW5nIHBhcnQgb2YgYSBmaWxlCisJCXwxMC43fAlGb3JtYXR0aW5nIHRleHQKKwkJfDEwLjh8CUNoYW5naW5nIGNhc2UKKwkJfDEwLjl8CVVzaW5nIGFuIGV4dGVybmFsIHByb2dyYW0KKworfHVzcl8xMS50eHR8ICBSZWNvdmVyaW5nIGZyb20gYSBjcmFzaAorCQl8MTEuMXwJQmFzaWMgcmVjb3ZlcnkKKwkJfDExLjJ8CVdoZXJlIGlzIHRoZSBzd2FwIGZpbGU/CisJCXwxMS4zfAlDcmFzaGVkIG9yIG5vdD8KKwkJfDExLjR8CUZ1cnRoZXIgcmVhZGluZworCit8dXNyXzEyLnR4dHwgIENsZXZlciB0cmlja3MKKwkJfDEyLjF8CVJlcGxhY2UgYSB3b3JkCisJCXwxMi4yfAlDaGFuZ2UgIkxhc3QsIEZpcnN0IiB0byAiRmlyc3QgTGFzdCIKKwkJfDEyLjN8CVNvcnQgYSBsaXN0CisJCXwxMi40fAlSZXZlcnNlIGxpbmUgb3JkZXIKKwkJfDEyLjV8CUNvdW50IHdvcmRzCisJCXwxMi42fAlGaW5kIGEgbWFuIHBhZ2UKKwkJfDEyLjd8CVRyaW0gYmxhbmtzCisJCXwxMi44fAlGaW5kIHdoZXJlIGEgd29yZCBpcyB1c2VkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRWRpdGluZyBFZmZlY3RpdmVseSB+CisKK1N1YmplY3RzIHRoYXQgY2FuIGJlIHJlYWQgaW5kZXBlbmRlbnRseS4KKworfHVzcl8yMC50eHR8ICBUeXBpbmcgY29tbWFuZC1saW5lIGNvbW1hbmRzIHF1aWNrbHkKKwkJfDIwLjF8CUNvbW1hbmQgbGluZSBlZGl0aW5nCisJCXwyMC4yfAlDb21tYW5kIGxpbmUgYWJicmV2aWF0aW9ucworCQl8MjAuM3wJQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24KKwkJfDIwLjR8CUNvbW1hbmQgbGluZSBoaXN0b3J5CisJCXwyMC41fAlDb21tYW5kIGxpbmUgd2luZG93CisKK3x1c3JfMjEudHh0fCAgR28gYXdheSBhbmQgY29tZSBiYWNrCisJCXwyMS4xfAlTdXNwZW5kIGFuZCByZXN1bWUKKwkJfDIxLjJ8CUV4ZWN1dGluZyBzaGVsbCBjb21tYW5kcworCQl8MjEuM3wJUmVtZW1iZXJpbmcgaW5mb3JtYXRpb247IHZpbWluZm8KKwkJfDIxLjR8CVNlc3Npb25zCisJCXwyMS41fAlWaWV3cworCQl8MjEuNnwJTW9kZWxpbmVzCisKK3x1c3JfMjIudHh0fCAgRmluZGluZyB0aGUgZmlsZSB0byBlZGl0CisJCXwyMi4xfAlUaGUgZmlsZSBleHBsb3JlcgorCQl8MjIuMnwJVGhlIGN1cnJlbnQgZGlyZWN0b3J5CisJCXwyMi4zfAlGaW5kaW5nIGEgZmlsZQorCQl8MjIuNHwJVGhlIGJ1ZmZlciBsaXN0CisKK3x1c3JfMjMudHh0fCAgRWRpdGluZyBvdGhlciBmaWxlcworCQl8MjMuMXwJRE9TLCBNYWMgYW5kIFVuaXggZmlsZXMKKwkJfDIzLjJ8CUZpbGVzIG9uIHRoZSBpbnRlcm5ldAorCQl8MjMuM3wJRW5jcnlwdGlvbgorCQl8MjMuNHwJQmluYXJ5IGZpbGVzCisJCXwyMy41fAlDb21wcmVzc2VkIGZpbGVzCisKK3x1c3JfMjQudHh0fCAgSW5zZXJ0aW5nIHF1aWNrbHkKKwkJfDI0LjF8CU1ha2luZyBjb3JyZWN0aW9ucworCQl8MjQuMnwJU2hvd2luZyBtYXRjaGVzCisJCXwyNC4zfAlDb21wbGV0aW9uCisJCXwyNC40fAlSZXBlYXRpbmcgYW4gaW5zZXJ0CisJCXwyNC41fAlDb3B5aW5nIGZyb20gYW5vdGhlciBsaW5lCisJCXwyNC42fAlJbnNlcnRpbmcgYSByZWdpc3RlcgorCQl8MjQuN3wJQWJicmV2aWF0aW9ucworCQl8MjQuOHwJRW50ZXJpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzCisJCXwyNC45fAlEaWdyYXBocworCQl8MjQuMTB8CU5vcm1hbCBtb2RlIGNvbW1hbmRzCisKK3x1c3JfMjUudHh0fCAgRWRpdGluZyBmb3JtYXR0ZWQgdGV4dAorCQl8MjUuMXwJQnJlYWtpbmcgbGluZXMKKwkJfDI1LjJ8CUFsaWduaW5nIHRleHQKKwkJfDI1LjN8CUluZGVudHMgYW5kIHRhYnMKKwkJfDI1LjR8CURlYWxpbmcgd2l0aCBsb25nIGxpbmVzCisJCXwyNS41fAlFZGl0aW5nIHRhYmxlcworCit8dXNyXzI2LnR4dHwgIFJlcGVhdGluZworCQl8MjYuMXwJUmVwZWF0aW5nIHdpdGggVmlzdWFsIG1vZGUKKwkJfDI2LjJ8CUFkZCBhbmQgc3VidHJhY3QKKwkJfDI2LjN8CU1ha2luZyBhIGNoYW5nZSBpbiBtYW55IGZpbGVzCisJCXwyNi40fAlVc2luZyBWaW0gZnJvbSBhIHNoZWxsIHNjcmlwdAorCit8dXNyXzI3LnR4dHwgIFNlYXJjaCBjb21tYW5kcyBhbmQgcGF0dGVybnMKKwkJfDI3LjF8CUlnbm9yaW5nIGNhc2UKKwkJfDI3LjJ8CVdyYXBwaW5nIGFyb3VuZCB0aGUgZmlsZSBlbmQKKwkJfDI3LjN8CU9mZnNldHMKKwkJfDI3LjR8CU1hdGNoaW5nIG11bHRpcGxlIHRpbWVzCisJCXwyNy41fAlBbHRlcm5hdGl2ZXMKKwkJfDI3LjZ8CUNoYXJhY3RlciByYW5nZXMKKwkJfDI3Ljd8CUNoYXJhY3RlciBjbGFzc2VzCisJCXwyNy44fAlNYXRjaGluZyBhIGxpbmUgYnJlYWsKKwkJfDI3Ljl8CUV4YW1wbGVzCisKK3x1c3JfMjgudHh0fCAgRm9sZGluZworCQl8MjguMXwJV2hhdCBpcyBmb2xkaW5nPworCQl8MjguMnwJTWFudWFsIGZvbGRpbmcKKwkJfDI4LjN8CVdvcmtpbmcgd2l0aCBmb2xkcworCQl8MjguNHwJU2F2aW5nIGFuZCByZXN0b3JpbmcgZm9sZHMKKwkJfDI4LjV8CUZvbGRpbmcgYnkgaW5kZW50CisJCXwyOC42fAlGb2xkaW5nIHdpdGggbWFya2VycworCQl8MjguN3wJRm9sZGluZyBieSBzeW50YXgKKwkJfDI4Ljh8CUZvbGRpbmcgYnkgZXhwcmVzc2lvbgorCQl8MjguOXwJRm9sZGluZyB1bmNoYW5nZWQgbGluZXMKKwkJfDI4LjEwfCBXaGljaCBmb2xkIG1ldGhvZCB0byB1c2U/CisKK3x1c3JfMjkudHh0fCAgTW92aW5nIHRocm91Z2ggcHJvZ3JhbXMKKwkJfDI5LjF8CVVzaW5nIHRhZ3MKKwkJfDI5LjJ8CVRoZSBwcmV2aWV3IHdpbmRvdworCQl8MjkuM3wJTW92aW5nIHRocm91Z2ggYSBwcm9ncmFtCisJCXwyOS40fAlGaW5kaW5nIGdsb2JhbCBpZGVudGlmaWVycworCQl8MjkuNXwJRmluZGluZyBsb2NhbCBpZGVudGlmaWVycworCit8dXNyXzMwLnR4dHwgIEVkaXRpbmcgcHJvZ3JhbXMKKwkJfDMwLjF8CUNvbXBpbGluZworCQl8MzAuMnwJSW5kZW50aW5nIEMgZmlsZXMKKwkJfDMwLjN8CUF1dG9tYXRpYyBpbmRlbnRpbmcKKwkJfDMwLjR8CU90aGVyIGluZGVudGluZworCQl8MzAuNXwJVGFicyBhbmQgc3BhY2VzCisJCXwzMC42fAlGb3JtYXR0aW5nIGNvbW1lbnRzCisKK3x1c3JfMzEudHh0fCAgRXhwbG9pdGluZyB0aGUgR1VJCisJCXwzMS4xfAlUaGUgZmlsZSBicm93c2VyCisJCXwzMS4yfAlDb25maXJtYXRpb24KKwkJfDMxLjN8CU1lbnUgc2hvcnRjdXRzCisJCXwzMS40fAlWaW0gd2luZG93IHBvc2l0aW9uIGFuZCBzaXplCisJCXwzMS41fAlWYXJpb3VzCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVHVuaW5nIFZpbSB+CisKK01ha2UgVmltIHdvcmsgYXMgeW91IGxpa2UgaXQuCisKK3x1c3JfNDAudHh0fCAgTWFrZSBuZXcgY29tbWFuZHMKKwkJfDQwLjF8CUtleSBtYXBwaW5nCisJCXw0MC4yfAlEZWZpbmluZyBjb21tYW5kLWxpbmUgY29tbWFuZHMKKwkJfDQwLjN8CUF1dG9jb21tYW5kcworCit8dXNyXzQxLnR4dHwgIFdyaXRlIGEgVmltIHNjcmlwdAorCQl8NDEuMXwJSW50cm9kdWN0aW9uCisJCXw0MS4yfAlWYXJpYWJsZXMKKwkJfDQxLjN8CUV4cHJlc3Npb25zCisJCXw0MS40fAlDb25kaXRpb25hbHMKKwkJfDQxLjV8CUV4ZWN1dGluZyBhbiBleHByZXNzaW9uCisJCXw0MS42fAlVc2luZyBmdW5jdGlvbnMKKwkJfDQxLjd8CURlZmluaW5nIGEgZnVuY3Rpb24KKwkJfDQxLjh8CUV4Y2VwdGlvbnMKKwkJfDQxLjl8CVZhcmlvdXMgcmVtYXJrcworCQl8NDEuMTB8CVdyaXRpbmcgYSBwbHVnaW4KKwkJfDQxLjExfAlXcml0aW5nIGEgZmlsZXR5cGUgcGx1Z2luCisJCXw0MS4xMnwJV3JpdGluZyBhIGNvbXBpbGVyIHBsdWdpbgorCit8dXNyXzQyLnR4dHwgIEFkZCBuZXcgbWVudXMKKwkJfDQyLjF8CUludHJvZHVjdGlvbgorCQl8NDIuMnwJTWVudSBjb21tYW5kcworCQl8NDIuM3wJVmFyaW91cworCQl8NDIuNHwJVG9vbGJhciBhbmQgcG9wdXAgbWVudXMKKworfHVzcl80My50eHR8ICBVc2luZyBmaWxldHlwZXMKKwkJfDQzLjF8CVBsdWdpbnMgZm9yIGEgZmlsZXR5cGUKKwkJfDQzLjJ8CUFkZGluZyBhIGZpbGV0eXBlCisKK3x1c3JfNDQudHh0fCAgWW91ciBvd24gc3ludGF4IGhpZ2hsaWdodGVkCisJCXw0NC4xfAlCYXNpYyBzeW50YXggY29tbWFuZHMKKwkJfDQ0LjJ8CUtleXdvcmRzCisJCXw0NC4zfAlNYXRjaGVzCisJCXw0NC40fAlSZWdpb25zCisJCXw0NC41fAlOZXN0ZWQgaXRlbXMKKwkJfDQ0LjZ8CUZvbGxvd2luZyBncm91cHMKKwkJfDQ0Ljd8CU90aGVyIGFyZ3VtZW50cworCQl8NDQuOHwJQ2x1c3RlcnMKKwkJfDQ0Ljl8CUluY2x1ZGluZyBhbm90aGVyIHN5bnRheCBmaWxlCisJCXw0NC4xMHwJU3luY2hyb25pemluZworCQl8NDQuMTF8CUluc3RhbGxpbmcgYSBzeW50YXggZmlsZQorCQl8NDQuMTJ8CVBvcnRhYmxlIHN5bnRheCBmaWxlIGxheW91dAorCit8dXNyXzQ1LnR4dHwgIFNlbGVjdCB5b3VyIGxhbmd1YWdlCisJCXw0NS4xfAlMYW5ndWFnZSBmb3IgTWVzc2FnZXMKKwkJfDQ1LjJ8CUxhbmd1YWdlIGZvciBNZW51cworCQl8NDUuM3wJVXNpbmcgYW5vdGhlciBlbmNvZGluZworCQl8NDUuNHwJRWRpdGluZyBmaWxlcyB3aXRoIGEgZGlmZmVyZW50IGVuY29kaW5nCisJCXw0NS41fAlFbnRlcmluZyBsYW5ndWFnZSB0ZXh0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTWFraW5nIFZpbSBSdW4gfgorCitCZWZvcmUgeW91IGNhbiB1c2UgVmltLgorCit8dXNyXzkwLnR4dHwgIEluc3RhbGxpbmcgVmltCisJCXw5MC4xfAlVbml4CisJCXw5MC4yfAlNUy1XaW5kb3dzCisJCXw5MC4zfAlVcGdyYWRpbmcKKwkJfDkwLjR8CUNvbW1vbiBpbnN0YWxsYXRpb24gaXNzdWVzCisJCXw5MC41fAlVbmluc3RhbGxpbmcgVmltCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZhcmlvdXMudHh0IGIvcnVudGltZS9kb2MvdmFyaW91cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyNTcyZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZhcmlvdXMudHh0CkBAIC0wLDAgKzEsMTA5OCBAQAorKnZhcmlvdXMudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwMQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1ZhcmlvdXMgY29tbWFuZHMJCQkJCSp2YXJpb3VzKgorCisxLiBWYXJpb3VzIGNvbW1hbmRzCQl8dmFyaW91cy1jbWRzfAorMi4gT25saW5lIGhlbHAJCQl8b25saW5lLWhlbHB8CiszLiBQcmludGluZwkJCXxwcmludGluZ3wKKzQuIFVzaW5nIFZpbSBsaWtlIGxlc3Mgb3IgbW9yZQl8bGVzc3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBWYXJpb3VzIGNvbW1hbmRzCQkJCQkqdmFyaW91cy1jbWRzKgorCisJCQkJCQkJKkNUUkwtTCoKK0NUUkwtTAkJCUNsZWFyIGFuZCByZWRyYXcgdGhlIHNjcmVlbiAobGF0ZXIpLgorCisJCQkJCQkJKjpyZWRyKiAqOnJlZHJhdyoKKzpyZWRyW2F3XVshXQkJUmVkcmF3IHRoZSBzY3JlZW4gcmlnaHQgbm93LiAgV2hlbiAhIGlzIGluY2x1ZGVkIGl0IGlzCisJCQljbGVhcmVkIGZpcnN0LgorCQkJVXNlZnVsIHRvIHVwZGF0ZSB0aGUgc2NyZWVuIGhhbGZ3YXkgZXhlY3V0aW5nIGEgc2NyaXB0CisJCQlvciBmdW5jdGlvbi4gIEFsc28gd2hlbiBoYWxmd2F5IGEgbWFwcGluZyBhbmQKKwkJCSdsYXp5cmVkcmF3JyBpcyBzZXQuCisKKwkJCQkJCSo6cmVkcmF3cyogKjpyZWRyYXdzdGF0dXMqCis6cmVkcmF3c1t0YXR1c11bIV0JUmVkcmF3IHRoZSBzdGF0dXMgbGluZSBvZiB0aGUgY3VycmVudCB3aW5kb3cuICBXaGVuICEKKwkJCWlzIGluY2x1ZGVkIGFsbCBzdGF0dXMgbGluZXMgYXJlIHJlZHJhd24uCisJCQlVc2VmdWwgdG8gdXBkYXRlIHRoZSBzdGF0dXMgbGluZShzKSB3aGVuICdzdGF0dXNsaW5lJworCQkJaW5jbHVkZXMgYW4gaXRlbSB0aGF0IGRvZXNuJ3QgY2F1c2UgYXV0b21hdGljCisJCQl1cGRhdGluZy4KKworCQkJCQkJCSpOPERlbD4qCis8RGVsPgkJCVdoZW4gZW50ZXJpbmcgYSBudW1iZXI6IFJlbW92ZSB0aGUgbGFzdCBkaWdpdC4KKwkJCU5vdGU6IGlmIHlvdSBsaWtlIHRvIHVzZSA8QlM+IGZvciB0aGlzLCBhZGQgdGhpcworCQkJbWFwcGluZyB0byB5b3VyIC52aW1yYzogPgorCQkJCTptYXAgQ1RSTC1WIDxCUz4gICBDVFJMLVYgPERlbD4KKzwJCQlTZWUgfDpmaXhkZWx8IGlmIHlvdXIgPERlbD4ga2V5IGRvZXMgbm90IGRvIHdoYXQgeW91CisJCQl3YW50LgorCis6YXNbY2lpXQlvcgkJCQkJKmdhKiAqOmFzKiAqOmFzY2lpKgorZ2EJCQlQcmludCB0aGUgYXNjaWkgdmFsdWUgb2YgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUKKwkJCWN1cnNvciBpbiBkZWNpbWFsLCBoZXhhZGVjaW1hbCBhbmQgb2N0YWwuICBGb3IKKwkJCWV4YW1wbGUsIHdoZW4gdGhlIGN1cnNvciBpcyBvbiBhICdSJzoKKwkJCQk8Uj4gIDgyLCAgSGV4IDUyLCAgT2N0YWwgMTIyIH4KKwkJCVdoZW4gdGhlIGNoYXJhY3RlciBpcyBhIG5vbi1zdGFuZGFyZCBBU0NJSSBjaGFyYWN0ZXIsCisJCQlidXQgcHJpbnRhYmxlIGFjY29yZGluZyB0byB0aGUgJ2lzcHJpbnQnIG9wdGlvbiwgdGhlCisJCQlub24tcHJpbnRhYmxlIHZlcnNpb24gaXMgYWxzbyBnaXZlbi4gIFdoZW4gdGhlCisJCQljaGFyYWN0ZXIgaXMgbGFyZ2VyIHRoYW4gMTI3LCB0aGUgPE0teD4gZm9ybSBpcyBhbHNvCisJCQlwcmludGVkLiAgRm9yIGV4YW1wbGU6CisJCQkJPH5BPiAgPE0tXkE+ICAxMjksICBIZXggODEsICBPY3RhbCAyMDEgfgorCQkJCTxwPiAgPHx+PiAgPE0tfj4gIDI1NCwgIEhleCBmZSwgIE9jdGFsIDM3NiB+CisJCQkod2hlcmUgPHA+IGlzIGEgc3BlY2lhbCBjaGFyYWN0ZXIpCisJCQlUaGUgPE51bD4gY2hhcmFjdGVyIGluIGEgZmlsZSBpcyBzdG9yZWQgaW50ZXJuYWxseSBhcworCQkJPE5MPiwgYnV0IGl0IHdpbGwgYmUgc2hvd24gYXM6CisJCQkJPF5APiAgMCwgIEhleCAwMCwgIE9jdGFsIDAwMCB+CisJCQlNbmVtb25pYzogR2V0IEFzY2lpIHZhbHVlLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpnOCoKK2c4CQkJUHJpbnQgdGhlIGhleCB2YWx1ZXMgb2YgdGhlIGJ5dGVzIHVzZWQgaW4gdGhlCisJCQljaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciwgYXNzdW1pbmcgaXQgaXMgaW4gfFVURi04fAorCQkJZW5jb2RpbmcuICBUaGlzIGFsc28gc2hvd3MgY29tcG9zaW5nIGNoYXJhY3RlcnMuCisJCQlFeGFtcGxlIG9mIGEgY2hhcmFjdGVyIHdpdGggdGhyZWUgY29tcG9zaW5nCisJCQljaGFyYWN0ZXJzOgorCQkJCWUwIGI4IDgxICsgZTAgYjggYjkgKyBlMCBiOSA4OSB+CisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpwKiAqOnByKiAqOnByaW50KgorOltyYW5nZV1wW3JpbnRdCQlQcmludCBbcmFuZ2VdIGxpbmVzIChkZWZhdWx0IGN1cnJlbnQgbGluZSkuCisJCQlOb3RlOiBJZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGEgd2F5IHRvIHByaW50IHlvdXIgdGV4dAorCQkJZmlsZSwgeW91IG5lZWQgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBmb3IgdGhhdC4gIEluIHRoZQorCQkJR1VJIHlvdSBjYW4gdXNlIHRoZSBGaWxlLlByaW50IG1lbnUgZW50cnkuCisJCQkoRm9yIHByaW50aW5nIG9uIHBhcGVyIHNlZSB8OmhhcmRjb3B5fCkKKworOltyYW5nZV1wW3JpbnRdIHtjb3VudH0KKwkJCVByaW50IHtjb3VudH0gbGluZXMsIHN0YXJ0aW5nIHdpdGggW3JhbmdlXSAoZGVmYXVsdAorCQkJY3VycmVudCBsaW5lIHxjbWRsaW5lLXJhbmdlc3wpLgorCisJCQkJCQkJKjpQKiAqOlByaW50KgorOltyYW5nZV1QW3JpbnRdIFtjb3VudF0KKwkJCUp1c3QgYXMgIjpwcmludCIuICBXYXMgYXBwYXJlbnRseSBhZGRlZCB0byBWaSBmb3IKKwkJCXBlb3BsZSB0aGF0IGtlZXAgdGhlIHNoaWZ0IGtleSBwcmVzc2VkIHRvbyBsb25nLi4uCisKKwkJCQkJCQkqOmwqICo6bGlzdCoKKzpbcmFuZ2VdbFtpc3RdIFtjb3VudF0KKwkJCVNhbWUgYXMgOnByaW50LCBidXQgZGlzcGxheSB1bnByaW50YWJsZSBjaGFyYWN0ZXJzCisJCQl3aXRoICdeJy4KKworCQkJCQkJCSo6bnUqICo6bnVtYmVyKgorOltyYW5nZV1udVttYmVyXSBbY291bnRdCisJCQlTYW1lIGFzIDpwcmludCwgYnV0IHByZWNlZGUgZWFjaCBsaW5lIHdpdGggaXRzIGxpbmUKKwkJCW51bWJlci4gIChTZWUgYWxzbyAnaGlnaGxpZ2h0JyBvcHRpb24pLgorCisJCQkJCQkJKjojKgorOltyYW5nZV0jIFtjb3VudF0Jc3lub255bSBmb3IgOm51bWJlci4KKworCQkJCQkJCSo6eiogKkUxNDQqCis6e3JhbmdlfXpbKy1eLj1de2NvdW50fQlEaXNwbGF5IHNldmVyYWwgbGluZXMgb2YgdGV4dCBzdXJyb3VuZGluZyB0aGUgbGluZQorCQkJc3BlY2lmaWVkIHdpdGgge3JhbmdlfSwgb3IgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUKKwkJCWlmIHRoZXJlIGlzIG5vIHtyYW5nZX0uICBJZiB0aGVyZSBpcyBhIHtjb3VudH0sIHRoYXQncworCQkJaG93IG1hbnkgbGluZXMgeW91J2xsIHNlZTsgb3RoZXJ3aXNlLCB0aGUgY3VycmVudAorCQkJd2luZG93IHNpemUgaXMgdXNlZC4KKworCQkJOnogY2FuIGJlIHVzZWQgZWl0aGVyIGFsb25lIG9yIGZvbGxvd2VkIGJ5IGFueSBvZgorCQkJc2V2ZXJhbCBwdW5jdHVhdGlvbiBtYXJrcy4gIFRoZXNlIGhhdmUgdGhlIGZvbGxvd2luZworCQkJZWZmZWN0OgorCisJCQltYXJrICAgZmlyc3QgbGluZSAgICBsYXN0IGxpbmUgICAgICBuZXcgbG9jYXRpb24gICB+CisJCQktLS0tICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0KKwkJCSsgICAgICBjdXJyZW50IGxpbmUgIDEgc2NyIGZvcndhcmQgIDEgc2NyIGZvcndhcmQKKwkJCS0gICAgICAxIHNjciBiYWNrICAgIGN1cnJlbnQgbGluZSAgIGN1cnJlbnQgbGluZQorCQkJXiAgICAgIDIgc2NyIGJhY2sgICAgMSBzY3IgYmFjayAgICAgMSBzY3IgYmFjaworCQkJLiAgICAgIDEvMiBzY3IgYmFjayAgMS8yIHNjciBmd2QgICAgMS8yIHNyYyBmd2QKKwkJCT0gICAgICAxLzIgc3JjIGJhY2sgIDEvMiBzY3IgZndkICAgIGN1cnJlbnQgbGluZQorCisJCQlTcGVjaWZ5aW5nIG5vIG1hcmsgYXQgYWxsIGlzIHRoZSBzYW1lIGFzICIrIi4KKwkJCUlmIHRoZSBtYXJrIGlzICI9IiwgYSBsaW5lIG9mIGRhc2hlcyBpcyBwcmludGVkCisJCQlhcm91bmQgdGhlIGN1cnJlbnQgbGluZS4KKworOntyYW5nZX16I1srLV4uPV17Y291bnR9CQkJCSo6eiMqCisJCQlMaWtlICI6eiIsIGJ1dCBudW1iZXIgdGhlIGxpbmVzLgorCQkJe25vdCBpbiBhbGwgdmVyc2lvbnMgb2YgVmksIG5vdCB3aXRoIHRoZXNlIGFyZ3VtZW50c30KKworCQkJCQkJCSo6PSoKKzo9CQkJUHJpbnQgdGhlIGxhc3QgbGluZSBudW1iZXIuCisKKzp7cmFuZ2V9PQkJUHJpbnRzIHRoZSBsYXN0IGxpbmUgbnVtYmVyIGluIHtyYW5nZX0uICBGb3IgZXhhbXBsZSwKKwkJCXRoaXMgcHJpbnRzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyOiA+CisJCQkJOi49CisKKzpub3JtW2FsXVshXSB7Y29tbWFuZHN9CQkJCQkqOm5vcm0qICo6bm9ybWFsKgorCQkJRXhlY3V0ZSBOb3JtYWwgbW9kZSBjb21tYW5kcyB7Y29tbWFuZHN9LiAgVGhpcyBtYWtlcworCQkJaXQgcG9zc2libGUgdG8gZXhlY3V0ZSBOb3JtYWwgbW9kZSBjb21tYW5kcyB0eXBlZCBvbgorCQkJdGhlIGNvbW1hbmQtbGluZS4gIHtjb21tYW5kc30gaXMgZXhlY3V0ZWQgbGlrZSBpdCBpcworCQkJdHlwZWQuICBGb3IgdW5kbyBhbGwgY29tbWFuZHMgYXJlIHVuZG9uZSB0b2dldGhlci4KKwkJCUlmIHRoZSBbIV0gaXMgZ2l2ZW4sIG1hcHBpbmdzIHdpbGwgbm90IGJlIHVzZWQuCisJCQl7Y29tbWFuZHN9IHNob3VsZCBiZSBhIGNvbXBsZXRlIGNvbW1hbmQuICBJZgorCQkJe2NvbW1hbmRzfSBkb2VzIG5vdCBmaW5pc2ggYSBjb21tYW5kLCB0aGUgbGFzdCBvbmUKKwkJCXdpbGwgYmUgYWJvcnRlZCBhcyBpZiA8RXNjPiBvciA8Qy1DPiB3YXMgdHlwZWQuCisJCQlUaGUgZGlzcGxheSBpc24ndCB1cGRhdGVkIHdoaWxlICI6bm9ybWFsIiBpcyBidXN5LgorCQkJVGhpcyBpbXBsaWVzIHRoYXQgYW4gaW5zZXJ0IGNvbW1hbmQgbXVzdCBiZSBjb21wbGV0ZWQKKwkJCSh0byBzdGFydCBJbnNlcnQgbW9kZSwgc2VlIHw6c3RhcnRpbnNlcnR8KS4gIEEgIjoiCisJCQljb21tYW5kIG11c3QgYmUgY29tcGxldGVkIGFzIHdlbGwuCisJCQl7Y29tbWFuZHN9IGNhbm5vdCBzdGFydCB3aXRoIGEgc3BhY2UuIFB1dCBhIDEgKG9uZSkKKwkJCWJlZm9yZSBpdCwgMSBzcGFjZSBpcyBvbmUgc3BhY2UuCisJCQlUaGUgJ2luc2VydG1vZGUnIG9wdGlvbiBpcyBpZ25vcmVkIGZvciB7Y29tbWFuZHN9LgorCQkJVGhpcyBjb21tYW5kIGNhbm5vdCBiZSBmb2xsb3dlZCBieSBhbm90aGVyIGNvbW1hbmQsCisJCQlzaW5jZSBhbnkgJ3wnIGlzIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgY29tbWFuZC4KKwkJCVRoaXMgY29tbWFuZCBjYW4gYmUgdXNlZCByZWN1cnNpdmVseSwgYnV0IHRoZSBkZXB0aCBpcworCQkJbGltaXRlZCBieSAnbWF4bWFwZGVwdGgnLgorCQkJV2hlbiB0aGlzIGNvbW1hbmQgaXMgY2FsbGVkIGZyb20gYSBub24tcmVtYXBwYWJsZQorCQkJbWFwcGluZyB8Om5vcmVtYXB8LCB0aGUgYXJndW1lbnQgY2FuIGJlIG1hcHBlZCBhbnl3YXkuCisJCQlBbiBhbHRlcm5hdGl2ZSBpcyB0byB1c2UgfDpleGVjdXRlfCwgd2hpY2ggdXNlcyBhbgorCQkJZXhwcmVzc2lvbiBhcyBhcmd1bWVudC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YKKwkJCXByaW50YWJsZSBjaGFyYWN0ZXJzLiAgRXhhbXBsZTogPgorCQkJCTpleGUgIm5vcm1hbCBcPGMtdz5cPGMtdz4iCis8CQkJe25vdCBpbiBWaSwgb2YgY291cnNlfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiB0aGUgfCtleF9leHRyYXwgZmVhdHVyZSB3YXMKKwkJCWRpc2FibGVkIGF0IGNvbXBpbGUgdGltZX0KKworOntyYW5nZX1ub3JtW2FsXVshXSB7Y29tbWFuZHN9CQkJCSo6bm9ybWFsLXJhbmdlKgorCQkJRXhlY3V0ZSBOb3JtYWwgbW9kZSBjb21tYW5kcyB7Y29tbWFuZHN9IGZvciBlYWNoIGxpbmUKKwkJCWluIHRoZSB7cmFuZ2V9LiAgQmVmb3JlIGV4ZWN1dGluZyB0aGUge2NvbW1hbmRzfSwgdGhlCisJCQljdXJzb3IgaXMgcG9zaXRpb25lZCBpbiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSByYW5nZSwKKwkJCWZvciBlYWNoIGxpbmUuICBPdGhlcndpc2UgaXQncyB0aGUgc2FtZSBhcyB0aGUKKwkJCSI6bm9ybWFsIiBjb21tYW5kIHdpdGhvdXQgYSByYW5nZS4KKwkJCXtub3QgaW4gVml9CisJCQlOb3QgYXZhaWxhYmxlIHdoZW4gfCtleF9leHRyYXwgZmVhdHVyZSB3YXMgZGlzYWJsZWQgYXQKKwkJCWNvbXBpbGUgdGltZS4KKworCQkJCQkJCSo6c2gqICo6c2hlbGwqICpFMzcxKgorOnNoW2VsbF0JCVRoaXMgY29tbWFuZCBzdGFydHMgYSBzaGVsbC4gIFdoZW4gdGhlIHNoZWxsIGV4aXRzCisJCQkoYWZ0ZXIgdGhlICJleGl0IiBjb21tYW5kKSB5b3UgcmV0dXJuIHRvIFZpbS4gIFRoZQorCQkJbmFtZSBmb3IgdGhlIHNoZWxsIGNvbW1hbmQgY29tZXMgZnJvbSAnc2hlbGwnIG9wdGlvbi4KKwkJCQkJCQkqRTM2MCoKKwkJCU5vdGU6IFRoaXMgZG9lc24ndCB3b3JrIHdoZW4gVmltIG9uIHRoZSBBbWlnYSB3YXMKKwkJCXN0YXJ0ZWQgaW4gUXVpY2tGaXggbW9kZSBmcm9tIGEgY29tcGlsZXIsIGJlY2F1c2UgdGhlCisJCQljb21waWxlciB3aWxsIGhhdmUgc2V0IHN0ZGluIHRvIGEgbm9uLWludGVyYWN0aXZlCisJCQltb2RlLgorCisJCQkJCQkJKjohY21kKiAqOiEqICpFMzQqCis6IXtjbWR9CQkJRXhlY3V0ZSB7Y21kfSB3aXRoIHRoZSBzaGVsbC4gIFNlZSBhbHNvIHRoZSAnc2hlbGwnCisJCQlhbmQgJ3NoZWxsdHlwZScgb3B0aW9uLgorCQkJQW55ICchJyBpbiB7Y21kfSBpcyByZXBsYWNlZCB3aXRoIHRoZSBwcmV2aW91cworCQkJZXh0ZXJuYWwgY29tbWFuZCAoc2VlIGFsc28gJ2Nwb3B0aW9ucycpLiAgQnV0IG5vdCB3aGVuCisJCQl0aGVyZSBpcyBhIGJhY2tzbGFzaCBiZWZvcmUgdGhlICchJywgdGhlbiB0aGF0CisJCQliYWNrc2xhc2ggaXMgcmVtb3ZlZC4gIEV4YW1wbGU6ICI6IWxzIiBmb2xsb3dlZCBieQorCQkJIjohZWNobyAhIFwhIFxcISIgZXhlY3V0ZXMgImVjaG8gbHMgISBcISIuCisJCQlBZnRlciB0aGUgY29tbWFuZCBoYXMgYmVlbiBleGVjdXRlZCwgdGhlIHRpbWVzdGFtcCBvZgorCQkJdGhlIGN1cnJlbnQgZmlsZSBpcyBjaGVja2VkIHx0aW1lc3RhbXB8LgorCQkJVGhlcmUgY2Fubm90IGJlIGEgJ3wnIGluIHtjbWR9LCBzZWUgfDpiYXJ8LgorCQkJQSBuZXdsaW5lIGNoYXJhY3RlciBlbmRzIHtjbWR9LCB3aGF0IGZvbGxvd3MgaXMKKwkJCWludGVycHJldGVkIGFzIGEgZm9sbG93aW5nICI6IiBjb21tYW5kLiAgSG93ZXZlciwgaWYKKwkJCXRoZXJlIGlzIGEgYmFja3NsYXNoIGJlZm9yZSB0aGUgbmV3bGluZSBpdCBpcyByZW1vdmVkCisJCQlhbmQge2NtZH0gY29udGludWVzLiAgSXQgZG9lc24ndCBtYXR0ZXIgaG93IG1hbnkKKwkJCWJhY2tzbGFzaGVzIGFyZSBiZWZvcmUgdGhlIG5ld2xpbmUsIG9ubHkgb25lIGlzCisJCQlyZW1vdmVkLgorCQkJT24gVW5peCB0aGUgY29tbWFuZCBub3JtYWxseSBydW5zIGluIGEgbm9uLWludGVyYWN0aXZlCisJCQlzaGVsbC4gIElmIHlvdSB3YW50IGFuIGludGVyYWN0aXZlIHNoZWxsIHRvIGJlIHVzZWQKKwkJCSh0byB1c2UgYWxpYXNlcykgc2V0ICdzaGVsbGNtZGZsYWcnIHRvICItaWMiLgorCQkJRm9yIFdpbjMyIGFsc28gc2VlIHw6IXN0YXJ0fC4KKwkJCVZpbSByZWRyYXdzIHRoZSBzY3JlZW4gYWZ0ZXIgdGhlIGNvbW1hbmQgaXMgZmluaXNoZWQsCisJCQliZWNhdXNlIGl0IG1heSBoYXZlIHByaW50ZWQgYW55IHRleHQuICBUaGlzIHJlcXVpcmVzIGEKKwkJCWhpdC1lbnRlciBwcm9tcHQsIHNvIHRoYXQgeW91IGNhbiByZWFkIGFueSBtZXNzYWdlcy4KKwkJCVRvIGF2b2lkIHRoaXMgdXNlOiA+CisJCQkJOnNpbGVudCAhe2NtZH0KKzwJCQlUaGUgc2NyZWVuIGlzIG5vdCByZWRyYXduIHRoZW4sIHRodXMgeW91IGhhdmUgdG8gdXNlCisJCQlDVFJMLUwgb3IgIjpyZWRyYXchIiBpZiB0aGUgY29tbWFuZCBkaWQgZGlzcGxheQorCQkJc29tZXRoaW5nLgorCQkJQWxzbyBzZWUgfHNoZWxsLXdpbmRvd3wuCisKKwkJCQkJCQkqOiEhKgorOiEhCQkJUmVwZWF0IGxhc3QgIjohe2NtZH0iLgorCisJCQkJCQkJKjp2ZSogKjp2ZXJzaW9uKgorOnZlW3JzaW9uXQkJUHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBlZGl0b3IuICBJZiB0aGUKKwkJCWNvbXBpbGVyIHVzZWQgdW5kZXJzdGFuZHMgIl9fREFURV9fIiB0aGUgY29tcGlsYXRpb24KKwkJCWRhdGUgaXMgbWVudGlvbmVkLiAgT3RoZXJ3aXNlIGEgZml4ZWQgcmVsZWFzZS1kYXRlIGlzCisJCQlzaG93bi4KKwkJCVRoZSBmb2xsb3dpbmcgbGluZXMgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB3aGljaAorCQkJZmVhdHVyZXMgd2VyZSBlbmFibGVkIHdoZW4gVmltIHdhcyBjb21waWxlZC4gIFdoZW4KKwkJCXRoZXJlIGlzIGEgcHJlY2VkaW5nICcrJywgdGhlIGZlYXR1cmUgaXMgaW5jbHVkZWQsCisJCQl3aGVuIHRoZXJlIGlzIGEgJy0nIGl0IGlzIGV4Y2x1ZGVkLiAgVG8gY2hhbmdlIHRoaXMsCisJCQl5b3UgaGF2ZSB0byBlZGl0IGZlYXR1cmUuaCBhbmQgcmVjb21waWxlIFZpbS4KKwkJCVRvIGNoZWNrIGZvciB0aGlzIGluIGFuIGV4cHJlc3Npb24sIHNlZSB8aGFzKCl8LgorCQkJSGVyZSBpcyBhbiBvdmVydmlldyBvZiB0aGUgZmVhdHVyZXMuCisJCQlUaGUgZmlyc3QgY29sdW1uIHNob3dzIHRoZSBzbWFsbGVzdCB2ZXJzaW9uIGluIHdoaWNoCisJCQl0aGV5IGFyZSBpbmNsdWRlZDoKKwkJCSAgIFQJdGlueQorCQkJICAgUwlzbWFsbAorCQkJICAgTglub3JtYWwKKwkJCSAgIEIJYmlnCisJCQkgICBICWh1Z2UKKwkJCSAgIG0JbWFudWFsbHkgZW5hYmxlZCBvciBkZXBlbmRzIG9uIG90aGVyIGZlYXR1cmVzCisJCQkgKG5vbmUpIHN5c3RlbSBkZXBlbmRlbnQKKwkJCVRodXMgaWYgYSBmZWF0dXJlIGlzIG1hcmtlZCB3aXRoICJOIiwgaXQgaXMgaW5jbHVkZWQKKwkJCWluIHRoZSBub3JtYWwsIGJpZyBhbmQgaHVnZSB2ZXJzaW9ucyBvZiBWaW0uCisKKwkJCQkJCQkqK2ZlYXR1cmUtbGlzdCoKKyAgICorQVJQKgkJQW1pZ2Egb25seTogQVJQIHN1cHBvcnQgaW5jbHVkZWQKK0IgICorYXJhYmljKgkJfEFyYWJpY3wgbGFuZ3VhZ2Ugc3VwcG9ydAorTiAgKithdXRvY21kKgkJfDphdXRvY21kfCwgYXV0b21hdGljIGNvbW1hbmRzCittICAqK2JhbGxvb25fZXZhbCoJfGJhbGxvb24tZXZhbHwgc3VwcG9ydAorTiAgKiticm93c2UqCQl8OmJyb3dzZXwgY29tbWFuZAorTiAgKitidWlsdGluX3Rlcm1zKglzb21lIHRlcm1pbmFscyBidWlsdGluIHxidWlsdGluLXRlcm1zfAorQiAgKisrYnVpbHRpbl90ZXJtcyoJbWF4aW1hbCB0ZXJtaW5hbHMgYnVpbHRpbiB8YnVpbHRpbi10ZXJtc3wKK04gICorYnl0ZV9vZmZzZXQqCXN1cHBvcnQgZm9yICdvJyBmbGFnIGluICdzdGF0dXNsaW5lJyBvcHRpb24sICJnbyIKKwkJCWFuZCAiOmdvdG8iIGNvbW1hbmRzLgorTiAgKitjaW5kZW50KgkJfCdjaW5kZW50J3wsIEMgaW5kZW50aW5nCitOICAqK2NsaWVudHNlcnZlcioJVW5peCBhbmQgV2luMzI6IFJlbW90ZSBpbnZvY2F0aW9uIHxjbGllbnRzZXJ2ZXJ8CisgICAqK2NsaXBib2FyZCoJCXxjbGlwYm9hcmR8IHN1cHBvcnQKK04gICorY21kbGluZV9jb21wbCoJY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gfGNtZGxpbmUtY29tcGxldGlvbnwKK04gICorY21kbGluZV9oaXN0Kgljb21tYW5kIGxpbmUgaGlzdG9yeSB8Y21kbGluZS1oaXN0b3J5fAorTiAgKitjbWRsaW5lX2luZm8qCXwnc2hvd2NtZCd8IGFuZCB8J3J1bGVyJ3wKK04gICorY29tbWVudHMqCQl8J2NvbW1lbnRzJ3wgc3VwcG9ydAorTiAgKitjcnlwdHYqCQllbmNyeXB0aW9uIHN1cHBvcnQgfGVuY3J5cHRpb258CitCICAqK2NzY29wZSoJCXxjc2NvcGV8IHN1cHBvcnQKK04gICorZGlhbG9nX2d1aSoJU3VwcG9ydCBmb3IgfDpjb25maXJtfCB3aXRoIEdVSSBkaWFsb2cuCitOICAqK2RpYWxvZ19jb24qCVN1cHBvcnQgZm9yIHw6Y29uZmlybXwgd2l0aCBjb25zb2xlIGRpYWxvZy4KK04gICorZGlhbG9nX2Nvbl9ndWkqCVN1cHBvcnQgZm9yIHw6Y29uZmlybXwgd2l0aCBHVUkgYW5kIGNvbnNvbGUgZGlhbG9nLgorTiAgKitkaWZmKgkJfHZpbWRpZmZ8IGFuZCAnZGlmZicKK04gICorZGlncmFwaHMqCQl8ZGlncmFwaHN8ICpFMTk2KgorICAgKitkbmQqCQlTdXBwb3J0IGZvciBEbkQgaW50byB0aGUgIn4gcmVnaXN0ZXIgfHF1b3RlX358LgorQiAgKitlbWFjc190YWdzKgl8ZW1hY3MtdGFnc3wgZmlsZXMKK04gICorZXZhbCoJCWV4cHJlc3Npb24gZXZhbHVhdGlvbiB8ZXZhbC50eHR8CitOICAqK2V4X2V4dHJhKgkJVmltJ3MgZXh0cmEgRXggY29tbWFuZHM6IHw6Y2VudGVyfCwgfDpsZWZ0fCwKKwkJCXw6bm9ybWFsfCwgfDpyZXRhYnwgYW5kIHw6cmlnaHR8CitOICAqK2V4dHJhX3NlYXJjaCoJfCdobHNlYXJjaCd8IGFuZCB8J2luY3NlYXJjaCd8IG9wdGlvbnMuCitCICAqK2ZhcnNpKgkJfGZhcnNpfCBsYW5ndWFnZQorTiAgKitmaWxlX2luX3BhdGgqCXxnZnwsIHxDVFJMLVdfZnwgYW5kIHw8Y2ZpbGU+fAorTiAgKitmaW5kX2luX3BhdGgqCWluY2x1ZGUgZmlsZSBzZWFyY2hlczogfFtJfCwgfDppc2VhcmNofCwKKwkJCXxDVFJMLVdfQ1RSTC1JfCwgfDpjaGVja3BhdGh8LCBldGMuCitOICAqK2ZvbGRpbmcqCQl8Zm9sZGluZ3wKKyAgICorZm9vdGVyKgkJfGd1aS1mb290ZXJ8CisgICAqK2ZvcmsqCQlVbml4IG9ubHk6IHxmb3JrfCBzaGVsbCBjb21tYW5kcworTiAgKitnZXR0ZXh0KgkJbWVzc2FnZSB0cmFuc2xhdGlvbnMgfG11bHRpLWxhbmd8CisgICAqK0dVSV9BdGhlbmEqCVVuaXggb25seTogQXRoZW5hIHxHVUl8CisgICAqK0dVSV9uZVh0YXcqCVVuaXggb25seTogbmVYdGF3IHxHVUl8CisgICAqK0dVSV9CZU9TKgkJQmVPUyBvbmx5OiBCZU9TIHxHVUl8CisgICAqK0dVSV9HVEsqCQlVbml4IG9ubHk6IEdUSysgfEdVSXwKKyAgICorR1VJX01vdGlmKgkJVW5peCBvbmx5OiBNb3RpZiB8R1VJfAorICAgKitHVUlfUGhvdG9uKglRTlggb25seTogIFBob3RvbiB8R1VJfAorbSAgKitoYW5ndWxfaW5wdXQqCUhhbmd1bCBpbnB1dCBzdXBwb3J0IHxoYW5ndWx8CisgICAqK2ljb252KgkJQ29tcGlsZWQgd2l0aCB0aGUgfGljb252KCl8IGZ1bmN0aW9uLCBtYXkgaGF2ZSB8L2R5bnwKK04gICoraW5zZXJ0X2V4cGFuZCoJfGluc2VydF9leHBhbmR8IEluc2VydCBtb2RlIGNvbXBsZXRpb24KK04gICoranVtcGxpc3QqCQl8anVtcGxpc3R8CitCICAqK2tleW1hcCoJCXwna2V5bWFwJ3wKK0IgICorbGFuZ21hcCoJCXwnbGFuZ21hcCd8CitOICAqK2xpYmNhbGwqCQl8bGliY2FsbCgpfAorTiAgKitsaW5lYnJlYWsqCQl8J2xpbmVicmVhayd8LCB8J2JyZWFrYXQnfCBhbmQgfCdzaG93YnJlYWsnfAorTiAgKitsaXNwaW5kZW50Kgl8J2xpc3AnfAorTiAgKitsaXN0Y21kcyoJCVZpbSBjb21tYW5kcyBmb3IgdGhlIGxpc3Qgb2YgYnVmZmVycyB8YnVmZmVyLWhpZGRlbnwKKwkJCWFuZCBhcmd1bWVudCBsaXN0IHw6YXJnZGVsZXRlfAorTiAgKitsb2NhbG1hcCoJCVN1cHBvcnQgZm9yIG1hcHBpbmdzIGxvY2FsIHRvIGEgYnVmZmVyIHw6bWFwLWxvY2FsfAorTiAgKittZW51KgkJfDptZW51fAorTiAgKitta3Nlc3Npb24qCQl8Om1rc2Vzc2lvbnwKK04gICorbW9kaWZ5X2ZuYW1lKgl8ZmlsZW5hbWUtbW9kaWZpZXJzfAorTiAgKittb3VzZSoJCU1vdXNlIGhhbmRsaW5nIHxtb3VzZS11c2luZ3wKK04gICorbW91c2VzaGFwZSoJfCdtb3VzZXNoYXBlJ3wKK0IgICorbW91c2VfZGVjKgkJVW5peCBvbmx5OiBEZWMgdGVybWluYWwgbW91c2UgaGFuZGxpbmcgfGRlYy1tb3VzZXwKK04gICorbW91c2VfZ3BtKgkJVW5peCBvbmx5OiBMaW51eCBjb25zb2xlIG1vdXNlIGhhbmRsaW5nIHxncG0tbW91c2V8CitCICAqK21vdXNlX25ldHRlcm0qCVVuaXggb25seTogbmV0dGVybSBtb3VzZSBoYW5kbGluZyB8bmV0dGVybS1tb3VzZXwKK04gICorbW91c2VfcHRlcm0qCVFOWCBvbmx5OiBwdGVybSBtb3VzZSBoYW5kbGluZyB8cW54LXRlcm1pbmFsfAorTiAgKittb3VzZV94dGVybSoJVW5peCBvbmx5OiB4dGVybSBtb3VzZSBoYW5kbGluZyB8eHRlcm0tbW91c2V8CitCICAqK211bHRpX2J5dGUqCUtvcmVhbiBhbmQgb3RoZXIgbGFuZ3VhZ2VzIHxtdWx0aWJ5dGV8CisgICAqK211bHRpX2J5dGVfaW1lKglXaW4zMiBpbnB1dCBtZXRob2QgZm9yIG11bHRpYnl0ZSBjaGFycyB8bXVsdGlieXRlLWltZXwKK04gICorbXVsdGlfbGFuZyoJbm9uLUVuZ2xpc2ggbGFuZ3VhZ2Ugc3VwcG9ydCB8bXVsdGktbGFuZ3wKK20gICorbmV0YmVhbnNfaW50ZyoJfG5ldGJlYW5zfAorbSAgKitvbGUqCQlXaW4zMiBHVUkgb25seTogfG9sZS1pbnRlcmZhY2V8CisgICAqK29zZmlsZXR5cGUqCVN1cHBvcnQgZm9yIHRoZSAnb3NmaWxldHlwZScgb3B0aW9uIGFuZCBmaWxldHlwZQorCQkJY2hlY2tpbmcgaW4gYXV0b21hdGljIGNvbW1hbmRzLiAgfGF1dG9jbWQtb3NmaWxldHlwZXN8CitOICAqK3BhdGhfZXh0cmEqCVVwL2Rvd253YXJkcyBzZWFyY2ggaW4gJ3BhdGgnIGFuZCAndGFncycKK20gICorcGVybCoJCVBlcmwgaW50ZXJmYWNlIHxwZXJsfCwgbWF5IGhhdmUgfC9keW58CisgICAqK3Bvc3RzY3JpcHQqCXw6aGFyZGNvcHl8IHdyaXRlcyBhIFBvc3RTY3JpcHQgZmlsZQorTiAgKitwcmludGVyKgkJfDpoYXJkY29weXwgY29tbWFuZAorbSAgKitweXRob24qCQlQeXRob24gaW50ZXJmYWNlIHxweXRob258LCBtYXkgaGF2ZSB8L2R5bnwKK04gICorcXVpY2tmaXgqCQl8Om1ha2V8IGFuZCB8cXVpY2tmaXh8IGNvbW1hbmRzCitCICAqK3JpZ2h0bGVmdCoJCVJpZ2h0IHRvIGxlZnQgdHlwaW5nIHwncmlnaHRsZWZ0J3wKK20gICorcnVieSoJCVJ1YnkgaW50ZXJmYWNlIHxydWJ5fCwgbWF5IGhhdmUgfC9keW58CitOICAqK3Njcm9sbGJpbmQqCXwnc2Nyb2xsYmluZCd8CitCICAqK3NpZ25zKgkJfDpzaWdufAorTiAgKitzbWFydGluZGVudCoJfCdzbWFydGluZGVudCd8CittICAqK3NuaWZmKgkJU25pRkYgaW50ZXJmYWNlIHxzbmlmZnwKK04gICorc3RhdHVzbGluZSoJT3B0aW9ucyAnc3RhdHVzbGluZScsICdydWxlcmZvcm1hdCcgYW5kIHNwZWNpYWwKKwkJCWZvcm1hdHMgb2YgJ3RpdGxlc3RyaW5nJyBhbmQgJ2ljb25zdHJpbmcnCittICAqK3N1bl93b3Jrc2hvcCoJfHdvcmtzaG9wfAorTiAgKitzeW50YXgqCQlTeW50YXggaGlnaGxpZ2h0aW5nIHxzeW50YXh8CisgICAqK3N5c3RlbSgpKgkJVW5peCBvbmx5OiBvcHBvc2l0ZSBvZiB8K2Zvcmt8CitOICAqK3RhZ19iaW5hcnkqCWJpbmFyeSBzZWFyY2hpbmcgaW4gdGFncyBmaWxlIHx0YWctYmluYXJ5LXNlYXJjaHwKK04gICordGFnX29sZF9zdGF0aWMqCW9sZCBtZXRob2QgZm9yIHN0YXRpYyB0YWdzIHx0YWctb2xkLXN0YXRpY3wKK20gICordGFnX2FueV93aGl0ZSoJYW55IHdoaXRlIHNwYWNlIGFsbG93ZWQgaW4gdGFncyBmaWxlIHx0YWctYW55LXdoaXRlfAorbSAgKit0Y2wqCQlUY2wgaW50ZXJmYWNlIHx0Y2x8LCBtYXkgaGF2ZSB8L2R5bnwKKyAgICordGVybWluZm8qCQl1c2VzIHx0ZXJtaW5mb3wgaW5zdGVhZCBvZiB0ZXJtY2FwCitOICAqK3Rlcm1yZXNwb25zZSoJc3VwcG9ydCBmb3IgfHRfUlZ8IGFuZCB8djp0ZXJtcmVzcG9uc2V8CitOICAqK3RleHRvYmplY3RzKgl8dGV4dC1vYmplY3RzfCBzZWxlY3Rpb24KKyAgICordGdldGVudCoJCW5vbi1Vbml4IG9ubHk6IGFibGUgdG8gdXNlIGV4dGVybmFsIHRlcm1jYXAKK04gICordGl0bGUqCQlTZXR0aW5nIHRoZSB3aW5kb3cgdGl0bGUgfCd0aXRsZSd8CitOICAqK3Rvb2xiYXIqCQl8Z3VpLXRvb2xiYXJ8CitOICAqK3VzZXJfY29tbWFuZHMqCVVzZXItZGVmaW5lZCBjb21tYW5kcy4gfHVzZXItY29tbWFuZHN8CitOICAqK3ZpbWluZm8qCQl8J3ZpbWluZm8nfAorTiAgKit2ZXJ0c3BsaXQqCQlWZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MgfDp2c3BsaXR8CitOICAqK3ZpcnR1YWxlZGl0Kgl8J3ZpcnR1YWxlZGl0J3wKK1MgICordmlzdWFsKgkJVmlzdWFsIG1vZGUgfFZpc3VhbC1tb2RlfAorTiAgKit2aXN1YWxleHRyYSoJZXh0cmEgVmlzdWFsIG1vZGUgY29tbWFuZHMgfGJsb2Nrd2lzZS1vcGVyYXRvcnN8CitOICAqK3ZyZXBsYWNlKgkJfGdSfCBhbmQgfGdyfAorTiAgKit3aWxkaWdub3JlKgl8J3dpbGRpZ25vcmUnfAorTiAgKit3aWxkbWVudSoJCXwnd2lsZG1lbnUnfAorUyAgKit3aW5kb3dzKgkJbW9yZSB0aGFuIG9uZSB3aW5kb3cKK20gICord3JpdGViYWNrdXAqCXwnd3JpdGViYWNrdXAnfCBpcyBkZWZhdWx0IG9uCittICAqK3hpbSoJCVggaW5wdXQgbWV0aG9kIHx4aW18CisgICAqK3hmb250c2V0KgkJWCBmb250c2V0IHN1cHBvcnQgfHhmb250c2V0fAorICAgKit4c21wKgkJWFNNUCAoWCBzZXNzaW9uIG1hbmFnZW1lbnQpIHN1cHBvcnQKKyAgICoreHNtcF9pbnRlcmFjdCoJaW50ZXJhY3RpdmUgWFNNUCAoWCBzZXNzaW9uIG1hbmFnZW1lbnQpIHN1cHBvcnQKK04gICoreHRlcm1fY2xpcGJvYXJkKglVbml4IG9ubHk6IHh0ZXJtIGNsaXBib2FyZCBoYW5kbGluZworbSAgKit4dGVybV9zYXZlKglzYXZlIGFuZCByZXN0b3JlIHh0ZXJtIHNjcmVlbiB8eHRlcm0tc2NyZWVuc3wKK04gICorWDExKgkJVW5peCBvbmx5OiBjYW4gcmVzdG9yZSB3aW5kb3cgdGl0bGUgfFgxMXwKKworCQkJCQkJCSovZHluKiAqRTM3MCogKkU0NDgqCisJCQlUbyBzb21lIG9mIHRoZSBmZWF0dXJlcyAiL2R5biIgaXMgYWRkZWQgd2hlbiB0aGUKKwkJCWZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgcmVsYXRlZCBsaWJyYXJ5IGNhbgorCQkJYmUgZHluYW1pY2FsbHkgbG9hZGVkLgorCis6dmVbcnNpb25dIHtucn0JCUlzIG5vdyBpZ25vcmVkLiAgVGhpcyB3YXMgcHJldmlvdXNseSB1c2VkIHRvIGNoZWNrIHRoZQorCQkJdmVyc2lvbiBudW1iZXIgb2YgYSAudmltcmMgZmlsZS4gIEl0IHdhcyByZW1vdmVkLAorCQkJYmVjYXVzZSB5b3UgY2FuIG5vdyB1c2UgdGhlICI6aWYiIGNvbW1hbmQgZm9yCisJCQl2ZXJzaW9uLWRlcGVuZGVudCBiZWhhdmlvci4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnJlZGkqICo6cmVkaXIqCis6cmVkaVtyXVshXSA+IHtmaWxlfQlSZWRpcmVjdCBtZXNzYWdlcyB0byBmaWxlIHtmaWxlfS4gIFRoZSBtZXNzYWdlcyB3aGljaAorCQkJYXJlIHRoZSBvdXRwdXQgb2YgY29tbWFuZHMgYXJlIHdyaXR0ZW4gdG8gdGhhdCBmaWxlLAorCQkJdW50aWwgcmVkaXJlY3Rpb24gZW5kcy4gIFRoZSBtZXNzYWdlcyBhcmUgYWxzbyBzdGlsbAorCQkJc2hvd24gb24gdGhlIHNjcmVlbi4gIFdoZW4gWyFdIGlzIGluY2x1ZGVkLCBhbgorCQkJZXhpc3RpbmcgZmlsZSBpcyBvdmVyd3JpdHRlbi4gIFdoZW4gWyFdIGlzIG9taXR0ZWQsCisJCQlhbmQge2ZpbGV9IGV4aXN0cywgdGhpcyBjb21tYW5kIGZhaWxzLgorCQkJT25seSBvbmUgIjpyZWRpciIgY2FuIGJlIGFjdGl2ZSBhdCBhIHRpbWUuICBDYWxscyB0bworCQkJIjpyZWRpciIgd2lsbCBjbG9zZSBhbnkgYWN0aXZlIHJlZGlyZWN0aW9uIGJlZm9yZQorCQkJc3RhcnRpbmcgcmVkaXJlY3Rpb24gdG8gdGhlIG5ldyB0YXJnZXQuCisJCQlUbyBzdG9wIHRoZSBtZXNzYWdlcyBhbmQgY29tbWFuZHMgZnJvbSBiZWluZyBlY2hvZWQgdG8KKwkJCXRoZSBzY3JlZW4sIHB1dCB0aGUgY29tbWFuZHMgaW4gYSBmdW5jdGlvbiBhbmQgY2FsbCBpdAorCQkJd2l0aCAiOnNpbGVudCBjYWxsIEZ1bmN0aW9uKCkiLgorCQkJe25vdCBpbiBWaX0KKworOnJlZGlbcl0gPj4ge2ZpbGV9CVJlZGlyZWN0IG1lc3NhZ2VzIHRvIGZpbGUge2ZpbGV9LiAgQXBwZW5kIGlmIHtmaWxlfQorCQkJYWxyZWFkeSBleGlzdHMuICB7bm90IGluIFZpfQorCis6cmVkaVtyXSBAe2EtekEtWn0JUmVkaXJlY3QgbWVzc2FnZXMgdG8gcmVnaXN0ZXIge2Eten0uICBBcHBlbmQgdG8gdGhlCisJCQljb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIgaWYgaXRzIG5hbWUgaXMgZ2l2ZW4KKwkJCXVwcGVyY2FzZSB7QS1afS4gIHtub3QgaW4gVml9CisKKzpyZWRpW3JdIEAqCQlSZWRpcmVjdCBtZXNzYWdlcyB0byB0aGUgY2xpcGJvYXJkLiB7bm90IGluIFZpfQorCis6cmVkaVtyXSBAIgkJUmVkaXJlY3QgbWVzc2FnZXMgdG8gdGhlIHVubmFtZWQgcmVnaXN0ZXIuIHtub3QgaW4gVml9CisKKzpyZWRpW3JdIEVORAkJRW5kIHJlZGlyZWN0aW5nIG1lc3NhZ2VzLiAge25vdCBpbiBWaX0KKworCQkJCQkJKjpzaWwqICo6c2lsZW50KgorOnNpbFtlbnRdWyFdIHtjb21tYW5kfQlFeGVjdXRlIHtjb21tYW5kfSBzaWxlbnRseS4gIE5vcm1hbCBtZXNzYWdlcyB3aWxsIG5vdAorCQkJYmUgZ2l2ZW4gb3IgYWRkZWQgdG8gdGhlIG1lc3NhZ2UgaGlzdG9yeS4KKwkJCVdoZW4gWyFdIGlzIGFkZGVkLCBlcnJvciBtZXNzYWdlcyB3aWxsIGFsc28gYmUKKwkJCXNraXBwZWQsIGFuZCBjb21tYW5kcyBhbmQgbWFwcGluZ3Mgd2lsbCBub3QgYmUgYWJvcnRlZAorCQkJd2hlbiBhbiBlcnJvciBpcyBkZXRlY3RlZC4gIHx2OmVycm1zZ3wgaXMgc3RpbGwgc2V0LgorCQkJV2hlbiBbIV0gaXMgbm90IHVzZWQsIGFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBjYXVzZQorCQkJZnVydGhlciBtZXNzYWdlcyB0byBiZSBkaXNwbGF5ZWQgbm9ybWFsbHkuCisJCQlSZWRpcmVjdGlvbiwgc3RhcnRlZCB3aXRoIHw6cmVkaXJ8LCB3aWxsIGNvbnRpbnVlIGFzCisJCQl1c3VhbCwgYWx0aG91Z2ggdGhlcmUgbWlnaHQgYmUgc21hbGwgZGlmZmVyZW5jZXMuCisJCQlUaGlzIHdpbGwgYWxsb3cgcmVkaXJlY3RpbmcgdGhlIG91dHB1dCBvZiBhIGNvbW1hbmQKKwkJCXdpdGhvdXQgc2VlaW5nIGl0IG9uIHRoZSBzY3JlZW4uICBFeGFtcGxlOiA+CisJCQkgICAgOnJlZGlyID4vdG1wL2Zvb2JhcgorCQkJICAgIDpzaWxlbnQgZy9BYXAvcAorCQkJICAgIDpyZWRpciBFTkQKKzwJCQlUbyBleGVjdXRlIGEgTm9ybWFsIG1vZGUgY29tbWFuZCBzaWxlbnRseSwgdXNlIHRoZQorCQkJfDpub3JtYWx8IGNvbW1hbmQuICBGb3IgZXhhbXBsZSwgdG8gc2VhcmNoIGZvciBhCisJCQlzdHJpbmcgd2l0aG91dCBtZXNzYWdlczogPgorCQkJICAgIDpzaWxlbnQgZXhlICJub3JtYWwgL3BhdGhcPENSPiIKKzwJCQkiOnNpbGVudCEiIGlzIHVzZWZ1bCB0byBleGVjdXRlIGEgY29tbWFuZCB0aGF0IG1heQorCQkJZmFpbCwgYnV0IHRoZSBmYWlsdXJlIGlzIHRvIGJlIGlnbm9yZWQuICBFeGFtcGxlOiA+CisJCQkgICAgOmxldCB2OmVycm1zZyA9ICIiCisJCQkgICAgOnNpbGVudCEgL15iZWdpbgorCQkJICAgIDppZiB2OmVycm1zZyAhPSAiIgorCQkJICAgIDogLi4uIHBhdHRlcm4gd2FzIG5vdCBmb3VuZAorPAkJCSI6c2lsZW50IiB3aWxsIGFsc28gYXZvaWQgdGhlIGhpdC1lbnRlciBwcm9tcHQuICBXaGVuCisJCQl1c2luZyB0aGlzIGZvciBhbiBleHRlcm5hbCBjb21tYW5kLCB0aGlzIG1heSBjYXVzZSB0aGUKKwkJCXNjcmVlbiB0byBiZSBtZXNzZWQgdXAuICBVc2UgfENUUkwtTHwgdG8gY2xlYW4gaXQgdXAKKwkJCXRoZW4uCisJCQkiOnNpbGVudCBtZW51IC4uLiIgZGVmaW5lcyBhIG1lbnUgdGhhdCB3aWxsIG5vdCBlY2hvIGEKKwkJCUNvbW1hbmQtbGluZSBjb21tYW5kLiAgVGhlIGNvbW1hbmQgd2lsbCBzdGlsbCBwcm9kdWNlCisJCQltZXNzYWdlcyB0aG91Z2guICBVc2UgIjpzaWxlbnQiIGluIHRoZSBjb21tYW5kIGl0c2VsZgorCQkJdG8gYXZvaWQgdGhhdDogIjpzaWxlbnQgbWVudSAuLi4uIDpzaWxlbnQgY29tbWFuZCIuCisKKwkJCQkJCSo6dmVyYiogKjp2ZXJib3NlKgorOltjb3VudF12ZXJiW29zZV0ge2NvbW1hbmR9CisJCQlFeGVjdXRlIHtjb21tYW5kfSB3aXRoICd2ZXJib3NlJyBzZXQgdG8gW2NvdW50XS4gIElmCisJCQlbY291bnRdIGlzIG9taXR0ZWQgb25lIGlzIHVzZWQuCisJCQlUaGUgYWRkaXRpb25hbCB1c2Ugb2YgIjpzaWxlbnQiIG1ha2VzIG1lc3NhZ2VzCisJCQlnZW5lcmF0ZWQgYnV0IG5vdCBkaXNwbGF5ZWQuCisJCQlUaGUgY29tYmluYXRpb24gb2YgIjpzaWxlbnQiIGFuZCAiOnZlcmJvc2UiIGNhbiBiZQorCQkJdXNlZCB0byBnZW5lcmF0ZSBtZXNzYWdlcyBhbmQgY2hlY2sgdGhlbSB3aXRoCisJCQl8djpzdGF0dXNtc2d8IGFuZCBmcmllbmRzLiAgRm9yIGV4YW1wbGU6ID4KKwkJCQk6bGV0IHY6c3RhdHVzbXNnID0gIiIKKwkJCQk6c2lsZW50IHZlcmJvc2UgcnVudGltZSBmb29iYXIudmltCisJCQkJOmlmIHY6c3RhdHVzbXNnICE9ICIiCisJCQkJOiAgIiBmb29iYXIudmltIGNvdWxkIG5vdCBiZSBmb3VuZAorCQkJCTplbmRpZgorPAkJCVdoZW4gY29uY2F0ZW5hdGluZyBhbm90aGVyIGNvbW1hbmQsIHRoZSAiOnZlcmJvc2UiCisJCQlvbmx5IGFwcGxpZXMgdG8gdGhlIGZpcnN0IG9uZTogPgorCQkJCTo0dmVyYm9zZSBzZXQgdmVyYm9zZSB8IHNldCB2ZXJib3NlCis8CQkJCSAgdmVyYm9zZT00IH4KKwkJCQkgIHZlcmJvc2U9MCB+CisKKwkJCQkJCQkqSyoKK0sJCQlSdW4gYSBwcm9ncmFtIHRvIGxvb2t1cCB0aGUga2V5d29yZCB1bmRlciB0aGUKKwkJCWN1cnNvci4gIFRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIGlzIGdpdmVuIHdpdGggdGhlCisJCQkna2V5d29yZHByZycgKGtwKSBvcHRpb24gKGRlZmF1bHQgaXMgIm1hbiIpLiAgVGhlCisJCQlrZXl3b3JkIGlzIGZvcm1lZCBvZiBsZXR0ZXJzLCBudW1iZXJzIGFuZCB0aGUKKwkJCWNoYXJhY3RlcnMgaW4gJ2lza2V5d29yZCcuICBUaGUga2V5d29yZCB1bmRlciBvcgorCQkJcmlnaHQgb2YgdGhlIGN1cnNvciBpcyB1c2VkLiAgVGhlIHNhbWUgY2FuIGJlIGRvbmUKKwkJCXdpdGggdGhlIGNvbW1hbmQgPgorCQkJCTohe3Byb2dyYW19IHtrZXl3b3JkfQorPAkJCVRoZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBwcm9ncmFtIHRvIHVzZSBpbiB0aGUgdG9vbHMKKwkJCWRpcmVjdG9yeSBvZiBWaW0uICBJdCBpcyBjYWxsZWQgJ3JlZicgYW5kIGRvZXMgYQorCQkJc2ltcGxlIHNwZWxsaW5nIGNoZWNrLgorCQkJU3BlY2lhbCBjYXNlczoKKwkJCS0gSWYgJ2tleXdvcmRwcmcnIGlzIGVtcHR5LCB0aGUgIjpoZWxwIiBjb21tYW5kIGlzCisJCQkgIHVzZWQuICBJdCdzIGEgZ29vZCBpZGVhIHRvIGluY2x1ZGUgbW9yZSBjaGFyYWN0ZXJzCisJCQkgIGluICdpc2tleXdvcmQnIHRoZW4sIHRvIGJlIGFibGUgdG8gZmluZCBtb3JlIGhlbHAuCisJCQktIFdoZW4gJ2tleXdvcmRwcmcnIGlzIGVxdWFsIHRvICJtYW4iLCBhIGNvdW50IGJlZm9yZQorCQkJICAiSyIgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlICJtYW4iIGNvbW1hbmQgYW5kIGJlZm9yZQorCQkJICB0aGUga2V5d29yZC4gIEZvciBleGFtcGxlLCB1c2luZyAiMksiIHdoaWxlIHRoZQorCQkJICBjdXJzb3IgaXMgb24gIm1rZGlyIiwgcmVzdWx0cyBpbjogPgorCQkJCSFtYW4gMiBta2RpcgorPAkJCS0gV2hlbiAna2V5d29yZHByZycgaXMgZXF1YWwgdG8gIm1hbiAtcyIsIGEgY291bnQKKwkJCSAgYmVmb3JlICJLIiBpcyBpbnNlcnRlZCBhZnRlciB0aGUgIi1zIi4gIElmIHRoZXJlIGlzCisJCQkgIG5vIGNvdW50LCB0aGUgIi1zIiBpcyByZW1vdmVkLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSp2X0sqCit7VmlzdWFsfUsJCUxpa2UgIksiLCBidXQgdXNlIHRoZSB2aXN1YWxseSBoaWdobGlnaHRlZCB0ZXh0IGZvcgorCQkJdGhlIGtleXdvcmQuICBPbmx5IHdvcmtzIHdoZW4gdGhlIGhpZ2hsaWdodGVkIHRleHQgaXMKKwkJCW5vdCBtb3JlIHRoYW4gb25lIGxpbmUuICB7bm90IGluIFZpfQorCitbTl1ncwkJCQkJCQkqZ3MqICo6c2wqICo6c2xlZXAqCis6W05dc2xbZWVwXSBbTl0JW21dCURvIG5vdGhpbmcgZm9yIFtOXSBzZWNvbmRzLiAgV2hlbiBbbV0gaXMgaW5jbHVkZWQsCisJCQlzbGVlcCBmb3IgW05dIG1pbGxpc2Vjb25kcy4gVGhlIGNvdW50IGZvciAiZ3MiIGFsd2F5cworCQkJdXNlcyBzZWNvbmRzLiAgVGhlIGRlZmF1bHQgaXMgb25lIHNlY29uZC4gPgorCQkJICAgICA6c2xlZXAJICAgICAic2xlZXAgZm9yIG9uZSBzZWNvbmQKKwkJCSAgICAgOjVzbGVlcAkgICAgICJzbGVlcCBmb3IgZml2ZSBzZWNvbmRzCisJCQkgICAgIDpzbGVlcCAxMDBtICAgICAic2xlZXAgZm9yIGEgaHVuZHJlZCBtaWxsaXNlY29uZHMKKwkJCSAgICAgMTBncwkgICAgICJzbGVlcCBmb3IgdGVuIHNlY29uZHMKKzwJCQlDYW4gYmUgaW50ZXJydXB0ZWQgd2l0aCBDVFJMLUMgKENUUkwtQnJlYWsgb24gTVMtRE9TKS4KKwkJCSJncyIgc3RhbmRzIGZvciAiZ290byBzbGVlcCIuICBXaGlsZSBzbGVlcGluZyB0aGUKKwkJCWN1cnNvciBpcyBwb3NpdGlvbmVkIGluIHRoZSB0ZXh0IChpZiB2aXNpYmxlKS4gIHtub3QKKwkJCWluIFZpfQorCisJCQkJCQkJKmdfQ1RSTC1BKgorZyBDVFJMLUEJCU9ubHkgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggTUVNX1BST0ZJTElORyBkZWZpbmVkCisJCQkod2hpY2ggaXMgdmVyeSByYXJlKTogcHJpbnQgbWVtb3J5IHVzYWdlIHN0YXRpc3RpY3MuCisJCQlPbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIFZpbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBPbmxpbmUgaGVscAkJCQkJCSpvbmxpbmUtaGVscCoKKworCQkJKmhlbHAqICo8SGVscD4qICo6aCogKjpoZWxwKiAqPEYxPiogKmlfPEYxPiogKmlfPEhlbHA+KgorPEhlbHA+CQlvcgorOmhbZWxwXQkJCU9wZW4gYSB3aW5kb3cgYW5kIGRpc3BsYXkgdGhlIGhlbHAgZmlsZSBpbiByZWFkLW9ubHkKKwkJCW1vZGUuICBJZiB0aGVyZSBpcyBhIGhlbHAgd2luZG93IG9wZW4gYWxyZWFkeSwgdXNlCisJCQl0aGF0IG9uZS4gIE90aGVyd2lzZSwgaWYgdGhlIGN1cnJlbnQgd2luZG93IHVzZXMgdGhlCisJCQlmdWxsIHdpZHRoIG9mIHRoZSBzY3JlZW4gb3IgaXMgYXQgbGVhc3QgODAgY2hhcmFjdGVycworCQkJd2lkZSwgdGhlIGhlbHAgd2luZG93IHdpbGwgYXBwZWFyIGp1c3QgYWJvdmUgdGhlCisJCQljdXJyZW50IHdpbmRvdy4gIE90aGVyd2lzZSB0aGUgbmV3IHdpbmRvdyBpcyBwdXQgYXQKKwkJCXRoZSB2ZXJ5IHRvcC4KKwkJCVRoZSAnaGVscGxhbmcnIG9wdGlvbiBpcyB1c2VkIHRvIHNlbGVjdCBhIGxhbmd1YWdlLCBpZgorCQkJdGhlIG1haW4gaGVscCBmaWxlIGlzIGF2YWlsYWJsZSBpbiBzZXZlcmFsIGxhbmd1YWdlcy4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCSp7c3ViamVjdH0qICpFMTQ5KiAqRTY2MSoKKzpoW2VscF0ge3N1YmplY3R9CUxpa2UgIjpoZWxwIiwgYWRkaXRpb25hbGx5IGp1bXAgdG8gdGhlIHRhZyB7c3ViamVjdH0uCisJCQl7c3ViamVjdH0gY2FuIGluY2x1ZGUgd2lsZGNhcmRzIGxpa2UgIioiLCAiPyIgYW5kCisJCQkiW2Etel0iOgorCQkJICAgOmhlbHAgej8JanVtcCB0byBoZWxwIGZvciBhbnkgInoiIGNvbW1hbmQKKwkJCSAgIDpoZWxwIHouCWp1bXAgdG8gdGhlIGhlbHAgZm9yICJ6LiIKKwkJCUlmIHRoZXJlIGlzIG5vIGZ1bGwgbWF0Y2ggZm9yIHRoZSBwYXR0ZXJuLCBvciB0aGVyZQorCQkJYXJlIHNldmVyYWwgbWF0Y2hlcywgdGhlICJiZXN0IiBtYXRjaCB3aWxsIGJlIHVzZWQuCisJCQlBIHNvcGhpc3RpY2F0ZWQgYWxnb3JpdGhtIGlzIHVzZWQgdG8gZGVjaWRlIHdoaWNoCisJCQltYXRjaCBpcyBiZXR0ZXIgdGhhbiBhbm90aGVyIG9uZS4gIFRoZXNlIGl0ZW1zIGFyZQorCQkJY29uc2lkZXJlZCBpbiB0aGUgY29tcHV0YXRpb246CisJCQktIEEgbWF0Y2ggd2l0aCBzYW1lIGNhc2UgaXMgbXVjaCBiZXR0ZXIgdGhhbiBhIG1hdGNoCisJCQkgIHdpdGggZGlmZmVyZW50IGNhc2UuCisJCQktIEEgbWF0Y2ggdGhhdCBzdGFydHMgYWZ0ZXIgYSBub24tYWxwaGFudW1lcmljCisJCQkgIGNoYXJhY3RlciBpcyBiZXR0ZXIgdGhhbiBhIG1hdGNoIGluIHRoZSBtaWRkbGUgb2YgYQorCQkJICB3b3JkLgorCQkJLSBBIG1hdGNoIGF0IG9yIG5lYXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGFnIGlzCisJCQkgIGJldHRlciB0aGFuIGEgbWF0Y2ggZnVydGhlciBvbi4KKwkJCS0gVGhlIG1vcmUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgbWF0Y2gsIHRoZSBiZXR0ZXIuCisJCQktIFRoZSBzaG9ydGVyIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoLCB0aGUgYmV0dGVyLgorCisJCQlUaGUgJ2hlbHBsYW5nJyBvcHRpb24gaXMgdXNlZCB0byBzZWxlY3QgYSBsYW5ndWFnZSwgaWYKKwkJCXRoZSB7c3ViamVjdH0gaXMgYXZhaWxhYmxlIGluIHNldmVyYWwgbGFuZ3VhZ2VzLgorCQkJVG8gZmluZCBhIHRhZyBpbiBhIHNwZWNpZmljIGxhbmd1YWdlLCBhcHBlbmQgIkBhYiIsCisJCQl3aGVyZSAiYWIiIGlzIHRoZSB0d28tbGV0dGVyIGxhbmd1YWdlIGNvZGUuICBTZWUKKwkJCXxoZWxwLXRyYW5zbGF0ZWR8LgorCisJCQlOb3RlIHRoYXQgdGhlIGxvbmdlciB0aGUge3N1YmplY3R9IHlvdSBnaXZlLCB0aGUgbGVzcworCQkJbWF0Y2hlcyB3aWxsIGJlIGZvdW5kLiAgWW91IGNhbiBnZXQgYW4gaWRlYSBob3cgdGhpcworCQkJYWxsIHdvcmtzIGJ5IHVzaW5nIGNvbW1hbmRsaW5lIGNvbXBsZXRpb24gKHR5cGUgQ1RSTC1ECisJCQlhZnRlciAiOmhlbHAgc3ViamVjdCIpLgorCQkJSWYgdGhlcmUgYXJlIHNldmVyYWwgbWF0Y2hlcywgeW91IGNhbiBoYXZlIHRoZW0gbGlzdGVkCisJCQlieSBoaXR0aW5nIENUUkwtRC4gIEV4YW1wbGU6ID4KKwkJCQk6aGVscCBjb250PEN0cmwtRD4KKzwJCQlUbyB1c2UgYSByZWdleHAgfHBhdHRlcm58LCBmaXJzdCBkbyAiOmhlbHAiIGFuZCB0aGVuCisJCQl1c2UgIjp0YWcge3BhdHRlcm59IiBpbiB0aGUgaGVscCB3aW5kb3cuICBUaGUKKwkJCSI6dG5leHQiIGNvbW1hbmQgY2FuIHRoZW4gYmUgdXNlZCB0byBqdW1wIHRvIG90aGVyCisJCQltYXRjaGVzLCAidHNlbGVjdCIgdG8gbGlzdCBtYXRjaGVzIGFuZCBjaG9vc2Ugb25lLiA+CisJCQkJOmhlbHAgaW5kZXh8IDp0c2Ugei4KKzwJCQlUaGlzIGNvbW1hbmQgY2FuIGJlIGZvbGxvd2VkIGJ5ICd8JyBhbmQgYW5vdGhlcgorCQkJY29tbWFuZCwgYnV0IHlvdSBkb24ndCBuZWVkIHRvIGVzY2FwZSB0aGUgJ3wnIGluc2lkZSBhCisJCQloZWxwIGNvbW1hbmQuICBTbyB0aGVzZSBib3RoIHdvcms6ID4KKwkJCQk6aGVscCB8CisJCQkJOmhlbHAga3wgb25seQorPAkJCU5vdGUgdGhhdCBhIHNwYWNlIGJlZm9yZSB0aGUgJ3wnIGlzIHNlZW4gYXMgcGFydCBvZgorCQkJdGhlICI6aGVscCIgYXJndW1lbnQuCisJCQlZb3UgY2FuIGFsc28gdXNlIDxMRj4gb3IgPENSPiB0byBzZXBhcmF0ZSB0aGUgaGVscAorCQkJY29tbWFuZCBmcm9tIGEgZm9sbG93aW5nIGNvbW1hbmQuICBZb3UgbmVlZCB0byB0eXBlCisJCQlDVFJMLVYgZmlyc3QgdG8gaW5zZXJ0IHRoZSA8TEY+IG9yIDxDUj4uICBFeGFtcGxlOiA+CisJCQkJOmhlbHAgc288Qy1WPjxDUj5vbmx5Cis8CQkJe25vdCBpbiBWaX0KKworOmhbZWxwXSEgW3N1YmplY3RdCUxpa2UgIjpoZWxwIiwgYnV0IGluIG5vbi1FbmdsaXNoIGhlbHAgZmlsZXMgcHJlZmVyIHRvCisJCQlmaW5kIGEgdGFnIGluIGEgZmlsZSB3aXRoIHRoZSBzYW1lIGxhbmd1YWdlIGFzIHRoZQorCQkJY3VycmVudCBmaWxlLiAgU2VlIHxoZWxwLXRyYW5zbGF0ZWR8LgorCisJCQkJCQkJKjpoZWxwZyogKjpoZWxwZ3JlcCoKKzpoZWxwZ1tyZXBdIHtwYXR0ZXJufQorCQkJU2VhcmNoIGFsbCBoZWxwIHRleHQgZmlsZXMgYW5kIG1ha2UgYSBsaXN0IG9mIGxpbmVzCisJCQlpbiB3aGljaCB7cGF0dGVybn0gbWF0Y2hlcy4gIEp1bXBzIHRvIHRoZSBmaXJzdCBtYXRjaC4KKwkJCVlvdSBjYW4gbmF2aWdhdGUgdGhyb3VnaCB0aGUgbWF0Y2hlcyB3aXRoIHRoZQorCQkJfHF1aWNrZml4fCBjb21tYW5kcywgZS5nLiwgfDpjbmV4dHwgdG8ganVtcCB0byB0aGUKKwkJCW5leHQgb25lLiAgT3IgdXNlIHw6Y3dpbmRvd3wgdG8gZ2V0IHRoZSBsaXN0IG9mCisJCQltYXRjaGVzIGluIHRoZSBxdWlja2ZpeCB3aW5kb3cuCisJCQl7cGF0dGVybn0gaXMgdXNlZCBhcyBhIFZpbSByZWdleHAgfHBhdHRlcm58LgorCQkJJ2lnbm9yZWNhc2UnIGlzIG5vdCB1c2VkLCBhZGQgIlxjIiB0byBpZ25vcmUgY2FzZS4KKwkJCUV4YW1wbGUgZm9yIGNhc2Ugc2Vuc2l0aXZlIHNlYXJjaDogPgorCQkJCTpoZWxwZ3JlcCBVZ2FuZGEKKzwJCQlFeGFtcGxlIGZvciBjYXNlIGlnbm9yaW5nIHNlYXJjaDogPgorCQkJCTpoZWxwZ3JlcCB1Z2FuZGFcYworPAkJCUNhbm5vdCBiZSBmb2xsb3dlZCBieSBhbm90aGVyIGNvbW1hbmQsIGV2ZXJ5dGhpbmcgaXMKKwkJCXVzZWQgYXMgcGFydCBvZiB0aGUgcGF0dGVybi4gIEJ1dCB5b3UgY2FuIHVzZQorCQkJfDpleGVjdXRlfCB3aGVuIG5lZWRlZC4KKwkJCUNvbXByZXNzZWQgaGVscCBmaWxlcyB3aWxsIG5vdCBiZSBzZWFyY2hlZCAoRGViaWFuCisJCQljb21wcmVzc2VzIHRoZSBoZWxwIGZpbGVzKS4KKwkJCXtub3QgaW4gVml9CisKKworV2hlbiBubyBhcmd1bWVudCBpcyBnaXZlbiB0byB8OmhlbHB8IHRoZSBmaWxlIGdpdmVuIHdpdGggdGhlICdoZWxwZmlsZScgb3B0aW9uCit3aWxsIGJlIG9wZW5lZC4gIE90aGVyd2lzZSB0aGUgc3BlY2lmaWVkIHRhZyBpcyBzZWFyY2hlZCBmb3IgaW4gYWxsICJkb2MvdGFncyIKK2ZpbGVzIGluIHRoZSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4gdGhlICdydW50aW1lcGF0aCcgb3B0aW9uLgorCitUaGUgaW5pdGlhbCBoZWlnaHQgb2YgdGhlIGhlbHAgd2luZG93IGNhbiBiZSBzZXQgd2l0aCB0aGUgJ2hlbHBoZWlnaHQnIG9wdGlvbgorKGRlZmF1bHQgMjApLgorCitKdW1wIHRvIHNwZWNpZmljIHN1YmplY3RzIGJ5IHVzaW5nIHRhZ3MuICBUaGlzIGNhbiBiZSBkb25lIGluIHR3byB3YXlzOgorLSBVc2UgdGhlICJDVFJMLV0iIGNvbW1hbmQgd2hpbGUgc3RhbmRpbmcgb24gdGhlIG5hbWUgb2YgYSBjb21tYW5kIG9yIG9wdGlvbi4KKyAgVGhpcyBvbmx5IHdvcmtzIHdoZW4gdGhlIHRhZyBpcyBhIGtleXdvcmQuICAiPEMtTGVmdG1vdXNlPiIgYW5kCisgICJnPExlZnRNb3VzZT4iIHdvcmsganVzdCBsaWtlICJDVFJMLV0iLgorLSB1c2UgdGhlICI6dGEge3N1YmplY3R9IiBjb21tYW5kLiAgVGhpcyBhbHNvIHdvcmtzIHdpdGggbm9uLWtleXdvcmQKKyAgY2hhcmFjdGVycy4KKworVXNlIENUUkwtVCBvciBDVFJMLU8gdG8ganVtcCBiYWNrLgorVXNlICI6cSIgdG8gY2xvc2UgdGhlIGhlbHAgd2luZG93LgorCitJZiB0aGVyZSBhcmUgc2V2ZXJhbCBtYXRjaGVzIGZvciBhbiBpdGVtIHlvdSBhcmUgbG9va2luZyBmb3IsIHRoaXMgaXMgaG93IHlvdQorY2FuIGp1bXAgdG8gZWFjaCBvbmUgb2YgdGhlbToKKzEuIE9wZW4gYSBoZWxwIHdpbmRvdworMi4gVXNlIHRoZSAiOnRhZyIgY29tbWFuZCB3aXRoIGEgc2xhc2ggcHJlcGVuZGVkIHRvIHRoZSB0YWcuICBFLmcuOiA+CisJOnRhZyAvbWluCiszLiBVc2UgIjp0bmV4dCIgdG8ganVtcCB0byB0aGUgbmV4dCBtYXRjaGluZyB0YWcuCisKK0l0IGlzIHBvc3NpYmxlIHRvIGFkZCBoZWxwIGZpbGVzIGZvciBwbHVnaW5zIGFuZCBvdGhlciBpdGVtcy4gIFlvdSBkb24ndCBuZWVkCit0byBjaGFuZ2UgdGhlIGRpc3RyaWJ1dGVkIGhlbHAgZmlsZXMgZm9yIHRoYXQuICBTZWUgfGFkZC1sb2NhbC1oZWxwfC4KKworVG8gd3JpdGUgYSBsb2NhbCBoZWxwIGZpbGUsIHNlZSB8d3JpdGUtbG9jYWwtaGVscHwuCisKK05vdGUgdGhhdCB0aGUgdGl0bGUgbGluZXMgZnJvbSB0aGUgbG9jYWwgaGVscCBmaWxlcyBhcmUgYXV0b21hZ2ljYWxseSBhZGRlZCB0bwordGhlICJMT0NBTCBBRERJVElPTlMiIHNlY3Rpb24gaW4gdGhlICJoZWxwLnR4dCIgaGVscCBmaWxlIHxsb2NhbC1hZGRpdGlvbnN8LgorVGhpcyBpcyBkb25lIHdoZW4gdmlld2luZyB0aGUgZmlsZSBpbiBWaW0sIHRoZSBmaWxlIGl0c2VsZiBpcyBub3QgY2hhbmdlZC4gIEl0CitpcyBkb25lIGJ5IGdvaW5nIHRocm91Z2ggYWxsIGhlbHAgZmlsZXMgYW5kIG9idGFpbmluZyB0aGUgZmlyc3QgbGluZSBvZiBlYWNoCitmaWxlLiAgVGhlIGZpbGVzIGluICRWSU1SVU5USU1FL2RvYyBhcmUgc2tpcHBlZC4KKworCQkJCQkJCSpoZWxwLXh0ZXJtLXdpbmRvdyoKK0lmIHlvdSB3YW50IHRvIGhhdmUgdGhlIGhlbHAgaW4gYW5vdGhlciB4dGVybSB3aW5kb3csIHlvdSBjb3VsZCB1c2UgdGhpcworY29tbWFuZDogPgorCToheHRlcm0gLWUgdmltICtoZWxwICYKKzwKKworCQkJKjpoZWxwZmluZCogKjpoZWxwZioKKzpoZWxwZltpbmRdCQlMaWtlIHw6aGVscHwsIGJ1dCB1c2UgYSBkaWFsb2cgdG8gZW50ZXIgdGhlIGFyZ3VtZW50LgorCQkJT25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICBJdCBub3cgZXhlY3V0ZXMgdGhlCisJCQlUb29sQmFyLkZpbmRIZWxwIG1lbnUgZW50cnkgaW5zdGVhZCBvZiB1c2luZyBhIGJ1aWx0aW4KKwkJCWRpYWxvZy4gIHtvbmx5IHdoZW4gY29tcGlsZWQgd2l0aCB8K0dVSV9HVEt8fQorPAkJCXtub3QgaW4gVml9CisKKwkJCQkJKjpoZWxwdCogKjpoZWxwdGFncyoKKwkJCQkqRTE1NCogKkUxNTAqICpFMTUxKiAqRTE1MiogKkUxNTMqICpFNjcwKgorOmhlbHB0W2Fnc10ge2Rpcn0JR2VuZXJhdGUgdGhlIGhlbHAgdGFncyBmaWxlKHMpIGZvciBkaXJlY3Rvcnkge2Rpcn0uCisJCQlBbGwgIioudHh0IiBhbmQgIiouPz94IiBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IGFyZQorCQkJc2Nhbm5lZCBmb3IgYSBoZWxwIHRhZyBkZWZpbml0aW9uIGluIGJldHdlZW4gc3RhcnMuCisJCQlUaGUgIiouPz94IiBmaWxlcyBhcmUgZm9yIHRyYW5zbGF0ZWQgZG9jcywgdGhleQorCQkJZ2VuZXJhdGUgdGhlICJ0YWdzLT8/IiBmaWxlLCBzZWUgfGhlbHAtdHJhbnNsYXRlZHwuCisJCQlUaGUgZ2VuZXJhdGVkIHRhZ3MgZmlsZXMgYXJlIHNvcnRlZC4KKwkJCVdoZW4gdGhlcmUgYXJlIGR1cGxpY2F0ZXMgYW4gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbi4KKwkJCUFuIGV4aXN0aW5nIHRhZ3MgZmlsZSBpcyBzaWxlbnRseSBvdmVyd3JpdHRlbi4KKwkJCVRvIHJlYnVpbGQgdGhlIGhlbHAgdGFncyBpbiB0aGUgcnVudGltZSBkaXJlY3RvcnkKKwkJCShyZXF1aXJlcyB3cml0ZSBwZXJtaXNzaW9uIHRoZXJlKTogPgorCQkJCTpoZWxwdGFncyAkVklNUlVOVElNRS9kb2MKKzwJCQl7bm90IGluIFZpfQorCisKK1RSQU5TTEFURUQgSEVMUAkJCQkJCSpoZWxwLXRyYW5zbGF0ZWQqCisKK0l0IGlzIHBvc3NpYmxlIHRvIGFkZCB0cmFuc2xhdGVkIGhlbHAgZmlsZXMsIG5leHQgdG8gdGhlIG9yaWdpbmFsIEVuZ2xpc2ggaGVscAorZmlsZXMuICBWaW0gd2lsbCBzZWFyY2ggZm9yIGFsbCBoZWxwIGluICJkb2MiIGRpcmVjdG9yaWVzIGluICdydW50aW1lcGF0aCcuCitUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9sYW5nfCBmZWF0dXJlLgorCitBIHNldCBvZiB0cmFuc2xhdGVkIGhlbHAgZmlsZXMgY29uc2lzdHMgb2YgdGhlc2UgZmlsZXM6CisKKwloZWxwLmFieAorCWhvd3RvLmFieAorCS4uLgorCXRhZ3MtYWIKKworImFiIiBpcyB0aGUgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLiAgVGh1cyBmb3IgSXRhbGlhbiB0aGUgbmFtZXMgYXJlOgorCisJaGVscC5pdHgKKwlob3d0by5pdHgKKwkuLi4KKwl0YWdzLWl0CisKK1RoZSAnaGVscGxhbmcnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIHRoZSBwcmVmZXJyZWQgbGFuZ3VhZ2UocykuICBUaGUgZGVmYXVsdCBpcworc2V0IGFjY29yZGluZyB0byB0aGUgZW52aXJvbm1lbnQuICBWaW0gd2lsbCBmaXJzdCB0cnkgdG8gZmluZCBhIG1hdGNoaW5nIHRhZworaW4gdGhlIHByZWZlcnJlZCBsYW5ndWFnZShzKS4gIEVuZ2xpc2ggaXMgdXNlZCB3aGVuIGl0IGNhbm5vdCBiZSBmb3VuZC4KKworVG8gZmluZCBhIHRhZyBpbiBhIHNwZWNpZmljIGxhbmd1YWdlLCBhcHBlbmQgIkBhYiIgdG8gYSB0YWcsIHdoZXJlICJhYiIgaXMgdGhlCit0d28tbGV0dGVyIGxhbmd1YWdlIGNvZGUuICBFeGFtcGxlOiA+CisJOmhlIHVzZXItbWFudWFsQGl0CisJOmhlIHVzZXItbWFudWFsQGVuCitUaGUgZmlyc3Qgb25lIGZpbmRzIHRoZSBJdGFsaWFuIHVzZXIgbWFudWFsLCBldmVuIHdoZW4gJ2hlbHBsYW5nJyBpcyBlbXB0eS4KK1RoZSBzZWNvbmQgb25lIGZpbmRzIHRoZSBFbmdsaXNoIHVzZXIgbWFudWFsLCBldmVuIHdoZW4gJ2hlbHBsYW5nJyBpcyBzZXQgdG8KKyJpdCIuCisKK1doZW4gdXNpbmcgY29tbWFuZC1saW5lIGNvbXBsZXRpb24gZm9yIHRoZSAiOmhlbHAiIGNvbW1hbmQsIHRoZSAiQGVuIgorZXh0ZW50aW9uIGlzIG9ubHkgc2hvd24gd2hlbiBhIHRhZyBleGlzdHMgZm9yIG11bHRpcGxlIGxhbmd1YWdlcy4gIFdoZW4gdGhlCit0YWcgb25seSBleGlzdHMgZm9yIEVuZ2xpc2ggIkBlbiIgaXMgb21pdHRlZC4KKworV2hlbiB1c2luZyB8Q1RSTC1dfCBvciAiOmhlbHAhIiBpbiBhIG5vbi1FbmdsaXNoIGhlbHAgZmlsZSBWaW0gd2lsbCB0cnkgdG8KK2ZpbmQgdGhlIHRhZyBpbiB0aGUgc2FtZSBsYW5ndWFnZS4gIElmIG5vdCBmb3VuZCB0aGVuICdoZWxwbGFuZycgd2lsbCBiZSB1c2VkCit0byBzZWxlY3QgYSBsYW5ndWFnZS4KKworSGVscCBmaWxlcyBtdXN0IHVzZSBsYXRpbjEgb3IgdXRmLTggZW5jb2RpbmcuICBWaW0gYXNzdW1lcyB0aGUgZW5jb2RpbmcgaXMKK3V0Zi04IHdoZW4gZmluZGluZyBub24tQVNDSUkgY2hhcmFjdGVycyBpbiB0aGUgZmlyc3QgbGluZS4gIFRodXMgeW91IG11c3QKK3RyYW5zbGF0ZSB0aGUgaGVhZGVyIHdpdGggIkZvciBWaW0gdmVyc2lvbiIuCisKK1RoZSBzYW1lIGVuY29kaW5nIG11c3QgYmUgdXNlZCBmb3IgdGhlIGhlbHAgZmlsZXMgb2Ygb25lIGxhbmd1YWdlIGluIG9uZQorZGlyZWN0b3J5LiAgWW91IGNhbiB1c2UgYSBkaWZmZXJlbnQgZW5jb2RpbmcgZm9yIGRpZmZlcmVudCBsYW5ndWFnZXMgYW5kIHVzZQorYSBkaWZmZXJlbnQgZW5jb2RpbmcgZm9yIGhlbHAgZmlsZXMgb2YgdGhlIHNhbWUgbGFuZ3VhZ2UgYnV0IGluIGEgZGlmZmVyZW50CitkaXJlY3RvcnkuCisKK0hpbnRzIGZvciB0cmFuc2xhdG9yczoKKy0gRG8gbm90IHRyYW5zbGF0ZSB0aGUgdGFncy4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlICdoZWxwbGFuZycgdG8KKyAgc3BlY2lmeSB0aGUgcHJlZmVycmVkIGxhbmd1YWdlLiAgWW91IG1heSBhZGQgbmV3IHRhZ3MgaW4geW91ciBsYW5ndWFnZS4KKy0gV2hlbiB5b3UgZG8gbm90IHRyYW5zbGF0ZSBhIHBhcnQgb2YgYSBmaWxlLCBhZGQgdGFncyB0byB0aGUgRW5nbGlzaCB2ZXJzaW9uLAorICB1c2luZyB0aGUgInRhZ0BlbiIgbm90YXRpb24uCistIE1ha2UgYSBwYWNrYWdlIHdpdGggYWxsIHRoZSBmaWxlcyBhbmQgdGhlIHRhZ3MgZmlsZSBhdmFpbGFibGUgZm9yIGRvd25sb2FkLgorICBVc2VycyBjYW4gZHJvcCBpdCBpbiBvbmUgb2YgdGhlICJkb2MiIGRpcmVjdG9yaWVzIGFuZCBzdGFydCB1c2UgaXQuCisgIFJlcG9ydCB0aGlzIHRvIEJyYW0sIHNvIHRoYXQgaGUgY2FuIGFkZCBhIGxpbmsgb24gd3d3LnZpbS5vcmcuCistIFVzZSB0aGUgfDpoZWxwdGFnc3wgY29tbWFuZCB0byBnZW5lcmF0ZSB0aGUgdGFncyBmaWxlcy4gIEl0IHdpbGwgZmluZCBhbGwKKyAgbGFuZ3VhZ2VzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFByaW50aW5nCQkJCQkJKnByaW50aW5nKgorCitPbiBNUy1XaW5kb3dzIFZpbSBjYW4gcHJpbnQgeW91ciB0ZXh0IG9uIGFueSBpbnN0YWxsZWQgcHJpbnRlci4gIE9uIG90aGVyCitzeXN0ZW1zIGEgUG9zdFNjcmlwdCBmaWxlIGlzIHByb2R1Y2VkLiAgVGhpcyBjYW4gYmUgZGlyZWN0bHkgc2VudCB0byBhCitQb3N0U2NyaXB0IHByaW50ZXIuICBGb3Igb3RoZXIgcHJpbnRlcnMgYSBwcm9ncmFtIGxpa2UgZ2hvc3RzY3JpcHQgbmVlZHMgdG8gYmUKK3VzZWQuCisKKzMuMSBQb3N0U2NyaXB0IFByaW50aW5nCQkJfHBvc3RzY3JpcHQtcHJpbnRpbmd8CiszLjIgUG9zdFNjcmlwdCBQcmludGluZyBFbmNvZGluZwl8cG9zdHNjcmlwdC1wcmludC1lbmNvZGluZ3wKKzMuMyBQb3N0U2NyaXB0IFByaW50aW5nIFRyb3VibGVzaG9vdGluZyB8cG9zdHNjcmlwdC1wcmludC10cm91YmxlfAorMy40IFBvc3RTY3JpcHQgVXRpbGl0aWVzCQl8cG9zdHNjcmlwdC1wcmludC11dGlsfAorMy41IEZvcm1mZWVkIENoYXJhY3RlcnMJCQl8cHJpbnRpbmctZm9ybWZlZWR8CisKK3tub3QgaW4gVml9Cit7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHwrcHJpbnRlcnwgZmVhdHVyZX0KKworCQkJCQkqOmhhKiAqOmhhcmRjb3B5KiAqRTIzNyogKkUyMzgqICpFMzI0KgorOltyYW5nZV1oYVtyZGNvcHldWyFdIFthcmd1bWVudHNdCisJCQlTZW5kIFtyYW5nZV0gbGluZXMgKGRlZmF1bHQgd2hvbGUgZmlsZSkgdG8gdGhlCisJCQlwcmludGVyLgorCisJCQlPbiBNUy1XaW5kb3dzIGEgZGlhbG9nIGlzIGRpc3BsYXllZCB0byBhbGxvdyBzZWxlY3Rpb24KKwkJCW9mIHByaW50ZXIsIHBhcGVyIHNpemUgZXRjLiBUbyBza2lwIHRoZSBkaWFsb2csIHVzZQorCQkJdGhlIFshXS4gIEluIHRoaXMgY2FzZSB0aGUgcHJpbnRlciBkZWZpbmVkIGJ5CisJCQkncHJpbnRkZXZpY2UnIGlzIHVzZWQsIG9yLCBpZiAncHJpbnRkZXZpY2UnIGlzIGVtcHR5LAorCQkJdGhlIHN5c3RlbSBkZWZhdWx0IHByaW50ZXIuCisKKwkJCUZvciBzeXN0ZW1zIG90aGVyIHRoYW4gTVMtV2luZG93cywgUG9zdFNjcmlwdCBpcworCQkJd3JpdHRlbiBpbiBhIHRlbXAgZmlsZSBhbmQgJ3ByaW50ZXhwcicgaXMgdXNlZCB0bworCQkJYWN0dWFsbHkgcHJpbnQgaXQuICBUaGVuIFthcmd1bWVudHNdIGNhbiBiZSB1c2VkIGJ5CisJCQkncHJpbnRleHByJyB0aHJvdWdoIHx2OmNtZGFyZ3wuICBPdGhlcndpc2UgW2FyZ3VtZW50c10KKwkJCWlzIGlnbm9yZWQuICAncHJpbnRvcHRpb25zJyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisJCQlwYXBlciBzaXplLCBkdXBsZXgsIGV0Yy4KKworOltyYW5nZV1oYVtyZGNvcHldWyFdID57ZmlsZW5hbWV9CisJCQlBcyBhYm92ZSwgYnV0IHdyaXRlIHRoZSByZXN1bHRpbmcgUG9zdFNjcmlwdCBpbiBmaWxlCisJCQl7ZmlsZW5hbWV9LgorCQkJVGhpbmdzIGxpa2UgIiUiIGFyZSBleHBhbmRlZCB8Y21kbGluZS1zcGVjaWFsfAorCQkJQ2FyZWZ1bDogQW4gZXhpc3RpbmcgZmlsZSBpcyBzaWxlbnRseSBvdmVyd3JpdHRlbi4KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcG9zdHNjcmlwdHwKKwkJCWZlYXR1cmV9CisJCQlPbiBNUy1XaW5kb3dzIHVzZSB0aGUgInByaW50IHRvIGZpbGUiIGZlYXR1cmUgb2YgdGhlCisJCQlwcmludGVyIGRyaXZlci4KKworUHJvZ3Jlc3MgaXMgZGlzcGxheWVkIGR1cmluZyBwcmludGluZyBhcyBhIHBhZ2UgbnVtYmVyIGFuZCBhIHBlcmNlbnRhZ2UuICBUbworYWJvcnQgcHJpbnRpbmcgdXNlIHRoZSBpbnRlcnJ1cHQga2V5IChDVFJMLUMgb3IsIG9uIE1TLXN5c3RlbXMsIENUUkwtQnJlYWspLgorCitQcmludGVyIG91dHB1dCBpcyBjb250cm9sbGVkIGJ5IHRoZSAncHJpbnRmb250JyBhbmQgJ3ByaW50b3B0aW9ucycgb3B0aW9ucy4KKydwcmludGhlYWRlcicgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgYSBwYWdlIGhlYWRlci4KKworVGhlIHByaW50ZWQgZmlsZSBpcyBhbHdheXMgbGltaXRlZCB0byB0aGUgc2VsZWN0ZWQgbWFyZ2lucywgaXJyZXNwZWN0aXZlIG9mCit0aGUgY3VycmVudCB3aW5kb3cncyAnd3JhcCcgb3IgJ2xpbmVicmVhaycgc2V0dGluZ3MuICBUaGUgIndyYXAiIGl0ZW0gaW4KKydwcmludG9wdGlvbnMnIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCB3cmFwcGluZyBvZmYuCitUaGUgY3VycmVudCBoaWdobGlnaHRpbmcgY29sb3JzIGFyZSB1c2VkIGluIHRoZSBwcmludG91dCwgd2l0aCB0aGUgZm9sbG93aW5nCitjb25zaWRlcmF0aW9uczoKKzEpIFRoZSBub3JtYWwgYmFja2dyb3VuZCBpcyBhbHdheXMgcmVuZGVyZWQgYXMgd2hpdGUgKGkuZS4gYmxhbmsgcGFwZXIuKQorMikgV2hpdGUgdGV4dCBvciB0aGUgZGVmYXVsdCBmb3JlZ3JvdW5kIGlzIHJlbmRlcmVkIGFzIGJsYWNrLCBzbyB0aGF0IGl0IHNob3dzCisgICB1cCEKKzMpIElmICdiYWNrZ3JvdW5kJyBpcyAiZGFyayIsIHRoZW4gdGhlIGNvbG91cnMgYXJlIGRhcmtlbmVkIHRvIGNvbXBlbnNhdGUgZm9yCisgICB0aGUgZmFjdCB0aGF0IG90aGVyd2lzZSB0aGV5IHdvdWxkIGJlIHRvbyBicmlnaHQgdG8gc2hvdyB1cCBjbGVhcmx5IG9uCisgICB3aGl0ZSBwYXBlci4KKworCiszLjEgUG9zdFNjcmlwdCBQcmludGluZwkJCQkJKnBvc3RzY3JpcHQtcHJpbnRpbmcqCisJCQkJCQkqRTQ1NSogKkU0NTYqICpFNDU3KiAqRTYyNCoKK1Byb3ZpZGVkIHlvdSBoYXZlIGVub3VnaCBkaXNrIHNwYWNlIHRoZXJlIHNob3VsZCBiZSBubyBwcm9ibGVtcyBnZW5lcmF0aW5nIGEKK1Bvc3RTY3JpcHQgZmlsZS4gIFlvdSBuZWVkIHRvIGhhdmUgdGhlIHJ1bnRpbWUgZmlsZXMgY29ycmVjdGx5IGluc3RhbGxlZCAoaWYKK3lvdSBjYW4gZmluZCB0aGUgaGVscCBmaWxlcywgdGhleSBwcm9iYWJseSBhcmUpLgorCitUaGVyZSBhcmUgY3VycmVudGx5IGEgbnVtYmVyIG9mIGxpbWl0YXRpb25zIHdpdGggUG9zdFNjcmlwdCBwcmludGluZzoKKworLSAncHJpbnRmb250JyAtIFRoZSBmb250IG5hbWUgaXMgaWdub3JlZCAodGhlIENvdXJpZXIgZmFtaWx5IGlzIGFsd2F5cyB1c2VkIC0KKyAgaXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBvbiBhbGwgUG9zdFNjcmlwdCBwcmludGVycykgYnV0IHRoZSBmb250IHNpemUgaXMKKyAgdXNlZC4KKworLSAncHJpbnRvcHRpb25zJyAtIFRoZSBkdXBsZXggc2V0dGluZyBpcyB1c2VkIHdoZW4gZ2VuZXJhdGluZyBQb3N0U2NyaXB0CisgIG91dHB1dCwgYnV0IGl0IGlzIHVwIHRvIHRoZSBwcmludGVyIHRvIHRha2Ugbm90aWNlIG9mIHRoZSBzZXR0aW5nLiAgSWYgdGhlCisgIHByaW50ZXIgZG9lcyBub3Qgc3VwcG9ydCBkdXBsZXggcHJpbnRpbmcgdGhlbiBpdCBzaG91bGQgYmUgc2lsZW50bHkgaWdub3JlZC4KKyAgU29tZSBwcmludGVycywgaG93ZXZlciwgZG9uJ3QgcHJpbnQgYXQgYWxsLgorCistIDgtYml0IHN1cHBvcnQgLSBXaGlsZSBhIG51bWJlciBvZiA4LWJpdCBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmdzIGFyZQorICBzdXBwb3J0ZWQgaXQgaXMgcG9zc2libGUgdGhhdCBzb21lIGNoYXJhY3RlcnMgd2lsbCBub3QgcHJpbnQuICBXaGV0aGVyIGEKKyAgY2hhcmFjdGVyIHdpbGwgcHJpbnQgZGVwZW5kcyBvbiB0aGUgZm9udCBpbiB0aGUgcHJpbnRlciBrbm93aW5nIHRoZQorICBjaGFyYWN0ZXIuICBNaXNzaW5nIGNoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGFuIHVwc2lkZSBkb3duIHF1ZXN0aW9uCisgIG1hcmssIG9yIGEgc3BhY2UgaWYgdGhhdCBjaGFyYWN0ZXIgaXMgYWxzbyBub3Qga25vd24gYnkgdGhlIGZvbnQuICBJdCBtYXkgYmUKKyAgcG9zc2libGUgdG8gZ2V0IGFsbCB0aGUgY2hhcmFjdGVycyBpbiBhbiBlbmNvZGluZyB0byBwcmludCBieSBpbnN0YWxsaW5nIGEKKyAgbmV3IHZlcnNpb24gb2YgdGhlIENvdXJpZXIgZm9udCBmYW1pbHkuCisKKy0gTXVsdGktYnl0ZSBzdXBwb3J0IC0gQ3VycmVudGx5IFZJTSB3aWxsIHRyeSB0byBjb252ZXJ0IG11bHRpLWJ5dGUgY2hhcmFjdGVycworICB0byB0aGUgOC1iaXQgZW5jb2Rpbmcgc3BlY2lmaWVkIGJ5ICdwcmludGVuY29kaW5nJyAob3IgbGF0aW4xIGlmIGl0IGlzCisgIGVtcHR5KS4gIEFueSBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBzdWNjZXNzZnVsbHkgY29udmVydGVkIGFyZSBzaG93biBhcworICB1bmtub3duIGNoYXJhY3RlcnMuICBQcmludGluZyB3aWxsIGZhaWwgaWYgVklNIGNhbm5vdCBjb252ZXJ0IHRoZSBtdWx0aS1ieXRlCisgIHRvIHRoZSA4LWJpdCBlbmNvZGluZy4KKworCiszLjIgQ3VzdG9tIDgtYml0IFByaW50IENoYXJhY3RlciBFbmNvZGluZ3MJKnBvc3RzY3JpcHQtcHJpbnQtZW5jb2RpbmcqCisJCQkJCQkJCSpFNjE4KiAqRTYxOSoKK1RvIHVzZSB5b3VyIG93biBwcmludCBjaGFyYWN0ZXIgZW5jb2Rpbmcgd2hlbiBwcmludGluZyA4LWJpdCBjaGFyYWN0ZXIgZGF0YQoreW91IG5lZWQgdG8gZGVmaW5lIHlvdXIgb3duIFBvc3RTY3JpcHQgZm9udCBlbmNvZGluZyB2ZWN0b3IuICBEZXRhaWxzIG9uIGhvdwordG8gdG8gZGVmaW5lIGEgZm9udCBlbmNvZGluZyB2ZWN0b3IgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIGhlbHAgZmlsZSwgYnV0Cit5b3UgY2FuIGZpbmQgZGV0YWlscyBpbiB0aGUgUG9zdFNjcmlwdCBMYW5ndWFnZSBSZWZlcmVuY2UgTWFudWFsLCAzcmQgRWRpdGlvbiwKK3B1Ymxpc2hlZCBieSBBZGRpc29uLVdlc2xleSBhbmQgYXZhaWxhYmxlIGluIFBERiBmb3JtIGF0CitodHRwOi8vd3d3LmFkb2JlLmNvbS8uICBUaGUgZm9sbG93aW5nIGRlc2NyaWJlcyB3aGF0IHlvdSBuZWVkIHRvIGRvIGZvciBWSU0gdG8KK2xvY2F0ZSBhbmQgdXNlIHlvdXIgcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nLgorCitpLiAgIERlY2lkZSBvbiBhIHVuaXF1ZSBuYW1lIGZvciB5b3VyIGVuY29kaW5nIHZlY3Rvciwgb25lIHRoYXQgZG9lcyBub3QgY2xhc2gKKyAgICAgd2l0aCBhbnkgb2YgdGhlIHJlY29nbml6ZWQgb3Igc3RhbmRhcmQgZW5jb2RpbmcgbmFtZXMgdGhhdCBWSU0gdXNlcyAoc2VlCisgICAgIHxlbmNvZGluZy1uYW1lc3wgZm9yIGEgbGlzdCksIGFuZCB0aGF0IG5vIG9uZSBlbHNlIGlzIGxpa2VseSB0byB1c2UuCitpaS4gIENvcHkgJFZJTVJVTlRJTUUvcHJpbnQvbGF0aW4xLnBzIHRvIHRoZSBwcmludCBzdWJkaXJlY3RvcnkgaW4geW91cgorICAgICAncnVudGltZXBhdGgnIGFuZCByZW5hbWUgaXQgd2l0aCB5b3VyIHVuaXF1ZSBuYW1lLgoraWlpLiBFZGl0IHlvdXIgcmVuYW1lZCBjb3B5IG9mIGxhdGluMS5wcywgcmVwbGFjaW5nIGFsbCBvY2N1cnJlbmNlcyBvZiBsYXRpbjEKKyAgICAgd2l0aCB5b3VyIHVuaXF1ZSBuYW1lIChkb24ndCBmb3JnZXQgdGhlIGxpbmUgc3RhcnRpbmcgJSVUaXRsZTopLCBhbmQKKyAgICAgbW9kaWZ5IHRoZSBhcnJheSBvZiBnbHlwaCBuYW1lcyB0byBkZWZpbmUgeW91ciBuZXcgZW5jb2RpbmcgdmVjdG9yLiAgVGhlCisgICAgIGFycmF5IG11c3QgaGF2ZSBleGFjdGx5IDI1NiBlbnRyaWVzIG9yIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHByaW50IQoraXYuICBXaXRoaW4gVklNLCBzZXQgJ3ByaW50ZW5jb2RpbmcnIHRvIHlvdXIgdW5pcXVlIGVuY29kaW5nIG5hbWUgYW5kIHRoZW4KKyAgICAgcHJpbnQgeW91ciBmaWxlLiAgVklNIHdpbGwgbm93IHVzZSB5b3VyIGN1c3RvbSBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcuCisKK1ZJTSB3aWxsIHJlcG9ydCBhbiBlcnJvciB3aXRoIHRoZSByZXNvdXJjZSBmaWxlIGlmIHlvdSBjaGFuZ2UgdGhlIG9yZGVyIG9yCitjb250ZW50IG9mIHRoZSBmaXJzdCAzIGxpbmVzLCBvdGhlciB0aGFuIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyBvbiB0aGUgbGluZQorc3RhcnRpbmcgJSVUaXRsZTogb3IgdGhlIHZlcnNpb24gbnVtYmVyIG9uIHRoZSBsaW5lIHN0YXJ0aW5nICUlVmVyc2lvbjouCisKK1tUZWNobmljYWwgZXhwbGFuYXRpb24gZm9yIHRob3NlIHRoYXQga25vdyBQb3N0U2NyaXB0IC0gVklNIGxvb2tzIGZvciBhIGZpbGUKK3dpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZW5jb2RpbmcgaXQgd2lsbCB1c2Ugd2hlbiBwcmludGluZy4gIFRoZSBmaWxlCitkZWZpbmVzIGEgbmV3IFBvc3RTY3JpcHQgRW5jb2RpbmcgcmVzb3VyY2UgY2FsbGVkIC9WSU0tbmFtZSwgd2hlcmUgbmFtZSBpcyB0aGUKK3ByaW50IGNoYXJhY3RlciBlbmNvZGluZyBWSU0gd2lsbCB1c2UuXQorCisKKzMuMyBQb3N0U2NyaXB0IFByaW50aW5nIFRyb3VibGVzaG9vdGluZwkJKnBvc3RzY3JpcHQtcHJpbnQtdHJvdWJsZSoKKwkJCQkJCQkJCSpFNjIxKgorVXN1YWxseSB0aGUgb25seSBzaWduIG9mIGEgcHJvYmxlbSB3aGVuIHByaW50aW5nIHdpdGggUG9zdFNjcmlwdCBpcyB0aGF0IHlvdXIKK3ByaW50b3V0IGRvZXMgbm90IGFwcGVhci4gIElmIHlvdSBhcmUgbHVja3kgeW91IG1heSBnZXQgYSBwcmludGVkIHBhZ2UgdGhhdAordGVsbHMgeW91IHRoZSBQb3N0U2NyaXB0IG9wZXJhdG9yIHRoYXQgZ2VuZXJhdGVkIHRoZSBlcnJvciB0aGF0IHByZXZlbnRlZCB0aGUKK3ByaW50IGpvYiBjb21wbGV0aW5nLgorCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgcG9zc2libGUgY2F1c2VzIGFzIHRvIHdoeSB0aGUgcHJpbnRpbmcgbWF5IGhhdmUgZmFpbGVkOgorCistIFdyb25nIHZlcnNpb24gb2YgdGhlIHByb2xvZyByZXNvdXJjZSBmaWxlLiAgVGhlIHByb2xvZyByZXNvdXJjZSBmaWxlCisgIGNvbnRhaW5zIHNvbWUgUG9zdFNjcmlwdCB0aGF0IFZJTSBuZWVkcyB0byBiZSBhYmxlIHRvIHByaW50LiAgRWFjaCB2ZXJzaW9uCisgIG9mIFZJTSBuZWVkcyBvbmUgcGFydGljdWxhciB2ZXJzaW9uLiAgTWFrZSBzdXJlIHlvdSBoYXZlIGNvcnJlY3RseSBpbnN0YWxsZWQKKyAgdGhlIHJ1bnRpbWUgZmlsZXMsIGFuZCBkb24ndCBoYXZlIGFueSBvbGQgdmVyc2lvbnMgb2YgYSBmaWxlIGNhbGxlZCBwcm9sb2cKKyAgaW4gdGhlIHByaW50IGRpcmVjdG9yeSBpbiB5b3VyICdydW50aW1lcGF0aCcgZGlyZWN0b3J5LgorCistIFBhcGVyIHNpemUuICBTb21lIFBvc3RTY3JpcHQgcHJpbnRlcnMgd2lsbCBhYm9ydCBwcmludGluZyBhIGZpbGUgaWYgdGhleSBkbworICBub3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkIHBhcGVyIHNpemUuICBCeSBkZWZhdWx0IFZJTSB1c2VzIEE0IHBhcGVyLiAgRmluZAorICBvdXQgd2hhdCBzaXplIHBhcGVyIHlvdXIgcHJpbnRlciBub3JtYWxseSB1c2VzIGFuZCBzZXQgdGhlIGFwcHJvcHJpYXRlIHBhcGVyCisgIHNpemUgd2l0aCAncHJpbnRvcHRpb25zJy4gIElmIHlvdSBjYW5ub3QgZmluZCB0aGUgbmFtZSBvZiB0aGUgcGFwZXIgdXNlZCwKKyAgbWVhc3VyZSBhIHNoZWV0IGFuZCBjb21wYXJlIGl0IHdpdGggdGhlIHRhYmxlIG9mIHN1cHBvcnRlZCBwYXBlciBzaXplcyBsaXN0ZWQKKyAgZm9yICdwcmludG9wdGlvbnMnLCB1c2luZyB0aGUgcGFwZXIgdGhhdCBpcyBjbG9zZXN0IGluIGJvdGggd2lkdGggQU5EIGhlaWdodC4KKyAgTm90ZTogVGhlIGRpbWVuc2lvbnMgb2YgYWN0dWFsIHBhcGVyIG1heSB2YXJ5IHNsaWdodGx5IGZyb20gdGhlIG9uZXMgbGlzdGVkLgorICBJZiB0aGVyZSBpcyBubyBwYXBlciBsaXN0ZWQgY2xvc2UgZW5vdWdoLCB0aGVuIHlvdSBtYXkgd2FudCB0byB0cnkgcHNyZXNpemUKKyAgZnJvbSBQU1V0aWxzLCBkaXNjdXNzZWQgYmVsb3cuCisKKy0gVHdvLXNpZGVkIHByaW50aW5nIChkdXBsZXgpLiAgTm9ybWFsbHkgYSBQb3N0U2NyaXB0IHByaW50ZXIgdGhhdCBkb2VzIG5vdAorICBzdXBwb3J0IHR3by1zaWRlZCBwcmludGluZyB3aWxsIGlnbm9yZSBhbnkgcmVxdWVzdCB0byBkbyBpdC4gIEhvd2V2ZXIsIHNvbWUKKyAgcHJpbnRlcnMgbWF5IGFib3J0IHRoZSBqb2IgYWx0b2dldGhlci4gIFRyeSBwcmludGluZyB3aXRoIGR1cGxleCB0dXJuZWQgb2ZmLgorICBOb3RlOiBEdXBsZXggcHJpbnRzIGNhbiBiZSBhY2hpZXZlZCBtYW51YWxseSB1c2luZyBQUyB1dGlscyAtIHNlZSBiZWxvdy4KKworLSBDb2xsYXRlZCBwcmludGluZy4gIEFzIHdpdGggRHVwbGV4IHByaW50aW5nLCBtb3N0IFBvc3RTY3JpcHQgcHJpbnRlcnMgdGhhdAorICBkbyBub3Qgc3VwcG9ydCBjb2xsYXRpbmcgcHJpbnRvdXRzIHdpbGwgaWdub3JlIGEgcmVxdWVzdCB0byBkbyBzby4gIFNvbWUgbWF5CisgIG5vdC4gIFRyeSBwcmludGluZyB3aXRoIGNvbGxhdGlvbiB0dXJuZWQgb2ZmLgorCistIFN5bnRheCBoaWdobGlnaHRpbmcuICBTb21lIHByaW50IG1hbmFnZW1lbnQgY29kZSBtYXkgcHJldmVudCB0aGUgZ2VuZXJhdGVkCisgIFBvc3RTY3JpcHQgZmlsZSBmcm9tIGJlaW5nIHByaW50ZWQgb24gYSBibGFjayBhbmQgd2hpdGUgcHJpbnRlciB3aGVuIHN5bnRheAorICBoaWdobGlnaHRpbmcgaXMgdHVybmVkIG9uLCBldmVuIGlmIHNvbGlkIGJsYWNrIGlzIHRoZSBvbmx5IGNvbG9yIHVzZWQuICBUcnkKKyAgcHJpbnRpbmcgd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nIHR1cm5lZCBvZmYuCisKK0Egc2FmZSBwcmludG9wdGlvbnMgc2V0dGluZyB0byB0cnkgaXM6ID4KKworCTpzZXQgcHJpbnRvcHRpb25zPXBhcGVyOkE0LGR1cGxleDpvZmYsY29sbGF0ZTpuLHN5bnRheDpuCisKK1JlcGxhY2UgIkE0IiB3aXRoIHRoZSBwYXBlciBzaXplIHRoYXQgYmVzdCBtYXRjaGVzIHlvdXIgcHJpbnRlciBwYXBlci4KKworCiszLjQgUG9zdFNjcmlwdCBVdGlsaXRpZXMJCQkqcG9zdHNjcmlwdC1wcmludC11dGlsKgorCiszLjQuMSBHaG9zdHNjcmlwdAorCitHaG9zdHNjcmlwdCBpcyBhIFBvc3RTY3JpcHQgYW5kIFBERiBpbnRlcnByZXRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkKK2FuZCBwcmludCBvbiBub24tUG9zdFNjcmlwdCBwcmludGVycyBQb3N0U2NyaXB0IGFuZCBQREYgZmlsZXMuICBJdCBjYW4gYWxzbworZ2VuZXJhdGUgUERGIGZpbGVzIGZyb20gUG9zdFNjcmlwdC4KKworR2hvc3RzY3JpcHQgd2lsbCBydW4gb24gYSB3aWRlIHZhcmlldHkgb2YgcGxhdGZvcm1zLgorCitUaGVyZSBhcmUgdGhyZWUgYXZhaWxhYmxlIHZlcnNpb25zOgorCistIEFGUEwgR2hvc3RzY3JpcHQgKGZvcm1lcmx5IEFsYWRkaW4gR2hvc3RzY3JpcHQpIHdoaWNoIGlzIGZyZWUgZm9yCisgIG5vbi1jb21tZXJjaWFsIHVzZS4gIEl0IGNhbiBiZSBvYnRhaW5lZCBmcm9tOgorCisgICAgaHR0cDovL3d3dy5jcy53aXNjLmVkdS9+Z2hvc3QvCisKKy0gR05VIEdob3N0c2NyaXB0IHdoaWNoIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBJdAorICBjYW4gYmUgb2J0YWluZWQgZnJvbToKKworICAgIGZ0cDovL21pcnJvci5jcy53aXNjLmVkdS9wdWIvbWlycm9ycy9naG9zdC9nbnUvCisKKy0gQSBjb21tZXJjaWFsIHZlcnNpb24gZm9yIGluY2x1c2lvbiBpbiBjb21tZXJjaWFsIHByb2R1Y3RzLgorCitBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIEdob3N0c2NyaXB0IGNhbiBhbHNvIGJlIGZvdW5kIGF0OgorCisgIGh0dHA6Ly93d3cuZ2hvc3RzY3JpcHQuY29tLworCitTdXBwb3J0IGZvciBhIG51bWJlciBvZiBub24gUG9zdFNjcmlwdCBwcmludGVycyBpcyBwcm92aWRlZCBpbiB0aGUKK2Rpc3RyaWJ1dGlvbiBhcyBzdGFuZGFyZCwgYnV0IGlmIHlvdSBjYW5ub3QgZmluZCBzdXBwb3J0IGZvciB5b3VyIHByaW50ZXIKK2NoZWNrIHRoZSBHaG9zdHNjcmlwdCBzaXRlIGZvciBvdGhlciBwcmludGVycyBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdC4KKworCiszLjQuMiBHaG9zdHNjcmlwdCBQcmV2aWV3ZXJzLgorCitUaGUgaW50ZXJmYWNlIHRvIEdob3N0c2NyaXB0IGlzIHZlcnkgcHJpbWl0aXZlIHNvIGEgbnVtYmVyIG9mIGdyYXBoaWNhbCBmcm9udAorZW5kcyBoYXZlIGJlZW4gY3JlYXRlZC4gIFRoZXNlIGFsbG93IGVhc2llciBQb3N0U2NyaXB0IGZpbGUgc2VsZWN0aW9uLAorcHJldmlld2luZyBhdCBkaWZmZXJlbnQgem9vbSBsZXZlbHMsIGFuZCBwcmludGluZy4gIENoZWNrIHN1cHBsaWVkCitkb2N1bWVudGF0aW9uIGZvciBmdWxsIGRldGFpbHMuCisKK1gxMQorCistIEdob3N0dmlldy4gIE9idGFpbmFibGUgZnJvbToKKworICAgIGh0dHA6Ly93d3cuY3Mud2lzYy5lZHUvfmdob3N0L2d2LworCistIGd2LiAgRGVyaXZlZCBmcm9tIEdob3N0dmlldy4gIE9idGFpbmFibGUgZnJvbToKKworICAgIGh0dHA6Ly93d3d0aGVwLnBoeXNpay51bmktbWFpbnouZGUvfnBsYXNzL2d2LworCisgIENvcGllcyAocG9zc2libHkgbm90IHRoZSBtb3N0IHJlY2VudCkgY2FuIGJlIGZvdW5kIGF0OgorCisgICAgaHR0cDovL3d3dy5jcy53aXNjLmVkdS9+Z2hvc3QvZ3YvCisKK09wZW5WTVMKKworLSBJcyBhcHBhcmVudGx5IHN1cHBvcnRlZCBpbiB0aGUgbWFpbiBjb2RlIG5vdyAodW50ZXN0ZWQpLiAgU2VlOgorCisgICAgaHR0cDovL3d3d3RoZXAucGh5c2lrLnVuaS1tYWluei5kZS9+cGxhc3MvZ3YvCisKK1dpbmRvd3MgYW5kIE9TLzIKKworLSBHU3ZpZXcuICBPYnRhaW5hYmxlIGZyb206CisKKyAgICBodHRwOi8vd3d3LmNzLndpc2MuZWR1L35naG9zdC9nc3ZpZXcvCisKK0RPUworCistIHBzX3ZpZXcuICBPYnRhaW5hYmxlIGZyb206CisKKyAgICBmdHA6Ly9mdHAucGcuZ2RhLnBsL3B1Yi9UZVgvc3VwcG9ydC9wc192aWV3LworICAgIGZ0cDovL2Z0cC5kYW50ZS5kZS90ZXgtYXJjaGl2ZS9zdXBwb3J0L3BzX3ZpZXcvCisKK0xpbnV4CisKKy0gR1N2aWV3LiAgTGludXggdmVyc2lvbiBvZiB0aGUgcG9wdWxhciBXaW5kb3dzIGFuZCBPUy8yIHByZXZpZXdlci4KKyAgT2J0YWluYWJsZSBmcm9tOgorCisgICAgaHR0cDovL3d3dy5jcy53aXNjLmVkdS9+Z2hvc3QvZ3N2aWV3LworCistIEJNVi4gIERpZmZlcmVudCBmcm9tIEdob3N0dmlldyBhbmQgZ3YgaW4gdGhhdCBpdCBkb2Vzbid0IHVzZSBYIGJ1dCBzdmdhbGliLgorICBPYnRhaW5hYmxlIGZyb206CisKKyAgICBmdHA6Ly9zdW5zaXRlLnVuYy5lZHUvcHViL0xpbnV4L2FwcHMvZ3JhcGhpY3Mvdmlld2Vycy9zdmdhL2Jtdi0xLjIudGd6CisKKworMy40LjMgUFNVdGlscworCitQU1V0aWxzIGlzIGEgY29sbGVjdGlvbiBvZiB1dGlsaXR5IHByb2dyYW1zIGZvciBtYW5pcHVsYXRpbmcgUG9zdFNjcmlwdAorZG9jdW1lbnRzLiAgQmluYXJ5IGRpc3RyaWJ1dGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgbWFueSBwbGF0Zm9ybXMsIGFzIHdlbGwgYXMKK3RoZSBmdWxsIHNvdXJjZS4gIFBTVXRpbHMgY2FuIGJlIGZvdW5kIGF0OgorCisgIGh0dHA6Ly9rbmFja2VyZWQub3JnL2FuZ3VzL3BzdXRpbHMKKworVGhlIHV0aWxpdGllcyBvZiBpbnRlcmVzdCBpbmNsdWRlOgorCistIHBzbnVwLiAgICAgQ29udmVydCBQUyBmaWxlcyBmb3IgTi11cCBwcmludGluZy4KKy0gcHNzZWxlY3QuICBTZWxlY3QgcGFnZSByYW5nZSBhbmQgb3JkZXIgb2YgcHJpbnRpbmcuCistIHBzcmVzaXplLiAgQ2hhbmdlIHRoZSBwYWdlIHNpemUuCistIHBzYm9vay4gICAgUmVvcmRlciBhbmQgbGF5IG91dCBwYWdlcyByZWFkeSBmb3IgbWFraW5nIGEgYm9vay4KKworVGhlIG91dHB1dCBvZiBvbmUgcHJvZ3JhbSBjYW4gYmUgdXNlZCBhcyB0aGUgaW5wdXQgdG8gdGhlIG5leHQsIGFsbG93aW5nIGZvcgorY29tcGxleCBwcmludCBkb2N1bWVudCBjcmVhdGlvbi4KKworCitOLVVQIFBSSU5USU5HCisKK1RoZSBwc251cCB1dGlsaXR5IHRha2VzIGFuIGV4aXN0aW5nIFBvc3RTY3JpcHQgZmlsZSBnZW5lcmF0ZWQgZnJvbSBWSU0gYW5kCitjb252ZXJ0IGl0IHRvIGFuIG4tdXAgdmVyc2lvbi4gIFRoZSBzaW1wbGVzdCB3YXkgdG8gY3JlYXRlIGEgMi11cCBwcmludG91dCBpcwordG8gZmlyc3QgY3JlYXRlIGEgUG9zdFNjcmlwdCBmaWxlIHdpdGg6ID4KKworCTpoYXJkY29weSA+IHRlc3QucHMKKworVGhlbiBvbiB5b3VyIGNvbW1hbmQgbGluZSBleGVjdXRlOiA+CisKKwlwc251cCAtbiAyIHRlc3QucHMgZmluYWwucHMKKworTm90ZTogWW91IG1heSBnZXQgd2FybmluZ3MgZnJvbSBzb21lIEdob3N0c2NyaXB0IHByZXZpZXdlcnMgZm9yIGZpbGVzIHByb2R1Y2VkCitieSBwc251cCAtIHRoZXNlIG1heSBzYWZlbHkgYmUgaWdub3JlZC4KKworRmluYWxseSBwcmludCB0aGUgZmlsZSBmaW5hbC5wcyB0byB5b3VyIFBvc3RTY3JpcHQgcHJpbnRlciB3aXRoIHlvdXIKK3BsYXRmb3JtJ3MgcHJpbnQgY29tbWFuZC4gIChZb3Ugd2lsbCBuZWVkIHRvIGRlbGV0ZSB0aGUgdHdvIFBvc3RTY3JpcHQgZmlsZXMKK2FmdGVyd2FyZHMgeW91cnNlbGYuKSAgJ3ByaW50ZXhwcicgY291bGQgYmUgbW9kaWZpZWQgdG8gcGVyZm9ybSB0aGlzIGV4dHJhCitzdGVwIGJlZm9yZSBwcmludGluZy4KKworCitBTFRFUk5BVEUgRFVQTEVYIFBSSU5USU5HCisKK0l0IGlzIHBvc3NpYmxlIHRvIGFjaGlldmUgYSBwb29yIG1hbidzIHZlcnNpb24gb2YgZHVwbGV4IHByaW50aW5nIHVzaW5nIHRoZSBQUwordXRpbGl0eSBwc3NlbGVjdC4gIFRoaXMgdXRpbGl0eSBoYXMgb3B0aW9ucyAtZSBhbmQgLW8gZm9yIHByaW50aW5nIGp1c3QgdGhlCitldmVuIG9yIG9kZCBwYWdlcyBvZiBhIFBTIGZpbGUgcmVzcGVjdGl2ZWx5LgorCitGaXJzdCBnZW5lcmF0ZSBhIFBTIGZpbGUgd2l0aCB0aGUgJ2hhcmRjb3B5JyBjb21tYW5kLCB0aGVuIGdlbmVyYXRlIGEgbmV3CitmaWxlcyB3aXRoIGFsbCB0aGUgb2RkIGFuZCBldmVuIG51bWJlcmVkIHBhZ2VzIHdpdGg6ID4KKworCXBzc2VsZWN0IC1vIHRlc3QucHMgb2RkLnBzCisJcHNzZWxlY3QgLWUgdGVzdC5wcyBldmVuLnBzCisKK05leHQgcHJpbnQgb2RkLnBzIHdpdGggeW91ciBwbGF0Zm9ybSdzIG5vcm1hbCBwcmludCBjb21tYW5kLiAgVGhlbiB0YWtlIHRoZQorcHJpbnQgb3V0cHV0LCB0dXJuIGl0IG92ZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW4gdGhlIHBhcGVyIGZlZWRlci4gIE5vdyBwcmludAorZXZlbi5wcyB3aXRoIHlvdXIgcGxhdGZvcm0ncyBwcmludCBjb21tYW5kLiAgQWxsIHRoZSBldmVuIHBhZ2VzIHNob3VsZCBub3cKK2FwcGVhciBvbiB0aGUgYmFjayBvZiB0aGUgb2RkIHBhZ2VzLgorCitUaGVyZSBhIGNvdXBsZSBvZiBwb2ludHMgdG8gYmVhciBpbiBtaW5kOgorCisxLiBQb3NpdGlvbiBvZiB0aGUgZmlyc3QgcGFnZS4gIElmIHRoZSBmaXJzdCBwYWdlIGlzIG9uIHRvcCBvZiB0aGUgcHJpbnRvdXQKKyAgIHdoZW4gcHJpbnRpbmcgdGhlIG9kZCBwYWdlcyB0aGVuIHlvdSBuZWVkIHRvIHJldmVyc2UgdGhlIG9yZGVyIHRoYXQgdGhlIG9kZAorICAgcGFnZXMgYXJlIHByaW50ZWQuICBUaGlzIGNhbiBiZSBkb25lIHdpdGggdGhlIC1yIG9wdGlvbiB0byBwc3NlbGVjdC4gIFRoaXMKKyAgIHdpbGwgZW5zdXJlIHBhZ2UgMiBpcyBwcmludGVkIG9uIHRoZSBiYWNrIG9mIHBhZ2UgMS4KKyAgIE5vdGU6IGl0IGlzIGJldHRlciB0byByZXZlcnNlIHRoZSBvZGQgbnVtYmVyZWQgcGFnZXMgcmF0aGVyIHRoYW4gdGhlIGV2ZW4KKyAgIG51bWJlcmVkIGluIGNhc2UgdGhlcmUgYXJlIGFuIG9kZCBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIG9yaWdpbmFsIFBTIGZpbGUuCisKKzIuIFBhcGVyIGZsaXBwaW5nLiAgV2hlbiB0dXJuaW5nIG92ZXIgdGhlIHBhcGVyIHdpdGggdGhlIG9kZCBwYWdlcyBwcmludGVkIG9uCisgICB0aGVtIHlvdSBtYXkgaGF2ZSB0byBlaXRoZXIgZmxpcCB0aGVtIGhvcml6b250YWxseSAoYWxvbmcgdGhlIGxvbmcgZWRnZSkgb3IKKyAgIHZlcnRpY2FsbHkgKGFsb25nIHRoZSBzaG9ydCBlZGdlKSwgYXMgd2VsbCBhcyBwb3NzaWJseSByb3RhdGluZyB0aGVtIDE4MAorICAgZGVncmVlcy4gIEFsbCB0aGlzIGRlcGVuZHMgb24gdGhlIHByaW50ZXIgLSBpdCB3aWxsIGJlIG1vcmUgb2J2aW91cyBmb3IKKyAgIGRlc2t0b3AgaW5rIGpldHMgdGhhbiBmb3Igc21hbGwgb2ZmaWNlIGxhc2VyIHByaW50ZXJzIHdoZXJlIHRoZSBwYXBlciBwYXRoCisgICBpcyBoaWRkZW4gZnJvbSB2aWV3LgorCisKKzMuNSBGb3JtZmVlZCBDaGFyYWN0ZXJzCQkJCQkqcHJpbnRpbmctZm9ybWZlZWQqCisKK0J5IGRlZmF1bHQgVklNIGRvZXMgbm90IGRvIGFueSBzcGVjaWFsIHByb2Nlc3Npbmcgb2YgfGZvcm1mZWVkfCBjb250cm9sCitjaGFyYWN0ZXJzLiAgU2V0dGluZyB0aGUgJ3ByaW50b3B0aW9ucycgZm9ybWZlZWQgaXRlbSB3aWxsIG1ha2UgVklNIHJlY29nbml6ZQorZm9ybWZlZWQgY2hhcmFjdGVycyBhbmQgY29udGludWUgcHJpbnRpbmcgdGhlIGN1cnJlbnQgbGluZSBhdCB0aGUgYmVnaW5uaW5nCitvZiB0aGUgZmlyc3QgbGluZSBvbiBhIG5ldyBwYWdlLiAgVGhlIHVzZSBvZiBmb3JtZmVlZCBjaGFyYWN0ZXJzIHByb3ZpZGVzCitydWRpbWVudGFyeSBwcmludCBjb250cm9sIGJ1dCB0aGVyZSBhcmUgY2VydGFpbiB0aGluZ3MgdG8gYmUgYXdhcmUgb2YuCisKK1ZJTSB3aWxsIGFsd2F5cyBzdGFydCBwcmludGluZyBhIGxpbmUgKGluY2x1ZGluZyBhIGxpbmUgbnVtYmVyIGlmIGVuYWJsZWQpCitjb250YWluaW5nIGEgZm9ybWZlZWQgY2hhcmFjdGVyLCBldmVuIGlmIGl0IGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gdGhlCitsaW5lLiAgVGhpcyBtZWFucyBpZiBhIGxpbmUgc3RhcnRpbmcgd2l0aCBhIGZvcm1mZWVkIGNoYXJhY3RlciBpcyB0aGUgZmlyc3QKK2xpbmUgb2YgYSBwYWdlIHRoZW4gVklNIHdpbGwgcHJpbnQgYSBibGFuayBwYWdlLgorCitTaW5jZSB0aGUgbGluZSBudW1iZXIgaXMgcHJpbnRlZCBhdCB0aGUgc3RhcnQgb2YgcHJpbnRpbmcgdGhlIGxpbmUgY29udGFpbmluZwordGhlIGZvcm1mZWVkIGNoYXJhY3RlciwgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSBwcmludGVkIG9uIHRoZSBuZXcgcGFnZQord2lsbCBub3QgaGF2ZSBhIGxpbmUgbnVtYmVyIHByaW50ZWQgZm9yIGl0IChpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIHdyYXBwZWQKK2xpbmVzIG9mIGEgbG9uZyBsaW5lIHdoZW4gd3JhcCBpbiAncHJpbnRvcHRpb25zJyBpcyBlbmFibGVkKS4KKworSWYgdGhlIGZvcm1mZWVkIGNoYXJhY3RlciBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgb24gYSBsaW5lLCB0aGVuIHByaW50aW5nIHdpbGwKK2NvbnRpbnVlIG9uIHRoZSBzZWNvbmQgbGluZSBvZiB0aGUgbmV3IHBhZ2UsIG5vdCB0aGUgZmlyc3QuICBUaGlzIGlzIGR1ZSB0bworVklNIHByb2Nlc3NpbmcgdGhlIGVuZCBvZiB0aGUgbGluZSBhZnRlciB0aGUgZm9ybWZlZWQgY2hhcmFjdGVyIGFuZCBtb3ZpbmcKK2Rvd24gYSBsaW5lIHRvIGNvbnRpbnVlIHByaW50aW5nLgorCitEdWUgdG8gdGhlIHBvaW50cyBtYWRlIGFib3ZlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgd2hlbiBmb3JtZmVlZCBjaGFyYWN0ZXIKK3Byb2Nlc3NpbmcgaXMgZW5hYmxlZCwgcHJpbnRpbmcgb2YgbGluZSBudW1iZXJzIGlzIGRpc2FibGVkLCBhbmQgdGhhdCBmb3JtCitmZWVkIGNoYXJhY3RlcnMgYXJlIG5vdCB0aGUgbGFzdCBjaGFyYWN0ZXIgb24gYSBsaW5lLiAgRXZlbiB0aGVuIHlvdSBtYXkgbmVlZAordG8gYWRqdXN0IHRoZSBudW1iZXIgb2YgbGluZXMgYmVmb3JlIGEgZm9ybWZlZWQgY2hhcmFjdGVyIHRvIHByZXZlbnQKK2FjY2lkZW50YWwgYmxhbmsgcGFnZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVXNpbmcgVmltIGxpa2UgbGVzcyBvciBtb3JlCQkJCQkqbGVzcyoKKworSWYgeW91IHVzZSB0aGUgbGVzcyBvciBtb3JlIHByb2dyYW0gdG8gdmlldyBhIGZpbGUsIHlvdSBkb24ndCBnZXQgc3ludGF4CitoaWdobGlnaHRpbmcuICBUaHVzIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBWaW0gaW5zdGVhZC4gIFlvdSBjYW4gZG8gdGhpcyBieQordXNpbmcgdGhlIHNoZWxsIHNjcmlwdCAiJFZJTVJVTlRJTUUvbWFjcm9zL2xlc3Muc2giLgorCitUaGlzIHNoZWxsIHNjcmlwdCB1c2VzIHRoZSBWaW0gc2NyaXB0ICIkVklNUlVOVElNRS9tYWNyb3MvbGVzcy52aW0iLiAgSXQgc2V0cwordXAgbWFwcGluZ3MgdG8gc2ltdWxhdGUgdGhlIGNvbW1hbmRzIHRoYXQgbGVzcyBzdXBwb3J0cy4gIE90aGVyd2lzZSwgeW91IGNhbgorc3RpbGwgdXNlIHRoZSBWaW0gY29tbWFuZHMuCisKK1RoaXMgaXNuJ3QgcGVyZmVjdC4gIEZvciBleGFtcGxlLCB3aGVuIHZpZXdpbmcgYSBzaG9ydCBmaWxlIFZpbSB3aWxsIHN0aWxsIHVzZQordGhlIHdob2xlIHNjcmVlbi4gIEJ1dCBpdCB3b3JrcyBnb29kIGVub3VnaCBmb3IgbW9zdCB1c2VzLCBhbmQgeW91IGdldCBzeW50YXgKK2hpZ2hsaWdodGluZy4KKworVGhlICJoIiBrZXkgd2lsbCBnaXZlIHlvdSBhIHNob3J0IG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgY29tbWFuZHMuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92ZXJzaW9uNC50eHQgYi9ydW50aW1lL2RvYy92ZXJzaW9uNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmNzYwZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZlcnNpb240LnR4dApAQCAtMCwwICsxLDM1NSBAQAorKnZlcnNpb240LnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1hciAxMgorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1RoaXMgZG9jdW1lbnQgbGlzdHMgdGhlIGluY29tcGF0aWJsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSAzLjAgYW5kIFZpbSA0LjAuCitBbHRob3VnaCA0LjAgaXMgbWVudGlvbmVkIGhlcmUsIHRoaXMgaXMgYWxzbyBmb3IgdmVyc2lvbiA0LjEsIDQuMiwgZXRjLi4KKworVGhpcyBmaWxlIGlzIGltcG9ydGFudCBmb3IgZXZlcnlib2R5IHVwZ3JhZGluZyBmcm9tIFZpbSAzLjAuICBSZWFkIGl0CitjYXJlZnVsbHkgdG8gYXZvaWQgdW5leHBlY3RlZCBwcm9ibGVtcy4KKworJ2JhY2t1cCcgb3B0aW9uIGRlZmF1bHQgY2hhbmdlZAkJCXxiYWNrdXAtY2hhbmdlZHwKK0V4dGVuc2lvbiBmb3IgYmFja3VwIGZpbGUgY2hhbmdlZAkJfGJhY2t1cC1leHRlbnNpb258CitTdHJ1Y3R1cmUgb2Ygc3dhcCBmaWxlIGNoYW5nZWQJCQl8c3dhcGZpbGUtY2hhbmdlZHwKKyItdyBzY3JpcHRvdXQiIGFyZ3VtZW50IGNoYW5nZWQJCQl8c2NyaXB0b3V0LWNoYW5nZWR8CitCYWNrc3BhY2UgYW5kIERlbGV0ZSBrZXlzCQkJfGJhY2tzcGFjZS1kZWxldGV8CitFc2NhcGUgZm9yIHwgY2hhbmdlZAkJCQl8ZXNjYXBlLWJhcnwKK0tleSBjb2RlcyBjaGFuZ2VkCQkJCXxrZXktY29kZXMtY2hhbmdlZHwKK1Rlcm1pbmFsIG9wdGlvbnMgY2hhbmdlZAkJCXx0ZXJtY2FwLWNoYW5nZWR8CisnZXJyb3Jmb3JtYXQnIG9wdGlvbiBjaGFuZ2VkCQkJfGVycm9yZm9ybWF0LWNoYW5nZWR8CisnZ3JhcGhpYycgb3B0aW9uIGdvbmUJCQkJfGdyYXBoaWMtb3B0aW9uLWdvbmV8CisneWFua2VuZG9mbGluZScgb3B0aW9uIGdvbmUJCQl8eWUtb3B0aW9uLWdvbmV8CisnaWNvbicgYW5kICd0aXRsZScgZGVmYXVsdCB2YWx1ZSBjaGFuZ2VkCXxpY29uLWNoYW5nZWR8CisnaGlnaGxpZ2h0JyBvcHRpb24gY2hhbmdlZAkJCXxoaWdobGlnaHQtY2hhbmdlZHwKKyd0aWxkZW9wJyBhbmQgJ3dlaXJkaW52ZXJ0JyBzaG9ydCBuYW1lcyBjaGFuZ2VkCXxzaG9ydC1uYW1lLWNoYW5nZWR8CitVc2Ugb2YgInYiLCAiViIgYW5kICJDVFJMLVYiIGluIFZpc3VhbCBtb2RlCXx1c2UtdmlzdWFsLWNtZHN8CitDVFJMLUIgaW4gSW5zZXJ0IG1vZGUgcmVtb3ZlZAkJCXx0b2dnbGUtcmV2aW5zfAorCisKKydiYWNrdXAnIG9wdGlvbiBkZWZhdWx0IGNoYW5nZWQJCQkJKmJhY2t1cC1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgJ2JhY2t1cCcgdXNlZCB0byBiZSBvbi4gIFRoaXMgcmVzdWx0ZWQgaW4gYSBiYWNrdXAgZmlsZQorYmVpbmcgbWFkZSB3aGVuIHRoZSBvcmlnaW5hbCBmaWxlIHdhcyBvdmVyd3JpdHRlbi4KKworTm93IHRoZSBkZWZhdWx0IGZvciAnYmFja3VwJyBpcyBvZmYuICBBcyBzb29uIGFzIHRoZSB3cml0aW5nIG9mIHRoZSBmaWxlIGhhcworc3VjY2Vzc2Z1bGx5IGZpbmlzaGVkLCB0aGUgYmFja3VwIGZpbGUgaXMgZGVsZXRlZC4gIElmIHlvdSB3YW50IHRvIGtlZXAgdGhlCitiYWNrdXAgZmlsZSwgc2V0ICdiYWNrdXAnIG9uIGluIHlvdXIgdmltcmMuICBUaGUgcmVhc29uIGZvciB0aGlzIGNoYW5nZSBpcwordGhhdCBtYW55IHBlb3BsZSBjb21wbGFpbmVkIHRoYXQgbGVhdmluZyBhIGJhY2t1cCBmaWxlIGJlaGluZCBpcyBub3QKK1ZpLWNvbXBhdGlibGUuCQkJCQkJfCdiYWNrdXAnfAorCisKK0V4dGVuc2lvbiBmb3IgYmFja3VwIGZpbGUgY2hhbmdlZAkJCSpiYWNrdXAtZXh0ZW5zaW9uKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBleHRlbnNpb24gZm9yIHRoZSBiYWNrdXAgZmlsZSB1c2VkIHRvIGJlICIuYmFrIi4gIFNpbmNlIG90aGVyIHByb2dyYW1zCithbHNvIHVzZSB0aGlzIGV4dGVuc2lvbiBhbmQgc29tZSB1c2VycyBtYWtlIGNvcGllcyB3aXRoIHRoaXMgZXh0ZW5zaW9uLCBpdCB3YXMKK2NoYW5nZWQgdG8gdGhlIGxlc3Mgb2J2aW91cyAifiIuICBBbm90aGVyIGFkdmFudGFnZSBpcyB0aGF0IHRoaXMgdGFrZXMgbGVzcworc3BhY2UsIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIHdvcmtpbmcgb24gYSBzeXN0ZW0gd2l0aCBzaG9ydCBmaWxlIG5hbWVzLiAgRm9yCitleGFtcGxlLCBvbiBNUy1ET1MgdGhlIGJhY2t1cCBmaWxlcyBmb3IgImxvbmdmaWxlLmMiIGFuZCAibG9uZ2ZpbGUuaCIgd291bGQKK2JvdGggYmVjb21lICJsb25nZmlsZS5iYWsiOyBub3cgdGhleSB3aWxsIGJlICJsb25nZmlsZS5jfiIgYW5kICJsb25nZmlsZS5ofiIuCisKK0lmIHlvdSBwcmVmZXIgdG8gdXNlICIuYmFrIiwgeW91IGNhbiBzZXQgdGhlICdiYWNrdXBleHQnIG9wdGlvbjogPgorCTpzZXQgYmV4PS5iYWsKKworCitTdHJ1Y3R1cmUgb2Ygc3dhcCBmaWxlIGNoYW5nZWQJCQkJKnN3YXBmaWxlLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNvbnRlbnRzIG9mIHRoZSBzd2FwIGZpbGUgd2VyZSBleHRlbmRlZCB3aXRoIHNldmVyYWwgcGFyYW1ldGVycy4gIFZpbQorc3RvcmVzIHRoZSB1c2VyIG5hbWUgYW5kIG90aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlZGl0ZWQgZmlsZSB0byBtYWtlCityZWNvdmVyeSBtb3JlIGVhc3kgYW5kIHRvIGJlIGFibGUgdG8ga25vdyB3aGVyZSB0aGUgc3dhcCBmaWxlIGNvbWVzIGZyb20uICBUaGUKK2ZpcnN0IHBhcnQgb2YgdGhlIHN3YXAgZmlsZSBjYW4gbm93IGJlIHVuZGVyc3Rvb2Qgb24gYSBtYWNoaW5lIHdpdGggYQorZGlmZmVyZW50IGJ5dGUgb3JkZXIgb3Igc2l6ZW9mKGludCkuICBXaGVuIHlvdSB0cnkgdG8gcmVjb3ZlciBhIGZpbGUgb24gc3VjaCBhCittYWNoaW5lLCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZSB0aGF0IHRoaXMgaXMgbm90IHBvc3NpYmxlLgorCitCZWNhdXNlIG9mIHRoaXMgY2hhbmdlLCBzd2FwIGZpbGVzIGNhbm5vdCBiZSBleGNoYW5nZWQgYmV0d2VlbiAzLjAgYW5kIDQuMC4KK0lmIHlvdSBoYXZlIGEgc3dhcCBmaWxlIGZyb20gYSBjcmFzaGVkIHNlc3Npb24gd2l0aCAzLjAsIHVzZSBWaW0gMy4wIHRvCityZWNvdmVyIHRoZSBmaWxlLS0tZG9uJ3QgdXNlIDQuMC4JCQl8c3dhcC1maWxlfAorCisKKyItdyBzY3JpcHRvdXQiIGFyZ3VtZW50IGNoYW5nZWQJCQkJKnNjcmlwdG91dC1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisidmltIC13IHNjcmlwdG91dCIgdXNlZCB0byBhcHBlbmQgdG8gdGhlIHNjcmlwdG91dCBmaWxlLiAgU2luY2UgdGhpcyB3YXMKK2lsbG9naWNhbCwgaXQgbm93IGNyZWF0ZXMgYSBuZXcgZmlsZS4gIEFuIGV4aXN0aW5nIGZpbGUgaXMgbm90IG92ZXJ3cml0dGVuCisodG8gYXZvaWQgZGVzdHJveWluZyBhbiBleGlzdGluZyBmaWxlIGZvciB0aG9zZSB3aG8gcmVseSBvbiB0aGUgYXBwZW5kaW5nKS4KK1tUaGlzIHdhcyByZW1vdmVkIGFnYWluIGxhdGVyXQkJCQkJfC13fAorCisKK0JhY2tzcGFjZSBhbmQgRGVsZXRlIGtleXMJCQkJKmJhY2tzcGFjZS1kZWxldGUqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIDMuMCBib3RoIHRoZSBkZWxldGUga2V5IGFuZCB0aGUgYmFja3NwYWNlIGtleSB3b3JrZWQgYXMgYSBiYWNrc3BhY2UgaW4KK2luc2VydCBtb2RlOyB0aGV5IGRlbGV0ZWQgdGhlIGNoYXJhY3RlciB0byB0aGUgbGVmdCBvZiB0aGUgY3Vyc29yLiAgSW4gNC4wIHRoZQorZGVsZXRlIGtleSBoYXMgYSBuZXcgZnVuY3Rpb246IGl0IGRlbGV0ZXMgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLCBqdXN0CitsaWtlIGl0IGRvZXMgb24gdGhlIGNvbW1hbmQtbGluZS4gIElmIHRoZSBjdXJzb3IgaXMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGluZQorYW5kICdicycgaXMgc2V0LCB0d28gbGluZXMgYXJlIGpvaW5lZC4JCQl8PERlbD58IHxpXzxEZWw+fAorCitJbiAzLjAgdGhlIGJhY2tzcGFjZSBrZXkgd2FzIGFsd2F5cyBkZWZpbmVkIGFzIENUUkwtSCBhbmQgZGVsZXRlIGFzIENUUkwtPy4KK0luIDQuMCB0aGUgY29kZSBmb3IgdGhlIGJhY2tzcGFjZSBhbmQgZGVsZXRlIGtleSBpcyBvYnRhaW5lZCBmcm9tIHRlcm1jYXAgb3IKK3Rlcm1saWIsIGFuZCBhZGp1c3RlZCBmb3IgdGhlICJzdHR5IGVyYXNlIiB2YWx1ZSBvbiBVbml4LiAgVGhpcyBoZWxwcyBwZW9wbGUKK3dobyBkZWZpbmUgdGhlIGVyYXNlIGNoYXJhY3RlciBhY2NvcmRpbmcgdG8gdGhlIGtleWJvYXJkIHRoZXkgYXJlIHdvcmtpbmcgb24uCisJCQkJCQkJfDxCUz58IHxpXzxCUz58CisKK0lmIHlvdSBwcmVmZXIgYmFja3NwYWNlIGFuZCBkZWxldGUgaW4gSW5zZXJ0IG1vZGUgdG8gaGF2ZSB0aGUgb2xkIGJlaGF2aW9yLAorcHV0IHRoaXMgbGluZSBpbiB5b3VyIHZpbXJjOgorCisJaW5vcmVtYXAgXj8gXkgKKworQW5kIHlvdSBtYXkgYWxzbyB3YW50IHRvIGFkZCB0aGVzZSwgdG8gZml4IHRoZSB2YWx1ZXMgZm9yIDxCUz4gYW5kIDxEZWw+OgorCisJc2V0IHRfa2I9XkgKKwlzZXQgdF9rRD1ePworCisoRW50ZXIgXkggd2l0aCBDVFJMLVYgQ1RSTC1IIGFuZCBePyB3aXRoIENUUkwtViBDVFJMLT8gb3IgPERlbD4uKQorCitJZiB0aGUgdmFsdWUgZm9yIHRfa2IgaXMgY29ycmVjdCwgYnV0IHRoZSB0X2tEIHZhbHVlIGlzIG5vdCwgdXNlIHRoZSAiOmZpeGRlbCIKK2NvbW1hbmQuICBJdCB3aWxsIHNldCB0X2tEIGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2YgdF9rYi4gIFRoaXMgaXMgdXNlZnVsIGlmCit5b3UgYXJlIHVzaW5nIHNldmVyYWwgZGlmZmVyZW50IHRlcm1pbmFscy4JCXw6Zml4ZGVsfAorCitXaGVuIF5IIGlzIG5vdCByZWNvZ25pemVkIGFzIDxCUz4gb3IgPERlbD4sIGl0IGlzIHVzZWQgbGlrZSBhIGJhY2tzcGFjZS4KKworCitFc2NhcGUgZm9yIHwgY2hhbmdlZAkJCQkJKmVzY2FwZS1iYXIqCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHRoZSAnYicgZmxhZyBpcyBwcmVzZW50IGluICdjcG9wdGlvbnMnLCB0aGUgYmFja3NsYXNoIGNhbm5vdCBiZSB1c2VkIHRvCitlc2NhcGUgJ3wnIGluIG1hcHBpbmcgYW5kIGFiYnJldmlhdGUgY29tbWFuZHMsIG9ubHkgQ1RSTC1WIGNhbi4gIFRoaXMgaXMKK1ZpLWNvbXBhdGlibGUuICBJZiB5b3Ugd29yayBpbiBWaS1jb21wYXRpYmxlIG1vZGUgYW5kIGhhZCB1c2VkICJcfCIgdG8gaW5jbHVkZQorYSBiYXIgaW4gYSBtYXBwaW5nLCB0aGlzIG5lZWRzIHRvIGJlIHJlcGxhY2VkIGJ5ICJeVnwiLiAgU2VlIHw6YmFyfC4KKworCitLZXkgY29kZXMgY2hhbmdlZAkJCQkJKmtleS1jb2Rlcy1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGtleSBjb2RlcyBoYXMgY2hhbmdlZCBkcmFtYXRpY2FsbHkuICBJbiAzLjAgYQorb25lLWJ5dGUgY29kZSB3YXMgdXNlZCB0byByZXByZXNlbnQgYSBrZXkuICBUaGlzIGNhdXNlZCBwcm9ibGVtcyB3aXRoCitkaWZmZXJlbnQgY2hhcmFjdGVycyBzZXRzIHRoYXQgYWxzbyB1c2VkIHRoZXNlIGNvZGVzLiAgSW4gNC4wIGEgdGhyZWUtYnl0ZQorY29kZSBpcyB1c2VkIHRoYXQgY2Fubm90IGJlIGNvbmZ1c2VkIHdpdGggYSBjaGFyYWN0ZXIuCQl8a2V5LW5vdGF0aW9ufAorCitJZiB5b3UgaGF2ZSB1c2VkIHRoZSBzaW5nbGUtYnl0ZSBrZXkgY29kZXMgaW4geW91ciB2aW1yYyBmb3IgbWFwcGluZ3MsIHlvdQord2lsbCBoYXZlIHRvIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSA0LjAgY29kZXMuICBJbnN0ZWFkIG9mIHVzaW5nIHRoZSB0aHJlZS1ieXRlCitjb2RlIGRpcmVjdGx5LCB5b3Ugc2hvdWxkIHVzZSB0aGUgc3ltYm9saWMgcmVwcmVzZW50YXRpb24gZm9yIHRoaXMgaW4gPD4uICBTZWUKK3RoZSB0YWJsZSBiZWxvdy4gIFRoZSB0YWJsZSBhbHNvIGxpc3RzIHRoZSBvbGQgbmFtZSwgYXMgaXQgd2FzIHVzZWQgaW4gdGhlIDMuMAorZG9jdW1lbnRhdGlvbi4KKworVGhlIGtleSBuYW1lcyBpbiA8PiBjYW4gYmUgdXNlZCBpbiBtYXBwaW5ncyBkaXJlY3RseS4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUKK3RvIGNvcHkvcGFzdGUgZXhhbXBsZXMgb3IgdHlwZSB0aGVtIGxpdGVyYWxseS4gIFRoZSA8PiBub3RhdGlvbiBoYXMgYmVlbgoraW50cm9kdWNlZCBmb3IgdGhpcyB8PD58LiAgVGhlICdCJyBhbmQgJzwnIGZsYWdzIG11c3Qgbm90IGJlIHByZXNlbnQgaW4KKydjcG9wdGlvbnMnIHRvIGVuYWJsZSB0aGlzIHRvIHdvcmsgfCdjcG9wdGlvbnMnfC4KKworb2xkIG5hbWUJbmV3IG5hbWUJICBvbGQgY29kZQlvbGQgTVMtRE9TIGNvZGUJfgorCQkJCWhleAlkZWMJaGV4CWRlYwl+Cis8RVNDPgkJPEVzYz4KKzxUQUI+CQk8VGFiPgorPExGPgkJPE5MPiA8TmV3TGluZT4gPExpbmVGZWVkPgorPFNQQUNFPgkJPFNwYWNlPgorPE5VTD4JCTxOdWw+Cis8QkVMTD4JCTxCZWxsPgorPEJTPgkJPEJTPiA8QmFja1NwYWNlPgorPElOU0VSVD4JPEluc2VydD4KKzxERUw+CQk8RGVsPiA8RGVsZXRlPgorPEhPTUU+CQk8SG9tZT4KKzxFTkQ+CQk8RW5kPgorPFBBR0VfVVA+CTxQYWdlVXA+Cis8UEFHRV9ET1dOPgk8UGFnZURvd24+CisKKzxDX1VQPgkJPFVwPgkJMHg4MAkxMjgJMHhiMAkxNzYKKzxDX0RPV04+CTxEb3duPgkJMHg4MQkxMjkgICAgIDB4YjEJMTc3Cis8Q19MRUZUPgk8TGVmdD4JCTB4ODIJMTMwICAgICAweGIyCTE3OAorPENfUklHSFQ+CTxSaWdodD4JCTB4ODMJMTMxICAgICAweGIzCTE3OQorPFNDX1VQPgkJPFMtVXA+CQkweDg0CTEzMiAgICAgMHhiNAkxODAKKzxTQ19ET1dOPgk8Uy1Eb3duPgkweDg1CTEzMyAgICAgMHhiNQkxODEKKzxTQ19MRUZUPgk8Uy1MZWZ0PgkweDg2CTEzNCAgICAgMHhiNgkxODIKKzxTQ19SSUdIVD4JPFMtUmlnaHQ+CTB4ODcJMTM1ICAgICAweGI3CTE4MworCis8RjE+CQk8RjE+CQkweDg4CTEzNiAgICAgMHhiOAkxODQKKzxGMj4JCTxGMj4JCTB4ODkJMTM3ICAgICAweGI5CTE4NQorPEYzPgkJPEYzPgkJMHg4YQkxMzggICAgIDB4YmEJMTg2Cis8RjQ+CQk8RjQ+CQkweDhiCTEzOSAgICAgMHhiYgkxODcKKzxGNT4JCTxGNT4JCTB4OGMJMTQwICAgICAweGJjCTE4OAorPEY2PgkJPEY2PgkJMHg4ZAkxNDEgICAgIDB4YmQJMTg5Cis8Rjc+CQk8Rjc+CQkweDhlCTE0MiAgICAgMHhiZQkxOTAKKzxGOD4JCTxGOD4JCTB4OGYJMTQzICAgICAweGJmCTE5MQorPEY5PgkJPEY5PgkJMHg5MAkxNDQgICAgIDB4YzAJMTkyCis8RjEwPgkJPEYxMD4JCTB4OTEJMTQ1ICAgICAweGMxCTE5MworCis8U0YxPgkJPFMtRjE+CQkweDkyCTE0NiAgICAgMHhjMgkxOTQKKzxTRjI+CQk8Uy1GMj4JCTB4OTMJMTQ3ICAgICAweGMzCTE5NQorPFNGMz4JCTxTLUYzPgkJMHg5NAkxNDggICAgIDB4YzQJMTk2Cis8U0Y0PgkJPFMtRjQ+CQkweDk1CTE0OSAgICAgMHhjNQkxOTcKKzxTRjU+CQk8Uy1GNT4JCTB4OTYJMTUwICAgICAweGM2CTE5OAorPFNGNj4JCTxTLUY2PgkJMHg5NwkxNTEgICAgIDB4YzcJMTk5Cis8U0Y3PgkJPFMtRjc+CQkweDk4CTE1MiAgICAgMHhjOAkyMDAKKzxTRjg+CQk8Uy1GOD4JCTB4OTkJMTUzICAgICAweGM5CTIwMQorPFNGOT4JCTxTLUY5PgkJMHg5YQkxNTQgICAgIDB4Y2EJMjAyCis8U0YxMD4JCTxTLUYxMD4JCTB4OWIJMTU1ICAgICAweGNiCTIwMworCis8SEVMUD4JCTxIZWxwPgkJMHg5YwkxNTYgICAgIDB4Y2MJMjA0Cis8VU5ETz4JCTxVbmRvPgkJMHg5ZAkxNTcgICAgIDB4Y2QJMjA1CisKKwkJKG5vdCB1c2VkKQkweDllCTE1OCAgICAgMHhjZQkyMDYKKwkJKG5vdCB1c2VkKQkweDlmCTE1OSAgICAgMHhjZgkyMDcKKworCitUZXJtaW5hbCBvcHRpb25zIGNoYW5nZWQJCQkJKnRlcm1jYXAtY2hhbmdlZCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbmFtZXMgb2YgdGhlIHRlcm1pbmFsIG9wdGlvbnMgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gbWF0Y2ggdGhlIHRlcm1jYXAgbmFtZXMKK29mIHRoZXNlIG9wdGlvbnMuICBBbGwgdGVybWluYWwgb3B0aW9ucyBub3cgaGF2ZSB0aGUgbmFtZSB0X3h4LCB3aGVyZSB4eCBpcwordGhlIHRlcm1jYXAgbmFtZS4gIE5vcm1hbGx5IHRoZXNlIG9wdGlvbnMgYXJlIG5vdCB1c2VkLCB1bmxlc3MgeW91IGhhdmUgYQordGVybWNhcCBlbnRyeSB0aGF0IGlzIHdyb25nIG9yIGluY29tcGxldGUsIG9yIHlvdSBoYXZlIHNldCB0aGUgaGlnaGxpZ2h0CitvcHRpb25zIHRvIGEgZGlmZmVyZW50IHZhbHVlLgkJCQl8dGVybWluYWwtb3B0aW9uc3wKKworTm90ZSB0aGF0IGZvciBzb21lIGtleXMgdGhlcmUgaXMgbm8gdGVybWNhcCBuYW1lLiAgVXNlIHRoZSA8PiB0eXBlIG9mIG5hbWUKK2luc3RlYWQsIHdoaWNoIGlzIGEgZ29vZCBpZGVhIGFueXdheS4KKworTm90ZSB0aGF0ICJ0X3RpIiBoYXMgYmVjb21lICJ0X21yIiAoaW52ZXJ0L3JldmVyc2Ugb3V0cHV0KSBhbmQgInRfdHMiIGhhcworYmVjb21lICJ0X3RpIiAoaW5pdCB0ZXJtaW5hbCBtb2RlKS4gIEJlIGNhcmVmdWwgd2hlbiB5b3UgdXNlICJ0X3RpIiEKKworb2xkIG5hbWUJbmV3IG5hbWUJbWVhbmluZwkJfgordF9jZGwJCXRfREwJCWRlbGV0ZSBudW1iZXIgb2YgbGluZXMJCSp0X2NkbCoKK3RfY2kJCXRfdmkJCWN1cnNvciBpbnZpc2libGUJCSp0X2NpKgordF9jaWwJCXRfQUwJCWluc2VydCBudW1iZXIgb2YgbGluZXMJCSp0X2NpbCoKK3RfY20JCXRfY20JCW1vdmUgY3Vyc29yCit0X2NyaQkJdF9SSQkJY3Vyc29yIG51bWJlciBvZiBjaGFycyByaWdodAkqdF9jcmkqCit0X2N2CQl0X3ZlCQljdXJzb3IgdmlzaWJsZQkJCSp0X2N2KgordF9jdnYJCXRfdnMJCWN1cnNvciB2ZXJ5IHZpc2libGUJCSp0X2N2dioKK3RfZGwJCXRfZGwJCWRlbGV0ZSBsaW5lCit0X2NzCQl0X2NzCQlzY3JvbGwgcmVnaW9uCit0X2VkCQl0X2NsCQljbGVhciBkaXNwbGF5CQkJKnRfZWQqCit0X2VsCQl0X2NlCQljbGVhciBsaW5lCQkJKnRfZWwqCit0X2lsCQl0X2FsCQlpbnNlcnQgbGluZQkJCSp0X2lsKgorCQl0X2RhCQlkaXNwbGF5IG1heSBiZSByZXRhaW5lZCBhYm92ZSB0aGUgc2NyZWVuCisJCXRfZGIJCWRpc3BsYXkgbWF5IGJlIHJldGFpbmVkIGJlbG93IHRoZSBzY3JlZW4KK3Rfa2UJCXRfa2UJCXB1dCB0ZXJtaW5hbCBvdXQgb2Yga2V5cGFkIHRyYW5zbWl0IG1vZGUKK3Rfa3MJCXRfa3MJCXB1dCB0ZXJtaW5hbCBpbiBrZXlwYWQgdHJhbnNtaXQgbW9kZQordF9tcwkJdF9tcwkJc2F2ZSB0byBtb3ZlIGN1cnNvciBpbiBoaWdobGlnaHQgbW9kZQordF9zZQkJdF9zZQkJbm9ybWFsIG1vZGUgKHVuZG8gdF9zbykKK3Rfc28JCXRfc28JCXNoaWZ0IG91dCAoc3RhbmRvdXQpIG1vZGUKK3RfdGkJCXRfbXIJCXJldmVyc2UgaGlnaGxpZ2h0Cit0X3RiCQl0X21kCQlib2xkIG1vZGUJCQkqdF90YioKK3RfdHAJCXRfbWUJCWhpZ2hsaWdodCBlbmQJCQkqdF90cCoKK3Rfc3IJCXRfc3IJCXNjcm9sbCByZXZlcnNlCit0X3RlCQl0X3RlCQlvdXQgb2YgdGVybWNhcCBtb2RlCit0X3RzCQl0X3RpCQlpbnRvIHRlcm1jYXAgbW9kZQkJKnRfdHNfb2xkKgordF92YgkJdF92YgkJdmlzdWFsIGJlbGwKK3RfY3NjCQl0X0NTCQljdXJzb3IgaXMgcmVsYXRpdmUgdG8gc2Nyb2xsIHJlZ2lvbiAqdF9jc2MqCisKK3Rfa3UJdF9rdQk8VXA+CQlhcnJvdyB1cAordF9rZAl0X2tkCTxEb3duPgkJYXJyb3cgZG93bgordF9rcgl0X2tyCTxSaWdodD4JCWFycm93IHJpZ2h0Cit0X2tsCXRfa2wJPExlZnQ+CQlhcnJvdyBsZWZ0Cit0X3NrdQkJPFMtVXA+CQlzaGlmdGVkIGFycm93IHVwCQkqdF9za3UqCit0X3NrZAkJPFMtRG93bj4Jc2hpZnRlZCBhcnJvdyBkb3duCQkqdF9za2QqCit0X3Nrcgl0XyVpCTxTLVJpZ2h0PglzaGlmdGVkIGFycm93IHJpZ2h0CQkqdF9za3IqCit0X3NrbAl0XyM0CTxTLUxlZnQ+CXNoaWZ0ZWQgYXJyb3cgbGVmdAkJKnRfc2tsKgordF9mMQl0X2sxCTxGMT4JCWZ1bmN0aW9uIGtleSAxCQkJKnRfZjEqCit0X2YyCXRfazIJPEYyPgkJZnVuY3Rpb24ga2V5IDIJCQkqdF9mMioKK3RfZjMJdF9rMwk8RjM+CQlmdW5jdGlvbiBrZXkgMwkJCSp0X2YzKgordF9mNAl0X2s0CTxGND4JCWZ1bmN0aW9uIGtleSA0CQkJKnRfZjQqCit0X2Y1CXRfazUJPEY1PgkJZnVuY3Rpb24ga2V5IDUJCQkqdF9mNSoKK3RfZjYJdF9rNgk8RjY+CQlmdW5jdGlvbiBrZXkgNgkJCSp0X2Y2KgordF9mNwl0X2s3CTxGNz4JCWZ1bmN0aW9uIGtleSA3CQkJKnRfZjcqCit0X2Y4CXRfazgJPEY4PgkJZnVuY3Rpb24ga2V5IDgJCQkqdF9mOCoKK3RfZjkJdF9rOQk8Rjk+CQlmdW5jdGlvbiBrZXkgOQkJCSp0X2Y5KgordF9mMTAJdF9rOwk8RjEwPgkJZnVuY3Rpb24ga2V5IDEwCQkJKnRfZjEwKgordF9zZjEJCTxTLUYxPgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgMQkJKnRfc2YxKgordF9zZjIJCTxTLUYyPgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgMgkJKnRfc2YyKgordF9zZjMJCTxTLUYzPgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgMwkJKnRfc2YzKgordF9zZjQJCTxTLUY0PgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgNAkJKnRfc2Y0KgordF9zZjUJCTxTLUY1PgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgNQkJKnRfc2Y1KgordF9zZjYJCTxTLUY2PgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgNgkJKnRfc2Y2KgordF9zZjcJCTxTLUY3PgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgNwkJKnRfc2Y3KgordF9zZjgJCTxTLUY4PgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgOAkJKnRfc2Y4KgordF9zZjkJCTxTLUY5PgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgOQkJKnRfc2Y5KgordF9zZjEwCQk8Uy1GMTA+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSAxMAkJKnRfc2YxMCoKK3RfaGVscAl0XyUxCTxIZWxwPgkJaGVscCBrZXkJCQkqdF9oZWxwKgordF91bmRvCXRfJjgJPFVuZG8+CQl1bmRvIGtleQkJCSp0X3VuZG8qCisKKworJ2Vycm9yZm9ybWF0JyBvcHRpb24gY2hhbmdlZAkJCQkqZXJyb3Jmb3JtYXQtY2hhbmdlZCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJ2Vycm9yZm9ybWF0JyBjYW4gbm93IGNvbnRhaW4gc2V2ZXJhbCBmb3JtYXRzLCBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgVGhlIGZpcnN0Citmb3JtYXQgdGhhdCBtYXRjaGVzIGlzIHVzZWQuICBUaGUgZGVmYXVsdCB2YWx1ZXMgaGF2ZSBiZWVuIGFkanVzdGVkIHRvIGNhdGNoCit0aGUgbW9zdCBjb21tb24gZm9ybWF0cy4JCQkJfGVycm9yZm9ybWF0fAorCitJZiB5b3UgaGF2ZSBhIGZvcm1hdCB0aGF0IGNvbnRhaW5zIGEgY29tbWEsIGl0IG5lZWRzIHRvIGJlIHByZWNlZGVkIHdpdGggYQorYmFja3NsYXNoLiAgVHlwZSB0d28gYmFja3NsYXNoZXMsIGJlY2F1c2UgdGhlICI6c2V0IiBjb21tYW5kIHdpbGwgZWF0IG9uZS4KKworCisnZ3JhcGhpYycgb3B0aW9uIGdvbmUJCQkJCSpncmFwaGljLW9wdGlvbi1nb25lKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnZ3JhcGhpYycgb3B0aW9uIHdhcyB1c2VkIHRvIG1ha2UgdGhlIGNoYXJhY3RlcnMgYmV0d2VlbiA8fj4gYW5kIDB4YTAKK2Rpc3BsYXkgZGlyZWN0bHkgb24gdGhlIHNjcmVlbi4gIE5vdyB0aGUgJ2lzcHJpbnQnIG9wdGlvbiB0YWtlcyBjYXJlIG9mIHRoaXMKK3dpdGggbWFueSBtb3JlIHBvc3NpYmlsaXRpZXMuICBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzIHRoZSBzYW1lOyB5b3Ugb25seSBuZWVkCit0byBsb29rIGludG8gdGhpcyBpZiB5b3UgcHJldmlvdXNseSBzZXQgdGhlICdncmFwaGljJyBvcHRpb24gaW4geW91ciB2aW1yYy4KKwkJCQkJCQl8J2lzcHJpbnQnfAorCisKKyd5YW5rZW5kb2ZsaW5lJyBvcHRpb24gZ29uZQkJCQkqeWUtb3B0aW9uLWdvbmUqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICd5YW5rZW5kb2ZsaW5lJyBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gIEluc3RlYWQgeW91IGNhbiBqdXN0IHVzZQorCTptYXAgWSB5JAorCisKKydpY29uJyBhbmQgJ3RpdGxlJyBkZWZhdWx0IHZhbHVlIGNoYW5nZWQJCSppY29uLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAndGl0bGUnIG9wdGlvbiBpcyBub3cgb25seSBzZXQgYnkgZGVmYXVsdCBpZiB0aGUgb3JpZ2luYWwgdGl0bGUgY2FuIGJlCityZXN0b3JlZC4gIEF2b2lkcyAiVGhhbmtzIGZvciBmbHlpbmcgVmltIiB0aXRsZXMuICBJZiB5b3Ugd2FudCB0aGVtIGFueXdheSwKK3B1dCAiOnNldCB0aXRsZSIgaW4geW91ciB2aW1yYy4JCQkJfCd0aXRsZSd8CisKK1RoZSBkZWZhdWx0IGZvciAnaWNvbicgbm93IGRlcGVuZHMgb24gdGhlIHBvc3NpYmlsaXR5IG9mIHJlc3RvcmluZyB0aGUKK29yaWdpbmFsIHZhbHVlLCBqdXN0IGxpa2UgJ3RpdGxlJy4gIElmIHlvdSBkb24ndCBsaWtlIHlvdXIgaWNvbiB0aXRsZXMgdG8gYmUKK2NoYW5nZWQsIGFkZCB0aGlzIGxpbmUgdG8geW91ciB2aW1yYzoJCQl8J2ljb24nfAorCTpzZXQgbm9pY29uCisKKworJ2hpZ2hsaWdodCcgb3B0aW9uIGNoYW5nZWQJCQkJKmhpZ2hsaWdodC1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICdpJyBmbGFnIG5vdyBtZWFucyBpdGFsaWMgaGlnaGxpZ2h0aW5nLCBpbnN0ZWFkIG9mIGludmVydC4gIFRoZSAncicgZmxhZworaXMgdXNlZCBmb3IgcmV2ZXJzZSBoaWdobGlnaHRpbmcsIHdoaWNoIGlzIHdoYXQgJ2knIHVzZWQgdG8gYmUuICBOb3JtYWxseSB5b3UKK3dvbid0IHNlZSB0aGUgZGlmZmVyZW5jZSwgYmVjYXVzZSBpdGFsaWMgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIG9uIG1vc3QKK3Rlcm1pbmFscyBhbmQgcmV2ZXJzZSBtb2RlIGlzIHVzZWQgYXMgYSBmYWxsYmFjay4JfCdoaWdobGlnaHQnfAorCitXaGVuIGFuIG9jY2FzaW9uIGlzIG5vdCBwcmVzZW50IGluICdoaWdobGlnaHQnLCB1c2UgdGhlIG1vZGUgZnJvbSB0aGUgZGVmYXVsdAordmFsdWUgZm9yICdoaWdobGlnaHQnLCBpbnN0ZWFkIG9mIHJldmVyc2UgbW9kZS4KKworCisndGlsZGVvcCcgYW5kICd3ZWlyZGludmVydCcgc2hvcnQgbmFtZXMgY2hhbmdlZAkJKnNob3J0LW5hbWUtY2hhbmdlZCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlbmFtZWQgJ3RvJyAoYWJicmV2aWF0aW9uIGZvciAndGlsZGVvcCcpIHRvICd0b3AnLgl8J3RpbGRlb3AnfAorUmVuYW1lZCAnd2knIChhYmJyZXZpYXRpb24gZm9yICd3ZWlyZGludmVydCcpIHRvICd3aXYnLgl8J3dlaXJkaW52ZXJ0J3wKKworVGhpcyB3YXMgZG9uZSBiZWNhdXNlIFZpIHVzZXMgJ3dpJyBhcyB0aGUgc2hvcnQgbmFtZSBmb3IgJ3dpbmRvdycgYW5kICd0bycgYXMKK3RoZSBzaG9ydCBuYW1lIGZvciAndGltZW91dCcuICBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IHRyeSBzZXR0aW5nIHRoZXNlCitvcHRpb25zLCB5b3Ugd29uJ3QgZ2V0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCB0aGUgZWZmZWN0IHdpbGwgYmUgZGlmZmVyZW50LgorCisKK1VzZSBvZiAidiIsICJWIiBhbmQgIkNUUkwtViIgaW4gVmlzdWFsIG1vZGUJCSp1c2UtdmlzdWFsLWNtZHMqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIFZpc3VhbCBtb2RlLCAidiIsICJWIiwgYW5kICJDVFJMLVYiIHVzZWQgdG8gZW5kIFZpc3VhbCBtb2RlLiAgTm93IHRoaXMKK2hhcHBlbnMgb25seSBpZiB0aGUgVmlzdWFsIG1vZGUgd2FzIGluIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUuICBPdGhlcndpc2UgdGhlCit0eXBlIG9mIFZpc3VhbCBtb2RlIGlzIGNoYW5nZWQuICBOb3cgb25seSBFU0MgY2FuIGJlIHVzZWQgaW4gYWxsIGNpcmN1bXN0YW5jZXMKK3RvIGVuZCBWaXN1YWwgbW9kZSB3aXRob3V0IGRvaW5nIGFueXRoaW5nLgkJfHZfVnwKKworCitDVFJMLUIgaW4gSW5zZXJ0IG1vZGUgcmVtb3ZlZAkJCQkqdG9nZ2xlLXJldmlucyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NUUkwtQiBpbiBJbnNlcnQgbW9kZSB1c2VkIHRvIHRvZ2dsZSB0aGUgJ3Jldmlucycgb3B0aW9uLiAgSWYgeW91IGRvbid0IGtub3cKK3RoaXMgYW5kIGFjY2lkZW50YWxseSBoaXQgQ1RSTC1CLCBpdCBpcyB2ZXJ5IGRpZmZpY3VsdCB0byBmaW5kIG91dCBob3cgdG8gdW5kbworaXQuICBTaW5jZSBoYXJkbHkgYW55Ym9keSB1c2VzIHRoaXMgZmVhdHVyZSwgaXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIElmCit5b3Ugd2FudCB0byB1c2UgaXQsIGRlZmluZSBSSUdIVExFRlQgaW4gZmVhdHVyZS5oIGJlZm9yZSBjb21waWxpbmcuIHwncmV2aW5zJ3wKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZlcnNpb241LnR4dCBiL3J1bnRpbWUvZG9jL3ZlcnNpb241LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjUzNDYzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmVyc2lvbjUudHh0CkBAIC0wLDAgKzEsNzgxMyBAQAorKnZlcnNpb241LnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEphbiAxNworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCitXZWxjb21lIHRvIFZpbSBWZXJzaW9uIDUuMCEKKworVGhpcyBkb2N1bWVudCBsaXN0cyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gNC54IGFuZCBWaW0gNS4wLgorQWx0aG91Z2ggNS4wIGlzIG1lbnRpb25lZCBoZXJlLCB0aGlzIGlzIGFsc28gZm9yIHZlcnNpb24gNS4xLCA1LjIsIGV0Yy4uCitTZWUgfHZpX2RpZmYudHh0fCBmb3IgYW4gb3ZlcnZpZXcgb2YgZGlmZmVyZW5jZXMgYmV0d2VlbiBWaSBhbmQgVmltIDUuMC4KK1NlZSB8dmVyc2lvbjQudHh0fCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gMy4wIGFuZCBWaW0gNC4wLgorCitJTkNPTVBBVElCTEU6CQkJCXxpbmNvbXBhdGlibGUtNXwKKworRGVmYXVsdCB2YWx1ZSBmb3IgJ2NvbXBhdGlibGUnIGNoYW5nZWQJfGNwLWRlZmF1bHR8CitUZXh0IGZvcm1hdHRpbmcgY29tbWFuZCAiUSIgY2hhbmdlZAl8US1jb21tYW5kLWNoYW5nZWR8CitDb21tYW5kLWxpbmUgYXJndW1lbnRzIGNoYW5nZWQJCXxjbWRsaW5lLWNoYW5nZWR8CitBdXRvY29tbWFuZHMgYXJlIGtlcHQJCQl8YXV0b2NtZHMta2VwdHwKK1VzZSBvZiAnaGlkZGVuJyBjaGFuZ2VkCQkJfGhpZGRlbi1jaGFuZ2VkfAorVGV4dCBvYmplY3QgY29tbWFuZHMgY2hhbmdlZAkJfHRleHQtb2JqZWN0cy1jaGFuZ2VkfAorWC1XaW5kb3dzIFJlc291cmNlcyByZW1vdmVkCQl8eC1yZXNvdXJjZXN8CitVc2Ugb2YgJFZJTQkJCQl8JFZJTS11c2V8CitVc2Ugb2YgJEhPTUUgZm9yIE1TLURPUyBhbmQgV2luMzIJfCRIT01FLXVzZXwKK1RhZ3MgZmlsZSBmb3JtYXQgY2hhbmdlZAkJfHRhZ3MtZmlsZS1jaGFuZ2VkfAorT3B0aW9ucyBjaGFuZ2VkCQkJCXxvcHRpb25zLWNoYW5nZWR8CitDVFJMLUIgaW4gSW5zZXJ0IG1vZGUgZ29uZQkJfGlfQ1RSTC1CLWdvbmV8CisKK05FVyBGRUFUVVJFUzoJCQkJfG5ldy01fAorCitTeW50YXggaGlnaGxpZ2h0aW5nCQkJfG5ldy1oaWdobGlnaHRpbmd8CitCdWlsdC1pbiBzY3JpcHQgbGFuZ3VhZ2UJCXxuZXctc2NyaXB0fAorUGVybCBhbmQgUHl0aG9uIHN1cHBvcnQJCQl8bmV3LXBlcmwtcHl0aG9ufAorV2luMzIgR1VJIHZlcnNpb24JCQl8YWRkZWQtd2luMzItR1VJfAorVk1TIHZlcnNpb24JCQkJfGFkZGVkLVZNU3wKK0JlT1MgdmVyc2lvbgkJCQl8YWRkZWQtQmVPU3wKK01hY2ludG9zaCBHVUkgdmVyc2lvbgkJCXxhZGRlZC1NYWN8CitNb3JlIFZpIGNvbXBhdGlibGUJCQl8bW9yZS1jb21wYXRpYmxlfAorUmVhZCBpbnB1dCBmcm9tIHN0ZGluCQkJfHJlYWQtc3RkaW58CitSZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybnMJCXxhZGRlZC1yZWdleHB8CitPdmVybG9hZGVkIHRhZ3MJCQkJfHRhZy1vdmVybG9hZGVkfAorTmV3IGNvbW1hbmRzCQkJCXxuZXctY29tbWFuZHN8CitOZXcgb3B0aW9ucwkJCQl8YWRkZWQtb3B0aW9uc3wKK05ldyBjb21tYW5kLWxpbmUgYXJndW1lbnRzCQl8YWRkZWQtY21kbGluZS1hcmdzfAorVmFyaW91cyBhZGRpdGlvbnMJCQl8YWRkZWQtdmFyaW91c3wKKworSU1QUk9WRU1FTlRTCQkJCXxpbXByb3ZlbWVudHMtNXwKKworQ09NUElMRSBUSU1FIENIQU5HRVMJCQl8Y29tcGlsZS1jaGFuZ2VzLTV8CisKK0JVRyBGSVhFUwkJCQl8YnVnLWZpeGVzLTV8CisKK1ZFUlNJT04gNS4xCQkJfHZlcnNpb24tNS4xfAorQ2hhbmdlZAkJCQkJfGNoYW5nZWQtNS4xfAorQWRkZWQJCQkJCXxhZGRlZC01LjF8CitGaXhlZAkJCQkJfGZpeGVkLTUuMXwKKworVkVSU0lPTiA1LjIJCQl8dmVyc2lvbi01LjJ8CitMb25nIGxpbmVzIGVkaXRhYmxlCQkJfGxvbmctbGluZXN8CitGaWxlIGJyb3dzZXIgYWRkZWQJCQl8ZmlsZS1icm93c2VyLTUuMnwKK0RpYWxvZ3MgYWRkZWQJCQkJfGRpYWxvZ3MtYWRkZWR8CitQb3B1cCBtZW51IGFkZGVkCQkJfHBvcHVwLW1lbnUtYWRkZWR8CitTZWxlY3QgbW9kZSBhZGRlZAkJCXxuZXctU2VsZWN0LW1vZGV8CitTZXNzaW9uIGZpbGVzIGFkZGVkCQkJfG5ldy1zZXNzaW9uLWZpbGVzfAorVXNlciBkZWZpbmVkIGZ1bmN0aW9ucyBhbmQgY29tbWFuZHMJfG5ldy11c2VyLWRlZmluZWR8CitOZXcgaW50ZXJmYWNlcwkJCQl8aW50ZXJmYWNlcy01LjJ8CitOZXcgcG9ydHMJCQkJfHBvcnRzLTUuMnwKK011bHRpLWJ5dGUgc3VwcG9ydAkJCXxuZXctbXVsdGktYnl0ZXwKK05ldyBmdW5jdGlvbnMJCQkJfG5ldy1mdW5jdGlvbnMtNS4yfAorTmV3IG9wdGlvbnMJCQkJfG5ldy1vcHRpb25zLTUuMnwKK05ldyBFeCBjb21tYW5kcwkJCQl8bmV3LWV4LWNvbW1hbmRzLTUuMnwKK0NoYW5nZWQJCQkJCXxjaGFuZ2VkLTUuMnwKK0FkZGVkCQkJCQl8YWRkZWQtNS4yfAorRml4ZWQJCQkJCXxmaXhlZC01LjJ8CisKK1ZFUlNJT04gNS4zCQkJfHZlcnNpb24tNS4zfAorQ2hhbmdlZAkJCQkJfGNoYW5nZWQtNS4zfAorQWRkZWQJCQkJCXxhZGRlZC01LjN8CitGaXhlZAkJCQkJfGZpeGVkLTUuM3wKKworVkVSU0lPTiA1LjQJCQl8dmVyc2lvbi01LjR8CitSdW50aW1lIGRpcmVjdG9yeSBpbnRyb2R1Y2VkCQl8bmV3LXJ1bnRpbWUtZGlyfAorRmlsZXR5cGUgaW50cm9kdWNlZAkJCXxuZXctZmlsZXR5cGUtNS40fAorVmltIHNjcmlwdCBsaW5lIGNvbnRpbnVhdGlvbgkJfG5ldy1saW5lLWNvbnRpbnVhdGlvbnwKK0ltcHJvdmVkIHNlc3Npb24gZmlsZXMJCQl8aW1wcm92ZWQtc2Vzc2lvbnN8CitBdXRvY29tbWFuZHMgaW1wcm92ZWQJCQl8aW1wcm92ZWQtYXV0b2NtZHMtNS40fAorRW5jcnlwdGlvbgkJCQl8bmV3LWVuY3J5cHRpb258CitHVEsgR1VJIHBvcnQJCQkJfG5ldy1HVEstR1VJfAorTWVudSBjaGFuZ2VzCQkJCXxtZW51LWNoYW5nZXMtNS40fAorVmltaW5mbyBpbXByb3ZlZAkJCXxpbXByb3ZlZC12aW1pbmZvfAorVmFyaW91cyBuZXcgY29tbWFuZHMJCQl8bmV3LWNvbW1hbmRzLTUuNHwKK1ZhcmlvdXMgbmV3IG9wdGlvbnMJCQl8bmV3LW9wdGlvbnMtNS40fAorVmltIHNjcmlwdHMJCQkJfG5ldy1zY3JpcHQtNS40fAorQXZvaWQgaGl0LWVudGVyIHByb21wdAkJCXxhdm9pZC1oaXQtZW50ZXJ8CitJbXByb3ZlZCBxdWlja2ZpeAkJCXxpbXByb3ZlZC1xdWlja2ZpeHwKK1JlZ3VsYXIgZXhwcmVzc2lvbnMJCQl8cmVnZXhwLWNoYW5nZXMtNS40fAorQ2hhbmdlZAkJCQkJfGNoYW5nZWQtNS40fAorQWRkZWQJCQkJCXxhZGRlZC01LjR8CitGaXhlZAkJCQkJfGZpeGVkLTUuNHwKKworVkVSU0lPTiA1LjUJCQl8dmVyc2lvbi01LjV8CitDaGFuZ2VkCQkJCQl8Y2hhbmdlZC01LjV8CitBZGRlZAkJCQkJfGFkZGVkLTUuNXwKK0ZpeGVkCQkJCQl8Zml4ZWQtNS41fAorCitWRVJTSU9OIDUuNgkJCXx2ZXJzaW9uLTUuNnwKK0NoYW5nZWQJCQkJCXxjaGFuZ2VkLTUuNnwKK0FkZGVkCQkJCQl8YWRkZWQtNS42fAorRml4ZWQJCQkJCXxmaXhlZC01LjZ8CisKK1ZFUlNJT04gNS43CQkJfHZlcnNpb24tNS43fAorQ2hhbmdlZAkJCQkJfGNoYW5nZWQtNS43fAorQWRkZWQJCQkJCXxhZGRlZC01Ljd8CitGaXhlZAkJCQkJfGZpeGVkLTUuN3wKKworVkVSU0lPTiA1LjgJCQl8dmVyc2lvbi01Ljh8CitDaGFuZ2VkCQkJCQl8Y2hhbmdlZC01Ljh8CitBZGRlZAkJCQkJfGFkZGVkLTUuOHwKK0ZpeGVkCQkJCQl8Zml4ZWQtNS44fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkgSU5DT01QQVRJQkxFCQkqaW5jb21wYXRpYmxlLTUqCisKK0RlZmF1bHQgdmFsdWUgZm9yICdjb21wYXRpYmxlJyBjaGFuZ2VkCQkJKmNwLWRlZmF1bHQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWaW0gdmVyc2lvbiA1LjAgdHJpZXMgdG8gYmUgbW9yZSBWaSBjb21wYXRpYmxlLiAgVGhpcyBoZWxwcyBwZW9wbGUgd2hvIHVzZSBWaW0KK2FzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgVmksIGJ1dCBjYXVzZXMgc29tZSB0aGluZ3MgdG8gYmUgaW5jb21wYXRpYmxlCit3aXRoIHZlcnNpb24gNC54LgorCitJbiB2ZXJzaW9uIDQueCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlICdjb21wYXRpYmxlJyBvcHRpb24gd2FzIG9mZi4gIE5vdyB0aGUKK2RlZmF1bHQgaXMgb24uICBUaGUgZmlyc3QgdGhpbmcgeW91IHdpbGwgbm90aWNlIGlzIHRoYXQgdGhlICJ1IiBjb21tYW5kIHVuZG9lcworaXRzZWxmLiAgT3RoZXIgc2lkZSBlZmZlY3RzIHdpbGwgYmUgdGhhdCBtYXBwaW5ncyBtYXkgd29yayBkaWZmZXJlbnRseSBvciBub3QKK3dvcmsgYXQgYWxsLgorCitTaW5jZSBhIGxvdCBvZiBwZW9wbGUgc3dpdGNoaW5nIGZyb20gVmltIDQueCB0byA1LjAgd2lsbCBmaW5kIHRoaXMgYW5ub3lpbmcsCit0aGUgJ2NvbXBhdGlibGUnIG9wdGlvbiBpcyBzd2l0Y2hlZCBvZmYgaWYgVmltIGZpbmRzIGEgdmltcmMgZmlsZS4gIFRoaXMgaXMgYQorYml0IG9mIG1hZ2ljIHRvIG1ha2Ugc3VyZSB0aGF0IDkwJSBvZiB0aGUgVmltIHVzZXJzIHdpbGwgbm90IGJlIGJpdHRlbiBieQordGhpcyBjaGFuZ2UuCisKK1doYXQgZG9lcyB0aGlzIG1lYW4/CistIElmIHlvdSBwcmVmZXIgdG8gcnVuIGluICdjb21wYXRpYmxlJyBtb2RlIGFuZCBkb24ndCBoYXZlIGEgdmltcmMgZmlsZSwgeW91CisgIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCistIElmIHlvdSBwcmVmZXIgdG8gcnVuIGluICdub2NvbXBhdGlibGUnIG1vZGUgYW5kIGRvIGhhdmUgYSB2aW1yYyBmaWxlLCB5b3UKKyAgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKy0gSWYgeW91IHByZWZlciB0byBydW4gaW4gJ2NvbXBhdGlibGUnIG1vZGUgYW5kIGRvIGhhdmUgYSB2aW1yYyBmaWxlLCB5b3UKKyAgc2hvdWxkIHB1dCB0aGlzIGxpbmUgZmlyc3QgaW4geW91ciB2aW1yYyBmaWxlOiA+CisJOnNldCBjb21wYXRpYmxlCistIElmIHlvdSBwcmVmZXIgdG8gcnVuIGluICdub2NvbXBhdGlibGUnIG1vZGUgYW5kIGRvbid0IGhhdmUgYSB2aW1yYyBmaWxlLAorICB5b3UgY2FuIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgIC0gQ3JlYXRlIGFuIGVtcHR5IHZpbXJjIGZpbGUgKGUuZy46ICJ+Ly52aW1yYyIgZm9yIFVuaXgpLgorICAgIC0gUHV0IHRoaXMgY29tbWFuZCBpbiB5b3VyIC5leHJjIGZpbGUgb3IgJEVYSU5JVDogPgorCQk6c2V0IG5vY29tcGF0aWJsZQorPCAgIC0gU3RhcnQgVmltIHdpdGggdGhlICItTiIgYXJndW1lbnQuCisKK0lmIHlvdSBhcmUgbmV3IHRvIFZpIGFuZCBWaW0sIHVzaW5nICdub2NvbXBhdGlibGUnIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLAorYmVjYXVzZSBWaSBoYXMgYSBsb3Qgb2YgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMsIHdoaWNoIGFyZSBhdm9pZGVkIGJ5IHRoaXMKK3NldHRpbmcuICBTZWUgJ2NvbXBhdGlibGUnLgorCitJZiB5b3UgbGlrZSBzb21lIHRoaW5ncyBmcm9tICdjb21wYXRpYmxlJyBhbmQgc29tZSBub3QsIHlvdSBjYW4gdHVuZSB0aGUKK2NvbXBhdGliaWxpdHkgd2l0aCAnY3BvcHRpb25zJy4KKworV2hlbiB5b3UgaW52b2tlIFZpbSBhcyAiZXgiIG9yICJnZXgiLCBWaW0gYWx3YXlzIHN0YXJ0cyBpbiBjb21wYXRpYmxlIG1vZGUuCisKKworVGV4dCBmb3JtYXR0aW5nIGNvbW1hbmQgIlEiIGNoYW5nZWQJCQkqUS1jb21tYW5kLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgIlEiIGNvbW1hbmQgZm9ybWVybHkgZm9ybWF0dGVkIGxpbmVzIHRvIHRoZSB3aWR0aCB0aGUgJ3RleHR3aWR0aCcgb3B0aW9uCitzcGVjaWZpZXMuICBUaGUgY29tbWFuZCBmb3IgdGhpcyBpcyBub3cgImdxIiAoc2VlIHxncXwgZm9yIG1vcmUgaW5mbykuICBUaGUKK3JlYXNvbiBmb3IgdGhpcyBjaGFuZ2UgaXMgdGhhdCAiUSIgaXMgdGhlIHN0YW5kYXJkIFZpIGNvbW1hbmQgdG8gZW50ZXIgIkV4IgorbW9kZSwgYW5kIFZpbSBub3cgZG9lcyBpbiBmYWN0IGhhdmUgYW4gIkV4IiBtb2RlIChzZWUgfFF8IGZvciBtb3JlIGluZm8pLgorCitJZiB5b3Ugc3RpbGwgd2FudCB0byB1c2UgIlEiIGZvciBmb3JtYXR0aW5nLCB1c2UgdGhpcyBtYXBwaW5nOiA+CisJOm5vcmVtYXAgUSBncQorQW5kIGlmIHlvdSBhbHNvIHdhbnQgdG8gdXNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mICJRIjogPgorCTpub3JlbWFwIGdRIFEKKworCitDb21tYW5kLWxpbmUgYXJndW1lbnRzIGNoYW5nZWQJCQkJKmNtZGxpbmUtY2hhbmdlZCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb21tYW5kLWxpbmUgZmlsZS1hcmd1bWVudHMgYW5kIG9wdGlvbi1hcmd1bWVudHMgY2FuIG5vdyBiZSBtaXhlZC4gIFlvdSBjYW4KK2dpdmUgb3B0aW9ucyBhZnRlciB0aGUgZmlsZSBuYW1lcy4gIEV4YW1wbGU6ID4KKyAgIHZpbSBtYWluLmMgLWcKKworVGhpcyBpcyBub3QgcG9zc2libGUgd2hlbiBlZGl0aW5nIGEgZmlsZSB0aGF0IHN0YXJ0cyB3aXRoIGEgJy0nLiAgVXNlIHRoZSAiLS0iCithcmd1bWVudCB0aGVuIHwtLS18OiA+CisgICB2aW0gLWcgLS0gLW1haW4uYworCisiLXYiIG5vdyBtZWFucyB0byBzdGFydCBFeCBpbiBWaSBtb2RlLCB1c2UgIi1SIiBmb3IgcmVhZC1vbmx5IG1vZGUuCitvbGQ6ICJ2aW0gLXYgZmlsZSIJfC12fAorbmV3OiAidmltIC1SIGZpbGUiCXwtUnwKKworIi1lIiBub3cgbWVhbnMgdG8gc3RhcnQgVmkgaW4gRXggbW9kZSwgdXNlICItcSIgZm9yIHF1aWNrZml4Lgorb2xkOiAidmltIC1lIGVycm9yZmlsZSIJfC1lfAorbmV3OiAidmltIC1xIGVycm9yZmlsZSIgfC1xfAorCisiLXMiIGluIEV4IG1vZGUgbm93IG1lYW5zIHRvIHJ1biBpbiBzaWxlbnQgKGJhdGNoKSBtb2RlLiB8LXMtZXh8CisKKyIteCIgcmVzZXJ2ZWQgZm9yIGNyeXB0LCB1c2UgIi1mIiB0byBhdm9pZCBzdGFydGluZyBhIG5ldyBDTEkgKEFtaWdhKS4KK29sZDogInZpbSAteCBmaWxlIgl8LXh8CituZXc6ICJ2aW0gLWYgZmlsZSIJfC1mfAorCitWaW0gYWxsb3dzIHVwIHRvIHRlbiAiK2NtZCIgYW5kICItYyBjbWQiIGFyZ3VtZW50cy4gIFByZXZpb3VzbHkgVmltIGV4ZWN1dGVkCitvbmx5IHRoZSBsYXN0IG9uZS4KKworIi1uIiBub3cgb3ZlcnJpZGVzIGFueSBzZXR0aW5nIGZvciAndXBkYXRlY291bnQnIGluIGEgdmltcmMgZmlsZSwgYnV0IG5vdCBpbgorYSBndmltcmMgZmlsZS4KKworCitBdXRvY29tbWFuZHMgYXJlIGtlcHQJCQkJCSphdXRvY21kcy1rZXB0KgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlZm9yZSB2ZXJzaW9uIDUuMCwgYXV0b2NvbW1hbmRzIHdpdGggdGhlIHNhbWUgZXZlbnQsIGZpbGUgbmFtZSBwYXR0ZXJuLCBhbmQKK2NvbW1hbmQgY291bGQgYXBwZWFyIG9ubHkgb25jZS4gIFRoaXMgd2FzIGZpbmUgZm9yIHNpbXBsZSBhdXRvY29tbWFuZHMgKGxpa2UKK3NldHRpbmcgb3B0aW9uIHZhbHVlcyksIGJ1dCBmb3IgbW9yZSBjb21wbGljYXRlZCBhdXRvY29tbWFuZHMsIHdoZXJlIHRoZSBzYW1lCitjb21tYW5kIG1pZ2h0IGFwcGVhciB0d2ljZSwgdGhpcyByZXN0cmljdGlvbiBjYXVzZWQgcHJvYmxlbXMuICBUaGVyZWZvcmUKK1ZpbSBzdG9yZXMgYWxsIGF1dG9jb21tYW5kcyBhbmQga2VlcHMgdGhlbSBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IGFyZSBkZWZpbmVkLgorCitUaGUgbW9zdCBvYnZpb3VzIHNpZGUgZWZmZWN0IG9mIHRoaXMgY2hhbmdlIGlzIHRoYXQgd2hlbiB5b3Ugc291cmNlIGEgdmltcmMKK2ZpbGUgdHdpY2UsIHRoZSBhdXRvY29tbWFuZHMgaW4gaXQgd2lsbCBiZSBkZWZpbmVkIHR3aWNlLiAgVG8gYXZvaWQgdGhpcywgZG8KK29uZSBvZiB0aGVzZToKKworLSBSZW1vdmUgYW55IGF1dG9jb21tYW5kcyB0aGF0IG1pZ2h0IHBvdGVudGlhbGx5IGRlZmluZWQgdHdpY2UgYmVmb3JlCisgIGRlZmluaW5nIHRoZW0uICBFeGFtcGxlOiA+CisJOmF1ISAqICouZXh0CisJOmF1IEJ1ZkVudGVyICouZXh0IC4uLgorCistIFB1dCB0aGUgYXV0b2NvbW1hbmRzIGluc2lkZSBhbiAiOmlmIiBjb21tYW5kLiAgRXhhbXBsZTogPgorCWlmICFleGlzdHMoImRpZF9leHRfYXV0b2NtZHMiKQorCSAgbGV0IGRpZF9leHRfYXV0b2NtZHMgPSAxCisJICBhdXRvY21kIEJ1ZkVudGVyICouZXh0IC4uLgorCWVuZGlmCisKKy0gUHV0IHlvdXIgYXV0b2NvbW1hbmRzIGluIGEgZGlmZmVyZW50IGF1dG9jb21tYW5kIGdyb3VwIHNvIHlvdSBjYW4gcmVtb3ZlCisgIHRoZW0gYmVmb3JlIGRlZmluaW5nIHRoZW0gfDphdWdyb3VwfDogPgorCWF1Z3JvdXAgdW5jb21wcmVzcworCSAgYXUhCisJICBhdSBCdWZSZWFkUG9zdCAqLmd6IC4uLgorCWF1Z3JvdXAgRU5ECisKKworVXNlIG9mICdoaWRkZW4nIGNoYW5nZWQJCQkJCSpoaWRkZW4tY2hhbmdlZCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHZlcnNpb24gNC54LCBvbmx5IHNvbWUgY29tbWFuZHMgdXNlZCB0aGUgJ2hpZGRlbicgb3B0aW9uLiAgTm93IGFsbCBjb21tYW5kcwordXNlcyBpdCB3aGVuZXZlciBhIGJ1ZmZlciBkaXNhcHBlYXJzIGZyb20gYSB3aW5kb3cuCisKK1ByZXZpb3VzbHkgeW91IGNvdWxkIGRvICI6YnVmIHh4eCIgaW4gYSBjaGFuZ2VkIGJ1ZmZlciBhbmQgdGhhdCBidWZmZXIgd291bGQKK3RoZW4gYmVjb21lIGhpZGRlbi4gIE5vdyB5b3UgbXVzdCBzZXQgdGhlICdoaWRkZW4nIG9wdGlvbiBmb3IgdGhpcyB0byB3b3JrLgorCitUaGUgbmV3IGJlaGF2aW9yIGlzIHNpbXBsZXI6IHdoZXRoZXIgVmltIGhpZGVzIGJ1ZmZlcnMgbm8gbG9uZ2VyIGRlcGVuZHMgb24KK3RoZSBzcGVjaWZpYyBjb21tYW5kIHRoYXQgeW91IHVzZS4KKy0gd2l0aCAnaGlkZGVuJyBub3Qgc2V0LCB5b3UgbmV2ZXIgZ2V0IGhpZGRlbiBidWZmZXJzLiAgRXhjZXB0aW9ucyBhcmUgdGhlCisgICI6aGlkZSIgYW5kICI6Y2xvc2UhIiBjb21tYW5kcyBhbmQsIGluIHJhcmUgY2FzZXMsIHdoZXJlIHlvdSB3b3VsZCBvdGhlcndpc2UKKyAgbG9zZSBjaGFuZ2VzIHRvIHRoZSBidWZmZXIuCistIFdpdGggJ2hpZGRlbicgc2V0LCB5b3UgYWxtb3N0IG5ldmVyIHVubG9hZCBhIGJ1ZmZlci4gIEV4Y2VwdGlvbnMgYXJlIHRoZQorICAiOmJ1bmxvYWQiIG9yICI6YmRlbCIgY29tbWFuZHMuCisKKyI6YnVmZmVyIiBub3cgc3VwcG9ydHMgYSAiISI6IGFiYW5kb24gY2hhbmdlcyBpbiBjdXJyZW50IGJ1ZmZlci4gIFNvIGRvCisiOmJuZXh0IiwgIjpicmV3aW5kIiwgZXRjLgorCisKK1RleHQgb2JqZWN0IGNvbW1hbmRzIGNoYW5nZWQJCQkJKnRleHQtb2JqZWN0cy1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUZXh0IG9iamVjdCBjb21tYW5kcyBoYXZlIG5ldyBuYW1lcy4gIFRoaXMgYWxsb3dzIG1vcmUgdGV4dCBvYmplY3RzIGFuZCBtYWtlcworY2hhcmFjdGVycyBhdmFpbGFibGUgZm9yIG90aGVyIFZpc3VhbCBtb2RlIGNvbW1hbmRzLiAgU2luY2Ugbm8gbW9yZSBzaW5nbGUKK2NoYXJhY3RlcnMgd2VyZSBhdmFpbGFibGUsIHRleHQgb2JqZWN0cyBuYW1lcyBub3cgcmVxdWlyZSB0d28gY2hhcmFjdGVycy4KK1RoZSBmaXJzdCBvbmUgaXMgYWx3YXlzICdpJyBvciAnYScuCisJT0xECU5FVwl+CisJYQlhdwlhIHdvcmQJCQl8dl9hd3wKKwlBCWFXCWEgV09SRAkJCXx2X2FXfAorCXMJYXMJYSBzZW50ZW5jZQkJfHZfYXN8CisJcAlhcAlhIHBhcmFncmFwaAkJfHZfYXB8CisJUwlhYglhICgpIGJsb2NrCQl8dl9hYnwKKwlQCWFCCWEge30gYmxvY2sJCXx2X2FCfAorCitUaGVyZSBpcyBhbm90aGVyIHNldCBvZiB0ZXh0IG9iamVjdHMgdGhhdCBzdGFydHMgd2l0aCAiaSIsIGZvciAiaW5uZXIiLiAgVGhlc2UKK3NlbGVjdCB0aGUgc2FtZSBvYmplY3RzLCBidXQgZXhjbHVkZSB3aGl0ZSBzcGFjZS4KKworCitYLVdpbmRvd3MgUmVzb3VyY2VzIHJlbW92ZWQJCQkJKngtcmVzb3VyY2VzKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVmltIG5vIGxvbmdlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIFggcmVzb3VyY2VzOgorLSBib2xkQ29sb3IKKy0gaXRhbGljQ29sb3IKKy0gdW5kZXJsaW5lQ29sb3IKKy0gY3Vyc29yQ29sb3IKKworVmltIG5vdyB1c2VzIGhpZ2hsaWdodCBncm91cHMgdG8gc2V0IGNvbG9ycy4gIFRoaXMgYXZvaWRzIHRoZSBjb25mdXNpb24gb2YKK3VzaW5nIGEgYm9sZCBGb250LCB3aGljaCB3b3VsZCBpbXBseSBhIGNlcnRhaW4gY29sb3IuICBTZWUgfDpoaWdobGlnaHR8IGFuZAorfGd1aS1yZXNvdXJjZXN8LgorCisKK1VzZSBvZiAkVklNCQkJCQkJKiRWSU0tdXNlKgorLS0tLS0tLS0tLS0KKworVmltIG5vdyB1c2VzIHRoZSBWSU0gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gZmluZCBhbGwgVmltIHN5c3RlbSBmaWxlcy4gIFRoaXMKK2luY2x1ZGVzIHRoZSBnbG9iYWwgdmltcmMsIGd2aW1yYywgYW5kIG1lbnUudmltIGZpbGVzIGFuZCBhbGwgb24tbGluZSBoZWxwCithbmQgc3ludGF4IGZpbGVzLiAgU2VlIHwkVklNfC4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiA1LjQsIHwkVklNUlVOVElNRXwgY2FuCithbHNvIGJlIHVzZWQuCitGb3IgVW5peCwgVmltIHNldHMgYSBkZWZhdWx0IHZhbHVlIGZvciAkVklNIHdoZW4gZG9pbmcgIm1ha2UgaW5zdGFsbCIuCitXaGVuICRWSU0gaXMgbm90IHNldCwgaXRzIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGRpcmVjdG9yeSBmcm9tICdoZWxwZmlsZScsCitleGNsdWRpbmcgIi9kb2MvaGVscC50eHQiLgorCisKK1VzZSBvZiAkSE9NRSBmb3IgTVMtRE9TIGFuZCBXaW4zMgkJCSokSE9NRS11c2UqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIE1TLURPUyBhbmQgV2luMzIgdmVyc2lvbnMgb2YgVmltIG5vdyBmaXJzdCBjaGVjayAkSE9NRSB3aGVuIHNlYXJjaGluZyBmb3IKK2EgdmltcmMgb3IgZXhyYyBmaWxlIGFuZCBmb3IgcmVhZGluZy9zdG9yaW5nIHRoZSB2aW1pbmZvIGZpbGUuICBQcmV2aW91c2x5IFZpbQordXNlZCAkVklNIGZvciB0aGVzZSBzeXN0ZW1zLCBidXQgdGhpcyBjYXVzZXMgdHJvdWJsZSBvbiBhIHN5c3RlbSB3aXRoIHNldmVyYWwKK3VzZXJzLiAgTm93IFZpbSB1c2VzICRWSU0gb25seSB3aGVuICRIT01FIGlzIG5vdCBzZXQgb3IgdGhlIGZpbGUgaXMgbm90IGZvdW5kCitpbiAkSE9NRS4gIFNlZSB8X3ZpbXJjfC4KKworCitUYWdzIGZpbGUgZm9ybWF0IGNoYW5nZWQJCQkJKnRhZ3MtZmlsZS1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09ubHkgVGFicyBhcmUgYWxsb3dlZCB0byBzZXBhcmF0ZSBmaWVsZHMgaW4gYSB0YWdzIGZpbGUuICBUaGlzIGFsbG93cyBmb3IKK3NwYWNlcyBpbiBhIGZpbGUgbmFtZSBhbmQgaXMgc3RpbGwgVmkgY29tcGF0aWJsZS4gIEluIHByZXZpb3VzIHZlcnNpb25zIG9mCitWaW0sIGFueSB3aGl0ZSBzcGFjZSB3YXMgYWxsb3dlZCB0byBzZXBhcmF0ZSB0aGUgZmllbGRzLiAgSWYgeW91IGhhdmUgYSBmaWxlCit3aGljaCBkb2Vzbid0IHVzZSBhIHNpbmdsZSBUYWIgYmV0d2VlbiBmaWVsZHMsIGVkaXQgdGhlIHRhZ3MgZmlsZSBhbmQgZXhlY3V0ZQordGhpcyBjb21tYW5kOiA+CisJOiVzL1woXFMqXClcc1wrXChcUypcKVxzXCtcKC4qXCkvXDFcdFwyXHRcMy8KKworCitPcHRpb25zIGNoYW5nZWQJCQkJCQkqb3B0aW9ucy1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IHZhbHVlIG9mICdlcnJvcmZpbGUnIGhhcyBjaGFuZ2VkIGZyb20gImVycm9ycy52aW0iIHRvICJlcnJvcnMuZXJyIi4KK1RoZSByZWFzb24gaXMgdGhhdCBvbmx5IFZpbSBzY3JpcHRzIHNob3VsZCBoYXZlIHRoZSAiLnZpbSIgZXh0ZW5zaW9ucy4KKworVGhlICI6bWFrZSIgY29tbWFuZCBubyBsb25nZXIgdXNlcyB0aGUgJ2Vycm9yZmlsZScgb3B0aW9uLiAgVGhpcyBwcmV2ZW50cyB0aGUKK291dHB1dCBvZiB0aGUgIjptYWtlIiBjb21tYW5kIGZyb20gb3ZlcndyaXRpbmcgYSBtYW51YWxseSBzYXZlZCBlcnJvciBmaWxlLgorIjptYWtlIiB1c2VzIHRoZSAnbWFrZWVmJyBvcHRpb24gaW5zdGVhZC4gIFRoaXMgYWxzbyBhbGxvd3MgZm9yIGdlbmVyYXRpbmcgYQordW5pcXVlIG5hbWUsIHRvIHByZXZlbnQgY29uY3VycmVudGx5IHJ1bm5pbmcgIjptYWtlIiBjb21tYW5kcyBmcm9tIG92ZXJ3cml0aW5nCitlYWNoIG90aGVyJ3MgZmlsZXMuCisKK1dpdGggJ2luc2VydG1vZGUnIHNldCwgYSBmZXcgbW9yZSB0aGluZ3MgY2hhbmdlOgorLSA8RXNjPiBpbiBOb3JtYWwgbW9kZSBnb2VzIHRvIEluc2VydCBtb2RlLgorLSA8RXNjPiBpbiBJbnNlcnQgbW9kZSBkb2Vzbid0IGxlYXZlIEluc2VydCBtb2RlLgorLSBXaGVuIGRvaW5nICI6c2V0IGltIiwgZ28gdG8gSW5zZXJ0IG1vZGUgaW1tZWRpYXRlbHkuCisKK1ZpbSBjb25zaWRlcnMgYSBidWZmZXIgdG8gYmUgY2hhbmdlZCB3aGVuIHRoZSAnZmlsZWZvcm1hdCcgKGZvcm1lcmx5IHRoZQorJ3RleHRtb2RlJyBvcHRpb24pIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBidWZmZXIncyBpbml0aWFsIGZvcm1hdC4KKworCitDVFJMLUIgaW4gSW5zZXJ0IG1vZGUgZ29uZQkJCQkqaV9DVFJMLUItZ29uZSoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gVmltIHdhcyBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwgZmVhdHVyZSwgeW91IGNvdWxkIHVzZSBDVFJMLUIgdG8KK3RvZ2dsZSB0aGUgJ3Jldmlucycgb3B0aW9uLiAgVW5mb3J0dW5hdGVseSwgc29tZSBwZW9wbGUgaGl0IHRoZSAnQicga2V5CithY2NpZGVudGFsbHkgd2hlbiB0cnlpbmcgdG8gdHlwZSBDVFJMLVYgb3IgQ1RSTC1OIGFuZCB0aGVuIGRpZG4ndCBrbm93IGhvdyB0bwordW5kbyB0aGlzLiAgU2luY2UgdG9nZ2xpbmcgdGhlICdyZXZpbnMnIG9wdGlvbiBjYW4gZWFzaWx5IGJlIGRvbmUgd2l0aCB0aGUKK21hcHBpbmcgYmVsb3csIHRoaXMgdXNlIG9mIHRoZSBDVFJMLUIga2V5IGlzIGRpc2FibGVkLiAgWW91IGNhbiBzdGlsbCB1c2UgdGhlCitDVFJMLV8ga2V5IGZvciB0aGlzIHxpX0NUUkwtX3wuID4KKyAgIDppbWFwIDxDLUI+IDxDLU8+OnNldCByZXZpbnMhPENSPgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkgTkVXIEZFQVRVUkVTCQkqbmV3LTUqCisKK1N5bnRheCBoaWdobGlnaHRpbmcJCQkJCSpuZXctaGlnaGxpZ2h0aW5nKgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWaW0gbm93IGhhcyBhIHZlcnkgZmxleGlibGUgd2F5IHRvIGhpZ2hsaWdodGluZyBqdXN0IGFib3V0IGFueSB0eXBlIG9mIGZpbGUuCitTZWUgfHN5bnRheHwuICBTdW1tYXJ5OiA+CisgICA6c3ludGF4IG9uCisKK0NvbG9ycyBhbmQgYXR0cmlidXRlcyBjYW4gYmUgc2V0IGZvciB0aGUgc3ludGF4IGhpZ2hsaWdodGluZywgYW5kIGFsc28gZm9yCitvdGhlciBoaWdobGlnaHRlZCBpdGVtcyB3aXRoIHRoZSAnOicgZmxhZyBpbiB0aGUgJ2hpZ2hsaWdodCcgb3B0aW9uLiAgQWxsCitoaWdobGlnaHRlZCBpdGVtcyBhcmUgYXNzaWduZWQgYSBoaWdobGlnaHQgZ3JvdXAgd2hpY2ggc3BlY2lmaWVzIHRoZWlyCitoaWdobGlnaHRpbmcuICBTZWUgfDpoaWdobGlnaHR8LiAgVGhlIGRlZmF1bHQgY29sb3JzIGhhdmUgYmVlbiBpbXByb3ZlZC4KKworWW91IGNhbiB1c2UgdGhlICJOb3JtYWwiIGdyb3VwIHRvIHNldCB0aGUgZGVmYXVsdCBmb3JlL2JhY2tncm91bmQgY29sb3JzIGZvciBhCitjb2xvciB0ZXJtaW5hbC4gIEZvciB0aGUgR1VJLCB5b3UgY2FuIHVzZSB0aGlzIGdyb3VwIHRvIHNwZWNpZnkgdGhlIGZvbnQsIHRvby4KKworVGhlICIyaHRtbC52aW0iIHNjcmlwdCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFueSBmaWxlIHRoYXQgaGFzIHN5bnRheAoraGlnaGxpZ2h0aW5nIHRvIEhUTUwuICBUaGUgY29sb3JzIHdpbGwgYmUgZXhhY3RseSB0aGUgc2FtZSBhcyBob3cgeW91IHNlZSB0aGVtCitpbiBWaW0uICBXaXRoIGEgSFRNTCB2aWV3ZXIgeW91IGNhbiBhbHNvIHByaW50IHRoZSBmaWxlIHdpdGggY29sb3JzLgorCisKK0J1aWx0LWluIHNjcmlwdCBsYW5ndWFnZQkJCQkqbmV3LXNjcmlwdCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGZldyBleHRyYSBjb21tYW5kcyBhbmQgYW4gZXhwcmVzc2lvbiBldmFsdWF0b3IgZW5hYmxlIHlvdSB0byB3cml0ZSBzaW1wbGUKK2J1dCBwb3dlcmZ1bCBzY3JpcHRzLiAgQ29tbWFuZHMgaW5jbHVkZSAiOmlmIiBhbmQgIjp3aGlsZSIuICBFeHByZXNzaW9ucyBjYW4KK21hbmlwdWxhdGUgbnVtYmVycyBhbmQgc3RyaW5ncy4gIFlvdSBjYW4gdXNlIHRoZSAnPScgcmVnaXN0ZXIgdG8gaW5zZXJ0CitkaXJlY3RseSB0aGUgcmVzdWx0IG9mIGFuIGV4cHJlc3Npb24uICBTZWUgfGV4cHJlc3Npb258LgorCisKK1BlcmwgYW5kIFB5dGhvbiBzdXBwb3J0CQkJCQkqbmV3LXBlcmwtcHl0aG9uKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVmltIGNhbiBjYWxsIFBlcmwgY29tbWFuZHMgd2l0aCAiOnBlcmxkbyIsICI6cGVybCIsIGV0Yy4gIFNlZSB8cGVybHwuCitQYXRjaGVzIG1hZGUgYnkgU3ZlbiBWZXJkb29sYWVnZSBhbmQgTWF0dCBHZXJhc3NpbW9mZi4KKworVmltIGNhbiBjYWxsIFB5dGhvbiBjb21tYW5kcyB3aXRoICI6cHl0aG9uIiBhbmQgIjpweWZpbGUiLiAgU2VlIHxweXRob258LgorCitCb3RoIG9mIHRoZXNlIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorCisKK1dpbjMyIEdVSSB2ZXJzaW9uCQkJCQkqYWRkZWQtd2luMzItR1VJKgorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEdVSSBoYXMgYmVlbiBwb3J0ZWQgdG8gTVMgV2luZG93cyA5NSBhbmQgTlQuICBBbGwgdGhlIGZlYXR1cmVzIG9mIHRoZSBYMTEKK0dVSSBhcmUgYXZhaWxhYmxlIHRvIFdpbmRvd3MgdXNlcnMgbm93LiAgfGd1aS13MzJ8CitUaGlzIGFsc28gZml4ZXMgcHJvYmxlbXMgd2l0aCBydW5uaW5nIHRoZSBXaW4zMiBjb25zb2xlIHZlcnNpb24gdW5kZXIgV2luZG93cworOTUsIHdoZXJlIGNvbnNvbGUgc3VwcG9ydCBoYXMgYWx3YXlzIGJlZW4gYmFkLgorVGhlcmUgaXMgYWxzbyBhIHZlcnNpb24gdGhhdCBzdXBwb3J0cyBPTEUgYXV0b21hdGlvbiBpbnRlcmZhY2UuICB8aWZfb2xlLnR4dHwKK1ZpbSBjYW4gYmUgaW50ZWdyYXRlZCB3aXRoIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIHVzaW5nIHRoZSBWaXNWaW0gRExMLgorSXQgaXMgcG9zc2libGUgdG8gcHJvZHVjZSBhIERMTCB2ZXJzaW9uIG9mIGd2aW0gd2l0aCBCb3JsYW5kIEMrKyAoQWFyb24pLgorCisKK1ZNUyB2ZXJzaW9uCQkJCQkJKmFkZGVkLVZNUyoKKy0tLS0tLS0tLS0tCisKK1ZpbSBjYW4gbm93IGFsc28gYmUgdXNlZCBvbiBWTVMgc3lzdGVtcy4gIFBvcnQgZG9uZSBieSBIZW5rIEVsYmVycy4KK1RoaXMgaGFzIG5vdCBiZWVuIHRlc3RlZCBtdWNoLCBidXQgaXQgc2hvdWxkIHdvcmsuCitTb3JyeSwgbm8gZG9jdW1lbnRhdGlvbiEKKworCitCZU9TIHZlcnNpb24JCQkJCQkqYWRkZWQtQmVPUyoKKy0tLS0tLS0tLS0tLQorCitWaW0gY2FuIGJlIHVzZWQgb24gQmVPUyBzeXN0ZW1zIChpbmNsdWRpbmcgdGhlIEJlQm94KS4gIChPbGFmIFNlaWJlcnQpCitTZWUgfG9zX2Jlb3MudHh0fC4KKworCitNYWNpbnRvc2ggR1VJIHZlcnNpb24JCQkJCSphZGRlZC1NYWMqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVmltIGNhbiBub3cgYmUgdXNlZCBvbiB0aGUgTWFjaW50b3NoLiAgKERhbnkgU3QtQW1hbnQpCitJdCBoYXMgbm90IGJlZW4gdGVzdGVkIG11Y2ggeWV0LCBiZSBjYXJlZnVsIQorU2VlIHxvc19tYWMudHh0fC4KKworCitNb3JlIFZpIGNvbXBhdGlibGUJCQkJCSptb3JlLWNvbXBhdGlibGUqCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgaXMgbm93IGEgcmVhbCBFeCBtb2RlLiAgU3RhcnRlZCB3aXRoIHRoZSAiUSIgY29tbWFuZCwgb3IgYnkgY2FsbGluZyB0aGUKK2V4ZWN1dGFibGUgImV4IiBvciAiZ2V4Ii4gIHxFeC1tb2RlfAorCitBbHdheXMgYWxsb3cgbXVsdGktbGV2ZWwgdW5kbywgYWxzbyBpbiBWaSBjb21wYXRpYmxlIG1vZGUuICBXaGVuIHRoZSAndScgZmxhZworaW4gJ2Nwb3B0aW9ucycgaXMgaW5jbHVkZWQsIENUUkwtUiBpcyB1c2VkIGZvciByZXBlYXRpbmcgdGhlIHVuZG8gb3IgcmVkbworKGxpa2UgIi4iIGluIE52aSkuCisKKworUmVhZCBpbnB1dCBmcm9tIHN0ZGluCQkJCQkqcmVhZC1zdGRpbioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHVzaW5nIHRoZSAiLSIgY29tbWFuZC1saW5lIGFyZ3VtZW50LCBWaW0gcmVhZHMgaXRzIHRleHQgaW5wdXQgZnJvbSBzdGRpbi4KK1RoaXMgY2FuIGJlIHVzZWQgZm9yIHB1dHRpbmcgVmltIGF0IHRoZSBlbmQgb2YgYSBwaXBlOiA+CisgICBncmVwICJeYS4qIiAqLmMgfCB2aW0gLQorU2VlIHwtLXwuCisKKworUmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5zCQkJCSphZGRlZC1yZWdleHAqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkZWQgc3BlY2lmeWluZyBhIHJhbmdlIGZvciB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgb2YgYSBhdG9tOiAiXHthLGJ9Ii4gfC9ce3wKK0FkZGVkIHRoZSAic2hvcnRlc3QgbWF0Y2giIHJlZ2V4cCAiXHstfSIgKFdlYmIpLgorQWRkZWQgIlxzIiwgbWF0Y2hlcyBhIHdoaXRlIGNoYXJhY3Rlci4gIENhbiByZXBsYWNlICJbIFx0XSIuCQl8L1xzfAorQWRkZWQgIlxTIiwgbWF0Y2hlcyBhIG5vbi13aGl0ZSBjaGFyYWN0ZXIuICBDYW4gcmVwbGFjZSAiW14gXHRdIi4JfC9cU3wKKworCitPdmVybG9hZGVkIHRhZ3MJCQkJCQkqdGFnLW92ZXJsb2FkZWQqCistLS0tLS0tLS0tLS0tLS0KKworV2hlbiB1c2luZyBhIGxhbmd1YWdlIGxpa2UgQysrLCB0aGVyZSBjYW4gYmUgc2V2ZXJhbCB0YWdzIGZvciB0aGUgc2FtZQordGFnbmFtZS4gIENvbW1hbmRzIGhhdmUgYmVlbiBhZGRlZCB0byBiZSBhYmxlIHRvIGp1bXAgdG8gYW55IG9mIHRoZXNlCitvdmVybG9hZGVkIHRhZ3M6Cit8OnRzZWxlY3R8CUxpc3QgbWF0Y2hpbmcgdGFncywgYW5kIGp1bXAgdG8gb25lIG9mIHRoZW0uCit8OnN0c2VsZWN0fAlJZGVtLCBhbmQgc3BsaXQgd2luZG93LgorfGdfQ1RSTC1dfAlEbyAiOnRzZWxlY3QiIHdpdGggdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4KKworCUFmdGVyICI6dGEge3RhZ25hbWV9IiB3aXRoIG11bHRpcGxlIG1hdGNoZXM6Cit8OnRuZXh0fAlHbyB0byBuZXh0IG1hdGNoaW5nIHRhZy4KK3w6dHByZXZpb3VzfAlHbyB0byBwcmV2aW91cyBtYXRjaGluZyB0YWcuCit8OnRyZXdpbmR8CUdvIHRvIGZpcnN0IG1hdGNoaW5nIHRhZy4KK3w6dGxhc3R8CUdvIHRvIGxhc3QgbWF0Y2hpbmcgdGFnLgorCitUaGUgIjp0YWciIGNvbW1hbmQgbm93IGFsc28gYWNjZXB0cyB3aWxkY2FyZHMuICBXaGVuIGRvaW5nIGNvbW1hbmQtbGluZQorY29tcGxldGlvbiBvbiB0YWdzLCBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nIGlzIGFsc28gYXZhaWxhYmxlIChhdCB0aGUgZW5kKS4KKworCitOZXcgY29tbWFuZHMJCQkJCQkqbmV3LWNvbW1hbmRzKgorLS0tLS0tLS0tLS0tCisKK3w6YW1lbnV8CURlZmluZSBtZW51cyBmb3IgYWxsIG1vZGVzLCBpbnNlcnRpbmcgYSBDVFJMLU8gZm9yIEluc2VydAorCQltb2RlLCBFU0MgZm9yIFZpc3VhbCBhbmQgQ1RSTC1DIGZvciBDbWRsaW5lIG1vZGUuICAiYW1lbnUiIGlzCisJCXVzZWQgZm9yIHRoZSBkZWZhdWx0IG1lbnVzIGFuZCB0aGUgU3ludGF4IG1lbnUuCisKK3w6YXVncm91cHwJU2V0IGdyb3VwIHRvIGJlIHVzZWQgZm9yIGZvbGxvd2luZyBhdXRvY29tbWFuZHMuICBBbGxvd3MgdGhlCisJCWdyb3VwaW5nIG9mIGF1dG9jb21tYW5kcyB0byBlbmFibGUgZGVsZXRpb24gb2YgYSBzcGVjaWZpYworCQlncm91cC4KKworfDpjcmV3aW5kfAlHbyB0byBmaXJzdCBlcnJvci4KK3w6Y2xhc3R8CUdvIHRvIGxhc3QgZXJyb3IuCisKK3w6ZG9hdXRvYWxsfAlFeGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgYWxsIGxvYWRlZCBidWZmZXJzLgorCit8OmVjaG98CQlFY2hvIGl0cyBhcmd1bWVudCwgd2hpY2ggaXMgYW4gZXhwcmVzc2lvbi4gIENhbiBiZSB1c2VkIHRvCisJCWRpc3BsYXkgbWVzc2FnZXMgd2hpY2ggaW5jbHVkZSB2YXJpYWJsZXMuCisKK3w6ZXhlY3V0ZXwJRXhlY3V0ZSBpdHMgYXJndW1lbnQsIHdoaWNoIGlzIGFuIGV4cHJlc3Npb24uICBDYW4gYmUgdXNlZCB0bworCQlidWlsdCB1cCBhbiBFeCBjb21tYW5kIHdpdGggYW55dGhpbmcuCisKK3w6aGlkZXwJCVdvcmtzIGxpa2UgIjpjbG9zZSIuCisKK3w6aWZ8CQlDb25kaXRpb25hbCBleGVjdXRpb24sIGZvciBidWlsdC1pbiBzY3JpcHQgbGFuZ3VhZ2UuCisKK3w6aW50cm98CVNob3cgaW50cm9kdWN0b3J5IG1lc3NhZ2UuICBUaGlzIGlzIGFsd2F5cyBleGVjdXRlZCB3aGVuIFZpbQorCQlpcyBzdGFydGVkIHdpdGhvdXQgZmlsZSBhcmd1bWVudHMuCisKK3w6bGV0fAkJQXNzaWduIGEgdmFsdWUgdG8gYW4gaW50ZXJuYWwgdmFyaWFibGUuCisKK3w6b21hcHwJCU1hcCBvbmx5IGluIG9wZXJhdG9yLXBlbmRpbmcgbW9kZS4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIG1hcAorCQl0ZXh0LW9iamVjdCBjb21tYW5kcy4KKworfDpyZWRpcnwJUmVkaXJlY3Qgb3V0cHV0IG9mIG1lc3NhZ2VzIHRvIGEgZmlsZS4KKworfDp1cGRhdGV8CVdyaXRlIHdoZW4gYnVmZmVyIGhhcyBjaGFuZ2VkLgorCit8OndoaWxlfAlXaGlsZS1sb29wIGZvciBidWlsdC1pbiBzY3JpcHQgbGFuZ3VhZ2UuCisKK1Zpc3VhbCBtb2RlOgorfHZfT3wJCSJPIiBpbiBWaXN1YWwgYmxvY2sgbW9kZSwgbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgb3RoZXIgY29ybmVyCisJCWhvcml6b250YWxseS4KK3x2X0R8CQkiRCIgaW4gVmlzdWFsIGJsb2NrIG1vZGUgZGVsZXRlcyB0aWxsIGVuZCBvZiBsaW5lLgorCitJbnNlcnQgbW9kZToKK3xpX0NUUkwtXXwJVHJpZ2dlcnMgYWJicmV2aWF0aW9uLCB3aXRob3V0IGluc2VydGluZyBhbnkgY2hhcmFjdGVyLgorCisKK05ldyBvcHRpb25zCQkJCQkJKmFkZGVkLW9wdGlvbnMqCistLS0tLS0tLS0tLQorCisnYmFja2dyb3VuZCcJVXNlZCBmb3Igc2VsZWN0aW5nIGhpZ2hsaWdodCBjb2xvciBkZWZhdWx0cy4gIEFsc28gdXNlZCBpbgorCQkic3ludGF4LnZpbSIgZm9yIHNlbGVjdGluZyB0aGUgc3ludGF4IGNvbG9ycy4gIE9mdGVuIHNldAorCQlhdXRvbWF0aWNhbGx5LCBkZXBlbmRpbmcgb24gdGhlIHRlcm1pbmFsIHVzZWQuCisKKydjb21wbGV0ZScJU3BlY2lmaWVzIGhvdyBJbnNlcnQgbW9kZSBjb21wbGV0aW9uIHdvcmtzLgorCisnZXZlbnRpZ25vcmUnCU1ha2VzIGl0IHBvc3NpYmxlIHRvIGlnbm9yZSBhdXRvY29tbWFuZHMgdGVtcG9yYXJpbHkuCisKKydmaWxlZm9ybWF0JwlDdXJyZW50IGZpbGUgZm9ybWF0LiAgUmVwbGFjZXMgJ3RleHRtb2RlJy4KKydmaWxlZm9ybWF0cycJUG9zc2libGUgZmlsZSBmb3JtYXRzLiAgUmVwbGFjZXMgJ3RleHRhdXRvJy4KKwkJTmV3IGlzIHRoYXQgdGhpcyBhbHNvIHN1cHBvcnRzIE1hY2ludG9zaCBmb3JtYXQ6IEEgc2luZ2xlIDxDUj4KKwkJc2VwYXJhdGVzIGxpbmVzLgorCQlUaGUgZGVmYXVsdCBmb3IgJ2ZpbGVmb3JtYXRzJyBmb3IgTVMtRE9TLCBXaW4zMiBhbmQgT1MvMiBpcworCQkiZG9zLHVuaXgiLCBhbHNvIHdoZW4gJ2NvbXBhdGlibGUnIHNldC4gIFVuaXggdHlwZSBmaWxlcworCQlkaWRuJ3Qgd29yayBhbnl3YXkgd2hlbiAnZmlsZWZvcm1hdHMnIHdhcyBlbXB0eS4KKworJ2d1aWN1cnNvcicJU2V0IHRoZSBjdXJzb3Igc2hhcGUgYW5kIGJsaW5raW5nIGluIHZhcmlvdXMgbW9kZXMuCisJCURlZmF1bHQgaXMgdG8gYWRqdXN0IHRoZSBjdXJzb3IgZm9yIEluc2VydCBhbmQgUmVwbGFjZSBtb2RlLAorCQlhbmQgd2hlbiBhbiBvcGVyYXRvciBpcyBwZW5kaW5nLiAgQmxpbmtpbmcgaXMgZGVmYXVsdCBvbi4KKworJ2ZrbWFwJwkJRmFyc2kga2V5IG1hcHBpbmcuCisKKydobHNlYXJjaCcJSGlnaGxpZ2h0IGFsbCBtYXRjaGVzIHdpdGggdGhlIGxhc3QgdXNlZCBzZWFyY2ggcGF0dGVybi4KKworJ2hrbWFwcCcJUGhvbmV0aWMgSGVicmV3IG1hcHBpbmcgKElseWEgRG9nb2xhemt5KS4KKworJ2ljb25zdHJpbmcnCURlZmluZSB0aGUgbmFtZSBvZiB0aGUgaWNvbiwgd2hlbiBub3QgZW1wdHkuICh2ZXJzaW9uIDUuMjogdGhlCisJCXN0cmluZyBpcyB1c2VkIGxpdGVyYWxseSwgYSBuZXdsaW5lIGNhbiBiZSB1c2VkIHRvIG1ha2UgdHdvCisJCWxpbmVzKS4KKworJ2xhenlyZWRyYXcnCURvbid0IHJlZHJhdyB0aGUgc2NyZWVuIHdoaWxlIGV4ZWN1dGluZyBtYWNyb3MsIHJlZ2lzdGVycyBvcgorCQlvdGhlciBub3QgdHlwZWQgY29tbWFuZHMuCisKKydtYWtlZWYnCUVycm9yZmlsZSB0byBiZSB1c2VkIGZvciAiOm1ha2UiLiAgIiMjIiBpcyByZXBsYWNlZCB3aXRoIGEKKwkJdW5pcXVlIG51bWJlci4gIEF2b2lkcyB0aGF0IHR3byBWaW0gc2Vzc2lvbnMgb3ZlcndyaXRlIGVhY2gKKwkJb3RoZXJzIGVycm9yZmlsZS4gIFRoZSBVbml4IGRlZmF1bHQgaXMgIi90bXAvdmltIyMuZXJyIjsgZm9yCisJCUFtaWdhICJ0OnZpbSMjLkVyciwgZm9yIG90aGVycyAidmltIyMuZXJyIi4KKworJ21hdGNodGltZScJMS8xMHMgb2YgYSBzZWNvbmQgdG8gc2hvdyBhIG1hdGNoaW5nIHBhcmVuLCB3aGVuICdzaG93bWF0Y2gnCisJCWlzIHNldC4gIExpa2UgTnZpLgorCisnbW91c2VoaWRlJwlIaWRlIG1vdXNlIHBvaW50ZXIgaW4gR1VJIHdoZW4gdHlwaW5nIHRleHQuCisKKyducmZvcm1hdHMnCURlZmluZXMgd2hhdCBiYXNlcyBWaW0gd2lsbCBjb25zaWRlciBmb3IgbnVtYmVycyB3aGVuIHVzaW5nCisJCXRoZSBDVFJMLUEgYW5kIENUUkwtWCBjb21tYW5kcy4gIERlZmF1bHQ6ICJoZXgsb2N0YWwiLgorCisnc2hlbGx4cXVvdGUnCUFkZCBleHRyYSBxdW90ZXMgYXJvdW5kIHRoZSB3aG9sZSBzaGVsbCBjb21tYW5kLCBpbmNsdWRpbmcKKwkJcmVkaXJlY3Rpb24uCisKKydzb2Z0dGFic3RvcCcJTWFrZSB0eXBpbmcgYmVoYXZlIGxpa2UgdGFic3RvcCBpcyBzZXQgYXQgdGhpcyB2YWx1ZSwgd2l0aG91dAorCQljaGFuZ2luZyB0aGUgdmFsdWUgb2YgJ3RhYnN0b3AnLiAgTWFrZXMgaXQgbW9yZSBlYXN5IHRvIGtlZXAKKwkJJ3RzJyBhdCA4LCB3aGlsZSBzdGlsbCBnZXR0aW5nIGZvdXIgc3BhY2VzIGZvciBhIDxUYWI+LgorCisndGl0bGVzdHJpbmcnCVN0cmluZyBmb3IgdGhlIHdpbmRvdyB0aXRsZSwgd2hlbiBub3QgZW1wdHkuICAodmVyc2lvbiA1LjI6CisJCXRoaXMgc3RyaW5nIGlzIHVzZWQgbGl0ZXJhbGx5LCBhIG5ld2xpbmUgY2FuIGJlIHVzZWQgdG8gbWFrZQorCQl0d28gbGluZXMpLgorCisndmVyYm9zZScJTGV2ZWwgb2YgdmVyYm9zaXR5LiAgTWFrZXMgaXQgcG9zc2libGUgdG8gc2hvdyB3aGljaCAudmltcmMsCisJCS5leHJjLCAudmltaW5mbyBmaWxlcyBldGMuIGFyZSB1c2VkIGZvciBpbml0aWFsaXppbmcuICBBbHNvCisJCXRvIHNob3cgYXV0b2NvbW1hbmRzIHRoYXQgYXJlIGJlaW5nIGV4ZWN1dGVkLiAgQ2FuIGFsc28gYmUgc2V0CisJCWJ5IHVzaW5nIHRoZSAiLVYiIGNvbW1hbmQtbGluZSBhcmd1bWVudC4KKworCitOZXcgY29tbWFuZC1saW5lIGFyZ3VtZW50cwkJCQkqYWRkZWQtY21kbGluZS1hcmdzKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworfC1VfAkJU2V0IHRoZSBndmltcmMgZmlsZSB0byBiZSB1c2VkLiAgTGlrZSAiLXUiIGZvciB0aGUgdmltcmMuCisKK3wtVnwJCVNldCB0aGUgJ3ZlcmJvc2UnIG9wdGlvbi4gIEUuZy4gInZpbSAtVjEwIi4KKworfC1OfAkJU3RhcnQgaW4gbm9uLWNvbXBhdGlibGUgbW9kZS4KKworfC1DfAkJU3RhcnQgaW4gY29tcGF0aWJsZSBtb2RlLgorCit8LVp8CQlTdGFydCBpbiByZXN0cmljdGVkIG1vZGUsIGRpc2FsbG93IHNoZWxsIGNvbW1hbmRzLiAgQ2FuIGFsc28KKwkJYmUgZG9uZSBieSBjYWxsaW5nIHRoZSBleGVjdXRhYmxlICJydmltIi4KKworfC1ofAkJU2hvdyB1c2FnZSBpbmZvcm1hdGlvbiBhbmQgZXhpdC4KKworCitWYXJpb3VzIGFkZGl0aW9ucwkJCQkJKmFkZGVkLXZhcmlvdXMqCistLS0tLS0tLS0tLS0tLS0tLQorCitBZGRlZCBzdXBwb3J0IGZvciBTTmlGRisgY29ubmVjdGlvbiAoc3VibWl0dGVkIGJ5IFRvbmkgTGVoZXJiYXVlcikuICBWaW0gY2FuCitiZSB1c2VkIGFzIGFuIGVkaXRvciBmb3IgU05pRkYuICBObyBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZS4uLgorCitGb3IgcHJvZHVjaW5nIGEgYnVnIHJlcG9ydCwgdGhlIGJ1Z3JlcG9ydC52aW0gc2NyaXB0IGhhcyBiZWVuIGluY2x1ZGVkLgorQ2FuIGJlIHVzZWQgd2l0aCAiOnNvICRWSU1SVU5USU1FL2J1Z3JlcG9ydC52aW0iLCB3aGljaCBjcmVhdGVzIHRoZSBmaWxlCisiYnVncmVwb3J0LnR4dCIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiB8YnVnc3wKKworQWRkZWQgcmFuZ2UgdG8gIjpub3JtYWwiIGNvbW1hbmQuICBOb3cgeW91IGNhbiByZXBlYXQgdGhlIHNhbWUgY29tbWFuZCBmb3IKK2VhY2ggbGluZSBpbiB0aGUgcmFuZ2UuICB8Om5vcm1hbC1yYW5nZXwKKworSW5jbHVkZWQgc3VwcG9ydCBmb3IgdGhlIEZhcnNpIGxhbmd1YWdlIChTaGlyYW4pLiAgT25seSB3aGVuIGVuYWJsZWQgYXQKK2NvbXBpbGUgdGltZS4gIFNlZSB8ZmFyc2l8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkgSU1QUk9WRU1FTlRTCQkqaW1wcm92ZW1lbnRzLTUqCisKK1BlcmZvcm1hbmNlOgorLSBXaGVuICdzaG93Y21kJyB3YXMgc2V0LCBtYXBwaW5ncyB3b3VsZCBleGVjdXRlIG11Y2ggbW9yZSBzbG93bHkgYmVjYXVzZSB0aGUKKyAgb3V0cHV0IHdvdWxkIGJlIGZsdXNoZWQgdmVyeSBvZnRlbi4gIEhlbHBzIGEgbG90IHdoZW4gZXhlY3V0aW5nIHRoZSAibGlmZSIKKyAgbWFjcm9zIHdpdGggJ3Nob3djbWQnIHNldC4KKy0gSW5jbHVkZWQgcGF0Y2hlcyBmb3IgYmluYXJ5IHNlYXJjaGluZyBpbiB0YWdzIGZpbGUgKERhdmlkIE8nTmVpbGwpLgorICBDYW4gYmUgZGlzYWJsZWQgYnkgcmVzZXR0aW5nIHRoZSAndGFnYnNlYXJjaCcgb3B0aW9uLgorLSBEb24ndCB1cGRhdGUgdGhlIHJ1bGVyIHdoZW4gcmVwZWF0aW5nIGluc2VydCAoc2xvd2VkIGl0IGRvd24gYSBsb3QpLgorLSBGb3IgVW5peCwgZmlsZSBuYW1lIGV4cGFuc2lvbiBpcyBub3cgZG9uZSBpbnRlcm5hbGx5IGluc3RlYWQgb2Ygc3RhcnRpbmcgYQorICBzaGVsbCBmb3IgaXQuCistIEV4cGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBleHBhbmRfZW52KCksIGluc3RlYWQgb2YgY2FsbGluZyB0aGUKKyAgc2hlbGwuICBNYWtlcyAiOnNvICRWSU1SVU5USU1FL3N5bnRheC9zeW50YXgudmltIiBhIExPVCBmYXN0ZXIuCistIFJlZHVjZWQgb3V0cHV0IGZvciBjdXJzb3IgcG9zaXRpb25pbmc6IFVzZSBDUi1MRiBmb3IgbW92aW5nIHRvIGZpcnN0IGZldworICBjb2x1bW5zIGluIG5leHQgZmV3IGxpbmVzOyAgRG9uJ3Qgb3V0cHV0IENSIHR3aWNlIHdoZW4gdXNpbmcgdGVybWlvcy4KKy0gT3B0aW1pemVkIGN1cnNvciBwb3NpdGlvbmluZy4gIFVzZSBDUiwgQlMgYW5kIE5MIHdoZW4gaXQncyBzaG9ydGVyIHRoYW4KKyAgYWJzb2x1dGUgY3Vyc29yIHBvc2l0aW9uaW5nLgorLSBEaXNhYmxlIHJlZHJhd2luZyB3aGlsZSByZXBlYXRpbmcgaW5zZXJ0ICIxMDAwaWk8RXNjPiIuCistIE1hZGUgImQkIiBvciAiRCIgZm9yIGxvbmcgbGluZXMgYSBsb3QgZmFzdGVyIChkZWxldGUgYWxsIGNoYXJhY3RlcnMgYXQgb25jZSwKKyAgaW5zdGVhZCBvZiBvbmUgYnkgb25lKS4KKy0gQWNjZXNzIG9wdGlvbiB0YWJsZSBieSBmaXJzdCBsZXR0ZXIsIGluc3RlYWQgb2Ygc2VhcmNoaW5nIGZyb20gc3RhcnQuCistIE1hZGUgc2V0dGluZyBzcGVjaWFsIGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGEgbG90IGZhc3RlciBieSB1c2luZworICBoaWdobGlnaHRfYXR0cltdLCBpbnN0ZWFkIG9mIHNlYXJjaGluZyBpbiB0aGUgJ2hpZ2hsaWdodCcgc3RyaW5nLgorLSBEb24ndCBzaG93IHRoZSBtb2RlIHdoZW4gcmVkcmF3aW5nIGlzIGRpc2FibGVkLgorLSBXaGVuIHNldHRpbmcgYW4gb3B0aW9uLCBvbmx5IHJlZHJhdyB0aGUgc2NyZWVuIHdoZW4gcmVxdWlyZWQuCistIEltcHJvdmVkIHBlcmZvcm1hbmNlIG9mIEV4IGNvbW1hbmRzIGJ5IHVzaW5nIGEgbG9va3VwIHRhYmxlIGZvciB0aGUgZmlyc3QKKyAgY2hhcmFjdGVyLgorCitPcHRpb25zOgorJ2Npbm9wdGlvbnMnCUFkZGVkICdnJyBmbGFnLCBmb3IgQysrIHNjb3BlIGRlY2xhcmF0aW9ucy4KKydjcG9wdGlvbnMnCUFkZGVkICdFJyBmbGFnOiBEaXNhbGxvdyB5YW5raW5nLCBkZWxldGluZywgZXRjLiBlbXB0eSB0ZXh0CisJCWFyZWEuICBEZWZhdWx0IGlzIHRvIGFsbG93IGVtcHR5IHlhbmtzLiAgV2hlbiAnRScgaXMgaW5jbHVkZWQsCisJCSJ5JCIgaW4gYW4gZW1wdHkgbGluZSBub3cgaXMgaGFuZGxlZCBhcyBhbiBlcnJvciAoVmkKKwkJY29tcGF0aWJsZSkuCisJCUFkZGVkICdqJyBmbGFnOiBPbmx5IGFkZCB0d28gc3BhY2VzIGZvciBhIGpvaW4gYWZ0ZXIgYSAnLicsCisJCW5vdCBhZnRlciBhICc/JyBvciAnIScuCisJCUFkZGVkICdBJyBmbGFnOiBkb24ndCBnaXZlIEFUVEVOVElPTiBtZXNzYWdlLgorCQlBZGRlZCAnTCcgZmxhZzogV2hlbiBub3QgaW5jbHVkZWQsIGFuZCAnbGlzdCcgaXMgc2V0LAorCQkndGV4dHdpZHRoJyBmb3JtYXR0aW5nIHdvcmtzIGxpa2UgJ2xpc3QnIGlzIG5vdCBzZXQuCisJCUFkZGVkICdXJyBmbGFnOiAgTGV0ICI6dyEiIGJlaGF2ZSBsaWtlIFZpOiBkb24ndCBvdmVyd3JpdGUKKwkJcmVhZG9ubHkgZmlsZXMsIG9yIGEgZmlsZSBvd25lZCBieSBzb21lb25lIGVsc2UuCisnaGlnaGxpZ2h0JwlBZGRlZCAnQCcgZmxhZywgZm9yICdAJyBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBsYXN0IGxpbmUgb24gdGhlCisJCXNjcmVlbiwgYW5kICckJyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHdoZW4gJ2xpc3QnIGlzIHNldC4KKwkJQWRkZWQgJ2knIGZsYWc6IFNldCBoaWdobGlnaHRpbmcgZm9yICdpbmNzZWFyY2gnLiAgRGVmYXVsdAorCQl1c2VzICJJbmNTZWFyY2giIGhpZ2hsaWdodCBncm91cCwgd2hpY2ggaXMgbGlua2VkIHRvICJWaXN1YWwiLgorCQlEaXNhbGxvdyAnaCcgZmxhZyBpbiAnaGlnaGxpZ2h0JyAod2Fzbid0IHVzZWQgYW55bW9yZSBzaW5jZQorCQkzLjApLgorJ2d1aWZvbnQnCVdpbjMyIEdVSSBvbmx5OiBXaGVuIHNldCB0byAiKiIgYnJpbmdzIHVwIGEgZm9udCByZXF1ZXN0ZXIuCisnZ3VpcHR5JwlEZWZhdWx0IG9uLCBiZWNhdXNlIHNvIG1hbnkgcGVvcGxlIG5lZWQgaXQuCisncGF0aCcJCUNhbiBjb250YWluIHdpbGRjYXJkcywgYW5kICIqKiIgZm9yIHNlYXJjaGluZyBhIHdob2xlIHRyZWUuCisnc2hvcnRtZXNzJwlBZGRlZCAnSScgZmxhZyB0byBhdm9pZCB0aGUgaW50cm8gbWVzc2FnZS4KKyd2aW1pbmZvJwlBZGRlZCAnJScgZmxhZzogU3RvcmUgYnVmZmVyIGxpc3QgaW4gdmltaW5mbyBmaWxlLgorCistIEluY3JlYXNlZCBkZWZhdWx0cyBmb3IgJ21heG1lbScgYW5kICdtYXhtZW10b3QnIGZvciBVbml4IGFuZCBXaW4zMi4gIE1vc3QKKyAgbWFjaGluZXMgaGF2ZSBtdWNoIG1vcmUgUkFNIG5vdyB0aGF0IHByaWNlcyBoYXZlIGRyb3BwZWQuCistIEltcGxlbWVudGVkICI6c2V0IGFsbCYiLCBzZXQgYWxsIG9wdGlvbnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZS4gfDpzZXR8CisKK1N3YXAgZmlsZToKKy0gRG9uJ3QgY3JlYXRlIGEgc3dhcCBmaWxlIGZvciBhIHJlYWRvbmx5IGZpbGUuICBUaGVuIGNyZWF0ZSBvbmUgb24gdGhlIGZpcnN0CisgIGNoYW5nZS4gIEFsc28gY3JlYXRlIGEgc3dhcGZpbGUgd2hlbiB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGlzIGdldHRpbmcKKyAgdG9vIGhpZ2guIHxzd2FwLWZpbGV8CistIE1ha2Ugc3dhcCBmaWxlICJoaWRkZW4iLCBpZiBwb3NzaWJsZS4gIE9uIFVuaXggdGhpcyBpcyBkb25lIGJ5IHByZXBlbmRpbmcgYQorICBkb3QgdG8gdGhlIHN3YXAgZmlsZSBuYW1lLiAgV2hlbiBsb25nIGZpbGUgbmFtZXMgYXJlIHVzZWQsIHRoZSBESkdQUCBhbmQKKyAgV2luMzIgdmVyc2lvbnMgYWxzbyBwcmVwZW5kIGEgZG90LCBpbiBjYXNlIGEgZmlsZSBvbiBhIG1vdW50ZWQgVW5peCBmaWxlCisgIHN5c3RlbSBpcyBlZGl0ZWQuICB8OnN3YXBuYW1lfCAgT24gTVNET1MgdGhlIGhpZGRlbiBmaWxlIGF0dHJpYnV0ZSBpcyBOT1QKKyAgc2V0LCBiZWNhdXNlIHRoaXMgY2F1c2VzIHByb2JsZW1zIHdpdGggc2hhcmUuZXhlLgorLSAndXBkYXRlY291bnQnIGFsd2F5cyBkZWZhdWx0cyB0byBub24temVybywgYWxzbyBmb3IgVmkgY29tcGF0aWJsZSBtb2RlLgorICBUaGlzIG1lYW5zIHRoZXJlIGlzIGEgc3dhcCBmaWxlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcmVjb3ZlcnkuCisKK1RhZ3M6CistIEluY2x1ZGVkIGN0YWdzIDIuMCAoRGFycmVuIEhpZWJlcnQpLiAgVGhlIHN5bnRheCBmb3Igc3RhdGljIHRhZ3MgY2hhbmdlZAorICBmcm9tCisJe3RhZ306e2ZuYW1lfQl7Zm5hbWV9CXtjb21tYW5kfQorICB0bworCXt0YWd9CXtmbmFtZX0Je2NvbW1hbmR9OyIJZmlsZToKKyAgV2hpY2ggaXMgYm90aCBmYXN0ZXIgdG8gcGFyc2UsIHNob3J0ZXIgYW5kIFZpIGNvbXBhdGlibGUuICBUaGUgb2xkIGZvcm1hdCBpcworICBhbHNvIHN0aWxsIGFjY2VwdGVkLCB1bmxlc3MgZGlzYWJsZWQgaW4gc3JjL2ZlYXR1cmUuaCAoc2VlIE9MRF9TVEFUSUNfVEFHUykuCisgIHx0YWdzLWZpbGUtZm9ybWF0fAorLSBDb21wbGV0aW9uIG9mIHRhZ3Mgbm93IGFsc28gaW5jbHVkZXMgc3RhdGljIHRhZ3MgZm9yIG90aGVyIGZpbGVzLCBhdCB0aGUKKyAgZW5kLgorLSBJbmNsdWRlZCAic2h0YWdzIiBmcm9tIFN0ZXBoZW4gUmllaG0uCistIFdoZW4gZmluZGluZyBhIG1hdGNoaW5nIHRhZywgYnV0IHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIGNvbnRpbnVlIHNlYXJjaGluZworICBmb3IgYW5vdGhlciBtYXRjaC4gIEhlbHBzIHdoZW4gdXNpbmcgdGhlIHNhbWUgdGFncyBmaWxlICh3aXRoIGxpbmtzKSBmb3IKKyAgZGlmZmVyZW50IHZlcnNpb25zIG9mIHNvdXJjZSBjb2RlLgorLSBHaXZlIGEgdGFnIHdpdGggYSBnbG9iYWwgbWF0Y2ggaW4gdGhlIGN1cnJlbnQgZmlsZSBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIGEKKyAgZ2xvYmFsIG1hdGNoIGluIGFub3RoZXIgZmlsZS4KKworSW5jbHVkZWQgeHhkIHZlcnNpb24gVjEuOCAoSnVlcmdlbiBXZWlnZXJ0KS4KKworQXV0b2NvbW1hbmRzOgorLSBWaW1MZWF2ZSBhdXRvY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGFmdGVyIHdyaXRpbmcgdGhlIHZpbWluZm8gZmlsZSwgaW5zdGVhZAorICBvZiBiZWZvcmUuICB8VmltTGVhdmV8CistIEFsbG93IGNoYW5naW5nIGF1dG9jb21tYW5kcyB3aGlsZSBleGVjdXRpbmcgdGhlbS4gIFRoaXMgYWxsb3dzIGZvcgorICBzZWxmLW1vZGlmeWluZyBhdXRvY29tbWFuZHMuIChpZGVhIGZyb20gR29sZGJlcmcpCistIFdoZW4gdXNpbmcgYXV0b2NvbW1hbmRzIHdpdGggdHdvIG9yIG1vcmUgcGF0dGVybnMsIGNvdWxkIG5vdCBzcGxpdAorICAiOmlmLzplbmRpZiIgb3ZlciB0d28gbGluZXMuICBOb3cgYWxsIG1hdGNoaW5nIGF1dG9jb21tYW5kcyBhcmUgZXhlY3V0ZWQgaW4KKyAgb25lIGRvX2NtZGxpbmUoKS4KKy0gQXV0b2NvbW1hbmRzIG5vIGxvbmdlciBjaGFuZ2UgdGhlIGNvbW1hbmQgcmVwZWF0ZWQgd2l0aCAiLiIuCistIFNlYXJjaCBwYXR0ZXJucyBhcmUgcmVzdG9yZWQgYWZ0ZXIgZXhlY3V0aW5nIGF1dG9jb21tYW5kcy4gIFRoaXMgYXZvaWRzCisgIHRoYXQgdGhlICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIGlzIG1lc3NlZCB1cCBieSBhdXRvY29tbWFuZHMuCistIFdoZW4gdHJ5aW5nIHRvIGV4ZWN1dGUgYW4gYXV0b2NvbW1hbmQsIGFsc28gdHJ5IG1hdGNoaW5nIHRoZSBwYXR0ZXJuIHdpdGgKKyAgdGhlIHNob3J0IGZpbGUgbmFtZS4gIEhlbHBzIHdoZW4gc2hvcnQgZmlsZSBuYW1lIGlzIGRpZmZlcmVudCBmcm9tIGZ1bGwKKyAgZmlsZSBuYW1lIChleHBhbmRlZCBzeW1ib2xpYyBsaW5rcykuIHxhdXRvY21kLXBhdHRlcm5zfAorLSBNYWRlIHRoZSBvdXRwdXQgb2YgIjphdXRvY21kIiBzaG9ydGVyIGFuZCBsb29rIGJldHRlci4KKy0gRXhwYW5kIDxzZmlsZT4gaW4gYW4gIjphdXRvY21kIiB3aGVuIGl0IGlzIGRlZmluZWQuICB8PHNmaWxlPnwKKy0gQWRkZWQgIm5lc3RlZCIgZmxhZyB0byAiOmF1dG9jbWQiLCBhbGxvd3MgbmVzdGluZy4gIHxhdXRvY21kLW5lc3RlZHwKKy0gQWRkZWQgW2dyb3VwXSBhcmd1bWVudCB0byAiOmF1dG9jbWQiLiAgT3ZlcnJpZGVzIHRoZSBjdXJyZW50bHkgc2V0IGdyb3VwLgorICB8YXV0b2NtZC1ncm91cHN8CistIG5ldyBldmVudHM6CisgIHxCdWZVbmxvYWR8CQliZWZvcmUgYSBidWZmZXIgaXMgdW5sb2FkZWQKKyAgfEJ1ZkRlbGV0ZXwJCWJlZm9yZSBhIGJ1ZmZlciBpcyBkZWxldGVkIGZyb20gdGhlIGJ1ZmZlciBsaXN0CisgIHxGaWxlQ2hhbmdlZFNoZWxsfAl3aGVuIGEgZmlsZSdzIG1vZGlmaWNhdGlvbiB0aW1lIGhhcyBjaGFuZ2VkIGFmdGVyCisJCQlleGVjdXRpbmcgYSBzaGVsbCBjb21tYW5kCisgIHxVc2VyfAkJdXNlci1kZWZpbmVkIGF1dG9jb21tYW5kCistIFdoZW4gJ21vZGlmaWVkJyB3YXMgc2V0IGJ5IGEgQnVmUmVhZCogYXV0b2NvbW1hbmQsIGl0IHdhcyByZXNldCBhZ2FpbgorICBhZnRlcndhcmRzLiAgTm93IHRoZSAiOnNldCBtb2RpZmllZCIgaXMgcmVtZW1iZXJlZC4KKworR1VJOgorLSBJbXByb3ZlZCBHVUkgc2Nyb2xsYmFyIGhhbmRsaW5nIHdoZW4gcmVkcmF3aW5nIGlzIHNsb3dlciB0aGFuIHRoZSBzY3JvbGxiYXIKKyAgZXZlbnRzIGFyZSBnZW5lcmF0ZWQuCistICJ2aW0gLXUgTk9ORSIgbm93IGFsc28gc3RvcHMgbG9hZGluZyB0aGUgLmd2aW1yYyBhbmQgb3RoZXIgR1VJIGluaXRzLiAgfC11fAorICBVc2UgIi1VIiB0byB1c2UgYW5vdGhlciBndmltcmMgZmlsZS4gIHwtVXwKKy0gSGFuZGxlIENUUkwtQyBmb3IgZXh0ZXJuYWwgY29tbWFuZCwgYWxzbyBmb3Igc3lzdGVtcyB3aGVyZSAic2V0c2lkKCkiIGlzCisgIHN1cHBvcnRlZC4KKy0gV2hlbiBzdGFydGluZyB0aGUgR1VJLCByZXN0cmljdCB0aGUgd2luZG93IHNpemUgdG8gdGhlIHNjcmVlbiBzaXplLgorLSBUaGUgZGVmYXVsdCBtZW51cyBhcmUgcmVhZCBmcm9tICRWSU1SVU5USU1FL21lbnUudmltLiAgVGhpcyBhbGxvd3MgZm9yIGEKKyAgY3VzdG9taXplZCBkZWZhdWx0IG1lbnUuICB8bWVudS52aW18CistIEltcHJvdmVkIHRoZSBkZWZhdWx0IG1lbnVzLiAgQWRkZWQgRmlsZS9QcmludCwgYSBXaW5kb3cgbWVudSwgU3ludGF4IG1lbnUsCisgIGV0Yy4KKy0gQWRkZWQgcHJpb3JpdHkgdG8gdGhlICI6bWVudSIgY29tbWFuZC4gIE5vdyBlYWNoIG1lbnUgY2FuIGJlIHB1dCBpbiBhIHBsYWNlCisgIHdoZXJlIHlvdSB3YW50IGl0LCBpbmRlcGVuZGVudCBvZiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIG1lbnVzIGFyZSBkZWZpbmVkLgorICB8bWVudS1wcmlvcml0eXwKKworR2l2ZSBhIHdhcm5pbmcgaW4gdGhlIGludHJvIHNjcmVlbiB3aGVuIHJ1bm5pbmcgdGhlIFdpbjMyIGNvbnNvbGUgdmVyc2lvbiBvbgorV2luZG93cyA5NSBiZWNhdXNlIHRoZXJlIGFyZSBwcm9ibGVtcyB1c2luZyB0aGlzIHZlcnNpb24gdW5kZXIgV2luZG93cyA5NS4KK3x3aW4zMi1wcm9ibGVtc3wKKworQWRkZWQgJ2UnIGZsYWcgZm9yICI6c3Vic3RpdHV0ZSIgY29tbWFuZDogRG9uJ3QgY29tcGxhaW4gd2hlbiBub3QgZmluZGluZyBhCittYXRjaCAoQ2FtcGJlbGwpLiAgfDpzfAorCitXaGVuIHVzaW5nIHNlYXJjaCBjb21tYW5kcyBpbiBhIG1hcHBpbmcsIG9ubHkgdGhlIGxhc3Qgb25lIGlzIGtlcHQgaW4gdGhlCitoaXN0b3J5LiAgQXZvaWRzIHRoYXQgdGhlIGhpc3RvcnkgaXMgdHJhc2hlZCBieSBsb25nIG1hcHBpbmdzLgorCitJZ25vcmUgY2hhcmFjdGVycyBhZnRlciAiZXgiLCAidmlldyIgYW5kICJndmltIiB3aGVuIGNoZWNraW5nIHN0YXJ0dXAgbW9kZS4KK0FsbG93cyB0aGUgdXNlIG9mICJndmltNSIgZXQuIGFsLiAgfGd2aW18ICJndmlldyIgc3RhcnRzIHRoZSBHVUkgaW4gcmVhZG9ubHkKK21vZGUuICB8Z3ZpZXd8CisKK1doZW4gcmVzaXppbmcgd2luZG93cywgdGhlIGN1cnNvciBpcyBrZXB0IGluIHRoZSBzYW1lIHJlbGF0aXZlIHBvc2l0aW9uLCBpZgorcG9zc2libGUuICAoV2ViYikKKworIjphbGwiIGFuZCAiOmJhbGwiIG5vIGxvbmdlciBjbG9zZSBhbmQgdGhlbiBvcGVuIGEgd2luZG93IGZvciB0aGUgc2FtZSBidWZmZXIuCitBdm9pZHMgbG9zaW5nIG9wdGlvbnMsIGp1bXBsaXN0LCBhbmQgb3RoZXIgaW5mby4KKworIi1mIiBjb21tYW5kLWxpbmUgYXJndW1lbnQgaXMgbm93IGlnbm9yZWQgaWYgVmltIHdhcyBjb21waWxlZCB3aXRob3V0IEdVSS4KK3wtZnwKKworSW4gVmlzdWFsIGJsb2NrIG1vZGUsIHRoZSByaWdodCBtb3VzZSBidXR0b24gcGlja3MgdXAgdGhlIG5lYXJlc3QgY29ybmVyLgorCitDaGFuZ2VkIGRlZmF1bHQgbWFwcGluZ3MgZm9yIERPUyBldCBhbC4gIFJlbW92ZWQgdGhlIERPUy1zcGVjaWZpYyBtYXBwaW5ncywKK29ubHkgdXNlIHRoZSBXaW5kb3dzIG9uZXMuICBBZGRlZCBTaGlmdC1JbnNlcnQsIEN0cmwtSW5zZXJ0LCBDdHJsLURlbCBhbmQKK1NoaWZ0LURlbC4KKworQ2hhbmdlZCB0aGUgbnVtYmVycyBpbiB0aGUgb3V0cHV0IG9mICI6anVtcHMiLCBzbyB5b3UgY2FuIHNlZSB3aGVyZSB7Y291bnR9CitDVFJMLU8gdGFrZXMgeW91LiAgfDpqdW1wc3wKKworVXNpbmcgIn4iIGZvciAkSE9NRSBub3cgd29ya3MgZm9yIGFsbCBzeXN0ZW1zLiAgfCRIT01FfAorCitVbml4OiBCZXNpZGVzIHVzaW5nIENUUkwtQywgYWxzbyB1c2UgdGhlIElOVFIgY2hhcmFjdGVyIGZyb20gdGhlIHR0eSBzZXR0aW5ncy4KK1NvbWVib2R5IGhhcyBJTlRSIHNldCB0byBERUwuCisKK0FsbG93IGEgPExGPiBpbiBhICI6aGVscCIgY29tbWFuZCBhcmd1bWVudCB0byBlbmQgdGhlIGhlbHAgY29tbWFuZCwgc28gYW5vdGhlcgorY29tbWFuZCBjYW4gZm9sbG93LgorCitEb2luZyAiJSIgb24gYSBsaW5lIHRoYXQgc3RhcnRzIHdpdGggIiAgICNpZiIgZGlkbid0IGp1bXAgdG8gbWF0Y2hpbmcgIiNlbHNlIi4KK0Rvbid0IHJlY29nbml6ZSAiI2lmIiwgIiNlbHNlIiBldGMuIGZvciAnJScgd2hlbiAnY3BvJyBjb250YWlucyB0aGUgJyUnIGZsYWcuCit8JXwKKworSW5zZXJ0IG1vZGUgZXhwYW5zaW9uIHdpdGggIkNUUkwtTiIsICJDVFJMLVAiIGFuZCAiQ1RSTC1YIiBpbXByb3ZlZAorfGlucy1jb21wbGV0aW9ufDoKKy0gJ2NvbXBsZXRlJyBvcHRpb24gYWRkZWQuCistIFdoZW4gJ25vd3JhcHNjYW4nIGlzIHNldCwgYW5kIG5vIG1hdGNoIGZvdW5kLCByZXBvcnQgdGhlIHNlYXJjaGVkIGRpcmVjdGlvbgorICBpbiB0aGUgZXJyb3IgbWVzc2FnZS4KKy0gUmVwZWF0aW5nIENUUkwtWCBjb21tYW5kcyBhZGRzIGZvbGxvd2luZyB3b3Jkcy9saW5lcyBhZnRlciB0aGUgbWF0Y2guCistIFdoZW4gYWRkaW5nLWV4cGFuc2lvbnMsIGFjY2VwdCBzaW5nbGUgY2hhcmFjdGVyIG1hdGNoZXMuCistIE1hZGUgcmVwZWF0ZWQgQ1RSTC1YIENUUkwtTiBub3QgYnJlYWsgdW5kbywgYW5kICIuIiByZXBlYXRzIHRoZSB3aG9sZQorICBpbnNlcnRpb24uICBBbHNvIGZpeGVzIG5vdCBiZWluZyBhYmxlIHRvIGJhY2tzcGFjZSBvdmVyIGEgd29yZCB0aGF0IGhhcyBiZWVuCisgIGluc2VydGVkIHdpdGggQ1RSTC1OLgorCitXaGVuIGNvcHlpbmcgY2hhcmFjdGVycyBpbiBJbnNlcnQgbW9kZSBmcm9tIHByZXZpb3VzL25leHQgbGluZSwgd2l0aCBDVFJMLUUgb3IKK0NUUkwtWSwgJ3RleHR3aWR0aCcgaXMgbm8gbG9uZ2VyIHVzZWQuICB8aV9DVFJMLUV8CisKK0NvbW1hbmRzIHRoYXQgbW92ZSBpbiB0aGUgYXJnbGlzdCwgbGlrZSAiOm4iIGFuZCAiOnJldyIsIGtlZXAgdGhlIG9sZCBjdXJzb3IKK3Bvc2l0aW9uIG9mIHRoZSBmaWxlICh0aGlzIGlzIG1vc3RseSBWaSBjb21wYXRpYmxlKS4KKworVmltIG5vdyByZW1lbWJlcnMgdGhlICc8IGFuZCAnPiBtYXJrcyBmb3IgZWFjaCBidWZmZXIuICBUaGlzIGZpeGVzIGEgcHJvYmxlbQordGhhdCBhIGxpbmUtZGVsZXRlIGluIG9uZSBidWZmZXIgaW52YWxpZGF0ZWQgdGhlICc8IGFuZCAnPiBtYXJrcyBpbiBhbm90aGVyCitidWZmZXIuICB8Jzx8CisKK0ZvciBNU0RPUywgVW5peCBhbmQgT1MvMjogV2hlbiAkVklNIG5vdCBzZXQsIHVzZSB0aGUgcGF0aCBmcm9tIHRoZSBleGVjdXRhYmxlLgorV2hlbiB1c2luZyB0aGUgZXhlY3V0YWJsZSBwYXRoIGZvciAkVklNLCByZW1vdmUgInNyYy8iIHdoZW4gcHJlc2VudC4gIFNob3VsZAorbWFrZSBWaW0gZmluZCB0aGUgZG9jcyBhbmQgc3ludGF4IGZpbGVzIHdoZW4gaXQgaXMgcnVuIGRpcmVjdGx5IGFmdGVyCitjb21waWxpbmcuICB8JFZJTXwKKworV2hlbiBxdWl0dGluZyBWaXN1YWwgbW9kZSB3aXRoIDxFc2M+LCB0aGUgY3Vyc29yIGlzIHB1dCBhdCBzdGFydCBvZiB0aGUgVmlzdWFsCithcmVhIChsaWtlIGFmdGVyIGV4ZWN1dGluZyBhbiBvcGVyYXRvcikuCisKK1dpbjMyIGFuZCBVbml4IHZlcnNpb246IFJlbW92ZWQgMTEwMCBjaGFyYWN0ZXIgbGltaXQgb24gZXh0ZXJuYWwgY29tbWFuZHMuCisKK0FkZGVkIHBvc3NpYmlsaXR5IHRvIGluY2x1ZGUgYSBzcGFjZSBpbiBhICI6ZWRpdCArY29tbWFuZCIgYXJndW1lbnQsIGJ5CitwdXR0aW5nIGEgYmFja3NsYXNoIGJlZm9yZSBpdC4gIHwrY21kfAorCitBZnRlciByZWNvdmVyeSwgQnVmUmVhZFBvc3QgYXV0b2NvbW1hbmRzIGFyZSBhcHBsaWVkLiAgfDpyZWNvdmVyfAorCitBZGRlZCBjb2xvciBzdXBwb3J0IGZvciAib3MyYW5zaSIsIE9TLzIgY29uc29sZS4gKFNsb290bWFuKSB8b3MyYW5zaXwKKworQWxsb3cgIiU6cDpoIiB3aGVuICUgaXMgZW1wdHkuICB8Ol8lfAorCitJbmNsdWRlZCAiPHNmaWxlPiI6IGZpbGUgbmFtZSBmcm9tIHRoZSAiOnNvdXJjZSIgY29tbWFuZC4gIHw8c2ZpbGU+fAorCitBZGRlZCAiPEJzbGFzaD4iIHNwZWNpYWwgY2hhcmFjdGVyLiAgSGVscHMgZm9yIGF2b2lkaW5nIG11bHRpcGxlIGJhY2tzbGFzaGVzCitpbiBtYXBwaW5ncyBhbmQgbWVudXMuCisKK0luIGEgaGVscCB3aW5kb3csIGEgZG91YmxlLWNsaWNrIGp1bXBzIHRvIHRoZSB0YWcgdW5kZXIgdGhlIGN1cnNvciAobGlrZQorQ1RSTC1dKS4KKworPEMtTGVmdD4gYW5kIDxDLVJpZ2h0PiBub3cgd29yayBsaWtlIDxTLUxlZnQ+IGFuZCA8Uy1SaWdodD4sIG1vdmUgYSB3b3JkCitmb3J3YXJkL2JhY2t3YXJkIChXaW5kb3dzIGNvbXBhdGlibGUpLiB8PEMtTGVmdD58CisKK1JlbW92ZWQgdGhlIHJlcXVpcmVtZW50IGZvciBhICI6dmVyc2lvbiIgY29tbWFuZCBpbiBhIC52aW1yYyBmaWxlLiAgSXQgd2Fzbid0Cit1c2VkIGZvciBhbnl0aGluZy4gIFlvdSBjYW4gdXNlICI6aWYiIHRvIGhhbmRsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHZlcnNpb25zLgorfDp2ZXJzaW9ufAorCitGb3IgTVMtRE9TLCBXaW4zMiBhbmQgT1MvMjogV2hlbiBjb21wYXJpbmcgZmlsZSBuYW1lcyBmb3IgYXV0b2NvbW1hbmRzLCBkb24ndAorbWFrZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiAnLycgYW5kICdcJyBmb3IgcGF0aCBzZXBhcmF0b3IuCisKK05ldyB0ZXJtY2FwIG9wdGlvbnM6CisibWIiOiBibGluay4gIENhbiBvbmx5IGJlIHVzZWQgYnkgYXNzaWduaW5nIGl0IHRvIG9uZSBvZiB0aGUgb3RoZXIgaGlnaGxpZ2h0CisgICAgICBvcHRpb25zLiAgfHRfbWJ8CisiYmMiOiBiYWNrc3BhY2UgY2hhcmFjdGVyLiAgfHRfYmN8CisibmQiOiBVc2VkIGZvciBtb3ZpbmcgdGhlIGN1cnNvciByaWdodCBpbiB0aGUgR1VJLCB0byBhdm9pZCByZW1vdmluZyBvbmUgbGluZQorICAgICAgb2YgcGl4ZWxzIGZyb20gdGhlIGxhc3QgYm9sZCBjaGFyYWN0ZXIuICB8dF9uZHwKKyJ4cyI6IGhpZ2hsaWdodGluZyBub3QgZXJhc2VkIGJ5IG92ZXJ3cml0aW5nLCBmb3IgaHB0ZXJtLiAgQ29tYmluZWQgd2l0aAorICAgICAgJ3dlaXJkaW52ZXJ0Jy4gIFZpc3VhbCBtb2RlIHdvcmtzIG9uIGhwdGVybSBub3cuICB8dF94c3wKKworVW5peDogU2V0IHRpbWUgb2YgcGF0Y2ggYW5kIGJhY2t1cCBmaWxlIHNhbWUgYXMgb3JpZ2luYWwgZmlsZS4gIChIaWViZXJ0KS4KKworQW1pZ2E6IEluIFF1aWNrRml4IG1vZGUgbm8gbG9uZ2VyIG9wZW5zIGFub3RoZXIgd2luZG93LiAgU2hlbGwgY29tbWFuZHMgY2FuIGJlCit1c2VkIG5vdy4KKworQWRkZWQgZGVjbW91c2UgcGF0Y2hlcyBmcm9tIERhdmlkIEJpbmV0dGUuICBDYW4gbm93IHVzZSBEZWMgYW5kIE5ldHRlcm0gbW91c2UuCitCdXQgb25seSB3aGVuIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorCitBZGRlZCAnIycgcmVnaXN0ZXI6IEFsdGVybmF0ZSBmaWxlIG5hbWUgfHF1b3RlI3wuICBEaXNwbGF5ICcjJyByZWdpc3RlciB3aXRoCisiOmRpcyIgY29tbWFuZC4gfDpkaXNwbGF5fAorCitSZW1vdmVkICc6JyBmcm9tICdpc2ZuYW1lJyBkZWZhdWx0IGZvciBVbml4LiAgQ2hlY2sgZm9yICI6Ly8iIGluIGEgZmlsZSBuYW1lCithbnl3YXkuICBBbHNvIGNoZWNrIGZvciAiOlxcIiwgZm9yIE1TLURPUy4KKworQWRkZWQgY291bnQgdG8gIksiZXl3b3JkIGNvbW1hbmQsIHdoZW4gJ2tleXdvcmRwcmcnIGlzICJtYW4iLCBpcyBpbnNlcnRlZCBpbgordGhlIG1hbiBjb21tYW5kLiAgIjJLIiByZXN1bHRzIGluICIhbWFuIDIgPGN3b3JkPiIuICB8S3wKKworV2hlbiB1c2luZyAiZ2YiIG9uIGEgcmVsYXRpdmUgcGF0aCBuYW1lLCByZW1vdmUgIi4uLyIgZnJvbSB0aGUgZmlsZSBuYW1lLCBsaWtlCitpdCdzIGRvbmUgZm9yIGZpbGUgbmFtZXMgaW4gdGhlIHRhZ3MgZmlsZS4gfGdmfAorCitXaGVuIGZpbmlzaGluZyByZWNvcmRpbmcsIGRvbid0IG1ha2UgdGhlIHJlY29yZGVkIHJlZ2lzdGVyIHRoZSBkZWZhdWx0IHB1dAorcmVnaXN0ZXIuCisKK1doZW4gdXNpbmcgIiEhIiwgZG9uJ3QgcHV0ICI6NSw1ISIgb24gdGhlIGNvbW1hbmQtbGluZSwgYnV0ICI6LiEiLiAgQW5kIHNvbWUKK290aGVyIGVuaGFuY2VtZW50cyB0byByZXBsYWNlIHRoZSBsaW5lIG51bWJlciB3aXRoICIuIiBvciAiJCIgd2hlbiBwb3NzaWJsZS4KKworTVNET1MgZXQgYWwuOiBSZW5hbWVkICRWSU0vdmltaW5mbyB0byAkVklNL192aW1pbmZvLiAgSXQncyBtb3JlIGNvbnNpc3RlbnQ6CisudmltcmMvX3ZpbXJjIGFuZCAudmltaW5mby9fdmltaW5mbworCitGb3Igc3lzdGVtcyB3aGVyZSBjYXNlIGRvZXNuJ3QgbWF0dGVyIGluIGZpbGUgbmFtZXMgKE1TRE9TLCBBbWlnYSksIGlnbm9yZQorY2FzZSB3aGlsZSBzb3J0aW5nIGZpbGUgbmFtZXMuICBGb3IgYnVmZmVyIG5hbWVzIHRvby4KKworV2hlbiByZWFkaW5nIGZyb20gc3RkaW4gZG9lc24ndCB3b3JrLCByZWFkIGZyb20gc3RkZXJyIChoZWxwcyBmb3IgImZvbyB8IHhhcmdzCit2aW0iKS4KKworMzIgYml0IE1TLURPUyB2ZXJzaW9uOiBSZXBsYWNlZCBjc2RwbWkzIGJ5IGNzZHBtaTQuCisKK0NoYW5nZWQgPEMtTGVmdD4gYW5kIDxDLVJpZ2h0PiB0byBza2lwIGEgV09SRCBpbnN0ZWFkIG9mIGEgd29yZC4KKworV2FybmluZyBmb3IgY2hhbmdlZCBtb2RpZmllZCB0aW1lIHdoZW4gb3ZlcndyaXRpbmcgYSBmaWxlIG5vdyBhbHNvIHdvcmtzIG9uCitvdGhlciBzeXN0ZW1zIHRoYW4gVW5peC4KKworVW5peDogQ2hhbmdlZCB0aGUgZGVmYXVsdHMgZm9yIGNvbmZpZ3VyZSB0byBiZSB0aGUgc2FtZSBhcyB0aGUgZGVmYXVsdHMgZm9yCitNYWtlZmlsZTogaW5jbHVkZSBHVUksIFBlcmwsIGFuZCBQeXRob24uCisKK1NvbWUgdmVyc2lvbnMgb2YgTW90aWYgcmVxdWlyZSAiLWxYcG0iLiAgQWRkZWQgY2hlY2sgZm9yIHRoaXMgaW4gY29uZmlndXJlLgorCitEb24ndCBhZGQgIi1ML3Vzci9saWIiIHRvIHRoZSBsaW5rIGxpbmUsIGNhdXNlcyBwcm9ibGVtcyBvbiBhIGZldyBzeXN0ZW1zLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSAgICAgQ09NUElMRSBUSU1FIENIQU5HRVMJKmNvbXBpbGUtY2hhbmdlcy01KgorCitXaGVuIGNvbXBpbGluZywgYWxsb3cgYSBjaG9pY2UgZm9yIG1pbmltYWwsIG5vcm1hbCBvciBtYXhpbWFsIGZlYXR1cmVzIGluIGFuCitlYXN5IHdheSwgYnkgY2hhbmdpbmcgYSBzaW5nbGUgbGluZSBpbiBzcmMvZmVhdHVyZS5oLgorVGhlIERPUzE2IHZlcnNpb24gaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBtaW5pbWFsIGZlYXR1cmVzIHRvIGF2b2lkIHJ1bm5pbmcKK291dCBvZiBtZW1vcnkgdG9vIHF1aWNrbHkuIHxkb3MxNnwKK1RoZSBXaW4zMiwgREpHUFAsIGFuZCBPUy8yIHZlcnNpb25zIHVzZSBtYXhpbWFsIGZlYXR1cmVzLCBiZWNhdXNlIHRoZXkgaGF2ZQorZW5vdWdoIG1lbW9yeS4KK1RoZSBBbWlnYSB2ZXJzaW9uIGlzIGF2YWlsYWJsZSB3aXRoIG5vcm1hbCBhbmQgbWF4aW1hbCBmZWF0dXJlcy4KKworQWRkZWQgIm1ha2UgdGVzdCIgdG8gVW5peCB2ZXJzaW9uIE1ha2VmaWxlLiAgQWxsb3dzIGZvciBhIHF1aWNrIGNoZWNrIGlmIG1vc3QKKyJub3JtYWwiIGNvbW1hbmRzIHdvcmsgcHJvcGVybHkuICBBbHNvIHRlc3RzIGEgZmV3IHNwZWNpZmljIGNvbW1hbmRzLgorCitBZGRlZCBzZXRsb2NhbGUoKSB3aXRoIGNvZGVwYWdlIHN1cHBvcnQgZm9yIERKR1BQIHZlcnNpb24uCisKK2F1dG9jb25mOgorLSBBZGRlZCBhdXRvY29uZiBjaGVjayBmb3IgLWxYZG1jcC4KKy0gSW5jbHVkZWQgY2hlY2sgZm9yIC1sWG11LCBubyBsb25nZXIgbmVlZGVkIHRvIGVkaXQgdGhlIE1ha2VmaWxlIGZvciB0aGlzLgorLSBTd2l0Y2hlZCB0byBhdXRvY29uZiAyLjEyLgorLSBBZGRlZCBjb25maWd1cmUgY2hlY2sgZm9yIDxwb2xsLmg+LiAgU2VlbXMgdG8gYmUgbmVlZGVkIHdoZW4gaW5jbHVkaW5nCisgIFBlcmwgb24gTGludXg/CistIHRlcm1saWIgaXMgbm93IGNoZWNrZWQgYmVmb3JlIHRlcm1jYXAuCistIEFkZGVkIGNvbmZpZ3VyZSBjaGVjayBmb3Igc3RybmNhc2VjbXAoKSwgc3RyaWNtcCgpIGFuZCBzdHJuaWNtcCgpLiAgQWRkZWQKKyAgdmltX3N0cmljbXAoKSBmb3Igd2hlbiB0aGVyZSdzIG5vIGxpYnJhcnkgZnVuY3Rpb24gZm9yIHN0cmljbXAoKS4KKy0gVXNlICJkYXRhZGlyIiBpbiBjb25maWd1cmUsIGluc3RlYWQgb2Ygb3VyIG93biBjaGVjayBmb3IgSEVMUERJUi4KKworUmVtb3ZlZCAibWFrZSBwcm90byIgZnJvbSBNYWtlZmlsZS5tYW54LiAgQ291bGQgbm90IG1ha2UgaXQgd29yayB3aXRob3V0IGEgbG90CitvZiAjaWZkZWZzLgorCitSZW1vdmVkICJwcm90by8iIGZyb20gcGF0aHMgaW4gcHJvdG8uaC4gIE5lZWRlZCBmb3IgdGhlIE1hYyBwb3J0LgorCitEcmFzdGljYWxseSBjaGFuZ2VkIE1ha2VmaWxlLm1pbnQuICBOb3cgaXQgaW5jbHVkZXMgdGhlIFVuaXggTWFrZWZpbGUuCisKK0FkZGVkIHN1cHBvcnQgZm9yIERvczE2IGluIE1ha2VmaWxlLmIzMiAocmVuYW1lZCBNYWtlZmlsZS5iMzIgdG8gTWFrZWZpbGUuYm9yKQorCitBbGwgc291cmNlIGZpbGVzIGFyZSBub3cgZWRpdGVkIHdpdGggYSB0YWJzdG9wIG9mIDggaW5zdGVhZCBvZiA0LCB3aGljaCBpcworYmV0dGVyIHdoZW4gZGVidWdnaW5nIGFuZCB1c2luZyBvdGhlciB0b29scy4gICdzb2Z0dGFic3RvcCcgaXMgc2V0IHRvIDQsIHRvCittYWtlIGVkaXRpbmcgZWFzaWVyLgorCitVbml4OiBBZGRlZCAibGluay5zaCIgc2NyaXB0LCB3aGljaCByZW1vdmVzIGEgZmV3IHVubmVjZXNzYXJ5IGxpYnJhcmllcyBmcm9tCit0aGUgbGluayBjb21tYW5kLgorCitEb24ndCB1c2UgSFBVWCBkaWdyYXBocyBieSBkZWZhdWx0LCBidXQgb25seSB3aGVuIEhQVVhfRElHUkFQSFMgaXMgZGVmaW5lZC4KK3xkaWdyYXBocy1kZWZhdWx0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkgQlVHIEZJWEVTCQkqYnVnLWZpeGVzLTUqCisKK05vdGU6CVNvbWUgb2YgdGhlc2UgZml4ZXMgbWF5IG9ubHkgYXBwbHkgdG8gdGVzdCB2ZXJzaW9ucyB3aGljaCB3ZXJlCisJY3JlYXRlZCBhZnRlciB2ZXJzaW9uIDQuNiwgYnV0IGJlZm9yZSA1LjAuCisKKworV2hlbiBkb2luZyAiOmJkZWwiLCB0cnkgZ29pbmcgdG8gdGhlIG5leHQgbG9hZGVkIGJ1ZmZlci4gIERvbid0IHJld2luZCB0byB0aGUKK3N0YXJ0IG9mIHRoZSBidWZmZXIgbGlzdC4KKworbWNoX2lzZGlyKCkgZm9yIFVuaXggcmV0dXJuZWQgVFJVRSBmb3IgIiIgb24gc29tZSBzeXN0ZW1zLgorCitXaW4zMjogJ3NoZWxsJyBzZXQgdG8gIm1rc250L3NoLmV4ZSIgYnJlYWtzICI6ISIgY29tbWFuZHMuICBEb24ndCB1c2UKK2JhY2tzbGFzaGVzIGluIHRoZSB0ZW1wIGZpbGUgbmFtZXMuCisKK09uIGxpbnV4LCB3aXRoIGEgRkFUIGZpbGUgc3lzdGVtLCBjb3VsZCBnZXQgc3B1cmlvdXMgImZpbGUgeHh4IGNoYW5nZWQgc2luY2UKK2VkaXRpbmcgc3RhcnRlZCIgbWVzc2FnZXMsIGJlY2F1c2UgdGhlIHRpbWUgaXMgcm91bmRlZCBvZmYgdG8gdHdvIHNlY29uZHMKK3VuZXhwZWN0ZWRseS4KKworQ3Jhc2ggaW4gR1VJLCB3aGVuIHNlbGVjdGluZyBhIHdvcmQgKGRvdWJsZSBjbGljaykgYW5kIHRoZW4gZXh0ZW5kIHVudGlsIGFuCitlbXB0eSBsaW5lLgorCitGb3Igc3lzdGVtcyB3aGVyZSBpc2RpZ2l0KCkgY2FuJ3QgaGFuZGxlIGNoYXJhY3RlcnMgPiAyNTUsIGdldF9udW1iZXIoKSBjYXVzZWQKK2EgY3Jhc2ggd2hlbiBtb3ZpbmcgdGhlIG1vdXNlIGR1cmluZyB0aGUgcHJvbXB0IGZvciByZWNvdmVyeS4KKworSW4gSW5zZXJ0IG1vZGUsICJDVFJMLU8gUCIgbGVmdCB0aGUgY3Vyc29yIG9uIHRoZSBsYXN0IGluc2VydGVkIGNoYXJhY3Rlci4KK05vdyB0aGUgY3Vyc29yIGlzIGxlZnQgYWZ0ZXIgdGhlIGxhc3QgcHV0dGVkIGNoYXJhY3Rlci4KKworV2hlbiBxdWlja2ZpeCBmb3VuZCBhbiBlcnJvciB0eXBlIG90aGVyIHRoYW4gJ2UnIG9yICd3JywgaXQgd2FzIG5ldmVyIHByaW50ZWQuCisKK0Egc2V0dGluZyBmb3IgJ2Vycm9yZmlsZScgaW4gYSAudmltcmMgb3ZlcnJ1bGVkIHRoZSAiLXEgZXJyb3JmaWxlIiBhcmd1bWVudC4KKworU29tZSBzeXN0ZW1zIGNyZWF0ZSBhIGZpbGUgd2hlbiBnZW5lcmF0aW5nIGEgdGVtcCBmaWxlIG5hbWUuICBGaWx0ZXJpbmcgd291bGQKK3RoZW4gY3JlYXRlIGEgYmFja3VwIGZpbGUgZm9yIHRoaXMsIHdoaWNoIHdhcyBuZXZlciBkZWxldGVkLiAgTm93IG5vIGJhY2t1cAorZmlsZSBpcyBtYWRlIHdoZW4gZmlsdGVyaW5nLgorCitzaW1wbGlmeV9maWxlbmFtZSgpIGNvdWxkIHJlbW92ZSBhICIuLiIgYWZ0ZXIgYSBsaW5rLCByZXN1bHRpbmcgaW4gdGhlIHdyb25nCitmaWxlIG5hbWUuICBNYWRlIHNpbXBsaWZ5X2ZpbGVuYW1lIGFsc28gd29yayBmb3IgTVNET1MuICBEb24ndCB1c2UgaXQgZm9yCitBbWlnYSwgc2luY2UgaXQgZG9lc24ndCBoYXZlICIuLi8iLgorCitvdGhlcmZpbGUoKSB3YXMgdW5yZWxpYWJsZSB3aGVuIHVzaW5nIGxpbmtzLiAgQ291bGQgdGhpbmsgdGhhdCByZWFkaW5nL3dyaXRpbmcKK3dhcyBmb3IgYSBkaWZmZXJlbnQgZmlsZSwgd2hlbiBpdCB3YXMgdGhlIHNhbWUuCisKK1Bhc3Rpbmcgd2l0aCBtb3VzZSBpbiBSZXBsYWNlIG1vZGUgZGlkbid0IHJlcGxhY2UgYW55dGhpbmcuCisKK1dpbmRvdyBoZWlnaHQgY29tcHV0ZWQgd3Jvbmcgd2hlbiByZXNpemluZyBhIHdpbmRvdyB3aXRoIGFuIGF1dG9jb21tYW5kIChjb3VsZAorY2F1c2UgYSBjcmFzaCkuCisKKyI6cyFmb28hYmFyISIgd2Fzbid0IHBvc3NpYmxlIChWaSBjb21wYXRpYmxlKS4KKworZG9fYmFuZygpIGZyZWVkIG1lbW9yeSB0d2ljZSB3aGVuIGNhbGxlZCByZWN1cnNpdmVseSwgYmVjYXVzZSBvZiBhdXRvY29tbWFuZHMKKyh0ZXN0MTEpLiAgVGhhbmtzIHRvIEVsZWN0cmljIEZlbmNlIQorCisidiRkIiBvbiBhbiBlbXB0eSBsaW5lIGRpZG4ndCByZW1vdmUgdGhlICItLSBWSVNVQUwgLS0iIG1vZGUgbWVzc2FnZSBmcm9tIHRoZQorY29tbWFuZC1saW5lLCBhbmQgaW52ZXJ0ZWQgdGhlIGN1cnNvci4KKworIjpta2V4cmMiIGRpZG4ndCBjaGVjayBmb3IgZmFpbHVyZSB0byBvcGVuIHRoZSBmaWxlLCBjYXVzaW5nIGEgY3Jhc2guCisoRmVsZGVyaG9mZikuCisKK1dpbjMyIG1jaF93cml0ZSgpIHdyb3RlIHBhc3QgZml4ZWQgYnVmZmVyLCBjYXVzaW5nIHRlcm1pbmFsIGtleXMgbm8gbG9uZ2VyIHRvCitiZSByZWNvZ25pemVkLiAgQm90aCBjb25zb2xlIGFuZCBHVUkgdmVyc2lvbi4KKworQXRoZW5hIEdVSTogQ3Jhc2ggd2hlbiByZW1vdmluZyBhIG1lbnUgaXRlbS4gIE5vdyBWaW0gZG9lc24ndCBjcmFzaCwgYnV0IHRoZQorcmV2ZXJzaW5nIG9mIHRoZSBtZW51IGl0ZW0gaXMgc3RpbGwgd3JvbmcuCisKK0Fsd2F5cyByZXNldCAnbGlzdCcgb3B0aW9uIGZvciB0aGUgaGVscCB3aW5kb3cuCisKK1doZW4gJ3Njcm9sbG9mZicgaXMgbm9uLXplcm8sIGEgJ3Nob3dtYXRjaCcgY291bGQgY2F1c2UgdGhlIHNob3duIG1hdGNoIHRvIGJlCitpbiB0aGUgd3JvbmcgbGluZSBhbmQgdGhlIHdpbmRvdyB0byBiZSBzY3JvbGxlZCAoQWNldmVkbykuCisKK0FmdGVyICI6c2V0IGFsbCYiLCAnbGluZXMnIGFuZCAndHR5dHlwZScgd2VyZSBzdGlsbCBub24tZGVmYXVsdCwgYmVjYXVzZSB0aGUKK2RlZmF1bHRzIG5ldmVyIGdvdCBzZXQuICBOb3cgdGhlIGRlZmF1bHRzIGZvciAnbGluZXMnIGFuZCAnY29sdW1ucycgYXJlIHNldAorYWZ0ZXIgZGV0ZWN0aW5nIHRoZSB3aW5kb3cgc2l6ZS4gJ3Rlcm0nIGFuZCAndHR5dHlwZScgZGVmYXVsdHMgYXJlIHNldCB3aGVuCitkZXRlY3RpbmcgdGhlIHRlcm1pbmFsIHR5cGUuCisKK0ZvciAobW9zdCkgbm9uLVVuaXggc3lzdGVtcywgZG9uJ3QgYWRkIGZpbGUgbmFtZXMgd2l0aCBpbGxlZ2FsIGNoYXJhY3RlcnMgd2hlbgorZXhwYW5kaW5nLiAgRml4ZXMgImNhbm5vdCBvcGVuIHN3YXBmaWxlIiBlcnJvciB3aGVuIGRvaW5nICI6ZSAqLmJ1cnAiLCB3aGVuCit0aGVyZSBpcyBubyBtYXRjaC4KKworSW4gWDExIEdVSSwgZHJhd2luZyBwYXJ0IG9mIHRoZSBjdXJzb3Igb2JzY3VyZWQgdGhlIHRleHQuICBOb3cgdGhlIHRleHQgaXMKK2RyYXduIG92ZXIgdGhlIGN1cnNvciwgbGlrZSB3aGVuIGl0IGZpbGxzIHRoZSBibG9jay4gKFNlaWJlcnQpCisKK3doZW4gc3RhcnRlZCB3aXRoICItYyBjbWQgLXEgZXJyZmlsZSIsIHRoZSBjdXJzb3Igd291bGQgYmUgbGVmdCBpbiBsaW5lIDEuCitOb3cgYSAiOmNjIiBpcyBkb25lIGFmdGVyIGV4ZWN1dGluZyAiY21kIi4KKworIjppbGlzdCIgbmV2ZXIgaWdub3JlZCBjYXNlLCBldmVuIHdoZW4gJ2lnbm9yZWNhc2UnIHNldC4KKworInZpbSAtciBmaWxlIiBmb3IgYSByZWFkb25seSBmaWxlLCB0aGVuIG1ha2luZyBhIGNoYW5nZSwgZ290IEFUVEVOVElPTiBtZXNzYWdlCitpbiBpbnNlcnQgbW9kZSwgZGlzcGxheSBtaXhlZCB1cCB1bnRpbCA8RXNjPiB0eXBlZC4gIEFsc28gZG9uJ3QgZ2l2ZSBBVFRFTlRJT04KK21lc3NhZ2UgYWZ0ZXIgcmVjb3ZlcmluZyBhIGZpbGUuCisKK1RoZSBhYmJyZXZpYXRpb24gIjphYiAjaSAjaW5jbHVkZSIgY291bGQgbm90IGJlIHJlbW92ZWQuCisKK0NUUkwtTCBjb21wbGV0aW9uIChsb25nZXN0IGNvbW1vbiBtYXRjaCkgb24gY29tbWFuZC1saW5lIGRpZG4ndCB3b3JrIHByb3Blcmx5Citmb3IgY2FzZS1pbnNlbnNpdGl2ZSBzeXN0ZW1zIChNUy1ET1MsIFdpbmRvd3MsIGV0Yy4pLiAgKHN1Z2dlc3RlZCBieSBSaWNoYXJkCitLaWxnb3JlKS4KKworRm9yIHRlcm1pbmFscyB0aGF0IGNhbiBoaWRlIHRoZSBjdXJzb3IgKCJ2aSIgdGVybWNhcCBlbnRyeSksIHJlc2l6aW5nIHRoZQord2luZG93IGNhdXNlZCB0aGUgY3Vyc29yIHRvIGRpc2FwcGVhci4KKworVXNpbmcgYW4gaW52YWxpZCBtYXJrIGluIGFuIEV4IGFkZHJlc3MgZGlkbid0IGFib3J0IHRoZSBjb21tYW5kLgorCitXaGVuICdzbWFydHRhYicgc2V0LCB3b3VsZCB1c2UgJ3NoaWZ0cm91bmQnIHdoZW4gaW5zZXJ0aW5nIGEgVEFCIGFmdGVyIGEKK3NwYWNlLiAgTm93IGl0IGFsd2F5cyByb3VuZHMgdG8gYSB0YWJzdG9wLgorCitTZXQgJ1sgYW5kICddIG1hcmtzIGZvciAiOmNvcHkiLCAiOm1vdmUiLCAiOmFwcGVuZCIsICI6aW5zZXJ0IiwgIjpzdWJzdGl0dXRlIgorYW5kICI6Y2hhbmdlIi4gIChBY2V2ZWRvKS4KKworImQkIiBpbiBhbiBlbXB0eSBsaW5lIHN0aWxsIGNhdXNlZCBhbiBlcnJvciwgZXZlbiB3aGVuICdFJyBpcyBub3QgaW4KKydjcG9wdGlvbnMnLgorCitIZWxwIGZpbGVzIHdlcmUgc3RvcmVkIGluIHRoZSB2aW1pbmZvIGJ1ZmZlciBsaXN0IHdpdGhvdXQgYSBwYXRoLgorCitHVUk6IERpc3BsYXlpbmcgY3Vyc29yIHdhcyBub3Qgc3luY2hyb25pemVkIHdpdGggb3RoZXIgZGlzcGxheWluZy4gIENhdXNlZAorc2V2ZXJhbCBkaXNwbGF5IGVycm9ycy4gIEZvciBleGFtcGxlLCB3aGVuIHRoZSBsYXN0IHR3byBsaW5lcyBpbiB0aGUgZmlsZQorc3RhcnQgd2l0aCBzcGFjZXMsICJkZCIgb24gdGhlIGxhc3QgbGluZSBjb3BpZWQgdGV4dCB0byB0aGUgKHRoZW4pIGxhc3QgbGluZS4KKworV2luMzI6IE5lZWRlZCB0byB0eXBlIENUUkwtU0hJRlQtLSB0byBnZXQgQ1RSTC1fLgorCitHVUk6IE1vdmluZyB0aGUgY3Vyc29yIGZvcndhcmRzIG92ZXIgYm9sZCB0ZXh0IHdvdWxkIHJlbW92ZSBvbmUgY29sdW1uIG9mIGJvbGQKK3BpeGVscy4KKworWDExIEdVSTogV2hlbiBhIGJvbGQgY2hhcmFjdGVyIGluIHRoZSBsYXN0IGNvbHVtbiB3YXMgc2Nyb2xsZWQgdXAgb3IgZG93biwgb25lCitjb2x1bW4gb2YgcGl4ZWxzIHdvdWxkIG5vdCBiZSBjb3BpZWQuCisKK1VzaW5nIDxCUz4gdG8gbW92ZSB0aGUgY3Vyc29yIGxlZnQgY2FuIHNvbWV0aW1lcyBlcmFzZSBhIGNoYXJhY3Rlci4gIE5vdyB1c2UKKyJsZSIgdGVybWNhcCBlbnRyeSBmb3IgdGhpcy4KKworS2V5d29yZCBjb21wbGV0aW9uIHdpdGggcmVnZXhwIGRpZG4ndCB3b3JrLiAgZS5nLiwgZm9yICJiLipjcmF0Ii4KKworRml4ZWQ6IFdpdGggQ1RSTC1PIHRoYXQganVtcHMgdG8gYW5vdGhlciBmaWxlLCBjdXJzb3IgY291bGQgZW5kIHVwIGp1c3QgYWZ0ZXIKK3RoZSBsaW5lLgorCitBbWlnYTogJyQnIHdhcyBtaXNzaW5nIGZyb20gY2hhcmFjdGVyIHJlY29nbml6ZWQgYXMgd2lsZGNhcmRzLCBjYXVzaW5nICRWSU0KK3NvbWV0aW1lcyBub3QgdG8gYmUgZXhwYW5kZWQuCisKKyI6Y2hhbmdlIiBkaWRuJ3QgYWRqdXN0IG1hcmtzIGZvciBkZWxldGVkIGxpbmVzLgorCisiOmhlbHAgW3JhbmdlXSIgZGlkbid0IHdvcmsuICBBbHNvIGZvciBbcGF0dGVybl0sIFtjb3VudF0gYW5kIFtxdW90ZXhdLgorCitGb3IgJ2NpbmRlbnQnaW5nLCB0eXBpbmcgImNsYXNzOjptZXRob2QiIGRvZXNuJ3QgYWxpZ24gbGlrZSBhIGxhYmVsIHdoZW4gdGhlCitzZWNvbmQgJzonIGlzIHR5cGVkLgorV2hlbiBpbnNlcnRpbmcgYSBDUiB3aXRoICdjaW5kZW50JyBzZXQgKGFuZCBhIGJ1bmNoIG9mIG90aGVyIGNvbmRpdGlvbnMpIHRoZQorY3Vyc29yIHdlbnQgdG8gYSB3cm9uZyBsb2NhdGlvbi4KKydjaW5kZW50JyB3YXMgd3JvbmcgZm9yIGEgbGluZSB0aGF0IGVuZHMgaW4gJ30nLgorJ2NpbmRlbnQnIHdhcyB3cm9uZyBhZnRlciAiZWxzZSB7Ii4KKworV2hpbGUgZWRpdGluZyB0aGUgY21kbGluZSBpbiB0aGUgR1VJLCBjb3VsZCBub3QgdXNlIHRoZSBtb3VzZSB0byBzZWxlY3QgdGV4dAorZnJvbSB0aGUgY29tbWFuZC1saW5lIGl0c2VsZi4KKworV2hlbiBkZWxldGluZyBsaW5lcywgbWFya3MgaW4gdGFnIHN0YWNrIHdlcmUgb25seSBhZGp1c3RlZCBmb3IgdGhlIGN1cnJlbnQKK3dpbmRvdywgbm90IGZvciBvdGhlciB3aW5kb3dzIG9uIHRoZSBzYW1lIGJ1ZmZlci4KKworVGFnIGd1ZXNzaW5nIGNvdWxkIGZpbmQgYSBmdW5jdGlvbiAic29tZV9mdW5jIiBpbnN0ZWFkIG9mIHRoZSAiZnVuYyIgd2Ugd2VyZQorbG9va2luZyBmb3IuCisKK1RhZ3MgZmlsZSBuYW1lIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGZpbGUgZGlkbid0IHdvcmsuCisKKyI6Zy9wYXQyL3MvL3BhdDIvZyIsIGNhdXNpbmcgdGhlIG51bWJlciBvZiBzdWJzIHRvIGJlIHJlcG9ydGVkLCB1c2VkIHRvIGNhdXNlCithIHNjcm9sbCB1cC4gIE5vdyB5b3Ugbm8gbG9uZ2VyIGhhdmUgdG8gaGl0IDxDUj4uCisKK1gxMSBHVUk6IFNlbGVjdGluZyB0ZXh0IGNvdWxkIGNhdXNlIGEgY3Jhc2guCisKKzMyIGJpdCBET1MgdmVyc2lvbjogQ1RSTC1DIGluIGV4dGVybmFsIGNvbW1hbmQga2lsbGVkIFZpbS4gIFdoZW4gU0hFTEwgaXMgc2V0Cit0byAic2guZXhlIiwgZXh0ZXJuYWwgY29tbWFuZHMgZGlkbid0IHdvcmsuICBSZW1vdmVkIHVzaW5nIG9mIGNvbW1hbmQuY29tLCBubworbG9uZ2VyIG5lZWQgdG8gc2V0ICdzaGVsbHF1b3RlJy4KKworRml4ZWQgY3Jhc2ggd2hlbiB1c2luZyAiOmcvcGF0L2kiLgorCitGaXhlZCAocG90ZW50aWFsKSBjcmFzaCBmb3IgWDExIEdVSSwgd2hlbiB1c2luZyBhbiBYIHNlbGVjdGlvbi4gIFdhcyBnaXZpbmcgYQorcG9pbnRlciBvbiB0aGUgc3RhY2sgdG8gYSBjYWxsYmFjayBmdW5jdGlvbiwgbm93IGl0J3Mgc3RhdGljLgorCitVc2luZyAiIyIgYW5kICIqIiB3aXRoIGFuIG9wZXJhdG9yIGRpZG4ndCB3b3JrLiAgRS5nLiAiYyMiLgorCitDb21tYW5kLWxpbmUgZXhwYW5zaW9uIGRpZG4ndCB3b3JrIHByb3Blcmx5IGFmdGVyICI6KiIuIChBY2V2ZWRvKQorCitTZXR0aW5nICd3ZWlyZGludmVydCcgY2F1c2VkIGhpZ2hsaWdodGluZyB0byBiZSB3cm9uZyBpbiB0aGUgR1VJLgorCisiOmUgKzQgIyIgZGlkbid0IHdvcmssIGJlY2F1c2UgdGhlICI0IiB3YXMgaW4gdW5hbGxvY2F0ZWQgbWVtb3J5IChjb3VsZCBjYXVzZQorYSBjcmFzaCkuCisKK0N1cnNvciBwb3NpdGlvbiB3YXMgd3JvbmcgZm9yICI6ZSAjIiwgYWZ0ZXIgIjplICMiIGZhaWxlZCwgYmVjYXVzZSBvZiBjaGFuZ2VzCit0byB0aGUgYnVmZmVyLgorCitXaGVuIGRvaW5nICI6YnVmIE4iLCBnb2luZyB0byBhIGJ1ZmZlciB0aGF0IHdhcyBlZGl0ZWQgd2l0aCAiOnZpZXciLCB0aGUKK3JlYWRvbmx5IGZsYWcgd2FzIHJlc2V0LiAgTm93IG1ha2UgYSBkaWZmZXJlbmNlIGJldHdlZW4gIjplIGZpbGUiIGFuZCAiOmJ1ZgorZmlsZSI6IE9ubHkgc2V0L3Jlc2V0ICdybycgZm9yIHRoZSBmaXJzdCBvbmUuCisKK0F2b2lkIHxoaXQtZW50ZXJ8IHByb21wdCB3aGVuIG5vdCBhYmxlIHRvIHdyaXRlIHZpbWluZm8gb24gZXhpdC4KKworV2hlbiBnaXZpbmcgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIHRlcm1pbmFsIHdoZXJlIHRoZSBHVUkgd2FzIHN0YXJ0ZWQsIEdVSQorZXNjYXBlIGNvZGVzIHdvdWxkIGJlIHdyaXR0ZW4gdG8gdGhlIHRlcm1pbmFsLiAgSW4gYW4geHRlcm0gdGhpcyBjb3VsZCBiZSBzZWVuCithcyBhICckJyBhZnRlciB0aGUgbWVzc2FnZS4KKworTW91c2Ugd291bGQgbm90IHdvcmsgZGlyZWN0bHkgYWZ0ZXIgIjpndWkiLCBiZWNhdXNlIGZ1bGxfc2NyZWVuIGlzbid0IHNldCwKK3doaWNoIGNhdXNlcyBzdGFydHRlcm1jYXAoKSBub3QgdG8gZG8gaXRzIHdvcmsuCisKKydpbmNzZWFyY2gnIGRpZCBub3Qgc2Nyb2xsIHRoZSB3aW5kb3cgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBhY3R1YWwgc2VhcmNoLgorV2hlbiAnbm93cmFwJyBzZXQsIGluY3NlYXJjaCBkaWRuJ3Qgc2hvdyBhIG1hdGNoIHdoZW4gaXQgd2FzIG9mZiB0aGUgc2lkZSBvZgordGhlIHNjcmVlbi4gIE5vdyBpdCBhbHNvIHNob3dzIHRoZSB3aG9sZSBtYXRjaCwgaW5zdGVhZCBvZiBqdXN0IHRoZSBjdXJzb3IKK3Bvc2l0aW9uIChpZiBwb3NzaWJsZSkuCisKKyI6dW5tYXAiLCAiOnVuYWIiIGFuZCAiOnVubWVudSIgZGlkIG5vdCBhY2NlcHQgYSBkb3VibGUgcXVvdGUsIGl0IHdhcyBzZWVuIGFzCit0aGUgc3RhcnQgb2YgYSBjb21tZW50LiAgTm93IGl0J3MgVmkgY29tcGF0aWJsZS4KKworVXNpbmcgPFVwPjxMZWZ0PjxMZWZ0PjxVcD4gaW4gdGhlIGNvbW1hbmQtbGluZSwgd2hlbiB0aGVyZSBpcyBubyBwcmV2aW91cworY21kbGluZSBpbiB0aGUgaGlzdG9yeSwgaW5zZXJ0ZWQgYSBOVUwgb24gdGhlIGNvbW1hbmQtbGluZS4KKworImk8RXNjPiIgd2hlbiBvbiBhIDxUYWI+IGluIGNvbHVtbiAwIGxlZnQgdGhlIGN1cnNvciBpbiB0aGUgd3JvbmcgcGxhY2UuCisKK0dVSSBNb3RpZjogV2hlbiBhZGRpbmcgYSBsb3Qgb2YgbWVudSBpdGVtcywgdGhlIG1lbnUgYmFyIGdvZXMgaW50byB0d28gcm93cy4KK0RlbGV0aW5nIG1lbnUgaXRlbXMsIHJlZHVjaW5nIHRoZSBudW1iZXIgb2Ygcm93cywgbm93IGFsc28gd29ya3MuCisKK1dpdGggIjpnL3BhdC9zLy9mb28vYyIsIGEgbWF0Y2ggaW4gdGhlIGZpcnN0IGxpbmUgd2FzIHNjcm9sbGVkIG9mZiBvZiB0aGUKK3NjcmVlbiwgc28geW91IGNvdWxkIG5vdCBzZWUgaXQuCitXaGVuIHVzaW5nICI6cy8vYyIsIHdpdGggJ25vd3JhcCcgc2V0LCBhIG1hdGNoIGNvdWxkIGJlIG9mZiB0aGUgc2lkZSBvZiB0aGUKK3NjcmVlbiwgc28geW91IGNvdWxkIG5vdCBzZWUgaXQuCisKK1doZW4gJ2hlbHBmaWxlJyB3YXMgc2V0IHRvIGEgZml4ZWQsIG5vbi1hYnNvbHV0ZSBwYXRoIGluIGZlYXR1cmUuaCwgVmltIHdvdWxkCitjcmFzaC4gIG1jaF9GdWxsbmFtZSBjYW4gbm93IGhhbmRsZSBmaWxlIG5hbWVzIGluIHJlYWQtb25seSBtZW1vcnkuIChMb3R0ZW0pCisKK1doZW4gdXNpbmcgQ1RSTC1BIG9yIENUUkwtQCBpbiBJbnNlcnQgbW9kZSwgdGhlcmUgY291bGQgYmUgc3RyYW5nZSBlZmZlY3RzCit3aGVuIHVzaW5nIENUUkwtRCBuZXh0LiAgQWxzbywgd2hlbiByZXBlYXRpbmcgaW5zZXJ0ZWQgdGV4dCB0aGF0IGluY2x1ZGVkICIwCitDVFJMLUQiIG9yICJeIENUUkwtRCIgdGhpcyBkaWRuJ3Qgd29yay4gKEFjZXZlZG8pCitVc2luZyBDVFJMLUQgYWZ0ZXIgdXNpbmcgQ1RSTC1FIG9yIENUUkwtWSBpbiBJbnNlcnQgbW9kZSB0aGF0IGluc2VydGVkIGEgJzAnCitvciAnXicsIHJlbW92ZWQgdGhlICcwJyBvciAnXicgYW5kIG1vcmUgaW5kZW50LgorCitUaGUgY29tbWFuZCAiMiIucCIgY2F1c2VkIHRoZSBsYXN0IGluc2VydGVkIHRleHQgdG8gYmUgZXhlY3V0ZWQgYXMgY29tbWFuZHMuCisoQWNldmVkbykKKworUmVwZWF0aW5nIHRoZSBpbnNlcnQgb2YgIkNUUkwtViAwNDgiIHJlc3VsdGVkIGluICJeQCIgdG8gYmUgaW5zZXJ0ZWQuCisKK1JlcGVhdGluZyBJbnNlcnQgY29tcGxldGlvbiBjb3VsZCBmYWlsIGlmIHRoZXJlIGFyZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlCit0ZXh0LiAoQWNldmVkbykKKworIjpub3JtYWwgL3N0cmluZzxDUj4iIGNhdXNlZCB0aGUgd2luZG93IHRvIHNjcm9sbC4gIE5vdyBhbGwgIjpub3JtYWwiIGNvbW1hbmRzCithcmUgZXhlY3V0ZWQgd2l0aG91dCBzY3JvbGxpbmcgbWVzc2FnZXMuCisKK1JlZG8gb2YgQ1RSTC1FIG9yIENUUkwtWSBpbiBJbnNlcnQgbW9kZSBpbnRlcnByZXRlZCBzcGVjaWFsIGNoYXJhY3RlcnMgYXMKK2NvbW1hbmRzLgorCitMaW5lIHdyYXBwaW5nIGZvciAndHcnIHdhcyBkb25lIG9uZSBjaGFyYWN0ZXIgb2ZmIGZvciBpbnNlcnQgZXhwYW5zaW9uCitpbnNlcnRzLgorCitidWZmZXJfZXhpc3RzKCkgZnVuY3Rpb24gZGlkbid0IHdvcmsgcHJvcGVybHkgZm9yIGJ1ZmZlciBuYW1lcyB3aXRoIGEgc3ltYm9saWMKK2xpbmsgaW4gdGhlbSAoZS5nLiB3aGVuIHVzaW5nIGJ1ZmZlcl9leGlzdHMoIykpLgorCitSZW1vdmVkIHRoZSAiTU9USUZfQ09NTUVOVCIgY29uc3RydWN0aW9uIGZyb20gTWFrZWZpbGUuICBJdCBub3cgd29ya3Mgd2l0aAorRnJlZUJTRCBtYWtlLCBhbmQgcHJvYmFibHkgd2l0aCBOZVhUIG1ha2UgdG9vLgorCitNYXRjaGluZyB0aGUgJ2RlZmluZScgYW5kICdpbmNsdWRlJyBhcmd1bWVudHMgbm93IGhvbm9yIHRoZSBzZXR0aW5ncyBmb3IKKydpZ25vcmVjYXNlJy4gKEFjZXZlZG8pCisKK1doZW4gb25lIGZpbGUgc2hvd24gaW4gdHdvIHdpbmRvd3MsIFZpc3VhbCBzZWxlY3Rpb24gbWl4ZWQgdXAgY3Vyc29yIHBvc2l0aW9uCitpbiBjdXJyZW50IHdpbmRvdyBhbmQgb3RoZXIgd2luZG93LgorCitXaGVuIGRvaW5nICI6ZSBmaWxlIiBmcm9tIGEgaGVscCBmaWxlLCB0aGUgJ2lzaycgb3B0aW9uIHdhc24ndCByZXNldCBwcm9wZXJseSwKK2JlY2F1c2Ugb2YgYSBtb2RlbGluZSBpbiB0aGUgaGVscCBmaWxlLgorCitXaGVuIGRvaW5nICI6ZSEiLCBhIGN1cnNvciBpbiBhbm90aGVyIHdpbmRvdyBvbiB0aGUgc2FtZSBidWZmZXIgY291bGQgYmVjb21lCitpbnZhbGlkLCBsZWFkaW5nIHRvICJtbF9nZXQ6IGludmFsaWQgbG51bSIgZXJyb3JzLgorCitNYXRjaGluZyBidWZmZXIgbmFtZSBmb3Igd2hlbiBleHBhbmRlZCBuYW1lIGhhcyBhIGRpZmZlcmVudCBwYXRoIGZyb20gbm90CitleHBhbmRlZCBuYW1lIChCcnVnbmFyYSkuCisKK05vcm1hbCBtYXBwaW5ncyBkaWRuJ3Qgd29yayBhZnRlciBhbiBvcGVyYXRvci4gIEZvciBleGFtcGxlLCB3aXRoICI6bWFwIFEgZ3EiLAorIlFRIiBkaWRuJ3Qgd29yay4KKworV2hlbiAiOm1ha2UiIHJlc3VsdGVkIGluIHplcm8gZXJyb3JzLCBhICJObyBFcnJvcnMiIGVycm9yIG1lc3NhZ2Ugd2FzIGdpdmVuCisod2hpY2ggYnJlYWtzIG1hcHBpbmdzKS4KKworV2hlbiAiOnNvdXJjaW5nIiBhIGZpbGUsIGxpbmUgbGVuZ3RoIHdhcyBsaW1pdGVkIHRvIDEwMjQgY2hhcmFjdGVycy4gIENUUkwtVgorYmVmb3JlIDxFT0w+IHdhcyBub3QgaGFuZGxlZCBWaSBjb21wYXRpYmxlLiAgKEFjZXZlZG8pCisKK1VuZXhwZWN0ZWQgZXhpdCBmb3IgWDExIEdVSSwgY2F1c2VkIGJ5IFNBVkVfWU9VUlNFTEYgZXZlbnQuICAoSGVpbWFubikKKworQ1RSTC1YIENUUkwtSSBvbmx5IGZvdW5kIG9uZSBtYXRjaCBwZXIgbGluZS4gKEFjZXZlZG8pCitXaGVuIHVzaW5nIGFuIGlsbGVnYWwgQ1RSTC1YIGtleSBpbiBJbnNlcnQgbW9kZSwgdGhlIENUUkwtWCBtb2RlIG1lc3NhZ2UKK3dhcyBzdHVjay4KKworRmluYWxseSBtYW5hZ2VkIHRvIGlnbm9yZSB0aGUgIlF1aXQiIG1lbnUgZW50cnkgb2YgdGhlIFdpbmRvdyBtYW5hZ2VyISAgTm93CitWaW0gb25seSBleGlzdHMgd2hlbiB0aGVyZSBhcmUgbm8gY2hhbmdlZCBidWZmZXJzLgorCitUcnlpbmcgdG8gc3RhcnQgdGhlIEdVSSB3aGVuICRESVNQTEFZIGlzIG5vdCBzZXQgcmVzdWx0ZWQgaW4gYSBjcmFzaC4KK1doZW4gJERJU1BMQVkgaXMgbm90IHNldCBhbmQgZ3ZpbSBzdGFydHMgdmltLCB0aXRsZSB3YXMgcmVzdG9yZWQgdG8gIlRoYW5rcworZm9yIGZseWluZyBWaW0iLgorV2hlbiAkRElTUExBWSBub3Qgc2V0LCBzdGFydGluZyAiZ3ZpbSIgKGRyb3BwaW5nIGJhY2sgdG8gdmltKSBhbmQgdGhlbgorc2VsZWN0aW5nIHRleHQgd2l0aCB0aGUgbW91c2UgY2F1c2VkIGEgY3Jhc2guCisKKyJKIiwgd2l0aCAnam9pbnNwYWNlcycgc2V0LCBvbiBhIGxpbmUgZW5kaW5nIGluICIuICIsIGNhdXNlZCBvbmUgc3BhY2UgdG9vCittYW55IHRvIGJlIGFkZGVkLiAgKEFjZXZlZG8pCisKK0luIGluc2VydCBtb2RlLCBhIENUUkwtUiB7cmVnbmFtZX0gd2hpY2ggZGlkbid0IGluc2VydCBhbnl0aGluZyBsZWZ0IHRoZSAnIicKK29uIHRoZSBzY3JlZW4uCisKKyI6ejEwIiBkaWRuJ3Qgd29yay4gKENsYXBwKQorCisiSGVscCAiKiIgZGlkbid0IHdvcmsuCisKK1JlbmFtZWQgYSBsb3Qgb2YgZnVuY3Rpb25zLCB0byBhdm9pZCBjbGFzaGVzIHdpdGggUE9TSVggbmFtZSBzcGFjZS4KKworV2hlbiBhZGRpbmcgY2hhcmFjdGVycyB0byBhIGxpbmUsIG1ha2luZyBpdCB3cmFwLCB0aGUgZm9sbG93aW5nIGxpbmVzIHdlcmUKK3NvbWV0aW1lcyBub3Qgc2hpZnRlZCBkb3duIChlLmcuIGFmdGVyIGEgdGFnIGp1bXApLgorCitDVFJMLUUsIHdpdGggJ3NvJyBzZXQgYW5kIGN1cnNvciBvbiBsYXN0IGxpbmUsIG5vdyBkb2VzIG5vdCBtb3ZlIGN1cnNvciBhcworbG9uZyBhcyB0aGUgbGFzdCBsaW5lIGlzIG9uIHRoZSBzY3JlZW4uCisKK1doZW4gdGhlcmUgYXJlIHR3byB3aW5kb3dzLCBkb2luZyAiXlcrXlctIiBpbiB0aGUgYm90dG9tIHdpbmRvdyBjb3VsZCBjYXVzZQordGhlIHN0YXR1cyBsaW5lIHRvIGJlIGRvdWJsZWQgKG5vdCByZWRyYXduIGNvcnJlY3RseSkuCisKK1RoaXMgY29tbWFuZCB3b3VsZCBoYW5nOiAiOm4gYGNhdGAiLiAgTm93IGNvbm5lY3Qgc3RkaW4gb2YgdGhlIGV4dGVybmFsCitjb21tYW5kIHRvIC9kZXYvbnVsbCwgd2hlbiBleHBhbmRpbmcuCisKK0ZpeGVkIGxhbGxvYygwLCkgZXJyb3IgZm9yICI6ZWNobyAlOmU6ciIuICAoQWNldmVkbykKKworVGhlICIrY29tbWFuZCIgYXJndW1lbnQgdG8gIjpzcGxpdCIgZGlkbid0IHdvcmsgd2hlbiB0aGVyZSB3YXMgbm8gZmlsZSBuYW1lLgorCitXaGVuIHNlbGVjdGluZyB0ZXh0IGluIHRoZSBHVUksIHdoaWNoIGlzIHRoZSBvdXRwdXQgb2YgYSBjb21tYW5kLWxpbmUgY29tbWFuZAorb3IgYW4gZXh0ZXJuYWwgY29tbWFuZCwgdGhlIGludmVyc2lvbiB3b3VsZCBzb21ldGltZXMgcmVtYWluLgorCitHVUk6ICItbWggNzAiIGFyZ3VtZW50IHdhcyBicm9rZW4uICBOb3csIHdoZW4gbWVudWhlaWdodCBpcyBzcGVjaWZpZWQsIGl0IGlzCitub3QgY2hhbmdlZCBhbnltb3JlLgorCitHVUk6IFdoZW4gdXNpbmcgdGhlIHNjcm9sbGJhciBvciBtb3VzZSB3aGlsZSBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCwKK3RoaXMgY2F1c2VkIGdhcmJhZ2UgY2hhcmFjdGVycy4KKworU2hvd21hdGNoIHNvbWV0aW1lcyBqdW1wZWQgdG8gdGhlIHdyb25nIHBvc2l0aW9uLiAgV2FzIGNhdXNlZCBieSBhIGNhbGwgdG8KK2ZpbmRtYXRjaCgpIHdoZW4gcmVkcmF3aW5nIHRoZSBkaXNwbGF5ICh3aGVuIHN5bnRheCBoaWdobGlnaHRpbmcgaXMgb24pLgorCitTZWFyY2ggcGF0dGVybiAiXChhICpcKVx7M30gZGlkIG5vdCB3b3JrIGNvcnJlY3RseSwgYWxzbyBtYXRjaGVkICJhIGEiLgorUHJvYmxlbSB3aXRoIGJyYWNlX2NvdW50IG5vdCBiZWluZyBkZWNyZW1lbnRlZC4KKworV2lsZGNhcmQgZXhwYW5zaW9uIGFkZGVkIHRvbyBtYW55IG5vbi1tYXRjaGluZyBmaWxlIG5hbWVzLgorCitXaGVuICdpc2tleXdvcmQnIGNvbnRhaW5zIGNoYXJhY3RlcnMgbGlrZSAnficsICIqIiBhbmQgIiMiIGRpZG4ndCB3b3JrCitwcm9wZXJseS4gKEFjZXZlZG8pCisKK09uIExpbnV4LCBvbiBhIEZBVCBmaWxlIHN5c3RlbSwgbW9kaWZpY2F0aW9uIHRpbWUgY2FuIGNoYW5nZSBieSBvbmUgc2Vjb25kLgorQXZvaWQgYSAiZmlsZSBoYXMgY2hhbmdlZCIgd2FybmluZyBmb3IgYSBvbmUgc2Vjb25kIGRpZmZlcmVuY2UuCisKK1doZW4gdXNpbmcgdGhlIHBhZ2Utc3dpdGNoaW5nIGluIGFuIHh0ZXJtLCBWaW0gd291bGQgcG9zaXRpb24gdGhlIGN1cnNvciBvbgordGhlIGxhc3QgbGluZSBvZiB0aGUgd2luZG93IG9uIGV4aXQuICBBbHNvIHJlbW92ZWQgdGhlIGN1cnNvciBwb3NpdGlvbmluZyBmb3IKKyI6ISIgY29tbWFuZHMuCisKKyI6Zy9wYXQvcCIgY29tbWFuZCAocGFydGx5KSBvdmVyd3JvdGUgdGhlIGNvbW1hbmQuICBOb3cgdGhlIG91dHB1dCBpcyBvbiBhCitzZXBhcmF0ZSBsaW5lLgorCitXaXRoICdpYycgYW5kICdzY3MnIHNldCwgYSBzZWFyY2ggZm9yICJLZXl3b3JkIiwgaWdub3JlLWNhc2UgbWF0Y2hlcyB3ZXJlCitoaWdobGlnaHRlZCB0b28uCisKKyJeIiBvbiBhIGxpbmUgd2l0aCBvbmx5IHdoaXRlIHNwYWNlLCBwdXQgY3Vyc29yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCitXaGVuIGRlbGV0aW5nIGNoYXJhY3RlcnMgYmVmb3JlIHdoZXJlIGluc2VydGlvbiBzdGFydGVkICgnYnMnID09IDIpLCBjb3VsZCBub3QKK3VzZSBhYmJyZXZpYXRpb25zLgorCitDVFJMLUUgYXQgZW5kIG9mIGZpbGUgcHV0cyBjdXJzb3IgYmVsb3cgdGhlIGZpbGUsIGluIFZpc3VhbCBtb2RlLCB3aGVuICdzbycgaXMKK25vbi16ZXJvLiAgQ1RSTC1FIGRpZG4ndCB3b3JrIHdoZW4gJ3NvJyBpcyBiaWcgYW5kIHRoZSBsaW5lIGJlbG93IHRoZSB3aW5kb3cKK3dyYXBzLiAgQ1RSTC1FLCB3aGVuICdzbycgaXMgbm9uLXplcm8sIGF0IGVuZCBvZiB0aGUgZmlsZSwgY2F1c2VkIGp1bXBpbmcKK3VwLWRvd24uCisKKyI6cmV0YWIiIGRpZG4ndCB3b3JrIHdlbGwgd2hlbiAnbGlzdCcgaXMgc2V0LgorCitBbWlnYTogV2hlbiBpbnNlcnRpbmcgY2hhcmFjdGVycyBhdCB0aGUgbGFzdCBsaW5lIG9uIHRoZSBzY3JlZW4sIGNhdXNpbmcgaXQKK3RvIHdyYXAsIG1lc3NlZCB1cCB0aGUgZGlzcGxheS4gIEl0IGFwcGVhcnMgdGhhdCBhICdcbicgb24gdGhlIGxhc3QgbGluZQorZG9lc24ndCBhbHdheXMgY2F1c2UgYSBzY3JvbGwgdXAuCisKK0luIEluc2VydCBtb2RlICIwPEMtRD48Qy1EPiIgZGVsZXRlZCBhbiBleHRyYSBjaGFyYWN0ZXIsIGJlY2F1c2UgVmltIHRob3VnaHQKK3RoYXQgdGhlICIwIiB3YXMgc3RpbGwgdGhlcmUuIChBY2V2ZWRvKQorCisientjb3VudH1sIiBpZ25vcmVkIHRoZSBjb3VudC4gIEFsc28gZm9yICJ6aCIgZXQuIGFsLiAoQWNldmVkbykKKworIlMiIHdoZW4gJ2F1dG9pbmRlbnQnIGlzIG9mZiBkaWRuJ3QgZGVsZXRlIGxlYWRpbmcgd2hpdGUgc3BhY2UuCisKKyIvPFRhYj4iIGxhbmRlZCBvbiB0aGUgd3JvbmcgY2hhcmFjdGVyIHdoZW4gJ2luY3NlYXJjaCcgaXMgc2V0LgorCitBc2tpbmcgYSB5ZXMvbm8gcXVlc3Rpb24gY291bGQgY2F1c2UgYSB8aGl0LWVudGVyfCBwcm9tcHQuCisKK1doZW4gdGhlIGZpbGUgY29uc2lzdHMgb2Ygb25lIGxvbmcgbGluZSAoPjQxMDAgY2hhcmFjdGVycyksIG1ha2luZyBjaGFuZ2VzCitjYXVzZWQgdmFyaW91cyBlcnJvcnMgYW5kIGEgY3Jhc2guCisKK0RKR1BQIHZlcnNpb24gY291bGQgbm90IHNhdmUgbG9uZyBsaW5lcyAoPjY0MDAwKSBmb3IgdW5kby4KKworInl3IiBvbiB0aGUgbGFzdCBjaGFyIGluIHRoZSBmaWxlIGRpZG4ndCB3b3JrLiAgQWxzbyBmaXhlZCAiNngiIGF0IHRoZSBlbmQgb2YKK3RoZSBsaW5lLiAiNlgiIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgZmFpbHMsIGJ1dCBkb2VzIG5vdCBicmVhayBhIG1hcHBpbmcuICBJbgorZ2VuZXJhbCwgYSBtb3ZlbWVudCBmb3IgYW4gb3BlcmF0b3IgZG9lc24ndCBiZWVwIG9yIGZsdXNoIGEgbWFwcGluZywgYnV0IHdoZW4KK3RoZXJlIGlzIG5vdGhpbmcgdG8gb3BlcmF0ZSBvbiBpdCBiZWVwcyAodGhpcyBpcyBWaSBjb21wYXRpYmxlKS4KKworIm0nIiBhbmQgIm1gIiBub3cgc2V0IHRoZSAnJyBtYXJrIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24uCisKK1VuaXg6IFJlc2V0dGluZyBvZiBzaWduYWxzIGZvciBleHRlcm5hbCBwcm9ncmFtIGRpZG4ndCB3b3JrLCBiZWNhdXNlIFNJR19ERkwKK2FuZCBOVUxMIGFyZSB0aGUgc2FtZSEgIEZvciAiISF5ZXN8ZGQgY291bnQ9MXwsIHRoZSB5ZXMgY29tbWFuZCBrZXB0IG9uCitydW5uaW5nLgorCitQYXJ0bHkgZml4ZWQ6IFVuaXggR1VJOiBUeXBlYWhlYWQgd2hpbGUgZXhlY3V0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQgd2FzIGxvc3QuCitOb3cgaXQncyBub3QgbG9zdCB3aGlsZSB0aGUgY29tbWFuZCBpcyBwcm9kdWNpbmcgb3V0cHV0LgorCitUeXBpbmcgPFMtVGFiPiBpbiBJbnNlcnQgbW9kZSwgd2hlbiBpdCBpc24ndCBtYXBwZWQsIGluc2VydGVkICI8Uy1UYWI+Ii4gIE5vdworaXQgd29ya3MgbGlrZSBhIG5vcm1hbCA8VGFiPiwganVzdCBsaWtlIDxDLVRhYj4gYW5kIDxNLVRhYj4uCisKK1JlZHJhd2luZyBydWxlciBkaWRuJ3QgY2hlY2sgZm9yIG9sZCB2YWx1ZSBjb3JyZWN0bHkgKGNhdXNlZCBVTVIgd2FybmluZ3MgaW4KK1B1cmlmeSkuCisKK05lZ2F0aXZlIGFycmF5IGluZGV4IGluIGZpbmlzaF92aW1pbmZvX2hpc3RvcnkoKS4KKworIjpnL14vZHxtbyAkIiBkZWxldGVkIGFsbCB0aGUgbGluZXMuICBUaGUgIjptb3ZlIiBjb21tYW5kIG5vdyByZW1vdmVzIHRoZQorOmdsb2JhbCBtYXJrIGZyb20gdGhlIG1vdmVkIGxpbmVzLgorCitVc2luZyAidkciIHdoaWxlIHRoZSBsYXN0IGxpbmUgaW4gdGhlIHdpbmRvdyBpcyBhICJAIiBsaW5lLCBkaWRuJ3QgdXBkYXRlCitjb3JyZWN0bHkuICBKdXN0IHRoZSAidiIgc2hvd2VkICJ+IiBsaW5lcy4KKworImRhdyIgb24gdGhlIGxhc3QgY2hhciBvZiB0aGUgZmlsZSwgd2hlbiBpdCdzIGEgc3BhY2UsIG1vdmVkIHRoZSBjdXJzb3IgYmV5b25kCit0aGUgZW5kIG9mIHRoZSBsaW5lLgorCitXaGVuICdobHNlYXJjaCcgd2FzIHNldCBvciByZXNldCwgb25seSB0aGUgY3VycmVudCBidWZmZXIgd2FzIHJlZHJhd24sIHdoaWxlCit0aGlzIGFmZmVjdHMgYWxsIHdpbmRvd3MuCisKK0NUUkwtXiwgcG9zaXRpb25pbmcgdGhlIGN1cnNvciBzb21ld2hlcmUgZnJvbSAxLzIgdG8gMSAxLzIgc2NyZWVuIGRvd24gdGhlCitmaWxlLCBwdXQgdGhlIGN1cnNvciBhdCB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3csIGluc3RlYWQgb2YgaGFsZndheS4KKworV2hlbiBzY3JvbGxpbmcgdXAgZm9yICI6YXBwZW5kIiBjb21tYW5kLCBub3QgYWxsIHdpbmRvd3Mgd2VyZSB1cGRhdGVkCitjb3JyZWN0bHkuCisKK1doZW4gJ2hsc2VhcmNoJyBpcyBzZXQsIGFuZCBhbiBhdXRvLWluZGVudCBpcyBoaWdobGlnaHRlZCwgcHJlc3NpbmcgPEVzYz4KK2RpZG4ndCByZW1vdmUgdGhlIGhpZ2hsaWdodGluZywgYWx0aG91Z2ggdGhlIGluZGVudCB3YXMgZGVsZXRlZC4KKworV2hlbiAncnUnIHNldCBhbmQgJ25vc2MnLCB1c2luZyAiJGoiIHNob3dlZCBhIHdyb25nIHJ1bGVyLgorCitVbmRlciBYZnJlZSAzLjIsIFNoaWZ0LVRhYiBkaWRuJ3Qgd29yayAod3Jvbmcga2V5c3ltIGlzIHVzZWQpLgorCitNYXBwaW5nIDxTLVRhYj4gZGlkbid0IHdvcmsuICBDaGFuZ2VkIHRoZSBrZXkgdHJhbnNsYXRpb25zIHRvIHVzZSB0aGUgc2hvcnRlc3QKK2tleSBjb2RlIHBvc3NpYmxlLiAgVGhpcyBtYWtlcyB0aGUgdGVybWNvZGUgdHJhbnNsYXRpb25zIGFuZCBtYXBwaW5ncyBtb3JlCitjb25zaXN0ZW50LiAgTm93IGFsbCBtb2RpZmllcnMgd29yayBpbiBhbGwgY29tYmluYXRpb25zLCBub3Qgb25seSB3aXRoIDxUYWI+LAorYnV0IGFsc28gd2l0aCA8U3BhY2U+LCA8Q1I+LCBldGMuCisKK0ZvciBVbml4LCByZXN0b3JlIHRocmVlIG1vcmUgc2lnbmFscy4gIEFuZCBWaW0gY2F0Y2hlcyBTSUdJTlQgbm93LCBzbyBDVFJMLUMKK2luIEV4IG1vZGUgZG9lc24ndCBtYWtlIFZpbSBleGl0LgorCisiImE1WSIgeWFua2VkIDI1IGxpbmVzIGluc3RlYWQgb2YgNS4KKworInZyeHh4PEVzYz4iIGluIGFuIGVtcHR5IGxpbmUgY291bGQgbm90IGJlIHVuZG9uZS4KKworQSBDVFJMLUMgdGhhdCBicmVha3MgIjptYWtlIiBjYXVzZWQgdGhlIGVycm9yZmlsZSBub3QgdG8gYmUgcmVhZCAoYW5ub3lpbmcKK3doZW4geW91IHdhbnQgdG8gaGFuZGxlIHdoYXQgIjptYWtlIiBwcm9kdWNlZCBzbyBmYXIpLgorCisiOjA7L3BhdCIgZGlkbid0IGZpbmQgInBhdCIgaW4gbGluZSAxLgorCitTZWFyY2ggZm9yICIvdGVzdC9zKzEiIGF0IGZpcnN0IGNoYXIgb2YgZmlsZSBnYXZlIGJvdHRvbS10b3AgbWVzc2FnZSwgb3IKK2RpZG4ndCB3b3JrIGF0IGFsbCB3aXRoICdub3dyYXBzY2FuJy4KKworQnVnIGluIHZpbWluZm8gaGlzdG9yeS4gIENvdWxkIGNhdXNlIGEgY3Jhc2ggb24gZXhpdC4KKworIjpwcmludCIgZGlkbid0IHB1dCBjdXJzb3Igb24gZmlyc3Qgbm9uLWJsYW5rIGluIGxpbmUuCisKKyI6MHIgIWNhdCA8L2Rldi9udWxsIiBsZWZ0IGN1cnNvciBpbiBsaW5lIHplcm8sIHdpdGggdmVyeSBzdHJhbmdlIGVmZmVjdHMuCisKK1dpdGggJ3Nob3djbWQnIHNldCBhbmQgJ3RpbWVvdXRsZW4nIHNldCB0byBhIGZldyBzZWNvbmRzLCB0cmljayB0byBwb3NpdGlvbgordGhlIGN1cnNvciBsZWZ0d2FyZHMgZGlkbid0IHdvcmsuCisKK0FJWCBzdHR5IHNldHRpbmdzIHdlcmUgcmVzdG9yZWQgdG8gY3M1IGluc3RlYWQgb2YgY3M4IChXaW5uKS4KKworRmlsZSBuYW1lIGNvbXBsZXRpb24gZGlkbid0IHdvcmsgZm9yICJ6c2giIHZlcnNpb25zIHRoYXQgcHV0IHNwYWNlcyBiZXR3ZWVuCitmaWxlIG5hbWVzLCBpbnN0ZWFkIG9mIE5VTHMuCisKK0NoYW5nZWQgIlhhd0NoYWluKiIgdG8gIlh0Q2hhaW4qIiwgc2hvdWxkIHdvcmsgZm9yIG1vcmUgc3lzdGVtcy4KKworSW5jbHVkZWQgcXVpdGUgYSBmZXcgZml4ZXMgZm9yIHJpZ2h0bGVmdCBtb2RlIChMb3R0ZW0pLgorCitEaWRuJ3QgYXNrIHRvIHxoaXQtZW50ZXJ8IHdoZW4gR1VJIGlzIHN0YXJ0ZWQgYW5kIGVycm9yIG1lc3NhZ2VzIGFyZSBwcmludGVkLgorCitXaGVuIHRyeWluZyB0byBlZGl0IGEgZmlsZSBpbiBhIG5vbi1leGlzdGVudCBkaXJlY3RvcnksIGVuZGVkIHVwIHdpdGggZWRpdGluZworIk5vIGZpbGUiLgorCisiZ3FhcCIgdG8gZm9ybWF0IGEgcGFyYWdyYXBoIGRpZCB0b28gbXVjaCByZWRyYXdpbmcuCisKK1doZW4gJ2hsc2VhcmNoJyBzZXQsIG9ubHkgdGhlIGN1cnJlbnQgd2luZG93IHdhcyB1cGRhdGVkIGZvciBhIG5ldyBzZWFyY2gKK3BhdHRlcm4uCisKK1NvbWV0aW1lcyBlcnJvciBtZXNzYWdlcyBvbiBzdGFydHVwIGRpZG4ndCBjYXVzZSBhIHxoaXQtZW50ZXJ8IHByb21wdCwKK2JlY2F1c2Ugb2YgYXV0b2NvbW1hbmRzIGNvbnRhaW5pbmcgYW4gZW1wdHkgbGluZS4KKworV2FzIHBvc3NpYmxlIHRvIHNlbGVjdCBwYXJ0IG9mIHRoZSB3aW5kb3cgaW4gdGhlIGJvcmRlciwgYmVsb3cgdGhlIGNvbW1hbmQKK2xpbmUuCisKKyc8IGFuZCAnPiBtYXJrcyB3ZXJlIG5vdCBhdCB0aGUgY29ycmVjdCBwb3NpdGlvbiBhZnRlciBsaW5ld2lzZSBWaXN1YWwKK3NlbGVjdGlvbi4KKworV2hlbiB0cmFuc2xhdGluZyBhIGhlbHAgYXJndW1lbnQgdG8gIkNUUkwteCIsIHByZXBlbmQgb3IgYXBwZW5kIGEgJ18nLCB3aGVuCithcHBsaWNhYmxlLgorCitCbG9ja3dpc2UgdmlzdWFsIG1vZGUgd2Fzbid0IGNvcnJlY3Qgd2hlbiBtb3ZpbmcgdmVydGljYWxseSBvdmVyIGEgc3BlY2lhbAorY2hhcmFjdGVyIChkaXNwbGF5ZWQgYXMgdHdvIHNjcmVlbiBjaGFyYWN0ZXJzKS4KKworUmVuYW1lZCAic3RydWN0IG9wdGlvbiIgdG8gInN0cnVjdCB2aW1vcHRpb24iIHRvIGF2b2lkIG5hbWUgY2xhc2ggd2l0aCBHTlUKK2dldG9wdCgpLgorCisiOmFiY2xlYXIiIGRpZG4ndCB3b3JrIChidXQgIjppYWJjbGVhciIgYW5kICI6Y2FiY2xlYXIiIGRpZCB3b3JrKS4KKworV2hlbiAnbm93cmFwJyB1c2VkLCBzY3JlZW4gd2Fzbid0IGFsd2F5cyB1cGRhdGVkIGNvcnJlY3RseS4KKworInZpbSAtYyBzcGxpdCBmaWxlIiBkaXNwbGF5ZWQgZXh0cmEgbGluZXMuCisKK0FmdGVyIHN0YXJ0aW5nIHRoZSBHVUksIHNlYXJjaGVkIHRoZSB0ZXJtY2FwIGZvciBhICJndWkiIHRlcm0uCisKK1doZW4gJ2hscycgdXNlZCwgc2VhcmNoIGZvciAiXiQiIGNhdXNlZCBhIGhhbmcuCitXaGVuICdobHMnIHdhcyBzZXQsIGFuIGVycm9yIGluIHRoZSBsYXN0IHJlZ2V4cCBjYXVzZWQgdHJvdWJsZS4KKworVW5peDogT25seSBvdXRwdXQgYW4gZXh0cmEgPEVPTD4gb24gZXhpdCB3aGVuIG91dHB1dHRlZCBzb21ldGhpbmcgaW4gdGhlCithbHRlcm5hdGUgc2NyZWVuLCBvciB3aGVuIHRoZXJlIGlzIGEgbWVzc2FnZSB0aGF0IG5lZWRzIHRvIGJlIGNsZWFyZWQuCisKKyIvYVx7IiBkaWQgc3RyYW5nZSB0aGluZ3MsIGRlcGVuZGluZyBvbiBwcmV2aW91cyBzZWFyY2guCisKKyJjfSIgb25seSByZWRyZXcgb25lIGxpbmUgKHdpdGggLXUgTk9ORSkuCisKK0ZvciBtYXBwaW5ncywgQ1RSTC1NRVRBLUEgd2FzIHNob3duIGFzIDxNLV5BPiBpbnN0ZWFkIG9mIDxNQy1BPiwgd2hpbGUgOm1hcAorb25seSBhY2NlcHRzIDxNQy1BPi4gIE5vdyA8TS1DLUE+IGlzIHNob3duLgorCitVbml4OiBXaGVuIHVzaW5nIGZ1bGwgcGF0aCBuYW1lIGluIGEgdGFncyBmaWxlLCB3aGljaCBjb250YWlucyBhIGxpbmssIGFuZAorJ2hpZGRlbicgc2V0IGFuZCBqdW1waW5nIHRvIGEgdGFnIGluIHRoZSBjdXJyZW50IGZpbGUsIHdvdWxkIGdldCBib2d1cworQVRURU5USU9OIG1lc3NhZ2UuICBTb2x2ZWQgYnkgYWx3YXlzIGV4cGFuZGluZyBmaWxlIG5hbWVzLCBldmVuIHdoZW4gc3RhcnRpbmcKK3dpdGggJy8nLgorCisnaGxzZWFyY2gnIGhpZ2hsaWdodGluZyBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgKGUuZy4sIGEgVEFCKSBkaWRuJ3QgaGlnaGxpZ2h0Cit0aGUgd2hvbGUgdGhpbmcuCisKKyJyPENSPiIgZGlkbid0IHdvcmsgY29ycmVjdGx5IG9uIHRoZSBsYXN0IGNoYXIgb2YgYSBsaW5lLgorCitzb21ldGltZXMgYSB3aW5kb3cgcmVzaXplIG9yIG90aGVyIHNpZ25hbCBjYXVzZWQgYW4gZW5kbGVzcyBsb29wLCBpbnZvbHZpbmcKK3NldF93aW5zaXplKCkuCisKKyJ2aW0gLXIiIGRpZG4ndCB3b3JrLCBpdCB3b3VsZCBqdXN0IGhhbmcgKHVzaW5nIHRnZXRlbnQoKSB3aGlsZSAndGVybScgaXMKK2VtcHR5KS4KKworImdrIiB3aGlsZSAnbm93cmFwJyBzZXQgbW92ZWQgdHdvIGxpbmVzIHVwLgorCitXaGVuIHdpbmRvd3MgYXJlIHNwbGl0LCBhIG1lc3NhZ2UgdGhhdCBjYXVzZXMgYSBzY3JvbGwtdXAgbWVzc2VkIHVwIG9uZSBvZiB0aGUKK3dpbmRvd3MsIHdoaWNoIHJlcXVpcmVkIGEgQ1RSTC1MIHRvIGJlIHR5cGVkLgorCitQb3NzaWJsZSBlbmRsZXNzIGxvb3Agd2hlbiB1c2luZyBzaGVsbCBjb21tYW5kIGluIHRoZSBHVUkuCisKK01lbnVzIGRlZmluZWQgaW4gdGhlIC52aW1yYyB3ZXJlIHJlbW92ZWQgd2hlbiBHVUkgc3RhcnRlZC4KKworQ3Jhc2ggd2hlbiBwYXN0aW5nIHdpdGggdGhlIG1vdXNlIGluIGluc2VydCBtb2RlLgorCitDcmFzaCB3aGl0aCAiOnVubWVudSAqIiBpbiAuZ3ZpbXJjIGZvciBBdGhlbmEuCisKKyI1Pj4iIHNoaWZ0ZWQgNSBsaW5lcyA1IHRpbWVzLCBpbnN0ZWFkIG9mIDEgdGltZS4KKworQ1RSTC1DIHdoZW4gZ2V0dGluZyBhIHByb21wdCBpbiAiOmdsb2JhbCIgZGlkbid0IGludGVycnVwdC4KKworV2hlbiAnc28nIGlzIG5vbi16ZXJvLCBhbmQgbW92aW5nIHRoZSBzY3JvbGxiYXIgY29tcGxldGVseSB0byB0aGUgYm90dG9tLAordGhlcmUgd2FzIGEgbG90IG9mIGZsYXNoaW5nLgorCitHVUk6IFNjcm9sbGJhciBpZGVudCBtdXN0IGJlIGxvbmcgZm9yIERFQyBBbHBoYS4KKworU29tZSBmdW5jdGlvbnMgY2FsbGVkIHZpbV9yZWdjb21wKCkgd2l0aG91dCBzZXR0aW5nIHJlZ19tYWdpYywgd2hpY2ggY291bGQKK2xlYWQgdG8gdW5wcmVkaWN0YWJsZSBtYWdpY25lc3MuCisKK0NyYXNoIHdoZW4gY2xpY2tpbmcgYXJvdW5kIHRoZSBzdGF0dXMgbGluZSwgY291bGQgZ2V0IGEgc2VsZWN0aW9uIHdpdGggYQorYmFja3dhcmRzIHJhbmdlLgorCitXaGVuIGRlbGV0aW5nIG1vcmUgdGhhbiBvbmUgbGluZSBjaGFyYWN0ZXJ3aXNlLCB0aGUgbGFzdCBjaGFyYWN0ZXIgd2Fzbid0CitkZWxldGVkLgorCitHVUk6IFN0YXR1cyBsaW5lIGNvdWxkIGJlIG92ZXJ3cml0dGVuIHdoZW4gbW92aW5nIHRoZSBzY3JvbGxiYXIgcXVpY2tseSAob3IKK3doZW4gJ3dkJyBpcyBub24temVybykuCisKK0FuIEVTQyBhdCB0aGUgZW5kIG9mIGEgIjpub3JtYWwiIGNvbW1hbmQgY2F1c2VkIGEgd2FpdCBmb3IgYSB0ZXJtaW5hbCBjb2RlIHRvCitmaW5pc2guICBOb3csIGEgdGVybWluYWwgY29kZSBpcyBub3QgcmVjb2duaXplZCB3aGVuIGl0cyBzdGFydCBjb21lcyBmcm9tIGEKK21hcHBpbmcgb3IgIjpub3JtYWwiIGNvbW1hbmQuCisKK0luY2x1ZGVkIHBhdGNoZXMgZnJvbSBSb2JlcnQgV2ViYiBmb3IgR1VJLiAgTGF5b3V0IG9mIHRoZSB3aW5kb3dzIGlzIG5vdyBkb25lCitpbnNpZGUgVmltLCBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlIGxheW91dCBtYW5hZ2VyIGRvIHRoaXMuICBNYWtlcyBWaW0gd29yaword2l0aCBMZXNzdGlmIQorCitVTVIgd2FybmluZyBpbiBzZXRfZXhwYW5kX2NvbnRleHQoKS4KKworTWVtb3J5IGxlYWs6IGJfd2lubG51bSBsaXN0IHdhcyBuZXZlciBmcmVlZC4KKworUmVtb3ZlZCBUSU9DTFNFVC9USU9DTEdFVCBjb2RlIGZyb20gb3NfdW5peC5jLiAgV2FzIGNoYW5naW5nIHNvbWUgb2YgdGhlCit0ZXJtaW5hbCBzZXR0aW5ncywgYW5kIGxvb2tlZCBsaWtlIGl0IHdhc24ndCBkb2luZyBhbnl0aGluZyBnb29kLiAgKHN1Z2dlc3RlZAorYnkgSnVlcmdlbiBXZWlnZXJ0KS4KKworUnVsZXIgb3Zlcndyb3RlICJpcyBhIGRpcmVjdG9yeSIgbWVzc2FnZS4gIFdoZW4gc3RhcnRpbmcgdXAsIGFuZCAnY21kaGVpZ2h0Jworc2V0IHRvID4gMSwgZmlyc3QgbWVzc2FnZSBjb3VsZCBzdGlsbCBiZSBpbiB0aGUgbGFzdCBsaW5lLgorCitSZW1vdmVkIHByb3RvdHlwZSBmb3IgcHV0ZW52KCkgZnJvbSBwcm90by5oLCBpdCdzIGFscmVhZHkgaW4gb3NkZWYyLmguaW4uCisKK0luIHJlcGxhY2UgbW9kZSwgd2hlbiBtb3ZpbmcgdGhlIGN1cnNvciBhbmQgdGhlbiBiYWNrc3BhY2luZywgd3JvbmcgY2hhcmFjdGVycword2VyZSBpbnNlcnRlZC4KKworV2luMzIgR1VJIHdhcyBjaGVja2luZyBmb3IgYSBDVFJMLUMgdG9vIG9mdGVuLCBtYWtpbmcgaXQgc2xvdy4KKworUmVtb3ZlZCBtYXBwaW5ncyBmb3IgTVMtRE9TIHRoYXQgd2VyZSBhbHJlYWR5IGNvdmVyZWQgYnkgY29tbWFuZHMuCisKK1doZW4gdmlzdWFsbHkgc2VsZWN0aW5nIGFsbCBsaW5lcyBpbiBhIGZpbGUsIGN1cnNvciBhdCBsYXN0IGxpbmUsIHRoZW4gIkoiLgorR2F2ZSBtbF9nZXQgZXJyb3JzLiAgV2FzIGEgcHJvYmxlbSB3aXRoIHNjcm9sbGluZyBkb3duIGR1cmluZyByZWRyYXdpbmcuCisKK1doZW4gZG9pbmcgYSBsaW5ld2lzZSBvcGVyYXRvciwgYW5kIHRoZW4gYW4gb3BlcmF0b3Igd2l0aCBhIG1vdXNlIGNsaWNrLCBpdAord2FzIGFsc28gbGluZXdpc2UsIGluc3RlYWQgb2YgY2hhcmFjdGVyd2lzZS4KKworV2hlbiAnbGlzdCcgaXMgc2V0LCB0aGUgY29sdW1uIG9mIHRoZSBydWxlciB3YXMgd3JvbmcuCisKK1NwdXJpb3VzIGVycm9yIG1lc3NhZ2UgZm9yICIvXChiXCtcKSoiLgorCitXaGVuIHZpc3VhbGx5IHNlbGVjdGVkIG1hbnkgbGluZXMsIG1lc3NhZ2UgZnJvbSAiOncgZmlsZSIgZGlzYXBwZWFyZWQgd2hlbgorcmVkcmF3aW5nIHRoZSBzY3JlZW4uCisKKyI6c2V0IDxNLWI+PV5bYiIsIHRoZW4gaW5zZXJ0ICJeW2IiLCB3YWl0ZWQgZm9yIGFub3RoZXIgY2hhcmFjdGVyLiAgQW5kIHRoZW4KK2luc2VydGVkICI8TS1iPiIgaW5zdGVhZCBvZiB0aGUgcmVhbCA8TS1iPiBjaGFyYWN0ZXIuICBXYXMgdHJ5aW5nIHRvIGluc2VydAorS19TUEVDSUFMIHggTlVMLgorCitDVFJMLVcgXSBkaWRuJ3QgdXNlIGNvdW50IHRvIHNldCB3aW5kb3cgaGVpZ2h0LgorCitHVUk6ICItZm9udCIgY29tbWFuZC1saW5lIGFyZ3VtZW50IGRpZG4ndCBvdmVycmlkZSAnZ3VpZm9udCcgc2V0dGluZyBmcm9tCisuZ3ZpbXJjLiAoQWNldmVkbykKKworR1VJOiBjbGlwYm9hcmQgd2Fzbid0IHVzZWQgZm9yICIqeSIuICBBbmQgc29tZSBtb3JlIFdpbjMyL1gxMSBkaWZmZXJlbmNlcworZml4ZWQgZm9yIHRoZSBjbGlwYm9hcmQgKFdlYmIpLgorCitKdW1waW5nIGZyb20gb25lIGhlbHAgZmlsZSB0byBhbm90aGVyIGhlbHAgZmlsZSwgd2l0aCAnY29tcGF0aWJsZScgc2V0LAorcmVtb3ZlZCB0aGUgJ2hlbHAnIGZsYWcgZnJvbSB0aGUgYnVmZmVyLgorCitGaWxlLXdyaXRhYmxlIGJpdCBjb3VsZCBiZSByZXNldCB3aGVuIHVzaW5nICI6dyEiIGZvciBhIHJlYWRvbmx5IGZpbGUuCisKK1RoZXJlIHdhcyBhIHdhaXQgZm9yIENUUkwtTyBuIGluIEluc2VydCBtb2RlLCBiZWNhdXNlIHRoZSBzZWFyY2ggcGF0dGVybiB3YXMKK3Nob3duLgorUmVkdWNlZCB3YWl0LCB0byBhbGxvdyByZWFkaW5nIGEgbWVzc2FnZSwgZnJvbSAxMCB0byAzIHNlY29uZHMuICBJdCBzZWVtZWQKK25vdGhpbmcgd2FzIGhhcHBlbmluZy4KKworIjpyZWNvdmVyIiBmb3VuZCBzYW1lIHN3YXAgZmlsZSB0d2ljZS4KKworR1VJOiAiKnl5IG9ubHkgd29ya2VkIHRoZSBzZWNvbmQgdGltZSAod2hlbiBwYXN0aW5nIHRvIGFuIHh0ZXJtKS4iCisKK0RKR1BQIHZlcnNpb24gKGRvczMyKTogVGhlIHN5c3RlbSBmbGFncyB3ZXJlIGNsZWFyZWQuCisKK0RvczMyIHZlcnNpb246IFVuZGVyc2NvcmVzIHdlcmUgc29tZXRpbWVzIHJlcGxhY2VkIHdpdGggeS11bWxhdXQgKExldmluKS4KKworVmVyc2lvbiA0LjEgb2YgbmN1cnNlcyBjYW4ndCBoYW5kbGUgdHB1dHMoIiIsIC4uKS4gIEF2b2lkIGNhbGxpbmcgdHB1dHMoKSB3aXRoCithbiBlbXB0eSBzdHJpbmcuCisKKzxTLVRhYj4gaW4gdGhlIGNvbW1hbmQtbGluZSB3b3JrZWQgbGlrZSBDVFJMLVAgd2hlbiBubyBjb21wbGV0aW9uIHN0YXJ0ZWQgeWV0LgorTm93IGl0IGRvZXMgY29tcGxldGlvbiwgbGFzdCBtYXRjaCBmaXJzdC4KKworVW5peDogQ291bGQgZ2V0IGFubm95aW5nICJjYW4ndCB3cml0ZSB2aW1pbmZvIiBtZXNzYWdlIGFmdGVyIGRvaW5nICJzdSIuICBOb3cKK3RoZSB2aW1pbmZvIGZpbGUgaXMgb3ZlcndyaXR0ZW4sIGFuZCB0aGUgdXNlciBzZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgb25lLgorCisiOnNldCB0ZXJtPWJ1aWx0aW5fZ3VpIiBzdGFydGVkIHRoZSBHVUkgaW4gYSB3cm9uZyB3YXkuICBOb3cgaXQncyBub3QKK2FsbG93ZWQgYW55bW9yZS4gIEJ1dCAidmltIC1UIGd1aSIgZG9lcyBzdGFydCB0aGUgR1VJIGNvcnJlY3RseSBub3cuCisKK0dVSTogVHJpcGxlIGNsaWNrIGFmdGVyIGEgbGluZSBvbmx5IHB1dCBsYXN0IGNoYXIgaW4gc2VsZWN0aW9uLCB3aGVuIGl0IGlzIGEKK3NpbmdsZSBjaGFyYWN0ZXIgd29yZC4KKworV2hlbiB0aGUgd2luZG93IGlzIGJpZ2dlciB0aGFuIHRoZSBzY3JlZW4sIHRoZSBzY3JvbGxpbmcgdXAgb2YgbWVzc2FnZXMgd2FzCit3cm9uZyAoZS5nLiAiOnZlcnMiLCAiOmhpIikuICBBbHNvIHdoZW4gdGhlIGJvdHRvbSBwYXJ0IG9mIHRoZSB3aW5kb3cgd2FzCitvYnNjdXJlZCBieSBhbm90aGVyIHdpbmRvdy4KKworV2hlbiB1c2luZyBhIHdyb25nIG9wdGlvbiBvbmx5IGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCwgdG8gYXZvaWQgdGhhdCB0aGUKK3VzYWdlIGluZm9ybWF0aW9uIG1ha2VzIGl0IHNjcm9sbCBvZmYgdGhlIHNjcmVlbi4KKworV2hlbiBleGl0aW5nIGJlY2F1c2Ugb2Ygbm90IGJlaW5nIGFibGUgdG8gcmVhZCBmcm9tIHN0ZGluLCBkaWRuJ3QgcHJlc2VydmUgdGhlCitzd2FwIGZpbGVzIHByb3Blcmx5LgorCitWaXN1YWwgc2VsZWN0aW5nIGFsbCBjaGFycyBpbiBtb3JlIHRoYW4gb25lIGxpbmUsIHRoZW4gaGl0ICJ4IiBkaWRuJ3QgbGVhdmUgYW4KK2VtcHR5IGxpbmUuICBGb3Igb25lIGxpbmUgaXQgZGlkIGxlYXZlIGFuIGVtcHR5IGxpbmUuCisKK01lc3NhZ2UgZm9yIHdoaWNoIGF1dG9jb21tYW5kIGlzIGV4ZWN1dGluZyBtZXNzZWQgdXAgZmlsZSB3cml0ZSBtZXNzYWdlIChmb3IKK0ZpbGVXcml0ZVBvc3QgZXZlbnQpLgorCisidmltIC1oIiBpbmNsdWRlZCAiLVUiIGV2ZW4gd2hlbiBHVUkgaXMgbm90IGF2YWlsYWJsZSwgYW5kICItbCIgd2hlbiBsaXNwIGlzCitub3QgYXZhaWxhYmxlLgorCitDcmFzaCBmb3IgIjpoZSA8Qy1BPiIgKGNvbW1hbmQtbGluZSBsb25nZXIgdGhhbiBzY3JlZW4pLgorCisiOnMvdGhpcy90aGF0L2djIiwgdHlwZSAieSIgdHdvIHRpbWVzLCB0aGVuIHVuZG8sIGRpZCByZXNldCB0aGUgbW9kaWZpZWQKK29wdGlvbiwgZXZlbiB0aG91Z2ggdGhlIGZpbGUgaXMgc3RpbGwgbW9kaWZpZWQuCisKK0VtcHR5IGxpbmVzIGluIGEgdGFncyBmaWxlIGNhdXNlZCBhICI6dGFnIiB0byBiZSBhYm9ydGVkLgorCitXaGVuIGhpdHRpbmcgJ3EnIGF0IHRoZSBtb3JlIHByb21wdCBmb3IgIjptZW51Iiwgc3RpbGwgc2Nyb2xsZWQgYSBmZXcgbGluZXMuCisKK0luIGFuIHh0ZXJtIHRoYXQgdXNlcyB0aGUgYm9sZCB0cmljayBhIHNpbmdsZSByb3cgb2YgY2hhcmFjdGVycyBjb3VsZCByZW1haW4KK2FmdGVyIGFuIGVyYXNlZCBib2xkIGNoYXJhY3Rlci4gIE5vdyBlcmFzZSBvbmUgZXh0cmEgY2hhciBhZnRlciB0aGUgYm9sZCBjaGFyLAorbGlrZSBmb3IgdGhlIEdVSS4KKworIjpwb3AhIiBkaWRuJ3Qgd29yay4KKworV2hlbiB0aGUgcmVhZGluZyBhIGJ1ZmZlciB3YXMgaW50ZXJydXB0ZWQsICI6dyIgc2hvdWxkIG5vdCBiZSBhYmxlIHRvCitvdmVyd3JpdGUgdGhlIGZpbGUsICI6dyEiIGlzIHJlcXVpcmVkLgorCisiOmNmJSIgY2F1c2VkIGEgY3Jhc2guCisKKyI6Z3VpIGxvbmdmaWxlbmFtZSIsIHdoZW4gZm9ya2luZyBpcyBlbmFibGVkLCBjb3VsZCBsZWF2ZSBwYXJ0IG9mIHRoZQorbG9uZ2ZpbGVuYW1lIGF0IHRoZSBzaGVsbCBwcm9tcHQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVkVSU0lPTiA1LjEJCQkJCQkqdmVyc2lvbi01LjEqCisKK0ltcHJvdmVtZW50cyBtYWRlIGJldHdlZW4gdmVyc2lvbiA1LjAgYW5kIDUuMS4KKworVGhpcyB3YXMgbW9zdGx5IGEgYnVnLWZpeCByZWxlYXNlLCBub3QgbWFueSBuZXcgZmVhdHVyZXMuCisKKworQ2hhbmdlZAkJCQkJCQkqY2hhbmdlZC01LjEqCistLS0tLS0tCisKK1RoZSBleHBhbmQoKSBmdW5jdGlvbiBub3cgc2VwYXJhdGVzIGZpbGUgbmFtZXMgd2l0aCA8Tkw+IGluc3RlYWQgb2YgYSBzcGFjZS4KK1RoaXMgYXZvaWRzIHByb2JsZW1zIGZvciBmaWxlIG5hbWVzIHdpdGggZW1iZWRkZWQgc3BhY2VzLiAgVG8gZ2V0IHRoZSBvbGQKK3Jlc3VsdCwgdXNlIHN1YnN0aXR1dGUoZXhwYW5kKGZvbyksICJcbiIsICIgIiwgImciKS4KKworRm9yIEluc2VydC1leHBhbmRpbmcgZGljdGlvbmFyaWVzIGFsbG93IGEgYmFja3NsYXNoIHRvIGJlIHVzZWQgZm9yCit3aWxkY2hhcnMuICBBbGxvd3MgZXhwYW5kaW5nICJ6ZVxrcmEiLCB3aGVuICdpc2snIGluY2x1ZGVzIGEgYmFja3NsYXNoLgorCitOZXcgaWNvbiBmb3IgdGhlIFdpbjMyIEdVSS4KKworIjp0YWciLCAiOnRzZWxlY3QiIGV0Yy4gb25seSB1c2UgdGhlIGFyZ3VtZW50IGFzIGEgcmVnZXhwIHdoZW4gaXQgc3RhcnRzCit3aXRoICcvJy4gIEF2b2lkcyB0aGF0ICI6dGFnIHh4fiIgZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZTogIk5vIHByZXZpb3VzIHN1Yi4KK3JlZ2V4cCIuICBBbHNvLCB3aGVuIHRoZSA6dGFnIGFyZ3VtZW50IGNvbnRhaW5lZCB3aWxkY2FyZCBjaGFyYWN0ZXJzLCBpdCB3YXMKK25vdCBWaSBjb21wYXRpYmxlLgorV2hlbiB1c2luZyAnLycsIHRoZSBhcmd1bWVudCBpcyB0YWtlbiBsaXRlcmFsbHkgdG9vLCB3aXRoIGEgaGlnaGVyIHByaW9yaXR5LAorc28gaXQncyBmb3VuZCBiZWZvcmUgd2lsZGNhcmQgbWF0Y2hlcy4KK09ubHkgd2hlbiB0aGUgJy8nIGlzIHVzZWQgYXJlIG1hdGNoZXMgd2l0aCBkaWZmZXJlbnQgY2FzZSBmb3VuZCwgZXZlbiB0aG91Z2gKKydpZ25vcmVjYXNlJyBpc24ndCBzZXQuCitDaGFuZ2VkICJnXl0iIHRvIG9ubHkgZG8gIjp0c2VsZWN0IiB3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbiBtYXRjaGluZyB0YWcuCisKK0NoYW5nZWQgc29tZSBvZiB0aGUgZGVmYXVsdCBjb2xvcnMsIGJlY2F1c2UgdGhleSB3ZXJlIG5vdCB2ZXJ5IHJlYWRhYmxlIG9uIGEKK2RhcmsgYmFja2dyb3VuZC4KKworQSBjaGFyYWN0ZXIgb2Zmc2V0IHRvIGEgc2VhcmNoIHBhdHRlcm4gY2FuIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBvcgorcHJldmlvdXMgbGluZS4gIEFsc28gZml4ZXMgdGhhdCAiL3BhdHRlcm4vZSsyIiBnb3Qgc3R1Y2sgb24gInBhdHRlcm4iIGF0IHRoZQorZW5kIG9mIGEgbGluZS4KKworRG91YmxlLWNsaWNrcyBpbiB0aGUgc3RhdHVzIGxpbmUgZG8gbm8gbG9uZ2VyIHN0YXJ0IFZpc3VhbCBtb2RlLiAgRHJhZ2dpbmcgYQorc3RhdHVzIGxpbmUgbm8gbG9uZ2VyIHN0b3BzIFZpc3VhbCBtb2RlLgorCitQZXJsIGludGVyZmFjZTogQnVmZmVycygpIGFuZCBXaW5kb3dzKCkgbm93IHVzZSBtb3JlIGxvZ2ljYWwgYXJndW1lbnRzLCBsaWtlCit0aGV5IGFyZSB1c2VkIGluIHRoZSByZXN0IG9mIFZpbSAoTW9vcmUpLgorCitJbml0ICciIG1hcmsgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZmlyc3QgbGluZS4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvCit1c2UgJyIgaW4gYW4gYXV0b2NvbW1hbmQgd2l0aG91dCBnZXR0aW5nIGFuIGVycm9yIG1lc3NhZ2UuCisKKworQWRkZWQJCQkJCQkJKmFkZGVkLTUuMSoKKy0tLS0tCisKKyJzaGVsbF9lcnJvciIgaW50ZXJuYWwgdmFyaWFibGU6IHJlc3VsdCBvZiBsYXN0IHNoZWxsIGNvbW1hbmQuCisKKyI6ZWNob2hsIiBjb21tYW5kOiBTZXQgaGlnaGxpZ2h0aW5nIGZvciAiOmVjaG8iLgorCisnUycgZmxhZyBpbiAnaGlnaGxpZ2h0JyBhbmQgU3RhdHVzTGluZU5DIGhpZ2hsaWdodCBncm91cDogaGlnaGxpZ2h0aW5nIGZvcgorc3RhdHVzIGxpbmUgb2Ygbm90LWN1cnJlbnQgd2luZG93LiAgRGVmYXVsdCBpcyB0byB1c2UgYm9sZCBmb3IgY3VycmVudAord2luZG93LgorCitBZGRlZCBidWZmZXJfbmFtZSgpIGFuZCBidWZmZXJfbnVtYmVyKCkgZnVuY3Rpb25zIChBYXJvbikuCitBZGRlZCBmbGFncyBhcmd1bWVudCAiZyIgdG8gc3Vic3RpdHV0ZSgpIGZ1bmN0aW9uIChBYXJvbikuCitBZGRlZCB3aW5oZWlnaHQoKSBmdW5jdGlvbi4KKworV2luMzI6IFdoZW4gYW4gZXh0ZXJuYWwgY29tbWFuZCBzdGFydHMgd2l0aCAic3RhcnQgIiwgbm8gY29uc29sZSBpcyBvcGVuZWQKK2ZvciBpdCAoQWFyb24pLgorCitXaW4zMiBjb25zb2xlOiBVc2UgdGVybWNhcCBjb2RlcyBmb3IgYm9sZC9yZXZlcnNlIGJhc2VkIG9uIHRoZSBjdXJyZW50Citjb25zb2xlIGF0dHJpYnV0ZXMuCisKK0NvbmZpZ3VyZSBjaGVjayBmb3IgInN0cmlwIi4gKE5hcGllcikKKworQ1RSTC1SIENUUkwtUiB4IGluIEluc2VydCBtb2RlOiBJbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgbGl0ZXJhbGx5LAoraW5zdGVhZCBvZiBhcyB0eXBlZC4KKworTWFkZSBhIGZldyAiTm8gbWF0Y2giIGVycm9yIG1lc3NhZ2VzIG1vcmUgaW5mb3JtYXRpdmUgYnkgYWRkaW5nIHRoZSBwYXR0ZXJuCit0aGF0IGRpZG4ndCBtYXRjaC4KKworIm1ha2UgaW5zdGFsbCIgbm93IGFsc28gY29waWVzIHRoZSBtYWNybyBmaWxlcy4KKwordG9vbHMvdGNsdGFncywgYSBzaGVsbCBzY3JpcHQgdG8gZ2VuZXJhdGUgYSB0YWdzIGZpbGUgZnJvbSBhIFRDTCBmaWxlLgorCisiLS13aXRoLXRsaWIiIHNldHRpbmcgZm9yIGNvbmZpZ3VyZS4gIEVhc3kgd2F5IHRvIHVzZSB0ZXJtbGliOiAiLi9jb25maWd1cmUKKy0td2l0aC10bGliPXRlcm1saWIiLgorCisndScgZmxhZyBpbiAnY2lubycgZm9yIHNldHRpbmcgdGhlIGluZGVudCBmb3IgY29udGFpbmVkICgpIHBhcnRzLgorCitXaGVuIFdpbjMyIE9MRSB2ZXJzaW9uIGNhbid0IGxvYWQgdGhlIHJlZ2lzdGVyZWQgdHlwZSBsaWJyYXJ5LCBhc2sgdGhlIHVzZXIKK2lmIGhlIHdhbnRzIHRvIHJlZ2lzdGVyIFZpbSBub3cuIChFcmhhcmR0KQorV2luMzIgd2l0aCBPTEU6IFdoZW4gcmVnaXN0ZXJlZCBhdXRvbWF0aWNhbGx5LCBleGl0IFZpbS4KK0luY2x1ZGVkIFZpc1ZpbSAxLjFiLCB3aXRoIGEgZmV3IGVuaGFuY2VtZW50cyBhbmQgdGhlIG5ldyBpY29uIChIZWlrbworRXJoYXJkdCkuCisKK0FkZGVkIHBhdGNoIGZyb20gVmluY2UgTmVncmkgZm9yIFdpbjMycyBzdXBwb3J0LiAgTmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aAorVkMgNC4xIQorCitQZXJsIGludGVyZmFjZTogQWRkZWQgJGN1cmJ1Zi4gIFJhdGlvbmFsaXplZCBCdWZmZXJzKCkgYW5kIFdpbmRvd3MoKS4KKyhNb29yZSkgQWRkZWQgImdyb3VwIiBhcmd1bWVudCB0byBNc2coKS4KKworSW5jbHVkZWQgUGVybCBmaWxlcyBpbiBET1Mgc291cmNlIGFyY2hpdmUuICBDaGFuZ2VkIE1ha2VmaWxlLmJvciBhbmQKK01ha2VmaWxlLnczMiB0byBzdXBwb3J0IGJ1aWxkaW5nIGEgV2luMzIgdmVyc2lvbiB3aXRoIFBlcmwgaW5jbHVkZWQuCisKK0luY2x1ZGVkIG5ldyBNYWtlZmlsZS53MzIgZnJvbSBLZW4gU2NvdHQuICBOb3cgaXQncyBhYmxlIHRvIG1ha2UgYWxsIFdpbjMyCit2ZXJzaW9ucywgaW5jbHVkaW5nIE9MRSwgUGVybCBhbmQgUHl0aG9uLgorCitBZGRlZCBDVFJMLVcgZyBdIGFuZCBDVFJMLVcgZyBeXTogc3BsaXQgd2luZG93IGFuZCBkbyBnXSBvciBnXl0uCisKK0FkZGVkICJnXSIgdG8gYWx3YXlzIGRvICI6dHNlbGVjdCIgZm9yIHRoZSBpZGVudCB1bmRlciB0aGUgY3Vyc29yLgorQWRkZWQgIjp0anVtcCIgYW5kICI6c3RqdW1wIiBjb21tYW5kcy4KK0ltcHJvdmVkIGxpc3Rpbmcgb2YgIjp0c2VsZWN0IiB3aGVuIHRhZyBuYW1lcyBhcmUgYSBiaXQgbG9uZy4KKworSW5jbHVkZWQgcGF0Y2hlcyBmb3IgdGhlIE1hY2ludG9zaCB2ZXJzaW9uLiBBbHNvIGZvciBQeXRob24gaW50ZXJmYWNlLgorKFN0LUFtYW50KQorCisiOmJ1ZiBmb28iIG5vdyBhbHNvIHJlc3RvcmVzIGN1cnNvciBjb2x1bW4sIHdoZW4gdGhlIGJ1ZmZlciB3YXMgdXNlZCBiZWZvcmUuCisKK0FkanVzdGVkIHRoZSBNYWtlZmlsZSBmb3IgZGlmZmVyZW50IGZpbmFsIGRlc3RpbmF0aW9ucyBmb3IgdGhlIHN5bnRheCBmaWxlcworYW5kIHNjcmlwdHMgKGZvciBEZWJpYW4gTGludXgpLgorCitBbWlnYTogJFZJTSBjYW4gYmUgdXNlZCBldmVyeXdoZXJlLiAgV2hlbiAkVklNIGlzIG5vdCBkZWZpbmVkLCAiVklNOiIgaXMKK3VzZWQuICBUaGlzIGZpeGVzIHRoYXQgIlZJTToiIGhhZCB0byBiZSBhc3NpZ25lZCBmb3IgdGhlIGhlbHAgZmlsZXMsIGFuZAorJFZJTSBzZXQgZm9yIHRoZSBzeW50YXggZmlsZXMuICBOb3cgZWl0aGVyIG9mIHRoZXNlIHdvcmsuCisKK1NvbWUgeHRlcm1zIHNlbmQgdnQxMDAgY29tcGF0aWJsZSBmdW5jdGlvbiBrZXlzIEYxLUY0LiAgU2luY2UgaXQncyBub3QKK3Bvc3NpYmxlIHRvIGRldGVjdCB0aGlzLCByZWNvZ25pemUgYm90aCB0eXBlIG9mIGtleXMgYW5kIHRyYW5zbGF0ZSB0aGVtIHRvCis8RjE+IC0gPEY0Pi4KKworQWRkZWQgIlZpbUVudGVyIiBhdXRvY29tbWFuZC4gIEV4ZWN1dGVkIGFmdGVyIGxvYWRpbmcgYWxsIHRoZSBzdGFydHVwIHN0dWZmLgorCitCZU9TIHZlcnNpb24gbm93IGFsc28gcnVucyBvbiBJbnRlbCBDUFVzIChTZWliZXJ0KS4KKworCitGaXhlZAkJCQkJCQkqZml4ZWQtNS4xKgorLS0tLS0KKworIjp0cyIgY2hhbmdlZCBwb3NpdGlvbiBpbiB0aGUgdGFnIHN0YWNrIHdoZW4gY2FuY2VsbGVkIHdpdGggPENSPi4KKyI6dHMiIGNoYW5nZWQgdGhlIGN1cnNvciBwb3NpdGlvbiBmb3IgQ1RSTC1UIHdoZW4gY2FuY2VsbGVkIHdpdGggPENSPi4KKyI6dG4iIHdvdWxkIGFsd2F5cyBqdW1wIHRvIHRoZSBzZWNvbmQgbWF0Y2guCVdhcyB1c2luZyB0aGUgd3JvbmcgZW50cnkgaW4KK3RoZSB0YWcgc3RhY2suCitEb2luZyAidGFnIGZvbyIsIHRoZW4gIjp0c2VsZWN0Iiwgb3Zlcndyb3RlIHRoZSBvcmlnaW5hbCBjdXJzb3IgcG9zaXRpb24gaW4KK3RoZSB0YWcgc3RhY2suCisKKyJtYWtlIGluc3RhbGwiIGNoYW5nZWQgdGhlIHZpbS4xIG1hbnBhZ2UgaW4gYSB3cm9uZyB3YXksIGNhdXNpbmcgImRvYy9kb2MiCit0byBhcHBlYXIgZm9yIHRoZSBkb2N1bWVudGF0aW9uIGZpbGVzLgorCitXaGVuIGNvbXBpbGVkIHdpdGggTUFYX0ZFQVQsIHh0ZXJtIG1vdXNlIGhhbmRsaW5nIGZhaWxlZC4gIFdhcyBjYXVzZWQgYnkgREVDCittb3VzZSBoYW5kbGluZyBpbnRlcmZlcmluZy4KKworV2FzIGxlYWtpbmcgbWVtb3J5IHdoZW4gdXNpbmcgc2VsZWN0aW9uIGluIFgxMS4KKworQ1RSTC1EIGhhbGZ3YXkgYSBjb21tYW5kLWxpbmUgbGVmdCBzb21lIGNoYXJhY3RlcnMgYmVoaW5kIHRoZSBmaXJzdCBsaW5lKHMpCitvZiB0aGUgbGlzdGluZy4KKworV2hlbiBleHBhbmRpbmcgZGlyZWN0b3JpZXMgZm9yICI6c2V0IHBhdGg9IiwgcHV0IHR3byBleHRyYSBiYWNrc2xhc2hlcworYmVmb3JlIGEgc3BhY2UgaW4gYSBkaXJlY3RvcnkgbmFtZS4KKworV2hlbiAnbGlzcCcgc2V0LCBmaXJzdCBsaW5lIG9mIGEgZnVuY3Rpb24gd291bGQgYmUgaW5kZW50ZWQuICBOb3cgaXRzIGluZGVudAoraXMgc2V0IHRvIHplcm8uICBBbmQgdXNlIHRoZSBpbmRlbnQgb2YgdGhlIGZpcnN0IHByZXZpb3VzIGxpbmUgdGhhdCBpcyBhdAordGhlIHNhbWUgKCkgbGV2ZWwuICBBZGRlZCB0ZXN0MzMuCisKKyJzbzxFc2M+dSIgaW4gYW4gZW1wdHkgZmlsZSBkaWRuJ3Qgd29yay4KKworRE9TOiAic2VlayBlcnJvciBpbiBzd2FwIGZpbGUgd3JpdGUiIGVycm9ycywgd2hlbiB1c2luZyBET1MgNi4yIHNoYXJlLmV4ZSwKK2JlY2F1c2UgdGhlIHN3YXAgZmlsZSB3YXMgbWFkZSBoaWRkZW4uICBJdCdzIG5vIGxvbmdlciBoaWRkZW4uCisKKyI6Z2xvYmFsIiBjb21tYW5kIHdvdWxkIHNvbWV0aW1lcyBub3QgZXhlY3V0ZSBvbiBhIG1hdGNoaW5nIGxpbmUuICBIYXBwZW5lZAord2hlbiBhIGRhdGEgYmxvY2sgaXMgZnVsbCBpbiBtbF9yZXBsYWNlKCkuCisKK0ZvciBBSVggdXNlIGEgdGdldGVudCBidWZmZXIgb2YgMjA0OCBieXRlcywgaW5zdGVhZCBvZiAxMDI0LgorCitXaW4zMiBndmltIG5vdyBvbmx5IHNldHMgdGhlIGNvbnNvbGUgc2l6ZSBmb3IgZXh0ZXJuYWwgY29tbWFuZHMgdG8gMjV4ODAKK29uIFdpbmRvd3MgOTUsIG5vdCBvbiBOVC4KKworV2luMzIgY29uc29sZTogRGVhZCBrZXkgY291bGQgY2F1c2UgYSBjcmFzaCwgYmVjYXVzZSBvZiBhIG1pc3NpbmcgIldJTkFQSSIKKyhEZXNocGFuZGUpLgorCitUaGUgcmlnaHQgbW91c2UgYnV0dG9uIHN0YXJ0ZWQgVmlzdWFsIG1vZGUsIGV2ZW4gd2hlbiAnbW91c2UnIGlzIGVtcHR5LCBhbmQKK2luIHRoZSBjb21tYW5kLWxpbmUsIGEgbGVmdCBjbGljayBtb3ZlZCB0aGUgY3Vyc29yIHdoZW4gJ21vdXNlJyBpcyBlbXB0eS4KK0luIFZpc3VhbCBtb2RlLCAnbicgaW4gJ21vdXNlJyB3b3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgJ3YnLgorCitBIGJsaW5raW5nIGN1cnNvciBvciBmb2N1cyBjaGFuZ2UgY2xlYXJlZCBhIG5vbi1WaXN1YWwgc2VsZWN0aW9uLgorCitDVFJMLUhvbWUgYW5kIENUUkwtRW5kIGRpZG4ndCB3b3JrIGZvciBNUy1ET1MgdmVyc2lvbnMuCisKK0NvdWxkIGluY2x1ZGUgTlVMIGluICdpc2tleXdvcmQnLCBjYXVzaW5nIGEgY3Jhc2ggd2hlbiBkb2luZyBpbnNlcnQgbW9kZQorY29tcGxldGlvbi4KKworVXNlIF9kb3NfY29tbWl0KCkgdG8gZmx1c2ggdGhlIHN3YXAgZmlsZSB0byBkaXNrIGZvciBNU0RPUyAxNiBiaXQgdmVyc2lvbi4KKworSW4gbWFwcGluZ3MsIENUUkwtSCB3YXMgcmVwbGFjZWQgYnkgdGhlIGJhY2tzcGFjZSBrZXkgY29kZS4gIFRoaXMgY2F1c2VkCitwcm9ibGVtcyB3aGVuIGl0IHdhcyB1c2VkIGFzIHRleHQsIGUuZy4gIjptYXAgX1UgOiVzLy5eSC8vZzxDUj4iLgorCisiOnNldCB0X0NvPTAiIHdhcyBub3QgaGFuZGxlZCBsaWtlIGEgbm9ybWFsIHRlcm0uICBOb3cgaXQncyB0cmFuc2xhdGVkIGludG8KKyI6c2V0IHRfQ289Iiwgd2hpY2ggd29ya3MuCisKK0ZvciAiOnN5bnRheCBrZXl3b3JkIiB0aGUgInRyYW5zcGFyZW50IiBvcHRpb24gZGlkIHdvcmssIGFsdGhvdWdoIG5vdAorbWVudGlvbmVkIGluIHRoZSBoZWxwLiAgQnV0IHN5bklEKCkgcmV0dXJuZWQgd3JvbmcgbmFtZS4KKworImdxRyIgaW4gYSBmaWxlIHdpdGggb25lLXdvcmQtcGVyLWxpbmUgKGUuZy4gYSBkaWN0aW9uYXJ5KSB3YXMgdmVyeSBzbG93IGFuZAorbm90IGludGVycnVwdGFibGUuCisKKyJncSIgb3BlcmF0b3IgaW5zZXJ0ZWQgc2NyZWVuIGxpbmVzIGluIHRoZSB3cm9uZyBzaXR1YXRpb24uICBOb3cgc2NyZWVuCitsaW5lcyBhcmUgaW5zZXJ0ZWQgb3IgZGVsZXRlZCB3aGVuIHRoaXMgc3BlZWRzIHVwIGRpc3BsYXlpbmcuCisKK2NpbmRlbnQgd2FzIHdyb25nIHdoZW4gYW4gImlmIiBjb250YWluZWQgIigoIi4KKworJ3InIGZsYWcgaW4gJ3ZpbWluZm8nIHdhcyBub3QgdXNlZCBmb3IgJyUnLiAgQ291bGQgZ2V0IGZpbGVzIGluIHRoZSBidWZmZXIKK2xpc3QgZnJvbSByZW1vdmFibGUgbWVkaWEuCisKK1dpbjMyIEdVSSB3aXRoIE9MRTogaWZfb2xlX3ZjLm1hayBjb3VsZCBub3QgYmUgY29udmVydGVkIGludG8gYSBwcm9qZWN0LgorSGFuZC1lZGl0ZWQgdG8gZml4IHRoaXMuLi4KKworV2l0aCAnbm9zb2wnIHNldCwgZG9pbmcgIiRrZHciIGJlbG93IGFuIGVtcHR5IGxpbmUgcG9zaXRpb25lZCB0aGUgY3Vyc29yIGF0Cit0aGUgZW5kIG9mIHRoZSBsaW5lLgorCitEb3MzMiB2ZXJzaW9uIGNoYW5nZWQgIlxkaXJcZmlsZSIgaW50byAiL2Rpci9maWxlIiwgdG8gd29yayBhcm91bmQgYSBESkdQUAorYnVnLiAgVGhhdCBidWcgYXBwZWFycyB0byBoYXZlIGJlZW4gZml4ZWQsIHRoZXJlZm9yZSB0aGlzIHRyYW5zbGF0aW9uIGhhcworYmVlbiByZW1vdmVkLgorCisiL14qIiBkaWRuJ3Qgd29yayAoZmluZCAnKicgaW4gZmlyc3QgY29sdW1uKS4KKworIjxhZmlsZT4iIHdhcyBub3QgYWx3YXlzIHNldCBmb3IgYXV0b2NvbW1hbmRzLiAgRS5nLiwgZm9yICI6YXUgQnVmRW50ZXIgKgorbGV0ICZ0YWdzID0gZXhwYW5kKCI8YWZpbGU+OnA6aCIpIC4gIi90YWdzIi4KKworSW4gYW4geHRlcm0sIHRoZSB3aW5kb3cgbWF5IGJlIGEgY2hpbGQgb2YgdGhlIG91dGVyIHh0ZXJtIHdpbmRvdy4gIFVzZSB0aGUKK3BhcmVudCB3aW5kb3cgd2hlbiBnZXR0aW5nIHRoZSB0aXRsZSBhbmQgaWNvbiBuYW1lcy4gKFNtaXRoKQorCitXaGVuIHN0YXJ0aW5nIHdpdGggImd2aW0gLWJnIGJsYWNrIC1mZyB3aGl0ZSIsIHRoZSB2YWx1ZSBvZiAnYmFja2dyb3VuZCcgaXMKK29ubHkgc2V0IGFmdGVyIHJlYWRpbmcgdGhlIC5ndmltcmMgZmlsZS4gIFRoaXMgY2F1c2VzIGEgIjpzeW50YXggb24iIHRvIHVzZQordGhlIHdyb25nIGNvbG9ycy4gIE5vdyBhbGxvdyB1c2luZyAiOmd1aSIgdG8gb3BlbiB0aGUgR1VJIHdpbmRvdyBhbmQgc2V0IHRoZQorY29sb3JzLiAgUHJldmlvdXNseSAiOmd1aSIgaW4gYSBndmltcmMgY3Jhc2hlZCBWaW0uCisKK3RlbXBuYW1lKCkgcmV0dXJuZWQgdGhlIHNhbWUgbmFtZSBhbGwgdGhlIHRpbWUsIHVubGVzcyB0aGUgZmlsZSB3YXMgYWN0dWFsbHkKK2NyZWF0ZWQuICBOb3cgdGhlcmUgYXJlIGF0IGxlYXN0IDI2IGRpZmZlcmVudCBuYW1lcy4KKworRmlsZSBuYW1lIHVzZWQgZm9yIDxhZmlsZT4gd2FzIHNvbWV0aW1lcyBmdWxsIHBhdGgsIHNvbWV0aW1lcyBmaWxlIG5hbWUKK3JlbGF0aXZlIHRvIGN1cnJlbnQgZGlyZWN0b3J5LgorCitXaGVuICdiYWNrZ3JvdW5kJyB3YXMgc2V0IGFmdGVyIHRoZSBHVUkgd2luZG93IHdhcyBvcGVuZWQsIGl0IGNvdWxkIGNoYW5nZQorY29sb3JzIHRoYXQgd2VyZSBzZXQgYnkgdGhlIHVzZXIgaW4gdGhlIC5ndmltcmMgZmlsZS4gIE5vdyBpdCBvbmx5IGNoYW5nZXMKK2NvbG9ycyB0aGF0IGhhdmUgbm90IGJlZW4gc2V0IGJ5IHRoZSB1c2VyLgorCitJZ25vcmUgc3BlY2lhbCBjaGFyYWN0ZXJzIGFmdGVyIGEgQ1NJIGluIHRoZSBHVUkgdmVyc2lvbi4gIFRoZXNlIGNvdWxkIGJlCitpbnRlcnByZXRlZCBhcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSB3cm9uZyB3YXkuIChTdC1BbWFudCkKKworTWVtb3J5IGxlYWsgaW4gZmFyc2kgY29kZSwgd2hlbiB1c2luZyBzZWFyY2ggb3IgIjpzIiBjb21tYW5kLgorRmFyc2kgc3RyaW5nIHJldmVyc2luZyBmb3IgYSBtYXBwaW5nIHdhcyBvbmx5IGRvbmUgZm9yIG5ldyBtYXBwaW5ncy4gIE5vdyBpdAorYWxzbyB3b3JrcyBmb3IgcmVwbGFjaW5nIGEgbWFwcGluZy4KKworQ3Jhc2ggaW4gV2luMzIgd2hlbiB1c2luZyBhIGZpbGUgbmFtZSBsb25nZXIgdGhhbiBfTUFYX1BBVEguIChBYXJvbikKKworV2hlbiBCdWZEZWxldGUgYXV0b2NvbW1hbmRzIHdlcmUgZXhlY3V0ZWQsIHNvbWUgdGhpbmdzIGZvciB0aGUgYnVmZmVyIHdlcmUKK2FscmVhZHkgZGVsZXRlZCAoZXNwLiBQZXJsIHN0dWZmKS4KKworUGVybCBpbnRlcmZhY2U6IEJ1ZmZlciBzcGVjaWZpYyBpdGVtcyB3ZXJlIGRlbGV0ZWQgdG9vIHNvb247IGZpeGVzICJzY3JlZW4KK25vIGxvbmdlciBleGlzdHMiIG1lc3NhZ2VzLiAgKE1vb3JlKQorCitUaGUgUGVybCBmdW5jdGlvbnMgZGlkbid0IHNldCB0aGUgJ21vZGlmaWVkJyBmbGFnLgorCitsaW5rLnNoIGRpZCBub3QgcmV0dXJuIGFuIGVycm9yIG9uIGV4aXQsIHdoaWNoIG1heSBjYXVzZSBWaW0gdG8gc3RhcnQKK2luc3RhbGxpbmcsIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIG5vIGV4ZWN1dGFibGUgdG8gaW5zdGFsbC4gKFJpZWhtKQorCitWaSBpbmNvbXBhdGliaWxpdHk6IEluIFZpICIuIiByZWRvZXMgdGhlICJ5IiBjb21tYW5kLiAgQWRkZWQgdGhlICd5JyBmbGFnIHRvCisnY3BvcHRpb25zJy4gIE9ubHkgZm9yICdjb21wYXRpYmxlJyBtb2RlLgorCisiOmVjaG9obCIgZGVmaW5lZCBhIG5ldyBncm91cCwgd2hlbiB0aGUgYXJndW1lbnQgd2FzIG5vdCBhbiBleGlzdGluZyBncm91cC4KKworInN5biBvbiIgYW5kICI6c3luIG9mZiIgY291bGQgbW92ZSB0aGUgY3Vyc29yLCBpZiB0aGVyZSBpcyBhIGhpZGRlbiBidWZmZXIKK3RoYXQgaXMgc2hvcnRlciB0aGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KKworVGhlICIgbWFyayB3YXMgbm90IHNldCB3aGVuIGRvaW5nICI6YiBmaWxlIi4KKworV2hlbiBhICJuZXh0Z3JvdXAiIGlzIHVzZWQgd2l0aCAic2tpcHdoaXRlIiBpbiBzeW50YXggaGlnaGxpZ2h0aW5nLCBzcGFjZSBhdAordGhlIGVuZCBvZiB0aGUgbGluZSBtYWRlIHRoZSBuZXh0Z3JvdXAgYWxzbyBiZSBmb3VuZCBpbiB0aGUgbmV4dCBsaW5lLgorCisiOmhlIGc8Q1RSTC1EPiIsIHRoZW4gIjoiIGFuZCBiYWNrc3BhY2UgdG8gdGhlIHN0YXJ0IGRpZG4ndCByZWRyYXcuCisKK1gxMSBHVUk6ICJndmltIC1ydiIgcmV2ZXJzZWQgdGhlIGNvbG9ycyB0d2ljZSBvbiBTdW4uICBOb3cgVmltIGNoZWNrcyBpZiB0aGUKK3Jlc3VsdCBpcyByZWFsbHkgcmV2ZXJzZSB2aWRlbyAoYmFja2dyb3VuZCBkYXJrZXIgdGhhbiBmb3JlZ3JvdW5kKS4KKworImNhdCBsaW5rLnNoIHwgdmltIC0iIGRpZG4ndCBzZXQgc3ludGF4IGhpZ2hsaWdodGluZy4KKworV2luMzI6IEV4cGFuZGluZyAiZmlsZS5zdz8iIG1hdGNoZWQgIi5maWxlLnN3cCIuICBUaGlzIGlzIGFuIGVycm9yIG9mCitGaW5kbmV4dEZpbGUoKSB0aGF0IHdlIG5lZWQgdG8gd29yayBhcm91bmQuICAoS2lsZ29yZSkKKworImdxZ3EiIGdhdmUgYW4gIkludmFsaWQgbG51bSIgZXJyb3Igb24gdGhlIGxhc3QgbGluZS4KK0Zvcm1hdHRpbmcgd2l0aCAiZ3EiIGRpZG4ndCBmb3JtYXQgdGhlIGZpcnN0IGxpbmUgYWZ0ZXIgYSBjaGFuZ2Ugb2YgY29tbWVudAorbGVhZGVyLgorCitUaGVyZSB3YXMgbm8gY2hlY2sgZm9yIG91dC1vZi1tZW1vcnkgaW4gd2luX2FsbG9jKCkuCisKKyJ2aW0gLWgiIGRpZG4ndCBtZW50aW9uICItcmVnaXN0ZXIiIGFuZCAiLXVucmVnaXN0ZXIiIGZvciB0aGUgT0xFIHZlcnNpb24uCisKK0NvdWxkIG5vdCBpbmNyZWFzZSAnY21kaGVpZ2h0JyB3aGVuIHRoZSBsYXN0IHdpbmRvdyBpcyBvbmx5IG9uZSBsaW5lLiAgTm93CitvdGhlciB3aW5kb3dzIGFyZSBhbHNvIG1hZGUgc21hbGxlciwgd2hlbiBuZWNlc3NhcnkuCisKK0FkZGVkIGEgZmV3IHt9IHRvIGF2b2lkICJzdWdnZXN0IGJyYWNlcyBhcm91bmQiIHdhcm5pbmdzIGZyb20gZ2NjIDIuOC54LgorQ2hhbmdlZCByZXR1cm4gdHlwZSBvZiBtYWluKCkgZnJvbSB2b2lkIHRvIGludC4gKE5hbSkKKworVXNpbmcgJ34nIHR3aWNlIGluIGEgc3Vic3RpdHV0ZSBwYXR0ZXJuIGNhdXNlZCBhIGNyYXNoLgorCisic3luIG9uIiBhbmQgIjpzeW4gb2ZmIiBjb3VsZCBzY3JvbGwgdGhlIHdpbmRvdywgaWYgdGhlcmUgaXMgYSBoaWRkZW4gYnVmZmVyCit0aGF0IGlzIHNob3J0ZXIgdGhhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisKKyI6aWYgMCB8IGlmIDEgfCBlbmRpZiB8IGVuZGlmIiBkaWRuJ3Qgd29yay4gIFNhbWUgZm9yICI6d2hpbGUiIGFuZCAiZWxzZWlmIi4KKworV2l0aCB0d28gd2luZG93cyBvbiBtb2RpZmllZCBmaWxlcywgd2l0aCAnYXV0b3dyaXRlJyBzZXQsIGN1cnNvciBpbiBzZWNvbmQKK3dpbmRvdywgIjpxYSIgZ2F2ZSBhIHdhcm5pbmcgZm9yIHRoZSBmaWxlIGluIHRoZSBmaXJzdCB3aW5kb3csIGJ1dCB0aGVuCithdXRvLXdyb3RlIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgd2luZG93LiAoV2ViYikKKworV2luMzIgR1VJIHNjcm9sbGJhciBjb3VsZCBvbmx5IGhhbmRsZSAzMjc2NyBsaW5lcy4gIEFsc28gbWFrZXMgdGhlCitpbnRlbGxpbW91c2Ugd2hlZWwgdXNlIHRoZSBjb25maWd1cmFibGUgbnVtYmVyIG9mIHNjcm9sbHMuIChSb2JpbnNvbikKKworV2hlbiB1c2luZyAncGF0Y2htb2RlJywgYW5kIHRoZSBiYWNrdXAgZmlsZSBpcyBvbiBhbm90aGVyIHBhcnRpdGlvbiwgdGhlIGZpbGUKK2NvcHlpbmcgbWVzc2VkIHVwIHRoZSB3cml0ZS1maWxlIG1lc3NhZ2UuCisKK0dVSSBYMTE6IEFsdC1CYWNrc3BhY2UgYW5kIEFsdC1EZWxldGUgZGlkbid0IHdvcmsuCisKKyJgMCIgY291bGQgcHV0IHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBsaW5lLCBjYXVzaW5nCit0cm91YmxlIGZvciBvdGhlciBjb21tYW5kcywgbGlrZSAiaSIuCisKK1doZW4gY29tcGxldGluZyB0YWdzIGluIGluc2VydCBtb2RlIHdpdGggXlheXSwgc29tZSBtYXRjaGVzIHdlcmUgc2tpcHBlZCwKK2JlY2F1c2UgdGhlIGNvbXBhcmUgd2l0aCBvdGhlciB0YWdzIHdhcyB3cm9uZy4gIEUuZy4sIHdoZW4gIm1udUZpbGVTYXZlIiB3YXMKK2FscmVhZHkgdGhlcmUsICJtbnVGaWxlIiB3b3VsZCBiZSBza2lwcGVkLiAoTmVncmkpCisKK1doZW4gc2Nyb2xsaW5nIHVwL2Rvd24sIGEgc3ludGF4IGl0ZW0gd2l0aCAia2VlcGVuZCIgZGlkbid0IHdvcmsgcHJvcGVybHkuCitOb3cgdGhlIGZsYWdzIGFyZSBhbHNvIHN0b3JlZCBmb3IgdGhlIHN5bnRheCBzdGF0ZSBhIHRoZSBzdGFydCBvZiBlYWNoIGxpbmUuCisKK1doZW4gJ2ljJyB3YXMgY2hhbmdlZCB3aGlsZSAnaGxzZWFyY2gnIGlzIG9uLCB0aGVyZSB3YXMgbm8gcmVkcmF3IHRvIHNob3cgdGhlCitlZmZlY3QuCisKK1dpbjMyIEdVSTogRG9uJ3QgZGlzcGxheSAiTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuY2UiIGluIGEgbWVzc2FnZSBib3gsIGJ1dCBpbgordGhlIFZpbSB3aW5kb3cuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVkVSU0lPTiA1LjIJCQkJCQkqdmVyc2lvbi01LjIqCisKK0ltcHJvdmVtZW50cyBtYWRlIGJldHdlZW4gdmVyc2lvbiA1LjEgYW5kIDUuMi4KKworCitMb25nIGxpbmVzIGVkaXRhYmxlCQkJCQkqbG9uZy1saW5lcyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBzaW5nbGUgbG9uZyBsaW5lIHRoYXQgZG9lc24ndCBmaXQgaW4gdGhlIHdpbmRvdyBkb2Vzbid0IHNob3cgYSBsaW5lIG9mIEBAQAorYW55bW9yZS4gIFJlZHJhd2luZyBzdGFydHMgYXQgYSBjaGFyYWN0ZXIgZnVydGhlciBvbiBpbiB0aGUgbGluZSwgc3VjaCB0aGF0Cit0aGUgdGV4dCBhcm91bmQgdGhlIGN1cnNvciBjYW4gYmUgc2Vlbi4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZWRpdCB0aGVzZQorbG9uZyBsaW5lcyB3aGVuIHdyYXBwaW5nIGlzIG9uLgorCisKK0ZpbGUgYnJvd3NlciBhZGRlZAkJCQkJKmZpbGUtYnJvd3Nlci01LjIqCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIFdpbjMyLCBBdGhlbmEgYW5kIE1vdGlmIEdVSSBicmluZyB1cCBhIGZpbGUgcmVxdWVzdGVyIGlmIHRoZSB1c2VyIGFza3MgdG8KKyI6YnJvd3NlIiBmb3IgdGhlICI6ZSIsICI6dyIsICI6ciIsICI6c28iLCAiOnJlZGlyZWN0IiBhbmQKKyI6bWtleHJjL3ZpbXJjL3ZzZXNzIiBjb21tYW5kcy4gIDo6YnJvd3NlIGUgL2Zvby9iYXIiIG9wZW5zIHRoZSByZXF1ZXN0ZXIgaW4KK3RoZSAvZm9vL2JhciBkaXJlY3RvcnksIHNvIHlvdSBjYW4gaGF2ZSBuaWNlIG1hcHBpbmcgcmhzJ3MgbGlrZSAiOmJyb3dzZSBzbworJHZpbS9tYWNyb3MiLiAgSWYgbm8gaW5pdGlhbCBkaXIgc3BlY2lmaWVkIGZvciAiOmJyb3dzZSBlIiwgY2FuIGJlIGNvbXBpbGVkIHRvCitlaXRoZXIgYmVnaW4gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBvciB0aGF0IG9mIHRoZSBjdXJyZW50IGJ1ZmZlci4gKE5lZ3JpCithbmQgS2FobikKK0FkZGVkIHRoZSAnYnJvd3NlZGlyJyBvcHRpb24sIHdpdGggdmFsdWUgImN1cnJlbnQiLCAibGFzdCIgb3IgImJ1ZmZlciIuICBUZWxscword2V0aGVyIGEgYnJvd3NlIGRpYWxvZyBzdGFydHMgaW4gbGFzdCB1c2VkIGRpciwgZGlyIG9mIGN1cnJlbnQgYnVmZmVyLCBvcgorY3VycmVudCBkaXIuICAiOmJyb3dzZSB3IiBpcyB1bmFmZmVjdGVkLgorVGhlIGRlZmF1bHQgbWVudXMgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gdXNlIHRoZSAiOmJyb3dzZSIgY29tbWFuZC4KKworCitEaWFsb2dzIGFkZGVkCQkJCQkJKmRpYWxvZ3MtYWRkZWQqCistLS0tLS0tLS0tLS0tCisKK0FkZGVkIHRoZSAiOmNvbmZpcm0iIGNvbW1hbmQuICBXb3JrcyBvbiAiOmUiLCAiOnEiLCAiOnciLCAiOmNsIi4gIFdpbjMyLAorQXRoZW5hIGFuZCBNb3RpZiBHVUkgdXNlcyBhIHdpbmRvdy1kaWFsb2cuICBBbGwgb3RoZXIgcGxhdGZvcm1zIGNhbiB1c2UKK3Byb21wdCBpbiBjb21tYW5kLWxpbmUuICAiOmNvbmZpcm0gcWEiIG9mZmVycyBhIGNob2ljZSB0byBzYXZlIGFsbCBtb2RpZmllZAorZmlsZXMuCisKK2NvbmZpcm0oKSBmdW5jdGlvbjogYWxsb3dzIHVzZXIgYWNjZXNzIHRvIHRoZSBjb25maXJtIGVuZ2luZS4KKworQWRkZWQgJ3YnIGZsYWcgdG8gJ2d1aW9wdGlvbnMnLiAgV2hlbiBpbmNsdWRlZCwgYSB2ZXJ0aWNhbCBidXR0b24gbGF5b3V0IGlzCithbHdheXMgdXNlZCBmb3IgdGhlIFdpbjMyIEdVSSBkaWFsb2cuICBPdGhlcndpc2UsIGEgaG9yaXpvbnRhbCBsYXlvdXQgaXMKK3ByZWZlcnJlZC4KKworV2luMzIgR1VJOiAiOnByb21wdGZpbmQiIGFuZCAiOnByb21wdHJlcGwiIHBvcCB1cCBhIGRpYWxvZyB0byBmaW5kL3JlcGxhY2UuCitUbyBiZSB1c2VkIGZyb20gYSBtZW51IGVudHJ5LiAoTmVncmkpCisKKworUG9wdXAgbWVudSBhZGRlZAkJCQkJKnBvcHVwLW1lbnUtYWRkZWQqCistLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdGhlICdtb3VzZW1vZGVsJyBvcHRpb24gaXMgc2V0IHRvICJwb3B1cCIsIHRoZSByaWdodCBtb3VzZSBidXR0b24KK2Rpc3BsYXlzIHRoZSB0b3AgbGV2ZWwgbWVudSBoZWFkZWQgd2l0aCAiUG9wVXAiIGFzIHBvcC11cCBjb250ZXh0IG1lbnUuICBUaGUKKyJQb3BVcCIgbWVudSBpcyBub3QgZGlzcGxheWVkIGluIHRoZSBub3JtYWwgbWVudSBiYXIuICBUaGlzIGN1cnJlbnRseSBvbmx5Cit3b3JrcyBmb3IgV2luMzIgYW5kIEF0aGVuYSBHVUkuCisKKworU2VsZWN0IG1vZGUgYWRkZWQJCQkJCSpuZXctU2VsZWN0LW1vZGUqCistLS0tLS0tLS0tLS0tLS0tLQorCitBIG5ldyBtb2RlIGhhcyBiZWVuIGFkZGVkOiAiU2VsZWN0IG1vZGUiLiAgSXQgaXMgbGlrZSBWaXN1YWwgbW9kZSwgYnV0IHR5cGluZworYSBwcmludGFibGUgY2hhcmFjdGVyIHJlcGxhY2VzIHRoZSBzZWxlY3Rpb24uCistIENUUkwtRyBjYW4gYmUgdXNlZCB0byB0b2dnbGUgYmV0d2VlbiBWaXN1YWwgbW9kZSBhbmQgU2VsZWN0IG1vZGUuCistIENUUkwtTyBjYW4gYmUgdXNlZCB0byBzd2l0Y2ggZnJvbSBTZWxlY3QgbW9kZSB0byBWaXN1YWwgbW9kZSBmb3Igb25lIGNvbW1hbmQuCistIEFkZGVkICdzZWxlY3Rtb2RlJyBvcHRpb246IHRlbGxzIHdoZW4gdG8gc3RhcnQgU2VsZWN0IG1vZGUgaW5zdGVhZCBvZiBWaXN1YWwKKyAgbW9kZS4KKy0gQWRkZWQgJ21vdXNlbW9kZWwnIG9wdGlvbjogQ2hhbmdlIHVzZSBvZiBtb3VzZSBidXR0b25zLgorLSBBZGRlZCAna2V5bW9kZWwnIG9wdGlvbjogdGVsbHMgdG8gdXNlIHNoaWZ0ZWQgc3BlY2lhbCBrZXlzIHRvIHN0YXJ0IGEKKyAgVmlzdWFsIG9yIFNlbGVjdCBtb2RlIHNlbGVjdGlvbi4KKy0gQWRkZWQgIjpiZWhhdmUiLiBDYW4gYmUgdXNlZCB0byBxdWlja2x5IHNldCAnc2VsZWN0bW9kZScsICdtb3VzZW1vZGVsJworICBhbmQgJ2tleW1vZGVsJyBmb3IgTVMtV2luZG93cyBhbmQgeHRlcm0gYmVoYXZpb3IuCistIFRoZSB4dGVybS1saWtlIHNlbGVjdGlvbiBpcyBub3cgY2FsbGVkIG1vZGVsZXNzIHNlbGVjdGlvbi4KKy0gVmlzdWFsIG1vZGUgbWFwcGluZ3MgYW5kIG1lbnVzIGFyZSB1c2VkIGluIFNlbGVjdCBtb2RlLiAgVGhleSBhdXRvbWF0aWNhbGx5CisgIHN3aXRjaCB0byBWaXN1YWwgbW9kZSBmaXJzdC4gIEFmdGVyd2FyZHMsIHJlc2VsZWN0IHRoZSBhcmVhLCB1bmxlc3MgaXQgd2FzCisgIGRlbGV0ZWQuICBUaGUgImdWIiBjb21tYW5kIGNhbiBiZSB1c2VkIGluIGEgbWFwcGluZyB0byBza2lwIHRoZSByZXNlbGVjdGlvbi4KKy0gQWRkZWQgdGhlICJnaCIsICJnSCIgYW5kICJnXkgiIGNvbW1hbmRzOiBzdGFydCBTZWxlY3QgKGhpZ2hsaWdodCkgbW9kZS4KKy0gQmFja3NwYWNlIGluIFNlbGVjdCBtb2RlIGRlbGV0ZXMgdGhlIHNlbGVjdGVkIGFyZWEuCisKKyJtc3dpbi52aW0iIHNjcmlwdC4gIFNldHMgYmVoYXZpb3IgbW9zdGx5IGxpa2UgTVMtV2luZG93cy4KKworCitTZXNzaW9uIGZpbGVzIGFkZGVkCQkJCQkqbmV3LXNlc3Npb24tZmlsZXMqCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyI6bWtzW2Vzc2lvbl0iIGFjdHMgbGlrZSAibWt2aW1yYyIsIGJ1dCBhbHNvIHdyaXRlcyB0aGUgZnVsbCBmaWxlbmFtZXMgb2YgdGhlCitjdXJyZW50bHkgbG9hZGVkIGJ1ZmZlcnMgYW5kIGN1cnJlbnQgZGlyZWN0b3J5LCBzbyB0aGF0IDpzbydpbmcgdGhlIGZpbGUKK3JlLWxvYWRzIHRob3NlIGZpbGVzIGFuZCBjZCdzIHRvIHRoYXQgZGlyZWN0b3J5LiAgQWxzbyBzdG9yZXMgYW5kIHJlc3RvcmVzCit3aW5kb3dzLiAgRmlsZSBuYW1lcyBhcmUgbWFkZSByZWxhdGl2ZSB0byBzZXNzaW9uIGZpbGUuCitUaGUgJ3Nlc3Npb25vcHRpb25zJyBvcHRpb24gc2V0cyBiZWhhdmlvciBvZiAiOm1rc2Vzc2lvbiIuIChOZWdyaSkKKworCitVc2VyIGRlZmluZWQgZnVuY3Rpb25zIGFuZCBjb21tYW5kcwkJCSpuZXctdXNlci1kZWZpbmVkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkZWQgdXNlciBkZWZpbmVkIGZ1bmN0aW9ucy4gIERlZmluZWQgd2l0aCAiOmZ1bmN0aW9uIiB1bnRpbCAiOmVuZGZ1bmN0aW9uIi4KK0NhbGxlZCB3aXRoICJGdW5jKCkiLiAgQWxsb3dzIHRoZSB1c2Ugb2YgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgorSW5jbHVkZWQgc3VwcG9ydCBmb3IgbG9jYWwgdmFyaWFibGVzICJsOm5hbWUiLiAgUmV0dXJuIGEgdmFsdWUgd2l0aCAiOnJldHVybiIuCitTZWUgfDpmdW5jdGlvbnwuCitDYWxsIGEgZnVuY3Rpb24gd2l0aCAiOmNhbGwiLiAgV2hlbiB1c2luZyBhIHJhbmdlLCB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZvcgorZWFjaCBsaW5lIGluIHRoZSByYW5nZS4gfDpjYWxsfAorIm1hY3Jvcy9qdXN0aWZ5LnZpbSIgaXMgYW4gZXhhbXBsZSBvZiB1c2luZyB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLgorVXNlciBmdW5jdGlvbnMgZG8gbm90IGNoYW5nZSB0aGUgbGFzdCB1c2VkIHNlYXJjaCBwYXR0ZXJuIG9yIHRoZSBjb21tYW5kIHRvIGJlCityZWRvbmUgd2l0aCAiLiIuCisnbWF4ZnVuY2RlcHRoJyBvcHRpb24uICBSZXN0cmljdHMgdGhlIGRlcHRoIG9mIGZ1bmN0aW9uIGNhbGxzLiAgQXZvaWRzIHRyb3VibGUKKyhjcmFzaCBiZWNhdXNlIG9mIG91dC1vZi1tZW1vcnkpIHdoZW4gYSBmdW5jdGlvbiB1c2VzIGVuZGxlc3MgcmVjdXJzaW9uLgorCitVc2VyIGRlZmluYWJsZSBFeCBjb21tYW5kczogIjpjb21tYW5kIiwgIjpkZWxjb21tYW5kIiBhbmQgIjpjb21jbGVhciIuCisoTW9vcmUpICBTZWUgfHVzZXItY29tbWFuZHN8LgorCisKK05ldyBpbnRlcmZhY2VzCQkJCQkJKmludGVyZmFjZXMtNS4yKgorLS0tLS0tLS0tLS0tLS0KKworVGNsIGludGVyZmFjZS4gKFdpbGtlbikgIFNlZSB8dGNsfC4KK1VzZXMgdGhlICI6dGNsIiwgIjp0Y2xkbyIgYW5kICJ0Y2xmaWxlIiBjb21tYW5kcy4KKworQ3Njb3BlIHN1cHBvcnQuIChLYWhuKSAoU2VrZXJhKSAgU2VlIHxjc2NvcGV8LgorVXNlcyB0aGUgIjpjc2NvcGUiIGFuZCAiOmNzdGFnIiBjb21tYW5kcy4gIFVzZXMgdGhlIG9wdGlvbnMgJ2NzY29wZXByZycsCisnY3Njb3BldGFnJywgJ2NzY29wZXRhZ29yZGVyJyBhbmQgJ2NzY29wZXZlcmJvc2UnLgorCisKK05ldyBwb3J0cwkJCQkJCSpwb3J0cy01LjIqCistLS0tLS0tLS0KKworQW1pZ2EgR1VJIHBvcnQuIChOaWVsc2VuKSAgTm90IHRlc3RlZCBtdWNoIHlldCEKKworUklTQyBPUyB2ZXJzaW9uLiAoVGhvbWFzIExlb25hcmQpICBTZWUgfHJpc2Nvc3wuCitUaGlzIHZlcnNpb24gY2FuIHJ1biBlaXRoZXIgd2l0aCBhIEdVSSBvciBpbiB0ZXh0IG1vZGUsIGRlcGVuZGluZyB1cG9uIHdoZXJlCitpdCBpcyBpbnZva2VkLgorRGVsZXRlZCB0aGUgIm9zX2FyY2hpZSIgZmlsZXMsIHRoZXkgd2VyZSBub3Qgd29ya2luZyBhbnl3YXkuCisKKworTXVsdGktYnl0ZSBzdXBwb3J0CQkJCQkqbmV3LW11bHRpLWJ5dGUqCistLS0tLS0tLS0tLS0tLS0tLS0KKworTXVsdGlCeXRlIHN1cHBvcnQgZm9yIFdpbjMyIEdVSS4gKEJhZWspCitUaGUgJ2ZpbGVlbmNvZGluZycgb3B0aW9uIGRlY2lkZXMgaG93IHRoZSB0ZXh0IGluIHRoZSBmaWxlIGlzIGVuY29kZWQuCisiOmFzY2lpIiB3b3JrcyBmb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAgTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHdvcmsgb24KK1dpbmRvd3MgOTUsIGV2ZW4gd2hlbiB1c2luZyB0aGUgVVMgdmVyc2lvbi4gKEFhcm9uKQorTmVlZHMgdG8gYmUgZW5hYmxlZCBpbiBmZWF0dXJlLmguCitUaGlzIGhhcyBub3QgYmVlbiB0ZXN0ZWQgbXVjaCB5ZXQhCisKKworTmV3IGZ1bmN0aW9ucwkJCQkJCSpuZXctZnVuY3Rpb25zLTUuMioKKy0tLS0tLS0tLS0tLS0KKworfGJyb3dzZSgpfAlwdXRzIHVwIGEgZmlsZSByZXF1ZXN0ZXIgd2hlbiBhdmFpbGFibGUuIChOZWdyaSkKK3xlc2NhcGUoKXwJZXNjYXBlcyBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIHdpdGggYSBiYWNrc2xhc2guCit8Zm5hbWVtb2RpZnkoKXwJbW9kaWZpZXMgYSBmaWxlIG5hbWUuCit8aW5wdXQoKXwJYXNrcyB0aGUgdXNlciB0byBlbnRlciBhIGxpbmUuIChBYXJvbikgVGhlcmUgaXMgYSBzZXBhcmF0ZQorCQloaXN0b3J5IGZvciBsaW5lcyB0eXBlZCBmb3IgdGhlIGlucHV0KCkgZnVuY3Rpb24uCit8YXJnYygpfAorfGFyZ3YoKXwJY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBhcmd1bWVudCBsaXN0LgorfHdpbmJ1Zm5yKCl8CWJ1ZmZlciBudW1iZXIgb2YgYSB3aW5kb3cuIChBYXJvbikKK3x3aW5ucigpfAl3aW5kb3cgbnVtYmVyLiAoQWFyb24pCit8bWF0Y2hzdHIoKXwJUmV0dXJuIG1hdGNoZWQgc3RyaW5nLgorfHNldGxpbmUoKXwJU2V0IGEgbGluZSB0byBhIHN0cmluZyB2YWx1ZS4KKworCitOZXcgb3B0aW9ucwkJCQkJCSpuZXctb3B0aW9ucy01LjIqCistLS0tLS0tLS0tLQorCisnYWxsb3dyZXZpbnMnCUVuYWJsZSB0aGUgQ1RSTC1fIGNvbW1hbmQgaW4gSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUgbW9kZS4KKydicm93c2VkaXInCVRlbGxzIGluIHdoaWNoIGRpcmVjdG9yeSBhIGJyb3dzZSBkaWFsb2cgc3RhcnRzLgorJ2NvbmZpcm0nCXdoZW4gc2V0LCA6cSA6dyBhbmQgOmUgY29tbWFuZHMgYWx3YXlzIGFjdCBhcyBpZiAiOmNvbmZpcm0iCisJCWlzIHVzZWQuICAoTmVncmkpCisnY3Njb3BlcHJnJworJ2NzY29wZXRhZycKKydjc2NvcGV0YWdvcmRlcicKKydjc2NvcGV2ZXJib3NlJwlTZXQgdGhlIHxjc2NvcGV8IGJlaGF2aW9yLgorJ2ZpbGV0eXBlJwlSSVNDLU9TIHNwZWNpZmljIHR5cGUgb2YgZmlsZS4KKydncmVwZm9ybWF0JworJ2dyZXBwcmcnCUZvciB0aGUgfDpncmVwfCBjb21tYW5kLgorJ2tleW1vZGVsJwlUZWxscyB0byB1c2Ugc2hpZnRlZCBzcGVjaWFsIGtleXMgdG8gc3RhcnQgYSBWaXN1YWwgb3IgU2VsZWN0CisJCW1vZGUgc2VsZWN0aW9uLgorJ2xpc3RjaGFycycJU2V0IGNoYXJhY3RlciB0byBzaG93IGluICdsaXN0JyBtb2RlIGZvciBlbmQtb2YtbGluZSwgdGFicyBhbmQKKwkJdHJhaWxpbmcgc3BhY2VzLiAocGFydGx5IGJ5IFNtaXRoKSBBbHNvIHNldHMgY2hhcmFjdGVyIHRvCisJCWRpc3BsYXkgaWYgYSBsaW5lIGRvZXNuJ3QgZml0IHdoZW4gJ25vd3JhcCcgaXMgc2V0LgorJ21hdGNocGFpcnMnCUFsbG93cyBtYXRjaGluZyAnPCcgd2l0aCAnPicsIGFuZCBvdGhlciBzaW5nbGUgY2hhcmFjdGVyCisJCXBhaXJzLgorJ21vdXNlZm9jdXMnCVdpbmRvdyBmb2N1cyBmb2xsb3dzIG1vdXNlIChwYXJ0bHkgYnkgVGVyaGFhcikuICBDaGFuZ2luZyB0aGUKKwkJZm9jdXMgd2l0aCBhIGtleWJvYXJkIGNvbW1hbmQgbW92ZXMgdGhlIHBvaW50ZXIgdG8gdGhhdAorCQl3aW5kb3cuICBBbHNvIG1vdmUgdGhlIHBvaW50ZXIgd2hlbiBjaGFuZ2luZyB0aGUgd2luZG93IGxheW91dAorCQkoc3BsaXQgd2luZG93LCBjaGFuZ2Ugd2luZG93IGhlaWdodCwgZXRjLikuCisnbW91c2Vtb2RlbCcJQ2hhbmdlIHVzZSBvZiBtb3VzZSBidXR0b25zLgorJ3NlbGVjdGlvbicJV2hlbiBzZXQgdG8gImluY2x1c2l2ZSIgb3IgImV4Y2x1c2l2ZSIsIHRoZSBjdXJzb3IgY2FuIGdvIG9uZQorCQljaGFyYWN0ZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBsaW5lIGluIFZpc3VhbCBvciBTZWxlY3QgbW9kZS4KKwkJV2hlbiBzZXQgdG8gIm9sZCIgdGhlIG9sZCBiZWhhdmlvciBpcyB1c2VkLiAgV2hlbgorCQkiaW5jbHVzaXZlIiwgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIGlzIGluY2x1ZGVkIGluIHRoZQorCQlvcGVyYXRpb24uICBXaGVuIHVzaW5nICJleGNsdXNpdmUiLCB0aGUgbmV3ICJ2ZSIgZW50cnkgb2YKKwkJJ2d1aWN1cnNvcicgaXMgdXNlZC4gIFRoZSBkZWZhdWx0IGlzIGEgdmVydGljYWwgYmFyLgorJ3NlbGVjdG1vZGUnCVRlbGxzIHdoZW4gdG8gc3RhcnQgU2VsZWN0IG1vZGUgaW5zdGVhZCBvZiBWaXN1YWwgbW9kZS4KKydzZXNzaW9ub3B0aW9ucycgU2V0cyBiZWhhdmlvciBvZiAiOm1rc2Vzc2lvbiIuIChOZWdyaSkKKydzaG93ZnVsbHRhZycJV2hlbiBjb21wbGV0aW5nIGEgdGFnIGluIEluc2VydCBtb2RlLCBzaG93IHRoZSB0YWcgc2VhcmNoCisJCXBhdHRlcm4gKHRpZGllZCB1cCkgYXMgYSBjaG9pY2UgYXMgd2VsbCAoaWYgdGhlcmUgaXMgb25lKS4KKydzd2FwZmlsZScJV2hldGhlciB0byB1c2UgYSBzd2FwIGZpbGUgZm9yIGEgYnVmZmVyLgorJ3N5bnRheCcJV2hlbiBpdCBpcyBzZXQsIHRoZSBzeW50YXggYnkgdGhhdCBuYW1lIGlzIGxvYWRlZC4gIEFsbG93cyBmb3IKKwkJc2V0dGluZyBhIHNwZWNpZmljIHN5bnRheCBmcm9tIGEgbW9kZWxpbmUuCisndHR5bW91c2UnCUFsbG93cyB1c2luZyB4dGVybSBtb3VzZSBjb2RlcyBmb3IgdGVybWluYWxzIHdoaWNoIG5hbWUKKwkJZG9lc24ndCBzdGFydCB3aXRoICJ4dGVybSIuCisnd2lsZGlnbm9yZScJTGlzdCBvZiBwYXR0ZXJucyBmb3IgZmlsZXMgdGhhdCBzaG91bGQgbm90IGJlIGNvbXBsZXRlZCBhdAorCQlhbGwuCisnd2lsZG1vZGUnCUNhbiBiZSB1c2VkIHRvIHNldCB0aGUgdHlwZSBvZiBleHBhbnNpb24gZm9yICd3aWxkY2hhcicuCisJCVJlcGxhY2VzIHRoZSBDVFJMLVQgY29tbWFuZCBmb3IgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24uCisJCURvbid0IGJlZXAgd2hlbiBsaXN0aW5nIGFsbCBtYXRjaGVzLgorJ3dpbmFsdGtleXMnCVdpbjMyIGFuZCBNb3RpZiBHVUkuICBXaGVuICJ5ZXMiLCBBTFQga2V5cyBhcmUgaGFuZGxlZAorCQllbnRpcmVseSBieSB0aGUgd2luZG93IHN5c3RlbS4gIFdoZW4gIm5vIiwgQUxUIGtleXMgYXJlIG5ldmVyCisJCXVzZWQgYnkgdGhlIHdpbmRvdyBzeXN0ZW0uICBXaGVuICJtZW51IiBpdCBkZXBlbmRzIG9uIHdoZXRoZXIKKwkJYSBrZXkgaXMgYSBtZW51IHNob3J0Y3V0LgorJ3dpbm1pbmhlaWdodCcJTWluaW1hbCBoZWlnaHQgZm9yIGVhY2ggd2luZG93LiAgRGVmYXVsdCBpcyAxLiAgU2V0IHRvIDAgaWYKKwkJeW91IHdhbnQgemVyby1saW5lIHdpbmRvd3MuICBTY3JvbGxiYXIgaXMgcmVtb3ZlZCBmb3IKKwkJemVyby1oZWlnaHQgd2luZG93cy4gKE5lZ3JpKQorCisKKworTmV3IEV4IGNvbW1hbmRzCQkJCQkJKm5ldy1leC1jb21tYW5kcy01LjIqCistLS0tLS0tLS0tLS0tLS0KKworfDpiYWRkfAkJQWRkIGZpbGUgbmFtZSB0byBidWZmZXIgbGlzdCB3aXRob3V0IHNpZGUgZWZmZWN0cy4gIChOZWdyaSkKK3w6YmVoYXZlfAlRdWlja2x5IHNldCBNUy1XaW5kb3dzIG9yIHh0ZXJtIGJlaGF2aW9yLgorfDpicm93c2V8CVVzZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2cuCit8OmNhbGx8CQlDYWxsIGEgZnVuY3Rpb24sIG9wdGlvbmFsbHkgd2l0aCBhIHJhbmdlLgorfDpjbmV3ZXJ8Cit8OmNvbGRlcnwJVG8gYWNjZXNzIGEgc3RhY2sgb2YgcXVpY2tmaXggZXJyb3IgbGlzdHMuCit8OmNvbWNsZWFyfAlDbGVhciBhbGwgdXNlci1kZWZpbmVkIGNvbW1hbmRzLgorfDpjb21tYW5kfAlEZWZpbmUgYSB1c2VyIGNvbW1hbmQuCit8OmNvbnRpbnVlfAlHbyBiYWNrIHRvICI6d2hpbGUiLgorfDpjb25maXJtfAlBc2sgY29uZmlybWF0aW9uIGlmIHNvbWV0aGluZyB1bmV4cGVjdGVkIGhhcHBlbnMuCit8OmNzY29wZXwJRXhlY3V0ZSBjc2NvcGUgY29tbWFuZC4KK3w6Y3N0YWd8CVVzZSBjc2NvcGUgdG8ganVtcCB0byBhIHRhZy4KK3w6ZGVsY29tbWFuZHwJRGVsZXRlIGEgdXNlci1kZWZpbmVkIGNvbW1hbmQuCit8OmRlbGZ1bmN0aW9ufAlEZWxldGUgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24uCit8OmVuZGZ1bmN0aW9ufAlFbmQgb2YgdXNlci1kZWZpbmVkIGZ1bmN0aW9uLgorfDpmdW5jdGlvbnwJRGVmaW5lIGEgdXNlciBmdW5jdGlvbi4KK3w6Z3JlcHwJCVdvcmtzIHNpbWlsYXIgdG8gIjptYWtlIi4gKE5lZ3JpKQorfDpta3Nlc3Npb258CUNyZWF0ZSBhIHNlc3Npb24gZmlsZS4KK3w6bm9obHNlYXJjaHwJU3RvcCAnaGxzZWFyY2gnIGhpZ2hsaWdodGluZyBmb3IgYSBtb21lbnQuCit8OlByaW50fAlUaGlzIGlzIFZpIGNvbXBhdGlibGUuICBEb2VzIHRoZSBzYW1lIGFzICI6cHJpbnQiLgorfDpwcm9tcHRmaW5kfAlTZWFyY2ggZGlhbG9nIChXaW4zMiBHVUkpLgorfDpwcm9tcHRyZXBsfAlTZWFyY2gvcmVwbGFjZSBkaWFsb2cgKFdpbjMyIEdVSSkuCit8OnJldHVybnwJUmV0dXJuIGZyb20gYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24uCit8OnNpbWFsdHwJV2luMzIgR1VJOiBTaW11bGF0ZSBhbHQta2V5IHByZXNzZWQuICAoTmVncmkpCit8OnNtYWdpY3wJTGlrZSAiOnN1YnN0aXR1dGUiLCBidXQgYWx3YXlzIHVzZSAnbWFnaWMnLgorfDpzbm9tYWdpY3wJTGlrZSAiOnN1YnN0aXR1dGUiLCBidXQgYWx3YXlzIHVzZSAnbm9tYWdpYycuCit8OnRjbHwJCUV4ZWN1dGUgVENMIGNvbW1hbmQuCit8OnRjbGRvfAlFeGVjdXRlIFRDTCBjb21tYW5kIGZvciBhIHJhbmdlIG9mIGxpbmVzLgorfDp0Y2xmaWxlfAlFeGVjdXRlIGEgVENMIHNjcmlwdCBmaWxlLgorfDp0ZWFyb2ZmfAlUZWFyLW9mZiBhIG1lbnUgKFdpbjMyIEdVSSkuCit8OnRtZW51fAorfDp0dW5tZW51fAlXaW4zMiBHVUk6IG1lbnUgdG9vbHRpcHMuICAoTmVncmkpCit8OnN0YXJ8CToqCUV4ZWN1dGUgYSByZWdpc3Rlci4KKworCitDaGFuZ2VkCQkJCQkJCSpjaGFuZ2VkLTUuMioKKy0tLS0tLS0KKworUmVuYW1lZCBmdW5jdGlvbnM6CisJCWJ1ZmZlcl9leGlzdHMoKQkgICAtPiBidWZleGlzdHMoKQorCQlidWZmZXJfbmFtZSgpICAgICAgLT4gYnVmbmFtZSgpCisJCWJ1ZmZlcl9udW1iZXIoKSAgICAtPiBidWZucigpCisJCWZpbGVfcmVhZGFibGUoKSAgICAtPiBmaWxlcmVhZGFibGUoKQorCQloaWdobGlnaHRfZXhpc3RzKCkgLT4gaGxleGlzdHMoKQorCQloaWdobGlnaHRJRCgpICAgICAgLT4gaGxJRCgpCisJCWxhc3RfYnVmZmVyX25yKCkgICAtPiBidWZucigiJCIpCitUaGUgb2xkIG9uZXMgYXJlIHN0aWxsIHRoZXJlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKK1RoZSBDVFJMLV8gY29tbWFuZCBpbiBJbnNlcnQgYW5kIENvbW1hbmQtbGluZSBtb2RlIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlCituZXcgJ2FsbG93cmV2aW5zJyBvcHRpb24gaXMgc2V0LiAgQXZvaWRzIHRoYXQgcGVvcGxlIHdobyB3YW50IHRvIHR5cGUgU0hJRlQtXworYWNjaWRlbnRhbGx5IGVudGVyIHJldmVyc2UgSW5zZXJ0IG1vZGUsIGFuZCBkb24ndCBrbm93IGhvdyB0byBnZXQgb3V0LgorCitXaGVuIGEgZmlsZSBuYW1lIHBhdGggaW4gIjp0c2VsZWN0IiBsaXN0aW5nIGlzIHRvbyBsb25nLCByZW1vdmUgYSBwYXJ0IGluIHRoZQorbWlkZGxlIGFuZCBwdXQgIi4uLiIgdGhlcmUuCisKK1dpbjMyIEdVSTogTWFkZSBmb250IHNlbGVjdG9yIGFwcGVhciBpbnNpZGUgVmltIHdpbmRvdywgbm90IGp1c3QgYW55IG9kZAorcGxhY2UuIChOZWdyaSkKKworIjpibiIgc2tpcHMgaGVscCBidWZmZXJzLCB1bmxlc3MgY3VycmVudGx5IGluIGEgaGVscCBidWZmZXIuIChOZWdyaSkKKworV2hlbiB0aGVyZSBpcyBhIHN0YXR1cyBsaW5lIGFuZCBvbmx5IG9uZSB3aW5kb3csIGRvbid0IHNob3cgJ14nIGluIHRoZSBzdGF0dXMKK2xpbmUgb2YgdGhlIGN1cnJlbnQgd2luZG93LgorCisiOioiIHVzZWQgdG8gYmUgdXNlZCBmb3IgIic8LCc+IiwgdGhlIFZpc3VhbCBhcmVhLiAgQnV0IGluIFZpIGl0J3MgdXNlZCBhcyBhbgorYWx0ZXJuYXRpdmUgZm9yICI6QCIuICBXaGVuICdjcG9wdGlvbnMnIGluY2x1ZGVzICcqJyB0aGlzIGlzIFZpIGNvbXBhdGlibGUuCisKK1doZW4gJ2luc2VydG1vZGUnIGlzIHNldCwgdXNpbmcgQ1RSTC1PIHRvIGV4ZWN1dGUgYSBtYXBwaW5nIHdpbGwgd29yayBsaWtlCisnaW5zZXJ0bW9kZScgd2FzIG5vdCBzZXQuICBUaGlzIGFsbG93cyAibm9ybWFsIiBtYXBwaW5ncyB0byBiZSB1c2VkIGV2ZW4gd2hlbgorJ2luc2VydG1vZGUnIGlzIHNldC4KKworV2hlbiAnbW91c2UnIHdhcyBzZXQgYWxyZWFkeSAoZS5nLiwgaW4gdGhlIC52aW1yYyBmaWxlKSwgZG9uJ3QgYXV0b21hdGljYWxseQorc2V0ICdtb3VzZScgd2hlbiB0aGUgR1VJIHN0YXJ0cy4KKworUmVtb3ZlZCB0aGUgJ04nLCAnSScgYW5kICdBJyBmbGFncyBmcm9tIHRoZSAnbW91c2UnIG9wdGlvbi4KKworUmVuYW1lZCAidG9nZ2xlIG9wdGlvbiIgdG8gImJvb2xlYW4gb3B0aW9uIi4gIFNvbWUgcGVvcGxlIHRob3VnaHQgdGhhdCAiOnNldAoreHl6IiB3b3VsZCB0b2dnbGUgJ3h5eicgb24vb2ZmIGVhY2ggdGltZS4KKworVGhlIGludGVybmFsIHZhcmlhYmxlICJzaGVsbF9lcnJvciIgY29udGFpbnMgdGhlIGVycm9yIGNvZGUgZnJvbSB0aGUgc2hlbGwsCitpbnN0ZWFkIG9mIGp1c3QgMCBvciAxLgorCitXaGVuIGluc2VydGluZyBvciByZXBsYWNpbmcsIHR5cGluZyBDVFJMLVYgQ1RSTC08Q1I+IHVzZWQgdG8gaW5zZXJ0ICI8Qy1DUj4iLgorVGhhdCBpcyBub3QgdmVyeSB1c2VmdWwuICBOb3cgdGhlIENUUkwga2V5IGlzIGlnbm9yZWQgYW5kIGEgPENSPiBpcyBpbnNlcnRlZC4KK1NhbWUgZm9yIGFsbCBvdGhlciAibm9ybWFsIiBrZXlzIHdpdGggbW9kaWZpZXJzLiAgTWFwcGluZyB0aGVzZSBtb2RpZmllZCBrZXkKK2NvbWJpbmF0aW9ucyBpcyBzdGlsbCBwb3NzaWJsZS4KK0luIEluc2VydCBtb2RlLCA8Qy1DUj4gYW5kIDxTLVNwYWNlPiBjYW4gYmUgaW5zZXJ0ZWQgYnkgdXNpbmcgQ1RSTC1LIGFuZCB0aGVuCit0aGUgc3BlY2lhbCBjaGFyYWN0ZXIuCisKK01vdmVkICJxdW90ZXMiIGZpbGUgdG8gZG9jL3F1b3Rlcy50eHQsIGFuZCAidG9kbyIgZmlsZSB0byBkb2MvdG9kby50eHQuICBUaGV5CithcmUgbm93IGluc3RhbGxlZCBsaWtlIG90aGVyIGRvY3VtZW50YXRpb24gZmlsZXMuCisKK3dpbmhlaWdodCgpIGZ1bmN0aW9uIHJldHVybnMgLTEgZm9yIGEgbm9uLWV4aXN0aW5nIHdpbmRvdy4gIEl0IHVzZWQgdG8gYmUKK3plcm8sIGJ1dCB0aGF0IGlzIGEgdmFsaWQgaGVpZ2h0IG5vdy4KKworVGhlIGRlZmF1bHQgZm9yICdzZWxlY3Rpb24nIGlzICJpbmNsdXNpdmUiLCB3aGljaCBtYWtlcyBhIGRpZmZlcmVuY2Ugd2hlbgordXNpbmcgIiQiIG9yIHRoZSBtb3VzZSB0byBtb3ZlIHRoZSBjdXJzb3IgaW4gVmlzdWFsIG1vZGUuCisKKyI6cSEiIGRvZXMgbm90IGV4aXQgd2hlbiB0aGVyZSBhcmUgY2hhbmdlZCBidWZmZXJzIHdoaWNoIGFyZSBoaWRkZW4uICBVc2UKKyI6cWEhIiB0byBleGl0IGFueXdheS4KKworRGlzYWJsZWQgdGhlIFBlcmwvUHl0aG9uL1RjbCBpbnRlcmZhY2VzIGJ5IGRlZmF1bHQuICBOb3QgbWFueSBwZW9wbGUgdXNlIHRoZW0KK2FuZCB0aGV5IG1ha2UgdGhlIGV4ZWN1dGFibGUgYSBsb3QgYmlnZ2VyLiAgVGhlIGludGVybmFsIHNjcmlwdGluZyBsYW5ndWFnZSBpcworbm93IHBvd2VyZnVsIGVub3VnaCBmb3IgbW9zdCB0YXNrcy4KKworVGhlIHN0cmluZ3MgZnJvbSB0aGUgJ3RpdGxlc3RyaW5nJyBhbmQgJ2ljb25zdHJpbmcnIG9wdGlvbnMgYXJlIHVzZWQKK3VudHJhbnNsYXRlZCBmb3IgdGhlIFdpbmRvdyB0aXRsZSBhbmQgaWNvbi4gIFRoaXMgYWxsb3dzIGZvciBpbmNsdWRpbmcgYSA8Q1I+LgorUHJldmlvdXNseSBhIDxDUj4gd291bGQgYmUgc2hvd24gYXMgIl5NIiAodHdvIGNoYXJhY3RlcnMpLgorCitXaGVuIGEgbWFwcGluZyBpcyBzdGFydGVkIGluIFZpc3VhbCBvciBTZWxlY3QgbW9kZSB3aGljaCB3YXMgc3RhcnRlZCBmcm9tCitJbnNlcnQgbW9kZSAodGhlIG1vZGUgc2hvd3MgIihpbnNlcnQpIFZpc3VhbCIpLCBkb24ndCByZXR1cm4gdG8gSW5zZXJ0IG1vZGUKK3VudGlsIHRoZSBtYXBwaW5nIGhhcyBlbmRlZC4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBhIG1hcHBpbmcgaW4gVmlzdWFsCittb2RlIHRoYXQgYWxzbyB3b3JrcyB3aGVuIHRoZSBWaXN1YWwgbW9kZSB3YXMgc3RhcnRlZCBmcm9tIFNlbGVjdCBtb2RlLgorCitNZW51cyBpbiAkVklNUlVOVElNRS9tZW51LnZpbSBubyBsb25nZXIgb3ZlcnJ1bGUgZXhpc3RpbmcgbWVudXMuICBUaGlzIGhlbHBzCit3aGVuIGRlZmluaW5nIG1lbnVzIGluIHRoZSAudmltcmMgZmlsZSwgb3Igd2hlbiBzb3VyY2luZyBtc3dpbi52aW0uCisKK1VuaXg6IFVzZSAvdmFyL3RtcCBmb3IgLnN3cCBmaWxlcywgaWYgaXQgZXhpc3RzLiAgRmlsZXMgdGhlcmUgc3Vydml2ZSBhCityZWJvb3QgKGF0IGxlYXN0IG9uIExpbnV4KS4KKworCitBZGRlZAkJCQkJCQkqYWRkZWQtNS4yKgorLS0tLS0KKworLS13aXRoLW1vdGlmLWxpYiBjb25maWd1cmUgYXJndW1lbnQuICBBbGxvd3MgZm9yIHVzaW5nIGEgc3RhdGljIE1vdGlmIGxpYnJhcnkuCisKK1N1cHBvcnQgZm9yIG1hcHBpbmcgbnVtZXJpYyBrZXlwYWQgKywtLCosLyBrZXlzLiAoTmVncmkpCitXaGVuIG5vdCBtYXBwZWQsIHRoZXkgcHJvZHVjZSB0aGUgbm9ybWFsIGNoYXJhY3Rlci4KKworV2luMzIgR1VJOiBXaGVuIGRpcmVjdG9yeSBkcm9wcGVkIG9uIEd2aW0sIGNkIHRoZXJlIGFuZCBlZGl0IG5ldyBidWZmZXIuCisoTmVncmkpCisKK1dpbjMyIEdVSTogTWFkZSBDVFJMLUJyZWFrIHdvcmsgYXMgaW50ZXJydXB0LCBzbyB0aGF0IENUUkwtQyBjYW4gYmUKK3VzZWQgZm9yIG1hcHBpbmdzLgorCitJbiB0aGUgb3V0cHV0IG9mICI6bWFwIiwgaGlnaGxpZ2h0IHRoZSAiKiIgdG8gbWFrZSBjbGVhciBpdCdzIG5vdCBwYXJ0IG9mIHRoZQorcmhzLiAoUm9lbWVyKQorCitXaGVuIHNob3dpbmcgdGhlIFZpc3VhbCBhcmVhLCB0aGUgY3Vyc29yIGlzIG5vdCBzd2l0Y2hlZCBvZmYsIHNvIHRoYXQgaXQgY2FuCitiZSBsb2NhdGVkLiAgVGhlIFZpc3VhbCBhcmVhIGlzIG5vdyBoaWdobGlnaHRlZCB3aXRoIGEgZ3JleSBiYWNrZ3JvdW5kIGluIHRoZQorR1VJLiAgVGhpcyBtYWtlcyB0aGUgY3Vyc29yIHZpc2libGUgd2hlbiBpdCdzIGFsc28gcmV2ZXJzZWQuCisKK1dpbjMyOiBXaGVuIHN0YXJ0ZWQgd2l0aCBzaW5nbGUgZnVsbCBwYXRobmFtZSAoZS5nLiB2aWEgZG91YmxlLWNsaWNrZWQgZmlsZSksCitjZCB0byB0aGF0IGZpbGUncyBkaXJlY3RvcnkuIChOZWdyaSkKKworV2luMzIgR1VJOiBUZWFyLW9mZiBtZW51cywgd2l0aCAiOnRlYXJvZmYgPG1lbnUtbmFtZT4iIGNvbW1hbmQuIChOZWdyaSkKKyd0JyBvcHRpb24gdG8gJ2d1aW9wdGlvbnMnOiBBZGQgdGVhcm9mZiBtZW51IGl0ZW1zIGZvciBXaW4zMiBHVUkgYW5kIE1vdGlmLgorSXQncyBpbmNsdWRlZCBieSBkZWZhdWx0LgorV2luMzIgR1VJOiB0ZWFyb2ZmIG1lbnUgd2l0aCBzdWJtZW51cyBpcyBpbmRpY2F0ZWQgd2l0aCBhICI+PiIuIChOZWdyaSkKKworQWRkZWQgXkthYSBhbmQgXktBQSBkaWdyYXBocy4KK0FkZGVkICJldXJvIiBzeW1ib2wgdG8gZGlncmFwaC5jLiAoQ29ycnkpCisKK1N1cHBvcnQgZm9yIE1vdGlmIG1lbnUgc2hvcnRjdXQga2V5cywgdXNpbmcgJyYnIGxpa2UgTVMtV2luZG93cyAoT2xsaXMpLgorT3RoZXIgR1VJcyBpZ25vcmUgJyYnIGluIGEgbWVudSBuYW1lLgorCitESkdQUDogRmFzdGVyIHNjcmVlbiB1cGRhdGluZyAoSm9obiBMYW5nZSkuCisKK0NsdXN0ZXJpbmcgb2Ygc3ludGF4IGdyb3VwcyAiOnN5bnRheCBjbHVzdGVyIiAoQmlnaGFtKS4KK0luY2x1ZGluZyBzeW50YXggZmlsZXM6ICI6c3ludGF4IGluY2x1ZGUiIChCaWdoYW0pLgorCitLZWVwIGNvbHVtbiB3aGVuIHN3aXRjaGluZyBidWZmZXJzLCB3aGVuICdub3NvbCcgaXMgc2V0IChSYWRpY3MpLgorCitOdW1iZXIgZnVuY3Rpb24gZm9yIFBlcmwgaW50ZXJmYWNlLgorCitTdXBwb3J0IGZvciBJbnRlbGxpbW91c2UgaW4gQXRoZW5hIEdVSS4gKEplbnNlbikKKworIjpzbGVlcCIgYWxzbyBhY2NlcHRzIGFuIGFyZ3VtZW50IGluIG1pbGxpc2Vjb25kcywgd2hlbiAibSIgaXMgdXNlZC4KKworQWRkZWQgJ3AnIGZsYWcgaW4gJ2d1aW9wdGlvbnMnOiBJbnN0YWxsIGNhbGxiYWNrcyBmb3IgZW50ZXIvbGVhdmUgd2luZG93CitldmVudHMuICBNYWtlcyBjdXJzb3IgYmxpbmtpbmcgd29yayBmb3IgVGVyaGFhciwgYnJlYWtzIGl0IGZvciBtZS4KKworIi0taGVscCIgYW5kICItLXZlcnNpb24iIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCisKK05vbi10ZXh0IGluICI6bGlzdCIgb3V0cHV0IGlzIGhpZ2hsaWdodGVkIHdpdGggTm9uVGV4dC4KKworQWRkZWQgdGV4dCBvYmplY3RzOiAiaSgiIGFuZCAiaSkiIGFzIHN5bm9ueW0gZm9yICJpYiIuICJpeyIgYW5kICJpfSIgYXMKK3N5bm9ueW0gZm9yICJpQiIuICBOZXc6ICJpPCIgYW5kICJpPiIsIHRvIHNlbGVjdCA8dGhpbmc+LiAgQWxsIHRoaXMgYWxzbyBmb3IKKyJhIiBvYmplY3RzLgorCisnTycgZmxhZyBpbiAnc2hvcnRtZXNzJzogbWVzc2FnZSBmb3IgcmVhZGluZyBhIGZpbGUgb3ZlcndyaXRlcyBhbnkgcHJldmlvdXMKK21lc3NhZ2UuIChOZWdyaSkKKworV2luMzIgR1VJOiAnVCcgZmxhZyBpbiAnZ3Vpb3B0aW9ucyc6IHN3aXRjaCB0b29sYmFyIG9uL29mZi4KK0luY2x1ZGVkIGEgbGlzdCB3aXRoIHNlbGYtbWFkZSB0b29sYmFyIGJpdG1hcHMuICAoTmVncmkpCisKK0FkZGVkIG1lbnUgcHJpb3JpdHkgZm9yIHN1Yi1tZW51cy4gIEltcGxlbWVudGVkIGZvciBXaW4zMiBhbmQgTW90aWYgR1VJLgorRGlzcGxheSBtZW51IHByaW9yaXR5IHdpdGggIjptZW51IiBjb21tYW5kLgorRGVmYXVsdCBhbmQgU3ludGF4IG1lbnVzIG5vdyBpbmNsdWRlIHByaW9yaXR5IGZvciBpdGVtcy4gIEFsbG93cyBpbnNlcnRpbmcKK21lbnUgaXRlbXMgaW4gYmV0d2VlbiB0aGUgZGVmYXVsdCBvbmVzLgorCitXaGVuIHRoZSAnbnVtYmVyJyBvcHRpb24gaXMgb24sIGhpZ2hsaWdodCBsaW5lIG51bWJlcnMgd2l0aCB0aGUgTGluZU5yIGdyb3VwLgorCisiSWdub3JlIiBoaWdobGlnaHQgZ3JvdXA6IFRleHQgaGlnaGxpZ2h0ZWQgd2l0aCB0aGlzIGlzIG1hZGUgYmxhbmsuICBJdCBpcwordXNlZCB0byBoaWRlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgaGVscCB0ZXh0LgorCitJbmNsdWRlZCBFeHViZXJhbnQgQ3RhZ3MgdmVyc2lvbiAyLjMsIHdpdGggQysrIHN1cHBvcnQsIEphdmEgc3VwcG9ydCBhbmQKK3JlY3Vyc2UgaW50byBkaXJlY3Rvcmllcy4gKEhpZWJlcnQpCisKK1doZW4gYSB0YWdzIGZpbGUgaXMgbm90IHNvcnRlZCwgYW5kIHRoaXMgaXMgZGV0ZWN0ZWQgKGluIGEgc2ltcGxpc3RpYyB3YXkpLCBhbgorZXJyb3IgbWVzc2FnZSBpcyBnaXZlbi4KKworIjp1bmxldCIgYWNjZXB0cyBhICIhIiwgdG8gaWdub3JlIG5vbi1leGlzdGluZyB2YXJpYWJsZXMsIGFuZCBhY2NlcHRzIG1vcmUKK3RoYW4gb25lIGFyZ3VtZW50LiAoUm9lbWVyKQorQ29tcGxldGlvbiBvZiB2YXJpYWJsZSBuYW1lcyBmb3IgIjp1bmxldCIuIChSb2VtZXIpCisKK1doZW4gdGhlcmUgaXMgYW4gZXJyb3IgaW4gYSBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgYnkgYW5vdGhlciBmdW5jdGlvbiwgc2hvdwordGhlIGNhbGwgc3RhY2sgaW4gdGhlIGVycm9yIG1lc3NhZ2UuCisKK05ldyBmaWxlIG5hbWUgbW9kaWZpZXJzOgorIjouIjogcmVkdWNlIGZpbGUgbmFtZSB0byBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpci4KKyI6fiI6IHJlZHVjZSBmaWxlIG5hbWUgdG8gYmUgcmVsYXRpdmUgdG8gaG9tZSBkaXIuCisiOnM/cGF0P3N1Yj8iOiBzdWJzdGl0dXRlICJwYXQiIHdpdGggInN1YiIgb25jZS4KKyI6Z3M/cGF0P3N1Yj8iOiBzdWJzdGl0dXRlICJwYXQiIHdpdGggInN1YiIgZ2xvYmFsbHkuCisKK05ldyBjb25maWd1cmUgYXJndW1lbnRzOiAtLWVuYWJsZS1taW4tZmVhdHVyZXMgYW5kIC0tZW5hYmxlLW1heC1mZWF0dXJlcy4KK0Vhc3kgd2F5IHRvIHN3aXRjaCB0byBtaW5pbXVtIG9yIG1heGltdW0gZmVhdHVyZXMuCisKK05ldyBjb21waWxlLXRpbWUgZmVhdHVyZTogbW9kaWZ5X2ZuYW1lLiAgRm9yIGZpbGUgbmFtZSBtb2RpZmllcnMsIGUuZywKKyIlOnA6aCIuICBDYW4gYmUgZGlzYWJsZWQgdG8gc2F2ZSBzb21lIGNvZGUgKDE2IGJpdCBET1MpLgorCitXaGVuIHVzaW5nIHdob2xlLWxpbmUgY29tcGxldGlvbiBpbiBJbnNlcnQgbW9kZSwgYW5kICdjaW5kZW50JyBpcyBzZXQsIGluZGVudAordGhlIGxpbmUgcHJvcGVybHkuCisKK01TRE9TIGFuZCBXaW4zMiBjb25zb2xlOiAnZ3VpY3Vyc29yJyBzZXRzIGN1cnNvciB0aGlja25lc3MuIChOZWdyaSkKKworSW5jbHVkZWQgbmV3IHNldCBvZiBGYXJzaSBmb250cy4gKFNoaXJhbikKKworQWNjZWxlcmF0b3IgdGV4dCBub3cgYWxzbyB3b3JrcyBpbiBNb3RpZi4gIEFsbCBtZW51cyBjYW4gYmUgZGVmaW5lZCB3aXRoICYgZm9yCittbmVtb25pYyBhbmQgVEFCIGZvciBhY2NlbGVyYXRvciB0ZXh0LiAgVGhleSBhcmUgaWdub3JlZCBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3QKK3N1cHBvcnQgdGhlbS4KK1doZW4gcmVtb3Zpbmcgb3IgcmVwbGFjaW5nIGEgbWVudSwgY29tcGFyZSB0aGUgbWVudSBuYW1lIG9ubHkgdXAgdG8gdGhlIDxUYWI+CitiZWZvcmUgdGhlIG1uZW1vbmljLgorCisnaScgYW5kICdJJyBmbGFncyBhZnRlciAiOnN1YnN0aXR1dGUiOiBpZ25vcmUgY2FzZSBvciBub3QuCisKKyJtYWtlIGluc3RhbGwiIGNvbXBsYWlucyBpZiB0aGUgcnVudGltZSBmaWxlcyBhcmUgbWlzc2luZy4KKworVW5peDogV2hlbiBmaW5kaW5nIGFuIGV4aXN0aW5nIHN3YXAgZmlsZSB0aGF0IGNhbid0IGJlIG9wZW5lZCwgbWVudGlvbiB0aGUKK293bmVyIG9mIHRoZSBmaWxlIGluIHRoZSBBVFRFTlRJT04gbWVzc2FnZS4KKworVGhlICdpJywgJ3QnIGFuZCAnaycgb3B0aW9ucyBpbiAnY29tcGxldGUnIG5vdyBhbHNvIHByaW50IHRoZSBwbGFjZSB3aGVyZSB0aGV5CithcmUgbG9va2luZyBmb3IgbWF0Y2hlcy4gKEFjZXZlZG8pCisKKyJnSiIgY29tbWFuZDogSm9pbiBsaW5lcyB3aXRob3V0IGluc2VydGluZyBhIHNwYWNlLgorCitTZXR0aW5nICdrZXl3b3JkcHJnJyB0byAibWFuIC1zIiBpcyBoYW5kbGVkIHNwZWNpZmljYWxseS4gIFRoZSAiLXMiIGlzIHJlbW92ZWQKK3doZW4gbm8gY291bnQgZ2l2ZW4sIHRoZSBjb3VudCBpcyBhZGRlZCBvdGhlcndpc2UuICBDb25maWd1cmUgY2hlY2tzIGlmICJtYW4KKy1zIDIgcmVhZCIgd29ya3MsIGFuZCBzZXRzIHRoZSBkZWZhdWx0IGZvciAna2V5d29yZHByZycgYWNjb3JkaW5nbHkuCisKK0lmIHlvdSBkbyBhICI6YmQiIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSB3aW5kb3cgb3BlbiwgVmltIHRyaWVzIHRvIG1vdmUgdG8gYQorYnVmZmVyIG9mIHRoZSBzYW1lIHR5cGUgKGkuZS4gbm9uLWhlbHAgdG8gbm9uLWhlbHAsIGhlbHAgdG8gaGVscCksIGZvcgorY29uc2lzdGVudCBiZWhhdmlvciB0byA6Ym5leHQvOmJwcmV2LiAoTmVncmkpCisKK0FsbG93ICI8Tm9wPiIgdG8gYmUgdXNlZCBhcyB0aGUgcmhzIG9mIGEgbWFwcGluZy4gICI6bWFwIHh4IDxOb3A+IiwgbWFwcyAieHgiCit0byBub3RoaW5nIGF0IGFsbC4KKworSW4gYSAiOm1lbnUiIGNvbW1hbmQsICI8VGFiPiIgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIHJlYWwgdGFiLCBpbiB0aGUgbWVudQorcGF0aC4gIFRoaXMgbWFrZXMgaXQgbW9yZSBlYXN5IHRvIHR5cGUsIG5vIGJhY2tzbGFzaCBuZWVkZWQuCisKK1BPU0lYIGNvbXBhdGlibGUgY2hhcmFjdGVyIGNsYXNzZXMgZm9yIHJlZ2V4cCBwYXR0ZXJuczogWzphbG51bTpdLCBbOmFscGhhOl0sCitbOmJsYW5rOl0sIFs6Y250cmw6XSwgWzpkaWdpdDpdLCBbOmdyYXBoOl0sIFs6bG93ZXI6XSwgWzpwcmludDpdLCBbOnB1bmN0Ol0sCitbOnNwYWNlOl0sIFs6dXBwZXI6XSBhbmQgWzp4ZGlnaXQ6XS4gKEJyaXNjb2UpCisKK3JlZ2V4cCBjaGFyYWN0ZXIgY2xhc3NlcyAoZm9yIGZhc3Qgc3ludGF4IGhpZ2hsaWdodCBtYXRjaGluZyk6CisJZGlnaXRzOgkgICAgXGQgWzAtOV0JCVxEICBub3QgZGlnaXQgKFJvZW1lcikKKwloZXg6CSAgICBceCBbMC05YS1mQS1GXQlcWCAgbm90IGhleAorCW9jdGFsOgkgICAgXG8gWzAtN10JCVxPICBub3Qgb2N0YWwKKwl3b3JkOgkgICAgXHcgW2EtekEtWjAtOV9dCVxXICBub3Qgd29yZAorCWhlYWQ6CSAgICBcaCBbYS16QS1aX10JXEggIG5vdCBoZWFkCisJYWxwaGFiZXRpYzogXGEgW2EtekEtWl0JCVxBICBub3QgYWxwaGFiZXRpYworCWxvd2VyY2FzZTogIFxsIFthLXpdCQlcTCAgbm90IGxvd2VyY2FzZQorCXVwcGVyY2FzZTogIFx1IFtBLVpdCQlcVSAgbm90IHVwcGVyY2FzZQorCisiOnNldCIgbm93IGFjY2VwdHMgIis9IiwgfF49IiBhbmQgIi09IjogYWRkIG9yIHJlbW92ZSBwYXJ0cyBvZiBhIHN0cmluZworb3B0aW9uLCBhZGQgb3Igc3VidHJhY3QgYSBudW1iZXIgZnJvbSBhIG51bWJlciBvcHRpb24uICBBIGNvbW1hIGlzCithdXRvbWFnaWNhbGx5IGluc2VydGVkIG9yIGRlbGV0ZWQgZm9yIG9wdGlvbnMgdGhhdCBhcmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4KKworRmlsZXR5cGUgZmVhdHVyZSwgZm9yIGF1dG9jb21tYW5kcy4gIFVzZXMgYSBmaWxlIHR5cGUgaW5zdGVhZCBvZiBhIHBhdHRlcm4gdG8KK21hdGNoIGEgZmlsZS4gIEN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIFJJU0MgT1MuICAoTGVvbmFyZCkKKworSW4gYSBwYXR0ZXJuIGZvciBhbiBhdXRvY29tbWFuZCwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZSB1c2VkLiAgVGhleSBhcmUKK2V4cGFuZGVkIHdoZW4gdGhlIGF1dG9jb21tYW5kIGlzIGRlZmluZWQuCisKKyJCdWZGaWxlUHJlIiBhbmQgIkJ1ZkZpbGVQb3N0IiBhdXRvY29tbWFuZCBldmVuczogQmVmb3JlIGFuZCBhZnRlciBhcHBseWluZwordGhlICI6ZmlsZSIgY29tbWFuZCB0byBjaGFuZ2UgdGhlIG5hbWUgb2YgYSBidWZmZXIuCisiVmltTGVhdmVQcmUiIGF1dG9jb21tYW5kIGV2ZW50OiBiZWZvcmUgd3JpdGluZyB0aGUgLnZpbWluZm8gZmlsZS4KKworRm9yIGF1dG9jb21tYW5kcyBhcmd1bWVudDogPGFidWY+IGlzIGJ1ZmZlciBudW1iZXIsIGxpa2UgPGFmaWxlPi4KKworTWFkZSBzeW50YXggaGlnaGxpZ2h0aW5nIGEgYml0IGZhc3RlciB3aGVuIHNjcm9sbGluZyBiYWNrd2FyZHMsIGJ5IGtlZXBpbmcKK21vcmUgc3luY2luZyBjb250ZXh0LgorCitXaW4zMiBHVUk6IE1hZGUgc2Nyb2xsaW5nIGZhc3RlciBieSBhdm9pZGluZyBhIHJlZHJhdyB3aGVuIGRlbGV0aW5nIG9yCitpbnNlcnRpbmcgc2NyZWVuIGxpbmVzLgorCitHVUk6IE1hZGUgc2Nyb2xsaW5nIGZhc3RlciBieSBub3QgcmVkcmF3aW5nIHRoZSBzY3JvbGxiYXIgd2hlbiB0aGUgdGh1bWIgbW92ZWQKK2xlc3MgdGhhbiBhIHBpeGVsLgorCitJbmNsdWRlZCAiOmhpZ2hsaWdodCIgaW4gYnVncmVwb3J0LnZpbS4KKworQ3JlYXRlZCBpbnN0YWxsLmV4ZSBwcm9ncmFtLCBmb3Igc2ltcGxpc3RpYyBpbnN0YWxsYXRpb24gb24gRE9TIGFuZAorTVMtV2luZG93cy4KKworTmV3IHJlZ2lzdGVyOiAnXycsIHRoZSBibGFjayBob2xlLiAgV2hlbiB3cml0aW5nIHRvIGl0LCBub3RoaW5nIGhhcHBlbnMuICBXaGVuCityZWFkaW5nIGZyb20gaXQsIGl0J3MgYWx3YXlzIGVtcHR5LiAgQ2FuIGJlIHVzZWQgdG8gYXZvaWQgYSBkZWxldGUgb3IgY2hhbmdlCitjb21tYW5kIHRvIG1vZGlmeSB0aGUgcmVnaXN0ZXJzLCBvciByZWR1Y2UgbWVtb3J5IHVzZSBmb3IgYmlnIGNoYW5nZXMuCisKK0NUUkwtViB4ZmYgZW50ZXJzIGNoYXJhY3RlciBieSBoZXggbnVtYmVyLiAgQ1RSTC1WIG8xMjMgZW50ZXJzIGNoYXJhY3RlciBieQorb2N0YWwgbnVtYmVyLiAoQWFyb24pCisKK0ltcHJvdmVkIHBlcmZvcm1hbmNlIG9mIHN5bnRheCBoaWdobGlnaHRpbmcgYnkgc2tpcHBpbmcgY2hlY2sgZm9yICJrZWVwZW5kIgord2hlbiB0aGVyZSBpc24ndCBhbnkuCisKK01vdmVkIHRoZSBtb2RlIG1lc3NhZ2UgKCItLSBJTlNFUlQgLS0iKSB0byB0aGUgbGFzdCBsaW5lIG9mIHRoZSBzY3JlZW4uICBXaGVuCisnY21kaGVpZ2h0JyBpcyBtb3JlIHRoYW4gb25lLCBtZXNzYWdlcyB3aWxsIHJlbWFpbiByZWFkYWJsZS4KKworV2hlbiBsaXN0aW5nIG1hdGNoaW5nIGZpbGVzLCB0aGV5IGFyZSBhbHNvIHNvcnRlZCBvbiAnc3VmZml4ZXMnLCBzdWNoIHRoYXQKK3RoZXkgYXJlIGxpc3RlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyBDVFJMLU4gcmV0cmlldmVzIHRoZW0uCisKK3N5bklEYXR0cigpIHRha2VzIGEgdGhpcmQgYXJndW1lbnQgKG9wdGlvbmFsbHkpLCB3aGljaCB0ZWxscyBmb3Igd2hpY2gKK3Rlcm1pbmFsIHR5cGUgdG8gZ2V0IHRoZSBhdHRyaWJ1dGVzIGZvci4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gcnVuCisyaHRtbC52aW0gb3V0c2lkZSBvZiBndmltICh1c2luZyBjb2xvciBuYW1lcyBpbnN0ZWFkIG9mICNSUkdHQkIpLgorCitNZW1vcnkgcHJvZmlsaW5nLCBvbmx5IGZvciBkZWJ1Z2dpbmcuICBQcmludHMgYXQgZXhpdCwgYW5kIHdpdGggImdeQSIgY29tbWFuZC4KKyhLYWhuKQorCitET1M6IFdoZW4gdXNpbmcgYSBmaWxlIGluIHRoZSBjdXJyZW50IGRyaXZlLCByZW1vdmUgdGhlIGRyaXZlIG5hbWU6CisiQTpcZGlyXGZpbGUiIC0+ICJcZGlyXGZpbGUiLiAgVGhpcyBoZWxwcyB3aGVuIG1vdmluZyBhIHNlc3Npb24gZmlsZSBvbiBhCitmbG9wcHkgZnJvbSAiQTpcZGlyIiB0byAiQjpcZGlyIi4KKworSW5jcmVhc2VkIG51bWJlciBvZiByZW1lbWJlcmVkIGp1bXBzIGZyb20gMzAgdG8gNTAgcGVyIHdpbmRvdy4KKworQ29tbWFuZCB0byB0ZW1wb3JhcmlseSBkaXNhYmxlICdobHMnIGhpZ2hsaWdodGluZyB1bnRpbCB0aGUgbmV4dCBzZWFyY2g6CisiOm5vaGxzZWFyY2giLgorCisiZ3AiIGFuZCAiZ1AiIGNvbW1hbmRzOiBsaWtlICJwIiBhbmQgIlAiLCBidXQgbGVhdmUgdGhlIGN1cnNvciBqdXN0IGFmdGVyIHRoZQoraW5zZXJ0ZWQgdGV4dC4gIFVzZWQgZm9yIHRoZSBDVFJMLVYgY29tbWFuZCBpbiBNUy1XaW5kb3dzIG1vZGUuCisKKworRml4ZWQJCQkJCQkJKmZpeGVkLTUuMioKKy0tLS0tCisKK1dpbjMyIEdVSTogQ291bGQgZHJhdyB0ZXh0IHR3aWNlIGluIG9uZSBwbGFjZSwgZm9yIGZha2UtYm9sZCB0ZXh0LiAgUmVtb3ZlZAordGhpcywgV2luZG93cyB3aWxsIGhhbmRsZSB0aGUgYm9sZCB0ZXh0IGFueXdheS4gKE5lZ3JpKQorCitwYXRjaCA1LjEuMTogV2luMzJzIEdVSTogcGFzdGluZyBjYXVzZWQgYSBjcmFzaCAoTmVncmkpCisKK3BhdGNoIDUuMS4yOiBXaGVuIGVudGVyaW5nIGFub3RoZXIgd2luZG93LCB3aGVyZSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgY3Vyc29yCitoYXZlIGJlZW4gZGVsZXRlZCwgY291bGQgaGF2ZSBhIGN1cnNvciBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKworcGF0Y2ggNS4xLjM6IFdpbjMycyBHVUk6IERpZG4ndCB3YWl0IGZvciBleHRlcm5hbCBjb21tYW5kIHRvIGZpbmlzaC4gKE5lZ3JpKQorCitwYXRjaCA1LjEuNDogTWFrZWZpbGUudzMyIGNhbiBub3cgYWxzbyBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBPTEUgdmVyc2lvbgorKFNjb3R0KS4KKworcGF0Y2ggNS4xLjU6IENyYXNoZWQgd2hlbiB1c2luZyBzeW50YXggaGlnaGxpZ2h0aW5nOiBjdXJzb3Igb24gYSBsaW5lIHRoYXQKK2RvZXNuJ3QgZml0IGluIHRoZSB3aW5kb3csIGFuZCBzcGxpdHRpbmcgdGhhdCBsaW5lIGluIHR3by4KKworcGF0Y2ggNS4xLjY6IFZpc3VhbCBoaWdobGlnaHRpbmcgYnVnOiBBZnRlciAiOnNldCBub3dyYXAiLCBnbyB0byBlbmQgb2YgbGluZQorKHNvIHRoYXQgdGhlIHdpbmRvdyBzY3JvbGxzIGhvcml6b250YWxseSksICI6c2V0IHdyYXAiLiAgRm9sbG93aW5nIFZpc3VhbAorc2VsZWN0aW9uIHdhcyB3cm9uZy4KKworcGF0Y2ggNS4xLjc6IFdoZW4gJ3RhZ2JzZWFyY2gnIG9mZiwgYW5kICdpZ25vcmVjYXNlJyBvZmYsIHN0aWxsIGNvdWxkIGRvCitiaW5hcnkgc2VhcmNoaW5nLgorCitwYXRjaCA1LjEuODogV2luMzIgR1VJOiBkcmFnZ2luZyB0aGUgc2Nyb2xsYmFyIGRpZG4ndCB1cGRhdGUgdGhlIHJ1bGVyLgorCitwYXRjaCA1LjEuOTogVXNpbmcgIjpndWkiIGluIC52aW1yYywgY2F1c2VkIHh0ZXJtIGN1cnNvciB0byBkaXNhcHBlYXIuCisKK3BhdGNoIDUuMS4xMDogQSBDVFJMLU4gaW4gSW5zZXJ0IG1vZGUgY291bGQgY2F1c2UgYSBjcmFzaCwgd2hlbiBhIGJ1ZmZlcgord2l0aG91dCBhIG5hbWUgZXhpc3RzLgorCitwYXRjaCA1LjEuMTE6ICJtYWtlIHRlc3QiIGRpZG4ndCB3b3JrIGluIHRoZSBzaGFkb3cgZGlyZWN0b3J5LiAgQWxzbyBhZGp1c3RlZAorIm1ha2Ugc2hhZG93IiBmb3IgdGhlIGxpbmtzIGluIHRoZSBjdGFncyBkaXJlY3RvcnkuCisKK3BhdGNoIDUuMS4xMjogImJ1ZiAxMjNmb28iIHVzZWQgIjEyMyIgYXMgYSBjb3VudCwgaW5zdGVhZCBhcyB0aGUgc3RhcnQgb2YgYQorYnVmZmVyIG5hbWUuCisKK3BhdGNoIDUuMS4xMzogV2hlbiBjb21wbGV0aW5nIGZpbGUgbmFtZXMgb24gdGhlIGNvbW1hbmQtbGluZSwgcmVhbGxvY2F0aW5nIHRoZQorY29tbWFuZC1saW5lIG1heSBnbyB3cm9uZy4KKworcGF0Y2ggNS4xLjE0OiAiOltudmNpXXVubWVudSIgcmVtb3ZlZCBtZW51IGZvciBhbGwgbW9kZXMsIHdoZW4gZnVsbCBtZW51IHBhdGNoCitzcGVjaWZpZWQuCisKK0dyYWNlZnVsIGhhbmRsaW5nIG9mIE5VTExzIGluIGRyYWctZHJvcHBlZCBmaWxlIGxpc3QuICBIYW5kbGUgcGFzc2luZyBOVUxMIHRvCitGdWxsbmFtZV9zYXZlKCkuIChOZWdyaSkKKworV2luMzI6ICI6IXN0YXJ0IiB0byBpbnZva2UgYSBwcm9ncmFtIHdpdGhvdXQgb3BlbmluZyBhIGNvbnNvbGUsIHN3YXBwaW5nCitzY3JlZW5zLCBvciB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGluIGVpdGhlciBjb25zb2xlIG9yIGd1aSB2ZXJzaW9uLiBlLmcuIHlvdQorY2FuIHR5cGUgIjohc3RhcnQgd2luZmlsZSIuICBBTFNPIGZpeGVzICJjYW4ndCBkZWxldGUgc3dhcGZpbGUgYWZ0ZXIgc3Bhd25pbmcKK2Egc2hlbGwiIGJ1Zy4gKGVuaGFuY2VtZW50IG9mIEFhcm9uIHBhdGNoKSAoTmVncmkpCisKK1dpbjMyIEdVSTogRml4IENUUkwtWCBkZWZhdWx0IGtleW1hcHBpbmcgdG8gYmUgbW9yZSBXaW5kb3dzLWxpa2UuIChOZWdyaSkKKworU2hvcnRlbiBmaWxlbmFtZXMgb24gc3RhcnR1cC4gIElmIGluIC9mb28vYmFyLCBlbnRlcmluZyAidmltIC4uL2Jhci9iYW5nLmMiCitkaXNwbGF5cyAiYmFuZy5jIiBpbiBzdGF0dXMgYmFyLCBub3QgIi9mb28vYmFyL2JhbmcuYyIgIChOZWdyaSkKKworV2luMzIgR1VJOiBObyBjb3B5IHRvIFdpbmRvd3MgY2xpcGJvYXJkIHdoZW4gaXQncyBub3QgZGVzaXJlZC4KKworV2luMzJzOiBGaXggcGFzdGluZyBmcm9tIGNsaXBib2FyZCAtIG1hZGUgYW4gYXNzdW1wdGlvbiBub3QgdmFsaWQgdW5kZXIKK1dpbjMycy4gKE5lZ3JpKQorCitXaW4zMiBHVUk6IFNwZWVkIHVwIGNhbGxzIHRvIGd1aV9tY2hfZHJhd19zdHJpbmcoKSBhbmQgY3Vyc29yIGRyYXdpbmcKK2Z1bmN0aW9ucy4gKE5lZ3JpKQorCitXaW4zMiBHVUk6IE1pZGRsZSBtb3VzZSBidXR0b24gZW11bGF0aW9uIG5vdyB3b3JrcyBpbiBHVUkhIChOZWdyaSkKKworQ291bGQgc2tpcCBtZXNzYWdlcyB3aGVuIGNvbWJpbmluZyBjb21tYW5kcyBpbiBvbmUgbGluZSwgZS5nLjoKKyI6ZWNobyAiaGVsbG8iIHwgd3JpdGUiLgorCitQZXJsIGludGVycHJldGVyIHdhcyBkaXNhYmxlZCBiZWZvcmUgZXhlY3V0aW5nIFZpbUxlYXZlIGF1dG9jb21tYW5kcy4gIENvdWxkCitub3QgdXNlICI6cGVybCIgaW4gdGhlbS4gIChBYXJvbikKKworSW5jbHVkZWQgcGF0Y2ggZm9yIHRoZSBJbnRlbGxpbW91c2UgKEFhcm9uL1JvYmluc29uKS4KKworQ291bGQgbm90IHNldCAnbHMnIHRvIG9uZSwgd2hlbiBsYXN0IHdpbmRvdyBoYXMgb25seSBvbmUgbGluZS4gIChNaXR0ZXJhbmQpCisKK0ZpeGVkIGEgbWVtb3J5IGxlYWsgd2hlbiByZW1vdmluZyBtZW51cy4KKworQWZ0ZXIgIjpvbmx5IiB0aGUgcnVsZXIgY291bGQgb3ZlcndyaXRlIGEgbWVzc2FnZS4KKworRG9zMzI6IHJlbW92ZWQgY2hhbmdpbmcgb2YgX19zeXN0ZW1fZmxhZ3MuICBJdCBhcHBlYXJzIHRvIHdvcmsgYmV0dGVyIHdoZW4KK2l0J3MgbGVmdCBhdCB0aGUgZGVmYXVsdCB2YWx1ZS4KKworcF9hbGVwaCB3YXMgYW4gaW50IGluc3RlYWQgb2YgYWxvbmcsIGNhdXNlZCB0cm91YmxlIG9uIHN5c3RlbXMgd2hlcmUKK3NpemVvZihpbnQpICE9IHNpemVvZihsb25nKS4gKFNjaG1pZHQpCisKK0ZpeGVkIGVudW0gcHJvYmxlbXMgZm9yIFVsdHJpeC4gKFNlaWJlcnQpCisKK1NtYWxsIHJlZHJhdyBwcm9ibGVtOiAiZGQiIG9uIGxhc3QgbGluZSBpbiBmaWxlIGNsZWFyZWQgd3JvbmcgbGluZS4KKworRGlkbid0IGludGVycHJldCAiY21kIHwgZW5kaWYiIHdoZW4gImNtZCIgc3RhcnRzIHdpdGggYSByYW5nZS4gIEUuZy4gImlmIDAgfAorLmQgfCBlbmRpZiIuCisKK0NvbW1hbmQgIit8IiBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWxlIGNhdXNlZCBtbF9nZXQgZXJyb3JzLgorCitNZW1vcnkgdW5kZXJydW4gaW4gZXZhbF92YXJzKCkuIChBYXJvbikKKworRG9uJ3QgcmVuYW1lIGZpbGVzIGluIGEgZGlmZmljdWx0IHdheSwgZXhjZXB0IG9uIFdpbmRvd3MgOTUgKHdhcyBhbHNvIGRvbmUgb24KK1dpbmRvd3MgTlQpLgorCitXaW4zMiBHVUk6IEFuIGV4dGVybmFsIGNvbW1hbmQgdGhhdCBwcm9kdWNlcyBhbiBlcnJvciBjb2RlIHB1dCB0aGUgZXJyb3IKK21lc3NhZ2UgaW4gYSBkaWFsb2cgYm94LiAgaGFkIHRvIGNsb3NlIHRoZSB3aW5kb3cgYW5kIGNsb3NlIHRoZSBkaWFsb2cuICBOb3cKK3RoZSBlcnJvciBjb2RlIGlzIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZS4gKE5lZ3JpKQorCisiY29tY3RsMzIubGliIiB3YXMgbWlzc2luZyBmcm9tIHRoZSBHVUkgbGlicmFyaWVzIGluIE1ha2VmaWxlLnczMi4gKEJhdHRsZSkKKworSW4gSW5zZXJ0IG1vZGUsIHdoZW4gZW50ZXJpbmcgYSB3aW5kb3cgaW4gSW5zZXJ0IG1vZGUsIGFsbG93IHRoZSBjdXJzb3IgdG8gYmUKK29uZSBjaGFyIGJleW9uZCB0aGUgdGV4dC4KKworUmVuYW1lZCBtYWNoaW5lIGRlcGVuZGVudCByZW5hbWUoKSB0byBtY2hfcmVuYW1lKCkuICBEZWZpbmUgbWNoX3JlbmFtZSgpIHRvCityZW5hbWUoKSB3aGVuIGl0IHdvcmtzIHByb3Blcmx5LgorCitSZW5hbWUgdmltX2NoZGlyKCkgdG8gbWNoX2NoZGlyKCksIGJlY2F1c2UgaXQncyBtYWNoaW5lIGRlcGVuZGVudC4KKworV2hlbiB1c2luZyBhbiBhcmdsaXN0LCBhbmQgZWRpdGluZyBmaWxlIDUgb2YgNCwgIjpxIiBjb3VsZCBjYXVzZSAiLTEgbW9yZQorZmlsZXMgdG8gZWRpdCIgZXJyb3IuCisKK0luIGlmX3B5dGhvbi5jLCBWaW1Db21tYW5kKCkgY2F1c2VkIGFuIGFzc2VydGlvbiB3aGVuIGEgZG9fY21kbGluZSgpIGZhaWxlZC4KK01vdmVkIHRoZSBQeXRob25fUmVsZWFzZV9WaW0oKSB0byBiZWZvcmUgdGhlIFZpbUVycm9yQ2hlY2soKS4gIChIYXJraW5zKQorCitHaXZlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGFuIHVua25vd24gYXJndW1lbnQgYWZ0ZXIgIi0tIi4gIEUuZy4gZm9yICJ2aW0KKy0teHl6Ii4KKworVGhlIEZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQgZGlkbid0IHNldCA8YWZpbGU+IHRvIHRoZSBuYW1lIG9mIHRoZSBjaGFuZ2VkCitmaWxlLgorCitXaGVuIGRvaW5nICI6ZSBmaWxlIiwgY2F1c2luZyB0aGUgYXR0ZW50aW9uIG1lc3NhZ2UsIHRoZXJlIHNvbWV0aW1lcyB3YXMgbm8KK2hpdC1lbnRlciBwcm9tcHQuICBDYXVzZWQgYnkgZW1wdHkgbGluZSBvciAiZW5kaWYiIGF0IGVuZCBvZiBzb3VyY2VkIGZpbGUuCisKK0EgbGFyZ2UgbnVtYmVyIG9mIHBhdGNoZXMgZm9yIHRoZSBWTVMgdmVyc2lvbi4gKEh1bnNha2VyKQorCitXaGVuIENUUkwtTCBjb21wbGV0aW9uIChmaW5kIGxvbmdlc3QgbWF0Y2gpIHJlc3VsdHMgaW4gYSBzaG9ydGVyIHN0cmluZywgbm8KK2NvbXBsZXRpb24gaXMgZG9uZSAoaGFwcGVucyB3aXRoICI6aGVscCIpLgorCitDcmFzaCBpbiBXaW4zMiBHVUkgdmVyc2lvbiwgd2hlbiB1c2luZyBhbiBFeCAiQCIgY29tbWFuZCwgYmVjYXVzZQorTGluZVBvaW50ZXJzW10gd2FzIHVzZWQgd2hpbGUgbm90IGluaXRpYWxpemVkLgorCitXaW4zMiBHVUk6IGFsbG93IG1hcHBpbmcgb2YgQWx0LVNwYWNlLgorCitPdXRwdXQgZnJvbSAidmltIC1oIiB3YXMgc2VudCB0byBzdGRlcnIuICBTZW5kaW5nIGl0IHRvIHN0ZG91dCBpcyBiZXR0ZXIsIHNvCitvbmUgY2FuIHVzZSAidmltIC1oIHwgbW9yZSIuCisKK0luIGNvbW1hbmQtbGluZSBtb2RlLCAiOnZpWyFdIiBzaG91bGQgcmVsb2FkIHRoZSBmaWxlLCBqdXN0IGxpa2UgIjplWyFdIi4KK0luIEV4IG1vZGUsICI6dmkiIHN0b3BzIEV4IG1vZGUsIGJ1dCBkb2Vzbid0IHJlbG9hZCB0aGUgZmlsZS4gIFRoaXMgaXMgVmkKK2NvbXBhdGlibGUuCisKK1doZW4gdXNpbmcgYSAiOnNldCBscz0xIiBpbiB0aGUgLmd2aW1yYyBmaWxlLCB3b3VsZCBnZXQgYSBzdGF0dXMgbGluZSBmb3IgYQorc2luZ2xlIHdpbmRvdy4gIChSb2JpbnNvbikKKworRGlkbid0IGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBmb3IgIjpzZXQgYWkseHgiLiAoUm9lbWVyKQorRGlkbid0IGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBmb3IgIjpzZXQgYWk/eHgiLCAiOnNldCBhaSZ4eCIsICI6c2V0IGFpIXh4Ii4KKworTm9uLVVuaXggc3lzdGVtczogVGhhdCBhIGZpbGUgZXhpc3RzIGJ1dCBpcyB1bnJlYWRhYmxlIGlzIHJlY29nbml6ZWQgYXMgIm5ldworZmlsZSIuICBOb3cgY2hlY2sgZm9yIGV4aXN0ZW5jZSB3aGVuIGZpbGUgY2FuJ3QgYmUgb3BlbmVkIChsaWtlIFVuaXgpLgorCitVbml4OiBvc2RlZi5zaCBkaWRuJ3QgaGFuZGxlIGRlY2xhcmF0aW9ucyB3aGVyZSB0aGUgZnVuY3Rpb24gbmFtZSBpcyBhdCB0aGUKK2ZpcnN0IGNvbHVtbiBvZiB0aGUgbGluZS4KKworREpHUFA6IFNob3J0ZW5pbmcgb2YgZmlsZSBuYW1lcyBkaWRuJ3Qgd29yayBwcm9wZXJseSwgYmVjYXVzZSBnZXRfY3dkKCkKK3JldHVybmVkIGEgcGF0aCB3aXRoIGJhY2tzbGFzaGVzLiAoTmVncmkpCisKK1doZW4gdXNpbmcgYSAnY29tbWVudHMnIHBhcnQgd2hlcmUgYSBzcGFjZSBpcyByZXF1aXJlZCBhZnRlciB0aGUgbWlkZGxlIHBhcnQsCithbHdheXMgaW5zZXJ0IGEgc3BhY2Ugd2hlbiBzdGFydGluZyBhIG5ldyBsaW5lLiAgSGVscHMgZm9yIEMgY29tbWVudHMsIGJlbG93IGEKK2xpbmUgd2l0aCAiLyoqKioiLgorCitSZXBsYWNpbmcgcGF0aCBvZiBob21lIGRpcmVjdG9yeSB3aXRoICJ+LyIgY291bGQgYmUgd3JvbmcgZm9yIGZpbGUgbmFtZXMKK3dpdGggZW1iZWRkZWQgc3BhY2VzIG9yIGNvbW1hcy4KKworQSBmZXcgZml4ZXMgZm9yIHRoZSBTbmlmZiBpbnRlcmZhY2UuIChMZWhlcmJhdWVyKQorCitXaGVuIGFza2luZyB0byBoaXQgJ3knIG9yICduJyAoZS5nLiBmb3IgIjozLDFkIiksIHVzaW5nIHRoZSBtb3VzZSBjYXVzZWQKK3Ryb3VibGUuICBTYW1lIGZvciAiOnMveC95L2MiIHByb21wdC4KKworV2l0aCAnbm93cmFwJyBhbmQgJ2xpc3QnLCBhIFRhYiBoYWxmd2F5IG9uIHRoZSBzY3JlZW4gd2FzIGRpc3BsYXllZCBhcyBibGFua3MsCitpbnN0ZWFkIG9mIHRoZSBjaGFyYWN0ZXJzIHNwZWNpZmllZCB3aXRoICdsaXN0Y2hhcnMnLiAgQWxzbyBmb3Igb3RoZXIKK2NoYXJhY3RlcnMgdGhhdCB0YWtlIG1vcmUgdGhhbiBvbmUgc2NyZWVuIGNoYXJhY3Rlci4KKworV2hlbiBzZXR0aW5nICdndWlmb250JyB0byBhbiB1bmtub3duIGZvbnQgbmFtZSwgdGhlIHByZXZpb3VzIGZvbnQgd2FzIGxvc3QgYW5kCithIGRlZmF1bHQgZm9udCB3b3VsZCBiZSB1c2VkLiAoU3RlZWQpCisKK0RPUzogRmlsZW5hbWVzIGluIHRoZSByb290IGRpcmVjdG9yeSBkaWRuJ3QgZ2V0IHNob3J0ZW5lZCBwcm9wZXJseS4gKE5lZ3JpKQorCitESkdQUDogbWFraW5nIGEgZnVsbCBwYXRoIG5hbWUgb3V0IG9mIGEgZmlsZSBuYW1lIGRpZG4ndCB3b3JrIHByb3Blcmx5IHdoZW4KK3RoZXJlIGlzIG5vIF9mdWxscGF0aCgpIGZ1bmN0aW9uLiAoTmVncmkpCisKK1dpbjMyIGNvbnNvbGU6ICI6c2giIGNhdXNlZCBhIGNyYXNoLiAoTmVncmkpCisKK1dpbjMyIGNvbnNvbGU6IFNldHRpbmcgJ2xpbmVzJyBhbmQvb3IgJ2NvbHVtbnMnIGluIHRoZSBfdmltcmMgZmFpbGVkIG1pc2VyYWJseQorKGNvdWxkIGhhbmcgV2luZG93cyA5NSkuIChOZWdyaSkKKworV2luMzI6IFRoZSBjaGFuZ2UtZHJpdmUgZnVuY3Rpb24gd2FzIG5vdCBjb3JyZWN0LCB3ZW50IHRvIHRoZSB3cm9uZyBkcml2ZS4KKyhUc2luZGxla2h0KQorCitHVUk6IFdoZW4gZWRpdGluZyBhIGNvbW1hbmQgbGluZSBpbiBFeCBtb2RlLCBUYWJzIHdlcmUgc29tZXRpbWVzIG5vdAorYmFja3NwYWNlZCBwcm9wZXJseSwgYW5kIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgd2VyZSBkaXNwbGF5ZWQgZGlyZWN0bHkuCitub24tR1VJIGNhbiBzdGlsbCBiZSB3cm9uZywgYmVjYXVzZSBhIHN5c3RlbSBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHRoaXMuCisKKyI6c2V0IiBkaWRuJ3Qgc3RvcCBhZnRlciBhbiBlcnJvci4gIEZvciBleGFtcGxlICI6c2V0IG5vIGFpIiBnYXZlIGFuIGVycm9yIGZvcgorIm5vIiwgYnV0IHN0aWxsIHNldCAiYWkiLiAgTm93ICI6c2V0IiBzdG9wcyBhZnRlciB0aGUgZmlyc3QgZXJyb3IuCisKK1doZW4gcnVubmluZyBjb25maWd1cmUgZm9yIGN0YWdzLCAkTERGTEFHUyB3YXNuJ3QgcGFzc2VkIHRvIGl0LCBjYXVzaW5nCit0cm91YmxlIGZvciBJUklYLgorCisiQCUiIGFuZCAiQCMiIHdoZW4gZmlsZSBuYW1lIG5vdCBzZXQgZ2F2ZSBhbiBlcnJvciBtZXNzYWdlLiAgTm93IHRoZXkganVzdAorcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4gKFN0ZWVkKQorCitDVFJMLVggYW5kIENUUkwtQSBkaWRuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCBuZWdhdGl2ZSBoZXggYW5kIG9jdGFsIG51bWJlcnMuCisoU3RlZWQpCisKKyI6ZWNobyIgYWx3YXlzIHN0YXJ0ZWQgd2l0aCBhIGJsYW5rLgorCitVcGRhdGluZyBHVUkgY3Vyc29yIHNoYXBlIGRpZG4ndCBhbHdheXMgd29yayAoZS5nLiwgd2hlbiBibGlua2luZyBpcyBvZmYpLgorCitJbiBzaWxlbnQgRXggbW9kZSAoImV4IC1zIiBvciAiZXggPGZpbGUiKSAiOnMvLy9wIiBkaWRuJ3QgcHJpbnQgYSBsaW5lLiAgQWxzbworYSBmZXcgb3RoZXIgY29tbWFuZHMgdGhhdCBleHBsaWNpdGx5IHByaW50IGEgdGV4dCBsaW5lIGRpZG4ndCB3b3JrLiAgTWFkZSB0aGlzCitWaSBjb21wYXRpYmxlLgorCitXaW4zMiB2ZXJzaW9uIG9mIF9jaGRyaXZlKCkgZGlkbid0IHJldHVybiBjb3JyZWN0IHZhbHVlLiAoVHNpbmRsZWtodCkKKworV2hlbiB1c2luZyAndCcgaW4gJ2NvbXBsZXRlJyBvcHRpb24sIG5vIGxvbmdlciBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGEKK21pc3NpbmcgdGFncyBmaWxlLgorCitVbml4OiB0Z290bygpIGNhbiByZXR1cm4gTlVMTCwgd2hpY2ggd2FzIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBpbiBjb25maWd1cmUuCisKK1doZW4gZG9pbmcgIjpoZWxwIiBmcm9tIGEgYnVmZmVyIHdoZXJlICdiaW5hcnknIGlzIHNldCwgYWxzbyBlZGl0ZWQgdGhlIGhlbHAKK2ZpbGUgaW4gYmluYXJ5IG1vZGUuICBDYXVzZWQgZXh0cmEgXk1zIGZvciBET1Mgc3lzdGVtcy4KKworQ3Vyc29yIHBvc2l0aW9uIGluIGEgZmlsZSB3YXMgcmVzZXQgdG8gMSB3aGVuIGNsb3NpbmcgYSB3aW5kb3cuCisKKyI6IWxzIiBpbiBFeCBtb2RlIHN3aXRjaGVkIG9mZiBlY2hvLgorCitXaGVuIGRvaW5nIGEgZG91YmxlIGNsaWNrIGluIHdpbmRvdyBBLCB3aGlsZSBjdXJyZW50bHkgaW4gd2luZG93IEIsIGZpcnN0CitjbGljayB3b3VsZCByZXNldCBkb3VibGUgY2xpY2sgdGltZSwgaGFkIHRvIGNsaWNrIHRocmVlIHRpbWVzIHRvIHNlbGVjdCBhCit3b3JkLgorCitXaGVuIHVzaW5nIDxGMTE+IGluIG1hcHBpbmdzLCAiOm1rZXhyYyIgcHJvZHVjZWQgYW4gZXhyYyBmaWxlIHRoYXQgY2FuJ3QgYmUKK3VzZWQgaW4gVmkgY29tcGF0aWJsZSBtb2RlLiAgQWRkZWQgc2V0dGluZyBvZiAnY3BvJyB0byBhdm9pZCB0aGlzLiAgQWxzbywgYWRkCithIENUUkwtViBpbiBmcm9udCBvZiBhICc8JywgdG8gYXZvaWQgYSBub3JtYWwgc3RyaW5nIHRvIGJlIGludGVycHJldGVkIGFzIGEKK3NwZWNpYWwga2V5IG5hbWUuCisKK0dhdmUgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2UgZm9yICI6c2V0IGd1aWZvbnQ9LSotbHVjaWRhLSoiOiBmaXJzdCAiZm9udCBpcworbm90IGZpeGVkIHdpZHRoIiwgdGhlbiAiVW5rbm93biBmb250Ii4KKworU29tZSBvcHRpb25zIHdlcmUgc3RpbGwgY29tcGxldGVseSBsZWZ0IG91dCwgaW5zdGVhZCBvZiBpbmNsdWRlZCBhcyBoaWRkZW4KK29wdGlvbnMuCisKK1doaWxlIHJ1bm5pbmcgdGhlIFgxMSBHVUksIGlnbm9yZSBTSUdIVVAgc2lnbmFscy4gIEF2b2lkcyBhIGNyYXNoIGFmdGVyCitleGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCAoaW4gcmFyZSBjYXNlcykuCisKK0luIG9zX3VuaXh4LmgsIHNpZ25hbCgpIHdhcyBkZWZpbmVkIHRvIHNpZ3NldCgpLCB3aGlsZSBpdCBhbHJlYWR5IHdhcy4KKworTWVtb3J5IGxlYWsgd2hlbiBleGVjdXRpbmcgYXV0b2NvbW1hbmRzICh3YXMgcmVwb3J0ZWQgYXMgYSBtZW1vcnkgbGVhayBpbgorc3ludGF4IGhpZ2hsaWdodGluZykuCisKK0RpZG4ndCBwcmludCBzb3VyY2Ugb2YgZXJyb3Igc29tZXRpbWVzLCBiZWNhdXNlIHBvaW50ZXJzIHdlcmUgdGhlIHNhbWUsCithbHRob3VnaCBuYW1lcyB3ZXJlIGRpZmZlcmVudC4KKworQXZvaWQgYSBudW1iZXIgb2YgVU1SIGVycm9ycyBmcm9tIFB1cmlmeSAodGhpcmQgYXJndW1lbnQgdG8gb3BlbigpKS4KKworQSBzd2FwIGZpbGUgY291bGQgc3RpbGwgYmUgY3JlYXRlZCBqdXN0IGFmdGVyIHNldHRpbmcgJ3VwZGF0ZWNvdW50JyB0byB6ZXJvLAord2hlbiB0aGVyZSBpcyBhbiBlbXB0eSBidWZmZXIgYW5kIGRvaW5nICI6ZSBmaWxlIi4gKEt1dHNjaGVyYSkKKworVGVzdCAzNSBmYWlsZWQgb24gNjQgYml0IG1hY2hpbmVzLiAoU2NoaWxkKQorCitXaXRoICJwIiBhbmQgIlAiIGNvbW1hbmRzLCByZWRyYXdpbmcgd2FzIHNsb3cuCisKK0F3ayBzY3JpcHQgZm9yIGh0bWwgZG9jdW1lbnRhdGlvbiBkaWRuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCBBSVggYXdrLgorUmVwbGFjZWQgIlsgLC4pO1xdCV0iIHdpdGggIltdICwuKTsJXSIuIChCcmlzY29lKQorVGhlIG1ha2VodG1sLmF3ayBzY3JpcHQgaGFkIGEgc21hbGwgcHJvYmxlbSwgY2F1c2luZyBleHRyYSBsaW5lcyB0byBiZQoraW5zZXJ0ZWQuIChCcmlzY29lKQorCisiZ3FncSIgY291bGQgbm90IGJlIHJlcGVhdGVkLiAgUmVwZWF0aW5nIGZvciAiZ3VndSIgYW5kICJnVWdVIiB3b3JrZWQgaW4gYQord3Jvbmcgd2F5LiAgQWxzbyBtYWRlICJncXEiIHdvcmsgdG8gYmUgY29uc2lzdGVudCB3aXRoICJndXUiLgorCitDIGluZGVudCB3YXMgd3JvbmcgYWZ0ZXIgImNhc2UgJzonOiIuCisKKyI6YXUgQnVmUmVhZFByZSAqLmMgcHV0IjogTGluZSBmcm9tIHB1dCB0ZXh0IHdhcyBkZWxldGVkLCBiZWNhdXNlIHRoZSBidWZmZXIKK3dhcyBzdGlsbCBhc3N1bWVkIHRvIGJlIGVtcHR5LgorCitUZXh0IHBhc3RlZCB3aXRoIHRoZSBFZGl0L1Bhc3RlIG1lbnUgd2FzIHN1YmplY3QgdG8gJ3RleHR3aWR0aCcgYW5kCisnYXV0b2luZGVudCcuICBUaGF0IHdhcyBpbmNvbnNpc3RlbnQgd2l0aCB1c2luZyB0aGUgbW91c2UgdG8gcGFzdGUuICBOb3cgIipwCitpcyB1c2VkLgorCitXaGVuIHVzaW5nIENUUkwtVyBDVFJMLV0gb24gYSB3b3JkIHRoYXQncyBub3QgYSB0YWcsIGFuZCB0aGVuIENUUkwtXSBvbiBhIHRhZywKK3dpbmRvdyB3YXMgc3BsaXQuCisKKyI6dHMiIGdvdCBzdHVjayBvbiBhIHRhZ3MgbGluZSB0aGF0IGhhcyB0d28gZXh0cmEgZmllbGRzLgorCitJbiBJbnNlcnQgbW9kZSwgd2l0aCAnc2hvd21vZGUnIG9uLCA8Qy1PPjxDLUc+IG1lc3NhZ2Ugd2FzIGRpcmVjdGx5CitvdmVyd3JpdHRlbiBieSBtb2RlIG1lc3NhZ2UsIGlmIHByZWNlZGVkIHdpdGggc2VhcmNoIGNvbW1hbmQgd2FybmluZyBtZXNzYWdlLgorCitXaGVuIHB1dHRpbmcgdGhlIHJlc3VsdCBvZiBhbiBleHByZXNzaW9uIHdpdGggIj08ZXhwcj5wLCBuZXdsaW5lcyB3ZXJlCitpbnNlcnRlZCBsaWtlIF5AIChOVUwgaW4gdGhlIGZpbGUpLiAgTm93IHRoZSBzdHJpbmcgaXMgc3BsaXQgdXAgaW4gbGluZXMgYXQKK3RoZSBuZXdsaW5lLgorCitwdXRlbnYoKSB3YXMgZGVjbGFyZWQgd2l0aCAiY29uc3QgY2hhciAqIiBpbiBwdHkuYywgYnV0IHdpdGggImNoYXIgKiIgaW4KK29zZGVmMi5oLmluLiAgTWFkZSB0aGUgbGFzdCBvbmUgYWxzbyAiY29uc3QgY2hhciAqIi4KKworIjpoZWxwIHt3b3JkfSIsIHdoZXJlICt7d29yZH0gaXMgYSBmZWF0dXJlLCBqdW1wZWQgdG8gdGhlIGZlYXR1cmUgbGlzdCBpbnN0ZWFkCitvZiB3aGVyZSB0aGUgY29tbWFuZCB3YXMgZXhwbGFpbmVkLiAgRS5nLiwgIjpoZWxwIGJyb3dzZSIsICI6aGVscCBhdXRvY21kIi4KKworVXNpbmcgdGhlICJcPHh4PiIgZm9ybSBpbiBhbiBleHByZXNzaW9uIG9ubHkgZ290IG9uZSBieXRlLCBldmVuIHdoZW4gdXNpbmcgYQorc3BlY2lhbCBjaGFyYWN0ZXIgdGhhdCB1c2VzIHNldmVyYWwgYnl0ZXMgKGUuZy4sICJcPEY5PiIpLgorQ2hhbmdlZCAiXDxCUz4iIHRvIHByb2R1Y2UgQ1RSTC1IIGluc3RlYWQgb2YgdGhlIHNwZWNpYWwga2V5IGNvZGUgZm9yIHRoZQorYmFja3NwYWNlIGtleS4gICJcPERlbD4iIHByb2R1Y2VzIDB4N2YuCisKKyI6bWt2aW1yYyIgZGlkbid0IHdyaXRlIGEgY29tbWFuZCB0byBzZXQgJ2NvbXBhdGlibGUnIG9yICdub2NvbXBhdGlibGUnLgorCitUaGUgc2hlbGwgc3ludGF4IGRpZG4ndCBjb250YWluIGEgInN5biBzeW5jIG1heGxpbmVzIiBzZXR0aW5nLiAgSW4gYSBsb25nIGZpbGUKK3dpdGhvdXQgcmVjb2duaXphYmxlIGl0ZW1zLCBzeW5jaW5nIHRvb2sgc28gbG9uZyBpdCBsb29rZWQgbGlrZSBWaW0gaGFuZ3MuCitBZGRlZCBhIG1heGxpbmVzIHNldHRpbmcsIGFuZCBtYWRlIHN5bmNpbmcgaW50ZXJydXB0YWJsZS4KKworVGhlICJncyIgY29tbWFuZCBkaWRuJ3QgZmx1c2ggb3V0cHV0IGJlZm9yZSB3YWl0aW5nLgorCitNZW1vcnkgbGVha3MgZm9yOgorICAgICI6aWYgMCB8IGxldCBhID0gYiAuIGMgfCBlbmRpZiIKKyAgICAibGV0IGEgPSBiW2NdIgorICAgICI6c28ge2ZpbGV9IiB3aGVyZSB7ZmlsZX0gY29udGFpbnMgYSAiOndoaWxlIgorCitHVUk6IGFsbG9jYXRlZCBmb250cyB3ZXJlIG5ldmVyIHJlbGVhc2VkLiAoTGVvbmFyZCkKKworTWFrZWZpbGUuYm9yOgorLSBDaGFuZ2VkICQoREVGSU5FUykgaW50byBhIGxpc3Qgb2YgIi1EIiBvcHRpb25zLCBzbyB0aGF0IGl0IGNhbiBhbHNvIGJlIHVzZWQKKyAgZm9yIHRoZSByZXNvdXJjZSBjb21waWxlci4gKG5vdCB0ZXN0ZWQhKQorLSAiYmNjLmNmZyIgd2FzIHVzZWQgZm9yIGFsbCBjb25maWd1cmF0aW9ucy4gIFdoZW4gYnVpbGRpbmcgZm9yIGFub3RoZXIKKyAgY29uZmlndXJhdGlvbiwgdGhlIHNldHRpbmdzIGZvciB0aGUgcHJldmlvdXMgb25lIHdvdWxkIGJlIHVzZWQuICBNb3ZlZAorICAiYmNjLmNmZyIgdG8gdGhlIG9iamVjdCBkaXJlY3RvcnkuIChHZWRkZXMpCistIEluY2x1ZGVkIHRhcmdldHMgZm9yIHZpbXJ1biwgaW5zdGFsbCwgY3RhZ3MgYW5kIHh4ZC4gIENoYW5nZWQgdGhlIGRlZmF1bHQgdG8KKyAgdXNlIHRoZSBCb3JsYW5kIERMTCBSdW50aW1lIExpYnJhcnksIG1ha2VzIFZpbS5leGUgYSBsb2cgc21hbGxlci4gKEFhcm9uKQorCisiMioiIHNlYXJjaCBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciB3aXRoICIyIiBwcmVwZW5kZWQuIChMZW9uYXJkKQorCitXaGVuIGRlbGV0aW5nIGludG8gYSBzcGVjaWZpYyByZWdpc3Rlciwgd291bGQgc3RpbGwgb3ZlcndyaXRlIHRoZSBub24tV2luMzIKK0dVSSBzZWxlY3Rpb24uICBOb3cgIiJ4IipQIHdvcmtzLgorCitXaGVuIGRlbGV0aW5nIGludG8gdGhlICIiIHJlZ2lzdGVyLCB3b3VsZCB3cml0ZSB0byB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyLgorTm93ICIieCBhbHdheXMgd3JpdGVzIHRvIHRoZSB1bm5hbWVkIHJlZ2lzdGVyLgorCitHVUkgQXRoZW5hOiBBIHN1Ym1lbnUgd2l0aCBhICcuJyBpbiBpdCBkaWRuJ3Qgd29yay4gIEUuZy4sCisiOmFtZW51IFN5bnRheC5YWVwuWi5mb28gbGxsIi4KKworV2hlbiBmaXJzdCBkb2luZyAiOnRhZyBmb28iIGFuZCB0aGVuICI6dG5leHQiIGFuZC9vciAiOnRzZWxlY3QiIHRoZSBvcmRlciBvZgorbWF0Y2hpbmcgdGFncyBjb3VsZCBjaGFuZ2UsIGJlY2F1c2UgdGhlIGN1cnJlbnQgZmlsZSBpcyBkaWZmZXJlbnQuICBOb3cgdGhlCitleGlzdGluZyBtYXRjaGVzIGFyZSBrZXB0IGluIHRoZSBzYW1lIG9yZGVyLCBuZXdseSBmb3VuZCBtYXRjaGVzIGFyZSBhZGRlZAorYWZ0ZXIgdGhlbSwgbm90IG1hdHRlciB3aGF0IHRoZSBjdXJyZW50IGZpbGUgaXMuCisKKyI6dGEiIGRpZG4ndCBmaW5kIHRoZSBzZWNvbmQgZW50cnkgaW4gYSB0YWdzIGZpbGUsIGlmIHRoZSBzZWNvbmQgZW50cnkgd2FzCitsb25nZXIgdGhhbiB0aGUgZmlyc3Qgb25lLgorCitXaGVuIHVzaW5nICI6c2V0IHNpIHR3PTciIGluc2VydGluZyAiZm9vIHteUH0iIG1hZGUgdGhlICJ9IiBpbnNlcnRlZCBhdCB0aGUKK3dyb25nIHBvc2l0aW9uLiAgY2FuX3NpIHdhcyBzdGlsbCBUUlVFIHdoZW4gdGhlIGN1cnNvciBpcyBub3QgaW4gdGhlIGluZGVudCBvZgordGhlIGxpbmUuCisKK1J1bm5pbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCBpbiBXaW4zMiB2ZXJzaW9uIGhhZCB0aGUgcHJvYmxlbSB0aGF0IFZpbSBleGl0cword2hlbiB0aGUgWCBvbiB0aGUgY29uc29sZSBpcyBoaXQgKGFuZCBjb25maXJtZWQpLiAgTm93IHVzZSB0aGUgInZpbXJ1biIKK2NvbW1hbmQgdG8gc3RhcnQgdGhlIGV4dGVybmFsIGNvbW1hbmQgaW5kaXJlY3RseS4gKE5lZ3JpKQorCitXaW4zMiBHVUk6IFdoZW4gcnVubmluZyBhbiBleHRlcm5hbCBmaWx0ZXIsIGRvIGl0IGluIGEgbWluaW1pemVkIERPUyBib3guCisoTmVncmkpCisKKyI6bGV0IiBsaXN0ZWQgdmFyaWFibGVzIHdpdGhvdXQgdHJhbnNsYXRpb24gaW50byBwcmludGFibGUgY2hhcmFjdGVycy4KKworV2luMzIgY29uc29sZTogV2hlbiByZXNpemluZyB0aGUgd2luZG93LCBzd2l0Y2hpbmcgYmFjayB0byB0aGUgb2xkIHNpemUKKyh3aGVuIGV4aXRpbmcgb3IgZXhlY3V0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQpIHNvbWV0aW1lcyBmYWlsZWQuIChOZWdyaSkKK1RoaXMgYXBwZWFycyB0byBhbHNvIGZpeCBhICJub24gZml4YWJsZSIgcHJvYmxlbToKK1dpbjMyIGNvbnNvbGUgaW4gTlQgNC4wOiBXaGVuIHJ1bm5pbmcgVmltIGluIGEgY21kIHdpbmRvdyB3aXRoIGEgc2Nyb2xsYmFyLAordGhlIHNjcm9sbGJhciBkaXNhcHBlYXJlZCBhbmQgd2FzIG5vdCByZXN0b3JlZCB3aGVuIFZpbSBleGl0cy4gIFRoaXMgZG9lcyB3b3JrCit1bmRlciBOVCAzLjUxLCBpdCBhcHBlYXJzIG5vdCB0byBiZSBhIFZpbSBwcm9ibGVtLgorCitXaGVuIGV4ZWN1dGluZyBCdWZEZWxldGUgYW5kIEJ1ZlVubG9hZCBhdXRvY29tbWFuZHMgZm9yIGEgYnVmZmVyIHdpdGhvdXQgYQorbmFtZSwgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIHdhcyB1c2VkIGZvciA8YWZpbGU+LgorCitXaGVuIGp1bXBpbmcgdG8gYSB0YWcgaXQgcmVwb3J0ZWQgInRhZyAxIG9mID4yIiwgd2hpbGUgaW4gZmFjdCB0aGVyZSBjb3VsZCBiZQorb25seSB0d28gbWF0Y2hlcy4gIENoYW5nZWQgdG8gInRhZyAxIG9mIDIgb3IgbW9yZSIuCisKKyI6dGp1bXAgdGFnIiBkaWQgYSBsaW5lYXIgc2VhcmNoIGluIHRoZSB0YWdzIGZpbGUsIHdoaWNoIGNhbiBiZSBzbG93LgorCitDb25maWd1cmUgZGlkbid0IGZpbmQgIkxpYlhtLnNvLjIuMCIsIGEgWG0gbGlicmFyeSB3aXRoIGEgdmVyc2lvbiBudW1iZXIuCisKK1dpbjMyIEdVSTogV2hlbiB1c2luZyBhIHNoaWZ0ZWQga2V5IHdpdGggQUxULCB0aGUgc2hpZnQgbW9kaWZpZXIgd291bGQgcmVtYWluCitzZXQsIGV2ZW4gd2hlbiBpdCB3YXMgYWxyZWFkeSB1c2VkIGJ5IGNoYW5naW5nIHRoZSB1c2VkIGtleS4gIEUuZy4sICI8TS1TLTk+IgorcmVzdWx0ZWQgaW4gIjxNLVMtKD4iLCBidXQgaXQgc2hvdWxkIGJlICI8TS0oPiIuIChOZWdyaSkKKworQSBjYWxsIHRvIGdhX2luaXQoKSB3YXMgb2Z0ZW4gZm9sbG93ZWQgYnkgc2V0dGluZyBncm93c2l6ZSBhbmQgaXRlbXNpemUuCitDcmVhdGVkIGdhX2luaXQyKCkgZm9yIHRoaXMsIHdoaWNoIGxvb2tzIGJldHRlci4gKEFhcm9uKQorCitGdW5jdGlvbiBmaWxlcmVhZGFibGUoKSBjb3VsZCBjYWxsIGZvcGVuKCkgd2l0aCBhbiBlbXB0eSBzdHJpbmcsIHdoaWNoIG1pZ2h0CitiZSBpbGxlZ2FsLgorCitYIFdpbmRvd3MgR1VJOiBXaGVuIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kIHRoYXQgb3V0cHV0cyB0ZXh0LCBjb3VsZAord3JpdGUgb25lIGNoYXJhY3RlciBiZXlvbmQgdGhlIGVuZCBvZiBhIGJ1ZmZlciwgd2hpY2ggY2F1c2VkIGEgY3Jhc2guIChLb2hhbikKKworV2hlbiB1c2luZyAiKiIgb3IgIiMiIG9uIGEgc3RyaW5nIHRoYXQgaW5jbHVkZXMgJy8nIG9yICc/JyAod2hlbiB0aGVzZSBhcmUKK2luY2x1ZGVkIGluICdpc2snKSwgdGhleSB3ZXJlIG5vdCBlc2NhcGVkLiAoUGFybWVsYW4pCisKK1doZW4gYWRkaW5nIGEgVG9vbEJhciBtZW51IGluIHRoZSBNb3RpZiBHVUksIHRoZSBzdWJtZW51X2lkIGZpZWxkIHdhcyBub3QKK2NsZWFyZWQsIGNhdXNpbmcgcmFuZG9tIHByb2JsZW1zLgorCitXaGVuIGFkZGluZyBhIG1lbnUsIHRoZSBjaGVjayBpZiB0aGlzIG1lbnUgKG9yIHN1Ym1lbnUpIG5hbWUgYWxyZWFkeSBleGlzdHMKK2RpZG4ndCBjb21wYXJlIHdpdGggdGhlIHNpbXBsaWZpZWQgdmVyc2lvbiAobm8gbW5lbW9uaWMgb3IgYWNjZWxlcmF0b3IpIG9mIHRoZQorbmV3IG1lbnUuICBDb3VsZCBnZXQgdHdvIG1lbnVzIHdpdGggdGhlIHNhbWUgbmFtZSwgZS5nLiwgIkZpbGUiIGFuZCAiJkZpbGUiLgorCitCcmVha2luZyBhIGxpbmUgYmVjYXVzZSBvZiAndGV4dHdpZHRoJyBhdCB0aGUgbGFzdCBsaW5lIGluIHRoZSB3aW5kb3cgY2F1c2VkIGEKK3JlZHJhdyBvZiB0aGUgd2hvbGUgd2luZG93IGluc3RlYWQgb2YgYSBzY3JvbGwuICBTcGVlZHMgdXAgbm9ybWFsIHR5cGluZyB3aXRoCisndGV4dHdpZHRoJyBhIGxvdCBmb3Igc2xvdyB0ZXJtaW5hbHMuCisKK0FuIGludmFsaWQgbGluZSBudW1iZXIgcHJvZHVjZWQgYW4gImludmFsaWQgcmFuZ2UiIGVycm9yLCBldmVuIHdoZW4gaXQgd2Fzbid0Cit0byBiZSBleGVjdXRlZCAoaW5zaWRlICJpZiAwIikuCisKK1doZW4gdGhlIHVubmFtZWQsIGZpcnN0IGJ1ZmZlciBpcyByZS11c2VkLCB0aGUgIkJ1ZkRlbGV0ZSIgYXV0b2NvbW1hbmQgd2FzCitub3QgY2FsbGVkLiAgSXQgd291bGQgc3RpY2sgaW4gYSBidWZmZXIgbGlzdCBtZW51LgorCitXaGVuIGRvaW5nICIlIiBvbiB0aGUgTlVMIGFmdGVyIHRoZSBsaW5lLCBhICJ7IiBvciAifSIgaW4gdGhlIGxhc3QgY2hhcmFjdGVyCitvZiB0aGUgbGluZSB3YXMgbm90IGZvdW5kLgorCitUaGUgSW5zZXJ0IG1vZGUgbWVudSB3YXMgbm90IHVzZWQgZm9yIHRoZSAicyIgY29tbWFuZCwgdGhlIE9wZXJhdG9yLXBlbmRpbmcKK21lbnUgd2FzIHVzZWQgaW5zdGVhZC4KKworV2l0aCAnY29tcGF0aWJsZScgc2V0LCBzb21lIHN5bnRheCBoaWdobGlnaHRpbmcgd2FzIG5vdCBjb3JyZWN0LCBiZWNhdXNlIG9mCit1c2luZyAiW1x0XSIgZm9yIGEgc2VhcmNoIHBhdHRlcm4uICBOb3cgdXNlIHRoZSByZWdleHBzIGZvciBzeW50YXgKK2hpZ2hsaWdodGluZyBsaWtlIHRoZSAnY3BvcHRpb25zJyBvcHRpb24gaXMgZW1wdHkgKGFzIHdhcyBkb2N1bWVudGVkIGFscmVhZHkpLgorCitXaGVuIHVzaW5nICJtYXAgPE0tU3BhY2U+IG1zIiBvciAibWFwIDxTcGFjZT4gc3NzIiB0aGUgb3V0cHV0IG9mICI6bWFwIiBkaWRuJ3QKK3Nob3cgYW55IGxocyBmb3IgdGhlIG1hcHBpbmcgKGlmICdpc3ByaW50JyBpbmNsdWRlcyAxNjApLiAgTm93IGFsd2F5cyB1c2UKKzxTcGFjZT4gYW5kIDxNLVNwYWNlPiwgZXZlbiB3aGVuIHRoZXkgYXJlIHByaW50YWJsZS4KKworQWRqdXN0ZWQgdGhlIFN5bnRheCBtZW51LCBzbyB0aGF0IHRoZSBsb3dlc3QgZW50cnkgZml0cyBvbiBhIHNtYWxsIHNjcmVlbiAoZm9yCitBdGhlbmEsIHdoZXJlIG1lbnVzIGRvbid0IHdyYXApLgorCitXaGVuIHVzaW5nIENUUkwtRSBvciBDVFJMLVkgaW4gSW5zZXJ0IG1vZGUgZm9yIGNoYXJhY3RlcnMgbGlrZSAnbycsICd4JyBhbmQKK2RpZ2l0cywgcmVwZWF0aW5nIHRoZSBpbnNlcnQgZGlkbid0IHdvcmsuCisKK1RoZSBmaWxlICJ0b29scy9jY2ZpbHRlci5SRUFETUUudHh0IiBjb3VsZCBub3QgYmUgdW5wYWNrZWQgd2hlbiB1c2luZyBzaG9ydAorZmlsZSBuYW1lcywgYmVjYXVzZSBvZiB0aGUgdHdvIGRvdHMuICBSZW5hbWVkIGl0IHRvCisidG9vbHMvY2NmaWx0ZXJfUkVBRE1FLnR4dCIuCisKK0ZvciBhIGRhcmsgJ2JhY2tncm91bmQnLCB1c2luZyBCbHVlIGZvciBEaXJlY3RvcnkgYW5kIFNwZWNpYWxLZXkgaGlnaGxpZ2h0Citncm91cHMgaXMgbm90IHZlcnkgcmVhZGFibGUuICBVc2UgQ3lhbiBpbnN0ZWFkLgorCitJbiB0aGUgZnVuY3Rpb24gdWNfc2Nhbl9hdHRyKCkgaW4gZXhfZG9jbWQuYyB0aGVyZSB3YXMgYSBnb3RvIHRoYXQganVtcGVkIGludG8KK2EgYmxvY2sgd2l0aCBhIGxvY2FsIHZhcmlhYmxlLiAgVGhhdCdzIGlsbGVnYWwgZm9yIHNvbWUgY29tcGlsZXJzLgorCitXaW4zMiBHVUk6IFRoZXJlIHdhcyBhIHJvdyBvZiBwaXhlbHMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgd2luZG93IHdoaWNoIHdhcyBub3QKK2RyYXduLiAoQWFyb24pCisKK1VuZGVyIERPUywgZWRpdGluZyAiZmlsZW5hbWUvIiBjcmVhdGVkIGEgc3dhcCBmaWxlIG9mICJmaWxlbmFtZS8uc3dwIi4gIFNob3VsZAorYmUgImZpbGVuYW1lL19zd3AiLgorCitXaW4zMiBHVUk6IHBvaW50ZXIgd2FzIGhpZGRlbiB3aGVuIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kLgorCitXaGVuICdzbycgaXMgOTk5LCAiSiIgbmVhciB0aGUgZW5kIG9mIHRoZSBmaWxlIGRpZG4ndCByZWRpc3BsYXkgY29ycmVjdGx5LgorCisiOjBhIiBpbnNlcnRlZCBhZnRlciB0aGUgZmlyc3QgbGluZSwgaW5zdGVhZCBvZiBiZWZvcmUgdGhlIGZpcnN0IGxpbmUuCisKK1VuaXg6IFdpbGRjYXJkIGV4cGFuc2lvbiBkaWRuJ3QgaGFuZGxlIHNpbmdsZSBxdW90ZXMgYW5kIHt9IHBhdHRlcm5zLiAgTm93CisiOmZpbGUgJ3dpbmRvdy5jJyIgcmVtb3ZlcyB0aGUgcXVvdGVzIGFuZCAiOmUgJ21haW4qLmMnIiB3b3JrcyAobGl0ZXJhbCAnKicpLgorIjpmaWxlIHtvfXtufXtlfSIgbm93IHJlc3VsdHMgaW4gZmlsZSBuYW1lICJvbmUiLgorCitNZW1vcnkgbGVhayB3aGVuIHNldHRpbmcgYSBzdHJpbmcgb3B0aW9uIGJhY2sgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVkVSU0lPTiA1LjMJCQkJCQkqdmVyc2lvbi01LjMqCisKK1ZlcnNpb24gNS4zIHdhcyBhIGJ1Zy1maXggdmVyc2lvbiBvZiA1LjIuICBUaGVyZSBhcmUgbm90IG1hbnkgY2hhbmdlcy4KK0ltcHJvdmVtZW50cyBtYWRlIGJldHdlZW4gdmVyc2lvbiA1LjIgYW5kIDUuMzoKKworQ2hhbmdlZAkJCQkJCQkqY2hhbmdlZC01LjMqCistLS0tLS0tCisKK1JlbmFtZWQgIklERSIgbWVudSB0byAiVG9vbHMiIG1lbnUuCisKKworQWRkZWQJCQkJCQkJKmFkZGVkLTUuMyoKKy0tLS0tCisKK1dpbjMyIEdVSTogR2l2ZSBhIHdhcm5pbmcgd2hlbiBWaW0gaXMgYWN0aXZhdGVkLCBhbmQgb25lIG9mIHRoZSBmaWxlcyBjaGFuZ2VkCitzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQuIChOZWdyaSkKKworCitGaXhlZAkJCQkJCQkqZml4ZWQtNS4zKgorLS0tLS0KKworNS4yLjE6IFdpbjMyIEdVSTogc3BhY2UgZm9yIGV4dGVybmFsIGNvbW1hbmQgd2FzIG5vdCBwcm9wZXJseSBhbGxvY2F0ZWQsIGNvdWxkCitjYXVzZSBhIGNyYXNoLiAoQWFyb24pICBUaGlzIHdhcyB0aGUgcmVhc29uIHRvIGJyaW5nIG91dCA1LjMgcXVpY2tseSBhZnRlcgorNS4yLgorCis1LjIuMjogU29tZSBjb21tYW5kcyBkaWRuJ3QgY29tcGxhaW4gd2hlbiB1c2VkIHdpdGhvdXQgYW4gYXJndW1lbnQsIGFsdGhvdWdoCit0aGV5IG5lZWQgb25lOiAiOmJhZGQiLCAiOmJyb3dzZSIsICI6Y2FsbCIsICI6Y29uZmlybSIsICI6YmVoYXZlIiwKKyI6ZGVsZnVuY3Rpb24iLCAiOmRlbGNvbW1hbmQiIGFuZCAiOnRlYXJvZmYiLgorIjplbmRmdW5jdGlvbiIgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGdhdmUgd3JvbmcgZXJyb3IgbWVzc2FnZTogIkNvbW1hbmQgbm90CitpbXBsZW1lbnRlZCIuICBTaG91bGQgYmUgIjplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iLgorCis1LjIuMzogV2luMzIgR1VJOiBXaGVuIGd2aW0gd2FzIGluc3RhbGxlZCBpbiAiUHJvZ3JhbSBmaWxlcyIsIG9yIGFub3RoZXIgcGF0aAord2l0aCBhIHNwYWNlIGluIGl0LCBleGVjdXRpbmcgZXh0ZXJuYWwgY29tbWFuZHMgd2l0aCB2aW1ydW4gZGlkbid0IHdvcmsuCisKKzUuMi40OiBQYXN0aW5nIHdpdGggdGhlIG1vdXNlIGluIEluc2VydCBtb2RlIGxlZnQgdGhlIGN1cnNvciBvbiB0aGUgbGFzdAorcGFzdGVkIGNoYXJhY3RlciwgaW5zdGVhZCBvZiBiZWhpbmQgaXQuCisKKzUuMi41OiBJbiBJbnNlcnQgbW9kZSwgY3Vyc29yIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxpbmUsIGEgc2hpZnQtY3Vyc29yLWxlZnQKK2RpZG4ndCBpbmNsdWRlIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc2VsZWN0aW9uLgorCis1LjIuNjogV2hlbiBkZWxldGluZyB0ZXh0IGZyb20gSW5zZXJ0IG1vZGUgKHdpdGggIjxDLU8+RCIgb3IgdGhlIG1vdXNlKSwgd2hpY2gKK2luY2x1ZGVzIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgbGluZSwgdGhlIGN1cnNvciBjb3VsZCBiZSBsZWZ0IG9uIHRoZSBsYXN0CitjaGFyYWN0ZXIgaW4gdGhlIGxpbmUsIGluc3RlYWQgb2YganVzdCBhZnRlciBpdC4KKworNS4yLjc6IFdpbjMyIEdVSTogc2Nyb2xsYmFyIHdhcyBvbmUgcGl4ZWwgdG9vIGJpZy4KKworNS4yLjg6IENvbXBsZXRpb24gb2YgIlBvcFVwIiBtZW51IHNob3dlZCB0aGUgZGVyaXZhdGVzICJQb3BVcGMiLCAiUG9wVVBpIiwKK2V0Yy4gICI6bWVudSIgYWxzbyBzaG93ZWQgdGhlc2UuCisKKzUuMi45OiBXaGVuIHVzaW5nIHR3byBpbnB1dCgpIGZ1bmN0aW9ucyBvbiBhIHJvdywgdGhlIHByb21wdCB3b3VsZCBub3QgYmUKK2RyYXduIGluIGNvbHVtbiAwLgorCis1LjIuMTA6IEEgbG9vcCB3aXRoIGlucHV0KCkgY291bGQgbm90IGJlIGJyb2tlbiB3aXRoIENUUkwtQy4KKworNS4yLjExOiAiOmNhbGwgYXNkZiIgYW5kICI6Y2FsbCBhc2RmKCIgZGlkbid0IGdpdmUgYW4gZXJyb3IgbWVzc2FnZS4KKworNS4yLjEyOiBSZWN1cnNpdmVseSB1c2luZyAiOm5vcm1hbCIgY3Jhc2hlcyBWaW0gYWZ0ZXIgYSB3aGlsZS4gIEUuZy46CisiOm1hcCBncSA6bm9ybWFsIGdxPENSPiIKKworNS4yLjEzOiBTeW50YXggaGlnaGxpZ2h0aW5nIHVzZWQgJ2lza2V5d29yZCcgZnJvbSB3cm9uZyBidWZmZXIuICBXaGVuIHVzaW5nCisiOmhlbHAiLCB0aGVuICIvXGsqIiBpbiBhbm90aGVyIHdpbmRvdyB3aXRoICdobHNlYXJjaCcgc2V0LgorCis1LjIuMTQ6IFdoZW4gdXNpbmcgIjpzb3VyY2UiIGZyb20gYSBmdW5jdGlvbiwgZ2xvYmFsIHZhcmlhYmxlcyB3b3VsZCBub3QgYmUKK2F2YWlsYWJsZSB1bmxlc3MgImc6IiB3YXMgdXNlZC4KKworNS4yLjE1OiBYUE0gZmlsZXMgY2FuIGhhdmUgdGhlIGV4dGVuc2lvbiAiLnBtIiwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgZm9yIFBlcmwKK21vZHVsZXMuICBBZGRlZCAic3ludGF4L3BtZmlsZS52aW0iIHRvIGhhbmRsZSB0aGlzLgorCis1LjIuMTY6IE9uIFdpbjMyIGFuZCBBbWlnYSwgImVjaG8gZXhwYW5kKCIlOnA6aCIpIiByZW1vdmVkIG9uZSBkaXJuYW1lIGluIGFuCitlbXB0eSBidWZmZXIuICBtY2hfRnVsbG5hbWUoKSBkaWRuJ3QgYXBwZW5kIGEgc2xhc2ggYXQgdGhlIGVuZCBvZiBhIGRpcmVjdG9yeQorbmFtZS4KKworU2hvdWxkIGluY2x1ZGUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIGluIHRoZSBWaXN1YWwgYXJlYSB3aGVuIHVzaW5nCisnc2VsZWN0aW9uJyAiZXhjbHVzaXZlIi4gIFRoaXMgd2Fzbid0IGRvbmUgZm9yICIlIiwgImUiLCAiRSIsICJ0IiBhbmQgImYiLgorCisiInAgd291bGQgYWx3YXlzIHB1dCByZWdpc3RlciAwLCBpbnN0ZWFkIG9mIHRoZSB1bm5hbWVkIChsYXN0IHVzZWQpIHJlZ2lzdGVyLgorUmV2ZXJzZSB0aGUgY2hhbmdlIHRoYXQgIiJ4IGRvZXNuJ3Qgd3JpdGUgaW4gdGhlIHVubmFtZWQgKGxhc3QgdXNlZCkgcmVnaXN0ZXIuCitJdCB3b3VsZCBhbHdheXMgd3JpdGUgaW4gcmVnaXN0ZXIgMCwgd2hpY2ggaXNuJ3QgdmVyeSB1c2VmdWwuICBVc2UgIi14IGZvciB0aGUKK3Bhc3RlIG1hcHBpbmdzIGluIFZpc3VhbCBtb2RlLgorCitXaGVuIHRoZXJlIGlzIG9uZSBsb25nIGxpbmUgb24gdGhlIHNjcmVlbiwgYW5kICdzaG93Y21kJyBpcyBvZmYsICIwJCIgZGlkbid0CityZWRyYXcgdGhlIHNjcmVlbi4KKworV2luMzIgR1VJOiBXaGVuIHVzaW5nICdtb3VzZWhpZGUnLCB0aGUgcG9pbnRlciB3b3VsZCBmbGlja2VyIHdoZW4gdGhlIGN1cnNvcgorc2hhcGUgaXMgY2hhbmdlZC4gKE5lZ3JpKQorCitXaGVuIGNhbmNlbGxpbmcgVmlzdWFsIG1vZGUsIGFuZCB0aGUgY3Vyc29yIG1vdmVzIHRvIHRoZSBzdGFydCwgdGhlIHdhbnRlZAorY29sdW1uIHdhc24ndCBzZXQsICJrIiBvciAiaiIgbW92ZWQgdG8gdGhlIHdyb25nIGNvbHVtbi4KKworV2hlbiB1c2luZyAiOmJyb3dzZSIgb3IgIjpjb25maXJtIiwgd2FzIGNoZWNraW5nIGZvciBhIGNvbW1lbnQgYW5kIHNlcGFyYXRpbmcKK2Jhciwgd2hpY2ggY2FuIGJyZWFrIHNvbWUgY29tbWFuZHMuCisKK0luY2x1ZGVkIGZpeGVzIGZvciBNYWNpbnRvc2guIChLaWVsaG9ybikKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitWRVJTSU9OIDUuNAkJCQkJCSp2ZXJzaW9uLTUuNCoKKworVmVyc2lvbiA1LjQgYWRkcyBuZXcgZmVhdHVyZXMsIHVzZWZ1bCBjaGFuZ2VzIGFuZCBhIGxvdCBvZiBidWcgZml4ZXMuCisKKworUnVudGltZSBkaXJlY3RvcnkgaW50cm9kdWNlZAkJCQkqbmV3LXJ1bnRpbWUtZGlyKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGlzdHJpYnV0ZWQgcnVudGltZSBmaWxlcyBhcmUgbm93IGluICRWSU1SVU5USU1FLCB0aGUgdXNlciBmaWxlcyBpbiAkVklNLgorWW91IG5vcm1hbGx5IGRvbid0IHNldCAkVklNUlVOVElNRSBidXQgbGV0IFZpbSBmaW5kIGl0LCBieSB1c2luZworJFZJTS92aW17dmVyc2lvbn0sIG9yIHVzZSAkVklNIHdoZW4gdGhhdCBkb2Vzbid0IGV4aXN0LiAgVGhpcyBhbGxvd3MgZm9yCitzZXBhcmF0aW5nIHRoZSB1c2VyIGZpbGVzIGZyb20gdGhlIGRpc3RyaWJ1dGVkIGZpbGVzIGFuZCBtYWtlcyBpdCBtb3JlIGVhc3kgdG8KK3VwZ3JhZGUgdG8gYW5vdGhlciB2ZXJzaW9uLiAgSXQgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byBrZWVwIHR3byB2ZXJzaW9ucyBvZgorVmltIGFyb3VuZCwgZWFjaCB3aXRoIHRoZWlyIG93biBydW50aW1lIGZpbGVzLgorCitJbiB0aGUgVW5peCBkaXN0cmlidXRpb24gdGhlIHJ1bnRpbWUgZmlsZXMgaGF2ZSBiZWVuIG1vdmVkIHRvIHRoZSAicnVudGltZSIKK2RpcmVjdG9yeS4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gY29weSBhbGwgdGhlIHJ1bnRpbWUgZmlsZXMgYXQgb25jZSwKK3dpdGhvdXQgdGhlIG5lZWQgdG8ga25vdyB3aGF0IG5lZWRzIHRvIGJlIGNvcGllZC4KKworVGhlIGFyY2hpdmVzIGZvciBET1MsIFdpbmRvd3MsIEFtaWdhIGFuZCBPUy8yIG5vdyBoYXZlIGFuIGV4dHJhIHRvcC1sZXZlbAorInZpbSIgZGlyZWN0b3J5LiAgVGhpcyBpcyB0byBtYWtlIGNsZWFyIHRoYXQgdXNlci1tb2RpZmllZCBmaWxlcyBzaG91bGQgYmUgcHV0CitoZXJlLiAgVGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBleGVjdXRhYmxlcyBkb2Vzbid0IGhhdmUgJy0nIG9yICcuJworY2hhcmFjdGVycy4gIFRoaXMgYXZvaWRzIHN0cmFuZ2UgZXh0ZW5zaW9ucy4KKworVGhlICRWSU0gYW5kICRWSU1SVU5USU1FIHZhcmlhYmxlcyBhcmUgc2V0IHdoZW4gdGhleSBhcmUgZmlyc3QgdXNlZC4gIFRoaXMKK2FsbG93cyB0aGVtIHRvIGJlIHVzZWQgYnkgUGVybCwgZm9yIGV4YW1wbGUuCisKK1RoZSBydW50aW1lIGZpbGVzIGFyZSBhbHNvIGZvdW5kIGluIGEgZGlyZWN0b3J5IGNhbGxlZCAiJFZJTS9ydW50aW1lIi4gIFRoaXMKK2hlbHBzIHdoZW4gcnVubmluZyBWaW0gYWZ0ZXIganVzdCB1bnBhY2tpbmcgdGhlIHJ1bnRpbWUgYXJjaGl2ZS4gIFdoZW4gdXNpbmcKK2FuIGV4ZWN1dGFibGUgaW4gdGhlICJzcmMiIGRpcmVjdG9yeSwgVmltIGNoZWNrcyBpZiAidmltNTQiIG9yICJydW50aW1lIiBjYW4KK2JlIGFkZGVkIGFmdGVyIHJlbW92aW5nIGl0LiAgVGhpcyBtYWtlIHRoZSBydW50aW1lIGZpbGVzIGJlIGZvdW5kIGp1c3QgYWZ0ZXIKK2NvbXBpbGluZy4KKworQSBkZWZhdWx0IGZvciAkVklNUlVOVElNRSBjYW4gYmUgZ2l2ZW4gaW4gdGhlIFVuaXggTWFrZWZpbGUuICBUaGlzIGlzIHVzZWZ1bAoraWYgJFZJTSBkb2Vzbid0IHBvaW50IHRvIGFib3ZlIHRoZSBydW50aW1lIGRpcmVjdG9yeSBidXQgdG8gZS5nLiwgIi9ldGMvIi4KKworCitGaWxldHlwZSBpbnRyb2R1Y2VkCQkJCQkqbmV3LWZpbGV0eXBlLTUuNCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3ludGF4IGZpbGVzIGFyZSBub3cgbG9hZGVkIHdpdGggdGhlIG5ldyBGaWxlVHlwZSBhdXRvY29tbWFuZC4gIE9sZAorIm15c3ludGF4ZmlsZSIgZmlsZXMgd2lsbCBubyBsb25nZXIgd29yay4gfGZpbGV0eXBlc3wKKworVGhlIHNjcmlwdHMgZm9yIGxvYWRpbmcgc3ludGF4IGhpZ2hsaWdodGluZyBoYXZlIGJlZW4gY2hhbmdlZCB0byB1c2UgdGhlCituZXcgU3ludGF4IGF1dG9jb21tYW5kIGV2ZW50LgorCitUaGlzIGNvbWJpbmF0aW9uIG9mIEZpbGV0eXBlIGFuZCBTeW50YXggZXZlbnRzIGFsbG93cyB0dW5pbmcgdGhlIHN5bnRheAoraGlnaGxpZ2h0aW5nIGEgYml0IG1vcmUsIGFsc28gd2hlbiBzZWxlY3RlZCBmcm9tIHRoZSBTeW50YXggbWVudS4gIFRoZQorRmlsZVR5cGUgYXV0b2NvbW1hbmQgY2FuIGFsc28gYmUgdXNlZCB0byBzZXQgb3B0aW9ucyBhbmQgbWFwcGluZ3Mgc3BlY2lmaWNhbGx5Citmb3IgdGhhdCB0eXBlIG9mIGZpbGUuCisKK1RoZSAiJFZJTVJVTlRJTUUvZmlsZXR5cGUudmltIiBmaWxlIGlzIG5vdCBsb2FkZWQgYXV0b21hdGljYWxseS4gIFRoZQorIjpmaWxldHlwZSBvbiIgY29tbWFuZCBoYXMgYmVlbiBhZGRlZCBmb3IgdGhpcy4gICI6c3ludGF4IG9uIiBhbHNvIGxvYWRzIGl0LgorCitUaGUgJ2ZpbGV0eXBlJyBvcHRpb24gaGFzIGJlZW4gYWRkZWQuICBJdCBpcyB1c2VkIHRvIHRyaWdnZXIgdGhlIEZpbGVUeXBlCithdXRvY29tbWFuZCBldmVudCwgbGlrZSB0aGUgJ3N5bnRheCcgb3B0aW9uIGRvZXMgZm9yIHRoZSBTeW50YXggZXZlbnQuCisKKyI6c2V0IHN5bnRheD1PRkYiIGFuZCAiOnNldCBzeW50YXg9T04iIGNhbiBiZSB1c2VkIChpbiBhIG1vZGVsaW5lKSB0byBzd2l0Y2gKK3N5bnRheCBoaWdobGlnaHRpbmcgb24vb2ZmIGZvciB0aGUgY3VycmVudCBmaWxlLgorCitUaGUgU3ludGF4IG1lbnUgY29tbWFuZHMgaGF2ZSBiZWVuIG1vdmVkIHRvICRWSU1SVU5USU1FL21lbnUudmltLiAgVGhlIFN5bnRheAorbWVudSBpcyBpbmNsdWRlZCBib3RoIHdoZW4gIjpmaWxldHlwZSBvbiIgYW5kIHdoZW4gIjpzeW50YXggbWFudWFsIiBpcyB1c2VkLgorCitSZW5hbWVkIHRoZSBvbGQgJ2ZpbGV0eXBlJyBvcHRpb24gdG8gJ29zZmlsZXR5cGUnLiAgSXQgd2FzIG9ubHkgdXNlZCBmb3IKK1JJU0NPUy4gICdmaWxldHlwZScgaXMgbm93IHVzZWQgZm9yIHRoZSBjb21tb24gZmlsZSB0eXBlLgorCitBZGRlZCB0aGUgIjpzeW50YXggbWFudWFsIiBjb21tYW5kLiAgQWxsb3dzIG1hbnVhbCBzZWxlY3Rpb24gb2YgdGhlIHN5bnRheCB0bworYmUgdXNlZCwgZS5nLiwgZnJvbSBhIG1vZGVsaW5lLgorCisKK1ZpbSBzY3JpcHQgbGluZSBjb250aW51YXRpb24JCQkqbmV3LWxpbmUtY29udGludWF0aW9uKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGFuIEV4IGxpbmUgc3RhcnRzIHdpdGggYSBiYWNrc2xhc2gsIGl0IGlzIGNvbmNhdGVuYXRlZCB0byB0aGUgcHJldmlvdXMKK2xpbmUuICBUaGlzIGF2b2lkcyB0aGUgbmVlZCBmb3IgbG9uZyBsaW5lcy4gfGxpbmUtY29udGludWF0aW9ufCAoUm9lbWVyKQorRXhhbXBsZTogPgorCWlmICAgaGFzKCJkaWFsb2dfY29uIikgfHwKKwkgICBcIGhhcygiZGlhbG9nX2d1aSIpCisJICAgIDpsZXQgcmVzdWx0ID0gY29uZmlybSgiRW50ZXIgeW91ciBjaG9pY2UiLAorCQkJCVwgIiZZZXNcbiZOb1xuJk1heWJlIiwKKwkJCQlcIDIpCisJZW5kaWYKKworCitJbXByb3ZlZCBzZXNzaW9uIGZpbGVzCQkJCSppbXByb3ZlZC1zZXNzaW9ucyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTmV3IHdvcmRzIGZvciAnc2Vzc2lvbm9wdGlvbnMnOgorLSAiaGVscCIJUmVzdG9yZSB0aGUgaGVscCB3aW5kb3cuCistICJibGFuayIJUmVzdG9yZSBlbXB0eSB3aW5kb3dzLgorLSAid2lucG9zIglSZXN0b3JlIHRoZSBWaW0gd2luZG93IHBvc2l0aW9uLiAgVXNlcyB0aGUgbmV3ICI6d2lucG9zIgorCQljb21tYW5kCistICJidWZmZXJzIglSZXN0b3JlIGhpZGRlbiBhbmQgdW5sb2FkZWQgYnVmZmVycy4gIFdpdGhvdXQgaXQgb25seSB0aGUKKwkJYnVmZmVycyBpbiB3aW5kb3dzIGFyZSByZXN0b3JlZC4KKy0gInNsYXNoIglSZXBsYWNlIGJhY2t3YXJkIGJ5IGZvcndhcmQgc2xhc2hlcyBpbiBmaWxlIG5hbWVzLgorLSAiZ2xvYmFscyIJU3RvcmUgZ2xvYmFsIHZhcmlhYmxlcy4KKy0gInVuaXgiCVVzZSB1bml4IGZpbGUgZm9ybWF0ICg8Tkw+IGluc3RlYWQgb2YgPENSPjxOTD4pCisKK1RoZSAiOm1rc2Vzc2lvbiIgYW5kICdzZXNzaW9ub3B0aW9ucycgYXJlIG5vdyBpbiB0aGUgK21rc2Vzc2lvbiBmZWF0dXJlLgorCitUaGUgdG9wIGxpbmUgb2YgdGhlIHdpbmRvdyBpcyBhbHNvIHJlc3RvcmVkIHdoZW4gdXNpbmcgYSBzZXNzaW9uIGZpbGUuCisKKyI6bWtzZXNzaW9uIiBhbmQgIjpta3ZpbXJjIiBkb24ndCBzdG9yZSAnZmlsZWZvcm1hdCcsIGl0IHNob3VsZCBiZSBkZXRlY3RlZAord2hlbiBsb2FkaW5nIGEgZmlsZS4KKworKE1vc3Qgb2YgdGhpcyB3YXMgZG9uZSBieSBWaW5jZSBOZWdyaSBhbmQgUm9iZXJ0IFdlYmIpCisKKworQXV0b2NvbW1hbmRzIGltcHJvdmVkCQkJCSppbXByb3ZlZC1hdXRvY21kcy01LjQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTmV3IGV2ZW50czoKK3xGaWxlVHlwZXwJV2hlbiB0aGUgZmlsZSB0eXBlIGhhcyBiZWVuIGRldGVjdGVkLgorfEZvY3VzR2FpbmVkfAlXaGVuIFZpbSBnb3QgaW5wdXQgZm9jdXMuIChOZWdyaSkKK3xGb2N1c0xvc3R8CVdoZW4gVmltIGxvc3QgaW5wdXQgZm9jdXMuIChOZWdyaSkKK3xCdWZDcmVhdGV8CUNhbGxlZCBqdXN0IGFmdGVyIGEgbmV3IGJ1ZmZlciBoYXMgYmVlbiBjcmVhdGVkIG9yIGhhcyBiZWVuCisJCXJlbmFtZWQuIChNYWRzZW4pCit8Q3Vyc29ySG9sZHwJVHJpZ2dlcmVkIHdoZW4gbm8ga2V5IGhhcyBiZWVuIHR5cGVkIGZvciAndXBkYXRldGltZScuICBDYW4gYmUKKwkJdXNlZCB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yLiAoTmVncmkpCisJCUltcGxlbWVudGVkIEN1cnNvckhvbGQgYXV0b2NvbW1hbmQgZXZlbnQgZm9yIFVuaXguIChaZWxsbmVyKQorCQlBbHNvIGZvciBBbWlnYSBhbmQgTVMtRE9TLgorfEdVSUVudGVyfAlDYW4gYmUgdXNlZCB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUgR1VJIHdpbmRvdyBhZnRlciBpdCBoYXMKKwkJYmVlbiBjcmVhdGVkIChlLmcuLCBhICI6d2lucG9zIDEwMCA1MCIpLgorfEJ1ZkhpZGRlbnwJV2hlbiBhIGJ1ZmZlciBiZWNvbWVzIGhpZGRlbi4gIFVzZWQgdG8gZGVsZXRlIHRoZQorCQlvcHRpb24td2luZG93IHdoZW4gaXQgYmVjb21lcyBoaWRkZW4uCisKK0Fsc28gdHJpZ2dlciB8QnVmRGVsZXRlfCBqdXN0IGJlZm9yZSBhIGJ1ZmZlciBpcyBnb2luZyB0byBiZSByZW5hbWVkLiAoTWFkc2VuKQorCitUaGUgIjxhbWF0Y2g+IiBwYXR0ZXJuIGNhbiBiZSB1c2VkIGxpa2UgIjxhZmlsZT4iIGZvciBhdXRvY29tbWFuZHMsIGV4Y2VwdAordGhhdCBpdCBpcyB0aGUgbWF0Y2hpbmcgdmFsdWUgZm9yIHRoZSBGaWxlVHlwZSBhbmQgU3ludGF4IGV2ZW50cy4KKworV2hlbiAiOmxldCBALyA9IDxzdHJpbmc+IiBpcyB1c2VkIGluIGFuIGF1dG9jb21tYW5kLCB0aGlzIGxhc3Qgc2VhcmNoIHBhdHRlcm4KK3dpbGwgYmUgdXNlZCBhZnRlciB0aGUgYXV0b2NvbW1hbmQgZmluaXNoZXMuCisKK01hZGUgbG9hZGluZyBhdXRvY29tbWFuZHMgYSBiaXQgZmFzdGVyLiAgQXZvaWQgZG9pbmcgc3RybGVuKCkgb24gZWFjaCBleGl0aW5nCitwYXR0ZXJuIGZvciBlYWNoIG5ldyBwYXR0ZXJuIGJ5IHJlbWVtYmVyaW5nIHRoZSBsZW5ndGguCisKKworRW5jcnlwdGlvbgkJCQkJCSpuZXctZW5jcnlwdGlvbioKKy0tLS0tLS0tLS0KKworRmlsZXMgY2FuIGJlIGVuY3J5cHRlZCB3aGVuIHdyaXRpbmcgYW5kIGRlY3J5cHRlZCB3aGVuIHJlYWRpbmcuICBBZGRlZCB0aGUKKydrZXknIG9wdGlvbiwgIi14IiBjb21tYW5kIGxpbmUgYXJndW1lbnQgYW5kICI6WCIgY29tbWFuZC4gfGVuY3J5cHRpb258IChiYXNlZAorb24gcGF0Y2ggZnJvbSBNb2hzaW4gQWhtZWQpCisKK1doZW4gcmVhZGluZyBhIGZpbGUsIHRoZXJlIGlzIGFuIGF1dG9tYXRpYyBkZXRlY3Rpb24gd2hldGhlciBpdCBoYXMgYmVlbgorY3J5cHRlZC4gIFZpbSB3aWxsIHRoZW4gcHJvbXB0IGZvciB0aGUga2V5LgorCitOb3RlIHRoYXQgdGhlIGVuY3J5cHRpb24gbWV0aG9kIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggVmkuICBUaGUgZW5jcnlwdGlvbiBpcworbm90IHVuYnJlYWthYmxlLiAgVGhpcyBhbGxvd3MgaXQgdG8gYmUgZXhwb3J0ZWQgZnJvbSB0aGUgVVMuCisKKworR1RLIEdVSSBwb3J0CQkJCQkJKm5ldy1HVEstR1VJKgorLS0tLS0tLS0tLS0tCisKK05ldyBHVUkgcG9ydCBmb3IgR1RLKy4gIEluY2x1ZGVzIGEgdG9vbGJhciwgbWVudSB0ZWFyb2ZmcywgZXRjLiB8Z3VpLWd0a3wKK0FkZGVkIHRoZSB8OmhlbHBmaW5kfCBjb21tYW5kLiAoS2FobiBhbmQgRGFsZWNraSkKKworCitNZW51IGNoYW5nZXMJCQkJCQkqbWVudS1jaGFuZ2VzLTUuNCoKKy0tLS0tLS0tLS0tLQorCitNZW51cyBjYW4gbm93IGFsc28gYmUgdXNlZCBpbiB0aGUgY29uc29sZS4gIEl0IGlzIGVuYWJsZWQgYnkgdGhlIG5ldworJ3dpbGRtZW51JyBvcHRpb24uICBUaGlzIHNob3dzIG1hdGNoZXMgZm9yIGNvbW1hbmQtbGluZSBjb21wbGV0aW9uIGxpa2UgYQorbWVudS4gIFRoaXMgd29ya3MgYXMgYSBtaW5pbWFsIGZpbGUgYnJvd3Nlci4KKworVGhlIG5ldyB8OmVtZW51fCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGV4ZWN1dGUgYSBtZW51IGl0ZW0uCisKK1VzZXMgdGhlIGxhc3Qgc3RhdHVzIGxpbmUgdG8gbGlzdCBpdGVtcywgb3IgaW5zZXJ0cyBhIGxpbmUganVzdCBhYm92ZSB0aGUKK2NvbW1hbmQgbGluZS4gIChOZWdyaSkKKworVGhlICd3aWxkY2hhcngnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byB0cmlnZ2VyICd3aWxkbWVudScgY29tcGxldGlvbiBmcm9tIGEKK21hcHBpbmcuCisKK1doZW4gY29tcGlsZWQgd2l0aG91dCBtZW51cywgdGhpcyBjYW4gYmUgZGV0ZWN0ZWQgd2l0aCBoYXMoIm1lbnUiKS4gIEFsc28gc2hvdwordGhpcyBpbiB0aGUgIjp2ZXJzaW9uIiBvdXRwdXQuICBBbGxvdyBjb21waWxpbmcgR1VJIHZlcnNpb25zIHdpdGhvdXQgbWVudQorc3VwcG9ydC4gIE9ubHkgaW5jbHVkZSB0b29sYmFyIHN1cHBvcnQgd2hlbiB0aGVyZSBpcyBtZW51IHN1cHBvcnQuCisKK01vdmVkIHRoZSAiV2luZG93IiBtZW51IGFsbCB0aGUgd2F5IHRvIHRoZSByaWdodCAocHJpb3JpdHkgNzApLiAgTG9va3MgbW9yZQorZmFtaWxpYXIgZm9yIHBlb3BsZSB3b3JraW5nIHdpdGggTVMtV2luZG93cywgc2hvdWxkbid0IG1hdHRlciBmb3Igb3RoZXJzLgorCitJbmNsdWRlZCAiQnVmZmVycyIgbWVudS4gIFdvcmtzIHdpdGggZXhpc3RpbmcgYXV0b2NvbW1hbmRzIGFuZCBmdW5jdGlvbnMuICBJdAorY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhlICJub19idWZmZXJzX21lbnUiIHZhcmlhYmxlLiAgKEFhcm9uIGFuZCBNYWRzZW4pCisKK1dpbjMyIHN1cHBvcnRzIHNlcGFyYXRvcnMgaW4gYSBtZW51OiAiLS4qLSIuIChHZWRkZXMpCitNZW51IHNlcGFyYXRvcnMgZm9yIE1vdGlmIG5vdyB3b3JrIHRvby4KKworTWFkZSBQb3B1cCBtZW51IGZvciBNb3RpZiBHVUkgd29yay4gKE1hZHNlbikKKworJ00nIGZsYWcgaW4gJ2d1aW9wdGlvbnMnOiBEb24ndCBzb3VyY2UgdGhlIHN5c3RlbSBtZW51LgorCitBbGwgdGhlIG1lbnUgY29kZSBoYXMgYmVlbiBtb3ZlZCBmcm9tIGd1aS5jIHRvIG1lbnUuYy4KKworCitWaW1pbmZvIGltcHJvdmVkCQkJCQkqaW1wcm92ZWQtdmltaW5mbyoKKy0tLS0tLS0tLS0tLS0tLS0KKworTmV3IGZsYWdzIGZvciAndmltaW5mbyc6CisnIScJU3RvcmUgZ2xvYmFsIHZhcmlhYmxlcyBpbiB0aGUgdmltaW5mbyBmaWxlIGlmIHRoZXkgYXJlIGluIHVwcGVyY2FzZQorCWxldHRlcnMuIChOZWdyaSkKKydoJwlEbyAiOm5vaGxzZWFyY2giIHdoZW4gbG9hZGluZyBhIHZpbWluZm8gZmlsZS4KKworU3RvcmUgc2VhcmNoIHBhdHRlcm5zIGluIHRoZSB2aW1pbmZvIGZpbGUgd2l0aCB0aGVpciBvZmZzZXQsIG1hZ2ljLCBldGMuICBBbHNvCitzdG9yZSB0aGUgZmxhZyB3aGV0aGVyICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIGlzIG9uIG9yIG9mZiAod2hpY2ggaXMgbm90IHVzZWQKK2lmIHRoZSAnaCcgZmxhZyBpcyBpbiAndmltaW5mbycpLgorCitHaXZlIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBzZXR0aW5nICd2aW1pbmZvJyB3aXRob3V0IGNvbW1hcy4KKworCitWYXJpb3VzIG5ldyBjb21tYW5kcwkJCQkJKm5ldy1jb21tYW5kcy01LjQqCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPcGVyYXRvciB8Zz98OiByb3QxMyBlbmNvZGluZy4gKE5lZ3JpKQorCit8ekh8IGFuZCB8ekx8IGNvbW1hbmRzOiBIb3Jpem9udGFsIHNjcm9sbGluZyBieSBoYWxmIGEgcGFnZS4KK3xnbXwgbW92ZSBjdXJzb3IgdG8gbWlkZGxlIG9mIHNjcmVlbiBsaW5lLiAoSWRlYXMgYnkgQ2FtcGJlbGwpCisKK09wZXJhdGlvbnMgb24gVmlzdWFsIGJsb2NrczogfHZfYl9JfCwgfHZfYl9BfCwgfHZfYl9jfCwgfHZfYl9DfCwgfHZfYl9yfCwKK3x2X2JfPHwgYW5kIHx2X2JfPnwuIChLZWxseSkKKworTmV3IGNvbW1hbmQ6IENUUkwtXCBDVFJMLU4sIHdoaWNoIGRvZXMgbm90aGluZyBpbiBOb3JtYWwgbW9kZSwgYW5kIGdvZXMgdG8KK05vcm1hbCBtb2RlIHdoZW4gaW4gSW5zZXJ0IG9yIENvbW1hbmQtbGluZSBtb2RlLiAgQ2FuIGJlIHVzZWQgYnkgVmlzVmltIG9yCitvdGhlciBPTEUgcHJvZ3JhbXMgdG8gbWFrZSBzdXJlIFZpbSBpcyBpbiBOb3JtYWwgbW9kZSwgd2l0aG91dCBjYXVzaW5nIGEgYmVlcC4KK3xDVFJMLVxfQ1RSTC1OfAorCisiOmNzY29wZSBraWxsIiBjb21tYW5kIHRvIHVzZSB0aGUgY29ubmVjdGlvbiBmaWxlbmFtZS4gfDpjc2NvcGV8IChLYWhuKQorCit8OnN0YXJ0aW5zZXJ0fCBjb21tYW5kOiBTdGFydCBJbnNlcnQgbW9kZSBuZXh0LgorCit8Omhpc3Rvcnl8IGNvbW1hbmQsIHRvIHNob3cgYWxsIGZvdXIgdHlwZXMgb2YgaGlzdG9yaWVzLiAoUm9lbWVyKQorCit8W218LCB8W018LCB8XW18IGFuZCB8XU18IGNvbW1hbmRzLCBmb3IganVtcGluZyBiYWNrd2FyZC9mb3J3YXJkIHRvIHN0YXJ0L2VuZAorb2YgbWV0aG9kIGluIGEgKEphdmEpIGNsYXNzLgorCisiOkAqIiBleGVjdXRlcyB0aGUgKiByZWdpc3Rlci4gfDpAfCAoQWNldmVkbykKKworfGdvfCBhbmQgfDpnb3RvfCBjb21tYW5kczogSnVtcCB0byBieXRlIG9mZnNldCBpbiB0aGUgZmlsZS4KKworfGdSfCBhbmQgfGdyfCBjb21tYW5kOiBWaXJ0dWFsIFJlcGxhY2UgbW9kZS4gIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRob3V0CitjaGFuZ2luZyB0aGUgbGF5b3V0LiAoV2ViYikKKworIjpjZCAtIiBjaGFuZ2VzIHRvIHRoZSBkaXJlY3RvcnkgZnJvbSBiZWZvcmUgdGhlIHByZXZpb3VzICI6Y2QiIGNvbW1hbmQuCit8OmNkLXwgKFdlYmIpCisKK1RhZyBwcmV2aWV3IGNvbW1hbmRzIHw6cHRhZ3wuICBTaG93cyB0aGUgcmVzdWx0IG9mIGEgIjp0YWciIGluIGEgZGVkaWNhdGVkCit3aW5kb3cuICBDYW4gYmUgdXNlZCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlIHRhZyAoZS5nLiwgZnVuY3Rpb24gYXJndW1lbnRzKS4KKyhOZWdyaSkKK3w6cGNsb3NlfCBjb21tYW5kLCBhbmQgQ1RSTC1XIENUUkwtWjogQ2xvc2UgcHJldmlldyB3aW5kb3cuIChNb29yZSkKKydwcmV2aWV3aGVpZ2h0JyBvcHRpb24sIGhlaWdodCBmb3IgdGhlIHByZXZpZXcgd2luZG93LgorQWxzbyB8OnBwb3B8LCB8OnB0bmV4dHwsIHw6cHRwcmV2aW91c3wsIHw6cHROZXh0fCwgfDpwdHJld2luZHwsIHw6cHRsYXN0fC4KKworfDpmaW5kfCBhbmQgfDpzZmluZHwgY29tbWFuZHM6IEZpbmQgYSBmaWxlIGluICdwYXRoJywgKHNwbGl0IHdpbmRvdykgYW5kIGVkaXQKK2l0LgorCitUaGUgfDpvcHRpb25zfCBjb21tYW5kIG9wZW5zIGFuIG9wdGlvbiB3aW5kb3cgdGhhdCBzaG93cyB0aGUgY3VycmVudCBvcHRpb24KK3ZhbHVlcy4gIE9yIHVzZSAiOmJyb3dzZSBzZXQiIHRvIG9wZW4gaXQuICBPcHRpb25zIGFyZSBncm91cGVkIGJ5IGZ1bmN0aW9uLgorT2ZmZXJzIHNob3J0IGhlbHAgb24gZWFjaCBvcHRpb24uICBIaXQgPENSPiB0byBqdW1wIHRvIG1vcmUgaGVscC4gIEVkaXQgdGhlCitvcHRpb24gdmFsdWUgYW5kIGhpdCA8Q1I+IG9uIGEgInNldCIgbGluZSB0byBzZXQgYSBuZXcgdmFsdWUuCisKKworVmFyaW91cyBuZXcgb3B0aW9ucwkJCQkJKm5ldy1vcHRpb25zLTUuNCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2Nyb2xsLWJpbmRpbmc6ICdzY3JvbGxiaW5kJyBhbmQgJ3Njcm9sbG9wdCcgb3B0aW9ucy4gIEFkZGVkIHw6c3luY2JpbmR8Citjb21tYW5kLiAgTWFrZXMgd2luZG93cyBzY3JvbGwgdGhlIHNhbWUgYW1vdW50IChob3Jpem9udGFsbHkgYW5kL29yCit2ZXJ0aWNhbGx5KS4gKFJhbHN0b24pCisKKydjb25za2V5JyBvcHRpb24gZm9yIE1TLURPUy4gIFVzZSBkaXJlY3QgY29uc29sZSBJL08uICBUaGlzIHNob3VsZCB3b3JrIHdpdGgKK3RlbG5ldCAodW50ZXN0ZWQhKS4KKworJ3N0YXR1c2xpbmUnIG9wdGlvbjogQ29uZmlndXJhYmxlIGNvbnRlbnRzIG9mIHRoZSBzdGF0dXMgbGluZS4gIEFsc28gYWxsb3dzCitzaG93aW5nIHRoZSBieXRlIG9mZnNldCBpbiB0aGUgZmlsZS4gIEhpZ2hsaWdodGluZyB3aXRoICUxKiB0byAlOSosIHVzaW5nIHRoZQorbmV3IGhpZ2hsaWdodCBncm91cHMgVXNlcjEgdG8gVXNlcjkuICAoTWFkc2VuKQorCisncnVsZXJmb3JtYXQnIG9wdGlvbjogQ29uZmlndXJhYmxlIGNvbnRlbnRzIG9mIHRoZSBydWxlciwgbGlrZSAnc3RhdHVzbGluZScuCisoTWFkc2VuKQorCisnd3JpdGUnIG9wdGlvbjogV2hlbiBvZmYsIHdyaXRpbmcgZmlsZXMgaXMgbm90IGFsbG93ZWQuICBBdm9pZHMgb3ZlcndyaXRpbmcgYQorZmlsZSBldmVuIHdpdGggIjp3ISIuICBUaGUgfC1tfCBjb21tYW5kIGxpbmUgb3B0aW9uIHJlc2V0cyAnd3JpdGUnLgorCisnY2xpcGJvYXJkJyBvcHRpb246IEhvdyB0aGUgY2xpcGJvYXJkIGlzIHVzZWQuICBWYWx1ZSAidW5uYW1lZCI6IFVzZSB1bm5hbWVkCityZWdpc3RlciBsaWtlICIqLiAoQ29ydG9wYXNzaSkgIFZhbHVlICJhdXRvc2VsZWN0IjogTGlrZSB3aGF0ICdhJyBpbgorJ2d1aW9wdGlvbnMnIGRvZXMgYnV0IHdvcmtzIGluIHRoZSB0ZXJtaW5hbC4KKworJ2d1aWZvbnRzZXQnIG9wdGlvbjogU3BlY2lmeSBmb250cyBmb3IgdGhlICtmb250c2V0IGZlYXR1cmUsIGZvciB0aGUgWDExIEdVSQordmVyc2lvbnMuICBBbGxvd3MgdXNpbmcgbm9ybWFsIGZvbnRzIHdoZW4gdmltIGlzIGNvbXBpbGVkIHdpdGggdGhpcyBmZWF0dXJlLgorKE5hbSkKKworJ2d1aWhlYWRyb29tJyBvcHRpb246IEhvdyBtdWNoIHJvb20gdG8gYWxsb3cgYWJvdmUvYmVsb3cgdGhlIEdVSSB3aW5kb3cuCitVc2VkIGZvciBNb3RpZiwgQXRoZW5hIGFuZCBHVEsuCisKK0ltcGxlbWVudGVkICd0YWdzdGFjaycgb3B0aW9uOiBXaGVuIG9mZiwgcHVzaGluZyB0YWdzIG9udG8gdGhlIHN0YWNrIGlzCitkaXNhYmxlZCAoVmkgY29tcGF0aWJsZSkuICBVc2VmdWwgZm9yIG1hcHBpbmdzLgorCisnc2hlbGxzbGFzaCcgb3B0aW9uLiAgT25seSBmb3Igc3lzdGVtcyB0aGF0IHVzZSBhIGJhY2tzbGFzaCBhcyBhIGZpbGUKK3NlcGFyYXRvci4gIFRoaXMgb3B0aW9uIHdpbGwgdXNlIGEgZm9yd2FyZCBzbGFzaCBpbiBmaWxlIG5hbWVzIHdoZW4gZXhwYW5kaW5nCitpdC4gIFVzZWZ1bCB3aGVuICdzaGVsbCcgaXMgc2ggb3IgY3NoLgorCisncGFzdGV0b2dnbGUnIG9wdGlvbjogS2V5IHNlcXVlbmNlIHRoYXQgdG9nZ2xlcyAncGFzdGUnLiAgV29ya3MgYXJvdW5kIHRoZQorcHJvYmxlbSB0aGF0IG1hcHBpbmdzIGRvbid0IHdvcmsgaW4gSW5zZXJ0IG1vZGUgd2hlbiAncGFzdGUnIGlzIHNldC4KKworJ2Rpc3BsYXknIG9wdGlvbjogV2hlbiBzZXQgdG8gImxhc3RsaW5lIiwgdGhlIGxhc3QgbGluZSBmaWxscyB0aGUgd2luZG93LAoraW5zdGVhZCBvZiBiZWluZyByZXBsYWNlZCB3aXRoICJAIiBsaW5lcy4gIE9ubHkgdGhlIGxhc3QgdGhyZWUgY2hhcmFjdGVycyBhcmUKK3JlcGxhY2VkIHdpdGggIkBAQCIsIHRvIGluZGljYXRlIHRoYXQgdGhlIGxpbmUgaGFzIG5vdCBmaW5pc2hlZCB5ZXQuCisKKydzd2l0Y2hidWYnIG9wdGlvbjogQWxsb3dzIHJlLXVzaW5nIGV4aXN0aW5nIHdpbmRvd3Mgb24gYSBidWZmZXIgdGhhdCBpcyBiZWluZworanVtcGVkIHRvLCBvciBzcGxpdCB0aGUgd2luZG93IHRvIG9wZW4gYSBuZXcgYnVmZmVyLiAoUm9lbWVyKQorCisndGl0bGVvbGQnIG9wdGlvbi4gIFJlcGxhY2VzIHRoZSBmaXhlZCBzdHJpbmcgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIsIHdoaWNoCitpcyB1c2VkIHRvIHNldCB0aGUgdGl0bGUgd2hlbiBleGl0aW5nLiAoU2NoaWxkKQorCisKK1ZpbSBzY3JpcHRzCQkJCQkJKm5ldy1zY3JpcHQtNS40KgorLS0tLS0tLS0tLS0KKworVGhlIHxleGlzdHMoKXwgZnVuY3Rpb24gY2FuIGFsc28gY2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiBhIGZ1bmN0aW9uLiAoUm9lbWVyKQorQW4gaW50ZXJuYWwgZnVuY3Rpb24gaXMgbm93IGZvdW5kIHdpdGggYSBiaW5hcnkgc2VhcmNoLCBzaG91bGQgYmUgYSBiaXQKK2Zhc3Rlci4gKFJvZW1lcikKKworTmV3IGZ1bmN0aW9uczoKKy0gfGdldHdpbnBvc3goKXwgYW5kIHxnZXR3aW5wb3N5KCl8OiBnZXQgVmltIHdpbmRvdyBwb3NpdGlvbi4gKFdlYmIpCistIHxoaXN0bnIoKXwsIHxoaXN0YWRkKCl8LCB8aGlzdGdldCgpfCBhbmQgfGhpc3RkZWwoKXw6IE1ha2UgaGlzdG9yeQorICBhdmFpbGFibGUuIChSb2VtZXIpCistIHxtYXBhcmcoKXw6IFJldHVybnMgcmhzIG9mIGEgbWFwcGluZy4gIEJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBWaWthcy4KKy0gfG1hcGNoZWNrKCl8OiBDaGVjayBpZiBhIG1hcCBuYW1lIG1hdGNoZXMgd2l0aCBhbiBleGlzdGluZyBvbmUuCistIHx2aXN1YWxtb2RlKCl8OiBSZXR1cm4gdHlwZSBvZiBsYXN0IFZpc3VhbCBtb2RlLiAoV2ViYikKKy0gfGxpYmNhbGwoKXw6IENhbGwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkuICBDdXJyZW50bHkgb25seSBmb3IgV2luMzIuIChOZWdyaSkKKy0gfGJ1Zndpbm5yKCl8OiBmaW5kIHdpbmRvdyB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgYnVmZmVyLiAoUm9lbWVyKQorLSB8YnVmbG9hZGVkKCl8OiBXaGV0aGVyIGEgYnVmZmVyIGV4aXN0cyBhbmQgaXMgbG9hZGVkLgorLSB8bG9jYWx0aW1lKCl8IGFuZCB8Z2V0ZnRpbWUoKXw6IHdhbGwgY2xvY2sgdGltZSBhbmQgbGFzdCBtb2RpZmljYXRpb24gdGltZQorICBvZiBhIGZpbGUgKFdlYmIpCistIHxnbG9iKCl8OiBleHBhbmQgZmlsZSBuYW1lIHdpbGRjYXJkcyBvbmx5LgorLSB8c3lzdGVtKCl8OiBnZXQgdGhlIHJhdyBvdXRwdXQgb2YgYW4gZXh0ZXJuYWwgY29tbWFuZC4gKGJhc2VkIG9uIGEgcGF0Y2gKKyAgZnJvbSBBYXJvbikuCistIHxzdHJ0cmFucygpfDogVHJhbnNsYXRlIFN0cmluZyBpbnRvIHByaW50YWJsZSBjaGFyYWN0ZXJzLiAgVXNlZCBmb3IKKyAgMmh0bWwudmltIHNjcmlwdC4KKy0gfGFwcGVuZCgpfDogZWFzeSB3YXkgdG8gYXBwZW5kIGEgbGluZSBvZiB0ZXh0IGluIGEgYnVmZmVyLgorCitDaGFuZ2VkIGZ1bmN0aW9uczoKKy0gT3B0aW9uYWwgYXJndW1lbnQgdG8gfHN0cmZ0aW1lKCl8IHRvIGdpdmUgdGhlIHRpbWUgaW4gc2Vjb25kcy4gKFdlYmIpCistIHxleHBhbmQoKXwgbm93IGFsc28gcmV0dXJucyBuYW1lcyBmb3IgZmlsZXMgdGhhdCBkb24ndCBleGlzdC4KKworQWxsb3cgbnVtYmVycyBpbiB0aGUgbmFtZSBvZiBhIHVzZXIgY29tbWFuZC4gKFdlYmIpCisKK1VzZSAidjoiIGZvciBpbnRlcm5hbCBWaW0gdmFyaWFibGVzOiAidjplcnJtc2ciLCAidjpzaGVsbF9lcnJvciIsIGV0Yy4gIFRoZQorb25lcyBmcm9tIHZlcnNpb24gNS4zIGNhbiBiZSB1c2VkIHdpdGhvdXQgInY6IiB0b28sIGZvciBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHkuCisKK05ldyB2YXJpYWJsZXM6Cisidjp3YXJuaW5nbXNnIiBhbmQgInY6c3RhdHVzbXNnIiBpbnRlcm5hbCB2YXJpYWJsZXMuICBDb250YWluIHRoZSBsYXN0IGdpdmVuCit3YXJuaW5nIGFuZCBzdGF0dXMgbWVzc2FnZS4gfHY6d2FybmluZ21zZ3wgfHY6c3RhdHVzbXNnfCAoTWFkc2VuKQorInY6Y291bnQxIiB2YXJpYWJsZTogbGlrZSAidjpjb3VudCIsIGJ1dCBkZWZhdWx0cyB0byBvbmUgd2hlbiBubyBjb3VudCBpcwordXNlZC4gfHY6Y291bnQxfAorCitXaGVuIGNvbXBpbGluZyB3aXRob3V0IGV4cHJlc3Npb24gZXZhbHVhdGlvbiwgImlmIDEiIGNhbiBiZSB1c2VkIGFyb3VuZCB0aGUKK25vdCBzdXBwb3J0ZWQgY29tbWFuZHMgdG8gYXZvaWQgaXQgYmVpbmcgZXhlY3V0ZWQuICBXb3JrcyBsaWtlIGluIFZpbSA0LnguCitTb21lIG9mIHRoZSBydW50aW1lIHNjcmlwdHMgZ2F2ZSBlcnJvcnMgd2hlbiB1c2VkIHdpdGggYSBWaW0gdGhhdCB3YXMgY29tcGlsZWQKK3dpdGggbWluaW1hbCBmZWF0dXJlcy4gIE5vdyAiaWYgMSIgaXMgdXNlZCBhcm91bmQgY29kZSB0aGF0IGlzIG5vdCBhbHdheXMKK3N1cHBvcnRlZC4KKworV2hlbiBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gd2l0aCAmJiBhbmQgfHwsIHNraXAgdGhlIHBhcnRzIHRoYXQgd2lsbCBub3QKK2luZmx1ZW5jZSB0aGUgb3V0Y29tZS4gIFRoaXMgbWFrZXMgaXQgZmFzdGVyIGFuZCBhdm9pZHMgZXJyb3IgbWVzc2FnZXMuIChXZWJiKQorQWxzbyBvcHRpbWl6ZWQgdGhlIHNraXBwaW5nIG9mIGV4cHJlc3Npb25zIGluc2lkZSBhbiAiaWYgMCIuCisKKworQXZvaWQgaGl0LWVudGVyIHByb21wdAkJCQkJKmF2b2lkLWhpdC1lbnRlcioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGVkICdUJyBmbGFnIHRvICdzaG9ydG1lc3MnOiBUcnVuY2F0ZSBhbGwgbWVzc2FnZXMgdGhhdCB3b3VsZCBjYXVzZSB0aGUKK2hpdC1lbnRlciBwcm9tcHQgKHVubGVzcyB0aGF0IHdvdWxkIGhhcHBlbiBhbnl3YXkpLgorVGhlICdPJyBmbGFnIGluICdzaG9ydG1lc3MnIG5vdyBhbHNvIGFwcGxpZXMgdG8gcXVpY2tmaXggbWVzc2FnZXMsIGUuZy4sIGZyb20KK3RoZSAiOmNuIiBjb21tYW5kLgorCitUaGUgZGVmYXVsdCBmb3IgJ3Nob3J0bWVzcycgaXMgbm93ICJmaWxueHRUb08iLCB0byBtYWtlIG1vc3QgbWVzc2FnZXMgZml0IG9uCit0aGUgY29tbWFuZCBsaW5lLCBhbmQgbm90IGNhdXNlIHRoZSBoaXQtZW50ZXIgcHJvbXB0LgorCitQcmV2aW91cyBtZXNzYWdlcyBjYW4gYmUgdmlld2VkIHdpdGggdGhlIG5ldyB8Om1lc3NhZ2VzfCBjb21tYW5kLgorCitTb21lIG1lc3NhZ2VzIGFyZSBzaG93biBmdWxseSwgZXZlbiB3aGVuICdzaG9ydG1lc3MnIHRlbGxzIHRvIHNob3J0ZW4KK21lc3NhZ2VzLCBiZWNhdXNlIHRoZSB1c2VyIGlzIGV4cGVjdGVkIHRvIHdhbnQgdG8gc2VlIHRoZW0gaW4gZnVsbDogQ1RSTC1HIGFuZAorc29tZSBxdWlja2ZpeCBjb21tYW5kcy4KKworCitJbXByb3ZlZCBxdWlja2ZpeAkJCQkJKmltcHJvdmVkLXF1aWNrZml4KgorLS0tLS0tLS0tLS0tLS0tLS0KKworUGFyc2UgY2hhbmdlLWRpcmVjdG9yeSBsaW5lcyBmb3IgZ21ha2U6ICJtYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgJ25hbWUnIi4KK1VzZXMgIiVEIiBhbmQgIiVYIiBpbiAnZXJyb3Jmb3JtYXQnLgorQWxzbyBwYXJzZSAiTWFraW5nIHt0YXJnZXR9IGluIHtkaXJ9IiBtZXNzYWdlcyBmcm9tIG1ha2UuICBIZWxwcyB3aGVuIG5vdAordXNpbmcgR05VIG1ha2UuIChTY2hhbmRsKQorCitVc2UgJ2lzZm5hbWUnIGZvciAiJWYiIGluICdlcnJvcmZvcm1hdCcuCisKK1BhcnNpbmcgb2YgbXVsdGktbGluZSBtZXNzYWdlcy4gfGVycm9yZm9ybWF0LW11bHRpLWxpbmV8CisKK0FsbG93IGEgcmFuZ2UgZm9yIHRoZSB8OmNsaXN0fCBjb21tYW5kLiAoUm9lbWVyKQorCitTdXBwb3J0IGZvciAiZ2xvYmFsIiBmaWxlIG5hbWVzLCBmb3IgZXJyb3IgZm9ybWF0cyB0aGF0IG91dHB1dCB0aGUgZmlsZSBuYW1lCitvbmNlIGZvciBzZXZlcmFsIGVycm9ycy4gKFJvZW1lcikKKworfDpjbmZpbGV8IGp1bXBzIHRvIGZpcnN0IGVycm9yIGluIG5leHQgZmlsZS4KKworIiQqIiBpbiAnbWFrZXByZycgaXMgcmVwbGFjZWQgYnkgYXJndW1lbnRzIHRvICI6bWFrZSIuIChSb2VtZXIpCisKKworUmVndWxhciBleHByZXNzaW9ucwkJCQkJKnJlZ2V4cC1jaGFuZ2VzLTUuNCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gYSByZWdleHAsIGEgJyQnIGJlZm9yZSAiXCkiIGlzIGFsc28gY29uc2lkZXJlZCB0byBiZSBhbiBlbmQtb2YtbGluZS4gfC8kfAorSW4gcGF0dGVybnMgIl4iIGFmdGVyICJcfCIgb3IgIlwoIiBpcyBhIHN0YXJ0LW9mLWxpbmUuIHwvXnwgKFJvYmluc29uKQorCitJbiBhIHJlZ2V4cCwgaW4gZnJvbnQgb2YgIlwpIiBhbmQgIlx8IiBib3RoICIkIiBhbmQgIlwkIiB3ZXJlIGNvbnNpZGVyZWQKK2VuZC1vZi1saW5lLiAgTm93IHVzZSAiJCIgYXMgZW5kLW9mLWxpbmUgYW5kICJcJCIgZm9yIGEgbGl0ZXJhbCBkb2xsYXIuICBTYW1lCitmb3IgJ14nIGFmdGVyICJcKCIgYW5kICJcfCIuIHwvXCR8IHwvXF58CisKK1NvbWUgc2VhcmNoIHBhdHRlcm5zIGNhbiBiZSBleHRyZW1lbHkgc2xvdywgZXZlbiB0aG91Z2ggdGhleSBhcmUgbm90IHJlYWxseQoraWxsZWdhbC4gIEZvciBleGFtcGxlOiAiXChbXmEtel1cK1wpXCtRIi4gIEFsbG93IGludGVycnVwdGluZyBhbnkgcmVnZXhwCitzZWFyY2ggd2l0aCBDVFJMLUMuCisKK1JlZ2lzdGVyICIvOiBsYXN0IHNlYXJjaCBzdHJpbmcgKHJlYWQtb25seSkuIChLb2hhbikgIENoYW5nZWQgdG8gdXNlIGxhc3QgdXNlZAorc2VhcmNoIHBhdHRlcm4gKGxpa2Ugd2hhdCAnaGxzZWFyY2gnIHVzZXMpLiAgQ2FuIHNldCB0aGUgc2VhcmNoIHBhdHRlcm4gd2l0aAorIjpsZXQgQC8gPSB7ZXhwcn0iLgorCitBZGRlZCBjaGFyYWN0ZXIgY2xhc3NlcyB0byBzZWFyY2ggcGF0dGVybnMsIHRvIGF2b2lkIHRoZSBuZWVkIGZvciByZW1vdmluZyB0aGUKKydsJyBmbGFnIGZyb20gJ2Nwb3B0aW9ucyc6IHxbOnRhYjpdfCwgfFs6cmV0dXJuOl18LCB8WzpiYWNrc3BhY2U6XXwgYW5kCit8Wzplc2NhcGU6XXwuCisKK0J5IGFkZGluZyBhICc/JyBhZnRlciBhIGNvbXBhcmF0aXZlIG9wZXJhdG9yIGluIGFuIGV4cHJlc3Npb24sIHRoZSBjb21wYXJpc29uCitpcyBkb25lIGJ5IGlnbm9yaW5nIGNhc2UuIHxleHByLT09P3wKKworCitPdGhlciBpbXByb3ZlbWVudHMgbWFkZSBiZXR3ZWVuIHZlcnNpb24gNS4zIGFuZCA1LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VkCQkJCQkJCSpjaGFuZ2VkLTUuNCoKKy0tLS0tLS0KKworVW5peDogVXNlICRUTVBESVIgZm9yIHRlbXBvcmFyeSBmaWxlcywgaWYgaXQgaXMgc2V0IGFuZCBleGlzdHMuCisKK1JlbW92ZWQgIkVtcHR5IGJ1ZmZlciIgbWVzc2FnZS4gIEl0IGlzbid0IHVzZWZ1bCBhbmQgY2FuIGNhdXNlIGEgaGl0LWVudGVyCitwcm9tcHQuIChOZWdyaSkKKworImV4IC0iIG5vdyByZWFkcyBjb21tYW5kcyBmcm9tIHN0ZGluIGFuZCB3b3JrcyBpbiBzaWxlbnQgbW9kZS4gIFRoaXMgaXMgdG8gYmUKK2NvbXBhdGlibGUgd2l0aCB0aGUgb3JpZ2luYWwgImV4IiBjb21tYW5kIHRoYXQgaXMgdXNlZCBmb3Igc2NyaXB0cy4KKworRGVmYXVsdCByYW5nZSBmb3IgIjp0Y2xkbyIgaXMgdGhlIHdob2xlIGZpbGUuCisKK0NhbmNlbGxpbmcgVmlzdWFsIG1vZGUgd2l0aCBFU0MgbW92ZWQgdGhlIGN1cnNvci4gIFRoZXJlIGFwcGVhcnMgdG8gYmUgbm8KK3JlYXNvbiBmb3IgdGhpcy4gIE5vdyBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IGlzLgorCitUaGUgIjpncmVwIiBhbmQgIjptYWtlIiBjb21tYW5kcyBzZWUgIiBhcyBwYXJ0IG9mIHRoZSBhcmd1bWVudHMsIGluc3RlYWQgb2YKK3RoZSBzdGFydCBvZiBhIGNvbW1lbnQuCisKK0luIGV4cHJlc3Npb25zIHRoZSAiPX4iIGFuZCAiIX4iIG9wZXJhdG9ycyBubyBsb25nZXIgYXJlIGFmZmVjdGVkIGJ5CisnaWdub3JlY2FzZScuCisKK1JlbmFtZWQgdmltcmNfZXhhbXBsZSB0byB2aW1yY19leGFtcGxlLnZpbSBhbmQgZ3ZpbXJjX2V4YW1wbGUgdG8KK2d2aW1yY19leGFtcGxlLnZpbS4gIE1ha2VzIHRoZW0gYmVpbmcgcmVjb2duaXplZCBhcyB2aW0gc2NyaXB0cy4KKworImdkIiBubyBsb25nZXIgc3RhcnRzIHNlYXJjaGluZyBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgYnV0IGF0Cit0aGUgZmlyc3QgYmxhbmsgbGluZSBhYm92ZSB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uICBBdm9pZHMgdGhhdAordXNpbmcgImdkIiBpbiB0aGUgZmlyc3QgZnVuY3Rpb24gZmluZHMgZ2xvYmFsIGEgdmFyaWFibGUuCisKK0RlZmF1bHQgZm9yICdjb21wbGV0ZScgY2hhbmdlZCBmcm9tICIuLGIiIHRvICIuLHcsYix1LHQsaSIuICBNYW55IG1vcmUgbWF0Y2hlcword2lsbCBiZSBmb3VuZCwgYXQgdGhlIGNvc3Qgb2YgdGltZSAodGhlIHNlYXJjaCBjYW4gYmUgaW50ZXJydXB0ZWQpLgorCitJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gc2V0ICdzaGVsbConIG9wdGlvbnMgZnJvbSBhIG1vZGVsaW5lLiAgUHJldmlvdXNseQorb25seSBhIHdhcm5pbmcgbWVzc2FnZSB3YXMgZ2l2ZW4uICBUaGlzIHJlZHVjZXMgc2VjdXJpdHkgcmlza3MuCisKK1RoZSBvcmRlcmluZyBvZiB0aGUgaW5kZXggb2YgZG9jdW1lbnRhdGlvbiBmaWxlcyB3YXMgY2hhbmdlZCB0byBtYWtlIGl0IG1vcmUKK2Vhc3kgdG8gZmluZCBhIHN1YmplY3QuCisKK09uIE1TLURPUyBhbmQgd2luMzIsIHdoZW4gJFZJTSB3YXMgbm90IHNldCwgJEhPTUUgd2FzIHVzZWQuICBUaGlzIGNhdXNlZAordHJvdWJsZSBpZiAkSE9NRSB3YXMgc2V0IHRvIGUuZy4sICJDOlwiIGZvciBzb21lIG90aGVyIHRvb2wsIHRoZSBydW50aW1lIGZpbGVzCit3b3VsZCBub3QgYmUgZm91bmQuICBOb3cgdXNlICRIT01FIG9ubHkgZm9yIF92aW1yYywgX2d2aW1yYywgZXRjLiwgbm90IHRvIGZpbmQKK3RoZSBydW50aW1lIGZpbGUuCisKK1doZW4gJ3RhZ3MnIGlzICIuL3tmbmFtZX0iIGFuZCB0aGVyZSBpcyBubyBmaWxlIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciwKK2p1c3QgdXNlIGl0LiAgUHJldmlvdXNseSBpdCB3YXMgc2tpcHBlZCwgY2F1c2luZyAidmltIC10IHt0YWd9IiBub3QgdG8gZmluZAorbWFueSB0YWdzLgorCitXaGVuIHRyeWluZyB0byBzZWxlY3QgdGV4dCBpbiB0aGUgJ3Njcm9sbG9mZicgYXJlYSBieSBtb3VzZSBkcmFnZ2luZywgdGhlCityZXN1bHRpbmcgc2Nyb2xsaW5nIG1hZGUgdGhpcyBkaWZmaWN1bHQuICBOb3cgJ3Njcm9sbG9mZicgaXMgdGVtcG9yYXJpbHkgc2V0Cit0byAwIG9yIDEgdG8gYXZvaWQgdGhpcy4gIEJ1dCBzdGlsbCBhbGxvdyBzY3JvbGxpbmcgaW4gdGhlIHRvcCBsaW5lIHRvIGV4dGVuZAordG8gYWJvdmUgdGhlIGRpc3BsYXllZCB0ZXh0LgorCitEZWZhdWx0IGZvciAnY29tbWVudHMnIG5vdyBpbmNsdWRlcyAic2w6LyosbWI6ICosZXg6Ki8iLCB0byBtYWtlIGphdmFkb2MKK2NvbW1lbnRzIHdvcmsuICBBbHNvIGhlbHBzIGZvciBDIGNvbW1lbnRzIHRoYXQgc3RhcnQgd2l0aCAiLyoqKioqKioiLgorCitDVFJMLVggQ1RSTC1dIEluc2VydCBtb2RlIHRhZyBleHBhbnNpb24gdHJpZWQgdG8gZXhwYW5kIHRvIGFsbCB0YWdzIHdoZW4gdXNlZAorYWZ0ZXIgYSBub24tSUQgY2hhcmFjdGVyLCB3aGljaCBjYW4gdGFrZSBhIHZlcnkgbG9uZyB0aW1lLiAgTm93IGxpbWl0IHRoaXMgdG8KKzIwMCBtYXRjaGVzLiAgQWxzbyB1c2VkIGZvciBjb21tYW5kLWxpbmUgdGFnIGNvbXBsZXRpb24uCisKK1RoZSBPUy8yIGRpc3RyaWJ1dGlvbiBoYXMgYmVlbiBzcGxpdCBpbiB0d28gZmlsZXMuICBJdCB3YXMgdG9vIGJpZyB0byBmaXQgb24gYQorZmxvcHB5LiAgVGhlIHNhbWUgcnVudGltZSBhcmNoaXZlIGFzIGZvciB0aGUgUEMgaXMgbm93IHVzZWQuCisKK0luIHRoZSBkb2N1bWVudGF0aW9uLCBpdGVtcyBsaWtlIDxhLXo+IGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIHthLXp9IGZvcgorbm9uLW9wdGlvbmFsIGFyZ3VtZW50cy4gIFRoaXMgYXZvaWRzIGNvbmZ1c2lvbiB3aXRoIGtleSBuYW1lczogPEMtWj4gaXMgYQorQ1RSTC1aLCBub3QgYSBjaGFyYWN0ZXIgYmV0d2VlbiBDIGFuZCBaLCB0aGF0IGlzIHtDLVp9LgorCisKK0FkZGVkCQkJCQkJCSphZGRlZC01LjQqCistLS0tLQorCitDb2xvciBzdXBwb3J0IGZvciB0aGUgaXJpcy1hbnNpIGJ1aWx0aW4gdGVybWNhcCBlbnRyeS4gKFR1Ym1hbikKKworSW5jbHVkZWQgVmlzVmltIHZlcnNpb24gMS4zYS4gKEVyaGFyZHQpCisKK1dpbjMyIHBvcnQgZm9yIFNOaUZGKyBpbnRlcmZhY2UuIChMZWhlcmJhdWVyKQorRG9jdW1lbnRhdGlvbiBmaWxlIGZvciBzbmlmZiBpbnRlcmZhY2U6IGlmX3NuaWZmLnR4dC4gKExlaGVyYmF1ZXIpCisKK0luY2x1ZGVkIHRoZSAiU2VuZFRvVmltIiBhbmQgIk9wZW5XaXRoVmltIiBwcm9ncmFtcyBpbiB0aGUgT2xlVmltIGRpcmVjdG9yeS4KK1RvIGJlIHVzZWQgd2l0aCB0aGUgT0xFIHZlcnNpb24gb2YgZ3ZpbSB1bmRlciBNUy1XaW5kb3dzLiAoU2NoYWxsZXIpCisKK0luY2x1ZGVkIEV4dWJlcmFudCBDdGFncyB2ZXJzaW9uIDMuMi40IHdpdGggRWlmZmVsIHN1cHBvcnQuIChIaWViZXJ0KQorCitXaGVuIGEgZmlsZSB0aGF0IGlzIGJlaW5nIGVkaXRlZCBpcyBkZWxldGVkLCBnaXZlIGEgd2FybmluZyAobGlrZSB3aGVuIHRoZQordGltZSBzdGFtcCBjaGFuZ2VkKS4KKworSW5jbHVkZWQgbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIEhUTUwtZ2VuZXJhdGluZyBBd2sgYW5kIFBlcmwgc2NyaXB0cy4gKENvbG9tYm8pCisKK0xpbnV4IGNvbnNvbGUgbW91c2Ugc3VwcG9ydCB0aHJvdWdoICJncG0iLiAoVHNpbmRsZWtodCkKKworU2VjdXJpdHkgZml4OiBEaXNhbGxvdyBjaGFuZ2luZyAnc2VjdXJlJyBhbmQgJ2V4cmMnIGZyb20gYSBtb2RlbGluZS4gIFdoZW4KKydzZWN1cmUnIGlzIHNldCwgZ2l2ZSBhIHdhcm5pbmcgZm9yIGNoYW5naW5nIG9wdGlvbnMgdGhhdCBjb250YWluIGEgcHJvZ3JhbQorbmFtZS4KKworTWFkZSB0aGUgUGVybCBpbnRlcmZhY2Ugd29yayB3aXRoIFBlcmwgNS4wMDUgYW5kIHRocmVhZHMuIChWZXJkb29sYWVnZSkKKworV2hlbiBnaXZpbmcgYW4gZXJyb3IgbWVzc2FnZSBmb3IgYW4gYW1iaWd1b3VzIG1hcHBpbmcsIGluY2x1ZGUgdGhlIG9mZmVuZGluZworbWFwcGluZy4gKFJvZW1lcikKKworQ29tbWFuZCBsaW5lIGVkaXRpbmc6CistIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIG9mIG1hcHBpbmdzLiAoUm9lbWVyKQorLSBDb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgIjpmdW5jdGlvbiIsICI6ZGVsZnVuY3Rpb24iLCAiOmxldCIsICI6Y2FsbCIsCisgICI6aWYiLCBldGMuIChSb2VtZXIpCistIFdoZW4gdXNpbmcgQ1RSTC1EIGNvbXBsZXRpb24gZm9yIHVzZXIgY29tbWFuZHMgdGhhdCBoYXZlCisgICItY29tcGxldGU9dGFnX2xpc3RmaWxlcyIgYWxzbyBsaXN0IHRoZSBmaWxlIG5hbWVzLiAgKE1hZHNlbikKKy0gQ29tcGxldGUgdGhlIGFyZ3VtZW50cyBvZiB0aGUgIjpjb21tYW5kIiBjb21tYW5kLiAoV2ViYikKKy0gQ1RSTC1SIC4gaW4gY29tbWFuZCBsaW5lIGluc2VydHMgbGFzdCBpbnNlcnRlZCB0ZXh0LiAgQ1RSTC1GLCBDVFJMLVAsIENUUkwtVworICBhbmQgQ1RSTC1BIGFmdGVyIENUUkwtUiBhcmUgdXNlZCB0byBpbnNlcnQgYW4gb2JqZWN0IGZyb20gdW5kZXIgdGhlIGN1cnNvci4KKyAgKE1hZHNlbikKKworTWFkZSB0aGUgdGV4dCBpbiB1Z2FuZGEudHh0IGFib3V0IGNvcHlpbmcgVmltIGEgYml0IG1vcmUgY2xlYXIuCisKK1VwZGF0ZWQgdGhlIFZpbSB0dXRvci4gIEFkZGVkIHRoZSAidmltdHV0b3IiIGNvbW1hbmQsIHdoaWNoIGNvcGllcyB0aGUgdHV0b3IKK2FuZCBzdGFydHMgVmltIG9uIGl0LiAgIm1ha2UgaW5zdGFsbCIgbm93IGFsc28gY29waWVzIHRoZSB0dXRvci4KKworSW4gdGhlIG91dHB1dCBvZiAiOmNsaXN0IiB0aGUgY3VycmVudCBlbnRyeSBpcyBoaWdobGlnaHRlZCwgd2l0aCB0aGUgJ2knCitoaWdobGlnaHRpbmcgKHNhbWUgYXMgdXNlZCBmb3IgJ2luY3NlYXJjaCcpLgorCitGb3IgdGhlICI6Y2xpc3QiIGNvbW1hbmQsIHlvdSBjYW4gc2Nyb2xsIGJhY2t3YXJkcyB3aXRoICJiIiAob25lIHNjcmVlbmZ1bGwpLAorInUiIChoYWxmIGEgc2NyZWVuZnVsbCkgYW5kICJrIiAob25lIGxpbmUpLgorCitNdWx0aS1ieXRlIHN1cHBvcnQ6CistIFgtaW5wdXQgbWV0aG9kIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICBBbmQgdmFyaW91cyBmaXhlcyBmb3IgbXVsdGktYnl0ZQorICBzdXBwb3J0LiAoTmFtKQorLSBIYW5ndWwgaW5wdXQgbWV0aG9kIGZlYXR1cmU6IHxoYW5ndWx8LiAoTmFtKQorLSBDbGVhbmVkIHVwIGNvbmZpZ3VyYXRpb24gb2YgbXVsdGktYnl0ZSBzdXBwb3J0LCBYSU0sIGZvbnRzZXQgYW5kIEhhbmd1bAorICBpbnB1dC4gIEVhY2ggaXMgbm93IGNvbmZpZ3VyYWJsZSBzZXBhcmF0ZWx5LgorLSBDaGFuZ2VkIGNoZWNrIGZvciBHVEtfS0VZQk9BUkQgdG8gSEFOR1VMX0tFWUJPQVJEX1RZUEUuIChOYW0pCistIEFkZGVkIGRvYy9oYW5ndWxpbi50eHQ6IERvY3VtZW50YXRpb24gZm9yIHRoZSBIYW5ndWwgaW5wdXQgY29kZS4gKE5hbSkKKy0gWElNIHN1cHBvcnQgZm9yIEdUSysuIChOYW0pCistIEZpcnN0IGF0dGVtcHQgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBTSklTIGVuY29kaW5nLiAoTmFnYW5vKQorLSBXaGVuIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyIGRvZXNuJ3QgZml0IGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUsIHB1dCBhICJ+IgorICB0aGVyZSBhbmQgcHJpbnQgaXQgb24gdGhlIG5leHQgbGluZS4KKy0gT3B0aW1pemUgb3V0cHV0IG9mIG11bHRpLWJ5dGUgdGV4dC4gKFBhcmspCistIFdpbjMyIElNRTogcHJlZWRpdCBzdHlsZSBpcyBsaWtlIG92ZXItdGhlLXNwb3QuIChOYWdhbm8pCistIFdpbjMyIElNRTogSU1FIG1vZGUgY2hhbmdlIG5vdyBkb25lIHdpdGggSW1tU2V0T3BlblN0YXR1cy4gKE5hZ2FubykKKy0gR1VJIEF0aGVuYTogZmlsZSBzZWxlY3Rpb24gZGlhbG9nIGNhbiBkaXNwbGF5IG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKyAgKE5hZ2FubykKKy0gU2VsZWN0aW9uIHJlcGx5IGZvciBYQV9URVhUIGFzIFhBX1NUUklORy4gKE5hZ2FubykKKworInJ1bnRpbWUvbWFjcm9zL2RpZmZ3aW4udmltIi4gIE1hcHBpbmdzIHRvIG1ha2UgYSBkaWZmIHdpbmRvdy4gKENhbXBiZWxsKQorCitBZGRlZCAiLm9iaiIgdG8gdGhlICdzdWZmaXhlcycgb3B0aW9uLgorCitSZWR1Y2VkIHNpemUgb2Ygc3ludGF4L3N5bmxvYWQudmltIGJ5IHVzaW5nIHRoZSAiOlN5bkF1IiB1c2VyIGNvbW1hbmQuCitBdXRvbWF0ZWQgbnVtYmVyaW5nIG9mIFN5bnRheCBtZW51IGVudHJpZXMgaW4gbWVudS52aW0uCitJbiB0aGUgU3ludGF4IG1lbnUsIGluc2VydCBzZXBhcmF0b3JzIGJldHdlZW4gc3ludGF4IG5hbWVzIHRoYXQgc3RhcnQgd2l0aAorYSBkaWZmZXJlbnQgbGV0dGVyLiAoR2VkZGVzKQorCitYdGVybToKKy0gQ2xpcGJvYXJkIHN1cHBvcnQgd2hlbiB1c2luZyB0aGUgbW91c2UgaW4gYW4geHRlcm0uIChNYWRzZW4pCistIFdoZW4gdXNpbmcgdGhlIHh0ZXJtIG1vdXNlLCB0cmFjayBkcmFnZ2luZyBvZiB0aGUgbW91c2UuICBVc2UgeHRlcm0gZXNjYXBlCisgIHNlcXVlbmNlcyB3aGVuIHBvc3NpYmxlLiAgSXQgaXMgbW9yZSBwcmVjaXNlIHRoYW4gb3RoZXIgbWV0aG9kcywgYnV0CisgIHJlcXVpcmVzIGEgZmFpcmx5IHJlY2VudCB4dGVybSB2ZXJzaW9uLiAgSXQgaXMgZW5hYmxlZCB3aXRoICJ4dGVybTIiIGluCisgICd0dHltb3VzZScuICAoTWFkc2VuKQorLSBDaGVjayB4dGVybSBwYXRjaCBsZXZlbCwgdG8gc2V0IHRoZSB2YWx1ZSBvZiAndHR5bW91c2UnLiAgSGFzIG9ubHkgYmVlbgorICBhZGRlZCB0byB4dGVybSByZWNlbnRseSAocGF0Y2ggbGV2ZWwgPiA5NSkuICBVc2VzIHRoZSBuZXcgJ3RfUlYnIHRlcm1jYXAKKyAgb3B0aW9uLiAgU2V0ICd0dHltb3VzZScgdG8gInh0ZXJtMiIgd2hlbiBhIGNvcnJlY3QgcmVzcG9uc2UgaXMgcmVjb2duaXplZC4KKyAgV2lsbCBtYWtlIHh0ZXJtIG1vdXNlIGRyYWdnaW5nIHdvcmsgYmV0dGVyLgorLSBTdXBwb3J0IGZvciBzaGlmdGVkIGZ1bmN0aW9uIGtleXMgb24geHRlcm0uICBDaGFuZ2VkIGNvZGVzIGZvciBzaGlmdGVkCisgIGN1cnNvciBrZXlzIHRvIHdoYXQgdGhlIHh0ZXJtIGFjdHVhbGx5IHByb2R1Y2VzLiAgQWRkZWQgY29kZXMgZm9yIHNoaWZ0ZWQKKyAgPEVuZD4gYW5kIDxIb21lPi4KKy0gQWRkZWQgJ3RfV1AnIHRvIHNldCB0aGUgd2luZG93IHBvc2l0aW9uIGluIHBpeGVscyBhbmQgJ3RfV1MnIHRvIHNldCB0aGUKKyAgd2luZG93IHNpemUgaW4gY2hhcmFjdGVycy4gIFh0ZXJtIGNhbiBub3cgbW92ZSAodXNlZCBmb3IgIjp3aW5wb3MiKSBhbmQKKyAgcmVzaXplICh1c2UgZm9yICI6c2V0IGxpbmVzPSIgYW5kICI6c2V0IGNvbHVtbnM9IikuCisKK1gxMToKKy0gV2hlbiBpbiBWaXN1YWwgbW9kZSBidXQgbm90IG93bmluZyB0aGUgc2VsZWN0aW9uLCBkaXNwbGF5IHRoZSBWaXN1YWwgYXJlYQorICB3aXRoIHRoZSBWaXN1YWxOT1MgZ3JvdXAgdG8gc2hvdyB0aGlzLiAoTWFkc2VuKQorLSBTdXBwb3J0IGZvciByZXF1ZXN0aW5nIHRoZSB0eXBlIG9mIGNsaXBib2FyZCBzdXBwb3J0LiAgVXNlZCBmb3IgQUlYIGFuZAorICBkdHRlcm0uIChXaXR0aWcpCistIFN1cHBvcnQgY29tcG91bmRfdGV4dCBzZWxlY3Rpb24gKGV2ZW4gd2hlbiBjb21waWxlZCB3aXRob3V0IG11bHRpLWJ5dGUpLgorCitTd2FwIGZpbGU6CistIE5ldyB2YXJpYXRpb24gZm9yIG5hbWluZyBzd2FwIGZpbGVzOiBSZXBsYWNlIHBhdGggc2VwYXJhdG9ycyBpbnRvICUsIHBsYWNlCisgIGFsbCBzd2FwIGZpbGVzIGluIG9uZSBkaXJlY3RvcnkuICBVc2VkIHdoZW4gYSBuYW1lIGluICdkaXInIGVuZHMgaW4gdHdvIHBhdGgKKyAgc2VwYXJhdG9ycy4gKE1hZHNlbikKKy0gV2hlbiBhIHN3YXAgZmlsZSBpcyBmb3VuZCwgc2hvdyB3aGV0aGVyIGl0IGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgb3Igbm90IGluCisgIHRoZSBpbmZvcm1hdGl2ZSBtZXNzYWdlLiAoTWFkc2VuKQorLSBXaGVuIGRpYWxvZ3MgYXJlIHN1cHBvcnRlZCwgdXNlIGEgZGlhbG9nIHRvIGFzayB0aGUgdXNlciB3aGF0IHRvIGRvIHdoZW4gYQorICBzd2FwZmlsZSBhbHJlYWR5IGV4aXN0cy4KKworInBvcHVwX3NldHBvcyIgaW4gJ21vdXNlbW9kZWwnIG9wdGlvbi4gIEFsbG93cyBmb3IgbW92aW5nIHRoZSBjdXJzb3Igd2hlbgordXNpbmcgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbi4KKworV2hlbiBhIGJ1ZmZlciBpcyBkZWxldGVkLCB0aGUgc2VsZWN0aW9uIGZvciB3aGljaCBidWZmZXIgdG8gZGlzcGxheSBpbnN0ZWFkCitub3cgdXNlcyB0aGUgbW9zdCByZWNlbnQgZW50cnkgZnJvbSB0aGUganVtcCBsaXN0LiAoTWFkc2VuKQorCitXaGVuIHVzaW5nIENUUkwtTy9DVFJMLUksIHNraXAgZGVsZXRlZCBidWZmZXJzLgorCitBIHBlcmNlbnRhZ2UgaXMgc2hvd24gaW4gdGhlIHJ1bGVyLCB3aGVuIHRoZXJlIGlzIHJvb20uCisKK1VzZWQgYXV0b2NvbmYgMS4xMyB0byBnZW5lcmF0ZSBjb25maWd1cmUuCisKK0luY2x1ZGVkIGdldF9saXNwX2luZGVudCgpIGZyb20gRGlyayB2YW4gRGV1bi4gIERvZXMgYmV0dGVyIExpc3AgaW5kZW50aW5nCit3aGVuICdwJyBmbGFnIGluICdjcG9wdGlvbnMnIGlzIG5vdCBpbmNsdWRlZC4KKworTWFkZSB0aGUgMmh0bWwudmltIHNjcmlwdCBxdWl0ZSBhIGJpdCBmYXN0ZXIuICAoYmFzZWQgb24gaWRlYXMgZnJvbSBHZWRkZXMpCisKK1VuaXg6CistIEluY2x1ZGVkIHRoZSBuYW1lIG9mIHRoZSB1c2VyIHRoYXQgY29tcGlsZWQgVmltIGFuZCB0aGUgc3lzdGVtIG5hbWUgaXQgd2FzCisgIGNvbXBpbGVkIG9uIGluIHRoZSB2ZXJzaW9uIG1lc3NhZ2UuCistICJtYWtlIGluc3RhbGwiIG5vdyBhbHNvIGluc3RhbGxzIHRoZSAidG9vbHMiIGRpcmVjdG9yeS4gIE1ha2VzIHRoZW0KKyAgYXZhaWxhYmxlIGZvciBldmVyeWJvZHkuCistICJtYWtlIGNoZWNrIiBub3cgZG9lcyB0aGUgc2FtZSBhcyAibWFrZSB0ZXN0Ii4gICJtYWtlIHRlc3QiIGNoZWNrcyBmb3IKKyAgVmlzdWFsIGJsb2NrIG1vZGUgc2hpZnQsIGluc2VydCwgcmVwbGFjZSBhbmQgY2hhbmdlLgorLSBTcGVlZCB1cCBjb21wYXJpbmcgYSBmaWxlIG5hbWUgd2l0aCBleGlzdGluZyBidWZmZXJzIGJ5IHN0b3JpbmcgdGhlCisgIGRldmljZS9pbm9kZSBudW1iZXIgd2l0aCB0aGUgYnVmZmVyLgorLSBBZGRlZCBjb25maWd1cmUgYXJndW1lbnRzICItLWRpc2FibGUtZ3RrIiwgIi0tZGlzYWJsZS1tb3RpZiIgYW5kCisgICItLWRpc2FibGUtYXRoZW5hIiwgdG8gYmUgYWJsZSB0byBkaXNhYmxlIGEgc3BlY2lmaWMgR1VJICh3aGVuIGl0IGRvZXNuJ3QKKyAgd29yaykuCistIFJlbmFtZWQgdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMgZm9yIGRpc2FibGluZyB0aGUgY2hlY2sgZm9yIHNwZWNpZmljIEdVSXMuCisgIFNob3VsZCBiZSBjbGVhcmVyIG5vdy4gKEthaG4pCistIE9uIGEgRGlnaXRhbCBVbml4IHN5c3RlbSAoIk9TRjEiKSBjaGVjayBmb3IgdGhlIGN1cnNlcyBsaWJyYXJ5IGJlZm9yZQorICB0ZXJtbGliIGFuZCB0ZXJtY2FwLiAoU2NoaWxkKQorLSAibWFrZSB1bmluc3RhbGxfcnVudGltZSIgd2lsbCBvbmx5IGRlbGV0ZSB0aGUgdmVyc2lvbi1zcGVjaWZpYyBmaWxlcy4gIENhbgorICBiZSB1c2VkIHRvIGRlbGV0ZSB0aGUgcnVudGltZSBmaWxlcyBvZiBhIHByZXZpb3VzIHZlcnNpb24uCisKK01hY2ludG9zaDogKFN0LUFtYW50KQorLSBEcmFnZ2luZyB0aGUgc2Nyb2xsYmFyLCBsaWtlIGl0J3MgZG9uZSBmb3IgdGhlIFdpbjMyIEdVSS4gIE1vdmVkIGNvbW1vbiBjb2RlCisgIGZyb20gZ3VpX3czMi5jIHRvIGd1aS5jCistIEFkZGVkIGRpYWxvZ3MgYW5kIGZpbGUgYnJvd3NpbmcuCistIFJlc291cmNlIGZvcmsgcHJlc2VydmVkLCB3YXJuaW5nIHdoZW4gaXQgd2lsbCBiZSBsb3N0LgorLSBDb3B5IG9yaWdpbmFsIGZpbGUgYXR0cmlidXRlcyB0byBuZXdseSB3cml0dGVuIGZpbGUuCistIFNldCB0aXRsZS9ub3RpdGxlIGJ1ZyBzb2x2ZWQuCistIEZpbGVuYW1lIGNvbXBsZXRpb24gaW1wcm92ZWQuCistIEdyb3cgYm94IGxpbWl0IHJlc2l6ZSB0byBhIGNoYXIgYnkgY2hhciBzaXplLgorLSBVc2Ugb2YgcmdiLnR4dCBmb3IgbW9yZSBjb2xvcnMgKGJ1dCBnaXZlIGJhY2sgYmFkIGNvbG9yKS4KKy0gQXBwbGUgbWVudSB3b3JrcyAoYmVzaWRlIHRoZSBhYm91dC4uLikuCistIEludGVybmFsIGJvcmRlciBub3cgdmltIGNvbXBsaWFudC4KKy0gUmVtb3ZpbmcgYSBtZW51IGRvZXNuJ3QgY3Jhc2ggYW55bW9yZS4KKy0gV2Vhay1saW5raW5nIG9mIFB5dGhvbiAxLjUuMSAob25seSBvbiBQUEMpLiAgUHl0aG9uIGlzIHN1cHBvcnRlZCB3aGVuIHRoZQorICBsaWJyYXJ5IGlzIGF2YWlsYWJsZS4KKy0gSWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgd2hlbiBzb3VyY2luZyB0aGUgdXNlcnMgLnZpbXJjLCB0aGUgYWxlcnQgYm94IG5vdworICBzaG93cyByaWdodCBhd2F5IHdpdGggdGhlIE9LIGJ1dHRvbiBkZWZhdWx0ZWQuIFRoZXJlJ3Mgbm8gbW9yZSAiRGVsZXRlIi1rZXkKKyAgc2lnbiBhdCB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lCistIEJldHRlciBtYW5hZ2VtZW50IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIE5vdyAkVklNIGlzIGNhbGN1bGF0ZWQgb25seQorICBvbmNlLCBub3QgcmVnZW5lcmF0ZWQgZXZlcnkgdGltZSBpdCBpcyB1c2VkLgorLSBObyBtb3JlIENQVSBob2cgd2hlbiBpbiBiYWNrZ3JvdW5kLgorLSBJbiBhIHNvdXJjZWQgVmltIHNjcmlwdCB0aGUgTWFjIGZpbGUgZm9ybWF0IGNhbiBiZSByZWNvZ25pemVkLCBqdXN0IGxpa2UgRE9TCisgIGZpbGUgZm9ybWF0IGlzLgorCitXaGVuIGJvdGggInVuaXgiIGFuZCAibWFjIiBhcmUgcHJlc2VudCBpbiAnZmlsZWZvcm1hdHMnLCBwcmVmZXIgIm1hYyIgZm9ybWF0Cit3aGVuIHRoZXJlIGFyZSBtb3JlIENSIHRoYW4gTkwgY2hhcmFjdGVycy4KK1doZW4gdXNpbmcgIm1hYyIgZmlsZWZvcm1hdCwgdXNlIENSIGluc3RlYWQgb2YgYSBOTCwgYmVjYXVzZSBOTCBpcyB1c2VkIGZvcgorTlVMLiAgV2lsbCBwcmVzZXJ2ZSBhbGwgY2hhcmFjdGVycyBpbiBhIGZpbGUuIChNYWRzZW4pCisKK1RoZSBET1MgaW5zdGFsbC5leGUgbm93IGNvbnRhaW5zIGNoZWNrcyBmb3IgYW4gZXhpc3RpbmcgaW5zdGFsbGF0aW9uLiAgSXQKK2F2b2lkcyBzZXR0aW5nICRWSU0gYW5kICRQQVRIIGFnYWluLgorVGhlIGluc3RhbGwgcHJvZ3JhbSBmb3IgRG9zL1dpbmRvd3MgY2FuIG5vdyBpbnN0YWxsIFZpbSBpbiB0aGUgcG9wdXAgbWVudSwgYnkKK2FkZGluZyB0d28gcmVnaXN0cnkga2V5cy4KKworUG9ydCB0byBFR0NTL21pbmd3MzIuICBOZXcgTWFrZWZpbGUubWluZy4gKEFhcm9uKQorCitET1MgMTYgYml0OiBEb24ndCBpbmNsdWRlIGN1cnNvciBzaGFwZSBzdHVmZi4gIFNhdmUgc29tZSBieXRlcy4KKworVENMIHN1cHBvcnQgdG8gTWFrZWZpbGUudzMyLiAoRHVwZXJ2YWwpCisKK09TLzI6IFVzZSBhcmd2WzBdIHRvIGZpbmQgcnVudGltZSBmaWxlcy4KKworV2hlbiB1c2luZyAiZ2YiIHRvIGdvIHRvIGEgYnVmZmVyIHRoYXQgaGFzIGFscmVhZHkgYmVlbiB1c2VkLCBqdW1wIHRvIHRoZQorbGluZSB3aGVyZSB0aGUgY3Vyc29yIGxhc3Qgd2FzLgorCitDb2xvcmVkIHRoZSBvdXRwdXQgb2YgIjp0c2VsZWN0IiBhIGJpdCBtb3JlLiAgRGlmZmVyZW50IGhpZ2hsaWdodGluZyBiZXR3ZWVuCit0YWcgbmFtZSBhbmQgZmlsZSBuYW1lLiAgSGlnaGxpZ2h0IGZpZWxkIG5hbWUgKCJzdHJ1Y3Q6Iikgc2VwYXJhdGVseSBmcm9tCithcmd1bWVudC4KKworQmFja3RpY2sgZXhwYW5zaW9uIGZvciBub24tVW5peCBzeXN0ZW1zLiAgQmFzZWQgb24gYSBwYXRjaCBmcm9tIEFhcm9uLgorQWxsb3dzIHRoZSB1c2Ugb2YgdGhpbmdzIGxpa2UgIjpuIGBncmVwIC1sIHRlc3QgKi5jYCIgYW5kCisiZWNobyBleHBhbmQoJ2BscyBtKmAnKSIuCisKK0NoZWNrIGZvciB0aGUgJ2NvbXBsZXRlJyBvcHRpb24gd2hlbiBpdCBpcyBzZXQuIChBY2V2ZWRvKQorJ2QnIGZsYWcgaW4gJ2NvbXBsZXRlJyBzZWFyY2hlcyBmb3IgZGVmaW5lZCBuYW1lcyBvciBtYWNyb3MuCitXaGlsZSBzZWFyY2hpbmcgZm9yIEluc2VydCBtb2RlIGNvbXBsZXRpb25zIGluIGluY2x1ZGUgZmlsZXMgYW5kIHRhZ3MgZmlsZXMsCitjaGVjayBmb3IgdHlwZWFoZWFkLCBzbyB0aGF0IHlvdSBjYW4gdXNlIG1hdGNoZXMgZWFybHkuIChXZWJiKQorVGhlICcuJyBmbGFnIGluICdjb21wbGV0ZScgbm93IHNjYW5zIHRoZSBjdXJyZW50IGJ1ZmZlciBjb21wbGV0ZWx5LCBpZ25vcmluZworJ25vd3JhcHNjYW4nLiAgKFdlYmIpCisKK0FkZGVkICd+JyBmbGFnIHRvICd3aGljaHdyYXAnLiAoQWNldmVkbykKKworV2hlbiBlbmRpbmcgdGhlIFZpc3VhbCBtb2RlIChlLmcuLCB3aXRoIEVTQykgZG9uJ3QgZ3JhYiBvd25lcnNoaXAgb2YgdGhlCitzZWxlY3Rpb24uCisKK0luIGEgY29sb3IgdGVybWluYWwsICJmZyIgYW5kICJiZyIgY2FuIGJlIHVzZWQgYXMgY29sb3IgbmFtZXMuICBUaGV5IHN0YW5kIGZvcgordGhlICJOb3JtYWwiIGNvbG9ycy4KKworQSBmZXcgY3Njb3BlIGNsZWFudXBzLiAoS2FobikKKworSW5jbHVkZWQgY2hhbmdlZCB2aW1zcGVsbC5zaCBmcm9tIFNjaGVtZW5hdWVyLgorCitDb25jYXRlbmF0aW9uIG9mIHN0cmluZ3MgaW4gYW4gZXhwcmVzc2lvbiB3aXRoICIuIiBpcyBhIGJpdCBmYXN0ZXIuIChSb2VtZXIpCisKK1RoZSAiOnJlZGlyIiBjb21tYW5kIGNhbiBub3cgcmVkaXJlY3QgdG8gYSByZWdpc3RlcjogIjpyZWRpciBAciIuIChSb2VtZXIpCisKK01hZGUgdGhlIG91dHB1dCBvZiAiOm1hcmtzIiBhbmQgIjpqdW1wcyIgbG9vayBzaW1pbGFyLiAgV2hlbiB0aGUgbWFyayBpcyBpbgordGhlIGN1cnJlbnQgZmlsZSwgc2hvdyB0aGUgdGV4dCBhdCB0aGUgbWFyay4gIEFsc28gZm9yICI6dGFncyIuCisKK1doZW4gY29uZmlndXJlIGZpbmRzIGZ0ZWxsbygpIGFuZCBmc2Vla28oKSwgdGhleSBhcmUgdXNlZCBpbiB0YWcuYyAoZm9yIHdoZW4KK3lvdSBoYXZlIGV4dHJlbWVseSBiaWcgdGFncyBmaWxlcykuCisKK0NvbmZpZ3VyZSBjaGVjayBmb3IgIi1GT2xpbWl0LDIwMDAiIGFyZ3VtZW50IGZvciB0aGUgY29tcGlsZXIuIChCb3JzZW5rb3cpCisKK0dVSToKKy0gV2hlbiB1c2luZyAiOmd1aSIgaW4gYSBub24tR1VJIFZpbSwgZ2l2ZSBhIGNsZWFyIGVycm9yIG1lc3NhZ2UuCistICJndmltIC12IiBkb2Vzbid0IHN0YXJ0IHRoZSBHVUkgKGlmIGNvbnNvbGUgc3VwcG9ydCBpcyBwcmVzZW50KS4KKy0gV2hlbiBpbiBFeCBtb2RlLCB1c2Ugbm9uLVZpc3VhbCBzZWxlY3Rpb24gZm9yIHRoZSB3aG9sZSBzY3JlZW4uCistIFdoZW4gc3RhcnRpbmcgd2l0aCAiZ3ZpbSAtZiIgYW5kIHVzaW5nICI6Z3VpIiBpbiB0aGUgLmd2aW1yYyBmaWxlLCBWaW0KKyAgZm9ya2VkIGFueXdheS4gIE5vdyB0aGUgIi1mIiBmbGFnIGlzIHJlbWVtYmVyZWQgZm9yICI6Z3VpIi4gIEFkZGVkICJndWkgLWIiCisgIHRvIHJ1biBndmltIGluIHRoZSBiYWNrZ3JvdW5kIGFueXdheS4KKworTW90aWYgR1VJOgorLSBDaGVjayBmb3IgIi1sWHAiIGxpYnJhcnkgaW4gY29uZmlndXJlIChidXQgaXQgZG9lc24ndCB3b3JrIHlldC4uLikuCistIExldCBjb25maWd1cmUgY2hlY2sgZm9yIExlc3N0aWYgaW4gIi91c3IvbG9jYWwvTGVzc3RpZi9Nb3RpZioiLiAgQ2hhbmdlZCB0aGUKKyAgb3JkZXIgdG8gbGV0IGEgbG9jYWwgTW90aWYgdmVyc2lvbiBvdmVycmlkZSBhIHN5c3RlbSBzdGFuZGFyZCB2ZXJzaW9uLgorCitXaW4zMiBHVUk6CistIFdoZW4gdXNpbmcgIi1yZWdpc3RlciIgb3IgIi11bnJlZ2lzdGVyIiBpbiB0aGUgbm9uLU9MRSB2ZXJzaW9uLCBnaXZlIGFuCisgIGVycm9yIG1lc3NhZ2UuCistIFVzZSBHVEsgdG9vbGJhciBpY29ucy4gIE1ha2Ugd2luZG93IGJvcmRlciBsb29rIGJldHRlci4gIFVzZSBzaXppbmcgaGFuZGxlcworICBvbiB0aGUgbG93ZXIgbGVmdCZyaWdodCBjb3JuZXJzIG9mIHRoZSB3aW5kb3cuIChOZWdyaSkKKy0gV2hlbiBzdGFydGluZyBhbiBleHRlcm5hbCBjb21tYW5kIHdpdGggIjohc3RhcnQiIGFuZCB0aGUgY29tbWFuZCBjYW4gbm90IGJlCisgIGV4ZWN1dGVkLCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UuIChXZWJiKQorLSBVc2Ugc2l6aW5nIGhhbmRsZXMgZm9yIHRoZSBncmV5IHJlY3RhbmdsZXMgYmVsb3cgdGhlIHNjcm9sbGJhcnMuICBDYW4gZHJhdworICB0b29sYmFyIGluIGZsYXQgbW9kZSBub3csIGxvb2tzIGJldHRlci4gKE5lZ3JpKQorLSBQcmVwYXJhdGlvbnMgZm9yIE1TLVdpbmRvd3MgMy4xIGFkZGl0aW9uLiAgTW9zdGx5IGNoYW5naW5nIFdJTjMyIHRvIE1TV0lOCisgIGFuZCBVU0VfR1VJX1dJTjMyIHRvIFVTRV9HVUlfTVNXSU4uIChOZWdyaSkKKworQXZvaWQgYWxsb2NhdGluZyB0aGUgc2FtZSBzdHJpbmcgZm91ciB0aW1lcyBpbiBidWZsaXN0X2ZpbmRwYXQoKS4gKFdpbGxpYW1zKQorCitTZXQgdGl0bGUgYW5kIGljb24gdGV4dCB3aXRoIHRlcm1jYXAgb3B0aW9ucyAndF90cycsICd0X2ZzJywgJ3RfSVMnIGFuZAorJ3RfSUUnLiAgQWxsb3dzIGRvaW5nIHRoaXMgb24gYW55IHRlcm1pbmFsIHRoYXQgc3VwcG9ydHMgc2V0dGluZyB0aGUgdGl0bGUKK2FuZC9vciBpY29uIHRleHQuIChTY2hpbGQpCisKK05ldyAneCcgZmxhZyBpbiAnY29tbWVudHMnOiBBdXRvbWF0aWNhbGx5IGluc2VydCB0aGUgZW5kIHBhcnQgd2hlbiBpdHMgbGFzdAorY2hhcmFjdGVyIGlzIHR5cGVkLiAgSGVscHMgdG8gY2xvc2UgYSAvKiAqLyBjb21tZW50IGluIEMuIChXZWJiKQorCitXaGVuIGV4cGFuZCgpIGhhcyBhIHNlY29uZCBhcmd1bWVudCB3aGljaCBpcyBub24temVybywgZG9uJ3QgdXNlICdzdWZmaXhlcycKK2FuZCAnd2lsZGlnbm9yZScsIHJldHVybiBhbGwgbWF0Y2hlcy4KKworJ08nIGZsYWcgaW4gJ2Nwb3B0aW9uczogV2hlbiBub3QgaW5jbHVkZWQsIFZpbSB3aWxsIG5vdCBvdmVyd3JpdGUgYSBmaWxlLCBpZgoraXQgZGlkbid0IGV4aXN0IHdoZW4gZWRpdGluZyBzdGFydGVkIGJ1dCBpdCBkb2VzIGV4aXN0IHdoZW4gdGhlIGJ1ZmZlciBpcword3JpdHRlbiB0byB0aGUgZmlsZS4gIFRoZSBmaWxlIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgb3V0c2lkZSBvZiBWaW0sIHBvc3NpYmx5Cit3aXRob3V0IHRoZSB1c2VyIGtub3dpbmcgaXQuICBXaGVuIHRoaXMgaXMgZGV0ZWN0ZWQgYWZ0ZXIgYSBzaGVsbCBjb21tYW5kLAorZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZS4KKworV2hlbiBlZGl0aW5nIGEgbmV3IGZpbGUsIENUUkwtRyB3aWxsIHNob3cgW05ldyBmaWxlXS4gIFdoZW4gdGhlcmUgd2VyZSBlcnJvcnMKK3doaWxlIHJlYWRpbmcgdGhlIGZpbGUsIENUUkwtRyB3aWxsIHNob3cgW1JlYWQgZXJyb3JzXS4KKworIjp3YWxsIiBjYW4gbm93IHVzZSBhIGRpYWxvZyBhbmQgZmlsZS1icm93c2luZyB3aGVuIG5lZWRlZC4KKworR3JvdXBlZCBmdW5jdGlvbmFsaXR5IGludG8gbmV3IGZlYXR1cmVzLCBtYWlubHkgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZQorbWluaW1hbCB2ZXJzaW9uOgorK2xpbmVicmVhazoJJ3Nob3dicmVhaycsICdicmVha2F0JyBhbmQgJ2xpbmVicmVhaycKKyt2aXN1YWxleHRyYToJIkkibnNlcnQgYW5kICJBInBwZW5kIGluIFZpc3VhbCBibG9jayBtb2RlLCAiYyJoYW5nZSBhbGwgbGluZXMKKwkJaW4gYSBibG9jaywgIj4iIGFuZCAiPCI6IFNoaWZ0aW5nIGEgYmxvY2ssICJyIjogUmVwbGFjaW5nIGEKKwkJVmlzdWFsIGFyZWEgd2l0aCBvbmUgY2hhcmFjdGVyLgorK2NvbW1lbnRzOgknY29tbWVudHMnCisrY21kbGluZV9pbmZvOgkncnVsZXInIGFuZCAnc2hvd2NtZCcuICBSZXBsYWNlcyArc2hvd2NtZC4KKyIrdGl0bGUiCURvbid0IGFkZCBjb2RlIHRvIHNldCB0aXRsZSBvciBpY29uIGZvciBNU0RPUywgdGhpcyB3YXMgbm90CisJCXBvc3NpYmxlIGFueXdheS4KKytjbWRsaW5lX2NvbXBsCURpc2FibGUgY29tbWFuZGxpbmUgY29tcGxldGlvbiBhdCBjb21waWxlIHRpbWUsIGV4Y2VwdCBmb3IKKwkJZmlsZXMsIGRpcmVjdG9yaWVzIGFuZCBoZWxwIGl0ZW1zLgorCitNb3ZlZCBmZWF0dXJlcyBmcm9tIGEgbGlzdCBvZiBmdW5jdGlvbiBjYWxscyBpbnRvIGFuIGFycmF5LiAgU2hvdWxkIHNhdmUgYSBiaXQKK29mIHNwYWNlLgorCitXaGlsZSBlbnRlcmluZyB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uLCBhZGp1c3QgaW5kZW50IGFjY29yZGluZyB0byAiaWYiIGFuZAorIndoaWxlIiBjb21tYW5kcy4KKworVk1TOiBBZGp1c3RlZCBvc192bXMubW1zIGEgYml0IGFjY29yZGluZyB0byBzdWdnZXN0aW9ucyBmcm9tIEFycGFkZmZ5LgorCitUaGUgZmxhZ3MgaW4gdGhlICdjb21tZW50cycgb3B0aW9uIGNhbiBub3cgaW5jbHVkZSBhbiBvZmZzZXQuICBUaGlzIG1ha2VzIGl0Citwb3NzaWJsZSB0byBhbGlnbiAiLyoqKioqIiwgIi8qICAgeHh4IiBhbmQgIi8qIiBjb21tZW50cyB3aXRoIHRoZSBzYW1lCisnY29tbWVudHMnIHNldHRpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgJ2NvbW1lbnRzJyB1c2VzIHRoaXMuCitBZGRlZCAnTycgZmxhZzogRG9uJ3QgdXNlIHRoaXMgcGFydCBmb3IgdGhlICJPIiBjb21tYW5kLiAgVXNlZnVsIGZvciAic2V0Citjb209c086KlwgLSxtTzoqXCBcICxleE86Ki8iCisKK0ZpbGVUeXBlIGF1dG9jb21tYW5kcyByZWNvZ25pemUgIi5iYWsiLCAiLm9yaWciIGFuZCAifiIgZXh0ZW5zaW9ucyBhbmQgcmVtb3ZlCit0aGVtIHRvIGZpbmQgdGhlIHJlbGV2YW50IGV4dGVuc2lvbi4KKworVGhlIHR1dG9yaWFsIGZvciB3cml0aW5nIGEgVmltIHNjcmlwdCBmaWxlIGhhcyBiZWVuIGV4dGVuZGVkLgorCitTb21lIG1vcmUgaGlnaGxpZ2h0aW5nIGluIGhlbHAgZmlsZXMsIGZvciBpdGVtcyB0aGF0IGFyZSBub3QgdHlwZWQgbGl0ZXJhbGx5LgorCitDYW4gdXNlICJDVFJMLVcgQ1RSTC1HIiBsaWtlICJDVFJMLVcgZyIuCisKKyJtYWtlIHRlc3QiIGZvciBPUy8yLgorCitBZGp1c3RlZCBjb25maWd1cmUgdG8gYXV0b21hdGljYWxseSB1c2UgdGhlIEdVSSBmb3IgQmVPUy4KKworCitGaXhlZAkJCQkJCQkqZml4ZWQtNS40KgorLS0tLS0KKworNS4zLjE6IFdoZW4gdXNpbmcgYW4gYXV0b2NvbW1hbmQgZm9yIEJ1ZldyaXRlUHJlIHRoYXQgY2hhbmdlcyB0aGUgbmFtZSBvZiB0aGUKK2J1ZmZlciwgZnJlZWQgbWVtb3J5IHdvdWxkIGJlIHVzZWQuIChHZWRkZXMpCisKK01hYzogQ29tcGlsZXIgZGlkbid0IHVuZGVyc3RhbmQgc3RhcnQgb2Ygc2tpcF9jbGFzc19uYW1lKCkuCisKK1dpbjMyIEdVSToKKy0gV2hlbiBjYW5jZWxsaW5nIHRoZSBmb250IHJlcXVlc3RlciwgZG9uJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLgorLSBXaGVuIGEgdGVhcm9mZi1tZW51IGlzIG9wZW4gYW5kIGl0cyBtZW51IGlzIGRlbGV0ZWQsIFZpbSBjb3VsZCBjcmFzaC4KKyAgKE5lZ3JpKQorLSBUaGVyZSB3YXMgYSBwcm9ibGVtIG9uIFdpbmRvd3MgOTUgd2l0aCAodW4pbWF4aW1pemluZyB0aGUgd2luZG93LgorICAoV2lsbGlhbXMpCistIHdoZW4gJ21vdXNlaGlkZScgaXMgc2V0LCB0aGUgbW91c2Ugd291bGQgc3RheSBoaWRkZW4gd2hlbiBhIG1lbnUgaXMgZHJvcHBlZAorICB3aXRoIHRoZSBrZXlib2FyZC4gKFJhbHN0b24pCistIFRoZSB0ZW1wbmFtZSgpIGZ1bmN0aW9uIGFscmVhZHkgY3JlYXRlZCB0aGUgZmlsZS4gIENhdXNlZCBwcm9ibGVtcyB3aGVuCisgIHVzaW5nICI6dyIuICBOb3cgdGhlIGZpbGUgaXMgZGVsZXRlZC4KKy0gQ3Vyc29yIGRpc2FwcGVhcmVkIHdoZW4gZW5kaW5nIHVwIGluIHRoZSB0b3AtbGVmdCBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbgorICBhZnRlciBzY3JvbGxpbmcuIChXZWJiKQorLSBXaGVuIGFkZGluZyBhIHN1Ym1lbnUgZm9yIGEgdG9ybi1vZmYgbWVudSwgaXQgd2FzIG5vdCB1cGRhdGVkLgorLSBNZW51IHRvb2x0aXAgd2FzIHVzaW5nIHRoZSB0b29sYmFyIHRvb2x0aXAuIChOZWdyaSkKKy0gU2V0dGluZyAnbm90aXRsZScgZGlkbid0IHJlbW92ZSB0aGUgdGl0bGUuIChTdGVlZCkKKy0gVXNpbmcgIjohc3RhcnQgY21kIiBzY3JvbGxlZCB0aGUgc2NyZWVuIG9uZSBsaW5lIHVwLCBhbmQgZGlkbid0IHdhaXQgZm9yCisgIHJldHVybiB3aGVuIHRoZSBjb21tYW5kIHdhc24ndCBmb3VuZC4KKworQ3Njb3BlIGludGVyZmFjZTogU29ydGluZyBvZiBtYXRjaGVzIHdhcyB3cm9uZy4gIFN0YXJ0aW5nIHRoZSBpbnRlcmZhY2UgY291bGQKK2ZhaWwuIChLYWhuKQorCitNb3RpZiBHVUk6IENvdWxkIG5vdCBjb21waWxlIHdpdGggTW90aWYgMS4xLCBiZWNhdXNlIHNvbWUgdGVhci1vZmYKK2Z1bmN0aW9uYWxpdHkgd2FzIG5vdCBpbiAjaWZkZWZzLgorCitDb25maWd1cmUgY291bGQgc29tZXRpbWVzIG5vdCBjb21waWxlIG9yIGxpbmsgdGhlIHRlc3QgcHJvZ3JhbSBmb3Igc2l6ZW9mKGludCkKK3Byb3Blcmx5LiAgVGhpcyBjYXVzZWQgYWxpZ25tZW50IHByb2JsZW1zIGZvciB0aGUgdW5kbyBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuCitBZGRlZCBhIHNhZmV0eSBjaGVjayB0aGF0IFNJWkVPRl9JTlQgaXMgbm90IHplcm8uCisKK0FkZGVkIGNvbmZpZ3VyZSBjaGVjayB0byB0ZXN0IGlmIHN0cmluZ3MuaCBjYW4gYmUgaW5jbHVkZWQgYWZ0ZXIgc3RyaW5nLmguCitTb21lIHN5c3RlbXMgY2FuJ3QgaGFuZGxlIGl0LgorU29tZSBzeXN0ZW1zIG5lZWQgYm90aCBzdHJpbmcuaCBhbmQgc3RyaW5ncy5oIGluY2x1ZGVkLiAgQWRqdXN0ZWQgdmltLmggZm9yCit0aGF0LiAgUmVtb3ZlZCBpbmNsdWRpbmcgc3RyaW5nLmggZnJvbSBvc191bml4eC5oLCBzaW5jZSBpdCdzIGFscmVhZHkgaW4KK3ZpbS5oLiAoU2F2YWdlKQorQUlYOiBkZWZpbmluZyBfTk9fUFJPVE8gaW4gb3NfdW5peC5oIGNhdXNlcyBhIGNvbmZsaWN0IGJldHdlZW4gc3RyaW5nLmggYW5kCitzdHJpbmdzLmgsIGJ1dCBhZnRlciB0aGUgY29uZmlndXJlIGNoZWNrIHNhaWQgaXQgd2FzIE9LLiAgQWxzbyBkZWZpbmUKK19OT19QUk9UTyBmb3IgQUlYIGluIHRoZSBjb25maWd1cmUgY2hlY2suIChXaW5uKQorCitXaGVuIGNsb3NpbmcgYSB3aW5kb3cgd2l0aCBDVFJMLVcgYywgdGhlIHZhbHVlIG9mICdoaWRkZW4nIHdhcyBub3QgdGFrZW4gaW50bworYWNjb3VudCwgdGhlIGJ1ZmZlciB3YXMgYWx3YXlzIHVubG9hZGVkLiAoTmVncmkpCisKK1VuaXggTWFrZWZpbGU6ICJtYWtlIGluc3RhbGwiIGFsd2F5cyB0cmllZCB0byByZW5hbWUgYW4gb2xkZXIgZXhlY3V0YWJsZSBhbmQKK3JlbW92ZSBpdC4gIFRoaXMgY2F1c2VkIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBpdCBkaWRuJ3QgZXhpdC4gIEFkZGVkIGEgY2hlY2sKK2ZvciB0aGUgZXhpc3RlbmNlIG9mIGFuIG9sZCBleGVjdXRhYmxlLgorVGhlIGNvbW1hbmQgbGluZSBmb3IgIm1ha2UgaW5zdGFsbCIgY291bGQgZ2V0IHRvbyBsb25nLCBiZWNhdXNlIG9mIHRoZSBtYW55CitzeW50YXggZmlsZXMuICBOb3cgZmlyc3QgZG8gYSAiY2QiIHRvIHJlZHVjZSB0aGUgbGVuZ3RoLgorCitPbiBSSVNDT1MgYW5kIE1TRE9TLCByZWFkaW5nIGEgZmlsZSBjb3VsZCBmYWlsLCBiZWNhdXNlIHRoZSBzaG9ydCBmaWxlbmFtZSB3YXMKK3VzZWQsIHdoaWNoIGNhbiBiZSB3cm9uZyBhZnRlciBhICI6IWNkIi4KKworSW4gdGhlIERPUyB2ZXJzaW9ucywgdGhlIHdyb25nIGluc3RhbGwuZXhlIHdhcyBpbmNsdWRlZCAocmVxdWlyZWQgV2luZG93cykuCitOb3cgdGhlIGluc3RhbGwuZXhlIHZlcnNpb24gaXMgaW5jbHVkZWQgdGhhdCBpcyB0aGUgc2FtZSBhcyB0aGUgVmltIHZlcnNpb24uCitUaGlzIGFsc28gc3VwcG9ydHMgbG9uZyBmaWxlIG5hbWVzIHdoZXJlIHBvc3NpYmxlLgorCitXaGVuIHJlY29yZGluZywgYW5kIHN0b3BwaW5nIHdoaWxlIGluIEluc2VydCBtb2RlIHdpdGggQ1RSTC1PIHEsIHRoZSBDVFJMLU8KK3dvdWxkIGFsc28gYmUgcmVjb3JkZWQuCisKKzMyYml0IERPUyB2ZXJzaW9uOiAidmltIFxmaWxlIiwgd2hpbGUgaW4gYSBzdWJkaXJlY3RvcnksIHJlc3VsdGVkIGluICJuZXcKK2ZpbGUiIGZvciAiZmlsZSIgaW4gdGhlIGxvY2FsIGRpcmVjdG9yeSwgd2hpbGUgIlxmaWxlIiBkaWQgZXhpc3QuICBXaGVuCisiZmlsZSIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGV4aXN0ZWQsIHRoaXMgZGlkbid0IGhhcHBlbi4KKworTVNET1M6IE1vdXNlIGNvdWxkIG5vdCBnbyBiZXlvbmQgODAgY29sdW1ucyBpbiAxMzIgY29sdW1ucyBtb2RlLiAoWW91bmcpCisKKyJtYWtlIHRlc3QiIGZhaWxlZCBpbiB0aGUgUmVkSGF0IFJQTSwgYmVjYXVzZSBjb21wYXRpYmxlIGlzIG9mZiBieSBkZWZhdWx0LgorCitJbiBJbnNlcnQgbW9kZSA8Qy1PPjxDLVc+PEMtVz4gY2hhbmdlcyB0byBvdGhlciB3aW5kb3csIGJ1dCB0aGUgc3RhdHVzIGJhcnMKK3dlcmUgbm90IHVwZGF0ZWQgdW50aWwgYW5vdGhlciBjaGFyYWN0ZXIgd2FzIHR5cGVkLgorCitNU0RPUzogZW52aXJvbm1lbnQgb3B0aW9ucyBpbiBsb3dlcmNhc2UgZGlkbid0IHdvcmssIGFsdGhvdWdoIHRoZXkgZGlkIGluIHRoZQorV2luMzIgdmVyc2lvbnMuIChOZWdyaSkKKworQWZ0ZXIgIjpub2hsc2VhcmNoIiwgYSB0YWcgY29tbWFuZCBzd2l0Y2hlZCBoaWdobGlnaHRpbmcgYmFjayBvbi4KKworV2hlbiB1c2luZyAiYXBwZW5kIiBjb21tYW5kIGFzIHRoZSBsYXN0IGxpbmUgaW4gYW4gYXV0b2NvbW1hbmQsIFZpbSB3b3VsZAorY3Jhc2guCisKK1JJU0NPUzogVGhlIHNjcm9sbCBidW1wZXJzICg/KSB3ZXJlIG5vdCB3b3JraW5nIHByb3Blcmx5LiAoTGVvbmFyZCkKKworInpsIiBhbmQgInpoIiBjb3VsZCBtb3ZlIHRoZSBjdXJzb3IsIGJ1dCB0aGlzIGRpZG4ndCBzZXQgdGhlIGNvbHVtbiBpbiB3aGljaAorZS5nLiwgImsiIHdvdWxkIG1vdmUgdGhlIGN1cnNvci4KKworV2hlbiBkb2luZyAiOnNldCBhbGwmIiB0aGUgdmFsdWUgb2YgJ3Njcm9sbCcgd2FzIG5vdCBzZXQgY29ycmVjdGx5LiAgVGhpcworY2F1c2VkIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBsYXRlciBzZXR0aW5nIGFueSBvdGhlciBudW1iZXIgb3B0aW9uLgorCitXaGVuICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIGhhcyBiZWVuIGRpc2FibGVkIHdpdGggIjpub2hsc2VhcmNoIiwKK2luY3JlbWVudGFsIHNlYXJjaGluZyB3b3VsZCBzd2l0Y2ggaXQgYmFjayBvbiB0b28gZWFybHkuCisKK1doZW4gbGlzdGluZyB0YWdzIGZvciAiOnRzZWxlY3QiLCBhbmQgdXNpbmcgYSBub24tc2VhcmNoIGNvbW1hbmQsIGFuZCB0aGUgbGFzdAorY2hhcmFjdGVyIHdhcyBlcXVhbCB0byB0aGUgZmlyc3QgKGUuZy4sICI5OSIpLCB0aGUgbGFzdCBjaGFyIHdvdWxkIG5vdCBiZQorc2hvd24uCisKK1doZW4gc2VhcmNoaW5nIGZvciB0YWdzIHdpdGggIjp0YWciIFZpbSB3b3VsZCBhc3N1bWUgdGhhdCBhbGwgbWF0Y2hlcyBoYWQgYmVlbgorZm91bmQgd2hlbiB0aGVyZSB3ZXJlIHN0aWxsIG1vcmUgKGUuZy4gZnJvbSBhbm90aGVyIHRhZ3MgZmlsZSkuCisKK1dpbjMyOiBEaWRuJ3QgcmVjb2duaXplICJjOlwiIChlLmcuLCBpbiB0YWdzIGZpbGUpIGFzIGFic29sdXRlIHBhdGggd2hlbgordXBwZXIvbG93ZXJjYXNlIHdhcyBkaWZmZXJlbnQuCisKK1NvbWUgeHRlcm1zIChEZWJpYW4pIHNlbmQgPEVzYz5PSCBmb3IgSE9NRSBhbmQgPEVzYz5PRiBmb3IgRU5ELiAgQWRkZWQgdGhlc2UKK3RvIHRoZSBidWlsdGluLXh0ZXJtLgorCitJbiBleCBtb2RlLCBhbnkgQ1Igd2FzIHNlZW4gYXMgdGhlIGVuZCBvZiB0aGUgbGluZS4gIE9ubHkgYSBOTCBzaG91bGQgYmUKK2hhbmRsZWQgdGhhdCB3YXkuICBicm9rZSAiOnMvZm9vL3NvbWVeTXRleHQvIi4KKworSW4gbWVudS52aW0sIGEgdm1lbnUgd2FzIHVzZWQgdG8gb3ZlcnJpZGUgYW4gYW1lbnUuICBUaGF0IGRpZG4ndCB3b3JrLCBiZWNhdXNlCit0aGUgc3lzdGVtIG1lbnUgZmlsZSBkb2Vzbid0IG92ZXJ3cml0ZSBleGlzdGluZyBtZW51cy4gIEFkZGVkIGV4cGxpY2l0IHZ1bm1lbnUKK3RvIHNvbHZlIHRoaXMuCisKK0NvbmZpZ3VyZSBjaGVjayBmb3IgdGVybWluYWwgbGlicmFyeSBjb3VsZCBmaW5kIGEgbGlicmFyeSB0aGF0IGRvZXNuJ3Qgd29yayBhdAorcnVudGltZSAoU29sYXJpczogc2hhcmVkIGxpYnJhcnkgbm90IGZvdW5kKS4gIEFkZGVkIGEgY2hlY2sgdGhhdCBhIHByb2dyYW0KK3dpdGggdGdvdG8oKSBjYW4gcnVuIGNvcnJlY3RseS4KKworVW5peDogImVjaG8gLW4iIGluIHRoZSBNYWtlZmlsZSBkb2Vzbid0IHdvcmsgb24gYWxsIHN5c3RlbXMsIGNhdXNpbmcgZXJyb3JzCitjb21waWxpbmcgcGF0aGRlZi5jLiAgUmVwbGFjZWQgaXQgd2l0aCAidHIiLgorCitQZXJsOiBET19KT0lOIHdhcyByZWRlZmluZWQgYnkgUGVybC4gIFVuZGVmaW5lZCBpdCBpbiB0aGUgcGVybCBmaWxlcy4KKworVmFyaW91cyBYSU0gYW5kIG11bHRpLWJ5dGUgZml4ZXM6CistIEZpeCB1c2VyIGNhbm5vdCBzZWUgaGlzIGxhbmd1YWdlIHdoaWxlIGhlIGlzIHR5cGluZyBoaXMgbGFuZ3VhZ2Ugd2l0aAorICBvZmYtdGhlLXNwb3QgbWV0aG9kLiAoTmFnYW5vKQorLSBGaXggcHJlZWRpdCBwb3NpdGlvbiB1c2luZyB0ZXh0L2VkaXQgYXJlYSAodXNpbmcgZ3VpLndpZCkuIChOYWdhbm8pCistIHJlbW92ZSAnZml4IGRlYWQga2V5JyBjb2Rlcy4gSXQgd2FzIG5lZWRlZCBzaW5jZSBYTkZvY3VzV2luZG93IHdhcworICAieDExX3dpbmRvdyIsIFhORm9jdXNXaW5kb3cgaXMgbm93IGd1aS53aWQuIChOYWdhbm8pCistIFJlbW92ZSBzb21lIGNvbXBpbGUgd2FybmluZ3MgYW5kIGZpeCB0eXBvcy4gKE5hbXNoKQorLSBGb3Igc3RhdHVzIGFyZWEsIGNoZWNrIHRoZSBndGsrIHZlcnNpb24gd2hpbGUgVmltIHJ1bnMuICBJIGJlbGlldmUgaXQgaXMKKyAgYmV0dGVyIHRoYW4gY29tcGlsZSB0aW1lIGNoZWNrLiAoTmFtc2gpCistIFJlbW92ZSBvbmUgRklYTUUgZm9yIGd0aysteGltLiAoTmFtc2gpCistIFhJTTogRGVhZCBrZXlzIGRpZG4ndCB3b3JrIGZvciBDemVjaC4gKFZ5c2tvdnNreSkKKy0gTXVsdGlieXRlOiBJZiB1c2VyIGlucHV0IG9ubHkgM2J5dGUgc3VjaCBhcyBtYjFfbWIyX2VuZyBvciBlbmdfbWIxX21iMiBWSU0KKyAgY291bGQgY29udmVydCBpdCB0byBzcGVjaWFsIGNoYXJhY3Rlci4gKE5hbSkKKy0gQXRoZW5hL01vdGlmIHdpdGggWElNOiBmaXggcHJlZWRpdCBhcmVhLiAoTmFtKQorLSBYSU06IENvbXBvc2VkIHN0cmluZ3Mgd2VyZSBzb21ldGltZXMgaWdub3JlZC4gIFZpbSBjcmFzaGVkIHdoZW4gY29tcG9zZQorICBzdHJpbmcgd2FzIGxvbmdlciB0aGFuIDI1NiBieXRlcy4gIElNJ3MgZ2VvbWV0cnkgY29udHJvbCBpcyBmaXhlZC4gKE5hbSwKKyAgTmFnYW5vKQorLSBXaW4zMiBtdWx0aS1ieXRlOiBob2xsb3dlZCBjdXJzb3Igd2lkdGggb24gYSBkb3VibGUgYnl0ZSBjaGFyIHdhcyB3cm9uZy4KKyAgKE5hZ2FubykKKy0gV2hlbiB0aGVyZSBpcyBubyBHVUksIHNlbGVjdGluZyBYSU0gY2F1c2VkIGNvbXBpbGF0aW9uIHByb2JsZW1zLgorICBBdXRvbWF0aWNhbGx5IGRpc2FibGUgWElNIHdoZW4gdGhlcmUgaXMgbm8gR1VJIGluIGNvbmZpZ3VyZS4KKy0gTW90aWYgYW5kIEF0aGVuYTogV2hlbiBjb21waWxlZCB3aXRoIFhJTSwgYnV0IHRoZSBpbnB1dCBtZXRob2Qgd2FzIG5vdAorICBlbmFibGVkLCB0aGVyZSB3b3VsZCBzdGlsbCBiZSBhIHN0YXR1cyBsaW5lLiAgTm93IHRoZSBzdGF0dXMgbGluZSBpcyBnb25lIGlmCisgIHRoZSBpbnB1dCBtZXRob2QgZG9lc24ndCB3b3JrLiAoTmFtKQorCitXaW4zMjogdG9vbHRpcCB3YXMgbm90IHJlbW92ZWQgd2hlbiBzZWxlY3RpbmcgYSBwYXJlbnQgbWVudSAoaXQgd2FzIHdoZW4KK3NlbGVjdGluZyBhIG1lbnUgZW50cnkpLiAoTmVncmkpCisKK1VuaXggd2l0aCBYOiBTb21lIHN5c3RlbXMgY3Jhc2ggb24gZXhpdCwgYmVjYXVzZSBvZiB0aGUgWHRDbG9zZURpc3BsYXkoKSBjYWxsLgorUmVtb3ZlZCBpdCwgaXQgc2hvdWxkIG5vdCBiZSBuZWNlc3Nhcnkgd2hlbiBleGl0aW5nLgorCitXaW4zMjogQ3Jhc2ggb24ga2V5cHJlc3Mgd2hlbiBjb21waWxlZCB3aXRoIEJvcmxhbmQgQysrLiAoQWFyb24pCisKK1doZW4gY2hlY2tpbmcgZm9yIE1vdGlmIGxpYnJhcnkgZmlsZXMsIHByZWZlciB0aGUgc2FtZSBsb2NhdGlvbiBhcyB0aGUgaW5jbHVkZQorZmlsZXMgKHdpdGggImluY2x1ZGUiIHJlcGxhY2VkIHdpdGggImxpYiIpIGFib3ZlIGFub3RoZXIgZW50cnkuCisKK0F0aGVuYSBHVUk6IENoYW5nZWQgIlh0T2Zmc2V0KCkiIGluIGd1aV9hdF9mcy5jIHRvICJYdE9mZnNldE9mKCkiLCBsaWtlIGl0J3MKK3VzZWQgaW4gZ3VpX3gxMS5jLgorCitXaW4zMjogV2hlbiB0ZXN0aW5nIGZvciBhIHRpbWVzdGFtcCBvZiBhIGZpbGUgb24gZmxvcHB5LCB3b3VsZCBnZXQgYSBkaWFsb2cKK2JveCB3aGVuIHRoZSBmbG9wcHkgaGFzIGJlZW4gcmVtb3ZlZC4gIE5vdyByZXR1cm4gd2l0aCBhbiBlcnJvci4gIChOZWdyaSkKKworV2luMzIgT0xFOiBXaGVuIGZvcmNlZCB0byBjb21lIHRvIHRoZSBmb3JlZ3JvdW5kLCBhIG1pbmltaXplZCB3aW5kb3cgd2FzIHN0aWxsCittaW5pbWl6ZWQsIG5vdyBpdCdzIHJlc3RvcmVkLiAoWml2a292KQorCitUaGVyZSB3YXMgbm8gY2hlY2sgZm9yIGEgcG9zaXRpdmUgJ3NoaWZ0d2lkdGgnLiAgQSBuZWdhdGl2ZSB2YWx1ZSBjb3VsZCBjYXVzZQorYSBoYW5ndXAsIGEgemVybyB2YWx1ZSBhIGNyYXNoLgorCitBdGhlbmEgR1VJOiBob3Jpem9udGFsIHNjcm9sbGJhciB3YXNuJ3QgdXBkYXRlZCBjb3JyZWN0bHkgd2hlbiBjbGlja2luZyByaWdodAorb3IgbGVmdCBvZiB0aGUgdGh1bWIuCisKK1doZW4gbWFraW5nIGEgVmlzdWFsLWJsb2NrIHNlbGVjdGlvbiBpbiBvbmUgd2luZG93LCBhbmQgdHJ5aW5nIHRvIHNjcm9sbAorYW5vdGhlciwgY291bGQgY2F1c2UgZXJyb3JzIGZvciBhY2Nlc3Npbmcgbm9uLWV4aXN0ZW50IGxpbmUgbnVtYmVycy4KKworV2hlbiAnbWF0Y2hwYWlycycgY29udGFpbnMgImA6JyIsIGp1bXBpbmcgZnJvbSB0aGUgYCB0byB0aGUgJyBkaWRuJ3Qgd29yaworcHJvcGVybHkuCisKK0NoYW5nZWQgJ1wiJyB0byAnIicgdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdpdGggb2xkIEMgY29tcGlsZXJzLgorCitUaGUgY29tbWFuZCBsaW5lIGV4cGFuc2lvbiBmb3IgbWFwcGluZ3MgY2F1c2VkIGEgc2NyaXB0IHdpdGggYSBUQUIgYmV0d2VlbiBsaHMKK2FuZCByaHMgb2YgYSBtYXAgY29tbWFuZCB0byBmYWlsLiAgQXNzdW1lIHRoZSBUQUIgaXMgdG8gc2VwYXJhdGUgbGhzIGFuZCByaHMKK3doZW4gdGhlcmUgYXJlIG5vIG1hcHBpbmdzIHRvIGV4cGFuZC4KKworV2hlbiBlZGl0aW5nIGEgZmlsZSB3aXRoIHZlcnkgbG9uZyBsaW5lcyB3aXRoICdzY3JvbGxvZmYnIHNldCwgImoiIHdvdWxkCitzb21ldGltZXMgZW5kIHVwIGluIGEgbGluZSB3aGljaCB3YXNuJ3QgZGlzcGxheWVkLgorCitXaGVuIGVkaXRpbmcgYSByZWFkLW9ubHkgZmlsZSwgaXQgd2FzIGNvbXBsZXRlbHkgcmVhZCBpbnRvIG1lbW9yeSwgZXZlbiB3aGVuCitpdCB3b3VsZCBub3QgZml0LiAgTm93IGNyZWF0ZSBhIHN3YXAgZmlsZSBmb3IgYSByZWFkLW9ubHkgZmlsZSB3aGVuIHJ1bm5pbmcKK291dCBvZiBtZW1vcnkgd2hpbGUgcmVhZGluZyB0aGUgZmlsZS4KKworV2hlbiB1c2luZyAiOnNldCBjaW5vPXtzLGUtcyIsIGEgbGluZSBhZnRlciAifSBlbHNlIHsiIHdhcyBub3QgaW5kZW50ZWQKK3Byb3Blcmx5LiAgQWxzbyBhZGRlZCBhIGNoZWNrIGZvciB0aGlzIGluIHRlc3QzLmluLgorCitUaGUgSGVicmV3IG1hcHBpbmcgZm9yIHRoZSBjb21tYW5kIGxpbmUgd2FzIHJlbWVtYmVyZWQgZm9yIHRoZSBuZXh0IGNvbW1hbmQKK2xpbmUuICBUaGF0IGlzbid0IHZlcnkgdXNlZnVsLCBhIGNvbW1hbmQgaXMgbm90IEhlYnJldy4gKEtvbCkKKworV2hlbiBjb21wbGV0aW5nIGZpbGUgbmFtZXMgd2l0aCBlbWJlZGRlZCBzcGFjZXMsIGxpa2UgIlByb2dyYW1cIGZpbGVzIiwgdGhpcworZGlkbid0IHdvcmsuICBBbHNvIGZvciB1c2VyIGNvbW1hbmRzLiAgTW92ZWQgYmFja3NsYXNoX2hhbHZlKCkgZG93biB0bworbWNoX2V4cGFuZHBhdGgoKS4KKworV2hlbiB1c2luZyAic2V0IG1vdXNlPWEiIGluIEV4IG1vZGUsIG1vdXNlIGV2ZW50cyB3ZXJlIGhhbmRsZWQgbGlrZSB0eXBlZAordGV4dC4gIFRoZW4gdHlwaW5nICJxdWl0IiBzY3Jld2VkIHVwIHRoZSBtb3VzZSBiZWhhdmlvciBvZiB0aGUgeHRlcm0uCisKK1doZW4gcmVwZWF0aW5nIGFuIGluc2VydCB3aXRoICIuIiB0aGF0IGNvbnRhaW5zIGEgQ1RSTC1ZLCBhIG51bWJlciA1IHdhcworaW5zZXJ0ZWQgYXMgIjA1MyIuCisKK1lhbmtpbmcgYSBWaXN1YWwgYXJlYSwgd2l0aCB0aGUgY3Vyc29yIHBhc3QgdGhlIGxpbmUsIGRpZG4ndCBtb3ZlIHRoZSBjdXJzb3IKK2JhY2sgb250byB0aGUgbGluZS4gIFNhbWUgZm9yICJ+IiwgInUiLCAiVSIgYW5kICJnPyIKKworV2luMzI6IERlZmF1bHQgZm9yICdncmVwcHJnJyBjb3VsZCBiZSAiZmluZHN0ciAvbiIgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbm8KK2ZpbmRzdHIuZXhlIChXaW5kb3dzIDk1KS4gIENoZWNrIGlmIGl0IGV4aXN0cywgYW5kIGZhbGwgYmFjayB0byAiZ3JlcCAtbiIgaWYKK2l0IGRvZXNuJ3QuCisKK0JlY2F1c2UgZ3VpX21vdXNlX21vdmVkKCkgaW5zZXJ0ZWQgYSBsZWZ0bW91c2UgY2xpY2sgaW4gdGhlIGlucHV0IGJ1ZmZlciwKK3JlbWFwcGluZyBhIGxlZnRtb3VzZSBjbGljayBjYXVzZWQgc3RyYW5nZSBlZmZlY3RzLiAgTm93IEluc2VydCBhbm90aGVyIGNvZGUKK2luIHRoZSBpbnB1dCBidWZmZXIuICBBbHNvIGluc2VydCBhIGxlZnRtb3VzZSByZWxlYXNlLCB0byBhdm9pZCB0aGUgcHJvYmxlbQord2l0aCAiOm1hcCA8TGVmdE1vdXNlPiBsIiB0aGF0IHRoZSBuZXh0IHJlbGVhc2UgaXMgc2VlbiBhcyB0aGUgcmVsZWFzZSBmb3IgdGhlCitmb2N1cyBjbGljay4KKworV2l0aCAnd3JhcCcgb24sIHdoZW4gdXNpbmcgYSBsaW5lIHRoYXQgZG9lc24ndCBmaXQgb24gdGhlIHNjcmVlbiwgaWYgdGhlIHN0YXJ0CitvZiB0aGUgVmlzdWFsIGFyZWEgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgc2NyZWVuLCB0aGVyZSB3YXMgbm8KK2hpZ2hsaWdodGluZy4gIEFsc28sICdzaG93YnJlYWsnIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KKworRE9TLCBXaW4zMjogQSBwYXR0ZXJuICJbMC05XVwrIiBkaWRuJ3Qgd29yayBpbiBhdXRvY29tbWFuZHMuCisKK1doZW4gY3JlYXRpbmcgYSBzd2FwIGZpbGUgZm9yIGEgYnVmZmVyIHdoaWNoIGlzbid0IHRoZSBjdXJyZW50IGJ1ZmZlciwgY291bGQKK2dldCBhIG1peHVwIG9mIHNob3J0IGZpbGUgbmFtZSwgcmVzdWx0aW5nIGluIGEgbG9uZyBmaWxlIG5hbWUgd2hlbiBhIHNob3J0CitmaWxlIG5hbWUgd2FzIHJlcXVpcmVkLiAgbWFrZXN3YXBuYW1lKCkgd2FzIGNhbGxpbmcgbW9kbmFtZSgpIGluc3RlYWQgb2YKK2J1Zl9tb2RuYW1lKCkuCisKK1doZW4gYSBmdW5jdGlvbiBjYXVzZWQgYW4gZXJyb3IsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSB3YXMgdmVyeSBsb25nIGJlY2F1c2UKK29mIHJlY3Vyc2l2ZW5lc3MsIHRoaXMgd291bGQgY2F1c2UgYSBjcmFzaC4KKworJ3N1ZmZpeGVzJyB3ZXJlIGFsd2F5cyBjb21wYXJlZCB3aXRoIG1hdGNoaW5nIGNhc2UuICBGb3IgTVMtRE9TLCBXaW4zMiBhbmQKK09TLzIgY2FzZSBpcyBub3cgaWdub3JlZC4KKworVGhlIHVzZSBvZiBDSEFSQklUUyBpbiByZWdleHAuYyBkaWRuJ3Qgd29yayBvbiBzb21lIExpbnV4LiAgRG9uJ3QgdXNlIGl0LgorCitXaGVuIGdlbmVyYXRpbmcgYSBzY3JpcHQgZmlsZSwgJ2Nwbycgd2FzIG1hZGUgZW1wdHkuICBUaGlzIGNhdXNlZCBiYWNrc2xhc2hlcwordG8gZGlzYXBwZWFyIGZyb20gbWFwcGluZ3MuICBTZXQgaXQgdG8gIkIiIHRvIGF2b2lkIHRoYXQuCisKK0xvdHMgb2YgdHlwb3MgaW4gdGhlIGRvY3VtZW50YXRpb24uIChDYW1wYmVsbCkKKworV2hlbiBlZGl0aW5nIGFuIGV4aXN0aW5nIChoaWRkZW4pIGJ1ZmZlciwganVtcCB0byB0aGUgbGFzdCB1c2VkIGN1cnNvcgorcG9zaXRpb24uIChNYWRzZW4pCisKK09uIGEgU3VuIHRoZSB4dGVybSBzY3JlZW4gd2FzIG5vdCByZXN0b3JlZCBwcm9wZXJseSB3aGVuIHN1c3BlbmRpbmcuIChNYWRzZW4pCisKK1doZW4gJFZJTUlOSVQgaXMgcHJvY2Vzc2VkLCAnbm9jb21wYXRpYmxlJyB3YXMgb25seSBzZXQgYWZ0ZXIgcHJvY2Vzc2luZyBpdC4KKworVW5peDogUG9sbGluZyBmb3IgYSBjaGFyYWN0ZXIgd2Fzbid0IGRvbmUgZm9yIEdQTSwgU25pZmYgYW5kIFh0ZXJtIGNsaXBib2FyZAorYWxsIHRvZ2V0aGVyLiAgQ2xlYW5lZCB1cCB0aGUgY29kZSBmb3IgdXNpbmcgc2VsZWN0KCkgdG9vLgorCitXaGVuIGV4ZWN1dGluZyBleHRlcm5hbCBjb21tYW5kcyBmcm9tIHRoZSBHVUksIHNvbWUgdHlwZWFoZWFkIHdhcyBsb3N0LiAgQWRkZWQKK3NvbWUgY29kZSB0byByZWdhaW4gYXMgbXVjaCB0eXBlYWhlYWQgYXMgcG9zc2libGUuCisKK1doZW4gdGhlIHdpbmRvdyBoZWlnaHQgaXMgNSBsaW5lcyBvciBmZXdlciwgPFBhZ2VEb3duPiBkaWRuJ3QgdXNlIGEgb25lLWxpbmUKK292ZXJsYXAsIHdoaWxlIDxQYWdlVXA+IGRvZXMuICBNYWRlIHN1cmUgdGhhdCA8UGFnZVVwPiB1c2VzIHRoZSBzYW1lIG92ZXJsYXAKK2FzIDxQYWdlRG93bj4sIHNvIHRoYXQgdXNpbmcgdGhlbSBib3RoIGFsd2F5cyBkaXNwbGF5cyB0aGUgc2FtZSBsaW5lcy4KKworUmVtb3ZlZCBhIGZldyB1bnVzZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgKGZvdW5kIHdpdGggbGludCkuCisKK0RpY3Rpb25hcnkgY29tcGxldGlvbiBkaWRuJ3QgdXNlICdpbmZlcmNhc2UnLiAoUmF1bCkKKworQ29uZmlndXJlIHRlc3RzIGZhaWxlZCB3aGVuIHRoZSBQZXJsIGxpYnJhcnkgd2FzIG5vdCBpbiBMRF9MSUJSQVJZX1BBVEguCitEb24ndCB1c2UgdGhlIFBlcmwgbGlicmFyeSBmb3IgY29uZmlndXJlIHRlc3RzLCBhZGQgaXQgdG8gdGhlIGxpbmtlciBsaW5lIG9ubHkKK3doZW4gbGlua2luZyBWaW0uCisKK1doZW4gdXNpbmcgbmN1cnNlcy90ZXJtaW5mbywgY291bGQgZ2V0IGEgJ3RfU2YnIGFuZCAndF9TYicgdGVybWNhcCBlbnRyeSB0aGF0CitoYXMgIiVkIiBpbnN0ZWFkIG9mICIlcDElZCIuICBUaGUgbGlnaHQgYmFja2dyb3VuZCBjb2xvcnMgZGlkbid0IHdvcmsgdGhlbi4KKworR1RLIEdVSSB3aXRoIG5jdXJzZXM6IENyYXNoZWQgd2hlbiBzdGFydGluZyB1cCBpbiB0cHV0cygpLiAgRG9uJ3QgdXNlIHRwdXRzKCkKK3doZW4gdGhlIEdVSSBpcyBhY3RpdmUuCisKK0NvdWxkIHVzZSB0aGUgIjpsZXQiIGNvbW1hbmQgdG8gc2V0IHRoZSAiY291bnQiLCAic2hlbGxfZXJyb3IiIGFuZCAidmVyc2lvbiIKK3ZhcmlhYmxlcywgYnV0IHRoYXQgZGlkbid0IHdvcmsuICBHaXZlIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gc2V0Cit0aGVtLgorCitPbiBGcmVlQlNEIDMuMCwgdGNsc2ggaXMgY2FsbGVkIHRjbHNoOC4wLiAgQWRqdXN0ZWQgY29uZmlndXJlLmluIHRvIGZpbmQgaXQuCisKK1doZW4gVmltIGlzIGxpbmtlZCB3aXRoIC1sbmN1cnNlcywgYnV0IHB5dGhvbiB1c2VzIC1sdGVybWNhcCwgdGhpcyBjYXVzZXMKK3Ryb3VibGU6ICJPT1BTIi4gIENvbmZpZ3VyZSBub3cgcmVtb3ZlcyB0aGUgLWx0ZXJtY2FwLgorCis6QCIgYW5kIDoqIiBkaWRuJ3Qgd29yayBwcm9wZXJseSwgYmVjYXVzZSB0aGUgIiB3YXMgcmVjb2duaXplZCBhcyB0aGUgc3RhcnQgb2YKK2EgY29tbWVudC4KKworV2luMzJzIEdVSTogTWluaW1pemluZyB0aGUgY29uc29sZSB3aGVyZSBhIGZpbHRlciBjb21tYW5kIHJ1bnMgaW4gY2F1c2VkCit0cm91YmxlIGZvciBkZXRlY3RpbmcgdGhhdCB0aGUgZmlsdGVyIGNvbW1hbmQgaGFzIGZpbmlzaGVkLiAoTmVncmkpCisKK0FmdGVyIGV4ZWN1dGluZyBhIGZpbHRlciBjb21tYW5kIGZyb20gYW4geHRlcm0sIHRoZSBtb3VzZSB3b3VsZCBiZSBkaXNhYmxlZC4KK0l0IHdvdWxkIHdvcmsgYWdhaW4gYWZ0ZXIgY2hhbmdpbmcgdGhlIG1vZGUuCisKK01hYyBHVUk6IENyYXNoZWQgaW4gbmV3ZW52KCkuIChTdC1BbWFudCkKKworVGhlIG1lbnVzIGFuZCBtYXBwaW5ncyBpbiBtc3dpbi52aW0gZGlkbid0IGhhbmRsZSB0ZXh0IGVuZGluZyBpbiBhIE5MCitjb3JyZWN0bHkuIChBY2V2ZWRvKQorCitUaGUgIjprIiBjb21tYW5kIGRpZG4ndCBjaGVjayBpZiBpdCBoYWQgYSB2YWxpZCBhcmd1bWVudCBvciBleHRyYSBjaGFyYWN0ZXJzLgorTm93IGdpdmUgYSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2UuIChXZWJiKQorCitPbiBTR0ksIHRoZSBzaWduYWwgZnVuY3Rpb24gZG9lc24ndCBhbHdheXMgaGF2ZSB0aHJlZSBhcmd1bWVudHMuICBDaGVjayBmb3IKK3N0cnVjdCBzaWdjb250ZXh0IHRvIGZpbmQgb3V0LiAgTWlnaHQgc3RpbGwgYmUgd3JvbmcuLi4KKworQ291bGQgY3Jhc2ggd2hlbiB1c2luZyAnaGxzZWFyY2gnIGFuZCBzZWFyY2ggcGF0dGVybiBpcyAiXiIuCisKK1doZW4gc2VhcmNoIHBhdHRlcm5zIHdlcmUgc2F2ZWQgYW5kIHJlc3RvcmVkLCBzdGF0dXMgb2Ygbm9faGxzZWFyY2ggd2FzIG5vdAorYWxzbyBzYXZlZCBhbmQgcmVzdG9yZWQgKGZyb20gIjpub2hsc2VhcmNoIiBjb21tYW5kKS4KKworV2hlbiB1c2luZyBzZXRsaW5lKCkgdG8gbWFrZSBhIGxpbmUgc2hvcnRlciwgdGhlIGN1cnNvciBwb3NpdGlvbiB3YXMgbm90CithZGp1c3RlZC4KKworTVMtRE9TIGFuZCBXaW45NTogV2hlbiB0cnlpbmcgdG8gZWRpdCBhIGZpbGUgYW5kIGFjY2lkZW50YWxseSBhZGRpbmcgYSBzbGFzaAorb3IgYmFja3NsYXNoIGF0IHRoZSBlbmQsIHRoZSBmaWxlIHdhcyBkZWxldGVkLiAgUHJvYmFibHkgd2hlbiB0cnlpbmcgdG8gY3JlYXRlCit0aGUgc3dhcCBmaWxlLiAgRXhwbGljaXRseSBjaGVjayBmb3IgYSB0cmFpbGluZyBzbGFzaCBvciBiYWNrc2xhc2ggYmVmb3JlCit0cnlpbmcgdG8gcmVhZCBhIGZpbGUuCisKK1gxMSBHVUk6IFdoZW4gc3RhcnRpbmcgdGhlIEdVSSBmYWlsZWQgYW5kIHJlY2VpdmVkIGEgZGVhZGx5IHNpZ25hbCB3aGlsZQorc2V0dGluZyB0aGUgdGl0bGUsIHdvdWxkIGxvY2sgdXAgd2hlbiB0cnlpbmcgdG8gZXhpdCwgYmVjYXVzZSB0aGUgdGl0bGUgaXMKK3Jlc2V0IGFnYWluLiAgQXZvaWQgdXNpbmcgbWNoX3NldHRpdGxlKCkgcmVjdXJzaXZlbHkuCisKK1gxMSBHVUk6IFdoZW4gc3RhcnRpbmcgdGhlIEdVSSBmYWlscywgYW5kIHRoZW4gdHJ5aW5nIGl0IGFnYWluLCB3b3VsZCBjcmFzaCwKK2JlY2F1c2UgYXJndltdIGhhcyBiZWVuIGZyZWVkIGFuZCB4MTFfZGlzcGxheSB3YXMgcmVzZXQgdG8gTlVMTC4KKworV2luMzI6IFdoZW4gJEhPTUUgd2FzIHNldCwgd291bGQgcHV0ICJ+dXNlciIgaW4gdGhlIHN3YXAgZmlsZSwgd2hpY2ggd291bGQKK25ldmVyIGNvbXBhcmUgd2l0aCBhIGZpbGUgbmFtZSwgYW5kIG5ldmVyIGNhdXNlIHRoZSBhdHRlbnRpb24gbWVzc2FnZS4gIFB1dAordGhlIGZ1bGwgcGF0aCBpbiB0aGUgc3dhcCBmaWxlIGluc3RlYWQuCisKK1dpbjMyIGNvbnNvbGU6IFRoZXJlIHdlcmUgZnVubnkgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIHRoZSAidmltIC1yIiBzd2FwCitmaWxlcyBtZXNzYWdlIChkaXJlY3Qgb3V0cHV0IG9mIENSIENSIExGKS4KKworRE9TIDMyIGJpdDogInZpbSAtciIgcHV0IHRoZSB0ZXh0IGF0IHRoZSB0b3Agb2YgdGhlIHdpbmRvdy4KKworR1VJOiBXaXRoICdtb3VzZWZvY3VzJyBzZXQsIGdvdCBtb3VzZSBjb2RlcyBhcyB0ZXh0IHdpdGggIiFzbGVlcCAxMDAiIG9yICJRIi4KKworTW90aWYgYW5kIFdpbjMyIEdVSTogV2hlbiBjaGFuZ2luZyAnZ3VpZm9udCcgdG8gYSBmb250IG9mIHRoZSBzYW1lIHNpemUgdGhlCitzY3JlZW4gd2Fzbid0IHJlZHJhd24uCisKK1VuaXg6IFdoZW4gdXNpbmcgIjptYWtlIiwganVtcGluZyB0byBhIGZpbGUgYi5jLCB3aGljaCBpcyBhbHJlYWR5IG9wZW4gYXMgYQorc3ltYm9saWMgbGluayBhLmMsIG9wZW5lZCBhIG5ldyBidWZmZXIgaW5zdGVhZCBvZiB1c2luZyB0aGUgZXhpc3Rpbmcgb25lLgorCitJbnNlcnRpbmcgdGV4dCBpbiB0aGUgY3VycmVudCBidWZmZXIgd2hpbGUgc291cmNpbmcgdGhlIC52aW1yYyBmaWxlIHdvdWxkCitjYXVzZSBhIGNyYXNoIG9yIGhhbmcuICBUaGUgbWVtZmlsZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyIHdhcyBuZXZlcgorYWxsb2NhdGVkLiAgTm93IGl0J3MgYWxsb2NhdGVkIGFzIHNvb24gYXMgc29tZXRoaW5nIGlzIHdyaXR0ZW4gaW4gdGhlIGJ1ZmZlci4KKworRE9TIDMyIGJpdDogImxpZ2h0Ymx1ZSIgYmFja2dyb3VuZCB3b3JrZWQgZm9yIHRleHQsIGJ1dCBub3QgZHJhd24gcGFydHMgd2VyZQorYmxhY2suCisKK0RPUzogQ29sb3JzIG9mIGNvbnNvbGUgd2VyZSBub3QgcmVzdG9yZWQgdXBvbiBleGl0aW5nLgorCitXaGVuIHJlY29yZGluZywgd2l0aCAnY21kaGVpZ2h0JyBzZXQgdG8gMiBhbmQgdHlwaW5nIEVzYz4gaW4gSW5zZXJ0IG1vZGUKK2NhdXNlZCB0aGUgInJlY29yZGluZyIgbWVzc2FnZSB0byBiZSBkb3VibGVkLgorCitTcHVyaW91cyAiZmlsZSBjaGFuZ2VkIiBtZXNzYWdlcyBjb3VsZCBoYXBwZW4gb24gV2luZG93cy4gIE5vdyB0b2xlcmF0ZSBhIG9uZQorc2Vjb25kIGRpZmZlcmVuY2UsIGxpa2UgZm9yIExpbnV4LgorCitHVUk6IFdoZW4gcmV0dXJuaW5nIGZyb20gRXggbW9kZSwgc2Nyb2xsYmFycyB3ZXJlIG5vdCB1cGRhdGVkLgorCitXaW4zMjogQ29weWluZyB0ZXh0IHRvIHRoZSBjbGlwYm9hcmQgY29udGFpbmluZyBhIDxDUj4sIHBhc3RpbmcgaXQgd291bGQKK3JlcGxhY2UgaXQgd2l0aCBhIDxOTD4gYW5kIGRyb3AgdGhlIG5leHQgY2hhcmFjdGVyLgorCitFbnRlcmluZyBhIGRvdWJsZSBieXRlIGNoYXJhY3RlciBkaWRuJ3Qgd29yayBpZiB0aGUgc2Vjb25kIGJ5dGUgaXMgaW4gW3hYb09dLgorKEVyaWMgTGVlKQorCit2aW1fcmVhbGxvYyB3YXMgYm90aCBkZWZpbmVkIGFuZCBoYWQgYSBwcm90b3R5cGUgaW4gcHJvdG8vbWlzYzIucHJvLiAgQ2F1c2VkCitjb25mbGljdHMgb24gU29sYXJpcy4KKworQSBwYXR0ZXJuIGluIGFuIGF1dG9jb21tYW5kIHdhcyB0cmVhdGVkIGRpZmZlcmVudGx5IG9uIERPUyBldCBhbC4gdGhhbiBvbgorVW5peC4gIE5vdyBpdCdzIHRoZSBzYW1lLCBhbHNvIHdoZW4gdXNpbmcgYmFja3NsYXNoZXMuCisKK1doZW4gdXNpbmcgPFRhYj4gdHdpY2UgZm9yIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uLCB3aXRob3V0IGEgbWF0Y2gsIHRoZSA8VGFiPgord291bGQgYmUgaW5zZXJ0ZWQuIChOZWdyaSkKKworQnVnIGluIE1TLVZpc3VhbCBDKysgNi4wIHdoZW4gY29tcGlsaW5nIGV4X2RvY21kLmMgd2l0aCBvcHRpbWl6YXRpb24uIChOZWdyaSkKKworVGVzdGluZyB0aGUgcmVzdWx0IG9mIG1rdGVtcCgpIGZvciBmYWlsdXJlIHdhcyB3cm9uZy4gIENvdWxkIGNhdXNlIGEgY3Jhc2guCisoUGV0ZXJzKQorCitHVUk6IFdoZW4gY2hlY2tpbmcgZm9yIGEgIi5ndmltcmMiIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBkaWRuJ3QgY2hlY2sKK2ZvciBhICJfZ3ZpbXJjIiBmaWxlIHRvby4KKworTW90aWYgR1VJOiBXaGVuIHVzaW5nIHRoZSBwb3B1cCBtZW51IGFuZCB0aGVuIGFkZGluZyBhbiBpdGVtIHRvIHRoZSBtZW51IGJhciwKK3RoZSBtZW51IGJhciB3b3VsZCBnZXQgdmVyeSBoaWdoLgorCitNb3VzZSBjbGlja3MgYW5kIHNwZWNpYWwga2V5cyAoZS5nLiBjdXJzb3Iga2V5cykgcXVpdCB0aGUgbW9yZSBwcm9tcHQgYW5kCitkaWFsb2dzLiAgTm93IHRoZXkgYXJlIGlnbm9yZWQuCisKK1doZW4gYXQgdGhlIG1vcmUtcHJvbXB0LCB4dGVybSBzZWxlY3Rpb24gZGlkbid0IHdvcmsuICBOb3cgdXNlIHRoZSAncicgZmxhZyBpbgorJ21vdXNlJyBhbHNvIGZvciB0aGUgbW9yZS1wcm9tcHQuCisKK1doZW4gc2VsZWN0aW5nIGEgVmlzdWFsIGFyZWEgb2YgbW9yZSB0aGFuIDEwMjMgbGluZXMsIHdpdGggJ2d1aW9wdGlvbnMnIHNldCB0bworImEiLCBjb3VsZCBtZXNzIHVwIHRoZSBkaXNwbGF5IGJlY2F1c2Ugb2YgYSBtZXNzYWdlIGluIGZyZWVfeWFuaygpLiAgUmVtb3ZlZAordGhhdCBtZXNzYWdlLCBleGNlcHQgZm9yIHRoZSBBbWlnYS4KKworTW92ZWQgYXV0by1zZWxlY3Rpb24gZnJvbSB1aV93cml0ZSgpIHRvIHRoZSBzY3JlZW4gdXBkYXRlIGZ1bmN0aW9ucy4gIEF2b2lkcwordW5leHBlY3RlZCBiZWhhdmlvciBmcm9tIGEgbG93LWxldmVsIGZ1bmN0aW9uLiAgQWxzbyBtYWtlcyB0aGUgZGlmZmVyZW50CitmZWVkYmFjayBvZiBvd25pbmcgdGhlIHNlbGVjdGlvbiBwb3NzaWJsZS4KKworVmkgaW5jb21wYXRpYmlsaXR5OiBVc2luZyAiaTxDUj4iIGluIGFuIGluZGVudCwgd2l0aCAnYWknIHNldCwgdXNlZCB0aGUKK29yaWdpbmFsIGluZGVudCBpbnN0ZWFkIG9mIHRydW5jYXRpbmcgaXQgYXQgdGhlIGN1cnNvci4gKFdlYmIpCisKKyI6ZWNobyB4IiBkaWRuJ3Qgc3RvcCBhdCAicSIgZm9yIHRoZSBtb3JlIHByb21wdC4KKworVmFyaW91cyBmaXhlcyBmb3IgTWFjaW50b3NoLiAoU3QtQW1hbnQpCisKK1doZW4gdXNpbmcgJ3NlbGVjdG1vZGUnIHNldCB0byAiZXhjbHVzaXZlIiwgc2VsZWN0aW5nIGEgd29yZCBhbmQgdGhlbiB1c2luZworQ1RSTC1dIGluY2x1ZGVkIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvci4KKworVXNpbmcgIjpsZXQgYTpuYW1lIiBpbiBhIGZ1bmN0aW9uIGNhdXNlZCBhIGNyYXNoLiAoV2ViYikKKworV2hlbiB1c2luZyAiOmFwcGVuZCIsIGFuIGVtcHR5IGxpbmUgZGlkbid0IHNjcm9sbCB1cC4KKworRE9TIGV0Yy46IEEgZmlsZSBuYW1lIHN0YXJ0aW5nIHdpdGggJyEnIGRpZG4ndCB3b3JrLiAgQWRkZWQgJyEnIHRvIGRlZmF1bHQgZm9yCisnaXNmbmFtZScuCisKK0JlT1M6IENvbXBpbGF0aW9uIHByb2JsZW0gd2l0aCBwcm90b3R5cGUgb2Ygc2tpcF9jbGFzc19uYW1lKCkuIChQcmljZSkKKworV2hlbiBkZWxldGluZyBtb3JlIHRoYW4gb25lIGxpbmUsIGUuZy4sIHdpdGggImRlIiwgY291bGQgc3RpbGwgdXNlICJVIgorY29tbWFuZCwgd2hpY2ggZGlkbid0IHdvcmsgcHJvcGVybHkgdGhlbi4KKworQW1pZ2E6IENvdWxkIG5vdCBjb21waWxlIGV4X2RvY21kLmMsIGl0IHdhcyBnZXR0aW5nIHRvbyBiaWcuICBNb3ZlZCBzb21lCitmdW5jdGlvbnMgdG8gZXhfY21kcy5jLgorCitUaGUgZXhwYW5kKCkgZnVuY3Rpb24gd291bGQgYWRkIGEgdHJhaWxpbmcgc2xhc2ggZm9yIGRpcmVjdG9yaWVzLgorCitEaWRuJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIGFzc2lnbiBhIHZhbHVlIHRvIGFuIGFyZ3VtZW50IG9mIGEKK2Z1bmN0aW9uLiAgKFdlYmIpCisKK01vdmVkIGluY2x1ZGluZyBzeXMvcHRlbS5oIHRvIGFmdGVyIHRlcm1pb3MuaC4gIE5lZWRlZCBmb3IgU2luaXguCisKK09MRSBpbnRlcmZhY2U6IERvbid0IGRlbGV0ZSB0aGUgb2JqZWN0IGluIENWaW1DRjo6UmVsZWFzZSgpIHdoZW4gdGhlIHJlZmVyZW5jZQorY291bnQgYmVjb21lcyB6ZXJvLiAoQ29yZGVsbCkKK1Zpc1ZpbSBjb3VsZCBzdGlsbCBjcmFzaCBvbiBleGl0LiAoRXJoYXJkdCkKKworImNhc2UgYTogY2FzZSBiOiIgKHR3byBjYXNlIHN0YXRlbWVudHMgaW4gb25lIGxpbmUpIGFsaWduZWQgd2l0aCB0aGUgc2Vjb25kCitjYXNlLiAgTm93IGl0IHVzZXMgb25lICdzdycgZm9yIGluZGVudC4gKFdlYmIpCisKK0ZvbnQgaW5pdGlhbGlzYXRpb24gd2Fzbid0IHJpZ2h0IGZvciBBdGhlbmEvTW90aWYgR1VJLiAgTW92ZWQgdGhlIGNhbGwgdG8KK2hpZ2hsaWdodF9ndWlfc3RhcnRlZCgpIGd1aV9tY2hfaW5pdCgpIHRvIGd1aV9tY2hfb3BlbigpLiAoTmFtKQorCitJbiBSZXBsYWNlIG1vZGUsIGJhY2tzcGFjaW5nIG92ZXIgYSBUQUIgYmVmb3JlIHdoZXJlIHRoZSByZXBsYWNlIG1vZGUgc3RhcnRlZAord2hpbGUgJ3N0cycgaXMgZGlmZmVyZW50IGZyb20gJ3RzJywgd291bGQgZGVsZXRlIHRoZSBUQUIuCisKK1dpbjMyIGNvbnNvbGU6IFdoZW4gZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzIGFuZCBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgdHdvCitjb25zb2xlIHNjcmVlbnMsIFZpbSB3b3VsZCBjb3B5IHRoZSB0ZXh0IGJldHdlZW4gdGhlIGJ1ZmZlcnMuICBUaGF0IGNhdXNlZCB0aGUKK3NjcmVlbiB0byBiZSBtZXNzZWQgdXAgZm9yIGJhY2t0aWNrIGV4cGFuc2lvbi4KKworIjp3aW5wb3MgLTEiIHRoZW4gIjp3aW5wb3MiIGdhdmUgd3JvbmcgZXJyb3IgbWVzc2FnZS4KKworV2luZG93cyBjb21tYW5kZXIgY3JlYXRlcyBmaWxlcyBjYWxsZWQgYzpcdG1wXCR3Y1xhYmMudHh0LiAgRG9uJ3QgcmVtb3ZlIHRoZQorYmFja3NsYXNoIGJlZm9yZSB0aGUgJC4gIEVudmlyb25tZW50IHZhcmlhYmxlcyB3ZXJlIG5vdCBleHBhbmRlZCBhbnl3YXksCitiZWNhdXNlIG9mIHRoZSBiYWNrc2xhc2ggYmVmb3JlIHRoZSBkb2xsYXIuCisKK1VzaW5nICItPSIgd2l0aCAiOnNldCIgY291bGQgcmVtb3ZlIGhhbGYgYSBwYXJ0IHdoZW4gaXQgY29udGFpbnMgYSAiXCwiLgorRS5nLiwgIjpzZXQgcGF0aCs9YVxcLGIiIGFuZCB0aGVuICJzZXQgcGF0aC09YiIgIHJlbW92ZWQgIixiIi4KKworV2hlbiBWaXN1YWxseSBzZWxlY3RpbmcgbGluZXMsIHdpdGggJ3NlbGVjdGlvbicgc2V0IHRvICJpbmNsdXNpdmUiLCBpbmNsdWRpbmcKK3RoZSBsYXN0IGNoYXIgb2YgdGhlIGxpbmUsICI8PCIgbW92ZWQgYW4gZXh0cmEgbGluZS4gIEFsc28gZm9yIG90aGVyIG9wZXJhdG9ycwordGhhdCBhbHdheXMgd29yayBvbiBsaW5lcy4KKworbGluay5zaCBjaGFuZ2VkICItbG5zbF9zIiB0byAiX3MiIHdoZW4gbG9va2luZyBmb3IgIm5zbCIgdG8gYmUgcmVtb3ZlZC4KK05vdyBpdCBvbmx5IHJlbW92ZSB3aG9sZSB3b3Jkcy4KKworV2hlbiBqdW1wZWQgdG8gYSBtYXJrIG9yIHVzaW5nICJmeiIsIGFuZCB0aGVyZSBpcyBhbiBlcnJvciwgdGhlIGN1cnJlbnQgY29sdW1uCit3YXMgbG9zdC4gIEUuZy4gd2hlbiB1c2luZyAiJGZ6aiIuCisKK1RoZSAiZyBDVFJMLUciIGNvbW1hbmQgY291bGQgbm90IGJlIGludGVycnVwdGVkLCBldmVuIHRob3VnaCBpdCBjYW4gdGFrZSBhCitsb25nIHRpbWUuCisKK1NvbWUgdGVybWluYWxzIGRvIGhhdmUgPEY0PiBhbmQgPHhGND4uICA8eEY0PiB3YXMgYWx3YXlzIGludGVycHJldGVkIGFzIDxGND4uCitOb3cgbWFwIDx4RjQ+IHRvIDxGND4sIHNvIHRoYXQgdGhlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMuCisKK1doZW4gY29tcGlsaW5nIG9zX3dpbjMyLmMgd2l0aCBNSU5fRkVBVCB0aGUgYXBwbHlfYXV0b2NtZHMoKSBzaG91bGQgbm90IGJlCit1c2VkLiAoQWFyb24pCisKK1RoaXMgYXV0b2NvbW1hbmQgbG9vcGVkIGZvcmV2ZXI6ICI6YXUgRmlsZUNoYW5nZWRTaGVsbCAqIG5lc3RlZCBlIDxhZmlsZT4iCitOb3cgRmlsZUNoYW5nZVNoZWxsIG5ldmVyIG5lc3RzLiAoUm9lbWVyKQorCitXaGVuIGV2YWx1YXRpbmcgYW4gIjplbHNlaWYiIHRoYXQgd2FzIG5vdCBnb2luZyB0byBtYXR0ZXIgYW55d2F5LCBpZ25vcmUKK2Vycm9ycy4gKFJvZW1lcikKKworR1VJIExlc3N0aWY6IFRlYXJvZmYgYmFyIHdhcyB0aGUgbGFzdCBpdGVtLCBpbnN0ZWFkIG9mIHRoZSBmaXJzdC4KKworR1VJIE1vdGlmOiBDb2xvcnMgb2YgdGVhci1vZmYgd2lkZ2V0cyB3YXMgd3Jvbmcgd2hlbiAndCcgZmxhZyBhZGRlZCB0bworJ2d1aW9wdGlvbnMnIGFmdGVyd2FyZHMuICBXaGVuICd0JyBmbGFnIGluICdndWlvcHRpb25zJyBpcyBleGNsdWRlZCwgd291bGQKK3N0aWxsIGdldCBhIHRlYXJvZmYgaXRlbSBpbiBhIG5ldyBtZW51LgorCitBbiBpbm9kZSBudW1iZXIgY2FuIGJlICJsb25nIGxvbmciLiAgVXNlIGlub190IGluc3RlYWQgb2YgbG9uZy4gIEFkZGVkCitjb25maWd1cmUgY2hlY2sgZm9yIGlub190LgorCitCaW5hcnkgc2VhcmNoIGZvciB0YWdzIHdhcyB1c2luZyBhIGZpbGUgb2Zmc2V0ICJsb25nIiBpbnN0ZWFkIG9mICJvZmZfdCIuCisKK0luc2VydCBtb2RlIGNvbXBsZXRpb24gb2YgdGFncyB3YXMgbm90IHVzaW5nICdpZ25vcmVjYXNlJyBwcm9wZXJseS4KKworSW4gSW5zZXJ0IG1vZGUsIHRoZSA8eEZuPiBrZXlzIHdlcmUgbm90IHByb3Blcmx5IG1hcHBlZCB0byA8Rm4+IGZvciB0aGUKK2RlZmF1bHQgbWFwcGluZ3MuICBBbHNvIGNhdXNlZCBlcnJvcnMgZm9yICI6bWt2aW1yYyIgYW5kICI6bWtzZXNzaW9uIi4KKworV2hlbiBqdW1waW5nIHRvIGFub3RoZXIgd2luZG93IHdoaWxlIGluIEluc2VydCBtb2RlLCB3b3VsZCBnZXQgdGhlICJ3YXJuaW5nOgorY2hhbmdpbmcgcmVhZG9ubHkgZmlsZSIgZXZlbiB3aGVuIG5vdCBtYWtpbmcgYSBjaGFuZ2UuCisKK0EgJygnIG9yICd7JyBpbnNpZGUgYSB0cmFpbGluZyAiLy8iIGNvbW1lbnQgd291bGQgZGlzdHVyYiBDLWluZGVudGluZy4KK1doZW4gdXNpbmcgdHdvIGxhYmVscyBiZWxvdyBlYWNoIG90aGVyLCB0aGUgc2Vjb25kIG9uZSB3YXMgbm90IGluZGVudGVkCitwcm9wZXJseS4gIENvbW1lbnRzIGNvdWxkIG1lc3MgdXAgQy1pbmRlbnRpbmcgaW4gbWFueSBwbGFjZXMuICAoUm9lbWVyKQorCitDb3VsZCBkZWxldGUgb3IgcmVkZWZpbmUgYSBmdW5jdGlvbiB3aGlsZSBpdCB3YXMgYmVpbmcgdXNlZC4gIENvdWxkIGNhdXNlIGEKK2NyYXNoLgorSW4gYSBmdW5jdGlvbiBpdCdzIGxvZ2ljYWwgdG8gcHJlcGVuZCAiZzoiIHRvIGEgc3lzdGVtIHZhcmlhYmxlLCBidXQgdGhpcworZGlkbid0IHdvcmsuIChSb2VtZXIpCisKK0hhbmd1bCBpbnB1dDogQnVmZmVyIHdvdWxkIG92ZXJmbG93IHdoZW4gdXNlciBpbnB1dHMgaW52YWxpZCBrZXkgc2VxdWVuY2UuCisoTmFtKQorCitXaGVuIEJ1ZkxvYWQgb3IgQnVmRW50ZXIgYXV0b2NvbW1hbmRzIGNoYW5nZSB0aGUgdG9wbGluZSBvZiB0aGUgYnVmZmVyIGluIHRoZQord2luZG93LCBpdCB3YXMgb3ZlcnJ1bGVkIGFuZCB0aGUgY3Vyc29yIHB1dCBoYWxmd2F5IHRoZSB3aW5kb3cuICBOb3cgb25seSBwdXQKK3RoZSBjdXJzb3IgaGFsZndheSBpZiB0aGUgYXV0b2NvbW1hbmRzIGRpZG4ndCBjaGFuZ2UgdGhlIHRvcGxpbmUuCisKK0NhbGxpbmcgZXhpc3RzKCImb3B0aW9uIikgYWx3YXlzIHJldHVybmVkIDEuIChSb2VtZXIpCisKK1dpbjMyOiBEaWRuJ3QgdGFrZSBhY3R1YWxseSBhdmFpbGFibGUgbWVtb3J5IGludG8gYWNjb3VudC4gKFdpbGxpYW1zKQorCitXaGl0ZSBzcGFjZSBhZnRlciBhbiBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGNvbW1lbnQgbGVhZGVyIHdhcyBub3QgcmVtb3ZlZAord2hlbiAnYWknIGlzIG5vdCBzZXQgYW5kIDxDUj4gaGl0IGp1c3QgYWZ0ZXIgaW5zZXJ0aW5nIGl0LiAoV2ViYikKKworQSBmZXcgbWVudXMgaGFkIGR1cGxpY2F0ZWQgYWNjZWxlcmF0b3JzLiAoUm9lbWVyKQorCitTcGVsbGluZyBlcnJvcnMgaW4gZG9jdW1lbnRhdGlvbiwgcXVpdGUgYSBmZXcgInRoZSB0aGUiLiAoUm9lbWVyKQorCitNaXNzaW5nIHByb3RvdHlwZXMgZm9yIE1hY2ludG9zaC4gKEtpZWxob3JuKQorCitXaW4zMjogV2hlbiB1c2luZyAnc2hlbGxxdW90ZScgb3IgJ3NoZWxseHF1b3RlJywgdGhlICIhc3RhcnQgY21kIiB3YXNuJ3QKK2V4ZWN1dGVkIGluIGEgZGlzY29ubmVjdGVkIHByb2Nlc3MuCisKK1doZW4gcmVzaXppbmcgdGhlIHdpbmRvdywgY2F1c2luZyBhIGxpbmUgYmVmb3JlIHRoZSBjdXJzb3IgdG8gd3JhcCBvciB1bndyYXAsCit0aGUgY3Vyc29yIHdhcyBkaXNwbGF5ZWQgaW4gdGhlIHdyb25nIHBvc2l0aW9uLgorCitUaGVyZSB3YXMgcXVpdGUgYSBiaXQgb2YgZGVhZCBjb2RlIHdoZW4gY29tcGlsaW5nIHdpdGggbWluaW1hbCBmZWF0dXJlcy4KKworV2hlbiBkb2luZyBhICI6JXMvLy8iIGNvbW1hbmQgdGhhdCBtYWtlcyBsaW5lcyBzaG9ydGVyLCBzdWNoIHRoYXQgbGluZXMgYWJvdmUKK3RoZSBmaW5hbCBjdXJzb3IgcG9zaXRpb24gbm8gbG9uZ2VyIHdyYXAsIHRoZSBjdXJzb3IgcG9zaXRpb24gd2FzIG5vdCB1cGRhdGVkLgorCitnZXRfaWRfbGlzdCgpIGNvdWxkIGFsbG9jYXRlIGFuIGFycmF5IG9uZSB0b28gc21hbGwsIHdoZW4gYSAiY29udGFpbnM9IiBpdGVtCitoYXMgYSB3aWxkY2FyZCB0aGF0IG1hdGNoZXMgYSBncm91cCBuYW1lIHRoYXQgaXMgYWRkZWQganVzdCBhZnRlciBpdC4gIEUuZy46CisiY29udGFpbnM9YS4qYixheGIiLiAgR2l2ZSBhbiBlcnJvciBtZXNzYWdlIGZvciBpdC4KKworV2hlbiB5YW5raW5nIGEgVmlzdWFsIGFyZWEgYW5kIHVzaW5nIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uIC0+IGNyYXNoLiAgV2hlbgorY2xpcGJvYXJkIGRvZXNuJ3Qgd29yaywgbm93IG1ha2UgIiogYWx3YXlzIHVzZSAiIi4KKworV2luMzI6IFVzaW5nICI6YnVmIGFcIGJcZmlsZSIgZGlkbid0IHdvcmssIGl0IHdhcyBpbnRlcnByZXRlZCBhcyAiYWJcZmlsZSIuCisKK1VzaW5nICI6dHMgaWRlbnQiLCB0aGVuIGhpdCA8Q1I+LCB3aXRoICdjbWRoZWlnaHQnIHNldCB0byAyOiBjb21tYW5kIGxpbmUgd2FzCitub3QgY2xlYXJlZCwgdGhlIHRzZWxlY3QgcHJvbXB0IHdhcyBvbiB0aGUgbGFzdCBidXQgb25lIGxpbmUuCisKK21rc2Vzc2lvbiBkaWRuJ3QgcmVzdG9yZSB0aGUgY3Vyc29yIGNvbHVtbiBwcm9wZXJseSB3aGVuIGl0IHdhcyBhZnRlciBhIHRhYi4KK0NvdWxkIG5vdCBnZXQgYWxsIHdpbmRvd3MgYmFjayB3aGVuIHVzaW5nIGEgc21hbGxlciB0ZXJtaW5hbCBzY3JlZW4uICBEaWRuJ3QKK3Jlc3RvcmUgYWxsIHdpbmRvd3Mgd2hlbiAid2luc2l6ZSIgd2FzIG5vdCBpbiAnc2Vzc2lvbm9wdGlvbnMnLiAoV2ViYikKKworQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yICI6YnVmZmVyIiBkZXBlbmRlZCBvbiAnaWdub3JlY2FzZScgZm9yIFVuaXgsIGJ1dAorbm90IGZvciBET1MgZXQgYWwuLiAgTm93IGRvbid0IHVzZSAnaWdub3JlY2FzZScsIGJ1dCBsZXQgaXQgZGVwZW5kIG9uIHdoZXRoZXIKK2ZpbGUgbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlIG9yIG5vdCAobGlrZSB3aGVuIGV4cGFuZGluZyBmaWxlIG5hbWVzKS4KKworV2luMzIgR1VJOiAoTmVncmkpCistIFJlZHJhd2luZyB0aGUgYmFja2dyb3VuZCBjYXVzZWQgZmxpY2tlciB3aGVuIHJlc2l6aW5nIHRoZSB3aW5kb3cuICBSZW1vdmVkCisgIF9PbkVyYXNlQkcoKS4gIFJlbW92ZWQgQ1NfSFJFRFJBVyBhbmQgQ1NfVlJFRFJBVyBmbGFncyBmcm9tIHRoZQorICBzbmRjbGFzcy5zdHlsZS4KKy0gU29tZSBwYXJ0cyBvZiB0aGUgd2luZG93IHdlcmUgZHJhd24gaW4gZ3JleSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgY29sb3IgZnJvbQorICB0aGUgdXNlciBjb2xvciBzY2hlbWUuCistIERyb3BwaW5nIGEgZmlsZSBvbiBndmltIGRpZG4ndCBhY3RpdmF0ZSB0aGUgd2luZG93LgorLSBXaGVuIHRoZXJlIGlzIG5vIG1lbnUgKCdndWlvcHRpb25zJyBleGNsdWRlcyAnbScpLCBuZXZlciB1c2UgdGhlIEFMVCBrZXkgZm9yCisgIGl0LgorCitHVUk6IFdoZW4gcmVzaXppbmcgdGhlIHdpbmRvdywgd291bGQgbWFrZSB0aGUgd2luZG93IGhlaWdodCBhIGJpdCBzbWFsbGVyLgorTm93IHJvdW5kIG9mZiB0byB0aGUgbmVhcmVzdCBjaGFyIGNlbGwgc2l6ZS4gKE5lZ3JpKQorCitJbiBWaSB0aGUgIikiIGFuZCAiKCIgY29tbWFuZHMgZG9uJ3Qgc3RvcCBhdCBhIHNpbmdsZSBzcGFjZSBhZnRlciBhIGRvdC4KK0FkZGVkICdKJyBmbGFnIGluICdjcG9wdGlvbnMnIHRvIG1ha2UgdGhpcyBiZWhhdmUgVmkgY29tcGF0aWJsZS4gKFJvZW1lcikKKworV2hlbiBzYXZpbmcgYSBzZXNzaW9uIHdpdGhvdXQgYW55IGJ1ZmZlcnMgbG9hZGVkLCB0aGVyZSB3b3VsZCBiZSBhICI6bm9ybWFsIgorY29tbWFuZCB3aXRob3V0IGFyZ3VtZW50cyBpbiBpdC4gKFdlYmIpCisKK01lbW9yeSBsZWFrcyBmaXhlZDogKE1hZHNlbikKKy0gZXZhbC5jOiBmb3Jnb3QgdG8gcmVsZWFzZSBmdW5jIHN0cnVjdHVyZSB3aGVuIGZ1bmMgZGVsZXRlZAorLSBleF9kb2NtZC5jOiBmb3Jnb3QgdG8gcmVsZWFzZSBzdHJpbmcgYWZ0ZXIgIjxzZmlsZT4iCistIG1pc2MxLmM6IGxlYWsgd2hlbiBjb21wbGV0aW9uIHBhdHRlcm4gaGFkIG5vIG1hdGNoZXMuCistIG9zX3VuaXguYzogZm9yZ290IHRvIHJlbGVhc2UgcmVnZXhwIGFmdGVyIGZpbGUgY29tcGxldGlvbnMKKworQ291bGQgY3Jhc2ggd2hlbiB1c2luZyBhIGJ1ZmZlciB3aXRob3V0IGEgbmFtZS4gKE1hZHNlbikKK0NvdWxkIGNyYXNoIHdoZW4gZG9pbmcgZmlsZSBuYW1lIGNvbXBsZXRpb24sIGJlY2F1c2Ugb2YgYmFja3NsYXNoX2hhbHZlKCkuCisoTWFkc2VuKQorCisiOkBhIiB3b3VsZCBkbyBtYXBwaW5ncyBvbiByZWdpc3RlciBhLCB3aGljaCBpcyBub3QgVmkgY29tcGF0aWJsZS4gKFJvZW1lcikKKworIjpnL2Zvby4qKCkvcy9mb29iYXIvXyYvZ2MiIHdvcmtlZCBmaW5lLCBidXQgdGhlbiAibiIgc2VhcmNoZWQgZm9yICJmb29iYXIiCithbmQgZGlzcGxheWVkICIvZm9vLiooKSIuIChSb2VtZXIpCisKK09TLzI6IGdldF9jbWRfb3V0cHV0KCkgd2FzIG5vdCBpbmNsdWRlZC4gIERpZG4ndCBjaGVjayBmb3IgJFZJTS8udmltcmMgZmlsZS4KKworQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gb2Ygb3B0aW9ucyBkaWRuJ3Qgd29yayBhZnRlciAiKz0iIGFuZCAiLT0iLgorCitVbml4IGNvbmZpZ3VyZTogVGVzdCBmb3IgbWVtbW92ZSgpL2Jjb3B5KCkvbWVtY3B5KCkgdHJpZWQgcmVkZWZpbmluZyB0aGVzZQorZnVuY3Rpb25zLCB3aGljaCBjb3VsZCBmYWlsIGlmIHRoZXkgYXJlIGRlZmluZWQgYWxyZWFkeS4gIFVzZSBtY2hfbWVtbW92ZSgpIHRvCityZWRlZmluZS4KKworVW5peDogIjpsZXQgYSA9IGV4cGFuZCgiYHh0ZXJtYCYiKSIgc3RhcnRlZCBhbiB4dGVybSBhc3luY2hyb25vdXNseSwgYnV0CisiOmxldCBhID0gZXhwYW5kKCJgeHRlcm0mYCIpIiBnZW5lcmF0ZWQgYW4gZXJyb3IgbWVzc2FnZSwgYmVjYXVzZSB0aGUKK3JlZGlyZWN0aW9uIHdhcyBwdXQgYWZ0ZXIgdGhlICcmJy4KKworV2luMzIgR1VJOiBEaWFsb2cgYnV0dG9ucyBjb3VsZCBub3QgYmUgc2VsZWN0ZWQgcHJvcGVybHkgd2l0aCBjdXJzb3Iga2V5cywKK3doZW4gdGhlIGRlZmF1bHQgaXMgbm90IHRoZSBmaXJzdCBidXR0b24uIChXZWJiKQorCitUaGUgIkZpbGUgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIiAod2hlbiByZWdhaW5pbmcgZm9jdXMpIGNvdWxkIG5vdAorYWx3YXlzIGJlIHNlZW4uIChXZWJiKQorCitXaGVuIHN0YXJ0aW5nIHdpdGggImV4IGZpbGVuYW1lIiwgdGhlIGZpbGUgbWVzc2FnZSB3YXMgb3ZlcndyaXR0ZW4gd2l0aAordGhlICJlbnRlcmluZyBFeCBtb2RlIiBtZXNzYWdlLgorCitPdXRwdXQgb2YgIjp0c2VsZWN0IiBsaXN0ZWQgbmFtZSBvZiBmaWxlIGRpcmVjdGx5IGZyb20gdGhlIHRhZ3MgZmlsZS4gIE5vdyBpdAoraXMgY29ycmVjdGVkIGZvciB0aGUgcG9zaXRpb24gb2YgdGhlIHRhZ3MgZmlsZS4KKworV2hlbiAnYmFja3NwYWNlJyBpcyAwLCBjb3VsZCBiYWNrc3BhY2Ugb3ZlciBhdXRvaW5kZW50LiAgTm93IGl0IGlzIG5vIGxvbmdlcgorYWxsb3dlZCAoVmkgY29tcGF0aWJsZSkuCisKK0luIFJlcGxhY2UgbW9kZSwgd2hlbiAnbm9leHBhbmR0YWInIGFuZCAnc21hcnR0YWInIHdlcmUgc2V0LCBhbmQgaW5zZXJ0aW5nCitUYWJzLCBiYWNrc3BhY2luZyBkaWRuJ3Qgd29yayBjb3JyZWN0bHkgZm9yIFRhYnMgaW5zZXJ0ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZQorbGluZSAodW5sZXNzICdzdHMnIHdhcyBzZXQgdG9vKS4gIEFsc28sIHdoZW4gcmVwbGFjaW5nIHRoZSBmaXJzdCBub24tYmxhbmsKK2FmdGVyIHdoaWNoIGlzIGEgc3BhY2UsIHJvdW5kaW5nIHRoZSBpbmRlbnQgd2FzIGRvbmUgb24gdGhlIGZpcnN0IG5vbi1ibGFuaworaW5zdGVhZCBvZiBvbiB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuCisKK1doZW4gJ3N3JyBhdCA0LCAndHMnIGF0IDggYW5kICdzbWFydHRhYicgc2V0OiBXaGVuIGEgdGFiIHdhcyBhcHBlbmRlZCBhZnRlcgorZm91ciBzcGFjZXMgKHRoZXkgYXJlIHJlcGxhY2VkIHdpdGggYSB0YWIpIGNvdWxkbid0IGJhY2tzcGFjZSBvdmVyIHRoZSB0YWIuCisKK0luIEluc2VydCBtb2RlLCB3aXRoICdicycgc2V0IHRvIDAsIGNvdWxkbid0IGJhY2tzcGFjZSB0byBiZWZvcmUgYXV0b2luZGVudCwKK2V2ZW4gd2hlbiBpdCB3YXMgcmVtb3ZlZCB3aXRoIENUUkwtRC4KKworV2hlbiByZXBlYXRpbmcgYW4gaW5zZXJ0IGNvbW1hbmQgd2hlcmUgYSA8QlM+LCA8TGVmdD4gb3Igb3RoZXIga2V5IGNhdXNlcyBhbgorZXJyb3IsIHdvdWxkIGZsdXNoIGJ1ZmZlcnMgYW5kIHJlbWFpbiBpbiBJbnNlcnQgbW9kZS4gIE5vIGxvbmdlciBmbHVzaAorYnVmZmVycywgb25seSBiZWVwIGFuZCBjb250aW51ZSB3aXRoIHRoZSBpbnNlcnQgY29tbWFuZC4KKworRG9zIGFuZCBXaW4zMiBjb25zb2xlOiBTZXR0aW5nIHRfbWUgZGlkbid0IHdvcmsgdG8gZ2V0IGFub3RoZXIgY29sb3IuICBNYWRlCit0aGlzIHdvcmtzIGJhY2t3YXJkcyBjb21wYXRpYmxlLgorCitGb3IgdHVya2lzaCAoTEFORyA9ICJ0ciIpIHVwcGVyY2FzZSAnaScgaXMgbm90IGFuICdJJy4gIFVzZSBBU0NJSSB1cHBlcmNhc2UKK3RyYW5zbGF0aW9uIGluIHZpbV9zdHJ1cCgpIHRvIGF2b2lkIGxhbmd1YWdlIHByb2JsZW1zLiAoS29tdXIpCisKK1VuaXg6IFVzZSB1c2xlZXAoKSBvciBuYW5vc2xlZXAoKSBmb3IgbWNoX2RlbGF5KCkgd2hlbiBhdmFpbGFibGUuICBIb3BlZnVsbHkKK3RoaXMgYXZvaWRzIGEgaGFuZ3VwIGluIHNlbGVjdCgwLCAuLikgZm9yIFNvbGFyaXMgMi42LgorCitWaW0gd291bGQgY3Jhc2ggd2hlbiB1c2luZyBhIHNjcmlwdCBmaWxlIHdpdGggJ2xldCAmc3AgPSAifCB0ZWUiJywgc3RhcnRpbmcKK3ZpbSB3aXRoICJ2aW0gLXUgdGVzdCIsIHRoZW4gZG9pbmcgIjpzZXQgc3A9Ii4gIFRoZSBQX1dBU19TRVQgZmxhZyB3YXNuJ3Qgc2V0Citmb3IgYSBzdHJpbmcgb3B0aW9uLCBjb3VsZCBjYXVzZSBwcm9ibGVtcyB3aXRoIGFueSBzdHJpbmcgb3B0aW9uLgorCitXaGVuIHVzaW5nICJjbWQgfCB2aW0gLSIsIHN0ZGluIGlzIG5vdCBhIHRlcm1pbmFsLiAgVGhpcyBnYXZlIHByb2JsZW1zIHdpdGgKK0dQTSAoTGludXggY29uc29sZSBtb3VzZSkgYW5kIHdoZW4gZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzLiAgTm93IGNsb3NlCitzdGRpbiBhbmQgcmUtb3BlbiBpdCBhcyBhIGNvcHkgb2Ygc3RkZXJyLgorCitTeW50YXggaGlnaGxpZ2h0aW5nOiBBICJuZXh0Z3JvdXAiIGl0ZW0gd2FzIG5vdCBwcm9wZXJseSBzdG9yZWQgaW4gdGhlIHN0YXRlCitsaXN0LiAgVGhpcyBjYXVzZWQgbWlzc2luZyBvZiBuZXh0IGdyb3VwcyB3aGVuIG5vdCByZWRyYXdpbmcgZnJvbSBzdGFydCB0bworZW5kLCBidXQgc3RhcnRpbmcgaGFsZndheS4KKworRGlkbid0IGNoZWNrIGZvciB2YWxpZCB2YWx1ZXMgb2YgJ3R0eW1vdXNlJy4KKworV2hlbiBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCBmcm9tIHRoZSBHVUksIHdhaXRpbmcgZm9yIHRoZSBjaGlsZCB0bwordGVybWluYXRlIG1pZ2h0IG5vdCB3b3JrLCBjYXVzaW5nIGEgaGFuZy4gKFBhcm1lbGFuKQorCisibWFrZSB1bmluc3RhbGwiIGRpZG4ndCBkZWxldGUgdGhlIHZpbXJjX2V4YW1wbGUudmltIGFuZCBndmltcmNfZXhhbXBsZS52aW0KK2ZpbGVzIGFuZCB0aGUgdmltdHV0b3IuCisKK1dpbjMyOiAiZXhwYW5kKCIlOnA6aCIpIiB3aXRoIG5vIGJ1ZmZlciBuYW1lIHJlbW92ZWQgdGhlIGRpcmVjdG9yeSBuYW1lLgorImZuYW1lbW9kaWZ5KCIiLCAiOnAiKSIgZGlkIG5vdCBhZGQgYSB0cmFpbGluZyBzbGFzaCwgZm5hbWVfY2FzZSgpIHJlbW92ZWQgaXQuCisKK0ZpeGVkOiBXaGVuICdobHNlYXJjaCcgd2FzIHNldCBhbmQgdGhlICdjJyBmbGFnIHdhcyBub3QgaW4gJ2Nwb3B0aW9ucyc6CitoaWdobGlnaHRpbmcgd2FzIG5vdCBjb3JyZWN0LiAgTm93IG92ZXJsYXBwaW5nIG1hdGNoZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorCitBdGhlbmEsIE1vdGlmIGFuZCBHVEsgR1VJOiBXaGVuIHN0YXJ0ZWQgd2l0aG91dCBmb2N1cywgY3Vyc29yIHdhcyBzaG93biBhcyBpZgord2l0aCBmb2N1cy4KKworRG9uJ3QgaW5jbHVkZSAnc2hlbGxwaXBlJyB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgcXVpY2tmaXgsIGl0J3Mgbm90IHVzZWQuCitEb24ndCBpbmNsdWRlICdkaWN0aW9uYXJ5JyBvcHRpb24gd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSAraW5zZXJ0X2V4cGFuZAorZmVhdHVyZS4KK09ubHkgaW5jbHVkZSB0aGUgJ3NoZWxsdHlwZScgb3B0aW9uIGZvciB0aGUgQW1pZ2EuCisKK1doZW4gbWFraW5nIGEgY2hhbmdlIHRvIGEgbGluZSwgd2l0aCAnaGxzZWFyY2gnIG9uLCBjYXVzaW5nIGl0IHRvIHdyYXAsIHdoaWxlCitleGVjdXRpbmcgYSByZWdpc3RlciwgdGhlIHNjcmVlbiB3b3VsZCBub3QgYmUgdXBkYXRlZCBjb3JyZWN0bHkuICBUaGlzIHdhcyBhCitnZW5lcmljIHByb2JsZW0gaW4gdXBkYXRlX3NjcmVlbmxpbmUoKSBiZWluZyBjYWxsZWQgd2hpbGUgbXVzdF9yZWRyYXcgaXMKK1ZBTElELgorCitVc2luZyAiOmJkZWxldGUiIGluIGEgQnVmVW5sb2FkIGF1dG9jb21tYW5kIGNvdWxkIGNhdXNlIGEgY3Jhc2guICBUaGUgd2luZG93CitoZWlnaHQgd2FzIGFkZGVkIHRvIGFub3RoZXIgd2luZG93IHR3aWNlIGluIGNsb3NlX3dpbmRvdygpLgorCitXaW4zMiBHVUk6IFdoZW4gcmVtb3ZpbmcgYSBtZW51IGl0ZW0sIHRoZSB0ZWFyb2ZmIHdhc24ndCB1cGRhdGVkLiAoTmVncmkpCisKK1NvbWUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgcmVtb3ZlZC4gIEFsbG9jYXRpbmcgbWVtb3J5IHdhcyBub3QgZWZmaWNpZW50LgorRm9yIFdpbjMyIGNoZWNraW5nIGZvciBhdmFpbGFibGUgbWVtb3J5IHdhcyBzbG93LCBkb24ndCBjaGVjayBpdCBldmVyeSB0aW1lCitub3cuICBPbiBOVCBvYnRhaW5pbmcgdGhlIHVzZXIgbmFtZSB0YWtlcyBhIGxvbmcgdGltZSwgY2FjaGUgdGhlIHJlc3VsdCAoZm9yCithbGwgc3lzdGVtcykuCisKK2ZuYW1lbW9kaWZ5KCkgd2l0aCBhbiBhcmd1bWVudCAiOn46LiIgb3IgIjouOn4iIGRpZG4ndCB3b3JrIHByb3Blcmx5LgorCitXaGVuIGVkaXRpbmcgYSBuZXcgZmlsZSBhbmQgZXhpdGluZywgdGhlIG1hcmtzIGZvciB0aGUgYnVmZmVyIHdlcmUgbm90IHNhdmVkCitpbiB0aGUgdmltaW5mbyBmaWxlLgorCisiOmNvbmZpcm0gb25seSIgZGlkbid0IHB1dCB1cCBhIGRpYWxvZy4KKworVGhlc2UgdGV4dCBvYmplY3RzIGRpZG4ndCB3b3JrIHdoZW4gJ3NlbGVjdGlvbicgd2FzICJleGNsdXNpdmUiOiB2YSggdmkoIHZhewordml7IHZhPCB2aTwgdmlbIHZhWy4KKworVGhlIGRpYWxvZyBmb3Igd3JpdGluZyBhIHJlYWRvbmx5IGZpbGUgZGlkbid0IGhhdmUgYSB2YWxpZCBkZWZhdWx0LiAoTmVncmkpCisKK1RoZSBsaW5lIG51bWJlciB1c2VkIGZvciBlcnJvciBtZXNzYWdlcyB3aGVuIHNvdXJjaW5nIGEgZmlsZSB3YXMgcmVzZXQgd2hlbgorbW9kZWxpbmVzIHdlcmUgaW5zcGVjdGVkLiAgSXQgd2FzIHdyb25nIHdoZW4gZXhlY3V0aW5nIGEgZnVuY3Rpb24uCisKK1RoZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIGZvciBhbiBlcnJvciBtZXNzYWdlIHdhc24ndCBkaXNwbGF5ZWQgd2hlbiBpdAord2FzIHRoZSBzYW1lIGFzIGZvciB0aGUgbGFzdCBlcnJvciwgZXZlbiB3aGVuIHRoaXMgd2FzIGxvbmcgYWdvLiAgTm93IHJlc2V0Cit0aGUgbmFtZS9sbnVtIGFmdGVyIGEgaGl0LWVudGVyIHByb21wdC4KKworSW4gYSBzZXNzaW9uIGZpbGUsIGEgIiUiIGluIGEgZmlsZSBuYW1lIGNhdXNlZCB0cm91YmxlLCBiZWNhdXNlIGZwcmludGYoKSB3YXMKK3VzZWQgdG8gd3JpdGUgaXQgdG8gdGhlIGZpbGUuCisKK1doZW4gc2tpcHBpbmcgc3RhdGVtZW50cywgYSBtYXJrIGluIGFuIGFkZHJlc3Mgd2Fzbid0IHNraXBwZWQgY29ycmVjdGx5OgorImthfGlmIDB8J2FkfGVsc2V8ZWNob3xlbmRpZiIuIChSb2VtZXIpCisKKyI6d2FsbCIgY291bGQgb3ZlcndyaXRlIGEgbm90LWVkaXRlZCBmaWxlIHdpdGhvdXQgYXNraW5nLgorCitHVUk6IFdoZW4gJERJU1BMQVkgd2FzIG5vdCBzZXQgb3Igc3RhcnRpbmcgdGhlIEdVSSBmYWlsZWQgaW4gYW5vdGhlciB3YXksIHRoZQorY29uc29sZSBtb2RlIHRoZW4gc3RhcnRlZCB3aXRoIHdyb25nIGNvbG9ycyBhbmQgc2tpcHBlZCBpbml0aWFsaXphdGlvbnMuICBOb3cKK2RvIGFuIGVhcmx5IGNoZWNrIGlmIHRoZSBHVUkgY2FuIGJlIHN0YXJ0ZWQuICBEb24ndCBzb3VyY2UgdGhlIG1lbnUudmltIG9yCitndmltcmMgd2hlbiBpdCB3aWxsIG5vdC4gIEFsc28gZG8gbm9ybWFsIHRlcm1pbmFsIGluaXRpYWxpemF0aW9ucyBpZiB0aGUgR1VJCittaWdodCBub3Qgc3RhcnQuCisKK1doZW4gdXNpbmcgYSBCdWZFbnRlciBhdXRvY29tbWFuZCB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGFuZCBzY3JvbGwgdGhlCit3aW5kb3csIHRoZSBjdXJzb3Igd2FzIGFsd2F5cyBwdXQgYXQgdGhlIGxhc3QgdXNlZCBsaW5lIGFuZCBoYWxmd2F5IHRoZSB3aW5kb3cKK2FueWhvdy4KKworV2hlbiAnd2lsZG1vZGUnIHdhcyBzZXQgdG8gImxvbmdlc3QsbGlzdDpmdWxsIiwgIjplICouYzxUYWI+PFRhYj4iIGRpZG4ndCBsaXN0Cit0aGUgbWF0Y2hlcy4gIEFsc28gYXZvaWQgdGhhdCBsaXN0aW5nIGFmdGVyIGEgImxvbmdlc3QiIGxpc3RzIHRoZSB3cm9uZworbWF0Y2hlcyB3aGVuIHRoZSBmaXJzdCBleHBhbnNpb24gY2hhbmdlZCB0aGUgc3RyaW5nIGluIGZyb250IG9mIHRoZSBjdXJzb3IuCisKK1doZW4gdXNpbmcgIjppbnNlcnQiLCAiOmFwcGVuZCIgb3IgIjpjaGFuZ2UiIGluc2lkZSBhIHdoaWxlIGxvb3AsIHdhcyBub3QgYWJsZQordG8gYnJlYWsgb3V0IG9mIGl0IHdpdGggYSBDVFJMLUMuCisKK1dpbjMyOiAiOmUgLiIgdG9vayBhbiBhd2Z1bCBsb25nIHRpbWUgYmVmb3JlIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB1c2VkIGluCisiQzpcIi4gIFdhcyBjYXVzZWQgYnkgYWRkaW5nIGFub3RoZXIgYmFja3NsYXNoIGFuZCB0aGVuIHRyeWluZyB0byBnZXQgdGhlIGZ1bGwKK25hbWUgZm9yICJDOlxcIi4KKworIjp3aW5wb3MgLTEwIDEwMCIgd2FzIHdvcmtpbmcgbGlrZSAiOndpbnBvcyAtMTAgLTEwIiwgYmVjYXVzZSBhIHBvaW50ZXIgd2FzCitub3QgYWR2YW5jZWQgcGFzdCB0aGUgJy0nIHNpZ24uCisKK1doZW4gb2J0YWluaW5nIHRoZSB2YWx1ZSBvZiBhIGhpZGRlbiBvcHRpb24sIHdvdWxkIGdpdmUgYW4gZXJyb3IgbWVzc2FnZS4gIE5vdworanVzdCB1c2UgYSB6ZXJvIHZhbHVlLgorCitPUy8yOiBXYXMgdXNpbmcgYXJndlswXSwgZXZlbiB0aG91Z2ggaXQgd2FzIG5vdCBhIHVzZWZ1bCBuYW1lLiAgSXQgY291bGQgYmUKK2p1c3QgInZpbSIsIGZvdW5kIGluIHRoZSBzZWFyY2ggcGF0aC4KKworWHRlcm06ICI6c2V0IGNvbHVtbnM9NzgiIGRpZG4ndCByZWRyYXcgcHJvcGVybHkgKHdoZW4gbGluZXMgd3JhcC91bndyYXApIHVudGlsCithZnRlciBhIGRlbGF5IG9mICd1cGRhdGV0aW1lJy4gIERpZG4ndCBjaGVjayBmb3IgdGhlIHNpemUtY2hhbmdlZCBzaWduYWwuCisKKydzY3JvbGxiaW5kJyBkaWRuJ3Qgd29yayBpbiBJbnNlcnQgbW9kZS4KK0hvcml6b250YWwgc2Nyb2xsYmluZGluZyBkaWRuJ3QgYWx3YXlzIHdvcmsgZm9yICIwIiBhbmQgIiQiIGNvbW1hbmRzIChlLmcuLAord2hlbiAnc2hvd2NtZCcgd2FzIG9mZikuCisKK1doZW4gY29tcGlsZWQgd2l0aCBtaW5pbWFsIGZlYXR1cmVzIGJ1dCB3aXRoIEdVSSwgc3dpdGNoaW5nIG9uIHRoZSBtb3VzZSBpbiBhbgoreHRlcm0gY2F1c2VkIGdhcmJhZ2UsIGJlY2F1c2UgdGhlIG1vdXNlIGNvZGVzIHdlcmUgbm90IHJlY29nbml6ZWQuICBEb24ndAorZW5hYmxlIHRoZSBtb3VzZSB3aGVuIGl0IGNhbid0IGJlIHJlY29nbml6ZWQuICBJbiB0aGUgR1VJIGl0IGFsc28gZGlkbid0IHdvcmssCit0aGUgYXJndW1lbnRzIHRvIHRoZSBtb3VzZSBjb2RlIHdlcmUgbm90IGludGVycHJldGVkLgorCitXaGVuICdzaG93YnJlYWsnIHVzZWQsIGluIEluc2VydCBtb2RlLCB3aGVuIHRoZSBjdXJzb3IgaXMganVzdCBhZnRlciB0aGUgbGFzdAorY2hhcmFjdGVyIGluIHRoZSBsaW5lLCB3aGljaCBpcyBhbHNvIHRoZSBpbiB0aGUgcmlnaHRtb3N0IGNvbHVtbiwgdGhlIGN1cnNvcgorcG9zaXRpb24gd291bGQgYmUgbGlrZSB0aGUgJ3Nob3dicmVhaycgc3RyaW5nIGlzIHNob3duLCBidXQgaXQgd2Fzbid0LgorCitBdXRvY29tbWFuZHMgY291bGQgbW92ZSB0aGUgY3Vyc29yIGluIGEgbmV3IGZpbGUsIHNvIHRoYXQgQ1RSTC1XIGkgZGlkbid0IHNob3cKK3RoZSByaWdodCBsaW5lLiAgU2FtZSBmb3Igd2hlbiB1c2luZyBhIGZpbGVtYXJrIHRvIGp1bXAgdG8gYW5vdGhlciBmaWxlLgorCitXaGVuIHJlZGVmaW5pbmcgdGhlIGFyZ3VtZW50IGxpc3QsIHRoZSB0aXRsZSB1c2VkIGZvciBvdGhlciB3aW5kb3dzIGNvdWxkIGJlCitzaG93aW5nIHRoZSB3cm9uZyBpbmZvIGFib3V0IHRoZSBwb3NpdGlvbiBpbiB0aGUgYXJndW1lbnQgbGlzdC4gIEFsc28gdXBkYXRlCit0aGlzIGZvciBhICI6c3BsaXQiIGNvbW1hbmQgd2l0aG91dCBhcmd1bWVudHMuCisKK1doZW4gZWRpdGluZyBmaWxlIDk3IG9mIDEzLCAiOk5leHQiIGRpZG4ndCB3b3JrLiAgTm93IGl0IGdvZXMgdG8gdGhlIGxhc3QKK2ZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisKK0luc2VydCBtb2RlIGNvbXBsZXRpb24gKGZvciBkaWN0aW9uYXJpZXMgb3IgaW5jbHVkZWQgZmlsZXMpIGNvdWxkIG5vdCBiZQoraW50ZXJydXB0ZWQgYnkgdHlwaW5nIGFuIDxFc2M+LiAgQ291bGQgZ2V0IGhpdC1lbnRlciBwcm9tcHQgYWZ0ZXIgbGluZQorY29tcGxldGlvbiwgb3Igd2hlbmV2ZXIgdGhlIGluZm9ybWF0aXZlIG1lc3NhZ2Ugd291bGQgZ2V0IHRvbyBsb25nLgorCitXaGVuIHVzaW5nIHRoZSAiOmVkaXQiIGNvbW1hbmQgdG8gcmUtZWRpdCB0aGUgc2FtZSBmaWxlLCBhbiBhdXRvY29tbWFuZCB0bworanVtcCB0byB0aGUgbGFzdCBjdXJzb3IgcG9zaXRpb24gY2F1c2VkIHRoZSBjdXJzb3IgdG8gbW92ZS4gIE5vdyBzZXQgdGhlIGxhc3QKK3VzZWQgY3Vyc29yIHBvc2l0aW9uIHRvIGF2b2lkIHRoaXMuCisKK1doZW4gJ2NvbW1lbnRzJyBoYXMgYSBwYXJ0IHRoYXQgc3RhcnRzIHdpdGggd2hpdGUgc3BhY2UsIGZvcm1hdHRpbmcgdGhlCitjb21tZW50IGRpZG4ndCB3b3JrLgorCitBdCB0aGUgIjp0c2VsZWN0IiBwcm9tcHQgTm9ybWFsIG1vZGUgbWFwcGluZ3Mgd2VyZSB1c2VkLiAgVGhhdCBoYXMgYmVlbgorZGlzYWJsZWQuCisKK1doZW4gJ3NlbGVjdGlvbicgaXMgbm90ICJvbGQiLCBzb21lIGNvbW1hbmRzIHN0aWxsIGRpZG4ndCBhbGxvdyB0aGUgY3Vyc29yCitwYXN0IHRoZSBlbmQtb2YtbGluZSBpbiBWaXN1YWwgbW9kZS4KKworQXRoZW5hOiBXaGVuIGEgbWVudSB3YXMgZGVsZXRlZCwgaXQgd291bGQgYXBwZWFyIGFnYWluIChidXQgbm90IGZ1bmN0aW9uYWwpCit3aGVuIGFkZGluZyBhbm90aGVyIG1lbnUuICBOb3cgdGhleSBkb24ndCByZWFwcGVhciBhbnltb3JlIChhbHRob3VnaCB0aGV5IGFyZQorbm90IHJlYWxseSBkZWxldGVkIGVpdGhlcikuCisKK0JvcmxhbmQgQysrIDQueCBoYWQgYW4gb3B0aW1pemVyIHByb2JsZW0gaW4gZmlsbF9icmVha2F0X2ZsYWdzKCkuIChOZWdyaSkKKworInplIiBkaWRuJ3Qgd29yayB3aGVuICdudW1iZXInIHdhcyBvbi4gKERhdmlzKQorCitXaW4zMiBHVUk6IEludGVsbGltb3VzZSBjb2RlIGRpZG4ndCB3b3JrIHByb3Blcmx5IG9uIFdpbmRvd3MgOTguIChSb2JpbnNvbikKKworQSBmZXcgZmlsZXMgd2VyZSBpbmNsdWRpbmcgcHJvdG8uaCBhIHNlY29uZCB0aW1lLCBhZnRlciB2aW0uaCBoYWQgYWxyZWFkeSBkb25lCit0aGF0LCB3aGljaCBjb3VsZCBjYXVzZSBwcm9ibGVtcyB3aXRoIHRoZSB2aW1fcmVhbGxvYygpIG1hY3JvLgorCitXaW4zMiBjb25zb2xlOiA8TS14PiBvciBBTFQteCB3YXMgbm90IHJlY29nbml6ZWQuICBBbHNvIGtleXBhZCAnKycsICctJyBhbmQKKycqJy4gKE5lZ3JpKQorTVMtRE9TOiA8TS14PiBkaWRuJ3Qgd29yaywgcHJvZHVjZWQgYSB0d28tYnl0ZSBjb2RlLiAgTm93IHRoZSBhbHBoYWJldGljIGFuZAorbnVtYmVyIGtleXMgd29yay4gKE5lZ3JpKQorCitXaGVuIGZpbmRpbmcgYSBsb3Qgb2YgbWF0Y2hlcyBmb3IgYSB0YWcgY29tcGxldGlvbiwgdGhlIGNoZWNrIGZvciBhdm9pZGluZworZG91YmxlIG1hdGNoZXMgY291bGQgdGFrZSBhIGxvdCBvZiB0aW1lLiAgQWRkIGEgbGluZV9icmVha2NoZWNrKCkgdG8gYmUgYWJsZQordG8gaW50ZXJydXB0IHRoaXMuIChEZXNocGFuZGUpCisKK1doZW4gdGhlIGNvbW1hbmQgbGluZSB3YXMgZ2V0dGluZyBsb25nZXIgdGhhbiB0aGUgc2NyZWVuLCB0aGUgbW9yZS1wcm9tcHQKK3dvdWxkIGJlIGdpdmVuIHJlZ3VsYXJseSwgYW5kIHRoZSBjdXJzb3IgcG9zaXRpb24gd291bGQgYmUgd3JvbmcuICBOb3cgb25seQorc2hvdyB0aGUgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lIHRoYXQgZml0cyBvbiB0aGUgc2NyZWVuIGFuZCBmb3JjZSB0aGUgY3Vyc29yCit0byBiZSBwb3NpdGlvbmVkIG9uIHRoZSB2aXNpYmxlIHBhcnQuICBUaGVyZSBjYW4gYmUgdGV4dCBhZnRlciB0aGUgY3Vyc29yCit3aGljaCBpc24ndCBlZGl0YWJsZS4KKworQXQgdGhlIG1vcmUgcHJvbXB0IGFuZCB3aXRoIHRoZSBjb25zb2xlIGRpYWxvZywgYSBjdXJzb3Iga2V5IHdhcyBpbnRlcnByZXRlZAorYXMgPEVzYz4gYW5kIE9BLiAgTm93IHJlY29nbml6ZSBzcGVjaWFsIGtleXMgaW4gZ2V0X2tleXN0cm9rZSgpLiAgSWdub3JlIG1vdXNlCithbmQgc2Nyb2xsYmFyIGV2ZW50cy4KKworV2hlbiB0eXBpbmcgYSBCUyBhZnRlciBpbnNlcnRpbmcgYSBtaWRkbGUgY29tbWVudCBsZWFkZXIsIHR5cGluZyB0aGUgbGFzdCBjaGFyCitvZiB0aGUgZW5kIGNvbW1lbnQgbGVhZGVyIHN0aWxsIGNoYW5nZWQgaXQgaW50byB0aGUgZW5kIGNvbW1lbnQgbGVhZGVyLiAoV2ViYikKKworV2hlbiBhIGZpbGUgc3lzdGVtIGlzIGZ1bGwsIHdyaXRpbmcgdG8gYSBzd2FwIGZpbGUgZmFpbGVkLiAgTm93IGZpcnN0IHRyeSB0bword3JpdGUgb25lIGJsb2NrIHRvIHRoZSBmaWxlLiAgVHJ5IG5leHQgZW50cnkgaW4gJ2RpcicgaWYgaXQgZmFpbHMuCisKK1doZW4gIn4iIGlzIGluICd3aGljaHdyYXAnLCBkb2luZyAifiIgb24gbGFzdCBjaGFyIG9mIGEgbGluZSBkaWRuJ3QgdXBkYXRlIHRoZQorZGlzcGxheS4KKworVW5peDogRXhwYW5kaW5nIHdpbGRjYXJkcyBmb3IgIjpmaWxlIHtcXH0iIGRpZG4ndCB3b3JrLCBiZWNhdXNlICJcfSIgd2FzCit0cmFuc2xhdGVkIHRvICJ9IiBiZWZvcmUgdGhlIHNoZWxsIGdvdCBpdC4gIE5vdyBkb24ndCByZW1vdmUgYmFja3NsYXNoZXMgd2hlbgord2lsZGNhcmRzIGFyZSBnb2luZyB0byBiZSBleHBhbmRlZC4KKworVW5peDogIjplIC90bXAvJHVpZCIgZGlkbid0IHdvcmsuICBXaGVuIGV4cGFuZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gYQorZmlsZSBuYW1lIGRvZXNuJ3Qgd29yaywgdXNlIHRoZSBzaGVsbCB0byBleHBhbmQgdGhlIGZpbGUgbmFtZS4gIjplIC90bXAvJHR0eSIKK3N0aWxsIGRvZXNuJ3Qgd29yayB0aG91Z2guCisKKyJtYWtlIHRlc3QiIGRpZG4ndCBhbHdheXMgd29yayBvbiBET1MvV2luZG93cyBmb3IgdGVzdDMwLCBiZWNhdXNlIGl0IGRlcGVuZGVkCitvbiB0aGUgZXh0ZXJuYWwgImVjaG8iIGNvbW1hbmQuCisKK1RoZSBsaW5rLnNoIHNjcmlwdCB1c2VkICJtYWtlIiBpbnN0ZWFkIG9mICRNQUtFIGZyb20gdGhlIE1ha2VmaWxlLiAgQ2F1c2VkCitwcm9ibGVtcyBmb3IgZ2VuZXJhdGluZyBwYXRoZGVmLmMgd2hlbiAibWFrZSIgZG9lc24ndCB3b3JrIHByb3Blcmx5LgorCitPbiB2ZXJzaW9ucyB0aGF0IGNhbiBkbyBjb25zb2xlIGFuZCBHVUk6IEluIHRoZSBjb25zb2xlIGEgdHlwZWQgQ1NJIGNvZGUgY291bGQKK2NhdXNlIHRyb3VibGUuCisKK1RoZSBwYXR0ZXJucyBpbiBleHByZXNzaW9uIGV2YWx1YXRpb24gZGlkbid0IGlnbm9yZSB0aGUgJ2wnIGZsYWcgaW4KKydjcG9wdGlvbnMnLiAgVGhpcyBicm9rZSB0aGUgd29ya2luZyBvZiA8Q1I+IGluIHRoZSBvcHRpb25zIHdpbmRvdy4KKworV2hlbiAnaGxzJyBvZmYgYW5kICdhaScgb24sICJPPEVzYz4iIGRpZCByZW1vdmUgdGhlIGluZGVudCwgYnV0IGl0IHdhcyBzdGlsbAoraGlnaGxpZ2h0ZWQgcmVkIGZvciB0cmFpbGluZyBzcGFjZS4KKworV2luMzIgR1VJOiBEcm9wcGluZyBhbiBlbmNyeXB0ZWQgZmlsZSBvbiBhIHJ1bm5pbmcgZ3ZpbSBkaWRuJ3Qgd29yayByaWdodC4gIFZpbQord291bGQgbG9vcCB3aGlsZSBvdXRwdXR0aW5nICIqIiBjaGFyYWN0ZXJzLiAgdmdldGMoKSB3YXMgY2FsbGVkIHJlY3Vyc2l2ZWx5LAordGh1cyBpdCByZXR1cm5zIE5VTC4gIEFkZGVkIHNhZmVfdmdldGMoKSwgd2hpY2ggcmVhZHMgaW5wdXQgZGlyZWN0bHkgZnJvbSB0aGUKK3VzZXIgaW4gdGhpcyBzaXR1YXRpb24uCisKK1doaWxlIHJlYWRpbmcgdGV4dCBmcm9tIHN0ZGluLCBvbmx5IGFuIGVtcHR5IHNjcmVlbiB3YXMgc2hvd24uICBOb3cgc2hvdyB0aGF0CitWaW0gaXMgcmVhZGluZyBmcm9tIHN0ZGluLgorCitUaGUgY3Vyc29yIHNoYXBlIHdhc24ndCBzZXQgcHJvcGVybHkgd2hlbiByZXR1cm5pbmcgdG8gSW5zZXJ0IG1vZGUsIGFmdGVyCit1c2luZyBhIENUUkwtTyAvYXNkZiBjb21tYW5kIHdoaWNoIGZhaWxzLiAgSXQgd291bGQgYmUgT0sgYWZ0ZXIgYSBmZXcgc2Vjb25kcy4KK05vdyBpdCdzIE9LIHJpZ2h0IGF3YXkuCisKK1RoZSAnaXNmbmFtZScgZGVmYXVsdCBmb3IgRE9TL1dpbmRvd3MgZGlkbid0IGluY2x1ZGUgdGhlICdAJyBjaGFyYWN0ZXIuICBGaWxlCituYW1lcyB0aGF0IGNvbnRhaW5lZCAiZGlyXEBmaWxlIiBjb3VsZCBub3QgYmUgZWRpdGVkLgorCitXaW4zMiBjb25zb2xlOiA8Qy1TLUxlZnQ+IGNvdWxkIGNhdXNlIGEgY3Jhc2ggd2hlbiBjb21waWxlZCB3aXRoIEJvcmxhbmQgb3IKK2VnY3MuIChBYXJvbikKKworVW5peCBhbmQgVk1TOiAiI2lmIEhBVkVfRElSRU5UX0giIGNhdXNlZCBwcm9ibGVtcyBmb3Igc29tZSBjb21waWxlcnMuICBVc2UKKyIjaWZkZWYgSEFWRV9ESVJFTlRfSCIgaW5zdGVhZC4gKEpvbmVzKQorCitXaGVuIGEgbWF0Y2hpbmcgdGFnIGlzIGluIHRoZSBjdXJyZW50IGZpbGUgYnV0IGhhcyBhIHNlYXJjaCBwYXR0ZXJuIHRoYXQKK2RvZXNuJ3QgbWF0Y2gsIHRoZSBjdXJzb3Igd291bGQganVtcCB0byB0aGUgZmlyc3QgbGluZS4KKworVW5peDogRGVwZW5kZW5jaWVzIGZvciBwdHkuYyB3ZXJlIG5vdCBpbmNsdWRlZCBpbiBNYWtlZmlsZS4gIERlcGVuZGVuY3kgb2YKK2N0YWdzL2NvbmZpZy5oIHdhcyBub3QgaW5jbHVkZWQgKG9ubHkgbWF0dGVycyBmb3IgcGFyYWxsZWwgbWFrZSkuCisKK1JlbW92ZWQgYSBmZXcgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMgKHBvdGVudGlhbCBjcmFzaGVzKS4gIEluIGRvX2NhbGwoKQorY2FsbGluZyBjbGVhcl92YXIoKSB3aGVuIG5vdCBldmFsdWF0aW5nLiAgSW4gd2luMzJfZXhwYW5kcGF0aCgpIGFuZAorZG9zX2V4cGFuZHBhdGgoKSBjYWxsaW5nIGJhY2tzbGFzaF9oYWx2ZSgpIHBhc3QgdGhlIGVuZCBvZiBhIGZpbGUgbmFtZS4KKworUmVtb3ZlZCBtZW1vcnkgbGVha3M6IFNldF92aW1fdmFyX3N0cmluZygpIG5ldmVyIGZyZWVkIHRoZSB2YWx1ZS4gIFRoZQorbmV4dF9saXN0IGZvciBhIHN5bnRheCBrZXl3b3JkIHdhcyBuZXZlciBmcmVlZC4KKworT24gbm9uLVVuaXggc3lzdGVtcywgdXNpbmcgYSBmaWxlIG5hbWUgd2l0aCB3aWxkY2FyZHMgd2l0aG91dCBhIG1hdGNoIHdvdWxkCitzaWxlbnRseSBmYWlsLiAgRS5nLiwgIjplICouc2giLiAgTm93IGdpdmUgYSAiTm8gbWF0Y2giIGVycm9yIG1lc3NhZ2UuCisKK1RoZSBsaWZlL2xpZmUubWFjLCB1cm0vdXJtLm1hYyBhbmQgaGFub2kvaGFub2kubWFjIGZpbGVzIHdlcmUgbm90IHJlY29nbml6ZWQKK2FzIFZpbSBzY3JpcHRzLiAgUmVuYW1lZCB0aGVtIHRvICoudmltLgorCitbTm90ZTogc29tZSBudW1iZXJlZCBwYXRjaGVzIGFyZSBub3QgcmVsZXZhbnQgd2hlbiB1cGdyYWRpbmcgZnJvbSB2ZXJzaW9uIDUuMywKK3RoZXkgaGF2ZSBiZWVuIHJlbW92ZWRdCisKK1BhdGNoIDUuNG0uMQorUHJvYmxlbTogICAgV2hlbiBlZGl0aW5nIGEgZmlsZSB3aXRoIGEgbG9uZyBuYW1lLCB3b3VsZCBnZXQgdGhlIGhpdC1lbnRlcgorCSAgICBwcm9tcHQsIGV2ZW4gdGhvdWdoIGFsbCBzZXR0aW5ncyBhcmUgc3VjaCB0aGF0IHRoZSBuYW1lIHNob3VsZCBiZQorCSAgICB0cnVuY2F0ZWQgdG8gYXZvaWQgdGhhdC4gIGZpbGVtZXNzKCkgd2FzIHByaW50aW5nIHRoZSBmaWxlIG5hbWUKKwkgICAgd2l0aG91dCB0cnVuY2F0aW5nIGl0LgorU29sdXRpb246ICAgVHJ1bmNhdGUgdGhlIG1lc3NhZ2UgaW4gZmlsZW1lc3MoKS4gIFVzZSB0aGUgc2FtZSBjb2RlIGFzIGZvcgorCSAgICBtc2dfdHJ1bmNfYXR0cigpLCB3aGljaCBpcyBtb3ZlZCB0byB0aGUgbmV3IGZ1bmN0aW9uCisJICAgIG1zZ19tYXlfdHJ1bmMoKS4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYywgc3JjL3Byb3RvL21lc3NhZ2UucHJvLCBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNS40bS4zCitQcm9ibGVtOiAgICBUaGUgTW90aWYgbGlicmFyaWVzIHdlcmUgbm90IGZvdW5kIGJ5IGNvbmZpZ3VyZSBmb3IgRGlnaXRhbCBVbml4LgorU29sdXRpb246ICAgQWRkICIvdXNyL3NobGliIiB0byB0aGUgc2VhcmNoIHBhdGguIChBbmR5IEthaG4pCitGaWxlczoJICAgIHNyYy9jb25maWd1cmUuaW4sIHNyYy9jb25maWd1cmUKKworUGF0Y2ggNS40bS41CitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFdoZW4gdXNpbmcgdGhlIFNhdmUtQXMgbWVudSBlbnRyeSBhbmQgc2VsZWN0aW5nIGFuCisJICAgIGV4aXN0aW5nIGZpbGUgaW4gdGhlIGZpbGUgYnJvd3Nlciwgd291bGQgZ2V0IGEgZGlhbG9nIHRvIGNvbmZpcm0KKwkgICAgb3ZlcndyaXRpbmcgdHdpY2UuICAoRWQgS3JhbGwpCitTb2x1dGlvbjogICBSZW1vdmVkIHRoZSBkaWFsb2cgZnJvbSB0aGUgZmlsZSBicm93c2VyLiAgSXQgd291bGQgYmUgbmljZXIgdG8KKwkgICAgc2V0IHRoZSAiZm9yY2VpdCIgZmxhZyBhbmQgc2tpcCBWaW0ncyAiOmNvbmZpcm0iIGRpYWxvZywgYnV0IGl0CisJICAgIHJlcXVpcmVzIHF1aXRlIGEgZmV3IGNoYW5nZXMgdG8gZG8gdGhhdC4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjRtLjYKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogV2hlbiByZWFkaW5nIHRleHQgZnJvbSBzdGRpbiwgZS5nLiwgImNhdCBmb28gfCBndmltIC0iLAorCSAgICBhIG1lc3NhZ2UgYm94IHdvdWxkIHBvcCB1cCB3aXRoICItc3RkaW4tIiAod2hlbiBleGl0aW5nKS4gKE1pY2hhZWwKKwkgICAgU2NoYWFwKQorU29sdXRpb246ICAgRG9uJ3Qgc3dpdGNoIG9mZiB0ZXJtY2FwIG1vZGUgZm9yIHZlcnNpb25zIHRoYXQgYXJlIEdVSS1vbmx5LgorCSAgICBUaGV5IHVzZSBhbm90aGVyIHRlcm1pbmFsIHRvIHJlYWQgZnJvbSBzdGRpbi4KK0ZpbGVzOgkgICAgc3JjL21haW4uYywgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNG0uNworUHJvYmxlbTogICAgVW5peDogcnVubmluZyBjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1ndGstY2hlY2ssCisJICAgIC0tZW5hYmxlLW1vdGlmLWNoZWNrLCAtLWVuYWJsZS1hdGhlbmEtY2hlY2sgb3IgLS1lbmFibGUtZ3RrdGVzdAorCSAgICBoYWQgdGhlIHJldmVyc2UgZWZmZWN0LiAoVGhvbWFzIEtvZWhsZXIpCitTb2x1dGlvbjogICBVc2UgJGVuYWJsZV9ndGtfY2hlY2sgdmFyaWFibGUgY29ycmVjdGx5IGluIEFDX0FSR19FTkFCTEUoKS4KK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZ3VyZQorCitQYXRjaCA1LjRtLjkKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6IFdpdGggd3JhcHBpbmcgbGluZXMsIHRoZSBjdXJzb3Igd2FzIHNvbWV0aW1lcyAyCisJICAgIGNoYXJhY3RlcnMgdG8gdGhlIGxlZnQuICBTeW50YXggaGlnaGxpZ2h0aW5nIHdhcyB3cm9uZyB3aGVuIGEKKwkgICAgZG91YmxlLWJ5dGUgY2hhcmFjdGVyIHdhcyBzcGxpdCBmb3IgYSB3cmFwcGluZyBsaW5lLiAgV2hlbgorCSAgICAnc2hvd2JyZWFrJyB3YXMgb24gdGhlIHNwbGl0dGluZyBhbHNvIGRpZG4ndCB3b3JrLgorU29sdXRpb246ICAgQWRqdXN0IGdldHZjb2woKSBhbmQgd2luX2xpbmUoKS4gKENob25nLURhZSBQYXJrKQorRmlsZXM6CSAgICBzcmMvY2hhcnNldC5jLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNS40bS4xMQorUHJvYmxlbTogICAgVGhlICI6Y2FsbCIgY29tbWFuZCBkaWRuJ3QgY2hlY2sgZm9yIGlsbGVnYWwgdHJhaWxpbmcgY2hhcmFjdGVycy4KKwkgICAgKFN0ZWZhbiBSb2VtZXIpCitTb2x1dGlvbjogICBBZGQgdGhlIGNoZWNrIGluIGRvX2NhbGwoKS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA1LjRtLjEzCitQcm9ibGVtOiAgICBXaXRoIHRoZSAiOnMiIGNvbW1hbmQ6CisJICAgIDEuIFdoZW4gcGVyZm9ybWluZyBhIHN1YnN0aXR1dGUgY29tbWFuZCwgdGhlIG1vdXNlIHdvdWxkIGJlCisJICAgICAgIGRpc2FibGVkIGFuZCBlbmFibGVkIGZvciBldmVyeSBzdWJzdGl0dXRpb24uCisJICAgIDIuIFRoZSBjdXJzb3IgcG9zaXRpb24gY291bGQgYmUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisJICAgICAgIENhbGxpbmcgbGluZV9icmVha2NoZWNrKCkgY291bGQgdHJ5IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IsCisJICAgICAgIHdoaWNoIGNhdXNlcyBhIGNyYXNoIGluIHRoZSBXaW4zMiBHVUkuCisJICAgIDMuIFdoZW4gdXNpbmcgIjpzIiBpbiBhICI6ZyIgY29tbWFuZCwgdGhlIGN1cnNvciB3YXMgbm90IHB1dCBvbgorCSAgICAgICB0aGUgZmlyc3Qgbm9uLXdoaXRlIGluIHRoZSBsaW5lLgorCSAgICA0LiBUaGVyZSB3YXMgYSBoaXQtZW50ZXIgcHJvbXB0IHdoZW4gY29uZmlybWluZyB0aGUgc3Vic3RpdHV0aW9uCisJICAgICAgIGFuZCB0aGUgcmVwbGFjZW1lbnQgd2FzIGEgYml0IGxvbmdlci4KK1NvbHV0aW9uOiAgIDEuIE9ubHkgZGlzYWJsZS9lbmFibGUgdGhlIG1vdXNlIHdoZW4gYXNraW5nIGZvciBjb25maXJtYXRpb24uCisJICAgIDIuIEFsd2F5cyBwdXQgdGhlIGN1cnNvciBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyLCBpdCBpcyBnb2luZyB0byBiZQorCSAgICAgICBtb3ZlZCB0byB0aGUgZmlyc3Qgbm9uLWJsYW5rIGFueXdheS4KKwkgICAgICAgRG9uJ3QgdXNlIHRoZSBjdXJzb3IgcG9zaXRpb24gaW4gZ3VpX21jaF9kcmF3X2hvbGxvd19jdXJzb3IoKSwKKwkgICAgICAgZ2V0IHRoZSBjaGFyYWN0ZXIgZnJvbSB0aGUgc2NyZWVuIGJ1ZmZlci4KKwkgICAgMy4gQWRkZWQgZ2xvYmFsX25lZWRfYmVnaW5saW5lIGZsYWcgdG8gY2FsbCBiZWdpbmxpbmUoKSBhZnRlciAiOmciCisJICAgICAgIGhhcyBmaW5pc2hlZCBhbGwgc3Vic3RpdHV0aW9ucy4KKwkgICAgNC4gQ2xlYXIgdGhlIG5lZWRfd2FpdF9yZXR1cm4gZmxhZyBhZnRlciBwcm9tcHRpbmcgdGhlIHVzZXIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNS40bS4xNAorUHJvYmxlbTogICAgV2hlbiBkb2luZyAidmltIHh4eCIsICI6b3B0IiwgIjpvbmx5IiBhbmQgdGhlbiAiOmUgeHh4IiB3ZSBlbmQKKwkgICAgdXAgd2l0aCB0d28gc3dhcGZpbGVzIGZvciAieHh4Ii4gIFRoYXQgaXMgY2F1c2VkIGJ5IHRoZSAiOmJkZWwiCisJICAgIGNvbW1hbmQgd2hpY2ggaXMgZXhlY3V0ZWQgd2hlbiB1bmxvYWRpbmcgdGhlIG9wdGlvbi13aW5kb3cuCisJICAgIEFsc28sIHRoZXJlIHdhcyBubyBjaGVjayBpZiBjbG9zaW5nIGEgYnVmZmVyIG1hZGUgdGhlIG5ldyBvbmUKKwkgICAgaW52YWxpZCwgdGhpcyBjb3VsZCBjYXVzZSBhIGNyYXNoLgorU29sdXRpb246ICAgV2hlbiBjbG9zaW5nIGEgYnVmZmVyIGNhdXNlcyB0aGUgY3VycmVudCBidWZmZXIgdG8gYmUgZGVsZXRlZCwKKwkgICAgdXNlIHRoZSBuZXcgYnVmZmVyIHRvIHJlcGxhY2UgaXQuICBBbHNvIGRldGVjdCB0aGF0IHRoZSBuZXcgYnVmZmVyCisJICAgIGhhcyBiZWNvbWUgaW52YWxpZCBhcyBhIHNpZGUgZWZmZWN0IG9mIGNsb3NpbmcgdGhlIGN1cnJlbnQgb25lLgorCSAgICBNYWtlIGF1dG9jb21tYW5kIHRoYXQgY2FsbHMgIjpiZGVsIiBpbiBvcHR3aW4udmltIG5lc3RlZCwgc28gdGhhdAorCSAgICB0aGUgYnVmZmVyIGxvYWRpbmcgaXQgdHJpZ2dlcnMgYWxzbyBleGVjdXRlcyBhdXRvY29tbWFuZHMuCisJICAgIEFsc28gYWRkZWQgYSB0ZXN0IGZvciB0aGlzIGluIHRlc3QxMy4KK0ZpbGVzOgkgICAgcnVudGltZS9vcHR3aW4udmltLCBzcmMvYnVmZmVyLmMsIHNyYy9leF9jbWRzLmMsIHNyYy9nbG9iYWxzLmgKKwkgICAgc3JjL3Rlc3RkaXIvdGVzdDEzLmluLCBzcmMvdGVzdGRpci90ZXN0MTMub2sKKworUGF0Y2ggNS40bS4xNQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIEJ1ZkVudGVyIGF1dG9jb21tYW5kIHRvIHJlbG9hZCB0aGUgc3ludGF4IGZpbGUsCisJICAgIGNvbnZlcnNpb24gdG8gSFRNTCBjYXVzZWQgYSBjcmFzaC4gKFN1bmctSHl1biBOYW0pCitTb2x1dGlvbjogICBXaGVuIHVzaW5nICI6c3ludGF4IGNsZWFyIiB0aGUgY3VycmVudCBzdGFjayBvZiBzeW50YXggaXRlbXMgd2FzCisJICAgIG5vdCBjbGVhcmVkLiAgVGhpcyB3aWxsIGNhdXNlIG1lbW9yeSB0byBiZSB1c2VkIHRoYXQgaGFzIGFscmVhZHkKKwkgICAgYmVlbiBmcmVlZC4gIEFkZGVkIGNhbGwgdG8gaW52YWxpZGF0ZV9jdXJyZW50X3N0YXRlKCkgaW4KKwkgICAgc3ludGF4X2NsZWFyKCkuCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA1LjRtLjE3CitQcm9ibGVtOiAgICBXaGVuIG9taXR0aW5nIGEgJyknIGluIGFuIGV4cHJlc3Npb24gaXQgd291bGQgbm90IGJlIHNlZW4gYXMgYQorCSAgICBmYWlsdXJlLgorCSAgICBXaGVuIGRldGVjdGluZyBhbiBlcnJvciBpbnNpZGUgKCksIHRoZXJlIHdvdWxkIGJlIGFuIGVycm9yIG1lc3NhZ2UKKwkgICAgZm9yIGEgbWlzc2luZyAnKScgdG9vLgorCSAgICBXaGVuIHVzaW5nICI6ZWNobyAxK3xlY2hvIDIiIHRoZXJlIHdhcyBubyBlcnJvciBtZXNzYWdlLiAoUm9lbWVyKQorCSAgICBXaGVuIHVzaW5nICI6ZXhlIDErIiB0aGVyZSB3YXMgbm8gZXJyb3IgbWVzc2FnZS4KKwkgICAgV2hlbiB1c2luZyAiOnJldHVybiAxKyIgdGhlcmUgd2FzIG5vIGVycm9yIG1lc3NhZ2UuCitTb2x1dGlvbjogICBGaXggZG9fZWNobygpLCBkb19leGVjdXRlKCkgYW5kIGRvX3JldHVybigpIHRvIGdpdmUgYW4gZXJyb3IKKwkgICAgbWVzc2FnZSB3aGVuIGV2YWwxKCkgcmV0dXJucyBGQUlMLgorCSAgICBGaXggZXZhbDYoKSB0byBoYW5kbGUgdHJhaWxpbmcgJyknIGNvcnJlY3RseSBhbmQgcmV0dXJuIEZBSUwgd2hlbgorCSAgICBpdCdzIG1pc3NpbmcuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNS40bS4xOAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBpbnB1dCgpIGZyb20gaW5zaWRlIGFuIGV4cHJlc3Npb24gZW50ZXJlZCB3aXRoCisJICAgICJDVFJMLVIgPSIgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlcmUgY291bGQgYmUgYSBjcmFzaC4gIEFuZCB0aGUKKwkgICAgcmVzdWx0aW5nIGNvbW1hbmQgbGluZSB3YXMgd3JvbmcuCitTb2x1dGlvbjogICBBZGRlZCBnZXRjbWRsaW5lX3Byb21wdCgpLCB3aGljaCBoYW5kbGVzIHJlY3Vyc2l2ZSB1c2Ugb2YKKwkgICAgZ2V0Y21kbGluZSgpIGNvcnJlY3RseS4gIEl0IGFsc28gc2V0cyB0aGUgY29tbWFuZCBsaW5lIHByb21wdC4KKwkgICAgUmVtb3ZlZCBjbWRsaW5lX3Byb21wdCgpLiAgQWxzbyB1c2UgZ2V0Y21kbGluZV9wcm9tcHQoKSBmb3IKKwkgICAgZ2V0dGluZyB0aGUgY3J5cHQga2V5IGluIGdldF9jcnlwdF9rZXkoKS4KK0ZpbGVzOgkgICAgc3JjL3Byb3RvL2V4X2dldGxuLnBybywgc3JjL2V4X2dldGxuLmMsIHNyYy9ldmFsLmMsIHNyYy9taXNjMi5jCisKK1BhdGNoIDUuNG0uMjEKK1Byb2JsZW06ICAgIFdoZW4gc3RhcnRpbmcgdXAsIHRoZSBzY3JlZW4gc3RydWN0dXJlcyB3ZXJlIGZpcnN0IGFsbG9jYXRlZCBhdAorCSAgICB0aGUgbWluaW1hbCBzaXplLCB0aGVuIGluaXRpYWxpemF0aW9ucyB3ZXJlIGRvbmUgd2l0aCBSb3dzCisJICAgIHBvc3NpYmx5IGRpZmZlcmVudCBmcm9tIHNjcmVlbl9Sb3dzLiAgQ2F1c2VkIGEgY3Jhc2ggaW4gcmFyZQorCSAgICBzaXR1YXRpb25zIChHVEsgd2l0aCBYSU0gYW5kIGZvbnRzZXQpLgorU29sdXRpb246ICAgQ2FsbCBzY3JlZW5hbGxvYygpIGluIG1haW4oKSBvbmx5IGFmdGVyIGNhbGxpbmcgdWlfZ2V0X3dpbnNpemUoKS4KKwkgICAgQWxzbyBhdm9pZHMgYSBwb3RlbnRpYWwgZGVsYXkgYmVjYXVzZSBvZiBjYWxsaW5nIHNjcmVlbmNsZWFyKCkKKwkgICAgd2hpbGUgInN0YXJ0aW5nIiBpcyBub24temVyby4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA1LjRtLjIyCitQcm9ibGVtOiAgICBJbiB0aGUgR1VJIGl0IHdhcyBwb3NzaWJsZSB0aGF0IHRoZSBzY3JlZW4gd2FzIHJlc2l6ZWQgYW5kIHRoZQorCSAgICBzY3JlZW4gc3RydWN0dXJlcyByZS1hbGxvY2F0ZWQgd2hpbGUgcmVkcmF3aW5nIHRoZSBzY3JlZW4uICBUaGlzCisJICAgIGNvdWxkIGNhdXNlIGEgY3Jhc2ggKGhhcmQgdG8gcmVwcm9kdWNlKS4gIFRoZSBjYWxsIHNlcXVlbmNlIGdvZXMKKwkgICAgdGhyb3VnaCB1cGRhdGVfc2NyZWVuKCkgLi4gc3ludGF4X3N0YXJ0KCkgLi4gdWlfYnJlYWtjaGVjaygpIC4uCisJICAgIGd1aV9yZXNpemVfd2luZG93KCkgLi4gc2NyZWVuYWxsb2MoKS4KK1NvbHV0aW9uOiAgIFNldCB1cGRhdGluZ19zY3JlZW4gd2hpbGUgcmVkcmF3aW5nLiAgSWYgdGhlIHdpbmRvdyBpcyByZXNpemVkCisJICAgIHJlbWVtYmVyIHRoZSBuZXcgc2l6ZSBhbmQgaGFuZGxlIGl0IG9ubHkgYWZ0ZXIgcmVkcmF3aW5nIGlzCisJICAgIGZpbmlzaGVkLgorCSAgICBUaGlzIGFsc28gZml4ZXMgdGhhdCByZXNpemluZyB0aGUgc2NyZWVuIHdoaWxlIHN0aWxsIHJlZHJhd2luZworCSAgICAoc2xvdyBzeW50YXggaGlnaGxpZ2h0aW5nKSB3b3VsZCBub3Qgd29yayBwcm9wZXJseS4KKwkgICAgQWxzbyBkaXNhYmxlIGRpc3BsYXlfaGludCwgaXQgd2FzIG5ldmVyIHVzZWQuCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmgsIHNyYy9ndWkuYywgc3JjL3NjcmVlbi5jLCBzcmMvcHJvdG8vZ3VpLnBybworCitQYXRjaCA1LjRtLjIzCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGV4cGFuZCgiPGN3b3JkPiIpIHdoZW4gdGhlcmUgd2FzIG5vIHdvcmQgdW5kZXIgdGhlCisJICAgIGN1cnNvciwgd291bGQgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuICBTYW1lIGZvciA8Y1dPUkQ+IGFuZCA8Y2ZpbGU+LgorU29sdXRpb246ICAgRG9uJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDUuNG0uMjQKK1Byb2JsZW06ICAgICI6aGVscCBcfCIgZGlkbid0IGZpbmQgYW55dGhpbmcuICBJdCB3YXMgdHJhbnNsYXRlZCB0byAiL1xcfCIuCitTb2x1dGlvbjogICBUcmFuc2xhdGUgIlx8IiBpbnRvICJcXGJhciIuICBGaXJzdCBjaGVjayB0aGUgdGFibGUgZm9yIHNwZWNpZmljCisJICAgIHRyYW5zbGF0aW9ucyBiZWZvcmUgY2hlY2tpbmcgZm9yICJceCIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNS40bS4yNQorUHJvYmxlbTogICAgVW5peDogV2hlbiB1c2luZyBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBvbiBmaWxlcyB0aGF0IGNvbnRhaW4KKwkgICAgJycnLCAnIicgb3IgJ3wnIHRoZSBmaWxlIG5hbWUgY291bGQgbm90IGJlIHVzZWQuCisJICAgIEFkZGluZyB0aGlzIGZpbGUgbmFtZSB0byB0aGUgQnVmZmVycyBtZW51IGNhdXNlZCBhbiBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgSW5zZXJ0IGEgYmFja3NsYXNoIGJlZm9yZSB0aGVzZSB0aHJlZSBjaGFyYWN0ZXJzLgorCSAgICBBZGp1c3QgTXVuZ2VuYW1lKCkgZnVuY3Rpb24gdG8gaW5zZXJ0IGEgYmFja3NsYXNoIGJlZm9yZSAnfCcuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jLCBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDUuNG0uMjYKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYSBtYXBwaW5nIG9mIHR3byBmdW5jdGlvbiBrZXlzLCBlLmcuLCA8RjE+PEYxPiwgYW5kCisJICAgIG9ubHkgdGhlIGZpcnN0IGNoYXIgb2YgdGhlIHNlY29uZCBrZXkgaGFzIGJlZW4gcmVhZCwgdGhlIG1hcHBpbmcKKwkgICAgd291bGQgbm90IGJlIHJlY29nbml6ZWQuICBOb3RpY2VkIG9uIHNvbWUgVW5peCBzeXN0ZW1zIHdpdGggeHRlcm0uCitTb2x1dGlvbjogICBBZGQgJ0snIGZsYWcgdG8gJ2Nwb3B0aW9ucycgdG8gd2FpdCBmb3IgdGhlIHdob2xlIGtleSBjb2RlLCBldmVuCisJICAgIHdoZW4gaGFsZndheSBhIG1hcHBpbmcuCitGaWxlczoJICAgIHNyYy9vcHRpb24uaCwgc3JjL3Rlcm0uYworCitQYXRjaCA1LjRtLjI3CitQcm9ibGVtOiAgICBXaGVuIG1ha2luZyB0ZXN0MzMgd2l0aG91dCB0aGUgbGlzcCBmZWF0dXJlIGl0IGhhbmdzLiBJbnRlcnJ1cHRpbmcKKwkgICAgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgc2NyaXB0IHRoZW4gbWlnaHQgY2F1c2UgYSBjcmFzaC4KK1NvbHV0aW9uOiAgIEluIGluY2hhcigpLCBhZnRlciBjbG9zaW5nIGEgc2NyaXB0LCBkb24ndCB1c2UgYnVmW10gYW55bW9yZS4KKwkgICAgY2xvc2VzY3JpcHQoKSBoYXMgZnJlZWQgdHlwZWJ1ZltdIGFuZCBidWZbXSBtaWdodCBiZSBwb2ludGluZworCSAgICBpbnNpZGUgdHlwZWJ1ZltdLgorCSAgICBBdm9pZCB0aGF0IHRlc3QzMyBoYW5ncyB3aGVuIHRoZSBsaXNwIGZlYXR1cmUgaXMgbWlzc2luZy4KK0ZpbGVzOgkgICAgc3JjL2dldGNoYXIuYyBzcmMvdGVzdGRpci90ZXN0MzMuaW4KKworIm9zMiIgd2FzIG1pc3NpbmcgZnJvbSB0aGUgZmVhdHVyZSBsaXN0LiAgVXNlZnVsIGZvciBoYXMoIm9zMiIpLgorCitCZU9TOgorLSBJbmNsdWRlZCBwYXRjaGVzIGZyb20gUmljaGFyZCBPZmZlciBmb3IgQmVPUyBSNC41LgorLSBtZW51IGNvZGUgZGlkbid0IHdvcmsgcmlnaHQuICBDcmFzaGVkIGluIHRoZSBCdWZmZXJzIG1lbnUuICBUaGUgd2luZG93IHRpdGxlCisgIHdhc24ndCBzZXQuIChPZmZlcikKKworUGF0Y2ggNS40bi4zCitQcm9ibGVtOiAgICBDLWluZGVudGluZyB3YXMgd3JvbmcgYWZ0ZXIgIiAgfSBlbHNlIi4gIFRoZSB3aGl0ZSBzcGFjZSB3YXMgbm90CisJICAgIHNraXBwZWQuICBWaXNpYmxlIHdoZW4gJ2Npbm8nIGhhcyAiKzEwIi4KK1NvbHV0aW9uOiAgIFNraXAgd2hpdGUgc3BhY2UgYmVmb3JlIGNhbGxpbmcgY2luX2lzZWxzZSgpLiAoTm9yYmVydCBaZWgpCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDUuNG4uNAorUHJvYmxlbTogICAgV2hlbiB0aGUgJ3QnIGZsYWcgaW4gJ2Nwb3B0aW9ucycgaXMgaW5jbHVkZWQsIGFmdGVyIGEKKwkgICAgIjpub2hsc2VhcmNoIiB0aGUgc2VhcmNoIGhpZ2hsaWdodGluZyB3b3VsZCBub3QgYmUgZW5hYmxlZCBhZ2FpbgorCSAgICBhZnRlciBhIHRhZyBzZWFyY2guIChOb3JiZXJ0IFplaCkKK1NvbHV0aW9uOiAgIFdoZW4gc2V0dGluZyB0aGUgbmV3IHNlYXJjaCBwYXR0ZXJuIGluIGp1bXB0b190YWcoKSwgZG9uJ3QgcmVzdG9yZQorCSAgICBub19obHNlYXJjaC4KK0ZpbGVzOgkgICAgc3JjL3RhZy5jCisKK1BhdGNoIDUuNG4uNQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOm5vcm1hbCIgZnJvbSBhIEN1cnNvckhvbGQgYXV0b2NvbW1hbmQgVmltIGhhbmdzLiAgVGhlCisJICAgIGF1dG9jb21tYW5kIGlzIGV4ZWN1dGVkIGRvd24gZnJvbSB2Z2V0YygpLiAgQ2FsbGluZyB2Z2V0YygpCisJICAgIHJlY3Vyc2l2ZWx5IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgZG9lc24ndCB3b3JrIHRoZW4uCitTb2x1dGlvbjogICBGb3JiaWQgdGhlIHVzZSBvZiAiOm5vcm1hbCIgd2hlbiB2Z2V0Y19idXN5IGlzIHNldC4gIEdpdmUgYW4gZXJyb3IKKwkgICAgbWVzc2FnZSB3aGVuIHRoaXMgaGFwcGVucy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHJ1bnRpbWUvZG9jL2F1dG9jbWQudHh0CisKK1BhdGNoIDUuNG4uNgorUHJvYmxlbTogICAgImd2IiBjb3VsZCByZXNlbGVjdCBhIFZpc3VhbCB0aGF0IHN0YXJ0cyBhbmQvb3IgZW5kcyBwYXN0IHRoZSBlbmQKKwkgICAgb2YgYSBsaW5lLiAoUm9iZXJ0IFdlYmIpCitTb2x1dGlvbjogICBDaGVjayB0aGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBWaXN1YWwgYXJlYSBhcmUgb24gYSB2YWxpZAorCSAgICBjaGFyYWN0ZXIgYnkgY2FsbGluZyBhZGp1c3RfY3Vyc29yKCkuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjRuLjgKK1Byb2JsZW06ICAgIFdoZW4gYSBtYXJrIHdhcyBvbiBhIG5vbiBleGlzdGluZyBsaW5lIChlLmcuLCB3aGVuIHRoZSAudmltaW5mbworCSAgICB3YXMgZWRpdGVkKSwganVtcGluZyB0byBpdCBjYXVzZWQgbWxfZ2V0IGVycm9ycy4gKEFsZXhleQorCSAgICBNYXJpbmljaGV2KS4KK1NvbHV0aW9uOiAgIEFkZGVkIGNoZWNrX2N1cnNvcl9sbnVtKCkgaW4gbnZfZ29tYXJrKCkuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjRuLjkKK1Byb2JsZW06ICAgICI6LTIiIG1vdmVkIHRoZSBjdXJzb3IgdG8gYSBuZWdhdGl2ZSBsaW5lIG51bWJlci4gKFJhbGYgU2NoYW5kbCkKK1NvbHV0aW9uOiAgIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSBmb3IgYSBuZWdhdGl2ZSBsaW5lIG51bWJlci4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNS40bi4xMAorUHJvYmxlbTogICAgV2luMzIgR1VJOiBBdCB0aGUgaGl0LWVudGVyIHByb21wdCwgaXQgd2FzIHBvc3NpYmxlIHRvIHNjcm9sbCB0aGUKKwkgICAgdGV4dC4gIFRoaXMgZXJhc2VkIHRoZSBwcm9tcHQgYW5kIG1hZGUgVmltIGxvb2sgbGlrZSBpdCBpcyBpbgorCSAgICBOb3JtYWwgbW9kZSwgd2hpbGUgaXQgaXMgYWN0dWFsbHkgc3RpbGwgd2FpdGluZyBmb3IgYSA8Q1I+LgorU29sdXRpb246ICAgRGlzYWxsb3cgc2Nyb2xsaW5nIGF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0IGZvciBzeXN0ZW1zIHRoYXQgdXNlCisJICAgIG9uIHRoZSBmbHkgc2Nyb2xsaW5nLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDUuNG4uMTQKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogV2hlbiB1c2luZyAiOndpbnNpemUgODAgNDYiIGFuZCB0aGUgaGVpZ2h0IGlzIG1vcmUgdGhhbgorCSAgICB3aGF0IGZpdHMgb24gdGhlIHNjcmVlbiwgdGhlIHdpbmRvdyBzaXplIHdhcyBtYWRlIHNtYWxsZXIgdGhhbgorCSAgICBhc2tlZCBmb3IgKHRoYXQncyBPSykgYW5kIFZpbSBjcmFzaGVkICh0aGF0J3Mgbm90IE9LKT4KK1NvbHV0aW9uOiAgIENhbGwgY2hlY2tfd2luc2l6ZSgpIGZyb20gZ3VpX3NldF93aW5zaXplKCkgdG8gcmVzaXplIHRoZSB3aW5kb3dzLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNS40bi4xNgorUHJvYmxlbTogICAgV2luMzIgR1VJOiBUaGUgPEYxMD4ga2V5IGJvdGggc2VsZWN0ZWQgdGhlIG1lbnUgYW5kIHdhcyBoYW5kbGVkIGFzCisJICAgIGEga2V5IGhpdC4KK1NvbHV0aW9uOiAgIEFwcGx5ICd3aW5hbHRrZXlzJyB0byA8RjEwPiwgbGlrZSBpdCBpcyB1c2VkIGZvciBBbHQga2V5cy4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjRuLjE3CitQcm9ibGVtOiAgICBMb2NhbCBidWZmZXIgdmFyaWFibGVzIHdlcmUgZnJlZWQgd2hlbiB0aGUgYnVmZmVyIGlzIHVubG9hZGVkLgorCSAgICBUaGF0J3Mgbm90IGxvZ2ljYWwsIHNpbmNlIG9wdGlvbnMgYXJlIG5vdCBmcmVlZC4gKFJvbiBBYXJvbikKK1NvbHV0aW9uOiAgIEZyZWUgbG9jYWwgYnVmZmVyIHZhcmlhYmxlcyBvbmx5IHdoZW4gZGVsZXRpbmcgdGhlIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDUuNG4uMTkKK1Byb2JsZW06ICAgIERvaW5nICI6ZSIgKHdpdGhvdXQgYXJndW1lbnQpIGluIGFuIG9wdGlvbi13aW5kb3cgY2F1c2VzIHRyb3VibGUuCisJICAgIFRoZSBtYXBwaW5ncyBmb3IgPENSPiBhbmQgPFNwYWNlPiBhcmUgbm90IHJlbW92ZWQuICBXaGVuIHRoZXJlIGlzCisJICAgIGFub3RoZXIgYnVmZmVyIGxvYWRlZCwgdGhlIHN3YXAgZmlsZSBmb3IgaXQgZ2V0cyBtaXhlZCB1cC4KKwkgICAgKFN0ZXZlIE11ZWxsZXIpCitTb2x1dGlvbjogICBBbHNvIHJlbW92ZSB0aGUgbWFwcGluZ3MgYXQgdGhlIEJ1ZlVubG9hZCBldmVudCwgaWYgdGhleSBhcmUgc3RpbGwKKwkgICAgcHJlc2VudC4KKwkgICAgV2hlbiByZS1lZGl0aW5nIHRoZSBzYW1lIGZpbGUgY2F1c2VzIHRoZSBjdXJyZW50IGJ1ZmZlciB0byBiZQorCSAgICBkZWxldGVkLCBkb24ndCB0cnkgZWRpdGluZyBpdC4KKwkgICAgQWxzbyBhZGRlZCBhIHRlc3QgZm9yIHRoaXMgc2l0dWF0aW9uLgorRmlsZXM6CSAgICBydW50aW1lL29wdHdpbi52aW0sIHNyYy9leF9jbWRzLmMsIHNyYy90ZXN0ZGlyL3Rlc3QxMy5pbiwKKwkgICAgc3JjL3Rlc3RkaXIvdGVzdDEzLm9rCisKK1BhdGNoIDUuNG4uMjQKK1Byb2JsZW06ICAgIEJlT1M6IGNvbmZpZ3VyZSBuZXZlciBlbmFibGVkIHRoZSBHVUksIGJlY2F1c2UgJHdpdGhfeCB3YXMgIm5vIi4KKwkgICAgVW5peCBwcm90b3R5cGVzIGNhdXNlZCBwcm9ibGVtcywgYmVjYXVzZSBEaXNwbGF5IGFuZCBXaWRnZXQgYXJlCisJICAgIHVuZGVmaW5lZC4KKwkgICAgRnJlZWluZyBmb250cyBvbiBleGl0IGNhdXNlZCBhIGNyYXNoLgorU29sdXRpb246ICAgT25seSBkaXNhYmxlIHRoZSBHVUkgd2hlbiAkd2l0aF94IGlzICJubyIgYW5kICAkQkVPUyBpcyBub3QgInllcyIuCisJICAgIEFkZCBkdW1teSBkZWZpbmVzIGZvciBEaXNwbGF5IGFuZCBXaWRnZXQgaW4gcHJvdG8uaC4KKwkgICAgRG9uJ3QgZnJlZSB0aGUgZm9udHMgaW4gZ3VpX2V4aXQoKSBmb3IgQmVPUy4KK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZ3VyZSwgc3JjL3Byb3RvLmgsIHNyYy9ndWkuYy4KKworCitUaGUgcnVudGltZS92aW00OHg0OC54cG0gaWNvbiBkaWRuJ3QgaGF2ZSBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQuIChTY2hpbGQpCisKK1NvbWUgdmVyc2lvbnMgb2YgdGhlIG1pbmd3MzIvZWdjcyBjb21waWxlciBkaWRuJ3QgaGF2ZSBXSU5CQVNFQVBJIGRlZmluZWQuCisoQWFyb24pCisKK1ZNUzoKKy0gbWNoX3NldGVudigpIGhhZCB0d28gYXJndW1lbnRzIGluc3RlYWQgb2YgdGhyZWUuCistIFRoZSBzeXN0ZW0gdmltcmMgYW5kIGd2aW1yYyBmaWxlcyB3ZXJlIGNhbGxlZCAiLnZpbXJjIiBhbmQgIi5ndmltcmMiLgorICBSZW1vdmVkIHRoZSBkb3QuCistIGNhbGwgdG8gUmVhbFdhaXRGb3JDaGFyKCkgaGFkIG9uZSBhcmd1bWVudCB0b28gbWFueS4gKENhbXBiZWxsKQorLSBXYWl0Rm9yQ2hhcigpIGlzIHN0YXRpYywgcmVtb3ZlZCB0aGUgcHJvdG90eXBlIGZyb20gcHJvdG8vb3Nfdm1zLnByby4KKy0gTWFueSBmaWxlIGFjY2Vzc2VzIGZhaWxlZCwgYmVjYXVzZSBVbml4IHN0eWxlIGZpbGUgbmFtZXMgd2VyZSB1c2VkLgorICBUcmFuc2xhdGUgZmlsZSBuYW1lcyB0byBWTVMgc3R5bGUgYnkgdXNpbmcgdmltX2ZvcGVuKCkuCistIEZpbHRlcmluZyBkaWRuJ3Qgd29yaywgYmVjYXVzZSB0aGUgdGVtcG9yYXJ5IGZpbGUgbmFtZSB3YXMgZ2VuZXJhdGVkIHdyb25nLgorLSBUaGVyZSB3YXMgYW4gZXh0cmEgbmV3bGluZSBldmVyeSA5MTkyIGNoYXJhY3RlcnMgd2hlbiB3cml0aW5nIGEgZmlsZS4gIFdvcmsKKyAgYXJvdW5kIGl0IGJ5IHdyaXRpbmcgbGluZSBieSBsaW5lLiAoQ2FtcGJlbGwpCistIG9zX3Ztcy5jIGNvbnRhaW5lZCAiIyB0eXBlZGVmIGludCBERVNDIi4gIFNob3VsZCBiZSAidHlwZWRlZiBpbnQgREVTQzsiLgorICBPbmx5IG1hdHRlcmVkIGZvciBnZW5lcmF0aW5nIHByb3RvdHlwZXMuCistIEFkZGVkIGZpbGUgbmFtZSB0cmFuc2xhdGlvbiB0byBtYW55IHBsYWNlcy4gIE1hZGUgZWFzeSBieSBkZWZpbmluZyBtYWNyb3MKKyAgbWNoX2FjY2VzcygpLCBtY2hfZm9wZW4oKSwgbWNoX2ZzdGF0KCksIG1jaF9sc3RhdCgpIGFuZCBtY2hfc3RhdCgpLgorLSBTZXQgZGVmYXVsdCBmb3IgJ3RhZ2JzZWFyY2gnIHRvIG9mZiwgYmVjYXVzZSBiaW5hcnkgdGFnIHNlYXJjaGluZyBhcHBhcmVudGx5CisgIGRvZXNuJ3Qgd29yayBmb3IgVk1TLgorLSBtYWtlIG1jaF9nZXRfaG9zdF9uYW1lKCkgd29yayB3aXRoIC9kZWMgYW5kIC9zdGFuZGFyZD12YXhjLiAoQ2FtcGJlbGwpCisKKworUGF0Y2ggNS40by4yCitQcm9ibGVtOiAgICBDcmFzaCB3aGVuIHVzaW5nICJnZiIgb24gImZpbGUuYzovL2NvbW1lbnQgaGVyZSIuIChTY290dCBHcmFoYW0pCitTb2x1dGlvbjogICBGaXggd3JvbmcgdXNlIG9mIHBvaW50ZXJzIGluIGdldF9maWxlX25hbWVfaW5fcGF0aCgpLgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNS40by4zCitQcm9ibGVtOiAgICBUaGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgd2FzIG5vdCBzaXplZCBjb3JyZWN0bHkgd2hlbiAnbnVtYmVyJyBpcworCSAgICBzZXQgYW5kICd3cmFwJyBub3Qgc2V0LgorCSAgICBBdGhlbmE6IEhvcml6b250YWwgc2Nyb2xsYmFyIHdhc24ndCB1cGRhdGVkIHdoZW4gdGhlIGN1cnNvciB3YXMKKwkgICAgcG9zaXRpb25lZCB3aXRoIGEgbW91c2UgY2xpY2sganVzdCBhZnRlciBkcmFnZ2luZy4KK1NvbHV0aW9uOiAgIFN1YnRyYWN0IDggZnJvbSB0aGUgc2l6ZSB3aGVuICdudW1iZXInIHNldCBhbmQgJ3dyYXAnIG5vdCBzZXQuCisJICAgIFJlc2V0IGd1aS5kcmFnZ2VkX3NiIHdoZW4gYSBtb3VzZSBjbGljayBpcyByZWNlaXZlZC4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDUuNG8uNAorUHJvYmxlbTogICAgV2hlbiBydW5uaW5nIGluIGFuIHh0ZXJtIGFuZCAkV0lORE9XSUQgaXMgc2V0IHRvIGFuIGlsbGVnYWwgdmFsdWUsCisJICAgIFZpbSB3b3VsZCBleGl0IHdpdGggIlZpbTogR290IFggZXJyb3IiLgorU29sdXRpb246ICAgV2hlbiB1c2luZyB0aGUgZGlzcGxheSB3aGljaCB3YXMgb3BlbmVkIGZvciB0aGUgeHRlcm0gY2xpcGJvYXJkLAorCSAgICBjaGVjayBpZiB4MTFfd2luZG93IGlzIHZhbGlkIGJ5IHRyeWluZyB0byBvYnRhaW4gdGhlIHdpbmRvdyB0aXRsZS4KKwkgICAgQWxzbyBhZGQgYSBjaGVjayBpbiBzZXR1cF94dGVybV9jbGlwKCksIGZvciB3aGVuIHVzaW5nIFggY2FsbHMgdG8KKwkgICAgZ2V0IHRoZSBwb2ludGVyIHBvc2l0aW9uIGluIGFuIHh0ZXJtLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDUuNG8uNQorUHJvYmxlbTogICAgTW90aWYgdmVyc2lvbiB3aXRoIExlc3N0aWY6IFdoZW4gcmVtb3ZpbmcgdGhlIG1lbnViYXIgYW5kIHRoZW4KKwkgICAgdXNpbmcgYSBtZW51IHNob3J0Y3V0IGtleSwgVmltIHdvdWxkIGNyYXNoLiAocmFmKQorU29sdXRpb246ICAgRGlzYWJsZSB0aGUgbWVudSBtbmVtb25pY3Mgd2hlbiB0aGUgbWVudSBiYXIgaXMgcmVtb3ZlZC4KK0ZpbGVzOgkgICAgc3JjL2d1aV9tb3RpZi5jCisKK1BhdGNoIDUuNG8uOQorUHJvYmxlbTogICAgVGhlIERPUyBpbnN0YWxsLmV4ZSBwcm9ncmFtIHVzZWQgdGhlICJtb3ZlIiBwcm9ncmFtLiAgVGhhdCBkb2Vzbid0CisJICAgIHdvcmsgb24gV2luZG93cyBOVCwgd2hlcmUgIm1vdmUiIGlzIGludGVybmFsIHRvIGNtZC5leGUuCitTb2x1dGlvbjogICBEb24ndCB1c2UgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBmb3IgbW92aW5nIHRoZSBleGVjdXRhYmxlcy4gIFVzZSBDCisJICAgIGZ1bmN0aW9ucyB0byBjb3B5IHRoZSBmaWxlIGFuZCBkZWxldGUgdGhlIG9yaWdpbmFsLgorRmlsZXM6CSAgICBzcmMvZG9zaW5zdC5jCisKK01vdGlmIGFuZCBBdGhlbmEgb2J0YWluZWQgdGhlIHN0YXR1cyBhcmVhIGhlaWdodCBkaWZmZXJlbnRseSBmcm9tIEdUSy4gIE1vdmVkCitzdGF0dXNfYXJlYV9lbmFibGVkIGZyb20gZ2xvYmFsLmggdG8gZ3VpX3gxMS5jIGFuZCBjYWxsCit4aW1fZ2V0X3N0YXR1c19hcmVhX2hlaWdodCgpIHRvIGdldCB0aGUgc3RhdHVzIGFyZWEgaGVpZ2h0LgorCitQYXRjaCA1LjRwLjEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYXV0by1zZWxlY3QsIGFuZCB0aGUgImd2IiBjb21tYW5kIGlzIHVzZWQsIHdvdWxkIG5vdAorCSAgICBhbHdheXMgb2J0YWluIG93bmVyc2hpcCBvZiB0aGUgc2VsZWN0aW9uLiAgQ2F1c2VkIGJ5IHRoZSBWaXN1YWwKKwkgICAgYXJlYSBzdGlsbCBiZWluZyB0aGUgc2FtZSwgYnV0IG93bmVyc2hpcCB0YWtlbiBhd2F5IGJ5IGFub3RoZXIKKwkgICAgcHJvZ3JhbS4KK1NvbHV0aW9uOiAgIFJlc2V0IHRoZSBjbGlwYm9hcmQgVmlzdWFsIG1vZGUgdG8gZm9yY2UgdXBkYXRpbmcgdGhlIHNlbGVjdGlvbi4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDUuNHAuMgorUHJvYmxlbTogICAgTW90aWYgYW5kIEF0aGVuYSB3aXRoIFhJTTogVHlwaW5nIDMtYnl0ZQorCSAgICA8bXVsdGlieXRlPjxtdWx0aWJ5dGU+PHNwYWNlPiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggQW1pIFhJTS4KK1NvbHV0aW9uOiAgIEF2b2lkIHVzaW5nIGtleV9zeW0gWEtfVm9pZFN5bWJvbC4gKE5hbSkKK0ZpbGVzOgkgICAgc3JjL211bHRieXRlLmMsIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNS40cC40CitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFRoZSBzY3JvbGxiYXIgdmFsdWVzIHdlcmUgcmVkdWNlZCBmb3IgYSBmaWxlIHdpdGggbW9yZQorCSAgICB0aGFuIDMyNzY3IGxpbmVzLiAgQnV0IHRoaXMgaW5mbyB3YXMga2VwdCBnbG9iYWwgZm9yIGFsbAorCSAgICBzY3JvbGxiYXJzLCBjYXVzaW5nIGEgbWl4dXAgYmV0d2VlbiB0aGUgd2luZG93cy4KKwkgICAgVXNpbmcgdGhlIGRvd24gYXJyb3cgb2YgYSBzY3JvbGxiYXIgaW4gYSBsYXJnZSBmaWxlIGRpZG4ndCB3b3JrLgorCSAgICBCZWNhdXNlIG9mIHJvdW5kLW9mZiBlcnJvcnMgdGhlcmUgaXMgbm8gc2Nyb2xsIGF0IGFsbC4KK1NvbHV0aW9uOiAgIEdpdmUgZWFjaCBzY3JvbGxiYXIgaXRzIG93biBzY3JvbGxfc2hpZnQgZmllbGQuICBXaGVuIHRoZSBkb3duCisJICAgIGFycm93IGlzIHVzZWQsIHNjcm9sbCBzZXZlcmFsIGxpbmVzLgorRmlsZXM6CSAgICBzcmMvZ3VpLmgsIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNS40cC41CitQcm9ibGVtOiAgICBXaGVuIGNoYW5naW5nIGJ1ZmZlcnMgaW4gYSBCdWZEZWxldGUgYXV0b2NvbW1hbmQsIHRoZXJlIGNvdWxkIGJlCisJICAgIG1sX2xpbmUgZXJyb3JzIGFuZC9vciBhIGNyYXNoLiAoU2NoYW5kbCkgIFdhcyBjYXVzZWQgYnkgZGVsZXRpbmcKKwkgICAgdGhlIGN1cnJlbnQgYnVmZmVyLgorU29sdXRpb246ICAgV2hlbiB0aGUgYnVmZmVyIHRvIGJlIGRlbGV0ZWQgdW5leHBlY3RlZGx5IGJlY29tZXMgdGhlIGN1cnJlbnQKKwkgICAgYnVmZmVyLCBkb24ndCBkZWxldGUgaXQuCisJICAgIEFsc28gYWRkZWQgYSBjaGVjayBmb3IgdGhpcyBpbiB0ZXN0MTMuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL3Rlc3RkaXIvdGVzdDEzLmluLCBzcmMvdGVzdGRpci90ZXN0MTMub2sKKworUGF0Y2ggNS40cC43CitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFdoZW4gdXNpbmcgJ21vdXNlbW9kZWwnIHNldCB0byAicG9wdXBfc2V0cG9zIiBhbmQKKwkgICAgY2xpY2tpbmcgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBvdXRzaWRlIG9mIHRoZSBzZWxlY3RlZCBhcmVhLCB0aGUKKwkgICAgc2VsZWN0ZWQgYXJlYSB3YXNuJ3QgcmVtb3ZlZCB1bnRpbCB0aGUgcG9wdXAgbWVudSBoYXMgZ29uZS4KKwkgICAgKEFhcm9uKQorU29sdXRpb246ICAgU2V0IHRoZSBjdXJzb3IgYW5kIHVwZGF0ZSB0aGUgZGlzcGxheSBiZWZvcmUgc2hvd2luZyB0aGUgcG9wdXAKKwkgICAgbWVudS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDUuNHAuOAorUHJvYmxlbTogICAgVGhlIGdlbmVyYXRlZCBidWdyZXBvcnQgZGlkbid0IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQKKwkgICAgJFZJTVJVTlRJTUUgYW5kIHdoZXRoZXIgcnVudGltZSBmaWxlcyBhY3R1YWxseSBleGlzdC4KK1NvbHV0aW9uOiAgIEFkZGVkIGEgZmV3IGNoZWNrcyB0byB0aGUgYnVncmVwb3J0IHNjcmlwdC4KK0ZpbGVzOgkgICAgcnVudGltZS9idWdyZXBvcnQudmltCisKK1BhdGNoIDUuNHAuOQorUHJvYmxlbTogICAgVGhlIHdpbmRvd3MgaW5zdGFsbC5leGUgY3JlYXRlZCBhIHdyb25nIGVudHJ5IGluIHRoZSBwb3B1cCBtZW51LgorCSAgICBUaGUgIiUxIiB3YXMgIiIuICBUaGUgZnVsbCBkaXJlY3Rvcnkgd2FzIGluY2x1ZGVkLCBldmVuIHdoZW4gdGhlCisJICAgIGV4ZWN1dGFibGUgaGFkIGJlZW4gbW92ZWQgZWxzZXdoZXJlLiAoT3R0KQorU29sdXRpb246ICAgRG91YmxlIHRoZSAnJScgdG8gZ2V0IG9uZSBmcm9tIHByaW50Zi4gIE9ubHkgaW5jbHVkZSB0aGUgcGF0aCB0bworCSAgICBndmltLmV4ZSB3aGVuIGl0IHdhc24ndCBtb3ZlZCBhbmQgaXQncyBub3QgaW4gJFBBVEguCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmMKKworUGF0Y2ggNS40cC4xMAorUHJvYmxlbTogICAgV2luMzI6IE9uIHRvcCBvZiA1LjRwLjk6IFRoZSAiRWRpdCB3aXRoIFZpbSIgZW50cnkgc29tZXRpbWVzIHVzZWQKKwkgICAgYSBzaG9ydCBmaWxlIG5hbWUgZm9yIGEgZGlyZWN0b3J5LgorU29sdXRpb246ICAgQ2hhbmdlIHRoZSAiJTEiIHRvICIlTCIgaW4gdGhlIHJlZ2lzdHJ5IGVudHJ5LgorRmlsZXM6CSAgICBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDUuNHAuMTEKK1Byb2JsZW06ICAgIE1vdGlmLCBBdGhlbmEgYW5kIEdUSzogV2hlbiBjbG9zaW5nIHRoZSBHVUkgd2luZG93IHdoZW4gdGhlcmUgaXMgYQorCSAgICBjaGFuZ2VkIGJ1ZmZlciwgdGhlcmUgd2FzIG9ubHkgYW4gZXJyb3IgbWVzc2FnZSBhbmQgVmltIHdvdWxkIG5vdAorCSAgICBleGl0LgorU29sdXRpb246ICAgUHV0IHVwIGEgZGlhbG9nLCBsaWtlIGZvciAiOmNvbmZpcm0gcWEiLiAgVXNlcyB0aGUgY29kZSB0aGF0IHdhcworCSAgICBhbHJlYWR5IHVzZWQgZm9yIE1TLVdpbmRvd3MuCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjRwLjEyCitQcm9ibGVtOiAgICBXaW4zMjogVHJ5aW5nIHRvIGV4cGFuZCBhIHN0cmluZyB0aGF0IGlzIGxvbmdlciB0aGFuIDI1NgorCSAgICBjaGFyYWN0ZXJzIGNvdWxkIGNhdXNlIGEgY3Jhc2guIChTdGVlZCkKK1NvbHV0aW9uOiAgIEZvciB0aGUgYnVmZmVyIGluIHdpbjMyX2V4cGFuZHBhdGgoKSBkb24ndCB1c2UgYSBmaXhlZCBzaXplIGFycmF5LAorCSAgICBhbGxvY2F0ZSBpdC4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworTVNET1M6IEFkZGVkICItV2FsbCIgdG8gTWFrZWZpbGUuZGpnIGNvbXBpbGUgZmxhZ3MuICBGdW5jdGlvbiBwcm90b3R5cGVzIGZvcgorZm5hbWVfY2FzZSgpIGFuZCBtY2hfdXBkYXRlX2N1cnNvcigpIHdlcmUgbWlzc2luZy4gICJmZCIgd2FzIHVudXNlZCBpbgorbWZfc3luYygpLiAgInB1aUxvY2F0aW9uIiB3YXMgdW51c2VkIGluIG15cHV0Y2goKS4gICJuZXdjbWQiIHVudXNlZCBpbgorbWNoX2NhbGxfc2hlbGwoKSBmb3IgREpHUFAgdmVyc2lvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitWRVJTSU9OIDUuNQkJCQkJCSp2ZXJzaW9uLTUuNSoKKworVmVyc2lvbiA1LjUgaXMgYSBidWctZml4IHZlcnNpb24gb2YgNS40LgorCisKK0NoYW5nZWQJCQkJCQkJKmNoYW5nZWQtNS41KgorLS0tLS0tLQorCitUaGUgREpHUFAgdmVyc2lvbiBpcyBub3cgY29tcGlsZWQgd2l0aCAiLU8yIiBpbnN0ZWFkIG9mICItTzQiIHRvIHJlZHVjZSB0aGUKK3NpemUgb2YgdGhlIGV4ZWN1dGFibGVzLgorCitNb3ZlZCB0aGUgc3JjL1NUWUxFIGZpbGUgdG8gcnVudGltZS9kb2MvZGV2ZWxvcC50eHQuICBBZGRlZCB0aGUgZGVzaWduIGdvYWxzCit0byBpdC4KKworJ2JhY2tzcGFjZScgaXMgbm93IGEgc3RyaW5nIG9wdGlvbi4gIFNlZSBwYXRjaCA1LjQuMTUuCisKKworQWRkZWQJCQkJCQkJKmFkZGVkLTUuNSoKKy0tLS0tCisKK0luY2x1ZGVkIEV4dWJlcmFudCBDdGFncyB2ZXJzaW9uIDMuMy4gKERhcnJlbiBIaWViZXJ0KQorCitJbiBydW50aW1lL21zd2luLnZpbSwgbWFwIENUUkwtUSB0byBDVFJMLVYsIHNvIHRoYXQgQ1RSTC1RIGNhbiBiZSB1c2VkCitldmVyeXdoZXJlIHRvIGRvIHdoYXQgQ1RSTC1WIHVzZWQgdG8gZG8uCisKK1N1cHBvcnQgZm9yIGRlY29tcHJlc3Npb24gb2YgYnppcDIgZmlsZXMgaW4gdmltcmNfZXhhbXBsZS52aW0uCisKK1doZW4gYSBwYXRjaCBpcyBpbmNsdWRlZCwgdGhlIHBhdGNoIG51bWJlciBpcyBlbnRlcmVkIGluIGEgdGFibGUgaW4gdmVyc2lvbi5jLgorVGhpcyBhbGxvd3Mgc2tpcHBpbmcgYSBwYXRjaCB3aXRob3V0IGJyZWFraW5nIGEgbmV4dCBvbmUuCisKK1N1cHBvcnQgZm9yIG1vdXNlIHNjcm9sbCB3aGVlbCBpbiBYMTEuICBTZWUgcGF0Y2ggNS41YS4xNC4KKworbGluZTJieXRlKCkgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBTZWUgcGF0Y2ggNS40LjM1LgorCitUaGUgQ1RSTC1SIENUUkwtTyByIGFuZCBDVFJMLVIgQ1RSTC1QIHIgY29tbWFuZHMgaW4gSW5zZXJ0IG1vZGUgYXJlIHVzZWQgdG8KK2luc2VydCBhIHJlZ2lzdGVyIGxpdGVyYWxseS4gIFNlZSBwYXRjaCA1LjQuNDguCisKK1VuaW5zdGFsbCBwcm9ncmFtIGZvciBNUy1XaW5kb3dzLiAgVG8gYmUgYWJsZSB0byByZW1vdmUgdGhlIHJlZ2lzdHJ5IGVudHJpZXMKK2ZvciAiRWRpdCB3aXRoIFZpbSIuICBJdCBpcyByZWdpc3RlcmVkIHRvIGJlIHJ1biBmcm9tIHRoZSAiQWRkL1JlbW92ZQorcHJvZ3JhbXMiIGFwcGxpY2F0aW9uLiAgU2VlIHBhdGNoIDUuNC54Ny4KKworCitGaXhlZAkJCQkJCQkqZml4ZWQtNS41KgorLS0tLS0KKworV2hlbiB1c2luZyB2aW1yY19leGFtcGxlLnZpbTogQW4gZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBjdXJzb3IgaXMgb24gYSBsaW5lCitoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBjb21wcmVzc2VkIGZpbGUuICBNb3ZlIHRoZSBhdXRvY29tbWFuZAorZm9yIGp1bXBpbmcgdG8gdGhlIGxhc3Qga25vd24gY3Vyc29yIHBvc2l0aW9uIHRvIGFmdGVyIHRoZSBkZWNvbXByZXNzaW5nCithdXRvY29tbWFuZHMuCisKKyI6bWtleHJjIiBhbmQgIjpta3Nlc3Npb24iIHdyb3RlIHRoZSBjdXJyZW50IHZhbHVlIG9mICd0ZXh0bW9kZScuICBUaGF0IG1heQorbWFyayBhIGZpbGUgYXMgbW9kaWZpZWQsIHdoaWNoIGNhdXNlcyBwcm9ibGVtcy4gIFRoaXMgaXMgYSBidWZmZXItc3BlY2lmaWMKK3NldHRpbmcsIGl0IHNob3VsZCBub3QgYWZmZWN0IGFsbCBmaWxlcy4KKworInZpbSAtLXZlcnNpb24iIHdyb3RlIHR3byBlbXB0eSBsaW5lcy4KKworVW5peDogVGhlIGFsYXJtIHNpZ25hbCBjb3VsZCBraWxsIFZpbS4gIEl0IGlzIGdlbmVyYXRlZCBieSB0aGUgUGVybCBhbGFybSgpCitmdW5jdGlvbi4gIElnbm9yZSBTSUdBTFJNLgorCitXaW4zMiBHVUk6IFRvb2xiYXIgc3RpbGwgaGFkIHRoZSB5ZWxsb3cgYml0bWFwIGZvciBydW5uaW5nIGEgVmltIHNjcmlwdC4KKworQmVPUzogInRtbyIgbXVzdCBiZSBiaWd0aW1lX3QsIGluc3RlYWQgb2YgZG91YmxlLiAoU2VpYmVydCkKKworUGF0Y2ggNS40LjEKK1Byb2JsZW06ICAgIFRlc3QxMSBmYWlscyB3aGVuICRHWklQIGlzIHNldCB0byAiLXYiLiAoTWF0dGhldyBKYWNrc29uKQorU29sdXRpb246ICAgU2V0ICRHWklQIHRvIGFuIGVtcHR5IHN0cmluZy4KK0ZpbGVzOgkgICAgc3JjL3Rlc3RkaXIvdGVzdDExLmluCisKK1BhdGNoIDUuNC4yCitQcm9ibGVtOiAgICBUeXBpbmcgPEVzYz4gYXQgdGhlIGNyeXB0IGtleSBwcm9tcHQgY2F1c2VkIGEgY3Jhc2guIChLYWxsaW5nYWwpCitTb2x1dGlvbjogICBDaGVjayBmb3IgYSBOVUxMIHBvaW50ZXIgcmV0dXJuZWQgZnJvbSBnZXRfY3J5cHRfa2V5KCkuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA1LjQuMworUHJvYmxlbTogICAgUHl0aG9uOiBUcnlpbmcgdG8gdXNlIHRoZSBuYW1lIG9mIGFuIHVubmFtZWQgYnVmZmVyIGNhdXNlZCBhCisJICAgIGNyYXNoLiAoRGFuaWVsIEJ1cnJvd3MpCitTb2x1dGlvbjogICBDaGVjayBmb3IgYl9mbmFtZSBiZWluZyBhIE5VTEwgcG9pbnRlci4KK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDUuNC40CitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiBjb21waWxlZCB3aXRob3V0IHRvb2xiYXIsIGJ1dCB0aGUgJ1QnIGZsYWcgaXMgaW4KKwkgICAgJ2d1aW9wdGlvbnMnLCB0aGVyZSB3b3VsZCBiZSBhbiBlbXB0eSBzcGFjZSBmb3IgdGhlIHRvb2xiYXIuCitTb2x1dGlvbjogICBBZGQgdHdvICNpZmRlZnMgd2hlcmUgY2hlY2tpbmcgZm9yIHRoZSAnVCcgZmxhZy4gKFZpbmNlIE5lZ3JpKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNS40LjUKK1Byb2JsZW06ICAgIEF0aGVuYSBHVUk6IFVzaW5nIHRoZSBCdWZmZXJzLlJlZnJlc2ggbWVudSBlbnRyeSBjYXVzZWQgYSBjcmFzaC4KKwkgICAgTG9va3MgbGlrZSBhbnkgIjp1bm1lbnUiIGNvbW1hbmQgbWF5IGNhdXNlIHRyb3VibGUuCitTb2x1dGlvbjogICBEaXNhbGxvdyAiOnVubWVudSIgaW4gdGhlIEF0aGVuYSB2ZXJzaW9uLiAgRGlzYWJsZSB0aGUgQnVmZmVycworCSAgICBtZW51LCBiZWNhdXNlIHRoZSBSZWZyZXNoIGl0ZW0gd291bGQgbm90IHdvcmsuCitGaWxlczoJICAgIHNyYy9tZW51LmMsIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNS40LjYKK1Byb2JsZW06ICAgIEdUSyBHVUk6IFVzaW5nICI6Z3VpIiBpbiB0aGUgLmd2aW1yYyBmaWxlIGNhdXNlZCBhbiBlcnJvci4gIE9ubHkKKwkgICAgaGFwcGVucyB3aGVuIHRoZSBHVUkgZm9ya3MuCitTb2x1dGlvbjogICBEb24ndCBmb3JrIGluIGEgcmVjdXJzaXZlIGNhbGwgb2YgZ3VpX3N0YXJ0KCkuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA1LjQuNworUHJvYmxlbTogICAgVHlwaW5nICdxJyBhdCB0aGUgbW9yZSBwcm9tcHQgZm9yIHRoZSBBVFRFTlRJT04gbWVzc2FnZSBjYXVzZXMgdGhlCisJICAgIGZpbGUgbG9hZGluZyB0byBiZSBpbnRlcnJ1cHRlZC4gKFdpbGwgRGF5KQorU29sdXRpb246ICAgUmVzZXQgZ290X2ludCBhZnRlciBzaG93aW5nIHRoZSBBVFRFTlRJT04gbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL21lbWxpbmUuYworCitQYXRjaCA1LjQuOAorUHJvYmxlbTogICAgRWRpdCBzb21lIGZpbGUsICI6aGUiLCAiOm9wdCI6IG9wdGlvbnMgZnJvbSBoZWxwIHdpbmRvdyBhcmUgc2hvd24sCisJICAgIGJ1dCBwcmVzc2luZyBzcGFjZSB1cGRhdGVzIGZyb20gdGhlIG90aGVyIHdpbmRvdy4gKFBoaWxsaXBwcykKKwkgICAgQWxzbzogV2hlbiB0aGVyZSBhcmUgY2hhbmdlcyBpbiB0aGUgb3B0aW9uLXdpbmRvdywgIjpxISIgZ2l2ZXMgYW4KKwkgICAgZXJyb3IgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIEJlZm9yZSBjcmVhdGluZyB0aGUgb3B0aW9uLXdpbmRvdywgZ28gdG8gYSBub24taGVscCB3aW5kb3cuCisJICAgIFVzZSAiOmJkZWwhIiB0byBkZWxldGUgdGhlIGJ1ZmZlci4KK0ZpbGVzOgkgICAgcnVudGltZS9vcHR3aW4udmltCisKK1BhdGNoIDUuNC45CisJICAgIEp1c3QgdXBkYXRlcyB2ZXJzaW9uLmguICBUaGUgcmVhbCBwYXRjaCBoYXMgYmVlbiBtb3ZlZCB0byA1LjQueDEuCisJICAgIFRoaXMgcGF0Y2ggaXMganVzdCB0byBrZWVwIHRoZSB2ZXJzaW9uIG51bWJlciBjb3JyZWN0LgorCitQYXRjaCA1LjQuMTAKK1Byb2JsZW06ICAgIEdUSyBHVUk6IFdoZW4gJERJU1BMQVkgaXMgaW52YWxpZCwgImd2aW0gLWYiIGp1c3QgZXhpdHMuICBJdAorCSAgICBzaG91bGQgcnVuIGluIHRoZSB0ZXJtaW5hbC4KK1NvbHV0aW9uOiAgIFVzZSBndGtfaW5pdF9jaGVjaygpIGluc3RlYWQgb2YgZ3RrX2luaXQoKS4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNS40LjExCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHRoZSAnUycgZmxhZyBpbiAnY3BvcHRpb25zJywgJ3RhYnN0b3AnIGlzIG5vdCBjb3BpZWQgdG8KKwkgICAgdGhlIG5leHQgYnVmZmVyIGZvciBzb21lIGNvbW1hbmRzLCBlLmcuLCAiOmJ1ZmZlciIuCitTb2x1dGlvbjogICBXaGVuIHRoZSBCQ09fTk9IRUxQIGZsYWcgaXMgZ2l2ZW4gdG8gYnVmX2NvcHlfb3B0aW9ucygpLCBzdGlsbAorCSAgICBjb3B5IHRoZSBvcHRpb25zIHVzZWQgYnkgZG9faGVscCgpIHdoZW4gbmVpdGhlciB0aGUgImZyb20iIG9yICJ0byIKKwkgICAgYnVmZmVyIGlzIGEgaGVscCBidWZmZXIuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA1LjQuMTIKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgJ3NtYXJ0aW5kZW50JywgdGhlcmUgd291bGQgYmUgbm8gZXh0cmEgaW5kZW50IGlmIHRoZQorCSAgICBjdXJyZW50IGxpbmUgZGlkIG5vdCBoYXZlIGFueSBpbmRlbnQgYWxyZWFkeS4gKEhhbnVzIEFkbGVyKQorU29sdXRpb246ICAgVGhlcmUgd2FzIGEgd3JvbmdseSBwbGFjZWQgImVsc2UiLCB0aGF0IHByZXZpb3VzbHkgbWF0Y2hlZCB3aXRoCisJICAgIHRoZSAiaWYiIHRoYXQgc2V0IHRydW5jX2xpbmUuICBSZW1vdmVkIHRoZSAiZWxzZSIgYW5kIGFkZGVkIGEKKwkgICAgY2hlY2sgZm9yIHRydW5jX2xpbmUgdG8gYmUgZmFsc2UuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDUuNC4xMworUHJvYmxlbTogICAgTmV3IFNHSSBDIGNvbXBpbGVycyBuZWVkIGFub3RoZXIgb3B0aW9uIGZvciBvcHRpbWlzYXRpb24uCitTb2x1dGlvbjogICBBZGQgYSBjaGVjayBpbiBjb25maWd1cmUgZm9yICItT1BUOk9saW1pdCIuIChDaGluIEEgWW91bmcpCitGaWxlczoJICAgIHNyYy9jb25maWd1cmUuaW4sIHNyYy9jb25maWd1cmUKKworUGF0Y2ggNS40LjE0CitQcm9ibGVtOiAgICBNb3RpZiBHVUk6IFdoZW4gdGhlIHBvcHVwIG1lbnUgaXMgcHJlc2VudCwgYSB0aW55IHdpbmRvdyBhcHBlYXJzCisJICAgIG9uIHRoZSBkZXNrdG9wIGZvciBzb21lIHVzZXJzLgorU29sdXRpb246ICAgU2V0IHRoZSBtZW51IHdpZGdldCBJRCBmb3IgYSBwb3B1cCBtZW51IHRvIDAuIChUaG9tYXMgS29laGxlcikKK0ZpbGVzOgkgICAgc3JjL2d1aV9tb3RpZi5jCisKK1BhdGNoIDUuNC4xNQorUHJvYmxlbTogICAgU2luY2UgJ2JhY2tzcGFjZScgc2V0IHRvIDAgaGFzIGJlZW4gbWFkZSBWaSBjb21wYXRpYmxlLCBpdCBpcyBubworCSAgICBsb25nZXIgcG9zc2libGUgdG8gb25seSBhbGxvdyBkZWxldGluZyBhdXRvaW5kZW50LgorU29sdXRpb246ICAgTWFrZSAnYmFja3NwYWNlJyBhIGxpc3Qgb2YgcGFydHMsIHRvIGFsbG93IGVhY2gga2luZCBvZgorCSAgICBiYWNrc3BhY2luZyBzZXBhcmF0ZWx5LgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvb3B0aW9uLmMsIHNyYy9vcHRpb24uaCwgc3JjL3Byb3RvL29wdGlvbi5wcm8sCisJICAgIHJ1bnRpbWUvZG9jL29wdGlvbi50eHQsIHJ1bnRpbWUvZG9jL2luc2VydC50eHQKKworUGF0Y2ggNS40LjE2CitQcm9ibGVtOiAgICBNdWx0aWJ5dGU6IExvY2FsZSB6aF9UVy5CaWc1IHdhcyBub3QgY2hlY2tlZCBmb3IgaW4gY29uZmlndXJlLgorU29sdXRpb246ICAgQWRkIHpoX1RXLkJpZzUgdG8gY29uZmlndXJlIGNoZWNrLiAoQ2hpaC1Uc3VuIEh1YW5nKQorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlndXJlCisKK1BhdGNoIDUuNC4xNworUHJvYmxlbTogICAgR1VJOiBXaGVuIHN0YXJ0ZWQgZnJvbSBpbnNpZGUgZ3ZpbSB3aXRoICI6IWd2aW0iLCBWaW0gd291bGQgbm90CisJICAgIHN0YXJ0LiAgIjohZ3ZpbSAtZiIgd29ya3MgZmluZS4KK1NvbHV0aW9uOiAgIEFmdGVyIGZvcmtpbmcsIHdhaXQgYSBtb21lbnQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLCB0byBnaXZlIHRoZQorCSAgICBjaGlsZCBhIGNoYW5jZSB0byBzZXQgaXRzIHByb2Nlc3MgZ3JvdXAuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA1LjQuMTgKK1Byb2JsZW06ICAgIFB5dGhvbjogVGhlIGNsZWFyX2hpc3RvcnkoKSBmdW5jdGlvbiBhbHNvIGV4aXN0cyBpbiBhIGxpYnJhcnkuCitTb2x1dGlvbjogICBSZW5hbWUgY2xlYXJfaGlzdG9yeSgpIHRvIGNsZWFyX2hpc3QoKS4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMsIHNyYy9ldmFsLmMsIHNyYy9wcm90by9leF9nZXRsbi5wcm8KKworUGF0Y2ggNS40LjE5CitQcm9ibGVtOiAgICBJbiBhIHRlcm1pbmFsIHdpdGggMjUgbGluZXMsIHRoZXJlIGlzIGEgbW9yZSBwcm9tcHQgYWZ0ZXIgdGhlCisJICAgIEFUVEVOVElPTiBtZXNzYWdlLiAgV2hlbiBoaXR0aW5nICdxJyBoZXJlIHRoZSBkaWFsb2cgcHJvbXB0CisJICAgIGRvZXNuJ3QgYXBwZWFyIGFuZCBmaWxlIGxvYWRpbmcgaXMgaW50ZXJydXB0ZWQuIChXaWxsIERheSkKK1NvbHV0aW9uOiAgIERvbid0IGFsbG93IHF1aXR0aW5nIHRoZSBwcmludGluZyBvZiBhIG1lc3NhZ2UgZm9yIHRoZSBkaWFsb2cKKwkgICAgcHJvbXB0LiAgQWRkZWQgdGhlIG1zZ19ub3F1aXRfbW9yZSBmbGFnIGZvciB0aGlzLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDUuNC4yMAorUHJvYmxlbTogICAgR1RLOiBXaGVuIHN0YXJ0aW5nIGd2aW0sIHdvdWxkIHNlbmQgZXNjYXBlIHNlcXVlbmNlcyB0byB0aGUKKwkgICAgdGVybWluYWwgdG8gc3dpdGNoIHRoZSBjdXJzb3Igb2ZmIGFuZCBvbi4KK1NvbHV0aW9uOiAgIERvbid0IGNhbGwgbXNnX3N0YXJ0KCkgaWYgdGhlIEdVSSBpcyBleHBlY3RlZCB0byBzdGFydC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA1LjQuMjEKK1Byb2JsZW06ICAgIE1vdGlmOiBUb3BsZXZlbCBtZW51IG9yZGVyaW5nIHdhcyB3cm9uZyB3aGVuIHVzaW5nIHRlYXItb2ZmIGl0ZW1zLgorU29sdXRpb246ICAgRG9uJ3QgYWRkIG9uZSB0byB0aGUgaW5kZXggZm9yIGEgdG9wbGV2ZWwgbWVudS4KK0ZpbGVzOgkgICAgc3JjL2d1aV9tb3RpZi5jCisKK1BhdGNoIDUuNC4yMgorUHJvYmxlbTogICAgSW4gSW5zZXJ0IG1vZGUsIDxDLUxlZnQ+LCA8Uy1MZWZ0PiwgPEMtUmlnaHQ+IGFuZCA8Uy1SaWdodD4gZGlkbid0CisJICAgIHVwZGF0ZSB0aGUgY29sdW1uIHVzZWQgZm9yIHZlcnRpY2FsIG1vdmVtZW50LgorU29sdXRpb246ICAgU2V0IGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgZm9yIHRob3NlIGNvbW1hbmRzLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDUuNC4yMworUHJvYmxlbTogICAgV2hlbiBhIFZpc3VhbCBzZWxlY3Rpb24gaXMgbG9zdCB0byBhbm90aGVyIHByb2dyYW0sIGFuZCB0aGVuIHRoZQorCSAgICBzYW1lIHRleHQgaXMgVmlzdWFsbHkgc2VsZWN0ZWQgYWdhaW4sIHRoZSBjbGlwYm9hcmQgb3duZXJzaGlwCisJICAgIHdhc24ndCByZWdhaW5lZC4KK1NvbHV0aW9uOiAgIFNldCBjbGlwYm9hcmQudm1vZGUgdG8gTlVMIHRvIGZvcmNlIHJlZ2FpbmluZyB0aGUgY2xpcGJvYXJkLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNS40LjI0CitQcm9ibGVtOiAgICBFbmNyeXB0aW9uOiBXaGVuIHVzaW5nICI6ciBmaWxlIiB3aGlsZSAna2V5JyBoYXMgYWxyZWFkeSBlbnRlcmVkLAorCSAgICB0aGUgJ2tleScgb3B0aW9uIHdvdWxkIGJlIG1lc3NlZCB1cC4gIFdoZW4gd3JpdGluZyB0aGUgZmlsZSBpdAorCSAgICB3b3VsZCBiZSBlbmNyeXB0ZWQgd2l0aCBhbiB1bmtub3duIGtleSBhbmQgbG9zdCEgKEJyYWQgRGVzcHJlcykKK1NvbHV0aW9uOiAgIERvbid0IGZyZWUgY3J5cHRrZXkgd2hlbiBpdCBpcyBlcXVhbCB0byB0aGUgJ2tleScgb3B0aW9uLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNS40LjI1CitQcm9ibGVtOiAgICBXaGVuICdjaW5kZW50JyBpcyBzZXQsIGJ1dCAnYXV0b2luZGVudCcgaXNuJ3QsIGNvbW1lbnRzIGFyZSBub3QKKwkgICAgcHJvcGVybHkgaW5kZW50ZWQgd2hlbiBzdGFydGluZyBhIG5ldyBsaW5lLiAoTWl0dGVyYW5kKQorU29sdXRpb246ICAgV2hlbiB0aGVyZSBpcyBhIGNvbW1lbnQgbGVhZGVyIGZvciB0aGUgbmV3IGxpbmUsIGJ1dCAnYXV0b2luZGVudCcKKwkgICAgaXNuJ3Qgc2V0LCBkbyBDLWluZGVudGluZy4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNS40LjI2CitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGlzIG5ldmVyIHJlY29nbml6ZWQgaW4gYSBmaWxlCisJICAgIG5hbWUsIGNhdXNpbmcgYSBiYWNrc2xhc2ggYmVmb3JlIGl0IHRvIGJlIHJlbW92ZWQgb24gV2luZG93cy4KK1NvbHV0aW9uOiAgIEFzc3VtZSB0aGF0IGEgbGVhZGluZy1ieXRlIGNoYXJhY3RlciBpcyBhIGZpbGUgbmFtZSBjaGFyYWN0ZXIgaW4KKwkgICAgdmltX2lzZmlsZWMoKS4KK0ZpbGVzOgkgICAgc3JjL2NoYXJzZXQuYworCitQYXRjaCA1LjQuMjcKK1Byb2JsZW06ICAgIEVudHJpZXMgaW4gdGhlIFBvcFVwW252aWNdIG1lbnVzIHdlcmUgYWRkZWQgZm9yIHNldmVyYWwgbW9kZXMsIGJ1dAorCSAgICBvbmx5IGRlbGV0ZWQgZm9yIHRoZSBtb2RlIHRoZXkgd2VyZSB1c2VkIGZvci4gIFRoaXMgcmVzdWx0ZWQgaW4KKwkgICAgdGhlICBlbnRyeSByZW1haW5pbmcgaW4gdGhlIFBvcFVwIG1lbnUuCisJICAgIFdoZW4gcmVtb3ZpbmcgYSBQb3BVcFtudmljXSBtZW51LCB0aGUgbmFtZSBoYWQgYmVlbiB0cnVuY2F0ZWQsCisJICAgIGNvdWxkIHJlc3VsdCBpbiBncmV5aW5nLW91dCB0aGUgd2hvbGUgUG9wVXAgbWVudS4KK1NvbHV0aW9uOiAgIFJlbW92ZSBlbnRyaWVzIGZvciBhbGwgbW9kZXMgZnJvbSB0aGUgUG9wVXBbbnZpY10gbWVudXMuICBSZW1vdmUKKwkgICAgdGhlIFBvcFVwW252aWNdIG1lbnUgZW50cmllcyBmaXJzdCwgYmVmb3JlIHRoZSBuYW1lIGlzIGNoYW5nZWQuCitGaWxlczoJICAgIHNyYy9tZW51LmMKKworUGF0Y2ggNS40LjI4CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgQnVmV3JpdGVQcmUgYXV0b2NvbW1hbmQgdG8gY2hhbmdlICdmaWxlZm9ybWF0JywgdGhlCisJICAgIG5ldyB2YWx1ZSB3b3VsZCBub3QgYmUgdXNlZCBmb3Igd3JpdGluZyB0aGUgZmlsZS4KK1NvbHV0aW9uOiAgIENoZWNrICdmaWxlZm9ybWF0JyBhZnRlciBleGVjdXRpbmcgdGhlIGF1dG9jb21tYW5kcyBpbnN0ZWFkIG9mCisJICAgIGJlZm9yZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNC4yOQorUHJvYmxlbTogICAgQXRoZW5hIEdVSTogV2hlbiByZW1vdmluZyB0aGUgJ2cnIGZsYWcgZnJvbSAnZ3Vpb3B0aW9ucycsIHVzaW5nIGEKKwkgICAgbWVudSBjYW4gcmVzdWx0IGluIGEgY3Jhc2guCitTb2x1dGlvbjogICBBbHdheXMgZ3JleS1vdXQgbWVudXMgZm9yIEF0aGVuYSwgZG9uJ3QgaGlkZSB0aGVtLgorRmlsZXM6CSAgICBzcmMvbWVudS5jCisKK1BhdGNoIDUuNC4zMAorUHJvYmxlbTogICAgQmVPUzogU3VzcGVuZGluZyBWaW0gd2l0aCBDVFJMLVogZGlkbid0IHdvcmsgKGtpbGxlZCBWaW0pLiAgVGhlCisJICAgIGZpcnN0IGNoYXJhY3RlciB0eXBlZCBhZnRlciAiOnNoIiBnb2VzIHRvIFZpbSwgaW5zdGVhZCBvZiB0aGUKKwkgICAgc3RhcnRlZCBzaGVsbC4KK1NvbHV0aW9uOiAgIERvbid0IHN1c3BlbmQgVmltLCBzdGFydCBhIG5ldyBzaGVsbC4gIEtpbGwgdGhlIGFzeW5jIHJlYWQgdGhyZWFkCisJICAgIHdoZW4gc3RhcnRpbmcgYSBuZXcgc2hlbGwuICBJdCB3aWxsIGJlIHJlc3RhcnRlZCBsYXRlci4gKFdpbGwgRGF5KQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jLCBzcmMvdWkuYworCitQYXRjaCA1LjQuMzEKK1Byb2JsZW06ICAgIEdVSTogV2hlbiAnbW91c2Vmb2N1cycgaXMgc2V0LCBtb3ZpbmcgdGhlIG1vdXNlIG92ZXIgd2hlcmUgYQorCSAgICB3aW5kb3cgYm91bmRhcnkgd2FzLCBjYXVzZXMgYSBoaXQtZW50ZXIgcHJvbXB0IHRvIGJlIGZpbmlzaGVkLgorCSAgICAoSmVmZiBXYWxrZXIpCitTb2x1dGlvbjogICBEb24ndCB1c2UgJ21vdXNlZm9jdXMnIGF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0LiAgQWxzbyBpZ25vcmUgaXQKKwkgICAgZm9yIHRoZSBtb3JlIHByb21wdCBhbmQgYSBmZXcgb3RoZXIgc2l0dWF0aW9ucy4gIFdoZW4gYW4gb3BlcmF0b3IKKwkgICAgaXMgcGVuZGluZywgYWJvcnQgaXQgZmlyc3QuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA1LjQuMzIKK1Byb2JsZW06ICAgIFVuaXg6ICRMREZMQUdTIHdhcyBub3QgcGFzc2VkIHRvIGNvbmZpZ3VyZS4KK1NvbHV0aW9uOiAgIFBhc3MgJExERkxBR1MgdG8gY29uZmlndXJlIGp1c3QgbGlrZSAkQ0ZMQUdTLiAoSm9uIE1pbmVyKQorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNS40LjMzCitQcm9ibGVtOiAgICBVbml4OiBBZnRlciBleHBhbmRpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCB0aGUgc2hlbGwsIHRoZQorCSAgICBuZXh0IGV4cGFuc2lvbiB3b3VsZCBhbHNvIHVzZSB0aGUgc2hlbGwsIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdAorCSAgICBuZWVkZWQuCitTb2x1dGlvbjogICBSZXNldCAicmVjdXJzaXZlIiBiZWZvcmUgcmV0dXJuaW5nIGZyb20gZ2VuX2V4cGFuZF93aWxkY2FyZHMoKS4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNS40LjM0IChhbHNvIHNlZSA1LjQueDUpCitQcm9ibGVtOiAgICBXaGVuIGVkaXRpbmcgYSBmaWxlLCBhbmQgdGhlIGZpbGUgbmFtZSBpcyByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeQorCSAgICBhYm92ZSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoZSBmaWxlIG5hbWUgd2FzIG1hZGUgYWJzb2x1dGUuCisJICAgIChHcmVnb3J5IE1hcmdvKQorU29sdXRpb246ICAgQWRkIGFuIGFyZ3VtZW50IHRvIHNob3J0ZW5fZm5hbWVzKCkgd2hpY2ggaW5kaWNhdGVzIGlmIGFsbCBmaWxlCisJICAgIG5hbWVzIHNob3VsZCBiZSBzaG9ydGVuZWQsIG9yIG9ubHkgYWJzb2x1dGUgbmFtZXMuICBJbiBtYWluKCkgb25seQorCSAgICB1c2Ugc2hvcnRlbl9mbmFtZXMoKSB0byBzaG9ydGVuIGFic29sdXRlIG5hbWVzLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2ZpbGVpby5jLCBzcmMvbWFpbi5jLCBzcmMvcHJvdG8vZmlsZWlvLnBybworCitQYXRjaCA1LjQuMzUKK1Byb2JsZW06ICAgIFRoZXJlIGlzIG5vIGZ1bmN0aW9uIHRvIGdldCB0aGUgY3VycmVudCBmaWxlIHNpemUuCitTb2x1dGlvbjogICBBbGxvdyB1c2luZyBsaW5lMmJ5dGUoKSB3aXRoIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpbGUgcGx1cworCSAgICBvbmUuICBUaGlzIHJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbGluZSBwYXN0IHRoZSBlbmQgb2YgdGhlCisJICAgIGZpbGUsIHdoaWNoIGlzIHRoZSBmaWxlIHNpemUgcGx1cyBvbmUuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHJ1bnRpbWUvZG9jL2V2YWwudHh0CisKK1BhdGNoIDUuNC4zNgorUHJvYmxlbTogICAgQ29tcGFyaW5nIHN0cmluZ3Mgd2hpbGUgaWdub3JpbmcgY2FzZSBkaWRuJ3Qgd29yayBjb3JyZWN0bHkgZm9yCisJICAgIHNvbWUgbWFjaGluZXMuIChNaWRlIFN0ZWVkKQorU29sdXRpb246ICAgdmltX3N0cmljbXAoKSBhbmQgdmltX3N0cm5pY21wKCkgb25seSByZXR1cm5lZCAwIG9yIDEuICBDaGFuZ2VkCisJICAgIHRoZW0gdG8gcmV0dXJuIC0xIHdoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHNtYWxsZXIuCitGaWxlczoJICAgIHNyYy9taXNjMi5jCisKK1BhdGNoIDUuNC4zNyAoYWxzbyBzZWUgNS40LjQwIGFuZCA1LjQuNDMpCitQcm9ibGVtOiAgICBMb25nIHN0cmluZ3MgZnJvbSB0aGUgdmltaW5mbyBmaWxlIGFyZSB0cnVuY2F0ZWQuCitTb2x1dGlvbjogICBXaGVuIHdyaXRpbmcgYSBsb25nIHN0cmluZyB0byB0aGUgdmltaW5mbyBmaWxlLCBmaXJzdCB3cml0ZSBhIGxpbmUKKwkgICAgd2l0aCB0aGUgbGVuZ3RoLCB0aGVuIHRoZSBzdHJpbmcgaXRzZWxmIGluIGEgc2Vjb25kIGxpbmUuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9leF9jbWRzLmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvbWFyay5jLCBzcmMvb3BzLmMsCisJICAgIHNyYy9zZWFyY2guYywgc3JjL3Byb3RvL2V4X2NtZHMucHJvLCBydW50aW1lL3N5bnRheC92aW1pbmZvLnZpbQorCitQYXRjaCA1LjQuMzgKK1Byb2JsZW06ICAgIEluIHRoZSBvcHRpb24td2luZG93LCAiOnNldCBnbyYiIHJlc3VsdGVkIGluICdnbycgYmVpbmcgaGFuZGxlZAorCSAgICBsaWtlIGEgYm9vbGVhbiBvcHRpb24uCisJICAgIE1hcHBpbmdzIGZvciA8U3BhY2U+IGFuZCA8Q1I+IHdlcmUgb3ZlcnJ1bGVkIGJ5IHRoZSBvcHRpb24td2luZG93LgorU29sdXRpb246ICAgV2hlbiB0aGUgdmFsdWUgb2YgYW4gb3B0aW9uIGlzbid0IDAgb3IgMSwgZG9uJ3QgaGFuZGxlIGl0IGxpa2UgYQorCSAgICBib29sZWFuIG9wdGlvbi4KKwkgICAgU2F2ZSBhbmQgcmVzdG9yZSBtYXBwaW5ncyBmb3IgPFNwYWNlPiBhbmQgPENSPiB3aGVuIGVudGVyaW5nIGFuZAorCSAgICBsZWF2aW5nIHRoZSBvcHRpb24td2luZG93LgorRmlsZXM6CSAgICBydW50aW1lL29wdHdpbi52aW0KKworUGF0Y2ggNS40LjM5CitQcm9ibGVtOiAgICBXaGVuIHNldHRpbmcgYSBoaWRkZW4gb3B0aW9uLCBzcGFjZXMgYmVmb3JlIHRoZSBlcXVhbCBzaWduIHdlcmUKKwkgICAgbm90IHNraXBwZWQgYW5kIGNhdXNlIGFuIGVycm9yIG1lc3NhZ2UuICBFLmcuLCAiOnNldCBjc3ByZyA9Y21kIi4KK1NvbHV0aW9uOiAgIFdoZW4gc2tpcHBpbmcgb3ZlciBhIGhpZGRlbiBvcHRpb24sIGNoZWNrIGZvciBhIGZvbGxvd2luZyAiPXZhbCIKKwkgICAgYW5kIHNraXAgaXQgdG9vLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNS40LjQwIChkZXBlbmRzIG9uIDUuNC4zNykKK1Byb2JsZW06ICAgIENvbXBpbGVyIGVycm9yIGZvciAiYXRvbChwICsgMSkiLiAoQXhlbCBLaWVsaG9ybikKK1NvbHV0aW9uOiAgIEFkZCBhIHR5cGVjYXN0OiAiYXRvbCgoY2hhciAqKXAgKyAxKSIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNS40LjQxCitQcm9ibGVtOiAgICBTb21lIGNvbW1hbmRzIHRoYXQgd2VyZSBub3QgaW5jbHVkZWQgd291bGQgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLAorCSAgICBldmVuIHdoZW4gYWZ0ZXIgImlmIDAiLgorU29sdXRpb246ICAgRG9uJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGZvciBhbiB1bnN1cHBvcnRlZCBjb21tYW5kIHdoZW4gbm90CisJICAgIGV4ZWN1dGluZyB0aGUgY29tbWFuZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNS40LjQyCitQcm9ibGVtOiAgICAiOnciIHdvdWxkIGFsc28gY2F1c2UgYSB0cnVuY2F0ZWQgbWVzc2FnZSB0byBhcHBlYXIgaW4gdGhlIG1lc3NhZ2UKKwkgICAgaGlzdG9yeS4KK1NvbHV0aW9uOiAgIERvbid0IHB1dCBhIGtlcHQgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBoaXN0b3J5IHdoZW4gaXQgc3RhcnRzCisJICAgIHdpdGggIjwiLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDUuNC40MyAoZGVwZW5kcyBvbiA1LjQuMzcpCitQcm9ibGVtOiAgICBNaXhpbmcgbG9uZyBsaW5lcyB3aXRoIG11bHRpcGxlIGxpbmVzIGluIGEgcmVnaXN0ZXIgY2F1c2VzIGVycm9ycworCSAgICB3aGVuIHdyaXRpbmcgdGhlIHZpbWluZm8gZmlsZS4gKFJvYmluc29uKQorU29sdXRpb246ICAgV2hlbiByZWFkaW5nIHRoZSB2aW1pbmZvIGZpbGUgdG8gc2tpcCByZWdpc3RlciBjb250ZW50cywgc2tpcAorCSAgICBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggIjwiLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNS40LjQ0CitQcm9ibGVtOiAgICBXaGVuICd3aGljaHdyYXAnIGluY2x1ZGVzICd+JywgYSAifiIgY29tbWFuZCB0aGF0IGdvZXMgb24gdG8gdGhlCisJICAgIG5leHQgbGluZSBjYW5ub3QgYmUgcHJvcGVybHkgdW5kb25lLiAoWmVsbG5lcikKK1NvbHV0aW9uOiAgIFNhdmUgZWFjaCBsaW5lIGZvciB1bmRvIGluIG5fc3dhcGNoYXIoKS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDUuNC40NSAoYWxzbyBzZWUgNS40Lng4KQorUHJvYmxlbTogICAgV2hlbiBleHBhbmQoIiRBU0RGIikgZmFpbHMsIHRoZXJlIGlzIGFuIGVycm9yIG1lc3NhZ2UuCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIGdsb2JhbCBleHBhbmRfaW50ZXJhY3RpdmVseS4gIFBhc3MgYSBmbGFnIGRvd24gdG8gc2tpcAorCSAgICB0aGUgZXJyb3IgbWVzc2FnZS4KKwkgICAgQWxzbzogZXhwYW5kKCIkQVNERiIpIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmICRBU0RGIGlzbid0IHNldC4KKwkgICAgUHJldmlvdXNseSBpdCByZXR1cm5lZCAiJEFTREYiIHdoZW4gJ3NoZWxsJyBpcyAic2giLgorCSAgICBBbHNvOiBzeXN0ZW0oKSBkb2Vzbid0IHByaW50IGFuIGVycm9yIHdoZW4gdGhlIGNvbW1hbmQgcmV0dXJucyBhbgorCSAgICBlcnJvciBjb2RlLgorRmlsZXM6CSAgICBtYW55CisKK1BhdGNoIDUuNC40NgorUHJvYmxlbTogICAgQmFja3NwYWNpbmcgZGlkIG5vdCBhbHdheXMgdXNlICdzb2Z0dGFic3RvcCcgYWZ0ZXIgaGl0dGluZyA8Q1I+LAorCSAgICBpbnNlcnRpbmcgYSByZWdpc3RlciwgbW92aW5nIHRoZSBjdXJzb3IsIGV0Yy4KK1NvbHV0aW9uOiAgIFJlc2V0IGluc2VydGVkX3NwYWNlIG11Y2ggbW9yZSBvZnRlbiBpbiBlZGl0KCkuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNS40LjQ3CitQcm9ibGVtOiAgICBXaGVuIGV4ZWN1dGluZyBCdWZXcml0ZVByZSBvciBCdWZXcml0ZVBvc3QgYXV0b2NvbW1hbmRzIGZvciBhCisJICAgIGhpZGRlbiBidWZmZXIsIHRoZSBjdXJzb3IgY291bGQgYmUgbW92ZWQgdG8gYSBub24tZXhpc3RpbmcKKwkgICAgcG9zaXRpb24uIChWaW5jZSBOZWdyaSkKK1NvbHV0aW9uOiAgIFNhdmUgYW5kIHJlc3RvcmUgdGhlIGN1cnNvciBhbmQgdG9wbGluZSBmb3IgdGhlIGN1cnJlbnQgd2luZG93CisJICAgIHdoZW4gaXQgaXMgZ29pbmcgdG8gYmUgdXNlZCB0byBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgYSBoaWRkZW4KKwkgICAgYnVmZmVyLiAgVXNlIGFuIGV4aXN0aW5nIHdpbmRvdyBmb3IgdGhlIGJ1ZmZlciB3aGVuIGl0J3Mgbm90CisJICAgIGhpZGRlbi4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNC40OAorUHJvYmxlbTogICAgQSBwYXN0ZSB3aXRoIHRoZSBtb3VzZSBpbiBJbnNlcnQgbW9kZSB3YXMgbm90IHJlcGVhdGVkIGV4YWN0bHkgdGhlCisJICAgIHNhbWUgd2l0aCAiLiIuICBGb3IgZXhhbXBsZSwgd2hlbiAnYXV0b2luZGVudCcgaXMgc2V0IGFuZCBwYXN0aW5nCisJICAgIHRleHQgd2l0aCBsZWFkaW5nIGluZGVudC4gKFBlcnJ5KQorU29sdXRpb246ICAgQWRkIHRoZSBDVFJMLVIgQ1RSTC1PIHIgYW5kIENUUkwtUiBDVFJMLVAgciBjb21tYW5kcyBpbiBJbnNlcnQKKwkgICAgbW9kZSwgd2hpY2ggaW5zZXJ0IHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIGxpdGVyYWxseS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL25vcm1hbC5jLCBydW50aW1lL2RvYy9pbnNlcnQudHh0CisKK1BhdGNoIDUuNC40OQorUHJvYmxlbTogICAgV2hlbiBwYXN0aW5nIHRleHQgd2l0aCBbIDxNaWRkbGVNb3VzZT4sIHRoZSBjdXJzb3IgY291bGQgZW5kIHVwCisJICAgIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgbGluZS4KK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlIGN1cnNvciBwb3NpdGlvbiBmb3IgdGhlIGNoYW5nZSBpbiBpbmRlbnQuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA1LjQueDEgKG5vdGU6IFJlcGxhY2VzIHBhdGNoIDUuNC45KQorUHJvYmxlbTogICAgV2luMzIgR1VJOiBtZW51IGhpbnRzIHdlcmUgbmV2ZXIgdXNlZCwgYmVjYXVzZSBXQU5UX01FTlUgaXMgbm90CisJICAgIGRlZmluZWQgdW50aWwgdmltLmggaXMgaW5jbHVkZWQuCitTb2x1dGlvbjogICBNb3ZlIHRoZSAjaWZkZWYgV0FOVF9NRU5VIGZyb20gd2hlcmUgTUVOVUhJTlRTIGlzIGRlZmluZWQgdG8gd2hlcmUKKwkgICAgaXQgaXMgdXNlZC4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjQueDIKK1Byb2JsZW06ICAgIEJlT1M6IFdoZW4gcGFzdGluZyB0ZXh0LCBvbmUgY2hhcmFjdGVyIHdhcyBtb3ZlZCB0byB0aGUgZW5kLgorU29sdXRpb246ICAgUmUtZW5hYmxlIHRoZSBCZU9TIGNvZGUgaW4gZmlsbF9pbnB1dF9idWYoKSwgYW5kIGZpeCB0aW1pbmcgb3V0CisJICAgIHdpdGggYWNxdWlyZV9zZW1fZXRjKCkuIChXaWxsIERheSkKK0ZpbGVzOgkgICAgc3JjL29zX2Jlb3MuYywgc3JjL3VpLmMKKworUGF0Y2ggNS40LngzCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFdoZW4gZHJvcHBpbmcgYSBkaXJlY3Rvcnkgb24gYSBydW5uaW5nIGd2aW0gaXQgY3Jhc2hlcy4KK1NvbHV0aW9uOiAgIEF2b2lkIHVzaW5nIGEgTlVMTCBmaWxlIG5hbWUuICBBbHNvIGRpc3BsYXkgYSBtZXNzYWdlIHRvIGluZGljYXRlCisJICAgIHRoYXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdhcyBjaGFuZ2VkLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNC54NAorUHJvYmxlbTogICAgV2luMzIgR1VJOiBSZW1vdmluZyBhbiBpdGVtIGZyb20gdGhlIHBvcHVwIG1lbnUgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgRG9uJ3QgcmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhlIG1lbnViYXIsIGJ1dCBmcm9tIHRoZSBwYXJlbnQgcG9wdXAKKwkgICAgbWVudS4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjQueDUgKGFkZGl0aW9uIHRvIDUuNC4zNCkKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjQueDYKK1Byb2JsZW06ICAgIFdpbjMyOiBFeHBhbmRpbmcgKGRpciluYW1lIHN0YXJ0aW5nIHdpdGggYSBkb3QgZG9lc24ndCB3b3JrLgorCSAgICAoTWNDb3JtYWNrKSAgT25seSB3aGVuIHRoZXJlIGlzIGEgcGF0aCBiZWZvcmUgaXQuCitTb2x1dGlvbjogICBGaXggdGhlIGNoZWNrLCBkb25lIGJlZm9yZSBleHBhbnNpb24sIGlmIHRoZSBmaWxlIG5hbWUgcGF0dGVybgorCSAgICBzdGFydHMgd2l0aCBhIGRvdC4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNS40Lng3CitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFJlbW92aW5nICJFZGl0IHdpdGggVmltIiBmcm9tIHJlZ2lzdHJ5IGlzIGRpZmZpY3VsdC4KK1NvbHV0aW9uOiAgIEFkZCB1bmluc3RhbGwgcHJvZ3JhbSB0byByZW1vdmUgdGhlIHJlZ2lzdHJ5IGtleXMuIEl0IGlzIGluc3RhbGxlZAorCSAgICBpbiB0aGUgIkFkZC9SZW1vdmUgcHJvZ3JhbXMiIGxpc3QgZm9yIGVhc2Ugb2YgdXNlLgorCSAgICBBbHNvOiBkb24ndCBzZXQgJFZJTSB3aGVuIHRoZSBleGVjdXRhYmxlIGlzIHdpdGggdGhlIHJ1bnRpbWUgZmlsZXMuCisJICAgIEFsc286IEFkZCBhIHRleHQgZmlsZSB3aXRoIGEgc3RlcC1ieS1zdGVwIGRlc2NyaXB0aW9uIG9mIGhvdyB0bworCSAgICB1bmluc3RhbGwgVmltIGZvciBET1MgYW5kIFdpbmRvd3MuCitGaWxlczoJICAgIHNyYy91bmluc3RhbC5jLCBzcmMvZG9zaW5zdC5jLCBzcmMvTWFrZWZpbGUudzMyLCB1bmluc3RhbC50eHQKKworUGF0Y2ggNS40Lng4IChhZGRpdGlvbiB0byA1LjQuNDUpCitGaWxlczoJICAgIG1hbnkKKworUGF0Y2ggNS40Lng5CitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IEFmdGVyIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kLCBmb2N1cyBpcyBub3QKKwkgICAgYWx3YXlzIHJlZ2FpbmVkICh3aGVuIHVzaW5nIGZvY3VzLWZvbGxvd3MtbW91c2UpLgorU29sdXRpb246ICAgQWRkIFNldEZvY3VzKCkgaW4gbWNoX3N5c3RlbSgpLiAoTWlrZSBTdGVlZCkKK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworCitQYXRjaCA1LjVhLjEKK1Byb2JsZW06ICAgICI6bGV0IEAqID0gQDoiIGRpZCBub3Qgd29yay4gIFRoZSB0ZXh0IHdhcyBub3QgcHV0IG9uIHRoZQorCUkgICBjbGlwYm9hcmQuICAoRmlzaGVyKQorU29sdXRpb246ICAgT3duIHRoZSBjbGlwYm9hcmQgYW5kIHB1dCB0aGUgdGV4dCBvbiBpdC4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDUuNWEuMgorUHJvYmxlbTogICAgYXBwZW5kKCkgZGlkIG5vdCBtYXJrIHRoZSBidWZmZXIgbW9kaWZpZWQuICBNYXJrcyBiZWxvdyB0aGUKKwkgICAgbmV3IGxpbmUgd2VyZSBub3QgYWRqdXN0ZWQuCitTb2x1dGlvbjogICBGaXggdGhlIGZfYXBwZW5kKCkgZnVuY3Rpb24uCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNS41YS4zCitQcm9ibGVtOiAgICBFZGl0aW5nIGNvbXByZXNzZWQgIi5neiIgZmlsZXMgZG9lc24ndCB3b3JrIG9uIG5vbi1Vbml4IHN5c3RlbXMsCisJICAgIGJlY2F1c2UgdGhlcmUgaXMgbm8gIm12IiBjb21tYW5kLgorU29sdXRpb246ICAgQWRkIHRoZSByZW5hbWUoKSBmdW5jdGlvbiBhbmQgdXNlIGl0IGluc3RlYWQgb2YgIjohbXYiLgorCSAgICBBbHNvOiBEaXNhYmxlIHRoZSBhdXRvbWF0aWMganVtcCB0byB0aGUgbGFzdCBwb3NpdGlvbiwgYmVjYXVzZSBpdAorCSAgICBjaGFuZ2VzIHRoZSBqdW1wbGlzdC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgcnVudGltZS9kb2MvZXZhbC50eHQsIHJ1bnRpbWUvdmltcmNfZXhhbXBsZS52aW0KKworUGF0Y2ggNS41YS40CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHdob2xlLWxpbmUgY29tcGxldGlvbiBpbiBpbnNlcnQgbW9kZSB3aGlsZSB0aGUgY3Vyc29yCisJICAgIGlzIGluIHRoZSBpbmRlbnQsIGdldCAib3V0IG9mIG1lbW9yeSIgZXJyb3IuIChTdGVrcnQpCitTb2x1dGlvbjogICBEb24ndCBhbGxvY2F0ZSBhIG5lZ2F0aXZlIGFtb3VudCBvZiBtZW1vcnkgaW4gaW5zX2NvbXBsZXRlKCkuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNS41YS41CitQcm9ibGVtOiAgICBXaW4zMjogVGhlICdwYXRoJyBvcHRpb24gY2FuIGhvbGQgb25seSB1cCB0byAyNTYgY2hhcmFjdGVycywKKwkgICAgYmVjYXVzZSBfTUFYX1BBVEggaXMgMjU2LiAgKFJvYmVydCBXZWJiKQorU29sdXRpb246ICAgVXNlIGEgZml4ZWQgcGF0aCBsZW5ndGggb2YgMTAyNC4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmgKKworUGF0Y2ggNS41YS42CitQcm9ibGVtOiAgICBDb21waWxpbmcgd2l0aCBnY2Mgb24gV2luMzIsIHVzaW5nIHRoZSBVbml4IE1ha2VmaWxlLCBkaWRuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEFkZCAkKFNVRkZJWCkgdG8gYWxsIHBsYWNlcyB3aGVyZSBhbiBleGVjdXRhYmxlIGlzIHVzZWQuICBBbHNvCisJICAgIHBhc3MgaXQgdG8gY3RhZ3MuICAoUmV5bm9sZHMpCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA1LjVhLjcKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgImNhdCB8IHZpbSAtIiBpbiBhbiB4dGVybSwgdGhlIHh0ZXJtIHZlcnNpb24gcmVwbHkKKwkgICAgd291bGQgZW5kIHVwIGluIHRoZSBmaWxlLgorU29sdXRpb246ICAgUmVhZCB0aGUgZmlsZSBmcm9tIHN0ZGluIGJlZm9yZSBzd2l0Y2hpbmcgdGhlIHRlcm1pbmFsIHRvIFJBVworCSAgICBtb2RlLiAgU2hvdWxkIGFsc28gYXZvaWQgcHJvYmxlbXMgd2l0aCBwcm9ncmFtcyB0aGF0IHVzZSBhCisJICAgIHNwZWNpZmljIHRlcm1pbmFsIHNldHRpbmcuCisJICAgIEFsc286IHdoZW4gdXNpbmcgdGhlIEdVSSwgcHJpbnQgIlJlYWRpbmcgZnJvbSBzdGRpbi4uLiIgaW4gdGhlIEdVSQorCSAgICB3aW5kb3csIHRvIGdpdmUgYSBoaW50IHdoeSBpdCBkb2Vzbid0IGRvIGFueXRoaW5nLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNS41YS44CitQcm9ibGVtOiAgICBPbiBtdWx0aS10aHJlYWRlZCBTb2xhcmlzLCBzdXNwZW5kaW5nIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIENhbGwgcGF1c2UoKSB3aGVuIHRoZSBTSUdDT05UIHNpZ25hbCB3YXMgbm90IHJlY2VpdmVkIGFmdGVyCisJICAgIHNlbmRpbmcgdGhlIFNJR1RTVFAgc2lnbmFsLiAoTmFnYW5vKQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDUuNWEuOQorUHJvYmxlbTogICAgJ3dpbmFsdGtleXMnIGNvdWxkIGJlIHNldCB0byBhbiBlbXB0eSBhcmd1bWVudCwgd2hpY2ggaXMgaWxsZWdhbC4KK1NvbHV0aW9uOiAgIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGRvaW5nICI6c2V0IHdpbmFsdGtleXM9Ii4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDUuNWEuMTAKK1Byb2JsZW06ICAgIFdpbjMyIGNvbnNvbGU6IFVzaW5nIEFMVEdSIG9uIGEgR2VybWFuIGtleWJvYXJkIHRvIHByb2R1Y2UgIn0iCisJICAgIGRvZXNuJ3Qgd29yaywgYmVjYXVzZSB0aGUgOHRoIGJpdCBpcyBzZXQgd2hlbiBBTFQgaXMgcHJlc3NlZC4KK1NvbHV0aW9uOiAgIERvbid0IHNldCB0aGUgOHRoIGJpdCB3aGVuIEFMVCBhbmQgQ1RSTCBhcmUgdXNlZC4gKExlaXBlcnQpCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDUuNWEuMTEKK1Byb2JsZW06ICAgIFRjbDogQ29uZmlndXJlIGFsd2F5cyB1c2VzIHRjbHNoOC4wLgorCSAgICBBbHNvOiBMb2FkaW5nIGEgbGlicmFyeSBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBBZGQgIi0td2l0aC10Y2xzaCIgY29uZmlndXJlIGFyZ3VtZW50IHRvIGFsbG93IHNwZWNpZnlpbmcgYW5vdGhlcgorCSAgICBuYW1lIGZvciB0aGUgdGNsIHNoZWxsLgorCSAgICBDYWxsIFRjbF9Jbml0KCkgaW4gdGNsaW5pdCgpIHRvIG1ha2UgbG9hZGluZyBsaWJyYXJpZXMgd29yay4KKwkgICAgKEpvaGFubmVzIFplbGxuZXIpCitGaWxlczoJICAgIHNyYy9jb25maWd1cmUuaW4sIHNyYy9jb25maWd1cmUsIHNyYy9pZl90Y2wuYworCitQYXRjaCA1LjVhLjEyCitQcm9ibGVtOiAgICBUaGUgInVzZXJfY29tbWFuZHMiIGZlYXR1cmUgaXMgY2FsbGVkICJ1c2VyLWNvbW1hbmRzIi4KK1NvbHV0aW9uOiAgIFJlcGxhY2UgInVzZXItY29tbWFuZHMiIHdpdGggInVzZXJfY29tbWFuZHMiLiAoS2ltIFN1bmctYm9tKQorCSAgICBLZWVwICJ1c2VyLWNvbW1hbmRzIiBmb3IgdGhlIGhhcygpIGZ1bmN0aW9uLCB0byByZW1haW4gYmFja3dhcmRzCisJICAgIGNvbXBhdGlibGUgd2l0aCA1LjQuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy92ZXJzaW9uLmMKKworUGF0Y2ggNS41YS4xMworUHJvYmxlbTogICAgT1MvMjogV2hlbiAkSE9NRSBpcyBub3QgZGVmaW5lZCwgIkM6LyIgaXMgdXNlZCBmb3IgdGhlIHZpbWluZm8KKwkgICAgZmlsZS4gIFRoYXQgaXMgdmVyeSB3cm9uZyB3aGVuIE9TLzIgaXMgb24gYW5vdGhlciBwYXJ0aXRpb24uCitTb2x1dGlvbjogICBVc2UgJFZJTSBmb3IgdGhlIHZpbWluZm8gZmlsZSB3aGVuIGl0IGlzIGRlZmluZWQsIGxpa2UgZm9yIE1TRE9TLgorCSAgICBBbHNvOiBNYWtlZmlsZS5vczIgZGlkbid0IGRlcGVuZCBvbiBvc191bml4LmguCitGaWxlczoJICAgIHNyYy9vc191bml4LmgsIHNyYy9NYWtlZmlsZS5vczIKKworUGF0Y2ggNS41YS4xNAorUHJvYmxlbTogICAgQXRoZW5hLCBNb3RpZiBhbmQgR1RLOiBUaGUgTW91c2Ugc2Nyb2xsIHdoZWVsIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEludGVycHJldCBhIGNsaWNrIG9mIHRoZSB3aGVlbCBhcyBhIGtleSBwcmVzcyBvZiB0aGUgPE1vdXNlRG93bj4KKwkgICAgb3IgPE1vdXNlVXA+IGtleXMuICBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHNjcm9sbCB0aHJlZSBsaW5lcywgb3IKKwkgICAgYSBmdWxsIHBhZ2Ugd2hlbiBTaGlmdCBpcyB1c2VkLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2d1aS5jLCBzcmMvZ3VpX2d0a194MTEuYywKKwkgICAgc3JjL2d1aV94MTEuYywgc3JjL2tleW1hcC5oLCBzcmMvbWVzc2FnZS5jLCBzcmMvbWlzYzEuYywKKwkgICAgc3JjL21pc2MyLmMsIHNyYy9ub3JtYWwuYywgIHNyYy9wcm90by9ub3JtYWwucHJvLCBzcmMvdmltLmgsCisJICAgIHJ1bnRpbWUvZG9jL3Njcm9sbC50eHQKKworUGF0Y2ggNS41YS4xNQorUHJvYmxlbTogICAgVXNpbmcgQ1RSTC1BIGluIEluc2VydCBtb2RlIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2hlbiB0aGUgaW5zZXJ0CisJICAgIHN0YXJ0ZWQgd2l0aCB0aGUgPEluc2VydD4ga2V5LiAoQW5kcmVhcyBSb2hyc2NobmVpZGVyKQorU29sdXRpb246ICAgUmVwbGFjZSA8SW5zZXJ0PiB3aXRoICJpIiBiZWZvcmUgc2V0dGluZyB1cCB0aGUgcmVkbyBidWZmZXIuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjVhLjE2CitQcm9ibGVtOiAgICBWTVM6IEdVSSBkb2VzIG5vdCBjb21waWxlIGFuZCBydW4uCitTb2x1dGlvbjogICBWYXJpb3VzIGZpeGVzLiAoWm9sdGFuIEFycGFkZmZ5KQorCSAgICBNb3ZlZCBmdW5jdGlvbnMgZnJvbSBvc191bml4LmMgdG8gdWkuYywgc28gdGhhdCBWTVMgY2FuIHVzZSB0aGVtCisJICAgIHRvbzogb3Blbl9hcHBfY29udGV4dCgpLCB4MTFfc2V0dXBfYXRvbXMoKSBhbmQgY2xpcF94MTEqIGZ1bmN0aW9ucy4KKwkgICAgTWFkZSB4dGVybV9kcHkgZ2xvYmFsLCBpdCdzIG5vdyB1c2VkIGJ5IHVpLmMgYW5kIG9zX3VuaXguYy4KKwkgICAgVXNlIGdldGhvc3RuYW1lKCkgYWx3YXlzLCBzeXNfaG9zdG5hbWUgZG9lc24ndCBleGlzdC4KK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL2d1aV94MTEuYywgc3JjL29zX3Ztcy5tbXMsIHNyYy9vc191bml4LmMsCisJICAgIHNyYy9vc192bXMuYywgc3JjL3VpLmMsIHNyYy9wcm90by9vc191bml4LnBybywgc3JjL3Byb3RvL3VpLnBybworCitSZW5hbWVkIEFkanVzdEN1cnNvckZvck11bHRpQnl0ZUNoYXJhY3RlcigpIHRvIEFkanVzdEN1cnNvckZvck11bHRpQnl0ZUNoYXIoKQordG8gYXZvaWQgc3ltYm9sIGxlbmd0aCBsaW1pdCBvZiAzMSBjaGFyYWN0ZXJzLiAoU3RldmUgUC4gV2FsbCkKKworUGF0Y2ggNS41Yi4xCitQcm9ibGVtOiAgICBTQVNDIGNvbXBsYWlucyBhYm91dCBkZWFkIGFzc2lnbm1lbnRzIGFuZCBpbXBsaWNpdCB0eXBlIGNhc3RzLgorU29sdXRpb246ICAgUmVtb3ZlZCB0aGUgZGVhZCBhc3NpZ25tZW50cy4gIEFkZGVkIGV4cGxpY2l0IHR5cGUgY2FzdHMuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2VkaXQuYywgc3JjL2V2YWwuYywgc3JjL2V4X2NtZHMuYywKKwkgICAgc3JjL2V4X2dldGxuLmMsIHNyYy9maWxlaW8uYywgc3JjL2dldGNoYXIuYywgc3JjL21lbWxpbmUuYywKKwkgICAgc3JjL21lbnUuYywgc3JjL21pc2MxLmMsIHNyYy9ub3JtYWwuYywgc3JjL29wcy5jLCBzcmMvcXVpY2tmaXguYywKKwkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDUuNWIuMgorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiQ1RSTC1PIE8iIGluIEluc2VydCBtb2RlLCBoaXQgPEVzYz4gYW5kIHRoZW4gIm8iIGluCisJICAgIGFub3RoZXIgbGluZSB0cnVuY2F0ZXMgdGhhdCBsaW5lLiAoRGV2aW4gV2VhdmVyKQorU29sdXRpb246ICAgV2hlbiB1c2luZyBhIGNvbW1hbmQgdGhhdCBzdGFydHMgSW5zZXJ0IG1vZGUgZnJvbSBDVFJMLU8sIHJlc2V0CisJICAgICJyZXN0YXJ0X2VkaXQiIGZpcnN0LiAgVGhpcyBhdm9pZHMgdGhhdCBlZGl0KCkgaXMgY2FsbGVkIHdpdGggYQorCSAgICBtaXggb2Ygc3RhcnRpbmcgYSBuZXcgZWRpdCBjb21tYW5kIGFuZCByZXN0YXJ0aW5nIGEgcHJldmlvdXMgb25lLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitWRVJTSU9OIDUuNgkJCQkJCSp2ZXJzaW9uLTUuNioKKworVmVyc2lvbiA1LjYgaXMgYSBidWctZml4IHZlcnNpb24gb2YgNS41LgorCisKK0NoYW5nZWQJCQkJCQkJKmNoYW5nZWQtNS42KgorLS0tLS0tLQorCitTbWFsbCBjaGFuZ2VzIHRvIE9sZVZpbSBmaWxlcy4gKENocmlzdGlhbiBTY2hhbGxlcikKKworSW5zZXJ0ZWQgIi8qKi8iIGJldHdlZW4gcGF0Y2ggbnVtYmVycyBpbiBzcmMvdmVyc2lvbi5jLiAgVGhpcyBhbGxvd3MgZm9yIG9uZQorbGluZSBvZiBjb250ZXh0LCB3aGljaCBzb21lIHZlcnNpb25zIG9mIHBhdGNoIG5lZWQuCisKK1Jlb3JkZXJlZCB0aGUgU3ludGF4IG1lbnUgdG8gYXZvaWQgbG9uZyBzdWJtZW51cy4gIFJlbW92ZWQga2V5Ym9hcmQgc2hvcnRjdXRzCitmb3IgYWxwaGFiZXRpY2FsIGl0ZW1zIHRvIGF2b2lkIGEgY2xhc2ggd2l0aCBmaXhlZCBpdGVtcy4KKworCitBZGRlZAkJCQkJCQkqYWRkZWQtNS42KgorLS0tLS0KKworSW5jbHVkZWQgRXh1YmVyYW50IEN0YWdzIHZlcnNpb24gMy40LiAoRGFycmVuIEhpZWJlcnQpCisKK09wZW5XaXRoVmltIGluIFB5dGhvbi4gKENocmlzdGlhbiBTY2hhbGxlcikKKworV2luMzIgR1VJOiBndmltZXh0LmRsbCwgZm9yIHRoZSBjb250ZXh0IG1lbnUgIkVkaXQgd2l0aCBWaW0iIGVudHJ5LiAgQXZvaWRzCit0aGUgcmVwb3J0ZWQgcHJvYmxlbXMgd2l0aCB0aGUgTVMgT2ZmaWNlIHRhc2tiYXIuICBOb3cgaXQncyBhIFNoZWxsIEV4dGVuc2lvbi4KKyhUaWFubWlhbyBIdSkKKworTmV3IHN5bnRheCBmaWxlczoKK2FiZWwJCUFiZWwgKEpvaG4gQ29vaykKK2FtbAkJQXJjIE1hY3JvIExhbmd1YWdlIChOaWtraSBLbnVpdCkKK2FwYWNoZXN0eWxlCUFwYWNoZS1zdHlsZSBjb25maWcgZmlsZSAoQ2hyaXN0aWFuIEhhbW1lcnMpCitjZgkJQ29sZCBGdXNpb24gKEplZmYgTGFuemFyb3R0YSkKK2N0cmxoCQlmaWxlcyB3aXRoIENUUkwtSCBzZXF1ZW5jZXMgKEJyYW0gTW9vbGVuYWFyKQorY3VwbAkJQ1VQTCAoSm9obiBDb29rKQorY3VwbHNpbQkJQ1VQTCBzaW11bGF0aW9uIChKb2huIENvb2spCitlcmxhbmcJCUVybGFuZyAoS3Jlc2ltaXIgTWFyemljKQorZ2VkY29tCQlHZWRjb20gKFBhdWwgSm9obnNvbikKK2ljb24JCUljb24gKFdlbmRlbGwgVHVybmVyKQoraXN0CQlNYWtlSW5kZXggc3R5bGUgKFBldGVyIE1lc3phcm9zKQoranNwCQlKYXZhIFNlcnZlciBQYWdlcyAoUmFmYWVsIEdhcmNpYS1TdWFyZXopCityY3Nsb2cJCVJjc2xvZyAoSm9lIEthcnRoYXVzZXIpCityZW1pbmQJCVJlbWluZCAoRGF2aWRlIEFsYmVyYW5pKQorc3FyCQlTdHJ1Y3R1cmVkIFF1ZXJ5IFJlcG9ydCBXcml0ZXIgKFBhdWwgTW9vcmUpCit0YWRzCQlUQURTIChBbWlyIEthcmdlcikKK3RleGluZm8JCVRleGluZm8gKFNhbmRvciBLb3BhbnlpKQoreHBtMgkJWCBQaXhtYXAgdjIgKFN0ZXZlIFdhbGwpCisKK1RoZSAnQycgZmxhZyBpbiAnY3BvcHRpb25zJyBjYW4gYmUgdXNlZCB0byBzd2l0Y2ggb2ZmIGNvbmNhdGVuYXRpb24gZm9yCitzb3VyY2VkIGxpbmVzLiAgU2VlIHBhdGNoIDUuNS4wMTMgYmVsb3cuIHxsaW5lLWNvbnRpbnVhdGlvbnwKKworImV4Y2x1ZGVubCIgYXJndW1lbnQgZm9yIHRoZSAiOnN5bnRheCIgY29tbWFuZC4gIFNlZSBwYXRjaCA1LjUuMDMyIGJlbG93LgorfDpzeW4tZXhjbHVkZW5sfAorCitJbXBsZW1lbnRlZCB8eit8IGFuZCB8el58IGNvbW1hbmRzLiAgU2VlIHBhdGNoIDUuNS4wNTAgYmVsb3cuCisKK1ZpbSBsb2dvIGluIENvcmVsIERyYXcgZm9ybWF0LiAgQ2FuIGJlIHNjYWxlZCB0byBhbnkgcmVzb2x1dGlvbi4KKworCitGaXhlZAkJCQkJCQkqZml4ZWQtNS42KgorLS0tLS0KKworVXNpbmcgdGhpcyBtYXBwaW5nIGluIFNlbGVjdCBtb2RlLCB0ZXJtaW5hdGVkIGNvbXBsZXRpb246CisiOnZub3JlbWFwIDxDLU4+IDxFc2M+YTxDLU4+IiAoQmVuamkgRmlzaGVyKQorSWdub3JlIEtfU0VMRUNUIGluIGluc19jb21wbF9wcmVwKCkuCisKK1ZNUyAoWm9sdGFuIEFycGFkZmZ5LCBEYXZpZCBFbGlucyk6CistIGlvY3RsKCkgaW4gcHR5LmMgY2F1c2VkIHRyb3VibGUsICNpZm5kZWYgVk1TIGFkZGVkLgorLSBDdXQgJiBwYXN0ZSBtaXNtYXRjaCBjb3JyZWN0ZWQuCistIFBvcHVwIG1lbnUgbGluZSBjcmFzaCBjb3JyZWN0ZWQuICAoUGF0Y2ggNS41LjA0NykKKy0gTW90aWYgZGlyZWN0b3JpZXMgZHVyaW5nIG9wZW4gYW5kIHNhdmUgYXMgY29ycmVjdGVkLgorLSBIYW5kbGUgZnVsbCBmaWxlIG5hbWVzIHdpdGggdmVyc2lvbiBudW1iZXJzLiAoUGF0Y2ggNS41LjA0NikKKy0gRGlyZWN0b3J5IGhhbmRsaW5nIChDRCBjb21tYW5kIGV0Yy4pCistIENvcnJlY3RlZCBmaWxlIG5hbWUgY29udmVyc2lvbiBWTVMgdG8gVW5peCBhbmQgdi52LgorLSBSZWNvdmVyeSB3YXMgbm90IHdvcmtpbmcuCistIFRlcm1pbmFsIGFuZCBzaWduYWwgaGFuZGxpbmcgd2FzIG91dGRhdGVkIGNvbXBhcmVkIHRvIG9zX3VuaXguYy4KKy0gSW1wcm92ZWQgb3Nfdm1zLnR4dC4KKworQ29uZmlndXJlIHVzZWQgZnByaW50ZigpIGluc3RlYWQgb2YgcHJpbnRmKCkgdG8gY2hlY2sgZm9yIF9fREFURV9fIGFuZAorX19USU1FX18uIChKb2huIENhcmQgSUkpCisKK0JlT1M6IEFkanVzdCBjb21wdXRpbmcgdGhlIGNoYXJfaGVpZ2h0IGFuZCBjaGFyX2FzY2VudC4gIFJvdW5kIHRoZW0gdXAKK3NlcGFyYXRlbHksIGF2b2lkcyByZWRyYXdpbmcgYXJ0aWZhY3RzLiAoTWlrZSBTdGVlZCkKKworRml4IGEgZmV3IG11bHRpLWJ5dGUgcHJvYmxlbXMgaW4gbWVudV9uYW1lX3NraXAoKSwgc2V0X3JlZ19pYygpLCBzZWFyY2hjKCkgYW5kCitmaW5kbWF0Y2hsaW1pdCgpLiAoVGFybyBNdXJhb2thKQorCitHVEsgR1VJOgorLSBXaXRoIEdUSyAxLjIuNSBhbmQgbGF0ZXIgdGhlIHNjcm9sbGJhcnMgd2VyZSBub3QgcmVkcmF3biBjb3JyZWN0bHkuCistIEFkanVzdGVkIHRoZSBndGtfZm9ybV9kcmF3KCkgZnVuY3Rpb24uCistIFNOaUZGIGNvbm5lY3Rpb24gZGlkbid0IHdvcmsuCistICdtb3VzZWZvY3VzJyB3YXMgbm90IHdvcmtpbmcuIChEYWxlY2tpKQorLSBTb21lIGtleXMgd2VyZSBub3Qgd29ya2luZyB3aXRoIG1vZGlmaWVyczogU2hpZnQtVGFiLCBDdHJsLVNwYWNlIGFuZCBDVFJMLUAuCisKKworUGF0Y2ggNS41LjAwMQorUHJvYmxlbTogICAgQ29uZmlndXJlIGluIHRoZSB0b3AgZGlyZWN0b3J5IGRpZCBub3QgcGFzcyBvbiBhbiBhcmd1bWVudCB3aXRoIGEKKwkgICAgc3BhY2UgY29ycmVjdGx5LiAgRm9yIGV4YW1wbGUgIi4vY29uZmlndXJlIC0tcHJldmlzPSIvTXkgaG9tZSIuCisJICAgIChTdGVwaGFuZSBDaGF6ZWxhcykKK1NvbHV0aW9uOiAgIFVzZSAnIiRAIicgaW5zdGVhZCBvZiAnJConIHRvIHBhc3Mgb24gdGhlIGFyZ3VtZW50cy4KK0ZpbGVzOgkgICAgY29uZmlndXJlCisKK1BhdGNoIDUuNS4wMDIKK1Byb2JsZW06ICAgIENvbXBpbGF0aW9uIGVycm9yIGZvciB1c2luZyAiZmRzW10gJiBQT0xMSU4iLiAoSmVmZiBXYWxrZXIpCitTb2x1dGlvbjogICBVc2UgImZkc1tdLnJldmVudHMgJiBQT0xMSU4iLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDUuNS4wMDMKK1Byb2JsZW06ICAgIFRoZSBhdXRvY29uZiBjaGVjayBmb3Igc2l6ZW9mKGludCkgaXMgd3Jvbmcgb24gbWFjaGluZXMgd2hlcmUKKwkgICAgc2l6ZW9mKHNpemVfdCkgIT0gc2l6ZW9mKGludCkuCitTb2x1dGlvbjogICBVc2Ugb3VyIG93biBjb25maWd1cmUgY2hlY2suICBBbHNvIGZpeGVzIHRoZSB3YXJuaW5nIGZvcgorCSAgICBjcm9zcy1jb21waWxpbmcuCitGaWxlczoJICAgIHNyYy9jb25maWd1cmUuaW4sIHNyYy9jb25maWd1cmUKKworUGF0Y2ggNS41LjAwNAorUHJvYmxlbTogICAgT24gVW5peCBpdCdzIG5vdCBwb3NzaWJsZSB0byBpbnRlcnJ1cHQgIjpzbGVlcCAxMDAiLgorU29sdXRpb246ICAgU3dpdGNoIHRlcm1pbmFsIHRvIGNvb2tlZCBtb2RlIHdoaWxlIGFzbGVlcCwgdG8gYWxsb3cgYSBTSUdJTlQgdG8KKwkgICAgd2FrZSB1cyB1cC4gIEJ1dCBzd2l0Y2ggb2ZmIGVjaG8sIGFkZGVkIFRNT0RFX1NMRUVQLgorRmlsZXM6CSAgICBzcmMvdGVybS5oLCBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDUuNS4wMDUKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgPGYtYXJncz4gd2l0aCBhIHVzZXIgY29tbWFuZCwgYW4gZW1wdHkgYXJndW1lbnQgdG8gdGhlCisJICAgIGNvbW1hbmQgcmVzdWx0ZWQgaW4gb25lIGVtcHR5IHN0cmluZywgd2hpbGUgbm8gc3RyaW5nIHdhcworCSAgICBleHBlY3RlZC4KK1NvbHV0aW9uOiAgIENhdGNoIGFuIGVtcHR5IGFyZ3VtZW50IGFuZCBwYXNzIG5vIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbi4KKwkgICAgKFBhdWwgTW9vcmUpCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDUuNS4wMDYKK1Byb2JsZW06ICAgIFB5dGhvbjogV2hlbiBwbGF0Zm9ybS1kZXBlbmRlbnQgZmlsZXMgYXJlIGluIGFub3RoZXIgZGlyZWN0b3J5CisJICAgIHRoYW4gdGhlIHBsYXRmb3JtLWluZGVwZW5kZW50IGZpbGVzIGl0IGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEFsc28gY2hlY2sgdGhlIGV4ZWN1dGFibGUgZGlyZWN0b3J5LCBhbmQgYWRkIGl0IHRvIENGTEFHUy4gKFRlc3NhCisJICAgIExhdSkKK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZ3VyZQorCitQYXRjaCA1LjUuMDA3IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIE9MRTogT2NjYXNpb25hbCBjcmFzaCB3aGVuIGV4aXRpbmcgd2hpbGUgc3RpbGwgYmVpbmcgdXNlZAorCSAgICB2aWEgT0xFLgorU29sdXRpb246ICAgTW92ZSBPbGVVbmluaXRpYWxpemUoKSB0byBiZWZvcmUgZGVsZXRpbmcgdGhlIGFwcGxpY2F0aW9uIG9iamVjdC4KKwkgICAgKFZpbmNlIE5lZ3JpKQorRmlsZXM6CSAgICBzcmMvaWZfb2xlLmNwcAorCitQYXRjaCA1LjUuMDA4CitQcm9ibGVtOiAgICAxMDAwMEBAIHRha2VzIGEgbG9uZyB0aW1lIGFuZCBjYW5ub3QgYmUgaW50ZXJydXB0ZWQuCitTb2x1dGlvbjogICBDaGVjayBmb3IgQ1RSTC1DIHR5cGVkIHdoaWxlIGluIHRoZSBsb29wIHRvIHB1c2ggdGhlIHJlZ2lzdGVyLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNS41LjAwOQorUHJvYmxlbTogICAgUmVjZW50IFNlcXVlbnQgbWFjaGluZXMgZG9uJ3QgbGluayB3aXRoICItbGluZXQiLiAoS3VydGlzIFJhZGVyKQorU29sdXRpb246ICAgUmVtb3ZlIGNvbmZpZ3VyZSBjaGVjayBmb3IgU2VxdWVudC4KK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZ3VyZQorCitQYXRjaCA1LjUuMDEwCitQcm9ibGVtOiAgICBDdGFncyBmcmVlZCBhIG1lbW9yeSBibG9jayB0d2ljZSB3aGVuIGV4aXRpbmcuICBXaGVuIG91dCBvZgorCSAgICBtZW1vcnksIGEgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHdhcyBnaXZlbi4KK1NvbHV0aW9uOiAgIFVwZGF0ZSB0byBjdGFncyAzLjMuMi4gIEFsc28gZml4ZXMgYSBmZXcgb3RoZXIgcHJvYmxlbXMuIChEYXJyZW4KKwkgICAgSGllYmVydCkKK0ZpbGVzOgkgICAgc3JjL2N0YWdzLyoKKworUGF0Y2ggNS41LjAxMQorUHJvYmxlbTogICAgQWZ0ZXIgIkNUUkwtViBzIiwgdGhlIGN1cnNvciBqdW1wcyBiYWNrIHRvIHRoZSBzdGFydCwgd2hpbGUgYWxsCisJICAgIG90aGVyIG9wZXJhdG9ycyBsZWF2ZSB0aGUgY3Vyc29yIG9uIHRoZSBsYXN0IGNoYW5nZWQgY2hhcmFjdGVyLgorCSAgICAoWGlhbmdqaWFuZyBNYSkKK1NvbHV0aW9uOiAgIFBvc2l0aW9uIGN1cnNvciBvbiBsYXN0IGNoYW5nZWQgY2hhcmFjdGVyLCBpZiBwb3NzaWJsZS4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDUuNS4wMTIKK1Byb2JsZW06ICAgIFVzaW5nIENUUkwtXSBpbiBWaXN1YWwgbW9kZSBkb2Vzbid0IHdvcmsgd2hlbiB0aGUgdGV4dCBpbmNsdWRlcyBhCisJICAgIHNwYWNlIChqdXN0IHdoZXJlIGl0J3MgdXNlZnVsKS4gKFN0ZWZhbiBCaXR0bmVyKQorU29sdXRpb246ICAgRG9uJ3QgZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHRhZyBuYW1lIHdpdGggYSBiYWNrc2xhc2guCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjUuMDEzCitQcm9ibGVtOiAgICBUaGUgIjphcHBlbmQiIGFuZCAiOmluc2VydCIgY29tbWFuZHMgYWxsb3cgdXNpbmcgYSBsZWFkaW5nCisJICAgIGJhY2tzbGFzaCBpbiBhIGxpbmUuICBUaGUgIjpzb3VyY2UiIGNvbW1hbmQgY29uY2F0ZW5hdGVzIHRob3NlCisJICAgIGxpbmVzLiAoSGVpbmxlaW4pCitTb2x1dGlvbjogICBBZGQgdGhlICdDJyBmbGFnIGluICdjcG9wdGlvbnMnIHRvIHN3aXRjaCBvZmYgY29uY2F0ZW5hdGlvbi4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9vcHRpb24uaCwgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsCisJICAgIHJ1bnRpbWUvZmlsZXR5cGUudmltLCBydW50aW1lL3NjcmlwdHMudmltCisKK1BhdGNoIDUuNS4wMTQKK1Byb2JsZW06ICAgIFdoZW4gZXhlY3V0aW5nIGEgcmVnaXN0ZXIgd2l0aCAiOkAiLCB0aGUgIjphcHBlbmQiIGNvbW1hbmQgd291bGQKKwkgICAgZ2V0IHRleHQgbGluZXMgd2l0aCBhICc6JyBwcmVwZW5kZWQuIChIZWlubGVpbikKK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgJzonIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2dsb2JhbHMuaAorCitQYXRjaCA1LjUuMDE1CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6Zy9wYXQvcCIsIGl0J3MgaGFyZCB0byBzZWUgd2hlcmUgdGhlIG91dHB1dCBzdGFydHMsCisJICAgIHRoZSAiOmciIGNvbW1hbmQgaXMgb3ZlcndyaXR0ZW4uICBWaSBrZWVwcyB0aGUgIjpnIiBjb21tYW5kLgorU29sdXRpb246ICAgS2VlcCB0aGUgIjpnIiBjb21tYW5kLCBidXQgYWxsb3cgb3ZlcndyaXRpbmcgaXQgd2l0aCB0aGUgcmVwb3J0CisJICAgIGZvciB0aGUgbnVtYmVyIG9mIGNoYW5nZXMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNS41LjAxNiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogVXNpbmcgcmVnZWRpdCB0byBpbnN0YWxsIFZpbSBpbiB0aGUgcG9wdXAgbWVudSByZXF1aXJlcyB0aGUKKwkgICAgdXNlciB0byBjb25maXJtIHRoaXMgaW4gYSBkaWFsb2cuCitTb2x1dGlvbjogICBVc2UgInJlZ2VkaXQgL3MiIHRvIGF2b2lkIHRoZSBkaWFsb2cKK0ZpbGVzOgkgICAgc3JjL2Rvc2luc3QuYworCitQYXRjaCA1LjUuMDE3CitQcm9ibGVtOiAgICBJZiBhbiBlcnJvciBvY2N1cnMgd2hlbiBjbG9zaW5nIHRoZSBjdXJyZW50IHdpbmRvdywgVmltIGNvdWxkIGdldAorCSAgICBzdHVjayBpbiB0aGUgZXJyb3IgaGFuZGxpbmcuCitTb2x1dGlvbjogICBEb24ndCBzZXQgY3Vyd2luIHRvIE5VTEwgd2hlbiBjbG9zaW5nIHRoZSBjdXJyZW50IHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDUuNS4wMTgKK1Byb2JsZW06ICAgIEFic29sdXRlIHBhdGhzIGluIHNoZWxsIHNjcmlwdHMgZG8gbm90IGFsd2F5cyB3b3JrLgorU29sdXRpb246ICAgVXNlIC91c3IvYmluL2VudiB0byBmaW5kIG91dCB0aGUgcGF0aC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvdmltMmh0bWwucGwsIHJ1bnRpbWUvdG9vbHMvZWZtX2ZpbHRlci5wbCwKKwkgICAgcnVudGltZS90b29scy9zaHRhZ3MucGwKKworUGF0Y2ggNS41LjAxOQorUHJvYmxlbTogICAgQSBmdW5jdGlvbiBjYWxsIGluICdzdGF0dXNsaW5lJyBzdG9wcyB1c2luZyAiOnEiIHR3aWNlIGZyb20KKwkgICAgZXhpdGluZywgd2hlbiB0aGUgbGFzdCBhcmd1bWVudCBoYXNuJ3QgYmVlbiBlZGl0ZWQuCitTb2x1dGlvbjogICBEb24ndCBkZWNyZW1lbnQgcXVpdG1vcmUgd2hlbiBleGVjdXRpbmcgYSBmdW5jdGlvbi4gKE1hZHNlbikKK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNS41LjAyMAorUHJvYmxlbTogICAgV2hlbiB0aGUgb3V0cHV0IG9mIENUUkwtRCBjb21wbGV0aW9uIGluIHRoZSBjb21tYW5kbGluZSBnb2VzIGFsbAorCSAgICB0aGUgd2F5IHRvIHRoZSBsYXN0IGNvbHVtbiwgdGhlcmUgaXMgYW4gZW1wdHkgbGluZS4KK1NvbHV0aW9uOiAgIERvbid0IGFkZCBhIG5ld2xpbmUgd2hlbiB0aGUgY3Vyc29yIHdyYXBwZWQgYWxyZWFkeS4gKE1hZHNlbikKK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNS41LjAyMQorUHJvYmxlbTogICAgV2hlbiBjaGVja2luZyBpZiBhIGZpbGUgbmFtZSBpbiB0aGUgdGFncyBmaWxlIGlzIHJlbGF0aXZlLAorCSAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2VyZSBub3QgZXhwYW5kZWQuCitTb2x1dGlvbjogICBFeHBhbmQgdGhlIGZpbGUgbmFtZSBiZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgcmVsYXRpdmUuIChNYWRzZW4pCitGaWxlczoJICAgIHNyYy90YWcuYworCitQYXRjaCA1LjUuMDIyCitQcm9ibGVtOiAgICBXaGVuIHNldHRpbmcgb3IgcmVzZXR0aW5nICdwYXN0ZScgdGhlIHJ1bGVyIHdhc24ndCB1cGRhdGVkLgorU29sdXRpb246ICAgVXBkYXRlIHRoZSBzdGF0dXMgbGluZXMgd2hlbiAncnVsZXInIGNoYW5nZXMgYmVjYXVzZSBvZiAncGFzdGUnLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNS41LjAyMworUHJvYmxlbTogICAgV2hlbiBlZGl0aW5nIGEgbmV3IGZpbGUgYW5kIGF1dG9jb21tYW5kcyBjaGFuZ2UgdGhlIGN1cnNvcgorCSAgICBwb3NpdGlvbiwgdGhlIGN1cnNvciB3YXMgbW92ZWQgYmFjayB0byB0aGUgZmlyc3Qgbm9uLXdoaXRlLCB1bmxlc3MKKwkgICAgJ3N0YXJ0b2ZsaW5lJyB3YXMgcmVzZXQuCitTb2x1dGlvbjogICBLZWVwIHRoZSBuZXcgY29sdW1uLCBqdXN0IGxpa2UgdGhlIGxpbmUgbnVtYmVyLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDUuNS4wMjQgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJOiBXaGVuIHVzaW5nIGNvbmZpcm0oKSB0byBwdXQgdXAgYSBkaWFsb2cgd2l0aG91dCBhCisJICAgIGRlZmF1bHQgYnV0dG9uLCB0aGUgZGlhbG9nIHdvdWxkIG5vdCBoYXZlIGtleWJvYXJkIGZvY3VzLgorCSAgICAoS3Jpc2huYSkKK1NvbHV0aW9uOiAgIEFsd2F5cyBzZXQgZm9jdXMgdG8gdGhlIGRpYWxvZyB3aW5kb3cuICBPbmx5IHNldCBmb2N1cyB0byBhIGJ1dHRvbgorCSAgICB3aGVuIGEgZGVmYXVsdCBvbmUgaXMgc3BlY2lmaWVkLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNS4wMjUKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgImtlZXBlbmQiIGluIGEgc3ludGF4IHJlZ2lvbiwgYSBjb250YWluZWQgbWF0Y2ggdGhhdAorCSAgICBpbmNsdWRlcyB0aGUgZW5kLW9mLWxpbmUgY291bGQgc3RpbGwgZm9yY2UgdGhhdCByZWdpb24gdG8KKwkgICAgY29udGludWUsIGlmIHRoZXJlIGlzIGFub3RoZXIgY29udGFpbmVkIG1hdGNoIGluIGJldHdlZW4uCitTb2x1dGlvbjogICBDaGVjayB0aGUga2VlcGVuZF9sZXZlbCBpbiBjaGVja19zdGF0ZV9lbmRzKCkuCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA1LjUuMDI2CitQcm9ibGVtOiAgICBXaGVuIHN0YXJ0aW5nIFZpbSBpbiBhIHdoaXRlLW9uLWJsYWNrIHh0ZXJtLCB3aXRoICdiZycgc2V0IHRvCisJICAgICJkYXJrIiwgYW5kIHRoZW4gc3RhcnRpbmcgdGhlIEdVSSB3aXRoICI6Z3VpIiwgc2V0dGluZyAnYmcnIHRvCisJICAgICJsaWdodCIgaW4gdGhlIGd2aW1yYywgdGhlIGhpZ2hsaWdodGluZyBpc24ndCBzZXQuICAoVHNqb2t3aW5nKQorU29sdXRpb246ICAgU2V0IHRoZSBoaWdobGlnaHRpbmcgd2hlbiAnYmcnIGlzIGNoYW5nZWQgaW4gdGhlIGd2aW1yYywgZXZlbgorCSAgICB0aG91Z2ggZnVsbF9zY3JlZW4gaXNuJ3Qgc2V0LgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNS41LjAyNworUHJvYmxlbTogICAgVW5peDogb3NfdW5peC5jIGRvZXNuJ3QgY29tcGlsZSB3aGVuIFhURVJNX0NMSVAgaXMgdXNlZCBidXQKKwkgICAgV0FOVF9USVRMRSBpc24ndC4gKEJhcm51bSkKK1NvbHV0aW9uOiAgIE1vdmUgYSBmZXcgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgYnkgdGhlIFgxMSB0aXRsZSBhbmQgY2xpcGJvYXJkCisJICAgIGFuZCBwdXQgYW5vdGhlciAiI2lmIiBhcm91bmQgaXQuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNS41LjAyOCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFdoZW4gYSBmaWxlIGlzIGRyb3BwZWQgb24gV2luMzIgZ3ZpbSB3aGlsZSBhdCB0aGUgIjoiCisJICAgIHByb21wdCwgdGhlIGZpbGUgaXMgZWRpdGVkIGJ1dCB0aGUgY29tbWFuZCBsaW5lIGlzIGFjdHVhbGx5IHN0aWxsCisJICAgIHRoZXJlLCB0aGUgY3Vyc29yIGdvZXMgYmFjayB0byBjb21tYW5kIGxpbmUgb24gdGhlIG5leHQgY29tbWFuZC4KKwkgICAgKEtyaXNobmEpCitTb2x1dGlvbjogICBXaGVuIGRyb3BwaW5nIGEgZmlsZSBvciBkaXJlY3Rvcnkgb24gZ3ZpbSB3aGlsZSBhdCB0aGUgIjoiIHByb21wdCwKKwkgICAgaW5zZXJ0IHRoZSBuYW1lIG9mIHRoZSBmaWxlL2RpcmVjdG9yeS4gIEFsbG93cyB1c2luZyB0aGUKKwkgICAgZmlsZS9kaXJlY3RvcnkgbmFtZSBmb3IgYW55IEV4IGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNS41LjAyOQorUHJvYmxlbTogICAgImRhcyIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBkaWRuJ3QgZGVsZXRlIHRoZSBsYXN0IGNoYXJhY3RlciBvZgorCSAgICB0aGUgc2VudGVuY2UuCitTb2x1dGlvbjogICBXaGVuIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhZnRlciB0aGUgc2VudGVuY2UsIG1ha2UgdGhlIG9wZXJhdGlvbgorCSAgICBpbmNsdXNpdmUgaW4gY3VycmVudF9zZW50KCkuCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA1LjUuMDMwCitQcm9ibGVtOiAgICBVbml4OiBpbiBvc191bml4LmMsICJ0ZXJtX3N0ciIgaXMgdXNlZCwgd2hpY2ggaXMgYWxzbyBkZWZpbmVkIGluCisJICAgIHZpbS5oIGFzIGEgbWFjcm8uICh3dXhpbikKK1NvbHV0aW9uOiAgIFJlbmFtZWQgInRlcm1fc3RyIiB0byAiYnVmIiBpbiBkb194dGVybV90cmFjZSgpLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDUuNS4wMzEgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJOiBXaGVuIGV4aXRpbmcgV2luZG93cywgZ3ZpbSB3aWxsIGxlYXZlIHN3YXAgZmlsZXMgYmVoaW5kCisJICAgIGFuZCB3aWxsIGJlIGtpbGxlZCB1bmdyYWNlZnVsbHkuIChLcmlzaG5hKQorU29sdXRpb246ICAgQ2F0Y2ggdGhlIFdNX1FVRVJZRU5EU0VTU0lPTiBhbmQgV01fRU5EU0VTU0lPTiBtZXNzYWdlcyBhbmQgdHJ5IHRvCisJICAgIGV4aXQgZ3JhY2VmdWxseS4gIEFsbG93IHRoZSB1c2VyIHRvIGNhbmNlbCB0aGUgc2h1dGRvd24gaWYgdGhlcmUKKwkgICAgaXMgYSBjaGFuZ2VkIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjUuMDMyCitQcm9ibGVtOiAgICBQYXRjaCA1LjUuMDI1IHdhc24ndCByaWdodC4gIEFuZCBDIGhpZ2hsaWdodGluZyB3YXMgc3RpbGwgbm90CisJICAgIHdvcmtpbmcgY29ycmVjdGx5IGZvciBhICNkZWZpbmUuCitTb2x1dGlvbjogICBBZGRlZCAiZXhjbHVkZW5sIiBhcmd1bWVudCB0byAiOnN5bnRheCIsIHRvIGJlIGFibGUgbm90IHRvIGV4dGVuZAorCSAgICBhIGNvbnRhaW5pbmcgaXRlbSB3aGVuIHRoZXJlIGlzIGEgbWF0Y2ggd2l0aCB0aGUgZW5kLW9mLWxpbmUuCitGaWxlczoJICAgIHNyYy9zeW50YXguYywgcnVudGltZS9kb2Mvc3ludGF4LnR4dCwgcnVudGltZS9zeW50YXgvYy52aW0KKworUGF0Y2ggNS41LjAzMworUHJvYmxlbTogICAgV2hlbiByZWFkaW5nIGZyb20gc3RkaW4sIGEgbG9uZyBsaW5lIGluIHZpbWluZm8gd291bGQgbWVzcyB1cCB0aGUKKwkgICAgZmlsZSBtZXNzYWdlLiAgcmVhZGZpbGUoKSB1c2VzIElPYnVmZiBmb3Iga2VlcF9tc2csIHdoaWNoIGNvdWxkIGJlCisJICAgIG92ZXJ3cml0dGVuIGJ5IGFueW9uZS4KK1NvbHV0aW9uOiAgIENvcHkgdGhlIG1lc3NhZ2UgZnJvbSBJT2J1ZmYgdG8gbXNnX2J1ZiBhbmQgc2V0IGtlZXBfbXNnIHRvIHRoYXQuCisJICAgIEFsc28gY2hhbmdlIHZpbV9mZ2V0cygpIHRvIG5vdCB1c2UgSU9idWZmIGFueSBsb25nZXIuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA1LjUuMDM0CitQcm9ibGVtOiAgICAiZ3ZpbSAtcnYiIGNhdXNlZCBhIGNyYXNoLiAgVXNpbmcgJ3RfQ28nIGJlZm9yZSBpdCdzIHNldC4KK1NvbHV0aW9uOiAgIERvbid0IHRyeSB0byBpbml0aWFsaXplIHRoZSBoaWdobGlnaHRpbmcgYmVmb3JlIGl0IGhhcyBiZWVuCisJICAgIGluaXRpYWxpemVkIGZyb20gbWFpbigpLgorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNS41LjAzNQorUHJvYmxlbTogICAgR1RLIHdpdGggWElNOiBSZXNpemluZyB3aXRoIHN0YXR1cyBhcmVhIHdhcyBtZXNzeSwgYW5kCisJICAgICI6c2V0IGd1aW9wdGlvbnMrPWIiIGRpZG4ndCB3b3JrLgorU29sdXRpb246ICAgTWFrZSBzdGF0dXMgYXJlYSBhIHNlcGFyYXRlIHdpZGdldCwgYnV0IG5vdCBhIHNlcGFyYXRlIHdpbmRvdy4KKwkgICAgKENoaS1EZW9rIEh3YW5nKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a19mLmMsIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvbXVsdGJ5dGUuYworCitQYXRjaCA1LjUuMDM2CitQcm9ibGVtOiAgICBUaGUgR1pJUF9yZWFkKCkgZnVuY3Rpb24gaW4gJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0gdG8KKwkgICAgdW5jb21wcmVzcyBhIGZpbGUgZGlkIG5vdCBkbyBkZXRlY3Rpb24gZm9yICdmaWxlZm9ybWF0Jy4gIFRoaXMgaXMKKwkgICAgYmVjYXVzZSB0aGUgZmlsdGVyaW5nIGlzIGRvbmUgd2l0aCAnYmluYXJ5JyBzZXQuCitTb2x1dGlvbjogICBTcGxpdCB0aGUgZmlsdGVyaW5nIGludG8gc2VwYXJhdGUgd3JpdGUsIGZpbHRlciBhbmQgcmVhZCBjb21tYW5kcy4KK0ZpbGVzOgkgICAgcnVudGltZS92aW1yY19leGFtcGxlLnZpbQorCitQYXRjaCA1LjUuMDM3CitQcm9ibGVtOiAgICBUaGUgIlUiIGNvbW1hbmQgZGlkbid0IG1hcmsgdGhlIGJ1ZmZlciBhcyBjaGFuZ2VkLiAoTWNDb3JtYWNrKQorU29sdXRpb246ICAgU2V0IHRoZSAnbW9kaWZpZWQnIGZsYWcgd2hlbiB1c2luZyAiVSIuCitGaWxlczoJICAgIHNyYy91bmRvLmMKKworUGF0Y2ggNS41LjAzOAorUHJvYmxlbTogICAgV2hlbiB0eXBpbmcgYSBsb25nICI6IiBjb21tYW5kLCBzbyB0aGF0IHRoZSBzY3JlZW4gc2Nyb2xscyB1cCwKKwkgICAgY2F1c2VzIHRoZSBoaXQtZW50ZXIgcHJvbXB0LCBldmVuIHRob3VnaCB0aGUgdXNlciBqdXN0IHR5cGVkCisJICAgIHJldHVybiB0byBleGVjdXRlIHRoZSBjb21tYW5kLgorU29sdXRpb246ICAgUmVzZXQgbmVlZF93YWl0X3JldHVybiBpZiAocGFydCBvZikgdGhlIGNvbW1hbmQgd2FzIHR5cGVkIGluCisJICAgIGdldGNtZGxpbmUoKS4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNS41LjAzOQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIGN1c3RvbSBzdGF0dXMgbGluZSwgIiVhIiAoZmlsZSAjIG9mICMpIHJlcG9ydHMgdGhlCisJICAgIGluZGV4IG9mIHRoZSBjdXJyZW50IHdpbmRvdyBmb3IgYWxsIHdpbmRvd3MuCitTb2x1dGlvbjogICBQYXNzIGEgd2luZG93IHBvaW50ZXIgdG8gYXBwZW5kX2FyZ19udW1iZXIoKSwgYW5kIHBhc3MgdGhlIHdpbmRvdworCSAgICBiZWluZyB1cGRhdGVkIGZyb20gYnVpbGRfc3RsX3N0cl9obCgpLiAoU3RlcGhlbiBQLiBXYWxsKQorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9zY3JlZW4uYywgc3JjL3Byb3RvL2J1ZmZlci5wcm8KKworUGF0Y2ggNS41LjA0MAorUHJvYmxlbTogICAgTXVsdGktYnl0ZTogV2hlbiB0aGVyZSBpcyBzb21lIGVycm9yIGluIHhpbV9yZWFsX2luaXQoKSwgaXQgY2FuCisJICAgIGNsb3NlIFhJTSBhbmQgcmV0dXJuLiAgQWZ0ZXIgdGhpcyB0aGVyZSBjYW4gYmUgYSBzZWd2LgorU29sdXRpb246ICAgVGVzdCAieGljIiBmb3IgYmVpbmcgbm9uLU5VTEwsIGRvbid0IHNldCAieGltIiB0byBOVUxMLiAgQWxzbyB0cnkKKwkgICAgdG8gZmluZCBtb3JlIG1hdGNoZXMgZm9yIHN1cHBvcnRlZCBzdHlsZXMuIChTdW5nLUh5dW4gTmFtKQorRmlsZXM6CSAgICBzcmMvbXVsdGJ5dGUuYworCitQYXRjaCA1LjUuMDQxCitQcm9ibGVtOiAgICBYMTEgR1VJOiBDVFJMLV8gcmVxdWlyZXMgdGhlIFNISUZUIGtleSBvbmx5IG9uIHNvbWUgbWFjaGluZXMuCitTb2x1dGlvbjogICBUcmFuc2xhdGUgQ1RSTC0tIHRvIENUUkwtXy4gKFJvYmVydCBXZWJiKQorRmlsZXM6CSAgICBzcmMvZ3VpX3gxMS5jCisKK1BhdGNoIDUuNS4wNDIKK1Byb2JsZW06ICAgIFgxMSBHVUk6IGtleXMgd2l0aCBBTFQgd2VyZSBhc3N1bWVkIHRvIGJlIHVzZWQgZm9yIHRoZSBtZW51LCBldmVuCisJICAgIHdoZW4gdGhlIG1lbnUgaGFzIGJlZW4gZGlzYWJsZWQgYnkgcmVtb3ZpbmcgJ20nIGZyb20gJ2d1aW9wdGlvbnMnLgorU29sdXRpb246ICAgSWdub3JlIGtleXMgd2l0aCBBTFQgb25seSB3aGVuIGd1aS5tZW51X2lzX2FjdGl2ZSBpcyBzZXQuIChSYWYpCitGaWxlczoJICAgIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNS41LjA0MworUHJvYmxlbTogICAgR1RLOiBIYW5kbGluZyBvZiBmb250c2V0IGZvbnRzIHdhcyBub3QgcmlnaHQgd2hlbiAnZ3VpZm9udHNldCcKKwkgICAgY29udGFpbnMgZXhhY3RseSAxNCB0aW1lcyAnLScuCitTb2x1dGlvbjogICBBdm9pZCBzZXR0aW5nIGZvbnRzIHdoZW4gd29ya2luZyB3aXRoIGEgZm9udHNldC4gKFN1bmctSHl1biBOYW0pCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDUuNS4wNDQKK1Byb2JsZW06ICAgIHBsdGFncy5wbCBjb250YWlucyBhbiBhYnNvbHV0ZSBwYXRoICIvdXNyL2xvY2FsL2Jpbi9wZXJsIi4gIFRoYXQKKwkgICAgbWlnaHQgbm90IHdvcmsgZXZlcnl3aGVyZS4KK1NvbHV0aW9uOiAgIFVzZSAiL3Vzci9iaW4vZW52IHBlcmwiIGluc3RlYWQuCitGaWxlczoJICAgIHJ1bnRpbWUvdG9vbHMvcGx0YWdzLnBsCisKK1BhdGNoIDUuNS4wNDUKK1Byb2JsZW06ICAgIFVzaW5nICJ0aGlzX3Nlc3Npb24iIHZhcmlhYmxlIGRvZXMgbm90IHdvcmssIHJlcXVpcmVzIHByZWNlZGluZyBpdAorCSAgICB3aXRoICJ2OiIuICBEZWZhdWx0IGZpbGVuYW1lIGZvciAiOm1rc2Vzc2lvbiIgaXNuJ3QgbWVudGlvbmVkCisJICAgIGluIHRoZSBkb2NzLiAoRmlzaGVyKQorU29sdXRpb246ICAgU3VwcG9ydCB1c2luZyAidGhpc19zZXNzaW9uIiB0byBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKKworUGF0Y2ggNS41LjA0NiAoZXh0cmEpCitQcm9ibGVtOiAgICBWTVM6IHByb2JsZW1zIHdpdGggcGF0aCBhbmQgZmlsZW5hbWUuCitTb2x1dGlvbjogICBUcnVuY2F0ZSBmaWxlIG5hbWUgYXQgbGFzdCAnOycsIGV0Yy4gKFpvbHRhbiBBcnBhZGZmeSkKK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvZmlsZWlvLmMsIHNyYy9ndWlfbW90aWYuYywgc3JjL29zX3Ztcy5jLAorCSAgICBzcmMvcHJvdG8vb3Nfdm1zLnBybworCitQYXRjaCA1LjUuMDQ3CitQcm9ibGVtOiAgICBWTVM6IENyYXNoIHdoZW4gdXNpbmcgdGhlIHBvcHVwIG1lbnUKK1NvbHV0aW9uOiAgIFR1cm4gdGhlICNkZWZpbmUgTUVOVV9NT0RFX0NIQVJTIGludG8gYW4gYXJyYXkuIChBcnBhZGZmeSkKK0ZpbGVzOgkgICAgc3JjL3N0cnVjdHMuaCwgc3JjL21lbnUuYworCitQYXRjaCA1LjUuMDQ4CitQcm9ibGVtOiAgICBIUC1VWCAxMTogQ29tcGlsaW5nIGRvZXNuJ3Qgd29yaywgYmVjYXVzZSBib3RoIHN0cmluZy5oIGFuZAorCSAgICBzdHJpbmdzLmggYXJlIGluY2x1ZGVkLiAoU3F1YXNzYWJpYSkKK1NvbHV0aW9uOiAgIFRoZSBjb25maWd1cmUgdGVzdCBmb3IgaW5jbHVkaW5nIGJvdGggc3RyaW5nLmggYW5kIHN0cmluZ3MuaAorCSAgICBtdXN0IGluY2x1ZGUgPFhtL1htLmg+IGZpcnN0LCBiZWNhdXNlIGl0IGNhdXNlcyBwcm9ibGVtcy4KK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZy5oLmluCisKK1BhdGNoIDUuNS4wNDkKK1Byb2JsZW06ICAgIFVuaXg6IFdoZW4gaW5zdGFsbGluZyBWaW0sIHRoZSBwcm90ZWN0aW9uIGJpdHMgb2YgZmlsZXMgbWlnaHQgYmUKKwkgICAgaW5mbHVlbmNlZCBieSB0aGUgdW1hc2suCitTb2x1dGlvbjogICBBZGQgJChGSUxFTU9EKSB0byBNYWtlZmlsZS4gKFNoZXR5ZSkKK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDUuNS4wNTAKK1Byb2JsZW06ICAgICJ6KyIgYW5kICJ6XiIgY29tbWFuZHMgYXJlIG1pc3NpbmcuCitTb2x1dGlvbjogICBJbXBsZW1lbnRlZCAieisiIGFuZCAiel4iLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHJ1bnRpbWUvZG9jL3Njcm9sbC50eHQsIHJ1bnRpbWUvZG9jL2luZGV4LnR4dAorCitQYXRjaCA1LjUuMDUxCitQcm9ibGVtOiAgICBTZXZlcmFsIFVuaXggc3lzdGVtcyBoYXZlIGEgcHJvYmxlbSB3aXRoIHRoZSBvcHRpbWl6YXRpb24gbGltaXRzCisJICAgIGNoZWNrIGluIGNvbmZpZ3VyZS4KK1NvbHV0aW9uOiAgIFJlbW92ZWQgdGhlIGNvbmZpZ3VyZSBjaGVjaywgbGV0IHRoZSB1c2VyIGFkZCBpdCBtYW51YWxseSBpbgorCSAgICBNYWtlZmlsZSBvciB0aGUgZW52aXJvbm1lbnQuCitGaWxlczoJICAgIHNyYy9jb25maWd1cmUuaW4sIHNyYy9jb25maWd1cmUsIHNyYy9NYWtlZmlsZQorCitQYXRjaCA1LjUuMDUyCitQcm9ibGVtOiAgICBDcmFzaCB3aGVuIHVzaW5nIGEgY3Vyc29yIGtleSBhdCB0aGUgQVRURU5USU9OIHByb21wdC4gKEFsYmVyYW5pKQorU29sdXRpb246ICAgSWdub3JlIHNwZWNpYWwga2V5cyBhdCB0aGUgY29uc29sZSBkaWFsb2cuICBBbHNvIGlnbm9yZSBjaGFyYWN0ZXJzCisJICAgID4gMjU1IGZvciBvdGhlciB1c2VzIG9mIHRvbG93ZXIoKSBhbmQgdG91cHBlcigpLgorRmlsZXM6CSAgICBzcmMvbWVudS5jLCBzcmMvbWVzc2FnZS5jLCBzcmMvbWlzYzIuYworCitQYXRjaCA1LjUuMDUzCitQcm9ibGVtOiAgICBJbmRlbnRpbmcgaXMgd3JvbmcgYWZ0ZXIgYSBmdW5jdGlvbiB3aGVuICdjaW5vJyBoYXMgImZzIi4gIEFub3RoZXIKKwkgICAgcHJvYmxlbSB3aGVuICdjaW5vJyBoYXMgIntzIi4KK1NvbHV0aW9uOiAgIFB1dCBsaW5lIGFmdGVyIGNsb3NpbmcgIn0iIG9mIGEgZnVuY3Rpb24gYXQgdGhlIGxlZnQgbWFyZ2luLgorCSAgICBBcHBseSBpbmRfb3Blbl9leHRyYSBpbiB0aGUgcmlnaHQgd2F5IGFmdGVyIGEgJ3snLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYywgc3JjL3Rlc3RkaXIvdGVzdDMuaW4sIHNyYy90ZXN0ZGlyL3Rlc3QzLm9rCisKK1BhdGNoIDUuNS4wNTQKK1Byb2JsZW06ICAgIFVuaXg6ICI6ZSAjIiBkb2Vzbid0IHdvcmsgaWYgdGhlIGFsdGVybmF0ZSBmaWxlIG5hbWUgY29udGFpbnMgYQorCSAgICBzcGFjZSBvciBiYWNrc2xhc2guIChIdWRhY2VrKQorU29sdXRpb246ICAgV2hlbiByZXBsYWNpbmcgIiMiLCAiJSIgb3Igb3RoZXIgaXRlbXMgdGhhdCBzdGFuZCBmb3IgYSBmaWxlIG5hbWUsCisJICAgIHByZXBlbmQgYSBiYWNrc2xhc2ggYmVmb3JlIHNwZWNpYWwgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNS41LjA1NQorUHJvYmxlbTogICAgVXNpbmcgIjxDLVY+JHItIiBpbiBibG9ja3dpc2UgVmlzdWFsIG1vZGUgcmVwbGFjZXMgb25lIGNoYXJhY3RlcgorCSAgICBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbGluZS4gKFppdmtvdikKK1NvbHV0aW9uOiAgIE9ubHkgcmVwbGFjZSBleGlzdGluZyBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNS41LjA1NgorUHJvYmxlbTogICAgQWZ0ZXIgInoyMDxDUj4iIG1lc3NhZ2VzIHdlcmUgcHJpbnRlZCBhdCB0aGUgb2xkIGNvbW1hbmQgbGluZQorCSAgICBwb3NpdGlvbiBvbmNlLiAgKFZlc2VsaW5vdmljKQorU29sdXRpb246ICAgU2V0IG1zZ19yb3cgYW5kIG1zZ19jb2wgd2hlbiBjaGFuZ2luZyBjbWRsaW5lX3JvdyBpbgorCSAgICB3aW5fc2V0aGVpZ2h0KCkuCitGaWxlczoJICAgIHNyYy93aW5kb3cuYworCitQYXRjaCA1LjUuMDU3CitQcm9ibGVtOiAgICBBZnRlciAiUzxFc2M+IiBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVzdG9yZSB0aGUgbGluZSB3aXRoICJVIi4KKwkgICAgKFZlc2VsaW5vdmljKQorU29sdXRpb246ICAgRG9uJ3QgY2FsbCB1X2NsZWFybGluZSgpIGluIG9wX2RlbGV0ZSgpIHdoZW4gY2hhbmdpbmcgb25seSBvbmUKKwkgICAgbGluZS4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDUuNS4wNTgKK1Byb2JsZW06ICAgIFVzaW5nIGEgbG9uZyBzZWFyY2ggcGF0dGVybiBhbmQgdGhlbiAibiIgY2F1c2VzIHRoZSBoaXQtZW50ZXIKKwkgICAgcHJvbXB0LiAgKEtyaXNobmEpCitTb2x1dGlvbjogICBUcnVuY2F0ZSB0aGUgZWNob2VkIHBhdHRlcm4sIGxpa2Ugb3RoZXIgbWVzc2FnZXMuICBNb3ZlZCBjb2RlIGZvcgorCSAgICB0cnVuY2F0aW5nIGZyb20gbXNnX2F0dHIoKSB0byBtc2dfc3RydHJ1bmMoKS4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYywgc3JjL3Byb3RvL21lc3NhZ2UucHJvLCBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNS41LjA1OQorUHJvYmxlbTogICAgR1RLIEdVSTogV2hlbiAkdGVybSBpcyBpbnZhbGlkLCB1c2luZyAiZ3ZpbSIgZ2l2ZXMgYW4gZXJyb3IKKwkgICAgbWVzc2FnZSwgZXZlbiB0aG91Z2ggJHRlcm0gaXNuJ3QgcmVhbGx5IHVzZWQuICAoUm9iYmlucykKK1NvbHV0aW9uOiAgIFdoZW4gdGhlIEdVSSBpcyBhYm91dCB0byBzdGFydCwgc2tpcCB0aGUgZXJyb3IgbWVzc2FnZXMgZm9yIGEKKwkgICAgd3JvbmcgJHRlcm0uCitGaWxlczoJICAgIHNyYy90ZXJtLmMKKworUGF0Y2ggNS41LjA2MCAoZXh0cmEpCitQcm9ibGVtOiAgICBEb3MgMzIgYml0OiBXaGVuIGEgZGlyZWN0b3J5IGluICdiYWNrdXBkaXInIGRvZXNuJ3QgZXhpc3QsICI6dyIKKwkgICAgY2F1c2VzIHRoZSBmaWxlIHRvIGJlIHJlbmFtZWQgdG8gImF4bHF3cWh5LmJhfiIuIChNYXR6ZG9yZikKK1NvbHV0aW9uOiAgIFRoZSBjb2RlIHRvIHdvcmsgYXJvdW5kIGEgTEZOIGJ1ZyBpbiBXaW5kb3dzIDk1IGRvZXNuJ3QgaGFuZGxlIGEKKwkgICAgbm9uLWV4aXN0aW5nIHRhcmdldCBuYW1lIGNvcnJlY3RseS4gIFdoZW4gcmVuYW1pbmcgZmFpbHMsIG1ha2UKKwkgICAgc3VyZSB0aGUgZmlsZSBoYXMgaXRzIG9yaWdpbmFsIG5hbWUuICBBbHNvIGRvIHRoaXMgZm9yIHRoZSBXaW4zMgorCSAgICB2ZXJzaW9uLCBhbHRob3VnaCBpdCdzIHVubGlrZWx5IHRoYXQgaXQgcnVucyBpbnRvIHRoaXMgcHJvYmxlbS4KK0ZpbGVzOgkgICAgc3JjL29zX21zZG9zLmMsIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDUuNS4wNjEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIlw6IiBpbiBhIG1vZGVsaW5lLCB0aGUgYmFja3NsYXNoIGlzIGluY2x1ZGVkIGluIHRoZQorCSAgICBvcHRpb24gdmFsdWUuIChNb2hzaW4pCitTb2x1dGlvbjogICBSZW1vdmUgb25lIGJhY2tzbGFzaCBiZWZvcmUgdGhlICc6JyBpbiBhIG1vZGVsaW5lLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHJ1bnRpbWUvZG9jL29wdGlvbnMudHh0CisKK1BhdGNoIDUuNS4wNjIgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgY29uc29sZTogVGVtcCBmaWxlcyBhcmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgY3VycmVudAorCSAgICBkcml2ZSwgd2hpY2ggbWF5IGJlIHJlYWQtb25seS4gKFBldGVyc29uKQorU29sdXRpb246ICAgVXNlIHRoZSBzYW1lIG1lY2hhbmlzbSBvZiB0aGUgR1VJIHZlcnNpb246IFVzZSAkVE1QLCAkVEVNUCBvciB0aGUKKwkgICAgY3VycmVudCBkaXJlY3RvcnkuICBDbGVhbmVkIHVwIHZpbV90ZW1wbmFtZSgpIGEgYml0LgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9vc193aW4zMi5oLCBydW50aW1lL2RvYy9vc19kb3MudHh0CisKK1BhdGNoIDUuNS4wNjMKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgd2hvbGUtbGluZSBjb21wbGV0aW9uIGluIEluc2VydCBtb2RlLCAnY2luZGVudCcgaXMKKwkgICAgYXBwbGllZCwgZXZlbiBhZnRlciBjaGFuZ2luZyB0aGUgaW5kZW50IG9mIHRoZSBsaW5lLgorU29sdXRpb246ICAgRG9uJ3QgcmVpbmRlbnQgdGhlIGNvbXBsZXRlZCBsaW5lIGFmdGVyIGluc2VydGluZy9yZW1vdmluZyBpbmRlbnQuCisJICAgIChSb2JlcnQgV2ViYikKK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA1LjUuMDY0CitQcm9ibGVtOiAgICBoYXMoInNuaWZmIikgZG9lc24ndCB3b3JrIGNvcnJlY3RseS4KK1NvbHV0aW9uOiAgIFJldHVybiAxIHdoZW4gVmltIHdhcyBjb21waWxlZCB3aXRoIHRoZSArc25pZmYgZmVhdHVyZS4gKFBydWVtbWVyKQorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDUuNS4wNjUKK1Byb2JsZW06ICAgIFdoZW4gZHJvcHBpbmcgYSBmaWxlIG9uIFZpbSwgdGhlICdzaGVsbHNsYXNoJyBvcHRpb24gaXMgbm90CisJICAgIGVmZmVjdGl2ZS4gKEtyaXNobmEpCitTb2x1dGlvbjogICBGaXggdGhlIHNsYXNoZXMgaW4gdGhlIGRyb3BwZWQgZmlsZSBuYW1lcyBhY2NvcmRpbmcgdG8KKwkgICAgJ3NoZWxsc2xhc2gnLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKKworUGF0Y2ggNS41LjA2NgorUHJvYmxlbTogICAgRm9yIHN5c3RlbXMgd2l0aCBiYWNrc2xhc2ggaW4gZmlsZSBuYW1lOiBTZXR0aW5nIGEgZmlsZSBuYW1lCisJICAgIG9wdGlvbiB0byBhIHZhbHVlIHN0YXJ0aW5nIHdpdGggIlxcbWFjaGluZSIgcmVtb3ZlZCBhIGJhY2tzbGFzaC4KK1NvbHV0aW9uOiAgIEtlZXAgdGhlIGRvdWJsZSBiYWNrc2xhc2ggZm9yICJcXG1hY2hpbmUiLCBidXQgZG8gY2hhbmdlCisJICAgICJcXFxcbWFjaGluZSIgdG8gIlxcbWFjaGluZSIgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMsIHJ1bnRpbWUvZG9jL29wdGlvbnMudHh0CisKK1BhdGNoIDUuNS4wNjcKK1Byb2JsZW06ICAgIFdpdGggJ2hsc2VhcmNoJyBzZXQsIHRoZSBwYXR0ZXJuICJcPiIgZG9lc24ndCBoaWdobGlnaHQgdGhlIGZpcnN0CisJICAgIG1hdGNoIGluIGEgbGluZS4gKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIEZpeCBoaWdobGlnaHRpbmcgYW4gZW1wdHkgbWF0Y2guICBBbHNvIGhpZ2hsaWdodCB0aGUgZmlyc3QKKwkgICAgY2hhcmFjdGVyIGluIGFuIGVtcHR5IGxpbmUgZm9yICIkIi4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDUuNS4wNjgKK1Byb2JsZW06ICAgIENyYXNoIHdoZW4gYSAiOndoaWxlIiBpcyB1c2VkIHdpdGggYW4gYXJndW1lbnQgdGhhdCBoYXMgYW4gZXJyb3IuCisJICAgIChTeWx2YWluIFZpYXJ0KQorU29sdXRpb246ICAgV2FzIHVzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgaW5kZXggaW4gdGhlIGNzX2xpbmVbXSBhcnJheS4gIFRoZQorCSAgICBjcmFzaCBvbmx5IGhhcHBlbmVkIHdoZW4gdGhlIGluZGV4IHdhcyBmYXIgb2ZmLiAgTWFkZSBzdXJlIHRoZQorCSAgICB1bmluaXRpYWxpemVkIGluZGV4IGlzbid0IHVzZWQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDUuNS4wNjkKK1Byb2JsZW06ICAgIFNoaWZ0aW5nIGxpbmVzIGluIGJsb2Nrd2lzZSBWaXN1YWwgbW9kZSBkaWRuJ3Qgc2V0IHRoZSAnbW9kaWZpZWQnCisJICAgIGZsYWcuCitTb2x1dGlvbjogICBEbyBzZXQgdGhlICdtb2RpZmllZCcgZmxhZy4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDUuNS4wNzAKK1Byb2JsZW06ICAgIFdoZW4gZWRpdGluZyBhIG5ldyBmaWxlLCBjcmVhdGluZyB0aGF0IGZpbGUgb3V0c2lkZSBvZiBWaW0sIHRoZW4KKwkgICAgZWRpdGluZyBpdCBhZ2FpbiwgIjp3IiBzdGlsbCB3YXJucyBmb3Igb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcKKwkgICAgZmlsZS4gKE5hbSkKK1NvbHV0aW9uOiAgIFRoZSBCRl9ORVcgZmxhZyBpbiB0aGUgImJfZmxhZ3MiIGZpZWxkIHdhc24ndCBjbGVhcmVkIHByb3Blcmx5LgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9maWxlaW8uYworCitQYXRjaCA1LjUuMDcxCitQcm9ibGVtOiAgICBVc2luZyBhIG1hdGNoZ3JvdXAgaW4gYSAiOnN5biByZWdpb24iLCB3aGljaCBpcyB0aGUgc2FtZSBzeW50YXgKKwkgICAgZ3JvdXAgYXMgdGhlIHJlZ2lvbiwgZGlkbid0IHN0b3AgYSBjb250YWluZWQgaXRlbSBmcm9tIG1hdGNoaW5nIGluCisJICAgIHRoZSBzdGFydCBwYXR0ZXJuLgorU29sdXRpb246ICAgQWxzbyBwdXNoIGFuIGl0ZW0gb24gdGhlIHN0YWNrIHdoZW4gdGhlIHN5bnRheCBJRCBvZiB0aGUKKwkgICAgbWF0Y2hncm91cCBpcyB0aGUgc2FtZSBhcyB0aGUgc3ludGF4IElEIG9mIHRoZSByZWdpb24uCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA1LjUuMDcyIChleHRyYSkKK1Byb2JsZW06ICAgIERvcyAzMiBiaXQ6IFdoZW4gc2V0dGluZyAnY29sdW1ucycgdG8gYSB0b28gbGFyZ2UgdmFsdWUsIFZpbSBtYXkKKwkgICAgY3Jhc2gsIGFuZCB0aGUgRE9TIGNvbnNvbGUgdG9vLgorU29sdXRpb246ICAgQ2hlY2sgdGhhdCB0aGUgdmFsdWUgb2YgJ2NvbHVtbnMnIGlzbid0IGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YKKwkgICAgY29sdW1ucyB0aGF0IHRoZSBCSU9TIHJlcG9ydHMuCitGaWxlczoJICAgIHNyYy9vc19tc2Rvcy5jLCBzcmMvcHJvdG8vb3NfbXNkb3MucHJvLCBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNS41LjA3MyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4gMzIgR1VJOiBUaGUgRmluZCBhbmQgRmluZC9SZXBsYWNlIGRpYWxvZ3MgZGlkbid0IHNob3cgdGhlCisJICAgICJtYXRjaCBjYXNlIiBjaGVja2JveC4gIFRoZSBGaW5kL1JlcGxhY2UgZGlhbG9nIGRpZG4ndCBoYW5kbGUgdGhlCisJICAgICJtYXRjaCB3aG9sZSB3b3JkIiBjaGVja2JveC4KK1NvbHV0aW9uOiAgIFN1cHBvcnQgdGhlICJtYXRjaCBjYXNlIiBhbmQgIm1hdGNoIHdob2xlIHdvcmQiIGNoZWNrYm94ZXMuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNS42YS4wMDEKK1Byb2JsZW06ICAgIFVzaW5nIDxDLUVuZD4gd2l0aCBhIGNvdW50IGRvZXNuJ3Qgd29yayBsaWtlIGl0IGRvZXMgd2l0aCAiRyIuCisJICAgIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBBY2NlcHQgYSBjb3VudCBmb3IgPEMtRW5kPiBhbmQgPEMtSG9tZT4uCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjZhLjAwMgorUHJvYmxlbTogICAgVGhlIHNjcmlwdCBmb3IgY29udmVyc2lvbiB0byBIVE1MIHdhcyBhbiBvbGRlciB2ZXJzaW9uLgorU29sdXRpb246ICAgQWRkIHN1cHBvcnQgZm9yIHJ1bm5pbmcgMmh0bWwudmltIG9uIGEgY29sb3IgdGVybWluYWwuCitGaWxlczoJICAgIHJ1bnRpbWUvc3ludGF4LzJodG1sLnZpbQorCitQYXRjaCA1LjZhLjAwMworUHJvYmxlbTogICAgRGVmaW5pbmcgYSBmdW5jdGlvbiBpbnNpZGUgYSBmdW5jdGlvbiBkaWRuJ3QgZ2l2ZSBhbiBlcnJvcgorCSAgICBtZXNzYWdlLiAgQSBtaXNzaW5nICI6ZW5kZnVuY3Rpb24iIGRvZXNuJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgQWxsb3cgZGVmaW5pbmcgYSBmdW5jdGlvbiBpbnNpZGUgYSBmdW5jdGlvbi4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgcnVudGltZS9kb2MvZXZhbC50eHQKKworUGF0Y2ggNS42YS4wMDQKK1Byb2JsZW06ICAgIEEgbWlzc2luZyAiOmVuZHdoaWxlIiBvciAiOmVuZGlmIiBkb2Vzbid0IGdpdmUgYW4gZXJyb3IgbWVzc2FnZS4KKwkgICAgKEpvaGFubmVzIFplbGxuZXIpCitTb2x1dGlvbjogICBDaGVjayBmb3IgbWlzc2luZyAiOmVuZHdoaWxlIiBhbmQgIjplbmRpZiIgaW4gc291cmNlZCBmaWxlcy4KKwkgICAgQWRkIG1pc3NpbmcgIjplbmRpZiIgaW4gZmlsZSBzZWxlY3Rpb24gbWFjcm9zLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgcnVudGltZS9tYWNyb3MvZmlsZV9zZWxlY3QudmltCisKK1BhdGNoIDUuNmEuMDA1CitQcm9ibGVtOiAgICAnaGxzZWFyY2gnIHdhcyBub3QgbGlzdGVkIGFscGhhYmV0aWNhbGx5LiAgVGhlIHZhbHVlIG9mICd0b29sYmFyJworCSAgICB3YXMgY2hhbmdlZCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCitTb2x1dGlvbjogICBNb3ZlZCBlbnRyeSBvZiAnaGxzZWFyY2gnIGluIG9wdGlvbnNbXSB0YWJsZSBkb3duLgorCSAgICBEb24ndCByZXNldCAndG9vbGJhcicgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHZhbHVlIHdoZW4KKwkgICAgJ2NvbXBhdGlibGUnIGlzIHNldC4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDUuNmEuMDA2CitQcm9ibGVtOiAgICBVc2luZyBhIGJhY2t3YXJkcyByYW5nZSBpbnNpZGUgIjppZiAwIiBnYXZlIGFuIGVycm9yIG1lc3NhZ2UuCitTb2x1dGlvbjogICBEb24ndCBjb21wbGFpbiBhYm91dCBhIHJhbmdlIHdoZW4gaXQgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQuCisJICAgIChTdGVmYW4gUm9lbWVyKQorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA1LjZhLjAwNworUHJvYmxlbTogICAgIjpsZXQiIGRpZG4ndCBzaG93IGludGVybmFsIFZpbSB2YXJpYWJsZXMuICAoUm9uIEFhcm9uKQorU29sdXRpb246ICAgRG8gc2hvdyAiOnYiIHZhcmlhYmxlcyBmb3IgIjpsZXQiIGFuZCAiOmxldCB2Om5hbWUiLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDUuNmEuMDA4CitQcm9ibGVtOiAgICBTZWxlY3RpbmcgYSBzeW50YXggZnJvbSB0aGUgU3ludGF4IG1lbnUgZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIFJlcGxhY2UgImVsc2UgaWYiIGluIFNldFN5bigpIHdpdGggImVsc2VpZiIuICAoUm9uYWxkIFNjaGlsZCkKK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA1LjZhLjAwOQorUHJvYmxlbTogICAgV2hlbiBjb21waWxpbmcgd2l0aCArZXh0cmFfc2VhcmNoIGJ1dCB3aXRob3V0ICtzeW50YXgsIHRoZXJlIGlzIGEKKwkgICAgY29tcGlsYXRpb24gZXJyb3IgaW4gc2NyZWVuLmMuIChBeGVsIEtpZWxob3JuKQorU29sdXRpb246ICAgQWRqdXN0IHRoZSAjaWZkZWYgZm9yIGRlY2xhcmluZyBhbmQgaW5pdGlhbGl6aW5nICJsaW5lIiBpbgorCSAgICB3aW5fbGluZSgpLiAgQWxzbyBzb2x2ZSBjb21waWxhdGlvbiBwcm9ibGVtIHdoZW4gK3N0YXR1c2xpbmUgaXMKKwkgICAgdXNlZCB3aXRob3V0ICtldmFsLiAgQW5vdGhlciBvbmUgd2hlbiArY21kbGluZV9jb21wbCBpcyB1c2VkCisJICAgIHdpdGhvdXQgK2V2YWwuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYywgc3JjL21pc2MyLmMKKworUGF0Y2ggNS42YS4wMTAKK1Byb2JsZW06ICAgIEluIGEgZnVuY3Rpb24sICI6c3RhcnRpbnNlcnQhIiBkb2VzIG5vdCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUKKwkgICAgbGluZSBpZiBhICI6bm9ybWFsIiBjb21tYW5kIHdhcyB1c2VkIHRvIG1vdmUgdGhlIGN1cnNvci4gKEZpc2hlcikKK1NvbHV0aW9uOiAgIFJlc2V0ICJ3X3NldF9jdXJzd2FudCIgdG8gYXZvaWQgdGhhdCB3X2N1cnN3YW50IGlzIGNoYW5nZWQgYWdhaW4uCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDUuNmEuMDExIChkZXBlbmRzIG9uIDUuNmEuMDA0KQorUHJvYmxlbTogICAgQSBtaXNzaW5nICI6ZW5kaWYiIG9yICI6ZW5kd2hpbGUiIGluIGEgZnVuY3Rpb24gZG9lc24ndCBnaXZlIGFuCisJICAgIGVycm9yIG1lc3NhZ2UuCitTb2x1dGlvbjogICBHaXZlIHRoYXQgZXJyb3IgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNS42YS4wMTIgKGRlcGVuZHMgb24gNS42YS4wMDgpCitQcm9ibGVtOiAgICBTb21lIFN5bnRheCBtZW51IGVudHJpZXMgY2F1c2VkIGEgaGl0LWVudGVyIHByb21wdC4KK1NvbHV0aW9uOiAgIENhbGwgYSBmdW5jdGlvbiB0byBtYWtlIHRoZSBjb21tYW5kIHNob3J0ZXIuICBBbHNvIHJlbmFtZSBhIGZldworCSAgICBmdW5jdGlvbnMgdG8gYXZvaWQgbmFtZSBjbGFzaGVzLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDUuNmEuMDEzCitQcm9ibGVtOiAgICBDb21tYW5kIGxpbmUgY29tcGxldGlvbiB3b3JrcyBkaWZmZXJlbnQgd2hlbiBhbm90aGVyIGNvbXBsZXRpb24KKwkgICAgd2FzIGRvbmUgZWFybGllci4gKEpvaGFubmVzIFplbGxuZXIpCitTb2x1dGlvbjogICBSZXNldCB3aW1faW5kZXggd2hlbiBzdGFydGluZyBhIG5ldyBjb21wbGV0aW9uLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA1LjZhLjAxNAorUHJvYmxlbTogICAgVmFyaW91cyB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gY29tcGlsaW5nIGFuZCBydW5uaW5nIGxpbnQgd2l0aAorCSAgICBkaWZmZXJlbnQgY29tYmluYXRpb25zIG9mIGZlYXR1cmVzLgorU29sdXRpb246ICAgRml4IHRoZSB3YXJuaW5nIG1lc3NhZ2VzLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvZXhfY21kcy5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL2d1aV9ndGtfeDExLmMsCisJICAgIHNyYy9vcHRpb24uYywgc3JjL3NjcmVlbi5jLCBzcmMvc2VhcmNoLmMsIHNyYy9zeW50YXguYywKKwkgICAgc3JjL2ZlYXR1cmUuaCwgc3JjL2dsb2JhbHMuaAorCitQYXRjaCA1LjZhLjAxNQorUHJvYmxlbTogICAgVGhlIHZpbXR1dG9yIGNvbW1hbmQgZG9lc24ndCBhbHdheXMga25vdyB0aGUgdmFsdWUgb2YgJFZJTVJVTlRJTUUuCitTb2x1dGlvbjogICBMZXQgVmltIGV4cGFuZCAkVklNUlVOVElNRSwgaW5zdGVhZCBvZiB0aGUgc2hlbGwuCitGaWxlczoJICAgIHNyYy92aW10dXRvcgorCitQYXRjaCA1LjZhLjAxNiAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWM6IFdpbmRvdyBzaXplIGlzIHJlc3RyaWN0ZWQgd2hlbiBzdGFydGluZy4gIENhbm5vdCBkcmFnIHRoZQorCSAgICB3aW5kb3cgYWxsIG92ZXIgdGhlIGRlc2t0b3AuCitTb2x1dGlvbjogICBHZXQgcmVhbCBzY3JlZW4gc2l6ZSBpbnN0ZWFkIG9mIGFzc3VtaW5nIDY0MHg0MDAuICBEbyBub3QgdXNlIGEKKwkgICAgZml4ZWQgbnVtYmVyIGZvciB0aGUgZHJhZyBsaW1pdHMuIChBeGVsIEtpZWxob3JuKQorRmlsZXM6CSAgICBzcmMvZ3VpX21hYy5jCisKK1BhdGNoIDUuNmEuMDE3CitQcm9ibGVtOiAgICBUaGUgIlBhc3RlIiBlbnRyeSBpbiBwb3B1cCBtZW51IGZvciBWaXN1YWwsIEluc2VydCBhbmQgQ21kbGluZQorCSAgICBtb2RlIGlzIGluIHRoZSB3cm9uZyBwb3NpdGlvbi4gKFN0b2wpCitTb2x1dGlvbjogICBBZGQgcHJpb3JpdHkgbnVtYmVycyBmb3IgYWxsIFBhc3RlIG1lbnUgZW50cmllcy4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA1LjZhLjAxOAorUHJvYmxlbTogICAgR1RLIEdVSTogc3VibWVudSBwcmlvcml0eSBkb2Vzbid0IHdvcmsuCisJICAgIEhlbHAgZGlhbG9nIGNvdWxkIGJlIGRlc3Ryb3llZCB0b28gc29vbi4KKwkgICAgV2hlbiBjbG9zaW5nIGEgZGlhbG9nIHdpbmRvdyAoZS5nLiB0aGUgIkFUVEVOVElPTiIgb25lKSwgVmltIHdvdWxkCisJICAgIGp1c3QgaGFuZy4KKwkgICAgV2hlbiBHVEsgdGhlbWUgaXMgY2hhbmdlZCwgVmltIGRvZXNuJ3QgYWRqdXN0IHRvIHRoZSBuZXcgY29sb3JzLgorCSAgICBBcmd1bWVudCBmb3IgIjpwcm9tcHRmaW5kIiBpc24ndCB1c2VkLgorU29sdXRpb246ICAgRml4ZWQgdGhlIG1lbnRpb25lZCBwcm9ibGVtcy4KKwkgICAgTWFkZSB0aGUgZGlhbG9ncyBsb29rJmZlZWwgbmljZXIuCisJICAgIE1vdmVkIGZ1bmN0aW9ucyB0byBhdm9pZCB0aGUgbmVlZCBmb3IgYSBmb3J3YXJkIGRlY2xhcmF0aW9uLgorCSAgICBGaXhlZCByZWVudHJhbmN5IG9mIHRoZSBmaWxlIGJyb3dzZXIgZGlhbG9nLgorCSAgICBBZGRlZCBkcmFnJmRyb3Agc3VwcG9ydCBmb3IgR05PTUUuCisJICAgIEluaXQgdGhlIHRleHQgZm9yIHRoZSBGaW5kL3JlcGxhY2UgZGlhbG9nIGZyb20gdGhlIGxhc3QgdXNlZAorCSAgICBzZWFyY2ggc3RyaW5nLiAgU2V0ICJtYXRjaCB3aG9sZSB3b3JkIiB0b2dnbGUgYnV0dG9uIGNvcnJlY3RseS4KKwkgICAgTWFkZSByZXBlYXQgcmF0ZSBmb3IgZHJhZyBvdXRzaWRlIG9mIHdpbmRvdyBkZXBlbmQgb24gdGhlCisJICAgIGRpc3RhbmNlIGZyb20gdGhlIHdpbmRvdy4gIChNYXJjaW4gRGFsZWNraSkKKwkgICAgTWFkZSB0aGUgZHJhZyBpbiBWaXN1YWwgbW9kZSBhY3R1YWxseSB3b3JrLgorCSAgICBSZW1vdmVkIHJlY3Vyc2l2ZW5lc3MgcHJvdGVjdGlvbiBmcm9tIGd1aV9tY2hfZ2V0X3JnYigpLCBpdCBtaWdodAorCSAgICBjYXVzZSBtb3JlIHRyb3VibGUgdGhhbiBpdCBzb2x2ZXMuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvZ3VpX2d0ay5jLCBzcmMvZ3VpX2d0a194MTEuYywgc3JjL3VpLmMsCisJICAgIHNyYy9wcm90by91aS5wcm8sIHNyYy9taXNjMi5jCisKK1BhdGNoIDUuNmEuMDE5CitQcm9ibGVtOiAgICBXaGVuIHRyeWluZyB0byByZWNvdmVyIHRocm91Z2ggTkZTLCB3aGljaCB1c2VzIGEgbGFyZ2UgYmxvY2sgc2l6ZSwKKwkgICAgVmltIG1pZ2h0IHRoaW5rIHRoZSBzd2FwIGZpbGUgaXMgZW1wdHksIGJlY2F1c2UgbWZfYmxvY2tucl9tYXggaXMKKwkgICAgemVyby4gIChTY290dCBNY0Rlcm1vdHQpCitTb2x1dGlvbjogICBXaGVuIGNvbXB1dGluZyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBvZiB0aGUgZmlsZSBpbiBtZl9vcGVuKCksCisJICAgIHJvdW5kIHVwIGluc3RlYWQgb2YgZG93bi4KK0ZpbGVzOgkgICAgc3JjL21lbWZpbGUuYworCitQYXRjaCA1LjZhLjAyMAorUHJvYmxlbTogICAgR1VJIEdUSzogQ291bGQgbm90IHNldCBkaXNwbGF5IGZvciBndmltLgorU29sdXRpb246ICAgQWRkICItZGlzcGxheSIgYW5kICItLWRpc3BsYXkiIGFyZ3VtZW50cy4gKE1hcmNpbiBEYWxlY2tpKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA1LjZhLjAyMQorUHJvYmxlbTogICAgUmVjb3ZlcmluZyBzdGlsbCBtYXkgbm90IHdvcmsgd2hlbiB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgZGV2aWNlCisJICAgIHdoZXJlIHRoZSBzd2FwIGZpbGUgaXMgbG9jYXRlZCBpcyBsYXJnZXIgdGhhbiA0MDk2LgorU29sdXRpb246ICAgUmVhZCBibG9jayAwIHdpdGggdGhlIG1pbmltYWwgYmxvY2sgc2l6ZS4KK0ZpbGVzOgkgICAgc3JjL21lbWxpbmUuYywgc3JjL21lbWZpbGUuYywgc3JjL3ZpbS5oCisKK1BhdGNoIDUuNmEuMDIyIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogV2hlbiBhbiBlcnJvciBpbiB0aGUgdmltcmMgY2F1c2VzIGEgZGlhbG9nIHRvIHBvcCB1cAorCSAgICAoZS5nLiwgZm9yIGFuIGV4aXN0aW5nIHN3YXAgZmlsZSksIFZpbSBjcmFzaGVzLiAoRGF2aWQgRWxpbnMpCitTb2x1dGlvbjogICBCZWZvcmUgc2hvd2luZyBhIGRpYWxvZywgb3BlbiB0aGUgbWFpbiB3aW5kb3cuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNS42YS4wMjMKK1Byb2JsZW06ICAgIFVzaW5nIGV4cGFuZCgiJTpncz8/Lz8iKSBjYXVzZXMgYSBjcmFzaC4gKFJvbiBBYXJvbikKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBydW5uaW5nIGludG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGluIGRvX3N0cmluZ19zdWIoKS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA1LjZhLjAyNAorUHJvYmxlbTogICAgVXNpbmcgYW4gYXV0b2NvbW1hbmQgdG8gZGVsZXRlIGEgYnVmZmVyIHdoZW4gbGVhdmluZyBpdCBjYW4gY2F1c2UKKwkgICAgYSBjcmFzaCB3aGVuIGp1bXBpbmcgdG8gYSB0YWcuIChGcmFueiBHb3Jrb3R0ZSkKK1NvbHV0aW9uOiAgIEluIGRvX3RhZygpLCBzdG9yZSB0YWdzdGFja2xlbiBiZWZvcmUganVtcGluZyB0byBhbm90aGVyIGJ1ZmZlci4KKwkgICAgQ2hlY2sgdGFnc3RhY2tpZHggYWZ0ZXIganVtcGluZyB0byBhbm90aGVyIGJ1ZmZlci4KKwkgICAgQWRkIGV4dHJhIGNoZWNrIGluIHdpbl9zcGxpdCgpIGlmIHRhZ25hbWUgaXNuJ3QgTlVMTC4KK0ZpbGVzOgkgICAgc3JjL3RhZy5jLCBzcmMvd2luZG93LmMKKworUGF0Y2ggNS42YS4wMjUgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJOiBUaGUgdGFibGVzIGZvciB0b3VwcGVyKCkgYW5kIHRvbG93ZXIoKSBhcmUgaW5pdGlhbGl6ZWQKKwkgICAgdG9vIGxhdGUuIChNaWtlIFN0ZWVkKQorU29sdXRpb246ICAgTW92ZSB0aGUgaW5pdGlhbGl6YXRpb24gdG8gd2luMzJfaW5pdCgpIGFuZCBjYWxsIGl0IGZyb20gbWFpbigpLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvb3NfdzMyLmMsIHNyYy9wcm90by9vc193MzIucHJvCisKK1BhdGNoIDUuNmEuMDI2CitQcm9ibGVtOiAgICBXaGVuIHRoZSBTTmlGRiBjb25uZWN0aW9uIGlzIG9wZW4sIHNoZWxsIGNvbW1hbmRzIGhhbmcuIChQcnVlbW1lcikKK1NvbHV0aW9uOiAgIFNraXAgYSBzZWNvbmQgd2FpdCgpIGNhbGwgaWYgd2FpdHBpZCgpIGFscmVhZHkgZGV0ZWN0ZWQgdGhhdCB0aGUKKwkgICAgY2hpbGQgaGFzIGV4aXRlZC4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA1LjZhLjAyNyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFRoZSAiRWRpdCB3aXRoIFZpbSIgcG9wdXAgbWVudSBlbnRyeSBjYXVzZXMgcHJvYmxlbXMKKwkgICAgZm9yIHRoZSBPZmZpY2UgdG9vbGJhci4KK1NvbHV0aW9uOiAgIFVzZSBhIHNoZWxsIGV4dGVuc2lvbiBkbGwuIChUaWFubWlhbyBIdSkKKwkgICAgQWRkZWQgaXQgdG8gdGhlIGluc3RhbGwgYW5kIHVuaW5zdGFsIHByb2dyYW1zLCByZXBsYWNlcyB0aGUgb2xkCisJICAgICJFZGl0IHdpdGggVmltIiBtZW51IHJlZ2lzdHJ5IGVudHJpZXMuCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmMsIHNyYy91bmluc3RhbC5jLCBndmltZXh0LyosIHJ1bnRpbWUvZG9jL2d1aV93MzIudHh0CisKK1BhdGNoIDUuNmEuMDI4IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogRGlhbG9ncyBhbmQgdGVhci1vZmYgbWVudXMgY2FuJ3QgaGFuZGxlIG11bHRpLWJ5dGUKKwkgICAgY2hhcmFjdGVycy4KK1NvbHV0aW9uOiAgIEFkanVzdCBuQ29weUFuc2lUb1dpZGVDaGFyKCkgdG8gaGFuZGxlIG11bHRpLWJ5dGUgY2hhcmFjdGVycworCSAgICBjb3JyZWN0bHkuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitWRVJTSU9OIDUuNwkJCQkJCSp2ZXJzaW9uLTUuNyoKKworVmVyc2lvbiA1LjcgaXMgYSBidWctZml4IHZlcnNpb24gb2YgNS42LgorCitDaGFuZ2VkCQkJCQkJCSpjaGFuZ2VkLTUuNyoKKy0tLS0tLS0KKworUmVuYW1lZCBzcmMvSU5TVEFMTC5tYWMgdG8gSU5TVEFMTF9tYWMudHh0IHRvIGF2b2lkIGl0IGJlaW5nIHJlY29nbml6ZWQgd2l0aCBhCit3cm9uZyBmaWxlIHR5cGUuICBBbHNvIHJlbmFtZWQgc3JjL0lOU1RBTEwuYW1pZ2EgdG8gSU5TVEFMTF9hbWkudHh0LgorCisKK0FkZGVkCQkJCQkJCSphZGRlZC01LjcqCistLS0tLQorCitOZXcgc3ludGF4IGZpbGVzOgorc3RwCQlTdG9yZWQgUHJvY2VkdXJlcyAoSmVmZiBMYW56YXJvdHRhKQorc25uc25ldCwgc25uc3BhdCwgc25uc3JlcwlTTk5TIChEYXZpZGUgQWxiZXJhbmkpCittZWwJCU1FTCAoUm9iZXJ0IE1pbnNrKQorcnVieQkJUnVieSAoTWlya28gTmFzYXRvKQordGxpCQlUZWFsSW5mbyAoS3VydCBXLiBBbmRyZXdzKQorb3JhCQlPcmFjbGUgY29uZmlnIGZpbGUgKFNhbmRvciBLb3BhbnlpKQorYWJhcXVzCQlBYmFxdXMgKENhcmwgT3N0ZXJ3aXNjaCkKK2pwcm9wZXJ0aWVzCUphdmEgUHJvcGVydGllcyAoU2ltb24gQmFsZHdpbikKK2FwYWNoZQkJQXBhY2hlIGNvbmZpZyAoQWxsYW4gS2VsbHkpCitjc3AJCUNTUCAoSmFuIEJyZWRlcmVrZSkKK3NhbWJhCQlTYW1iYSBjb25maWcgKFJhZmFlbCBHYXJjaWEtU3VhcmV6KQora3NjcmlwdAkJS0RFIHNjcmlwdCAoVGhvbWFzIENhcHJpY2VsbGkpCitoYgkJSHlwZXIgQnVpbGRlciAoQWxlamFuZHJvIEZvcmVybyBDdWVydm8pCitmb3J0cmFuCQlGb3J0cmFuIChyZXdyaXR0ZW4pIChBaml0IEouIFRoYWtrYXIpCitzbWwJCVNNTCAoRmFicml6aW8gWmVubyBDb3JuZWxsaSkKK2N2cwkJQ1ZTIGNvbW1pdCAoTWF0dCBEdW5mb3JkKQorYXNwcGVybAkJQVNQIFBlcmwgKEFhcm9uIEhvcGUpCitiYwkJQkMgY2FsY3VsYXRvciAoVmxhZGltaXIgU2Nob2x0eikKK2xhdHRlCQlMYXR0ZSAoTmljayBNb2ZmaXR0KQord21sCQlXTUwgKEdlcmZyaWVkIEZ1Y2hzKQorCitJbmNsdWRlZCBFeHViZXJhbnQgY3RhZ3MgMy41LjEuIChEYXJyZW4gSGllYmVydCkKKworImRpc3BsYXkiIGFuZCAiZm9sZCIgYXJndW1lbnRzIGZvciBzeW50YXggaXRlbXMuICBGb3IgZnV0dXJlIGV4dGVuc2lvbiwgdGhleQorYXJlIGlnbm9yZWQgbm93LgorCitzdHJmdGltZSgpIGZ1bmN0aW9uIGZvciB0aGUgTWFjaW50b3NoLgorCittYWNyb3MvZXhwbG9yZXIudmltOiBBIGZpbGUgYnJvd3NlciBzY3JpcHQgKE0gQSBBeml6IEFobWVkKQorCisKK0ZpeGVkCQkJCQkJCSpmaXhlZC01LjcqCistLS0tLQorCitUaGUgMTYgYml0IE1TLURPUyB2ZXJzaW9uIGlzIG5vdyBjb21waWxlZCB3aXRoIEJjYyAzLjEgaW5zdGVhZCBvZiA0LjAuICBUaGUKK2V4ZWN1dGFibGUgaXMgc21hbGxlci4KKworV2hlbiBhICJtYWtlIHRlc3QiIGZhaWxlZCwgdGhlIG91dHB1dCBmaWxlIHdhcyBsb3N0LiAgUmVuYW1lIGl0IHRvCit0ZXN0OTkuZmFpbGVkIHRvIGJlIGFibGUgdG8gc2VlIHdoYXQgd2VudCB3cm9uZy4KKworQWZ0ZXIgc291cmNpbmcgYnVncmVwb3J0LnZpbSwgaXQncyBub3QgY2xlYXIgdGhhdCBidWdyZXBvcnQudHh0IGhhcyBiZWVuCit3cml0dGVuIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEVkaXQgYnVncmVwb3J0LnR4dCB0byBhdm9pZCB0aGF0LgorCitBZGRpbmcgSU1FIHN1cHBvcnQgd2hlbiB1c2luZyBNYWtlZmlsZS53MzIgZGlkbid0IHdvcmsuIChUYXJvIE11cmFva2EpCisKK1dpbjMyIGNvbnNvbGU6IE1vdXNlIGRyYWdzIHdlcmUgcGFzc2VkIG9uIGV2ZW4gd2hlbiB0aGUgbW91c2UgZGlkbid0IG1vdmUuCisKK1BlcmwgaW50ZXJmYWNlOiBJbiBCdWZmZXJzKCksIHR5cGUgb2YgYXJndW1lbnQgdG8gU3ZQVigpIHdhcyBpbnQsIHNob3VsZCBiZQorU1RSTEVOLiAoVG9ueSBMZW5laXMpCisKK1Byb2JsZW0gd2l0aCBwcm90b3R5cGUgZm9yIGluZGV4KCkgb24gQUlYIDQuMy4wLiAgQWRkZWQgY2hlY2sgZm9yIF9BSVg0MyBpbgorb3NfdW5peC5oLiAoSmFrZSBIYW1ieSkKKworTWFwcGluZ3MgaW4gbXN3aW4udmltIGNvdWxkIGJyZWFrIHdoZW4gc29tZSBjb21tYW5kcyBhcmUgbWFwcGVkLiAgQWRkICJub3JlIgordG8gbW9zdCBtYXBwaW5ncyB0byBhdm9pZCByZS1tYXBwaW5nLgorCittb2RpZnlfZm5hbWUoKSBtYWRlIGEgY29weSBvZiBhIGZpbGUgbmFtZSBmb3IgIjpwIiB3aGVuIGl0IGFscmVhZHkgd2FzIGEgZnVsbAorcGF0aCBuYW1lLCB3aGljaCBpcyBhIGJpdCBzbG93LgorCitXaW4zMiB3aXRoIEJvcmxhbmQgQysrIDUuNTogUGFzcyB0aGUgcGF0aCB0byB0aGUgY29tcGlsZXIgb24gdG8geHhkIGFuZCBjdGFncywKK3RvIGF2b2lkIGRlcGVuZGluZyBvbiAkUEFUSC4gIEZpeGVkICJtYWtlIGNsZWFuIi4KKworTWFueSBmaXhlcyB0byBNYWNpbnRvc2ggc3BlY2lmaWMgcGFydHM6IChtb3N0bHkgYnkgRGFueSBTdEFtYW50KQorLSBPbmx5IG9uZSBIZWxwIG1lbnUuCistIE5vIG1vcmUgY3Jhc2ggd2hlbiByZW1vdmluZyBhIG1lbnUgaXRlbS4KKy0gU3VwcG9ydCBhcyBFeHRlcm5hbCBFZGl0b3IgZm9yIENvZGV3YXJyaW9yIChzdGlsbCBzb21lIGxpdHRsZSBnbGl0Y2hlcykuCistIFBvcHVwIG1lbnUgc3VwcG9ydC4KKy0gRml4ZWQgY3Jhc2ggd2hlbiBwYXN0aW5nIGFmdGVyIGFwcGxpY2F0aW9uIHN3aXRjaC4KKy0gQ29sb3IgZnJvbSByZ2IudHh0IHByb3Blcmx5IGRpc3BsYXllZC4KKy0gJ2lzcHJpbnQnIGRlZmF1bHQgaW5jbHVkZXMgYWxsIGNoYXJzIGFib3ZlICd+Jy4gKEF4ZWwgS2llbGhvcm4pCistIG1hY19leHBhbmRwYXRoKCkgd2FzIGxlYWtpbmcgbWVtb3J5LgorLSBBZGQgZGlncmFwaHMgdGFibGUuIChBeGVsIEtpZWxob3JuKQorLSBNdWx0aS1ieXRlIHN1cHBvcnQ6IChLZW5pY2hpIEFzYWkpCisgIFN3aXRjaCBrZXlzY3JpcHQgd2hlbiBnb2luZyBpbi9vdXQgb2YgSW5zZXJ0IG1vZGUuCisgIERyYXcgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgY29ycmVjdGx5LgorICBEb24ndCB1c2UgbWJsZW4oKSBidXQgaGlnaGVzdCBiaXQgb2YgY2hhciB0byBkZXRlY3QgbXVsdGktYnl0ZSBjaGFyLgorICBEaXNwbGF5IHZhbHVlIG9mIG11bHRpLWJ5dGUgaW4gc3RhdHVzbGluZSAoYWxzbyBmb3Igb3RoZXIgc3lzdGVtcykuCistIG1vdXNlIGJ1dHRvbiB3YXMgbm90IGluaXRpYWxpemVkIHByb3Blcmx5IHRvIE1PVVNFX0xFRlQgd2hlbgorICBVU0VfQ1RSTENMSUNLTUVOVSBub3QgZGVmaW5lZC4KKy0gV2l0aCBKYXBhbmVzZSBTSklTIGNoYXJhY3RlcnM6IE1ha2UgInciLCAiYiIsIGFuZCAiZSIgd29yaworICBwcm9wZXJseS4gIChLZW5pY2hpIEFzYWkpCistIFJlcGxhY2VkIG9sZCBDb2RlV2FycmlvciBmaWxlIG9zX21hYy5DVzkuaHF4IHdpdGggb3NfbWFjLmN3NS5zaXQuaHF4LgorCitGaXhlcyBmb3IgVk1TOiAoWm9sdGFuIEFycGFkZmZ5KSAoYWxzbyBzZWUgcGF0Y2ggNS42LjA0NSBiZWxvdykKKy0gQWRkZWQgTWFrZWZpbGVfdm1zLm1tcyBhbmQgdmltcmMudm1zIHRvIHNyYy90ZXN0ZGlyIHRvIGJlIGFibGUgdG8gcnVuIHRoZQorICB0ZXN0cy4KKy0gVmFyaW91cyBmaXhlcy4KKy0gU2V0ICd1bmRvbGV2ZWxzJyB0byAxMDAwIGJ5IGRlZmF1bHQuCistIE1hZGUgbWNoX3NldHRpdGxlKCkgZXF1aXZhbGVudCB0byB0aGUgb25lIGluIG9zX3VuaXguYy4KKworUmlzY09TOiBBIGZldyBwcm90b3R5cGVzIGZvciBvc19yaXNjb3MuYyB3ZXJlIG91dGRhdGVkLiAgR2VuZXJhdGUgcHJvdG90eXBlcworYXV0b21hdGljYWxseS4KKworCitQcmV2aW91c2x5IHJlbGVhc2VkIHBhdGNoZXM6CisKK1BhdGNoIDUuNi4wMDEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgInNldCBicz0wIHNpIGNpbiIsIEluc2VydGluZyAiIzxCUz4iIG9yICJ9PEJTPiIgd2hpY2gKKwkgICAgcmVkdWNlcyB0aGUgaW5kZW50IGRvZXNuJ3QgZGVsZXRlIHRoZSAiIyIgb3IgIn0iLiAoTG9ydG9uKQorU29sdXRpb246ICAgQWRqdXN0IGFpX2NvbCBpbiBpbnNfdHJ5X3NpKCkuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNS42LjAwMgorUHJvYmxlbTogICAgV2hlbiB1c2luZyB0aGUgdmltLnZpbSBzeW50YXggZmlsZSwgYSBjb21tZW50IHdpdGggYWxsIHVwcGVyY2FzZQorCSAgICBjaGFyYWN0ZXJzIGNhdXNlcyBhIGhhbmcuCitTb2x1dGlvbjogICBBZGp1c3QgcGF0dGVybiBmb3IgdmltQ29tbWVudFRpdGxlIChDaGFybGVzIENhbXBiZWxsKQorRmlsZXM6CSAgICBydW50aW1lL3N5bnRheC92aW0udmltCisKK1BhdGNoIDUuNi4wMDMKK1Byb2JsZW06ICAgIEdUSyBHVUk6IExvYWRpbmcgYSB1c2VyIGRlZmluZWQgdG9vbGJhciBiaXRtYXAgZ2l2ZXMgYSB3YXJuaW5nCisJICAgIGFib3V0IHRoZSBjb2xvcm1hcC4gIFByb2JhYmx5IGJlY2F1c2UgdGhlIHdpbmRvdyBoYXMgbm90IGJlZW4KKwkgICAgb3BlbmVkIHlldC4KK1NvbHV0aW9uOiAgIFVzZSBnZGtfcGl4bWFwX2NvbG9ybWFwX2NyZWF0ZV9mcm9tX3hwbSgpIHRvIGNvbnZlcnQgdGhlIHhwbSBmaWxlLgorCSAgICAoS2VpdGggUmFkZWJhdWdoKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0ay5jCisKK1BhdGNoIDUuNi4wMDQgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJIHdpdGggSU1FOiBXaGVuIHNldHRpbmcgJ2d1aWZvbnQnIHRvICIqIiwgdGhlIGZvbnQKKwkgICAgcmVxdWVzdGVyIGFwcGVhcnMgdHdpY2UuCitTb2x1dGlvbjogICBJbiBndWlfbWNoX2luaXRfZm9udCgpIGRvbid0IGNhbGwgZ2V0X2xvZ2ZvbnQoKSBidXQgY29weQorCSAgICBub3JtX2xvZ2ZvbnQgZnJvbSBmaC4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjYuMDA1CitQcm9ibGVtOiAgICBXaGVuICd3aW5taW5oZWlnaHQnIGlzIHplcm8sIENUUkwtVyAtIHdpdGggYSBiaWcgbnVtYmVyIGNhdXNlcyBhCisJICAgIGNyYXNoLiAgKERhdmlkIEtvdGNoYW4pCitTb2x1dGlvbjogICBDaGVjayBmb3IgbmVnYXRpdmUgd2luZG93IGhlaWdodCBpbiB3aW5fc2V0aGVpZ2h0KCkuCitGaWxlczoJICAgIHNyYy93aW5kb3cuYworCitQYXRjaCA1LjYuMDA2CitQcm9ibGVtOiAgICBHVEsgR1VJOiBCb2xkIGZvbnQgY2Fubm90IGFsd2F5cyBiZSB1c2VkLiAgTWVtb3J5IGlzIGZyZWVkIHRvbworCSAgICBlYXJseSBpbiBndWlfbWNoX2luaXRfZm9udCgpLgorU29sdXRpb246ICAgTW92ZSBjYWxsIHRvIGdfZnJlZSgpIHRvIGFmdGVyIHdoZXJlIHNkdXAgaXMgdXNlZC4gKEFydGVtIEhvZHl1c2gpCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDUuNi4wMDcgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgSU1FOiBGb250IGlzIG5vdCBjaGFuZ2VkIHdoZW4gc2NyZWVuIGZvbnQgaXMgY2hhbmdlZC4gQW5kCisJICAgIElNRSBjb21wb3NpdGlvbiB3aW5kb3cgZG9lcyBub3QgdHJhY2UgdGhlIGN1cnNvci4KK1NvbHV0aW9uOiAgIEluaXRpYWxpemUgSU1FIGZvbnQuICBXaGVuIGN1cnNvciBpcyBtb3ZlZCwgc2V0IElNRSBjb21wb3NpdGlvbgorCSAgICB3aW5kb3cgd2l0aCBJbWVTZXRDb21wb3NpdGlvbldpbmRvdygpLiAgQWRkIGNhbGwgdG8KKwkgICAgSW1tUmVsZWFzZUNvbnRleHQoKSBpbiBzZXZlcmFsIHBsYWNlcy4gKFRhcm8gTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvcHJvdG8vZ3VpX3czMi5wcm8KKworUGF0Y2ggNS42LjAwOCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiB0d28gZmlsZXMgZXhpc3Qgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dCBkaWZmZXJlbnQgY2FzZQorCSAgICAodGhyb3VnaCBORlMgb3IgU2FtYmEpLCBmaXhpbmcgdGhlIGZpbGUgbmFtZSBjYXNlIGNvdWxkIGNhdXNlIHRoZQorCSAgICB3cm9uZyBvbmUgdG8gYmUgZWRpdGVkLgorU29sdXRpb246ICAgUHJlZmVyIGEgcGVyZmVjdCBtYXRjaCBhYm92ZSBhIG1hdGNoIHdoaWxlIGlnbm9yaW5nIGNhc2UgaW4KKwkgICAgZm5hbWVfY2FzZSgpLiAgKEZsZW1taW5nIE1hZHNlbikKK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNS42LjAwOSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IEdhcmJhZ2UgaW4gV2luZG93cyBFeHBsb3JlciBoZWxwIGxpbmUgd2hlbiBzZWxlY3RpbmcKKwkgICAgIkVkaXQgd2l0aCBWaW0iIHBvcHVwIG1lbnUgZW50cnkuCitTb2x1dGlvbjogICBPbmx5IHJldHVybiB0aGUgaGVscCBsaW5lIHdoZW4gY2FsbGVkIHdpdGggdGhlIEdDU19IRUxQVEVYVCBmbGFnLgorCSAgICAoVGlhbm1pYW8gSHUpCitGaWxlczoJICAgIEd2aW1FeHQvZ3ZpbWV4dC5jcHAKKworUGF0Y2ggNS42LjAxMAorUHJvYmxlbTogICAgQSBmaWxlIG5hbWUgd2hpY2ggY29udGFpbnMgYSBUQUIgd2FzIG5vdCByZWFkIGNvcnJlY3RseSBmcm9tIHRoZQorCSAgICB2aW1pbmZvIGZpbGUgYW5kIHRoZSAiOmxzIiBsaXN0aW5nIHdhcyBub3QgYWxpZ25lZCBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIFBhcnNlIHRoZSBidWZmZXIgbGlzdCBsaW5lcyBpbiB0aGUgdmltaW5mbyBmaWxlIGZyb20gdGhlIGVuZAorCSAgICBiYWNrd2FyZHMuICBDb3VudCBhIFRhYiBmb3IgdHdvIGNoYXJhY3RlcnMgdG8gYWxpZ24gdGhlICI6bHMiIGxpc3QuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA1LjYuMDExCitQcm9ibGVtOiAgICBXaGVuICdjb2x1bW5zJyBpcyBodWdlICh1c2luZyBhIHRpbnkgZm9udCkgYW5kICdzdGF0dXNsaW5lJyBpcworCSAgICB1c2VkLCBWaW0gY2FuIGNyYXNoLgorU29sdXRpb246ICAgTGltaXQgbWF4bGVuIHRvIE1BWFBBVEhMIGluIHdpbl9yZWRyX2N1c3RvbSgpLiAoSm9obiBNdWxsaW4pCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA1LjYuMDEyCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICJ6c2giIGZvciAvYmluL3NoLCB0b29sY2hlY2sgbWF5IGhhbmcgdW50aWwgImV4aXQiIGlzCisJICAgIHR5cGVkLiAoS3VyYXRjenlrKQorU29sdXRpb246ICAgQWRkICItYyBleGl0IiB3aGVuIGNoZWNraW5nIGZvciB0aGUgc2hlbGwgdmVyc2lvbi4KK0ZpbGVzOgkgICAgc3JjL3Rvb2xjaGVjaworCitQYXRjaCA1LjYuMDEzCitQcm9ibGVtOiAgICBNdWx0aWJ5dGUgY2hhciBpbiB0b29sdGlwIGlzIGJyb2tlbi4KK1NvbHV0aW9uOiAgIENvbnNpZGVyIG11bHRpYnl0ZSBjaGFyIGluIHJlcGxhY2VfdGVybWNvZGVzKCkuIChUYXJvIE11cmFva2EpCitGaWxlczogICAgICBzcmMvdGVybS5jCisKK1BhdGNoIDUuNi4wMTQKK1Byb2JsZW06ICAgIFdoZW4gY3Vyc29yIGlzIGF0IHRoZSBlbmQgb2YgbGluZSBhbmQgdGhlIGNoYXJhY3RlciB1bmRlciBjdXJzb3IKKwkgICAgaXMgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLCAieWwiIGRvZXNuJ3QgeWFuayAxIG11bHRpYnl0ZS1jaGFyLgorCSAgICAoVGFrdWhpcm8gTmlzaGlva2EpCitTb2x1dGlvbjogICBSZWNvZ25pemUgYSBtdWx0aWJ5dGUtY2hhciBhdCBlbmQtb2YtbGluZSBjb3JyZWN0bHkgaW4gb25lcmlnaHQoKS4KKwkgICAgKFRhcm8gTXVyYW9rYSkKKwkgICAgQWxzbzogbWFrZSAiK3F1aWNrZml4IiBpbiAiOnZlcnNpb24iIG91dHB1dCBhcHBlYXIgYWxwaGFiZXRpY2FsbHkuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNS42LjAxNQorUHJvYmxlbTogICAgTmV3IHh0ZXJtIGRlbGV0ZSBrZXkgc2VuZHMgPEVzYz5bM34gYnkgZGVmYXVsdC4KK1NvbHV0aW9uOiAgIEFkZGVkIDxrRGVsPiBhbmQgPGtJbnM+IHRvIG1ha2UgdGhlIHNldCBvZiBrZXlwYWQga2V5cyBjb21wbGV0ZS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9rZXltYXAuaCwgc3JjL21pc2MxLmMsCisJICAgIHNyYy9taXNjMi5jLCBzcmMvbm9ybWFsLmMsIHNyYy9vc191bml4LmMsIHNyYy90ZXJtLmMKKworUGF0Y2ggNS42LjAxNgorUHJvYmxlbTogICAgV2hlbiBkZWxldGluZyBhIHNlYXJjaCBzdHJpbmcgZnJvbSBoaXN0b3J5IGZyb20gaW5zaWRlIGEgbWFwcGluZywKKwkgICAgYW5vdGhlciBlbnRyeSBpcyBkZWxldGVkIHRvby4gKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIFJlc2V0IGxhc3RfbWFwdGljayB3aGVuIGRlbGV0aW5nIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBzZWFyY2gKKwkgICAgaGlzdG9yeS4gIEFsc286IEluY3JlbWVudCBtYXB0aWNrIHdoZW4gc3RhcnRpbmcgYSBtYXBwaW5nIGZyb20KKwkgICAgdHlwZWQgY2hhcmFjdGVycyB0byBhdm9pZCBhIGp1c3QgYWRkZWQgc2VhcmNoIHN0cmluZyBiZWluZworCSAgICBvdmVyd3JpdHRlbiBvciByZW1vdmVkIGZyb20gaGlzdG9yeS4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMsIHNyYy9nZXRjaGFyLmMKKworUGF0Y2ggNS42LjAxNworUHJvYmxlbTogICAgIjpzL2UvXF5NLyIgc2hvdWxkIHJlcGxhY2UgYW4gImUiIHdpdGggYSBDVFJMLU0sIG5vdCBzcGxpdCB0aGUKKwkgICAgbGluZS4gKENhbGRlcikKK1NvbHV0aW9uOiAgIFJlcGxhY2UgdGhlIGJhY2tzbGFzaCB3aXRoIGEgQ1RSTC1WIGludGVybmFsbHkuIChTdGVwaGVuIFAuIFdhbGwpCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNS42LjAxOAorUHJvYmxlbTogICAgIjpoZWxwIFs6ZGlnaXQ6XSIgdGFrZXMgYSBsb25nIHRpbWUgdG8ganVtcCB0byB0aGUgd3JvbmcgcGxhY2UuCitTb2x1dGlvbjogICBJbnNlcnQgYSBiYWNrc2xhc2ggdG8gYXZvaWQgdGhlIHNwZWNpYWwgbWVhbmluZyBvZiAnW10nLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDUuNi4wMTkKK1Byb2JsZW06ICAgICJzbmQuYyIsICJzbmQuamF2YSIsIGV0Yy4gd2VyZSByZWNvZ25pemVkIGFzICJtYWlsIiBmaWxldHlwZS4KK1NvbHV0aW9uOiAgIE1ha2UgcGF0dGVybiBmb3IgbWFpbCBmaWxldHlwZSBtb3JlIHN0cmljdC4KK0ZpbGVzOgkgICAgcnVudGltZS9maWxldHlwZS52aW0KKworUGF0Y2ggNS42LjAyMCAoZXh0cmEpCitQcm9ibGVtOiAgICBUaGUgREpHUFAgdmVyc2lvbiBlYXRzIHByb2Nlc3NvciB0aW1lIChXYWx0ZXIgQnJpc2NvZSkuCitTb2x1dGlvbjogICBDYWxsIF9fZHBtaV95aWVsZCgpIGluIHRoZSBidXN5LXdhaXQgbG9vcC4KK0ZpbGVzOgkgICAgc3JjL29zX21zZG9zLmMKKworUGF0Y2ggNS42LjAyMQorUHJvYmxlbTogICAgV2hlbiAnc2VsZWN0aW9uJyBpcyAiZXhjbHVzaXZlIiwgYSBkb3VibGUgbW91c2UgY2xpY2sgaW4gSW5zZXJ0CisJICAgIG1vZGUgZG9lc24ndCBzZWxlY3QgbGFzdCBjaGFyIGluIGxpbmUuIChMdXR6KQorU29sdXRpb246ICAgQWxsb3cgbGVhdmluZyB0aGUgY3Vyc29yIG9uIHRoZSBOVUwgcGFzdCB0aGUgbGluZSBpbiB0aGlzIGNhc2UuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNS42LjAyMgorUHJvYmxlbTogICAgIjplIFx+PFRhYj4iIGV4cGFuZHMgdG8gIjplIH5cJGNlZWxlbiIsIHdoaWNoIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIFJlLWluc2VydCB0aGUgYmFja3NsYXNoIGJlZm9yZSB0aGUgJ34nLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA1LjYuMDIzIChleHRyYSkKK1Byb2JsZW06ICAgIFZhcmlvdXMgd2FybmluZ3MgZm9yIHRoZSBNaW5nIGNvbXBpbGVyLgorU29sdXRpb246ICAgQ2hhbmdlcyB0byBhdm9pZCB0aGUgd2FybmluZ3MuIChCaWxsIE1jQ2FydGh5KQorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvb3NfdzMyZXhlLmMsIHNyYy9vc193aW4zMi5jLAorCSAgICBzcmMvc3ludGF4LmMsIHNyYy92aW0ucmMKKworUGF0Y2ggNS42LjAyNCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBjb25zb2xlOiBFbnRlcmluZyBDVFJMLV8gcmVxdWlyZXMgdGhlIHNoaWZ0IGtleS4gKEtvdGNoYW4pCitTb2x1dGlvbjogICBTcGVjaWZpY2FsbHkgY2F0Y2gga2V5Y29kZSAweEJELCBsaWtlIHRoZSBHVUkuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDUuNi4wMjUKK1Byb2JsZW06ICAgIEdUSyBHVUk6IFN0YXJ0aW5nIHRoZSBHVUkgY291bGQgYmUgaW50ZXJydXB0ZWQgYnkgYSBTSUdXSU5DSC4KKwkgICAgKE5pbHMgTG9obmVyKQorU29sdXRpb246ICAgUmVwZWF0IHRoZSByZWFkKCkgY2FsbCB0byBnZXQgdGhlIGd1aV9pbl91c2UgdmFsdWUgd2hlbgorCSAgICBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDUuNi4wMjYgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJOiBUb29sYmFyIGJpdG1hcHMgYXJlIHNlYXJjaGVkIGZvciBpbgorCSAgICAkVklNUlVOVElNRS9iaXRtYXBzLCB3aGlsZSBHVEsgbG9va3MgaW4gJFZJTS9iaXRtYXBzLiAoS2VpdGgKKwkgICAgUmFkZWJhdWdoKQorU29sdXRpb246ICAgVXNlICRWSU0vYml0bWFwcyBmb3IgYm90aCwgYmVjYXVzZSB0aGVzZSBhcmUgbm90IHBhcnQgb2YgdGhlCisJICAgIGRpc3RyaWJ1dGlvbiBidXQgZGVmaW5lZCBieSB0aGUgdXNlci4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYywgcnVudGltZS9kb2MvZ3VpLnR4dAorCitQYXRjaCA1LjYuMDI3CitQcm9ibGVtOiAgICBUQ0w6IENyYXNoIHdoZW4gdXNpbmcgYSBUY2wgc2NyaXB0IChyZXBvcnRlZCBmb3IgV2luMzIpLgorU29sdXRpb246ICAgQ2FsbCBUY2xfRmluZEV4ZWN1dGFibGUoKSBpbiBtYWluKCkuIChCcmVudCBGdWxnaGFtKQorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDUuNi4wMjgKK1Byb2JsZW06ICAgIFh0ZXJtIHBhdGNoIGxldmVsIDEyNiBzZW5kcyBjb2RlcyBmb3IgbW91c2Ugc2Nyb2xsIHdoZWVsLgorCSAgICBGdWxseSB3b3JrcyB3aXRoIHh0ZXJtIHBhdGNoIGxldmVsIDEzMS4KK1NvbHV0aW9uOiAgIFJlY29nbml6ZSB0aGUgY29kZXMgZm9yIGJ1dHRvbiA0ICgweDYwKSBhbmQgYnV0dG9uIDUgKDB4NjEpLgorRmlsZXM6CSAgICBzcmMvdGVybS5jCisKK1BhdGNoIDUuNi4wMjkKK1Byb2JsZW06ICAgIEdUSyBHVUk6IFNob3J0Y3V0IGtleXMgY2Fubm90IGJlIHVzZWQgZm9yIGEgZGlhbG9nLiAoSm9oYW5uZXMKKwkgICAgWmVsbG5lcikKK1NvbHV0aW9uOiAgIEFkZCBzdXBwb3J0IGZvciBzaG9ydGN1dCBrZXlzLiAoTWFyY2luIERhbGVja2kpCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMKKworUGF0Y2ggNS42LjAzMAorUHJvYmxlbTogICAgV2hlbiBjbG9zaW5nIGEgd2luZG93IGFuZCAnZWEnIGlzIHNldCwgVmltIGNhbiBjcmFzaC4gKFlhc3VoaXJvCisJICAgIE1hdHN1bW90bykKK1NvbHV0aW9uOiAgIFNldCAiY3VyYnVmIiB0byBhIHZhbGlkIHZhbHVlIGluIHdpbl9jbG9zZSgpLgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNS42LjAzMQorUHJvYmxlbTogICAgTXVsdGktYnl0ZTogV2hlbiBhIGRvdWJsZS1ieXRlIGNoYXJhY3RlciBlbmRzIGluIENTSSwgVmltIHdhaXRzCisJICAgIGZvciBhbm90aGVyIGNoYXJhY3RlciB0byBiZSB0eXBlZC4KK1NvbHV0aW9uOiAgIFJlY29nbml6ZSB0aGUgQ1NJIGFzIHRoZSBzZWNvbmQgYnl0ZSBvZiBhIGNoYXJhY3RlciBhbmQgZG9uJ3Qgd2FpdAorCSAgICBmb3IgYW5vdGhlciBvbmUuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMKKworUGF0Y2ggNS42LjAzMgorUHJvYmxlbTogICAgRnVuY3Rpb25zIHdpdGggYW4gYXJndW1lbnQgdGhhdCBpcyBhIGxpbmUgbnVtYmVyIGRvbid0IGFsbCBhY2NlcHQKKwkgICAgIi4iLCAiJCIsIGV0Yy4gKFJhbGYgQXJlbnMpCitTb2x1dGlvbjogICBBZGQgZ2V0X2FydF9sbnVtKCkgYW5kIHVzZSBpdCBmb3Igc2V0bGluZSgpLCBsaW5lMmJ5dGUoKSBhbmQKKwkgICAgc3luSUQoKS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA1LjYuMDMzCitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiAiZiAiIHNvbWV0aW1lcyBza2lwcyB0byB0aGUgc2Vjb25kIHNwYWNlLiAgKFN1bmctSHl1bgorCSAgICBOYW0pCitTb2x1dGlvbjogICBDaGFuZ2UgbG9naWMgaW4gc2VhcmNoYygpIHRvIHNraXAgdHJhaWxpbmcgYnl0ZSBvZiBhIGRvdWJsZS1ieXRlCisJICAgIGNoYXJhY3Rlci4KKwkgICAgQWxzbzogQXNrIGZvciBzZWNvbmQgYnl0ZSB3aGVuIHNlYXJjaGluZyBmb3IgZG91YmxlLWJ5dGUKKwkgICAgY2hhcmFjdGVyLiAoUGFyayBDaG9uZy1EYWUpCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA1LjYuMDM0IChleHRyYSkKK1Byb2JsZW06ICAgIENvbXBpbGluZyB3aXRoIEJvcmxhbmQgQysrIDUuNSBmYWlscyBvbiB0b2xvd2VyKCkgYW5kIHRvdXBwZXIoKS4KK1NvbHV0aW9uOiAgIFVzZSBUT19MT1dFUigpIGFuZCBUT19VUFBFUigpIGluc3RlYWQuICBBbHNvIGFkanVzdCB0aGUgTWFrZWZpbGUKKwkgICAgdG8gbWFrZSB1c2luZyBiY2MgNS41IGVhc2llci4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9taXNjMS5jLCBzcmMvTWFrZWZpbGUuYm9yCisKK1BhdGNoIDUuNi4wMzUKK1Byb2JsZW06ICAgIExpc3RpbmcgdGhlIitjb21tZW50cyIgZmVhdHVyZSBpbiB0aGUgIjp2ZXJzaW9uIiBvdXRwdXQgZGVwZW5kZWQKKwkgICAgb24gdGhlIHdyb25nIElELiAoU3RlcGhlbiBQLiBXYWxsKQorU29sdXRpb246ICAgQ2hhbmdlICJDUllQVFYiIHRvICJDT01NRU5UUyIuCitGaWxlczoJICAgIHNyYy92ZXJzaW9uLmMKKworUGF0Y2ggNS42LjAzNgorUHJvYmxlbTogICAgR1RLIEdVSTogQ29weS9wYXN0ZSB0ZXh0IGRvZXNuJ3Qgd29yayBiZXR3ZWVuIGd2aW0gYW5kIEV0ZXJtLgorU29sdXRpb246ICAgU3VwcG9ydCBURVhUIGFuZCBDT01QT1VORF9URVhUIHNlbGVjdGlvbiB0YXJnZXRzLiAoQ2hpRGVvayBId2FuZykKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNS42LjAzNworUHJvYmxlbTogICAgTXVsdGktYnl0ZTogQ2FuJ3QgdXNlICJmIiBjb21tYW5kIHdpdGggbXVsdGktYnl0ZSBjaGFyYWN0ZXIgaW4gR1VJLgorU29sdXRpb246ICAgRW5hYmxlIFhJTSBpbiBOb3JtYWwgbW9kZSBmb3IgdGhlIEdVSS4gKFN1bmctSHl1biBOYW0pCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvbXVsdGJ5dGUuYworCitQYXRjaCA1LjYuMDM4CitQcm9ibGVtOiAgICBNdWx0aS1jbGlja3MgaW4gR1VJIGFyZSBpbnRlcnByZXRlZCBhcyBhIG1vdXNlIHdoZWVsIGNsaWNrLiAgV2hlbgorCSAgICAndHR5bW91c2UnIGlzICJ4dGVybSIgYSBtb3VzZSBjbGljayBpcyBpbnRlcnByZXRlZCBhcyBhIG1vdXNlCisJICAgIHdoZWVsIGNsaWNrLgorU29sdXRpb246ICAgRG9uJ3QgcmVjb2duaXplIHRoZSBtb3VzZSB3aGVlbCBpbiBjaGVja190ZXJtY29kZSgpIGluIHRoZSBHVUkuCisJICAgIFVzZSAweDQzIGZvciBhIG1vdXNlIGRyYWcgaW4gZG9feHRlcm1fdHJhY2UoKSwgbm90IDB4NjMuCitGaWxlczoJICAgIHNyYy90ZXJtLmMsIHNyYy9vc191bml4LmMKKworUGF0Y2ggNS42LjAzOQorUHJvYmxlbTogICAgTW90aWYgR1VJIHVuZGVyIEtERTogV2hlbiB0cnlpbmcgdG8gbG9nb3V0LCBWaW0gaGFuZ3MgdXAgdGhlCisJICAgIHN5c3RlbS4gKEhlcm1hbm4gUm9jaGhvbHopCitTb2x1dGlvbjogICBXaGVuIGhhbmRsaW5nIHRoZSBXTV9TQVZFX1lPVVJTRUxGIGV2ZW50LCBzZXQgdGhlIFdNX0NPTU1BTkQKKwkgICAgcHJvcGVydHkgb2YgdGhlIHdpbmRvdyB0byBsZXQgdGhlIHNlc3Npb24gbWFuYWdlciBrbm93IHdlIGZpbmlzaGVkCisJICAgIHNhdmluZyBvdXJzZWx2ZXMuCitGaWxlczoJICAgIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNS42LjA0MAorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOnMiIGNvbW1hbmQsIG1hdGNoaW5nIHRoZSByZWdleHAgaXMgZG9uZSB0d2ljZS4KK1NvbHV0aW9uOiAgIEFmdGVyIGNvcHlpbmcgdGhlIG1hdGNoZWQgbGluZSwgYWRqdXN0IHRoZSBwb2ludGVycyBpbnN0ZWFkIG9mCisJICAgIGZpbmRpbmcgdGhlIG1hdGNoIGFnYWluLiAoTG9pYyBHcmVuaWUpICBBZGRlZCB2aW1fcmVnbmV3cHRyKCkuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9yZWdleHAuYywgc3JjL3Byb3RvL3JlZ2V4cC5wcm8KKworUGF0Y2ggNS42LjA0MQorUHJvYmxlbTogICAgR1VJOiBBdGhlbmEsIE1vdGlmIGFuZCBHVEsgZG9uJ3QgZ2l2ZSBtb3JlIHRoYW4gMTAgZGlhbG9nIGJ1dHRvbnMuCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgYnV0dG9ucy4KKwkgICAgQWxzbyBzdXBwb3J0IHRoZSAndicgZmxhZyBpbiAnZ3Vpb3B0aW9ucycuCisJICAgIEZvciBHVEs6IENlbnRlciB0aGUgYnV0dG9ucy4KK0ZpbGVzOgkgICAgc3JjL2d1aV9hdGhlbmEuYywgc3JjL2d1aV9ndGsuYywgc3JjL2d1aV9tb3RpZi5jCisKK1BhdGNoIDUuNi4wNDIKK1Byb2JsZW06ICAgIFdoZW4gZG9pbmcgInZpbSAtdSB2aW1yYyIgYW5kIHZpbXJjIGNvbnRhaW5zICI6cSIsIHRoZSBjdXJzb3IgaW4KKwkgICAgdGhlIHRlcm1pbmFsIGNhbiByZW1haW4gb2ZmLgorU29sdXRpb246ICAgQ2FsbCBjdXJzb3Jfb24oKSBpbiBtY2hfd2luZGV4aXQoKS4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA1LjYuMDQzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogV2hlbiBzZWxlY3RpbmcgZ3VpZm9udCB3aXRoIHRoZSBkaWFsb2csICdndWlmb250JworCSAgICBkb2Vzbid0IGluY2x1ZGUgdGhlIGJvbGQgb3IgaXRhbGljIGF0dHJpYnV0ZXMuCitTb2x1dGlvbjogICBBcHBlbmQgIjppIiBhbmQvb3IgIjpiIiB0byAnZ3VpZm9udCcgaW4gZ3VpX21jaF9pbml0X2ZvbnQoKS4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjYuMDQ0IChleHRyYSkKK1Byb2JsZW06ICAgIE1TLURPUyBhbmQgV2luZG93czogVGhlIGxpbmUgdGhhdCBkb3NpbnN0LmV4ZSBhcHBlbmRzIHRvCisJICAgIGF1dG9leGVjLmJhdCB0byBzZXQgUEFUSCBpcyB3cm9uZyB3aGVuIFZpbSBpcyBpbiBhIGRpcmVjdG9yeSB3aXRoCisJICAgIGFuIGVtYmVkZGVkIHNwYWNlLgorU29sdXRpb246ICAgVXNlIGRvdWJsZSBxdW90ZXMgZm9yIHRoZSB2YWx1ZSB3aGVuIHRoZXJlIGlzIGFuIGVtYmVkZGVkIHNwYWNlLgorRmlsZXM6CSAgICBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDUuNi4wNDUgKGV4dHJhKSAoZml4ZWQgdmVyc2lvbikKK1Byb2JsZW06ICAgIFZNUzogVmFyaW91cyBzbWFsbCBwcm9ibGVtcy4KK1NvbHV0aW9uOiAgIE1hbnkgc21hbGwgY2hhbmdlcy4gKFpvbHRhbiBBcnBhZGZmeSkKKwkgICAgRmlsZSBuYW1lIG1vZGlmaWVyICI6aCIga2VlcHMgdGhlIHBhdGggc2VwYXJhdG9yLgorCSAgICBGaWxlIG5hbWUgbW9kaWZpZXIgIjplIiBhbHNvIHJlbW92ZXMgdmVyc2lvbi4KKwkgICAgQ29tcGlsZSB3aXRoIE1BWF9GRUFUIGJ5IGRlZmF1bHQuCisJICAgIFdoZW4gY2hlY2tpbmcgZm9yIGF1dG9jb21tYW5kcyBpZ25vcmUgdmVyc2lvbiBpbiBmaWxlIG5hbWUuCisJICAgIEJlIGF3YXJlIG9mIGZpbGUgbmFtZXMgYmVpbmcgY2FzZSBpbnNlbnNpdGl2ZS4KKwkgICAgQWRkZWQgdnQzMjAgYnVpbHRpbiB0ZXJtY2FwLgorCSAgICBCZSBwcmVwYXJlZCBmb3IgYW4gZW1wdHkgZGVmYXVsdF92aW1fZGlyLgorRmlsZXM6CSAgICBydW50aW1lL2d2aW1yY19leGFtcGxlLnZpbSwgcnVudGltZS92aW1yY19leGFtcGxlLnZpbSwKKwkgICAgcnVudGltZS9kb2Mvb3Nfdm1zLnR4dCwgc3JjL2V2YWwuYywgc3JjL2ZlYXR1cmUuaCwgc3JjL2ZpbGVpby5jLAorCSAgICBzcmMvZ3VpX21vdGlmLmMsIHNyYy9ndWlfdm1zX2NvbmYuaCwgc3JjL21haW4uYywgc3JjL21lbWxpbmUuYywKKwkgICAgc3JjL21pc2MxLmMsIHNyYy9vcHRpb24uYywgc3JjL29zX3Ztc19jb25mLmgsIHNyYy9vc192bXMuYywKKwkgICAgc3JjL29zX3Ztcy5oLCBzcmMvb3Nfdm1zLm1tcywgc3JjL3RhZy5jLCBzcmMvdGVybS5jLCBzcmMvdmVyc2lvbi5jCisKK1BhdGNoIDUuNi4wNDYKK1Byb2JsZW06ICAgIFN5c3RlbXMgd2l0aCBiYWNrc2xhc2ggaW4gZmlsZSBuYW1lOiBXaXRoICdzaGVsbHNsYXNoJyBzZXQsICJ2aW0KKwkgICAgKi8qLmMiIG9ubHkgdXNlcyBhIHNsYXNoIGZvciB0aGUgZmlyc3QgZmlsZSBuYW1lLiAgKEhhcidFbCkKK1NvbHV0aW9uOiAgIEZpeCBzbGFzaGVzIGluIGZpbGUgbmFtZSBhcmd1bWVudHMgYWZ0ZXIgcmVhZGluZyB0aGUgdmltcmMgZmlsZS4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDUuNi4wNDcKK1Byb2JsZW06ICAgICRDUFBGTEFHUyBpcyBub3QgcGFzc2VkIG9uIHRvIGN0YWdzIGNvbmZpZ3VyZS4KK1NvbHV0aW9uOiAgIEFkZCBpdC4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBzcmMvY29uZmlnLm1rLmluLCBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNS42LjA0OAorUHJvYmxlbTogICAgQ1RSTC1SIGluIENvbW1hbmQtbGluZSBtb2RlIGlzIGRvY3VtZW50ZWQgdG8gaW5zZXJ0IHRleHQgYXMgdHlwZWQsCisJICAgIGJ1dCBpbnNlcnRzIHRleHQgbGl0ZXJhbGx5LgorU29sdXRpb246ICAgTWFrZSBDVFJMLVIgaW5zZXJ0IHRleHQgYXMgdHlwZWQsIHVzZSBDVFJMLVIgQ1RSTC1SIHRvIGluc2VydAorCSAgICBsaXRlcmFsbHkuICBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBJbnNlcnQgbW9kZS4gIEJ1dCBjaGFyYWN0ZXJzCisJICAgIHRoYXQgZW5kIENvbW1hbmQtbGluZSBtb2RlIGFyZSBpbnNlcnRlZCBsaXRlcmFsbHkuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2luZGV4LnR4dCwgcnVudGltZS9kb2MvY21kbGluZS50eHQsIHNyYy9leF9nZXRsbi5jLAorCSAgICBzcmMvb3BzLmMsIHNyYy9wcm90by9vcHMucHJvCisKK1BhdGNoIDUuNi4wNDkKK1Byb2JsZW06ICAgIERvY3VtZW50YXRpb24gZm9yIFshXSBhZnRlciAiOmlqdW1wIiBpcyB3cm9uZyB3YXkgYXJvdW5kLiAoQmVuamkKKwkgICAgRmlzaGVyKQorU29sdXRpb246ICAgRml4IHRoZSBkb2N1bWVudGF0aW9uLiAgQWxzbyBpbXByb3ZlIHRoZSBjb2RlIHRvIGNoZWNrIGZvciBhIG1hdGNoCisJICAgIGFmdGVyIGEgLyogKi8gY29tbWVudC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvdGFnc2VhcmNoLnR4dCwgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDUuNi4wNTAKK1Byb2JsZW06ICAgIFJlcGxhY2luZyBpcyB3cm9uZyB3aGVuIHJlcGxhY2luZyBhIHNpbmdsZS1ieXRlIGNoYXIgd2l0aAorCSAgICBkb3VibGUtYnl0ZSBjaGFyIG9yIHRoZSBvdGhlciB3YXkgYXJvdW5kLgorU29sdXRpb246ICAgU2hpZnQgdGhlIHRleHQgYWZ0ZXIgdGhlIGNoYXJhY3RlciB3aGVuIGl0IGlzIHJlcGxhY2VkLgorCSAgICAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHNyYy9taXNjMS5jCisKK1BhdGNoIDUuNi4wNTEKK1Byb2JsZW06ICAgICI6dHByZXYiIGFuZCAiOnRuZXh0IiBkb24ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8KKwkgICAgZ28gYmVmb3JlIHRoZSBmaXJzdCBvciBiZXlvbmQgdGhlIGxhc3QgdGFnLiAoUm9iZXJ0IFdlYmIpCitTb2x1dGlvbjogICBBZGRlZCBlcnJvciBtZXNzYWdlcy4gIEFsc286IERlbGF5IGEgc2Vjb25kIHdoZW4gYSBmaWxlLXJlYWQKKwkgICAgbWVzc2FnZSBpcyBnb2luZyB0byBvdmVyd3JpdGUgYW4gZXJyb3IgbWVzc2FnZSwgb3RoZXJ3aXNlIGl0IHdvbid0CisJICAgIGJlIHNlZW4uCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL3RhZy5jCisKK1BhdGNoIDUuNi4wNTIKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6IFdoZW4gYW4gRXggY29tbWFuZCBoYXMgYSAnfCcgb3IgJyInIGFzIGEgc2Vjb25kIGJ5dGUsCisJICAgIGl0IHRlcm1pbmF0ZXMgdGhlIGNvbW1hbmQuCitTb2x1dGlvbjogICBTa2lwIHNlY29uZCBieXRlIG9mIG11bHRpLWJ5dGUgY2hhciB3aGVuIGNoZWNraW5nIGZvciAnfCcgYW5kICciJy4KKwkgICAgKEFzYWkgS2VuaWNoaSkKK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNS42LjA1MworUHJvYmxlbTogICAgQ1RSTC1dIGRvZXNuJ3Qgd29yayBvbiBhIHRhZyB0aGF0IGNvbnRhaW5zIGEgJ3wnLiAoQ2VzYXIgQ3J1c2l1cykKK1NvbHV0aW9uOiAgIEVzY2FwZSAnfCcsICciJyBhbmQgJ1wnIGluIHRhZyBuYW1lcyB3aGVuIHVzaW5nIENUUkwtXSBhbmQgYWxzbworCSAgICBmb3IgY29tbWFuZC1saW5lIGNvbXBsZXRpb24uCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jLCBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNS42LjA1NAorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOmUiIGFuZCAiOmUgIyIgdGhlIGN1cnNvciBpcyBwdXQgaW4gdGhlIGZpcnN0IGNvbHVtbgorCSAgICB3aGVuICdzdGFydG9mbGluZScgaXMgc2V0LiAoQ29yZGVsbCkKK1NvbHV0aW9uOiAgIFVzZSB0aGUgbGFzdCBrbm93biBjb2x1bW4gd2hlbiAnc3RhcnRvZmxpbmUnIGlzIHNldC4KKwkgICAgQWxzbywgdXNlIEVDTURfTEFTVCBtb3JlIG9mdGVuIHRvIHNpbXBsaWZ5IHRoZSBjb2RlLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9leF9jbWRzLmMsIHNyYy9leF9kb2NtZC5jLCBzcmMvcHJvdG8vYnVmZmVyLnBybworCitQYXRjaCA1LjYuMDU1CitQcm9ibGVtOiAgICBXaGVuICdzdGF0dXNsaW5lJyBvbmx5IGNvbnRhaW5zIGEgdGV4dCB3aXRob3V0ICIlIiBhbmQgZG9lc24ndCBmaXQKKwkgICAgaW4gdGhlIHdpbmRvdywgVmltIGNyYXNoZXMuIChSb24gQWFyb24pCitTb2x1dGlvbjogICBEb24ndCB1c2UgdGhlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBpdGVtIGlmIHRoZXJlIGlzIG5vIGl0ZW0uCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA1LjYuMDU2IChleHRyYSkKK1Byb2JsZW06ICAgIE1TLURPUzogRjExIGFuZCBGMTIgZG9uJ3Qgd29yayB3aGVuICdiaW9za2V5JyBpcyBzZXQuCitTb2x1dGlvbjogICBVc2UgZW5oYW5jZWQga2V5Ym9hcmQgZnVuY3Rpb25zLiAoVmluY2UgTmVncmkpCisJICAgIERldGVjdCBwcmVzZW5jZSBvZiBlbmhhbmNlZCBrZXlib2FyZCBhbmQgc2V0IGJpb3NrZXlfcmVhZCBhbmQKKwkgICAgYmlvc2tleV9yZWFkeS4KK0ZpbGVzOgkgICAgc3JjL29zX21zZG9zLmMKKworUGF0Y2ggNS42LjA1NyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IE11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUgd3JvbmcgaW4gZGlhbG9ncyBhbmQgdGVhci1vZmYKKwkgICAgbWVudXMuCitTb2x1dGlvbjogICBVc2Ugc3lzdGVtIGZvbnQgaW5zdGVhZCBvZiBhIGZpeGVkIGZvbnQuIChNYXRzdW1vdG8sIE11cmFva2EpCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNS42LjA1OAorUHJvYmxlbTogICAgV2hlbiB0aGUgJ2EnIGZsYWcgaXMgbm90IGluICdndWlvcHRpb25zJywgbm9uLVdpbmRvd3Mgc3lzdGVtcworCSAgICBjb3B5IFZpc3VhbGx5IHNlbGVjdGVkIHRleHQgdG8gdGhlIGNsaXBib2FyZC9zZWxlY3Rpb24gb24gYSB5YW5rCisJICAgIG9yIGRlbGV0ZSBjb21tYW5kIGFueXdheS4gIE9uIFdpbmRvd3MgaXQgaXNuJ3QgZG9uZSBldmVuIHdoZW4gdGhlCisJICAgICdhJyBmbGFnIGlzIGluY2x1ZGVkLgorU29sdXRpb246ICAgUmVzcGVjdCB0aGUgJ2EnIGZsYWcgaW4gJ2d1aW9wdGlvbnMnIG9uIGFsbCBzeXN0ZW1zLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNS42LjA1OSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaGVuIG1vdmluZyB0aGUgY3Vyc29yIG92ZXIgaXRhbGljIHRleHQgYW5kIHRoZSBjaGFyYWN0ZXJzIHNwaWxsCisJICAgIG92ZXIgdG8gdGhlIGNlbGwgb24gdGhlIHJpZ2h0LCB0aGF0IHNwaWxsLW92ZXIgaXMgZGVsZXRlZC4KKwkgICAgTm90aWNlZCBpbiB0aGUgV2luMzIgR1VJLCBjYW4gaGFwcGVuIG9uIG90aGVyIHN5c3RlbXMgdG9vLgorU29sdXRpb246ICAgUmVkcmF3IGl0YWxpYyB0ZXh0IHN0YXJ0aW5nIGZyb20gYSBibGFuaywgbGlrZSB0aGlzIGlzIGFscmVhZHkKKwkgICAgZG9uZSBmb3IgYm9sZCB0ZXh0LiAoVmluY2UgTmVncmkpCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL2d1aS5oLCBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNi4wNjAKK1Byb2JsZW06ICAgIFNvbWUgYm9sZCBjaGFyYWN0ZXJzIHNwaWxsIG92ZXIgdG8gdGhlIGNlbGwgb24gdGhlIGxlZnQsIHRoYXQKKwkgICAgc3BpbGwtb3ZlciBjYW4gcmVtYWluIHNvbWV0aW1lcy4KK1NvbHV0aW9uOiAgIFJlZHJhdyBhIGNoYXJhY3RlcnMgd2hlbiB0aGUgbmV4dCBjaGFyYWN0ZXIgd2FzIGJvbGQgYW5kIG5lZWRzCisJICAgIHJlZHJhd2luZy4gKFJvYmVydCBXZWJiKQorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNS42LjA2MQorUHJvYmxlbTogICAgV2hlbiB4dGVybSBzZW5kcyA4LWJpdCBjb250cm9scywgcmVjb2duaXppbmcgdGhlIHZlcnNpb24gcmVzcG9uc2UKKwkgICAgZG9lc24ndCB3b3JrLgorCSAgICBXaGVuIHVzaW5nIENTSSBpbnN0ZWFkIG9mIDxFc2M+WyBmb3IgdGhlIHRlcm1jYXAgY29sb3IgY29kZXMsCisJICAgIHVzaW5nIDE2IGNvbG9ycyBkb2Vzbid0IHdvcmsuIChOZWlsIEJpcmQpCitTb2x1dGlvbjogICBBbHNvIGFjY2VwdCBDU0kgaW4gcGxhY2Ugb2YgPEVzYz5bIGZvciB0aGUgdmVyc2lvbiBzdHJpbmcuCisJICAgIEFsc28gY2hlY2sgZm9yIENTSSB3aGVuIGhhbmRsaW5nIGNvbG9ycyA4LTE1IGluIHRlcm1fY29sb3IoKS4KKwkgICAgVXNlIENTSSBmb3IgYnVpbHRpbiB4dGVybSB0ZXJtY2FwIGVudHJpZXMgd2hlbiAndGVybScgY29udGFpbnMKKwkgICAgIjhiaXQiLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy90ZXJtLnR4dCwgc3JjL2V4X2NtZHMuYywgc3JjL29wdGlvbi5jLCBzcmMvdGVybS5jLAorCSAgICBzcmMvb3NfdW5peC5jLCBzcmMvcHJvdG8vb3B0aW9uLnBybywgc3JjL3Byb3RvL3Rlcm0ucHJvCisKK1BhdGNoIDUuNi4wNjIKK1Byb2JsZW06ICAgIFRoZSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCBzZXR0aW5nICdzbWFydGluZGVudCcgZG9lc24ndCBoYXZlIGFuCisJICAgIGVmZmVjdCB3aGVuICdjaW5kZW50JyBpcyBzZXQsIGJ1dCBpdCBkb2VzIG1ha2UgYSBkaWZmZXJlbmNlIGZvcgorCSAgICBsaW5lcyBzdGFydGluZyB3aXRoICIjIi4gKE5laWwgQmlyZCkKK1NvbHV0aW9uOiAgIFJlYWxseSBpZ25vcmUgJ3NtYXJ0aW5kZW50JyB3aGVuICdjaW5kZW50JyBpcyBzZXQuCitGaWxlczoJICAgIHNyYy9taXNjMS5jLCBzcmMvb3BzLmMKKworUGF0Y2ggNS42LjA2MworUHJvYmxlbTogICAgVXNpbmcgIkkiIGluIFZpc3VhbC1ibG9jayBtb2RlIGRvZXNuJ3QgYWNjZXB0IGEgY291bnQuIChKb2hhbm5lcworCSAgICBaZWxsbmVyKQorU29sdXRpb246ICAgUGFzcyB0aGUgY291bnQgb24gdG8gZG9faW5zZXJ0KCkgYW5kIGVkaXQoKS4gKEFsbGFuIEtlbGx5KQorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHNyYy9vcHMuYywgc3JjL3Byb3RvL29wcy5wcm8KKworUGF0Y2ggNS42LjA2NAorUHJvYmxlbTogICAgTVMtRE9TIGFuZCBXaW4zMiBjb25zb2xlOiBNb3VzZSBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGFmdGVyCisJICAgIGluY2x1ZGluZyBwYXRjaCA1LjYuMjguIChWaW5jZSBOZWdyaSkKK1NvbHV0aW9uOiAgIERvbid0IGNoZWNrIGZvciBtb3VzZSBzY3JvbGwgd2hlZWwgd2hlbiB0aGUgbW91c2UgY29kZSBjb250YWlucworCSAgICB0aGUgbnVtYmVyIG9mIGNsaWNrcy4KK0ZpbGVzOgkgICAgc3JjL3Rlcm0uYworCitQYXRjaCA1LjYuMDY1CitQcm9ibGVtOiAgICBBZnRlciBtb3ZpbmcgdGhlIGN1cnNvciBhcm91bmQgaW4gSW5zZXJ0IG1vZGUsIHR5cGluZyBhIHNwYWNlIGNhbgorCSAgICBzdGlsbCB0cmlnZ2VyIGFuIGFiYnJldmlhdGlvbi4gKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIERvbid0IGNoZWNrIGZvciBhbiBhYmJyZXZpYXRpb24gYWZ0ZXIgbW92aW5nIGFyb3VuZCBpbiBJbnNlcnQgbW9kZS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA1LjYuMDY2CitQcm9ibGVtOiAgICBTdGlsbCBhIGZldyBib2xkIGNoYXJhY3RlciBzcGlsbC1vdmVyIHJlbWFpbnMgYWZ0ZXIgcGF0Y2ggNjAuCitTb2x1dGlvbjogICBDbGVhciBjaGFyYWN0ZXIganVzdCBpbiBmcm9udCBvZiBibGFua2luZyBvdXQgcmVzdCBvZiB0aGUgbGluZS4KKwkgICAgKFJvYmVydCBXZWJiKQorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNS42LjA2NworUHJvYmxlbTogICAgV2hlbiBhIGZpbGUgbmFtZSBjb250YWlucyBhIE5MLCB0aGUgdmltaW5mbyBmaWxlIGlzIGNvcnJ1cHRlZC4KK1NvbHV0aW9uOiAgIFVzZSB2aW1pbmZvX3dyaXRlc3RyaW5nKCkgdG8gY29udmVydCB0aGUgTkwgdG8gQ1RSTC1WIG4uCisJICAgIEFsc28gZml4IHRoZSBCdWZmZXJzIG1lbnUgYW5kIGxpc3RpbmcgYSBtZW51IG5hbWUgd2l0aCBhIG5ld2xpbmUuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0sIHNyYy9idWZmZXIuYywgc3JjL21hcmsuYywgc3JjL21lbnUuYworCitQYXRjaCA1LjYuMDY4CitQcm9ibGVtOiAgICBDb21waWxpbmcgdGhlIFBlcmwgaW50ZXJmYWNlIGRvZXNuJ3Qgd29yayB3aXRoIFBlcmwgNS42LjAuCisJICAgIChCZXJuaGFyZCBSb3NlbmtyYWVuemVyKQorU29sdXRpb246ICAgQWxzbyBjaGVjayB4c19hcGl2ZXJzaW9uIGZvciB0aGUgdmVyc2lvbiBudW1iZXIgd2hlbiBwcmVwZW5kaW5nCisJICAgIGRlZmluZXMgZm9yIFBMXyouCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA1LjYuMDY5CitQcm9ibGVtOiAgICAiZ28iIGRvZXNuJ3QgYWx3YXlzIGVuZCB1cCBhdCB0aGUgcmlnaHQgY2hhcmFjdGVyIHdoZW4KKwkgICAgJ2ZpbGVmb3JtYXQnIGlzICJkb3MiLiAoQnJ1Y2UgRGVWaXNzZXIpCitTb2x1dGlvbjogICBDb3JyZWN0IGNvbXB1dGF0aW9ucyBpbiBtbF9maW5kX2xpbmVfb3Jfb2Zmc2V0KCkuCitGaWxlczoJICAgIHNyYy9tZW1saW5lLgorCitQYXRjaCA1LjYuMDcwIChkZXBlbmRzIG9uIDUuNi4wNjgpCitQcm9ibGVtOiAgICBDb21waWxpbmcgdGhlIFBlcmwgaW50ZXJmYWNlIGRvZXNuJ3Qgd29yayB3aXRoIFBlcmwgNS42LjAuCisJICAgIChCZXJuaGFyZCBSb3NlbmtyYWVuemVyKQorU29sdXRpb246ICAgU2ltcGxlciBjaGVjayBpbnN0ZWFkIG9mIHRoZSBvbmUgZnJvbSBwYXRjaCA2OC4KK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDUuNi4wNzEKK1Byb2JsZW06ICAgICJBIiBpbiBWaXN1YWwgYmxvY2sgbW9kZSBvbiBhIFRhYiBwb3NpdGlvbnMgdGhlIGN1cnNvciBvbmUgY2hhciB0bworCSAgICB0aGUgcmlnaHQuIChNaWNoYWVsIEhhdW1hbm4pCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSBjb2x1bW4gY29tcHV0YXRpb24gaW4gb3BfaW5zZXJ0KCkuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA1LjYuMDcyCitQcm9ibGVtOiAgICBXaGVuIHN0YXJ0aW5nIFZpbSB3aXRoICJ2aW0gK3N0YXJ0aW5zZXJ0IiwgaXQgZW50ZXJzIEluc2VydCBtb2RlCisJICAgIG9ubHkgYWZ0ZXIgdHlwaW5nIHRoZSBmaXJzdCBjb21tYW5kLiAoQW5kcmV3IFBpbWxvdHQpCitTb2x1dGlvbjogICBJbnNlcnQgYSBkdW1teSBjb21tYW5kIGluIHRoZSBzdHVmZiBidWZmZXIuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNS42LjA3MyAoZXh0cmEpIChkZXBlbmRzIG9uIDUuNi4wMzQpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFdoZW4gY29tcGlsZWQgd2l0aCBCY2MgNS41IG1lbnVzIGRvbid0IHdvcmsuCisJICAgIEluIGRvc2luc3QuYyB0b3VwcGVyKCkgYW5kIHRvbG93ZXIoKSBnaXZlIGFuICJpbnRlcm5hbCBjb21waWxlcgorCSAgICBlcnJvciIgZm9yIEJjYyA1LjUuCitTb2x1dGlvbjogICBEZWZpbmUgV0lOVkVSIHRvIDQgdG8gYXZvaWQgY29tcGlsaW5nIGZvciBXaW5kb3dzIDIwMDAuIChEYW4KKwkgICAgU2hhcnApICBBbHNvIGNsZWFuZWQgdXAgY29tcGlsYXRpb24gYXJndW1lbnRzLgorCSAgICBVc2Ugb3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0b3VwcGVyKCkgaW4gZG9zaW5zdC5jLiAgVXNlCisJICAgIG15dG91cHBlcigpIGluc3RlYWQgb2YgdG9sb3dlcigpLgorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUuYm9yLCBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDUuNi4wNzQgKGV4dHJhKQorUHJvYmxlbTogICAgRW50ZXJpbmcgQ1NJIGRpcmVjdGx5IGRvZXNuJ3QgYWx3YXlzIHdvcmssIGJlY2F1c2UgaXQncyByZWNvZ25pemVkCisJICAgIGFzIHRoZSBzdGFydCBvZiBhIHNwZWNpYWwga2V5LiAgTW9zdGx5IGEgcHJvYmxlbSB3aXRoIG11bHRpLWJ5dGUKKwkgICAgaW4gdGhlIEdVSS4KK1NvbHV0aW9uOiAgIFVzZSBLX0NTSSBmb3IgYSB0eXBlZCBDU0kgY2hhcmFjdGVyLiAgVXNlIDxDU0k+IGZvciBhIG5vcm1hbCBDU0ksCisJICAgIDx4Q1NJPiBmb3IgYSBDU0kgdHlwZWQgaW4gdGhlIEdVSS4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvaW50cm8udHh0LCBzcmMvZ2V0Y2hhci5jLCBzcmMvZ3VpX2FtaWdhLmMsCisJICAgIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvZ3VpX21hYy5jLCBzcmMvZ3VpX3Jpc2Nvcy5jLCBzcmMvZ3VpX3czMi5jLAorCSAgICBzcmMva2V5bWFwLmgsIHNyYy9taXNjMi5jCisKK1BhdGNoIDUuNi4wNzUKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIkkiIG9yICJBIiBpbiBWaXN1YWwgYmxvY2sgbW9kZSB3aGlsZSAnc3RzJyBpcyBzZXQgbWF5CisJICAgIGNoYW5nZSBzcGFjZXMgdG8gYSBUYWIgdGhlIGluc2VydGVkIHRleHQgaXMgbm90IGNvcnJlY3QuIChNaWtlCisJICAgIFN0ZWVkKSAgQW5kIHNvbWUgb3RoZXIgcHJvYmxlbXMgd2hlbiB1c2luZyAiQSIgdG8gYXBwZW5kIGFmdGVyIHRoZQorCSAgICBlbmQgb2YgdGhlIGxpbmUuCitTb2x1dGlvbjogICBDaGVjayBmb3IgY2hhbmdlIGluIHNwYWNlcy90YWJzIGFmdGVyIGluc2VydGluZyB0aGUgdGV4dC4gIEFwcGVuZAorCSAgICBzcGFjZXMgdG8gZmlsbCB0aGUgZ2FwIGJldHdlZW4gdGhlIGVuZC1vZi1saW5lIGFuZCB0aGUgcmlnaHQgZWRnZQorCSAgICBvZiB0aGUgYmxvY2suCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA1LjYuMDc2CitQcm9ibGVtOiAgICBHVEsgR1VJOiBNYXBwaW5nIDxNLVNwYWNlPiBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBEb24ndCB1c2UgdGhlICJBbHQiIG1vZGlmaWVyIHR3aWNlIGluIGtleV9wcmVzc19ldmVudCgpLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA1LjYuMDc3CitQcm9ibGVtOiAgICBHVUk6IFdoZW4gaW50ZXJydXB0aW5nIGFuIGV4dGVybmFsIHByb2dyYW0gd2l0aCBDVFJMLUMsIGd2aW0gbWlnaHQKKwkgICAgY3Jhc2guIChCZW5qYW1pbiBLb3J2ZW1ha2VyKQorU29sdXRpb246ICAgQXZvaWQgdXNpbmcgYSBOVUxMIHBvaW50ZXIgaW4gdWlfaW5jaGFyX3VuZG8oKS4KK0ZpbGVzOgkgICAgc3JjL3VpLmMKKworUGF0Y2ggNS42LjA3OAorUHJvYmxlbTogICAgTG9jYWxlIGRvZXNuJ3QgYWx3YXlzIHdvcmsgb24gRnJlZUJTRC4gKERhdmlkIE8nQnJpZW4pCitTb2x1dGlvbjogICBMaW5rIHdpdGggdGhlICJ4cGc0IiBsaWJyYXJ5IHdoZW4gYXZhaWxhYmxlLgorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlndXJlCisKK1BhdGNoIDUuNi4wNzkKK1Byb2JsZW06ICAgIFZpbSBjb3VsZCBjcmFzaCB3aGVuIHNldmVyYWwgVGNsIGludGVycHJldGVycyBhcmUgY3JlYXRlZCBhbmQKKwkgICAgZGVzdHJveWVkLgorU29sdXRpb246ICAgaGFuZGxlIHRoZSAiZXhpdCIgY29tbWFuZCBhbmQgbmVzdGVkICI6dGNsIiBjb21tYW5kcyBiZXR0ZXIuIChJbmdvCisJICAgIFdpbGtlbikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvaWZfdGNsLnR4dCwgc3JjL2lmX3RjbC5jCisKK1BhdGNoIDUuNi4wODAKK1Byb2JsZW06ICAgIFdoZW4ganVtcGluZyB0byBhIHRhZywgZ2VuZXJhdGluZyB0aGUgdGFncyBmaWxlIGFuZCBqdW1waW5nIHRvIHRoZQorCSAgICBzYW1lIHRhZyBhZ2FpbiB1c2VzIHRoZSBvbGQgc2VhcmNoIHBhdHRlcm4uIChTdW5nLUh5dW4gTmFtKQorU29sdXRpb246ICAgRmx1c2ggY2FjaGVkIHRhZyBtYXRjaGVzIHdoZW4gZXhlY3V0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9taXNjMi5jLCBzcmMvcHJvdG8vdGFnLnBybywgc3JjL3RhZy5jCisKK1BhdGNoIDUuNi4wODEKK1Byb2JsZW06ICAgICI6c3luIGluY2x1ZGUiIHVzZXMgYSBsZXZlbCBmb3IgdGhlIGluY2x1ZGVkIGZpbGUsIHRoaXMgY29uZnVzZXMKKwkgICAgY29udGFpbmVkIGl0ZW1zIGluY2x1ZGVkIGF0IHRoZSBzYW1lIGxldmVsLgorU29sdXRpb246ICAgVXNlIGEgdW5pcXVlIHRhZyBmb3IgZWFjaCBpbmNsdWRlZCBmaWxlLiAgQ2hhbmdlZCBzcF9zeW5faW5jX2x2bAorCSAgICB0byBzcF9zeW5faW5jX3RhZy4gKFNjb3R0IEJpZ2hhbSkKK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jLCBzcmMvc3RydWN0cy5oCisKK1BhdGNoIDUuNi4wODIKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgY3Njb3BlLCBWaW0gY2FuIGNyYXNoLgorU29sdXRpb246ICAgSW5pdGlhbGl6ZSB0YWdfZm5hbWUgaW4gZmluZF90YWdzKCkuIChBbnRvbiBCbGFuY2hhcmQpCitGaWxlczoJICAgIHNyYy90YWcuYworCitQYXRjaCA1LjYuMDgzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgdmlzdWFsIGJlZXAgY2FuJ3QgYmUgc2Vlbi4gKEVyaWMgUm9lc2luZ2VyKQorU29sdXRpb246ICAgRmx1c2ggdGhlIG91dHB1dCBiZWZvcmUgd2FpdGluZyB3aXRoIEdkaUZsdXNoKCkuIChNYXVyaWNlIFMuIEJhcm51bSkKKwkgICAgQWxzbzogQWxsb3cgc3BlY2lmeWluZyB0aGUgZGVsYXkgaW4gdF92YiBmb3IgdGhlIEdVSS4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvZ3VpX2FtaWdhLmMsIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvZ3VpX21hYy5jLAorCSAgICBzcmMvZ3VpX3Jpc2Nvcy5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3gxMS5jLCBzcmMvZ3VpX2Jlb3MuY2MsCisJICAgIHNyYy9wcm90by9ndWlfYW1pZ2EucHJvLCBzcmMvcHJvdG8vZ3VpX2d0a194MTEucHJvLAorCSAgICBzcmMvcHJvdG8vZ3VpX21hYy5wcm8sIHNyYy9wcm90by9ndWlfcmlzY29zLnBybywKKwkgICAgc3JjL3Byb3RvL2d1aV93MzIucHJvLCBzcmMvcHJvdG8vZ3VpX3gxMS5wcm8sCisJICAgIHNyYy9wcm90by9ndWlfYmVvcy5wcm8KKworUGF0Y2ggNS42LjA4NCAoZGVwZW5kcyBvbiA1LjYuMDc0KQorUHJvYmxlbTogICAgR1VJOiBFbnRlcmluZyBDU0kgZG9lc24ndCBhbHdheXMgd29yayBmb3IgQXRoZW5hIGFuZCBNb3RpZi4KK1NvbHV0aW9uOiAgIEhhbmRsZSB0eXBlZCBDU0kgYXMgPHhDU0k+IChmb3Jnb3QgdGhpcyBiaXQgaW4gNS42LjA3NCkuCitGaWxlczoJICAgIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNS42LjA4NQorUHJvYmxlbTogICAgTXVsdGktYnl0ZTogVXNpbmcgInIiIHRvIHJlcGxhY2UgYSBkb3VibGUtYnl0ZSBjaGFyIHdpdGggYQorCSAgICBzaW5nbGUtYnl0ZSBjaGFyIG1vdmVkIHRoZSBjdXJzb3Igb25lIGNoYXJhY3Rlci4gKE1hdHN1bW90bykKKwkgICAgQWxzbywgdXNpbmcgYSBjb3VudCB3aGVuIHJlcGxhY2luZyBhIHNpbmdsZS1ieXRlIGNoYXIgd2l0aCBhCisJICAgIGRvdWJsZS1ieXRlIGNoYXIgZGlkbid0IHdvcmsuCitTb2x1dGlvbjogICBEb24ndCB1c2UgZGVsX2NoYXIoKSB0byBkZWxldGUgdGhlIHNlY29uZCBieXRlLgorCSAgICBHZXQgInB0ciIgYWdhaW4gYWZ0ZXIgY2FsbGluZyBpbnNfY2hhcigpLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNS42LjA4NiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiB1c2luZyBsaWJjYWxsKCkgYW5kIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBub3QgYSB2YWxpZAorCSAgICBwb2ludGVyLCBWaW0gY3Jhc2hlcy4KK1NvbHV0aW9uOiAgIFVzZSBJc0JhZFN0cmluZ1B0cigpIHRvIGNoZWNrIGlmIHRoZSBwb2ludGVyIGlzIHZhbGlkLgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA1LjYuMDg3CitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBDb21tYW5kcyBhbmQgbWVzc2FnZXMgd2l0aCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgYXJlCisJICAgIGRpc3BsYXllZCB3cm9uZy4KK1NvbHV0aW9uOiAgIERldGVjdCBkb3VibGUtYnl0ZSBjaGFyYWN0ZXJzLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL21lc3NhZ2UuYywgc3JjL21pc2MyLmMsIHNyYy9zY3JlZW4uYworCitQYXRjaCA1LjYuMDg4CitQcm9ibGVtOiAgICBNdWx0aS1ieXRlIHdpdGggTW90aWYgb3IgQXRoZW5hOiBUaGUgbWVzc2FnZSAiWElNIHJlcXVpcmVzCisJICAgIGZvbnRzZXQiIGlzIGFubm95aW5nIHdoZW4gVmltIHdhcyBjb21waWxlZCB3aXRoIFhJTSBzdXBwb3J0IGJ1dCBpdAorCSAgICBpcyBub3QgYmVpbmcgdXNlZC4KK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGF0IG1lc3NhZ2UuCitGaWxlczoJICAgIHNyYy9tdWx0Ynl0ZS5jCisKK1BhdGNoIDUuNi4wODkKK1Byb2JsZW06ICAgIE9uIG5vbi1Vbml4IHN5c3RlbXMgaXQncyBwb3NzaWJsZSB0byBvdmVyd3JpdGUgYSByZWFkLW9ubHkgZmlsZQorCSAgICB3aXRob3V0IHVzaW5nICIhIi4KK1NvbHV0aW9uOiAgIENoZWNrIGlmIHRoZSBmaWxlIHBlcm1pc3Npb25zIGFsbG93IG92ZXJ3cml0aW5nIGJlZm9yZSBtb3ZpbmcgdGhlCisJICAgIGZpbGUgdG8gYmVjb21lIHRoZSBiYWNrdXAgZmlsZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNi4wOTAKK1Byb2JsZW06ICAgIFdoZW4gZWRpdGluZyBhIGZpbGUgaW4gIi9ob21lL2Rpci9ob21lL2RpciIgdGhpcyB3YXMgcmVwbGFjZWQgd2l0aAorCSAgICAifn4iLiAgKEFuZHJlYXMgSmVsbGluZ2hhdXMpCitTb2x1dGlvbjogICBSZXBsYWNlIHRoZSBob21lIGRpcmVjdG9yeSBvbmx5IG9uY2UgaW4gaG9tZV9yZXBsYWNlKCkuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDUuNi4wOTEKK1Byb2JsZW06ICAgIFdoZW4gZWRpdGluZyBtYW55ICJubyBmaWxlIiBmaWxlcywgY2FuJ3QgY3JlYXRlIHN3YXAgZmlsZSwgYmVjYXVzZQorCSAgICAuc3dbYS1wXSBoYXZlIGFsbCBiZWVuIHVzZWQuICAoTmVpbCBCaXJkKQorU29sdXRpb246ICAgQWxzbyB1c2UgIi5zdlthLXpdIiwgIi5zdVthLXpdIiwgZXRjLgorRmlsZXM6CSAgICBzcmMvbWVtbGluZS5jCisKK1BhdGNoIDUuNi4wOTIKK1Byb2JsZW06ICAgIEZyZWVCU0Q6IFdoZW4gc2V0dGluZyAkVEVSTSB0byBhIG5vbi12YWxpZCB0ZXJtaW5hbCBuYW1lLCBWaW0KKwkgICAgaGFuZ3MgaW4gdHB1dHMoKS4KK1NvbHV0aW9uOiAgIEFmdGVyIHRnZXRlbnQoKSByZXR1cm5zIGFuIGVycm9yIGNvZGUsIGNhbGwgaXQgYWdhaW4gd2l0aCB0aGUKKwkgICAgdGVybWluYWwgbmFtZSAiZHVtYiIuICBUaGlzIGFwcGFyZW50bHkgY3JlYXRlcyBhbiBlbnZpcm9ubWVudCBpbgorCSAgICB3aGljaCB0cHV0cygpIGRvZXNuJ3QgZmFpbC4KK0ZpbGVzOgkgICAgc3JjL3Rlcm0uYworCitQYXRjaCA1LjYuMDkzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogImxzIHwgZ3ZpbSAtIiB3aWxsIHNob3cgYSBtZXNzYWdlIGJveCBhYm91dCByZWFkaW5nCisJICAgIHN0ZGluIHdoZW4gVmltIGV4aXRzLiAoRG9ub2h1ZSkKK1NvbHV0aW9uOiAgIERvbid0IHdyaXRlIGEgbWVzc2FnZSBhYm91dCB0aGUgZmlsZSByZWFkIGZyb20gc3RkaW4gdW50aWwgdGhlIEdVSQorCSAgICBoYXMgc3RhcnRlZC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNi4wOTQKK1Byb2JsZW06ICAgIFByb2JsZW0gd2l0aCBtdWx0aS1ieXRlIHN0cmluZyBmb3IgIjplY2hvIHZhciIuCitTb2x1dGlvbjogICBDaGVjayBmb3IgbGVuZ3RoIGluIG1zZ19vdXR0cmFuc19sZW5fYXR0cigpLiAoU3VuZy1IeXVuIE5hbSkKKwkgICAgQWxzbyBtYWtlIGRvX2VjaG8oKSBhd2FyZSBvZiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNS42LjA5NQorUHJvYmxlbTogICAgV2l0aCBhbiBFbWFjcyBUQUdTIGZpbGUgdGhhdCBpbmNsdWRlIGFub3RoZXIgYSByZWxhdGl2ZSBwYXRoCisJICAgIGRvZXNuJ3QgYWx3YXlzIHdvcmsuCitTb2x1dGlvbjogICBVc2UgZXhwYW5kX3RhZ19mbmFtZSgpIG9uIHRoZSBuYW1lIG9mIHRoZSBpbmNsdWRlZCBmaWxlLgorCSAgICAoVXR6LVV3ZSBIYXVzKQorRmlsZXM6CSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNS42LjA5NgorUHJvYmxlbTogICAgVW5peDogV2hlbiBlZGl0aW5nIG1hbnkgZmlsZXMsIHN0YXJ0dXAgY2FuIGJlIHNsb3cuIChQYXVsCisJICAgIEFja2Vyc3ZpbGxlcikKK1NvbHV0aW9uOiAgIEhhbHZlIHRoZSBudW1iZXIgb2Ygc3RhdCgpIGNhbGxzIHVzZWQgdG8gYWRkIGEgZmlsZSB0byB0aGUgYnVmZmVyCisJICAgIGxpc3QuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA1LjdhLjAwMQorUHJvYmxlbTogICAgR1RLIGRvZXNuJ3QgcmVzcG9uZCBvbiBkcmFnJmRyb3AgZnJvbSBST1gtRmlsZXIuCitTb2x1dGlvbjogICBBZGQgInRleHQvdXJpLWxpc3QiIHRhcmdldC4gKFRob21hcyBMZW9uYXJkKQorCSAgICBBbHNvOiBmaXggcHJvYmxlbSB3aXRoIGNoZWNraW5nIGZvciB0cmFzaCBhcmd1bWVudHMuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDUuN2EuMDAyCitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiAnc2hvd21hdGNoJyBpcyBwZXJmb3JtZWQgd2hlbiBzZWNvbmQgYnl0ZSBvZiBhbgorCSAgICBpbnNlcnRlZCBkb3VibGUtYnl0ZSBjaGFyIGlzIGEgcGFyZW4gb3IgYnJhY2UuCitTb2x1dGlvbjogICBDaGVjayBJc1RyYWlsQnl0ZSgpIGJlZm9yZSBjYWxsaW5nIHNob3dtYXRjaCgpLiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA1LjdhLjAwMworUHJvYmxlbTogICAgTXVsdGktYnl0ZTogQWZ0ZXIgdXNpbmcgQ1RSTC1PIGluIEluc2VydCBtb2RlIHdpdGggdGhlIGN1cnNvciBhdAorCSAgICB0aGUgZW5kIG9mIHRoZSBsaW5lIG9uIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgdGhlIGN1cnNvciBtb3ZlcyB0bworCSAgICB0aGUgbGVmdC4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlciBhdCBlbmQtb2YtbGluZS4gKFRhcm8gTXVyYW9rYSkKKwkgICAgQWxzbzogZml4IGNscygpIHRvIGRldGVjdCBhIGRvdWJsZS1ieXRlIGNoYXJhY3Rlci4gKENob25nLURhZSBQYXJrKQorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNS43YS4wMDQKK1Byb2JsZW06ICAgIFdoZW4gcmVwb3J0aW5nIHRoZSBzZWFyY2ggcGF0dGVybiBvZmZzZXQsIHRoZSBzdHJpbmcgY291bGQgYmUKKwkgICAgdW50ZXJtaW5hdGVkLCB3aGljaCBtYXkgY2F1c2UgYSBjcmFzaC4KK1NvbHV0aW9uOiAgIFRlcm1pbmF0ZSB0aGUgc3RyaW5nIGZvciB0aGUgc2VhcmNoIG9mZnNldC4gKFN0ZXBoZW4gUC4gV2FsbCkKK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDUuN2EuMDA1CitQcm9ibGVtOiAgICBXaGVuICI6cy8vfi8iIGRvZXNuJ3QgZmluZCBhIG1hdGNoIGl0IHJlcG9ydHMgIltOVUxMXSIgZm9yIHRoZQorCSAgICBwYXR0ZXJuLgorU29sdXRpb246ICAgVXNlIGdldF9zZWFyY2hfcGF0KCkgdG8gb2J0YWluIHRoZSBhY3R1YWxseSB1c2VkIHBhdHRlcm4uCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9wcm90by9zZWFyY2gucHJvLCBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNS43YS4wMDYgKGV4dHJhKQorUHJvYmxlbTogICAgVk1TOiBWYXJpb3VzIHByb2JsZW1zLCBhbHNvIHdpdGggdGhlIFZBWEMgY29tcGlsZXIuCitTb2x1dGlvbjogICBJbiBtYW55IHBsYWNlcyB1c2UgdGhlIFVuaXggY29kZSBmb3IgVk1TIHRvby4KKwkgICAgQWRkZWQgdGltZSwgZGF0ZSBhbmQgY29tcGlsZXIgdmVyc2lvbiB0byB2ZXJzaW9uIG1lc3NhZ2UuCisJICAgIChab2x0YW4gQXJwYWRmZnkpCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9leF9kb2NtZC5jLCBzcmMvZ2xvYmFscy5oLCBzcmMvZ3VpX3Ztc19jb25mLmgsCisJICAgIHNyYy9tYWluLmMsIHNyYy9tZXNzYWdlLmMsIHNyYy9taXNjMS5jLCBzcmMvb3Nfdm1zLmMsCisJICAgIHNyYy9vc192bXMuaCwgc3JjL29zX3Ztcy5tbXMsIHNyYy9vc192bXNfY29uZi5oLAorCSAgICBzcmMvcHJvdG8vb3Nfdm1zLnBybywgc3JjL3Byb3RvL3ZlcnNpb24ucHJvLCBzcmMvdGVybS5jLAorCSAgICBzcmMvdmVyc2lvbi5jLCBzcmMveHhkL29zX3Ztcy5tbXMsIHNyYy94eGQveHhkLmMKKworUGF0Y2ggNS43YS4wMDcKK1Byb2JsZW06ICAgIE1vdGlmIGFuZCBBdGhlbmEgR1VJOiBDVFJMLUAgaXMgaW50ZXJwcmV0ZWQgYXMgQ1RSTC1DLgorU29sdXRpb246ICAgT25seSB1c2UgImludHJfY2hhciIgd2hlbiBpdCBoYXMgYmVlbiBzZXQuCitGaWxlczoJICAgIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNS43YS4wMDgKK1Byb2JsZW06ICAgIEdUSyBHVUk6IFdoZW4gdXNpbmcgQ1RSTC1MIHRoZSBzY3JlZW4gaXMgcmVkcmF3biB0d2ljZSwgY2F1c2luZworCSAgICB0cm91YmxlIGZvciBib2xkIGNoYXJhY3RlcnMuICBBbHNvIGhhcHBlbnMgd2hlbiBtb3Zpbmcgd2l0aCB0aGUKKwkgICAgc2Nyb2xsYmFyLiAgQmVzdCBzZWVuIHdoZW4gJ3dyaXRlZGVsYXknIGlzIG5vbi16ZXJvLgorCSAgICBXaGVuIHN0YXJ0aW5nIHRoZSBHVUkgd2l0aCAiOmd1aSIgdGhlIHNjcmVlbiBpcyByZWRyYXduIG9uY2Ugd2l0aAorCSAgICB0aGUgd3JvbmcgY29sb3JzLgorU29sdXRpb246ICAgT25seSBzZXQgdGhlIGdlb21ldHJ5IGhpbnRzIHdoZW4gdGhlIHdpbmRvdyBzaXplIHJlYWxseSBjaGFuZ2VkLgorCSAgICBUaGlzIGF2b2lkcyBzZXR0aW5nIGl0IGVhY2ggdGltZSB0aGUgc2Nyb2xsYmFyIGlzIGZvcmNlZnVsbHkKKwkgICAgcmVkcmF3bi4KKwkgICAgRG9uJ3QgcmVkcmF3IGluIGV4cG9zZV9ldmVudCgpIHdoZW4gZ3VpLnN0YXJ0aW5nIGlzIHN0aWxsIHNldC4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1ZFUlNJT04gNS44CQkJCQkJKnZlcnNpb24tNS44KgorCitWZXJzaW9uIDUuOCBpcyBhIGJ1Zy1maXggdmVyc2lvbiBvZiA1LjcuCisKKworQ2hhbmdlZAkJCQkJCQkqY2hhbmdlZC01LjgqCistLS0tLS0tCisKK0N0YWdzIGlzIG5vIGxvbmdlciBpbmNsdWRlZCB3aXRoIFZpbS4gIEl0IGhhcyBncm93biBpbnRvIGEgcHJvamVjdCBvZiBpdHMgb3duLgorWW91IGNhbiBmaW5kIGl0IGhlcmU6ICBodHRwOi8vY3RhZ3Muc2YubmV0LiAgSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIGFzIGEgVmltCitjb21wYW5pb24gd2hlbiB5b3UgYXJlIHdyaXRpbmcgcHJvZ3JhbXMuCisKKworQWRkZWQJCQkJCQkJKmFkZGVkLTUuOCoKKy0tLS0tCisKK05ldyBzeW50YXggZmlsZXM6CithY2VkYgkJQWNlREIgKFN0ZXdhcnQgTW9ycmlzKQorYWZsZXgJCUFmbGV4IChNYXRoaWV1IENsYWJhdXQpCithbnRscgkJQW50bHIgKE1hdGhpZXUgQ2xhYmF1dCkKK2FzbTY4awkJNjgwMDAgQXNzZW1ibHkgKFN0ZXZlIFdhbGwpCithdXRvbWFrZQlBdXRvbWFrZSAoSm9obiBXaWxsaWFtcykKK2F5YWNjCQlBeWFjYyAoTWF0aGlldSBDbGFiYXV0KQorYgkJQiAoTWF0aGlldSBDbGFiYXV0KQorYmluZHpvbmUJQklORCB6b25lIChnbG9yeSBodW1wKQorYmxhbmsJCUJsYW5rIChSYWZhbCBTdWxlam1hbikKK2NmZwkJQ29uZmlndXJlIGZpbGVzIChJZ29yIFByaXNjaGVwb2ZmKQorY2hhbmdlbG9nCUNoYW5nZUxvZyAoR2VkaW1pbmFzIFBhdWxhdXNrYXMpCitjbAkJQ2xldmVyIChQaGlsIFVyZW4pCitjcm9udGFiCQlDcm9udGFiIChKb2huIEhvZWx6ZWwpCitjc2MJCUVzc2Jhc2Ugc2NyaXB0IChSYXVsIFNlZ3VyYSBBY2V2ZWRvKQorY3lubGliCQlDeW5saWIoQysrKSAoUGhpbCBEZXJyaWNrKQorY3lucHAJCUN5bisrIChQaGlsIERlcnJpY2spCitkZWJjaGFuZ2Vsb2cJRGViaWFuIENoYW5nZWxvZyAoV2ljaGVydCBBa2tlcm1hbikKK2RlYmNvbnRyb2wJRGViaWFuIENvbnRyb2wgKFdpY2hlcnQgQWtrZXJtYW4pCitkbnMJCUROUyB6b25lIGZpbGUgKEplaHNvbSkKK2R0bWwJCVpvcGUncyBEVE1MIChKZWFuIEpvcmRhYW4pCitkeWxhbgkJRHlsYW4sIER5bGFuLWludHIgYW5kIER5bGFuLWxpZCAoQnJlbnQgRnVsZ2hhbSkKK2VjZAkJRW1iZWRpeCBDb21wb25lbnQgRGVzY3JpcHRpb24gKEpvaG4gQmVwcHUpCitmZ2wJCUluZm9ybWl4IDRHTCAoUmFmYWwgU3VsZWptYW4pCitmb3hwcm8JCUZveFBybyAoUG93aW5nIFRzZSkKK2dzcAkJR05VIFNlcnZlciBQYWdlcyAoTmF0aGFuaWVsIEhhcndhcmQpCitndGtyYwkJR1RLIHJjIChEYXZpZCBOZWNhcykKK2hlcmN1bGVzCUhlcmN1bGVzIChBdmFudCEgQ29ycG9yYXRpb24pIChEYW5hIEVkd2FyZHMpCitodG1sb3MJCUhUTUwvT1MgYnkgQWVzdGl2YSAoSmFzb24gUnVzdCkKK2luaXR0YWIJCVN5c1YgcHJvY2VzcyBjb250cm9sIChEYXZpZCBOZWNhcykKK2lzcwkJSW5ubyBTZXR1cCAoRG9taW5pcXVlIFN0ZXBoYW4pCitqYW0JCUphbSAoUmFsZiBMZW1rZSkKK2plc3MJCUplc3MgKFBhdWwgQmFsZW1lKQorbHByb2xvZwkJTGFtYmRhUHJvbG9nIChNYXJrdXMgTW90dGwpCitpYTY0CQlJbnRlbCBJdGFuaXVtIChwYXJ0aCBtYWx3YW5rYXIpCitraXgJCUtpeHRhcnQgKE5pZ2VsIEdpYmJzKQorbWdwCQlNYUdpYyBQb2ludCAoR2VyZnJpZWQgRnVjaHMpCittYXNvbgkJTWFzb24gKEhUTUwgd2l0aCBQZXJsKSAoQW5kcmV3IFNtaXRoKQorbW1hCQlNYXRoZW1hdGljYSAoV29sZmdhbmcgV2FsdGVuYmVyZ2VyKQorbnFjCQlOb3QgUXVpdGUgQyAoU3RlZmFuIFNjaGVyZXIpCitvbW5pbWFyawlPbW5pbWFyayAoUGF1bCBUZXJyYXkpCitvcGVucm9hZAlPcGVuUk9BRCAoTHVpcyBNb3Jlbm8gU2VycmFubykKK25hbWVkCQlCSU5EIGNvbmZpZ3VyYXRpb24gKGdsb3J5IGh1bXApCitwYXBwCQlQQXBwIChNYXJjIExlaG1hbm4pCitwZm1haW4JCVBvc3RmaXggbWFpbiBjb25maWcgKFBldGVyIEtlbGVtZW4pCitwaWMJCVBJQyBhc3NlbWJseSAoQWxla3NhbmRhciBWZXNlbGlub3ZpYykKK3Bwd2l6CQlQUFdpemFyZCAoU3RlZmFuIFNjaHdhcnplcikKK3Byb2dyZXNzCVByb2dyZXNzIChQaGlsIFVyZW4pCitwc2YJCVByb2R1Y3QgU3BlY2lmaWNhdGlvbiBGaWxlIChSZXggQmFyemVlKQorcgkJUiAoVG9tIFBheW5lKQorcmVnaXN0cnkJTVMtV2luZG93cyByZWdpc3RyeSAoRG9taW5pcXVlIFN0ZXBoYW4pCityb2JvdHMJCVJvYm90cy50eHQgKERvbWluaXF1ZSBTdGVwaGFuKQorcnRmCQlSaWNoIFRleHQgRm9ybWF0IChEb21pbmlxdWUgU3RlcGhhbikKK3NldGwJCVNFVEwgKEFsZXggUG95bGlzaGVyKQorc2dtbGRlY2wJU0dNTCBEZWNsYXJhdGlvbnMgKERhbmllbCBBLiBNb2xpbmEgVy4pCitzaW5kYQkJU2luZGEgaW5wdXQgKEFkcmlhbiBOYWdsZSkKK3NpbmRhY21wCVNpbmRhIGNvbXBhcmUgKEFkcmlhbiBOYWdsZSkKK3NpbmRhb3V0CVNpbmRhIG91dHB1dCAoQWRyaWFuIE5hZ2xlKQorc21pdGgJCVNNSVRIIChSYWZhbCBTdWxlam1hbikKK3Nub2JvbDQJCVNub2JvbCA0IChSYWZhbCBTdWxlam1hbikKK3N0cmFjZQkJU3RyYWNlIChEYXZpZCBOZWNhcykKK3RhawkJVEFLIGlucHV0IChBZHJpYW4gTmFnbGUpCit0YWtjbXAJCVRBSyBjb21wYXJlIChBZHJpYW4gTmFnbGUpCit0YWtvdXQJCVRBSyBvdXRwdXQgKEFkcmlhbiBOYWdsZSkKK3Rhc20JCVR1cmJvIGFzc2VtYmx5IChGb29MbWFuKQordGV4bWYJCVRlWCBjb25maWd1cmF0aW9uIChEYXZpZCBOZWNhcykKK3RyYXN5cwkJVHJhc3lzIGlucHV0IChBZHJpYW4gTmFnbGUpCit0c3NnbQkJVFNTIEdlb21ldHJ5IChBZHJpYW4gTmFnbGUpCit0c3NvcAkJVFNTIE9wdGljcyAoQWRyaWFuIE5hZ2xlKQordHNzY2wJCVRTUyBDb21tYW5kIGxpbmUgKEFkcmlhbiBOYWdsZSkKK3ZpcmF0YQkJVmlyYXRhIENvbmZpZ3VyYXRpb24gU2NyaXB0IChNYW51ZWwgTS5ILiBTdG9sKQordnNlamNsCQlWU0UgSkNMIChEYXZpZCBPbmRyZWprbykKK3dkaWZmCQlXb3Jkd2lzZSBkaWZmIChHZXJmcmllZCBGdWNocykKK3dzaAkJV2luZG93cyBTY3JpcHRpbmcgSG9zdCAoUGF1bCBNb29yZSkKK3hrYgkJWCBLZXlib2FyZCBFeHRlbnNpb24gKERhdmlkIE5lY2FzKQorCitSZW5hbWVkIHBocDMgdG8gcGhwLCBpdCBub3cgYWxzbyBzdXBwb3J0cyBwaHA0IChMdXR6IEV5bWVycykKKworUGF0Y2ggNS43LjAxNQorUHJvYmxlbTogICAgU3ludGF4IGZpbGVzIGZvciBWaW0gNi4wIGNhbid0IGJlIHVzZWQgd2l0aCA1LnguCitTb2x1dGlvbjogICBBZGQgdGhlICJkZWZhdWx0IiBhcmd1bWVudCB0byB0aGUgIjpoaWdobGlnaHQiIGNvbW1hbmQ6IElnbm9yZSB0aGUKKwkgICAgY29tbWFuZCBpZiBoaWdobGlnaHRpbmcgd2FzIGFscmVhZHkgc3BlY2lmaWVkLgorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworR2VuZXJhdGUgdGhlIFN5bnRheCBtZW51IHdpdGggbWFrZW1lbnUudmltLCBzbyB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBkb25lCit3aGVuIFZpbSBpcyBzdGFydGluZyB1cC4gIFJlZHVjZXMgdGhlIHN0YXJ0dXAgdGltZSBvZiB0aGUgR1VJLgorCisKK0ZpeGVkCQkJCQkJCSpmaXhlZC01LjgqCistLS0tLQorCitDb252ZXJzaW9uIG9mIGRvY3MgdG8gSFRNTCBkaWRuJ3QgY29udmVydCAifHRhZ3xzIiB0byBhIGh5cGVybGluay4KKworRml4ZWQgY29tcGlsaW5nIHVuZGVyIE5lWFQuIChKZXJvZW4gQy5NLiBHb3Vkc3dhYXJkKQorCitvcHR3aW4udmltIGdhdmUgYW4gZXJyb3Igd2hlbiB1c2VkIGluIFZpIGNvbXBhdGlibGUgbW9kZSAoJ2NwbycgY29udGFpbnMgJ0MnKS4KKworVGNsIGludGVycHJldGVyOiAiYnVmZmVyIiBjb21tYW5kIGRpZG4ndCBjaGVjayBmb3IgcHJlY2Vuc2Ugb2YgYW4gYXJndW1lbnQuCisoRGF2ZSBCb2RlbnN0YWIpCisKK2Rvc2luc3QuYzogQWRkZWQgY2hlY2tzIGZvciB0b28gbG9uZyBmaWxlIG5hbWUuCisKK0FtaWdhOiBhIGZpbGUgbmFtZSBzdGFydGluZyB3aXRoIGEgY29sb24gd2FzIGNvbnNpZGVyZWQgYWJzb2x1dGUgYnV0IGl0IGlzbid0LgorQW1pZ2E6ICI6cHdkIiBhZGRlZCBhIHNsYXNoIHdoZW4gaW4gdGhlIHJvb3Qgb2YgYSBkcml2ZS4KKworTWFjaW50b3NoOiBXYXJuaW5ncyBmb3IgdW51c2VkIHZhcmlhYmxlcy4gKEJlcm5oYXJkIFBydWVtbWVyKQorCitVbml4OiBXaGVuIGNhdGNoaW5nIGEgZGVhZGx5IHNpZ25hbCwgaGFuZGxlIGl0IGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzCit1bmxpa2VseSB0aGF0IFZpbSB3aWxsIGhhbmcuICBDYWxsIF9leGl0KCkgaW5zdGVhZCBvZiBleGl0KCkgaW4gY2FzZSBvZiBhCitzZXZlcmUgcHJvYmxlbS4KKworU2V0dGluZyB0aGUgd2luZG93IHRpdGxlIGZyb20gbm90aGluZyB0byBzb21ldGhpbmcgZGlkbid0IHdvcmsgYWZ0ZXIgcGF0Y2ggMjkuCisKK0NoZWNrIGZvciBvd25lcnNoaXAgb2YgLmV4cmMgYW5kIC52aW1yYyB3YXMgZG9uZSB3aXRoIHN0YXQoKS4gIFVzZSBsc3RhdCgpIGFzCit3ZWxsIGZvciBleHRyYSBzZWN1cml0eS4KKworV2luMzIgR1VJOiBQcmludGluZyBhIGZpbGUgd2l0aCAnZmlsZWZvcm1hdCcgInVuaXgiIGRpZG4ndCB3b3JrLiAgU2V0CisnZmlsZWZvcm1hdCcgdG8gImRvcyIgYmVmb3JlIHdyaXRpbmcgdGhlIHRlbXAgZmlsZS4KKworVW5peDogQ291bGQgc3RhcnQgd2FpdGluZyBmb3IgYSBjaGFyYWN0ZXIgd2hlbiBjaGVja2luZyBmb3IgYSBDVFJMLUMgdHlwZWQKK3doZW4gYW4gWCBldmVudCBpcyByZWNlaXZlZC4KKworQ291bGQgbm90IHVzZSBQZXJsIGFuZCBQeXRob24gYXQgdGhlIHNhbWUgdGltZSBvbiBGcmVlQlNELCBiZWNhdXNlIFBlcmwgdXNlZAorIi1sYyIgYW5kIFB5dGhvbiB1c2VkIHRoZSB0aHJlYWRlZCBDIGxpYnJhcnkuCisKK1dpbjMyOiBUaGUgTWluZ3cgY29tcGlsZXIgZ2F2ZSBhIGZldyB3YXJuaW5nIG1lc3NhZ2VzLgorCitXaGVuIHVzaW5nICJaWiIgYW5kIGFuIGF1dG9jb21tYW5kIGZvciB3cml0aW5nIHVzZXMgYW4gYWJicmV2aWF0aW9uIGl0IGRpZG4ndAord29yay4gIERvbid0IHN0dWZmIHRoZSAiOngiIGNvbW1hbmQgYnV0IGV4ZWN1dGUgaXQgZGlyZWN0bHkuIChNaWthZWwgQmVydGhlKQorCitWTVMgZG9lc24ndCBhbHdheXMgaGF2ZSBsc3RhdCgpLCBhZGRlZCBhbiAjaWZkZWYgYXJvdW5kIGl0LgorCitBZGRlZCBhIGZldyBjb3JyZWN0aW9ucyBmb3IgdGhlIE1hY2ludG9zaC4gKEF4ZWwgS2llbGhvcm4pCisKK1dpbjMyOiBHdmltZXh0IGNvdWxkIG5vdCBlZGl0IG1vcmUgdGhhbiBhIGZldyBmaWxlcyBhdCBvbmNlLCB0aGUgbGVuZ3RoIG9mIHRoZQorYXJndW1lbnQgd2FzIGZpeGVkLgorCisKK1ByZXZpb3VzbHkgcmVsZWFzZWQgcGF0Y2hlcyBmb3IgVmltIDUuNzoKKworUGF0Y2ggNS43LjAwMQorUHJvYmxlbTogICAgV2hlbiB0aGUgY3VycmVudCBidWZmZXIgaXMgY3J5cHRlZCwgYW5kIGFub3RoZXIgbW9kaWZpZWQgYnVmZmVyCisJICAgIGlzbid0LCAiOndhbGwiIHdpbGwgZW5jcnlwdCB0aGUgb3RoZXIgYnVmZmVyLgorU29sdXRpb246ICAgSW4gYnVmX3dyaXRlKCkgdXNlICJidWYiIGluc3RlYWQgb2YgImN1cmJ1ZiIgdG8gY2hlY2sgZm9yIHRoZQorCSAgICBjcnlwdCBrZXkuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA1LjcuMDAyCitQcm9ibGVtOiAgICBXaGVuICdzaG93bW9kZScgaXMgc2V0LCB1c2luZyAiQ1RSTC1PIDpyIGZpbGUiIHdhaXRzIHRocmVlIHNlY29uZHMKKwkgICAgYmVmb3JlIGRpc3BsYXlpbmcgdGhlIHJlYWQgdGV4dC4gKFdpY2hlcnQgQWtrZXJtYW4pCitTb2x1dGlvbjogICBTZXQgImtlZXBfbXNnIiB0byB0aGUgZmlsZSBtZXNzYWdlIHNvIHRoYXQgdGhlIHNjcmVlbiBpcyByZWRyYXduCisJICAgIGJlZm9yZSB0aGUgdGhyZWUgc2Vjb25kcyB3YWl0IGZvciBkaXNwbGF5aW5nIHRoZSBtb2RlIG1lc3NhZ2UuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA1LjcuMDAzCitQcm9ibGVtOiAgICBTZWFyY2hpbmcgZm9yICJbWzpjbnRybDpdXSIgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgRXhjbHVkZSBOVUwgZnJvbSB0aGUgbWF0Y2hpbmcgY2hhcmFjdGVycywgaXQgdGVybWluYXRlcyB0aGUgbGlzdC4KK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDUuNy4wMDQKK1Byb2JsZW06ICAgIEdUSzogV2hlbiBzZWxlY3RpbmcgYSBuZXcgZm9udCwgVmltIGNhbiBjcmFzaC4KK1NvbHV0aW9uOiAgIEluIGd1aV9tY2hfaW5pdF9mb250KCkgdW5yZWZlcmVuY2UgdGhlIG9sZCBmb250LCBub3QgdGhlIG5ldyBvbmUuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDUuNy4wMDUKK1Byb2JsZW06ICAgIE11bHRpYnl0ZTogSW5zZXJ0aW5nIGEgd3JhcHBlZCBsaW5lIGNvcnJ1cHRzIGt0ZXJtIHNjcmVlbi4KKwkgICAgUGFzdGluZyBURVhUL0NPTVBPVU5EX1RFWFQgaW50byBWaW0gZG9lcyBub3Qgd29yay4KKwkgICAgT24gTW90aWYgbm8gWElNIHN0YXR1cyBsaW5lIGlzIGRpc3BsYXllZCBldmVuIHRob3VnaCBpdCBpcworCSAgICBhdmFpbGFibGUuCitTb2x1dGlvbjogICBEb24ndCB1c2UgeHRlcm0gdHJpY2sgZm9yIHdyYXBwaW5nIGxpbmVzIGZvciBtdWx0aWJ5dGUgbW9kZS4KKwkgICAgQ29ycmVjdCBhIG1pc3NpbmcgImJyZWFrIiwgYWRkZWQgVEVYVC9DT01QT1VORF9URVhUIHNlbGVjdGlvbgorCSAgICByZXF1ZXN0LgorCSAgICBBZGQgWElNU3RhdHVzQXJlYSBmYWxsYmFjayBjb2RlLgorCSAgICAoS2F0c3VoaXRvIE5hZ2FubykKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9tdWx0Ynl0ZS5jLCBzcmMvc2NyZWVuLmMsIHNyYy91aS5jCisKK1BhdGNoIDUuNy4wMDYKK1Byb2JsZW06ICAgIEdVSTogcmVkcmF3aW5nIHRoZSBub24tVmlzdWFsIHNlbGVjdGlvbiBpcyB3cm9uZyB3aGVuIHRoZSB3aW5kb3cKKwkgICAgaXMgdW5vYnNjdXJlZC4gKEplYW4tUGllcnJlIEV0aWVubmUpCitTb2x1dGlvbjogICBSZWRyYXcgdGhlIHNlbGVjdGlvbiBwcm9wZXJseSBhbmQgZG9uJ3QgY2xlYXIgaXQuICBBZGRlZCAibGVuIgorCSAgICBhcmd1bWVudCB0byBjbGlwX21heV9yZWRyYXdfc2VsZWN0aW9uKCkuCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL3VpLmMsIHNyYy9wcm90by91aS5wcm8KKworUGF0Y2ggNS43LjAwNworUHJvYmxlbTogICAgUHl0aG9uOiBDcmFzaCB3aGVuIHVzaW5nIHRoZSBjdXJyZW50IGJ1ZmZlciB0d2ljZS4KK1NvbHV0aW9uOiAgIEluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGJ1ZmZlciBhbmQgd2luZG93IG9iamVjdHMuCisJICAgIChKb2hhbm5lcyBaZWxsbmVyKQorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNS43LjAwOAorUHJvYmxlbTogICAgSW4gRXggbW9kZSwgYmFja3NwYWNpbmcgb3ZlciB0aGUgZmlyc3QgVEFCIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KKwkgICAgKFdpY2hlcnQgQWtrZXJtYW4pCitTb2x1dGlvbjogICBTd2l0Y2ggdGhlIGN1cnNvciBvbiBiZWZvcmUgcHJpbnRpbmcgdGhlIG5ld2xpbmUuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDUuNy4wMDkgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjOiBDcmFzaCB3aGVuIHVzaW5nIGEgbG9uZyBmaWxlLgorU29sdXRpb246ICAgRG9uJ3QgcmVkZWZpbmUgbWFsbG9jKCkgYW5kIGZyZWUoKSwgYmVjYXVzZSBpdCB3aWxsIGJyZWFrIHVzaW5nCisJICAgIHJlYWxsb2MoKS4KK0ZpbGVzOgkgICAgc3JjL29zX21hYy5oCisKK1BhdGNoIDUuNy4wMTAKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgQ1RSTC1BIG9uIGEgdmVyeSBsb25nIG51bWJlciBWaW0gY2FuIGNyYXNoLiAgKE1pY2hhZWwKKwkgICAgTmF1bWFubikKK1NvbHV0aW9uOiAgIFRydW5jYXRlIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBudW1iZXIgdG8gYXZvaWQgYSBidWZmZXIgb3ZlcmZsb3cuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA1LjcuMDExIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSSBvbiBOVCA1IGFuZCBXaW45ODogRGlzcGxheWluZyBIZWJyZXcgaXMgcmV2ZXJzZWQuCitTb2x1dGlvbjogICBPdXRwdXQgZWFjaCBjaGFyYWN0ZXIgc2VwYXJhdGVseSwgdG8gYXZvaWQgdGhhdCBXaW5kb3dzIHJldmVyc2VzCisJICAgIHRoZSB0ZXh0IGZvciBzb21lIGZvbnRzLiAoUm9uIEFhcm9uKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNy4wMTIKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIi1jb21wbGV0ZT1idWZmZXIiIGZvciAiOmNvbW1hbmQiIHRoZSB1c2VyIGNvbW1hbmQKKwkgICAgZmFpbHMuCitTb2x1dGlvbjogICBJbiBhIHVzZXIgY29tbWFuZCBkb24ndCByZXBsYWNlIHRoZSBidWZmZXIgbmFtZSB3aXRoIGEgY291bnQgZm9yCisJICAgIHRoZSAgYnVmZmVyIG51bWJlci4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNS43LjAxMworUHJvYmxlbTogICAgImdEIiBkaWRuJ3QgYWx3YXlzIGZpbmQgYSBtYXRjaCBpbiB0aGUgZmlyc3QgbGluZSwgZGVwZW5kaW5nIG9uCisJICAgIHRoZSBjb2x1bW4gdGhlIHNlYXJjaCBzdGFydGVkIGF0LgorU29sdXRpb246ICAgUmVzZXQgdGhlIGNvbHVtbiB0byB6ZXJvIGJlZm9yZSBzdGFydGluZyB0byBzZWFyY2guCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjcuMDE0CitQcm9ibGVtOiAgICBSb3QxMyBlbmNvZGluZyB3YXMgZG9uZSBvbiBjaGFyYWN0ZXJzIHdpdGggYWNjZW50cywgd2hpY2ggaXMKKwkgICAgd3JvbmcuIChTdmVuIEdvdHR3YWxkKQorU29sdXRpb246ICAgT25seSBkbyByb3QxMyBlbmNvZGluZyBvbiBBU0NJSSBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNS43LjAxNgorUHJvYmxlbTogICAgV2hlbiBoaXR0aW5nICduJyBmb3IgYSAiOnMvLy9jIiBjb21tYW5kLCB0aGUgaWdub3JlLWNhc2UgZmxhZyB3YXMKKwkgICAgbm90IHJlc3RvcmVkLCBzb21lIG1hdGNoZXMgd2VyZSBza2lwcGVkLiAoRGFuaWVsIEJsYXVzdGVpbikKK1NvbHV0aW9uOiAgIFJlc3RvcmUgdGhlIHJlZ19pYyB2YXJpYWJsZSB3aGVuICduJyB3YXMgaGl0LgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDUuNy4wMTcKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYSBWaW0gc2NyaXB0IGZvciBWaW0gNi4wIHdpdGggPFNJRD4gYmVmb3JlIGEgZnVuY3Rpb24KKwkgICAgbmFtZSwgaXQgcHJvZHVjZXMgYW4gZXJyb3IgbWVzc2FnZSBldmVuIHdoZW4gaW5zaWRlIGFuICJpZiB2ZXJzaW9uCisJICAgID49IDYwMCIuICAoQ2hhcmxlcyBDYW1wYmVsbCkKK1NvbHV0aW9uOiAgIElnbm9yZSBlcnJvcnMgaW4gdGhlIGZ1bmN0aW9uIG5hbWUgd2hlbiB0aGUgZnVuY3Rpb24gaXMgbm90IGdvaW5nCisJICAgIHRvIGJlIGRlZmluZWQuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNS43LjAxOAorUHJvYmxlbTogICAgV2hlbiBydW5uaW5nICJydmltIiBvciAidmltIC1aIiBpdCB3YXMgc3RpbGwgcG9zc2libGUgdG8gZXhlY3V0ZSBhCisJICAgIHNoZWxsIGNvbW1hbmQgd2l0aCBzeXN0ZW0oKSBhbmQgYmFja3RpY2stZXhwYW5zaW9uLiAoQW50b25pb3MgQS4KKwkgICAgS2F2YXJub3MpCitTb2x1dGlvbjogICBEaXNhbGxvdyBleGVjdXRpbmcgYSBzaGVsbCBjb21tYW5kIGluIGdldF9jbWRfb3V0cHV0KCkgYW5kCisJICAgIG1jaF9leHBhbmRfd2lsZGNhcmRzKCkuCitGaWxlczoJICAgIHNyYy9taXNjMS5jLCBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDUuNy4wMTkKK1Byb2JsZW06ICAgIE11bHRpYnl0ZTogSW4gYSBzdWJzdGl0dXRlIHN0cmluZywgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciBpc24ndAorCSAgICBza2lwcGVkIHByb3Blcmx5LCBjYW4gYmUgYSBwcm9ibGVtIHdoZW4gdGhlIHNlY29uZCBieXRlIGlzIGEKKwkgICAgYmFja3NsYXNoLgorU29sdXRpb246ICAgU2tpcCBhbiBleHRyYSBieXRlIGZvciBhIGRvdWJsZS1ieXRlIGNoYXJhY3Rlci4gKE11cmFva2EgVGFybykKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA1LjcuMDIwCitQcm9ibGVtOiAgICBDb21waWxhdGlvbiBkb2Vzbid0IHdvcmsgb24gTWFjT1MtWC4KK1NvbHV0aW9uOiAgIEFkZCBhIGNvdXBsZSBvZiAjaWZkZWZzLiAoSmFtaWUgQ3VybWkpCitGaWxlczoJICAgIHNyYy9yZWdleHAuYywgc3JjL2N0YWdzL2dlbmVyYWwuaAorCitQYXRjaCA1LjcuMDIxCitQcm9ibGVtOiAgICBWaW0gc29tZXRpbWVzIHByb2R1Y2VzIGEgYmVlcCB3aGVuIHN0YXJ0ZWQgaW4gYW4geHRlcm0uICBPbmx5CisJICAgIGhhcHBlbnMgd2hlbiBjb21waWxlZCB3aXRob3V0IG1vdXNlIHN1cHBvcnQuCitTb2x1dGlvbjogICBSZXF1ZXN0aW5nIHRoZSB4dGVybSB2ZXJzaW9uIHJlc3VsdHMgaW4gYSBLX0lHTk9SRS4gIFRoaXMgd2Fzbid0CisJICAgIGhhbmRsZWQgd2hlbiBtb3VzZSBzdXBwb3J0IGlzIGRpc2FibGVkLiAgQWNjZXB0IEtfSUdOT1JFIGFsd2F5cy4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDUuNy4wMjIKK1Byb2JsZW06ICAgICV2IGluICdzdGF0dXNsaW5lJyBpcyBub3QgZGlzcGxheWVkIHdoZW4gaXQncyBlcXVhbCB0byAlYy4KK1NvbHV0aW9uOiAgIENoZWNrIGlmICVWIG9yICV2IGlzIHVzZWQgYW5kIGhhbmRsZSB0aGVtIGRpZmZlcmVudGx5LgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNS43LjAyMworUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiBhIFdpbkxlYXZlIGF1dG9jb21tYW5kIGRlbGV0ZXMgdGhlIGJ1ZmZlciBpbiB0aGUgb3RoZXIKKwkgICAgd2luZG93LgorU29sdXRpb246ICAgQ2hlY2sgdGhhdCBhZnRlciBleGVjdXRpbmcgdGhlIFdpbkxlYXZlIGF1dG9jb21tYW5kcyB0aGVyZSBzdGlsbAorCSAgICBpcyBhIHdpbmRvdyB0byBiZSBjbG9zZWQuICBBbHNvIHVwZGF0ZSB0aGUgdGVzdCB0aGF0IHdhcyBzdXBwb3NlZAorCSAgICB0byBjaGVjayBmb3IgdGhpcyBwcm9ibGVtLgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMsIHRlc3RkaXIvdGVzdDEzLmluLCB0ZXN0ZGlyL3Rlc3QxMy5vaworCitQYXRjaCA1LjcuMDI0CitQcm9ibGVtOiAgICBFdmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gZm9yICdzdGF0dXNsaW5lJyBjYW4gaGF2ZSBzaWRlIGVmZmVjdHMuCitTb2x1dGlvbjogICBFdmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBpbiBhIHNhbmRib3guCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9ldmFsLmMsIHNyYy9wcm90by9ldmFsLnBybywgc3JjL2V4X2NtZHMuYywKKwkgICAgc3JjL2V4X2NtZHMuaCwgc3JjL2V4X2RvY21kLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9vcHRpb24uYywKKwkgICAgc3JjL3NjcmVlbi5jLCBzcmMvdW5kby5jCisKK1BhdGNoIDUuNy4wMjUgKGZpeGVkKQorUHJvYmxlbTogICAgQ3JlYXRpbmcgYSB0ZW1wIGZpbGUgaGFzIGEgcmFjZSBjb25kaXRpb24uCitTb2x1dGlvbjogICBDcmVhdGUgYSBwcml2YXRlIGRpcmVjdG9yeSB0byB3cml0ZSB0aGUgdGVtcCBmaWxlcyBpbi4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvbWlzYzEuYywgc3JjL3Byb3RvL21pc2MxLnBybywKKwkgICAgc3JjL3Byb3RvL2ZpbGVpby5wcm8sIHNyYy9tZW1saW5lLmMsIHNyYy9vc191bml4LmgKKworUGF0Y2ggNS43LjAyNiAoZXh0cmEpCitQcm9ibGVtOiAgICBDcmVhdGluZyBhIHRlbXAgZmlsZSBoYXMgYSByYWNlIGNvbmRpdGlvbi4KK1NvbHV0aW9uOiAgIENyZWF0ZSBhIHByaXZhdGUgZGlyZWN0b3J5IHRvIHdyaXRlIHRoZSB0ZW1wIGZpbGVzIGluLgorCSAgICBUaGlzIGlzIHRoZSBleHRyYSBwYXJ0IG9mIHBhdGNoIDUuNy4wMjUuCitGaWxlczoJICAgIHNyYy9vc19tc2Rvcy5oCisKK1BhdGNoIDUuNy4wMjcKK1Byb2JsZW06ICAgIFN0YXJ0aW5nIHRvIGVkaXQgYSBmaWxlIGNhbiBjYXVzZSBhIGNyYXNoLiAgRm9yIGV4YW1wbGUgd2hlbiBpbgorCSAgICBJbnNlcnQgbW9kZSwgdXNpbmcgQ1RSTC1PIDpoZWxwIGFiYnI8VGFiPiB0byBzY3JvbGwgdGhlIHNjcmVlbiBhbmQKKwkgICAgdGhlbiA8Q1I+LCB3aGljaCBlZGl0cyBhIGhlbHAgZmlsZS4gKFJvYmVydCBCb2dvbWlwKQorU29sdXRpb246ICAgQ2hlY2sgaWYga2VlcF9tc2cgaXMgTlVMTCBiZWZvcmUgY29weWluZyBpdC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNy4wMjgKK1Byb2JsZW06ICAgIENyZWF0aW5nIGEgYmFja3VwIG9yIHN3YXAgZmlsZSBjb3VsZCBmYWlsIGluIHJhcmUgc2l0dWF0aW9ucy4KK1NvbHV0aW9uOiAgIFVzZSBPX0VYQ0wgZm9yIG9wZW4oKS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvbWVtZmlsZS5jCisKK1BhdGNoIDUuNy4wMjkKK1Byb2JsZW06ICAgIEVkaXRpbmcgYSBmaWxlIHdpdGggYW4gZXh0cmVtZWx5IGxvbmcgbmFtZSBjcmFzaGVkIFZpbS4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBsZW5ndGggb2YgdGhlIG5hbWUgd2hlbiBzZXR0aW5nIHRoZSB3aW5kb3cgdGl0bGUuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA1LjcuMDMwCitQcm9ibGVtOiAgICBBICI6bWFrZSIgb3IgIjpncmVwIiBjb21tYW5kIHdpdGggYSB2ZXJ5IGxvbmcgYXJndW1lbnQgY291bGQgY2F1c2UKKwkgICAgYSBjcmFzaC4KK1NvbHV0aW9uOiAgIEFsbG9jYXRlIHRoZSBidWZmZXIgZm9yIHRoZSBzaGVsbCBjb21tYW5kLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92ZXJzaW9uNi50eHQgYi9ydW50aW1lL2RvYy92ZXJzaW9uNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3Y2Y5MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZlcnNpb242LnR4dApAQCAtMCwwICsxLDEzODQ2IEBACisqdmVyc2lvbjYudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA3CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworV2VsY29tZSB0byBWaW0gVmVyc2lvbiA2LjAhICBBIGxhcmdlIG51bWJlciBvZiBmZWF0dXJlcyBoYXMgYmVlbiBhZGRlZC4gIFRoaXMKK2ZpbGUgbWVudGlvbnMgYWxsIHRoZSBuZXcgaXRlbXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQsIGNoYW5nZXMgdG8gZXhpc3RpbmcKK2ZlYXR1cmVzIGFuZCBidWcgZml4ZXMgY29tcGFyZWQgdG8gVmltIDUueC4KKworU2VlIHx2aV9kaWZmLnR4dHwgZm9yIGFuIG92ZXJ2aWV3IG9mIGRpZmZlcmVuY2VzIGJldHdlZW4gVmkgYW5kIFZpbSA2LjAuCitTZWUgfHZlcnNpb240LnR4dHwgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gVmltIDMuMCBhbmQgVmltIDQuMC4KK1NlZSB8dmVyc2lvbjUudHh0fCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gNC4wIGFuZCBWaW0gNS4wLgorCitJTkNPTVBBVElCTEUgQ0hBTkdFUwkJCXxpbmNvbXBhdGlibGUtNnwKKworQ3Vyc29yIHBvc2l0aW9uIGluIFZpc3VhbCBtb2RlCQl8Y3VycG9zLXZpc3VhbHwKK3N1YnN0aXR1dGUgY29tbWFuZCBWaSBjb21wYXRpYmxlCXxzdWJzdGl0dXRlLUNSfAorZ2xvYmFsIG9wdGlvbiB2YWx1ZXMgaW50cm9kdWNlZAkJfG5ldy1nbG9iYWwtdmFsdWVzfAorJ2ZpbGVlbmNvZGluZycgY2hhbmdlZAkJCXxmaWxlZW5jb2RpbmctY2hhbmdlZHwKK0RpZ3JhcGhzIGNoYW5nZWQJCQl8ZGlncmFwaHMtY2hhbmdlZHwKK0ZpbGV0eXBlIGRldGVjdGlvbiBjaGFuZ2VkCQl8ZmlsZXR5cGVkZXRlY3QtY2hhbmdlZHwKK1VubGlzdGVkIGJ1ZmZlcnMgaW50cm9kdWNlZAkJfG5ldy11bmxpc3RlZC1idWZmZXJzfAorQ1RSTC1VIGluIENvbW1hbmQtbGluZSBtb2RlIGNoYW5nZWQJfENUUkwtVS1jaGFuZ2VkfAorQ3RhZ3MgZ29uZQkJCQl8Y3RhZ3MtZ29uZXwKK0RvY3VtZW50YXRpb24gcmVvcmdhbml6ZWQJCXxkb2N1bWVudGF0aW9uLTZ8CitNb2RlbGVzcyBzZWxlY3Rpb24gYW5kIGNsaXBib2FyZAl8bW9kZWxlc3MtYW5kLWNsaXBib2FyZHwKK1NtYWxsIGluY29tcGF0aWJpbGl0aWVzCQkJfGluY29tcC1zbWFsbC02fAorCitORVcgRkVBVFVSRVMJCQkJfG5ldy02fAorCitGb2xkaW5nCQkJCQl8bmV3LWZvbGRpbmd8CitWZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MJCXxuZXctdmVydHNwbGl0fAorRGlmZiBtb2RlCQkJCXxuZXctZGlmZi1tb2RlfAorRWFzeSBWaW06IGNsaWNrLWFuZC10eXBlCQl8bmV3LWV2aW18CitVc2VyIG1hbnVhbAkJCQl8bmV3LXVzZXItbWFudWFsfAorRmxleGlibGUgaW5kZW50aW5nCQkJfG5ldy1pbmRlbnQtZmxleHwKK0V4dGVuZGVkIHNlYXJjaCBwYXR0ZXJucwkJfG5ldy1zZWFyY2hwYXR8CitVVEYtOCBzdXBwb3J0CQkJCXxuZXctdXRmLTh8CitNdWx0aS1sYW5ndWFnZSBzdXBwb3J0CQkJfG5ldy1tdWx0aS1sYW5nfAorUGx1Z2luIHN1cHBvcnQJCQkJfG5ldy1wbHVnaW5zfAorRmlsZXR5cGUgcGx1Z2lucwkJCXxuZXctZmlsZXR5cGUtcGx1Z2luc3wKK0ZpbGUgYnJvd3NlcgkJCQl8bmV3LWZpbGUtYnJvd3NlcnwKK0VkaXRpbmcgZmlsZXMgb3ZlciBhIG5ldHdvcmsJCXxuZXctbmV0d29yay1maWxlc3wKK1dpbmRvdyBmb3IgY29tbWFuZC1saW5lIGVkaXRpbmcJCXxuZXctY21kd2lufAorRGVidWdnaW5nIG1vZGUJCQkJfG5ldy1kZWJ1Zy1tb2RlfAorQ3Vyc29yIGluIHZpcnR1YWwgcG9zaXRpb24JCXxuZXctdmlydGVkaXR8CitEZWJ1Z2dlciBpbnRlcmZhY2UJCQl8bmV3LWRlYnVnLWl0ZnwKK0NvbW11bmljYXRpb24gYmV0d2VlbiBWaW1zCQl8bmV3LXZpbS1zZXJ2ZXJ8CitCdWZmZXIgdHlwZSBvcHRpb25zCQkJfG5ldy1idWZ0eXBlfAorUHJpbnRpbmcJCQkJfG5ldy1wcmludGluZ3wKK1BvcnRzCQkJCQl8cG9ydHMtNnwKK1F1aWNrZml4IGV4dGVuZGVkCQkJfHF1aWNrZml4LTZ8CitPcGVyYXRvciBtb2RpZmllcnMJCQl8bmV3LW9wZXJhdG9yLW1vZHwKK1NlYXJjaCBQYXRoCQkJCXxuZXctc2VhcmNoLXBhdGh8CitXcml0aW5nIGZpbGVzIGltcHJvdmVkCQkJfG5ldy1maWxlLXdyaXRpbmd8CitBcmd1bWVudCBsaXN0CQkJCXxuZXctYXJndW1lbnQtbGlzdHwKK1Jlc3RvcmUgYSBWaWV3CQkJCXxuZXctVmlld3wKK0NvbG9yIHNjaGVtZXMJCQkJfG5ldy1jb2xvci1zY2hlbWVzfAorVmFyaW91cyBuZXcgaXRlbXMJCQl8bmV3LWl0ZW1zLTZ8CisKK0lNUFJPVkVNRU5UUwkJCQl8aW1wcm92ZW1lbnRzLTZ8CisKK0NPTVBJTEUgVElNRSBDSEFOR0VTCQkJfGNvbXBpbGUtY2hhbmdlcy02fAorCitCVUcgRklYRVMJCQkJfGJ1Zy1maXhlcy02fAorCitWRVJTSU9OIDYuMQkJCXx2ZXJzaW9uLTYuMXwKK0NoYW5nZWQJCQkJCXxjaGFuZ2VkLTYuMXwKK0FkZGVkCQkJCQl8YWRkZWQtNi4xfAorRml4ZWQJCQkJCXxmaXhlZC02LjF8CisKK1ZFUlNJT04gNi4yCQkJfHZlcnNpb24tNi4yfAorQ2hhbmdlZAkJCQkJfGNoYW5nZWQtNi4yfAorQWRkZWQJCQkJCXxhZGRlZC02LjJ8CitGaXhlZAkJCQkJfGZpeGVkLTYuMnwKKworVkVSU0lPTiA2LjMJCQl8dmVyc2lvbi02LjN8CitDaGFuZ2VkCQkJCQl8Y2hhbmdlZC02LjN8CitBZGRlZAkJCQkJfGFkZGVkLTYuM3wKK0ZpeGVkCQkJCQl8Zml4ZWQtNi4zfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lOQ09NUEFUSUJMRSBDSEFOR0VTCQkJCSppbmNvbXBhdGlibGUtNioKKworVGhlc2UgY2hhbmdlcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggcHJldmlvdXMgcmVsZWFzZXMuICBDaGVjayB0aGlzIGxpc3QgaWYgeW91CitydW4gaW50byBhIHByb2JsZW0gd2hlbiB1cGdyYWRpbmcgZnJvbSBWaW0gNS54IHRvIDYuMAorCisKK0N1cnNvciBwb3NpdGlvbiBpbiBWaXN1YWwgbW9kZQkJCSpjdXJwb3MtdmlzdWFsKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gZ29pbmcgZnJvbSBvbmUgd2luZG93IHRvIGFub3RoZXIgd2luZG93IG9uIHRoZSBzYW1lIGJ1ZmZlciB3aGlsZSBpbgorVmlzdWFsIG1vZGUsIHRoZSBjdXJzb3IgcG9zaXRpb24gb2YgdGhlIG90aGVyIHdpbmRvdyBpcyBhZGp1c3RlZCB0byBrZWVwIHRoZQorc2FtZSBWaXN1YWwgYXJlYS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBzdGFydCBvZiB0aGUgVmlzdWFsIGFyZWEgaW4gb25lCit3aW5kb3cgYW5kIHRoZSBlbmQgaW4gYW5vdGhlci4gIEluIHZpbSA1LnggdGhlIGN1cnNvciBwb3NpdGlvbiBvZiB0aGUgb3RoZXIKK3dpbmRvdyB3b3VsZCBiZSB1c2VkLCB3aGljaCBjb3VsZCBiZSBhbnl3aGVyZSBhbmQgd2FzIG5vdCB2ZXJ5IHVzZWZ1bC4KKworCitTdWJzdGl0dXRlIGNvbW1hbmQgVmkgY29tcGF0aWJsZQkJKnN1YnN0aXR1dGUtQ1IqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3Vic3RpdHV0ZSBzdHJpbmcgKHRoZSAidG8iIHBhcnQgb2YgdGhlIHN1YnN0aXR1dGUgY29tbWFuZCkgaGFzIGJlZW4gbWFkZQorVmkgY29tcGF0aWJsZS4gIFByZXZpb3VzbHkgYSBDVFJMLVYgaGFkIGEgc3BlY2lhbCBtZWFuaW5nIGFuZCBjb3VsZCBiZSB1c2VkIHRvCitwcmV2ZW50IGEgPENSPiB0byBpbnNlcnQgYSBsaW5lIGJyZWFrLiAgVGhpcyBtYWRlIGl0IGltcG9zc2libGUgdG8gaW5zZXJ0IGEKK0NUUkwtViBiZWZvcmUgYSBsaW5lIGJyZWFrLiAgTm93IGEgYmFja3NsYXNoIGlzIHVzZWQgdG8gcHJldmVudCBhIDxDUj4gdG8KK2NhdXNlIGEgbGluZSBicmVhay4gIFNpbmNlIHRoZSBudW1iZXIgb2YgYmFja3NsYXNoZXMgaXMgaGFsdmVkLCBpdCBpcyBzdGlsbAorcG9zc2libGUgdG8gaW5zZXJ0IGEgbGluZSBicmVhayBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgVGhpcyBub3cgd29ya3MganVzdAorbGlrZSBWaSwgYnV0IGl0J3Mgbm90IGNvbXBhdGlibGUgd2l0aCBWaW0gdmVyc2lvbnMgYmVmb3JlIDYuMC4KKworV2hlbiBhICI6cyIgY29tbWFuZCBkb2Vzbid0IG1ha2UgYW55IHN1YnN0aXR1dGlvbnMsIGl0IG5vIGxvbmdlciBzZXRzIHRoZSAnWworYW5kICddIG1hcmtzLiAgVGhpcyBpcyBub3QgcmVsYXRlZCB0byBWaSwgc2luY2UgaXQgZG9lc24ndCBoYXZlIHRoZXNlIG1hcmtzLgorCisKK0dsb2JhbCBvcHRpb24gdmFsdWVzIGludHJvZHVjZWQJCQkqbmV3LWdsb2JhbC12YWx1ZXMqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBub3cgZ2xvYmFsIHZhbHVlcyBmb3Igb3B0aW9ucyB3aGljaCBhcmUgbG9jYWwgdG8gYSBidWZmZXIgb3Igd2luZG93LgorUHJldmlvdXNseSB0aGUgbG9jYWwgb3B0aW9ucyB3ZXJlIGNvcGllZCBmcm9tIG9uZSBidWZmZXIgdG8gYW5vdGhlci4gIFdoZW4KK2VkaXRpbmcgYW5vdGhlciBmaWxlIHRoaXMgY291bGQgY2F1c2Ugb3B0aW9uIHZhbHVlcyBmcm9tIGEgbW9kZWxpbmUgdG8gYmUgdXNlZAorZm9yIHRoZSB3cm9uZyBmaWxlLiAgTm93IHRoZSBnbG9iYWwgdmFsdWVzIGFyZSB1c2VkIHdoZW4gZW50ZXJpbmcgYSBidWZmZXIKK3RoYXQgaGFzIG5vdCBiZWVuIHVzZWQgYmVmb3JlLiAgQWxzbywgd2hlbiBlZGl0aW5nIGFub3RoZXIgYnVmZmVyIGluIGEgd2luZG93LAordGhlIGxvY2FsIHdpbmRvdyBvcHRpb25zIGFyZSByZXNldCB0byB0aGVpciBnbG9iYWwgdmFsdWVzLiAgVGhlICI6c2V0IiBjb21tYW5kCitzZXRzIGJvdGggdGhlIGxvY2FsIGFuZCBnbG9iYWwgdmFsdWVzLCB0aGlzIGlzIHN0aWxsIGNvbXBhdGlibGUuICBCdXQgYQorbW9kZWxpbmUgb25seSBzZXRzIHRoZSBsb2NhbCB2YWx1ZSwgdGhpcyBpcyBub3QgYmFja3dhcmRzIGNvbXBhdGlibGUuCisKKyI6bGV0ICZvcHQgPSB2YWwiIG5vdyBzZXRzIHRoZSBsb2NhbCBhbmQgZ2xvYmFsIHZhbHVlcywgbGlrZSAiOnNldCIuICBOZXcKK2NvbW1hbmRzIGhhdmUgYmVlbiBhZGRlZCB0byBzZXQgdGhlIGdsb2JhbCBvciBsb2NhbCB2YWx1ZToKKwk6bGV0ICZvcHQgPSB2YWwJCWxpa2UgIjpzZXQiCisJOmxldCAmZzpvcHQgPSB2YWwJbGlrZSAiOnNldGdsb2JhbCIKKwk6bGV0ICZsOm9wdCA9IHZhbAlsaWtlICI6c2V0bG9jYWwiCisKKworJ2ZpbGVlbmNvZGluZycgY2hhbmdlZAkJCQkqZmlsZWVuY29kaW5nLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKydmaWxlZW5jb2RpbmcnIHdhcyB1c2VkIGluIFZpbSA1LnggdG8gc2V0IHRoZSBlbmNvZGluZyB1c2VkIGluc2lkZSBhbGwgb2YgVmltLgorVGhpcyB3YXMgYSBiaXQgc3RyYW5nZSwgYmVjYXVzZSBpdCB3YXMgbG9jYWwgdG8gYSBidWZmZXIgYW5kIHdvcmtlZCBmb3IgYWxsCitidWZmZXJzLiAgSXQgY291bGQgbmV2ZXIgYmUgZGlmZmVyZW50IGJldHdlZW4gYnVmZmVycywgYmVjYXVzZSBpdCBjaGFuZ2VkIHRoZQord2F5IHRleHQgaW4gYWxsIGJ1ZmZlcnMgd2FzIGludGVycHJldGVkLgorSXQgaXMgbm93IHVzZWQgZm9yIHRoZSBlbmNvZGluZyBvZiB0aGUgZmlsZSByZWxhdGVkIHRvIHRoZSBidWZmZXIuICBJZiB5b3UKK3N0aWxsIHNldCAnZmlsZWVuY29kaW5nJyBpdCBpcyBsaWtlbHkgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRldGVjdGVkCitlbmNvZGluZyBmcm9tICdmaWxlZW5jb2RpbmdzJywgdGh1cyBpdCBpcyAibW9zdGx5IGhhcm1sZXNzIi4KK1RoZSBvbGQgRmlsZUVuY29kaW5nIGF1dG9jb21tYW5kIG5vdyBkb2VzIHRoZSBzYW1lIGFzIHRoZSBuZXcgRW5jb2RpbmdDaGFuZ2VkCitldmVudC4KKworCitEaWdyYXBocyBjaGFuZ2VkCQkJCSpkaWdyYXBocy1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBkaWdyYXBocyBub3cgY29ycmVzcG9uZCB0byBSRkMxMzQ1LiAgVGhpcyBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tCit3aGF0IHdhcyB1c2VkIGluIFZpbSA1LnguIHxkaWdyYXBoc3wKKworCitGaWxldHlwZSBkZXRlY3Rpb24gY2hhbmdlZAkJCSpmaWxldHlwZWRldGVjdC1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGV0eXBlIGRldGVjdGlvbiBwcmV2aW91c2x5IHdhcyB1c2luZyB0aGUgImZpbGV0eXBlIiBhdXRvY29tbWFuZCBncm91cC4KK1RoaXMgY2F1c2VkIGNvbmZ1c2lvbiB3aXRoIHRoZSBGaWxlVHlwZSBldmVudCBuYW1lIChjYXNlIGlzIGlnbm9yZWQpLiAgVGhlCitncm91cCBpcyBub3cgY2FsbGVkICJmaWxldHlwZWRldGVjdCIuICBJdCBzdGlsbCB3b3JrcywgYnV0IGlmIHRoZSAiZmlsZXR5cGUiCitncm91cCBpcyB1c2VkIHRoZSBhdXRvY29tbWFuZHMgd2lsbCBub3QgYmUgcmVtb3ZlZCBieSAiOmZpbGV0eXBlIG9mZiIuCisgICBUaGUgc3VwcG9ydCBmb3IgJ3J1bnRpbWVwYXRoJyBoYXMgbWFkZSB0aGUgIm15ZmlsZXR5cGVmaWxlIiBhbmQKKyJteXN5bnRheGZpbGUiIG1lY2hhbmlzbSBvYnNvbGV0ZS4gIFRoZXkgYXJlIHN0aWxsIHVzZWQgZm9yIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eS4KKworVGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgRmlsZVR5cGUgZXZlbnQgYW5kIHNldHRpbmcgdGhlICdzeW50YXgnIG9wdGlvbiB3YXMKK3ByZXZpb3VzbHkgaW4gdGhlICJzeW50YXgiIGF1dG9jb21tYW5kIGdyb3VwLiAgVGhhdCBjYXVzZWQgY29uZnVzaW9uIHdpdGggdGhlCitTeW50YXggZXZlbnQgbmFtZS4gIFRoZSBncm91cCBpcyBub3cgY2FsbGVkICJzeW50YXhzZXQiLgorCitUaGUgZGlzdHJpYnV0ZWQgc3ludGF4IGZpbGVzIG5vIGxvbmdlciBjb250YWluICJzeW50YXggY2xlYXIiLiAgVGhhdCBtYWtlcyBpdAorcG9zc2libGUgdG8gaW5jbHVkZSBvbmUgaW4gdGhlIG90aGVyIHdpdGhvdXQgdHJpY2tzLiAgVGhlIHN5bnRheCBpcyBub3cKK2NsZWFyZWQgd2hlbiB0aGUgJ3N5bnRheCcgb3B0aW9uIGlzIHNldCAoYnkgYW4gYXV0b2NvbW1hbmQgYWRkZWQgZnJvbQorc3lubG9hZC52aW0pLiAgVGhpcyBtYWtlcyB0aGUgc3ludGF4IGNsZWFyZWQgd2hlbiB0aGUgdmFsdWUgb2YgJ3N5bnRheCcgZG9lcworbm90IGNvcnJlc3BvbmQgdG8gYSBzeW50YXggZmlsZS4gIFByZXZpb3VzbHkgdGhlIGV4aXN0aW5nIGhpZ2hsaWdodGluZyB3YXMKK2tlcHQuCisKKworVW5saXN0ZWQgYnVmZmVycyBpbnRyb2R1Y2VkCQkJKm5ldy11bmxpc3RlZC1idWZmZXJzKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIG5vdyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBidWZmZXJzIHdoaWNoIGRvbid0IGFwcGVhciBpbiB0aGUgYnVmZmVyCitsaXN0IGFuZCBidWZmZXJzIHdoaWNoIGFyZSByZWFsbHkgbm90IGluIHRoZSBidWZmZXIgbGlzdC4gIENvbW1hbmRzIGxpa2UKKyI6bHMiLCAiOmJuZXh0IiwgIjpibGFzdCIgYW5kIHRoZSBCdWZmZXJzIG1lbnUgd2lsbCBza2lwIGJ1ZmZlcnMgbm90IGluIHRoZQorYnVmZmVyIGxpc3QuIHx1bmxpc3RlZC1idWZmZXJ8CitUaGUgJ2J1Zmxpc3RlZCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIG1ha2UgYSBidWZmZXIgYXBwZWFyIGluIHRoZSBidWZmZXIgbGlzdAorb3Igbm90LgorCitTZXZlcmFsIGNvbW1hbmRzIHRoYXQgcHJldmlvdXNseSBhZGRlZCBhIGJ1ZmZlciB0byB0aGUgYnVmZmVyIGxpc3Qgbm93IGNyZWF0ZQorYW4gdW5saXN0ZWQgYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IGEgIjpibmV4dCIgYW5kICI6YmFsbCIgd2lsbCBub3QgZmluZCB0aGVzZQorZmlsZXMgdW50aWwgdGhleSBoYXZlIGFjdHVhbGx5IGJlZW4gZWRpdGVkLiAgRm9yIGV4YW1wbGUsIGJ1ZmZlcnMgdXNlZCBmb3IgdGhlCithbHRlcm5hdGl2ZSBmaWxlIGJ5ICI6d3JpdGUgZmlsZSIgYW5kICI6cmVhZCBmaWxlIi4KKyAgIE90aGVyIGNvbW1hbmRzIHByZXZpb3VzbHkgY29tcGxldGVseSBkZWxldGVkIGEgYnVmZmVyIGFuZCBub3cgb25seSByZW1vdmUKK3RoZSBidWZmZXIgZnJvbSB0aGUgYnVmZmVyIGxpc3QuICBDb21tYW5kcyByZWx5aW5nIG9uIGEgYnVmZmVyIG5vdCB0byBiZQorcHJlc2VudCBtaWdodCBmYWlsLiAgRm9yIGV4YW1wbGUsIGEgIjpiZGVsZXRlIiBjb21tYW5kIGluIGFuIGF1dG9jb21tYW5kIHRoYXQKK3JlbGllZCBvbiBzb21ldGhpbmcgZm9sbG93aW5nIHRvIGZhaWwgKHdhcyB1c2VkIGluIHRoZSBhdXRvbWF0aWMgdGVzdHMpLgorfDpid2lwZW91dHwgY2FuIGJlIHVzZWQgZm9yIHRoZSBvbGQgbWVhbmluZyBvZiAiOmJkZWxldGUiLgorCitUaGUgQnVmRGVsZXRlIGF1dG9jb21tYW5kIGV2ZW50IGlzIG5vdyB0cmlnZ2VyZWQgd2hlbiBhIGJ1ZmZlciBpcyByZW1vdmVkIGZyb20KK3RoZSBidWZmZXIgbGlzdC4gIFRoZSBCdWZDcmVhdGUgZXZlbnQgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiBhIGJ1ZmZlciBpcworY3JlYXRlZCB0aGF0IGlzIGFkZGVkIHRvIHRoZSBidWZmZXIgbGlzdCwgb3Igd2hlbiBhbiBleGlzdGluZyBidWZmZXIgaXMgYWRkZWQKK3RvIHRoZSBidWZmZXIgbGlzdC4gIEJ1ZkFkZCBpcyBhIG5ldyBuYW1lIGZvciBCdWZDcmVhdGUuCitUaGUgbmV3IEJ1Zk5ldyBldmVudCBpcyBmb3IgY3JlYXRpbmcgYW55IGJ1ZmZlciBhbmQgQnVmV2lwZW91dCBmb3IgcmVhbGx5CitkZWxldGluZyBhIGJ1ZmZlci4KKworV2hlbiBkb2luZyBJbnNlcnQgbW9kZSBjb21wbGV0aW9uLCBvbmx5IGJ1ZmZlcnMgaW4gdGhlIGJ1ZmZlciBsaXN0IGFyZQorc2Nhbm5lZC4gIEFkZGVkIHRoZSAnVScgZmxhZyB0byAnY29tcGxldGUnIHRvIGRvIGNvbXBsZXRpb24gZnJvbSB1bmxpc3RlZAorYnVmZmVycy4KKworVW5saXN0ZWQgYnVmZmVycyBhcmUgbm90IHN0b3JlZCBpbiBhIHZpbWluZm8gZmlsZS4KKworCitDVFJMLVUgaW4gQ29tbWFuZC1saW5lIG1vZGUgY2hhbmdlZAkJKkNUUkwtVS1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXNpbmcgQ1RSTC1VIHdoZW4gZWRpdGluZyB0aGUgY29tbWFuZCBsaW5lIGNsZWFyZWQgdGhlIHdob2xlIGxpbmUuICBNb3N0CitzaGVsbHMgb25seSBkZWxldGUgdGhlIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBjdXJzb3IuICBNYWRlIGl0IHdvcmsgbGlrZSB0aGF0LgorKFN0ZXZlIFdhbGwpCisKK1lvdSBjYW4gZ2V0IHRoZSBvbGQgYmVoYXZpb3Igd2l0aCBDVFJMLUUgQ1RSTC1VOiA+CisJOmNub3JlbWFwIDxDLVU+IDxDLUU+PEMtVT4KKworCitDdGFncyBnb25lCQkJCQkqY3RhZ3MtZ29uZSoKKy0tLS0tLS0tLS0KKworQ3RhZ3MgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgdGhlIFZpbSBkaXN0cmlidXRpb24uICBJdCdzIG5vdyBhIGdyb3duLXVwIHByb2dyYW0KK2J5IGl0c2VsZiwgaXQgZGVzZXJ2ZXMgdG8gYmUgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseS4KK0N0YWdzIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwOi8vY3RhZ3Muc2YubmV0Ly4KKworCitEb2N1bWVudGF0aW9uIHJlb3JnYW5pemVkCQkJKmRvY3VtZW50YXRpb24tNioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gcmVvcmdhbml6ZWQsIGFuIGl0ZW0gbWF5IG5vdCBiZSB3aGVyZSB5b3UgZm91bmQgaXQKK2luIFZpbSA1LnguCistIFRoZSB1c2VyIG1hbnVhbCB3YXMgYWRkZWQsIHNvbWUgaXRlbXMgaGF2ZSBiZWVuIG1vdmVkIHRvIGl0IGZyb20gdGhlCisgIHJlZmVyZW5jZSBtYW51YWwuCistIFRoZSBxdWljayByZWZlcmVuY2UgaXMgbm93IGluIGEgc2VwYXJhdGUgZmlsZSAoc28gdGhhdCBpdCBjYW4gYmUgcHJpbnRlZCkuCisKK1RoZSBleGFtcGxlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiB3ZXJlIHByZXZpb3VzbHkgbWFya2VkIHdpdGggYSAiPiIgaW4gdGhlCitmaXJzdCBjb2x1bW4uICBUaGlzIG1hZGUgaXQgZGlmZmljdWx0IHRvIGNvcHkvcGFzdGUgdGhlbS4gIFRoZXJlIGlzIG5vdyBhCitzaW5nbGUgIj4iIGJlZm9yZSB0aGUgZXhhbXBsZSBhbmQgaXQgZW5kcyBhdCBhICI8IiBvciBhIG5vbi1ibGFuayBpbiB0aGUgZmlyc3QKK2NvbHVtbi4gIFRoaXMgYWxzbyBsb29rcyBiZXR0ZXIgd2l0aG91dCBoaWdobGlnaHRpbmcuCisKKydoZWxwZmlsZScgaXMgbm8gbG9uZ2VyIHVzZWQgdG8gZmluZCB0aGUgaGVscCB0YWdzIGZpbGUuICBUaGlzIGFsbG93cyBhIHVzZXIKK3RvIGFkZCBpdHMgb3duIGhlbHAgZmlsZXMgKGUuZy4sIGZvciBwbHVnaW5zKS4KKworCitNb2RlbGVzcyBzZWxlY3Rpb24gYW5kIGNsaXBib2FyZAkJKm1vZGVsZXNzLWFuZC1jbGlwYm9hcmQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbW9kZWxlc3Mgc2VsZWN0aW9uIGlzIHVzZWQgdG8gc2VsZWN0IHRleHQgd2hlbiBWaXN1YWwgbW9kZSBjYW4ndCBiZSB1c2VkLAorZm9yIGV4YW1wbGUgd2hlbiBlZGl0aW5nIHRoZSBjb21tYW5kIGxpbmUgb3IgYXQgdGhlIG1vcmUgcHJvbXB0LgorSW4gVmltIDUueCB0aGUgbW9kZWxlc3Mgc2VsZWN0aW9uIHdhcyBhbHdheXMgdXNlZC4gIE9uIE1TLVdpbmRvd3MgdGhpcyBjYXVzZWQKK3RoZSBjbGlwYm9hcmQgdG8gYmUgb3ZlcndyaXR0ZW4sIHdpdGggbm8gd2F5IHRvIGF2b2lkIHRoYXQuICBUaGUgbW9kZWxlc3MKK3NlbGVjdGlvbiBub3cgb2JleXMgdGhlICdhJyBhbmQgJ0EnIGZsYWdzIGluICdndWlvcHRpb25zJyBhbmQgImF1dG9zZWxlY3QiIGFuZAorImF1dG9zZWxlY3RtbCIgaW4gJ2NsaXBib2FyZCcuICBCeSBkZWZhdWx0IHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBjb3B5IG9uCitNUy1XaW5kb3dzLiAgVXNlIHRoZSB8Y19DVFJMLVl8IGNvbW1hbmQgdG8gbWFudWFsbHkgY29weSB0aGUgc2VsZWN0aW9uLgorCitUbyBnZXQgdGhlIG9sZCBiZWhhdmlvciBiYWNrLCBkbyB0aGlzOiA+CisKKwk6c2V0IGNsaXBib2FyZF49YXV0b3NlbGVjdG1sIGd1aW9wdGlvbnMrPUEKKworCitTbWFsbCBpbmNvbXBhdGliaWxpdGllcwkJCQkqaW5jb21wLXNtYWxsLTYqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisnYmFja3VwZGlyJywgJ2NkcGF0aCcsICdkaXJlY3RvcnknLCAnZXF1YWxwcmcnLCAnZXJyb3JmaWxlJywgJ2Zvcm1hdHByZycsCisnZ3JlcHByZycsICdoZWxwZmlsZScsICdtYWtlZWYnLCAnbWFrZXByZycsICdrZXl3b3JkcHJnJywgJ2NzY29wZXByZycsCisndmltaW5mbycgYW5kICdydW50aW1lcGF0aCcgY2FuIG5vIGxvbmdlciBiZSBzZXQgZnJvbSBhIG1vZGVsaW5lLCBmb3IgYmV0dGVyCitzZWN1cml0eS4KKworUmVtb3ZlZCAnXycgZnJvbSB0aGUgJ2JyZWFrYXQnIGRlZmF1bHQ6IEl0J3MgY29tbW9ubHkgdXNlZCBpbiBrZXl3b3Jkcy4KKworVGhlIGRlZmF1bHQgZm9yICdtb3VzZWhpZGUnIGlzIG9uLCBiZWNhdXNlIHRoaXMgd29ya3Mgd2VsbCBmb3IgbW9zdCBwZW9wbGUuCisKK1RoZSBBbWlnYSBiaW5hcnkgaXMgbm93IGFsd2F5cyBjb21waWxlZCB3aXRoICJiaWciIGZlYXR1cmVzLiAgVGhlICJiaWciIGJpbmFyeQorYXJjaGl2ZSBubyBsb25nZXIgZXhpc3RzLgorCitUaGUgaXRlbXMgIltST10iLCAiWytdIiwgIltoZWxwXSIsICJbUHJldmlld10iIGFuZCAiW2ZpbGV0eXBlXSIgaW4KKydzdGF0dXNsaW5lJyBubyBsb25nZXIgaGF2ZSBhIGxlYWRpbmcgc3BhY2UuCisKK05vbi1Vbml4IHN5c3RlbXM6IFdoZW4gZXhwYW5kaW5nIHdpbGRjYXJkcyBmb3IgdGhlIFZpbSBhcmd1bWVudHMsIGRvbid0IHVzZQorJ3N1ZmZpeGVzJy4gIEl0IG5vdyB3b3JrcyBhcyBpZiB0aGUgc2hlbGwgaGFkIGV4cGFuZGVkIHRoZSBhcmd1bWVudHMuCisKK1RoZSAnbGlzcCcsICdzbWFydGluZGVudCcgYW5kICdjaW5kZW50JyBvcHRpb25zIGFyZSBub3Qgc3dpdGNoZWQgb2ZmIHdoZW4KKydwYXN0ZScgaXMgc2V0LiAgVGhlIGF1dG8taW5kZW50aW5nIGlzIGRpc2FibGVkIHdoZW4gJ3Bhc3RlJyBpcyBzZXQsIGJ1dAorbWFudWFsIGluZGVudGluZyB3aXRoICI9IiBzdGlsbCB3b3Jrcy4KKworV2hlbiBmb3JtYXR0aW5nIHdpdGggIj0iIHVzZXMgJ2NpbmRlbnQnIG9yICdpbmRlbnRleHByJyBpbmRlbnRpbmcsIGFuZCB0aGVyZQoraXMgbm8gY2hhbmdlIGluIGluZGVudCwgdGhpcyBpcyBub3QgY291bnRlZCBhcyBhIGNoYW5nZSAoJ21vZGlmaWVkJyBpc24ndCBzZXQKK2FuZCB0aGVyZSBpcyBub3RoaW5nIHRvIHVuZG8pLgorCitSZXBvcnQgJ21vZGlmaWVkJyBhcyBjaGFuZ2VkIHdoZW4gJ2ZpbGVlbmNvZGluZycgb3IgJ2ZpbGVmb3JtYXQnIHdhcyBzZXQuCitUaHVzIGl0IHJlZmxlY3RzIHRoZSBwb3NzaWJpbGl0eSB0byBhYmFuZG9uIHRoZSBidWZmZXIgd2l0aG91dCBsb3NpbmcgY2hhbmdlcy4KKworVGhlICJTYXZlIEFzIiBtZW51IGVudHJ5IG5vdyBlZGl0cyB0aGUgc2F2ZWQgZmlsZS4gIE1vc3QgcGVvcGxlIGV4cGVjdCBpdCB0bword29yayBsaWtlIHRoaXMuCisKK0EgYnVmZmVyIGZvciBhIGRpcmVjdG9yeSBpcyBubyBsb25nZXIgYWRkZWQgdG8gdGhlIEJ1ZmZlcnMgbWVudS4KKworUmVuYW1lZCA8UmV0dXJuPiB0byA8RW50ZXI+LCBzaW5jZSB0aGF0J3Mgd2hhdCBpdCdzIGNhbGxlZCBvbiBtb3N0IGtleWJvYXJkcy4KK1RodXMgaXQncyBub3cgdGhlIGhpdC1lbnRlciBwcm9tcHQgaW5zdGVhZCBvZiB0aGUgaGl0LXJldHVybiBwcm9tcHQuCitDYW4gbWFwIDxFbnRlcj4ganVzdCBsaWtlIDxDUj4gb3IgPFJldHVybj4uCisKK1RoZSBkZWZhdWx0IGZvciB0aGUgJ3ZpbWluZm8nIG9wdGlvbiBpcyBub3cgJzIwLCI1MCxoIHdoZW4gJ2NvbXBhdGlibGUnIGlzbid0CitzZXQuICBNb3N0IHBlb3BsZSB3aWxsIHdhbnQgdG8gdXNlIGl0LCBpbmNsdWRpbmcgYmVnaW5uZXJzLCBidXQgaXQgcmVxdWlyZWQKK3NldHRpbmcgdGhlIG9wdGlvbiwgd2hpY2ggaXNuJ3QgdGhhdCBlYXN5LgorCitBZnRlciB1c2luZyAiOmNvbGRlciIgdGhlIG5ld2VyIGVycm9yIGxpc3RzIGFyZSBvdmVyd3JpdHRlbi4gIFRoaXMgbWFrZXMgaXQKK3Bvc3NpYmxlIHRvIHVzZSAiOmdyZXAiIHRvIGJyb3dzZSBpbiBhIHRyZWUtbGlrZSB3YXkuICBNdXN0IHVzZSAiOmNuZXdlciA5OSIKK3RvIGdldCB0aGUgb2xkIGJlaGF2aW9yLgorCitUaGUgcGF0dGVybnMgaW4gJ2Vycm9yZm9ybWF0JyB3b3VsZCBzb21ldGltZXMgaWdub3JlIGNhc2UgKE1TLVdpbmRvd3MpIGFuZAorc29tZXRpbWVzIG5vdCAoVW5peCkuICBOb3cgY2FzZSBpcyBhbHdheXMgaWdub3JlZC4gIEFkZCAiXEMiIHRvIHRoZSBwYXR0ZXJuIHRvCittYXRjaCBjYXNlLgorCitUaGUgMTYgYml0IE1TLURPUyB2ZXJzaW9uIGlzIG5vdyBjb21waWxlZCB3aXRob3V0IHRoZSArbGlzdGNtZHMgZmVhdHVyZQorKGJ1ZmZlciBsaXN0IG1hbmlwdWxhdGlvbiBjb21tYW5kcykuICBUaGV5IGFyZSBub3Qgb2Z0ZW4gbmVlZGVkIGFuZCB0aGlzCitleGVjdXRhYmxlIG5lZWRzIHRvIGJlIHNtYWxsZXIuCisKKydzZXNzaW9ub3B0aW9ucycgbm93IGluY2x1ZGVzICJjdXJkaXIiIGJ5IGRlZmF1bHQuICBUaGlzIG1lYW5zIHRoYXQgcmVzdG9yaW5nCithIHNlc3Npb24gd2lsbCByZXN1bHQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGJlaW5nIHJlc3RvcmVkLCBpbnN0ZWFkIG9mCitnb2luZyB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBzZXNzaW9uIGZpbGUgaXMgbG9jYXRlZC4KKworQSBzZXNzaW9uIGRlbGV0ZWQgYWxsIGJ1ZmZlcnMsIGRlbGV0aW5nIGFsbCBtYXJrcy4gIE5vdyBrZWVwIHRoZSBidWZmZXIgbGlzdCwKK2l0IHNob3VsZG4ndCBodXJ0IGZvciBzb21lIGV4aXN0aW5nIGJ1ZmZlcnMgdG8gcmVtYWluIHByZXNlbnQuCitXaGVuIHRoZSBhcmd1bWVudCBsaXN0IGlzIGVtcHR5ICI6YXJnZGVsICoiIGNhdXNlZCBhbiBlcnJvciBtZXNzYWdlLgorCitObyBsb25nZXIgcHV0IHRoZSBzZWFyY2ggcGF0dGVybiBmcm9tIGEgdGFnIGp1bXAgaW4gdGhlIGhpc3RvcnkuCisKK1VzZSAiU3BlY2lhbEtleSIgaGlnaGxpZ2h0aW5nIGZvciB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGluc3RlYWQgb2YgIk5vblRleHQiLgorVGhlIGlkZWEgaXMgdGhhdCB1bnByaW50YWJsZSB0ZXh0IG9yIGFueSB0ZXh0IHRoYXQncyBkaXNwbGF5ZWQgZGlmZmVyZW50bHkKK2Zyb20gdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgaXMgdXNpbmcgIlNwZWNpYWxLZXkiLCBhbmQgIk5vblRleHQiIGlzIHVzZWQKK2ZvciB0ZXh0IHRoYXQgZG9lc24ndCByZWFsbHkgZXhpc3QgaW4gdGhlIGZpbGUuCisKK01vdGlmIG5vdyB1c2VzIHRoZSBzeXN0ZW0gZGVmYXVsdCBjb2xvcnMgZm9yIHRoZSBtZW51IGFuZCBzY3JvbGxiYXIuICBVc2VkIHRvCitiZSBncmV5LiAgSXQncyBzdGlsbCBwb3NzaWJsZSB0byBzZXQgdGhlIGNvbG9ycyB3aXRoICI6aGlnaGxpZ2h0IiBjb21tYW5kcyBhbmQKK3Jlc291cmNlcy4KKworRm9ybWF0dGluZyB0ZXh0IHdpdGggImdxIiBicmVha3MgYSBwYXJhZ3JhcGggYXQgYSBub24tZW1wdHkgYmxhbmsgbGluZS4KK1ByZXZpb3VzbHkgdGhlIGxpbmUgd291bGQgYmUgcmVtb3ZlZCwgd2hpY2ggd2Fzbid0IHZlcnkgdXNlZnVsLgorCisiOm5vcm1hbCIgZG9lcyBubyBsb25nZXIgaGFuZyB3aGVuIHRoZSBhcmd1bWVudCBlbmRzIGluIGhhbGYgYSBjb21tYW5kLgorUHJldmlvdXNseSBWaW0gd291bGQgd2FpdCBmb3IgbW9yZSBjaGFyYWN0ZXJzIHRvIGJlIHR5cGVkLCB3aXRob3V0IHVwZGF0aW5nCit0aGUgc2NyZWVuLiAgTm93IGl0IHByZXRlbmRzIGFuIDxFc2M+IHdhcyB0eXBlZC4KKworQml0bWFwcyBmb3IgdGhlIHRvb2xiYXIgYXJlIG5vIGxvbmdlciBzZWFyY2hlZCBmb3IgaW4gIiRWSU0vYml0bWFwcyIgYnV0IGluCit0aGUgImJpdG1hcHMiIGRpcmVjdG9yaWVzIGluICdydW50aW1lcGF0aCcuCisKK05vdyB1c2UgdGhlIENtZGxpbmUtbW9kZSBtZW51cyBmb3IgdGhlIGhpdC1lbnRlciBwcm9tcHQgaW5zdGVhZCBvZiB0aGUgTm9ybWFsCittb2RlIG1lbnVzLiAgVGhpcyBnZW5lcmFsbHkgd29ya3MgYmV0dGVyIGFuZCBhbGxvd3MgdXNpbmcgdGhlICJDb3B5IiBtZW51IHRvCitwcm9kdWNlIENUUkwtWSB0byBjb3B5IHRoZSBtb2RlbGVzcyBzZWxlY3Rpb24uCisKK01vdmVkIHRoZSBmb250IHNlbGVjdGlvbiBmcm9tIHRoZSBXaW5kb3cgdG8gdGhlIEVkaXQgbWVudSwgdG9nZXRoZXIgd2l0aCB0aGUKK290aGVyIHNldHRpbmdzLgorCitUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yICdpc2ZuYW1lJyBpbmNsdWRlIG1vcmUgY2hhcmFjdGVycyB0byBtYWtlICJnZiIgd29yaworYmV0dGVyLgorCitDaGFuZ2VkIHRoZSBsaWNlbnNlIGZvciB0aGUgZG9jdW1lbnRhdGlvbiB0byB0aGUgT3BlbiBQdWJsaWNhdGlvbiBMaWNlbnNlLgorVGhpcyBzZWVtZWQgZmFpciwgY29uc2lkZXJpbmcgdGhlIGluY2x1c2lvbiBvZiBwYXJ0cyBvZiB0aGUgVmltIGJvb2ssIHdoaWNoIGlzCithbHNvIHB1Ymxpc2hlZCB1bmRlciB0aGUgT1BMLiAgVGhlIGRvd25zaWRlIGlzIHRoYXQgd2UgY2FuJ3QgZm9yY2Ugc29tZW9uZSB3aG8KK3dvdWxkIHNlbGwgY29waWVzIG9mIHRoZSBtYW51YWwgdG8gY29udHJpYnV0ZSB0byBVZ2FuZGEuCisKK0FmdGVyICAiYXl5ICBkb24ndCBsZXQgICIieXkgIG9yICA6bGV0IEAiID0gdmFsICBvdmVyd3JpdGUgdGhlICJhIHJlZ2lzdGVyLgorVXNlIHRoZSB1bm5hbWVkIHJlZ2lzdGVyIGluc3RlYWQuCisKK01TRE9TOiBBIHBhdHRlcm4gIiouKiIgcHJldmlvdXNseSBhbHNvIG1hdGNoZWQgYSBmaWxlIG5hbWUgd2l0aG91dCBhIGRvdC4KK1RoaXMgd2FzIGluY29uc2lzdGVudCB3aXRoIG90aGVyIHZlcnNpb25zLgorCitJbiBJbnNlcnQgbW9kZSwgQ1RSTC1PIENUUkwtXCBDVFJMLU4ge2NtZH0gcmVtYWlucyBpbiBOb3JtYWwgbW9kZS4gIFByZXZpb3VzbHkKK2l0IHdvdWxkIGdvIGJhY2sgdG8gSW5zZXJ0IG1vZGUsIHRodXMgY29uZnVzaW5nIHRoZSBtZWFuaW5nIG9mIENUUkwtXCBDVFJMLU4sCit3aGljaCBpcyBzdXBwb3NlZCB0byB0YWtlIHVzIHRvIE5vcm1hbCBtb2RlIChlc3BlY2lhbGx5IGluICI6YW1lbnUiKS4KKworQWxsb3cgdXNpbmcgIjoiIGNvbW1hbmRzIGFmdGVyIGFuIG9wZXJhdG9yLiAgQ291bGQgYmUgdXNlZCB0byBpbXBsZW1lbnQgYSBuZXcKK21vdmVtZW50IGNvbW1hbmQuICBUaHVzIGl0IG5vIGxvbmdlciBhYm9ydHMgYSBwZW5kaW5nIG9wZXJhdG9yLgorCitGb3IgdGhlIEFtaWdhIHRoZSAiLWQge2RldmljZX0iIGFyZ3VtZW50IHdhcyBwb3NzaWJsZS4gIFdoZW4gY29tcGlsZWQgd2l0aCB0aGUKK2RpZmYgZmVhdHVyZSwgdGhpcyBubyBsb25nZXIgd29ya3MuICBVc2UgIi1kZXYge2RldmljZX0iIGluc3RlYWQuIHwtZGV2fAorCitNYWRlIHRoZSBkZWZhdWx0IG1hcHBpbmdzIGZvciA8Uy1JbnNlcnQ+IGluIEluc2VydCBtb2RlIGluc2VydCB0aGUgdGV4dAorbGl0ZXJhbGx5LCBhdm9pZHMgdGhhdCBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSBCUyBjYXVzZSBzaWRlIGVmZmVjdHMuCisKK1VzaW5nICI6Y29uZmlybSIgYXBwbGllZCB0byB0aGUgcmVzdCBvZiB0aGUgbGluZS4gIE5vdyBpdCBhcHBsaWVzIG9ubHkgdG8gdGhlCitjb21tYW5kIHJpZ2h0IGFmdGVyIGl0LiAgVGh1cyAiOmNvbmZpcm0gaWYgeCB8IGVkaXQgfCBlbmRpZiIgbm8gbG9uZ2VyIHdvcmtzLAordXNlICI6aWYgeCB8IGNvbmZpcm0gZWRpdCB8IGVuZGlmIi4gIFRoaXMgd2FzIHRoZSBvcmlnaW5hbCBpbnRlbnRpb24sIHRoYXQgaXQKK3dvcmtlZCBkaWZmZXJlbnRseSB3YXMgYSBidWcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTkVXIEZFQVRVUkVTCQkJCQkJKm5ldy02KgorCitGb2xkaW5nCQkJCQkJCSpuZXctZm9sZGluZyoKKy0tLS0tLS0KKworVmltIGNhbiBub3cgZGlzcGxheSBhIGJ1ZmZlciB3aXRoIHRleHQgZm9sZGVkLiAgVGhpcyBhbGxvd3Mgb3ZlcnZpZXdpbmcgdGhlCitzdHJ1Y3R1cmUgb2YgYSBmaWxlIHF1aWNrbHkuICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHlhbmssIGRlbGV0ZSBhbmQgcHV0Citmb2xkZWQgdGV4dCwgZm9yIGV4YW1wbGUgdG8gbW92ZSBhIGZ1bmN0aW9uIHRvIGFub3RoZXIgcG9zaXRpb24uCisKK1RoZXJlIGlzIGEgd2hvbGUgYnVuY2ggb2YgbmV3IGNvbW1hbmRzIGFuZCBvcHRpb25zIHJlbGF0ZWQgdG8gZm9sZGluZy4KK1NlZSB8Zm9sZGluZ3wuCisKKworVmVydGljYWxseSBzcGxpdCB3aW5kb3dzCQkJCSpuZXctdmVydHNwbGl0KgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpbmRvd3MgY2FuIGFsc28gYmUgc3BsaXQgdmVydGljYWxseS4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaGF2ZSB3aW5kb3dzCitzaWRlIGJ5IHNpZGUuICBPbmUgbmljZSB1c2UgZm9yIHRoaXMgaXMgdG8gY29tcGFyZSB0d28gc2ltaWxhciBmaWxlcyAoc2VlCit8bmV3LWRpZmYtbW9kZXwpLiAgVGhlICdzY3JvbGxiaW5kJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3luY2hyb25pemUKK3Njcm9sbGluZy4KKworQSB2ZXJ0aWNhbCBzcGxpdCBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBjb21tYW5kczoKKwk6dnNwbGl0CSAgb3IgIENUUkwtVyB2ICBvciBDVFJMLVcgQ1RSTC1WCXw6dnNwbGl0fAorCTp2bmV3CQkJCQkJfDp2bmV3fAorCTp2ZXJ0aWNhbCB7Y21kfQkJCQkJfDp2ZXJ0aWNhbHwKK1RoZSBsYXN0IG9uZSBpcyBhIG1vZGlmaWVyLCB3aGljaCBoYXMgYSBtZWFuaW5nIGZvciBhbnkgY29tbWFuZCB0aGF0IHNwbGl0cyBhCit3aW5kb3cuICBGb3IgZXhhbXBsZTogPgorCTp2ZXJ0aWNhbCBzdGFnIG1haW4KK1dpbGwgdmVydGljYWxseSBzcGxpdCB0aGUgd2luZG93IGFuZCBqdW1wIHRvIHRoZSB0YWcgIm1haW4iIGluIHRoZSBuZXcgd2luZG93LgorCitNb3ZpbmcgZnJvbSB3aW5kb3cgdG8gd2luZG93IGhvcml6b250YWxseSBjYW4gYmUgZG9uZSB3aXRoIHRoZSB8Q1RSTC1XX2h8IGFuZAorfENUUkwtV19sfCBjb21tYW5kcy4gIFRoZSB8Q1RSTC1XX2t8IGFuZCB8Q1RSTC1XX2p8IGNvbW1hbmRzIGhhdmUgYmVlbiBjaGFuZ2VkCit0byBqdW1wIHRvIHRoZSB3aW5kb3cgYWJvdmUgb3IgYmVsb3cgdGhlIGN1cnNvciBwb3NpdGlvbi4KKworVGhlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHNwbGl0cyBjYW4gYmUgbWl4ZWQgYXMgeW91IGxpa2UuICBSZXNpemluZyB3aW5kb3dzCitpcyBlYXN5IHdoZW4gdXNpbmcgdGhlIG1vdXNlLCBqdXN0IHBvc2l0aW9uIHRoZSBwb2ludGVyIG9uIGEgc3RhdHVzIGxpbmUgb3IKK3ZlcnRpY2FsIHNlcGFyYXRvciBhbmQgZHJhZyBpdC4gIEluIHRoZSBHVUkgYSBzcGVjaWFsIG1vdXNlIHBvaW50ZXIgc2hhcGUKK2luZGljYXRlcyB3aGVyZSB5b3UgY2FuIGRyYWcgYSBzdGF0dXMgb3Igc2VwYXJhdG9yIGxpbmUuCisKK1RvIHJlc2l6ZSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MgdXNlIHRoZSB8Q1RSTC1XXzx8IGFuZCB8Q1RSTC1XXz58IGNvbW1hbmRzLgorVG8gbWFrZSBhIHdpbmRvdyB0aGUgbWF4aW11bSB3aWR0aCB1c2UgdGhlIENUUkwtVyB8IGNvbW1hbmQgfENUUkwtV19iYXJ8LgorCitUbyBmb3JjZSBhIG5ldyB3aW5kb3cgdG8gdXNlIHRoZSBmdWxsIHdpZHRoIG9yIGhlaWdodCBvZiB0aGUgVmltIHdpbmRvdywKK3RoZXNlIHR3byBtb2RpZmllcnMgYXJlIGF2YWlsYWJsZToKKwk6dG9wbGVmdCB7Y21kfQkJTmV3IHdpbmRvdyBhcHBlYXJzIGF0IHRoZSB0b3Agd2l0aCBmdWxsCisJCQkJd2lkdGggb3IgYXQgdGhlIGxlZnQgd2l0aCBmdWxsIGhlaWdodC4KKwk6Ym90cmlnaHQge2NtZH0JCU5ldyB3aW5kb3cgYXBwZWFycyBhdCB0aGUgYm90dG9tIHdpdGggZnVsbAorCQkJCXdpZHRoIG9yIGF0IHRoZSByaWdodCB3aXRoIGZ1bGwgaGVpZ2h0LgorVGhpcyBjYW4gYmUgY29tYmluZWQgd2l0aCAiOnZlcnRpY2FsIiB0byBmb3JjZSBhIHZlcnRpY2FsIHNwbGl0OiA+CisJOnZlcnQgYm90IGRzcGxpdCBERUJVRworVGhpcyB3aWxsIG9wZW4gYSB3aW5kb3cgYXQgdGhlIGZhciByaWdodCwgb2NjdXB5aW5nIHRoZSBmdWxsIGhlaWdodCBvZiB0aGUgVmltCit3aW5kb3csIHdpdGggdGhlIGN1cnNvciBvbiB0aGUgZmlyc3QgZGVmaW5pdGlvbiBvZiAiREVCVUciLgorVGhlIGhlbHAgd2luZG93IGlzIG9wZW5lZCBhdCB0aGUgdG9wLCBsaWtlICI6dG9wbGVmdCIgd2FzIHVzZWQsIGlmIHRoZSBjdXJyZW50Cit3aW5kb3cgaXMgZmV3ZXIgdGhhbiA4MCBjaGFyYWN0ZXJzIHdpZGUuCisKK0EgZmV3IG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBwcmVmZXJlbmNlcyBmb3IgdmVydGljYWxseSBzcGxpdCB3aW5kb3dzLgorVGhleSB3b3JrIHNpbWlsYXIgdG8gdGhlaXIgZXhpc3RpbmcgaG9yaXpvbnRhbCBlcXVpdmFsZW50czoKKwlob3Jpem9udGFsCXZlcnRpY2FsIH4KKwknc3BsaXRiZWxvdycJJ3NwbGl0cmlnaHQnCisJJ3dpbmhlaWdodCcJJ3dpbndpZHRoJworCSd3aW5taW5oZWlnaHQnCSd3aW5taW53aWR0aCcKK0l0J3MgcG9zc2libGUgdG8gc2V0ICd3aW5taW53aWR0aCcgdG8gemVybywgc28gdGhhdCB0ZW1wb3JhcmlseSB1bnVzZWQgd2luZG93cworaGFyZGx5IHRha2UgdXAgc3BhY2Ugd2l0aG91dCBjbG9zaW5nIHRoZW0uCisKK1RoZSBuZXcgJ2VhZGlyZWN0aW9uJyBvcHRpb24gdGVsbHMgd2hlcmUgJ2VxdWFsYWx3YXlzJyBhcHBsaWVzOgorCTpzZXQgZWFkaXJlY3Rpb249Ym90aAkJYm90aCBkaXJlY3Rpb25zCisJOnNldCBlYWRpcmVjdGlvbj12ZXIJCWVxdWFsaXplIHdpbmRvdyBoZWlnaHRzCisJOnNldCBlYWRpcmVjdGlvbj1ob3IJCWVxdWFsaXplIHdpbmRvd3Mgd2lkdGhzCitUaGlzIGNhbiBiZSB1c2VkIHRvIGF2b2lkIGNoYW5naW5nIHdpbmRvdyBzaXplcyB3aGVuIHlvdSB3YW50IHRvIGtlZXAgdGhlbS4KKworU2luY2Ugd2luZG93cyBjYW4gYmVjb21lIHF1aXRlIG5hcnJvdyB3aXRoIHZlcnRpY2FsIHNwbGl0cywgdGV4dCBsaW5lcyB3aWxsCitvZnRlbiBub3QgZml0LiAgVGhlICdzaWRlc2Nyb2xsb2ZmJyBoYXMgYmVlbiBhZGRlZCB0byBrZWVwIHNvbWUgY29udGV4dCBsZWZ0CithbmQgcmlnaHQgb2YgdGhlIGN1cnNvci4gIFRoZSAnbGlzdGNoYXJzJyBvcHRpb24gaGFzIGJlZW4gZXh0ZW5kZWQgd2l0aCB0aGUKKyJwcmVjZWRlcyIgaXRlbSwgdG8gc2hvdyBhICI8IiBmb3IgZXhhbXBsZSwgd2hlbiB0aGVyZSBpcyB0ZXh0IGxlZnQgb2ZmIHRoZQorc2NyZWVuLiAoVXR6LVV3ZSBIYXVzKQorCisiLU8iIGNvbW1hbmQgbGluZSBhcmd1bWVudDogTGlrZSAiLW8iIGJ1dCBzcGxpdCB3aW5kb3dzIHZlcnRpY2FsbHkuIChTY290dAorVXJiYW4pCisKK0FkZGVkIGNvbW1hbmRzIHRvIG1vdmUgdGhlIGN1cnJlbnQgd2luZG93IHRvIHRoZSB2ZXJ5IHRvcCAoQ1RSTC1XIEspLCBib3R0b20KKyhDVFJMLVcgSiksIGxlZnQgKENUUkwtVyBIKSBhbmQgcmlnaHQgKENUUkwtVyBMKS4gIEluIHRoZSBuZXcgcG9zaXRpb24gdGhlCit3aW5kb3cgdXNlcyB0aGUgZnVsbCB3aWR0aC9oZWlnaHQgb2YgdGhlIHNjcmVlbi4KKworV2hlbiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIHN0YXR1cyBsaW5lIGZvciBib3RoIHRoZSBmaWxlIG5hbWUgYW5kCit0aGUgcnVsZXIsIHVzZSB1cCB0byBoYWxmIHRoZSB3aWR0aCBmb3IgdGhlIHJ1bGVyLiAgVXNlZnVsIGZvciBuYXJyb3cgd2luZG93cy4KKworCitEaWZmIG1vZGUJCQkJCQkqbmV3LWRpZmYtbW9kZSoKKy0tLS0tLS0tLQorCitJbiBkaWZmIG1vZGUgVmltIHNob3dzIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3bywgdGhyZWUgb3IgZm91ciBmaWxlcy4KK0ZvbGRpbmcgaXMgdXNlZCB0byBoaWRlIHRoZSBwYXJ0cyBvZiB0aGUgZmlsZSB0aGF0IGFyZSBlcXVhbC4KK0hpZ2hsaWdodGluZyBpcyB1c2VkIHRvIHNob3cgZGVsZXRlZCBhbmQgY2hhbmdlZCBsaW5lcy4KK1NlZSB8ZGlmZi1tb2RlfC4KKworQW4gZWFzeSB3YXkgdG8gc3RhcnQgaW4gZGlmZiBtb2RlIGlzIHRvIHN0YXJ0IFZpbSBhcyAidmltZGlmZiBmaWxlMSBmaWxlMiIuCitBZGRlZCB0aGUgdmltZGlmZiBtYW5wYWdlLgorCitJbiBhIHJ1bm5pbmcgVmltIHRoZSB8OmRpZmZzcGxpdHwgY29tbWFuZCBzdGFydHMgZGlmZiBtb2RlIGZvciB0aGUgY3VycmVudAorZmlsZSBhbmQgYW5vdGhlciBmaWxlLiAgVGhlIHw6ZGlmZnBhdGNofCBjb21tYW5kIHN0YXJ0cyBkaWZmIG1vZGUgdXNpbmcgdGhlCitjdXJyZW50IGZpbGUgYW5kIGEgcGF0Y2ggZmlsZS4gIFRoZSB8OmRpZmZ0aGlzfCBjb21tYW5kIHN0YXJ0cyBkaWZmIG1vZGUgZm9yCit0aGUgY3VycmVudCB3aW5kb3cuCisKK0RpZmZlcmVuY2VzIGNhbiBiZSByZW1vdmVkIHdpdGggdGhlIHw6ZGlmZmdldHwgYW5kIHw6ZGlmZnB1dHwgY29tbWFuZHMuCisKKy0gVGhlICdkaWZmJyBvcHRpb24gc3dpdGNoZXMgZGlmZiBtb2RlIG9uIGluIGEgd2luZG93LgorLSBUaGUgfDpkaWZmdXBkYXRlfCBjb21tYW5kIHJlZnJlc2hlcyB0aGUgZGlmZnMuCistIFRoZSAnZGlmZm9wdCcgb3B0aW9uIGNoYW5nZXMgaG93IGRpZmZzIGFyZSBkaXNwbGF5ZWQuCistIFRoZSAnZGlmZmV4cHInIG9wdGlvbiBjYW4gYmUgc2V0IGhvdyBhIGRpZmYgaXMgdG8gYmUgY3JlYXRlZC4KKy0gVGhlICdwYXRjaGV4cHInIG9wdGlvbiBjYW4gYmUgc2V0IGhvdyBwYXRjaCBpcyBhcHBsaWVkIHRvIGEgZmlsZS4KKy0gQWRkZWQgdGhlICJkaWZmIiBmb2xkaW5nIG1ldGhvZC4gIFdoZW4gb3BlbmluZyBhIHdpbmRvdyBmb3IgZGlmZi1tb2RlLCBzZXQKKyAgJ2ZvbGRsZXZlbCcgdG8gemVybyBhbmQgJ2ZvbGRlbmFibGUnIG9uLCB0byBjbG9zZSB0aGUgZm9sZHMuCistIEFkZGVkIHRoZSBEaWZmQWRkLCBEaWZmQ2hhbmdlLCBEaWZmRGVsZXRlIGFuZCBEaWZmVGV4dCBoaWdobGlnaHQgZ3JvdXBzIHRvCisgIHNwZWNpZnkgdGhlIGhpZ2hsaWdodGluZyBmb3IgZGlmZmVyZW5jZXMuICBUaGUgZGVmYXVsdHMgYXJlIHVnbHkuLi4KKy0gVW5peDogbWFrZSBhIHZpbWRpZmYgc3ltYm9saWMgbGluayBmb3IgIm1ha2UgaW5zdGFsbCIuCistIFJlbW92ZWQgdGhlIG5vdyBvYnNvbGV0ZSAidmltZGlmZi52aW0iIHNjcmlwdCBmcm9tIHRoZSBkaXN0cmlidXRpb24uCistIEFkZGVkIHRoZSAiW2MiIGFuZCAiXWMiIGNvbW1hbmRzIHRvIG1vdmUgdG8gdGhlIG5leHQvcHJldmlvdXMgY2hhbmdlIGluIGRpZmYKKyAgbW9kZS4KKworCitFYXN5IFZpbTogY2xpY2stYW5kLXR5cGUJCQkJKm5ldy1ldmltKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VWaW0gc3RhbmRzIGZvciAiRWFzeSBWaW0iLiAgVGhpcyBpcyBhIHNlcGFyYXRlIHByb2dyYW0sIGJ1dCBjYW4gYWxzbyBiZQorc3RhcnRlZCBhcyAidmltIC15Ii4KKworVGhpcyBzdGFydHMgVmltIHdpdGggJ2luc2VydG1vZGUnIHNldCB0byBhbGxvdyBjbGljay1hbmQtdHlwZSBlZGl0aW5nLiAgVGhlCiskVklNUlVOVElNRS9ldmltLnZpbSBzY3JpcHQgaXMgdXNlZCB0byBhZGQgbWFwcGluZ3MgYW5kIHNldCBvcHRpb25zIHRvIGJlIGFibGUKK3RvIGRvIG1vc3QgdGhpbmdzIGxpa2UgTm90ZXBhZC4gIFRoaXMgaXMgb25seSBmb3IgcGVvcGxlIHdobyBjYW4ndCBzdGFuZCB0d28KK21vZGVzLgorCitlVmlldyBkb2VzIHRoZSBzYW1lIGJ1dCBpbiByZWFkb25seSBtb2RlLgorCitJbiB0aGUgR1VJIGEgQ1RSTC1DIG5vdyBvbmx5IGludGVycnVwdHMgd2hlbiBidXN5IHdpdGggc29tZXRoaW5nLCBub3Qgd2hlbgord2FpdGluZyBmb3IgYSBjaGFyYWN0ZXIuICBBbGxvd3MgdXNpbmcgQ1RSTC1DIHRvIGNvcHkgdGV4dCB0byB0aGUgY2xpcGJvYXJkLgorCisKK1VzZXIgbWFudWFsCQkJCQkJKm5ldy11c2VyLW1hbnVhbCoKKy0tLS0tLS0tLS0tCisKK1RoZSB1c2VyIG1hbnVhbCBoYXMgYmVlbiBhZGRlZC4gIEl0IGlzIG9yZ2FuaXNlZCBhcm91bmQgZWRpdGluZyB0YXNrcy4gIEl0CityZWFkcyBsaWtlIGEgYm9vaywgZnJvbSBzdGFydCB0byBlbmQuICBJdCBzaG91bGQgYWxsb3cgYmVnaW5uZXJzIHRvIHN0YXJ0CitsZWFybmluZyBWaW0uICBJdCBoZWxwcyBldmVyeWJvZHkgdG8gbGVhcm4gdXNpbmcgdGhlIG1vc3QgdXNlZnVsIFZpbSBmZWF0dXJlcy4KK0l0IGlzIG11Y2ggZWFzaWVyIHRvIHJlYWQgdGhhbiB0aGUgcmVmZXJlbmNlIG1hbnVhbCwgYnV0IG9taXRzIGRldGFpbHMuICBTZWUKK3x1c2VyLW1hbnVhbHwuCisKK1RoZSB1c2VyIG1hbnVhbCBpbmNsdWRlcyBwYXJ0cyBvZiB0aGUgVmltIGJvb2sgYnkgU3RldmUgT3VhbGxpbmUgfGZyb21ib29rfC4KK0l0IGlzIHB1Ymxpc2hlZCB1bmRlciB0aGUgT1BMIHxtYW51YWwtY29weXJpZ2h0fC4KKworV2hlbiBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIG5vdCBlbmFibGVkLCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgaGVscCBmaWxlIHdoaWNoCittYXJrIGV4YW1wbGVzICgnPicgYW5kICc8JykgYW5kIGhlYWRlciBsaW5lcyAoJ34nKSBhcmUgcmVwbGFjZWQgd2l0aCBhIHNwYWNlLgorCitXaGVuIGNsb3NpbmcgdGhlIGhlbHAgd2luZG93LCB0aGUgd2luZG93IGxheW91dCBpcyByZXN0b3JlZCBmcm9tIGJlZm9yZQorb3BlbmluZyBpdCwgaWYgdGhlIHdpbmRvdyBsYXlvdXQgZGlkbid0IGNoYW5nZSBzaW5jZSB0aGVuLgorV2hlbiBvcGVuaW5nIHRoZSBoZWxwIHdpbmRvdywgcHV0IGl0IGF0IHRoZSB0b3Agb2YgdGhlIFZpbSB3aW5kb3cgaWYgdGhlCitjdXJyZW50IHdpbmRvdyBpcyBmZXdlciB0aGFuIDgwIGNoYXJhY3RlcnMgYW5kIG5vdCBmdWxsIHdpZHRoLgorCisKK0ZsZXhpYmxlIGluZGVudGluZwkJCQkJKm5ldy1pbmRlbnQtZmxleCoKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBdXRvbWF0aWMgaW5kZW50aW5nIGlzIG5vdyBwb3NzaWJsZSBmb3IgYW55IGxhbmd1YWdlLiAgSXQgd29ya3Mgd2l0aCBhIFZpbQorc2NyaXB0LCB3aGljaCBtYWtlcyBpdCB2ZXJ5IGZsZXhpYmxlIHRvIGNvbXB1dGUgdGhlIGluZGVudC4KKworVGhlICI6ZmlsZXR5cGUgaW5kZW50IG9uIiBjb21tYW5kIGVuYWJsZXMgdXNpbmcgdGhlIHByb3ZpZGVkIGluZGVudCBzY3JpcHRzLgorVGhpcyBpcyBleHBsYWluZWQgaW4gdGhlIHVzZXIgbWFudWFsOiB8MzAuM3wuCisKK1RoZSAnaW5kZW50ZXhwcicgb3B0aW9uIGlzIGV2YWx1YXRlZCB0byBnZXQgdGhlIGluZGVudCBmb3IgYSBsaW5lLiAgVGhlCisnaW5kZW50a2V5cycgb3B0aW9uIHRlbGxzIHdoZW4gdG8gdHJpZ2dlciByZS1pbmRlbnRpbmcuICBOb3JtYWxseSB0aGVzZQorb3B0aW9ucyBhcmUgc2V0IGZyb20gYW4gaW5kZW50IHNjcmlwdC4gIExpa2UgU3ludGF4IGZpbGVzLCBpbmRlbnQgc2NyaXB0cyB3aWxsCitiZSBjcmVhdGVkIGFuZCBtYWludGFpbmVkIGJ5IG1hbnkgcGVvcGxlLgorCisKK0V4dGVuZGVkIHNlYXJjaCBwYXR0ZXJucwkJCQkqbmV3LXNlYXJjaHBhdCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gbWF0Y2ggbW9yZSB0aGFuIG9uZSBsaW5lIHdpdGggYSBwYXR0ZXJuLiAocGFydGx5IGJ5CitMb2ljIEdyZW5pZSkKK05ldyBpdGVtcyBpbiBhIHNlYXJjaCBwYXR0ZXJuIGZvciBtdWx0aS1saW5lIG1hdGNoZXM6CitcbgkJbWF0Y2ggZW5kLW9mLWxpbmUsIGFsc28gaW4gW10KK1xfW10JCW1hdGNoIGNoYXJhY3RlcnMgaW4gcmFuZ2UgYW5kIGVuZC1vZi1saW5lCitcX3gJCW1hdGNoIGNoYXJhY3RlciBjbGFzcyBhbmQgZW5kLW9mLWxpbmUKK1xfLgkJbWF0Y2ggYW55IGNoYXJhY3RlciBvciBlbmQtb2YtbGluZQorXF9eCQltYXRjaCBzdGFydC1vZi1saW5lLCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiB0aGUgcmVnZXhwCitcXyQJCW1hdGNoIGVuZC1vZi1saW5lLCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiB0aGUgcmVnZXhwCisKK1ZhcmlvdXMgb3RoZXIgbmV3IGl0ZW1zIGluIHNlYXJjaCBwYXR0ZXJuczoKK1xjCQlpZ25vcmUgY2FzZSBmb3IgdGhlIHdob2xlIHBhdHRlcm4KK1xDCQltYXRjaCBjYXNlIGZvciB0aGUgd2hvbGUgcGF0dGVybgorXG0JCW1hZ2ljIG9uIGZvciB0aGUgZm9sbG93aW5nCitcTQkJbWFnaWMgb2ZmIGZvciB0aGUgZm9sbG93aW5nCitcdgkJbWFrZSBmb2xsb3dpbmcgY2hhcmFjdGVycyAidmVyeSBtYWdpYyIKK1xWCQltYWtlIGZvbGxvd2luZyBjaGFyYWN0ZXJzICJ2ZXJ5IG5vbWFnaWMiCisKK1xAIQkJZG9uJ3QgbWF0Y2ggYXRvbSBiZWZvcmUgdGhpcy4KKwkJRXhhbXBsZTogImZvb1woYmFyXClcQCEiIG1hdGNoZXMgImZvbyAiIGJ1dCBub3QgImZvb2JhciIuCitcQD0JCW1hdGNoIGF0b20sIHJlc3VsdGluZyBpbiAgemVyby13aWR0aCBtYXRjaAorCQlFeGFtcGxlOiAiZm9vXChiYXJcKVxAPSIgbWF0Y2hlcyAiZm9vIiBpbiAiZm9vYmFyIi4KK1xAPCEJCWRvbid0IG1hdGNoIHByZWNlZGluZyBhdG9tIGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbgorXEA8PQkJbWF0Y2ggcHJlY2VkaW5nIGF0b20gYmVmb3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uCitcQD4JCW1hdGNoIHByZWNlZGluZyBhdG9tIGFzIGEgc3ViZXhwcmVzc2lvbgorCitcJgkJbWF0Y2ggb25seSB3aGVuIGJyYW5jaCBiZWZvcmUgYW5kIGFmdGVyIGl0IG1hdGNoCisKK1wlW10JCW9wdGlvbmFsbHkgbWF0Y2ggYSBsaXN0IG9mIGF0b21zOyAiZW5kXCVbaWZdIiBtYXRjaGVzICJlbmQiLAorCQkiZW5kaSIgYW5kICJlbmRpZiIKK1wlKFwpCQlsaWtlIFwoXCksIGJ1dCB3aXRob3V0IGNyZWF0aW5nIGEgYmFjay1yZWZlcmVuY2U7IHRoZXJlIGNhbiBiZQorCQlhbnkgbnVtYmVyIG9mIHRoZXNlLCBvdmVyY29tZXMgdGhlIGxpbWl0IG9mIG5pbmUgXCggXCkgcGFpcnMKK1wlXgkJbWF0Y2ggc3RhcnQtb2YtZmlsZSAoQ2hhc2UgVGluZ2xleSkKK1wlJAkJbWF0Y2ggZW5kLW9mLWZpbGUgKENoYXNlIFRpbmdsZXkpCitcJSMJCU1hdGNoIHdpdGggdGhlIGN1cnNvciBwb3NpdGlvbi4gKENoYXNlIFRpbmdsZXkpCitcPwkJSnVzdCBsaWtlICJcPSIgYnV0IGNhbid0IGJlIHVzZWQgaW4gYSAiPyIgY29tbWFuZC4KKworXCUyM2wJCW1hdGNoIGluIGxpbmUgMjMKK1wlPDIzbAkJbWF0Y2ggYmVmb3JlIGxpbmUgMjMKK1wlPjIzbAkJbWF0Y2ggYWZ0ZXIgbGluZSAyMworXCUyM2MsIFwlPDIzYywgXCU+MjNjICAgbWF0Y2ggaW4vYmVmb3JlL2FmdGVyIGNvbHVtbiAyMworXCUyM3YsIFwlPDIzdiwgXCU+MjN2CW1hdGNoIGluL2JlZm9yZS9hZnRlciB2aXJ0dWFsIGNvbHVtbiAyMworCisKK0ZvciBzeW50YXggaXRlbXM6CitceiguLi5cKQlleHRlcm5hbCByZWZlcmVuY2UgbWF0Y2ggc2V0IChpbiByZWdpb24gc3RhcnQgcGF0dGVybikKK1x6MSAtIFx6OQlleHRlcm5hbCByZWZlcmVuY2UgbWF0Y2ggdXNlIChpbiByZWdpb24gc2tpcCBvciBlbmQgcGF0dGVybikKKwkoU2NvdHQgQmlnaGFtKQorCitcenMJCXVzZSBwb3NpdGlvbiBhcyBzdGFydCBvZiBtYXRjaAorXHplCQl1c2UgcG9zaXRpb24gYXMgZW5kIG9mIG1hdGNoCisKK1JlbW92ZWQgbGltaXQgb2YgbWF0Y2hpbmcgb25seSB1cCB0byAzMjc2NyB0aW1lcyB3aXRoICosIFwrLCBldGMuCisKK0FkZGVkIHN1cHBvcnQgdG8gbWF0Y2ggbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAocGFydGx5IGJ5IE11cmFva2EgVGFybykKK01hZGUgIlw8IiBhbmQgIlw+IiB3b3JrIGZvciBVVEYtOC4gKE11cmFva2EgVGFybykKKworCitVVEYtOCBzdXBwb3J0CQkJCQkJKm5ldy11dGYtOCoKKy0tLS0tLS0tLS0tLS0KKworVmltIGNhbiBub3cgZWRpdCBmaWxlcyBpbiBVVEYtOCBlbmNvZGluZy4gIFVwIHRvIDMxIGJpdCBjaGFyYWN0ZXJzIGNhbiBiZQordXNlZCwgYnV0IG9ubHkgMTYgYml0IGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZC4gIFVwIHRvIHR3byBjb21iaW5pbmcKK2NoYXJhY3RlcnMgYXJlIHN1cHBvcnRlZCwgdGhleSBvdmVycHJpbnQgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXIuCitEb3VibGUtd2lkZSBjaGFyYWN0ZXJzIGFyZSBhbHNvIHN1cHBvcnRlZC4gIFNlZSB8VVRGLTh8LgorCitVQ1MtMiwgVUNTLTQgYW5kIFVURi0xNiBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZCB0b28sIHRoZXkgYXJlIGNvbnZlcnRlZCB0bworVVRGLTggaW50ZXJuYWxseS4gIFRoZXJlIGlzIGFsc28gc3VwcG9ydCBmb3IgZWRpdGluZyBVbmljb2RlIGZpbGVzIGluIGEgTGF0aW4xCitlbnZpcm9ubWVudC4gIE90aGVyIGVuY29kaW5ncyBhcmUgY29udmVydGVkIHdpdGggaWNvbnYoKSBvciBhbiBleHRlcm5hbAorY29udmVydGVyIHNwZWNpZmllZCB3aXRoICdjaGFyY29udmVydCcuCisKK01hbnkgbmV3IGl0ZW1zIGZvciBNdWx0aS1ieXRlIHN1cHBvcnQ6CistIEFkZGVkICdlbmNvZGluZycgb3B0aW9uOiBzcGVjaWZpZXMgY2hhcmFjdGVyIGVuY29kaW5nIHVzZWQgaW5zaWRlIFZpbS4gIEl0CisgIGNhbiBiZSBhbnkgOC1iaXQgZW5jb2RpbmcsIHNvbWUgZG91YmxlLWJ5dGUgZW5jb2RpbmdzIG9yIFVuaWNvZGUuCisgIEl0IGlzIGluaXRpYWxpemVkIGZyb20gdGhlIGVudmlyb25tZW50IHdoZW4gYSBzdXBwb3J0ZWQgdmFsdWUgaXMgZm91bmQuCistIEFkZGVkICdmaWxlZW5jb2RpbmcnIGFuZCAnZmlsZWVuY29kaW5ncyc6IHNwZWNpZnkgY2hhcmFjdGVyIGNvZGluZyBpbiBhCisgIGZpbGUsIHNpbWlsYXIgdG8gJ2ZpbGVmb3JtYXQnIGFuZCAnZmlsZWZvcm1hdHMnLgorICBXaGVuICdlbmNvZGluZycgaXMgInV0Zi04IiBhbmQgJ2ZpbGVlbmNvZGluZ3MnIGlzICJ1dGYtOCxsYXRpbjEiIHRoaXMgd2lsbAorICBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0byBsYXRpbjEgaWYgYSBmaWxlIGRvZXMgbm90IGNvbnRhaW4gdmFsaWQgVVRGLTguCistIEFkZGVkICdib21iJyBvcHRpb24gYW5kIGRldGVjdGlvbiBvZiBhIEJPTSBhdCB0aGUgc3RhcnQgb2YgYSBmaWxlLiAgQ2FuIGJlCisgIHVzZWQgd2l0aCAidWNzLWJvbSIgaW4gJ2ZpbGVlbmNvZGluZ3MnIHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGEgVW5pY29kZQorICBmaWxlIGlmIGl0IHN0YXJ0cyB3aXRoIGEgQk9NLiAgRXNwZWNpYWxseSB1c2VmdWwgb24gTVMtV2luZG93cyAoTlQgYW5kCisgIDIwMDApLCB3aGljaCB1c2VzIHVjcy0ybGUgZmlsZXMgd2l0aCBhIEJPTSAoZS5nLiwgd2hlbiBleHBvcnRpbmcgdGhlCisgIHJlZ2lzdHJ5KS4KKy0gQWRkZWQgdGhlICd0ZXJtZW5jb2RpbmcnIG9wdGlvbjogU3BlY2lmaWVzIHRoZSBlbmNvZGluZyB1c2VkIGZvciB0aGUKKyAgdGVybWluYWwuICBVc2VmdWwgdG8gcHV0IFZpbSBpbiB1dGYtOCBtb2RlIHdoaWxlIGluIGEgbm9uLVVuaWNvZGUgbG9jYWxlOiA+CisgICAgOmxldCAmdGVybWVuY29kaW5nID0gJmVuY29kaW5nCisgICAgOnNldCBlbmNvZGluZz11dGYtOAorLSBXaGVuICd2aW1pbmZvJyBjb250YWlucyB0aGUgJ2MnIGZsYWcsIHRoZSB2aW1pbmZvIGZpbGUgaXMgY29udmVydGVkIGZyb20gdGhlCisgICdlbmNvZGluZycgaXQgd2FzIHdyaXR0ZW4gd2l0aCB0byB0aGUgY3VycmVudCAnZW5jb2RpbmcnLgorLSBBZGRlZCAiOnNjcmlwdGVuY29kaW5nIiBjb21tYW5kOiBjb252ZXJ0IGxpbmVzIGluIGEgc291cmNlZCBzY3JpcHQgdG8KKyAgJ2VuY29kaW5nJy4gIFVzZWZ1bCBmb3IgbWVudSBmaWxlcy4KKy0gQWRkZWQgJ2d1aWZvbnR3aWRlJyB0byBzcGVjaWZ5IGEgZm9udCBmb3IgZG91YmxlLXdpZGUgY2hhcmFjdGVycy4KKy0gQWRkZWQgS29yZWFuIHN1cHBvcnQgZm9yIGNoYXJhY3RlciBjbGFzcyBkZXRlY3Rpb24uICBBbHNvIGZpeCBjbHMoKSBpbgorICBzZWFyY2guYy4gKENob25nLURhZSBQYXJrKQorLSBXaW4zMjogVHlwaW5nIG11bHRpLWJ5dGUgY2hhcmFjdGVycyB3aXRob3V0IElNRS4gKEFsZXhhbmRlciBTbWlzaGxhamV2KQorLSBXaW4zMiB3aXRoIE1pbmd3OiBjb21waWxlIHdpdGggaWNvbnYgbGlicmFyeS4gKFJvbiBBYXJvbikKKy0gV2luMzIgd2l0aCBNU1ZDOiBkeW5hbWljYWxseSBsb2FkIGljb252LmRsbCBsaWJyYXJ5LiAoTXVyYW9rYSBUYXJvKQorLSBNYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIGEgdmVyc2lvbiB3aXRoIG11bHRpLWJ5dGUgYW5kIGljb252IHN1cHBvcnQgd2l0aAorICBCb3JsYW5kIDUuNS4gIChZYXN1aGlybyBNYXRzdW1vdG8pCistIEFkZGVkICdkZWxjb21iaW5lJyBvcHRpb246IERlbGV0ZSBjb21iaW5pbmcgY2hhcmFjdGVyIHNlcGFyYXRlbHkuIChSb24KKyAgQWFyb24pCistIFRoZSAieGZvbnRzZXQiIGZlYXR1cmUgaXNuJ3QgcmVxdWlyZWQgZm9yICJ4aW0iLiAgVGhlc2UgYXJlIG5vdyB0d28KKyAgaW5kZXBlbmRlbnQgZmVhdHVyZXMuCistIFhJTTogZW5hYmxlIFhJTSB3aGVuIHR5cGluZyBhIGxhbmd1YWdlIGNoYXJhY3RlciAoSW5zZXJ0IG1vZGUsIFNlYXJjaAorICBwYXR0ZXJuLCAiZiIgb3IgInIiIGNvbW1hbmQpLiAgRGlzYWJsZSBYSU0gd2hlbiB0eXBpbmcgYSBOb3JtYWwgbW9kZQorICBjb21tYW5kLgorLSBXaGVuIHRoZSBYSU0gaXMgYWN0aXZlLCBzaG93ICJYSU0iIGluIHRoZSAnc2hvd21vZGUnIG1lc3NhZ2UuIChOYW0gU3VuZ0h5dW4pCistIFN1cHBvcnQgIkN1cnNvcklNIiBmb3IgWElNLiAgKE5hbSBTdW5nSHl1bikKKy0gQWRkZWQgJ20nIGZsYWcgdG8gJ2Zvcm1hdG9wdGlvbnMnOiBXaGVuIHdyYXBwaW5nIHdvcmRzLCBhbGxvdyBzcGxpdHRpbmcgYXQKKyAgZWFjaCBtdWx0aWJ5dGUgY2hhcmFjdGVyLCBub3Qgb25seSBhdCBhIHNwYWNlLgorLSBNYWRlICI6c3ludGF4IGtleXdvcmQiIHdvcmsgd2l0aCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCistIEFkZGVkIHN1cHBvcnQgZm9yIFVuaWNvZGUgdXBwZXIvbG93ZXJjYXNlIGZsaXBwaW5nIGFuZCBjb21wYXJpbmcuIChiYXNlZCBvbgorICBwYXRjaCBieSBSYXBoYWVsIEZpbmtlbCkKKyAgTGV0ICJ+IiBvbiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGEgdGhpcmQgY2FzZSAoInRpdGxlIGNhc2UiKQorICBzd2l0Y2ggYmV0d2VlbiB0aGUgdGhyZWUgY2FzZXMuIChSYXBoYWVsIEZpbmtlbCkKKworQWxsb3cgZGVmaW5pbmcgZGlncmFwaHMgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KK0FkZGVkIFJGQzEzNDUgZGlncmFwaHMgZm9yIFVuaWNvZGUuCitNb3N0IE5vcm1hbCBtb2RlIGNvbW1hbmRzIHRoYXQgYWNjZXB0IGEgY2hhcmFjdGVyIGFyZ3VtZW50LCBsaWtlICJyIiwgInQiIGFuZAorImYiIG5vdyBhY2NlcHQgYSBkaWdyYXBoLiAgVGhlICdEJyBmbGFnIGluICdjcG9wdGlvbnMnIGRpc2FibGVzIHRoaXMgdG8gcmVtYWluCitWaSBjb21wYXRpYmxlLgorCitBZGRlZCBMYW5ndWFnZSBtYXBwaW5nIGFuZCAna2V5bWFwJyB0byBiZSBhYmxlIHRvIHR5cGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzOgorLSBBZGRlZCB0aGUgIjpsbWFwIiBjb21tYW5kIGFuZCBmcmllbmRzOiBEZWZpbmUgbWFwcGluZ3MgdGhhdCBhcmUgdXNlZCB3aGVuCisgIHR5cGluZyBjaGFyYWN0ZXJzIGluIHRoZSBsYW5ndWFnZSBvZiB0aGUgdGV4dC4gIEFsc28gZm9yICJyIiwgInQiLCBldGMuICBJbgorICBJbnNlcnQgYW5kIENvbW1hbmQtbGluZSBtb2RlIENUUkwtXiBzd2l0Y2hlcyB0aGUgdXNlIG9mIHRoZSBtYXBwaW5ncyBvbi9vZmYuCisgIENUUkwtXiBhbHNvIHRvZ2dsZXMgdGhlIHVzZSBvZiBhbiBpbnB1dCBtZXRob2Qgd2hlbiBubyBsYW5ndWFnZSBtYXBwaW5ncyBhcmUKKyAgcHJlc2VudC4gIEFsbG93cyBzd2l0Y2hpbmcgdGhlIElNIGJhY2sgb24gaGFsZndheSB0eXBpbmcuCistICI8Y2hhci0xMjM+IiBhcmd1bWVudCB0byAiOm1hcCIsIGFsbG93cyB0byBzcGVjaWZ5IHRoZSBkZWNpbWFsLCBvY3RhbCBvcgorICBoZXhhZGVjaW1hbCB2YWx1ZSBvZiBhIGNoYXJhY3Rlci4KKy0gSW1wbGVtZW50ZWQgdGhlICdrZXltYXAnIG9wdGlvbjogTG9hZCBhIGtleW1hcCBmaWxlLiAgVXNlcyAiOmxub3JlbWFwIiB0bworICBkZWZpbmUgbWFwcGluZ3MgZm9yIHRoZSBrZXltYXAuICBUaGUgbmV3ICI6bG9hZGtleW1hcCIgY29tbWFuZCBpcyB1c2VkIGluCisgIHRoZSBrZXltYXAgZmlsZS4KKy0gQWRkZWQgJ2snIGZsYWcgaW4gJ3N0YXR1c2xpbmUnOiBWYWx1ZSBvZiAiYjprZXltYXBfbmFtZSIgb3IgJ2tleW1hcCcgd2hlbgorICBpdCdzIGJlaW5nIHVzZWQuICBVc2VzICI8bGFuZz4iIHdoZW4gbm8ga2V5bWFwIGlzIGxvYWRlZCBhbmQgIjpsbWFwInMgYXJlCisgIGFjdGl2ZS4gIFNob3cgdGhpcyB0ZXh0IGluIHRoZSBkZWZhdWx0IHN0YXR1c2xpbmUgdG9vLgorLSBBZGRlZCB0aGUgJ2ltaW5zZXJ0JyBhbmQgJ2ltc2VhcmNoJyBvcHRpb25zOiBTcGVjaWZ5IHVzZSBvZiBsYW5nbWFwIG1hcHBpbmdzCisgIGFuZCBJbnB1dCBNZXRob2Qgd2l0aCBhbiBvcHRpb24uIChNdXJhb2thIFRhcm8pCisgIEFkZGVkICdpbWNtZGxpbmUnIG9wdGlvbjogV2hlbiBzZXQgdGhlIGlucHV0IG1ldGhvZCBpcyBhbHdheXMgZW5hYmxlZCB3aGVuCisgIHN0YXJ0aW5nIHRvIGVkaXQgYSBjb21tYW5kIGxpbmUuICBVc2VmdWwgZm9yIGEgWElNIHRoYXQgdXNlcyBkZWFkIGtleXMgdG8KKyAgdHlwZSBhY2NlbnRlZCBjaGFyYWN0ZXJzLgorICBBZGRlZCAnaW1hY3RpdmF0ZWtleScgb3B0aW9uIHRvIGJldHRlciBjb250cm9sIFhJTS4gIChNdXJhb2thIFRhcm8pCistIFdoZW4gdHlwaW5nIGEgbWFwcGluZyB0aGF0J3Mgbm90IGZpbmlzaGVkIHlldCwgZGlzcGxheSB0aGUgbGFzdCBjaGFyYWN0ZXIKKyAgdW5kZXIgdGhlIGN1cnNvciBpbiBJbnNlcnQgbW9kZSBhbmQgQ29tbWFuZC1saW5lIG1vZGUuICBMb29rcyBnb29kIGZvciBkZWFkCisgIGNoYXJhY3RlcnMuCistIE1hZGUgdGhlICdsYW5nbWFwJyBvcHRpb24gcmVjb2duaXplIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gIEJ1dCBtYXBwaW5nIG9ubHkKKyAgd29ya3MgZm9yIDgtYml0IGNoYXJhY3RlcnMuICBIZWxwcyB3aGVuIHVzaW5nIFVURi04LgorLSBVc2UgYSBkaWZmZXJlbnQgY3Vyc29yIGZvciB3aGVuICI6bG1hcCIgbWFwcGluZ3MgYXJlIGFjdGl2ZS4gIENhbiBzcGVjaWZ5CisgIHR3byBoaWdobGlnaHQgZ3JvdXBzIGZvciBhbiBpdGVtIGluICdndWljdXJzb3InLiAgQnkgZGVmYXVsdCAibEN1cnNvciIgYW5kCisgICJDdXJzb3IiIGFyZSBlcXVhbCwgdGhlIHVzZXIgbXVzdCBzZXQgYSBjb2xvciBoZSBsaWtlcy4KKyAgVXNlIHRoZSBjdXJzb3IgY29sb3IgZm9yIGhhbmd1bCBpbnB1dCBhcyB3ZWxsLiAoU3VuZy1IeXVuIE5hbSkKKy0gU2hvdyAiKGxhbmcpIiBmb3IgJ3Nob3dtb2RlJyB3aGVuIGxhbmd1YWdlIG1hcHBpbmcgaXMgZW5hYmxlZC4KKy0gVVRGLTg6IE1hZGUgInIiIHdvcmsgd2l0aCBhICI6bG1hcCIgdGhhdCBpbmNsdWRlcyBhIGNvbXBvc2luZyBjaGFyYWN0ZXIuCisgIEFsc28gd29ya3MgZm9yICJmIiwgd2hpY2ggbm93IHdvcmtzIHRvIGZpbmQgYSBjaGFyYWN0ZXIgdGhhdCBpbmNsdWRlcyBhCisgIGNvbXBvc2luZyBjaGFyYWN0ZXIuCisKK090aGVyIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGFkZGl0aW9uczoKKy0gU3VwcG9ydCBkb3VibGUtYnl0ZSBzaW5nbGUtd2lkdGggY2hhcmFjdGVycyBmb3IgZXVjLWpwOiBDaGFyYWN0ZXJzIHN0YXJ0aW5nCisgIHdpdGggMHg4RS4gIEFkZGVkIFNjcmVlbkxpbmVzMltdIHRvIHN0b3JlIHRoZSBzZWNvbmQgYnl0ZS4KKworCitNdWx0aS1sYW5ndWFnZSBzdXBwb3J0CQkJCQkqbmV3LW11bHRpLWxhbmcqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZXNzYWdlcyB1c2VkIGluIFZpbSBjYW4gYmUgdHJhbnNsYXRlZC4gIFNldmVyYWwgdHJhbnNsYXRpb25zIGFyZQorYXZhaWxhYmxlLiAgVGhpcyB1c2VzIHRoZSBnZXR0ZXh0IG1lY2hhbmlzbS4gIEl0IGFsbG93cyBhZGRpbmcgYSB0cmFuc2xhdGlvbgord2l0aG91dCByZWNvbXBpbGluZyBWaW0uICB8bXVsdGktbGFuZ3wgKHBhcnRseSBieSBNYXJjaW4gRGFsZWNraSkKKworVGhlIHRyYW5zbGF0aW9uIGZpbGVzIGFyZSBpbiB0aGUgc3JjL3BvIGRpcmVjdG9yeS4gIFRoZSBzcmMvcG8vUkVBRE1FLnR4dCBmaWxlCitleHBsYWlucyBhIGZldyB0aGluZ3MgYWJvdXQgZG9pbmcgYSB0cmFuc2xhdGlvbi4KKworTWVudSB0cmFuc2xhdGlvbnMgYXJlIGF2YWlsYWJsZSBhcyB3ZWxsLiAgVGhpcyB1c2VzIHRoZSBuZXcgfDptZW51dHJhbnNsYXRlfAorY29tbWFuZC4gIFRoZSB0cmFuc2xhdGlvbnMgYXJlIGZvdW5kIGluIHRoZSBydW50aW1lIGRpcmVjdG9yeSAibGFuZyIuICBUaGlzCithbGxvd3MgYSB1c2VyIHRvIGFkZCBhIHRyYW5zbGF0aW9uLgorCitBZGRlZCB8Omxhbmd1YWdlfCBjb21tYW5kIHRvIHNldCB0aGUgbGFuZ3VhZ2UgKGxvY2FsZSkgZm9yIG1lc3NhZ2VzLCB0aW1lIGFuZAorY2hhcmFjdGVyIHR5cGUuICBUaGlzIGFsbG93cyBzd2l0Y2hpbmcgbGFuZ3VhZ2VzIGluIFZpbSB3aXRob3V0IGNoYW5naW5nIHRoZQorbG9jYWxlIG91dHNpZGUgb2YgVmltLgorCitNYWRlIGl0IHBvc3NpYmxlIHRvIGhhdmUgdmltdHV0b3IgdXNlIGRpZmZlcmVudCBsYW5ndWFnZXMuICAoRWR1YXJkbyBGZXJuYW5kZXopCitTcGFuaXNoIChFZHVhcmRvIEZlcm5hbmRleiksIEl0YWxpYW4gKEFudG9uaW8gQ29sb21ibyksIEphcGFuZXNlIChZYXN1aGlybworTWF0c3Vtb3RvKSBhbmQgRnJlbmNoIChBZHJpZW4gQmVhdSkgdHJhbnNsYXRpb25zIGFyZSBpbmNsdWRlZC4KK0FkZGVkICJ2aW10dXRvci5iYXQiOiBzY3JpcHQgdG8gc3RhcnQgVmltIG9uIGEgY29weSBvZiB0aGUgdHV0b3IgZmlsZSBmb3IKK01TLVdpbmRvd3MuIChEYW4gU2hhcnApCisKKy0gQWRkZWQgdjpsYW5nIHZhcmlhYmxlIHRvIGJlIGFibGUgdG8gZ2V0IGN1cnJlbnQgbGFuZ3VhZ2Ugc2V0dGluZy4KKyAgKE1hcmNpbiBEYWxlY2tpKSAgQWxzbyB2OmxjX3RpbWUgYW5kIHY6Y3R5cGUuCistIE1ha2UgaXQgcG9zc2libGUgdG8gdHJhbnNsYXRlIHRoZSBkaWFsb2dzIHVzZWQgYnkgdGhlIG1lbnVzLiAgVXNlcyBnbG9iYWwKKyAgIm1lbnV0cmFuc18iIHZhcmlhYmxlcy4gICI6bWVudXRyYW5zIGNsZWFyIiBkZWxldGVzIHRoZW0uCistIHJlbW92ZWQgImJyb2tlbiBsb2NhbGUiIChNYXJjaW4gRGFsZWNraSkuCistIERvbid0IHVzZSBjb2xvciBuYW1lcyBpbiBpY29ucywgdXNlIFJHQiB2YWx1ZXMuICBUaGUgbmFtZXMgY291bGQgYmUKKyAgdHJhbnNsYXRlZC4KKy0gV2luMzI6IEFkZGVkIGdsb2JhbCBJTUUgc3VwcG9ydCAoTXVyYW9rYSkKKy0gV2luMzI6IEFkZGVkIGR5bmFtaWMgbG9hZGluZyBvZiBJTUUgc3VwcG9ydC4KKy0gIjptZXNzYWdlcyIgcHJpbnRzIGEgbWVzc2FnZSBhYm91dCB3aG8gbWFpbnRhaW5zIHRoZSBtZXNzYWdlcyBvciB0aGUKKyAgdHJhbnNsYXRpb25zLiAgVXNlZnVsIHRvIGZpbmQgb3V0IHdoZXJlIHRvIG1ha2UgYSByZW1hcmsgYWJvdXQgYSB3cm9uZworICB0cmFuc2xhdGlvbi4KKy0gLS1kaXNhYmxlLW5scyBhcmd1bWVudCBmb3IgY29uZmlndXJlOiBEaXNhYmxlIHVzZSBvZiBnZXR0ZXh0KCkuIChTdW5nLUh5dW4KKyAgTmFtKQorLSBBZGRlZCBOTFMgc3VwcG9ydCBmb3IgV2luMzIgd2l0aCB0aGUgTWluZ1cgY29tcGlsZXIuIChFZHVhcmRvIEZlcm5hbmRleikKKy0gV2hlbiBhdmFpbGFibGUsIGNhbGwgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoKSB0byBoYXZlIGdldHRleHQoKSB0cmFuc2xhdGUKKyAgbWVzc2FnZXMgdG8gJ2VuY29kaW5nJy4gIFRoaXMgcmVxdWlyZXMgR05VIGdldHRleHQgMC4xMC4zNiBvciBsYXRlci4KKy0gQWRkZWQgZ2V0dGV4dCBzdXBwb3J0IGZvciBXaW4zMi4gIFRoaXMgbWVhbnMgbWVzc2FnZXMgd2lsbCBiZSB0cmFuc2xhdGVkCisgIHdoZW4gdGhlIGxvY2FsZSBpcyBzZXQgYW5kIGxpYmludGwuZGxsIGNhbiBiZSBmb3VuZC4gIChNdXJhb2thIFRhcm8pCisgIEFsc28gbWFkZSBpdCB3b3JrIHdpdGggTWluZ1cgY29tcGlsZXIuICAoRWR1YXJkbyBGZXJuYW5kZXopCisgIERldGVjdCB0aGUgbGFuZ3VhZ2UgYW5kIHNldCAkTEFORyB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHRyYW5zbGF0ZWQgbWVzc2FnZXMKKyAgKGlmIHN1cHBvcnRlZCkuICBBbHNvIHVzZSAkTEFORyB0byBzZWxlY3QgYSBsYW5ndWFnZSwgdjpsYW5nIGlzIGEgdmVyeQorICBkaWZmZXJlbnQga2luZCBvZiBuYW1lLgorLSBNYWRlIGd2aW1leHQuZGxsIHVzZSB0cmFuc2xhdGVkIG1lc3NhZ2VzLCBpZiBwb3NzaWJsZS4gKFlhc3VoaXJvIE1hdHN1bW90bykKKworCitQbHVnaW4gc3VwcG9ydAkJCQkJKm5ldy1wbHVnaW5zKgorLS0tLS0tLS0tLS0tLS0KKworVG8gbWFrZSBpdCByZWFsbHkgZWFzeSB0byBsb2FkIGEgVmltIHNjcmlwdCB3aGVuIHN0YXJ0aW5nIFZpbSwgdGhlICJwbHVnaW4iCitydW50aW1lIGRpcmVjdG9yeSBjYW4gYmUgdXNlZC4gIEFsbCAiKi52aW0iIGZpbGVzIGluIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseQorbG9hZGVkLiAgRm9yIFVuaXgsIHRoZSBkaXJlY3RvcnkgIn4vLnZpbS9wbHVnaW4iIGlzIHVzZWQgYnkgZGVmYXVsdC4gIFRoZQorJ3J1bnRpbWVwYXRoJyBvcHRpb24gY2FuIGJlIHNldCB0byBsb29rIGluIG90aGVyIGRpcmVjdG9yaWVzIGZvciBwbHVnaW5zLgorfGxvYWQtcGx1Z2luc3wgfGFkZC1wbHVnaW58CisKK1RoZSB8OnJ1bnRpbWV8IGNvbW1hbmQgaGFzIGJlZW4gYWRkZWQgdG8gbG9hZCBvbmUgb3IgbW9yZSBmaWxlcyBpbgorJ3J1bnRpbWVwYXRoJy4KKworU3RhbmRhcmQgcGx1Z2luczoKK25ldHJ3LnZpbSAtIEVkaXQgZmlsZXMgb3ZlciBhIG5ldHdvcmsgfG5ldy1uZXR3b3JrLWZpbGVzfAorZ3ppcC52aW0gLSBFZGl0IGNvbXByZXNzZWQgZmlsZXMKK2V4cGxvcmVyLnZpbSAtIEJyb3dzZSBkaXJlY3RvcmllcyB8bmV3LWZpbGUtYnJvd3NlcnwKKworQWRkZWQgc3VwcG9ydCBmb3IgbG9jYWwgaGVscCBmaWxlcy4gfGFkZC1sb2NhbC1oZWxwfC4KK1doZW4gc2VhcmNoaW5nIGZvciBoZWxwIHRhZ3MsIGFsbCAiZG9jL3RhZ3MiIGZpbGVzIGluICdydW50aW1lcGF0aCcgYXJlIHVzZWQuCitBZGRlZCB0aGUgIjpoZWxwdGFncyIgY29tbWFuZDogR2VuZXJhdGUgYSB0YWdzIGZpbGUgZm9yIGEgaGVscCBkaXJlY3RvcnkuCitUaGUgZmlyc3QgbGluZSBvZiBlYWNoIGhlbHAgZmlsZSBpcyBhdXRvbWFnaWNhbGx5IGFkZGVkIHRvIHRoZSAiTE9DQUwKK0FERElUSU9OUyIgc2VjdGlvbiBpbiBkb2MvaGVscC50eHQuCisKK0FkZGVkIHRoZSA8dW5pcXVlPiBhcmd1bWVudCB0byAiOm1hcCI6IG9ubHkgYWRkIGEgbWFwcGluZyB3aGVuIGl0IHdhc24ndAorZGVmaW5lZCBiZWZvcmUuCisKK1doZW4gZGlzcGxheWluZyBhbiBvcHRpb24gdmFsdWUgd2l0aCAndmVyYm9zZScgc2V0IHdpbGwgZ2l2ZSBhIG1lc3NhZ2UgYWJvdXQKK3doZXJlIHRoZSBvcHRpb24gd2FzIGxhc3Qgc2V0LiAgVmVyeSB1c2VmdWwgdG8gZmluZCBvdXQgd2hpY2ggc2NyaXB0IGRpZCBzZXQKK3RoZSB2YWx1ZS4KKworVGhlIG5ldyB8OnNjcmlwdG5hbWVzfCBjb21tYW5kIGRpc3BsYXlzIGEgbGlzdCBvZiBhbGwgc2NyaXB0cyB0aGF0IGhhdmUgYmVlbgorc291cmNlZC4KKworR1VJOiBGb3IgQXRoZW5hLCBNb3RpZiBhbmQgR1RLIGxvb2sgZm9yIGEgdG9vbGJhciBiaXRtYXAgaW4gdGhlICJiaXRtYXBzIgorZGlyZWN0b3JpZXMgaW4gJ3J1bnRpbWVwYXRoJy4gIEFsbG93cyBhZGRpbmcgeW91ciBvd24gYml0bWFwcy4KKworCitGaWxldHlwZSBwbHVnaW5zCQkJCSpuZXctZmlsZXR5cGUtcGx1Z2lucyoKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0EgbmV3IGdyb3VwIG9mIGZpbGVzIGhhcyBiZWVuIGFkZGVkIHRvIGRvIHNldHRpbmdzIGZvciBzcGVjaWZpYyBmaWxlIHR5cGVzLgorVGhlc2UgY2FuIGJlIG9wdGlvbnMgYW5kIG1hcHBpbmdzIHdoaWNoIGFyZSBzcGVjaWZpY2FsbHkgdXNlZCBmb3Igb25lIHZhbHVlIG9mCisnZmlsZXR5cGUnLgorCitUaGUgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gIiRWSU1SVU5USU1FL2Z0cGx1Z2luIi4gIFRoZSAncnVudGltZXBhdGgnIG9wdGlvbgorbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIHNldmVyYWwgc2V0cyBvZiBwbHVnaW5zOiBZb3VyIG93biwgc3lzdGVtLXdpZGUsCitpbmNsdWRlZCBpbiB0aGUgVmltIGRpc3RyaWJ1dGlvbiwgZXRjLgorCitUbyBiZSBhYmxlIHRvIG1ha2UgdGhpcyB3b3JrLCBzZXZlcmFsIGZlYXR1cmVzIHdlcmUgYWRkZWQ6CistIEFkZGVkIHRoZSAiczoiIHZhcmlhYmxlcywgbG9jYWwgdG8gYSBzY3JpcHQuICBBdm9pZHMgbmFtZSBjb25mbGljdHMgd2l0aAorICBnbG9iYWwgdmFyaWFibGVzLiAgVGhleSBjYW4gYmUgdXNlZCBpbiB0aGUgc2NyaXB0IGFuZCBpbiBmdW5jdGlvbnMsCisgIGF1dG9jb21tYW5kcyBhbmQgdXNlciBjb21tYW5kcyBkZWZpbmVkIGluIHRoZSBzY3JpcHQuICBUaGV5IGFyZSBrZXB0IGJldHdlZW4KKyAgaW52b2NhdGlvbnMgb2YgdGhlIHNhbWUgc2NyaXB0LiAgfHM6dmFyfAorLSBBZGRlZCB0aGUgZ2xvYmFsIHZhbHVlIGZvciBsb2NhbCBvcHRpb25zLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIHdoZW4gb3BlbmluZworICBhIG5ldyBidWZmZXIgb3IgZWRpdGluZyBhbm90aGVyIGZpbGUuICBUaGUgb3B0aW9uIHZhbHVlIHNwZWNpZmllZCBpbiBhCisgIG1vZGVsaW5lIG9yIGZpbGV0eXBlIHNldHRpbmcgaXMgbm90IGNhcnJpZWQgb3ZlciB0byBhbm90aGVyIGJ1ZmZlci4KKyAgIjpzZXQiIHNldHMgYm90aCB0aGUgbG9jYWwgYW5kIHRoZSBnbG9iYWwgdmFsdWUuCisgICI6c2V0bG9jYWwiIHNldHMgdGhlIGxvY2FsIG9wdGlvbiB2YWx1ZSBvbmx5LgorICAiOnNldGdsb2JhbCIgc2V0cyBvciBkaXNwbGF5cyB0aGUgZ2xvYmFsIHZhbHVlIGZvciBhIGxvY2FsIG9wdGlvbi4KKyAgIjpzZXRsb2NhbCBuYW1lPCIgc2V0cyBhIGxvY2FsIG9wdGlvbiB0byBpdHMgZ2xvYmFsIHZhbHVlLgorLSBBZGRlZCB0aGUgYnVmZmVyLWxvY2FsIHZhbHVlIGZvciBzb21lIGdsb2JhbCBvcHRpb25zOiAnZXF1YWxwcmcnLCAnbWFrZXByZycsCisgICdlcnJvcmZvcm1hdCcsICdncmVwcHJnJywgJ3BhdGgnLCAnZGljdGlvbmFyeScsICd0aGVzYXVydXMnLCAndGFncycsCisgICdpbmNsdWRlJyBhbmQgJ2RlZmluZScuICBUaGlzIGFsbG93cyBzZXR0aW5nIGEgbG9jYWwgdmFsdWUgZm9yIHRoZXNlIGdsb2JhbAorICBvcHRpb25zLCB3aXRob3V0IG1ha2luZyBpdCBpbmNvbXBhdGlibGUuCistIEFkZGVkIG1hcHBpbmdzIGFuZCBhYmJyZXZpYXRpb25zIGxvY2FsIHRvIGEgYnVmZmVyOiAiOm1hcCA8YnVmZmVyPiIuCistIEluIGEgbWFwcGluZyAiPExlYWRlcj4iIGNhbiBiZSB1c2VkIHRvIGdldCB0aGUgdmFsdWUgb2YgdGhlICJtYXBsZWFkZXIiCisgIHZhcmlhYmxlLiAgVGhpcyBzaW1wbGlmaWVzIG1hcHBpbmdzIHRoYXQgdXNlICJtYXBsZWFkZXIiLiAgIjxMZWFkZXI+IgorICBkZWZhdWx0cyB0byAiXCIuICAiPExvY2FsTGVhZGVyPiIgZG9lcyB0aGUgc2FtZSB3aXRoICJtYXBsb2NhbGxlYWRlciIuICBUaGlzCisgIGlzIHRvIGJlIHVzZWQgZm9yIG1hcHBpbmdzIGxvY2FsIHRvIGEgYnVmZmVyLgorLSBBZGRlZCA8U0lEPiBTY3JpcHQgSUQgdG8gZGVmaW5lIGZ1bmN0aW9ucyBhbmQgbWFwcGluZ3MgbG9jYWwgdG8gYSBzY3JpcHQuCistIEFkZGVkIDxzY3JpcHQ+IGFyZ3VtZW50IHRvICI6bm9yZW1hcCIgYW5kICI6bm9yZW1lbnUiOiBPbmx5IHJlbWFwCisgIHNjcmlwdC1sb2NhbCBtYXBwaW5ncy4gIEF2b2lkcyB0aGF0IG1hcHBpbmdzIGZyb20gb3RoZXIgc2NyaXB0cyBnZXQgaW4gdGhlCisgIHdheSwgYnV0IGRvZXMgYWxsb3cgdXNpbmcgbWFwcGluZ3MgZGVmaW5lZCBpbiB0aGUgc2NyaXB0LgorLSBVc2VyIGNvbW1hbmRzIGNhbiBiZSBsb2NhbCB0byBhIGJ1ZmZlcjogIjpjb21tYW5kIC1idWZmZXIiLgorCitUaGUgbmV3ICI6c2V0ZmlsZXR5cGUiIGNvbW1hbmQgaXMgdXNlZCBpbiB0aGUgZmlsZXR5cGUgZGV0ZWN0aW9uIGF1dG9jb21tYW5kcywKK3RvIGF2b2lkIHRoYXQgJ2ZpbGV0eXBlJyBpcyBzZXQgdHdpY2UuCisKKworRmlsZSBicm93c2VyCQkJCQkJKm5ldy1maWxlLWJyb3dzZXIqCistLS0tLS0tLS0tLS0KKworV2hlbiBlZGl0aW5nIGEgZGlyZWN0b3J5LCB0aGUgZXhwbG9yZXIgcGx1Z2luIHdpbGwgbGlzdCB0aGUgZmlsZXMgaW4gdGhlCitkaXJlY3RvcnkuICBQcmVzc2luZyA8RW50ZXI+IG9uIGEgZmlsZSBuYW1lIGVkaXRzIHRoYXQgZmlsZS4gIFByZXNzaW5nIDxFbnRlcj4KK29uIGEgZGlyZWN0b3J5IG1vdmVzIHRoZSBicm93c2VyIHRvIHRoYXQgZGlyZWN0b3J5LgorCitUaGVyZSBhcmUgc2V2ZXJhbCBvdGhlciBwb3NzaWJpbGl0aWVzLCBzdWNoIGFzIG9wZW5pbmcgYSBmaWxlIGluIHRoZSBwcmV2aWV3Cit3aW5kb3csIHJlbmFtaW5nIGZpbGVzIGFuZCBkZWxldGluZyBmaWxlcy4KKworU2VlIHxmaWxlLWV4cGxvcmVyfC4KKworCitFZGl0aW5nIGZpbGVzIG92ZXIgYSBuZXR3b3JrCQkJCSpuZXctbmV0d29yay1maWxlcyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlsZXMgc3RhcnRpbmcgd2l0aCBzY3A6Ly8sIHJjcDovLywgZnRwOi8vIGFuZCBodHRwOi8vIGFyZSByZWNvZ25pemVkIGFzCityZW1vdGUgZmlsZXMuICBBbiBhdHRlbXB0IGlzIG1hZGUgdG8gYWNjZXNzIHRoZXNlIGZpbGVzIHdpdGggdGhlIGluZGljYXRlZAorbWV0aG9kLiAgRm9yIGh0dHA6Ly8gb25seSByZWFkaW5nIGlzIHBvc3NpYmxlLCBmb3IgdGhlIG90aGVycyB3cml0aW5nIGlzIGFsc28KK3N1cHBvcnRlZC4gIFVzZXMgdGhlIG5ldHJ3LnZpbSBzY3JpcHQgYXMgYSBzdGFuZGFyZCAicGx1Z2luIi4gfG5ldHJ3fAorCitNYWRlICJnZiIgd29yayBvbiBhIFVSTC4gIEl0IG5vIGxvbmdlciBhc3N1bWVzIHRoZSBmaWxlIGlzIGxvY2FsIG9uIHRoZQorY29tcHV0ZXIgKG1vc3RseSBkaWRuJ3Qgd29yayBhbnl3YXksIGJlY2F1c2UgdGhlIGZ1bGwgcGF0aCB3YXMgcmVxdWlyZWQpLgorQWRqdXN0ZWQgdGVzdDIgZm9yIHRoaXMuCisKK0FsbG93IHVzaW5nIGEgVVJMIGluICdwYXRoJy4gIE1ha2VzICI6ZmluZCBpbmRleC5odG1sIiB3b3JrLgorCitHVEs6IEFsbG93IGRyb3BwaW5nIGEgaHR0cDovLyBhbmQgZnRwOi8vIFVSTCBvbiBWaW0uICBUaGUgbmV0cncgcGx1Z2luIHRha2VzCitjYXJlIG9mIGRvd25sb2FkaW5nIHRoZSBmaWxlLiAoTWlLYWVsIEJlcnRoZSkKKworCitXaW5kb3cgZm9yIGNvbW1hbmQtbGluZSBlZGl0aW5nCQkJCSpuZXctY21kd2luKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQ29tbWFuZC1saW5lIHdpbmRvdyBjYW4gYmUgdXNlZCB0byBlZGl0IGEgY29tbWFuZC1saW5lIHdpdGggTm9ybWFsIGFuZAorSW5zZXJ0IG1vZGUgY29tbWFuZHMuICBXaGVuIGl0IGlzIG9wZW5lZCBpdCBjb250YWlucyB0aGUgaGlzdG9yeS4gIFRoaXMgYWxsb3dzCitjb3B5aW5nIHBhcnRzIG9mIHByZXZpb3VzIGNvbW1hbmQgbGluZXMuIHxjbWR3aW58CisKK1RoZSBjb21tYW5kLWxpbmUgd2luZG93IGNhbiBiZSBvcGVuZWQgZnJvbSB0aGUgY29tbWFuZC1saW5lIHdpdGggdGhlIGtleQorc3BlY2lmaWVkIGJ5IHRoZSAnY2VkaXQnIG9wdGlvbiAobGlrZSBOdmkpLiAgSXQgY2FuIGFsc28gYmUgb3BlbmVkIGRpcmVjdGx5Citmcm9tIE5vcm1hbCBtb2RlIHdpdGggInE6IiwgInEvIiBhbmQgInE/Ii4KKworVGhlICdjbWR3aW5oZWlnaHQnIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgaW5pdGlhbCBoZWlnaHQgb2YgdGhlIHdpbmRvdy4KKworSW4gSW5zZXJ0IG1vZGUgQ1RSTC1YIENUUkwtViBjYW4gYmUgdXNlZCB0byBjb21wbGV0ZSBhbiBFeCBjb21tYW5kIGxpbmUsIGxpa2UKK2l0J3MgZG9uZSBvbiB0aGUgY29tbWFuZC1saW5lLiAgVGhpcyBpcyBhbHNvIHVzZWZ1bCBmb3Igd3JpdGluZyBWaW0gc2NyaXB0cyEKKworQWRkaXRpb25hbGx5LCB0aGVyZSBpcyAiaW1wcm92ZWQgRXggbW9kZSIuICBFbnRlcmVkIHdoZW4gVmltIGlzIHN0YXJ0ZWQgYXMKKyJleGltIiBvciAidmltIC1FIiwgYW5kIHdpdGggdGhlICJnUSIgY29tbWFuZC4gIFdvcmtzIGxpa2UgcmVwZWF0ZWQgdXNlIG9mCisiOiIsIHdpdGggZnVsbCBjb21tYW5kLWxpbmUgZWRpdGluZyBhbmQgY29tcGxldGlvbi4gKFVsZiBDYXJsc3NvbikKKworCitEZWJ1Z2dpbmcgbW9kZQkJCQkJCSpuZXctZGVidWctbW9kZSoKKy0tLS0tLS0tLS0tLS0tCisKK0luIGRlYnVnZ2luZyBtb2RlIHNvdXJjZWQgc2NyaXB0cyBhbmQgdXNlciBmdW5jdGlvbnMgY2FuIGJlIGV4ZWN1dGVkIGxpbmUgYnkKK2xpbmUuICBUaGVyZSBhcmUgY29tbWFuZHMgdG8gc3RlcCBvdmVyIGEgY29tbWFuZCBvciBzdGVwIGludG8gaXQuIHxkZWJ1Zy1tb2RlfAorCitCcmVha3BvaW50cyBjYW4gYmUgc2V0IHRvIHJ1biB1bnRpbCBhIGNlcnRhaW4gbGluZSBpbiBhIHNjcmlwdCBvciB1c2VyCitmdW5jdGlvbiBpcyBleGVjdXRlZC4gfDpicmVha2FkZHwKKworRGVidWdnaW5nIGNhbiBiZSBzdGFydGVkIHdpdGggIjpkZWJ1ZyB7Y21kfSIgdG8gZGVidWcgd2hhdCBoYXBwZW5zIHdoZW4gYQorY29tbWFuZCBleGVjdXRlcy4gIFRoZSB8LUR8IGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIGRlYnVnIHdoaWxlIHN0YXJ0aW5nIHVwLgorCisKK0N1cnNvciBpbiB2aXJ0dWFsIHBvc2l0aW9uCQkJCSpuZXctdmlydGVkaXQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGRlZCB0aGUgJ3ZpcnR1YWxlZGl0JyBvcHRpb246IEFsbG93IHBvc2l0aW9uaW5nIHRoZSBjdXJzb3Igd2hlcmUgdGhlcmUgaXMgbm8KK2FjdHVhbCBjaGFyYWN0ZXIgaW4gSW5zZXJ0IG1vZGUsIFZpc3VhbCBtb2RlIG9yIGFsd2F5cy4gKE1hdHRoaWFzIEtyYW1tKQorVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBWaXN1YWwtYmxvY2sgbW9kZS4gIEl0IGFsbG93cyBwb3NpdGlvbmluZyBhCitjb3JuZXIgb2YgdGhlIGFyZWEgd2hlcmUgdGhlcmUgaXMgbm8gdGV4dCBjaGFyYWN0ZXIuICAoTWFueSBpbXByb3ZlbWVudHMgYnkKK0NoYXNlIFRpbmdsZXkpCisKKworRGVidWdnZXIgaW50ZXJmYWNlCQkJCQkqbmV3LWRlYnVnLWl0ZioKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdhcyBvcmlnaW5hbGx5IG1hZGUgdG8gd29yayB3aXRoIFN1biBWaXN1YWwgV29ya3Nob3AuIChHb3Jkb24gUHJpZXVyKQorU2VlIHxkZWJ1Z2dlci50eHR8LCB8c2lnbi50eHR8IGFuZCB8d29ya3Nob3AudHh0fC4KKworQWRkZWQgdGhlICI6c2lnbiIgY29tbWFuZCB0byBkZWZpbmUgYW5kIHBsYWNlIHNpZ25zLiAgVGhleSBjYW4gYmUgZGlzcGxheWVkCit3aXRoIHR3byBBU0NJSSBjaGFyYWN0ZXJzIG9yIGFuIGljb24uICBUaGUgbGluZSBhZnRlciBpdCBjYW4gYmUgaGlnaGxpZ2h0ZWQuCitVc2VmdWwgdG8gZGlzcGxheSBicmVha3BvaW50cyBhbmQgdGhlIGN1cnJlbnQgUEMgcG9zaXRpb24uCisKK0FkZGVkIHRoZSB8OndzdmVyYnwgY29tbWFuZCB0byBleGVjdXRlIGRlYnVnZ2VyIGNvbW1hbmRzLgorCitBZGRlZCBiYWxsb29uIHN0dWZmOiAnYmFsbG9vbmRlbGF5JyBhbmQgJ2JhbGxvb25ldmFsJyBvcHRpb25zLgorCitBZGRlZCAiaWNvbj0iIGFyZ3VtZW50IGZvciAiOm1lbnUiLiAgQWxsb3dzIGRlZmluaW5nIGEgc3BlY2lmaWMgaWNvbiBmb3IgYQorVG9vbEJhciBpdGVtLgorCisKK0NvbW11bmljYXRpb24gYmV0d2VlbiBWaW1zCQkJCSpuZXctdmltLXNlcnZlcioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGVkIGNvbW11bmljYXRpb24gYmV0d2VlbiB0d28gVmltcy4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIHNlbmQgY29tbWFuZHMgZnJvbQorb25lIFZpbSB0byBhbm90aGVyLiAgV29ya3MgZm9yIFgtV2luZG93cyBhbmQgTVMtV2luZG93cyB8Y2xpZW50c2VydmVyfC4KKworVXNlICItLXJlbW90ZSIgdG8gaGF2ZSBmaWxlcyBiZSBlZGl0ZWQgaW4gYW4gYWxyZWFkeSBydW5uaW5nIFZpbS4KK1VzZSAiLS1yZW1vdGUtd2FpdCIgdG8gZG8gdGhlIHNhbWUgYW5kIHdhaXQgZm9yIHRoZSBlZGl0aW5nIHRvIGZpbmlzaC4KK1VzZSAiLS1yZW1vdGUtc2VuZCIgdG8gc2VuZCBjb21tYW5kcyBmcm9tIG9uZSBWaW0gdG8gYW5vdGhlci4KK1VzZSAiLS1yZW1vdGUtZXhwciIgdG8gaGF2ZSBhbiBleHByZXNzaW9uIGV2YWx1YXRlZCBpbiBhbm90aGVyIFZpbS4KK1VzZSAiLS1zZXJ2ZXJsaXN0IiB0byBsaXN0IHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIFZpbSBzZXJ2ZXJzLiAoWCBvbmx5KQorVGhlcmUgYXJlIGFsc28gZnVuY3Rpb25zIHRvIGNvbW11bmljYXRlIGJldHdlZW4gdGhlIHNlcnZlciBhbmQgdGhlIGNsaWVudC4KK3xyZW1vdGVfc2VuZCgpfCB8cmVtb3RlX2V4cHIoKXwKKworKFgtd2luZG93cyB2ZXJzaW9uIGltcGxlbWVudGVkIGJ5IEZsZW1taW5nIE1hZHNlbiwgTVMtV2luZG93cyB2ZXJzaW9uIGJ5IFBhdWwKK01vb3JlKQorCitBZGRlZCB0aGUgY29tbWFuZCBzZXJ2ZXIgbmFtZSB0byB0aGUgd2luZG93IHRpdGxlLCBzbyB5b3UgY2FuIHNlZSB3aGljaCBzZXJ2ZXIKK25hbWUgYmVsb25ncyB0byB3aGljaCBWaW0uCisKK1JlbW92ZWQgdGhlIE9sZVZpbSBkaXJlY3RvcnkgYW5kIFNlbmRUb1ZpbS5leGUgYW5kIEVkaXRXaXRoVmltLmV4ZSBmcm9tIHRoZQorZGlzdHJpYnV0aW9uLiAgQ2FuIG5vdyB1c2UgImd2aW0gLS1yZW1vdGUiIGFuZCAiZ3ZpbSAtLXJlbW90ZS1zZW5kIiwgd2hpY2ggaXMKK3BvcnRhYmxlLgorCitHVEsrOiBTdXBwb3J0IHJ1bm5pbmcgVmltIGluc2lkZSBhbm90aGVyIHdpbmRvdy4gIFVzZXMgdGhlIC0tc29ja2V0aWQgYXJndW1lbnQKKyhOZWlsIEJpcmQpCisKKworQnVmZmVyIHR5cGUgb3B0aW9ucwkJCQkJKm5ldy1idWZ0eXBlKgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgJ2J1ZnR5cGUnIGFuZCAnYnVmaGlkZGVuJyBvcHRpb25zIGhhdmUgYmVlbiBhZGRlZC4gIFRoZXkgY2FuIGJlIHNldCB0bworaGF2ZSBkaWZmZXJlbnQga2luZHMgb2YgYnVmZmVycy4gIEZvciBleGFtcGxlOgorLSAnYnVmdHlwZScgPSAicXVpY2tmaXgiOiBidWZmZXIgd2l0aCBlcnJvciBsaXN0CistICdidWZ0eXBlJyA9ICJub2ZpbGUiIGFuZCAnYnVmaGlkZGVuJyA9ICJkZWxldGUiOiBzY3JhdGNoIGJ1ZmZlciB0aGF0IHdpbGwgYmUKKyAgZGVsZXRlZCBhcyBzb29uIGFzIHRoZXJlIGlzIG5vIHdpbmRvdyBkaXNwbGF5aW5nIGl0LgorCisnYnVmaGlkZGVuJyBjYW4gYmUgdXNlZCB0byBvdmVycnVsZSB0aGUgJ2hpZGRlbicgb3B0aW9uIGZvciBvbmUgYnVmZmVyLgorCitJbiBjb21iaW5hdGlvbiB3aXRoICdidWZsaXN0ZWQnIGFuZCAnc3dhcGZpbGUnIHRoaXMgb2ZmZXJzIHRoZSBwb3NzaWJpbGl0eSB0bwordXNlIHZhcmlvdXMga2luZHMgb2Ygc3BlY2lhbCBidWZmZXJzLiAgU2VlIHxzcGVjaWFsLWJ1ZmZlcnN8LgorCisKK1ByaW50aW5nCQkJCQkJKm5ldy1wcmludGluZyoKKy0tLS0tLS0tCisKK0luY2x1ZGVkIGZpcnN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSAiOmhhcmRjb3B5IiBjb21tYW5kIGZvciBwcmludGluZwordG8gcGFwZXIuICBGb3IgTVMtV2luZG93cyBhbnkgaW5zdGFsbGVkIHByaW50ZXIgY2FuIGJlIHVzZWQuICBGb3Igb3RoZXIKK3N5c3RlbXMgYSBQb3N0U2NyaXB0IGZpbGUgaXMgZ2VuZXJhdGVkLCB3aGljaCBjYW4gYmUgcHJpbnRlZCB3aXRoIHRoZQorJ3ByaW50ZXhwcicgb3B0aW9uLgorKE1TLVdpbmRvd3MgcGFydCBieSBWaW5jZSBOZWdyaSwgVmlwaW4gQXJhdmluZCwgUG9zdFNjcmlwdCBieSBWaW5jZSBOZWdyaSBhbmQKK01pa2UgV2lsbGlhbXMpCisKK01hZGUgIjpoYXJkY29weSIgd29yayB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gKE11cmFva2EgVGFybywgWWFzdWhpcm8KK01hdHN1bW90bykKKworQWRkZWQgb3B0aW9ucyB0byB0dW5lIHRoZSB3YXkgcHJpbnRpbmcgd29ya3M6IChWaW5jZSBOZWdyaSkKKy0gJ3ByaW50b3B0aW9ucycgZGVmaW5lcyB2YXJpb3VzIHRoaW5ncy4KKy0gJ3ByaW50aGVhZGVyJyBzcGVjaWZpZXMgdGhlIGhlYWRlciBmb3JtYXQuICBBZGRlZCAiTiIgZmllbGQgdG8gJ3N0YXR1c2xpbmUnCisgIGZvciB0aGUgcGFnZSBudW1iZXIuCistICdwcmludGZvbnQnIHNwZWNpZmllcyB0aGUgZm9udCBuYW1lIGFuZCBhdHRyaWJ1dGVzLgorLSAncHJpbnRkZXZpY2UnIGRlZmluZXMgdGhlIGRlZmF1bHQgcHJpbnRlciBmb3IgIjpoYXJkY29weSEiLgorCisKK1BvcnRzCQkJCQkJCSpwb3J0cy02KgorLS0tLS0KKworUG9ydCB0byBPUy8zOTAgVW5peCAoUmFsZiBTY2hhbmRsKQorLSBBIGxvdCBvZiBjaGFuZ2VzIHRvIGhhbmRsZSBFQkNESUMgZW5jb2RpbmcuCistIENoYW5nZWQgQ3RybCgneCcpIHRvIEN0cmxfeCBkZWZpbmUuCisKK0luY2x1ZGVkIGpzYm1vdXNlIHN1cHBvcnQuIChEYXJyZW4gR2FydGgpCitTdXBwb3J0IGZvciBkZWMgbW91c2UgaW4gVW5peC4gKFN0ZXZlIFdhbGwpCisKK1BvcnQgdG8gMTYtYml0IE1TIFdpbmRvd3MgKFdpbmRvd3MgMy4xeCkgKFZpbmNlIE5lZ3JpKQorCitQb3J0IHRvIFFOWC4gIFN1cHBvcnRzIHRoZSBQaG90b24gR1VJLCBtb3VzZSwgZXRjLiAoSnVsaWFuIEtpbnJhaWQpCisKK0FsbG93IGNyb3NzLWNvbXBpbGluZyB0aGUgV2luMzIgdmVyc2lvbiB3aXRoIE1ha2VfbWluZy5tYWsuIChSb24gQWFyb24pCitBZGRlZCBQeXRob24gc3VwcG9ydCBmb3IgY29tcGlsaW5nIHdpdGggTWluZ3cuIChSb24gQWFyb24pCisKK0RvcyAzMiBiaXQ6IEFkZGVkIHN1cHBvcnQgdGhlIFdpbmRvd3MgY2xpcGJvYXJkLiAoRGF2aWQgS290Y2hhbikKKworV2luMzI6IER5bmFtaWNhbGx5IGxvYWQgUGVybCBhbmQgUHl0aG9uLiAgQWxsb3dzIGNvbXBpbGluZyBWaW0gd2l0aCB0aGVzZQoraW50ZXJmYWNlcyBhbmQgd2lsbCB0cnkgdG8gZmluZCB0aGUgRExMcyBhdCBydW50aW1lLiAoTXVyYW9rYSBUYXJvKQorCitDb21waWxpbmcgdGhlIFdpbjMyIEdVSSB3aXRoIEN5Z3dpbi4gIEFsc28gY29tcGlsZSB2aW1ydW4sIGRvc2luc3QgYW5kCit1bmluc3RhbGwuICAoR2VyZnJpZWQpCisKK01hYzogTWFrZSBWaW0gY29tcGlsZSB3aXRoIHRoZSBmcmVlIE1QVyBjb21waWxlciBzdXBwbGllZCBieSBBcHBsZS4gIEFuZAordXBkYXRlcyBmb3IgQ29kZVdhcnJpb3IuIChBeGVsIEtpZWxob3JuKQorCitBZGRlZCB0eXBlY2FzdHMgYW5kIGlmZGVmcyBhcyBhIHN0YXJ0IHRvIG1ha2UgVmltIHdvcmsgb24gV2luNjQgKEdlb3JnZQorUmVpbGx5KQorCisKK1F1aWNrZml4IGV4dGVuZGVkCQkJCQkqcXVpY2tmaXgtNioKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGVkIHRoZSAiZXJyb3Igd2luZG93Ii4gIEl0IGNvbnRhaW5zIGFsbCB0aGUgZXJyb3JzIG9mIHRoZSBjdXJyZW50IGVycm9yCitsaXN0LiAgUHJlc3NpbmcgPEVudGVyPiBpbiBhIGxpbmUgbWFrZXMgVmltIGp1bXAgdG8gdGhhdCBsaW5lIChpbiBhbm90aGVyCit3aW5kb3cpLiAgVGhpcyBtYWtlcyBpdCBlYXN5IHRvIG5hdmlnYXRlIHRocm91Z2ggdGhlIGVycm9yIGxpc3QuCit8cXVpY2tmaXgtd2luZG93fC4KKworLSB8OmNvcGVufCBvcGVucyB0aGUgcXVpY2tmaXggd2luZG93LgorLSB8OmNjbG9zZXwgY2xvc2VzIHRoZSBxdWlja2ZpeCB3aW5kb3cuCistIHw6Y3dpbmRvd3wgdGFrZXMgY2FyZSB0aGF0IHRoZXJlIGlzIGEgcXVpY2tmaXggd2luZG93IG9ubHkgd2hlbiB0aGVyZSBhcmUKKyAgcmVjb2duaXplZCBlcnJvcnMuIChEYW4gU2hhcnApCisKKy0gUXVpY2tmaXggYWxzbyBrbm93cyAiaW5mbyIsIG5leHQgdG8gIndhcm5pbmciIGFuZCAiZXJyb3IiIHR5cGVzLiAiJUkiIGNhbiBiZQorICB1c2VkIGZvciB0aGUgc3RhcnQgb2YgYSBtdWx0aS1saW5lIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gKFRvbnkgTGVuZWlzKQorLSBUaGUgIiVwIiBhcmd1bWVudCBjYW4gYmUgdXNlZCBpbiAnZXJyb3Jmb3JtYXQnIHRvIGdldCB0aGUgY29sdW1uIG51bWJlciBmcm9tCisgIGEgbGluZSB3aGVyZSAiXiIgcG9pbnRzIHRvIHRoZSBjb2x1bW4uIChTdGVmYW4gUm9lbWVyKQorLSBXaGVuIHVzaW5nICIlZiIgaW4gJ2Vycm9yZm9ybWF0JyBvbiBhIERPUy9XaW5kb3dzIHN5c3RlbSwgYWxzbyBpbmNsdWRlICJjOiIKKyAgaW4gdGhlIGZpbGVuYW1lLCBldmVuIHdoZW4gdXNpbmcgIiVmOiIuCisKKworT3BlcmF0b3IgbW9kaWZpZXJzCQkJCQkqbmV3LW9wZXJhdG9yLW1vZCoKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnNlcnQgInYiLCAiViIgb3IgQ1RSTC1WIGJldHdlZW4gYW4gb3BlcmF0b3IgYW5kIGEgbW90aW9uIGNvbW1hbmQgdG8gZm9yY2UKK3RoZSBvcGVyYXRvciB0byB3b3JrIGNoYXJhY3Rlcndpc2UsIGxpbmV3aXNlIG9yIGJsb2Nrd2lzZS4gfG9fdnwKKworCitTZWFyY2ggUGF0aAkJCQkJCSpuZXctc2VhcmNoLXBhdGgqCistLS0tLS0tLS0tLQorCitWaW0gY2FuIHNlYXJjaCBpbiBhIGRpcmVjdG9yeSB0cmVlIG5vdCBvbmx5IGluIGRvd253YXJkcyBidXQgYWxzbyB1cHdhcmRzLgorV29ya3MgZm9yIHRoZSAncGF0aCcsICdjZHBhdGgnIGFuZCAndGFncycgb3B0aW9ucy4gKFJhbGYgU2NoYW5kbCkKKworQWxzbyB1c2UgIioqIiBmb3IgJ3RhZ3MnIG9wdGlvbi4gKFJhbGYgU2NoYW5kbCkKKworQWRkZWQgJ2luY2x1ZGVleHByJywgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IGZpbGUgbmFtZSBmb3VuZCBieSAnaW5jbHVkZScKK29wdGlvbi4KK0Fsc28gdXNlICdpbmNsdWRlZXhwcicgZm9yICJnZiIgYW5kICI8Y2ZpbGU+IiB3aGVuIHRoZSBmaWxlIGNhbid0IGJlIGZvdW5kCit3aXRob3V0IG1vZGlmaWNhdGlvbi4gIFVzZWZ1bCBmb3IgZG9pbmcgImdmIiBvbiB0aGUgbmFtZSBhZnRlciBhbiBpbmNsdWRlIG9yCitpbXBvcnQgc3RhdGVtZW50LgorCitBZGRlZCB0aGUgJ2NkcGF0aCcgb3B0aW9uOiBMb2NhdGlvbnMgdG8gZmluZCBhICI6Y2QiIGFyZ3VtZW50LiAoUmFmKQorCitBZGRlZCB0aGUgJ3N1ZmZpeGVzYWRkJyBvcHRpb246IFN1ZmZpeGVzIHRvIGJlIGFkZGVkIHRvIGEgZmlsZSBuYW1lIHdoZW4KK3NlYXJjaGluZyBmb3IgYSBmaWxlIGZvciB0aGUgImdmIiwgIltJIiwgZXRjLiBjb21tYW5kcy4KKworCitXcml0aW5nIGZpbGVzIGltcHJvdmVkCQkJCQkqbmV3LWZpbGUtd3JpdGluZyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkZWQgdGhlICdiYWNrdXBjb3B5JyBvcHRpb246IFNlbGVjdCB3aGV0aGVyIGEgZmlsZSBpcyB0byBiZSBjb3BpZWQgb3IKK3JlbmFtZWQgdG8gbWFrZSBhIGJhY2t1cCBmaWxlLiAgVXNlZnVsIG9uIFVuaXggdG8gc3BlZWQgdXAgd3JpdGluZyBhbiBvcmRpbmFyeQorZmlsZS4gIFVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zIHRvIHByZXNlcnZlIGZpbGUgYXR0cmlidXRlcyBhbmQgd2hlbiBlZGl0aW5nIGEKK2ZpbGUgb24gYSBVbml4IGZpbGVzeXN0ZW0uCisKK0FkZGVkIHRoZSAnYXV0b3dyaXRlYWxsJyBvcHRpb24uICBXb3JrcyBsaWtlICdhdXRvd3JpdGUnIGJ1dCBmb3IgbW9yZQorY29tbWFuZHMuCisKK0FkZGVkIHRoZSAnYmFja3Vwc2tpcCcgb3B0aW9uOiBBIGxpc3Qgb2YgZmlsZSBwYXR0ZXJucyB0byBza2lwIG1ha2luZyBhIGJhY2t1cAorZmlsZSB3aGVuIGl0IG1hdGNoZXMuICBUaGUgZGVmYXVsdCBmb3IgVW5peCBpbmNsdWRlcyAiL3RtcC8qIiwgdGhpcyBtYWtlcworImNyb250YWIgLWUiIHdvcmsuCisKK0FkZGVkIHN1cHBvcnQgZm9yIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0wpIGZvciBGcmVlQlNEIGFuZCBXaW4zMi4gIFRoZSBBQ0wKK2lzIGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBmaWxlIHRvIHRoZSBuZXcgZmlsZSAob3IgdGhlIGJhY2t1cCBpZiBpdCdzCitjb3BpZWQpLgorQUNMIGlzIGFsc28gc3VwcG9ydGVkIGZvciBBSVgsIFNvbGFyaXMgYW5kIGdlbmVyaWMgUE9TSVguIChUb21hcyBPZ3JlbikKK0FuZCBvbiBTR0kuCisKKworQXJndW1lbnQgbGlzdAkJCQkJCSpuZXctYXJndW1lbnQtbGlzdCoKKy0tLS0tLS0tLS0tLS0KKworVGhlIHN1cHBvcnQgZm9yIHRoZSBhcmd1bWVudCBsaXN0IGhhcyBiZWVuIGV4dGVuZGVkLiAgSXQgY2FuIG5vdyBiZQorbWFuaXB1bGF0ZWQgdG8gY29udGFpbiB0aGUgZmlsZXMgeW91IHdhbnQgaXQgdG8gY29udGFpbi4KKworVGhlIGFyZ3VtZW50IGxpc3QgY2FuIG5vdyBiZSBsb2NhbCB0byBhIHdpbmRvdy4gIEl0IGlzIGNyZWF0ZWQgd2l0aCB0aGUKK3w6YXJnbG9jYWx8IGNvbW1hbmQuICBUaGUgfDphcmdnbG9iYWx8IGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZ28gYmFjayB0byB0aGUKK2dsb2JhbCBhcmd1bWVudCBsaXN0LgorCitUaGUgfDphcmdkb3wgY29tbWFuZCBleGVjdXRlcyBhIGNvbW1hbmQgb24gYWxsIGZpbGVzIGluIHRoZSBhcmd1bWVudCBsaXN0LgorCitGaWxlIG5hbWVzIGNhbiBiZSBhZGRlZCB0byB0aGUgYXJndW1lbnQgbGlzdCB3aXRoIHw6YXJnYWRkfC4gIEZpbGUgbmFtZXMgY2FuCitiZSByZW1vdmVkIHdpdGggfDphcmdkZWxldGV8LgorCisiIyMiIGNhbiBiZSB1c2VkIGxpa2UgIiMiLCBpdCBpcyByZXBsYWNlZCBieSBhbGwgdGhlIG5hbWVzIGluIHRoZSBhcmd1bWVudAorbGlzdCBjb25jYXRlbmF0ZWQuICBVc2VmdWwgZm9yICI6Z3JlcCBmb28gIyMiLgorCitUaGUgfDphcmdlZGl0fCBhZGRzIGEgZmlsZSB0byB0aGUgYXJndW1lbnQgbGlzdCBhbmQgZWRpdHMgaXQuICBMaWtlICI6YXJnYWRkIgorYW5kIHRoZW4gIjplZGl0Ii4KKworCitSZXN0b3JlIGEgVmlldwkJCQkJCSpuZXctVmlldyoKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSAiOm1rdmlldyIgY29tbWFuZCB3cml0ZXMgYSBWaW0gc2NyaXB0IHdpdGggdGhlIHNldHRpbmdzIGFuZCBtYXBwaW5ncyBmb3IKK29uZSB3aW5kb3cuICBXaGVuIHRoZSBjcmVhdGVkIGZpbGUgaXMgc291cmNlZCwgdGhlIHZpZXcgb2YgdGhlIHdpbmRvdyBpcworcmVzdG9yZWQuICBJdCdzIGxpa2UgIjpta3Nlc3Npb24iIGZvciBvbmUgd2luZG93LgorVGhlIFZpZXcgYWxzbyBjb250YWlucyB0aGUgbG9jYWwgYXJndW1lbnQgbGlzdCBhbmQgbWFudWFsbHkgY3JlYXRlZCwgb3BlbmVkCithbmQgY2xvc2VkIGZvbGRzLgorCitBZGRlZCB0aGUgIjpsb2FkdmlldyIgY29tbWFuZCBhbmQgdGhlICd2aWV3ZGlyJyBvcHRpb246IEFsbG93cyBmb3Igc2F2aW5nIGFuZAorcmVzdG9yaW5nIHZpZXdzIG9mIGEgZmlsZSB3aXRoIHNpbXBsZSBjb21tYW5kcy4gIjpta3ZpZXcgMSIgc2F2ZXMgdmlldyAxIGZvcgordGhlIGN1cnJlbnQgZmlsZSwgIjpsb2FkdmlldyAxIiBsb2FkcyBpdCBhZ2Fpbi4gIEFsc28gYWxsb3dzIHF1aWNrbHkgc3dpdGNoaW5nCitiZXR3ZWVuIHR3byB2aWV3cyBvbiBvbmUgZmlsZS4gIEFuZCBzYXZpbmcgYW5kIHJlc3RvcmluZyBtYW51YWwgZm9sZHMgYW5kIHRoZQorZm9sZGluZyBzdGF0ZS4KKworQWRkZWQgJ3ZpZXdvcHRpb25zJyB0byBzcGVjaWZ5IGhvdyAiOm1rdmlldyIgd29ya3MuCisKKyI6bWtzZXNzaW9uIiBub3cgYWxzbyB3b3JrcyBmaW5lIHdpdGggdmVydGljYWwgc3BsaXRzLiAgSXQgaGFzIGJlZW4gZnVydGhlcgoraW1wcm92ZWQgYW5kIHJlc3RvcmVzIHRoZSB2aWV3IG9mIGVhY2ggd2luZG93LiAgSXQgYWxzbyB3b3JrcyBwcm9wZXJseSB3aXRoCitwcmV2aWV3IGFuZCBxdWlja2ZpeCB3aW5kb3dzLgorCisnc2Vzc2lvbm9wdGlvbnMnIGlzIHVzZWQgZm9yICI6bWt2aWV3IiBhcyB3ZWxsLgorQWRkZWQgImN1cmRpciIgYW5kICJzZXNkaXIiIHRvICdzZXNzaW9ub3B0aW9ucycuICBBbGxvd3Mgc2VsZWN0aW9uIG9mIHdoYXQKK3RoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIHJlc3RvcmVkIHRvLgorCitUaGUgc2Vzc2lvbiBmaWxlIG5vdyBhbHNvIGNvbnRhaW5zIHRoZSBhcmd1bWVudCBsaXN0KHMpLgorCisKK0NvbG9yIHNjaGVtZXMJCQkJCQkqbmV3LWNvbG9yLXNjaGVtZXMqCistLS0tLS0tLS0tLS0tCisKK1N1cHBvcnQgZm9yIGxvYWRpbmcgYSBjb2xvciBzY2hlbWUuICBBZGRlZCB0aGUgIjpjb2xvcnNjaGVtZSIgY29tbWFuZC4KK0F1dG9tYXRpY2FsbHkgYWRkIG1lbnUgZW50cmllcyBmb3IgYXZhaWxhYmxlIHNjaGVtZXMuCitTaG91bGQgbm93IHByb3Blcmx5IHJlc2V0IHRoZSBjb2xvcnMgd2hlbiAnYmFja2dyb3VuZCcgb3IgJ3RfQ28nIGlzIGNoYW5nZWQuCisiOmhpZ2hsaWdodCBjbGVhciIgc2V0cyB0aGUgZGVmYXVsdCBjb2xvcnMgYWdhaW4uCisiOnN5bnRheCByZXNldCIgc2V0cyB0aGUgc3ludGF4IGhpZ2hsaWdodCBjb2xvcnMgYmFjayB0byB0aGUgZGVmYXVsdHMuCitGb3IgIjpzZXQgYmcmIiBndWVzcyB0aGUgdmFsdWUuICBUaGlzIGFsbG93cyBhIGNvbG9yIHNjaGVtZSB0byBzd2l0Y2ggYmFjayB0bwordGhlIGRlZmF1bHQgY29sb3JzLgorV2hlbiBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIHN3aXRjaGVkIG9uIGFuZCBhIGNvbG9yIHNjaGVtZSB3YXMgZGVmaW5lZCwgcmVsb2FkCit0aGUgY29sb3Igc2NoZW1lIHRvIGRlZmluZSB0aGUgY29sb3JzLgorCisKK1ZhcmlvdXMgbmV3IGl0ZW1zCQkJCQkqbmV3LWl0ZW1zLTYqCistLS0tLS0tLS0tLS0tLS0tLQorCitOb3JtYWwgbW9kZSBjb21tYW5kczogfgorCisiZ2kiCQlKdW1wIHRvIHRoZSBeIG1hcmsgYW5kIHN0YXJ0IEluc2VydCBtb2RlLiAgQWxzbyB3b3JrcyB3aGVuIHRoZQorCQltYXJrIGlzIGp1c3QgYWZ0ZXIgdGhlIGxpbmUuIHxnaXwKKworImcnbSIgYW5kICJnYG0iCisJCUp1bXAgdG8gYSBtYXJrIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGp1bXBsaXN0LiAgTm93IHlvdSBjYW4gdXNlCisJCWdgIiB0byBqdW1wIHRvIHRoZSBsYXN0IGtub3duIHBvc2l0aW9uIGluIGEgZmlsZSB3aXRob3V0IHNpZGUKKwkJZWZmZWN0cy4gIEFsc28gdXNlZnVsIGluIG1hcHBpbmdzLgorCitbJywgW2AsIF0nIGFuZCBdYAorCQltb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQvcHJldmlvdXMgbG93ZXJjYXNlIG1hcmsuCisKK2dfCQlHbyB0byBsYXN0IG5vbi1ibGFuayBpbiBsaW5lLiAoU3RldmUgV2FsbCkKKworCitPcHRpb25zOiB+CisKKydhdXRvcmVhZCcJV2hlbiBkZXRlY3RlZCB0aGF0IGEgZmlsZSBjaGFuZ2VkIG91dHNpZGUgb2YgVmltLAorCQlhdXRvbWF0aWNhbGx5IHJlYWQgYSBidWZmZXIgYWdhaW4gd2hlbiBpdCdzIG5vdCBjaGFuZ2VkLgorCQlJdCBoYXMgYSBnbG9iYWwgYW5kIGEgbG9jYWwgdmFsdWUuICBVc2UgIjpzZXRsb2NhbCBhdXRvcmVhZDwiCisJCXRvIGdvIGJhY2sgdG8gdXNpbmcgdGhlIGdsb2JhbCB2YWx1ZSBmb3IgJ2F1dG9yZWFkJy4KKworJ2RlYnVnJwkJV2hlbiBzZXQgdG8gIm1zZyIgaXQgd2lsbCBwcmludCBlcnJvciBtZXNzYWdlcyB0aGF0IHdvdWxkCisJCW90aGVyd2lzZSBiZSBvbWl0dGVkLiAgVXNlZnVsIGZvciBkZWJ1Z2dpbmcgJ2luZGVudGV4cHInIGFuZAorCQknZm9sZGV4cHInLgorCisnbGlzcHdvcmRzJwlMaXN0IG9mIHdvcmRzIHVzZWQgZm9yIGxpc3AgaW5kZW50aW5nLiAgSXQgd2FzIHByZXZpb3VzbHkgaGFyZAorCQljb2RlZC4gIEFkZGVkIGEgbnVtYmVyIG9mIExpc3AgbmFtZXMgdG8gdGhlIGRlZmF1bHQuCisKKydmb2xkLi4uJwlNYW55IG5ldyBvcHRpb25zIGZvciBmb2xkaW5nLgorCisnbW9kaWZpYWJsZScJV2hlbiBvZmYsIGl0IGlzIGltcG9zc2libGUgdG8gbWFrZSBjaGFuZ2VzIHRvIGEgYnVmZmVyLgorCQlUaGUgJW0gYW5kICVNIGl0ZW1zIGluICdzdGF0dXNsaW5lJyBzaG93IGEgJy0nLgorCisncHJldmlld3dpbmRvdycgU2V0IGluIHRoZSBwcmV2aWV3IHdpbmRvdy4gIFVzZWQgaW4gYSBzZXNzaW9uIGZpbGUgdG8gbWFyayBhCisJCXdpbmRvdyBhcyB0aGUgcHJldmlldyB3aW5kb3cuCisKKydwcmludGZvbnQnCisncHJpbnRleHByJworJ3ByaW50aGVhZGVyJworJ3ByaW50ZGV2aWNlJworJ3ByaW50b3B0aW9ucycJZm9yICI6aGFyZGNvcHkiLgorCisnYnVmbGlzdGVkJwlNYWtlcyBhIGJ1ZmZlciBhcHBlYXIgaW4gdGhlIGJ1ZmZlciBsaXN0IG9yIG5vdC4KKworVXNlICJ2aW17dmVyc2lvbn06IiBmb3IgbW9kZWxpbmVzLCBvbmx5IHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIHZlcnNpb24gaXMKKz49IHt2ZXJzaW9ufS4gIEFsc28gInZpbT57dmVyc2lvbn0iLCAidmltPHt2ZXJzaW9ufSIgYW5kICJ2aW09e3ZlcnNpb259Ii4KKworCitFeCBjb21tYW5kczogfgorCis6c2F2W2Vhc11bIV0ge2ZpbGV9CisJCVdvcmtzIGxpa2UgIjp3IGZpbGUiIGFuZCAiOmUgIyIsIGJ1dCB3aXRob3V0IGxvYWRpbmcgdGhlIGZpbGUKKwkJYWdhaW4gYW5kIGF2b2lkaW5nIG90aGVyIHNpZGUgZWZmZWN0cy4gfDpzYXZlYXN8CisKKzpzaWxlbnRbIV0ge2NtZH0KKwkJRXhlY3V0ZSBhIGNvbW1hbmQgc2lsZW50bHkuICBBbHNvIGRvbid0IHVzZSBhIGRlbGF5IHRoYXQgd291bGQKKwkJY29tZSBhZnRlciB0aGUgbWVzc2FnZS4gIEFuZCBkb24ndCBkbyAnc2hvd21hdGNoJy4KKwkJUklTQ09TOiBSZW1vdmVkIHRoYXQgIiF+Y21kIiBkaWRuJ3Qgb3V0cHV0IGFueXRoaW5nLCBhbmQKKwkJZGlkbid0IHdhaXQgZm9yIDxFbnRlcj4gYWZ0ZXJ3YXJkcy4gIENhbiB1c2UgIjpzaWxlbnQgIWNtZCIKKwkJbm93LgorOm1lbnUgPHNpbGVudD4gIEFkZCBhIG1lbnUgdGhhdCB3b24ndCBlY2hvIEV4IGNvbW1hbmRzLgorOm1hcCA8c2lsZW50PiAgIEFkZCBhIG1hcHBpbmcgdGhhdCB3b24ndCBlY2hvIEV4IGNvbW1hbmRzLgorCis6Y2hlY2t0aW1lCUNoZWNrIGZvciBjaGFuZ2VkIGJ1ZmZlcnMuCisKKzp2ZXJib3NlIHtjbWR9ICBTZXQgJ3ZlcmJvc2UnIGZvciBvbmUgY29tbWFuZC4KKworOmVjaG9tc2cge2V4cHJ9Cis6ZWNob2VyciB7ZXhwcn0gTGlrZSAiOmVjaG8iIGJ1dCBzdG9yZSB0aGUgbWVzc2FnZSBpbiB0aGUgaGlzdG9yeS4gKE1hcmsKKwkJV2FnZ29uZXIpCisKKzpncmVwYWRkCVdvcmtzIGp1c3QgbGlrZSAiOmdyZXAiIGJ1dCBhZGRzIHRvIHRoZSBjdXJyZW50IGVycm9yIGxpc3QKKwkJaW5zdGVhZCBvZiBkZWZpbmluZyBhIG5ldyBsaXN0LiB8OmdyZXBhZGR8CisKKzpmaW5pc2gJCUZpbmlzaCBzb3VyY2luZyBhIGZpbGUuICBDYW4gYmUgdXNlZCB0byBza2lwIHRoZSByZXN0IG9mIGEgVmltCisJCXNjcmlwdC4gfDpmaW5pc2h8CisKKzpsZWZ0YWJvdmUKKzphYm92ZWxlZnQJU3BsaXQgbGVmdC9hYm92ZSBjdXJyZW50IHdpbmRvdy4KKworOnJpZ2h0YmVsb3cKKzpiZWxvd3JpZ2h0CVNwbGl0IHJpZ2h0L2JlbG93IGN1cnJlbnQgd2luZG93LgorCis6Zmlyc3QsIDpiZmlyc3QsIDpwdGZpcnN0LCBldGMuCisJCUFsaWFzIGZvciAiOnJld2luZCIuICBJdCdzIG1vcmUgbG9naWNhbCBjb21wYXJlZCB0byAiOmxhc3QiLgorCis6ZW5ldwkJRWRpdCBhIG5ldywgdW5uYW1lZCBidWZmZXIuICBUaGlzIGlzIG5lZWRlZCwgYmVjYXVzZSAiOmVkaXQiCisJCXJlLWVkaXRzIHRoZSBzYW1lIGZpbGUuIChXYWxsKQorCis6cXVpdGFsbAlTYW1lIGFzICI6cWFsbCIuCisKKzptYXRjaAkJRGVmaW5lIG1hdGNoIGhpZ2hsaWdodGluZyBsb2NhbCB0byBhIHdpbmRvdy4gIEFsbG93cworCQloaWdobGlnaHRpbmcgYW4gaXRlbSBpbiB0aGUgY3VycmVudCB3aW5kb3cgd2l0aG91dCBpbnRlcmZlcmluZworCQl3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcuCisKKzptZW51IGVuYWJsZQorOm1lbnUgZGlzYWJsZQlDb21tYW5kcyB0byBlbmFibGUvZGlzYWJsZSBtZW51IGVudHJpZXMgd2l0aG91dCByZW1vdmluZyB0aGVtLgorCQkoTW9uaXNoIFNoYWgpCisKKzp3aW5kbwkJRXhlY3V0ZSBhIGNvbW1hbmQgaW4gYWxsIHdpbmRvd3MuCis6YnVmZG8JCUV4ZWN1dGUgYSBjb21tYW5kIGluIGFsbCBidWZmZXJzLgorCis6d2luY21kCQlXaW5kb3cgKENUUkwtVykgY29tbWFuZC4gIFVzZWZ1bCB3aGVuIGEgTm9ybWFsIG1vZGUgY29tbWFuZAorCQljYW4ndCBiZSB1c2VkIChlLmcuLCBmb3IgYSBDdXJzb3JIb2xkIGF1dG9jb21tYW5kKS4gIFNlZQorCQl8Q3Vyc29ySG9sZC1leGFtcGxlfCBmb3IgYSBuaWNlIGFwcGxpY2F0aW9uIHdpdGggaXQuCisKKzpsY2QgYW5kIDpsY2hkaXIKKwkJU2V0IGxvY2FsIGRpcmVjdG9yeSBmb3IgYSB3aW5kb3cuIChCZW5qaWUgQ2hlbikKKworOmhpZGUge2NvbW1hbmR9CisJCUV4ZWN1dGUge2NvbW1hbmR9IHdpdGggJ2hpZGRlbicgc2V0LgorCis6ZW1lbnUJCWluIFZpc3VhbCBtb2RlIHRvIGV4ZWN1dGUgYSAiOnZtZW51IiBlbnRyeS4KKworOnBvcHVwCQlQb3AgdXAgYSBwb3B1cCBtZW51LgorCis6cmVkcmF3CQlSZWRyYXcgdGhlIHNjcmVlbiBldmVuIHdoZW4gYnVzeSB3aXRoIGEgc2NyaXB0IG9yIGZ1bmN0aW9uLgorCis6aGFyZGNvcHkJUHJpbnQgdG8gcGFwZXIuCisKKzpjb21waWxlcglMb2FkIGEgVmltIHNjcmlwdCB0byBkbyBzZXR0aW5ncyBmb3IgYSBzcGVjaWZpYyBjb21waWxlci4KKworOnojCQlMaXN0IG51bWJlcmVkIGxpbmVzLiAoQm9oZGFuIFZsYXN5dWspCisKKworTmV3IG1hcmtzOiB+CisKKycoIGFuZCAnKQlCZWdpbiBvciBlbmQgb2YgY3VycmVudCBzZW50ZW5jZS4gIFVzZWZ1bCBpbiBFeCBjb21tYW5kcy4KKyd7IGFuZCAnfQlCZWdpbiBvciBlbmQgb2YgY3VycmVudCBwYXJhZ3JhcGguICBVc2VmdWwgaW4gRXggY29tbWFuZHMuCisnLgkJUG9zaXRpb24gb2YgdGhlIGxhc3QgY2hhbmdlIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KKydeCQlQb3NpdGlvbiB3aGVyZSBJbnNlcnQgbW9kZSB3YXMgc3RvcHBlZC4KKworU3RvcmUgdGhlIF4gYW5kIC4gbWFya3MgaW4gdGhlIHZpbWluZm8gZmlsZS4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIGp1bXAgdG8gdGhlCitsYXN0IGluc2VydCBwb3NpdGlvbiBvciBjaGFuZ2VkIHRleHQuCisKKworTmV3IGZ1bmN0aW9uczogfgorYXJnaWR4KCkJQ3VycmVudCBpbmRleCBpbiBhcmd1bWVudCBsaXN0LgorYnVmbGlzdGVkKCkJQ2hlY2tzIGlmIHRoZSBidWZmZXIgZXhpc3RzIGFuZCBoYXMgJ2J1Zmxpc3RlZCcgc2V0LgorY2luZGVudCgpCUdldCBpbmRlbnQgYWNjb3JkaW5nIHRvICdjaW5kZW50Jy4KK2V2ZW50aGFuZGxlcigpCVJldHVybnMgMSB3aGVuIGluc2lkZSBhbiBldmVudCBoYW5kbGVyIGFuZCBpbnRlcmFjdGl2ZQorCQljb21tYW5kcyBjYW4ndCBiZSB1c2VkLgorZXhlY3V0YWJsZSgpCUNoZWNrcyBpZiBhIHByb2dyYW0gb3IgYmF0Y2ggc2NyaXB0IGNhbiBiZSBleGVjdXRlZC4KK2ZpbGV3cml0YWJsZSgpCUNoZWNrcyBpZiBhIGZpbGUgY2FuIGJlIHdyaXR0ZW4uIChSb24gQWFyb24pCitmb2xkY2xvc2VkKCkJRmluZCBvdXQgaWYgdGhlcmUgaXMgYSBjbG9zZWQgZm9sZC4gKEpvaGFubmVzIFplbGxuZXIpLgorZm9sZGNsb3NlZW5kKCkJRmluZCB0aGUgZW5kIG9mIGEgY2xvc2VkIGZvbGQuCitmb2xkbGV2ZWwoKQlGaW5kIG91dCB0aGUgZm9sZGxldmVsLiAoSm9oYW5uZXMgWmVsbG5lcikKK2ZvcmVncm91bmQoKQlNb3ZlIHRoZSBHVUkgd2luZG93IHRvIHRoZSBmb3JlZ3JvdW5kLgorZ2V0Y2hhcigpCUdldCBvbmUgY2hhcmFjdGVyIGZyb20gdGhlIHVzZXIuICBDYW4gYmUgdXNlZCB0byBkZWZpbmUgYQorCQltYXBwaW5nIHRoYXQgdGFrZXMgYW4gYXJndW1lbnQuCitnZXRjaGFybW9kKCkJR2V0IGxhc3QgdXNlZCBrZXkgbW9kaWZpZXIuCitnZXRidWZ2YXIoKQlnZXRzIHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24gb3IgbG9jYWwgdmFyaWFibGUgaW4gYSBidWZmZXIgKFJvbgorCQlBYXJvbikKK2dldGZzaXplKCkJUmV0dXJuIHRoZSBzaXplIG9mIGEgZmlsZS4KK2dldHdpbnZhcigpCWdldHMgdGhlIHZhbHVlIG9mIGFuIG9wdGlvbiBvciBsb2NhbCB2YXJpYWJsZSBpbiBhIHdpbmRvdyAoUm9uCisJCUFhcm9uKQorZ2xvYnBhdGgoKQlGaW5kIG1hdGNoaW5nIGZpbGVzIGluIGEgbGlzdCBvZiBkaXJlY3Rvcmllcy4KK2hhc21hcHRvKCkJRGV0ZWN0IGlmIGEgbWFwcGluZyB0byBhIHN0cmluZyBpcyBhbHJlYWR5IHByZXNlbnQuCitpY29udigpCQlDb252ZXJ0IGEgc3RyaW5nIGZyb20gb25lIGVuY29kaW5nIHRvIGFub3RoZXIuCitpbmRlbnQoKQlnZXRzIHRoZSBpbmRlbnQgb2YgYSBsaW5lIChSb24gQWFyb24pCitpbnB1dGRpYWxvZygpCUxpa2UgaW5wdXQoKSBidXQgdXNlIGEgR1VJIGRpYWxvZyB3aGVuIHBvc3NpYmxlLiAgQ3VycmVudGx5CisJCW9ubHkgd29ya3MgZm9yIFdpbjMyLCBNb3RpZiwgQXRoZW5hIGFuZCBHVEsuCisJCVVzZSBpbnB1dGRpYWxvZygpIGZvciB0aGUgRWRpdC9TZXR0aW5ncy9UZXh0IFdpZHRoIG1lbnUuICBBbHNvCisJCWZvciB0aGUgSGVscC9GaW5kLi4gYW5kIFRvb2xiYXIgRmluZEhlbHAgaXRlbXMuCisJCShXaW4zMiBzdXBwb3J0IGJ5IFRob3JlIEIuIEthcmxzZW4pCisJCShXaW4xNiBzdXBwb3J0IGJ5IFZpbmNlIE5lZ3JpKQoraW5wdXRzZWNyZXQoKQlBc2sgdGhlIHVzZXIgdG8gdHlwZSBhIHN0cmluZyB3aXRob3V0IHNob3dpbmcgdGhlIHR5cGVkIGtleXMuCisJCShDaGFybGVzIENhbXBiZWxsKQorbGliY2FsbCgpCWZvciBVbml4IChOZWlsIEJpcmQsIEpvaGFubmVzIFplbGxuZXIsIFN0ZXBoZW4gV2FsbCkKK2xpYmNhbGxucigpCWZvciBXaW4zMiBhbmQgVW5peAorbGlzcGluZGVudCgpCUdldCBpbmRlbnQgYWNjb3JkaW5nIHRvICdsaXNwJy4KK21vZGUoKQkJUmV0dXJuIGEgc3RyaW5nIHRoYXQgaW5kaWNhdGVzIHRoZSBjdXJyZW50IG1vZGUuCituZXh0bm9uYmxhbmsoKQlTa2lwIGJsYW5rIGxpbmVzIGZvcndhcmRzLgorcHJldm5vbmJsYW5rKCkJU2tpcCBibGFuayBsaW5lcyBiYWNrd2FyZHMuICBVc2VmdWwgdG8gZm9yIGluZGVudCBzY3JpcHRzLgorcmVzb2x2ZSgpCU1TLVdpbmRvd3M6IHJlc29sdmUgYSBzaG9ydGN1dCB0byB0aGUgZmlsZSBpdCBwb2ludHMgdG8uCisJCVVuaXg6IHJlc29sdmUgYSBzeW1ib2xpYyBsaW5rLgorc2VhcmNoKCkJU2VhcmNoIGZvciBhIHBhdHRlcm4uCitzZWFyY2hwYWlyKCkJU2VhcmNoIGZvciBtYXRjaGluZyBwYWlyLiAgQ2FuIGJlIHVzZWQgaW4gaW5kZW50IGZpbGVzIHRvIGZpbmQKKwkJdGhlICJpZiIgbWF0Y2hpbmcgYW4gZW5kaWYuCitzZXRidWZ2YXIoKQlzZXRzIGFuIG9wdGlvbiBvciB2YXJpYWJsZSBsb2NhbCB0byBhIGJ1ZmZlciAoUm9uIEFhcm9uKQorc2V0d2ludmFyKCkJc2V0cyBhbiBvcHRpb24gb3IgdmFyaWFibGUgbG9jYWwgdG8gYSB3aW5kb3cgKFJvbiBBYXJvbikKK3N0cmlkeCgpCVNlYXJjaCBmb3IgZmlyc3Qgb2NjdXJyZW5jZSBvZiBvbmUgc3RyaW5nIGluIGFub3RoZXIuCitzdHJyaWR4KCkJU2VhcmNoIGZvciBsYXN0IG9jY3VycmVuY2Ugb2Ygb25lIHN0cmluZyBpbiBhbm90aGVyLgordG9sb3dlcigpCUNvbnZlcnQgc3RyaW5nIHRvIGFsbC1sb3dlcmNhc2UuCit0b3VwcGVyKCkJQ29udmVydCBzdHJpbmcgdG8gYWxsLXVwcGVyY2FzZS4KK3R5cGUoKQkJQ2hlY2sgdGhlIHR5cGUgb2YgYW4gZXhwcmVzc2lvbi4KK3dpbmNvbCgpCXdpbmRvdyBjb2x1bW4gb2YgdGhlIGN1cnNvcgord2lud2lkdGgoKQlXaWR0aCBvZiBhIHdpbmRvdy4gKEpvaGFubmVzIFplbGxuZXIpCit3aW5saW5lKCkJd2luZG93IGxpbmUgb2YgdGhlIGN1cnNvcgorCisKK0FkZGVkIGV4cGFuc2lvbiBvZiBjdXJseSBicmFjZXMgaW4gdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgVGhpcyBjYW4gYmUKK3VzZWQgZm9yIHZhcmlhYmxlIG5hbWVzIHRoYXQgaW5jbHVkZSB0aGUgdmFsdWUgb2YgYW4gb3B0aW9uLiAgT3IgYSBwcmltaXRpdmUKK2Zvcm0gb2YgYXJyYXlzLiAoVmluY2UgTmVncmkpCisKKworTmV3IGF1dG9jb21tYW5kIGV2ZW50czogfgorQnVmV2luRW50ZXIJVHJpZ2dlcmVkIHdoZW4gYSBidWZmZXIgaXMgZGlzcGxheWVkIGluIGEgd2luZG93LCBhZnRlciB1c2luZworCQl0aGUgbW9kZWxpbmVzLiAgQ2FuIGJlIHVzZWQgdG8gbG9hZCBhIHZpZXcuCitCdWZXaW5MZWF2ZQlUcmlnZ2VyZWQgd2hlbiBhIGJ1ZmZlciBpcyBubyBsb25nZXIgaW4gYSB3aW5kb3cuICBBbHNvCisJCXRyaWdnZXJlZCB3aGVuIGV4aXRpbmcgVmltLiAgQ2FuIGJlIHVzZWQgdG8gc2F2ZSB2aWV3cy4KK0ZpbGVDaGFuZ2VkUk8JVHJpZ2dlcmVkIGJlZm9yZSBtYWtpbmcgdGhlIGZpcnN0IGNoYW5nZSB0byBhIHJlYWQtb25seSBmaWxlLgorCQlDYW4gYmUgdXNlZCB0byBjaGVjay1vdXQgdGhlIGZpbGUuIChTY290dCBHcmFoYW0pCitUZXJtUmVzcG9uc2UJVHJpZ2dlcmVkIHdoZW4gdGhlIHRlcm1pbmFsIHJlcGxpZXMgdG8gdGhlIHZlcnNpb24tcmVxdWVzdC4KKwkJVGhlIHY6dGVybXJlc3BvbnNlIGludGVybmFsIHZhcmlhYmxlIGhvbGRzIHRoZSByZXN1bHQuICBDYW4gYmUKKwkJdXNlZCB0byByZWFjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgdGVybWluYWwuICAoUm9uYWxkIFNjaGlsZCkKK0ZpbGVSZWFkQ21kCVRyaWdnZXJlZCBiZWZvcmUgcmVhZGluZyBhIGZpbGUuCitCdWZSZWFkQ21kCVRyaWdnZXJlZCBiZWZvcmUgcmVhZGluZyBhIGZpbGUgaW50byBhIGJ1ZmZlci4KK0ZpbGVXcml0ZUNtZAlUcmlnZ2VyZWQgYmVmb3JlIHdyaXRpbmcgYSBmaWxlLgorQnVmV3JpdGVDbWQJVHJpZ2dlcmVkIGJlZm9yZSB3cml0aW5nIGEgYnVmZmVyIGludG8gYSBmaWxlLgorRmlsZUFwcGVuZENtZAlUcmlnZ2VyZWQgYmVmb3JlIGFwcGVuZGluZyB0byBhIGZpbGUuCitGdW5jVW5kZWZpbmVkCVRyaWdnZXJlZCB3aGVuIGEgdXNlciBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZC4gKFJvbiBBYXJvbikKKworVGhlIGF1dG9jb21tYW5kcyBmb3IgdGhlICpDbWQgZXZlbnRzIHJlYWQgb3Igd3JpdGUgdGhlIGZpbGUgaW5zdGVhZCBvZiBub3JtYWwKK2ZpbGUgcmVhZC93cml0ZS4gIFVzZSB0aGlzIGluIG5ldHJ3LnZpbSB0byBiZSBhYmxlIHRvIGVkaXQgZmlsZXMgb24gYSByZW1vdGUKK3N5c3RlbS4gKENoYXJsZXMgQ2FtcGJlbGwpCisKKworTmV3IFN5bnRheCBmaWxlczogfgorCitiZGYJCUJERiBmb250IGRlZmluaXRpb24gKE5pa29sYWkgV2VpYnVsbCkKK2NhdGFsb2cJCVNHTUwgY2F0YWxvZyAoSm9oYW5uZXMgWmVsbG5lcikKK2RlYmNoYW5nZWxvZwlEZWJpYW4gQ2hhbmdlbG9nIChXaWNoZXJ0IEFra2VybWFuKQorZGViY29udHJvbAlEZWJpYW4gQ29udHJvbCAoV2ljaGVydCBBa2tlcm1hbikKK2RvdAkJZG90IChNYXJrdXMgTW90dGwpCitkc2wJCURTU1NMIHN5bnRheCAoSm9oYW5uZXMgWmVsbG5lcikKK2V0ZXJtCQlFdGVybSBjb25maWd1cmF0aW9uIChOaWtvbGFpIFdlaWJ1bGwpCitpbmRlbnQJCUluZGVudCBwcm9maWxlIChOaWtvbGFpIFdlaWJ1bGwpCitsZnRwCQlMRlRQIChOaWtvbGFpIFdlaWJ1bGwpCitseW54CQlMeW54IGNvbmZpZyAoRG91ZyBLZWFybnMpCittdXNoCQltdXNoIHNvdXJjZWNvZGUgKEJlayBPYmVyaW4pCituYXR1cmFsCQlOYXR1cmFsIChNYXJrbyBMZWlwZXJ0KQorcGlscmMJCVBhbCByZXNvdXJjZSBjb21waWxlciAoQnJpYW4gU2NoYXUpCitwbG0JCVBML00gKFBoaWxpcHBlIENvdWxvbmdlcykKK3BvdmluaQkJUG92cmF5IGNvbmZpZ3VyYXRpb24gKERhdmlkIE5lY2FzKQorcmF0cG9pc29uCVJhdHBvaXNvbiBjb25maWcvY29tbWFuZCAoRG91ZyBLZWFybnMpCityZWFkbGluZQlyZWFkbGluZSBjb25maWcgKE5pa29sYWkgV2VpYnVsbCkKK3NjcmVlbgkJU2NyZWVuIFJDIChOaWtvbGFpIFdlaWJ1bGwpCitzcGVjbWFuCQlTcGVjbWFuIChPciBGcmV1bmQpCitzcWxmb3JtcwlTUUwqRm9ybXMgKEF1c3RpbiBaaWVnbGVyKQordGVybWluZm8JdGVybWluZm8gKE5pa29sYWkgV2VpYnVsbCkKK3RpZHkJCVRpZHkgY29uZmlndXJhdGlvbiAoRG91ZyBLZWFybnMpCit3Z2V0CQlXZ2V0IGNvbmZpZ3VyYXRpb24gKERvdWcgS2Vhcm5zKQorCisKK1VwZGF0ZWQgbWFueSBzeW50YXggZmlsZXMgdG8gd29yayBib3RoIHdpdGggVmltIDUuNyBhbmQgNi4wLgorCitJbnRlcmZhY2UgdG8gUnVieS4gKFNodWdvIE1hZWRhKQorU3VwcG9ydCBkeW5hbWljIGxvYWRpbmcgb2YgdGhlIFJ1YnkgaW50ZXJmYWNlIG9uIE1TLVdpbmRvd3MuIChNdXJhb2thIFRhcm8pCitTdXBwb3J0IHRoaXMgZm9yIE1pbmd3IHRvby4gKEJlbm9pdCBDZXJyaW5hKQorCitXaW4zMjogQWRkZWQgcG9zc2liaWxpdHkgdG8gbG9hZCBUQ0wgZHluYW1pY2FsbHkuIChNdXJhb2thIFRhcm8pCitBbHNvIGZvciBCb3JsYW5kIDUuNS4gKERhbiBTaGFycCkKKworV2luMzI6IFdoZW4gZWRpdGluZyBhIGZpbGUgdGhhdCBpcyBhIHNob3J0Y3V0ICgqLmxuayBmaWxlKSwgZWRpdCB0aGUgZmlsZSBpdAorbGlua3MgdG8uICBVbmxlc3MgJ2JpbmFyeScgaXMgc2V0LCB0aGVuIGVkaXQgdGhlIHNob3J0Y3V0IGZpbGUgaXRzZWxmLgorKFlhc3VoaXJvIE1hdHN1bW90bykKKworVGhlICI6Y29tbWFuZCIgY29tbWFuZCBub3cgYWNjZXB0cyBhICItYmFyIiBhcmd1bWVudC4gIFRoaXMgYWxsb3dzIHRoZSB1c2VyCitjb21tYW5kIHRvIGJlIGZvbGxvd2VkIGJ5ICJ8IGNvbW1hbmQiLgorCitUaGUgcHJldmlldyB3aW5kb3cgaXMgbm93IGFsc28gdXNlZCBieSB0aGVzZSBjb21tYW5kczoKKy0gfDpwZWRpdHwgZWRpdHMgdGhlIHNwZWNpZmllZCBmaWxlIGluIHRoZSBwcmV2aWV3IHdpbmRvdworLSB8OnBzZWFyY2h8IHNlYXJjaGVzIGZvciBhIHdvcmQgaW4gaW5jbHVkZWQgZmlsZXMsIGxpa2UgfDppanVtcHwsIGFuZAorICBkaXNwbGF5cyB0aGUgZm91bmQgdGV4dCBpbiB0aGUgcHJldmlldyB3aW5kb3cuCitBZGRlZCB0aGUgQ1RSTC1XIFAgY29tbWFuZDogZ28gdG8gcHJldmlldyB3aW5kb3cuCisKK01TLURPUyBhbmQgTVMtV2luZG93cyBhbHNvIHJlYWQgdGhlIHN5c3RlbS13aWRlIHZpbXJjIGZpbGUgJFZJTS92aW1yYy4gIE1vc3RseQorZm9yIE5UIHN5c3RlbXMgd2l0aCBtdWx0aXBsZSB1c2Vycy4KKworQSBkb3VibGUtY2xpY2sgb2YgdGhlIG1vdXNlIG9uIGEgY2hhcmFjdGVyIHRoYXQgaGFzIGEgIiUiIG1hdGNoIHNlbGVjdHMgZnJvbQordGhhdCBjaGFyYWN0ZXIgdG8gdGhlIG1hdGNoLiAgU2ltaWxhciB0byAidiUiLgorCisiLVMgc2Vzc2lvbi52aW0iIGFyZ3VtZW50OiBTb3VyY2UgYSBzY3JpcHQgZmlsZSB3aGVuIHN0YXJ0aW5nIHVwLiAgQ29udmVuaWVudAord2F5IHRvIHN0YXJ0IFZpbSB3aXRoIGEgc2Vzc2lvbiBmaWxlLgorCitBZGRlZCAiLS1jbWQge2NvbW1hbmR9IiBWaW0gYXJndW1lbnQgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgYmVmb3JlIGEgdmltcmMgZmlsZQoraXMgbG9hZGVkLiAoVmluY2UgTmVncmkpCisKK0FkZGVkIHRoZSAiLU0iIFZpbSBhcmd1bWVudDogcmVzZXQgJ21vZGlmaWFibGUnIGFuZCAnd3JpdGUnLCB0aHVzIGRpc2FsbG93CittYWtpbmcgY2hhbmdlcyBhbmQgd3JpdGluZyBmaWxlcy4KKworQWRkZWQgcnVudGltZS9kZWxtZW51LnZpbS4gIFNvdXJjZSB0aGlzIHRvIHJlbW92ZSBhbGwgbWVudXMgYW5kIHByZXBhcmUgZm9yCitsb2FkaW5nIG5ldyBtZW51cy4gIFVzZWZ1bCB3aGVuIGNoYW5naW5nICdsYW5nbWVudScuCisKK1Blcmwgc2NyaXB0IHRvIGZpbHRlciBQZXJsIGVycm9yIG1lc3NhZ2VzIHRvIHF1aWNrZml4IHVzYWJsZSBmb3JtYXQuIChKb2VyZworWmllZmxlKQorCitBZGRlZCBydW50aW1lL21hY3Jvcy9sZXNzLnZpbTogVmltIHNjcmlwdCB0byBzaW11bGF0ZSBsZXNzLCBidXQgd2l0aCBzeW50YXgKK2hpZ2hsaWdodGluZy4KKworTVMtV2luZG93cyBpbnN0YWxsIHByb2dyYW06IChKb24gTWVyeikKKy0gVGhlIFdpbjMyIHByb2dyYW0gY2FuIG5vdyBjcmVhdGUgc2hvcnRjdXRzIG9uIHRoZSBkZXNrdG9wIGFuZCBpbnN0YWxsIFZpbSBpbgorICB0aGUgU3RhcnQgbWVudS4KKy0gUG9zc2libHkgcmVtb3ZlIG9sZCAiRWRpdCB3aXRoIFZpbSIgZW50cmllcy4KKy0gVGhlIFZpbSBleGVjdXRhYmxlIGlzIG5ldmVyIG1vdmVkIG9yICRQQVRIIGNoYW5nZWQuICBBIHNtYWxsIGJhdGNoIGZpbGUgaXMKKyAgY3JlYXRlZCBpbiBhIGRpcmVjdG9yeSBpbiAkUEFUSC4gIEZld2VyIGNob2ljZXMgdG8gYmUgbWFkZS4KKy0gRGV0ZWN0IGFscmVhZHkgaW5zdGFsbGVkIFZpbSB2ZXJzaW9ucyBhbmQgb2ZmZXIgdG8gdW5pbnN0YWxsIHRoZW0gZmlyc3QuCisKK0ltcHJvdmVkIHRoZSBNUy1XaW5kb3dzIHVuaW5zdGFsIHByb2dyYW0uICBJdCBub3cgYWxzbyBkZWxldGVzIHRoZSBlbnRyaWVzIGluCit0aGUgU3RhcnQgbWVudSwgaWNvbnMgZnJvbSB0aGUgZGVza3RvcCBhbmQgdGhlIGNyZWF0ZWQgYmF0Y2ggZmlsZXMuIChKb24gTWVyeikKK0Fsc28gbWFkZSBpdCBwb3NzaWJsZSB0byBkZWxldGUgb25seSBzb21lIG9mIHRoZXNlLiAgQWxzbyB1bnJlZ2lzdGVyIGd2aW0gZm9yCitPTEUuCisKK0dlbmVyYXRlIGEgc2VsZi1pbnN0YWxsaW5nIFZpbSBwYWNrYWdlIGZvciBNUy1XaW5kb3dzLiAgVGhpcyB1c2VzIE5TSVMuIChKb24KK01lcnogZXQgYWwuKQorCitBZGRlZCAiOmZpbGV0eXBlIGRldGVjdCIuICBUcnkgZGV0ZWN0aW5nIHRoZSBmaWxldHlwZSBhZ2Fpbi4gIEhlbHBzIHdoZW4KK3dyaXRpbmcgYSBuZXcgc2hlbGwgc2NyaXB0LCBhZnRlciBhZGRpbmcgIiMhL2Jpbi9jc2giLgorCitBZGRlZCAiOmF1Z3JvdXAhIG5hbWUiIHRvIGRlbGV0ZSBhbiBhdXRvY29tbWFuZCBncm91cC4gIE5lZWRlZCBmb3IgdGhlCitjbGllbnQtc2VydmVyICItLXJlbW90ZS13YWl0Ii4KKworQWRkIHRoZSBWaW0gdmVyc2lvbiBudW1iZXIgdG8gdGhlIHZpbWluZm8gZmlsZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSU1QUk9WRU1FTlRTCQkJCQkJKmltcHJvdmVtZW50cy02KgorCitBZGRlZCB0aGUgJ24nIGZsYWcgaW4gJ2Nwb3B0aW9ucyc6IFdoZW4gb21pdHRlZCB0ZXh0IG9mIHdyYXBwZWQgbGluZXMgaXMgbm90CitwdXQgYmV0d2VlbiBsaW5lIG51bWJlcnMgZnJvbSAnbnVtYmVyJyBvcHRpb24uICBNYWtlcyBpdCBhIGxvdCBlYXNpZXIgdG8gcmVhZAord3JhcHBlZCBsaW5lcy4KKworV2hlbiB0aGVyZSBpcyBhIGZvcm1hdCBlcnJvciBpbiBhIHRhZ3MgZmlsZSwgdGhlIGJ5dGUgcG9zaXRpb24gaXMgcmVwb3J0ZWQgc28KK3RoYXQgdGhlIGVycm9yIGNhbiBiZSBsb2NhdGVkLgorCisiZ2YiIHdvcmtzIGluIFZpc3VhbCBtb2RlOiBVc2UgdGhlIHNlbGVjdGVkIHRleHQgYXMgdGhlIGZpbGUgbmFtZS4gKENoYXNlCitUaW5nbGV5KQorCitBbGxvdyBhbWJpZ3VvdXMgbWFwcGluZ3MuICBUaHVzICJhYSIgYW5kICJhYWEiIGNhbiBib3RoIGJlIG1hcHBlZCwgdGhlIGxvbmdlc3QKK21hdGNoaW5nIG9uZSBpcyB1c2VkLiAgRXNwZWNpYWxseSB1c2VmdWwgZm9yICI6bG1hcCIgYW5kICdrZXltYXAnLgorCitFbmNyeXB0aW9uOiBBc2sgdGhlIGtleSB0byBiZSB0eXBlZCB0d2ljZSB3aGVuIGNyeXB0aW5nIHRoZSBmaXJzdCB0aW1lLgorT3RoZXJ3aXNlIGEgdHlwbyBtaWdodCBjYXVzZSB0aGUgdGV4dCB0byBiZSBsb3N0IGZvcmV2ZXIuIChDaGFzZSBUaW5nbGV5KQorCitUaGUgd2luZG93IHRpdGxlIG5vdyBoYXMgIlZJTSIgb24gdGhlIGVuZC4gIFRoZSBmaWxlIG5hbWUgY29tZXMgZmlyc3QsIHVzZWZ1bAoraW4gdGhlIHRhc2tiYXIuICBBICIrIiBpcyBhZGRlZCB3aGVuIHRoZSBmaWxlIGlzIG1vZGlmaWVkLiAgIj0iIGlzIGFkZGVkIGZvcgorYSByZWFkLW9ubHkgZmlsZS4gICItIiBpcyBhZGRlZCBmb3IgYSBmaWxlIHdpdGggJ21vZGlmaWFibGUnIG9mZi4KKworSW4gVmlzdWFsIG1vZGUsIG1lbnRpb24gdGhlIHNpemUgb2YgdGhlIHNlbGVjdGVkIGFyZWEgaW4gdGhlICdzaG93Y21kJworcG9zaXRpb24uCisKK0FkZGVkIHRoZSAiYjpjaGFuZ2VkdGljayIgdmFyaWFibGUuICBJbmNyZW1lbnRlZCBhdCBlYWNoIGNoYW5nZSwgYWxzbyBmb3IKK3VuZG8uICBDYW4gYmUgdXNlZCB0byB0YWtlIGFjdGlvbiBvbmx5IGlmIHRoZSBidWZmZXIgaGFzIGJlZW4gY2hhbmdlZC4KKworSW4gdGhlIHJlcGxhY2VtZW50IHN0cmluZyBvZiBhICI6cyIgY29tbWFuZCAiXD0iIGNhbiBiZSB1c2VkIHRvIHJlcGxhY2Ugd2l0aAordGhlIHJlc3VsdCBvZiBhbiBleHByZXNzaW9uLiAgRnJvbSB0aGlzIGV4cHJlc3Npb24gdGhlIHN1Ym1hdGNoKCkgZnVuY3Rpb24gY2FuCitiZSB1c2VkIHRvIGFjY2VzcyBzdWJtYXRjaGVzLgorCitXaGVuIGRvaW5nICI6cWFsbCIgYW5kIHRoZXJlIGlzIGEgY2hhbmdlIGluIGEgYnVmZmVyIHRoYXQgaXMgYmVpbmcgZWRpdGVkIGluCithbm90aGVyIHdpbmRvdywganVtcCB0byB0aGF0IHdpbmRvdywgaW5zdGVhZCBvZiBlZGl0aW5nIHRoYXQgYnVmZmVyIGluIHRoZQorY3VycmVudCB3aW5kb3cuCisKK0FkZGVkIHRoZSAiKytlbmM9IiBhbmQgIisrZmY9IiBhcmd1bWVudHMgdG8gZmlsZSByZWFkL3dyaXRlIGNvbW1hbmRzIHRvIGZvcmNlCit1c2luZyB0aGUgZ2l2ZW4gJ2VuY29kaW5nJyBvciAnZmlsZWZvcm1hdCcuICBBbmQgYWRkZWQgdGhlICJ2OmNtZGFyZyIKK3ZhcmlhYmxlLCB0byBiZSB1c2VkIGZvciBGaWxlUmVhZENtZCBhdXRvY29tbWFuZHMgdGhhdCByZWFkL3dyaXRlIHRoZSBmaWxlCit0aGVtc2VsdmVzLgorCitXaGVuIHJlYWRpbmcgc3RkaW4sIGZpcnN0IHJlYWQgdGhlIHRleHQgaW4gYmluYXJ5IG1vZGUgYW5kIHRoZW4gcmUtcmVhZCBpdAord2l0aCBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mICdmaWxlZm9ybWF0JyBhbmQgJ2ZpbGVlbmNvZGluZycuICBUaGlzIGF2b2lkcworcHJvYmxlbXMgd2l0aCBub3QgYmVpbmcgYWJsZSB0byByZXdpbmQgdGhlIGZpbGUgKGUuZy4sIHdoZW4gYSBsaW5lIG5lYXIgdGhlCitlbmQgb2YgdGhlIGZpbGUgZW5kcyBpbiBMRiBpbnN0ZWFkIG9mIENSLUxGKS4KK1doZW4gcmVhZGluZyB0ZXh0IGZyb20gc3RkaW4gYW5kIHRoZSBidWZmZXIgaXMgZW1wdHksIGRvbid0IG1hcmsgaXQgY2hhbmdlZC4KK0FsbG93cyBleGl0aW5nIHdpdGhvdXQgdHJvdWJsZS4KKworQWRkZWQgYW4gSUQgdG8gbWFueSBlcnJvciBtZXNzYWdlcy4gIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byBmaW5kIGhlbHAgZm9yCithIG1lc3NhZ2UuCisKK0luc2VydCBtb2RlOgorLSAiQ1RSTC1HIGoiIGFuZCAiQ1RSTC1HIGsiIGNhbiBiZSB1c2VkIHRvIGluc2VydCBpbiBhbm90aGVyIGxpbmUgaW4gdGhlIHNhbWUKKyAgY29sdW1uLiAgVXNlZnVsIGZvciBlZGl0aW5nIGEgdGFibGUuCistIEFkZGVkIFRoZXNhdXJ1cyBjb21wbGV0aW9uIHdpdGggQ1RSTC1YIENUUkwtVC4gKFZpbmNlIE5lZ3JpKQorLSBBZGRlZCB0aGUgJ3RoZXNhdXJ1cycgb3B0aW9uLCB0byB1c2UgaW5zdGVhZCBvZiAnZGljdGlvbmFyeScgZm9yIHRoZXNhdXJ1cworICBjb21wbGV0aW9uLiAgQWRkZWQgdGhlICdzJyBmbGFnIGluICdjb21wbGV0ZScuCistIE1hZGUgQ1RSTC1YIENUUkwtTCBpbiBJbnNlcnQgbW9kZSB1c2UgdGhlICdjb21wbGV0ZScgb3B0aW9uLiAgSXQgbm93IGFsc28KKyAgc2NhbnMgb3RoZXIgbG9hZGVkIGJ1ZmZlcnMgZm9yIG1hdGNoaW5nIGxpbmVzLgorLSBDVFJMLVIgbm93IGFsc28gd29ya3MgaW4gSW5zZXJ0IG1vZGUgd2hpbGUgZG9pbmcgY29tcGxldGlvbiB3aXRoIENUUkwtWCBvcgorICBDVFJMLU4uIChOZWlsIEJpcmQpCistIFdoZW4gZG9pbmcgSW5zZXJ0IG1vZGUgY29tcGxldGlvbiwgd2hlbiBjb21wbGV0aW9uIGlzIGZpbmlzaGVkIGNoZWNrIGZvciBhCisgIG1hdGNoIHdpdGggd29yZHMgZnJvbSAnY2lua2V5cycgb3IgJ2luZGVudGtleXMnLgorCitQZXJmb3JtYW5jZToKKy0gTWFkZSBkaXNwbGF5IHVwZGF0aW5nIG1vcmUgZWZmaWNpZW50LiAgSW5zZXJ0L2RlbGV0ZSBsaW5lcyBtYXkgYmUgdXNlZCBmb3IKKyAgYWxsIGNoYW5nZXMsIGFsc28gZm9yIHVuZG8vcmVkby4KKy0gVGhlIGRpc3BsYXkgaXMgbm90IHJlZHJhd24gd2hlbiB0aGVyZSBpcyB0eXBlYWhlYWQgaW4gSW5zZXJ0IG1vZGUuICBTcGVlZHMKKyAgdXAgQ1RSTC1SIGEgbG90LgorLSBJbXByb3ZlZCBzcGVlZCBvZiBzY3JlZW4gb3V0cHV0IGZvciAzMiBiaXQgRE9TIHZlcnNpb24uIChWaW5jZSBOZWdyaSkKKy0gV2hlbiBkcmFnZ2luZyB3aXRoIHRoZSBtb3VzZSwgdGhlcmUgaXMgYSBsb29rYWhlYWQgdG8gc2tpcCBtb3VzZSBjb2RlcyB3aGVuCisgIHRoZXJlIGlzIGFub3RoZXIgb25lIG5leHQuICBNYWtlcyBkcmFnZ2luZyB3aXRoIHRoZSBtb3VzZSBhIGxvdCBmYXN0ZXIuCistIEFsc28gYSBtZW1vcnkgdXNhZ2UgaW1wcm92ZW1lbnQ6IFdoZW4gY2FsbGluZyB1X3NhdmUgd2l0aCBhIHNpbmdsZSBsaW5lLAorICBkb24ndCBzYXZlIGl0IGlmIHRoZSBsaW5lIHdhcyByZWNlbnRseSBzYXZlZCBmb3IgdGhlIHNhbWUgdW5kbyBhbHJlYWR5LgorLSBXaGVuIHVzaW5nIGEgc2NyaXB0IHRoYXQgYXBwZW5kcyBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZSwgdGhlIGFtb3VudCBvZgorICBhbGxvY2F0ZWQgbWVtb3J5IHdhcyBncm93aW5nIHN0ZWFkaWx5LiAgQWxzbyB3aGVuICd1bmRvbGV2ZWxzJyBpcyAtMS4KKyAgQ2F1c2VkIGJ5IHRoZSBsaW5lIHNhdmVkIGZvciAiVSIgbmV2ZXIgdG8gYmUgZnJlZWQuICBOb3cgZnJlZSBhbiB1bmRvIGJsb2NrCisgIHdoZW4gaXQgYmVjb21lcyBlbXB0eS4KKy0gR1VJIGFuZCBEb3MzMjogVXNlIGEgdmVydGljYWwgc2Nyb2xsIHJlZ2lvbiwgdG8gbWFrZSBzY3JvbGxpbmcgaW4gYQorICB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvdyBmYXN0ZXIuICBObyBuZWVkIHRvIHJlZHJhdyB0aGUgd2hvbGUgd2luZG93LgorLSBXaGVuIHNjcm9sbGluZyBpc24ndCBwb3NzaWJsZSB3aXRoIHRlcm1pbmFsIGNvZGVzIChlLmcuLCBmb3IgYSB2ZXJ0aWNhbGx5CisgIHNwbGl0IHdpbmRvdykgcmVkcmF3IGZyb20gU2NyZWVuTGluZXNbXS4gIFRoYXQgc2hvdWxkIGJlIGZhc3RlciB0aGFuIGdvaW5nCisgIHRocm91Z2ggdGhlIGxpbmVzIHdpdGggd2luX2xpbmUoKSwgZXNwZWNpYWxseSB3aGVuIHVzaW5nIHN5bnRheAorICBoaWdobGlnaHRpbmcuCistIFRoZSBTeW50YXggbWVudSBpcyBub3cgcHJlLWdlbmVyYXRlZCBieSBhIHNlcGFyYXRlIHNjcmlwdC4gIE1ha2VzIGxvYWRpbmcKKyAgdGhlIG1lbnUgNzAlIGZhc3Rlci4gIFRoaXMgY2FuIGhhbHZlIHRoZSBzdGFydHVwIHRpbWUgb2YgZ3ZpbS4KKy0gV2hlbiBkb2luZyAiOmhlbHAgdGFnIiwgZG9uJ3Qgb3BlbiBoZWxwLnR4dCBmaXJzdCwganVtcCBkaXJlY3RseSB0byB0aGUgaGVscAorICB0YWcuICBJdCdzIGZhc3RlciBhbmQgYXZvaWRzIGFuIGV4dHJhIG1lc3NhZ2UuCistIFdpbjMyOiBXaGVuIGEgZmlsZSBuYW1lIGRvZXNuJ3QgZW5kIGluICIubG5rIiBkb24ndCB0cnkgcmVzb2x2aW5nIGEKKyAgc2hvcnRjdXQsIGl0IHRha2VzIHF1aXRlIGEgYml0IG9mIHRpbWUuCistIERvbid0IHVwZGF0ZSB0aGUgbW91c2UgcG9pbnRlciBzaGFwZSB3aGlsZSB0aGVyZSBhcmUgdHlwZWFoZWFkIGNoYXJhY3RlcnMuCistIENoYW5nZSBNRVRBW10gZnJvbSBhIHN0cmluZyBpbnRvIGFuIGFycmF5LCBhdm9pZHMgdXNpbmcgc3RyY2hyKCkgb24gaXQuCistIERvbid0IGNsZWFyIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBhZGRpbmcgY2hhcmFjdGVycywgYXZvaWRzIHRoYXQgc2NyZWVuX2ZpbGwKKyAgaXMgY2FsbGVkIGJ1dCBkb2Vzbid0IGRvIGFueXRoaW5nLgorCitSb2J1c3RuZXNzOgorLSBVbml4OiBDaGVjayBmb3IgcnVubmluZyBvdXQgb2Ygc3RhY2sgc3BhY2Ugd2hlbiBleGVjdXRpbmcgYSByZWdleHAuICBBdm9pZHMKKyAgYSBuYXN0eSBjcmFzaC4gIE9ubHkgd29ya3Mgd2hlbiB0aGUgc3lzdGVtIHN1cHBvcnRzIHJ1bm5pbmcgdGhlIHNpZ25hbAorICBmdW5jdGlvbiBvbiBhbm90aGVyIHN0YWNrLgorLSBEaXNhbGxvdyAiOnNvdXJjZSA8ZGlybmFtZT4iLiAgT24gdW5peCBpdCdzIHBvc3NpYmxlIHRvIHJlYWQgYSBkaXJlY3RvcnksCisgIGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gdXNlIGl0IGFzIFZpbSBjb21tYW5kcy4KKworU2VjdXJpdHk6CistIFdoZW4gcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gYSB0ZW1wb3JhcnkgZmlsZSwgY2hlY2sgdGhhdCBpdCBpc24ndCBhCisgIHN5bWJvbGljIGxpbmsuICBHaXZlcyBzb21lIHByb3RlY3Rpb24gYWdhaW5zdCBzeW1saW5rIGF0dGFja3MuCistIFdoZW4gY3JlYXRpbmcgYSBiYWNrdXAgZmlsZSBjb3B5IG9yIGEgc3dhcCBmaWxlLCBjaGVjayBmb3IgaXQgYWxyZWFkeQorICBleGlzdGluZyB0byBhdm9pZCBhIHN5bWxpbmsgYXR0YWNrLiAoQ29saW4gUGhpcHBzKQorLSBFdmFsdWF0aW5nIG9wdGlvbnMgd2hpY2ggYXJlIGFuIGV4cHJlc3Npb24gaXMgZG9uZSBpbiBhIHxzYW5kYm94fC4gIElmIHRoZQorICBvcHRpb24gd2FzIHNldCBieSBhIG1vZGVsaW5lLCBpdCBjYW5ub3QgY2F1c2UgZGFtYWdlLgorLSBVc2UgYSBzZWN1cmUgd2F5IHRvIGdlbmVyYXRlIHRlbXAgZmlsZSBuYW1lczogQ3JlYXRlIGEgcHJpdmF0ZSBkaXJlY3RvcnkgZm9yCisgIHRlbXAgZmlsZXMuICBVc2VkIGZvciBVbml4LCBNUy1ET1MgYW5kIE9TLzIuCistICdtYWtlZWYnIGNhbiBiZSBlbXB0eSwgd2hpY2ggbWVhbnMgdGhhdCBhbiBpbnRlcm5hbGx5IGdlbmVyYXRlZCBmaWxlIG5hbWUgaXMKKyAgdXNlZC4gIFRoZSBvbGQgZGVmYXVsdCB3YXMgIi90bXAvZmlsZSIsIHdoaWNoIGlzIGEgc2VjdXJpdHkgcmlzay4KKyAgV3JpdGluZyAnbWFrZWVmJyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZmFpbHMgaW4gYSByZWFkLW9ubHkgZGlyZWN0b3J5IGFuZAorICBjYXVzZXMgdHJvdWJsZSB3aGVuIHVzaW5nICI6Z3JlcCIgb24gYWxsIGZpbGVzLiAgTWFkZSB0aGUgZGVmYXVsdCBlbXB0eSBmb3IKKyAgYWxsIHN5c3RlbXMsIHNvIHRoYXQgYSB0ZW1wIGZpbGUgaXMgdXNlZC4KKy0gVGhlIGNvbW1hbmQgZnJvbSBhIHRhZ3MgZmlsZSBpcyBleGVjdXRlZCBpbiB0aGUgc2FuZGJveCBmb3IgYmV0dGVyIHNlY3VyaXR5LgorLSBUaGUgUnVieSwgVGNsIGFuZCBQeXRob24gaW50ZXJmYWNlcyBjYW5ub3QgYmUgdXNlZCBmcm9tIHRoZSBzYW5kYm94LiAgVGhleQorICBtaWdodCBkbyBkYW5nZXJvdXMgdGhpbmdzLiAgUGVybCBpcyBzdGlsbCBwb3NzaWJsZSwgYnV0IGxpbWl0ZWQgdG8gdGhlIFNhZmUKKyAgZW52aXJvbm1lbnQuIChEb25uaWUgU21pdGgpCisKK1N5bnRheCBoaWdobGlnaHRpbmc6CistIE9wdGltaXplZCB0aGUgc3BlZWQgYnkgY2FjaGluZyB0aGUgc3RhdGUgc3RhY2sgYWxsIG92ZXIgdGhlIGZpbGUsIG5vdCBqdXN0CisgIHRoZSBwYXJ0IGJlaW5nIGRpc3BsYXllZC4gIFJlcXVpcmVkIGZvciBmb2xkaW5nLgorLSBBZGRlZCAiOnN5bnRheCBzeW5jIGZyb21zdGFydCI6IEFsd2F5cyBwYXJzZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlsZS4KKy0gQWRkZWQgdGhlICJkaXNwbGF5IiBhcmd1bWVudCBmb3Igc3ludGF4IGl0ZW1zOiB1c2UgdGhlIGl0ZW0gb25seSB3aGVuCisgIGRpc3BsYXlpbmcgdGhlIHJlc3VsdC4gIENhbiBtYWtlIHBhcnNpbmcgZmFzdGVyIGZvciB0ZXh0IHRoYXQgaXNuJ3QgZ29pbmcgdG8KKyAgYmUgZGlzcGxheWVkLgorLSBXaGVuIHVzaW5nIENUUkwtTCwgdGhlIGNhY2hlZCBzdGF0ZXMgYXJlIGRlbGV0ZWQsIHRvIGZvcmNlIHBhcnNpbmcgdGhlIHRleHQKKyAgYWdhaW4uCistIFVzZSBlbGZoYXNoIGFsZ29yaXRobSBmb3IgdGFibGUgb2Yga2V5d29yZHMuICBUaGlzIHNob3VsZCBnaXZlIGEgYmV0dGVyCisgIGRpc3RyaWJ1dGlvbiBhbmQgc3BlZWR1cCBrZXl3b3JkIGxvb2t1cC4gKENhbXBiZWxsKQorLSBBbHNvIGFsbG93IHRoZSAibGMiIGxlYWRpbmcgY29udGV4dCBmb3Igc2tpcCBhbmQgZW5kIHBhdHRlcm5zLiAoU2NvdHQKKyAgQmlnaGFtKQorLSBTeW50YXggaXRlbXMgY2FuIGhhdmUgdGhlICJleHRlbmQiIGFyZ3VtZW50IHRvIHVuZG8gdGhlIGVmZmVjdCBvZiBhCisgICJrZWVwZW5kIiBhcmd1bWVudCBvZiBhbiBpdGVtIGl0IGlzIGNvbnRhaW5lZCBpbi4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIGhhdmUKKyAgc29tZSBjb250YWluZWQgaXRlbXMgZXh0ZW5kIGEgcmVnaW9uIHdoaWxlIG90aGVycyBkb24ndC4KKy0gIjpzeW50YXggY2xlYXIiIG5vdyBkZWxldGVzIHRoZSBiOmN1cnJlbnRfc3ludGF4IHZhcmlhYmxlLiAgVGhhdCdzIGxvZ2ljYWwsCisgIHNpbmNlIG5vIHN5bnRheCBpcyBkZWZpbmVkIGFmdGVyIHRoaXMgY29tbWFuZC4KKy0gQWRkZWQgIjpzeW50YXggZW5hYmxlIjogc3dpdGNoIG9uIHN5bnRheCBoaWdobGlnaHRpbmcgd2l0aG91dCBjaGFuZ2luZyB0aGUKKyAgY29sb3JzLiAgVGhpcyBhbGxvd3Mgc3BlY2lmeWluZyB0aGUgY29sb3JzIGluIHRoZSAudmltcmMgZmlsZSB3aXRob3V0IHRoZQorICBuZWVkIGZvciBhIG15c3ludGF4ZmlsZS4KKy0gQWRkZWQgIjpzeW50YXggcmVzZXQiOiByZXNldCB0aGUgY29sb3JzIHRvIHRoZWlyIGRlZmF1bHRzLgorLSBBZGRlZCB0aGUgImNvbnRhaW5zPVRPUCIgYW5kICJjb250YWlucz1DT05UQUlORUQiIGFyZ3VtZW50cy4gIE1ha2VzIGl0CisgIHBvc3NpYmxlIHRvIGRlZmluZSBhIHRyYW5zcGFyZW50IGl0ZW0gdGhhdCBkb2Vzbid0IGNvbnRhaW4gaXRzZWxmLgorLSBBZGRlZCBhICJjb250YWluZWRpbiIgYXJndW1lbnQgdG8gc3ludGF4IGl0ZW1zLiAgQWxsb3dzIGFkZGluZyBhIGNvbnRhaW5lZAorICBpdGVtIHRvIGFuIGV4aXN0aW5nIGl0ZW0gKGUuZy4sIHRvIGhpZ2hsaWdodCBhIG5hbWUgaW4gYSBjb21tZW50KS4KKworTW9kZWxlc3Mgc2VsZWN0aW9uOgorLSBXaGVuIGluIHRoZSBjb21tYW5kLWxpbmUgd2luZG93LCB1c2UgbW9kZWxlc3Mgc2VsZWN0aW9uIGluIHRoZSBvdGhlcgorICB3aW5kb3dzLiAgTWFrZXMgaXQgcG9zc2libGUgdG8gY29weSB2aXNpYmxlIHRleHQgdG8gdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cuCistIFN1cHBvcnQgbW9kZWxlc3Mgc2VsZWN0aW9uIG9uIHRoZSBjbWRsaW5lIGluIGEgdGVybWluYWwuICBQcmV2aW91c2x5IGl0IHdhcworICBvbmx5IHBvc3NpYmxlIGZvciB0aGUgR1VJLgorLSBNYWtlIGRvdWJsZS1yaWdodC1jbGljayBpbiBtb2RlbGVzcyBzZWxlY3Rpb24gc2VsZWN0IGEgd2hvbGUgd29yZC4gIFNpbmdsZQorICByaWdodCBjbGljayBkb2Vzbid0IHVzZSB0aGUgd29yZCBzZWxlY3Rpb24gc3RhcnRlZCBieSBhIGRvdWJsZS1sZWZ0LWNsaWNrLgorICBNYWtlcyBpdCB3b3JrIGxpa2UgaW4gVmlzdWFsIG1vZGUuCistIFRoZSBtb2RlbGVzcyBzZWxlY3Rpb24gbm8gbG9uZ2VyIGhhcyBhbiBpbXBsaWVkIGF1dG9tYXRpYyBjb3B5IHRvIHRoZQorICBjbGlwYm9hcmQuICBJdCBub3cgb2JleXMgdGhlICdhJyBhbmQgJ0EnIGZsYWdzIGluICdndWlvcHRpb25zJyBvcgorICAiYXV0b3NlbGVjdCIgYW5kICJhdXRvc2VsZWN0bWwiIGluICdjbGlwYm9hcmQnLgorLSBBZGRlZCB0aGUgQ1RSTC1ZIGNvbW1hbmQgaW4gQ21kbGluZS1tb2RlIHRvIGNvcHkgdGhlIG1vZGVsZXNzIHNlbGVjdGlvbiB0bworICB0aGUgY2xpcGJvYXJkLiAgQWxzbyB3b3JrcyBhdCB0aGUgaGl0LWVudGVyIHByb21wdCBhbmQgdGhlIG1vcmUgcHJvbXB0LgorICBSZW1vdmVkIHRoZSBtYXBwaW5ncyBpbiBydW50aW1lL21zd2luLnZpbSBmb3IgQ1RSTC1ZIGFuZCBDVFJMLVogaW4KKyAgY21kbGluZS1tb2RlIHRvIGJlIGFibGUgdG8gdXNlIENUUkwtWSBpbiB0aGUgbmV3IHdheS4KKworUmVkdWNlZCB0aGUgYW1vdW50IG9mIHN0YWNrIHNwYWNlIHVzZWQgYnkgcmVnbWF0Y2goKSB0byBhbGxvdyBpdCB0byBoYW5kbGUKK2NvbXBsaWNhdGVkIHBhdHRlcm5zIG9uIGEgbG9uZ2VyIHRleHQuCisKKydpc2ZuYW1lJyBub3cgaW5jbHVkZXMgJyUnIGFuZCAnIycuICBNYWtlcyAidmltIGRpclwjZmlsZSIgd29yayBmb3IgTVMtRE9TLgorCitBZGRlZCBrZXlwYWQgc3BlY2lhbCBrZXlzIDxrRW50ZXI+LCA8azA+IC0gPGs5Pi4gIFdoZW4gbm90IG1hcHBlZCB0aGV5IGJlaGF2ZQorbGlrZSB0aGUgQVNDSUkgZXF1aXZhbGVudC4gKEl2YW4gV2VsbGVzeiBhbmQgVmluY2UgTmVncmkpCitSZWNvZ25pemUgYSBmZXcgbW9yZSB4dGVybSBrZXlzOiA8Qy1SaWdodD4sIDxDLUxlZnQ+LCA8Qy1FbmQ+LCA8Qy1Ib21lPgorCitBbHNvIHRyaWdnZXIgdGhlIEJ1ZlVubG9hZCBldmVudCB3aGVuIFZpbSBpcyBnb2luZyB0byBleGl0LiAgUGVyaGFwcyBhIHNjcmlwdAorbmVlZHMgdG8gZG8gc29tZSBjbGVhbmluZyB1cC4KKworRXhwYW5kIGV4cHJlc3Npb24gaW4gYmFja3RpY2tzOiBgPXtleHByfWAuICBDYW4gYmUgdXNlZCB3aGVyZSBiYWNrdGljaworZXhwYW5zaW9uIGlzIGRvbmUuIChWaW5jZSBOZWdyaSkKKworR1VJOgorLSBBZGRlZCAnTCcgYW5kICdSJyBmbGFncyBpbiAnZ3Vpb3B0aW9ucyc6IEFkZCBhIGxlZnQgb3IgcmlnaHQgc2Nyb2xsYmFyIG9ubHkKKyAgd2hlbiB0aGVyZSBpcyBhIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93LgorLSBYMTE6IFdoZW4gYSBjb2xvciBjYW4ndCBiZSBhbGxvY2F0ZWQsIHVzZSB0aGUgbmVhcmVzdCBtYXRjaCBmcm9tIHRoZQorICBjb2xvcm1hcC4gIFRoaXMgYXZvaWRzIHRoYXQgYmxhY2sgaXMgdXNlZCBmb3IgbWFueSB0aGluZ3MuIChNb25pc2ggU2hhaCkKKyAgQWxzbyBkbyB0aGlzIGZvciB0aGUgbWVudSBhbmQgc2Nyb2xsYmFyLCB0byBhdm9pZCB0aGF0IHRoZXkgYmVjb21lIGJsYWNrLgorLSBXaW4zMiBhbmQgWDExOiBBZGRlZCAnbW91c2VzaGFwZScgb3B0aW9uOiBBZGp1c3QgdGhlIG1vdXNlIHBvaW50ZXIgc2hhcGUgdG8KKyAgdGhlIGN1cnJlbnQgbW9kZS4gKFZpbmNlIE5lZ3JpKQorLSBBZGRlZCB0aGUgJ2xpbmVzcGFjZScgb3B0aW9uOiBJbnNlcnQgYSBwaXhlbCBsaW5lIGJldHdlZW4gbGluZXMuIChOYW0pCistIEFsbG93IG1vZGVsZXNzIHNlbGVjdGlvbiAod2l0aG91dCBtb3ZpbmcgdGhlIGN1cnNvcikgYnkga2VlcGluZyBDVFJMIGFuZAorICBTSElGVCBwcmVzc2VkLiAoSXZhbiBXZWxsZXN6KQorLSBNb3RpZjogYWRkZWQgdG9vbGJhci4gKEdvcmRvbiBQcmlldXIpICBBbHNvIGFkZGVkIHRvb2x0aXBzLgorLSBBdGhlbmE6IGFkZGVkIHRvb2xiYXIgYW5kIHRvb2x0aXBzLiAoRGF2aWQgSGFycmlzb24gLS0gYmFzZWQgb24gR29yZG9uCisgIFByaWV1cidzIHdvcmspCistIE1hZGUgdGhlICd0b29sYmFyJyBvcHRpb24gd29yayBmb3IgQXRoZW5hIGFuZCBNb3RpZi4gIENhbiBub3cgc3dpdGNoIGJldHdlZW4KKyAgdGV4dCBhbmQgaWNvbnMgb24gdGhlIGZseS4gIChEYXZpZCBIYXJyaXNvbikKKy0gU3VwcG9ydCBtZW51IHNlcGFyYXRvciBsaW5lcyBmb3IgQXRoZW5hLiAgKERhdmlkIEhhcnJpc29uKQorLSBBdGhlbmE6IEFkanVzdCB0aGUgYXJyb3cgcGl4bWFwIHVzZWQgaW4gYSBwdWxscmlnaHQgbWVudSB0byB0aGUgc2l6ZSBvZiB0aGUKKyAgZm9udC4gKERhdmlkIEhhcnJpc29uKQorLSBXaW4zMjogQWRkZWQgImMiIGZsYWcgdG8gJ2d1aWZvbnQnIHRvIGJlIGFibGUgdG8gc3BlY2lmeSB0aGUgY2hhcnNldC4gKEFydGVtCisgIEtob2R1c2gpCistIFdoZW4gbm8gLS1lbmFibGUteGltIGFyZ3VtZW50IGlzIGdpdmVuLCBhdXRvbWF0aWNhbGx5IGVuYWJsZSBpdCB3aGVuIGEgWCBHVUkKKyAgaXMgdXNlZC4gIFJlcXVpcmVkIGZvciBkZWFkIGtleSBzdXBwb3J0IChhbmQgbXVsdGktYnl0ZSBpbnB1dCkuCistIEFmdGVyIGEgZmlsZSBzZWxlY3Rpb24gZGlhbG9nLCBjaGVjayB0aGF0IHRoZSBlZGl0ZWQgZmlsZXMgd2VyZSBub3QgY2hhbmdlZAorICBvciBkZWxldGVkLiAgVGhlIFdpbjMyIGRpYWxvZyBhbGxvd3MgZGVsZXRpbmcgYW5kIHJlbmFtaW5nIGZpbGVzLgorLSBNb3RpZiBhbmQgQXRoZW5hOiBBZGRlZCBzdXBwb3J0IGZvciAiZWRpdHJlcyIuIChNYXJ0aW4gRGFsZWNraSkKKy0gTW90aWYgYW5kIEF0aGVuYTogQWRkZWQgIm1lbnVGb250IiB0byBiZSBhYmxlIHRvIHNwZWNpZnkgYSBmb250IG9yIGZvbnRzZXQKKyAgZm9yIHRoZSBtZW51cy4gIENhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSAiTWVudSIgaGlnaGxpZ2h0IGdyb3VwLiAgVXNlZnVsCisgIHdoZW4gdGhlIGxvY2FsZSBpcyBkaWZmZXJlbnQgZnJvbSAnZW5jb2RpbmcnLiAoRGF2aWQgSGFycmlzb24pCisgIFdoZW4gRk9OVFNFVF9BTFdBWVMgaXMgZGVmaW5lZCwgYWx3YXlzIHVzZSBhIGZvbnRzZXQgZm9yIHRoZSBtZW51cy4gIFNob3VsZAorICBhdm9pZCB0cm91YmxlIHdpdGggY2hhbmdpbmcgZnJvbSBhIGZvbnQgdG8gYSBmb250c2V0LiAgKERhdmlkIEhhcnJpc29uKQorLSBIaWdobGlnaHRpbmcgYW5kIGZvbnQgZm9yIHRoZSB0b29sdGlwcyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggdGhlICJUb29sdGlwIgorICBoaWdobGlnaHQgZ3JvdXAuIChEYXZpZCBIYXJyaXNvbikKKy0gVGhlIENtZGxpbmUtbW9kZSBtZW51cyBjYW4gYmUgdXNlZCBhdCB0aGUgbW9yZS1wcm9tcHQuICBUaGlzIG1vc3RseSB3b3JrcworICBmaW5lLCBiZWNhdXNlIHRoZXkgc3RhcnQgd2l0aCBhIENUUkwtQy4gIFRoZSAiQ29weSIgbWVudSB3b3JrcyB0byBjb3B5IHRoZQorICBtb2RlbGVzcyBzZWxlY3Rpb24uICBBbGxvd3MgY29weWluZyB0aGUgb3V0cHV0IG9mICI6c2V0IGFsbCIgb3IgIjppbnRybyIKKyAgd2l0aG91dCBhdXRvLXNlbGVjdGlvbi4KKy0gV2hlbiBzdGFydGluZyB0aGUgR1VJIHdoZW4gdGhlcmUgaXMgbm8gdGVybWluYWwgY29ubmVjdGVkIHRvIHN0ZG91dCBhbmQKKyAgc3RkZXJyLCBkaXNwbGF5IGVycm9yIG1lc3NhZ2VzIGluIGEgZGlhbG9nLiAgUHJldmlvdXNseSB0aGV5IHdvdWxkbid0IGJlCisgIGRpc3BsYXllZCBhdCBhbGwuCistIEFsbG93IHNldHRpbmcgJ2Jyb3dzZWRpcicgdG8gdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnksIHRvIGJlIHVzZWQgZm9yIHRoZQorICBmaWxlIGRpYWxvZy4gKERhbiBTaGFycCkKKy0gYjpicm93c2VmaWx0ZXIgYW5kIGc6YnJvd3NlZmlsdGVyIGNhbiBiZSBzZXQgdG8gdGhlIGZpbHRlcnMgdXNlZCBmb3IgdGhlCisgIGZpbGUgZGlhbG9nLiAgU3VwcG9ydGVkIGZvciBXaW4zMiBhbmQgTW90aWYgR1VJLiAoRGFuIFNoYXJwKQorCitYMTE6CistIFN1cHBvcnQgZm9yIHRoZSBjbGlwYm9hcmQgc2VsZWN0aW9uIGFzIHJlZ2lzdGVyICIrLiAgV2hlbiBleGl0aW5nIG9yCisgIHN1c3BlbmRpbmcgY29weSB0aGUgc2VsZWN0aW9uIHRvIGN1dCBidWZmZXIgMC4gIFNob3VsZCBhbGxvdyBjb3B5L3Bhc3RlIHdpdGgKKyAgbW9yZSBhcHBsaWNhdGlvbnMgaW4gYSBYMTEtc3RhbmRhcmQgd2F5LiAgKE5laWwgQmlyZCkKKy0gVXNlIHRoZSBYIGNsaXBib2FyZCBpbiBhbnkgdGVybWluYWwsIG5vdCBqdXN0IGluIGFuIHh0ZXJtLgorICBBZGRlZCAiZXhjbHVkZToiIGluICdjbGlwYm9hcmQnOiBTcGVjaWZ5IGEgcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0IHRlcm1pbmFsCisgIG5hbWVzIGZvciB3aGljaCBubyBjb25uZWN0aW9uIHNob3VsZCBiZSBtYWRlIHRvIHRoZSBYIHNlcnZlci4gIFRoZSBkZWZhdWx0CisgIGN1cnJlbnRseSB3b3JrIGZvciBGcmVlQlNEIGFuZCBMaW51eCBjb25zb2xlcy4KKy0gQWRkZWQgYSBmZXcgbWVzc2FnZXMgZm9yIHdoZW4gJ3ZlcmJvc2UnIGlzIG5vbi16ZXJvIHRvIHNob3cgd2hhdCBoYXBwZW5zCisgIHdoZW4gdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIFggc2VydmVyLiAgU2hvdWxkIGhlbHAgd2hlbiB0cnlpbmcgdG8gZmluZCBvdXQKKyAgd2h5IHN0YXJ0dXAgaXMgc2xvdy4KKworR1RLIEdVSTogKHBhcnRseSBieSBNYXJjaW4gRGFsZWNraSkKKy0gV2l0aCBzb21lIGZvbnRzIHRoZSBjaGFyYWN0ZXJzIGNhbiBiZSB0YWxsZXIgdGhhbiBhc2NlbnQgKyBkZXNjZW50LiAgRS5nLiwKKyAgIi1taXNjLWZpeGVkLSotKi0qLSotMTgtKi0qLSotKi0qLWlzbzEwNjQ2LTEiLiAgQWRkIG9uZSB0byB0aGUgY2hhcmFjdGVyCisgIGNlbGwgaGVpZ2h0LgorLSBJbXBsZW1lbnQgIm5vIiB2YWx1ZSBmb3IgJ3dpbmFsdGtleXMnOiBkb24ndCB1c2UgQWx0LUtleSBhcyBhIG1lbnUgc2hvcnRjdXQsCisgIHdoZW4gJ3dhaycgY2hhbmdlZCBhZnRlciBjcmVhdGluZyB0aGUgbWVudXMuCistIFNldHRpbmcgJ3dhaycgYWZ0ZXIgdGhlIEdVSSBzdGFydGVkIHdvcmtzLgorLSByZWN5Y2xlIHRleHQgR0MncyB0byByZWR1Y2UgY29tbXVuaWNhdGlvbi4KKy0gQWRqdXN0IGljb24gc2l6ZSB0byB3aW5kb3cgbWFuYWdlci4KKy0gQ2xlYW51cCBpbiBmb250IGhhbmRsaW5nLgorLSBSZXBsYWNlIFhRdWVyeUNvbG9yIHdpdGggR0RLIGNhbGxzLgorLSBHbm9tZSBzdXBwb3J0LiAgRGV0ZWN0cyBHbm9tZSBpbiBjb25maWd1cmUgYW5kIHVzZXMgZGlmZmVyZW50IHdpZGdldHMuCisgIE90aGVyd2lzZSBpdCdzIG11Y2ggbGlrZSBHVEsuIChBbmR5IEthaG4pCisgIEl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGJlY2F1c2UgaXQgY2F1c2VzIGEgZmV3IHByb2JsZW1zLgorLSBSZW1vdmVkIHRoZSBzcGVjaWFsIGNvZGUgdG8gZm9yayBmaXJzdCBhbmQgdGhlbiBzdGFydCB0aGUgR1VJLiAgTm93IHVzZQorICBfZXhpdCgpIGluc3RlYWQgb2YgZXhpdCgpLCB0aGlzIHdvcmtzIGZpbmUgd2l0aG91dCBzcGVjaWFsIHRyaWNrcy4KKy0gRGlhbG9ncyBzb21ldGltZXMgYXBwZWFyZWQgYSBiaXQgZmFyIGF3YXkuICBQb3NpdGlvbiB0aGUgZGlhbG9ncyBpbnNpZGUKKyAgdGhlIGd2aW0gd2luZG93LiAoQnJlbnQgVmVybmVyKQorLSBXaGVuIGRyb3BwaW5nIGEgZmlsZSBvbiBWaW0sIHJlbW92ZSBleHRyYSBzbGFzaGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZQorICBwYXRoLiAgQWxzbyBzaG9ydGVuIHRoZSBmaWxlIG5hbWUgaWYgcG9zc2libGUuCisKK01vdGlmOiAoTWFydGluIERhbGVja2kpCistIE1hZGUgdGhlIGRpYWxvZyBsYXlvdXQgYmV0dGVyLgorLSBBZGRlZCBmaW5kIGFuZCBmaW5kL3JlcGxhY2UgZGlhbG9ncy4KKy0gRm9yIHRoZSBtZW51cywgY2hhbmdlICJpc28tODg1OSIgdG8gImlzb184ODU5IiwgTGludXggYXBwZWFycyB0byBuZWVkIHRoaXMuCistIEFkZGVkIGljb24gdG8gZGlhbG9ncywgbGlrZSBmb3IgR1RLLgorLSBVc2UgWFBNIGJpdG1hcHMgZm9yIHRoZSBpY29uIHdoZW4gcG9zc2libGUuICBVc2UgdGhlIFNvbGFyaXMgWHBtUC5oIGluY2x1ZGUKKyAgZmlsZSB3aGVuIGl0J3MgYXZhaWxhYmxlLgorLSBDaGFuZ2UgdGhlIHNoYWRvdyBvZiB0aGUgdG9vbGJhciBpdGVtcyB0byBnZXQgYSB2aXN1YWwgZmVlZGJhY2sgb2YgaXQgYmVpbmcKKyAgcHJlc3NlZCBvbiBub24tTGVzc1RpZmYuCistIFVzZSBnYWRnZXRzIGluc3RlYWQgb2Ygd2luZG93cyBmb3Igc29tZSBpdGVtcyBmb3Igc3BlZWQuCisKK0NvbW1hbmQgbGluZSBjb21wbGV0aW9uOgorLSBDb21wbGV0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy4gKE1pa2UgU3RlZWQpCistIEZvciAiOmNvbW1hbmQiLCBhZGRlZCBhIGZldyBjb21wbGV0aW9uIG1ldGhvZHM6ICJtYXBwaW5nIiwgImZ1bmN0aW9uIiwKKyAgImV4cHJlc3Npb24iIGFuZCAiZW52aXJvbm1lbnQiLgorLSBXaGVuIGEgZnVuY3Rpb24gZG9lc24ndCB0YWtlIGFyZ3VtZW50cywgbGV0IGNvbXBsZXRpb24gYWRkICgpIGluc3RlYWQgb2YgKC4KKworRm9yIE1TLURPUywgTVMtV2luZG93cyBhbmQgT1MvMjogRXhwYW5kICVWQVIlIGVudmlyb25tZW50IHZhcmlhYmxlcyBsaWtlICRWQVIuCisoV2FsdGVyIEJyaXNjb2UpCisKK1JlZGlyZWN0IG1lc3NhZ2VzIHRvIHRoZSBjbGlwYm9hcmQgIjpyZWRpciBAKiIgYW5kIHRvIHRoZSB1bm5hbWVkIHJlZ2lzdGVyCisiOnJlZGlyIEAiIi4gKFdhbGwpCisKKyI6bGV0IEAvID0gJyciIGNsZWFycyB0aGUgc2VhcmNoIHBhdHRlcm4sIGluc3RlYWQgb2Ygc2V0dGluZyBpdCB0byBhbiBlbXB0eQorc3RyaW5nLgorCitFeHByZXNzaW9uIGV2YWx1YXRpb246CistICI/IDoiIGNhbiBiZSB1c2VkIGxpa2UgaW4gQy4KKy0gY29sKCIkIikgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJzb3IgbGluZSBwbHVzIG9uZS4gKFN0ZXBoZW4gUC4gV2FsbCkKKy0gT3B0aW9uYWwgZXh0cmEgYXJndW1lbnQgZm9yIG1hdGNoKCksIG1hdGNoZW5kKCkgYW5kIG1hdGNoc3RyKCk6IE9mZnNldCB0bworICBzdGFydCBsb29raW5nIGZvciBhIG1hdGNoLgorLSBNYWRlIHRoaXJkIGFyZ3VtZW50IHRvIHN0cnBhcnQoKSBvcHRpb25hbC4gIChQYXVsIE1vb3JlLCBaZGVuZWsgU2VrZXJhKQorLSBleGlzdHMoKSBjYW4gYWxzbyBiZSB1c2VkIHRvIGNoZWNrIGZvciBFeCBjb21tYW5kcyBhbmQgZGVmaW5lZCBhdXRvY29tbWFuZHMuCistIEFkZGVkIGV4dHJhIGFyZ3VtZW50IHRvIGlucHV0KCk6IERlZmF1bHQgdGV4dC4KKy0gQWxzbyBzZXQgInY6ZXJybXNnIiB3aGVuIHVzaW5nICI6c2lsZW50ISBjbWQiLgorLSBBZGRlZCB0aGUgdjpwcmV2Y291bnQgdmFyaWFibGU6IHY6Y291bnQgZm9yIHRoZSBwcmV2aW91cyBjb21tYW5kLgorLSBBZGRlZCAidjpwcm9nbmFtZSIsIG5hbWUgd2l0aCB3aGljaCBWaW0gd2FzIHN0YXJ0ZWQuIChWaW5jZSBOZWdyaSkKKy0gSW4gdGhlIHZlcmJvc2UgbWVzc2FnZSBhYm91dCByZXR1cm5pbmcgZnJvbSBhIGZ1bmN0aW9uLCBhbHNvIHNob3cgdGhlIHJldHVybgorICB2YWx1ZS4KKworQ3Njb3BlOgorLSBBZGRlZCB0aGUgY3Njb3BlX2Nvbm5lY3Rpb24oKSBmdW5jdGlvbi4gKEFuZHkgS2FobikKKy0gIjpjc2NvcGUga2lsbCAtMSIga2lsbHMgYWxsIGNzY29wZSBjb25uZWN0aW9ucy4gKEFuZHkgS2FobikKKy0gQWRkZWQgdGhlICdjc2NvcGVwYXRoY29tcCcgb3B0aW9uLiAoU2NvdHQgSGF1Y2spCistIEFkZGVkICI6c2NzY29wZSIgY29tbWFuZCwgc3BsaXQgd2luZG93IGFuZCBleGVjdXRlIENzY29wZSBjb21tYW5kLiAoSmFzb24KKyAgRHVlbGwpCisKK1ZNUzoKKy0gQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHVwcGVyY2FzZS4gIEludGVycHJldCBhICItWCIgYXJndW1lbnQgYXMKKyAgIi14IiBhbmQgIi0vWCIgYXMgIi1YIi4KKy0gU2V0ICdtYWtlcHJnJyBhbmQgJ2dyZXBwcmcnIHRvIG1lYW5pbmdmdWwgZGVmYXVsdHMuIChab2x0YW4gQXJwYWRmZnkpCistIFVzZSB0aGUgWC1jbGlwYm9hcmQgZmVhdHVyZSBhbmQgdGhlIFggY29tbWFuZCBzZXJ2ZXIuIChab2x0YW4gQXJwYWRmZnkpCisKK01hY2ludG9zaDogKERhbnkgU3QtQW1hbnQpCistIEFsbG93IGEgdGFncyBmaWxlIHRvIGhhdmUgQ1IsIENSLUxGIG9yIExGIGxpbmUgc2VwYXJhdG9yLiAoQXhlbCBLaWVsaG9ybikKKy0gQ2FyYm9uaXplZCAod2hpbGUga2VlcGluZyBub24gQ2FyYm9uIGNvZGUpCisgIChTb21lIHdvcmsgInN0b2xlbiIgZnJvbSBBbW1vbiBTa2lkbW9yZSkKKy0gSW1wcm92ZWQgdGhlIG1lbnUgaXRlbSBpbmRleCBoYW5kbGluZyAoc2hvdWxkIGJlIGZhc3RlcikKKy0gUnVudGltZSBjb21tYW5kcyBub3cgaGFuZGxlIC8gaW4gZmlsZSBuYW1lIChNYWNPUyA5IHZlcnNpb24pCistIEFkZGVkICI6d2lucG9zIiBzdXBwb3J0LgorLSBTdXBwb3J0IHVzaW5nICJ+IiBpbiBmaWxlIG5hbWVzIGZvciBob21lIGRpcmVjdG9yeS4KKworT3B0aW9uczoKKy0gV2hlbiB1c2luZyBzZXQgKz0gb3IgXj0gLCBjaGVjayBmb3IgaXRlbXMgdXNlZCB0d2ljZS4gIER1cGxpY2F0ZXMgYXJlCisgIHJlbW92ZWQuICAoVmluY2UgTmVncmkpCistIFdoZW4gc2V0dGluZyBhbiBvcHRpb24gdGhhdCBpcyBhIGxpc3Qgb2YgZmxhZ3MsIHJlbW92ZSBkdXBsaWNhdGUgZmxhZ3MuCistIElmIHBvc3NpYmxlLCB1c2UgZ2V0cmxpbWl0KCkgdG8gc2V0ICdtYXhtZW10b3QnIGFuZCAnbWF4bWVtJy4gKFBpbmEpCistIEFkZGVkICJhbHBoYSIgdG8gJ25yZm9ybWF0cyc6IGluY3JlbWVudCBvciBkZWNyZW1lbnQgYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIKKyAgd2l0aCBDVFJMLUEgYW5kIENUUkwtWC4KKy0gIjpzZXQgb3B0JnZpIiBzZXRzIGFuIG9wdGlvbiB0byBpdHMgVmkgZGVmYXVsdCwgIjpzZXQgb3B0JnZpbSIgdG8gaXRzIFZpbQorICBkZWZhdWx0LiAgVXNlZnVsIHRvIHNldCAnY3BvJyB0byBpdHMgVmltIGRlZmF1bHQgd2l0aG91dCBrbm93aW5nIHdoYXQgZmxhZ3MKKyAgdGhhdCBpbmNsdWRlcy4KKy0gJ3Njcm9sbG9mZicgbm93IGFsc28gYXBwbGllcyB0byBhIGxvbmcsIHdyYXBwZWQgbGluZSB0aGF0IGRvZXNuJ3QgZml0IGluIHRoZQorICB3aW5kb3cuCistIEFkZGVkIG1vcmUgb3B0aW9uIHNldHRpbmdzIHRvIHRoZSBkZWZhdWx0IG1lbnVzLgorLSBVcGRhdGVkIHRoZSBvcHRpb24gd2luZG93IHdpdGggbmV3IG9wdGlvbnMuICBNYWRlIGl0IGEgYml0IGVhc2llciB0byByZWFkLgorCitJbnRlcm5hbCBjaGFuZ2VzOgorLSBTcGxpdCBsaW5lIHBvaW50ZXJzIGluIHRleHQgcGFydCBhbmQgYXR0cmlidXRlcyBwYXJ0LiAgQWxsb3dzIGZvciBmdXR1cmUKKyAgY2hhbmdlIHRvIG1ha2UgYXR0cmlidXRlIG1vcmUgdGhhbiBvbmUgYnl0ZS4KKy0gUHJvdmlkZSBhIHFzb3J0KCkgZnVuY3Rpb24gZm9yIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIGl0LgorLSBDaGFuZ2VkIHRoZSBiaWcgc3dpdGNoIGZvciBOb3JtYWwgbW9kZSBjb21tYW5kcyBpbnRvIGEgdGFibGUuICBUaGlzIGNsZWFucworICB1cCB0aGUgY29kZSBjb25zaWRlcmFibHkgYW5kIGF2b2lkcyB0cm91YmxlIGZvciBzb21lIG9wdGltaXppbmcgY29tcGlsZXJzLgorLSBBc3NpZ25lZCBhIG5lZ2F0aXZlIHZhbHVlIHRvIHNwZWNpYWwga2V5cywgdG8gYXZvaWQgdGhlbSBiZWluZyBtaXhlZCB1cCB3aXRoCisgIFVuaWNvZGUgY2hhcmFjdGVycy4KKy0gR2xvYmFsIHZhcmlhYmxlcyBleHBhbmRfY29udGV4dCBhbmQgZXhwYW5kX3BhdHRlcm4gd2VyZSBub3Qgc3VwcG9zZWQgdG8gYmUKKyAgZ2xvYmFsLiAgUGFzcyB0aGVtIHRvIEV4cGFuZE9uZSgpIGFuZCBhbGwgZnVuY3Rpb25zIGNhbGxlZCBieSBpdC4KKy0gTm8gbG9uZ2VyIHVzZSB0aGUgZ2xvYmFsIHJlZ19pYyBmbGFnLiAgSXQgY2F1c2VkIHRyb3VibGUgYW5kIGluIGEgZmV3IHBsYWNlcworICBpdCB3YXMgbm90IHNldC4KKy0gUmVtb3ZlZCB0aGUgdXNlIG9mIHRoZSBzdHVmZiBidWZmZXIgZm9yICIqIiwgIksiLCBDVFJMLV0sIGV0Yy4gIEF2b2lkcworICBwcm9ibGVtIHdpdGggYXV0b2NvbW1hbmRzLgorLSBNb3ZlZCBzb21lIGNvZGUgZnJvbSBleF9kb2NtZC5jIHRvIGV4X2NtZHMyLmMuICBUaGUgZmlsZSB3YXMgZ2V0dGluZyB0b28KKyAgYmlnLiAgQWxzbyBtb3ZlZCBzb21lIGNvZGUgZnJvbSBzY3JlZW4uYyB0byBtb3ZlLmMuCistIERvbid0IGluY2x1ZGUgdGhlIENSQyB0YWJsZSBmb3IgZW5jcnlwdGlvbiwgZ2VuZXJhdGUgaXQuICBTYXZlcyBxdWl0ZSBhIGJpdAorICBvZiBzcGFjZSBpbiB0aGUgc291cmNlIGNvZGUuIChNYXR0aGlhcyBLcmFtbSkKKy0gUmVuYW1lZCBtdWx0aWJ5dGUuYyB0byBtYnl0ZS5jIHRvIGF2b2lkIGEgcHJvYmxlbSB3aXRoIDguMyBmaWxlc3lzdGVtcy4KKy0gUmVtb3ZlZCB0aGUgR1RLIGltcGxlbWVudGF0aW9uIG9mICI6ZmluZGhlbHAiLCBpdCBub3cgdXNlcyB0aGUKKyAgVG9vbEJhci5GaW5kSGVscCAgbWVudSBlbnRyeS4KKy0gUmVuYW1lZCBtY2hfd2luZGV4aXQoKSB0byBtY2hfZXhpdCgpLCBtY2hfaW5pdCgpIHRvIG1jaF9lYXJseV9pbml0KCkgYW5kCisgIG1jaF9zaGVsbGluaXQoKSB0byBtY2hfaW5pdCgpLgorCitIaWdobGlnaHRpbmc6CistIEluIGEgIjpoaWdobGlnaHQiIGxpc3RpbmcsIHNob3cgInh4eCIgd2l0aCB0aGUgaGlnaGxpZ2h0IGNvbG9yLgorLSBBZGRlZCBzdXBwb3J0IGZvciB4dGVybSB3aXRoIDg4IG9yIDI1NiBjb2xvcnMuICBUaGUgcmlnaHQgY29sb3IgbnVtYmVycyB3aWxsCisgIGJlIHVzZWQgZm9yIHRoZSBuYW1lIHVzZWQgaW4gYSAiOmhpZ2hsaWdodCIgY29tbWFuZC4gKFN0ZXZlIFdhbGwpCistIEFkZGVkICJkZWZhdWx0IiBhcmd1bWVudCBmb3IgIjpoaWdobGlnaHQiLiAgV2hlbiBpbmNsdWRlZCwgdGhlIGNvbW1hbmQgaXMKKyAgaWdub3JlZCBpZiBoaWdobGlnaHRpbmcgZm9yIHRoZSBncm91cCB3YXMgYWxyZWFkeSBkZWZpbmVkLgorICBBbGwgc3ludGF4IGZpbGVzIG5vdyB1c2UgIjpoaSBkZWZhdWx0IC4uLiIgdG8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeQorICBjb2xvcnMgaW4gaGlzIHZpbXJjIGZpbGUuICBBbHNvLCB0aGUgImlmIGRpZF94eHhfc3ludGF4X2luaXRzIiBpcyBub3QgbmVlZGVkCisgIGFueW1vcmUuICBUaGlzIGdyZWF0bHkgc2ltcGxpZmllcyB1c2luZyBub24tZGVmYXVsdCBjb2xvcnMgZm9yIGEgc3BlY2lmaWMKKyAgbGFuZ3VhZ2UuCistIEFkanVzdGVkIGNvbG9ydGVzdC52aW06IEluY2x1ZGVkIGNvbG9ycyBvbiBub3JtYWwgYmFja2dyb3VuZCBhbmQgcmVkdWNlZCB0aGUKKyAgc2l6ZSBieSB1c2luZyBhIHdoaWxlIGxvb3AuIChSYWZhZWwgR2FyY2lhLVN1YXJleikKKy0gQWRkZWQgdGhlICJEYXJrWWVsbG93IiBjb2xvciBuYW1lLiAgSnVzdCB0byBtYWtlIHRoZSBsaXN0IG9mIHN0YW5kYXJkIGNvbG9ycworICBjb25zaXN0ZW50LCBpdCdzIG5vdCByZWFsbHkgYSBuaWNlIGNvbG9yIHRvIHVzZS4KKworV2hlbiBhbiB4dGVybSBpcyBpbiA4LWJpdCBtb2RlIHRoaXMgaXMgZGV0ZWN0ZWQgYnkgdGhlIGNvZGUgcmV0dXJuZWQgZm9yCit8dF9SVnwuICBBbGwga2V5IGNvZGVzIGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byB0aGVpciA4LWJpdCB2ZXJzaW9ucy4KKworVGhlIE9QVF9UQ0FQX1FVRVJZIGluIHh0ZXJtIHBhdGNoIGxldmVsIDE0MSBhbmQgbGF0ZXIgaXMgdXNlZCB0byBvYnRhaW4gdGhlCithY3R1YWwga2V5IGNvZGVzIHVzZWQgYW5kIHRoZSBudW1iZXIgb2YgY29sb3JzIGZvciB0X0NvLiAgT25seSB3aGVuIHx0X1JWfCBpcworYWxzbyB1c2VkLgorCisiOmJyb3dzZSBzZXQiIG5vdyBhbHNvIHdvcmtzIGluIHRoZSBjb25zb2xlIG1vZGUuICAiOmJyb3dzZSBlZGl0IiB3aWxsIGdpdmUgYW4KK2Vycm9yIG1lc3NhZ2UuCisKKyI6YmRlbGV0ZSIgYW5kICI6YnVubG9hZCIgb25seSByZXBvcnQgdGhlIG51bWJlciBvZiBkZWxldGVkL3VubG9hZGVkIGJ1ZmZlcnMKK3doZW4gbW9yZSB0aGFuICdyZXBvcnQnLiAgVGhlIG1lc3NhZ2Ugd2FzIGFubm95aW5nIHdoZW4gZGVsZXRpbmcgYSBidWZmZXIgaW4gYQorc2NyaXB0LgorCitKdW1wIGxpc3Q6CistIFRoZSBudW1iZXIgb2YgbWFya3Mga2VwdCBpbiB0aGUganVtcGxpc3QgaGFzIGJlZW4gaW5jcmVhc2VkIGZyb20gNTAgdG8gMTAwLgorLSBUaGUganVtcGxpc3QgaXMgbm93IHN0b3JlZCBpbiB0aGUgdmltaW5mbyBmaWxlLiAgQ1RSTC1PIGNhbiBiZSB1c2VkIHRvIGp1bXAKKyAgdG8gcG9zaXRpb25zIGZyb20gYSBwcmV2aW91cyBlZGl0IHNlc3Npb24uCistIFdoZW4gZG9pbmcgIjpzcGxpdCIgY29weSB0aGUganVtcGxpc3QgdG8gdGhlIG5ldyB3aW5kb3cuCisKK0Fsc28gc2V0IHRoZSAnWyBhbmQgJ10gbWFya3MgZm9yIHRoZSAifiIgYW5kICJyIiBjb21tYW5kcy4gIFRoZXNlIG1hcmtzIGFyZQorbm93IGFsd2F5cyBzZXQgd2hlbiBtYWtpbmcgYSBjaGFuZ2Ugd2l0aCBhIE5vcm1hbCBtb2RlIGNvbW1hbmQuCisKK1B5dGhvbiBpbnRlcmZhY2U6IEFsbG93IHNldHRpbmcgdGhlIHdpZHRoIG9mIGEgdmVydGljYWxseSBzcGxpdCB3aW5kb3cuIChKb2huCitDb29rKQorCitBZGRlZCAiPXdvcmQiIGFuZCAiPX53b3JkIiB0byAnY2lua2V5cycgKGFsc28gdXNlZCBpbiAnaW5kZW50a2V5cycpLgorCitBZGRlZCAiajEiIGFyZ3VtZW50IGluICdjaW5vcHRpb25zJzogaW5kZW50IHt9IGluc2lkZSAoKSBmb3IgSmF2YS4gKEpvaGFubmVzCitaZWxsbmVyKQorQWRkZWQgdGhlICJsIiBmbGFnIGluICdjaW5vcHRpb25zJy4gKEFuZHVpbiBXaXRoZXJzKQorQWRkZWQgJ0MnLCAnVScsICd3JyBhbmQgJ20nIGZsYWdzIHRvICdjaW5vcHRpb25zJy4gKFNlcnZhdGl1cyBCcmFuZHQpCisKK1doZW4gZG9pbmcgIjp3YWxsIiBvciAiOndxYWxsIiBhbmQgYSBtb2RpZmllZCBidWZmZXIgZG9lc24ndCBoYXZlIGEgbmFtZSwKK21lbnRpb24gaXRzIGJ1ZmZlciBudW1iZXIgaW4gdGhlIGVycm9yIG1lc3NhZ2UuCisKKyI6ZnVuY3Rpb24gTmFtZSIgbGlzdHMgdGhlIGZ1bmN0aW9uIHdpdGggbGluZSBudW1iZXJzLiAgTWFrZXMgaXQgZWFzaWVyIHRvCitmaW5kIG91dCB3aGVyZSBhbiBlcnJvciBoYXBwZW5lZC4KKworSW4gbm9uLWJsb2Nrd2lzZSBWaXN1YWwgbW9kZSwgInIiIHJlcGxhY2VzIGFsbCBzZWxlY3RlZCBjaGFyYWN0ZXJzIHdpdGggdGhlCit0eXBlZCBvbmUsIGxpa2UgaW4gYmxvY2t3aXNlIFZpc3VhbCBtb2RlLgorCitXaGVuIGVkaXRpbmcgdGhlIGxhc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdCBpbiBhbnkgd2F5LCBhbGxvdyBleGl0aW5nLgorUHJldmlvdXNseSB0aGlzIHdhcyBvbmx5IHBvc3NpYmxlIHdoZW4gZ2V0dGluZyB0byB0aGF0IGZpbGUgd2l0aCAiOm5leHQiIG9yCisiOmxhc3QiLgorCitBZGRlZCB0aGUgJzEnIGZsYWcgdG8gJ2Zvcm1hdG9wdGlvbnMnLiAoVml0IFN0cmFkYWwpCitBZGRlZCAnbicgZmxhZyBpbiAnZm9ybWF0b3B0aW9ucyc6IGZvcm1hdCBhIG51bWJlcmVkIGxpc3QuCisKK1N3YXAgZmlsZToKKy0gV2hlbiBhIHN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cywgYW5kIHRoZSB1c2VyIHNlbGVjdHMgIkRlbGV0ZSIgYXQgdGhlCisgIEFUVEVOVElPTiBwcm9tcHQsIHVzZSB0aGUgc2FtZSAiLnN3cCIgc3dhcGZpbGUsIHRvIGF2b2lkIGNyZWF0aW5nIGEgIi5zd28iCisgIGZpbGUgd2hpY2ggd29uJ3QgYWx3YXlzIGJlIGZvdW5kLgorLSBXaGVuIGdpdmluZyB0aGUgQVRURU5USU9OIG1lc3NhZ2UgYW5kIHRoZSBkYXRlIG9mIHRoZSBmaWxlIGlzIG5ld2VyIHRoYW4gdGhlCisgIGRhdGUgb2Ygc3dhcCBmaWxlLCBnaXZlIGEgd2FybmluZyBhYm91dCB0aGlzLgorLSBNYWRlIHRoZSBpbmZvIGZvciBhbiBleGlzdGluZyBzd2FwIGZpbGUgYSBiaXQgc2hvcnRlciwgc28gdGhhdCBpdCBzdGlsbCBmaXRzCisgIG9uIGEgMjQgbGluZSBzY3JlZW4uCistIEl0IHdhcyBwb3NzaWJsZSB0byBtYWtlIGEgc3ltbGluayB3aXRoIHRoZSBuYW1lIG9mIGEgc3dhcCBmaWxlLCBsaW5raW5nIHRvIGEKKyAgZmlsZSB0aGF0IGRvZXNuJ3QgZXhpc3QuICBWaW0gd291bGQgdGhlbiBzaWxlbnRseSB1c2UgYW5vdGhlciBmaWxlIChpZiBvcGVuCisgIHdpdGggT19FWENMIHJlZnVzZXMgYSBzeW1saW5rKS4gIE5vdyBjaGVjayBmb3IgYSBzeW1saW5rIHRvIGV4aXN0LiAgQWxzbyBkbworICBhbm90aGVyIGNoZWNrIGZvciBhbiBleGlzdGluZyBzd2FwIGZpbGUganVzdCBiZWZvcmUgY3JlYXRpbmcgaXQgdG8gY2F0Y2ggYQorICBzeW1saW5rIGF0dGFjay4KKworVGhlIGcgQ1RSTC1HIGNvbW1hbmQgYWxzbyB3b3JrcyBpbiBWaXN1YWwgbW9kZSBhbmQgY291bnRzIHRoZSBudW1iZXIgb2Ygd29yZHMuCisoQ2hhc2UgVGluZ2xleSkKKworR2l2ZSBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdXNpbmcgJ3NoZWxsJyBhbmQgaXQncyBlbXB0eS4KKworQWRkZWQgdGhlIHBvc3NpYmlsaXR5IHRvIGluY2x1ZGUgIiVzIiBpbiAnc2hlbGxwaXBlJy4KKworQWRkZWQgInVoZXgiIHZhbHVlIGZvciAnZGlzcGxheSc6IHNob3cgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGFzIDx4eD4uCitTaG93IHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgd2l0aCBOb25UZXh0IGhpZ2hsaWdodGluZywgYWxzbyBpbiB0aGUgY29tbWFuZAorbGluZS4KKworV2hlbiBhc2tlZCB0byBkaXNwbGF5IHRoZSB2YWx1ZSBvZiBhIGhpZGRlbiBvcHRpb24sIHRlbGwgaXQncyBub3Qgc3VwcG9ydGVkLgorCitXaW4zMjoKKy0gV2hlbiBkcm9wcGluZyBhIHNob3J0Y3V0IG9uIGd2aW0gKC5sbmsgZmlsZSkgZWRpdCB0aGUgdGFyZ2V0LCBub3QgdGhlCisgIHNob3J0Y3V0IGl0c2VsZi4gIChZYXN1aGlybyBNYXRzdW1vdG8pCistIEFkZGVkIEMgdmVyc2lvbnMgb2YgdGhlIE9wZW5XaXRoVmltIGFuZCBTZW5kVG9WaW0gcHJvZ3JhbXMuIChXYWx0ZXIgQnJpc2NvZSkKKy0gV2hlbiAnc2hlbGwnIGlzICJjbWQiIG9yICJjbWQuZXhlIiwgc2V0ICdzaGVsbHJlZGlyJyB0byByZWRpcmVjdCBzdGRlcnIgdG9vLgorICBBbHNvIGNoZWNrIGZvciB0aGUgVW5peCBzaGVsbCBuYW1lcy4KKy0gV2hlbiAkSE9NRURSSVZFIGFuZCAkSE9NRVBBVEggYXJlIGRlZmluZWQsIHVzZSB0aGVtIHRvIGRlZmluZSAkSE9NRS4gIChDcmFpZworICBCYXJraG91c2UpCisKK1dpbjMyIGNvbnNvbGUgdmVyc2lvbjoKKy0gSW5jbHVkZXMgdGhlIHVzZXIgYW5kIHN5c3RlbSBuYW1lIGluIHRoZSAiOnZlcnNpb24iIG1lc3NhZ2UsIHdoZW4gYXZhaWxhYmxlLgorICBJdCBnZW5lcmF0ZXMgYSBwYXRoZGVmLmMgZmlsZSBmb3IgdGhpcy4gIChKb24gTWluZXIpCistIFNldCB0aGUgd2luZG93IGljb24gdG8gVmltJ3MgaWNvbiAob25seSBmb3IgV2luZG93cyAyMDAwKS4gIFdoaWxlIGV4ZWN1dGluZworICBhIHNoZWxsIGNvbW1hbmQsIG1vZGlmeSB0aGUgd2luZG93IHRpdGxlIHRvIHNob3cgdGhpcy4gIFdoZW4gZXhpdGluZywKKyAgcmVzdG9yZSB0aGUgY3Vyc29yIHBvc2l0aW9uIHRvby4gIChDcmFpZyBCYXJraG91c2UpCistIFRoZSBXaW4zMiBjb25zb2xlIHZlcnNpb24gY2FuIGJlIGNvbXBpbGVkIHdpdGggT0xFIHN1cHBvcnQuICBJdCBjYW4gb25seQorICBmdW5jdGlvbiBhcyBhIGNsaWVudCwgbm90IGFzIGFuIE9MRSBzZXJ2ZXIuCisKK0Vycm9yZm9ybWF0OgorLSBMZXQgIiVwIiBpbiAnZXJyb3Jmb3JtYXQnIChjb2x1bW4gb2YgZXJyb3IgaW5kaWNhdGVkIGJ5IGEgcm93IG9mIGNoYXJhY3RlcnMpCisgIGFsc28gYWNjZXB0IGEgbGluZSBvZiBkb3RzLgorLSBBZGRlZCAiJXYiIGl0ZW0gaW4gJ2Vycm9yZm9ybWF0JzogVmlydHVhbCBjb2x1bW4gbnVtYmVyLiAoRGFuIFNoYXJwKQorLSBBZGRlZCBhIGRlZmF1bHQgJ2Vycm9yZm9ybWF0JyB2YWx1ZSBmb3IgVk1TLiAoSmltIEJ1c2gpCisKK1RoZSAicCIgY29tbWFuZCBjYW4gbm93IGJlIHVzZWQgaW4gVmlzdWFsIG1vZGUuICBJdCBvdmVyd3JpdGVzIHRoZSBzZWxlY3RlZAordGV4dCB3aXRoIHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyLgorCitIaWdobGlnaHQgdGhlIDw+IGl0ZW1zIGluIHRoZSBpbnRybyBtZXNzYWdlIHRvIG1ha2UgY2xlYXIgdGhleSBhcmUgc3BlY2lhbC4KKworV2hlbiB1c2luZyB0aGUgImMiIGZsYWcgZm9yICI6c3Vic3RpdHV0ZSIsIGFsbG93IHR5cGluZyAibCIgZm9yIHJlcGxhY2luZyB0aGlzCitpdGVtIGFuZCB0aGVuIHN0b3A6ICJsYXN0Ii4KKworV2hlbiBwcmludGluZyBhIHZlcmJvc2UgbWVzc2FnZSBhYm91dCBzb3VyY2luZyBhbm90aGVyIGZpbGUsIHByaW50IHRoZSBsaW5lCitudW1iZXIuCisKK1doZW4gcmVzaXppbmcgdGhlIFZpbSB3aW5kb3csIGRvbid0IHVzZSAnZXF1YWxhbHdheXMnLiAgQXZvaWRzIHRoYXQgbWFraW5nIHRoZQorVmltIHdpbmRvdyBzbWFsbGVyIG1ha2VzIHNwbGl0IHdpbmRvd3MgYmlnZ2VyLiAgQW5kIGl0J3Mgd2hhdCB0aGUgZG9jcyBzYXkuCisKK1doZW4gdHlwaW5nIENUUkwtRCBpbiBJbnNlcnQgbW9kZSwganVzdCBhZnRlciBhbiBhdXRvaW5kZW50LCB0aGVuIGhpdHRpbmcgQ1IKK2tlcHQgdGhlIHJlbWFpbmluZyB3aGl0ZSBzcGFjZS4gIE5vdyBtYWRlIGl0IHdvcmsgbGlrZSBCUzogZGVsZXRlIHRoZQorYXV0b2luZGVudCB0byBhdm9pZCBhIGJsYW5rIG5vbi1lbXB0eSBsaW5lIHJlc3VsdHMuCisKK0FkZGVkIGEgR2V0SHduZCgpIGNhbGwgdG8gdGhlIE9MRSBpbnRlcmZhY2UuICAoVmluY2UgTmVncmkpCisKK01hZGUgIjpub3JtYWwiIHdvcmsgaW4gYW4gZXZlbnQgaGFuZGxlci4gIFVzZWZ1bCB3aGVuIGRyb3BwaW5nIGEgZmlsZSBvbiBWaW0KK2FuZCBmb3IgQ3Vyc29ySG9sZCBhdXRvY29tbWFuZHMuCisKK0ZvciB0aGUgTVMtV2luZG93cyB2ZXJzaW9uLCBkb24ndCBjaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3aGVuIGEKK3NsYXNoIGlzIHVzZWQgaW5zdGVhZCBvZiBhIGJhY2tzbGFzaC4gIEV4cGxvcmVyIHNob3VsZCBhbHdheXMgdXNlIGEgYmFja3NsYXNoLAordGhlIHVzZXIgY2FuIHVzZSBhIHNsYXNoIHdoZW4gdHlwaW5nIHRoZSBjb21tYW5kLgorCitUaW1lc3RhbXBzOgorLSBXaGVuIGEgYnVmZmVyIHdhcyBjaGFuZ2VkIG91dHNpZGUgb2YgVmltIGFuZCByZWdhaW5pbmcgZm9jdXMsIGdpdmUgYSBkaWFsb2cKKyAgdG8gYWxsb3cgdGhlIHVzZXIgdG8gcmVsb2FkIHRoZSBmaWxlLiAgTm93IGFsc28gZm9yIG90aGVyIEdVSXMgdGhhbgorICBNUy1XaW5kb3dzLiAgQW5kIGFsc28gdXNlZCBpbiB0aGUgY29uc29sZSwgd2hlbiBjb21waWxlZCB3aXRoIGRpYWxvZworICBzdXBwb3J0LgorLSBJbnNwZWN0IHRoZSBmaWxlIGNvbnRlbnRzIHRvIGZpbmQgb3V0IGlmIGl0IHJlYWxseSBjaGFuZ2VkLCBpZ25vcmUKKyAgc2l0dWF0aW9ucyB3aGVyZSBvbmx5IHRoZSB0aW1lIHN0YW1wIGNoYW5nZWQgKGUuZy4sIGNoZWNraW5nIHRoZSBmaWxlIG91dAorICBmcm9tIENWUykuCistIFdoZW4gY2hlY2tpbmcgdGhlIHRpbWVzdGFtcCwgZmlyc3QgY2hlY2sgaWYgdGhlIGZpbGUgc2l6ZSBjaGFuZ2VkLCB0byBhdm9pZAorICBhIGZpbGUgY29tcGFyZSB0aGVuLiAgTWFrZXMgaXQgcXVpY2tlciBmb3IgbGFyZ2UgKGxvZykgZmlsZXMgdGhhdCBhcmUKKyAgYXBwZW5kZWQgdG8uCistIERvbid0IGdpdmUgYSB3YXJuaW5nIGZvciBhIGNoYW5nZWQgb3IgZGVsZXRlZCBmaWxlIHdoZW4gJ2J1ZnR5cGUnIGlzIHNldC4KKy0gTm8gbG9uZ2VyIHdhcm4gZm9yIGEgY2hhbmdlZCBkaXJlY3RvcnkuICBUaGlzIGF2b2lkcyB0aGF0IHRoZSBmaWxlIGV4cGxvcmVyCisgIHByb2R1Y2VzIHdhcm5pbmdzLgorLSBDaGVja2luZyB0aW1lc3RhbXBzIGlzIG9ubHkgZG9uZSBmb3IgYnVmZmVycyB0aGF0IGFyZSBub3QgaGlkZGVuLiAgVGhlc2UKKyAgd2lsbCBiZSBjaGVja2VkIHdoZW4gdGhleSBiZWNvbWUgdW5oaWRkZW4uCistIFdoZW4gY2hlY2tpbmcgZm9yIGEgZmlsZSBiZWluZyBjaGFuZ2VkIG91dHNpZGUgb2YgVmltLCBhbHNvIGNoZWNrIGlmIHRoZQorICBmaWxlIHBlcm1pc3Npb25zIGNoYW5nZWQuICBXaGVuIHRoZSBmaWxlIGNvbnRlbnRzIGRpZG4ndCBjaGFuZ2UgYnV0IHRoZQorICBwZXJtaXNzaW9ucyBkaWQsIGdpdmUgYSB3YXJuaW5nLgorLSBBdm9pZCBjaGVja2luZyB0b28gb2Z0ZW4sIG90aGVyd2lzZSB0aGUgZGlhbG9nIGtlZXBzIHBvcHBpbmcgdXAgZm9yIGEgbG9nCisgIGZpbGUgdGhhdCBzdGVhZGlseSBncm93cy4KKworTWFwcGluZyA8TS1BPiB3aGVuICdlbmNvZGluZycgaXMgImxhdGluMSIgYW5kIHRoZW4gc2V0dGluZyAnZW5jb2RpbmcnIHRvCisidXRmLTgiIGNhdXNlcyB0aGUgZmlyc3QgYnl0ZSBvZiBhIG11bHRpLWJ5dGUgdG8gYmUgbWFwcGVkLiAgQ2FuIGNhdXNlIHZlcnkKK2hhcmQgdG8gZmluZCBwcm9ibGVtcy4gIERpc2FsbG93IG1hcHBpbmcgcGFydCBvZiBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLgorCitGb3IgIjpweXRob24iIGFuZCAiOnRjbCIgYWNjZXB0IGFuIGluLWxpbmUgc2NyaXB0LiAoSm9oYW5uZXMgWmVsbG5lcikKK0Fsc28gZm9yICI6cnVieSIgYW5kICI6cGVybCIuIChCZW5vaXQgQ2VycmluYSkKKworTWFkZSAiOnN5biBpbmNsdWRlIiB1c2UgJ3J1bnRpbWVwYXRoJyB3aGVuIHRoZSBmaWxlIG5hbWUgaXMgbm90IGEgZnVsbCBwYXRoLgorCitXaGVuICdzd2l0Y2hidWYnIGNvbnRhaW5zICJzcGxpdCIgYW5kIHRoZSBjdXJyZW50IHdpbmRvdyBpcyBlbXB0eSwgZG9uJ3Qgc3BsaXQKK3RoZSB3aW5kb3cuCisKK1VuaXg6IENhdGNoIFNJR1BXUiB0byBwcmVzZXJ2ZSBmaWxlcyB3aGVuIHRoZSBwb3dlciBpcyBhYm91dCB0byBnbyBkb3duLgorCitTbmlmZiBpbnRlcmZhY2U6IChBbnRvbiBMZWhlcmJhdWVyKQorLSBmaXhlZCB3aW5kb3dzIGNvZGUsIGVzcC4gdGhlIGV2ZW50IGhhbmRsaW5nIHN0dWZmCistIGFkYXB0YXRpb25zIGZvciBzbmlmZiA0LnggKCRTTklGRl9ESVI0KQorLSBzdXBwb3J0IGZvciBhZGRpbmcgc25pZmYgcmVxdWVzdHMgYXQgcnVudGltZQorCitTdXBwb3J0IHRoZSBub3RhdGlvbiA8QS14PiBhcyBhbiBhbGlhcyBmb3IgPE0teD4uICBUaGlzIGxvZ2ljYWwsIHNpbmNlIHRoZSBBbHQKK2tleSBpcyB1c2VkLgorCisiOmZpbmQiIGFjY2VwdHMgYSBjb3VudCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY291bnQndGggbWF0Y2ggaW4gJ3BhdGgnIGlzCit1c2VkLgorCisiOmxzIiBhbmQgIjpidWZmZXJzIiBvdXRwdXQgc2hvd3MgbW9kaWZpZWQvcmVhZG9ubHkvbW9kaWZpYWJsZSBmbGFnLiAgV2hlbiBhCitidWZmZXIgaXMgYWN0aXZlIHNob3cgImEiIGluc3RlYWQgb2Ygbm90aGluZy4gIFdoZW4gYSBidWZmZXIgaXNuJ3QgbG9hZGVkCitzaG93IG5vdGhpbmcgaW5zdGVhZCBvZiAiLSIuCisKK1VuaXggaW5zdGFsbDoKKy0gV2hlbiBpbnN0YWxsaW5nIHRoZSB0b29scywgc2V0IGFic29sdXRlIHBhdGhzIGluIHRvb2xzIHNjcmlwdHMgZWZtX3BlcmwucGwKKyAgYW5kIG12ZS5hd2suICBBdm9pZHMgdGhhdCB0aGUgdXNlciBoYXMgdG8gZWRpdCB0aGVzZSBmaWxlcy4KKy0gSW5zdGFsbCBJY29ucyBmb3IgS0RFIHdoZW4gdGhlIGRpcmVjdG9yaWVzIGV4aXN0IGFuZCB0aGUgaWNvbnMgZG8gbm90IGV4aXN0CisgIHlldC4KKworQWRkZWQgaGFzKCJ3aW45NSIpLCB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gTVMtV2luZG93cyA5NS85OC9NRSBhbmQKK05ULzIwMDAvWFAgaW4gYSBWaW0gc2NyaXB0LgorCitXaGVuIGEgIjpjZCIgY29tbWFuZCB3YXMgdHlwZWQsIGVjaG8gdGhlIG5ldyBjdXJyZW50IGRpcmVjdG9yeS4gKERhbiBTaGFycCkKKworV2hlbiB1c2luZyAiOndpbnBvcyIgYmVmb3JlIHRoZSBHVUkgd2luZG93IGhhcyBiZWVuIG9wZW5lZCwgcmVtZW1iZXIgdGhlCit2YWx1ZXMgdW50aWwgaXQgaXMgb3BlbmVkLgorCitJbiB0aGUgIjp2ZXJzaW9uIiBvdXRwdXQsIGFkZCAiL2R5biIgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIGR5bmFtaWNhbGx5IGxvYWRlZC4KK1RoaXMgaW5kaWNhdGVzIHRoZSBmZWF0dXJlIG1heSBub3QgYWx3YXlzIHdvcmsuCisKK09uIFdpbmRvd3MgTlQgaXQgaXMgcG9zc2libGUgdGhhdCBhIGRpcmVjdG9yeSBpcyByZWFkLW9ubHksIGJ1dCBhIGZpbGUgY2FuIGJlCitkZWxldGVkLiAgV2hlbiBtYWtpbmcgYSBiYWNrdXAgYnkgcmVuYW1pbmcgdGhlIGZpbGUgYW5kICdiYWNrdXBkaXInIGRvZXNuJ3QKK3VzZSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoaXMgY2F1c2VzIHRoZSBvcmlnaW5hbCBmaWxlIHRvIGJlIGRlbGV0ZWQsCit3aXRob3V0IHRoZSBwb3NzaWJpbGl0eSB0byBjcmVhdGUgYSBuZXcgZmlsZS4gIEdpdmUgYW4gZXh0cmEgZXJyb3IgbWVzc2FnZQordGhlbiB0byB3YXJuIHRvIHVzZXIgYWJvdXQgdGhpcy4KKworTWFkZSBDVFJMLVIgQ1RSTC1PIGF0IHRoZSBjb21tYW5kIGxpbmUgd29yayBsaWtlIENUUkwtUiBDVFJMLVIsIHNvIHRoYXQgaXQncworY29uc2lzdGVudCB3aXRoIEluc2VydCBtb2RlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NPTVBJTEUgVElNRSBDSEFOR0VTCQkJCQkqY29tcGlsZS1jaGFuZ2VzLTYqCisKK0FsbCBnZW5lcmF0ZWQgZmlsZXMgaGF2ZSBiZWVuIG1vdmVkIG91dCBvZiB0aGUgInNyYyIgZGlyZWN0b3J5LiAgVGhpcyBtYWtlcyBpdAorZWFzeSB0byBzZWUgd2hpY2ggZmlsZXMgYXJlIG5vdCBlZGl0ZWQgYnkgaGFuZC4gIFRoZSBmaWxlcyBnZW5lcmF0ZWQgYnkKK2NvbmZpZ3VyZSBhcmUgbm93IGluIHRoZSAic3JjL2F1dG8iIGRpcmVjdG9yeS4gIEZvciBVbml4LCBjb21waWxlZCBvYmplY3QKK2ZpbGVzIGdvIGluIHRoZSBvYmplY3RzIGRpcmVjdG9yeS4KKworVGhlIHNvdXJjZSBhcmNoaXZlIHdhcyBvdmVyIHRoZSAxLjRNIGZsb3BweSBsaW1pdC4gIFRoZSBhcmNoaXZlcyBhcmUgbm93IHNwbGl0Cit1cCBpbnRvIHR3byBydW50aW1lIGFuZCB0d28gc291cmNlIGFyY2hpdmVzLiAgQWxzbyBwcm92aWRlIGEgYnppcDIgY29tcHJlc3NlZAorYXJjaGl2ZSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgc291cmNlcyBhbmQgcnVudGltZSBmaWxlcy4KKworQWRkZWQgInJlY29uZmlnIiBhcyBhIHRhcmdldCBmb3IgbWFrZS4gIFVzZWZ1bCB3aGVuIGNoYW5naW5nIHNvbWUgb2YgdGhlCithcmd1bWVudHMgdGhhdCByZXF1aXJlIGZsdXNoaW5nIHRoZSBjYWNoZSwgc3VjaCBhcyBzd2l0Y2hpbmcgZnJvbSBHVEsgdG8KK01vdGlmLiAgQWRqdXN0ZWQgdGhlIG1lYW5pbmcgb2YgR1VJX0lOQ19MT0MgYW5kIEdVSV9MSUJfTE9DIHRvIGJlIGNvbnNpc3RlbnQKK292ZXIgZGlmZmVyZW50IEdVSXMuCisKK0FkZGVkIHNyYy9SRUFETUUudHh0IHRvIGdpdmUgYW4gb3ZlcnZpZXcgb2YgdGhlIG1haW4gcGFydHMgb2YgdGhlIHNvdXJjZSBjb2RlLgorCitUaGUgVW5peCBNYWtlZmlsZSBub3cgZnVsbHkgc3VwcG9ydHMgdXNpbmcgJChERVNURElSKSB0byBpbnN0YWxsIHRvIGEgc3BlY2lmaWMKK2xvY2F0aW9uLiAgUmVwbGFjZXMgdGhlIG1hbnVhbCBzZXR0aW5nIG9mICpFTkRMT0MgdmFyaWFibGVzLgorCitBZGRlZCB0aGUgcG9zc2liaWxpdHkgZm9yIGEgbWFpbnRhaW5lciBvZiBhIGJpbmFyeSB2ZXJzaW9uIHRvIGluY2x1ZGUgaGlzCitlLW1haWwgYWRkcmVzcyB3aXRoIHRoZSAtLXdpdGgtY29tcGlsZWRieSBjb25maWd1cmUgYXJndW1lbnQuCisKK0luY2x1ZGVkIGZlYXR1cmVzIGFyZSBub3cgZ3JvdXBlZCBpbiAidGlueSIsICJzbWFsbCIsICJub3JtYWwiLCAiYmlnIiBhbmQKKyJodWdlIi4gIFRoaXMgcmVwbGFjZXMgIm1pbi1mZWF0dXJlcyIgYW5kICJtYXgtZmVhdHVyZXMiLiAgVXNpbmcgInRpbnkiCitkaXNhYmxlcyBtdWx0aXBsZSB3aW5kb3dzIGZvciBhIHJlYWxseSBzbWFsbCBWaW0uCisKK0ZvciB0aGUgdGlueSB2ZXJzaW9uIG9yIHdoZW4gRkVBVF9XSU5ET1dTIGlzIG5vdCBkZWZpbmVkOiBGaXJzdHdpbiBhbmQgbGFzdHdpbgorYXJlIGVxdWFsIHRvIGN1cndpbiBhbmQgZG9uJ3QgdXNlIHdfbmV4dCBhbmQgd19wcmV2LgorCitBZGRlZCB0aGUgK2xpc3RjbWRzIGZlYXR1cmUuICBDYW4gYmUgdXNlZCB0byBjb21waWxlIHdpdGhvdXQgdGhlIFZpbSBjb21tYW5kcwordGhhdCBtYW5pcHVsYXRlIHRoZSBidWZmZXIgbGlzdCBhbmQgYXJndW1lbnQgbGlzdCAodGhlIGJ1ZmZlciBsaXN0IGl0c2VsZiBpcworc3RpbGwgdGhlcmUsIGNhbid0IGRvIHdpdGhvdXQgaXQpLgorCitBZGRlZCB0aGUgK3ZyZXBsYWNlIGZlYXR1cmUuICBJdCBpcyBkaXNhYmxlZCBpbiB0aGUgInNtYWxsIiB2ZXJzaW9uIHRvIGF2b2lkCit0aGF0IHRoZSAxNiBiaXQgRE9TIHZlcnNpb24gcnVucyBvdXQgb2YgbWVtb3J5LgorCitSZW1vdmVkIEdUSysgc3VwcG9ydCBmb3IgdmVyc2lvbnMgb2xkZXIgdGhhbiAxLjEuMTYuCisKK1RoZSBjb25maWd1cmUgY2hlY2tzIGZvciB1c2luZyBQVFlzIGhhdmUgYmVlbiBpbXByb3ZlZC4gIENvZGUgdGFrZW4gZnJvbSBhCityZWNlbnQgdmVyc2lvbiBvZiBzY3JlZW4uCisKK0FkZGVkIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGluc3RhbGwgVmltLCBFeCBhbmQgVmlldyB1bmRlciBhbm90aGVyIG5hbWUgKGUuZy4sCit2aW02LCBleDYgYW5kIHZpZXc2KS4KKworQWRkZWQgIi0td2l0aC1nbG9iYWwtcnVudGltZSIgY29uZmlndXJlIGFyZ3VtZW50LiAgQWxsb3dzIHNwZWNpZnlpbmcgdGhlCitnbG9iYWwgZGlyZWN0b3J5IHVzZWQgaW4gdGhlICdydW50aW1lcGF0aCcgZGVmYXVsdC4KKworTWFkZSBlbmFibGluZyB0aGUgU05pRkYrIGludGVyZmFjZSBwb3NzaWJsZSB3aXRoIGEgY29uZmlndXJlIGFyZ3VtZW50LgorCitDb25maWd1cmUgbm93IGFsd2F5cyBjaGVja3MgL3Vzci9sb2NhbC9saWIgZm9yIGxpYnJhcmllcyBhbmQKKy91c3IvbG9jYWwvaW5jbHVkZSBmb3IgaW5jbHVkZSBmaWxlcy4gIEhlbHBzIGZpbmRpbmcgdGhlIHN0dWZmIGZvciBpY29udigpIGFuZAorZ2V0dGV4dCgpLgorCitNb3ZlZCB0aGUgY29tbWFuZCBsaW5lIGhpc3Rvcnkgc3R1ZmYgaW50byB0aGUgK2NtZGxpbmVfaGlzdCBmZWF0dXJlLCB0bworZXhjbHVkZSB0aGUgY29tbWFuZCBsaW5lIGhpc3RvcnkgZnJvbSB0aGUgdGlueSB2ZXJzaW9uLgorCitNUy1XaW5kb3dzOiBNb3ZlZCBjb21tb24gZnVuY3Rpb25zIGZyb20gV2luMTYgYW5kIFdpbjMyIHRvIG9zX21zd2luLmMuICBBdm9pZHMKK2hhdmluZyB0byBjaGFuZ2UgdHdvIGZpbGVzIGZvciBvbmUgcHJvYmxlbS4gIChWaW5jZSBOZWdyaSkKKworTW92ZWQgY29tbW9uIGNvZGUgZnJvbSBndWlfdzE2LmMgYW5kIGd1aV93MzIuYyB0byBndWlfdzQ4LmMgKFZpbmNlIE5lZ3JpKQorCitUaGUganVtcGxpc3QgaXMgbm93IGEgc2VwYXJhdGUgZmVhdHVyZS4gIEl0IGlzIGRpc2FibGVkIGZvciB0aGUgInNtYWxsIgordmVyc2lvbiAoMTYgYml0IE1TLURPUykuCisKK1JlbmFtZWQgYWxsIHR5cGVzIGVuZGluZyBpbiBfdCB0byBlbmQgaW4gX1QuICBBdm9pZHMgcG90ZW50aWFsIHByb2JsZW1zIHdpdGgKK3N5c3RlbSB0eXBlcy4KKworQWRkZWQgYSBjb25maWd1cmUgY2hlY2sgZm9yIFgxMSBoZWFkZXIgZmlsZXMgdGhhdCBpbXBsaWNpdGx5IGRlZmluZSB0aGUgcmV0dXJuCit0eXBlIHRvIGludC4gKFN0ZXZlIFdhbGwpCisKKyJtYWtlIGRvc2xhbmciIGluIHRoZSB0b3AgZGlyZWN0b3J5IG1ha2VzIGFuIGFyY2hpdmUgd2l0aCB0aGUgbWVudSBhbmQgLm1vCitmaWxlcyBmb3IgV2luZG93cy4gIFRoaXMgdXNlcyB0aGUgZmlsZXMgZ2VuZXJhdGVkIG9uIFVuaXgsIHRoZXNlIHNob3VsZCB3b3JrCitvbiBNUy1XaW5kb3dzIGFzIHdlbGwuCisKK01lcmdlZCBhIGxhcmdlIHBhcnQgb2Ygb3Nfdm1zLmMgd2l0aCBvc191bml4LmMuICBUaGUgY29kZSB3YXMgZHVwbGljYXRlZCBpbgordGhlIHBhc3Qgd2hpY2ggbWFkZSBtYWludGVuYW5jZSBtb3JlIHdvcmsuICAoWm9sdGFuIEFycGFkZmZ5KQorCitVcGRhdGVkIHRoZSBCb3JsYW5kIEMgdmVyc2lvbiA1IE1ha2VmaWxlOiAoRGFuIFNoYXJwKQorLSBGaXhlZCB0aGUgUGVybCBidWlsZAorLSBBZGRlZCBweXRob24gYW5kIHRjbCBidWlsZHMKKy0gQWRkZWQgZHluYW1pYyBwZXJsIGFuZCBkeW5hbWljIHB5dGhvbiBidWlsZHMKKy0gQWRkZWQgdW5pbnN0YWwuZXhlIGJ1aWxkCistIFVzZSAieWVzIiBhbmQgIm5vIiBmb3IgdGhlIG9wdGlvbnMsIGxpa2UgaW4gTWFrZV9tdmMubWFrLgorCitXaW4zMjogTWVyZ2VkIE1ha2VfZ3ZjLm1hayBhbmQgTWFrZV9vdmMubWFrIGludG8gb25lIGZpbGU6IE1ha2VfaXZjLm1hay4gIEl0J3MKK211Y2ggc21hbGxlciwgbWFueSB1bm5lY2Vzc2FyeSB0ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIChXYWx0ZXIgQnJpc2NvZSkKK0FkZGVkIE1ha2VfZHZjLm1hayB0byBiZSBhYmxlIHRvIGRlYnVnIGV4ZSBnZW5lcmF0ZWQgd2l0aCBNYWtlX212Yy5tYWsgaW4KK01TLURldnN0dWRpby4gKFdhbHRlciBCcmlzY29lKQorCitNUy1XaW5kb3dzOiBUaGUgYmlnIGd2aW0uZXhlLCB3aGljaCBpbmNsdWRlcyBPTEUsIG5vdyBhbHNvIGluY2x1ZGVzCitkeW5hbWljYWxseSBsb2FkZWQgVGNsLCBQZXJsIGFuZCBQeXRob24uICBUaGlzIHVzZXMgQWN0aXZlUGVybCA1LjYuMSwKK0FjdGl2ZVB5dGhvbiAyLjEuMSBhbmQgQWN0aXZlVENMIDguMy4zCisKK0FkZGVkIEFDX0VYRUVYVCB0byBjb25maWd1cmUuaW4sIHRvIGNoZWNrIGlmIHRoZSBleGVjdXRhYmxlIG5lZWRzICIuZXhlIiBmb3IKK0N5Z3dpbiBvciBNaW5nVy4gIFJlbmFtZWQgU1VGRklYIHRvIEVYRUVYVCBpbiBNYWtlZmlsZS4KKworV2luMzI6IExvYWQgY29tZGxnMzIuZGxsIGRlbGF5ZWQgZm9yIGZhc3RlciBzdGFydHVwLiAgT25seSB3aGVuIHVzaW5nIFZDIDYuCisoVmlwaW4gQXJhdmluZCkKKworV2luMzI6IFdoZW4gY29tcGlsaW5nIHdpdGggQm9ybGFuZCwgYWxsb3cgdXNpbmcgSU1FLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorCitXaW4zMjogQWRkZWQgTWFrZWZpbGUgZm9yIEJvcmxhbmQgNSB0byBjb21waWxlIGd2aW1leHQuZGxsLiAoWWFzdWhpcm8KK01hdHN1bW90bykKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitCVUcgRklYRVMJCQkJCQkqYnVnLWZpeGVzLTYqCisKK1doZW4gY2hlY2tpbmcgdGhlIGNvbW1hbmQgbmFtZSBmb3IgImd2aW0iLCAiZXgiLCBldGMuIGlnbm9yZSBjYXNlLiAgUmVxdWlyZWQKK2ZvciBzeXN0ZW1zIHdoZXJlIGNhc2UgaXMgaWdub3JlZCBpbiBjb21tYW5kIG5hbWVzLgorCitTZWFyY2ggcGF0dGVybiAiW2EtYy1lXSIgYWxzbyBtYXRjaGVkIGEgJ2QnIGFuZCBkaWRuJ3QgbWF0Y2ggYSAnLScuCisKK1doZW4gZG91YmxlLWNsaWNraW5nIGluIGFub3RoZXIgd2luZG93LCB3YXNuJ3QgcmVjb2duaXplZCBhcyBkb3VibGUgY2xpY2ssCitiZWNhdXNlIHRvcGxpbmUgaXMgZGlmZmVyZW50LiAgQWRkZWQgc2V0X21vdXNlX3RvcGxpbmUoKS4KKworVGhlIEJST0tFTl9MT0NBTEUgY2hlY2sgd2FzIGJyb2tlbi4gIChNYXJjaW4gRGFsZWNraSkKKworV2hlbiAidF9DbyIgaXMgc2V0LCB0aGUgZGVmYXVsdCBjb2xvcnMgcmVtYWluIHRoZSBzYW1lLCB0aHVzIHdyb25nLiAgUmVzZXQgdGhlCitjb2xvcnMgYWZ0ZXIgY2hhbmdpbmcgInRfQ28iLiAoU3RldmUgV2FsbCkKKworV2hlbiBleGl0aW5nIHdpdGggIjp3cWFsbCIgdGhlIG1lc3NhZ2VzIGFib3V0IHdyaXRpbmcgZmlsZXMgY291bGQgb3ZlcndyaXRlCitlYWNoIG90aGVyIGFuZCBiZSBsb3N0IGZvcmV2ZXIuCisKK1doZW4gc3RhcnRpbmcgVmltIHdpdGggYW4gZXh0cmVtZWx5IGxvbmcgZmlsZSBuYW1lIChhcm91bmQgMTAyNCBjaGFyYWN0ZXJzKSBpdAord291bGQgY3Jhc2guICBBZGRlZCBhIGZldyBjaGVja3MgdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93cy4KKworQ1RSTC1FIGNvdWxkIGdldCBzdHVjayBpbiBhIGZpbGUgd2l0aCB2ZXJ5IGxvbmcgbGluZXMuCisKKyI6YXUgc3ludGF4PFRhYj4iIGV4cGFuZGVkIGV2ZW50IG5hbWVzIHdoaWxlIGl0IHNob3VsZCBleHBhbmQgZ3JvdXBzIHN0YXJ0aW5nCit3aXRoICJzeW50YXgiLgorCitXaGVuIGV4cGFuZGluZyBhIGZpbGUgbmFtZSBjYXVzZWQgYW4gZXJyb3IgKGUuZy4sIGZvciA8YW1hdGNoPikgaXQgd2FzCitwcm9kdWNlZCBldmVuIHdoZW4gaW5zaWRlIGFuICJpZiAwIi4KKworJ2NpbmRlbnQnIGZvcm1hdHRlZCBDIGNvbW1lbnRzIGRpZmZlcmVudGx5IGZyb20gd2hhdCB0aGUgJ2NvbW1lbnRzJyBvcHRpb24KK3NwZWNpZmllZC4gKFN0ZXZlIFdhbGwpCisKK0RlZmF1bHQgZm9yICdncmVwcHJnJyBkaWRuJ3QgaW5jbHVkZSB0aGUgZmlsZSBuYW1lIHdoZW4gb25seSBncmVwcGluZyBpbiBvbmUKK2ZpbGUuICBOb3cgL2Rldi9udWxsIGhhcyBiZWVuIGFkZGVkIGZvciBVbml4LgorCitPcGVuaW5nIHRoZSBvcHRpb24gd2luZG93IHR3aWNlIGNhdXNlZCB0cm91YmxlLiAgTm93IHRoZSBjdXJzb3IgZ29lcyB0byB0aGUKK2V4aXN0aW5nIG9wdGlvbiB3aW5kb3cuCisKKyI6c3ZpZXciIGFuZCAiOnZpZXciIGRpZG4ndCBzZXQgJ3JlYWRvbmx5JyBmb3IgYW4gZXhpc3RpbmcgYnVmZmVyLiAgTm93IGRvIHNldAorJ3JlYWRvbmx5JywgdW5sZXNzIHRoZSBidWZmZXIgaXMgYWxzbyBlZGl0ZWQgaW4gYW5vdGhlciB3aW5kb3cuCisKK0dUSyBHVUk6IFdoZW4gJ2d1aW9wdGlvbnMnIGV4Y2x1ZGVkICdnJywgdGhlIG1vcmUgcHJvbXB0IGNhdXNlZCB0aGUgdG9vbGJhcgorYW5kIG1lbnViYXIgdG8gZGlzYXBwZWFyIGFuZCByZXNpemUgdGhlIHdpbmRvdyAod2hpY2ggY2xlYXJzIHRoZSB0ZXh0KS4KK05vdyBhbHdheXMgZ3JleS1vdXQgdGhlIHRvcGxldmVsIG1lbnVzIHRvIGF2b2lkIHRoYXQgdGhlIG1lbnViYXIgY2hhbmdlcyBzaXplCitvciBkaXNhcHBlYXJzLgorCitXaGVuIHJlLXVzaW5nIHRoZSBjdXJyZW50IGJ1ZmZlciBmb3IgYSBuZXcgYnVmZmVyLCBidWZmZXItbG9jYWwgdmFyaWFibGVzIHdlcmUKK25vdCBkZWxldGVkLgorCitHVUk6IHdoZW4gJ3Njcm9sbG9mZicgaXMgMCBkcmFnZ2luZyB0aGUgbW91c2UgYWJvdmUgdGhlIHdpbmRvdyBkaWRuJ3QgY2F1c2UgYQorZG93biBzY3JvbGwuICBOb3cgcGFzcyBvbiBhIG1vdXNlIGV2ZW50IHdpdGggbW91c2Vfcm93IHNldCB0byAtMS4KKworV2luMzI6IENvbnNvbGUgdmVyc2lvbiBkaWRuJ3Qgd29yayBvbiB0ZWxuZXQsIGJlY2F1c2Ugb2Ygc3dpdGNoaW5nIGJldHdlZW4gdHdvCitjb25zb2xlIHNjcmVlbnMuICBOb3cgdXNlIG9uZSBjb25zb2xlIHNjcmVlbiBhbmQgc2F2ZS9yZXN0b3JlIHRoZSBjb250ZW50cword2hlbiBuZWVkZWQuICAoQ3JhaWcgQmFya2hvdXNlKQorCitXaGVuIHJlYWRpbmcgYSBmaWxlIHRoZSBtYWdpYyBudW1iZXIgZm9yIGVuY3J5cHRpb24gd2FzIGluY2x1ZGVkIGluIHRoZSBmaWxlCitsZW5ndGguIChBbnRvbmlvIENvbG9tYm8pCisKK1RoZSBxdWlja2ZpeCB3aW5kb3cgY29udGFpbmVkIGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgTlVMcyBmb3IgbXVsdGktbGluZQorbWVzc2FnZXMuIChEYXZpZCBIYXJyaXNvbikKKworV2hlbiB1c2luZyBjc2NvcGUsIHJlZHVuZGFudCB0YWdzIHdlcmUgcmVtb3ZlZC4gIFRoaXMgY2F1c2VkIGEgbnVtYmVyaW5nCitwcm9ibGVtLCBiZWNhdXNlIHRoZXkgd2VyZSBhbGwgbGlzdGVkLiAgRG9uJ3QgcmVtb3ZlIHJlZHVuZGFudCBjc2NvcGUgdGFncy4KKyhEYXZpZCBCdXN0b3MpLgorCitDc2NvcGU6IFRlc3QgZm9yIHdoaWNoIG1hdGNoZXMgYXJlIGluIHRoZSBjdXJyZW50IGJ1ZmZlciBzb21ldGltZXMgZmFpbGVkLAorY2F1c2luZyBhIGp1bXAgdG8gYW5vdGhlciBtYXRjaCB0aGFuIHNlbGVjdGVkLiAoRGF2aWQgQnVzdG9zKQorCitXaW4zMjogQnVmZmVyIG92ZXJmbG93IHdoZW4gYWRkaW5nIGEgY2hhcnNldCBuYW1lIGluIGEgZm9udC4KKworJ3RpdGxlc3RyaW5nJyBhbmQgJ2ljb25zdHJpbmcnIHdlcmUgZXZhbHVhdGluZyBhbiBleHByZXNzaW9uIGluIHRoZSBjdXJyZW50Citjb250ZXh0LCB3aGljaCBjb3VsZCBiZSBhIHVzZXIgZnVuY3Rpb24sIHdoaWNoIGlzIGEgcHJvYmxlbSBmb3IgbG9jYWwKK3ZhcmlhYmxlcyB2cyBnbG9iYWwgdmFyaWFibGVzLgorCitXaW4zMiBHVUk6IE1hcHBpbmcgPE0tRj4gZGlkbid0IHdvcmsuICBOb3cgaGFuZGxlIFNISUZUIGFuZCBDVFJMIGluCitfT25TeXNDaGFyKCkuCisKK1dpbjMyIEdVSTogKG9uIG5vIGZpbGUpLCA6dnM8Q1I+OnE8Q1I+IGxlZnQgYSB0cmFpbCBvZiBwaXhlbHMgZG93biB0aGUgbWlkZGxlLgorQ291bGQgYWxzbyBoYXBwZW4gZm9yIHRoZSBydWxlci4gIHNjcmVlbl9wdXRzKCkgZGlkbid0IGNsZWFyIHRoZSByaWdodCBjaGFyIGluCitTY3JlZW5MaW5lc1tdIGZvciB0aGUgYm9sZCB0cmljay4KKworV2luMzI6ICI6JSFzb3J0fHVuaXEiIGRpZG4ndCB3b3JrLCBiZWNhdXNlIHRoZSBpbnB1dCBmaWxlIG5hbWUgdG91Y2hlcyB0aGUKKyJ8Ii4gIEluc2VydCBhIHNwYWNlIGJlZm9yZSB0aGUgInwiLgorCitPUy8yOiBFeHBhbmRpbmcgd2lsZGNhcmRzIGluY2x1ZGVkIG5vbi1leGlzdGluZyBmaWxlcy4gIENhdXNlZCAiOnJ1bnRpbWUiIHRvCitmYWlsLCB3aGljaCBjYXVzZWQgc3ludGF4IGhpZ2hsaWdodGluZyB0byBmYWlsLgorCitQYXN0aW5nIGEgcmVnaXN0ZXIgY29udGFpbmluZyBDVFJMLVIgb24gdGhlIGNvbW1hbmQgbGluZSBjb3VsZCBjYXVzZSBhbgorZW5kbGVzcyBsb29wIHRoYXQgY2FuJ3QgYmUgaW50ZXJydXB0ZWQuICBOb3cgaXQgY2FuIGJlIHN0b3BwZWQgd2l0aCBDVFJMLUMuCisKK1doZW4gJ3ZlcmJvc2UnIGlzIHNldCwgYSBtZXNzYWdlIGZvciBmaWxlIHJlYWQvd3JpdGUgY291bGQgb3ZlcndyaXRlIHRoZQorcHJldmlvdXMgbWVzc2FnZS4KK1doZW4gJ3ZlcmJvc2UnIGlzIHNldCwgdGhlIGhlYWRlciBmcm9tICI6c2VsZWN0IiB3YXMgcHV0IGFmdGVyIHRoZSBsYXN0CittZXNzYWdlLiAgTm93IHN0YXJ0IGEgbmV3IGxpbmUuCisKK1RoZSBoaXQtZW50ZXIgcHJvbXB0IHJlYWN0ZWQgdG8gdGhlIHJlc3BvbnNlIG9mIHRoZSB0X1JWIHN0cmluZywgY2F1c2luZworbWVzc2FnZXMgYXQgc3RhcnR1cCB0byBkaXNhcHBlYXIuCisKK1doZW4gdF9DbyB3YXMgc2V0IHRvIDEsIGNvbG9ycyB3ZXJlIHN0aWxsIHVzZWQuICBOb3cgb25seSB1c2UgY29sb3Igd2hlbiB0X0NvCis+IDEuCisKK0xpc3RpbmcgZnVuY3Rpb25zIHdpdGggIjpmdW5jdGlvbiIgZGlkbid0IHF1aXQgd2hlbiAncScgb3IgJzonIHdhcyB0eXBlZCBhdAordGhlIG1vcmUgcHJvbXB0LgorCitVc2UgbWtzdGVtcCgpIGluc3RlYWQgb2YgbWt0ZW1wKCkgd2hlbiBpdCdzIGF2YWlsYWJsZSwgYXZvaWRzIGEgd2FybmluZyBmb3IKK2xpbmtpbmcgb24gRnJlZUJTRC4KKworV2hlbiBkb2luZyBJbnNlcnQgbW9kZSBjb21wbGV0aW9uIGl0J3MgcG9zc2libGUgdGhhdCBiX3NmbmFtZSBpcyBOVUxMLiAgRG9uJ3QKK2dpdmUgaXQgdG8gcHJpbnRmKCkgZm9yIHRoZSAiU2Nhbm5pbmciIG1lc3NhZ2UuCisKKyI6c2V0IHJ1bnRpbWVwYXRoLT0kVklNUlVOVElNRSIgZGlkbid0IHdvcmssIGJlY2F1c2UgZXhwYW5zaW9uIG9mIHdpbGRjYXJkcword2FzIGRvbmUgYWZ0ZXIgdHJ5aW5nIHRvIHJlbW92ZSB0aGUgc3RyaW5nLiAgTm93IGZvciAiOnNldCBvcHQrPXZhbCIgYW5kICI6c2V0CitvcHQtPXZhbCIgdGhlIGV4cGFuc2lvbiBvZiB3aWxkY2FyZHMgaXMgZG9uZSBiZWZvcmUgYWRkaW5nIG9yIHJlbW92aW5nICJ2YWwiLgorCitVc2luZyBDVFJMLVYgd2l0aCB0aGUgInIiIGNvbW1hbmQgd2l0aCBhIGJsb2Nrd2lzZSBWaXN1YWwgc2VsZWN0aW9uIGluc2VydGVkIGEKK0NUUkwtViBpbnN0ZWFkIG9mIGdldHRpbmcgYSBzcGVjaWFsIGNoYXJhY3Rlci4KKworVW5peDogQ2hhbmdlZCB0aGUgb3JkZXIgb2YgbGlicmFyaWVzOiBQdXQgLWxYZG1jcCBhZnRlciAtbFgxMSBhbmQgLWxTTSAtbElDRQorYWZ0ZXIgLWxYZG1jcC4gIFNob3VsZCBmaXggbGluayBwcm9ibGVtIG9uIEhQLVVYIDEwLjIwLgorCitEb24ndCByZW1vdmUgdGhlIGxhc3QgIi1sbSIgZnJvbSB0aGUgbGluayBsaW5lLiAgVmltIG1heSBsaW5rIGJ1dCBmYWlsIGxhdGVyCit3aGVuIHRoZSBHVUkgc3RhcnRzLgorCitXaGVuIHRoZSBzaGVsbCByZXR1cm5zIHdpdGggYW4gZXJyb3Igd2hlbiB0cnlpbmcgdG8gZXhwYW5kIHdpbGRjYXJkcywgZG8KK2luY2x1ZGUgdGhlIHBhdHRlcm4gd2hlbiB0aGUgIkVXX05PVEZPVU5EIiBmbGFnIHdhcyBzZXQuCitXaGVuIGV4cGFuZGluZyB3aWxkY2FyZHMgd2l0aCB0aGUgc2hlbGwgZmFpbHMsIGdpdmUgYSBjbGVhciBlcnJvciBtZXNzYWdlCitpbnN0ZWFkIG9mIGp1c3QgIjEgcmV0dXJuZWQiLgorCitTZWxlY3RpbmcgYSBWaXN1YWwgYmxvY2ssIHdpdGggdGhlIHN0YXJ0IHBhcnRseSBvbiBhIFRhYiwgZGVsZXRpbmcgaXQgbGVhdmVzCit0aGUgY3Vyc29yIHRvbyBmYXIgdG8gdGhlIGxlZnQuICBDYXVzZXMgInMiIHRvIHdvcmsgaW4gdGhlIHdyb25nIHBvc2l0aW9uLgorCitQb3VuZCBzaWduIGluIG5vcm1hbC5jIGNhdXNlZCB0cm91YmxlIG9uIHNvbWUgY29tcGlsZXJzLiAgVXNlIDB4QTMgaW5zdGVhZC4KKworV2FybmluZyBmb3IgY2hhbmdpbmcgYSByZWFkLW9ubHkgZmlsZSB3YXNuJ3QgZ2l2ZW4gd2hlbiAnaW5zZXJ0bW9kZScgd2FzIHNldC4KKworV2luMzI6IFdoZW4gJ3NoZWxseHF1b3RlJyBpcyBzZXQgdG8gYSBkb3VibGUgcXVvdGUgKGUuZy4sIHVzaW5nIGNzaCksICI6IXN0YXJ0Citub3RlcGFkIGZpbGUiIGRvZXNuJ3Qgd29yay4gIFJlbW92ZSB0aGUgZG91YmxlIHF1b3RlcyBhZGRlZCBieSAnc2hlbGx4cXVvdGUnCit3aGVuIHVzaW5nICI6IXN0YXJ0Ii4gKFBhdm9sIEp1aGFzKQorCitUaGUgIjxmLWFyZ3M+IiBhcmd1bWVudCBvZiAiOmNvbW1hbmQiIGRpZG4ndCBhY2NlcHQgVGFicyBmb3Igd2hpdGUgc3BhY2UuCitBbHNvLCBkb24ndCBhZGQgYW4gZW1wdHkgYXJndW1lbnQgd2hlbiB0aGVyZSBhcmUgdHJhaWxpbmcgYmxhbmtzLgorCisiOmUgdGVzdFxcamUiIGVkaXRlZCAidGVzdFxqZSIsIGJ1dCAiOm5leHQgdGVzdFxcamUiIGVkaXRlZCAidGVzdGplIi4KK0JhY2tzbGFzaGVzIHdlcmUgcmVtb3ZlZCBvbmUgdGltZSB0b28gbWFueSBmb3IgIjpuZXh0Ii4KKworVk1TOiAiZ2YiIGRpZG4ndCB3b3JrIHByb3Blcmx5LiAgVXNlIHZtc19maXhmaWxlbmFtZSgpIHRvIHRyYW5zbGF0ZSB0aGUgZmlsZQorbmFtZS4gKFpvbHRhbiBBcnBhZGZmeSkKKworQWZ0ZXIgIjpoaSBOb3JtYWwgY3Rlcm1iZz1ibGFjayBjdGVybWZnPXdoaXRlIiBhbmQgc3VzcGVuZGluZyBWaW0gbm90IGFsbAorY2hhcmFjdGVycyBhcmUgcmVkcmF3biB3aXRoIHRoZSByaWdodCBiYWNrZ3JvdW5kLgorCitXaGVuIGRvaW5nICJtYWtlIHRlc3QiIHdpdGhvdXQgK2V2YWwgb3IgK3dpbmRvd3MgZmVhdHVyZSwgbWFueSB0ZXN0cyBmYWlsZWQuCitOb3cgaGF2ZSB0ZXN0MSBnZW5lcmF0ZSBhIHNjcmlwdCB0byBjb3B5IHRoZSBjb3JyZWN0IG91dHB1dCwgc28gdGhhdCBhIHRlc3QKK3RoYXQgZG9lc24ndCB3b3JrIGlzIHNraXBwZWQuCisKK09uIEZyZWVCU0QgdGhlIFBlcmwgaW50ZXJmYWNlIGFkZGVkICItbGMiIHRvIHRoZSBsaW5rIGNvbW1hbmQgYW5kIFB5dGhvbiBhZGRlZAorIi1wdGhyZWFkIi4gIFRoZXNlIHR3byBkb24ndCB3b3JrIHRvZ2V0aGVyLCBiZWNhdXNlIHRoZSBsaWJjX3IgbGlicmFyeSBzaG91bGQKK2JlIHVzZWQuICBSZW1vdmVkICItbGMiIGZyb20gUGVybCwgaXQgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCitBbHNvOiBBZGQgIi1wdGhyZWFkIiB0byAkTElCUywgc28gdGhhdCB0aGUgY2hlY2tzIGZvciBmdW5jdGlvbnMgaXMgZG9uZSB3aXRoCitsaWJjX3IuICBTaWdhbHRzdGFjaygpIGFwcGVhcnMgdG8gYmUgbWlzc2luZyBmcm9tIGxpYmNfci4KKworVGhlIFN5bnRheCBzdWItbWVudXMgd2VyZSBnZXR0aW5nIHRvbyBsb25nLCByZW9yZ2FuaXplZCB0aGVtIGFuZCBhZGRlZCBhbm90aGVyCitsZXZlbCBmb3Igc29tZSBsYW5ndWFnZXMuCisKK1Zpc3VhbCBibG9jayAiciJlcGxhY2UgZGlkbid0IHdvcmsgd2VsbCB3aGVuIGEgVGFiIGlzIHBhcnRseSBpbmNsdWRlZC4KKyhNYXR0aGlhcyBLcmFtbSkKKworV2hlbiB5YW5raW5nIGEgVmlzdWFsIGJsb2NrLCB3aGVyZSBzb21lIGxpbmVzIGVuZCBoYWxmd2F5IHRoZSBibG9jaywgcHV0dGluZwordGhlIHRleHQgc29tZXdoZXJlIGVsc2UgZG9lc24ndCBpbnNlcnQgYSBibG9jay4gIFBhZGQgd2l0aCBzcGFjZXMgZm9yIG1pc3NpbmcKK2NoYXJhY3RlcnMuICBBZGRlZCAieV93aWR0aCIgdG8gc3RydWN0IHlhbmtyZWcuIChNYXR0aGlhcyBLcmFtbSkKKworSWYgYSBzdWJzdGl0dXRlIHN0cmluZyBoYXMgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGFmdGVyIGEgYmFja3NsYXNoIG9ubHkgdGhlCitmaXJzdCBieXRlIG9mIGl0IHdhcyBza2lwcGVkLiAoTXVyYW9rYSBUYXJvKQorCitXaW4zMjogTnVtZXJpYyBrZXlwYWQga2V5cyB3ZXJlIG1pc3NpbmcgZnJvbSB0aGUgYnVpbHRpbiB0ZXJtY2FwIGVudHJ5LgorCitXaGVuIGEgZmlsZSB3YXMgcmVhZC1vbmx5ICI6d2EhIiBkaWRuJ3QgZm9yY2UgaXQgdG8gYmUgd3JpdHRlbi4gKFZpbmNlIE5lZ3JpKQorCitBbWlnYTogQSBmaWxlIG5hbWUgc3RhcnRpbmcgd2l0aCBhIGNvbG9uIHdhcyBjb25zaWRlcmVkIGFic29sdXRlIGJ1dCBpdCBpc24ndC4KK0FtaWdhOiAiOnB3ZCIgYWRkZWQgYSBzbGFzaCB3aGVuIGluIHRoZSByb290IG9mIGEgZHJpdmUuCisKK0Rvbid0IGxldCAndHR5bW91c2UnIGRlZmF1bHQgdG8gImRlYyIgd2hlbiBjb21waWxlZCB3aXRoIGRlYyBtb3VzZSBzdXBwb3J0LgorSXQgYnJlYWtzIHRoZSBncG0gbW91c2UgKExpbnV4IGNvbnNvbGUpLgorCitUaGUgcHJvdG90eXBlcyBmb3IgdGhlIFBlcmwgaW50ZXJmYWNlIGRpZG4ndCB3b3JrIGZvciB0aHJlYWRlZCBQZXJsLiAgQWRkZWQgYQorc2VkIGNvbW1hbmQgdG8gcmVtb3ZlIHRoZSBwcm90b3R5cGVzIGZyb20gcHJvdG8vaWZfcGVybC5wcm8gYW5kIGFkZGVkIHRoZW0KK21hbnVhbGx5IHRvIGlmX3BlcmwueHMuCisKK1doZW4gIjp3ISIgcmVzZXRzIHRoZSAncmVhZG9ubHknIG9wdGlvbiB0aGUgdGl0bGUgYW5kIHN0YXR1cyBsaW5lcyB3ZXJlIG5vdAordXBkYXRlZC4KKworIjphcmdzIiBzaG93ZWQgdGhlIGN1cnJlbnQgZmlsZSB3aGVuIHRoZSBhcmd1bWVudCBsaXN0IHdhcyBlbXB0eS4gIE1hZGUgdGhpcword29yayBsaWtlIFZpOiBkaXNwbGF5IG5vdGhpbmcuCisKKyI5OTo8Qy1VPmVjaG8gdjpjb3VudCIgZWNob2VkICI5OSIgaW4gTm9ybWFsIG1vZGUsIGJ1dCAwIGluIFZpc3VhbCBtb2RlLgorRG9uJ3Qgc2V0IHY6Y291bnQgd2hlbiBleGVjdXRpbmcgYSBzdHVmZmVkIGNvbW1hbmQuCisKK0FtaWdhOiBHb3QgYSByZXF1ZXN0ZXIgZm9yICJob21lOiIgYmVjYXVzZSBpdCdzIGluIHRoZSBkZWZhdWx0IHJ1bnRpbWUgcGF0aC4KK0Rvbid0IGJyaW5nIHVwIGEgcmVxdWVzdGVyIHdoZW4gc2VhcmNoaW5nIGZvciBhIGZpbGUgaW4gJ3BhdGgnLCBzb3VyY2luZyB0aGUKKy52aW1yYyBmaWxlIG9yIHVzaW5nICI6cnVudGltZSIuCisKK1dpbjE2IGFuZCBXaW4zMjogQ29uc2lkZXJlZCBhIGZpbGUgIlxwYXRoXGZpbGUiIGFic29sdXRlLiAgQ2FuIGNhdXNlIHRoZSBzYW1lCitmaWxlIHRvIGFwcGVhciBhcyB0d28gZGlmZmVyZW50IGJ1ZmZlcnMuCisKK1dpbjMyOiBSZW5hbWluZyBhIGZpbGUgdG8gYW4gZW1wdHkgc3RyaW5nIGNyYXNoZWQgVmltLiAgSGFwcGVuZWQgd2hlbiB1c2luZworZXhwbG9yZXIudmltIGFuZCBoaXR0aW5nIEVTQyBhdCB0aGUgcmVuYW1lIHByb21wdC4KKworV2luMzI6IHN0cmZ0aW1lKCkgY3Jhc2hlZCB3aGVuIGNhbGxlZCB3aXRoIGEgIi0xIiB2YWx1ZSBmb3IgdGhlIHRpbWUuCisKK1dpbjMyIHdpdGggQm9ybGFuZCBjb21waWxlcjogbWNoX0Z1bGxOYW1lKCkgZGlkbid0IHdvcmssIGNhdXNlZCB0YWcgZmlsZSBub3QKK3RvIGJlIGZvdW5kLgorCitDc2NvcGUgc29tZXRpbWVzIGp1bXBlZCB0byB0aGUgd3JvbmcgdGFnLiAoRGF2aWQgQnVzdG9zKQorCitPUy8yOiBDb3VsZCBub3QgZmluZCB0aGUgdGFncyBmaWxlLiAgbWNoX2V4cGFuZF93aWxkY2FyZHMoKSBhZGRlZCBhbm90aGVyCitzbGFzaCB0byBhIGRpcmVjdG9yeSBuYW1lLgorCitXaGVuIHVzaW5nICI+PiIgdGhlIGBdIG1hcmsgd2FzIG5vdCBpbiB0aGUgbGFzdCBjb2x1bW4uCisKK1doZW4gVmltIHdhcyBjb21waWxlZCB3aXRob3V0IG1lbnUgc3VwcG9ydCwgZmlsZXR5cGUudmltIHdhcyBzdGlsbCB0cnlpbmcgdG8KK3NvdXJjZSB0aGUgbWVudS52aW0gc2NyaXB0LiAoUmFmYWVsIEdhcmNpYS1TdWFyZXopCisKKyI6cHRhZyIgYWRkZWQgYW4gaXRlbSB0byB0aGUgdGFnIHN0YWNrLgorCitXaW4zMiBJTUU6ICJnciIgZGlkbid0IHVzZSBJTUUgbW9kZS4KKworSW4gdGhlICJ2aW0gLS1oZWxwIiBtZXNzYWdlIHRoZSB0ZXJtICJvcHRpb25zIiB3YXMgdXNlZCBmb3IgYXJndW1lbnRzLiAgVGhhdCdzCitjb25mdXNpbmcsIGNhbGwgdGhlbSAiYXJndW1lbnRzIi4KKworV2hlbiB0aGVyZSBhcmUgdHdvIHdpbmRvd3MsIGFuZCBhIEJ1ZlVubG9hZCBhdXRvY29tbWFuZCBmb3IgY2xvc2luZyB3aW5kb3cgIzEKK2Nsb3NlZCB3aW5kb3cgIzIsIFZpbSB3b3VsZCBjcmFzaC4KKworV2hlbiB0aGVyZSBpcyBhIHByZXZpZXcgd2luZG93IGFuZCBvbmx5IG9uZSBvdGhlciB3aW5kb3csICI6cSIgd291bGRuJ3QgZXhpdC4KKworSW4gSW5zZXJ0IG1vZGUsIHdoZW4gY2FuY2VsbGluZyBhIGRpZ3JhcGggd2l0aCBFU0MsIHRoZSAnPycgd2Fzbid0IHJlbW92ZWQuCisKK09uIFVuaXggZ2xvYigiLioiKSByZXR1cm5lZCAiLiIgYW5kICIuLiIsIG9uIFdpbmRvd3MgaXQgZGlkbid0LiAgT24gV2luZG93cworZ2xvYigiKiIpIGFsc28gcmV0dXJuZWQgZmlsZXMgc3RhcnRpbmcgd2l0aCBhIGRvdC4gIE1hZGUgdGhpcyB3b3JrIGxpa2UgVW5peAorb24gYWxsIHN5c3RlbXMuCisKK1dpbjMyOiBSZW1vdmVkIG9sZCBjb2RlIHRvIG9wZW4gYSBjb25zb2xlLiAgVmltcnVuIGlzIG5vdyB1c2VkIGFuZCB3b3JrcyBmaW5lLgorCitDb21wdXRlIHRoZSByb29tIG5lZWRlZCBieSB0aGUgaW50cm8gbWVzc2FnZSBhY2N1cmF0ZWx5LCBzbyB0aGF0IGl0IGFsc28gZml0cworb24gYSAyNSBsaW5lIGNvbnNvbGUuIChDcmFpZyBCYXJraG91c2UpCisKKyI6cHRuZXh0IiB3YXMgYnJva2VuLiAgTm93IHJlbWVtYmVyIHRoZSBsYXN0IHRhZyB1c2VkIGluIHRoZSBwcmV2aWV3IHdpbmRvdworc2VwYXJhdGVseSBmcm9tIHRoZSB0YWdzdGFjay4KKworRGlkbid0IGNoZWNrIGZvciAiLWRpc3BsYXkiIGJlaW5nIHRoZSBsYXN0IGFyZ3VtZW50LiAoV2ljaGVydCBBa2tlcm1hbikKKworR1RLIEdVSTogV2hlbiBzdGFydGluZyAiZ3ZpbSIgdW5kZXIgc29tZSBjb25kaXRpb25zIHRoZXJlIHdvdWxkIGJlIGFuIFggZXJyb3IuCitEb24ndCByZXBsYWNlIHRoZSBlcnJvciBoYW5kbGVyIHdoZW4gY3JlYXRpbmcgdGhlIHh0ZXJtIGNsaXBib2FyZC4gKFdpY2hlcnQKK0Fra2VybWFuKQorCitBZGRpbmcgYSBzcGFjZSBhZnRlciBhIGhlbHAgdGFnIGNhdXNlZCB0aGUgdGFnIG5vdCB0byBiZSBmb3VuZC4gIEUuZy4sICI6aGUKK2F1dG9pbmRlbnQgIi4KKworV2FzIHRyeWluZyB0byBleHBhbmQgYSBVUkwgaW50byBhIGZ1bGwgcGF0aCBuYW1lLiAgT24gV2luZG93cyB0aGlzIHJlc3VsdGVkIGluCit0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gYmUgcHJlcGVuZGVkIHRvIHRoZSBVUkwuICBBZGRlZCB2aW1faXNBYnNOYW1lKCkgYW5kCit2aW1fRnVsbE5hbWUoKSB0byBhdm9pZCB0aGF0IHZhcmlvdXMgbWFjaGluZSBzcGVjaWZpYyBmdW5jdGlvbnMgZG8gaXQKK2RpZmZlcmVudGx5LgorCisiOm4gKi5jIiAiOmNkIC4uIiAiOm4iIGRpZG4ndCB1c2UgdGhlIG9yaWdpbmFsIGRpcmVjdG9yeSBvZiB0aGUgZmlsZS4gIFZpIG9ubHkKK2RvZXMgaXQgZm9yIHRoZSBjdXJyZW50IGZpbGUgKGxvb2tzIGxpa2UgYSBidWcpLiAgTm93IHJlbWVtYmVyIHRoZSBidWZmZXIgdXNlZAorZm9yIHRoZSBlbnRyeSBpbiB0aGUgYXJndW1lbnQgbGlzdCBhbmQgdXNlIGl0J3MgbmFtZSAoYWRqdXN0ZWQgd2hlbiBkb2luZworIjpjZCIpLCB1bmxlc3MgaXQncyBkZWxldGVkLgorCitXaGVuIGluc2VydGluZyBhIHNwZWNpYWwga2V5IGFzIGl0cyBuYW1lICgiPEY4PiIgYXMgZm91ciBjaGFyYWN0ZXJzKSBhZnRlcgorbW92aW5nIGFyb3VuZCBpbiBJbnNlcnQgbW9kZSwgdW5kbyBkaWRuJ3Qgd29yayBwcm9wZXJseS4KKworTW90aWYgR1VJOiBXaGVuIHVzaW5nIHRoZSByaWdodCBtb3VzZSBidXR0b24sIGZvciBzb21lIHBlb3BsZSBndmltIGZyb3plIGZvcgorYSBjb3VwbGUgb2Ygc2Vjb25kcyAoTW90aWYgMS4yPykuICBUaGlzIGRvZXNuJ3QgaGFwcGVuIHdoZW4gdGhlcmUgaXMgbm8gUG9wdXAKK21lbnUuICBTb2x2ZWQgYnkgb25seSBjcmVhdGluZyBhIHBvcHVwIG1lbnUgd2hlbiAnbW91c2Vtb2RlbCcgaXMgInBvcHVwIiBvcgorInBvcHVwX3NldHBvcyIuIChEYXZpZCBIYXJyaXNvbikKKworTW90aWY6IFdoZW4gYWRkaW5nIG1hbnkgbWVudSBpdGVtcywgdGhlICJIZWxwIiBtZW51IGRpc2FwcGVhcmVkIGJ1dCB0aGUKK21lbnViYXIgZGlkbid0IHdyYXAuICBOb3cgbWFudWFsbHkgc2V0IHRoZSBtZW51YmFyIGhlaWdodC4KKworV2hlbiB1c2luZyA8QlM+IGluIEluc2VydCBtb2RlIHRvIHJlbW92ZSBhIGxpbmUgYnJlYWssIG9yIHVzaW5nICJKIiB0byBqb2luCitsaW5lcywgdGhlIGN1cnNvciBjb3VsZCBlbmQgdXAgaGFsZndheSBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiAoTXVyYW9rYSBUYXJvKQorCitSZW1vdmVkIGRlZmluaW5nIFNWUjQgaW4gY29uZmlndXJlLiAgSXQgY2F1c2VzIHByb2JsZW1zIGZvciBzb21lIFggaGVhZGVyCitmaWxlcyBhbmQgZG9lc24ndCBhcHBlYXIgdG8gYmUgdXNlZCBhbnl3aGVyZS4KKworV2hlbiAnd2lsZGlnbm9yZScgaXMgdXNlZCwgJ2lnbm9yZWNhc2UnIGZvciBhIHRhZyBtYXRjaCB3YXMgbm90IHdvcmtpbmcuCisKK1doZW4gJ3dpbGRpZ25vcmUnIGNvbnRhaW5zICIqfiIgaXQgd2FzIGltcG9zc2libGUgdG8gZWRpdCBhIGZpbGUgZW5kaW5nIGluIGEKKyJ+Ii4gIE5vdyBkb24ndCByZWNvZ25pemUgYSBmaWxlIGVuZGluZyBpbiAifiIgYXMgY29udGFpbmluZyB3aWxkY2FyZHMuCisKK0Rpc2FibGVkIHRoZSBtb3VzZSBjb2RlIGZvciBPUy8yLiAgSXQgd2FzIG5vdCByZWFsbHkgdXNlZC4KKworIjpta3Nlc3Npb24iIGFsd2F5cyB1c2VkIHRoZSBmdWxsIHBhdGggbmFtZSBmb3IgYSBidWZmZXIsIGFsc28gd2hlbiB0aGUgc2hvcnQKK25hbWUgY291bGQgYmUgdXNlZC4KKyI6bWt2aW1yYyIgYW5kICI6bWtzZXNzaW9uIiBkaWRuJ3Qgc2F2ZSAnd2lsZGNoYXInIGFuZCAncGFzdGV0b2dnbGUnIGluIHN1Y2ggYQord2F5IHRoYXQgdGhleSB3b3VsZCBiZSByZXN0b3JlZC4gIE5vdyB1c2UgdGhlIGtleSBuYW1lIGlmIHBvc3NpYmxlLCB0aGlzIGlzCitwb3J0YWJsZS4KKworQWZ0ZXIgcmVjb3ZlcmluZyBhIGZpbGUgYW5kIGFiYW5kb25pbmcgaXQsIGFuICI6ZWRpdCIgY29tbWFuZCBkaWRuJ3QgZ2l2ZSB0aGUKK0FUVEVOVElPTiBwcm9tcHQgYWdhaW4uICBXb3VsZCBiZSB1c2VmdWwgdG8gYmUgYWJsZSB0byBkZWxldGUgdGhlIGZpbGUgaW4gYW4KK2Vhc3kgd2F5LiAgUmVzZXQgdGhlIEJGX1JFQ09WRVJFRCBmbGFnIHdoZW4gdW5sb2FkaW5nIHRoZSBidWZmZXIuCisKK2hpc3RkZWwoKSBjb3VsZCBtYXRjaCBvciBpZ25vcmUgY2FzZSwgZGVwZW5kaW5nIG9uIHdoYXQgaGFwcGVuZWQgYmVmb3JlIGl0LgorTm93IGFsd2F5cyBtYXRjaCBjYXNlLgorCitXaGVuIGEgd2luZG93IHNpemUgd2FzIHNwZWNpZmllZCB3aGVuIHNwbGl0dGluZyBhIHdpbmRvdywgaXQgd291bGQgc3RpbGwgZ2V0Cit0aGUgc2l6ZSBmcm9tICd3aW5oZWlnaHQnIG9yICd3aW53aWR0aCcgaWYgaXQncyBsYXJnZXIuCisKK1doZW4gdXNpbmcgImFwcGVuZCIgb3IgImluc2VydCIgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgYSBsaW5lIHN0YXJ0aW5nCit3aXRoICJmdW5jdGlvbiIgb3IgImVuZGZ1bmN0aW9uIiBjYXVzZWQgY29uZnVzaW9uLiAgTm93IHJlY29nbml6ZSB0aGUgY29tbWFuZHMKK2FuZCBza2lwIGxpbmVzIHVudGlsIGEgIi4iLgorCitBdCB0aGUgZW5kIG9mIGFueSBmdW5jdGlvbiBvciBzb3VyY2VkIGZpbGUgbmVlZF93YWl0X3JldHVybiBjb3VsZCBiZSByZXNldCwKK2NhdXNpbmcgbWVzc2FnZXMgdG8gZGlzYXBwZWFyIHdoZW4gcmVkcmF3aW5nLgorCitXaGVuIGluIGEgd2hpbGUgbG9vcCB0aGUgbGluZSBudW1iZXIgZm9yIGVycm9yIG1lc3NhZ2VzIHN0YXllZCBmaXhlZC4gIE5vdyB0aGUKK2xpbmUgbnVtYmVyIGlzIHJlbWVtYmVyZWQgaW4gdGhlIHdoaWxlIGxvb3AuCisKKyJjZCBjOi8iIGRpZG4ndCB3b3JrIG9uIE1TLURPUy4gIG1jaF9pc2RpcigpIHJlbW92ZWQgYSB0cmFpbGluZyBzbGFzaC4KKworTVMtV2luZG93czogZ2V0ZnRpbWUoKSBkaWRuJ3Qgd29yayB3aGVuIGEgZGlyZWN0b3J5IGhhZCBhIHRyYWlsaW5nIHNsYXNoIG9yCitiYWNrc2xhc2guICBEaWRuJ3Qgc2hvdyB0aGUgdGltZSBpbiB0aGUgZXhwbG9yZXIgYmVjYXVzZSBvZiB0aGlzLgorCitXaGVuIGRvaW5nIHdpbGRjYXJkIGNvbXBsZXRpb24sIGEgZGlyZWN0b3J5ICJhLyIgc29ydGVkIGFmdGVyICJhLWIiLiAgTm93CityZWNvZ25pemUgcGF0aCBzZXBhcmF0b3JzIHdoZW4gc29ydGluZyBmaWxlcy4KKworTm9uLVVuaXggc3lzdGVtczogV2hlbiBlZGl0aW5nICJjOi9kaXIvLi4vZmlsZSIgYW5kICJjOi9maWxlIiB0aGV5IHdlcmUKK2NyZWF0ZWQgYXMgZGlmZmVyZW50IGJ1ZmZlcnMsIGFsdGhvdWdoIGl0J3MgdGhlIHNhbWUgZmlsZS4gIEV4cGFuZCB0byBhIGZ1bGwKK2ZpbGUgbmFtZSBhbHNvIHdoZW4gYW4gYWJzb2x1dGUgbmFtZSBjb250YWlucyAiLi4iLgorCisiZyYiIGRpZG4ndCByZXBlYXQgdGhlIGxhc3Qgc3Vic3RpdHV0ZSBwcm9wZXJseS4KKworV2hlbiAnY2xpcGJvYXJkJyB3YXMgc2V0IHRvICJ1bm5hbWVkIiwgYSAiWSIgY29tbWFuZCB3b3VsZCBub3Qgd3JpdGUgdG8gIjAuCitOb3cgbWFrZSBhIGNvcHkgb2YgcmVnaXN0ZXIgMCB0byB0aGUgY2xpcGJvYXJkIHJlZ2lzdGVyLgorCitXaGVuIHRoZSBzZWFyY2ggcGF0dGVybiBtYXRjaGVzIGluIG1hbnkgd2F5cywgaXQgY291bGQgbm90IGFsd2F5cyBiZQoraW50ZXJydXB0ZWQgd2l0aCBhIENUUkwtQy4gIEFuZCBDVFJMLUMgd291bGQgaGF2ZSB0byBiZSBoaXQgb25jZSBmb3IgZXZlcnkKK2xpbmUgd2hlbiAnaGxzZWFyY2gnIGlzIG9uLgorV2hlbiAnaW5jc2VhcmNoJyBpcyBvbiBhbmQgaW50ZXJydXB0aW5nIHRoZSBzZWFyY2ggZm9yIGEgbWF0Y2gsIGRvbid0IGFiYW5kb24KK3RoZSBjb21tYW5kIGxpbmUuCisKK1doZW4gdHVybmluZyBhIGRpcmVjdG9yeSBuYW1lIGludG8gYSBmdWxsIHBhdGgsIGUuZy4sIHdpdGggZm5hbWVtb2RpZnkoKSwKK3NvbWV0aW1lcyBhIHNsYXNoIHdhcyBhZGRlZC4gIE1ha2UgdGhpcyBjb25zaXN0ZW50OiBEb24ndCBhZGQgYSBzbGFzaC4KKworV2hlbiBhIGZpbGUgbmFtZSBjb250YWlucyBhICIhIiwgdXNpbmcgaXQgaW4gYSBzaGVsbCBjb21tYW5kIHdpbGwgY2F1c2UKK3Ryb3VibGU6ICI6IWNhdCAlIi4gIEVzY2FwZSB0aGUgIiEiIHRvIGF2b2lkIHRoYXQuICBFc2NhcGUgaXQgYW5vdGhlciB0aW1lCit3aGVuICdzaGVsbCcgY29udGFpbnMgInNoIi4KKworQ29tcGxldGluZyBhIGZpbGUgbmFtZSB0aGF0IGhhcyBhIHRhaWwgdGhhdCBzdGFydHMgd2l0aCBhICJ+IiBkaWRuJ3Qgd29yazoKKyI6ZSB2aWV3L348VGFiPiIuCisKK1VzaW5nIGEgIjpjb21tYW5kIiBhcmd1bWVudCB0aGF0IGNvbnRhaW5zIDwgYW5kID4gYnV0IG5vdCBmb3IgYSBzcGVjaWFsCithcmd1bWVudCB3YXMgbm90IHNraXBwZWQgcHJvcGVybHkuCisKK1RoZSBET1MgaW5zdGFsbCBwcm9ncmFtOiBPbiBXaW4yMDAwIHRoZSBjaGVjayBmb3IgYSB2aW0uZXhlIG9yIGd2aW0uZXhlIGluCiskUEFUSCBkaWRuJ3Qgd29yaywgaXQgYWx3YXlzIGZvdW5kIGl0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KK1JlbmFtZSB0aGUgdmltLmV4ZSBpbiB0aGUgY3VycmVudCBkaXIgdG8gYXZvaWQgdGhpcy4gKFdhbHRlciBCcmlzY29lKQorCitJbiB0aGUgTVMtRE9TL1dpbmRvd3MgaW5zdGFsbCBwcm9ncmFtLCB1c2UgJVZJTSUgaW5zdGVhZCBvZiBhbiBhYnNvbHV0ZSBwYXRoLAorc28gdGhhdCBtb3ZpbmcgVmltIHJlcXVpcmVzIG9ubHkgb25lIGNoYW5nZSBpbiB0aGUgYmF0Y2ggZmlsZS4KKworTWFjOiBtY2hfRnVsbE5hbWUoKSBjaGFuZ2VkIHRoZSAiZm5hbWUiIGFyZ3VtZW50IGFuZCBkaWRuJ3QgYWx3YXlzIGluaXRpYWxpemUKK3RoZSBidWZmZXIuCisKK01TLURPUzogbWNoX0Z1bGxOYW1lKCkgZGlkbid0IGZpeCBmb3J3YXJkL2JhY2t3YXJkIHNsYXNoZXMgaW4gYW4gYWJzb2x1dGUgZmlsZQorbmFtZS4KKworImVjaG8gZXhwYW5kKCIlOnA6aCIpIiB3aXRoIGFuIGVtcHR5IGZpbGUgbmFtZSByZW1vdmVkIG9uZSBkaXJlY3RvcnkgbmFtZSBvbgorTVMtRE9TLiAgRm9yIFVuaXgsIHdoZW4gdGhlIGZpbGUgbmFtZSBpcyBhIGRpcmVjdG9yeSwgdGhlIGRpcmVjdG9yeSBuYW1lIHdhcworcmVtb3ZlZC4gIE5vdyBtYWtlIGl0IGNvbnNpc3RlbnQ6ICIlOnAiIGFkZHMgYSBwYXRoIHNlcGFyYXRvciBmb3IgYWxsIHN5c3RlbXMsCitidXQgbm8gcGF0aCBzZXBhcmF0b3IgaXMgYWRkZWQgaW4gb3RoZXIgc2l0dWF0aW9ucy4KKworVW5peDogV2hlbiBjaGVja2luZyBmb3IgYSBDVFJMLUMgKGNvdWxkIGhhcHBlbiBhbnkgdGltZSkgYW5kIHRoZXJlIGlzIGFuIFgKK2V2ZW50IChlLmcuLCBjbGlwYm9hcmQgdXBkYXRlZCkgYW5kIHRoZXJlIGlzIHR5cGVhaGVhZCwgVmltIHdvdWxkIGhhbmcgdW50aWwgYQorY2hhcmFjdGVyIHdhcyB0eXBlZC4KKworTVMtRE9TLCBNUy1XaW5kb3dzIGFuZCBBbWlnYTogZXhwYW5kaW5nICIkRU5WL2ZvbyIgd2hlbiAkRU5WIGVuZHMgaW4gYSBjb2xvbiwKK2hhZCB0aGUgc2xhc2ggcmVtb3ZlZC4KKworIjpoZSBcXj0iIGdhdmUgYW4gZXJyb3IgZm9yIHVzaW5nIFxfLiAgIjpoZSBePSIgZGlkbid0IGZpbmQgdGFnIDpzZXRePS4gIEV2ZW4KKyJoZSA6c2V0Xj0iIGRpZG4ndCBmaW5kIGl0LgorCitBIHRhZ3MgZmlsZSBuYW1lICJEOi90YWdzIiB3YXMgdXNlZCBhcyBmaWxlICJ0YWdzIiBpbiAiRDoiLiAgVGhhdCBkb2Vzbid0IHdvcmsKK3doZW4gdGhlIGN1cnJlbnQgcGF0aCBmb3IgRDogaXNuJ3QgdGhlIHJvb3Qgb2YgdGhlIGRyaXZlLgorCitSZW1vdmVkIGNhbGxzIHRvIFh0SW5pdGlhbGl6ZVdpZGdldENsYXNzKCksIHRoZXkgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeS4KKworV2hlbiB1c2luZyBhIGR0dGVybSBvciB2YXJpb3VzIG90aGVyIGNvbG9yIHRlcm1pbmFscywgYW5kIHRoZSBOb3JtYWwgZ3JvdXAgaGFzCitiZWVuIHNldCB0byB1c2UgYSBkaWZmZXJlbnQgYmFja2dyb3VuZCBjb2xvciwgdGhlIGJhY2tncm91bmQgd291bGRuJ3QgYWx3YXlzCitiZSBkaXNwbGF5ZWQgd2l0aCB0aGF0IGNvbG9yLiAgQWRkZWQgY2hlY2sgZm9yICJ1dCIgdGVybWNhcCBlbnRyeTogSWYgaXQncworbWlzc2luZywgY2xlYXJpbmcgdGhlIHNjcmVlbiB3b24ndCBnaXZlIHVzIHRoZSBjdXJyZW50IGJhY2tncm91bmQgY29sb3IuICBOZWVkCit0byBkcmF3IGVhY2ggY2hhcmFjdGVyIGluc3RlYWQuICBWaW0gbm93IGFsc28gd29ya3Mgd2hlbiB0aGUgImNsIiAoY2xlYXIKK3NjcmVlbikgdGVybWNhcCBlbnRyeSBpcyBtaXNzaW5nLgorCitXaGVuIHJlcGVhdGluZyBhICIvIiBzZWFyY2ggY29tbWFuZCB3aXRoIGEgbGluZSBvZmZzZXQsIHRoZSAibiIgZGlkIHVzZSB0aGUKK29mZnNldCBidXQgZGlkbid0IG1ha2UgdGhlIG1vdGlvbiBsaW5ld2lzZS4gIE1hZGUgImQvcGF0LysyIiBhbmQgImRuIiBkbyB0aGUKK3NhbWUuCisKK1dpbjMyOiBUcnlpbmcgdG8gdXNlICI6dGVhcm9mZiIgZm9yIGEgbWVudSB0aGF0IGRvZXNuJ3QgZXhpc3QgY2F1c2VkIGEgY3Jhc2guCisKK09wZW5QVFkoKSBkaWRuJ3Qgd29yayBvbiBTZXF1ZW50LiAgQWRkIGEgY29uZmlndXJlIGNoZWNrIGZvciBnZXRwc2V1ZG90dHkoKS4KKworQy1pbmRlbnRpbmc6IEluZGVudGVkIGEgbGluZSBzdGFydGluZyB3aXRoICIpIiB3aXRoIHRoZSBtYXRjaGluZyAiKCIsIGJ1dCBub3QKK2EgbGluZSBzdGFydGluZyB3aXRoICJ4KSIgbG9va3Mgc3RyYW5nZS4gIEFsc28gY29tcHV0ZSB0aGUgaW5kZW50IGZvciBhbGlnbmluZword2l0aCBpdGVtcyBpbnNpZGUgdGhlICgpIGFuZCB1c2UgdGhlIGxvd2VzdCBpbmRlbnQuCisKK01TLURPUyBhbmQgV2luZG93czogIjpuICoudmltIiBhbHNvIG1hdGNoZWQgZmlsZXMgZW5kaW5nIGluICJ+Ii4KK01vdmVkIG1jaF9leHBhbmRwYXRoKCkgZnJvbSBvc193aW4xNi5jIGFuZCBvc19tc2Rvcy5jIHRvIG1pc2MxLmMsIHRoZXkgYXJlCitlcXVhbC4KKworTWFjaW50b3NoOiAoRGFueSBTdC1BbWFudCkKKy0gSW4gVmktY29tcGF0aWJsZSBtb2RlIGRpZG4ndCByZWFkIGZpbGVzIHdpdGggQ1IgbGluZSBzZXBhcmF0b3JzLgorLSBGaXhlZCBhIGJ1ZyBpbiB0aGUgaGFuZGxpbmcgb2YgQWN0aXZhdGUvRGVhY3RpdmF0ZSBFdmVudAorLSBGaXhlZCBhIGJ1ZyBpbiBndWlfbWNoX2RpYWxvZyAodXNpbmcgd3JvbmcgcG9pbnRlcikKKworTXVsdGlieXRlIEdESyBYSU06IFdoaWxlIGNvbXBvc2luZyBhIG11bHRpYnl0ZS13b3JkLCBpZiB1c2VyIHByZXNzZXMgYQorbW91c2UgYnV0dG9uLCB0aGVuIHRoZSB3b3JkIGlzIHJlbW92ZWQuICBJdCBzaG91bGQgcmVtYWluIGFuZCBjb21wb3NpbmcgZW5kLgorKFN1bmctSHl1biBOYW0pCisKK01TLURPUywgTVMtV2luZG93cyBhbmQgT1MvMjogV2hlbiByZWFkaW5nIGZyb20gc3RkaW4sIGF1dG9tYXRpYyBDUi1MRgorY29udmVyc2lvbiBieSB0aGUgQyBsaWJyYXJ5IGdvdCBpbiB0aGUgd2F5IG9mIGRldGVjdGluZyBhICJkb3MiICdmaWxlZm9ybWF0Jy4KKworV2hlbiAnc21hcnRjYXNlJyBpcyBzZXQsIHBhdHRlcm5zIHdpdGggIlxTIiB3b3VsZCBhbHNvIG1ha2UgJ2lnbm9yZWNhc2UnCityZXNldC4KKworV2hlbiBjbGlja2luZyB0aGUgbW91c2UgaW4gYSBjb2x1bW4gbGFyZ2VyIHRoYW4gMjIyLCBpdCBtb3ZlZCB0byB0aGUgZmlyc3QKK2NvbHVtbi4gIENhbid0IGVuY29kZSBhIGxhcmdlciBudW1iZXIgaW4gYSBjaGFyYWN0ZXIuICBOb3cgbGltaXQgdGhlIG51bWJlciB0bworMjIyLCBkb24ndCBqdW1wIGJhY2sgdG8gdGhlIGZpcnN0IGNvbHVtbi4KKworR1VJOiBJbiBzb21lIHZlcnNpb25zIENTSSB3b3VsZCBjYXVzZSB0cm91YmxlLCBlaXRoZXIgd2hlbiB0eXBlZCBkaXJlY3RseSBvcgord2hlbiBwYXJ0IG9mIGEgbXVsdGktYnl0ZSBzZXF1ZW5jZS4KKworV2hlbiB1c2luZyBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiBhICI6bm9ybWFsIiBjb21tYW5kLCBhIHRyYWlsaW5nIGJ5dGUgdGhhdAoraXMgQ1NJIG9yIEtfU1BFQ0lBTCBjYXVzZWQgcHJvYmxlbXMuCisKK1dpbGRtZW51IGRpZG4ndCBoYW5kbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorCisiOnNsZWVwIDEwIiBjb3VsZCBub3QgYmUgaW50ZXJydXB0ZWQgb24gV2luZG93cywgd2hpbGUgImdzIiBjb3VsZC4gIE1hZGUgdGhlbQorYm90aCB3b3JrIHRoZSBzYW1lLgorCitVbml4OiBXaGVuIHdhaXRpbmcgZm9yIGEgY2hhcmFjdGVyIGlzIGludGVycnVwdGVkIGJ5IGFuIFgtd2luZG93cyBldmVudCAoZS5nLiwKK3RvIG9idGFpbiB0aGUgY29udGVudHMgb2YgdGhlIHNlbGVjdGlvbiksIHRoZSB3YWl0IHRpbWUgd291bGQgbm90IGJlIGhvbm9yZWQuCitBIG1lc3NhZ2UgY291bGQgYmUgb3ZlcndyaXR0ZW4gcXVpY2tseS4gIE5vdyBjb21wdXRlIHRoZSByZW1haW5pbmcgd2FpdGluZwordGltZS4KKworV2luZG93czogQ29tcGxldGluZyAiXFxzaGFyZVxjJFxTIiBpbnNlcnRlZCBhIGJhY2tzbGFzaCBiZWZvcmUgdGhlICQgYW5kIHRoZW4KK3RoZSBuYW1lIGlzIGludmFsaWQuICBEb24ndCBpbnNlcnQgdGhlIGJhY2tzbGFzaC4KKworV2hlbiBkb2luZyBhbiBhdXRvLXdyaXRlIGJlZm9yZSAiOm1ha2UiLCBJT2J1ZmYgd2FzIG92ZXJ3cml0dGVuIGFuZCB0aGUgd3JvbmcKK3RleHQgZGlzcGxheWVkIGxhdGVyLgorCitPbiB0aGUgTWFjIHRoZSBkaXJlY3RvcmllcyAiYzovdG1wIiBhbmQgImM6L3RlbXAiIHdlcmUgdXNlZCBpbiB0aGUgZGVmYXVsdHMKK2ZvciAnYmFja3VwZGlyJyBhbmQgJ2RpcmVjdG9yeScsIHRoZXkgZG9uJ3QgZXhpc3QuCisKK1RoZSBjaGVjayBmb3IgYSBuZXcgZmlsZSBub3QgdG8gYmUgb24gYW4gTVMtRE9TIGZpbGVzeXN0ZW0gY3JlYXRlZCB0aGUgZmlsZQordGVtcG9yYXJpbHksIHdoaWNoIGNhbiBiZSBzbG93LiAgRG9uJ3QgZG8gdGhpcyBpZiB0aGVyZSBpcyBhbm90aGVyIGNoZWNrIGZvcgordGhlIHN3YXAgZmlsZSBiZWluZyBvbiBhbiBNUy1ET1MgZmlsZXN5c3RlbS4KKworRG9uJ3QgZ2l2ZSB0aGUgIkNoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSIgd2FybmluZyB3aGVuIHJlYWRpbmcgZnJvbSBzdGRpbi4KKworV2hlbiB1c2luZyB0aGUgIlNhdmUgQXMiIG1lbnUgZW50cnkgYW5kIG5vdCBlbnRlcmluZyBhIGZpbGUgbmFtZSwgd291bGQgZ2V0IGFuCitlcnJvciBtZXNzYWdlIGZvciB0aGUgdHJhaWxpbmcgIjplZGl0ICMiLiAgTm93IG9ubHkgZG8gdGhhdCB3aGVuIHRoZQorYWx0ZXJuYXRlIGZpbGUgbmFtZSB3YXMgY2hhbmdlZC4KKworV2hlbiBWaW0gb3ducyB0aGUgWDExIHNlbGVjdGlvbiBhbmQgaXMgYmVpbmcgc3VzcGVuZGVkLCBhbiBhcHBsaWNhdGlvbiB0aGF0Cit0cmllcyB0byB1c2UgdGhlIHNlbGVjdGlvbiBoYW5ncy4gIFdoZW4gVmltIGNvbnRpbnVlcyBpdCBjb3VsZCBubyBsb25nZXIKK29idGFpbiB0aGUgc2VsZWN0aW9uLiAgTm93IGdpdmUgdXAgdGhlIHNlbGVjdGlvbiB3aGVuIHN1c3BlbmRpbmcuCisKK29wdGlvbi5oIGFuZCBnbG9iYWxzLmggd2VyZSBpbmNsdWRlZCBpbiBzb21lIGZpbGVzLCB3aGlsZSB0aGV5IHdlcmUgYWxyZWFkeQoraW5jbHVkZWQgaW4gdmltLmguICBNb3ZlZCB0aGUgZGVmaW5pdGlvbiBvZiBFWFRFUk4gdG8gdmltLmggdG8gYXZvaWQgZG9pbmcgaXQKK3R3aWNlLgorCitXaGVuIHJlcGVhdGluZyBhbiBvcGVyYXRvciB0aGF0IHVzZWQgYSBzZWFyY2ggcGF0dGVybiBhbmQgdGhlIHNlYXJjaCBwYXR0ZXJuCitjb250YWluZWQgY2hhcmFjdGVycyB0aGF0IGhhdmUgYSBzcGVjaWFsIG1lYW5pbmcgb24gdGhlIGNtZGxpbmUgKGUuZy4sIENUUkwtVSkKK2l0IGRpZG4ndCB3b3JrLgorCitGaXhlZCB2YXJpb3VzIHByb2JsZW1zIHdpdGggdXNpbmcgS19TUEVDSUFMICgweDgwKSBhbmQgQ1NJICgweDliKSBhcyBhIGJ5dGUgaW4KK2EgKG11bHRpYnl0ZSkgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUsIHRoZSAiciIgY29tbWFuZCBjb3VsZCBub3QgYmUgcmVwZWF0ZWQuCisKK1RoZSBET1MvV2luZG93cyBpbnN0YWxsIHByb2dyYW0gZGlkbid0IGFsd2F5cyB3b3JrIGZyb20gYSBkaXJlY3Rvcnkgd2l0aCBhCitsb25nIGZpbGVuYW1lLCBiZWNhdXNlICRWSU0gYW5kIHRoZSBleGVjdXRhYmxlIG5hbWUgd291bGQgbm90IGhhdmUgdGhlIHNhbWUKK3BhdGguCisKK011bHRpLWJ5dGU6CistIFVzaW5nIGFuIGFueS1idXQgY2hhcmFjdGVyIHJhbmdlIFteeF0gaW4gYSByZWdleHAgZGlkbid0IHdvcmsgZm9yIFVURi04LgorICAoTXVyYW9rYSBUYXJvKQorLSBXaGVuIGJhY2tzcGFjaW5nIG92ZXIgaW5zZXJ0ZWQgY2hhcmFjdGVycyBpbiBSZXBsYWNlIG1vZGUgbXVsdGktYnl0ZQorICBjaGFyYWN0ZXJzIHdlcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LiAoTXVyYW9rYSBUYXJvKQorLSBTZWFyY2ggY29tbWFuZHMgIiMiIGFuZCAiKiIgZGlkbid0IHdvcmsgd2l0aCBtdWx0aWJ5dGUgY2hhcmFjdGVycy4gKE11cmFva2EKKyAgVGFybykKKy0gV29yZCBjb21wbGV0aW9uIGluIEluc2VydCBtb2RlIGRpZG4ndCB3b3JrIHdpdGggbXVsdGlieXRlIGNoYXJhY3RlcnMuCisgIChNdXJhb2thIFRhcm8pCistIEF0aGVuYS9Nb3RpZiBHVUk6IHdoZW4gJ2xpbmVzcGFjZScgaXMgbm9uLXplcm8gdGhlIGN1cnNvciB3b3VsZCBiZSBkcmF3biB0b28KKyAgd2lkZSAobnVtYmVyIG9mIGJ5dGVzIGluc3RlYWQgb2YgY2VsbCB3aWR0aCkuCistIFdoZW4gY2hhbmdpbmcgJ2VuY29kaW5nJyB0byAiZXVjLWpwIiBhbmQgaW5zZXJ0aW5nIGEgY2hhcmFjdGVyIFZpbSB3b3VsZAorICBjcmFzaC4KKy0gRm9yIGV1Yy1qcCBjaGFyYWN0ZXJzIHBvc2l0aW9uaW5nIHRoZSBjdXJzb3Igd291bGQgc29tZXRpbWVzIGJlIHdyb25nLgorICBBbHNvLCB3aXRoIHR3byBjaGFyYWN0ZXJzIHdpdGggMHg4ZSBsZWFkaW5nIGJ5dGUgb25seSB0aGUgZmlyc3Qgb25lIHdvdWxkIGJlCisgIGRpc3BsYXllZC4KKy0gV2hlbiB1c2luZyBEWU5BTUlDX0lDT05WIG9uIFdpbjMyIGNvbnZlcnNpb24gbWlnaHQgZmFpbCBiZWNhdXNlIG9mIHVzaW5nIHRoZQorICB3cm9uZyBlcnJvciBudW1iZXIuIChNdXJhb2thIFRhcm8pCistIFVzaW5nIEFsdC14IGluIHRoZSBHVUkgd2hpbGUgJ2VuY29kaW5nJyB3YXMgc2V0IHRvICJ1dGYtOCIgZGlkbid0IHByb2R1Y2UKKyAgdGhlIHJpZ2h0IGNoYXJhY3Rlci4KKy0gV2hlbiB1c2luZyBWaXN1YWwgYmxvY2sgc2VsZWN0aW9uIGFuZCBvbmx5IHRoZSBsZWZ0IGhhbHZlIG9mIGEgZG91YmxlLXdpZGUKKyAgY2hhcmFjdGVyIGlzIHNlbGVjdGVkLCB0aGUgaGlnaGxpZ2h0aW5nIGNvbnRpbnVlZCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorLSBWaXN1YWwtYmxvY2sgZGVsZXRlIGRpZG4ndCB3b3JrIHByb3Blcmx5IHdoZW4gZGVsZXRpbmcgdGhlIHJpZ2h0IGhhbHZlIG9mIGEKKyAgZG91YmxlLXdpZGUgY2hhcmFjdGVyLgorLSBPdmVyc3RyaWtlIG1vZGUgZm9yIHRoZSBjbWRsaW5lIHJlcGxhY2VkIG9ubHkgdGhlIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aWJ5dGUKKyAgY2hhcmFjdGVyLgorLSBUaGUgY3Vyc29yIGluIFJlcGxhY2UgbW9kZSAoYWxzbyBpbiB0aGUgY21kbGluZSkgd2FzIHRvIHNtYWxsIG9uIGEKKyAgZG91YmxlLXdpZGUgY2hhcmFjdGVyLgorLSBXaGVuIGEgbXVsdGlieXRlIGNoYXJhY3RlciBjb250YWluZWQgYSAweDgwIGJ5dGUsIGl0IGRpZG4ndCB3b3JrICh3YXMgdXNpbmcKKyAgYSBDU0kgYnl0ZSBpbnN0ZWFkKS4gKE11cmFva2EgVGFybykKKy0gV29yZHdpc2Ugc2VsZWN0aW9uIHdpdGggdGhlIG1vdXNlIGRpZG4ndCB3b3JrLgorLSBZYW5raW5nIGEgbW9kZWxlc3Mgc2VsZWN0aW9uIG9mIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBkaWRuJ3Qgd29yay4KKy0gV2hlbiAnc2VsZWN0aW9uJyBpcyAiZXhjbHVzaXZlIiwgc2VsZWN0aW5nIGEgd29yZCB0aGF0IGVuZHMgaW4gYSBtdWx0aS1ieXRlCisgIGNoYXJhY3RlciB1c2VkIHdyb25nIGhpZ2hsaWdodGluZyBmb3IgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIuCisKK1dpbjMyIHdpdGggTWFrZV9tdmMubWFrOiBEaWRuJ3QgY29tcGlsZSBmb3IgZGVidWdnaW5nLiAoQ3JhaWcgQmFya2hvdXNlKQorCitXaW4zMiBHVUk6IFdoZW4gInZpbXJ1bi5leGUiIGlzIHVzZWQgdG8gZXhlY3V0ZSBhbiBleHRlcm5hbCBjb21tYW5kLCBkb24ndAorZ2l2ZSBhIG1lc3NhZ2UgYm94IHdpdGggdGhlIHJldHVybiB2YWx1ZSwgaXQgd2FzIGFscmVhZHkgcHJpbnRlZCBieSB2aW1ydW4uCitBbHNvIGF2b2lkIHByaW50aW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHNoZWxsIHdoZW4gIjpzaWxlbnQhIiBpcyB1c2VkLgorCitXaW4zMjogc2VsZWN0aW5nIGEgbG90IG9mIHRleHQgYW5kIHVzaW5nIHRoZSAiZmluZC9yZXBsYWNlIiBkaWFsb2cgY2F1c2VkIGEKK2NyYXNoLgorCitYMTEgR1VJOiBXaGVuIHR5cGluZyBhIGNoYXJhY3RlciB3aXRoIHRoZSA4dGggYml0IHNldCBhbmQgdGhlIE1ldGEvQWx0Cittb2RpZmllciwgdGhlIG1vZGlmaWVyIHdhcyByZW1vdmVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGNoYXJhY3Rlci4KKworVHJ1bmNhdGluZyBhIG1lc3NhZ2UgdG8gbWFrZSBpdCBmaXQgb24gdGhlIGNvbW1hbmQgbGluZSwgdXNpbmcgIi4uLiIgZm9yIHRoZQorbWlkZGxlLCBkaWRuJ3QgYWx3YXlzIGNvbXB1dGUgdGhlIHNwYWNlIGNvcnJlY3RseS4KKworQ291bGQgbm90IGltYXAgPEMtQD4uICBOb3cgaXQgd29ya3MgbGlrZSA8TnVsPi4KKworVk1TOgorLSBGaXhlZCBhIGZldyB0aGluZ3MgZm9yIFZBWEMuICBvc192bXNfZml4LmNvbSBoYWQgc29tZSBzdHJhbmdlIENUUkwtTQorICBjaGFyYWN0ZXJzLiAoWm9sdGFuIEFycGFkZmZ5IGFuZCBKb2huIFcuIEhhbWlsbCkKKy0gQWRkZWQgVk1TLXNwZWNpZmljIGRlZmF1bHRzIGZvciB0aGUgJ2lzZm5hbWUnIGFuZCAnaXNwcmludCcgb3B0aW9ucy4KKyAgKFpvbHRhbiBBcnBhZGZmeSkKKy0gUmVtb3ZlZCBvc192bXNfb3NkZWYuaCwgaXQncyBubyBsb25nZXIgdXNlZC4KKworVGhlIGd6aXAgcGx1Z2luIHVzZWQgYSAiOm5vcm1hbCIgY29tbWFuZCwgdGhpcyBkb2Vzbid0IHdvcmsgd2hlbiBkcm9wcGluZyBhCitjb21wcmVzc2VkIGZpbGUgb24gVmltLgorCitJbiB2ZXJ5IHJhcmUgc2l0dWF0aW9ucyBhIGJpbmFyeSBzZWFyY2ggZm9yIGEgdGFnIHdvdWxkIGZhaWwsIGJlY2F1c2UgYW4KK3VuaW5pdGlhbGl6ZWQgdmFsdWUgaGFwcGVucyB0byBiZSBoYWxmIHRoZSBzaXplIG9mIHRoZSB0YWcgZmlsZS4gKE5hcmVuZHJhbikKKworV2hlbiB1c2luZyBCdWZFbnRlciBhbmQgQnVmTGVhdmUgYXV0b2NvbW1hbmRzIHRvIGVuYWJsZS9kaXNhYmxlIGEgbWVudSwgaXQKK3dhc24ndCB1cGRhdGVkIHJpZ2h0IGF3YXkuCisKK1doZW4gZG9pbmcgYSByZXBsYWNlIHdpdGggdGhlICJjIm9uZmlybSBmbGFnLCB0aGUgY3Vyc29yIHdhcyBwb3NpdGlvbmVkIGFmdGVyCit0aGUgcnVsZXIsIGluc3RlYWQgb2YgYWZ0ZXIgdGhlIHF1ZXN0aW9uLiAgV2l0aCBhIGxvbmcgcmVwbGFjZW1lbnQgc3RyaW5nIHRoZQorc2NyZWVuIGNvdWxkIHNjcm9sbCB1cCBhbmQgY2F1c2UgYSAibW9yZSIgcHJvbXB0LiAgTm93IHRoZSBtZXNzYWdlIGlzCit0cnVuY2F0ZWQgdG8gbWFrZSBpdCBmaXQuCisKK01vdGlmOiBUaGUgYXV0b2NvbmYgY2hlY2sgZm9yIHRoZSBYcCBsaWJyYXJ5IGRpZG4ndCB3b3JrLgorCitXaGVuICd2ZXJib3NlJyBpcyBzZXQgdG8gbGlzdCBsaW5lcyBvZiBhIHNvdXJjZWQgZmlsZSwgZGVmaW5pbmcgYSBmdW5jdGlvbgord291bGQgcmVzZXQgdGhlIGNvdW50ZXIgdXNlZCBmb3IgdGhlICJtb3JlIiBwcm9tcHQuCisKK0luIHRoZSBXaW4zMiBmaW5kL3JlcGxhY2UgZGlhbG9nLCBhICcvJyBjaGFyYWN0ZXIgY2F1c2VkIHByb2JsZW1zLiAgRXNjYXBlIGl0Cit3aXRoIGEgYmFja3NsYXNoLgorCitTdGFydGluZyBhIHNoZWxsIHdpdGggIjpzaCIgd2FzIGRpZmZlcmVudCBmcm9tIHN0YXJ0aW5nIGEgc2hlbGwgZm9yIENUUkwtWgord2hlbiBzdXNwZW5kaW5nIGRvZXNuJ3Qgd29yay4gIFRoZXkgbm93IHdvcmsgdGhlIHNhbWUgd2F5LgorCitKdW1waW5nIHRvIGEgZmlsZSBtYXJrIHdoaWxlIGluIGEgY2hhbmdlZCBidWZmZXIgZ2F2ZSBhICJtYXJrIG5vdCBzZXQiIGVycm9yLgorCisiOmV4ZWN1dGUgaGlzdGdldCgiY21kIikiIGNhdXNlcyBhbiBlbmRsZXNzIGxvb3AgYW5kIGNyYXNoZWQgVmltLiAgTm93IGNhdGNoCithbGwgY29tbWFuZHMgdGhhdCBjYXVzZSB0b28gbXVjaCByZWN1cnNpdmVuZXNzLgorCitSZW1vdmVkICJGYWlsZWQgdG8gb3BlbiBpbnB1dCBtZXRob2QiIGVycm9yIG1lc3NhZ2UsIHRvbyBtYW55IHBlb3BsZSBnb3QgdGhpcword2hlbiB0aGV5IGRpZG4ndCB3YW50IHRvIHVzZSBhIFhJTS4KKworR1VJOiBXaGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt3aW5kb3dzIGZlYXR1cmUsIHRoZSBzY3JvbGxiYXIgd291bGQgc3RhcnQKK2JlbG93IGxpbmUgb25lLgorCitSZW1vdmVkIHRoZSB0cmljayB3aXRoIHJlZGVmaW5pbmcgY2hhcmFjdGVyIGNsYXNzIGZ1bmN0aW9ucyBmcm9tIHJlZ2V4cC5jLgorCitXaW4zMiBHVUk6IEZpbmQgZGlhbG9nIGdpdmVzIGZvY3VzIGJhY2sgdG8gbWFpbiB3aW5kb3csIHdoZW4gdHlwaW5nIGEKK2NoYXJhY3RlciBtb3VzZSBwb2ludGVyIGlzIGJsYW5rZWQsIGl0IGRpZG4ndCByZWFwcGVhciB3aGVuIG1vdmluZyBpdCBpbiB0aGUKK2RpYWxvZyB3aW5kb3cuIChWaW5jZSBOZWdyaSkKKworV2hlbiByZWNvcmRpbmcgYW5kIHR5cGluZyBhIENUUkwtQywgbm8gY2hhcmFjdGVyIHdhcyByZWNvcmRlZC4gIFdoZW4gaW4gSW5zZXJ0Cittb2RlIG9yIGNhbmNlbGxpbmcgaGFsZiBhIGNvbW1hbmQsIHBsYXlpbmcgYmFjayB0aGUgcmVjb3JkZWQgc2VxdWVuY2Ugd291bGRuJ3QKK3dvcmsuICBOb3cgcmVjb3JkIHRoZSBDVFJMLUMuCisKK1doZW4gdGhlIEdVSSB3YXMgc3RhcnRlZCwgbW91c2UgY29kZXMgZm9yIERFQyBhbmQgbmV0dGVybSB3ZXJlIHN0aWxsIGNoZWNrZWQKK2Zvci4KKworR1VJOiBXaGVuIHNjcm9sbGluZyBhbmQgJ3dyaXRlZGVsYXknIGlzIG5vbi16ZXJvLCB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZQorY3Vyc29yIHdhcyBkaXNwbGF5ZWQgaW4gdGhlIHdyb25nIHBvc2l0aW9uIChvbmUgbGluZSBhYm92ZS9iZWxvdyB3aXRoCitDVFJMLUUvQ1RSTC1ZKS4KKworQSAiOm5vcm1hbCIgY29tbWFuZCB3b3VsZCByZXNldCB0aGUgJ3Njcm9sbGJpbmQnIGluZm8uICBDYXVzZXMgcHJvYmxlbXMgd2hlbgordXNpbmcgYSAiOm5vcm1hbCIgY29tbWFuZCBpbiBhbiBhdXRvY29tbWFuZCBmb3Igb3BlbmluZyBhIGZpbGUuCisKK1dpbmRvd3MgR1VJOiBhIHBvaW50IHNpemUgd2l0aCBhIGRvdCwgbGlrZSAiNy41Iiwgd2Fzbid0IHJlY29nbml6ZWQuIChNdXJhb2thCitUYXJvKQorCitXaGVuICdzY3JvbGxiaW5kJyB3YXNuJ3Qgc2V0IHdvdWxkIHN0aWxsIHJlbWVtYmVyIHRoZSBjdXJyZW50IHBvc2l0aW9uLAord2FzdGluZyB0aW1lLgorCitHVEs6IENyYXNoIHdoZW4gJ3NoZWxsJyBkb2Vzbid0IGV4aXN0IGFuZCBkb2luZyI6IWxzIi4gIFVzZSBfZXhpdCgpIGluc3RlYWQgb2YKK2V4aXQoKSB3aGVuIHRoZSBjaGlsZCBjb3VsZG4ndCBleGVjdXRlIHRoZSBzaGVsbC4KKworTXVsdGktYnl0ZToKKy0gR1VJIHdpdGggZG91YmxlLWJ5dGUgZW5jb2Rpbmc6IGEgbW91c2UgY2xpY2sgaW4gbGVmdCBoYWx2ZSBvZiBkb3VibGUtd2lkZQorICBjaGFyYWN0ZXIgcHV0IHRoZSBjdXJzb3IgaW4gcHJldmlvdXMgY2hhci4KKy0gVXNpbmcgZG91YmxlLWJ5dGUgZW5jb2RpbmcgYW5kICdzZWxlY3Rpb24nIGlzICJleGNsdXNpdmUiOiAidmV5IiBhbmQgIl5WZXkiCisgIGluY2x1ZGVkIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHdvcmQuCistIFdoZW4gdXNpbmcgYSBkb3VibGUtYnl0ZSBlbmNvZGluZyBhbmQgdGhlcmUgaXMgYSBsZWFkIGJ5dGUgYXQgdGhlIGVuZCBvZiB0aGUKKyAgbGluZSwgdGhlIHByZWNlZGluZyBsaW5lIHdvdWxkIGJlIGRpc3BsYXllZC4gICJnYSIgYWxzbyBzaG93ZWQgd3JvbmcgaW5mby4KKy0gImdmIiBkaWRuJ3QgaW5jbHVkZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBjdXJzb3IgcHJvcGVybHkuCisgIChNdXJhb2thIFRhcm8pCisKK0dVSTogVGhlIGN1cnNvciB3YXMgc29tZXRpbWVzIG5vdCByZW1vdmVkIHdoZW4gc2Nyb2xsaW5nLiAgQ2hhbmdlZCB0aGUgcG9saWN5Citmcm9tIHJlZHJhd2luZyB0aGUgY3Vyc29yIGFmdGVyIGVhY2ggY2FsbCB0byBndWlfd3JpdGUoKSB0byBvbmx5IHVwZGF0ZSBpdCBhdAordGhlIGVuZCBvZiB1cGRhdGVfc2NyZWVuKCkgb3Igd2hlbiBzZXR0aW5nIHRoZSBjdXJzb3IgcG9zaXRpb24uICBBbHNvIG9ubHkKK3VwZGF0ZSB0aGUgc2Nyb2xsYmFycyBhdCB0aGUgZW5kIG9mIHVwZGF0ZV9zY3JlZW4oKSwgdGhhdCdzIHRoZSBvbmx5IHBsYWNlCit3aGVyZSB0aGUgd2luZG93IHRleHQgbWF5IGhhdmUgYmVlbiBzY3JvbGxlZC4KKworRm9ybWF0dGluZyAiLyo8VGFiPmxvbmcgdGV4dCIsIHByb2R1Y2VkICIqIDxUYWI+IiBpbiB0aGUgbmV4dCBsaW5lLiAgTm93CityZW1vdmUgdGhlIHNwYWNlIGJlZm9yZSB0aGUgVGFiLgorRm9ybWF0dGluZyAiLyo8VGFiPiAgbG9uZyB0ZXh0IiwgcHJvZHVjZWQgIiogPFRhYj4gbG9uZyB0ZXh0IiBpbiB0aGUgbmV4dAorbGluZS4gIE5vdyBrZWVwIHRoZSBzcGFjZSBhZnRlciB0aGUgVGFiLgorCitJbiBzb21lIHBsYWNlcyBub24tQVNDSUkgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgd2VyZSBhY2NlcHRlZCwgd2hpY2ggY291bGQKK2NhdXNlIHByb2JsZW1zLiAgRm9yIGV4YW1wbGUsICI6WCIgKFggYmVpbmcgc3VjaCBhIGNoYXJhY3RlcikuCisKK1doZW4gYSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGVuZCBvZiB0aGUgbGluZSwgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBsaW5lIHdhcworaGlnaGxpZ2h0ZWQgZm9yICdobHNlYXJjaCcuICBUaGF0IGxvb2tzIHdyb25nIGZvciAiL1wlM2MiLiAgTm93IGhpZ2hsaWdodCB0aGUKK2NoYXJhY3RlciBqdXN0IGFmdGVyIHRoZSBsaW5lLgorCitNb3RpZjogSWYgYSBkaWFsb2cgd2FzIGNsb3NlZCBieSBjbGlja2luZyBvbiB0aGUgIlgiIG9mIHRoZSB3aW5kb3cgZnJhbWUgVmltCit3b3VsZCBubyBsb25nZXIgcmVzcG9uZC4KKworV2hlbiB1c2luZyBDVFJMLVggb3IgQ1RSTC1BIG9uIGEgbnVtYmVyIHdpdGggbWFueSBsZWFkaW5nIHplcm9zLCBWaW0gd291bGQKK2NyYXNoLiAoTWF0c3Vtb3RvKQorCitXaGVuICdpbnNlcnRtb2RlJyBpcyBzZXQsIHRoZSBtYXBwaW5nIGluIG1zd2luLnZpbSBmb3IgQ1RSTC1WIGRpZG4ndCB3b3JrIGluCitTZWxlY3QgbW9kZS4gIEluc2VydCBtb2RlIHdhc24ndCByZXN0YXJ0ZWQgYWZ0ZXIgb3ZlcndyaXRpbmcgdGhlIHRleHQuCitOb3cgYWxsb3cgbmVzdGluZyBJbnNlcnQgbW9kZSB3aXRoIGluc2VydCBhbmQgY2hhbmdlIGNvbW1hbmRzLiAgQ1RSTC1PCitjd2ZvbzxFc2M+IG5vdyBhbHNvIHdvcmtzLgorCitDbGlja2luZyB3aXRoIHRoZSByaWdodCBtb3VzZSBidXR0b24gaW4gYW5vdGhlciB3aW5kb3cgc3RhcnRlZCBWaXN1YWwgbW9kZSwKK2J1dCB1c2VkIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCB3aW5kb3cuICBDYXVzZWQgbWxfZ2V0IGVycm9ycyB3aGVuCit0aGUgbGluZSBudW1iZXIgd2FzIGludmFsaWQuICBOb3cgc3RheSBpbiB0aGUgc2FtZSB3aW5kb3cuCisKK1doZW4gJ3NlbGVjdGlvbicgaXMgImV4Y2x1c2l2ZSIsICJndiIgc29tZXRpbWVzIHNlbGVjdGVkIG9uZSBjaGFyYWN0ZXIgZmV3ZXIuCisKK1doZW4gJ2NvbW1lbnRzJyBjb250YWlucyBtb3JlIHRoYW4gb25lIHN0YXJ0L21pZGRsZS9lbmQgdHJpcGxldCwgdGhlIG9wdGlvbmFsCitmbGFncyBjb3VsZCBiZSBtaXhlZCB1cC4gIEFsc28gZGlkbid0IGFsaWduIHRoZSBlbmQgd2l0aCB0aGUgbWlkZGxlIHBhcnQuCisKK0RvdWJsZS1yaWdodC1jbGljayBpbiBWaXN1YWwgbW9kZSBkaWRuJ3QgdXBkYXRlIHRoZSBzaG93biBtb2RlLgorCitXaGVuIHRoZSBOb3JtYWwgZ3JvdXAgaGFzIGEgZm9udCBuYW1lLCBpdCB3YXMgbmV2ZXIgdXNlZCB3aGVuIHN0YXJ0aW5nIHVwLgorTm93IHVzZSBpdCB3aGVuICdndWlmb250JyBhbmQgJ2d1aWZvbnRzZXQnIGFyZSBlbXB0eS4KK1NldHRpbmcgYSBmb250IG5hbWUgdG8gYSBoaWdobGlnaHQgZ3JvdXAgYmVmb3JlIHRoZSBHVUkgd2FzIHN0YXJ0ZWQgZGlkbid0Cit3b3JrLgorCisibWFrZSB0ZXN0IiBkaWRuJ3QgdXNlIHRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgVmltIGV4ZWN1dGFibGUuCisKKydjaW5kZW50JyBwcm9ibGVtczoKKy0gQWxpZ25lZCB3aXRoIGFuICJlbHNlIiBpbnNpZGUgYSBkby13aGlsZSBsb29wIGZvciBhIGxpbmUgYmVsb3cgdGhhdCBsb29wLgorICAoTWVpa2VsIEJyYW5kbWV5ZXIpCistIEEgbGluZSBiZWZvcmUgYSBmdW5jdGlvbiB3b3VsZCBiZSBpbmRlbnRlZCBldmVuIHdoZW4gdGVybWluYXRlZCB3aXRoIGEKKyAgc2VtaWNvbG9uLiAoTWVpa2VsIEJyYW5kbWV5ZXIpCistICdjaW5kZW50JyBnYXZlIHRvbyBtdWNoIGluZGVudCB0byBhIGxpbmUgYWZ0ZXIgYSAifTsiIHRoYXQgZW5kcyBhbiBhcnJheQorICBpbml0LgorLSBTdXBwb3J0IGRlY2xhcmF0aW9uIGxpbmVzIGVuZGluZyBpbiAiLCIgYW5kICJcIi4gIChNZWlrZWwgQnJhbmRtZXllcikKKy0gQSBjYXNlIHN0YXRlbWVudCBpbnNpZGUgYSBkby13aGlsZSBsb29wIHdhcyB1c2VkIGZvciBpbmRlbnRpbmcgYSBsaW5lIGFmdGVyCisgIHRoZSBkby13aGlsZSBsb29wLiAoTWVpa2VsIEJyYW5kbWV5ZXIpCistIFdoZW4gc2tpcHBpbmcgYSBzdHJpbmcgaW4gYSBsaW5lIHdpdGggb25lIGRvdWJsZSBxdW90ZSBpdCBjb3VsZCBjb250aW51ZSBpbgorICB0aGUgcHJldmlvdXMgbGluZS4gKE1laWtlbCBCcmFuZG1leWVyKQorCitXaGVuICdsaXN0JyBpcyBzZXQsICdobHNlYXJjaCcgZGlkbid0IGhpZ2hsaWdodCBhIG1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlCitsaW5lLiAgTm93IGhpZ2hsaWdodCB0aGUgJyQnLgorCitUaGUgUGFzdGUgbWVudSBpdGVtIGluIHRoZSBtZW51IGJhciwgdGhlIHBvcHVwIG1lbnUgYW5kIHRoZSB0b29sYmFyIHdlcmUgYWxsCitkaWZmZXJlbnQuICBOb3cgbWFkZSB0aGVtIGFsbCBlcXVhbCB0byBob3cgaXQgd2FzIGRvbmUgaW4gbXN3aW4udmltLgorCitzdF9kZXYgY2FuIGJlIHNtYWxsZXIgdGhhbiAidW5zaWduZWQiLiAgVGhlIGNvbXBpbGVyIG1heSBnaXZlIGFuIG92ZXJmbG93Cit3YXJuaW5nLiAgQWRkZWQgYSBjb25maWd1cmUgY2hlY2sgZm9yIGRldl90LgorCitBdGhlbmE6IGNsb3NpbmcgYSBjb25maXJtKCkgZGlhbG9nIGtpbGxlZCBWaW0uCisKK1ZhcmlvdXMgdHlwb3MgaW4gdGhlIGRvY3VtZW50YXRpb24uIChNYXR0IER1bmZvcmQpCisKK1B5dGhvbiBpbnRlcmZhY2U6IFRoZSBkZWZpbml0aW9uIG9mIF9ERUJVRyBjb3VsZCBjYXVzZSB0cm91YmxlLCB1bmRlZmluZSBpdC4KK1RoZSBlcnJvciBtZXNzYWdlIGZvciBub3QgYmVpbmcgYWJsZSB0byBsb2FkIHRoZSBzaGFyZWQgbGlicmFyeSB3YXNuJ3QKK3RyYW5zbGF0ZWQuICAoTXVyYW9rYSBUYXJvKQorCitNYWM6IChEYW55IFN0LUFtYW50IGFuZCBBeGVsIEtpZWxob3JuKQorLSBTZXZlcmFsIGZpeGVzLgorLSBWaW0gd2FzIGVhdGluZyA4MCUgb2YgdGhlIENQVSB0aW1lLgorLSBUaGUgcHJvamVjdCBvc19tYWMucGJ4cHJvaiBkaWRuJ3Qgd29yaywgIE1vdmVkIGl0IHRvIGEgc3ViZGlyZWN0b3J5LgorLSBNYWRlIHRoZSBtZW51IHByaW9yaXR5IHdvcmsgZm9yIHRoZSBtZW51YmFyLgorLSBGaXhlZCBhIHByb2JsZW0gd2l0aCBkcmFnZ2luZyB0aGUgc2Nyb2xsYmFyLgorLSBDbGVhbmVkIHVwIHRoZSB2YXJpb3VzICNpZmRlZnMuCisKK1VuaXg6IFdoZW4gY2F0Y2hpbmcgYSBkZWFkbHkgc2lnbmFsIGFuZCB3ZSBrZWVwIGdldHRpbmcgb25lIHVzZSBfZXhpdCgpIHRvCitleGl0IGluIGEgcXVpY2sgYW5kIGRpcnR5IHdheS4KKworQXRoZW5hIG1lbnUgb3JkZXJpbmcgZGlkbid0IHdvcmsgY29ycmVjdGx5LiAoRGF2aWQgSGFycmlzb24pCisKK0EgIjptYWtlIiBvciAiOmdyZXAiIGNvbW1hbmQgd2l0aCBhIGxvbmcgYXJndW1lbnQgY291bGQgY2F1c2UgYSBjcmFzaC4KKworRG9pbmcgIjpuZXcgZmlsZSIgYW5kIHVzaW5nICJRdWl0IiBmb3IgdGhlIEFUVEVOVElPTiBkaWFsb2cgc3RpbGwgb3BlbmVkIGEgbmV3Cit3aW5kb3cuCisKK0dUSzogV2hlbiBzdGFydGluZyB0aGUgR1VJIGFuZCB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgLnZpbXJjIGZpbGUsIGRvbid0CitwcmVzZW50IHRoZSB3YWl0LXJldHVybiBwcm9tcHQsIHNpbmNlIHRoZSBtZXNzYWdlIHdhcyBnaXZlbiBpbiB0aGUgdGVybWluYWwuCisKK1doZW4gdGhlcmUgd2FzIGFuIGVycm9yIGluIGEgLnZpbXJjIGZpbGUgdGhlIHRlcm1pbmFsIHdoZXJlIGd2aW0gd2FzIHN0YXJ0ZWQKK2NvdWxkIGJlIGNsZWFyZWQuICBTZXQgbXNnX3JvdyBpbiBtYWluLmMgYmVmb3JlIHdyaXRpbmcgYW55IG1lc3NhZ2VzLgorCitHVEsgYW5kIFgxMSBHVUk6IFdoZW4gdHJ5aW5nIHRvIHJlYWQgY2hhcmFjdGVycyBmcm9tIHRoZSB1c2VyIChlLmcuIHdpdGgKK2lucHV0KCkpIGJlZm9yZSB0aGUgVmltIHdpbmRvdyB3YXMgb3BlbmVkIGNhdXNlZCBWaW0gdG8gaGFuZyB3aGVuIGl0IHdhcworc3RhcnRlZCBmcm9tIHRoZSBkZXNrdG9wLgorCitPUy8zOTAgdXNlcyAzMSBiaXQgcG9pbnRlcnMuICBUaGF0IGJyb2tlIHNvbWUgY29tcHV0YXRpb25zIHdpdGggTUFYX0NPTC4KK1JlZHVjZSBNQVhfQ09MIGJ5IG9uZSBiaXQgZm9yIE9TLzM5MC4gKFJhbGYgU2NoYW5kbCkKKworV2hlbiBkZWZpbmluZyBhIGZ1bmN0aW9uIGFuZCBpdCBhbHJlYWR5IGV4aXN0cywgVmltIGRpZG4ndCBzYXkgaXQgZXhpc3RlZAordW50aWwgYWZ0ZXIgdHlwaW5nIGl0LiAgTm93IGRvIHRoaXMgcmlnaHQgYXdheSB3aGVuIHR5cGluZyBpdC4KKworVGhlIG1lc3NhZ2UgcmVtZW1iZXJlZCBmb3IgZGlzcGxheWluZyBsYXRlciAoa2VlcF9tc2cpIHdhcyBzb21ldGltZXMgcG9pbnRpbmcKK2ludG8gYSBnZW5lcmljIGJ1ZmZlciwgd2hpY2ggbWlnaHQgYmUgY2hhbmdlZCBieSB0aGUgdGltZSB0aGUgbWVzc2FnZSBpcworZGlzcGxheWVkLiAgTm93IG1ha2UgYSBjb3B5IG9mIHRoZSBtZXNzYWdlLgorCitXaGVuIHVzaW5nIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBpbiBhIG1lbnUgYW5kIGEgdHJhaWxpbmcgYnl0ZSBpcyBhIGJhY2tzbGFzaCwKK3RoZSBtZW51IHdvdWxkIG5vdCBiZSBjcmVhdGVkIGNvcnJlY3RseS4gIChNdXJhb2thIFRhcm8pCitVc2luZyBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgaW4gdGhlIHN1YnN0aXR1dGUgc3RyaW5nIHdoZXJlIGEgdHJhaWwgYnl0ZSBpcyBhCitiYWNrc2xhc2ggZGlkbid0IHdvcmsuICAoTXVyYW9rYSBUYXJvKQorCitXaGVuIHNldHRpbmcgInRfQ28iIGluIGEgdmltcmMgZmlsZSwgdGhlbiBzZXR0aW5nIGl0IGF1dG9tYXRpY2FsbHkgZnJvbSBhbgoreHRlcm0gdGVybXJlc3BvbnNlIGFuZCB0aGVuIHNldHRpbmcgaXQgYWdhaW4gbWFudWFsbHkgY2F1c2VkIGEgY3Jhc2guCisKK1doZW4gZ2V0dGluZyB0aGUgdmFsdWUgb2YgYSBzdHJpbmcgb3B0aW9uIHRoYXQgaXMgbm90IHN1cHBvcnRlZCwgdGhlIG51bWJlcgoremVybyB3YXMgcmV0dXJuZWQuICBUaGlzIGJyZWFrcyBhIGNoZWNrIGxpa2UgIiZlbmMgPT0gImFzZGYiLiAgTm93IGFuIGVtcHR5CitzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIHN0cmluZyBvcHRpb25zLgorCitDcmFzaGVkIHdoZW4gc3RhcnRpbmcgdGhlIEdUSyBHVUkgd2hpbGUgdXNpbmcgJ25vdGl0bGUnIGluIHRoZSB2aW1yYywgc2V0dGluZworJ3RpdGxlJyBpbiB0aGUgZ3ZpbXJjIGFuZCBzdGFydGluZyB0aGUgR1VJIHdpdGggIjpndWkiLiAgQ2xvc2VkIHRoZSBjb25uZWN0aW9uCit0byB0aGUgWCBzZXJ2ZXIgYWNjaWRlbnRhbGx5LgorCitIYWQgdG8gaGl0IHJldHVybiBhZnRlciBzZWxlY3RpbmcgYW4gZW50cnkgZm9yICI6dHMiLgorCitUaGUgbWVzc2FnZSBmcm9tICI6Y24iIG1lc3NhZ2Ugd2FzIHNvbWV0aW1lcyBjbGVhcmVkLiAgTm93IGRpc3BsYXkgaXQgYWZ0ZXIKK3JlZHJhd2luZyBpZiBpdCBkb2Vzbid0IGNhdXNlIGEgc2Nyb2xsICh0cnVuY2F0ZWQgd2hlbiBuZWNlc3NhcnkpLgorCitoYW5ndWxpbi5jIGRpZG4ndCBjb21waWxlIHdoZW4gdGhlIEdVSSB3YXMgZGlzYWJsZWQuICBEaXNhYmxlIGl0IHdoZW4gaXQgd29uJ3QKK3dvcmsuCisKK1doZW4gc2V0dGluZyBhIHRlcm1jYXAgb3B0aW9uIGxpa2UgInRfQ08iLCB0aGUgdmFsdWUgY291bGQgYmUgZGlzcGxheWVkIGFzCitiZWluZyBmb3IgYSBub3JtYWwga2V5IHdpdGggYSBtb2RpZmllciwgbGlrZSAiPE0tPT4iLgorCitXaGVuIGV4cGFuZGluZyB0aGUgYXJndW1lbnQgbGlzdCwgZW50cmllcyB3aGljaCBhcmUgYSBkaXJlY3RvcnkgbmFtZSBkaWQgbm90CitnZXQgaW5jbHVkZWQuICBUaGlzIHN0b3BwZWQgInZpbSBjOi8iIGZyb20gb3BlbmluZyB0aGUgZmlsZSBleHBsb3Jlci4KKworIjpzeW4gbWF0Y2ggc2QgIl4iIG5leHRncm91cD1hc2RmIiBza2lwcGVkIHRoZSBmaXJzdCBjb2x1bW4gYW5kIG1hdGNoZWQgdGhlCituZXh0Z3JvdXAgaW4gdGhlIHNlY29uZCBjb2x1bW4uCisKK0dVSTogV2hlbiAnbGF6eXJlZHJhdycgaXMgc2V0LCAnc2hvd21hdGNoJyBkaWRuJ3Qgd29yay4gIFJlcXVpcmVkIGZsdXNoaW5nCit0aGUgb3V0cHV0LgorCitEb24ndCBkZWZpbmUgdGhlIDxOZXRNb3VzZT4gdGVybWNvZGUgaW4gYW4geHRlcm0sIHJlZHVjZXMgdGhlIHByb2JsZW0gd2hlbgorc29tZW9uZSB0eXBlcyA8RXNjPiB9IGluIEluc2VydCBtb2RlLgorCitNYWRlIHNsYXNoX2FkanVzdCgpIHdvcmsgY29ycmVjdGx5IGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuIChZYXN1aGlybworTWF0c3Vtb3RvKQorVXNpbmcgYSBmaWxlbmFtZSBpbiBCaWc1IGVuY29kaW5nIGZvciBhdXRvY29tbWFuZHMgZGlkbid0IHdvcmsgKGJhY2tzbGFzaCBpbgordHJhaWxieXRlKS4gIChZYXN1aGlybyBNYXRzdW1vdG8pCisKK0RPUyBhbmQgV2luZG93czogRXhwYW5kaW5nICoudmltIGFsc28gbWF0Y2hlZCBmaWxlLnZpbWZvby4gIEV4cGFuZCBwYXRoIGxpa2UKK1VuaXggdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBXaW5kb3dzIGRpciBmdW5jdGlvbnMuICBNZXJnZWQgdGhlIERPUyBhbmQgV2luMzIKK2Z1bmN0aW9ucy4KKworV2luMzI6IEd2aW1leHQgY291bGQgbm90IGVkaXQgbW9yZSB0aGFuIGEgZmV3IGZpbGVzIGF0IG9uY2UsIHRoZSBsZW5ndGggb2YgdGhlCithcmd1bWVudCB3YXMgZml4ZWQuCisKKyJscyAtMSAqIHwgeGFyZ3MgdmltIiB3b3JrZWQsIGJ1dCB0aGUgaW5wdXQgd2FzIGluIGNvb2tlZCBtb2RlLiAgTm93IHN3aXRjaCB0bworcmF3IG1vZGUgd2hlbiBuZWVkZWQuICBVc2UgZHVwKCkgdG8gY29weSB0aGUgc3RkZXJyIGZpbGUgZGVzY3JpcHRvciB0byBzdGRpbgordG8gbWFrZSBzaGVsbCBjb21tYW5kcyB3b3JrLiAgTm8gbG9uZ2VyIHJlcXVpcmVzIGFuIGV4dGVybmFsIHByb2dyYW0gdG8gZG8KK3RoaXMuCisKK1doZW4gdXNpbmcgIjpmaWxldHlwZSBvZmYiLCBmdHBsdWdpbiBhbmQgaW5kZW50IHVzYWdlIHdvdWxkIGJlIHN3aXRjaGVkIG9mZiBhdAordGhlIHNhbWUgdGltZS4gIERvbid0IGRvIHRoaXMsIHNldHRpbmcgJ2ZpbGV0eXBlJyBtYW51YWxseSBjYW4gc3RpbGwgdXNlIHRoZW0uCisKK0dVSTogV2hlbiB3cml0aW5nIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyLCBpdCBjb3VsZCBiZSBzcGxpdCB1cCBpbiB0d28gY2FsbHMKK3RvIGd1aV93cml0ZSgpLCB3aGljaCBkb2Vzbid0IHdvcmsuICBOb3cgZmx1c2ggYmVmb3JlIHRoZSBvdXRwdXQgYnVmZmVyCitiZWNvbWVzIGZ1bGwuCisKK1doZW4gJ2xhc3RzdGF0dXMnIGlzIHNldCBhbmQgJ2NtZGhlaWdodCcgaXMgdHdvIG9yIGJpZ2dlciwgdGhlIGludHJvIG1lc3NhZ2UKK3dvdWxkIGJlIHdyaXR0ZW4gb3ZlciB0aGUgc3RhdHVzIGxpbmUuCitUaGUgIjppbnRybyIgY29tbWFuZCBkaWRuJ3Qgd29yayB3aGVuIHRoZXJlIHdhc24ndCBlbm91Z2ggcm9vbS4KKworQ29uZmlndXJpbmcgZm9yIFJ1YnkgZmFpbGVkIHdpdGggYSByZWNlbnQgdmVyc2lvbiBvZiBSdWJ5LiAoQWtpbm9yaSBNdXNoYSkKKworQXRoZW5hOiBXaGVuIGRlbGV0aW5nIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggVmltIHdhcyBzdGFydGVkLCB1c2luZyB0aGUgZmlsZQorYnJvd3NlciBtYWRlIFZpbSBleGl0LiAgUmVtb3ZlZCB0aGUgdXNlIG9mIFh0QXBwRXJyb3IoKS4KKworV2hlbiB1c2luZyBhdXRvY29uZiAyLjUwLCBVTklYIHdhcyBub3QgZGVmaW5lZC4gIE1vdmVkIHRoZSBjb21tZW50IGZvciAiI3VuZGVmCitVTklYIiB0byBhIHNlcGFyYXRlIGxpbmUuCisKK1dpbjMyOiBEaXNhYmxlZCBfT25XaW5kb3dQb3NDaGFuZ2luZygpIHRvIG1ha2UgbWF4aW1pemUgd29yayBiZXR0ZXIuCisKK1dpbjMyOiBDb21waWxpbmcgd2l0aCBWQyA0LjAgZGlkbid0IHdvcmsuIChXYWx0ZXIgQnJpc2NvZSkKKworQXRoZW5hOgorLSBGaW5hbGx5IGZpeGVkIHRoZSBwcm9ibGVtcyB3aXRoIGRlbGV0aW5nIGEgbWVudS4gKERhdmlkIEhhcnJpc29uKQorLSBBdGhlbmE6IFdoZW4gY2xvc2luZyB0aGUgY29uZmlybSgpIGRpYWxvZywgd29ya2VkIGxpa2UgT0sgd2FzIHByZXNzZWQsCisgIGluc3RlYWQgb2YgQ2FuY2VsLgorCitUaGUgZmlsZSBleHBsb3JlciBkaWRuJ3Qgd29yayBpbiBjb21wYXRpYmxlIG1vZGUsIGJlY2F1c2Ugb2YgbGluZQorY29udGludWF0aW9uLgorCitEaWRuJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGZvciAiOmRpZ3JhcGggYSIuCisKK1doZW4gdXNpbmcgRXggbW9kZSBpbiB0aGUgR1VJIGFuZCB0eXBpbmcgYSBzcGVjaWFsIGtleSwgPEJTPiBkaWRuJ3QgZGVsZXRlIGl0Citjb3JyZWN0bHkuICBOb3cgZGlzcGxheSAnPycgZm9yIGEgc3BlY2lhbCBrZXkuCisKK1doZW4gYW4gb3BlcmF0b3IgaXMgcGVuZGluZywgY2xpY2tpbmcgaW4gYW5vdGhlciB3aW5kb3cgbWFkZSBpdCBhcHBseSB0byB0aGF0Cit3aW5kb3csIGV2ZW4gdGhvdWdoIHRoZSBsaW5lIG51bWJlcnMgY291bGQgYmUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKworV2hlbiBhIGZ1bmN0aW9uIGNhbGwgZG9lc24ndCBoYXZlIGEgdGVybWluYXRpbmcgIikiIFZpbSBjb3VsZCBjcmFzaC4KKworUGVybCBpbnRlcmZhY2U6IGNvdWxkIGNyYXNoIG9uIGV4aXQgd2l0aCBwZXJsIDUuNi4xLiAoQW5kdWluIFdpdGhlcnMpCisKK1VzaW5nICVQIGluICdlcnJvcmZvcm1hdCcgd2Fzbid0IGhhbmRsZWQgY29ycmVjdGx5LiAoVG9tYXMgWmVsbGVyaW4pCisKK1VzaW5nIGEgc3ludGF4IGNsdXN0ZXIgdGhhdCBpbmNsdWRlcyBpdHNlbGYgbWFkZSBWaW0gY3Jhc2guCisKK0dVSTogV2l0aCAnbHMnIHNldCB0byAyLCBkcmFnZ2luZyB0aGUgc3RhdHVzIGxpbmUgYWxsIHRoZSB3YXkgdXAsIHRoZW4gbWFraW5nCit0aGUgVmltIHdpbmRvdyBzbWFsbGVyOiBDb3VsZCBub3QgdGhlIGRyYWcgc3RhdHVzIGxpbmUgYW55bW9yZS4KKworInZpbSAtYyBzdGFydGluc2VydCEgZmlsZSIgcGxhY2VkIGN1cnNvciBvbiBsYXN0IGNoYXIgb2YgYSBsaW5lLCBpbnN0ZWFkIG9mCithZnRlciBpdC4gIEEgIjpzZXQiIGNvbW1hbmQgaW4gdGhlIGJ1ZmZlciBtZW51IHNldCB3X3NldF9jdXJzd2FudC4gIE5vdyBkb24ndAorZG8gdGhpcyB3aGVuIHdfY3Vyc3dhbnQgaXMgTUFYQ09MLgorCitXaW4zMjogV2hlbiB0aGUgZ3ZpbSB3aW5kb3cgd2FzIG1heGltaXplZCBhbmQgc2VsZWN0aW5nIGFub3RoZXIgZm9udCwgdGhlCit3aW5kb3cgd291bGQgbm8gbG9uZ2VyIGZpbGwgdGhlIHNjcmVlbi4KKworVGhlIGxpbmUgd2l0aCAncGFzdGV0b2dnbGUnIGluICI6b3B0aW9ucyIgZGlkbid0IHNob3cgdGhlIHJpZ2h0IHZhbHVlIHdoZW4gaXQKK2lzIGEgc3BlY2lhbCBrZXkuICBIaXR0aW5nIDxDUj4gZGlkbid0IHdvcmsgZWl0aGVyLgorCitGb3JtYXR0aW5nIHRleHQsIHJlc3VsdGluZyBpbiBhICUgbGFuZGluZyBpbiB0aGUgZmlyc3QgbGluZSwgcmVwZWF0ZWQgdGhlICUgaW4KK3RoZSBmb2xsb3dpbmcgbGluZXMsIGxpa2UgaXQncyB0aGUgc3RhcnQgb2YgYSBjb21tZW50LgorCitHVEs6IFdoZW4gYWRkaW5nIGEgdG9vbGJhciBpdGVtIHdoaWxlIGd2aW0gaXMgYWxyZWFkeSBydW5uaW5nLCBpdCB3YXNuJ3QKK3Bvc3NpYmxlIHRvIHVzZSB0aGUgdG9vbHRpcC4gIE5vdyBpdCB3b3JrcyBieSBhZGRpbmcgdGhlIHRvb2x0aXAgZmlyc3QuCisKK1RoZSBvdXRwdXQgb2YgImcgQ1RSTC1HIiBtZW50aW9uZWQgIkNoYXIiIGJ1dCBpdCdzIGFjdHVhbGx5IGJ5dGVzLgorCitTZWFyY2hpbmcgZm9yIHRoZSBlbmQgb2YgYSBvbmVsaW5lIHJlZ2lvbiBkaWRuJ3Qgd29yayBjb3JyZWN0bHkgd2hlbiB0aGVyZSBpcworYW4gb2Zmc2V0IGZvciB0aGUgaGlnaGxpZ2h0aW5nLgorCitTeW50YXggaGlnaGxpZ2h0aW5nOiBXaGVuIHN5bmNocm9uaXppbmcgb24gQy1jb21tZW50cywgLy8qLyB3YXMgc2VlbiBhcyB0aGUKK3N0YXJ0IG9mIGEgY29tbWVudC4KKworV2luMzI6IFdpdGhvdXQgc2Nyb2xsYmFycyBwcmVzZW50LCB0aGUgTVMgbW91c2Ugc2Nyb2xsIHdoZWVsIGRpZG4ndCB3b3JrLgorQWxzbyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgd2hlbiB0aGV5IGFyZSBub3QgdmlzaWJsZS4KKworTW90aWY6IFdoZW4gdGhlcmUgaXMgbm8gcmlnaHQgc2Nyb2xsYmFyLCB0aGUgYm90dG9tIHNjcm9sbGJhciB3b3VsZCBzdGlsbAorbGVhdmUgcm9vbSBmb3IgaXQuICAoTWFydGluIERhbGVja2kpCisKK1doZW4gY2hhbmdpbmcgJ2d1aWN1cnNvcicgYW5kIHRoZSB2YWx1ZSBpcyBpbnZhbGlkLCBzb21lIG9mIHRoZSBlZmZlY3RzIHdvdWxkCitzdGlsbCB0YWtlIHBsYWNlLiAgTm93IGZpcnN0IGNoZWNrIGZvciBlcnJvcnMgYW5kIG9ubHkgbWFrZSB0aGUgbmV3IHZhbHVlCitlZmZlY3RpdmUgd2hlbiBpdCdzIE9LLgorCitVc2luZyAiQSIgSW4gVmlzdWFsIGJsb2NrIG1vZGUsIGFwcGVuZGluZyB0byBsaW5lcyB0aGF0IGRvbid0IGV4dGVuZCBpbnRvIHRoZQorYmxvY2ssIHBhZGRpbmcgd2FzIHdyb25nLgorCitXaGVuIHBhc3RpbmcgYSBibG9jayBvZiB0ZXh0LCBhIGNoYXJhY3RlciB0aGF0IG9jY3VwaWVzIG1vcmUgdGhhbiBvbmUgc2NyZWVuCitjb2x1bW4gY291bGQgYmUgZGVsZXRlZCBhbmQgc3BhY2VzIGluc2VydGVkIGluc3RlYWQuICBOb3cgb25seSBkbyB0aGF0IHdpdGggYQordGFiLgorCitGaXhlZCBjb252ZXJzaW9uIG9mIGRvY3VtZW50YXRpb24gdG8gSFRNTCB1c2luZyBQZXJsLiAoRGFuIFNoYXJwKQorCitHaXZlIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBhIG1lbnUgbmFtZSBzdGFydHMgd2l0aCBhIGRvdC4KKworQXZvaWQgYSBoYW5nIHdoZW4gZXhlY3V0aW5nIGEgc2hlbGwgZnJvbSB0aGUgR1VJIG9uIEhQLVVYIGJ5IHB1c2hpbmcgInB0ZW0iCitldmVuIHdoZW4gc3lzL3B0ZW0uaCBpc24ndCBwcmVzZW50LgorCitXaGVuIGNyZWF0aW5nIHRoZSB0ZW1wIGRpcmVjdG9yeSwgbWFrZSBzdXJlIHVtYXNrIGlzIDA3Nywgb3RoZXJ3aXNlIHRoZQorZGlyZWN0b3J5IGlzIG5vdCBhY2Nlc3NpYmxlIHdoZW4gaXQgd2FzIHNldCB0byAwMTc3LgorCitVbml4OiBXaGVuIHJlc2l6aW5nIHRoZSB3aW5kb3cgYW5kIGEgcmVkcmF3IGlzIGEgYml0IHNsb3csIGNvdWxkIGdldCBhIHdpbmRvdworcmVzaXplIGV2ZW50IHdoaWxlIHJlZHJhd2luZywgcmVzdWx0aW5nIGluIGEgbWVzc2VkIHVwIHdpbmRvdy4gIEFueSBpbnB1dAorKGUuZy4sIGEgbW91c2UgY2xpY2spIHdvdWxkIHJlZHJhdy4KKworVGhlICIlQiIgaXRlbSBpbiB0aGUgc3RhdHVzIGxpbmUgYmVjYW1lIHplcm8gaW4gSW5zZXJ0IG1vZGUgKHRoYXQncyBub3JtYWwpCitmb3IgYW5vdGhlciB0aGFuIHRoZSBjdXJyZW50IHdpbmRvdy4KKworVGhlIG1lbnUgZW50cmllcyB0byBjb252ZXJ0IHRvIHh4ZCBhbmQgYmFjayBkaWRuJ3Qgd29yayBpbiBJbnNlcnQgbW9kZS4KKworV2hlbiAiOnZnbG9iYWwiIGRpZG4ndCBmaW5kIGEgbGluZSB3aGVyZSB0aGUgcGF0dGVybiBkb2Vzbid0IG1hdGNoLCB0aGUgZXJyb3IKK21lc3NhZ2Ugd291bGQgYmUgdGhlIHdyb25nIHdheSBhcm91bmQuCisKK1doZW4gaWdub3JpbmcgYSBtdWx0aS1saW5lIGVycm9yIG1lc3NhZ2Ugd2l0aCAiJS1BIiwgdGhlIGNvbnRpbnVhdGlvbiBsaW5lcword291bGQgYmUgdXNlZCBhbnl3YXkuIChTZXJ2YXRpdXMgQnJhbmR0KQorCisiZ3J4IiBvbiBhIGRvdWJsZS13aWRlIGNoYXJhY3RlciBpbnNlcnRlZCAieCIsIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZQorY2hhcmFjdGVyIHdpdGggInggIi4gICJnUiIgb24gPHh4PiAoJ2Rpc3BsYXknIHNldCB0aGUgInVoZXgiKSBkaWRuJ3QgcmVwbGFjZQorYXQgYWxsLiAgV2hlbiBkb2luZyAiZ1J4eCIgb24gYSBjb250cm9sIGNoYXJhY3RlciB0aGUgZmlyc3QgIngiIHdvdWxkIGJlCitpbnNlcnRlZCwgYnJlYWtpbmcgdGhlIGFsaWdubWVudC4KKworQWRkZWQgIjApIiB0byAnY2lua2V5cycsIHNvIHRoYXQgd2hlbiB0eXBpbmcgYSApIGl0IGlzIHB1dCBpbiB0aGUgc2FtZSBwbGFjZQorYXMgd2hlcmUgIj09IiB3b3VsZCBwdXQgaXQuCisKK1dpbjMyOiBXaGVuIG1heGltaXplZCwgYWRkaW5nL3JlbW92aW5nIHRvb2xiYXIgZGlkbid0IHJlc2l6ZSB0aGUgdGV4dCBhcmVhLgorCitXaGVuIHVzaW5nIDxDLVJpZ2h0TW91c2U+IGEgY291bnQgd2FzIGRpc2NhcmRlZC4KKworV2hlbiB0eXBpbmcgQ1RSTC1WIGFuZCA8UmlnaHRNb3VzZT4gaW4gdGhlIGNvbW1hbmQgbGluZSwgd291bGQgaW5zZXJ0Cis8TGVmdE1vdXNlPi4KKworVXNpbmcgInZpcyIgb3IgInZhcyIgd2hlbiAnc2VsZWN0aW9uJyBpcyBleGNsdXNpdmUgZGlkbid0IGluY2x1ZGUgdGhlIGxhc3QKK2NoYXJhY3Rlci4KKworV2hlbiBhZGRpbmcgdG8gYW4gb3B0aW9uIGxpa2UgJ2dyZXBwcmcnLCBsZWFkaW5nIHNwYWNlIHdvdWxkIGJlIGxvc3QuICBEb24ndAorZXhwYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aGVuIHRoZXJlIGlzIG5vIGNvbW1hIHNlcGFyYXRpbmcgdGhlIGl0ZW1zLgorCitHVUk6IFdoZW4gdXNpbmcgYSBib2xkLWl0YWxpYyBmb250LCB3b3VsZCBzdGlsbCB1c2UgdGhlIGJvbGQgdHJpY2sgYW5kCit1bmRlcmxpbmluZy4KKworTW90aWY6IFRoZSBkZWZhdWx0IGJ1dHRvbiBkaWRuJ3Qgd29yayBpbiBkaWFsb2dzLCB0aGUgZmlyc3Qgb25lIHdhcyBhbHdheXMKK3VzZWQuICBIYWQgdG8gZ2l2ZSBpbnB1dCBmb2N1cyB0byB0aGUgZGVmYXVsdCBidXR0b24uCisKK1doZW4gdXNpbmcgQ1RSTC1UIHRvIGp1bXAgd2l0aGluIHRoZSBzYW1lIGZpbGUsIHRoZSAnJyBtYXJrIHdhc24ndCBzZXQuCisKK1VuZG8gd2Fzbid0IFZpIGNvbXBhdGlibGUgd2hlbiB1c2luZyB0aGUgJ2MnIGZsYWcgZm9yICI6cyIuICBOb3cgaXQgdW5kb2VzIHRoZQord2hvbGUgIjpzIiBjb21tYW5kIGluc3RlYWQgb2YgZWFjaCBjb25maXJtZWQgcmVwbGFjZW1lbnQuCisKK1RoZSBCdWZmZXJzIG1lbnUsIHdoZW4gdG9ybi1vZmYsIGRpc2FwcGVhcmVkIHdoZW4gYmVpbmcgcmVmcmVzaGVkLiAgQWRkIGEKK2R1bW15IGl0ZW0gdG8gYXZvaWQgdGhpcy4KKworUmVtb3ZlZCBjYWxsaW5nIG1zZ19zdGFydCgpIGluIG1haW4oKSwgaXQgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCisKK3ZpbV9zdHJwYnJrKCkgZGlkIG5vdCBzdXBwb3J0IG11bHRpYnl0ZSBjaGFyYWN0ZXJzLiAoTXVyYW9rYSBUYXJvKQorCitUaGUgQW1pZ2EgdmVyc2lvbiBkaWRuJ3QgY29tcGlsZSwgdGhlIGNvZGUgd2FzIHRvbyBiaWcgZm9yIHJlbGF0aXZlIGp1bXBzLgorTW92ZWQgYSBmZXcgZmlsZXMgZnJvbSBleF9kb2NtZC5jIHRvIGV4X2NtZHMyLmMKKworV2hlbiBldmFsdWF0aW5nIHRoZSAiPSByZWdpc3RlciByZXN1bHRlZCBpbiB0aGUgIj0gcmVnaXN0ZXIgYmVpbmcgY2hhbmdlZCwgVmltCit3b3VsZCBjcmFzaC4KKworV2hlbiBkb2luZyAiOnZpZXcgZmlsZSIgYW5kIGl0IGZhaWxzLCB0aGUgY3VycmVudCBidWZmZXIgd2FzIG1hZGUgcmVhZC1vbmx5LgorCitNb3RpZjogRm9yIHNvbWUgcGVvcGxlIHRoZSBzZXBhcmF0b3JzIGluIHRoZSB0b29sYmFyIGRpc2FwcGVhcmVkIHdoZW4gcmVzaXppbmcKK3RoZSBWaW0gd2luZG93LiAoTWFydGluIERhbGVja2kpCisKK1dpbjMyIEdVSTogd2hlbiBzZXR0aW5nICdsaW5lcycgdG8gYSBodWdlIG51bWJlciwgd291bGQgbm90IGNvbXB1dGUgdGhlCithdmFpbGFibGUgc3BhY2UgY29ycmVjdGx5LiAgV2FzIGNvdW50aW5nIHRoZSBtZW51IGhlaWdodCB0d2ljZS4KKworQ29udmVyc2lvbiBvZiB0aGUgZG9jcyB0byBIVE1MIGRpZG4ndCBoYW5kbGUgdGhlIGxpbmUgd2l0aCB0aGUgK3F1aWNrZml4IHRhZworY29ycmVjdGx5LiAoQW50b25pbyBDb2xvbWJvKQorCitXaW4zMjogZm5hbWVfY2FzZSgpIGRpZG4ndCBoYW5kbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGNvcnJlY3RseS4gKFlhc3VoaXJvCitNYXRzdW1vdG8pCisKK1RoZSBDeWd3aW4gdmVyc2lvbiBoYWQgdHJvdWJsZSB3aXRoIGZjaGRpcigpLiAgRG9uJ3QgdXNlIHRoYXQgZnVuY3Rpb24gZm9yCitDeWd3aW4uCisKK1RoZSBnZW5lcmljIGNoZWNrIGluIHNjcmlwdHMudmltIGZvciAiY29uZiIgc3ludGF4IHdhcyBkb25lIGJlZm9yZSBzb21lIGNoZWNrcworaW4gZmlsZXR5cGUudmltLCByZXN1bHRpbmcgaW4gImNvbmYiIHN5bnRheCB0b28gb2Z0ZW4uCisKK0RvczMyOiBUeXBpbmcgbGFnZ2VkIGJlaGluZC4gIFdvdWxkIHdhaXQgZm9yIG9uZSBiaW9zdGljayB3aGVuIGNoZWNraW5nIGlmIGEKK2NoYXJhY3RlciBpcyBhdmFpbGFibGUuCisKK0dUSzogV2hlbiBzZXR0aW5nICdjb2x1bW5zJyB3aGlsZSBzdGFydGluZyB1cCAiZ3ZpbSIsIHdvdWxkIHNldCB0aGUgd2lkdGggb2YKK3RoZSB0ZXJtaW5hbCBpdCB3YXMgc3RhcnRlZCBpbi4KKworV2hlbiB1c2luZyBFU0MgaW4gSW5zZXJ0IG1vZGUsIGFuIGF1dG9pbmRlbnQgdGhhdCB3cmFwcyB0byB0aGUgbmV4dCBsaW5lCitjYXVzZWQgdGhlIGN1cnNvciB0byBtb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgdGVtcG9yYXJpbHkuICBXaGVuIHRoZQorY2hhcmFjdGVyIGJlZm9yZSB0aGUgY3Vyc29yIHdhcyBhIGRvdWJsZS13aWRlIG11bHRpLWJ5dGUgY2hhcmFjdGVyIHRoZSBjdXJzb3IKK3dvdWxkIGJlIG9uIHRoZSByaWdodCBoYWx2ZSwgd2hpY2ggY2F1c2VzIHByb2JsZW1zIHdpdGggc29tZSB0ZXJtaW5hbHMuCisKK0RpZG4ndCBoYW5kbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGNvcnJlY3RseSB3aGVuIGV4cGFuZGluZyBhIGZpbGUgbmFtZS4KKyhZYXN1aGlybyBNYXRzdW1vdG8pCisKK1dpbjMyIEdVSTogRXJyb3JzIGdlbmVyYXRlZCBiZWZvcmUgdGhlIEdVSSBpcyBkZWNpZGVkIHRvIHN0YXJ0IHdlcmUgbm90CityZXBvcnRlZC4KKworZ2xvYnBhdGgoKSBkaWRuJ3QgcmVzZXJ2ZSBlbm91Z2ggcm9vbSBmb3IgY29uY2F0ZW5hdGVkIHJlc3VsdHMuIChBbmR1aW4KK1dpdGhlcnMpCisKK1doZW4gZXhwYW5kaW5nIGFuIG9wdGlvbiB0aGF0IGlzIHZlcnkgbG9uZyBhbHJlYWR5LCBkb24ndCBkbyB0aGUgZXhwYW5zaW9uLCBpdAord291bGQgYmUgdHJ1bmNhdGVkIHRvIE1BWFBBVEhMLiAoQW5kdWluIFdpdGhlcnMpCisKK1doZW4gJ3NlbGVjdGlvbicgaXMgImV4Y2x1c2l2ZSIsIHVzaW5nICJGeCIgaW4gVmlzdWFsIG1vZGUgb25seSBtb3ZlZCB1bnRpbAoranVzdCBhZnRlciB0aGUgY2hhcmFjdGVyLgorCitXaGVuIHVzaW5nIElNRSBvbiB0aGUgY29uc29sZSB0byBlbnRlciBhIGZpbGUgbmFtZSwgdGhlIHNjcmVlbiBtYXkgc2Nyb2xsIHVwLgorUmVkcmF3IHRoZSBzY3JlZW4gdGhlbi4gKFlhc3VoaXJvIE1hdHN1bW90bykKKworTW90aWY6IEluIHRoZSBmaW5kL3JlcGxhY2UgZGlhbG9nIHRoZSAiUmVwbGFjZSIgYnV0dG9uIGRpZG4ndCB3b3JrIGZpcnN0IHRpbWUsCitzZWNvbmQgdGltZSBpdCByZXBsYWNlZCBhbGwgbWF0Y2hlcy4gIFJlbW92ZWQgdGhlIHVzZSBvZiAiOnMvLy9jIi4KK0dUSzogU2ltaWxhciBwcm9ibGVtcyB3aXRoIHRoZSBmaW5kL3JlcGxhY2UgZGlhbG9nLCBtb3ZlZCB0aGUgY29kZSB0byBhIGNvbW1vbgorZnVuY3Rpb24uCisKK1gxMTogVXNlIHNoYXJlZCBHQydzIGZvciB0ZXh0LiAoTWFydGluIERhbGVja2kpCisKKyJdaSIgZm91bmQgdGhlIG1hdGNoIHVuZGVyIHRoZSBjdXJzb3IsIGluc3RlYWQgb2YgdGhlIGZpcnN0IG9uZSBiZWxvdyBpdC4KK1NhbWUgZm9yICJdSSIsICJdIENUUkwtSSIsICJdZCIsICJdRCIgYW5kICJdIENUUkwtRCIuCisKK1dpbjE2OiBXaGVuIG1heGltaXplZCBhbmQgdGhlIGZvbnQgaXMgY2hhbmdlZCwgZG9uJ3QgY2hhbmdlIHRoZSB3aW5kb3cgc2l6ZS4KKyhWaW5jZSBOZWdyaSkKKworV2hlbiAnbGJyJyBpcyBzZXQsIGRlbGV0aW5nIGEgYmxvY2sgb2YgdGV4dCBjb3VsZCBsZWF2ZSB0aGUgY3Vyc29yIGluIHRoZQord3JvbmcgcG9zaXRpb24uCisKK1dpbjMyOiBXaGVuIG9wZW5pbmcgYSBmaWxlIHdpdGggdGhlICJFZGl0IHdpdGggVmltIiBwb3B1cCBtZW51IGVudHJ5LAord2lsZGNhcmRzIHdvdWxkIGNhdXNlIHRyb3VibGUuICBBZGRlZCB0aGUgIi0tbGl0ZXJhbCIgYXJndW1lbnQgdG8gYXZvaWQKK2V4cGFuZGluZyBmaWxlIG5hbWVzLgorCitXaGVuIHVzaW5nICJndiIsIGl0IGRpZG4ndCByZXN0b3JlIHRoYXQgIiQiIHdhcyB1c2VkIGluIFZpc3VhbCBibG9jayBtb2RlLgorCitXaW4zMiBHVUk6IFdoaWxlIHdhaXRpbmcgZm9yIGEgc2hlbGwgY29tbWFuZCB0byBmaW5pc2gsIHRoZSB3aW5kb3cgd2Fzbid0CityZWRyYXduIGF0IGFsbC4gKFlhc3VoaXJvIE1hdHN1bW90bykKKworU3ludGF4IGhpZ2hsaWdodGluZzogQSBtYXRjaCB0aGF0IGNvbnRpbnVlcyBvbiBhIG5leHQgbGluZSBiZWNhdXNlIG9mIGEKK2NvbnRhaW5lZCByZWdpb24gZGlkbid0IGVuZCB3aGVuIHRoYXQgcmVnaW9uIGVuZGVkLgorCitUaGUgIjpzIiBjb21tYW5kIGRpZG4ndCBhbGxvdyBmbGFncyBsaWtlICdlJyBhbmQgJ2knIHJpZ2h0IGFmdGVyIGl0LgorCitXaGVuIHVzaW5nICI6cyIgdG8gc3BsaXQgYSBsaW5lLCBtYXJrcyB3ZXJlIG1vdmVkIHRvIHRoZSBuZXh0IGxpbmUuICBWaSBrZWVwcwordGhlbSBpbiB0aGUgZmlyc3QgbGluZS4KKworV2hlbiB1c2luZyAiOm4iICI6cmV3IiwgdGhlIHByZXZpb3VzIGNvbnRleHQgbWFyayB3YXMgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSwKK3doaWxlIFZpIHB1dHMgaXQgaW4gdGhlIHNhbWUgcGxhY2UgYXMgdGhlIGN1cnNvci4gIE1hZGUgaXQgVmkgY29tcGF0aWJsZS4KKworRml4ZWQgVmkgaW5jb21wYXRpYmlsaXR5OiBUZXh0IHdhcyBub3QgcHV0IGluIHJlZ2lzdGVyIDEgd2hlbiB1c2luZyAiYyIgYW5kCisiZCIgd2l0aCBhIG1vdGlvbiBjaGFyYWN0ZXIsIHdoZW4gZGVsZXRpbmcgd2l0aGluIG9uZSBsaW5lIHdpdGggb25lIG9mIHRoZQorY29tbWFuZHM6ICUgKCApIGA8Y2hhcmFjdGVyPiAvID8gTiBuIHsgfQorCitXaW4zMiBHVUk6IFRoZSB0b29sdGlwIGZvciB0ZWFyLW9mZiBpdGVtcyByZW1haW5lZCB3aGVuIHRoZSB0ZWFyLW9mZiBpdGVtIHdhcworbm8gbG9uZ2VyIHNlbGVjdGVkLgorCitHVUk6IFdoZW4gdHlwaW5nICI6IiBhdCB0aGUgbW9yZSBwcm9tcHQsIHdvdWxkIHJldHVybiB0byBOb3JtYWwgbW9kZSBhbmQgbm90CityZWRyYXcgdGhlIHNjcmVlbi4KKworV2hlbiBzdGFydGluZyBWaW0gd2l0aCBhbiBhcmd1bWVudCAiLWMgZy9hdC9wIiB0aGUgcHJpbnRlZCBsaW5lcyB3b3VsZAorb3ZlcndyaXRlIGVhY2ggb3RoZXIuCisKK0JlT1M6IERpZG4ndCBjb21waWxlLiAgQ29uZmlndXJlIGRpZG4ndCBhZGQgdGhlIG9zX2Jlb3MgZmlsZXMsIHRoZSBRTlggY2hlY2sKK3JlbW92ZWQgdGhlbS4gIFZhcmlvdXMgY2hhbmdlcyB0byBvc19iZW9zLmNjLiAoSm9zaHVhIEhhYmVybWFuKQorUmVtb3ZlZCB0aGUgY2hlY2sgZm9yIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSwgdGhlIEJlQm94IGhhcyBub3QgYmVlbiBwcm9kdWNlZAorZm9yIGEgbG9uZyB0aW1lIG5vdy4KKworV2luMzIgR1VJOiBkb24ndCB1c2UgYSBtZXNzYWdlIGJveCB3aGVuIHRoZSBzaGVsbCByZXR1cm5zIGFuIGVycm9yIGNvZGUsCitkaXNwbGF5IHRoZSBtZXNzYWdlIGluIHRoZSBWaW0gd2luZG93LgorCitNYWtlX212Yy5tYWsgYWx3YXlzIGluY2x1ZGVkICIvZGVidWciIGZvciBsaW5raW5nLiAgIkdVST1ubyIgYXJndW1lbnQgZGlkbid0Cit3b3JrLiAgVXNlICJERUJVRz15ZXMiIGluc3RlYWQgb2YgIkRFQlVHPTEiIHRvIG1ha2UgaXQgY29uc2lzdGVudC4gKERhbiBTaGFycCkKKworV2hlbiBhIGxpbmUgaW4gdGhlIHRhZ3MgZmlsZSBlbmRlZCBpbiA7IiAobm8gVEFCIGZvbGxvd2luZykgdGhlIGNvbW1hbmQgd291bGQKK25vdCBiZSByZWNvZ25pemVkIGFzIGEgc2VhcmNoIGNvbW1hbmQuCisKK1gxMTogVGhlIGlucHV0TWV0aG9kIHJlc291cmNlIG5ldmVyIHdvcmtlZC4gIERvbid0IHVzZSB0aGUgIm5vbmUiIGlucHV0IG1ldGhvZAorZm9yIFNHSSwgaXQgYXBwYXJlbnRseSBtYWtlcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIElucHV0IG1ldGhvZCBkcm9wcGVkLgorCitGaXhlZCBpbmNvcnJlY3QgdGVzdHMgaW4gb3NfbWFjLmguIChBeGVsIEtpZWxob3JuKQorCitXaW4zMiBjb25zb2xlOiBXaGVuIHRoZSBjb25zb2xlIHdoZXJlIFZpbSBydW5zIGluIGlzIGNsb3NlZCwgVmltIGNvdWxkIGhhbmcgaW4KK3RyeWluZyB0byByZXN0b3JlIHRoZSB3aW5kb3cgaWNvbi4gKFlhc3VoaXJvIE1hdHN1bW90bykKKworV2hlbiB1c2luZyAiOjNjYWxsIGZ1bmMoKSIgb3IgIjozLDNjYWxsIGZ1bmMoKSB0aGUgbGluZSBudW1iZXIgd2FzIGlnbm9yZWQuCisKK1doZW4gJ3Nob3dicmVhaycgYW5kICdsaW5lYnJlYWsnIHdlcmUgYm90aCBzZXQsIFZpc3VhbCBoaWdobGlnaHRpbmcgc29tZXRpbWVzCitjb250aW51ZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgbGluZS4KKworR1RLIEdVSTogVGVhcm9mZiBpdGVtcyB3ZXJlIGFkZGVkIGV2ZW4gd2hlbiAnZ3Vpb3B0aW9ucycgZGlkbid0IGNvbnRhaW4gJ3QnCit3aGVuIHN0YXJ0aW5nIHVwLgorCitNUy1XaW5kb3dzOiBXaGVuIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpbmNsdWRlcyBhICJ+Iiwgc2VhcmNoaW5nIGZpbGVzIHdpdGgKKyJnZiIgb3IgIjpmaW5kIiBkaWRuJ3Qgd29yay4gIEEgIiQiIGluIHRoZSBkaXJlY3RvcnkgaGFkIHRoZSBzYW1lIHByb2JsZW0uCitBZGRlZCBtY2hfaGFzX2V4cF93aWxkY2FyZCgpIGZ1bmN0aW9ucy4KKworV2hlbiByZWR1Y2luZyB0aGUgVmltIHdpbmRvdyBoZWlnaHQgd2hpbGUgc3RhcnRpbmcgdXAsIHdvdWxkIGdldCBhbgorb3V0LW9mLW1lbW9yeSBlcnJvciBtZXNzYWdlLgorCitXaGVuIGVkaXRpbmcgYSB2ZXJ5IGxvbmcgc2VhcmNoIHBhdHRlcm4sICdpbmNzZWFyY2gnIGNhdXNlZCB0aGUgcmVkcmF3IG9mIHRoZQorY29tbWFuZCBsaW5lIHRvIGZhaWwuCisKK01vdGlmIEdVSTogT24gc29tZSBzeXN0ZW1zIHRoZSAiSGVscCIgbWVudSB3b3VsZCBub3QgYmUgb24gdGhlIGZhciByaWdodCwgYXMKK2l0IHNob3VsZCBiZS4gIE9uIHNvbWUgb3RoZXIgc3lzdGVtcyAoZXNwLiBJUklYKSB0aGUgY29tbWFuZCBsaW5lIHdvdWxkIG5vdAorY29tcGxldGVseSBzaG93LiAgU29sdXRpb24gaXMgdG8gb25seSByZXNpemUgdGhlIG1lbnViYXIgZm9yIExlc3N0aWYuCisKK1VzaW5nICIlIiBpbiBhIGxpbmUgdGhhdCBjb250YWlucyAiXFwiIHR3aWNlIGRpZG4ndCB0YWtlIGNhcmUgb2YgdGhlIHF1b3RlcworcHJvcGVybHkuICBOb3cgbWFrZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBcIiBhbmQgXFwiLgorCitGb3Igbm9uLVVuaXggc3lzdGVtcyBhIGR1bW15IGZpbGUgaXMgY3JlYXRlZCB3aGVuIGZpbmRpbmcgYSBzd2FwIG5hbWUgdG8KK2RldGVjdCBhIDguMyBmaWxlc3lzdGVtLiAgV2hlbiB0aGVyZSBpcyBhbiBleGlzdGluZyBzd2FwIGZpbGUsIHdvdWxkIGdldCBhCit3YXJuaW5nIGZvciB0aGUgZmlsZSBiZWluZyBjcmVhdGVkIG91dHNpZGUgb2YgVmltLiAgQWxzbywgd2hlbiBjbG9zaW5nIHRoZSBWaW0KK3dpbmRvdyB0aGUgZmlsZSB3b3VsZCByZW1haW4uCisKK01vdGlmOiBUaGUgbWVudSBoZWlnaHQgd2FzIGFsd2F5cyBjb21wdXRlZCwgdXNpbmcgYSAiLW1lbnVoZWlnaHQiIGFyZ3VtZW50Cit3YXMgc2V0dGluZyB0aGUgcm9vbSBmb3IgdGhlIGNvbW1hbmQgbGluZS4gIE5vdyBtYWtlIGNsZWFyIHRoZSBhcmd1bWVudCBpcyBub3QKK3N1cHBvcnRlZC4KKworRm9yIHNvbWUgKEVCQ0RJQykgc3lzdGVtcywgUE9VTkQgd2FzIGVxdWFsIHRvICcjJy4gIEFkZGVkIGFuICNpZiBmb3IgdGhhdCB0bworYXZvaWQgYSBkdXBsaWNhdGUgY2FzZSBpbiBhIHN3aXRjaC4KKworVGhlIEdVSSBtYXkgaGF2ZSBwcm9ibGVtcyB3aGVuIGZvcmtpbmcuICBBbHdheXMgY2FsbCBfZXhpdCgpIGluc3RlYWQgb2YgZXhpdCgpCitpbiB0aGUgcGFyZW50LCB0aGUgY2hpbGQgd2lsbCBjYWxsIGV4aXQoKS4KKworV2luMzIgR1VJOiBBY2NlbnRlZCBjaGFyYWN0ZXJzIHdlcmUgb2Z0ZW4gd3JvbmcgaW4gZGlhbG9ncyBhbmQgdGVhcm9mZiBtZW51cy4KK05vdyB1c2UgQ1BfQUNQIGluc3RlYWQgb2YgQ1BfT0VNQ1AuIChWaW5jZSBOZWdyaSkKKworV2hlbiBkaXNwbGF5aW5nIHRleHQgd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nIGNhdXNlcyBhbiBlcnJvciAoZS5nLiwgcnVubmluZworb3V0IG9mIHN0YWNrKSB0aGUgc3ludGF4IGhpZ2hsaWdodGluZyBpcyBkaXNhYmxlZCB0byBhdm9pZCBmdXJ0aGVyIG1lc3NhZ2VzLgorCitXaGVuIGEgY29tbWFuZCBpbiBhIC52aW1yYyBvciAuZ3ZpbXJjIGNhdXNlcyBhbiBBVFRFTlRJT04gcHJvbXB0LCBhbmQgVmltIHdhcworc3RhcnRlZCBmcm9tIHRoZSBkZXNrdG9wIChubyBwbGFjZSB0byBkaXNwbGF5IG1lc3NhZ2VzKSBpdCB3b3VsZCBoYW5nLiAgTm93CitvcGVuIHRoZSBHVUkgd2luZG93IGVhcmx5IHRvIGJlIGFibGUgdG8gZGlzcGxheSB0aGUgbWVzc2FnZXMgYW5kIHBvcCB1cCB0aGUKK2RpYWxvZy4KKworInI8Q1I+IiBvbiBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGRlbGV0ZWQgb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUKK2NoYXJhY3Rlci4gIjNyPENSPiIgZGVsZXRlZCB0aHJlZSBieXRlcyBpbnN0ZWFkIG9mIHRocmVlIGNoYXJhY3RlcnMuCisKK1doZW4gaW50ZXJydXB0aW5nIHJlYWRpbmcgYSBmaWxlLCBWaSBjb25zaWRlcnMgdGhlIGJ1ZmZlciBtb2RpZmllZC4gIEFkZGVkIHRoZQorJ2knIGZsYWcgaW4gJ2Nwb3B0aW9ucycgZmxhZyBmb3IgdGhpcyAod2UgZG9uJ3Qgd2FudCBpdCBtb2RpZmllZCB0byBiZSBhYmxlIHRvCitkbyAiOnEiKS4KKworV2hlbiB1c2luZyBhbiBpdGVtIGluICdndWljdXJzb3InIHRoYXQgc3RhcnRzIHdpdGggYSBjb2xvbiwgVmltIHdvdWxkIGdldAorc3R1Y2sgb3IgY3Jhc2guCisKK1doZW4gcHV0dGluZyBhIGZpbGUgbWFyayBpbiBhIGhlbHAgZmlsZSBhbmQgbGF0ZXIganVtcGluZyBiYWNrIHRvIGl0LCB0aGUKK29wdGlvbnMgd291bGQgbm90IGJlIHNldC4gIEV4dGVuZGVkIHRoZSBtb2RlbGluZSBpbiBhbGwgaGVscCBmaWxlcyB0byBtYWtlCit0aGlzIHdvcmsgYmV0dGVyLgorCitXaGVuIGEgbW9kZWxpbmUgY29udGFpbmVkICI6OiIgdGhlIGxvY2FsIG9wdGlvbiB2YWx1ZXMgd291bGQgYmUgcHJpbnRlZC4gIE5vdworaWdub3JlIGl0LgorCitTb21lIGhlbHAgZmlsZXMgZGlkIG5vdCB1c2UgYSA4LjMgbmFtZXMsIHdoaWNoIGNhdXNlcyBwcm9ibGVtcyB3aGVuIHVzaW5nCitNUy1ET1MgdW56aXAuICBSZW5hbWVkICJtdWx0aWJ5dGUudHh0IiB0byAibWJ5dGUudHh0IiwgInJpZ2h0bGVmdC50eHQiIHRvCisicmlsZWZ0LnR4dCIsICJ0YWdzZWFyY2gudHh0IiB0byAidGFnc3JjaC50eHQiLCAib3NfcmlzY29zLnR4dCIgdG8KKyJvc19yaXNjLnR4dCIuCisKK1doZW4gVmlzdWFsIG1vZGUgaXMgYmxvY2t3aXNlLCB1c2luZyAiaXciIG9yICJhdyIgbWFkZSBpdCBjaGFyYWN0ZXJ3aXNlLiAgVGhhdAorZG9lc24ndCBzZWVtIHJpZ2h0LCBvbmx5IGRvIHRoaXMgd2hlbiBpbiBsaW5ld2lzZSBtb2RlLiAgQnV0IHRoZW4gZG8gaXQKK2Fsd2F5cywgbm90IG9ubHkgd2hlbiBzdGFydCBhbmQgZW5kIG9mIFZpc3VhbCBtb2RlIGFyZSBlcXVhbC4KKworV2hlbiB1c2luZyAidml3IiBvbiBhIHNpbmdsZS1sZXR0ZXIgd29yZCBhbmQgJ3NlbGVjdGlvbicgaXMgZXhjbHVzaXZlLCB3b3VsZAorbm90IGluY2x1ZGUgdGhlIHdvcmQuCisKK1doZW4gZm9ybWF0dGluZyB0ZXh0IGZyb20gSW5zZXJ0IG1vZGUsIHVzaW5nIENUUkwtTywgY291bGQgbWVzcyB1cCB1bmRvCitpbmZvcm1hdGlvbi4KKworV2hpbGUgd3JpdGluZyBhIGZpbGUgKGFsc28gZm9yIHRoZSBiYWNrdXAgZmlsZSkgdGhlcmUgd2FzIG5vIGNoZWNrIGZvciBhbgoraW50ZXJydXB0IChoaXR0aW5nIENUUkwtQykuICBWaW0gY291bGQgaGFuZyB3aGVuIHdyaXRpbmcgYSBsYXJnZSBmaWxlIG92ZXIgYQorc2xvdyBuZXR3b3JrLCBhbmQgbW92aW5nIHRoZSBtb3VzZSBkaWRuJ3QgbWFrZSBpdCBhcHBlYXIgKHdoZW4gJ21vdXNlaGlkZScgaXMKK3NldCkgYW5kIHRoZSBzY3JlZW4gd2Fzbid0IHVwZGF0ZWQgaW4gdGhlIEdVSS4gIEFsc28gYWxsb3cgaW50ZXJydXB0aW5nIHdoZW4KK3N5bmNpbmcgdGhlIHN3YXAgZmlsZSwgaXQgY2FuIHRha2UgYSBsb25nIHRpbWUuCisKK1doZW4gdXNpbmcgIjpta3Nlc3Npb24iIHdoaWxlIHRoZXJlIGlzIGhlbHAgd2luZG93LCBpdCB3b3VsZCBsYXRlciBiZSByZXN0b3JlZAordG8gdGhlIHJpZ2h0IGZpbGUgYnV0IG5vdCBtYXJrZWQgYXMgYSBoZWxwIGJ1ZmZlci4gICI6aGVscCIgd291bGQgdGhlbiBvcGVuCithbm90aGVyIHdpbmRvdy4gIE5vdyB1c2UgdGhlIHZhbHVlICJoZWxwIiBmb3IgJ2J1ZnR5cGUnIHRvIG1hcmsgYSBoZWxwIGJ1ZmZlci4KKworVGhlIHNlc3Npb24gZmlsZSBjb250YWluZWQgYWJzb2x1dGUgcGF0aCBuYW1lcyBpbiBvcHRpb24gdmFsdWVzLCB0aGF0IGRvZXNuJ3QKK3dvcmsgd2hlbiB0aGUgaG9tZSBkaXJlY3RvcnkgZGVwZW5kcyBvbiB0aGUgc2l0dWF0aW9uLiAgUmVwbGFjZSB0aGUgaG9tZQorZGlyZWN0b3J5IHdpdGggfi8gd2hlbiBwb3NzaWJsZS4KKworV2hlbiB1c2luZyAnc2hvd2JyZWFrJyBhIFRBQiBqdXN0IGFmdGVyIHRoZSBzaG93biBicmVhayB3b3VsZCBub3QgYmUgY291bnRlZAorY29ycmVjdGx5LCB0aGUgY3Vyc29yIHdvdWxkIGJlIHBvc2l0aW9uZWQgd3JvbmcuCisKK1dpdGggJ3Nob3dicmVhaycgc2V0IHRvICItLS0+IiBvciAiLS0tLS0tLT4iIGFuZCAnc3RzJyBzZXQgdG8gNCwgaW5zZXJ0aW5nCit0YWJzIGRpZCBub3Qgd29yayByaWdodC4gIENvdWxkIGNhdXNlIGEgY3Jhc2guICBCYWNrc3BhY2luZyB3YXMgYWxzbyB3cm9uZywKK2NvdWxkIGdldCBzdHVjayBhdCBhIGxpbmUgYnJlYWsuCisKK1dpbjMyOiBjcmFzaGVkIHdoZW4gdGVhcmluZyBvZmYgYSBtZW51IHdpdGggb3ZlciAzMDAgaXRlbXMuCisKK0dVSTogQSBtZW51IG9yIHRvb2xiYXIgaXRlbSB3b3VsZCBhcHBlYXIgd2hlbiBvbmx5IGEgdG9vbHRpcCB3YXMgZGVmaW5lZCBmb3IKK2l0LgorCitXaGVuICdzY3JvbGxvZmYnIGlzIG5vbi16ZXJvIGFuZCAiJCIgaXMgaW4gJ2Nwb3B0aW9ucycsIHVzaW5nICJzIiB3aGlsZSB0aGUKK2xhc3QgbGluZSBvZiB0aGUgZmlsZSBpcyB0aGUgZmlyc3QgbGluZSBvbiBzY3JlZW4sIHRoZSB0ZXh0IHdhc24ndCBkaXNwbGF5ZWQuCisKK1doZW4gcnVubmluZyAiYXV0b2NvbmYiLCBkZWxldGUgdGhlIGNvbmZpZ3VyZSBjYWNoZSB0byBmb3JjZSBzdGFydGluZyBjbGVhbmx5Cit3aGVuIGNvbmZpZ3VyZSBpcyBydW4gYWdhaW4uCisKK1doZW4gY2hhbmdpbmcgdGhlIE5vcm1hbCBjb2xvcnMgZm9yIGN0ZXJtLCB0aGUgdmFsdWUgb2YgJ2JhY2tncm91bmQnIHdhcworY2hhbmdlZCBldmVuIHdoZW4gdGhlIEdVSSB3YXMgdXNlZC4KKworVGhlIHdhcm5pbmcgZm9yIGEgbWlzc2luZyB2aW1ydW4uZXhlIHdhcyBhbHdheXMgZ2l2ZW4gb24gc3RhcnR1cCwgYnV0IHNvbWUKK3Blb3BsZSBqdXN0IGVkaXRpbmcgYSBmaWxlIGRvbid0IG5lZWQgdG8gYmUgYm90aGVyZWQgYnkgaXQuICBPbmx5IHNob3cgaXQgd2hlbgordmltcnVuIHdvdWxkIGJlIHVzZWQuCisKK1doZW4gdXNpbmcgIiUiIGluIGEgbXVsdGlieXRlIHRleHQgaXQgY291bGQgZ2V0IGNvbmZ1c2VkIGJ5IHRyYWlsYnl0ZXMgdGhhdAorbWF0Y2guIChNdXJhb2thIFRhcm8pCisKK1Rlcm1jYXAgZW50cnkgZm9yIFJpc2NPUyB3YXMgd3JvbmcsIHVzaW5nIDcgYW5kIDggaW4gb2N0YWwgY29kZXMuCisKK0F0aGVuYTogVGhlIHRpdGxlIG9mIGEgZGlhbG9nIHdpbmRvdyBhbmQgdGhlIGZpbGUgc2VsZWN0b3Igd2luZG93IHdlcmUgbm90CitzZXQuIChEYXZpZCBIYXJyaXNvbikKKworVGhlICJodG1sTGluayIgaGlnaGxpZ2h0IGdyb3VwIHNwZWNpZmllZCBjb2xvcnMsIHdoaWNoIGdpdmVzIHByb2JsZW1zIHdoZW4KK3VzaW5nIGEgY29sb3Igc2NoZW1lLiAgQWRkZWQgdGhlICJVbmRlcmxpbmVkIiBoaWdobGlnaHQgZ3JvdXAgZm9yIHRoaXMuCisKK0FmdGVyIHVzaW5nICI6aW5zZXJ0IiBvciAiOmNoYW5nZSIgdGhlICdbIG1hcmsgd291bGQgYmUgb25lIGxpbmUgdG9vIGxvdy4KKworV2hlbiBsb29raW5nIGZvciB0aGUgZmlsZSBuYW1lIGFmdGVyIGEgbWF0Y2ggd2l0aCAnaW5jbHVkZScgb25lIGNoYXJhY3RlciB3YXMKK3NraXBwZWQuICBTYW1lIGZvciAnZGVmaW5lJy4KKworV2luMzIgYW5kIERKR1BQOiBXaGVuIGVkaXRpbmcgYSBmaWxlIHdpdGggYSBzaG9ydCBuYW1lIGluIGEgZGlyZWN0b3J5LCBhbmQKK2VkaXRpbmcgdGhlIHNhbWUgZmlsZSBidXQgdXNpbmcgdGhlIGxvbmcgbmFtZSwgd291bGQgZW5kIHVwIHdpdGggdHdvIGJ1ZmZlcnMKK29uIHRoZSBzYW1lIGZpbGUuCisKKyJnZiIgb24gYSBmaWxlbmFtZSB0aGF0IHN0YXJ0cyB3aXRoICIuLi8iIG9ubHkgd29ya2VkIHdoZW4gdGhlIGZpbGUgYmVpbmcKK2VkaXRlZCBpcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBBbiBpbmNsdWRlIGZpbGUgc2VhcmNoIGRpZG4ndCB3b3JrCitwcm9wZXJseSBmb3IgZmlsZXMgc3RhcnRpbmcgd2l0aCAiLi4vIiBvciAiLiIuICBOb3cgc2VhcmNoIGJvdGggcmVsYXRpdmUgdG8KK3RoZSBmaWxlIGFuZCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKK1doZW4gJ3ByaW50aGVhZGVyJywgJ3RpdGxlc3RyaW5nJywgJ2ljb25zdHJpbmcnLCAncnVsZXJmb3JtYXQnIG9yICdzdGF0dXNsaW5lJworY29udGFpbmVkICIleyIgYnV0IG5vIGZvbGxvd2luZyAifSIgbWVtb3J5IHdhcyBjb3JydXB0ZWQgYW5kIGEgY3Jhc2ggY291bGQKK2hhcHBlbi4KKworIjowYXBwZW5kIiBhbmQgdGhlbiBpbnNlcnRpbmcgdHdvIGxpbmVzIGRpZCBub3QgcmVkcmF3IHRoZSBibGFuayBsaW5lcyB0aGF0Cit3ZXJlIHNjcm9sbGVkIGJhY2sgZG93bi4KKworV2hlbiB1c2luZyBpbnNlcnQgbW9kZSBjb21wbGV0aW9uIGluIGEgbmFycm93IHdpbmRvdywgdGhlIG1lc3NhZ2UgY2F1c2VkIGEKK3Njcm9sbCB1cC4gIE5vdyBzaG9ydGVuIHRoZSBtZXNzYWdlIGlmIGl0IGRvZXNuJ3QgZml0IGFuZCBhdm9pZCB3cml0aW5nIHRoZQorcnVsZXIgb3ZlciB0aGUgbWVzc2FnZS4KKworWElNIHN0aWxsIGRpZG4ndCB3b3JrIGNvcnJlY3RseSBvbiBzb21lIHN5c3RlbXMsIGVzcGVjaWFsbHkgU0dJL0lSSVguICBBZGRlZAordGhlICdpbWRpc2FibGUnIG9wdGlvbiwgd2hpY2ggaXMgc2V0IGJ5IGRlZmF1bHQgZm9yIHRoYXQgc3lzdGVtLgorCitQYXRjaCA2LjBhdy4wMDgKK1Byb2JsZW06ICAgIFdoZW4gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGZpbGUgbmFtZSBpcyBvdmVyIDEyNywgdGhlIEJ1ZmZlcnMKKwkgICAgbWVudSBlbnRyeSB3b3VsZCBnZXQgYSBuZWdhdGl2ZSBwcmlvcml0eSBhbmQgY2F1c2UgcHJvYmxlbXMuCitTb2x1dGlvbjogICBSZWR1Y2UgdGhlIG11bHRpcGxpZXIgZm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2hlbiBjb21wdXRpbmcKKwkgICAgdGhlIGhhc2ggdmFsdWUgZm9yIGEgQnVmZmVycyBtZW51IGVudHJ5LgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMGF3LjAxMAorUHJvYmxlbTogICAgV2luMzI6ICI6YnJvd3NlIGVkaXQgZGlyL2RpciIgZGlkbid0IHdvcmsuIChWaWthcykKK1NvbHV0aW9uOiAgIENoYW5nZSBzbGFzaGVzIHRvIGJhY2tzbGFzaGVzIGluIHRoZSBkaXJlY3RvcnkgcGFzc2VkIHRvIHRoZSBmaWxlCisJICAgIGJyb3dzZXIuCitGaWxlczoJICAgIHNyYy9ndWlfdzQ4LmMKKworQXRoZW5hIGZpbGUgYnJvd3NlcjogT24gc29tZSBzeXN0ZW1zIHdjc3RvbWJzKCkgY2FuJ3QgYmUgdXNlZCB0byBnZXQgdGhlCitsZW5ndGggb2YgYSBtdWx0aS1ieXRlIHN0cmluZy4gIFVzZSB0aGUgbWF4aW11bSBsZW5ndGggdGhlbi4gKFlhc3VoaXJvCitNYXRzdW1vdG8pCisKK1BhdGNoIDYuMGF4LjAwMQorUHJvYmxlbTogICAgV2hlbiAncGF0Y2htb2RlJyBpcyBzZXQsIGFwcGVuZGluZyB0byBhIGZpbGUgZ2l2ZXMgYW4gZW1wdHkKKwkgICAgb3JpZ2luYWwgZmlsZS4gKEVkIFJhbHN0b24pCitTb2x1dGlvbjogICBBbHNvIG1ha2UgYSBiYWNrdXAgY29weSB3aGVuIGFwcGVuZGluZyBhbmQgJ3BhdGNobW9kZScgaXMgc2V0LgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4wYXguMDAyCitQcm9ibGVtOiAgICBXaGVuICdwYXRjaG1vZGUnIGlzIHNldCwgYXBwZW5kaW5nIHRvIGEgY29tcHJlc3NlZCBmaWxlIGdpdmVzIGFuCisJICAgIHVuY29tcHJlc3NlZCBvcmlnaW5hbCBmaWxlLiAoRWQgUmFsc3RvbikKK1NvbHV0aW9uOiAgIENyZWF0ZSB0aGUgb3JpZ2luYWwgZmlsZSBiZWZvcmUgZGVjb21wcmVzc2luZy4KK0ZpbGVzOgkgICAgcnVudGltZS9wbHVnaW4vZ3ppcC52aW0KKworUGF0Y2ggNi4wYXguMDA1CitQcm9ibGVtOiAgICBBdGhlbmEgZmlsZSBzZWxlY3RvciBrZWVwcyB0aGUgdGl0bGUgb2YgdGhlIGZpcnN0IGludm9jYXRpb24uCitTb2x1dGlvbjogICBTZXQgdGhlIHRpdGxlIGVhY2ggdGltZSB0aGUgZmlsZSBzZWxlY3RvciBpcyBvcGVuZWQuIChEYXZpZAorCSAgICBIYXJyaXNvbikKK0ZpbGVzOgkgICAgc3JjL2d1aV9hdF9mcy5jCisKK1BhdGNoIDYuMGF4LjAwNworUHJvYmxlbTogICAgV2hlbiB1c2luZyBHUE0gKG1vdXNlIGRyaXZlciBpbiBhIExpbnV4IGNvbnNvbGUpIGEgZG91YmxlIGNsaWNrIGlzCisJICAgIGludGVycHJldGVkIGFzIGEgc2Nyb2xsIHdoZWVsIGNsaWNrLgorU29sdXRpb246ICAgQ2hlY2sgaWYgR1BNIGlzIGJlaW5nIHVzZWQgd2hlbiBkZWNpZGluZyBpZiBhIG1vdXNlIGV2ZW50IGlzIGZvcgorCSAgICB0aGUgc2Nyb2xsIHdoZWVsLgorRmlsZXM6CSAgICBzcmMvdGVybS5jCisKK1BhdGNoIDYuMGF4LjAxMAorUHJvYmxlbTogICAgVGhlIEVkaXQuU2F2ZSBtZW51IGFuZCB0aGUgU2F2ZSB0b29sYmFyIGJ1dHRvbiBkaWRuJ3Qgd29yayB3aGVuCisJICAgIHRoZSBidWZmZXIgaGFzIG5vIGZpbGUgbmFtZS4KK1NvbHV0aW9uOiAgIFVzZSBhIGZpbGUgYnJvd3NlciB0byBhc2sgZm9yIGEgZmlsZSBuYW1lLiAgQWxzbyBmaXggdGhlIHRvb2xiYXIKKwkgICAgRmluZCBpdGVtIGluIFZpc3VhbCBtb2RlLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMGF4LjAxMgorUHJvYmxlbTogICAgV2hlbiAnY3BvcHRpb25zJyBjb250YWlucyAiJCIsIGJyZWFraW5nIGEgbGluZSBmb3IgJ3RleHR3aWR0aCcKKwkgICAgZG9lc24ndCByZWRyYXcgcHJvcGVybHkuIChTdGVmYW4gU2NodWx6ZSkKK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgZG9sbGFyIGJlZm9yZSBicmVha2luZyB0aGUgbGluZS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjBheC4wMTQKK1Byb2JsZW06ICAgIFdpbjMyOiBPbiBXaW5kb3dzIDk4ICI6bWFrZSAtZiBmaWxlIiBkb2Vzbid0IHdvcmsgd2hlbiAnc2hlbGwnIGlzCisJICAgICJjb21tYW5kLmNvbSIgYW5kICdtYWtlcHJnJyBpcyAibm1ha2UiLiAgVGhlIGVudmlyb25tZW50IGlzbid0CisJICAgIHBhc3NlZCBvbiB0byAibm1ha2UiLgorU29sdXRpb246ICAgQWxzbyB1c2UgdmltcnVuLmV4ZSB3aGVuIHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQgb2YgYSBjb21tYW5kLgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjBheC4wMTYKK1Byb2JsZW06ICAgIFRoZSB2ZXJzaW9uIG51bWJlciB3YXMgcmVwb3J0ZWQgd3JvbmcgaW4gdGhlIGludHJvIHNjcmVlbi4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIHZlcnNpb24gbnVtYmVyIHdpdGggdHdvIGFkZGl0aW9uYWwgbGV0dGVycy4KK0ZpbGVzOgkgICAgc3JjL3ZlcnNpb24uYworCitQYXRjaCA2LjBheC4wMTkKK1Byb2JsZW06ICAgIFdoZW4gc2Nyb2xsaW5nIGEgd2luZG93IHdpdGggZm9sZHMgdXB3YXJkcywgc3dpdGNoaW5nIHRvIGFub3RoZXIKKwkgICAgdmVydGljYWxseSBzcGxpdCB3aW5kb3cgYW5kIGJhY2sgbWF5IG5vdCB1cGRhdGUgdGhlIHNjcm9sbGJhci4KK1NvbHV0aW9uOiAgIExpbWl0IHdfYm90bGluZSB0byB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBidWZmZXIgcGx1cyBvbmUuCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1ZFUlNJT04gNi4xCQkJCQkJKnZlcnNpb24tNi4xKgorCitUaGlzIHNlY3Rpb24gaXMgYWJvdXQgaW1wcm92ZW1lbnRzIG1hZGUgYmV0d2VlbiB2ZXJzaW9uIDYuMCBhbmQgNi4xLgorCitUaGlzIGlzIGEgYnVnLWZpeCByZWxlYXNlLCB0aGVyZSBhcmUgbm90IHJlYWxseSBhbnkgbmV3IGZlYXR1cmVzLgorCisKK0NoYW5nZWQJCQkJCQkJKmNoYW5nZWQtNi4xKgorLS0tLS0tLQorCisnaW1pbnNlcnQnIGFuZCAnaW1zZWFyY2gnIGFyZSBubyBsb25nZXIgc2V0IGFzIGEgc2lkZSBlZmZlY3Qgb2YgZGVmaW5pbmcgYQorbGFuZ3VhZ2UtbWFwcGluZyB1c2luZyAiOmxtYXAiLgorCisKK0FkZGVkCQkJCQkJCSphZGRlZC02LjEqCistLS0tLQorCitTeW50YXggZmlsZXM6CithbXBsCQlBTVBMIChEYXZpZCBLcmllZikKK2FudAkJQW50IChKb2hhbm5lcyBaZWxsbmVyKQorYmFhbgkJQmFhbiAoSGVyIHZhbiBkZSBWbGllcnQpCitjcwkJQyMgKEpvaGFubmVzIFplbGxuZXIpCitsaWZlbGluZXMJTGlmZWxpbmVzIChQYXRyaWNrIFRleGllcikKK2xzY3JpcHQJCUxvdHVzU2NyaXB0IChUYXJ5biBFYXN0KQorbW9vCQlNT08gKFRpbW8gRnJlbmF5KQorbnNpcwkJTlNJUyAoQWxleCBKYWt1c2hldikKK3BwZAkJUG9zdHNjcmlwdCBQcmludGVyIERlc2NyaXB0aW9uIChCam9lcm4gSmFja2UpCitycGwJCVJQTC8yIChKb2VsIEJlcnRyYW5kKQorc2NpbGFiCQlTY2lsYWIgKEJlbm9pdCBIYW1lbGluKQorc3BsaW50CQlTcGxpbnQgKFJhbGYgV2lsZGVuaHVlcykKK3NxbGoJCVNRTEogKEFuZHJlYXMgRmlzY2hiYWNoKQord3ZkaWFsCQlXdkRpYWwgKFByYWhsYWQgVmFpZHlhbmF0aGFuKQoreGY4NmNvbmYJWEZyZWU4NiBjb25maWcgKE5pa29sYWkgV2VpYnVsbCkKK3htb2RtYXAJCVhtb2RtYXAgKE5pa29sYWkgV2VpYnVsbCkKK3hzbHQJCVhzbHQgKEpvaGFubmVzIFplbGxuZXIpCittb25rCQlNb25rIChNaWtlIExpdGhlcmxhbmQpCit4c2QJCVhzZCAoSm9oYW5uZXMgWmVsbG5lcikKK2NkbAkJQ0RMIChSYXVsIFNlZ3VyYSBBY2V2ZWRvKQorc2VuZHByCQlTZW5kLXByIChIZW5kcmlrIFNjaG9seikKKworQWRkZWQgaW5kZW50IGZpbGUgZm9yIFNjaGVtZS4gKERvcmFpIFNpdGFyYW0pCitBZGRlZCBpbmRlbnQgZmlsZSBmb3IgUHJvbG9nLiAoS29udHJhIEdlcmdlbHkpCitBZGRlZCBpbmRlbnQgZmlsZSBmb3IgUG92cmF5IChEYXZpZCBOZWNhcykKK0FkZGVkIGluZGVudCBmaWxlIGZvciBJREwgKEFsZWtzYW5kYXIgSmVsZW5haykKK0FkZGVkIEMjIGluZGVudCBhbmQgZnRwbHVnaW4gc2NyaXB0cy4KKworQWRkZWQgVWtyYWluaWFuIG1lbnUgdHJhbnNsYXRpb25zLiAoQm9oZGFuIFZsYXN5dWspCitBZGRlZCBBU0NJSSB2ZXJzaW9uIG9mIHRoZSBDemVjaCBtZW51cy4gKEppcmkgQnJlemluYSkKKworQWRkZWQgU2ltcGxpZmllZCBDaGluZXNlIHRyYW5zbGF0aW9uIG9mIHRoZSB0dXRvci4gKE1lbmRlbCBMIENoYW4pCisKK0FkZGVkIFJ1c3NpYW4ga2V5bWFwIGZvciB5YXdlcnR5IGtleWJvYXJkLgorCitBZGRlZCBhbiBleHBsYW5hdGlvbiBvZiB1c2luZyB0aGUgdmltcmMgZmlsZSBpbiB0aGUgdHV0b3IuCitDaGFuZ2VkIHR1dG9yLnZpbSB0byBnZXQgdGhlIHJpZ2h0IGVuY29kaW5nIGZvciB0aGUgVGFpd2FpbmVzZSB0dXRvci4KKworQWRkZWQgUnVzc2lhbiB0dXRvci4gKEFuZHJleSBLaXNlbGV2KQorQWRkZWQgUG9saXNoIHR1dG9yLiAoTWlrb2xhaiBNYWNob3dza2kpCisKK0FkZGVkIGRhcmtibHVlIGNvbG9yIHNjaGVtZS4gKEJvaGRhbiBWbGFzeXVrKQorCitXaGVuIHBhY2tpbmcgdGhlIGRvcyBsYW5ndWFnZSBhcmNoaXZlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlIC5tbyBmaWxlcwordGhhdCBhcmUgcmVxdWlyZWQuCisKK0ltcHJvdmVkIE5TSVMgc2NyaXB0IHRvIHN1cHBvcnQgTlNJUyAxODAuICBBZGRlZCBpY29ucyBmb3IgdGhlCitlbmFibGVkL2Rpc2FibGVkIHN0YXR1cy4gKE1pcmVrIFBydWNobmlrKQorCitjcDEyNTAgdmVyc2lvbiBvZiB0aGUgU2xvdmFrIG1lc3NhZ2UgdHJhbnNsYXRpb25zLgorCitDb21waWxlciBwbHVnaW5zIGZvciBJUklYIGNvbXBpbGVycy4gKERhdmlkIEhhcnJpc29uKQorCisKK0ZpeGVkCQkJCQkJCSpmaXhlZC02LjEqCistLS0tLQorCitUaGUgbGljZW5zZSB0ZXh0IHdhcyB1cGRhdGVkIHRvIG1ha2UgdGhlIG1lYW5pbmcgY2xlYXJlciBhbmQgbWFrZSBpdAorY29tcGF0aWJsZSB3aXRoIHRoZSBHTlUgR1BMLiAgT3RoZXJ3aXNlIGRpc3RyaWJ1dG9ycyBoYXZlIGEgcHJvYmxlbSB3aGVuCitsaW5raW5nIFZpbSB3aXRoIGEgR1BMJ2VkIGxpYnJhcnkuCisKK1doZW4gaW5zdGFsbGluZyB0aGUgImxlc3Muc2giIHNjcmlwdCBpdCB3YXMgbm90IG1hZGUgZXhlY3V0YWJsZS4gKENodWNrIEJlcmcpCisKK1dpbjMyOiBUaGUgIjkiIGtleSBvbiB0aGUgbnVtcGFkIHdhc24ndCB3b3JraW5nLiAoSnVsaWFuIEtpbnJhaWQpCisKK1RoZSBOU0lTIGluc3RhbGwgc2NyaXB0IGRpZG4ndCB3b3JrIHdpdGggTlNJUyAxLjgwIG9yIGxhdGVyLiAgQWxzbyBhZGQKK1ZpbS1zcGVjaWZpYyBpY29ucy4gKFBydWNobmlrKQorCitUaGUgc2NyaXB0IGZvciBjb252ZXJzaW9uIHRvIEhUTUwgY29udGFpbmVkIGFuICJpZiIgaW4gdGhlIHdyb25nIHBsYWNlLgorKE1pY2hhZWwgR2VkZGVzKQorCitBbGxvdyB1c2luZyAiOmFzY2lpIiBpbiB0aGUgc2FuZGJveCwgaXQncyBoYXJtbGVzcy4KKworUmVtb3ZlZCBjcmVhdCgpIGZyb20gb3NkZWYyLmguaW4sIGl0IHdhc24ndCB1c2VkIGFuZCBtYXkgY2F1c2UgYSBwcm9ibGVtIHdoZW4KK2l0J3MgcmVkZWZpbmVkIHRvIGNyZWF0NjQoKS4KKworVGhlIHRleHQgZmlsZXMgaW4gdGhlIFZpc1ZpbSBkaXJlY3Rvcnkgd2VyZSBpbiAiZG9zIiBmb3JtYXQuICBUaGlzIGNhdXNlZAorcHJvYmxlbXMgd2hlbiBhcHBseWluZyBhIHBhdGNoLiAgTm93IGtlZXAgdGhlbSBpbiAidW5peCIgZm9ybWF0IGFuZCBjb252ZXJ0Cit0aGVtIHRvICJkb3MiIGZvcm1hdCBvbmx5IGZvciB0aGUgUEMgYXJjaGl2ZXMuCisKK0FkZCBydWJ5IGZpbGVzIHRvIHRoZSBkb3Mgc291cmNlIGFyY2hpdmUsIHRoZXkgY2FuIGJlIHVzZWQgYnkgTWFrZV9tdmMubWFrLgorKE1pcmVrIFBydWNobmlrKQorCisiY3AgLWYiIGRvZXNuJ3Qgd29yayBvbiBhbGwgc3lzdGVtcy4gIENoYW5nZSAiY3AgLWYiIGluIHRoZSBNYWtlZmlsZSB0byAicm0KKy1mIiBhbmQgImNwIi4KKworRGlkbid0IGNvbXBpbGUgb24gYSBDb21wYXEgVGFuZGVtIEhpbWFsYXlhIE9TUy4gKE1pY2hhZWwgQS4gQmVuemluZ2VyKQorCitUaGUgR1RLIGZpbGUgc2VsZWN0aW9uIGRpYWxvZyBkaWRuJ3QgaW5jbHVkZSB0aGUgIkNyZWF0ZSBEaXIiLCAiRGVsZXRlIEZpbGUiCithbmQgIlJlbmFtZSBGaWxlIiBidXR0b25zLgorCitXaGVuIGRvaW5nICI6YnJvd3NlIHNvdXJjZSIgdGhlIGRpYWxvZyBoYXMgdGhlIHRpdGxlICJSdW4gTWFjcm8iLiAgQmV0dGVyCit3b3VsZCBiZSAiU291cmNlIFZpbSBzY3JpcHQiLiAoWWVnYXBwYW4gTGFrc2htYW5hbikKKworV2luMzI6IERvbid0IHVzZSB0aGUgcHJpbnRlciBmb250IGFzIGRlZmF1bHQgZm9yIHRoZSBmb250IGRpYWxvZy4KKworIm1ha2UgZG9zbGFuZyIgZGlkbid0IHdvcmsgd2hlbiBjb25maWd1cmUgZGlkbid0IHJ1biAoeWV0KS4gIFNldCAkTUFLRU1PIHRvCisieWVzIi4gKE1pcmVrIFBydWNobmlrKQorCitUaGUgVG9vbEJhciBUYWdKdW1wIGl0ZW0gdXNlZCAiZ10iLCB3aGljaCBwcm9tcHRzIGZvciBhIHNlbGVjdGlvbiBldmVuIHdoZW4KK3RoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZy4gIFVzZSAiZzxDLV0+IiBpbnN0ZWFkLgorCitUaGUgbWluZyBtYWtlZmlsZSBmb3IgbWVzc2FnZSB0cmFuc2xhdGlvbnMgZGlkbid0IGhhdmUgdGhlIHJpZ2h0IGxpc3Qgb2YKK2ZpbGVzLgorCitUaGUgTVMtV2luZG93cyAzLjEgdmVyc2lvbiBjb21wbGFpbnMgYWJvdXQgTElCSU5UTC5ETEwgbm90IGZvdW5kLiAgQ29tcGlsZQordGhpcyB2ZXJzaW9uIHdpdGhvdXQgbWVzc2FnZSB0cmFuc2xhdGlvbnMuCisKK1RoZSBCb3JsYW5kIDUgbWFrZWZpbGUgY29udGFpbmVkIGEgY2hlY2sgZm9yIFJ1Ynkgd2hpY2ggaXMgbm8gbG9uZ2VyIG5lZWRlZC4KK1RoZSBVUkxzIGZvciB0aGUgVENMIGxpYnJhcnkgd2FzIG91dGRhdGVkLiAoRGFuIFNoYXJwKQorCitUaGUgZXZpc28ucHMgZmlsZSB3YXMgbWlzc2luZyBmcm9tIHRoZSBET1MgcnVudGltZSBhcmNoaXZlLCBpdCdzIG5lZWRlZCBmb3IKK3ByaW50aW5nIFBvc3RTY3JpcHQgaW4gdGhlIDMyYml0IERPUyB2ZXJzaW9uLgorCitJbiBtZW51IGZpbGVzICI6c2NyaXB0ZW5jb2RpbmciIHdhcyB1c2VkIGluIGEgd3Jvbmcgd2F5IGFmdGVyIHBhdGNoIDYuMWEuMDMyCitOb3cgdXNlICI6c2NyaXB0ZW5jb2RpbmciIGluIHRoZSBmaWxlIHdoZXJlIHRoZSB0cmFuc2xhdGlvbnMgYXJlIGdpdmVuLiAgRG8KK3RoZSBzYW1lIGZvciBhbGwgbWVudXMgaW4gbGF0aW4xIGVuY29kaW5nLgorCitJbmNsdWRlZCBhIGxvdCBvZiBmaXhlcyBmb3IgdGhlIE1hY2ludG9zaCwgbW9zdGx5IHRvIG1ha2UgaXQgd29yayB3aXRoIENhcmJvbi4KKyhEYW55IFN0QW1hbnQsIEF4ZWwgS2llbGhvcm4sIEJlbmppIEZpc2hlcikKKworSW1wcm92ZWQgdGhlIHZpbXR1dG9yIHNoZWxsIHNjcmlwdCB0byB1c2UgJFRNUERJUiB3aGVuIGl0IGV4aXN0cywgYW5kIGRlbGV0ZQordGhlIGNvcGllZCBmaWxlIHdoZW4gZXhpdGluZyBpbiBhbiBhYm5vcm1hbCB3YXkuIChNYXggSXNjaGVua28pCisKK1doZW4gImljb252LmRsbCIgY2FuJ3QgYmUgZm91bmQsIHRyeSB1c2luZyAibGliaWNvbnYuZGxsIi4KKworV2hlbiBlbmNyeXB0aW9uIGlzIHVzZWQsIGZpbHRlcmluZyB3aXRoIGEgc2hlbGwgY29tbWFuZCB3YXNuJ3QgcG9zc2libGUuCisKK0RKR1BQOiAiOmNkIGM6IiBhbHdheXMgZmFpbGVkLCBjYW4ndCBnZXQgcGVybWlzc2lvbnMgZm9yICJjOiIuCitXaW4zMjogIjpjZCBjOi8iIGZhaWxlZCBpZiB0aGUgcHJldmlvdXMgY3VycmVudCBkaXJlY3Rvcnkgb24gYzogaGFkIGJlY29tZQoraW52YWxpZC4KKworREpHUFA6IFNoaWZ0LURlbCBhbmQgRGVsIGJvdGggcHJvZHVjZSBcMzE2XDEyMy4gIERlZmF1bHQgbWFwcGluZyBmb3IgRGVsIGlzCit3cm9uZy4gIERpc2FibGVkIGl0LgorCitEZXBlbmRlbmNpZXMgb24gaGVhZGVyIGZpbGVzIGluIE1pbmdXIG1ha2VmaWxlIHdhcyB3cm9uZy4KKworV2luMzI6IERvbid0IHVzZSBBQ0wgc3R1ZmYgZm9yIE1TVkMgNC4yLCBpdCdzIG5vdCBzdXBwb3J0ZWQuIChXYWx0ZXIgQnJpc2NvZSkKKworV2luMzIgd2l0aCBCb3JsYW5kOiBiY2MuY2ZnIHdhcyBjYWNoaW5nIHRoZSB2YWx1ZSBmb3IgJChCT1IpLCBidXQgcHJvdmlkaW5nIGEKK2RpZmZlcmVudCBhcmd1bWVudCB0byBtYWtlIGRpZG4ndCByZWdlbmVyYXRlIGl0LgorCitXaW4zMiB3aXRoIE1TVkM6IE1ha2VfaXZjLm1hayBnZW5lcmF0ZXMgYSBuZXcgaWZfb2xlLmggaW4gYSBkaWZmZXJlbnQKK2RpcmVjdG9yeSwgdGhlIGlmX29sZS5oIGluIHRoZSBzcmMgZGlyZWN0b3J5IG1heSBiZSB1c2VkIGluc3RlYWQuICBEZWxldGUgdGhlCitkaXN0cmlidXRlZCBmaWxlLgorCitXaGVuIGEgd2luZG93IGlzIHZlcnRpY2FsbHkgc3BsaXQgYW5kIHRoZW4gIjpiYWxsIiBpcyB1c2VkLCB0aGUgd2luZG93IGxheW91dAoraXMgbWVzc2VkIHVwLCBjYW4gY2F1c2UgYSBjcmFzaC4gKE11cmFva2EgVGFybykKKworV2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0LCB1c2luZyBGaWxlL05ldyBtZW51IGFuZCB0aGVuIGRvdWJsZSBjbGlja2luZywgImkiIGlzCitzb29uIGluc2VydGVkLiAoTWVybGluIEhhbnNlbikKKworV2hlbiBTZWxlY3QgbW9kZSBpcyBhY3RpdmUgYW5kIHVzaW5nIHRoZSBCdWZmZXJzIG1lbnUgdG8gc3dpdGNoIHRvIGFub3RoZXIKK2J1ZmZlciwgYW4gb2xkIHNlbGVjdGlvbiBjb21lcyBiYWNrLiAgUmVzZXQgVklzdWFsX3Jlc2VsZWN0IGZvciBhICI6YnVmZmVyIgorY29tbWFuZC4KKworV2hlbiBTZWxlY3QgbW9kZSBpcyBhY3RpdmUgYW5kICdpbnNlcnRtb2RlJyBpcyBzZXQsIHVzaW5nIHRoZSBCdWZmZXJzIG1lbnUgdG8KK3N3aXRjaCB0byBhbm90aGVyIGJ1ZmZlciwgZGlkIG5vdCByZXR1cm4gdG8gSW5zZXJ0IG1vZGUuICBNYWtlIHN1cmUKKyJyZXN0YXJ0X2VkaXQiIGlzIHNldC4KKworV2hlbiBkb3VibGUgY2xpY2tpbmcgb24gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIHdvcmQgd2hpbGUgJ3NlbGVjdGlvbicgaXMKKyJleGNsdXNpdmUiIGRpZG4ndCBzZWxlY3QgdGhhdCB3b3JkLgorCisKK1BhdGNoIDYuMC4wMDEKK1Byb2JsZW06ICAgIExvYWRpbmcgdGhlIHNoLnZpbSBzeW50YXggZmlsZSBjYXVzZXMgZXJyb3IgbWVzc2FnZXMgLiAoQ29yaW5uYQorCSAgICBWaW5zY2hlbikKK1NvbHV0aW9uOiAgIEFkZCBhbiAiaWYiLiAoQ2hhcmxlcyBDYW1wYmVsbCkKK0ZpbGVzOgkgICAgcnVudGltZS9zeW50YXgvc2gudmltCisKK1BhdGNoIDYuMC4wMDIKK1Byb2JsZW06ICAgIFVzaW5nIGEgJ0AnIGl0ZW0gaW4gJ3ZpbWluZm8nIGRvZXNuJ3Qgd29yay4gKE1hcmtvIExlaXBlcnQpCitTb2x1dGlvbjogICBBZGQgJ0AnIHRvIHRoZSBsaXN0IG9mIGFjY2VwdGVkIGl0ZW1zLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4wLjAwMworUHJvYmxlbTogICAgVGhlIGNvbmZpZ3VyZSBjaGVjayBmb3IgQUNMcyBvbiBBSVggZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgRml4IHRoZSB0ZXN0IHByb2dyYW0gc28gdGhhdCBpdCBjb21waWxlcy4gKFRvbWFzIE9ncmVuKQorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluLCBzcmMvYXV0by9jb25maWd1cmUKKworUGF0Y2ggNi4wLjAwNAorUHJvYmxlbTogICAgVGhlIGZpbmQvcmVwbGFjZSBkaWFsb2cgZG9lc24ndCByZXVzZSBhIHByZXZpb3VzIGFyZ3VtZW50CisJICAgIHByb3Blcmx5LgorU29sdXRpb246ICAgQWZ0ZXIgcmVtb3ZpbmcgYSAiXFYiIHRlcm1pbmF0ZSB0aGUgc3RyaW5nLiAoWndhbmUgTXdhaWthbWJvKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4wLjAwNQorUHJvYmxlbTogICAgSW4gSW5zZXJ0IG1vZGUsICJDVFJMLU8gOmxzIiBoYXMgYSBkZWxheSBiZWZvcmUgcmVkcmF3aW5nLgorU29sdXRpb246ICAgRG9uJ3QgZGVsYXkganVzdCBhZnRlciB3YWl0X3JldHVybigpIHdhcyBjYWxsZWQuICBBZGRlZCB0aGUKKwkgICAgZGlkX3dhaXRfcmV0dXJuIGZsYWcuCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmgsIHNyYy9tZXNzYWdlLmMsIHNyYy9ub3JtYWwuYywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMC4wMDYKK1Byb2JsZW06ICAgIFdpdGggYSB2ZXJ0aWNhbCBzcGxpdCwgJ251bWJlcicgc2V0IGFuZCAnc2Nyb2xsb2ZmJyBub24temVybywKKwkgICAgbWFraW5nIHRoZSB3aW5kb3cgd2lkdGggdmVyeSBzbWFsbCBjYXVzZXMgYSBjcmFzaC4gKE5pa2xhcworCSAgICBMaW5kc3Ryb20pCitTb2x1dGlvbjogICBDaGVjayBmb3IgYSB6ZXJvIHdpZHRoLgorRmlsZXM6CSAgICBzcmMvbW92ZS5jCisKK1BhdGNoIDYuMC4wMDcKK1Byb2JsZW06ICAgIFdoZW4gc2V0dGluZyAnZmlsZXR5cGUnIHdoaWxlIHRoZXJlIGlzIG5vIEZpbGVUeXBlIGF1dG9jb21tYW5kLCBhCisJICAgIGZvbGxvd2luZyAiOnNldGZpbGV0eXBlIiB3b3VsZCBzZXQgJ2ZpbGV0eXBlJyBhZ2Fpbi4gKEtvYnVzCisJICAgIFJldGllZikKK1NvbHV0aW9uOiAgIFNldCBkaWRfZmlsZXR5cGUgYWx3YXlzIHdoZW4gJ2ZpbGV0eXBlJyBoYXMgYmVlbiBzZXQuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjAuMDA4CitQcm9ibGVtOiAgICAnaW1kaXNhYmxlJyBpcyBtaXNzaW5nIGZyb20gdGhlIG9wdGlvbnMgd2luZG93LiAoTWljaGFlbCBOYXVtYW5uKQorU29sdXRpb246ICAgQWRkIGFuIGVudHJ5IGZvciBpdC4KK0ZpbGVzOgkgICAgcnVudGltZS9vcHR3aW4udmltCisKK1BhdGNoIDYuMC4wMDkKK1Byb2JsZW06ICAgIE5leHRzdGVwIGRvZXNuJ3QgaGF2ZSBTX0lTQkxLLiAoSm9obiBCZXBwdSkKK1NvbHV0aW9uOiAgIERlZmluZSBTX0lTQkxLIHVzaW5nIFNfSUZCTEsuCitGaWxlczoJICAgIHNyYy9vc191bml4LmgKKworUGF0Y2ggNi4wLjAxMAorUHJvYmxlbTogICAgVXNpbmcgImdmIiBvbiBhIGZpbGUgbmFtZSBzdGFydGluZyB3aXRoICIuLyIgb3IgIi4uLyIgaW4gYSBidWZmZXIKKwkgICAgd2l0aG91dCBhIG5hbWUgY2F1c2VzIGEgY3Jhc2guIChSb3kgTGV3aXMpCitTb2x1dGlvbjogICBDaGVjayBmb3IgYSBOVUxMIGZpbGUgbmFtZS4KK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4wLjAxMQorUHJvYmxlbTogICAgUHl0aG9uOiBBZnRlciByZXBsYWNpbmcgb3IgZGVsZXRpbmcgbGluZXMgZ2V0IGFuIG1sX2dldCBlcnJvci4KKwkgICAgKExlbyBMaXBlbGlzKQorU29sdXRpb246ICAgQWRqdXN0IHRoZSBjdXJzb3IgcG9zaXRpb24gZm9yIGRlbGV0ZWQgb3IgYWRkZWQgbGluZXMuCitGaWxlczoJICAgIHNyYy9pZl9weXRob24uYworCitQYXRjaCA2LjAuMDEyCitQcm9ibGVtOiAgICBQb2xpc2ggdHJhbnNsYXRpb25zIGNvbnRhaW4gcHJpbnRmIGZvcm1hdCBlcnJvcnMsIHRoaXMgY2FuIHJlc3VsdAorCSAgICBpbiBhIGNyYXNoIHdoZW4gdXNpbmcgb25lIG9mIHRoZW0uCitTb2x1dGlvbjogICBGaXggZm9yIHRyYW5zbGF0ZWQgbWVzc2FnZXMuIChNaWNoYWwgUG9saXRvd3NraSkKK0ZpbGVzOgkgICAgc3JjL3BvL3BsLnBvCisKK1BhdGNoIDYuMC4wMTMKK1Byb2JsZW06ICAgIFVzaW5nICI6c2lsZW50ISBjbWQiIHN0aWxsIGdpdmVzIHNvbWUgZXJyb3IgbWVzc2FnZXMsIGxpa2UgZm9yIGFuCisJICAgIGludmFsaWQgcmFuZ2UuIChTYWxtYW4gSGFsaW0pCitTb2x1dGlvbjogICBSZXNldCBlbXNnX3NpbGVudCBhZnRlciBjYWxsaW5nIGVtc2coKSBpbiBkb19vbmVfY21kKCkuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMC4wMTQKK1Byb2JsZW06ICAgIFdoZW4gJ21vZGlmaWFibGUnIGlzIG9mZiBhbmQgJ3ZpcnR1YWxlZGl0JyBpcyAiYWxsIiwgInJ4IiBvbiBhIFRBQgorCSAgICBzdGlsbCBjaGFuZ2VzIHRoZSBidWZmZXIuIChNdXJhb2thIFRhcm8pCitTb2x1dGlvbjogICBDaGVjayBpZiBzYXZpbmcgdGhlIGxpbmUgZm9yIHVuZG8gZmFpbHMuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjAuMDE1CitQcm9ibGVtOiAgICBXaGVuICdjcG9wdGlvbnMnIGluY2x1ZGVzICJTIiBhbmQgImZpbGV0eXBlIHBsdWdpbiBvbiIgaGFzIGJlZW4KKwkgICAgdXNlZCwgY2FuIGdldCBhbiBlcnJvciBmb3IgZGVsZXRpbmcgdGhlIGI6ZGlkX2Z0cGx1Z2luIHZhcmlhYmxlLgorCSAgICAoUmFscGggSGVuZGVyc29uKQorU29sdXRpb246ICAgT25seSBkZWxldGUgdGhlIHZhcmlhYmxlIHdoZW4gaXQgZXhpc3RzLgorRmlsZXM6CSAgICBydW50aW1lL2Z0cGx1Z2luLnZpbQorCitQYXRjaCA2LjAuMDE2CitQcm9ibGVtOiAgICBidWZucigpLCBidWZuYW1lKCkgYW5kIGJ1Zndpbm5yKCkgZG9uJ3QgZmluZCB1bmxpc3RlZCBidWZmZXJzIHdoZW4KKwkgICAgdGhlIGFyZ3VtZW50IGlzIGEgc3RyaW5nLiAoSGFyaSBLcmlzaG5hIERhcmEpCisJICAgIEFsc28gZm9yIHNldGJ1ZnZhcigpIGFuZCBnZXRidWZ2YXIoKS4KK1NvbHV0aW9uOiAgIEFsc28gZmluZCB1bmxpc3RlZCBidWZmZXJzLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMC4wMTcKK1Byb2JsZW06ICAgIFdoZW4gJ3R0eWJ1aWx0aW4nIGlzIHNldCBhbmQgYSBidWlsdGluIHRlcm1jYXAgZW50cnkgZGVmaW5lcyB0X0NvCisJICAgIGFuZCB0aGUgZXh0ZXJuYWwgb25lIGRvZXNuJ3QsIGl0IGdldHMgcmVzZXQgdG8gZW1wdHkuIChEYXZpZAorCSAgICBIYXJyaXNvbikKK1NvbHV0aW9uOiAgIE9ubHkgc2V0IHRfQ28gd2hlbiBpdCB3YXNuJ3Qgc2V0IHlldC4KK0ZpbGVzOgkgICAgc3JjL3Rlcm0uYworCitQYXRjaCA2LjAuMDE4CitQcm9ibGVtOiAgICBJbml0aWFsaXppbmcgJ2VuY29kaW5nJyBtYXkgY2F1c2UgYSBjcmFzaCB3aGVuIHNldGxvY2FsZSgpIGlzIG5vdAorCSAgICB1c2VkLiAoRGFueSBTdC1BbWFudCkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIE5VTEwgcG9pbnRlci4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4wLjAxOQorUHJvYmxlbTogICAgQ29udmVydGluZyBhIHN0cmluZyB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycyB0byBhIHByaW50YWJsZQorCSAgICBzdHJpbmcsIGUuZy4sIHdpdGggc3RydHJhbnMoKSwgbWF5IGNhdXNlIGEgY3Jhc2guIChUb21hcyBaZWxsZXJpbikKK1NvbHV0aW9uOiAgIENvcnJlY3RseSBjb21wdXRlIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBpbiB0cmFuc3N0cigpLgorRmlsZXM6CSAgICBzcmMvY2hhcnNldC5jCisKK1BhdGNoIDYuMC4wMjAKK1Byb2JsZW06ICAgIFdoZW4gb2J0YWluaW5nIHRoZSB2YWx1ZSBvZiBhIGdsb2JhbCB2YXJpYWJsZSBpbnRlcm5hbGx5LCBjb3VsZAorCSAgICBnZXQgdGhlIGZ1bmN0aW9uLWxvY2FsIHZhbHVlIGluc3RlYWQuICBBcHBsaWVzIHRvIHVzaW5nIDxMZWFkZXI+CisJICAgIGFuZCA8TG9jYWxMZWFkZXI+IGFuZCByZXNldHRpbmcgaGlnaGxpZ2h0aW5nIGluIGEgZnVuY3Rpb24uCitTb2x1dGlvbjogICBQcmVwZW5kICJnOiIgdG8gdGhlIHZhcmlhYmxlIG5hbWUuIChBcmljIEJsdW1lcikKK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jLCBzcmMvdGVybS5jCisKK1BhdGNoIDYuMC4wMjEKK1Byb2JsZW06ICAgIFRoZSAnY3Njb3BlcGF0aGNvbXAnIG9wdGlvbiBkaWRuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIENoYW5nZSBVU0VfQ1NDT1BFIHRvIEZFQVRfQ1NDT1BFLiAoTWFyayBGZW5nKQorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4wLjAyMgorUHJvYmxlbTogICAgV2hlbiB1c2luZyB0aGUgJ2xhbmdtYXAnIG9wdGlvbiwgdGhlIHNlY29uZCBjaGFyYWN0ZXIgb2YgYSBjb21tYW5kCisJICAgIHN0YXJ0aW5nIHdpdGggImciIGlzbid0IGFkanVzdGVkLgorU29sdXRpb246ICAgQXBwbHkgJ2xhbmdtYXAnIHRvIHRoZSBzZWNvbmQgY2hhcmFjdGVyLiAoQWxleCBLYXByYW5vZmYpCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjAuMDIzCitQcm9ibGVtOiAgICBMb2FkaW5nIHRoZSBsaGFza2VsbCBzeW50YXggZG9lc24ndCB3b3JrLiAoVGhvcmUgQi4gS2FybHNlbikKK1NvbHV0aW9uOiAgIFVzZSAiOnJ1bnRpbWUiIGluc3RlYWQgb2YgInNvdXJjZSIgdG8gbG9hZCBoYXNrZWxsLnZpbS4KK0ZpbGVzOgkgICAgcnVudGltZS9zeW50YXgvbGhhc2tlbGwudmltCisKK1BhdGNoIDYuMC4wMjQKK1Byb2JsZW06ICAgIFVzaW5nICJDVFJMLVYgdSA5OTAwIiBpbiBJbnNlcnQgbW9kZSBtYXkgY2F1c2UgYSBjcmFzaC4gKE5vYWgKKwkgICAgTGV2aXR0KQorU29sdXRpb246ICAgRG9uJ3QgaW5zZXJ0IGEgTlVMIGJ5dGUgaW4gdGhlIHRleHQsIHVzZSBhIG5ld2xpbmUuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMC4wMjUKK1Byb2JsZW06ICAgIFRoZSBwYXR0ZXJuICJcdngoLnwkKSIgZG9lc24ndCBtYXRjaCAieCIgYXQgdGhlIGVuZCBvZiBhIGxpbmUuCisJICAgIChQcmViZW4gUGVwcGUgR3VsZGJlcmcpCitTb2x1dGlvbjogICBBbHdheXMgc2VlIGEgIiQiIGFzIGVuZC1vZi1saW5lIGFmdGVyICJcdiIuICBEbyB0aGUgc2FtZSBmb3IgIl4iLgorRmlsZXM6CSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4wLjAyNgorUHJvYmxlbTogICAgR1RLOiBXaGVuIHVzaW5nIGFycm93IGtleXMgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgbWVudXMsIHRoZQorCSAgICBzZXBhcmF0b3JzIGFyZSBzZWxlY3RlZC4KK1NvbHV0aW9uOiAgIFNldCB0aGUgc2VwYXJhdG9ycyAiaW5zZW5zaXRpdmUiLiAoUGF2ZWwgS2Fua292c2t5KQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0ay5jLCBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA2LjAuMDI3CitQcm9ibGVtOiAgICBWTVM6IFByaW50aW5nIGRvZXNuJ3Qgd29yaywgdGhlIGZpbGUgaXMgZGVsZXRlZCB0b28gcXVpY2tseS4KKwkgICAgTm8gbG9uZ2VyIG5lZWQgdGhlIFZNUyBzcGVjaWZpYyBwcmludGluZyBtZW51LgorCSAgICBnZXRob3N0bmFtZSgpIGlzIG5vdCBhdmFpbGFibGUgd2l0aCBWQVhDLgorCSAgICBUaGUgbWFrZWZpbGUgd2FzIGxhY2tpbmcgc2VsZWN0aW9uIG9mIHRoZSB0aW55LWh1Z2UgZmVhdHVyZSBzZXQuCitTb2x1dGlvbjogICBBZGp1c3QgdGhlICdwcmludGV4cHInIG9wdGlvbiBkZWZhdWx0LiBGaXggdGhlIG90aGVyIHByb2JsZW1zIGFuZAorCSAgICB1cGRhdGUgdGhlIGRvY3VtZW50YXRpb24uICAoWm9sdGFuIEFycGFkZmZ5KQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vc192bXMudHh0LCBydW50aW1lL21lbnUudmltLCBzcmMvSU5TVEFMTHZtcy50eHQsCisJICAgIHNyYy9NYWtlX3Ztcy5tbXMsIHNyYy9vcHRpb24uYywgc3JjL29zX3VuaXguYywgc3JjL29zX3Ztc19jb25mLmgKKworUGF0Y2ggNi4wLjAyOAorUHJvYmxlbTogICAgQ2FuJ3QgY29tcGlsZSB3aXRob3V0ICt2aXJ0dWFsZWRpdCBhbmQgd2l0aCArdmlzdWFsZXh0cmEuIChHZXphCisJICAgIExha25lcikKK1NvbHV0aW9uOiAgIEFkZCBhbiAjaWZkZWYgZm9yICt2aXJ0dWFsZWRpdC4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMC4wMjkKK1Byb2JsZW06ICAgIFdoZW4gbWFraW5nIGEgY2hhbmdlIGluIGxpbmUgMSwgdGhlbiBpbiBsaW5lIDIgYW5kIHRoZW4gZGVsZXRpbmcKKwkgICAgbGluZSAxLCB1bmRvIGluZm8gY291bGQgYmUgd3JvbmcuIE9ubHkgd2hlbiB0aGUgY2hhbmdlcyBhcmUgdW5kb25lCisJICAgIGF0IG9uY2UuIChHZXJoYXJkIEhvY2hob2x6ZXIpCitTb2x1dGlvbjogICBXaGVuIG5vdCBzYXZpbmcgYSBsaW5lIGZvciB1bmRvIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkgZG9uZQorCSAgICBiZWZvcmUsIHJlbWVtYmVyIGZvciB3aGljaCBlbnRyeSB0aGUgbGFzdCBsaW5lIG11c3QgYmUgY29tcHV0ZWQuCisJICAgIEFkZGVkIHVlX2dldGJvdF9lbnRyeSBwb2ludGVyIGZvciB0aGlzLiAgV2hlbiB0aGUgbnVtYmVyIG9mIGxpbmVzCisJICAgIGNoYW5nZXMsIGFkanVzdCB0aGUgcG9zaXRpb24gb2YgbmV3ZXIgdW5kbyBlbnRyaWVzLgorRmlsZXM6CSAgICBzcmMvc3RydWN0cy5oLCBzcmMvdW5kby5jCisKK1BhdGNoIDYuMC4wMzAKK1Byb2JsZW06ICAgIFVzaW5nICI6c291cmNlISBmaWxlIiBkb2Vzbid0IHdvcmsgaW5zaWRlIGEgbG9vcCBvciBhZnRlcgorCSAgICAiOmFyZ2RvIi4gKFBhdm9sIEp1aGFzKQorU29sdXRpb246ICAgRXhlY3V0ZSB0aGUgY29tbWFuZHMgaW4gdGhlIGZpbGUgcmlnaHQgYXdheSwgZG8gbm90IGxldCB0aGUgbWFpbgorCSAgICBsb29wIGRvIGl0LgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9nZXRjaGFyLmMsIHNyYy9nbG9iYWxzLmgsCisJICAgIHNyYy9wcm90by9leF9kb2NtZC5wcm8sIHNyYy9wcm90by9nZXRjaGFyLnBybworCitQYXRjaCA2LjAuMDMxCitQcm9ibGVtOiAgICBOZXh0c3RlcCBkb2Vzbid0IGhhdmUgc2V0ZW52KCkgb3IgcHV0ZW52KCkuICAoSm9obiBCZXBwdSkKK1NvbHV0aW9uOiAgIE1vdmUgcHV0ZW52KCkgZnJvbSBwdHkuYyB0byBtaXNjMi5jCitGaWxlczoJICAgIHNyYy9taXNjMi5jLCBzcmMvcHR5LmMKKworUGF0Y2ggNi4wLjAzMgorUHJvYmxlbTogICAgV2hlbiBjaGFuZ2luZyBhIHNldHRpbmcgdGhhdCBhZmZlY3RzIGFsbCBmb2xkcywgdGhleSBhcmUgbm90CisJICAgIGRpc3BsYXllZCBpbW1lZGlhdGVseS4KK1NvbHV0aW9uOiAgIFNldCB0aGUgcmVkcmF3IGZsYWcgaW4gZm9sZFVwZGF0ZUFsbCgpLgorRmlsZXM6CSAgICBzcmMvZm9sZC5jCisKK1BhdGNoIDYuMC4wMzMKK1Byb2JsZW06ICAgIFVzaW5nICd3aWxkbWVudScgb24gTVMtV2luZG93cywgZmlsZSBuYW1lcyB0aGF0IGluY2x1ZGUgYSBzcGFjZQorCSAgICBhcmUgb25seSBkaXNwbGF5ZWQgc3RhcnRpbmcgd2l0aCB0aGF0IHNwYWNlLiAoWGllIFl1aGVuZykKK1NvbHV0aW9uOiAgIERvbid0IHJlY29nbml6ZSBhIGJhY2tzbGFzaCBiZWZvcmUgYSBzcGFjZSBhcyBhIHBhdGggc2VwYXJhdG9yLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4wLjAzNAorUHJvYmxlbTogICAgQ2FsbGluZyBzZWFyY2hwYWlyKCkgd2l0aCB0aHJlZSBhcmd1bWVudHMgY291bGQgcmVzdWx0IGluIGEgY3Jhc2gKKwkgICAgb3Igc3RyYW5nZSBlcnJvciBtZXNzYWdlLiAoS2FsbGUgQmpvcmtsaWQpCitTb2x1dGlvbjogICBEb24ndCB1c2UgdGhlIGZpZnRoIGFyZ3VtZW50IHdoZW4gdGhlcmUgaXMgbm8gZm91cnRoIGFyZ3VtZW50LgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMC4wMzUKK1Byb2JsZW06ICAgIFRoZSBtZW51IGl0ZW0gRWRpdC9HbG9iYWxfU2V0dGluZ3MvVG9nZ2xlX1Rvb2xiYXIgZG9lc24ndCB3b3JrCisJICAgIHdoZW4gJ2lnbm9yZWNhc2UnIGlzIHNldC4gKEFsbGVuIENhc3RhYmFuKQorU29sdXRpb246ICAgQWx3YXlzIG1hdGNoIGNhc2Ugd2hlbiBjaGVja2luZyBpZiBhIGZsYWcgaXMgYWxyZWFkeSBwcmVzZW50IGluCisJICAgICdndWlvcHRpb25zJy4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjAuMDM2CitQcm9ibGVtOiAgICBPUy8yLCBNUy1ET1MgYW5kIE1TLVdpbmRvd3M6IFVzaW5nIGEgcGF0aCB0aGF0IHN0YXJ0cyB3aXRoIGEKKwkgICAgc2xhc2ggaW4gJ3RhZ3MnIGRvZXNuJ3Qgd29yayBhcyBleHBlY3RlZC4gKE1hdGhpYXMgS29laHJlcgorU29sdXRpb246ICAgT25seSB1c2UgdGhlIGRyaXZlLCBub3QgdGhlIHdob2xlIHBhdGggdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCSAgICBBbHNvIG1ha2UgaXQgd29yayBmb3IgImM6ZGlyL2ZpbGUiLgorRmlsZXM6CSAgICBzcmMvbWlzYzIuYworCitQYXRjaCA2LjAuMDM3CitQcm9ibGVtOiAgICBXaGVuIHRoZSB1c2VyIGhhcyBzZXQgImRpZF9pbnN0YWxsX3N5bnRheF9tZW51IiB0byBhdm9pZCB0aGUKKwkgICAgZGVmYXVsdCBTeW50YXggbWVudSBpdCBzdGlsbCBhcHBlYXJzLiAoVmlyZ2lsaW8pCitTb2x1dGlvbjogICBEb24ndCBhZGQgdGhlIHRocmVlIGRlZmF1bHQgaXRlbXMgd2hlbiAiZGlkX2luc3RhbGxfc3ludGF4X21lbnUiCisJICAgIGlzIHNldC4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjAuMDM4CitQcm9ibGVtOiAgICBXaGVuICdzZWxlY3Rpb24nIGlzICJleGNsdXNpdmUiLCBkZWxldGluZyBhIGJsb2NrIG9mIHRleHQgYXQgdGhlCisJICAgIGVuZCBvZiBhIGxpbmUgY2FuIGxlYXZlIHRoZSBjdXJzb3IgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGxpbmUuCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSBjdXJzb3IgcG9zaXRpb24uCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjAuMDM5CitQcm9ibGVtOiAgICAiZ1AiIGxlYXZlcyB0aGUgY3Vyc29yIGluIHRoZSB3cm9uZyBwb3NpdGlvbiB3aGVuICd2aXJ0dWFsZWRpdCcgaXMKKwkgICAgdXNlZC4gIFVzaW5nICJjIiBpbiBibG9ja3dpc2UgVmlzdWFsIG1vZGUgbGVhdmVzIHRoZSBjdXJzb3IgaW4gYQorCSAgICBzdHJhbmdlIHBvc2l0aW9uLgorU29sdXRpb246ICAgRm9yICJnUCIgcmVzZXQgdGhlICJjb2xhZGQiIGZpZWxkIGZvciB0aGUgJ10gbWFyay4gIEZvciAiYyIgbGVhdmUKKwkgICAgdGhlIGN1cnNvciBvbiB0aGUgbGFzdCBpbnNlcnRlZCBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjAuMDQwCitQcm9ibGVtOiAgICBXaGVuICdmaWxlZW5jb2RpbmcnIGlzIGludmFsaWQgYW5kIHdyaXRpbmcgZmFpbHMgYmVjYXVzZSBvZgorCSAgICB0aGlzLCB0aGUgb3JpZ2luYWwgZmlsZSBpcyBnb25lLiAoRXJpYyBDYXJsaWVyKQorU29sdXRpb246ICAgUmVzdG9yZSB0aGUgb3JpZ2luYWwgZmlsZSBmcm9tIHRoZSBiYWNrdXAuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjAuMDQxCitQcm9ibGVtOiAgICBVc2luZyAiOmxhbmd1YWdlIG1lc3NhZ2VzIGVuIiB3aGVuIExDX01FU1NBR0VTIGlzIHVuZGVmaW5lZAorCSAgICByZXN1bHRzIGluIHNldHRpbmcgTENfQ1RZUEUuIChFcmljIENhcmxpZXIpCitTb2x1dGlvbjogICBTZXQgJExDX01FU1NBR0VTIGluc3RlYWQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMC4wNDIKK1Byb2JsZW06ICAgICI6bWtzZXNzaW9uIiBjYW4ndCBoYW5kbGUgZmlsZSBuYW1lcyB3aXRoIGEgc3BhY2UuCitTb2x1dGlvbjogICBFc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZXMgd2l0aCBhIGJhY2tzbGFzaC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4wLjA0MworUHJvYmxlbTogICAgUGF0Y2ggNi4wLjA0MSB3YXMgd3JvbmcuCitTb2x1dGlvbjogICBVc2UgbWNoX2dldGVudigpIGluc3RlYWQgb2YgdmltX2dldGVudigpLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjAuMDQ0CitQcm9ibGVtOiAgICBVc2luZyBhICJjb250YWluZWRpbiIgbGlzdCBmb3IgYSBzeW50YXggaXRlbSBkb2Vzbid0IHdvcmsgZm9yIGFuCisJICAgIGl0ZW0gdGhhdCBkb2Vzbid0IGhhdmUgYSAiY29udGFpbnMiIGFyZ3VtZW50LiAgQWxzbywgImNvbnRhaW5lZGluIgorCSAgICBkb2Vzbid0IGlnbm9yZSBhIHRyYW5zcGFyZW50IGl0ZW0uIChUaW1vIEZyZW5heSkKK1NvbHV0aW9uOiAgIFdoZW4gdGhlcmUgaXMgYSAiY29udGFpbmVkaW4iIGFyZ3VtZW50IHNvbWV3aGVyZSwgYWx3YXlzIGNoZWNrIGZvcgorCSAgICBjb250YWluZWQgaXRlbXMuICBEb24ndCBjaGVjayBmb3IgdGhlIHRyYW5zcGFyZW50IGl0ZW0gYnV0IHRoZQorCSAgICBpdGVtIGl0J3MgY29udGFpbmVkIGluLgorRmlsZXM6CSAgICBzcmMvc3RydWN0cy5oLCBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4wLjA0NQorUHJvYmxlbTogICAgQWZ0ZXIgY3JlYXRpbmcgYSBmb2xkIHdpdGggYSBWaXN1YWwgc2VsZWN0aW9uLCBhbm90aGVyIHdpbmRvdworCSAgICB3aXRoIHRoZSBzYW1lIGJ1ZmZlciBzdGlsbCBoYXMgaW52ZXJ0ZWQgdGV4dC4gKFNhbWkgU2Fsb25lbikKK1NvbHV0aW9uOiAgIFJlZHJhdyB0aGUgaW52ZXJ0ZWQgdGV4dC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4wNDYKK1Byb2JsZW06ICAgIFdoZW4gZ2V0cmxpbWl0KCkgcmV0dXJucyBhbiA4IGJ5dGUgbnVtYmVyIHRoZSBjaGVjayBmb3IgcnVubmluZworCSAgICBvdXQgb2Ygc3RhY2sgbWF5IGZhaWwuIChBbnRob255IE1laWplcikKK1NvbHV0aW9uOiAgIFNraXAgdGhlIHN0YWNrIGNoZWNrIGlmIHRoZSBsaW1pdCBkb2Vzbid0IGZpdCBpbiBhIGxvbmcuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZy5oLmluLCBzcmMvY29uZmlndXJlLmluLAorCSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMC4wNDcKK1Byb2JsZW06ICAgIFVzaW5nIGEgcmVnZXhwIHdpdGggIlwoXCkiIGluc2lkZSBhICJcJVtdIiBpdGVtIGNhdXNlcyBhIGNyYXNoLgorCSAgICAoU2FtdWVsIExhY2FzKQorU29sdXRpb246ICAgRG9uJ3QgYWxsb3cgbmVzdGVkIGF0b21zIGluc2lkZSAiXCVbXSIuCitGaWxlczoJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjAuMDQ4CitQcm9ibGVtOiAgICBXaW4zMjogSW4gdGhlIGNvbnNvbGUgdGhlIG1vdXNlIGRvZXNuJ3QgYWx3YXlzIHdvcmsgY29ycmVjdGx5LgorCSAgICBTb21ldGltZXMgYWZ0ZXIgZ2V0dGluZyBmb2N1cyBhIG1vdXNlIG1vdmVtZW50IGlzIGludGVycHJldGVkIGxpa2UKKwkgICAgYSBidXR0b24gY2xpY2suCitTb2x1dGlvbjogICBVc2UgYSBkaWZmZXJlbnQgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBudW1iZXIgb2YgbW91c2UgYnV0dG9ucy4KKwkgICAgQXZvaWQgcmVjb2duaXppbmcgYSBidXR0b24gcHJlc3MgZnJvbSB1bmRlZmluZWQgYml0cy4gKFZpbmNlIE5lZ3JpKQorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjAuMDQ5CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGV2aW0gdGhlIGludHJvIHNjcmVlbiBpcyBtaXNsZWFkaW5nLiAoQWRyaWFuIE5hZ2xlKQorU29sdXRpb246ICAgTWVudGlvbiB3aGV0aGVyICdpbnNlcnRtb2RlJyBpcyBzZXQgYW5kIHRoZSBtZW51cyB0byBiZSB1c2VkLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltLCBzcmMvdmVyc2lvbi5jCisKK1BhdGNoIDYuMC4wNTAKK1Byb2JsZW06ICAgIFVURi04OiAidml3IiBkb2Vzbid0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgYmVmb3JlIHRoZQorCSAgICBjdXJzb3IuIChCZXJ0aWxvIFdlbm5lcmdyZW4pCitTb2x1dGlvbjogICBVc2UgZGVjX2N1cnNvcigpIGluc3RlYWQgb2YgZGVjcmVtZW50aW5nIHRoZSBjb2x1bW4gbnVtYmVyLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4wLjA1MQorUHJvYmxlbTogICAgVVRGLTg6IFVzaW5nIENUUkwtUiBvbiB0aGUgY29tbWFuZCBsaW5lIGRvZXNuJ3QgaW5zZXJ0IGNvbXBvc2luZworCSAgICBjaGFyYWN0ZXJzLiAoUm9uIEFhcm9uKQorU29sdXRpb246ICAgQWxzbyBpbmNsdWRlIHRoZSBjb21wb3NpbmcgY2hhcmFjdGVycyBhbmQgZml4IHJlZHJhd2luZyB0aGVtLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL29wcy5jCisKK1BhdGNoIDYuMC4wNTIKK1Byb2JsZW06ICAgIFRoZSBjaGVjayBmb3IgcmxpbV90IGluIHBhdGNoIDYuMC4wNDYgZG9lcyBub3Qgd29yayBvbiBzb21lCisJICAgIHN5c3RlbXMuIChaZGVuZWsgU2VrZXJhKQorU29sdXRpb246ICAgQWxzbyBsb29rIGluIHN5cy9yZXNvdXJjZS5oIGZvciBybGltX3QuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjAuMDUzIChleHRyYSkKK1Byb2JsZW06ICAgIFZhcmlvdXMgcHJvYmxlbXMgd2l0aCBRTlguCitTb2x1dGlvbjogICBNaW5vciBmaXggZm9yIGNvbmZpZ3VyZS4gIFN3aXRjaCBvbiB0ZXJtaW5hbCBjbGlwYm9hcmQgc3VwcG9ydCBpbgorCSAgICBtYWluLmMuICBGaXggInB0ZXJtIiBtb3VzZSBzdXBwb3J0LiAgb3NfcW54LmMgZGlkbid0IGJ1aWxkIHdpdGhvdXQKKwkgICAgcGhvdG9uLiAoSnVsaWFuIEtpbnJhaWQpCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2d1aV9waG90b24uYywKKwkgICAgc3JjL21haW4uYywgc3JjL21pc2MyLmMsIHNyYy9vcHRpb24uaCwgc3JjL29zX3FueC5jLCBzcmMvb3NfcW54LmgsCisJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA2LjAuMDU0CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIG1zd2luLnZpbSwgQ1RSTC1WIHBhc3RlcyBhIGJsb2NrIG9mIHRleHQgbGlrZSBpdCBpcworCSAgICBub3JtYWwgdGV4dC4gIFVzaW5nIENUUkwtViBpbiBibG9ja3dpc2UgVmlzdWFsIG1vZGUgbGVhdmVzICJ4IgorCSAgICBjaGFyYWN0ZXJzIGJlaGluZC4KK1NvbHV0aW9uOiAgIE1ha2UgQ1RSTC1WIHdvcmsgYXMgaXQgc2hvdWxkLiAgRG8gdGhlIHNhbWUgZm9yIHRoZSBQYXN0ZSBtZW51CisJICAgIGVudHJpZXMuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0sIHJ1bnRpbWUvbXN3aW4udmltCisKK1BhdGNoIDYuMC4wNTUKK1Byb2JsZW06ICAgIEdUSzogVGhlIHNlbGVjdGlvbiBpc24ndCBjb3BpZWQgdGhlIGZpcnN0IHRpbWUuCitTb2x1dGlvbjogICBPd24gdGhlIHNlbGVjdGlvbiBhdCB0aGUgcmlnaHQgbW9tZW50LgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA2LjAuMDU2CitQcm9ibGVtOiAgICBVc2luZyAiQ1RSTC1PIGN3IiBpbiBJbnNlcnQgbW9kZSByZXN1bHRzIGluIGEgbmVzdGVkIEluc2VydCBtb2RlLgorCSAgICA8RXNjPiBkb2Vzbid0IGxlYXZlIEluc2VydCBtb2RlIHRoZW4uCitTb2x1dGlvbjogICBPbmx5IHVzZSBuZXN0ZWQgSW5zZXJ0IG1vZGUgd2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0IG9yIHdoZW4gYQorCSAgICBtYXBwaW5nIGlzIHVzZWQuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjAuMDU3CitQcm9ibGVtOiAgICBVc2luZyAiOndpbmNtZCBnfSIgaW4gYSBmdW5jdGlvbiBkb2Vzbid0IHdvcmsuICAoR2FyeSBIb2xsb3dheSkKK1NvbHV0aW9uOiAgIEV4ZWN1dGUgdGhlIGNvbW1hbmQgZGlyZWN0bHksIGluc3RlYWQgb2YgcHV0dGluZyBpdCBpbiB0aGUKKwkgICAgdHlwZWFoZWFkIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jLCBzcmMvcHJvdG8vbm9ybWFsLnBybywgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMC4wNTgKK1Byb2JsZW06ICAgIFdoZW4gYSBDdXJzb3Job2xkIGF1dG9jb21tYW5kIG1vdmVkIHRoZSBjdXJzb3IsIHRoZSBydWxlciB3YXNuJ3QKKwkgICAgdXBkYXRlZC4gKEJvaGRhbiBWbGFzeXVrKQorU29sdXRpb246ICAgVXBkYXRlIHRoZSBydWxlciBhZnRlciBleGVjdXRpbmcgdGhlIGF1dG9jb21tYW5kcy4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMC4wNTkKK1Byb2JsZW06ICAgIEhpZ2hsaWdodGluZyBmb3IgJ2hsc2VhcmNoJyBpc24ndCB2aXNpYmxlIGluIGxpbmVzIHRoYXQgYXJlCisJICAgIGhpZ2hsaWdodGVkIGZvciBkaWZmIGhpZ2hsaWdodGluZy4gIChHYXJ5IEhvbGxvd2F5KQorU29sdXRpb246ICAgTGV0ICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIG92ZXJydWxlIGRpZmYgaGlnaGxpZ2h0aW5nLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4wLjA2MAorUHJvYmxlbTogICAgTW90aWY6IFdoZW4gdGhlIHRvb2x0aXAgaXMgdG8gYmUgcG9wcGVkIHVwLCBWaW0gY3Jhc2hlcy4KKwkgICAgKEdhcnkgSG9sbG93YXkpCitTb2x1dGlvbjogICBDaGVjayBmb3IgYSBOVUxMIHJldHVybiB2YWx1ZSBmcm9tIGd1aV9tb3RpZl9mb250c2V0MmZvbnRsaXN0KCkuCitGaWxlczoJICAgIHNyYy9ndWlfYmV2YWwuYworCitQYXRjaCA2LjAuMDYxCitQcm9ibGVtOiAgICBUaGUgdG9vbGJhciBidXR0b25zIHRvIGxvYWQgYW5kIHNhdmUgYSBzZXNzaW9uIGRvIG5vdCBjb3JyZWN0bHkKKwkgICAgdXNlIHY6dGhpc19zZXNzaW9uLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIHY6dGhpc19zZXNzaW9uIHRvIGJlIGVtcHR5IGluc3RlYWQgb2YgZXhpc3RpbmcuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4wLjA2MgorUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiAndmVyYm9zZScgaXMgPiAzIGFuZCB1c2luZyAiOnNoZWxsIi4gKFllZ2FwcGFuCisJICAgIExha3NobWFuYW4pCitTb2x1dGlvbjogICBBdm9pZCBnaXZpbmcgYSBOVUxMIHBvaW50ZXIgdG8gcHJpbnRmKCkuICBBbHNvIG91dHB1dCBhIG5ld2xpbmUKKwkgICAgYW5kIHN3aXRjaCB0aGUgY3Vyc29yIG9uLgorRmlsZXM6CSAgICBzcmMvbWlzYzIuYworCitQYXRjaCA2LjAuMDYzCitQcm9ibGVtOiAgICBXaGVuICdjcG9wdGlvbnMnIGluY2x1ZGVzICIkIiwgdXNpbmcgImN3IiB0byB0eXBlIGEgJyknIG9uIHRvcCBvZgorCSAgICB0aGUgIiQiIGRvZXNuJ3QgdXBkYXRlIHN5bnRheCBoaWdobGlnaHRpbmcgYWZ0ZXIgaXQuCitTb2x1dGlvbjogICBTdG9wIGRpc3BsYXlpbmcgdGhlICIkIiB3aGVuIHR5cGluZyBhICcpJyBpbiBpdHMgcG9zaXRpb24uCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjAuMDY0IChleHRyYSkKK1Byb2JsZW06ICAgIFRoZSBOU0lTIGluc3RhbGwgc2NyaXB0IGRvZXNuJ3Qgd29yayB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIE5TSVMuCisJICAgIFRoZSBkaWZmIGZlYXR1cmUgZG9lc24ndCB3b3JrIHdoZW4gdGhlcmUgaXNuJ3QgYSBnb29kIGRpZmYuZXhlIG9uCisJICAgIHRoZSBzeXN0ZW0uCitTb2x1dGlvbjogICBSZXBsYWNlIHRoZSBHZXRQYXJlbnREaXIgaW5zdHJ1Y3Rpb24gYnkgYSB1c2VyIGZ1bmN0aW9uLgorCSAgICBGaXggYSBmZXcgY29zbWV0aWMgcHJvYmxlbXMuICBVc2UgZGVmaW5lZCBjb25zdGFudHMgZm9yIHRoZQorCSAgICB2ZXJzaW9uIG51bWJlciwgc28gdGhhdCBpdCdzIGRlZmluZWQgaW4gb25lIHBsYWNlIG9ubHkuCisJICAgIE9ubHkgYWNjZXB0IHRoZSBpbnN0YWxsIGRpcmVjdG9yeSB3aGVuIGl0IGVuZHMgaW4gInZpbSIuCisJICAgIChFZHVhcmRvIEZlcm5hbmRleikKKwkgICAgQWRkIGEgZGlmZi5leGUgYW5kIHVzZSBpdCBmcm9tIHRoZSBkZWZhdWx0IF92aW1yYy4KK0ZpbGVzOgkgICAgbnNpcy9ndmltLm5zaSwgbnNpcy9SRUFETUUudHh0LCBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDYuMC4wNjUKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjpub3JtYWwiIGluICdpbmRlbnRleHByJyBpdCBtYXkgdXNlIHJlZG8gY2hhcmFjdGVycworCSAgICBiZWZvcmUgaXRzIGFyZ3VtZW50LiAgKE5laWwgQmlyZCkKK1NvbHV0aW9uOiAgIFNhdmUgYW5kIHJlc3RvcmUgdGhlIHN0dWZmIGJ1ZmZlciBpbiBleF9ub3JtYWwoKS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9nZXRjaGFyLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4wLjA2NgorUHJvYmxlbTogICAgU29tZXRpbWVzIHVuZG8gZm9yIG9uZSBjb21tYW5kIGlzIHNwbGl0IGludG8gdHdvIHVuZG8gYWN0aW9ucy4KKwkgICAgKEhhbGltIFNhbG1hbikKK1NvbHV0aW9uOiAgIERvbid0IHNldCB0aGUgdW5kby1zeW5jZWQgZmxhZyB3aGVuIHJldXNpbmcgYSBsaW5lIHRoYXQgd2FzCisJICAgIGFscmVhZHkgc2F2ZWQgZm9yIHVuZG8uCitGaWxlczoJICAgIHNyYy91bmRvLmMKKworUGF0Y2ggNi4wLjA2NworUHJvYmxlbTogICAgaWZfeGNtZHNydi5jIGRvZXNuJ3QgY29tcGlsZSBvbiBzeXN0ZW1zIHdoZXJlIGZkX3NldCBpc24ndCBkZWZpbmVkCisJICAgIGluIHRoZSB1c3VhbCBoZWFkZXIgZmlsZSAoZS5nLiwgQUlYKS4gKE1hcmsgV2FnZ29uZXIpCitTb2x1dGlvbjogICBJbmNsdWRlIHN5cy9zZWxlY3QuaCBpbiBpZl94Y21kc3J2LmMgZm9yIHN5c3RlbXMgdGhhdCBoYXZlIGl0LgorRmlsZXM6CSAgICBzcmMvaWZfeGNtZHNydi5jCisKK1BhdGNoIDYuMC4wNjgKK1Byb2JsZW06ICAgIFdoZW4gZm9ybWF0dGluZyBhIFZpc3VhbGx5IHNlbGVjdGVkIGFyZWEgd2l0aCAiZ3EiIGFuZCB0aGUgbnVtYmVyCisJICAgIG9mIGxpbmVzIGluY3JlYXNlcyB0aGUgbGFzdCBsaW5lIG1heSBub3QgYmUgcmVkcmF3biBjb3JyZWN0bHkuCisJICAgIChZZWdhcHBhbiBMYWtzaG1hbmFuKQorU29sdXRpb246ICAgQ29ycmVjdCB0aGUgYXJlYSB0byBiZSByZWRyYXduIGZvciBpbnNlcnRlZC9kZWxldGVkIGxpbmVzLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4wLjA2OQorUHJvYmxlbTogICAgVXNpbmcgIksiIG9uIGEgd29yZCB0aGF0IGluY2x1ZGVzIGEgIiEiIGNhdXNlcyBhICJObyBwcmV2aW91cworCSAgICBjb21tYW5kIiBlcnJvciwgYmVjYXVzZSB0aGUgIiEiIGlzIGV4cGFuZGVkLiAoQ3JhaWcgSmVmZnJpZXMpCitTb2x1dGlvbjogICBQdXQgYSBiYWNrc2xhc2ggYmVmb3JlIHRoZSAiISIuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjAuMDcwCitQcm9ibGVtOiAgICBXaW4zMjogVGhlIGVycm9yIG1lc3NhZ2UgZm9yIGEgZmFpbGVkIGR5bmFtaWMgbGlua2luZyBvZiBhIFBlcmwsCisJICAgIFJ1YnksIFRjbCBhbmQgUHl0aG9uIGxpYnJhcnkgaXMgdW5jbGVhciBhYm91dCB3aGF0IHdlbnQgd3JvbmcuCitTb2x1dGlvbjogICBHaXZlIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9yIGZ1bmN0aW9uIHRoYXQgY291bGQgbm90IGJlIGxvYWRlZC4KKwkgICAgQWxzbyBmb3IgdGhlIGljb252IGFuZCBnZXR0ZXh0IGxpYnJhcmllcyB3aGVuICd2ZXJib3NlJyBpcyBzZXQuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9pZl9wZXJsLnhzLCBzcmMvaWZfcHl0aG9uLmMsIHNyYy9pZl9ydWJ5LmMsCisJICAgIHNyYy9pZl90Y2wuYywgc3JjL21ieXRlLmMsIHNyYy9vc193aW4zMi5jLCBzcmMvcHJvdG8vaWZfcGVybC5wcm8sCisJICAgIHNyYy9wcm90by9pZl9weXRob24ucHJvLCBzcmMvcHJvdG8vaWZfcnVieS5wcm8sCisJICAgIHNyYy9wcm90by9pZl90Y2wucHJvLCBzcmMvcHJvdG8vbWJ5dGUucHJvCisKK1BhdGNoIDYuMC4wNzEKK1Byb2JsZW06ICAgIFRoZSAiaXJpcy1hbnNpIiBidWlsdGluIHRlcm1jYXAgaXNuJ3QgdmVyeSBnb29kLgorU29sdXRpb246ICAgRml4IHRoZSB3cm9uZyBlbnRyaWVzLiAoRGF2aWQgSGFycmlzb24pCitGaWxlczoJICAgIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4wLjA3MgorUHJvYmxlbTogICAgV2hlbiAnbGF6eXJlZHJhdycgaXMgc2V0LCBhIG1hcHBpbmcgdGhhdCBzdG9wcyBWaXN1YWwgbW9kZSwgbW92ZXMKKwkgICAgdGhlIGN1cnNvciBhbmQgc3RhcnRzIFZpc3VhbCBtb2RlIGFnYWluIGNhdXNlcyBhIHJlZHJhdyBwcm9ibGVtLgorCSAgICAoQnJpYW4gU2lsdmVybWFuKQorU29sdXRpb246ICAgUmVkcmF3IGJvdGggdGhlIG9sZCBhbmQgdGhlIG5ldyBWaXN1YWwgYXJlYSB3aGVuIG5lY2Vzc2FyeS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4wLjA3MyAoZXh0cmEpCitQcm9ibGVtOiAgICBESkdQUDogV2hlbiB1c2luZyBDVFJMLVogdG8gc3RhcnQgYSBzaGVsbCwgdGhlIHByb21wdCBpcyBoYWxmd2F5CisJICAgIHRoZSB0ZXh0LiAoVm9sa2VyIEtpZWZlbCkKK1NvbHV0aW9uOiAgIFBvc2l0aW9uIHRoZSBzeXN0ZW0gY3Vyc29yIGJlZm9yZSBzdGFydGluZyB0aGUgc2hlbGwuCitGaWxlczoJICAgIHNyYy9vc19tc2Rvcy5jCisKK1BhdGNoIDYuMC4wNzQKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIiYiIGluIGEgc3Vic3RpdHV0ZSBzdHJpbmcgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciB3aXRoCisJICAgIGEgdHJhaWxieXRlIDB4NWMgaXMgbm90IGhhbmRsZWQgY29ycmVjdGx5LgorU29sdXRpb246ICAgUmVjb2duaXplIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBpbnNpZGUgdGhlICImIiBwYXJ0LiAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4wLjA3NQorUHJvYmxlbTogICAgV2hlbiBjbG9zaW5nIGEgaG9yaXpvbnRhbGx5IHNwbGl0IHdpbmRvdyB3aGlsZSAnZWFkaXJlY3Rpb24nIGlzCisJICAgICJob3IiIGFub3RoZXIgaG9yaXpvbnRhbGx5IHNwbGl0IHdpbmRvdyBpcyBzdGlsbCByZXNpemVkLiAoQXJvbgorCSAgICBHcmlmZmlzKQorU29sdXRpb246ICAgT25seSByZXNpemUgd2luZG93cyBpbiB0aGUgc2FtZSB0b3AgZnJhbWUgYXMgdGhlIHdpbmRvdyB0aGF0IGlzCisJICAgIHNwbGl0IG9yIGNsb3NlZC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYywgc3JjL3Byb3RvL3dpbmRvdy5wcm8sIHNyYy93aW5kb3cuYworCitQYXRjaCA2LjAuMDc2CitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciB3cm9uZyBwb2ludGVyIHR5cGUgd2hlbiBjb21waWxpbmcuCitTb2x1dGlvbjogICBVc2UgY2hhciBpbnN0ZWFkIG9mIGNoYXJfdSBwb2ludGVyLgorRmlsZXM6CSAgICBzcmMvdmVyc2lvbi5jCisKK1BhdGNoIDYuMC4wNzcKK1Byb2JsZW06ICAgIFBhdGNoIDYuMC4wNzUgd2FzIGluY29tcGxldGUuCitTb2x1dGlvbjogICBGaXggYW5vdGhlciBjYWxsIHRvIHdpbl9lcXVhbCgpLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4wLjA3OAorUHJvYmxlbTogICAgVXNpbmcgImRhdyIgYXQgdGhlIGVuZCBvZiBhIGxpbmUgb24gYSBzaW5nbGUtY2hhcmFjdGVyIHdvcmQgZGlkbid0CisJICAgIGluY2x1ZGUgdGhlIHdoaXRlIHNwYWNlIGJlZm9yZSBpdC4gIEF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgaXQKKwkgICAgZGlkbid0IHdvcmsgYXQgYWxsLiAgKEdhdmluIFNpbmNsYWlyKQorU29sdXRpb246ICAgSW5jbHVkZSB0aGUgd2hpdGUgc3BhY2UgYmVmb3JlIHRoZSB3b3JkLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4wLjA3OQorUHJvYmxlbTogICAgV2hlbiAiVyIgaXMgaW4gJ2Nwb3B0aW9ucycgYW5kICdiYWNrdXBjb3B5JyBpcyAibm8iIG9yICJhdXRvIiwgY2FuCisJICAgIHN0aWxsIG92ZXJ3cml0ZSBhIHJlYWQtb25seSBmaWxlLCBiZWNhdXNlIGl0J3MgcmVuYW1lZC4gKEdhcnkKKwkgICAgSG9sbG93YXkpCitTb2x1dGlvbjogICBBZGQgYSBjaGVjayBmb3IgYSByZWFkLW9ubHkgZmlsZSBiZWZvcmUgcmVuYW1pbmcgdGhlIGZpbGUgdG8KKwkgICAgYmVjb21lIHRoZSBiYWNrdXAuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjAuMDgwCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgc2Vzc2lvbiBmaWxlIHRoYXQgaGFzIHRoZSBzYW1lIGZpbGUgaW4gdHdvIHdpbmRvd3MsCisJICAgIHRoZSBmaWxlaW5mbygpIGNhbGwgaW4gZG9fZWNtZCgpIGNhdXNlcyBhIHNjcm9sbCBhbmQgYSBoaXQtZW50ZXIKKwkgICAgcHJvbXB0LiAoUm9iZXJ0IFdlYmIpCitTb2x1dGlvbjogICBEb24ndCBzY3JvbGwgdGhpcyBtZXNzYWdlIHdoZW4gJ3Nob3J0bWVzcycgY29udGFpbnMgJ08nLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMC4wODEKK1Byb2JsZW06ICAgIEFmdGVyIHVzaW5nICI6c2F2ZWFzIiB0aGUgbmV3IGJ1ZmZlciBuYW1lIGlzIGFkZGVkIHRvIHRoZSBCdWZmZXJzCisJICAgIG1lbnUgd2l0aCBhIHdyb25nIG51bWJlci4gKENoYXVrLU1lYW4gUHJvdW0pCitTb2x1dGlvbjogICBUcmlnZ2VyIEJ1ZkZpbGVQcmUgYW5kIEJ1ZkZpbGVQb3N0IGV2ZW50cyBmb3IgdGhlIHJlbmFtZWQgYnVmZmVyCisJICAgIGFuZCBCdWZBZGQgZm9yIHRoZSBvbGQgbmFtZSAod2hpY2ggaXMgd2l0aCBhIG5ldyBidWZmZXIpLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMC4wODIKK1Byb2JsZW06ICAgIFdoZW4gc3dhcHBpbmcgc2NyZWVucyBpbiBhbiB4dGVybSBhbmQgdGhlcmUgaXMgYW4gKGVycm9yKSBtZXNzYWdlCisJICAgIGZyb20gdGhlIHZpbXJjIHNjcmlwdCwgdGhlIHNoZWxsIHByb21wdCBpcyBhZnRlciB0aGUgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIE91dHB1dCBhIG5ld2xpbmUgd2hlbiB0aGVyZSB3YXMgb3V0cHV0IG9uIHRoZSBhbHRlcm5hdGUgc2NyZWVuLgorCSAgICBBbHNvIHdoZW4gc3RhcnRpbmcgdGhlIEdVSS4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjAuMDgzCitQcm9ibGVtOiAgICBHVEs6IFdoZW4gY29tcGlsZWQgd2l0aG91dCBtZW51IHN1cHBvcnQgdGhlIGJ1dHRvbnMgaW4gYSBkaWFsb2cKKwkgICAgZG9uJ3QgaGF2ZSBhbnkgdGV4dC4gKEVyaWsgRWRlbG1hbm4pCitTb2x1dGlvbjogICBBZGQgdGhlIHRleHQgYWxzbyB3aGVuIEdUS19VU0VfQUNDRUwgaXNuJ3QgZGVmaW5lZC4gIEFuZCBkZWZpbmUKKwkgICAgR1RLX1VTRV9BQ0NFTCBhbHNvIHdoZW4gbm90IHVzaW5nIG1lbnVzLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0ay5jCisKK1BhdGNoIDYuMC4wODQKK1Byb2JsZW06ICAgIFVURi04OiBhICJyIiBjb21tYW5kIHdpdGggYW4gYXJndW1lbnQgdGhhdCBpcyBhIGtleW1hcCBmb3IgYQorCSAgICBjaGFyYWN0ZXIgd2l0aCBhIGNvbXBvc2luZyBjaGFyYWN0ZXIgY2FuJ3QgYmUgcmVwZWF0ZWQgd2l0aCAiLiIuCisJICAgIChSYXBoYWVsIEZpbmtlbCkKK1NvbHV0aW9uOiAgIEFkZCB0aGUgY29tcG9zaW5nIGNoYXJhY3RlcnMgdG8gdGhlIHJlZG8gYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjA4NQorUHJvYmxlbTogICAgV2hlbiAnbW91c2Vmb2N1cycgaXMgc2V0LCB1c2luZyAicyIgdG8gZ28gdG8gSW5zZXJ0IG1vZGUgYW5kIHRoZW4KKwkgICAgbW92aW5nIHRoZSBtb3VzZSBwb2ludGVyIHRvIGFub3RoZXIgd2luZG93IHN0b3BzIEluc2VydCBtb2RlLAorCSAgICB3aGlsZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIHdpdGggImEiIG9yICJpIi4gKFJvYmVydCBXZWJiKQorU29sdXRpb246ICAgUmVzZXQgZmluaXNoX29wIGJlZm9yZSBjYWxsaW5nIGVkaXQoKS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4wODYKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgImd1IiB0aGUgbWVzc2FnZSBzYXlzICJ+ZWQiLgorU29sdXRpb246ICAgTWFrZSB0aGUgbWVzc2FnZSBzYXkgImNoYW5nZWQiLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4wLjA4NyAobGFuZykKK1Byb2JsZW06ICAgIE1lc3NhZ2UgdHJhbnNsYXRpb25zIGFyZSBpbmNvcnJlY3QsIHdoaWNoIG1heSBjYXVzZSBhIGNyYXNoLgorCSAgICAoUGV0ZXIgRmlndXJhKQorCSAgICBUaGUgVHVya2lzaCB0cmFuc2xhdGlvbnMgbmVlZGVkIG1vcmUgd29yayBhbmQgdGhlIG1haW50YWluZXIKKwkgICAgZGlkbid0IGhhdmUgdGltZS4KK1NvbHV0aW9uOiAgIEZpeCBvcmRlciBvZiBwcmludGYgYXJndW1lbnRzLiAgUmVtb3ZlICUyJGQgY29uc3RydWN0cy4KKwkgICAgQWRkICItdiIgdG8gbXNnZm10IHRvIGdldCBhIHdhcm5pbmcgZm9yIHdyb25nIHRyYW5zbGF0aW9ucy4KKwkgICAgRG9uJ3QgaW5zdGFsbCB0aGUgVHVya2lzaCB0cmFuc2xhdGlvbnMgZm9yIG5vdy4KKwkgICAgVXBkYXRlIGEgZmV3IG1vcmUgdHJhbnNsYXRpb25zLgorRmlsZXM6CSAgICBzcmMvcG8vTWFrZWZpbGUsIHNyYy9wby9hZi5wbywgc3JjL3BvL2NzLnBvLCBzcmMvcG8vY3MuY3AxMjUwLnBvLAorCSAgICBzcmMvcG8vZGUucG8sIHNyYy9wby9lcy5wbywgc3JjL3BvL2ZyLnBvLCBzcmMvcG8vaXQucG8sCisJICAgIHNyYy9wby9qYS5wbywgc3JjL3BvL2phLnNqaXMucG8sIHNyYy9wby9rby5wbywgc3JjL3BvL3BsLnBvLAorCSAgICBzcmMvcG8vc2sucG8sIHNyYy9wby91ay5wbywgc3JjL3BvL3poX0NOLlVURi04LnBvLAorCSAgICBzcmMvcG8vemhfQ04uY3A5MzYucG8sIHNyYy9wby96aF9DTi5wbywgc3JjL3BvL3poX1RXLnBvCisKK1BhdGNoIDYuMC4wODgKK1Byb2JsZW06ICAgICIuIiBkb2Vzbid0IHdvcmsgYWZ0ZXIgdXNpbmcgInJ4IiBpbiBWaXN1YWwgbW9kZS4gIChDaGFybGVzCisJICAgIENhbXBiZWxsKQorU29sdXRpb246ICAgQWxzbyBzdG9yZSB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGluIHRoZSByZWRvIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4wODkKK1Byb2JsZW06ICAgIEluIGEgQyBmaWxlLCB1c2luZyAiPT0iIHRvIGFsaWduIGEgbGluZSBzdGFydGluZyB3aXRoICIqICAiIGFmdGVyCisJICAgIGEgbGluZSB3aXRoICIqIC0iIGluZGVudHMgb25lIHNwYWNlIHRvbyBmZXcuICAoUGlldCBEZWxwb3J0KQorU29sdXRpb246ICAgQWxpZ24gd2l0aCB0aGUgcHJldmlvdXMgbGluZSBpZiB0aGUgY29tbWVudC1zdGFydC1zdHJpbmcgbWF0Y2hlcworCSAgICB0aGVyZS4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4wLjA5MAorUHJvYmxlbTogICAgV2hlbiBhIHdyYXBwaW5nIGxpbmUgZG9lcyBub3QgZml0IGluIGEgd2luZG93IGFuZCAnc2Nyb2xsb2ZmJyBpcworCSAgICBiaWdnZXIgdGhhbiBoYWxmIHRoZSB3aW5kb3cgaGVpZ2h0LCBtb3ZpbmcgdGhlIGN1cnNvciBsZWZ0IG9yCisJICAgIHJpZ2h0IGNhdXNlcyB0aGUgc2NyZWVuIHRvIGZsYXNoIGJhZGx5LiAoTHVib21pciBIb3N0KQorU29sdXRpb246ICAgV2hlbiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gdG8gc2hvdyAnc2Nyb2xsb2ZmJyBzY3JlZW4gbGluZXMgYW5kCisJICAgIG5lYXIgdGhlIGVuZCBvZiB0aGUgbGluZSwgc2hvdyB0aGUgZW5kIG9mIHRoZSBsaW5lLgorRmlsZXM6CSAgICBzcmMvbW92ZS5jCisKK1BhdGNoIDYuMC4wOTEKK1Byb2JsZW06ICAgIFVzaW5nIENUUkwtTyBpbiBJbnNlcnQgbW9kZSwgd2hpbGUgJ3ZpcnR1YWxlZGl0JyBpcyAiYWxsIiBhbmQgdGhlCisJICAgIGN1cnNvciBpcyBhZnRlciB0aGUgZW5kLW9mLWxpbmUsIG1vdmVzIHRoZSBjdXJzb3IgbGVmdC4gKFllZ2FwcGFuCisJICAgIExha3NobWFuYW4pCitTb2x1dGlvbjogICBLZWVwIHRoZSBjdXJzb3IgaW4gdGhlIHNhbWUgcG9zaXRpb24uCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4wLjA5MgorUHJvYmxlbTogICAgVGhlIGV4cGxvcmVyIHBsdWdpbiBkb2Vzbid0IGlnbm9yZSBjYXNlIG9mICdzdWZmaXhlcycgb24KKwkgICAgTVMtV2luZG93cy4gKE1pa2UgV2lsbGlhbXMpCitTb2x1dGlvbjogICBNYXRjaCBvciBpZ25vcmUgY2FzZSBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIE9TLgorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9leHBsb3Jlci52aW0KKworUGF0Y2ggNi4wLjA5MworUHJvYmxlbTogICAgV2hlbiB0aGUgVGNsIGxpYnJhcnkgY291bGRuJ3QgYmUgbG9hZGVkIGR5bmFtaWNhbGx5LCBnZXQgYW4gZXJyb3IKKwkgICAgbWVzc2FnZSB3aGVuIGNsb3NpbmcgYSBidWZmZXIgb3Igd2luZG93LiAoTXVyYW9rYSBUYXJvKQorU29sdXRpb246ICAgT25seSBmcmVlIHN0cnVjdHVyZXMgaWYgYWxyZWFkeSB1c2luZyB0aGUgVGNsIGludGVycHJldGVyLgorRmlsZXM6CSAgICBzcmMvaWZfdGNsLmMKKworUGF0Y2ggNi4wLjA5NAorUHJvYmxlbTogICAgQXRoZW5hOiBXaGVuIGNsaWNraW5nIGluIHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBWaW0gY3Jhc2hlcy4KKwkgICAgKFBhdWwgQWNrZXJzdmlsbGVyKQorU29sdXRpb246ICAgVXNlIHRoZSB0aHVtYiBzaXplIGluc3RlYWQgb2YgdGhlIHdpbmRvdyBwb2ludGVyIG9mIHRoZSBzY3JvbGxiYXIKKwkgICAgKHdoaWNoIGlzIE5VTEwpLiAoRGF2aWQgSGFycmlzb24pCisJICAgIEFsc28gYXZvaWQgdGhhdCBzY3JvbGxpbmcgZ29lcyB0aGUgd3Jvbmcgd2F5IGluIGEgbmFycm93IHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL2d1aV9hdGhlbmEuYworCitQYXRjaCA2LjAuMDk1CitQcm9ibGVtOiAgICBQZXJsOiBEZWxldGluZyBsaW5lcyBtYXkgbGVhdmUgdGhlIGN1cnNvciBiZXlvbmQgdGhlIGVuZCBvZiB0aGUKKwkgICAgZmlsZS4KK1NvbHV0aW9uOiAgIENoZWNrIHRoZSBjdXJzb3IgcG9zaXRpb24gYWZ0ZXIgZGVsZXRpbmcgYSBsaW5lLiAoU2VyZ3VlaSkKK0ZpbGVzOgkgICAgc3JjL2lmX3BlcmwueHMKKworUGF0Y2ggNi4wLjA5NgorUHJvYmxlbTogICAgV2hlbiAiOnNhdmVhcyBmbmFtZSIgZmFpbHMgYmVjYXVzZSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGhlCisJICAgIGZpbGUgbmFtZSBpcyBjaGFuZ2VkIGFueXdheSBhbmQgYSBmb2xsb3dpbmcgIjp3IiB3aWxsIG92ZXJ3cml0ZQorCSAgICB0aGUgZmlsZS4gKEVyaWMgQ2FybGllcikKK1NvbHV0aW9uOiAgIERvbid0IGNoYW5nZSB0aGUgZmlsZSBuYW1lIGlmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMC4wOTcKK1Byb2JsZW06ICAgIFJlLWluZGVudGluZyBpbiBJbnNlcnQgbW9kZSB3aXRoIENUUkwtRiBtYXkgY2F1c2UgYSBjcmFzaCB3aXRoIGEKKwkgICAgbXVsdGktYnl0ZSBlbmNvZGluZy4KK1NvbHV0aW9uOiAgIEF2b2lkIHVzaW5nIGEgY2hhcmFjdGVyIGJlZm9yZSB0aGUgc3RhcnQgb2YgYSBsaW5lLiAoU2VyZ2V5CisJICAgIFZsYXNvdikKK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjAuMDk4CitQcm9ibGVtOiAgICBHVEs6IFdoZW4gdXNpbmcgR25vbWUgdGhlICJTZWFyY2giIGFuZCAiU2VhcmNoIGFuZCBSZXBsYWNlIiBkaWFsb2cKKwkgICAgYm94ZXMgYXJlIG5vdCB0cmFuc2xhdGVkLgorU29sdXRpb246ICAgRGVmaW5lIEVOQUJMRV9OTFMgYmVmb3JlIGluY2x1ZGluZyBnbm9tZS5oLiAoRWR1YXJkbyBGZXJuYW5kZXopCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMsIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMC4wOTkKK1Byb2JsZW06ICAgIEN5Z3dpbjogV2hlbiBydW5uaW5nIFZpIGNvbXBhdGlibGUgTVMtRE9TIGxpbmUgZW5kaW5ncyBjYXVzZQorCSAgICB0cm91YmxlLgorU29sdXRpb246ICAgTWFrZSB0aGUgZGVmYXVsdCBmb3IgJ2ZpbGVmb3JtYXRzJyAidW5peCxkb3MiIGluIFZpIGNvbXBhdGlibGUKKwkgICAgbW9kZS4gIChNaWNoYWVsIFNjaGFhcCkKK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5oCisKK1BhdGNoIDYuMC4xMDAKK1Byb2JsZW06ICAgICI6YmFkZCArMCB0ZXN0JWZpbGUiIGNhdXNlcyBhIGNyYXNoLgorU29sdXRpb246ICAgVGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGUgIiswIiBpcyBOVUwgdGVybWluYXRlZCB3aGVuIGFsbG9jYXRpbmcKKwkgICAgcm9vbSBmb3IgcmVwbGFjaW5nIHRoZSAiJSIuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMC4xMDEKK1Byb2JsZW06ICAgICI6bWtzZXNzaW9uIiBkb2Vzbid0IHJlc3RvcmUgZWRpdGluZyBhIGZpbGUgdGhhdCBoYXMgYSAnIycgb3IgJyUnCisJICAgIGluIGl0cyBuYW1lLiAgKFdvbGZnYW5nIEJsYW5rZW5idXJnKQorU29sdXRpb246ICAgUHV0IGEgYmFja3NsYXNoIGJlZm9yZSB0aGUgJyMnIGFuZCAnJScuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMC4xMDIKK1Byb2JsZW06ICAgIFdoZW4gY2hhbmdpbmcgZm9sZHMgdGhlIGN1cnNvciBtYXkgYXBwZWFyIGhhbGZ3YXkgYSBjbG9zZWQgZm9sZC4KKwkgICAgKE5hbSBTdW5nSHl1bikKK1NvbHV0aW9uOiAgIFNldCB3X2NsaW5lX2ZvbGRlZCBjb3JyZWN0bHkuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4wLjEwMworUHJvYmxlbTogICAgV2hlbiB1c2luZyAnc2Nyb2xsYmluZCcgYSBsYXJnZSB2YWx1ZSBvZiAnc2Nyb2xsb2ZmJyB3aWxsIG1ha2UgdGhlCisJICAgIHNjcm9sbCBiaW5kaW5nIHN0b3AgbmVhciB0aGUgZW5kIG9mIHRoZSBmaWxlLiAoQ29lbiBFbmdlbGJhcnRzKQorU29sdXRpb246ICAgRG9uJ3QgdXNlICdzY3JvbGxvZmYnIHdoZW4gbGltaXRpbmcgdGhlIHRvcGxpbmUgZm9yIHNjcm9sbAorCSAgICBiaW5kaW5nLiAoRGFueSBTdEFtYW50KQorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjEwNAorUHJvYmxlbTogICAgTXVsdGktYnl0ZTogV2hlbiAnJCcgaXMgaW4gJ2Nwb3B0aW9ucycsIHR5cGluZyBhIGRvdWJsZS13aWRlCisJICAgIGNoYXJhY3RlciB0aGF0IG92ZXJ3cml0ZXMgdGhlIGxlZnQgaGFsdmUgb2YgYW4gb2xkIGRvdWJsZS13aWRlCisJICAgIGNoYXJhY3RlciBjYXVzZXMgYSByZWRyYXcgcHJvYmxlbSBhbmQgdGhlIGN1cnNvciBzdG9wcyBibGlua2luZy4KK1NvbHV0aW9uOiAgIENsZWFyIHRoZSByaWdodCBoYWxmIG9mIHRoZSBvbGQgY2hhcmFjdGVyLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4wLjEwNQorUHJvYmxlbTogICAgTXVsdGktYnl0ZTogSW4gYSB3aW5kb3cgb2Ygb25lIGNvbHVtbiB3aWRlLCB3aXRoIHN5bnRheAorCSAgICBoaWdobGlnaHRpbmcgZW5hYmxlZCBhIGNyYXNoIG1pZ2h0IGhhcHBlbi4KK1NvbHV0aW9uOiAgIFNraXAgZ2V0dGluZyB0aGUgc3ludGF4IGF0dHJpYnV0ZSB3aGVuIHRoZSBjaGFyYWN0ZXIgZG9lc24ndCBmaXQKKwkgICAgYW55d2F5LiAgKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMC4xMDYgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gdGhlIHByaW50ZXIgZm9udCBpcyB3cm9uZywgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIEdpdmUgYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZS4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4wLjEwNyAoZXh0cmEpCitQcm9ibGVtOiAgICBWaXNWaW06IFdoZW4gZWRpdGluZyBhbm90aGVyIGZpbGUsIGEgbW9kaWZpZWQgZmlsZSBtYXkgYmUgd3JpdHRlbgorCSAgICB1bmV4cGVjdGVkbHkgYW5kIHdpdGhvdXQgd2FybmluZy4KK1NvbHV0aW9uOiAgIFNwbGl0IHRoZSB3aW5kb3cgaWYgYSBmaWxlIHdhcyBtb2RpZmllZC4KK0ZpbGVzOgkgICAgVmlzVmltL0NvbW1hbmRzLmNwcAorCitQYXRjaCA2LjAuMTA4CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGZvbGRpbmcgY291bGQgdHJ5IGRpc3BsYXlpbmcgbGluZSB6ZXJvLCByZXN1bHRpbmcgaW4gYW4KKwkgICAgZXJyb3IgZm9yIGEgTlVMTCBwb2ludGVyLgorU29sdXRpb246ICAgU3RvcCBkZWNyZW1lbnRpbmcgd190b3BsaW5lIHdoZW4gdGhlIGZpcnN0IGxpbmUgb2YgYSB3aW5kb3cgaXMgaW4KKwkgICAgYSBjbG9zZWQgZm9sZC4KK0ZpbGVzOgkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMC4xMDkKK1Byb2JsZW06ICAgIFhJTTogV2hlbiB0aGUgaW5wdXQgbWV0aG9kIGlzIGVuYWJsZWQsIHJlcGVhdGluZyBhbiBpbnNlcnRpb24gd2l0aAorCSAgICAiLiIgZGlzYWJsZXMgaXQuIChNYXJjZWwgU3ZpdGFsc2t5KQorU29sdXRpb246ICAgRG9uJ3Qgc3RvcmUgdGhlIGlucHV0IG1ldGhvZCBzdGF0dXMgd2hlbiBhIGNvbW1hbmQgY29tZXMgZnJvbSB0aGUKKwkgICAgc3R1ZmYgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvdWkuYworCitQYXRjaCA2LjAuMTEwCitQcm9ibGVtOiAgICBVc2luZyB1bmRvIGFmdGVyIGV4ZWN1dGluZyAiT3gbakF4G2tkZCIgZnJvbSBhIHJlZ2lzdGVyIGluCisJICAgIGFuIGVtcHR5IGJ1ZmZlciBnaXZlcyBhbiBlcnJvciBtZXNzYWdlLiAgKEdlcmhhcmQgSG9jaGhvbHplcikKK1NvbHV0aW9uOiAgIERvbid0IGFkanVzdCB0aGUgYm90dG9tIGxpbmUgbnVtYmVyIG9mIGFuIHVuZG8gYmxvY2sgd2hlbiBpdCdzCisJICAgIHplcm8uICBBZGQgYSB0ZXN0IGZvciB0aGlzIHByb2JsZW0uCitGaWxlczoJICAgIHNyYy91bmRvLmMsIHNyYy90ZXN0ZGlyL3Rlc3QyMC5pbiwgc3JjL3Rlc3RkaXIvdGVzdDIwLm9rCisKK1BhdGNoIDYuMC4xMTEKK1Byb2JsZW06ICAgIFRoZSB2aXJ0Y29sKCkgZnVuY3Rpb24gZG9lc24ndCB0YWtlIGNhcmUgb2YgJ3ZpcnR1YWxlZGl0Jy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgY29sdW1uIG9mZnNldCB3aGVuIG5lZWRlZC4gKFllZ2FwcGFuIExha3NobWFuYW4pCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjExMgorUHJvYmxlbTogICAgVGhlIGV4cGxvcmVyIHBsdWdpbiBkb2Vzbid0IHNvcnQgZGlyZWN0b3JpZXMgd2l0aCBhIHNwYWNlIG9yCisJICAgIHNwZWNpYWwgY2hhcmFjdGVyIGFmdGVyIGEgZGlyZWN0b3J5IHdpdGggYSBzaG9ydGVyIG5hbWUuCitTb2x1dGlvbjogICBJZ25vcmUgdGhlIHRyYWlsaW5nIHNsYXNoIHdoZW4gY29tcGFyaW5nIGRpcmVjdG9yeSBuYW1lcy4gIChNaWtlCisJICAgIFdpbGxpYW1zKQorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9leHBsb3Jlci52aW0KKworUGF0Y2ggNi4wLjExMworUHJvYmxlbTogICAgIjplZGl0IH4vZm5hbWUiIGRvZXNuJ3Qgd29yayBpZiAkSE9NRSBpbmNsdWRlcyBhIHNwYWNlLiAgQWxzbywKKwkgICAgZXhwYW5kaW5nIHdpbGRjYXJkcyB3aXRoIHRoZSBzaGVsbCBtYXkgZmFpbC4gKEpvaG4gRGFuaWVsKQorU29sdXRpb246ICAgRXNjYXBlIHNwYWNlcyB3aXRoIGEgYmFja3NsYXNoIHdoZW4gbmVlZGVkLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL21pc2MxLmMsIHNyYy9wcm90by9taXNjMS5wcm8sIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4wLjExNAorUHJvYmxlbTogICAgVXNpbmcgIjpwIiB3aXRoIGZuYW1lbW9kaWZ5KCkgZGlkbid0IGV4cGFuZCAifi8iIG9yICJ+dXNlci8iIHRvIGEKKwkgICAgZnVsbCBwYXRoLiAgRm9yIFdpbjMyIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3YXMgcHJlcGVuZGVkLgorCSAgICAoTWljaGFlbCBHZWRkZXMpCitTb2x1dGlvbjogICBFeHBhbmQgdGhlIGhvbWUgZGlyZWN0b3J5LgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMC4xMTUgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gdXNpbmcgYSBkaWFsb2cgd2l0aCBhIHRleHRmaWVsZCBpdCBjYW5ub3Qgc2Nyb2xsIHRoZQorCSAgICB0ZXh0LgorU29sdXRpb246ICAgQWRkIEVTX0FVVE9IU0NST0xMIHRvIHRoZSB0ZXh0ZmllbGQgc3R5bGUuIChQZWRybyBHb21lcykKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjAuMTE2IChleHRyYSkKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3MgTlQvMjAwMC9YUDogZmlsZXdyaXRhYmxlKCkgZG9lc24ndCB3b3JrIGNvcnJlY3RseSBmb3IKKwkgICAgZmlsZXN5c3RlbXMgdGhhdCB1c2UgQUNMcy4KK1NvbHV0aW9uOiAgIFVzZSBBQ0wgZnVuY3Rpb25zIHRvIGNoZWNrIGlmIGEgZmlsZSBpcyB3cml0YWJsZS4gKE1pa2UgV2lsbGlhbXMpCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9tYWNyb3MuaCwgc3JjL29zX3dpbjMyLmMsIHNyYy9wcm90by9vc193aW4zMi5wcm8KKworUGF0Y2ggNi4wLjExNyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogd2hlbiBkaXNhYmxpbmcgdGhlIG1lbnUsICJzZXQgbGluZXM9OTk5IiBkb2Vzbid0IHVzZSBhbGwKKwkgICAgdGhlIGF2YWlsYWJsZSBzY3JlZW4gc3BhY2UuCitTb2x1dGlvbjogICBEb24ndCBzdWJ0cmFjdCB0aGUgZml4ZWQgY2FwdGlvbiBoZWlnaHQgYnV0IHRoZSByZWFsIG1lbnUgaGVpZ2h0CisJICAgIGZyb20gdGhlIGF2YWlsYWJsZSBzY3JlZW4gc3BhY2UuICBBbHNvOiBBdm9pZCByZWN1cnNpb24gaW4KKwkgICAgZ3VpX21zd2luX2dldF9tZW51X2hlaWdodCgpLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMC4xMTgKK1Byb2JsZW06ICAgIFdoZW4gJFRNUERJUiBpcyBhIHJlbGF0aXZlIHBhdGgsIHRoZSB0ZW1wIGRpcmVjdG9yeSBpcyBtaXNzaW5nIGEKKwkgICAgdHJhaWxpbmcgc2xhc2ggYW5kIGlzbid0IGRlbGV0ZWQgd2hlbiBWaW0gZXhpdHMuIChQZXRlciBIb2xtKQorU29sdXRpb246ICAgQWRkIHRoZSBzbGFzaCBhZnRlciBleHBhbmRpbmcgdGhlIGRpcmVjdG9yeSB0byBhbiBhYnNvbHV0ZSBwYXRoLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4wLjExOSAoZGVwZW5kcyBvbiBwYXRjaCA2LjAuMTE2KQorUHJvYmxlbTogICAgVk1TOiBmaWxld3JpdGFibGUoKSBkb2Vzbid0IHdvcmsgcHJvcGVybHkuCitTb2x1dGlvbjogICBVc2UgdGhlIHNhbWUgbWV0aG9kIGFzIGZvciBVbml4LiAoWm9sdGFuIEFycGFkZmZ5KQorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMC4xMjAKK1Byb2JsZW06ICAgIFRoZSBjb252ZXJzaW9uIHRvIGh0bWwgaXNuJ3QgY29tcGF0aWJsZSB3aXRoIFhIVE1MLgorU29sdXRpb246ICAgUXVvdGUgdGhlIHZhbHVlcy4gKEplc3MgVGhyeXNvZWUpCitGaWxlczoJICAgIHJ1bnRpbWUvc3ludGF4LzJodG1sLnZpbQorCitQYXRjaCA2LjAuMTIxIChleHRyYSkgKGRlcGVuZHMgb24gcGF0Y2ggNi4wLjExNikKK1Byb2JsZW06ICAgIFdpbjMyOiBBZnRlciBwYXRjaCA2LjAuMTE2IFZpbSBkb2Vzbid0IGNvbXBpbGUgd2l0aCBtaW5ndzMyLgorU29sdXRpb246ICAgQWRkIGFuICNpZmRlZiBIQVZFX0FDTC4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4wLjEyMiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4xNjogU2FtZSByZXNpemUgcHJvYmxlbXMgYXMgcGF0Y2ggNi4wLjExNyBmaXhlZCBmb3IgV2luMzIuICBBbmQKKwkgICAgZGlhbG9nIHRleHRmaWVsZCBwcm9ibGVtIGZyb20gcGF0Y2ggNi4wLjExNS4KK1NvbHV0aW9uOiAgIFNldCBvbGRfbWVudV9oZWlnaHQgb25seSB3aGVuIHVzZWQuICBBZGQgRVNfQVVUT0hTQ1JPTEwgZmxhZy4KKwkgICAgKFZpbmNlIE5lZ3JpKQorRmlsZXM6CSAgICBzcmMvZ3VpX3cxNi5jCisKK1BhdGNoIDYuMC4xMjMgKGRlcGVuZHMgb24gcGF0Y2ggNi4wLjExOSkKK1Byb2JsZW06ICAgIFdpbjE2OiBDb21waWxhdGlvbiBwcm9ibGVtcy4KK1NvbHV0aW9uOiAgIE1vdmUgIiYmIiB0byBvdGhlciBsaW5lcy4gKFZpbmNlIE5lZ3JpKQorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMC4xMjQKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQgdGhhdCBzdGFydHMgd2l0aCAiXD0iCisJICAgIChldmFsdWF0ZWQgYXMgYW4gZXhwcmVzc2lvbiksICJ+IiB3YXMgc3RpbGwgcmVwbGFjZWQgd2l0aCB0aGUKKwkgICAgcHJldmlvdXMgc3Vic3RpdHV0ZSBzdHJpbmcuCitTb2x1dGlvbjogICBTa2lwIHRoZSByZXBsYWNlbWVudCB3aGVuIHRoZSBzdWJzdGl0dXRlIHN0cmluZyBzdGFydHMgd2l0aCAiXD0iLgorCSAgICBBbHNvIGFkanVzdCB0aGUgZG9jdW1lbnRhdGlvbiBhYm91dCBkb3VibGluZyBiYWNrc2xhc2hlcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgcnVudGltZS9kb2MvY2hhbmdlLnR4dAorCitQYXRjaCA2LjAuMTI1IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIHVzaW5nIHRoZSBtdWx0aV9ieXRlX2ltZSBmZWF0dXJlIHByZXNzaW5nIHRoZSBzaGlmdAorCSAgICBrZXkgd291bGQgYmUgaGFuZGxlZCBhcyBpZiBhIGNoYXJhY3RlciB3YXMgZW50ZXJlZCwgdGh1cyBtYXBwaW5ncworCSAgICB3aXRoIGEgc2hpZnRlZCBrZXkgZGlkbid0IHdvcmsuIChDaGFybGVzIENhbXBiZWxsKQorU29sdXRpb246ICAgSWdub3JlIHByZXNzaW5nIHRoZSBzaGlmdCwgY29udHJvbCBhbmQgYWx0IGtleXMuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMC4xMjYKK1Byb2JsZW06ICAgIFRoZSBweXRob24gbGlicmFyeSB3YXMgYWx3YXlzIHN0YXRpY2FsbHkgbGlua2VkLgorU29sdXRpb246ICAgTGluayB0aGUgcHl0aG9uIGxpYnJhcnkgZHluYW1pY2FsbHkuIChNYXR0aGlhcyBLbG9zZSkKK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMC4xMjcKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYSB0ZXJtaW5hbCB0aGF0IHN3YXBzIHNjcmVlbnMgYW5kIHRoZSBOb3JtYWwgYmFja2dyb3VuZAorCSAgICBjb2xvciBoYXMgYSBkaWZmZXJlbnQgYmFja2dyb3VuZCwgdXNpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCBtYXkKKwkgICAgY2F1c2UgdGhlIGNvbG9yIG9mIHRoZSB3cm9uZyBzY3JlZW4gdG8gYmUgY2hhbmdlZC4gKE1hcmsgV2FnZ29uZXIpCitTb2x1dGlvbjogICBEb24ndCBjYWxsIHNjcmVlbl9zdG9wX2hpZ2hsaWdodCgpIGluIHN0b3B0ZXJtY2FwKCkuCitGaWxlczoJICAgIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4wLjEyOAorUHJvYmxlbTogICAgV2hlbiBtb3ZpbmcgYSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvdyB0byB0aGUgZmFyIGxlZnQgb3IgcmlnaHQsCisJICAgIHRoZSBzY3JvbGxiYXJzIGFyZSBub3QgYWRqdXN0ZWQuIChTY290dCBFIExlZSkgIFdoZW4gJ21vdXNlZm9jdXMnCisJICAgIGlzIHNldCB0aGUgbW91c2UgcG9pbnRlciB3YXNuJ3QgYWRqdXN0ZWQuCitTb2x1dGlvbjogICBBZGp1c3QgdGhlIHNjcm9sbGJhcnMgYW5kIHRoZSBtb3VzZSBwb2ludGVyLgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4wLjEyOQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIHZlcnkgbG9uZyBmaWxlIG5hbWUsICI6bHMiIChyZXBlYXRlZCBhIGZldyB0aW1lcykKKwkgICAgY2F1c2VzIGEgY3Jhc2guICBUZXN0IHdpdGggInZpbSBgcGVybCAtZSAncHJpbnQgIkEieDEwMDAnYCIuCisJICAgIChUZWplZGEpCitTb2x1dGlvbjogICBUZXJtaW5hdGUgYSBzdHJpbmcgYmVmb3JlIGdldHRpbmcgaXRzIGxlbmd0aCBpbiBidWZsaXN0X2xpc3QoKS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMC4xMzAKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjpjcHJldiIgd2hpbGUgdGhlIGVycm9yIHdpbmRvdyBpcyBvcGVuLCBhbmQgdGhlIG5ldworCSAgICBsaW5lIGF0IHRoZSB0b3Agd3JhcHMsIHRoZSB3aW5kb3cgaXNuJ3QgY29ycmVjdGx5IGRyYXduLgorCSAgICAoWWVnYXBwYW4gTGFrc2htYW5hbikKK1NvbHV0aW9uOiAgIFdoZW4gcmVkcmF3aW5nIHRoZSB0b3BsaW5lIGRvbid0IHNjcm9sbCB0d2ljZS4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMC4xMzEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYnVmbmFtZSgpIGFuZCB0aGVyZSBhcmUgdHdvIG1hdGNoZXMgZm9yIGxpc3RlZCBidWZmZXJzCisJICAgIGFuZCBvbmUgbWF0Y2ggZm9yIGFuIHVubGlzdGVkIGJ1ZmZlciwgdGhlIHVubGlzdGVkIGJ1ZmZlciBpcyB1c2VkLgorCSAgICAoQXJpYyBCbHVtZXIpCitTb2x1dGlvbjogICBXaGVuIHRoZXJlIGlzIGEgbWF0Y2ggd2l0aCBhIGxpc3RlZCBidWZmZXIsIGRvbid0IGNoZWNrIGZvcgorCSAgICB1bmxpc3RlZCBidWZmZXJzLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4wLjEzMgorUHJvYmxlbTogICAgV2hlbiBzZXR0aW5nICdpbWluc2VydCcgaW4gdGhlIHZpbXJjIGFuZCB1c2luZyBhbiB4dGVybSB3aXRoIHR3bworCSAgICBzY3JlZW5zIHRoZSBydWxlciBpcyBkcmF3biBpbiB0aGUgd3Jvbmcgc2NyZWVuLiAoSWdvciBHb2xkZW5iZXJnKQorU29sdXRpb246ICAgT25seSBkcmF3IHRoZSBydWxlciB3aGVuIHVzaW5nIHRoZSByaWdodCBzY3JlZW4uCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjAuMTMzCitQcm9ibGVtOiAgICBXaGVuIG9wZW5pbmcgYW5vdGhlciBidWZmZXIgd2hpbGUgJ2tleW1hcCcgaXMgc2V0IGFuZCAnaW1pbnNlcnQnCisJICAgIGlzIHplcm8sICdpbWluc2VydCcgaXMgc2V0IHRvIG9uZSB1bmV4cGVjdGVkbHkuIChJZ29yIEdvbGRlbmJlcmcpCitTb2x1dGlvbjogICBEb24ndCBzZXQgJ2ltaW5zZXJ0JyBhcyBhIHNpZGUgZWZmZWN0IG9mIGRlZmluaW5nIGEgIjpsbWFwIgorCSAgICBtYXBwaW5nLiAgT25seSBkbyB0aGF0IHdoZW4gJ2tleW1hcCcgaXMgc2V0LgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jLCBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4wLjEzNAorUHJvYmxlbTogICAgV2hlbiBjb21wbGV0aW5nICI6c2V0IHRhZ3M9IiBhIHBhdGggd2l0aCBhbiBlbWJlZGRlZCBzcGFjZSBjYXVzZXMKKwkgICAgdGhlIGNvbXBsZXRpb24gdG8gc3RvcC4gKFNla3RvciB2YW4gU2tpamxlbikKK1NvbHV0aW9uOiAgIEVzY2FwZSBzcGFjZXMgd2l0aCBiYWNrc2xhc2hlcywgbGlrZSBmb3IgIjpzZXQgcGF0aD0iLiAgQWxzbyB0YWtlCisJICAgIGJhY2tzbGFzaGVzIGludG8gYWNjb3VudCB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBwYXRoCisJICAgIHRvIGNvbXBsZXRlIChlLmcuLCBmb3IgJ2JhY2t1cGRpcicgYW5kICdjc2NvcGVwcmcnKS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvb3B0aW9uLmMsIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4wLjEzNQorUHJvYmxlbTogICAgTWVudXMgdGhhdCBhcmUgbm90IHN1cHBvc2VkIHRvIGRvIGFueXRoaW5nIHVzZWQgIjxOdWw+Iiwgd2hpY2gKKwkgICAgc3RpbGwgcHJvZHVjZWQgYW4gZXJyb3IgYmVlcC4KKwkgICAgV2hlbiBDVFJMLU8gaXMgbWFwcGVkIGZvciBJbnNlcnQgbW9kZSwgIjphbWVudSIgY29tbWFuZHMgZGlkbid0CisJICAgIHdvcmsgaW4gSW5zZXJ0IG1vZGUuCisJICAgIE1lbnUgbGFuZ3VhZ2UgZmFsbHMgYmFjayB0byBFbmdsaXNoIHdoZW4gJExBTkcgZW5kcyBpbiAiQGV1cm8iLgorU29sdXRpb246ICAgVXNlICI8Tm9wPiIgZm9yIGEgbWVudSBpdGVtIHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZywganVzdCBsaWtlCisJICAgIG1hcHBpbmdzLgorCSAgICBVc2UgIjphbm9yZW1lbnUiIGluc3RlYWQgb2YgIjphbWVudSIuCisJICAgIElnbm9yZSAiQGV1cm8iIGluIHRoZSBsb2NhbGUgbmFtZS4KK0ZpbGVzOgkgICAgcnVudGltZS9tYWtlbWVudS52aW0sIHJ1bnRpbWUvbWVudS52aW0sIHNyYy9tZW51LmMKKworUGF0Y2ggNi4wLjEzNgorUHJvYmxlbTogICAgV2hlbiBjb21wbGV0aW5nIGluIEluc2VydCBtb2RlLCBhIG1hcHBpbmcgY291bGQgYmUgdW5leHBlY3RlZGx5CisJICAgIGFwcGxpZWQuCitTb2x1dGlvbjogICBEb24ndCB1c2UgbWFwcGluZ3Mgd2hlbiBjaGVja2luZyBmb3IgYSB0eXBlZCBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4wLjEzNworUHJvYmxlbTogICAgR1VJOiBXaGVuIHVzaW5nIHRoZSBmaW5kIG9yIGZpbmQvcmVwbGFjZSBkaWFsb2cgZnJvbSBJbnNlcnQgbW9kZSwKKwkgICAgdGhlIGlucHV0IG1vZGUgaXMgc3RvcHBlZC4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSB0aGUgaW5wdXQgbWV0aG9kIHN0YXR1cyB3aGVuIHRoZSBtYWluIHdpbmRvdyBkb2Vzbid0CisJICAgIGhhdmUgZm9jdXMuCitGaWxlczoJICAgIHNyYy91aS5jCisKK1BhdGNoIDYuMC4xMzgKK1Byb2JsZW06ICAgIEdVSTogV2hlbiB1c2luZyB0aGUgZmluZCBvciBmaW5kL3JlcGxhY2UgZGlhbG9nIGZyb20gSW5zZXJ0IG1vZGUsCisJICAgIHRoZSB0ZXh0IGlzIGluc2VydGVkIHdoZW4gQ1RSTC1PIGlzIG1hcHBlZC4gKEFuZHJlIFBhbmcpCisJICAgIFdoZW4gb3BlbmluZyB0aGUgZGlhbG9nIGFnYWluLCBhIHdob2xlIHdvcmQgc2VhcmNoIGlzbid0CisJICAgIHJlY29nbml6ZWQuCisJICAgIFdoZW4gZG9pbmcgInJlcGxhY2UgYWxsIiBhIHdob2xlIHdvcmQgc2VhcmNoIHdhcyBuZXZlciBkb25lLgorU29sdXRpb246ICAgRG9uJ3QgcHV0IGEgc2VhcmNoIG9yIHJlcGxhY2UgY29tbWFuZCBpbiB0aGUgaW5wdXQgYnVmZmVyLAorCSAgICBleGVjdXRlIGl0IGRpcmVjdGx5LgorCSAgICBSZWNvZ25pemUgIlw8IiBhbmQgIlw+IiBhZnRlciByZW1vdmluZyAiXFYiLgorCSAgICBBZGQgIlw8IiBhbmQgIlw+IiBhbHNvIGZvciAicmVwbGFjZSBhbGwiLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4wLjEzOQorUHJvYmxlbTogICAgV2hlbiBzdG9wcGluZyAnd2lsZG1lbnUnIGNvbXBsZXRpb24sIHRoZSBzdGF0dXNsaW5lIG9mIHRoZQorCSAgICBib3R0b20tbGVmdCB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvdyBpc24ndCByZWRyYXduLiAoWWVnYXBwYW4KKwkgICAgTGFrc2htYW5hbikKK1NvbHV0aW9uOiAgIFJlZHJhdyBhbGwgdGhlIGJvdHRvbSBzdGF0dXNsaW5lcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMsIHNyYy9wcm90by9zY3JlZW4ucHJvLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4wLjE0MAorUHJvYmxlbTogICAgTWVtb3J5IGFsbG9jYXRlZCBmb3IgbG9jYWwgbWFwcGluZ3MgYW5kIGFiYnJldmlhdGlvbnMgaXMgbGVha2VkCisJICAgIHdoZW4gdGhlIGJ1ZmZlciBpcyB3aXBlZCBvdXQuCitTb2x1dGlvbjogICBDbGVhciB0aGUgbG9jYWwgbWFwcGluZ3Mgd2hlbiBkZWxldGluZyBhIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvZ2V0Y2hhci5jLCBzcmMvcHJvdG8vZ2V0Y2hhci5wcm8sIHNyYy92aW0uaAorCitQYXRjaCA2LjAuMTQxCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6ZW5ldyIgaW4gYW4gZW1wdHkgYnVmZmVyLCBzb21lIGJ1ZmZlci1sb2NhbCB0aGluZ3MKKwkgICAgYXJlIG5vdCBjbGVhcmVkLiAgYjprZXltYXBfbmFtZSBpcyBub3Qgc2V0LgorU29sdXRpb246ICAgQ2xlYXIgdXNlciBjb21tYW5kcyBhbmQgbWFwcGluZ3MgbG9jYWwgdG8gdGhlIGJ1ZmZlciB3aGVuIHJlLXVzaW5nCisJICAgIHRoZSBjdXJyZW50IGJ1ZmZlci4gIFJlbG9hZCB0aGUga2V5bWFwLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4wLjE0MgorUHJvYmxlbTogICAgV2hlbiBQeXRob24gaXMgbGlua2VkIHN0YXRpY2FsbHksIGxvYWRpbmcgZHluYW1pYyBleHRlbnNpb25zIG1pZ2h0CisJICAgIGZhaWwuCitTb2x1dGlvbjogICBBZGQgYW4gZXh0cmEgbGlua2luZyBmbGFnIHdoZW4gbmVlZGVkLiAoQW5kcmV3IFJvZGlvbm9mZikKK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2F1dG8vY29uZmlndXJlCisKK1BhdGNoIDYuMC4xNDMKK1Byb2JsZW06ICAgIFdoZW4gYSBzeW50YXggaXRlbSBpbmNsdWRlcyBhIGxpbmUgYnJlYWsgaW4gYSBwYXR0ZXJuLCB0aGUgc3ludGF4CisJICAgIG1heSBub3QgYmUgdXBkYXRlZCBwcm9wZXJseSB3aGVuIG1ha2luZyBhIGNoYW5nZS4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgImxpbmVicmVha3MiIGFyZ3VtZW50IHRvICI6c3luIHN5bmMiLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9zeW50YXgudHh0LCBzcmMvc2NyZWVuLmMsIHNyYy9zdHJ1Y3RzLmgsIHNyYy9zeW50YXguYworCitQYXRjaCA2LjAuMTQ0CitQcm9ibGVtOiAgICBBZnRlciBwYXRjaCA2LjAuMDg4IHJlZG9pbmcgInZlVSIgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgRG9uJ3QgYWRkIHRoZSAiVSIgdG8gdGhlIHJlZG8gYnVmZmVyLCBpdCB3aWxsIGJlIHVzZWQgYXMgYW4gdW5kbworCSAgICBjb21tYW5kLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjE0NQorUHJvYmxlbTogICAgV2hlbiBWaW0gY2FuJ3QgcmVhZCBhbnkgaW5wdXQgaXQgbWlnaHQgZ2V0IHN0dWNrLiAgV2hlbgorCSAgICByZWRpcmVjdGluZyBzdGRpbiBhbmQgc3RkZXJyIFZpbSB3b3VsZCBub3QgcmVhZCBjb21tYW5kcyBmcm9tIGEKKwkgICAgZmlsZS4gIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgV2hlbiByZXBlYXRlZGx5IHRyeWluZyB0byByZWFkIGEgY2hhcmFjdGVyIHdoZW4gaXQncyBub3QgcG9zc2libGUsCisJICAgIGV4aXQgVmltLiAgV2hlbiBzdGRpbiBhbmQgc3RkZXJyIGFyZSBub3QgYSB0dHksIHN0aWxsIHRyeSByZWFkaW5nCisJICAgIGZyb20gdGhlbSwgYnV0IGRvbid0IGRvIGEgYmxvY2tpbmcgd2FpdC4KK0ZpbGVzOgkgICAgc3JjL3VpLmMKKworUGF0Y2ggNi4wLjE0NgorUHJvYmxlbTogICAgV2hlbiAnc3RhdHVzbGluZScgY29udGFpbnMgIiV7Jy0nfSIgdGhpcyByZXN1bHRzIGluIGEgemVyby4KKwkgICAgKE1pbGFuIFZhbmN1cmEpCitTb2x1dGlvbjogICBEb24ndCBoYW5kbGUgbnVtYmVycyB3aXRoIGEgbWludXMgYXMgYSBudW1iZXIsIHRoZXkgd2VyZSBub3QKKwkgICAgZGlzcGxheWVkIGFueXdheS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMC4xNDcKK1Byb2JsZW06ICAgIEl0J3Mgbm90IGVhc3kgdG8gbWFyayBhIFZpbSB2ZXJzaW9uIGFzIGJlaW5nIG1vZGlmaWVkLiAgVGhlIG5ldworCSAgICBsaWNlbnNlIHJlcXVpcmVzIHRoaXMuCitTb2x1dGlvbjogICBBZGQgdGhlIC0tbW9kaWZpZWQtYnkgYXJndW1lbnQgdG8gY29uZmlndXJlIGFuZCB0aGUgTU9ESUZJRURfQlkKKwkgICAgZGVmaW5lLiAgSSdzIHVzZWQgaW4gdGhlIGludHJvIHNjcmVlbiBhbmQgdGhlICI6dmVyc2lvbiIgb3V0cHV0LgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4sIHNyYy9jb25maWcuaC5pbiwKKwkgICAgc3JjL2ZlYXR1cmUuaCwgc3JjL3ZlcnNpb24uYworCitQYXRjaCA2LjAuMTQ4CitQcm9ibGVtOiAgICBBZnRlciAicCIgaW4gYW4gZW1wdHkgbGluZSwgYFsgZ29lcyB0byB0aGUgc2Vjb25kIGNoYXJhY3Rlci4KKwkgICAgKEtvbnRyYSBHZXJnZWx5KQorU29sdXRpb246ICAgRG9uJ3QgaW5jcmVtZW50IHRoZSBjb2x1bW4gbnVtYmVyIGluIGFuIGVtcHR5IGxpbmUuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjAuMTQ5CitQcm9ibGVtOiAgICBUaGUgcGF0dGVybiAiXCguXHstfVwpKiIgY2F1c2VzIGEgaGFuZy4gIFdoZW4gdXNpbmcgYSBzZWFyY2gKKwkgICAgcGF0dGVybiB0aGF0IGNhdXNlcyBhIHN0YWNrIG92ZXJmbG93IHRvIGJlIGRldGVjdGVkIFZpbSBjb3VsZAorCSAgICBzdGlsbCBoYW5nLgorU29sdXRpb246ICAgQ29ycmVjdGx5IHJlcG9ydCAib3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIgd2hlbiB1c2luZyAiXHstfSIuCisJICAgIENoZWNrIGZvciAib3V0X29mX3N0YWNrIiBpbnNpZGUgbG9vcHMgdG8gYXZvaWQgYSBoYW5nLgorRmlsZXM6CSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4wLjE1MAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIG11bHRpLWJ5dGUgZW5jb2RpbmcsIHBhdGNoIDYuMC4xNDggY2F1c2VzICJwIiB0byB3b3JrCisJICAgIGxpa2UgIlAiLiAoU3VuZy1IeXVuIE5hbSkKK1NvbHV0aW9uOiAgIENvbXB1dGUgdGhlIGJ5dGUgbGVuZ3RoIG9mIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjAuMTUxCitQcm9ibGVtOiAgICBSZWRyYXdpbmcgdGhlIHN0YXR1cyBsaW5lIGFuZCBydWxlciBjYW4gYmUgd3Jvbmcgd2hlbiBpdCBjb250YWlucworCSAgICBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBVc2UgY2hhcmFjdGVyIHdpZHRoIGFuZCBieXRlIGxlbmd0aCBjb3JyZWN0bHkuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjAuMTUyCitQcm9ibGVtOiAgICBzdHJ0cmFucygpIGNvdWxkIGhhbmcgb24gYW4gaWxsZWdhbCBVVEYtOCBieXRlIHNlcXVlbmNlLgorU29sdXRpb246ICAgU2tpcCBvdmVyIGlsbGVnYWwgYnl0ZXMuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9jaGFyc2V0LmMKKworUGF0Y2ggNi4wLjE1MworUHJvYmxlbTogICAgV2hlbiB1c2luZyAoaWxsZWdhbCkgZG91YmxlLWJ5dGUgY2hhcmFjdGVycyBhbmQgVmltIHN5bnRheAorCSAgICBoaWdobGlnaHRpbmcgVmltIGNhbiBjcmFzaC4gKFlhc3VoaXJvIE1hdHN1bW90bykKK1NvbHV0aW9uOiAgIEluY3JlYXNlIGEgcG9pbnRlciBvdmVyIGEgY2hhcmFjdGVyIGluc3RlYWQgb2YgYSBieXRlLgorRmlsZXM6CSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4wLjE1NAorUHJvYmxlbTogICAgTVMtRE9TIGFuZCBNUy1XaW5kb3dzOiBUaGUgbWVudSBlbnRyaWVzIGZvciB4eGQgZG9uJ3Qgd29yayB3aGVuCisJICAgIHRoZXJlIGlzIG5vIHh4ZCBpbiB0aGUgcGF0aC4KKwkgICAgV2hlbiBjb252ZXJ0aW5nIGJhY2sgZnJvbSBIZXggdGhlIGZpbGV0eXBlIG1heSByZW1haW4gInh4ZCIgaWYgaXQKKwkgICAgaXMgbm90IGRldGVjdGVkLgorU29sdXRpb246ICAgV2hlbiB4eGQgaXMgbm90IGluIHRoZSBwYXRoIHVzZSB0aGUgb25lIGluIHRoZSBydW50aW1lIGRpcmVjdG9yeSwKKwkgICAgd2hlcmUgdGhlIGluc3RhbGwgcHJvZ3JhbSBoYXMgcHV0IGl0LgorCSAgICBDbGVhciB0aGUgJ2ZpbGV0eXBlJyBvcHRpb24gYmVmb3JlIGRldGVjdGluZyB0aGUgbmV3IHZhbHVlLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMC4xNTUKK1Byb2JsZW06ICAgIE1hYzogY29tcGlsYXRpb24gcHJvYmxlbXMgaW4gdWkuYyBhZnRlciBwYXRjaCA2LjAuMTQ1LiAoQXhlbAorCSAgICBLaWVsaG9ybikKK1NvbHV0aW9uOiAgIERvbid0IGNhbGwgbWNoX2luY2hhcigpIHdoZW4gTk9fQ09OU09MRSBpcyBkZWZpbmVkLgorRmlsZXM6CSAgICBzcmMvdWkuYworCitQYXRjaCA2LjAuMTU2CitQcm9ibGVtOiAgICBTdGFydGluZyBWaW0gd2l0aCB0aGUgLWIgYXJndW1lbnQgYW5kIHR3byBmaWxlcywgIjpuZXh0IiBkb2Vzbid0CisJICAgIHNldCAnYmluYXJ5JyBpbiB0aGUgc2Vjb25kIGZpbGUsIGxpa2UgVmltIDUuNy4gKE5vcm1hbiBEaWFtb25kKQorU29sdXRpb246ICAgU2V0IHRoZSBnbG9iYWwgdmFsdWUgZm9yICdiaW5hcnknLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4wLjE1NworUHJvYmxlbTogICAgV2hlbiBkZWZpbmluZyBhIHVzZXIgY29tbWFuZCB3aXRoICItY29tcGxldGU9ZGlyIiBmaWxlcyB3aWxsIGFsc28KKwkgICAgYmUgZXhwYW5kZWQuICBBbHNvLCAiLWNvbXBsZXRlPW1hcHBpbmciIGRvZXNuJ3QgYXBwZWFyIHRvIHdvcmsuCisJICAgIChNaWNoYWVsIE5hdW1hbm4pCitTb2x1dGlvbjogICBVc2UgdGhlIGV4cGFuc2lvbiBmbGFncyBkZWZpbmVkIHdpdGggdGhlIHVzZXIgY29tbWFuZC4KKwkgICAgSGFuZGxlIGV4cGFuZGluZyBtYXBwaW5ncyBzcGVjaWZpY2FsbHkuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMC4xNTgKK1Byb2JsZW06ICAgIFdoZW4gZ2V0dGluZyB0aGUgd2FybmluZyBmb3IgYSBmaWxlIGJlaW5nIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0KKwkgICAgYW5kIHJlbG9hZGluZyB0aGUgZmlsZSwgdGhlICdyZWFkb25seScgb3B0aW9uIGlzIHJlc2V0LCBldmVuIHdoZW4KKwkgICAgdGhlIHBlcm1pc3Npb25zIGRpZG4ndCBjaGFuZ2UuIChNYXJjZWwgU3ZpdGFsc2t5KQorU29sdXRpb246ICAgS2VlcCAncmVhZG9ubHknIHNldCB3aGVuIHJlbG9hZGluZyBhIGZpbGUgYW5kIHRoZSBwZXJtaXNzaW9ucworCSAgICBkaWRuJ3QgY2hhbmdlLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4wLjE1OQorUHJvYmxlbTogICAgV2lsZGNhcmQgZXhwYW5zaW9uIGZvciAiOmVtZW51IiBhbHNvIHNob3dzIHNlcGFyYXRvcnMuCitTb2x1dGlvbjogICBTa2lwIG1lbnUgc2VwYXJhdG9ycyBmb3IgIjplbWVudSIsICI6cG9wdXAiIGFuZCAiOnRlYXJvZmYiLgorCSAgICBBbHNvLCBkb24ndCBoYW5kbGUgIjp0bWVudSIgYXMgaWYgaXQgd2FzICI6dGVhcm9mZiIuICBBbmQgbGVhdmUKKwkgICAgb3V0IHRoZSBhbHRlcm5hdGl2ZXMgd2l0aCAiJiIgaW5jbHVkZWQuCitGaWxlczoJICAgIHNyYy9tZW51LmMKKworUGF0Y2ggNi4wLjE2MAorUHJvYmxlbTogICAgV2hlbiBjb21waWxpbmcgd2l0aCBHQ0MgMy4wLjIgYW5kIHVzaW5nIHRoZSAiLU8yIiBhcmd1bWVudCwgdGhlCisJICAgIG9wdGltaXplciBjYXVzZXMgYSBwcm9ibGVtIHRoYXQgbWFrZXMgVmltIGNyYXNoLgorU29sdXRpb246ICAgQWRkIGEgY29uZmlndXJlIGNoZWNrIHRvIGF2b2lkICItTzIiIGZvciB0aGlzIHZlcnNpb24gb2YgZ2NjLgorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluLCBzcmMvYXV0by9jb25maWd1cmUKKworUGF0Y2ggNi4wLjE2MSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogQml0bWFwcyBkb24ndCB3b3JrIHdpdGggc2lnbnMuCitTb2x1dGlvbjogICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBiaXRtYXBzIHdpdGggc2lnbnMuIChNdXJhb2thIFRhcm8pCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9mZWF0dXJlLmgsIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfeDExLmMsCisJICAgIHNyYy9wcm90by9ndWlfdzMyLnBybywgc3JjL3Byb3RvL2d1aV94MTEucHJvCisKK1BhdGNoIDYuMC4xNjIKK1Byb2JsZW06ICAgIENsaWVudC1zZXJ2ZXI6IEFuIGVycm9yIG1lc3NhZ2UgZm9yIGEgd3JvbmcgZXhwcmVzc2lvbiBhcHBlYXJzIGluCisJICAgIHRoZSBzZXJ2ZXIgaW5zdGVhZCBvZiB0aGUgY2xpZW50LgorU29sdXRpb246ICAgUGFzcyB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudC4gIEFsc28KKwkgICAgYWRqdXN0IHRoZSBleGFtcGxlIGNvZGUuIChGbGVtbWluZyBNYWRzZW4pCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmgsIHNyYy9pZl94Y21kc3J2LmMsIHNyYy9tYWluLmMsIHNyYy9vc19tc3dpbi5jLAorCSAgICBzcmMvcHJvdG8vaWZfeGNtZHNydi5wcm8sIHNyYy9wcm90by9vc19tc3dpbi5wcm8sCisJICAgIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBydW50aW1lL3Rvb2xzL3hjbWRzcnZfY2xpZW50LmMKKworUGF0Y2ggNi4wLjE2MworUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIEdVSSBkaWFsb2csIGEgZmlsZSBuYW1lIGlzIHNvbWV0aW1lcyB1c2VkIGxpa2UgaXQgd2FzCisJICAgIGEgZGlyZWN0b3J5LgorU29sdXRpb246ICAgU2VwYXJhdGUgcGF0aCBhbmQgZmlsZSBuYW1lIHByb3Blcmx5LgorCSAgICBGb3IgR1RLLCBNb3RpZiBhbmQgQXRoZW5hIGNvbmNhdGVuYXRlIGRpcmVjdG9yeSBhbmQgZmlsZSBuYW1lIGZvcgorCSAgICB0aGUgZGVmYXVsdCBzZWxlY3Rpb24uCitGaWxlczoJICAgIHNyYy9kaWZmLmMsIHNyYy9leF9jbWRzLmMsIHNyYy9leF9jbWRzMi5jLCBzcmMvZXhfZG9jbWQuYywKKwkgICAgc3JjL2d1aV9hdGhlbmEuYywgc3JjL2d1aV9ndGsuYywgc3JjL2d1aV9tb3RpZi5jLCBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMC4xNjQKK1Byb2JsZW06ICAgIEFmdGVyIHBhdGNoIDYuMC4xMzUgdGhlIG1lbnUgZW50cmllcyBmb3IgcGFzdGluZyBkb24ndCB3b3JrIGluCisJICAgIEluc2VydCBhbmQgVmlzdWFsIG1vZGUuIChNdXJhb2thIFRhcm8pCitTb2x1dGlvbjogICBBZGQgPHNjcmlwdD4gdG8gYWxsb3cgc2NyaXB0LWxvY2FsIG1hcHBpbmdzLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMC4xNjUKK1Byb2JsZW06ICAgIFVzaW5nIC0tcmVtb3RlIGFuZCBleGVjdXRpbmcgbG9jYWxseSBnaXZlcyB1bmF2b2lkYWJsZSBlcnJvcgorCSAgICBtZXNzYWdlcy4KK1NvbHV0aW9uOiAgIEFkZCAtLXJlbW90ZS1zaWxlbnQgYW5kIC0tcmVtb3RlLXdhaXQtc2lsZW50IHRvIHNpbGVudGx5IGV4ZWN1dGUKKwkgICAgbG9jYWxseS4KKwkgICAgRm9yIFdpbjMyIHRoZXJlIHdhcyBubyBlcnJvciBtZXNzYWdlIHdoZW4gYSBzZXJ2ZXIgZGlkbid0IGV4aXN0LgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvaWZfeGNtZHNydi5jLCBzcmMvbWFpbi5jLCBzcmMvb3NfbXN3aW4uYywKKwkgICAgc3JjL3Byb3RvL2lmX3hjbWRzcnYucHJvLCBzcmMvcHJvdG8vb3NfbXN3aW4ucHJvCisKK1BhdGNoIDYuMC4xNjYKK1Byb2JsZW06ICAgIEdVSTogVGhlcmUgaXMgbm8gd2F5IHRvIGF2b2lkIGRpYWxvZ3MgdG8gcG9wIHVwLgorU29sdXRpb246ICAgQWRkIHRoZSAnYycgZmxhZyB0byAnZ3Vpb3B0aW9ucyc6IFVzZSBjb25zb2xlIGRpYWxvZ3MuICAoWWVnYXBwYW4KKwkgICAgTGFrc2htYW5hbikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHNyYy9vcHRpb24uaCwgc3JjL21lc3NhZ2UuYworCitQYXRjaCA2LjAuMTY3CitQcm9ibGVtOiAgICBXaGVuICdmaWxlZW5jb2RpbmdzJyBpcyAibGF0aW4yIiBzb21lIGNoYXJhY3RlcnMgaW4gdGhlIGhlbHAgZmlsZXMKKwkgICAgYXJlIGRpc3BsYXllZCB3cm9uZy4KK1NvbHV0aW9uOiAgIEZvcmNlIHRoZSAnZmlsZWVuY29kaW5nJyBmb3IgdGhlIGhlbHAgZmlsZXMgdG8gYmUgImxhdGluMSIuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjAuMTY4CitQcm9ibGVtOiAgICAiOiVzL1xuLyMvIiBkb2Vzbid0IHJlcGxhY2UgYXQgYW4gZW1wdHkgbGluZS4gKEJydWNlIERlVmlzc2VyKQorU29sdXRpb246ICAgRG9uJ3Qgc2tpcCBtYXRjaGVzIGFmdGVyIGpvaW5pbmcgdHdvIGxpbmVzLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMC4xNjkKK1Byb2JsZW06ICAgIFdoZW4gcnVuIGFzIGV2aW0gYW5kIHRoZSBHVUkgY2FuJ3QgYmUgc3RhcnRlZCB3ZSBnZXQgc3R1Y2sgaW4gYQorCSAgICB0ZXJtaW5hbCB3aXRob3V0IG1lbnVzIGluIEluc2VydCBtb2RlLgorU29sdXRpb246ICAgRXhpdCB3aGVuIHVzaW5nICJldmltIiBhbmQgImd2aW0gLXkiIHdoZW4gdGhlIEdVSSBjYW4ndCBiZQorCSAgICBzdGFydGVkLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMC4xNzAKK1Byb2JsZW06ICAgIFdoZW4gcHJpbnRpbmcgZG91YmxlLXdpZHRoIGNoYXJhY3RlcnMgdGhlIHNpemUgb2YgdGFicyBhZnRlciB0aGVtCisJICAgIGlzIHdyb25nLiAgKE11cmFva2EgVGFybykKK1NvbHV0aW9uOiAgIENvcnJlY3RseSBjb21wdXRlIHRoZSBjb2x1bW4gYWZ0ZXIgYSBkb3VibGUtd2lkdGggY2hhcmFjdGVyLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjAuMTcxCitQcm9ibGVtOiAgICBXaXRoICdrZXltb2RlbCcgaW5jbHVkaW5nICJzdGFydHNlbCIsIGluIEluc2VydCBtb2RlIGFmdGVyIHRoZSBlbmQKKwkgICAgb2YgYSBsaW5lLCBzaGlmdC1MZWZ0IGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvci4gKFN0ZXZlIEhhbGwpCitTb2x1dGlvbjogICBDVFJMLU8gZG9lc24ndCBtb3ZlIHRoZSBjdXJzb3IgbGVmdCwgbmVlZCB0byBkbyB0aGF0IGV4cGxpY2l0bHkuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4wLjE3MgorUHJvYmxlbTogICAgQ1RSTC1RIGRvZXNuJ3QgcmVwbGFjZSBDVFJMLVYgYWZ0ZXIgQ1RSTC1YIGluIEluc2VydCBtb2RlIHdoaWxlIGl0CisJICAgIGRvZXMgaW4gbW9zdCBvdGhlciBzaXR1YXRpb25zLgorU29sdXRpb246ICAgTWFrZSBDVFJMLVggQ1RSTC1RIHdvcmsgbGlrZSBDVFJMLVggQ1RSTC1WIGluIEluc2VydCBtb2RlLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMC4xNzMKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIlAiIHRvIGluc2VydCBhIGxpbmUgYnJlYWsgdGhlIGN1cnNvciByZW1haW5zIHBhc3QgdGhlCisJICAgIGVuZCBvZiB0aGUgbGluZS4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciB0aGUgY3Vyc29yIGJlaW5nIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4wLjE3NAorUHJvYmxlbTogICAgQWZ0ZXIgdXNpbmcgImdkIiBvciAiZ0QiIHRoZSBzZWFyY2ggZGlyZWN0aW9uIGZvciAibiIgbWF5IHN0aWxsIGJlCisJICAgIGJhY2t3YXJkcy4gKFNlcnZhdGl1cyBCcmFuZHQpCitTb2x1dGlvbjogICBSZXNldCB0aGUgc2VhcmNoIGRpcmVjdGlvbiB0byBmb3J3YXJkLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHNyYy9zZWFyY2guYywgc3JjL3Byb3RvL3NlYXJjaC5wcm8KKworUGF0Y2ggNi4wLjE3NQorUHJvYmxlbTogICAgIjpoZWxwIC9ceihcKSIgZG9lc24ndCB3b3JrLiAoVGhvbWFzIEtvZWhsZXIpCitTb2x1dGlvbjogICBEb3VibGUgdGhlIGJhY2tzbGFzaGVzLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMC4xNzYKK1Byb2JsZW06ICAgIFdoZW4ga2lsbGVkIGJ5IGEgc2lnbmFsIGF1dG9jb21tYW5kcyBhcmUgc3RpbGwgdHJpZ2dlcmVkIGFzIGlmCisJICAgIG5vdGhpbmcgaGFwcGVuZWQuCitTb2x1dGlvbjogICBBZGQgdGhlIHY6ZHlpbmcgdmFyaWFibGUgdG8gYWxsb3cgYXV0b2NvbW1hbmRzIHRvIHdvcmsgZGlmZmVyZW50bHkKKwkgICAgd2hlbiBhIGRlYWRseSBzaWduYWwgaGFzIGJlZW4gdHJhcHBlZC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL29zX3VuaXguYywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMC4xNzcKK1Byb2JsZW06ICAgIFdoZW4gJ2NvbW1lbnRzdHJpbmcnIGlzIGVtcHR5IGFuZCAnZm9sZG1ldGhvZCcgaXMgIm1hcmtlciIsICJ6ZiIKKwkgICAgZG9lc24ndCB3b3JrLiAoVGhvbWFzIFMuIFVyYmFuKQorU29sdXRpb246ICAgQWRkIHRoZSBtYXJrZXIgZXZlbiB3aGVuICdjb21tZW50c3RyaW5nJyBpcyBlbXB0eS4KK0ZpbGVzOgkgICAgc3JjL2ZvbGQuYywgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4xNzgKK1Byb2JsZW06ICAgIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgZnJvbSB4cF9iYWNrc2xhc2ggZmllbGQuCitTb2x1dGlvbjogICBJbml0aWFsaXplIHhwX2JhY2tzbGFzaCBmaWVsZCBwcm9wZXJseS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvbWlzYzEuYywgc3JjL3RhZy5jCisKK1BhdGNoIDYuMC4xNzkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIGRpc3BsYXlpbmcgVVRGLTggY2hhcmFjdGVycyBtYXkgcmVhZCB1bmluaXRpYWxpemVkCisJICAgIG1lbW9yeS4KK1NvbHV0aW9uOiAgIEFkZCB1dGZjX3B0cjJsZW5fY2hlY2tfbGVuKCkgdG8gYXZvaWQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgYQorCSAgICBzdHJpbmcuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jLCBzcmMvcHJvdG8vbWJ5dGUucHJvLCBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMC4xODAKK1Byb2JsZW06ICAgIEV4cGFuZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gYSBzdHJpbmcgdGhhdCBlbmRzIGluIGEKKwkgICAgYmFja3NsYXNoIGNvdWxkIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorU29sdXRpb246ICAgRGV0ZWN0IHRoZSB0cmFpbGluZyBiYWNrc2xhc2guCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMC4xODEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjpjZCBkaXIiIG1lbW9yeSB3YXMgbGVha2VkLgorU29sdXRpb246ICAgRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gIEFsc28gYXZvaWQgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkKKwkgICAgcmVhZC4KK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4wLjE4MgorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIHJlZ2V4cCBvbiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMsIGNvdWxkIHRyeSB0byByZWFkIGEKKwkgICAgY2hhcmFjdGVyIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuCitTb2x1dGlvbjogICBEb24ndCBkZWNyZW1lbnQgYSBwb2ludGVyIHRvIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuCitGaWxlczoJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjAuMTgzCitQcm9ibGVtOiAgICBMZWFraW5nIG1lbW9yeSB3aGVuICI6ZnVuYyEiIHJlZGVmaW5lcyBhIGZ1bmN0aW9uLgorU29sdXRpb246ICAgRnJlZSB0aGUgZnVuY3Rpb24gbmFtZSB3aGVuIGl0J3Mgbm90IHVzZWQuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjE4NAorUHJvYmxlbTogICAgTGVha2luZyBtZW1vcnkgd2hlbiBleHBhbmRpbmcgb3B0aW9uIHZhbHVlcy4KK1NvbHV0aW9uOiAgIERvbid0IGFsd2F5cyBjb3B5IHRoZSBleHBhbmRlZCBvcHRpb24gaW50byBhbGxvY2F0ZWQgbWVtb3J5LgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4wLjE4NQorUHJvYmxlbTogICAgQ3Jhc2ggaW4gVmltIHdoZW4gcGFzdGluZyBhIHNlbGVjdGlvbiBpbiBhbm90aGVyIGFwcGxpY2F0aW9uLCBvbiBhCisJICAgIDY0IGJpdCBtYWNoaW5lLgorU29sdXRpb246ICAgRml4IHRoZSBmb3JtYXQgZm9yIGFuIEF0b20gdG8gMzIgYml0cy4gKFBldGVyIERlcnIpCitGaWxlczoJICAgIHNyYy91aS5jCisKK1BhdGNoIDYuMC4xODYKK1Byb2JsZW06ICAgIFgxMTogVGhyZWUgd2FybmluZ3Mgd2hlbiBjb21waWxpbmcgdGhlIGNsaWVudC1zZXJ2ZXIgY29kZS4KK1NvbHV0aW9uOiAgIEFkZCBhIHR5cGVjYXN0IHRvIHVuc2lnbmVkIGNoYXIuCitGaWxlczoJICAgIHNyYy9pZl94Y21kc3J2LmMKKworUGF0Y2ggNi4wLjE4NworUHJvYmxlbTogICAgIkkiIGluIFZpc3VhbCBtb2RlIGFuZCB0aGVuICJ1IiByZXBvcnRzIHRvbyBtYW55IGNoYW5nZXMuIChBbmRyZXcKKwkgICAgU3RyeWtlcikKKwkgICAgIkkiIGluIFZpc3VhbCBsaW5ld2lzZSBtb2RlIGFkanVzdHMgdGhlIGluZGVudCBmb3Igbm8gYXBwYXJlbnQKKwkgICAgcmVhc29uLgorU29sdXRpb246ICAgT25seSBzYXZlIHRob3NlIGxpbmVzIGZvciB1bmRvIHRoYXQgYXJlIGNoYW5nZWQuCisJICAgIERvbid0IGNoYW5nZSB0aGUgaW5kZW50IGFmdGVyIGluc2VydGluZyBpbiBWaXN1YWwgbGluZXdpc2UgbW9kZS4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMC4xODgKK1Byb2JsZW06ICAgIFdpbjMyOiBBZnRlciBwYXRjaCA2LjAuMTYxIHNpZ25zIGRlZmluZWQgaW4gdGhlIHZpbXJjIGZpbGUgZG9uJ3QKKwkgICAgd29yay4KK1NvbHV0aW9uOiAgIEluaXRpYWxpemUgdGhlIHNpZ24gaWNvbnMgYWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBHVUkuIChWaW5jZQorCSAgICBOZWdyaSkKK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvZ3VpX3gxMS5jCisKK1BhdGNoIDYuMC4xODkKK1Byb2JsZW06ICAgIFRoZSBzaXplIG9mIHRoZSBWaXN1YWwgYXJlYSBpc24ndCBhbHdheXMgZGlzcGxheWVkIHdoZW4gc2Nyb2xsaW5nCisJICAgICgncnVsZXInIG9mZiwgJ3Nob3djbWQnIG9uKS4gIEFsc28gbm90IHdoZW4gdXNpbmcgYSBzZWFyY2gKKwkgICAgY29tbWFuZC4gKFN5bHZhaW4gSGl0aWVyKQorU29sdXRpb246ICAgUmVkaXNwbGF5IHRoZSBzaXplIG9mIHRoZSBzZWxlY3Rpb24gYWZ0ZXIgc2hvd2luZyB0aGUgbW9kZS4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMC4xOTAKK1Byb2JsZW06ICAgIEdVSTogd2hlbiAnbW91c2UnIGlzIGVtcHR5IGEgY2xpY2sgd2l0aCB0aGUgbWlkZGxlIGJ1dHRvbiBzdGlsbAorCSAgICBtb3ZlcyB0aGUgY3Vyc29yLgorU29sdXRpb246ICAgUGFzdGUgYXQgdGhlIGN1cnNvciBwb3NpdGlvbiBpbnN0ZWFkIG9mIHRoZSBtb3VzZSBwb3NpdGlvbi4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4xOTEKK1Byb2JsZW06ICAgIFdoZW4gbm8gc2VydmVycyBhcmUgYXZhaWxhYmxlIHNlcnZlcmxpc3QoKSBnaXZlcyBhbiBlcnJvciBpbnN0ZWFkCisJICAgIG9mIHJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcuIChIYXJpIEtyaXNobmEpCitTb2x1dGlvbjogICBEb24ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjE5MgorUHJvYmxlbTogICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCwgInlsaiIgZ29lcyB0byB0aGUgd3JvbmcgY29sdW1uLiAoQW5kcmV3CisJICAgIE5pa2l0aW4pCitTb2x1dGlvbjogICBSZXNldCB0aGUgZmxhZyB0aGF0IHdfdmlydGNvbCBpcyB2YWxpZCB3aGVuIG1vdmluZyB0aGUgY3Vyc29yIGJhY2sKKwkgICAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcGVyYXRlZCBhcmVhLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjE5MworUHJvYmxlbTogICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCwgY29sKCIuIikgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGluZQorCSAgICBzaG91bGQgcmV0dXJuIG9uZSBleHRyYS4KK1NvbHV0aW9uOiAgIEFkZCBvbmUgdG8gdGhlIGNvbHVtbi4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjAuMTk0CitQcm9ibGVtOiAgICAiLS1yZW1vdGUtc2lsZW50IiB0cmllcyB0byBzZW5kIGEgcmVwbHkgdG8gdGhlIGNsaWVudCwgbGlrZSBpdCB3YXMKKwkgICAgIi0tcmVtb3RlLXdhaXQiLgorU29sdXRpb246ICAgUHJvcGVybHkgY2hlY2sgZm9yIHRoZSBhcmd1bWVudC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjAuMTk1CitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0IGFuZCBhIHNlYXJjaCBzdGFydHMgaW4gdmlydHVhbCBzcGFjZQorCSAgICAiOmNhbGwgc2VhcmNoKCd4JykiIGdvZXMgdG8gdGhlIHdyb25nIHBvc2l0aW9uLiAoRXJpYyBMb25nKQorU29sdXRpb246ICAgUmVzZXQgY29sYWRkIHdoZW4gZmluZGluZyBhIG1hdGNoLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4wLjE5NgorUHJvYmxlbTogICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCwgJ3NlbGVjdGlvbicgaXMgImV4Y2x1c2l2ZSIgYW5kIHZpc3VhbGx5CisJICAgIHNlbGVjdGluZyBwYXJ0IG9mIGEgdGFiIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUsICJ4IiBqb2lucyBpdCB3aXRoCisJICAgIHRoZSBwcmV2aW91cyBsaW5lLiAgQWxzbywgd2hlbiB0aGUgc2VsZWN0aW9uIHNwYW5zIG1vcmUgdGhhbiBvbmUKKwkgICAgbGluZSB0aGUgd2hvbGUgdGFiIGlzIGRlbGV0ZWQuCitTb2x1dGlvbjogICBUYWtlIGNvbGFkZCBpbnRvIGFjY291bnQgd2hlbiBhZGp1c3RpbmcgZm9yICdzZWxlY3Rpb24nIGJlaW5nCisJICAgICJleGNsdXNpdmUiLiAgQWxzbyBleHBhbmQgYSB0YWIgaW50byBzcGFjZXMgd2hlbiBkZWxldGluZyBtb3JlCisJICAgIHRoYW4gb25lIGxpbmUuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYywgc3JjL29wcy5jCisKK1BhdGNoIDYuMC4xOTcKK1Byb2JsZW06ICAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQgYW5kICdzZWxlY3Rpb24nIGlzICJleGNsdXNpdmUiLCAidiR4IgorCSAgICBkb2Vzbid0IGRlbGV0ZSB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUuIChFcmljIExvbmcpCitTb2x1dGlvbjogICBEb24ndCByZXNldCB0aGUgaW5jbHVzaXZlIGZsYWcuIChIZWxtdXQgU3RpZWdsZXIpCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjAuMTk4CitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0IGFuZCAnc2hvd2JyZWFrJyBpcyBub3QgZW1wdHksIG1vdmluZyB0aGUKKwkgICAgY3Vyc29yIG92ZXIgdGhlIGxpbmUgYnJlYWsgZG9lc24ndCB3b3JrIHByb3Blcmx5LiAoRXJpYyBMb25nKQorU29sdXRpb246ICAgTWFrZSBnZXR2aXNjb2woKSBhbmQgZ2V0dmlzY29sMigpIHVzZSBnZXR2dmNvbCgpIHRvIG9idGFpbiB0aGUKKwkgICAgdmlydHVhbCBjdXJzb3IgcG9zaXRpb24uICBBZGp1c3QgY29sYWR2YW5jZSgpIGFuZCBvbmVsZWZ0KCkgdG8KKwkgICAgc2tpcCBvdmVyIHRoZSAnc2hvd2JyZWFrJyBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvbWlzYzIuYworCitQYXRjaCA2LjAuMTk5CitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBjb3VsZCB1c2UgaWNvbnYoKSBhZnRlciBjYWxsaW5nIGljb252X2VuZCgpLgorCSAgICAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorU29sdXRpb246ICAgU3RvcCBjb252ZXJ0aW5nIGlucHV0IGFuZCBvdXRwdXQgc3RyZWFtIGFmdGVyIGNhbGxpbmcgaWNvbnZfZW5kKCkuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMC4yMDAKK1Byb2JsZW06ICAgIEEgc2NyaXB0IHRoYXQgc3RhcnRzIHdpdGggIiMhcGVybCIgaXNuJ3QgcmVjb2duaXplZCBhcyBhIFBlcmwKKwkgICAgZmlsZXR5cGUuCitTb2x1dGlvbjogICBJZ25vcmUgYSBtaXNzaW5nIHBhdGggaW4gYSBzY3JpcHQgaGVhZGVyLiAgQWxzbywgc3BlZWQgdXAKKwkgICAgcmVjb2duaXppbmcgc2NyaXB0cyBieSBzaW1wbGlmeWluZyB0aGUgcGF0dGVybnMgdXNlZC4KK0ZpbGVzOgkgICAgcnVudGltZS9zY3JpcHRzLnZpbQorCitQYXRjaCA2LjAuMjAxCitQcm9ibGVtOiAgICBXaGVuIHNjcm9sbGJpbmRpbmcgYW5kIGRvaW5nIGEgbG9uZyBqdW1wLCBzd2l0Y2hpbmcgd2luZG93cyBqdW1wcworCSAgICB0byBhbm90aGVyIHBvc2l0aW9uIGluIHRoZSBmaWxlLiAgU2Nyb2xsaW5nIGEgZmV3IGxpbmVzIGF0IGEgdGltZQorCSAgICBpcyBPSy4gKEpvaGFubmVzIFplbGxuZXIpCitTb2x1dGlvbjogICBXaGVuIHNldHRpbmcgd190b3BsaW5lIHJlc2V0IHRoZSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdfYm90bGluZSBpcworCSAgICB2YWxpZC4KK0ZpbGVzOgkgICAgc3JjL2RpZmYuYworCitQYXRjaCA2LjAuMjAyCitQcm9ibGVtOiAgICBUaGUgImljb249IiBhcmd1bWVudCBmb3IgdGhlIG1lbnUgY29tbWFuZCB0byBkZWZpbmUgYSB0b29sYmFyIGljb24KKwkgICAgd2l0aCBhIGZpbGUgZGlkbid0IHdvcmsgZm9yIEdUSy4gKENocmlzdGlhbiBKLiBSb2JpbnNvbikKKwkgICAgRm9yIE1vdGlmIGFuZCBBdGhlbmEgYSBmdWxsIHBhdGggd2FzIHJlcXVpcmVkLgorU29sdXRpb246ICAgU2VhcmNoIHRoZSBpY29uIGZpbGUgdXNpbmcgdGhlIHNwZWNpZmllZCBwYXRoLiAgRXhwYW5kIGVudmlyb25tZW50CisJICAgIHZhcmlhYmxlcyBpbiB0aGUgZmlsZSBuYW1lLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0ay5jLCBzcmMvZ3VpX3gxMS5jCisKK1BhdGNoIDYuMC4yMDMKK1Byb2JsZW06ICAgIENhbiBjaGFuZ2UgJ2ZpbGVmb3JtYXQnIGV2ZW4gdGhvdWdoICdtb2RpZmlhYmxlJyBpcyBvZmYuCisJICAgIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgQ29ycmVjdCBjaGVjayBmb3Iga2luZCBvZiBzZXQgY29tbWFuZC4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMC4yMDQKK1Byb2JsZW06ICAgICI6dW5sZXQiIGRvZXNuJ3Qgd29yayBmb3IgdmFyaWFibGVzIHdpdGggY3VybHkgYnJhY2VzLiAoVGhvbWFzCisJICAgIFNjb3R0IFVyYmFuKQorU29sdXRpb246ICAgSGFuZGxlIHZhcmlhYmxlIG5hbWVzIHdpdGggY3VybHkgYnJhY2VzIHByb3Blcmx5LiAoVmluY2UgTmVncmkpCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjIwNSAoZXh0cmEpCitQcm9ibGVtOiAgICAiZ3ZpbSAtZiIgc3RpbGwgZm9ya3Mgd2hlbiB1c2luZyB0aGUgYmF0Y2ggc2NyaXB0IHRvIHN0YXJ0IFZpbS4KK1NvbHV0aW9uOiAgIEFkZCBhbiBhcmd1bWVudCB0byAic3RhcnQiIHRvIHVzZSBhIGZvcmVncm91bmQgc2Vzc2lvbiAoTWljaGFlbAorCSAgICBHZWRkZXMpCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmMKKworUGF0Y2ggNi4wLjIwNgorUHJvYmxlbTogICAgVW5peDogaWYgZXhwYW5kaW5nIGEgd2lsZGNhcmQgaW4gYSBmaWxlIG5hbWUgcmVzdWx0cyBpbiBhCisJICAgIHdpbGRjYXJkIGNoYXJhY3RlciBhbmQgdGhlcmUgYXJlIG1vcmUgcGFydHMgaW4gdGhlIHBhdGggd2l0aCBhCisJICAgIHdpbGRjYXJkLCBpdCBpcyBleHBhbmRlZCBhZ2Fpbi4KKwkgICAgV2luZG93czogIjplZGl0IFxbYWJjXSIgY291bGQgbmV2ZXIgZWRpdCB0aGUgZmlsZSAiW2FiY10iLgorU29sdXRpb246ICAgRG9uJ3QgZXhwYW5kIHdpbGRjYXJkcyBpbiBhbHJlYWR5IGV4cGFuZGVkIHBhcnRzLgorCSAgICBEb24ndCByZW1vdmUgYmFja3NsYXNoZXMgdXNlZCB0byBlc2NhcGUgdGhlIHNwZWNpYWwgbWVhbmluZyBvZiBhCisJICAgIHdpbGRjYXJkOyBjYW4gZWRpdCAiW2FiY10iIGlmICdbJyBpcyByZW1vdmVkIGZyb20gJ2lzZm5hbWUnLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYywgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjAuMjA3IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgc2hvcnRjdXRzIGFuZCBzdGFydCBtZW51IGVudHJpZXMgbGV0IFZpbSBzdGFydHVwIGluIHRoZQorCSAgICBkZXNrdG9wIGRpcmVjdG9yeSwgd2hpY2ggaXMgbm90IHZlcnkgdXNlZnVsLgorU29sdXRpb246ICAgTGV0IHNob3J0Y3V0cyBzdGFydCBWaW0gaW4gJEhPTUUgb3IgJEhPTUVESVIkSE9NRVBBVEguCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmMKKworUGF0Y2ggNi4wLjIwOAorUHJvYmxlbTogICAgR1VJOiBXaGVuIHVzaW5nIGEga2V5bWFwIGFuZCB0aGUgY3Vyc29yIGlzIG5vdCBibGlua2luZywgQ1RSTC1eIGluCisJICAgIEluc2VydCBtb2RlIGRvZXNuJ3QgZGlyZWN0bHkgY2hhbmdlIHRoZSBjdXJzb3IgY29sb3IuICAoQWxleAorCSAgICBTb2xvdykKK1NvbHV0aW9uOiAgIEZvcmNlIGEgcmVkcmF3IG9mIHRoZSBjdXJzb3IgYWZ0ZXIgQ1RSTC1eLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMC4yMDkKK1Byb2JsZW06ICAgIEdVSSBHVEs6IEFmdGVyIHNlbGVjdGluZyBhICdndWlmb250JyB3aXRoIHRoZSBmb250IGRpYWxvZyB0aGVyZQorCSAgICBhcmUgcmVkcmF3IHByb2JsZW1zIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBTZXBhcmF0ZSB0aGUgZm9udCBkaWFsb2cgZnJvbSBzZXR0aW5nIHRoZSBuZXcgZm9udCBuYW1lIHRvIGF2b2lkCisJICAgIHRoYXQgIioiIGlzIHVzZWQgdG8gZmluZCB3aWRlIGFuZCBib2xkIGZvbnRzLgorCSAgICBXaGVuIHJlZHJhd2luZyBleHRyYSBjaGFyYWN0ZXJzIGZvciB0aGUgYm9sZCB0cmljaywgdGFrZSBjYXJlIG9mCisJICAgIFVURi04IGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9vcHRpb24uYywgc3JjL3Byb3RvL2d1aS5wcm8sCisJICAgIHNyYy9wcm90by9ndWlfZ3RrX3gxMS5wcm8KKworUGF0Y2ggNi4wLjIxMAorUHJvYmxlbTogICAgQWZ0ZXIgcGF0Y2ggNi4wLjE2NyBpdCdzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBlZGl0IGEgaGVscCBmaWxlIGluCisJICAgIGFub3RoZXIgZW5jb2RpbmcgdGhhbiBsYXRpbjEuCitTb2x1dGlvbjogICBMZXQgdGhlICIrK2VuYz0iIGFyZ3VtZW50IG92ZXJydWxlIHRoZSBlbmNvZGluZy4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMC4yMTEKK1Byb2JsZW06ICAgIFdoZW4gcmVhZGluZyBhIGZpbGUgZmFpbHMsIHRoZSBidWZmZXIgaXMgZW1wdHksIGJ1dCBpdCBtaWdodCBzdGlsbAorCSAgICBiZSBwb3NzaWJsZSB0byB3cml0ZSBpdCB3aXRoICI6dyIgbGF0ZXIuICBUaGUgb3JpZ2luYWwgZmlsZSBpcworCSAgICBsb3N0IHRoZW4uIChTdGV2ZSBBbWVyaWdlKQorU29sdXRpb246ICAgU2V0IHRoZSAncmVhZG9ubHknIG9wdGlvbiBmb3IgdGhlIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMC4yMTIKK1Byb2JsZW06ICAgIEdVSSBHVEs6IGNvbmZpcm0oImZvbyIsICIiKSBjYXVzZXMgYSBjcmFzaC4KK1NvbHV0aW9uOiAgIERvbid0IG1ha2UgYSBub24tZXhpc3RpbmcgYnV0dG9uIHRoZSBkZWZhdWx0LiAgQWRkIGEgZGVmYXVsdCAiT0siCisJICAgIGJ1dHRvbiBpZiBub25lIGlzIHNwZWNpZmllZC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2d1aV9ndGsuYworCitQYXRjaCA2LjAuMjEzCitQcm9ibGVtOiAgICBXaGVuIGEgZmlsZSBuYW1lIGNvbnRhaW5zIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMsIENUUkwtRyBhbmQgb3RoZXIKKwkgICAgY29tbWFuZHMgZG9uJ3Qgd29yayB3ZWxsLgorU29sdXRpb246ICAgVHVybiB1bnByaW50YWJsZSBpbnRvIHByaW50YWJsZSBjaGFyYWN0ZXJzLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9jaGFyc2V0LmMKKworUGF0Y2ggNi4wLjIxNAorUHJvYmxlbTogICAgV2hlbiB0aGVyZSBpcyBhIGJ1ZmZlciB3aXRob3V0IGEgbmFtZSwgZW1wdHkgZW50cmllcyBhcHBlYXIgaW4gdGhlCisJICAgIGp1bXBsaXN0IHNhdmVkIGluIHRoZSB2aW1pbmZvIGZpbGUuCitTb2x1dGlvbjogICBEb24ndCB3cml0ZSBqdW1wbGlzdCBlbnRyaWVzIHdpdGhvdXQgYSBmaWxlIG5hbWUuCitGaWxlczoJICAgIHNyYy9tYXJrLmMKKworUGF0Y2ggNi4wLjIxNQorUHJvYmxlbTogICAgQWZ0ZXIgdXNpbmcgIi8iIGZyb20gVmlzdWFsIG1vZGUgdGhlIFBhc3RlIG1lbnUgYW5kIFRvb2xiYXIKKwkgICAgZW50cmllcyBkb24ndCB3b3JrLiAgUGFzdGluZyB3aXRoIHRoZSBtaWRkbGUgbW91c2UgZG9lc24ndCB3b3JrCisJICAgIGFuZCBtb2RlbGVzcyBzZWxlY3Rpb24gZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgVXNlIHRoZSBjb21tYW5kIGxpbmUgbW9kZSBtZW51cyBhbmQgdXNlIHRoZSBtb3VzZSBsaWtlIGluIHRoZQorCSAgICBjb21tYW5kIGxpbmUuCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL21lbnUuYywgc3JjL3VpLmMKKworUGF0Y2ggNi4wLjIxNgorUHJvYmxlbTogICAgQWZ0ZXIgcmVsb2FkaW5nIGEgZmlsZSwgZGlzcGxheWVkIGluIGFub3RoZXIgd2luZG93IHRoYW4gdGhlCisJICAgIGN1cnJlbnQgb25lLCB3aGljaCB3YXMgY2hhbmdlZCBvdXRzaWRlIG9mIFZpbSB0aGUgcGFydCBvZiB0aGUgZmlsZQorCSAgICBhcm91bmQgdGhlIGN1cnNvciBzZXQgYnkgYXV0b2NvbW1hbmRzIG1heSBiZSBkaXNwbGF5ZWQsIGJ1dAorCSAgICBqdW1waW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGN1cnNvciBwb3NpdGlvbiB3aGVuIGVudGVyaW5nIHRoZQorCSAgICB3aW5kb3cgYWdhaW4uCitTb2x1dGlvbjogICBSZXN0b3JlIHRoZSB0b3BsaW5lIG9mIHRoZSB3aW5kb3cuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjAuMjE3CitQcm9ibGVtOiAgICBXaGVuIGdldHRpbmcgaGVscCBmcm9tIGEgaGVscCBmaWxlIHRoYXQgd2FzIHVzZWQgYmVmb3JlLCBhbiBlbXB0eQorCSAgICB1bmxpc3RlZCBidWZmZXIgcmVtYWlucyBpbiB0aGUgYnVmZmVyIGxpc3QuIChFcmljIExvbmcpCitTb2x1dGlvbjogICBXaXBlIG91dCB0aGUgYnVmZmVyIHVzZWQgdG8gZG8gdGhlIHRhZyBqdW1wIGZyb20uCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2V4X2NtZHMuYywgc3JjL3Byb3RvL2J1ZmZlci5wcm8KKworUGF0Y2ggNi4wLjIxOAorUHJvYmxlbTogICAgV2l0aCBleHBsb3JlciBwbHVnaW46ICJ2aW0gLW8gZmlsZW5hbWUgZGlybmFtZSIgZG9lc24ndCBsb2FkIHRoZQorCSAgICBleHBsb3JlciB3aW5kb3cgdW50aWwgZW50ZXJpbmcgdGhlIHdpbmRvdy4KK1NvbHV0aW9uOiAgIENhbGwgczpFZGl0RGlyKCkgZm9yIGVhY2ggd2luZG93IGFmdGVyIHN0YXJ0aW5nIHVwLgorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9leHBsb3Jlci52aW0KKworUGF0Y2ggNi4wLjIxOQorUHJvYmxlbTogICAgIjpzZXRsb2NhbCIgYW5kICI6c2V0Z2xvYmFsIiwgd2l0aG91dCBhcmd1bWVudHMsIGRpc3BsYXkgdGVybWluYWwKKwkgICAgb3B0aW9ucy4gKFpkZW5layBTZWtlcmEpCitTb2x1dGlvbjogICBTa2lwIHRlcm1pbmFsIG9wdGlvbnMgZm9yIHRoZXNlIHR3byBjb21tYW5kcy4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMC4yMjAKK1Byb2JsZW06ICAgIEFmdGVyIHBhdGNoIDYuMC4yMTggZ2V0IGEgYmVlcCBvbiBzdGFydHVwLiAoTXVyYW9rYSBUYXJvKQorU29sdXRpb246ICAgRG9uJ3QgdHJ5IGdvaW5nIHRvIGFub3RoZXIgd2luZG93IHdoZW4gdGhlcmUgaXNuJ3Qgb25lLgorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9leHBsb3Jlci52aW0KKworUGF0Y2ggNi4wLjIyMQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOmJkZWwiIGFuZCBhbGwgb3RoZXIgYnVmZmVycyBhcmUgdW5sb2FkZWQgdGhlIGxvd2VzdAorCSAgICBudW1iZXJlZCBidWZmZXIgaXMganVtcGVkIHRvIGluc3RlYWQgb2YgdGhlIG1vc3QgcmVjZW50IG9uZS4gKERhdmUKKwkgICAgQ2VjaWwpCitTb2x1dGlvbjogICBQcmVmZXIgYW4gdW5sb2FkZWQgYnVmZmVyIGZyb20gdGhlIGp1bXBsaXN0LgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4wLjIyMgorUHJvYmxlbTogICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCBhbmQgdXNpbmcgYXV0b2luZGVudCwgcHJlc3NpbmcgRXNjIGFmdGVyCisJICAgIHN0YXJ0aW5nIGEgbmV3IGxpbmUgbGVhdmVzIGJlaGluZCBwYXJ0IG9mIHRoZSBhdXRvaW5kZW50LiAoSGVsbXV0CisJICAgIFN0aWVnbGVyKQorU29sdXRpb246ICAgQWZ0ZXIgZGVsZXRpbmcgdGhlIGxhc3QgY2hhciBpbiB0aGUgbGluZSBhZGp1c3QgdGhlIGN1cnNvcgorCSAgICBwb3NpdGlvbiBpbiBkZWxfYnl0ZXMoKS4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMsIHNyYy9vcHMuYworCitQYXRjaCA2LjAuMjIzCitQcm9ibGVtOiAgICBXaGVuIHNwbGl0dGluZyBhIHdpbmRvdyB0aGF0IGNvbnRhaW5zIHRoZSBleHBsb3JlciwgaGl0dGluZyBDUiBvbgorCSAgICBhIGZpbGUgbmFtZSBnaXZlcyBlcnJvciBtZXNzYWdlcy4KK1NvbHV0aW9uOiAgIFNldCB0aGUgd2luZG93IHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgdGhlIHdpbmRvdy4KK0ZpbGVzOgkgICAgcnVudGltZS9wbHVnaW4vZXhwbG9yZXIudmltCisKK1BhdGNoIDYuMC4yMjQKK1Byb2JsZW06ICAgIFdoZW4gJ3NpZGVzY3JvbGwnIGFuZCAnc2lkZXNjcm9sbG9mZicgYXJlIHNldCBpbiBhIG5hcnJvdyB3aW5kb3cKKwkgICAgdGhlIHRleHQgbWF5IGp1bXAgbGVmdC1yaWdodCBhbmQgdGhlIGN1cnNvciBpcyBkaXNwbGF5ZWQgaW4gdGhlCisJICAgIHdyb25nIHBvc2l0aW9uLiAoQXJpYyBCbHVtZXIpCitTb2x1dGlvbjogICBXaGVuIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSwgY29tcHV0ZSB0aGUgbGVmdCBjb2x1bW4gZm9yIHRoZQorCSAgICB3aW5kb3cgdG8gcHV0IHRoZSBjdXJzb3IgaW4gdGhlIG1pZGRsZS4KK0ZpbGVzOgkgICAgc3JjL21vdmUuYworCitQYXRjaCA2LjAuMjI1CitQcm9ibGVtOiAgICBJbiBWaXN1YWwgbW9kZSAiZ2siIGdldHMgc3R1Y2sgaW4gYSBjbG9zZWQgZm9sZC4gKFNyaW5hdGgKKwkgICAgQXZhZGhhbnVsYSkKK1NvbHV0aW9uOiAgIEJlaGF2ZSBkaWZmZXJlbnRseSBpbiBhIGNsb3NlZCBmb2xkLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjIyNgorUHJvYmxlbTogICAgV2hlbiBkb2luZyAiOnJlY292ZXIgZmlsZSIgZ2V0IHRoZSBBVFRFTlRJT04gcHJvbXB0LgorCSAgICBBZnRlciByZWNvdmVyaW5nIHRoZSBzYW1lIGZpbGUgZml2ZSB0aW1lcyBnZXQgYSByZWFkIGVycm9yIG9yIGEKKwkgICAgY3Jhc2guICAoQWxleCBEYXZpcykKK1NvbHV0aW9uOiAgIFNldCB0aGUgcmVjb3Zlcnltb2RlIGZsYWcgYmVmb3JlIHNldHRpbmcgdGhlIGZpbGUgbmFtZS4KKwkgICAgQ29ycmVjdCB0aGUgYW1vdW50IG9mIHVzZWQgbWVtb3J5IGZvciB0aGUgc2l6ZSBvZiBibG9jayB6ZXJvLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjAuMjI3IChleHRyYSkKK1Byb2JsZW06ICAgIFRoZSBSSVNDIE9TIHBvcnQgaGFzIHNldmVyYWwgcHJvYmxlbXMuCitTb2x1dGlvbjogICBVcGRhdGUgdGhlIG1ha2VmaWxlIGFuZCBmaXggc29tZSBvZiB0aGUgcHJvYmxlbXMuIChBbmR5IFdpbmdhdGUpCitGaWxlczoJICAgIHNyYy9NYWtlX3JvLm1haywgc3JjL29zX3Jpc2Nvcy5jLCBzcmMvb3NfcmlzY29zLmgsCisJICAgIHNyYy9wcm90by9vc19yaXNjb3MucHJvLCBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4wLjIyOAorUHJvYmxlbTogICAgQWZ0ZXIgcHV0dGluZyB0ZXh0IGluIFZpc3VhbCBtb2RlIHRoZSAnXSBtYXJrIGlzIG5vdCBhdCB0aGUgZW5kIG9mCisJICAgIHRoZSBwdXQgdGV4dC4KKwkgICAgVW5kbyBkb2Vzbid0IHdvcmsgcHJvcGVybHkgd2hlbiBwdXR0aW5nIGEgd29yZCBpbnRvIGEgVmlzdWFsCisJICAgIHNlbGVjdGlvbiB0aGF0IHNwYW5zIG1vcmUgdGhhbiBvbmUgbGluZS4KK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlICddIG1hcmsgZm9yIHRoZSBkZWxldGluZyB0aGUgVmlzdWFsbHkgc2VsZWN0ZWQgdGV4dC4KKwkgICAgI2lmZGVmIGNvZGUgdGhhdCBkZXBlbmRzIG9uIEZFQVRfVklTVUFMIHByb3Blcmx5LgorCSAgICBBbHNvIGZpeCB0aGF0ICJkIiBjcm9zc2luZyBsaW5lIGJvdW5kYXJ5IHB1dHMgJ1sganVzdCBiZWZvcmUKKwkgICAgZGVsZXRlZCB0ZXh0LgorCSAgICBGaXggdW5kbyBieSBzYXZpbmcgYWxsIGRlbGV0ZWQgbGluZXMgYXQgb25jZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9ub3JtYWwuYywgc3JjL29wcy5jLAorCSAgICBzcmMvc3RydWN0cy5oLCBzcmMvdmltLmgKKworUGF0Y2ggNi4wLjIyOQorUHJvYmxlbTogICAgTXVsdGktYnl0ZTogV2l0aCAnbScgaW4gJ2Zvcm1hdG9wdGlvbnMnLCBmb3JtYXR0aW5nIGRvZXNuJ3QgYnJlYWsKKwkgICAgYXQgYSBtdWx0aS1ieXRlIGNoYXIgZm9sbG93ZWQgYnkgYW4gQVNDSUkgY2hhciwgYW5kIHRoZSBvdGhlciB3YXkKKwkgICAgYXJvdW5kLiAoTXVyYW9rYSBUYXJvKQorCSAgICBXaGVuIGpvaW5pbmcgbGluZXMgYSBzcGFjZSBpcyBpbnNlcnRlZCBiZXR3ZWVuIG11bHRpLWJ5dGUKKwkgICAgY2hhcmFjdGVycywgd2hpY2ggaXMgbm90IGFsd2F5cyB3YW50ZWQuCitTb2x1dGlvbjogICBDaGVjayBmb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgYmVmb3JlIGFuZCBhZnRlciB0aGUgYnJlYWtwb2ludC4KKwkgICAgRG9uJ3QgaW5zZXJ0IGEgc3BhY2UgYmVmb3JlIG9yIGFmdGVyIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgd2hlbgorCSAgICBqb2luaW5nIGxpbmVzIGFuZCB0aGUgJ00nIGZsYWcgaXMgaW4gJ2Zvcm1hdG9wdGlvbnMnLiAgRG9uJ3QKKwkgICAgaW5zZXJ0IGEgc3BhY2UgYmV0d2VlbiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgd2hlbiB0aGUgJ0InIGZsYWcgaXMKKwkgICAgaW4gJ2Zvcm1hdG9wdGlvbnMnLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvb3BzLmMsIHNyYy9vcHRpb24uaAorCitQYXRjaCA2LjAuMjMwCitQcm9ibGVtOiAgICBUaGUgIjoiIHVzZWQgYXMgYSBtb3Rpb24gYWZ0ZXIgYW4gb3BlcmF0b3IgaXMgZXhjbHVzaXZlLCBidXQKKwkgICAgc29tZXRpbWVzIGl0IHNob3VsZCBiZSBpbmNsdXNpdmUuCitTb2x1dGlvbjogICBNYWtlIHRoZSAidiIgaW4gYmV0d2VlbiBhbiBvcGVyYXRvciBhbmQgbW90aW9uIHRvZ2dsZQorCSAgICBpbmNsdXNpdmUvZXhjbHVzaXZlLiAoU2VydmF0aXVzIEJyYW5kdCkKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvbW90aW9uLnR4dCwgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4yMzEKK1Byb2JsZW06ICAgICJnZCIgYW5kICJnRCIgZG9uJ3Qgd29yayB3aGVuIHRoZSB2YXJpYWJsZSBtYXRjaGVzIGluIGEgY29tbWVudAorCSAgICBqdXN0IGFib3ZlIHRoZSBtYXRjaCB0byBiZSBmb3VuZC4gKFNlcnZhdGl1cyBCcmFuZHQpCitTb2x1dGlvbjogICBDb250aW51ZSBzZWFyY2hpbmcgaW4gdGhlIGZpcnN0IGNvbHVtbiBiZWxvdyB0aGUgY29tbWVudC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4yMzIKK1Byb2JsZW06ICAgICJ2aW0gLS12ZXJzaW9uIiBwcmludHMgb24gc3RkZXJyIHdoaWxlICJ2aW0gLS1oZWxwIiBwcmludHMgb24KKwkgICAgc3Rkb3V0LgorU29sdXRpb246ICAgTWFrZSAidmltIC0tdmVyc2lvbiIgdXNlIHN0ZG91dC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvc3RhcnRpbmcudHh0LCBzcmMvZ2xvYmFscy5oLCBzcmMvbWFpbi5jLCBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMC4yMzMKK1Byb2JsZW06ICAgICJcMVx7LDh9IiBpbiBhIHJlZ2V4cCBpcyBub3QgYWxsb3dlZCwgYnV0IGl0IHNob3VsZCB3b3JrLCBiZWNhdXNlCisJICAgIHRoZXJlIGlzIGFuIHVwcGVyIGxpbWl0LiAgKEppbSBCYXR0bGUpCitTb2x1dGlvbjogICBBbGxvdyB1c2luZyAiXHttaW4sbWF4fSIgYWZ0ZXIgYW4gYXRvbSB0aGF0IGNhbiBiZSBlbXB0eSBpZiB0aGVyZQorCSAgICBpcyBhbiB1cHBlciBsaW1pdC4KK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMC4yMzQKK1Byb2JsZW06ICAgIEl0J3Mgbm90IGVhc3kgdG8gc2V0IHRoZSBjdXJzb3IgcG9zaXRpb24gd2l0aG91dCBtb2RpZnlpbmcgbWFya3MuCitTb2x1dGlvbjogICBBZGQgdGhlIGN1cnNvcigpIGZ1bmN0aW9uLiAoWWVnYXBwYW4gTGFrc2htYW5hbikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZXZhbC50eHQsIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjIzNQorUHJvYmxlbTogICAgV2hlbiB3cml0aW5nIGEgZmlsZSBhbmQgcmVuYW1pbmcgdGhlIG9yaWdpbmFsIGZpbGUgdG8gbWFrZSB0aGUKKwkgICAgYmFja3VwLCBwZXJtaXNzaW9ucyBjb3VsZCBjaGFuZ2Ugd2hlbiBzZXR0aW5nIHRoZSBvd25lci4KK1NvbHV0aW9uOiAgIE9ubHkgc2V0IHRoZSBvd25lciB3aGVuIGl0J3MgbmVlZGVkIGFuZCBzZXQgdGhlIHBlcm1pc3Npb25zIGFnYWluCisJICAgIGFmdGVyd2FyZHMuCisJICAgIFdoZW4gJ2JhY2t1cGNvcHknIGlzICJhdXRvIiBjaGVjayB0aGF0IHRoZSBvd25lciBhbmQgcGVybWlzc2lvbnMKKwkgICAgb2YgYSBuZXdseSBjcmVhdGVkIGZpbGUgY2FuIGJlIHNldCBwcm9wZXJseS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMC4yMzYKK1Byb2JsZW06ICAgICI6ZWRpdCIgd2l0aG91dCBhcmd1bWVudCBzaG91bGQgbW92ZSBjdXJzb3IgdG8gbGluZSAxIGluIFZpCisJICAgIGNvbXBhdGlibGUgbW9kZS4KK1NvbHV0aW9uOiAgIEFkZCAnZycgZmxhZyB0byAnY3BvcHRpb25zJy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHNyYy9leF9kb2NtZC5jLCBzcmMvb3B0aW9uLmgKKworUGF0Y2ggNi4wLjIzNworUHJvYmxlbTogICAgSW4gYSBDIGZpbGUsIHVzaW5nIHRoZSBmaWxldHlwZSBwbHVnaW4sIHJlLWluZGVudGluZyBhIGNvbW1lbnQKKwkgICAgd2l0aCB0d28gc3BhY2VzIGFmdGVyIHRoZSBtaWRkbGUgIioiIGRvZXNuJ3QgYWxpZ24gcHJvcGVybHkuCitTb2x1dGlvbjogICBEb24ndCB1c2UgYSBtaWRkbGUgZW50cnkgZnJvbSBhIHN0YXJ0L21pZGRsZS9lbmQgdG8gbGluZSB1cCB3aXRoCisJICAgIHRoZSBzdGFydCBvZiB0aGUgY29tbWVudCB3aGVuIHRoZSBzdGFydCBwYXJ0IGRvZXNuJ3QgbWF0Y2ggd2l0aAorCSAgICB0aGUgYWN0dWFsIGNvbW1lbnQgc3RhcnQuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMC4yMzgKK1Byb2JsZW06ICAgIFVzaW5nIGEgIjpzdWJzdGl0dXRlIiBjb21tYW5kIHdpdGggYSBzdWJzdGl0dXRlKCkgY2FsbCBpbiB0aGUKKwkgICAgc3Vic3RpdHV0aW9uIGV4cHJlc3Npb24gY2F1c2VzIGVycm9ycy4gKFNyaW5hdGggQXZhZGhhbnVsYSkKK1NvbHV0aW9uOiAgIFNhdmUgYW5kIHJlc3RvcmUgcG9pbnRlcnMgd2hlbiBkb2luZyBzdWJzdGl0dXRpb24gcmVjdXJzaXZlbHkuCitGaWxlczoJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjAuMjM5CitQcm9ibGVtOiAgICBVc2luZyAiQSIgdG8gYXBwZW5kIGFmdGVyIGEgVmlzdWFsbHkgc2VsZWN0ZWQgYmxvY2sgd2hpY2ggaXMgYWZ0ZXIKKwkgICAgdGhlIGVuZCBvZiB0aGUgbGluZSwgc3BhY2VzIGFyZSBpbnNlcnRlZCBpbiB0aGUgd3JvbmcgbGluZSBhbmQKKwkgICAgb3RoZXIgdW5leHBlY3RlZCBlZmZlY3RzLiAoTWljaGFlbCBOYXVtYW5uKQorU29sdXRpb246ICAgRG9uJ3QgYWR2YW5jZSB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IGxpbmUuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjAuMjQwCitQcm9ibGVtOiAgICBXaW4zMjogYnVpbGRpbmcgd2l0aCBQeXRob24gMi4yIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEFkZCBzdXBwb3J0IGZvciBQeXRob24gMi4yIHdpdGggZHluYW1pYyBsaW5raW5nLiAoUGF1bCBNb29yZSkKK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMC4yNDEKK1Byb2JsZW06ICAgIFdpbjMyOiBFeHBhbmRpbmcgdGhlIG9sZCB2YWx1ZSBvZiBhbiBvcHRpb24gdGhhdCBpcyBhIHBhdGggdGhhdAorCSAgICBzdGFydHMgd2l0aCBhIGJhY2tzbGFzaCwgYW4gZXh0cmEgYmFja3NsYXNoIGlzIGluc2VydGVkLgorU29sdXRpb246ICAgT25seSBpbnNlcnQgYmFja3NsYXNoZXMgd2hlcmUgbmVlZGVkLgorCSAgICBBbHNvIGhhbmRsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgcHJvcGVybHkgd2hlbiByZW1vdmluZworCSAgICBiYWNrc2xhc2hlcy4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMC4yNDIKK1Byb2JsZW06ICAgIEdVSTogT24gYSBzeXN0ZW0gd2l0aCBhbiBFeGNlZWQgWCBzZXJ2ZXIgc29tZXRpbWVzIGdldCBhICJCYWQKKwkgICAgV2luZG93IiBlcnJvci4gKFRvbW1pIE1hZWtpdGFsbykKK1NvbHV0aW9uOiAgIFdoZW4gZm9ya2luZywgdXNlIGEgcGlwZSB0byB3YWl0IGluIHRoZSBwYXJlbnQgZm9yIHRoZSBjaGlsZCB0bworCSAgICBoYXZlIGRvbmUgdGhlIHNldHNpZCgpIGNhbGwuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjAuMjQzCitQcm9ibGVtOiAgICBVbml4OiAidmltIC0tdmVyc2lvbiIgb3V0cHV0cyBhIE5MIGJlZm9yZSB0aGUgbGFzdCBsaW5lIGluc3RlYWQgb2YKKwkgICAgYWZ0ZXIgaXQuIChDaGFybGVzIENhbXBiZWxsKQorU29sdXRpb246ICAgU2VuZCB0aGUgTkwgdG8gdGhlIHNhbWUgb3V0cHV0IHN0cmVhbSBhcyB0aGUgdGV4dC4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYywgc3JjL29zX3VuaXguYywgc3JjL3Byb3RvL21lc3NhZ2UucHJvCisKK1BhdGNoIDYuMC4yNDQKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6IFByb2JsZW1zIHdpdGggKGlsbGVnYWwpIFVURi04IGNoYXJhY3RlcnMgaW4gbWVudSBhbmQKKwkgICAgZmlsZSBuYW1lIChlLmcuLCBpY29uIHRleHQsIHN0YXR1cyBsaW5lKS4KK1NvbHV0aW9uOiAgIENvcnJlY3RseSBoYW5kbGUgdW5wcmludGFibGUgY2hhcmFjdGVycy4gIENhdGNoIGlsbGVnYWwgVVRGLTgKKwkgICAgY2hhcmFjdGVycyBhbmQgcmVwbGFjZSB0aGVtIHdpdGggPHh4Pi4gIFRydW5jYXRpbmcgdGhlIHN0YXR1cyBsaW5lCisJICAgIHdhc24ndCBkb25lIGNvcnJlY3RseSBhdCBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiAoWWFzdWhpcm8KKwkgICAgTWF0c3Vtb3RvKQorCSAgICBBZGRlZCBjb3JyZWN0X2NtZHNwb3MoKSBhbmQgdHJhbnNjaGFyX2J5dGUoKS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvY2hhcnNldC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2d1aS5jLAorCSAgICBzcmMvbWVzc2FnZS5jLCBzcmMvc2NyZWVuLmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjAuMjQ1CitQcm9ibGVtOiAgICBBZnRlciB1c2luZyBhIGNvbG9yIHNjaGVtZSwgc2V0dGluZyB0aGUgJ2JhY2tncm91bmQnIG9wdGlvbiBtaWdodAorCSAgICBub3Qgd29yay4gKFBldGVyIEhvcnN0KQorU29sdXRpb246ICAgRGlzYWJsZSB0aGUgY29sb3Igc2NoZW1lIGlmIGl0IHN3aXRjaGVzICdiYWNrZ3JvdW5kJyBiYWNrIHRvIHRoZQorCSAgICB3cm9uZyB2YWx1ZS4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMC4yNDYKK1Byb2JsZW06ICAgICI6ZWNob21zZyIgZGlkbid0IHVzZSB0aGUgaGlnaGxpZ2h0aW5nIHNldCBieSAiOmVjaG9obCIuIChHYXJ5CisJICAgIEhvbGxvd2F5KQorU29sdXRpb246ICAgVXNlIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlcyBmb3IgdGhlIG1lc3NhZ2UuIChZZWdhcHBhbgorCSAgICBMYWtzaG1hbmFuKQorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMC4yNDcKK1Byb2JsZW06ICAgIEdUSyBHVUk6IENhbid0IHVzZSBndmltIGluIGEga3BhcnQgd2lkZ2V0LgorU29sdXRpb246ICAgQWRkIHRoZSAiLS1lY2hvLXdpZCIgYXJndW1lbnQgdG8gbGV0IFZpbSBlY2hvIHRoZSB3aW5kb3cgSUQgb24KKwkgICAgc3Rkb3V0LiAoUGhpbGlwcGUgRnJlbXkpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3N0YXJ0aW5nLnR4dCwgc3JjL2dsb2JhbHMuaCwgc3JjL2d1aV9ndGtfeDExLmMsCisJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4wLjI0OAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBjb21wcmVzc2VkIGhlbHAgZmlsZXMgYW5kICdlbmNvZGluZycgaXNuJ3QgImxhdGluMSIsCisJICAgIFZpbSBjb252ZXJ0cyB0aGUgaGVscCBmaWxlIGJlZm9yZSBkZWNvbXByZXNzaW5nLiAoRGF2aWQgUmV2aWVqbykKK1NvbHV0aW9uOiAgIERvbid0IGNvbnZlcnQgYSBoZWxwIGZpbGUgd2hlbiAnYmluYXJ5JyBpcyBzZXQuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjAuMjQ5CitQcm9ibGVtOiAgICAidmltIC10IGVkaXQgLWMgJ3N0YSBleF9oZWxwJyIgZG9lc24ndCBtb3ZlIGN1cnNvciB0byBlZGl0KCkuCitTb2x1dGlvbjogICBEb24ndCBzZXQgdGhlIGN1cnNvciBvbiB0aGUgZmlyc3QgbGluZSBmb3IgIi1jIiBhcmd1bWVudHMgd2hlbgorCSAgICB0aGVyZSBhbHNvIGlzIGEgIi10IiBhcmd1bWVudC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjAuMjUwIChleHRyYSkKK1Byb2JsZW06ICAgIE1hY2ludG9zaDogVmFyaW91cyBwcm9ibGVtcyB3aGVuIGNvbXBpbGluZy4KK1NvbHV0aW9uOiAgIFZhcmlvdXMgZml4ZXMsIG1vc3RseSAjaWZkZWZzLiAoRGFueSBTdC4gQW1hbnQpCitGaWxlczoJICAgIHNyYy9ndWlfbWFjLmMsIHNyYy9tYWluLmMsIHNyYy9taXNjMi5jLCBzcmMvb3NfbWFjLmgsCisJICAgIHNyYy9vc19tYWMucGJwcm9qL3Byb2plY3QucGJ4cHJvaiwgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjAuMjUxIChleHRyYSkKK1Byb2JsZW06ICAgIE1hY2ludG9zaDogbWVudSBzaG9ydGN1dHMgYXJlIG5vdCB2ZXJ5IGNsZWFyLgorU29sdXRpb246ICAgU2hvdyB0aGUgc2hvcnRjdXQgd2l0aCB0aGUgTWFjIGNsb3ZlciBzeW1ib2wuIChyYWluZG9nKQorRmlsZXM6CSAgICBzcmMvZ3VpX21hYy5jCisKK1BhdGNoIDYuMC4yNTIKK1Byb2JsZW06ICAgIFdoZW4gYSB1c2VyIGZ1bmN0aW9uIHdhcyBkZWZpbmVkIHdpdGggImFib3J0IiwgYW4gZXJyb3IgdGhhdCBpcworCSAgICBub3QgaW5zaWRlIGlmL2VuZGlmIG9yIHdoaWxlL2VuZHdoaWxlIGRvZXNuJ3QgYWJvcnQgdGhlIGZ1bmN0aW9uLgorCSAgICAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIERvbid0IHJlc2V0IGRpZF9lbXNnIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHRvIGJlIGFib3J0ZWQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMC4yNTMKK1Byb2JsZW06ICAgIFdoZW4gJ2luc2VydG1vZGUnIGlzIHNldCwgYWZ0ZXIgIjxDLU8+OmVkaXQgZmlsZSIgdGhlIG5leHQgPEMtTz4KKwkgICAgZG9lc24ndCB3b3JrLiAoQmVuamkgRmlzaGVyKSAgPEMtTD4gaGFzIHRoZSBzYW1lIHByb2JsZW0uCitTb2x1dGlvbjogICBSZXNldCBuZWVkX3N0YXJ0X2luc2VydG1vZGUgb25jZSBpbiBlZGl0KCkuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4wLjI1NCAoZXh0cmEpCitQcm9ibGVtOiAgICBCb3JsYW5kIEMrKyA1LjU6IENoZWNraW5nIGZvciBzdGFjayBvdmVyZmxvdyBkb2Vzbid0IHdvcmsKKwkgICAgY29ycmVjdGx5LiAgTWF0dGVycyB3aGVuIHVzaW5nIGEgY29tcGxpY2F0ZWQgcmVnZXhwLgorU29sdXRpb246ICAgUmVtb3ZlIC1OLSBmcm9tIE1ha2VfYmM1Lm1hay4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL01ha2VfYmM1Lm1haworCitQYXRjaCA2LjAuMjU1IChleHRyYSkgKGRlcGVuZHMgb24gcGF0Y2ggNi4wLjExNiBhbmQgNi4wLjEyMSkKK1Byb2JsZW06ICAgIFdpbjMyOiBBQ0wgc3VwcG9ydCBkb2Vzbid0IHdvcmsgd2VsbCBvbiBTYW1iYSBkcml2ZXMuCitTb2x1dGlvbjogICBBZGQgYSBjaGVjayBmb3Igd29ya2luZyBBQ0wgc3VwcG9ydC4gKE1pa2UgV2lsbGlhbXMpCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMC4yNTYgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6ICI6aGlnaGxpZ2h0IENvbW1lbnQgZ3VpZmc9YXNkZiIgZG9lcyBub3QgZ2l2ZSBhbiBlcnJvcgorCSAgICBtZXNzYWdlLiAoUmFuZGFsbCBXLiAgTW9ycmlzKSAgQWxzbyBmb3Igb3RoZXIgc3lzdGVtcy4KK1NvbHV0aW9uOiAgIEFkZCBndWlfZ2V0X2NvbG9yKCkgdG8gZ2l2ZSBvbmUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIHN5c3RlbXMuCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL2d1aV9hbWlnYS5jLCBzcmMvZ3VpX2F0aGVuYS5jLCBzcmMvZ3VpX21vdGlmLmMsCisJICAgIHNyYy9ndWlfcmlzY29zLmMsIHNyYy9ndWlfeDExLmMsIHNyYy9ndWlfZ3RrX3gxMS5jLAorCSAgICBzcmMvcHJvdG8vZ3VpLnBybywgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMC4yNTcKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuICdtb3VzZWZvY3VzJyBpcyBzZXQgYW5kIHRoZXJlIGlzIGEgQnVmUmVhZAorCSAgICBhdXRvY29tbWFuZCwgYWZ0ZXIgdGhlIGRpYWxvZyBmb3IgcGVybWlzc2lvbnMgY2hhbmdlZCBvdXRzaWRlIG9mCisJICAgIFZpbTogJ21vdXNlZm9jdXMnIHN0b3BzIHdvcmtpbmcuIChSb2JlcnQgV2ViYikKK1NvbHV0aW9uOiAgIFJlc2V0IG5lZWRfbW91c2VfY29ycmVjdCBhZnRlciBjaGVja2luZyB0aW1lc3RhbXBzLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4wLjI1OAorUHJvYmxlbTogICAgV2hlbiAnc2Nyb2xsb2ZmJyBpcyA5OTkgYW5kIHRoZXJlIGFyZSBmb2xkcywgdGhlIHRleHQgY2FuIGp1bXAgdXAKKwkgICAgYW5kIGRvd24gd2hlbiBtb3ZpbmcgdGhlIGN1cnNvciBkb3duIG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkgICAgKEx1Ym9taXIgSG9zdCkKK1NvbHV0aW9uOiAgIFdoZW4gcHV0dGluZyB0aGUgY3Vyc29yIGhhbGZ3YXkgdGhlIHdpbmRvdyBzdGFydCBjb3VudGluZyBsaW5lcyBhdAorCSAgICB0aGUgZW5kIG9mIGEgZm9sZC4KK0ZpbGVzOgkgICAgc3JjL21vdmUuYworCitQYXRjaCA2LjAuMjU5CitQcm9ibGVtOiAgICBNUy1ET1M6IGFmdGVyIGVkaXRpbmcgdGhlIGNvbW1hbmQgbGluZSB0aGUgY3Vyc29yIHNoYXBlIG1heSByZW1haW4KKwkgICAgbGlrZSBpbiBJbnNlcnQgbW9kZS4gKFZvbGtlciBLaWVmZWwpCitTb2x1dGlvbjogICBSZXNldCB0aGUgY3Vyc29yIHNoYXBlIGFmdGVyIGVkaXRpbmcgdGhlIGNvbW1hbmQgbGluZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNi4wLjI2MAorUHJvYmxlbTogICAgR1VJOiBNYXkgY3Jhc2ggd2hpbGUgc3RhcnRpbmcgdXAgd2hlbiBnaXZpbmcgYW4gZXJyb3IgbWVzc2FnZSBmb3IKKwkgICAgbWlzc2luZyBjb2xvci4gKFNlcnZhdGl1cyBCcmFuZHQpCitTb2x1dGlvbjogICBEb24ndCBjYWxsIGd1aV93cml0ZSgpIHdoZW4gc3RpbGwgc3RhcnRpbmcgdXAuICBEb24ndCBnaXZlIGVycm9yCisJICAgIG1lc3NhZ2UgZm9yIGVtcHR5IGNvbG9yIG5hbWUuICBEb24ndCB1c2UgJ3RfdmInIHdoaWxlIHRoZSBHVUkgaXMKKwkgICAgc3RpbGwgc3RhcnRpbmcgdXAuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL2d1aS5jLCBzcmMvbWlzYzEuYywgc3JjL3VpLmMKKworUGF0Y2ggNi4wLjI2MQorUHJvYmxlbTogICAgbnIyY2hhcigpIGFuZCBjaGFyMm5yKCkgZG9uJ3Qgd29yayB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KK1NvbHV0aW9uOiAgIFVzZSAnZW5jb2RpbmcnIGZvciB0aGVzZSBmdW5jdGlvbnMuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMC4yNjIgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IElNRSBkb2Vzbid0IHdvcmsgcHJvcGVybHkuICBPbkltZUNvbXBvc2l0aW9uKCkgaXNuJ3QgdXNlZAorCSAgICBhdCBhbGwuCitTb2x1dGlvbjogICBBZGp1c3QgdmFyaW91cyB0aGluZ3MgZm9yIElNRS4KK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL2d1aV93MzIuYywgc3JjL21ieXRlLmMsIHNyYy9wcm90by91aS5wcm8sCisJICAgIHNyYy9zdHJ1Y3RzLmgsIHNyYy91aS5jCisKK1BhdGNoIDYuMC4yNjMKK1Byb2JsZW06ICAgIEdUSzogV2hlbiBhIGRpYWxvZyBpcyBjbG9zZWQgYnkgdGhlIHdpbmRvdyBtYW5hZ2VyLCBWaW0gaGFuZ3MuCisJICAgIChDaHJpc3RpYW4gSi4gUm9iaW5zb24pCitTb2x1dGlvbjogICBVc2UgR1RLX1dJREdFVF9EUkFXQUJMRSgpIGluc3RlYWQgb2YgR1RLX1dJREdFVF9WSVNJQkxFKCkuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMsIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMC4yNjQKK1Byb2JsZW06ICAgIFRoZSBhbW91bnQgb2YgdmlydHVhbCBtZW1vcnkgaXMgdXNlZCB0byBpbml0aWFsaXplICdtYXhtZW10b3QnLAorCSAgICB3aGljaCBtYXkgYmUgbXVjaCBtb3JlIHRoYW4gdGhlIGFtb3VudCBvZiBwaHlzaWNhbCBtZW1vcnksCisJICAgIHJlc3VsdGluZyBpbiBhIGxvdCBvZiBzd2FwcGluZy4KK1NvbHV0aW9uOiAgIEdldCB0aGUgYW1vdW50IG9mIHBoeXNpY2FsIG1lbW9yeSB3aXRoIHN5c2N0bCgpLCBzeXNjb25mKCkgb3IKKwkgICAgc3lzaW5mbygpIHdoZW4gcG9zc2libGUuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZy5oLmluLAorCSAgICBzcmMvb3NfdW5peC5jLCBzcmMvb3NfdW5peC5oCisKK1BhdGNoIDYuMC4yNjUKK1Byb2JsZW06ICAgIFdpbjMyOiBVc2luZyBiYWNrc3BhY2Ugd2hpbGUgJ2ZrbWFwJyBpcyBzZXQgY2F1c2VzIGEgY3Jhc2guCisJICAgIChKYW1zaGlkIE9hc2ptb2hhKQorU29sdXRpb246ICAgRG9uJ3QgdHJ5IG1hcHBpbmcgc3BlY2lhbCBrZXlzLgorRmlsZXM6CSAgICBzcmMvZmFyc2kuYworCitQYXRjaCA2LjAuMjY2CitQcm9ibGVtOiAgICBUaGUgcmVuYW1lKCkgZnVuY3Rpb24gZGVsZXRlcyB0aGUgZmlsZSBpZiB0aGUgb2xkIGFuZCB0aGUgbmV3IG5hbWUKKwkgICAgYXJlIHRoZSBzYW1lLiAoVm9sa2VyIEtpZWZlbCkKK1NvbHV0aW9uOiAgIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBuYW1lcyBhcmUgZXF1YWwuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjAuMjY3CitQcm9ibGVtOiAgICBVVEYtODogQWx0aG91Z2ggJ2lzcHJpbnQnIHNheXMgYSBjaGFyYWN0ZXIgaXMgcHJpbnRhYmxlLAorCSAgICB1dGZfY2hhcjJjZWxscygpIHN0aWxsIGNvbnNpZGVycyBpdCB1bnByaW50YWJsZS4KK1NvbHV0aW9uOiAgIFVzZSB2aW1faXNwcmludGMoKSBmb3IgY2hhcmFjdGVycyB1cHRvIDB4MTAwLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjAuMjY4IChleHRyYSkgKGRlcGVuZHMgb24gcGF0Y2ggNi4wLjI1NSkKK1Byb2JsZW06ICAgIFdpbjMyOiBBQ0wgY2hlY2sgY3Jhc2hlcyB3aGVuIHVzaW5nIGZvcndhcmQgc2xhc2ggaW4gZmlsZSBuYW1lLgorU29sdXRpb246ICAgSW1wcm92ZSB0aGUgY2hlY2sgZm9yIHRoZSBwYXRoIGluIHRoZSBmaWxlIG5hbWUuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMC4yNjkKK1Byb2JsZW06ICAgIFVucHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gYSBmaWxlIG5hbWUgbWF5IGNhdXNlIHByb2JsZW1zIHdoZW4KKwkgICAgdXNpbmcgdGhlICdzdGF0dXNsaW5lJyBvcHRpb24gb3Igd2hlbiAnYnVmdHlwZScgaXMgIm5vZmlsZSIuCitTb2x1dGlvbjogICBjYWxsIHRyYW5zX2NoYXJhY3RlcnMoKSBmb3IgdGhlIHJlc3VsdGluZyBzdGF0dXNsaW5lLiAoWWFzdWhpcm8KKwkgICAgTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9zY3JlZW4uYywgc3JjL2NoYXJzZXQuYworCitQYXRjaCA2LjAuMjcwIChkZXBlbmRzIG9uIHBhdGNoIDYuMC4yNjcpCitQcm9ibGVtOiAgICBBIHRhYiBjYXVzZXMgVVRGLTggdGV4dCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHdyb25nIHBvc2l0aW9uLgorCSAgICAoUm9uIEFhcm9uKQorU29sdXRpb246ICAgQ29ycmVjdCB1dGZfY2hhcjJjZWxscygpIGFnYWluLgorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjFhLjAwMSAoZXh0cmEpCitQcm9ibGVtOiAgICAzMmJpdCBET1M6IGNvcHlpbmcgdGV4dCB0byB0aGUgY2xpcGJvYXJkIG1heSBjYXVzZSBhIGNyYXNoLgorCSAgICAoSm9uYXRoYW4gRCBKb2huc3RvbikKK1NvbHV0aW9uOiAgIERvbid0IGNvcHkgb25lIGJ5dGUgdG9vIG11Y2ggaW4gU2V0Q2xpcGJvYXJkRGF0YSgpLgorRmlsZXM6CSAgICBzcmMvb3NfbXNkb3MuYworCitQYXRjaCA2LjFhLjAwMgorUHJvYmxlbTogICAgR1RLOiBPbiBzb21lIGNvbmZpZ3VyYXRpb25zLCB3aGVuIGNsb3NpbmcgYSBkaWFsb2cgZnJvbSB0aGUgd2luZG93CisJICAgIG1hbmFnZXIsIFZpbSBoYW5ncy4KK1NvbHV0aW9uOiAgIENhdGNoIHRoZSAiZGVzdHJveSIgc2lnbmFsLiAoQXJpYyBCbHVtZXIpCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMKKworUGF0Y2ggNi4xYS4wMDMKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6IFdpdGggVVRGLTggZG91YmxlLXdpZGUgY2hhciBhbmQgJ3ZpcnR1YWxlZGl0JyBzZXQ6CisJICAgIHlhbmtpbmcgaW4gVmlzdWFsIG1vZGUgZG9lc24ndCBpbmNsdWRlIHRoZSBsYXN0IGJ5dGUuIChFcmljIExvbmcpCitTb2x1dGlvbjogICBEb24ndCBhZGQgYSBzcGFjZSBmb3IgYSBkb3VibGUtd2lkZSBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjFhLjAwNCAoZXh0cmEpCitQcm9ibGVtOiAgICBNSU5HVzogdW5kZWZpbmVkIHR5cGUuIChSb24gQWFyb24pCitTb2x1dGlvbjogICBNYWtlIEdldENvbXBvc2l0aW9uU3RyaW5nX2luVUNTMigpIHN0YXRpYy4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYywgc3JjL2d1aV93NDguYywgc3JjL3Byb3RvL2d1aV93MzIucHJvCisKK1BhdGNoIDYuMWEuMDA1IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiAiOmhhcmRjb3B5IiBkb2Vzbid0IHdvcmsgYWZ0ZXIgIjpoYXJkY29weSEiLiAoSm9uYXRoYW4KKwkgICAgSm9obnN0b24pCitTb2x1dGlvbjogICBEb24ndCBrZWVwIHRoZSBkcml2ZXIgY29udGV4dCB3aGVuIHVzaW5nICI6aGFyZGNvcHkhIi4gKFZpbmNlCisJICAgIE5lZ3JpKQorRmlsZXM6CSAgICBzcmMvb3NfbXN3aW4uYworCitQYXRjaCA2LjFhLjAwNgorUHJvYmxlbTogICAgbXVsdGktYnl0ZTogYWZ0ZXIgc2V0dGluZyAnZW5jb2RpbmcnIHRoZSB3aW5kb3cgdGl0bGUgbWlnaHQgYmUKKwkgICAgd3JvbmcuCitTb2x1dGlvbjogICBGb3JjZSByZXNldHRpbmcgdGhlIHRpdGxlLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4xYS4wMDcKK1Byb2JsZW06ICAgIEZpbGV0eXBlIGRldGVjdGlvbiBmb3IgIiouaW5jIiBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBVc2UgYSAiOmxldCIgY29tbWFuZC4gKERhdmlkIFNjaHdlaWtlcnQpCitGaWxlczoJICAgIHJ1bnRpbWUvZmlsZXR5cGUudmltCisKK1BhdGNoIDYuMWEuMDA4IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBBQ0wgZGV0ZWN0aW9uIGZvciBuZXR3b3JrIHNoYXJlcyBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBJbmNsdWRlIHRoZSB0cmFpbGluZyAoYmFjaylzbGFzaCBpbiB0aGUgcm9vdCBwYXRoLiAoTWlrZSBXaWxsaWFtcykKK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4xYS4wMDkKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIlxAPD0iIG9yICJcQDwhIiBpbiBhIHBhdHRlcm4sIGEgIlwxIiBtYXkgcmVmZXIgdG8gYSAoKQorCSAgICBwYXJ0IHRoYXQgZm9sbG93cywgYnV0IGl0IGdlbmVyYXRlcyBhbiBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgQWxsb3cgYSBmb3J3YXJkIHJlZmVyZW5jZSB3aGVuIHRoZXJlIGlzIGEgZm9sbG93aW5nICJcQDw9IiBvcgorCSAgICAiXEA8ISIuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3BhdHRlcm4udHh0LCBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4xYS4wMTAKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjpoZWxwIiBhbmQgb3BlbmluZyBhIG5ldyB3aW5kb3csIHRoZSBhbHRlcm5hdGUgZmlsZQorCSAgICBpc24ndCBzZXQuCitTb2x1dGlvbjogICBTZXQgdGhlIGFsdGVybmF0ZSBmaWxlIHRvIHRoZSBwcmV2aW91c2x5IGVkaXRlZCBmaWxlLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMWEuMDExCitQcm9ibGVtOiAgICBHVEs6ICI6c2V0IGNvPTc3IiwgY2hhbmdlIHdpZHRoIHdpdGggdGhlIG1vdXNlLCAiOnNldCBjbz03NyIKKwkgICAgZG9lc24ndCByZXNpemUgdGhlIHdpbmRvdy4gKERhcnJlbiBIaWViZXJ0KQorU29sdXRpb246ICAgU2V0IHRoZSBmb3JtIHNpemUgYWZ0ZXIgaGFuZGxpbmcgYSByZXNpemUgZXZlbnQuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMWEuMDEyCitQcm9ibGVtOiAgICBHVEs6IFRoZSBmaWxlIGJyb3dzZXIgYWx3YXlzIHJldHVybnMgYSBmdWxsIHBhdGguIChMb2huZXIpCitTb2x1dGlvbjogICBTaG9ydGVuIHRoZSBmaWxlIG5hbWUgaWYgcG9zc2libGUuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMKKworUGF0Y2ggNi4xYS4wMTMKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIj1+d29yZCIgaW4gJ2NpbmtleXMnIG9yICdpbmRlbnRrZXlzJywgdGhlIGNhc2Ugb2YgdGhlCisJICAgIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSB3b3JkIGlzbid0IGlnbm9yZWQuIChSYXVsIFNlZ3VyYSBBY2V2ZWRvKQorU29sdXRpb246ICAgSWdub3JlIGNhc2Ugd2hlbiBjaGVja2luZyB0aGUgbGFzdCB0eXBlZCBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4xYS4wMTQKK1Byb2JsZW06ICAgIEFmdGVyIHBhdGNoIDYuMWEuMDA2IGNhbid0IGNvbXBpbGUgd2l0aG91dCB0aGUgdGl0bGUgZmVhdHVyZS4KK1NvbHV0aW9uOiAgIEFkZCBhbiAjaWZkZWYuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjFhLjAxNQorUHJvYmxlbTogICAgTVMtV2luZG93czogV2hlbiBleHBhbmRpbmcgYSBmaWxlIG5hbWUgdGhhdCBjb250YWlucyBhICdbJyBvciAneycKKwkgICAgYW4gZXh0cmEgYmFja3NsYXNoIGlzIGluc2VydGVkLiAoUmF1bCBTZWd1cmEgQWNldmVkbykKK1NvbHV0aW9uOiAgIEF2b2lkIGFkZGluZyB0aGUgYmFja3NsYXNoLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjFhLjAxNgorUHJvYmxlbTogICAgQ29tcGxldGlvbiBhZnRlciAiOmxhbmd1YWdlIiBkb2Vzbid0IGluY2x1ZGUgInRpbWUiLiAoUmF1bCBTZWd1cmEKKwkgICAgQWNldmVkbykKK1NvbHV0aW9uOiAgIEFkZCB0aGUgYWx0ZXJuYXRpdmUgdG8gdGhlIGNvbXBsZXRpb25zLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjFhLjAxNworUHJvYmxlbTogICAgQ2xpY2tpbmcgdGhlIG1vdXNlIGluIHRoZSB0b3Agcm93IG9mIGEgd2luZG93IHdoZXJlIHRoZSBmaXJzdCBsaW5lCisJICAgIGRvZXNuJ3QgZml0IG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHdyb25nIGNvbHVtbi4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgc2tpcGNvbCBhbHNvIGZvciB0aGUgdG9wIHJvdyBvZiBhIHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL3VpLmMKKworUGF0Y2ggNi4xYS4wMTgKK1Byb2JsZW06ICAgIFdoZW4gJ3Njcm9sbG9mZicgaXMgb25lIGFuZCB0aGUgd2luZG93IGhlaWdodCBpcyBvbmUsICJnaiIgY2FuIHB1dAorCSAgICB0aGUgY3Vyc29yIGFib3ZlIHRoZSB3aW5kb3cuIChSYXVsIFNlZ3VyYSBBY2V2ZWRvKQorU29sdXRpb246ICAgRG9uJ3QgbGV0IHNraXBjb2wgYmVjb21lIGJpZ2dlciB0aGFuIHRoZSBjdXJzb3IgY29sdW1uLgorRmlsZXM6CSAgICBzcmMvbW92ZS5jCisKK1BhdGNoIDYuMWEuMDE5CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgY29tcG9zaW5nIGNoYXJhY3RlciBvbiB0b3Agb2YgYW4gQVNDSUkgY2hhcmFjdGVyLCB0aGUKKwkgICAgImwiIGNvbW1hbmQgY2xlYXJzIHRoZSBjb21wb3NpbmcgY2hhcmFjdGVyLiAgT25seSB3aGVuICdydWxlcicgYW5kCisJICAgICdzaG93Y21kJyBhcmUgb2ZmLiAoUmFwaGFlbCBGaW5rZWwpCitTb2x1dGlvbjogICBEb24ndCBtb3ZlIHRoZSBjdXJzb3IgYnkgZGlzcGxheWluZyBjaGFyYWN0ZXJzIHdoZW4gdGhlcmUgYXJlCisJICAgIGNvbXBvc2luZyBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xYS4wMjAKK1Byb2JsZW06ICAgIEdUSzogYWZ0ZXIgcGF0Y2ggNi4xYS4wMTEgcmVzaXppbmcgd2l0aCB0aGUgbW91c2UgZG9lc24ndCBhbHdheXMKKwkgICAgd29yayB3ZWxsIGZvciBzbWFsbCBzaXplcy4gKEFkcmllbiBCZWF1KQorU29sdXRpb246ICAgVXNlIGFub3RoZXIgd2F5IHRvIGF2b2lkIHRoZSBwcm9ibGVtIHdpdGggIjpzZXQgY289NzciLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA2LjFhLjAyMQorUHJvYmxlbTogICAgU2V2ZXJhbCBTeW50YXggbWVudSBlbnRyaWVzIGFyZSB3cm9uZyBvciBjb25mdXNpbmcuCitTb2x1dGlvbjogICBSZXBocmFzZSBhbmQgY29ycmVjdCB0aGUgbWVudSBlbnRyaWVzLiAoQWRyaWVuIEJlYXUpCitGaWxlczoJICAgIHJ1bnRpbWUvbWFrZW1lbnUudmltLCBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMWEuMDIyCitQcm9ibGVtOiAgICBBIHRhZ3MgZmlsZSBtaWdodCBiZSB1c2VkIHR3aWNlIG9uIGNhc2UgaW5zZW5zaXRpdmUgc3lzdGVtcy4KKwkgICAgKFJpY2sgU3dhbnRvbikKK1NvbHV0aW9uOiAgIERvbid0IHVzZSB0aGUgc2FtZSBmaWxlIG5hbWUgdHdpY2UgaW4gdGhlIGRlZmF1bHQgZm9yIHRoZSAndGFncycKKwkgICAgb3B0aW9uLiAgSWdub3JlIGNhc2Ugd2hlbiBjb21wYXJpbmcgbmFtZXMgb2YgYWxyZWFkeSB2aXNpdGVkCisJICAgIGZpbGVzLgorRmlsZXM6CSAgICBzcmMvbWlzYzIuYywgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMWEuMDIzCitQcm9ibGVtOiAgICBXaGVuIHN0YXJ0aW5nIHRoZSBHVUkgZ2V0ICJDIiBjaGFyYWN0ZXJzIGVjaG9lZCBpbiB0aGUgdGVybWluYWwuCitTb2x1dGlvbjogICBEb24ndCB0cnkgc2VuZGluZyBhIGNsZWFyLXNjcmVlbiBjb21tYW5kIHdoaWxlIHRoZSBHVUkgaXMgc3RhcnRpbmcKKwkgICAgdXAuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjFhLjAyNAorUHJvYmxlbTogICAgSW4gb3RoZXIgZWRpdG9ycyBDVFJMLUYgaXMgb2Z0ZW4gdXNlZCBmb3IgYSBmaW5kIGRpYWxvZy4KK1NvbHV0aW9uOiAgIEluIGV2aW0gdXNlIENUUkwtRiBmb3IgdGhlIGZpbmQgZGlhbG9nLgorRmlsZXM6CSAgICBydW50aW1lL2V2aW0udmltCisKK1BhdGNoIDYuMWEuMDI1CitQcm9ibGVtOiAgICBUaGUgY2hvaWNlcyBmb3IgdGhlIGZpbGVmb3JtYXQgZGlhbG9nIGNhbid0IGJlIHRyYW5zbGF0ZWQuCitTb2x1dGlvbjogICBBZGQgZzptZW51dHJhbnNfZmlsZWZvcm1hdF9jaG9pY2VzLiAoQWRyaWVuIEJlYXUpCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4xYS4wMjYKK1Byb2JsZW06ICAgIEluZGVudGluZyBKYXZhIGZpbGVzIGlzIHdyb25nIHdpdGggInRocm93cyIsICJleHRlbmRzIiBhbmQKKwkgICAgImltcGxlbWVudHMiIGNsYXVzZXMuCitTb2x1dGlvbjogICBVcGRhdGUgdGhlIEphdmEgaW5kZW50IHNjcmlwdC4KK0ZpbGVzOgkgICAgcnVudGltZS9pbmRlbnQvamF2YS52aW0KKworUGF0Y2ggNi4xYS4wMjcKK1Byb2JsZW06ICAgIEEgZmV3IFN5bnRheCBtZW51IGVudHJpZXMgbWlzc2luZyBvciBpbmNvcnJlY3QuCitTb2x1dGlvbjogICBBZGQgYW5kIGNvcnJlY3QgdGhlIG1lbnUgZW50cmllcy4gKEFkcmllbiBCZWF1KQorCSAgICBTaG9ydGVuIGEgZmV3IG1lbnVzIHRvIGF2b2lkIHRoZXkgYmVjb21lIHRvbyBsb25nLgorRmlsZXM6CSAgICBydW50aW1lL21ha2VtZW51LnZpbSwgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjFhLjAyOAorUHJvYmxlbTogICAgWElNOiBwcm9ibGVtcyB3aXRoIGZlZWRiYWNrIGFuZCBzb21lIGlucHV0IG1ldGhvZHMuCitTb2x1dGlvbjogICBVc2UgaWNvbnYgZm9yIGNhbGN1bGF0aW5nIHRoZSBjZWxscy4gIFJlbW92ZSB0aGUgcXVldWUgZm9yCisJICAgIGtleV9wcmVzc19ldmVudCBvbmx5IHdoZW4gdGV4dCB3YXMgY2hhbmdlZC4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL21ieXRlLmMsIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjFhLjAyOQorUHJvYmxlbTogICAgQWZ0ZXIgcGF0Y2ggNi4xYS4wMjggY2FuJ3QgY29tcGlsZSBHVEsgdmVyc2lvbiB3aXRoIFhJTSBidXQKKwkgICAgd2l0aG91dCBtdWx0aS1ieXRlIGNoYXJzLgorU29sdXRpb246ICAgQWRkIGFuICNpZmRlZi4gKEFzY2h3aW4gTWFyc21hbikKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4xYS4wMzAKK1Byb2JsZW06ICAgIFdpdGggZG91YmxlLWJ5dGUgZW5jb2RpbmdzIHRvdXBwZXIoKSBhbmQgdG9sb3dlcigpIG1heSBoYXZlIHdyb25nCisJICAgIHJlc3VsdHMuCitTb2x1dGlvbjogICBTa2lwIGRvdWJsZS1ieXRlIGNoYXJhY3RlcnMuIChFcmljIExvbmcpCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xYS4wMzEKK1Byb2JsZW06ICAgIEFjY2Vzc2luZyB0aGUgJ2JhbGxvb25kZWxheScgdmFyaWFibGUgbWF5IGNhdXNlIGEgY3Jhc2guCitTb2x1dGlvbjogICBNYWtlIHRoZSB2YXJpYWJsZSBmb3IgJ2JhbGxvb25kZWxheScgYSBsb25nLiAoT2xhZiBTZWliZXJ0KQorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmgKKworUGF0Y2ggNi4xYS4wMzIgKGV4dHJhKQorUHJvYmxlbTogICAgU29tZSBtZW51IGZpbGVzIHVzZWQgYSB3cm9uZyBlbmNvZGluZyBuYW1lIGZvciAic2NyaXB0ZW5jb2RpbmciLgorU29sdXRpb246ICAgTW92ZSB0aGUgdHJhbnNsYXRpb25zIHRvIGEgc2VwYXJhdGUgZmlsZSwgd2hpY2ggaXMgc291cmNlZCBhZnRlcgorCSAgICBzZXR0aW5nICJzY3JpcHRlbmNvZGluZyIuCisJICAgIEFsc28gYWRkIEN6ZWNoIG1lbnUgdHJhbnNsYXRpb25zIGluIEFTQ0lJIGFuZCB1cGRhdGUgdGhlIG90aGVyCisJICAgIGVuY29kaW5ncy4KK0ZpbGVzOgkgICAgcnVudGltZS9sYW5nL21lbnVfY3NfY3ouaXNvXzg4NTktMS52aW0sCisJICAgIHJ1bnRpbWUvbGFuZy9tZW51X2NzX2N6Lmlzb184ODU5LTIudmltLAorCSAgICBydW50aW1lL2xhbmcvbWVudV9jemVjaF9jemVjaF9yZXB1YmxpYy4xMjUwLnZpbSwKKwkgICAgcnVudGltZS9sYW5nL21lbnVfY3plY2hfY3plY2hfcmVwdWJsaWMuMTI1Mi52aW0sCisJICAgIHJ1bnRpbWUvbGFuZy9tZW51X2N6ZWNoX2N6ZWNoX3JlcHVibGljLmFzY2lpLnZpbSwKKwkgICAgcnVudGltZS9sYW5nL21lbnVfZGVfZGUuaXNvXzg4NTktMS52aW0sCisJICAgIHJ1bnRpbWUvbGFuZy9tZW51X2RlX2RlLmxhdGluMS52aW0sCisJICAgIHJ1bnRpbWUvbGFuZy9tZW51X2ZyX2ZyLmlzb184ODU5LTEudmltLAorCSAgICBydW50aW1lL2xhbmcvbWVudV9mcl9mci5sYXRpbjEudmltLAorCSAgICBydW50aW1lL2xhbmcvbWVudV9mcmVuY2hfZnJhbmNlLjEyNTIudmltLAorCSAgICBydW50aW1lL2xhbmcvbWVudV9nZXJtYW5fZ2VybWFueS4xMjUyLnZpbSwKKwkgICAgcnVudGltZS9sYW5nL21lbnVfamFfanAuZXVjLWpwLnZpbSwKKwkgICAgcnVudGltZS9sYW5nL21lbnVfamFfanAudXRmLTgudmltLAorCSAgICBydW50aW1lL2xhbmcvbWVudV9qYXBhbmVzZV9qYXBhbi45MzIudmltCisKK1BhdGNoIDYuMWEuMDMzCitQcm9ibGVtOiAgICBYSU06IGRvZXNuJ3QgcmVzZXQgaW5wdXQgY29udGV4dC4KK1NvbHV0aW9uOiAgIGNhbGwgeGltX3Jlc2V0KCkgd2l0aCBpbV9zZXRfYWN0aXZlKEZBTFNFKS4gKFRha3VoaXJvIE5pc2hpb2thKQorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjFhLjAzNCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogVGhlIEFDTCBjaGVja3MgZm9yIGEgcmVhZG9ubHkgZmlsZSBzdGlsbCBkb24ndCB3b3JrIHdlbGwuCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIEFDTCBjaGVja3MsIGdvIGJhY2sgdG8gaG93IGl0IHdvcmtlZCBpbiBWaW0gNi4wLgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjFhLjAzNQorUHJvYmxlbTogICAgbXVsdGktYnl0ZTogV2hlbiB1c2luZyAiOnNoIiBpbiB0aGUgR1VJLCB0eXBlZCBhbmQgZGlzcGxheWVkCisJICAgIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LgorU29sdXRpb246ICAgRGVhbCB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycyB0byBhbmQgZnJvbSB0aGUgc2hlbGwuIChZYXN1aGlybworCSAgICBNYXRzdW1vdG8pICBBbHNvIGhhbmRsZSBVVEYtOCBjb21wb3NpbmcgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjFhLjAzNgorUHJvYmxlbTogICAgR1RLOiB0aGUgc2F2ZS15b3Vyc2VsZiBldmVudCB3YXMgbm90IGhhbmRsZWQuCitTb2x1dGlvbjogICBDYXRjaCB0aGUgc2F2ZS15b3Vyc2VsZiBldmVudCBhbmQgcHJlc2VydmUgc3dhcCBmaWxlcy4gKE5laWwgQmlyZCkKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNi4xYS4wMzcKK1Byb2JsZW06ICAgIFRoZSBNUy1XaW5kb3dzIGtleSBtYXBwaW5nIGRvZXNuJ3QgaW5jbHVkZSBDVFJMLVMgZm9yIHNhdmluZy4KKwkgICAgKFZsYWQgU2FuZHJpbmkpCitTb2x1dGlvbjogICBNYXAgQ1RSTC1TIHRvICI6dXBkYXRlIi4KK0ZpbGVzOgkgICAgcnVudGltZS9tc3dpbi52aW0KKworUGF0Y2ggNi4xYS4wMzgKK1Byb2JsZW06ICAgIFNvbGFyaXM6IEluY2x1ZGluZyBib3RoIHN5cy9zeXNjdGwuaCBhbmQgc3lzL3N5c2luZm8uaCBkb2Vzbid0CisJICAgIHdvcmsuIChBbnRvbmlvIENvbG9tYm8pCitTb2x1dGlvbjogICBEb24ndCBpbmNsdWRlIHN5cy9zeXNpbmZvLmggd2hlbiBub3QgY2FsbGluZyBzeXNpbmZvKCkuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xYS4wMzkKK1Byb2JsZW06ICAgIE5vdCBhbGwgdmlzdWFsIGJhc2ljIGZpbGVzIGFyZSByZWNvZ25pemVkLgorU29sdXRpb246ICAgQWRkIGNoZWNrcyB0byBjYXRjaCAqLmN0bCBmaWxlcy4gKFJhdWwgU2VndXJhIEFjZXZlZG8pCitGaWxlczoJICAgIHJ1bnRpbWUvZmlsZXR5cGUudmltCisKK1BhdGNoIDYuMWEuMDQwCitQcm9ibGVtOiAgICBBICoucGwgZmlsZSBpcyByZWNvZ25pemVkIGFzIFBlcmwsIGJ1dCBpdCBjb3VsZCBiZSBhIHByb2xvZyBmaWxlLgorU29sdXRpb246ICAgQ2hlY2sgdGhlIGZpcnN0IG5vbi1lbXB0eSBsaW5lLiAoS29udHJhIEdlcmdlbHkpCitGaWxlczoJICAgIHJ1bnRpbWUvZmlsZXR5cGUudmltCisKK1BhdGNoIDYuMWEuMDQxCitQcm9ibGVtOiAgICBXaGVuIHByZXNzaW5nIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBpbiB0aGUgY29tbWFuZCBsaW5lIGFuZCB0aGVtCisJICAgIG1vdmluZyB0aGUgbW91c2UgdXB3YXJkcywgbmVhcmx5IGFsbCB0aGUgdGV4dCBpcyBzZWxlY3RlZC4KK1NvbHV0aW9uOiAgIERvbid0IHRyeSBleHRlbmRpbmcgYSBtb2RlbGVzcyBzZWxlY3Rpb24gd2hlbiB0aGVyZSBpc24ndCBvbmUuCitGaWxlczoJICAgIHNyYy91aS5jCisKK1BhdGNoIDYuMWEuMDQyCitQcm9ibGVtOiAgICBXaGVuIG1lcmdpbmcgZmlsZXMsICI6ZGlmZnB1dCIgYW5kICI6ZGlmZmdldCIgYXJlIHVzZWQgYSBsb3QsIGJ1dAorCSAgICB0aGV5IHJlcXVpcmUgYSBsb3Qgb2YgdHlwaW5nLgorU29sdXRpb246ICAgQWRkICJkcCIgZm9yICI6ZGlmZnB1dCIgYW5kICJkbyIgZm9yICI6ZGlmZmdldCIuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2RpZmYudHh0LCBzcmMvZGlmZi5jLCBzcmMvbm9ybWFsLmMsIHNyYy9wcm90by9kaWZmLnBybworCisKK1BhdGNoIDYuMWIuMDAxIChleHRyYSkKK1Byb2JsZW06ICAgIENoZWNraW5nIGZvciB3aWxkY2FyZHMgaW4gYSBwYXRoIGRvZXMgbm90IGhhbmRsZSBtdWx0aS1ieXRlCisJICAgIGNoYXJhY3RlcnMgd2l0aCBhIHRyYWlsIGJ5dGUgd2hpY2ggaXMgYSB3aWxkY2FyZC4KK1NvbHV0aW9uOiAgIEhhbmRsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgY29ycmVjdGx5LiAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvb3NfYW1pZ2EuYywgc3JjL29zX21hYy5jLCBzcmMvb3NfbXNkb3MuYywgc3JjL29zX21zd2luLmMsCisJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xYi4wMDIKK1Byb2JsZW06ICAgIEEgcmVnZXhwIHRoYXQgZW5kcyBpbiAiXHsiIGlzIG5vdCBmbGFnZ2VkIGFzIGFuIGVycm9yLiAgTWF5IGNhdXNlCisJICAgIGEgc3RhY2sgb3ZlcmZsb3cgd2hlbiAnaW5jc2VhcmNoJyBpcyBzZXQuIChHZXJoYXJkIEhvY2hob2x6ZXIpCitTb2x1dGlvbjogICBIYW5kbGUgYSBtaXNzaW5nICJ9IiBhcyBhbiBlcnJvci4KK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMWIuMDAzIChleHRyYSkKK1Byb2JsZW06ICAgIFRoZSBSSVNDIE9TIEdVSSBkb2Vzbid0IGNvbXBpbGUuCitTb2x1dGlvbjogICBJbmNsdWRlIGNoYW5nZXMgc2luY2UgVmltIDUuNy4gKEFuZHkgV2luZ2F0ZSkKK0ZpbGVzOgkgICAgc3JjL01ha2Vfcm8ubWFrLCBzcmMvZ3VpX3Jpc2Nvcy5jLCBzcmMvb3NfcmlzY29zLmMsCisJICAgIHNyYy9vc19yaXNjb3MuaCwgc3JjL3Byb3RvL2d1aV9yaXNjb3MucHJvCisKK1BhdGNoIDYuMWIuMDA0CitQcm9ibGVtOiAgICBjb2woIic+IikgcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciBmb3IgbGluZXdpc2Ugc2VsZWN0aW9uLiAoTmVpbAorCSAgICBCaXJkKQorU29sdXRpb246ICAgRG9uJ3QgYWRkIG9uZSB0byBNQVhDT0wuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xYi4wMDUKK1Byb2JsZW06ICAgIFVzaW5nIGEgc2VhcmNoIHBhdHRlcm4gdGhhdCBjYXVzZXMgYW4gb3V0LW9mLXN0YWNrIGVycm9yIHdoaWxlCisJICAgICdobHNlYXJjaCcgaXMgc2V0IGtlZXBzIGdpdmluZyB0aGUgaGl0LUVudGVyIHByb21wdC4KKwkgICAgQSBzZWFyY2ggcGF0dGVybiB0aGF0IHRha2VzIGEgbG9uZyB0aW1lIGRlbGF5cyB0eXBpbmcgd2hlbgorCSAgICAnaW5jc2VhcmNoJyBpcyBzZXQuCitTb2x1dGlvbjogICBTdG9wICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIHdoZW4gdGhlIHJlZ2V4cCBjYXVzZXMgYW4gZXJyb3IuCisJICAgIFN0b3Agc2VhcmNoaW5nIGZvciAnaW5jc2VhcmNoJyB3aGVuIGEgY2hhcmFjdGVyIGlzIHR5cGVkLgorRmlsZXM6CSAgICBzcmMvZ2xvYmFscy5oLCBzcmMvbWVzc2FnZS5jLCBzcmMvc2NyZWVuLmMsIHNyYy9zZWFyY2guYywKKwkgICAgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMWIuMDA2CitQcm9ibGVtOiAgICBXaGVuIGVudGVyaW5nIGEgY29tcG9zaW5nIGNoYXJhY3RlciBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGgKKwkgICAgQ1RSTC1WLCB0aGUgdGV4dCBpc24ndCByZWRyYXduIGNvcnJlY3RseS4KK1NvbHV0aW9uOiAgIFJlZHJhdyB0aGUgdGV4dCB1bmRlciBhbmQgYWZ0ZXIgdGhlIGN1cnNvci4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNi4xYi4wMDcKK1Byb2JsZW06ICAgIFdoZW4gdGhlIGN1cnNvciBpcyBpbiB0aGUgd2hpdGUgc3BhY2UgYmV0d2VlbiB0d28gc2VudGVuY2VzLCAiZGlzIgorCSAgICBkZWxldGVzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZvbGxvd2luZyBzZW50ZW5jZSwgImRhcyIKKwkgICAgZGVsZXRlcyBhIHNwYWNlIGFmdGVyIHRoZSBzZW50ZW5jZS4KK1NvbHV0aW9uOiAgIEJhY2t1cCB0aGUgY3Vyc29yIG9uZSBjaGFyYWN0ZXIgaW4gdGhlc2Ugc2l0dWF0aW9ucy4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuMWIuMDA4CitQcm9ibGVtOiAgICAqLnhzbCBmaWxlcyBhcmUgbm90IHJlY29nbml6ZWQgYXMgeHNsdCBidXQgeG1sLgorCSAgICBNb25rIGZpbGVzIGFyZSBub3QgcmVjb2duaXplZC4KK1NvbHV0aW9uOiAgIERlbGV0ZSB0aGUgZHVwbGljYXRlIGxpbmUgZm9yICoueHNsLiAoSm9oYW5uZXMgWmVsbG5lcikKKwkgICAgUmVjb2duaXplIG1vbmsgZmlsZXMuCitGaWxlczoJICAgIHJ1bnRpbWUvZmlsZXR5cGUudmltCisKK1BhdGNoIDYuMWIuMDA5CitQcm9ibGVtOiAgICBDYW4ndCBhbHdheXMgY29tcGlsZSBzbWFsbCBmZWF0dXJlcyBhbmQgdGhlbiBhZGRpbmcgZXZhbCBmZWF0dXJlLAorCSAgICAic2FuZGJveCIgaXMgdW5kZWZpbmVkLiAoQXhlbCBLaWVsaG9ybikKK1NvbHV0aW9uOiAgIEFsd2F5cyBkZWZpbmUgInNhbmRib3giIHdoZW4gdGhlIGV2YWwgZmVhdHVyZSBpcyB1c2VkLgorRmlsZXM6CSAgICBzcmMvZ2xvYmFscy5oCisKK1BhdGNoIDYuMWIuMDEwIChleHRyYSkKK1Byb2JsZW06ICAgIFdoZW4gY29tcGlsaW5nIGd2aW1leHQuY3BwIHdpdGggTVNWQyA0LjIgZ2V0IGEgbnVtYmVyIG9mIHdhcm5pbmdzLgorU29sdXRpb246ICAgQ2hhbmdlICJ0cnVlIiB0byAiVFJVRSIuIChXYWx0ZXIgQnJpc2NvZSkKK0ZpbGVzOgkgICAgR3ZpbUV4dC9ndmltZXh0LmNwcAorCitQYXRjaCA2LjFiLjAxMQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIHZlcnkgbG9uZyBzdHJpbmcgZm9yIGNvbmZpcm0oKSwgY2FuJ3QgcXVpdCB0aGUKKwkgICAgZGlzcGxheWluZyBhdCB0aGUgbW9yZSBwcm9tcHQuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIEp1bXAgdG8gdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSB0byBzaG93IHRoZSBjaG9pY2VzLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMWIuMDEyCitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBXaGVuICdzaG93YnJlYWsnIGlzIHNldCBhbmQgYSBkb3VibGUtd2lkZSBjaGFyYWN0ZXIKKwkgICAgZG9lc24ndCBmaXQgYXQgdGhlIHJpZ2h0IHdpbmRvdyBlZGdlIHRoZSBjdXJzb3IgZ2V0cyBzdHVjayB0aGVyZS4KKwkgICAgVXNpbmcgY3Vyc29yLWxlZnQgZ2V0cyBzdHVjayB3aGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0LiAgKEVyaWMKKwkgICAgTG9uZykKK1NvbHV0aW9uOiAgIEZpeCB0aGUgd2F5IHRoZSBleHRyYSAiPiIgY2hhcmFjdGVyIGlzIGNvdW50ZWQgd2hlbiAnc2hvd2JyZWFrJyBpcworCSAgICBzZXQuICBEb24ndCBjb3JyZWN0IGN1cnNvciBmb3IgdmlydHVhbCBlZGl0aW5nIG9uIGEgZG91YmxlLXdpZGUKKwkgICAgY2hhcmFjdGVyLgorRmlsZXM6CSAgICBzcmMvY2hhcnNldC5jLCBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMWIuMDEzCitQcm9ibGVtOiAgICBBIHVzZXIgY29tbWFuZCB0aGF0IHBhcnRseSBtYXRjaGVzIHdpdGggYSBidWZmZXItbG9jYWwgdXNlcgorCSAgICBjb21tYW5kIGFuZCBtYXRjaGVzIGZ1bGwgd2l0aCBhIGdsb2JhbCB1c2VyIGNvbW1hbmQgdW5uZWNlc3NhcmlseQorCSAgICBnaXZlcyBhbiAnYW1iaWd1b3VzIGNvbW1hbmQnIGVycm9yLgorU29sdXRpb246ICAgRmluZCB0aGUgZnVsbCBnbG9iYWwgbWF0Y2ggZXZlbiBhZnRlciBhIHBhcnRseSBsb2NhbCBtYXRjaC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xYi4wMTQKK1Byb2JsZW06ICAgIEVCQ0RJQzogc3dpdGNoaW5nIG1vdXNlIGV2ZW50cyBvZmYgY2F1c2VzIGdhcmJhZ2Ugb24gc2NyZWVuLgorCSAgICBQb3NpdGlvbmluZyB0aGUgY3Vyc29yIGluIHRoZSBHVUkgY2F1c2VzIGdhcmJhZ2UuCitTb2x1dGlvbjogICBJbnNlcnQgYW4gRVNDIGluIHRoZSB0ZXJtaW5hbCBjb2RlLiAoUmFsZiBTY2hhbmRsKQorCSAgICBVc2UgIlxiIiBpbnN0ZWFkIG9mICJcMDEwIiBmb3IgS1NfTEUuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMsIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4xYi4wMTUKK1Byb2JsZW06ICAgIFZpbXR1dG9yIGhhcyBhIHR5cG8uICBHZXQgYSB3YXJuaW5nIGZvciAidGVtcGZpbGUiIGlmIGl0CisJICAgIGRvZXNuJ3QgZXhpc3QuCitTb2x1dGlvbjogICBNb3ZlIGEgcXVvdGUgdG8gdGhlIGVuZCBvZiBhIGxpbmUuIChNYXggSXNjaGVua28pCisJICAgIFVzZSAibWt0ZW1wIiBmaXJzdCwgbW9yZSBzeXN0ZW1zIGhhdmUgaXQuCitGaWxlczoJICAgIHNyYy92aW10dXRvcgorCitQYXRjaCA2LjFiLjAxNgorUHJvYmxlbTogICAgR1RLOiBsb2FkaW5nIGEgZm9udHNldCB0aGF0IHdvcmtzIHBhcnRseSwgVmltIG1pZ2h0IGhhbmcgb3IgY3Jhc2guCitTb2x1dGlvbjogICBBdm9pZCB0aGF0IGNoYXJfd2lkdGggYmVjb21lcyB6ZXJvLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA2LjFiLjAxNworUHJvYmxlbTogICAgR1VJOiBXaGVuIHVzaW5nICI6c2hlbGwiIGFuZCB0aGVyZSBpcyBhIGJlZXAsIG5vdGhpbmcgaGFwcGVucy4KK1NvbHV0aW9uOiAgIENhbGwgdmltX2JlZXAoKSB0byBwcm9kdWNlIHRoZSBiZWVwIGZyb20gdGhlIHNoZWxsLiAoWWFzdWhpcm8KKwkgICAgTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMWIuMDE4IChkZXBlbmRzIG9uIDYuMWIuMDA2KQorUHJvYmxlbTogICAgV2hlbiBlbnRlcmluZyB0aGUgZW5jcnlwdGlvbiBrZXksIHNwZWNpYWwga2V5cyBtYXkgc3RpbGwgcmV2ZWFsCisJICAgIHRoZSB0eXBlZCBjaGFyYWN0ZXJzLgorU29sdXRpb246ICAgTWFrZSBzdXJlIHN0YXJzIGFyZSB1c2VkIG9yIG5vdGhpbmcgaXMgc2hvd24gaW4gYWxsIGNhc2VzLgorRmlsZXM6CSAgICBzcmMvZGlncmFwaC5jLCBzcmMvZ2V0Y2hhci5jLCBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjFiLjAxOSAoZGVwZW5kcyBvbiA2LjFiLjAwNSkKK1Byb2JsZW06ICAgIEEgc2VhcmNoIHBhdHRlcm4gdGhhdCB0YWtlcyBhIGxvbmcgdGltZSBzbG93cyBkb3duIHR5cGluZyB3aGVuCisJICAgICdpbmNzZWFyY2gnIGlzIHNldC4KK1NvbHV0aW9uOiAgIFBhc3MgU0VBUkNIX1BFRUsgdG8gZG9zZWFyY2goKS4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNi4xYi4wMjAKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgdGhlIG1hdGNoaXQgcGx1Z2luLCAiJSIgZmluZHMgYSBtYXRjaCBvbiB0aGUgImVuZCIgb2YgYQorCSAgICAiOnN5bnRheCByZWdpb24iIGNvbW1hbmQgaW4gVmltIHNjcmlwdHMuCitTb2x1dGlvbjogICBTa2lwIG92ZXIgIjpzeW50YXggcmVnaW9uIiBjb21tYW5kcyBieSBzZXR0aW5nIGI6bWF0Y2hfc2tpcC4KK0ZpbGVzOgkgICAgcnVudGltZS9mdHBsdWdpbi92aW0udmltCisKK1BhdGNoIDYuMWIuMDIxCitQcm9ibGVtOiAgICB3aGVuICdtb3VzZWZvY3VzJyBpcyBzZXQsIENUUkwtVyBDVFJMLV0gc29tZXRpbWVzIGRvZXNuJ3Qgd2FycCB0aGUKKwkgICAgcG9pbnRlciB0byB0aGUgbmV3IHdpbmRvdy4gKFJvYmVydCBXZWJiKQorU29sdXRpb246ICAgRG9uJ3QgcmVzZXQgbmVlZF9tb3VzZV9jb3JyZWN0IHdoZW4gY2hlY2tpbmcgdGhlIHRpbWVzdGFtcCBvZiBhCisJICAgIGZpbGUuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjFiLjAyMgorUHJvYmxlbTogICAgV2l0aCBsb3RzIG9mIGZvbGRzICJqIiBkb2VzIG5vdCBvYmV5ICdzY3JvbGxvZmYnIHByb3Blcmx5LgorCSAgICAoU3JpbmF0aCBBdmFkaGFudWxhKQorU29sdXRpb246ICAgR28gdG8gZW5kIG9mIHRoZSBmb2xkIGJlZm9yZSBjb3VudGluZyBjb250ZXh0IGxpbmVzLgorRmlsZXM6CSAgICBzcmMvbW92ZS5jCisKK1BhdGNoIDYuMWIuMDIzCitQcm9ibGVtOiAgICBPbiBNUy1XaW5kb3dzIHN5c3RlbSgpIG1heSBjYXVzZSBjaGVja2luZyB0aW1lc3RhbXBzLCBiZWNhdXNlIFZpbQorCSAgICBsb29zZXMgYW5kIGdhaW5zIGlucHV0IGZvY3VzLCB3aGlsZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIG9uIFVuaXguCitTb2x1dGlvbjogICBEb24ndCBjaGVjayB0aW1lc3RhbXBzIHdoaWxlIHN5c3RlbSgpIGlzIGJ1c3kuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jLCBzcmMvZmlsZWlvLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMWIuMDI0IChleHRyYSkKK1Byb2JsZW06ICAgIEdldHRleHQgMC4xMSBjb21wbGFpbnMgdGhhdCAic2ppcyIgaXMgbm90IGEgc3RhbmRhcmQgbmFtZS4KK1NvbHV0aW9uOiAgIFVzZSAiY3A5MzIiIGluc3RlYWQuCitGaWxlczoJICAgIHNyYy9wby9zamlzY29yci5jCisKK1BhdGNoIDYuMWIuMDI1IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIGNsb3NpbmcgZ3ZpbSB3aGlsZSBpdCBpcyBtaW5pbWl6ZWQgIGFuZCBoYXMgYSBjaGFuZ2VkCisJICAgIGZpbGUsIHRoZSBmaWxlLWNoYW5nZWQgZGlhbG9nIHBvcHMgdXAgaW4gYSBjb3JuZXIgb2YgdGhlIHNjcmVlbi4KK1NvbHV0aW9uOiAgIFB1dCB0aGUgZGlhbG9nIGluIHRoZSBtaWRkbGUgb2YgdGhlIHNjcmVlbi4KK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjFiLjAyNgorUHJvYmxlbTogICAgV2hlbiAnZGlmZm9wdCcgY29udGFpbnMgJ2l3aGl0ZScgYnV0IG5vdCAnaWNhc2UnOiBkaWZmZXJlbmNlcyBpbgorCSAgICBjYXNlIGFyZSBub3QgaGlnaGxpZ2h0ZWQgcHJvcGVybHkuIChHZXJoYXJkIEhvY2hob2x6ZXIpCitTb2x1dGlvbjogICBEb24ndCBpZ25vcmUgY2FzZSB3aGVuIGlnbm9yaW5nIHdoaXRlIHNwYWNlIGRpZmZlcmVuY2VzLgorRmlsZXM6CSAgICBzcmMvZGlmZi5jCisKK1BhdGNoIDYuMWIuMDI3CitQcm9ibGVtOiAgICAidmltIC0tcmVtb3RlICsiIG1heSBjYXVzZSBhIGNyYXNoLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIG1pc3NpbmcgZmlsZSBuYW1lIGFyZ3VtZW50LiAoTWFydGluIEthaGxlcnQpCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4xYi4wMjggKGV4dHJhKQorUHJvYmxlbTogICAgV2luMTY6IENhbid0IGNvbXBpbGUgYWZ0ZXIgcGF0Y2ggNi4xYi4wMjUuCitTb2x1dGlvbjogICBBZGQgY29kZSBzcGVjaWZpY2FsbHkgZm9yIFdpbjE2LiAoVmluY2UgTmVncmkpCitGaWxlczoJICAgIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4xYi4wMjkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIGEgZGlyZWN0b3J5IG9uIGFuIE5URlMgcGFydGl0aW9uIGlzIHJlYWQvZXhlY3V0ZSAobm8KKwkgICAgZGVsZXRlLG1vZGlmeSx3cml0ZSkgYW5kIHRoZSBmaWxlIGhhcyBtb2RpZnkgcmlnaHRzLCB0cnlpbmcgdG8KKwkgICAgd3JpdGUgdGhlIGZpbGUgZGVsZXRlcyBpdC4gIE1ha2luZyB0aGUgZmlsZSByZWFkL3dyaXRlL2V4ZWN1dGUKKwkgICAgKG5vdCBkZWxldGUpIHNvbHZlcyBpdC4gKE1hcmsgQ2FudXApCitTb2x1dGlvbjogICBVc2UgdGhlIFVuaXggY29kZSB0byBjaGVjayBmb3IgYSB3cml0YWJsZSBkaXJlY3RvcnkuICBJZiBub3QsIHRoZW4KKwkgICAgbWFrZSBhIGJhY2t1cCBjb3B5IGFuZCBvdmVyd3JpdGUgdGhlIGZpbGUuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjFiLjAzMCAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWM6IHNtYWxsIG1pc3Rha2UgaW4gdGhlIGJ1aWxkIHNjcmlwdCBhbmQgcHJvdG90eXBlcy4KK1NvbHV0aW9uOiAgIEZpeCB0aGUgYnVpbGQgc2NyaXB0IGFuZCBhZGQgdGhlIHByb3RvdHlwZXMuIChBeGVsIEtpZWxob3JuKQorRmlsZXM6CSAgICBzcmMvb3NfbWFjLmJ1aWxkLCBzcmMvZ3VpX21hYy5jCisKK1BhdGNoIDYuMWIuMDMxIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogIjpzZXQgZ3VpZm9udD0qIiBkb2Vzbid0IHNldCAnZ3VpZm9udCcgdG8gdGhlIHJlc3VsdGluZworCSAgICBmb250IG5hbWUuIChWbGFkIFNhbmRyaW5pKQorU29sdXRpb246ICAgUHV0IHRoZSBjb2RlIGJhY2sgaW4gZ3VpX21jaF9pbml0X2ZvbnQoKSB0byBmb3JtIHRoZSBmb250IG5hbWUgb3V0CisJICAgIG9mIHRoZSBsb2dmb250LgorRmlsZXM6CSAgICBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMWIuMDMyCitQcm9ibGVtOiAgICBBdGhlbmE6IFNldHRpbmcgYSBjb2xvciBzY2hlbWUgYmVmb3JlIHRoZSBHVUkgaGFzIHN0YXJ0ZWQgY2F1c2VzIGEKKwkgICAgY3Jhc2guIChUb2RkIEJsdW1lcikKK1NvbHV0aW9uOiAgIERvbid0IHRyeSB1c2luZyBjb2xvciBuYW1lcyB0aGF0IGhhdmVuJ3QgYmVlbiBzZXQgeWV0LgorRmlsZXM6CSAgICBzcmMvZ3VpX2F0aGVuYS5jCisKK1BhdGNoIDYuMWIuMDMzCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgY291bnQgYWZ0ZXIgYSAiOnMiIGNvbW1hbmQgbWF5IGdldCBtbF9nZXQgZXJyb3JzLgorCSAgICAoRGlldG1hciBMYW5nKQorU29sdXRpb246ICAgQ2hlY2sgdGhhdCB0aGUgcmVzdWx0aW5nIHJhbmdlIGRvZXMgbm90IGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUKKwkgICAgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMWIuMDM0CitQcm9ibGVtOiAgICBBZnRlciBzb3VyY2luZyBtc3dpbi52aW0sIHdoZW4gdXNpbmcgPEMtUy1SaWdodD4gYWZ0ZXIKKwkgICAgYXV0by1pbmRlbnRpbmcgYW5kIHRoZW4gPERlbD4sIGdldCB3YXJuaW5nIGZvciBhbGxvY2F0aW5nCisJICAgIHJpZGljdWxvdXMgYW1vdW50IG9mIG1lbW9yeS4gKERhdmUgRGVsZ3JlY28pCitTb2x1dGlvbjogICBBZGp1c3QgdGhlIHN0YXJ0IG9mIHRoZSBWaXN1YWwgYXJlYSB3aGVuIGRlbGV0aW5nIHRoZSBhdXRvLWluZGVudC4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjFiLjAzNQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBldmltLCBkcm9wcGluZyBhIGZpbGUgb24gVmltIGFuZCB0aGVuIGRvdWJsZSBjbGlja2luZworCSAgICBvbiBhIHdvcmQsIGl0IGlzIGNoYW5nZWQgdG8gImkiLiAoTWVybGluIEhhbnNlbikKK1NvbHV0aW9uOiAgIFJlc2V0IG5lZWRfc3RhcnRfaW5zZXJ0bW9kZSBhZnRlciBlZGl0aW5nIHRoZSBmaWxlLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVkVSU0lPTiA2LjIJCQkJCQkqdmVyc2lvbi02LjIqCisKK1RoaXMgc2VjdGlvbiBpcyBhYm91dCBpbXByb3ZlbWVudHMgbWFkZSBiZXR3ZWVuIHZlcnNpb24gNi4xIGFuZCA2LjIuCisKK1RoaXMgaXMgbWFpbmx5IGEgYnVnLWZpeCByZWxlYXNlLiAgVGhlcmUgYXJlIGFsc28gYSBmZXcgbmV3IGZlYXR1cmVzLgorCitNYWluIG5ldyBmZWF0dXJlczoKKy0gU3VwcG9ydCBmb3IgR1RLIDIuIChEYW5pZWwgRWxzdG5lcikKKy0gU3VwcG9ydCBmb3IgZWRpdGluZyBBcmFiaWMgdGV4dC4gKE5hZGltIFNoYWlrbGkgJiBJc2FtIEJheWF6aWRpKQorLSAiOnRyeSIgY29tbWFuZCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLiAoU2VydmF0aXVzIEJyYW5kdCkKKy0gU3VwcG9ydCBmb3IgdGhlIG5lWHRhdyBHVUkgdG9vbGtpdCAobW9zdGx5IGxpa2UgQXRoZW5hKS4gKEFsZXhleSBGcm9sb2ZmKQorLSBDc2NvcGUgc3VwcG9ydCBmb3IgV2luMzIuIChLaG9yZXYgU2VyZ2V5KQorLSBTdXBwb3J0IGZvciBQb3N0U2NyaXB0IHByaW50aW5nIGluIHZhcmlvdXMgOC1iaXQgZW5jb2RpbmdzLiAoTWlrZSBXaWxsaWFtcykKKworCitDaGFuZ2VkCQkJCQkJCSpjaGFuZ2VkLTYuMioKKy0tLS0tLS0KKworUmVtb3ZlZCB0aGUgc2NoZW1lIGluZGVudCBmaWxlLCB0aGUgaW50ZXJuYWwgTGlzcCBpbmRlbnRpbmcgd29ya3Mgd2VsbCBub3cuCisKK01vdmVkIHRoZSBHdmltRVh0LCBPbGVWaW0gYW5kIFZpc1ZpbSBkaXJlY3RvcmllcyBpbnRvIHRoZSAic3JjIiBkaXJlY3RvcnkuCitUaGlzIGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGhvdyB4eGQgaXMgaGFuZGxlZC4KKworVGhlIFZpc1ZpbS5kbGwgZmlsZSBpcyBpbnN0YWxsZWQgaW4gdGhlIHRvcCBkaXJlY3RvcnksIG5leHQgdG8gZ3ZpbWV4dC5kbGwsCitpbnN0ZWFkIG9mIGluIGEgc3ViZGlyZWN0b3J5ICJWaXNWaW0iLiAgRml4ZXMgdGhhdCBOU0lTIHdhcyB1bmluc3RhbGxpbmcgaXQKK2Zyb20gdGhlIHdyb25nIGRpcmVjdG9yeS4KKworUmVtb3ZlZCB0aGUgYXJ0IGluZGVudCBmaWxlLCBpdCBkaWRuJ3QgZG8gYW55dGhpbmcuCisKK3N1Ym1hdGNoKCkgcmV0dXJuZWQgbGluZSBicmVha3Mgd2l0aCBDUiBpbnN0ZWFkIG9mIExGLgorCitDaGFuZ2VkIHRoZSBXaW4zMiBNYWtlZmlsZXMgdG8gYmVjb21lIG1vcmUgdW5pZm9ybSBhbmQgY29tcGlsZSBndmltZXh0LmRsbC4KKyhEYW4gU2hhcnApCisKKydjaW5kZW50JzogQWxpZ24gYSAiLy8iIGNvbW1lbnQgd2l0aCBhICIvLyIgY29tbWVudCBpbiBhIHByZXZpb3VzIGxpbmUuCisoSGVsbXV0IFN0aWVnbGVyKQorCitQcmV2aW91c2x5IG9ubHkgZm9yIHh0ZXJtLWxpa2UgdGVybWluYWxzIHBhcmVudCB3aWRnZXRzIHdlcmUgZm9sbG93ZWQgdG8gZmluZAordGhlIHRpdGxlIGFuZCBpY29uIGxhYmVsLiAgTm93IGRvIHRoaXMgZm9yIGFsbCB0ZXJtaW5hbCBlbXVsYXRvcnMuCisKK01hZGUgaXQgcG9zc2libGUgdG8gcmVjb2duaXplIGJhY2tzbGFzaGVzIGZvciAiJSIgbWF0Y2hpbmcuICBUaGUgJ00nIGZsYWcgaW4KKydjcG9wdGlvbnMnIGRpc2FibGVzIGl0LiAoSGFha29uIFJpaXNlcikKKworUmVtb3ZlZCB0aGUgTWFrZV90Y2MubWFrIG1ha2VmaWxlIGZvciBUdXJibyBDLiAgSXQgZGlkbid0IHdvcmsgYW5kIHdlIHByb2JhYmx5CitjYW4ndCBtYWtlIGl0IHdvcmsgKHRoZSBjb21waWxlciBydW5zIG91dCBvZiBtZW1vcnkpLgorCitFdmVuIHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8ga2V5d29yZHMsICJbIENUUkwtRCIgd2FzIHVzaW5nCisnaXNpZGVudCcgdG8gZmluZCBtYXRjaGVzLiAgQ2hhbmdlZCBpdCB0byB1c2UgJ2lza2V5d29yZCcuICBBbHNvIGFwcGxpZXMgdG8KK290aGVyIGNvbW1hbmRzIHRoYXQgc2VhcmNoIGZvciBkZWZpbmVkIHdvcmRzIGluIGluY2x1ZGVkIGZpbGVzIHN1Y2ggYXMKKyI6ZHNlYXJjaCIsICJbRCIgYW5kICJbZCIuCisKK01hZGUgJ2tleXdvcmRwcmcnIGdsb2JhbC1sb2NhbC4gKENocmlzdGlhbiBSb2JpbnNvbikKKworRW5hYmxlZCB0aGUgTmV0YmVhbnMgaW50ZXJmYWNlIGJ5IGRlZmF1bHQuICBSZXZlcnNlZCB0aGUgY29uZmlndXJlIGFyZ3VtZW50Citmcm9tICItLWVuYWJsZS1uZXRiZWFucyIgdG8gIi0tZGlzYWJsZS1uZXRiZWFucyIuCisKKworQWRkZWQJCQkJCQkJKmFkZGVkLTYuMioKKy0tLS0tCisKK05ldyBvcHRpb25zOgorCSdhcmFiaWMnCisJJ2FyYWJpY3NoYXBlJworCSdhbWJpd2lkdGgnCisJJ2F1dG9jaGRpcicKKwknY2FzZW1hcCcKKwknY29weWluZGVudCcKKwknY3Njb3BlcXVpY2tmaXgnCisJJ3ByZXNlcnZlaW5kZW50JworCSdwcmludGVuY29kaW5nJworCSdyaWdodGxlZnRjbWQnCisJJ3Rlcm1iaWRpJworCSd0b29sYmFyaWNvbnNpemUnCisJJ3dpbmZpeGhlaWdodCcKKworTmV3IGtleW1hcHM6CisJU2VyYmlhbiAoQWxla3NhbmRhciBWZXNlbGlub3ZpYykKKwlDaGluZXNlIFBpbnlpbiAoRnJlZHJpayBSb3ViZXJ0KQorCUVzcGVyYW50byAoQW50b2luZSBKLiBNZWNoZWx5bmNrKQorCitOZXcgc3ludGF4IGZpbGVzOgorCVZhbGdyaW5kIChSb2dlciBMdWV0aGkpCisJU21hcnR5IHRlbXBsYXRlIChNYW5mcmVkIFN0aWVuc3RyYSkKKwlNeVNRTCAoS2VubmV0aCBQcm9ub3ZpY2kpCisJUm9ja0xpbnV4IHBhY2thZ2UgZGVzY3JpcHRpb24gKFBpb3RyIEVzZGVuLVRlbXBza2kpCisJTU1JWCAoRGlyayBIdWVza2VuKQorCWdrcmVsbG1yYyAoRGF2aWQgTmVjYXMpCisJVGlsZGUgKFRvYmlhcyBSdW5kdHJvbSkKKwlMb2d0YWxrIChQYXVsbyBNb3VyYSkKKwlQTFAgKEp1ZXJkIFdhYWxib2VyKQorCWZ2d20ybTQgKERhdmlkIE5lY2FzKQorCUlQZmlsdGVyIChIZW5kcmlrIFNjaG9seikKKwlmc3RhYiAoUmFkdSBEaW5laXUpCisJUXVha2UgKE5pa29sYWkgV2VpYnVsbCkKKwlPY2NhbSAoTWFyaW8gU2Nod2VpZ2xlcikKKwlscGMgKFNoaXpodSBQYW4pCisJRXhpbSBjb25mIChEYXZpZCBOZWNhcykKKwlFRElGIChBcnRlbSBaYW5rb3ZpY2gpCisJLmN2c3JjIChOaWtvbGFpIFdlaWJ1bGwpCisJLmZldGNobWFpbHJjIChOaWtvbGFpIFdlaWJ1bGwpCisJR05VIGdwZyAoTmlrb2xhaSBXZWlidWxsKQorCUdydWIgKE5pa29sYWkgV2VpYnVsbCkKKwlNb2Rjb25mIChOaWtvbGFpIFdlaWJ1bGwpCisJUkNTIChEbWl0cnkgVmFzaWxpZXYpCisJQXJ0IChEb3JhaSBTaXRhcmFtKQorCVJlbmRlcm1hbiBJbnRlcmZhY2UgQnl0ZXN0cmVhbSAoQW5kcmV3IEogQnJvbWFnZSkKKwlNYWlsY2FwIChEb3VnIEtlYXJucykKKwlTdWJ2ZXJzaW9uIGNvbW1pdCBmaWxlIChEbWl0cnkgVmFzaWxpZXYpCisJTWljcm9zb2Z0IElETCAoVmFkaW0gWmVpdGxpbikKKwlXaWxkUGFja2V0cyBFdGhlclBlZWsgRGVjb2RlciAoQ2hyaXN0b3BoZXIgU2hpbm4pCisJU3B5Y2UgKFJpbW9uIEJhcnIpCisJUmVzb2x2LmNvbmYgKFJhZHUgRGluZWl1KQorCUE2NSAoQ2xlbWVucyBLaXJjaGdhdHRlcmVyKQorCXNzaGNvbmZpZyBhbmQgc3NoZGNvbmZpZyAoRGF2aWQgTmVjYXMpCisJQ2hlZXRhaCBhbmQgSFRNTENoZWV0YWggKE1heCBJc2NoZW5rbykKKwlQYWNrZXQgZmlsdGVyIChDYW1pZWwgRG9iYmVsYWFyKQorCitOZXcgaW5kZW50IGZpbGVzOgorCUVpZmZlbCAoRGF2aWQgQ2xhcmtlKQorCVRpbGRlIChUb2JpYXMgUnVuZHRyb20pCisJT2NjYW0gKE1hcmlvIFNjaHdlaWdsZXIpCisJQXJ0IChEb3JhaSBTaXRhcmFtKQorCVBIUCAoTWlsZXMgTG90dCkKKwlEeWxhbiAoQnJlbnQgRnVsZ2hhbSkKKworTmV3IHR1dG9yIHRyYW5zbGF0aW9uczoKKwlTbG92YWsgKEx1Ym9zIENlbGtvKQorCUdyZWVrIChDaHJpc3RvcyBLb250YXMpCisJR2VybWFuIChKb2FjaGltIEhvZm1hbm4pCisJTm9yd2VnaWFuICjYeXZpbmQgSG9sbSkKKworTmV3IGZpbGV0eXBlIHBsdWdpbnM6CisJT2NjYW0gKE1hcmlvIFNjaHdlaWdsZXIpCisJQXJ0IChEb3JhaSBTaXRhcmFtKQorCWFudC52aW0sIGFzcHZicy52aW0sIGNvbmZpZy52aW0sIGNzYy52aW0sIGNzaC52aW0sIGR0ZC52aW0sIGh0bWwudmltLAorCWpzcC52aW0sIHBhc2NhbC52aW0sIHBocC52aW0sIHNnbWwudmltLCBzaC52aW0sIHN2Zy52aW0sIHRjc2gudmltLAorCXhodG1sLnZpbSwgeG1sLnZpbSwgeHNkLnZpbS4gIChEYW4gU2hhcnApCisKK05ldyBjb21waWxlciBwbHVnaW5zOgorCUNoZWNrc3R5bGUgKERvdWcgS2Vhcm5zKQorCWc3NyAoUmFsZiBXaWxkZW5odWVzKQorCWZvcnRyYW4gKEpvaGFubi1HdWVudGVyIFNpbW9uKQorCVhtbGxpbnQgKERvdWcgS2Vhcm5zKQorCVJ1YnkgKFRpbSBIYW1tZXJxdWlzdCkKKwlNb2RlbHNpbSB2Y29tIChQYXVsIEJhbGVtZSkKKworTmV3IG1lbnUgdHJhbnNsYXRpb25zOgorCUJyYXppbGlhbiAoSm9z6SBkZSBQYXVsYSkKKwlCcml0aXNoIChNaWtlIFdpbGxpYW1zKQorCUtvcmVhbiBpbiBVVEYtOC4gKE5hbSBTdW5nSHl1bikKKwlOb3J3ZWdpYW4gKNh5dmluZCBIb2xtKQorCVNlcmJpYW4gKEFsZWtzYW5kYXIgSmVsZW5haykKKworTmV3IG1lc3NhZ2UgdHJhbnNsYXRpb24gZm9yIE5vcndlZ2lhbi4gKNh5dmluZCBIb2xtKQorCitOZXcgY29sb3Igc2NoZW1lOgorCWRlc2VydCAoSGFucyBGdWdhbCkKKworQXJhYmljIHNwZWNpZmljIGZlYXR1cmVzLiAnYXJhYmljc2hhcGUnLCAndGVybWJpZGknLCAnYXJhYmljJyBhbmQKKydyaWdodGxlZnRjbWQnIG9wdGlvbnMuICAoTmFkaW0gU2hhaWtsaSAmIElzYW0gQmF5YXppZGkpCisKK1N1cHBvcnQgZm9yIG5lWHRhdyBHVUkgdG9vbGtpdCwgbW9zdGx5IGxpa2UgQXRoZW5hLiAoQWxleGV5IEZyb2xvZmYpCisKK1dpbjMyOiBjc2NvcGUgc3VwcG9ydC4gKEtob3JldiBTZXJnZXkpCisKK1ZNUzogdmFyaW91cyBpbXByb3ZlbWVudHMgdG8gZG9jdW1lbnRhdGlvbiBhbmQgbWFrZWZpbGVzLiAgKFpvbHRhbiBBcnBhZGZmeSkKKworQWRkZWQgIngiIGtleSB0byB0aGUgZXhwbG9yZXIgcGx1Z2luOiBleGVjdXRlIHRoZSBkZWZhdWx0IGFjdGlvbi4gKFlhc3VoaXJvCitNYXRzdW1vdG8pCisKK0NvbXBpbGUgZ3ZpbWV4dC5kbGwgd2l0aCBNaW5nVy4gKFJlbmUgZGUgWndhcnQpCisKK0FkZCB0aGUgInRvaHRtbC52aW0iIHBsdWdpbi4gIEl0IGRlZmluZXMgdGhlICI6VE9odG1sIiB1c2VyIGNvbW1hbmQsIGFuIGVhc3kKK3dheSB0byBjb252ZXJ0IHRleHQgdG8gSFRNTC4KKworQWRkZWQgIjp0cnkiIC8gIjpjYXRjaCIgLyAiOmZpbmFsbHkiIC8gIjplbmR0cnkiIGNvbW1hbmRzLiAgQWRkIEU5OTkgbnVtYmVycwordG8gYWxsIGVycm9yIG1lc3NhZ2VzLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGNhdWdodCBieSB0aGUgbnVtYmVyLgorKFNlcnZhdGl1cyBCcmFuZHQpCitNb3ZlZCBwYXJ0IG9mIGV4X2RvY21kLmMgdG8gdGhlIG5ldyBleF9ldmFsLmMgc291cmNlIGZpbGUuCisKK0luY2x1ZGUgc3VwcG9ydCBmb3IgR1RLKyAyLjIueCAoRGFuaWVsIEVsc3RuZXIpCitBZGRzIHRoZSAifiIgcmVnaXN0ZXI6IGRyYWcgJiBkcm9wIHRleHQuCitBZGRzIHRoZSAndG9vbGJhcmljb25zaXplJyBvcHRpb24uCitBZGQgLURhbGxvY2Egd2hlbiBydW5uaW5nIGxpbnQgdG8gd29yayBhcm91bmQgYSBwcm9ibGVtIHdpdGggYWxsb2NhKCkKK3Byb3RvdHlwZS4KKworV2hlbiBzZWxlY3RpbmcgYW4gaXRlbSBpbiB0aGUgZXJyb3Igd2luZG93IHRvIGp1bXAgdG8sIHRha2Ugc29tZSBlZmZvcnQgdG8KK2ZpbmQgYW4gb3JkaW5hcnkgd2luZG93IHRvIHNob3cgdGhlIGZpbGUgaW4gKG5vdCBhIHByZXZpZXcgd2luZG93KS4KKworU3VwcG9ydCBmb3IgUG9zdFNjcmlwdCBwcmludGluZyBvZiB2YXJpb3VzIDgtYml0IGVuY29kaW5ncy4gKE1pa2UgV2lsbGlhbXMpCisKK2lucHV0ZGlhbG9nKCkgYWNjZXB0cyBhIHRoaXJkIGFyZ3VtZW50IHRoYXQgaXMgdXNlZCB3aGVuIHRoZSBkaWFsb2cgaXMKK2NhbmNlbGxlZC4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIHNlZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBjYW5jZWxsaW5nIGFuZAorZW50ZXJpbmcgbm90aGluZy4KKworSW5jbHVkZWQgQWFwIHJlY2lwZXMuICBDYW4gYmUgdXNlZCB0byB1cGRhdGUgVmltIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiwKK2J1aWxkaW5nIGFuZCBpbnN0YWxsaW5nLgorCisiLyIgb3B0aW9uIGluICdjaW5vcHRpb25zJzogZXh0cmEgaW5kZW50IGZvciBjb21tZW50IGxpbmVzLiAoSGVsbXV0IFN0aWVnbGVyKQorCitWaW0gdmFyaWFibGUgInY6cmVnaXN0ZXIiIGFuZCBmdW5jdGlvbnMgc2V0cmVnKCksIGdldHJlZygpIGFuZCBnZXRyZWd0eXBlKCkuCisoTWljaGFlbCBHZWRkZXMpCisKKyJ2IiBmbGFnIGluICdjcG9wdGlvbnMnOiBMZWF2ZSB0ZXh0IG9uIHNjcmVlbiB3aXRoIGJhY2tzcGFjZSBpbiBJbnNlcnQgbW9kZS4KKyhQaGlsbGlwIFZhbmRyeSkKKworRG9zaW5zdC5leGUgYWxzbyBmaW5kcyBndmltZXh0LmRsbCBpbiB0aGUgIkd2aW1FeHQiIGRpcmVjdG9yeS4gIFVzZWZ1bCB3aGVuCitydW5uaW5nIGluc3RhbGwgaW4gdGhlICJzcmMiIGRpcmVjdG9yeSBmb3IgdGVzdGluZy4KKworU3VwcG9ydCB0YWcgZmlsZXMgdGhhdCB3ZXJlIHNvcnRlZCB3aXRoIGNhc2UgaWdub3JlZC4gKEZsZW1taW5nIE1hZHNlbikKKworV2hlbiBjb21wbGV0aW5nIGEgd2lsZGNhcmQgaW4gYSBsZWFkaW5nIHBhdGggZWxlbWVudCwgYXMgaW4gIi4uLyovTWFrZWZpbGUiLAorb25seSB0aGUgbGFzdCBwYXJ0ICgiTWFrZWZpbGUiKSB3YXMgbGlzdGVkLiAgU3VwcG9ydCBjdXN0b20gZGVmaW5lZAorY29tbWFuZCBsaW5lIGNvbXBsZXRpb24uICAoRmxlbW1pbmcgTWFkc2VuKQorCitBbHNvIHJlY29nbml6ZSAicnh2dCIgYXMgYW4geHRlcm0tbGlrZSB0ZXJtaW5hbC4gKFRvbWFzIFN0eWJsbykKKworUHJvcGVyIFgxMSBzZXNzaW9uIG1hbmFnZW1lbnQuICBGaXhlcyB0aGF0IHRoZSBXTV9TQVZFX1lPVVJTRUxGIGV2ZW50IHdhcyBub3QKK3VzZWQgYnkgcG9wdWxhciBkZXNrdG9wcy4gIChOZWlsIEJpcmQpCitOb3QgdXNlZCBmb3IgR25vbWUgMiwgaXQgaGFzIGl0cyBvd24gaGFuZGxpbmcuCisKK1N1cHBvcnQgQk9SLCBERUJVRyBhbmQgU1BBV05PIGFyZ3VtZW50cyBmb3IgdGhlIEJvcmxhbmQgMyBNYWtlZmlsZS4gKFdhbHRlcgorQnJpc2NvZSkKKworU3VwcG9ydCBwYWdlIGJyZWFrcyBmb3IgcHJpbnRpbmcuICBBZGRzIHRoZSAiZm9ybWZlZWQiIGZpZWxkIGluCisncHJpbnRvcHRpb25zJy4gIChNaWtlIFdpbGxpYW1zKQorCitNYWMgT1NYOiBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0OiBpY29udiBhbmQgZ2V0dGV4dC4gKE11cmFva2EgVGFybywgQXhlbAorS2llbGhvcm4pCisKKyJcWiIgZmxhZyBpbiBwYXR0ZXJuczogaWdub3JlIGRpZmZlcmVuY2VzIGluIGNvbWJpbmluZyBjaGFyYWN0ZXJzLiAoUm9uIEFhcm9uKQorCitBZGRlZCAncHJlc2VydmVpbmRlbnQnIGFuZCAnY29weWluZGVudCcgb3B0aW9ucy4gIFRoZXkgdXNlIGV4aXN0aW5nIHdoaXRlCitzcGFjZSBjaGFyYWN0ZXJzIGluc3RlYWQgb2YgdXNpbmcgVGFicyBhcyBtdWNoIGFzIHBvc3NpYmxlLiAoQ2hyaXMgTGVpc2htYW4pCisKK1VwZGF0ZWQgVW5pY29kZSB0YWJsZXMgdG8gVW5pY29kZSA0LjAuIChSYXBoYWVsIEZpbmtlbCkKKworU3VwcG9ydCBmb3IgdGhlIG1vdXNlIHdoZWVsIGluIHJ4dnQuIChBSURBIFNoaW5yYSkKKworV2luMzI6IEFkZGVkICI6OCIgZmlsZSBtb2RpZmllciB0byBnZXQgc2hvcnQgZmlsZW5hbWUuICBUZXN0NTAgdGVzdHMgdGhlICI6OCIKK2V4cGFuc2lvbiBvbiBXaW4zMiBzeXN0ZW1zLiAoTWljaGFlbCBHZWRkZXMpCisKKydjc2NvcGVxdWlja2ZpeCcgb3B0aW9uOiBPcGVuIHF1aWNrZml4IHdpbmRvdyBmb3IgQ3Njb3BlIGNvbW1hbmRzLiAgQWxzbworY2xlYW51cCB0aGUgY29kZSBmb3IgZ2l2aW5nIG1lc3NhZ2VzLiAgKEtob3JldiBTZXJnZXkpCisKK0dVSTogU3VwcG9ydCBtb3JlIHRoYW4gMjIyIGNvbHVtbnMgZm9yIG1vdXNlIHBvc2l0aW9ucy4KKworIjpzdG9waW5zZXJ0IiBjb21tYW5kOiBEb24ndCByZXR1cm4gdG8gSW5zZXJ0IG1vZGUuCisKKyJpbnRlcnJ1cHQiIGNvbW1hbmQgZm9yIGRlYnVnIG1vZGUuICBVc2VmdWwgZm9yIHNpbXVsYXRpbmcgQ1RSTC1DLiAoU2VydmF0aXVzCitCcmFuZHQpCisKKworRml4ZWQJCQkJCQkJKmZpeGVkLTYuMioKKy0tLS0tCisKK1JlbW92ZWQgYSBmZXcgdW51c2VkICNkZWZpbmVzIGZyb20gY29uZmlnLmguaW4sIG9zX29zMl9jZmcuaCBhbmQgb3Nfdm1zX2NvbmYuaC4KKworVGhlIFZpbSBpY29ucyBpbiBQTkcgZm9ybWF0IGRpZG4ndCBoYXZlIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZC4gKEdyZWcKK1JvZWxvZnMpCisKK0ZpeGVkIGEgbGFyZ2UgbnVtYmVyIG9mIHNwZWxsaW5nIG1pc3Rha2VzIGluIHRoZSBkb2NzLiAoQWRyaSBWZXJob2VmKQorCitUaGUgI2RlZmluZXMgZm9yIHByb3RvdHlwZSBnZW5lcmF0aW9uIHdlcmUgY2F1c2luZyB0cm91YmxlLiAgQ2hhbmdlZCB0aGVtIHRvCit0eXBlZGVmcy4KKworQSBuZXcgdmVyc2lvbiBvZiBsaWJpbnRsLmggdXNlcyBfX2FzbV9fLCB3aGljaCBjb25mdXNlcyBjcHJvdG8uICBEZWZpbmUgYQorZHVtbXkgX19hc21fXyBtYWNyby4KKworV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCBjYW4ndCBtb3ZlIHRvIGhhbGZ3YXkgYW4gdW5wcmludGFibGUgY2hhcmFjdGVyLgorQ3JpcHBsZXMgQ1RSTC1WIHNlbGVjdGlvbi4gKFRhcm8gTXVyYW9rYSkKK0FsbG93IG1vdmluZyB0byBoYWxmd2F5IGFuIHVucHJpbnRhYmxlIGNoYXJhY3Rlci4gIERvbid0IGxldCBnZXR2dmNvbCgpIGNoYW5nZQordGhlIHBvcy0+Y29sYWRkIGFyZ3VtZW50LgorCitXaGVuIGEgdGFiIHdyYXBzIHRvIHRoZSBuZXh0IGxpbmUsICdsaXN0Y2hhcnMnIGlzIHNldCBhbmQgJ2ZvbGRjb2x1bW4nIGlzCitub24temVybywgb25seSBvbmUgY2hhcmFjdGVyIG9mIHRoZSBmb2xkY29sdW1uIGlzIGhpZ2hsaWdodGVkLiAoTXVyYW9rYSBUYXJvKQorCitXaGVuIHVzaW5nICI6Y2F0Y2giIHdpdGhvdXQgYW4gYXJndW1lbnQgVmltIGNyYXNoZXMuIChZYXN1aGlybyBNYXRzdW1vdG8pCitXaGVuIG5vIGFyZ3VtZW50IGdpdmVuIHVzZSB0aGUgIi4qIiBwYXR0ZXJuLgorCitXaW4zMjogV2hlbiBndmltLmV4ZSBpcyBzdGFydGVkIGZyb20gYSBzaG9ydGN1dCB3aXRoIHRoZSB3aW5kb3cgc3R5bGUgcHJvcGVydHkKK3NldCB0byBtYXhpbWl6ZSBWaW0gZG9lc24ndCBzdGFydCB3aXRoIGEgbWF4aW1pemVkIHdpbmRvdy4gKFlhc3VoaXJvCitNYXRzdW1vdG8pICBPcGVuIHRoZSB3aW5kb3cgd2l0aCB0aGUgZGVmYXVsdCBzaXplIGFuZCBkb24ndCBjYWxsIFNob3dXaW5kb3coKQorYWdhaW4gd2hlbiBpdCdzIGFscmVhZHkgdmlzaWJsZS4gKEhlbG11dCBTdGllZ2xlcikKKworZ3VpX2d0ay5jIHVzZWQgTUFYLCBidXQgaXQncyB1bmRlZmluZWQgdG8gYXZvaWQgYSBjb25mbGljdCB3aXRoIHN5c3RlbSBoZWFkZXIKK2ZpbGVzLgorCitXaW4zMjogV2hlbiBjbG9zaW5nIGEgd2luZG93IGZyb20gYSBtYXBwaW5nIHNvbWUgcGl4ZWxzIHJlbWFpbiBvbiB0aGUKK3N0YXR1c2xpbmUuIChZYXN1aGlybyBNYXRzdW1vdG8pCisKK0EgY29sdW1uIG51bWJlciBpbiBhbiBlcnJvcmZvcm1hdCB0aGF0IGdvZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGxpbmUgbWF5CitjYXVzZSBhIGNyYXNoLgorCisiOnRocm93ICd0ZXN0JyIgY3Jhc2hlcyBWaW0uIChZYXN1aGlybyBNYXRzdW1vdG8pCisKK1RoZSBmaWxlIHNlbGVjdG9yJ3Mgc2Nyb2xsYmFyIGNvbG9ycyBhcmUgbm90IHNldCBhZnRlciBkb2luZyBhICI6aGkgU2Nyb2xsYmFyCitndWlmZz1jb2xvciIuICBBbmQgdGhlIGZpbGUgc2VsZWN0b3IncyBjb2xvcnMgYXJlIG5vdCBjaGFuZ2VkIGJ5IHRoZQorY29sb3JzY2hlbWUgY29tbWFuZC4gIChEYXZpZCBIYXJyaXNvbikKKworTW90aWY6IFdoZW4gY29tcGlsaW5nIHdpdGggRkVBVF9GT09URVIgZGVmaW5lZCwgdGhlIHRleHQgYXJlYSBnZXRzIGEgZmV3CitwaXhlbHMgZXh0cmEgc3BhY2Ugb24gdGhlIHJpZ2h0LiAgUmVtb3ZlIHRoZSBzcGVjaWFsIGNhc2UgaW4KK2d1aV9nZXRfYmFzZV93aWR0aCgpLiAoRGF2aWQgSGFycmlzb24pCisKK1VzaW5nIENUUkwtUiBDVFJMLVAgaW4gSW5zZXJ0IG1vZGUgcHV0cyB0aGUgJ10gbWFyayBpbiB0aGUgd3JvbmcgcG9zaXRpb24uCisoSGVsbXV0IFN0aWVnbGVyKQorCitXaGVuICdmb3JtYXRvcHRpb25zJyBpbmNsdWRlcyAiYXdjdCIgYSBub24tY29tbWVudCB3YXNuJ3QgYXV0by1mb3JtYXR0ZWQuCisKK1VzaW5nIGEgIi0tY21kIiBhcmd1bWVudCBtb3JlIHRoYW4gMTAgdGltZXMgY2F1c2VkIGEgY3Jhc2guCisKK0RFQyBzdHlsZSBtb3VzZSBzdXBwb3J0IGRpZG4ndCB3b3JrIGlmIHRoZSBwYWdlIGZpZWxkIGlzIG5vdCBlbXB0eS4KKyhVcmliYXJyaSkKKworInZpbSAtbCBvbmUgdHdvIiBkaWQgb25seSBzZXQgJ2xpc3AnIGluIHRoZSBmaXJzdCBmaWxlLiAgVmkgZG9lcyBpdCBmb3IgZXZlcnkKK2ZpbGUuCisKKyI6c2V0IHR3PCIgZGlkbid0IHdvcmsuICBXYXMgY2hlY2tpbmcgZm9yICdeJyBpbnN0ZWFkIG9mICc8Jy4KKworSW4gIjpoYXJkY29weSA+ICUucHMiIHRoZSAiJSIgd2FzIG5vdCBleHBhbmRlZCB0byB0aGUgY3VycmVudCBmaWxlbmFtZS4KKworTWFkZSAiOnJlZHJhdyIgYWxzbyB1cGRhdGUgdGhlIFZpc3VhbCBhcmVhLgorCitXaGVuIGEgbm90IGltcGxlbWVudGVkIGNvbW1hbmQsIHN1Y2ggYXMgIjpwZXJsIiwgaGFzIHdyb25nIGFyZ3VtZW50cyB0aGUgbGVzcworaW1wb3J0YW50IGVycm9yIHdhcyByZXBvcnRlZCwgZ2l2aW5nIHRoZSB1c2VyIHRoZSBpZGVhIHRoZSBjb21tYW5kIGNvdWxkIHdvcmsuCisKK09uIG5vbi1Vbml4IHN5c3RlbXMgYXV0b2NvbW1hbmRzIGZvciB3cml0aW5nIGRpZCBub3QgYXR0ZW1wdCBhIG1hdGNoIHdpdGggdGhlCitzaG9ydCBmaWxlIG5hbWUsIGNhdXNpbmcgYSBwYXR0ZXJuIGxpa2UgImEvYiIgdG8gZmFpbC4KKworVk1TOiBlX3NjcmVlbm1vZGUgd2FzIG5vdCBkZWZpbmVkIGFuZCBhIGZldyBvdGhlciBmaXhlcyBmb3IgVk1TLiAoWm9sdGFuCitBcnBhZGZmeSkKKworcmVkcmF3X21zZygpIGRlcGVuZGVkIG9uIEZFQVRfQVJBQklDIGluc3RlYWQgb2YgRkVBVF9SSUdIVExFRlQuIChXYWx0ZXIKK0JyaXNjb2UpCisKK1ZhcmlvdXMgY2hhbmdlcyBmb3IgdGhlIFBDIE1ha2VmaWxlcy4gKFdhbHRlciBCcmlzY29lKQorCitVc2UgX3RydWVuYW1lKCkgaW5zdGVhZCBvZiBvdXIgb3duIGNvZGUgdG8gZXhwYW5kIGEgZmlsZSBuYW1lIGludG8gYSBmdWxsCitwYXRoLiAoV2FsdGVyIEJyaXNjb2UpCisKK0Vycm9yIGluIGZpbGV0eXBlIGNoZWNrIGZvciAvZXRjL21vZHV0aWxzLiAoTHVib21pciBIb3N0KQorCitDc2NvcGUgaW50ZXJmYWNlOiBhbGxvY2F0ZWQgYSBidWZmZXIgdG9vIHNtYWxsLgorCitXaW4xNjogcmVtb3ZlIGEgdHJhaWxpbmcgYmFja3NsYXNoIGZyb20gYSBwYXRoIHdoZW4gb2J0YWluaW5nIHRoZSBwZXJtaXNzaW9uCitmbGFncy4gKFZpbmNlIE5lZ3JpKQorCitXaGVuIHNlYXJjaGluZyBmb3IgdGFncyB3aXRoIGNhc2UgaWdub3JlZCBWaW0gY291bGQgaGFuZy4KKworV2hlbiBzZWFyY2hpbmcgZGlyZWN0b3JpZXMgd2l0aCBhIHN0b3BkaXIgY291bGQgZ2V0IGEgY3Jhc2guICBEaWQgbm90CityZS1hbGxvY2F0ZSBlbm91Z2ggbWVtb3J5LiAoVmluY2UgTmVncmkpCisKK0EgdXNlciBjb21tYW5kIG1heSBjYXVzZSBhIGNyYXNoLiAgRG9uJ3QgdXNlIHRoZSBjb21tYW5kIGluZGV4IHdoZW4gaXQncworbmVnYXRpdmUuIChWaW5jZSBOZWdyaSkKKworcHV0ZW52KCkgZGlkbid0IHdvcmsgZm9yIE1pbmdXIGFuZCBDeWd3aW4uIChEYW4gU2hhcnApCisKK01hbnkgZnVuY3Rpb25zIHdlcmUgY29tbW9uIGJldHdlZW4gb3NfbXNkb3MuYyBhbmQgb3Nfd2luMTYuYy4gIFVzZSBvc19tc2Rvcy5jCitmb3IgY29tcGlsaW5nIHRoZSBXaW4xNiB2ZXJzaW9uIGFuZCByZW1vdmUgdGhlIGZ1bmN0aW9ucyBmcm9tIG9zX3dpbjE2LmMuCisoVmluY2UgTmVncmkpCisKK0ZvciB0ZXJtaW5hbHMgdGhhdCBiZWhhdmUgbGlrZSBhbiB4dGVybSBidXQgZGlkbid0IGhhdmUgYSBuYW1lIHRoYXQgaXMKK3JlY29nbml6ZWQsIHRoZSB3aW5kb3cgdGl0bGUgd291bGQgbm90IGFsd2F5cyBiZSBzZXQuCisKK1doZW4gc3ludGF4IGhpZ2hsaWdodGluZyBpcyBvZmYgIjpoYXJkY29weSIgY291bGQgc3RpbGwgYXR0ZW1wdCBwcmludGluZworY29sb3JzLgorCitDcmFzaCB3aGVuIHVzaW5nICI6Y2F0Y2giIHdpdGhvdXQgYW4gYXJndW1lbnQuICAoU2VydmF0aXVzIEJyYW5kdCkKKworV2luMzI6ICI6biAjIiBkb3VibGVkIHRoZSBiYWNrc2xhc2hlcy4KKworRml4ZWQgQXJhYmljIHNoYXBpbmcgZm9yIHRoZSBjb21tYW5kIGxpbmUuIChOYWRpbSBTaGFpa2xpKQorCitBdm9pZCBzcGxpdHRpbmcgdXAgYSBzdHJpbmcgZGlzcGxheWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgaW50byBpbmRpdmlkdWFsCitjaGFyYWN0ZXJzLCBpdCBicmVha3MgQXJhYmljIHNoYXBpbmcuCisKK1VwZGF0ZWQgQ3lnd2luIGFuZCBNaW5nVyBtYWtlZmlsZXMgdG8gdXNlIG1vcmUgZGVwZW5kZW5jaWVzLiAoRGFuIFNoYXJwKQorCisyaHRtbC52aW0gZGlkbid0IHdvcmsgd2l0aCAnbm9tYWdpYycgc2V0LgorCitXaGVuIGEgbG9jYWwgYXJndW1lbnQgbGlzdCBpcyB1c2VkIGFuZCBkb2luZyAiOm9ubHkiIFZpbSBjb3VsZCBjcmFzaCBsYXRlci4KKyhNdXJhb2thIFRhcm8pCisKK1doZW4gdXNpbmcgIiVQIiBpbiAnc3RhdHVzbGluZScgYW5kIHRoZSBmaWxsY2hhciBpcyAiLSIsIGEgcGVyY2VudGFnZSBvZiAzJQorY291bGQgcmVzdWx0IGluICItMyUiLiAgQWxzbyBhdm9pZCBjaGFuZ2luZyBhIHNwYWNlIGluc2lkZSBhIGZpbGVuYW1lIHRvIHRoZQorZmlsbCBjaGFyYWN0ZXIuCisKK01Td2luOiBIYW5kbGluZyBvZiBiYWNrc2xhc2hlcyBhbmQgZG91YmxlIHF1b3RlcyBmb3IgY29tbWFuZCBsaW5lIGFyZ3VtZW50cword2FzIG5vdCBsaWtlIHdoYXQgb3RoZXIgYXBwbGljYXRpb25zIGRvLiAgKFdhbHRlciBCcmlzY29lKQorCitUZXN0MzIgc29tZXRpbWVzIGRpZG4ndCB3b3JrLCBiZWNhdXNlIHRlc3QxMS5vdXQgd2FzIHdyaXR0ZW4gYXMgVEVTVDExLk9VVC4KKworQXZvaWQgcG9pbnRlciBjb252ZXJzaW9ucyB3YXJuaW5ncyBmb3IgQm9ybGFuZCBDIDUuNSBpbiBkb3NpbnN0LmMgYW5kCit1bmluc3RhbC5jLgorCitNb3JlIGltcHJvdmVtZW50cyBmb3IgTWFrZV9iYzMubWFrIGZpbGUuIChXYWx0ZXIgQnJpc2NvZSkKKworV2hlbiAiOnN5biBzeW5jIGxpbmVicmVha3M9MSIgaXMgdXNlZCwgZWRpdGluZyB0aGUgZmlyc3QgbGluZSBjYXVzZWQgYSByZWRyYXcKK29mIHRoZSB3aG9sZSBzY3JlZW4uCisKK01ha2luZyB0cmFuc2xhdGVkIG1lc3NhZ2VzIGRpZG4ndCB3b3JrLCBpZl9wZXJsLnhzIHdhc24ndCBmb3VuZC4gKFZsYWQKK1NhbmRyaW5pKQorCitNb3RpZiBhbmQgQXRoZW5hOiBtb3ZpbmcgVmltIHRvIHRoZSBmb3JlZ3JvdW5kIGRpZG4ndCB1bmljb25pZnkgaXQuICBVc2UKK1hNYXBSYWlzZWQoKSBpbnN0ZWFkIG9mIFhSYWlzZVdpbmRvdygpLiAoU3Jpa2FudGggU2Fua2FyYW4pCisKK1doZW4gdXNpbmcgIjpwdGFnIiBpbiBhIHdpbmRvdyB3aGVyZSAnc2Nyb2xsYmluZCcgaXMgc2V0IHRoZSBwcmV2aWV3IHdpbmRvdword291bGQgYWxzbyBoYXZlICdzY3JvbGxiaW5kJyBzZXQuICBBbHNvIHJlc2V0ICdmb2xkY29sdW1uJyBhbmQgJ2RpZmYnLgorCitWYXJpb3VzIGNvbW1hbmRzIHRoYXQgc3BsaXQgYSB3aW5kb3cgdG9vayBvdmVyICdzY3JvbGxiaW5kJywgd2hpY2ggaXMgaGFyZGx5CitldmVyIGRlc2lyZWQuICBFc3AuIGZvciAicToiIGFuZCAiOmNvcGVuIi4gIE1vc3RseSByZXNldCAnc2Nyb2xsYmluZCcgd2hlbgorc3BsaXR0aW5nIGEgd2luZG93LgorCitXaGVuICdzaGVsbHNsYXNoJyBpcyBzZXQgaW4gdGhlIHZpbXJjIGZpbGUgdGhlIGZpcnN0IGVudHJ5IG9mICI6c2NyaXB0bmFtZXMiCit3b3VsZCBzdGlsbCBoYXZlIGJhY2tzbGFzaGVzLiAgRW50cmllcyBpbiB0aGUgcXVpY2tmaXggbGlzdCBjb3VsZCBhbHNvIGhhdmUKK3dyb25nIChiYWNrKXNsYXNoZXMuCisKK1dpbjMyOiBwcmludGVyIGRpYWxvZyB0ZXh0cyB3ZXJlIG5vdCB0cmFuc2xhdGVkLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorCitXaGVuIHVzaW5nIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgd2l0aCBhIEtfU1BFQ0lBTCBieXRlIG9yIGEgc3BlY2lhbCBrZXkgY29kZQord2l0aCAiLS1yZW1vdGUtc2VuZCIgdGhlIHJlY2VpdmVkIGJ5dGUgc2VxdWVuY2Ugd2FzIG1hbmdsZWQuICBQdXQgaXQgaW4gdGhlCit0eXBlYWhlYWQgYnVmZmVyIGluc3RlYWQgb2YgdGhlIGlucHV0IGJ1ZmZlci4KKworV2luMzI6IFRoZSBjdXJzb3IgcG9zaXRpb24gd2FzIGluY29ycmVjdCBhZnRlciBjaGFuZ2luZyBjdXJzb3Igc2hhcGUuCisoWWFzdWhpcm8gTWF0c3Vtb3RvKS4KKworV2luMzI6IFdoZW4gJ2VuY29kaW5nJyBpcyBub3QgdGhlIGN1cnJlbnQgY29kZXBhZ2UgdGhlIHRpdGxlIGNvdWxkIG5vdCBiZSBzZXQKK3RvIG5vbi1hc2NpaSBjaGFyYWN0ZXJzLgorCisidmltIC1kIHNjcDovL21hY2hpbmUvZmlsZTEgc2NwOi8vbWFjaGluZS9maWxlMiIgZGlkIG5vdCB3b3JrLCB0aGVyZSB3YXMgb25seQorb25lIHdpbmRvdy4gIEZpeGVkIHRoZSBuZXRydyBwbHVnaW4gbm90IHRvIHdpcGUgb3V0IHRoZSBidWZmZXIgaWYgaXQgaXMKK2Rpc3BsYXllZCBpbiBvdGhlciB3aW5kb3dzLgorCisiLyQiIGNhdXNlZCAiZSIgaW4gbGFzdCBjb2x1bW4gb2Ygc2NyZWVuIHRvIGRpc2FwcGVhciwgYSBoaWdobGlnaHRlZCBibGFuayB3YXMKK2Rpc3BsYXllZCBpbnN0ZWFkLgorCisiOnMvICpcemVcbi8vZSIgcmVtb3ZlZCB0aGUgbGluZSBicmVhayBhbmQgaW50cm9kdWNlZCBhcmJpdHJhcnkgdGV4dC4gIFdhcwordXNpbmcgdGhlIGxpbmUgY291bnQgaW5jbHVkaW5nIHdoYXQgbWF0Y2hlZCBhZnRlciB0aGUgIlx6ZSIuCisKK1VzaW5nIHRoZSAiYyIgZmxhZyB3aXRoICI6cyIgY2hhbmdlZCB0aGUgYmVoYXZpb3Igd2hlbiBhIGxpbmUgYnJlYWsgaXMKK3JlcGxhY2VkIGFuZCAiXEA8PSIgaXMgdXNlZC4gIFdpdGhvdXQgImMiIGEgZm9sbG93aW5nIG1hdGNoIHdhcyBub3QgZm91bmQuCisKKyI6JXMvXHZBQDw9XG5CQD0vL2djZSIgZ290IHN0dWNrIG9uICJBXG5CIiB3aGVuIGVudGVyaW5nICJuIi4KKworVk1TOiBhZGQgSEFWRV9TVFJGVElNRSBpbiB0aGUgY29uZmlnIGZpbGUuIChab2x0YW4gQXJwYWRmZnkpCisKK1doZW4gYSBkZWxldGUgcHJvbXB0cyBpZiBhIGRlbGV0ZSBzaG91bGQgY29udGludWUgd2hlbiB5YW5raW5nIGlzIG5vdAorcG9zc2libGUsIHJlc3RvcmUgbXNnX3NpbGVudCBhZnRlcndhcmRzLgorCisiOnNpZ24iIGRpZCBub3QgY29tcGxhaW4gYWJvdXQgYSBtaXNzaW5nIGFyZ3VtZW50LgorCitXaGVuIGFkZGluZyBvciBkZWxldGluZyBhIHNpZ24gJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcgY291bGQgZGlzYXBwZWFyLgorVXNlIHRoZSBnZW5lcmljIGZ1bmN0aW9ucyBmb3IgdXBkYXRpbmcgc2lnbnMuCisKK09uIE1TLVdpbmRvd3MgTlQsIDJLIGFuZCBYUCBkb24ndCB1c2UgY29tbWFuZC5jb20gYnV0IGNtZC5leGUgZm9yIHRlc3RpbmcuCitNYWtlcyB0aGUgdGVzdHMgd29yayBvbiBtb3JlIHN5c3RlbXMuCisKK0luIHRoZSBET1MgdGVzdHMgZG9uJ3QgY3JlYXRlICIvdG1wIiB0byBhdm9pZCBhbiBlcnJvci4KKworTWFjIGNsYXNzaWM6IFByb2JsZW1zIHdpdGggcmVhZGluZyBmaWxlcyB3aXRoIENSIHZzIENSL0xGLiAgUmVseSBvbiB0aGUKK2xpYnJhcnkgdmVyc2lvbiBvZiBmZ2V0cygpIHRvIHdvcmsgY29ycmVjdGx5IGZvciBNZXRyb3dlcmtzIDIuMi4gKEF4ZWwKK0tpZWxob3JuKQorCitXaGVuIHR5cGluZyBhIHBhc3N3b3JkIGEgIioiIHdhcyBzaG93biBmb3IgZWFjaCBieXRlIGluc3RlYWQgb2YgZm9yIGVhY2gKK2NoYXJhY3Rlci4gIEFkZGVkIG11bHRpLWJ5dGUgaGFuZGxpbmcgdG8gZGlzcGxheWluZyB0aGUgc3RhcnMuIChZYXN1aGlybworTWF0c3Vtb3RvKQorCitXaGVuIHVzaW5nIFBlcmwgNS42IGFjY2Vzc2luZyAkY3VyYnVmIGRvZXNuJ3Qgd29yay4gIEFkZCBhbiAjaWZkZWYgdG8gdXNlCitkaWZmZXJlbnQgY29kZSBmb3IgNS42IGFuZCA1LjguICAoRGFuIFNoYXJwKQorCitNaW5nVyBhbmQgQ3lnd2luOiBEb24ndCBzdHJpcCB0aGUgZGVidWcgZXhlY3V0YWJsZS4gKERhbiBTaGFycCkKKworQW4gYXNzaWdubWVudCB0byBhIHZhcmlhYmxlIHdpdGggY3VybGllcyB0aGF0IGluY2x1ZGVzICI9PSIgZG9lc24ndCB3b3JrLgorU2tpcCBvdmVyIHRoZSBjdXJsaWVzIGJlZm9yZSBzZWFyY2hpbmcgZm9yIGFuICI9Ii4gKFZpbmNlIE5lZ3JpKQorCitXaGVuIGNhbmNlbGxpbmcgdGhlIHNlbGVjdGlvbiBvZiBhbHRlcm5hdGUgbWF0Y2hpbmcgdGFncyB0aGUgdGFnIHN0YWNrIGluZGV4Citjb3VsZCBiZSBhZHZhbmNlZCB0b28gZmFyLCByZXN1bHRpbmcgaW4gYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHVzaW5nIENUUkwtVC4KKworCitQYXRjaCA2LjEuMDAxCitQcm9ibGVtOiAgICBXaGVuIGZvcm1hdHRpbmcgVVRGLTggdGV4dCBpdCBtaWdodCBiZSB3cmFwcGVkIGF0IGEgc3BhY2UgdGhhdCBpcworCSAgICBmb2xsb3dlZCBieSBhIGNvbXBvc2luZyBjaGFyYWN0ZXIuIChSYXBoYWVsIEZpbmtlbCkKKwkgICAgQWxzbyBjb3JyZWN0IGEgZGlzcGxheSBlcnJvciBmb3IgcmVtb3ZpbmcgYSBjb21wb3NpbmcgY2hhciBvbiB0b3AKKwkgICAgb2YgYSBzcGFjZS4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIGNvbXBvc2luZyBjaGFyYWN0ZXIgb24gYSBzcGFjZS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL21pc2MxLmMsIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuMDAyIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBhZnRlciBhICI6cG9wdXAiIGNvbW1hbmQgdGhlIG1vdXNlIHBvaW50ZXIgc3RheXMgaGlkZGVuLgorU29sdXRpb246ICAgVW5oaWRlIHRoZSBtb3VzZSBwb2ludGVyIGJlZm9yZSBzaG93aW5nIHRoZSBtZW51LgorRmlsZXM6CSAgICBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMS4wMDMKK1Byb2JsZW06ICAgIFdoZW4gJ2xhc3RzdGF0dXMnIGlzIHplcm8gYW5kIHRoZXJlIGlzIGEgdmVydGljYWwgc3BsaXQsIHRoZQorCSAgICB2ZXJ0aWNhbCBzZXBhcmF0b3IgaXMgZHJhd24gaW4gdGhlIGNvbW1hbmQgbGluZS4gKFNyaWthbnQKKwkgICAgU2Fua2FyYW4pCitTb2x1dGlvbjogICBEb24ndCBkcmF3IHRoZSB2ZXJ0aWNhbCBzZXBhcmF0b3Igd2hlcmUgdGhlcmUgaXMgbm8gc3RhdHVzbGluZS4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4wMDQKK1Byb2JsZW06ICAgIFVuaWNvZGUgMy4yIGNoYW5nZXMgd2lkdGggYW5kIGNvbXBvc2luZyBvZiBhIGZldyBjaGFyYWN0ZXJzLgorCSAgICAoTWFya3VzIEt1aG4pCitTb2x1dGlvbjogICBBZGp1c3QgdGhlIFVuaWNvZGUgZnVuY3Rpb25zIGZvciB0aGUgY2hhcmFjdGVyIHdpZHRoIGFuZCBjb21wb3NpbmcKKwkgICAgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4xLjAwNQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBtb3JlIHRoYW4gNTAgaXRlbXMgaW4gJ3N0YXR1c2xpbmUnIFZpbSBtaWdodCBjcmFzaC4KKwkgICAgKFN0ZXZlIEhhbGwpCitTb2x1dGlvbjogICBJbmNyZW1lbnQgaXRlbWNudCBpbiBjaGVja19zdGxfb3B0aW9uKCkuIChGbGVtbWluZyBNYWRzZW4pCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjEuMDA2CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICJQIiBpbiBWaXN1YWwgbW9kZSB0byBwdXQgbGluZXdpc2Ugc2VsZWN0ZWQgdGV4dCwgdGhlCisJICAgIHdyb25nIHRleHQgaXMgZGVsZXRlZC4gKEpha3ViIFR1cnNraSkKK1NvbHV0aW9uOiAgIFB1dCB0aGUgdGV4dCBiZWZvcmUgdGhlIFZpc3VhbCBhcmVhIGFuZCBjb3JyZWN0IHRoZSB0ZXh0IHRvIGJlCisJICAgIGRlbGV0ZWQgZm9yIHRoZSBpbnNlcnRlZCBsaW5lcy4KKwkgICAgQWxzbyBmaXggdGhhdCAicCIgb2YgbGluZXdpc2UgdGV4dCBpbiBWaXN1YWwgYmxvY2sgbW9kZSBkb2Vzbid0CisJICAgIHdvcmsgY29ycmVjdGx5LgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHNyYy9vcHMuYworCitQYXRjaCA2LjEuMDA3CitQcm9ibGVtOiAgICBVc2luZyAiOmZpbGV0eXBlIHBsdWdpbiBvZmYiIHdoZW4gZmlsZXR5cGUgcGx1Z2lucyB3ZXJlIG5ldmVyCisJICAgIGVuYWJsZWQgY2F1c2VzIGFuIGVycm9yIG1lc3NhZ2UuIChZaXUgV2luZykKK1NvbHV0aW9uOiAgIFVzZSAiOnNpbGVudCEiIHRvIGF2b2lkIHRoZSBlcnJvciBtZXNzYWdlLgorRmlsZXM6CSAgICBydW50aW1lL2Z0cGx1Z29mLnZpbQorCitQYXRjaCA2LjEuMDA4CitQcm9ibGVtOiAgICBUaGUgIiUiIGNvbW1hbmQgZG9lc24ndCBpZ25vcmUgXCIgaW5zaWRlIGEgc3RyaW5nLCBpdCdzIHNlZW4gYXMKKwkgICAgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiAoS2VuIENsYXJrKQorU29sdXRpb246ICAgU2tpcCBhIGRvdWJsZSBxdW90ZSBwcmVjZWRlZCBieSBhbiBvZGQgbnVtYmVyIG9mIGJhY2tzbGFzaGVzLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4xLjAwOQorUHJvYmxlbTogICAgVmltIGNyYXNoZXMgd2hlbiB1c2luZyBhIGh1Z2UgbnVtYmVyIGZvciB0aGUgbWF4d2lkIHZhbHVlIGluIGEKKwkgICAgc3RhdHVzbGluZS4gKFJvYmVydCBNLiBOb3dvdG5pYWspCitTb2x1dGlvbjogICBDaGVjayBmb3IgYW4gb3ZlcmZsb3cgdGhhdCBtYWtlcyBtYXh3aWQgbmVnYXRpdmUuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuMDEwCitQcm9ibGVtOiAgICBTZWFyY2hpbmcgYmFja3dhcmRzIGZvciBhIHF1ZXN0aW9uIG1hcmsgd2l0aCAiP1w/IiBkb2Vzbid0IHdvcmsuCisJICAgIChBbGFuIElzYWFjKSAgU2FtZSBwcm9ibGVtIGluICI6cz9cPz8iIGFuZCAiOmc/XD8/Ii4KK1NvbHV0aW9uOiAgIENoYW5nZSB0aGUgIlw/IiBpbiBhIHBhdHRlcm4gdG8gIj8iIHdoZW4gdXNpbmcgIj8iIGFzIGRlbGltaXRlci4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9wcm90by9yZWdleHAucHJvLCBzcmMvcmVnZXhwLmMsCisJICAgIHNyYy9zZWFyY2guYywgc3JjL3N5bnRheC5jLCBzcmMvdGFnLmMKKworUGF0Y2ggNi4xLjAxMQorUHJvYmxlbTogICAgWElNOiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdoZW4gJ251bWJlcicgaXMgc2V0LiAgQWxzbywgYSBmb2N1cworCSAgICBwcm9ibGVtIHdoZW4gc2VsZWN0aW5nIGNhbmRpZGF0ZXMuCitTb2x1dGlvbjogICBGaXggdGhlIFhJTSBwcm9ibGVtcy4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMsIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuMDEyCitQcm9ibGVtOiAgICBBIHN5c3RlbSgpIGNhbGwgbWlnaHQgZmFpbCBpZiBmcmVhZCgpIGRvZXMgQ1ItTEYgdG8gTEYKKwkgICAgdHJhbnNsYXRpb24uCitTb2x1dGlvbjogICBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpbiBiaW5hcnkgbW9kZS4gKFBhdm9sIEh1aGFzKQorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA2LjEuMDEzCitQcm9ibGVtOiAgICBXaW4zMjogVGhlIGRlZmF1bHQgZm9yICdwcmludGV4cHInIGRvZXNuJ3Qgd29yayB3aGVuIHRoZXJlIGFyZQorCSAgICBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gJ3ByaW50ZGV2aWNlJy4KK1NvbHV0aW9uOiAgIEFkZCBkb3VibGUgcXVvdGVzIGFyb3VuZCB0aGUgZGV2aWNlIG5hbWUuIChNaWtlIFdpbGxpYW1zKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb24udHh0LCBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4xLjAxNAorUHJvYmxlbTogICAgQW4gb3BlcmF0b3IgbGlrZSAiciIgdXNlZCBpbiBWaXN1YWwgYmxvY2sgbW9kZSBkb2Vzbid0IHVzZQorCSAgICAndmlydHVhbGVkaXQnIHdoZW4gaXQncyBzZXQgdG8gImJsb2NrIi4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciAndmlydHVhbGVkaXQnIGJlaW5nIGFjdGl2ZSBpbiBWaXN1YWwgYmxvY2sgbW9kZSB3aGVuIHRoZQorCSAgICBvcGVyYXRvciB3YXMgc3RhcnRlZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9taXNjMi5jLCBzcmMvbm9ybWFsLmMsCisJICAgIHNyYy9vcHMuYywgc3JjL3VuZG8uYworCitQYXRjaCA2LjEuMDE1CitQcm9ibGVtOiAgICBBZnRlciBwYXRjaCA2LjEuMDE0IGNhbid0IGNvbXBpbGUgd2l0aCB0aW55IGZlYXR1cmVzLiAoQ2hyaXN0aWFuCisJICAgIEouIFJvYmluc29uKQorU29sdXRpb246ICAgQWRkIHRoZSBtaXNzaW5nIGRlZmluZSBvZiB2aXJ0dWFsX29wLgorRmlsZXM6CSAgICBzcmMvdmltLmgKKworUGF0Y2ggNi4xLjAxNiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogT3V0cHV0dGluZyBIZWJyZXcgb3IgQXJhYmljIHRleHQgbWlnaHQgaGF2ZSBhIHByb2JsZW0gd2l0aAorCSAgICByZXZlcnNpbmcuCitTb2x1dGlvbjogICBSZXBsYWNlIHRoZSBSZXZPdXQoKSBmdW5jdGlvbiB3aXRoIEVUT19JR05PUkVMQU5HVUFHRS4gKFJvbiBBYXJvbikKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjEuMDE3CitQcm9ibGVtOiAgICBDeWd3aW46IEFmdGVyIHBhdGNoIDYuMS4wMTIgU3RpbGwgZG9lc24ndCBkbyBiaW5hcnkgZmlsZSBJL08uCisJICAgIChQYXZvbCBKdWhhcykKK1NvbHV0aW9uOiAgIERlZmluZSBCSU5BUllfRklMRV9JTyBmb3IgQ3lnd2luLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5oCisKK1BhdGNoIDYuMS4wMTgKK1Byb2JsZW06ICAgIEVycm9yIG1lc3NhZ2Ugd2hlbiB1c2luZyBjdGVybSBoaWdobGlnaHRpbmcuIChMZW9uYXJkbyBEaSBMZWxsYSkKK1NvbHV0aW9uOiAgIFJlbW92ZSBhIGJhY2tzbGFzaCBiZWZvcmUgYSBxdWVzdGlvbiBtYXJrLgorRmlsZXM6CSAgICBydW50aW1lL3N5bnRheC9jdGVybS52aW0KKworUGF0Y2ggNi4xLjAxOSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogRmlsZSBuYW1lIGlzIG1lc3NlZCB1cCB3aGVuIGVkaXRpbmcganVzdCBhIGRyaXZlIG5hbWUuCisJICAgIChXYWx0ZXIgQnJpc2NvZSkKK1NvbHV0aW9uOiAgIEFwcGVuZCBhIE5VTCBhZnRlciB0aGUgZHJpdmUgbmFtZS4gKFZpbmNlIE5lZ3JpKQorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjEuMDIwCitQcm9ibGVtOiAgICBjb2woIic+IikgcmV0dXJucyBhIGh1Z2UgbnVtYmVyIGFmdGVyIHVzaW5nIFZpc3VhbCBsaW5lIG1vZGUuCitTb2x1dGlvbjogICBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbGluZSBpbnN0ZWFkLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4wMjEgKGRlcGVuZHMgb24gcGF0Y2ggNi4xLjAwOSkKK1Byb2JsZW06ICAgIFZpbSBjcmFzaGVzIHdoZW4gdXNpbmcgYSBodWdlIG51bWJlciBmb3IgdGhlIG1pbndpZCB2YWx1ZSBpbiBhCisJICAgIHN0YXR1c2xpbmUuIChSb2JlcnQgTS4gTm93b3RuaWFrKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGFuIG92ZXJmbG93IHRoYXQgbWFrZXMgbWlud2lkIG5lZ2F0aXZlLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4xLjAyMgorUHJvYmxlbTogICAgR3JhYmJpbmcgdGhlIHN0YXR1cyBsaW5lIGFib3ZlIHRoZSBjb21tYW5kLWxpbmUgd2luZG93IHdvcmtzIGxpa2UKKwkgICAgdGhlIGJvdHRvbSBzdGF0dXMgbGluZSB3YXMgZ3JhYmJlZC4gKEppbSBCYXR0bGUpCitTb2x1dGlvbjogICBNYWtlIGl0IHBvc3NpYmxlIHRvIGdyYWIgdGhlIHN0YXR1cyBsaW5lIGFib3ZlIHRoZSBjb21tYW5kLWxpbmUKKwkgICAgd2luZG93LCBzbyB0aGF0IGl0IGNhbiBiZSByZXNpemVkLgorRmlsZXM6CSAgICBzcmMvdWkuYworCitQYXRjaCA2LjEuMDIzIChleHRyYSkKK1Byb2JsZW06ICAgIFZNUzogcnVubmluZyB0ZXN0cyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuCitTb2x1dGlvbjogICBBZGp1c3QgdGhlIG1ha2VmaWxlLiAoWm9sdGFuIEFycGFkZmZ5KQorRmlsZXM6CSAgICBzcmMvdGVzdGRpci9NYWtlX3Ztcy5tbXMKKworUGF0Y2ggNi4xLjAyNAorUHJvYmxlbTogICAgV2hlbiBoZWFkZXIgZmlsZXMgdXNlIGEgbmV3IHN5bnRheCBmb3IgZGVjbGFyaW5nIGZ1bmN0aW9ucywgVmltCisJICAgIGNhbid0IGZpZ3VyZSBvdXQgbWlzc2luZyBwcm90b3R5cGVzIHByb3Blcmx5LgorU29sdXRpb246ICAgQWNjZXB0IGJyYWNlcyBhcm91bmQgYSBmdW5jdGlvbiBuYW1lLiAoTS4gV2FybmVyIExvc2gpCitGaWxlczoJICAgIHNyYy9vc2RlZi5zaAorCitQYXRjaCA2LjEuMDI1CitQcm9ibGVtOiAgICBGaXZlIG1lc3NhZ2VzIGZvciAidmltIC0taGVscCIgZG9uJ3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWwuIChWbGFkCisJICAgIFNhbmRyaW5pKQorU29sdXRpb246ICAgTWFrZSB0aGUgbWVzc2FnZXMgY29uc2lzdGVudC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjEuMDI2CitQcm9ibGVtOiAgICAqLnBhdGNoIGZpbGVzIGFyZSBub3QgcmVjb2duaXplZCBhcyBkaWZmIGZpbGVzLiAgSW4gYSBzY3JpcHQgYQorCSAgICAiVkFSPXZhbCIgYXJndW1lbnQgYWZ0ZXIgImVudiIgaXNuJ3QgaWdub3JlZC4gIFBIUCBzY3JpcHRzIGFyZSBub3QKKwkgICAgcmVjb2duaXplZC4KK1NvbHV0aW9uOiAgIEFkZCAqLnBhdGNoIGZvciBkaWZmIGZpbGV0eXBlcy4gIElnbm9yZSAiVkFSPXZhbCIuICBSZWNvZ25pemUgUEhQCisJICAgIHNjcmlwdHMuIChSb21hbiBOZXVoYXVzZXIpCitGaWxlczoJICAgIHJ1bnRpbWUvZmlsZXR5cGUudmltLCBydW50aW1lL3NjcmlwdHMudmltCisKK1BhdGNoIDYuMS4wMjcKK1Byb2JsZW06ICAgIFdoZW4gJ2ZvbGRjb2x1bW4nIGlzIG5vbi16ZXJvLCBhIHNwZWNpYWwgY2hhcmFjdGVyIHRoYXQgd3JhcHMgdG8KKwkgICAgdGhlIG5leHQgbGluZSBkaXN0dXJicyB0aGUgZm9sZGNvbHVtbiBoaWdobGlnaHRpbmcuICAoWWFzdWhpcm8KKwkgICAgTWF0c3Vtb3RvKQorU29sdXRpb246ICAgT25seSB1c2UgdGhlIHNwZWNpYWwgaGlnaGxpZ2h0aW5nIHdoZW4gZHJhd2luZyB0ZXh0IGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuMDI4CitQcm9ibGVtOiAgICBDbGllbnQtc2VydmVyOiBXaGVuIGEgLS1yZW1vdGUtZXhwciBmYWlscywgVmltIHN0aWxsIGV4aXRzIHdpdGgKKwkgICAgc3RhdHVzIHplcm8uCitTb2x1dGlvbjogICBFeGl0IFZpbSB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIHRvIGluZGljYXRlIHRoZSAtLXJlbW90ZS1leHByCisJICAgIGZhaWxlZC4gKFRob21hcyBTY290dCBVcmJhbikKK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjEuMDI5CitQcm9ibGVtOiAgICBXaGVuICdlbmNvZGluZycgaXMgYW4gOC1iaXQgZW5jb2Rpbmcgb3RoZXIgdGhhbiAibGF0aW4xIiwgZWRpdGluZworCSAgICBhIHV0Zi04IG9yIG90aGVyIFVuaWNvZGUgZmlsZSB1c2VzIHRoZSB3cm9uZyBjb252ZXJzaW9uLiAoSmFuCisJICAgIEZlZGFrKQorU29sdXRpb246ICAgRG9uJ3QgdXNlIFVuaWNvZGUgdG8gbGF0aW4xIGNvbnZlcnNpb24gZm9yIDgtYml0IGVuY29kaW5ncyBvdGhlcgorCSAgICB0aGFuICJsYXRpbjEiLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjAzMAorUHJvYmxlbTogICAgV2hlbiBDVFJMLU4gaXMgbWFwcGVkIGluIEluc2VydCBtb2RlLCBpdCBpcyBhbHNvIG1hcHBlZCBhZnRlcgorCSAgICBDVFJMLVggQ1RSTC1OLCB3aGlsZSBpdCBpcyBub3QgbWFwcGVkIGFmdGVyIENUUkwtWCBDVFJMLUYuCisJICAgIChLb250cmEgR2VyZ2VseSkKK1NvbHV0aW9uOiAgIERvbid0IG1hcCBDVFJMLU4gYWZ0ZXIgQ1RSTC1YIENUUkwtTi4gIFNhbWUgZm9yIENUUkwtUC4KK0ZpbGVzOgkgICAgc3JjL2dldGNoYXIuYworCitQYXRjaCA2LjEuMDMxCitQcm9ibGVtOiAgICBDeWd3aW46IFh4ZCBjb3VsZCByZWFkIGEgZmlsZSBpbiB0ZXh0IG1vZGUgaW50ZWFkIG9mIGJpbmFyeSBtb2RlLgorU29sdXRpb246ICAgVXNlICJyYiIgb3IgInJ0IiB3aGVuIG5lZWRlZC4gKFBhdm9sIEp1aGFzKQorRmlsZXM6CSAgICBzcmMveHhkL3h4ZC5jCisKK1BhdGNoIDYuMS4wMzIKK1Byb2JsZW06ICAgIENhbid0IHNwZWNpZnkgYSBxdWlja2ZpeCBmaWxlIHdpdGhvdXQganVtcGluZyB0byB0aGUgZmlyc3QgZXJyb3IuCitTb2x1dGlvbjogICBBZGQgdGhlICI6Y2dldGZpbGUiIGNvbW1hbmQuIChZZWdhcHBhbiBMYWtzaG1hbmFuKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9pbmRleC50eHQsIHJ1bnRpbWUvZG9jL3F1aWNrZml4LnR4dCwgc3JjL2V4X2NtZHMuaCwKKwkgICAgc3JjL3F1aWNrZml4LmMKKworUGF0Y2ggNi4xLjAzMworUHJvYmxlbTogICAgR1VJOiBXaGVuIHRoZSBzZWxlY3Rpb24gaXMgbG9zdCBhbmQgdGhlIFZpc3VhbCBoaWdobGlnaHRpbmcgaXMKKwkgICAgY2hhbmdlZCB0byB1bmRlcmxpbmluZywgdGhlIGN1cnNvciBpcyBsZWZ0IGluIGEgZGlmZmVyZW50CisJICAgIHBvc2l0aW9uLiAoQ2hyaXN0aWFuIE1pY2hvbikKK1NvbHV0aW9uOiAgIFVwZGF0ZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGFmdGVyIHJlZHJhd2luZyB0aGUgc2VsZWN0aW9uLgorRmlsZXM6CSAgICBzcmMvdWkuYworCitQYXRjaCA2LjEuMDM0CitQcm9ibGVtOiAgICBBIENWUyBkaWZmIGZpbGUgaXNuJ3QgcmVjb2duaXplZCBhcyBkaWZmIGZpbGV0eXBlLgorU29sdXRpb246ICAgU2tpcCBsaW5lcyBzdGFydGluZyB3aXRoICI/ICIgYmVmb3JlIGNoZWNraW5nIGZvciBhbiAiSW5kZXg6IiBsaW5lLgorRmlsZXM6CSAgICBydW50aW1lL3NjcmlwdHMudmltCisKK1BhdGNoIDYuMS4wMzUgKGV4dHJhLCBkZXBlbmRzIG9uIDYuMS4wMTYpCitQcm9ibGVtOiAgICBXaW4zMjogT3V0cHV0dGluZyBIZWJyZXcgb3IgQXJhYmljIHRleHQgbWlnaHQgaGF2ZSBhIHByb2JsZW0gd2l0aAorCSAgICByZXZlcnNpbmcgb24gTVMtV2luZG93cyA5NS85OC9NRS4KK1NvbHV0aW9uOiAgIFJlc3RvcmUgdGhlIFJldk91dCgpIGZ1bmN0aW9uIGFuZCB1c2UgaXQgaW4gc3BlY2lmaWMgc2l0dWF0aW9ucworCSAgICBvbmx5LiAoUm9uIEFhcm9uKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMS4wMzYKK1Byb2JsZW06ICAgIFRoaXMgY29tbWFuZCBtYXkgY2F1c2UgYSBjcmFzaDogIjp2Ly4vLC8vLWoiLiAoUmFsZiBBcmVucykKK1NvbHV0aW9uOiAgIENvbXB1dGUgdGhlIHJpZ2h0IGxlbmd0aCBvZiB0aGUgcmVnZXhwIHdoZW4gaXQncyBlbXB0eS4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuMS4wMzcKK1Byb2JsZW06ICAgIFdoZW4gJ2xhenlyZWRyYXcnIGlzIHNldCwgcHJlc3NpbmcgInEiIGF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0CisJICAgIGNhdXNlcyBhbiBpbmNvbXBsZXRlIHJlZHJhdyBhbmQgdGhlIGN1cnNvciBpc24ndCBwb3NpdGlvbmVkLgorCSAgICAoTHVib21pciBIb3N0KQorU29sdXRpb246ICAgT3ZlcnJ1bGUgJ2xhenlyZWRyYXcnIHdoZW4gZG9fcmVkcmF3IGlzIHNldC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4wMzgKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6IFdoZW4gYSAiOnMiIGNvbW1hbmQgY29udGFpbnMgYSBtdWx0aS1ieXRlIGNoYXJhY3RlcgorCSAgICB3aGVyZSB0aGUgdHJhaWwgYnl0ZSBpcyAnficgdGhlIHRleHQgaXMgbWVzc2VkIHVwLgorU29sdXRpb246ICAgUHJvcGVybHkgc2tpcCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgaW4gcmVndGlsZGUoKSAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4xLjAzOQorUHJvYmxlbTogICAgV2hlbiBmb2xkcyBhcmUgZGVmaW5lZCBhbmQgdGhlIGZpbGUgaXMgY2hhbmdlZCBvdXRzaWRlIG9mIFZpbSwKKwkgICAgcmVsb2FkaW5nIHRoZSBmaWxlIGRvZXNuJ3QgdXBkYXRlIHRoZSBmb2xkcy4gKEFuZGVycworCSAgICBTY2hhY2stTmllbHNlbikKK1NvbHV0aW9uOiAgIFJlY29tcHV0ZSB0aGUgZm9sZHMgYWZ0ZXIgcmVsb2FkaW5nIHRoZSBmaWxlLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjA0MAorUHJvYmxlbTogICAgV2hlbiBjaGFuZ2luZyBkaXJlY3RvcnkgZm9yIGV4cGFuZGluZyBhIGZpbGUgbmFtZSBmYWlscyB0aGVyZSBpcworCSAgICBubyBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgR2l2ZSBhbiBlcnJvciBtZXNzYWdlIGZvciB0aGlzIHNpdHVhdGlvbi4gIERvbid0IGNoYW5nZSBkaXJlY3RvcnkKKwkgICAgaWYgd2UgY2FuJ3QgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBkaXJlY3RvcnkuCitGaWxlczoJICAgIHNyYy9kaWZmLmMsIHNyYy9leF9kb2NtZC5jLCBzcmMvZ2xvYmFscy5oLCBzcmMvbWlzYzEuYywKKwkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuMDQxCitQcm9ibGVtOiAgICAiOm1rdmltcmMiIGRvZXNuJ3QgaGFuZGxlIGEgbWFwcGluZyB0aGF0IGhhcyBhIGxlYWRpbmcgc3BhY2UgaW4KKwkgICAgdGhlIHJocy4gKERhdnlkIE9uZHJlamtvKQorU29sdXRpb246ICAgSW5zZXJ0IGEgQ1RSTC1WIGJlZm9yZSB0aGUgbGVhZGluZyBzcGFjZS4gIEFsc28gZGlzcGxheSBsZWFkaW5nCisJICAgIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSBpbiA8PiBmb3JtLgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jLCBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMS4wNDIKK1Byb2JsZW06ICAgICJ2aW0gLXIiIGRvZXNuJ3Qgc2hvdyBhbGwgbWF0Y2hlcyB3aGVuICd3aWxkaWdub3JlJyByZW1vdmVzIHN3YXAKKwkgICAgZmlsZXMuIChTdGV2ZSBUYWxsZXkpCitTb2x1dGlvbjogICBLZWVwIGFsbCBtYXRjaGluZyBzd2FwIGZpbGUgbmFtZXMuCitGaWxlczoJICAgIHNyYy9tZW1saW5lLmMKKworUGF0Y2ggNi4xLjA0MworUHJvYmxlbTogICAgQWZ0ZXIgcGF0Y2ggNi4xLjA0MCBhIGZldyB3YXJuaW5ncyBhcmUgcHJvZHVjZWQuCitTb2x1dGlvbjogICBBZGQgYSB0eXBlIGNhc3QgdG8gImNoYXIgKiIgZm9yIG1jaF9jaGRpcigpLiAoQXhlbCBLaWVsaG9ybikKK0ZpbGVzOgkgICAgc3JjL2RpZmYuYywgc3JjL2V4X2RvY21kLmMuYywgc3JjL21pc2MxLmMsIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xLjA0NCAoZXh0cmEpCitQcm9ibGVtOiAgICBHVUk6IFdoZW4gdXNpbmcgdGhlIGZpbmQvcmVwbGFjZSBkaWFsb2cgd2l0aCB0ZXh0IHRoYXQgY29udGFpbnMgYQorCSAgICBzbGFzaCwgYW4gaW52YWxpZCBzdWJzdGl0dXRlIGNvbW1hbmQgaXMgZ2VuZXJhdGVkLgorCSAgICBPbiBXaW4zMiBhIGZpbmQgZG9lc24ndCB3b3JrIHdoZW4gJ2luc2VydG1vZGUnIGlzIHNldC4KK1NvbHV0aW9uOiAgIEVzY2FwZSBzbGFzaGVzIHdpdGggYSBiYWNrc2xhc2guCisJICAgIE1ha2UgdGhlIFdpbjMyLCBNb3RpZiBhbmQgR1RLIGd1aSB1c2UgY29tbW9uIGNvZGUgZm9yIHRoZQorCSAgICBmaW5kL3JlcGxhY2UgZGlhbG9nLgorCSAgICBBZGQgdGhlICJtYXRjaCBjYXNlIiBvcHRpb24gZm9yIE1vdGlmIGFuZCBHVEsuCitGaWxlczoJICAgIHNyYy9mZWF0dXJlLmgsIHNyYy9wcm90by9ndWkucHJvLCBzcmMvZ3VpLmMsIHNyYy9ndWkuaCwKKwkgICAgc3JjL2d1aV9tb3RpZi5jLCBzcmMvZ3VpX2d0ay5jLCBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMS4wNDUKK1Byb2JsZW06ICAgIEluIFZpc3VhbCBtb2RlLCB3aXRoIGxvdHMgb2YgZm9sZHMgYW5kICdzY3JvbGxvZmYnIHNldCB0byA5OTksCisJICAgIG1vdmluZyB0aGUgY3Vyc29yIGRvd24gbmVhciB0aGUgZW5kIG9mIHRoZSBmaWxlIGNhdXNlcyB0aGUgdGV4dCB0bworCSAgICBqdW1wIHVwIGFuZCBkb3duLiAoTHVib21pciBIb3N0KQorU29sdXRpb246ICAgVGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGUgY3Vyc29yIG1heSBiZSBvbiB0aGUgbGFzdCBsaW5lIG9mIGEKKwkgICAgY2xvc2VkIGZvbGQuCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4xLjA0NgorUHJvYmxlbTogICAgWDExIEdVSTogIjpzZXQgbHNwPTIgZ2NyPW4tdi1pOmhvcjEtYmxpbmtvbjAiIGRyYXdzIGEgYmxhY2sKKwkgICAgcmVjdGFuZ2xlLiAgIjpzZXQgbHNwPTIgZ2NyPW4tdi1pOmhvcjEwLWJsaW5rb24wIiBtYWtlcyB0aGUgY3Vyc29yCisJICAgIGRpc2FwcGVhci4gIChOYW0gU3VuZ0h5dW4pCitTb2x1dGlvbjogICBDb3JyZWN0bHkgY29tcHV0ZSB0aGUgaGVpZ2h0IG9mIHRoZSBob3Jpem9udGFsIGN1cnNvci4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNi4xLjA0NworUHJvYmxlbTogICAgV2hlbiBza2lwcGluZyBjb21tYW5kcyBhZnRlciBhbiBlcnJvciB3YXMgZW5jb3VudGVyZWQsIGV4cHJlc3Npb25zCisJICAgIGZvciAiOmlmIiwgIjtlbHNlaWYiIGFuZCAiOndoaWxlIiBhcmUgc3RpbGwgZXZhbHVhdGVkLgorU29sdXRpb246ICAgU2tpcCB0aGUgZXhwcmVzc2lvbiBhZnRlciBhbiBlcnJvci4gKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4wNDgKK1Byb2JsZW06ICAgIFVuaWNvZGUgMy4yIGNoYW5nZXMgd2VyZSBtaXNzaW5nIGEgZmV3IEhhbmd1bCBKYW1vIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBSZWNvZ25pemUgbW9yZSBjaGFyYWN0ZXJzIGFzIGNvbXBvc2luZyBjaGFyYWN0ZXJzLiAoSnVuZ3NoaWsgU2hpbikKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4xLjA0OSAoZXh0cmEpCitQcm9ibGVtOiAgICBPbiBhIDMyIGJpdCBkaXNwbGF5IGEgdmFsaWQgY29sb3IgbWF5IGNhdXNlIGFuIGVycm9yIG1lc3NhZ2UsCisJICAgIGJlY2F1c2UgaXRzIHBpeGVsIHZhbHVlIGlzIG5lZ2F0aXZlLiAoQ2hyaXMgUGF1bHNvbi1FbGxpcykKK1NvbHV0aW9uOiAgIENoZWNrIGZvciAtMTExMTEgaW5zdGVhZCBvZiB0aGUgY29sb3IgYmVpbmcgbmVnYXRpdmUuCisJICAgIERvbid0IGFkZCBvbmUgdG8gdGhlIHBpeGVsIHZhbHVlLCAtMSBtYXkgYmUgdXNlZCBmb3Igd2hpdGUuCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmgsIHNyYy9ndWkuYywgc3JjL2d1aS5oLCBzcmMvZ3VpX2FtaWdhLmMsCisJICAgIHNyYy9ndWlfYXRoZW5hLmMsIHNyYy9ndWlfYmVvcy5jYywgc3JjL2d1aV9ndGtfeDExLmMsCisJICAgIHNyYy9ndWlfbWFjLmMsIHNyYy9ndWlfbW90aWYuYywgc3JjL2d1aV9waG90b24uYywKKwkgICAgc3JjL2d1aV9yaXNjb3MuYywgc3JjL2d1aV93MTYuYywgc3JjL2d1aV93MzIuYywgc3JjL2d1aV93NDguYywKKwkgICAgc3JjL2d1aV94MTEuYywgc3JjL21ieXRlLmMsIHNyYy9zeW50YXguYworCitQYXRjaCA2LjEuMDUwIChkZXBlbmRzIG9uIDYuMS4wNDkpCitQcm9ibGVtOiAgICBBZnRlciBwYXRjaCA2LjEuMDQ5IHRoZSBub24tR1VJIHZlcnNpb24gZG9lc24ndCBjb21waWxlLgorU29sdXRpb246ICAgQWRkIGFuICNpZmRlZiBGRUFUX0dVSS4gIChSb2JlcnQgU3RhbnRvbikKK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMS4wNTEgKGRlcGVuZHMgb24gNi4xLjA0NCkKK1Byb2JsZW06ICAgIERvZXNuJ3QgY29tcGlsZSB3aXRoIEdVSSBhbmQgc21hbGwgZmVhdHVyZXMuCitTb2x1dGlvbjogICBBZGp1c3QgdGhlICNpZiBmb3IgZ2FfYXBwZW5kKCkuCitGaWxlczoJICAgIHNyYy9taXNjMi5jCisKK1BhdGNoIDYuMS4wNTIKK1Byb2JsZW06ICAgIFVuaXg6IFRoZSBleGVjdXRhYmxlKCkgZnVuY3Rpb24gZG9lc24ndCB3b3JrIHdoZW4gdGhlICJ3aGljaCIKKwkgICAgY29tbWFuZCBpc24ndCBhdmFpbGFibGUuCitTb2x1dGlvbjogICBHbyB0aHJvdWdoICRQQVRIIG1hbnVhbGx5LiAgQWxzbyBtYWtlcyBpdCB3b3JrIGZvciBWTVMuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xLjA1MworUHJvYmxlbTogICAgV2hlbiAnc2Vzc2lvbm9wdGlvbnMnIGNvbnRhaW5zICJnbG9iYWxzIiwgb3IgImxvY2Fsb3B0aW9ucyIgYW5kIGFuCisJICAgIG9wdGlvbiB2YWx1ZSBjb250YWlucyBhIGxpbmUgYnJlYWssIHRoZSByZXN1bHRpbmcgc2NyaXB0IGlzIHdyb25nLgorU29sdXRpb246ICAgVXNlICJcbiIgYW5kICJcciIgZm9yIGEgbGluZSBicmVhay4gKFNyaW5hdGggQXZhZGhhbnVsYSkKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMDU0CitQcm9ibGVtOiAgICBHVUk6IEEgbW91c2UgY2xpY2sgaXMgbm90IHJlY29nbml6ZWQgYXQgdGhlIG1vcmUgcHJvbXB0LCBldmVuIHdoZW4KKwkgICAgJ21vdXNlJyBpbmNsdWRlcyAncicuCitTb2x1dGlvbjogICBSZWNvZ25pemUgYSBtb3VzZSBjbGljayBhdCB0aGUgbW9yZSBwcm9tcHQuCisJICAgIEFsc28gYWNjZXB0IGEgbW91c2UgY2xpY2sgaW4gdGhlIGxhc3QgbGluZSBpbiB0aGUgR1VJLgorCSAgICBBZGQgIm1sIiBlbnRyeSBpbiAnbW91c2VzaGFwZScuCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL21lc3NhZ2UuYywgc3JjL21pc2MxLmMsIHNyYy9taXNjMi5jLCBzcmMvb3B0aW9uLmMsCisJICAgIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4xLjA1NQorUHJvYmxlbTogICAgV2hlbiBlZGl0aW5nIGEgY29tcHJlc3NlZCBmaWxlLCBWaW0gd2lsbCBpbnNwZWN0IHRoZSBjb250ZW50cyB0bworCSAgICBndWVzcyB0aGUgZmlsZXR5cGUuCitTb2x1dGlvbjogICBEb24ndCBzb3VyY2Ugc2NyaXB0cy52aW0gZm9yIC5aLCAuZ3osIC5iejIsIC56aXAgYW5kIC50Z3ogZmlsZXMuCitGaWxlczoJICAgIHJ1bnRpbWUvZmlsZXR5cGUudmltLCBydW50aW1lL3BsdWdpbi9nemlwLnZpbQorCitQYXRjaCA2LjEuMDU2CitQcm9ibGVtOiAgICBMb2FkaW5nIHRoZSBTeW50YXggbWVudSBjYW4gdGFrZSBxdWl0ZSBhIGJpdCBvZiB0aW1lLgorU29sdXRpb246ICAgQWRkIHRoZSAic2tpcF9zeW50YXhfc2VsX21lbnUiIHZhcmlhYmxlLiAgV2hlbiBpdHMgZGVmaW5lZCB0aGUKKwkgICAgYXZhaWxhYmxlIHN5bnRheCBmaWxlcyBhcmUgbm90IGluIHRoZSBTeW50YXggbWVudS4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZ3VpLnR4dCwgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjEuMDU3CitQcm9ibGVtOiAgICBBbiBFU0MgaW5zaWRlIGEgbWFwcGluZyBkb2Vzbid0IHdvcmsgYXMgZG9jdW1lbnRlZCB3aGVuCisJICAgICdpbnNlcnRtb2RlJyBpcyBzZXQsIGl0IGRvZXMgZ28gZnJvbSBWaXN1YWwgb3IgTm9ybWFsIG1vZGUgdG8KKwkgICAgSW5zZXJ0IG1vZGUuIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBNYWtlIGl0IHdvcmsgYXMgZG9jdW1lbnRlZC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMS4wNTgKK1Byb2JsZW06ICAgIFdoZW4gdGhlcmUgaXMgYSBjbG9zZWQgZm9sZCBqdXN0IGFib3ZlIHRoZSBmaXJzdCBsaW5lIGluIHRoZQorCSAgICB3aW5kb3csIHVzaW5nIENUUkwtWCBDVFJMLVkgaW4gSW5zZXJ0IG1vZGUgd2lsbCBzaG93IG9ubHkgb25lIGxpbmUKKwkgICAgb2YgdGhlIGZvbGQuIChBbGV4ZXkgTWFyaW5pY2hldikKK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlIHRvcGxpbmUgYnkgcHV0dGluZyBpdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZvbGQuCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4xLjA1OQorUHJvYmxlbTogICAgIjpyZWRpciA+IH4vZmlsZSIgZG9lc24ndCB3b3JrLiAoU3RlcGhlbiBSYXNrdSkKK1NvbHV0aW9uOiAgIEV4cGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlICI6cmVkaXIgPiIgYXJndW1lbnQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4wNjAKK1Byb2JsZW06ICAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQgYW5kICdzZWxlY3Rpb24nIGlzICJleGNsdXNpdmUiLCBkZWxldGluZworCSAgICBhIGNoYXJhY3RlciBqdXN0IGJlZm9yZSBhIHRhYiBjaGFuZ2VzIHRoZSB0YWIgaW50byBzcGFjZXMuICBVbmRvCisJICAgIGRvZXNuJ3QgcmVzdG9yZSB0aGUgdGFiLiAoSGVsbXV0IFN0aWVnbGVyKQorU29sdXRpb246ICAgRG9uJ3QgcmVwbGFjZSB0aGUgdGFiIGJ5IHNwYWNlcyB3aGVuIGl0J3Mgbm90IG5lZWRlZC4gIENvcnJlY3RseQorCSAgICBzYXZlIHRoZSBsaW5lIGJlZm9yZSBpdCdzIGNoYW5nZWQuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjEuMDYxCitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0IGFuZCAnc2VsZWN0aW9uJyBpcyAiZXhjbHVzaXZlIiwgYSBWaXN1YWwKKwkgICAgc2VsZWN0aW9uIHRoYXQgZW5kcyBqdXN0IGFmdGVyIGEgdGFiIGRvZXNuJ3QgaW5jbHVkZSB0aGF0IHRhYiBpbgorCSAgICB0aGUgaGlnaGxpZ2h0aW5nLiAgKEhlbG11dCBTdGllZ2xlcikKK1NvbHV0aW9uOiAgIFVzZSBhIGRpZmZlcmVudCB3YXkgdG8gZXhjbHVkZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuMDYyCitQcm9ibGVtOiAgICBUaGUgIm1hbiIgZmlsZXR5cGUgcGx1Z2luIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBvbiBTb2xhcmlzIDUuCitTb2x1dGlvbjogICBVc2UgYSBkaWZmZXJlbnQgd2F5IHRvIGRldGVjdCB0aGF0ICJtYW4gLXMiIHNob3VsZCBiZSB1c2VkLiAoSHVnaAorCSAgICBTYXNzZSkKK0ZpbGVzOgkgICAgcnVudGltZS9mdHBsdWdpbi9tYW4udmltCisKK1BhdGNoIDYuMS4wNjMKK1Byb2JsZW06ICAgIEphdmEgaW5kZW50aW5nIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIElnbm9yZSBjb21tZW50cyB3aGVuIGNoZWNraW5nIGlmIHRoZSBpbmRlbnQgZG9lc24ndCBpbmNyZWFzZSBhZnRlcgorCSAgICBhICJ9Ii4KK0ZpbGVzOgkgICAgcnVudGltZS9pbmRlbnQvamF2YS52aW0KKworUGF0Y2ggNi4xLjA2NAorUHJvYmxlbTogICAgVGhlIFVSTHMgdGhhdCB0aGUgbmV0cncgcGx1Z2luIHJlY29nbml6ZWQgZm9yIGZ0cCBhbmQgcmNwIGRpZCBub3QKKwkgICAgY29uZm9ybSB0byB0aGUgc3RhbmRhcmQgbWV0aG9kOi8vW3VzZXJAXWhvc3RbOnBvcnRdL3BhdGguCitTb2x1dGlvbjogICBVc2UgZnRwOi8vW3VzZXJAXWhvc3RbWzojXXBvcnRdL3BhdGgsIHdoaWNoIHN1cHBvcnRzIGJvdGggdGhlIG5ldworCSAgICBhbmQgdGhlIHByZXZpb3VzIHN0eWxlLiAgQWxzbyBhZGRlZCBhIGJpdCBvZiBkYXYvY2FkYXZlciBzdXBwb3J0LgorCSAgICAoQ2hhcmxlcyBDYW1wYmVsbCkKK0ZpbGVzOgkgICAgcnVudGltZS9wbHVnaW4vbmV0cncudmltCisKK1BhdGNoIDYuMS4wNjUKK1Byb2JsZW06ICAgIFZNUzogVGhlIGNvbG9yc2NoZW1lLCBrZXltYXAgYW5kIGNvbXBpbGVyIG1lbnVzIGFyZSBub3QgZmlsbGVkIGluLgorU29sdXRpb246ICAgSWdub3JlIGNhc2Ugd2hlbiBsb29raW5nIGZvciAiLnZpbSIgZmlsZXMuIChDb2VuIEVuZ2VsYmFydHMpCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4xLjA2NiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaGVuIGNhbGxpbmcgc3lzdGVtKCkgaW4gYSBwbHVnaW4gcmVhZGluZyBzdGRpbiBoYW5ncy4KK1NvbHV0aW9uOiAgIERvbid0IHNldCB0aGUgdGVybWluYWwgdG8gUkFXIG1vZGUgd2hlbiBpdCB3YXNuJ3QgaW4gUkFXIG1vZGUKKwkgICAgYmVmb3JlIHRoZSBzeXN0ZW0oKSBjYWxsLgorRmlsZXM6CSAgICBzcmMvb3NfYW1pZ2EuYywgc3JjL29zX21zZG9zLmMsIHNyYy9vc19yaXNjb3MuYywgc3JjL29zX3VuaXguYywKKwkgICAgc3JjL29zX3dpbjE2LmMsIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMS4wNjcKK1Byb2JsZW06ICAgICI6c2V0IHZpbWluZm8rPWYwIiBpcyBub3Qgd29ya2luZy4gKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIENoZWNrIHRoZSAiZiIgZmxhZyBpbnN0ZWFkIG9mICInIiBpbiAndmltaW5mbycuCitGaWxlczoJICAgIHNyYy9tYXJrLmMKKworUGF0Y2ggNi4xLjA2OAorUHJvYmxlbTogICAgV2hlbiBhIGZpbGUgaXMgcmVsb2FkZWQgYWZ0ZXIgaXQgd2FzIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0sIGRpZmYKKwkgICAgbW9kZSBpc24ndCB1cGRhdGVkLiAoTWljaGFlbCBOYXVtYW5uKQorU29sdXRpb246ICAgSW52YWxpZGF0ZSB0aGUgZGlmZiBpbmZvIHNvIHRoYXQgaXQncyB1cGRhdGVkIHdoZW4gbmVlZGVkLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjA2OQorUHJvYmxlbTogICAgV2hlbiAnc2hvd21hdGNoJyBpcyBzZXQgYW5kICIkIiBpcyBpbiAnY3BvcHRpb25zJywgdXNpbmcKKwkgICAgIkN9PEVzYz4iIG1heSBmb3JnZXQgdG8gcmVtb3ZlIHRoZSAiJCIuIChQcmViZW4gR3VsZGJlcmcpCitTb2x1dGlvbjogICBSZXN0b3JlIGRvbGxhcl92Y29sIGFmdGVyIGRpc3BsYXlpbmcgdGhlIG1hdGNoaW5nIGN1cnNvciBwb3NpdGlvbi4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuMS4wNzAgKGRlcGVuZHMgb24gNi4xLjA2MCkKK1Byb2JsZW06ICAgIENvbXBpbGVyIHdhcm5pbmcgZm9yIHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaC4gKE1pa2UgV2lsbGlhbXMpCitTb2x1dGlvbjogICBBZGQgYSB0eXBlY2FzdCB0byBpbnQuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjEuMDcxCitQcm9ibGVtOiAgICBXaGVuICdzZWxlY3Rpb24nIGlzIGV4Y2x1c2l2ZSwgZyBDVFJMLUcgaW4gVmlzdWFsIG1vZGUgY291bnRzIG9uZQorCSAgICBjaGFyYWN0ZXIgdG9vIG11Y2guIChEYXZpZCBOZWNhcykKK1NvbHV0aW9uOiAgIFN1YnRyYWN0IG9uZSBmcm9tIHRoZSBlbmQgcG9zaXRpb24uCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjEuMDcyCitQcm9ibGVtOiAgICBXaGVuIGEgZmlsZSBuYW1lIGluIGEgdGFncyBmaWxlIHN0YXJ0cyB3aXRoIGh0dHA6Ly8gb3Igc29tZXRoaW5nCisJICAgIGVsc2UgZm9yIHdoaWNoIHRoZXJlIGlzIGEgQnVmUmVhZENtZCBhdXRvY29tbWFuZCwgdGhlIGZpbGUgaXNuJ3QKKwkgICAgb3BlbmVkIGFueXdheS4KK1NvbHV0aW9uOiAgIENoZWNrIGlmIHRoZXJlIGlzIGEgbWF0Y2hpbmcgQnVmUmVhZENtZCBhdXRvY29tbWFuZCBhbmQgdHJ5IHRvCisJICAgIG9wZW4gdGhlIGZpbGUuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL3Byb3RvL2ZpbGVpby5wcm8sIHNyYy90YWcuYworCitQYXRjaCA2LjEuMDczIChleHRyYSkKK1Byb2JsZW06ICAgIEJDNTogQ2FuJ3QgZWFzaWx5IHNwZWNpZnkgYSB0aW55LCBzbWFsbCwgbm9ybWFsLCBiaWcgb3IgaHVnZQorCSAgICB2ZXJzaW9uLgorU29sdXRpb246ICAgQWxsb3cgc2VsZWN0aW5nIHRoZSB2ZXJzaW9uIHdpdGggdGhlIEZFQVRVUkVTIHZhcmlhYmxlLiAoQWppdAorCSAgICBUaGFra2FyKQorRmlsZXM6CSAgICBzcmMvTWFrZV9iYzUubWFrCisKK1BhdGNoIDYuMS4wNzQKK1Byb2JsZW06ICAgIFdoZW4gJ2NkcGF0aCcgaW5jbHVkZXMgIi4uLy4uIiwgY2hhbmdpbmcgdG8gYSBkaXJlY3RvcnkgaW4gd2hpY2gKKwkgICAgd2UgY3VycmVudGx5IGFscmVhZHkgYXJlIGRvZXNuJ3Qgd29yay4gIGZmX2NoZWNrX3Zpc2l0ZWQoKSBhZGRzCisJICAgIHRoZSBkaXJlY3RvcnkgYm90aCB3aGVuIHVzaW5nIGl0IGFzIHRoZSByb290IGZvciBzZWFyY2hpbmcgYW5kIGZvcgorCSAgICB0aGUgYWN0dWFsIG1hdGNoZXMuIChTdGVwaGVuIFJhc2t1KQorU29sdXRpb246ICAgVXNlIGEgc2VwYXJhdGUgbGlzdCBmb3IgdGhlIGFscmVhZHkgc2VhcmNoZWQgZGlyZWN0b3JpZXMuCitGaWxlczoJICAgIHNyYy9taXNjMi5jCisKK1BhdGNoIDYuMS4wNzUgKGRlcGVuZHMgb24gNi4xLjA3MikKK1Byb2JsZW06ICAgIENhbid0IGNvbXBpbGUgZmlsZWlvLmMgb24gTVMtV2luZG93cy4KK1NvbHV0aW9uOiAgIEFkZCBhIGRlY2xhcmF0aW9uIGZvciB0aGUgInAiIHBvaW50ZXIuIChNYWRva2EgTWFjaGl0YW5pKQorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjA3NiAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWNpbnRvc2g6IGV4cGxvcmVyIHBsdWdpbiBkb2Vzbid0IHdvcmsgb24gTWFjIENsYXNzaWMuCisJICAgIElNRSBkb2Vzbid0IHdvcmsuICBEaWFsb2cgYm94ZXMgZG9uJ3Qgd29yayBvbiBNYWMgT1MgWAorU29sdXRpb246ICAgRml4IGV4cGxvcmVyIHBsdWdpbiBhbmQga2V5IG1vZGlmaWVycy4gKEF4ZWwgS2llbGhvcm4pCisJICAgIEZpeCBJTUUgc3VwcG9ydC4gKE11cmFva2EgVGFybykKKwkgICAgRGlzYWJsZSBkaWFsb2cgYm94ZXMuIChCZW5qaSBGaXNoZXIpCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9mZWF0dXJlLmgsIHNyYy9ndWlfbWFjLmMsIHNyYy9vc19tYWMuYworCitQYXRjaCA2LjEuMDc3CitQcm9ibGVtOiAgICBPbiBhIERlYmlhbiBzeXN0RW0gd2h0IEFDTCBsaW5raW5nIGZhaWxzLiAoTHVib21pciBIb3N0KQorU29sdXRpb246ICAgV2hlbiB0aGUgImFjbCIgbGlicmFyeSBpcyB1c2VkLCBjaGVjayBpZiB0aGUgImF0dHIiIGxpYnJhcnkgaXMKKwkgICAgcHJlc2VudCBhbmQgdXNlIGl0LgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4sIHNyYy9saW5rLnNoCisKK1BhdGNoIDYuMS4wNzgKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgJ2ZvbGRtZXRob2QnICJtYXJrZXIiIGFuZCB0aGUgZW5kIG1hcmtlciBhcHBlYXJzIGJlZm9yZQorCSAgICB0aGUgc3RhcnQgbWFya2VyIGluIHRoZSBmaWxlLCBubyBmb2xkIGlzIGZvdW5kLiAoTmF6cmkgUmFtbGl5KQorU29sdXRpb246ICAgRG9uJ3QgbGV0IHRoZSBmb2xkIGRlcHRoIGdvIG5lZ2F0aXZlLgorRmlsZXM6CSAgICBzcmMvZm9sZC5jCisKK1BhdGNoIDYuMS4wNzkKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgInMiIGluIFZpc3VhbCBibG9jayBtb2RlIHdpdGggJ3ZpcnR1YWxlZGl0JyBzZXQsIHdoZW4KKwkgICAgdGhlIHNlbGVjdGVkIGJsb2NrIGlzIGFmdGVyIHRoZSBlbmQgb2Ygc29tZSBsaW5lcyB0aGUgd3JvbmcgdGV4dAorCSAgICBpcyBpbnNlcnRlZCBhbmQgc29tZSBsaW5lcyBhcmUgc2tpcHBlZC4gKFNlcnZhdGl1cyBCcmFuZHQpCitTb2x1dGlvbjogICBJbnNlcnQgdGhlIHJpZ2h0IHRleHQgYW5kIGV4dGVuZCBzaG9ydCBsaW5lcy4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMS4wODAKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgZ2NjIHdpdGggL3Vzci9sb2NhbCBhbHJlYWR5IGluIHRoZSBzZWFyY2ggcGF0aCwgYWRkaW5nCisJICAgIGl0IGFnYWluIGNhdXNlcyBwcm9ibGVtcy4KK1NvbHV0aW9uOiAgIEFkanVzdCBjb25maWd1cmUuaW4gdG8gYXZvaWQgYWRkaW5nIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQKKwkgICAgL3Vzci9sb2NhbC9saWIgd2hlbiB1c2luZyBHQ0MgYW5kIHRoZXkgYXJlIGFscmVhZHkgdXNlZC4gKEpvaGFubmVzCisJICAgIFplbGxuZXIpCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjEuMDgxCitQcm9ibGVtOiAgICAiOmhlbHAgQ1RSTC1cX0NUUkwtTiIgZG9lc24ndCB3b3JrLiAgKENocmlzdGlhbiBKLiBSb2JpbnNvbikKK1NvbHV0aW9uOiAgIERvdWJsZSB0aGUgYmFja3NsYXNoIHRvIGF2b2lkIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgIlxfIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjEuMDgyCitQcm9ibGVtOiAgICBPbiBNUy1XaW5kb3dzIHRoZSB2aW1yY19leGFtcGxlLnZpbSBzY3JpcHQgaXMgc291cmNlZCBhbmQgdGhlbgorCSAgICBtc3dpbi52aW0uICBUaGlzIGVuYWJsZXMgdXNpbmcgc2VsZWN0IG1vZGUsIGJ1dCBzaW5jZSAicCIgaXMKKwkgICAgbWFwcGVkIGl0IGRvZXNuJ3QgcmVwbGFjZSB0aGUgc2VsZWN0aW9uLgorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBtYXBwaW5nIG9mICJwIiBmcm9tIHZpbXJjX2V4YW1wbGUudmltLCBpdCdzIG9ic29sZXRlLgorCSAgICAoVmxhZCBTYW5kcmluaSkKK0ZpbGVzOgkgICAgcnVudGltZS92aW1yY19leGFtcGxlLnZpbQorCitQYXRjaCA2LjEuMDgzCitQcm9ibGVtOiAgICBXaGVuICRMQU5HIGlzICJzayIgb3IgInNrX3NrIiwgdGhlIFNsb3ZhayBtZW51IGZpbGUgaXNuJ3QgZm91bmQuCisJICAgIChNYXJ0aW4gTGFja28pCitTb2x1dGlvbjogICBHdWVzcyB0aGUgcmlnaHQgbWVudSBmaWxlIGJhc2VkIG9uIHRoZSBzeXN0ZW0uCitGaWxlczoJICAgIHJ1bnRpbWUvbGFuZy9tZW51X3NrX3NrLnZpbQorCitQYXRjaCA2LjEuMDg0IChkZXBlbmRzIG9uIDYuMS4wODApCitQcm9ibGVtOiAgICAiaW5jbHVkZSIgYW5kICJsaWIiIGFyZSBtaXhlZCB1cCB3aGVuIGNoZWNraW5nIHRoZSBkaXJlY3RvcmllcyBnY2MKKwkgICAgYWxyZWFkeSBzZWFyY2hlcy4KK1NvbHV0aW9uOiAgIFN3YXAgdGhlIHZhcmlhYmxlIG5hbWVzLiAoU3VuSG8gS2ltKQorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4xLjA4NQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBDVFJMLU8gQ1RSTC1cIENUUkwtTiBmcm9tIEluc2VydCBtb2RlLCB0aGUgZGlzcGxheWVkCisJICAgIG1vZGUgIihpbnNlcnQpIiBpc24ndCByZW1vdmVkLiAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgQ2xlYXIgdGhlIGNvbW1hbmQgbGluZS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMS4wODYgKGRlcGVuZHMgb24gNi4xLjA0OSkKK1Byb2JsZW06ICAgIFRoZSBndWlmZyBjb2xvciBmb3IgQ3Vyc29ySU0gZG9lc24ndCB0YWtlIGVmZmVjdC4KK1NvbHV0aW9uOiAgIFVzZSB0aGUgZm9yZWdyb3VuZCBjb2xvciB3aGVuIGl0J3MgZGVmaW5lZC4gKE11cmFva2EgVGFybykKK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMS4wODcKK1Byb2JsZW06ICAgIEEgdGhlc2F1cnVzIHdpdGggSmFwYW5lc2UgY2hhcmFjdGVycyBoYXMgcHJvYmxlbXMgd2l0aCBjaGFyYWN0ZXJzCisJICAgIGluIGRpZmZlcmVudCB3b3JkIGNsYXNzZXMuCitTb2x1dGlvbjogICBPbmx5IHNlcGFyYXRlIHdvcmRzIHdpdGggc2luZ2xlLWJ5dGUgbm9uLXdvcmQgY2hhcmFjdGVycy4KKwkgICAgKE11cmFva2EgVGFybykKK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjEuMDg4IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBubyBkZWJ1Z2dpbmcgaW5mbyBpcyBnZW5lcmF0ZWQuICBUYWdzIGZpbGUgZXhjbHVkZXMgLmNwcAorCSAgICBmaWxlcy4KK1NvbHV0aW9uOiAgIEFkZCAiL21hcCIgdG8gY29tcGlsZXIgZmxhZ3MuICBBZGQgIiouY3BwIiB0byBjdGFncyBjb21tYW5kLgorCSAgICAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvTWFrZV9tdmMubWFrCisKK1BhdGNoIDYuMS4wODkKK1Byb2JsZW06ICAgIE9uIEJTREkgc3lzdGVtcyB0aGVyZSBpcyBubyBzc19zcCBmaWVsZCBpbiBzdGFja190LiAoUm9iZXJ0IEphbikKK1NvbHV0aW9uOiAgIFVzZSBzc19iYXNlIGluc3RlYWQuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZy5oLmluLAorCSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMS4wOTAKK1Byb2JsZW06ICAgIENUUkwtRiBnZXRzIHN0dWNrIHdoZW4gJ3Njcm9sbG9mZicgaXMgbm9uLXplcm8gYW5kIHRoZXJlIGlzIGEgbWl4CisJICAgIG9mIGxvbmcgd3JhcHBpbmcgbGluZXMgYW5kIGEgbm9uLXdyYXBwaW5nIGxpbmUuCitTb2x1dGlvbjogICBDaGVjayB0aGF0IENUUkwtRiBzY3JvbGxzIGF0IGxlYXN0IG9uZSBsaW5lLgorRmlsZXM6CSAgICBzcmMvbW92ZS5jCisKK1BhdGNoIDYuMS4wOTEKK1Byb2JsZW06ICAgIEdUSzogQ2FuJ3QgY2hhbmdlIHByZWVkaXRzdGF0ZSB3aXRob3V0IHNldHRpbmcgJ2ltYWN0aXZhdGVrZXknLgorU29sdXRpb246ICAgQWRkIHNvbWUgY29kZSB0byBjaGFuZ2UgcHJlZWRpdHN0YXRlIGZvciBPblRoZVNwb3QuIChZYXN1aGlybworCSAgICBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMS4wOTIKK1Byb2JsZW06ICAgICI6bWFwY2xlYXIgPGJ1ZmZlcj4iIGRvZXNuJ3Qgd29yay4gKFNyaWthbnRoIEFkYXlhcGFsYW0pCitTb2x1dGlvbjogICBBbGxvdyBhbiBhcmd1bWVudCBmb3IgIjptYXBjbGVhciIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmgKKworUGF0Y2ggNi4xLjA5MyAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWMgYW5kIE1TLVdpbmRvd3MgR1VJOiB3aGVuIHNjcm9sbGluZyB3aGlsZSAiOnMiIGlzIHdvcmtpbmcgdGhlCisJICAgIHJlc3VsdHMgY2FuIGJlIG1lc3NlZCB1cCwgYmVjYXVzZSB0aGUgY3Vyc29yIGlzIG1vdmVkLgorU29sdXRpb246ICAgRGlzYWxsb3cgZGlyZWN0IHNjcm9sbGluZyB3aGVuIG5vdCB3YWl0aW5nIGZvciBhIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL2d1aV9tYWMuYywgc3JjL2d1aV93MTYuYywgc3JjL2d1aV93MzIuYywgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjEuMDk0CitQcm9ibGVtOiAgICBDeWd3aW46IFBhc3NpbmcgYSBmaWxlIG5hbWUgdGhhdCBoYXMgYmFja3NsYXNoZXMgaXNuJ3QgaGFuZGxlZAorCSAgICB2ZXJ5IHdlbGwuCitTb2x1dGlvbjogICBDb252ZXJ0IGZpbGUgbmFtZSBhcmd1bWVudHMgdG8gUG9zaXguICAoQ2hyaXMgTWV0Y2FsZikKK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjEuMDk1CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHNpZ25zIGNhbiBmcmVlIGFuIGl0ZW0gb24gdGhlIHN0YWNrLgorCSAgICBPdmVycnVsaW5nIHNpZ24gY29sb3JzIGRvZXNuJ3Qgd29yay4gKFNyaWthbnRoIFNhbmthcmFuKQorU29sdXRpb246ICAgRG9uJ3QgZnJlZSB0aGUgaXRlbSBvbiB0aGUgc3RhY2suICBVc2UgTlVMTCBpbnN0ZWFkIG9mICJub25lIiBmb3IKKwkgICAgdGhlIHZhbHVlIG9mIHRoZSBjb2xvci4KK0ZpbGVzOgkgICAgc3JjL2d1aV94MTEuYworCitQYXRjaCA2LjEuMDk2CitQcm9ibGVtOiAgICBXaGVuIGVyYXNpbmcgdGhlIHJpZ2h0IGhhbHZlIG9mIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyLCBpdCBtYXkKKwkgICAgY2F1c2UgZnVydGhlciBjaGFyYWN0ZXJzIHRvIGJlIGVyYXNlZC4gKFlhc3VoaXJvIE1hdHN1bW90bykKK1NvbHV0aW9uOiAgIE1ha2Ugc3VyZSBvbmx5IG9uZSBjaGFyYWN0ZXIgaXMgZXJhc2VkLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjA5NyAoZGVwZW5kcyBvbiA2LjEuMDkwKQorUHJvYmxlbTogICAgV2hlbiAnc2Nyb2xsb2ZmJyBpcyBzZXQgdG8gYSBodWdlIHZhbHVlLCBDVFJMLUYgYXQgdGhlIGVuZCBvZiB0aGUKKwkgICAgZmlsZSBzY3JvbGxzIG9uZSBsaW5lLiAoTHVib21pciBIb3N0KQorU29sdXRpb246ICAgRG9uJ3Qgc2Nyb2xsIHdoZW4gQ1RSTC1GIGRldGVjdHMgdGhlIGVuZC1vZi1maWxlLgorRmlsZXM6CSAgICBzcmMvbW92ZS5jCisKK1BhdGNoIDYuMS4wOTgKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3M6IFdoZW4gdGhlIHh4ZCBwcm9ncmFtIGlzIHVuZGVyICJjOlxwcm9ncmFtIGZpbGVzIiB0aGUKKwkgICAgIkNvbnZlcnQgdG8gSGV4IiBtZW51IGRvZXNuJ3Qgd29yay4gKEJyaWFuIE1hdGhpcykKK1NvbHV0aW9uOiAgIFB1dCB0aGUgcGF0aCB0byB4eGQgaW4gZG91YmxlIHF1b3Rlcy4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjEuMDk5CitQcm9ibGVtOiAgICBNZW1vcnkgY29ycnVwdGVkIHdoZW4gY2xvc2luZyBhIGZvbGQgd2l0aCBtb3JlIHRoYW4gOTk5OTkgbGluZXMuCitTb2x1dGlvbjogICBBbGxvY2F0ZSBtb3JlIHNwYWNlIGZvciB0aGUgZm9sZCB0ZXh0LiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjEwMCAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjA4OCkKK1Byb2JsZW06ICAgIFdpbjMyOiBWQzUgYW5kIGVhcmxpZXIgZG9uJ3Qgc3VwcG9ydCB0aGUgL21hcGluZm8gb3B0aW9uLgorU29sdXRpb246ICAgQWRkICIvbWFwaW5mbyIgb25seSB3aGVuICJNQVA9bGluZXMiIGlzIHNwZWNpZmllZC4gKE11cmFva2EgVGFybykKK0ZpbGVzOgkgICAgc3JjL01ha2VfbXZjLm1haworCitQYXRjaCA2LjEuMTAxCitQcm9ibGVtOiAgICBBZnRlciB1c2luZyAiOm9wdGlvbnMiIHRoZSB0YWJzdG9wIG9mIGEgbmV3IHdpbmRvdyBpcyAxNS4gIEVudHJ5CisJICAgIGluICI6b3B0aW9ucyIgd2luZG93IGZvciAnYXV0b3dyaXRlYWxsJyBpcyB3cm9uZy4gKEFudG9pbmUgSgorCSAgICBNZWNoZWx5bmNrKSAgQ2FuJ3QgaW5zZXJ0IGEgc3BhY2UgaW4gYW4gb3B0aW9uIHZhbHVlLgorU29sdXRpb246ICAgVXNlICI6c2V0bG9jYWwiIGluc3RlYWQgb2YgIjpzZXQiLiAgQ2hhbmdlICJhdyIgdG8gImF3YSIuCisJICAgIERvbid0IG1hcCBzcGFjZSBpbiBJbnNlcnQgbW9kZS4KK0ZpbGVzOgkgICAgcnVudGltZS9vcHR3aW4udmltCisKK1BhdGNoIDYuMS4xMDIKK1Byb2JsZW06ICAgIFVucHJpbnRhYmxlIGFuZCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgaW4gYSBzdGF0dXNsaW5lIGl0ZW0gYXJlIG5vdAorCSAgICB0cnVuY2F0ZWQgY29ycmVjdGx5LiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorU29sdXRpb246ICAgQ291bnQgdGhlIHdpZHRoIG9mIGNoYXJhY3RlcnMgaW5zdGVhZCBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4xLjEwMworUHJvYmxlbTogICAgQSBmdW5jdGlvbiByZXR1cm5pbmcgZnJvbSBhIHdoaWxlIGxvb3AsIHdpdGggJ3ZlcmJvc2UnIHNldCB0byAxMgorCSAgICBvciBoaWdoZXIsIGRvZXNuJ3QgbWVudGlvbiB0aGUgcmV0dXJuIHZhbHVlLiAgQSBmdW5jdGlvbiB3aXRoIHRoZQorCSAgICAnYWJvcnQnIGF0dHJpYnV0ZSBtYXkgcmV0dXJuIC0xIHdoaWxlIHRoZSB2ZXJib3NlIG1lc3NhZ2Ugc2F5cworCSAgICBzb21ldGhpbmcgZWxzZS4KK1NvbHV0aW9uOiAgIE1vdmUgdGhlIHZlcmJvc2UgbWVzc2FnZSBhYm91dCByZXR1cm5pbmcgZnJvbSBhIGZ1bmN0aW9uIHRvCisJICAgIGNhbGxfZnVuYygpLiAoU2VydmF0aXVzIEJyYW5kdCkKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMTA0CitQcm9ibGVtOiAgICBHQ0MgMy4xIGFwcGVhcnMgdG8gaGF2ZSBhbiBvcHRpbWl6ZXIgcHJvYmxlbSB0aGF0IG1ha2VzIHRlc3QgMworCSAgICBjcmFzaC4KK1NvbHV0aW9uOiAgIEZvciBHQ0MgMy4xIGFkZCAtZm5vLXN0cmVuZ3RoLXJlZHVjZSB0byBhdm9pZCB0aGUgb3B0aW1pemVyIGJ1Zy4KKwkgICAgRmlsdGVyIG91dCBleHRyYSBpbmZvIGZyb20gImdjYyAtLXZlcnNpb24iLgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4xLjEwNQorUHJvYmxlbTogICAgV2luMzI6IFRoZSBkZWZhdWx0IGZvciAnc2hlbGxwaXBlJyBkb2Vzbid0IHJlZGlyZWN0IHN0ZGVyci4gKERpb24KKwkgICAgTmljb2xhYXMpCitTb2x1dGlvbjogICBSZWRpcmVjdCBzdGRlcnIsIGRlcGVuZGluZyBvbiB0aGUgc2hlbGwgKGxpa2UgZm9yICdzaGVsbHJlZGlyJykuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjEuMTA2CitQcm9ibGVtOiAgICBUaGUgbWF6ZSBwcm9ncmFtIGNyYXNoZXMuCitTb2x1dGlvbjogICBDaGFuZ2UgIjExIiB0byAiMjciIGFuZCBpdCB3b3Jrcy4gKEdyZWcgUm9lbG9mcykKK0ZpbGVzOgkgICAgcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplYW5zaS5jCisKK1BhdGNoIDYuMS4xMDcKK1Byb2JsZW06ICAgIFdoZW4gJ2xpc3QnIGlzIHNldCB0aGUgY3VycmVudCBsaW5lIGluIHRoZSBlcnJvciB3aW5kb3cgbWF5IGJlCisJICAgIGRpc3BsYXllZCB3cm9uZy4gKE11cmFva2EgVGFybykKK1NvbHV0aW9uOiAgIERvbid0IGNvbnRpbnVlIHRoZSBsaW5lIGFmdGVyIHRoZSAkIGhhcyBiZWVuIGRpc3BsYXllZCBhbmQgdGhlCisJICAgIHJpZ2h0bW9zdCBjb2x1bW4gaXMgcmVhY2hlZC4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4xMDgKK1Byb2JsZW06ICAgIFdoZW4gaW50ZXJydXB0aW5nIGEgZmlsdGVyIGNvbW1hbmQgc3VjaCBhcyAiISFzbGVlcCAyMCIgdGhlIGZpbGUKKwkgICAgYmVjb21lcyByZWFkLW9ubHkuIChNYXJrIEJyYWRlcikKK1NvbHV0aW9uOiAgIE9ubHkgc2V0IHRoZSByZWFkLW9ubHkgZmxhZyB3aGVuIG9wZW5pbmcgYSBidWZmZXIgaXMgaW50ZXJydXB0ZWQuCisJICAgIFdoZW4gdGhlIHNoZWxsIGNvbW1hbmQgd2FzIGludGVycnVwdGVkLCByZWFkIHRoZSBvdXRwdXQgdGhhdCB3YXMKKwkgICAgcHJvZHVjZWQgc28gZmFyLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jLCBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjEwOQorUHJvYmxlbTogICAgV2hlbiAnZWFkaXJlY3Rpb24nIGlzICJob3IiLCB1c2luZyBDVFJMLVcgPSBkb2Vzbid0IGVxdWFsaXplIHRoZQorCSAgICB3aW5kb3cgaGVpZ2h0cy4gKFJvbWFuIE5ldWhhdXNlcikKK1NvbHV0aW9uOiAgIElnbm9yZSAnZWFkaXJlY3Rpb24nIGZvciBDVFJMLVcgPQorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4xLjExMAorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOmJhZGQgZmlsZSIgd2hlbiAiZmlsZSIgaXMgYWxyZWFkeSBwcmVzZW50IGJ1dCBub3QKKwkgICAgbGlzdGVkLCBpdCBzdGF5cyB1bmxpc3RlZC4gKERhdmlkIEZyZXkpCitTb2x1dGlvbjogICBTZXQgJ2J1Zmxpc3RlZCcuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuMTExCitQcm9ibGVtOiAgICBJdCdzIG5vdCBwb3NzaWJsZSB0byBkZXRlY3QgdXNpbmcgdGhlIFVuaXggc291cmNlcyBvbiBXaW4zMiBvciBNYWMuCitTb2x1dGlvbjogICBBZGQgaGFzKCJtYWN1bml4IikgYW5kIGhhcygid2luMzJ1bml4IikuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4xMTIKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjphcmdkbyIsICI6YnVmZG8iIG9yICI6d2luZG8iLCBDVFJMLU8gZG9lc24ndCBnbyB0bworCSAgICB0aGUgY3Vyc29yIHBvc2l0aW9uIGZyb20gYmVmb3JlIHRoaXMgY29tbWFuZCBidXQgZXZlcnkgcG9zaXRpb24KKwkgICAgd2hlcmUgdGhlIGFyZ3VtZW50IHdhcyBleGVjdXRlZC4KK1NvbHV0aW9uOiAgIE9ubHkgcmVtZW1iZXIgdGhlIGN1cnNvciBwb3NpdGlvbiBmcm9tIGJlZm9yZSB0aGUgIjphcmdkbyIsCisJICAgICI6YnVmZG8iIGFuZCAiOndpbmRvIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMsIHNyYy9tYXJrLmMKKworUGF0Y2ggNi4xLjExMworUHJvYmxlbTogICAgIjpidWZkbyBid2lwZSIgb25seSB3aXBlcyBvdXQgaGFsZiB0aGUgYnVmZmVycy4gIChSb21hbiBOZXVoYXVzZXIpCitTb2x1dGlvbjogICBEZWNpZGUgd2hhdCBidWZmZXIgdG8gZ28gdG8gbmV4dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBjb21tYW5kLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjEuMTE0CitQcm9ibGVtOiAgICAiOnB5dGhvbiBpbXBvcnQgdmltIiwgIjpweXRob24gdmltLmN1cnJlbnQuYnVmZmVyWzA6MF0gPSBbXSIgZ2l2ZXMKKwkgICAgYSBsYWxsb2MoMCkgZXJyb3IuIChDaHJpcyBTb3V0aGVybikKK1NvbHV0aW9uOiAgIERvbid0IGFsbG9jYXRlIGFuIGFycmF5IHdoZW4gaXQncyBzaXplIGlzIHplcm8uCitGaWxlczoJICAgIHNyYy9pZl9weXRob24uYworCitQYXRjaCA2LjEuMTE1CitQcm9ibGVtOiAgICAiZGFzIiBvbiB0aGUgd2hpdGUgc3BhY2UgYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaCBkb2VzIG5vdCBkZWxldGUKKwkgICAgdGhlICIuIiB0aGUgc2VudGVuY2UgZW5kcyB3aXRoLgorU29sdXRpb246ICAgRG9uJ3QgZXhjbHVkZSB0aGUgbGFzdCBjaGFyYWN0ZXIgd2hlbiBpdCBpcyBub3Qgd2hpdGUgc3BhY2UuCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjEuMTE2CitQcm9ibGVtOiAgICBXaGVuICdlbmRvZmxpbmUnIGlzIGNoYW5nZWQgd2hpbGUgJ2JpbmFyeScgaXMgc2V0IGEgZmlsZSBzaG91bGQgYmUKKwkgICAgY29uc2lkZXJlZCBtb2RpZmllZC4gKE9sYWYgQnVkZGVuaGFnZW4pCitTb2x1dGlvbjogICBSZW1lbWJlciB0aGUgJ2VvbCcgdmFsdWUgd2hlbiBlZGl0aW5nIHN0YXJ0ZWQgYW5kIGNvbnNpZGVyIHRoZQorCSAgICBmaWxlIGNoYW5nZWQgd2hlbiB0aGUgY3VycmVudCB2YWx1ZSBpcyBkaWZmZXJlbnQgYW5kICdiaW5hcnknIGlzCisJICAgIHNldC4gIEFsc28gZml4IHRoYXQgdGhlIHdpbmRvdyB0aXRsZSBpc24ndCB1cGRhdGVkIHdoZW4gJ2ZmJyBvcgorCSAgICAnYmluJyBjaGFuZ2VzLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMsIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4xLjExNworUHJvYmxlbTogICAgU21hbGwgcHJvYmxlbSB3aXRoIGVkaXRpbmcgYSBmaWxlIG92ZXIgZnRwOiBhbmQgd2l0aCBDeWd3aW4uCitTb2x1dGlvbjogICBSZW1vdmUgYSBkb3QgZnJvbSBhICI6bm9ybWFsIiBjb21tYW5kLiAgVXNlICJjeWdkcml2ZSIgd2hlcmUKKwkgICAgYXBwcm9wcmlhdGUuICAoQ2hhcmxlcyBDYW1wYmVsbCkKK0ZpbGVzOgkgICAgcnVudGltZS9wbHVnaW4vbmV0cncudmltCisKK1BhdGNoIDYuMS4xMTgKK1Byb2JsZW06ICAgIFdoZW4gYSBmaWxlIGluIGRpZmYgbW9kZSBpcyByZWxvYWRlZCBiZWNhdXNlIGl0IGNoYW5nZWQgb3V0c2lkZQorCSAgICBvZiBWaW0sIG90aGVyIHdpbmRvd3MgaW4gZGlmZiBtb2RlIGFyZSBub3QgYWx3YXlzIHVwZGF0ZWQuCisJICAgIChNaWNoYWVsIE5hdW1hbm4pCitTb2x1dGlvbjogICBBZnRlciByZWxvYWRpbmcgYSBmaWxlIGluIGRpZmYgbW9kZSBtYXJrIGFsbCB3aW5kb3dzIGluIGRpZmYgbW9kZQorCSAgICBmb3IgcmVkcmF3LgorRmlsZXM6CSAgICBzcmMvZGlmZi5jCisKK1BhdGNoIDYuMS4xMTkgKGV4dHJhKQorUHJvYmxlbTogICAgV2l0aCB0aGUgU25pZmYgaW50ZXJmYWNlLCB1c2luZyBTbmlmZiA0LjAuWCBvbiBIUC1VWCwgdGhlcmUgbWF5IGJlCisJICAgIGEgY3Jhc2ggd2hlbiBjb25uZWN0aW5nIHRvIFNuaWZmLgorU29sdXRpb246ICAgSW5pdGlhbGl6ZSBzbmlmZl9ycV9zZXAgc3VjaCB0aGF0IGl0cyB2YWx1ZSBjYW4gYmUgY2hhbmdlZC4KKwkgICAgKE1hcnRpbiBFZ2xvZmYpCitGaWxlczoJICAgIHNyYy9pZl9zbmlmZi5jCisKK1BhdGNoIDYuMS4xMjAgKGRlcGVuZHMgb24gNi4xLjA5NykKK1Byb2JsZW06ICAgIFdoZW4gJ3Njcm9sbG9mZicgaXMgbm9uLXplcm8gYW5kIHRoZXJlIGFyZSBmb2xkcywgQ1RSTC1GIGF0IHRoZQorCSAgICBlbmQgb2YgdGhlIGZpbGUgc2Nyb2xscyBwYXJ0IG9mIGEgY2xvc2VkIGZvbGQuICAoTHVib21pciBIb3N0KQorU29sdXRpb246ICAgQWRqdXN0IHRoZSBmaXJzdCBsaW5lIHRvIHRoZSBzdGFydCBvZiBhIGZvbGQuCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4xLjEyMSAoZGVwZW5kcyBvbiA2LjEuMDk4KQorUHJvYmxlbTogICAgV2hlbiBzdGFydGluZyBTZWxlY3QgbW9kZSBmcm9tIEluc2VydCBtb2RlLCB0aGVuIHVzaW5nIHRoZSBQYXN0ZQorCSAgICBtZW51IGVudHJ5LCB0aGUgY3Vyc29yIGlzIGxlZnQgYmVmb3JlIHRoZSBsYXN0ZSBwYXN0ZWQgY2hhcmFjdGVyLgorCSAgICAoTWFyaW8gU2Nod2VpZ2xlcikKK1NvbHV0aW9uOiAgIFNldCB0aGUgY3Vyc29yIGZvciBJbnNlcnQgbW9kZSBvbmUgY2hhcmFjdGVyIHRvIHRoZSByaWdodC4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjEuMTIyCitQcm9ibGVtOiAgICAiOmZpbGUgbmFtZSIgY3JlYXRlcyBhIG5ldyBidWZmZXIgdG8gaG9sZCB0aGUgb2xkIGJ1ZmZlciBuYW1lLAorCSAgICB3aGljaCBiZWNvbWVzIHRoZSBhbHRlcm5hdGUgZmlsZS4gIFRoaXMgYnVmZmVyIGlzIHVuZXhwZWN0ZWRseQorCSAgICBsaXN0ZWQuCitTb2x1dGlvbjogICBDcmVhdGUgdGhlIGJ1ZmZlciBmb3IgdGhlIGFsdGVybmF0ZSBuYW1lIHVubGlzdGVkLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMS4xMjMKK1Byb2JsZW06ICAgIEEgIjptYXRjaCIgY29tbWFuZCB3aXRoIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgZG9lc24ndCByZXBvcnQgYW4KKwkgICAgZXJyb3IuCitTb2x1dGlvbjogICBDaGVjayBmb3IgZXh0cmEgY2hhcmFjdGVycy4gKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4xMjQKK1Byb2JsZW06ICAgIFdoZW4gdHJ5aW5nIHRvIGV4aXQgYW5kIHRoZXJlIGlzIGEgaGlkZGVuIGJ1ZmZlciB0aGF0IGhhZCAnZW9sJworCSAgICBvZmYgYW5kICdiaW4nIHNldCBleGl0aW5nIGlzbid0IHBvc3NpYmxlLiAoSm9obiBNY0dvd2FuKQorU29sdXRpb246ICAgU2V0IGJfc3RhcnRfZW9sIHdoZW4gY2xlYXJpbmcgdGhlIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS4xMjUKK1Byb2JsZW06ICAgIEV4cGxvcmVyIHBsdWdpbiBhc2tzIGZvciBzYXZpbmcgYSBtb2RpZmllZCBidWZmZXIgZXZlbiB3aGVuIGl0J3MKKwkgICAgb3BlbiBpbiBhbm90aGVyIHdpbmRvdyBhcyB3ZWxsLgorU29sdXRpb246ICAgQ291bnQgdGhlIG51bWJlciBvZiB3aW5kb3dzIHVzaW5nIHRoZSBidWZmZXIuCitGaWxlczoJICAgIHJ1bnRpbWUvcGx1Z2luL2V4cGxvcmVyLnZpbQorCitQYXRjaCA2LjEuMTI2CitQcm9ibGVtOiAgICBBZGRpbmcgdGhlIGNob2ljZXMgaW4gdGhlIHN5bnRheCBtZW51IGlzIGNvbnN1bWluZyBtdWNoIG9mIHRoZQorCSAgICBzdGFydHVwIHRpbWUgb2YgdGhlIEdVSSB3aGlsZSBpdCdzIG5vdCBvZnRlbiB1c2VkLgorU29sdXRpb246ICAgT25seSBhZGQgdGhlIGNob2ljZXMgd2hlbiB0aGUgdXNlciB3YW50cyB0byB1c2UgdGhlbS4KK0ZpbGVzOgkgICAgTWFrZWZpbGUsIHJ1bnRpbWUvbWFrZW1lbnUudmltLCBydW50aW1lL21lbnUudmltLAorCSAgICBydW50aW1lL3N5bm1lbnUudmltLCBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4xLjEyNworUHJvYmxlbTogICAgV2hlbiB1c2luZyAiLS1yZW1vdGUgZmlsZSIgYW5kIHRoZSBzZXJ2ZXIgaGFzICdpbnNlcnRtb2RlJyBzZXQsCisJICAgIGNvbW1hbmRzIGFyZSBpbnNlcnRlZCBpbnN0ZWFkIG9mIGJlaW5nIGV4ZWN1dGVkLiAoTmlrbGFzIFZvbGJlcnMpCitTb2x1dGlvbjogICBHbyB0byBOb3JtYWwgbW9kZSBhZ2FpbiBhZnRlciB0aGUgIjpkcm9wIiBjb21tYW5kLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS4xMjgKK1Byb2JsZW06ICAgIFRoZSBleHByZXNzaW9uICJpbnB1dCgndmVyeSBsb25nIHByb21wdCcpIiBwdXRzIHRoZSBjdXJzb3IgaW4gdGhlCisJICAgIHdyb25nIGxpbmUgKGNvbHVtbiBpcyBPSykuCitTb2x1dGlvbjogICBBZGQgdGhlIHdyYXBwZWQgbGluZXMgdG8gdGhlIGluZGVudC4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNi4xLjEyOQorUHJvYmxlbTogICAgT24gU29sYXJpcyBlZGl0aW5nICJmaWxlLyIgYW5kIHRoZW4gImZpbGUiIHJlc3VsdHMgaW4gdXNpbmcgdGhlCisJICAgIHNhbWUgYnVmZmVyLiAgKEppbSBCYXR0bGUpCitTb2x1dGlvbjogICBCZWZvcmUgdXNpbmcgc3RhdCgpLCBjaGVjayB0aGF0IHRoZXJlIGlzIG5vIGlsbGVnYWwgdHJhaWxpbmcKKwkgICAgc2xhc2guCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZy5oLmluLCBzcmMvY29uZmlndXJlLmluLAorCSAgICBzcmMvbWFjcm9zLmggc3JjL21pc2MyLmMsIHNyYy9wcm90by9taXNjMi5wcm8KKworUGF0Y2ggNi4xLjEzMAorUHJvYmxlbTogICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIHNvbWUgb2YgdGhlICdlcnJvcmZvcm1hdCcgaXRlbXMgaXMgdW5jbGVhci4KK1NvbHV0aW9uOiAgIEFkZCBtb3JlIGV4YW1wbGVzIGFuZCBleHBsYWluIGhhcmQgdG8gdW5kZXJzdGFuZCBpdGVtcy4gKFN0ZWZhbgorCSAgICBSb2VtZXIpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3F1aWNrZml4LnR4dAorCitQYXRjaCA2LjEuMTMxCitQcm9ibGVtOiAgICBYMTEgR1VJOiB3aGVuIGV4cGFuZGluZyBhIENTSSBieXRlIGluIHRoZSBpbnB1dCBzdHJlYW0gdG8gS19DU0ksCisJICAgIHRoZSBDU0kgYnl0ZSBpdHNlbGYgaXNuJ3QgY29waWVkLgorU29sdXRpb246ICAgQ29weSB0aGUgQ1NJIGJ5dGUuCitGaWxlczoJICAgIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNi4xLjEzMgorUHJvYmxlbTogICAgRXhlY3V0aW5nIGEgcmVnaXN0ZXIgaW4gRXggbW9kZSBtYXkgY2F1c2UgY29tbWFuZHMgdG8gYmUgc2tpcHBlZC4KKwkgICAgKEpvaG4gTWNHb3dhbikKK1NvbHV0aW9uOiAgIEluIEV4IG1vZGUgdXNlIGFuIGV4dHJhIGNoZWNrIGlmIHRoZSByZWdpc3RlciBjb250ZW50cyB3YXMKKwkgICAgY29uc3VtZWQsIHRvIGF2b2lkIGlucHV0IGdvZXMgaW50byB0aGUgdHlwZWFoZWFkIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjEzMworUHJvYmxlbTogICAgV2hlbiBkcmF3aW5nIGRvdWJsZS13aWRlIGNoYXJhY3RlcnMgaW4gdGhlIHN0YXR1c2xpbmUsIG1heSBjbGVhcgorCSAgICBoYWxmIG9mIGEgY2hhcmFjdGVyLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorU29sdXRpb246ICAgRm9yY2UgcmVkcmF3IG9mIHRoZSBuZXh0IGNoYXJhY3RlciBieSBzZXR0aW5nIHRoZSBhdHRyaWJ1dGVzCisJICAgIGluc3RlYWQgb2YgcHV0dGluZyBhIE5VTCBpbiBTY3JlZW5MaW5lc1tdLiAgRG8gcHV0IGEgTlVMIGluCisJICAgIFNjcmVlbkxpbmVzW10gd2hlbiBvdmVyd3JpdGluZyBoYWxmIG9mIGEgZG91YmxlLXdpZGUgY2hhcmFjdGVyLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjEzNAorUHJvYmxlbTogICAgQW4gZXJyb3IgZm9yIGEgdHJhaWxpbmcgYXJndW1lbnQgb2YgIjptYXRjaCIgc2hvdWxkIG5vdCBiZSBnaXZlbgorCSAgICBhZnRlciAiOmlmIDAiLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIE9ubHkgZG8gdGhlIGNoZWNrIHdoZW4gZXhlY3V0aW5nIGNvbW1hbmRzLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMTM1CitQcm9ibGVtOiAgICBQYXNzaW5nIGEgY29tbWFuZCB0byB0aGUgc2hlbGwgdGhhdCBpbmNsdWRlcyBhIG5ld2xpbmUgYWx3YXlzIGhhcworCSAgICBhIGJhY2tzbGFzaCBiZWZvcmUgdGhlIG5ld2xpbmUuCitTb2x1dGlvbjogICBSZW1vdmUgb25lIGJhY2tzbGFzaCBiZWZvcmUgdGhlIG5ld2xpbmUuICAoU2VydmF0aXVzIEJyYW5kdCkKK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjEzNgorUHJvYmxlbTogICAgV2hlbiAkVEVSTSBpcyAibGludXgiIHRoZSBkZWZhdWx0IGZvciAnYmFja2dyb3VuZCcgaXMgImRhcmsiLCBldmVuCisJICAgIHRob3VnaCB0aGUgR1VJIHVzZXMgYSBsaWdodCBiYWNrZ3JvdW5kLiAoSHVnaCBBbGxlbikKK1NvbHV0aW9uOiAgIERvbid0IG1hcmsgdGhlIG9wdGlvbiBhcyBzZXQgd2hlbiBkZWZhdWx0aW5nIHRvICJkYXJrIiBmb3IgdGhlCisJICAgIGxpbnV4IGNvbnNvbGUuICBBbHNvIHJlc2V0ICdiYWNrZ3JvdW5kJyB0byAibGlnaHQiIHdoZW4gdGhlIEdVSQorCSAgICBoYXMgYSBsaWdodCBiYWNrZ3JvdW5kLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4xLjEzNworUHJvYmxlbTogICAgQ29udmVydGluZyB0byBIVE1MIGhhcyBhIGNsdW1zeSB3YXkgb2YgZGVhbGluZyB3aXRoIHRhYnMgd2hpY2ggbWF5CisJICAgIGNoYW5nZSB0aGUgaGlnaGxpZ2h0aW5nLgorU29sdXRpb246ICAgUmVwbGFjZSB0YWJzIHdpdGggc3BhY2VzIGFmdGVyIGNvbnZlcnRpbmcgYSBsaW5lIHRvIEhUTUwuIChQcmViZW4KKwkgICAgR3VsZGJlcmcpCitGaWxlczoJICAgIHJ1bnRpbWUvc3ludGF4LzJodG1sLnZpbQorCitQYXRjaCA2LjEuMTM4IChkZXBlbmRzIG9uIDYuMS4xMjYpCitQcm9ibGVtOiAgICBBZGRpbmcgZXh0cmEgaXRlbXMgdG8gdGhlIFN5bnRheCBtZW51IGNhbid0IGJlIGRvbmUgd2hlbiB0aGUgIlNob3cKKwkgICAgaW5kaXZpZHVhbCBjaG9pY2VzIiBtZW51IGlzIHVzZWQuCitTb2x1dGlvbjogICBVc2UgIjpydW50aW1lISIgaW5zdGVhZCBvZiAiOnNvdXJjZSIsIHNvIHRoYXQgYWxsIHN5bm1lbnUudmltCisJICAgIGZpbGVzIGluIHRoZSBydW50aW1lIHBhdGggYXJlIGxvYWRlZC4gKFNlcnZhdGl1cyBCcmFuZHQpCisJICAgIEFsc28gZml4IHRoYXQgYSB0cmFuc2xhdGVkIG1lbnUgY2FuJ3QgYmUgcmVtb3ZlZC4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjEuMTM5CitQcm9ibGVtOiAgICBDeWd3aW46IFBBVEhfTUFYIGlzIG5vdCBkZWZpbmVkLgorU29sdXRpb246ICAgSW5jbHVkZSBsaW1pdHMuaC4gKERhbiBTaGFycCkKK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjEuMTQwCitQcm9ibGVtOiAgICBDeWd3aW46ICI6YXJncyBgbHMgKi5jYCIgZG9lcyBub3Qgd29yayBpZiB0aGUgc2hlbGwgY29tbWFuZAorCSAgICBwcm9kdWNlcyBDUiBOTCBsaW5lIHNlcGFyYXRvcnMuCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIENSIGNoYXJhY3RlcnMgb3Vyc2VsdmVzLiAoUGF2b2wgSnVoYXMpCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xLjE0MQorUHJvYmxlbTogICAgIjp3aW5jbWQgZ3giIG1heSBjYXVzZSBwcm9ibGVtcyB3aGVuIG1peGVkIHdpdGggb3RoZXIgY29tbWFuZHMuCisJICAgICI6d2luY21kIGMiIGRvZXNuJ3QgY2xvc2UgdGhlIHdpbmRvdyBpbW1lZGlhdGVseS4gKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIFBhc3MgdGhlIGV4dHJhIGNvbW1hbmQgY2hhcmFjdGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmcgdGhlCisJICAgIHN0dWZmIGJ1ZmZlciBhbmQgY2FsbCBleF9jbG9zZSgpIGRpcmVjdGx5LgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL25vcm1hbC5jLCBzcmMvcHJvdG8vbm9ybWFsLnBybywKKwkgICAgc3JjL3Byb3RvL3dpbmRvdy5wcm8sIHNyYy93aW5kb3cuYworCitQYXRjaCA2LjEuMTQyCitQcm9ibGVtOiAgICBEZWZpbmluZyBwYXJhZ3JhcGhzIHdpdGhvdXQgYSBzZXBhcmF0aW5nIGJsYW5rIGxpbmUgaXNuJ3QKKwkgICAgcG9zc2libGUuICBQYXJhZ3JhcGhzIGNhbid0IGJlIGZvcm1hdHRlZCBhdXRvbWF0aWNhbGx5LgorU29sdXRpb246ICAgQWxsb3cgZGVmaW5pbmcgcGFyYWdyYXBocyB3aXRoIGxpbmVzIHRoYXQgZW5kIGluIHdoaXRlIHNwYWNlLgorCSAgICBBZGRlZCB0aGUgJ3cnIGFuZCAnYScgZmxhZ3MgaW4gJ2Zvcm1hdG9wdGlvbnMnLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9jaGFuZ2UudHh0LCBzcmMvZWRpdC5jLCBzcmMvbWlzYzEuYywgc3JjL25vcm1hbC5jLAorCSAgICBzcmMvb3B0aW9uLmgsIHNyYy9vcHMuYywgc3JjL3Byb3RvL2VkaXQucHJvLCBzcmMvcHJvdG8vb3BzLnBybywKKwkgICAgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMS4xNDMgKGRlcGVuZHMgb24gNi4xLjE0MikKK1Byb2JsZW06ICAgIEF1dG8gZm9ybWF0dGluZyBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUgbW92ZXMgdGhlIGN1cnNvciB0byBhCisJICAgIHdyb25nIHBvc2l0aW9uLiAgSW4gSW5zZXJ0IG1vZGUgc29tZSBsaW5lcyBhcmUgbWFkZSBvbmUgY2hhciB0b28KKwkgICAgbmFycm93LiAgV2hlbiBkZWxldGluZyBhIGxpbmUgdW5kbyBtaWdodCBub3QgYWx3YXlzIHdvcmsgcHJvcGVybHkuCitTb2x1dGlvbjogICBEb24ndCBhbHdheXMgbW92ZSB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIGluIHRoZSBsYXN0IGxpbmUuICBEb24ndAorCSAgICBwb3NpdGlvbiB0aGUgY3Vyc29yIHBhc3QgdGhlIGVuZCBvZiB0aGUgbGluZSBpbiBJbnNlcnQgbW9kZS4KKwkgICAgQWZ0ZXIgZGVsZXRpbmcgYSBsaW5lIHNhdmUgdGhlIGN1cnNvciBsaW5lIGZvciB1bmRvLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvb3BzLmMsIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjEuMTQ0CitQcm9ibGVtOiAgICBPYnRhaW5pbmcgdGhlIHNpemUgb2YgYSBsaW5lIGluIHNjcmVlbiBjaGFyYWN0ZXJzIGNhbiBiZSB3cm9uZy4KKwkgICAgQSBwb2ludGVyIG1heSB3cmFwIGFyb3VuZCB6ZXJvLgorU29sdXRpb246ICAgSW4gd2luX2xpbmV0YWJzaXplKCkgY2hlY2sgZm9yIGEgTUFYQ09MIGxlbmd0aCBhcmd1bWVudC4gKEppbQorCSAgICBEdW5sZWF2eSkKK0ZpbGVzOgkgICAgc3JjL2NoYXJzZXQuYworCitQYXRjaCA2LjEuMTQ1CitQcm9ibGVtOiAgICBHVEs6IERyYWcmZHJvcCB3aXRoIG1vcmUgdGhhbiAzIGZpbGVzIG1heSBjYXVzZSBhIGNyYXNoLiAoTWlja2FlbAorCSAgICBNYXJjaGFuZCkKK1NvbHV0aW9uOiAgIFJld3JpdGUgdGhlIGNvZGUgdGhhdCBwYXJzZXMgdGhlIHJlY2VpdmVkIGxpc3Qgb2YgZmlsZXMgdG8gYmUgbW9yZQorCSAgICByb2J1c3QuCitGaWxlczoJICAgIHNyYy9jaGFyc2V0LmMsIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMS4xNDYKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3M6IFdoZW4gJEhPTUUgaXMgY29uc3RydWN0ZWQgZnJvbSAkSE9NRURSSVZFIGFuZAorCSAgICAkSE9NRVBBVEgsIGl0IGlzIG5vdCB1c2VkIGZvciBzdG9yaW5nIHRoZSBfdmltaW5mbyBmaWxlLiAgKE5vcm1hbAorCSAgICBEaWFtb25kKQorU29sdXRpb246ICAgU2V0ICRIT01FIHdpdGggdGhlIHZhbHVlIG9idGFpbmVkIGZyb20gJEhPTUVEUklWRSBhbmQgJEhPTUVQQVRILgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA2LjEuMTQ3IChleHRyYSkKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3M6IFdoZW4gYSBkaWFsb2cgaGFzIG5vIGRlZmF1bHQgYnV0dG9uLCBwcmVzc2luZyBFbnRlcgorCSAgICBlbmRzIGl0IGFueXdheSBhbmQgYWxsIGJ1dHRvbnMgYXJlIHNlbGVjdGVkLgorU29sdXRpb246ICAgRG9uJ3QgZW5kIGEgZGlhbG9nIHdoZW4gdGhlcmUgaXMgbm8gZGVmYXVsdCBidXR0b24uICBEb24ndCBzZWxlY3QKKwkgICAgYWxsIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIGRlZmF1bHQuIChWaW5jZSBOZWdyaSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjEuMTQ4IChleHRyYSkKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3M6IEFDTCBpcyBub3QgcHJvcGVybHkgc3VwcG9ydGVkLgorU29sdXRpb246ICAgQWRkIGFuIGFjY2VzcygpIHJlcGxhY2VtZW50IHRoYXQgYWxzbyB3b3JrcyBmb3IgQUNMLiAoTWlrZQorCSAgICBXaWxsaWFtcykKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZWRpdGluZy50eHQsIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMS4xNDkgKGV4dHJhKQorUHJvYmxlbTogICAgTVMtV2luZG93czogQ2FuJ3QgdXNlIGRpZmYgbW9kZSBmcm9tIHRoZSBmaWxlIGV4cGxvcmVyLgorU29sdXRpb246ICAgQWRkIGEgImRpZmYgd2l0aCBWaW0iIGNvbnRleHQgbWVudSBlbnRyeS4gKERhbiBTaGFycCkKK0ZpbGVzOgkgICAgR3ZpbUV4dC9ndmltZXh0LmNwcCwgR3ZpbUV4dC9ndmltZXh0LmgKKworUGF0Y2ggNi4xLjE1MAorUHJvYmxlbTogICAgT1MvMiwgTVMtV2luZG93cyBhbmQgTVMtRE9TOiBXaGVuICdzaGVsbHNsYXNoJyBpcyBzZXQgZ2V0Y3dkKCkKKwkgICAgc3RpbGwgdXNlcyBiYWNrc2xhc2guIChZZWdhcHBhbiBMYWtzaG1hbmFuKQorU29sdXRpb246ICAgQWRqdXN0IHNsYXNoZXMgaW4gZ2V0Y3dkKCkuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjE1MSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogVGhlIE5URlMgc3Vic3RyZWFtIGlzbid0IGNvcGllZC4KK1NvbHV0aW9uOiAgIENvcHkgdGhlIHN1YnN0cmVhbSB3aGVuIG1ha2luZyBhIGJhY2t1cCBjb3B5LiAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9vc193aW4zMi5jLCBzcmMvcHJvdG8vb3Nfd2luMzIucHJvCisKK1BhdGNoIDYuMS4xNTIKK1Byb2JsZW06ICAgIFdoZW4gJExBTkcgaXMgaXNvODg1OS0xIHRyYW5zbGF0ZWQgbWVudXMgYXJlIG5vdCB1c2VkLgorU29sdXRpb246ICAgQ2hhbmdlIGlzbzg4NTkgdG8gaXNvXzg4NTkuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4xLjE1MworUHJvYmxlbTogICAgU2VhcmNoaW5nIGluIGluY2x1ZGVkIGZpbGVzIG1heSBzZWFyY2ggcmVjdXJzaXZlbHkgd2hlbiB0aGUgcGF0aAorCSAgICBzdGFydHMgd2l0aCAiLi4vIi4gIChTdmVuIEJlcmt2ZW5zLU1hdHRoaWpzc2UpCitTb2x1dGlvbjogICBDb21wYXJlIGZ1bGwgZmlsZSBuYW1lcywgdXNlIGlub2RlL2RldmljZSB3aGVuIHBvc3NpYmxlLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4xLjE1NCAoZXh0cmEpCitQcm9ibGVtOiAgICBESkdQUDogInZpbSAtaCIgbGVhdmVzIHRoZSBjdXJzb3IgaW4gYSB3cm9uZyBwb3NpdGlvbi4KK1NvbHV0aW9uOiAgIERvbid0IHBvc2l0aW9uIHRoZSBjdXJzb3IgdXNpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIChKaW0KKwkgICAgRHVubGVhdnkpCitGaWxlczoJICAgIHNyYy9vc19tc2Rvcy5jCisKK1BhdGNoIDYuMS4xNTUKK1Byb2JsZW06ICAgIFdpbjMyOiBDdXJzb3IgbWF5IHNvbWV0aW1lcyBkaXNhcHBlYXIgaW4gSW5zZXJ0IG1vZGUuCitTb2x1dGlvbjogICBDaGFuZ2UgImhvcjEwIiBpbiAnZ3VpY3Vyc29yJyB0byAiaG9yMTUiLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjEuMTU2CitQcm9ibGVtOiAgICBDb252ZXJzaW9uIGJldHdlZW4gREJDUyBhbmQgVUNTLTIgaXNuJ3QgaW1wbGVtZW50ZWQgY2xlYW5seS4KK1NvbHV0aW9uOiAgIENsZWFuIHVwIGEgZmV3IHRoaW5ncy4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMsIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4xLjE1NworUHJvYmxlbTogICAgJ2hsc2VhcmNoJyBoaWdobGlnaHRzIG9ubHkgdGhlIHNlY29uZCBjb21tYSBpbiAiLCwsLCwiIHdpdGgKKwkgICAgIi8sXEA8PVteLF0qIi4gKFByZWJlbiBHdWxkYmVyZykKK1NvbHV0aW9uOiAgIEFsc28gY2hlY2sgZm9yIGFuIGVtcHR5IG1hdGNoIHRvIHN0YXJ0IGp1c3QgYWZ0ZXIgYSBwcmV2aW91cworCSAgICBtYXRjaC4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4xNTgKK1Byb2JsZW06ICAgICJ6cyIgYW5kICJ6ZSIgZG9uJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCAiOnNldCBub3dyYXAgc2lzbz0xIi4KKwkgICAgKFByZWJlbiBHdWxkYmVyZykKK1NvbHV0aW9uOiAgIFRha2UgJ3Npc28nIGludG8gYWNjb3VudCB3aGVuIGNvbXB1dGluZyB0aGUgaG9yaXpvbnRhbCBzY3JvbGwKKwkgICAgcG9zaXRpb24gZm9yICJ6cyIgYW5kICJ6ZSIuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjEuMTU5CitQcm9ibGVtOiAgICBXaGVuIGV4cGFuZGluZyBhbiBhYmJyZXZpYXRpb24gdGhhdCBpbmNsdWRlcyBhIG11bHRpLWJ5dGUKKwkgICAgY2hhcmFjdGVyIHRvbyBtYW55IGNoYXJhY3RlcnMgYXJlIGRlbGV0ZWQuIChBbmRyZXkgVXJhem92KQorU29sdXRpb246ICAgRGVsZXRlIHRoZSBhYmJyZXZpYXRpb24gY291bnRpbmcgY2hhcmFjdGVycyBpbnN0ZWFkIG9mIGJ5dGVzLgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jCisKK1BhdGNoIDYuMS4xNjAKK1Byb2JsZW06ICAgICI6JHJlYWQgZmlsZS5neiIgZG9lc24ndCB3b3JrLiAoUHJlYmVuIEd1bGRiZXJnKQorU29sdXRpb246ICAgRG9uJ3QgdXNlIHRoZSAnWyBtYXJrIGFmdGVyIGl0IGhhcyBiZWNvbWUgaW52YWxpZC4KK0ZpbGVzOgkgICAgcnVudGltZS9wbHVnaW4vZ3ppcC52aW0KKworUGF0Y2ggNi4xLjE2MSAoZGVwZW5kcyBvbiA2LjEuMTU4KQorUHJvYmxlbTogICAgV2FybmluZyBmb3Igc2lnbmVkL3Vuc2lnbmVkIGNvbXBhcmUuICBDYW4gc2V0ICdzaXNvJyB0byBhIG5lZ2F0aXZlCisJICAgIHZhbHVlLiAoTWlrZSBXaWxsaWFtcykKK1NvbHV0aW9uOiAgIEFkZCBhIHR5cGVjYXN0LiAgQWRkIGEgY2hlY2sgZm9yICdzaXNvJyBiZWluZyBuZWdhdGl2ZS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jLCBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4xLjE2MgorUHJvYmxlbTogICAgUHl0aG9uIGludGVyZmFjZTogRGlkbid0IGluaXRpYWxpemUgdGhyZWFkcyBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIENhbGwgUHlFdmFsX0luaXRUaHJlYWRzKCkgd2hlbiBzdGFydGluZyB1cC4KK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMS4xNjMKK1Byb2JsZW06ICAgIFdpbjMyOiBDYW4ndCBjb21waWxlIHdpdGggUHl0aG9uIGFmdGVyIDYuMS4xNjIuCitTb2x1dGlvbjogICBEeW5hbWljYWxseSBsb2FkICBQeUV2YWxfSW5pdFRocmVhZHMoKS4gKERhbiBTaGFycCkKK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMS4xNjQKK1Byb2JsZW06ICAgIElmICdtb2RpZmlhYmxlJyBpcyBvZmYsIGNvbnZlcnRpbmcgdG8geHhkIGZhaWxzIGFuZCAnZmlsZXR5cGUnIGlzCisJICAgIGNoYW5nZWQgdG8gInh4ZCIgYW55d2F5LgorU29sdXRpb246ICAgRG9uJ3QgY2hhbmdlICdmaWxldHlwZScgd2hlbiBjb252ZXJzaW9uIGZhaWxlZC4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjEuMTY1CitQcm9ibGVtOiAgICBNYWtpbmcgY2hhbmdlcyBpbiBzZXZlcmFsIGxpbmVzIGFuZCB0aGVuIGEgY2hhbmdlIGluIG9uZSBvZiB0aGVzZQorCSAgICBsaW5lcyB0aGF0IHNwbGl0cyBpdCBpbiB0d28gb3IgbW9yZSBsaW5lcywgdW5kbyBpbmZvcm1hdGlvbiB3YXMKKwkgICAgY29ycnVwdGVkLiAgTWF5IGNhdXNlIGEgY3Jhc2guIChEYXZlIEZpc2hidXJuKQorU29sdXRpb246ICAgV2hlbiBza2lwcGluZyB0byBzYXZlIGEgbGluZSBmb3IgdW5kbyBiZWNhdXNlIGl0IHdhcyBhbHJlYWR5CisJICAgIHNhdmVkLCBtb3ZlIGl0IHRvIGJlY29tZSB0aGUgbGFzdCBzYXZlZCBsaW5lLCBzbyB0aGF0IHdoZW4gdGhlCisJICAgIGNvbW1hbmQgY2hhbmdlcyB0aGUgbGluZSBjb3VudCBvdGhlciBzYXZlZCBsaW5lcyBhcmUgbm90IGludm9sdmVkLgorRmlsZXM6CSAgICBzcmMvdW5kby5jCisKK1BhdGNoIDYuMS4xNjYKK1Byb2JsZW06ICAgIFdoZW4gJ2F1dG9pbmRlbnQnIGlzIHNldCBhbmQgbXN3aW4udmltIGhhcyBiZWVuIHNvdXJjZWQsIHBhc3RpbmcKKwkgICAgd2l0aCBDVFJMLVYganVzdCBhZnRlciBhdXRvLWluZGVudGluZyByZW1vdmVzIHRoZSBpbmRlbnQuIChTaGxvbWkKKwkgICAgRmlzaCkKK1NvbHV0aW9uOiAgIEZpcnN0IGluc2VydCBhbiAieCIgYW5kIGRlbGV0ZSBpdCBhZ2Fpbiwgc28gdGhhdCB0aGUgYXV0by1pbmRlbnQKKwkgICAgcmVtYWlucy4KK0ZpbGVzOgkgICAgcnVudGltZS9tc3dpbi52aW0KKworUGF0Y2ggNi4xLjE2NworUHJvYmxlbTogICAgV2hlbiBnaXZpbmcgYSBuZWdhdGl2ZSBhcmd1bWVudCB0byAiOnJldGFiIiBzdHJhbmdlIHRoaW5ncyBzdGFydAorCSAgICBoYXBwZW5pbmcuIChIYW5zIEdpbnplbCkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIG5lZ2F0aXZlIHZhbHVlLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMS4xNjgKK1Byb2JsZW06ICAgIFByZXNzaW5nIENUUkwtQyBhdCB0aGUgaGl0LWVudGVyIHByb21wdCBkb2Vzbid0IGVuZCB0aGUgcHJvbXB0LgorU29sdXRpb246ICAgTWFrZSBDVFJMLUMgc3RvcCB0aGUgaGl0LWVudGVyIHByb21wdC4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYworCitQYXRjaCA2LjEuMTY5CitQcm9ibGVtOiAgICBidWZleGlzdHMoKSBmaW5kcyBhIGJ1ZmZlciBieSB1c2luZyB0aGUgbmFtZSBvZiBhIHN5bWJvbGljIGxpbmsgdG8KKwkgICAgaXQsIGJ1dCBidWZucigpIGRvZXNuJ3QuIChZZWdhcHBhbiBMYWtzaG1hbmFuKQorU29sdXRpb246ICAgV2hlbiBidWZucigpIGNhbid0IGZpbmQgYSBidWZmZXIsIHRyeSB1c2luZyB0aGUgc2FtZSBtZXRob2QgYXMKKwkgICAgYnVmZXhpc3RzKCkuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjE3MAorUHJvYmxlbTogICAgVXNpbmcgIjpta3Nlc3Npb24iIHVzZXMgdGhlIGRlZmF1bHQgc2Vzc2lvbiBmaWxlIG5hbWUsIGJ1dCAidmltCisJICAgIC1TIiBkb2Vzbid0LiAoSGFucyBHaW56ZWwpCitTb2x1dGlvbjogICBVc2UgdGhlIGRlZmF1bHQgc2Vzc2lvbiBmaWxlIG5hbWUgaWYgIi1TIiBpcyB0aGUgbGFzdCBjb21tYW5kCisJICAgIGxpbmUgYXJndW1lbnQgb3IgYW5vdGhlciBvcHRpb24gZm9sbG93cy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvc3RhcnRpbmcudHh0LCBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS4xNzEKK1Byb2JsZW06ICAgIFdoZW4gb3BlbmluZyBhIGxpbmUganVzdCBhYm92ZSBhIGNsb3NlZCBmb2xkIHdpdGggIk8iIGFuZCB0aGUKKwkgICAgY29tbWVudCBsZWFkZXIgaXMgYXV0b21hdGljYWxseSBpbnNlcnRlZCwgdGhlIGN1cnNvciBpcyBkaXNwbGF5ZWQKKwkgICAgaW4gdGhlIGZpcnN0IGNvbHVtbi4gKFN1bmctSHl1biBOYW0pCitTb2x1dGlvbjogICBVcGRhdGUgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhlIGN1cnNvciBpcyBpbiBhIGNsb3NlZCBmb2xkLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA2LjEuMTcyCitQcm9ibGVtOiAgICBDb21tYW5kIGxpbmUgY29tcGxldGlvbiBvZiAiOnRhZyAvcGF0IiBkb2VzIG5vdCBzaG93IHRoZSBzYW1lCisJICAgIHJlc3VsdHMgYXMgdGhlIHRhZ3MgdGhlIGNvbW1hbmQgYWN0dWFsbHkgZmluZHMuIChHaWxsZXMgUm95KQorU29sdXRpb246ICAgRG9uJ3QgbW9kaWZ5IHRoZSBwYXR0ZXJuIHRvIG1ha2UgaXQgYSByZWdleHAuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jLCBzcmMvdGFnLmMKKworUGF0Y2ggNi4xLjE3MworUHJvYmxlbTogICAgV2hlbiB1c2luZyByZW1vdGUgY29udHJvbCB0byBlZGl0IGEgcG9zaXRpb24gaW4gYSBmaWxlIGFuZCB0aGlzCisJICAgIGZpbGUgaXMgdGhlIGN1cnJlbnQgYnVmZmVyIGFuZCBpdCdzIG1vZGlmaWVkLCB0aGUgd2luZG93IGlzIHNwbGl0CisJICAgIGFuZCB0aGUgIjpkcm9wIiBjb21tYW5kIGZhaWxzLgorU29sdXRpb246ICAgRG9uJ3Qgc3BsaXQgdGhlIHdpbmRvdywga2VlcCBlZGl0aW5nIHRoZSBzYW1lIGJ1ZmZlci4KKwkgICAgVXNlIHRoZSAiOmRyb3AiIGNvbW1hbmQgaW4gVmlzVmltIHRvIGF2b2lkIHRoZSBwcm9ibGVtIHRoZXJlLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jLCBzcmMvZXhfY21kczIuYywgc3JjL3Byb3RvL2V4X2NtZHMyLnBybywKKwkgICAgVmlzVmltL0NvbW1hbmRzLmNwcAorCitQYXRjaCA2LjEuMTc0CitQcm9ibGVtOiAgICBJdCBpcyBkaWZmaWN1bHQgdG8ga25vdyBpbiBhIHNjcmlwdCB3aGV0aGVyIGFuIG9wdGlvbiBub3Qgb25seQorCSAgICBleGlzdHMgYnV0IHJlYWxseSB3b3Jrcy4KK1NvbHV0aW9uOiAgIEFkZCAiZXhpc3RzKCcrb3B0aW9uJykiLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9ldmFsLnR4dCwgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMTc1CitQcm9ibGVtOiAgICBXaGVuIHJlYWRpbmcgY29tbWFuZHMgZnJvbSBhIHBpcGUgYW5kIGEgQ1RSTC1DIGlzIHByZXNzZWQsIFZpbQorCSAgICB3aWxsIGhhbmcuIChQaWV0IERlbHBvcnQpCitTb2x1dGlvbjogICBEb24ndCBrZWVwIHJlYWRpbmcgY2hhcmFjdGVycyB0byBjbGVhciB0eXBlYWhlYWQgd2hlbiBhbiBpbnRlcnJ1cHQKKwkgICAgd2FzIGRldGVjdGVkLCBzdG9wIHdoZW4gYSBzaW5nbGUgQ1RSTC1DIGlzIHJlYWQuCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMsIHNyYy91aS5jCisKK1BhdGNoIDYuMS4xNzYKK1Byb2JsZW06ICAgIFdoZW4gdGhlIHN0YWNrIGxpbWl0IGlzIHZlcnkgYmlnIGEgZmFsc2Ugb3V0LW9mLXN0YWNrIGVycm9yIG1heQorCSAgICBiZSBkZXRlY3RlZC4KK1NvbHV0aW9uOiAgIEFkZCBhIGNoZWNrIGZvciBvdmVyZmxvdyBvZiB0aGUgc3RhY2sgbGltaXQgY29tcHV0YXRpb24uIChKaW0KKwkgICAgRHVubGVhdnkpCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xLjE3NyAoZGVwZW5kcyBvbiA2LjEuMTQxKQorUHJvYmxlbTogICAgIjp3aW5jbWQiIGRvZXMgbm90IGFsbG93IGEgZm9sbG93aW5nIGNvbW1hbmQuIChHYXJ5IEpvaG5zb24pCitTb2x1dGlvbjogICBDaGVjayBmb3IgYSBmb2xsb3dpbmcgIiB8IGNtZCIuICBBbHNvIGdpdmUgYW4gZXJyb3IgZm9yIHRyYWlsaW5nCisJICAgIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4xNzgKK1Byb2JsZW06ICAgIFdoZW4gJ2V4cGFuZHRhYicgaXMgc2V0ICJyPEMtVj48VGFiPiIgc3RpbGwgZXhwYW5kcyB0aGUgVGFiLgorCSAgICAoQnJ1Y2UgZGVWaXNzZXIpCitTb2x1dGlvbjogICBSZXBsYWNlIHdpdGggYSBsaXRlcmFsIFRhYi4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMS4xNzkgKGRlcGVuZHMgb24gNi4xLjA5MSkKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgWDExUjUgWElNUHJlc2VydmVTdGF0ZSBpcyB1bmRlZmluZWQuIChBbGJlcnQgQ2hpbikKK1NvbHV0aW9uOiAgIEluY2x1ZGUgdGhlIG1pc3NpbmcgZGVmaW5pdGlvbnMuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMS4xODAKK1Byb2JsZW06ICAgIFVzZSBvZiB0aGUgR1VJIGNvZGUgZm9yIGZvcmtpbmcgaXMgaW5jb25zaXN0ZW50LgorU29sdXRpb246ICAgRGVmaW5lIE1BWV9GT1JLIGFuZCB1c2UgaXQgZm9yIGxhdGVyICNpZmRlZnMuIChCZW4gRm93bHdlcikKK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMS4xODEKK1Byb2JsZW06ICAgIElmIHRoZSB0ZXJtaW5hbCBkb2Vzbid0IHdyYXAgZnJvbSB0aGUgbGFzdCBjaGFyIGluIGEgbGluZSB0byB0aGUKKwkgICAgbmV4dCBsaW5lLCB0aGUgbGFzdCBjb2x1bW4gaXMgYmxhbmtlZCBvdXQuIChQZXRlciBLYXJwKQorU29sdXRpb246ICAgRG9uJ3Qgb3V0cHV0IGEgc3BhY2UgdG8gbWFyayB0aGUgd3JhcCwgYnV0IHRoZSBzYW1lIGNoYXJhY3RlcgorCSAgICBhZ2Fpbi4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4xODIgKGRlcGVuZHMgb24gNi4xLjE0MikKK1Byb2JsZW06ICAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhdXRvLWZvcm1hdCBjb21tZW50cyBvbmx5LiAoTW9zaGUgS2FtaW5za3kpCitTb2x1dGlvbjogICBXaGVuIHRoZSAnYScgYW5kICdjJyBmbGFncyBhcmUgaW4gJ2Zvcm1hdG9wdGlvbnMnIG9ubHkgYXV0by1mb3JtYXQKKwkgICAgY29tbWVudHMuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2NoYW5nZS50eHQsIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4xLjE4MworUHJvYmxlbTogICAgV2hlbiAnZmVuY3MnIGlzIGVtcHR5IGFuZCAnZW5jJyBpcyB1dGYtOCwgcmVhZGluZyBhIGZpbGUgd2l0aAorCSAgICBpbGxlZ2FsIGJ5dGVzIGdpdmVzICJDT05WRVJTSU9OIEVSUk9SIiBldmVuIHRob3VnaCBubyBjb252ZXJzaW9uCisJICAgIGlzIGRvbmUuICAncmVhZG9ubHknIGlzIHNldCwgZXZlbiB0aG91Z2ggd3JpdGluZyB0aGUgZmlsZSByZXN1bHRzCisJICAgIGluIGFuIHVubW9kaWZpZWQgZmlsZS4KK1NvbHV0aW9uOiAgIEZvciB0aGlzIHNwZWNpZmljIGVycm9yIHVzZSAiSUxMRUdBTCBCWVRFIiBhbmQgZG9uJ3Qgc2V0CisJICAgICdyZWFkb25seScuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMTg0IChleHRyYSkKK1Byb2JsZW06ICAgIFRoZSBleHRyYSBtb3VzZSBidXR0b25zIGZvdW5kIG9uIHNvbWUgbWljZSBkb24ndCB3b3JrLgorU29sdXRpb246ICAgU3VwcG9ydCB0d28gZXh0cmEgYnV0dG9ucyBmb3IgTVMtV2luZG93cy4gKE1pY2hhZWwgR2VkZGVzKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy90ZXJtLnR4dCwgc3JjL2VkaXQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9ndWkuYywKKwkgICAgc3JjL2d1aV93MzIuYywgc3JjL2d1aV93NDguYywgc3JjL2tleW1hcC5oLCBzcmMvbWVzc2FnZS5jLAorCSAgICBzcmMvbWlzYzEuYywgc3JjL21pc2MyLmMsIHNyYy9ub3JtYWwuYy4gc3JjL3ZpbS5oCisKK1BhdGNoIDYuMS4xODUgKGRlcGVuZHMgb24gNi4xLjE4MikKK1Byb2JsZW06ICAgIENhbid0IGNvbXBpbGUgd2l0aG91dCArY29tbWVudHMgZmVhdHVyZS4KK1NvbHV0aW9uOiAgIEFkZCAjaWZkZWYgRkVBVF9DT01NRU5UUy4gKENocmlzdGlhbiBKLiBSb2JpbnNvbikKK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjEuMTg2IChkZXBlbmRzIG9uIDYuMS4xNzcpCitQcm9ibGVtOiAgICAiOndpbmNtZCIgZG9lcyBub3QgYWxsb3cgYSBmb2xsb3dpbmcgY29tbWVudC4gKEFyaWMgQmx1bWVyKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgZm9sbG93aW5nIGRvdWJsZSBxdW90ZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjE4NworUHJvYmxlbTogICAgVXNpbmcgIjpkb2FyZyIgd2l0aCAnaGlkZGVuJyBzZXQgYW5kIHRoZSBjdXJyZW50IGZpbGUgaXMgdGhlIG9ubHkKKwkgICAgYXJndW1lbnQgYW5kIHdhcyBtb2RpZmllZCBnaXZlcyBhbiBlcnJvciBtZXNzYWdlLiAoUHJlYmVuCisJICAgIEd1bGRiZXJnKQorU29sdXRpb246ICAgRG9uJ3QgdHJ5IHJlLWVkaXRpbmcgdGhlIHNhbWUgZmlsZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4xLjE4OCAoZGVwZW5kcyBvbiA2LjEuMTczKQorUHJvYmxlbTogICAgVW51c2VkIHZhcmlhYmxlIGluIHRoZSBzbWFsbCB2ZXJzaW9uLgorU29sdXRpb246ICAgTW92ZSB0aGUgZGVjbGFyYXRpb24gZm9yICJwIiBpbnNpZGUgI2lmZGVmIEZFQVRfTElTVENNRFMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMS4xODkKK1Byb2JsZW06ICAgIGlucHV0ZGlhbG9nKCkgZG9lc24ndCB3b3JrIHdoZW4gJ2MnIGlzIGluICdndWlvcHRpb25zJy4gKEFyaWMKKwkgICAgQmx1bWVyKQorU29sdXRpb246ICAgRmFsbCBiYWNrIHRvIHRoZSBpbnB1dCgpIGZ1bmN0aW9uIGluIHRoaXMgc2l0dWF0aW9uLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4xOTAgKGV4dHJhKQorUHJvYmxlbTogICAgVk1TOiBkb2Vzbid0IGJ1aWxkIHdpdGggR1RLIEdVSS4gIFZhcmlvdXMgb3RoZXIgcHJvYmxlbXMuCitTb2x1dGlvbjogICBGaXggYnVpbGRpbmcgZm9yIEdUSy4gIEltcHJvdmVkIFBlcmwsIFB5dGhvbiBhbmQgVENMIHN1cHBvcnQuCisJICAgIEltcHJvdmVkIFZNUyBkb2N1bWVudGF0aW9uLiAoWm9sdGFuIEFycGFkZmZ5KQorCSAgICBBZGRlZCBWaW10dXRvciBmb3IgVk1TIChULiBSLiBXeWFudCkKK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3Nfdm1zLnR4dCwgc3JjL0lOU1RBTEx2bXMudHh0LCBzcmMvZ3VpX2d0a19mLmgsCisJICAgIHNyYy9pZl90Y2wuYywgc3JjL21haW4uYywgc3JjL2d1aV9ndGtfdm1zLmgsIHNyYy9NYWtlX3Ztcy5tbXMsCisJICAgIHNyYy9vc192bXMub3B0LCBzcmMvcHJvdG8vaWZfdGNsLnBybywgdmltdHV0b3IuY29tLAorCSAgICBzcmMvdGVzdGRpci9NYWtlX3Ztcy5tbXMKKworUGF0Y2ggNi4xLjE5MQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAidmltIC1zIHNjcmlwdCIgYW5kIHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQsIHRoZSBkZWxheQorCSAgICBmb3IgdGhlICJPdXRwdXQgaXMgbm90IHRvIGEgdGVybWluYWwiIHdhcm5pbmcgc2xvd3MgVmltIGRvd24gdG9vCisJICAgIG11Y2guCitTb2x1dGlvbjogICBEb24ndCBkZWxheSB3aGVuIHJlYWRpbmcgY29tbWFuZHMgZnJvbSBhIHNjcmlwdC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjEuMTkyCitQcm9ibGVtOiAgICAiOmRpZmZzcGxpdCIgZG9lc24ndCBhZGQgImhvciIgdG8gJ3Njcm9sbG9wdCcuIChHYXJ5IEpvaG5zb24pCitTb2x1dGlvbjogICBBZGQgImhvciIgdG8gJ3Njcm9sbG9wdCcgZWFjaCB0aW1lICI6ZGlmZnNwbGl0IiBpcyB1c2VkLgorRmlsZXM6CSAgICBzcmMvZGlmZi5jLCBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS4xOTMKK1Byb2JsZW06ICAgIENyYXNoIGluIGluX2lkX2xpc3QoKSBmb3IgYW4gaXRlbSB3aXRoIGEgImNvbnRhaW5lZGluIiBsaXN0LiAoRGF2ZQorCSAgICBGaXNoYnVybikKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIG5lZ2F0aXZlIHN5bnRheCBpZCwgdXNlZCBmb3Iga2V5d29yZHMuCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA2LjEuMTk0CitQcm9ibGVtOiAgICBXaGVuICJ0X3RpIiBpcyBzZXQgYnV0IGl0IGRvZXNuJ3QgY2F1c2Ugc3dhcHBpbmcgdGVybWluYWwgcGFnZXMsCisJICAgICJaWiIgbWF5IGNhdXNlIHRoZSBzaGVsbCBwcm9tcHQgdG8gYXBwZWFyIG9uIHRvcCBvZiB0aGUgZmlsZS13cml0ZQorCSAgICBtZXNzYWdlLgorU29sdXRpb246ICAgU2Nyb2xsIHRoZSB0ZXh0IHVwIGluIHRoZSBWaW0gcGFnZSBiZWZvcmUgc3dhcHBpbmcgdG8gdGhlIHRlcm1pbmFsCisJICAgIHBhZ2UuIChNaWNoYWVsIFNjaHJvZWRlcikKK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuMTk1CitQcm9ibGVtOiAgICBUaGUgcXVpY2tmaXggYW5kIHByZXZpZXcgd2luZG93cyBhbHdheXMga2VlcCB0aGVpciBoZWlnaHQsIHdoaWxlCisJICAgIG90aGVyIHdpbmRvd3MgY2FuJ3QgZml4IHRoZWlyIGhlaWdodC4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgJ3dpbmZpeGhlaWdodCcgb3B0aW9uLCBzbyB0aGF0IGEgZml4ZWQgaGVpZ2h0IGNhbiBiZQorCSAgICBzcGVjaWZpZWQgZm9yIGFueSB3aW5kb3cuICBBbHNvIGZpeCB0aGF0IHRoZSB3aWxkbWVudSBtYXkgcmVzaXplIGEKKwkgICAgb25lLWxpbmUgd2luZG93IHRvIGEgdHdvLWxpbmUgd2luZG93IGlmICdscycgaXMgemVyby4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHJ1bnRpbWUvb3B0d2luLnZpbSwgc3JjL2V4X2NtZHMuYywKKwkgICAgc3JjL2V4X2dldGxuLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9vcHRpb24uYywgc3JjL3F1aWNrZml4LmMsCisJICAgIHNyYy9zY3JlZW4uYywgc3JjL3N0cnVjdHMuaCwgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMS4xOTYgIChkZXBlbmRzIG9uIDYuMS4wODQpCitQcm9ibGVtOiAgICBPbiBNYWMgT1MgWCAxMC4yIGdlbmVyYXRpbmcgb3NkZWYuaCBmYWlscy4KK1NvbHV0aW9uOiAgIEFkZCAtbm8tY3BwLXByZWNvbXAgdG8gYXZvaWQgdXNpbmcgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGVzLCB3aGljaAorCSAgICBkaXNhYmxlcyBwcmludGluZyB0aGUgc2VhcmNoIHBhdGguIChCZW4gRm93bGVyKQorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4xLjE5NworUHJvYmxlbTogICAgIjpoZWxwIDxDLVY+PEMtXD48Qy1WPjxDLU4+IiAocmVzdWx0aW5nIGluIDwxYz48MGU+KSBnaXZlcyBhbgorCSAgICBlcnJvciBtZXNzYWdlLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIERvdWJsZSB0aGUgYmFja3NsYXNoIGluICJDVFJMLVwiLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMS4xOTggKGV4dHJhKSAoZGVwZW5kcyBvbiA2LjEuMDc2KQorUHJvYmxlbTogICAgTWFjIE9TIFg6IERpYWxvZ3VlcyBkb24ndCB3b3JrLgorU29sdXRpb246ICAgRml4IGEgY3Jhc2hpbmcgcHJvYmxlbSBmb3Igc29tZSBHVUkgZGlhbG9ndWVzLiAgRml4IGEgcHJvYmxlbSB3aGVuCisJICAgIHNhdmluZyB0byBhIG5ldyBmaWxlIGZyb20gdGhlIEdVSS4gKFBldGVyIEN1Y2thKQorRmlsZXM6CSAgICBzcmMvZmVhdHVyZS5oLCBzcmMvZ3VpX21hYy5jCisKK1BhdGNoIDYuMS4xOTkKK1Byb2JsZW06ICAgICdndWlmb250d2lkZScgZG9lc24ndCB3b3JrIG9uIFdpbjMyLgorU29sdXRpb246ICAgT3V0cHV0IGVhY2ggd2lkZSBjaGFyYWN0ZXIgc2VwYXJhdGVseS4gKE1pY2hhZWwgR2VkZGVzKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4xLjIwMAorUHJvYmxlbTogICAgIjpzeW4gc3luYyBmcm9tc3RhcnQiIGlzIG5vdCBza2lwcGVkIGFmdGVyICI6aWYgMCIuICBUaGlzIGNhbiBtYWtlCisJICAgIHN5bnRheCBoaWdobGlnaHRpbmcgdmVyeSBzbG93LgorU29sdXRpb246ICAgQ2hlY2sgImVhcC0+c2tpcCIgYXBwcm9wcmlhdGVseS4gKFJvYiBXZXN0KQorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4xLjIwMSAoZGVwZW5kcyBvbiA2LjEuMTkyKQorUHJvYmxlbTogICAgV2FybmluZyBmb3IgaWxsZWdhbCBwb2ludGVyIGNvbWJpbmF0aW9uLiAoWm9sdGFuIEFycGFkZmZ5KQorU29sdXRpb246ICAgQWRkIGEgdHlwZWNhc3QuCitGaWxlczoJICAgIHNyYy9kaWZmLmMKKworUGF0Y2ggNi4xLjIwMiAgKGV4dHJhKShkZXBlbmRzIG9uIDYuMS4xNDgpCitQcm9ibGVtOiAgICBXaW4zMjogZmlsZXdyaXRhYmxlKCkgZG9lc24ndCB3b3JrIHByb3Blcmx5IG9uIGRpcmVjdG9yaWVzLgorU29sdXRpb246ICAgZml4IGZpbGV3cml0YWJsZSgpLiAoTWlrZSBXaWxsaWFtcykKK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4xLjIwMworUHJvYmxlbTogICAgIjolcy9+Ly8iIGNhdXNlcyBhIGNyYXNoIGFmdGVyICI6JXMveC8vIi4gKEdhcnkgSG9sbG93YXkpCitTb2x1dGlvbjogICBBdm9pZCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhIGxpbmUgd2hlbiAifiIgaXMgZW1wdHkuCitGaWxlczoJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjEuMjA0IChkZXBlbmRzIG9uIDYuMS4xMjkpCitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciBhbiBpbGxlZ2FsIHBvaW50ZXIgb24gU29sYXJpcy4KK1NvbHV0aW9uOiAgIEFkZCBhIHR5cGVjYXN0LiAoRGVyZWsgV3lhdHQpCitGaWxlczoJICAgIHNyYy9taXNjMi5jCisKK1BhdGNoIDYuMS4yMDUKK1Byb2JsZW06ICAgIFRoZSBnemlwIHBsdWdpbiBjaGFuZ2VzIHRoZSBhbHRlcm5hdGUgZmlsZSB3aGVuIGVkaXRpbmcgYQorCSAgICBjb21wcmVzc2VkIGZpbGUuIChPbGl2ZXIgRnVjaHMpCitTb2x1dGlvbjogICBUZW1wb3JhcmlseSByZW1vdmUgdGhlICdhJyBhbmQgJ0EnIGZsYWdzIGZyb20gJ2NwbycuCitGaWxlczoJICAgIHJ1bnRpbWUvcGx1Z2luL2d6aXAudmltCisKK1BhdGNoIDYuMS4yMDYKK1Byb2JsZW06ICAgIFRoZSBzY3JpcHQgZ2VuZXJhdGVkIHdpdGggIjpta3Nlc3Npb24iIGRvZXNuJ3Qgd29yayBwcm9wZXJseSB3aGVuCisJICAgIHNvbWUgY29tbWFuZHMgYXJlIG1hcHBlZC4KK1NvbHV0aW9uOiAgIFVzZSAiOm5vcm1hbCEiIGluc3RlYWQgb2YgIjpub3JtYWwiLiAgQW5kIHVzZSAiOndpbmNtZCIgd2hlcmUKKwkgICAgcG9zc2libGUuIChNdXJhb2thIFRhcm8pCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvZm9sZC5jCisKK1BhdGNoIDYuMS4yMDcKK1Byb2JsZW06ICAgIEluZGVudGluZyBhIEphdmEgZmlsZSBoYW5ncyBiZWxvdyBhIGxpbmUgd2l0aCBhIGNvbW1lbnQgYWZ0ZXIgYQorCSAgICBjb21tYW5kLgorU29sdXRpb246ICAgQnJlYWsgb3V0IG9mIGEgbG9vcC4gKEFuZHJlIFBhbmcpCisJICAgIEFsc28gbGluZSB1cCB9IHdpdGggbWF0Y2hpbmcgey4KK0ZpbGVzOgkgICAgcnVudGltZS9pbmRlbnQvamF2YS52aW0KKworUGF0Y2ggNi4xLjIwOAorUHJvYmxlbTogICAgQ2FuJ3QgdXNlIHRoZSBidWZmZXIgbnVtYmVyIGZyb20gdGhlIFB5dGhvbiBpbnRlcmZhY2UuCitTb2x1dGlvbjogICBBZGQgYnVmZmVyLm51bWJlci4gKE1pY2hhbCBWaXRlY2VrKQorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4xLjIwOQorUHJvYmxlbTogICAgUHJpbnRpbmcgZG9lc24ndCB3b3JrIG9uIE1hYyBPUyBjbGFzc2ljLgorU29sdXRpb246ICAgVXNlIGEgIjoiIGZvciBwYXRoIHNlcGFyYXRvciB3aGVuIG9wZW5pbmcgdGhlIHJlc291cmNlIGZpbGUuIChBeGVsCisJICAgIEtpZWxob3JuKQorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjEuMjEwCitQcm9ibGVtOiAgICBXaGVuIHRoZXJlIGlzIGFuIGljb252KCkgY29udmVyc2lvbiBlcnJvciB3aGVuIHJlYWRpbmcgYSBmaWxlCisJICAgIHRoZXJlIGNhbiBiZSBhbiBlcnJvciB0aGUgbmV4dCB0aW1lIGljb252KCkgaXMgdXNlZC4KK1NvbHV0aW9uOiAgIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgaWNvbnYoKSBkZXNjcmlwdG9yLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjIxMQorUHJvYmxlbTogICAgVGhlIG1lc3NhZ2UgInVzZSAhIHRvIG92ZXJyaWRlIiBpcyBjb25mdXNpbmcuCitTb2x1dGlvbjogICBNYWtlIGl0ICJhZGQgISB0byBvdmVycmlkZSIuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2V2YWwuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9maWxlaW8uYywKKwkgICAgc3JjL2dsb2JhbHMuaAorCitQYXRjaCA2LjEuMjEyCitQcm9ibGVtOiAgICBXaGVuIFZpbSB3YXMgc3RhcnRlZCB3aXRoICItUiIgIjpuZXciIGNyZWF0ZXMgYSBidWZmZXIKKwkgICAgJ25vcmVhZG9ubHknIHdoaWxlICI6ZW5ldyIgaGFzICdyZWFkb25seScgc2V0LiAoUHJlYmVuIEd1bGRiZXJnKQorU29sdXRpb246ICAgRG9uJ3Qgc2V0ICdyZWFkb25seSBpbiBhIG5ldyBlbXB0eSBidWZmZXIgZm9yICI6ZW5ldyIuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4yMTMKK1Byb2JsZW06ICAgIFVzaW5nIENUUkwtVyBIIG1heSBjYXVzZSBhIGJpZyBnYXAgdG8gYXBwZWFyIGJlbG93IHRoZSBsYXN0CisJICAgIHdpbmRvdy4gKEFyaWMgQmx1bWVyKQorU29sdXRpb246ICAgRG9uJ3Qgc2V0IHRoZSB3aW5kb3cgaGVpZ2h0IHdoZW4gdGhlcmUgaXMgYSB2ZXJ0aWNhbCBzcGxpdC4KKwkgICAgKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMS4yMTQKK1Byb2JsZW06ICAgIFdoZW4gaW5zdGFsbGluZyBWaW0gYW5kIHRoZSBydW50aW1lIGZpbGVzIHdlcmUgY2hlY2tlZCBvdXQgZnJvbQorCSAgICBDVlMgdGhlIENWUyBkaXJlY3RvcmllcyB3aWxsIGFsc28gYmUgaW5zdGFsbGVkLgorU29sdXRpb246ICAgQXZvaWQgaW5zdGFsbGluZyB0aGUgQ1ZTIGRpcnMgYW5kIHRoZWlyIGNvbnRlbnRzLgorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4xLjIxNQorUHJvYmxlbTogICAgV2luMzI6ICI6cHdkIiB1c2VzIGJhY2tzbGFzaGVzIGV2ZW4gd2hlbiAnc2hlbGxzbGFzaCcgaXMgc2V0LgorCSAgICAoWGlhbmdqaWFuZyBNYSkKK1NvbHV0aW9uOiAgIEFkanVzdCBiYWNrc2xhc2hlcyBiZWZvcmUgcHJpbnRpbmcgdGhlIG1lc3NhZ2UuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4yMTYKK1Byb2JsZW06ICAgIFdoZW4gZHluYW1pY2FsbHkgbG9hZGluZyB0aGUgaWNvbnYgbGlicmFyeSwgdGhlIGVycm9yIGNvZGVzIG1heSBiZQorCSAgICBjb25mdXNlZC4KK1NvbHV0aW9uOiAgIFVzZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBmb3IgaWNvbnYgYW5kIHJlZGVmaW5lIHRoZW0gZm9yIGR5bmFtaWMKKwkgICAgbG9hZGluZy4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvbWJ5dGUuYywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMS4yMTcKK1Byb2JsZW06ICAgIFdoZW4gc291cmNpbmcgdGhlIHNhbWUgVmltIHNjcmlwdCB1c2luZyBhIGRpZmZlcmVudCBuYW1lIChzeW1ib2xpYworCSAgICBsaW5rIG9yIE1TLVdpbmRvd3MgOC4zIG5hbWUpIGl0IGlzIGxpc3RlZCB0d2ljZSB3aXRoCisJICAgICI6c2NyaXB0bmFtZXMiLiAgKFRvbnkgTWVjaGVseW5jaykKK1NvbHV0aW9uOiAgIFR1cm4gdGhlIHNjcmlwdCBuYW1lIGludG8gYSBmdWxsIHBhdGggYmVmb3JlIHVzaW5nIGl0LiAgT24gVW5peAorCSAgICBjb21wYXJlIGlub2RlL2RldmljZSBudW1iZXJzLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjEuMjE4CitQcm9ibGVtOiAgICBObyBlcnJvciBtZXNzYWdlIGZvciB1c2luZyB0aGUgZnVuY3Rpb24gYXJndW1lbnQgIjUrIi4gIChTZXJ2YXRpdXMKKwkgICAgQnJhbmR0KQorU29sdXRpb246ICAgR2l2ZSBhbiBlcnJvciBtZXNzYWdlIGlmIGEgZnVuY3Rpb24gb3IgdmFyaWFibGUgaXMgZXhwZWN0ZWQgYnV0IGlzCisJICAgIG5vdCBmb3VuZC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMjE5CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6YW1lbnUgOmIgMTxDUj4iIHdpdGggYSBWaXN1YWwgc2VsZWN0aW9uIGFuZAorCSAgICAnaW5zZXJ0bW9kZScgaXMgc2V0LCBWaW0gZG9lcyBub3QgcmV0dXJuIHRvIEluc2VydCBtb2RlLiAoTWlja2FlbAorCSAgICBNYXJjaGFuZCkKK1NvbHV0aW9uOiAgIEFkZCB0aGUgY29tbWFuZCBDVFJMLVwgQ1RSTC1HIHRoYXQgZ29lcyB0byBJbnNlcnQgbW9kZSBpZgorCSAgICAnaW5zZXJ0bW9kZScgaXMgc2V0IGFuZCB0byBOb3JtYWwgbW9kZSBvdGhlcndpc2UuICBBcHBlbmQgdGhpcyB0bworCSAgICBtZW51cyBkZWZpbmVkIHdpdGggIjphbWVudSIuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4xLjIyMAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIEJ1ZlJlYWRQb3N0IGF1dG9jb21tYW5kIHRoYXQgY2hhbmdlcyB0aGUgbGluZSBjb3VudCwKKwkgICAgZS5nLiwgIiQtMWpvaW4iLCByZWxvYWRpbmcgYSBmaWxlIHRoYXQgd2FzIGNoYW5nZWQgb3V0c2lkZSBWaW0KKwkgICAgZG9lcyBub3Qgd29yayBwcm9wZXJseS4gKEFsYW4gRyBJc2FhYykKK1NvbHV0aW9uOiAgIE1ha2UgdGhlIGJ1ZmZlciBlbXB0eSBiZWZvcmUgcmVhZGluZyB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIGZpbGUuCisJICAgIFNhdmUgdGhlIGxpbmVzIGluIGEgZHVtbXkgYnVmZmVyLCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBiYWNrCisJICAgIHdoZW4gcmVhZGluZyB0aGUgZmlsZSBmYWlscy4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvZXhfY21kcy5jLCBzcmMvZmlsZWlvLmMsIHNyYy9nbG9iYWxzLmgsCisJICAgIHNyYy9wcm90by9idWZmZXIucHJvCisKK1BhdGNoIDYuMS4yMjEKK1Byb2JsZW06ICAgIENoYW5naW5nIGNhc2UgbWF5IG5vdCB3b3JrIHByb3Blcmx5LCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQKKwkgICAgbG9jYWxlLgorU29sdXRpb246ICAgQWRkIHRoZSAnY2FzZW1hcCcgb3B0aW9uIHRvIGxldCB0aGUgdXNlciBjaG9zZSBob3cgY2hhbmdpbmcgY2FzZQorCSAgICBpcyB0byBiZSBkb25lLgorCSAgICBBbHNvIGZpeCBsb3dlcmluZyBjYXNlIHdoZW4gYW4gVVRGLTggY2hhcmFjdGVyIGRvZXNuJ3Qga2VlcCB0aGUKKwkgICAgc2FtZSBieXRlIGxlbmd0aC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHNyYy9hc2NpaS5oLCBzcmMvYXV0by9jb25maWd1cmUsCisJICAgIHNyYy9idWZmZXIuYywgc3JjL2NoYXJzZXQuYywgc3JjL2NvbmZpZy5oLmluLCBzcmMvY29uZmlndXJlLmluLAorCSAgICBzcmMvZGlmZi5jLCBzcmMvZWRpdC5jLCBzcmMvZXZhbC5jLCBzcmMvZXhfY21kczIuYywKKwkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvZmlsZWlvLmMsIHNyYy9ndWlfYW1pZ2EuYworCSAgICBzcmMvZ3VpX21hYy5jLCBzcmMvZ3VpX3Bob3Rvbi5jLCBzcmMvZ3VpX3c0OC5jLCBzcmMvZ3VpX2Jlb3MuY2MsCisJICAgIHNyYy9tYWNyb3MuaCwgc3JjL21haW4uYywgc3JjL21ieXRlLmMsIHNyYy9tZW51LmMsIHNyYy9tZXNzYWdlLmMsCisJICAgIHNyYy9taXNjMS5jLCBzcmMvbWlzYzIuYywgc3JjL29wdGlvbi5jLCBzcmMvb3NfbXNkb3MuYywKKwkgICAgc3JjL29zX21zd2luLmMsIHNyYy9wcm90by9jaGFyc2V0LnBybywgc3JjL3JlZ2V4cC5jLCBzcmMvb3B0aW9uLmgsCisJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA2LjEuMjIyIChkZXBlbmRzIG9uIDYuMS4yMTkpCitQcm9ibGVtOiAgICBQYXRjaCA2LjEuMjE5IHdhcyBpbmNvbXBsZXRlLgorU29sdXRpb246ICAgQWRkIHRoZSBjaGFuZ2VzIGZvciAiOmFtZW51Ii4KK0ZpbGVzOgkgICAgc3JjL21lbnUuYworCitQYXRjaCA2LjEuMjIzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIElNRSBpcyBhY3RpdmF0ZWQgJ2ltaW5zZXJ0JyBpcyBzZXQsIGJ1dCBpdCBtaWdodCBuZXZlcgorCSAgICBiZSByZXNldCB3aGVuIElNRSBpcyBkaXNhYmxlZC4gKE11cmFva2EgVGFybykKKwkgICAgQWxsIHN5c3RlbXM6ICdpbWluc2VydCcgaXMgc2V0IHRvIDIgd2hlbiBsZWF2aW5nIEluc2VydCBtb2RlLCBldmVuCisJICAgIHdoZW4gbGFuZ21hcCBpcyBiZWluZyB1c2VkLiAoUGV0ZXIgVmFsYWNoKQorU29sdXRpb246ICAgRG9uJ3Qgc2V0ICJiX3BfaW1pbnNlcnQiIGluIF9PbkltZU5vdGlmeSgpLiAoTXVyYW9rYSBUYXJvKQorCSAgICBEb24ndCBzdG9yZSB0aGUgc3RhdHVzIG9mIHRoZSBpbnB1dCBtZXRob2QgaW4gJ2ltaW5zZXJ0JyB3aGVuCisJICAgICdpbWluc2VydCcgaXMgb25lLiAgQWxzbyBmb3IgZWRpdGluZyB0aGUgY29tbWFuZCBsaW5lIGFuZCBmb3IKKwkgICAgYXJndW1lbnRzIHRvIE5vcm1hbCBtb2RlIGNvbW1hbmRzLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2d1aV93MzIuYywgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMS4yMjQKK1Byb2JsZW06ICAgICJleHBhbmQoJyRWQVInKSIgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGUgZXhwYW5kZWQgJFZBUgorCSAgICBpcyBub3QgYW4gZXhpc3RpbmcgZmlsZS4gKEFyaWMgQmx1bWVyKQorU29sdXRpb246ICAgSW5jbHVkZWQgbm9uLWV4aXN0aW5nIGZpbGVzLCBhcyBkb2N1bWVudGVkLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4yMjUKK1Byb2JsZW06ICAgIFVzaW5nIDxDLU8+PEMtXj4gaW4gSW5zZXJ0IG1vZGUgaGFzIGEgZGVsYXkgd2hlbiBzdGFydGluZyAidmltIC11CisJICAgIE5PTkUiIGFuZCAiOnNldCBub2NwIGhpZGRlbiIuIChFbW1hbnVlbCkgIGRvX2VjbWQoKSB1c2VzCisJICAgIGZpbGVpbmZvKCksIHRoZSByZWRyYXcgaXMgZG9uZSBhZnRlciBhIGRlbGF5IHRvIGdpdmUgdGhlIHVzZXIgdGltZQorCSAgICB0byByZWFkIHRoZSBtZXNzYWdlLgorU29sdXRpb246ICAgUHV0IHRoZSBtZXNzYWdlIGZyb20gZmlsZWlvKCkgaW4gImtlZXBfbXNnIiwgc28gdGhhdCB0aGUgcmVkcmF3IGlzCisJICAgIGRvbmUgYmVmb3JlIHRoZSBkZWxheSAoc3RpbGwgbmVlZGVkIHRvIGF2b2lkIHRoZSBtb2RlIG1lc3NhZ2UKKwkgICAgb3ZlcndyaXRlcyB0aGUgZmlsZWluZm8oKSBtZXNzYWdlKS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS4yMjYKK1Byb2JsZW06ICAgIFVzaW5nICI6ZGVidWciIHdpdGggYSAiOm5vcm1hbCIgY29tbWFuZCBtYXkgY2F1c2UgYSBoYW5nLiAgKENvbGluCisJICAgIEtlaXRoKQorU29sdXRpb246ICAgU2F2ZSB0aGUgdHlwZWFoZWFkIGJ1ZmZlciB3aGVuIG9idGFpbmluZyBhIGRlYnVnIGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jLCBzcmMvZ2V0Y2hhci5jLCBzcmMvcHJvdG8vZ2V0Y2hhci5wcm8KKworUGF0Y2ggNi4xLjIyNworUHJvYmxlbTogICAgSXQgaXMgcG9zc2libGUgdG8gdXNlIGEgdmFyaWFibGUgbmFtZSAiYXNkZjphc2RmIiBhbmQgIjpsZXQgajphc2RmCisJICAgID0gNSIgZG9lcyBub3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLiAoTWlrb2xhaiBNYWNob3dza2kpCitTb2x1dGlvbjogICBDaGVjayBmb3IgYSAiOiIgaW5zaWRlIHRoZSB2YXJpYWJsZSBuYW1lLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4yMjggKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFRoZSBzcGVjaWFsIG91dHB1dCBmdW5jdGlvbiBmb3IgSGFuZ3VsIGlzIHVzZWQgdG9vIG9mdGVuLAorCSAgICBjYXVzaW5nIHNwZWNpYWwgaGFuZGxpbmcgZm9yIG90aGVyIHNpdHVhdGlvbnMgdG8gYmUgc2tpcHBlZC4KKwkgICAgYkluQ29tcG9zaXRpb24gaXMgYWx3YXlzIEZBTFNFLCBjYXVzaW5nIEltZUdldFRlbXBDb21wb3NpdGlvbigpCisJICAgIGFsd2F5cyB0byByZXR1cm4gTlVMTC4KK1NvbHV0aW9uOiAgIFJlbW92ZSBIYW5FeHRUZXh0T3V0KCkuICBEZWxldGUgdGhlIGRlYWQgY29kZSBhcm91bmQKKwkgICAgYkluQ29tcG9zaXRpb24gYW5kIEltZUdldFRlbXBDb21wb3NpdGlvbigpLgorRmlsZXM6CSAgICBzcmMvZ3VpX3cxNi5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMS4yMjkKK1Byb2JsZW06ICAgIFdpbjMyOiBDb252ZXJzaW9uIHRvL2Zyb20gb2Z0ZW4gdXNlZCBjb2RlcGFnZXMgcmVxdWlyZXMgdGhlIGljb252CisJICAgIGxpYnJhcnksIHdoaWNoIGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlLgorU29sdXRpb246ICAgVXNlIHN0YW5kYXJkIE1TLVdpbmRvd3MgZnVuY3Rpb25zIGZvciB0aGUgY29udmVyc2lvbiB3aGVuCisJICAgIHBvc3NpYmxlLiAobW9zdGx5IGJ5IEdsZW5uIE1heW5hcmQpCisJICAgIEFsc28gZml4ZXMgbWlzc2luZyBkZWNsYXJhdGlvbiBmb3IgcGF0Y2ggNi4xLjIyMC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMS4yMzAgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMTY6IGJ1aWxkaW5nIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEV4Y2x1ZGUgdGhlIFhCVVRUT04gaGFuZGxpbmcuIChWaW5jZSBOZWdyaSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjEuMjMxCitQcm9ibGVtOiAgICBEb3VibGUgY2xpY2tpbmcgd2l0aCB0aGUgbW91c2UgdG8gc2VsZWN0IGEgd29yZCBkb2VzIG5vdCB3b3JrIGZvcgorCSAgICBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBVc2UgdmltX2lzd29yZGMoKSBpbnN0ZWFkIG9mIHZpbV9pc0lEYygpLiAgVGhpcyBtZWFucyAnaXNrZXl3b3JkJworCSAgICBpcyB1c2VkIGludGVhZCBvZiAnaXNpZGVudCcuICBBbHNvIGZpeCB0aGF0IG1peGluZyBBU0NJSSB3aXRoCisJICAgIG11bHRpLWJ5dGUgd29yZCBjaGFyYWN0ZXJzIGRvZXNuJ3Qgd29yaywgdGhlIG1vdXNlIGNsYXNzIGZvcgorCSAgICBwdW5jdHVhdGlvbiBhbmQgd29yZCBjaGFyYWN0ZXJzIHdhcyBtaXhlZCB1cC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMS4yMzIgKGRlcGVuZHMgb24gNi4xLjIyNikKK1Byb2JsZW06ICAgIFVzaW5nIGV4X25vcm1hbF9idXN5IHdoaWxlIGl0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUuIChBeGVsCisJICAgIEtpZWxob3JuKQorU29sdXRpb246ICAgT25seSB1c2UgZXhfbm9ybWFsX2J1c3kgd2hlbiBGRUFUX0VYX0VYVFJBIGlzIGRlZmluZWQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMS4yMzMKK1Byb2JsZW06ICAgICI6aGVscCBleHByLXx8IiBkb2VzIG5vdCB3b3JrLgorU29sdXRpb246ICAgRG9uJ3QgdXNlIHRoZSAnfCcgYXMgYSBjb21tYW5kIHNlcGFyYXRvcgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMS4yMzQgKGRlcGVuZHMgb24gNi4xLjIxNykKK1Byb2JsZW06ICAgIEdldCBhIHdhcm5pbmcgZm9yIHVzaW5nIGEgbmVnYXRpdmUgdmFsdWUgZm9yIHN0X2Rldi4KK1NvbHV0aW9uOiAgIERvbid0IGFzc2lnbiBhIG5lZ2F0aXZlIHZhbHVlIHRvIHN0X2Rldi4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4xLjIzNSAoZGVwZW5kcyBvbiA2LjEuMjIzKQorUHJvYmxlbTogICAgJ2ltaW5zZXJ0JyBpcyBjaGFuZ2VkIGZyb20gMSB0byAyIHdoZW4gbGVhdmluZyBJbnNlcnQgbW9kZS4gKFBldGVyCisJICAgIFZhbGFjaCkKK1NvbHV0aW9uOiAgIENoZWNrICJTdGF0ZSIgYmVmb3JlIHJlc2V0dGluZyBpdCB0byBOT1JNQUwuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4xLjIzNgorUHJvYmxlbTogICAgTWVtb3J5IGxlYWtzIHdoZW4gYXBwZW5kaW5nIGxpbmVzIGZvciAiOmRpZmZnZXQiIG9yICI6ZGlmZnB1dCIgYW5kCisJICAgIHdoZW4gcmVsb2FkaW5nIGEgY2hhbmdlZCBidWZmZXIuCitTb2x1dGlvbjogICBGcmVlIGEgbGluZSBhZnRlciBjYWxsaW5nIG1sX2FwcGVuZCgpLgorRmlsZXM6CSAgICBzcmMvZGlmZi5jLCBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjIzNworUHJvYmxlbTogICAgUHV0dGluZyBpbiBWaXN1YWwgYmxvY2sgbW9kZSBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuICIkIiB3YXMKKwkgICAgdXNlZCBvciB3aGVuIHRoZSBmaXJzdCBsaW5lIGlzIHNob3J0LiAgKENocmlzdGlhbiBNaWNob24pCitTb2x1dGlvbjogICBGaXJzdCBkZWxldGUgdGhlIHNlbGVjdGVkIHRleHQgYW5kIHRoZW4gcHV0IHRoZSBuZXcgdGV4dC4gIFNhdmUKKwkgICAgYW5kIHJlc3RvcmUgcmVnaXN0ZXJzIGFzIG5lY2Vzc2FyeS4KK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL25vcm1hbC5jLCBzcmMvb3BzLmMsIHNyYy9wcm90by9vcHMucHJvLAorCSAgICBzcmMvdmltLmgKKworUGF0Y2ggNi4xLjIzOCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogVGhlICJpY29uPSIgYXJndW1lbnQgZm9yIHRoZSAiOm1lbnUiIGNvbW1hbmQgZG9lcyBub3QKKwkgICAgc2VhcmNoIGZvciB0aGUgYml0bWFwIGZpbGUuCitTb2x1dGlvbjogICBFeHBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBzZWFyY2ggZm9yIHRoZSBiaXRtYXAgZmlsZS4KKwkgICAgKFZpbmNlIE5lZ3JpKQorCSAgICBNYWtlIGl0IGNvbnNpc3RlbnQsIHVzZSB0aGUgc2FtZSBtZWNoYW5pc20gZm9yIFgxMSBhbmQgR1RLLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMgc3JjL2d1aV9ndGsuYywgc3JjL2d1aV93MzIuYywgc3JjL2d1aV94MTEuYywKKwkgICAgc3JjL3Byb3RvL2d1aS5wcm8KKworUGF0Y2ggNi4xLjIzOQorUHJvYmxlbTogICAgR2l2aW5nIGFuIGVycm9yIGZvciBtaXNzaW5nIDplbmRpZiBvciA6ZW5kd2hpbGUgd2hlbiBiZWluZworCSAgICBpbnRlcnJ1cHRlZC4KK1NvbHV0aW9uOiAgIERvbid0IGdpdmUgdGhlc2UgbWVzc2FnZXMgd2hlbiBpbnRlcnJ1cHRlZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xLjI0MCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiB3aXRoIEJDQyA1OiBDUFUgbWF5IGJlIGRlZmluZWQgaW4gdGhlIGVudmlyb25tZW50LCB3aGljaAorCSAgICBjYXVzZXMgYSB3cm9uZyBhcmd1bWVudCBmb3IgdGhlIGNvbXBpbGVyLiAoV2FsdGVyIEJyaXNjb2UpCitTb2x1dGlvbjogICBVc2UgQ1BVTlIgaW5zdGVhZCBvZiBDUFUuCitGaWxlczoJICAgIHNyYy9NYWtlX2JjNS5tYWsKKworUGF0Y2ggNi4xLjI0MQorUHJvYmxlbTogICAgU29tZXRoaW5nIGdvZXMgd3Jvbmcgd2hlbiBkcmF3aW5nIG9yIHVuZHJhd2luZyB0aGUgY3Vyc29yLgorU29sdXRpb246ICAgUmVtZW1iZXIgd2hlbiB0aGUgY3Vyc29yIGludmFsaWQgaW4gYSBiZXR0ZXIgd2F5LgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4xLjI0MgorUHJvYmxlbTogICAgV2hlbiBwYXN0aW5nIGEgbGFyZ2UgbnVtYmVyIG9mIGxpbmVzIG9uIHRoZSBjb21tYW5kIGxpbmUgaXQgaXMgbm90CisJICAgIHBvc3NpYmxlIHRvIGludGVycnVwdC4gKEplYW4gSm9yZGFhbikKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhbiBpbnRlcnJ1cHQgYWZ0ZXIgZWFjaCBwYXN0ZWQgbGluZS4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMS4yNDMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gdGhlIE9MRSB2ZXJzaW9uIGlzIHN0YXJ0ZWQgYW5kIHdhc24ndCByZWdpc3RlcmVkLCBhCisJICAgIG1lc3NhZ2UgcG9wcyB1cCB0byBzdWdnZXN0IHJlZ2lzdGVyaW5nLCBldmVuIHdoZW4gdGhpcyBpc24ndAorCSAgICBwb3NzaWJsZSAod2hlbiB0aGUgcmVnaXN0cnkgaXMgbm90IHdyaXRhYmxlKS4KK1NvbHV0aW9uOiAgIENoZWNrIGlmIHJlZ2lzdGVyaW5nIGlzIHBvc3NpYmxlIGJlZm9yZSBhc2tpbmcgd2hldGhlciBpdCBzaG91bGQKKwkgICAgYmUgZG9uZS4gKFdhbHRlciBCcmlzY29lKQorCSAgICBBbHNvIGF2b2lkIHJlc3RhcnRpbmcgVmltIGFmdGVyIHJlZ2lzdGVyaW5nLgorRmlsZXM6CSAgICBzcmMvaWZfb2xlLmNwcAorCitQYXRjaCA2LjEuMjQ0CitQcm9ibGVtOiAgICBQYXRjaCA2LjEuMjM3IHdhcyBtaXNzaW5nIHRoZSBkaWZmIGZvciB2aW0uaC4gKElnb3IgR29sZGVuYmVyZykKK1NvbHV0aW9uOiAgIEluY2x1ZGUgaXQgaGVyZS4KK0ZpbGVzOgkgICAgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMS4yNDUKK1Byb2JsZW06ICAgIENvbXBhcmluZyB3aXRoIGlnbm9yZWQgY2FzZSBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IGZvciBVbmljb2RlCisJICAgIHdpdGggYSBsb2NhbGUgd2hlcmUgY2FzZSBmb2xkaW5nIGFuIEFTQ0lJIGNoYXJhY3RlciByZXN1bHRzIGluIGEKKwkgICAgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuIChHbGVubiBNYXluYXJkKQorU29sdXRpb246ICAgSGFuZGxlIGlnbm9yZS1jYXNlIGNvbXBhcmUgZm9yIFVuaWNvZGUgZGlmZmVyZW50bHkuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMS4yNDYKK1Byb2JsZW06ICAgICI6Ymxhc3QiIGdvZXMgdG8gdGhlIGZpcnN0IGJ1ZmZlciBpZiB0aGUgbGFzdCBvbmUgaXMgdW5saXN0ZWQuCisJICAgIChBbmRyZXcgU3RyeWtlcikKK1NvbHV0aW9uOiAgIEZyb20gdGhlIGxhc3QgYnVmZmVyIHNlYXJjaCBiYWNrd2FyZHMgZm9yIHRoZSBmaXJzdCBsaXN0ZWQgYnVmZmVyCisJICAgIGluc3RlYWQgb2YgZm9yd2FyZHMuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4yNDcKK1Byb2JsZW06ICAgIEFDTCBzdXBwb3J0IGRvZXNuJ3QgYWx3YXlzIHdvcmsgcHJvcGVybHkuCitTb2x1dGlvbjogICBBZGQgYSBjb25maWd1cmUgYXJndW1lbnQgdG8gZGlzYWJsZSBBQ0wgIi0tZGlzYWJsZS1hY2wiLiAoVGhpZXJyeQorCSAgICBWaWduYXVkKQorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4xLjI0OAorUHJvYmxlbTogICAgVHlwaW5nICdxJyBhdCB0aGUgbW9yZS1wcm9tcHQgZm9yICI6bGV0IiBkb2VzIG5vdCBxdWl0IHRoZQorCSAgICBsaXN0aW5nLiAoSGFyaSBLcmlzaG5hIERhcmEpCitTb2x1dGlvbjogICBRdWl0IHRoZSBsaXN0aW5nIHdoZW4gZ290X2ludCBpcyBzZXQuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjI0OQorUHJvYmxlbTogICAgQ2FuJ3QgZXhwYW5kIGEgcGF0aCBvbiB0aGUgY29tbWFuZCBsaW5lIGlmIGl0IGluY2x1ZGVzIGEgInwiIGFzIGEKKwkgICAgdHJhaWwgYnl0ZSBvZiBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjI1MAorUHJvYmxlbTogICAgV2hlbiBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgJ2xpbmVzJyBpbnNpZGUgdGhlIGV4cHJlc3Npb24gc2V0IHdpdGgKKwkgICAgJ2RpZmZleHByJyBWaW0gbWlnaHQgY3Jhc2guIChEYXZlIEZpc2hidXJuKQorU29sdXRpb246ICAgRG9uJ3QgYWxsb3cgY2hhbmdpbmcgdGhlIHNjcmVlbiBzaXplIHdoaWxlIHVwZGF0aW5nIHRoZSBzY3JlZW4uCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmgsIHNyYy9vcHRpb24uYywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4yNTEKK1Byb2JsZW06ICAgIENhbid0IHVzZSBjb21wbGV0aW9uIGZvciAiOmxjZCIgYW5kICI6bGNoZGlyIiBsaWtlICI6Y2QiLgorU29sdXRpb246ICAgRXhwYW5kIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlc2UgY29tbWFuZHMuIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMjUyCitQcm9ibGVtOiAgICAidml9IiBkb2VzIG5vdCBpbmNsdWRlIGEgbGluZSBicmVhayB3aGVuIHRoZSAifSIgaXMgYXQgdGhlIHN0YXJ0CisJICAgIG9mIGEgZm9sbG93aW5nIGxpbmUuIChLYW1pbCBCdXJ6eW5za2kpCitTb2x1dGlvbjogICBJbmNsdWRlIHRoZSBsaW5lIGJyZWFrLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4xLjI1MyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiB3aXRoIEN5Z3dpbjogQ2hhbmdlcyB0aGUgcGF0aCBvZiBhcmd1bWVudHMgaW4gYSB3cm9uZyB3YXkuCisJICAgIChYaWFuZ2ppYW5nIE1hKQorU29sdXRpb246ICAgRG9uJ3QgdXNlIGN5Z3dpbl9jb252X3RvX3Bvc2l4X3BhdGgoKSBmb3IgdGhlIFdpbjMyIHZlcnNpb24uCisJICAgIFVwZGF0ZSB0aGUgQ3lnd2luIG1ha2VmaWxlIHRvIHN1cHBvcnQgbW9yZSBmZWF0dXJlcy4gIChEYW4gU2hhcnApCitGaWxlczoJICAgIHNyYy9NYWtlX2N5Zy5tYWssIHNyYy9pZl9vbGUuY3BwLCBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS4yNTQKK1Byb2JsZW06ICAgIGV4aXN0cygiZm9ve2Jhcn0iKSBkb2VzIG5vdCB3b3JrLiAgJzp1bmxldCB2eyJhIn1yJyBkb2VzIG5vdCB3b3JrLgorCSAgICAiOmxldCB2e2F9cjEgdnthfXIyIiBkb2VzIG5vdCB3b3JrLiAiOmZ1bmMgRnsoMSl9IiBkb2VzIG5vdCB3b3JrLgorCSAgICAiOmRlbGZ1bmMgRnsiIGRvZXMgbm90IGdpdmUgYW4gZXJyb3IgbWVzc2FnZS4gICc6ZGVsZnVuYyBGeyJGIn0nCisJICAgIGRvZXMgbm90IHdvcmsuCitTb2x1dGlvbjogICBTdXBwb3J0IG1hZ2ljIGJyYWNlcyBmb3IgdGhlIGV4aXN0cygpIGFyZ3VtZW50LiAoVmluY2UgTmVncmkpCisJICAgIENoZWNrIGZvciB0cmFpbGluZyBjb21tZW50cyBleHBsaWNpdGx5IGZvciAiOnVubGV0Ii4gIEFkZCBzdXBwb3J0CisJICAgIGZvciBtYWdpYyBicmFjZXMgaW4gZnVydGhlciBhcmd1bWVudHMgb2YgIjpsZXQiLiAgTG9vayBmb3IgYQorCSAgICBwYXJlbnRoZXNpcyBvbmx5IGFmdGVyIHRoZSBmdW5jdGlvbiBuYW1lLiAgKFNlcnZhdGl1cyBCcmFuZHQpCisJICAgIEFsc28gZXhwYW5kIG1hZ2ljIGJyYWNlcyBmb3IgImV4aXN0cygnKmV4cHInKSIuICBHaXZlIGFuIGVycm9yCisJICAgIG1lc3NhZ2UgZm9yIGFuIGludmFsaWQgIjpkZWxmdW5jIiBhcmd1bWVudC4gIEFsbG93IHF1b3RlcyBpbiB0aGUKKwkgICAgIjpkZWxmdW5jIiBhcmd1bWVudC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2V4X2NtZHMuaCwgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjI1NSAoZGVwZW5kcyBvbiA2LjEuMjU0KQorUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiBsb2FkaW5nIG1lbnUudmltIGEgc2Vjb25kIHRpbWUuIChDaHJpc3RpYW4gUm9iaW5zb24pCisJICAgICI6dW5sZXQgZ2FyYmFnZSBmb28iIHRyaWVzIHVubGV0dGluZyAiZm9vIiBhZnRlciBhbiBlcnJvciBtZXNzYWdlLgorCSAgICAoU2VydmF0aXVzIEJyYW5kdCkKKwkgICAgVmVyeSBsb25nIGZ1bmN0aW9uIGFyZ3VtZW50cyBjYXVzZSB2ZXJ5IGxvbmcgbWVzc2FnZXMgd2hlbgorCSAgICAndmVyYm9zZScgaXMgMTQgb3IgaGlnaGVyLgorU29sdXRpb246ICAgQXZvaWQgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgorCSAgICBCcmVhayBvdXQgb2YgYSBsb29wIGFmdGVyIGFuIGludmFsaWQgYXJndW1lbnQgZm9yICI6dW5sZXQiLgorCSAgICBUcnVuY2F0ZSBsb25nIGZ1bmN0aW9uIGFyZ3VtZW50cyB0byA4MCBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4yNTYgKGRlcGVuZHMgb24gNi4xLjI1NSkKK1Byb2JsZW06ICAgIERlZmluaW5nIGEgZnVuY3Rpb24gYWZ0ZXIgIjppZiAwIiBjb3VsZCBzdGlsbCBjYXVzZSBhbiBlcnJvcgorCSAgICBtZXNzYWdlIGZvciBhbiBleGlzdGluZyBmdW5jdGlvbi4KKwkgICAgTGVha2luZyBtZW1vcnkgd2hlbiB0aGVyZSBhcmUgdHJhaWxpbmcgY2hhcmFjdGVycyBmb3IgIjpkZWxmdW5jIi4KK1NvbHV0aW9uOiAgIENoZWNrIHRoZSAic2tpcCIgZmxhZy4gIEZyZWUgdGhlIG1lbW9yeS4gKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjI1NworUHJvYmxlbTogICAgIjpjd2luZG93IiBhbHdheXMgc2V0cyB0aGUgcHJldmlvdXMgd2luZG93IHRvIHRoZSBsYXN0IGJ1dCBvbmUKKwkgICAgd2luZG93LiAgKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIFNldCB0aGUgcHJldmlvdXMgd2luZG93IHByb3Blcmx5LgorRmlsZXM6CSAgICBzcmMvZ2xvYmFscy5jLCBzcmMvcXVpY2tmaXguYywgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMS4yNTgKK1Byb2JsZW06ICAgIEJ1ZmZlcnMgbWVudSBkb2Vzbid0IHdvcmsgcHJvcGVybHkgZm9yIG11bHRpYnl0ZSBidWZmZXIgbmFtZXMuCitTb2x1dGlvbjogICBVc2UgYSBwYXR0ZXJuIHRvIGdldCB0aGUgbGVmdCBhbmQgcmlnaHQgcGFydCBvZiB0aGUgbmFtZS4KKwkgICAgKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjEuMjU5IChleHRyYSkKK1Byb2JsZW06ICAgIE1hYzogd2l0aCAncGF0Y2htb2RlJyBpcyB1c2VkIGZpbGVuYW1lcyBhcmUgdHJ1bmNhdGVkLgorU29sdXRpb246ICAgSW5jcmVhc2UgdGhlIEJBU0VOQU1FTEVOIGZvciBNYWMgT1MgWC4gKEVkIFJhbHN0b24pCitGaWxlczoJICAgIHNyYy9vc19tYWMuaAorCitQYXRjaCA2LjEuMjYwIChkZXBlbmRzIG9uIDYuMS4xMDQpCitQcm9ibGVtOiAgICBHQ0MgMy4yIHN0aWxsIHNlZW1zIHRvIGhhdmUgYW4gb3B0aW1pemVyIHByb2JsZW0uIChadmkgSGFyJ0VsKQorU29sdXRpb246ICAgVXNlIHRoZSBzYW1lIGNvbmZpZ3VyZSBjaGVjayBhcyB1c2VkIGZvciBHQ0MgMy4xLgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4xLjI2MQorUHJvYmxlbTogICAgV2hlbiBkZWxldGluZyBhIGxpbmUgaW4gYSBidWZmZXIgd2hpY2ggaXMgbm90IHRoZSBjdXJyZW50IGJ1ZmZlciwKKwkgICAgdXNpbmcgdGhlIFBlcmwgaW50ZXJmYWNlIERlbGV0ZSgpLCB0aGUgY3Vyc29yIGluIHRoZSBjdXJyZW50CisJICAgIHdpbmRvdyBtYXkgbW92ZS4gKENocmlzIEhvdXNlcikKK1NvbHV0aW9uOiAgIERvbid0IGFkanVzdCB0aGUgY3Vyc29yIHBvc2l0aW9uIHdoZW4gY2hhbmdpbmcgYW5vdGhlciBidWZmZXIuCitGaWxlczoJICAgIHNyYy9pZl9wZXJsLnhzCisKK1BhdGNoIDYuMS4yNjIKK1Byb2JsZW06ICAgIFdoZW4ganVtcGluZyBvdmVyIGZvbGRzIHdpdGggInpbIiwgInpqIiBhbmQgInprIiB0aGUgcHJldmlvdXMKKwkgICAgcG9zaXRpb24gaXMgbm90IHJlbWVtYmVyZWQuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIFNldCB0aGUgcHJldmlvdXMgY29udGV4dCBtYXJrIGJlZm9yZSBqdW1waW5nLgorRmlsZXM6CSAgICBzcmMvZm9sZC5jCisKK1BhdGNoIDYuMS4yNjMKK1Byb2JsZW06ICAgIFdoZW4gdHlwaW5nIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgdGhhdCB0cmlnZ2VycyBhbiBhYmJyZXZpYXRpb24KKwkgICAgaXQgaXMgbm90IGluc2VydGVkIHByb3Blcmx5LgorU29sdXRpb246ICAgSGFuZGxlIGFkZGluZyB0aGUgdHlwZWQgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMKKworUGF0Y2ggNi4xLjI2NCAoZGVwZW5kcyBvbiBwYXRjaCA2LjEuMjU0KQorUHJvYmxlbTogICAgZXhpc3RzKCkgZG9lcyBub3Qgd29yayBmb3IgYnVpbHQtaW4gZnVuY3Rpb25zLiAoU3RldmUgV2FsbCkKK1NvbHV0aW9uOiAgIERvbid0IGNoZWNrIGZvciB0aGUgZnVuY3Rpb24gbmFtZSB0byBzdGFydCB3aXRoIGEgY2FwaXRhbC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMjY1CitQcm9ibGVtOiAgICBsaWJjYWxsKCkgY2FuIGJlIHVzZWQgaW4gJ2ZvbGRleHByJyB0byBjYWxsIGFueSBzeXN0ZW0gZnVuY3Rpb24uCisJICAgIHJlbmFtZSgpLCBkZWxldGUoKSBhbmQgcmVtb3RlX3NlbmQoKSBjYW4gYWxzbyBiZSB1c2VkIGluCisJICAgICdmb2xkZXhwcicuICBUaGVzZSBhcmUgc2VjdXJpdHkgcHJvYmxlbXMuIChHZW9yZ2kgR3VuaW5za2kpCitTb2x1dGlvbjogICBEb24ndCBhbGxvdyB1c2luZyBsaWJjYWxsKCksIHJlbmFtZSgpLCBkZWxldGUoKSwgcmVtb3RlX3NlbmQoKSBhbmQKKwkgICAgc2ltaWxhciBmdW5jdGlvbnMgaW4gdGhlIHNhbmRib3guCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjI2NiAoZGVwZW5kcyBvbiA2LjEuMjY1KQorUHJvYmxlbTogICAgV2luMzI6IGNvbXBpbGUgZXJyb3IgaW4gZXZhbC5jLiAoQmlsbCBNY0NhcnRoeSkKK1NvbHV0aW9uOiAgIE1vdmUgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMjY3CitQcm9ibGVtOiAgICBVc2luZyAicCIgdG8gcGFzdGUgaW50byBhIFZpc3VhbCBzZWxlY3RlZCBhcmVhIG1heSBjYXVzZSBhIGNyYXNoLgorU29sdXRpb246ICAgQWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Igc2F2aW5nIHRoZSByZWdpc3RlciBjb250ZW50cy4gKE11cmFva2EKKwkgICAgVGFybykKK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMS4yNjgKK1Byb2JsZW06ICAgIFdoZW4gdHJpZ2dlcmluZyBhbiBhYmJyZXZpYXRpb24gd2l0aCBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLCB0aGlzCisJICAgIGNoYXJhY3RlciBpcyBub3QgY29ycmVjdGx5IGluc2VydGVkIGFmdGVyIGV4cGFuZGluZyB0aGUKKwkgICAgYWJicmV2aWF0aW9uLiAoVGFybyBNdXJhb2thKQorU29sdXRpb246ICAgQWRkIEFCQlJfT0ZGIHRvIGFsbCBjaGFyYWN0ZXJzIGFib3ZlIDB4ZmYuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvZ2V0Y2hhci5jCisKK1BhdGNoIDYuMS4yNjkKK1Byb2JsZW06ICAgIEFmdGVyIHVzaW5nIGlucHV0KCkgdGV4dCB3cml0dGVuIHdpdGggIjpyZWRpciIgZ2V0cyBleHRyYSBpbmRlbnQuCisJICAgIChEYXZpZCBGaXNoYnVybikKK1NvbHV0aW9uOiAgIFJlc3RvcmUgbXNnX2NvbCBhZnRlciB1c2luZyBpbnB1dCgpLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjEuMjcwIChkZXBlbmRzIG9uIDYuMS4yNjApCitQcm9ibGVtOiAgICBHQ0MgMy4yLjEgc3RpbGwgc2VlbXMgdG8gaGF2ZSBhbiBvcHRpbWl6ZXIgcHJvYmxlbS4KK1NvbHV0aW9uOiAgIFVzZSB0aGUgc2FtZSBjb25maWd1cmUgY2hlY2sgYXMgdXNlZCBmb3IgR0NDIDMuMS4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMS4yNzEKK1Byb2JsZW06ICAgIFdoZW4gY29tcGlsaW5nIHdpdGhvdXQgdGhlICtzeW50YXggZmVhdHVyZSB0aGVyZSBhcmUgZXJyb3JzLgorU29sdXRpb246ICAgRG9uJ3QgdXNlIHNvbWUgY29kZSBmb3Igc3ludGF4IGhpZ2hsaWdodGluZy4gKFJvZ2VyIENvcm5lbGl1cykKKwkgICAgTWFrZSB0ZXN0IDQ1IHdvcmsgd2l0aG91dCBzeW50YXggaGlnaGxpZ2h0aW5nLgorCSAgICBBbHNvIGZpeCBhbiBlcnJvciBpbiBhIHBhdHRlcm4gbWF0Y2hpbmc6ICJcJSgiIHdhcyBub3Qgc3VwcG9ydGVkLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYywgc3JjL3JlZ2V4cC5jLCBzcmMvdGVzdGRpci90ZXN0NDUuaW4KKworUGF0Y2ggNi4xLjI3MgorUHJvYmxlbTogICAgQWZ0ZXIgdXNpbmcgIjpzZXQgZGVmaW5lPCIgYSBjcmFzaCBtYXkgaGFwcGVuLiAoQ2hyaXN0aWFuIFJvYmluc29uKQorU29sdXRpb246ICAgTWFrZSBhIGNvcHkgb2YgdGhlIG9wdGlvbiB2YWx1ZSBpbiBhbGxvY2F0ZWQgbWVtb3J5LgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4xLjI3MworUHJvYmxlbTogICAgV2hlbiB0aGUgY3Vyc29yIGRvZXNuJ3QgYmxpbmssIHJlZHJhd2luZyBhbiBleHBvc2VkIGFyZWEgbWF5IGhpZGUKKwkgICAgdGhlIGN1cnNvci4KK1NvbHV0aW9uOiAgIEFsd2F5cyBkcmF3IHRoZSBjdXJzb3IsIGFsc28gd2hlbiBpdCBkaWRuJ3QgbW92ZS4gKE11cmFva2EgVGFybykKK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMS4yNzQgKGRlcGVuZHMgb24gNi4xLjIxMCkKK1Byb2JsZW06ICAgIFJlc2V0dGluZyB0aGUgaWNvbnYoKSBzdGF0ZSBhZnRlciBlYWNoIGVycm9yIGlzIHdyb25nIGZvciBhbgorCSAgICBpbmNvbXBsZXRlIHNlcXVlbmNlLgorU29sdXRpb246ICAgRG9uJ3QgcmVzZXQgdGhlIGljb252KCkgc3RhdGUuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMjc1CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICJ2IiBpbiBhIHN0YXJ0dXAgc2NyaXB0LCBnZXQgd2FybmluZyBtZXNzYWdlIHRoYXQKKwkgICAgdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodC4gKENoYXJsZXMgQ2FtcGJlbGwpCitTb2x1dGlvbjogICBPbmx5IGdpdmUgdGhlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHRlcm1pbmFsIGhhcyBiZWVuIGluaXRpYWxpemVkLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4xLjI3NgorUHJvYmxlbTogICAgImd2aW0gLS1yZW1vdGUgZmlsZSIgZG9lc24ndCBwcm9tcHQgZm9yIGFuIGVuY3J5cHRpb24ga2V5LgorU29sdXRpb246ICAgVGhlIGZ1cnRoZXIgY2hhcmFjdGVycyB0aGUgY2xpZW50IHNlbmRzIHRvIHRoZSBzZXJ2ZXIgYXJlIHVzZWQuCisJICAgIEFkZGVkIGlucHV0c2F2ZSgpIGFuZCBpbnB1dHJlc3RvcmUoKSB0byBhbGxvdyBwcm9tcHRpbmcgdGhlCisJICAgIHVzZXIgZGlyZWN0bHkgYW5kIG5vdCB1c2luZyB0eXBlYWhlYWQuCisJICAgIEFsc28gZml4IHBvc3NpYmxlIG1lbW9yeSBsZWFrIGZvciAiOm5vcm1hbCIuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9leF9jbWRzMi5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL2dldGNoYXIuYywKKwkgICAgc3JjL21haW4uYywgc3JjL3Byb3RvL2dldGNoYXIucHJvLCBzcmMvcHJvdG8vdWkucHJvLAorCSAgICBzcmMvcnVudGltZS9kb2MvZXZhbC50eHQsIHNyYy9zdHJ1Y3RzLmgsIHNyYy91aS5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4xLjI3NyAoZGVwZW5kcyBvbiA2LjEuMjc2KQorUHJvYmxlbTogICAgQ29tcGlsYXRpb24gZXJyb3Igd2hlbiBidWlsZGluZyB3aXRoIHNtYWxsIGZlYXR1cmVzLgorU29sdXRpb246ICAgRGVmaW5lIHRyYXNoX2lucHV0X2J1ZigpIHdoZW4gbmVlZGVkLiAoS2VsdmluIExlZSkKK0ZpbGVzOgkgICAgc3JjL3VpLmMKKworUGF0Y2ggNi4xLjI3OAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBzaWducyB0aGUgbGluZSBudW1iZXIgb2YgYSBjbG9zZWQgZm9sZCBkb2Vzbid0IGxpbmUgdXAKKwkgICAgd2l0aCB0aGUgb3RoZXIgbGluZSBudW1iZXJzLiAoS2FtaWwgQnVyenluc2tpKQorU29sdXRpb246ICAgSW5zZXJ0IHR3byBzcGFjZXMgZm9yIHRoZSBzaWduIGNvbHVtbi4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4yNzkKK1Byb2JsZW06ICAgIFRoZSBwcm90b3R5cGUgZm9yIHNtc2coKSBhbmQgc21zZ19hdHRyKCkgZG8gbm90IG1hdGNoIHRoZSBmdW5jdGlvbgorCSAgICBkZWZpbml0aW9uLiAgVGhpcyBtYXkgY2F1c2UgdHJvdWJsZSBmb3Igc29tZSBjb21waWxlcnMuIChOaXgpCitTb2x1dGlvbjogICBVc2UgdmFfbGlzdCBmb3Igc3lzdGVtcyB0aGF0IGhhdmUgc3RkYXJnLmguICBVc2UgImludCIgaW5zdGVhZCBvZgorCSAgICAidm9pZCIgZm9yIHRoZSByZXR1cm4gdHlwZS4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlnLmguaW4sIHNyYy9jb25maWd1cmUuaW4sCisJICAgIHNyYy9wcm90by5oLCBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMS4yODAKK1Byb2JsZW06ICAgIEl0J3MgcG9zc2libGUgdG8gdXNlIGFuIGFyZ3VtZW50ICJmaXJzdGxpbmUiIG9yICJsYXN0bGluZSIgZm9yIGEKKwkgICAgZnVuY3Rpb24gYnV0IHVzaW5nICJhOmZpcnN0bGluZSIgb3IgImE6bGFzdGxpbmUiIGluIHRoZSBmdW5jdGlvbgorCSAgICB3b24ndCB3b3JrLiAgKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdGhlc2UgYXJndW1lbnRzLgorCSAgICBBbHNvIGF2b2lkIHRoYXQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBib2R5IGNhdXNlcyBhIHdob2xlIHJvdyBvZgorCSAgICBlcnJvcnMsIHNraXAgb3ZlciBpdCBhZnRlciBhbiBlcnJvciBpbiB0aGUgZmlyc3QgbGluZS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMjgxCitQcm9ibGVtOiAgICBJbiBJbnNlcnQgbW9kZSBDVFJMLVggQ1RSTC1HIGxlYXZlcyB0aGUgY3Vyc29yIGFmdGVyIHRoZSBydWxlci4KK1NvbHV0aW9uOiAgIFNldCB0aGUgY3Vyc29yIHBvc2l0aW9uIGJlZm9yZSB3YWl0aW5nIGZvciB0aGUgYXJndW1lbnQgb2YgQ1RSTC1HLgorCSAgICAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMS4yODIKK1Byb2JsZW06ICAgIEVsdmlzIHVzZXMgInNlIiBpbiBhIG1vZGVsaW5lLCBWaW0gZG9lc24ndCByZWNvZ25pemUgdGhpcy4KK1NvbHV0aW9uOiAgIEFsc28gYWNjZXB0ICJzZSAiIHdoZXJlICJzZXQgIiBpcyBhY2NlcHRlZCBpbiBhIG1vZGVsaW5lLgorCSAgICAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4xLjI4MworUHJvYmxlbTogICAgRm9yICI6c2lnbiIgdGhlIGljb24gZmlsZSBuYW1lIGNhbm5vdCBjb250YWluIGEgc3BhY2UuCitTb2x1dGlvbjogICBIYW5kbGUgYmFja3NsYXNoZXMgaW4gdGhlIGZpbGUgbmFtZS4gIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xLjI4NAorUHJvYmxlbTogICAgT24gU29sYXJpcyB0aGVyZSBpcyBhIHdhcm5pbmcgZm9yICJzdHJ1Y3QgdXRpbWJ1ZiIuCitTb2x1dGlvbjogICBNb3ZlIGluY2x1ZGluZyAidXRpbWUuaCIgdG8gb3V0c2lkZSB0aGUgZnVuY3Rpb24uIChEZXJlayBXeWF0dCkKK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMS4yODUKK1Byb2JsZW06ICAgIENhbid0IHdpcGUgb3V0IGEgYnVmZmVyIHdpdGggJ2J1ZmhpZGUnIG9wdGlvbi4KK1NvbHV0aW9uOiAgIEFkZCAid2lwZSIgdmFsdWUgdG8gJ2J1ZmhpZGUnLiAoWWVnYXBwYW4gTGFrc2htYW5hbikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHNyYy9idWZmZXIuYywgc3JjL29wdGlvbi5jLAorCSAgICBzcmMvcXVpY2tmaXguYworCitQYXRjaCA2LjEuMjg2CitQcm9ibGVtOiAgICAnc2hvd2JyZWFrJyBjYW5ub3QgY29udGFpbiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBBbGxvdyB1c2luZyBhbGwgcHJpbnRhYmxlIGNoYXJhY3RlcnMgZm9yICdzaG93YnJlYWsnLgorRmlsZXM6CSAgICBzcmMvY2hhcnNldC5jLCBzcmMvbW92ZS5jLCBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4xLjI4NyAoZGVwZW5kcyBvbiA2LjEuMjg1KQorUHJvYmxlbTogICAgRWZmZWN0IG9mICJkZWxldGUiIGFuZCAid2lwZSIgaW4gJ2J1ZmhpZGUnIHdlcmUgbWl4ZWQgdXAuCitTb2x1dGlvbjogICBXaXBlIG91dCB3aGVuIHdpcGluZyBvdXQgaXMgYXNrZWQgZm9yLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4xLjI4OAorUHJvYmxlbTogICAgIjpzaWxlbnQgZnVuY3Rpb24gRiIgaGFuZ3MuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIERvbid0IHVzZSBtc2dfY29sLCBpdCBpcyBub3QgaW5jcmVtZW50ZWQgd2hlbiB1c2luZyAiOnNpbGVudCIuCisJICAgIEFsc28gbWFkZSB0aGUgZnVuY3Rpb24gb3V0cHV0IGxvb2sgYSBiaXQgYmV0dGVyLiAgRG9uJ3QgdHJhbnNsYXRlCisJICAgICJmdW5jdGlvbiIuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjI4OSAoZGVwZW5kcyBvbiA2LjEuMjc4KQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZyBmb3IgcG9pbnRlci4gKEF4ZWwgS2llbGhvcm4pCitTb2x1dGlvbjogICBBZGQgYSB0eXBlY2FzdCBmb3IgIiAgIi4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4yOTAgKGV4dHJhKQorUHJvYmxlbTogICAgVHJ1bmNhdGluZyBsb25nIHRleHQgZm9yIG1lc3NhZ2UgYm94IG1heSBicmVhayBtdWx0aS1ieXRlCisJICAgIGNoYXJhY3Rlci4KK1NvbHV0aW9uOiAgIEFkanVzdCB0byBzdGFydCBvZiBtdWx0aS1ieXRlIGNoYXJhY3Rlci4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4xLjI5MSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogQ1RSTC1AIGRvZXNuJ3Qgd29yay4gIERvbid0IGV2ZW4gZ2V0IGEgbWVzc2FnZSBmb3IgaXQuCitTb2x1dGlvbjogICBSZWNvZ25pemUgdGhlIGtleWNvZGUgZm9yIENUUkwtQC4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjEuMjkyIChleHRyYSwgZGVwZW5kcyBvbiA2LjEuMjUzKQorUHJvYmxlbTogICAgV2luMzI6IENhbid0IGNvbXBpbGUgd2l0aCBuZXcgTWluZ1cgY29tcGlsZXIuCisJICAgIEJvcmxhbmQgNSBtYWtlZmlsZSBkb2Vzbid0IGdlbmVyYXRlIHBhdGhkZWYuYy4KK1NvbHV0aW9uOiAgIFJlbW92ZSAtd3dpZGUtbXVsdGlwbHkgYXJndW1lbnQuIChSZW5lIGRlIFp3YXJ0KQorCSAgICBWYXJpb3VzIGZpeGVzIGZvciBvdGhlciBwcm9ibGVtcyBpbiBXaW4zMiBtYWtlZmlsZXMuIChEYW4gU2hhcnApCitGaWxlczoJICAgIHNyYy9NYWtlX2JjNS5tYWssIHNyYy9NYWtlX2N5Zy5tYWssIHNyYy9NYWtlX21pbmcubWFrLAorCSAgICBzcmMvTWFrZV9tdmMubWFrCisKK1BhdGNoIDYuMS4yOTMKK1Byb2JsZW06ICAgIGJ5dGUybGluZSgpIHJldHVybnMgYSB3cm9uZyByZXN1bHQgZm9yIHNvbWUgdmFsdWVzLgorU29sdXRpb246ICAgQ2hhbmdlICI+PSIgdG8gIj4iIGluIG1sX2ZpbmRfbGluZV9vcl9vZmZzZXQoKS4gKEJyYWRmb3JkIEMgU21pdGgpCisJICAgIEFkZCBvbmUgdG8gdGhlIGxpbmUgbnVtYmVyIHdoZW4gYXQgdGhlIGVuZCBvZiBhIGJsb2NrLgorRmlsZXM6CSAgICBzcmMvbWVtbGluZS5jCisKK1BhdGNoIDYuMS4yOTQKK1Byb2JsZW06ICAgIENhbid0IGluY2x1ZGUgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciBpbiBhIHN0cmluZyBieSBpdHMgaGV4IHZhbHVlLgorCSAgICAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgQWRkICJcdS4uLi4iOiBhIGNoYXJhY3RlciBzcGVjaWZpZWQgd2l0aCB1cCB0byBmb3VyIGhleCBudW1iZXJzCisJICAgIGFuZCBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiAnZW5jb2RpbmcnLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4yOTUgKGV4dHJhKQorUHJvYmxlbTogICAgUHJvY2Vzc2luZyB0aGUgY3MucG8gZmlsZSBnZW5lcmF0ZXMgYW4gZXJyb3IuIChSYWh1bCBBZ3Jhd2FsKQorU29sdXRpb246ICAgRml4IHRoZSBwcmludGYgZm9ybWF0IGNoYXJhY3RlcnMgaW4gdGhlIHRyYW5zbGF0aW9uLgorRmlsZXM6CSAgICBzcmMvcG8vY3MucG8KKworUGF0Y2ggNi4xLjI5NgorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gY2FuY2VsbGluZyB0aGUgZm9udCBkaWFsb2cgJ2d1aWZvbnQnIHJlbWFpbnMgc2V0IHRvCisJICAgICIqIi4KK1NvbHV0aW9uOiAgIFJlc3RvcmUgdGhlIG9sZCB2YWx1ZSBvZiAnZ3VpZm9udCcgKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMS4yOTcKK1Byb2JsZW06ICAgICJtYWtlIHRlc3QiIGZhaWxzIGluIHRlc3Q2IGluIGFuIFVURi04IGVudmlyb25tZW50LiAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgQmVmb3JlIGV4ZWN1dGluZyB0aGUgQnVmUmVhZFBvc3QgYXV0b2NvbW1hbmRzIHNhdmUgdGhlIGN1cnJlbnQKKwkgICAgZmlsZWVuY29kaW5nLCBzbyB0aGF0IHRoZSBmaWxlIGlzbid0IG1hcmtlZCBjaGFuZ2VkLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjI5OAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBzaWducyBhbmQgdGhlIGZpcnN0IGxpbmUgb2YgYSBjbG9zZWQgZm9sZCBoYXMgYSBzaWduCisJICAgIGl0IGNhbiBiZSByZWRyYXduIGFzIGlmIHRoZSBmb2xkIHdhcyBvcGVuLiAgKEthbWlsIEJ1cnp5bnNraSkKK1NvbHV0aW9uOiAgIERvbid0IHJlZHJhdyBhIHNpZ24gaW5zaWRlIGEgY2xvc2VkIGZvbGQuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuMjk5CitQcm9ibGVtOiAgICAiOmVkaXQgK3NldFwgcm8gZmlsZSIgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgSGFsdmUgdGhlIG51bWJlciBvZiBiYWNrc2xhc2hlcyBpbiB0aGUgIitjbWQiIGFyZ3VtZW50LgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMzAwIChleHRyYSkKK1Byb2JsZW06ICAgIEhhbmRsaW5nIG9mIEVUT19JR05PUkVMQU5HVUFHRSBpcyBjb25mdXNpbmcuCitTb2x1dGlvbjogICBDbGVhbiB1cCB0aGUgaGFuZGxpbmcgb2YgRVRPX0lHTk9SRUxBTkdVQUdFLiAoR2xlbm4gTWF5bmFyZCkKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjEuMzAxIChleHRyYSkKK1Byb2JsZW06ICAgIEZyZW5jaCB0cmFuc2xhdGlvbiBvZiBmaWxlLXNhdmUgZGlhbG9nIGRvZXNuJ3Qgc2hvdyBmaWxlIG5hbWUuCitTb2x1dGlvbjogICBJbnNlcnQgYSBzdGFyIGluIHRoZSBwcmludGYgc3RyaW5nLiAoRnJhbmNvaXMgVGVycm90KQorRmlsZXM6CSAgICBzcmMvcG8vZnIucG8KKworUGF0Y2ggNi4xLjMwMgorUHJvYmxlbTogICAgQ291bnRpbmcgbGluZXMgb2YgdGhlIFZpc3VhbCBhcmVhIGlzIGluY29ycmVjdCBmb3IgY2xvc2VkIGZvbGRzLgorCSAgICAoTWlrb2xhaiBNYWNob3dza2kpCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSBzdGFydCBhbmQgZW5kIGZvciB0aGUgY2xvc2VkIGZvbGQuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjEuMzAzIChleHRyYSkKK1Byb2JsZW06ICAgIFRoZSBUb3AvQm90dG9tL0FsbCB0ZXh0IGRvZXMgbm90IGFsd2F5cyBmaXQgaW4gdGhlIHJ1bGVyIHdoZW4KKwkgICAgdHJhbnNsYXRlZCB0byBKYXBhbmVzZS4gIFByb2JsZW0gd2l0aCBhIGNoYXJhY3RlciBiZWluZyB3aWRlciB3aGVuCisJICAgIGluIGEgYm9sZCBmb250LgorU29sdXRpb246ICAgVXNlIEVUT19QRFkgdG8gc3BlY2lmeSB0aGUgd2lkdGggb2YgZWFjaCBjaGFyYWN0ZXIuIChZYXN1aGlybworCSAgICBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4xLjMwNCAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjI5MikKK1Byb2JsZW06ICAgIFdpbjMyOiBQb3N0c2NyaXB0IGlzIGFsd2F5cyBlbmFibGVkIGluIHRoZSBNaW5nVyBNYWtlZmlsZS4KKwkgICAgUGF0aGRlZi5jIGlzbid0IGdlbmVyYXRlZCBwcm9wZXJseSB3aXRoIE1ha2VfYmM1Lm1hay4gKFlhc3VoaXJvCisJICAgIE1hdHN1bW90bykKK1NvbHV0aW9uOiAgIENoYW5nZSBhbiBpZmRlZiB0byBhbiBpZmVxLiAoTWFkb2thIE1hY2hpdGFuaSkKKwkgICAgVXNlIHRoZSBCb3JsYW5kIG1ha2UgcmVkaXJlY3Rpb24gdG8gZ2VuZXJhdGUgcGF0aGRlZi5jLiAoTWF1cmljZQorCSAgICBCYXJudW0pCitGaWxlczoJICAgIHNyYy9NYWtlX2JjNS5tYWssIHNyYy9NYWtlX21pbmcubWFrCisKK1BhdGNoIDYuMS4zMDUKK1Byb2JsZW06ICAgIFdoZW4gJ3ZlcmJvc2UnIGlzIDE0IG9yIGhpZ2hlciwgYSBmdW5jdGlvbiBjYWxsIG1heSBjYXVzZSByZWFkaW5nCisJICAgIHVuaW5pdGlhbGl6ZWQgZGF0YS4gKFdhbHRlciBCcmlzY29lKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGVuZC1vZi1zdHJpbmcgaW4gdHJ1bmNfc3RyaW5nKCkuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4xLjMwNgorUHJvYmxlbTogICAgVGhlIEFJWCBWaXN1YWxBZ2UgY2MgY29tcGlsZXIgZG9lc24ndCBkZWZpbmUgX19TVERDX18uCitTb2x1dGlvbjogICBVc2UgX19FWFRFTkRFRF9fIGxpa2UgX19TVERDX18uIChKZXNzIFRocnlzb2VlKQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5oCisKK1BhdGNoIDYuMS4zMDcKK1Byb2JsZW06ICAgIFdoZW4gYSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgaGFzIGFuIGlsbGVnYWwgdGFpbCBieXRlIHRoZSBkaXNwbGF5CisJICAgIGlzIG1lc3NlZCB1cC4gKFlhc3VoaXJvIE1hdHN1bW90bykKK1NvbHV0aW9uOiAgIERyYXcgIlhYIiBpbnN0ZWFkIG9mIHRoZSB3cm9uZyBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuMzA4CitQcm9ibGVtOiAgICBDYW4ndCByZXNldCB0aGUgVmlzdWFsIG1vZGUgcmV0dXJuZWQgYnkgdmlzdWFsbW9kZSgpLgorU29sdXRpb246ICAgVXNlIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIHZpc3VhbG1vZGUoKS4gKENoYXJsZXMgQ2FtcGJlbGwpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBzcmMvZXZhbC5jLCBzcmMvbm9ybWFsLmMsCisJICAgIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4xLjMwOQorUHJvYmxlbTogICAgVGhlIHR1dG9yIGRvZXNuJ3Qgc2VsZWN0IEdlcm1hbiBpZiB0aGUgbG9jYWxlIG5hbWUgaXMKKwkgICAgIkdlcm1hbl9HZXJtYW55LjEyNTIiLiAoSm9hY2hpbSBIb2ZtYW5uKQorU29sdXRpb246ICAgQ2hlY2sgZm9yICJHZXJtYW4iIGluIHRoZSBsb2NhbGUgbmFtZS4gIEFsc28gY2hlY2sgZm9yCisJICAgICIuZ2UiLiAgQW5kIGluY2x1ZGUgdGhlIEdlcm1hbiBhbmQgR3JlZWsgdHV0b3JzLgorRmlsZXM6CSAgICBydW50aW1lL3R1dG9yL3R1dG9yLmRlLCBydW50aW1lL3R1dG9yL3R1dG9yLnZpbSwKKwkgICAgcnVudGltZS90dXRvci90dXRvci5nciwgcnVudGltZS90dXRvci90dXRvci5nci5jcDczNworCitQYXRjaCA2LjEuMzEwIChkZXBlbmRzIG9uIDYuMS4zMDcpCitQcm9ibGVtOiAgICBBbGwgZG91YmxlLWJ5dGUgY2hhcmFjdGVycyBhcmUgZGlzcGxheWVkIGFzICJYWCIuCitTb2x1dGlvbjogICBVc2UgIj49IDMyIiBpbnN0ZWFkIG9mICI8IDMyIi4gIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuMzExIChleHRyYSkKK1Byb2JsZW06ICAgIFZNUzogcGF0aCBpbiB3aW5kb3cgdGl0bGUgZG9lc24ndCBpbmNsdWRlIG5lY2Vzc2FyeSBzZXBhcmF0b3IuCisJICAgIGZpbGUgdmVyc2lvbiBkb2Vzbid0IGFsd2F5cyB3b3JrIHByb3Blcmx5IHdpdGggVW5peC4KKwkgICAgQ3Jhc2hlcyBiZWNhdXNlIG9mIG1lbW9yeSBvdmVyd3JpdGUgaW4gR1VJLgorCSAgICBEaWRuJ3QgYWx3YXlzIGhhbmRsZSBmaWxlcyB3aXRoIGxvd2VyY2FzZSBhbmQgY29ycmVjdCBwYXRoLgorU29sdXRpb246ICAgRml4IHRoZSBwcm9ibGVtcy4gIFJlbW92ZSB1bm5lY2Vzc2FyeSBmaWxlIG5hbWUgdHJhbnNsYXRpb25zLgorCSAgICAoWm9sdGFuIEFycGFkZmZ5KQorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9leF9jbWRzMi5jLCBzcmMvZmlsZWlvLmMsIHNyYy9tZW1saW5lLmMsCisJICAgIHNyYy9taXNjMS5jLCBzcmMvbWlzYzIuYywgc3JjL29zX3VuaXguYywgc3JjL29zX3Ztcy5jLCBzcmMvdGFnLmMKKworUGF0Y2ggNi4xLjMxMgorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOnNpbGVudCIgZGVidWdnaW5nIGlzIGFsc28gZG9uZSBzaWxlbnRseS4KK1NvbHV0aW9uOiAgIERpc2FibGUgc2lsZW5jZSB3aGlsZSBhdCB0aGUgZGVidWcgcHJvbXB0LgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjEuMzEzCitQcm9ibGVtOiAgICBXaGVuIGEgIjpkcm9wIGZuYW1lIiBjb21tYW5kIGlzIHVzZWQgYW5kICJmbmFtZSIgaXMgb3BlbiBpbgorCSAgICBhbm90aGVyIHdpbmRvdywgaXQgaXMgYWxzbyBvcGVuZWQgaW4gdGhlIGN1cnJlbnQgd2luZG93LgorU29sdXRpb246ICAgQ2hhbmdlIHRvIHRoZSB3aW5kb3cgd2l0aCAiZm5hbWUiIGluc3RlYWQuCisJICAgIERvbid0IHJlZGVmaW5lIHRoZSBhcmd1bWVudCBsaXN0IHdoZW4gZHJvcHBpbmcgb25seSBvbmUgZmlsZS4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvd2luZG93cy50eHQsIHNyYy9leF9jbWRzMi5jLCBzcmMvZXhfY21kcy5jLAorCSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL3Byb3RvL2V4X2NtZHMyLnBybywgc3JjL3Byb3RvL2V4X2RvY21kLnBybworCitQYXRjaCA2LjEuMzE0IChkZXBlbmRzIG9uIDYuMS4xMjYpCitQcm9ibGVtOiAgICBNaXNzaW5nIGJhY2tzbGFzaCBpbiAiR2VuZXJpYyBDb25maWcgZmlsZSIgc3ludGF4IG1lbnUuCitTb2x1dGlvbjogICBJbnNlcnQgdGhlIGJhY2tzbGFzaC4gKFphayBCZWNrKQorRmlsZXM6CSAgICBydW50aW1lL21ha2VtZW51LnZpbSwgcnVudGltZS9zeW5tZW51LnZpbQorCitQYXRjaCA2LjEuMzE1IChleHRyYSkKK1Byb2JsZW06ICAgIEEgdmVyeSBsb25nIGhvc3RuYW1lIG1heSBsZWFkIHRvIGFuIHVudGVybWluYXRlZCBzdHJpbmcuICBGYWlsaW5nCisJICAgIHRvIG9idGFpbiBhIGhvc3RuYW1lIG1heSByZXN1bHQgaW4gZ2FyYmFnZS4gIChXYWx0ZXIgQnJpc2NvZSkKK1NvbHV0aW9uOiAgIEFkZCBhIE5VTCBhdCB0aGUgZW5kIG9mIHRoZSBob3N0bmFtZSBidWZmZXIuCitGaWxlczoJICAgIHNyYy9vc19tYWMuYywgc3JjL29zX21zZG9zLmMsIHNyYy9vc191bml4LmMsIHNyYy9vc193aW4xNi5jLAorCSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjEuMzE2CitQcm9ibGVtOiAgICBXaGVuIGV4aXRpbmcgd2l0aCAid3EiIGFuZCB0aGVyZSBpcyBhIGhpZGRlbiBidWZmZXIsIGFmdGVyIHRoZQorCSAgICAiZmlsZSBjaGFuZ2VkIiBkaWFsb2cgdGhlcmUgaXMgYSB3YXJuaW5nIGZvciBhIGNoYW5nZWQgYnVmZmVyLgorCSAgICAoQWppdCBUaGFra2FyKQorU29sdXRpb246ICAgRG8gdXBkYXRlIHRoZSBidWZmZXIgdGltZXN0YW1wcyB3aGVuIGV4aXRpbmcuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMzE3CitQcm9ibGVtOiAgICBDbG9zaW5nIGEgd2luZG93IG1heSBjYXVzZSBzb21lIG9mIHRoZSByZW1haW5pbmcgd2luZG93cyB0byBiZQorCSAgICBwb3NpdGlvbmVkIHdyb25nIGlmIHRoZXJlIGlzIGEgbWl4IG9mIGhvcml6b250YWwgYW5kIHZlcnRpY2FsCisJICAgIHNwbGl0cy4gKFN0ZWZhbiBJbmdpIFZhbGRpbWFyc3NvbikKK1NvbHV0aW9uOiAgIFVwZGF0ZSB0aGUgZnJhbWUgc2l6ZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSB3aW5kb3cgcG9zaXRpb25zLgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4xLjMxOAorUHJvYmxlbTogICAgYXV0by9wYXRoZGVmLmMgY2FuIGluY2x1ZGUgd3JvbmcgcXVvdGVzIHdoZW4gYSBjb21waWxlciBmbGFnCisJICAgIGluY2x1ZGVzIHF1b3Rlcy4KK1NvbHV0aW9uOiAgIFB1dCBhIGJhY2tzbGFzaCBiZWZvcmUgdGhlIHF1b3RlcyBpbiBjb21waWxlciBmbGFncy4gKFNoaW5yYSBBaWRhKQorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4xLjMxOSAoZGVwZW5kcyBvbiA2LjEuMjc2KQorUHJvYmxlbTogICAgVXNpbmcgIi0tcmVtb3RlICtjbWQgZmlsZSIgZG9lcyBub3QgZXhlY3V0ZSAiY21kIi4KK1NvbHV0aW9uOiAgIENhbGwgaW5wdXRyZXN0b3JlKCkgaW4gdGhlIHNhbWUgY29tbWFuZCBsaW5lIGFzIGlucHV0c2F2ZSgpLAorCSAgICBvdGhlcndpc2UgaXQgd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4xLjMyMCAoZGVwZW5kcyBvbiA2LjEuMzEzKQorUHJvYmxlbTogICAgV2hlbiBhICI6ZHJvcCBvbmVcIGZpbGUiIGNvbW1hbmQgaXMgdXNlZCB0aGUgZmlsZSAib25lXCBmaWxlIiBpcworCSAgICBvcGVuZWQsIHRoZSBiYWNrc2xhc2ggaXMgbm90IHJlbW92ZWQuIChUYXJvIE11cmFva2EpCitTb2x1dGlvbjogICBIYW5kbGUgYmFja3NsYXNoZXMgY29ycmVjdGx5LiAgQWx3YXlzIHNldCB0aGUgYXJndW1lbnQgbGlzdCB0bworCSAgICBrZWVwIGl0IHNpbXBsZS4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvd2luZG93cy50eHQsIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xLjMyMQorUHJvYmxlbTogICAgV2hlbiAnbW91c2UnIGluY2x1ZGVzICduJyBidXQgbm90ICd2JywgZG9uJ3QgYWxsb3cgc3RhcnRpbmcgVmlzdWFsCisJICAgIG1vZGUgd2l0aCB0aGUgbW91c2UuCitTb2x1dGlvbjogICBEb24ndCB1c2UgTU9VU0VfTUFZX1ZJUyB3aGVuIHRoZXJlIGlzIG5vICd2JyBpbiAnbW91c2UnLiAoRmxlbW1pbmcKKwkgICAgTWFkc2VuKQorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4xLjMyMiAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjMxNSkKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgaG9zdCBuYW1lIGlzIGFsd2F5cyAiUEMgIiBwbHVzIHRoZSByZWFsIGhvc3QgbmFtZS4KK1NvbHV0aW9uOiAgIERvbid0IGluc2VydCAiUEMgIiBiZWZvcmUgdGhlIGhvc3QgbmFtZS4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4xLjMyMworUHJvYmxlbTogICAgIjpyZWdpc3RlcnMiIGRvZXNuJ3Qgc3RvcCBsaXN0aW5nIGZvciBhICJxIiBhdCB0aGUgbW9yZSBwcm9tcHQuCisJICAgIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBpbnRlcnJ1cHQgYW5kIGdvdF9pbnQuCitGaWxlczoJICAgIHNyYy9vcHMuYywgc3JjL3Byb3RvL29wcy5wcm8KKworUGF0Y2ggNi4xLjMyNAorUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiBkcmFnZ2luZyBhIHZlcnRpY2FsIHNlcGFyYXRvciB3aGVuIDxMZWZ0TW91c2U+IGlzCisJICAgIHJlbWFwcGVkIHRvIGp1bXAgdG8gYW5vdGhlciB3aW5kb3cuCitTb2x1dGlvbjogICBQYXNzIHRoZSB3aW5kb3cgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gZG9pbmcgdGhlIGRyYWdnaW5nIGluc3RlYWQKKwkgICAgb2YgYWx3YXlzIHVzaW5nIHRoZSBjdXJyZW50IHdpbmRvdy4gKERhbmllbCBFbHN0bmVyKQorCSAgICBBbHNvIGZpeCB0aGF0IHN0YXJ0aW5nIGEgZHJhZyBjaGFuZ2VzIHdpbmRvdyBmb2N1cy4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jLCBzcmMvcHJvdG8vd2luZG93LnBybywgc3JjL3VpLmMsIHNyYy92aW0uaCwKKwkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMS4zMjUKK1Byb2JsZW06ICAgIFNoaWZ0LVRhYiBpcyBub3QgYXV0b21hdGljYWxseSByZWNvZ25pemVkIGluIGFuIHh0ZXJtLgorU29sdXRpb246ICAgQWRkIDxFc2M+W1ogYXMgdGhlIHRlcm1jYXAgY29kZS4gKEFuZHJldyBQaW1sb3R0KQorRmlsZXM6CSAgICBzcmMvdGVybS5jCisKK1BhdGNoIDYuMS4zMjYKK1Byb2JsZW06ICAgIFVzaW5nIGEgc2VhcmNoIHBhdHRlcm4gbWF5IHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIGRhdGEgKFlhc3VoaXJvCisJICAgIE1hdHN1bW90bykKK1NvbHV0aW9uOiAgIEluaXRpYWxpemUgcG9pbnRlcnMgdG8gTlVMTC4KK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMS4zMjcKK1Byb2JsZW06ICAgIFdoZW4gb3BlbmluZyB0aGUgIm1ieXRlLnR4dCIgaGVscCBmaWxlIHRoZSB1dGYtOCBjaGFyYWN0ZXJzIGFyZQorCSAgICB1bnJlYWRhYmxlLCBiZWNhdXNlIHRoZSBmaWxlZW5jb2RpbmcgaXMgZm9yY2VkIHRvIGJlIGxhdGluMS4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciB1dGYtOCBlbmNvZGluZyBmaXJzdCBpbiBoZWxwIGZpbGVzLiAoRGFuaWVsIEVsc3RuZXIpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL21ieXRlLnR4dCwgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMS4zMjgKK1Byb2JsZW06ICAgIFByb3RvdHlwZSBmb3IgZW5jX2Nhbm9uX3NlYXJjaCgpIGlzIG1pc3NpbmcuCitTb2x1dGlvbjogICBBZGQgdGhlIHByb3RvdHlwZS4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjEuMzI5CitQcm9ibGVtOiAgICBXaGVuIGVkaXRpbmcgYSBmaWxlICJhIGIgYyIgcmVwbGFjaW5nICIlIiBpbiAiOkNtZCAlIiBvciAiOm5leHQgJSIKKwkgICAgZG9lcyBub3Qgd29yayBwcm9wZXJseS4gIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIEFsd2F5cyBlc2NhcGUgc3BhY2VzIHdoZW4gZXhwYW5kaW5nICIlIi4gIERvbid0IHNwbGl0IGFyZ3VtZW50IGZvcgorCSAgICA8Zi1hcmdzPiBpbiBhIHVzZXIgY29tbWFuZCB3aGVuIG9ubHkgb25lIGFyZ3VtZW50IGlzIHVzZWQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4zMzAKK1Byb2JsZW06ICAgIEdUSywgTW90aWYgYW5kIEF0aGVuYTogS2V5cGFkIGtleXMgcHJvZHVjZSB0aGUgc2FtZSBjb2RlIGFzCisJICAgIG5vbi1rZXlwYWQga2V5cywgbWFraW5nIGl0IGltcG9zc2libGUgdG8gbWFwIHRoZW0gc2VwYXJhdGVseS4KK1NvbHV0aW9uOiAgIFVzZSBkaWZmZXJlbnQgdGVybWNhcCBjb2RlcyBmb3IgdGhlIGtleXBhZCBrZXlzLiAoTmVpbCBCaXJkKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYywgc3JjL2d1aV94MTEuYworCitQYXRjaCA2LjEuMzMxCitQcm9ibGVtOiAgICBXaGVuIHRyYW5zbGF0aW5nIHRoZSBoZWxwIGZpbGVzLCAiTE9DQUwgQURESVRJT05TIiBubyBsb25nZXIgbWFya3MKKwkgICAgdGhlIHNwb3Qgd2hlcmUgaGVscCBmaWxlcyBmcm9tIHBsdWdpbnMgYXJlIHRvIGJlIGxpc3RlZC4KK1NvbHV0aW9uOiAgIEFkZCBhICJsb2NhbC1hZGRpdGlvbnMiIHRhZyBhbmQgdXNlIHRoYXQgdG8gZmluZCB0aGUgcmlnaHQgc3BvdC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvaGVscC50eHQsIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xLjMzMiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogTG9hZGluZyBQZXJsIGR5bmFtaWNhbGx5IGRvZXNuJ3Qgd29yayB3aXRoIFBlcmwgNS44LgorCSAgICBQZXJsIDUuOCBhbHNvIGRvZXMgbm90IHdvcmsgd2l0aCBDeWd3aW4gYW5kIE1pbmcuCitTb2x1dGlvbjogICBBZGp1c3QgdGhlIGZ1bmN0aW9uIGNhbGxzLiAoVGFybyBNdXJhb2thKQorCSAgICBBZGp1c3QgdGhlIGN5ZyBhbmQgbWluZyBtYWtlZmlsZXMuIChEYW4gU2hhcnApCitGaWxlczoJICAgIHNyYy9NYWtlX2N5Zy5tYWssIHNyYy9NYWtlX21pbmcubWFrLCBzcmMvTWFrZV9tdmMubWFrLAorCSAgICBzcmMvaWZfcGVybC54cworCitQYXRjaCA2LjEuMzMzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBDYW4ndCBoYW5kbGUgVW5pY29kZSB0ZXh0IG9uIHRoZSBjbGlwYm9hcmQuCisJICAgIENhbid0IHBhc3MgTlVMIGJ5dGUsIGl0IGJlY29tZXMgYSBsaW5lIGJyZWFrLiAgKEJydWNlIERlVmlzc2VyKQorU29sdXRpb246ICAgU3VwcG9ydCBVbmljb2RlIGZvciB0aGUgY2xpcGJvYXJkIChSb24gQWFyb24gYW5kIEdsZW5uIE1heW5hcmQpCisJICAgIEFsc28gc3VwcG9ydCBjb3B5L3Bhc3RlIG9mIE5VTCBieXRlcy4KK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMsIHNyYy9vc193aW4xNi5jIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMS4zMzQgKGV4dHJhLCBkZXBlbmRzIG9uIDYuMS4zMDMpCitQcm9ibGVtOiAgICBQcm9ibGVtIHdpdGggZHJhd2luZyBIZWJyZXcgY2hhcmFjdGVycy4KK1NvbHV0aW9uOiAgIE9ubHkgdXNlIEVUT19QRFkgZm9yIFdpbmRvd3MgTlQgYW5kIHRoZSBsaWtlLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMS4zMzUgKGV4dHJhKQorUHJvYmxlbTogICAgRmFpbHVyZSBvZiBvYnRhaW5pbmcgdGhlIGN1cnNvciBwb3NpdGlvbiBhbmQgd2luZG93IHNpemUgaXMKKwkgICAgaWdub3JlZC4KK1NvbHV0aW9uOiAgIFJlbW92ZSBhIHNlbWljb2xvbiBhZnRlciBhbiAiaWYiLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4xLjMzNiAoZXh0cmEpCitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciB1c2Ugb2YgZnVuY3Rpb24gcHJvdG90eXBlcyBvZiBzbXNnKCkuCitTb2x1dGlvbjogICBEZWZpbmUgSEFWRV9TVERBUkdfSC4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuaAorCitQYXRjaCA2LjEuMzM3CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICJmaW5pc2giIGluIGRlYnVnIG1vZGUgaW4gZnVuY3Rpb24gQigpIGZvciAiOmNhbGwKKwkgICAgQShCKCkpIiBkb2VzIG5vdCBzdG9wIGFmdGVyIEIoKSBpcyBmaW5pc2hlZC4KK1NvbHV0aW9uOiAgIEluY3JlYXNlIGRlYnVnX2xldmVsIHdoaWxlIGV2YWx1YXRpbmcgYSBmdW5jdGlvbi4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjMzOAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIG1lbnUgdGhhdCBjaGVja3Mgb3V0IHRoZSBjdXJyZW50IGZpbGUgZnJvbSBJbnNlcnQKKwkgICAgbW9kZSwgdGhlcmUgaXMgbm8gd2FybmluZyBmb3IgdGhlIGNoYW5nZWQgZmlsZSB1bnRpbCBleGl0aW5nCisJICAgIEluc2VydCBtb2RlLiAgKFNyaWthbnRoIFNhbmthcmFuKQorU29sdXRpb246ICAgQWRkIGEgY2hlY2sgZm9yIG5lZWRfY2hlY2tfdGltZXN0YW1wcyBpbiB0aGUgSW5zZXJ0IG1vZGUgbG9vcC4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjEuMzM5CitQcm9ibGVtOiAgICBDb21wbGV0aW9uIGRvZXNuJ3QgYWxsb3cgImc6IiBpbiAiOmxldCBnOmRpZF88VGFiPiIuIChCZW5qaQorCSAgICBGaXNoZXIpCitTb2x1dGlvbjogICBSZXR1cm4gImc6dmFyIiBmb3IgZ2xvYmFsIHZhcmlhYmxlcyB3aGVuIHRoYXQgaXMgd2hhdCBpcyBiZWluZworCSAgICBleHBhbmRlZC4gKEZsZW1taW5nIE1hZHNlbikKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMzQwIChleHRyYSwgZGVwZW5kcyBvbiA2LjEuMzMyKQorUHJvYmxlbTogICAgV2luMzI6IENhbid0IGNvbXBpbGUgdGhlIFBlcmwgaW50ZXJmYWNlIHdpdGggbm1ha2UuCitTb2x1dGlvbjogICBEb24ndCBjb21wYXJlIHRoZSB2ZXJzaW9uIG51bWJlciBhcyBhIHN0cmluZyBidXQgYXMgYSBudW1iZXIuCisJICAgIChKdWVyZ2VuIEtyYWVtZXIpCitGaWxlczoJICAgIHNyYy9NYWtlX212Yy5tYWsKKworUGF0Y2ggNi4xLjM0MQorUHJvYmxlbTogICAgSW4gSW5zZXJ0IG1vZGUgd2l0aCAncmlnaHRsZWZ0JyBzZXQgdGhlIGN1cnNvciBpcyBkcmF3biBoYWxmd2F5IGEKKwkgICAgZG91YmxlLXdpZGUgY2hhcmFjdGVyLiAgRm9yIENUUkwtUiBhbmQgQ1RSTC1LIGluIEluc2VydCBtb2RlIHRoZSAiCisJICAgIG9yID8gaXMgbm90IGRpc3BsYXllZC4KK1NvbHV0aW9uOiAgIERyYXcgdGhlIGN1cnNvciBpbiB0aGUgbmV4dCBjaGFyYWN0ZXIgY2VsbC4gIERpc3BsYXkgdGhlICIgb3IgPworCSAgICBvdmVyIHRoZSByaWdodCBoYWxmIG9mIHRoZSBkb3VibGUtd2lkZSBjaGFyYWN0ZXIuIChZYXN1aGlybworCSAgICBNYXRzdW1vdG8pICBBbHNvIGZpeCB0aGF0IGNhbmNlbGxpbmcgYSBkaWdyYXBoIGRvZXNuJ3QgcmVkcmF3CisJICAgIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyIGNvcnJlY3RseS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL2d1aS5jLCBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjEuMzQyIChkZXBlbmRzIG9uIDYuMS4zNDEpCitQcm9ibGVtOiAgICBXaXRoICdyaWdodGxlZnQnIHNldCB0eXBpbmcgImMiIG9uIGEgZG91YmxlLXdpZGUgY2hhcmFjdGVyIGNhdXNlcworCSAgICB0aGUgY3Vyc29yIHRvIGJlIGRpc3BsYXllZCBvbmUgY2VsbCB0byB0aGUgbGVmdC4KK1NvbHV0aW9uOiAgIERyYXcgdGhlIGN1cnNvciBpbiB0aGUgbmV4dCBjaGFyYWN0ZXIgY2VsbC4gIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjEuMzQzIChkZXBlbmRzIG9uIDYuMS4zNDIpCitQcm9ibGVtOiAgICBDYW5ub3QgY29tcGlsZSB3aXRoIHRoZSArbXVsdGlfYnl0ZSBmZWF0dXJlIGJ1dCB3aXRob3V0ICtyaWdodGxlZnQuCisJICAgIENhbm5vdCBjb21waWxlIHdpdGhvdXQgdGhlIEdVSS4KK1NvbHV0aW9uOiAgIEZpeCB0aGUgI2lmZGVmcy4gIChwYXJ0bHkgYnkgTmFtIFN1bmdIeXVuKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMsIHNyYy9tYnl0ZS5jLCBzcmMvdWkuYworCitQYXRjaCA2LjEuMzQ0CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6c2lsZW50IGZpbGV0eXBlIiB0aGUgb3V0cHV0IGlzIHN0aWxsIHB1dCBpbiB0aGUKKwkgICAgbWVzc2FnZSBoaXN0b3J5LiAoSGFyaSBLcmlzaG5hIERhcmEpCitTb2x1dGlvbjogICBEb24ndCBhZGQgbWVzc2FnZXMgaW4gdGhlIGhpc3Rvcnkgd2hlbiAiOnNpbGVudCIgaXMgdXNlZC4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYworCitQYXRjaCA2LjEuMzQ1IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiAnaW1kaXNhYmxlJyBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBNYWtlICdpbWRpc2FibGUnIHdvcmsuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4xLjM0NgorUHJvYmxlbTogICAgVGhlIHNjcm9sbCB3aGVlbCBjYW4gb25seSBzY3JvbGwgdGhlIGN1cnJlbnQgd2luZG93LgorU29sdXRpb246ICAgTWFrZSB0aGUgc2Nyb2xsIHdoZWVsIHNjcm9sbCB0aGUgd2luZG93IHRoYXQgdGhlIG1vdXNlIHBvaW50cyB0by4KKwkgICAgKERhbmllbCBFbHN0bmVyKQorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvZ3VpLmMsIHNyYy9ub3JtYWwuYywgc3JjL3Rlcm0uYworCitQYXRjaCA2LjEuMzQ3CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGNzY29wZSB0byBsaXN0IG1hdGNoaW5nIHRhZ3MsIHRoZSBsaXN0ZWQgbnVtYmVyIGlzCisJICAgIHNvbWV0aW1lcyBub3QgZXF1YWwgdG8gd2hhdCBjc2NvcGUgdXNlcy4gKFZpaHJlbiBNaWxldikKK1NvbHV0aW9uOiAgIEZvciBjc2NvcGUgdGFncyB1c2Ugb25seSBvbmUgdGFibGUsIGRvbid0IGdpdmUgdGFncyBpbiB0aGUgY3VycmVudAorCSAgICBmaWxlIGEgaGlnaGVyIHByaW9yaXR5LgorRmlsZXM6CSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNi4xLjM0OAorUHJvYmxlbTogICAgV2lsZG1vZGUgd2l0aCB3aWxkbWVudTogIjpzZXQgd2lsZG1vZGU9bGlzdCxmdWxsIiwgIjpjb2xvcnNjaGVtZQorCSAgICA8dGFiPiIgcmVzdWx0cyBpbiAiemVsbG5lciIgaW5zdGVhZCBvZiB0aGUgZmlyc3QgZW50cnkuIChBbmFuZAorCSAgICBIYXJpaGFyYW4pCitTb2x1dGlvbjogICBEb24ndCBjYWxsIEV4cGFuZE9uZSgpIGZyb20gZ2xvYnBhdGgoKS4gKEZsZW1taW5nIE1hZHNlbikKK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNi4xLjM0OQorUHJvYmxlbTogICAgInZpbSAtLXNlcnZlcmxpc3QiIHdoZW4gbm8gc2VydmVyIHdhcyBldmVyIHN0YXJ0ZWQgZ2l2ZXMgYW4gZXJyb3IKKwkgICAgbWVzc2FnZSB3aXRob3V0ICJcbiIuCisJICAgICJ2aW0gLS1zZXJ2ZXJsaXN0IiBkb2Vzbid0IGV4aXQgd2hlbiB0aGUgWCBzZXJ2ZXIgY2FuJ3QgYmUKKwkgICAgY29udGFjdGVkLCBpdCBzdGFydHMgVmltIHVuZXhwZWN0ZWRseS4gKFJpY2FyZG8gU2lnbmVzKQorU29sdXRpb246ICAgRG9uJ3QgZ2l2ZSBhbiBlcnJvciB3aGVuIG5vIFZpbSBzZXJ2ZXIgd2FzIGV2ZXIgc3RhcnRlZC4KKwkgICAgVHJlYXQgZmFpbGluZyBvZiBvcGVuaW5nIHRoZSBkaXNwbGF5IGVxdWFsIHRvIGVycm9ycyBpbnNpZGUgdGhlCisJICAgIHJlbW90ZSooKSBmdW5jdGlvbnMuIChGbGVtbWluZyBNYWRzZW4pCitGaWxlczoJICAgIHNyYy9pZl94Y21kc3J2LmMsIHNyYy9tYWluLmMKKworUGF0Y2ggNi4xLjM1MAorUHJvYmxlbTogICAgV2hlbiBlbnRlcmluZyBhIGJ1ZmZlciB3aXRoICI6Ym5leHQiIGZvciB0aGUgZmlyc3QgdGltZSwgdXNpbmcgYW4KKwkgICAgYXV0b2NvbW1hbmQgdG8gcmVzdG9yZSB0aGUgbGFzdCB1c2VkIGN1cnNvciBwb3NpdGlvbiBkb2Vzbid0IHdvcmsuCisJICAgIChQYW9sbyBHaWFydXNzbykKK1NvbHV0aW9uOiAgIERvbid0IHVzZSB0aGUgbGFzdCBrbm93biBjdXJzb3IgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgVmltCisJICAgIGludm9jYXRpb24gaWYgYW4gYXV0b2NvbW1hbmQgY2hhbmdlZCB0aGUgcG9zaXRpb24uCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuMzUxIChkZXBlbmRzIG9uIDYuMS4zNDkpCitQcm9ibGVtOiAgICBDcmFzaCB3aGVuIHN0YXJ0aW5nIFZpbSB0aGUgZmlyc3QgdGltZSBpbiBhbiBYIHNlcnZlci4gKEpvaG4KKwkgICAgTWNHb3dhbikKK1NvbHV0aW9uOiAgIERvbid0IGNhbGwgeEZyZWUoKSB3aXRoIGEgZml4ZWQgc3RyaW5nLgorRmlsZXM6CSAgICBzcmMvaWZfeGNtZHNydi5jCisKK1BhdGNoIDYuMS4zNTIgKGV4dHJhLCBkZXBlbmRzIG9uIDYuMS4zNDUpCitQcm9ibGVtOiAgICBXaW4zMjogQ3Jhc2ggd2hlbiBzZXR0aW5nICJpbWRpc2FibGUiIGluIF92aW1yYy4KK1NvbHV0aW9uOiAgIERvbid0IGNhbGwgSU1FIGZ1bmN0aW9ucyB3aGVuIGltbTMyLmRsbCB3YXMgbm90IGxvYWRlZCAoeWV0KS4KKwkgICAgQWxzbyBhZGQgdHlwZWNhc3RzIHRvIGF2b2lkIENvbXBpbGVyIHdhcm5pbmdzIGZvcgorCSAgICBJbW1Bc3NvY2lhdGVDb250ZXh0KCkgYXJndW1lbnQuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4xLjM1MyAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjMzNCkKK1Byb2JsZW06ICAgIFByb2JsZW0gd2l0aCBkcmF3aW5nIEFyYWJpYyBjaGFyYWN0ZXJzLgorU29sdXRpb246ICAgRG9uJ3QgdXNlIEVUT19QRFksIGRvIHVzZSBwYWRkaW5nLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMS4zNTQgKGV4dHJhLCBkZXBlbmRzIG9uIDYuMS4zMzMpCitQcm9ibGVtOiAgICBNUy1XaW5kb3dzIDk4OiBOb3RlcGFkIGNhbid0IHBhc3RlIHRleHQgY29waWVkIGZyb20gVmltIHdoZW4KKwkgICAgJ2VuY29kaW5nJyBpcyAidXRmLTgiLgorU29sdXRpb246ICAgQWxzbyBtYWtlIENGX1RFWFQgYXZhaWxhYmxlIG9uIHRoZSBjbGlwYm9hcmQuIChSb24gQWFyb24pCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jCisKK1BhdGNoIDYuMS4zNTUKK1Byb2JsZW06ICAgIEluIGEgcmVnZXhwICdcbicgd2lsbCBuZXZlciBtYXRjaCBhbnl0aGluZyBpbiBhIHN0cmluZy4KK1NvbHV0aW9uOiAgIE1ha2UgJ1xuJyBtYXRjaCBhIG5ld2xpbmUgY2hhcmFjdGVyLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9lZGl0LmMsIHNyYy9ldmFsLmMsIHNyYy9leF9jbWRzMi5jLAorCSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9maWxlaW8uYywgc3JjL21pc2MxLmMsCisJICAgIHNyYy9vcHRpb24uYywgc3JjL29zX21hYy5jLCBzcmMvb3NfdW5peC5jLCBzcmMvcXVpY2tmaXguYywKKwkgICAgc3JjL3JlZ2V4cC5jLCBzcmMvc2VhcmNoLmMsIHNyYy9zeW50YXguYywgc3JjL3RhZy5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4xLjM1NiAoZXh0cmEsIGRlcGVuZHMgb24sIHdlbGwsIGVoLCBzZXZlcmFsIG90aGVycykKK1Byb2JsZW06ICAgIENvbXBpbGVyIHdhcm5pbmdzIGZvciB1c2luZyBjb252ZXJ0X3NldHVwKCkgYW5kIGEgZmV3IG90aGVyCisJICAgIHRoaW5ncy4KK1NvbHV0aW9uOiAgIEFkZCB0eXBlY2FzdHMuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jLCBzcmMvb3NfbXN3aW4uYywgc3JjL3Byb3RvL29zX3dpbjMyLnBybywgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4xLjM1NworUHJvYmxlbTogICAgQ1IgaW4gdGhlIHF1aWNrZml4IHdpbmRvdyBqdW1wcyB0byB0aGUgZXJyb3IgdW5kZXIgdGhlIGN1cnNvciwgYnV0CisJICAgIHRoaXMgZG9lc24ndCB3b3JrIGluIEluc2VydCBtb2RlLiAoU3Jpa2FudGggU2Fua2FyYW4pCitTb2x1dGlvbjogICBIYW5kbGUgQ1IgaW4gSW5zZXJ0IG1vZGUgaW4gdGhlIHF1aWNrZml4IHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjEuMzU4CitQcm9ibGVtOiAgICBUaGUgdHV0b3IgZG9lc24ndCBzZWxlY3QgYW5vdGhlciBsb2NhbGUgdmVyc2lvbiBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIEluc2VydCB0aGUgImxldCIgY29tbWFuZC4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgcnVudGltZS90dXRvci90dXRvci52aW0KKworUGF0Y2ggNi4xLjM1OSAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWMgQ2FyYm9uOiBWaW0gZG9lc24ndCBnZXQgZm9jdXMgd2hlbiBzdGFydGVkIGZyb20gdGhlIGNvbW1hbmQKKwkgICAgbGluZS4gIENyYXNoIHdoZW4gdXNpbmcgaG9yaXpvbnRhbCBzY3JvbGwgYmFyLgorU29sdXRpb246ICAgU2V0IFZpbSBhcyB0aGUgZnJvbnRwcm9jZXNzLiAgRml4IHNjcm9sbGluZy4gIChQZXRlciBDdWNrYSkKK0ZpbGVzOgkgICAgc3JjL2d1aV9tYWMuYworCitQYXRjaCA2LjEuMzYwIChkZXBlbmRzIG9uIDYuMS4zNDEpCitQcm9ibGVtOiAgICBJbiBJbnNlcnQgbW9kZSBDVFJMLUsgRVNDIG1lc3NlcyB1cCBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLgorCSAgICAoQW5kZXJzIEhlbG1lcnNzb24pCitTb2x1dGlvbjogICBTYXZlIGFsbCBieXRlcyBvZiBhIGNoYXJhY3RlciB3aGVuIGRpc3BsYXlpbmcgYSBjaGFyYWN0ZXIKKwkgICAgdGVtcG9yYXJpbHkuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9wcm90by9zY3JlZW4ucHJvLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjM2MQorUHJvYmxlbTogICAgQ2Fubm90IGp1bXAgdG8gYSBmaWxlIG1hcmsgd2l0aCAiOidNIi4KK1NvbHV0aW9uOiAgIEFsbG93IGp1bXBpbmcgdG8gYW5vdGhlciBmaWxlIGZvciBhIG1hcmsgaW4gYW4gRXggYWRkcmVzcyB3aGVuIGl0CisJICAgIGlzIHRoZSBvbmx5IHRoaW5nIGluIHRoZSBjb21tYW5kIGxpbmUuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4zNjIKK1Byb2JsZW06ICAgIHRnZXRlbnQoKSBtYXkgcmV0dXJuIHplcm8gZm9yIHN1Y2Nlc3MuIHRnZXRmbGFnKCkgbWF5IHJldHVybiAtMQorCSAgICBmb3IgYW4gZXJyb3IuCitTb2x1dGlvbjogICBDaGVjayB0Z2V0ZmxhZygpIGZvciByZXR1cm5pbmcgYSBwb3NpdGl2ZSB2YWx1ZS4gIEFkZCBhbiBhdXRvY29uZgorCSAgICBjaGVjayBmb3IgdGhlIHZhbHVlIHRoYXQgdGdldGVudCgpIHJldHVybnMuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZy5oLmluLCBzcmMvY29uZmlndXJlLmluLCBzcmMvdGVybS5jCisKK1BhdGNoIDYuMS4zNjMKK1Byb2JsZW06ICAgIGJ5dGUybGluZSgpIGNhbiByZXR1cm4gb25lIG1vcmUgdGhhbiB0aGUgbnVtYmVyIG9mIGxpbmVzLgorU29sdXRpb246ICAgUmV0dXJuIC0xIGlmIHRoZSBvZmZzZXQgaXMgb25lIGJ5dGUgcGFzdCB0aGUgZW5kLgorRmlsZXM6CSAgICBzcmMvbWVtbGluZS5jCisKK1BhdGNoIDYuMS4zNjQKK1Byb2JsZW06ICAgIFRoYXQgdGhlIEZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQgZXZlbnQgbmV2ZXIgbmVzdHMgbWFrZXMgaXQKKwkgICAgZGlmZmljdWx0IHRvIHJlbG9hZCBhIGZpbGUgaW4gYSBub3JtYWwgd2F5LgorU29sdXRpb246ICAgQWxsb3cgbmVzdGluZyBmb3IgdGhlIEZpbGVDaGFuZ2VkU2hlbGwgZXZlbnQgYnV0IGRvIG5vdCBhbGxvdworCSAgICB0cmlnZ2VyaW5nIGl0c2VsZiBhZ2Fpbi4KKwkgICAgQWxzbyBhdm9pZCBhdXRvY29tbWFuZHMgZm9yIHRoZSBjbWRsaW5lIHdpbmRvdyBpbiByYXJlIGNhc2VzLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL2ZpbGVpby5jLCBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4xLjM2NSAoZGVwZW5kcyBvbiA2LjEuMjE3KQorUHJvYmxlbTogICAgU2V0dGluZyBhIGJyZWFrcG9pbnQgaW4gYSBzb3VyY2VkIGZpbGUgd2l0aCBhIHJlbGF0aXZlIHBhdGggbmFtZQorCSAgICBkb2Vzbid0IHdvcmsuIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgRXhwYW5kIHRoZSBmaWxlIG5hbWUgdG8gYSBmdWxsIHBhdGguCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMS4zNjYKK1Byb2JsZW06ICAgIENhbid0IHVzZSBWaW0gd2l0aCBOZXRiZWFucy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgTmV0YmVhbnMgaW50ZXJmYWNlLiAgSW5jbHVkZXMgc3VwcG9ydCBmb3Igc2lnbiBpY29ucyBhbmQKKwkgICAgIi1mZyIgYW5kICItYmciIGFyZ3VtZW50cyBmb3IgR1RLLiAgQWRkIHRoZSAnYXV0b2NoZGlyJworCSAgICBvcHRpb24uICAoR29yZG9uIFByaWV1ciwgR2VvcmdlIEhlcm5hbmRleiwgRGF2ZSBXZWF0aGVyZm9yZCkKKwkgICAgTWFrZSBpdCBwb3NzaWJsZSB0byBkaXNwbGF5IGJvdGggYSBzaWduIHdpdGggYSB0ZXh0IGFuZCBvbmUgd2l0aAorCSAgICBsaW5lIGhpZ2hsaWdodGluZyBpbiB0aGUgc2FtZSBsaW5lLgorCSAgICBBZGQgc3VwcG9ydCBmb3IgQWdpZGUsIGludGVyZmFjZSB2ZXJzaW9uIDIuMS4KKwkgICAgQWxzbyBmaXggdGhhdCB3aGVuICdpc2tleXdvcmQnIGluY2x1ZGVzICc/JyB0aGUgIioiIGNvbW1hbmQKKwkgICAgZG9lc24ndCB3b3JrIHByb3Blcmx5IG9uIGEgd29yZCB0aGF0IGluY2x1ZGVzICI/IiAoQmlsbCBNY0NhcnRoeSk6CisJICAgIERvbid0IGVzY2FwZSAiPyIgdG8gIlw/IiB3aGVuIHNlYXJjaGluZyBmb3J3YXJkLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9NYWtlZmlsZSwgcnVudGltZS9kb2MvbmV0YmVhbnMudHh0LAorCSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgcnVudGltZS9kb2MvdmFyaW91cy50eHQsCisJICAgIHNyYy9NYWtlZmlsZSwgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvYnVmZmVyLmMsIHNyYy9jb25maWcuaC5pbiwKKwkgICAgc3JjL2NvbmZpZy5tay5pbiwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2VkaXQuYywgc3JjL2V4X2NtZHMuYywKKwkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9mZWF0dXJlLmgsIHNyYy9maWxlaW8uYywgc3JjL2dsb2JhbHMuaCwKKwkgICAgc3JjL2d1aS5jLCBzcmMvZ3VpX2JldmFsLmMsIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvZ3VpX3gxMS5jLAorCSAgICBzcmMvbWFpbi5jLCBzcmMvbWVtbGluZS5jLCBzcmMvbWlzYzEuYywgc3JjL21pc2MyLmMsIHNyYy9tb3ZlLmMsCisJICAgIHNyYy9uYmRlYnVnLmMsIHNyYy9uYmRlYnVnLmgsIHNyYy9uZXRiZWFucy5jLCBzcmMvbm9ybWFsLmMsCisJICAgIHNyYy9vcHMuYywgc3JjL29wdGlvbi5jLCBzcmMvb3B0aW9uLmgsIHNyYy9wcm90by9idWZmZXIucHJvLAorCSAgICBzcmMvcHJvdG8vZ3VpX2JldmFsLnBybywgc3JjL3Byb3RvL2d1aV9ndGtfeDExLnBybywKKwkgICAgc3JjL3Byb3RvL2d1aV94MTEucHJvLCBzcmMvcHJvdG8vbWlzYzIucHJvLAorCSAgICBzcmMvcHJvdG8vbmV0YmVhbnMucHJvLCBzcmMvcHJvdG8vbm9ybWFsLnBybywgc3JjL3Byb3RvL3VpLnBybywKKwkgICAgc3JjL3Byb3RvLmgsIHNyYy9zY3JlZW4uYywgc3JjL3N0cnVjdHMuaCwgc3JjL3VpLmMsIHNyYy91bmRvLmMsCisJICAgIHNyYy92aW0uaCwgc3JjL3dpbmRvdy5jLCBzcmMvd29ya3Nob3AuYworCitQYXRjaCA2LjEuMzY3IChkZXBlbmRzIG9uIDYuMS4zNjUpCitQcm9ibGVtOiAgICBTZXR0aW5nIGEgYnJlYWtwb2ludCBpbiBhIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yay4gIEZvciBhIHNvdXJjZWQKKwkgICAgZmlsZSBpdCBkb2Vzbid0IHdvcmsgd2hlbiBzeW1ib2xpYyBsaW5rcyBhcmUgaW52b2x2ZWQuICAoU2VydmF0aXVzCisJICAgIEJyYW5kdCkKK1NvbHV0aW9uOiAgIEV4cGFuZCB0aGUgZmlsZSBuYW1lIGluIHRoZSBzYW1lIHdheSBhcyBkb19zb3VyY2UoKSBkb2VzLiAgRG9uJ3QKKwkgICAgcHJlcGVuZCB0aGUgcGF0aCB0byBhIGZ1bmN0aW9uIG5hbWUuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMS4zNjgKK1Byb2JsZW06ICAgIENvbXBsZXRpb24gZm9yICI6bWFwIiBkb2VzIG5vdCBpbmNsdWRlIDxzaWxlbnQ+IGFuZCA8c2NyaXB0Pi4KKwkgICAgIjpta2V4cmMiIGRvIG5vdCBzYXZlIHRoZSA8c2lsZW50PiBhdHRyaWJ1dGUgb2YgbWFwcGluZ3MuCitTb2x1dGlvbjogICBBZGQgIjxzaWxlbnQ+IiB0byB0aGUgZ2VuZXJhdGVkIG1hcCBjb21tYW5kcyB3aGVuIGFwcHJvcHJpYXRlLgorCSAgICAoRGF2aWQgRWxzdG5lcikKKwkgICAgQWRkIDxzaWxlbnQ+IGFuZCA8c2NyaXB0PiB0byBjb21tYW5kIGxpbmUgY29tcGxldGlvbi4KK0ZpbGVzOgkgICAgc3JjL2dldGNoYXIuYworCitQYXRjaCA2LjEuMzY5IChleHRyYSkKK1Byb2JsZW06ICAgIFZNUzogVmltIGhhbmdzIHdoZW4gYXR0ZW1wdGluZyB0byBlZGl0IGEgcmVhZC1vbmx5IGZpbGUgaW4gdGhlCisJICAgIHRlcm1pbmFsLiAgUHJvYmxlbSB3aXRoIFZNUyBmaWxlbmFtZXMgZm9yIHF1aWNrZml4LgorU29sdXRpb246ICAgUmV3cml0ZSBsb3cgbGV2ZWwgaW5wdXQuICBSZW1vdmUgdmVyc2lvbiBudW1iZXIgZnJvbSBmaWxlIG5hbWUgaW4KKwkgICAgYSBjb3VwbGUgbW9yZSBwbGFjZXMuICBGaXggY3Jhc2ggYWZ0ZXIgcGF0Y2ggNi4xLjM2Mi4gIENvcnJlY3QKKwkgICAgcmV0dXJuIGNvZGUgZm9yIHN5c3RlbSgpLiAgKFpvbHRhbiBBcnBhZGZmeSwgVG9tYXMgU3RlaGxpaykKK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMsIHNyYy9vc191bml4LmMsIHNyYy9vc192bXMuYywgc3JjL3Byb3RvL29zX3Ztcy5wcm8sCisJICAgIHNyYy9vc192bXNfY29uZi5oLCBzcmMvcXVpY2tmaXguYywgc3JjL3VpLmMKKworUGF0Y2ggNi4xLjM3MAorUHJvYmxlbTogICAgI2lmZGVmIG5lc3RpbmcgaXMgdW5jbGVhci4KK1NvbHV0aW9uOiAgIEluc2VydCBzcGFjZXMgdG8gaW5kaWNhdGUgdGhlIG5lc3RpbmcuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xLjM3MQorUHJvYmxlbTogICAgIiVWIiBpbiAnc3RhdHVzbGluZScgZG9lc24ndCBzaG93ICIwLTEiIGluIGFuIGVtcHR5IGxpbmUuCitTb2x1dGlvbjogICBBZGQgb25lIHRvIHRoZSBjb2x1bW4gd2hlbiBjb21wYXJpbmcgd2l0aCB2aXJ0dWFsIGNvbHVtbiAoQW5kcmV3CisJICAgIFBpbWxvdHQpCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuMzcyCitQcm9ibGVtOiAgICBXaXRoIDE2IGJpdCBpbnRzIHRoZXJlIGFyZSBjb21waWxlciB3YXJuaW5ncy4gKFdhbHRlciBCcmlzY29lKQorU29sdXRpb246ICAgQ2hhbmdlIGludCBpbnRvIGxvbmcuCitGaWxlczoJICAgIHNyYy9zdHJ1Y3RzLmgsIHNyYy9zeW50YXguYworCitQYXRjaCA2LjEuMzczCitQcm9ibGVtOiAgICBUaGUgZGVmYXVsdCBwYWdlIGhlYWRlciBmb3IgcHJpbnRpbmcgaXMgbm90IHRyYW5zbGF0ZWQuCitTb2x1dGlvbjogICBBZGQgXygpIGFyb3VuZCB0aGUgdHdvIHBsYWNlcyB3aGVyZSAiUGFnZSIgaXMgdXNlZC4gKE1pa2UKKwkgICAgV2lsbGlhbXMpICBUcmFuc2xhdGUgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd0aXRsZW9sZCcgYW5kCisJICAgICdwcmludGhlYWRlcicgb3B0aW9ucy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMsIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjEuMzc0IChleHRyYSkKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3M6IENhbm5vdCBidWlsZCBHdmltRXh0IHdpdGggTWluZ1cgb3IgQ3lnd2luLgorU29sdXRpb246ICAgQWRkIG1ha2VmaWxlIGFuZCBtb2RpZmllZCByZXNvdXJjZSBmaWxlcy4gKFJlbmUgZGUgWndhcnQpCisJICAgIEFsc28gc3VwcG9ydCBDeWd3aW4uIChBbGVqYW5kcm8gTG9wZXpfVmFsZW5jaWEpCitGaWxlczoJICAgIEd2aW1FeHQvTWFrZV9jeWcubWFrLCBHdmltRXh0L01ha2VfbWluZy5tYWssIEd2aW1FeHQvTWFrZWZpbGUsCisJICAgIEd2aW1FeHQvZ3ZpbWV4dF9taW5nLmRlZiwgR3ZpbUV4dC9ndmltZXh0X21pbmcucmMKKworUGF0Y2ggNi4xLjM3NQorUHJvYmxlbTogICAgTVMtV2luZG93czogJzohZGlyICIlIicgZG9lcyBub3Qgd29yayBmb3IgYSBmaWxlIG5hbWUgd2l0aCBzcGFjZXMuCisJICAgIChYaWFuZ2ppYW5nIE1hKQorU29sdXRpb246ICAgRG9uJ3QgaW5zZXJ0IGJhY2tzbGFzaGVzIGZvciBzcGFjZXMgaW4gYSBzaGVsbCBjb21tYW5kLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMzc2CitQcm9ibGVtOiAgICAidmltIC0tdmVyc2lvbiIgYW5kICJ2aW0gLS1oZWxwIiBoYXZlIGEgbm9uLXplcm8gZXhpdCBjb2RlLgorCSAgICBUaGF0IGlzIHVudXN1YWwuIChQZXRlc2VhKQorU29sdXRpb246ICAgVXNlIGEgemVybyBleGl0IGNvZGUuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4xLjM3NworUHJvYmxlbTogICAgQ2FuJ3QgYWRkIHdvcmRzIHRvICdsaXNwd29yZHMnIG9wdGlvbi4KK1NvbHV0aW9uOiAgIEFkZCBQX0NPTU1BIGFuZCBQX05PRFVQIGZsYWdzLiAoSGFha29uIFJpaXNlcikKK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMS4zNzgKK1Byb2JsZW06ICAgIFdoZW4gdHdvIGJ1ZmZlci1sb2NhbCB1c2VyIGNvbW1hbmRzIGFyZSBhbWJpZ3VvdXMsIGEgZnVsbCBtYXRjaAorCSAgICB3aXRoIGEgZ2xvYmFsIHVzZXIgY29tbWFuZCBpc24ndCBmb3VuZC4gKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgRGV0ZWN0IHRoaXMgc2l0dWF0aW9uIGFuZCBhY2NlcHQgdGhlIGdsb2JhbCBjb21tYW5kLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMzc5CitQcm9ibGVtOiAgICBMaW51eCB3aXRoIGtlcm5lbCAyLjIgY2FuJ3QgdXNlIHRoZSBhbHRlcm5hdGUgc3RhY2sgaW4gY29tYmluYXRpb24KKwkgICAgd2l0aCB0aHJlYWRpbmcsIGNhdXNlcyBhbiBpbmZpbml0ZSBsb29wLgorU29sdXRpb246ICAgRG9uJ3QgdXNlIHRoZSBhbHRlcm5hdGUgc3RhY2sgaW4gdGhpcyBzaXR1YXRpb24uCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xLjM4MAorUHJvYmxlbTogICAgV2hlbiAnd2lubWluaGVpZ2h0JyBpcyB6ZXJvIGFuZCB0aGUgcXVpY2tmaXggd2luZG93IGlzIHplcm8gbGluZXMsCisJICAgIGVudGVyaW5nIHRoZSB3aW5kb3cgZG9lc24ndCBtYWtlIGl0IGhpZ2hlci4gKENocmlzdGlhbiBKLgorCSAgICBSb2JpbnNvbikKK1NvbHV0aW9uOiAgIE1ha2Ugc3VyZSB0aGUgY3VycmVudCB3aW5kb3cgaXMgYXQgbGVhc3Qgb25lIGxpbmUgaGlnaC4KK0ZpbGVzOgkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMS4zODEKK1Byb2JsZW06ICAgIFdoZW4gYSBCdWZXcml0ZUNtZCBpcyB1c2VkIGFuZCBpdCBsZWF2ZXMgdGhlIGJ1ZmZlciBtb2RpZmllZCwgdGhlCisJICAgIHdpbmRvdyBtYXkgc3RpbGwgYmUgY2xvc2VkLiAoSGFyaSBLcmlzaG5hIERhcmEpCitTb2x1dGlvbjogICBSZXR1cm4gRkFJTCBmcm9tIGJ1Zl93cml0ZSgpIHdoZW4gdGhlIGJ1ZmZlciBpcyBzdGlsbCBtb2RpZmllZAorCSAgICBhZnRlciBhIEJ1ZldyaXRlQ21kIGF1dG9jb21tYW5kIHdhcyB1c2VkLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjM4MiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFdoZW4gdXNpbmcgdHdvIG1vbml0b3JzLCB0aGUgY29kZSB0aGF0IGNoZWNrcy9maXhlcyB0aGUKKwkgICAgd2luZG93IHNpemUgYW5kIHBvc2l0aW9uIChlLmcuIHdoZW4gYSBmb250IGNoYW5nZXMpIGRvZXNuJ3Qgd29yaworCSAgICBwcm9wZXJseS4gIChHZW9yZ2UgUmVpbGx5KQorU29sdXRpb246ICAgSGFuZGxlIGEgZG91YmxlIG1vbml0b3Igc2l0dWF0aW9uLiAoSGVsbXV0IFN0aWVnbGVyKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMS4zODMKK1Byb2JsZW06ICAgIFRoZSBmaWxsaW5nIG9mIHRoZSBzdGF0dXMgbGluZSBkb2Vzbid0IHdvcmsgcHJvcGVybHkgZm9yCisJICAgIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gKE5hbSBTdW5nSHl1bikKKwkgICAgVGhlcmUgaXMgbm8gY2hlY2sgZm9yIGdvaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorU29sdXRpb246ICAgUHJvcGVybHkgZGlzdGluZ3Vpc2ggY2hhcmFjdGVycyBhbmQgYnl0ZXMuICBQcm9wZXJseSBjaGVjayBmb3IKKwkgICAgcnVubmluZyBvdXQgb2YgYnVmZmVyIHNwYWNlLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9leF9jbWRzMi5jLCBzcmMvcHJvdG8vYnVmZmVyLnBybywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4zODQKK1Byb2JsZW06ICAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBmaW5kIGlmIGEgY2VydGFpbiBwYXRjaCBoYXMgYmVlbiBpbmNsdWRlZC4KKwkgICAgKEx1Ym9taXIgSG9zdCkKK1NvbHV0aW9uOiAgIFN1cHBvcnQgdXNpbmcgaGFzKCkgdG8gY2hlY2sgaWYgYSBwYXRjaCB3YXMgaW5jbHVkZWQuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBzcmMvZXZhbC5jLCBzcmMvcHJvdG8vdmVyc2lvbi5wcm8sCisJICAgIHNyYy92ZXJzaW9uLmMKKworUGF0Y2ggNi4xLjM4NSAoZGVwZW5kcyBvbiA2LjEuMzgzKQorUHJvYmxlbTogICAgQ2FuJ3QgY29tcGlsZSB3aXRob3V0IHRoZSBtdWx0aS1ieXRlIGZlYXR1cmUuCitTb2x1dGlvbjogICBNb3ZlIGFuICNpZmRlZi4gIChDaHJpc3RpYW4gSi4gUm9iaW5zb24pCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuMzg2CitQcm9ibGVtOiAgICBHZXQgZHVwbGljYXRlIHRhZ3Mgd2hlbiBydW5uaW5nICI6aGVscHRhZ3MiLgorU29sdXRpb246ICAgRG8gdGhlIG90aGVyIGhhbHZlIG9mIG1vdmluZyBhIHNlY3Rpb24gdG8gYW5vdGhlciBoZWxwIGZpbGUuCitGaWxlczoJICAgIHJ1bnRpbWUvdGFnc3JjaC50eHQKKworUGF0Y2ggNi4xLjM4NyAoZGVwZW5kcyBvbiA2LjEuMzczKQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZyBmb3IgcG9pbnRlciBjYXN0LgorU29sdXRpb246ICAgQWRkIChjaGFyX3UgKikuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjEuMzg4IChkZXBlbmRzIG9uIDYuMS4zODQpCitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5nIGZvciBwb2ludGVyIGNhc3QuCitTb2x1dGlvbjogICBBZGQgKGNoYXIgKikuICBPbmx5IGluY2x1ZGUgaGFzX3BhdGNoKCkgd2hlbiB1c2VkLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvdmVyc2lvbi5jCisKK1BhdGNoIDYuMS4zODkgKGRlcGVuZHMgb24gNi4xLjM2NikKK1Byb2JsZW06ICAgIEJhbGxvb24gZXZhbHVhdGlvbiBkb2Vzbid0IHdvcmsgZm9yIEdUSy4KKwkgICAgaGFzKCJiYWxsb29uX2V2YWwiKSBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBBZGQgYmFsbG9vbiBldmFsdWF0aW9uIGZvciBHVEsuICBBbHNvIGltcHJvdmUgZGlzcGxheWluZyBvZiBzaWducy4KKwkgICAgKERhbmllbCBFbHN0bmVyKQorCSAgICBBbHNvIG1ha2UgIjpndWkiIHN0YXJ0IHRoZSBuZXRiZWFucyBjb25uZWN0aW9uIGFuZCBhdm9pZCB1c2luZworCSAgICBuZXRiZWFucyBmdW5jdGlvbnMgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBub3Qgb3Blbi4KK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlLCBzcmMvZmVhdHVyZS5oLCBzcmMvZ3VpLmMsIHNyYy9ndWkuaCwKKwkgICAgc3JjL2d1aV9iZXZhbC5jLCBzcmMvZ3VpX2JldmFsLmgsIHNyYy9ndWlfZ3RrLmMsCisJICAgIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvZXZhbC5jLCBzcmMvbWVtbGluZS5jLCBzcmMvbWVudS5jLAorCSAgICBzcmMvbmV0YmVhbnMuYywgc3JjL3Byb3RvL2d1aV9iZXZhbC5wcm8sIHNyYy9wcm90by9ndWlfZ3RrLnBybywKKwkgICAgc3JjL3N0cnVjdHMuaCwgc3JjL3N5bnRheC5jLCBzcmMvdWkuYywgc3JjL3dvcmtzaG9wLmMKKworUGF0Y2ggNi4xLjM5MCAoZGVwZW5kcyBvbiA2LjEuMzg5KQorUHJvYmxlbTogICAgSXQncyBub3QgcG9zc2libGUgdG8gdGVsbCBWaW0gdG8gc2F2ZSBhbmQgZXhpdCB0aHJvdWdoIHRoZQorCSAgICBOZXRiZWFucyBpbnRlcmZhY2UuICBXb3VsZCBzdGlsbCB0cnkgdG8gc2VuZCBiYWxsb29uIGV2YWwgdGV4dAorCSAgICBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisJICAgIENhbid0IHVzZSBVbmljb2RlIGNoYXJhY3RlcnMgZm9yIHNpZ24gdGV4dC4KK1NvbHV0aW9uOiAgIEFkZCBmdW5jdGlvbnMgInNhdmVBbmRFeGl0IiBhbmQgImdldE1vZGlmaWVkIi4gIENoZWNrIGZvciBhCisJICAgIHdvcmtpbmcgY29ubmVjdGlvbiBiZWZvcmUgc2VuZGluZyBhIGJhbGxvb25UZXh0IGV2ZW50LgorCSAgICB2YXJpb3VzIG90aGVyIGNsZWFudXBzLgorCSAgICBTdXBwb3J0IGFueSBjaGFyYWN0ZXIgZm9yIHNpZ24gdGV4dC4gKERhbmllbCBFbHN0bmVyKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9uZXRiZWFucy50eHQsIHJ1bnRpbWUvZG9jL3NpZ24udHh0LCBzcmMvZXhfY21kcy5jLAorCSAgICBzcmMvbmV0YmVhbnMuYywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4zOTEKK1Byb2JsZW06ICAgIG1sX2dldCgpIGVycm9yIHdoZW4gdXNpbmcgdmlydHVhbGVkaXQuIChDaGFybGVzIENhbXBiZWxsKQorU29sdXRpb246ICAgR2V0IGEgbGluZSBmcm9tIGEgc3BlY2lmaWMgd2luZG93LCBub3QgdGhlIGN1cnJlbnQgb25lLgorRmlsZXM6CSAgICBzcmMvY2hhcnNldC5jCisKK1BhdGNoIDYuMS4zOTIgKGRlcGVuZHMgb24gNi4xLjM4MykKK1Byb2JsZW06ICAgIEhpZ2hsaWdodGluZyBpbiB0aGUgJ3N0YXR1c2xpbmUnIGlzIGluIHRoZSB3cm9uZyBwb3NpdGlvbiB3aGVuIGFuCisJICAgIGl0ZW0gaXMgdHJ1bmNhdGVkLiAoWmFrIEJlY2spCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSBzdGFydCBvZiAnc3RhdHVzbGluZScgaXRlbXMgcHJvcGVybHkgZm9yIGEgdHJ1bmNhdGVkCisJICAgIGl0ZW0uCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuMzkzCitQcm9ibGVtOiAgICBXaGVuIGNvbXBpbGVkIHdpdGggUHl0aG9uIGFuZCB0aHJlYWRzLCBkZXRhY2hpbmcgdGhlIHRlcm1pbmFsIG1heQorCSAgICBjYXVzZSBWaW0gdG8gbG9vcCBmb3JldmVyLgorU29sdXRpb246ICAgQWRkIC1wdGhyZWFkIHRvICRDRkxBR1Mgd2hlbiB1c2luZyBQeXRob24gYW5kIGdjYy4gKERhbmllbAorCSAgICBFbHN0bmVyKQorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMS4zOTQgKGRlcGVuZHMgb24gNi4xLjM5MCkKK1Byb2JsZW06ICAgIFRoZSBuZXRiZWFucyBpbnRlcmZhY2UgZG9lc24ndCByZWNvZ25pemUgbXVsdGlieXRlIGdseXBoIG5hbWVzLgorU29sdXRpb246ICAgQ2hlY2sgdGhlIG51bWJlciBvZiBjZWxscyByYXRoZXIgdGhhbiBieXRlcyB0byBkZWNpZGUKKwkgICAgd2hldGhlciBhIGdseXBoIG5hbWUgaXMgbm90IGEgZmlsZW5hbWUuIChEYW5pZWwgRWxzdG5lcikKK0ZpbGVzOgkgICAgc3JjL25ldGJlYW5zLmMKKworUGF0Y2ggNi4xLjM5NSAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjM2OSkKK1Byb2JsZW06ICAgIFZNUzogT0xEX1ZNUyBpcyBuZXZlciBkZWZpbmVkLiAgTWlzc2luZyBmdW5jdGlvbiBwcm90b3R5cGUuCitTb2x1dGlvbjogICBEZWZpbmUgT0xEX1ZNUyBpbiBNYWtlX3Ztcy5tbXMuICBBZGQgdm1zX3N5c19zdGF0dXMoKSB0bworCSAgICBvc192bXMucHJvLiAoWm9sdGFuIEFycGFkZmZ5KQorRmlsZXM6CSAgICBzcmMvTWFrZV92bXMubW1zLCBzcmMvcHJvdG8vb3Nfdm1zLnBybworCitQYXRjaCA2LjEuMzk2IChkZXBlbmRzIG9uIDYuMS4zMzApCitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5ncyBmb3IgdXNpbmcgZW51bS4KK1NvbHV0aW9uOiAgIEFkZCB0eXBlY2FzdCB0byBjaGFyX3UuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvZ3VpX3gxMS5jCisKK1BhdGNoIDYuMS4zOTcgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlIGluc3RhbGwgcHJvZ3JhbSBtYXkgdXNlIGEgd3JvbmcgcGF0aCBmb3IgdGhlIGRpZmYgY29tbWFuZCBpZgorCSAgICB0aGVyZSBpcyBhIHNwYWNlIGluIHRoZSBpbnN0YWxsIGRpcmVjdG9yeSBwYXRoLgorU29sdXRpb246ICAgVXNlIGRvdWJsZSBxdW90ZXMgYXJvdW5kIHRoZSBwYXRoIGlmIG5lY2Vzc2FyeS4gKEFsZWphbmRybworCSAgICBMb3Blei1WYWxlbmNpYSkgIEFsc28gdXNlIGRvdWJsZSBxdW90ZXMgYXJvdW5kIHRoZSBmaWxlIG5hbWUKKwkgICAgYXJndW1lbnRzLgorRmlsZXM6CSAgICBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDYuMS4zOTgKK1Byb2JsZW06ICAgIFNhdmluZyB0aGUgdHlwZWFoZWFkIGZvciBkZWJ1ZyBtb2RlIGNhdXNlcyB0cm91YmxlIGZvciBhIHRlc3QKKwkgICAgc2NyaXB0LiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIEFkZCB0aGUgIjpkZWJ1Z2dyZWVkeSIgY29tbWFuZCB0byBhdm9pZCBzYXZpbmcgdGhlIHR5cGVhaGVhZC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvcmVwZWF0LnR4dCwgc3JjL2V4X2NtZHMuaCwgc3JjL2V4X2NtZHMyLmMsCisJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvcHJvdG8vZXhfY21kczIucHJvCisKK1BhdGNoIDYuMS4zOTkKK1Byb2JsZW06ICAgIFdhcm5pbmcgZm9yIHVudXNlZCB2YXJpYWJsZS4KK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgdmFyaWFibGUgdHdvX29yX21vcmUuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xLjQwMCAoZGVwZW5kcyBvbiA2LjEuMzgxKQorUHJvYmxlbTogICAgV2hlbiBhIEJ1ZldyaXRlQ21kIHdpcGVzIG91dCB0aGUgYnVmZmVyIGl0IG1heSBzdGlsbCBiZSBhY2Nlc3NlZC4KK1NvbHV0aW9uOiAgIERvbid0IHRyeSBhY2Nlc3NpbmcgYSBidWZmZXIgdGhhdCBoYXMgYmVlbiB3aXBlZCBvdXQuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuNDAxIChleHRyYSkKK1Byb2JsZW06ICAgIEJ1aWxkaW5nIHRoZSBXaW4xNiB2ZXJzaW9uIHdpdGggQm9ybGFuZCA1LjAxIGRvZXNuJ3Qgd29yay4KKwkgICAgIm1ha2UgdGVzdCIgZG9lc24ndCB3b3JrIHdpdGggTWFrZV9kb3MubWFrLiAoV2FsdGVyIEJyaXNjb2UpCitTb2x1dGlvbjogICBWYXJpb3VzIGZpeGVzIHRvIHRoZSB3MTYgbWFrZWZpbGUuIChXYWx0ZXIgQnJpc2NvZSkKKwkgICAgRG9uJ3QgdXNlIGRlbHRyZWUuICBVc2UgIm1rZGlyIFx0bXAiIGluc3RlYWQgb2YgIm1rZGlyIC90bXAiLgorRmlsZXM6CSAgICBzcmMvTWFrZV93MTYubWFrLCBzcmMvdGVzdGRpci9NYWtlX2Rvcy5tYWsKKworUGF0Y2ggNi4xLjQwMgorUHJvYmxlbTogICAgV2hlbiBldmFsdWF0aW5nIGEgZnVuY3Rpb24gbmFtZSB3aXRoIGN1cmx5IGJyYWNlcywgYW4gZXJyb3IKKwkgICAgaXMgbm90IGhhbmRsZWQgY29uc2lzdGVudGx5LgorU29sdXRpb246ICAgQWNjZXB0IHRoZSByZXN1bHQgb2YgYW4gY3VybHkgYnJhY2VzIGV4cHJlc3Npb24gd2hlbiBhbgorCSAgICBlcnJvciB3YXMgZW5jb3VudGVyZWQuICBTa2lwIGV2YWx1YXRpbmcgYW4gZXhwcmVzc2lvbiBpbiBjdXJseQorCSAgICBicmFjZXMgd2hlbiBza2lwcGluZy4gIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS40MDMgKGV4dHJhKQorUHJvYmxlbTogICAgTVMtV2luZG93cyAxNiBiaXQ6IGNvbXBpbGVyIHdhcm5pbmdzLgorU29sdXRpb246ICAgQWRkIHR5cGVjYXN0cy4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYywgc3JjL2d1aV93NDguYywgc3JjL29zX21zd2luLmMsIHNyYy9vc193aW4xNi5jLAorCSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4xLjQwNCAoZXh0cmEpCitQcm9ibGVtOiAgICBWYXJpb3VzIHNtYWxsIHByb2JsZW1zLgorU29sdXRpb246ICAgRml4IGNvbW1lbnRzLiAgVmFyaW91cyBzbWFsbCBhZGRpdGlvbnMsIGNoYW5nZXMgaW4gaW5kZW50LCByZW1vdmFsCisJICAgIG9mIHVudXNlZCBpdGVtcyBhbmQgZml4ZXMuCitGaWxlczoJICAgIE1ha2VmaWxlLCBSRUFETUUudHh0LCBydW50aW1lL21lbnUudmltLCBydW50aW1lL3ZpbXJjX2V4YW1wbGUudmltLAorCSAgICBzcmMvSU5TVEFMTCwgc3JjL0lOU1RBTExvbGUudHh0LCBzcmMvTWFrZV9iYzUubWFrLAorCSAgICBzcmMvTWFrZV9jeWcubWFrLCBzcmMvTWFrZV9taW5nLm1haywgc3JjL01ha2VmaWxlLAorCSAgICBzcmMvY29uZmlnLmguaW4sIHNyYy9lZGl0LmMsIHNyYy9ldmFsLmMsIHNyYy9leF9jbWRzMi5jLAorCSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9maWxlaW8uYywgc3JjL2dldGNoYXIuYywKKwkgICAgc3JjL2d1aS5jLCBzcmMvZ3VpX2d0ay5jLCBzcmMvZ3VpX3Bob3Rvbi5jLCBzcmMvaWZfY3Njb3BlLmMsCisJICAgIHNyYy9pZl9weXRob24uYywgc3JjL2tleW1hcC5oLCBzcmMvbWFyay5jLCBzcmMvbWJ5dGUuYywKKwkgICAgc3JjL21lc3NhZ2UuYywgc3JjL21pc2MxLmMsIHNyYy9taXNjMi5jLCBzcmMvbm9ybWFsLmMsCisJICAgIHNyYy9vcHRpb24uYywgc3JjL29zX29zMl9jZmcuaCwgc3JjL29zX3dpbjMyLmMsCisJICAgIHNyYy9wcm90by9nZXRjaGFyLnBybywgc3JjL3Byb3RvL21lc3NhZ2UucHJvLAorCSAgICBzcmMvcHJvdG8vcmVnZXhwLnBybywgc3JjL3NjcmVlbi5jLCBzcmMvc3RydWN0cy5oLCBzcmMvc3ludGF4LmMsCisJICAgIHNyYy90ZXJtLmMsIHNyYy90ZXN0ZGlyL3Rlc3QxNS5pbiwgc3JjL3Rlc3RkaXIvdGVzdDE1Lm9rLAorCSAgICBzcmMvdmltLnJjLCBzcmMveHhkL01ha2VfY3lnLm1haywgc3JjL3h4ZC9NYWtlZmlsZQorCitQYXRjaCA2LjEuNDA1CitQcm9ibGVtOiAgICBBIGZldyBmaWxlcyBhcmUgbWlzc2luZyBmcm9tIHRoZSB0b3BsZXZlbCBNYWtlZmlsZS4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgbWlzc2luZyBmaWxlcy4KK0ZpbGVzOgkgICAgTWFrZWZpbGUKKworUGF0Y2ggNi4xLjQwNiAoZGVwZW5kcyBvbiA2LjEuMzkyKQorUHJvYmxlbTogICAgV2hlbiBhIHN0YXR1c2xpbmUgaXRlbSBkb2Vzbid0IGZpdCBhcmJpdHJhcnkgdGV4dCBhcHBlYXJzLgorCSAgICAoQ2hyaXN0aWFuIEouIFJvYmluc29uKQorU29sdXRpb246ICAgV2hlbiB0aGVyZSBpcyBqdXN0IGVub3VnaCByb29tIGJ1dCBub3QgZm9yIHRoZSAiPCIgdHJ1bmNhdGUgdGhlCisJICAgIHN0YXR1c2xpbmUgaXRlbSBsaWtlIHRoZXJlIGlzIG5vIHJvb20uCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuNDA3CitQcm9ibGVtOiAgICAiOnNldCBzY3JvbGxiaW5kIHwgaGVscCIgc2Nyb2xsYmluZHMgdGhlIGhlbHAgd2luZG93LiAoQW5kcmV3CisJICAgIFBpbWxvdHQpCitTb2x1dGlvbjogICBSZXNldCAnc2Nyb2xsYmluZCcgd2hlbiBvcGVuaW5nIGEgaGVscCB3aW5kb3cuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xLjQwOAorUHJvYmxlbTogICAgV2hlbiAncmlnaHRsZWZ0JyBpcyBzZXQgdW5wcmludGFibGUgY2hhcmFjdGVyIDB4MGMgaXMgZGlzcGxheWVkIGFzCisJICAgICI+YzA8Ii4KK1NvbHV0aW9uOiAgIFJldmVyc2UgdGhlIHRleHQgb2YgdGhlIGhleCBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuNDA5CitQcm9ibGVtOiAgICBHZW5lcmF0aW5nIHRhZ3MgZm9yIHRoZSBoZWxwIGRvZXNuJ3Qgd29yayBmb3Igc29tZSBsb2NhbGVzLgorU29sdXRpb246ICAgU2V0IExBTkc9QyBMQ19BTEw9QyBpbiB0aGUgZW52aXJvbm1lbnQgZm9yICJzb3J0Ii4gKERhbmllbAorCSAgICBFbHN0bmVyKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9NYWtlZmlsZQorCitQYXRjaCA2LjEuNDEwIChkZXBlbmRzIG9uIDYuMS4zOTApCitQcm9ibGVtOiAgICBMaW5raW5nIGVycm9yIHdoZW4gY29tcGlsaW5nIHdpdGggTmV0YmVhbnMgYnV0IHdpdGhvdXQgc2lnbiBpY29ucy4KKwkgICAgKE1hbHRlIE5ldW1hbm4pCitTb2x1dGlvbjogICBEb24ndCBkZWZpbmUgYnVmX3NpZ25jb3VudCgpIHdoZW4gc2lnbiBpY29ucyBhcmUgdW5hdmFpbGFibGUuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuNDExCitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0LCBoaWdobGlnaHRpbmcgYSBWaXN1YWwgYmxvY2sgYmV5b25kIHRoZQorCSAgICBlbmQgb2YgYSBsaW5lIG1heSBiZSB3cm9uZy4KK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlIHZpcnR1YWwgY29sdW1uIHdoZW4gdGhlIGVuZCBvZiB0aGUgbGluZSBpcyBiZWZvcmUgdGhlCisJICAgIGRpc3BsYXllZCBwYXJ0IG9mIHRoZSBsaW5lLiAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjQxMgorUHJvYmxlbTogICAgV2hlbiBzd2FwcGluZyB0ZXJtaW5hbCBzY3JlZW5zIGFuZCB1c2luZyAiOmd1aSIgdG8gc3RhcnQgdGhlIEdVSSwKKwkgICAgdGhlIHNoZWxsIHByb21wdCBtYXkgYmUgYWZ0ZXIgYSBoaXQtZW50ZXIgcHJvbXB0LgorU29sdXRpb246ICAgT3V0cHV0IGEgbmV3bGluZSBpbiB0aGUgdGVybWluYWwgd2hlbiBzdGFydGluZyB0aGUgR1VJIGFuZCB0aGVyZQorCSAgICB3YXMgYSBoaXQtZW50ZXIgcHJvbXB0Li4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMS40MTMKK1Byb2JsZW06ICAgIFdoZW4gJ2NsaXBib2FyZCcgY29udGFpbnMgInVubmFtZWQiLCAicCIgaW4gVmlzdWFsIG1vZGUgZG9lc24ndAorCSAgICB3b3JrIGNvcnJlY3RseS4KK1NvbHV0aW9uOiAgIFNhdmUgdGhlIHJlZ2lzdGVyIGJlZm9yZSBvdmVyd3JpdGluZyBpdCBhbmQgcHV0IHRoZSByZXN1bHRpbmcgdGV4dAorCSAgICBvbiB0aGUgY2xpcGJvYXJkIGFmdGVyd2FyZHMuICAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHNyYy9vcHMuYworCitQYXRjaCA2LjEuNDE0IChleHRyYSwgZGVwZW5kcyBvbiA2LjEuMzY5KQorUHJvYmxlbTogICAgVk1TOiBWaW0gYnVzeSB3YWl0cyB3aGVuIHdhaXRpbmcgZm9yIGlucHV0LgorU29sdXRpb246ICAgRGVsYXkgZm9yIGEgc2hvcnQgd2hpbGUgYmVmb3JlIGdldHRpbmcgYW5vdGhlciBjaGFyYWN0ZXIuICAoWm9sdGFuCisJICAgIEFycGFkZmZ5KQorRmlsZXM6CSAgICBzcmMvb3Nfdm1zLmMKKworUGF0Y2ggNi4xLjQxNQorUHJvYmxlbTogICAgV2hlbiB0aGVyZSBpcyBhIHZlcnRpY2FsIHNwbGl0IGFuZCBhIHF1aWNrZml4IHdpbmRvdywgcmVkdWNpbmcgdGhlCisJICAgIHNpemUgb2YgdGhlIFZpbSB3aW5kb3cgbWF5IHJlc3VsdCBpbiBhIHdyb25nIHdpbmRvdyBsYXlvdXQgYW5kIGEKKwkgICAgY3Jhc2guCitTb2x1dGlvbjogICBXaGVuIHJlZHVjaW5nIHRoZSB3aW5kb3cgc2l6ZSBhbmQgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBmb3IKKwkgICAgJ3dpbmZpeGhlaWdodCcgc2V0IHRoZSBmcmFtZSBoZWlnaHQgdG8gdGhlIGxhcmdlciBoZWlnaHQsIHNvIHRoYXQKKwkgICAgdGhlcmUgaXMgYSByZXRyeSB3aGlsZSBpZ25vcmluZyAnd2luZml4aGVpZ2h0Jy4gKFlhc3VoaXJvCisJICAgIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMS40MTYgKGRlcGVuZHMgb24gNi4xLjM2NikKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgdGhlIE5ldGJlYW5zIGludGVyZmFjZSwgYSBsaW5lIHdpdGggYSBzaWduIGNhbm5vdCBiZQorCSAgICBjaGFuZ2VkLgorU29sdXRpb246ICAgUmVzcGVjdCB0aGUgR1VBUkRFRE9GRlNFVCBmb3Igc2lnbiBJRHMgd2hlbiBjaGVja2luZyBmb3IgYSBndWFyZGVkCisJICAgIGFyZWEuCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jCisKK1BhdGNoIDYuMS40MTcKK1Byb2JsZW06ICAgIFVucHJpbnRhYmxlIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LgorCSAgICBNdWx0aS1ieXRlIGNoYXJhY3RlcnMgYWJvdmUgMHhmZmZmIGFyZSBkaXNwbGF5ZWQgYXMgYW5vdGhlcgorCSAgICBjaGFyYWN0ZXIuCitTb2x1dGlvbjogICBIYW5kbGUgdW5wcmludGFibGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAgRGlzcGxheSBtdWx0aS1ieXRlCisJICAgIGNoYXJhY3RlcnMgYWJvdmUgMHhmZmZmIHdpdGggYSBtYXJrZXIuICBSZWNvZ25pemUgVVRGLTE2IHdvcmRzIGFuZAorCSAgICBCT00gd29yZHMgYXMgdW5wcmludGFibGUuICAoRGFuaWVsIEVsc3RuZXIpCitGaWxlczoJICAgIHNyYy9jaGFyc2V0LmMsIHNyYy9tYnl0ZS5jLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjQxOAorUHJvYmxlbTogICAgVGhlIHJlc3VsdCBvZiBzdHJmdGltZSgpIGlzIGluIHRoZSBjdXJyZW50IGxvY2Fscy4gIE5lZWQgdG8KKwkgICAgY29udmVydCBpdCB0byAnZW5jb2RpbmcnLgorU29sdXRpb246ICAgT2J0YWluIHRoZSBjdXJyZW50IGxvY2FsZSBhbmQgY29udmVydCB0aGUgYXJndW1lbnQgZm9yIHN0cmZ0aW1lKCkKKwkgICAgdG8gaXQgYW5kIHRoZSByZXN1bHQgYmFjayB0byAnZW5jb2RpbmcnLiAgKERhbmllbCBFbHN0bmVyKQorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvZXhfY21kcy5jLCBzcmMvZXhfY21kczIuYywgc3JjL21ieXRlLmMsCisJICAgIHNyYy9wcm90by9tYnl0ZS5wcm8sIHNyYy9vcHRpb24uYywgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4xLjQxOQorUHJvYmxlbTogICAgVmltIGRvZXNuJ3QgY29tcGlsZSBvbiBBSVggNS4xLgorU29sdXRpb246ICAgRG9uJ3QgZGVmaW5lIF9OT19QUk9UTyBvbiB0aGlzIHN5c3RlbS4gKFVyaWJhcnJpKQorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4xLjQyMCAoZXh0cmEpCitQcm9ibGVtOiAgICBjb252ZXJ0X2lucHV0KCkgaGFzIGFuIHVubmVjZXNzYXJ5IFNUUkxFTigpLgorCSAgICBDb252ZXJzaW9uIGZyb20gVUNTLTIgdG8gYSBjb2RlcGFnZSB1c2VzIHdvcmQgY291bnQgaW5zdGVhZCBvZgorCSAgICBieXRlIGNvdW50LgorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBTVFJMRU4oKSBjYWxsLiAoRGFuaWVsIEVsc3RuZXIpCisJICAgIEFsd2F5cyB1c2UgYnl0ZSBjb3VudCBmb3Igc3RyaW5nX2NvbnZlcnQoKS4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYywgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4xLjQyMSAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjM1NCkKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3MgOXg6IFdoZW4gcHV0dGluZyB0ZXh0IG9uIHRoZSBjbGlwYm9hcmQgaXQgY2FuIGJlIGluCisJICAgIHRoZSB3cm9uZyBlbmNvZGluZy4KK1NvbHV0aW9uOiAgIENvbnZlcnQgdGV4dCB0byB0aGUgYWN0aXZlIGNvZGVwYWdlIGZvciBDRl9URVhULiAoR2xlbm4gTWF5bmFyZCkKK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4xLjQyMgorUHJvYmxlbTogICAgRXJyb3IgaW4gLnZpbXJjIGRvZXNuJ3QgY2F1c2UgaGl0LWVudGVyIHByb21wdCB3aGVuIHN3YXBwaW5nCisJICAgIHNjcmVlbnMuIChOZWlsIEJpcmQpCitTb2x1dGlvbjogICBTZXQgbXNnX2RpZGFueSBhbHNvIHdoZW4gc2VuZGluZyBhIG1lc3NhZ2UgdG8gdGhlIHRlcm1pbmFsCisJICAgIGRpcmVjdGx5LgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMS40MjMKK1Byb2JsZW06ICAgIENhbid0IGZpbmQgYXJiaXRyYXJ5IHRleHQgaW4gaGVscCBmaWxlcy4KK1NvbHV0aW9uOiAgIEFkZGVkIHRoZSAiOmhlbHBncmVwIiBjb21tYW5kLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy92YXJpb3VzLnR4dCwgc3JjL2V4X2NtZHMuaCwgc3JjL2V4X2RvY21kLmMsCisJICAgIHNyYy9wcm90by9xdWlja2ZpeC5wcm8sIHNyYy9xdWlja2ZpeC5jCisKK1BhdGNoIDYuMS40MjQgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IEd2aW0gY29tcGlsZWQgd2l0aCBWQysrIDcuMCBydW4gb24gV2luZG93cyA5NSBkb2VzIG5vdCBzaG93CisJICAgIG1lbnUgaXRlbXMuCitTb2x1dGlvbjogICBEZWZpbmUgJFdJTlZFUiB0byBhdm9pZCBhbiBleHRyYSBpdGVtIGlzIGFkZGVkIHRvIE1FTlVJVEVNSU5GTy4KKwkgICAgKE11cmFva2EgVGFybykKK0ZpbGVzOgkgICAgc3JjL01ha2VfbXZjLm1haworCitQYXRjaCA2LjEuNDI1CitQcm9ibGVtOiAgICAiOmhlbHB0YWdzICRWSU1SVU5USU1FL2RvYyIgZG9lcyBub3QgYWRkIHRoZSAiaGVscC10YWdzIiB0YWcuCitTb2x1dGlvbjogICBEbyBhZGQgdGhlICJoZWxwLXRhZ3MiIHRhZyBmb3IgdGhhdCBzcGVjaWZpYyBkaXJlY3RvcnkuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xLjQyNgorUHJvYmxlbTogICAgIi0tcmVtb3RlLXdhaXQgK2NtZCBmaWxlIiB3YWl0cyBmb3JldmVyLiAoVmFsZXJ5IEtvbmRha29mZikKK1NvbHV0aW9uOiAgIERvbid0IHdhaXQgZm9yIHRoZSAiK2NtZCIgYXJndW1lbnQgdG8gaGF2ZSBiZWVuIGVkaXRlZC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjEuNDI3CitQcm9ibGVtOiAgICBTZXZlcmFsIGVycm9yIG1lc3NhZ2VzIGZvciByZWdleHAgcGF0dGVybnMgYXJlIG5vdCB0cmFuc2xhdGVkLgorU29sdXRpb246ICAgVXNlIF8oKSBwcm9wZXJseS4gKE11cmFva2EgVGFybykKK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMS40MjgKK1Byb2JsZW06ICAgIEZyZWVCU0Q6IHdhaXQoKSBtYXkgaGFuZyB3aGVuIGNvbXBpbGVkIHdpdGggUHl0aG9uIHN1cHBvcnQgYW5kCisJICAgIGRvaW5nIGEgc3lzdGVtKCkgY2FsbCBpbiBhIHN0YXJ0dXAgc2NyaXB0LgorU29sdXRpb246ICAgVXNlIHdhaXRwaWQoKSBpbnN0ZWFkIG9mIHdhaXQoKSBhbmQgcG9sbCBldmVyeSAxMCBtc2VjLCBqdXN0IGxpa2UKKwkgICAgd2hhdCBpcyBkb25lIGluIHRoZSBHVUkuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xLjQyOSAoZGVwZW5kcyBvbiA2LjEuMzkwKQorUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiB1c2luZyBzaG93bWFya3MudmltIHBsdWdpbi4gKENoYXJsZXMgQ2FtcGJlbGwpCitTb2x1dGlvbjogICBDaGVjayBmb3Igc2lnbl9nZXRfdGV4dCgpIHJldHVybmluZyBhIE5VTEwgcG9pbnRlci4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS40MzAKK1Byb2JsZW06ICAgIEluIExpc3AgY29kZSBiYWNrc2xhc2hlZCBwYXJlbnMgc2hvdWxkIGJlIGlnbm9yZWQgZm9yICIlIi4gKERvcmFpKQorU29sdXRpb246ICAgU2tpcCBvdmVyIGJhY2tzbGFzaGVkIHBhcmVucy4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuMS40MzEKK1Byb2JsZW06ICAgIERlYnVnIGNvbW1hbmRzIGVuZCB1cCBpbiByZWRpcmVjdGVkIHRleHQuCitTb2x1dGlvbjogICBEaXNhYmxlIHJlZGlyZWN0aW9uIHdoaWxlIGhhbmRsaW5nIGRlYnVnIGNvbW1hbmRzLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjEuNDMyIChkZXBlbmRzIG9uIDYuMS4zNzUpCitQcm9ibGVtOiAgICBNUy1XaW5kb3dzOiAiOm1ha2UgJTpwIiBpbnNlcnRzIGV4dHJhIGJhY2tzbGFzaGVzLiAoRGF2aWQgUmVubmFsbHMpCitTb2x1dGlvbjogICBEb24ndCBhZGQgYmFja3NsYXNoZXMsIGhhbmRsZSBpdCBsaWtlICI6IWNtZCIuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS40MzMKK1Byb2JsZW06ICAgICI6cG9wdXAiIG9ubHkgd29ya3MgZm9yIFdpbjMyLgorU29sdXRpb246ICAgQWRkICI6cG9wdXAiIHN1cHBvcnQgZm9yIEdUSy4gIChEYW5pZWwgRWxzdG5lcikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZ3VpLnR4dCwgc3JjL2V4X2RvY21kLmMsIHNyYy9ndWlfZ3RrLmMsIHNyYy9tZW51LmMsCisJICAgIHNyYy9wcm90by9ndWlfZ3RrLnBybworCitQYXRjaCA2LjEuNDM0IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gMzI3NjcgbGluZXMsIHRoZSBzY3JvbGxiYXIgaGFzIGEKKwkgICAgcm91bmRvZmYgZXJyb3IuCitTb2x1dGlvbjogICBNYWtlIGEgY2xpY2sgb24gYW4gYXJyb3cgbW92ZSBvbmUgbGluZS4gIEFsc28gbW92ZSB0aGUgY29kZSB0bworCSAgICBndWlfdzQ4LmMsIHRoZXJlIGlzIGhhcmRseSBhbnkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSAxNiBiaXQgYW5kCisJICAgIDMyIGJpdCB2ZXJzaW9ucy4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBzcmMvZ3VpX3cxNi5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMS40MzUKK1Byb2JsZW06ICAgICI6d2luc2l6ZSB4IiByZXNpemVzIHRoZSBWaW0gd2luZG93IHRvIHRoZSBtaW5pbWFsIHNpemUuIChBbmRyZXcKKwkgICAgUGltbG90dCkKK1NvbHV0aW9uOiAgIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSBmb3Igd3JvbmcgYXJndW1lbnRzIG9mICI6d2luc2l6ZSIgYW5kCisJICAgICI6d2lucG9zIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjQzNgorUHJvYmxlbTogICAgV2hlbiBhIGxvbmcgVVRGLTggZmlsZSBjb250YWlucyBhbiBpbGxlZ2FsIGJ5dGUgaXQncyBoYXJkIHRvIGZpbmQKKwkgICAgb3V0IHdoZXJlIGl0IGlzLiAoUm9uIEFhcm9uKQorU29sdXRpb246ICAgQWRkIHRoZSBsaW5lIG51bWJlciB0byB0aGUgZXJyb3IgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMS40MzcgKGV4dHJhLCBkZXBlbmRzIG9uIDYuMS40MjEpCitQcm9ibGVtOiAgICBVc2luZyBtdWx0aS1ieXRlIGZ1bmN0aW9ucyB3aGVuIHRoZXkgYXJlIG5vdCBhdmFpbGFibGUuCitTb2x1dGlvbjogICBQdXQgdGhlIGNsaXBib2FyZCBjb252ZXJzaW9uIGluc2lkZSBhbiAjaWZkZWYuIChWaW5jZSBOZWdyaSkKKwkgICAgQWxzbyBmaXggYSBwb2ludGVyIHR5cGUgbWlzdGFrZS4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBzcmMvb3NfbXN3aW4uYworCitQYXRjaCA2LjEuNDM4CitQcm9ibGVtOiAgICBXaGVuIFBlcmwgaGFzIHRocmVhZCBzdXBwb3J0IFZpbSBjYW5ub3QgdXNlIHRoZSBQZXJsIGludGVyZmFjZS4KK1NvbHV0aW9uOiAgIEFkZCBhIGNvbmZpZ3VyZSBjaGVjayBhbmQgZGlzYWJsZSBQZXJsIHdoZW4gaXQgd2lsbCBub3Qgd29yay4KKwkgICAgKEFyb24gR3JpZmZpcykKK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMS40MzkKK1Byb2JsZW06ICAgIE5ldGJlYW5zOiBBICJjcmVhdGUiIGZ1bmN0aW9uIGRvZXNuJ3QgYWN0dWFsbHkgY3JlYXRlIGEgYnVmZmVyLAorCSAgICBmb2xsb3dpbmcgZnVuY3Rpb25zIG1heSBmYWlsLgorU29sdXRpb246ICAgQ3JlYXRlIGEgVmltIGJ1ZmZlciB3aXRob3V0IGEgbmFtZSB3aGVuICJjcmVhdGUiIGlzIGNhbGxlZC4KKwkgICAgKEdvcmRvbiBQcmlldXIpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL25ldGJlYW5zLnR4dCwgc3JjL25ldGJlYW5zLmMKKworUGF0Y2ggNi4xLjQ0MAorUHJvYmxlbTogICAgVGhlICJAKiIgY29tbWFuZCBkb2Vzbid0IG9idGFpbiB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoZQorCSAgICBjbGlwYm9hcmQuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIE9idGFpbiB0aGUgY2xpcGJvYXJkIHRleHQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgY29tbWFuZC4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMS40NDEKK1Byb2JsZW06ICAgICJ6aiIgYW5kICJ6ayIgY2Fubm90IGJlIHVzZWQgYXMgYSBtb3Rpb24gY29tbWFuZCBhZnRlciBhbgorCSAgICBvcGVyYXRvci4gKFJhbGYgSGV0emVsKQorU29sdXRpb246ICAgQWNjZXB0IHRoZXNlIGNvbW1hbmRzIGFzIG1vdGlvbiBjb21tYW5kcy4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMS40NDIKK1Byb2JsZW06ICAgIFVuaWNvZGUgMy4yIGRlZmluZXMgbW9yZSBzcGFjZSBhbmQgcHVuY3R1YXRpb24gY2hhcmFjdGVycy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgbmV3IGNoYXJhY3RlcnMgdG8gdGhlIFVuaWNvZGUgdGFibGVzLiAoUmFwaGFlbCBGaW5rZWwpCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMS40NDMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFRoZSBndmltZXh0LmRsbCBidWlsZCB3aXRoIEJvcmxhbmQgNS41IHJlcXVpcmVzIGFub3RoZXIKKwkgICAgRExMLgorU29sdXRpb246ICAgQnVpbGQgYSBzdGF0aWNhbGx5IGxpbmtlZCB2ZXJzaW9uIGJ5IGRlZmF1bHQuIChEYW4gU2hhcnApCitGaWxlczoJICAgIEd2aW1FeHQvTWFrZV9iYzUubWFrCisKK1BhdGNoIDYuMS40NDQgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IEVuYWJsaW5nIGEgYnVpbGQgd2l0aCBnZXR0ZXh0IHN1cHBvcnQgaXMgbm90IGNvbnNpc3RlbnQuCitTb2x1dGlvbjogICBVc2UgIkdFVFRFWFQiIGZvciBCb3JsYW5kIGFuZCBtc3ZjIG1ha2VmaWxlcy4gKERhbiBTaGFycCkKK0ZpbGVzOgkgICAgc3JjL01ha2VfYmM1Lm1haywgc3JjL01ha2VfbXZjLm1haworCitQYXRjaCA2LjEuNDQ1IChleHRyYSkKK1Byb2JsZW06ICAgIERKR1BQOiBnZXQgd2FybmluZyBmb3IgYXJndW1lbnQgb2YgcHV0ZW52KCkKK1NvbHV0aW9uOiAgIERlZmluZSBIQVZFX1BVVEVOViB0byB1c2UgREpHUFAncyBwdXRlbnYoKS4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBzcmMvb3NfbXNkb3MuaAorCitQYXRjaCA2LjEuNDQ2IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgTWluZ1cgbWFrZWZpbGUgdXNlcyBhIGRpZmZlcmVudCBzdHlsZSBvZiBhcmd1bWVudHMgdGhhbgorCSAgICBvdGhlciBtYWtlZmlsZXMuCisJICAgIER5bmFtaWMgSU1FIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEN5Z3dpbi4KK1NvbHV0aW9uOiAgIFVzZSAibm8iIGFuZCAieWVzIiBzdHlsZSBhcmd1bWVudHMuICBSZW1vdmUgdGhlIHVzZSBvZiB0aGUKKwkgICAgZHluLW1pbmcuaCBpbmNsdWRlIGZpbGUuIChEYW4gU2hhcnApCisJICAgIERvIG5vdCBpbmNsdWRlIHRoZSBpbWUuaCBmaWxlIGFuZCBhZGp1c3QgdGhlIG1ha2VmaWxlLiAoQWxlamFuZHJvCisJICAgIExvcGV6LVZhbGVuY2lhKQorRmlsZXM6CSAgICBzcmMvTWFrZV9jeWcubWFrLCBzcmMvTWFrZV9taW5nLm1haywgc3JjL2d1aV93MzIuYywKKwkgICAgc3JjL2lmX3BlcmwueHMsIHNyYy9pZl9weXRob24uYywgc3JjL2lmX3J1YnkuYywgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4xLjQ0NworUHJvYmxlbTogICAgIm1ha2UgaW5zdGFsbCIgdXNlcyAibWFrZSIgZGlyZWN0bHkgZm9yIGdlbmVyYXRpbmcgaGVscCB0YWdzLgorU29sdXRpb246ICAgVXNlICQoTUFLRSkgaW5zdGVhZCBvZiAibWFrZSIuIChUaW0gTW9vbmV5KQorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4xLjQ0OAorUHJvYmxlbTogICAgJ3RpdGxlc3RyaW5nJyBoYXMgYSBkZWZhdWx0IG1heGltdW0gd2lkdGggb2YgNTAgY2hhcnMgcGVyIGl0ZW0uCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIGRlZmF1bHQgbWF4aW11bSAoYWxzbyBmb3IgJ3N0YXR1c2xpbmUnKS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS40NDkKK1Byb2JsZW06ICAgIFdoZW4gIjEiIGFuZCAiYSIgYXJlIGluICdmb3JtYXRvcHRpb25zJywgYXV0by1mb3JtYXR0aW5nIGFsd2F5cworCSAgICBtb3ZlcyBhIG5ld2x5IGFkZGVkIGNoYXJhY3RlciB0byB0aGUgbmV4dCBsaW5lLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIERvbid0IG1vdmUgYSBzaW5nbGUgY2hhcmFjdGVyIHRvIHRoZSBuZXh0IGxpbmUgd2hlbiBpdCB3YXMganVzdAorCSAgICB0eXBlZC4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjEuNDUwCitQcm9ibGVtOiAgICBUZXJtY2FwIGVudHJ5ICJrQiIgZm9yIGJhY2stdGFiIGlzIG5vdCByZWNvZ25pemVkLgorU29sdXRpb246ICAgVXNlIGJhY2stdGFiIGFzIHRoZSBzaGlmdC10YWIgY29kZS4KK0ZpbGVzOgkgICAgc3JjL2tleW1hcC5oLCBzcmMvbWlzYzIuYywgc3JjL3Rlcm0uYworCitQYXRjaCA2LjEuNDUxCitQcm9ibGVtOiAgICBHVUk6IFdoZW4gdGV4dCBpbiB0aGUgZmluZCBkaWFsb2cgY29udGFpbnMgYSBzbGFzaCwgYSBiYWNrc2xhc2ggaXMKKwkgICAgaW5zZXJ0ZWQgdGhlIG5leHQgdGltZSBpdCBpcyBvcGVuZWQuIChNZXp6KQorU29sdXRpb246ICAgUmVtb3ZlIGVzY2FwZWQgYmFja3NsYXNoZXMgYW5kIHF1ZXN0aW9uIG1hcmtzLiAoRGFuaWVsIEVsc3RuZXIpCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjEuNDUyIChleHRyYSwgYWZ0ZXIgNi4xLjQ0NikKK1Byb2JsZW06ICAgIFdpbjMyOiBJTUUgc3VwcG9ydCBkb2Vzbid0IHdvcmsgZm9yIE1TVkMuCitTb2x1dGlvbjogICBVc2UgX01TQ19WRVIgaW5zdGVhZCBvZiBfX01TVkMuIChBbGVqYW5kcm8gTG9wZXotVmFsZW5jaWEpCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4xLjQ1MyAoYWZ0ZXIgNi4xLjQyOSkKK1Byb2JsZW06ICAgIFdoZW4gY29tcGlsZWQgd2l0aG91dCBzaWduIGljb25zIGJ1dCB3aXRoIHNpZ24gc3VwcG9ydCwgYWRkaW5nIGEKKwkgICAgc2lnbiBtYXkgY2F1c2UgYSBjcmFzaC4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciB0aGUgdGV4dCBzaWduIHRvIGV4aXN0IGJlZm9yZSB1c2luZyBpdC4gKEthbWlsCisJICAgIEJ1cnp5bnNraSkKK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS40NTQgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IHBhc3RpbmcgUnVzc2lhbiB0ZXh0IGluIFZpbSB3aXRoICdlbmMnIHNldCB0byBjcDEyNTEKKwkgICAgcmVzdWx0cyBpbiB1dGYtOCBieXRlcy4gIChQZXJlbHl1YnNraXkpCisJICAgIENvbnZlcnNpb24gZnJvbSBEQkNTIHRvIFVDUzIgZG9lcyBub3Qgd29yayB3aGVuICdlbmNvZGluZycgaXMgbm90CisJICAgIHRoZSBhY3RpdmUgY29kZXBhZ2UuCitTb2x1dGlvbjogICBJbnRyb2R1Y2UgZW5jX2NvZGVwYWdlIGFuZCB1c2UgaXQgZm9yIGNvbnZlcnNpb24gdG8gJ2VuY29kaW5nJworCSAgICAoR2xlbm4gTWF5bmFyZCkKKwkgICAgVXNlIE11bHRpQnl0ZVRvV2lkZUNoYXIoKSBhbmQgV2lkZUNoYXJUb011bHRpQnl0ZSgpIGluc3RlYWQgb2YKKwkgICAgaWNvbnYoKS4gIFNob3VsZCBkbyBtb3N0IG5lZWRlZCBjb252ZXJzaW9ucyB3aXRob3V0IGljb252LmRsbC4KK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL2d1aV93MzIuYywgc3JjL21ieXRlLmMsIHNyYy9vc19tc3dpbi5jLAorCSAgICBzcmMvcHJvdG8vbWJ5dGUucHJvLCBzcmMvcHJvdG8vb3NfbXN3aW4ucHJvLCBzcmMvc3RydWN0cy5oCisKK1BhdGNoIDYuMS40NTUKK1Byb2JsZW06ICAgIFNvbWUgVW5pY29kZSBjaGFyYWN0ZXJzIGNhbiBiZSBvbmUgb3IgdHdvIGNoYXJhY3RlciBjZWxscyB3aWRlLgorU29sdXRpb246ICAgQWRkIHRoZSAnYW1iaXdpZHRoJyBvcHRpb24gdG8gdGVsbCBWaW0gaG93IHRvIGRpc3BsYXkgdGhlc2UKKwkgICAgY2hhcmFjdGVycy4gKEp1bmdzaGlrIFNoaW4pCisJICAgIEFsc28gcmVzZXQgdGhlIHNjcmlwdCBJRCB3aGVuIHNldHRpbmcgYW4gb3B0aW9uIHRvIGl0cyBkZWZhdWx0CisJICAgIHZhbHVlLCBzbyB0aGF0ICI6dmVyYm9zZSBzZXQiIHdvbid0IGdpdmUgd3JvbmcgaW5mby4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHNyYy9tYnl0ZS5jLCBzcmMvb3B0aW9uLmMsIHNyYy9vcHRpb24uaAorCitQYXRjaCA2LjEuNDU2IChleHRyYSwgYWZ0ZXIgNi4xLjQ1NCkKK1Byb2JsZW06ICAgIFdpbjMyOiBJTUUgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgSW1tR2V0Q29tcG9zaXRpb25TdHJpbmdXKCkgcmV0dXJucyB0aGUgc2l6ZSBpbiBieXRlcywgbm90IHdvcmRzLgorCSAgICAoWWFzdWhpcm8gTWF0c3Vtb3RvKSAgQWxzbyBmaXggdHlwZWNhc3QgcHJvYmxlbS4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYywgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4xLjQ1NworUHJvYmxlbTogICAgQW4gZW1wdHkgcmVnaXN0ZXIgaW4gdmltaW5mbyBjYXVzZXMgY29udmVyc2lvbiB0byBmYWlsLgorU29sdXRpb246ICAgRG9uJ3QgY29udmVydCBhbiBlbXB0eSBzdHJpbmcuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMS40NTgKK1Byb2JsZW06ICAgIENvbXBpbGVyIHdhcm5pbmcgZm9yIHBvaW50ZXIuCitTb2x1dGlvbjogICBBZGQgYSB0eXBlY2FzdC4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjEuNDU5IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBsaWJjYWxsKCkgbWF5IHJldHVybiBhbiBpbnZhbGlkIHBvaW50ZXIgYW5kIGNhdXNlIFZpbSB0bworCSAgICBjcmFzaC4KK1NvbHV0aW9uOiAgIEFkZCBhIHN0cmljdCBjaGVjayBmb3IgdGhlIHJldHVybmVkIHBvaW50ZXIuIChCcnVjZSBNZWxsb3dzKQorRmlsZXM6CSAgICBzcmMvb3NfbXN3aW4uYworCitQYXRjaCA2LjEuNDYwCitQcm9ibGVtOiAgICBHVEs6IGFmdGVyIHNjcm9sbGluZyB0aGUgdGV4dCBvbmUgbGluZSB3aXRoIGEga2V5LCBjbGlja2luZyB0aGUKKwkgICAgYXJyb3cgb2YgdGhlIHNjcm9sbGJhciBkb2VzIG5vdCBhbHdheXMgd29yay4gKE5hbSBTdW5nSHl1bikKK1NvbHV0aW9uOiAgIEFsd2F5cyB1cGRhdGUgdGhlIHNjcm9sbGJhciB0aHVtYiB3aGVuIHRoZSB2YWx1ZSBjaGFuZ2VkLCBldmVuCisJICAgIHdoZW4gaXQgd291bGQgbm90IG1vdmUsIGxpa2UgZm9yIFJJU0NPUy4gIChEYW5pZWwgRWxzdG5lcikKK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvZ3VpLmgKKworUGF0Y2ggNi4xLjQ2MQorUHJvYmxlbTogICAgV2hlbiBhIGtleW1hcCBpcyBhY3RpdmUsIHR5cGluZyBhIGNoYXJhY3RlciBpbiBTZWxlY3QgbW9kZSBkb2VzCisJICAgIG5vdCB1c2UgaXQuIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBBcHBseSBJbnNlcnQgbW9kZSBtYXBwaW5nIHRvIHRoZSBjaGFyYWN0ZXIgdHlwZWQgaW4gU2VsZWN0IG1vZGUuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjEuNDYyCitQcm9ibGVtOiAgICBXaGVuIGF1dG9jb21tYW5kcyB3aXBlIG91dCBhIGJ1ZmZlciwgYSBjcmFzaCBtYXkgaGFwcGVuLiAoSGFyaQorCSAgICBLcmlzaG5hIERhcmEpCitTb2x1dGlvbjogICBEb24ndCBkZWNyZW1lbnQgdGhlIHdpbmRvdyBjb3VudCBvZiBhIGJ1ZmZlciBiZWZvcmUgY2FsbGluZyB0aGUKKwkgICAgYXV0b2NvbW1hbmRzIGZvciBpdC4gIFdoZW4gcmUtdXNpbmcgdGhlIGN1cnJlbnQgYnVmZmVyLCB3YXRjaCBvdXQKKwkgICAgZm9yIGF1dG9jb21tYW5kcyBjaGFuZ2luZyB0aGUgY3VycmVudCBidWZmZXIuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2V4X2NtZHMuYywgc3JjL3Byb3RvL2J1ZmZlci5wcm8KKworUGF0Y2ggNi4xLjQ2MworUHJvYmxlbTogICAgV2hlbiB3cml0aW5nIGEgY29tcHJlc3NlZCBmaWxlLCB0aGUgZmlsZSBuYW1lIHRoYXQgZ3ppcCBzdG9yZXMgaW4KKwkgICAgdGhlIGZpbGUgaXMgdGhlIHdlaXJkIHRlbXBvcmFyeSBmaWxlIG5hbWUuIChEYXZpZCBSZW5uYWxscykKK1NvbHV0aW9uOiAgIFVzZSB0aGUgcmVhbCBmaWxlIG5hbWUgd2hlbiBwb3NzaWJsZS4KK0ZpbGVzOgkgICAgcnVudGltZS9wbHVnaW4vZ3ppcC52aW0KKworUGF0Y2ggNi4xLjQ2NAorUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiB1c2luZyBDKysgc3ludGF4IGhpZ2hsaWdodGluZy4gKEdlcmhhcmQgSG9jaGhvbHplcikKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIG5lZ2F0aXZlIGluZGV4LgorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4xLjQ2NSAoYWZ0ZXIgNi4xLjQ1NCkKK1Byb2JsZW06ICAgIENvbXBpbGUgZXJyb3Igd2hlbiB1c2luZyBjeWd3aW4uCitTb2x1dGlvbjogICBDaGFuZ2UgI2lmZGVmIFdJTjMyIHRvICNpZmRlZiBXSU4zMjY0LiAoQWxlamFuZHJvIExvcGV6LVZhbGVuY2lhKQorCSAgICBVbmRlZmluZSBXSU4zMiBhZnRlciBpbmNsdWRpbmcgd2luZG93cy5oCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMS40NjYKK1Byb2JsZW06ICAgIFRoZSAiLWYiIGFyZ3VtZW50IGlzIGEgYml0IG9ic2N1cmUuCitTb2x1dGlvbjogICBBZGQgdGhlICItLW5vZm9yayIgYXJndW1lbnQuICBJbXByb3ZlIHRoZSBoZWxwIHRleHQgYSBiaXQuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3N0YXJ0aW5nLnR4dCwgc3JjL21haW4uYworCitQYXRjaCA2LjEuNDY3CitQcm9ibGVtOiAgICBTZXR0aW5nIHRoZSB3aW5kb3cgdGl0bGUgZG9lc24ndCB3b3JrIGZvciBDaGluZXNlLgorU29sdXRpb246ICAgVXNlIGFuIFgxMSBmdW5jdGlvbiB0byBjb252ZXJ0IHRleHQgdG8gYSB0ZXh0IHByb3BlcnR5LiAoS2VudGFybworCSAgICBOYWthemF3YSkKK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuNDY4CitQcm9ibGVtOiAgICAiOm1rc2Vzc2lvbiIgYWxzbyBzdG9yZXMgZm9sZHMgZm9yIGJ1ZmZlcnMgd2hpY2ggd2lsbCBub3QgYmUKKwkgICAgcmVzdG9yZWQuCitTb2x1dGlvbjogICBPbmx5IHN0b3JlIGZvbGRzIGZvciBhIGJ1ZmZlciB3aXRoICdidWZ0eXBlJyBlbXB0eSBhbmQgaGVscCBmaWxlcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjQ2OQorUHJvYmxlbTogICAgJ2xpc3RjaGFycycgY2Fubm90IGNvbnRhaW4gbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorU29sdXRpb246ICAgSGFuZGxlIG11bHRpLWJ5dGUgVVRGLTggbGlzdCBjaGFyYWN0ZXJzLiAoTWF0dGhldyBTYW1zb25vZmYpCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMsIHNyYy9vcHRpb24uYywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS40NzAgKGxhbmcpCitQcm9ibGVtOiAgICBQb2xpc2ggbWVzc2FnZXMgZG9uJ3Qgc2hvdyB1cCBjb3JyZWN0bHkgb24gTVMtV2luZG93cy4KK1NvbHV0aW9uOiAgIENvbnZlcnQgbWVzc2FnZXMgdG8gY3AxMjUwLiAoTWlrb2xhaiBNYWNob3dza2kpCisJICAgIEFsc28gYWRkIEVuZ2xpc2ggbWVzc2FnZSB0cmFuc2xhdGlvbnMsIGJlY2F1c2UgaXQgZ290IGluIHRoZSB3YXkKKwkgICAgb2YgdGhlIHBhdGNoLgorRmlsZXM6CSAgICBNYWtlZmlsZSwgc3JjL3BvL01ha2VmaWxlLCBzcmMvcG8vZW5fZ2IucG8sIHNyYy9wby9wbC5wbworCitQYXRjaCA2LjEuNDcxCitQcm9ibGVtOiAgICAiOmp1bXBzIiBvdXRwdXQgY29udGludWVzIGFmdGVyIHByZXNzaW5nICJxIiBhdCB0aGUgbW9yZS1wcm9tcHQuCisJICAgIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciAiZ290X2ludCIgYmVpbmcgc2V0LgorRmlsZXM6CSAgICBzcmMvbWFyay5jCisKK1BhdGNoIDYuMS40NzIKK1Byb2JsZW06ICAgIFdoZW4gdGhlcmUgaXMgYW4gYXV0aGVudGljYXRpb24gZXJyb3Igd2hlbiBjb25uZWN0aW5nIHRvIHRoZSBYCisJICAgIHNlcnZlciBWaW0gZXhpdHMuCitTb2x1dGlvbjogICBVc2UgWFNldElPRXJyb3JIYW5kbGVyKCkgdG8gY2F0Y2ggdGhlIGVycm9yIGFuZCBsb25nam1wKCkgdG8gYXZvaWQKKwkgICAgdGhlIGV4aXQuICBBbHNvIGRvIHRoaXMgaW4gdGhlIG1haW4gbG9vcCwgc28gdGhhdCB3aGVuIHRoZSBYCisJICAgIHNlcnZlciBleGl0cyBhIFZpbSBydW5uaW5nIGluIGEgY29uc29sZSBpc24ndCBraWxsZWQuCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmgsIHNyYy9tYWluLmMsIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xLjQ3MworUHJvYmxlbTogICAgUmVmZXJyaW5nIHRvICRjdXJ3aW4gb3IgJGN1cmJ1ZiBpbiBQZXJsIDUuNiBjYXVzZXMgYSBjcmFzaC4KK1NvbHV0aW9uOiAgIEFkZCAicFRIWF8iIHRvIGN1cl92YWwoKS4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2lmX3BlcmwueHMKKworUGF0Y2ggNi4xLjQ3NAorUHJvYmxlbTogICAgV2hlbiBvcGVuaW5nIHRoZSBjb21tYW5kLWxpbmUgd2luZG93IGluIEV4IG1vZGUgaXQncyBpbXBvc3NpYmxlIHRvCisJICAgIGdvIGJhY2suIChQYXZvbCBKdWhhcykKK1NvbHV0aW9uOiAgIFJlc2V0ICJleG1vZGVfYWN0aXZlIiBhbmQgcmVzdG9yZSBpdCB3aGVuIHRoZSBjb21tYW5kLWxpbmUgd2luZG93CisJICAgIGlzIGNsb3NlZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworCitQYXRjaCA2LjJmLjAwMQorUHJvYmxlbTogICAgVGhlIGNvbmZpZ3VyZSBjaGVjayBmb3IgUnVieSBkaWRuJ3Qgd29yayBwcm9wZXJseSBmb3IgUnVieSAxLjguMC4KK1NvbHV0aW9uOiAgIENoYW5nZSB0aGUgd2F5IHRoZSBSdWJ5IGNoZWNrIGlzIGRvbmUuIChBcm9uIEdyaWZmaXMpCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjJmLjAwMgorUHJvYmxlbTogICAgVGhlIG91dHB1dCBvZiAiOmxzIiBkb2Vzbid0IHNob3cgd2hldGhlciBhIGJ1ZmZlciBoYWQgcmVhZCBlcnJvcnMuCitTb2x1dGlvbjogICBBZGQgdGhlICJ4IiBmbGFnIGluIHRoZSAiOmxzIiBvdXRwdXQuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3dpbmRvd3MudHh0LCBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4yZi4wMDMKK1Byb2JsZW06ICAgIFRlc3Q0OSBkb2Vzbid0IHByb3Blcmx5IHRlc3QgdGhlIGJlaGF2aW9yIG9mICI6Y2F0Y2giIHdpdGhvdXQgYW4KKwkgICAgYXJndW1lbnQuCitTb2x1dGlvbjogICBVcGRhdGUgdGVzdDQ5LiAoU2VydmF0aXVzIEJyYW5kdCkKK0ZpbGVzOgkgICAgc3JjL3Rlc3RkaXIvdGVzdDQ5Lm9rLCBzcmMvdGVzdGRpci90ZXN0NDkudmltCisKK1BhdGNoIDYuMmYuMDA0CitQcm9ibGVtOiAgICAidmltIC0tdmVyc2lvbiIgYWx3YXlzIHVzZXMgQ1IvTEYgaW4gdGhlIG91dHB1dC4KK1NvbHV0aW9uOiAgIE9taXQgdGhlIENSLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jLCBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMmYuMDA1CitQcm9ibGVtOiAgICBUd28gZXJyb3IgbWVzc2FnZXMgd2l0aG91dCBhIGNvbG9uIGFmdGVyIHRoZSBudW1iZXIuCitTb2x1dGlvbjogICBBZGQgdGhlIGNvbG9uLiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvaWZfY3Njb3BlLmMKKworUGF0Y2ggNi4yZi4wMDYKK1Byb2JsZW06ICAgIFdoZW4gc2F2aW5nIGEgZmlsZSB0YWtlcyBhIHdoaWxlIGFuZCBWaW0gcmVnYWlucyBmb2N1cyB0aGlzIGNhbgorCSAgICByZXN1bHQgaW4gYSAiZmlsZSBjaGFuZ2VkIG91dHNpZGUgb2YgVmltIiB3YXJuaW5nIGFuZCBtbF9nZXQoKQorCSAgICBlcnJvcnMuIChNaWtlIFdpbGxpYW1zKQorU29sdXRpb246ICAgQWRkIHRoZSAiYl9zYXZpbmciIGZsYWcgdG8gYXZvaWQgY2hlY2tpbmcgdGhlIHRpbWVzdGFtcCB3aGlsZSB0aGUKKwkgICAgYnVmZmVyIGlzIGJlaW5nIHNhdmVkLiAoTWljaGFlbCBTY2hhYXApCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjJmLjAwNworUHJvYmxlbTogICAgSXJpeCBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgbXVsdGlwbGUgZGVmaW5lZCBzeW1ib2xzLgorCSAgICB2c25wcmludGYoKSBpcyBub3QgYXZhaWxhYmxlLiAgKENoYXJsZXMgQ2FtcGJlbGwpCitTb2x1dGlvbjogICBJbnNlcnQgRVhURVJOIGZvciB2YXJpYWJsZXMgaW4gZ2xvYmFscy5oLiAgQ2hhbmdlIHRoZSBjb25maWd1cmUKKwkgICAgY2hlY2sgZm9yIHZzbnByaW50ZigpIGZyb20gY29tcGlsaW5nIHRvIGxpbmtpbmcuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2dsb2JhbHMuaAorCitQYXRjaCA2LjJmLjAwOAorUHJvYmxlbTogICAgVGhlIEFhcCByZWNpcGUgZG9lc24ndCB3b3JrIHdpdGggQWFwIDAuMTQ5LgorU29sdXRpb246ICAgQ2hhbmdlIHRhcmdldGFyZyB0byBUQVJHRVRBUkcuICBVcGRhdGUgdGhlIG15c2lnbiBmaWxlLgorRmlsZXM6CSAgICBzcmMvbWFpbi5hYXAsIHNyYy9teXNpZ24KKworUGF0Y2ggNi4yZi4wMDkgKGV4dHJhKQorUHJvYmxlbTogICAgU21hbGwgcHJvYmxlbSB3aGVuIGJ1aWxkaW5nIHdpdGggQm9ybGFuZCA1LjAxLgorU29sdXRpb246ICAgVXNlIG1rZGlyKCkgaW5zdGVhZCBvZiBfbWtkaXIoKS4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBzcmMvZG9zaW5zdC5oCisKK1BhdGNoIDYuMmYuMDEwCitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciBtaXNzaW5nIHByb3RvdHlwZXMuCitTb2x1dGlvbjogICBBZGQgbWlzc2luZyBwcm90b3R5cGVzLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9pZl9jc2NvcGUuYworCitQYXRjaCA2LjJmLjAxMQorUHJvYmxlbTogICAgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lc24ndCB3b3JrIHdpdGggYXV0b2NvbmYgMi41eC4KK1NvbHV0aW9uOiAgIEFkZCBzcXVhcmUgYnJhY2tldHMgYXJvdW5kIGEgaGVhZGVyIGNoZWNrLiAoQXJvbiBHcmlmZmlzKQorCSAgICBOb3RlOiB0b3VjaCBzcmMvYXV0by9jb25maWd1cmUgYWZ0ZXIgYXBwbHlpbmcgdGhpcyBwYXRjaC4KK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjJmLjAxMgorUHJvYmxlbTogICAgIjplY2hvZXJyIiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGluc2lkZSB0cnkvZW5kdHJ5LgorU29sdXRpb246ICAgRG9uJ3QgcmVzZXQgZGlkX2Vtc2cgaW5zaWRlIGEgdHJ5L2VuZHRyeS4gKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4yZi4wMTMgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjaW50b3NoOiBDb21waWxlciB3YXJuaW5nIGZvciBhIHRyaWdyYXBoLgorU29sdXRpb246ICAgSW5zZXJ0IGEgYmFja3NsYXNoIGJlZm9yZSBlYWNoIHF1ZXN0aW9uIG1hcmsuIChQZXRlciBDdWNrYSkKK0ZpbGVzOgkgICAgc3JjL29zX21hYy5oCisKK1BhdGNoIDYuMmYuMDE0IChleHRyYSkKK1Byb2JsZW06ICAgIE1hY2ludG9zaDogZXhfZXZhbCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHByb2plY3QgZmlsZS4KK1NvbHV0aW9uOiAgIEFkZCBleF9ldmFsLiAoRGFueSBTdC1BbWFudCkKK0ZpbGVzOgkgICAgc3JjL29zX21hYy5wYnByb2ovcHJvamVjdC5wYnhwcm9qCisKK1BhdGNoIDYuMmYuMDE1IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIGNoYW5naW5nIGhlYWRlciBmaWxlcyBub3QgYWxsIHNvdXJjZSBmaWxlcyBpbnZvbHZlZAorCSAgICBhcmUgcmVjb21waWxlZC4KK1NvbHV0aW9uOiAgIEltcHJvdmUgdGhlIGRlcGVuZGVuY3kgcnVsZXMuIChEYW4gU2hhcnApCitGaWxlczoJICAgIHNyYy9NYWtlX2N5Zy5tYWssIHNyYy9NYWtlX21pbmcubWFrCisKK1BhdGNoIDYuMmYuMDE2CitQcm9ibGVtOiAgICAidmltIC0tdmVyc2lvbiA+IGZmIiBvbiBub24tVW5peCBzeXN0ZW1zIHJlc3VsdHMgaW4gYSBmaWxlIHdpdGggYQorCSAgICBtaXNzaW5nIGxpbmUgYnJlYWsgYXQgdGhlIGVuZC4gKEJpbGwgTWNDQXJ0aHkpCitTb2x1dGlvbjogICBBZGQgYSBsaW5lIGJyZWFrLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMmYuMDE3CitQcm9ibGVtOiAgICBVbml4OiBzdGFydGluZyBWaW0gaW4gdGhlIGJhY2tncm91bmQgYW5kIHRoZW4gYnJpbmdpbmcgaXQgdG8gdGhlCisJICAgIGZvcmVncm91bmQgbWF5IGNhdXNlIHRoZSB0ZXJtaW5hbCBzZXR0aW5ncyB0byBiZSB3cm9uZy4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciB0Y3NldGF0dHIoKSB0byByZXR1cm4gYW4gZXJyb3IsIHJldHJ5IHdoZW4gaXQgZG9lcy4KKwkgICAgKFBhdWwgVGFwcGVyKQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMmYuMDE4CitQcm9ibGVtOiAgICBNYWMgT1MgWCAxMC4yOiBPSyBpcyBkZWZpbmVkIHRvIHplcm8gaW4gY3Vyc3VzLmggd2hpbGUgVmltIHVzZXMKKwkgICAgb25lLiAgUmVkZWZpbmluZyBpdCBjYXVzZXMgYSB3YXJuaW5nIG1lc3NhZ2UuCitTb2x1dGlvbjogICBVbmRlZmluZSBPSyBiZWZvcmUgZGVmaW5pbmcgaXQgdG8gb25lLiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvdmltLmgKKworUGF0Y2ggNi4yZi4wMTkKK1Byb2JsZW06ICAgIE1hYyBPUyBYIDEwLjI6IENPTE9SX0JMQUNLIGFuZCBDT0xPUl9XSElURSBhcmUgZGVmaW5lZCBpbgorCSAgICBjdXJzZXMuaC4KK1NvbHV0aW9uOiAgIFJlbmFtZSB0aGVtIHRvIFBSQ09MT1JfQkxBQ0sgYW5kIFBSQ09MT1JfV0hJVEUuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMmYuMDIwCitQcm9ibGVtOiAgICBXaW4zMjogdGVzdDUwIHByb2R1Y2VzIGJlZXBzIGFuZCBmYWlscyB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgZGlmZi4KK1NvbHV0aW9uOiAgIFJlbW92ZSBlbXB0eSBsaW5lcyBhbmQgY29udmVydCB0aGUgb3V0cHV0IHRvIGRvcyBmaWxlZm9ybWF0LgorRmlsZXM6CSAgICBzcmMvdGVzdGRpci90ZXN0NTAuaW4KKworUGF0Y2ggNi4yZi4wMjEKK1Byb2JsZW06ICAgIFJ1bm5pbmcgY29uZmlndXJlIHdpdGggIi0tZW5hYmxlLW5ldGJlYW5zIiBkaXNhYmxlcyBOZXRiZWFucy4KKwkgICAgKEdvcmRvbiBQcmlldXIpCitTb2x1dGlvbjogICBGaXggdGhlIHRlc3RzIGluIGNvbmZpZ3VyZS5pbiB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0byBlbmFibGUgYQorCSAgICBmZWF0dXJlLiAgRml4IHRoYXQgIi0tZW5hYmxlLWFjbCIgcmVwb3J0ZWQgInllcyIgY29uZnVzaW5nbHkuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL215c2lnbgorCitQYXRjaCA2LjJmLjAyMgorUHJvYmxlbTogICAgQSBib2d1cyB2YWx1ZSBmb3IgJ2ZvbGRtYXJrZXInIGlzIG5vdCByZWplY3RlZCwgcG9zc2libHkgY2F1c2luZyBhCisJICAgIGhhbmcuIChEZXJlayBXeWF0dCkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIG5vbi1lbXB0eSBzdHJpbmcgYmVmb3JlIGFuZCBhZnRlciB0aGUgY29tbWEuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjJmLjAyMworUHJvYmxlbTogICAgV2hlbiB0aGUgaGVscCBmaWxlcyBhcmUgbm90IGluICRWSU1SVU5USU1FIGJ1dCAnaGVscGZpbGUnIGlzCisJICAgIGNvcnJlY3QgVmltIHN0aWxsIGNhbid0IGZpbmQgdGhlIGhlbHAgZmlsZXMuCitTb2x1dGlvbjogICBBbHNvIGxvb2sgZm9yIGEgdGFncyBmaWxlIGluIHRoZSBkaXJlY3Rvcnkgb2YgJ2hlbHBmaWxlJy4KK0ZpbGVzOgkgICAgc3JjL3RhZy5jCisKK1BhdGNoIDYuMmYuMDI0CitQcm9ibGVtOiAgICBXaGVuICdkZWxjb21iaW5lJyBpcyBzZXQgYW5kIGEgY2hhcmFjdGVyIGhhcyBtb3JlIHRoYW4gdHdvCisJICAgIGNvbXBvc2luZyBjaGFyYWN0ZXJzICJ4IiBkZWxldGVzIHRoZW0gYWxsLgorU29sdXRpb246ICAgQWx3YXlzIGRlbGV0ZSBvbmx5IHRoZSBsYXN0IGNvbXBvc2luZyBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMmYuMDI1CitQcm9ibGVtOiAgICBXaGVuIHJlYWRpbmcgYSBmaWxlIGZyb20gc3RkaW4gdGhhdCBoYXMgRE9TIGxpbmUgZW5kaW5ncyBidXQgYQorCSAgICBtaXNzaW5nIGVuZC1vZi1saW5lIGZvciB0aGUgbGFzdCBsaW5lICdmaWxlZm9ybWF0JyBiZWNvbWVzICJ1bml4Ii4KKwkgICAgKEJpbGwgTWNDYXJ0aHkpCitTb2x1dGlvbjogICBEb24ndCBhZGQgdGhlIG1pc3NpbmcgbGluZSBicmVhayB3aGVuIHJlLXJlYWRpbmcgdGhlIHRleHQgZnJvbSB0aGUKKwkgICAgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4yZi4wMjYKK1Byb2JsZW06ICAgIFdoZW4gdHlwaW5nIG5ldyB0ZXh0IGF0IHRoZSBjb21tYW5kIGxpbmUsIG9sZCBjb21wb3NpbmcgY2hhcmFjdGVycworCSAgICBtYXkgYmUgZGlzcGxheWVkLgorU29sdXRpb246ICAgRG9uJ3QgcmVhZCBjb21wb3NpbmcgY2hhcmFjdGVycyBmcm9tIGFmdGVyIHRoZSBlbmQgb2YgdGhlCisJICAgIHRleHQgdG8gYmUgZGlzcGxheWVkLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL21ieXRlLmMsIHNyYy9tZXNzYWdlLmMsIHNyYy9wcm90by9tYnl0ZS5wcm8sCisJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjJmLjAyNworUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZ3MgZm9yIHVuc2lnbmVkIGNoYXIgcG9pbnRlcnMuIChUb255IExlbmVpcykKK1NvbHV0aW9uOiAgIEFkZCB0eXBlY2FzdHMgdG8gY2hhciBwb2ludGVyLgorRmlsZXM6CSAgICBzcmMvcXVpY2tmaXguYworCitQYXRjaCA2LjJmLjAyOAorUHJvYmxlbTogICAgR1RLOiBXaGVuICdpbWFjdGl2YXRla2V5JyBpcyBlbXB0eSBhbmQgWElNIGlzIGluYWN0aXZlIGl0IGNhbid0IGJlCisJICAgIG1hZGUgYWN0aXZlIGFnYWluLiAgQ3Vyc29yIGlzbid0IHVwZGF0ZWQgaW1tZWRpYXRlbHkgd2hlbiBjaGFuZ2luZworCSAgICBYSU0gYWN0aXZhdGlvbi4gIEphcGFuZXNlIFhJTSBtYXkgaGFuZyB3aGVuIHVzaW5nICdpbWFjdGl2YXRla2V5Jy4KKwkgICAgQ2FuJ3QgYWN0aXZhdGUgWElNIGFmdGVyIHR5cGluZyBmRnRUIGNvbW1hbmQgb3IgIjpzaCIuCitTb2x1dGlvbjogICBQcm9wZXJseSBzZXQgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhlIElNIGlzIGFjdGl2ZS4gIFVwZGF0ZSB0aGUKKwkgICAgY3Vyc29yIHJpZ2h0IGF3YXkuICBEbyBub3Qgc2VuZCBhIGtleS1yZWxlYXNlIGV2ZW50LiAgSGFuZGxlCisJICAgIE5vcm1hbCBtb2RlIGFuZCBydW5uaW5nIGFuIGV4dGVybmFsIGNvbW1hbmQgZGlmZmVyZW50bHkuCisJICAgIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMmYuMDI5CitQcm9ibGVtOiAgICBNaXhpbmcgdXNlIG9mIGludCBhbmQgZW51bS4KK1NvbHV0aW9uOiAgIEFkanVzdCBhcmd1bWVudCB0eXBlIG9mIGNzX3VzYWdlX21zZygpLiAgRml4IHdyb25nIHR5cGVkZWYuCitGaWxlczoJICAgIHNyYy9pZl9jc2NvcGUuYywgc3JjL2lmX2NzY29wZS5oCisKK1BhdGNoIDYuMmYuMDMwIChhZnRlciA2LjJmLjAyOCkKK1Byb2JsZW06ICAgIEN1cnNvciBtb3ZlcyB1cCB3aGVuIHVzaW5nIFhJTS4KK1NvbHV0aW9uOiAgIFJlc2V0IGltX3ByZWVkaXRfY3Vyc29yLiAgKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4yZi4wMzEKK1Byb2JsZW06ICAgIENyYXNoIHdoZW4gbGlzdGluZyBhIGZ1bmN0aW9uIGFyZ3VtZW50IGluIHRoZSBkZWJ1Z2dlci4gKFJvbiBBYXJvbikKK1NvbHV0aW9uOiAgIEluaXQgdGhlIG5hbWUgZmllbGQgb2YgYW4gYXJndW1lbnQgdG8gTlVMTC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjJmLjAzMgorUHJvYmxlbTogICAgV2hlbiBhIHdyaXRlIGZhaWxzIGZvciBhICI6c2lsZW50ISIgd2hpbGUgaW5zaWRlIHRyeS9lbmR0cnkgdGhlCisJICAgIEJ1ZldyaXRlUG9zdCBhdXRvY29tbWFuZHMgYXJlIG5vdCB0cmlnZ2VyZWQuCitTb2x1dGlvbjogICBDaGVjayB0aGUgZW1zZ19zaWxlbnQgZmxhZyBpbiBzaG91bGRfYWJvcnQoKS4gKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9leF9ldmFsLmMsIHNyYy90ZXN0ZGlyL3Rlc3Q0OS5vaywgc3JjL3Rlc3RkaXIvdGVzdDQ5LnZpbQorCitQYXRjaCA2LjJmLjAzMworUHJvYmxlbTogICAgQ3Njb3BlOiByZS1lbnRyYW5jZSBwcm9ibGVtIGZvciAiOmNzY29wZSIgY29tbWFuZC4gIENoZWNraW5nIGZvcgorCSAgICBkdXBsaWNhdGUgZGF0YWJhc2UgZGlkbid0IHdvcmsgd2VsbCBmb3IgV2luOTUuICBEaWRuJ3QgY2hlY2sgZm9yCisJICAgIGR1cGxpY2F0ZSBkYXRhYmFzZXMgYWZ0ZXIgYW4gZW1wdHkgZW50cnkuCitTb2x1dGlvbjogICBEb24ndCBzZXQgcG9zdHBvbmVkX3NwbGl0IHRvbyBlYXJseS4gIFJlbWVtYmVyIGZpcnN0IGVtcHR5CisJICAgIGRhdGFiYXNlIGVudHJ5LiAoU2VyZ2V5IEtob3JldikKK0ZpbGVzOgkgICAgc3JjL2lmX2NzY29wZS5jCisKK1BhdGNoIDYuMmYuMDM0CitQcm9ibGVtOiAgICBUaGUgbmV0YmVhbnMgaW50ZXJmYWNlIGNhbm5vdCBiZSB1c2VkIG9uIHN5c3RlbXMgd2l0aG91dAorCSAgICB2c25wcmludGYoKS4gKFRvbnkgTGVuZWlzKQorU29sdXRpb246ICAgVXNlIEVNU0coKSwgRU1TR04oKSBhbmQgRU1TRzIoKSBpbnN0ZWFkLgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4sIHNyYy9uZXRiZWFucy5jCisKK1BhdGNoIDYuMmYuMDM1CitQcm9ibGVtOiAgICBUaGUgY29uZmlndXJlIGNoZWNrIGZvciB0aGUgbmV0YmVhbnMgaW50ZXJmYWNlIGRvZXNuJ3Qgd29yayBpZiB0aGUKKwkgICAgc29ja2V0IGFuZCBuc2wgbGlicmFyaWVzIGFyZSByZXF1aXJlZC4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciB0aGUgc29ja2V0IGFuZCBuc2wgbGlicmFyaWVzIGJlZm9yZSB0aGUgbmV0YmVhbnMgY2hlY2suCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjJmLjAzNgorUHJvYmxlbTogICAgTW92aW5nIGxlZnR3YXJkcyBvdmVyIHRleHQgd2l0aCBhbiBpbGxlZ2FsIFVURi04IGJ5dGUgbW92ZXMgb25lCisJICAgIGJ5dGUgaW5zdGVhZCBvZiBvbmUgY2hhcmFjdGVyLgorU29sdXRpb246ICAgSWdub3JlIGFuIGlsbGVnYWwgYnl0ZSBhZnRlciB0aGUgY3Vyc29yIHBvc2l0aW9uLgorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjJmLjAzNworUHJvYmxlbTogICAgV2hlbiByZWNlaXZpbmcgYSBOZXRiZWFucyBjb21tYW5kIGF0IHRoZSBoaXQtZW50ZXIgb3IgbW9yZSBwcm9tcHQKKwkgICAgdGhlIHNjcmVlbiBpcyByZWRyYXduIGJ1dCBWaW0gaXMgc3RpbGwgd2FpdGluZyBhdCB0aGUgcHJvbXB0LgorU29sdXRpb246ICAgUXVpdCB0aGUgcHJvbXB0IGxpa2UgYSBDVFJMLUMgd2FzIHR5cGVkLgorRmlsZXM6CSAgICBzcmMvbmV0YmVhbnMuYworCitQYXRjaCA2LjJmLjAzOAorUHJvYmxlbTogICAgVGhlIGRlcGVuZGVuY3kgdG8gcnVuIGF1dG9jb25mIGNhdXNlcyBhIHBhdGNoIGZvciBjb25maWd1cmUuaW4KKwkgICAgdG8gcnVuIGF1dG9jb25mLCBldmVuIHRob3VnaCB0aGUgY29uZmlndXJlIHNjcmlwdCB3YXMgdXBkYXRlZCBhcworCSAgICB3ZWxsLgorU29sdXRpb246ICAgT25seSBydW4gYXV0b2NvbmYgd2l0aCAibWFrZSBhdXRvY29uZiIuCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA2LjJmLjAzOQorUHJvYmxlbTogICAgQ1RSTC1XIEsgbWFrZXMgdGhlIG5ldyB0b3Agd2luZG93IHZlcnkgaGlnaC4KK1NvbHV0aW9uOiAgIFdoZW4gJ2VxdWFsYWx3YXlzJyBpcyBzZXQgZXF1YWxpemUgdGhlIHdpbmRvdyBoZWlnaHRzLgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1ZFUlNJT04gNi4zCQkJCQkJKnZlcnNpb24tNi4zKgorCitUaGlzIHNlY3Rpb24gaXMgYWJvdXQgaW1wcm92ZW1lbnRzIG1hZGUgYmV0d2VlbiB2ZXJzaW9uIDYuMiBhbmQgNi4zLgorCitUaGlzIGlzIG1haW5seSBhIGJ1Zy1maXggcmVsZWFzZS4gIFRoZXJlIGFyZSBhbHNvIGEgZmV3IG5ldyBmZWF0dXJlcy4KK1RoZSBtYWpvciBudW1iZXIgb2YgbmV3IGl0ZW1zIGlzIGluIHRoZSBydW50aW1lIGZpbGVzIGFuZCB0cmFuc2xhdGlvbnMuCisKKworQ2hhbmdlZAkJCQkJCQkqY2hhbmdlZC02LjMqCistLS0tLS0tCisKK1RoZSBpbnRybyBtZXNzYWdlIGFsc28gZGlzcGxheXMgYSBub3RlIGFib3V0IHNwb25zb3JpbmcgVmltLCBtaXhlZCByYW5kb21seQord2l0aCB0aGUgbWVzc2FnZSBhYm91dCBoZWxwaW5nIGNoaWxkcmVuIGluIFVnYW5kYS4KKworSW5jbHVkZWQgdGhlIHRyYW5zbGF0ZWQgbWVudXMsIGtleW1hcHMgYW5kIHR1dG9ycyB3aXRoIHRoZSBub3JtYWwgcnVudGltZQorZmlsZXMuICBUaGUgc2VwYXJhdGUgImxhbmciIGFyY2hpdmUgbm93IG9ubHkgY29udGFpbnMgdHJhbnNsYXRlZCBtZXNzYWdlcy4KKworTWFkZSB0aGUgdHJhbnNsYXRlZCBtZW51IGZpbGUgbmFtZXMgYSBiaXQgbW9yZSBjb25zaXN0ZW50LiAgVXNlICJsYXRpbjEiIGZvcgorImlzb184ODU5LTEiIGFuZCAiaXNvXzg4NTktMTUiLgorCitSZW1vdmVkIHRoZSAiZmlsZV9zZWxlY3QudmltIiBzY3JpcHQgZnJvbSB0aGUgZGlzdHJpYnV0aW9uLiAgSXQncyBub3QgbW9yZQordXNlZnVsIHRoYW4gb3RoZXIgc2NyaXB0cyB0aGF0IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gd3d3LnZpbS5vcmcuCisKK1RoZSAicnVudGltZS9kb2MvdGFncyIgZmlsZSBpcyBub3cgYWx3YXlzIGluIHVuaXggZmlsZWZvcm1hdC4gIE9uIE1TLVdpbmRvd3MKK2l0IHVzZWQgdG8gYmUgZG9zIGZpbGVmb3JtYXQsIGJ1dCAiOmhlbHB0YWdzIiBnZW5lcmF0ZXMgYSB1bml4IGZvcm1hdCBmaWxlLgorCisKK0FkZGVkCQkJCQkJCSphZGRlZC02LjMqCistLS0tLQorCitOZXcgY29tbWFuZHM6CisJOmNOZmlsZQkJZ28gdG8gbGFzdCBlcnJvciBpbiBwcmV2aW91cyBmaWxlCisJOmNwZmlsZQkJaWRlbQorCTpjaGFuZ2VzCXByaW50IHRoZSBjaGFuZ2UgbGlzdAorCTprZWVwbWFya3MJZm9sbG93aW5nIGNvbW1hbmQga2VlcHMgbWFya3Mgd2hlcmUgdGhleSBhcmUKKwk6a2VlcGp1bXBzCWZvbGxvd2luZyBjb21tYW5kIGtlZXBzIGp1bXBsaXN0IGFuZCBtYXJrcworCTpsb2NrbWFya3MJZm9sbG93aW5nIGNvbW1hbmQga2VlcHMgbWFya3Mgd2hlcmUgdGhleSBhcmUKKwk6cmVkcmF3c3RhdHVzCWZvcmNlIGEgcmVkcmF3IG9mIHRoZSBzdGF0dXMgbGluZShzKQorCitOZXcgb3B0aW9uczoKKwknYW50aWFsaWFzJwlNYWMgT1MgWDogdXNlIHNtb290aCwgYW50aWFsaWFzZWQgZm9udHMKKwknaGVscGxhbmcnCXByZWZlcnJlZCBoZWxwIGxhbmd1YWdlcworCitTeW50YXggZmlsZXM6CisJQXJjaCBpbnZlbnRvcnkgKE5pa29sYWkgV2VpYnVsbCkKKwlDYWxlbmRhciAoTmlrb2xhaSBXZWlidWxsKQorCUNoIChXYXluZSBDaGVuZykKKwlDb250cm9sbGFibGUgUmVnZXggTXV0aWxhdG9yIChOaWtvbGFpIFdlaWJ1bGwpCisJRCAoSmFzb24gTWlsbHMpCisJRGVza3RvcCAoTWlrb2xhaiBNYWNob3dza2kpCisJRGlyY29sb3JzIChOaWtvbGFpIFdlaWJ1bGwpCisJRWxpbmtzIGNvbmZpZ3VyYXRpb24gKE5pa29sYWkgV2VpYnVsbCkKKwlGQVNNIChSb24gQWFyb24pCisJR3JBRFMgc2NyaXB0cyAoU3RlZmFuIEZyb256ZWspCisJSWNld20gbWVudSAoSmFtZXMgTWFobGVyKQorCUxESUYgKFphayBKb2huc29uKQorCUxvY2FsZSBpbnB1dCwgZmRjYy4gKER3YXluZSBCYWlsZXkpCisJUGluZm8gY29uZmlnIChOaWtvbGFpIFdlaWJ1bGwpCisJUHlyZXggKE1hcmNvIEJhcmlzaW9uZSkKKwlSZWxheCBORyBDb21wYWN0IChOaWtvbGFpIFdlaWJ1bGwpCisJU2xpY2UgKE1vcmVsIEJvZGluKQorCVZBWCBNYWNybyBBc3NlbWJseSAoVG9tIFVpamxkZXJ0KQorCWdyYWRzIChTdGVmYW4gRnJvbnplaykKKwlsaWJhbyAoTmlrb2xhaSBXZWlidWxsKQorCW1wbGF5ZXIgKE5pa29sYWkgV2VpYnVsbCkKKwlyc3QgKE5pa29sYWkgV2VpYnVsbCkKKwl0Y3NoIChHYXV0YW0gSXllcikKKwl5YW1sIChOaWtvbGFpIFdlaWJ1bGwpCisKK0NvbXBpbGVyIHBsdWdpbnM6CisJQVRUIGRvdCAoTWFyY29zIE1hY2VkbykKKwlBcHBsZSBQcm9qZWN0IEJ1aWxkZXIgKEFsZXhhbmRlciB2b24gQmVsb3cpCisJSW50ZWwgKERhdmlkIEhhcnJpc29uKQorCWJkZiAoTmlrb2xhaSBXZWlidWxsKQorCWljYyAoUGV0ZXIgUHVjaykKKwlqYXZhYyAoRG91ZyBLZWFybnMpCisJbmVhdG8gKE1hcmNvcyBNYWNlZG8pCisJb25zZ21scyAoUm9iZXJ0IEIuIFJvd3NvbWUpCisJcGVybCAoQ2hyaXN0aWFuIEouIFJvYmluc29uKQorCXJzdCAoTmlrb2xhaSBXZWlidWxsKQorCXNlIChTbWFydEVpZmZlbCkgKERvdWcgS2Vhcm5zKQorCXRjbCAoRG91ZyBLZWFybnMpCisJeG1sd2YgKFJvYmVydCBCLiBSb3dzb21lKQorCitGaWxldHlwZSBwbHVnaW5zOgorCUFhcCAoQnJhbSBNb29sZW5hYXIpCisJQ2ggKFdheW5lIENoZW5nKQorCUNzcyAoTmlrb2xhaSBXZWlidWxsKQorCVB5cmV4IChNYXJjbyBCYXJpc2lvbmUpCisJUnN0IChOaWtvbGFpIFdlaWJ1bGwpCisKK0luZGVudCBzY3JpcHRzOgorCUFhcCAoQnJhbSBNb29sZW5hYXIpCisJQ2ggKFdheW5lIENoZW5nKQorCURvY0Jvb2sgKE5pa29sYWkgV2VpYnVsbCkKKwlNZXRhUG9zdCAoRXVnZW5lIE1pbmtvdnNraWkpCisJT2JqZWN0aXZlLUMgKEthenVub2J1IEt1cml5YW1hKQorCVB5cmV4IChNYXJjbyBCYXJpc2lvbmUpCisJUnN0IChOaWtvbGFpIFdlaWJ1bGwpCisJVGNzaCAoR2F1dGFtIEl5ZXIpCisJWEZyZWU4NiBjb25maWd1cmF0aW9uIGZpbGUgKE5pa29sYWkgV2VpYnVsbCkKKwlac2ggKE5pa29sYWkgV2VpYnVsbCkKKworS2V5bWFwczoKKwlHcmVlayBmb3IgY3AxMjUzIChQYW5hZ2lvdGlzIExvdXJpZGFzKQorCUh1bmdhcmlhbiAoTWFneWFyKSAoTGFzemxvIFphdmFsZXRhKQorCVBlcnNpYW4tSXJhbmlhbiAoQmVobmFtIEVzZmFoYm9kKQorCitNZXNzYWdlIHRyYW5zbGF0aW9uczoKKwlDYXRhbGFuIChFcm5lc3QgQWRyb2d1ZSkKKwlSdXNzaWFuIChWYXNzaWx5IFJhZ29zaW4pCisJU3dlZGlzaCAoSm9oYW4gU3ZlZGJlcmcpCisKK01lbnUgdHJhbnNsYXRpb25zOgorCUNhdGFsYW4gKEVybmVzdCBBZHJvZ3VlKQorCVJ1c3NpYW4gKFRpbSBBbGV4ZWV2c2t5KQorCVN3ZWRpc2ggKEpvaGFuIFN2ZWRiZXJnKQorCitUdXRvciB0cmFuc2xhdGlvbnM6CisJQ2F0YWxhbiAoRXJuZXN0IEFkcm9ndWUpCisJUnVzc2lhbiBpbiBjcDEyNTEgKEFsZXhleSBGcm9sb2ZmKQorCVNsb3ZhayBpbiBjcDEyNTEgYW5kIGlzbzg4NTktMiAoTHVib3MgQ2Vsa28pCisJU3dlZGlzaCAoSm9oYW4gU3ZlZGJlcmcpCisJS29yZWFuIChLZWUtV29uIFNlbykKKwlVVEYtOCB2ZXJzaW9uIG9mIHRoZSBKYXBhbmVzZSB0dXRvciAoWWFzdWhpcm8gTWF0c3Vtb3RvKSBVc2UgdGhpcyBhcworCQl0aGUgb3JpZ2luYWwsIGNyZWF0ZSB0aGUgb3RoZXIgSmFwYW5lc2UgdHV0b3IgYnkgY29udmVyc2lvbi4KKworSW5jbHVkZWQgInJ1c3NpYW4udHh0IiBoZWxwIGZpbGUuIChWYXNzaWx5IFJhZ29zaW4pCisKK0luY2x1ZGUgRW5jYXBzdWxhdGVkIFBvc3RTY3JpcHQgYW5kIFBERiB2ZXJzaW9ucyBvZiB0aGUgVmltIGxvZ28gaW4gdGhlIGV4dHJhCithcmNoaXZlLgorCitUaGUgaGVscCBoaWdobGlnaHRpbmcgZmluZHMgdGhlIGhpZ2hsaWdodCBncm91cHMgYW5kIHNob3dzIHRoZW0gaW4gdGhlIGNvbG9yCit0aGF0IGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIChpZGVhIGZyb20gWWFrb3YgTGVybmVyKQorCitUaGUgYmlnIFdpbjMyIHZlcnNpb24gaXMgbm93IGNvbXBpbGVkIHdpdGggUnVieSBpbnRlcmZhY2UsIHZlcnNpb24gMS44LiAgRm9yCitQeXRob24gdmVyc2lvbiAyLjMgaXMgdXNlZC4gIEZvciBQZXJsIHZlcnNpb24gNS44IGlzIHVzZWQuCisKK1RoZSAiZnRkZXRlY3QiIGRpcmVjdG9yeSBpcyBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uICBUaGUgRE9TIGluc3RhbGwKK3Byb2dyYW0gY3JlYXRlcyBpdC4KKworCitGaXhlZAkJCQkJCQkqZml4ZWQtNi4zKgorLS0tLS0KKworVGVzdCA0MiBmYWlsZWQgb24gTVMtV2luZG93cy4gIFNldCBhbmQgcmVzZXQgJ2ZpbGVmb3JtYXQnIGFuZCAnYmluYXJ5JyBvcHRpb25zCitoZXJlIGFuZCB0aGVyZS4gIChXYWx0ZXIgQnJpc2NvZSkKKworVGhlIGV4cGxvcmVyIHBsdWdpbiBkaWRuJ3Qgd29yayBmb3IgZG91YmxlLWJ5dGUgJ2VuY29kaW5nJ3MuCisKK1VzZSAiY29weSAveSIgaW4gTWFrZV9iYzUubWFrIHRvIGF2b2lkIGEgcHJvbXB0IGZvciBvdmVyd3JpdGluZy4KKworUGF0Y2ggNi4yLjAwMQorUHJvYmxlbTogICAgVGhlICI6c3RvcGluc2VydCIgY29tbWFuZCBkb2Vzbid0IGhhdmUgYSBoZWxwIHRhZy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgdGFnLiAoQW50b2luZSBKLiAgTWVjaGVseW5jaykKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvaW5zZXJ0LnR4dCwgcnVudGltZS9kb2MvdGFncworCitQYXRjaCA2LjIuMDAyCitQcm9ibGVtOiAgICBXaGVuIGNvbXBpbGVkIHdpdGggdGhlICttdWx0aV9ieXRlIGZlYXR1cmUgYnV0IHdpdGhvdXQgK2V2YWwsCisJICAgIGRpc3BsYXlpbmcgVVRGLTggY2hhcmFjdGVycyBtYXkgY2F1c2UgYSBjcmFzaC4gKEthcnN0ZW4gSG9wcCkKK1NvbHV0aW9uOiAgIEFsc28gc2V0IHRoZSBkZWZhdWx0IGZvciAnYW1iaXdpZHRoJyB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJICAgICtldmFsIGZlYXR1cmUuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuMDAzCitQcm9ibGVtOiAgICBHVEsgMjogZG91YmxlLXdpZGUgY2hhcmFjdGVycyBiZWxvdyAyNTYgYXJlIG5vdCBkaXNwbGF5ZWQKKwkgICAgY29ycmVjdGx5LgorU29sdXRpb246ICAgQ2hlY2sgdGhlIGNlbGwgd2lkdGggZm9yIGNoYXJhY3RlcnMgYWJvdmUgMTI3LiAoWWFzdWhpcm8KKwkgICAgTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA2LjIuMDA0CitQcm9ibGVtOiAgICBXaXRoIGEgbGluZS1WaXN1YWwgc2VsZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYSAicCIgY29tbWFuZAorCSAgICBwdXRzIHRoZSB0ZXh0IG9uZSBsaW5lIHVwd2FyZHMuCitTb2x1dGlvbjogICBEZXRlY3QgdGhhdCB0aGUgbGFzdCBsaW5lIHdhcyBkZWxldGVkIGFuZCBwdXQgZm9yd2FyZC4gKFRhcm8KKwkgICAgTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMi4wMDUKK1Byb2JsZW06ICAgIEdUSzogdGhlICJGaW5kIiBhbmQgIkZpbmQgYW5kIFJlcGxhY2UiIHRvb2xzIGRvbid0IHdvcmsuIChBc2Nod2luCisJICAgIE1hcnNtYW4pCitTb2x1dGlvbjogICBTaG93IHRoZSBkaWFsb2cgYWZ0ZXIgY3JlYXRpbmcgaXQuICAoRGF2aWQgTmVjYXMpCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMKKworUGF0Y2ggNi4yLjAwNgorUHJvYmxlbTogICAgVGhlIE5ldGJlYW5zIGNvZGUgY29udGFpbnMgYW4gb2Jzb2xldGUgZnVuY3Rpb24gdGhhdCB1c2VzICJ2aW02MSIKKwkgICAgYW5kIHNldHMgdGhlIGZhbGwtYmFjayB2YWx1ZSBmb3IgJFZJTVJVTlRJTUUuCitTb2x1dGlvbjogICBEZWxldGUgdGhlIG9ic29sZXRlIGZ1bmN0aW9uLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvbmV0YmVhbnMuYywgc3JjL3Byb3RvL25ldGJlYW5zLnBybworCitQYXRjaCA2LjIuMDA3CitQcm9ibGVtOiAgICBMaXN0aW5nIHRhZ3MgZm9yIENzY29wZSBkb2Vzbid0IGFsd2F5cyB3b3JrLgorU29sdXRpb246ICAgQXZvaWQgdXNpbmcgc21nc19hdHRyKCkuIChTZXJnZXkgS2hvcmV2KQorRmlsZXM6CSAgICBzcmMvaWZfY3Njb3BlLmMKKworUGF0Y2ggNi4yLjAwOAorUHJvYmxlbTogICAgWElNIHdpdGggR1RLIDI6IEFmdGVyIGJhY2tzcGFjaW5nIHByZWVkaXQgY2hhcmFjdGVycyBhcmUgd3JvbmcuCitTb2x1dGlvbjogICBSZXNldCB0aGUgY3Vyc29yIHBvc2l0aW9uLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjIuMDA5CitQcm9ibGVtOiAgICBXaW4zMjogVGhlIHNlbGYtaW5zdGFsbGluZyBleGVjdXRhYmxlICJGdWxsIiBzZWxlY3Rpb24gb25seQorCSAgICBzZWxlY3RzIHNvbWUgb2YgdGhlIGl0ZW1zIHRvIGluc3RhbGwuIChTYWxtYW4gTW9oc2luKQorU29sdXRpb246ICAgQ2hhbmdlIGNvbW1hcyB0byBzcGFjZXMgaW4gYmV0d2VlbiBzZWN0aW9uIG51bWJlcnMuCitGaWxlczoJICAgIG5zaXMvZ3ZpbS5uc2kKKworUGF0Y2ggNi4yLjAxMAorUHJvYmxlbTogICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIGVmZmVjdGl2ZSBhbmQgYSBsaW5lIHN0YXJ0cyB3aXRoIGEKKwkgICAgbXVsdGktYnl0ZSBjaGFyYWN0ZXIsIG1vdmluZyB0aGUgY3Vyc29yIHJpZ2h0IGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIE9idGFpbiB0aGUgcmlnaHQgY2hhcmFjdGVyIHRvIGNvbXB1dGUgdGhlIGNvbHVtbiBvZmZzZXQuIChUYXJvCisJICAgIE11cmFva2EpCitGaWxlczoJICAgIHNyYy9jaGFyc2V0LmMKKworUGF0Y2ggNi4yLjAxMQorUHJvYmxlbTogICAgQWxwaGEgT1NGMTogc3RhdCgpIGlzIGEgbWFjcm8gYW5kIGRvZXNuJ3QgYWxsb3cgYW4gI2lmZGVmIGhhbGZ3YXkuCisJICAgIChNb3NoZSBLYW1pbnNreSkKK1NvbHV0aW9uOiAgIE1vdmUgdGhlICNpZmRlZiBvdXRzaWRlIG9mIHN0YXQoKS4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMDEyCitQcm9ibGVtOiAgICBNYXkgaGFuZyB3aGVuIHBvbGxpbmcgZm9yIGEgY2hhcmFjdGVyLgorU29sdXRpb246ICAgQnJlYWsgdGhlIHdhaXQgbG9vcCB3aGVuIG5vdCB3YWl0aW5nIGZvciBhIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMDEzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgcmVnaXN0cnkga2V5IGZvciB1bmluc3RhbGxpbmcgR3ZpbUV4dCBzdGlsbCB1c2VzICI2LjEiLgorU29sdXRpb246ICAgQ2hhbmdlIHRoZSB2ZXJzaW9uIG51bWJlciB0byAiNi4yIi4gKEFqaXQgVGhha2thcikKK0ZpbGVzOgkgICAgc3JjL0d2aW1FeHQvR3ZpbUV4dC5yZWcKKworUGF0Y2ggNi4yLjAxNCAoYWZ0ZXIgNi4yLjAxMikKK1Byb2JsZW06ICAgIFhTTVAgZG9lc24ndCB3b3JrIHdoZW4gdXNpbmcgcG9sbCgpLgorU29sdXRpb246ICAgVXNlIHhzbXBfaWR4IGluc3RlYWQgb2YgZ3BtX2lkeC4gKE5laWwgQmlyZCkKK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMDE1CitQcm9ibGVtOiAgICBUaGUgK3hzbXAgZmVhdHVyZSBpcyBuZXZlciBlbmFibGVkLgorU29sdXRpb246ICAgTW92ZSB0aGUgI2RlZmluZSBmb3IgVVNFX1hTTVAgdG8gYmVsb3cgd2hlcmUgV0FOVF9YMTEgaXMgZGVmaW5lZC4KKwkgICAgKEFsZXhleSBGcm9sb2ZmKQorRmlsZXM6CSAgICBzcmMvZmVhdHVyZS5oCisKK1BhdGNoIDYuMi4wMTYKK1Byb2JsZW06ICAgIFVzaW5nICI6c2NzY29wZSBmaW5kIiB3aXRoICdjc2NvcGVxdWlja2ZpeCcgZG9lcyBub3QgYWx3YXlzIHNwbGl0CisJICAgIHRoZSB3aW5kb3cuIChHYXJ5IEpvaG5zb24pCisJICAgIFdpbjMyOiAiOmNzY29wZSBhZGQiIGNvdWxkIG1ha2UgdGhlIHNjcmlwdCB0aGF0IGNvbnRhaW5zIGl0CisJICAgIHJlYWQtb25seSB1bnRpbCB0aGUgY29ycmVzcG9uZGluZyAiOmNzY29wZSBraWxsIi4KKwkgICAgRXJyb3JzIGR1cmluZyAiOmNzY29wZSBhZGQiIG1heSBub3QgYmUgaGFuZGxlZCBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIFdoZW4gdXNpbmcgdGhlIHF1aWNrZml4IHdpbmRvdyBtYXkgbmVlZCB0byBzcGxpdCB0aGUgd2luZG93LgorCSAgICBBdm9pZCBmaWxlIGhhbmRsZSBpbmhlcml0YW5jZSBmb3IgdGhlIHNjcmlwdC4KKwkgICAgQ2hlY2sgZm9yIGEgZmFpbGVkIGNvbm5lY3Rpb24gYW5kL29yIHByb2Nlc3MuICAoU2VyZ2V5IEtob3JldikKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMsIHNyYy9pZl9jc2NvcGUuYworCitQYXRjaCA2LjIuMDE3CitQcm9ibGVtOiAgICBUZXN0MTEgc29tZXRpbWVzIHByb21wdHMgdGhlIHVzZXIsIGJlY2F1c2UgYSBmaWxlIHdvdWxkIGhhdmUgYmVlbgorCSAgICBjaGFuZ2VkIG91dHNpZGUgb2YgVmltLiAoQW50b25pbyBDb2xvbWJvKQorU29sdXRpb246ICAgQWRkIGEgRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCB0byBhdm9pZCB0aGUgcHJvbXB0LgorRmlsZXM6CSAgICBzcmMvdGVzdGRpci90ZXN0MTEuaW4KKworUGF0Y2ggNi4yLjAxOAorUHJvYmxlbTogICAgV2hlbiB1c2luZyB0aGUgWFNNUCBwcm90b2NvbCBhbmQgcmVhZGluZyBmcm9tIHN0ZGluIFZpbSBtYXkgd2FpdAorCSAgICBmb3IgYSBrZXkgdG8gYmUgcHJlc3NlZC4KK1NvbHV0aW9uOiAgIEF2b2lkIHRoYXQgUmVhbFdhaXRGb3JDaGFyKCkgaXMgdXNlZCByZWN1cnNpdmVseS4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMDE5IChsYW5nKQorUHJvYmxlbTogICAgTG9hZGluZyB0aGUgUG9ydHVndWVzZSBtZW51IGNhdXNlcyBhbiBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgSm9pbiB0d28gbGluZXMuICAoSm9zZSBQZWRybyBPbGl2ZWlyYSwgSm9z6SBkZSBQYXVsYSkKK0ZpbGVzOgkgICAgcnVudGltZS9sYW5nL21lbnVfcHRfYnIudmltCisKK1BhdGNoIDYuMi4wMjAKK1Byb2JsZW06ICAgIFRoZSAiU3ludGF4L1NldCBzeW50YXggb25seSIgbWVudSBpdGVtIGNhdXNlcyBhbiBlcnJvciBtZXNzYWdlLgorCSAgICAoT3l2aW5kIEhvbG0pCitTb2x1dGlvbjogICBTZXQgdGhlIHNjcmlwdC1sb2NhbCB2YXJpYWJsZSBpbiBhIGZ1bmN0aW9uLiAoQmVuamkgRmlzaGVyKQorRmlsZXM6CSAgICBydW50aW1lL3N5bm1lbnUudmltCisKK1BhdGNoIDYuMi4wMjEKK1Byb2JsZW06ICAgIFRoZSB1c2VyIG1hbnVhbCBzZWN0aW9uIG9uIGV4Y2VwdGlvbnMgY29udGFpbnMgc21hbGwgbWlzdGFrZXMuCitTb2x1dGlvbjogICBHaXZlIGEgZ29vZCBleGFtcGxlIG9mIGFuIGVycm9yIHRoYXQgY291bGQgYmUgbWlzc2VkIGFuZCBvdGhlcgorCSAgICBpbXByb3ZlbWVudHMuIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBydW50aW1lL2RvYy91c3JfNDEudHh0CisKK1BhdGNoIDYuMi4wMjIgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IEFmdGVyIGRlbGV0aW5nIGEgbWVudSBpdGVtIGl0IHN0aWxsIGFwcGVhcnMgaW4gYSB0ZWFyLW9mZgorCSAgICB3aW5kb3cuCitTb2x1dGlvbjogICBTZXQgdGhlIG1vZGUgdG8gemVybyBmb3IgdGhlIGRlbGV0ZWQgaXRlbS4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjIuMDIzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBNYWtlX2l2Yy5tYWsgZG9lcyBub3QgY2xlYW4gZXZlcnl0aGluZy4KK1NvbHV0aW9uOiAgIERlbGV0ZSBtb3JlIGZpbGVzIGluIHRoZSBjbGVhbiBydWxlLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9NYWtlX2l2Yy5tYWsKKworUGF0Y2ggNi4yLjAyNCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogQ29tcGlsZXIgd2FybmluZ3MgZm9yIHR5cGVjYXN0cy4KK1NvbHV0aW9uOiAgIFVzZSBEV09SRCBpbnN0ZWFkIG9mIFdPUkQuIChXYWx0ZXIgQnJpc2NvZSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjIuMDI1CitQcm9ibGVtOiAgICBNaXNzaW5nIHByb3RvdHlwZSBmb3Igc2lnYWx0c3RhY2soKS4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgcHJvdG90eXBlIHdoZW4gaXQgaXMgbm90IGZvdW5kIGluIGEgaGVhZGVyIGZpbGUuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4yLjAyNgorUHJvYmxlbTogICAgV2FybmluZyBmb3IgdXRpbWVzKCkgYXJndW1lbnQuCitTb2x1dGlvbjogICBBZGQgYSB0eXBlY2FzdC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi4wMjcKK1Byb2JsZW06ICAgIFdhcm5pbmcgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCitTb2x1dGlvbjogICBTZXQgbWJfbCB0byBvbmUgd2hlbiBub3QgdXNpbmcgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMi4wMjgKK1Byb2JsZW06ICAgIENzY29wZSBjb25uZWN0aW9uIG1heSBraWxsIFZpbSBwcm9jZXNzIGFuZCBvdGhlcnMuCitTb2x1dGlvbjogICBDaGVjayBmb3IgcGlkIGJlaW5nIGxhcmdlciB0aGFuIG9uZS4gKEtob3JldiBTZXJnZXkpCitGaWxlczoJICAgIHNyYy9pZl9jc2NvcGUuYworCitQYXRjaCA2LjIuMDI5CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHRoZSByZW1vdGUgc2VydmVyIGZ1bmN0aW9uYWxpdHkgVmltIG1heSBsZWFrIG1lbW9yeS4KKwkgICAgKFNyaWthbnRoIFNhbmthcmFuKQorU29sdXRpb246ICAgRnJlZSB0aGUgcmVzdWx0IG9mIFhMaXN0UHJvcGVydGllcygpLgorRmlsZXM6CSAgICBzcmMvaWZfeGNtZHNydi5jCisKK1BhdGNoIDYuMi4wMzAKK1Byb2JsZW06ICAgIE1hYzogV2FybmluZyBmb3Igbm90IGJlaW5nIGFibGUgdG8gdXNlIHByZWNvbXBpbGVkIGhlYWRlciBmaWxlcy4KK1NvbHV0aW9uOiAgIERvbid0IHJlZGVmaW5lIHNlbGVjdC4gIFVzZSAtbm8tY3BwLXByZWNvbXAgZm9yIGNvbXBpbGluZywgc28gdGhhdAorCSAgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFyZSBzdGlsbCBmb3VuZC4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYywgc3JjL29zZGVmLnNoCisKK1BhdGNoIDYuMi4wMzEKK1Byb2JsZW06ICAgIFRoZSBsYW5nbWVudSBlbnRyeSBpbiB0aGUgb3B0aW9ucyB3aW5kb3cgZG9lc24ndCB3b3JrLiAoUm9kb2xmbworCSAgICBMaW1hKQorCSAgICBXaXRoIEdUSyAxIHRoZSAiOm9wdGlvbnMiIGNvbW1hbmQgY2F1c2VzIGFuIGVycm9yIG1lc3NhZ2UuCisJICAgIChNaWNoYWVsIE5hdW1hbm4pCitTb2x1dGlvbjogICBDaGFuZ2UgImxtZW51IiB0byAibGFuZ21lbnUiLiAgT25seSBkaXNwbGF5IHRoZSAndGJpcycgb3B0aW9uIGZvcgorCSAgICBHVEsgMi4KK0ZpbGVzOgkgICAgcnVudGltZS9vcHR3aW4udmltCisKK1BhdGNoIDYuMi4wMzIKK1Byb2JsZW06ICAgIFRoZSBscGMgZmlsZXR5cGUgaXMgbmV2ZXIgcmVjb2duaXplZC4gKFNoaXpodSBQYW4pCitTb2x1dGlvbjogICBDaGVjayBmb3IgZzpscGNfc3ludGF4X2Zvcl9jIGluc3RlYWQgb2YgdGhlIGxvY2FsIHZhcmlhYmxlCisJICAgIGxwY19zeW50YXhfZm9yX2MuIChCZW5qaSBGaXNoZXIpCitGaWxlczoJICAgIHJ1bnRpbWUvZmlsZXR5cGUudmltCisKK1BhdGNoIDYuMi4wMzMgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjOiBWYXJpb3VzIGNvbXBpbGVyIHdhcm5pbmdzLgorU29sdXRpb246ICAgRG9uJ3QgaW5jbHVkZSBDbGFzc2ljLW9ubHkgaGVhZGVycyBpbiBVbml4IHZlcnNpb24uCisJICAgIFJlbW92ZSByZWZlcmVuY2VzIHRvIHNldmVyYWwgdW51c2VkIHZhcmlhYmxlcy4gKEJlbiBGb3dsZXIpCisJICAgIEZpeCBkb3VibGUgZGVmaW5pdGlvbiBvZiBERUZBVUxUX1RFUk0uCisJICAgIFVzZSBpbnQgaW5zdGVhZCBvZiB1bnNpZ25lZCBzaG9ydCBmb3IgcGl4ZWwgdmFsdWVzLCBzbyB0aGF0IHRoZQorCSAgICBuZWdhdGl2ZSBlcnJvciB2YWx1ZXMgYXJlIHJlY29nbml6ZWQuCitGaWxlczoJICAgIHNyYy9ndWlfbWFjLmMsIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4yLjAzNAorUHJvYmxlbTogICAgTWFjOiBDb21waWxlciB3YXJuaW5nIGZvciByZWRlZmluaW5nIERFRkFVTFRfVEVSTS4KK1NvbHV0aW9uOiAgIEZpeCBkb3VibGUgZGVmaW5pdGlvbiBvZiBERUZBVUxUX1RFUk0uCitGaWxlczoJICAgIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4yLjAzNQorUHJvYmxlbTogICAgTWFjOiBDb21waWxlciB3YXJuaW5ncyBpbiBQeXRob24gaW50ZXJmYWNlLgorU29sdXRpb246ICAgTWFrZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBwdXJlIE1hYyBhbmQgVW5peC1NYWMuIChQZXRlciBDdWNrYSkKK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMi4wMzYgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjIFVuaXggdmVyc2lvbjogSWYgZm9vIGlzIGEgZGlyZWN0b3J5LCB0aGVuICI6ZSBmPFRhYj4iIHNob3VsZAorCSAgICBleHBhbmQgdG8gIjplIGZvby8iIGluc3RlYWQgb2YgIjplIGZvbyIgLiAgKFZhZGltIFplaXRsaW4pCitTb2x1dGlvbjogICBEZWZpbmUgRE9OVF9BRERfUEFUSFNFUF9UT19ESVIgb25seSBmb3IgcHVyZSBNYWMuIChCZW5qaSBGaXNoZXIpCitGaWxlczoJICAgIHNyYy9vc19tYWMuaAorCitQYXRjaCA2LjIuMDM3CitQcm9ibGVtOiAgICBXaW4zMjogY29udmVydGluZyBhbiBlbmNvZGluZyBuYW1lIHRvIGEgY29kZXBhZ2UgY291bGQgcmVzdWx0IGluCisJICAgIGFuIGFyYml0cmFyeSBudW1iZXIuCitTb2x1dGlvbjogICBtYWtlIGVuY25hbWUyY29kZXBhZ2UoKSByZXR1cm4gemVybyBpZiB0aGUgZW5jb2RpbmcgbmFtZSBkb2Vzbid0CisJICAgIGNvbnRhaW4gYSBjb2RlcGFnZSBudW1iZXIuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMi4wMzggKGV4dHJhKQorUHJvYmxlbTogICAgV2FybmluZyBtZXNzYWdlcyB3aGVuIHVzaW5nIHRoZSBNaW5nVyBjb21waWxlci4gKEJpbGwgTWNDYXJ0aHkpCisJICAgIENhbid0IGNvbXBpbGUgY29uc29sZSB2ZXJzaW9uIHdpdGhvdXQgK21vdXNlIGZlYXR1cmUuCitTb2x1dGlvbjogICBJbml0aWFsaXplIHZhcmlhYmxlcywgYWRkIHBhcmVudGhlc2lzLgorCSAgICBBZGQgYW4gI2lmZGVmIGFyb3VuZCBnX25Nb3VzZUNsaWNrLiAoQWppdCBUaGFra2FyKQorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvb3Nfd2luMzIuYywgc3JjL2d1aV93MzIuYywgc3JjL2Rvc2luc3QuYworCitQYXRjaCA2LjIuMDM5IChleHRyYSkKK1Byb2JsZW06ICAgIE1vcmUgd2FybmluZyBtZXNzYWdlcyB3aGVuIHVzaW5nIHRoZSBNaW5nVyBjb21waWxlci4KK1NvbHV0aW9uOiAgIEluaXRpYWxpemUgdmFyaWFibGVzLiAoQmlsbCBNY0NhcnRoeSkKK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4yLjA0MAorUHJvYmxlbTogICAgRnJlZUJTRDogQ3Jhc2ggd2hpbGUgc3RhcnRpbmcgdXAgd2hlbiBjb21waWxlZCB3aXRoICt4c21wIGZlYXR1cmUuCitTb2x1dGlvbjogICBQYXNzIGEgbm9uLU5VTEwgYXJndW1lbnQgdG8gSWNlQWRkQ29ubmVjdGlvbldhdGNoKCkuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4yLjA0MSAoZXh0cmEsIGFmdGVyIDYuMi4wMzMpCitQcm9ibGVtOiAgICBNYWM6IENvbXBpbGVyIHdhcm5pbmdzIGZvciBjb252ZXJzaW9uIHR5cGVzLCBtaXNzaW5nIHByb3RvdHlwZSwKKwkgICAgbWlzc2luZyByZXR1cm4gdHlwZS4KK1NvbHV0aW9uOiAgIENoYW5nZSBzc2NhbmYgIiVoZCIgdG8gIiVkIiwgdGhlIGFyZ3VtZW50IGlzIGFuIGludCBub3cuICBBZGQKKwkgICAgZ3VpX21jaF9pbml0X2NoZWNrKCkgcHJvdG90eXBlLiAgQWRkICJpbnQiIHRvIHRlcm1saWIgZnVuY3Rpb25zLgorRmlsZXM6CSAgICBzcmMvZ3VpX21hYy5jLCBzcmMvcHJvdG8vZ3VpX21hYy5wcm8sIHNyYy90ZXJtbGliLmMuCisKK1BhdGNoIDYuMi4wNDIgKGV4dHJhKQorUHJvYmxlbTogICAgQ3lnd2luOiBnY2MgMy4yIGhhcyBhbiBvcHRpbWl6ZXIgcHJvYmxlbSwgc29tZXRpbWVzIGNhdXNpbmcgYQorCSAgICBjcmFzaC4KK1NvbHV0aW9uOiAgIEFkZCAtZm5vLXN0cmVuZ3RoLXJlZHVjZSB0byB0aGUgY29tcGlsZXIgYXJndW1lbnRzLiAoRGFuIFNoYXJwKQorRmlsZXM6CSAgICBzcmMvTWFrZV9jeWcubWFrCisKK1BhdGNoIDYuMi4wNDMKK1Byb2JsZW06ICAgIENvbXBpbGluZyB3aXRoIGJvdGggbmV0YmVhbnMgYW5kIHdvcmtzaG9wIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIE1vdmUgdGhlIHNoZWxsUmVjdGFuZ2xlKCkgZnVuY3Rpb24gdG8gZ3VpX3gxMS5jLiAoR29yZG9uIFByaWV1cikKK0ZpbGVzOgkgICAgc3JjL2d1aV94MTEuYywgc3JjL2ludGVncmF0aW9uLmMsIHNyYy9uZXRiZWFucy5jLAorCSAgICBzcmMvcHJvdG8vbmV0YmVhbnMucHJvCisKK1BhdGNoIDYuMi4wNDQKK1Byb2JsZW06ICAgICI6YXUgZmlsZXR5cGVkZXRlY3QiIGdpdmVzIGFuIGVycm9yIGZvciBhIG5vbi1leGlzdGluZyBldmVudCBuYW1lLAorCSAgICBidXQgaXQncyBhY3R1YWxseSBhIG5vbi1leGlzdGluZyBncm91cCBuYW1lLiAoQW50b2luZSBNZWNoZWx5bmNrKQorU29sdXRpb246ICAgTWFrZSB0aGUgZXJyb3IgbWVzc2FnZSBjbGVhcmVyLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4yLjA0NQorUHJvYmxlbTogICAgT2J0YWluaW5nIHRoZSAnKCBtYXJrIGNoYW5nZXMgdGhlICcnIG1hcmsuIChHYXJ5IEhvbGxvd2F5KQorU29sdXRpb246ICAgRG9uJ3Qgc2V0IHRoZSAnJyBtYXJrIHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgc3RhcnQvZW5kIG9mIHRoZQorCSAgICBjdXJyZW50IHNlbnRlbmNlL3BhcmFncmFwaC4KK0ZpbGVzOgkgICAgc3JjL21hcmsuYworCitQYXRjaCA2LjIuMDQ2CitQcm9ibGVtOiAgICBXaGVuIGV2YWx1YXRpbmcgYW4gYXJndW1lbnQgb2YgYSBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uIHRoZQorCSAgICBmdW5jdGlvbiBpcyBzdGlsbCBjYWxsZWQuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIERvbid0IGNhbGwgdGhlIGZ1bmN0aW9uIHdoZW4gYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4yLjA0NyAoZXh0cmEpCitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5ncyB3aGVuIHVzaW5nIE1pbmdXLiAoQmlsbCBNY0NhcnRoeSkKK1NvbHV0aW9uOiAgIEdpdmUgdGhlIHNfZHdMYXN0Q2xpY2tUaW1lIHZhcmlhYmxlIGEgdHlwZS4gIEluaXRpYWxpemUgZHdFbmRUaW1lLgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjIuMDQ4CitQcm9ibGVtOiAgICBUaGUgUHl0aG9uIGludGVyZmFjZSBkb2Vzbid0IGNvbXBpbGUgd2l0aCBQeXRob24gMi4zIHdoZW4KKwkgICAgZHluYW1pY2FsbHkgbG9hZGVkLgorU29sdXRpb246ICAgVXNlIGRsbF9QeU9iamVjdF9NYWxsb2MgYW5kIGRsbF9QeU9iamVjdF9GcmVlLiAoUGF1bCBNb29yZSkKK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMi4wNDkKK1Byb2JsZW06ICAgIFVzaW5nIGEgIi1yYW5nZT0iIGFyZ3VtZW50IHdpdGggIjpjb21tYW5kIiBkb2Vzbid0IHdvcmsgYW5kCisJICAgIGRvZXNuJ3QgZ2VuZXJhdGUgYW4gZXJyb3IgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIEdlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi4wNTAKK1Byb2JsZW06ICAgIFRlc3QgMzIgZGlkbid0IHdvcmsgb24gTVMtV2luZG93cy4KK1NvbHV0aW9uOiAgIFdyaXRlIHRoZSB0ZW1wIGZpbGUgaW4gVW5peCBmaWxlZm9ybWF0LiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy90ZXN0ZGlyL3Rlc3QzMi5pbgorCitQYXRjaCA2LjIuMDUxCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICJcPXN1Ym1hdGNoKDApIiBpbiBhICI6cyIgY29tbWFuZCwgbGluZSBicmVha3MgYmVjb21lCisJICAgIE5VTCBjaGFyYWN0ZXJzLgorU29sdXRpb246ICAgQ2hhbmdlIE5MIHRvIENSIGNoYXJhY3RlcnMsIHNvIHRoYXQgdGhleSBiZWNvbWUgbGluZSBicmVha3MuCitGaWxlczoJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjIuMDUyCitQcm9ibGVtOiAgICBBIGZldyBtZXNzYWdlcyBhcmUgbm90IHRyYW5zbGF0ZWQuCitTb2x1dGlvbjogICBBZGQgXygpIHRvIHRoZSBtZXNzYWdlcy4gKE11cmFva2EgVGFybykKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjIuMDUzCitQcm9ibGVtOiAgICBQcm90b3R5cGUgZm9yIGJ6ZXJvKCkgZG9lc24ndCBtYXRjaCBtb3N0IHN5c3RlbXMuCitTb2x1dGlvbjogICBVc2UgInZvaWQgKiIgaW5zdGVhZCBvZiAiY2hhciAqIiBhbmQgInNpemVfdCIgaW50ZWFkIG9mICJpbnQiLgorRmlsZXM6CSAgICBzcmMvb3NkZWYxLmguaW4KKworUGF0Y2ggNi4yLjA1NAorUHJvYmxlbTogICAgQSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgd2l0aCBhIHNlY29uZCBieXRlIHRoYXQgaXMgYSBiYWNrc2xhc2gKKwkgICAgY2F1c2VzIHByb2JsZW1zIGluc2lkZSBhIHN0cmluZy4KK1NvbHV0aW9uOiAgIFNraXAgb3ZlciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcgcHJvcGVybHkuIChZYXN1aGlybworCSAgICBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4yLjA1NQorUHJvYmxlbTogICAgVXNpbmcgY29sKCcuJykgZnJvbSBDVFJMLU8gaW4gSW5zZXJ0IG1vZGUgZG9lcyBub3QgcmV0dXJuIHRoZQorCSAgICBjb3JyZWN0IHZhbHVlIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSBjdXJzb3IgcG9zaXRpb24gd2hlbiBpdCBpcyBuZWNlc3NhcnksIG1vdmUgdG8gdGhlCisJICAgIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aS1ieXRlIGNoYXJhY3Rlci4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjIuMDU2IChleHRyYSkKK1Byb2JsZW06ICAgIEJ1aWxkaW5nIHdpdGggU25pZmYrKyBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBVc2UgdGhlIG11bHRpLXRocmVhZGVkIGxpYmMgd2hlbiBuZWVkZWQuIChIb2xnZXIgRGl0dGluZykKK0ZpbGVzOgkgICAgc3JjL01ha2VfbXZjLm1haworCitQYXRjaCA2LjIuMDU3IChleHRyYSkKK1Byb2JsZW06ICAgIE1hYzogV2l0aCAtRE1BQ09TX1ggcHV0ZW52KCkgaXMgZGVmaW5lZCB0d2ljZSwgaXQgaXMgaW4gYSBzeXN0ZW0KKwkgICAgbGlicmFyeS4gIEdldCBhIHdhcm5pbmcgZm9yIHJlZGVmaW5pbmcgT0suICBVbnVzZWQgdmFyaWFibGVzIGluCisJICAgIG9zX21hYy5jCitTb2x1dGlvbjogICBEZWZpbmUgSEFWRV9QVVRFTlYuICBVbmRlZmluZSBPSyBhZnRlciBpbmNsdWRpbmcgY3Vyc2VzLmguCisJICAgIFJlbW92ZSBkZWNsYXJhdGlvbnMgZm9yIHVudXNlZCB2YXJpYWJsZXMuCitGaWxlczoJICAgIHNyYy9vc19tYWMuYywgc3JjL29zX21hYy5oLCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjA1OAorUHJvYmxlbTogICAgV2hlbiAnYXV0b2NoZGlyJyBpcyBzZXQgIjpibmV4dCIgdG8gYSBidWZmZXIgd2l0aG91dCBhIG5hbWUgY2F1c2VzCisJICAgIGEgY3Jhc2guCitTb2x1dGlvbjogICBEb24ndCBjYWxsIHZpbV9jaGRpcmZpbGUoKSB3aGVuIHRoZSBmaWxlIG5hbWUgaXMgTlVMTC4gKFRhcm8KKwkgICAgTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMi4wNTkKK1Byb2JsZW06ICAgIFdoZW4gJ3Njcm9sbG9mZicgaXMgYSBsYXJnZSBudW1iZXIgYW5kIGxpc3RpbmcgY29tcGxldGlvbiByZXN1bHRzCisJICAgIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZW4gZXhlY3V0aW5nIGEgY29tbWFuZCB0aGF0IGp1bXBzIGNsb3NlIHRvCisJICAgIHdoZXJlIHRoZSBjdXJzb3Igd2FzIGJlZm9yZSwgcGFydCBvZiB0aGUgc2NyZWVuIGlzIG5vdCB1cGRhdGVkLgorCSAgICAoWWFrb3YgTGVybmVyKQorU29sdXRpb246ICAgRG9uJ3Qgc2tpcCByZWRyYXdpbmcgcGFydCBvZiB0aGUgd2luZG93IHdoZW4gaXQgd2FzIHNjcm9sbGVkLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4yLjA2MCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiAnZW5jb2RpbmcnIGlzIHNldCB0byAiaXNvLTg4NTktNyIgY29weS9wYXN0ZSB0by9mcm9tCisJICAgIHRoZSBjbGlwYm9hcmQgZ2l2ZXMgYSBsYWxsb2MoMCkgZXJyb3IuIChLcml0b24gS3lyaW1pcykKK1NvbHV0aW9uOiAgIFdoZW4gdGhlIHN0cmluZyBsZW5ndGggaXMgemVybyBhbGxvY2F0ZSBvbmUgYnl0ZS4gIEFsc28gZml4IHRoYXQKKwkgICAgd2hlbiB0aGUgbGVuZ3RoIG9mIHRoZSBVbmljb2RlIHRleHQgaXMgemVybyAoY29udmVyc2lvbiBmcm9tCisJICAgICdlbmNvZGluZycgdG8gVUNTLTIgd2FzIG5vdCBwb3NzaWJsZSkgdGhlIG5vcm1hbCB0ZXh0IGlzIHVzZWQuCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jCisKK1BhdGNoIDYuMi4wNjEKK1Byb2JsZW06ICAgIEdVSTogVXNpbmcgdGhlIGxlZnQgbW91c2UgYnV0dG9uIHdpdGggdGhlIHNoaWZ0IGtleSBzaG91bGQgd29yaworCSAgICBsaWtlICIqIiBidXQgaXQgc2Nyb2xscyBpbnN0ZWFkLiAoTWFydGluIEJlbGxlcikKK1NvbHV0aW9uOiAgIERvbid0IHJlY29nbml6ZSBhbiByeHZ0IHNjcm9sbCB3aGVlbCBldmVudCB3aGVuIHVzaW5nIHRoZSBHVUkuCitGaWxlczoJICAgIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4yLjA2MgorUHJvYmxlbTogICAgV2hlbiBvbmUgYnVmZmVyIHVzZXMgYSBzeW50YXggd2l0aCAiY29udGFpbmVkaW4iIGFuZCBhbm90aGVyCisJICAgIGJ1ZmZlciBkb2VzIG5vdCwgcmVkcmF3aW5nIGRlcGVuZHMgb24gd2hhdCB0aGUgY3VycmVudCBidWZmZXIgaXMuCisJICAgIChCcmV0dCBQZXJzaGluZyBTdGFobG1hbikKK1NvbHV0aW9uOiAgIFVzZSAic3luX2J1ZiIgaW5zdGVhZCBvZiAiY3VyYnVmIiB0byBnZXQgdGhlIGJfc3luX2NvbnRhaW5lZGluCisJICAgIGZsYWcuCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA2LjIuMDYzCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGN1c3RvbSBjb21wbGV0aW9uIGVuZCB1cCB3aXRoIG5vIG1hdGNoZXMuCitTb2x1dGlvbjogICBNYWtlIGNtZF9udW1maWxlcyBhbmQgY21kX2ZpbGVzIGxvY2FsIHRvIGNvbXBsZXRpb24gdG8gYXZvaWQgdGhhdAorCSAgICB0aGV5IGFyZSBvdmVyd3JpdHRlbiB3aGVuIEV4cGFuZE9uZSgpIGlzIGNhbGxlZCByZWN1cnNpdmVseSBieQorCSAgICBmX2dsb2IoKS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvcHJvdG8vZXhfZ2V0bG4ucHJvLAorCSAgICBzcmMvbWlzYzEuYywgc3JjL3N0cnVjdHMuaCwgc3JjL3RhZy5jCisKK1BhdGNoIDYuMi4wNjQKK1Byb2JsZW06ICAgIHJlc29sdmUoKSBvbmx5IGhhbmRsZXMgb25lIHN5bWJvbGljIGxpbmssIG5lZWQgdG8gcmVwZWF0IGl0IHRvCisJICAgIHJlc29sdmUgYWxsIG9mIHRoZW0uICBUaGVuIG5lZWQgdG8gc2ltcGxpZnkgdGhlIGZpbGUgbmFtZS4KK1NvbHV0aW9uOiAgIE1ha2UgcmVzb2x2ZSgpIHJlc29sdmUgYWxsIHN5bWJvbGljIGxpbmtzIGFuZCBzaW1wbGlmeSB0aGUgcmVzdWx0LgorCSAgICBBZGQgc2ltcGxpZnkoKSB0byBqdXN0IHNpbXBsaWZ5IGEgZmlsZSBuYW1lLiAgRml4IHRoYXQgdGVzdDQ5CisJICAgIGRvZXNuJ3Qgd29yayBpZiAvdG1wIGlzIGEgc3ltYm9saWMgbGluay4gIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9ldmFsLnR4dCwgc3JjL2V2YWwuYywgc3JjL3RhZy5jLAorCSAgICBzcmMvdGVzdGRpci90ZXN0NDkudmltCisKK1BhdGNoIDYuMi4wNjUKK1Byb2JsZW06ICAgICI6d2luZG8gMTIzIiBvbmx5IHVwZGF0ZXMgb3RoZXIgd2luZG93cyB3aGVuIGVudGVyaW5nIHRoZW0uCisJICAgIChXYWx0ZXIgQnJpc2NvZSkKK1NvbHV0aW9uOiAgIFVwZGF0ZSB0aGUgdG9wbGluZSBiZWZvcmUgZ29pbmcgdG8gdGhlIG5leHQgd2luZG93LgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjIuMDY2IChleHRyYSkKK1Byb2JsZW06ICAgIFJ1YnkgaW50ZXJmYWNlIGRvZXNuJ3Qgd29yayB3aXRoIFJ1YnkgMS44LjAuCitTb2x1dGlvbjogICBDaGFuZ2UgImRlZm91dCIgdG8gInN0ZG91dCIuIChBcm9uIEdyaWZpcykKKwkgICAgQ2hhbmdlIGR5bmFtaWMgbG9hZGluZy4gKFRhcm8gTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL2lmX3J1YnkuYywgc3JjL01ha2VfbXZjLm1haworCitQYXRjaCA2LjIuMDY3CitQcm9ibGVtOiAgICBXaGVuIHNlYXJjaGluZyBmb3IgYSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCBhIGNvbXBvc2luZyBjaGFyYWN0ZXIKKwkgICAgdGhlIGNvbW1hbmQgbGluZSBpc24ndCBkcmF3biBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIERvbid0IGNvdW50IHRoZSBzcGFjZSB0byBkcmF3IHRoZSBjb21wb3NpbmcgY2hhcmFjdGVyIG9uIGFuZAorCSAgICBhZGp1c3QgdGhlIGN1cnNvciBjb2x1bW4gYWZ0ZXIgZHJhd2luZyB0aGUgc3RyaW5nLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMi4wNjgKK1Byb2JsZW06ICAgIEV2ZW50cyBmb3IgdGhlIG5ldGJlYW5zIGludGVyZmFjZSB0aGF0IGluY2x1ZGUgYSBmaWxlIG5hbWUgd2l0aAorCSAgICBzcGVjaWFsIGNoYXJhY3RlcnMgZG9uJ3Qgd29yayBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIFVzZSBuYl9xdW90ZSgpIG9uIHRoZSBmaWxlIG5hbWUuIChTZXJnZXkgS2hvcmV2KQorRmlsZXM6CSAgICBzcmMvbmV0YmVhbnMuYworCitQYXRjaCA2LjIuMDY5IChhZnRlciA2LjIuMDY0KQorUHJvYmxlbTogICAgVW51c2VkIHZhcmlhYmxlcyAibGltaXQiIGFuZCAibmV3X3N0IiBhbmQgdW51c2VkIGxhYmVsICJmYWlsIiBpbgorCSAgICBzb21lIHNpdHVhdGlvbi4gKEJpbGwgTWNDYXJ0aHkpCitTb2x1dGlvbjogICBQdXQgdGhlIGRlY2xhcmF0aW9ucyBpbnNpZGUgYW4gI2lmZGVmLiAoU2VydmF0aXVzIEJyYW5kdCkKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL3RhZy5jCisKK1BhdGNoIDYuMi4wNzAgKGFmdGVyIDYuMi4wNjkpCitQcm9ibGVtOiAgICBTdGlsbCB1bnVzZWQgdmFyaWFibGUgIm5ld19zdCIuIChCaWxsIE1jQ2FydGh5KQorU29sdXRpb246ICAgTW92ZSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHJpZ2h0IGJsb2NrIHRoaXMgdGltZS4KK0ZpbGVzOgkgICAgc3JjL3RhZy5jCisKK1BhdGNoIDYuMi4wNzEKK1Byb2JsZW06ICAgICdzdGF0dXNsaW5lJyBjYW4gb25seSBjb250YWluIDUwICUgaXRlbXMuIChBbnRvbnkgU2NyaXZlbikKK1NvbHV0aW9uOiAgIEFsbG93IDgwIGl0ZW1zIGFuZCBtZW50aW9uIGl0IGluIHRoZSBkb2NzLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb24udHh0LCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjA3MgorUHJvYmxlbTogICAgV2hlbiB1c2luZyBleHByZXNzaW9uIGZvbGRpbmcsIGZvbGRleHByKCkgbW9zdGx5IHJldHVybnMgLTEgZm9yCisJICAgIHRoZSBwcmV2aW91cyBsaW5lLCB3aGljaCBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gd3JpdGUgYSBmb2xkCisJICAgIGV4cHJlc3Npb24uCitTb2x1dGlvbjogICBNYWtlIHRoZSBsZXZlbCBvZiB0aGUgcHJldmlvdXMgbGluZSBhdmFpbGFibGUgd2hpbGUgc3RpbGwgbG9va2luZworCSAgICBmb3IgdGhlIGVuZCBvZiBhIGZvbGQuCitGaWxlczoJICAgIHNyYy9mb2xkLmMKKworUGF0Y2ggNi4yLjA3MworUHJvYmxlbTogICAgV2hlbiBhZGRpbmcgZGV0ZWN0aW9uIG9mIGEgc3BlY2lmaWMgZmlsZXR5cGUgZm9yIGEgcGx1Z2luIHlvdSBuZWVkCisJICAgIHRvIGVkaXQgImZpbGV0eXBlLnZpbSIuCitTb2x1dGlvbjogICBTb3VyY2UgZmlsZXMgZnJvbSB0aGUgImZ0ZGV0ZWN0IiBkaXJlY3RvcnksIHNvIHRoYXQgYSBmaWxldHlwZQorCSAgICBkZXRlY3Rpb24gcGx1Z2luIG9ubHkgbmVlZHMgdG8gYmUgZHJvcHBlZCBpbiBhIGRpcmVjdG9yeS4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZmlsZXR5cGUudHh0LCBydW50aW1lL2RvYy91c3JfMDUudHh0LAorCSAgICBydW50aW1lL2RvYy91c3JfNDEudHh0LCBydW50aW1lL2ZpbGV0eXBlLnZpbQorCitQYXRjaCA2LjIuMDc0CitQcm9ibGVtOiAgICBXYXJuaW5ncyB3aGVuIGNvbXBpbGluZyB0aGUgUHl0aG9uIGludGVyZmFjZS4gKEFqaXQgVGhha2thcikKK1NvbHV0aW9uOiAgIFVzZSBBTlNJIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMi4wNzUKK1Byb2JsZW06ICAgIFdoZW4gdGhlIHRlbXAgZmlsZSBmb3Igd3JpdGluZyB2aW1pbmZvIGNhbid0IGJlIHVzZWQgIk5VTEwiCisJICAgIGFwcGVhcnMgaW4gdGhlIGVycm9yIG1lc3NhZ2UuIChCZW4gTGF2ZW5kZXIpCitTb2x1dGlvbjogICBQcmludCB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIHdoZW4gdGhlcmUgaXMgbm8gdGVtcCBmaWxlIG5hbWUuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4yLjA3NgorUHJvYmxlbTogICAgVGhlIHRhZ3MgbGlzdGVkIGZvciBjc2NvcGUgYXJlIGluIHRoZSB3cm9uZyBvcmRlci4gKEpvaGFubmVzCisJICAgIFN0ZXplbmJhY2gpCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIHJlb3JkZXJpbmcgb2YgdGFncyBmb3IgdGhlIGN1cnJlbnQgZmlsZS4gKFNlcmdleQorCSAgICBLaG9yZXYpCitGaWxlczoJICAgIHNyYy9pZl9jc2NvcGUuYworCitQYXRjaCA2LjIuMDc3CitQcm9ibGVtOiAgICBXaGVuIGEgdXNlciBmdW5jdGlvbiBzcGVjaWZpZXMgY3VzdG9tIGNvbXBsZXRpb24sIHRoZSBmdW5jdGlvbgorCSAgICBnZXRzIGEgemVybyBhcmd1bWVudCBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZyB3aGVuIHRoZXJlIGlzIG5vCisJICAgIHdvcmQgYmVmb3JlIHRoZSBjdXJzb3IuIChQcmViZW4gR3VsZGJlcmcpCitTb2x1dGlvbjogICBEb24ndCBjb252ZXJ0IGFuIGVtcHR5IHN0cmluZyB0byBhIHplcm8uCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4yLjA3OAorUHJvYmxlbTogICAgIm1ha2UgdGVzdCIgZG9lc24ndCB3b3JrIGlmIFZpbSB3YXNuJ3QgY29tcGlsZWQgeWV0LiAoRWQgQXZpcykKK1NvbHV0aW9uOiAgIEJ1aWxkIFZpbSBiZWZvcmUgcnVubmluZyB0aGUgdGVzdHMuCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA2LjIuMDc5CitQcm9ibGVtOiAgICAiOncgKytlbmM9dXRmLTggIWNtZCIgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIHRoZSAiKysiIGFyZ3VtZW50IGJlZm9yZSB0aGUgIiEiLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjIuMDgwCitQcm9ibGVtOiAgICBXaGVuICd0X3RpJyBpcyBub3QgZW1wdHkgYnV0IGRvZXNuJ3Qgc3dhcCBzY3JlZW5zLCB1c2luZyAiWloiIGluCisJICAgIGFuIHVubW9kaWZpZWQgZmlsZSBkb2Vzbid0IGNsZWFyIHRoZSBsYXN0IGxpbmUuCitTb2x1dGlvbjogICBDYWxsIG1zZ19jbHJfZW9zKCkgd2hlbiBuZWVkZWQuIChNaWNoYWVsIFNjaHJvZWRlcikKK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMDgxCitQcm9ibGVtOiAgICBQcm9ibGVtIHdoZW4gdXNpbmcgYSBsb25nIG11bHRpYnl0ZSBzdHJpbmcgZm9yIHRoZSBzdGF0dXNsaW5lLgorU29sdXRpb246ICAgVXNlIHRoZSByaWdodCBwb2ludGVyIHRvIGdldCB0aGUgY2VsbCBzaXplLiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4yLjA4MgorUHJvYmxlbTogICAgQ2FuJ3QgY29tcGlsZSB3aXRoIFBlcmwgNS44LjEuCitTb2x1dGlvbjogICBSZW5hbWUgImVfbnVtYmVyIiB0byAiZV9udW1iZXJfZXhwIi4gKFNhc2NoYSBCbGFuaykKK0ZpbGVzOgkgICAgc3JjL2RpZ3JhcGguYywgc3JjL2dsb2JhbHMuaAorCitQYXRjaCA2LjIuMDgzCitQcm9ibGVtOiAgICBXaGVuIGEgY29tcGlsZXIgdXNlcyBeXl5eIHRvIG1hcmsgYSB3b3JkIHRoZSBpbmZvcm1hdGlvbiBpcyBub3QKKwkgICAgdmlzaWJsZSBpbiB0aGUgcXVpY2tmaXggd2luZG93LiAoU3Jpa2FudGggU2Fua2FyYW4pCitTb2x1dGlvbjogICBEb24ndCByZW1vdmUgdGhlIGluZGVudCBmb3IgYSBsaW5lIHRoYXQgaXMgbm90IHJlY29nbml6ZWQgYXMgYW4KKwkgICAgZXJyb3IgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL3F1aWNrZml4LmMKKworUGF0Y2ggNi4yLjA4NAorUHJvYmxlbTogICAgImdfIiBpbiBWaXN1YWwgbW9kZSBhbHdheXMgZ29lcyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBsaW5lLgorCSAgICAoSmVhbi1SZW5lIERhdmlkKQorU29sdXRpb246ICAgSWdub3JlIHRoZSBOVUwgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMi4wODUKK1Byb2JsZW06ICAgICI6dmVyYm9zZSBzZXQgdHMiIGRvZXNuJ3Qgc2F5IGFuIG9wdGlvbiB3YXMgc2V0IHdpdGggYSAiLWMiIG9yCisJICAgICItLWNtZCIgYXJndW1lbnQuCitTb2x1dGlvbjogICBSZW1lbWJlciB0aGUgb3B0aW9uIHdhcyBzZXQgZnJvbSBhIFZpbSBhcmd1bWVudC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYywgc3JjL2V4X2NtZHMyLmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMDg2CitQcm9ibGVtOiAgICAieyIgYW5kICJ9IiBzdG9wIGluc2lkZSBhIGNsb3NlZCBmb2xkLgorU29sdXRpb246ICAgT25seSBzdG9wIG9uY2UgaW5zaWRlIGEgY2xvc2VkIGZvbGQuIChTdGVwaGVuIFJpZWhtKQorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4yLjA4NworUHJvYmxlbTogICAgQ1RSTC1eIGRvZXNuJ3QgdXNlIHRoZSAnY29uZmlybScgb3B0aW9uLiAgU2FtZSBwcm9ibGVtIHdpdGgKKwkgICAgIjpibmV4dCIuIChZYWtvdiBMZXJuZXIpCitTb2x1dGlvbjogICBQdXQgdXAgYSBkaWFsb2cgZm9yIGEgY2hhbmdlZCBmaWxlIHdoZW4gJ2NvbmZpcm0nIGlzIHNldCBpbiBtb3JlCisJICAgIHNpdHVhdGlvbnMuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjIuMDg4CitQcm9ibGVtOiAgICBXaGVuICdzaWRlc2Nyb2xsb2ZmJyBpcyBzZXQgJ3Nob3dtYXRjaCcgZG9lc24ndCB3b3JrIGNvcnJlY3RseSBpZgorCSAgICB0aGUgbWF0Y2ggaXMgbGVzcyB0aGFuICdzaWRlc2Nyb2xsb2ZmJyBvZmYgZnJvbSB0aGUgc2lkZSBvZiB0aGUKKwkgICAgd2luZG93LiAgKFJvbGFuZCBTdGFobikKK1NvbHV0aW9uOiAgIFNldCAnc2lkZXNjcm9sbG9mZicgdG8gemVybyB3aGlsZSBkaXNwbGF5aW5nIHRoZSBtYXRjaC4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuMi4wODkKK1Byb2JsZW06ICAgICI6c2V0IGlzays9IiBhZGRzIGEgY29tbWEuIChNYXJrIFdhZ2dvbmVyKQorU29sdXRpb246ICAgRG9uJ3QgYWRkIGEgY29tbWEgd2hlbiB0aGUgYWRkZWQgdmFsdWUgaXMgZW1wdHkuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuMDkwIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBNaW5nVyBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgI3ByYWdtYXMuIChCaWxsIE1jQ2FydGh5KQorU29sdXRpb246ICAgUHV0IGFuICNpZmRlZiBhcm91bmQgdGhlICNwcmFnbWFzLgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjIuMDkxCitQcm9ibGVtOiAgICBXaGVuIGFuIGF1dG9jb21tYW5kIGlzIHRyaWdnZXJlZCB3aGVuIGEgZmlsZSBpcyBkcm9wcGVkIG9uIFZpbSBhbmQKKwkgICAgaXQgcHJvZHVjZXMgb3V0cHV0LCBtZXNzYWdlcyBmcm9tIGEgZm9sbG93aW5nIGNvbW1hbmQgbWF5IGJlCisJICAgIHNjcm9sbGVkIHVuZXhwZWN0ZWRseS4gKERhdmlkIFJlbm5hbGxzKQorU29sdXRpb246ICAgU2F2ZSBhbmQgcmVzdG9yZSBtc2dfc2Nyb2xsIGluIGhhbmRsZV9kcm9wKCkuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi4wOTIKK1Byb2JsZW06ICAgIEludmFsaWQgaXRlbXMgYXBwZWFyIGluIHRoZSBoZWxwIGZpbGUgdGFncy4gKEFudG9uaW8gQ29sb21ibykKK1NvbHV0aW9uOiAgIE9ubHkgYWNjZXB0IHRhZ3Mgd2l0aCB3aGl0ZSBzcGFjZSBiZWZvcmUgdGhlIGZpcnN0ICIqIi4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZG9jdGFncy5jLCBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMi4wOTMKK1Byb2JsZW06ICAgICI6bm5vcmVtZW51IiBhbHNvIGRlZmluZXMgbWVudSBmb3IgVmlzdWFsIG1vZGUuIChLbGF1cyBCb3NhdSkKK1NvbHV0aW9uOiAgIENoZWNrIHRoZSBzZWNvbmQgY29tbWFuZCBjaGFyYWN0ZXIgZm9yIGFuICJvIiwgbm90IHRoZSB0aGlyZC4KK0ZpbGVzOgkgICAgc3JjL21lbnUuYworCitQYXRjaCA2LjIuMDk0CitQcm9ibGVtOiAgICBDYW4ndCBjb21waWxlIHdpdGggR1RLIGFuZCB0aW55IGZlYXR1cmVzLgorU29sdXRpb246ICAgSW5jbHVkZSBoYW5kbGVfZHJvcCgpIGFuZCB2aW1fY2hkaXJmaWxlKCkgd2hlbiBGRUFUX0RORCBpcyBkZWZpbmVkLgorCSAgICBEbyBub3QgdHJ5IHRvIHNwbGl0IHRoZSB3aW5kb3cuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvbWlzYzIuYworCitQYXRjaCA2LjIuMDk1CitQcm9ibGVtOiAgICBUaGUgbWVzc2FnZSAiQ2Fubm90IGdvIHRvIGJ1ZmZlciB4IiBpcyBjb25mdXNpbmcgZm9yICI6YnVmIDYiLgorCSAgICAoRnJhbnMgRW5nbGljaCkKK1NvbHV0aW9uOiAgIE1ha2UgaXQgIkJ1ZmZlciB4IGRvZXMgbm90IGV4aXN0Ii4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMi4wOTYKK1Byb2JsZW06ICAgIFdpbjMyOiAiOmxldCBAKiA9ICcnIiBwdXQgYSBuZXdsaW5lIG9uIHRoZSBjbGlwYm9hcmQuIChLbGF1cworCSAgICBCb3NhdSkKK1NvbHV0aW9uOiAgIFB1dCB6ZXJvIGJ5dGVzIG9uIHRoZSBjbGlicG9hcmQgZm9yIGFuIGVtcHR5IHN0cmluZy4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMi4wOTcKK1Byb2JsZW06ICAgIFNldHRpbmcgb3IgcmVzZXR0aW5nICdpbnNlcnRtb2RlJyBpbiBhIEJ1ZkVudGVyIGF1dG9jb21tYW5kCisJICAgIGRvZXNuJ3QgYWx3YXlzIGhhdmUgaW1tZWRpYXRlIGVmZmVjdC4gKE5hZ2dlcikKK1NvbHV0aW9uOiAgIFdoZW4gJ2luc2VydG1vZGUnIGlzIHNldCwgc2V0IG5lZWRfc3RhcnRfaW5zZXJ0bW9kZSwgd2hlbiBpdCdzCisJICAgIHJlc2V0IHNldCBzdG9wX2luc2VydF9tb2RlLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4yLjA5OCAoYWZ0ZXIgNi4yLjA5NykKK1Byb2JsZW06ICAgIENhbid0IGJ1aWxkIFZpbSB3aXRoIHRpbnkgZmVhdHVyZXMuIChDaHJpc3RpYW4gSi4gUm9iaW5zb24pCitTb2x1dGlvbjogICBEZWNsYXJlIHN0b3BfaW5zZXJ0X21vZGUgYWx3YXlzLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvZ2xvYmFscy5oCisKK1BhdGNoIDYuMi4wOTkgKGV4dHJhKQorUHJvYmxlbTogICAgVGVzdCA0OSBmYWlscy4gKE1pa29sYWogTWFjaG93c2tpKQorU29sdXRpb246ICAgVGhlIFBvbGlzaCB0cmFuc2xhdGlvbiBtdXN0IG5vdCBjaGFuZ2UgIkUxMTYiIHRvICJSMTE2Ii4KK0ZpbGVzOgkgICAgc3JjL3BvL3BsLnBvCisKK1BhdGNoIDYuMi4xMDAKK1Byb2JsZW06ICAgICJtYWtlIHByb3RvIiBmYWlscyB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIFBlcmwgaW50ZXJmYWNlLgorU29sdXRpb246ICAgUmVtb3ZlICItZm5vLioiIGZyb20gUEVSTF9DRkxBR1MsIGNwcm90byBzZWVzIGl0IGFzIGl0cyBvcHRpb24uCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjIuMTAxCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHN5bnRheCBmb2xkaW5nLCBvcGVuaW5nIGEgZmlsZSBzbG93cyBkb3duIGEgbG90IHdoZW4KKwkgICAgaXQncyBzaXplIGluY3JlYXNlcyBieSBvbmx5IDIwJS4gKEdhcnkgSm9obnNvbikKK1NvbHV0aW9uOiAgIFRoZSBhcnJheSB3aXRoIGNhY2hlZCBzeW50YXggc3RhdGVzIGlzIGxlYWtpbmcgZW50cmllcy4gIEFmdGVyCisJICAgIGNsZWFuaW5nIHVwIHRoZSBsaXN0IG9idGFpbiB0aGUgY3VycmVudCBlbnRyeSBhZ2Fpbi4KK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMi4xMDIKK1Byb2JsZW06ICAgIFRoZSBtYWNyb3MgZXF1YWwoKSBhbmQgQ1IgY29uZmxpY3Qgd2l0aCBhIENhcmJvbiBoZWFkZXIgZmlsZS4KK1NvbHV0aW9uOiAgIFJlbmFtZSBlcXVhbCgpIHRvIGVxdWFscG9zKCkuICBSZW5hbWUgQ1IgdG8gQ0FSLgorCSAgICBEbyB0aGlzIGluIHRoZSBub24tZXh0cmEgZmlsZXMgb25seS4KK0ZpbGVzOgkgICAgc3JjL2FzY2lpLmgsIHNyYy9idWZmZXIuYywgc3JjL2NoYXJzZXQuYywgc3JjL2VkaXQuYywgc3JjL2V2YWwuYywKKwkgICAgc3JjL2V4X2NtZHMuYywgc3JjL2V4X2NtZHMyLmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvZmlsZWlvLmMsCisJICAgIHNyYy9nZXRjaGFyLmMsIHNyYy9ndWkuYywgc3JjL2d1aV9hdGhlbmEuYywgc3JjL2d1aV9ndGtfeDExLmMsCisJICAgIHNyYy9ndWlfbW90aWYuYywgc3JjL21hY3Jvcy5oLCBzcmMvbWFyay5jLCBzcmMvbWVzc2FnZS5jLAorCSAgICBzcmMvbWlzYzEuYywgc3JjL21pc2MyLmMsIHNyYy9ub3JtYWwuYywgc3JjL29wcy5jLCBzcmMvb3NfdW5peC5jLAorCSAgICBzcmMvcmVnZXhwLmMsIHNyYy9zZWFyY2guYywgc3JjL3VpLmMsIHNyYy93b3Jrc2hvcC5jCisKK1BhdGNoIDYuMi4xMDMgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlIG1hY3JvcyBlcXVhbCgpIGFuZCBDUiBjb25mbGljdCB3aXRoIGEgQ2FyYm9uIGhlYWRlciBmaWxlLgorU29sdXRpb246ICAgUmVuYW1lIGVxdWFsKCkgdG8gZXF1YWxwb3MoKS4gIFJlbmFtZSBDUiB0byBDQVIuCisJICAgIERvIHRoaXMgaW4gdGhlIGV4dHJhIGZpbGVzIG9ubHkuCitGaWxlczoJICAgIHNyYy9ndWlfcGhvdG9uLmMsIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4yLjEwNAorUHJvYmxlbTogICAgVW5tYXRjaGVkIGJyYWNlcyBpbiB0aGUgdGFibGUgd2l0aCBvcHRpb25zLgorU29sdXRpb246ICAgTW92ZSB0aGUgIn0sIiBvdXRzaWRlIG9mIHRoZSAjaWZkZWYuIChZYWtvdiBMZXJuZXIpCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuMTA1CitQcm9ibGVtOiAgICBXaGVuIHRoZSBjdXJzb3IgaXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHdoZW4gY2FsbGluZworCSAgICBnZXRfY19pbmRlbnQoKSBhIGNyYXNoIG1pZ2h0IG9jY3VyLgorU29sdXRpb246ICAgRG9uJ3QgbG9vayBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUuIChOSiBWZXJlbmluaSkKK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4yLjEwNgorUHJvYmxlbTogICAgVGFnIHNlYXJjaGluZyBnZXRzIHN0dWNrIG9uIGEgdmVyeSBsb25nIGxpbmUgaW4gdGhlIHRhZ3MgZmlsZS4KK1NvbHV0aW9uOiAgIFdoZW4gc2tpcHBpbmcgYmFjayB0byBzZWFyY2ggdGhlIGZpcnN0IG1hdGNoaW5nIHRhZyByZW1lbWJlciB0aGUKKwkgICAgb2Zmc2V0IHdoZXJlIHNlYXJjaGluZyBzdGFydGVkIGxvb2tpbmcgZm9yIGEgbGluZSBicmVhay4KK0ZpbGVzOgkgICAgc3JjL3RhZy5jCisKK1BhdGNoIDYuMi4xMDcgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlIE5ldEJlYW5zIGludGVyZmFjZSBjYW5ub3QgYmUgdXNlZCBvbiBXaW4zMi4KK1NvbHV0aW9uOiAgIEFkZCBzdXBwb3J0IGZvciB0aGUgTmV0QmVhbnMgZm9yIFdpbjMyLiAgQWRkIHN1cHBvcnQgZm9yIHJlYWRpbmcKKwkgICAgWFBNIGZpbGVzIG9uIFdpbjMyLiAgQWxzbyBmaXhlcyB0aGF0IGEgc2lnbiBpY29uIHdpdGggYSBzcGFjZSBpbgorCSAgICB0aGUgZmlsZSBuYW1lIGRpZCBub3Qgd29yayB0aHJvdWdoIHRoZSBOZXRCZWFucyBpbnRlcmZhY2UuCisJICAgIChTZXJnZXkgS2hvcmV2KQorCSAgICBBbHNvOiBhdm9pZCByZXBlYXRpbmcgZXJyb3IgbWVzc2FnZXMgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0LgorRmlsZXM6CSAgICBNYWtlZmlsZSwgcnVudGltZS9kb2MvbmV0YmVhbnMudHh0LCBzcmMvTWFrZV9iYzUubWFrLAorCSAgICBzcmMvTWFrZV9jeWcubWFrLCBzcmMvTWFrZV9taW5nLm1haywgc3JjL01ha2VfbXZjLm1haywKKwkgICAgc3JjL2JpZ3ZpbS5iYXQsIHNyYy9mZWF0dXJlLmgsIHNyYy9ndWlfYmV2YWwuYywgc3JjL2d1aV9iZXZhbC5oLAorCSAgICBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jLCBzcmMvbWVudS5jLCBzcmMvbmJkZWJ1Zy5jLAorCSAgICBzcmMvbmJkZWJ1Zy5oLCBzcmMvbmV0YmVhbnMuYywgc3JjL29zX21zd2luLmMsIHNyYy9vc193aW4zMi5oLAorCSAgICBzcmMvcHJvdG8vZ3VpX2JldmFsLnBybywgc3JjL3Byb3RvL2d1aV93MzIucHJvLAorCSAgICBzcmMvcHJvdG8vbmV0YmVhbnMucHJvLCBzcmMvcHJvdG8uaCwgc3JjL3ZlcnNpb24uYywgc3JjL3ZpbS5oLAorCSAgICBzcmMveHBtX3czMi5jLCBzcmMveHBtX3czMi5oCisKK1BhdGNoIDYuMi4xMDgKK1Byb2JsZW06ICAgIENyYXNoIHdoZW4gZ2l2aW5nIGEgbWVzc2FnZSBhYm91dCBpZ25vcmluZyBjYXNlIGluIGEgdGFnLiAoTWFuZnJlZAorCSAgICBLdWVobikKK1NvbHV0aW9uOiAgIFVzZSBhIGxvbmdlciBidWZmZXIgZm9yIHRoZSBtZXNzYWdlLgorRmlsZXM6CSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjEwOQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZ3Mgd2l0aCB2YXJpb3VzIEFtaWdhIGNvbXBpbGVycy4KK1NvbHV0aW9uOiAgIEFkZCB0eXBlY2FzdCwgcHJvdG90eXBlcywgZXQgYWwuIHRoYXQgYXJlIGFsc28gdXNlZnVsIGZvciBvdGhlcgorCSAgICBzeXN0ZW1zLiAgKEZsYXZpbyBTdGFuY2hpbmEpCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9vcHMuYworCitQYXRjaCA2LjIuMTEwCitQcm9ibGVtOiAgICBXaGVuICRMQU5HIGluY2x1ZGVzIHRoZSBlbmNvZGluZywgYSBtZW51IHdpdGhvdXQgYW4gZW5jb2RpbmcgbmFtZQorCSAgICBpcyBub3QgZm91bmQuCitTb2x1dGlvbjogICBBbHNvIGxvb2sgZm9yIGEgbWVudSBmaWxlIHdpdGhvdXQgYW55IGVuY29kaW5nLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMi4xMTEKK1Byb2JsZW06ICAgIEVuY29kaW5nICJjcDEyNTEiIGlzIG5vdCByZWNvZ25pemVkLgorU29sdXRpb246ICAgQWRkICJjcDEyNTEiIHRvIHRoZSB0YWJsZSBvZiBlbmNvY2luZ3MuIChBbGV4ZXkgRnJvbG9mZikKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4yLjExMgorUHJvYmxlbTogICAgQWZ0ZXIgYXBwbHlpbmcgcGF0Y2hlcyB0ZXN0MzIgZmFpbHMuIChBbnRvbmlvIENvbG9tYm8pCitTb2x1dGlvbjogICBIYXZlICJtYWtlIGNsZWFuIiBpbiB0aGUgdGVzdGRpciBkZWxldGUgKi5yZWogYW5kICoub3JpZyBmaWxlcy4KKwkgICAgVXNlIHRoaXMgd2hlbiBkb2luZyAibWFrZSBjbGVhbiIgaW4gdGhlIHNyYyBkaXJlY3RvcnkuCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZSwgc3JjL3Rlc3RkaXIvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjExMworUHJvYmxlbTogICAgVXNpbmcgIjpzdGFydGluc2VydCIgYWZ0ZXIgIiQiIHdvcmtzIGxpa2UgImEiIGluc3RlYWQgb2YgImkiLgorCSAgICAoQWppdCBUaGFra2FyKQorU29sdXRpb246ICAgUmVzZXQgIndfY3Vyc3dhbnQiIGZvciAiOnN0YXJ0aW5zZXJ0IiBhbmQgcmVzZXQgb19lb2wgaW4gZWRpdCgpLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjIuMTE0CitQcm9ibGVtOiAgICBXaGVuIHN0ZG91dCBpcyBwaXBlZCB0aHJvdWdoICJ0ZWUiLCB0aGUgc2l6ZSBvZiB0aGUgc2NyZWVuIG1heSBub3QKKwkgICAgYmUgY29ycmVjdC4KK1NvbHV0aW9uOiAgIFVzZSBzdGRpbiBpbnN0ZWFkIG9mIHN0ZG91dCBmb3IgaW9jdGwoKSB3aGVuIHN0ZGluIGlzIGEgdHR5IGFuZAorCSAgICBzdGRvdXQgaXNuJ3QuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4yLjExNSAoZXh0cmEpCitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5ncyB3aXRoIHZhcmlvdXMgQW1pZ2EgY29tcGlsZXJzLgorU29sdXRpb246ICAgQWRkIHR5cGVjYXN0LCBwcm90b3R5cGVzLCBldCBhbC4gIFRob3NlIGNoYW5nZXMgdGhhdCBhcmUKKwkgICAgQW1pZ2Etc3BlY2lmaWMuIChGbGF2aW8gU3RhbmNoaW5hKQorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9tZW1maWxlLmMsIHNyYy9vc19hbWlnYS5jLCBzcmMvb3NfYW1pZ2EuaCwKKwkgICAgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMi4xMTYgKGV4dHJhKQorUHJvYmxlbTogICAgR2VybWFuIGtleWJvYXJkIHdpdGggTnVtbG9jayBzZXQgZGlmZmVyZW50IGZyb20gc3lzdGVtIHN0YXJ0dXAKKwkgICAgY2F1c2VzIHByb2JsZW1zLgorU29sdXRpb246ICAgSWdub3JlIGtleXMgd2l0aCBjb2RlIDB4ZmYuIChIZWxtdXQgU3RpZWdsZXIpCitGaWxlczoJICAgIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4yLjExNworUHJvYmxlbTogICAgQnJlYWtwb2ludHMgaW4gbG9vcHMgb2Ygc291cmNlZCBmaWxlcyBhbmQgZnVuY3Rpb25zIGFyZSBub3QKKwkgICAgZGV0ZWN0ZWQuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBicmVha3BvaW50cyB3aGVuIHVzaW5nIGxpbmVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlYWQuCisJICAgIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvZXhfY21kczIuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9wcm90by9ldmFsLnBybywKKwkgICAgc3JjL3Byb3RvL2V4X2NtZHMyLnBybworCitQYXRjaCA2LjIuMTE4IChleHRyYSkKK1Byb2JsZW06ICAgIE1hYzogQ29tcGlsaW5nIGlzIGRvbmUgaW4gYSBub24tc3RhbmRhcmQgd2F5LgorU29sdXRpb246ICAgVXNlIHRoZSBVbml4IG1ldGhvZCBmb3IgTWFjIE9TIFgsIHdpdGggYXV0b2NvbmYuICBBZGQgIkNBUkJPTkdVSSIKKwkgICAgdG8gTWFrZWZpbGUgYW5kIGNvbmZpZ3VyZS4gKEVyaWMgS293KQorCSAgICBNb3ZlIGEgZmV3IHByb3RvdHlwZXMgZnJvbSBvc19tYWMucHJvIHRvIGd1aV9tYWMucHJvLgorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUsIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwKKwkgICAgc3JjL2NvbmZpZy5tay5pbiwgc3JjL2d1aV9tYWMuYywgc3JjL29zX21hYy5oLCBzcmMvb3NfbWFjb3N4LmMsCisJICAgIHNyYy9wcm90by9ndWlfbWFjLnBybywgc3JjL3Byb3RvL29zX21hYy5wcm8sCisJICAgIHNyYy9pbmZwbGlzdC54bWwsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMTE5IChhZnRlciA2LjIuMTA3KQorUHJvYmxlbTogICAgV2hlbiBwYWNraW5nIHRoZSBNUy1XaW5kb3dzIGFyY2hpdmVzIGEgZmV3IGZpbGVzIGFyZSBtaXNzaW5nLgorCSAgICAoR3VvcGVuZyBXZW4pCitTb2x1dGlvbjogICBBZGQgZ3VpX2JldmFsLiogdG8gdGhlIGxpc3Qgb2YgZ2VuZXJpYyBzb3VyY2UgZmlsZXMuCitGaWxlczoJICAgIE1ha2VmaWxlCisKK1BhdGNoIDYuMi4xMjAKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogVGhlIGNvbnNvbGUgZGlhbG9ncyBhcmUgbm90IHN1cHBvcnRlZCBvbiBNUy1XaW5kb3dzLAorCSAgICBkaXNhYmxpbmcgdGhlICdjJyBmbGFnIG9mICdndWlvcHRpb25zJy4gKFNlcnZhdGl1cyBCcmFuZHQpCitTb2x1dGlvbjogICBEZWZpbmUgRkVBVF9DT05fRElBTE9HIGFsc28gZm9yIEdVSS1vbmx5IGJ1aWxkcy4KK0ZpbGVzOgkgICAgc3JjL2ZlYXR1cmUuaAorCitQYXRjaCA2LjIuMTIxIChhZnRlciA2LjIuMTE4KQorUHJvYmxlbTogICAgTm90IGFsbCBtYWtlIHByb2dyYW1zIHN1cHBvcnQgIis9Ii4gKENoYXJsZXMgQ2FtcGJlbGwpCitTb2x1dGlvbjogICBVc2UgYSBub3JtYWwgYXNzaWdubWVudC4KK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDYuMi4xMjIgKGFmdGVyIDYuMi4xMTkpCitQcm9ibGVtOiAgICBOb3QgYWxsIHNoZWxscyBjYW4gZXhwYW5kIFtefl0uICBGaWxlIG1pc3NpbmcuICAoR3VvcGVuZyBXZW4pCitTb2x1dGlvbjogICBVc2UgYSBzaW1wbGVyIHBhdHRlcm4uICBBZGQgdGhlIEFhcCByZWNpcGUgZm9yIHRoZSBtYXplIHByb2dyYW0KKwkgICAgYW5kIGEgY2xlYW4gdmVyc2lvbiBvZiB0aGUgc291cmNlIGNvZGUuCitGaWxlczoJICAgIE1ha2VmaWxlLCBydW50aW1lL21hY3Jvcy9tYXplL01ha2VmaWxlLAorCSAgICBydW50aW1lL21hY3Jvcy9tYXplL1JFQURNRS50eHQsIHJ1bnRpbWUvbWFjcm9zL21hemUvbWFpbi5hYXAsCisJICAgIHJ1bnRpbWUvbWFjcm9zL21hemUvbWF6ZWNsZWFuLmMKKworUGF0Y2ggNi4yLjEyMyAoYWZ0ZXIgNi4yLjExOCkKK1Byb2JsZW06ICAgIFJ1bm5pbmcgY29uZmlndXJlIGZhaWxzLiAoVG9ueSBMZW5laXMpCitTb2x1dGlvbjogICBDaGFuZ2UgIj09IiB0byAiPSIgZm9yIGEgdGVzdC4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMi4xMjQgKGFmdGVyIDYuMi4xMjEpKGV4dHJhKQorUHJvYmxlbTogICAgTWFjOiBSZWN1cnNpdmUgdXNlIG9mIE00RkxBR1MgY2F1c2VzIHByb2JsZW1zLiAgV2hlbiBydW5uaW5nIFZpbQorCSAgICBkaXJlY3RseSBpdCBjYW4ndCBmaW5kIHRoZSBydW50aW1lIGZpbGVzLiAgKEVtaWx5IEphY2tzb24pCisJICAgIFVzaW5nIEdOVSBjb25zdHJ1Y3RzIGNhdXNlcyB3YXJuaW5ncyB3aXRoIG90aGVyIG1ha2UgcHJvZ3JhbXMuCisJICAgIChSb25hbGQgU2NoaWxkKQorU29sdXRpb246ICAgVXNlIGFub3RoZXIgbmFtZSBmb3IgdGhlIE00RkxBR1MgdmFyaWFibGUuCisJICAgIERvbid0IHJlbW92ZSAiVmltLmFwcCIgZnJvbSB0aGUgcGF0aC4KKwkgICAgVXBkYXRlIHRoZSBleHBsYW5hdGlvbiBmb3IgY29tcGlsaW5nIG9uIHRoZSBNYWMuIChFcmljIEtvdykKKwkgICAgRG9uJ3QgdXNlICQoc2hlbGwgKSBhbmQgJChhZGRwcmVmaXggKS4KK0ZpbGVzOgkgICAgc3JjL0lOU1RBTExtYWMudHh0LCBzcmMvTWFrZWZpbGUsIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMi4xMjUgKGFmdGVyIDYuMi4xMDcpCitQcm9ibGVtOiAgICBUaGUgIndpbnNvY2syLmgiIGZpbGUgaXNuJ3QgYWx3YXlzIGF2YWlsYWJsZS4KK1NvbHV0aW9uOiAgIERvbid0IGluY2x1ZGUgdGhpcyBoZWFkZXIgZmlsZS4KK0ZpbGVzOgkgICAgc3JjL25ldGJlYW5zLmMKKworUGF0Y2ggNi4yLjEyNgorUHJvYmxlbTogICAgVHlwaW5nIENUUkwtQyBhdCBhIGNvbmZpcm0oKSBwcm9tcHQgZG9lc24ndCB0aHJvdyBhbiBleGNlcHRpb24uCitTb2x1dGlvbjogICBSZXNldCAibWFwcGVkX2N0cmxfYyIgaW4gZ2V0X2tleXN0cm9rZSgpLCBzbyB0aGF0ICJnb3RfaW50IiBpcyBzZXQKKwkgICAgaW4gX09uQ2hhcigpLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA2LjIuMTI3IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIGNvbnNvbGU6IFR5cGluZyBDVFJMLUMgZG9lc24ndCB0aHJvdyBhbiBleGNlcHRpb24uCitTb2x1dGlvbjogICBTZXQgZ290X2ludCBpbW1lZGlhdGVseSB3aGVuIENUUkwtQyBpcyB0eXBlZCwgZG9uJ3Qgd2FpdCBmb3IKKwkgICAgbWNoX2JyZWFrY2hlY2soKSBiZWluZyBjYWxsZWQuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMi4xMjggKGFmdGVyIDYuMi4xMTgpCitQcm9ibGVtOiAgICBzcmMvYXV0by9jb25maWd1cmUgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBzcmMvY29uZmlndXJlLmluLgorU29sdXRpb246ICAgVXNlIHRoZSBuZXdseSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdC4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlCisKK1BhdGNoIDYuMi4xMjkKK1Byb2JsZW06ICAgIFdoZW4gJ251bWJlcicgaXMgc2V0ICd3cmFwbWFyZ2luJyBkb2VzIG5vdCB3b3JrIFZpLWNvbXBhdGlibGUuCisJICAgIChZYXN1aGlybyBNYXRzdW1vdG8pCitTb2x1dGlvbjogICBSZWR1Y2UgdGhlIHRleHR3aWR0aCB3aGVuICdudW1iZXInIGlzIHNldC4gIEFsc28gZm9yICdmb2xkY29sdW1uJworCSAgICBhbmQgc2ltaWxhciB0aGluZ3MuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4yLjEzMCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBjb25zb2xlOiBXaGVuICdyZXN0b3Jlc2NyZWVuJyBpcyBub3Qgc2V0IGV4aXRpbmcgVmltIGNhdXNlcworCSAgICB0aGUgc2NyZWVuIHRvIGJlIGNsZWFyZWQuIChNaWNoYWVsIEEuIE1hbmdpbm8pCitTb2x1dGlvbjogICBEb24ndCBjbGVhciB0aGUgc2NyZWVuIHdoZW4gZXhpdGluZyBhbmQgJ3Jlc3RvcmVzY3JlZW4nIGlzbid0IHNldC4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4yLjEzMSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogRm9udCBoYW5kbGVzIGFyZSBsZWFrZWQuCitTb2x1dGlvbjogICBGcmVlIGl0YWxpYywgYm9sZCBhbmQgYm9sZC1pdGFsaWMgaGFuZGxlcyBiZWZvcmUgb3ZlcndyaXRpbmcgdGhlbS4KKwkgICAgKE1pY2hhZWwgV29va2V5KQorRmlsZXM6CSAgICBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMi4xMzIgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IGNvbnNvbGUgdmVyc2lvbiBkb2Vzbid0IHdvcmsgb24gbGF0ZXN0IFdpbmRvd3MgU2VydmVyIDIwMDMuCitTb2x1dGlvbjogICBDb3B5IDEyMDAwIGluc3RlYWQgb2YgMTUwMDAgY2VsbHMgYXQgYSB0aW1lIHRvIGF2b2lkIHJ1bm5pbmcgb3V0CisJICAgIG9mIG1lbW9yeS4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4yLjEzMworUHJvYmxlbTogICAgV2hlbiBzdGFydGluZyB0aGUgR1VJIGEgYm9ndXMgZXJyb3IgbWVzc2FnZSBhYm91dCAnaW1hY3RpdmF0ZWtleScKKwkgICAgbWF5IGJlIGdpdmVuLgorU29sdXRpb246ICAgT25seSBjaGVjayB0aGUgdmFsdWUgb2YgJ2ltYWN0aXZhdGVrZXknIHdoZW4gdGhlIEdVSSBpcyBydW5uaW5nLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMsIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuMTM0IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIHNjcm9sbGluZyBwYXJ0cyBvZiB0aGUgd2luZG93IGFyZSByZWRyYXduIHdoZW4gdGhpcworCSAgICBpc24ndCBuZWNlc3NhcnkuCitTb2x1dGlvbjogICBPbmx5IGludmFsaWRhdGUgcGFydHMgb2YgdGhlIHdpbmRvdyB3aGVuIHRoZXkgYXJlIG9ic2N1cmVkIGJ5CisJICAgIG90aGVyIHdpbmRvd3MuIChNaWNoYWVsIFdvb2tleSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjIuMTM1CitQcm9ibGVtOiAgICBBbiBpdGVtIDw+IGluIHRoZSAiOmNvbW1hbmQiIGFyZ3VtZW50IGlzIGludGVycHJldGVkIGFzIDxhcmdzPi4KK1NvbHV0aW9uOiAgIEF2b2lkIHRoYXQgPD4gaXMgcmVjb2duaXplZCBhcyA8YXJncz4uCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi4xMzYKK1Byb2JsZW06ICAgICI6ZSArK2VuYz1sYXRpbjEgbmV3ZmlsZSIgZG9lc24ndCBzZXQgJ2ZlbmMnIHdoZW4gdGhlIGZpbGUgZG9lc24ndAorCSAgICBleGlzdC4gIChNaXJvc2xhdyBEb2JyemFuc2tpLU5ldW1hbm4pCitTb2x1dGlvbjogICBTZXQgJ2ZpbGVlbmNvZGluZycgdG8gdGhlIHNwZWNpZmllZCBlbmNvZGluZyB3aGVuIGVkaXRpbmcgYSBmaWxlCisJICAgIHRoYXQgZG9lcyBub3QgZXhpc3QuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjIuMTM3CitQcm9ibGVtOiAgICAiZDpjbWQ8Q1I+IiBjYW5ub3QgYmUgcmVwZWF0ZWQgd2l0aCAiLiIuICBCcmVha3MgcmVwZWF0aW5nICJkJSIKKwkgICAgd2hlbiB1c2luZyB0aGUgbWF0Y2hpdCBwbHVnaW4uCitTb2x1dGlvbjogICBTdG9yZSB0aGUgY29tbWFuZCB0byBiZSByZXBlYXRlZC4gIFRoaXMgaXMgcmVzdHJpY3RlZCB0bworCSAgICBzaW5nbGUtbGluZSBjb21tYW5kcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9ub3JtYWwuYywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMi4xMzggKGV4dHJhKQorUHJvYmxlbTogICAgQ29tcGlsYXRpb24gcHJvYmxlbSBvbiBWTVMgd2l0aCBkeW5hbWljIGJ1ZmZlciBvbiB0aGUgc3RhY2suCitTb2x1dGlvbjogICBSZWFkIG9uZSBieXRlIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLCBzbyB0aGF0IHdlIGNhbgorCSAgICBjaGVjayBmb3IgdGhlIHN0cmluZyBsZW5ndGggd2l0aG91dCBhbiBleHRyYSBidWZmZXIuCitGaWxlczoJICAgIHNyYy9vc192bXMuYworCitQYXRjaCA2LjIuMTM5CitQcm9ibGVtOiAgICBDb2RlIGlzIHJlcGVhdGVkIGluIHRoZSB0d28gUGVybCBmaWxlcy4KK1NvbHV0aW9uOiAgIE1vdmUgY29tbW9uIGNvZGUgZnJvbSBpZl9wZXJsLnhzIGFuZCBpZl9wZXJsc2Zpby5jIHRvIHZpbS5oLgorCSAgICBBbHNvIGZpeCBhIHByb2JsZW0gd2l0aCBnZW5lcmF0aW5nIHByb3RvdHlwZXMuCitGaWxlczoJICAgIHNyYy9pZl9wZXJsLnhzLCBzcmMvaWZfcGVybHNmaW8uYywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMi4xNDAgKGFmdGVyIDYuMi4xMjEpCitQcm9ibGVtOiAgICBNYWM6IENvbXBpbGluZyB3aXRoIFB5dGhvbiBhbmQgUGVybCBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBBZGp1c3QgdGhlIGNvbmZpZ3VyZSBjaGVjayBmb3IgUHl0aG9uIHRvIHVzZSAiLWZyYW1ld29yayBQeXRob24iCisJICAgIGZvciBQeXRob24gMi4zIG9uIE1hYyBPUy9YLgorCSAgICBNb3ZlICItbGRsIiBhZnRlciAiRHluYUxvYWRlci5hIiBpbiB0aGUgbGluayBjb21tYW5kLgorCSAgICBDaGFuZ2UgInBlcmxsaWJzIiB0byAiUEVSTF9MSUJTIi4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlnLm1rLmluCisKK1BhdGNoIDYuMi4xNDEgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjOiBUaGUgYl9GU1NwZWMgZmllbGQgaXMgc29tZXRpbWVzIHVudXNlZC4KK1NvbHV0aW9uOiAgIENoYW5nZSB0aGUgI2lmZGVmIHRvIEZFQVRfQ1dfRURJVE9SIGFuZCBkZWZpbmVkIGl0IGluIGZlYXR1cmUuaAorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9ndWlfbWFjLmMsIHNyYy9zdHJ1Y3RzLmgsIHNyYy9mZWF0dXJlLmgKKworUGF0Y2ggNi4yLjE0MiAoYWZ0ZXIgNi4yLjEyNCkKK1Byb2JsZW06ICAgIE1hYzogYnVpbGRpbmcgd2l0aG91dCBHVUkgdGhyb3VnaCBjb25maWd1cmUgZG9lc24ndCB3b3JrLgorCSAgICBXaGVuIHRoZSBzeXN0ZW0gaXMgc2xvdywgdW5wYWNraW5nIHRoZSByZXNvdXJjZSBmaWxlIHRha2VzIHRvbworCSAgICBsb25nLgorU29sdXRpb246ICAgRG9uJ3QgYWx3YXlzIGRlZmluZSBGRUFUX0dVSV9NQUMgd2hlbiBNQUNPUyBpcyBkZWZpbmVkLCBkZWZpbmUgaXQKKwkgICAgaW4gdGhlIE1ha2VmaWxlLgorCSAgICBBZGQgYSBjb25maWd1cmUgb3B0aW9uIHRvIHNraXAgRGFyd2luIGRldGVjdGlvbi4KKwkgICAgVXNlIGEgUHl0aG9uIHNjcmlwdCB0byB1bnBhY2sgdGhlIHJlc291cmNlcyB0byBhdm9pZCBhIHJhY2UKKwkgICAgY29uZGl0aW9uLiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBNYWtlZmlsZSwgc3JjL01ha2VmaWxlLCBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4sCisJICAgIHNyYy9kZWhxeC5weSwgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMi4xNDMKK1Byb2JsZW06ICAgIFVzaW5nICJLIiBvbiBWaXN1YWxseSBzZWxlY3RlZCB0ZXh0IGRvZXNuJ3Qgd29yayBpZiBpdCBlbmRzIGluCisJICAgIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuCitTb2x1dGlvbjogICBJbmNsdWRlIGFsbCB0aGUgYnl0ZXMgb2YgdGhlIGxhc3QgY2hhcmFjdGVyLiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjE0NAorUHJvYmxlbTogICAgV2hlbiAiZzpodG1sX3VzZV9jc3MiIGlzIHNldCB0aGUgSFRNTCBoZWFkZXIgZ2VuZXJhdGVkIGJ5IHRoZQorCSAgICAyaHRtbCBzY3JpcHQgaXMgd3JvbmcuCitTb2x1dGlvbjogICBBZGQgdGhlIGhlYWRlciBhZnRlciBhZGRpbmcgSFJFRiBmb3IgbGlua3MuCisJICAgIEFsc28gdXNlICI6bm9ybWFsISIgaW5zdGVhZCBvZiAiOm5vcm1hbCIgdG8gYXZvaWQgbWFwcGluZ3MKKwkgICAgZ2V0dGluZyBpbiB0aGUgd2F5LgorRmlsZXM6CSAgICBydW50aW1lL3N5bnRheC8yaHRtbC52aW0KKworUGF0Y2ggNi4yLjE0NSAoYWZ0ZXIgNi4yLjEzOSkKK1Byb2JsZW06ICAgIFVuZGVmaW5pbmcgImJvb2wiIGRvZXNuJ3Qgd29yayBmb3Igb2xkZXIgc3lzdGVtcy4gKFdvanRlayBQaWxvcnopCitTb2x1dGlvbjogICBPbmx5IHVuZGVmaW5lICJib29sIiBvbiBNYWMgT1MuCitGaWxlczoJICAgIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMTQ2CitQcm9ibGVtOiAgICBPbiBzb21lIHN5c3RlbXMgdGhlIHByb3RvdHlwZSBmb3IgaWNvbnYoKSBpcyB3cm9uZywgY2F1c2luZyBhCisJICAgIHdhcm5pbmcgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIFVzZSBhIGNhc3QgKHZvaWQgKikgdG8gYXZvaWQgdGhlIHdhcm5pbmcuIChDaGFybGVzIENhbXBiZWxsKQorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMi4xNDcKK1Byb2JsZW06ICAgICI6cy9wYXQvXD1jb2woJy4nKSIgYWx3YXlzIHJlcGxhY2VzIHdpdGggIjEiLgorU29sdXRpb246ICAgU2V0IHRoZSBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaCBiZWZvcmUgc3Vic3RpdHV0aW5nLgorCSAgICAoSGVsbXV0IFN0aWVnbGVyKQorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMi4xNDgKK1Byb2JsZW06ICAgIENhbid0IGJyZWFrIGFuIEluc2VydCBpbnRvIHNldmVyYWwgdW5kb2FibGUgcGFydHMuCitTb2x1dGlvbjogICBBZGQgdGhlIENUUkwtRyB1IGNvbW1hbmQuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2luc2VydC50eHQsIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4yLjE0OQorUHJvYmxlbTogICAgV2hlbiB0aGUgY3Vyc29yIGlzIG9uIGEgbGluZSBwYXN0IDIxLDQ3NCw3NDggdGhlIGluZGljYXRlZAorCSAgICBwZXJjZW50YWdlIG9mIHRoZSBwb3NpdGlvbiBpcyBpbnZhbGlkLiAgV2l0aCB0aGF0IG1hbnkgbGluZXMKKwkgICAgIjEwMCUiIGNhdXNlcyBhIG5lZ2F0aXZlIGN1cnNvciBsaW5lIG51bWJlciwgcmVzdWx0aW5nIGluIGEgY3Jhc2guCisJICAgIChEYW5pZWwgR291am90KQorU29sdXRpb246ICAgRGl2aWRlIGJ5IDEwMCBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nLiAgQXZvaWQgb3ZlcmZsb3cgd2hlbgorCSAgICBjb21wdXRpbmcgdGhlIGxpbmUgbnVtYmVyIGZvciAiMTAwJSIuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2V4X2NtZHMyLmMsIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMTUwCitQcm9ibGVtOiAgICBXaGVuIGRvaW5nICJ2aW0gLSA8IGZpbGUiIGxpbmVzIGFyZSBicm9rZW4gYXQgTlVMIGNoYXJzLgorCSAgICAoRGFuaWVsIEdvdWpvdCkKK1NvbHV0aW9uOiAgIENoYW5nZSBOTCBjaGFyYWN0ZXJzIGJhY2sgdG8gTlVMIHdoZW4gcmVhZGluZyBmcm9tIHRoZSB0ZW1wCisJICAgIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi4xNTEKK1Byb2JsZW06ICAgIFdoZW4gZG9pbmcgInZpbSAtLXJlbW90ZSArc3RhcnRpbnNlcnQgZmlsZSIgc29tZSBjb21tYW5kcyBhcmUKKwkgICAgaW5zZXJ0ZWQgYXMgdGV4dC4gKEtsYXVzIEJvc2F1KQorU29sdXRpb246ICAgUHV0IGFsbCB0aGUgaW5pdCBjb21tYW5kcyBpbiBvbmUgRXggbGluZSwgbm90IHVzaW5nIGEgPENSPiwgc28KKwkgICAgdGhhdCBJbnNlcnQgbW9kZSBpc24ndCBzdGFydGVkIHRvbyBlYXJseS4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjIuMTUyCitQcm9ibGVtOiAgICBUaGUgY3Vyc29yKCkgZnVuY3Rpb24gZG9lc24ndCByZXNldCB0aGUgY29sdW1uIG9mZnNldCBmb3IKKwkgICAgJ3ZpcnR1YWxlZGl0Jy4KK1NvbHV0aW9uOiAgIFJlc2V0IHRoZSBvZmZzZXQgdG8gemVyby4gKEhlbG11dCBTdGllZ2xlcikKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuMTUzCitQcm9ibGVtOiAgICBXaW4zMjogIjpsYW5nIGdlcm1hbiIgZG9lc24ndCB1c2UgR2VybWFuIG1lc3NhZ2VzLgorU29sdXRpb246ICAgQWRkIGEgdGFibGUgdG8gdHJhbnNsYXRlIHRoZSBXaW4zMiBsYW5ndWFnZSBuYW1lcyB0byB0d28tbGV0dGVyCisJICAgIGxhbmd1YWdlIGNvZGVzLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjIuMTU0CitQcm9ibGVtOiAgICBQeXRob24gYmFpbHMgb3V0IHdoZW4gZ2l2aW5nIGEgd2FybmluZyBtZXNzYWdlLiAoRXVnZW5lCisJICAgIE1pbmtvdnNraWkpCitTb2x1dGlvbjogICBTZXQgc3lzLmFyZ3ZbXSB0byBhbiBlbXB0eSBzdHJpbmcuCitGaWxlczoJICAgIHNyYy9pZl9weXRob24uYworCitQYXRjaCA2LjIuMTU1CitQcm9ibGVtOiAgICBXaW4zMjogVXNpbmcgIjp0anVtcCB3d3ciIGluIGEgaGVscCBmaWxlIGdpdmVzIHR3byByZXN1bHRzLgorCSAgICAoRGF2ZSBSb2JlcnRzKQorU29sdXRpb246ICAgSWdub3JlIGRpZmZlcmVuY2VzIGJldHdlZW4gc2xhc2hlcyBhbmQgYmFja3NsYXNoZXMgd2hlbiBjaGVja2luZworCSAgICBmb3IgaWRlbnRpY2FsIHRhZyBtYXRjaGVzLgorRmlsZXM6CSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjE1NiAoYWZ0ZXIgNi4yLjEyNSkKK1Byb2JsZW06ICAgIFdpbjMyOiBOZXRiZWFucyBmYWlscyB0byBidWlsZCwgRUlOVFIgaXMgbm90IGRlZmluZWQuCitTb2x1dGlvbjogICBSZWRlZmluZSBFSU5UUiB0byBXU0FFSU5UUi4gKE1pa2UgV2lsbGlhbXMpCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jCisKK1BhdGNoIDYuMi4xNTcKK1Byb2JsZW06ICAgIFVzaW5nICIlcCIgaW4gJ2Vycm9yZm9ybWF0JyBnaXZlcyBhIGNvbHVtbiBudW1iZXIgdGhhdCBpcyB0b28KKwkgICAgaGlnaC4KK1NvbHV0aW9uOiAgIFNldCB0aGUgZmxhZyB0byB1c2UgdGhlIG51bWJlciBhcyBhIHZpcnR1YWwgY29sdW1uLiAgKExlZnRlcmlzCisJICAgIEtvdXRzb2xvdWthcykKK0ZpbGVzOgkgICAgc3JjL3F1aWNrZml4LmMKKworUGF0Y2ggNi4yLjE1OAorUHJvYmxlbTogICAgVGhlIHNlZCBjb21tYW5kIG9uIFNvbGFyaXMgYW5kIEhQVVggZG9lc24ndCB3b3JrIGZvciBhIGxpbmUgdGhhdAorCSAgICBkb2Vzbid0IGVuZCBpbiBhIG5ld2xpbmUuCitTb2x1dGlvbjogICBBZGQgYSBuZXdsaW5lIHdoZW4gZmVlZGluZyB0ZXh0IHRvIHNlZC4gKE1hcmsgV2FnZ29uZXIpCitGaWxlczoJICAgIHNyYy9jb25maWd1cmUuaW4sIHNyYy9hdXRvL2NvbmZpZ3VyZQorCitQYXRjaCA2LjIuMTU5CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGV4cHJlc3Npb24gZm9sZGluZyBhbmQgJ2ZvbGRvcGVuJyBpcyAidW5kbyIgYW4gdW5kbworCSAgICBjb21tYW5kIGRvZXNuJ3QgYWx3YXlzIG9wZW4gdGhlIGZvbGQuCitTb2x1dGlvbjogICBTYXZlIGFuZCByZXN0b3JlIHRoZSBLZXlUeXBlZCB2YXJpYWJsZSB3aGVuIGV2YWx1YXRpbmcgJ2ZvbGRleHByJy4KKwkgICAgKFRhcm8gTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL2ZvbGQuYworCitQYXRjaCA2LjIuMTYwCitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgImFsbCIgYW5kICdzZWxlY3Rpb24gaXMgImV4Y2x1c2l2ZSIsCisJICAgIHNlbGVjdGluZyBhIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXIgYmVsb3cgYSBzaW5nbGUtd2lkdGggY2hhcmFjdGVyCisJICAgIG1heSBjYXVzZSBhIGNyYXNoLgorU29sdXRpb246ICAgQXZvaWQgb3ZlcmZsb3cgb24gdW5zaWduZWQgaW50ZWdlciBkZWNyZW1lbnQuIChUYXJvIE11cmFva2EpCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMTYxIChleHRyYSkKK1Byb2JsZW06ICAgIFZNUzogTWlzc2luZyBoZWFkZXIgZmlsZS4gIFJlYWRpbmcgaW5wdXQgYnVzeSBsb29wcy4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgdGVybWRlZi5oLiAgQXZvaWQgdGhlIHVzZSBvZiBhIHdhaXQgZnVuY3Rpb24gaW4KKwkgICAgdm1zX3JlYWQoKS4gIChGcmFuayBSaWVzKQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5oLCBzcmMvb3Nfdm1zLmMKKworUGF0Y2ggNi4yLjE2MgorUHJvYmxlbTogICAgIjpyZWRyYXciIGRvZXNuJ3QgYWx3YXlzIGRpc3BsYXkgdGhlIHRleHQgdGhhdCBpbmNsdWRlcyB0aGUgY3Vyc29yCisJICAgIHBvc2l0aW9uLCBlLmcuIGFmdGVyICI6Y2FsbCBjdXJzb3IoMSwgMCkiLiAoRXVnZW5lIE1pbmtvdnNraWkpCitTb2x1dGlvbjogICBDYWxsIHVwZGF0ZV90b3BsaW5lKCkgYmVmb3JlIHJlZHJhd2luZy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4yLjE2MworUHJvYmxlbTogICAgIm1ha2UgaW5zdGFsbCIgbWF5IGFsc28gY29weSBBQVBESVIgZGlyZWN0b3JpZXMuCitTb2x1dGlvbjogICBEZWxldGUgQUFQRElSIGRpcmVjdG9yaWVzLCBqdXN0IGxpa2UgQ1ZTIGRpcmVjdG9yaWVzLgorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjE2NCAoYWZ0ZXIgNi4yLjE0NCkKK1Byb2JsZW06ICAgIFdoZW4gImc6aHRtbF91c2VfY3NzIiBpcyBzZXQgdGhlIEhUTUwgaGVhZGVyIGdlbmVyYXRlZCBieSB0aGUKKwkgICAgMmh0bWwgc2NyaXB0IGlzIHN0aWxsIHdyb25nLgorU29sdXRpb246ICAgU2VhcmNoIGZvciBhIHN0cmluZyBpbnN0ZWFkIG9mIGp1bXBpbmcgdG8gYSBmaXhlZCBsaW5lIG51bWJlci4KKwkgICAgR28gdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGJlZm9yZSBpbnNlcnRpbmcgdGhlIGhlYWRlci4KKwkgICAgKEplc3MgVGhyeXNvZWUpCitGaWxlczoJICAgIHJ1bnRpbWUvc3ludGF4LzJodG1sLnZpbQorCitQYXRjaCA2LjIuMTY1CitQcm9ibGVtOiAgICBUaGUgY29uZmlndXJlIGNoZWNrcyBoYW5nIHdoZW4gdXNpbmcgYXV0b2NvbmYgMi41Ny4KK1NvbHV0aW9uOiAgIEludm9rZSBBQ19QUk9HUkFNX0VHUkVQIHRvIHNldCAkRUdSRVAuIChBcm9uIEdyaWZmaXMpCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjIuMTY2CitQcm9ibGVtOiAgICBXaGVuICRHWklQIGNvbnRhaW5zICItTiIgZWRpdGluZyBjb21wcmVzc2VkIGZpbGVzIGRvZXNuJ3Qgd29yaworCSAgICBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIEFkZCAiLW4iIHRvICJnemlwIC1kIiB0byBhdm9pZCByZXN0b3JpbmcgdGhlIGZpbGUgbmFtZS4gKE95dmluZAorCSAgICBIb2xtKQorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9nemlwLnZpbQorCitQYXRjaCA2LjIuMTY3CitQcm9ibGVtOiAgICBUaGUgUHl0aG9uIGludGVyZmFjZSBsZWFrcyBtZW1vcnkgd2hlbiBhc3NpZ25pbmcgbGluZXMgdG8gYQorCSAgICBidWZmZXIuIChTZXJnZXkgS2hvcmV2KQorU29sdXRpb246ICAgRG8gbm90IGNvcHkgdGhlIGxpbmUgd2hlbiBjYWxsaW5nIG1sX3JlcGxhY2UoKS4KK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMi4xNjgKK1Byb2JsZW06ICAgIFB5dGhvbiBpbnRlcmZhY2U6IFRoZXJlIGlzIG5vIHdheSB0byBnZXQgdGhlIGluZGljZXMgZnJvbSBhIHJhbmdlCisJICAgIG9iamVjdC4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgInN0YXJ0IiBhbmQgImVuZCIgYXR0cmlidXRlcy4gKE1hdXJpY2UgUy4gQmFybnVtKQorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMsIHJ1bnRpbWUvZG9jL2lmX3B5dGgudHh0CisKK1BhdGNoIDYuMi4xNjkKK1Byb2JsZW06ICAgIFRoZSBwcm90b3R5cGUgZm9yIF9YbWJsZW4oKSBhcHBlYXJzIGluIGEgcmVjZW50IFhGcmVlODYgaGVhZGVyCisJICAgIGZpbGUsIGNhdXNpbmcgYSB3YXJuaW5nIGZvciBvdXIgcHJvdG90eXBlLiAoSGlzYXNoaSBUIEZ1amluYWthKQorU29sdXRpb246ICAgTW92ZSB0aGUgcHJvdG90eXBlIHRvIGFuIG9zZGVmIGZpbGUsIHNvIHRoYXQgaXQncyBmaWx0ZXJlZCBvdXQuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jLCBzcmMvb3NkZWYyLmguaW4KKworUGF0Y2ggNi4yLjE3MAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBTdW4gV29ya1Nob3AgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzbid0IGNoYW5nZWQgdG8KKwkgICAgd2hlcmUgdGhlIGZpbGUgaXMuCitTb2x1dGlvbjogICBTZXQgdGhlICdhdXRvY2hkaXInIG9wdGlvbiB3aGVuIHVzaW5nIFdvcmtTaG9wLiAgQW5kIGF2b2lkIHVzaW5nCisJICAgIHRoZSBiYXNlbmFtZSB3aGVuICdhdXRvY2hkaXInIGlzIG5vdCBzZXQuCitGaWxlczoJICAgIHNyYy9ndWlfeDExLmMsIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4yLjE3MSAoYWZ0ZXIgNi4yLjE2MykKK1Byb2JsZW06ICAgIFRoZSAiLW9yIiBhcmd1bWVudCBvZiAiZmluZCIgZG9lc24ndCB3b3JrIGZvciBTeXNWIHN5c3RlbXMuCitTb2x1dGlvbjogICBVc2UgIi1vIiBpbnN0ZWFkLiAoR29yZG9uIFByaWV1cikKK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDYuMi4xNzIgKGFmdGVyIDYuMi4xNjkpCitQcm9ibGVtOiAgICBUaGUgcHJvdG90eXBlIGZvciBfWG1ibGVuKCkgc3RpbGwgY2F1c2VzIHRyb3VibGUuCitTb2x1dGlvbjogICBJbmNsdWRlIHRoZSBYMTEgaGVhZGVyIGZpbGUgdGhhdCBkZWZpbmVzIHRoZSBwcm90b3R5cGUuCitGaWxlczoJICAgIHNyYy9vc2RlZjIuaC5pbiwgc3JjL29zZGVmLnNoCisKK1BhdGNoIDYuMi4xNzMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFJ1YnkgaW50ZXJmYWNlIGRvZXNuJ3Qgd29yayB3aXRoIFJ1YnkgMS44LjAgZm9yIG90aGVyCisJICAgIGNvbXBpbGVycyB0aGFuIE1TVkMuCitTb2x1dGlvbjogICBGaXggdGhlIEJDNSwgQ3lnd2luIGFuZCBNaW5ndyBtYWtlZmlsZXMuIChEYW4gU2hhcnApCitGaWxlczoJICAgIHNyYy9NYWtlX2JjNS5tYWssIHNyYy9NYWtlX2N5Zy5tYWssIHNyYy9NYWtlX21pbmcubWFrCisKK1BhdGNoIDYuMi4xNzQKK1Byb2JsZW06ICAgIEFmdGVyIHRoZSAiOmludHJvIiBtZXNzYWdlIG9ubHkgYSBtb3VzZSBjbGljayBpbiB0aGUgbGFzdCBsaW5lCisJICAgIGdldHMgcGFzdCB0aGUgaGl0LXJldHVybiBwcm9tcHQuCitTb2x1dGlvbjogICBBY2NlcHQgYSBjbGljayBhdCBvciBiZWxvdyB0aGUgaGl0LXJldHVybiBwcm9tcHQuCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL21lc3NhZ2UuYworCitQYXRjaCA2LjIuMTc1CitQcm9ibGVtOiAgICBDaGFuZ2luZyAnYmFja3VwZXh0JyBpbiBhICpXcml0ZVByZSBhdXRvY29tbWFuZCBkb2Vzbid0IHdvcmsuCisJICAgIChXaWxsaWFtIE5hdHRlcikKK1NvbHV0aW9uOiAgIE1vdmUgdGhlIHVzZSBvZiBwX2JleCB0byBhZnRlciBleGVjdXRpbmcgdGhlICpXcml0ZVByZQorCSAgICBhdXRvY29tbWFuZHMuICBBbHNvIGF2b2lkcyByZWFkaW5nIGFsbG9jYXRlZCBtZW1vcnkgYWZ0ZXIgZnJlZWluZy4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi4xNzYKK1Byb2JsZW06ICAgIEFjY2VudGVkIGNoYXJhY3RlcnMgaW4gdHJhbnNsYXRlZCBoZWxwIGZpbGVzIGFyZSBub3QgaGFuZGxlZAorCSAgICBjb3JyZWN0bHkuIChGYWJpZW4gVmF5c3NpZXJlKQorU29sdXRpb246ICAgSW5jbHVkZSAiMTkyLTI1NSIgaW4gJ2lza2V5d29yZCcgZm9yIHRoZSBoZWxwIHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjIuMTc3IChleHRyYSkKK1Byb2JsZW06ICAgIFZpc1ZpbTogT3BlbmluZyBhIGZpbGUgd2l0aCBhIHNwYWNlIGluIHRoZSBuYW1lIGRvZXNuJ3Qgd29yay4gKFJvYgorCSAgICBSZXR0ZXIpICBBcmJpdHJhcnkgY29tbWFuZHMgYXJlIGJlaW5nIGV4ZWN1dGVkLiAoTmVpbCBCaXJkKQorU29sdXRpb246ICAgUHV0IGEgYmFja3NsYXNoIGluIGZyb250IG9mIGV2ZXJ5IHNwYWNlIGluIHRoZSBmaWxlIG5hbWUuCisJICAgIChHZXJhcmQgQmxhaXMpICBUZXJtaW5hdGUgdGhlIENUUkwtXCBDVFJMLU4gY29tbWFuZCB3aXRoIGEgTlVMLgorRmlsZXM6CSAgICBzcmMvVmlzVmltL0NvbW1hbmRzLmNwcCwgc3JjL1Zpc1ZpbS9WaXNWaW0ucmMKKworUGF0Y2ggNi4yLjE3OAorUHJvYmxlbTogICAgUGVvcGxlIHdobyBkb24ndCBrbm93IGhvdyB0byBleGl0IFZpbSB0cnkgcHJlc3NpbmcgQ1RSTC1DLgorU29sdXRpb246ICAgR2l2ZSBhIG1lc3NhZ2UgaG93IHRvIGV4aXQgVmltIHdoZW4gQ1RSTC1DIGlzIHByZXNzZWQgYW5kIGl0CisJICAgIGRvZXNuJ3QgY2FuY2VsIGFueXRoaW5nLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjE3OSAoZXh0cmEpCitQcm9ibGVtOiAgICBUaGUgZW5fZ2IgbWVzc2FnZXMgZmlsZSBpc24ndCBmb3VuZCBvbiBjYXNlIHNlbnNpdGl2ZSBzeXN0ZW1zLgorU29sdXRpb246ICAgUmVuYW1lIGVuX2diIHRvIGVuX0dCLiAoTWlrZSBXaWxsaWFtcykKK0ZpbGVzOgkgICAgc3JjL3BvL2VuX2diLnBvLCBzcmMvcG8vZW5fR0IucG8sIHNyYy9wby9NYWtlX21pbmcubWFrLAorCSAgICBzcmMvcG8vTWFrZV9tdmMubWFrLCBzcmMvcG8vTWFrZWZpbGUsIHNyYy9wby9SRUFETUVfbXZjLnR4dAorCitQYXRjaCA2LjIuMTgwCitQcm9ibGVtOiAgICBDb21waWxpbmcgd2l0aCBHVEsyIG9uIFdpbjMyIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgZ2Rrd2luMzIuaCBpbnN0ZWFkIG9mIGdka3guaC4gKFNyaW5hdGggQXZhZGhhbnVsYSkKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYywgc3JjL2d1aV9ndGtfZi5jLCBzcmMvZ3VpX2d0a194MTEuYywgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4yLjE4MSAoYWZ0ZXIgNi4yLjE3MSkKK1Byb2JsZW06ICAgIFRoZSAiLW8iIGFyZ3VtZW50IG9mICJmaW5kIiBoYXMgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgaW1wbGllZAorCSAgICAiYW5kIiB3aXRoICItcHJpbnQiLgorU29sdXRpb246ICAgQWRkIHBhcmVudGhlc2lzIGFyb3VuZCB0aGUgIi1vIiBleHByZXNzaW9uLiAoR29yZG9uIFByaWV1cikKK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDYuMi4xODIgKGFmdGVyIDYuMi4wOTQpCitQcm9ibGVtOiAgICBDb21waWxhdGlvbiB3aXRoIHRpbnkgZmVhdHVyZXMgZmFpbHMgYmVjYXVzZSBvZiBtaXNzaW5nCisJICAgIGdldF9wYXN0X2hlYWQoKSBmdW5jdGlvbi4KK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgI2lmZGVmIGZvciBnZXRfcGFzdF9oZWFkKCkuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMi4xODMgKGFmdGVyIDYuMi4xNzgpCitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciBjaGFyL3Vuc2lnbmVkIGNoYXIgbWl4dXAuCitTb2x1dGlvbjogICBVc2UgTVNHKCkgaW5zdGVhZCBvZiBtc2coKS4gKFRvbnkgTGVuZWlzKQorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjE4NAorUHJvYmxlbTogICAgV2l0aCAnZm9ybWF0b3B0aW9ucycgc2V0IHRvICIxYXciIGluc2VydGluZyB0ZXh0IG1heSBjYXVzZSB0aGUKKwkgICAgcGFyYWdyYXBoIHRvIGJlIGVuZGVkLiAoQWxhbiBTY2htaXR0KQorU29sdXRpb246ICAgVGVtcG9yYXJpbHkgYWRkIGFuIGV4dHJhIHNwYWNlIHRvIG1ha2UgdGhlIHBhcmFncmFwaCBjb250aW51ZQorCSAgICBhZnRlciBtb3ZpbmcgdGhlIHdvcmQgYWZ0ZXIgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBsaW5lLgorCSAgICBBbHNvIGZvcm1hdCB3aGVuIHByZXNzaW5nIEVzYy4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL25vcm1hbC5jLCBzcmMvcHJvdG8vZWRpdC5wcm8KKworUGF0Y2ggNi4yLjE4NQorUHJvYmxlbTogICAgUmVzdG9yaW5nIGEgc2Vzc2lvbiB3aXRoIHplcm8taGVpZ2h0IHdpbmRvd3MgZG9lcyBub3Qgd29yaworCSAgICBwcm9wZXJseS4gKENoYXJsZXMgQ2FtcGJlbGwpCitTb2x1dGlvbjogICBBY2NlcHQgYSB6ZXJvIGFyZ3VtZW50IHRvICI6cmVzaXplIiBhcyBpbnRlbmRlZC4gIEFkZCBhIHdpbmRvdworCSAgICBudW1iZXIgYXJndW1lbnQgdG8gIjpyZXNpemUiIHRvIGJlIGFibGUgdG8gc2V0IHRoZSBzaXplIG9mIG90aGVyCisJICAgIHdpbmRvd3MsIGJlY2F1c2UgdGhlIGN1cnJlbnQgd2luZG93IGNhbm5vdCBiZSB6ZXJvLWhlaWdodC4KKwkgICAgRml4IHRoZSBleHBsb3JlciBwbHVnaW4gdG8gYXZvaWQgY2hhbmdpbmcgdGhlIHdpbmRvdyBzaXplcy4gIEFkZAorCSAgICB0aGUgd2lucmVzdGNtZCgpIGZ1bmN0aW9uIGZvciB0aGlzLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9ldmFsLnR4dCwgcnVudGltZS9wbHVnaW4vZXhwbG9yZXIudmltLCBzcmMvZXZhbC5jLAorCSAgICBzcmMvZXhfY21kcy5oLCBzcmMvZXhfZG9jbWQuYywgc3JjL3Byb3RvL3dpbmRvdy5wcm8sIHNyYy93aW5kb3cuYworCitQYXRjaCA2LjIuMTg2IChhZnRlciA2LjIuMTg1KQorUHJvYmxlbTogICAgRG9jdW1lbnRhdGlvbiBmaWxlIGV2YWwudHh0IGNvbnRhaW5zIGV4YW1wbGVzIHdpdGhvdXQgaW5kZW50LgorU29sdXRpb246ICAgSW5zZXJ0IHRoZSBpbmRlbnQuICBBbHNvIGZpeCBvdGhlciBtaXN0YWtlcy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZXZhbC50eHQKKworUGF0Y2ggNi4yLjE4NworUHJvYmxlbTogICAgVXNpbmcgSW5zdXJlKysgcmV2ZWFscyBhIG51bWJlciBvZiBidWdzLiAgKERvbWludXF1ZSBQZWxsZSkKK1NvbHV0aW9uOiAgIEluaXRpYWxpemUgdmFyaWFibGVzIHdoZXJlIG5lZWRlZC4gIEZyZWUgYWxsb2NhdGVkIG1lbW9yeSB0byBhdm9pZAorCSAgICBsZWFrcy4gIEZpeCBjb21wYXJpbmcgdGFncyB0byBhdm9pZCByZWFkaW5nIHBhc3QgYWxsb2NhdGVkIG1lbW9yeS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvZGlmZi5jLCBzcmMvZmlsZWlvLmMsIHNyYy9tYXJrLmMsIHNyYy9taXNjMS5jLAorCSAgICBzcmMvbWlzYzIuYywgc3JjL29wcy5jLCBzcmMvb3B0aW9uLmMsIHNyYy90YWcuYywgc3JjL3VpLmMKKworUGF0Y2ggNi4yLjE4OCAoZXh0cmEpCitQcm9ibGVtOiAgICBNUy1XaW5kb3dzOiBNdWx0aS1ieXRlIGNoYXJhY3RlcnMgaW4gYSBmaWxlbmFtZSBjYXVzZSB0cm91YmxlIGZvcgorCSAgICB0aGUgd2luZG93IHRpdGxlLgorU29sdXRpb246ICAgUmV0dXJuIHdoZW4gdGhlIHdpZGUgZnVuY3Rpb24gZm9yIHNldHRpbmcgdGhlIHRpdGxlIGRpZCBpdHMgd29yay4KK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjIuMTg5CitQcm9ibGVtOiAgICBXaGVuIHNldHRpbmcgJ3ZpbWluZm8nIGFmdGVyIGVkaXRpbmcgYSBuZXcgYnVmZmVyIGl0cyBtYXJrcyBhcmUKKwkgICAgbm90IHN0b3JlZC4gKEtlaXRoIFJvYmVydHMpCitTb2x1dGlvbjogICBTZXQgdGhlICJiX21hcmtzX3JlYWQiIGZsYWcgd2hlbiBza2lwcGluZyB0byByZWFkIG1hcmtzIGZyb20gdGhlCisJICAgIHZpbWluZm8gZmlsZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi4xOTAKK1Byb2JsZW06ICAgIFdoZW4gZWRpdGluZyBhIGNvbXByZXNzZWQgZmlsZXMsIG1hcmtzIGFyZSBsb3N0LgorU29sdXRpb246ICAgQWRkIHRoZSAiOmxvY2ttYXJrcyIgbW9kaWZpZXIgYW5kIHVzZSBpdCBpbiB0aGUgZ3ppcCBwbHVnaW4uCisJICAgIE1ha2UgZXhpc3RzKCkgYWxzbyBjaGVjayBmb3IgY29tbWFuZCBtb2RpZmllcnMsIHNvIHRoYXQgdGhlCisJICAgIGV4aXN0ZW5jZSBvZiAiOmxvY2ttYXJrcyIgY2FuIGJlIGNoZWNrZWQgZm9yLgorCSAgICBBbHNvIGFkZCAiOmtlZXBtYXJrcyIgdG8gYXZvaWQgdGhhdCBtYXJrcyBhcmUgZGVsZXRlZCB3aGVuCisJICAgIGZpbHRlcmluZyB0ZXh0LgorCSAgICBXaGVuIGRlbGV0aW5nIGxpbmVzIHB1dCBtYXJrcyAnQSAtICdaIGFuZCAnMCAtICc5IGF0IHRoZSBmaXJzdAorCSAgICBkZWxldGVkIGxpbmUgaW5zdGVhZCBvZiBjbGVhcmluZyB0aGUgbWFyay4gIFRoZXkgd2VyZSBrZXB0IGluIHRoZQorCSAgICB2aW1pbmZvIGZpbGUgYW55d2F5LgorCSAgICBBdm9pZCB0aGF0IHRoZSBnemlwIHBsdWdpbiBwdXRzIGRlbGV0ZWQgdGV4dCBpbiByZWdpc3RlcnMuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL21vdGlvbi50eHQsIHJ1bnRpbWUvcGx1Z2luL2d6aXAudmltLCBzcmMvZXhfY21kcy5jLAorCSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL21hcmsuYywgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjIuMTkxCitQcm9ibGVtOiAgICBUaGUgaW50cm8gbWVzc2FnZSBpcyBvdXRkYXRlZC4gIEluZm9ybWF0aW9uIGFib3V0IHNwb25zb3JpbmcgYW5kCisJICAgIHJlZ2lzdGVyaW5nIGlzIG1pc3NpbmcuCitTb2x1dGlvbjogICBTaG93IGluZm8gYWJvdXQgc3BvbnNvcmluZyBhbmQgcmVnaXN0ZXJpbmcgVmltIGluIHRoZSBpbnRybworCSAgICBtZXNzYWdlIG5vdyBhbmQgdGhlbi4gIEFkZCBoZWxwIGZpbGUgYWJvdXQgc3BvbnNvcmluZy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvaGVscC50eHQsIHJ1bnRpbWUvZG9jL3Nwb25zb3IudHh0LCBydW50aW1lL2RvYy90YWdzLAorCSAgICBydW50aW1lL21lbnUudmltLCBzcmMvdmVyc2lvbi5jCisKK1BhdGNoIDYuMi4xOTIKK1Byb2JsZW06ICAgIFVzaW5nIENUUkwtVCBhbmQgQ1RSTC1EIHdpdGggImdSIiBtZXNzZXMgdXAgdGhlIHRleHQuICAoSm9uYWh0YW4KKwkgICAgSGFua2lucykKK1NvbHV0aW9uOiAgIEF2b2lkIGNhbGxpbmcgY2hhbmdlX2luZGVudCgpIHJlY3Vyc2l2ZWx5LgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMi4xOTMKK1Byb2JsZW06ICAgIFdoZW4gcmVjYWxsaW5nIGEgc2VhcmNoIHBhdHRlcm4gZnJvbSB0aGUgaGlzdG9yeSBmcm9tIGEgIjpzLGEvYywiCisJICAgIGNvbW1hbmQgdGhlICcvJyBlbmRzIHRoZSBzZWFyY2ggc3RyaW5nLiAoSkMgdmFuIFdpbmtlbCkKK1NvbHV0aW9uOiAgIFN0b3JlIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyIHdpdGggdGhlIGhpc3RvcnkgZW50cmllcy4gIEVzY2FwZQorCSAgICBjaGFyYWN0ZXJzIHdoZW4gbmVlZGVkLCByZXBsYWNlIHRoZSBvbGQgc2VwYXJhdG9yIHdpdGggdGhlIG5ldyBvbmUuCisJICAgIEFsc28gZml4ZXMgdGhhdCByZWNhbGxpbmcgYSAiLyIgc2VhcmNoIGZvciBhICI/IiBjb21tYW5kIG1lc3NlcyB1cAorCSAgICB0cmFpbGluZyBmbGFncy4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9ub3JtYWwuYywgc3JjL3Byb3RvL2V4X2dldGxuLnBybywKKwkgICAgc3JjL3NlYXJjaC5jLCBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjE5NCAoYWZ0ZXIgNi4yLjA2OCkKK1Byb2JsZW06ICAgIEZvciBOZXRCZWFucywgaW5zdGVhZCBvZiB3cml0aW5nIHRoZSBmaWxlIGFuZCBzZW5kaW5nIGFuIGV2ZW50CisJICAgIGFib3V0IGl0LCB0ZWxsIE5ldEJlYW5zIHRvIHdyaXRlIHRoZSBmaWxlLgorU29sdXRpb246ICAgQWRkIHRoZSAic2F2ZSIgY29tbWFuZCwgIm5ldGJlYW5zQnVmZmVyIiBjb21tYW5kIGFuZAorCSAgICAiYnV0dG9uUmVsZWFzZSIgZXZlbnQgdG8gdGhlIG5ldGJlYW5zIHByb3RvY29sLiAgVXBkYXRlZCB0aGUKKwkgICAgaW50ZXJmYWNlIHRvIHZlcnNpb24gMi4yLiAgKEdvcmRvbiBQcmlldXIpCisJICAgIEFsc286IG9wZW4gYSBmb2xkIHdoZW4gdGhlIGN1cnNvciBoYXMgYmVlbiBwb3NpdGlvbmVkLgorCSAgICBBbHNvOiBmaXggbWVtb3J5IGxlYWssIGZyZWUgcmVzdWx0IG9mIG5iX3F1b3RlKCkuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL25ldGJlYW5zLnR4dCwgc3JjL2ZpbGVpby5jLCBzcmMvbmV0YmVhbnMuYywKKwkgICAgc3JjL25vcm1hbC5jLCBzcmMvcHJvdG8vbmV0YmVhbnMucHJvLCBzcmMvc3RydWN0cy5oCisKK1BhdGNoIDYuMi4xOTUgKGFmdGVyIDYuMi4xOTApCitQcm9ibGVtOiAgICBDb21waWxpbmcgZmFpbHMgZm9yIG1pc3NpbmcgQ1BPX1JFTU1BUksgc3ltYm9sLgorU29sdXRpb246ICAgQWRkIHRoZSBwYXRjaCBJIGZvcmdvdCB0byBpbmNsdWRlLi4uCitGaWxlczoJICAgIHNyYy9vcHRpb24uaAorCitQYXRjaCA2LjIuMTk2IChhZnRlciA2LjIuMTkxKQorUHJvYmxlbTogICAgUmVidWlsZGluZyB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHVzZSB0aGUgc3BvbnNvci50eHQgZmlsZS4KK1NvbHV0aW9uOiAgIEFkZCBzcG9uc29yLnR4dCB0byB0aGUgTWFrZWZpbGUuIChDaHJpc3RpYW4gSi4gUm9iaW5zb24pCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL01ha2VmaWxlCisKK1BhdGNoIDYuMi4xOTcKK1Byb2JsZW06ICAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBmb3JjZSBhIHJlZHJhdyBvZiBzdGF0dXMgbGluZXMuIChHYXJ5CisJICAgIEpvaG5zb24pCitTb2x1dGlvbjogICBBZGQgdGhlICI6cmVkcmF3c3RhdHVzIiBjb21tYW5kLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy92YXJpb3VzLnR4dCwgc3JjL2V4X2NtZHMuaCwgc3JjL2V4X2RvY21kLmMsCisJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjIuMTk4CitQcm9ibGVtOiAgICBBIGZldyBtZXNzYWdlcyBhcmUgbm90IHRyYW5zbGF0ZWQuIChFcm5lc3QgQWRyb2d1ZSkKK1NvbHV0aW9uOiAgIE1hcmsgdGhlIG1lc3NhZ2VzIHRvIGJlIHRyYW5zbGF0ZWQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4yLjE5OSAoYWZ0ZXIgNi4yLjE5NCkKK1Byb2JsZW06ICAgIFZpbSBkb2Vzbid0IHdvcmsgcGVyZmVjdGx5IHdlbGwgd2l0aCBOZXRCZWFucy4KK1NvbHV0aW9uOiAgIFdoZW4gTmV0QmVhbnMgc2F2ZXMgdGhlIGZpbGUsIHJlc2V0IHRoZSB0aW1lc3RhbXAgdG8gYXZvaWQgImZpbGUKKwkgICAgY2hhbmdlZCIgd2FybmluZ3MuICBDbG9zZSBhIGJ1ZmZlciBpbiBhIHByb3BlciB3YXkuICBEb24ndCB0cnkKKwkgICAgZ2l2aW5nIGEgZGVidWcgbWVzc2FnZSB3aXRoIGFuIGludmFsaWQgcG9pbnRlci4gIFNlbmQgYQorCSAgICBuZXdEb3RBbmRNYXJrIG1lc3NhZ2Ugd2hlbiBuZWVkZWQuICBSZXBvcnQgYSBjaGFuZ2UgYnkgdGhlICJyIgorCSAgICBjb21tYW5kIHRvIE5ldEJlYW5zLiAgKEdvcmRvbiBQcmlldXIpCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jLCBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjIwMAorUHJvYmxlbTogICAgV2hlbiByZWNvdmVyaW5nIGEgZmlsZSwgJ2ZpbGVmb3JtYXQnIGlzIGFsd2F5cyB0aGUgZGVmYXVsdCwgdGh1cworCSAgICB3cml0aW5nIHRoZSBmaWxlIG1heSByZXN1bHQgaW4gZGlmZmVyZW5jZXMuIChQZW5lbG9wZSBGdWRkKQorU29sdXRpb246ICAgQmVmb3JlIHJlY292ZXJpbmcgdGhlIGZpbGUgdHJ5IHJlYWRpbmcgdGhlIG9yaWdpbmFsIGZpbGUgdG8gb2J0YWluCisJICAgIHRoZSB2YWx1ZXMgb2YgJ2ZpbGVmb3JtYXQnLCAnZmlsZWVuY29kaW5nJywgZXRjLgorRmlsZXM6CSAgICBzcmMvbWVtbGluZS5jCisKK1BhdGNoIDYuMi4yMDEKK1Byb2JsZW06ICAgIFdoZW4gJ2F1dG93cml0ZWFsbCcgaXMgc2V0ICI6cWFsbCIgc3RpbGwgcmVmdXNlcyB0byBleGl0IGlmIHRoZXJlCisJICAgIGlzIGEgbW9kaWZpZWQgYnVmZmVyLiAoQW50b2luZSBNZWNoZWx5bmNrKQorU29sdXRpb246ICAgQXR0ZW1wdCB3cml0aW5nIG1vZGlmaWVkIGJ1ZmZlcnMgYXMgaW50ZW5kZWQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMi4yMDIKK1Byb2JsZW06ICAgIEZpbGV0eXBlIG5hbWVzIG9mIENISUxMIGFuZCBjaCBzY3JpcHQgYXJlIGNvbmZ1c2luZy4KK1NvbHV0aW9uOiAgIFJlbmFtZSAiY2giIHRvICJjaGlsbCIgYW5kICJjaHNjcmlwdCIgdG8gImNoIi4KK0ZpbGVzOgkgICAgcnVudGltZS9maWxldHlwZS52aW0sIHJ1bnRpbWUvbWFrZW1lbnUudmltLCBydW50aW1lL3N5bm1lbnUudmltCisJICAgIHJ1bnRpbWUvc3ludGF4L2NoLnZpbSwgcnVudGltZS9zeW50YXgvY2hpbGwudmltCisKK1BhdGNoIDYuMi4yMDMKK1Byb2JsZW06ICAgIFdpdGggY2hhcmFjdGVyd2lzZSB0ZXh0IHRoYXQgaGFzIG1vcmUgdGhhbiBvbmUgbGluZSwgIjNQIiB3b3JrcworCSAgICB3cm9uZy4gICIzcCIgaGFzIHRoZSBzYW1lIHByb2JsZW0uICBUaGVyZSBhbHNvIGlzIGEgZGlzcGxheQorCSAgICBwcm9ibGVtLiAoRGFuaWVsIEdvdWpvdCkKK1NvbHV0aW9uOiAgIFBlcmZvcm0gY2hhcmFjdGVyd2lzZSBwdXRzIHdpdGggYSBjb3VudCBpbiB0aGUgcmlnaHQgcG9zaXRpb24uCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjIuMjA0IChhZnRlciA2LjIuMDg2KQorUHJvYmxlbTogICAgIl1dIiBpbiBhIGZpbGUgd2l0aCBjbG9zZWQgZm9sZHMgbW92ZXMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkgICAgKE5hbSBTdW5nSHl1bikKK1NvbHV0aW9uOiAgIEZpbmQgb25lIHBvc2l0aW9uIGluIGVhY2ggY2xvc2VkIGZvbGQsIHRoZW4gbW92ZSB0byBhZnRlciB0aGUgZm9sZC4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuMi4yMDUgKGV4dHJhKQorUHJvYmxlbTogICAgTVMtV2luZG93czogV2hlbiB0aGUgdGFza2JhciBpcyBhdCB0aGUgbGVmdCBvciB0b3Agb2YgdGhlIHNjcmVlbiwKKwkgICAgdGhlIFZpbSB3aW5kb3cgcGxhY2VtZW50IGlzIHdyb25nLgorU29sdXRpb246ICAgQ29tcHV0ZSB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhlIHdpbmRvdyBjb3JyZWN0bHkuIChUYXJvCisJICAgIE11cmFva2EpCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4yLjIwNgorUHJvYmxlbTogICAgTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGNhbm5vdCBiZSB1c2VkIGFzIGhvdGtleXMgaW4gYSBjb25zb2xlCisJICAgIGRpYWxvZy4gIChNYXR0aWFzIEVya2lzc29uKQorU29sdXRpb246ICAgSGFuZGxlIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBwcm9wZXJseS4gIEFsc28gcHV0ICgpIG9yIFtdIGFyb3VuZAorCSAgICBkZWZhdWx0IGhvdGtleXMuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMsIHNyYy9tYWNyb3MuaAorCitQYXRjaCA2LjIuMjA3CitQcm9ibGVtOiAgICBXaGVuICdlbmNvZGluZycgaXMgYSBtdWx0aS1ieXRlIGVuY29kaW5nLCBleHBhbmRpbmcgYW4KKwkgICAgYWJicmV2aWF0aW9uIHRoYXQgc3RhcnRzIHdoZXJlIGluc2VydGlvbiBzdGFydGVkIHJlc3VsdHMgaW4KKwkgICAgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGluc2VydGlvbiB0byBiZSBkZWxldGVkLiAgKFhpYW5namlhbmcgTWEpCitTb2x1dGlvbjogICBTdG9wIHNlYXJjaGluZyBsZWZ0d2FyZHMgZm9yIHRoZSBzdGFydCBvZiB0aGUgd29yZCBhdCB0aGUgcG9zaXRpb24KKwkgICAgd2hlcmUgaW5zZXJ0aW9uIHN0YXJ0ZWQuCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMKKworUGF0Y2ggNi4yLjIwOAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBmb2xkIG1hcmtlcnMsIHRocmVlIGxpbmVzIGluIGEgcm93IGhhdmUgdGhlIHN0YXJ0CisJICAgIG1hcmtlciBhbmQgZGVsZXRpbmcgdGhlIGZpcnN0IG9uZSB3aXRoICJkZCIsIGEgbmVzdGVkIGZvbGQgaXMgbm90CisJICAgIGRlbGV0ZWQuICAoS2FtaWwgQnVyenluc2tpKQorCSAgICBVc2luZyBtYXJrZXIgZm9sZGluZywgYSBsZXZlbCAxIGZvbGQgZG9lc24ndCBzdG9wIHdoZW4gaXQgaXMKKwkgICAgZm9sbG93ZWQgYnkgInt7ezIiLCBzdGFydGluZyBhIGxldmVsIDIgZm9sZC4KK1NvbHV0aW9uOiAgIERvbid0IHN0b3AgdXBkYXRpbmcgZm9sZHMgYXQgdGhlIGVuZCBvZiBhIGNoYW5nZSB3aGVuIHRoZSBuZXN0aW5nCisJICAgIGxldmVsIG9mIGZvbGRzIGlzIGxhcmdlciB0aGFuIHRoZSBmb2xkIGxldmVsLgorCSAgICBDb3JyZWN0bHkgY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGZvbGRzIHRoYXQgc3RhcnQgYXQgInt7ezIiLgorCSAgICBBbHNvIGF2b2lkIGEgY3Jhc2ggZm9yIGEgTlVMTCBwb2ludGVyLgorRmlsZXM6CSAgICBzcmMvZm9sZC5jCisKK1BhdGNoIDYuMi4yMDkKK1Byb2JsZW06ICAgIEEgYm9ndXMgZm9sZCBpcyBjcmVhdGVkIHdoZW4gdXNpbmcgIlAiIHdoaWxlIHRoZSBjdXJzb3IgaXMgaW4gdGhlCisJICAgIG1pZGRsZSBvZiBhIGNsb3NlZCBmb2xkLiAoS2FtaWwgQnVyenluc2tpKQorU29sdXRpb246ICAgQ29ycmVjdCB0aGUgbGluZSBudW1iZXIgd2hlcmUgbWFya3MgYXJlIG1vZGlmaWVkIGZvciBjbG9zZWQgZm9sZHMuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjIuMjEwIChleHRyYSkKK1Byb2JsZW06ICAgIE1hYyBPU1g6IGFudGlhbGlhc2VkIGZvbnRzIGFyZSBub3Qgc3VwcG9ydGVkLgorU29sdXRpb246ICAgQWRkIHRoZSAnYW50aWFsaWFzJyBvcHRpb24gdG8gc3dpdGNoIG9uIGFudGlhbGlhc2luZyBvbiBNYWMgT1NYCisJICAgIDEwLjIgYW5kIGxhdGVyLiAoUGV0ZXIgQ3Vja2EpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL29wdGlvbnMudHh0LCBzcmMvZ3VpX21hYy5jLCBzcmMvb3B0aW9uLmgsIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuMjExIChleHRyYSkKK1Byb2JsZW06ICAgIENvZGUgZm9yIGhhbmRsaW5nIGZpbGUgZHJvcHBlZCBvbiBWaW0gaXMgZHVwbGljYXRlZC4KK1NvbHV0aW9uOiAgIE1vdmUgdGhlIGNvbW1vbiBjb2RlIHRvIGd1aV9oYW5kbGVfZHJvcCgpLgorCSAgICBBZGQgY29kZSB0byBkcm9wIHRoZSBmaWxlcyBpbiB0aGUgd2luZG93IHVuZGVyIHRoZSBjdXJzb3IuCisJICAgIFN1cHBvcnQgZHJhZyZkcm9wIG9uIHRoZSBNYWNpbnRvc2guICAoVGFybyBNdXJhb2thKQorCSAgICBXaGVuIGRyb3BwaW5nIGEgZGlyZWN0b3J5IG5hbWUgZWRpdCB0aGF0IGRpcmVjdG9yeSAodXNpbmcgdGhlCisJICAgIGV4cGxvcmVyIHBsdWdpbikKKwkgICAgRml4IHRoYXQgY2hhbmdpbmcgZGlyZWN0b3J5IHdpdGggU2hpZnQgcHJlc3NlZCBkaWRuJ3Qgd29yayBmb3IKKwkgICAgcmVsYXRpdmUgcGF0aCBuYW1lcy4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvZ3VpLmMsIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvZ3VpX21hYy5jLAorCSAgICBzcmMvZ3VpX3c0OC5jLCBzcmMvcHJvdG8vZmlsZWlvLnBybywgc3JjL3Byb3RvL2d1aS5wcm8KKworUGF0Y2ggNi4yLjIxMiAoYWZ0ZXIgNi4yLjE5OSkKK1Byb2JsZW06ICAgIE5ldEJlYW5zOiBSZXBsYWNpbmcgd2l0aCBhIGNvdW50IGlzIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4KK1NvbHV0aW9uOiAgIE1vdmUgcmVwb3J0aW5nIHRoZSBjaGFuZ2Ugb3V0c2lkZSBvZiB0aGUgbG9vcCBmb3IgdGhlIGNvdW50LgorCSAgICAoR29yZG9uIFByaWV1cikKK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMi4yMTMgKGFmdGVyIDYuMi4yMDgpCitQcm9ibGVtOiAgICBVc2luZyBtYXJrZXIgZm9sZGluZywgInt7ezEiIGRvZXNuJ3Qgc3RhcnQgYSBuZXcgZm9sZCB3aGVuIGFscmVhZHkKKwkgICAgYXQgZm9sZCBsZXZlbCAxLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIENvcnJlY3RseSBjb21wdXRlIHRoZSBudW1iZXIgb2YgZm9sZHMgdGhhdCBzdGFydCBhdCAie3t7MSIuCitGaWxlczoJICAgIHNyYy9mb2xkLmMKKworUGF0Y2ggNi4yLjIxNCAoYWZ0ZXIgNi4yLjIxMSkgKGV4dHJhKQorUHJvYmxlbTogICAgV2FybmluZyBmb3IgYW4gdW51c2VkIHZhcmlhYmxlLgorU29sdXRpb246ICAgRGVsZXRlIHRoZSBkZWNsYXJhdGlvbi4gKEJpbGwgTWNDYXJ0aHkpCitGaWxlczoJICAgIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4yLjIxNQorUHJvYmxlbTogICAgTmV0QmVhbnM6IHByb2JsZW1zIHNhdmluZyBhbiB1bm1vZGlmaWVkIGZpbGUuCitTb2x1dGlvbjogICBBZGQgaXNOZXRiZWFuc01vZGlmaWVkKCkgZnVuY3Rpb24uICBEaXNhYmxlIG5ldGJlYW5zX3VubW9kaWZpZWQoKS4KKwkgICAgKEdvcmRvbiBQcmlldXIpCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL25ldGJlYW5zLmMsIHNyYy9wcm90by9uZXRiZWFucy5wcm8sCisJICAgIHJ1bnRpbWUvZG9jL25ldGJlYW5zLnR4dCwgcnVudGltZS9kb2MvdGFncworCitQYXRjaCA2LjIuMjE2IChhZnRlciA2LjIuMjA2KQorUHJvYmxlbTogICAgTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHN0aWwgY2Fubm90IGJlIHVzZWQgYXMgaG90a2V5cyBpbiBhIGNvbnNvbGUKKwkgICAgZGlhbG9nLiAgKE1hdHRpYXMgRXJraXNzb24pCitTb2x1dGlvbjogICBNYWtlIGdldF9rZXlzdHJva2UoKSBoYW5kbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA2LjIuMjE3CitQcm9ibGVtOiAgICBHVEs6IHNldHRpbmcgdGhlIHRpdGxlIGRvZXNuJ3QgYWx3YXlzIHdvcmsgY29ycmVjdGx5LgorU29sdXRpb246ICAgSW52b2tlIGd1aV9tY2hfc2V0dGl0bGUoKS4gKFRvbWFzIFN0ZWhsaWspCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4yLjIxOAorUHJvYmxlbTogICAgV2FybmluZyBmb3IgZnVuY3Rpb24gd2l0aG91dCBwcm90b3R5cGUuCitTb2x1dGlvbjogICBBZGQgYXJndW1lbnQgdHlwZXMgdG8gdGhlIG1zZ0NCIGZpZWxkIG9mIHRoZSBCYWxsb29uRXZhbCBzdHJ1Y3QuCitGaWxlczoJICAgIHNyYy9ndWlfYmV2YWwuaAorCitQYXRjaCA2LjIuMjE5CitQcm9ibGVtOiAgICBTeW50YXggaGlnaGxpZ2h0aW5nIGhhbmdzIG9uIGFuIGVtcHR5IG1hdGNoIG9mIGFuIGl0ZW0gd2l0aCBhCisJICAgIG5leHRncm91cC4gIChDaGFybGVzIENhbXBiZWxsKQorU29sdXRpb246ICAgUmVtZW1iZXIgdGhhdCB0aGUgaXRlbSBoYXMgYWxyZWFkeSBtYXRjaGVkIGFuZCBkb24ndCBtYXRjaCBpdAorCSAgICBhZ2FpbiBhdCB0aGUgc2FtZSBwb3NpdGlvbi4KK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMi4yMjAKK1Byb2JsZW06ICAgIFdoZW4gYSBWaW0gc2VydmVyIHJ1bnMgaW4gYSBjb25zb2xlIGEgcmVtb3RlIGNvbW1hbmQgaXNuJ3QgaGFuZGxlZAorCSAgICBiZWZvcmUgYSBrZXkgaXMgdHlwZWQuICAoSm9zaHVhIE5ldWhlaXNlbCkKK1NvbHV0aW9uOiAgIERvbid0IHRyeSByZWFkaW5nIG1vcmUgaW5wdXQgd2hlbiBhIGNsaWVudC1zZXJ2ZXIgY29tbWFuZCBoYXMgYmVlbgorCSAgICByZWNlaXZlZC4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMjIxCitQcm9ibGVtOiAgICBObyBmaWxlIG5hbWUgY29tcGxldGlvbiBmb3IgIjpjc2NvcGUgYWRkIi4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgWEZJTEUgZmxhZyB0byAiOmNzY29wZSIuIChHYXJ5IEpvaG5zb24pCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmgKKworUGF0Y2ggNi4yLjIyMgorUHJvYmxlbTogICAgVXNpbmcgIi0tcmVtb3RlIiBzZXZlcmFsIHRpbWVzIG9uIGEgcm93IG9ubHkgb3BlbnMgc29tZSBvZiB0aGUKKwkgICAgZmlsZXMuIChEYW55IFN0LUFtYW50KQorU29sdXRpb246ICAgRG9uJ3QgZGVsZXRlIGFsbCB0eXBlaGVhZCB3aGVuIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMgYSBjb21tYW5kIGZyb20KKwkgICAgYSBjbGllbnQsIG9ubHkgZGVsZXRlIHR5cGVkIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4yLjIyMworUHJvYmxlbTogICAgQ3Njb3BlOiBBdm9pZCBhIGhhbmcgd2hlbiBjc2NvcGUgd2FpdHMgZm9yIGEgcmVzcG9uc2Ugd2hpbGUgVmltCisJICAgIHdhaXRzIGZvciBhIHByb21wdC4KKwkgICAgRXJyb3IgbWVzc2FnZXMgZnJvbSBDc2NvcGUgbWVzcyB1cCB0aGUgZGlzcGxheS4KK1NvbHV0aW9uOiAgIERldGVjdCB0aGUgaGl0LWVudGVyIG1lc3NhZ2UgYW5kIHJlc3BvbmQgYnkgc2VuZGluZyBhIHJldHVybgorCSAgICBjaGFyYWN0ZXIgdG8gY3Njb3BlLiAoR2FyeSBKb2huc29uKQorCSAgICBVc2UgRU1TRygpIGFuZCBzdHJlcnJvcigpIHdoZW4gcG9zc2libGUuICBSZXBsYWNlIHBlcnJvcigpIHdpdGgKKwkgICAgUEVSUk9SKCkgZXZlcnl3aGVyZSwgYWRkIGVtc2czKCkuCitGaWxlczoJICAgIHNyYy9kaWZmLmMsIHNyYy9pZl9jc2NvcGUuYywgc3JjL2ludGVncmF0aW9uLmMsIHNyYy9tZXNzYWdlLmMsCisJICAgIHNyYy9wcm90by9tZXNzYWdlLnBybywgc3JjL21pc2MyLmMsIHNyYy9uZXRiZWFucy5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjIyNAorUHJvYmxlbTogICAgTWFjOiBDYW4ndCBjb21waWxlIHdpdGggc21hbGwgZmVhdHVyZXMuIChBeGVsIEtpZWxob3JuKQorU29sdXRpb246ICAgQWxzbyBpbmNsdWRlIHZpbV9jaGRpcmZpbGUoKSB3aGVuIGNvbXBpbGluZyBmb3IgdGhlIE1hYy4KK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4yLjIyNQorUHJvYmxlbTogICAgTmV0QmVhbnM6IFJlcG9ydGVkIG1vZGlmaWVkIHN0YXRlIGlzbid0IGV4YWN0bHkgcmlnaHQuCitTb2x1dGlvbjogICBSZXBvcnQgYSBmaWxlIGJlaW5nIG1vZGlmaWVkIGluIHRoZSBOZXRCZWFucyB3YXkuCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jCisKK1BhdGNoIDYuMi4yMjYgKGFmdGVyIDYuMi4xMDcpIChleHRyYSkKK1Byb2JsZW06ICAgIFRoZSAid3MyLTMyLmxpYiIgZmlsZSBpc24ndCBhbHdheXMgYXZhaWxhYmxlLgorU29sdXRpb246ICAgVXNlICJXU29jazMyLmxpYiIgaW5zdGVhZC4gKFRhcm8gTXVyYW9rYSwgRGFuIFNoYXJwKQorRmlsZXM6CSAgICBzcmMvTWFrZV9jeWcubWFrLCBzcmMvTWFrZV9taW5nLm1haywgc3JjL01ha2VfbXZjLm1haworCitQYXRjaCA2LjIuMjI3IChleHRyYSkKK1Byb2JsZW06ICAgIFRoZSAiUEMiIHN5bWJvbCBpcyBkZWZpbmVkIGJ1dCBub3QgdXNlZCBhbnl3aGVyZS4KK1NvbHV0aW9uOiAgIFJlbW92ZSAiLURQQyIgZnJvbSB0aGUgbWFrZWZpbGVzLgorRmlsZXM6CSAgICBzcmMvTWFrZV9iYzMubWFrLCBzcmMvTWFrZV9iYzUubWFrLCBzcmMvTWFrZV9jeWcubWFrLAorCSAgICBzcmMvTWFrZV9taW5nLm1haworCitQYXRjaCA2LjIuMjI4CitQcm9ibGVtOiAgICBSZWNlaXZpbmcgQ1RSTC1cIENUUkwtTiBhZnRlciB0eXBpbmcgImYiIG9yICJtIiBkb2Vzbid0IHN3aXRjaCBWaW0KKwkgICAgYmFjayB0byBOb3JtYWwgbW9kZS4gIFNhbWUgZm9yIENUUkwtXCBDVFJMLUcuCitTb2x1dGlvbjogICBDaGVjayBpZiB0aGUgY2hhcmFjdGVyIHR5cGVkIGFmdGVyIGEgY29tbWFuZCBpcyBDVFJMLVwgYW5kIG9idGFpbgorCSAgICBhbm90aGVyIGNoYXJhY3RlciB0byBjaGVjayBmb3IgQ1RSTC1OIG9yIENUUkwtRywgd2FpdGluZyB1cCB0bworCSAgICAndHRpbWVvdXRsZW4nIG1zZWMuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMjI5CitQcm9ibGVtOiAgICAiOmZ1bmN0aW9uIiB3aXRoIGEgbmFtZSB0aGF0IHVzZXMgbWFnaWMgY3VybGllcyBkb2VzIG5vdCB3b3JrCisJICAgIGluc2lkZSBhIGZ1bmN0aW9uLiAgKFNlcnZhdGl1cyBCcmFuZHQpCitTb2x1dGlvbjogICBTa2lwIG92ZXIgdGhlIGZ1bmN0aW9uIG5hbWUgcHJvcGVybHkuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4yLjIzMCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogYSBjb21wbGV4IHBhdHRlcm4gbWF5IGNhdXNlIGEgY3Jhc2guCitTb2x1dGlvbjogICBVc2UgX190cnkgYW5kIF9fZXhjZXB0IHRvIGNhdGNoIHRoZSBleGNlcHRpb24gYW5kIGhhbmRsZSBpdAorCSAgICBncmFjZWZ1bGx5LCB3aGVuIHBvc3NpYmxlLiAgQWRkIG15cmVzZXRzdGtvZmx3KCkgdG8gcmVzZXQgdGhlCisJICAgIHN0YWNrIG92ZXJmbG93LiAoQmVuamFtaW4gUGV0ZXJzb24pCitGaWxlczoJICAgIHNyYy9NYWtlX2JjNS5tYWssIHNyYy9vc19tc3dpbi5jIHNyYy9vc193aW4zMi5jLCBzcmMvb3Nfd2luMzIuaCwKKwkgICAgc3JjL3Byb3RvL29zX3dpbjMyLnBybywgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMi4yMzEgKGFmdGVyIDYuMi4wNDYpCitQcm9ibGVtOiAgICBWYXJpb3VzIHByb2JsZW1zIHdoZW4gYW4gZXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZCBmcm9tIHdpdGhpbiBhCisJICAgIGJ1aWx0aW4gZnVuY3Rpb24uICBXaGVuIGl0IGlzIGludm9rZWQgd2hpbGUgZXZhbHVhdGluZyBhcmd1bWVudHMKKwkgICAgdG8gYSBmdW5jdGlvbiBmb2xsb3dpbmcgYXJndW1lbnRzIGFyZSBzdGlsbCBldmFsdWF0ZWQuICBXaGVuCisJICAgIGludm9rZWQgd2l0aCBhIGxpbmUgcmFuZ2UgaXQgd2lsbCBiZSBjYWxsZWQgZm9yIHJlbWFpbmluZyBsaW5lcy4KK1NvbHV0aW9uOiAgIFVwZGF0ZSAiZm9yY2VfYWJvcnQiIGFsc28gYWZ0ZXIgY2FsbGluZyBhIGJ1aWx0aW4gZnVuY3Rpb24sIHNvCisJICAgIHRoYXQgYWJvcnRpbmcoKSBhbHdheXMgcmV0dXJucyB0aGUgY29ycmVjdCB2YWx1ZS4gKFNlcnZhdGl1cworCSAgICBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9leF9ldmFsLmMsIHNyYy9wcm90by9leF9ldmFsLnBybywKKwkgICAgc3JjL3Rlc3RkaXIvdGVzdDQ5Lm9rLCBzcmMvdGVzdGRpci90ZXN0NDkudmltCisKK1BhdGNoIDYuMi4yMzIKK1Byb2JsZW06ICAgICI6cHl0aG9uIHZpbS5jb21tYW5kKCdweXRob24gcHJpbnQgMioyJykiIGNyYXNoZXMgVmltLiAgKEV1Z2VuZQorCSAgICBNaW5rb3Zza2lpKQorU29sdXRpb246ICAgRGlzYWxsb3cgZXhlY3V0aW5nIGEgUHl0aG9uIGNvbW1hbmQgcmVjdXJzaXZlbHkgYW5kIGdpdmUgYW4gZXJyb3IKKwkgICAgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMi4yMzMKK1Byb2JsZW06ICAgIE9uIE1hYyBPU1ggYWRkaW5nIC1wdGhyZWFkIGZvciBQeXRob24gb25seSBnZW5lcmF0ZXMgYSB3YXJuaW5nLgorCSAgICBUaGUgdGVzdCBmb3IgUGVybCB0aHJlYWRzIHJlamVjdHMgUGVybCB3aGlsZSBpdCdzIE9LLgorCSAgICBUY2wgZG9lc24ndCB3b3JrIGF0IGFsbC4KKwkgICAgVGhlIHRlc3QgZm9yIFJ1YnkgZmFpbHMgaWYgcnVieSBleGlzdHMgYnV0IHRoZXJlIGFyZSBubyBoZWFkZXIKKwkgICAgZmlsZXMuICBUaGUgUnVieSBsaWJyYXJ5IGlzbid0IGRldGVjdGVkIHByb3Blcmx5CitTb2x1dGlvbjogICBBdm9pZCBhZGRpbmcgLXB0aHJlYWQgb24gTWFjIE9TWC4gIEFjY2VwdCBQZXJsIHRocmVhZHMgd2hlbiBpdCdzCisJICAgIG5vdCB0aGUgNS41IHRocmVhZHMuCisJICAgIFVzZSB0aGUgVGNsIGZyYW1ld29yayBmb3IgaGVhZGVyIGZpbGVzLiAgRm9yIFJ1YnkgcmVuYW1lIGNXaW5kb3cKKwkgICAgdG8gY1ZpbVdpbmRvdyB0byBhdm9pZCBhIG5hbWUgY2xhc2guIChLZW4gU2NvdHQpCisJICAgIE9ubHkgZW5hYmxlIFJ1Ynkgd2hlbiB0aGUgaGVhZGVyIGZpbGVzIGNhbiBiZSBmb3VuZC4gIFVzZSAiLWxydWJ5IgorCSAgICBpbnN0ZWFkIG9mICJsaWJydWJ5LmEiIHdoZW4gaXQgY2FuJ3QgYmUgZm91bmQuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2lmX3J1YnkuYworCitQYXRjaCA2LjIuMjM0CitQcm9ibGVtOiAgICBHVEsgMiBHVUk6ICI6c3AiIGFuZCB0aGUgIjpxIiBsZWF2ZXMgdGhlIGN1cnNvciBvbiB0aGUgY29tbWFuZAorCSAgICBsaW5lLgorU29sdXRpb246ICAgRmx1c2ggb3V0cHV0IGJlZm9yZSByZW1vdmluZyBzY3JvbGxiYXJzLiAgQWxzbyBkbyB0aGlzIGluIG90aGVyCisJICAgIHBsYWNlcyB3aGVyZSBndWlfbWNoXyooKSBmdW5jdGlvbnMgYXJlIGludm9rZWQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9vcHRpb24uYywgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMi4yMzUgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IEN1cnNvciBpc24ndCByZW1vdmVkIHdpdGggYSAyNXg4MCB3aW5kb3cgYW5kIGRvaW5nOgorCSAgICAiMTgzMGlhPEVzYz40MDBhLTxFc2M+MHcwIi4gKFlhc3VoaXJvIE1hdHN1bW90bykKK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgY2FsbCB0byBndWlfdW5kcmF3X2N1cnNvcigpIGZyb20gZ3VpX21jaF9pbnNlcnRfbGluZXMoKS4KK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjIuMjM2CitQcm9ibGVtOiAgICBVc2luZyBndmltIHdpdGggQWdpZGUgZ2l2ZXMgImNvbm5lY3Rpb24gbG9zdCIgZXJyb3IgbWVzc2FnZXMuCitTb2x1dGlvbjogICBPbmx5IGdpdmUgdGhlICJjb25uZWN0aW9uIGxvc3QiIG1lc3NhZ2Ugd2hlbiB0aGUgYnVmZmVyIHdhcyBvbmNlCisJICAgIG93bmVkIGJ5IE5ldEJlYW5zLgorRmlsZXM6CSAgICBzcmMvbmV0YmVhbnMuYywgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjIuMjM3CitQcm9ibGVtOiAgICBHVEsgMjogVGhhaSB0ZXh0IGlzIGRyYXduIHdyb25nLiAgSXQgY2hhbmdlcyB3aGVuIG1vdmluZyB0aGUKKwkgICAgY3Vyc29yIG92ZXIgaXQuCitTb2x1dGlvbjogICBEaXNhYmxlIHRoZSBzaGFwaW5nIGVuZ2luZSwgaXQgbW92ZXMgY29tYmluaW5nIGNoYXJhY3RlcnMgdG8gYQorCSAgICB3cm9uZyBwb3NpdGlvbiBhbmQgY29tYmluZXMgY2hhcmFjdGVycywgd2hpbGUgZHJhd2luZyB0aGUgY3Vyc29yCisJICAgIGRvZXNuJ3QgY29tYmluZSBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA2LjIuMjM4IChhZnRlciA2LjIuMjMxKQorUHJvYmxlbTogICAgIjpmdW5jdGlvbiIgZG9lcyBub3Qgd29yayBpbnNpZGUgYSB3aGlsZSBsb29wLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIEFkZCBnZXRfd2hpbGVfbGluZSgpIGFuZCBwYXNzIGl0IHRvIGRvX29uZV9jbWQoKSB3aGVuIGluIGEgd2hpbGUKKwkgICAgbG9vcCwgc28gdGhhdCBhbGwgbGluZXMgYXJlIHN0b3JlZCBhbmQgY2FuIGJlIHVzZWQgYWdhaW4gd2hlbgorCSAgICByZXBlYXRpbmcgdGhlIGxvb3AuCisJICAgIEFkanVzdCB0ZXN0IDQ5IHNvIHRoYXQgaXQgY2hlY2tzIGZvciB0aGUgZml4ZWQgcHJvYmxlbXMuCisJICAgIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBzcmMvZGlncmFwaC5jLCBzcmMvZXhfY21kczIuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9leF9ldmFsLmMsCisJICAgIHNyYy9wcm90by9leF9jbWRzMi5wcm8sIHNyYy9wcm90by9leF9kb2NtZC5wcm8sCisJICAgIHNyYy90ZXN0ZGlyL3Rlc3Q0OS5pbiwgc3JjL3Rlc3RkaXIvdGVzdDQ5Lm9rLAorCSAgICBzcmMvdGVzdGRpci90ZXN0NDkudmltCisKK1BhdGNoIDYuMi4yMzkKK1Byb2JsZW06ICAgIEdUSyAyOiBXaXRoIGNsb3NlZCBmb2xkcyB0aGUgYXJyb3cgYnV0dG9ucyBvZiBhIHZlcnRpY2FsIHNjcm9sbGJhcgorCSAgICBvZnRlbiBkb2Vzbid0IHNjcm9sbC4gKE1vc2hlIEthbWluc2t5KQorU29sdXRpb246ICAgSGFja2lzaCBzb2x1dGlvbjogRGV0ZWN0IHRoYXQgdGhlIGJ1dHRvbiB3YXMgcHJlc3NlZCBmcm9tIHRoZQorCSAgICBtb3VzZSBwb2ludGVyIHBvc2l0aW9uLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0ay5jLCBzcmMvZ3VpLmMKKworUGF0Y2ggNi4yLjI0MAorUHJvYmxlbTogICAgR1RLIDI6IFNlYXJjaGluZyBmb3IgYml0bWFwcyBmb3IgdGhlIHRvb2xiYXIgZG9lc24ndCB3b3JrIGFzIHdpdGgKKwkgICAgb3RoZXIgc3lzdGVtcy4gIE5lZWQgdG8gZXhwbGljaXRseSB1c2UgImljb249bmFtZSIuICAoTmVkIEtvbnosCisJICAgIENocmlzdGlhbiBKLiAgUm9iaW5zb24pCitTb2x1dGlvbjogICBTZWFyY2ggZm9yIGljb25zIGxpa2UgZG9uZSBmb3IgTW90aWYuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMKKworUGF0Y2ggNi4yLjI0MQorUHJvYmxlbTogICAgR1RLIDI6IFNlYXJjaCBhbmQgU2VhcmNoL1JlcGxhY2UgZGlhbG9ncyBhcmUgc3luY2VkLCB0aGF0IG1ha2VzIG5vCisJICAgIHNlbnNlLiAgQnV0dG9ucyBhcmUgc29tZXRpbWVzIGdyZXllZC1vdXQuIChKZXJlbXkgTWVzc2VuZ2VyKQorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBjb2RlIHRvIHN5bmMgdGhlIHR3byBkaWFsb2dzLiAgQWRqdXN0IHRoZSBjb2RlIHRvIHJlYWN0CisJICAgIHRvIGFuIGVtcHR5IHNlYXJjaCBzdHJpbmcgdG8gYWxzbyB3b3JrIGZvciBHVEsyLiAoRGF2aWQgTmVjYXMpCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMKKworUGF0Y2ggNi4yLjI0MgorUHJvYmxlbTogICAgR25vbWU6ICJ2aW0gLS1oZWxwIiBvbmx5IHNob3dzIHRoZSBHbm9tZSBhcmd1bWVudHMsIG5vdCB0aGUgVmltCisJICAgIGFyZ3VtZW50cy4KK1NvbHV0aW9uOiAgIERvbid0IGxldCB0aGUgR25vbWUgY29kZSByZW1vdmUgdGhlICItLWhlbHAiIGFyZ3VtZW50IGFuZCBkb24ndAorCSAgICBleGl0IGF0IHRoZSBlbmQgb2YgdXNhZ2UoKS4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9tYWluLmMKKworUGF0Y2ggNi4yLjI0MyAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWM6IERyb3BwaW5nIGEgZmlsZSBvbiBhIFZpbSBpY29uIGNhdXNlcyBhIGhpdC1lbnRlciBwcm9tcHQuCitTb2x1dGlvbjogICBNb3ZlIHRoZSBkcm9wcGVkIGZpbGVzIHRvIHRoZSBnbG9iYWwgYXJndW1lbnQgbGlzdCwgaW5zdGVhZCBvZiB0aGUKKwkgICAgdXN1YWwgZHJvcCBoYW5kbGluZy4gKEVja2VoYXJkIEJlcm5zKQorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvZ3VpX21hYy5jCisKK1BhdGNoIDYuMi4yNDQKK1Byb2JsZW06ICAgICc6ZWNobyAiXHhmNyInIGRpc3BsYXlzIHRoZSBpbGxlZ2FsIGJ5dGUgYXMgaWYgaXQgd2FzIGEgY2hhcmFjdGVyCisJICAgIGFuZCBsZWF2ZXMgImNobyIgYWZ0ZXIgaXQuCitTb2x1dGlvbjogICBXaGVuIGNoZWNraW5nIHRoZSBsZW5ndGggb2YgYSBVVEYtOCBieXRlIHNlcXVlbmNlIGFuZCBpdCdzIHNob3J0ZXIKKwkgICAgdGhhbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSwgYXNzdW1lIGl0J3MgYW4gaWxsZWdhbCBieXRlLgorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjIuMjQ1CitQcm9ibGVtOiAgICBDb21wbGV0aW9uIGRvZXNuJ3Qgd29yayBmb3IgIjprZWVwbWFya3MiIGFuZCAiOmxvY2ttYXJrcyIuCitTb2x1dGlvbjogICBBZGQgdGhlIGNvbW1hbmQgbW9kaWZpZXJzIHRvIHRoZSB0YWJsZSBvZiBjb21tYW5kcy4gKE1hZG9rYQorCSAgICBNYWNoaXRhbmkpCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmgsIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi4yNDYKK1Byb2JsZW06ICAgIE1hYzogU3RhcnRpbmcgVmltIGZyb20gRmluZGVyIGRvZXNuJ3Qgc2hvdyBlcnJvciBtZXNzYWdlcy4KK1NvbHV0aW9uOiAgIFJlY29nbml6ZSB0aGF0IG91dHB1dCBpcyBiZWluZyBkaXNwbGF5ZWQgYnkgc3RkZXJyIGJlaW5nCisJICAgICIvZGV2L2NvbnNvbGUiLiAgKEVja2VoYXJkIEJlcm5zKQorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMi4yNDcgKGFmdGVyIDYuMi4xOTMpCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgc2VhcmNoIHBhdHRlcm4gZnJvbSB0aGUgdmltaW5mbyBmaWxlIHRoZSBsYXN0CisJICAgIGNoYXJhY3RlciBpcyByZXBsYWNlZCB3aXRoIGEgJy8nLgorU29sdXRpb246ICAgU3RvcmUgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgaW4gdGhlIHJpZ2h0IHBsYWNlLiAoS2VsdmluIExlZSkKK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNi4yLjI0OAorUHJvYmxlbTogICAgR1RLOiBXaGVuIFhJTSBpcyBlbmFibGVkIG5vcm1hbCAiMiIgYW5kIGtleXBhZCAiMiIgY2Fubm90IGJlCisJICAgIGRpc3Rpbmd1aXNoZWQuCitTb2x1dGlvbjogICBEZXRlY3QgdGhhdCBYSU0gY2hhbmdlcyB0aGUga2V5cGFkIGtleSB0byB0aGUgZXhwZWN0ZWQgQVNDSUkKKwkgICAgY2hhcmFjdGVyIGFuZCBmYWxsIGJhY2sgdG8gdGhlIG5vbi1YSU0gY29kZS4gKE5laWwgQmlyZCkKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9tYnl0ZS5jLCBzcmMvcHJvdG8vbWJ5dGUucHJvCisKK1BhdGNoIDYuMi4yNDkKK1Byb2JsZW06ICAgICI6Y25leHQiIG1vdmVzIHRvIHRoZSBlcnJvciBpbiB0aGUgbmV4dCBmaWxlLCBidXQgdGhlcmUgaXMgbm8KKwkgICAgbWV0aG9kIHRvIGdvIGJhY2suCitTb2x1dGlvbjogICBBZGQgIjpjcGZpbGUiIGFuZCAiOmNOZmlsZSIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmgsIHNyYy9xdWlja2ZpeC5jLCBzcmMvdmltLmgsIHJ1bnRpbWUvZG9jL3F1aWNrZml4LnR4dAorCitQYXRjaCA2LjIuMjUwCitQcm9ibGVtOiAgICBNZW1vcnkgbGVha3Mgd2hlbiB1c2luZyBzaWducy4gKFhhdmllciBkZSBHYXllKQorU29sdXRpb246ICAgRGVsZXRlIHRoZSBsaXN0IG9mIHNpZ25zIHdoZW4gdW5sb2FkaW5nIGEgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4yLjI1MQorUHJvYmxlbTogICAgR1RLOiBUaGUgJ3YnIGZsYWcgaW4gJ2d1aW9wdGlvbnMnIGRvZXNuJ3Qgd29yay4gKFN0ZXZlIEhhbGwpCisJICAgIE9yZGVyIG9mIGJ1dHRvbnMgaXMgcmV2ZXJzZWQgZm9yIEdUSyAyLjIuNC4gIERvbid0IGFsd2F5cyBnZXQKKwkgICAgZm9jdXMgYmFjayBhZnRlciBoYW5kbGluZyBhIGRpYWxvZy4KK1NvbHV0aW9uOiAgIE1ha2UgYnV0dG9ucyBhcHBlYXIgdmVydGljYWxseSB3aGVuIGRlc2lyZWQuICBSZXZlcnNlIHRoZSBvcmRlciBpbgorCSAgICB3aGljaCBidXR0b25zIGFyZSBhZGRlZCB0byBhIGRpYWxvZy4gIE1vdmUgbW91c2UgcG9pbnRlciBhcm91bmQKKwkgICAgd2hlbiB0aGUgZGlhbG9nIGlzIGRvbmUgYW5kIHdlIGRvbid0IGhhdmUgZm9jdXMuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMKKworUGF0Y2ggNi4yLjI1MiAoZXh0cmEsIGFmdGVyIDYuMi4yNDMpCitQcm9ibGVtOiAgICBNYWM6IERyb3BwaW5nIGEgZmlsZSBvbiBhIFZpbSBpY29uIGNhdXNlcyBhIGhpdC1lbnRlciBwcm9tcHQgZm9yCisJICAgIE1hYyBPUyBjbGFzc2ljLgorU29sdXRpb246ICAgUmVtb3ZlIHRoZSAjaWZkZWYgZnJvbSB0aGUgY29kZSB0aGF0IGZpeGVzIGl0IGZvciBNYWMgT1NYLgorRmlsZXM6CSAgICBzcmMvZ3VpX21hYy5jCisKK1BhdGNoIDYuMi4yNTMKK1Byb2JsZW06ICAgIFdoZW4gJ3RhZ3N0YWNrJyBpcyBub3Qgc2V0IGEgIjp0YWcgaWQiIGNvbW1hbmQgZG9lcyBub3Qgd29yayBhZnRlcgorCSAgICBhICI6dGp1bXAiIGNvbW1hbmQuCitTb2x1dGlvbjogICBTZXQgIm5ld190YWciIHdoZW4gJ3RhZ3N0YWNrJyBpc24ndCBzZXQuIChHLiBOYXJlbmRyYW4pCitGaWxlczoJICAgIHNyYy90YWcuYworCitQYXRjaCA2LjIuMjU0CitQcm9ibGVtOiAgICBNYXkgcnVuIG91dCBvZiBzcGFjZSBmb3IgZXJyb3IgbWVzc2FnZXMuCitTb2x1dGlvbjogICBLZWVwIHJvb20gZm9yIHR3byBtb3JlIGJ5dGVzLgorRmlsZXM6CSAgICBzcmMvcXVpY2tmaXguYworCitQYXRjaCA2LjIuMjU1CitQcm9ibGVtOiAgICBHVEs6IEEgbmV3IGl0ZW0gaW4gdGhlIHBvcHVwIG1lbnUgaXMgcHV0IGp1c3QgYWZ0ZXIgaW5zdGVhZCBvZgorCSAgICBqdXN0IGJlZm9yZSB0aGUgcmlnaHQgaXRlbS4gKEdhYnJpZWwgWmFjaG1hbm4pCitTb2x1dGlvbjogICBEb24ndCBpbmNyZW1lbnQgdGhlIG1lbnUgaXRlbSBpbmRleC4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYworCitQYXRjaCA2LjIuMjU2CitQcm9ibGVtOiAgICBNYWM6ICJtYWNyb21hbiIgZW5jb2RpbmcgaXNuJ3QgcmVjb2duaXplZCwgbmVlZCB0byB1c2UKKwkgICAgIjhiaXQtbWFjcm9tYW4uCitTb2x1dGlvbjogICBSZWNvZ25pemUgIm1hY3JvbWFuIiB3aXRoIGFuIGFsaWFzICJtYWMiLiAoRWNrZWhhcmQgQmVybnMpCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMi4yNTcgKGFmdGVyIDYuMi4yNTApCitQcm9ibGVtOiAgICBTaWducyBhcmUgZGVsZXRlZCBmb3IgIjpiZGVsIiwgYnV0IHRoZXkgY291bGQgc3RpbGwgYmUgdXNlZnVsLgorU29sdXRpb246ICAgRGVsZXRlIHNpZ25zIG9ubHkgZm9yICI6YndpcGUiLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4yLjI1OAorUHJvYmxlbTogICAgR1VJOiBjYW4ndCBkaXNhYmxlIChncmV5LW91dCkgYSBwb3B1cCBtZW51IGl0ZW0uICAoQWppdCBUaGFra2FyKQorU29sdXRpb246ICAgTG9vcCBvdmVyIHRoZSBwb3B1cCBtZW51cyBmb3IgYWxsIG1vZGVzLgorRmlsZXM6CSAgICBzcmMvbWVudS5jCisKK1BhdGNoIDYuMi4yNTkKK1Byb2JsZW06ICAgIElmIHRoZXJlIGFyZSBtZXNzYWdlcyB3aGVuIGV4aXRpbmcsIG9uIHRoZSBjb25zb2xlIHRoZXJlIGlzIGEKKwkgICAgaGl0LWVudGVyIHByb21wdCB3aGlsZSB0aGUgbWVzc2FnZSBjYW4gYmUgcmVhZDsgaW4gdGhlIEdVSSB0aGUKKwkgICAgbWVzc2FnZSBtYXkgbm90IGJlIHZpc2libGUuCitTb2x1dGlvbjogICBVc2UgdGhlIGhpdC1lbnRlciBwcm9tcHQgd2hlbiB0aGVyZSBpcyBhbiBlcnJvciBtZXNzYWdlIGZyb20KKwkgICAgd3JpdGluZyB0aGUgdmltaW5mbyBmaWxlIG9yIGF1dG9jb21tYW5kcywgb3Igd2hlbiB0aGVyZSBpcyBhbnkKKwkgICAgb3V0cHV0IGluIHRoZSBHVUkgYW5kICd2ZXJib3NlJyBpcyBzZXQuICBEb24ndCB1c2UgYSBoaXQtZW50ZXIKKwkgICAgcHJvbXB0IGZvciB0aGUgbm9uLUdVSSB2ZXJzaW9uIHVubGVzcyB0aGVyZSBpcyBhbiBlcnJvciBtZXNzYWdlLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMi4yNjAKK1Byb2JsZW06ICAgIEdUSyAyOiBDYW4ndCBxdWl0IGEgZGlhbG9nIHdpdGggPEVzYz4uCisJICAgIEdUSyAxIGFuZCAyOiA8RW50ZXI+IGFsd2F5cyBnaXZlcyBhIHJlc3VsdCwgZXZlbiB3aGVuIHRoZSBkZWZhdWx0CisJICAgIGJ1dHRvbiBoYXMgYmVlbiBkaXNhYmxlZC4KK1NvbHV0aW9uOiAgIEhhbmRsZSB0aGVzZSBrZXlzIGV4cGxpY2l0bHkuICBXaGVuIG5vIGRlZmF1bHQgYnV0dG9uIGlzIHNwZWNpZmllZAorCSAgICB1c2UgdGhlIGZpcnN0IG9uZSAod29ya3MgbW9zdGx5IGxpa2UgaXQgd2FzIGJlZm9yZSkuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMKKworUGF0Y2ggNi4yLjI2MQorUHJvYmxlbTogICAgV2hlbiAnYXV0b2luZGVudCcgYW5kICdjaW5kZW50JyBhcmUgc2V0IGFuZCBhIGxpbmUgaXMgcmVjb2duaXplZAorCSAgICBhcyBhIGNvbW1lbnQsIHN0YXJ0aW5nIGEgbmV3IGxpbmUgd29uJ3QgZG8gJ2NpbmRlbnQnIGZvcm1hdHRpbmcuCitTb2x1dGlvbjogICBBbHNvIHVzZSAnY2luZGVudCcgZm9ybWF0dGluZyBmb3IgbGluZXMgdGhhdCBhcmUgdXNlZCBhcyBhCisJICAgIGNvbW1lbnQuIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA2LjIuMjYyCitQcm9ibGVtOiAgICAxIENUUkwtVyB3IGJlZXBzLCBldmVuIHRob3VnaCBnb2luZyB0byB0aGUgZmlyc3Qgd2luZG93IGlzCisJICAgIHBvc3NpYmxlLiAoQ2hhcmxlcyBDYW1wYmVsbCkKK1NvbHV0aW9uOiAgIERvbid0IGJlZXAuCitGaWxlczoJICAgIHNyYy93aW5kb3cuYworCitQYXRjaCA2LjIuMjYzCitQcm9ibGVtOiAgICBMaW50IHdhcm5pbmdzOiBEdXBsaWNhdGUgZnVuY3Rpb24gcHJvdG90eXBlcywgZHVwbGljYXRlIG1hY3JvcywKKwkgICAgdXNlIG9mIGEgemVybyBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBhIHplcm8gcG9pbnRlciwgdW51c2VkCisJICAgIHZhcmlhYmxlLiAgQ2xlYXJpbmcgYWxsb2NhdGVkIG1lbW9yeSBpbiBhIGNvbXBsaWNhdGVkIHdheS4KK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgZnVuY3Rpb24gcHJvdG90eXBlcyBmcm9tIGZhcnNpLmguICBSZW1vdmUgdGhlCisJICAgIGR1cGxpY2F0ZWQgbGluZXMgaW4ga2V5bWFwLmguICBDaGFuZ2UgZ2V0dmNvbCgpIGFyZ3VtZW50IGZyb20gTlVMCisJICAgIHRvIE5VTEwuICBSZW1vdmUgdGhlICJjb2wiIHZhcmlhYmxlIGluIHJlZ21hdGNoKCkuICBVc2UKKwkgICAgbGFsbG9jX2NsZWFyKCkgaW5zdGVhZCBvZiBsYWxsb2MoKS4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBzcmMvZmFyc2kuaCwgc3JjL2tleW1hcC5oLCBzcmMvb3BzLmMsIHNyYy9yZWdleHAuYywgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuMi4yNjQgKGFmdGVyIDYuMi4yNDcpCitQcm9ibGVtOiAgICBXcml0aW5nIHBhc3QgYWxsb2NhdGVkIG1lbW9yeSB3aGVuIHVzaW5nIGEgY29tbWFuZCBsaW5lIGZyb20gdGhlCisJICAgIHZpbWluZm8gZmlsZS4KK1NvbHV0aW9uOiAgIFN0b3JlIHRoZSBOVUwgaW4gdGhlIHJpZ2h0IHBsYWNlLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjIuMjY1CitQcm9ibGVtOiAgICBBbHRob3VnaCAiOnNldCIgaXMgbm90IGFsbG93ZWQgaW4gdGhlIHNhbmRib3gsICI6bGV0ICZvcHQgPSB2YWwiCisJICAgIHdvcmtzLgorU29sdXRpb246ICAgRG8gYWxsb3cgY2hhbmdpbmcgb3B0aW9ucyBpbiB0aGUgc2FuZGJveCwgYnV0IG5vdCB0aGUgb25lcyB0aGF0CisJICAgIGNhbid0IGJlIGNoYW5nZWQgZnJvbSBhIG1vZGVsaW5lLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5oLCBzcmMvb3B0aW9ucy5jCisKK1BhdGNoIDYuMi4yNjYKK1Byb2JsZW06ICAgIFdoZW4gcmVkaXJlY3Rpbmcgb3V0cHV0IGFuZCB1c2luZyAiOnNpbGVudCIsIGxpbmUgYnJlYWtzIGFyZQorCSAgICBtaXNzaW5nIGZyb20gb3V0cHV0IG9mICI6bWFwIiBhbmQgIjp0c2VsZWN0Ii4gIEFsaWdubWVudCBvZgorCSAgICBjb2x1bW5zIGlzIHdyb25nLgorU29sdXRpb246ICAgSW5zZXJ0IGEgbGluZSBicmVhayB3aGVyZSAibXNnX2RpZG91dCIgd2FzIHRlc3RlZC4gIFVwZGF0ZSBtc2dfY29sCisJICAgIHdoZW4gcmVkaXJlY3RpbmcgYW5kIHVzaW5nICI6c2lsZW50Ii4KK0ZpbGVzOgkgICAgc3JjL2dldGNoYXIuYywgc3JjL21lc3NhZ2UuYworCitQYXRjaCA2LjIuMjY3IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiAiJiYiIGluIGEgdGVhcm9mZiBtZW51IGlzIG5vdCBzaG93bi4gKEx1YyBIZXJtaXR0ZSkKK1NvbHV0aW9uOiAgIFVzZSB0aGUgIm5hbWUiIGl0ZW0gZnJvbSB0aGUgbWVudSBpbnN0ZWFkIG9mIHRoZSAiZG5hbWUiIGl0ZW0uCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMsIHNyYy9tZW51LmMKKworUGF0Y2ggNi4yLjI2OAorUHJvYmxlbTogICAgR1VJOiBXaGVuIGNoYW5naW5nICdndWlvcHRpb25zJyBwYXJ0IG9mIHRoZSB3aW5kb3cgbWF5IGJlIG9mZgorCSAgICBzY3JlZW4uIChSYW5kYWxsIE1vcnJpcykKK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgd2luZG93IHdoZW4gY2hhbmdpbmcgJ2d1aW9wdGlvbnMnLCBidXQgb25seQorCSAgICB3aGVuIGFkZGluZyBzb21ldGhpbmcuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjIuMjY5CitQcm9ibGVtOiAgICBEaWZmIG1vZGUgZG9lcyBub3QgaGlnaGxpZ2h0IGEgY2hhbmdlIGluIGEgY29tYmluaW5nIGNoYXJhY3Rlci4KKwkgICAgKFJhcGhhZWwgRmlua2VsKQorU29sdXRpb246ICAgTWFrZSBkaWZmX2ZpbmRfY2hhbmdlKCkgbXVsdGktYnl0ZSBhd2FyZTogZmluZCB0aGUgc3RhcnQgYnl0ZSBvZgorCSAgICBhIGNoYXJhY3RlciB0aGF0IGNvbnRhaW5zIGEgY2hhbmdlLgorRmlsZXM6CSAgICBzcmMvZGlmZi5jCisKK1BhdGNoIDYuMi4yNzAKK1Byb2JsZW06ICAgIENvbXBsZXRpb24gaW4gSW5zZXJ0IG1vZGUsIHRoZW4gcmVwZWF0aW5nIHdpdGggIi4iLCBkb2Vzbid0IGhhbmRsZQorCSAgICBjb21wb3NpbmcgY2hhcmFjdGVycyBpbiB0aGUgY29tcGxldGVkIHRleHQuIChSYXBoYWVsIEZpbmtlbCkKK1NvbHV0aW9uOiAgIERvbid0IHNraXAgb3ZlciBjb21wb3NpbmcgY2hhcnMgd2hlbiBhZGRpbmcgY29tcGxldGVkIHRleHQgdG8gdGhlCisJICAgIHJlZG8gYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jCisKK1BhdGNoIDYuMi4yNzEKK1Byb2JsZW06ICAgIE5ldEJlYW5zOiBDYW4ndCBkbyAidGFpbCAtZiIgb24gdGhlIGxvZy4gIFBhc3Npbmcgc29ja2V0IGluZm8gd2l0aAorCSAgICBhbiBhcmd1bWVudCBvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2VjdXJlLgorU29sdXRpb246ICAgV2FpdCBhZnRlciBpbml0aWFsaXppbmcgdGhlIGxvZy4gIEFsbG93IHBhc3NpbmcgdGhlIHNvY2tldCBpbmZvCisJICAgIHRocm91Z2ggYSBmaWxlLiAoR29yZG9uIFByaWV1cikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvbmV0YmVhbnMudHh0LCBzcmMvbWFpbi5jLCBzcmMvbmV0YmVhbnMuYworCitQYXRjaCA2LjIuMjcyCitQcm9ibGVtOiAgICBXaGVuIHRoZSAicG8iIGRpcmVjdG9yeSBleGlzdHMsIGJ1dCAicG8vTWFrZWZpbGUiIGRvZXNuJ3QsCisJICAgIGJ1aWxkaW5nIGZhaWxzLiAgTWFrZSBsb29wcyB3aGVuIHRoZSAicG8iIGRpcmVjdG9yeSBoYXMgYmVlbgorCSAgICBkZWxldGVkIGFmdGVyIHJ1bm5pbmcgY29uZmlndXJlLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIHRoZSAicG8vTWFrZWZpbGUiIGluc3RlYWQgb2YganVzdCB0aGUgInBvIiBkaXJlY3RvcnkuCisJICAgIENoZWNrIHRoaXMgYWdhaW4gYmVmb3JlIHRyeWluZyB0byBydW4gbWFrZSB3aXRoIHRoYXQgTWFrZWZpbGUuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL01ha2VmaWxlCisKK1BhdGNoIDYuMi4yNzMKK1Byb2JsZW06ICAgIENoYW5naW5nIHRoZSBzb3J0IG9yZGVyIGluIGFuIGV4cGxvcmVyIHdpbmRvdyBmb3IgYW4gZW1wdHkKKwkgICAgZGlyZWN0b3J5IHByb2R1Y2VzIGVycm9yIG1lc3NhZ2VzLiAoRG91ZyBLZWFybnMpCitTb2x1dGlvbjogICBXaGVuIGFuIGludmFsaWQgcmFuZ2UgaXMgdXNlZCBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG5vdCBnb2luZyB0bworCSAgICBiZSBleGVjdXRlZCwgc2tpcCBvdmVyIHRoZSBhcmd1bWVudHMgYW55d2F5LgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMi4yNzQKK1Byb2JsZW06ICAgICI6cHJpbnQiIHNraXBzIGVtcHR5IGxpbmVzIHdoZW4gJ2xpc3QnIGlzIHNldCBhbmQgdGhlcmUgaXMgbm8KKwkgICAgImVvbCIgaW4gJ2xpc3RjaGFycycuIChZYWtvdiBMZXJuZXIpCitTb2x1dGlvbjogICBTa2lwIG91dHB1dHRpbmcgYSBzcGFjZSBmb3IgYW4gZW1wdHkgbGluZSBvbmx5IHdoZW4gJ2xpc3QnIGlzIHNldAorCSAgICBhbmQgdGhlIGVuZC1vZi1saW5lIGNoYXJhY3RlciBpcyBub3QgZW1wdHkuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4yLjI3NSAoZXh0cmEsIGFmdGVyIDYuMi4yNjcpCitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdoZW4gdXNpbmcgZ2NjLgorU29sdXRpb246ICAgSW5pdGlhbGl6ZSAiYWNMZW4iIHRvIHplcm8uIChCaWxsIE1jQ2FydGh5KQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMi4yNzYKK1Byb2JsZW06ICAgICI6ZWNobyBYKCkiIGRvZXMgbm90IHB1dCBhIGxpbmUgYnJlYWsgYmV0d2VlbiB0aGUgbWVzc2FnZSB0aGF0IFgoKQorCSAgICBkaXNwbGF5cyBhbmQgdGhlIHRleHQgdGhhdCBYKCkgcmV0dXJucy4gKFlha292IExlcm5lcikKK1NvbHV0aW9uOiAgIEludm9rZSBtc2dfc3RhcnQoKSBhZnRlciBldmFsdWF0aW5nIHRoZSBhcmd1bWVudC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuMjc3CitQcm9ibGVtOiAgICBWaW0gY3Jhc2hlcyB3aGVuIGEgIjpydW50aW1lIGZ0cGx1Z2luL2FkYS52aW0iIGNhdXNlcyBhIHJlY3Vyc2l2ZQorCSAgICBsb29wLiAoUm9iZXJ0IE5vd290bmlhaykKK1NvbHV0aW9uOiAgIFJlc3RvcmUgIm1zZ19saXN0IiBiZWZvcmUgcmV0dXJuaW5nIGZyb20gZG9fY21kbGluZSgpLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjIuMjc4CitQcm9ibGVtOiAgICBVc2luZyAibXVjaCIgaW5zdGVhZCBvZiAibWFueSIuCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSBlcnJvciBtZXNzYWdlLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMi4yNzkKK1Byb2JsZW06ICAgIFRoZXJlIGlzIG5vIGRlZmF1bHQgY2hvaWNlIGZvciBhIGNvbmZpcm0oKSBkaWFsb2csIG5vdyB0aGF0IGl0IGlzCisJICAgIHBvc3NpYmxlIG5vdCB0byBoYXZlIGEgZGVmYXVsdCBjaG9pY2UuCitTb2x1dGlvbjogICBNYWtlIHRoZSBmaXJzdCBjaG9pY2UgdGhlIGRlZmF1bHQgY2hvaWNlLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9ldmFsLnR4dCwgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuMjgwCitQcm9ibGVtOiAgICAiZG8iIGFuZCAiOmRpZmZnZXQiIGRvbid0IHdvcmsgaW4gdGhlIGZpcnN0IGxpbmUgYW5kIHRoZSBsYXN0IGxpbmUKKwkgICAgb2YgYSBidWZmZXIuIChBcm9uIEdyaWZmaXMpCitTb2x1dGlvbjogICBGaW5kIGEgZGlmZmVyZW5jZSBhYm92ZSB0aGUgZmlyc3QgbGluZSBhbmQgYmVsb3cgdGhlIGxhc3QgbGluZS4KKwkgICAgQWxzbyBmaXggYSBmZXcgZGlzcGxheSB1cGRhdGluZyBidWdzLgorRmlsZXM6CSAgICBzcmMvZGlmZi5jLCBzcmMvZm9sZC5jLCBzcmMvbW92ZS5jCisKK1BhdGNoIDYuMi4yODEKK1Byb2JsZW06ICAgIFBvc3RTY3JpcHQgcHJpbnRpbmcgZG9lc24ndCB3b3JrIG9uIE1hYyBPUyBYIDEwLjMuMi4KK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgaGVhZGVyIGZpbGUuIChNaWtlIFdpbGxpYW1zKQorRmlsZXM6CSAgICBydW50aW1lL3ByaW50L3Byb2xvZy5wcworCitQYXRjaCA2LjIuMjgyCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIENUUkwtTyB0byBnbyBiYWNrIHRvIGEgaGVscCBmaWxlLCBpdCBiZWNvbWVzIGxpc3RlZC4KKwkgICAgKEFuZHJldyBOZXNiaXQpCisJICAgIFVzaW5nICI6dGFnIiBvciAiOnRqdW1wIiBpbiBhIGhlbHAgZmlsZSBkb2Vzbid0IGtlZXAgdGhlIGhlbHAgZmlsZQorCSAgICBzZXR0aW5ncyAoZS5nLiBmb3IgJ2lza2V5d29yZCcpLgorU29sdXRpb246ICAgRG9uJ3QgbWFyayBhIGJ1ZmZlciBhcyBsaXN0ZWQgd2hlbiBpdHMgaGVscCBmbGFnIGlzIHNldC4gIFB1dCBhbGwKKwkgICAgdGhlIG9wdGlvbiBzZXR0aW5ncyBmb3IgYSBoZWxwIGJ1ZmZlciB0b2dldGhlciBpbiBkb19lY21kKCkuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4yLjI4MworUHJvYmxlbTogICAgVGhlICJsb2NhbCBhZGRpdGlvbnMiIGluIGhlbHAudHh0IGFyZSB1c2VkIHdpdGhvdXQgY29udmVyc2lvbiwKKwkgICAgY2F1c2luZyBsYXRpbjEgY2hhcmFjdGVycyBzaG93aW5nIHVwIHdyb25nIHdoZW4gJ2VuYycgaXMgdXRmLTguCisJICAgIChBbnRvaW5lIEouIE1lY2hlbHluY2spCitTb2x1dGlvbjogICBDb252ZXJ0IHRoZSB0ZXh0IHRvICdlbmNvZGluZycuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4yLjI4NAorUHJvYmxlbTogICAgTGlzdGluZyBhIGZ1bmN0aW9uIHB1dHMgImVuZGZ1bmN0aW9uIiBpbiB0aGUgbWVzc2FnZSBoaXN0b3J5LgorCSAgICBUeXBpbmcgInEiIGF0IHRoZSBtb3JlIHByb21wdCBpc24ndCBoYW5kbGVkIGNvcnJlY3RseSB3aGVuIGxpc3RpbmcKKwkgICAgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMuICAoSGFyYSBLcmlzaG5hIERhcmEpCitTb2x1dGlvbjogICBEb24ndCB1c2UgbXNnKCkgZm9yICJlbmRmdW5jdGlvbiIuICBDaGVjayAiZ290X2ludCIgcmVndWxhcmx5LgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMi4yODUKK1Byb2JsZW06ICAgIEdVSTogSW4gYSBzaW5nbGUgd3JhcHBlZCBsaW5lIHRoYXQgZmlsbHMgdGhlIHdpbmRvdywgImdqIiBpbiB0aGUKKwkgICAgbGFzdCBzY3JlZW4gbGluZSBsZWF2ZXMgdGhlIGN1cnNvciBiZWhpbmQuIChJdmFuIFRhcmFzb3YpCitTb2x1dGlvbjogICBVbmRyYXcgdGhlIGN1cnNvciBiZWZvcmUgc2Nyb2xsaW5nIHRoZSB0ZXh0IHVwLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4yLjI4NgorUHJvYmxlbTogICAgV2hlbiB0cnlpbmcgdG8gcmVuYW1lIGEgZmlsZSBhbmQgaXQgZG9lc24ndCBleGlzdCwgdGhlIGRlc3RpbmF0aW9uCisJICAgIGZpbGUgaXMgZGVsZXRlZCBhbnl3YXkuIChMdWMgRGV1eCkKK1NvbHV0aW9uOiAgIERvbid0IGRlbGV0ZSB0aGUgZGVzdGluYXRpb24gd2hlbiB0aGUgc291cmNlIGRvZXNuJ3QgZXhpc3QuIChUYXJvCisJICAgIE11cmFva2EpCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjIuMjg3IChhZnRlciA2LjIuMjY0KQorUHJvYmxlbTogICAgRHVwbGljYXRlIGxpbmVzIGFyZSBhZGRlZCB0byB0aGUgdmltaW5mbyBmaWxlLgorU29sdXRpb246ICAgQ29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgd2l0aG91dCBhbiBvZmZzZXQuICBBbHNvIGZpeGVzCisJICAgIHJlYWRpbmcgdmVyeSBsb25nIGhpc3RvcnkgbGluZXMgZnJvbSB2aW1pbmZvLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjIuMjg4IChleHRyYSkKK1Byb2JsZW06ICAgIE1hYzogQW4gZXh0ZXJuYWwgcHJvZ3JhbSBjYW4ndCBiZSBpbnRlcnJ1cHRlZC4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSB0aGUgJ2MnIGtleSBmb3IgYmFja3NwYWNlLiAoRWNrZWhhcmQgQmVybnMpCitGaWxlczoJICAgIHNyYy9ndWlfbWFjLmMKKworUGF0Y2ggNi4yLjI4OQorUHJvYmxlbTogICAgQ29tcGlsaW5nIHRoZSBUY2wgaW50ZXJmYWNlIHdpdGggdGhyZWFkIHN1cHBvcnQgY2F1c2VzICI6bWFrZSIgdG8KKwkgICAgZmFpbC4gIChKdWVyZ2VuIFNhbGspCitTb2x1dGlvbjogICBVc2UgJFRDTF9ERUZTIGZyb20gdGhlIFRjbCBjb25maWcgc2NyaXB0IHRvIG9idGFpbiB0aGUgcmVxdWlyZWQKKwkgICAgY29tcGlsZSBmbGFncyBmb3IgdXNpbmcgdGhlIHRocmVhZCBsaWJyYXJ5LgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4yLjI5MCAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWM6IFRoZSBtb3VzZXdoZWVsIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEFkZCBtb3VzZXdoZWVsIHN1cHBvcnQuICBBbHNvIGZpeCB1cGRhdGluZyB0aGUgdGh1bWIgYWZ0ZXIgYSBkcmFnCisJICAgIGFuZCB0aGVuIHVzaW5nIGFub3RoZXIgd2F5IHRvIHNjcm9sbC4gIChFY2tlaGFyZCBCZXJucykKK0ZpbGVzOgkgICAgc3JjL2d1aV9tYWMuYworCitQYXRjaCA2LjIuMjkxIChleHRyYSkKK1Byb2JsZW06ICAgIE1hYzogdGhlIHBsdXMgYnV0dG9uIGFuZCBjbG9zZSBidXR0b24gZG9uJ3QgZG8gYW55dGhpbmcuCitTb2x1dGlvbjogICBNYWtlIHRoZSBwbHVzIGJ1dHRvbiBtYXhpbWl6ZSB0aGUgd2luZG93IGFuZCB0aGUgY2xvc2UgYnV0dG9uCisJICAgIGNsb3NlIFZpbS4gKEVja2VoYXJkIEJlcm5zKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMsIHNyYy9ndWlfbWFjLmMKKworUGF0Y2ggNi4yLjI5MgorUHJvYmxlbTogICAgTW90aWY6IFdoZW4gcmVtb3ZpbmcgR1VJIGFyZ3VtZW50cyBmcm9tIGFyZ3ZbXSBhICJwcyAtZWYiIHNob3dzCisJICAgIHRoZSBsYXN0IGFyZ3VtZW50IHJlcGVhdGVkLgorU29sdXRpb246ICAgU2V0IGFyZ3ZbYXJnY10gdG8gTlVMTC4gKE1pY2hhZWwgSmFydmlzKQorRmlsZXM6CSAgICBzcmMvZ3VpX3gxMS5jCisKK1BhdGNoIDYuMi4yOTMgKGFmdGVyIDYuMi4yNTUpCitQcm9ibGVtOiAgICBHVEs6IEEgbmV3IGl0ZW0gaW4gYSBtZW51IGlzIHB1dCBiZWZvcmUgdGhlIHRlYXJvZmYgaXRlbS4KK1NvbHV0aW9uOiAgIERvIGluY3JlbWVudCB0aGUgbWVudSBpdGVtIGluZGV4IGZvciBub24tcG9wdXAgbWVudSBpdGVtcy4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYworCitQYXRjaCA2LjIuMjk0IChleHRyYSkKK1Byb2JsZW06ICAgIE1hYzogQ2Fubm90IHVzZSBtb2RpZmllcnMgd2l0aCBTcGFjZSwgVGFiLCBFbnRlciBhbmQgRXNjYXBlLgorU29sdXRpb246ICAgSGFuZGxlIGFsbCBtb2RpZmllcnMgZm9yIHRoZXNlIGtleXMuICAoRWNrZWhhcmQgQmVybnMpCitGaWxlczoJICAgIHNyYy9ndWlfbWFjLmMKKworUGF0Y2ggNi4yLjI5NQorUHJvYmxlbTogICAgV2hlbiBpbiBkZWJ1ZyBtb2RlLCByZWNlaXZpbmcgYSBtZXNzYWdlIGZyb20gYSByZW1vdGUgY2xpZW50CisJICAgIGNhdXNlcyBhIGNyYXNoLiAgRXZhbHVhdGluZyBhbiBleHByZXNzaW9uIGNhdXNlcyBWaW0gdG8gd2FpdCBmb3IKKwkgICAgImNvbnQiIHRvIGJlIHR5cGVkLCB3aXRob3V0IGEgcHJvbXB0LiAgKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgRGlzYWJsZSBkZWJ1Z2dpbmcgd2hlbiBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gZm9yIGEgY2xpZW50LgorCSAgICAoTWljaGFlbCBHZWRkZXMpICBEb24ndCB0cnkgcmVhZGluZyBpbnRvIHRoZSB0eXBlaGVhZCBidWZmZXIgd2hlbgorCSAgICBpdCBtYXkgaGF2ZSBiZWVuIGZpbGxlZCBpbiBhbm90aGVyIHdheS4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMsIHNyYy9nZXRjaGFyLmMsIHNyYy9pZl94Y21kc3J2LmMsIHNyYy9tYWluLmMsCisJICAgIHNyYy9taXNjMS5jLCBzcmMvcHJvdG8vZ2V0Y2hhci5wcm8sIHNyYy9wcm90by9tYWluLnBybywKKwkgICAgc3JjL3Byb3RvL29zX3VuaXgucHJvLCBzcmMvcHJvdG8vdWkucHJvLCBzcmMvc3RydWN0cy5oLAorCSAgICBzcmMvb3NfdW5peC5jLCBzcmMvdWkuYworCitQYXRjaCA2LjIuMjk2IChleHRyYSkKK1Byb2JsZW06ICAgIFNhbWUgYXMgNi4yLjI5NS4KK1NvbHV0aW9uOiAgIEV4dHJhIGZpbGVzIGZvciBwYXRjaCA2LjIuMjk1LgorRmlsZXM6CSAgICBzcmMvb3NfYW1pZ2EuYywgc3JjL29zX21zZG9zLmMsIHNyYy9vc19yaXNjb3MuYywgc3JjL29zX3dpbjMyLmMsCisJICAgIHNyYy9wcm90by9vc19hbWlnYS5wcm8sIHNyYy9wcm90by9vc19tc2Rvcy5wcm8sCisJICAgIHNyYy9wcm90by9vc19yaXNjb3MucHJvLCBzcmMvcHJvdG8vb3Nfd2luMzIucHJvCisKK1BhdGNoIDYuMi4yOTcgKGFmdGVyIDYuMi4yMzIpCitQcm9ibGVtOiAgICBDYW5ub3QgaW52b2tlIFB5dGhvbiBjb21tYW5kcyByZWN1cnNpdmVseS4KK1NvbHV0aW9uOiAgIFdpdGggUHl0aG9uIDIuMyBhbmQgbGF0ZXIgdXNlIHRoZSBhdmFpbGFibGUgbWVjaGFuaXNtcyB0byBpbnZva2UKKwkgICAgUHl0aG9uIHJlY3Vyc2l2ZWx5LiAoTWF0dGhldyBNdWVsbGVyKQorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4yLjI5OAorUHJvYmxlbTogICAgQSBjaGFuZ2UgYWx3YXlzIHNldHMgdGhlICcuIG1hcmsgYW5kIGFuIGluc2VydCBhbHdheXMgc2V0cyB0aGUgJ14KKwkgICAgbWFyaywgZXZlbiB3aGVuIHRoaXMgaXMgbm90IHdhbnRlZC4KKwkgICAgQ2Fubm90IGdvIGJhY2sgdG8gdGhlIHBvc2l0aW9uIG9mIG9sZGVyIGNoYW5nZXMgd2l0aG91dCB1bmRvaW5nCisJICAgIHRob3NlIGNoYW5nZXMuCitTb2x1dGlvbjogICBBZGQgdGhlICI6a2VlcGp1bXBzIiBjb21tYW5kIG1vZGlmaWVyLgorCSAgICBBZGQgdGhlICJnLCIgYW5kICJnOyIgY29tbWFuZHMuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL21vdGlvbi50eHQsIHNyYy9leF9jbWRzLmgsIHNyYy9leF9kb2NtZC5jLCBzcmMvZWRpdC5jLAorCSAgICBzcmMvbWFyay5jLCBzcmMvbWlzYzEuYywgc3JjL25vcm1hbC5jLCBzcmMvcHJvdG8vbWFyay5wcm8sCisJICAgIHNyYy9zdHJ1Y3RzLmgsIHNyYy91bmRvLmMKKworUGF0Y2ggNi4yLjI5OQorUHJvYmxlbTogICAgQ2FuIG9ubHkgdXNlIG9uZSBsYW5ndWFnZSBmb3IgaGVscCBmaWxlcy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgJ2hlbHBsYW5nJyBvcHRpb24gdG8gc2VsZWN0IHRoZSBwcmVmZXJyZWQgbGFuZ3VhZ2UocykuCisJICAgIE1ha2UgIjpoZWxwdGFncyIgZ2VuZXJhdGUgdGFncyBmaWxlcyBmb3IgYWxsIGxhbmd1YWdlcy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHJ1bnRpbWUvZG9jL3ZhcmlvdXMudHh0LCBzcmMvTWFrZWZpbGUsCisJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9leF9jbWRzMi5jLCBzcmMvZXhfY21kcy5oLCBzcmMvZXhfZ2V0bG4uYywKKwkgICAgc3JjL25vcm1hbC5jLCBzcmMvb3B0aW9uLmMsIHNyYy9vcHRpb24uaCwgc3JjL3Byb3RvL2V4X2NtZHMucHJvLAorCSAgICBzcmMvcHJvdG8vZXhfY21kczIucHJvLCBzcmMvcHJvdG8vb3B0aW9uLnBybywgc3JjL3N0cnVjdHMuaCwKKwkgICAgc3JjL3RhZy5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjMwMCAoYWZ0ZXIgNi4yLjI5NykKK1Byb2JsZW06ICAgIENhbm5vdCBidWlsZCBQeXRob24gaW50ZXJmYWNlIHdpdGggUHl0aG9uIDIuMiBvciBlYXJsaWVyLgorU29sdXRpb246ICAgQWRkIGEgc2VtaWNvbG9uLgorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4yLjMwMQorUHJvYmxlbTogICAgVGhlICJzZWxlY3QgYWxsIiBpdGVtIGZyb20gdGhlIHBvcHVwIG1lbnUgZG9lc24ndCB3b3JrIGZvciBTZWxlY3QKKwkgICAgbW9kZS4KK1NvbHV0aW9uOiAgIFVzZSB0aGUgc2FtZSBjb21tYW5kcyBhcyBmb3IgdGhlICJFZGl0LnNlbGVjdCBhbGwiIG1lbnUuCisJICAgIChCZW5qaSBGaXNoZXIpCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4yLjMwMgorUHJvYmxlbTogICAgVXNpbmcgIkNUUkwtTyAuIiBpbiBJbnNlcnQgbW9kZSBkb2Vzbid0IHdvcmsgcHJvcGVybHkuIChCZW5qaQorCSAgICBGaXNoZXIpCitTb2x1dGlvbjogICBSZXN0b3JlICJyZXN0YXJ0X2VkaXQiIGFmdGVyIGFuIGluc2VydCBjb21tYW5kIHRoYXQgd2FzIG5vdCB0eXBlZC4KKwkgICAgQXZvaWQgd2FpdGluZyB3aXRoIGRpc3BsYXlpbmcgdGhlIG1vZGUgd2hlbiB0aGVyZSBpcyBubyB0ZXh0IHRvIGJlCisJICAgIG92ZXJ3cml0dGVuLgorCSAgICBGaXggdGhhdCAiQ1RSTC1PIC4iIHNvbWV0aW1lcyBkb2Vzbid0IHB1dCB0aGUgY3Vyc29yIGJhY2sgYWZ0ZXIKKwkgICAgdGhlIGVuZC1vZi1saW5lLiAgT25seSByZXNldCB0aGUgZmxhZyB0aGF0IENUUkwtTyB3YXMgdXNlZCBwYXN0CisJICAgIHRoZSBlbmQgb2YgdGhlIGxpbmUgd2hlbiByZXN0YXJ0aW5nIGVkaXRpbmcuICBVcGRhdGUgIm9fbG51bSIKKwkgICAgbnVtYmVyIHdoZW4gaW5zZXJ0aW5nIHRleHQgYW5kICJvX2VvbCIgaXMgc2V0LgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjMwMworUHJvYmxlbTogICAgQ2Fubm90IHVzZSBVbmljb2RlIGRpZ3JhcGhzIHdoaWxlICdlbmNvZGluZycgaXMgbm90IFVuaWNvZGUuCitTb2x1dGlvbjogICBDb252ZXJ0IHRoZSBjaGFyYWN0ZXIgZnJvbSBVbmljb2RlIHRvICdlbmNvZGluZycgd2hlbiBuZWVkZWQuCisJICAgIFVzZSB0aGUgVW5pY29kZSBkaWdyYXBocyBmb3IgdGhlIE1hY2ludG9zaC4gKEVja2VoYXJkIEJlcm5zKQorRmlsZXM6CSAgICBzcmMvZGlncmFwaC5jCisKK1BhdGNoIDYuMi4zMDQgKGV4dHJhLCBhZnRlciA2LjIuMjU2KQorUHJvYmxlbTogICAgTWFjOiBObyBwcm9wZXIgc3VwcG9ydCBmb3IgJ2VuY29kaW5nJy4gIENvbnZlcnNpb24gd2l0aG91dCBpY29udigpCisJICAgIGlzIG5vdCBwb3NzaWJsZS4KK1NvbHV0aW9uOiAgIENvbnZlcnQgaW5wdXQgZnJvbSAndGVybWVuY29kaW5nJyB0byAnZW5jb2RpbmcnLiAgQWRkCisJICAgIG1hY19zdHJpbmdfY29udmVydCgpLiAgQ29udmVydCB0ZXh0IGZvciB0aGUgY2xpcGJvYXJkIHdoZW4gbmVlZGVkLgorCSAgICAoRWNrZWhhcmQgQmVybnMpCitGaWxlczoJICAgIHNyYy9ndWlfbWFjLmMsIHNyYy9tYnl0ZS5jLCBzcmMvc3RydWN0cy5oLCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjMwNSAoYWZ0ZXIgNi4yLjMwMCkKK1Byb2JsZW06ICAgIFdpbjMyOiBDYW5ub3QgYnVpbGQgUHl0aG9uIGludGVyZmFjZSB3aXRoIFB5dGhvbiAyLjMuIChBaml0CisJICAgIFRoYWtrYXIpCitTb2x1dGlvbjogICBBZGQgdHdvIGZ1bmN0aW9ucyB0byB0aGUgZHluYW1pYyBsb2FkaW5nIGZlYXR1cmUuCitGaWxlczoJICAgIHNyYy9pZl9weXRob24uYworCitQYXRjaCA2LjIuMzA2IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBCdWlsZGluZyBjb25zb2xlIHZlcnNpb24gd2l0aCBCQ0MgNS41IGdpdmVzIGEgd2FybmluZyBmb3IKKwkgICAgZ2V0X2NtZF9hcmdzKCkgcHJvdG90eXBlIG1pc3NpbmcuICAoQWppdCBUaGFra2FyKQorU29sdXRpb246ICAgRG9uJ3QgYnVpbGQgb3NfdzMyZXhlLmMgZm9yIHRoZSBjb25zb2xlIHZlcnNpb24uCitGaWxlczoJICAgIHNyYy9NYWtlX2JjNS5tYWsKKworUGF0Y2ggNi4yLjMwNyAoYWZ0ZXIgNi4yLjI5OSkKK1Byb2JsZW06ICAgIEluc3RhbGxpbmcgaGVscCBmaWxlcyBmYWlscy4KK1NvbHV0aW9uOiAgIEV4cGFuZCB3aWxkY2FyZHMgZm9yIHRyYW5zbGF0ZWQgaGVscCBmaWxlcyBzZXBhcmF0ZWx5LgorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjMwOAorUHJvYmxlbTogICAgTm90IGFsbCBzeXN0ZW1zIGhhdmUgIndob2FtaSIsIHJlc3VsdGluZyBpbiBhbiBlbXB0eSB1c2VyIG5hbWUuCitTb2x1dGlvbjogICBVc2UgImxvZ25hbWUiIHdoZW4gcG9zc2libGUsICJ3aG9hbWkiIG90aGVyd2lzZS4gIChEYXZpZCBCb3ljZSkKK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDYuMi4zMDkKK1Byb2JsZW06ICAgICIzZ3J4IiB3YWl0cyBmb3IgdHdvIEVTQyB0byBiZSB0eXBlZC4gIChKZW5zIFBhdWx1cykKK1NvbHV0aW9uOiAgIEFwcGVuZCB0aGUgRVNDIHRvIHRoZSBzdHVmZiBidWZmZXIgd2hlbiByZWRvaW5nIHRoZSAiZ3IiIGluc2VydC4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjIuMzEwCitQcm9ibGVtOiAgICBXaGVuIHNldHRpbmcgJ3VuZG9sZXZlbHMnIHRvIC0xLCBtYWtpbmcgYSBjaGFuZ2UgYW5kIHNldHRpbmcKKwkgICAgJ3VuZG9sZXZlbHMnIHRvIGEgcG9zaXRpdmUgdmFsdWUgYW4gInVuZG8gbGlzdCBjb3JydXB0IiBlcnJvcgorCSAgICBvY2N1cnMuIChNYWRva2EgTWFjaGl0YW5pKQorU29sdXRpb246ICAgU3luYyB1bmRvIGJlZm9yZSBjaGFuZ2luZyAndW5kb2xldmVscycuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuMzExIChhZnRlciA2LjIuMjk4KQorUHJvYmxlbTogICAgV2hlbiBtYWtpbmcgc2V2ZXJhbCBjaGFuZ2VzIGluIG9uZSBsaW5lIHRoZSBjaGFuZ2VsaXN0IGdyb3dzCisJICAgIHF1aWNrbHkuICBUaGVyZSBpcyBubyBlcnJvciBtZXNzYWdlIGZvciByZWFjaGluZyB0aGUgZW5kIG9mIHRoZQorCSAgICBjaGFuZ2VsaXN0LiAgUmVhZGluZyBjaGFuZ2VsaXN0IG1hcmtzIGZyb20gdmltaW5mbyBkb2Vzbid0IHdvcmsKKwkgICAgcHJvcGVybHkuCitTb2x1dGlvbjogICBPbmx5IG1ha2UgYSBuZXcgZW50cnkgaW4gdGhlIGNoYW5nZWxpc3Qgd2hlbiBtYWtpbmcgYSBjaGFuZ2UgaW4KKwkgICAgYW5vdGhlciBsaW5lIG9yICd0ZXh0d2lkdGgnIGNvbHVtbnMgYXdheS4gIEFkZCBFNjYyLCBFNjYzIGFuZCBFNjY0CisJICAgIGVycm9yIG1lc3NhZ2VzLiAgUHV0IGEgY2hhbmdlbGlzdCBtYXJrIGZyb20gdmltaW5mbyBvbmUgcG9zaXRpb24KKwkgICAgYmVmb3JlIHRoZSBlbmQuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL21vdGlvbi50eHQsIHNyYy9tYXJrLmMsIHNyYy9taXNjMS5jLCBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjMxMiAoYWZ0ZXIgNi4yLjI5OSkKK1Byb2JsZW06ICAgICJtYWtlIGluc3RhbGwiIGNsZWFycyB0aGUgc2NyZWVuIHdoZW4gaW5zdGFsbGluZyB0aGUgZG9jcy4KK1NvbHV0aW9uOiAgIEV4ZWN1dGUgIjpoZWxwdGFncyIgaW4gc2lsZW50IG1vZGUuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL01ha2VmaWxlCisKK1BhdGNoIDYuMi4zMTMKK1Byb2JsZW06ICAgIFdoZW4gb3BlbmluZyBmb2xkcyBpbiBhIGRpZmYgd2luZG93LCBvdGhlciBkaWZmIHdpbmRvd3Mgbm8gbG9uZ2VyCisJICAgIHNob3cgdGhlIHNhbWUgdGV4dC4KK1NvbHV0aW9uOiAgIFN5bmMgdGhlIGZvbGRzIGluIGRpZmYgd2luZG93cy4KK0ZpbGVzOgkgICAgc3JjL2RpZmYuYywgc3JjL2ZvbGQuYywgc3JjL21vdmUuYywgc3JjL3Byb3RvL2RpZmYucHJvLAorCSAgICBzcmMvcHJvdG8vbW92ZS5wcm8KKworUGF0Y2ggNi4yLjMxNAorUHJvYmxlbTogICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCAicngiIG1heSBjYXVzZSBhIGNyYXNoIHdpdGggYSBibG9ja3dpc2UKKwkgICAgc2VsZWN0aW9uIGFuZCB1c2luZyAiJCIuIChNb3JpdHogT3JiYWNoKQorU29sdXRpb246ICAgRG9uJ3QgdHJ5IHJlcGxhY2luZyBjaGFycyBpbiBhIGxpbmUgdGhhdCBoYXMgbm8gY2hhcmFjdGVycyBpbiB0aGUKKwkgICAgYmxvY2suCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjIuMzE1CitQcm9ibGVtOiAgICBVc2luZyBDVFJMLUMgaW4gYSBWaXN1YWwgbW9kZSBtYXBwaW5nIHdoaWxlICdpbnNlcnRtb2RlJyBpcyBzZXQKKwkgICAgc3RvcHMgVmltIGZyb20gcmV0dXJuaW5nIHRvIEluc2VydCBtb2RlLgorU29sdXRpb246ICAgRG9uJ3QgcmVzZXQgInJlc3RhcnRfZWRpdCIgd2hlbiBhIENUUkwtQyBpcyBmb3VuZCBhbmQgJ2luc2VydG1vZGUnCisJICAgIGlzIHNldC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMi4zMTYgKGFmdGVyIDYuMi4zMTIpCitQcm9ibGVtOiAgICAibWFrZSBpbnN0YWxsIiB0cmllcyBjb25uZWN0aW5nIHRvIHRoZSBYIHNlcnZlciB3aGVuIGluc3RhbGxpbmcKKwkgICAgdGhlIGRvY3MuIChTdGVwaGVuIFRob21hcykKK1NvbHV0aW9uOiAgIEFkZCB0aGUgIi1YIiBhcmd1bWVudC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjMxNyAoYWZ0ZXIgNi4yLjMxMykKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgInppIiBpbiBhIGRpZmYgd2luZG93LCBvdGhlciBkaWZmIHdpbmRvd3MgYXJlIG5vdAorCSAgICBhZGp1c3RlZC4gKFJpY2hhcmQgQ3Vybm93KQorU29sdXRpb246ICAgRGlzdHJpYnV0ZSBhIGNoYW5nZSBpbiAnZm9sZGVuYWJsZScgdG8gb3RoZXIgZGlmZiB3aW5kb3dzLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjMxOAorUHJvYmxlbTogICAgV2hlbiBjb21waWxpbmcgd2l0aCBfVEhSRUFEX1NBRkUgZXh0ZXJuYWwgY29tbWFuZHMgZG9uJ3QgZWNobworCSAgICB0eXBlZCBjaGFyYWN0ZXJzLgorU29sdXRpb246ICAgRG9uJ3Qgc2V0IHRoZSB0ZXJtaW5hbCBtb2RlIHRvIFRNT0RFX1NMRUVQIHdoZW4gaXQncyBhbHJlYWR5IGF0CisJICAgIFRNT0RFX0NPT0suCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4yLjMxOSAoZXh0cmEpCitQcm9ibGVtOiAgICBCdWlsZGluZyBndmltZXh0LmRsbCB3aXRoIE1pbmd3IGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIFVzZSBnY2MgaW5zdGVhZCBvZiBkbGx3cmFwLiAgVXNlIGxvbmcgb3B0aW9uIG5hbWVzLiAoQWxlamFuZHJvCisJICAgIExvcGV6LVZhbGVuY2lhKQorRmlsZXM6CSAgICBzcmMvR3ZpbUV4dC9NYWtlX21pbmcubWFrCisKK1BhdGNoIDYuMi4zMjAKK1Byb2JsZW06ICAgIFdpbjMyOiBBZGRpbmcgYW5kIHJlbW92aW5nIHRoZSBtZW51YmFyIHJlc2l6ZXMgdGhlIFZpbSB3aW5kb3cuCisJICAgIChKb25hdGhvbiBNZXJ6KQorU29sdXRpb246ICAgRG9uJ3QgbGV0IGEgcmVzaXplIGV2ZW50IGNoYW5nZSAnbGluZXMnIHVuZXhwZWN0ZWRseS4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMi4zMjEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgbW9kZWxlc3Mgc2VsZWN0aW9uLCB3cmFwcGluZyBsaW5lcyBhcmUgbm90IHJlY29nbml6ZWQsCisJICAgIGEgbGluZSBicmVhayBpcyBhbHdheXMgaW5zZXJ0ZWQuCitTb2x1dGlvbjogICBBZGQgTGluZVdyYXBzW10gdG8gcmVtZW1iZXIgd2hldGhlciBhIGxpbmUgd3JhcHBlZCBvciBub3QuCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmgsIHNyYy9zY3JlZW4uYywgc3JjL3VpLmMKKworUGF0Y2ggNi4yLjMyMgorUHJvYmxlbTogICAgV2l0aCAnc2hvd2NtZCcgc2V0LCBhZnRlciB0eXBpbmcgImRkIiB0aGUgbmV4dCAiZCIgbWF5IG5vdCBiZQorCSAgICBkaXNwbGF5ZWQuIChKZW5zIFBhdWx1cykKK1NvbHV0aW9uOiAgIFJlZHJhdyB0aGUgY29tbWFuZCBsaW5lIGFmdGVyIHVwZGF0aW5nIHRoZSBzY3JlZW4sIHNjcm9sbGluZyBtYXkKKwkgICAgaGF2ZSBzZXQgImNsZWFyX2NtZGxpbmUiLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4yLjMyMworUHJvYmxlbTogICAgV2luMzI6IGV4cGFuZGluZyAifi9maWxlIiBpbiBhbiBhdXRvY29tbWFuZCBwYXR0ZXJuIHJlc3VsdHMgaW4KKwkgICAgYmFja3NsYXNoZXMsIHdoaWxlIHRoaXMgcGF0dGVybiBzaG91bGQgb25seSBoYXZlIGZvcndhcmQgc2xhc2hlcy4KK1NvbHV0aW9uOiAgIE1ha2UgZXhwYW5kaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyByZXNwZWN0ICdzaGVsbHNsYXNoJyBhbmQgc2V0CisJICAgIHBfc3NsIHdoZW4gZXhwYW5kaW5nIHRoZSBhdXRvY29tbWFuZCBwYXR0ZXJuLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9taXNjMS5jLCBzcmMvcHJvdG8vZmlsZWlvLnBybworCitQYXRjaCA2LjIuMzI0IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiB3aGVuICJ2aW1ydW4uZXhlIiBoYXMgYSBwYXRoIHdpdGggd2hpdGUgc3BhY2UsIHN1Y2ggYXMKKwkgICAgIlByb2dyYW0gRmlsZXMiLCBleGVjdXRpbmcgZXh0ZXJuYWwgY29tbWFuZHMgbWF5IGZhaWwuCitTb2x1dGlvbjogICBQdXQgZG91YmxlIHF1b3RlcyBhcm91bmQgdGhlIHBhdGggdG8gInZpbXJ1biIuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMi4zMjUKK1Byb2JsZW06ICAgIFdoZW4gJEhPTUUgaW5jbHVkZXMgYSBzcGFjZSwgZG9pbmcgIjpzZXQgdGFncz1+L3RhZ3MiIGRvZXNuJ3QKKwkgICAgd29yaywgdGhlIHNwYWNlIGlzIHVzZWQgdG8gc2VwYXJhdGUgZmlsZSBuYW1lcy4gIChCcmV0dCBTdGFobG1hbikKK1NvbHV0aW9uOiAgIEVzY2FwZSB0aGUgc3BhY2Ugd2l0aCBhIGJhY2tzbGFzaC4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4zMjYKK1Byb2JsZW06ICAgICI6d2luZG8gc2V0IHN5bnRheD1mb28iIGRvZXNuJ3Qgd29yay4gIChUaW0gQ2hhc2UpCitTb2x1dGlvbjogICBEb24ndCBjaGFuZ2UgJ2V2ZW50aWdub3JlJyBmb3IgIjp3aW5kbyIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMi4zMjcKK1Byb2JsZW06ICAgIFdoZW4gZm9ybWF0dGluZyB0ZXh0IGFsbCBtYXJrcyBpbiB0aGUgZm9ybWF0dGVkIGxpbmVzIGFyZSBsb3N0LgorCSAgICBBIHdvcmQgaXMgbm90IGpvaW5lZCB0byBhIHByZXZpb3VzIGxpbmUgd2hlbiB0aGlzIHdvdWxkIGJlCisJICAgIHBvc3NpYmxlLiAgKE1pa29sYWogTWFjaG93c2tpKQorU29sdXRpb246ICAgVHJ5IHRvIGtlZXAgbWFya3MgaW4gdGhlIHNhbWUgcG9zaXRpb24gYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwkgICAgQWxzbyBrZWVwIG1hcmsgcG9zaXRpb25zIHdoZW4gam9pbmluZyBsaW5lcy4KKwkgICAgU3RhcnQgYXV0by1mb3JtYXR0aW5nIGluIHRoZSBwcmV2aW91cyBsaW5lIHdoZW4gYXBwcm9wcmlhdGUuCisJICAgIEFkZCB0aGUgImd3IiBvcGVyYXRvcjogTGlrZSAiZ3EiIGJ1dCBrZWVwIHRoZSBjdXJzb3Igd2hlcmUgaXQgaXMuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2NoYW5nZS50eHQsIHNyYy9lZGl0LmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9tYXJrLmMsCisJICAgIHNyYy9taXNjMS5jLCBzcmMvbm9ybWFsLmMsIHNyYy9vcHMuYywgc3JjL3Byb3RvL2VkaXQucHJvLAorCSAgICBzcmMvcHJvdG8vbWFyay5wcm8sIHNyYy9wcm90by9vcHMucHJvLCBzcmMvc3RydWN0cy5oLCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjMyOAorUHJvYmxlbTogICAgWElNIHdpdGggR1RLOiBJdCBpcyBoYXJkIHRvIHVuZGVyc3RhbmQgd2hhdCBYSU0gaXMgZG9pbmcuCitTb2x1dGlvbjogICBBZGQgeGltX2xvZygpIHRvIGxvZyBYSU0gZXZlbnRzIGFuZCBoZWxwIHdpdGggZGVidWdnaW5nLgorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjIuMzI5CitQcm9ibGVtOiAgICAiOj0iIGRvZXMgbm90IHdvcmsgVmkgY29tcGF0aWJsZS4gKEFudG9ueSBTY3JpdmVuKQorU29sdXRpb246ICAgUHJpbnQgdGhlIGxhc3QgbGluZSBudW1iZXIgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBsaW5lLiAgRG9uJ3QKKwkgICAgcHJpbnQgImxpbmUiLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5oLCBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjIuMzMwIChleHRyYSwgYWZ0ZXIgNi4yLjI2NykKK1Byb2JsZW06ICAgIFdpbjMyOiBDcmFzaCB3aGVuIHRlYXJpbmcgb2ZmIGEgbWVudS4KK1NvbHV0aW9uOiAgIFRlcm1pbmF0ZSBhIHN0cmluZyB3aXRoIGEgTlVMLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMi4zMzEgKGFmdGVyIDYuMi4zMjcpCitQcm9ibGVtOiAgICAiZ3dhcCIgbGVhdmVzIGN1cnNvciBpbiB0aGUgd3JvbmcgbGluZS4KK1NvbHV0aW9uOiAgIFJlbWVtYmVyIHRoZSBjdXJzb3IgcG9zaXRpb24gYmVmb3JlIGZpbmRpbmcgdGhlIGVuZHMgb2YgdGhlCisJICAgIHBhcmFncmFwaC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jLCBzcmMvb3BzLmMsIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4yLjMzMiAoZXh0cmEpCitQcm9ibGVtOiAgICBBbWlnYTogQ29tcGlsZSBlcnJvciBmb3Igc3RyaW5nIGFycmF5LiBDb21waWxpbmcgdGhlIEFtaWdhIEdVSQorCSAgICBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBVc2UgYSBjaGFyIHBvaW50ZXIgaW5zdGVhZC4gIE1vdmUgaW5jbHVkaW5nICJndWlfYW1pZ2EuaCIgdG8gYWZ0ZXIKKwkgICAgaW5jbHVkaW5nICJ2aW0uaCIuICBBZGQgYSBzZW1pY29sb24uIChBbGkgQWtjYWFnYWMpCitGaWxlczoJICAgIHNyYy9ndWlfYW1pZ2EuYywgc3JjL29zX2FtaWdhLmMKKworUGF0Y2ggNi4yLjMzMyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogcHJpbnRpbmcgZG9lc24ndCB3b3JrIHdpdGggc3BlY2lmaWVkIGZvbnQgY2hhcnNldC4KK1NvbHV0aW9uOiAgIFVzZSB0aGUgc3BlY2lmaWVkIGZvbnQgY2hhcnNldC4gKE1pa2UgV2lsbGlhbXMpCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jCisKK1BhdGNoIDYuMi4zMzQgKGV4dHJhLCBhZnRlciA2LjIuMjk2KQorUHJvYmxlbTogICAgV2luMzI6IGV2YWx1YXRpbmcgY2xpZW50IGV4cHJlc3Npb24gaW4gZGVidWcgbW9kZSByZXF1aXJlcyB0eXBpbmcKKwkgICAgImNvbnQiLgorU29sdXRpb246ICAgVXNlIGV2YWxfY2xpZW50X2V4cHJfdG9fc3RyaW5nKCkuCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jCisKK1BhdGNoIDYuMi4zMzUKK1Byb2JsZW06ICAgIFRoZSAiOnNpZ24iIGNvbW1hbmQgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgY29tbWFuZC4KK1NvbHV0aW9uOiAgIEFkZCBUUkxCQVIgdG8gdGhlIGNvbW1hbmQgZmxhZ3MuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmgKKworUGF0Y2ggNi4yLjMzNiAoYWZ0ZXIgNi4yLjMyNykKK1Byb2JsZW06ICAgIE1peHVwIG9mIGl0ZW1zIGluIGFuIGV4cHJlc3Npb24uCitTb2x1dGlvbjogICBNb3ZlICI9PSBOVUwiIHRvIHRoZSByaWdodCBzcG90LgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMi4zMzcgKGV4dHJhLCBhZnRlciA2LjIuMzE5KQorUHJvYmxlbTogICAgQnVpbGRpbmcgZ3ZpbWV4dC5kbGwgd2l0aCBNaW5ndyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuCitTb2x1dGlvbjogICBGaXggd2hpdGUgc3BhY2UgYW5kIG90aGVyIGRldGFpbHMuIChBbGVqYW5kcm8gTG9wZXotVmFsZW5jaWEpCitGaWxlczoJICAgIHNyYy9HdmltRXh0L01ha2VfbWluZy5tYWsKKworUGF0Y2ggNi4yLjMzOCAoYWZ0ZXIgNi4yLjMzMSkKK1Byb2JsZW06ICAgIFdoZW4gdW5kb2luZyAiZ3dhcCIgdGhlIGN1cnNvciBpcyBhbHdheXMgcHV0IGF0IHRoZSBzdGFydCBvZiB0aGUKKwkgICAgcGFyYWdyYXBoLiAgV2hlbiB1bmRvaW5nIGF1dG8tZm9ybWF0dGluZyB0aGUgY3Vyc29yIG1heSBiZSBhYm92ZQorCSAgICB0aGUgY2hhbmdlLgorU29sdXRpb246ICAgVHJ5IHRvIG1vdmUgdGhlIGN1cnNvciBiYWNrIHRvIHdoZXJlIGl0IHdhcyBvciB0byB0aGUgZmlyc3QgbGluZQorCSAgICB0aGF0IGFjdHVhbGx5IGNoYW5nZWQuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYywgc3JjL29wcy5jLCBzcmMvdW5kby5jCisKK1BhdGNoIDYuMi4zMzkKK1Byb2JsZW06ICAgIENyYXNoIHdoZW4gdXNpbmcgbWFueSBkaWZmZXJlbnQgaGlnaGxpZ2h0IGdyb3VwcyBhbmQgYSBVc2VyCisJICAgIGhpZ2hsaWdodCBncm91cC4gIChKdWVyZ2VuIEtyYWVtZXIpCitTb2x1dGlvbjogICBEbyBub3QgdXNlIHRoZSBzZ19uYW1lX3UgcG9pbnRlciB3aGVuIGl0IGlzIE5VTEwuICBBbHNvIHNpbXBsaWZ5CisJICAgIHVzZSBvZiB0aGUgaGlnaGxpZ2h0IGdyb3VwIHRhYmxlLgorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4yLjM0MAorUHJvYmxlbTogICAgIjpyZWciIGRvZXNuJ3Qgc2hvdyB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoZSBjbGlwYm9hcmQgaWYgaXQgd2FzCisJICAgIGZpbGxlZCBvdXRzaWRlIG9mIFZpbS4gKFN0dWFydCBNYWNEb25hbGQpCitTb2x1dGlvbjogICBPYnRhaW4gdGhlIGNsaXBib2FyZCBjb250ZW50cyBiZWZvcmUgZGlzcGxheWluZyBpdC4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMi4zNDEgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gdGhlIHBhdGggdG8gZGlmZi5leGUgY29udGFpbnMgYSBzcGFjZSBhbmQgdXNpbmcgdGhlCisJICAgIHZpbXJjIGdlbmVyYXRlZCBieSB0aGUgaW5zdGFsbCBwcm9ncmFtLCBkaWZmIG1vZGUgZG9lcyBub3Qgd29yay4KK1NvbHV0aW9uOiAgIFB1dCB0aGUgZmlyc3QgZG91YmxlIHF1b3RlIGp1c3QgYmVmb3JlIHRoZSBzcGFjZSBpbnN0ZWFkIG9mIGJlZm9yZQorCSAgICB0aGUgcGF0aC4KK0ZpbGVzOgkgICAgc3JjL2Rvc2luc3QuYworCitQYXRjaCA2LjIuMzQyIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBtYWNyb3MgYXJlIG5vdCBhbHdheXMgdXNlZCBhcyBleHBlY3RlZC4KK1NvbHV0aW9uOiAgIERlZmluZSBXSU5WRVIgdG8gMHgwNDAwIGluc3RlYWQgb2YgMHg0MDAuIChBbGVqYW5kcm8KKwkgICAgTG9wZXotVmFsZW5jaWEpCitGaWxlczoJICAgIHNyYy9NYWtlX2JjNS5tYWssIHNyYy9NYWtlX2N5Zy5tYWssIHNyYy9NYWtlX212Yy5tYWsKKworUGF0Y2ggNi4yLjM0MworUHJvYmxlbTogICAgVGl0bGUgZG9lc24ndCB3b3JrIHdpdGggc29tZSB3aW5kb3cgbWFuYWdlcnMuICBYMTE6IFNldHRpbmcgdGhlCisJICAgIHRleHQgcHJvcGVydHkgZm9yIHRoZSB3aW5kb3cgdGl0bGUgaXMgaGFyZCBjb2RlZC4KK1NvbHV0aW9uOiAgIFVzZSBTVFJJTkcgZm9ybWF0IHdoZW4gcG9zc2libGUuICBVc2UgdGhlIFVURi04IGZ1bmN0aW9uIHdoZW4KKwkgICAgaXQncyBhdmFpbGFibGUgYW5kICdlbmNvZGluZycgaXMgdXRmLTguIFVzZQorCSAgICBYU3RyaW5nTGlzdFRvVGV4dFByb3BlcnR5KCkuICBEbyB0aGUgc2FtZSBmb3IgdGhlIGljb24gbmFtZS4KKwkgICAgKERhdmlkIEhhcnJpc29uKQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMi4zNDQgKGV4dHJhLCBhZnRlciA2LjIuMzM3KQorUHJvYmxlbTogICAgQ2Fubm90IGJ1aWxkIGd2aW1leHQuZGxsIHdpdGggTWluZ1cgb24gTGludXguCitTb2x1dGlvbjogICBBZGQgc3VwcG9ydCBmb3IgY3Jvc3MgY29tcGlsaW5nLiAoUm9uYWxkIEhvZWxsd2FydGgpCitGaWxlczoJICAgIHNyYy9HdmltRXh0L01ha2VfbWluZy5tYWsKKworUGF0Y2ggNi4yLjM0NSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogQ29weS9wYXN0ZSBiZXR3ZWVuIHR3byBWaW1zIGZhaWxzIGlmICdlbmNvZGluZycgaXMgbm90IHNldAorCSAgICBwcm9wZXJseSBvciB0aGVyZSBhcmUgaWxsZWdhbCBieXRlcy4KK1NvbHV0aW9uOiAgIFVzZSBhIHJhdyBieXRlIGZvcm1hdC4gIEFsd2F5cyBzZXQgaXQgd2hlbiBjb3B5aW5nLiAgV2hlbiBwYXN0aW5nCisJICAgIHVzZSB0aGUgcmF3IGZvcm1hdCBpZiAnZW5jb2RpbmcnIGlzIHRoZSBzYW1lLgorRmlsZXM6CSAgICBzcmMvb3NfbXN3aW4uYywgc3JjL29zX3dpbjE2LmMsIHNyYy9vc193aW4zMi5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjM0NgorUHJvYmxlbTogICAgV2luMzIgY29uc29sZTogQWZ0ZXIgdXNpbmcgImNoY3AiIFZpbSBkb2VzIG5vdCBkZXRlY3QgdGhlCisJICAgIGRpZmZlcmVudCBjb2RlcGFnZS4KK1NvbHV0aW9uOiAgIFVzZSBHZXRDb25zb2xlQ1AoKSBhbmQgd2hlbiBpdCBpcyBkaWZmZXJlbnQgZnJvbSBHZXRBQ1AoKSBzZXQKKwkgICAgJ3Rlcm1lbmNvZGluZycuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuMzQ3IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBYUCB0aGVtZSBzdXBwb3J0IGlzIG1pc3NpbmcuCitTb2x1dGlvbjogICBBZGQgYSBtYW5pZmVzdCBhbmQgcmVmZXIgdG8gaXQgZnJvbSB0aGUgcmVzb3VyY2UgZmlsZS4gIChNaWNoYWVsCisJICAgIFdvb2tleSkKK0ZpbGVzOgkgICAgTWFrZWZpbGUsIHNyYy9ndmltLmV4ZS5tbmYsIHNyYy92aW0ucmMKKworUGF0Y2ggNi4yLjM0OAorUHJvYmxlbTogICAgV2luMzI6ICJ2aW0gYzpcZGlyXCh0ZXN0KSIgZG9lc24ndCB3b3JrLCBiZWNhdXNlIHRoZSAnaXNmbmFtZScKKwkgICAgZGVmYXVsdCB2YWx1ZSBkb2Vzbid0IGNvbnRhaW4gcGFyZW50aGVzaXMuCitTb2x1dGlvbjogICBUZW1wb3JhcmlseSBhZGQgJygnIGFuZCAnKScgdG8gJ2lzZm5hbWUnIHdoZW4gZXhwYW5kaW5nIGZpbGUgbmFtZQorCSAgICBhcmd1bWVudHMuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4yLjM0OQorUHJvYmxlbTogICAgRmluZGluZyBhIG1hdGNoIHVzaW5nICdtYXRjaHBhaXJzJyBtYXkgY2F1c2UgYSBjcmFzaC4KKwkgICAgJ21hdGNocGFpcnMnIGlzIG5vdCB1c2VkIGZvciAnc2hvd21hdGNoJy4KK1NvbHV0aW9uOiAgIERvbid0IGxvb2sgcGFzdCB0aGUgTlVMIGluICdtYXRjaHBhaXJzJy4gIFVzZSAnbWF0Y2hwYWlycycgZm9yCisJICAgICdzaG93bWF0Y2gnLiAoRGF2ZSBPbHN6ZXdrc2tpKQorRmlsZXM6CSAgICBzcmMvbWlzYzEuYywgc3JjL25vcm1hbC5jLCBzcmMvcHJvdG8vc2VhcmNoLnBybywgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuMi4zNTAKK1Byb2JsZW06ICAgIE5vdCBlbm91Z2ggaW5mbyBhYm91dCBzdGFydHVwIHRpbWluZy4KK1NvbHV0aW9uOiAgIEFkZCBhIGZldyBtb3JlIFRJTUVfTVNHKCkgY2FsbHMuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4yLjM1MQorUHJvYmxlbTogICAgV2luMzI6ICRIT01FIG1heSBiZSBzZXQgdG8gJVVTRVJQUk9GSUxFJS4KK1NvbHV0aW9uOiAgIEV4cGFuZCAlVkFSJSBhdCB0aGUgc3RhcnQgb2YgJEhPTUUuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMi4zNTIgKGFmdGVyIDYuMi4zMzUpCitQcm9ibGVtOiAgICAiOnNpZ24gdGV4dGhsPXx8IiBkb2VzIG5vdCB3b3JrLgorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBjaGVjayBmb3IgYSBmb2xsb3dpbmcgY29tbWFuZC4gIEdpdmUgYW4gZXJyb3IgZm9yIGV4dHJhCisJICAgIGFyZ3VtZW50cyBhZnRlciAiYnVmZj0xIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL2V4X2NtZHMuaAorCitQYXRjaCA2LjIuMzUzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBTdXBwb3J0ZWQgc2VydmVyIG5hbWUgbGVuZ3RoIGlzIGxpbWl0ZWQuIChQYXVsIEJvc3NpKQorU29sdXRpb246ICAgVXNlIE1BWF9QQVRIIGluc3RlYWQgb2YgMjUuCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jCisKK1BhdGNoIDYuMi4zNTQgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgaXMgb24gYSB0ZWFyLW9mZiBtZW51IGl0IGlzIGhpZGRlbgorCSAgICB3aGVuIHR5cGluZyBidXQgaXMgbm90IHJlZGlzcGxheWVkIHdoZW4gbW92ZWQuIChNYXJreCBIYWNrbWFubikKK1NvbHV0aW9uOiAgIEhhbmRsZSB0aGUgcG9pbnRlciBtb3ZlIGV2ZW50IGZvciB0aGUgdGVhci1vZmYgbWVudSB3aW5kb3cuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4yLjM1NSAoYWZ0ZXIgNi4yLjMwMykKK1Byb2JsZW06ICAgIFdoZW4gJ2VuY29kaW5nJyBpcyBhIGRvdWJsZS1ieXRlIGVuY29kaW5nIGRpZmZlcmVudCBmcm9tIHRoZQorCSAgICBjdXJyZW50IGxvY2FsZSwgdGhlIHdpZHRoIG9mIGNoYXJhY3RlcnMgaXMgbm90IGNvcnJlY3QuCisJICAgIFBvc3NpYmxlIGZhaWx1cmUgYW5kIG1lbW9yeSBsZWFrIHdoZW4gdXNpbmcgaWNvbnYsIFVuaWNvZGUKKwkgICAgZGlncmFwaHMgYW5kICdlbmNvZGluZycgaXMgbm90ICJ1dGYtOCIuCitTb2x1dGlvbjogICBVc2UgaWNvbnYoKSB0byBkaXNjb3ZlciB0aGUgYWN0dWFsIHdpZHRoIG9mIGNoYXJhY3RlcnMuCisJICAgIEFkZCB0aGUgInZjX2ZhaWwiIGZpZWxkIHRvIHZpbWNvbnZfVC4KKwkgICAgV2hlbiBjb252ZXJ0aW5nIGEgZGlncmFwaCwgaW5pdCB0aGUgY29udmVyc2lvbiB0eXBlIHRvIE5PTkUgYW5kCisJICAgIGNsZWFudXAgYWZ0ZXJ3YXJkcy4KK0ZpbGVzOgkgICAgc3JjL2RpZ3JhcGguYywgc3JjL21ieXRlLmMsIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4yLjM1NgorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIGRvdWJsZS1ieXRlICdlbmNvZGluZycgYW5kICdzZWxlY3Rpb24nIGlzCisJICAgICJleGNsdXNpdmUiLCAidnkiIG9ubHkgeWFua3MgdGhlIGZpcnN0IGJ5dGUgb2YgYSBkb3VibGUtYnl0ZQorCSAgICBjaGFyYWN0ZXIuICAoWGlhbmdqaWFuZyBNYSkKK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlIGNvbHVtbiBpbiB1bmFkanVzdF9mb3Jfc2VsKCkgdG8gcG9zaXRpb24gb24gdGhlIGZpcnN0CisJICAgIGJ5dGUsIGFsd2F5cyBpbmNsdWRlIHRoZSB0cmFpbGluZyBieXRlIG9mIHRoZSBzZWxlY3RlZCB0ZXh0LgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjM1NyAoYWZ0ZXIgNi4yLjMyMSkKK1Byb2JsZW06ICAgIE1lbW9yeSBsZWFrIHdoZW4gcmVzaXppbmcgdGhlIFZpbSB3aW5kb3cuCitTb2x1dGlvbjogICBGcmVlIHRoZSBMaW5lV3JhcHMgYXJyYXkuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjIuMzU4IChhZnRlciA2LjIuMjk5KQorUHJvYmxlbTogICAgTWVtb3J5IGxlYWsgd2hlbiB1c2luZyAiOmhlbHAiIGFuZCB0aGUgbGFuZ3VhZ2UgZG9lc24ndCBtYXRjaC4KK1NvbHV0aW9uOiAgIEZyZWUgdGhlIGFycmF5IHdpdGggbWF0Y2hpbmcgdGFncy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjIuMzU5IChhZnRlciA2LjIuMzUyKQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZyBmb3IgbG9uZyB0byBpbnQgdHlwZSBjYXN0LgorU29sdXRpb246ICAgQWRkIGV4cGxpY2l0IHR5cGUgY2FzdC4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjIuMzYwCitQcm9ibGVtOiAgICAiMTAwfCIgaW4gYW4gZW1wdHkgbGluZSByZXN1bHRzIGluIGEgcnVsZXIgIjEsMC0xMDAiLiAoUGF2b2wKKwkgICAgSnVoYXMpCitTb2x1dGlvbjogICBSZWNvbXB1dGUgd192aXJ0Y29sIGlmIHRoZSB0YXJnZXQgY29sdW1uIHdhcyBub3QgcmVhY2hlZC4KK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4yLjM2MSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogUnVuIGd2aW0sICI6c2V0IGdvLT1tIiwgdXNlIEFsdC1UYWIsIGtlZXAgQWx0IHByZXNzZWQgd2hpbGUKKwkgICAgcHJlc3NpbmcgRXNjLCB0aGVuIHJlbGVhc2UgQWx0OiBDdXJzb3IgZGlzYXBwZWFycyBhbmQgdHlwaW5nIGEga2V5CisJICAgIGNhdXNlcyBhIGJlZXAuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIERvbid0IGlnbm9yZSB0aGUgV01fU1lTS0VZVVAgZXZlbnQgd2hlbiB0aGUgbWVudSBpcyBkaXNhYmxlZC4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjIuMzYyIChleHRyYSwgYWZ0ZXIgNi4yLjM0NykKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgbWFuaWZlc3QgY2F1c2VzIEd2aW0gbm90IHRvIHdvcmsuIChEYXZlIFJvYmVydHMpCitTb2x1dGlvbjogICBDaGFuZ2UgIng4NiIgdG8gIlg4NiIuIChTZXJnZSBQaXJvdHRlKQorRmlsZXM6CSAgICBzcmMvZ3ZpbS5leGUubW5mCisKK1BhdGNoIDYuMi4zNjMKK1Byb2JsZW06ICAgIEluIGFuIGVtcHR5IGZpbGUgd2l0aCAnc2hvd21vZGUnIG9mZiwgImkiIGRvZXNuJ3QgY2hhbmdlIHRoZSBydWxlcgorCSAgICBmcm9tICIwLTEiIHRvICIxIi4gIFR5cGluZyAieDxCUz4iIGRvZXMgc2hvdyAiMSIsIGJ1dCB0aGVuIDxFc2M+CisJICAgIGRvZXNuJ3QgbWFrZSBpdCAiMC0xIiBhZ2Fpbi4gIFNhbWUgcHJvYmxlbSBmb3IgcnVsZXIgaW4KKwkgICAgc3RhdHVzbGluZS4gIChBbmRyZXcgUGltbG90dCkKK1NvbHV0aW9uOiAgIFJlbWVtYmVyIHRoZSAiZW1wdHkgbGluZSIgZmxhZyB3aXRoIEluc2VydCBtb2RlIGFuZCdlZCB0byBpdC4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMi4zNjQKK1Byb2JsZW06ICAgIEhUTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IG1lbnRpb24gdGhlIGVuY29kaW5nLAorCSAgICB3aGljaCBpcyBhIHByb2JsZW0gZm9yIG1ieXRlLnR4dC4KK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgYXdrIHNjcmlwdC4gKElseWEgU2hlcikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvbWFrZWh0bWwuYXdrCisKK1BhdGNoIDYuMi4zNjUKK1Byb2JsZW06ICAgIFRoZSBjb25maWd1cmUgY2hlY2tzIGZvciBQZXJsIGFuZCBQeXRob24gbWF5IGFkZCBjb21waWxlIGFuZCBsaW5rCisJICAgIGFyZ3VtZW50cyB0aGF0IGJyZWFrIGJ1aWxkaW5nIFZpbS4KK1NvbHV0aW9uOiAgIERvIGEgc2FuaXR5IGNoZWNrOiB0cnkgYnVpbGRpbmcgd2l0aCB0aGUgYXJndW1lbnRzLgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4yLjM2NgorUHJvYmxlbTogICAgV2hlbiB0aGUgR1VJIGNhbid0IHN0YXJ0IGJlY2F1c2Ugbm8gdmFsaWQgZm9udCBpcyBmb3VuZCwgdGhlcmUgaXMKKwkgICAgbm8gZXJyb3IgbWVzc2FnZS4gKFVnZW4pCitTb2x1dGlvbjogICBBZGQgYW4gZXJyb3IgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMi4zNjcKK1Byb2JsZW06ICAgIEJ1aWxkaW5nIHRoZSBoZWxwIHRhZ3MgZmlsZSB3aGlsZSBpbnN0YWxsaW5nIG1heSBmYWlsIGlmIHRoZXJlIGlzCisJICAgIGFub3RoZXIgVmltIGluICRQQVRILgorU29sdXRpb246ICAgU3BlY2lmeSB0aGUganVzdCBpbnN0YWxsZWQgVmltIGV4ZWN1dGFibGUuIChHb3Jkb24gUHJpZXVyKQorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjM2OAorUHJvYmxlbTogICAgV2hlbiAnYXV0b2NoZGlyJyBpcyBzZXQsIGNsb3NpbmcgYSB3aW5kb3cgZG9lc24ndCBjaGFuZ2UgdG8gdGhlCisJICAgIGRpcmVjdG9yeSBvZiB0aGUgbmV3IGN1cnJlbnQgd2luZG93LiAoU2FsbWFuIEhhbGltKQorU29sdXRpb246ICAgSGFuZGxlICdhdXRvY2hkaXInIGFsd2F5cyB3aGVuIGEgd2luZG93IGJlY29tZXMgdGhlIGN1cnJlbnQgb25lLgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4yLjM2OQorUHJvYmxlbTogICAgVmFyaW91cyBtZW1vcnkgbGVha3M6IHdoZW4gdXNpbmcgZ2xvYnBhdGgoKSwgd2hlbiBzZWFyY2hpbmcgZm9yCisJICAgIGhlbHAgdGFncyBmaWxlcywgd2hlbiBkZWZpbmluZyBhIGZ1bmN0aW9uIGluc2lkZSBhIGZ1bmN0aW9uLCB3aGVuCisJICAgIGdpdmluZyBhbiBlcnJvciBtZXNzYWdlIHRocm91Z2ggYW4gZXhjZXB0aW9uLCBmb3IgdGhlIGZpbmFsICIuIgorCSAgICBsaW5lIGluICI6YXBwZW5kIiwgaW4gZXhwcmVzc2lvbiAiY29uZCA/IGEgOiBiIiB0aGF0IGZhaWxzIGFuZCBmb3IKKwkgICAgbWlzc2luZyAiKSIgaW4gYW4gZXhwcmVzc2lvbi4gIFVzaW5nIE5VTEwgcG9pbnRlciB3aGVuIGFkZGluZworCSAgICBmaXJzdCB1c2VyIGNvbW1hbmQgYW5kIGZvciBwb2ludGVyIGNvbXB1dGF0aW9ucyB3aXRoIHJlZ2V4cC4KKwkgICAgKHRlc3RzIGJ5IERvbWluaXF1ZSBQZWxsZSkKK1NvbHV0aW9uOiAgIEZpeCB0aGUgbGVha3MgYnkgZnJlZWluZyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gIERvbid0IHVzZSB0aGUKKwkgICAgYXJyYXkgb2YgdXNlciBjb21tYW5kcyB3aGVuIHRoZXJlIGFyZSBubyBlbnRyaWVzLiAgVXNlIGEgbWFjcm8KKwkgICAgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIGNhbGwgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIHJlZ2V4cCBzdGF0ZXMuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9leF9jbWRzLmMsIHNyYy9leF9kb2NtZC5jLCBzcmMvZXhfZ2V0bG4uYywKKwkgICAgc3JjL21pc2MyLmMsIHNyYy9yZWdleHAuYywgc3JjL3NjcmVlbi5jLCBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjM3MCAoZXh0cmEsIGFmdGVyNi4yLjM0MSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIHRoZSBwYXRoIHRvIGRpZmYuZXhlIGNvbnRhaW5zIGEgc3BhY2UgYW5kIHVzaW5nIHRoZQorCSAgICB2aW1yYyBnZW5lcmF0ZWQgYnkgdGhlIGluc3RhbGwgcHJvZ3JhbSwgZGlmZiBtb2RlIG1heSBub3Qgd29yay4KKwkgICAgKEFsZWphbmRybyBMb3Blei1WYWxlbmNpYSkKK1NvbHV0aW9uOiAgIERvIG5vdCB1c2UgZG91YmxlIHF1b3RlcyBmb3IgYXJndW1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBzcGFjZS4KK0ZpbGVzOgkgICAgc3JjL2Rvc2luc3QuYworCitQYXRjaCA2LjIuMzcxCitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0IGFuZCB0aGVyZSBpcyBhIFRhYiBiZWZvcmUgdGhlIG5leHQgIngiLAorCSAgICAiZHR4IiBkb2VzIG5vdCBkZWxldGUgdGhlIHdob2xlIFRhYi4gKEtlbiBIYXNoaXNoaSkKK1NvbHV0aW9uOiAgIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgVGFiLiAgQWxzbyBmb3IKKwkgICAgImRmPFRhYj4iLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjM3MgorUHJvYmxlbTogICAgV2hlbiB1c2luZyBiYWxsb29uIGV2YWx1YXRpb24sIG5vIHZhbHVlIGlzIGRpc3BsYXllZCBmb3IgbWVtYmVycworCSAgICBvZiBzdHJ1Y3R1cmVzIGFuZCBpdGVtcyBvZiBhbiBhcnJheS4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgIi0+IiwgIi4iIGFuZCAiWypdIiBpbiB0aGUgZXhwcmVzc2lvbi4KK0ZpbGVzOgkgICAgc3JjL2d1aV9iZXZhbC5jLCBzcmMvbm9ybWFsLmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMzczCitQcm9ibGVtOiAgICBXaGVuICd3aW5taW5oZWlnaHQnIGlzIHplcm8gYW5kIGEgd2luZG93IGlzIHJlZHVjZWQgdG8gemVybworCSAgICBoZWlnaHQsIHRoZSBydWxlciBhbHdheXMgc2F5cyAiVG9wIiBpbnN0ZWFkIG9mIHRoZSBjdXJzb3IKKwkgICAgcG9zaXRpb24uIChBbnRvaW5lIEouIE1lY2hlbHluY2spCitTb2x1dGlvbjogICBEb24ndCByZWNvbXB1dGUgd190b3BsaW5lIGZvciBhIHplcm8taGVpZ2h0IHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMi4zNzQKK1Byb2JsZW06ICAgICI6ZWNobyAiaGVsbG8iIHwgc2lsZW50IG5vcm1hbCBuIiByZW1vdmVzIHRoZSAiaGVsbG8iIG1lc3NhZ2UuCisJICAgIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgRG9uJ3QgZWNobyB0aGUgc2VhcmNoIHN0cmluZyB3aGVuICI6c2lsZW50IiB3YXMgdXNlZC4gIEFsc28gZG9uJ3QKKwkgICAgc2hvdyB0aGUgbW9kZS4gIEluIGdlbmVyYWw6IGRvbid0IGNsZWFyIHRvIHRoZSBlbmQgb2YgdGhlIHNjcmVlbi4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvbWVzc2FnZS5jLCBzcmMvb3NfdW5peC5jLCBzcmMvcHJvdG8vbWVzc2FnZS5wcm8sCisJICAgIHNyYy9zY3JlZW4uYywgc3JjL3NlYXJjaC5jLCBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4yLjM3NQorUHJvYmxlbTogICAgV2hlbiBjaGFuZ2luZyAnZ3Vpb3B0aW9ucycgdGhlIGhpdC1lbnRlciBwcm9tcHQgbWF5IGJlIGJlbG93IHRoZQorCSAgICBlbmQgb2YgdGhlIFZpbSB3aW5kb3cuCitTb2x1dGlvbjogICBDYWxsIHNjcmVlbl9hbGxvYygpIGJlZm9yZSBzaG93aW5nIHRoZSBwcm9tcHQuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4yLjM3NgorUHJvYmxlbTogICAgV2luMzI6IFJ1YnkgaW50ZXJmYWNlIGNhbm5vdCBiZSBkeW5hbWljYWxseSBsaW5rZWQgd2l0aCBSdWJ5IDEuNi4KK1NvbHV0aW9uOiAgIEFkZCAjaWZkZWZzIGFyb3VuZCB1c2Ugb2YgcmJfdzMyX3NucHJpbnRmKCkuICAoQmVub+50IENlcnJpbmEpCitGaWxlczoJICAgIHNyYy9pZl9ydWJ5LmMKKworUGF0Y2ggNi4yLjM3NyAoYWZ0ZXIgNi4yLjM3MikKK1Byb2JsZW06ICAgIENvbXBpbGVyIHdhcm5pbmdzIGZvciBzaWduZWQvdW5zaWduZWQgY29tcGFyZS4gKE1pY2hhZWwgV29va2V5KQorU29sdXRpb246ICAgQWRkIHR5cGUgY2FzdC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMi4zNzggKGV4dHJhLCBhZnRlciA2LjIuMTE4KQorUHJvYmxlbTogICAgTWFjOiBjYW5ub3QgYnVpbGQgd2l0aCBQcm9qZWN0IEJ1aWxkZXIuCitTb2x1dGlvbjogICBBZGQgcmVtb3ZlX3RhaWxfd2l0aF9leHQoKSB0byBsb2NhdGUgYW5kIHJlbW92ZSB0aGUgImJ1aWxkIgorCSAgICBkaXJlY3RvcnkgZnJvbSB0aGUgcnVudGltZSBwYXRoLiAgSW5jbHVkZSBvc191bml4LmMgd2hlbiBuZWVkZWQuCisJICAgIChEYW55IFN0IEFtYW50KQorRmlsZXM6CSAgICBzcmMvbWlzYzEuYywgc3JjL29zX21hY29zeC5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjM3OQorUHJvYmxlbTogICAgVXNpbmcgIjpta3ZpbXJjIiBpbiB0aGUgIjpvcHRpb25zIiB3aW5kb3cgc2V0cyAnYnVmaGlkZGVuJyB0bworCSAgICAiZGVsZXRlIi4gKE1pY2hhZWwgTmF1bWFubikKK1NvbHV0aW9uOiAgIERvIG5vdCBhZGQgYnVmZmVyLXNwZWNpZmljIG9wdGlvbiB2YWx1ZXMgdG8gYSBnbG9iYWwgdmltcmMgZmlsZS4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4zODAgKGV4dHJhKQorUHJvYmxlbTogICAgRE9TOiAibWFrZSB0ZXN0IiBmYWlscyB3aGVuIHJ1bm5pbmcgaXQgYWdhaW4uICBDYW4ndCAibWFrZSB0ZXN0IgorCSAgICB3aXRoIEJvcmxhbmQgQy4KK1NvbHV0aW9uOiAgIE1ha2Ugc3VyZSAiLm91dCIgZmlsZXMgYXJlIGRlbGV0ZWQgd2hlbiB0aGV5IGdldCBpbiB0aGUgd2F5LiAgQWRkCisJICAgIGEgInRlc3QiIHRhcmdldCB0byB0aGUgQm9ybGFuZCBDIE1ha2VmaWxlLgorRmlsZXM6CSAgICBzcmMvTWFrZV9iYzUubWFrLCBzcmMvdGVzdGRpci9NYWtlX2Rvcy5tYWsKKworUGF0Y2ggNi4yLjM4MQorUHJvYmxlbTogICAgU2V0dGluZyAnZmlsZWVuY29kaW5nJyB0byBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IChjb25mdXNpbmcgaXQKKwkgICAgd2l0aCAnZmlsZWVuY29kaW5ncycpIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBlcnJvciBtZXNzYWdlLgorCSAgICBTZXR0aW5nICdmaWxlZW5jb2RpbmcnIGluIGFuIGVtcHR5IGZpbGUgbWFya3MgaXQgYXMgbW9kaWZpZWQuCisJICAgIFRoZXJlIGlzIG5vICIrIiBpbiB0aGUgdGl0bGUgYWZ0ZXIgc2V0dGluZyAnZmlsZWVuY29kaW5nJy4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIGNvbW1hIGluICdmaWxlZW5jb2RpbmcnLiAgT25seSBjb25zaWRlciBhIG5vbi1lbXB0eQorCSAgICBmaWxlIG1vZGlmaWVkIGJ5IGNoYW5naW5nICdmaWxlZW5jb2RpbmcnLiAgVXBkYXRlIHRoZSB0aXRsZSBhZnRlcgorCSAgICBjaGFuZ2luZyAnZmlsZWVuY29kaW5nJy4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4zODIKK1Byb2JsZW06ICAgIFJ1bm5pbmcgIm1ha2UgdGVzdCIgcHV0cyBtYXJrcyBmcm9tIHRlc3QgZmlsZXMgaW4gdmltaW5mby4KK1NvbHV0aW9uOiAgIFNwZWNpZnkgYSBkaWZmZXJlbnQgdmltaW5mbyBmaWxlIHRvIHVzZS4KK0ZpbGVzOgkgICAgc3JjL3Rlc3RkaXIvdGVzdDE1LmluLCBzcmMvdGVzdGRpci90ZXN0NDkuaW4KKworUGF0Y2ggNi4yLjM4MworUHJvYmxlbTogICAgIjpoaSBmb28gdGVybT0nYmxhIiBjcmFzaGVzIFZpbS4gKEFudG9ueSBTY3JpdmVuKQorU29sdXRpb246ICAgQ2hlY2sgdGhhdCB0aGUgY2xvc2luZyAnIGlzIHRoZXJlLgorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4yLjM4NAorUHJvYmxlbTogICAgIjptZW51IGEuJmIiICI6dW5tZW51IGEuYiIgb25seSB3b3JrcyBpZiAiJmIiIGlzbid0IHRyYW5zbGF0ZWQuCitTb2x1dGlvbjogICBBbHNvIGNvbXBhcmUgdGhlIG5hbWVzIHdpdGhvdXQgJyYnIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9tZW51LmMKKworUGF0Y2ggNi4yLjM4NSAgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IGZvcndhcmRfc2xhc2goKSBhbmQgdHJhc2hfaW5wdXRfYnVmKCkgYXJlIHVuZGVmaW5lZCB3aGVuCisJICAgIGNvbXBpbGluZyB3aXRoIHNtYWxsIGZlYXR1cmVzLiAoQWppdCBUaGFra2FyKQorU29sdXRpb246ICAgQ2hhbmdlIHRoZSAjaWZkZWZzIGZvciBmb3J3YXJkX3NsYXNoKCkuICBEb24ndCBjYWxsCisJICAgIHRyYXNoX2lucHV0X2J1ZigpIGlmIHRoZSBpbnB1dCBidWZmZXIgaXNuJ3QgdXNlZC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjIuMzg2CitQcm9ibGVtOiAgICBXYXN0aW5nIHRpbWUgdHJ5aW5nIHRvIHJlYWQgbWFya3MgZnJvbSB0aGUgdmltaW5mbyBmaWxlIGZvciBhCisJICAgIGJ1ZmZlciB3aXRob3V0IGEgbmFtZS4KK1NvbHV0aW9uOiAgIFNraXAgcmVhZGluZyBtYXJrcyB3aGVuIHRoZSBidWZmZXIgaGFzIG5vIG5hbWUuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjIuMzg3CitQcm9ibGVtOiAgICBUaGVyZSBpcyBubyBoaWdobGlnaHRpbmcgb2YgdHJhbnNsYXRlZCBpdGVtcyBpbiBoZWxwIGZpbGVzLgorU29sdXRpb246ICAgU2VhcmNoIGZvciBhICJoZWxwX2FiLnZpbSIgc3ludGF4IGZpbGUgd2hlbiB0aGUgaGVscCBmaWxlIGlzCisJICAgIGNhbGxlZCAiKi5hYngiLiAgQWxzbyBpbXByb3ZlIHRoZSBoZWxwIGhpZ2hsaWdodGluZyBhIGJpdC4KK0ZpbGVzOgkgICAgcnVudGltZS9zeW50YXgvaGVscC52aW0KKworUGF0Y2ggNi4yLjM4OAorUHJvYmxlbTogICAgR1RLOiBXaGVuIGRpc3BsYXlpbmcgc29tZSBkb3VibGUtd2lkdGggY2hhcmFjdGVycyB0aGV5IGFyZSBkcmF3bgorCSAgICBhcyBzaW5nbGUtd2lkdGgsIGJlY2F1c2Ugb2YgY29udmVyc2lvbiB0byBVVEYtOC4KK1NvbHV0aW9uOiAgIENoZWNrIHRoZSB3aWR0aCB0aGF0IEdUSyB1c2VzIGFuZCBhZGQgYSBzcGFjZSBpZiBpdCdzIG9uZSBpbnN0ZWFkCisJICAgIG9mIHR3by4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNi4yLjM4OQorUHJvYmxlbTogICAgV2hlbiB3b3JraW5nIG92ZXIgYSBzbG93IGNvbm5lY3Rpb24sIGl0J3MgdmVyeSBhbm5veWluZyB0aGF0IHRoZQorCSAgICBsYXN0IGxpbmUgaXMgcGFydGx5IGRyYXduIGFuZCB0aGVuIGNsZWFyZWQgZm9yIGV2ZXJ5IGNoYW5nZS4KK1NvbHV0aW9uOiAgIERvbid0IHJlZHJhdyB0aGUgYm90dG9tIGxpbmUgaWYgbm8gcm93cyB3ZXJlIGluc2VydGVkIG9yIGRlbGV0ZWQuCisJICAgIERvbid0IGRyYXcgdGhlIGxpbmUgaWYgd2Uga25vdyAiQCIgbGluZXMgd2lsbCBiZSB1c2VkLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4yLjM5MAorUHJvYmxlbTogICAgVXNpbmcgInIqIiBpbiBWaXN1YWwgbW9kZSBvbiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgb25seSByZXBsYWNlcworCSAgICBldmVyeSBvdGhlciBjaGFyYWN0ZXIuIChUeXNvbiBSb2JlcnRzKQorU29sdXRpb246ICAgQ29ycmVjdCB0aGUgY3Vyc29yIHBvc2l0aW9uIGFmdGVyIHJlcGxhY2luZyBlYWNoIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMi4zOTEgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlICI6aGlnaGxpZ2h0IiBjb21tYW5kIGlzIG5vdCB0ZXN0ZWQuCitTb2x1dGlvbjogICBBZGQgYSB0ZXN0IHNjcmlwdCBmb3IgIjpoaWdobGlnaHQiLgorRmlsZXM6CSAgICBzcmMvdGVzdGRpci9NYWtlZmlsZSwgc3JjL3Rlc3RkaXIvTWFrZV9hbWlnYS5tYWssCisJICAgIHNyYy90ZXN0ZGlyL01ha2VfZG9zLm1haywgc3JjL3Rlc3RkaXIvTWFrZV9vczIubWFrLAorCSAgICBzcmMvdGVzdGRpci9NYWtlX3Ztcy5tbXMsIHNyYy90ZXN0ZGlyL3Rlc3Q1MS5pbiwKKwkgICAgc3JjL3Rlc3RkaXIvdGVzdDUxLm9rCisKK1BhdGNoIDYuMi4zOTIgKGFmdGVyIDYuMi4zODQpCitQcm9ibGVtOiAgICBVbnVzZWQgdmFyaWFibGUuCitTb2x1dGlvbjogICBSZW1vdmUgImRsZW4iLgorRmlsZXM6CSAgICBzcmMvbWVudS5jCisKK1BhdGNoIDYuMi4zOTMKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgdmVyeSBsb25nIGxpbmVzIHRoZSB2aW1pbmZvIGZpbGUgY2FuIGJlY29tZSB2ZXJ5IGJpZy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgInMiIGZsYWcgdG8gJ3ZpbWluZm8nOiBza2lwIHJlZ2lzdGVycyB3aXRoIG1vcmUgdGhhbiB0aGUKKwkgICAgc3BlY2lmaWVkIEtieXRlIG9mIHRleHQuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL29wdGlvbnMudHh0LCBzcmMvb3BzLmMsIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuMzk0ICAoYWZ0ZXIgNi4yLjM5MSkKK1Byb2JsZW06ICAgIFRlc3QgNTEgZmFpbHMgb24gYSB0ZXJtaW5hbCB3aXRoIDggY29sb3JzLiAoVG9ueSBMZW5laXMpCitTb2x1dGlvbjogICBVc2UgIkRhcmtCbHVlIiBpbnN0ZWFkIG9mICJCbHVlIiB0byBhdm9pZCB0aGUgImJvbGQiIGF0dHJpYnV0ZS4KK0ZpbGVzOgkgICAgc3JjL3Rlc3RkaXIvdGVzdDUxLmluCisKK1BhdGNoIDYuMi4zOTUKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjp0YWciIG9yICI6cG9wIiB0aGUgcHJldmlvdXMgbWF0Y2hpbmcgdGFnIGlzIHVzZWQuCisJICAgIEJ1dCBzaW5jZSB0aGUgY3VycmVudCBmaWxlIGlzIGRpZmZlcmVudCwgdGhlIG9yZGVyaW5nIG9mIHRoZSB0YWdzCisJICAgIG1heSBjaGFuZ2UuCitTb2x1dGlvbjogICBSZW1lbWJlciB3aGF0IHRoZSBjdXJyZW50IGJ1ZmZlciB3YXMgZm9yIHdoZW4gcmUtdXNpbmcgY3VyX21hdGNoLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvZXhfY21kcy5jLCBzcmMvcHJvdG8vdGFnLnBybywgc3JjL3N0cnVjdHMuaCwKKwkgICAgc3JjL3RhZy5jCisKK1BhdGNoIDYuMi4zOTYKK1Byb2JsZW06ICAgIFdoZW4gQ1RSTC1UIGp1bXBzIHRvIGFub3RoZXIgZmlsZSBhbmQgYW4gYXV0b2NvbW1hbmQgbW92ZXMgdGhlCisJICAgIGN1cnNvciB0byB0aGUgJyIgbWFyaywgZG9uJ3QgZW5kIHVwIG9uIHRoZSByaWdodCBsaW5lLiAgKE1pY2hhbAorCSAgICBNYWxlY2tpKQorU29sdXRpb246ICAgU2V0IHRoZSBsaW5lIG51bWJlciBhZnRlciBsb2FkaW5nIHRoZSBmaWxlLgorRmlsZXM6CSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjM5NworUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIGRvdWJsZS1ieXRlICdlbmNvZGluZycgbWFwcGluZyA8TS14PiBkb2Vzbid0IHdvcmsuCisJICAgIChZYXN1aGlybyBNYXRzdW1vdG8pCitTb2x1dGlvbjogICBEbyBub3Qgc2V0IHRoZSA4dGggYml0IG9mIHRoZSBjaGFyYWN0ZXIgYnV0IHVzZSBhIG1vZGlmaWVyLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYywgc3JjL2d1aV94MTEuYywgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4yLjM5OCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBjb25zb2xlOiBubyBleHRyYSBrZXkgbW9kaWZpZXJzIGFyZSBzdXBwb3J0ZWQuCitTb2x1dGlvbjogICBFbmNvZGUgdGhlIG1vZGlmaWVycyBpbnRvIHRoZSBpbnB1dCBzdHJlYW0uICBBbHNvIGZpeCB0aGF0IHNwZWNpYWwKKwkgICAga2V5cyBhcmUgY29udmVydGVkIGFuZCBzdG9wIHdvcmtpbmcgd2hlbiAndGVuYycgaXMgc2V0LiAgQWxzbyBmaXgKKwkgICAgdGhhdCB3aGVuICd0ZW5jJyBpcyBpbnRpYWxpemVkIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGNvbnZlcnNpb24gaXMKKwkgICAgbm90IHNldHVwIHByb3Blcmx5IHVudGlsICdlbmMnIG9yICd0ZW5jJyBpcyBzZXQuCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMsIHNyYy9vcHRpb24uYywgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4yLjM5OQorUHJvYmxlbTogICAgQSAiOnNldCIgY29tbWFuZCB0aGF0IGZhaWxzIHN0aWxsIHdyaXRlcyBhIG1lc3NhZ2Ugd2hlbiBpdCBpcworCSAgICBpbnNpZGUgYSB0cnkvY2F0Y2ggYmxvY2suCitTb2x1dGlvbjogICBJbmNsdWRlIGFsbCB0aGUgdGV4dCBvZiB0aGUgbWVzc2FnZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL2NoYXJzZXQuYywgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi40MDAKK1Byb2JsZW06ICAgIENhbid0IGNvbXBpbGUgaWZfeGNtZHNydi5jIG9uIEhQLVVYIDExLjAuCitTb2x1dGlvbjogICBJbmNsdWRlIGhlYWRlciBmaWxlIHBvbGwuaC4gKE1hbHRlIE5ldW1hbm4pCitGaWxlczoJICAgIHNyYy9pZl94Y21kc3J2LmMKKworUGF0Y2ggNi4yLjQwMQorUHJvYmxlbTogICAgV2hlbiBvcGVuaW5nIGEgYnVmZmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgb3BlbmVkLCBWaW0gZG9lcyBub3QKKwkgICAgcmVzdG9yZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGlmIHRoZSBmaXJzdCBsaW5lIHN0YXJ0cyB3aXRoIHdoaXRlCisJICAgIHNwYWNlLiAgKEdyZWdvcnkgTWFyZ28pCitTb2x1dGlvbjogICBEb24ndCBza2lwIHJlc3RvcmluZyB0aGUgY3Vyc29yIHBvc2l0aW9uIGlmIGl0IGlzIHBhc3QgdGhlIGJsYW5rcworCSAgICBpbiB0aGUgZmlyc3QgbGluZS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMi40MDIKK1Byb2JsZW06ICAgIE1hYzogIm1ha2UgaW5zdGFsbCIgZG9lc24ndCBnZW5lcmF0ZSBoZWxwIHRhZ3MuIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBHZW5lcmF0ZSBoZWxwIHRhZ3MgYmVmb3JlIGNvcHlpbmcgdGhlIHJ1bnRpbWUgZmlsZXMuCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA2LjIuNDAzCitQcm9ibGVtOiAgICAiOkB5IiBjaGVja3Mgc3RkaW4gaWYgdGhlcmUgYXJlIG1vcmUgY29tbWFuZHMgdG8gZXhlY3V0ZS4gIFRoaXMKKwkgICAgZmFpbHMgaWYgc3RkaW4gaXMgbm90IGNvbm5lY3RlZCwgZS5nLiwgd2hlbiBzdGFydGluZyB0aGUgR1VJIGZyb20KKwkgICAgS0RFLiAoTmVkIEtvbnopCitTb2x1dGlvbjogICBPbmx5IGNoZWNrIGZvciBhIG5leHQgY29tbWFuZCBpZiB0aGVyZSBzdGlsbCBpcyB0eXBlYWhlYWQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi40MDQKK1Byb2JsZW06ICAgIE91ciBvd24gZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdpZHRoIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBtYXkgZ2V0CisJICAgIG91dGRhdGVkLiAoTWFya3VzIEt1aG4pCitTb2x1dGlvbjogICBVc2Ugd2N3aWR0aCgpIHdoZW4gaXQgaXMgYXZhaWxhYmxlLiAgQWxzbyB1c2UgaXN3cHJpbnQoKS4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlnLmguaW4sIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMi40MDUKK1Byb2JsZW06ICAgIENhbm5vdCBtYXAgemVybyB3aXRob3V0IGJyZWFraW5nIHRoZSBjb3VudCBiZWZvcmUgYSBjb21tYW5kLgorCSAgICAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgRGlzYWJsZSBtYXBwaW5nIHplcm8gd2hlbiBlbnRlcmluZyBhIGNvdW50LgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jLCBzcmMvZ2xvYmFscy5oLCBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjQwNgorUHJvYmxlbTogICAgIjpoZWxwIFx6cyIsICI6aGVscCBcQD0iIGFuZCBzaW1pbGFyIGRvbid0IGZpbmQgdXNlZnVsIGhlbHAuCitTb2x1dGlvbjogICBQcmVwZW5kICIvXCIgdG8gdGhlIGFyZ3VtZW50cyB0byBmaW5kIHRoZSBkZXNpcmVkIGhlbHAgdGFnLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMi40MDcgKGFmdGVyIDYuMi4yOTkpCitQcm9ibGVtOiAgICAiOmhlbHAgXEA8PSIgZG9lc24ndCBmaW5kIGhlbHAuCitTb2x1dGlvbjogICBBdm9pZCB0aGF0ICI6aGVscCBcQDw9IiBzZWFyY2hlcyBmb3IgdGhlICI8PSIgbGFuZ3VhZ2UuCitGaWxlczoJICAgIHNyYy90YWcuYworCitQYXRjaCA2LjIuNDA4CitQcm9ibGVtOiAgICAiOmNvbXBpbGVyIiBpcyBub3QgY29uc2lzdGVudDogU2V0cyBsb2NhbCBvcHRpb25zIGFuZCBhIGdsb2JhbAorCSAgICB2YXJpYWJsZS4gKERvdWdsYXMgUG90dHMpICBUaGVyZSBpcyBubyBlcnJvciBtZXNzYWdlIHdoZW4gYQorCSAgICBjb21waWxlciBpcyBub3Qgc3VwcG9ydGVkLgorU29sdXRpb246ICAgVXNlICI6Y29tcGlsZXIhIiB0byBzZXQgYSBjb21waWxlciBnbG9iYWxseSwgb3RoZXJ3aXNlIGl0J3MgbG9jYWwKKwkgICAgdG8gdGhlIGJ1ZmZlciBhbmQgImI6Y3VycmVudF9jb21waWxlciIgaXMgdXNlZC4gIEdpdmUgYW4gZXJyb3IKKwkgICAgd2hlbiBubyBjb21waWxlciBzY3JpcHQgY291bGQgYmUgZm91bmQuCisJICAgIE5vdGU6IHVwZGF0ZWQgY29tcGlsZXIgcGx1Z2lucyBjYW4gYmUgZm91bmQgYXQKKwkgICAgZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS9ydW50aW1lL2NvbXBpbGVyLworRmlsZXM6CSAgICBydW50aW1lL2NvbXBpbGVyL21zdmMudmltLCBydW50aW1lL2RvYy9xdWlja2ZpeC50eHQsIHNyYy9ldmFsLmMsCisJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMi40MDkKK1Byb2JsZW06ICAgIFRoZSBjdXJzb3IgZW5kcyB1cCBpbiB0aGUgbGFzdCBjb2x1bW4gaW5zdGVhZCBvZiBhZnRlciB0aGUgbGluZQorCSAgICB3aGVuIGRvaW5nICJpLy88RXNjPm8iIHdpdGggJ2luZGVudGV4cHInIHNldCB0byAiY2luZGVudCh2OmxudW0pIi4KKwkgICAgKFRvYnkgQWxsc29wcCkKK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgY3Vyc29yIGFzIGlmIGluIEluc2VydCBtb2RlLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA2LjIuNDEwIChhZnRlciA2LjIuMzg5KQorUHJvYmxlbTogICAgSW4gZGlmZiBtb2RlLCB3aGVuIHRoZXJlIGFyZSBtb3JlIGZpbGxlciBsaW5lcyB0aGFuIGZpdCBpbiB0aGUKKwkgICAgd2luZG93LCB0aGV5IGFyZSBub3QgZHJhd24uCitTb2x1dGlvbjogICBDaGVjayBmb3IgZmlsbGVyIGxpbmVzIHdoZW4gc2tpcHBpbmcgdG8gZHJhdyBhIGxpbmUgdGhhdCBkb2Vzbid0CisJICAgIGZpdC4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMi40MTEKK1Byb2JsZW06ICAgIEEgIlxuIiBpbnNpZGUgYSBzdHJpbmcgaXMgbm90IHNlZW4gYXMgYSBsaW5lIGJyZWFrIGJ5IHRoZSByZWd1bGFyCisJICAgIGV4cHJlc3Npb24gbWF0Y2hpbmcuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIEFkZCB0aGUgdmltX3JlZ2V4ZWNfbmwoKSBmdW5jdGlvbiBmb3Igc3RyaW5ncyB3aGVyZSAiXG4iIGlzIHRvIGJlCisJICAgIG1hdGNoZWQgd2l0aCBhIGxpbmUgYnJlYWsuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9leF9ldmFsLmMsIHNyYy9wcm90by9yZWdleHAuYywgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMi40MTIKK1Byb2JsZW06ICAgIFJ1Ynk6ICJydWJ5IDw8IEVPRiIgaW5zaWRlIGEgZnVuY3Rpb24gZG9lc24ndCBhbHdheXMgd29yay4gIEFsc28KKwkgICAgZm9yICI6cHl0aG9uIiwgIjp0Y2wiIGFuZCAiOnBlcmwiLgorU29sdXRpb246ICAgQ2hlY2sgZm9yICI8PCBtYXJrZXIiIGFuZCBza2lwIHVudGlsICJtYXJrZXIiIGJlZm9yZSBjaGVja2luZyBmb3IKKwkgICAgImVuZGZ1bmN0aW9uIi4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuNDEzIChhZnRlciA2LjIuNDExKQorUHJvYmxlbTogICAgTWlzc2luZyBwcm90b3R5cGUgZm9yIHZpbV9yZWdleGVjX25sKCkuIChNYXJjZWwgU3ZpdGFsc2t5KQorU29sdXRpb246ICAgTm93IHJlYWxseSBpbmNsdWRlIHRoZSBwcm90b3R5cGUuCitGaWxlczoJICAgIHNyYy9wcm90by9yZWdleHAucHJvCisKK1BhdGNoIDYuMi40MTQKK1Byb2JsZW06ICAgIFRoZSBmdW5jdGlvbiB1c2VkIGZvciBjdXN0b20gY29tcGxldGlvbiBvZiB1c2VyIGNvbW1hbmRzIGNhbm5vdAorCSAgICBoYXZlIDxTSUQ+IHRvIG1ha2UgaXQgbG9jYWwuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIFBhc3MgdGhlIFNJRCBvZiB0aGUgc2NyaXB0IHdoZXJlIHRoZSB1c2VyIGNvbW1hbmQgd2FzIGRlZmluZWQgb24KKwkgICAgdG8gdGhlIGNvbXBsZXRpb24uICBBbHNvIGNsZWFuIHVwICNpZmRlZnMuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvZXZhbC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjIuNDE1CitQcm9ibGVtOiAgICBWaW0gbWF5IGNyYXNoIGFmdGVyIGEgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQgY2hhbmdlIHRoZSB3aW5kb3cKKwkgICAgc2l6ZS4gIFRoZSB3aW5kb3cgbGF5b3V0IGFzc3VtZXMgYSBsYXJnZXIgd2luZG93IHRoYW4gaXMgYWN0dWFsbHkKKwkgICAgYXZhaWxhYmxlLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIEludm9rZSB3aW5fbmV3X3NoZWxsc2l6ZSgpIGZyb20gc2NyZWVuYWxsb2MoKSBpbnN0ZWFkIG9mIGZyb20KKwkgICAgc2V0X3NoZWxsc2l6ZSgpLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMsIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4yLjQxNgorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZyBmb3IgaW5jb21wYXRpYmxlIHBvaW50ZXIuCitTb2x1dGlvbjogICBSZW1vdmUgdGhlICImIiBpbiB0aGUgY2FsbCB0byBwb2xsKCkuIChYYXZpZXIgZGUgR2F5ZSkKK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuNDE3IChhZnRlciA2LjIuMzkzKQorUHJvYmxlbTogICAgTWFueSBwZW9wbGUgZm9yZ2V0IHRoYXQgdGhlICciJyBpdGVtIGluICd2aW1pbmZvJyBuZWVkcyB0byBiZQorCSAgICBwcmVjZWRlZCB3aXRoIGEgYmFja3NsYXNoLAorU29sdXRpb246ICAgQWRkICc8JyBhcyBhbiBhbGlhcyBmb3IgdGhlICciJyBpdGVtLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgc3JjL29wcy5jLCBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4yLjQxOAorUHJvYmxlbTogICAgVXNpbmcgIjpubm9yZW1hcCA8RjEyPiA6ZWNobyAiY2hlZXNlIiBhbmQgIjpjYWJiciBjaGVlc2UgeHh4IjoKKwkgICAgd2hlbiBwcmVzc2luZyA8RjEyPiBzdGlsbCB1c2VzIHRoZSBhYmJyZXZpYXRpb24uIChIYXJpIEtyaXNobmEpCitTb2x1dGlvbjogICBBbHNvIGFwcGx5ICJub3JlbWFwIiB0byBhYmJyZXZpYXRpb25zLgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jCisKK1BhdGNoIDYuMi40MTkgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IENhbm5vdCBvcGVuIHRoZSBWaW0gd2luZG93IGluc2lkZSBhbm90aGVyIGFwcGxpY2F0aW9uLgorU29sdXRpb246ICAgQWRkIHRoZSAiLVAiIGFyZ3VtZW50IHRvIHNwZWNpZnkgdGhlIHdpbmRvdyB0aXRsZSBvZiB0aGUKKwkgICAgYXBwbGljYXRpb24gdG8gcnVuIGluc2lkZS4gKFppYm8gWmhhbykKK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvc3RhcnRpbmcudHh0LCBzcmMvbWFpbi5jLCBzcmMvZ3VpX3czMi5jLAorCSAgICBzcmMvZ3VpX3c0OC5jLCBzcmMvaWZfb2xlLmNwcCwgc3JjL29zX21zd2luLmMsCisJICAgIHNyYy9wcm90by9ndWlfdzMyLnBybworCitQYXRjaCA2LjIuNDIwCitQcm9ibGVtOiAgICBDYW5ub3Qgc3BlY2lmeSBhIGZpbGUgdG8gYmUgZWRpdGVkIGluIGJpbmFyeSBtb2RlIHdpdGhvdXQgc2V0dGluZworCSAgICB0aGUgZ2xvYmFsIHZhbHVlIG9mIHRoZSAnYmluYXJ5JyBvcHRpb24uCitTb2x1dGlvbjogICBTdXBwb3J0ICI6ZWRpdCArK2JpbiBmaWxlIi4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZWRpdGluZy50eHQsIHNyYy9idWZmZXIuYywgc3JjL2V2YWwuYywgc3JjL2V4X2NtZHMuaCwKKwkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9maWxlaW8uYywgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4yLjQyMQorUHJvYmxlbTogICAgQ2Fubm90IHNldCB0aGUgJ1sgYW5kICddIG1hcmssIHdoaWNoIG1heSBiZSBuZWNlc3Nhcnkgd2hlbiBhbgorCSAgICBhdXRvY29tbWFuZCBzaW11bGF0ZXMgcmVhZGluZyBhIGZpbGUuCitTb2x1dGlvbjogICBBbGxvdyB1c2luZyAibVsiIGFuZCAibV0iLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9tb3Rpb24udHh0LCBzcmMvbWFyay5jCisKK1BhdGNoIDYuMi40MjIKK1Byb2JsZW06ICAgIEluIENUUkwtWCBjb21wbGV0aW9uIG1lc3NhZ2VzIHRoZSAiLyIgbWFrZXMgdGhlbSBsZXNzIHJlYWRhYmxlLgorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBzbGFzaGVzLiAoQW50b255IFNjcml2ZW4pCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4yLjQyMworUHJvYmxlbTogICAgIjp2ZXJ0aWNhbCB3aW5jbWQgXSIgZG9lcyBub3Qgc3BsaXQgdmVydGljYWxseS4KK1NvbHV0aW9uOiAgIEFkZCAicG9zdHBvbmVkX3NwbGl0X2ZsYWdzIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9pZl9jc2NvcGUuYywgc3JjL3RhZy5jCisKK1BhdGNoIDYuMi40MjQKK1Byb2JsZW06ICAgIEEgQnVmRW50ZXIgYXV0b2NvbW1hbmQgdGhhdCBzZXRzIGFuIG9wdGlvbiBzdG9wcyAnbW91c2Vmb2N1cycgZnJvbQorCSAgICB3b3JraW5nIGluIEluc2VydCBtb2RlIChOb3JtYWwgbW9kZSBpcyBPSykuIChHcmVnb3J5IFNlaWRtYW4pCitTb2x1dGlvbjogICBJbiB0aGUgSW5zZXJ0IG1vZGUgbG9vcCBpbnZva2UgZ3VpX21vdXNlX2NvcnJlY3QoKSB3aGVuIG5lZWRlZC4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjIuNDI1CitQcm9ibGVtOiAgICBWZXJ0aWNhbCBzcGxpdCBhbmQgY29tbWFuZCBsaW5lIHdpbmRvdzogY2FuIG9ubHkgZHJhZyBzdGF0dXMgbGluZQorCSAgICBhYm92ZSB0aGUgY21kbGluZSB3aW5kb3cgb24gdGhlIHJpZ2h0aGFuZCBzaWRlLCBub3QgbGVmdGhhbmQgc2lkZS4KK1NvbHV0aW9uOiAgIENoZWNrIHRoZSBzdGF0dXMgbGluZSByb3cgaW5zdGVhZCBvZiB0aGUgd2luZG93IHBvaW50ZXIuCitGaWxlczoJICAgIHNyYy91aS5jCisKK1BhdGNoIDYuMi40MjYKK1Byb2JsZW06ICAgIEEgc3ludGF4IHJlZ2lvbiBlbmQgbWF0Y2ggd2l0aCBhIG1hdGNoZ3JvdXAgdGhhdCBpbmNsdWRlcyBhIGxpbmUKKwkgICAgYnJlYWsgb25seSBoaWdobGlnaHRzIHRoZSBsYXN0IGxpbmUgd2l0aCBtYXRjaGdyb3VwLiAoR2FyeQorCSAgICBIb2xsb3dheSkKK1NvbHV0aW9uOiAgIEFsc28gdXNlIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIHJlZ2lvbgorCSAgICBoaWdobGlnaHRpbmcgZW5kcy4KK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMi40MjcgKGV4dHJhKQorUHJvYmxlbTogICAgV2hlbiBwYXN0aW5nIGEgbG90IG9mIHRleHQgaW4gYSBtdWx0aS1ieXRlIGVuY29kaW5nLCBjb252ZXJzaW9uCisJICAgIGZyb20gJ3Rlcm1lbmNvZGluZycgdG8gJ2VuY29kaW5nJyBtYXkgZmFpbCBmb3Igc29tZSBjaGFyYWN0ZXJzLgorCSAgICAoS3VhbmctY2hlIFd1KQorU29sdXRpb246ICAgV2hlbiB0aGVyZSBpcyBhbiBpbmNvbXBsZXRlIGJ5dGUgc2VxdWVuY2UgYXQgdGhlIGVuZCBvZiB0aGUgcmVhZAorCSAgICB0ZXh0IGtlZXAgaXQgZm9yIHRoZSBuZXh0IHRpbWUuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jLCBzcmMvb3NfYW1pZ2EuYywgc3JjL29zX21zd2luLmMsIHNyYy9wcm90by9tYnl0ZS5wcm8sCisJICAgIHNyYy9wcm90by9vc19tc3dpbi5wcm8sIHNyYy91aS5jCisKK1BhdGNoIDYuMi40MjgKK1Byb2JsZW06ICAgIFRoZSBYMTEgY2xpcGJvYXJkIHN1cHBvcnRzIHRoZSBWaW0gc2VsZWN0aW9uIGZvciBjaGFyL2xpbmUvYmxvY2sKKwkgICAgbW9kZSwgYnV0IHNpbmNlIHRoZSBlbmNvZGluZyBpcyBub3QgaW5jbHVkZWQgIGNhbid0IGNvcHkvcGFzdGUKKwkgICAgYmV0d2VlbiB0d28gVmltcyB3aXRoIGEgZGlmZmVyZW50ICdlbmNvZGluZycuCitTb2x1dGlvbjogICBBZGQgYSBuZXcgc2VsZWN0aW9uIGZvcm1hdCB0aGF0IGluY2x1ZGVzIHRoZSAnZW5jb2RpbmcnLiAgUGVyZm9ybQorCSAgICBjb252ZXJzaW9uIHdoZW4gbmVjZXNzYXJ5LgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYywgc3JjL3VpLmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuNDI5CitQcm9ibGVtOiAgICBVbml4OiBnbG9iKCkgZG9lc24ndCB3b3JrIGZvciBhIGRpcmVjdG9yeSB3aXRoIGEgc2luZ2xlIHF1b3RlIGluCisJICAgIHRoZSBuYW1lLiAoTmF6cmkgUmFtbGl5KQorU29sdXRpb246ICAgV2hlbiB1c2luZyB0aGUgc2hlbGwgdG8gZXhwYW5kLCBvbmx5IHB1dCBkb3VibGUgcXVvdGVzIGFyb3VuZAorCSAgICBzcGFjZXMgYW5kIHNpbmdsZSBxdW90ZXMsIG5vdCB0aGUgd2hvbGUgdGhpbmcuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4yLjQzMAorUHJvYmxlbTogICAgQk9NIGF0IHN0YXJ0IG9mIGEgdmltIHNjcmlwdCBmaWxlIGlzIG5vdCByZWNvZ25pemVkIGFuZCBjYXVzZXMgYW4KKwkgICAgZXJyb3IgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIERldGVjdCB0aGUgQk9NIGFuZCBza2lwIG92ZXIgaXQuICBBbHNvIGZpeCB0aGF0IGFmdGVyIHVzaW5nCisJICAgICI6c2NyaXB0ZW5jb2RpbmciIHRoZSBpY29udigpIGZpbGUgZGVzY3JpcHRvciB3YXMgbm90IGNsb3NlZAorCSAgICAobWVtb3J5IGxlYWspLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjIuNDMxCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciwgdGhlIHNjcm9sbGluZyBpcyBsaW1pdGVkIHRvCisJICAgIHRoZSBsZW5ndGggb2YgdGhlIGN1cnNvciBsaW5lLgorU29sdXRpb246ICAgTWFrZSB0aGUgc2Nyb2xsIGxpbWl0IGRlcGVuZCBvbiB0aGUgbG9uZ2VzdCB2aXNpYmxlIGxpbmUuICBUaGUKKwkgICAgY3Vyc29yIGlzIG1vdmVkIHdoZW4gbmVjZXNzYXJ5LiAgSW5jbHVkaW5nIHRoZSAnaCcgZmxhZyBpbgorCSAgICAnZ3Vpb3B0aW9ucycgZGlzYWJsZXMgdGhpcy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZ3VpLnR4dCwgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHNyYy9ndWkuYywKKwkgICAgc3JjL21pc2MyLmMsIHNyYy9vcHRpb24uaAorCitQYXRjaCA2LjIuNDMyIChhZnRlciA2LjIuNDMwIGFuZCA2LjIuNDMxKQorUHJvYmxlbTogICAgTGludCB3YXJuaW5ncy4KK1NvbHV0aW9uOiAgIEFkZCB0eXBlIGNhc3RzLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYywgc3JjL2d1aS5jCisKK1BhdGNoIDYuMi40MzMKK1Byb2JsZW06ICAgIFRyYW5zbGF0aW5nICJWSVNVQUwiIGFuZCAiQkxPQ0siIHNlcGFyYXRlbHkgZG9lc24ndCBnaXZlIGEgZ29vZAorCSAgICByZXN1bHQuIChBbGVqYW5kcm8gTG9wZXogVmFsZW5jaWEpCitTb2x1dGlvbjogICBVc2UgYSBzdHJpbmcgZm9yIGVhY2ggY29tYmluYXRpb24uCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjIuNDM0IChhZnRlciA2LjIuNDMxKQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZy4gKFNhbG1hbiBIYWxpbSkKK1NvbHV0aW9uOiAgIEFkZCB0eXBlIGNhc3RzLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4yLjQzNQorUHJvYmxlbTogICAgV2hlbiB0aGVyZSBhcmUgdmVydGljYWxseSBzcGxpdCB3aW5kb3dzIHRoZSBtaW5pbWFsIFZpbSB3aW5kb3cKKwkgICAgaGVpZ2h0IGlzIGNvbXB1dGVkIHdyb25nLgorU29sdXRpb246ICAgVXNlIGZyYW1lX21pbmhlaWdodCgpIHRvIGNvcnJlY3RseSBjb21wdXRlIHRoZSBtaW5pbWFsIGhlaWdodC4KK0ZpbGVzOgkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMi40MzYKK1Byb2JsZW06ICAgIFJ1bm5pbmcgdGhlIHRlc3RzIGNoYW5nZXMgdGhlIHVzZXIncyB2aW1pbmZvIGZpbGUuCitTb2x1dGlvbjogICBJbiB0ZXN0IDQ5IHRlbGwgdGhlIGV4dHJhIFZpbSB0byB1c2UgdGhlIHRlc3QgdmltaW5mbyBmaWxlLgorRmlsZXM6CSAgICBzcmMvdGVzdGRpci90ZXN0NDkudmltCisKK1BhdGNoIDYuMi40MzcKK1Byb2JsZW06ICAgICI6bWtzZXNzaW9uIiBhbHdheXMgcHV0cyAic2V0IG5vY29tcGF0aWJsZSIgaW4gdGhlIHNlc3Npb24gZmlsZS4KKwkgICAgVGhpcyBjaGFuZ2VzIG9wdGlvbiBzZXR0aW5ncy4gKFJvbiBBYXJvbikKK1NvbHV0aW9uOiAgIEFkZCBhbiAiaWYiIHRvIG9ubHkgY2hhbmdlICdjb21wYXRpYmxlJyB3aGVuIG5lZWRlZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4yLjQzOAorUHJvYmxlbTogICAgV2hlbiB0aGUgJ3YnIGZsYWcgaXMgcHJlc2VudCBpbiAnY3BvcHRpb25zJywgYmFja3NwYWNpbmcgYW5kIHRoZW4KKwkgICAgdHlwaW5nIHRleHQgYWdhaW46IG9uZSBjaGFyYWN0ZXIgdG9vIG11Y2ggaXMgb3ZlcnR5cGVkIGJlZm9yZQorCSAgICBpbnNlcnRpbmcgaXMgZG9uZSBhZ2Fpbi4KK1NvbHV0aW9uOiAgIFNldCAiZG9sbGFyX3Zjb2wiIHRvIHRoZSByaWdodCBjb2x1bW4uCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4yLjQzOQorUHJvYmxlbTogICAgR1RLIDI6IENoYW5naW5nICdsaW5lcycgbWF5IGNhdXNlIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgd2luZG93CisJICAgIGxheW91dCBhbmQgdGhlIHNpemUgb2YgdGhlIHdpbmRvdy4KK1NvbHV0aW9uOiAgIERpc2FibGUgdGhlIGhhY2sgd2l0aCBmb3JjZV9zaGVsbF9yZXNpemVfaWRsZSgpLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA2LjIuNDQwCitQcm9ibGVtOiAgICBXaGVuICdsYXp5cmVkcmF3JyBpcyBzZXQgdGhlIHdpbmRvdyB0aXRsZSBpcyBzdGlsbCB1cGRhdGVkLgorCSAgICBUaGUgc2l6ZSBvZiB0aGUgVmlzdWFsIGFyZWEgYW5kIHRoZSBydWxlciBhcmUgZGlzcGxheWVkIHRvbyBvZnRlbi4KK1NvbHV0aW9uOiAgIFBvc3Rwb25lIHJlZHJhd2luZyB0aGUgd2luZG93IHRpdGxlLiAgT25seSBzaG93IHRoZSBWaXN1YWwgYXJlYQorCSAgICBzaXplIHdoZW4gd2FpdGluZyBmb3IgYSBjaGFyYWN0ZXIuICBEb24ndCBkcmF3IHRoZSBydWxlcgorCSAgICB1bm5lY2Vzc2FyeS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvbm9ybWFsLmMsIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjIuNDQxCitQcm9ibGVtOiAgICAiOnVuYWJicmV2aWF0ZSBmb28gIiBkb2Vzbid0IHdvcmssIGJlY2F1c2Ugb2YgdGhlIHRyYWlsaW5nIHNwYWNlLAorCSAgICB3aGlsZSBhbiBhYmJyZXZpYXRpb24gd2l0aCBhIHRyYWlsaW5nIHNwYWNlIGlzIG5vdCBwb3NzaWJsZS4gKFBhdWwKKwkgICAgSm9sbHkpCitTb2x1dGlvbjogICBBY2NlcHQgYSBtYXRjaCB3aXRoIHRoZSBsaHMgb2YgYW4gYWJicmV2aWF0aW9uIHdpdGhvdXQgdGhlCisJICAgIHRyYWlsaW5nIHNwYWNlLgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jCisKK1BhdGNoIDYuMi40NDIKK1Byb2JsZW06ICAgIENhbm5vdCBtYW5pcHVsYXRlIHRoZSBjb21tYW5kIGxpbmUgZnJvbSBhIGZ1bmN0aW9uLgorU29sdXRpb246ICAgQWRkIGdldGNtZGxpbmUoKSwgZ2V0Y21kcG9zKCkgYW5kIHNldGNtZHBvcygpIGZ1bmN0aW9ucyBhbmQgdGhlCisJICAgIENUUkwtXCBlIGNvbW1hbmQuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2NtZGxpbmUudHh0LCBydW50aW1lL2RvYy9ldmFsLnR4dCwgc3JjL2V2YWwuYworCSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL29wcy5jLCBzcmMvcHJvdG8vZXhfZ2V0bG4ucHJvLAorCSAgICBzcmMvcHJvdG8vb3BzLnBybworCitQYXRjaCA2LjIuNDQzCitQcm9ibGVtOiAgICBXaXRoICI6c2lsZW50ISBlY2hvZXJyIHNvbWV0aGluZyIgeW91IGRvbid0IGdldCB0aGUgcG9zaXRpb24gb2YKKwkgICAgdGhlIGVycm9yLiAgZW1zZygpIG9ubHkgd3JpdGVzIHRoZSBtZXNzYWdlIGl0c2VsZiBhbmQgcmV0dXJucy4KK1NvbHV0aW9uOiAgIEFsc28gcmVkaXJlY3QgdGhlIHBvc2l0aW9uIG9mIHRoZSBlcnJvci4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYworCitQYXRjaCA2LjIuNDQ0CitQcm9ibGVtOiAgICBXaGVuIGFkZGluZyB0aGUgJ2MnIGZsYWcgdG8gYSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQgaXQgbWF5IHJlcGxhY2UKKwkgICAgbW9yZSB0aW1lcyB0aGFuIHdpdGhvdXQgdGhlICdjJyBmbGFnLiAgSGFwcGVucyBmb3IgYSAgbWF0Y2ggdGhhdAorCSAgICBzdGFydHMgd2l0aCAiXHplIiAoTWFyY2VsIFN2aXRhbHNrKSBhbmQgd2hlbiB1c2luZyAiXEA8PSIgKEtsYXVzCisJICAgIEJvc2F1KS4KK1NvbHV0aW9uOiAgIENvcnJlY3QgInByZXZfbWF0Y2hjb2wiIHdoZW4gcmVwbGFjaW5nIHRoZSBsaW5lLiAgRG9uJ3QgcmVwbGFjZQorCSAgICB0aGUgbGluZSB3aGVuIHRoZSBwYXR0ZXJuIHVzZXMgbG9vay1iZWhpbmQgbWF0Y2hpbmcuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9wcm90by9yZWdleHAucHJvLCBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4yLjQ0NQorUHJvYmxlbTogICAgQ29weWluZyB2aW10dXRvciB0byAvdG1wL3NvbWV0aGluZyBpcyBub3Qgc2VjdXJlLCBhIHN5bWxpbmsgbWF5CisJICAgIGNhdXNlIHRyb3VibGUuCitTb2x1dGlvbjogICBDcmVhdGUgYSBkaXJlY3RvcnkgYW5kIGNyZWF0ZSB0aGUgZmlsZSBpbiBpdC4gIFVzZSAidW1hc2siIHRvCisJICAgIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHdpdGggbW9kZSA3MDAuICAoU3RlZmFuIE5vcmRoYXVzZW4pCitGaWxlczoJICAgIHNyYy92aW10dXRvcgorCitQYXRjaCA2LjIuNDQ2IChhZnRlciA2LjIuNDA0KQorUHJvYmxlbTogICAgVXNpbmcgbGlicmFyeSBmdW5jdGlvbnMgd2N3aWR0aCgpIGFuZCBpc3dwcmludCgpIHJlc3VsdHMgaW4KKwkgICAgZGlzcGxheSBwcm9ibGVtcyBmb3IgSGVicmV3IGNoYXJhY3RlcnMuIChSb24gQWFyb24pCitTb2x1dGlvbjogICBEaXNhYmxlIHRoZSBjb2RlIHRvIHVzZSB0aGUgbGlicmFyeSBmdW5jdGlvbnMsIHVzZSBvdXIgb3duLgorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjIuNDQ3IChhZnRlciA2LjIuNDQwKQorUHJvYmxlbTogICAgTm93IHRoYXQgdGhlIHRpdGxlIGlzIG9ubHkgdXBkYXRlZCB3aGVuIHJlZHJhd2luZywgaXQgaXMgbm8gbG9uZ2VyCisJICAgIHBvc3NpYmxlIHRvIHNob3cgaXQgd2hpbGUgZXhlY3V0aW5nIGEgZnVuY3Rpb24uIChNYWRva2EgTWFjaGl0YW5pKQorU29sdXRpb246ICAgTWFrZSAiOnJlZHJhdyIgYWxzbyB1cGRhdGUgdGhlIHRpdGxlLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjIuNDQ4IChhZnRlciA2LjIuNDI3KQorUHJvYmxlbTogICAgTWFjOiBjb252ZXJzaW9uIGRvbmUgd2hlbiAndGVybWVuY29kaW5nJyBkaWZmZXJzIGZyb20gJ2VuY29kaW5nJworCSAgICBmYWlscyB3aGVuIHBhc3RpbmcgYSBsb25nZXIgdGV4dC4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhbiBpbmNvbXBsZXRlIHNlcXVlbmNlIGF0IHRoZSBlbmQgb2YgdGhlIGNodW5rIHRvIGJlCisJICAgIGNvbnZlcnRlZC4gKEVja2VoYXJkIEJlcm5zKQorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjIuNDQ5IChhZnRlciA2LjIuNDMxKQorUHJvYmxlbTogICAgR2V0IGVycm9yIG1lc3NhZ2VzIHdoZW4gc3dpdGNoaW5nIGZpbGVzLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgdmFsaWQgbGluZSBudW1iZXIgd2hlbiBjYWxjdWxhdGluZyB0aGUgd2lkdGggb2YgdGhlCisJICAgIGhvcml6b250YWwgc2Nyb2xsYmFyLiAoSGVsbXV0IFN0aWVnbGVyKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4yLjQ1MAorUHJvYmxlbTogICAgIiAgI2luY2x1ZGUiIGFuZCAiICAjZGVmaW5lIiBhcmUgbm90IHJlY29nbml6ZWQgd2l0aCB0aGUgZGVmYXVsdAorCSAgICBvcHRpb24gdmFsdWVzIGZvciAnaW5jbHVkZScgYW5kICdkZWZpbmVkJy4gKFJHIEtpcmFuKQorU29sdXRpb246ICAgQWRqdXN0IHRoZSBkZWZhdWx0IHZhbHVlcyB0byBhbGxvdyB3aGl0ZSBzcGFjZSBiZWZvcmUgdGhlICMuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL29wdGlvbnMudHh0LCBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4yLjQ1MQorUHJvYmxlbTogICAgR1RLOiB3aGVuIHVzaW5nIFhJTSB0aGVyZSBhcmUgdmFyaW91cyBwcm9ibGVtcywgaW5jbHVkaW5nIHNldHRpbmcKKwkgICAgJ21vZGlmaWVkJyBhbmQgYnJlYWtpbmcgdW5kbyBhdCB0aGUgd3JvbmcgbW9tZW50LgorU29sdXRpb246ICAgQWRkICJ4aW1fY2hhbmdlZF93aGlsZV9wcmVlZGl0aW5nIiwgInByZWVkaXRfZW5kX2NvbCIgYW5kCisJICAgIGltX2lzX3ByZWVkaXRpbmcoKS4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9ndWlfZ3RrLmMsIHNyYy9ndWlfZ3RrX3gxMS5jLAorCSAgICBzcmMvbWJ5dGUuYywgc3JjL21pc2MxLmMsIHNyYy9wcm90by9tYnl0ZS5wcm8sIHNyYy9zY3JlZW4uYywKKwkgICAgc3JjL3VuZG8uYworCitQYXRjaCA2LjIuNDUyCitQcm9ibGVtOiAgICBJbiBkaWZmIG1vZGUsIHdoZW4gRGlmZkFkZCBhbmQgRGlmZlRleHQgaGlnaGxpZ2h0IHNldHRpbmdzIGFyZQorCSAgICBlcXVhbCwgYW4gYWRkZWQgbGluZSBpcyBoaWdobGlnaHRlZCB3aXRoIERpZmZDaGFuZ2UuIChUb20gU2NodW1tKQorU29sdXRpb246ICAgUmVtZW1iZXIgdGhlIGRpZmYgaGlnaGxpZ2h0IHR5cGUgaW5zdGVhZCBvZiB0aGUgYXR0cmlidXRlcy4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMi40NTMKK1Byb2JsZW06ICAgICI6cy9mb29cfFxuYmFyL3gvZyIgZG9lcyBub3QgcmVwbGFjZSB0d28gdGltZXMgaW4gImZvb1xuYmFyIi4KKwkgICAgKFBhdmVsIFBhcHVzaGV2KQorU29sdXRpb246ICAgV2hlbiB0aGUgcGF0dGVybiBjYW4gbWF0Y2ggYSBsaW5lIGJyZWFrIGFsc28gdHJ5IG1hdGNoaW5nIGF0IHRoZQorCSAgICBOVUwgYXQgdGhlIGVuZCBvZiBhIGxpbmUuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjIuNDU0CitQcm9ibGVtOiAgICAiOmxldCBiOmNoYW5nZWR0aWNrIiBkb2Vzbid0IHdvcmsuIChBbGFuIFNjaG1pdHQpICAiOmxldAorCSAgICBiOmNoYW5nZWR0aWNrID0gOTkiIGRvZXMgbm90IGdpdmUgYW4gZXJyb3IgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIEFkZCBjb2RlIHRvIHJlY29nbml6ZSAiOmxldCBiOmNoYW5nZWR0aWNrIi4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuNDU1IChhZnRlciA2LjIuMjk3KQorUHJvYmxlbTogICAgSW4gUHl0aG9uIGNvbW1hbmRzIHRoZSBjdXJyZW50IGxvY2FsZSBjaGFuZ2VzIGhvdyBjZXJ0YWluIFB5dGhvbgorCSAgICBmdW5jdGlvbnMgd29yay4gKEV1Z2VuZSBNLiBNaW5rb3Zza2lpKQorU29sdXRpb246ICAgU2V0IHRoZSBMQ19OVU1FUklDIGxvY2FsZSB0byAiQyIgd2hpbGUgZXhlY3V0aW5nIGEgUHl0aG9uIGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9pZl9weXRob24uYworCitQYXRjaCA2LjIuNDU2IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBFZGl0aW5nIGEgZmlsZSBieSBpdHMgVW5pY29kZSBuYW1lIChkcm9wcGluZyBpdCBvbiBWaW0gb3IKKwkgICAgdXNpbmcgdGhlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZykgZG9lc24ndCB3b3JrLiAoWWFrb3YgTGVybmVyLCBBbGV4CisJICAgIEpha3VzaGV2KQorU29sdXRpb246ICAgVXNlIHdpZGUgY2hhcmFjdGVyIGZ1bmN0aW9ucyB3aGVuIGZpbGUgbmFtZXMgYXJlIGludm9sdmVkIGFuZAorCSAgICBjb252ZXJ0IGZyb20vdG8gJ2VuY29kaW5nJyB3aGVyZSBuZWVkZWQuCitGaWxlczoJICAgIHNyYy9ndWlfdzQ4LmMsIHNyYy9tYWNyb3MuaCwgc3JjL21lbWZpbGUuYywgc3JjL21lbWxpbmUuYywKKwkgICAgc3JjL29zX21zd2luLmMsIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMi40NTcgKGFmdGVyIDYuMi4yNDQpCitQcm9ibGVtOiAgICBXaGVuICdlbmNvZGluZycgaXMgInV0Zi04IiBhbmQgd3JpdGluZyB0ZXh0IHdpdGggY2hhcnMgYWJvdmUgMHg4MAorCSAgICBpbiBsYXRpbjEsIGNvbnZlcnNpb24gaXMgd3JvbmcgZXZlcnkgODIwMCBieXRlcy4gKE95dmluZCBIb2xtKQorU29sdXRpb246ICAgQ29ycmVjdCB0aGUgdXRmX3B0cjJsZW5fY2hlY2tfbGVuKCkgZnVuY3Rpb24gYW5kIGZpeCB0aGUgcHJvYmxlbQorCSAgICBvZiBkaXNwbGF5aW5nIDB4ZjcgaW4gdXRmY19wdHIybGVuX2NoZWNrX2xlbigpLgorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjIuNDU4CitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0ICIkIiBkb2Vzbid0IG1vdmUgdG8gdGhlIGVuZCBvZiBhbgorCSAgICB1bnByaW50YWJsZSBjaGFyYWN0ZXIsIGNhdXNpbmcgInkkIiBub3QgdG8gaW5jbHVkZSB0aGF0IGNoYXJhY3Rlci4KKwkgICAgKEZyZWQgTWEpCitTb2x1dGlvbjogICBTZXQgImNvbGFkZCIgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4yLjQ1OSAoYWZ0ZXIgNi4yLjQ1NCkKK1Byb2JsZW06ICAgIFZhcmlhYmxlICJiIiBjYW5ub3QgYmUgd3JpdHRlbi4gKFNhbG1hbiBIYWxpbSkKK1NvbHV0aW9uOiAgIENvbXBhcmUgc3RyaW5ncyBwcm9wZXJseS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuNDYwIChleHRyYSwgYWZ0ZXIgNi4yLjQ1NikKK1Byb2JsZW06ICAgIENvbXBpbGVyIHdhcm5pbmdzIGZvciBtaXNzaW5nIHByb3RvdHlwZXMuCitTb2x1dGlvbjogICBJbmNsdWRlIHRoZSBtaXNzaW5nIHByb3RvdHlwZXMuCitGaWxlczoJICAgIHNyYy9wcm90by9vc193aW4zMi5wcm8KKworUGF0Y2ggNi4yLjQ2MQorUHJvYmxlbTogICAgQWZ0ZXIgdXNpbmcgYSBzZWFyY2ggY29tbWFuZCAieCIgc3RhcnRzIHB1dHRpbmcgc2luZ2xlIGNoYXJhY3RlcnMKKwkgICAgaW4gdGhlIG51bWJlcmVkIHJlZ2lzdGVycy4KK1NvbHV0aW9uOiAgIFJlc2V0ICJ1c2VfcmVnX29uZSIgYXQgdGhlIHJpZ2h0IG1vbWVudC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMi40NjIKK1Byb2JsZW06ICAgIEZpbmRpbmcgYSBtYXRjaGluZyBwYXJlbnRoZXNpcyBkb2VzIG5vdCBjb3JyZWN0bHkgaGFuZGxlIGEKKwkgICAgYmFja3NsYXNoIGluIGEgdHJhaWxpbmcgYnl0ZS4KK1NvbHV0aW9uOiAgIEhhbmRsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgY29ycmVjdGx5LiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4yLjQ2MyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogQW4gTlRGUyBmaWxlIHN5c3RlbSBtYXkgY29udGFpbiBmaWxlcyB3aXRoIGV4dHJhIGluZm8KKwkgICAgc3RyZWFtcy4gIFRoZSBjdXJyZW50IG1ldGhvZCB0byBjb3B5IHRoZW0gY3JlYXRlcyBvbmUgYW5kIHRoZW4KKwkgICAgZGVsZXRlcyBpdCBhZ2Fpbi4gIChQZXRlciBUb2VubmllcykgIEFsc28sIG9ubHkgdGhyZWUgc3RyZWFtcyB3aXRoCisJICAgIGhhcmQgY29kZWQgbmFtZXMgYXJlIGNvcGllZC4KK1NvbHV0aW9uOiAgIFVzZSBCYWNrdXBSZWFkKCkgdG8gY2hlY2sgd2hpY2ggaW5mbyBzdHJlYW1zIHRoZSBvcmlnaW5hbCBmaWxlCisJICAgIGNvbnRhaW5zIGFuZCBvbmx5IGNvcHkgdGhlc2Ugc3RyZWFtcy4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4yLjQ2NCAoZXh0cmEsIGFmdGVyIDYuMi40MjcpCitQcm9ibGVtOiAgICBBbWlnYTogQ29tcGlsYXRpb24gZXJyb3Igd2l0aCBnY2MuIChBbGkgQWtjYWFnYWMpCitTb2x1dGlvbjogICBNb3ZlIHRoZSAjaWZkZWYgb3V0c2lkZSBvZiBSZWFkKCkuCitGaWxlczoJICAgIHNyYy9vc19hbWlnYS5jCisKK1BhdGNoIDYuMi40NjUKK1Byb2JsZW06ICAgIFdoZW4gcmVzaXppbmcgdGhlIEdVSSB3aW5kb3cgdGhlIHdpbmRvdyBtYW5hZ2VyIHNvbWV0aW1lcyBtb3ZlcyBpdAorCSAgICBsZWZ0IG9mIG9yIGFib3ZlIHRoZSBzY3JlZW4uIChNaWNoYWVsIE1jQ2FydHkpCitTb2x1dGlvbjogICBDaGVjayB0aGUgd2luZG93IHBvc2l0aW9uIGFmdGVyIHJlc2l6aW5nIGl0IGFuZCBtb3ZlIGl0IG9udG8gdGhlCisJICAgIHNjcmVlbiB3aGVuIGl0IGlzbid0LgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4yLjQ2NiAoZXh0cmEsIGFmdGVyIDYuMi40NTYpCitQcm9ibGVtOiAgICBXaW4zMjogQ29tcGlsaW5nIHdpdGggQm9ybGFuZCBDIGZhaWxzLCBhbmQgYW4gdW4vc2lnbmVkIHdhcm5pbmcuCitTb2x1dGlvbjogICBSZWRlZmluZSB3Y3NpY21wKCkgdG8gd2NzY21waSgpIGFuZCBhZGQgdHlwZSBjYXN0cy4gKFlhc3VoaXJvCisJICAgIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4yLjQ2NyAoZXh0cmEsIGFmdGVyIDYuMi40NjMpCitQcm9ibGVtOiAgICBXaW4zMjogY2FuJ3QgY29tcGlsZSB3aXRob3V0IG11bHRpLWJ5dGUgZmVhdHVyZS4gKEFqaXQgVGhha2thcikKK1NvbHV0aW9uOiAgIEFkZCAjaWZkZWZzIGFyb3VuZCB0aGUgaW5mbyBzdHJlYW0gY29kZS4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4yLjQ2OAorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZ3MgZm9yIHNoYWRvd2VkIHZhcmlhYmxlcy4gKE1hdHRoaWFzIE1vaHIpCitTb2x1dGlvbjogICBEZWxldGUgc3VwZXJmbHVvdXMgdmFyaWFibGVzIGFuZCByZW5hbWUgb3RoZXJzLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL2V4X2V2YWwuYywgc3JjL2lmX2NzY29wZS5jLAorCSAgICBzcmMvZm9sZC5jLCBzcmMvb3B0aW9uLmMsIHNyYy9vc191bml4LmMsIHNyYy9xdWlja2ZpeC5jLAorCSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4yLjQ2OSAoZXh0cmEsIGFmdGVyIDYuMi40NTYpCitQcm9ibGVtOiAgICBXaW4zMjogQ2FuJ3QgY3JlYXRlIHN3YXAgZmlsZSB3aGVuICdlbmNvZGluZycgZGlmZmVycyBmcm9tIHRoZQorCSAgICBhY3RpdmUgY29kZSBwYWdlLiAoS3JpdG9uIEt5cmltaXMpCitTb2x1dGlvbjogICBJbiBlbmNfdG9fdWNzMigpIHRlcm1pbmF0ZSB0aGUgY29udmVydGVkIHN0cmluZyB3aXRoIGEgTlVMCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jCisKK1BhdGNoIDYuMi40NzAKK1Byb2JsZW06ICAgIFRoZSBuYW1lIHJldHVybmVkIGJ5IHRlbXBuYW1lKCkgbWF5IGJlIGVxdWFsIHRvIHRoZSBmaWxlIHVzZWQgZm9yCisJICAgIHNoZWxsIG91dHB1dCB3aGVuIGlnbm9yaW5nIGNhc2UuCitTb2x1dGlvbjogICBTa2lwICdPJyBhbmQgJ0knIGluIHRlbXBuYW1lKCkuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4yLjQ3MQorUHJvYmxlbTogICAgIi1ML3Vzci9saWIiIGlzIHVzZWQgaW4gdGhlIGxpbmsgY29tbWFuZCwgZXZlbiB0aG91Z2ggaXQncworCSAgICBzdXBwb3NlZCB0byBiZSBmaWx0ZXJlZCBvdXQuICItbHciIGFuZCAiLWxkbCIgYXJlIG5vdAorCSAgICBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW4gbmVlZGVkIGZvciAiLWxYbXUiLiAoQW50b25pbyBDb2xvbWJvKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgc3BhY2UgYWZ0ZXIgdGhlIGFyZ3VtZW50IGluc3RlYWQgb2YgYmVmb3JlLiAgQWxzbworCSAgICByZW1vdmUgIi1SL3Vzci9saWIiIGlmIGl0J3MgdGhlcmUuICBDaGVjayBmb3IgIi1sdyIgYW5kICItbGRsIgorCSAgICBiZWZvcmUgdHJ5aW5nICItbFhtdSIuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2xpbmsuc2gKKworUGF0Y2ggNi4yLjQ3MgorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIEZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQgdGhhdCBjaGFuZ2VzIHRoZSBjdXJyZW50CisJICAgIGJ1ZmZlciwgYSBidWZmZXIgZXhpc3RzIHRoYXQgY2FuJ3QgYmUgd2lwZWQgb3V0LgorCSAgICBBbHNvLCBWaW0gc29tZXRpbWVzIGNyYXNoZXMgd2hlbiBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZAorCSAgICB0aGF0IGNoYW5nZXMgdGhlIGJ1ZmZlciBhbmQgYSBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGlzCisJICAgIHVzZWQuICAoSGFyaSBLcmlzaG5hIERhcmEpCisJICAgIFVzZXJzIGFyZSBjb25mdXNlZCBieSB0aGUgd2FybmluZyBmb3IgYSBmaWxlIGJlaW5nIGNoYW5nZWQgb3V0c2lkZQorCSAgICBvZiBWaW0uCitTb2x1dGlvbjogICBBdm9pZCB0aGF0IHRoZSB3aW5kb3cgY291bnRlciBmb3IgYSBidWZmZXIgaXMgaW5jcmVtZW50ZWQgdHdpY2UuCisJICAgIEF2b2lkIHRoYXQgYnVmX2NoZWNrX3RpbWVzdGFtcCgpIGlzIHVzZWQgcmVjdXJzaXZlbHkuCisJICAgIEFkZCBhIGhpbnQgdG8gbG9vayBpbiB0aGUgaGVscCBmb3IgbW9yZSBpbmZvLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jLCBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4yLjQ3MworUHJvYmxlbTogICAgVXNpbmcgQ1RSTC1dIGluIGEgaGVscCBidWZmZXIgd2l0aG91dCBhIG5hbWUgY2F1c2VzIGEgY3Jhc2guCitTb2x1dGlvbjogICBDaGVjayBmb3IgbmFtZSB0byBiZSBwcmVzZW50IGJlZm9yZSB1c2luZyBpdC4gKFRhcm8gTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL3RhZy5jCisKK1BhdGNoIDYuMi40NzQgKGV4dHJhLCBhZnRlciA2LjIuNDU2KQorUHJvYmxlbTogICAgV2hlbiBWaW0gaXMgc3RhcnRpbmcgdXAgY29udmVyc2lvbiBpcyBkb25lIHVubmVjZXNzYXJpbHkuICBGYWlsdXJlCisJICAgIHRvIGZpbmQgdGhlIHJ1bnRpbWUgZmlsZXMgb24gV2luZG93cyA5OC4gKFJhbmRhbGwgVy4gTW9ycmlzKQorU29sdXRpb246ICAgSW5pdCBlbmNfY29kZXBhZ2UgbmVnYXRpdmUsIG9ubHkgdXNlIGl0IHdoZW4gbm90IG5lZ2F0aXZlLgorCSAgICBEb24ndCB1c2UgR2V0RmlsZUF0dHJpYnV0ZXNXKCkgb24gV2luZG93cyA5OCBvciBlYXJsaWVyLgorRmlsZXM6CSAgICBzcmMvZ2xvYmFscy5oLCBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jLCBzcmMvb3NfbXN3aW4uYywKKwkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4yLjQ3NQorUHJvYmxlbTogICAgQ29tbWFuZHMgYWZ0ZXIgInBlcmwgPDxFT0YiIGFyZSBwYXJzZWQgYXMgVmltIGNvbW1hbmRzIHdoZW4gdGhleQorCSAgICBhcmUgbm90IGV4ZWN1dGVkLgorU29sdXRpb246ICAgUHJvcGVybHkgc2tpcCBvdmVyIHRoZSBwZXJsIGNvbW1hbmRzLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9pZl9wZXJsLnhzLCBzcmMvaWZfcHl0aG9uLmMsCisJICAgIHNyYy9pZl9ydWJ5LmMsIHNyYy9pZl90Y2wuYywgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4yLjQ3NgorUHJvYmxlbTogICAgV2hlbiByZWxvYWRpbmcgYSBoaWRkZW4gYnVmZmVyIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0gYW5kIHRoZQorCSAgICBjdXJyZW50IGJ1ZmZlciBpcyByZWFkLW9ubHksIHRoZSByZWxvYWRlZCBidWZmZXIgYmVjb21lcworCSAgICByZWFkLW9ubHkuICAoSGFyaSBLcmlzaG5hIERhcmEpCitTb2x1dGlvbjogICBTYXZlIHRoZSAncmVhZG9ubHknIGZsYWcgb2YgdGhlIHJlYWxvYWRlZCBidWZmZXIgaW5zdGVhZCBvZiB0aGUKKwkgICAgY3VycmVudCBidWZmZXIuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjIuNDc3CitQcm9ibGVtOiAgICBVc2luZyByZW1vdGVfc2VuZCh2OnNlcnZlcm5hbWUsICJcPEMtVj4iKSBjYXVzZXMgVmltIHRvIGhhbmcuCisJICAgIChZYWtvdiBMZXJuZXIpCitTb2x1dGlvbjogICBXaGVuIHRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIGVtcHR5IGRvbid0IHNldCByZWNlaXZlZF9mcm9tX2NsaWVudC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjIuNDc4CitQcm9ibGVtOiAgICBXaW4zMjogIi0tcmVtb3RlIGZpbGUiIGZhaWxzIGNoYW5naW5nIGRpcmVjdG9yeSBpZiB0aGUgY3VycmVudAorCSAgICBkaXJlY3RvcnkgbmFtZSBzdGFydHMgd2l0aCBhIHNpbmdsZSBxdW90ZS4gIChJZXN0eW4gV2FsdGVycykKK1NvbHV0aW9uOiAgIEFkZCBhIGJhY2tzbGFzaCB3aGVyZSBpdCB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIuCitGaWxlczoJICAgIHNyYy9tYWluLmMsIHNyYy9taXNjMi5jLCBzcmMvcHJvdG8vbWlzYzIucHJvCisKK1BhdGNoIDYuMi40NzkKK1Byb2JsZW06ICAgIFRoZSBlcnJvciBtZXNzYWdlIGZvciBlcnJvcnMgZHVyaW5nIHJlY292ZXJ5IGdvZXMgdW5ub3RpY2VkLgorU29sdXRpb246ICAgQXZvaWQgdGhhdCB0aGUgaGl0LWVudGVyIHByb21wdCBvdmVyd3JpdGVzIHRoZSBtZXNzYWdlLiAgQWRkIGEgZmV3CisJICAgIGxpbmVzIHRvIG1ha2UgdGhlIGVycm9yIHN0YW5kIG91dC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYywgc3JjL21lc3NhZ2UuYywgc3JjL21lbWxpbmUuYworCitQYXRjaCA2LjIuNDgwCitQcm9ibGVtOiAgICBOZXRCZWFuczogVXNpbmcgbmVnYXRpdmUgaW5kZXggaW4gYXJyYXkuICBiYWNrc2xhc2ggYXQgZW5kIG9mCisJICAgIG1lc3NhZ2UgbWF5IGNhdXNlIFZpbSB0byBjcmFzaC4gKFhhdmllciBkZSBHYXllKQorU29sdXRpb246ICAgSW5pdGlhbGl6ZSBidWZfbGlzdF91c2VkIHRvIHplcm8uIENoZWNrIGZvciB0cmFpbGluZyBiYWNrc2xhc2guCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jCisKK1BhdGNoIDYuMi40ODEKK1Byb2JsZW06ICAgIFdoZW4gd3JpdGluZyBhIGZpbGUgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHNwZWNpZnkgdGhhdCBoYXJkIGFuZC9vcgorCSAgICBzeW1saW5rcyBhcmUgdG8gYmUgYnJva2VuIGluc3RlYWQgb2YgcHJlc2VydmVkLgorU29sdXRpb246ICAgQWRkIHRoZSAiYnJlYWtzeW1saW5rIiBhbmQgImJyZWFraGFyZGxpbmsiIHZhbHVlcyB0byAnYmFja3VwY29weScuCisJICAgIChTaW1vbiBFa3N0cmFuZCkKK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHNyYy9maWxlaW8uYywgc3JjL29wdGlvbi5jLCBzcmMvb3B0aW9uLmgKKworUGF0Y2ggNi4yLjQ4MgorUHJvYmxlbTogICAgUmVwZWF0aW5nIGluc2VydCBvZiBDVFJMLUsgMSBTIGRvZXNuJ3Qgd29yay4gIFRoZSBzdXBlcnNjcmlwdCAxIGlzCisJICAgIGNvbnNpZGVyZWQgdG8gYmUgYSBkaWdpdC4gKEp1ZXJnZW4gS3JhZW1lcikKK1NvbHV0aW9uOiAgIEluIHZpbV9pc2RpZ2l0KCkgb25seSBhY2NlcHQgJzAnIHRvICc5Jy4gIFVzZSBWSU1fSVNESUdJVCgpIGZvcgorCSAgICBzcGVlZCB3aGVyZSBwb3NzaWJsZS4gIEFsc28gYWRkIHZpbV9pc3hkaWdpdCgpLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9jaGFyc2V0LmMsIHNyYy9kaWZmLmMsIHNyYy9kaWdyYXBoLmMsCisJICAgIHNyYy9lZGl0LmMsIHNyYy9ldmFsLmMsLCBzcmMvZXhfY21kcy5jLCBzcmMvZXhfY21kczIuYywKKwkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9leF9ldmFsLmMsIHNyYy9leF9nZXRsbi5jLAorCSAgICBzcmMvaWZfeGNtZHNydi5jLCBzcmMvZmFyc2kuYywgc3JjL2ZpbGVpby5jLCBzcmMvZm9sZC5jLAorCSAgICBzcmMvZ2V0Y2hhci5jLCBzcmMvZ3VpLmMsIHNyYy9pZl9jc2NvcGUuYywgc3JjL21hY3Jvcy5oLAorCSAgICBzcmMvbWFpbi5jLCBzcmMvbWFyay5jLCBzcmMvbWJ5dGUuYywgc3JjL21lbnUuYywgc3JjL21pc2MxLmMsCisJICAgIHNyYy9taXNjMi5jLCBzcmMvbm9ybWFsLmMsIHNyYy9vcHMuYywgc3JjL29wdGlvbi5jLAorCSAgICBzcmMvcHJvdG8vY2hhcnNldC5wcm8sIHNyYy9yZWdleHAuYywgc3JjL3NjcmVlbi5jLCBzcmMvc2VhcmNoLmMsCisJICAgIHNyYy9zeW50YXguYywgc3JjL3RhZy5jLCBzcmMvdGVybS5jLCBzcmMvdGVybWxpYi5jCisKK1BhdGNoIDYuMi40ODMgKGV4dHJhLCBhZnRlciA2LjIuNDgyKQorUHJvYmxlbTogICAgU2VlIDYuMi40ODIuCitTb2x1dGlvbjogICBFeHRyYSBwYXJ0IG9mIHBhdGNoIDYuMi40ODIuCitGaWxlczoJICAgIHNyYy9ndWlfcGhvdG9uLmMsIHNyYy9ndWlfdzQ4LmMsIHNyYy9vc19tc2Rvcy5jLCBzcmMvb3NfbXN3aW4uYworCitQYXRjaCA2LjIuNDg0CitQcm9ibGVtOiAgICBNUy1XaW5kb3dzOiBXaXRoIHRoZSBpbmNsdWRlZCBkaWZmLmV4ZSwgZGlmZmVyZW5jZXMgYWZ0ZXIgYSBDVFJMLVoKKwkgICAgYXJlIG5vdCByZWNvZ25pemVkLiAgKFBldGVyIEtlcmVzenRlcykKK1NvbHV0aW9uOiAgIFdyaXRlIHRoZSBmaWxlcyB3aXRoIHVuaXggZmlsZWZvcm1hdCBhbmQgaW52b2tlIGRpZmYgd2l0aCAtLWJpbmFyeQorCSAgICBpZiBwb3NzaWJsZS4KK0ZpbGVzOgkgICAgc3JjL2RpZmYuYworCitQYXRjaCA2LjIuNDg1CitQcm9ibGVtOiAgICBBIEJ1ZldyaXRlQ21kIGF1dG9jb21tYW5kIGNhbm5vdCBrbm93IGlmICIhIiB3YXMgdXNlZCBvciBub3QuCisJICAgIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIEFkZCB0aGUgdjpjbWRiYW5nIHZhcmlhYmxlLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9ldmFsLnR4dCwgc3JjL2V2YWwuYywgc3JjL3Byb3RvL2V2YWwucHJvLAorCSAgICBzcmMvZmlsZWlvLmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuNDg2ICg2LjIuNDgyKQorUHJvYmxlbTogICAgRGlmZiBmb3IgZXZhbC5jIGlzIG1pc3NpbmcuCitTb2x1dGlvbjogICBBZGRpdGlvbiB0byBwYXRjaCA2LjIuNDgyLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMi40ODcgKGV4dHJhLCBhZnRlciA2LjIuNDU2KQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZ3MgZm9yIHdyb25nIHByb3RvdHlwZS4gKEFsZWphbmRybyBMb3BleiBWYWxlbmNpYSkKK1NvbHV0aW9uOiAgIERlbGV0ZSB0aGUgcHJvdG90eXBlIGZvciBIYW5kbGVfV01fTm90aWZ5KCkuCitGaWxlczoJICAgIHNyYy9wcm90by9ndWlfdzMyLnBybworCitQYXRjaCA2LjIuNDg4CitQcm9ibGVtOiAgICBNaXNzaW5nICIpIiBpbiAqLmNoIGZpbGV0eXBlIGRldGVjdGlvbi4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgIikiLiAgKENpYXJhbiBNY0NyZWVzaCkKK0ZpbGVzOgkgICAgcnVudGltZS9maWxldHlwZS52aW0KKworUGF0Y2ggNi4yLjQ4OQorUHJvYmxlbTogICAgV2hlbiBhY2NpZGVudGFsbHkgb3BlbmluZyBhIHNlc3Npb24gaW4gVmltIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4KKwkgICAgb3BlbmVkIGluIGFub3RoZXIgVmltIHRoZXJlIGlzIGEgbG9uZyByb3cgb2YgQVRURU5USU9OIHByb21wdHMuCisJICAgIE5lZWQgdG8gcXVpdCBlYWNoIG9mIHRoZW0gdG8gZ2V0IG91dC4gKFJvYmVydCBXZWJiKQorU29sdXRpb246ICAgQWRkIHRoZSAiQWJvcnQiIGFsdGVybmF0aXZlIHRvIHRoZSBkaWFsb2cuCitGaWxlczoJICAgIHNyYy9tZW1saW5lLmMKKworUGF0Y2ggNi4yLjQ5MAorUHJvYmxlbTogICAgV2l0aCAncGFyYWdyYXBoJyBpdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIGEgc2luZ2xlIGRvdCBhcyBhCisJICAgIHBhcmFncmFwaCBib3VuZGFyeS4gIChEb3JhaSBTaXRhcmFtKQorU29sdXRpb246ICAgQWxsb3cgdXNpbmcgIiAgIiAodHdvIHNwYWNlcykgaW4gJ3BhcmFncmFwaCcgdG8gbWF0Y2ggIi4kIiBvcgorCSAgICAiLiAkIgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4yLjQ5MQorUHJvYmxlbTogICAgRGVjcmVtZW50aW5nIGEgcG9zaXRpb24gZG9lc24ndCB0YWtlIGNhcmUgb2YgbXVsdGktYnl0ZSBjaGFycy4KK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgY29sdW1uIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICBSZW1vdmUgbWJfZGVjKCkuCisJICAgIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jLCBzcmMvbWlzYzIuYywgc3JjL3Byb3RvL21ieXRlLnBybworCitQYXRjaCA2LjIuNDkyCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6cmVkcmF3IiB3aGlsZSB0aGVyZSBpcyBhIG1lc3NhZ2UsIHRoZSBuZXh0ICI6ZWNobyIKKwkgICAgc3RpbGwgY2F1c2VzIHRleHQgdG8gc2Nyb2xsLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorU29sdXRpb246ICAgUmVzZXQgbXNnX2RpZG91dCBhbmQgbXNnX2NvbCwgc28gdGhhdCBhZnRlciAiOnJlZHJhdyIgdGhlIG5leHQKKwkgICAgbWVzc2FnZSBvdmVyd3JpdGVzIGFuIGV4aXN0aW5nIG9uZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4yLjQ5MworUHJvYmxlbTogICAgIkB4IiBkb2Vzbid0IHdvcmsgd2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0LiAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgUHV0ICJyZXN0YXJ0X2VkaXQiIGluIHRoZSB0eXBlYWhlYWQgYnVmZmVyLCBzbyB0aGF0IGl0J3MgdXNlZAorCSAgICBhZnRlciBleGVjdXRpbmcgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4yLjQ5NAorUHJvYmxlbTogICAgVXNpbmcgZGlmZiBtb2RlIHdpdGggdHdvIHdpbmRvd3MsIHdoZW4gbW92aW5nIGhvcml6b250YWxseSBpbgorCSAgICBpbnNlcnRlZCBsaW5lcywgYSBmb2xkIGluIHRoZSBvdGhlciB3aW5kb3cgbWF5IG9wZW4uCitTb2x1dGlvbjogICBDb21wdXRlIHRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3RoZXIgd2luZG93IGNvcnJlY3RseS4KK0ZpbGVzOgkgICAgc3JjL2RpZmYuYworCitQYXRjaCA2LjIuNDk1IChleHRyYSwgYWZ0ZXIgNi4yLjQ1NikKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgZmlsZSBkaWFsb2cgZG9lc24ndCB3b3JrIG9uIFdpbmRvd3MgOTUuCitTb2x1dGlvbjogICBQdXQgdGhlIHdpZGUgY29kZSBvZiBndWlfbWNoX2Jyb3dzZSgpIGluIGd1aV9tY2hfYnJvd3NlVygpIGFuZCB1c2UKKwkgICAgaXQgb25seSBvbiBXaW5kb3dzIE5ULzIwMDAvWFAuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4yLjQ5NgorUHJvYmxlbTogICAgRnJlZUJTRCA0Lng6IFdoZW4gY29tcGlsZWQgd2l0aCB0aGUgcHRocmVhZCBsaWJyYXJ5IChQeXRob24pIGEKKwkgICAgY29tcGxpY2F0ZWQgcGF0dGVybiBtYXkgY2F1c2UgVmltIHRvIGNyYXNoLiAgQ2F0Y2hpbmcgdGhlIHNpZ25hbAorCSAgICBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBXaGVuIGNvbXBpbGVkIHdpdGggdGhyZWFkcywgaW5zdGVhZCBvZiB1c2luZyB0aGUgbm9ybWFsIHN0YWNrc2l6ZQorCSAgICBsaW1pdCwgdXNlIHRoZSBzaXplIG9mIHRoZSBpbml0aWFsIHN0YWNrLgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWcuaC5pbiwgc3JjL2NvbmZpZ3VyZS5pbiwKKwkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuNDk3IChleHRyYSkKK1Byb2JsZW06ICAgIFJ1c3NpYW4gbWVzc2FnZXMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIG9uZSBlbmNvZGluZy4KK1NvbHV0aW9uOiAgIENvbnZlcnQgdGhlIG1lc3NhZ2VzIHRvIE1TLVdpbmRvd3MgY29kZXBhZ2VzLiAoVmFzc2lseSBSYWdvc2luKQorRmlsZXM6CSAgICBzcmMvcG8vTWFrZWZpbGUKKworUGF0Y2ggNi4yLjQ5OAorUHJvYmxlbTogICAgTm9uLWxhdGluMSBoZWxwIGZpbGVzIGFyZSBub3QgcHJvcGVybHkgc3VwcG9ydGVkLgorU29sdXRpb246ICAgU3VwcG9ydCB1dGYtOCBoZWxwIGZpbGVzIGFuZCBjb252ZXJ0IHRoZW0gdG8gJ2VuY29kaW5nJyB3aGVuCisJICAgIG5lZWRlZC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi40OTkKK1Byb2JsZW06ICAgIFdoZW4gd3JpdGluZyBhIGZpbGUgYW5kIGhhbHRpbmcgdGhlIHN5c3RlbSwgdGhlIGZpbGUgbWlnaHQgYmUgbG9zdAorCSAgICB3aGVuIHVzaW5nIGEgam91cm5hbGxpbmcgZmlsZSBzeXN0ZW0uCitTb2x1dGlvbjogICBVc2UgZnN5bmMoKSB0byBmbHVzaCB0aGUgZmlsZSBkYXRhIHRvIGRpc2sgYWZ0ZXIgd3JpdGluZyBhIGZpbGUuCisJICAgIChSYWRpbSBLb2xhcikKK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi41MDAgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlIERPUy9NUy1XaW5kb3dzIHRoZSBpbnN0YWxsZXIgZG9lc24ndCB1c2UgdGhlIC0tYmluYXJ5IGZsYWcgZm9yCisJICAgIGRpZmYuCitTb2x1dGlvbjogICBBZGQgLS1iaW5hcnkgdG8gdGhlIGRpZmYgYXJndW1lbnQgaW4gTXlEaWZmKCkuIChBbGVqYW5kcm8gTG9wZXotCisJICAgIFZhbGVuY2lhKQorRmlsZXM6CSAgICBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDYuMi41MDEKK1Byb2JsZW06ICAgIFZpbSBkb2VzIG5vdCBjb21waWxlIHdpdGggTW9ycGhPUy4KK1NvbHV0aW9uOiAgIEFkZCBhIE1ha2VmaWxlIGFuZCBhIGZldyBjaGFuZ2VzIHRvIG1ha2UgVmltIHdvcmsgd2l0aCBNb3JwaE9TLgorCSAgICAoQWxpIEFrY2FhZ2FjKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vc19hbWlnYS50eHQsIHNyYy9JTlNUQUxMYW1pLnR4dCwKKwkgICAgc3JjL01ha2VfbW9ycGhvcy5tYWssIHNyYy9tZW1maWxlLmMsIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4yLjUwMgorUHJvYmxlbTogICAgQnVpbGRpbmcgZmFpbHMgZm9yIGdlbmVyYXRpbmcgbWVzc2FnZSBmaWxlcy4KK1NvbHV0aW9uOiAgIEFkZCBkdW1teSBtZXNzYWdlIGZpbGVzLgorRmlsZXM6CSAgICBzcmMvcG8vY2EucG8sIHNyYy9wby9ydS5wbywgc3JjL3BvL3N2LnBvCisKK1BhdGNoIDYuMi41MDMKK1Byb2JsZW06ICAgIE1hYzogQ2FuJ3QgY29tcGlsZSBNYWNSb21hbiBjb252ZXJzaW9ucyB3aXRob3V0IHRoZSBHVUkuCitTb2x1dGlvbjogICBBbHNvIGxpbmsgd2l0aCB0aGUgQ2FyYm9uIGZyYW1ld29yayBmb3IgdGhlIHRlcm1pbmFsIHZlcnNpb24sIGZvcgorCSAgICB0aGUgTWFjUm9tYW4gY29udmVyc2lvbiBmdW5jdGlvbnMuIChFY2tlaGFyZCBCZXJucykKKwkgICAgUmVtb3ZlIC1sdGVybWNhcCBmcm9tIHRoZSBHVUkgbGluayBjb21tYW5kLCBpdCBpcyBub3QgbmVlZGVkLgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9NYWtlZmlsZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjIuNTA0CitQcm9ibGVtOiAgICBWYXJpb3VzIHByb2JsZW1zIHdpdGggJ2NpbmRlbnQnLCBhbW9uZyB3aGljaCB0aGF0IGEKKwkgICAgbGlzdCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaXMgbm90IGluZGVudGVkIHByb3Blcmx5LgorU29sdXRpb246ICAgRml4IHRoZSB3cm9uZyBpbmRlbnRpbmcuICBJbXByb3ZlIGluZGVudGluZyBvZiBDKysgbWV0aG9kcy4KKwkgICAgQWRkIHRoZSAnaScsICdiJyBhbmQgJ1cnIG9wdGlvbnMgdG8gJ2Npbm9wdGlvbnMnLiAobW9zdGx5IGJ5CisJICAgIEhlbG11dCBTdGllZ2xlcikKKwkgICAgSW1wcm92ZSBpbmRlbnRpbmcgb2YgcHJlcHJvY2Vzc29yLWNvbnRpbnVhdGlvbiBsaW5lcy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvaW5kZW50LnR4dCwgc3JjL21pc2MxLmMsIHNyYy90ZXN0ZGlyL3Rlc3QzLmluLAorCSAgICBzcmMvdGVzdGRpci90ZXN0My5vaworCitQYXRjaCA2LjIuNTA1CitQcm9ibGVtOiAgICBIZWxwIGZvciAtUCBhcmd1bWVudCBpcyBtaXNzaW5nLiAoUm9uYWxkIEhvZWxsd2FydGgpCitTb2x1dGlvbjogICBBZGQgdGhlIHBhdGNoIHRoYXQgd2FzIG1pc3NpbmcgaW4gNi4yLjQxOS4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvc3RhcnRpbmcudHh0CisKK1BhdGNoIDYuMi41MDYgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gJ2VuY29kaW5nJyBpcyBhIGNvZGVwYWdlIHRoZW4gcmVhZGluZyBhIHV0Zi04IGZpbGUKKwkgICAgb25seSB3b3JrcyB3aGVuIGljb252IGlzIGF2YWlsYWJsZS4gIFdyaXRpbmcgYSBmaWxlIGluIGFub3RoZXIKKwkgICAgY29kZXBhZ2UgdXNlcyB0aGUgd3Jvbmcga2luZCBvZiBjb252ZXJzaW9uLgorU29sdXRpb246ICAgVXNlIGludGVybmFsIGNvbnZlcnNpb24gZnVuY3Rpb25zLiAgRW5hYmxlIHJlYWRpbmcgYW5kIHdyaXRpbmcKKwkgICAgZmlsZXMgd2l0aCAnZmlsZWVuY29kaW5nJyBkaWZmZXJlbnQgZnJvbSAnZW5jb2RpbmcnIGZvciBhbGwgdmFsaWQKKwkgICAgY29kZXBhZ2VzIGFuZCB1dGYtOCB3aXRob3V0IHRoZSBuZWVkIGZvciBpY29udi4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvdGVzdGRpci9NYWtlX2Rvcy5tYWssIHNyYy90ZXN0ZGlyL3Rlc3Q1Mi5pbiwKKwkgICAgc3JjL3Rlc3RkaXIvdGVzdDUyLm9rCisKK1BhdGNoIDYuMi41MDcKK1Byb2JsZW06ICAgIFRoZSBvd25lcnNoaXAgb2YgdGhlIGZpbGUgd2l0aCB0aGUgcGFzc3dvcmQgZm9yIHRoZSBOZXRCZWFucworCSAgICBjb25uZWN0aW9uIGlzIG5vdCBjaGVja2VkLiAgIi1uYj17ZmlsZX0iIGRvZXNuJ3Qgd29yayBmb3IgR1RLLgorU29sdXRpb246ICAgT25seSBhY2NlcHQgdGhlIGZpbGUgd2hlbiBvd25lZCBieSB0aGUgdXNlciBhbmQgbm90IGFjY2Vzc2libGUgYnkKKwkgICAgb3RoZXJzLiAgRGV0ZWN0ICItbmI9IiBmb3IgR1RLLgorRmlsZXM6CSAgICBzcmMvbmV0YmVhbnMuYywgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNi4yLjUwOAorUHJvYmxlbTogICAgV2luMzI6ICJ2OmxhbmciIGRvZXMgbm90IHNob3cgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgZm9yIG1lc3NhZ2VzIGlmCisJICAgIGl0IGRpZmZlcnMgZnJvbSB0aGUgb3RoZXIgbG9jYWxlIHNldHRpbmdzLgorU29sdXRpb246ICAgVXNlIHRoZSB2YWx1ZSBvZiB0aGUgJExDX01FU1NBR0VTIGVudmlyb25tZW50IHZhcmlhYmxlLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjIuNTA5IChhZnRlciA2LjIuNTA4KQorUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiAkTEFORyBpcyBub3Qgc2V0LgorU29sdXRpb246ICAgQWRkIGNoZWNrIGZvciBOVUxMIHBvaW50ZXIuIChSb24gQWFyb24pCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMi41MTAgKGFmdGVyIDYuMi41MDcpCitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciBwb2ludGVyIGNvbnZlcnNpb24uCitTb2x1dGlvbjogICBBZGQgYSB0eXBlIGNhc3QuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMi41MTEKK1Byb2JsZW06ICAgIFRhZ3MgaW4gUnVzc2lhbiBoZWxwIGZpbGVzIGFyZSBpbiB1dGYtOCBlbmNvZGluZywgd2hpY2ggbWF5IGJlCisJICAgIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycuCitTb2x1dGlvbjogICBVc2UgdGhlICJUQUdfRklMRV9FTkNPRElORyIgZmllbGQgaW4gdGhlIHRhZ3MgZmlsZSB0byBzcGVjaWZ5IHRoZQorCSAgICBlbmNvZGluZyBvZiB0aGUgdGFncy4gIENvbnZlcnQgaGVscCB0YWdzIGZyb20gJ2VuY29kaW5nJyB0byB0aGUKKwkgICAgdGFnIGZpbGUgZW5jb2Rpbmcgd2hlbiBzZWFyY2hpbmcgZm9yIG1hdGNoZXMsIGRvIHRoZSByZXZlcnNlIHdoZW4KKwkgICAgbGlzdGluZyBoZWxwIHRhZ3MuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3RhZ3NyY2gudHh0LCBzcmMvZXhfY21kcy5jLCBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjUxMgorUHJvYmxlbTogICAgVHJhbnNsYXRpbmcgIlwiXG4iIGlzIHVzZWxlc3MuIChHZXJmcmllZCBGdWNocykKK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgXygpIGFyb3VuZCBpdC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYywgc3JjL21lbWxpbmUuYworCitQYXRjaCA2LjIuNTEzIChhZnRlciA2LjIuNTA3KQorUHJvYmxlbTogICAgTmV0QmVhbnM6IHRoZSBjaGVjayBmb3Igb3duaW5nIHRoZSBjb25uZWN0aW9uIGluZm8gZmlsZSBjYW4gYmUKKwkgICAgc2ltcGxpZmllZC4gKE5pa29sYXkgTW9sY2hhbm92KQorU29sdXRpb246ICAgT25seSBjaGVjayBpZiB0aGUgYWNjZXNzIG1vZGUgaXMgcmlnaHQuCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jCisKK1BhdGNoIDYuMi41MTQKK1Byb2JsZW06ICAgIFdoZW4gYSBoaWdobGlnaHQvc3ludGF4IGdyb3VwIG5hbWUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzCisJICAgIHRoZXJlIGlzIG5vIHdhcm5pbmcuCitTb2x1dGlvbjogICBBZGQgYW4gZXJyb3IgZm9yIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgYW5kIGEgd2FybmluZyBmb3Igb3RoZXIKKwkgICAgaW52YWxpZCBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4yLjUxNQorUHJvYmxlbTogICAgV2hlbiB1c2luZyB0aGUgb3B0aW9ucyB3aW5kb3cgJ3N3YXBmaWxlJyBpcyByZXNldC4KK1NvbHV0aW9uOiAgIFVzZSAiOnNldGxvY2FsIiBpbnN0ZWFkIG9mICI6c2V0Ii4KK0ZpbGVzOgkgICAgcnVudGltZS9vcHR3aW4udmltCisKK1BhdGNoIDYuMi41MTYKK1Byb2JsZW06ICAgIFRoZSBzaWduIGNvbHVtbiBjYW5ub3QgYmUgc2VlbiwgbG9va3MgbGlrZSB0aGVyZSBhcmUgdHdvIHNwYWNlcworCSAgICBiZWZvcmUgdGhlIHRleHQuIChSb2IgUmV0dGVyKQorU29sdXRpb246ICAgQWRkIHRoZSBTaWduQ29sdW1uIGhpZ2hsaWdodCBncm91cC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHJ1bnRpbWUvZG9jL3NpZ24udHh0LCBzcmMvb3B0aW9uLmMsCisJICAgIHNyYy9zY3JlZW4uYywgc3JjL3N5bnRheC5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjUxNworUHJvYmxlbTogICAgVXNpbmcgInIqIiBpbiBWaXN1YWwgbW9kZSBvbiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgcmVwbGFjZXMKKwkgICAgdG9vIG1hbnkgY2hhcmFjdGVycy4gIEluIFZpc3VhbCBCbG9jayBtb2RlIHJlcGxhY2luZyB3aXRoIGEKKwkgICAgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgQWRqdXN0IHRoZSBvcGVyYXRvciBlbmQgZm9yIHRoZSBkaWZmZXJlbmNlIGluIGJ5dGUgbGVuZ3RoIG9mIHRoZQorCSAgICBvcmlnaW5hbCBhbmQgdGhlIHJlcGxhY2VkIGNoYXJhY3Rlci4gIEluc2VydCBhbGwgYnl0ZXMgb2YgYQorCSAgICBtdWx0aS1ieXRlIGNoYXJhY3RlciwgdGFrZSBjYXJlIG9mIGRvdWJsZS13aWRlIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjIuNTE4CitQcm9ibGVtOiAgICBMYXN0IGxpbmUgb2YgYSB3aW5kb3cgaXMgbm90IHVwZGF0ZWQgYWZ0ZXIgdXNpbmcgIkoiIGFuZCB0aGVuICJEIi4KKwkgICAgKEFkcmkgVmVyaG9lZikKK1NvbHV0aW9uOiAgIFdoZW4gbm8gbGluZSBpcyBmb3VuZCBiZWxvdyBhIGNoYW5nZSB0aGF0IGRvZXNuJ3QgbmVlZCB1cGRhdGluZywKKwkgICAgdXBkYXRlIGFsbCBsaW5lcyBiZWxvdyB0aGUgY2hhbmdlLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4yLjUxOQorUHJvYmxlbTogICAgTWFjOiBjYW5ub3QgcmVhZC93cml0ZSBmaWxlcyBpbiBNYWNSb21hbiBmb3JtYXQuCitTb2x1dGlvbjogICBEbyBpbnRlcm5hbCBjb252ZXJzaW9uIGZyb20vdG8gTWFjUm9tYW4gdG8vZnJvbSB1dGYtOCBhbmQgbGF0aW4xLgorCSAgICAoRWNrZWhhcmQgQmVybnMpCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjIuNTIwIChleHRyYSkKK1Byb2JsZW06ICAgIFRoZSBOU0lTIGluc3RhbGxlciBpcyBvdXRkYXRlZC4KK1NvbHV0aW9uOiAgIE1ha2UgaXQgd29yayB3aXRoIE5TSVMgMi4wLiAgQWxzbyBpbmNsdWRlIGNvbnNvbGUgZXhlY3V0YWJsZXMgZm9yCisJICAgIFdpbiA5NS85OC9NRSBhbmQgV2luIE5ULzIwMDAvWFAuICBVc2UgTFpXQSBjb21wcmVzc2lvbi4gIFVzZQorCSAgICAiL29uYW1lIiB0byBhdm9pZCBoYXZpbmcgdG8gcmVuYW1lIGZpbGVzIGJlZm9yZSBydW5uaW5nIE5TSVMuCitGaWxlczoJICAgIE1ha2VmaWxlLCBuc2lzL2d2aW0ubnNpCisKK1BhdGNoIDYuMi41MjEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgc2lsZW50IEV4IG1vZGUgdGhlICJjaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiIHdhcm5pbmcKKwkgICAgaXMgb21pdHRlZCBidXQgdGhlIG9uZSBzZWNvbmQgd2FpdCBpc24ndC4gKFlha292IExlcm5lcikKK1NvbHV0aW9uOiAgIFNraXAgdGhlIGRlbGF5IHdoZW4gInNpbGVudF9tb2RlIiBpcyBzZXQuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMi41MjIKK1Byb2JsZW06ICAgIEdVSTogd2hlbiBjaGFuZ2luZyAnY21kaGVpZ2h0JyBpbiB0aGUgZ3ZpbXJjIGZpbGUgdGhlIHdpbmRvdworCSAgICBsYXlvdXQgaXMgbWVzc2VkIHVwLiAoS2VpdGggRGFydCkKK1NvbHV0aW9uOiAgIFNraXAgdXBkYXRpbmcgdGhlIHdpbmRvdyBsYXlvdXQgd2hlbiBjaGFuZ2luZyAnY21kaGVpZ2h0JyB3aGlsZQorCSAgICBzdGlsbCBzdGFydGluZyB1cC4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi41MjMKK1Byb2JsZW06ICAgIFdoZW4gbG9hZGluZyBhIHNlc3Npb24gYW5kIGFib3J0aW5nIHdoZW4gYSBzd2FwIGZpbGUgYWxyZWFkeQorCSAgICBleGlzdHMsIHRoZSB1c2VyIGlzIGxlZnQgd2l0aCB1c2VsZXNzIHdpbmRvd3MuIChSb2JlcnQgV2ViYikKK1NvbHV0aW9uOiAgIExvYWQgb25lIGZpbGUgYmVmb3JlIGNyZWF0aW5nIHRoZSB3aW5kb3dzLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjIuNTI0IChleHRyYSwgYWZ0ZXIgNi4yLjUyMCkKK1Byb2JsZW06ICAgIFdpbjMyOiAodW4paW5zdGFsbGluZyBndmltZXh0LmRsbCBtYXkgZmFpbCBpZiBpdCB3YXMgdXNlZC4KKwkgICAgVGhlIGRlc2t0b3AgYW5kIHN0YXJ0IG1lbnUgbGlua3MgYXJlIGNyZWF0ZWQgZm9yIHRoZSBjdXJyZW50IHVzZXIKKwkgICAgaW5zdGVhZCBvZiBhbGwgdXNlcnMuCisJICAgIFVzaW5nIHRoZSBob21lIGRpcmVjdG9yeSBhcyB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIGxpbmtzIGlzIGEKKwkgICAgYmFkIGlkZWEgZm9yIG11bHRpLXVzZXIgc3lzdGVtcy4KKwkgICAgQ2Fubm90IHVzZSBWaW0gZnJvbSB0aGUgIk9wZW4gV2l0aC4uLiIgbWVudS4KK1NvbHV0aW9uOiAgIEZvcmNlIGEgcmVib290IGlmIG5lY2Vzc2FyeS4gKEFsZWphbmRybyBMb3Blei1WYWxlbmNpYSkgIEFsc28gdXNlCisJICAgIG1hY3JvcyBmb3IgdGhlIGRpcmVjdG9yeSBvZiB0aGUgc291cmNlIGFuZCBydW50aW1lIGZpbGVzLiAgVXNlCisJICAgICJDU0lETF9DT01NT05fKiIgaW5zdGVhZCBvZiAiQ1NJRExfKiIgd2hlbiBwb3NzaWJsZS4KKwkgICAgRG8gbm90IHNwZWNpZnkgYSB3b3JraW5nIGRpcmVjdG9yeSBpbiB0aGUgbGlua3MuCisJICAgIEFkZCBWaW0gdG8gdGhlICJPcGVuIFdpdGguLi4iIG1lbnUuIChHaXVzZXBwZSBCaWxvdHRhKQorRmlsZXM6CSAgICBuc2lzL2d2aW0ubnNpLCBzcmMvZG9zaW5zdC5jLCBzcmMvZG9zaW5zdC5oLCBzcmMvdW5pbnN0YWwuYworCitQYXRjaCA2LjIuNTI1CitQcm9ibGVtOiAgICBXaGVuIHRoZSBoaXN0b3J5IGNvbnRhaW5zIGEgdmVyeSBsb25nIGxpbmUgIjpoaXN0b3J5IiBjYXVzZXMgYQorCSAgICBjcmFzaC4gKFZvbGtlciBLaWVmZWwpCitTb2x1dGlvbjogICBTaG9ydGVuIHRoZSBoaXN0b3J5IGVudHJ5IHRvIGZpdCBpdCBpbiBvbmUgbGluZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNi4yLjUyNgorUHJvYmxlbTogICAgV2hlbiBzOmxhbmcgaXMgImphIiB0aGUgSmFwYW5lc2UgbWVudXMgYXJlIG5vdCB1c2VkLgorU29sdXRpb246ICAgQWRkICdlbmNvZGluZycgdG8gdGhlIGxhbmd1YWdlIHdoZW4gdGhlcmUgaXMgbm8gY2hhcnNldC4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjIuNTI3CitQcm9ibGVtOiAgICBUaGUgMmh0bWwgc2NyaXB0IHVzZXMgIjp3aW5jbWQgcCIsIHdoaWNoIGJyZWFrcyB3aGVuIHVzaW5nIHNvbWUKKwkgICAgYXV0b2NvbW1hbmRzLgorU29sdXRpb246ICAgUmVtZW1iZXIgdGhlIHdpbmRvdyBudW1iZXJzIGFuZCBqdW1wIHRvIHRoZW0gd2l0aCAiOndpbmNtZCB3Ii4KKwkgICAgQWxzbyBhZGQgWEhUTUwgc3VwcG9ydC4gKFBhbmFnaW90aXMgSXNzYXJpcykKK0ZpbGVzOgkgICAgcnVudGltZS9zeW50YXgvMmh0bWwudmltCisKK1BhdGNoIDYuMi41MjgKK1Byb2JsZW06ICAgIE5ldEJlYW5zOiBDaGFuZ2VzIG9mIHRoZSAifiIgY29tbWFuZCBhcmUgbm90IHJlcG9ydGVkLgorU29sdXRpb246ICAgQ2FsbCBuZXRiZWFuc19pbnNlcnRlZCgpIGFmdGVyIHBlcmZvcm1pbmcgIn4iLiAoR29yZG9uIFByaWV1cikKKwkgICAgQWxzbyBjaGFuZ2UgTmV0QmVhbnMgZGVidWdnaW5nIHRvIGFwcGVuZCB0byB0aGUgbG9nIGZpbGUuCisJICAgIEFsc28gZml4IHRoYXQgIn4iIGluIFZpc3VhbCBibG9jayBtb2RlIGNoYW5nZXMgdG9vIG11Y2ggaWYgdGhlcmUKKwkgICAgYXJlIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL25iZGVidWcuYywgc3JjL25vcm1hbC5jLCBzcmMvb3BzLmMKKworUGF0Y2ggNi4yLjUyOSAoZXh0cmEpCitQcm9ibGVtOiAgICBWaXNWaW0gb25seSB3b3JrcyBmb3IgQWRtaW4uICBEb2luZyBpdCBmb3Igb25lIHVzZXIgZG9lc24ndCB3b3JrLgorCSAgICAoQWxleGFuZHJlIEdvdXJhdWQpCitTb2x1dGlvbjogICBXaGVuIHJlZ2lzdGVyaW5nIHRoZSBtb2R1bGUgZmFpbHMsIHNpbXBseSBjb250aW51ZS4KK0ZpbGVzOgkgICAgc3JjL1Zpc1ZpbS9WaXNWaW0uY3BwCisKK1BhdGNoIDYuMi41MzAKK1Byb2JsZW06ICAgIFdhcm5pbmcgZm9yIG1pc3NpbmcgcHJvdG90eXBlIG9uIHRoZSBBbWlnYS4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgdGltZS5oCitGaWxlczoJICAgIHNyYy92ZXJzaW9uLmMKKworUGF0Y2ggNi4yLjUzMQorUHJvYmxlbTogICAgSW4gc2lsZW50IGV4IG1vZGUgbm8gbWVzc2FnZXMgYXJlIGdpdmVuLCB3aGljaCBtYWtlcyBkZWJ1Z2dpbmcKKwkgICAgdmVyeSBkaWZmaWN1bHQuCitTb2x1dGlvbjogICBEbyBvdXRwdXQgbWVzc2FnZXMgd2hlbiAndmVyYm9zZScgaXMgc2V0LgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jLCBzcmMvdWkuYworCitQYXRjaCA2LjIuNTMyIChleHRyYSkKK1Byb2JsZW06ICAgIENvbXBpbGluZyBmb3IgV2luMzJzIHdpdGggVkMgNC4xIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSBDUF9VVEY4IGlmIGl0J3Mgbm90IGRlZmluZWQuICBEb24ndCB1c2UgQ1NJRExfQ09NTU9OKgorCSAgICB3aGVuIG5vdCBkZWZpbmVkLgorRmlsZXM6CSAgICBzcmMvZG9zaW5zdC5oLCBzcmMvZmlsZWlvLmMKKworV2luMzIgY29uc29sZTogQWZ0ZXIgcGF0Y2ggNi4yLjM5OCBFeCBtb2RlIGRpZCBub3Qgd29yay4gKFlhc3VoaXJvIE1hdHN1bW90bykKKworUGF0Y2ggNi4zYS4wMDEKK1Byb2JsZW06ICAgIFdpbjMyOiBpZiB0ZXN0aW5nIGZvciB0aGUgIi0tYmluYXJ5IiBvcHRpb24gZmFpbHMsIGRpZmYgaXNuJ3QgdXNlZAorCSAgICBhdCBhbGwuCitTb2x1dGlvbjogICBIYW5kbGUgdGhlICJvayIgZmxhZyBwcm9wZXJseS4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2RpZmYuYworCitQYXRjaCA2LjNhLjAwMgorUHJvYmxlbTogICAgTmV0QmVhbnM6IEFuIGluc2VydCBjb21tYW5kIGZyb20gTmV0QmVhbnMgYmV5b25kIHRoZSBlbmQgb2YgYQorCSAgICBidWZmZXIgY3Jhc2hlcyBWaW0uIChYYXZpZXIgZGUgR2F5ZSkKK1NvbHV0aW9uOiAgIFVzZSBhIGxvY2FsIHBvc19UIHN0cnVjdHVyZSBmb3IgdGhlIHBvc2l0aW9uLgorRmlsZXM6CSAgICBzcmMvbmV0YmVhbnMuYworCitQYXRjaCA2LjNhLjAwMworUHJvYmxlbTogICAgRTMxNSBlcnJvciB3aXRoIGF1dG8tZm9ybWF0dGluZyBjb21tZW50cy4gKEhlbnJ5IFZhbiBSb2Vzc2VsKQorU29sdXRpb246ICAgUGFzcyB0aGUgbGluZSBudW1iZXIgdG8gc2FtZV9sZWFkZXIoKS4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuM2EuMDA0CitQcm9ibGVtOiAgICBUZXN0MzIgZmFpbHMgb24gV2luZG93cyBYUCBmb3IgdGhlIERKR1BQIHZlcnNpb24uICBSZW5hbWluZworCSAgICB0ZXN0MTEub3V0IGZhaWxzLgorU29sdXRpb246ICAgRG9uJ3QgdHJ5IHJlbmFtaW5nLCBjcmVhdGUgbmV3IGZpbGVzIHRvIHVzZSBmb3IgdGhlIHRlc3QuCitGaWxlczoJICAgIHNyYy90ZXN0ZGlyL3Rlc3QzMi5pbiwgc3JjL3Rlc3RkaXIvdGVzdDMyLm9rCisKK1BhdGNoIDYuM2EuMDA1CitQcm9ibGVtOiAgICAiOmNoZWNrcGF0aCEiIGRvZXMgbm90IHVzZSAnaW5jbHVkZWV4cHInLgorU29sdXRpb246ICAgVXNlIGEgZmlsZSBuYW1lIHRoYXQgd2FzIGZvdW5kIGRpcmVjdGx5LiAgV2hlbiBhIGZpbGUgd2FzIG5vdAorCSAgICBmb3VuZCBhbmQgdGhlIGxvY2F0ZWQgbmFtZSBpcyBlbXB0eSwgdXNlIHRoZSByZXN0IG9mIHRoZSBsaW5lLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4zYS4wMDYKK1Byb2JsZW06ICAgICJ5aXAiIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IHlhbmtlZCBsaW5lLCBidXQgbm90IHRvIHRoZQorCSAgICBmaXJzdCBjb2x1bW4uICBMb29rcyBsaWtlIG5vdCBhbGwgdGV4dCB3YXMgeWFua2VkLiAoSmVucyBQYXVsdXMpCitTb2x1dGlvbjogICBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGNvbHVtbi4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuM2EuMDA3CitQcm9ibGVtOiAgICAnY2luZGVudCcgcmVjb2duaXplcyAiZW51bSIgYnV0IG5vdCAidHlwZWRlZiBlbnVtIi4KK1NvbHV0aW9uOiAgIFNraXAgb3ZlciAidHlwZWRlZiIgYmVmb3JlIGNoZWNraW5nIGZvciAiZW51bSIuIChIZWxtdXQgU3RpZWdsZXIpCisJICAgIEFsc28gYXZvaWQgdGhhdCBzZWFyY2hpbmcgZm9yIHRoaXMgaXRlbSBnb2VzIHRvbyBmYXIgYmFjay4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMsIHNyYy90ZXN0ZGlyL3Rlc3QzLmluLCBzcmMvdGVzdGRpci90ZXN0My5vaworCitQYXRjaCA2LjNhLjAwOCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW5kb3dzIDk4OiBTb21lIG9mIHRoZSB3aWRlIGZ1bmN0aW9ucyBhcmUgbm90IGltcGxlbWVudGVkLAorCSAgICByZXN1bHRpbmcgaW4gZmlsZSBJL08gdG8gZmFpbC4gIFRoaXMgZGVwZW5kcyBvbiB3aGF0IFVuaWNvZGUKKwkgICAgc3VwcG9ydCBpcyBpbnN0YWxsZWQuCitTb2x1dGlvbjogICBIYW5kbGUgdGhlIGZhaWx1cmUgYW5kIGZhbGwgYmFjayB0byBub24td2lkZSBmdW5jdGlvbnMuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuM2EuMDA5CitQcm9ibGVtOiAgICBXaW4zMjogQ29tcGxldGlvbiBvZiBmaWxlbmFtZXMgZG9lcyBub3Qgd29yayBwcm9wZXJseSB3aGVuCisJICAgICdlbmNvZGluZycgZGlmZmVycyBmcm9tIHRoZSBhY3RpdmUgY29kZSBwYWdlLgorU29sdXRpb246ICAgVXNlIHdpZGUgZnVuY3Rpb25zIGZvciBleHBhbmRpbmcgd2lsZGNhcmRzIHdoZW4gYXBwcm9wcmlhdGUuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuM2EuMDEwIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBDaGFyYWN0ZXJzIGluIHRoZSB3aW5kb3cgdGl0bGUgdGhhdCBkbyBub3QgYXBwZWFyIGluIHRoZQorCSAgICBhY3RpdmUgY29kZXBhZ2UgYXJlIHJlcGxhY2VkIGJ5IGEgcXVlc3Rpb24gbWFyay4KK1NvbHV0aW9uOiAgIFVzZSBEZWZXaW5kb3dQcm9jVygpIGluc3RlYWQgb2YgRGVmV2luZG93UHJvYygpIHdoZW4gcG9zc2libGUuCitGaWxlczoJICAgIHNyYy9nbGJsX2ltZS5jcHAsIHNyYy9nbG9iYWxzLmgsIHNyYy9wcm90by9ndWlfdzE2LnBybywKKwkgICAgc3JjL3Byb3RvL2d1aV93MzIucHJvLCBzcmMvZ3VpX3cxNi5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuM2EuMDExCitQcm9ibGVtOiAgICBVc2luZyB0aGUgZXhwbG9yZXIgcGx1Z2luIGNoYW5nZXMgYSBsb2NhbCBkaXJlY3RvcnkgdG8gdGhlIGdsb2JhbAorCSAgICBkaXJlY3RvcnkuCitTb2x1dGlvbjogICBEb24ndCB1c2UgIjpjaGRpciIgdG8gcmVzdG9yZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBNYWtlCisJICAgICJleHBhbmQoJyU6cCcpIiByZW1vdmUgIi8uLi8iIGFuZCAiLy4vIiBpdGVtcyBmcm9tIHRoZSBwYXRoLgorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9leHBsb3Jlci52aW0sIHNyYy9ldmFsLmMsIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4zYS4wMTIgKGV4dHJhKQorUHJvYmxlbTogICAgT24gV2luZG93cyA5OCB0aGUgaW5zdGFsbGVyIGRvZXNuJ3Qgd29yaywgZG9uJ3QgZXZlbiBnZXQgdGhlICJJCisJICAgIGFncmVlIiBidXR0b24uICBUaGUgY2hlY2sgZm9yIHRoZSBwYXRoIGVuZGluZyBpbiAidmltIiBtYWtlcyB0aGUKKwkgICAgYnJvd3NlIGRpYWxvZyBoYXJkIHRvIHVzZS4gIFRoZSBkZWZhdWx0IHBhdGggd2hlbiBubyBwcmV2aW91cyBWaW0KKwkgICAgaXMgaW5zdGFsbGVkIGlzICJjOlx2aW0iIGluc3RlYWQgb2YgImM6XFByb2dyYW0gRmlsZXNcVmltIi4KK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgYmFja2dyb3VuZCBncmFkaWVudCBjb21tYW5kLiAgQ2hhbmdlIHRoZQorCSAgICAub25WZXJpZnlJbnN0RGlyIGZ1bmN0aW9uIHRvIGEgbGVhdmUgZnVuY3Rpb24gZm9yIHRoZSBkaXJlY3RvcnkKKwkgICAgcGFnZS4gIERvbid0IGxldCB0aGUgaW5zdGFsbCBwcm9ncmFtIGRlZmF1bHQgdG8gYzpcdmltIHdoZW4gbm8KKwkgICAgcGF0aCBjb3VsZCBiZSBmb3VuZC4KK0ZpbGVzOgkgICAgbnNpcy9ndmltLm5zaSwgc3JjL2Rvc2luc3QuYworCitQYXRjaCA2LjNhLjAxMyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogQ2hhcmFjdGVycyBpbiB0aGUgbWVudSB0aGF0IGFyZSBub3QgaW4gdGhlIGFjdGl2ZSBjb2RlcGFnZQorCSAgICBhcmUgZ2FyYmxlZC4KK1NvbHV0aW9uOiAgIENvbnZlcnQgbWVudSBzdHJpbmdzIGZyb20gJ2VuY29kaW5nJyB0byB0aGUgYWN0aXZlIGNvZGVwYWdlLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuM2EuMDE0CitQcm9ibGVtOiAgICBVc2luZyBtdWx0aS1ieXRlIHRleHQgYW5kIGhpZ2hsaWdodGluZyBpbiBhIHN0YXR1c2xpbmUgY2F1c2VzIGdhcHMKKwkgICAgdG8gYXBwZWFyLiAoSGVsbXV0IFN0aWVnbGVyKQorU29sdXRpb246ICAgQWR2YW5jZSB0aGUgY29sdW1uIGJ5IHRleHQgd2lkdGggaW5zdGVhZCBvZiBudW1iZXIgb2YgYnl0ZXMuICBBZGQKKwkgICAgdGhlIHZpbV9zdHJuc2l6ZSgpIGZ1bmN0aW9uLgorRmlsZXM6CSAgICBzcmMvY2hhcnNldC5jLCBzcmMvcHJvdG8vY2hhcnNldC5wcm8sIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjNhLjAxNQorUHJvYmxlbTogICAgVXNpbmcgdGhlICJzZWxlY3QgYWxsIiBtZW51IGl0ZW0gd2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0IGFuZAorCSAgICBjbGlja2luZyB0aGUgbW91c2UgYnV0dG9uIGRvZXNuJ3QgcmV0dXJuIHRvIEluc2VydCBtb2RlLiAgVGhlCisJICAgIEJ1ZmZlcnMvRGVsZXRlIG1lbnUgZG9lc24ndCBvZmZlciBhIGNob2ljZSB0byBhYmFuZG9uIGEgY2hhbmdlZAorCSAgICBidWZmZXIuICAoSmVucyBQYXVsdXMpCitTb2x1dGlvbjogICBEb24ndCB1c2UgQ1RSTC1cIENUUkwtTi4gIEFkZCAiOmNvbmZpcm0iIGZvciB0aGUgQnVmZmVycyBtZW51CisJICAgIGl0ZW1zLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuM2EuMDE2CitQcm9ibGVtOiAgICBBZnRlciBjYW5jZWxsaW5nIHRoZSAiOmNvbmZpcm0iIGRpYWxvZyB0aGUgZXJyb3IgbWVzc2FnZSBhbmQKKwkgICAgaGl0LWVudGVyIHByb21wdCBtYXkgbm90IGJlIGRpc3BsYXllZCBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIEZsdXNoIG91dHB1dCBhZnRlciBzaG93aW5nIHRoZSBkaWFsb2cuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4zYS4wMTcKK1Byb2JsZW06ICAgIHNlcnZlcm5hbWUoKSBkb2Vzbid0IHdvcmsgd2hlbiBWaW0gd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgIi1YIgorCSAgICBhcmd1bWVudCBvciB3aGVuIHRoZSAiZXhjbHVkZSIgaW4gJ2NsaXBib2FyZCcgbWF0Y2hlcyB0aGUgdGVybWluYWwKKwkgICAgbmFtZS4gIChSb2JlcnQgTm93b3RuaWFrKQorU29sdXRpb246ICAgRm9yY2UgY29ubmVjdGluZyB0byB0aGUgWCBzZXJ2ZXIgd2hlbiB1c2luZyBjbGllbnQtc2VydmVyCisJICAgIGNvbW1hbmRzLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvZ2xvYmFscy5oLCBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuM2EuMDE4IChhZnRlciA2LjNhLjAxNykKK1Byb2JsZW06ICAgIENvbXBpbGVyIHdhcm5pbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBtYWtlX2Nvbm5lY3Rpb24oKS4KK1NvbHV0aW9uOiAgIFVzZSB2b2lkIHJldHVybiB0eXBlLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuM2EuMDE5IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiB0eXBpbmcgbm9uLWxhdGluMSBjaGFyYWN0ZXJzIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEludm9rZSBfT25DaGFyKCkgZGlyZWN0bHkgdG8gYXZvaWQgdGhhdCB0aGUgYXJndW1lbnQgaXMgdHJ1bmNhdGVkCisJICAgIHRvIGEgYnl0ZS4gIENvbnZlcnQgdGhlIFVURi0xNiBjaGFyYWN0ZXIgdG8gYnl0ZXMgYWNjb3JkaW5nIHRvCisJICAgICdlbmNvZGluZycgYW5kIGlnbm9yZSAndGVybWVuY29kaW5nJy4gIFNhbWUgZm9yIF9PblN5c0NoYXIoKS4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYywgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjNhLjAyMCAoZXh0cmEpCitQcm9ibGVtOiAgICBNaXNzaW5nIHN1cHBvcnQgZm9yIEFST1MgKEFtaWdhT1MgcmVpbXBsZW1lbnRhdGlvbikuICBBbWlnYSBHVUkKKwkgICAgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgQWRkIEFST1Mgc3VwcG9ydC4gIChBZGFtIENob2Rvcm93c2tpKQorCSAgICBGaXggQW1pZ2EgR1VJIHByb2JsZW1zLiAoR2VvcmcgU3RlZ2VyLCBBbGkgQWtjYWFnYWMpCitGaWxlczoJICAgIE1ha2VmaWxlLCBzcmMvTWFrZV9hcm9zLm1haywgc3JjL2d1aV9hbWlnYS5jLCBzcmMvZ3VpX2FtaWdhLmgsCisJICAgIHNyYy9tZW1maWxlLmMsIHNyYy9vc19hbWlnYS5jLCBzcmMvdGVybS5jCisKK1BhdGNoIDYuM2EuMDIxIChhZnRlciA2LjNhLjAxNykKK1Byb2JsZW06ICAgIENhbid0IGNvbXBpbGUgd2l0aCBYMTEgYnV0IHdpdGhvdXQgR1VJLgorU29sdXRpb246ICAgUHV0IHVzZSBvZiAiZ3VpLmluX3VzZSIgaW5zaWRlIGFuICNpZmRlZi4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjNhLjAyMgorUHJvYmxlbTogICAgV2hlbiB0eXBpbmcgVGFicyB3aGVuICdzb2Z0dGFic3RvcCcgaXMgdXNlZCBhbmQgJ2xpc3QnIGlzIHNldCBhCisJICAgIHRhYiBpcyBjb3VudGVkIGZvciB0d28gc3BhY2VzLgorU29sdXRpb246ICAgVXNlIHRoZSAiTCIgZmxhZyBpbiAnY3BvcHRpb25zJyB0byB0ZWxsIHdoZXRoZXIgYSB0YWIgaXMgY291bnRlZAorCSAgICBhcyB0d28gc3BhY2VzIG9yIGFzICd0YWJzdG9wJy4gKEFudG9ueSBTY3JpdmVuKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgc3JjL2VkaXQuYworCitQYXRjaCA2LjNhLjAyMworUHJvYmxlbTogICAgQ29tcGxldGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lIGRvZXNuJ3QgaGFuZGxlIGJhY2tzbGFzaGVzCisJICAgIHByb3Blcmx5LiAgT25seSB0aGUgdGFpbCBvZiBtYXRjaGVzIGlzIHNob3duLCBldmVuIHdoZW4gbm90CisJICAgIGNvbXBsZXRpbmcgZmlsZW5hbWVzLgorU29sdXRpb246ICAgV2hlbiB0dXJuaW5nIHRoZSBzdHJpbmcgaW50byBhIHBhdHRlcm4gZG91YmxlIGJhY2tzbGFzaGVzLiAgRG9uJ3QKKwkgICAgb21pdCB0aGUgcGF0aCB3aGVuIG5vdCBleHBhbmRpbmcgZmlsZXMgb3IgZGlyZWN0b3JpZXMuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDYuM2EuMDI0CitQcm9ibGVtOiAgICBUaGUgInNhdmUgYWxsIiB0b29sYmFyIGl0ZW0gZmFpbHMgZm9yIGJ1ZmZlcnMgdGhhdCBkb24ndCBoYXZlIGEKKwkgICAgbmFtZS4gIFdoZW4gdXNpbmcgIjp3YSIgb3IgY2xvc2luZyB0aGUgVmltIHdpbmRvdyBhbmQgdGhlcmUgYXJlCisJICAgIG5hbWVsZXNzIGJ1ZmZlcnMsIGJyb3dzaW5nIGZvciBhIG5hbWUgbWF5IGNhdXNlIHRoZSBuYW1lIGJlaW5nCisJICAgIGdpdmVuIHRvIHRoZSB3cm9uZyBidWZmZXIgb3Igbm90IHN0b3JlZCBwcm9wZXJseS4gICI6YnJvd3NlIiBvbmx5CisJICAgIHdvcmtlZCBmb3Igb25lIGZpbGUuCitTb2x1dGlvbjogICBVc2UgIjpjb25maXJtIGJyb3dzZSIgZm9yICJzYXZlIGFsbCIuCisJICAgIFBhc3MgYnVmZmVyIGFyZ3VtZW50IHRvIHNldGZuYW1lKCkuICBSZXN0b3JlICJicm93c2UiIGZsYWcgYW5kCisJICAgICJmb3JjZWl0IiBhZnRlciBkb2luZyB0aGUgd29yayBmb3Igb25lIGZpbGUuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0sIHNyYy9idWZmZXIuYywgc3JjL2V4X2NtZHMuYywgc3JjL2V4X2NtZHMyLmMsCisJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2ZpbGVpby5jLCBzcmMvbWVtbGluZS5jLAorCSAgICBzcmMvbWVzc2FnZS5jLCBzcmMvd2luZG93LmMsIHNyYy9wcm90by9idWZmZXIucHJvLAorCSAgICBzcmMvcHJvdG8vZXhfY21kczIucHJvLCBzcmMvcHJvdG8vbWVtbGluZS5wcm8KKworUGF0Y2ggNi4zYS4wMjUKK1Byb2JsZW06ICAgIFNldHRpbmcgJ3ZpcnR1YWxlZGl0JyBtb3ZlcyB0aGUgY3Vyc29yLiAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgVXBkYXRlIHRoZSB2aXJ0dWFsIGNvbHVtbiBiZWZvcmUgdXNpbmcgaXQuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjNhLjAyNiAoZXh0cmEsIGFmdGVyIDYuM2EuMDA4KQorUHJvYmxlbTogICAgRWRpdGluZyBmaWxlcyBvbiBXaW5kb3dzIDk4IGRvZXNuJ3Qgd29yayB3aGVuICdlbmNvZGluZycgaXMKKwkgICAgInV0Zi04IiAoQW50b2luZSBNZWNoZWx5bmNrKQorCSAgICBXYXJuaW5nIGZvciBtaXNzaW5nIGZ1bmN0aW9uIHByb3RvdHlwZS4KK1NvbHV0aW9uOiAgIEZvciBhbGwgd2lkZSBmdW5jdGlvbnMgY2hlY2sgaWYgaXQgZmFpbGVkIGJlY2F1c2UgaXQgaXMgbm90CisJICAgIGltcGxlbWVudGVkLiAgVXNlIEFOU0kgZnVuY3Rpb24gZGVjbGFyYXRpb24gZm9yIGNoYXJfdG9fc3RyaW5nKCkuCitGaWxlczoJICAgIHNyYy9ndWlfdzQ4LmMsIHNyYy9vc19tc3dpbi5jLCBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjNhLjAyNyAoZXh0cmEsIGFmdGVyIDYuM2EuMDI2KQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZyBmb3IgZnVuY3Rpb24gYXJndW1lbnQuCitTb2x1dGlvbjogICBEZWNsYXJlIGJvdGggY2hhciBhbmQgV0NIQVIgYXJyYXlzLgorRmlsZXM6CSAgICBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuM2EuMDI4CitQcm9ibGVtOiAgICAiOm5vcm1hbCAuIiBkb2Vzbid0IHdvcmsgaW5zaWRlIGEgZnVuY3Rpb24sIGJlY2F1c2UgcmVkbyBpcyBzYXZlZAorCSAgICBhbmQgcmVzdG9yZWQuIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBNYWtlIGEgY29weSBvZiB0aGUgcmVkbyBidWZmZXIgd2hlbiBleGVjdXRpbmcgYSBmdW5jdGlvbi4KK0ZpbGVzOgkgICAgc3JjL2dldGNoYXIuYworCitQYXRjaCA2LjNiLjAwMSAoZXh0cmEpCitQcm9ibGVtOiAgICBCY2MgNTogVGhlIGdlbmVyYXRlZCBhdXRvL3BhdGhkZWYgY2FuJ3QgYmUgY29tcGlsZWQuCitTb2x1dGlvbjogICBGaXggdGhlIHdheSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzIGFyZSBlc2NhcGVkLgorRmlsZXM6CSAgICBzcmMvTWFrZV9iYzUubWFrCisKK1BhdGNoIDYuM2IuMDAyCitQcm9ibGVtOiAgICBXaW4zMjogY29udmVyc2lvbiBkdXJpbmcgZmlsZSB3cml0ZSBmYWlscyB3aGVuIGEgZG91YmxlLWJ5dGUKKwkgICAgY2hhcmFjdGVyIGlzIHNwbGl0IG92ZXIgdHdvIHdyaXRlcy4KK1NvbHV0aW9uOiAgIEZpeCB0aGUgY29udmVyc2lvbiByZXRyeSB3aXRob3V0IGEgdHJhaWxpbmcgYnl0ZS4gKFRhcm8gTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuM2IuMDAzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIGNvbXBpbGluZyB3aXRoIEJvcmxhbmQgQyA1LjUgYW5kICdlbmNvZGluZycgaXMgInV0Zi04IgorCSAgICB0aGVuIFZpbSBjYW4ndCBvcGVuIGZpbGVzIHVuZGVyIE1TLVdpbmRvd3MgOTguIChBbnRvaW5lIEouCisJICAgIE1lY2hlbHluY2spCitTb2x1dGlvbjogICBEb24ndCB1c2UgX3dzdGF0KCksIF93b3BlbigpIGFuZCBfd2ZvcGVuKCkgaW4gdGhpcyBzaXR1YXRpb24uCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jLCBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjNiLjAwNAorUHJvYmxlbTogICAgIjpoZWxwZ3JlcCIgaW5jbHVkZXMgYSB0cmFpbGluZyBDUiBpbiB0aGUgdGV4dCBsaW5lLgorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBDUi4KK0ZpbGVzOgkgICAgc3JjL3F1aWNrZml4LmMKKworUGF0Y2ggNi4zYi4wMDUKK1Byb2JsZW06ICAgICI6ZWNobyAmZzphaSIgcmVzdWx0cyBpbiB0aGUgbG9jYWwgb3B0aW9uIHZhbHVlLiAoU2FsbWFuIEhhbGltKQorU29sdXRpb246ICAgUGFzcyB0aGUgZmxhZ3MgZnJvbSBmaW5kX29wdGlvbl9lbmQoKSB0byBnZXRfb3B0aW9uX3ZhbHVlKCkuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4zYi4wMDYKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIm1zd2luLnZpbSIsIENUUkwtViBpbiBJbnNlcnQgbW9kZSBsZWF2ZXMgY3Vyc29yIGJlZm9yZQorCSAgICBsYXN0IHBhc3RlZCBjaGFyYWN0ZXIuICAoTWF0aGV3IERhdmlzKQorU29sdXRpb246ICAgVXNlIHRoZSBzYW1lIFBhc3RlKCkgZnVuY3Rpb24gYXMgaW4gbWVudS52aW0uCitGaWxlczoJICAgIHJ1bnRpbWUvbXN3aW4udmltCisKK1BhdGNoIDYuM2IuMDA3CitQcm9ibGVtOiAgICBTZXNzaW9uIGZpbGUgZG9lc24ndCByZXN0b3JlIHZpZXcgb24gd2luZG93cyBwcm9wZXJseS4gKFJvYmVydAorCSAgICBXZWJiKQorU29sdXRpb246ICAgUmVzdG9yZSB3aW5kb3cgc2l6ZXMgYm90aCBiZWZvcmUgYW5kIGFmdGVyIHJlc3RvcmluZyB0aGUgdmlldywgc28KKwkgICAgdGhhdCB0aGUgdmlldywgY3Vyc29yIHBvc2l0aW9uIGFuZCBzaXplIGFyZSByZXN0b3JlZCBwcm9wZXJseS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4zYi4wMDgKK1Byb2JsZW06ICAgIFVzaW5nICI6ZmluYWxseSIgaW4gYSB1c2VyIGNvbW1hbmQgZG9lc24ndCBhbHdheXMgd29yay4gKEhhcmkKKwkgICAgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgRG9uJ3QgYXNzdW1lIHRoYXQgdXNpbmcgZ2V0ZXhsaW5lKCkgbWVhbnMgdGhlIGNvbW1hbmQgd2FzIHR5cGVkLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjNiLjAwOSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiB0aGUgLVAgYXJndW1lbnQgaXMgbm90IGZvdW5kIGluIGEgd2luZG93IHRpdGxlLCB0aGVyZQorCSAgICBpcyBubyBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgV2hlbiB0aGUgd2luZG93IGNhbid0IGJlIGZvdW5kIGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZXhpdC4KKwkgICAgQWxzbyB1c2UgdHJ5L2V4Y2VwdCB0byBjYXRjaCBmYWlsaW5nIHRvIG9wZW4gdGhlIE1ESSB3aW5kb3cuCisJICAgIChNaWNoYWVsIFdvb2tleSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjNiLjAxMAorUHJvYmxlbTogICAgV2luMzI6IFVzaW5nIHRoZSAiLUQiIGFyZ3VtZW50IGFuZCBleHBhbmRpbmcgYXJndW1lbnRzIG1heSBjYXVzZSBhCisJICAgIGhhbmcsIGJlY2F1c2UgdGhlIHRlcm1pbmFsIGlzbid0IGluaXRpYWxpemVkIHlldC4gKFZpbmNlIE5lZ3JpKQorU29sdXRpb246ICAgRG9uJ3QgZ28gaW50byBkZWJ1ZyBtb2RlIGJlZm9yZSB0aGUgdGVybWluYWwgaXMgaW5pdGlhbGl6ZWQuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4zYi4wMTEKK1Byb2JsZW06ICAgIFVzaW5nIENUUkwtXCBlIHdoaWxlIG9idGFpbmluZyBhbiBleHByZXNzaW9uIGFib3J0cyB0aGUgY29tbWFuZAorCSAgICBsaW5lLiAoSGFyaSBLcmlzaG5hIERhcmEpCitTb2x1dGlvbjogICBJbnNlcnQgdGhlIENUUkwtXCBlIGFzIHR5cGVkLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjNiLjAxMiAoYWZ0ZXIgNi4zYi4wMTApCitQcm9ibGVtOiAgICBDYW4ndCBjb21waWxlIHdpdGggdGlueSBmZWF0dXJlcy4gKE5vcmJlcnQgVHJldGtvd3NraSkKK1NvbHV0aW9uOiAgIEFkZCAjaWZkZWZzLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuM2IuMDEzCitQcm9ibGVtOiAgICBMb2FkaW5nIGEgc2Vzc2lvbiBmaWxlIHJlc3VsdHMgaW4gZWRpdGluZyB0aGUgd3JvbmcgZmlsZSBpbiB0aGUKKwkgICAgZmlyc3Qgd2luZG93IHdoZW4gdGhpcyBpcyBub3QgdGhlIGZpbGUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4KKwkgICAgdGhlIGFyZ3VtZW50IGxpc3QuIChSb2JlcnQgV2ViYikKK1NvbHV0aW9uOiAgIENoZWNrIHdfYXJnX2lkeF9pbnZhbGlkIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGVkaXQgYSBmaWxlLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjNiLjAxNAorUHJvYmxlbTogICAgIjpydW50aW1lISBmb28qLnZpbSIgbWF5IHVzaW5nIGZyZWVkIG1lbW9yeSB3aGVuIGEgc291cmNlZCBzY3JpcHQKKwkgICAgY2hhbmdlcyB0aGUgdmFsdWUgb2YgJ3J1bnRpbWVwYXRoJy4KK1NvbHV0aW9uOiAgIE1ha2UgYSBjb3B5IG9mICdydW50aW1lcGF0aCcgd2hlbiBsb29waW5nIG92ZXIgdGhlIG1hdGNoZXMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuM2IuMDE1CitQcm9ibGVtOiAgICBHZXQgbGFsbG9jKDApIGVycm9yIHdoZW4gdXNpbmcgInAiIGluIFZpc3VhbCBtb2RlIHdoaWxlCisJICAgICdjbGlwYm9hcmQnIGNvbnRhaW5zICJhdXRvc2VsZWN0LHVubmFtZWQiLiAoTWFyayBXYWdvbm5lcikKK1NvbHV0aW9uOiAgIEF2b2lkIGFsbG9jYXRpbmcgemVybyBieXRlcy4gIE9idGFpbiB0aGUgY2xpcGJvYXJkIHdoZW4gbmVjZXNzYXJ5LgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4zYi4wMTYKK1Byb2JsZW06ICAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyB1c2VkICJ4IiBkb2Vzbid0IGRlbGV0ZSB0aGUgbGFzdCBjaGFyYWN0ZXIKKwkgICAgb2YgYSBsaW5lIHRoYXQgaGFzIGFzIG1hbnkgY2hhcmFjdGVycyBhcyAnY29sdW1ucycuIChZYWtvdiBMZXJuZXIpCitTb2x1dGlvbjogICBXaGVuIHRoZSBjdXJzb3IgaXNuJ3QgbW92ZWQgbGV0IG9uZXJpZ2h0KCkgcmV0dXJuIEZBSUwuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4zYi4wMTcKK1Byb2JsZW06ICAgIFdpbjMyOiAidmltIC0tcmVtb3RlLXdhaXQiIGRvZXNuJ3QgZXhpdCB3aGVuIHRoZSBzZXJ2ZXIgZmluaXNoZWQKKwkgICAgZWRpdGluZyB0aGUgZmlsZS4gKERhdmlkIEZpc2hidXJuKQorU29sdXRpb246ICAgSW4gdGhlIHJyaGVscGVyIHBsdWdpbiBjaGFuZ2UgYmFja3NsYXNoZXMgdG8gZm9yd2FyZCBzbGFzaGVzIGFuZAorCSAgICBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9ycmhlbHBlci52aW0KKworUGF0Y2ggNi4zYi4wMTgKK1Byb2JsZW06ICAgIFRoZSBsaXN0IG9mIGhlbHAgZmlsZXMgaW4gdGhlICJsb2NhbCBhZGRpdGlvbnMiIHRhYmxlIGRvZXNuJ3QKKwkgICAgcmVjb2duaXplIHV0Zi04IGVuY29kaW5nLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorU29sdXRpb246ICAgUmVjb2duaXplIHV0Zi04IGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4zYi4wMTkKK1Byb2JsZW06ICAgIFdoZW4gJFZJTVJVTlRJTUUgaXMgbm90IGEgZnVsbCBwYXRoIG5hbWUgdGhlICJsb2NhbCBhZGRpdGlvbnMiCisJICAgIHRhYmxlIGxpc3RzIGFsbCB0aGUgaGVscCBmaWxlcy4KK1NvbHV0aW9uOiAgIFVzZSBmdWxscGF0aGNtcCgpIGluc3RlYWQgb2YgZm5hbWVjbXAoKSB0byBjb21wYXJlIHRoZSBkaXJlY3RvcnkKKwkgICAgbmFtZXMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4zYi4wMjAKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgQ1RSTC1eIHdoZW4gZW50ZXJpbmcgYSBzZWFyY2ggc3RyaW5nLCB0aGUgaXRlbSBpbiB0aGUKKwkgICAgc3RhdHVzbGluZSB0aGF0IGluZGljYXRlcyB0aGUga2V5bWFwIGlzIG5vdCB1cGRhdGVkLiAoSWx5YQorCSAgICBEb2dvbGF6a3kpCitTb2x1dGlvbjogICBNYXJrIHRoZSBzdGF0dXNsaW5lcyBmb3IgdXBkYXRpbmcuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDYuM2IuMDIxCitQcm9ibGVtOiAgICBUaGUgc3dhcGZpbGUgaXMgbm90IHJlYWRhYmxlIGZvciBvdGhlcnMsIHRoZSBBVFRFTlRJT04gcHJvbXB0IGRvZXMKKwkgICAgbm90IHNob3cgYWxsIGluZm8gd2hlbiBzb21lb25lIGVsc2UgaXMgZWRpdGluZyB0aGUgc2FtZSBmaWxlLgorCSAgICAoTWFyY2VsIFN2aXRhbHNreSkKK1NvbHV0aW9uOiAgIFVzZSB0aGUgcHJvdGVjdGlvbiBvZiBvcmlnaW5hbCBmaWxlIGZvciB0aGUgc3dhcGZpbGUgYW5kIHNldCBpdAorCSAgICBhZnRlciBjcmVhdGluZyB0aGUgc3dhcGZpbGUuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjNiLjAyMgorUHJvYmxlbTogICAgVXNpbmcgIjR2IiB0byBzZWxlY3QgZm91ciB0aW1lcyB0aGUgb2xkIFZpc3VhbCBhcmVhIG1heSBwdXQgdGhlCisJICAgIGN1cnNvciBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbGluZS4gKEplbnMgUGF1bHVzKQorU29sdXRpb246ICAgQ29ycmVjdCB0aGUgY3Vyc29yIGNvbHVtbi4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuM2IuMDIzCitQcm9ibGVtOiAgICBXaGVuICIzZGlwIiBzdGFydHMgaW4gYW4gZW1wdHkgbGluZSwgd2hpdGUgbGluZXMgYWZ0ZXIgdGhlCisJICAgIG5vbi13aGl0ZSBsaW5lcyBhcmUgbm90IGRlbGV0ZWQuIChKZW5zIFBhdWx1cykKK1NvbHV0aW9uOiAgIEluY2x1ZGUgdGhlIHdoaXRlIGxpbmVzLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4zYi4wMjQKK1Byb2JsZW06ICAgICIyZGF3IiBkb2VzIG5vdCBkZWxldGUgbGVhZGluZyB3aGl0ZSBzcGFjZSBsaWtlICJkYXciIGRvZXMuICAoSmVucworCSAgICBQYXVsdXMpCitTb2x1dGlvbjogICBJbmNsdWRlIHRoZSB3aGl0ZSBzcGFjZSB3aGVuIGEgY291bnQgaXMgdXNlZC4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuM2IuMDI1CitQcm9ibGVtOiAgICBQZXJjZW50YWdlIGluIHJ1bGVyIGlzbid0IHVwZGF0ZWQgd2hlbiBhIGxpbmUgaXMgZGVsZXRlZC4gKEplbnMKKwkgICAgUGF1bHVzKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgY2hhbmdlIGluIGxpbmUgY291bnQgd2hlbiBkZWNpZGluZyB0byB1cGRhdGUgdGhlIHJ1bGVyLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMsIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4zYi4wMjYKK1Byb2JsZW06ICAgIFdoZW4gc2VsZWN0aW5nICJhYm9ydCIgYXQgdGhlIEFUVEVOVElPTiBwcm9tcHQgZm9yIGEgZmlsZSB0aGF0IGlzCisJICAgIGFscmVhZHkgYmVpbmcgZWRpdGVkIFZpbSBjcmFzaGVzLgorU29sdXRpb246ICAgRG9uJ3QgYWJvcnQgY3JlYXRpbmcgYSBuZXcgYnVmZmVyIHdoZW4gd2UgcmVhbGx5IG5lZWQgaXQuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuM2IuMDI3CitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiBlbmFibGluZyB0aGUgbWVudSBpbiBhIG1heGltaXplZCB3aW5kb3csIFZpbSB1c2VzIG1vcmUKKwkgICAgbGluZXMgdGhhbiB3aGF0IGlzIHJvb20gZm9yLiAoU2hpemh1IFBhbikKK1NvbHV0aW9uOiAgIFdoZW4gZGVjaWRpbmcgdG8gY2FsbCBzaGVsbF9yZXNpemVkKCksIGFsc28gY29tcGFyZSB0aGUgdGV4dCBhcmVhCisJICAgIHNpemUgd2l0aCBSb3dzIGFuZCBDb2x1bW5zLCBub3QganVzdCB3aXRoIHNjcmVlbl9Sb3dzIGFuZAorCSAgICBzY3JlZW5fQ29sdW1ucy4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuM2IuMDI4CitQcm9ibGVtOiAgICBXaGVuIGluIGRpZmYgbW9kZSwgc2V0dGluZyAncmlnaHRsZWZ0JyBjYXVzZXMgYSBjcmFzaC4gKEVkZGluZSkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBsYXN0IGNvbHVtbiBkaWZmZXJlbnRseSB3aGVuICdyaWdodGxlZnQnIGlzIHNldC4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuM2IuMDI5CitQcm9ibGVtOiAgICBXaW4zMjogd2FybmluZyBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KK1NvbHV0aW9uOiAgIEluaXRpYWxpemUgdG8gemVyby4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4zYi4wMzAKK1Byb2JsZW06ICAgIEFmdGVyIFZpc3VhbGx5IHNlbGVjdGluZyBmb3VyIGNoYXJhY3RlcnMsIGNoYW5naW5nIGl0IHRvIG90aGVyCisJICAgIHRleHQsIFZpc3VhbGx5IHNlbGVjdGluZyBhbmQgeWFua2luZyB0d28gY2hhcmFjdGVyczogIi4iIGNoYW5nZXMKKwkgICAgZm91ciBjaGFyYWN0ZXJzLCBhbm90aGVyICIuIiBjaGFuZ2VzIHR3byBjaGFyYWN0ZXJzLiAoUm9iZXJ0IFdlYmIpCitTb2x1dGlvbjogICBEb24ndCBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgVmlzdWFsIGFyZWEgd2hlbiByZWRvIGlzIGFjdGl2ZS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92ZXJzaW9uNy50eHQgYi9ydW50aW1lL2RvYy92ZXJzaW9uNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiZmY5YQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dApAQCAtMCwwICsxLDg0IEBACisqdmVyc2lvbjcudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA3CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworV2VsY29tZSB0byBWaW0gNyEgIEEgbGFyZ2UgbnVtYmVyIG9mIGZlYXR1cmVzIGhhcyBiZWVuIGFkZGVkLiAgVGhpcyBmaWxlCittZW50aW9ucyBhbGwgdGhlIG5ldyBpdGVtcywgY2hhbmdlcyB0byBleGlzdGluZyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzCitjb21wYXJlZCB0byBWaW0gNi54LgorCitTZWUgfHZpX2RpZmYudHh0fCBmb3IgYW4gb3ZlcnZpZXcgb2YgZGlmZmVyZW5jZXMgYmV0d2VlbiBWaSBhbmQgVmltIDcuMC4KK1NlZSB8dmVyc2lvbjQudHh0fCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gMy54IGFuZCBWaW0gNC54LgorU2VlIHx2ZXJzaW9uNS50eHR8IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSA0LnggYW5kIFZpbSA1LnguCitTZWUgfHZlcnNpb242LnR4dHwgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gVmltIDUueCBhbmQgVmltIDYueC4KKworSU5DT01QQVRJQkxFIENIQU5HRVMJCQl8aW5jb21wYXRpYmxlLTd8CisKK05FVyBGRUFUVVJFUwkJCQl8bmV3LTd8CisKK05ldyBkYXRhIHR5cGVzCQkJCXxuZXctZGF0YS10eXBlc3wKK1ZhcmlvdXMgbmV3IGl0ZW1zCQkJfG5ldy1pdGVtcy03fAorCitJTVBST1ZFTUVOVFMJCQkJfGltcHJvdmVtZW50cy03fAorCitDT01QSUxFIFRJTUUgQ0hBTkdFUwkJCXxjb21waWxlLWNoYW5nZXMtN3wKKworQlVHIEZJWEVTCQkJCXxidWctZml4ZXMtN3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJTkNPTVBBVElCTEUgQ0hBTkdFUwkJCQkqaW5jb21wYXRpYmxlLTcqCisKK1RoZXNlIGNoYW5nZXMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIHJlbGVhc2VzLiAgQ2hlY2sgdGhpcyBsaXN0IGlmIHlvdQorcnVuIGludG8gYSBwcm9ibGVtIHdoZW4gdXBncmFkaW5nIGZyb20gVmltIDYueCB0byA3LjAKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05FVyBGRUFUVVJFUwkJCQkJCSpuZXctNyoKKworTmV3IGRhdGEgdHlwZXMJCQkJCQkqbmV3LWRhdGEtdHlwZXMqCistLS0tLS0tLS0tLS0tLQorCitJbiBWaW0gc2NyaXB0cyB0aGUgZm9sbG93aW5nIHR5cGVzIGhhdmUgYmVlbiBhZGRlZDoKKworCWxpc3QJCW9yZGVyZWQgbGlzdCBvZiBpdGVtcworCWRpY3Rpb25hcnkJYXNzb2NpYXRpdmUgYXJyYXkgb2YgaXRlbXMKKwlmdW5jdGlvbglyZWZlcmVuY2UgdG8gYSBmdW5jdGlvbgorCitNYW55IGZ1bmN0aW9ucyBhbmQgY29tbWFuZHMgaGF2ZSBiZWVuIGFkZGVkIHRvIHN1cHBvcnQgdGhlIG5ldyB0eXBlcy4KKworCitWYXJpb3VzIG5ldyBpdGVtcwkJCQkJKm5ldy1pdGVtcy03KgorLS0tLS0tLS0tLS0tLS0tLS0KKworTm9ybWFsIG1vZGUgY29tbWFuZHM6IH4KKworCitPcHRpb25zOiB+CisKKworRXggY29tbWFuZHM6IH4KKworCitOZXcgZnVuY3Rpb25zOiB+CisKKworTmV3IGF1dG9jb21tYW5kIGV2ZW50czogfgorCisKK05ldyBTeW50YXggZmlsZXM6IH4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lNUFJPVkVNRU5UUwkJCQkJCSppbXByb3ZlbWVudHMtNyoKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NPTVBJTEUgVElNRSBDSEFOR0VTCQkJCQkqY29tcGlsZS1jaGFuZ2VzLTcqCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitCVUcgRklYRVMJCQkJCQkqYnVnLWZpeGVzLTcqCisKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZpX2RpZmYudHh0IGIvcnVudGltZS9kb2MvdmlfZGlmZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0N2RiNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZpX2RpZmYudHh0CkBAIC0wLDAgKzEsODg0IEBACisqdmlfZGlmZi50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA4CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworRGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gYW5kIFZpCQkJCSp2aS1kaWZmZXJlbmNlcyoKKworVGhyb3VnaG91dCB0aGUgaGVscCBmaWxlcyBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSBhbmQgVmkvRXggYXJlIGdpdmVuIGluCitjdXJseSBicmFjZXMsIGxpa2UgIntub3QgaW4gVml9Ii4gIFRoaXMgZmlsZSBvbmx5IGxpc3RzIHdoYXQgaGFzIG5vdCBiZWVuCittZW50aW9uZWQgaW4gb3RoZXIgZmlsZXMgYW5kIGdpdmVzIGFuIG92ZXJ2aWV3LgorCitWaW0gaXMgbW9zdGx5IFBPU0lYIDEwMDMuMi0xIGNvbXBsaWFudC4gIFRoZSBvbmx5IGNvbW1hbmQga25vd24gdG8gYmUgbWlzc2luZworaXMgIjpvcGVuIi4gIFRoZXJlIGFyZSBwcm9iYWJseSBhIGxvdCBvZiBzbWFsbCBkaWZmZXJlbmNlcyAoZWl0aGVyIGJlY2F1c2UgVmltCitpcyBtaXNzaW5nIHNvbWV0aGluZyBvciBiZWNhdXNlIFBvc2l4IGlzIGJlc2lkZSB0aGUgbWFyaykuCisKKzEuIE1pc3NpbmcgY29tbWFuZHMJCQl8bWlzc2luZy1jb21tYW5kc3wKKzIuIE1pc3Npbmcgb3B0aW9ucwkJCXxtaXNzaW5nLW9wdGlvbnN8CiszLiBMaW1pdHMJCQkJfGxpbWl0c3wKKzQuIFRoZSBtb3N0IGludGVyZXN0aW5nIGFkZGl0aW9ucwl8dmltLWFkZGl0aW9uc3wKKzUuIE90aGVyIHZpbSBmZWF0dXJlcwkJCXxvdGhlci1mZWF0dXJlc3wKKzYuIENvbW1hbmQtbGluZSBhcmd1bWVudHMJCXxjbWRsaW5lLWFyZ3VtZW50c3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBNaXNzaW5nIGNvbW1hbmRzCQkJCQkqbWlzc2luZy1jb21tYW5kcyoKKworVGhpcyBjb21tYW5kIGlzIGluIFZpLCBidXQgbm90IGluIFZpbToKKworOm9bcGVuXQkJCXtWaTogc3RhcnQgZWRpdGluZyBpbiBvcGVuIG1vZGV9ICo6byogKjpvcCogKjpvcGVuKgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIE1pc3Npbmcgb3B0aW9ucwkJCQkJKm1pc3Npbmctb3B0aW9ucyoKKworVGhlc2Ugb3B0aW9ucyBhcmUgaW4gdGhlIFVuaXggVmksIGJ1dCBub3QgaW4gVmltLiAgSWYgeW91IHRyeSB0byBzZXQgb25lIG9mCit0aGVtIHlvdSB3b24ndCBnZXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IHRoZSB2YWx1ZSBpcyBub3QgdXNlZCBhbmQgY2Fubm90IGJlCitwcmludGVkLgorCithdXRvcHJpbnQgKGFwKQkJYm9vbGVhbgkoZGVmYXVsdCBvbikJCSonYXV0b3ByaW50JyogKidhcCcqCitiZWF1dGlmeSAoYmYpCQlib29sZWFuCShkZWZhdWx0IG9mZikJCSonYmVhdXRpZnknKiAqJ2JmJyoKK2ZsYXNoIChmbCkJCWJvb2xlYW4JKGRlZmF1bHQgPz8pCQkqJ2ZsYXNoJyogKidmbCcqCitncmFwaGljIChncikJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQkJKidncmFwaGljJyogKidncicqCitoYXJkdGFicyAoaHQpCQludW1iZXIJKGRlZmF1bHQgOCkJCSonaGFyZHRhYnMnKiAqJ2h0JyoKKwludW1iZXIgb2Ygc3BhY2VzIHRoYXQgYSA8VGFiPiBtb3ZlcyBvbiB0aGUgZGlzcGxheQorbWVzZwkJCWJvb2xlYW4JKGRlZmF1bHQgb24pCQkqJ21lc2cnKgorbm92aWNlCQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCQkqJ25vdmljZScqCitvcGVuCQkJYm9vbGVhbgkoZGVmYXVsdCBvbikJCSonb3BlbicqCitvcHRpbWl6ZSAob3ApCQlib29sZWFuCShkZWZhdWx0IG9mZikJCSonb3B0aW1pemUnKiAqJ29wJyoKK3Byb21wdAkJCWJvb2xlYW4JKGRlZmF1bHQgb24pCQkqJ3Byb21wdCcqCityZWRyYXcJCQlib29sZWFuCShkZWZhdWx0IG9mZikJCSoncmVkcmF3JyoKK3Nsb3dvcGVuIChzbG93KQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCQkqJ3Nsb3dvcGVuJyogKidzbG93JyoKK3NvdXJjZWFueQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCQkqJ3NvdXJjZWFueScqCit3aW5kb3cgKHdpKQkJbnVtYmVyCShkZWZhdWx0IDIzKQkJKid3aW5kb3cnKiAqJ3dpJyoKK3czMDAJCQludW1iZXIJKGRlZmF1bHQgMjMpCQkqJ3czMDAnKgordzEyMDAJCQludW1iZXIJKGRlZmF1bHQgMjMpCQkqJ3cxMjAwJyoKK3c5NjAwCQkJbnVtYmVyCShkZWZhdWx0IDIzKQkJKid3OTYwMCcqCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gTGltaXRzCQkJCQkJKmxpbWl0cyoKKworVmltIGhhcyBvbmx5IGEgZmV3IGxpbWl0cyBmb3IgdGhlIGZpbGVzIHRoYXQgY2FuIGJlIGVkaXRlZCB7Vmk6IGNhbiBub3QgaGFuZGxlCis8TnVsPiBjaGFyYWN0ZXJzIGFuZCBjaGFyYWN0ZXJzIGFib3ZlIDEyOCwgaGFzIGxpbWl0ZWQgbGluZSBsZW5ndGgsIG1hbnkgb3RoZXIKK2xpbWl0c30uCisJCQkJCQkJKkUzNDAqCitNYXhpbXVtIGxpbmUgbGVuZ3RoCSAgIE9uIG1hY2hpbmVzIHdpdGggMTYtYml0IGludHMgKEFtaWdhIGFuZCBNUy1ET1MgcmVhbAorCQkJICAgbW9kZSk6IDMyNzY3LCBvdGhlcndpc2UgMjE0NzQ4MzY0NyBjaGFyYWN0ZXJzLgorCQkJICAgTG9uZ2VyIGxpbmVzIGFyZSBzcGxpdC4KK01heGltdW0gbnVtYmVyIG9mIGxpbmVzCSAgIDIxNDc0ODM2NDcgbGluZXMuCitNYXhpbXVtIGZpbGUgc2l6ZQkgICAyMTQ3NDgzNjQ3IGJ5dGVzICgyIEdieXRlKSB3aGVuIGEgbG9uZyBpbnRlZ2VyIGlzCisJCQkgICAzMiBiaXRzLiAgTXVjaCBtb3JlIGZvciA2NCBiaXQgbG9uZ3MuICBBbHNvIGxpbWl0ZWQKKwkJCSAgIGJ5IGF2YWlsYWJsZSBkaXNrIHNwYWNlIGZvciB0aGUgfHN3YXAtZmlsZXwuCisJCQkJCQkJKkU3NSoKK0xlbmd0aCBvZiBhIGZpbGUgcGF0aAkgICBVbml4IGFuZCBXaW4zMjogMTAyNCBjaGFyYWN0ZXJzLCBvdGhlcndpc2UgMjU2CisJCQkgICBjaGFyYWN0ZXJzIChvciBhcyBtdWNoIGFzIHRoZSBzeXN0ZW0gc3VwcG9ydHMpLgorTGVuZ3RoIG9mIGFuIGV4cGFuZGVkIHN0cmluZyBvcHRpb24KKwkJCSAgIFVuaXggYW5kIFdpbjMyOiAxMDI0IGNoYXJhY3RlcnMsIG90aGVyd2lzZSAyNTYKKwkJCSAgIGNoYXJhY3RlcnMKK01heGltdW0gZGlzcGxheSB3aWR0aAkgICBVbml4IGFuZCBXaW4zMjogMTAyNCBjaGFyYWN0ZXJzLCBvdGhlcndpc2UgMjU1CisJCQkgICBjaGFyYWN0ZXJzCitNYXhpbXVtIGxocyBvZiBhIG1hcHBpbmcgICA1MCBjaGFyYWN0ZXJzLgorTnVtYmVyIG9mIGhpZ2hsaWdodGluZyBkaWZmZXJlbnQgdHlwZXM6IDIyMworCitJbmZvcm1hdGlvbiBmb3IgdW5kbyBhbmQgdGV4dCBpbiByZWdpc3RlcnMgaXMga2VwdCBpbiBtZW1vcnksIHRodXMgd2hlbiBtYWtpbmcKKyhiaWcpIGNoYW5nZXMgdGhlIGFtb3VudCBvZiAodmlydHVhbCkgbWVtb3J5IGF2YWlsYWJsZSBsaW1pdHMgdGhlIG51bWJlciBvZgordW5kbyBsZXZlbHMgYW5kIHRoZSB0ZXh0IHRoYXQgY2FuIGJlIGtlcHQgaW4gcmVnaXN0ZXJzLiAgT3RoZXIgdGhpbmdzIGFyZSBhbHNvCitrZXB0IGluIG1lbW9yeTogIENvbW1hbmQtbGluZSBoaXN0b3J5LCBlcnJvciBtZXNzYWdlcyBmb3IgUXVpY2tmaXggbW9kZSwgZXRjLgorCitNZW1vcnkgdXNhZ2UgbGltaXRzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBvcHRpb24gJ21heG1lbScgKCdtbScpIGlzIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIG1lbW9yeSB1c2VkIGZvciBvbmUKK2J1ZmZlciAoaW4ga2lsb2J5dGVzKS4gICdtYXhtZW10b3QnIGlzIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIG1lbW9yeSB1c2VkIGZvcgorYWxsIGJ1ZmZlcnMgKGluIGtpbG9ieXRlcykuICBUaGUgZGVmYXVsdHMgZGVwZW5kIG9uIHRoZSBzeXN0ZW0gdXNlZC4gIEZvciB0aGUKK0FtaWdhIGFuZCBNUy1ET1MsICdtYXhtZW10b3QnIGlzIHNldCBkZXBlbmRpbmcgb24gdGhlIGFtb3VudCBvZiBtZW1vcnkKK2F2YWlsYWJsZS4gIElmIHlvdSBkb24ndCBsaWtlIFZpbSB0byBzd2FwIHRvIGEgZmlsZSwgc2V0ICdtYXhtZW0nIGFuZAorJ21heG1lbXRvdCcgdG8gYSB2ZXJ5IGxhcmdlIHZhbHVlLiAgVGhlIHN3YXAgZmlsZSB3aWxsIHRoZW4gb25seSBiZSB1c2VkIGZvcgorcmVjb3ZlcnkuICBJZiB5b3UgZG9uJ3Qgd2FudCBhIHN3YXAgZmlsZSBhdCBhbGwsIHNldCAndXBkYXRlY291bnQnIHRvIDAsIG9yCit1c2UgdGhlICItbiIgYXJndW1lbnQgd2hlbiBzdGFydGluZyBWaW0uICBOb3RlIHRoYXQgdGhlICdtYXhtZW0nIG9wdGlvbiBpcworb25seSB1c2VkIHdoZW4gYSBidWZmZXIgaXMgY3JlYXRlZC4gIENoYW5naW5nIHRoaXMgb3B0aW9uIGRvZXMgbm90IGFmZmVjdAorYnVmZmVycyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGxvYWRlZC4gIFRodXMgeW91IGNhbiBzZXQgaXQgdG8gZGlmZmVyZW50Cit2YWx1ZXMgZm9yIGRpZmZlcmVudCBmaWxlcy4gICdtYXhtZW10b3QnIHdvcmtzIGFsd2F5cy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBUaGUgbW9zdCBpbnRlcmVzdGluZyBhZGRpdGlvbnMJCQkqdmltLWFkZGl0aW9ucyoKKworVmkgY29tcGF0aWJpbGl0eS4JCQkJCXwnY29tcGF0aWJsZSd8CisJQWx0aG91Z2ggVmltIGlzIDk5JSBWaSBjb21wYXRpYmxlLCBzb21lIHRoaW5ncyBpbiBWaSBjYW4gYmUKKwljb25zaWRlcmVkIHRvIGJlIGEgYnVnLCBvciBhdCBsZWFzdCBuZWVkIGltcHJvdmVtZW50LiAgQnV0IHN0aWxsLCBWaW0KKwlzdGFydHMgaW4gYSBtb2RlIHdoaWNoIGJlaGF2ZXMgbGlrZSB0aGUgInJlYWwiIFZpIGFzIG11Y2ggYXMgcG9zc2libGUuCisJVG8gbWFrZSBWaW0gYmVoYXZlIGEgbGl0dGxlIGJpdCBiZXR0ZXIsIHRyeSByZXNldHRpbmcgdGhlICdjb21wYXRpYmxlJworCW9wdGlvbjoKKwkJOnNldCBub2NvbXBhdGlibGUKKwlPciBzdGFydCBWaW0gd2l0aCB0aGUgIi1OIiBhcmd1bWVudDoKKwkJdmltIC1OCisJVGhpcyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgaWYgeW91IGhhdmUgYSAudmltcmMgZmlsZS4gIFNlZSB8c3RhcnR1cHwuCisJVGhlICdjcG9wdGlvbnMnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzZXQgVmkgY29tcGF0aWJpbGl0eSBvbi9vZmYgZm9yCisJYSBudW1iZXIgb2Ygc3BlY2lmaWMgaXRlbXMuCisKK1N1cHBvcnQgZm9yIGRpZmZlcmVudCBzeXN0ZW1zLgorCVZpbSBjYW4gYmUgdXNlZCBvbjoKKwktIEFsbCBVbml4IHN5c3RlbXMgKGl0IHdvcmtzIG9uIGFsbCBzeXN0ZW1zIGl0IHdhcyB0ZXN0ZWQgb24sIGFsdGhvdWdoCisJICB0aGUgR1VJIGFuZCBQZXJsIGludGVyZmFjZSBtYXkgbm90IHdvcmsgZXZlcnl3aGVyZSkuCisJLSBBbWlnYSAoNTAwLCAxMDAwLCAxMjAwLCAyMDAwLCAzMDAwLCA0MDAwLCAuLi4pLgorCS0gTVMtRE9TIGluIHJlYWwtbW9kZSAobm8gYWRkaXRpb25hbCBkcml2ZXJzIHJlcXVpcmVkKS4KKwktIEluIHByb3RlY3RlZCBtb2RlIG9uIFdpbmRvd3MgMy4xIGFuZCBNUy1ET1MgKERQTUkgZHJpdmVyIHJlcXVpcmVkKS4KKwktIFdpbmRvd3MgOTUgYW5kIFdpbmRvd3MgTlQsIHdpdGggc3VwcG9ydCBmb3IgbG9uZyBmaWxlIG5hbWVzLgorCS0gT1MvMiAobmVlZHMgZW14LmRsbCkKKwktIEF0YXJpIE1pTlQKKwktIFZNUworCS0gQmVPUworCS0gTWFjaW50b3NoCisJLSBSaXNjIE9TCisJLSBJQk0gT1MvMzkwCisKK011bHRpIGxldmVsIHVuZG8uCQkJCQl8dW5kb3wKKwkndScgZ29lcyBiYWNrd2FyZCBpbiB0aW1lLCAnQ1RSTC1SJyBnb2VzIGZvcndhcmQgYWdhaW4uICBTZXQgb3B0aW9uCisJJ3VuZG9sZXZlbHMnIHRvIHRoZSBudW1iZXIgb2YgY2hhbmdlcyB0byBiZSByZW1lbWJlcmVkIChkZWZhdWx0IDEwMDApLgorCVNldCAndW5kb2xldmVscycgdG8gMCBmb3IgYSB2aS1jb21wYXRpYmxlIG9uZSBsZXZlbCB1bmRvLiBTZXQgaXQgdG8KKwktMSBmb3Igbm8gdW5kbyBhdCBhbGwuCisKKwlXaGVuIGFsbCBjaGFuZ2VzIGluIGEgYnVmZmVyIGhhdmUgYmVlbiB1bmRvbmUsIHRoZSBidWZmZXIgaXMgbm90CisJY29uc2lkZXJlZCBjaGFuZ2VkIGFueW1vcmUuICBZb3UgY2FuIGV4aXQgaXQgd2l0aCA6cSwgd2l0aG91dCA8IT4uCisKK0dyYXBoaWNhbCBVc2VyIEludGVyZmFjZSAoR1VJKQkJCQl8Z3VpfAorCUluY2x1ZGVkIHN1cHBvcnQgZm9yIEdVSTogbWVudSdzLCBtb3VzZSwgc2Nyb2xsYmFycywgZXRjLiAgWW91IGNhbgorCWRlZmluZSB5b3VyIG93biBtZW51cy4gIEJldHRlciBzdXBwb3J0IGZvciBDVFJML1NISUZUL0FMVCBrZXlzIGluCisJY29tYmluYXRpb24gd2l0aCBzcGVjaWFsIGtleXMgYW5kIG1vdXNlLiAgU3VwcG9ydGVkIGZvciB2YXJpb3VzCisJcGxhdGZvcm1zLCBzdWNoIGFzIFgxMSAod2l0aCBNb3RpZiBhbmQgQXRoZW5hIGludGVyZmFjZXMpLCBHVEssIFdpbjMyCisJKFdpbmRvd3MgOTUgYW5kIGxhdGVyKSwgQmVPUywgQW1pZ2EgYW5kIE1hY2ludG9zaC4KKworTXVsdGlwbGUgd2luZG93cyBhbmQgYnVmZmVycy4JCQkJfHdpbmRvd3MudHh0fAorCVZpbSBjYW4gc3BsaXQgdGhlIHNjcmVlbiBpbnRvIHNldmVyYWwgd2luZG93cywgZWFjaCBlZGl0aW5nIGEKKwlkaWZmZXJlbnQgYnVmZmVyIG9yIHRoZSBzYW1lIGJ1ZmZlciBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4gIEJ1ZmZlcnMKKwljYW4gc3RpbGwgYmUgbG9hZGVkIChhbmQgY2hhbmdlZCkgYnV0IG5vdCBkaXNwbGF5ZWQgaW4gYSB3aW5kb3cuICBUaGlzCisJaXMgY2FsbGVkIGEgaGlkZGVuIGJ1ZmZlci4gIE1hbnkgY29tbWFuZHMgYW5kIG9wdGlvbnMgaGF2ZSBiZWVuIGFkZGVkCisJZm9yIHRoaXMgZmFjaWxpdHkuCisKK1N5bnRheCBoaWdobGlnaHRpbmcuCQkJCQl8OnN5bnRheHwKKwlWaW0gY2FuIGhpZ2hsaWdodCBrZXl3b3JkcywgcGF0dGVybnMgYW5kIG90aGVyIHRoaW5ncy4gIFRoaXMgaXMKKwlkZWZpbmVkIGJ5IGEgbnVtYmVyIG9mICI6c3ludGF4IiBjb21tYW5kcywgYW5kIGNhbiBiZSBtYWRlIHRvCisJaGlnaGxpZ2h0IG1vc3QgbGFuZ3VhZ2VzIGFuZCBmaWxlIHR5cGVzLiAgQSBudW1iZXIgb2YgZmlsZXMgYXJlCisJaW5jbHVkZWQgZm9yIGhpZ2hsaWdodGluZyB0aGUgbW9zdCBjb21tb24gbGFuZ3VhZ2VzLCBsaWtlIEMsIEMrKywKKwlKYXZhLCBQYXNjYWwsIE1ha2VmaWxlcywgc2hlbGwgc2NyaXB0cywgZXRjLiAgVGhlIGNvbG9ycyB1c2VkIGZvcgorCWhpZ2hsaWdodGluZyBjYW4gYmUgZGVmaW5lZCBmb3Igb3JkaW5hcnkgdGVybWluYWxzLCBjb2xvciB0ZXJtaW5hbHMKKwlhbmQgdGhlIEdVSSB3aXRoIHRoZSAiOmhpZ2hsaWdodCIgY29tbWFuZC4KKworRm9sZGluZwkJCQkJCQl8Zm9sZGluZ3wKKwlBIHJhbmdlIG9mIGxpbmVzIGNhbiBiZSBzaG93biBhcyBvbmUgImZvbGRlZCIgbGluZS4gIFRoaXMgYWxsb3dzCisJb3ZlcnZpZXdpbmcgYSBmaWxlIGFuZCBtb3ZpbmcgYmxvY2tzIG9mIHRleHQgYXJvdW5kIHF1aWNrbHkuCisJRm9sZHMgY2FuIGJlIGNyZWF0ZWQgbWFudWFsbHksIGZyb20gdGhlIHN5bnRheCBvZiB0aGUgZmlsZSwgYnkgaW5kZW50LAorCWV0Yy4KKworUGx1Z2lucwkJCQkJCQl8YWRkLXBsdWdpbnwKKwlUaGUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgZXh0ZW5kZWQgYnkgZHJvcHBpbmcgYSBwbHVnaW4gZmlsZSBpbiB0aGUKKwlyaWdodCBkaXJlY3RvcnkuICBUaGF0J3MgYW4gZWFzeSB3YXkgdG8gc3RhcnQgdXNpbmcgVmltIHNjcmlwdHMKKwl3cml0dGVuIGJ5IG90aGVycy4gIFBsdWdpbnMgY2FuIGJlIGZvciBhbGwga2luZCBvZiBmaWxlcywgb3IKKwlzcGVjaWZpY2FsbHkgZm9yIGEgZmlsZXR5cGUuCisKK1JlcGVhdCBhIHNlcmllcyBvZiBjb21tYW5kcy4JCQkJfHF8CisJInF7Y30iIHN0YXJ0cyByZWNvcmRpbmcgdHlwZWQgY2hhcmFjdGVycyBpbnRvIG5hbWVkIHJlZ2lzdGVyIHtjfQorCShhcHBlbmQgdG8gdGhlIHJlZ2lzdGVyIGlmIHJlZ2lzdGVyIG5hbWUgaXMgdXBwZXJjYXNlKS4gIEEgc3Vic2VxdWVudAorCSJxIiBzdG9wcyByZWNvcmRpbmcuICBUaGUgcmVnaXN0ZXIgY2FuIHRoZW4gYmUgZXhlY3V0ZWQgd2l0aCB0aGUKKwkiQHtjfSIgY29tbWFuZC4gIFRoaXMgaXMgdmVyeSB1c2VmdWwgdG8gcmVwZWF0IGEgY29tcGxleCBhY3Rpb24uCisKK0ZsZXhpYmxlIGluc2VydCBtb2RlLgkJCQkJfGlucy1zcGVjaWFsLXNwZWNpYWx8CisJVGhlIGFycm93IGtleXMgY2FuIGJlIHVzZWQgaW4gaW5zZXJ0IG1vZGUgdG8gbW92ZSBhcm91bmQgaW4gdGhlIGZpbGUuCisJVGhpcyBicmVha3MgdGhlIGluc2VydCBpbiB0d28gcGFydHMgYXMgZmFyIGFzIHVuZG8gYW5kIHJlZG8gaXMKKwljb25jZXJuZWQuCisKKwlDVFJMLU8gY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSBhIHNpbmdsZSBjb21tYW5kLW1vZGUgY29tbWFuZC4gIFRoaXMgaXMKKwlhbG1vc3QgdGhlIHNhbWUgYXMgaGl0dGluZyA8RXNjPiwgdHlwaW5nIHRoZSBjb21tYW5kIGFuZCBkb2luZyAiYSIuCisKK1Zpc3VhbCBtb2RlLgkJCQkJCXxWaXN1YWwtbW9kZXwKKwlWaXN1YWwgY2FuIGJlIHVzZWQgdG8gZmlyc3QgaGlnaGxpZ2h0IGEgcGllY2Ugb2YgdGV4dCBhbmQgdGhlbiBnaXZlIGEKKwljb21tYW5kIHRvIGRvIHNvbWV0aGluZyB3aXRoIGl0LiAgVGhpcyBpcyBhbiAoZWFzeSB0byB1c2UpIGFsdGVybmF0aXZlCisJdG8gZmlyc3QgZ2l2aW5nIHRoZSBvcGVyYXRvciBhbmQgdGhlbiBtb3ZpbmcgdG8gdGhlIGVuZCBvZiB0aGUgdGV4dAorCXRvIGJlIG9wZXJhdGVkIHVwb24uICAidiIgYW5kICJWIiBhcmUgdXNlZCB0byBzdGFydCBWaXN1YWwgbW9kZS4gICJ2IgorCXdvcmtzIG9uIGNoYXJhY3RlcnMgYW5kICdWJyBvbiBsaW5lcy4gIE1vdmUgdGhlIGN1cnNvciB0byBleHRlbmQgdGhlCisJVmlzdWFsIHBhcnQuICBJdCBpcyBzaG93biBoaWdobGlnaHRlZCBvbiB0aGUgc2NyZWVuLiAgQnkgdHlwaW5nICJvIgorCXRoZSBvdGhlciBlbmQgb2YgdGhlIFZpc3VhbCB0ZXh0IGNhbiBiZSBtb3ZlZC4gIFRoZSBWaXN1YWwgdGV4dCBjYW4KKwliZSBhZmZlY3RlZCBieSBhbiBvcGVyYXRvcjoKKwkJZAlkZWxldGUKKwkJYwljaGFuZ2UKKwkJeQl5YW5rCisJCT4gb3IgPAlpbnNlcnQgb3IgZGVsZXRlIGluZGVudAorCQkhCWZpbHRlciB0aHJvdWdoIGV4dGVybmFsIHByb2dyYW0KKwkJPQlmaWx0ZXIgdGhyb3VnaCBpbmRlbnQKKwkJOglzdGFydCAiOiIgY29tbWFuZCBmb3IgdGhlIFZpc3VhbCBsaW5lcy4KKwkJZ3EJZm9ybWF0IHRleHQgdG8gJ3RleHR3aWR0aCcgY29sdW1ucworCQlKCWpvaW4gbGluZXMKKwkJfglzd2FwIGNhc2UKKwkJdQltYWtlIGxvd2VyY2FzZQorCQlVCW1ha2UgdXBwZXJjYXNlCisKK0Jsb2NrIG9wZXJhdG9ycy4JCQkJCXx2aXN1YWwtYmxvY2t8CisJV2l0aCBWaXN1YWwgYSByZWN0YW5ndWxhciBibG9jayBvZiB0ZXh0IGNhbiBiZSBzZWxlY3RlZC4gIFN0YXJ0IFZpc3VhbAorCXdpdGggQ1RSTC1WLiAgVGhlIGJsb2NrIGNhbiBiZSBkZWxldGVkICgiZCIpLCB5YW5rZWQgKCJ5Iikgb3IgaXRzIGNhc2UKKwljYW4gYmUgY2hhbmdlZCAoIn4iLCAidSIgYW5kICJVIikuICBBIGRlbGV0ZWQgb3IgeWFua2VkIGJsb2NrIGNhbiBiZQorCXB1dCBpbnRvIHRoZSB0ZXh0IHdpdGggdGhlICJwIiBhbmQgIlAiIGNvbW1hbmRzLgorCitPbmxpbmUgaGVscCBzeXN0ZW0uCQkJCQl8OmhlbHB8CisJSGVscCBpcyBkaXNwbGF5ZWQgaW4gYSB3aW5kb3cuICBUaGUgdXN1YWwgY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8KKwltb3ZlIGFyb3VuZCwgc2VhcmNoIGZvciBhIHN0cmluZywgZXRjLiAgVGFncyBjYW4gYmUgdXNlZCB0byBqdW1wCisJYXJvdW5kIGluIHRoZSBoZWxwIGZpbGVzLCBqdXN0IGxpa2UgaHlwZXJ0ZXh0IGxpbmtzLiAgVGhlICI6aGVscCIKKwljb21tYW5kIHRha2VzIGFuIGFyZ3VtZW50IHRvIHF1aWNrbHkganVtcCB0byB0aGUgaW5mbyBvbiBhIHN1YmplY3QuCisJPEYxPiBpcyB0aGUgcXVpY2sgYWNjZXNzIHRvIHRoZSBoZWxwIHN5c3RlbS4gIFRoZSBuYW1lIG9mIHRoZSBoZWxwCisJaW5kZXggZmlsZSBjYW4gYmUgc2V0IHdpdGggdGhlICdoZWxwZmlsZScgb3B0aW9uLgorCitDb21tYW5kLWxpbmUgZWRpdGluZyBhbmQgaGlzdG9yeS4JCQl8Y21kbGluZS1lZGl0aW5nfAorCVlvdSBjYW4gaW5zZXJ0IG9yIGRlbGV0ZSBhdCBhbnkgcGxhY2UgaW4gdGhlIGNvbW1hbmQtbGluZSB1c2luZyB0aGUKKwljdXJzb3Iga2V5cy4gIFRoZSByaWdodC9sZWZ0IGN1cnNvciBrZXlzIGNhbiBiZSB1c2VkIHRvIG1vdmUKKwlmb3J3YXJkL2JhY2t3YXJkIG9uZSBjaGFyYWN0ZXIuICBUaGUgc2hpZnRlZCByaWdodC9sZWZ0IGN1cnNvciBrZXlzCisJY2FuIGJlIHVzZWQgdG8gbW92ZSBmb3J3YXJkL2JhY2t3YXJkIG9uZSB3b3JkLiAgQ1RSTC1CL0NUUkwtRSBjYW4gYmUKKwl1c2VkIHRvIGdvIHRvIHRoZSBiZWdpbi9lbmQgb2YgdGhlIGNvbW1hbmQtbGluZS4KKworCQkJCQkJCXxjbWRsaW5lLWhpc3Rvcnl8CisJVGhlIGNvbW1hbmQtbGluZXMgYXJlIHJlbWVtYmVyZWQuICBUaGUgdXAvZG93biBjdXJzb3Iga2V5cyBjYW4gYmUgdXNlZAorCXRvIHJlY2FsbCBwcmV2aW91cyBjb21tYW5kLWxpbmVzLiAgVGhlICdoaXN0b3J5JyBvcHRpb24gY2FuIGJlIHNldCB0bworCXRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCB3aWxsIGJlIHJlbWVtYmVyZWQuICBUaGVyZSBpcyBhIHNlcGFyYXRlCisJaGlzdG9yeSBmb3IgY29tbWFuZHMgYW5kIGZvciBzZWFyY2ggcGF0dGVybnMuCisKK0NvbW1hbmQtbGluZSBjb21wbGV0aW9uLgkJCQl8Y21kbGluZS1jb21wbGV0aW9ufAorCVdoaWxlIGVudGVyaW5nIGEgY29tbWFuZC1saW5lIChvbiB0aGUgYm90dG9tIGxpbmUgb2YgdGhlIHNjcmVlbikKKwk8VGFiPiBjYW4gYmUgdHlwZWQgdG8gY29tcGxldGUKKwkgICB3aGF0CQlleGFtcGxlCQl+CisJLSBjb21tYW5kCTplPFRhYj4KKwktIHRhZwkJOnRhIHNjcjxUYWI+CisJLSBvcHRpb24JOnNldCBzYzxUYWI+CisJLSBvcHRpb24gdmFsdWUgIDpzZXQgaGY9PFRhYj4KKwktIGZpbGUgbmFtZQk6ZSB2ZTxUYWI+CisJLSBldGMuCisKKwlJZiB0aGVyZSBhcmUgbXVsdGlwbGUgbWF0Y2hlcywgQ1RSTC1OIChuZXh0KSBhbmQgQ1RSTC1QIChwcmV2aW91cykKKwl3aWxsIHdhbGsgdGhyb3VnaCB0aGUgbWF0Y2hlcy4gIDxUYWI+IHdvcmtzIGxpa2UgQ1RSTC1OLCBidXQgd3JhcHMKKwlhcm91bmQgdG8gdGhlIGZpcnN0IG1hdGNoLgorCisJVGhlICd3aWxkY2hhcicgb3B0aW9uIGNhbiBiZSBzZXQgdG8gdGhlIGNoYXJhY3RlciBmb3IgY29tbWFuZC1saW5lCisJY29tcGxldGlvbiwgPFRhYj4gaXMgdGhlIGRlZmF1bHQuICBDVFJMLUQgY2FuIGJlIHR5cGVkIGFmdGVyIGFuCisJKGluY29tcGxldGUpIHdpbGRjYXJkOyBhbGwgbWF0Y2hlcyB3aWxsIGJlIGxpc3RlZC4gIENUUkwtQSB3aWxsIGluc2VydAorCWFsbCBtYXRjaGVzLiAgQ1RSTC1MIHdpbGwgaW5zZXJ0IHRoZSBsb25nZXN0IGNvbW1vbiBwYXJ0IG9mIHRoZQorCW1hdGNoZXMuCisKK0luc2VydC1tb2RlIGNvbXBsZXRpb24JCQkJCXxpbnMtY29tcGxldGlvbnwKKwlJbiBpbnNlcnQgbW9kZSB0aGUgQ1RSTC1OIGFuZCBDVFJMLVAga2V5cyBjYW4gYmUgdXNlZCB0byBjb21wbGV0ZSBhCisJd29yZCB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gdXNlZC4JfGlfQ1RSTC1OfAorCVdpdGggQ1RSTC1YIGFub3RoZXIgbW9kZSBpcyBlbnRlcmVkLCB0aHJvdWdoIHdoaWNoIGNvbXBsZXRpb24gY2FuIGJlCisJZG9uZSBmb3I6CisJfGlfQ1RSTC1YX0NUUkwtRnwJZmlsZSBuYW1lcworCXxpX0NUUkwtWF9DVFJMLUt8CXdvcmRzIGZyb20gJ2RpY3Rpb25hcnknIGZpbGVzCisJfGlfQ1RSTC1YX0NUUkwtVHwJd29yZHMgZnJvbSAndGhlc2F1cnVzJyBmaWxlcworCXxpX0NUUkwtWF9DVFJMLUl8CXdvcmRzIGZyb20gaW5jbHVkZWQgZmlsZXMKKwl8aV9DVFJMLVhfQ1RSTC1MfAl3aG9sZSBsaW5lcworCXxpX0NUUkwtWF9DVFJMLV18CXdvcmRzIGZyb20gdGhlIHRhZ3MgZmlsZQorCXxpX0NUUkwtWF9DVFJMLUR8CWRlZmluaXRpb25zIG9yIG1hY3JvcworCitMb25nIGxpbmUgc3VwcG9ydAkJCQkJfCd3cmFwJ3wgfCdsaW5lYnJlYWsnfAorCUlmIHRoZSAnd3JhcCcgb3B0aW9uIGlzIG9mZiwgbG9uZyBsaW5lcyB3aWxsIG5vdCB3cmFwIGFuZCBvbmx5IHBhcnQKKwlvZiB0aGVtIHdpbGwgYmUgc2hvd24uICBXaGVuIHRoZSBjdXJzb3IgaXMgbW92ZWQgdG8gYSBwYXJ0IHRoYXQgaXMgbm90CisJc2hvd24sIHRoZSBzY3JlZW4gd2lsbCBzY3JvbGwgaG9yaXpvbnRhbGx5LiAgVGhlIG1pbmltdW0gbnVtYmVyIG9mCisJY29sdW1ucyB0byBzY3JvbGwgY2FuIGJlIHNldCB3aXRoIHRoZSAnc2lkZXNjcm9sbCcgb3B0aW9uLiAgVGhlICJ6aCIKKwlhbmQgInpsIiBjb21tYW5kcyBjYW4gYmUgdXNlZCB0byBzY3JvbGwgc2lkZXdheXMuCisJQWx0ZXJuYXRpdmVseSwgbG9uZyBsaW5lcyBhcmUgYnJva2VuIGluIGJldHdlZW4gd29yZHMgd2hlbiB0aGUKKwknbGluZWJyZWFrJyBvcHRpb24gaXMgc2V0LiAgVGhpcyBhbGxvd3MgZWRpdGluZyBhIHNpbmdsZS1saW5lCisJcGFyYWdyYXBoIGNvbnZlbmllbnRseSAoZS5nLiB3aGVuIHRoZSB0ZXh0IGlzIGxhdGVyIHJlYWQgaW50byBhIERUUAorCXByb2dyYW0pLiAgTW92ZSB0aGUgY3Vyc29yIHVwL2Rvd24gd2l0aCB0aGUgImdrIiBhbmQgImdqIiBjb21tYW5kcy4KKworVGV4dCBmb3JtYXR0aW5nLgkJCQkJfGZvcm1hdHRpbmd8CisJVGhlICd0ZXh0d2lkdGgnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGxpbWl0IHRoZSBsaW5lCisJbGVuZ3RoLiAgVGhpcyBzdXBwbGVtZW50cyB0aGUgJ3dyYXBtYXJnaW4nIG9wdGlvbiBvZiBWaSwgd2hpY2ggd2FzIG5vdAorCXZlcnkgdXNlZnVsLiAgVGhlICJncSIgb3BlcmF0b3IgY2FuIGJlIHVzZWQgdG8gZm9ybWF0IGEgcGllY2Ugb2YgdGV4dAorCShmb3IgZXhhbXBsZSwgImdxYXAiIGZvcm1hdHMgdGhlIGN1cnJlbnQgcGFyYWdyYXBoKS4gIENvbW1hbmRzIGZvcgorCXRleHQgYWxpZ25tZW50OiAiOmNlbnRlciIsICI6bGVmdCIgYW5kICI6cmlnaHQiLgorCitFeHRlbmRlZCBzZWFyY2ggcGF0dGVybnMJCQkJfHBhdHRlcm58CisJVGhlcmUgYXJlIG1hbnkgZXh0cmEgaXRlbXMgdG8gbWF0Y2ggdmFyaW91cyB0ZXh0IGl0ZW1zLiAgRXhhbXBsZXM6CisJQSAiXG4iIGNhbiBiZSB1c2VkIGluIGEgc2VhcmNoIHBhdHRlcm4gdG8gbWF0Y2ggYSBsaW5lIGJyZWFrLgorCSJ4XHsyLDR9IiBtYXRjaGVzICJ4IiAyIHRvIDQgdGltZXMuCisJIlxzIiBtYXRjaGVzIGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyLgorCitFZGl0LWNvbXBpbGUtZWRpdCBzcGVlZHVwLgkJCQl8cXVpY2tmaXh8CisJVGhlICI6bWFrZSIgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBydW4gdGhlIGNvbXBpbGF0aW9uIGFuZCBqdW1wIHRvCisJdGhlIGZpcnN0IGVycm9yLiAgQWx0ZXJuYXRpdmVseSBWaW0gY2FuIGJlIHN0YXJ0ZWQgd2l0aCB0aGUgIi1xIgorCW9wdGlvbiBmcm9tIHRoZSBjb21waWxlci4gIEEgZmlsZSB3aXRoIGNvbXBpbGVyIGVycm9yIG1lc3NhZ2VzIGlzCisJaW50ZXJwcmV0ZWQuICBWaW0gc3RhcnRzIGVkaXRpbmcgYXQgdGhlIGZpcnN0IGVycm9yLgorCisJRWFjaCBsaW5lIGluIHRoZSBlcnJvciBmaWxlIGlzIHNjYW5uZWQgZm9yIHRoZSBuYW1lIG9mIGEgZmlsZSwgbGluZQorCW51bWJlciBhbmQgZXJyb3IgbWVzc2FnZS4gIFRoZSAnZXJyb3Jmb3JtYXQnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIGEKKwlsaXN0IG9mIHNjYW5mLWxpa2Ugc3RyaW5ncyB0byBoYW5kbGUgb3V0cHV0IGZyb20gbWFueSBjb21waWxlcnMuCisKKwlUaGUgIjpjbiIgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBqdW1wIHRvIHRoZSBuZXh0IGVycm9yLgorCSI6Y2wiIGxpc3RzIGFsbCB0aGUgZXJyb3IgbWVzc2FnZXMuICBPdGhlciBjb21tYW5kcyBhcmUgYXZhaWxhYmxlCisJKGFsbW9zdCB0aGUgc2FtZSBhcyB3aXRoIE1hbngncyBaIGVkaXRvciBvbiB0aGUgQW1pZ2EpLgorCVRoZSAnbWFrZWVmJyBvcHRpb24gaGFzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdpdGggZXJyb3IgbWVzc2FnZXMuCisJVGhlICdtYWtlcHJnJyBvcHRpb24gY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gYmUgZXhlY3V0ZWQKKwl3aXRoIHRoZSAiOm1ha2UiIGNvbW1hbmQuCisJVGhlICdzaGVsbHBpcGUnIG9wdGlvbiBjb250YWlucyB0aGUgc3RyaW5nIHRvIGJlIHVzZWQgdG8gcHV0IHRoZQorCW91dHB1dCBvZiB0aGUgY29tcGlsZXIgaW50byB0aGUgZXJyb3JmaWxlLgorCitJbXByb3ZlZCBpbmRlbnRpbmcgZm9yIEMgcHJvZ3JhbXMJCQl8J2NpbmRlbnQnfAorCVdoZW4gdGhlICdjaW5kZW50JyBvcHRpb24gaXMgb24gdGhlIGluZGVudCBvZiBlYWNoIGxpbmUgaXMKKwlhdXRvbWF0aWNhbGx5IGFkanVzdGVkLiAgQyBzeW50YXggaXMgbW9zdGx5IHJlY29nbml6ZWQuICBUaGUgaW5kZW50CisJZm9yIHZhcmlvdXMgc3R5bGVzIGNhbiBiZSBzZXQgd2l0aCAnY2lub3B0aW9ucycuICBUaGUga2V5cyB0byB0cmlnZ2VyCisJaW5kZW50aW5nIGNhbiBiZSBzZXQgd2l0aCAnY2lua2V5cycuCisKKwlDb21tZW50cyBjYW4gYmUgYXV0b21hdGljYWxseSBmb3JtYXR0ZWQuICBUaGUgJ2NvbW1lbnRzJyBvcHRpb24gY2FuIGJlCisJc2V0IHRvIHRoZSBjaGFyYWN0ZXJzIHRoYXQgc3RhcnQgYW5kIGVuZCBhIGNvbW1lbnQuICBUaGlzIHdvcmtzIGJlc3QKKwlmb3IgQyBjb2RlLCBidXQgYWxzbyB3b3JrcyBmb3IgZS1tYWlsICgiPiIgYXQgc3RhcnQgb2YgdGhlIGxpbmUpIGFuZAorCW90aGVyIHR5cGVzIG9mIHRleHQuICBUaGUgIj0iIG9wZXJhdG9yIGNhbiBiZSB1c2VkIHRvIHJlLWluZGVudAorCWxpbmVzLgorCitTZWFyY2hpbmcgZm9yIHdvcmRzIGluIGluY2x1ZGUgZmlsZXMJCQl8aW5jbHVkZS1zZWFyY2h8CisJVGhlICJbaSIgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIGEgbWF0Y2ggb2YgdGhlIHdvcmQgdW5kZXIKKwl0aGUgY3Vyc29yIGluIHRoZSBjdXJyZW50IGFuZCBpbmNsdWRlZCBmaWxlcy4gIFRoZSAnaW5jbHVkZScgb3B0aW9uCisJY2FuIGJlIHNldCB0aGUgYSBwYXR0ZXJuIHRoYXQgZGVzY3JpYmVzIGEgY29tbWFuZCB0byBpbmNsdWRlIGEgZmlsZQorCSh0aGUgZGVmYXVsdCBpcyBmb3IgQyBwcm9ncmFtcykuCisJVGhlICJbSSIgY29tbWFuZCBsaXN0cyBhbGwgbWF0Y2hlcywgdGhlICJbIENUUkwtSSIgY29tbWFuZCBqdW1wcyB0bworCWEgbWF0Y2guCisJVGhlICJbZCIsICJbRCIgYW5kICJbIENUUkwtRCIgY29tbWFuZHMgZG8gdGhlIHNhbWUsIGJ1dCBvbmx5IGZvcgorCWxpbmVzIHdoZXJlIHRoZSBwYXR0ZXJuIGdpdmVuIHdpdGggdGhlICdkZWZpbmUnIG9wdGlvbiBtYXRjaGVzLgorCitBdXRvbWF0aWMgY29tbWFuZHMJCQkJCXxhdXRvY29tbWFuZHwKKwlDb21tYW5kcyBjYW4gYmUgYXV0b21hdGljYWxseSBleGVjdXRlZCB3aGVuIHJlYWRpbmcgYSBmaWxlLCB3cml0aW5nIGEKKwlmaWxlLCBqdW1waW5nIHRvIGFub3RoZXIgYnVmZmVyLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIGZpbGUgbmFtZS4KKwlUaGlzIGlzIHVzZWZ1bCB0byBzZXQgb3B0aW9ucyBhbmQgbWFwcGluZ3MgZm9yIEMgcHJvZ3JhbXMsCisJZG9jdW1lbnRhdGlvbiwgcGxhaW4gdGV4dCwgZS1tYWlsLCBldGMuICBUaGlzIGFsc28gbWFrZXMgaXQgcG9zc2libGUKKwl0byBlZGl0IGNvbXByZXNzZWQgZmlsZXMuCisKK1NjcmlwdHMgYW5kIEV4cHJlc3Npb25zCQkJCQl8ZXhwcmVzc2lvbnwKKwlDb21tYW5kcyBoYXZlIGJlZW4gYWRkZWQgdG8gZm9ybSB1cCBhIHNpbXBsZSBidXQgcG93ZXJmdWwgc2NyaXB0CisJbGFuZ3VhZ2UuCisJfDppZnwJCUNvbmRpdGlvbmFsIGV4ZWN1dGlvbiwgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGV4YW1wbGUKKwkJCXRvIHNldCBvcHRpb25zIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgJFRFUk0uCisJfDp3aGlsZXwJUmVwZWF0IGEgbnVtYmVyIG9mIGNvbW1hbmRzLgorCXw6ZWNob3wJCVByaW50IHRoZSByZXN1bHQgb2YgYW4gZXhwcmVzc2lvbi4KKwl8OmxldHwJCUFzc2lnbiBhIHZhbHVlIHRvIGFuIGludGVybmFsIHZhcmlhYmxlLCBvcHRpb24sIGV0Yy4KKwl8OmV4ZWN1dGV8CUV4ZWN1dGUgYSBjb21tYW5kIGZvcm1lZCBieSBhbiBleHByZXNzaW9uLgorCWV0Yy4KKworVmltaW5mbwkJCQkJCQl8dmltaW5mby1maWxlfAorCVRoZSBjb21tYW5kLWxpbmUgaGlzdG9yeSwgbWFya3MgYW5kIHJlZ2lzdGVycyBjYW4gYmUgc3RvcmVkIGluIGEgZmlsZQorCXRoYXQgaXMgcmVhZCBvbiBzdGFydHVwLiAgVGhpcyBjYW4gYmUgdXNlZCB0byByZXBlYXQgYSBzZWFyY2ggY29tbWFuZAorCW9yIGNvbW1hbmQtbGluZSBjb21tYW5kIGFmdGVyIGV4aXRpbmcgYW5kIHJlc3RhcnRpbmcgVmltLiAgSXQgaXMgYWxzbworCXBvc3NpYmxlIHRvIGp1bXAgcmlnaHQgYmFjayB0byB3aGVyZSB0aGUgbGFzdCBlZGl0IHN0b3BwZWQgd2l0aCAiJzAiLgorCVRoZSAndmltaW5mbycgb3B0aW9uIGNhbiBiZSBzZXQgdG8gc2VsZWN0IHdoaWNoIGl0ZW1zIHRvIHN0b3JlIGluIHRoZQorCS52aW1pbmZvIGZpbGUuICBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LgorCitNb3VzZSBzdXBwb3J0CQkJCQkJfG1vdXNlLXVzaW5nfAorCVRoZSBtb3VzZSBpcyBzdXBwb3J0ZWQgaW4gdGhlIEdVSSB2ZXJzaW9uLCBpbiBhbiB4dGVybSBmb3IgVW5peCwgZm9yCisJTGludXggd2l0aCBncG0sIGZvciBNUy1ET1MsIGFuZCBXaW4zMi4gIEl0IGNhbiBiZSB1c2VkIHRvIHBvc2l0aW9uIHRoZQorCWN1cnNvciwgc2VsZWN0IHRoZSB2aXN1YWwgYXJlYSwgcGFzdGUgYSByZWdpc3RlciwgZXRjLgorCitVc2FnZSBvZiBrZXkgbmFtZXMJCQkJCXw8PnwgfGtleS1ub3RhdGlvbnwKKwlTcGVjaWFsIGtleXMgbm93IGFsbCBoYXZlIGEgbmFtZSBsaWtlIDxVcD4sIDxFbmQ+LCBldGMuCisJVGhpcyBuYW1lIGNhbiBiZSB1c2VkIGluIG1hcHBpbmdzLCB0byBtYWtlIGl0IGVhc3kgdG8gZWRpdCB0aGVtLgorCitFZGl0aW5nIGJpbmFyeSBmaWxlcwkJCQkJfGVkaXQtYmluYXJ5fAorCVZpbSBjYW4gZWRpdCBiaW5hcnkgZmlsZXMuICBZb3UgY2FuIGNoYW5nZSBhIGZldyBjaGFyYWN0ZXJzIGluIGFuCisJZXhlY3V0YWJsZSBmaWxlLCB3aXRob3V0IGNvcnJ1cHRpbmcgaXQuICBWaW0gZG9lc24ndCByZW1vdmUgTlVMCisJY2hhcmFjdGVycyAodGhleSBhcmUgcmVwcmVzZW50ZWQgYXMgPE5MPiBpbnRlcm5hbGx5KS4KKwl8LWJ8CQljb21tYW5kLWxpbmUgYXJndW1lbnQgdG8gc3RhcnQgZWRpdGluZyBhIGJpbmFyeSBmaWxlCisJfCdiaW5hcnknfAlPcHRpb24gc2V0IGJ5ICItYiIuICBQcmV2ZW50cyBhZGRpbmcgYW4gPEVPTD4gZm9yIHRoZQorCQkJbGFzdCBsaW5lIGluIHRoZSBmaWxlLgorCitNdWx0aS1sYW5ndWFnZSBzdXBwb3J0CQkJCQl8bXVsdGktbGFuZ3wKKwlGaWxlcyBpbiBkb3VibGUtYnl0ZSBvciBtdWx0aS1ieXRlIGVuY29kaW5ncyBjYW4gYmUgZWRpdGVkLiAgVGhlcmUgaXMKKwlVVEYtOCBzdXBwb3J0IHRvIGJlIGFibGUgdG8gZWRpdCB2YXJpb3VzIGxhbmd1YWdlcyBhdCB0aGUgc2FtZSB0aW1lLAorCXdpdGhvdXQgc3dpdGNoaW5nIGZvbnRzLiB8VVRGLTh8CisJTWVzc2FnZXMgYW5kIG1lbnVzIGFyZSBhdmFpbGFibGUgaW4gZGlmZmVyZW50IGxhbmd1YWdlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBPdGhlciB2aW0gZmVhdHVyZXMJCQkJCSpvdGhlci1mZWF0dXJlcyoKKworQSByYW5kb20gY29sbGVjdGlvbiBvZiBuaWNlIGV4dHJhIGZlYXR1cmVzLgorCisKK1doZW4gVmltIGlzIHN0YXJ0ZWQgd2l0aCAiLXMgc2NyaXB0ZmlsZSIsIHRoZSBjaGFyYWN0ZXJzIHJlYWQgZnJvbQorInNjcmlwdGZpbGUiIGFyZSB0cmVhdGVkIGFzIGlmIHlvdSB0eXBlZCB0aGVtLiAgSWYgZW5kIG9mIGZpbGUgaXMgcmVhY2hlZAorYmVmb3JlIHRoZSBlZGl0b3IgZXhpdHMsIGZ1cnRoZXIgY2hhcmFjdGVycyBhcmUgcmVhZCBmcm9tIHRoZSBjb25zb2xlLgorCitUaGUgIi13IiBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVjb3JkIGFsbCB0eXBlZCBjaGFyYWN0ZXJzIGluIGEgc2NyaXB0IGZpbGUuCitUaGlzIGZpbGUgY2FuIHRoZW4gYmUgdXNlZCB0byByZWRvIHRoZSBlZGl0aW5nLCBwb3NzaWJseSBvbiBhbm90aGVyIGZpbGUgb3IKK2FmdGVyIGNoYW5naW5nIHNvbWUgY29tbWFuZHMgaW4gdGhlIHNjcmlwdCBmaWxlLgorCitUaGUgIi1vIiBvcHRpb24gb3BlbnMgYSB3aW5kb3cgZm9yIGVhY2ggYXJndW1lbnQuICAiLW80IiBvcGVucyBmb3VyIHdpbmRvd3MuCisKK1ZpIHJlcXVpcmVzIHNldmVyYWwgdGVybWNhcCBlbnRyaWVzIHRvIGJlIGFibGUgdG8gd29yayBmdWxsLXNjcmVlbi4gIFZpbSBvbmx5CityZXF1aXJlcyB0aGUgImNtIiBlbnRyeSAoY3Vyc29yIG1vdGlvbikuCisKKworSW4gY29tbWFuZCBtb2RlOgorCitXaGVuIHRoZSAnc2hvd2NtZCcgb3B0aW9uIGlzIHNldCwgdGhlIGNvbW1hbmQgY2hhcmFjdGVycyBhcmUgc2hvd24gaW4gdGhlIGxhc3QKK2xpbmUgb2YgdGhlIHNjcmVlbi4gIFRoZXkgYXJlIHJlbW92ZWQgd2hlbiB0aGUgY29tbWFuZCBpcyBmaW5pc2hlZC4KKworSWYgdGhlICdydWxlcicgb3B0aW9uIGlzIHNldCwgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGlzIHNob3duIGluIHRoZQorbGFzdCBsaW5lIG9mIHRoZSBzY3JlZW4uCisKKyJVIiBzdGlsbCB3b3JrcyBhZnRlciBoYXZpbmcgbW92ZWQgb2ZmIHRoZSBsYXN0IGNoYW5nZWQgbGluZSBhbmQgYWZ0ZXIgInUiLgorCitDaGFyYWN0ZXJzIHdpdGggdGhlIDh0aCBiaXQgc2V0IGFyZSBkaXNwbGF5ZWQuICBUaGUgY2hhcmFjdGVycyBiZXR3ZWVuICd+JyBhbmQKKzB4YTAgYXJlIGRpc3BsYXllZCBhcyAifj8iLCAifkAiLCAifkEiLCBldGMuLCB1bmxlc3MgdGhleSBhcmUgaW5jbHVkZWQgaW4gdGhlCisnaXNwcmludCcgb3B0aW9uLgorCisiXVsiIGdvZXMgdG8gdGhlIG5leHQgZW5kaW5nIG9mIGEgQyBmdW5jdGlvbiAoJ30nIGluIGNvbHVtbiAxKS4KKyJbXSIgZ29lcyB0byB0aGUgcHJldmlvdXMgZW5kaW5nIG9mIGEgQyBmdW5jdGlvbiAoJ30nIGluIGNvbHVtbiAxKS4KKworIl1mIiwgIltmIiBhbmQgImdmIiBzdGFydCBlZGl0aW5nIHRoZSBmaWxlIHdob3NlIG5hbWUgaXMgdW5kZXIgdGhlIGN1cnNvci4KK0NUUkwtVyBmIHNwbGl0cyB0aGUgd2luZG93IGFuZCBzdGFydHMgZWRpdGluZyB0aGUgZmlsZSB3aG9zZSBuYW1lIGlzIHVuZGVyCit0aGUgY3Vyc29yLgorCisiKiIgc2VhcmNoZXMgZm9yd2FyZCBmb3IgdGhlIGlkZW50aWZpZXIgdW5kZXIgdGhlIGN1cnNvciwgIiMiIGJhY2t3YXJkLgorIksiIHJ1bnMgdGhlIHByb2dyYW0gZGVmaW5lZCBieSB0aGUgJ2tleXdvcmRwcmcnIG9wdGlvbiwgd2l0aCB0aGUgaWRlbnRpZmllcgordW5kZXIgdGhlIGN1cnNvciBhcyBhcmd1bWVudC4KKworIiUiIGNhbiBiZSBwcmVjZWRlZCB3aXRoIGEgY291bnQuICBUaGUgY3Vyc29yIGp1bXBzIHRvIHRoZSBsaW5lIHRoYXQKK3BlcmNlbnRhZ2UgZG93biBpbiB0aGUgZmlsZS4gIFRoZSBub3JtYWwgIiUiIGZ1bmN0aW9uIHRvIGp1bXAgdG8gdGhlIG1hdGNoaW5nCiticmFjZSBza2lwcyBicmFjZXMgaW5zaWRlIHF1b3Rlcy4KKworV2l0aCB0aGUgQ1RSTC1dIGNvbW1hbmQsIHRoZSBjdXJzb3IgbWF5IGJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGlkZW50aWZpZXIuCisKK1RoZSB1c2VkIHRhZ3MgYXJlIHJlbWVtYmVyZWQuICBDb21tYW5kcyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhlIHRhZyBzdGFjaworYXJlIENUUkwtVCwgIjpwb3AiIGFuZCAiOnRhZyIuICAiOnRhZ3MiIGxpc3RzIHRoZSB0YWcgc3RhY2suCisKK1RoZSAndGFncycgb3B0aW9uIGNhbiBiZSBzZXQgdG8gYSBsaXN0IG9mIHRhZyBmaWxlIG5hbWVzLiAgVGh1cyBtdWx0aXBsZQordGFnIGZpbGVzIGNhbiBiZSB1c2VkLiAgRm9yIGZpbGUgbmFtZXMgdGhhdCBzdGFydCB3aXRoICIuLyIsIHRoZSAiLi8iIGlzCityZXBsYWNlZCB3aXRoIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IGZpbGUuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBhCit0YWdzIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBmaWxlIGJlaW5nIGVkaXRlZC4KKworUHJldmlvdXNseSB1c2VkIGZpbGUgbmFtZXMgYXJlIHJlbWVtYmVyZWQgaW4gdGhlIGFsdGVybmF0ZSBmaWxlIG5hbWUgbGlzdC4KK0NUUkwtXiBhY2NlcHRzIGEgY291bnQsIHdoaWNoIGlzIGFuIGluZGV4IGluIHRoaXMgbGlzdC4KKyI6ZmlsZXMiIGNvbW1hbmQgc2hvd3MgdGhlIGxpc3Qgb2YgYWx0ZXJuYXRlIGZpbGUgbmFtZXMuCisiIzxOPiIgaXMgcmVwbGFjZWQgd2l0aCB0aGUgPE4+dGggYWx0ZXJuYXRlIGZpbGUgbmFtZSBpbiB0aGUgbGlzdC4KKyIjPCIgaXMgcmVwbGFjZWQgd2l0aCB0aGUgY3VycmVudCBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24uCisKK1NlYXJjaCBwYXR0ZXJucyBoYXZlIG1vcmUgZmVhdHVyZXMuICBUaGUgPE5MPiBjaGFyYWN0ZXIgaXMgc2VlbiBhcyBwYXJ0IG9mIHRoZQorc2VhcmNoIHBhdHRlcm4gYW5kIHRoZSBzdWJzdGl0dXRlIHN0cmluZyBvZiAiOnMiLiAgVmkgc2VlcyBpdCBhcyB0aGUgZW5kIG9mCit0aGUgY29tbWFuZC4KKworU2VhcmNoZXMgY2FuIHB1dCB0aGUgY3Vyc29yIG9uIHRoZSBlbmQgb2YgYSBtYXRjaCBhbmQgbWF5IGluY2x1ZGUgYSBjaGFyYWN0ZXIKK29mZnNldC4KKworQ291bnQgYWRkZWQgdG8gIn4iLCAiOm5leHQiLCAiOk5leHQiLCAibiIgYW5kICJOIi4KKworVGhlIGNvbW1hbmQgIjpuZXh0ISIgd2l0aCAnYXV0b3dyaXRlJyBzZXQgZG9lcyBub3Qgd3JpdGUgdGhlIGZpbGUuICBJbiB2aSB0aGUKK2ZpbGUgd2FzIHdyaXR0ZW4sIGJ1dCB0aGlzIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBidWcsIGJlY2F1c2Ugb25lIGRvZXMgbm90CitleHBlY3QgaXQgYW5kIHRoZSBmaWxlIGlzIG5vdCB3cml0dGVuIHdpdGggIjpyZXdpbmQhIi4KKworSW4gVmkgd2hlbiBlbnRlcmluZyBhIDxDUj4gaW4gcmVwbGFjZSBtb2RlIGRlbGV0ZXMgYSBjaGFyYWN0ZXIgb25seSB3aGVuICdhaScKK2lzIHNldCAoYnV0IGRvZXMgbm90IHNob3cgaXQgdW50aWwgeW91IGhpdCA8RXNjPikuICBWaW0gYWx3YXlzIGRlbGV0ZXMgYQorY2hhcmFjdGVyIChhbmQgc2hvd3MgaXQgaW1tZWRpYXRlbHkpLgorCitBZGRlZCA6d25leHQgY29tbWFuZC4gIFNhbWUgYXMgIjp3cml0ZSIgZm9sbG93ZWQgYnkgIjpuZXh0Ii4KKworVGhlICI6dyEiIGNvbW1hbmQgYWx3YXlzIHdyaXRlcywgYWxzbyB3aGVuIHRoZSBmaWxlIGlzIHdyaXRlIHByb3RlY3RlZC4gIEluIFZpCit5b3Ugd291bGQgaGF2ZSB0byBkbyAiOiFjaG1vZCArdyAlIiBhbmQgIjpzZXQgbm9ybyIuCisKK1doZW4gJ3RpbGRlb3AnIGhhcyBiZWVuIHNldCwgIn4iIGlzIGFuIG9wZXJhdG9yIChtdXN0IGJlIGZvbGxvd2VkIGJ5IGEKK21vdmVtZW50IGNvbW1hbmQpLgorCitXaXRoIHRoZSAiSiIgKGpvaW4pIGNvbW1hbmQgeW91IGNhbiByZXNldCB0aGUgJ2pvaW5zcGFjZXMnIG9wdGlvbiB0byBoYXZlIG9ubHkKK29uZSBzcGFjZSBhZnRlciBhIHBlcmlvZCAoVmkgaW5zZXJ0cyB0d28gc3BhY2VzKS4KKworImN3IiBjYW4gYmUgdXNlZCB0byBjaGFuZ2Ugd2hpdGUgc3BhY2UgZm9ybWVkIGJ5IHNldmVyYWwgY2hhcmFjdGVycyAoVmkgaXMKK2NvbmZ1c2luZzogImN3IiBvbmx5IGNoYW5nZXMgb25lIHNwYWNlLCB3aGlsZSAiZHciIGRlbGV0ZXMgYWxsIHdoaXRlIHNwYWNlKS4KKworIm8iIGFuZCAiTyIgYWNjZXB0IGEgY291bnQgZm9yIHJlcGVhdGluZyB0aGUgaW5zZXJ0IChWaSBjbGVhcnMgYSBwYXJ0IG9mCitkaXNwbGF5KS4KKworRmxhZ3MgYWZ0ZXIgRXggY29tbWFuZHMgbm90IHN1cHBvcnRlZCAobm8gcGxhbnMgdG8gaW5jbHVkZSBpdCkuCisKK09uIG5vbi1VTklYIHN5c3RlbXMgIjpjZCIgY29tbWFuZCBzaG93cyBjdXJyZW50IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGdvaW5nIHRvCit0aGUgaG9tZSBkaXJlY3RvcnkgKHRoZXJlIGlzbid0IG9uZSkuICAiOnB3ZCIgcHJpbnRzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvbgorYWxsIHN5c3RlbXMuCisKK0FmdGVyIGEgIjpjZCIgY29tbWFuZCB0aGUgZmlsZSBuYW1lcyAoaW4gdGhlIGFyZ3VtZW50IGxpc3QsIG9wZW5lZCBmaWxlcykKK3N0aWxsIHBvaW50IHRvIHRoZSBzYW1lIGZpbGVzLiAgSW4gVmkgIjpjZCIgaXMgbm90IGFsbG93ZWQgaW4gYSBjaGFuZ2VkIGZpbGU7CitvdGhlcndpc2UgdGhlIG1lYW5pbmcgb2YgZmlsZSBuYW1lcyBjaGFuZ2UuCisKKyI6c291cmNlISIgY29tbWFuZCByZWFkcyBWaSBjb21tYW5kcyBmcm9tIGEgZmlsZS4KKworIjpta2V4cmMiIGNvbW1hbmQgd3JpdGVzIGN1cnJlbnQgbW9kaWZpZWQgb3B0aW9ucyBhbmQgbWFwcGluZ3MgdG8gYSAiLmV4cmMiCitmaWxlLiAgIjpta3ZpbXJjIiB3cml0ZXMgdG8gYSAiLnZpbXJjIiBmaWxlLgorCitObyBjaGVjayBmb3IgInRhaWwgcmVjdXJzaW9uIiB3aXRoIG1hcHBpbmdzLiAgVGhpcyBhbGxvd3MgdGhpbmdzIGxpa2UKKyI6bWFwISBmb28gXl1mb28iLgorCitXaGVuIGEgbWFwcGluZyBzdGFydHMgd2l0aCBudW1iZXIsIHZpIGxvc2VzIHRoZSBjb3VudCB0eXBlZCBiZWZvcmUgaXQgKGUuZy4KK3doZW4gdXNpbmcgdGhlIG1hcHBpbmcgIjptYXAgZyA0RyIgdGhlIGNvbW1hbmQgIjdnIiBnb2VzIHRvIGxpbmUgNCkuICBUaGlzIGlzCitjb25zaWRlcmVkIGEgdmkgYnVnLiAgVmltIGNvbmNhdGVuYXRlcyB0aGUgY291bnRzIChpbiB0aGUgZXhhbXBsZSBpdCBiZWNvbWVzCisiNzRHIiksIGFzIG1vc3QgcGVvcGxlIHdvdWxkIGV4cGVjdC4KKworVGhlIDpwdXQhIGNvbW1hbmQgaW5zZXJ0cyB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorCitUaGUgInAiIGFuZCAiUCIgY29tbWFuZHMgb2YgdmkgY2Fubm90IGJlIHJlcGVhdGVkIHdpdGggIi4iIHdoZW4gdGhlIHB1dHRlZAordGV4dCBpcyBsZXNzIHRoYW4gYSBsaW5lLiAgSW4gVmltIHRoZXkgY2FuIGFsd2F5cyBiZSByZXBlYXRlZC4KKworIjpub3JlbWFwIiBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGVudGVyIGEgbWFwcGluZyB0aGF0IHdpbGwgbm90IGJlIHJlbWFwcGVkLgorVGhpcyBpcyB1c2VmdWwgdG8gZXhjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdHdvIGtleXMuICAiOmNtYXAiLCAiOmN1bm1hcCIgYW5kCisiOmNub3JlbWFwIiBjYW4gYmUgdXNlZCBmb3IgbWFwcGluZyBpbiBjb21tYW5kLWxpbmUgZWRpdGluZyBvbmx5LiAgIjppbWFwIiwKKyI6aXVubWFwIiBhbmQgIjppbm9yZW1hcCIgY2FuIGJlIHVzZWQgZm9yIG1hcHBpbmcgaW4gaW5zZXJ0IG1vZGUgb25seS4KK1NpbWlsYXIgY29tbWFuZHMgZXhpc3QgZm9yIGFiYnJldmlhdGlvbnM6ICI6bm9yZWFiYnJldiIsICI6aWFiYnJldiIKKyI6Y2FiYnJldiIsICI6aXVuYWJicmV2IiwgIjpjdW5hYmJyZXYiLCAiOmlub3JlYWJicmV2IiwgIjpjbm9yZWFiYnJldiIuCisKK0luIFZpIHRoZSBjb21tYW5kICI6bWFwIGZvbyBiYXIiIHdvdWxkIHJlbW92ZSBhIHByZXZpb3VzIG1hcHBpbmcKKyI6bWFwIGJ1ZyBmb28iLiAgVGhpcyBpcyBjb25zaWRlcmVkIGEgYnVnLCBzbyBpdCBpcyBub3QgaW5jbHVkZWQgaW4gVmltLgorIjp1bm1hcCEgZm9vIiBkb2VzIHJlbW92ZSAiOm1hcCEgYnVnIGZvbyIsIGJlY2F1c2UgdW5tYXBwaW5nIHdvdWxkIGJlIHZlcnkKK2RpZmZpY3VsdCBvdGhlcndpc2UgKHRoaXMgaXMgdmkgY29tcGF0aWJsZSkuCisKK1RoZSAnOicgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGxhc3QgY29tbWFuZC1saW5lLgorVGhlICclJyByZWdpc3RlciBjb250YWlucyB0aGUgY3VycmVudCBmaWxlIG5hbWUuCitUaGUgJy4nIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBsYXN0IGluc2VydGVkIHRleHQuCisKKyI6ZGlzIiBjb21tYW5kIHNob3dzIHRoZSBjb250ZW50cyBvZiB0aGUgeWFuayByZWdpc3RlcnMuCisKK0NUUkwtTy9DVFJMLUkgY2FuIGJlIHVzZWQgdG8ganVtcCB0byBvbGRlci9uZXdlciBwb3NpdGlvbnMuICBUaGVzZSBhcmUgdGhlCitzYW1lIHBvc2l0aW9ucyBhcyB1c2VkIHdpdGggdGhlICcnIGNvbW1hbmQsIGJ1dCBtYXkgYmUgaW4gYW5vdGhlciBmaWxlLiAgVGhlCisiOmp1bXBzIiBjb21tYW5kIGxpc3RzIHRoZSBvbGRlciBwb3NpdGlvbnMuCisKK0lmIHRoZSAnc2hpZnRyb3VuZCcgb3B0aW9uIGlzIHNldCwgYW4gaW5kZW50IGlzIHJvdW5kZWQgdG8gYSBtdWx0aXBsZSBvZgorJ3NoaWZ0d2lkdGgnIHdpdGggIj4iIGFuZCAiPCIgY29tbWFuZHMuCisKK1RoZSAnc2Nyb2xsanVtcCcgb3B0aW9uIGNhbiBiZSBzZXQgdG8gdGhlIG1pbmltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbAord2hlbiB0aGUgY3Vyc29yIGdldHMgb2ZmIHRoZSBzY3JlZW4uICBVc2UgdGhpcyB3aGVuIHNjcm9sbGluZyBpcyBzbG93LgorCitUaGUgJ3Njcm9sbG9mZicgb3B0aW9uIGNhbiBiZSBzZXQgdG8gdGhlIG1pbmltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIGtlZXAKK2Fib3ZlIGFuZCBiZWxvdyB0aGUgY3Vyc29yLiAgVGhpcyBnaXZlcyBzb21lIGNvbnRleHQgdG8gd2hlcmUgeW91IGFyZQorZWRpdGluZy4gIFdoZW4gc2V0IHRvIGEgbGFyZ2UgbnVtYmVyIHRoZSBjdXJzb3IgbGluZSBpcyBhbHdheXMgaW4gdGhlIG1pZGRsZQorb2YgdGhlIHdpbmRvdy4KKworVXBwZXJjYXNlIG1hcmtzIGNhbiBiZSB1c2VkIHRvIGp1bXAgYmV0d2VlbiBmaWxlcy4gIFRoZSAiOm1hcmtzIiBjb21tYW5kIGxpc3RzCithbGwgY3VycmVudGx5IHNldCBtYXJrcy4gIFRoZSBjb21tYW5kcyAiJ10iIGFuZCAiYF0iIGp1bXAgdG8gdGhlIGVuZCBvZiB0aGUKK3ByZXZpb3VzIG9wZXJhdG9yIG9yIGVuZCBvZiB0aGUgdGV4dCBpbnNlcnRlZCB3aXRoIHRoZSBwdXQgY29tbWFuZC4gICInWyIgYW5kCisiYFsiIGRvIGp1bXAgdG8gdGhlIHN0YXJ0LgorCitUaGUgJ3NoZWxsdHlwZScgb3B0aW9uIGNhbiBiZSBzZXQgdG8gcmVmbGVjdCB0aGUgdHlwZSBvZiBzaGVsbCB1c2VkIG9uIHRoZQorQW1pZ2EuCisKK1RoZSAnaGlnaGxpZ2h0JyBvcHRpb24gY2FuIGJlIHNldCBmb3IgdGhlIGhpZ2hsaWdodCBtb2RlIHRvIGJlIHVzZWQgZm9yCitzZXZlcmFsIGNvbW1hbmRzLgorCitUaGUgQ1RSTC1BIChhZGQpIGFuZCBDVFJMLVggKHN1YnRyYWN0KSBjb21tYW5kcyBhcmUgbmV3LiAgVGhlIGNvdW50IHRvIHRoZQorY29tbWFuZCAoZGVmYXVsdCAxKSBpcyBhZGRlZCB0by9zdWJ0cmFjdGVkIGZyb20gdGhlIG51bWJlciBhdCBvciBhZnRlciB0aGUKK2N1cnNvci4gIFRoYXQgbnVtYmVyIG1heSBiZSBkZWNpbWFsLCBvY3RhbCAoc3RhcnRzIHdpdGggYSAnMCcpIG9yIGhleGFkZWNpbWFsCisoc3RhcnRzIHdpdGggJzB4JykuICBWZXJ5IHVzZWZ1bCBpbiBtYWNyb3MuCisKK1dpdGggdGhlIDpzZXQgY29tbWFuZCB0aGUgcHJlZml4ICJpbnYiIGNhbiBiZSB1c2VkIHRvIGludmVydCBib29sZWFuIG9wdGlvbnMuCisKK0luIGJvdGggVmkgYW5kIFZpbSB5b3UgY2FuIGNyZWF0ZSBhIGxpbmUgYnJlYWsgd2l0aCB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kCitieSB1c2luZyBhIENUUkwtTS4gIEZvciBWaSB0aGlzIG1lYW5zIHlvdSBjYW5ub3QgaW5zZXJ0IGEgcmVhbCBDVFJMLU0gaW4gdGhlCit0ZXh0LiAgV2l0aCBWaW0geW91IGNhbiBwdXQgYSByZWFsIENUUkwtTSBpbiB0aGUgdGV4dCBieSBwcmVjZWRpbmcgaXQgd2l0aCBhCitDVFJMLVYuCisKKworSW4gSW5zZXJ0IG1vZGU6CisKK0lmIHRoZSAncmV2aW5zJyBvcHRpb24gaXMgc2V0LCBpbnNlcnQgaGFwcGVucyBiYWNrd2FyZHMuICBUaGlzIGlzIGZvciB0eXBpbmcKK0hlYnJldy4gIFdoZW4gaW5zZXJ0aW5nIG5vcm1hbCBjaGFyYWN0ZXJzIHRoZSBjdXJzb3Igd2lsbCBub3QgYmUgc2hpZnRlZCBhbmQKK3RoZSB0ZXh0IG1vdmVzIHJpZ2h0d2FyZHMuICBCYWNrc3BhY2UsIENUUkwtVyBhbmQgQ1RSTC1VIHdpbGwgYWxzbyB3b3JrIGluCit0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiAgQ1RSTC1CIHRvZ2dsZXMgdGhlICdyZXZpbnMnIG9wdGlvbi4gIEluIHJlcGxhY2UgbW9kZQorJ3JldmlucycgaGFzIG5vIGVmZmVjdC4gIE9ubHkgd2hlbiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZS4KKworVGhlIGJhY2tzcGFjZSBrZXkgY2FuIGJlIHVzZWQganVzdCBsaWtlIENUUkwtRCB0byByZW1vdmUgYXV0by1pbmRlbnRzLgorCitZb3UgY2FuIGJhY2tzcGFjZSwgQ1RSTC1VIGFuZCBDVFJMLVcgb3ZlciBsaW5lIGJyZWFrcyBpZiB0aGUgJ2JhY2tzcGFjZScgKGJzKQorb3B0aW9uIGluY2x1ZGVzICJlb2wiLiAgWW91IGNhbiBiYWNrc3BhY2Ugb3ZlciB0aGUgc3RhcnQgb2YgaW5zZXJ0IGlmIHRoZQorJ2JhY2tzcGFjZScgb3B0aW9uIGluY2x1ZGVzICJzdGFydCIuCisKK1doZW4gdGhlICdwYXN0ZScgb3B0aW9uIGlzIHNldCwgYSBmZXcgb3B0aW9uIGFyZSByZXNldCBhbmQgbWFwcGluZyBpbiBpbnNlcnQKK21vZGUgYW5kIGFiYnJldmlhdGlvbiBhcmUgZGlzYWJsZWQuICBUaGlzIGFsbG93cyBmb3IgcGFzdGluZyB0ZXh0IGluIHdpbmRvd2luZworc3lzdGVtcyB3aXRob3V0IHVuZXhwZWN0ZWQgcmVzdWx0cy4gIFdoZW4gdGhlICdwYXN0ZScgb3B0aW9uIGlzIHJlc2V0LCB0aGUgb2xkCitvcHRpb24gdmFsdWVzIGFyZSByZXN0b3JlZC4KKworQ1RSTC1UL0NUUkwtRCBhbHdheXMgaW5zZXJ0L2RlbGV0ZSBhbiBpbmRlbnQgaW4gdGhlIGN1cnJlbnQgbGluZSwgbm8gbWF0dGVyCit3aGF0IGNvbHVtbiB0aGUgY3Vyc29yIGlzIGluLgorCitDVFJMLUAgKGluc2VydCBwcmV2aW91c2x5IGluc2VydGVkIHRleHQpIHdvcmtzIGFsd2F5cyAoVmk6IG9ubHkgd2hlbiB0eXBlZCBhcworZmlyc3QgY2hhcmFjdGVyKS4KKworQ1RSTC1BIHdvcmtzIGxpa2UgQ1RSTC1AIGJ1dCBkb2VzIG5vdCBsZWF2ZSBpbnNlcnQgbW9kZS4KKworQ1RSTC1SIHswLTlhLXouLn0gY2FuIGJlIHVzZWQgdG8gaW5zZXJ0IHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyLgorCitXaGVuIHRoZSAnc21hcnRpbmRlbnQnIG9wdGlvbiBpcyBzZXQsIEMgcHJvZ3JhbXMgd2lsbCBiZSBiZXR0ZXIgYXV0by1pbmRlbnRlZC4KK1dpdGggJ2NpbmRlbnQnIGV2ZW4gbW9yZS4KKworQ1RSTC1ZIGFuZCBDVFJMLUUgY2FuIGJlIHVzZWQgdG8gY29weSBhIGNoYXJhY3RlciBmcm9tIGFib3ZlL2JlbG93IHRoZQorY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisKK0FmdGVyIENUUkwtViB5b3UgY2FuIGVudGVyIGEgdGhyZWUgZGlnaXQgZGVjaW1hbCBudW1iZXIuICBUaGlzIGJ5dGUgdmFsdWUgaXMKK2luc2VydGVkIGluIHRoZSB0ZXh0IGFzIGEgc2luZ2xlIGNoYXJhY3Rlci4gIFVzZWZ1bCBmb3IgaW50ZXJuYXRpb25hbAorY2hhcmFjdGVycyB0aGF0IGFyZSBub3Qgb24geW91ciBrZXlib2FyZC4KKworV2hlbiB0aGUgJ2V4cGFuZHRhYicgKGV0KSBvcHRpb24gaXMgc2V0LCBhIDxUYWI+IGlzIGV4cGFuZGVkIHRvIHRoZQorYXBwcm9wcmlhdGUgbnVtYmVyIG9mIHNwYWNlcy4KKworVGhlIHdpbmRvdyBhbHdheXMgcmVmbGVjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgKFZpIGRvZXMgbm90IGRvIHRoaXMKK3doZW4gY2hhbmdpbmcgdGV4dCBhbmQgaW4gc29tZSBvdGhlciBjYXNlcykuCisKK0lmIFZpbSBpcyBjb21waWxlZCB3aXRoIERJR1JBUEhTIGRlZmluZWQsIGRpZ3JhcGhzIGFyZSBzdXBwb3J0ZWQuICBBIHNldCBvZgorbm9ybWFsIGRpZ3JhcGhzIGlzIGluY2x1ZGVkLiAgVGhleSBhcmUgc2hvd24gd2l0aCB0aGUgIjpkaWdyYXBoIiBjb21tYW5kLgorTW9yZSBjYW4gYmUgYWRkZWQgd2l0aCAiOmRpZ3JhcGgge2NoYXIxfXtjaGFyMn0ge251bWJlcn0iLiAgQSBkaWdyYXBoIGlzCitlbnRlcmVkIHdpdGggIkNUUkwtSyB7Y2hhcjF9IHtjaGFyMn0iIG9yICJ7Y2hhcjF9IEJTIHtjaGFyMn0iIChvbmx5IHdoZW4KKydkaWdyYXBoJyBvcHRpb24gaXMgc2V0KS4KKworV2hlbiByZXBlYXRpbmcgYW4gaW5zZXJ0LCBlLmcuICIxMGF0ZXN0IDxFc2M+IiB2aSB3b3VsZCBvbmx5IGhhbmRsZSB3cmFwbWFyZ2luCitmb3IgdGhlIGZpcnN0IGluc2VydC4gIFZpbSBkb2VzIGl0IGZvciBhbGwuCisKK0EgY291bnQgdG8gdGhlICJpIiBvciAiYSIgY29tbWFuZCBpcyB1c2VkIGZvciBhbGwgdGhlIHRleHQuICBWaSB1c2VzIHRoZSBjb3VudAorb25seSBmb3Igb25lIGxpbmUuICAiM2lhYmM8Tkw+ZGVmPEVzYz4iIHdvdWxkIGluc2VydCAiYWJjYWJjYWJjPE5MPmRlZiIgaW4gVmkKK2J1dCAiYWJjPE5MPmRlZmFiYzxOTD5kZWZhYmM8Tkw+ZGVmIiBpbiBWaW0uCisKKworSW4gQ29tbWFuZC1saW5lIG1vZGU6CisKKzxFc2M+IHRlcm1pbmF0ZXMgdGhlIGNvbW1hbmQtbGluZSB3aXRob3V0IGV4ZWN1dGluZyBpdC4gSW4gdmkgdGhlIGNvbW1hbmQKK2xpbmUgd291bGQgYmUgZXhlY3V0ZWQsIHdoaWNoIGlzIG5vdCB3aGF0IG1vc3QgcGVvcGxlIGV4cGVjdCAoaGl0dGluZyA8RXNjPgorc2hvdWxkIGFsd2F5cyBnZXQgeW91IGJhY2sgdG8gY29tbWFuZCBtb2RlKS4gIFRvIGF2b2lkIHByb2JsZW1zIHdpdGggc29tZQorb2JzY3VyZSBtYWNyb3MsIGFuIDxFc2M+IGluIGEgbWFjcm8gd2lsbCBleGVjdXRlIHRoZSBjb21tYW5kLiAgSWYgeW91IHdhbnQgYQordHlwZWQgPEVzYz4gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCBsaWtlIHZpIGRvZXMgeW91IGNhbiBmaXggdGhpcyB3aXRoCisJIjpjbWFwIF5WPEVzYz4gXlY8Q1I+IgorCitHZW5lcmFsOgorCitUaGUgJ3R0aW1lb3V0JyBvcHRpb24gaXMgbGlrZSAndGltZW91dCcsIGJ1dCBvbmx5IHdvcmtzIGZvciBjdXJzb3IgYW5kCitmdW5jdGlvbiBrZXlzLCBub3QgZm9yIG9yZGluYXJ5IG1hcHBlZCBjaGFyYWN0ZXJzLiAgVGhlICd0aW1lb3V0bGVuJyBvcHRpb24KK2dpdmVzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaXMgd2FpdGVkIGZvci4gIElmIHRoZSAnZXNja2V5cycgb3B0aW9uCitpcyBub3Qgc2V0LCBjdXJzb3IgYW5kIGZ1bmN0aW9uIGtleXMgdGhhdCBzdGFydCB3aXRoIDxFc2M+IGFyZSBub3QgcmVjb2duaXplZAoraW4gaW5zZXJ0IG1vZGUuCisKK1RoZXJlIGlzIGFuIG9wdGlvbiBmb3IgZWFjaCB0ZXJtaW5hbCBzdHJpbmcuICBDYW4gYmUgdXNlZCB3aGVuIHRlcm1jYXAgaXMgbm90CitzdXBwb3J0ZWQgb3IgdG8gY2hhbmdlIGluZGl2aWR1YWwgc3RyaW5ncy4KKworVGhlICdmaWxlZm9ybWF0JyBvcHRpb24gY2FuIGJlIHNldCB0byBzZWxlY3QgdGhlIDxFT0w+OiAiZG9zIiA8Q1I+PE5MPiwgInVuaXgiCis8Tkw+IG9yICJtYWMiIDxDUj4uCitXaGVuIHRoZSAnZmlsZWZvcm1hdHMnIG9wdGlvbiBpcyBub3QgZW1wdHksIFZpbSB0cmllcyB0byBkZXRlY3QgdGhlIHR5cGUgb2YKKzxFT0w+IGF1dG9tYXRpY2FsbHkuICBUaGUgJ2ZpbGVmb3JtYXQnIG9wdGlvbiBpcyBzZXQgYWNjb3JkaW5nbHkuCisKK09uIHN5c3RlbXMgdGhhdCBoYXZlIG5vIGpvYiBjb250cm9sIChvbGRlciBVbml4IHN5c3RlbXMgYW5kIG5vbi1Vbml4IHN5c3RlbXMpCit0aGUgQ1RSTC1aLCAiOnN0b3AiIG9yICI6c3VzcGVuZCIgY29tbWFuZCBzdGFydHMgYSBuZXcgc2hlbGwuCisKK0lmIFZpbSBpcyBzdGFydGVkIG9uIHRoZSBBbWlnYSB3aXRob3V0IGFuIGludGVyYWN0aXZlIHdpbmRvdyBmb3Igb3V0cHV0LCBhCit3aW5kb3cgaXMgb3BlbmVkIChhbmQgOnNoIHN0aWxsIHdvcmtzKS4gIFlvdSBjYW4gZ2l2ZSBhIGRldmljZSB0byB1c2UgZm9yCitlZGl0aW5nIHdpdGggdGhlIHwtZHwgYXJndW1lbnQsIGUuZy4gIi1kIGNvbjoyMC8yMC82MDAvMTUwIi4KKworVGhlICdjb2x1bW5zJyBhbmQgJ2xpbmVzJyBvcHRpb25zIGFyZSB1c2VkIHRvIHNldCBvciBnZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQKK29mIHRoZSBkaXNwbGF5LgorCitPcHRpb24gc2V0dGluZ3MgYXJlIHJlYWQgZnJvbSB0aGUgZmlyc3QgYW5kIGxhc3QgZmV3IGxpbmVzIG9mIHRoZSBmaWxlLgorT3B0aW9uICdtb2RlbGluZXMnIGRldGVybWluZXMgaG93IG1hbnkgbGluZXMgYXJlIHRyaWVkIChkZWZhdWx0IGlzIDUpLiAgTm90ZQordGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBWaSB2ZXJzaW9ucyB0aGF0IGNhbiBleGVjdXRlIGFueSBFeCBjb21tYW5kCitpbiBhIG1vZGVsaW5lIChhIG1ham9yIHNlY3VyaXR5IHByb2JsZW0pLiAgfHRyb2phbi1ob3JzZXwKKworSWYgdGhlICdpbnNlcnRtb2RlJyBvcHRpb24gaXMgc2V0IChlLmcuIGluIC5leHJjKSwgVmltIHN0YXJ0cyBpbiBpbnNlcnQgbW9kZS4KK0FuZCBpdCBjb21lcyBiYWNrIHRoZXJlLCB3aGVuIHByZXNzaW5nIDxFc2M+LgorCitVbmRvIGluZm9ybWF0aW9uIGlzIGtlcHQgaW4gbWVtb3J5LiAgQXZhaWxhYmxlIG1lbW9yeSBsaW1pdHMgdGhlIG51bWJlciBhbmQKK3NpemUgb2YgY2hhbmdlIHRoYXQgY2FuIGJlIHVuZG9uZS4gIFRoaXMgbWF5IGJlIGEgcHJvYmxlbSB3aXRoIE1TLURPUywgaXMKK2hhcmRseSBhIHByb2JsZW0gb24gdGhlIEFtaWdhIGFuZCBhbG1vc3QgbmV2ZXIgd2l0aCBVbml4IGFuZCBXaW4zMi4KKworSWYgdGhlICdiYWNrdXAnIG9yICd3cml0ZWJhY2t1cCcgb3B0aW9uIGlzIHNldDogQmVmb3JlIGEgZmlsZSBpcyBvdmVyd3JpdHRlbiwKK2EgYmFja3VwIGZpbGUgKC5iYWspIGlzIG1hZGUuICBJZiB0aGUgImJhY2t1cCIgb3B0aW9uIGlzIHNldCBpdCBpcyBsZWZ0CitiZWhpbmQuCisKK1ZpbSBjcmVhdGVzIGEgZmlsZSBlbmRpbmcgaW4gIi5zd3AiIHRvIHN0b3JlIHBhcnRzIG9mIHRoZSBmaWxlIHRoYXQgaGF2ZSBiZWVuCitjaGFuZ2VkIG9yIHRoYXQgZG8gbm90IGZpdCBpbiBtZW1vcnkuICBUaGlzIGZpbGUgY2FuIGJlIHVzZWQgdG8gcmVjb3ZlciBmcm9tCithbiBhYm9ydGVkIGVkaXRpbmcgc2Vzc2lvbiB3aXRoICJ2aW0gLXIgZmlsZSIuICBVc2luZyB0aGUgc3dhcCBmaWxlIGNhbiBiZQorc3dpdGNoZWQgb2ZmIGJ5IHNldHRpbmcgdGhlICd1cGRhdGVjb3VudCcgb3B0aW9uIHRvIDAgb3Igc3RhcnRpbmcgVmltIHdpdGgKK3RoZSAiLW4iIG9wdGlvbi4gIFVzZSB0aGUgJ2RpcmVjdG9yeScgb3B0aW9uIGZvciBwbGFjaW5nIHRoZSAuc3dwIGZpbGUKK3NvbWV3aGVyZSBlbHNlLgorCitWaW0gaXMgYWJsZSB0byB3b3JrIGNvcnJlY3RseSBvbiBmaWxlc3lzdGVtcyB3aXRoIDguMyBmaWxlIG5hbWVzLCBhbHNvIHdoZW4KK3VzaW5nIG1lc3N5ZG9zIG9yIGNyb3NzZG9zIGZpbGVzeXN0ZW1zIG9uIHRoZSBBbWlnYSwgb3IgYW55IDguMyBtb3VudGVkCitmaWxlc3lzdGVtIHVuZGVyIFVuaXguICBTZWUgfCdzaG9ydG5hbWUnfC4KKworRXJyb3IgbWVzc2FnZXMgYXJlIHNob3duIGF0IGxlYXN0IG9uZSBzZWNvbmQgKFZpIG92ZXJ3cml0ZXMgZXJyb3IgbWVzc2FnZXMpLgorCitJZiBWaW0gZ2l2ZXMgdGhlIHxoaXQtZW50ZXJ8IHByb21wdCwgeW91IGNhbiBoaXQgYW55IGtleS4gIENoYXJhY3RlcnMgb3RoZXIKK3RoYW4gPENSPiwgPE5MPiBhbmQgPFNwYWNlPiBhcmUgaW50ZXJwcmV0ZWQgYXMgdGhlIChzdGFydCBvZikgYSBjb21tYW5kLiAgKFZpCitvbmx5IGFjY2VwdHMgYSBjb21tYW5kIHN0YXJ0aW5nIHdpdGggJzonKS4KKworVGhlIGNvbnRlbnRzIG9mIHRoZSBudW1iZXJlZCBhbmQgdW5uYW1lZCByZWdpc3RlcnMgaXMgcmVtZW1iZXJlZCB3aGVuCitjaGFuZ2luZyBmaWxlcy4KKworVGhlICJObyBsaW5lcyBpbiBidWZmZXIiIG1lc3NhZ2UgaXMgYSBub3JtYWwgbWVzc2FnZSBpbnN0ZWFkIG9mIGFuIGVycm9yCittZXNzYWdlLCBzaW5jZSB0aGF0IG1heSBjYXVzZSBhIG1hcHBpbmcgdG8gYmUgYWJvcnRlZC4KKworVGhlIEFVWDogZGV2aWNlIG9mIHRoZSBBbWlnYSBpcyBzdXBwb3J0ZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gQ29tbWFuZC1saW5lIGFyZ3VtZW50cwkJCQkqY21kbGluZS1hcmd1bWVudHMqCisKK0RpZmZlcmVudCB2ZXJzaW9ucyBvZiBWaSBoYXZlIGRpZmZlcmVudCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLiAgVGhpcyBjYW4gYmUKK2NvbmZ1c2luZy4gIFRvIGhlbHAgeW91LCB0aGlzIHNlY3Rpb24gZ2l2ZXMgYW4gb3ZlcnZpZXcgb2YgdGhlIGRpZmZlcmVuY2VzLgorCitGaXZlIHZhcmlhbnRzIG9mIFZpIHdpbGwgYmUgY29uc2lkZXJlZCBoZXJlOgorCUVsdmlzCUVsdmlzIHZlcnNpb24gMi4xYgorCU52aQlOdmkgdmVyc2lvbiAxLjc5CisJUG9zaXgJUG9zaXggMTAwMy4yCisJVmkJVmkgdmVyc2lvbiAzLjcgKGZvciBTdW4gNC4xLngpCisJVmlsZQlWaWxlIHZlcnNpb24gNy40IChpbmNvbXBsZXRlKQorCVZpbQlWaW0gdmVyc2lvbiA1LjIKKworT25seSBWaW0gaXMgYWJsZSB0byBhY2NlcHQgb3B0aW9ucyBpbiBiZXR3ZWVuIGFuZCBhZnRlciB0aGUgZmlsZSBuYW1lcy4KKworK3tjb21tYW5kfQlFbHZpcywgTnZpLCBQb3NpeCwgVmksIFZpbTogU2FtZSBhcyAiLWMge2NvbW1hbmR9Ii4KKworLQkJTnZpLCBQb3NpeCwgVmk6IFJ1biBFeCBpbiBiYXRjaCBtb2RlLgorCQlWaW06IFJlYWQgZmlsZSBmcm9tIHN0ZGluICh1c2UgLXMgZm9yIGJhdGNoIG1vZGUpLgorCistLQkJVmltOiBFbmQgb2Ygb3B0aW9ucywgb25seSBmaWxlIG5hbWVzIGFyZSBmb2xsb3dpbmcuCisKKy0tY21kIHtjb21tYW5kfQlWaW06IGV4ZWN1dGUge2NvbW1hbmR9IGJlZm9yZSBzb3VyY2luZyB2aW1yYyBmaWxlcy4KKworLS1lY2hvLXdpZAlWaW06IEdUSysgZWNob2VzIHRoZSBXaW5kb3cgSUQgb24gc3Rkb3V0CisKKy0taGVscAkJVmltOiBzaG93IGhlbHAgbWVzc2FnZSBhbmQgZXhpdC4KKworLS1saXRlcmFsCVZpbTogdGFrZSBmaWxlIG5hbWVzIGxpdGVyYWxseSwgZG9uJ3QgZXhwYW5kIHdpbGRjYXJkcy4KKworLS1ub2ZvcmsJVmltOiBzYW1lIGFzIHwtZnwKKworLS1ub3BsdWdpbltzXQlWaW06IFNraXAgbG9hZGluZyBwbHVnaW5zLgorCistLXJlbW90ZQlWaW06IGVkaXQgdGhlIGZpbGVzIGluIGFub3RoZXIgVmltIHNlcnZlcgorCistLXJlbW90ZS1leHByIHtleHByfQlWaW06IGV2YWx1YXRlIHtleHByfSBpbiBhbm90aGVyIFZpbSBzZXJ2ZXIKKworLS1yZW1vdGUtc2VuZCB7a2V5c30JVmltOiBzZW5kIHtrZXlzfSB0byBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQKKworLS1yZW1vdGUtc2lsZW50IHtmaWxlfQlWaW06IGVkaXQgdGhlIGZpbGVzIGluIGFub3RoZXIgVmltIHNlcnZlciBpZiBwb3NzaWJsZQorCistLXJlbW90ZS13YWl0CVZpbTogZWRpdCB0aGUgZmlsZXMgaW4gYW5vdGhlciBWaW0gc2VydmVyIGFuZCB3YWl0IGZvciBpdAorCistLXJlbW90ZS13YWl0LXNpbGVudAlWaW06IGxpa2UgLS1yZW1vdGUtd2FpdCwgbm8gY29tcGxhaW50cyBpZiBub3QgcG9zc2libGUKKworLS1yb2xlIHtyb2xlfQlWaW06IEdUSysgMjogc2V0IHJvbGUgb2YgbWFpbiB3aW5kb3cKKworLS1zZXJ2ZXJsaXN0CVZpbTogT3V0cHV0IGEgbGlzdCBvZiBWaW0gc2VydmVycyBhbmQgZXhpdAorCistLXNlcnZlcm5hbWUge25hbWV9CVZpbTogU3BlY2lmeSBWaW0gc2VydmVyIG5hbWUKKworLS1zb2NrZXRpZCB7aWR9CQlWaW06IEdUSyB3aW5kb3cgc29ja2V0IHRvIHJ1biBWaW0gaW4KKworLS12ZXJzaW9uCVZpbTogc2hvdyB2ZXJzaW9uIG1lc3NhZ2UgYW5kIGV4aXQuCisKKy0/CQlWaWxlOiBwcmludCB1c2FnZSBzdW1tYXJ5IGFuZCBleGl0LgorCistYQkJRWx2aXM6IExvYWQgYWxsIHNwZWNpZmllZCBmaWxlIG5hbWVzIGludG8gYSB3aW5kb3cgKHVzZSAtbyBmb3IKKwkJVmltKS4KKworLUEJCVZpbTogU3RhcnQgaW4gQXJhYmljIG1vZGUgKHdoZW4gY29tcGlsZWQgd2l0aCBBcmFiaWMpLgorCistYiB7Ymxrc2l6ZX0JRWx2aXM6IFVzZSB7Ymxrc2l6ZX0gYmxvY2tzaXplIGZvciB0aGUgc2Vzc2lvbiBmaWxlLgorLWIJCVZpbTogc2V0ICdiaW5hcnknIG1vZGUuCisKKy1DCQlWaW06IENvbXBhdGlibGUgbW9kZS4KKworLWMge2NvbW1hbmR9CUVsdmlzLCBOdmksIFBvc2l4LCBWaW06IHJ1biB7Y29tbWFuZH0gYXMgYW4gRXggY29tbWFuZCBhZnRlcgorCQlsb2FkaW5nIHRoZSBlZGl0IGJ1ZmZlci4KKwkJVmltOiBhbGxvdyB1cCB0byAxMCAiLWMiIGFyZ3VtZW50cworCistZCB7ZGV2aWNlfQlWaW06IFVzZSB7ZGV2aWNlfSBmb3IgSS9PIChBbWlnYSBvbmx5KS4ge29ubHkgd2hlbiBjb21waWxlZAorCQl3aXRob3V0IHRoZSB8K2RpZmZ8IGZlYXR1cmV9CistZAkJVmltOiBzdGFydCB3aXRoICdkaWZmJyBzZXQuIHx2aW1kaWZmfAorCistZGV2IHtkZXZpY2V9CVZpbTogVXNlIHtkZXZpY2V9IGZvciBJL08gKEFtaWdhIG9ubHkpLgorCistRAkJVmltOiBkZWJ1ZyBtb2RlLgorCistZQkJRWx2aXMsIE52aSwgVmltOiBTdGFydCBpbiBFeCBtb2RlLCBhcyBpZiB0aGUgZXhlY3V0YWJsZSBpcworCQljYWxsZWQgImV4Ii4KKworLUUJCVZpbTogU3RhcnQgaW4gaW1wcm92ZWQgRXggbW9kZSB8Z1F8LCBsaWtlICJleGltIi4KKworLWYJCVZpbTogUnVuIEdVSSBpbiBmb3JlZ3JvdW5kIChBbWlnYTogZG9uJ3Qgb3BlbiBuZXcgd2luZG93KS4KKy1mIHtzZXNzaW9ufQlFbHZpczogVXNlIHtzZXNzaW9ufSBhcyB0aGUgc2Vzc2lvbiBmaWxlLgorCistRgkJVmltOiBTdGFydCBpbiBGYXJzaSBtb2RlICh3aGVuIGNvbXBpbGVkIHdpdGggRmFyc2kpLgorCQlOdmk6IEZhc3Qgc3RhcnQsIGRvbid0IHJlYWQgdGhlIGVudGlyZSBmaWxlIHdoZW4gZWRpdGluZworCQlzdGFydHMuCisKKy1HIHtndWl9CUVsdmlzOiBVc2UgdGhlIHtndWl9IGFzIHVzZXIgaW50ZXJmYWNlLgorCistZwkJVmltOiBTdGFydCBHVUkuCistZyBOCQlWaWxlOiBzdGFydCBlZGl0aW5nIGF0IGxpbmUgTgorCistaAkJVmltOiBHaXZlIGhlbHAgbWVzc2FnZS4KKwkJVmlsZTogZWRpdCB0aGUgaGVscCBmaWxlCisKKy1ICQlWaW06IHN0YXJ0IEhlYnJldyBtb2RlICh3aGVuIGNvbXBpbGVkIHdpdGggaXQpLgorCistaQkJRWx2aXM6IFN0YXJ0IGVhY2ggd2luZG93IGluIEluc2VydCBtb2RlLgorLWkge3ZpbWluZm99CVZpbTogVXNlIHt2aW1pbmZvfSBmb3IgdmltaW5mbyBmaWxlLgorCistTAkJVmltOiBTYW1lIGFzICItciIgKGFsc28gaW4gc29tZSB2ZXJzaW9ucyBvZiBWaSkuCisKKy1sCQlOdmksIFZpLCBWaW06IFNldCAnbGlzcCcgYW5kICdzaG93bWF0Y2gnIG9wdGlvbnMuCisKKy1tCQlWaW06IE1vZGlmaWNhdGlvbnMgbm90IGFsbG93ZWQgdG8gYmUgd3JpdHRlbiwgcmVzZXRzICd3cml0ZScKKwkJb3B0aW9uLgorCistTQkJVmltOiBNb2RpZmljYXRpb25zIG5vdCBhbGxvd2VkLCByZXNldHMgJ21vZGlmaWFibGUnIGFuZCB0aGUKKwkJJ3dyaXRlJyBvcHRpb24uCisKKy1OCQlWaW06IE5vLWNvbXBhdGlibGUgbW9kZS4KKworLW4JCVZpbTogTm8gc3dhcCBmaWxlIHVzZWQuCisKKy1uYlthcmdzXQlWaW06IG9wZW4gYSBOZXRCZWFucyBpbnRlcmZhY2UgY29ubmVjdGlvbgorCistT1tOXQkJVmltOiBMaWtlIC1vLCBidXQgdXNlIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cy4KKworLW9bTl0JCVZpbTogT3BlbiBbTl0gd2luZG93cywgb3Igb25lIGZvciBlYWNoIGZpbGUuCisKKy1QIHtwYXJlbnQtdGl0bGV9IFdpbjMyIFZpbTogb3BlbiBWaW0gaW5zaWRlIGEgcGFyZW50IGFwcGxpY2F0aW9uIHdpbmRvdworCistcSB7bmFtZX0JVmltOiBVc2Uge25hbWV9IGZvciBxdWlja2ZpeCBlcnJvciBmaWxlLgorLXF7bmFtZX0JVmltOiBJZGVtLgorCistUgkJRWx2aXMsIE52aSwgUG9zaXgsIFZpbGUsIFZpbTogU2V0IHRoZSAncmVhZG9ubHknIG9wdGlvbi4KKworLXIJCUVsdmlzLCBOdmksIFBvc2l4LCBWaSwgVmltOiBSZWNvdmVyeSBtb2RlLgorCistUwkJTnZpOiBTZXQgJ3NlY3VyZScgb3B0aW9uLgorLVMge3NjcmlwdH0JVmltOiBzb3VyY2Ugc2NyaXB0IGFmdGVyIHN0YXJ0aW5nIHVwLgorCistcwkJTnZpLCBQb3NpeCwgVmltOiBTYW1lIGFzICItIiAoc2lsZW50IG1vZGUpLCB3aGVuIGluIEV4IG1vZGUuCisJCUVsdmlzOiBTZXRzIHRoZSAnc2FmZXInIG9wdGlvbi4KKy1zIHtzY3JpcHRpbn0JVmltOiBSZWFkIGZyb20gc2NyaXB0IGZpbGUge3NjcmlwdGlufTsgb25seSB3aGVuIG5vdCBpbiBFeAorCQltb2RlLgorLXMge3BhdHRlcm59CVZpbGU6IHNlYXJjaCBmb3Ige3BhdHRlcm59CisKKy10IHt0YWd9CUVsdmlzLCBOdmksIFBvc2l4LCBWaSwgVmltOiBFZGl0IHRoZSBmaWxlIGNvbnRhaW5pbmcge3RhZ30uCistdHt0YWd9CQlWaW06IElkZW0uCisKKy1UIHt0ZXJtfQlWaW06IFNldCB0ZXJtaW5hbCBuYW1lIHRvIHt0ZXJtfS4KKworLXUge3ZpbXJjfQlWaW06IFJlYWQgaW5pdGlhbGl6YXRpb25zIGZyb20ge3ZpbXJjfSBmaWxlLgorCistVSB7Z3ZpbXJjfQlWaW06IFJlYWQgR1VJIGluaXRpYWxpemF0aW9ucyBmcm9tIHtndmltcmN9IGZpbGUuCisKKy12CQlOdmksIFBvc2l4LCBWaSwgVmltOiBCZWdpbiBpbiBOb3JtYWwgbW9kZSAodmlzdWFsIG1vZGUsIGluIFZpCisJCXRlcm1zKS4KKwkJVmlsZTogVmlldyBtb2RlLCBubyBjaGFuZ2VzIHBvc3NpYmxlLgorCistVgkJRWx2aXMsIFZpbTogVmVyYm9zZSBtb2RlLgorLVZ7bnJ9CQlWaW06IFZlcmJvc2UgbW9kZSB3aXRoIHNwZWNpZmllZCBsZXZlbC4KKworLXcge3NpemV9CUVsdmlzLCBQb3NpeCwgTnZpLCBWaSwgVmltOiBTZXQgdmFsdWUgb2YgJ3dpbmRvdycgdG8ge3NpemV9LgorLXd7c2l6ZX0JTnZpLCBWaTogU2FtZSBhcyAiLXcge3NpemV9Ii4KKy13IHtuYW1lfQlWaW06IFdyaXRlIHRvIHNjcmlwdCBmaWxlIHtuYW1lfSAobXVzdCBzdGFydCB3aXRoIG5vbi1kaWdpdCkuCisKKy1XIHtuYW1lfQlWaW06IEFwcGVuZCB0byBzY3JpcHQgZmlsZSB7bmFtZX0uCisKKy14CQlWaSwgVmltOiBBc2sgZm9yIGVuY3J5cHRpb24ga2V5LiAgU2VlIHxlbmNyeXB0aW9ufC4KKworLVgJCVZpbTogRG9uJ3QgY29ubmVjdCB0byB0aGUgWCBzZXJ2ZXIuCisKKy15CQlWaW06IFN0YXJ0IGluIGVhc3kgbW9kZSwgbGlrZSB8ZXZpbXwuCisKKy1aCQlWaW06IHJlc3RyaWN0ZWQgbW9kZQorCitAe2NtZGZpbGV9CVZpbGU6IHVzZSB7Y21kZmlsZX0gYXMgc3RhcnR1cCBmaWxlLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmltLjEgYi9ydW50aW1lL2RvYy92aW0uMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWZhNTRhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmltLjEKQEAgLTAsMCArMSw1NDEgQEAKKy5USCBWSU0gMSAiMjAwMiBGZWIgMjIiCisuU0ggTkFNRQordmltIFwtIFZpIElNcHJvdmVkLCBhIHByb2dyYW1tZXJzIHRleHQgZWRpdG9yCisuU0ggU1lOT1BTSVMKKy5icgorLkIgdmltCitbb3B0aW9uc10gW2ZpbGUgLi5dCisuYnIKKy5CIHZpbQorW29wdGlvbnNdIC0KKy5icgorLkIgdmltCitbb3B0aW9uc10gXC10IHRhZworLmJyCisuQiB2aW0KK1tvcHRpb25zXSBcLXEgW2Vycm9yZmlsZV0KKy5QUAorLmJyCisuQiBleAorLmJyCisuQiB2aWV3CisuYnIKKy5CIGd2aW0KKy5CIGd2aWV3CisuQiBldmltCisuQiBldmlldworLmJyCisuQiBydmltCisuQiBydmlldworLkIgcmd2aW0KKy5CIHJndmlldworLlNIIERFU0NSSVBUSU9OCisuQiBWaW0KK2lzIGEgdGV4dCBlZGl0b3IgdGhhdCBpcyB1cHdhcmRzIGNvbXBhdGlibGUgdG8gVmkuCitJdCBjYW4gYmUgdXNlZCB0byBlZGl0IGFsbCBraW5kcyBvZiBwbGFpbiB0ZXh0LgorSXQgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yIGVkaXRpbmcgcHJvZ3JhbXMuCisuUFAKK1RoZXJlIGFyZSBhIGxvdCBvZiBlbmhhbmNlbWVudHMgYWJvdmUgVmk6IG11bHRpIGxldmVsIHVuZG8sCittdWx0aSB3aW5kb3dzIGFuZCBidWZmZXJzLCBzeW50YXggaGlnaGxpZ2h0aW5nLCBjb21tYW5kIGxpbmUKK2VkaXRpbmcsIGZpbGVuYW1lIGNvbXBsZXRpb24sIG9uLWxpbmUgaGVscCwgdmlzdWFsIHNlbGVjdGlvbiwgZXRjLi4KK1NlZSAiOmhlbHAgdmlfZGlmZi50eHQiIGZvciBhIHN1bW1hcnkgb2YgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4KKy5CIFZpbQorYW5kIFZpLgorLlBQCitXaGlsZSBydW5uaW5nCisuQiBWaW0KK2EgbG90IG9mIGhlbHAgY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIG9uLWxpbmUgaGVscCBzeXN0ZW0sIHdpdGggdGhlICI6aGVscCIKK2NvbW1hbmQuCitTZWUgdGhlIE9OLUxJTkUgSEVMUCBzZWN0aW9uIGJlbG93LgorLlBQCitNb3N0IG9mdGVuCisuQiBWaW0KK2lzIHN0YXJ0ZWQgdG8gZWRpdCBhIHNpbmdsZSBmaWxlIHdpdGggdGhlIGNvbW1hbmQKKy5QUAorCXZpbSBmaWxlCisuUFAKK01vcmUgZ2VuZXJhbGx5CisuQiBWaW0KK2lzIHN0YXJ0ZWQgd2l0aDoKKy5QUAorCXZpbSBbb3B0aW9uc10gW2ZpbGVsaXN0XQorLlBQCitJZiB0aGUgZmlsZWxpc3QgaXMgbWlzc2luZywgdGhlIGVkaXRvciB3aWxsIHN0YXJ0IHdpdGggYW4gZW1wdHkgYnVmZmVyLgorT3RoZXJ3aXNlIGV4YWN0bHkgb25lIG91dCBvZiB0aGUgZm9sbG93aW5nIGZvdXIgbWF5IGJlIHVzZWQgdG8gY2hvb3NlIG9uZSBvcgorbW9yZSBmaWxlcyB0byBiZSBlZGl0ZWQuCisuVFAgMTIKK2ZpbGUgLi4KK0EgbGlzdCBvZiBmaWxlbmFtZXMuCitUaGUgZmlyc3Qgb25lIHdpbGwgYmUgdGhlIGN1cnJlbnQgZmlsZSBhbmQgcmVhZCBpbnRvIHRoZSBidWZmZXIuCitUaGUgY3Vyc29yIHdpbGwgYmUgcG9zaXRpb25lZCBvbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgYnVmZmVyLgorWW91IGNhbiBnZXQgdG8gdGhlIG90aGVyIGZpbGVzIHdpdGggdGhlICI6bmV4dCIgY29tbWFuZC4KK1RvIGVkaXQgYSBmaWxlIHRoYXQgc3RhcnRzIHdpdGggYSBkYXNoLCBwcmVjZWRlIHRoZSBmaWxlbGlzdCB3aXRoICItLSIuCisuVFAKKy0KK1RoZSBmaWxlIHRvIGVkaXQgaXMgcmVhZCBmcm9tIHN0ZGluLiAgQ29tbWFuZHMgYXJlIHJlYWQgZnJvbSBzdGRlcnIsIHdoaWNoCitzaG91bGQgYmUgYSB0dHkuCisuVFAKKy10IHt0YWd9CitUaGUgZmlsZSB0byBlZGl0IGFuZCB0aGUgaW5pdGlhbCBjdXJzb3IgcG9zaXRpb24gZGVwZW5kcyBvbiBhICJ0YWciLCBhIHNvcnQKK29mIGdvdG8gbGFiZWwuCit7dGFnfSBpcyBsb29rZWQgdXAgaW4gdGhlIHRhZ3MgZmlsZSwgdGhlIGFzc29jaWF0ZWQgZmlsZSBiZWNvbWVzIHRoZSBjdXJyZW50CitmaWxlIGFuZCB0aGUgYXNzb2NpYXRlZCBjb21tYW5kIGlzIGV4ZWN1dGVkLgorTW9zdGx5IHRoaXMgaXMgdXNlZCBmb3IgQyBwcm9ncmFtcywgaW4gd2hpY2ggY2FzZSB7dGFnfSBjb3VsZCBiZSBhIGZ1bmN0aW9uCituYW1lLgorVGhlIGVmZmVjdCBpcyB0aGF0IHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhhdCBmdW5jdGlvbiBiZWNvbWVzIHRoZSBjdXJyZW50IGZpbGUKK2FuZCB0aGUgY3Vyc29yIGlzIHBvc2l0aW9uZWQgb24gdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbi4KK1NlZSAiOmhlbHAgdGFnLWNvbW1hbmRzIi4KKy5UUAorLXEgW2Vycm9yZmlsZV0KK1N0YXJ0IGluIHF1aWNrRml4IG1vZGUuCitUaGUgZmlsZSBbZXJyb3JmaWxlXSBpcyByZWFkIGFuZCB0aGUgZmlyc3QgZXJyb3IgaXMgZGlzcGxheWVkLgorSWYgW2Vycm9yZmlsZV0gaXMgb21pdHRlZCwgdGhlIGZpbGVuYW1lIGlzIG9idGFpbmVkIGZyb20gdGhlICdlcnJvcmZpbGUnCitvcHRpb24gKGRlZmF1bHRzIHRvICJBenRlY0MuRXJyIiBmb3IgdGhlIEFtaWdhLCAiZXJyb3JzLmVyciIgb24gb3RoZXIKK3N5c3RlbXMpLgorRnVydGhlciBlcnJvcnMgY2FuIGJlIGp1bXBlZCB0byB3aXRoIHRoZSAiOmNuIiBjb21tYW5kLgorU2VlICI6aGVscCBxdWlja2ZpeCIuCisuUFAKKy5CIFZpbQorYmVoYXZlcyBkaWZmZXJlbnRseSwgZGVwZW5kaW5nIG9uIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kICh0aGUgZXhlY3V0YWJsZSBtYXkKK3N0aWxsIGJlIHRoZSBzYW1lIGZpbGUpLgorLlRQIDEwCit2aW0KK1RoZSAibm9ybWFsIiB3YXksIGV2ZXJ5dGhpbmcgaXMgZGVmYXVsdC4KKy5UUAorZXgKK1N0YXJ0IGluIEV4IG1vZGUuCitHbyB0byBOb3JtYWwgbW9kZSB3aXRoIHRoZSAiOnZpIiBjb21tYW5kLgorQ2FuIGFsc28gYmUgZG9uZSB3aXRoIHRoZSAiLWUiIGFyZ3VtZW50LgorLlRQCit2aWV3CitTdGFydCBpbiByZWFkLW9ubHkgbW9kZS4gIFlvdSB3aWxsIGJlIHByb3RlY3RlZCBmcm9tIHdyaXRpbmcgdGhlIGZpbGVzLiAgQ2FuCithbHNvIGJlIGRvbmUgd2l0aCB0aGUgIi1SIiBhcmd1bWVudC4KKy5UUAorZ3ZpbSBndmlldworVGhlIEdVSSB2ZXJzaW9uLgorU3RhcnRzIGEgbmV3IHdpbmRvdy4KK0NhbiBhbHNvIGJlIGRvbmUgd2l0aCB0aGUgIi1nIiBhcmd1bWVudC4KKy5UUAorZXZpbSBldmlldworVGhlIEdVSSB2ZXJzaW9uIGluIGVhc3kgbW9kZS4KK1N0YXJ0cyBhIG5ldyB3aW5kb3cuCitDYW4gYWxzbyBiZSBkb25lIHdpdGggdGhlICIteSIgYXJndW1lbnQuCisuVFAKK3J2aW0gcnZpZXcgcmd2aW0gcmd2aWV3CitMaWtlIHRoZSBhYm92ZSwgYnV0IHdpdGggcmVzdHJpY3Rpb25zLiAgSXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gc3RhcnQgc2hlbGwKK2NvbW1hbmRzLCBvciBzdXNwZW5kCisuQiBWaW0uCitDYW4gYWxzbyBiZSBkb25lIHdpdGggdGhlICItWiIgYXJndW1lbnQuCisuU0ggT1BUSU9OUworVGhlIG9wdGlvbnMgbWF5IGJlIGdpdmVuIGluIGFueSBvcmRlciwgYmVmb3JlIG9yIGFmdGVyIGZpbGVuYW1lcy4KK09wdGlvbnMgd2l0aG91dCBhbiBhcmd1bWVudCBjYW4gYmUgY29tYmluZWQgYWZ0ZXIgYSBzaW5nbGUgZGFzaC4KKy5UUCAxMgorK1tudW1dCitGb3IgdGhlIGZpcnN0IGZpbGUgdGhlIGN1cnNvciB3aWxsIGJlIHBvc2l0aW9uZWQgb24gbGluZSAibnVtIi4KK0lmICJudW0iIGlzIG1pc3NpbmcsIHRoZSBjdXJzb3Igd2lsbCBiZSBwb3NpdGlvbmVkIG9uIHRoZSBsYXN0IGxpbmUuCisuVFAKKysve3BhdH0KK0ZvciB0aGUgZmlyc3QgZmlsZSB0aGUgY3Vyc29yIHdpbGwgYmUgcG9zaXRpb25lZCBvbiB0aGUKK2ZpcnN0IG9jY3VycmVuY2Ugb2Yge3BhdH0uCitTZWUgIjpoZWxwIHNlYXJjaC1wYXR0ZXJuIiBmb3IgdGhlIGF2YWlsYWJsZSBzZWFyY2ggcGF0dGVybnMuCisuVFAKKyt7Y29tbWFuZH0KKy5UUAorLWMge2NvbW1hbmR9Cit7Y29tbWFuZH0gd2lsbCBiZSBleGVjdXRlZCBhZnRlciB0aGUKK2ZpcnN0IGZpbGUgaGFzIGJlZW4gcmVhZC4KK3tjb21tYW5kfSBpcyBpbnRlcnByZXRlZCBhcyBhbiBFeCBjb21tYW5kLgorSWYgdGhlIHtjb21tYW5kfSBjb250YWlucyBzcGFjZXMgaXQgbXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzICh0aGlzCitkZXBlbmRzIG9uIHRoZSBzaGVsbCB0aGF0IGlzIHVzZWQpLgorRXhhbXBsZTogVmltICIrc2V0IHNpIiBtYWluLmMKKy5icgorTm90ZTogWW91IGNhbiB1c2UgdXAgdG8gMTAgIisiIG9yICItYyIgY29tbWFuZHMuCisuVFAKKy1TIHtmaWxlfQore2ZpbGV9IHdpbGwgYmUgc291cmNlZCBhZnRlciB0aGUgZmlyc3QgZmlsZSBoYXMgYmVlbiByZWFkLgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIC1jICJzb3VyY2Uge2ZpbGV9Ii4KK3tmaWxlfSBjYW5ub3Qgc3RhcnQgd2l0aCAnLScuCitJZiB7ZmlsZX0gaXMgb21pdHRlZCAiU2Vzc2lvbi52aW0iIGlzIHVzZWQgKG9ubHkgd29ya3Mgd2hlbiAtUyBpcyB0aGUgbGFzdAorYXJndW1lbnQpLgorLlRQCistLWNtZCB7Y29tbWFuZH0KK0xpa2UgdXNpbmcgIi1jIiwgYnV0IHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIGp1c3QgYmVmb3JlCitwcm9jZXNzaW5nIGFueSB2aW1yYyBmaWxlLgorWW91IGNhbiB1c2UgdXAgdG8gMTAgb2YgdGhlc2UgY29tbWFuZHMsIGluZGVwZW5kZW50bHkgZnJvbSAiLWMiIGNvbW1hbmRzLgorLlRQCistQQorSWYKKy5CIFZpbQoraGFzIGJlZW4gY29tcGlsZWQgd2l0aCBBUkFCSUMgc3VwcG9ydCBmb3IgZWRpdGluZyByaWdodC10by1sZWZ0CitvcmllbnRlZCBmaWxlcyBhbmQgQXJhYmljIGtleWJvYXJkIG1hcHBpbmcsIHRoaXMgb3B0aW9uIHN0YXJ0cworLkIgVmltCitpbiBBcmFiaWMgbW9kZSwgaS5lLiAnYXJhYmljJyBpcyBzZXQuICBPdGhlcndpc2UgYW4gZXJyb3IKK21lc3NhZ2UgaXMgZ2l2ZW4gYW5kCisuQiBWaW0KK2Fib3J0cy4KKy5UUAorLWIKK0JpbmFyeSBtb2RlLgorQSBmZXcgb3B0aW9ucyB3aWxsIGJlIHNldCB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGVkaXQgYSBiaW5hcnkgb3IKK2V4ZWN1dGFibGUgZmlsZS4KKy5UUAorLUMKK0NvbXBhdGlibGUuICBTZXQgdGhlICdjb21wYXRpYmxlJyBvcHRpb24uCitUaGlzIHdpbGwgbWFrZQorLkIgVmltCitiZWhhdmUgbW9zdGx5IGxpa2UgVmksIGV2ZW4gdGhvdWdoIGEgLnZpbXJjIGZpbGUgZXhpc3RzLgorLlRQCistZAorU3RhcnQgaW4gZGlmZiBtb2RlLgorVGhlcmUgc2hvdWxkIGJlIHR3byBvciB0aHJlZSBmaWxlIG5hbWUgYXJndW1lbnRzLgorLkIgVmltCit3aWxsIG9wZW4gYWxsIHRoZSBmaWxlcyBhbmQgc2hvdyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZW0uCitXb3JrcyBsaWtlIHZpbWRpZmYoMSkuCisuVFAKKy1kIHtkZXZpY2V9CitPcGVuIHtkZXZpY2V9IGZvciB1c2UgYXMgYSB0ZXJtaW5hbC4KK09ubHkgb24gdGhlIEFtaWdhLgorRXhhbXBsZToKKyJcLWQgY29uOjIwLzMwLzYwMC8xNTAiLgorLlRQCistRAorRGVidWdnaW5nLiAgR28gdG8gZGVidWdnaW5nIG1vZGUgd2hlbiBleGVjdXRpbmcgdGhlIGZpcnN0IGNvbW1hbmQgZnJvbSBhCitzY3JpcHQuCisuVFAKKy1lCitTdGFydAorLkIgVmltCitpbiBFeCBtb2RlLCBqdXN0IGxpa2UgdGhlIGV4ZWN1dGFibGUgd2FzIGNhbGxlZCAiZXgiLgorLlRQCistRQorU3RhcnQKKy5CIFZpbQoraW4gaW1wcm92ZWQgRXggbW9kZSwganVzdCBsaWtlIHRoZSBleGVjdXRhYmxlIHdhcyBjYWxsZWQgImV4aW0iLgorLlRQCistZgorRm9yZWdyb3VuZC4gIEZvciB0aGUgR1VJIHZlcnNpb24sCisuQiBWaW0KK3dpbGwgbm90IGZvcmsgYW5kIGRldGFjaCBmcm9tIHRoZSBzaGVsbCBpdCB3YXMgc3RhcnRlZCBpbi4KK09uIHRoZSBBbWlnYSwKKy5CIFZpbQoraXMgbm90IHJlc3RhcnRlZCB0byBvcGVuIGEgbmV3IHdpbmRvdy4KK1RoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIHdoZW4KKy5CIFZpbQoraXMgZXhlY3V0ZWQgYnkgYSBwcm9ncmFtIHRoYXQgd2lsbCB3YWl0IGZvciB0aGUgZWRpdAorc2Vzc2lvbiB0byBmaW5pc2ggKGUuZy4gbWFpbCkuCitPbiB0aGUgQW1pZ2EgdGhlICI6c2giIGFuZCAiOiEiIGNvbW1hbmRzIHdpbGwgbm90IHdvcmsuCisuVFAKKy0tbm9mb3JrCitGb3JlZ3JvdW5kLiAgRm9yIHRoZSBHVUkgdmVyc2lvbiwKKy5CIFZpbQord2lsbCBub3QgZm9yayBhbmQgZGV0YWNoIGZyb20gdGhlIHNoZWxsIGl0IHdhcyBzdGFydGVkIGluLgorLlRQCistRgorSWYKKy5CIFZpbQoraGFzIGJlZW4gY29tcGlsZWQgd2l0aCBGS01BUCBzdXBwb3J0IGZvciBlZGl0aW5nIHJpZ2h0LXRvLWxlZnQKK29yaWVudGVkIGZpbGVzIGFuZCBGYXJzaSBrZXlib2FyZCBtYXBwaW5nLCB0aGlzIG9wdGlvbiBzdGFydHMKKy5CIFZpbQoraW4gRmFyc2kgbW9kZSwgaS5lLiAnZmttYXAnIGFuZCAncmlnaHRsZWZ0JyBhcmUgc2V0LgorT3RoZXJ3aXNlIGFuIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4gYW5kCisuQiBWaW0KK2Fib3J0cy4KKy5UUAorLWcKK0lmCisuQiBWaW0KK2hhcyBiZWVuIGNvbXBpbGVkIHdpdGggR1VJIHN1cHBvcnQsIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEdVSS4KK0lmIG5vIEdVSSBzdXBwb3J0IHdhcyBjb21waWxlZCBpbiwgYW4gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbiBhbmQKKy5CIFZpbQorYWJvcnRzLgorLlRQCistaAorR2l2ZSBhIGJpdCBvZiBoZWxwIGFib3V0IHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBvcHRpb25zLgorQWZ0ZXIgdGhpcworLkIgVmltCitleGl0cy4KKy5UUAorLUgKK0lmCisuQiBWaW0KK2hhcyBiZWVuIGNvbXBpbGVkIHdpdGggUklHSFRMRUZUIHN1cHBvcnQgZm9yIGVkaXRpbmcgcmlnaHQtdG8tbGVmdAorb3JpZW50ZWQgZmlsZXMgYW5kIEhlYnJldyBrZXlib2FyZCBtYXBwaW5nLCB0aGlzIG9wdGlvbiBzdGFydHMKKy5CIFZpbQoraW4gSGVicmV3IG1vZGUsIGkuZS4gJ2hrbWFwJyBhbmQgJ3JpZ2h0bGVmdCcgYXJlIHNldC4KK090aGVyd2lzZSBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuIGFuZAorLkIgVmltCithYm9ydHMuCisuVFAKKy1pIHt2aW1pbmZvfQorV2hlbiB1c2luZyB0aGUgdmltaW5mbyBmaWxlIGlzIGVuYWJsZWQsIHRoaXMgb3B0aW9uIHNldHMgdGhlIGZpbGVuYW1lIHRvIHVzZSwKK2luc3RlYWQgb2YgdGhlIGRlZmF1bHQgIn4vLnZpbWluZm8iLgorVGhpcyBjYW4gYWxzbyBiZSB1c2VkIHRvIHNraXAgdGhlIHVzZSBvZiB0aGUgLnZpbWluZm8gZmlsZSwgYnkgZ2l2aW5nIHRoZSBuYW1lCisiTk9ORSIuCisuVFAKKy1MCitTYW1lIGFzIC1yLgorLlRQCistbAorTGlzcCBtb2RlLgorU2V0cyB0aGUgJ2xpc3AnIGFuZCAnc2hvd21hdGNoJyBvcHRpb25zIG9uLgorLlRQCistbQorTW9kaWZ5aW5nIGZpbGVzIGlzIGRpc2FibGVkLgorUmVzZXRzIHRoZSAnd3JpdGUnIG9wdGlvbi4KK1lvdSBjYW4gc3RpbGwgbW9kaWZ5IHRoZSBidWZmZXIsIGJ1dCB3cml0aW5nIGEgZmlsZSBpcyBub3QgcG9zc2libGUuCisuVFAKKy1NCitNb2RpZmljYXRpb25zIG5vdCBhbGxvd2VkLiAgVGhlICdtb2RpZmlhYmxlJyBhbmQgJ3dyaXRlJyBvcHRpb25zIHdpbGwgYmUgdW5zZXQsCitzbyB0aGF0IGNoYW5nZXMgYXJlIG5vdCBhbGxvd2VkIGFuZCBmaWxlcyBjYW4gbm90IGJlIHdyaXR0ZW4uICBOb3RlIHRoYXQgdGhlc2UKK29wdGlvbnMgY2FuIGJlIHNldCB0byBlbmFibGUgbWFraW5nIG1vZGlmaWNhdGlvbnMuCisuVFAKKy1OCitOby1jb21wYXRpYmxlIG1vZGUuICBSZXNldCB0aGUgJ2NvbXBhdGlibGUnIG9wdGlvbi4KK1RoaXMgd2lsbCBtYWtlCisuQiBWaW0KK2JlaGF2ZSBhIGJpdCBiZXR0ZXIsIGJ1dCBsZXNzIFZpIGNvbXBhdGlibGUsIGV2ZW4gdGhvdWdoIGEgLnZpbXJjIGZpbGUgZG9lcworbm90IGV4aXN0LgorLlRQCistbgorTm8gc3dhcCBmaWxlIHdpbGwgYmUgdXNlZC4KK1JlY292ZXJ5IGFmdGVyIGEgY3Jhc2ggd2lsbCBiZSBpbXBvc3NpYmxlLgorSGFuZHkgaWYgeW91IHdhbnQgdG8gZWRpdCBhIGZpbGUgb24gYSB2ZXJ5IHNsb3cgbWVkaXVtIChlLmcuIGZsb3BweSkuCitDYW4gYWxzbyBiZSBkb25lIHdpdGggIjpzZXQgdWM9MCIuCitDYW4gYmUgdW5kb25lIHdpdGggIjpzZXQgdWM9MjAwIi4KKy5UUAorLW5iCitCZWNvbWUgYW4gZWRpdG9yIHNlcnZlciBmb3IgTmV0QmVhbnMuICBTZWUgdGhlIGRvY3MgZm9yIGRldGFpbHMuCisuVFAKKy1vW05dCitPcGVuIE4gd2luZG93cyBzdGFja2VkLgorV2hlbiBOIGlzIG9taXR0ZWQsIG9wZW4gb25lIHdpbmRvdyBmb3IgZWFjaCBmaWxlLgorLlRQCistT1tOXQorT3BlbiBOIHdpbmRvd3Mgc2lkZSBieSBzaWRlLgorV2hlbiBOIGlzIG9taXR0ZWQsIG9wZW4gb25lIHdpbmRvdyBmb3IgZWFjaCBmaWxlLgorLlRQCistUgorUmVhZC1vbmx5IG1vZGUuCitUaGUgJ3JlYWRvbmx5JyBvcHRpb24gd2lsbCBiZSBzZXQuCitZb3UgY2FuIHN0aWxsIGVkaXQgdGhlIGJ1ZmZlciwgYnV0IHdpbGwgYmUgcHJldmVudGVkIGZyb20gYWNjaWRlbnRseQorb3ZlcndyaXRpbmcgYSBmaWxlLgorSWYgeW91IGRvIHdhbnQgdG8gb3ZlcndyaXRlIGEgZmlsZSwgYWRkIGFuIGV4Y2xhbWF0aW9uIG1hcmsgdG8gdGhlIEV4IGNvbW1hbmQsCithcyBpbiAiOnchIi4KK1RoZSAtUiBvcHRpb24gYWxzbyBpbXBsaWVzIHRoZSAtbiBvcHRpb24gKHNlZSBiZWxvdykuCitUaGUgJ3JlYWRvbmx5JyBvcHRpb24gY2FuIGJlIHJlc2V0IHdpdGggIjpzZXQgbm9ybyIuCitTZWUgIjpoZWxwICdyZWFkb25seSciLgorLlRQCistcgorTGlzdCBzd2FwIGZpbGVzLCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIHRoZW0gZm9yIHJlY292ZXJ5LgorLlRQCistciB7ZmlsZX0KK1JlY292ZXJ5IG1vZGUuCitUaGUgc3dhcCBmaWxlIGlzIHVzZWQgdG8gcmVjb3ZlciBhIGNyYXNoZWQgZWRpdGluZyBzZXNzaW9uLgorVGhlIHN3YXAgZmlsZSBpcyBhIGZpbGUgd2l0aCB0aGUgc2FtZSBmaWxlbmFtZSBhcyB0aGUgdGV4dCBmaWxlIHdpdGggIi5zd3AiCithcHBlbmRlZC4KK1NlZSAiOmhlbHAgcmVjb3ZlcnkiLgorLlRQCistcworU2lsZW50IG1vZGUuICBPbmx5IHdoZW4gc3RhcnRlZCBhcyAiRXgiIG9yIHdoZW4gdGhlICItZSIgb3B0aW9uIHdhcyBnaXZlbgorYmVmb3JlIHRoZSAiLXMiIG9wdGlvbi4KKy5UUAorLXMge3NjcmlwdGlufQorVGhlIHNjcmlwdCBmaWxlIHtzY3JpcHRpbn0gaXMgcmVhZC4KK1RoZSBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIGFyZSBpbnRlcnByZXRlZCBhcyBpZiB5b3UgaGFkIHR5cGVkIHRoZW0uCitUaGUgc2FtZSBjYW4gYmUgZG9uZSB3aXRoIHRoZSBjb21tYW5kICI6c291cmNlISB7c2NyaXB0aW59Ii4KK0lmIHRoZSBlbmQgb2YgdGhlIGZpbGUgaXMgcmVhY2hlZCBiZWZvcmUgdGhlIGVkaXRvciBleGl0cywgZnVydGhlciBjaGFyYWN0ZXJzCithcmUgcmVhZCBmcm9tIHRoZSBrZXlib2FyZC4KKy5UUAorLVQge3Rlcm1pbmFsfQorVGVsbHMKKy5CIFZpbQordGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsIHlvdSBhcmUgdXNpbmcuCitPbmx5IHJlcXVpcmVkIHdoZW4gdGhlIGF1dG9tYXRpYyB3YXkgZG9lc24ndCB3b3JrLgorU2hvdWxkIGJlIGEgdGVybWluYWwga25vd24KK3RvCisuQiBWaW0KKyhidWlsdGluKSBvciBkZWZpbmVkIGluIHRoZSB0ZXJtY2FwIG9yIHRlcm1pbmZvIGZpbGUuCisuVFAKKy11IHt2aW1yY30KK1VzZSB0aGUgY29tbWFuZHMgaW4gdGhlIGZpbGUge3ZpbXJjfSBmb3IgaW5pdGlhbGl6YXRpb25zLgorQWxsIHRoZSBvdGhlciBpbml0aWFsaXphdGlvbnMgYXJlIHNraXBwZWQuCitVc2UgdGhpcyB0byBlZGl0IGEgc3BlY2lhbCBraW5kIG9mIGZpbGVzLgorSXQgY2FuIGFsc28gYmUgdXNlZCB0byBza2lwIGFsbCBpbml0aWFsaXphdGlvbnMgYnkgZ2l2aW5nIHRoZSBuYW1lICJOT05FIi4KK1NlZSAiOmhlbHAgaW5pdGlhbGl6YXRpb24iIHdpdGhpbiB2aW0gZm9yIG1vcmUgZGV0YWlscy4KKy5UUAorLVUge2d2aW1yY30KK1VzZSB0aGUgY29tbWFuZHMgaW4gdGhlIGZpbGUge2d2aW1yY30gZm9yIEdVSSBpbml0aWFsaXphdGlvbnMuCitBbGwgdGhlIG90aGVyIEdVSSBpbml0aWFsaXphdGlvbnMgYXJlIHNraXBwZWQuCitJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHNraXAgYWxsIEdVSSBpbml0aWFsaXphdGlvbnMgYnkgZ2l2aW5nIHRoZSBuYW1lICJOT05FIi4KK1NlZSAiOmhlbHAgZ3VpLWluaXQiIHdpdGhpbiB2aW0gZm9yIG1vcmUgZGV0YWlscy4KKy5UUAorLVZbTl0KK1ZlcmJvc2UuICBHaXZlIG1lc3NhZ2VzIGFib3V0IHdoaWNoIGZpbGVzIGFyZSBzb3VyY2VkIGFuZCBmb3IgcmVhZGluZyBhbmQKK3dyaXRpbmcgYSB2aW1pbmZvIGZpbGUuICBUaGUgb3B0aW9uYWwgbnVtYmVyIE4gaXMgdGhlIHZhbHVlIGZvciAndmVyYm9zZScuCitEZWZhdWx0IGlzIDEwLgorLlRQCistdgorU3RhcnQKKy5CIFZpbQoraW4gVmkgbW9kZSwganVzdCBsaWtlIHRoZSBleGVjdXRhYmxlIHdhcyBjYWxsZWQgInZpIi4gIFRoaXMgb25seSBoYXMgZWZmZWN0Cit3aGVuIHRoZSBleGVjdXRhYmxlIGlzIGNhbGxlZCAiZXgiLgorLlRQCistdyB7c2NyaXB0b3V0fQorQWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgeW91IHR5cGUgYXJlIHJlY29yZGVkIGluIHRoZSBmaWxlCit7c2NyaXB0b3V0fSwgdW50aWwgeW91IGV4aXQKKy5CIFZpbS4KK1RoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIHNjcmlwdCBmaWxlIHRvIGJlIHVzZWQgd2l0aCAidmltIC1zIiBvcgorIjpzb3VyY2UhIi4KK0lmIHRoZSB7c2NyaXB0b3V0fSBmaWxlIGV4aXN0cywgY2hhcmFjdGVycyBhcmUgYXBwZW5kZWQuCisuVFAKKy1XIHtzY3JpcHRvdXR9CitMaWtlIC13LCBidXQgYW4gZXhpc3RpbmcgZmlsZSBpcyBvdmVyd3JpdHRlbi4KKy5UUAorLXgKK1VzZSBlbmNyeXB0aW9uIHdoZW4gd3JpdGluZyBmaWxlcy4gICBXaWxsIHByb21wdCBmb3IgYSBjcnlwdCBrZXkuCisuVFAKKy1YCitEb24ndCBjb25uZWN0IHRvIHRoZSBYIHNlcnZlci4gIFNob3J0ZW5zIHN0YXJ0dXAgdGltZSBpbiBhIHRlcm1pbmFsLCBidXQgdGhlCit3aW5kb3cgdGl0bGUgYW5kIGNsaXBib2FyZCB3aWxsIG5vdCBiZSB1c2VkLgorLlRQCisteQorU3RhcnQKKy5CIFZpbQoraW4gZWFzeSBtb2RlLCBqdXN0IGxpa2UgdGhlIGV4ZWN1dGFibGUgd2FzIGNhbGxlZCAiZXZpbSIgb3IgImV2aWV3Ii4KK01ha2VzCisuQiBWaW0KK2JlaGF2ZSBsaWtlIGEgY2xpY2stYW5kLXR5cGUgZWRpdG9yLgorLlRQCistWgorUmVzdHJpY3RlZCBtb2RlLiAgV29ya3MgbGlrZSB0aGUgZXhlY3V0YWJsZSBzdGFydHMgd2l0aCAiciIuCisuVFAKKy0tCitEZW5vdGVzIHRoZSBlbmQgb2YgdGhlIG9wdGlvbnMuCitBcmd1bWVudHMgYWZ0ZXIgdGhpcyB3aWxsIGJlIGhhbmRsZWQgYXMgYSBmaWxlIG5hbWUuCitUaGlzIGNhbiBiZSB1c2VkIHRvIGVkaXQgYSBmaWxlbmFtZSB0aGF0IHN0YXJ0cyB3aXRoIGEgJy0nLgorLlRQCistLWVjaG8td2lkCitHVEsgR1VJIG9ubHk6IEVjaG8gdGhlIFdpbmRvdyBJRCBvbiBzdGRvdXQKKy5UUAorLS1oZWxwCitHaXZlIGEgaGVscCBtZXNzYWdlIGFuZCBleGl0LCBqdXN0IGxpa2UgIi1oIi4KKy5UUAorLS1saXRlcmFsCitUYWtlIGZpbGUgbmFtZSBhcmd1bWVudHMgbGl0ZXJhbGx5LCBkbyBub3QgZXhwYW5kIHdpbGRjYXJkcy4gIE5vdCBuZWVkZWQgb24KK1VuaXgsIHRoZSBzaGVsbCBleHBhbmQgd2lsZGNhcmRzLgorLlRQCistLW5vcGx1Z2luCitTa2lwIGxvYWRpbmcgcGx1Z2lucy4gIEltcGxpZWQgYnkgLXUgTk9ORS4KKy5UUAorLS1yZW1vdGUKK0Nvbm5lY3QgdG8gYSBWaW0gc2VydmVyIGFuZCBtYWtlIGl0IGVkaXQgdGhlIGZpbGVzIGdpdmVuIGluIHRoZSByZXN0IG9mIHRoZQorYXJndW1lbnRzLiAgSWYgbm8gc2VydmVyIGlzIGZvdW5kIGEgd2FybmluZyBpcyBnaXZlbiBhbmQgdGhlIGZpbGVzIGFyZSBlZGl0ZWQKK2luIHRoZSBjdXJyZW50IFZpbS4KKy5UUAorLS1yZW1vdGUtZXhwciB7ZXhwcn0KK0Nvbm5lY3QgdG8gYSBWaW0gc2VydmVyLCBldmFsdWF0ZSB7ZXhwcn0gaW4gaXQgYW5kIHByaW50IHRoZSByZXN1bHQgb24gc3Rkb3V0LgorLlRQCistLXJlbW90ZS1zZW5kIHtrZXlzfQorQ29ubmVjdCB0byBhIFZpbSBzZXJ2ZXIgYW5kIHNlbmQge2tleXN9IHRvIGl0LgorLlRQCistLXJlbW90ZS1zaWxlbnQKK0FzIC0tcmVtb3RlLCBidXQgd2l0aG91dCB0aGUgd2FybmluZyB3aGVuIG5vIHNlcnZlciBpcyBmb3VuZC4KKy5UUAorLS1yZW1vdGUtd2FpdAorQXMgLS1yZW1vdGUsIGJ1dCBWaW0gZG9lcyBub3QgZXhpdCB1bnRpbCB0aGUgZmlsZXMgaGF2ZSBiZWVuIGVkaXRlZC4KKy5UUAorLS1yZW1vdGUtd2FpdC1zaWxlbnQKK0FzIC0tcmVtb3RlLXdhaXQsIGJ1dCB3aXRob3V0IHRoZSB3YXJuaW5nIHdoZW4gbm8gc2VydmVyIGlzIGZvdW5kLgorLlRQCistLXNlcnZlcmxpc3QKK0xpc3QgdGhlIG5hbWVzIG9mIGFsbCBWaW0gc2VydmVycyB0aGF0IGNhbiBiZSBmb3VuZC4KKy5UUAorLS1zZXJ2ZXJuYW1lIHtuYW1lfQorVXNlIHtuYW1lfSBhcyB0aGUgc2VydmVyIG5hbWUuICBVc2VkIGZvciB0aGUgY3VycmVudCBWaW0sIHVubGVzcyB1c2VkIHdpdGggYQorLS1yZW1vdGUgYXJndW1lbnQsIHRoZW4gaXQncyB0aGUgbmFtZSBvZiB0aGUgc2VydmVyIHRvIGNvbm5lY3QgdG8uCisuVFAKKy0tc29ja2V0aWQge2lkfQorR1RLIEdVSSBvbmx5OiBVc2UgdGhlIEd0a1BsdWcgbWVjaGFuaXNtIHRvIHJ1biBndmltIGluIGFub3RoZXIgd2luZG93LgorLlRQCistLXZlcnNpb24KK1ByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuCisuU0ggT04tTElORSBIRUxQCitUeXBlICI6aGVscCIgaW4KKy5CIFZpbQordG8gZ2V0IHN0YXJ0ZWQuCitUeXBlICI6aGVscCBzdWJqZWN0IiB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIHN1YmplY3QuCitGb3IgZXhhbXBsZTogIjpoZWxwIFpaIiB0byBnZXQgaGVscCBmb3IgdGhlICJaWiIgY29tbWFuZC4KK1VzZSA8VGFiPiBhbmQgQ1RSTC1EIHRvIGNvbXBsZXRlIHN1YmplY3RzICgiOmhlbHAgY21kbGluZS1jb21wbGV0aW9uIikuCitUYWdzIGFyZSBwcmVzZW50IHRvIGp1bXAgZnJvbSBvbmUgcGxhY2UgdG8gYW5vdGhlciAoc29ydCBvZiBoeXBlcnRleHQgbGlua3MsCitzZWUgIjpoZWxwIikuCitBbGwgZG9jdW1lbnRhdGlvbiBmaWxlcyBjYW4gYmUgdmlld2VkIGluIHRoaXMgd2F5LCBmb3IgZXhhbXBsZQorIjpoZWxwIHN5bnRheC50eHQiLgorLlNIIEZJTEVTCisuVFAgMTUKKy91c3IvbG9jYWwvbGliL3ZpbS9kb2MvKi50eHQKK1RoZQorLkIgVmltCitkb2N1bWVudGF0aW9uIGZpbGVzLgorVXNlICI6aGVscCBkb2MtZmlsZS1saXN0IiB0byBnZXQgdGhlIGNvbXBsZXRlIGxpc3QuCisuVFAKKy91c3IvbG9jYWwvbGliL3ZpbS9kb2MvdGFncworVGhlIHRhZ3MgZmlsZSB1c2VkIGZvciBmaW5kaW5nIGluZm9ybWF0aW9uIGluIHRoZSBkb2N1bWVudGF0aW9uIGZpbGVzLgorLlRQCisvdXNyL2xvY2FsL2xpYi92aW0vc3ludGF4L3N5bnRheC52aW0KK1N5c3RlbSB3aWRlIHN5bnRheCBpbml0aWFsaXphdGlvbnMuCisuVFAKKy91c3IvbG9jYWwvbGliL3ZpbS9zeW50YXgvKi52aW0KK1N5bnRheCBmaWxlcyBmb3IgdmFyaW91cyBsYW5ndWFnZXMuCisuVFAKKy91c3IvbG9jYWwvbGliL3ZpbS92aW1yYworU3lzdGVtIHdpZGUKKy5CIFZpbQoraW5pdGlhbGl6YXRpb25zLgorLlRQCisvdXNyL2xvY2FsL2xpYi92aW0vZ3ZpbXJjCitTeXN0ZW0gd2lkZSBndmltIGluaXRpYWxpemF0aW9ucy4KKy5UUAorL3Vzci9sb2NhbC9saWIvdmltL29wdHdpbi52aW0KK1NjcmlwdCB1c2VkIGZvciB0aGUgIjpvcHRpb25zIiBjb21tYW5kLCBhIG5pY2Ugd2F5IHRvIHZpZXcgYW5kIHNldCBvcHRpb25zLgorLlRQCisvdXNyL2xvY2FsL2xpYi92aW0vbWVudS52aW0KK1N5c3RlbSB3aWRlIG1lbnUgaW5pdGlhbGl6YXRpb25zIGZvciBndmltLgorLlRQCisvdXNyL2xvY2FsL2xpYi92aW0vYnVncmVwb3J0LnZpbQorU2NyaXB0IHRvIGdlbmVyYXRlIGEgYnVnIHJlcG9ydC4gIFNlZSAiOmhlbHAgYnVncyIuCisuVFAKKy91c3IvbG9jYWwvbGliL3ZpbS9maWxldHlwZS52aW0KK1NjcmlwdCB0byBkZXRlY3QgdGhlIHR5cGUgb2YgYSBmaWxlIGJ5IGl0cyBuYW1lLiAgU2VlICI6aGVscCAnZmlsZXR5cGUnIi4KKy5UUAorL3Vzci9sb2NhbC9saWIvdmltL3NjcmlwdHMudmltCitTY3JpcHQgdG8gZGV0ZWN0IHRoZSB0eXBlIG9mIGEgZmlsZSBieSBpdHMgY29udGVudHMuICBTZWUgIjpoZWxwICdmaWxldHlwZSciLgorLlRQCisvdXNyL2xvY2FsL2xpYi92aW0vKi5wcworRmlsZXMgdXNlZCBmb3IgUG9zdFNjcmlwdCBwcmludGluZy4KKy5QUAorRm9yIHJlY2VudCBpbmZvIHJlYWQgdGhlIFZJTSBob21lIHBhZ2U6CisuYnIKKzxVUkw6aHR0cDovL3d3dy52aW0ub3JnLz4KKy5TSCBTRUUgQUxTTwordmltdHV0b3IoMSkKKy5TSCBBVVRIT1IKK01vc3Qgb2YKKy5CIFZpbQord2FzIG1hZGUgYnkgQnJhbSBNb29sZW5hYXIsIHdpdGggYSBsb3Qgb2YgaGVscCBmcm9tIG90aGVycy4KK1NlZSAiOmhlbHAgY3JlZGl0cyIgaW4KKy5CIFZpbS4KKy5icgorLkIgVmltCitpcyBiYXNlZCBvbiBTdGV2aWUsIHdvcmtlZCBvbiBieTogVGltIFRob21wc29uLAorVG9ueSBBbmRyZXdzIGFuZCBHLlIuIChGcmVkKSBXYWx0ZXIuCitBbHRob3VnaCBoYXJkbHkgYW55IG9mIHRoZSBvcmlnaW5hbCBjb2RlIHJlbWFpbnMuCisuU0ggQlVHUworUHJvYmFibHkuCitTZWUgIjpoZWxwIHRvZG8iIGZvciBhIGxpc3Qgb2Yga25vd24gcHJvYmxlbXMuCisuUFAKK05vdGUgdGhhdCBhIG51bWJlciBvZiB0aGluZ3MgdGhhdCBtYXkgYmUgcmVnYXJkZWQgYXMgYnVncyBieSBzb21lLCBhcmUgaW4gZmFjdAorY2F1c2VkIGJ5IGEgdG9vLWZhaXRoZnVsIHJlcHJvZHVjdGlvbiBvZiBWaSdzIGJlaGF2aW91ci4KK0FuZCBpZiB5b3UgdGhpbmsgb3RoZXIgdGhpbmdzIGFyZSBidWdzICJiZWNhdXNlIFZpIGRvZXMgaXQgZGlmZmVyZW50bHkiLAoreW91IHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHZpX2RpZmYudHh0IGZpbGUgKG9yIHR5cGUgOmhlbHAKK3ZpX2RpZmYudHh0IHdoZW4gaW4gVmltKS4KK0Fsc28gaGF2ZSBhIGxvb2sgYXQgdGhlICdjb21wYXRpYmxlJyBhbmQgJ2Nwb3B0aW9ucycgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZpbS5tYW4gYi9ydW50aW1lL2RvYy92aW0ubWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzkyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy92aW0ubWFuCkBAIC0wLDAgKzEsNDIwIEBACitWSU0oMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSU0oMSkKKworCisKK05BTUUKKyAgICAgICB2aW0gLSBWaSBJTXByb3ZlZCwgYSBwcm9ncmFtbWVycyB0ZXh0IGVkaXRvcgorCitTWU5PUFNJUworICAgICAgIHZpbSBbb3B0aW9uc10gW2ZpbGUgLi5dCisgICAgICAgdmltIFtvcHRpb25zXSAtCisgICAgICAgdmltIFtvcHRpb25zXSAtdCB0YWcKKyAgICAgICB2aW0gW29wdGlvbnNdIC1xIFtlcnJvcmZpbGVdCisKKyAgICAgICBleAorICAgICAgIHZpZXcKKyAgICAgICBndmltIGd2aWV3IGV2aW0gZXZpZXcKKyAgICAgICBydmltIHJ2aWV3IHJndmltIHJndmlldworCitERVNDUklQVElPTgorICAgICAgIFZpbSAgaXMgYSB0ZXh0IGVkaXRvciB0aGF0IGlzIHVwd2FyZHMgY29tcGF0aWJsZSB0byBWaS4gIEl0IGNhbiBiZSB1c2VkCisgICAgICAgdG8gZWRpdCBhbGwga2luZHMgb2YgcGxhaW4gdGV4dC4gIEl0IGlzIGVzcGVjaWFsbHkgdXNlZnVsICBmb3IgIGVkaXRpbmcKKyAgICAgICBwcm9ncmFtcy4KKworICAgICAgIFRoZXJlICBhcmUgYSBsb3Qgb2YgZW5oYW5jZW1lbnRzIGFib3ZlIFZpOiBtdWx0aSBsZXZlbCB1bmRvLCBtdWx0aSB3aW4tCisgICAgICAgZG93cyBhbmQgYnVmZmVycywgc3ludGF4IGhpZ2hsaWdodGluZywgY29tbWFuZCBsaW5lICBlZGl0aW5nLCAgZmlsZW5hbWUKKyAgICAgICBjb21wbGV0aW9uLCAgIG9uLWxpbmUgICBoZWxwLCAgIHZpc3VhbCAgc2VsZWN0aW9uLCAgZXRjLi4gICBTZWUgICI6aGVscAorICAgICAgIHZpX2RpZmYudHh0IiBmb3IgYSBzdW1tYXJ5IG9mIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSBhbmQgVmkuCisKKyAgICAgICBXaGlsZSBydW5uaW5nIFZpbSBhIGxvdCBvZiBoZWxwIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSAgb24tbGluZSAgaGVscAorICAgICAgIHN5c3RlbSwgIHdpdGggdGhlICI6aGVscCIgY29tbWFuZC4gIFNlZSB0aGUgT04tTElORSBIRUxQIHNlY3Rpb24gYmVsb3cuCisKKyAgICAgICBNb3N0IG9mdGVuIFZpbSBpcyBzdGFydGVkIHRvIGVkaXQgYSBzaW5nbGUgZmlsZSB3aXRoIHRoZSBjb21tYW5kCisKKyAgICAgICAgICAgIHZpbSBmaWxlCisKKyAgICAgICBNb3JlIGdlbmVyYWxseSBWaW0gaXMgc3RhcnRlZCB3aXRoOgorCisgICAgICAgICAgICB2aW0gW29wdGlvbnNdIFtmaWxlbGlzdF0KKworICAgICAgIElmIHRoZSBmaWxlbGlzdCBpcyBtaXNzaW5nLCB0aGUgZWRpdG9yIHdpbGwgc3RhcnQgd2l0aCBhbiBlbXB0eSBidWZmZXIuCisgICAgICAgT3RoZXJ3aXNlICBleGFjdGx5ICBvbmUgb3V0IG9mIHRoZSBmb2xsb3dpbmcgZm91ciBtYXkgYmUgdXNlZCB0byBjaG9vc2UKKyAgICAgICBvbmUgb3IgbW9yZSBmaWxlcyB0byBiZSBlZGl0ZWQuCisKKyAgICAgICBmaWxlIC4uICAgICBBIGxpc3Qgb2YgZmlsZW5hbWVzLiAgVGhlIGZpcnN0IG9uZSAgd2lsbCAgYmUgIHRoZSAgY3VycmVudAorICAgICAgICAgICAgICAgICAgIGZpbGUgIGFuZCAgcmVhZCAgaW50byB0aGUgYnVmZmVyLiAgVGhlIGN1cnNvciB3aWxsIGJlIHBvc2ktCisgICAgICAgICAgICAgICAgICAgdGlvbmVkIG9uIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBidWZmZXIuICBZb3UgY2FuIGdldCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICBvdGhlciAgZmlsZXMgd2l0aCB0aGUgIjpuZXh0IiBjb21tYW5kLiAgVG8gZWRpdCBhIGZpbGUgdGhhdAorICAgICAgICAgICAgICAgICAgIHN0YXJ0cyB3aXRoIGEgZGFzaCwgcHJlY2VkZSB0aGUgZmlsZWxpc3Qgd2l0aCAiLS0iLgorCisgICAgICAgLSAgICAgICAgICAgVGhlIGZpbGUgdG8gZWRpdCBpcyByZWFkIGZyb20gIHN0ZGluLiAgIENvbW1hbmRzICBhcmUgIHJlYWQKKyAgICAgICAgICAgICAgICAgICBmcm9tIHN0ZGVyciwgd2hpY2ggc2hvdWxkIGJlIGEgdHR5LgorCisgICAgICAgLXQge3RhZ30gICAgVGhlIGZpbGUgdG8gZWRpdCBhbmQgdGhlIGluaXRpYWwgY3Vyc29yIHBvc2l0aW9uIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICAgICBhICJ0YWciLCBhIHNvcnQgb2YgZ290byBsYWJlbC4gIHt0YWd9IGlzIGxvb2tlZCB1cCAgaW4gIHRoZQorICAgICAgICAgICAgICAgICAgIHRhZ3MgZmlsZSwgdGhlIGFzc29jaWF0ZWQgZmlsZSBiZWNvbWVzIHRoZSBjdXJyZW50IGZpbGUgYW5kCisgICAgICAgICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgY29tbWFuZCBpcyBleGVjdXRlZC4gIE1vc3RseSAgdGhpcyAgaXMgIHVzZWQKKyAgICAgICAgICAgICAgICAgICBmb3IgIEMgIHByb2dyYW1zLCAgaW4gIHdoaWNoIGNhc2Uge3RhZ30gY291bGQgYmUgYSBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgIG5hbWUuICBUaGUgZWZmZWN0IGlzIHRoYXQgdGhlIGZpbGUgY29udGFpbmluZyB0aGF0IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgYmVjb21lcyAgdGhlICBjdXJyZW50ICBmaWxlIGFuZCB0aGUgY3Vyc29yIGlzIHBvc2l0aW9uZWQgb24KKyAgICAgICAgICAgICAgICAgICB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLiAgU2VlICI6aGVscCB0YWctY29tbWFuZHMiLgorCisgICAgICAgLXEgW2Vycm9yZmlsZV0KKyAgICAgICAgICAgICAgICAgICBTdGFydCBpbiBxdWlja0ZpeCBtb2RlLiAgVGhlIGZpbGUgW2Vycm9yZmlsZV0gaXMgIHJlYWQgIGFuZAorICAgICAgICAgICAgICAgICAgIHRoZSAgZmlyc3QgIGVycm9yIGlzIGRpc3BsYXllZC4gIElmIFtlcnJvcmZpbGVdIGlzIG9taXR0ZWQsCisgICAgICAgICAgICAgICAgICAgdGhlICBmaWxlbmFtZSAgaXMgIG9idGFpbmVkICBmcm9tICB0aGUgICdlcnJvcmZpbGUnICBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAoZGVmYXVsdHMgIHRvICAiQXp0ZWNDLkVyciIgIGZvciB0aGUgQW1pZ2EsICJlcnJvcnMuZXJyIiBvbgorICAgICAgICAgICAgICAgICAgIG90aGVyIHN5c3RlbXMpLiAgRnVydGhlciBlcnJvcnMgY2FuIGJlIGp1bXBlZCB0byAgd2l0aCAgdGhlCisgICAgICAgICAgICAgICAgICAgIjpjbiIgY29tbWFuZC4gIFNlZSAiOmhlbHAgcXVpY2tmaXgiLgorCisgICAgICAgVmltIGJlaGF2ZXMgZGlmZmVyZW50bHksIGRlcGVuZGluZyBvbiB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCAodGhlIGV4ZS0KKyAgICAgICBjdXRhYmxlIG1heSBzdGlsbCBiZSB0aGUgc2FtZSBmaWxlKS4KKworICAgICAgIHZpbSAgICAgICBUaGUgIm5vcm1hbCIgd2F5LCBldmVyeXRoaW5nIGlzIGRlZmF1bHQuCisKKyAgICAgICBleCAgICAgICAgU3RhcnQgaW4gRXggbW9kZS4gIEdvIHRvIE5vcm1hbCBtb2RlIHdpdGggdGhlICI6dmkiICBjb21tYW5kLgorICAgICAgICAgICAgICAgICBDYW4gYWxzbyBiZSBkb25lIHdpdGggdGhlICItZSIgYXJndW1lbnQuCisKKyAgICAgICB2aWV3ICAgICAgU3RhcnQgIGluIHJlYWQtb25seSBtb2RlLiAgWW91IHdpbGwgYmUgcHJvdGVjdGVkIGZyb20gd3JpdGluZworICAgICAgICAgICAgICAgICB0aGUgZmlsZXMuICBDYW4gYWxzbyBiZSBkb25lIHdpdGggdGhlICItUiIgYXJndW1lbnQuCisKKyAgICAgICBndmltIGd2aWV3CisgICAgICAgICAgICAgICAgIFRoZSBHVUkgdmVyc2lvbi4gIFN0YXJ0cyBhIG5ldyB3aW5kb3cuICBDYW4gYWxzbyBiZSBkb25lIHdpdGgKKyAgICAgICAgICAgICAgICAgdGhlICItZyIgYXJndW1lbnQuCisKKyAgICAgICBldmltIGV2aWV3CisgICAgICAgICAgICAgICAgIFRoZSBHVUkgdmVyc2lvbiBpbiBlYXN5IG1vZGUuICBTdGFydHMgYSBuZXcgd2luZG93LiAgQ2FuIGFsc28KKyAgICAgICAgICAgICAgICAgYmUgZG9uZSB3aXRoIHRoZSAiLXkiIGFyZ3VtZW50LgorCisgICAgICAgcnZpbSBydmlldyByZ3ZpbSByZ3ZpZXcKKyAgICAgICAgICAgICAgICAgTGlrZSB0aGUgYWJvdmUsIGJ1dCB3aXRoIHJlc3RyaWN0aW9ucy4gIEl0IHdpbGwgbm90IGJlIHBvc3NpLQorICAgICAgICAgICAgICAgICBibGUgIHRvICBzdGFydCAgc2hlbGwgIGNvbW1hbmRzLCBvciBzdXNwZW5kIFZpbS4gIENhbiBhbHNvIGJlCisgICAgICAgICAgICAgICAgIGRvbmUgd2l0aCB0aGUgIi1aIiBhcmd1bWVudC4KKworT1BUSU9OUworICAgICAgIFRoZSBvcHRpb25zIG1heSBiZSBnaXZlbiBpbiAgYW55ICBvcmRlciwgIGJlZm9yZSAgb3IgIGFmdGVyICBmaWxlbmFtZXMuCisgICAgICAgT3B0aW9ucyB3aXRob3V0IGFuIGFyZ3VtZW50IGNhbiBiZSBjb21iaW5lZCBhZnRlciBhIHNpbmdsZSBkYXNoLgorCisgICAgICAgK1tudW1dICAgICAgRm9yICB0aGUgIGZpcnN0ICBmaWxlIHRoZSBjdXJzb3Igd2lsbCBiZSBwb3NpdGlvbmVkIG9uIGxpbmUKKyAgICAgICAgICAgICAgICAgICAibnVtIi4gIElmICJudW0iIGlzIG1pc3NpbmcsIHRoZSBjdXJzb3Igd2lsbCBiZSAgcG9zaXRpb25lZAorICAgICAgICAgICAgICAgICAgIG9uIHRoZSBsYXN0IGxpbmUuCisKKyAgICAgICArL3twYXR9ICAgICBGb3IgIHRoZSAgZmlyc3QgIGZpbGUgIHRoZSBjdXJzb3Igd2lsbCBiZSBwb3NpdGlvbmVkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgIGZpcnN0IG9jY3VycmVuY2Ugb2Yge3BhdH0uICBTZWUgIjpoZWxwIHNlYXJjaC1wYXR0ZXJuIiAgZm9yCisgICAgICAgICAgICAgICAgICAgdGhlIGF2YWlsYWJsZSBzZWFyY2ggcGF0dGVybnMuCisKKyAgICAgICAre2NvbW1hbmR9CisKKyAgICAgICAtYyB7Y29tbWFuZH0KKyAgICAgICAgICAgICAgICAgICB7Y29tbWFuZH0gIHdpbGwgIGJlICBleGVjdXRlZCBhZnRlciB0aGUgZmlyc3QgZmlsZSBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgIHJlYWQuICB7Y29tbWFuZH0gaXMgaW50ZXJwcmV0ZWQgYXMgYW4gRXggY29tbWFuZC4gICBJZiAgdGhlCisgICAgICAgICAgICAgICAgICAge2NvbW1hbmR9ICBjb250YWlucyAgc3BhY2VzICBpdCAgbXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGUKKyAgICAgICAgICAgICAgICAgICBxdW90ZXMgKHRoaXMgZGVwZW5kcyBvbiB0aGUgc2hlbGwgdGhhdCBpcyB1c2VkKS4gICBFeGFtcGxlOgorICAgICAgICAgICAgICAgICAgIFZpbSAiK3NldCBzaSIgbWFpbi5jCisgICAgICAgICAgICAgICAgICAgTm90ZTogWW91IGNhbiB1c2UgdXAgdG8gMTAgIisiIG9yICItYyIgY29tbWFuZHMuCisKKyAgICAgICAtUyB7ZmlsZX0gICB7ZmlsZX0gIHdpbGwgYmUgc291cmNlZCBhZnRlciB0aGUgZmlyc3QgZmlsZSBoYXMgYmVlbiByZWFkLgorICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byAtYyAic291cmNlICB7ZmlsZX0iLiAgIHtmaWxlfSAgY2Fubm90CisgICAgICAgICAgICAgICAgICAgc3RhcnQgd2l0aCAnLScuICBJZiB7ZmlsZX0gaXMgb21pdHRlZCAiU2Vzc2lvbi52aW0iIGlzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAob25seSB3b3JrcyB3aGVuIC1TIGlzIHRoZSBsYXN0IGFyZ3VtZW50KS4KKworICAgICAgIC0tY21kIHtjb21tYW5kfQorICAgICAgICAgICAgICAgICAgIExpa2UgdXNpbmcgIi1jIiwgYnV0IHRoZSBjb21tYW5kIGlzICBleGVjdXRlZCAganVzdCAgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyAgYW55ICB2aW1yYyBmaWxlLiAgWW91IGNhbiB1c2UgdXAgdG8gMTAgb2YgdGhlc2UKKyAgICAgICAgICAgICAgICAgICBjb21tYW5kcywgaW5kZXBlbmRlbnRseSBmcm9tICItYyIgY29tbWFuZHMuCisKKyAgICAgICAtQSAgICAgICAgICBJZiBWaW0gaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBBUkFCSUMgIHN1cHBvcnQgIGZvciAgZWRpdGluZworICAgICAgICAgICAgICAgICAgIHJpZ2h0LXRvLWxlZnQgIG9yaWVudGVkICBmaWxlcyBhbmQgQXJhYmljIGtleWJvYXJkIG1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgdGhpcyBvcHRpb24gc3RhcnRzIFZpbSBpbiBBcmFiaWMgIG1vZGUsICBpLmUuICAnYXJhYmljJyAgaXMKKyAgICAgICAgICAgICAgICAgICBzZXQuICBPdGhlcndpc2UgYW4gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbiBhbmQgVmltIGFib3J0cy4KKworICAgICAgIC1iICAgICAgICAgIEJpbmFyeSAgbW9kZS4gIEEgZmV3IG9wdGlvbnMgd2lsbCBiZSBzZXQgdGhhdCBtYWtlcyBpdCBwb3MtCisgICAgICAgICAgICAgICAgICAgc2libGUgdG8gZWRpdCBhIGJpbmFyeSBvciBleGVjdXRhYmxlIGZpbGUuCisKKyAgICAgICAtQyAgICAgICAgICBDb21wYXRpYmxlLiAgU2V0IHRoZSAnY29tcGF0aWJsZScgb3B0aW9uLiAgVGhpcyAgd2lsbCAgbWFrZQorICAgICAgICAgICAgICAgICAgIFZpbSAgYmVoYXZlICBtb3N0bHkgIGxpa2UgIFZpLCAgZXZlbiAgdGhvdWdoICBhIC52aW1yYyBmaWxlCisgICAgICAgICAgICAgICAgICAgZXhpc3RzLgorCisgICAgICAgLWQgICAgICAgICAgU3RhcnQgaW4gZGlmZiBtb2RlLiAgVGhlcmUgc2hvdWxkIGJlIHR3byBvciB0aHJlZSBmaWxlIG5hbWUKKyAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuICAgVmltICB3aWxsICBvcGVuIGFsbCB0aGUgZmlsZXMgYW5kIHNob3cgZGlmZmVyLQorICAgICAgICAgICAgICAgICAgIGVuY2VzIGJldHdlZW4gdGhlbS4gIFdvcmtzIGxpa2UgdmltZGlmZigxKS4KKworICAgICAgIC1kIHtkZXZpY2V9IE9wZW4ge2RldmljZX0gZm9yIHVzZSBhcyBhIHRlcm1pbmFsLiAgT25seSAgb24gIHRoZSAgQW1pZ2EuCisgICAgICAgICAgICAgICAgICAgRXhhbXBsZTogIi1kIGNvbjoyMC8zMC82MDAvMTUwIi4KKworICAgICAgIC1EICAgICAgICAgIERlYnVnZ2luZy4gICBHbyAgdG8gZGVidWdnaW5nIG1vZGUgd2hlbiBleGVjdXRpbmcgdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgY29tbWFuZCBmcm9tIGEgc2NyaXB0LgorCisgICAgICAgLWUgICAgICAgICAgU3RhcnQgVmltIGluIEV4IG1vZGUsIGp1c3QgbGlrZSB0aGUgZXhlY3V0YWJsZSAgd2FzICBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAiZXgiLgorCisgICAgICAgLUUgICAgICAgICAgU3RhcnQgVmltIGluIGltcHJvdmVkIEV4IG1vZGUsIGp1c3QgbGlrZSB0aGUgZXhlY3V0YWJsZSB3YXMKKyAgICAgICAgICAgICAgICAgICBjYWxsZWQgImV4aW0iLgorCisgICAgICAgLWYgICAgICAgICAgRm9yZWdyb3VuZC4gIEZvciB0aGUgR1VJIHZlcnNpb24sIFZpbSAgd2lsbCAgbm90ICBmb3JrICBhbmQKKyAgICAgICAgICAgICAgICAgICBkZXRhY2ggZnJvbSB0aGUgc2hlbGwgaXQgd2FzIHN0YXJ0ZWQgaW4uICBPbiB0aGUgQW1pZ2EsIFZpbQorICAgICAgICAgICAgICAgICAgIGlzIG5vdCByZXN0YXJ0ZWQgdG8gb3BlbiBhIG5ldyB3aW5kb3cuICBUaGlzIG9wdGlvbiAgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgYmUgIHVzZWQgIHdoZW4gIFZpbSBpcyBleGVjdXRlZCBieSBhIHByb2dyYW0gdGhhdCB3aWxsIHdhaXQKKyAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGVkaXQgc2Vzc2lvbiB0byBmaW5pc2ggKGUuZy4gbWFpbCkuICBPbiAgdGhlICBBbWlnYQorICAgICAgICAgICAgICAgICAgIHRoZSAiOnNoIiBhbmQgIjohIiBjb21tYW5kcyB3aWxsIG5vdCB3b3JrLgorCisgICAgICAgLS1ub2ZvcmsgICAgRm9yZWdyb3VuZC4gICBGb3IgIHRoZSAgR1VJICB2ZXJzaW9uLCBWaW0gd2lsbCBub3QgZm9yayBhbmQKKyAgICAgICAgICAgICAgICAgICBkZXRhY2ggZnJvbSB0aGUgc2hlbGwgaXQgd2FzIHN0YXJ0ZWQgaW4uCisKKyAgICAgICAtRiAgICAgICAgICBJZiBWaW0gaGFzIGJlZW4gY29tcGlsZWQgd2l0aCAgRktNQVAgIHN1cHBvcnQgIGZvciAgZWRpdGluZworICAgICAgICAgICAgICAgICAgIHJpZ2h0LXRvLWxlZnQgIG9yaWVudGVkICBmaWxlcyAgYW5kIEZhcnNpIGtleWJvYXJkIG1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgdGhpcyBvcHRpb24gc3RhcnRzIFZpbSBpbiAgRmFyc2kgIG1vZGUsICBpLmUuICAnZmttYXAnICBhbmQKKyAgICAgICAgICAgICAgICAgICAncmlnaHRsZWZ0JyAgYXJlICBzZXQuICBPdGhlcndpc2UgYW4gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbgorICAgICAgICAgICAgICAgICAgIGFuZCBWaW0gYWJvcnRzLgorCisgICAgICAgLWcgICAgICAgICAgSWYgVmltIGhhcyBiZWVuIGNvbXBpbGVkICB3aXRoICBHVUkgIHN1cHBvcnQsICB0aGlzICBvcHRpb24KKyAgICAgICAgICAgICAgICAgICBlbmFibGVzICB0aGUgIEdVSS4gICBJZiAgbm8gR1VJIHN1cHBvcnQgd2FzIGNvbXBpbGVkIGluLCBhbgorICAgICAgICAgICAgICAgICAgIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4gYW5kIFZpbSBhYm9ydHMuCisKKyAgICAgICAtaCAgICAgICAgICBHaXZlIGEgYml0IG9mIGhlbHAgYWJvdXQgdGhlICBjb21tYW5kICBsaW5lICBhcmd1bWVudHMgIGFuZAorICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuICBBZnRlciB0aGlzIFZpbSBleGl0cy4KKworICAgICAgIC1IICAgICAgICAgIElmIFZpbSBoYXMgYmVlbiBjb21waWxlZCB3aXRoIFJJR0hUTEVGVCBzdXBwb3J0IGZvciBlZGl0aW5nCisgICAgICAgICAgICAgICAgICAgcmlnaHQtdG8tbGVmdCBvcmllbnRlZCBmaWxlcyBhbmQgSGVicmV3ICBrZXlib2FyZCAgbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICB0aGlzICBvcHRpb24gIHN0YXJ0cyAgVmltICBpbiBIZWJyZXcgbW9kZSwgaS5lLiAnaGttYXAnIGFuZAorICAgICAgICAgICAgICAgICAgICdyaWdodGxlZnQnIGFyZSBzZXQuICBPdGhlcndpc2UgYW4gZXJyb3IgbWVzc2FnZSAgaXMgIGdpdmVuCisgICAgICAgICAgICAgICAgICAgYW5kIFZpbSBhYm9ydHMuCisKKyAgICAgICAtaSB7dmltaW5mb30KKyAgICAgICAgICAgICAgICAgICBXaGVuICB1c2luZyAgdGhlICB2aW1pbmZvIGZpbGUgaXMgZW5hYmxlZCwgdGhpcyBvcHRpb24gc2V0cworICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlbmFtZSB0byB1c2UsIGluc3RlYWQgb2YgdGhlICBkZWZhdWx0ICAifi8udmltaW5mbyIuCisgICAgICAgICAgICAgICAgICAgVGhpcyBjYW4gYWxzbyBiZSB1c2VkIHRvIHNraXAgdGhlIHVzZSBvZiB0aGUgLnZpbWluZm8gZmlsZSwKKyAgICAgICAgICAgICAgICAgICBieSBnaXZpbmcgdGhlIG5hbWUgIk5PTkUiLgorCisgICAgICAgLUwgICAgICAgICAgU2FtZSBhcyAtci4KKworICAgICAgIC1sICAgICAgICAgIExpc3AgbW9kZS4gIFNldHMgdGhlICdsaXNwJyBhbmQgJ3Nob3dtYXRjaCcgb3B0aW9ucyBvbi4KKworICAgICAgIC1tICAgICAgICAgIE1vZGlmeWluZyBmaWxlcyBpcyBkaXNhYmxlZC4gIFJlc2V0cyAgdGhlICAnd3JpdGUnICBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgWW91ICBjYW4gc3RpbGwgbW9kaWZ5IHRoZSBidWZmZXIsIGJ1dCB3cml0aW5nIGEgZmlsZSBpcyBub3QKKyAgICAgICAgICAgICAgICAgICBwb3NzaWJsZS4KKworICAgICAgIC1NICAgICAgICAgIE1vZGlmaWNhdGlvbnMgbm90IGFsbG93ZWQuICBUaGUgICdtb2RpZmlhYmxlJyAgYW5kICAnd3JpdGUnCisgICAgICAgICAgICAgICAgICAgb3B0aW9ucyAgd2lsbCBiZSB1bnNldCwgc28gdGhhdCBjaGFuZ2VzIGFyZSBub3QgYWxsb3dlZCBhbmQKKyAgICAgICAgICAgICAgICAgICBmaWxlcyBjYW4gbm90IGJlIHdyaXR0ZW4uICBOb3RlIHRoYXQgdGhlc2Ugb3B0aW9ucyAgY2FuICBiZQorICAgICAgICAgICAgICAgICAgIHNldCB0byBlbmFibGUgbWFraW5nIG1vZGlmaWNhdGlvbnMuCisKKyAgICAgICAtTiAgICAgICAgICBOby1jb21wYXRpYmxlICBtb2RlLiAgIFJlc2V0IHRoZSAnY29tcGF0aWJsZScgb3B0aW9uLiAgVGhpcworICAgICAgICAgICAgICAgICAgIHdpbGwgbWFrZSBWaW0gYmVoYXZlIGEgYml0IGJldHRlciwgYnV0IGxlc3MgVmkgIGNvbXBhdGlibGUsCisgICAgICAgICAgICAgICAgICAgZXZlbiB0aG91Z2ggYSAudmltcmMgZmlsZSBkb2VzIG5vdCBleGlzdC4KKworICAgICAgIC1uICAgICAgICAgIE5vICBzd2FwIGZpbGUgd2lsbCBiZSB1c2VkLiAgUmVjb3ZlcnkgYWZ0ZXIgYSBjcmFzaCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgaW1wb3NzaWJsZS4gIEhhbmR5IGlmIHlvdSB3YW50IHRvIGVkaXQgYSAgZmlsZSAgb24gIGEgIHZlcnkKKyAgICAgICAgICAgICAgICAgICBzbG93ICBtZWRpdW0gIChlLmcuICBmbG9wcHkpLiAgIENhbiBhbHNvIGJlIGRvbmUgd2l0aCAiOnNldAorICAgICAgICAgICAgICAgICAgIHVjPTAiLiAgQ2FuIGJlIHVuZG9uZSB3aXRoICI6c2V0IHVjPTIwMCIuCisKKyAgICAgICAtbmIgICAgICAgICBCZWNvbWUgYW4gZWRpdG9yIHNlcnZlciBmb3IgTmV0QmVhbnMuICAgU2VlICB0aGUgIGRvY3MgIGZvcgorICAgICAgICAgICAgICAgICAgIGRldGFpbHMuCisKKyAgICAgICAtb1tOXSAgICAgICBPcGVuIE4gd2luZG93cyBzdGFja2VkLiAgV2hlbiBOIGlzIG9taXR0ZWQsIG9wZW4gb25lIHdpbmRvdworICAgICAgICAgICAgICAgICAgIGZvciBlYWNoIGZpbGUuCisKKyAgICAgICAtT1tOXSAgICAgICBPcGVuIE4gd2luZG93cyBzaWRlIGJ5IHNpZGUuICBXaGVuIE4gaXMgb21pdHRlZCwgIG9wZW4gIG9uZQorICAgICAgICAgICAgICAgICAgIHdpbmRvdyBmb3IgZWFjaCBmaWxlLgorCisgICAgICAgLVIgICAgICAgICAgUmVhZC1vbmx5ICBtb2RlLiAgIFRoZSAgJ3JlYWRvbmx5JyBvcHRpb24gd2lsbCBiZSBzZXQuICBZb3UKKyAgICAgICAgICAgICAgICAgICBjYW4gc3RpbGwgZWRpdCB0aGUgYnVmZmVyLCBidXQgd2lsbCBiZSBwcmV2ZW50ZWQgZnJvbSBhY2NpLQorICAgICAgICAgICAgICAgICAgIGRlbnRseSAgb3ZlcndyaXRpbmcgIGEgZmlsZS4gIElmIHlvdSBkbyB3YW50IHRvIG92ZXJ3cml0ZSBhCisgICAgICAgICAgICAgICAgICAgZmlsZSwgYWRkIGFuIGV4Y2xhbWF0aW9uIG1hcmsgdG8gIHRoZSAgRXggIGNvbW1hbmQsICBhcyAgaW4KKyAgICAgICAgICAgICAgICAgICAiOnchIi4gICBUaGUgIC1SICBvcHRpb24gIGFsc28gIGltcGxpZXMgIHRoZSAtbiBvcHRpb24gKHNlZQorICAgICAgICAgICAgICAgICAgIGJlbG93KS4gIFRoZSAncmVhZG9ubHknIG9wdGlvbiAgY2FuICBiZSAgcmVzZXQgIHdpdGggICI6c2V0CisgICAgICAgICAgICAgICAgICAgbm9ybyIuICBTZWUgIjpoZWxwICdyZWFkb25seSciLgorCisgICAgICAgLXIgICAgICAgICAgTGlzdCAgc3dhcCAgZmlsZXMsICB3aXRoICBpbmZvcm1hdGlvbiAgYWJvdXQgdXNpbmcgdGhlbSBmb3IKKyAgICAgICAgICAgICAgICAgICByZWNvdmVyeS4KKworICAgICAgIC1yIHtmaWxlfSAgIFJlY292ZXJ5IG1vZGUuICBUaGUgc3dhcCBmaWxlIGlzIHVzZWQgdG8gcmVjb3ZlciBhICBjcmFzaGVkCisgICAgICAgICAgICAgICAgICAgZWRpdGluZyAgc2Vzc2lvbi4gICBUaGUgIHN3YXAgIGZpbGUgaXMgYSBmaWxlIHdpdGggdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSBhcyB0aGUgdGV4dCBmaWxlIHdpdGggIi5zd3AiIGFwcGVuZGVkLiAgU2VlICI6aGVscAorICAgICAgICAgICAgICAgICAgIHJlY292ZXJ5Ii4KKworICAgICAgIC1zICAgICAgICAgIFNpbGVudCAgbW9kZS4gICBPbmx5ICB3aGVuIHN0YXJ0ZWQgYXMgIkV4IiBvciB3aGVuIHRoZSAiLWUiCisgICAgICAgICAgICAgICAgICAgb3B0aW9uIHdhcyBnaXZlbiBiZWZvcmUgdGhlICItcyIgb3B0aW9uLgorCisgICAgICAgLXMge3NjcmlwdGlufQorICAgICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgZmlsZSB7c2NyaXB0aW59IGlzIHJlYWQuICBUaGUgY2hhcmFjdGVycyBpbiAgdGhlCisgICAgICAgICAgICAgICAgICAgZmlsZSAgYXJlICBpbnRlcnByZXRlZCAgYXMgaWYgeW91IGhhZCB0eXBlZCB0aGVtLiAgVGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICBjYW4gYmUgZG9uZSB3aXRoIHRoZSBjb21tYW5kICI6c291cmNlISB7c2NyaXB0aW59Ii4gIElmIHRoZQorICAgICAgICAgICAgICAgICAgIGVuZCBvZiB0aGUgZmlsZSBpcyByZWFjaGVkIGJlZm9yZSB0aGUgZWRpdG9yIGV4aXRzLCBmdXJ0aGVyCisgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBhcmUgcmVhZCBmcm9tIHRoZSBrZXlib2FyZC4KKworICAgICAgIC1UIHt0ZXJtaW5hbH0KKyAgICAgICAgICAgICAgICAgICBUZWxscyBWaW0gdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsICB5b3UgIGFyZSAgdXNpbmcuICAgT25seQorICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkICB3aGVuIHRoZSBhdXRvbWF0aWMgd2F5IGRvZXNuJ3Qgd29yay4gIFNob3VsZCBiZSBhCisgICAgICAgICAgICAgICAgICAgdGVybWluYWwga25vd24gdG8gVmltIChidWlsdGluKSBvciBkZWZpbmVkIGluICB0aGUgIHRlcm1jYXAKKyAgICAgICAgICAgICAgICAgICBvciB0ZXJtaW5mbyBmaWxlLgorCisgICAgICAgLXUge3ZpbXJjfSAgVXNlICB0aGUgIGNvbW1hbmRzIGluIHRoZSBmaWxlIHt2aW1yY30gZm9yIGluaXRpYWxpemF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICBBbGwgdGhlIG90aGVyIGluaXRpYWxpemF0aW9ucyBhcmUgIHNraXBwZWQuICAgVXNlICB0aGlzICB0bworICAgICAgICAgICAgICAgICAgIGVkaXQgIGEgc3BlY2lhbCBraW5kIG9mIGZpbGVzLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBza2lwCisgICAgICAgICAgICAgICAgICAgYWxsIGluaXRpYWxpemF0aW9ucyBieSBnaXZpbmcgdGhlIG5hbWUgIk5PTkUiLiAgU2VlICAiOmhlbHAKKyAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbiIgd2l0aGluIHZpbSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgLVUge2d2aW1yY30gVXNlICB0aGUgIGNvbW1hbmRzIGluIHRoZSBmaWxlIHtndmltcmN9IGZvciBHVUkgaW5pdGlhbGl6YS0KKyAgICAgICAgICAgICAgICAgICB0aW9ucy4gIEFsbCB0aGUgb3RoZXIgR1VJIGluaXRpYWxpemF0aW9ucyBhcmUgc2tpcHBlZC4gICBJdAorICAgICAgICAgICAgICAgICAgIGNhbiAgYWxzbyBiZSB1c2VkIHRvIHNraXAgYWxsIEdVSSBpbml0aWFsaXphdGlvbnMgYnkgZ2l2aW5nCisgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgIk5PTkUiLiAgU2VlICI6aGVscCBndWktaW5pdCIgd2l0aGluIHZpbSBmb3IgIG1vcmUKKyAgICAgICAgICAgICAgICAgICBkZXRhaWxzLgorCisgICAgICAgLVZbTl0gICAgICAgVmVyYm9zZS4gICBHaXZlICBtZXNzYWdlcyBhYm91dCB3aGljaCBmaWxlcyBhcmUgc291cmNlZCBhbmQKKyAgICAgICAgICAgICAgICAgICBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBhIHZpbWluZm8gZmlsZS4gIFRoZSBvcHRpb25hbCAgbnVtLQorICAgICAgICAgICAgICAgICAgIGJlciBOIGlzIHRoZSB2YWx1ZSBmb3IgJ3ZlcmJvc2UnLiAgRGVmYXVsdCBpcyAxMC4KKworICAgICAgIC12ICAgICAgICAgIFN0YXJ0ICBWaW0gIGluIFZpIG1vZGUsIGp1c3QgbGlrZSB0aGUgZXhlY3V0YWJsZSB3YXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgInZpIi4gIFRoaXMgb25seSBoYXMgZWZmZWN0IHdoZW4gdGhlIGV4ZWN1dGFibGUgIGlzICBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAiZXgiLgorCisgICAgICAgLXcge3NjcmlwdG91dH0KKyAgICAgICAgICAgICAgICAgICBBbGwgIHRoZSAgY2hhcmFjdGVycyB0aGF0IHlvdSB0eXBlIGFyZSByZWNvcmRlZCBpbiB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgIHtzY3JpcHRvdXR9LCB1bnRpbCB5b3UgZXhpdCBWaW0uICBUaGlzICBpcyAgdXNlZnVsICBpZiAgeW91CisgICAgICAgICAgICAgICAgICAgd2FudCAgdG8gIGNyZWF0ZSAgYSBzY3JpcHQgZmlsZSB0byBiZSB1c2VkIHdpdGggInZpbSAtcyIgb3IKKyAgICAgICAgICAgICAgICAgICAiOnNvdXJjZSEiLiAgSWYgdGhlIHtzY3JpcHRvdXR9IGZpbGUgZXhpc3RzLCBjaGFyYWN0ZXJzIGFyZQorICAgICAgICAgICAgICAgICAgIGFwcGVuZGVkLgorCisgICAgICAgLVcge3NjcmlwdG91dH0KKyAgICAgICAgICAgICAgICAgICBMaWtlIC13LCBidXQgYW4gZXhpc3RpbmcgZmlsZSBpcyBvdmVyd3JpdHRlbi4KKworICAgICAgIC14ICAgICAgICAgIFVzZSAgZW5jcnlwdGlvbiAgd2hlbiAgd3JpdGluZyAgZmlsZXMuICAgIFdpbGwgcHJvbXB0IGZvciBhCisgICAgICAgICAgICAgICAgICAgY3J5cHQga2V5LgorCisgICAgICAgLVggICAgICAgICAgRG9uJ3QgY29ubmVjdCB0byB0aGUgWCBzZXJ2ZXIuICBTaG9ydGVucyBzdGFydHVwIHRpbWUgaW4gIGEKKyAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbCwgIGJ1dCAgdGhlICB3aW5kb3cgdGl0bGUgYW5kIGNsaXBib2FyZCB3aWxsIG5vdCBiZQorICAgICAgICAgICAgICAgICAgIHVzZWQuCisKKyAgICAgICAteSAgICAgICAgICBTdGFydCBWaW0gaW4gZWFzeSBtb2RlLCBqdXN0IGxpa2UgdGhlIGV4ZWN1dGFibGUgd2FzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICJldmltIiAgb3IgImV2aWV3Ii4gIE1ha2VzIFZpbSBiZWhhdmUgbGlrZSBhIGNsaWNrLWFuZC10eXBlCisgICAgICAgICAgICAgICAgICAgZWRpdG9yLgorCisgICAgICAgLVogICAgICAgICAgUmVzdHJpY3RlZCBtb2RlLiAgV29ya3MgbGlrZSAgdGhlICBleGVjdXRhYmxlICBzdGFydHMgIHdpdGgKKyAgICAgICAgICAgICAgICAgICAiciIuCisKKyAgICAgICAtLSAgICAgICAgICBEZW5vdGVzICB0aGUgZW5kIG9mIHRoZSBvcHRpb25zLiAgQXJndW1lbnRzIGFmdGVyIHRoaXMgd2lsbAorICAgICAgICAgICAgICAgICAgIGJlIGhhbmRsZWQgYXMgYSBmaWxlIG5hbWUuICBUaGlzIGNhbiAgYmUgIHVzZWQgIHRvICBlZGl0ICBhCisgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgdGhhdCBzdGFydHMgd2l0aCBhICctJy4KKworICAgICAgIC0tZWNoby13aWQgIEdUSyBHVUkgb25seTogRWNobyB0aGUgV2luZG93IElEIG9uIHN0ZG91dAorCisgICAgICAgLS1oZWxwICAgICAgR2l2ZSBhIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCwganVzdCBsaWtlICItaCIuCisKKyAgICAgICAtLWxpdGVyYWwgICBUYWtlICBmaWxlICBuYW1lICBhcmd1bWVudHMgIGxpdGVyYWxseSwgZG8gbm90IGV4cGFuZCB3aWxkLQorICAgICAgICAgICAgICAgICAgIGNhcmRzLiAgTm90IG5lZWRlZCBvbiBVbml4LCB0aGUgc2hlbGwgZXhwYW5kIHdpbGRjYXJkcy4KKworICAgICAgIC0tbm9wbHVnaW4gIFNraXAgbG9hZGluZyBwbHVnaW5zLiAgSW1wbGllZCBieSAtdSBOT05FLgorCisgICAgICAgLS1yZW1vdGUgICAgQ29ubmVjdCB0byBhIFZpbSBzZXJ2ZXIgYW5kIG1ha2UgaXQgZWRpdCB0aGUgZmlsZXMgZ2l2ZW4gaW4KKyAgICAgICAgICAgICAgICAgICB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLiAgSWYgbm8gc2VydmVyIGlzIGZvdW5kIGEgd2FybmluZworICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuIGFuZCB0aGUgZmlsZXMgYXJlIGVkaXRlZCBpbiB0aGUgY3VycmVudCBWaW0uCisKKyAgICAgICAtLXJlbW90ZS1leHByIHtleHByfQorICAgICAgICAgICAgICAgICAgIENvbm5lY3QgdG8gYSBWaW0gc2VydmVyLCBldmFsdWF0ZSB7ZXhwcn0gaW4gIGl0ICBhbmQgIHByaW50CisgICAgICAgICAgICAgICAgICAgdGhlIHJlc3VsdCBvbiBzdGRvdXQuCisKKyAgICAgICAtLXJlbW90ZS1zZW5kIHtrZXlzfQorICAgICAgICAgICAgICAgICAgIENvbm5lY3QgdG8gYSBWaW0gc2VydmVyIGFuZCBzZW5kIHtrZXlzfSB0byBpdC4KKworICAgICAgIC0tcmVtb3RlLXNpbGVudAorICAgICAgICAgICAgICAgICAgIEFzICAtLXJlbW90ZSwgIGJ1dCAgd2l0aG91dCAgdGhlICB3YXJuaW5nIHdoZW4gbm8gc2VydmVyIGlzCisgICAgICAgICAgICAgICAgICAgZm91bmQuCisKKyAgICAgICAtLXJlbW90ZS13YWl0CisgICAgICAgICAgICAgICAgICAgQXMgLS1yZW1vdGUsIGJ1dCBWaW0gZG9lcyBub3QgZXhpdCAgdW50aWwgIHRoZSAgZmlsZXMgIGhhdmUKKyAgICAgICAgICAgICAgICAgICBiZWVuIGVkaXRlZC4KKworICAgICAgIC0tcmVtb3RlLXdhaXQtc2lsZW50CisgICAgICAgICAgICAgICAgICAgQXMgLS1yZW1vdGUtd2FpdCwgYnV0IHdpdGhvdXQgdGhlIHdhcm5pbmcgd2hlbiBubyBzZXJ2ZXIgaXMKKyAgICAgICAgICAgICAgICAgICBmb3VuZC4KKworICAgICAgIC0tc2VydmVybGlzdAorICAgICAgICAgICAgICAgICAgIExpc3QgdGhlIG5hbWVzIG9mIGFsbCBWaW0gc2VydmVycyB0aGF0IGNhbiBiZSBmb3VuZC4KKworICAgICAgIC0tc2VydmVybmFtZSB7bmFtZX0KKyAgICAgICAgICAgICAgICAgICBVc2Uge25hbWV9IGFzIHRoZSBzZXJ2ZXIgbmFtZS4gIFVzZWQgZm9yIHRoZSAgY3VycmVudCAgVmltLAorICAgICAgICAgICAgICAgICAgIHVubGVzcyB1c2VkIHdpdGggYSAtLXJlbW90ZSBhcmd1bWVudCwgdGhlbiBpdCdzIHRoZSBuYW1lIG9mCisgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZlciB0byBjb25uZWN0IHRvLgorCisgICAgICAgLS1zb2NrZXRpZCB7aWR9CisgICAgICAgICAgICAgICAgICAgR1RLIEdVSSBvbmx5OiBVc2UgdGhlIEd0a1BsdWcgIG1lY2hhbmlzbSAgdG8gIHJ1biAgZ3ZpbSAgaW4KKyAgICAgICAgICAgICAgICAgICBhbm90aGVyIHdpbmRvdy4KKworICAgICAgIC0tdmVyc2lvbiAgIFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuCisKK09OLUxJTkUgSEVMUAorICAgICAgIFR5cGUgICI6aGVscCIgIGluIFZpbSB0byBnZXQgc3RhcnRlZC4gIFR5cGUgIjpoZWxwIHN1YmplY3QiIHRvIGdldCBoZWxwCisgICAgICAgb24gYSBzcGVjaWZpYyBzdWJqZWN0LiAgRm9yIGV4YW1wbGU6ICI6aGVscCBaWiIgdG8gIGdldCAgaGVscCAgZm9yICB0aGUKKyAgICAgICAiWloiICBjb21tYW5kLiAgIFVzZSA8VGFiPiBhbmQgQ1RSTC1EIHRvIGNvbXBsZXRlIHN1YmplY3RzICgiOmhlbHAgY21kLQorICAgICAgIGxpbmUtY29tcGxldGlvbiIpLiAgVGFncyBhcmUgcHJlc2VudCB0byBqdW1wIGZyb20gb25lIHBsYWNlIHRvICBhbm90aGVyCisgICAgICAgKHNvcnQgb2YgaHlwZXJ0ZXh0IGxpbmtzLCBzZWUgIjpoZWxwIikuICBBbGwgZG9jdW1lbnRhdGlvbiBmaWxlcyBjYW4gYmUKKyAgICAgICB2aWV3ZWQgaW4gdGhpcyB3YXksIGZvciBleGFtcGxlICI6aGVscCBzeW50YXgudHh0Ii4KKworRklMRVMKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vZG9jLyoudHh0CisgICAgICAgICAgICAgICAgICAgICAgVGhlIFZpbSBkb2N1bWVudGF0aW9uIGZpbGVzLiAgVXNlICI6aGVscCAgZG9jLWZpbGUtbGlzdCIKKyAgICAgICAgICAgICAgICAgICAgICB0byBnZXQgdGhlIGNvbXBsZXRlIGxpc3QuCisKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vZG9jL3RhZ3MKKyAgICAgICAgICAgICAgICAgICAgICBUaGUgIHRhZ3MgZmlsZSB1c2VkIGZvciBmaW5kaW5nIGluZm9ybWF0aW9uIGluIHRoZSBkb2N1LQorICAgICAgICAgICAgICAgICAgICAgIG1lbnRhdGlvbiBmaWxlcy4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS9zeW50YXgvc3ludGF4LnZpbQorICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSB3aWRlIHN5bnRheCBpbml0aWFsaXphdGlvbnMuCisKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vc3ludGF4LyoudmltCisgICAgICAgICAgICAgICAgICAgICAgU3ludGF4IGZpbGVzIGZvciB2YXJpb3VzIGxhbmd1YWdlcy4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS92aW1yYworICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSB3aWRlIFZpbSBpbml0aWFsaXphdGlvbnMuCisKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vZ3ZpbXJjCisgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIHdpZGUgZ3ZpbSBpbml0aWFsaXphdGlvbnMuCisKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vb3B0d2luLnZpbQorICAgICAgICAgICAgICAgICAgICAgIFNjcmlwdCB1c2VkIGZvciB0aGUgIjpvcHRpb25zIiBjb21tYW5kLCBhICBuaWNlICB3YXkgIHRvCisgICAgICAgICAgICAgICAgICAgICAgdmlldyBhbmQgc2V0IG9wdGlvbnMuCisKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vbWVudS52aW0KKyAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gd2lkZSBtZW51IGluaXRpYWxpemF0aW9ucyBmb3IgZ3ZpbS4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS9idWdyZXBvcnQudmltCisgICAgICAgICAgICAgICAgICAgICAgU2NyaXB0IHRvIGdlbmVyYXRlIGEgYnVnIHJlcG9ydC4gIFNlZSAiOmhlbHAgYnVncyIuCisKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vZmlsZXR5cGUudmltCisgICAgICAgICAgICAgICAgICAgICAgU2NyaXB0ICB0byAgZGV0ZWN0ICB0aGUgdHlwZSBvZiBhIGZpbGUgYnkgaXRzIG5hbWUuICBTZWUKKyAgICAgICAgICAgICAgICAgICAgICAiOmhlbHAgJ2ZpbGV0eXBlJyIuCisKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vc2NyaXB0cy52aW0KKyAgICAgICAgICAgICAgICAgICAgICBTY3JpcHQgdG8gZGV0ZWN0IHRoZSB0eXBlIG9mIGEgIGZpbGUgIGJ5ICBpdHMgIGNvbnRlbnRzLgorICAgICAgICAgICAgICAgICAgICAgIFNlZSAiOmhlbHAgJ2ZpbGV0eXBlJyIuCisKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vKi5wcworICAgICAgICAgICAgICAgICAgICAgIEZpbGVzIHVzZWQgZm9yIFBvc3RTY3JpcHQgcHJpbnRpbmcuCisKKyAgICAgICBGb3IgcmVjZW50IGluZm8gcmVhZCB0aGUgVklNIGhvbWUgcGFnZToKKyAgICAgICA8VVJMOmh0dHA6Ly93d3cudmltLm9yZy8+CisKK1NFRSBBTFNPCisgICAgICAgdmltdHV0b3IoMSkKKworQVVUSE9SCisgICAgICAgTW9zdCBvZiBWaW0gd2FzIG1hZGUgYnkgQnJhbSBNb29sZW5hYXIsIHdpdGggYSBsb3Qgb2YgaGVscCBmcm9tIG90aGVycy4KKyAgICAgICBTZWUgIjpoZWxwIGNyZWRpdHMiIGluIFZpbS4KKyAgICAgICBWaW0gaXMgYmFzZWQgb24gU3RldmllLCB3b3JrZWQgb24gYnk6IFRpbSBUaG9tcHNvbiwgIFRvbnkgIEFuZHJld3MgIGFuZAorICAgICAgIEcuUi4gIChGcmVkKSBXYWx0ZXIuICBBbHRob3VnaCBoYXJkbHkgYW55IG9mIHRoZSBvcmlnaW5hbCBjb2RlIHJlbWFpbnMuCisKK0JVR1MKKyAgICAgICBQcm9iYWJseS4gIFNlZSAiOmhlbHAgdG9kbyIgZm9yIGEgbGlzdCBvZiBrbm93biBwcm9ibGVtcy4KKworICAgICAgIE5vdGUgdGhhdCBhIG51bWJlciBvZiB0aGluZ3MgdGhhdCBtYXkgYmUgcmVnYXJkZWQgYXMgYnVncyBieSBzb21lLCAgYXJlCisgICAgICAgaW4gIGZhY3QgIGNhdXNlZCBieSBhIHRvby1mYWl0aGZ1bCByZXByb2R1Y3Rpb24gb2YgVmkncyBiZWhhdmlvdXIuICBBbmQKKyAgICAgICBpZiB5b3UgdGhpbmsgb3RoZXIgdGhpbmdzIGFyZSBidWdzICJiZWNhdXNlIFZpICBkb2VzICBpdCAgZGlmZmVyZW50bHkiLAorICAgICAgIHlvdSAgc2hvdWxkICB0YWtlICBhIGNsb3NlciBsb29rIGF0IHRoZSB2aV9kaWZmLnR4dCBmaWxlIChvciB0eXBlIDpoZWxwCisgICAgICAgdmlfZGlmZi50eHQgd2hlbiBpbiBWaW0pLiAgQWxzbyBoYXZlIGEgbG9vayAgYXQgIHRoZSAgJ2NvbXBhdGlibGUnICBhbmQKKyAgICAgICAnY3BvcHRpb25zJyBvcHRpb25zLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDIgRmViIDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgVklNKDEpCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92aW0ubWFuLmluZm8gYi9ydW50aW1lL2RvYy92aW0ubWFuLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTMzZjlhMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZpbS5tYW4uaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92aW0yaHRtbC5wbCBiL3J1bnRpbWUvZG9jL3ZpbTJodG1sLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYjFjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy92aW0yaHRtbC5wbApAQCAtMCwwICsxLDIyOSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjIGNvbnZlcnRzIHZpbSBkb2N1bWVudGF0aW9uIHRvIHNpbXBsZSBodG1sCisjIFNpcnRhaiBTaW5naCBLYW5nICh0YWpAa2RlLm9yZykKKworIyBTdW4gRmViIDI0IDE0OjQ5OjE3IENFVCAyMDAyCisKK3VzZSBzdHJpY3Q7Cit1c2UgdmFycyBxdy8ldXJsICRkYXRlLzsKKworJXVybCA9ICgpOworJGRhdGUgPSBgZGF0ZWA7CitjaG9wICRkYXRlOworCitzdWIgbWFwbGluaworeworCW15ICR0YWcgPSBzaGlmdDsKKwlpZiggZXhpc3RzICR1cmx7ICR0YWcgfSApeworCQlyZXR1cm4gJHVybHsgJHRhZyB9OworCX0gZWxzZSB7CisJCSN3YXJuICJVbmtub3duIGh5cGVybGluayB0YXJnZXQ6ICR0YWdcbiI7CisJCSR0YWcgPX4gcy9cLnR4dC8vOworCQkkdGFnID1+IHMvPC8mbHQ7L2c7CisJCSR0YWcgPX4gcy8+LyZndDsvZzsKKwkJcmV0dXJuICI8Y29kZSBjbGFzcz1cImJhZGxpbmtcIj4kdGFnPC9jb2RlPiI7CisJfQorfQorCitzdWIgcmVhZFRhZ0ZpbGUKK3sKKwlteSgkdGFnZmlsZSkgPSBAXzsKKwlteSggJHRhZywgJGZpbGUsICRuYW1lICk7CisKKwlvcGVuKFRBR1MsIiR0YWdmaWxlIikgfHwgZGllICJjYW4ndCByZWFkIHRhZ3NcbiI7CisKKwl3aGlsZSggPFRBR1M+ICkgeworCQluZXh0IHVubGVzcyAvXihcUyspXHMrKFxTKylccysvOworCisJCSR0YWcgPSAkMTsKKwkJbXkgJGxhYmVsID0gJHRhZzsKKwkJKCRmaWxlPSAkMikgPX4gcy8udHh0JC8uaHRtbC9nOworCQkkbGFiZWwgPX4gcy9cLnR4dC8vOworCisJCSR1cmx7ICR0YWcgfSA9ICI8YSBocmVmPVwiJGZpbGUjIi5lc2N1cmwoJHRhZykuIlwiPiIuZXNjdGV4dCgkbGFiZWwpLiI8L2E+IjsKKwl9CisJY2xvc2UoIFRBR1MgKTsKK30KKworc3ViIGVzY3RleHQKK3sKKwlteSAkdGV4dCA9IHNoaWZ0OworCSR0ZXh0ID1+IHMvJi8mYW1wOy9nOworCSR0ZXh0ID1+IHMvPC8mbHQ7L2c7CisJJHRleHQgPX4gcy8+LyZndDsvZzsKKwlyZXR1cm4gJHRleHQ7Cit9CisKK3N1YiBlc2N1cmwKK3sKKwlteSAkdXJsID0gc2hpZnQ7CisJJHVybCA9fiBzLyIvJTIyL2c7CisJJHVybCA9fiBzL34vJTdFL2c7CisJJHVybCA9fiBzLzwvJTNDL2c7CisJJHVybCA9fiBzLz4vJTNFL2c7CisJJHVybCA9fiBzLz0vJTIwL2c7CisJJHVybCA9fiBzLyMvJTIzL2c7CisJJHVybCA9fiBzL1wvLyUyRi9nOworCisJcmV0dXJuICR1cmw7Cit9CisKK3N1YiB2aW0yaHRtbAoreworCW15KCAkaW5maWxlICkgPSBAXzsKKwlteSggJG91dGZpbGUgKTsKKworCW9wZW4oSU4sICIkaW5maWxlIiApIHx8IGRpZSAiQ291bGRuJ3QgcmVhZCBmcm9tICRpbmZpbGU6ICQhLlxuIjsKKworCSgkb3V0ZmlsZSA9ICRpbmZpbGUpID1+IHM6LiovOjpnOworCSRvdXRmaWxlID1+IHMvXC50eHQkLy9nOworCisJb3BlbiggT1VULCAiPiRvdXRmaWxlLmh0bWwiICkKKwkJCXx8IGRpZSAiQ291bGRuJ3Qgd3JpdGUgdG8gJG91dGZpbGUuaHRtbDogJCEuXG4iOworCW15ICRoZWFkID0gdWMoICRvdXRmaWxlICk7CisKKwlwcmludCBPVVQ8PEVPRjsKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5WSU06ICRvdXRmaWxlPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idmltLXN0eWxlc2hlZXQuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMj4kaGVhZDwvaDI+Cis8cHJlPgorRU9GCisKKwlteSAkaW5leGFtcGxlID0gMDsKKwl3aGlsZSggPElOPiApIHsKKwkJY2hvcDsKKwkJaWYgKCAvXlxzKlstPV0rXHMqJC8gKSB7CisJCQlwcmludCBPVVQgIjwvcHJlPjxocj48cHJlPiI7CisJCQluZXh0OworCQl9CisKKwkJIyBleGFtcGxlcworCQllbHNpZiggL14+JC8gfHwgL1xzPiQvICkgeworCQkJJGluZXhhbXBsZSA9IDE7CisJCQljaG9wOworCQl9CisJCWVsc2lmICggJGluZXhhbXBsZSAmJiAvXihbPFxTXSkvICkgeworCQkJJGluZXhhbXBsZSA9IDA7CisJCQkkXyA9ICQnIGlmICQxIGVxICI8IjsKKwkJfQorCisJCXMvXHMrJC8vZzsKKworCQkjIFZhcmlvdXMgdmltIGhpZ2hsaWdodHMuIG5vdGUgdGhhdCA8IGFuZCA+IGhhdmUgYWxyZWFkeSBiZWVuIGVzY2FwZWQKKwkJIyBzbyB0aGF0IEhUTUwgZG9lc24ndCBnZXQgc2NyZXdlZCB1cC4KKworCQlteSBAb3V0ID0gKCk7CisJCSMJCXByaW50ICJUZXh0OiAkX1xuIjsKKwkJTE9PUDoKKwkJZm9yZWFjaCBteSAkdG9rZW4gKCBzcGxpdCAvKCg/Olx8W15cfF0rXHwpfCg/OlwqW15cKl0rXCopKS8gKSB7CisJCQlpZiAoICR0b2tlbiA9fiAvXlx8KFteXHxdKylcfC8gKSB7CisJCQkJIyBsaW5rCisJCQkJcHVzaCggQG91dCwgInwiLm1hcGxpbmsoICQxICkuInwiICk7CisJCQkJbmV4dCBMT09QOworCQkJfQorCQkJZWxzaWYgKCAkdG9rZW4gPX4gL15cKihbXlwqXSspXCovICkgeworCQkJCSMgdGFyZ2V0CisJCQkJcHVzaCggQG91dCwKKwkJCQkJIjxiIGNsYXNzPVwidmltdGFnXCI+XCo8YSBuYW1lPVwiIi5lc2N1cmwoJDEpLiJcIj4iLmVzY3RleHQoJDEpLiI8XC9hPlwqPFwvYj4iKTsKKwkJCQluZXh0IExPT1A7CisJCQl9CisKKwkJCSRfID0gZXNjdGV4dCgkdG9rZW4pOworCQkJcy9DVFJMLShcdyspLzxjb2RlIGNsYXNzPSJrZXlzdHJva2UiPkNUUkwtJDE8XC9jb2RlPi9nOworCQkJIyBwYXJhbWV0ZXIgPC4uLj4KKwkJCXMvJmx0OyguKj8pJmd0Oy88Y29kZSBjbGFzcz0ic3BlY2lhbCI+Jmx0OyQxJmd0OzxcL2NvZGU+L2c7CisKKwkJCSMgcGFyYW1ldGVyIHsuLi59CisJCQlzL1x7KFtefV0qKVx9Lzxjb2RlIGNsYXNzPSJzcGVjaWFsIj57JDF9PFwvY29kZT4vZzsKKworCQkJIyBwYXJhbWV0ZXIgWy4uLl0KKwkJCXMvXFsocmFuZ2V8bGluZXxjb3VudHxvZmZzZXR8Y21kfFstK10/bnVtKVxdLzxjb2RlIGNsYXNzPSJzcGVjaWFsIj5cWyQxXF08XC9jb2RlPi9nOworCQkJIyBub3RlCisJCQlzLyhOb3RlOj8pLzxjb2RlIGNsYXNzPSJub3RlIj4kMTxcL2NvZGU+L2dpOworCisJCQkjIGxvY2FsIGhlYWRpbmcKKwkJCXMvXiguKilcfiQvPGNvZGUgY2xhc3M9InNlY3Rpb24iPiQxPFwvY29kZT4vZzsKKwkJCXB1c2goIEBvdXQsICRfICk7CisJCX0KKworCQkkXyA9IGpvaW4oICIiLCBAb3V0ICk7CisKKwkJaWYoICRpbmV4YW1wbGUgPT0gMiApIHsKKwkJCXByaW50IE9VVCAiPGNvZGUgY2xhc3M9XCJleGFtcGxlXCI+JF88L2NvZGU+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgT1VUICRfLCJcbiI7CisJCX0KKworCQkkaW5leGFtcGxlID0gMiBpZiAkaW5leGFtcGxlID09IDE7CisJfQorCXByaW50IE9VVDw8RU9GOworPC9wcmU+Cis8cD48aT5HZW5lcmF0ZWQgYnkgdmltMmh0bWwgb24gJGRhdGU8L2k+PC9wPgorPC9ib2R5PgorPC9odG1sPgorRU9GCisKK30KKworc3ViIHVzYWdlCit7CitkaWU8PEVPRjsKK3ZpbTJodG1sLnBsOiBjb252ZXJ0cyB2aW0gZG9jdW1lbnRhdGlvbiB0byBIVE1MLgordXNhZ2U6CisKKwl2aW0yaHRtbC5wbCA8dGFnIGZpbGU+IDx0ZXh0IGZpbGVzPgorRU9GCit9CisKKworCitzdWIgd3JpdGVDU1MKK3sKKwlvcGVuKCBDU1MsICI+dmltLXN0eWxlc2hlZXQuY3NzIiAgKSB8fCBkaWUgIkNvdWxkbid0IHdyaXRlIHN0eWxlc2hlZXQ6ICQhXG4iOworCXByaW50IENTUzw8RU9GOworYm9keSB7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBjb2xvcjogYmxhY2s7fQorOmxpbmsgeyBjb2xvcjogcmdiKDAsMTM3LDEzOSk7IH0KKzp2aXNpdGVkIHsgY29sb3I6IHJnYigwLDEwMCwxMDApOworICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogc2hvdWxkIGJlIGluaGVyaXQgKi8gfQorOmFjdGl2ZSB7IGNvbG9yOiByZ2IoMCwyMDAsMjAwKTsKKyAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogc2hvdWxkIGJlIGluaGVyaXQgKi8gfQorCitCLnZpbXRhZyB7IGNvbG9yIDogcmdiKDI1MCwwLDI1MCk7IH0KKworaDEsIGgyIHsgY29sb3I6IHJnYig4Miw4MCw4Mik7IHRleHQtYWxpZ246IGNlbnRlcjsgfQoraDMsIGg0LCBoNSwgaDYgeyBjb2xvcjogcmdiKDgyLDgwLDgyKTsgfQorLmhlYWRsaW5lIHsgY29sb3I6IHJnYigwLDEzNywxMzkpOyB9CisuaGVhZGVyIHsgY29sb3I6IHJnYigxNjQsIDMyLCAyNDYpOyB9Cisuc2VjdGlvbiB7IGNvbG9yOiByZ2IoMTY0LCAzMiwgMjQ2KTsgfQorLmtleXN0cm9rZSB7IGNvbG9yOiByZ2IoMTA2LCA4OSwgMjA1KTsgfQorLnZpbSB7IH0KKy5leGFtcGxlIHsgY29sb3I6IHJnYigwLCAwLCAyNTUpOyB9Cisub3B0aW9uIHsgfQorLm5vdHZpIHsgfQorLnNwZWNpYWwgeyBjb2xvcjogcmdiKDEwNiwgODksIDIwNSk7IH0KKy5ub3RlIHsgY29sb3I6IGJsdWU7IGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsgfQorLnN1YiB7fQorLmJhZGxpbmsgeyBjb2xvcjogcmdiKDAsMzcsMzkpOyB9CitFT0YKKworfQorCisjIG1haW4KK3VzYWdlKCkgaWYgJCNBUkdWIDwgMjsKKworcHJpbnQgIlByb2Nlc3NpbmcgdGFncy4uLlxuIjsKK3JlYWRUYWdGaWxlKCAkQVJHVlsgMCBdICk7CisKK2ZvcmVhY2ggbXkgJGZpbGUgKCAxLi4kI0FSR1YgKSB7CisJcHJpbnQgIlByb2Nlc3NpbmcgIi4kQVJHVlsgJGZpbGUgXS4iLi4uXG4iOworCXZpbTJodG1sKCAkQVJHVlsgJGZpbGUgXSApOworfQorcHJpbnQgIldyaXRpbmcgc3R5bGVzaGVldC4uLlxuIjsKK3dyaXRlQ1NTKCk7CitwcmludCAiZG9uZS5cbiIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZpbWRpZmYuMSBiL3J1bnRpbWUvZG9jL3ZpbWRpZmYuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDg3Mjg0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmltZGlmZi4xCkBAIC0wLDAgKzEsNDYgQEAKKy5USCBWSU1ESUZGIDEgIjIwMDEgTWFyY2ggMzAiCisuU0ggTkFNRQordmltZGlmZiBcLSBlZGl0IHR3byBvciB0aHJlZSB2ZXJzaW9ucyBvZiBhIGZpbGUgd2l0aCBWaW0gYW5kIHNob3cgZGlmZmVyZW5jZXMKKy5TSCBTWU5PUFNJUworLmJyCisuQiB2aW1kaWZmCitbb3B0aW9uc10gZmlsZTEgZmlsZTIgW2ZpbGUzXQorLlBQCisuQiBndmltZGlmZgorLlNIIERFU0NSSVBUSU9OCisuQiBWaW1kaWZmCitzdGFydHMKKy5CIFZpbQorb24gdHdvIChvciB0aHJlZSkgZmlsZXMuCitFYWNoIGZpbGUgZ2V0cyBpdHMgb3duIHdpbmRvdy4KK1RoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBmaWxlcyBhcmUgaGlnaGxpZ2h0ZWQuCitUaGlzIGlzIGEgbmljZSB3YXkgdG8gaW5zcGVjdCBjaGFuZ2VzIGFuZCB0byBtb3ZlIGNoYW5nZXMgZnJvbSBvbmUgdmVyc2lvbgordG8gYW5vdGhlciB2ZXJzaW9uIG9mIHRoZSBzYW1lIGZpbGUuCisuUFAKK1NlZSB2aW0oMSkgZm9yIGRldGFpbHMgYWJvdXQgVmltIGl0c2VsZi4KKy5QUAorV2hlbiBzdGFydGVkIGFzCisuQiBndmltZGlmZgordGhlIEdVSSB3aWxsIGJlIHN0YXJ0ZWQsIGlmIGF2YWlsYWJsZS4KKy5QUAorSW4gZWFjaCB3aW5kb3cgdGhlICdkaWZmJyBvcHRpb24gd2lsbCBiZSBzZXQsIHdoaWNoIGNhdXNlcyB0aGUgZGlmZmVyZW5jZXMKK3RvIGJlIGhpZ2hsaWdodGVkLgorLmJyCitUaGUgJ3dyYXAnIGFuZCAnc2Nyb2xsYmluZCcgb3B0aW9ucyBhcmUgc2V0IHRvIG1ha2UgdGhlIHRleHQgbG9vayBnb29kLgorLmJyCitUaGUgJ2ZvbGRtZXRob2QnIG9wdGlvbiBpcyBzZXQgdG8gImRpZmYiLCB3aGljaCBwdXRzIHJhbmdlcyBvZiBsaW5lcyB3aXRob3V0CitjaGFuZ2VzIGluIGEgZm9sZC4gICdmb2xkY29sdW1uJyBpcyBzZXQgdG8gdHdvIHRvIG1ha2UgaXQgZWFzeSB0byBzcG90IHRoZQorZm9sZHMgYW5kIG9wZW4gb3IgY2xvc2UgdGhlbS4KKy5TSCBPUFRJT05TCitWZXJ0aWNhbCBzcGxpdHMgYXJlIHVzZWQgdG8gYWxpZ24gdGhlIGxpbmVzLCBhcyBpZiB0aGUgIi1PIiBhcmd1bWVudCB3YXMgdXNlZC4KK1RvIHVzZSBob3Jpem9udGFsIHNwbGl0cyBpbnRlYWQsIHVzZSB0aGUgIi1vIiBhcmd1bWVudC4KKy5QUAorRm9yIGFsbCBvdGhlciBhcmd1bWVudHMgc2VlIHZpbSgxKS4KKy5TSCBTRUUgQUxTTwordmltKDEpCisuU0ggQVVUSE9SCitNb3N0IG9mCisuQiBWaW0KK3dhcyBtYWRlIGJ5IEJyYW0gTW9vbGVuYWFyLCB3aXRoIGEgbG90IG9mIGhlbHAgZnJvbSBvdGhlcnMuCitTZWUgIjpoZWxwIGNyZWRpdHMiIGluCisuQiBWaW0uCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92aW1kaWZmLm1hbiBiL3J1bnRpbWUvZG9jL3ZpbWRpZmYubWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MWNlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy92aW1kaWZmLm1hbgpAQCAtMCwwICsxLDY2IEBACisKKworCitWSU1ESUZGKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklNRElGRigxKQorCisKK05BTUUKKyAgICAgICB2aW1kaWZmICAtICBlZGl0ICB0d28gb3IgdGhyZWUgdmVyc2lvbnMgb2YgYSBmaWxlIHdpdGggVmltCisgICAgICAgYW5kIHNob3cgZGlmZmVyZW5jZXMKKworU1lOT1BTSVMKKyAgICAgICB2aW1kaWZmIFtvcHRpb25zXSBmaWxlMSBmaWxlMiBbZmlsZTNdCisKKyAgICAgICBndmltZGlmZgorCitERVNDUklQVElPTgorICAgICAgIFZpbWRpZmYgc3RhcnRzIFZpbSBvbiB0d28gKG9yICB0aHJlZSkgIGZpbGVzLiAgIEVhY2ggIGZpbGUKKyAgICAgICBnZXRzICBpdHMgIG93biAgd2luZG93LiAgVGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGZpbGVzCisgICAgICAgYXJlIGhpZ2hsaWdodGVkLiAgVGhpcyBpcyBhIG5pY2Ugd2F5ICB0byAgaW5zcGVjdCAgY2hhbmdlcworICAgICAgIGFuZCB0byBtb3ZlIGNoYW5nZXMgZnJvbSBvbmUgdmVyc2lvbiB0byBhbm90aGVyIHZlcnNpb24gb2YKKyAgICAgICB0aGUgc2FtZSBmaWxlLgorCisgICAgICAgU2VlIHZpbSgxKSBmb3IgZGV0YWlscyBhYm91dCBWaW0gaXRzZWxmLgorCisgICAgICAgV2hlbiBzdGFydGVkIGFzIGd2aW1kaWZmICB0aGUgIEdVSSAgd2lsbCAgYmUgIHN0YXJ0ZWQsICBpZgorICAgICAgIGF2YWlsYWJsZS4KKworICAgICAgIEluIGVhY2ggd2luZG93IHRoZSAnZGlmZicgb3B0aW9uIHdpbGwgYmUgc2V0LCB3aGljaCBjYXVzZXMKKyAgICAgICB0aGUgZGlmZmVyZW5jZXMgdG8gYmUgaGlnaGxpZ2h0ZWQuCisgICAgICAgVGhlICd3cmFwJyBhbmQgJ3Njcm9sbGJpbmQnIG9wdGlvbnMgYXJlIHNldCAgdG8gIG1ha2UgIHRoZQorICAgICAgIHRleHQgbG9vayBnb29kLgorICAgICAgIFRoZSAgJ2ZvbGRtZXRob2QnICBvcHRpb24gIGlzICBzZXQgIHRvICAiZGlmZiIsIHdoaWNoIHB1dHMKKyAgICAgICByYW5nZXMgb2YgbGluZXMgd2l0aG91dCBjaGFuZ2VzIGluIGEgIGZvbGQuICAgJ2ZvbGRjb2x1bW4nCisgICAgICAgaXMgIHNldCAgdG8gdHdvIHRvIG1ha2UgaXQgZWFzeSB0byBzcG90IHRoZSBmb2xkcyBhbmQgb3BlbgorICAgICAgIG9yIGNsb3NlIHRoZW0uCisKK09QVElPTlMKKyAgICAgICBWZXJ0aWNhbCBzcGxpdHMgYXJlIHVzZWQgdG8gYWxpZ24gdGhlICBsaW5lcywgIGFzICBpZiAgdGhlCisgICAgICAgIi1PIiAgYXJndW1lbnQgd2FzIHVzZWQuICBUbyB1c2UgaG9yaXpvbnRhbCBzcGxpdHMgaW50ZWFkLAorICAgICAgIHVzZSB0aGUgIi1vIiBhcmd1bWVudC4KKworICAgICAgIEZvciBhbGwgb3RoZXIgYXJndW1lbnRzIHNlZSB2aW0oMSkuCisKK1NFRSBBTFNPCisgICAgICAgdmltKDEpCisKK0FVVEhPUgorICAgICAgIE1vc3Qgb2YgVmltIHdhcyBtYWRlIGJ5IEJyYW0gTW9vbGVuYWFyLCB3aXRoIGEgbG90IG9mIGhlbHAKKyAgICAgICBmcm9tIG90aGVycy4gIFNlZSAiOmhlbHAgY3JlZGl0cyIgaW4gVmltLgorCisKKworCisKKworCisKKworCisKKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMSBNYXJjaCAzMCAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmltdHV0b3IuMSBiL3J1bnRpbWUvZG9jL3ZpbXR1dG9yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1YWVhNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZpbXR1dG9yLjEKQEAgLTAsMCArMSw1NCBAQAorLlRIIFZJTVRVVE9SIDEgIjIwMDEgQXByaWwgMiIKKy5TSCBOQU1FCit2aW10dXRvciBcLSB0aGUgVmltIHR1dG9yCisuU0ggU1lOT1BTSVMKKy5icgorLkIgdmltdHV0b3IgW2xhbmd1YWdlXQorLlNIIERFU0NSSVBUSU9OCisuQiBWaW10dXRvcgorc3RhcnRzIHRoZQorLkIgVmltCit0dXRvci4KK0l0IGNvcGllcyB0aGUgdHV0b3IgZmlsZSBmaXJzdCwgc28gdGhhdCBpdCBjYW4gYmUgbW9kaWZpZWQgd2l0aG91dCBjaGFuZ2luZwordGhlIG9yaWdpbmFsIGZpbGUuCisuUFAKK1RoZQorLkIgVmltdHV0b3IKK2lzIHVzZWZ1bCBmb3IgcGVvcGxlIHRoYXQgd2FudCB0byBsZWFybiB0aGVpciBmaXJzdAorLkIgVmltCitjb21tYW5kcy4KKy5QUAorVGhlIG9wdGlvbmFsIFtsYW5ndWFnZV0gYXJndW1lbnQgaXMgdGhlIHR3by1sZXR0ZXIgbmFtZSBvZiBhIGxhbmd1YWdlLCBsaWtlCisiaXQiIG9yICJlcyIuCitJZiB0aGUgW2xhbmd1YWdlXSBhcmd1bWVudCBpcyBtaXNzaW5nLCB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGN1cnJlbnQgbG9jYWxlIHdpbGwKK2JlIHVzZWQuCitJZiBhIHR1dG9yIGluIHRoaXMgbGFuZ3VhZ2UgaXMgYXZhaWxhYmxlLCBpdCB3aWxsIGJlIHVzZWQuCitPdGhlcndpc2UgdGhlIEVuZ2xpc2ggdmVyc2lvbiB3aWxsIGJlIHVzZWQuCisuUFAKKy5CIFZpbQoraXMgYWx3YXlzIHN0YXJ0ZWQgaW4gVmkgY29tcGF0aWJsZSBtb2RlLgorLlNIIEZJTEVTCisuVFAgMTUKKy91c3IvbG9jYWwvbGliL3ZpbS90dXRvci90dXRvclsubGFuZ3VhZ2VdCitUaGUKKy5CIFZpbXR1dG9yCit0ZXh0IGZpbGUocykuCisuVFAgMTUKKy91c3IvbG9jYWwvbGliL3ZpbS90dXRvci90dXRvci52aW0KK1RoZSBWaW0gc2NyaXB0IHVzZWQgdG8gY29weSB0aGUKKy5CIFZpbXR1dG9yCit0ZXh0IGZpbGUuCisuU0ggQVVUSE9SCitUaGUKKy5CIFZpbXR1dG9yCit3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciBWaSBieSBNaWNoYWVsIEMuIFBpZXJjZSBhbmQgUm9iZXJ0IEsuIFdhcmUsCitDb2xvcmFkbyBTY2hvb2wgb2YgTWluZXMgdXNpbmcgaWRlYXMgc3VwcGxpZWQgYnkgQ2hhcmxlcyBTbWl0aCwKK0NvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHkuCitFLW1haWw6IGJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdS4KKy5icgorSXQgd2FzIG1vZGlmaWVkIGZvcgorLkIgVmltCitieSBCcmFtIE1vb2xlbmFhci4KK0ZvciB0aGUgbmFtZXMgb2YgdGhlIHRyYW5zbGF0b3JzIHNlZSB0aGUgdHV0b3IgZmlsZXMuCisuU0ggU0VFIEFMU08KK3ZpbSgxKQpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmltdHV0b3IubWFuIGIvcnVudGltZS9kb2MvdmltdHV0b3IubWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNmIxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy92aW10dXRvci5tYW4KQEAgLTAsMCArMSw2NiBAQAorCisKKworVklNVFVUT1IoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklNVFVUT1IoMSkKKworCitOQU1FCisgICAgICAgdmltdHV0b3IgLSB0aGUgVmltIHR1dG9yCisKK1NZTk9QU0lTCisgICAgICAgdmltdHV0b3IgW2xhbmd1YWdlXQorCitERVNDUklQVElPTgorICAgICAgIFZpbXR1dG9yICBzdGFydHMgIHRoZSBWaW0gdHV0b3IuICBJdCBjb3BpZXMgdGhlIHR1dG9yIGZpbGUKKyAgICAgICBmaXJzdCwgc28gdGhhdCBpdCBjYW4gYmUgIG1vZGlmaWVkICB3aXRob3V0ICBjaGFuZ2luZyAgdGhlCisgICAgICAgb3JpZ2luYWwgZmlsZS4KKworICAgICAgIFRoZSBWaW10dXRvciBpcyB1c2VmdWwgZm9yIHBlb3BsZSB0aGF0IHdhbnQgdG8gbGVhcm4gdGhlaXIKKyAgICAgICBmaXJzdCBWaW0gY29tbWFuZHMuCisKKyAgICAgICBUaGUgb3B0aW9uYWwgW2xhbmd1YWdlXSBhcmd1bWVudCBpcyB0aGUgdHdvLWxldHRlciBuYW1lIG9mCisgICAgICAgYSBsYW5ndWFnZSwgbGlrZSAiaXQiIG9yICJlcyIuICBJZiB0aGUgW2xhbmd1YWdlXSBhcmd1bWVudAorICAgICAgIGlzIG1pc3NpbmcsIHRoZSBsYW5ndWFnZSBvZiB0aGUgIGN1cnJlbnQgIGxvY2FsZSAgd2lsbCAgYmUKKyAgICAgICB1c2VkLiAgIElmICBhIHR1dG9yIGluIHRoaXMgbGFuZ3VhZ2UgaXMgYXZhaWxhYmxlLCBpdCB3aWxsCisgICAgICAgYmUgdXNlZC4gIE90aGVyd2lzZSB0aGUgRW5nbGlzaCB2ZXJzaW9uIHdpbGwgYmUgdXNlZC4KKworICAgICAgIFZpbSBpcyBhbHdheXMgc3RhcnRlZCBpbiBWaSBjb21wYXRpYmxlIG1vZGUuCisKK0ZJTEVTCisgICAgICAgL3Vzci9sb2NhbC9saWIvdmltL3R1dG9yL3R1dG9yWy5sYW5ndWFnZV0KKyAgICAgICAgICAgICAgICAgICAgICBUaGUgVmltdHV0b3IgdGV4dCBmaWxlKHMpLgorCisgICAgICAgL3Vzci9sb2NhbC9saWIvdmltL3R1dG9yL3R1dG9yLnZpbQorICAgICAgICAgICAgICAgICAgICAgIFRoZSBWaW0gc2NyaXB0IHVzZWQgdG8gIGNvcHkgIHRoZSAgVmltdHV0b3IKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0IGZpbGUuCisKK0FVVEhPUgorICAgICAgIFRoZSAgVmltdHV0b3IgIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIFZpIGJ5IE1pY2hhZWwgQy4KKyAgICAgICBQaWVyY2UgYW5kIFJvYmVydCBLLiBXYXJlLCBDb2xvcmFkbyBTY2hvb2wgb2YgTWluZXMgIHVzaW5nCisgICAgICAgaWRlYXMgIHN1cHBsaWVkICBieSAgQ2hhcmxlcyBTbWl0aCwgQ29sb3JhZG8gU3RhdGUgVW5pdmVyLQorICAgICAgIHNpdHkuICBFLW1haWw6IGJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdS4KKyAgICAgICBJdCB3YXMgbW9kaWZpZWQgZm9yIFZpbSBieSBCcmFtIE1vb2xlbmFhci4gIEZvciB0aGUgIG5hbWVzCisgICAgICAgb2YgdGhlIHRyYW5zbGF0b3JzIHNlZSB0aGUgdHV0b3IgZmlsZXMuCisKK1NFRSBBTFNPCisgICAgICAgdmltKDEpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMSBBcHJpbCAyICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92aXN1YWwudHh0IGIvcnVudGltZS9kb2MvdmlzdWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTAwNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmlzdWFsLnR4dApAQCAtMCwwICsxLDQ4NyBAQAorKnZpc3VhbC50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1biAwOAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1Zpc3VhbCBtb2RlCQkJCSpWaXN1YWwqICpWaXN1YWwtbW9kZSogKnZpc3VhbC1tb2RlKgorCitWaXN1YWwgbW9kZSBpcyBhIGZsZXhpYmxlIGFuZCBlYXN5IHdheSB0byBzZWxlY3QgYSBwaWVjZSBvZiB0ZXh0IGZvciBhbgorb3BlcmF0b3IuICBJdCBpcyB0aGUgb25seSB3YXkgdG8gc2VsZWN0IGEgYmxvY2sgb2YgdGV4dC4KKworVGhpcyBpcyBpbnRyb2R1Y2VkIGluIHNlY3Rpb24gfDA0LjR8IG9mIHRoZSB1c2VyIG1hbnVhbC4KKworMS4gVXNpbmcgVmlzdWFsIG1vZGUJCQl8dmlzdWFsLXVzZXwKKzIuIFN0YXJ0aW5nIGFuZCBzdG9wcGluZyBWaXN1YWwgbW9kZQl8dmlzdWFsLXN0YXJ0fAorMy4gQ2hhbmdpbmcgdGhlIFZpc3VhbCBhcmVhCQl8dmlzdWFsLWNoYW5nZXwKKzQuIE9wZXJhdGluZyBvbiB0aGUgVmlzdWFsIGFyZWEJCXx2aXN1YWwtb3BlcmF0b3JzfAorNS4gQmxvY2t3aXNlIG9wZXJhdG9ycwkJCXxibG9ja3dpc2Utb3BlcmF0b3JzfAorNi4gUmVwZWF0aW5nCQkJCXx2aXN1YWwtcmVwZWF0fAorNy4gRXhhbXBsZXMJCQkJfHZpc3VhbC1leGFtcGxlc3wKKzguIFNlbGVjdCBtb2RlCQkJCXxTZWxlY3QtbW9kZXwKKwore1ZpIGhhcyBubyBWaXN1YWwgbW9kZSwgdGhlIG5hbWUgInZpc3VhbCIgaXMgdXNlZCBmb3IgTm9ybWFsIG1vZGUsIHRvCitkaXN0aW5ndWlzaCBpdCBmcm9tIEV4IG1vZGV9Cit7bm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K3Zpc3VhbHwgZmVhdHVyZSB3YXMgZGlzYWJsZWQgd2hlbiBjb21waWxpbmd9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gVXNpbmcgVmlzdWFsIG1vZGUJCQkJCSp2aXN1YWwtdXNlKgorCitVc2luZyBWaXN1YWwgbW9kZSBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0czoKKzEuIE1hcmsgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHdpdGggInYiLCAiViIgb3IgQ1RSTC1WLgorICAgVGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIHdpbGwgYmUgdXNlZCBhcyB0aGUgc3RhcnQuCisyLiBNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuCisgICBUaGUgdGV4dCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgVmlzdWFsIG1vZGUgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUKKyAgIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIGlzIGhpZ2hsaWdodGVkLgorMy4gVHlwZSBhbiBvcGVyYXRvciBjb21tYW5kLgorICAgVGhlIGhpZ2hsaWdodGVkIGNoYXJhY3RlcnMgd2lsbCBiZSBvcGVyYXRlZCB1cG9uLgorCitUaGUgJ2hpZ2hsaWdodCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZGlzcGxheSBtb2RlIHRvIHVzZSBmb3IKK2hpZ2hsaWdodGluZyBpbiBWaXN1YWwgbW9kZS4KK1RoZSAndmlydHVhbGVkaXQnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBhbGxvdyBwb3NpdGlvbmluZyB0aGUgY3Vyc29yIHRvCitwb3NpdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gYWN0dWFsIGNoYXJhY3Rlci4KKworVGhlIGhpZ2hsaWdodGVkIHRleHQgbm9ybWFsbHkgaW5jbHVkZXMgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLgorSG93ZXZlciwgd2hlbiB0aGUgJ3NlbGVjdGlvbicgb3B0aW9uIGlzIHNldCB0byAiZXhjbHVzaXZlIiBhbmQgdGhlIGN1cnNvciBpcworYWZ0ZXIgdGhlIFZpc3VhbCBhcmVhLCB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgaXMgbm90IGluY2x1ZGVkLgorCitXaXRoICJ2IiB0aGUgdGV4dCBiZWZvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCBhZnRlciB0aGUgZW5kIHBvc2l0aW9uIHdpbGwKK25vdCBiZSBoaWdobGlnaHRlZC4gIEhvd2V2ZXIsIEFsbCB1cHBlcmNhc2UgYW5kIG5vbi1hbHBoYSBvcGVyYXRvcnMsIGV4Y2VwdAorIn4iIGFuZCAiVSIsIHdpbGwgd29yayBvbiB3aG9sZSBsaW5lcyBhbnl3YXkuICBTZWUgdGhlIGxpc3Qgb2Ygb3BlcmF0b3JzCitiZWxvdy4KKworCQkJCQkJCSp2aXN1YWwtYmxvY2sqCitXaXRoIENUUkwtViAoYmxvY2t3aXNlIFZpc3VhbCBtb2RlKSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCB3aWxsIGJlIGEgcmVjdGFuZ2xlCitiZXR3ZWVuIHN0YXJ0IHBvc2l0aW9uIGFuZCB0aGUgY3Vyc29yLiAgSG93ZXZlciwgc29tZSBvcGVyYXRvcnMgd29yayBvbiB3aG9sZQorbGluZXMgYW55d2F5IChzZWUgdGhlIGxpc3QgYmVsb3cpLiAgVGhlIGNoYW5nZSBhbmQgc3Vic3RpdHV0ZSBvcGVyYXRvcnMgd2lsbAorZGVsZXRlIHRoZSBoaWdobGlnaHRlZCB0ZXh0IGFuZCB0aGVuIHN0YXJ0IGluc2VydGlvbiBhdCB0aGUgdG9wIGxlZnQKK3Bvc2l0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFN0YXJ0aW5nIGFuZCBzdG9wcGluZyBWaXN1YWwgbW9kZQkJCSp2aXN1YWwtc3RhcnQqCisKKwkJCQkJCSp2KiAqY2hhcmFjdGVyd2lzZS12aXN1YWwqCit2CQkJc3RhcnQgVmlzdWFsIG1vZGUgcGVyIGNoYXJhY3Rlci4KKworCQkJCQkJKlYqICpsaW5ld2lzZS12aXN1YWwqCitWCQkJc3RhcnQgVmlzdWFsIG1vZGUgbGluZXdpc2UuCisKKwkJCQkJCSpDVFJMLVYqICpibG9ja3dpc2UtdmlzdWFsKgorQ1RSTC1WCQkJc3RhcnQgVmlzdWFsIG1vZGUgYmxvY2t3aXNlLiAgTm90ZTogVW5kZXIgV2luZG93cworCQkJQ1RSTC1WIGNvdWxkIGJlIG1hcHBlZCB0byBwYXN0ZSB0ZXh0LCBpdCBkb2Vzbid0IHdvcmsKKwkJCXRvIHN0YXJ0IFZpc3VhbCBtb2RlIHRoZW4sIHNlZSB8Q1RSTC1WLWFsdGVybmF0aXZlfC4KKworSWYgeW91IHVzZSA8RXNjPiwgY2xpY2sgdGhlIGxlZnQgbW91c2UgYnV0dG9uIG9yIHVzZSBhbnkgY29tbWFuZCB0aGF0Citkb2VzIGEganVtcCB0byBhbm90aGVyIGJ1ZmZlciB3aGlsZSBpbiBWaXN1YWwgbW9kZSwgdGhlIGhpZ2hsaWdodGluZyBzdG9wcworYW5kIG5vIHRleHQgaXMgYWZmZWN0ZWQuICBBbHNvIHdoZW4geW91IGhpdCAidiIgaW4gY2hhcmFjdGVyd2lzZSBWaXN1YWwgbW9kZSwKKyJDVFJMLVYiIGluIGJsb2Nrd2lzZSBWaXN1YWwgbW9kZSBvciAiViIgaW4gbGluZXdpc2UgVmlzdWFsIG1vZGUuICBJZiB5b3UgaGl0CitDVFJMLVogdGhlIGhpZ2hsaWdodGluZyBzdG9wcyBhbmQgdGhlIGVkaXRvciBpcyBzdXNwZW5kZWQgb3IgYSBuZXcgc2hlbGwgaXMKK3N0YXJ0ZWQgfENUUkwtWnwuCisKKwkgICAgICBuZXcgbW9kZSBhZnRlciB0eXBpbmc6CQkqdl92KiAqdl9DVFJMLVYqICp2X1YqCitvbGQgbW9kZQkgICAgICJ2IgkgICAgICAiQ1RSTC1WIgkJICAgICAiViIJfgorCitOb3JtYWwJCSAgICBWaXN1YWwJICAgYmxvY2t3aXNlIFZpc3VhbAkgIGxpbmV3aXNlIFZpc3VhbAorVmlzdWFsCQkgICAgTm9ybWFsCSAgIGJsb2Nrd2lzZSBWaXN1YWwJICBsaW5ld2lzZSBWaXN1YWwKK2Jsb2Nrd2lzZSBWaXN1YWwgICAgVmlzdWFsCSAgIE5vcm1hbAkJICBsaW5ld2lzZSBWaXN1YWwKK2xpbmV3aXNlIFZpc3VhbCAgICAgVmlzdWFsCSAgIGJsb2Nrd2lzZSBWaXN1YWwJICBOb3JtYWwKKworCQkJCQkJCSpndiogKnZfZ3YqCitndgkJCVN0YXJ0IFZpc3VhbCBtb2RlIHdpdGggdGhlIHNhbWUgYXJlYSBhcyB0aGUgcHJldmlvdXMKKwkJCWFyZWEgYW5kIHRoZSBzYW1lIG1vZGUuICBJbiBWaXN1YWwgbW9kZSB0aGUgY3VycmVudCBhbmQKKwkJCXRoZSBwcmV2aW91cyBWaXN1YWwgYXJlYSBhcmUgZXhjaGFuZ2VkLgorCisJCQkJCQkJKjxMZWZ0TW91c2U+KgorPExlZnRNb3VzZT4JCVNldCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uICBJZiBWaXN1YWwgbW9kZSBpcworCQkJYWN0aXZlIGl0IGlzIHN0b3BwZWQuICBPbmx5IHdoZW4gJ21vdXNlJyBvcHRpb24gaXMKKwkJCWNvbnRhaW5zICduJyBvciAnYScuICBJZiB0aGUgcG9zaXRpb24gaXMgd2l0aGluICdzbycKKwkJCWxpbmVzIGZyb20gdGhlIGxhc3QgbGluZSBvbiB0aGUgc2NyZWVuIHRoZSB0ZXh0IGlzCisJCQlzY3JvbGxlZCB1cC4gIElmIHRoZSBwb3NpdGlvbiBpcyB3aXRoaW4gJ3NvJyBsaW5lcyBmcm9tCisJCQl0aGUgZmlyc3QgbGluZSBvbiB0aGUgc2NyZWVuIHRoZSB0ZXh0IGlzIHNjcm9sbGVkCisJCQlkb3duLgorCisJCQkJCQkJKjxSaWdodE1vdXNlPioKKzxSaWdodE1vdXNlPgkJU3RhcnQgVmlzdWFsIG1vZGUgaWYgaXQgaXMgbm90IGFjdGl2ZS4gIFRoZSB0ZXh0IGZyb20KKwkJCXRoZSBjdXJzb3IgcG9zaXRpb24gdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBjbGljayBpcworCQkJaGlnaGxpZ2h0ZWQuICBJZiBWaXN1YWwgbW9kZSB3YXMgYWxyZWFkeSBhY3RpdmUgbW92ZQorCQkJdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCwgd2hpY2ggZXZlcgorCQkJaXMgY2xvc2VzdCwgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBjbGljay4gIE9ubHkgd2hlbgorCQkJJ21vdXNlJyBvcHRpb24gY29udGFpbnMgJ24nIG9yICdhJy4KKworCQkJTm90ZTogd2hlbiAnbW91c2Vtb2RlbCcgaXMgc2V0IHRvICJwb3B1cCIsCisJCQk8Uy1MZWZ0TW91c2U+IGhhcyB0byBiZSB1c2VkIGluc3RlYWQgb2YgPFJpZ2h0TW91c2U+LgorCisJCQkJCQkJKjxMZWZ0UmVsZWFzZT4qCis8TGVmdFJlbGVhc2U+CQlUaGlzIHdvcmtzIGxpa2UgYSA8TGVmdE1vdXNlPiwgaWYgaXQgaXMgbm90IGF0CisJCQl0aGUgc2FtZSBwb3NpdGlvbiBhcyA8TGVmdE1vdXNlPi4gIEluIGFuIG9sZGVyIHZlcnNpb24KKwkJCW9mIHh0ZXJtIHlvdSB3b24ndCBzZWUgdGhlIHNlbGVjdGVkIGFyZWEgdW50aWwgdGhlCisJCQlidXR0b24gaXMgcmVsZWFzZWQsIHVubGVzcyB0aGVyZSBpcyBhY2Nlc3MgdG8gdGhlCisJCQlkaXNwbGF5IHdoZXJlIHRoZSB4dGVybSBpcyBydW5uaW5nICh2aWEgdGhlIERJU1BMQVkKKwkJCWVudmlyb25tZW50IHZhcmlhYmxlIG9yIHRoZSAtZGlzcGxheSBhcmd1bWVudCkuICBPbmx5CisJCQl3aGVuICdtb3VzZScgb3B0aW9uIGNvbnRhaW5zICduJyBvciAnYScuCisKK0lmIFZpc3VhbCBtb2RlIGlzIG5vdCBhY3RpdmUgYW5kIHRoZSAidiIsICJWIiBvciBDVFJMLVYgaXMgcHJlY2VkZWQgd2l0aCBhCitjb3VudCwgdGhlIHNpemUgb2YgdGhlIHByZXZpb3VzbHkgaGlnaGxpZ2h0ZWQgYXJlYSBpcyB1c2VkIGZvciBhIHN0YXJ0LiAgWW91CitjYW4gdGhlbiBtb3ZlIHRoZSBlbmQgb2YgdGhlIGhpZ2hsaWdodGVkIGFyZWEgYW5kIGdpdmUgYW4gb3BlcmF0b3IuICBUaGUgdHlwZQorb2YgdGhlIG9sZCBhcmVhIGlzIHVzZWQgKGNoYXJhY3RlciwgbGluZSBvciBibG9ja3dpc2UpLgorLSBMaW5ld2lzZSBWaXN1YWwgbW9kZTogVGhlIG51bWJlciBvZiBsaW5lcyBpcyBtdWx0aXBsaWVkIHdpdGggdGhlIGNvdW50LgorLSBCbG9ja3dpc2UgVmlzdWFsIG1vZGU6IFRoZSBudW1iZXIgb2YgbGluZXMgYW5kIGNvbHVtbnMgaXMgbXVsdGlwbGllZCB3aXRoCisgIHRoZSBjb3VudC4KKy0gTm9ybWFsIFZpc3VhbCBtb2RlIHdpdGhpbiBvbmUgbGluZTogVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlzIG11bHRpcGxpZWQKKyAgd2l0aCB0aGUgY291bnQuCistIE5vcm1hbCBWaXN1YWwgbW9kZSB3aXRoIHNldmVyYWwgbGluZXM6IFRoZSBudW1iZXIgb2YgbGluZXMgaXMgbXVsdGlwbGllZAorICB3aXRoIHRoZSBjb3VudCwgaW4gdGhlIGxhc3QgbGluZSB0aGUgc2FtZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyB1c2VkIGFzCisgIGluIHRoZSBsYXN0IGxpbmUgaW4gdGhlIHByZXZpb3VzbHkgaGlnaGxpZ2h0ZWQgYXJlYS4KK1RoZSBzdGFydCBvZiB0aGUgdGV4dCBpcyB0aGUgQ3Vyc29yIHBvc2l0aW9uLiAgSWYgdGhlICIkIiBjb21tYW5kIHdhcyB1c2VkIGFzCitvbmUgb2YgdGhlIGxhc3QgY29tbWFuZHMgdG8gZXh0ZW5kIHRoZSBoaWdobGlnaHRlZCB0ZXh0LCB0aGUgYXJlYSB3aWxsIGJlCitleHRlbmRlZCB0byB0aGUgcmlnaHRtb3N0IGNvbHVtbiBvZiB0aGUgbG9uZ2VzdCBsaW5lLgorCitJZiB5b3Ugd2FudCB0byBoaWdobGlnaHQgZXhhY3RseSB0aGUgc2FtZSBhcmVhIGFzIHRoZSBsYXN0IHRpbWUsIHlvdSBjYW4gdXNlCisiZ3YiIHxndnwgfHZfZ3Z8LgorCisJCQkJCQkJKnZfQ1RSTC1DKgorQ1RSTC1DCQkJSW4gVmlzdWFsIG1vZGU6IFN0b3AgVmlzdWFsIG1vZGUuICBXaGVuIGluc2VydCBtb2RlIGlzCisJCQlwZW5kaW5nICh0aGUgbW9kZSBtZXNzYWdlIHNob3dzCisJCQkiLS0gKGluc2VydCkgVklTVUFMIC0tIiksIGl0IGlzIGFsc28gc3RvcHBlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBDaGFuZ2luZyB0aGUgVmlzdWFsIGFyZWEJCQkJKnZpc3VhbC1jaGFuZ2UqCisKKwkJCQkJCQkqdl9vKgorbwkJCUdvIHRvIE90aGVyIGVuZCBvZiBoaWdobGlnaHRlZCB0ZXh0OiBUaGUgY3VycmVudAorCQkJY3Vyc29yIHBvc2l0aW9uIGJlY29tZXMgdGhlIHN0YXJ0IG9mIHRoZSBoaWdobGlnaHRlZAorCQkJdGV4dCBhbmQgdGhlIGN1cnNvciBpcyBtb3ZlZCB0byB0aGUgb3RoZXIgZW5kIG9mIHRoZQorCQkJaGlnaGxpZ2h0ZWQgdGV4dC4gIFRoZSBoaWdobGlnaHRlZCBhcmVhIHJlbWFpbnMgdGhlCisJCQlzYW1lLgorCisJCQkJCQkJKnZfTyoKK08JCQlHbyB0byBPdGhlciBlbmQgb2YgaGlnaGxpZ2h0ZWQgdGV4dC4gIFRoaXMgaXMgbGlrZQorCQkJIm8iLCBidXQgaW4gVmlzdWFsIGJsb2NrIG1vZGUgdGhlIGN1cnNvciBtb3ZlcyB0byB0aGUKKwkJCW90aGVyIGNvcm5lciBpbiB0aGUgc2FtZSBsaW5lLiAgV2hlbiB0aGUgY29ybmVyIGlzIGF0CisJCQlhIGNoYXJhY3RlciB0aGF0IG9jY3VwaWVzIG1vcmUgdGhhbiBvbmUgcG9zaXRpb24gb24KKwkJCXRoZSBzY3JlZW4gKGUuZy4sIGEgPFRhYj4pLCB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBtYXkKKwkJCWNoYW5nZS4KKworCQkJCQkJCSp2XyQqCitXaGVuIHRoZSAiJCIgY29tbWFuZCBpcyB1c2VkIHdpdGggYmxvY2t3aXNlIFZpc3VhbCBtb2RlLCB0aGUgcmlnaHQgZW5kIG9mIHRoZQoraGlnaGxpZ2h0ZWQgdGV4dCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGxvbmdlc3QgaGlnaGxpZ2h0ZWQgbGluZS4gIFRoaXMKK3N0b3BzIHdoZW4gYSBtb3Rpb24gY29tbWFuZCBpcyB1c2VkIHRoYXQgZG9lcyBub3QgbW92ZSBzdHJhaWdodCB1cCBvciBkb3duLgorCitGb3IgbW92aW5nIHRoZSBlbmQgb2YgdGhlIGJsb2NrIG1hbnkgY29tbWFuZHMgY2FuIGJlIHVzZWQsIGJ1dCB5b3UgY2Fubm90Cit1c2UgRXggY29tbWFuZHMsIGNvbW1hbmRzIHRoYXQgbWFrZSBjaGFuZ2VzIG9yIGFiYW5kb24gdGhlIGZpbGUuICBDb21tYW5kcworKHN0YXJ0aW5nIHdpdGgpICIucFBpSWFBTyYiLCBDVFJMLV4sICJaIiwgQ1RSTC1dLCBDVFJMLVQsIENUUkwtUiwgQ1RSTC1JCithbmQgQ1RSTC1PIGNhdXNlIGEgYmVlcCBhbmQgVmlzdWFsIG1vZGUgY29udGludWVzLgorCitXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHdpbmRvdyBvbiB0aGUgc2FtZSBidWZmZXIsIHRoZSBjdXJzb3IgcG9zaXRpb24gaW4KK3RoYXQgd2luZG93IGlzIGFkanVzdGVkLCBzbyB0aGF0IHRoZSBzYW1lIFZpc3VhbCBhcmVhIGlzIHN0aWxsIHNlbGVjdGVkLiAgVGhpcworaXMgZXNwZWNpYWxseSB1c2VmdWwgdG8gdmlldyB0aGUgc3RhcnQgb2YgdGhlIFZpc3VhbCBhcmVhIGluIG9uZSB3aW5kb3csIGFuZAordGhlIGVuZCBpbiBhbm90aGVyLiAgWW91IGNhbiB0aGVuIHVzZSA8UmlnaHRNb3VzZT4gKG9yIDxTLUxlZnRNb3VzZT4gd2hlbgorJ21vdXNlbW9kZWwnIGlzICJwb3B1cCIpIHRvIG1vdmUgZWl0aGVyIGVuZCBvZiB0aGUgVmlzdWFsIGFyZWEuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gT3BlcmF0aW5nIG9uIHRoZSBWaXN1YWwgYXJlYQkJCQkqdmlzdWFsLW9wZXJhdG9ycyoKKworVGhlIG9wZXJhdG9ycyB0aGF0IGNhbiBiZSB1c2VkIGFyZToKKwl+CXN3aXRjaCBjYXNlCQkJCQl8dl9+fAorCWQJZGVsZXRlCQkJCQkJfHZfZHwKKwljCWNoYW5nZSAoNCkJCQkJCXx2X2N8CisJeQl5YW5rCQkJCQkJfHZfeXwKKwk+CXNoaWZ0IHJpZ2h0ICg0KQkJCQkJfHZfPnwKKwk8CXNoaWZ0IGxlZnQgKDQpCQkJCQl8dl88fAorCSEJZmlsdGVyIHRocm91Z2ggZXh0ZXJuYWwgY29tbWFuZCAoMSkJCXx2XyF8CisJPQlmaWx0ZXIgdGhyb3VnaCAnZXF1YWxwcmcnIG9wdGlvbiBjb21tYW5kICgxKQl8dl89fAorCWdxCWZvcm1hdCBsaW5lcyB0byAndGV4dHdpZHRoJyBsZW5ndGggKDEpCQl8dl9ncXwKKworVGhlIG9iamVjdHMgdGhhdCBjYW4gYmUgdXNlZCBhcmU6CisJYXcJYSB3b3JkICh3aXRoIHdoaXRlIHNwYWNlKQkJCXx2X2F3fAorCWl3CWlubmVyIHdvcmQJCQkJCXx2X2l3fAorCWFXCWEgV09SRCAod2l0aCB3aGl0ZSBzcGFjZSkJCQl8dl9hV3wKKwlpVwlpbm5lciBXT1JECQkJCQl8dl9pV3wKKwlhcwlhIHNlbnRlbmNlICh3aXRoIHdoaXRlIHNwYWNlKQkJCXx2X2FzfAorCWlzCWlubmVyIHNlbnRlbmNlCQkJCQl8dl9pc3wKKwlhcAlhIHBhcmFncmFwaCAod2l0aCB3aGl0ZSBzcGFjZSkJCQl8dl9hcHwKKwlpcAlpbm5lciBwYXJhZ3JhcGgJCQkJCXx2X2lwfAorCWFiCWEgKCkgYmxvY2sgKHdpdGggcGFyZW50aGVzaXMpCQkJfHZfYWJ8CisJaWIJaW5uZXIgKCkgYmxvY2sJCQkJCXx2X2lifAorCWFCCWEge30gYmxvY2sgKHdpdGggYnJhY2VzKQkJCXx2X2FCfAorCWlCCWlubmVyIHt9IGJsb2NrCQkJCQl8dl9pQnwKKwlhPAlhIDw+IGJsb2NrICh3aXRoIDw+KQkJCQl8dl9hPHwKKwlpPAlpbm5lciA8PiBibG9jawkJCQkJfHZfaTx8CisJYVsJYSBbXSBibG9jayAod2l0aCBbXSkJCQkJfHZfYVt8CisJaVsJaW5uZXIgW10gYmxvY2sJCQkJCXx2X2lbfAorCitBZGRpdGlvbmFsbHkgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBjYW4gYmUgdXNlZDoKKwk6CXN0YXJ0IGV4IGNvbW1hbmQgZm9yIGhpZ2hsaWdodGVkIGxpbmVzICgxKQl8dl86fAorCXIJY2hhbmdlICg0KQkJCQkJfHZfcnwKKwlzCWNoYW5nZQkJCQkJCXx2X3N8CisJQwljaGFuZ2UgKDIpKDQpCQkJCQl8dl9DfAorCVMJY2hhbmdlICgyKQkJCQkJfHZfU3wKKwlSCWNoYW5nZSAoMikJCQkJCXx2X1J8CisJeAlkZWxldGUJCQkJCQl8dl94fAorCUQJZGVsZXRlICgzKQkJCQkJfHZfRHwKKwlYCWRlbGV0ZSAoMikJCQkJCXx2X1h8CisJWQl5YW5rICgyKQkJCQkJfHZfWXwKKwlwCXB1dAkJCQkJCXx2X3B8CisJSglqb2luICgxKQkJCQkJfHZfSnwKKwlVCW1ha2UgdXBwZXJjYXNlCQkJCQl8dl9VfAorCXUJbWFrZSBsb3dlcmNhc2UJCQkJCXx2X3V8CisJXl0JZmluZCB0YWcJCQkJCXx2X0NUUkwtXXwKKwlJCWJsb2NrIGluc2VydAkJCQkJfHZfYl9JfAorCUEJYmxvY2sgYXBwZW5kCQkJCQl8dl9iX0F8CisKKygxKTogQWx3YXlzIHdob2xlIGxpbmVzLCBzZWUgfDp2aXN1YWxfZXhhbXBsZXwuCisoMik6IFdob2xlIGxpbmVzIHdoZW4gbm90IHVzaW5nIENUUkwtVi4KKygzKTogV2hvbGUgbGluZXMgd2hlbiBub3QgdXNpbmcgQ1RSTC1WLCBkZWxldGUgdW50aWwgdGhlIGVuZCBvZiB0aGUgbGluZSB3aGVuCisgICAgIHVzaW5nIENUUkwtVi4KKyg0KTogV2hlbiB1c2luZyBDVFJMLVYgb3BlcmF0ZXMgb24gdGhlIGJsb2NrIG9ubHkuCisKK05vdGUgdGhhdCB0aGUgIjp2bWFwIiBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHNwZWNpZmljYWxseSBtYXAga2V5cyBpbiBWaXN1YWwKK21vZGUuICBGb3IgZXhhbXBsZSwgaWYgeW91IHdvdWxkIGxpa2UgdGhlICIvIiBjb21tYW5kIG5vdCB0byBleHRlbmQgdGhlIFZpc3VhbAorYXJlYSwgYnV0IGluc3RlYWQgdGFrZSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBhbmQgc2VhcmNoIGZvciB0aGF0OiA+CisJOnZtYXAgLyB5LzxDLVI+IjxDUj4KKyhJbiB0aGUgPD4gbm90YXRpb24gfDw+fCwgd2hlbiB0eXBpbmcgaXQgeW91IHNob3VsZCB0eXBlIGl0IGxpdGVyYWxseTsgeW91CituZWVkIHRvIHJlbW92ZSB0aGUgJ0InIGFuZCAnPCcgZmxhZ3MgZnJvbSAnY3BvcHRpb25zJy4pCisKK0lmIHlvdSB3YW50IHRvIGdpdmUgYSByZWdpc3RlciBuYW1lIHVzaW5nIHRoZSAiIiIgY29tbWFuZCwgZG8gdGhpcyBqdXN0IGJlZm9yZQordHlwaW5nIHRoZSBvcGVyYXRvciBjaGFyYWN0ZXI6ICJ2e21vdmUtYXJvdW5kfSJ4ZCIuCisKK0lmIHlvdSB3YW50IHRvIGdpdmUgYSBjb3VudCB0byB0aGUgY29tbWFuZCwgZG8gdGhpcyBqdXN0IGJlZm9yZSB0eXBpbmcgdGhlCitvcGVyYXRvciBjaGFyYWN0ZXI6ICJ2e21vdmUtYXJvdW5kfTM+IiAobW92ZSBsaW5lcyAzIGluZGVudHMgdG8gdGhlIHJpZ2h0KS4KKworCQkJCQkJCSp7bW92ZS1hcm91bmR9KgorVGhlIHttb3ZlLWFyb3VuZH0gaXMgYW55IHNlcXVlbmNlIG9mIG1vdmVtZW50IGNvbW1hbmRzLiAgTm90ZSB0aGUgZGlmZmVyZW5jZQord2l0aCB7bW90aW9ufSwgd2hpY2ggaXMgb25seSBPTkUgbW92ZW1lbnQgY29tbWFuZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBCbG9ja3dpc2Ugb3BlcmF0b3JzCQkJCQkqYmxvY2t3aXNlLW9wZXJhdG9ycyoKKwore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3Zpc3VhbGV4dHJhfCBmZWF0dXJlfQorCitSZW1pbmRlcjogVXNlICd2aXJ0dWFsZWRpdCcgdG8gYmUgYWJsZSB0byBzZWxlY3QgYmxvY2tzIHRoYXQgc3RhcnQgb3IgZW5kCithZnRlciB0aGUgZW5kIG9mIGEgbGluZSBvciBoYWxmd2F5IGEgdGFiLgorCitWaXN1YWwtYmxvY2sgSW5zZXJ0CQkJCQkJKnZfYl9JKgorV2l0aCBhIGJsb2Nrd2lzZSBzZWxlY3Rpb24sIEl7c3RyaW5nfTxFU0M+IHdpbGwgaW5zZXJ0IHtzdHJpbmd9IGF0IHRoZSBzdGFydAorb2YgYmxvY2sgb24gZXZlcnkgbGluZSBvZiB0aGUgYmxvY2ssIHByb3ZpZGVkIHRoYXQgdGhlIGxpbmUgZXh0ZW5kcyBpbnRvIHRoZQorYmxvY2suICBUaHVzIGxpbmVzIHRoYXQgYXJlIHNob3J0IHdpbGwgcmVtYWluIHVubW9kaWZpZWQuICBUQUJzIGFyZSBzcGxpdCB0bworcmV0YWluIHZpc3VhbCBjb2x1bW5zLgorU2VlIHx2X2JfSV9leGFtcGxlfC4KKworVmlzdWFsLWJsb2NrIEFwcGVuZAkJCQkJCSp2X2JfQSoKK1dpdGggYSBibG9ja3dpc2Ugc2VsZWN0aW9uLCBBe3N0cmluZ308RVNDPiB3aWxsIGFwcGVuZCB7c3RyaW5nfSB0byB0aGUgZW5kIG9mCitibG9jayBvbiBldmVyeSBsaW5lIG9mIHRoZSBibG9jay4gVGhlcmUgaXMgc29tZSBkaWZmZXJpbmcgYmVoYXZpb3Igd2hlcmUgdGhlCitibG9jayBSSFMgaXMgbm90IHN0cmFpZ2h0LCBkdWUgdG8gZGlmZmVyZW50IGxpbmUgbGVuZ3RoczoKKworMS4gQmxvY2sgd2FzIGNyZWF0ZWQgd2l0aCA8Qy12PiQKKyAgICBJbiB0aGlzIGNhc2UgdGhlIHN0cmluZyBpcyBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIGVhY2ggbGluZS4KKzIuIEJsb2NrIHdhcyBjcmVhdGVkIHdpdGggPEMtdj57bW92ZS1hcm91bmR9CisgICAgSW4gdGhpcyBjYXNlIHRoZSBzdHJpbmcgaXMgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgb24gZWFjaCBsaW5lLAorICAgIGFuZCB3aGl0ZXNwYWNlIGlzIGluc2VydGVkIHRvIHBhZCB0byB0aGUgZW5kLW9mLWJsb2NrIGNvbHVtbi4KK1NlZSB8dl9iX0FfZXhhbXBsZXwuCitOb3RlOiAiSSIgYW5kICJBIiBiZWhhdmUgZGlmZmVyZW50bHkgZm9yIGxpbmVzIHRoYXQgZG9uJ3QgZXh0ZW5kIGludG8gdGhlCitzZWxlY3RlZCBibG9jay4gIFRoaXMgd2FzIGRvbmUgaW50ZW50aW9uYWxseSwgc28gdGhhdCB5b3UgY2FuIGRvIGl0IHRoZSB3YXkKK3lvdSB3YW50LgorCitWaXN1YWwtYmxvY2sgY2hhbmdlCQkJCQkJKnZfYl9jKgorQWxsIHNlbGVjdGVkIHRleHQgaW4gdGhlIGJsb2NrIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHNhbWUgdGV4dCBzdHJpbmcuICBXaGVuCit1c2luZyAiYyIgdGhlIHNlbGVjdGVkIHRleHQgaXMgZGVsZXRlZCBhbmQgSW5zZXJ0IG1vZGUgc3RhcnRlZC4gIFlvdSBjYW4gdGhlbgorZW50ZXIgdGV4dCAod2l0aG91dCBhIGxpbmUgYnJlYWspLiAgV2hlbiB5b3UgaGl0IDxFc2M+LCB0aGUgc2FtZSBzdHJpbmcgaXMKK2luc2VydGVkIGluIGFsbCBwcmV2aW91c2x5IHNlbGVjdGVkIGxpbmVzLgorCitWaXN1YWwtYmxvY2sgQ2hhbmdlCQkJCQkJKnZfYl9DKgorTGlrZSB1c2luZyAiYyIsIGJ1dCB0aGUgc2VsZWN0aW9uIGlzIGV4dGVuZGVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIGxpbmUgZm9yCithbGwgbGluZXMuCisKKwkJCQkJCQkJKnZfYl88KgorVmlzdWFsLWJsb2NrIFNoaWZ0CQkJCQkJKnZfYl8+KgorVGhlIGJsb2NrIGlzIHNoaWZ0ZWQgYnkgJ3NoaWZ0d2lkdGgnLiBUaGUgUkhTIG9mIHRoZSBibG9jayBpcyBpcnJlbGV2YW50LiBUaGUKK0xIUyBvZiB0aGUgYmxvY2sgZGV0ZXJtaW5lcyB0aGUgcG9pbnQgZnJvbSB3aGljaCB0byBhcHBseSBhIHJpZ2h0IHNoaWZ0LCBhbmQKK3BhZGRpbmcgaW5jbHVkZXMgVEFCcyBvcHRpbWFsbHkgYWNjb3JkaW5nIHRvICd0cycgYW5kICdldCcuIFRoZSBMSFMgb2YgdGhlCitibG9jayBkZXRlcm1pbmVzIHRoZSBwb2ludCB1cHRvIHdoaWNoIHRvIHNoaWZ0IGxlZnQuCisgICAgTm90ZTogdl88IHBhZGRpbmcgaXMgYnVnZ3kgaWYgdGhlIFZpc3VhbCBCbG9jayBzdGFydHMgYW5kIGVuZHMgaW4gdGhlIHNhbWUKKyAgICBUQUIuIChWaW0gNS40YykuCitTZWUgfHZfYl8+X2V4YW1wbGV8LgorU2VlIHx2X2JfPF9leGFtcGxlfC4KKworVmlzdWFsLWJsb2NrIFJlcGxhY2UJCQkJCQkqdl9iX3IqCitFdmVyeSBzY3JlZW4gY2hhciBpbiB0aGUgaGlnaGxpZ2h0ZWQgcmVnaW9uIGlzIHJlcGxhY2VkIHdpdGggdGhlIHNhbWUgY2hhciwgaWUKK1RBQnMgYXJlIHNwbGl0IGFuZCB0aGUgdmlydHVhbCB3aGl0ZXNwYWNlIGlzIHJlcGxhY2VkLCBtYWludGFpbmluZyBzY3JlZW4KK2xheW91dC4KK1NlZSB8dl9iX3JfZXhhbXBsZXwuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBSZXBlYXRpbmcJCQkJCQkqdmlzdWFsLXJlcGVhdCoKKworV2hlbiByZXBlYXRpbmcgYSBWaXN1YWwgbW9kZSBvcGVyYXRvciwgdGhlIG9wZXJhdG9yIHdpbGwgYmUgYXBwbGllZCB0byB0aGUKK3NhbWUgYW1vdW50IG9mIHRleHQgYXMgdGhlIGxhc3QgdGltZToKKy0gTGluZXdpc2UgVmlzdWFsIG1vZGU6IFRoZSBzYW1lIG51bWJlciBvZiBsaW5lcy4KKy0gQmxvY2t3aXNlIFZpc3VhbCBtb2RlOiBUaGUgc2FtZSBudW1iZXIgb2YgbGluZXMgYW5kIGNvbHVtbnMuCistIE5vcm1hbCBWaXN1YWwgbW9kZSB3aXRoaW4gb25lIGxpbmU6IFRoZSBzYW1lIG51bWJlciBvZiBjaGFyYWN0ZXJzLgorLSBOb3JtYWwgVmlzdWFsIG1vZGUgd2l0aCBzZXZlcmFsIGxpbmVzOiBUaGUgc2FtZSBudW1iZXIgb2YgbGluZXMsIGluIHRoZQorICBsYXN0IGxpbmUgdGhlIHNhbWUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYXMgaW4gdGhlIGxhc3QgbGluZSB0aGUgbGFzdCB0aW1lLgorVGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IGlzIHRoZSBDdXJzb3IgcG9zaXRpb24uICBJZiB0aGUgIiQiIGNvbW1hbmQgd2FzIHVzZWQgYXMKK29uZSBvZiB0aGUgbGFzdCBjb21tYW5kcyB0byBleHRlbmQgdGhlIGhpZ2hsaWdodGVkIHRleHQsIHRoZSByZXBlYXRpbmcgd2lsbAorYmUgYXBwbGllZCB1cCB0byB0aGUgcmlnaHRtb3N0IGNvbHVtbiBvZiB0aGUgbG9uZ2VzdCBsaW5lLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gRXhhbXBsZXMJCQkJCQkqdmlzdWFsLWV4YW1wbGVzKgorCisJCQkJCQkJKjp2aXN1YWxfZXhhbXBsZSoKK0N1cnJlbnRseSB0aGUgIjoiIGNvbW1hbmQgd29ya3Mgb24gd2hvbGUgbGluZXMgb25seS4gIFdoZW4geW91IHNlbGVjdCBwYXJ0IG9mCithIGxpbmUsIGRvaW5nIHNvbWV0aGluZyBsaWtlICI6IWRhdGUiIHdpbGwgcmVwbGFjZSB0aGUgd2hvbGUgbGluZS4gIElmIHlvdQord2FudCBvbmx5IHBhcnQgb2YgdGhlIGxpbmUgdG8gYmUgcmVwbGFjZWQgeW91IHdpbGwgaGF2ZSB0byBtYWtlIGEgbWFwcGluZyBmb3IKK2l0LiAgSW4gYSBmdXR1cmUgcmVsZWFzZSAiOiIgbWF5IHdvcmsgb24gcGFydGlhbCBsaW5lcy4KKworSGVyZSBpcyBhbiBleGFtcGxlLCB0byByZXBsYWNlIHRoZSBzZWxlY3RlZCB0ZXh0IHdpdGggdGhlIG91dHB1dCBvZiAiZGF0ZSI6ID4KKwk6dm1hcCBfYSA8RXNjPmA+YTxDUj48RXNjPmA8aTxDUj48RXNjPiEhZGF0ZTxDUj5rSkoKKworKEluIHRoZSA8PiBub3RhdGlvbiB8PD58LCB3aGVuIHR5cGluZyBpdCB5b3Ugc2hvdWxkIHR5cGUgaXQgbGl0ZXJhbGx5OyB5b3UKK25lZWQgdG8gcmVtb3ZlIHRoZSAnQicgYW5kICc8JyBmbGFncyBmcm9tICdjcG9wdGlvbnMnKQorCitXaGF0IHRoaXMgZG9lcyBpczoKKzxFc2M+CQlzdG9wIFZpc3VhbCBtb2RlCitgPgkJZ28gdG8gdGhlIGVuZCBvZiB0aGUgVmlzdWFsIGFyZWEKK2E8Q1I+PEVzYz4JYnJlYWsgdGhlIGxpbmUgYWZ0ZXIgdGhlIFZpc3VhbCBhcmVhCitgPAkJanVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIFZpc3VhbCBhcmVhCitpPENSPjxFc2M+CWJyZWFrIHRoZSBsaW5lIGJlZm9yZSB0aGUgVmlzdWFsIGFyZWEKKyEhZGF0ZTxDUj4JZmlsdGVyIHRoZSBWaXN1YWwgdGV4dCB0aHJvdWdoIGRhdGUKK2tKSgkJSm9pbiB0aGUgbGluZXMgYmFjayB0b2dldGhlcgorCisJCQkJCQkJKnZpc3VhbC1zZWFyY2gqCitIZXJlIGlzIGFuIGlkZWEgZm9yIGEgbWFwcGluZyB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRvIGEgc2VhcmNoIGZvciB0aGUKK3NlbGVjdGVkIHRleHQ6ID4KKwk6dm1hcCBYIHkvPEMtUj4iPENSPgorCisoSW4gdGhlIDw+IG5vdGF0aW9uIHw8PnwsIHdoZW4gdHlwaW5nIGl0IHlvdSBzaG91bGQgdHlwZSBpdCBsaXRlcmFsbHk7IHlvdQorbmVlZCB0byByZW1vdmUgdGhlICdCJyBhbmQgJzwnIGZsYWdzIGZyb20gJ2Nwb3B0aW9ucycpCisKK05vdGUgdGhhdCBzcGVjaWFsIGNoYXJhY3RlcnMgKGxpa2UgJy4nIGFuZCAnKicpIHdpbGwgY2F1c2UgcHJvYmxlbXMuCisKK1Zpc3VhbC1ibG9jayBFeGFtcGxlcwkJCQkJKmJsb2Nrd2lzZS1leGFtcGxlcyoKK1dpdGggdGhlIGZvbGxvd2luZyB0ZXh0LCBJIHdpbGwgaW5kaWNhdGUgdGhlIGNvbW1hbmRzIHRvIHByb2R1Y2UgdGhlIGJsb2NrIGFuZAordGhlIHJlc3VsdHMgYmVsb3cuIEluIGFsbCBjYXNlcywgdGhlIGN1cnNvciBiZWdpbnMgb24gdGhlICdhJyBpbiB0aGUgZmlyc3QKK2xpbmUgaWYgdGhlIHRlc3QgdGV4dC4KK1RoZSBmb2xsb3dpbmcgbW9kZWxpbmUgc2V0dGluZ3MgYXJlIGFzc3VtZWQgIjp0cz04OnN3PTQ6Ii4KKworSXQgd2lsbCBiZSBoZWxwZnVsIHRvCis6c2V0IGhscworLzxUQUI+Cit3aGVyZSA8VEFCPiBpcyBhIHJlYWwgVEFCLiBUaGlzIGhlbHBzIHZpc3VhbGlzZSB0aGUgb3BlcmF0aW9ucy4KKworVGhlIHRlc3QgdGV4dCBpczoKKworYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2FiYwkJZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2FiY2RlZiAgZ2hpCQlqa2xtbm9wcXJzdHV2d3h5egorYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKworMS4gZm88Qy12PjNqSVNUUklORzxFU0M+CQkJCQkqdl9iX0lfZXhhbXBsZSoKKworYWJjZGVmZ2hpamtsbW5TVFJJTkdvcHFyc3R1dnd4eXoKK2FiYwkgICAgICBTVFJJTkcgIGRlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CithYmNkZWYgIGdoaSAgIFNUUklORwlqa2xtbm9wcXJzdHV2d3h5egorYWJjZGVmZ2hpamtsbW5TVFJJTkdvcHFyc3R1dnd4eXoKKworMi4gZm88Qy12PjNqJEFTVFJJTkc8RVNDPgkJCQkJKnZfYl9BX2V4YW1wbGUqCisKK2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6U1RSSU5HCithYmMJCWRlZmdoaWprbG1ub3BxcnN0dXZ3eHl6U1RSSU5HCithYmNkZWYgIGdoaQkJamtsbW5vcHFyc3R1dnd4eXpTVFJJTkcKK2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6U1RSSU5HCisKKzMuIGZvPEMtdj4zajNsPC4uCQkJCQkJKnZfYl88X2V4YW1wbGUqCisKK2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CithYmMJICAgICAgZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2FiY2RlZiAgZ2hpICAgamtsbW5vcHFyc3R1dnd4eXoKK2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CisKKzQuIGZvPEMtdj4zaj4uLgkJCQkJCQkqdl9iXz5fZXhhbXBsZSoKKworYWJjZGVmZ2hpamtsbW4JCSAgb3BxcnN0dXZ3eHl6CithYmMJCQkgICAgZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2FiY2RlZiAgZ2hpCQkJICAgIGprbG1ub3BxcnN0dXZ3eHl6CithYmNkZWZnaGlqa2xtbgkJICBvcHFyc3R1dnd4eXoKKworNS4gZm88Qy12PjVsM2pyWAkJCQkJCSp2X2Jfcl9leGFtcGxlKgorCithYmNkZWZnaGlqa2xtblhYWFhYWHV2d3h5egorYWJjCSAgICAgIFhYWFhYWGhpamtsbW5vcHFyc3R1dnd4eXoKK2FiY2RlZiAgZ2hpICAgWFhYWFhYICAgIGprbG1ub3BxcnN0dXZ3eHl6CithYmNkZWZnaGlqa2xtblhYWFhYWHV2d3h5egorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIFNlbGVjdCBtb2RlCQkJCQkJKlNlbGVjdCogKlNlbGVjdC1tb2RlKgorCitTZWxlY3QgbW9kZSBsb29rcyBsaWtlIFZpc3VhbCBtb2RlLCBidXQgdGhlIGNvbW1hbmRzIGFjY2VwdGVkIGFyZSBxdWl0ZQorZGlmZmVyZW50LiAgVGhpcyByZXNlbWJsZXMgdGhlIHNlbGVjdGlvbiBtb2RlIGluIE1pY3Jvc29mdCBXaW5kb3dzLgorV2hlbiB0aGUgJ3Nob3dtb2RlJyBvcHRpb24gaXMgc2V0LCAiLS0gU0VMRUNUIC0tIiBpcyBzaG93biBpbiB0aGUgbGFzdCBsaW5lLgorCitFbnRlcmluZyBTZWxlY3QgbW9kZToKKy0gVXNpbmcgdGhlIG1vdXNlIHRvIHNlbGVjdCBhbiBhcmVhLCBhbmQgJ3NlbGVjdG1vZGUnIGNvbnRhaW5zICJtb3VzZSIuCisgICdtb3VzZScgbXVzdCBhbHNvIGNvbnRhaW4gYSBmbGFnIGZvciB0aGUgY3VycmVudCBtb2RlLgorLSBVc2luZyBhIG5vbi1wcmludGFibGUgbW92ZW1lbnQgY29tbWFuZCwgd2l0aCB0aGUgU2hpZnQga2V5IHByZXNzZWQsIGFuZAorICAnc2VsZWN0bW9kZScgY29udGFpbnMgImtleSIuICBGb3IgZXhhbXBsZTogPFMtTGVmdD4gYW5kIDxTLUVuZD4uICAna2V5bW9kZWwnCisgIG11c3QgYWxzbyBjb250YWluICJzdGFydHNlbCIuCistIFVzaW5nICJ2IiwgIlYiIG9yIENUUkwtViBjb21tYW5kLCBhbmQgJ3NlbGVjdG1vZGUnIGNvbnRhaW5zICJjbWQiLgorLSBVc2luZyAiZ2giLCAiZ0giIG9yICJnX0NUUkwtSCIgY29tbWFuZCBpbiBOb3JtYWwgbW9kZS4KKy0gRnJvbSBWaXN1YWwgbW9kZSwgcHJlc3MgQ1RSTC1HLgkJCSp2X0NUUkwtRyoKKworQ29tbWFuZHMgaW4gU2VsZWN0IG1vZGU6CistIFByaW50YWJsZSBjaGFyYWN0ZXJzLCA8Tkw+IGFuZCA8Q1I+IGNhdXNlIHRoZSBzZWxlY3Rpb24gdG8gYmUgZGVsZXRlZCwgYW5kCisgIFZpbSBlbnRlcnMgSW5zZXJ0IG1vZGUuICBUaGUgdHlwZWQgY2hhcmFjdGVyIGlzIGluc2VydGVkLgorLSBOb24tcHJpbnRhYmxlIG1vdmVtZW50IGNvbW1hbmRzLCB3aXRoIHRoZSBTaGlmdCBrZXkgcHJlc3NlZCwgZXh0ZW5kIHRoZQorICBzZWxlY3Rpb24uICAna2V5bW9kZWwnIG11c3QgaW5jbHVkZSAic3RhcnRzZWwiLgorLSBOb24tcHJpbnRhYmxlIG1vdmVtZW50IGNvbW1hbmRzLCB3aXRoIHRoZSBTaGlmdCBrZXkgTk9UIHByZXNzZWQsIHN0b3AgU2VsZWN0CisgIG1vZGUuICAna2V5bW9kZWwnIG11c3QgaW5jbHVkZSAic3RvcHNlbCIuCistIEVTQyBzdG9wcyBTZWxlY3QgbW9kZS4KKy0gQ1RSTC1PIHN3aXRjaGVzIHRvIFZpc3VhbCBtb2RlIGZvciB0aGUgZHVyYXRpb24gb2Ygb25lIGNvbW1hbmQuICp2X0NUUkwtTyoKKy0gQ1RSTC1HIHN3aXRjaGVzIHRvIFZpc3VhbCBtb2RlLgorCitPdGhlcndpc2UsIHR5cGVkIGNoYXJhY3RlcnMgYXJlIGhhbmRsZWQgYXMgaW4gVmlzdWFsIG1vZGUuCisKK1doZW4gdXNpbmcgYW4gb3BlcmF0b3IgaW4gU2VsZWN0IG1vZGUsIGFuZCB0aGUgc2VsZWN0aW9uIGlzIGxpbmV3aXNlLCB0aGUKK3NlbGVjdGVkIGxpbmVzIGFyZSBvcGVyYXRlZCB1cG9uLCBidXQgbGlrZSBpbiBjaGFyYWN0ZXJ3aXNlIHNlbGVjdGlvbi4gIEZvcgorZXhhbXBsZSwgd2hlbiBhIHdob2xlIGxpbmUgaXMgZGVsZXRlZCwgaXQgY2FuIGxhdGVyIGJlIHBhc3RlZCBoYWxmd2F5IGEgbGluZS4KKworCitNYXBwaW5ncyBhbmQgbWVudXMgaW4gU2VsZWN0IG1vZGUuCQkJKlNlbGVjdC1tb2RlLW1hcHBpbmcqCisKK0luIFNlbGVjdCBtb2RlIHRoZSBtYXBwaW5ncyBhbmQgbWVudXMgb2YgVmlzdWFsIG1vZGUgYXJlIHVzZWQuICBCZWZvcmUgaXQgaXMKK2V4ZWN1dGVkLCBWaW0gYXV0b21hdGljYWxseSBzd2l0Y2hlcyB0byBWaXN1YWwgbW9kZSwgc28gdGhhdCB0aGUgc2FtZQorYmVoYXZpb3IgYXMgaW4gVmlzdWFsIG1vZGUgaXMgZWZmZWN0aXZlLgorCitBZnRlciB0aGUgbWFwcGluZyBvciBtZW51IGZpbmlzaGVzLCB0aGUgc2VsZWN0aW9uIGlzIGVuYWJsZWQgYWdhaW4gYW5kIFNlbGVjdAorbW9kZSBlbnRlcmVkLCB1bmxlc3MgdGhlIHNlbGVjdGVkIGFyZWEgd2FzIGRlbGV0ZWQsIGFub3RoZXIgYnVmZmVyIGJlY2FtZQordGhlIGN1cnJlbnQgb25lIG9yIHRoZSB3aW5kb3cgbGF5b3V0IHdhcyBjaGFuZ2VkLgorCitXaGVuIGEgY2hhcmFjdGVyIHdhcyB0eXBlZCB0aGF0IGNhdXNlcyB0aGUgc2VsZWN0aW9uIHRvIGJlIGRlbGV0ZWQgYW5kIEluc2VydAorbW9kZSBzdGFydGVkLCBJbnNlcnQgbW9kZSBtYXBwaW5ncyBhcmUgYXBwbGllZCB0byB0aGlzIGNoYXJhY3Rlci4gIFRoaXMgbWF5CitjYXVzZSBzb21lIGNvbmZ1c2lvbiwgYmVjYXVzZSBpdCBtZWFucyBJbnNlcnQgbW9kZSBtYXBwaW5ncyBhcHBseSB0byBhCitjaGFyYWN0ZXIgdHlwZWQgaW4gU2VsZWN0IG1vZGUuICBMYW5ndWFnZSBtYXBwaW5ncyBhcHBseSBhcyB3ZWxsLgorCisJCQkJCQkJKmdWKiAqdl9nVioKK2dWCQkJQXZvaWQgdGhlIGF1dG9tYXRpYyByZXNlbGVjdGlvbiBvZiB0aGUgVmlzdWFsIGFyZWEKKwkJCWFmdGVyIGEgU2VsZWN0IG1vZGUgbWFwcGluZyBvciBtZW51IGhhcyBmaW5pc2hlZC4KKwkJCVB1dCB0aGlzIGp1c3QgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIG1hcHBpbmcgb3IgbWVudS4KKwkJCUF0IGxlYXN0IGl0IHNob3VsZCBiZSBhZnRlciBhbnkgb3BlcmF0aW9ucyBvbiB0aGUKKwkJCXNlbGVjdGlvbi4KKworCQkJCQkJCSpnaCoKK2doCQkJU3RhcnQgU2VsZWN0IG1vZGUsIGNoYXJhY3Rlcndpc2UuICBUaGlzIGlzIGxpa2UgInYiLAorCQkJYnV0IHN0YXJ0cyBTZWxlY3QgbW9kZSBpbnN0ZWFkIG9mIFZpc3VhbCBtb2RlLgorCQkJTW5lbW9uaWM6ICJnZXQgaGlnaGxpZ2h0ZWQiLgorCisJCQkJCQkJKmdIKgorZ0gJCQlTdGFydCBTZWxlY3QgbW9kZSwgbGluZXdpc2UuICBUaGlzIGlzIGxpa2UgIlYiLAorCQkJYnV0IHN0YXJ0cyBTZWxlY3QgbW9kZSBpbnN0ZWFkIG9mIFZpc3VhbCBtb2RlLgorCQkJTW5lbW9uaWM6ICJnZXQgSGlnaGxpZ2h0ZWQiLgorCisJCQkJCQkJKmdfQ1RSTC1IKgorZyBDVFJMLUgJCVN0YXJ0IFNlbGVjdCBtb2RlLCBibG9ja3dpc2UuICBUaGlzIGlzIGxpa2UgQ1RSTC1WLAorCQkJYnV0IHN0YXJ0cyBTZWxlY3QgbW9kZSBpbnN0ZWFkIG9mIFZpc3VhbCBtb2RlLgorCQkJTW5lbW9uaWM6ICJnZXQgSGlnaGxpZ2h0ZWQiLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvd2luZG93cy50eHQgYi9ydW50aW1lL2RvYy93aW5kb3dzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWYzN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvd2luZG93cy50eHQKQEAgLTAsMCArMSwxMTIzIEBACisqd2luZG93cy50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgQXByIDI5CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworRWRpdGluZyB3aXRoIG11bHRpcGxlIHdpbmRvd3MgYW5kIGJ1ZmZlcnMuCQkqd2luZG93cyogKmJ1ZmZlcnMqCisKK1RoZSBjb21tYW5kcyB3aGljaCBoYXZlIGJlZW4gYWRkZWQgdG8gdXNlIG11bHRpcGxlIHdpbmRvd3MgYW5kIGJ1ZmZlcnMgYXJlCitleHBsYWluZWQgaGVyZS4gIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlIGV4cGxhbmF0aW9ucyBmb3IgY29tbWFuZHMgdGhhdCB3b3JrCitkaWZmZXJlbnRseSB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBtb3JlIHRoYW4gb25lIHdpbmRvdy4KKworVGhlIGJhc2ljcyBhcmUgZXhwbGFpbmVkIGluIGNoYXB0ZXIgNyBhbmQgOCBvZiB0aGUgdXNlciBtYW51YWwgfHVzcl8wNy50eHR8Cit8dXNyXzA4LnR4dHwuCisKKzEuICBJbnRyb2R1Y3Rpb24JCQkJfHdpbmRvd3MtaW50cm98CisyLiAgU3RhcnRpbmcgVmltCQkJCXx3aW5kb3dzLXN0YXJ0aW5nfAorMy4gIE9wZW5pbmcgYW5kIGNsb3NpbmcgYSB3aW5kb3cJCXxvcGVuaW5nLXdpbmRvd3wKKzQuICBNb3ZpbmcgY3Vyc29yIHRvIG90aGVyIHdpbmRvd3MJCXx3aW5kb3ctbW92ZS1jdXJzb3J8Cis1LiAgTW92aW5nIHdpbmRvd3MgYXJvdW5kCQkJfHdpbmRvdy1tb3Zpbmd8Cis2LiAgV2luZG93IHJlc2l6aW5nCQkJCXx3aW5kb3ctcmVzaXplfAorNy4gIEFyZ3VtZW50IGFuZCBidWZmZXIgbGlzdCBjb21tYW5kcwkJfGJ1ZmZlci1saXN0fAorOC4gIERvIGEgY29tbWFuZCBpbiBhbGwgYnVmZmVycyBvciB3aW5kb3dzCXxsaXN0LXJlcGVhdHwKKzkuICBUYWcgb3IgZmlsZSBuYW1lIHVuZGVyIHRoZSBjdXJzb3IJCXx3aW5kb3ctdGFnfAorMTAuIFRoZSBwcmV2aWV3IHdpbmRvdwkJCQl8cHJldmlldy13aW5kb3d8CisxMS4gVXNpbmcgaGlkZGVuIGJ1ZmZlcnMJCQl8YnVmZmVyLWhpZGRlbnwKKzEyLiBTcGVjaWFsIGtpbmRzIG9mIGJ1ZmZlcnMJCQl8c3BlY2lhbC1idWZmZXJzfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9Cit7bm90IGFibGUgdG8gdXNlIG11bHRpcGxlIHdpbmRvd3Mgd2hlbiB0aGUgfCt3aW5kb3dzfCBmZWF0dXJlIHdhcyBkaXNhYmxlZCBhdAorY29tcGlsZSB0aW1lfQore25vdCBhYmxlIHRvIHVzZSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3Mgd2hlbiB0aGUgfCt2ZXJ0c3BsaXR8IGZlYXR1cmUgd2FzCitkaXNhYmxlZCBhdCBjb21waWxlIHRpbWV9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW50cm9kdWN0aW9uCQkJCQkJKndpbmRvd3MtaW50cm8qCisKK0Egd2luZG93IGlzIGEgdmlld3BvcnQgb250byBhIGJ1ZmZlci4gIFlvdSBjYW4gdXNlIG11bHRpcGxlIHdpbmRvd3Mgb24gb25lCitidWZmZXIsIG9yIHNldmVyYWwgd2luZG93cyBvbiBkaWZmZXJlbnQgYnVmZmVycy4KKworQSBidWZmZXIgaXMgYSBmaWxlIGxvYWRlZCBpbnRvIG1lbW9yeSBmb3IgZWRpdGluZy4gIFRoZSBvcmlnaW5hbCBmaWxlIHJlbWFpbnMKK3VuY2hhbmdlZCB1bnRpbCB5b3Ugd3JpdGUgdGhlIGJ1ZmZlciB0byB0aGUgZmlsZS4KKworQSBidWZmZXIgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6CisKKwkJCQkJCQkqYWN0aXZlLWJ1ZmZlcioKK2FjdGl2ZTogICBUaGUgYnVmZmVyIGlzIGRpc3BsYXllZCBpbiBhIHdpbmRvdy4gIElmIHRoZXJlIGlzIGEgZmlsZSBmb3IgdGhpcworCSAgYnVmZmVyLCBpdCBoYXMgYmVlbiByZWFkIGludG8gdGhlIGJ1ZmZlci4gIFRoZSBidWZmZXIgbWF5IGhhdmUgYmVlbgorCSAgbW9kaWZpZWQgc2luY2UgdGhlbiBhbmQgdGh1cyBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZmlsZS4KKwkJCQkJCQkqaGlkZGVuLWJ1ZmZlcioKK2hpZGRlbjogICBUaGUgYnVmZmVyIGlzIG5vdCBkaXNwbGF5ZWQuICBJZiB0aGVyZSBpcyBhIGZpbGUgZm9yIHRoaXMgYnVmZmVyLCBpdAorCSAgaGFzIGJlZW4gcmVhZCBpbnRvIHRoZSBidWZmZXIuICBPdGhlcndpc2UgaXQncyB0aGUgc2FtZSBhcyBhbiBhY3RpdmUKKwkgIGJ1ZmZlciwgeW91IGp1c3QgY2FuJ3Qgc2VlIGl0LgorCQkJCQkJCSppbmFjdGl2ZS1idWZmZXIqCitpbmFjdGl2ZTogVGhlIGJ1ZmZlciBpcyBub3QgZGlzcGxheWVkIGFuZCBkb2VzIG5vdCBjb250YWluIGFueXRoaW5nLiAgT3B0aW9ucworCSAgZm9yIHRoZSBidWZmZXIgYXJlIHJlbWVtYmVyZWQgaWYgdGhlIGZpbGUgd2FzIG9uY2UgbG9hZGVkLiAgSXQgY2FuCisJICBjb250YWluIG1hcmtzIGZyb20gdGhlIHx2aW1pbmZvfCBmaWxlLiAgQnV0IHRoZSBidWZmZXIgZG9lc24ndAorCSAgY29udGFpbiB0ZXh0LgorCitJbiBhIHRhYmxlOgorCitzdGF0ZQkJZGlzcGxheWVkCWxvYWRlZAkJIjpidWZmZXJzIiAgfgorCQlpbiB3aW5kb3cJCQlzaG93cwkgICAgfgorYWN0aXZlCQkgIHllcwkJIHllcwkJICAnYScKK2hpZGRlbgkJICBubwkJIHllcwkJICAnaCcKK2luYWN0aXZlCSAgbm8JCSBubwkJICAnICcKKworTm90ZTogQWxsIENUUkwtVyBjb21tYW5kcyBjYW4gYWxzbyBiZSBleGVjdXRlZCB3aXRoIHw6d2luY21kfCwgZm9yIHRob3NlCitwbGFjZXMgd2hlcmUgYSBOb3JtYWwgbW9kZSBjb21tYW5kIGNhbid0IGJlIHVzZWQgb3IgaXMgaW5jb252ZW5pZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFN0YXJ0aW5nIFZpbQkJCQkJCSp3aW5kb3dzLXN0YXJ0aW5nKgorCitCeSBkZWZhdWx0LCBWaW0gc3RhcnRzIHdpdGggb25lIHdpbmRvdywganVzdCBsaWtlIFZpLgorCitUaGUgIi1vIiBhbmQgIi1PIiBhcmd1bWVudHMgdG8gVmltIGNhbiBiZSB1c2VkIHRvIG9wZW4gYSB3aW5kb3cgZm9yIGVhY2ggZmlsZQoraW4gdGhlIGFyZ3VtZW50IGxpc3QuICBUaGUgIi1vIiBhcmd1bWVudCB3aWxsIHNwbGl0IHRoZSB3aW5kb3dzIGhvcml6b250YWxseTsKK3RoZSAiLU8iIGFyZ3VtZW50IHdpbGwgc3BsaXQgdGhlIHdpbmRvd3MgdmVydGljYWxseS4gIElmIGJvdGggIi1vIiBhbmQgIi1PIgorYXJlIGdpdmVuLCB0aGUgbGFzdCBvbmUgZW5jb3VudGVyZWQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgc3BsaXQKK29yaWVudGF0aW9uLiAgRm9yIGV4YW1wbGUsIHRoaXMgd2lsbCBvcGVuIHRocmVlIHdpbmRvd3MsIHNwbGl0IGhvcml6b250YWxseTogPgorCXZpbSAtbyBmaWxlMSBmaWxlMiBmaWxlMworCisiLW9OIiwgd2hlcmUgTiBpcyBhIGRlY2ltYWwgbnVtYmVyLCBvcGVucyBOIHdpbmRvd3Mgc3BsaXQgaG9yaXpvbnRhbGx5LiAgSWYKK3RoZXJlIGFyZSBtb3JlIGZpbGUgbmFtZXMgdGhhbiB3aW5kb3dzLCBvbmx5IE4gd2luZG93cyBhcmUgb3BlbmVkIGFuZCBzb21lCitmaWxlcyBkbyBub3QgZ2V0IGEgd2luZG93LiAgSWYgdGhlcmUgYXJlIG1vcmUgd2luZG93cyB0aGFuIGZpbGUgbmFtZXMsIHRoZQorbGFzdCBmZXcgd2luZG93cyB3aWxsIGJlIGVkaXRpbmcgZW1wdHkgYnVmZmVycy4gIFNpbWlsYXJseSwgIi1PTiIgb3BlbnMgTgord2luZG93cyBzcGxpdCB2ZXJ0aWNhbGx5LCB3aXRoIHRoZSBzYW1lIHJlc3RyaWN0aW9ucy4KKworSWYgdGhlcmUgYXJlIG1hbnkgZmlsZSBuYW1lcywgdGhlIHdpbmRvd3Mgd2lsbCBiZWNvbWUgdmVyeSBzbWFsbC4gIFlvdSBtaWdodAord2FudCB0byBzZXQgdGhlICd3aW5oZWlnaHQnIGFuZC9vciAnd2lud2lkdGgnIG9wdGlvbnMgdG8gY3JlYXRlIGEgd29ya2FibGUKK3NpdHVhdGlvbi4KKworQnVmL1dpbiBFbnRlci9MZWF2ZSB8YXV0b2NvbW1hbmR8cyBhcmUgbm90IGV4ZWN1dGVkIHdoZW4gb3BlbmluZyB0aGUgbmV3Cit3aW5kb3dzIGFuZCByZWFkaW5nIHRoZSBmaWxlcywgdGhhdCdzIG9ubHkgZG9uZSB3aGVuIHRoZXkgYXJlIHJlYWxseSBlbnRlcmVkLgorCisJCQkJCQkJKnN0YXR1cy1saW5lKgorQSBzdGF0dXMgbGluZSB3aWxsIGJlIHVzZWQgdG8gc2VwYXJhdGUgd2luZG93cy4gIFRoZSAnbGFzdHN0YXR1cycgb3B0aW9uIHRlbGxzCit3aGVuIHRoZSBsYXN0IHdpbmRvdyBhbHNvIGhhcyBhIHN0YXR1cyBsaW5lOgorCSdsYXN0c3RhdHVzJyA9IDAJbmV2ZXIgYSBzdGF0dXMgbGluZQorCSdsYXN0c3RhdHVzJyA9IDEJc3RhdHVzIGxpbmUgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB3aW5kb3cKKwknbGFzdHN0YXR1cycgPSAyCWFsd2F5cyBhIHN0YXR1cyBsaW5lCisKK1lvdSBjYW4gY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgc3RhdHVzIGxpbmUgd2l0aCB0aGUgJ3N0YXR1c2xpbmUnIG9wdGlvbi4KKworTm9ybWFsbHksIGludmVyc2lvbiBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHN0YXR1cyBsaW5lLiAgVGhpcyBjYW4gYmUgY2hhbmdlZAord2l0aCB0aGUgJ3MnIGNoYXJhY3RlciBpbiB0aGUgJ2hpZ2hsaWdodCcgb3B0aW9uLiAgRm9yIGV4YW1wbGUsICJzYiIgc2V0cyBpdCB0bworYm9sZCBjaGFyYWN0ZXJzLiAgSWYgbm8gaGlnaGxpZ2h0aW5nIGlzIHVzZWQgZm9yIHRoZSBzdGF0dXMgbGluZSAoInNuIiksIHRoZQorJ14nIGNoYXJhY3RlciBpcyB1c2VkIGZvciB0aGUgY3VycmVudCB3aW5kb3csIGFuZCAnPScgZm9yIG90aGVyIHdpbmRvd3MuICBJZgordGhlIG1vdXNlIGlzIHN1cHBvcnRlZCBhbmQgZW5hYmxlZCB3aXRoIHRoZSAnbW91c2UnIG9wdGlvbiwgYSBzdGF0dXMgbGluZSBjYW4KK2JlIGRyYWdnZWQgdG8gcmVzaXplIHdpbmRvd3MuCisKK05vdGU6IElmIHlvdSBleHBlY3QgeW91ciBzdGF0dXMgbGluZSB0byBiZSBpbiByZXZlcnNlIHZpZGVvIGFuZCBpdCBpc24ndCwKK2NoZWNrIGlmIHRoZSAnaGlnaGxpZ2h0JyBvcHRpb24gY29udGFpbnMgInNpIi4gIEluIHZlcnNpb24gMy4wLCB0aGlzIG1lYW50IHRvCitpbnZlcnQgdGhlIHN0YXR1cyBsaW5lLiAgTm93IGl0IHNob3VsZCBiZSAic3IiLCByZXZlcnNlIHRoZSBzdGF0dXMgbGluZSwgYXMKKyJzaSIgbm93IHN0YW5kcyBmb3IgaXRhbGljISAgSWYgaXRhbGljIGlzIG5vdCBhdmFpbGFibGUgb24geW91ciB0ZXJtaW5hbCwgdGhlCitzdGF0dXMgbGluZSBpcyBpbnZlcnRlZCBhbnl3YXk7IHlvdSB3aWxsIG9ubHkgc2VlIHRoaXMgcHJvYmxlbSBvbiB0ZXJtaW5hbHMKK3RoYXQgaGF2ZSB0ZXJtY2FwIGNvZGVzIGZvciBpdGFsaWNzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIE9wZW5pbmcgYW5kIGNsb3NpbmcgYSB3aW5kb3cJCQkJKm9wZW5pbmctd2luZG93KiAqRTM2KgorCitDVFJMLVcgcwkJCQkJCSpDVFJMLVdfcyoKK0NUUkwtVyBTCQkJCQkJKkNUUkwtV19TKgorQ1RSTC1XIENUUkwtUwkJCQkJCSpDVFJMLVdfQ1RSTC1TKgorOltOXXNwW2xpdF0gWysrb3B0XSBbK2NtZF0JCQkJKjpzcCogKjpzcGxpdCoKKwkJU3BsaXQgY3VycmVudCB3aW5kb3cgaW4gdHdvLiAgVGhlIHJlc3VsdCBpcyB0d28gdmlld3BvcnRzIG9uCisJCXRoZSBzYW1lIGZpbGUuICBNYWtlIG5ldyB3aW5kb3cgTiBoaWdoIChkZWZhdWx0IGlzIHRvIHVzZSBoYWxmCisJCXRoZSBoZWlnaHQgb2YgdGhlIGN1cnJlbnQgd2luZG93KS4gIFJlZHVjZXMgdGhlIGN1cnJlbnQgd2luZG93CisJCWhlaWdodCB0byBjcmVhdGUgcm9vbSAoYW5kIG90aGVycywgaWYgdGhlICdlcXVhbGFsd2F5cycgb3B0aW9uCisJCWlzIHNldCBhbmQgJ2VhZGlyZWN0aW9uJyBpc24ndCAiaG9yIikuCisJCU5vdGU6IENUUkwtUyBkb2VzIG5vdCB3b3JrIG9uIGFsbCB0ZXJtaW5hbHMgYW5kIG1pZ2h0IGJsb2NrCisJCWZ1cnRoZXIgaW5wdXQsIHVzZSBDVFJMLVEgdG8gZ2V0IGdvaW5nIGFnYWluLgorCQlBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisKK0NUUkwtVyBDVFJMLVYJCQkJCQkqQ1RSTC1XX0NUUkwtVioKK0NUUkwtVyB2CQkJCQkJKkNUUkwtV192KgorOltOXXZzW3BsaXRdIFsrK29wdF0gWytjbWRdIFtmaWxlXQkJCSo6dnMqICo6dnNwbGl0KgorCQlMaWtlIHw6c3BsaXR8LCBidXQgc3BsaXQgdmVydGljYWxseS4gIElmICdlcXVhbGFsd2F5cycgaXMgc2V0CisJCWFuZCAnZWFkaXJlY3Rpb24nIGlzbid0ICJ2ZXIiIHRoZSB3aW5kb3dzIHdpbGwgYmUgc3ByZWFkIG91dAorCQlob3Jpem9udGFsbHksIHVubGVzcyBhIHdpZHRoIHdhcyBzcGVjaWZpZWQuCisJCU5vdGU6IEluIG90aGVyIHBsYWNlcyBDVFJMLVEgZG9lcyB0aGUgc2FtZSBhcyBDVFJMLVYsIGJ1dCBoZXJlCisJCWl0IGRvZXNuJ3QhCisKK0NUUkwtVyBuCQkJCQkJKkNUUkwtV19uKgorQ1RSTC1XIENUUkxfTgkJCQkJCSpDVFJMLVdfQ1RSTC1OKgorOltOXW5ldyBbKytvcHRdIFsrY21kXQkJCQkJKjpuZXcqCisJCUNyZWF0ZSBhIG5ldyB3aW5kb3cgYW5kIHN0YXJ0IGVkaXRpbmcgYW4gZW1wdHkgZmlsZSBpbiBpdC4KKwkJTWFrZSBuZXcgd2luZG93IE4gaGlnaCAoZGVmYXVsdCBpcyB0byB1c2UgaGFsZiB0aGUgZXhpc3RpbmcKKwkJaGVpZ2h0KS4gIFJlZHVjZXMgdGhlIGN1cnJlbnQgd2luZG93IGhlaWdodCB0byBjcmVhdGUgcm9vbSAoYW5kCisJCW90aGVycywgaWYgdGhlICdlcXVhbGFsd2F5cycgb3B0aW9uIGlzIHNldCBhbmQgJ2VhZGlyZWN0aW9uJworCQlpc24ndCAiaG9yIikuCisJCUFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKwkJSWYgJ2ZpbGVmb3JtYXRzJyBpcyBub3QgZW1wdHksIHRoZSBmaXJzdCBmb3JtYXQgZ2l2ZW4gd2lsbCBiZQorCQl1c2VkIGZvciB0aGUgbmV3IGJ1ZmZlci4gIElmICdmaWxlZm9ybWF0cycgaXMgZW1wdHksIHRoZQorCQknZmlsZWZvcm1hdCcgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIHVzZWQuICBUaGlzIGNhbiBiZQorCQlvdmVycmlkZGVuIHdpdGggdGhlIHwrK29wdHwgYXJndW1lbnQuCisJCUF1dG9jb21tYW5kcyBhcmUgZXhlY3V0ZWQgaW4gdGhpcyBvcmRlcjoKKwkJMS4gV2luTGVhdmUgZm9yIHRoZSBjdXJyZW50IHdpbmRvdworCQkyLiBXaW5FbnRlciBmb3IgdGhlIG5ldyB3aW5kb3cKKwkJMy4gQnVmTGVhdmUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlcgorCQk0LiBCdWZFbnRlciBmb3IgdGhlIG5ldyBidWZmZXIKKwkJVGhpcyBiZWhhdmVzIGxpa2UgYSAiOnNwbGl0IiBmaXJzdCwgYW5kIHRoZW4gYSAiOmUiIGNvbW1hbmQuCisKKzpbTl12bmVbd10gWysrb3B0XSBbK2NtZF0gW2ZpbGVdCQkJKjp2bmUqICo6dm5ldyoKKwkJTGlrZSB8Om5ld3wsIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5LiAgSWYgJ2VxdWFsYWx3YXlzJyBpcyBzZXQKKwkJYW5kICdlYWRpcmVjdGlvbicgaXNuJ3QgInZlciIgdGhlIHdpbmRvd3Mgd2lsbCBiZSBzcHJlYWQgb3V0CisJCWhvcml6b250YWxseSwgdW5sZXNzIGEgd2lkdGggd2FzIHNwZWNpZmllZC4KKworOltOXW5ldyBbKytvcHRdIFsrY21kXSB7ZmlsZX0KKzpbTl1zcFtsaXRdIFsrK29wdF0gWytjbWRdIHtmaWxlfQkJCSo6c3BsaXRfZioKKwkJQ3JlYXRlIGEgbmV3IHdpbmRvdyBhbmQgc3RhcnQgZWRpdGluZyBmaWxlIHtmaWxlfSBpbiBpdC4KKwkJSWYgWytjbWRdIGlzIGdpdmVuLCBleGVjdXRlIHRoZSBjb21tYW5kIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4KKwkJbG9hZGVkIHwrY21kfC4KKwkJQWxzbyBzZWUgfCsrb3B0fC4KKwkJTWFrZSBuZXcgd2luZG93IE4gaGlnaCAoZGVmYXVsdCBpcyB0byB1c2UgaGFsZiB0aGUgZXhpc3RpbmcKKwkJaGVpZ2h0KS4gIFJlZHVjZXMgdGhlIGN1cnJlbnQgd2luZG93IGhlaWdodCB0byBjcmVhdGUgcm9vbQorCQkoYW5kIG90aGVycywgaWYgdGhlICdlcXVhbGFsd2F5cycgb3B0aW9uIGlzIHNldCkuCisKKzpbTl1zdltpZXddIFsrK29wdF0gWytjbWRdIHtmaWxlfQkJKjpzdiogKjpzdmlldyogKnNwbGl0dmlldyoKKwkJU2FtZSBhcyAiOnNwbGl0IiwgYnV0IHNldCAncmVhZG9ubHknIG9wdGlvbiBmb3IgdGhpcyBidWZmZXIuCisKKzpbTl1zZltpbmRdIFsrK29wdF0gWytjbWRdIHtmaWxlfQkJKjpzZiogKjpzZmluZCogKnNwbGl0ZmluZCoKKwkJU2FtZSBhcyAiOnNwbGl0IiwgYnV0IHNlYXJjaCBmb3Ige2ZpbGV9IGluICdwYXRoJy4gIERvZXNuJ3QKKwkJc3BsaXQgaWYge2ZpbGV9IGlzIG5vdCBmb3VuZC4KKworQ1RSTC1XIENUUkwtXgkJCQkJKkNUUkwtV19DVFJMLV4qICpDVFJMLVdfXioKK0NUUkwtVyBeCURvZXMgIjpzcGxpdCAjIiwgc3BsaXQgd2luZG93IGluIHR3byBhbmQgZWRpdCBhbHRlcm5hdGUgZmlsZS4KKwkJV2hlbiBhIGNvdW50IGlzIGdpdmVuLCBpdCBiZWNvbWVzICI6c3BsaXQgI04iLCBzcGxpdCB3aW5kb3cKKwkJYW5kIGVkaXQgYnVmZmVyIE4uCisKK05vdGUgdGhhdCB0aGUgJ3NwbGl0YmVsb3cnIGFuZCAnc3BsaXRyaWdodCcgb3B0aW9ucyBpbmZsdWVuY2Ugd2hlcmUgYSBuZXcKK3dpbmRvdyB3aWxsIGFwcGVhci4KKworCQkJCQkJKjp2ZXJ0KiAqOnZlcnRpY2FsKgorOnZlcnRbaWNhbF0ge2NtZH0KKwkJRXhlY3V0ZSB7Y21kfS4gIElmIGl0IGNvbnRhaW5zIGEgY29tbWFuZCB0aGF0IHNwbGl0cyBhIHdpbmRvdywKKwkJaXQgd2lsbCBiZSBzcGxpdCB2ZXJ0aWNhbGx5LgorCis6bGVmdGFbYm92ZV0ge2NtZH0JCQkJKjpsZWZ0YSogKjpsZWZ0YWJvdmUqCis6YWJvW3ZlbGVmdF0ge2NtZH0JCQkJKjphYm8qICo6YWJvdmVsZWZ0KgorCQlFeGVjdXRlIHtjbWR9LiAgSWYgaXQgY29udGFpbnMgYSBjb21tYW5kIHRoYXQgc3BsaXRzIGEgd2luZG93LAorCQlpdCB3aWxsIGJlIG9wZW5lZCBsZWZ0ICh2ZXJ0aWNhbCBzcGxpdCkgb3IgYWJvdmUgKGhvcml6b250YWwKKwkJc3BsaXQpIHRoZSBjdXJyZW50IHdpbmRvdy4gIE92ZXJydWxlcyAnc3BsaXRiZWxvdycgYW5kCisJCSdzcGxpdHJpZ2h0Jy4KKworOnJpZ2h0YltlbG93XSB7Y21kfQkJCQkqOnJpZ2h0YiogKjpyaWdodGJlbG93KgorOmJlbFtvd3JpZ2h0XSB7Y21kfQkJCQkqOmJlbCogKjpiZWxvd3JpZ2h0KgorCQlFeGVjdXRlIHtjbWR9LiAgSWYgaXQgY29udGFpbnMgYSBjb21tYW5kIHRoYXQgc3BsaXRzIGEgd2luZG93LAorCQlpdCB3aWxsIGJlIG9wZW5lZCByaWdodCAodmVydGljYWwgc3BsaXQpIG9yIGJlbG93IChob3Jpem9udGFsCisJCXNwbGl0KSB0aGUgY3VycmVudCB3aW5kb3cuICBPdmVycnVsZXMgJ3NwbGl0YmVsb3cnIGFuZAorCQknc3BsaXRyaWdodCcuCisKKwkJCQkJCSo6dG9wbGVmdCogKkU0NDIqCis6dG9bcGxlZnRdIHtjbWR9CisJCUV4ZWN1dGUge2NtZH0uICBJZiBpdCBjb250YWlucyBhIGNvbW1hbmQgdGhhdCBzcGxpdHMgYSB3aW5kb3csCisJCWl0IHdpbGwgYXBwZWFyIGF0IHRoZSB0b3AgYW5kIG9jY3VweSB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgVmltCisJCXdpbmRvdy4gIFdoZW4gdGhlIHNwbGl0IGlzIHZlcnRpY2FsIHRoZSB3aW5kb3cgYXBwZWFycyBhdCB0aGUKKwkJZmFyIGxlZnQgYW5kIG9jY3VwaWVzIHRoZSBmdWxsIGhlaWdodCBvZiB0aGUgVmltIHdpbmRvdy4KKworCQkJCQkJKjpib3RyaWdodCoKKzpib1t0cmlnaHRdIHtjbWR9CisJCUV4ZWN1dGUge2NtZH0uICBJZiBpdCBjb250YWlucyBhIGNvbW1hbmQgdGhhdCBzcGxpdHMgYSB3aW5kb3csCisJCWl0IHdpbGwgYXBwZWFyIGF0IHRoZSBib3R0b20gYW5kIG9jY3VweSB0aGUgZnVsbCB3aWR0aCBvZiB0aGUKKwkJVmltIHdpbmRvdy4gIFdoZW4gdGhlIHNwbGl0IGlzIHZlcnRpY2FsIHRoZSB3aW5kb3cgYXBwZWFycyBhdAorCQl0aGUgZmFyIHJpZ2h0IGFuZCBvY2N1cGllcyB0aGUgZnVsbCBoZWlnaHQgb2YgdGhlIFZpbSB3aW5kb3cuCisKK1RoZXNlIGNvbW1hbmQgbW9kaWZpZXJzIGNhbiBiZSBjb21iaW5lZCB0byBtYWtlIGEgdmVydGljYWxseSBzcGxpdCB3aW5kb3cKK29jY3VweSB0aGUgZnVsbCBoZWlnaHQuICBFeGFtcGxlOiA+CisJOnZlcnRpY2FsIHRvcGxlZnQgZWRpdCB0YWdzCitPcGVucyBhIHZlcnRpY2FsbHkgc3BsaXQsIGZ1bGwtaGVpZ2h0IHdpbmRvdyBvbiB0aGUgInRhZ3MiIGZpbGUgYXQgdGhlIGZhcgorbGVmdCBvZiB0aGUgVmltIHdpbmRvdy4KKworCitDbG9zaW5nIGEgd2luZG93CistLS0tLS0tLS0tLS0tLS0tCisKK0NUUkwtVyBxCQkJCQkJKkNUUkwtV19xKgorQ1RSTC1XIENUUkwtUQkJCQkJCSpDVFJMLVdfQ1RSTC1RKgorOnFbdWl0XQkJUXVpdCBjdXJyZW50IHdpbmRvdy4gIFdoZW4gcXVpdHRpbmcgdGhlIGxhc3Qgd2luZG93IChub3QKKwkJY291bnRpbmcgYSBoZWxwIHdpbmRvdyksIGV4aXQgVmltLgorCQlXaGVuICdoaWRkZW4nIGlzIHNldCwgYW5kIHRoZXJlIGlzIG9ubHkgb25lIHdpbmRvdyBmb3IgdGhlCisJCWN1cnJlbnQgYnVmZmVyLCBpdCBiZWNvbWVzIGhpZGRlbi4KKwkJV2hlbiAnaGlkZGVuJyBpcyBub3Qgc2V0LCBhbmQgdGhlcmUgaXMgb25seSBvbmUgd2luZG93IGZvciB0aGUKKwkJY3VycmVudCBidWZmZXIsIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkLCB0aGUgY29tbWFuZCBmYWlscy4KKwkJKE5vdGU6IENUUkwtUSBkb2VzIG5vdCB3b3JrIG9uIGFsbCB0ZXJtaW5hbHMpCisKKzpxW3VpdF0hCVF1aXQgY3VycmVudCB3aW5kb3cuICBJZiB0aGlzIHdhcyB0aGUgbGFzdCB3aW5kb3cgZm9yIGEgYnVmZmVyLAorCQlhbnkgY2hhbmdlcyB0byB0aGF0IGJ1ZmZlciBhcmUgbG9zdC4gIFdoZW4gcXVpdHRpbmcgdGhlIGxhc3QKKwkJd2luZG93IChub3QgY291bnRpbmcgaGVscCB3aW5kb3dzKSwgZXhpdCBWaW0uICBUaGUgY29udGVudHMgb2YKKwkJdGhlIGJ1ZmZlciBhcmUgbG9zdCwgZXZlbiB3aGVuICdoaWRkZW4nIGlzIHNldC4KKworQ1RSTC1XIGMJCQkJCSpDVFJMLVdfYyogKjpjbG8qICo6Y2xvc2UqCis6Y2xvW3NlXVshXQlDbG9zZSBjdXJyZW50IHdpbmRvdy4gIFdoZW4gdGhlICdoaWRkZW4nIG9wdGlvbiBpcyBzZXQsIG9yCisJCXdoZW4gdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCBhbmQgdGhlIFshXSBpcyB1c2VkLCB0aGUgYnVmZmVyCisJCWJlY29tZXMgaGlkZGVuICh1bmxlc3MgdGhlcmUgaXMgYW5vdGhlciB3aW5kb3cgZWRpdGluZyBpdCkuCisJCVRoaXMgY29tbWFuZCBmYWlscyB3aGVuOgkJCSpFNDQ0KgorCQktIFRoZXJlIGlzIG9ubHkgb25lIHdpbmRvdyBvbiB0aGUgc2NyZWVuLgorCQktIFdoZW4gJ2hpZGRlbicgaXMgbm90IHNldCwgWyFdIGlzIG5vdCB1c2VkLCB0aGUgYnVmZmVyIGhhcworCQkgIGNoYW5nZXMsIGFuZCB0aGVyZSBpcyBubyBvdGhlciB3aW5kb3cgb24gdGhpcyBidWZmZXIuCisJCUNoYW5nZXMgdG8gdGhlIGJ1ZmZlciBhcmUgbm90IHdyaXR0ZW4gYW5kIHdvbid0IGdldCBsb3N0LCBzbworCQl0aGlzIGlzIGEgInNhZmUiIGNvbW1hbmQuCisKK0NUUkwtVyBDVFJMLUMJCQkJCQkqQ1RSTC1XX0NUUkwtQyoKKwkJWW91IG1pZ2h0IGhhdmUgZXhwZWN0ZWQgdGhhdCBDVFJMLVcgQ1RSTC1DIGNsb3NlcyB0aGUgY3VycmVudAorCQl3aW5kb3csIGJ1dCB0aGF0IGRvZXMgbm90IHdvcmssIGJlY2F1c2UgdGhlIENUUkwtQyBjYW5jZWxzIHRoZQorCQljb21tYW5kLgorCisJCQkJCQkJKjpoaWRlKgorOmhpZFtlXQkJUXVpdCBjdXJyZW50IHdpbmRvdywgdW5sZXNzIGl0IGlzIHRoZSBsYXN0IHdpbmRvdyBvbiB0aGUKKwkJc2NyZWVuLiAgVGhlIGJ1ZmZlciBiZWNvbWVzIGhpZGRlbiAodW5sZXNzIHRoZXJlIGlzIGFub3RoZXIKKwkJd2luZG93IGVkaXRpbmcgaXQgb3IgJ2J1ZmhpZGRlbicgaXMgInVubG9hZCIgb3IgImRlbGV0ZSIpLgorCQlUaGUgdmFsdWUgb2YgJ2hpZGRlbicgaXMgaXJyZWxldmFudCBmb3IgdGhpcyBjb21tYW5kLgorCQlDaGFuZ2VzIHRvIHRoZSBidWZmZXIgYXJlIG5vdCB3cml0dGVuIGFuZCB3b24ndCBnZXQgbG9zdCwgc28KKwkJdGhpcyBpcyBhICJzYWZlIiBjb21tYW5kLgorCis6aGlkW2VdIHtjbWR9CUV4ZWN1dGUge2NtZH0gd2l0aCAnaGlkZGVuJyBpcyBzZXQuICBUaGUgcHJldmlvdXMgdmFsdWUgb2YKKwkJJ2hpZGRlbicgaXMgcmVzdG9yZWQgYWZ0ZXIge2NtZH0gaGFzIGJlZW4gZXhlY3V0ZWQuCisJCUV4YW1wbGU6ID4KKwkJICAgIDpoaWRlIGVkaXQgTWFrZWZpbGUKKzwJCVRoaXMgd2lsbCBlZGl0ICJNYWtlZmlsZSIsIGFuZCBoaWRlIHRoZSBjdXJyZW50IGJ1ZmZlciBpZiBpdAorCQloYXMgYW55IGNoYW5nZXMuCisKK0NUUkwtVyBvCQkJCQkJKkNUUkwtV19vKiAqRTQ0NSoKK0NUUkwtVyBDVFJMLU8JCQkJCSpDVFJMLVdfQ1RSTC1PKiAqOm9uKiAqOm9ubHkqCis6b25bbHldWyFdCU1ha2UgdGhlIGN1cnJlbnQgd2luZG93IHRoZSBvbmx5IG9uZSBvbiB0aGUgc2NyZWVuLiAgQWxsIG90aGVyCisJCXdpbmRvd3MgYXJlIGNsb3NlZC4KKwkJV2hlbiB0aGUgJ2hpZGRlbicgb3B0aW9uIGlzIHNldCwgYWxsIGJ1ZmZlcnMgaW4gY2xvc2VkIHdpbmRvd3MKKwkJYmVjb21lIGhpZGRlbi4KKwkJV2hlbiAnaGlkZGVuJyBpcyBub3Qgc2V0LCBhbmQgdGhlICdhdXRvd3JpdGUnIG9wdGlvbiBpcyBzZXQsCisJCW1vZGlmaWVkIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4uICBPdGhlcndpc2UsIHdpbmRvd3MgdGhhdCBoYXZlCisJCWJ1ZmZlcnMgdGhhdCBhcmUgbW9kaWZpZWQgYXJlIG5vdCByZW1vdmVkLCB1bmxlc3MgdGhlIFshXSBpcworCQlnaXZlbiwgdGhlbiB0aGV5IGJlY29tZSBoaWRkZW4uICBCdXQgbW9kaWZpZWQgYnVmZmVycyBhcmUKKwkJbmV2ZXIgYWJhbmRvbmVkLCBzbyBjaGFuZ2VzIGNhbm5vdCBnZXQgbG9zdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBNb3ZpbmcgY3Vyc29yIHRvIG90aGVyIHdpbmRvd3MJCQkqd2luZG93LW1vdmUtY3Vyc29yKgorCitDVFJMLVcgPERvd24+CQkJCQkqQ1RSTC1XXzxEb3duPioKK0NUUkwtVyBDVFJMLUoJCQkJCSpDVFJMLVdfQ1RSTC1KKiAqQ1RSTC1XX2oqCitDVFJMLVcgaglNb3ZlIGN1cnNvciB0byBOdGggd2luZG93IGJlbG93IGN1cnJlbnQgb25lLiAgVXNlcyB0aGUgY3Vyc29yCisJCXBvc2l0aW9uIHRvIHNlbGVjdCBiZXR3ZWVuIGFsdGVybmF0aXZlcy4KKworQ1RSTC1XIDxVcD4JCQkJCSpDVFJMLVdfPFVwPioKK0NUUkwtVyBDVFJMLUsJCQkJCSpDVFJMLVdfQ1RSTC1LKiAqQ1RSTC1XX2sqCitDVFJMLVcgawlNb3ZlIGN1cnNvciB0byBOdGggd2luZG93IGFib3ZlIGN1cnJlbnQgb25lLiAgVXNlcyB0aGUgY3Vyc29yCisJCXBvc2l0aW9uIHRvIHNlbGVjdCBiZXR3ZWVuIGFsdGVybmF0aXZlcy4KKworQ1RSTC1XIDxMZWZ0PgkJCQkJKkNUUkwtV188TGVmdD4qCitDVFJMLVcgQ1RSTC1ICQkJCQkqQ1RSTC1XX0NUUkwtSCoKK0NUUkwtVyA8QlM+CQkJCQkqQ1RSTC1XXzxCUz4qICpDVFJMLVdfaCoKK0NUUkwtVyBoCU1vdmUgY3Vyc29yIHRvIE50aCB3aW5kb3cgbGVmdCBvZiBjdXJyZW50IG9uZS4gIFVzZXMgdGhlCisJCWN1cnNvciBwb3NpdGlvbiB0byBzZWxlY3QgYmV0d2VlbiBhbHRlcm5hdGl2ZXMuCisKK0NUUkwtVyA8UmlnaHQ+CQkJCQkqQ1RSTC1XXzxSaWdodD4qCitDVFJMLVcgQ1RSTC1MCQkJCQkqQ1RSTC1XX0NUUkwtTCogKkNUUkwtV19sKgorQ1RSTC1XIGwJTW92ZSBjdXJzb3IgdG8gTnRoIHdpbmRvdyByaWdodCBvZiBjdXJyZW50IG9uZS4gIFVzZXMgdGhlCisJCWN1cnNvciBwb3NpdGlvbiB0byBzZWxlY3QgYmV0d2VlbiBhbHRlcm5hdGl2ZXMuCisKK0NUUkwtVyB3CQkJCQkqQ1RSTC1XX3cqICpDVFJMLVdfQ1RSTC1XKgorQ1RSTC1XIENUUkwtVwlXaXRob3V0IGNvdW50OiBtb3ZlIGN1cnNvciB0byB3aW5kb3cgYmVsb3cvcmlnaHQgb2YgdGhlCisJCWN1cnJlbnQgb25lLiAgSWYgdGhlcmUgaXMgbm8gd2luZG93IGJlbG93IG9yIHJpZ2h0LCBnbyB0bworCQl0b3AtbGVmdCB3aW5kb3cuCisJCVdpdGggY291bnQ6IGdvIHRvIE50aCB3aW5kb3cgKHdpbmRvd3MgYXJlIG51bWJlcmVkIGZyb20KKwkJdG9wLWxlZnQgdG8gYm90dG9tLXJpZ2h0KS4gIFRvIG9idGFpbiB0aGUgd2luZG93IG51bWJlciBzZWUKKwkJfGJ1Zndpbm5yKCl8IGFuZCB8d2lubnIoKXwuCisKKwkJCQkJCSpDVFJMLVdfVyoKK0NUUkwtVyBXCVdpdGhvdXQgY291bnQ6IG1vdmUgY3Vyc29yIHRvIHdpbmRvdyBhYm92ZS9sZWZ0IG9mIGN1cnJlbnQKKwkJb25lLiAgSWYgdGhlcmUgaXMgbm8gd2luZG93IGFib3ZlIG9yIGxlZnQsIGdvIHRvIGJvdHRvbS1yaWdodAorCQl3aW5kb3cuICBXaXRoIGNvdW50OiBnbyB0byBOdGggd2luZG93ICh3aW5kb3dzIGFyZSBudW1iZXJlZAorCQlmcm9tIHRvcC1sZWZ0IHRvIGJvdHRvbS1yaWdodCkuCisKK0NUUkwtVyB0CQkJCQkqQ1RSTC1XX3QqICpDVFJMLVdfQ1RSTC1UKgorQ1RSTC1XIENUUkwtVAlNb3ZlIGN1cnNvciB0byB0b3AtbGVmdCB3aW5kb3cuCisKK0NUUkwtVyBiCQkJCQkqQ1RSTC1XX2IqICpDVFJMLVdfQ1RSTC1CKgorQ1RSTC1XIENUUkwtQglNb3ZlIGN1cnNvciB0byBib3R0b20tcmlnaHQgd2luZG93LgorCitDVFJMLVcgcAkJCQkJKkNUUkwtV19wKiAqQ1RSTC1XX0NUUkwtUCoKK0NUUkwtVyBDVFJMLVAJR28gdG8gcHJldmlvdXMgKGxhc3QgYWNjZXNzZWQpIHdpbmRvdy4KKworCQkJCQkJKkNUUkwtV19QKiAqRTQ0MSoKK0NUUkwtVyBQCUdvIHRvIHByZXZpZXcgd2luZG93LiAgV2hlbiB0aGVyZSBpcyBubyBwcmV2aWV3IHdpbmRvdyB0aGlzIGlzCisJCWFuIGVycm9yLgorCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcXVpY2tmaXh8IGZlYXR1cmV9CisKK0lmIFZpc3VhbCBtb2RlIGlzIGFjdGl2ZSBhbmQgdGhlIG5ldyB3aW5kb3cgaXMgbm90IGZvciB0aGUgc2FtZSBidWZmZXIsIHRoZQorVmlzdWFsIG1vZGUgaXMgZW5kZWQuICBJZiB0aGUgd2luZG93IGlzIG9uIHRoZSBzYW1lIGJ1ZmZlciwgdGhlIGN1cnNvcgorcG9zaXRpb24gaXMgc2V0IHRvIGtlZXAgdGhlIHNhbWUgVmlzdWFsIGFyZWEgc2VsZWN0ZWQuCisKKwkJCQkJCSo6d2luYyogKjp3aW5jbWQqCitUaGVzZSBjb21tYW5kcyBjYW4gYWxzbyBiZSBleGVjdXRlZCB3aXRoICI6d2luY21kIjoKKworOltjb3VudF13aW5jW21kXSB7YXJnfQorCQlMaWtlIGV4ZWN1dGluZyBDVFJMLVcgW2NvdW50XSB7YXJnfS4gIEV4YW1wbGU6ID4KKwkJCTp3aW5jbWQgagorPAkJTW92ZXMgdG8gdGhlIHdpbmRvdyBiZWxvdyB0aGUgY3VycmVudCBvbmUuCisJCVRoaXMgY29tbWFuZCBpcyB1c2VmdWwgd2hlbiBhIE5vcm1hbCBtb2RlIGNhbm5vdCBiZSB1c2VkIChmb3IKKwkJdGhlIHxDdXJzb3JIb2xkfCBhdXRvY29tbWFuZCBldmVudCkuICBPciB3aGVuIGEgTm9ybWFsIG1vZGUKKwkJY29tbWFuZCBpcyBpbmNvbnZlbmllbnQuCisJCVRoZSBjb3VudCBjYW4gYWxzbyBiZSBhIHdpbmRvdyBudW1iZXIuICBFeGFtcGxlOiA+CisJCQk6ZXhlIG5yIC4gIndpbmNtZCB3IgorPAkJVGhpcyBnb2VzIHRvIHdpbmRvdyAibnIiLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIE1vdmluZyB3aW5kb3dzIGFyb3VuZAkJCQkqd2luZG93LW1vdmluZyoKKworQ1RSTC1XIHIJCQkJKkNUUkwtV19yKiAqQ1RSTC1XX0NUUkwtUiogKkU0NDMqCitDVFJMLVcgQ1RSTC1SCVJvdGF0ZSB3aW5kb3dzIGRvd253YXJkcy9yaWdodHdhcmRzLiAgVGhlIGZpcnN0IHdpbmRvdyBiZWNvbWVzCisJCXRoZSBzZWNvbmQgb25lLCB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIHRoZSB0aGlyZCBvbmUsIGV0Yy4KKwkJVGhlIGxhc3Qgd2luZG93IGJlY29tZXMgdGhlIGZpcnN0IHdpbmRvdy4gIFRoZSBjdXJzb3IgcmVtYWlucworCQlpbiB0aGUgc2FtZSB3aW5kb3cuCisJCVRoaXMgb25seSB3b3JrcyB3aXRoaW4gdGhlIHJvdyBvciBjb2x1bW4gb2Ygd2luZG93cyB0aGF0IHRoZQorCQljdXJyZW50IHdpbmRvdyBpcyBpbi4KKworCQkJCQkJKkNUUkwtV19SKgorQ1RSTC1XIFIJUm90YXRlIHdpbmRvd3MgdXB3YXJkcy9sZWZ0d2FyZHMuICBUaGUgc2Vjb25kIHdpbmRvdyBiZWNvbWVzCisJCXRoZSBmaXJzdCBvbmUsIHRoZSB0aGlyZCBvbmUgYmVjb21lcyB0aGUgc2Vjb25kIG9uZSwgZXRjLiAgVGhlCisJCWZpcnN0IHdpbmRvdyBiZWNvbWVzIHRoZSBsYXN0IHdpbmRvdy4gIFRoZSBjdXJzb3IgcmVtYWlucyBpbgorCQl0aGUgc2FtZSB3aW5kb3cuCisJCVRoaXMgb25seSB3b3JrcyB3aXRoaW4gdGhlIHJvdyBvciBjb2x1bW4gb2Ygd2luZG93cyB0aGF0IHRoZQorCQljdXJyZW50IHdpbmRvdyBpcyBpbi4KKworQ1RSTC1XIHgJCQkJCSpDVFJMLVdfeCogKkNUUkwtV19DVFJMLVgqCitDVFJMLVcgQ1RSTC1YCVdpdGhvdXQgY291bnQ6IEV4Y2hhbmdlIGN1cnJlbnQgd2luZG93IHdpdGggbmV4dCBvbmUuICBJZiB0aGVyZQorCQlpcyBubyBuZXh0IHdpbmRvdywgZXhjaGFuZ2Ugd2l0aCBwcmV2aW91cyB3aW5kb3cuCisJCVdpdGggY291bnQ6IEV4Y2hhbmdlIGN1cnJlbnQgd2luZG93IHdpdGggTnRoIHdpbmRvdyAoZmlyc3QKKwkJd2luZG93IGlzIDEpLiAgVGhlIGN1cnNvciBpcyBwdXQgaW4gdGhlIG90aGVyIHdpbmRvdy4KKwkJV2hlbiB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCB3aW5kb3cgc3BsaXRzIGFyZSBtaXhlZCwgdGhlCisJCWV4Y2hhbmdlIGlzIG9ubHkgZG9uZSBpbiB0aGUgcm93IG9yIGNvbHVtbiBvZiB3aW5kb3dzIHRoYXQgdGhlCisJCWN1cnJlbnQgd2luZG93IGlzIGluLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgd2luZG93IGxheW91dC4gIEZvciBleGFtcGxlLAord2hlbiB0aGVyZSBhcmUgdHdvIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cywgQ1RSTC1XIEsgd2lsbCBjaGFuZ2UgdGhhdCBpbgoraG9yaXpvbnRhbGx5IHNwbGl0IHdpbmRvd3MuICBDVFJMLVcgSCBkb2VzIGl0IHRoZSBvdGhlciB3YXkgYXJvdW5kLgorCisJCQkJCQkqQ1RSTC1XX0sqCitDVFJMLVcgSwlNb3ZlIHRoZSBjdXJyZW50IHdpbmRvdyB0byBiZSBhdCB0aGUgdmVyeSB0b3AsIHVzaW5nIHRoZSBmdWxsCisJCXdpZHRoIG9mIHRoZSBzY3JlZW4uICBUaGlzIHdvcmtzIGxpa2UgY2xvc2luZyB0aGUgY3VycmVudAorCQl3aW5kb3cgYW5kIHRoZW4gY3JlYXRpbmcgYW5vdGhlciBvbmUgd2l0aCAiOnRvcGxlZnQgc3BsaXQiLAorCQlleGNlcHQgdGhhdCB0aGUgY3VycmVudCB3aW5kb3cgY29udGVudHMgaXMgdXNlZCBmb3IgdGhlIG5ldworCQl3aW5kb3cuCisKKwkJCQkJCSpDVFJMLVdfSioKK0NUUkwtVyBKCU1vdmUgdGhlIGN1cnJlbnQgd2luZG93IHRvIGJlIGF0IHRoZSB2ZXJ5IGJvdHRvbSwgdXNpbmcgdGhlCisJCWZ1bGwgd2lkdGggb2YgdGhlIHNjcmVlbi4gIFRoaXMgd29ya3MgbGlrZSBjbG9zaW5nIHRoZSBjdXJyZW50CisJCXdpbmRvdyBhbmQgdGhlbiBjcmVhdGluZyBhbm90aGVyIG9uZSB3aXRoICI6Ym90cmlnaHQgc3BsaXQiLAorCQlleGNlcHQgdGhhdCB0aGUgY3VycmVudCB3aW5kb3cgY29udGVudHMgaXMgdXNlZCBmb3IgdGhlIG5ldworCQl3aW5kb3cuCisKKwkJCQkJCSpDVFJMLVdfSCoKK0NUUkwtVyBICU1vdmUgdGhlIGN1cnJlbnQgd2luZG93IHRvIGJlIGF0IHRoZSBmYXIgbGVmdCwgdXNpbmcgdGhlCisJCWZ1bGwgaGVpZ2h0IG9mIHRoZSBzY3JlZW4uICBUaGlzIHdvcmtzIGxpa2UgY2xvc2luZyB0aGUKKwkJY3VycmVudCB3aW5kb3cgYW5kIHRoZW4gY3JlYXRpbmcgYW5vdGhlciBvbmUgd2l0aAorCQkiOnZlcnQgdG9wbGVmdCBzcGxpdCIsIGV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IHdpbmRvdyBjb250ZW50cworCQlpcyB1c2VkIGZvciB0aGUgbmV3IHdpbmRvdy4KKwkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArdmVydHNwbGl0IGZlYXR1cmV9CisKKwkJCQkJCSpDVFJMLVdfTCoKK0NUUkwtVyBMCU1vdmUgdGhlIGN1cnJlbnQgd2luZG93IHRvIGJlIGF0IHRoZSBmYXIgcmlnaHQsIHVzaW5nIHRoZSBmdWxsCisJCWhlaWdodCBvZiB0aGUgc2NyZWVuLiAgVGhpcyB3b3JrcyBsaWtlIGNsb3NpbmcgdGhlCisJCWN1cnJlbnQgd2luZG93IGFuZCB0aGVuIGNyZWF0aW5nIGFub3RoZXIgb25lIHdpdGgKKwkJIjp2ZXJ0IGJvdHJpZ2h0IHNwbGl0IiwgZXhjZXB0IHRoYXQgdGhlIGN1cnJlbnQgd2luZG93CisJCWNvbnRlbnRzIGlzIHVzZWQgZm9yIHRoZSBuZXcgd2luZG93LgorCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt2ZXJ0c3BsaXQgZmVhdHVyZX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBXaW5kb3cgcmVzaXppbmcJCQkJCSp3aW5kb3ctcmVzaXplKgorCisJCQkJCQkqQ1RSTC1XXz0qCitDVFJMLVcgPQlNYWtlIGFsbCB3aW5kb3dzIChhbG1vc3QpIGVxdWFsbHkgaGlnaCBhbmQgd2lkZSwgYnV0IHVzZQorCQknd2luaGVpZ2h0JyBhbmQgJ3dpbndpZHRoJyBmb3IgdGhlIGN1cnJlbnQgd2luZG93LgorCis6cmVzW2l6ZV0gLU4JCQkJCSo6cmVzKiAqOnJlc2l6ZSogKkNUUkwtV18tKgorQ1RSTC1XIC0JRGVjcmVhc2UgY3VycmVudCB3aW5kb3cgaGVpZ2h0IGJ5IE4gKGRlZmF1bHQgMSkuCisJCUlmIHVzZWQgYWZ0ZXIgJ3ZlcnRpY2FsJzogZGVjcmVhc2Ugd2lkdGggYnkgTi4KKworOnJlc1tpemVdICtOCQkJCQkqQ1RSTC1XXysqCitDVFJMLVcgKwlJbmNyZWFzZSBjdXJyZW50IHdpbmRvdyBoZWlnaHQgYnkgTiAoZGVmYXVsdCAxKS4KKwkJSWYgdXNlZCBhZnRlciAndmVydGljYWwnOiBpbmNyZWFzZSB3aWR0aCBieSBOLgorCis6cmVzW2l6ZV0gW05dCitDVFJMLVcgQ1RSTC1fCQkJCQkqQ1RSTC1XX0NUUkwtXyogKkNUUkwtV19fKgorQ1RSTC1XIF8JU2V0IGN1cnJlbnQgd2luZG93IGhlaWdodCB0byBOIChkZWZhdWx0OiBoaWdoZXN0IHBvc3NpYmxlKS4KKworentucn08Q1I+CVNldCBjdXJyZW50IHdpbmRvdyBoZWlnaHQgdG8ge25yfS4KKworCQkJCQkJKkNUUkwtV188KgorQ1RSTC1XIDwJRGVjcmVhc2UgY3VycmVudCB3aW5kb3cgd2lkdGggYnkgTiAoZGVmYXVsdCAxKS4KKworCQkJCQkJKkNUUkwtV18+KgorQ1RSTC1XID4JSW5jcmVhc2UgY3VycmVudCB3aW5kb3cgd2lkdGggYnkgTiAoZGVmYXVsdCAxKS4KKworOnZlcnRpY2FsIHJlc1tpemVdIFtOXQkJCSo6dmVydGljYWwtcmVzaXplKiAqQ1RSTC1XX2JhcioKK0NUUkwtVyB8CVNldCBjdXJyZW50IHdpbmRvdyB3aWR0aCB0byBOIChkZWZhdWx0OiB3aWRlc3QgcG9zc2libGUpLgorCitZb3UgY2FuIGFsc28gcmVzaXplIGEgd2luZG93IGJ5IGRyYWdnaW5nIGEgc3RhdHVzIGxpbmUgdXAgb3IgZG93biB3aXRoIHRoZQorbW91c2UuICBPciBieSBkcmFnZ2luZyBhIHZlcnRpY2FsIHNlcGFyYXRvciBsaW5lIGxlZnQgb3IgcmlnaHQuICBUaGlzIG9ubHkKK3dvcmtzIGlmIHRoZSB2ZXJzaW9uIG9mIFZpbSB0aGF0IGlzIGJlaW5nIHVzZWQgc3VwcG9ydHMgdGhlIG1vdXNlIGFuZCB0aGUKKydtb3VzZScgb3B0aW9uIGhhcyBiZWVuIHNldCB0byBlbmFibGUgaXQuCisKK1RoZSBvcHRpb24gJ3dpbmhlaWdodCcgKCd3aCcpIGlzIHVzZWQgdG8gc2V0IHRoZSBtaW5pbWFsIHdpbmRvdyBoZWlnaHQgb2YgdGhlCitjdXJyZW50IHdpbmRvdy4gIFRoaXMgb3B0aW9uIGlzIHVzZWQgZWFjaCB0aW1lIGFub3RoZXIgd2luZG93IGJlY29tZXMgdGhlCitjdXJyZW50IHdpbmRvdy4gIElmIHRoZSBvcHRpb24gaXMgJzAnLCBpdCBpcyBkaXNhYmxlZC4gIFNldCAnd2luaGVpZ2h0JyB0byBhCit2ZXJ5IGxhcmdlIHZhbHVlLCBlLmcuLCAnOTk5OScsIHRvIG1ha2UgdGhlIGN1cnJlbnQgd2luZG93IGFsd2F5cyBmaWxsIGFsbAorYXZhaWxhYmxlIHNwYWNlLiAgU2V0IGl0IHRvIGEgcmVhc29uYWJsZSB2YWx1ZSwgZS5nLiwgJzEwJywgdG8gbWFrZSBlZGl0aW5nIGluCit0aGUgY3VycmVudCB3aW5kb3cgY29tZm9ydGFibGUuCisKK1RoZSBlcXVpdmFsZW50ICd3aW53aWR0aCcgKCd3aXcnKSBvcHRpb24gaXMgdXNlZCB0byBzZXQgdGhlIG1pbmltYWwgd2lkdGggb2YKK3RoZSBjdXJyZW50IHdpbmRvdy4KKworV2hlbiB0aGUgb3B0aW9uICdlcXVhbGFsd2F5cycgKCdlYScpIGlzIHNldCwgYWxsIHRoZSB3aW5kb3dzIGFyZSBhdXRvbWF0aWNhbGx5CittYWRlIHRoZSBzYW1lIHNpemUgYWZ0ZXIgc3BsaXR0aW5nIG9yIGNsb3NpbmcgYSB3aW5kb3cuICBJZiB5b3UgZG9uJ3Qgc2V0IHRoaXMKK29wdGlvbiwgc3BsaXR0aW5nIGEgd2luZG93IHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBjdXJyZW50IHdpbmRvdyBhbmQKK2xlYXZlIHRoZSBvdGhlciB3aW5kb3dzIHRoZSBzYW1lLiAgV2hlbiBjbG9zaW5nIGEgd2luZG93LCB0aGUgZXh0cmEgbGluZXMgYXJlCitnaXZlbiB0byB0aGUgd2luZG93IGFib3ZlIGl0LgorCitUaGUgJ2VhZGlyZWN0aW9uJyBvcHRpb24gbGltaXRzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdGhlICdlcXVhbGFsd2F5cycKK29wdGlvbiBpcyBhcHBsaWVkLiAgVGhlIGRlZmF1bHQgImJvdGgiIHJlc2l6ZXMgaW4gYm90aCBkaXJlY3Rpb25zLiAgV2hlbiB0aGUKK3ZhbHVlIGlzICJ2ZXIiIG9ubHkgdGhlIGhlaWdodHMgb2Ygd2luZG93cyBhcmUgZXF1YWxpemVkLiAgVXNlIHRoaXMgd2hlbiB5b3UKK2hhdmUgbWFudWFsbHkgcmVzaXplZCBhIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93IGFuZCB3YW50IHRvIGtlZXAgdGhpcyB3aWR0aC4KK0xpa2V3aXNlLCAiaG9yIiBjYXVzZXMgb25seSB0aGUgd2lkdGhzIG9mIHdpbmRvd3MgdG8gYmUgZXF1YWxpemVkLgorCitUaGUgb3B0aW9uICdjbWRoZWlnaHQnICgnY2gnKSBpcyB1c2VkIHRvIHNldCB0aGUgaGVpZ2h0IG9mIHRoZSBjb21tYW5kLWxpbmUuCitJZiB5b3UgYXJlIGFubm95ZWQgYnkgdGhlIHxoaXQtZW50ZXJ8IHByb21wdCBmb3IgbG9uZyBtZXNzYWdlcywgc2V0IHRoaXMKK29wdGlvbiB0byAyIG9yIDMuCisKK0lmIHRoZXJlIGlzIG9ubHkgb25lIHdpbmRvdywgcmVzaXppbmcgdGhhdCB3aW5kb3cgd2lsbCBhbHNvIGNoYW5nZSB0aGUgY29tbWFuZAorbGluZSBoZWlnaHQuICBJZiB0aGVyZSBhcmUgc2V2ZXJhbCB3aW5kb3dzLCByZXNpemluZyB0aGUgY3VycmVudCB3aW5kb3cgd2lsbAorYWxzbyBjaGFuZ2UgdGhlIGhlaWdodCBvZiB0aGUgd2luZG93IGJlbG93IGl0IChhbmQgc29tZXRpbWVzIHRoZSB3aW5kb3cgYWJvdmUKK2l0KS4KKworVGhlIG1pbmltYWwgaGVpZ2h0IGFuZCB3aWR0aCBvZiBhIHdpbmRvdyBpcyBzZXQgd2l0aCAnd2lubWluaGVpZ2h0JyBhbmQKKyd3aW5taW53aWR0aCcuICBUaGVzZSBhcmUgaGFyZCB2YWx1ZXMsIGEgd2luZG93IHdpbGwgbmV2ZXIgYmVjb21lIHNtYWxsZXIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gQXJndW1lbnQgYW5kIGJ1ZmZlciBsaXN0IGNvbW1hbmRzCQkJKmJ1ZmZlci1saXN0KgorCisgICAgICBhcmdzIGxpc3QJCSAgICAgICBidWZmZXIgbGlzdAkgICBtZWFuaW5nIH4KKzEuIDpbTl1hcmd1bWVudCBbTl0JMTEuIDpbTl1idWZmZXIgW05dCXRvIGFyZy9idWYgTgorMi4gOltOXW5leHQgW2ZpbGUgLi5dCTEyLiA6W05dYm5leHQgW05dCXRvIE50aCBuZXh0IGFyZy9idWYKKzMuIDpbTl1OZXh0IFtOXQkJMTMuIDpbTl1iTmV4dCBbTl0JdG8gTnRoIHByZXZpb3VzIGFyZy9idWYKKzQuIDpbTl1wcmV2aW91cwlbTl0JMTQuIDpbTl1icHJldmlvdXMgW05dCXRvIE50aCBwcmV2aW91cyBhcmcvYnVmCis1LiA6cmV3aW5kIC8gOmZpcnN0CTE1LiA6YnJld2luZCAvIDpiZmlyc3QJdG8gZmlyc3QgYXJnL2J1ZgorNi4gOmxhc3QJCTE2LiA6Ymxhc3QJCXRvIGxhc3QgYXJnL2J1ZgorNy4gOmFsbAkJCTE3LiA6YmFsbAkJZWRpdCBhbGwgYXJncy9idWZmZXJzCisJCQkxOC4gOnVuaGlkZQkJZWRpdCBhbGwgbG9hZGVkIGJ1ZmZlcnMKKwkJCTE5LiA6W05dYm1vZCBbTl0JdG8gTnRoIG1vZGlmaWVkIGJ1ZgorCisgIHNwbGl0ICYgYXJncyBsaXN0CSAgc3BsaXQgJiBidWZmZXIgbGlzdAkgICBtZWFuaW5nIH4KKzIxLiA6W05dc2FyZ3VtZW50IFtOXSAgIDMxLiA6W05dc2J1ZmZlciBbTl0Jc3BsaXQgKyB0byBhcmcvYnVmIE4KKzIyLiA6W05dc25leHQgW2ZpbGUgLi5dIDMyLiA6W05dc2JuZXh0IFtOXSAgICAgIHNwbGl0ICsgdG8gTnRoIG5leHQgYXJnL2J1ZgorMjMuIDpbTl1zTmV4dCBbTl0gICAgICAgMzMuIDpbTl1zYk5leHQgW05dICAgICAgc3BsaXQgKyB0byBOdGggcHJldmlvdXMgYXJnL2J1ZgorMjQuIDpbTl1zcHJldmlvdXMgW05dICAgMzQuIDpbTl1zYnByZXZpb3VzIFtOXSAgc3BsaXQgKyB0byBOdGggcHJldmlvdXMgYXJnL2J1ZgorMjUuIDpzcmV3aW5kIC8gOnNmaXJzdAkzNS4gOnNicmV3aW5kIC8gOnNiZmlyc3Qgc3BsaXQgKyB0byBmaXJzdCBhcmcvYnVmCisyNi4gOnNsYXN0CQkzNi4gOnNibGFzdAkJc3BsaXQgKyB0byBsYXN0IGFyZy9idWYKKzI3LiA6c2FsbAkJMzc6IDpzYmFsbAkJZWRpdCBhbGwgYXJncy9idWZmZXJzCisJCQkzOC4gOnN1bmhpZGUJCWVkaXQgYWxsIGxvYWRlZCBidWZmZXJzCisJCQkzOS4gOltOXXNibW9kIFtOXQlzcGxpdCArIHRvIE50aCBtb2RpZmllZCBidWYKKworNDAuIDphcmdzCQlsaXN0IG9mIGFyZ3VtZW50cworNDEuIDpidWZmZXJzCQlsaXN0IG9mIGJ1ZmZlcnMKKworVGhlIG1lYW5pbmcgb2YgW05dIGRlcGVuZHMgb24gdGhlIGNvbW1hbmQ6CisgW05dIGlzIG51bWJlciBvZiBidWZmZXJzIHRvIGdvIGZvcndhcmQvYmFja3dhcmQgb24gPzIsID8zLCBhbmQgPzQKKyBbTl0gaXMgYW4gYXJndW1lbnQgbnVtYmVyLCBkZWZhdWx0aW5nIHRvIGN1cnJlbnQgYXJndW1lbnQsIGZvciAxIGFuZCAyMQorIFtOXSBpcyBhIGJ1ZmZlciBudW1iZXIsIGRlZmF1bHRpbmcgdG8gY3VycmVudCBidWZmZXIsIGZvciAxMSBhbmQgMzEKKyBbTl0gaXMgYSBjb3VudCBmb3IgMTkgYW5kIDM5CisKK05vdGU6ICI6bmV4dCIgaXMgYW4gZXhjZXB0aW9uLCBiZWNhdXNlIGl0IG11c3QgYWNjZXB0IGEgbGlzdCBvZiBmaWxlIG5hbWVzCitmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFZpLgorCisKK1RoZSBhcmd1bWVudCBsaXN0IGFuZCBtdWx0aXBsZSB3aW5kb3dzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYXJndW1lbnQgbGlzdCBjYW4gYmUgZGlmZmVyZW50IGZvciBlYWNoIHdpbmRvdy4KK1JlbWVtYmVyIHRoYXQgd2hlbiBkb2luZyAiOmUgZmlsZSIsIHRoZSBwb3NpdGlvbiBpbiB0aGUgYXJndW1lbnQgbGlzdCBzdGF5cwordGhlIHNhbWUsIGJ1dCB5b3UgYXJlIG5vdCBlZGl0aW5nIHRoZSBmaWxlIGF0IHRoYXQgcG9zaXRpb24uICBUbyBpbmRpY2F0ZQordGhpcywgdGhlIGZpbGUgbWVzc2FnZSAoYW5kIHRoZSB0aXRsZSwgaWYgeW91IGhhdmUgb25lKSBzaG93cworIihmaWxlIChOKSBvZiBNKSIsIHdoZXJlICIoTikiIGlzIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBmaWxlIGxpc3QsIGFuZAorIk0iIHRoZSBudW1iZXIgb2YgZmlsZXMgaW4gdGhlIGZpbGUgbGlzdC4KKworQWxsIHRoZSBlbnRyaWVzIGluIHRoZSBhcmd1bWVudCBsaXN0IGFyZSBhZGRlZCB0byB0aGUgYnVmZmVyIGxpc3QuICBUaHVzLCB5b3UKK2NhbiBhbHNvIGdldCB0byB0aGVtIHdpdGggdGhlIGJ1ZmZlciBsaXN0IGNvbW1hbmRzLCBsaWtlICI6Ym5leHQiLgorCis6W05dYWxbbF1bIV0gW05dCQkJCSo6YWwqICo6YWxsKiAqOnNhbCogKjpzYWxsKgorOltOXXNhbFtsXVshXSBbTl0KKwkJUmVhcnJhbmdlIHRoZSBzY3JlZW4gdG8gb3BlbiBvbmUgd2luZG93IGZvciBlYWNoIGFyZ3VtZW50LgorCQlBbGwgb3RoZXIgd2luZG93cyBhcmUgY2xvc2VkLiAgV2hlbiBhIGNvdW50IGlzIGdpdmVuLCB0aGlzIGlzCisJCXRoZSBtYXhpbXVtIG51bWJlciBvZiB3aW5kb3dzIHRvIG9wZW4uCisJCVdoZW4gdGhlICdoaWRkZW4nIG9wdGlvbiBpcyBzZXQsIGFsbCBidWZmZXJzIGluIGNsb3NlZCB3aW5kb3dzCisJCWJlY29tZSBoaWRkZW4uCisJCVdoZW4gJ2hpZGRlbicgaXMgbm90IHNldCwgYW5kIHRoZSAnYXV0b3dyaXRlJyBvcHRpb24gaXMgc2V0LAorCQltb2RpZmllZCBidWZmZXJzIGFyZSB3cml0dGVuLiAgT3RoZXJ3aXNlLCB3aW5kb3dzIHRoYXQgaGF2ZQorCQlidWZmZXJzIHRoYXQgYXJlIG1vZGlmaWVkIGFyZSBub3QgcmVtb3ZlZCwgdW5sZXNzIHRoZSBbIV0gaXMKKwkJZ2l2ZW4sIHRoZW4gdGhleSBiZWNvbWUgaGlkZGVuLiAgQnV0IG1vZGlmaWVkIGJ1ZmZlcnMgYXJlCisJCW5ldmVyIGFiYW5kb25lZCwgc28gY2hhbmdlcyBjYW5ub3QgZ2V0IGxvc3QuCisJCVtOXSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygd2luZG93cyB0byBvcGVuLiAgJ3dpbmhlaWdodCcKKwkJYWxzbyBsaW1pdHMgdGhlIG51bWJlciBvZiB3aW5kb3dzIG9wZW5lZCAoJ3dpbndpZHRoJyBpZgorCQl8OnZlcnRpY2FsfCB3YXMgcHJlcGVuZGVkKS4KKwkJQnVmL1dpbiBFbnRlci9MZWF2ZSBhdXRvY29tbWFuZHMgYXJlIG5vdCBleGVjdXRlZCBmb3IgdGhlIG5ldworCQl3aW5kb3dzIGhlcmUsIHRoYXQncyBvbmx5IGRvbmUgd2hlbiB0aGV5IGFyZSByZWFsbHkgZW50ZXJlZC4KKworOltOXXNhW3JndW1lbnRdWyFdIFsrK29wdF0gWytjbWRdIFtOXQkJCSo6c2EqICo6c2FyZ3VtZW50KgorCQlTaG9ydCBmb3IgIjpzcGxpdCB8IGFyZ3VtZW50IFtOXSI6IHNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gTnRoCisJCWFyZ3VtZW50LiAgQnV0IHdoZW4gdGhlcmUgaXMgbm8gc3VjaCBhcmd1bWVudCwgdGhlIHdpbmRvdyBpcworCQlub3Qgc3BsaXQuICBBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisKKzpbTl1zbltleHRdWyFdIFsrK29wdF0gWytjbWRdIFtmaWxlIC4uXQkJCSo6c24qICo6c25leHQqCisJCVNob3J0IGZvciAiOnNwbGl0IHwgW05dbmV4dCI6IHNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gTnRoIG5leHQKKwkJYXJndW1lbnQuICBCdXQgd2hlbiB0aGVyZSBpcyBubyBuZXh0IGZpbGUsIHRoZSB3aW5kb3cgaXMgbm90CisJCXNwbGl0LiAgQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCis6W05dc3ByW2V2aW91c11bIV0gWysrb3B0XSBbK2NtZF0gW05dCQkJKjpzcHIqICo6c3ByZXZpb3VzKgorOltOXXNOW2V4dF1bIV0gWysrb3B0XSBbK2NtZF0gW05dCQkJKjpzTiogKjpzTmV4dCoKKwkJU2hvcnQgZm9yICI6c3BsaXQgfCBbTl1OZXh0Ijogc3BsaXQgd2luZG93IGFuZCBnbyB0byBOdGgKKwkJcHJldmlvdXMgYXJndW1lbnQuICBCdXQgd2hlbiB0aGVyZSBpcyBubyBwcmV2aW91cyBmaWxlLCB0aGUKKwkJd2luZG93IGlzIG5vdCBzcGxpdC4gIEFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKworCQkJCQkJKjpzcmUqICo6c3Jld2luZCoKKzpzcmVbd2luZF1bIV0gWysrb3B0XSBbK2NtZF0KKwkJU2hvcnQgZm9yICI6c3BsaXQgfCByZXdpbmQiOiBzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIGZpcnN0CisJCWFyZ3VtZW50LiAgQnV0IHdoZW4gdGhlcmUgaXMgbm8gYXJndW1lbnQgbGlzdCwgdGhlIHdpbmRvdyBpcworCQlub3Qgc3BsaXQuICBBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisKKwkJCQkJCSo6c2ZpciogKjpzZmlyc3QqCis6c2ZpcltzdCBbKytvcHRdIFsrY21kXQorCQlTYW1lIGFzICI6c3Jld2luZCIuCisKKwkJCQkJCSo6c2xhKiAqOnNsYXN0KgorOnNsYVtzdF1bIV0gWysrb3B0XSBbK2NtZF0KKwkJU2hvcnQgZm9yICI6c3BsaXQgfCBsYXN0Ijogc3BsaXQgd2luZG93IGFuZCBnbyB0byBsYXN0CisJCWFyZ3VtZW50LiAgQnV0IHdoZW4gdGhlcmUgaXMgbm8gYXJndW1lbnQgbGlzdCwgdGhlIHdpbmRvdyBpcworCQlub3Qgc3BsaXQuICBBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisKKwkJCQkJCSo6ZHIqICo6ZHJvcCoKKzpkcltvcF0ge2ZpbGV9IC4uCisJCUVkaXQgdGhlIGZpcnN0IHtmaWxlfSBpbiBhIHdpbmRvdy4KKwkJLSBJZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4gaW4gYSB3aW5kb3cgY2hhbmdlIHRvIHRoYXQKKwkJICB3aW5kb3cuCisJCS0gSWYgdGhlIGZpbGUgaXMgbm90IG9wZW4gaW4gYSB3aW5kb3cgZWRpdCB0aGUgZmlsZSBpbiB0aGUKKwkJICBjdXJyZW50IHdpbmRvdy4gIElmIHRoZSBjdXJyZW50IGJ1ZmZlciBjYW4ndCBiZSB8YWJhbmRvbnxlZCwKKwkJICB0aGUgd2luZG93IGlzIHNwbGl0IGZpcnN0LgorCQlUaGUgfGFyZ3VtZW50LWxpc3R8IGlzIHNldCwgbGlrZSB3aXRoIHRoZSB8Om5leHR8IGNvbW1hbmQuCisJCVRoZSBwdXJwb3NlIG9mIHRoaXMgY29tbWFuZCBpcyB0aGF0IGl0IGNhbiBiZSB1c2VkIGZyb20gYQorCQlwcm9ncmFtIHRoYXQgd2FudHMgVmltIHRvIGVkaXQgYW5vdGhlciBmaWxlLCBlLmcuLCBhIGRlYnVnZ2VyLgorCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSArZ3VpIGZlYXR1cmV9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gRG8gYSBjb21tYW5kIGluIGFsbCBidWZmZXJzIG9yIHdpbmRvd3MJCQkqbGlzdC1yZXBlYXQqCisKKwkJCQkJCQkqOndpbmRvKgorOndpbmRvWyFdIHtjbWR9CQlFeGVjdXRlIHtjbWR9IGluIGVhY2ggd2luZG93LgorCQkJSXQgd29ya3MgbGlrZSBkb2luZyB0aGlzOiA+CisJCQkJQ1RSTC1XIHQKKwkJCQk6e2NtZH0KKwkJCQlDVFJMLVcgdworCQkJCTp7Y21kfQorCQkJCWV0Yy4KKzwJCQlXaGVuIGFuIGVycm9yIGlzIGRldGVjdGVkIG9uIG9uZSB3aW5kb3csIGZ1cnRoZXIKKwkJCXdpbmRvd3Mgd2lsbCBub3QgYmUgdmlzaXRlZC4KKwkJCVRoZSBsYXN0IHdpbmRvdyAob3Igd2hlcmUgYW4gZXJyb3Igb2NjdXJyZWQpIGJlY29tZXMKKwkJCXRoZSBjdXJyZW50IHdpbmRvdy4KKwkJCXtjbWR9IGNhbiBjb250YWluICd8JyB0byBjb25jYXRlbmF0ZSBzZXZlcmFsIGNvbW1hbmRzLgorCQkJe2NtZH0gbXVzdCBub3Qgb3BlbiBvciBjbG9zZSB3aW5kb3dzIG9yIHJlb3JkZXIgdGhlbS4KKwkJCXtub3QgaW4gVml9IHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrbGlzdGNtZHN8IGZlYXR1cmV9CisJCQlBbHNvIHNlZSB8OmFyZ2RvfCBhbmQgfDpidWZkb3wuCisKKwkJCQkJCQkqOmJ1ZmRvKgorOmJ1ZmRvWyFdIHtjbWR9CQlFeGVjdXRlIHtjbWR9IGluIGVhY2ggYnVmZmVyIGluIHRoZSBidWZmZXIgbGlzdC4KKwkJCUl0IHdvcmtzIGxpa2UgZG9pbmcgdGhpczogPgorCQkJCTpiZmlyc3QKKwkJCQk6e2NtZH0KKwkJCQk6Ym5leHQKKwkJCQk6e2NtZH0KKwkJCQlldGMuCis8CQkJV2hlbiB0aGUgY3VycmVudCBmaWxlIGNhbid0IGJlIHxhYmFuZG9ufGVkIGFuZCB0aGUgWyFdCisJCQlpcyBub3QgcHJlc2VudCwgdGhlIGNvbW1hbmQgZmFpbHMuCisJCQlXaGVuIGFuIGVycm9yIGlzIGRldGVjdGVkIG9uIG9uZSBidWZmZXIsIGZ1cnRoZXIKKwkJCWJ1ZmZlcnMgd2lsbCBub3QgYmUgdmlzaXRlZC4KKwkJCVVubGlzdGVkIGJ1ZmZlcnMgYXJlIHNraXBwZWQuCisJCQlUaGUgbGFzdCBidWZmZXIgKG9yIHdoZXJlIGFuIGVycm9yIG9jY3VycmVkKSBiZWNvbWVzCisJCQl0aGUgY3VycmVudCBidWZmZXIuCisJCQl7Y21kfSBjYW4gY29udGFpbiAnfCcgdG8gY29uY2F0ZW5hdGUgc2V2ZXJhbCBjb21tYW5kcy4KKwkJCXtjbWR9IG11c3Qgbm90IGRlbGV0ZSBidWZmZXJzIG9yIGFkZCBidWZmZXJzIHRvIHRoZQorCQkJYnVmZmVyIGxpc3QuCisJCQlOb3RlOiBXaGlsZSB0aGlzIGNvbW1hbmQgaXMgZXhlY3V0aW5nLCB0aGUgU3ludGF4CisJCQlhdXRvY29tbWFuZCBldmVudCBpcyBkaXNhYmxlZCBieSBhZGRpbmcgaXQgdG8KKwkJCSdldmVudGlnbm9yZScuICBUaGlzIGNvbnNpZGVyYWJseSBzcGVlZHMgdXAgZWRpdGluZworCQkJZWFjaCBidWZmZXIuCisJCQl7bm90IGluIFZpfSB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2xpc3RjbWRzfCBmZWF0dXJlfQorCQkJQWxzbyBzZWUgfDphcmdkb3wgYW5kIHw6d2luZG98LgorCitFeGFtcGxlczogPgorCisJOndpbmRvIHNldCBub2xpc3Qgbm9mb2xkY29sdW1uIHwgbm9ybWFsIHpuCisKK1RoaXMgcmVzZXRzIHRoZSAnbGlzdCcgb3B0aW9uIGFuZCBkaXNhYmxlcyBmb2xkaW5nIGluIGFsbCB3aW5kb3dzLiA+CisKKwk6YnVmZG8gc2V0IGZpbGVlbmNvZGluZz0gfCB1cGRhdGUKKworVGhpcyByZXNldHMgdGhlICdmaWxlZW5jb2RpbmcnIGluIGVhY2ggYnVmZmVyIGFuZCB3cml0ZXMgaXQgaWYgdGhpcyBjaGFuZ2VkCit0aGUgYnVmZmVyLiAgVGhlIHJlc3VsdCBpcyB0aGF0IGFsbCBidWZmZXJzIHdpbGwgdXNlIHRoZSAnZW5jb2RpbmcnIGVuY29kaW5nCisoaWYgY29udmVyc2lvbiB3b3JrcyBwcm9wZXJseSkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gVGFnIG9yIGZpbGUgbmFtZSB1bmRlciB0aGUgY3Vyc29yCQkJKndpbmRvdy10YWcqCisKKwkJCQkJCQkqOnN0YSogKjpzdGFnKgorOnN0YVtnXVshXSBbdGFnbmFtZV0KKwkJRG9lcyAiOnRhZ1shXSBbdGFnbmFtZV0iIGFuZCBzcGxpdHMgdGhlIHdpbmRvdyBmb3IgdGhlIGZvdW5kCisJCXRhZy4gIFNlZSBhbHNvIHw6dGFnfC4KKworQ1RSTC1XIF0JCQkJCSpDVFJMLVdfXSogKkNUUkwtV19DVFJMLV0qCitDVFJMLVcgQ1RSTC1dCVNwbGl0IGN1cnJlbnQgd2luZG93IGluIHR3by4gIFVzZSBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciBhcyBhCisJCXRhZyBhbmQganVtcCB0byBpdCBpbiB0aGUgbmV3IHVwcGVyIHdpbmRvdy4gIE1ha2UgbmV3IHdpbmRvdyBOCisJCWhpZ2guCisKKwkJCQkJCQkqQ1RSTC1XX2ddKgorQ1RSTC1XIGcgXQlTcGxpdCBjdXJyZW50IHdpbmRvdyBpbiB0d28uICBVc2UgaWRlbnRpZmllciB1bmRlciBjdXJzb3IgYXMgYQorCQl0YWcgYW5kIHBlcmZvcm0gIjp0c2VsZWN0IiBvbiBpdCBpbiB0aGUgbmV3IHVwcGVyIHdpbmRvdy4KKwkJTWFrZSBuZXcgd2luZG93IE4gaGlnaC4KKworCQkJCQkJCSpDVFJMLVdfZ19DVFJMLV0qCitDVFJMLVcgZyBDVFJMLV0JU3BsaXQgY3VycmVudCB3aW5kb3cgaW4gdHdvLiAgVXNlIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIGFzIGEKKwkJdGFnIGFuZCBwZXJmb3JtICI6dGp1bXAiIG9uIGl0IGluIHRoZSBuZXcgdXBwZXIgd2luZG93LiAgTWFrZQorCQluZXcgd2luZG93IE4gaGlnaC4KKworQ1RSTC1XIGYJCQkJCSpDVFJMLVdfZiogKkNUUkwtV19DVFJMLUYqCitDVFJMLVcgQ1RSTC1GCVNwbGl0IGN1cnJlbnQgd2luZG93IGluIHR3by4gIEVkaXQgZmlsZSBuYW1lIHVuZGVyIGN1cnNvci4KKwkJTGlrZSAiOnNwbGl0IF1mIiwgYnV0IHdpbmRvdyBpc24ndCBzcGxpdCBpZiB0aGUgZmlsZSBkb2VzIG5vdAorCQlleGlzdC4KKwkJVXNlcyB0aGUgJ3BhdGgnIHZhcmlhYmxlIGFzIGEgbGlzdCBvZiBkaXJlY3RvcnkgbmFtZXMgd2hlcmUgdG8KKwkJbG9vayBmb3IgdGhlIGZpbGUuICBBbHNvIHRoZSBwYXRoIGZvciBjdXJyZW50IGZpbGUgaXMKKwkJdXNlZCB0byBzZWFyY2ggZm9yIHRoZSBmaWxlIG5hbWUuCisJCUlmIHRoZSBuYW1lIGlzIGEgaHlwZXJ0ZXh0IGxpbmsgdGhhdCBsb29rcyBsaWtlCisJCSJ0eXBlOi8vbWFjaGluZS9wYXRoIiwgb25seSAiL3BhdGgiIGlzIHVzZWQuCisJCUlmIGEgY291bnQgaXMgZ2l2ZW4sIHRoZSBjb3VudCd0aCBtYXRjaGluZyBmaWxlIGlzIGVkaXRlZC4KKwkJe25vdCBhdmFpbGFibGUgd2hlbiB0aGUgfCtmaWxlX2luX3BhdGh8IGZlYXR1cmUgd2FzIGRpc2FibGVkCisJCWF0IGNvbXBpbGUgdGltZX0KKworQWxzbyBzZWUgfENUUkwtV19DVFJMLUl8OiBvcGVuIHdpbmRvdyBmb3IgYW4gaW5jbHVkZWQgZmlsZSB0aGF0IGluY2x1ZGVzCit0aGUga2V5d29yZCB1bmRlciB0aGUgY3Vyc29yLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEwLiBUaGUgcHJldmlldyB3aW5kb3cJCQkJKnByZXZpZXctd2luZG93KgorCitUaGUgcHJldmlldyB3aW5kb3cgaXMgYSBzcGVjaWFsIHdpbmRvdyB0byBzaG93IChwcmV2aWV3KSBhbm90aGVyIGZpbGUuICBJdCBpcworbm9ybWFsbHkgYSBzbWFsbCB3aW5kb3cgdXNlZCB0byBzaG93IGFuIGluY2x1ZGUgZmlsZSBvciBkZWZpbml0aW9uIG9mIGEKK2Z1bmN0aW9uLgore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3F1aWNrZml4fCBmZWF0dXJlfQorCitUaGVyZSBjYW4gYmUgb25seSBvbmUgcHJldmlldyB3aW5kb3cuICBJdCBpcyBjcmVhdGVkIHdpdGggb25lIG9mIHRoZSBjb21tYW5kcworYmVsb3cuICBUaGUgJ3ByZXZpZXdoZWlnaHQnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIHNwZWNpZnkgdGhlIGhlaWdodCBvZiB0aGUKK3ByZXZpZXcgd2luZG93IHdoZW4gaXQncyBvcGVuZWQuICBUaGUgJ3ByZXZpZXd3aW5kb3cnIG9wdGlvbiBpcyBzZXQgaW4gdGhlCitwcmV2aWV3IHdpbmRvdyB0byBiZSBhYmxlIHRvIHJlY29nbml6ZSBpdC4gIFRoZSAnd2luZml4aGVpZ2h0JyBvcHRpb24gaXMgc2V0Cit0byBoYXZlIGl0IGtlZXAgdGhlIHNhbWUgaGVpZ2h0IHdoZW4gb3BlbmluZy9jbG9zaW5nIG90aGVyIHdpbmRvd3MuCisKKwkJCQkJCSo6cHRhKiAqOnB0YWcqCis6cHRhW2ddWyFdIFt0YWduYW1lXQorCQlEb2VzICI6dGFnWyFdIFt0YWduYW1lXSIgYW5kIHNob3dzIHRoZSBmb3VuZCB0YWcgaW4gYQorCQkiUHJldmlldyIgd2luZG93IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGN1cnJlbnQgYnVmZmVyIG9yIGN1cnNvcgorCQlwb3NpdGlvbi4gSWYgYSAiUHJldmlldyIgd2luZG93IGFscmVhZHkgZXhpc3RzLCBpdCBpcyByZS11c2VkCisJCShsaWtlIGEgaGVscCB3aW5kb3cgaXMpLiAgSWYgYSBuZXcgb25lIGlzIG9wZW5lZCwKKwkJJ3ByZXZpZXdoZWlnaHQnIGlzIHVzZWQgZm9yIHRoZSBoZWlnaHQgb2YgdGhlIHdpbmRvdy4gICBTZWUKKwkJYWxzbyB8OnRhZ3wuCisJCVNlZSBiZWxvdyBmb3IgYW4gZXhhbXBsZS4gfEN1cnNvckhvbGQtZXhhbXBsZXwKKwkJU21hbGwgZGlmZmVyZW5jZSBmcm9tIHw6dGFnfDogV2hlbiBbdGFnbmFtZV0gaXMgZXF1YWwgdG8gdGhlCisJCWFscmVhZHkgZGlzcGxheWVkIHRhZywgdGhlIHBvc2l0aW9uIGluIHRoZSBtYXRjaGluZyB0YWcgbGlzdAorCQlpcyBub3QgcmVzZXQuICBUaGlzIG1ha2VzIHRoZSBDdXJzb3JIb2xkIGV4YW1wbGUgd29yayBhZnRlciBhCisJCXw6cHRuZXh0fC4KKworQ1RSTC1XIHoJCQkJCSpDVFJMLVdfeioKK0NUUkwtVyBDVFJMLVoJCQkJCSpDVFJMLVdfQ1RSTC1aKiAqOnBjKiAqOnBjbG9zZSoKKzpwY1tsb3NlXVshXQlDbG9zZSBhbnkgIlByZXZpZXciIHdpbmRvdyBjdXJyZW50bHkgb3Blbi4gIFdoZW4gdGhlICdoaWRkZW4nCisJCW9wdGlvbiBpcyBzZXQsIG9yIHdoZW4gdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCBhbmQgdGhlIFshXSBpcworCQl1c2VkLCB0aGUgYnVmZmVyIGJlY29tZXMgaGlkZGVuICh1bmxlc3MgdGhlcmUgaXMgYW5vdGhlcgorCQl3aW5kb3cgZWRpdGluZyBpdCkuICBUaGUgY29tbWFuZCBmYWlscyBpZiBhbnkgIlByZXZpZXciIGJ1ZmZlcgorCQljYW5ub3QgYmUgY2xvc2VkLiAgU2VlIGFsc28gfDpjbG9zZXwuCisKKwkJCQkJCQkqOnBwKiAqOnBwb3AqCis6W2NvdW50XXBwW29wXVshXQorCQlEb2VzICI6W2NvdW50XXBvcFshXSIgaW4gdGhlIHByZXZpZXcgd2luZG93LiAgU2VlIHw6cG9wfCBhbmQKKwkJfDpwdGFnfC4gIHtub3QgaW4gVml9CisKK0NUUkwtVyB9CQkJCQkJKkNUUkwtV199KgorCQlVc2UgaWRlbnRpZmllciB1bmRlciBjdXJzb3IgYXMgYSB0YWcgYW5kIHBlcmZvcm0gYSA6cHRhZyBvbgorCQlpdC4gTWFrZSB0aGUgbmV3IFByZXZpZXcgd2luZG93IChpZiByZXF1aXJlZCkgTiBoaWdoLiAgSWYgTiBpcworCQlub3QgZ2l2ZW4sICdwcmV2aWV3aGVpZ2h0JyBpcyB1c2VkLgorCitDVFJMLVcgZyB9CQkJCQkJKkNUUkwtV19nfSoKKwkJVXNlIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIGFzIGEgdGFnIGFuZCBwZXJmb3JtIGEgOnB0anVtcCBvbgorCQlpdC4gTWFrZSB0aGUgbmV3IFByZXZpZXcgd2luZG93IChpZiByZXF1aXJlZCkgTiBoaWdoLiAgSWYgTiBpcworCQlub3QgZ2l2ZW4sICdwcmV2aWV3aGVpZ2h0JyBpcyB1c2VkLgorCisJCQkJCQkJKjpwZWQqICo6cGVkaXQqCis6cGVkW2l0XVshXSBbKytvcHRdIFsrY21kXSB7ZmlsZX0KKwkJRWRpdCB7ZmlsZX0gaW4gdGhlIHByZXZpZXcgd2luZG93LiAgVGhlIHByZXZpZXcgd2luZG93IGlzCisJCW9wZW5lZCBsaWtlIHdpdGggfDpwdGFnfC4gIFRoZSBjdXJyZW50IHdpbmRvdyBhbmQgY3Vyc29yCisJCXBvc2l0aW9uIGlzbid0IGNoYW5nZWQuICBVc2VmdWwgZXhhbXBsZTogPgorCQkJOnBlZGl0ICsvZnB1dGMgL3Vzci9pbmNsdWRlL3N0ZGlvLmgKKzwKKwkJCQkJCQkqOnBzKiAqOnBzZWFyY2gqCis6W3JhbmdlXXBzW2VhcmNoXVshXSBbY291bnRdIFsvXXBhdHRlcm5bL10KKwkJV29ya3MgbGlrZSB8OmlqdW1wfCBidXQgc2hvd3MgdGhlIGZvdW5kIG1hdGNoIGluIHRoZSBwcmV2aWV3CisJCXdpbmRvdy4gIFRoZSBwcmV2aWV3IHdpbmRvdyBpcyBvcGVuZWQgbGlrZSB3aXRoIHw6cHRhZ3wuICBUaGUKKwkJY3VycmVudCB3aW5kb3cgYW5kIGN1cnNvciBwb3NpdGlvbiBpc24ndCBjaGFuZ2VkLiAgVXNlZnVsCisJCWV4YW1wbGU6ID4KKwkJCTpwc2VhcmNoIHBvcGVuCis8CQlMaWtlIHdpdGggdGhlIHw6cHRhZ3wgY29tbWFuZCwgeW91IGNhbiB1c2UgdGhpcyB0bworCQlhdXRvbWF0aWNhbGx5IHNob3cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdvcmQgdW5kZXIgdGhlCisJCWN1cnNvci4gIFRoaXMgaXMgbGVzcyBjbGV2ZXIgdGhhbiB1c2luZyB8OnB0YWd8LCBidXQgeW91IGRvbid0CisJCW5lZWQgYSB0YWdzIGZpbGUgYW5kIGl0IHdpbGwgYWxzbyBmaW5kIG1hdGNoZXMgaW4gc3lzdGVtCisJCWluY2x1ZGUgZmlsZXMuICBFeGFtcGxlOiA+CisgIDphdSEgQ3Vyc29ySG9sZCAqLltjaF0gbmVzdGVkIGV4ZSAic2lsZW50ISBwc2VhcmNoICIgLiBleHBhbmQoIjxjd29yZD4iKQorPAkJV2FybmluZzogVGhpcyBjYW4gYmUgc2xvdy4KKworRXhhbXBsZQkJCQkJCSpDdXJzb3JIb2xkLWV4YW1wbGUqICA+CisKKyAgOmF1ISBDdXJzb3JIb2xkICouW2NoXSBuZXN0ZWQgZXhlICJzaWxlbnQhIHB0YWcgIiAuIGV4cGFuZCgiPGN3b3JkPiIpCisKK1RoaXMgd2lsbCBjYXVzZSBhICI6cHRhZyIgdG8gYmUgZXhlY3V0ZWQgZm9yIHRoZSBrZXl3b3JkIHVuZGVyIHRoZSBjdXJzb3IsCit3aGVuIHRoZSBjdXJzb3IgaGFzbid0IG1vdmVkIGZvciB0aGUgdGltZSBzZXQgd2l0aCAndXBkYXRldGltZScuICBUaGUgIm5lc3RlZCIKK21ha2VzIG90aGVyIGF1dG9jb21tYW5kcyBiZSBleGVjdXRlZCwgc28gdGhhdCBzeW50YXggaGlnaGxpZ2h0aW5nIHdvcmtzIGluIHRoZQorcHJldmlldyB3aW5kb3cuICBUaGUgInNpbGVudCEiIGF2b2lkcyBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHRhZyBjb3VsZCBub3QKK2JlIGZvdW5kLiAgQWxzbyBzZWUgfEN1cnNvckhvbGR8LiAgVG8gZGlzYWJsZSB0aGlzIGFnYWluOiA+CisKKyAgOmF1ISBDdXJzb3JIb2xkCisKK0EgbmljZSBhZGRpdGlvbiBpcyB0byBoaWdobGlnaHQgdGhlIGZvdW5kIHRhZywgYXZvaWQgdGhlICI6cHRhZyIgd2hlbiB0aGVyZQoraXMgbm8gd29yZCB1bmRlciB0aGUgY3Vyc29yLCBhbmQgYSBmZXcgb3RoZXIgdGhpbmdzOiA+CisKKyAgOmF1ISBDdXJzb3JIb2xkICouW2NoXSBuZXN0ZWQgY2FsbCBQcmV2aWV3V29yZCgpCisgIDpmdW5jIFByZXZpZXdXb3JkKCkKKyAgOiAgaWYgJnByZXZpZXd3aW5kb3cJCQkiIGRvbid0IGRvIHRoaXMgaW4gdGhlIHByZXZpZXcgd2luZG93CisgIDogICAgcmV0dXJuCisgIDogIGVuZGlmCisgIDogIGxldCB3ID0gZXhwYW5kKCI8Y3dvcmQ+IikJCSIgZ2V0IHRoZSB3b3JkIHVuZGVyIGN1cnNvcgorICA6ICBpZiB3ID1+ICdcYScJCQkiIGlmIHRoZSB3b3JkIGNvbnRhaW5zIGEgbGV0dGVyCisgIDoKKyAgOiAgICAiIERlbGV0ZSBhbnkgZXhpc3RpbmcgaGlnaGxpZ2h0IGJlZm9yZSBzaG93aW5nIGFub3RoZXIgdGFnCisgIDogICAgc2lsZW50ISB3aW5jbWQgUAkJCSIganVtcCB0byBwcmV2aWV3IHdpbmRvdworICA6ICAgIGlmICZwcmV2aWV3d2luZG93CQkJIiBpZiB3ZSByZWFsbHkgZ2V0IHRoZXJlLi4uCisgIDogICAgICBtYXRjaCBub25lCQkJIiBkZWxldGUgZXhpc3RpbmcgaGlnaGxpZ2h0CisgIDogICAgICB3aW5jbWQgcAkJCSIgYmFjayB0byBvbGQgd2luZG93CisgIDogICAgZW5kaWYKKyAgOgorICA6ICAgICIgVHJ5IGRpc3BsYXlpbmcgYSBtYXRjaGluZyB0YWcgZm9yIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IKKyAgOiAgICB0cnkKKyAgOiAgICAgICBleGUgInB0YWcgIiAuIHcKKyAgOiAgICBjYXRjaAorICA6ICAgICAgcmV0dXJuCisgIDogICAgZW5kdHJ5CisgIDoKKyAgOiAgICBzaWxlbnQhIHdpbmNtZCBQCQkJIiBqdW1wIHRvIHByZXZpZXcgd2luZG93CisgIDogICAgaWYgJnByZXZpZXd3aW5kb3cJCSIgaWYgd2UgcmVhbGx5IGdldCB0aGVyZS4uLgorICA6CSBpZiBoYXMoImZvbGRpbmciKQorICA6CSAgIHNpbGVudCEgLmZvbGRvcGVuCQkiIGRvbid0IHdhbnQgYSBjbG9zZWQgZm9sZAorICA6CSBlbmRpZgorICA6CSBjYWxsIHNlYXJjaCgiJCIsICJiIikJCSIgdG8gZW5kIG9mIHByZXZpb3VzIGxpbmUKKyAgOgkgbGV0IHcgPSBzdWJzdGl0dXRlKHcsICdcXCcsICdcXFxcJywgIiIpCisgIDoJIGNhbGwgc2VhcmNoKCdcPFxWJyAuIHcgLiAnXD4nKQkiIHBvc2l0aW9uIGN1cnNvciBvbiBtYXRjaAorICA6CSAiIEFkZCBhIG1hdGNoIGhpZ2hsaWdodCB0byB0aGUgd29yZCBhdCB0aGlzIHBvc2l0aW9uCisgIDogICAgICBoaSBwcmV2aWV3V29yZCB0ZXJtPWJvbGQgY3Rlcm1iZz1ncmVlbiBndWliZz1ncmVlbgorICA6CSBleGUgJ21hdGNoIHByZXZpZXdXb3JkICJcJScgLiBsaW5lKCIuIikgLiAnbFwlJyAuIGNvbCgiLiIpIC4gJ2NcayoiJworICA6ICAgICAgd2luY21kIHAJCQkiIGJhY2sgdG8gb2xkIHdpbmRvdworICA6ICAgIGVuZGlmCisgIDogIGVuZGlmCisgIDplbmRmdW4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMS4gVXNpbmcgaGlkZGVuIGJ1ZmZlcnMJCQkJKmJ1ZmZlci1oaWRkZW4qCisKK0EgaGlkZGVuIGJ1ZmZlciBpcyBub3QgZGlzcGxheWVkIGluIGEgd2luZG93LCBidXQgaXMgc3RpbGwgbG9hZGVkIGludG8gbWVtb3J5LgorVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBqdW1wIGZyb20gZmlsZSB0byBmaWxlLCB3aXRob3V0IHRoZSBuZWVkIHRvIHJlYWQgb3IKK3dyaXRlIHRoZSBmaWxlIGV2ZXJ5IHRpbWUgeW91IGdldCBhbm90aGVyIGJ1ZmZlciBpbiBhIHdpbmRvdy4KK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtsaXN0Y21kc3wgZmVhdHVyZX0KKworCQkJCQkJCSo6YnVmZmVyLSEqCitJZiB0aGUgb3B0aW9uICdoaWRkZW4nICgnaGlkJykgaXMgc2V0LCBhYmFuZG9uZWQgYnVmZmVycyBhcmUga2VwdCBmb3IgYWxsCitjb21tYW5kcyB0aGF0IHN0YXJ0IGVkaXRpbmcgYW5vdGhlciBmaWxlOiAiOmVkaXQiLCAiOm5leHQiLCAiOnRhZyIsIGV0Yy4gIFRoZQorY29tbWFuZHMgdGhhdCBtb3ZlIHRocm91Z2ggdGhlIGJ1ZmZlciBsaXN0IHNvbWV0aW1lcyBtYWtlIHRoZSBjdXJyZW50IGJ1ZmZlcgoraGlkZGVuIGFsdGhvdWdoIHRoZSAnaGlkZGVuJyBvcHRpb24gaXMgbm90IHNldC4gIFRoaXMgaGFwcGVucyB3aGVuIGEgYnVmZmVyIGlzCittb2RpZmllZCwgYnV0IGlzIGZvcmNlZCAod2l0aCAnIScpIHRvIGJlIHJlbW92ZWQgZnJvbSBhIHdpbmRvdywgYW5kCisnYXV0b3dyaXRlJyBpcyBvZmYgb3IgdGhlIGJ1ZmZlciBjYW4ndCBiZSB3cml0dGVuLgorCitZb3UgY2FuIG1ha2UgYSBoaWRkZW4gYnVmZmVyIG5vdCBoaWRkZW4gYnkgc3RhcnRpbmcgdG8gZWRpdCBpdCB3aXRoIGFueQorY29tbWFuZC4gIE9yIGJ5IGRlbGV0aW5nIGl0IHdpdGggdGhlICI6YmRlbGV0ZSIgY29tbWFuZC4KKworVGhlICdoaWRkZW4nIGlzIGdsb2JhbCwgaXQgaXMgdXNlZCBmb3IgYWxsIGJ1ZmZlcnMuICBUaGUgJ2J1ZmhpZGRlbicgb3B0aW9uCitjYW4gYmUgdXNlZCB0byBtYWtlIGFuIGV4Y2VwdGlvbiBmb3IgYSBzcGVjaWZpYyBidWZmZXIuICBJdCBjYW4gdGFrZSB0aGVzZQordmFsdWVzOgorCTxlbXB0eT4JCVVzZSB0aGUgdmFsdWUgb2YgJ2hpZGRlbicuCisJaGlkZQkJSGlkZSB0aGlzIGJ1ZmZlciwgYWxzbyB3aGVuICdoaWRkZW4nIGlzIG5vdCBzZXQuCisJdW5sb2FkCQlEb24ndCBoaWRlIGJ1dCB1bmxvYWQgdGhpcyBidWZmZXIsIGFsc28gd2hlbiAnaGlkZGVuJworCQkJaXMgc2V0LgorCWRlbGV0ZQkJRGVsZXRlIHRoZSBidWZmZXIuCisKKwkJCQkJCQkqaGlkZGVuLXF1aXQqCitXaGVuIHlvdSB0cnkgdG8gcXVpdCBWaW0gd2hpbGUgdGhlcmUgaXMgYSBoaWRkZW4sIG1vZGlmaWVkIGJ1ZmZlciwgeW91IHdpbGwKK2dldCBhbiBlcnJvciBtZXNzYWdlIGFuZCBWaW0gd2lsbCBtYWtlIHRoYXQgYnVmZmVyIHRoZSBjdXJyZW50IGJ1ZmZlci4gIFlvdQorY2FuIHRoZW4gZGVjaWRlIHRvIHdyaXRlIHRoaXMgYnVmZmVyICgiOndxIikgb3IgcXVpdCB3aXRob3V0IHdyaXRpbmcgKCI6cSEiKS4KK0JlIGNhcmVmdWw6IHRoZXJlIG1heSBiZSBtb3JlIGhpZGRlbiwgbW9kaWZpZWQgYnVmZmVycyEKKworQSBidWZmZXIgY2FuIGFsc28gYmUgdW5saXN0ZWQuICBUaGlzIG1lYW5zIGl0IGV4aXN0cywgYnV0IGl0IGlzIG5vdCBpbiB0aGUKK2xpc3Qgb2YgYnVmZmVycy4gfHVubGlzdGVkLWJ1ZmZlcnwKKworCis6ZmlsZXNbIV0JCQkJCSo6ZmlsZXMqCis6YnVmZmVyc1shXQkJCQkJKjpidWZmZXJzKiAqOmxzKgorOmxzWyFdCQlTaG93IGFsbCBidWZmZXJzLiAgRXhhbXBsZToKKworCQkJMSAjaCAgIi90ZXN0L3RleHQiCQlsaW5lIDEgfgorCQkJMnUgICAgImFzZGYiCQkJbGluZSAwIH4KKwkJCTMgJWwrICJ2ZXJzaW9uLmMiCQlsaW5lIDEgfgorCisJCVdoZW4gdGhlIFshXSBpcyBpbmNsdWRlZCB0aGUgbGlzdCB3aWxsIHNob3cgdW5saXN0ZWQgYnVmZmVycworCQkodGhlIHRlcm0gInVubGlzdGVkIiBpcyBhIGJpdCBjb25mdXNpbmcgdGhlbi4uLikuCisKKwkJRWFjaCBidWZmZXIgaGFzIGEgdW5pcXVlIG51bWJlci4gIFRoYXQgbnVtYmVyIHdpbGwgbm90IGNoYW5nZSwKKwkJc28geW91IGNhbiBhbHdheXMgZ28gdG8gYSBzcGVjaWZpYyBidWZmZXIgd2l0aCAiOmJ1ZmZlciBOIiBvcgorCQkiTiBDVFJMLV4iLCB3aGVyZSBOIGlzIHRoZSBidWZmZXIgbnVtYmVyLgorCisJCUluZGljYXRvcnMgKGNoYXJzIGluIHRoZSBzYW1lIGNvbHVtbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlKToKKwkJdQlhbiB1bmxpc3RlZCBidWZmZXIgKG9ubHkgZGlzcGxheWVkIHdoZW4gWyFdIGlzIHVzZWQpCisJCQkgICB8dW5saXN0ZWQtYnVmZmVyfAorCQkgJQl0aGUgYnVmZmVyIGluIHRoZSBjdXJyZW50IHdpbmRvdworCQkgIwl0aGUgYWx0ZXJuYXRlIGJ1ZmZlciBmb3IgIjplICMiIGFuZCBDVFJMLV4KKwkJICBhCWFuIGFjdGl2ZSBidWZmZXI6IGl0IGlzIGxvYWRlZCBhbmQgdmlzaWJsZQorCQkgIGgJYSBoaWRkZW4gYnVmZmVyOiBJdCBpcyBsb2FkZWQsIGJ1dCBjdXJyZW50bHkgbm90CisJCQkgICBkaXNwbGF5ZWQgaW4gYSB3aW5kb3cgfGhpZGRlbi1idWZmZXJ8CisJCSAgIC0JYSBidWZmZXIgd2l0aCAnbW9kaWZpYWJsZScgb2ZmCisJCSAgID0JYSByZWFkb25seSBidWZmZXIKKwkJICAgICsJYSBtb2RpZmllZCBidWZmZXIKKwkJICAgIHggICBhIGJ1ZmZlciB3aXRoIHJlYWQgZXJyb3JzCisKKwkJCQkJCSo6YmFkKiAqOmJhZGQqCis6YmFkW2RdCVsrbG51bV0ge2ZuYW1lfQorCQlBZGQgZmlsZSBuYW1lIHtmbmFtZX0gdG8gdGhlIGJ1ZmZlciBsaXN0LCB3aXRob3V0IGxvYWRpbmcgaXQuCisJCUlmICJsbnVtIiBpcyBzcGVjaWZpZWQsIHRoZSBjdXJzb3Igd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoYXQKKwkJbGluZSB3aGVuIHRoZSBidWZmZXIgaXMgZmlyc3QgZW50ZXJlZC4gTm90ZSB0aGF0IG90aGVyCisJCWNvbW1hbmRzIGFmdGVyIHRoZSArIHdpbGwgYmUgaWdub3JlZC4KKworOltOXWJkW2VsZXRlXVshXQkJCSo6YmQqICo6YmRlbCogKjpiZGVsZXRlKiAqRTUxNioKKzpiZFtlbGV0ZV1bIV0gW05dCisJCVVubG9hZCBidWZmZXIgW05dIChkZWZhdWx0OiBjdXJyZW50IGJ1ZmZlcikgYW5kIGRlbGV0ZSBpdCBmcm9tCisJCXRoZSBidWZmZXIgbGlzdC4gIElmIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQsIHRoaXMgZmFpbHMsCisJCXVubGVzcyB3aGVuIFshXSBpcyBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgY2hhbmdlcyBhcmUgbG9zdC4KKwkJVGhlIGZpbGUgcmVtYWlucyB1bmFmZmVjdGVkLiAgQW55IHdpbmRvd3MgZm9yIHRoaXMgYnVmZmVyIGFyZQorCQljbG9zZWQuICBJZiBidWZmZXIgW05dIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgYW5vdGhlciBidWZmZXIKKwkJd2lsbCBiZSBkaXNwbGF5ZWQgaW5zdGVhZC4gIFRoaXMgaXMgdGhlIG1vc3QgcmVjZW50IGVudHJ5IGluCisJCXRoZSBqdW1wIGxpc3QgdGhhdCBwb2ludHMgaW50byBhIGxvYWRlZCBidWZmZXIuCisJCUFjdHVhbGx5LCB0aGUgYnVmZmVyIGlzbid0IGNvbXBsZXRlbHkgZGVsZXRlZCwgaXQgaXMgcmVtb3ZlZAorCQlmcm9tIHRoZSBidWZmZXIgbGlzdCB8dW5saXN0ZWQtYnVmZmVyfCBhbmQgb3B0aW9uIHZhbHVlcywKKwkJdmFyaWFibGVzIGFuZCBtYXBwaW5ncy9hYmJyZXZpYXRpb25zIGZvciB0aGUgYnVmZmVyIGFyZQorCQljbGVhcmVkLgorCis6YmRlbGV0ZVshXSB7YnVmbmFtZX0JCQkJCQkqRTkzKiAqRTk0KgorCQlMaWtlICI6YmRlbGV0ZVshXSBbTl0iLCBidXQgYnVmZmVyIGdpdmVuIGJ5IG5hbWUuICBOb3RlIHRoYXQgYQorCQlidWZmZXIgd2hvc2UgbmFtZSBpcyBhIG51bWJlciBjYW5ub3QgYmUgcmVmZXJlbmNlZCBieSB0aGF0CisJCW5hbWU7IHVzZSB0aGUgYnVmZmVyIG51bWJlciBpbnN0ZWFkLiAgSW5zZXJ0IGEgYmFja3NsYXNoCisJCWJlZm9yZSBhIHNwYWNlIGluIGEgYnVmZmVyIG5hbWUuCisKKzpiZGVsZXRlWyFdIE4xIE4yIC4uLgorCQlEbyAiOmJkZWxldGVbIV0iIGZvciBidWZmZXIgTjEsIE4yLCBldGMuICBUaGUgYXJndW1lbnRzIGNhbiBiZQorCQlidWZmZXIgbnVtYmVycyBvciBidWZmZXIgbmFtZXMgKGJ1dCBub3QgYnVmZmVyIG5hbWVzIHRoYXQgYXJlCisJCWEgbnVtYmVyKS4gIEluc2VydCBhIGJhY2tzbGFzaCBiZWZvcmUgYSBzcGFjZSBpbiBhIGJ1ZmZlcgorCQluYW1lLgorCis6TixNYmRlbGV0ZVshXQlEbyAiOmJkZWxldGVbIV0iIGZvciBhbGwgYnVmZmVycyBpbiB0aGUgcmFuZ2UgTiB0byBNCisJCXxpbmNsdXNpdmV8LgorCis6W05dYndbaXBlb3V0XVshXQkJCSo6YncqICo6YndpcGUqICo6YndpcGVvdXQqICpFNTE3KgorOmJ3W2lwZW91dF1bIV0ge2J1Zm5hbWV9Cis6TixNYndbaXBlb3V0XVshXQorOmJ3W2lwZW91dF1bIV0gTjEgTjIgLi4uCisJCUxpa2UgfDpiZGVsZXRlfCwgYnV0IHJlYWxseSBkZWxldGUgdGhlIGJ1ZmZlci4gIEFsbCBtYXJrcyBpbgorCQl0aGlzIGJ1ZmZlciBiZWNvbWUgaW52YWxpZCwgb3B0aW9uIHNldHRpbmdzIGFyZSBsb3N0LCBldGMuCisJCURvbid0IHVzZSB0aGlzIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKKzpbTl1idW5bbG9hZF1bIV0JCQkJKjpidW4qICo6YnVubG9hZCogKkU1MTUqCis6YnVuW2xvYWRdWyFdIFtOXQorCQlVbmxvYWQgYnVmZmVyIFtOXSAoZGVmYXVsdDogY3VycmVudCBidWZmZXIpLiAgVGhlIG1lbW9yeQorCQlhbGxvY2F0ZWQgZm9yIHRoaXMgYnVmZmVyIHdpbGwgYmUgZnJlZWQuICBUaGUgYnVmZmVyIHJlbWFpbnMKKwkJaW4gdGhlIGJ1ZmZlciBsaXN0LgorCQlJZiB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkLCB0aGlzIGZhaWxzLCB1bmxlc3Mgd2hlbiBbIV0gaXMKKwkJc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIHRoZSBjaGFuZ2VzIGFyZSBsb3N0LgorCQlBbnkgd2luZG93cyBmb3IgdGhpcyBidWZmZXIgYXJlIGNsb3NlZC4gIElmIGJ1ZmZlciBbTl0gaXMgdGhlCisJCWN1cnJlbnQgYnVmZmVyLCBhbm90aGVyIGJ1ZmZlciB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkLgorCQlUaGlzIGlzIHRoZSBtb3N0IHJlY2VudCBlbnRyeSBpbiB0aGUganVtcCBsaXN0IHRoYXQgcG9pbnRzCisJCWludG8gYSBsb2FkZWQgYnVmZmVyLgorCis6YnVubG9hZFshXSB7YnVmbmFtZX0KKwkJTGlrZSAiOmJ1bmxvYWRbIV0gW05dIiwgYnV0IGJ1ZmZlciBnaXZlbiBieSBuYW1lLiAgTm90ZSB0aGF0IGEKKwkJYnVmZmVyIHdob3NlIG5hbWUgaXMgYSBudW1iZXIgY2Fubm90IGJlIHJlZmVyZW5jZWQgYnkgdGhhdAorCQluYW1lOyB1c2UgdGhlIGJ1ZmZlciBudW1iZXIgaW5zdGVhZC4gIEluc2VydCBhIGJhY2tzbGFzaAorCQliZWZvcmUgYSBzcGFjZSBpbiBhIGJ1ZmZlciBuYW1lLgorCis6TixNYnVubG9hZFshXQlEbyAiOmJ1bmxvYWRbIV0iIGZvciBhbGwgYnVmZmVycyBpbiB0aGUgcmFuZ2UgTiB0byBNCisJCXxpbmNsdXNpdmV8LgorCis6YnVubG9hZFshXSBOMSBOMiAuLi4KKwkJRG8gIjpidW5sb2FkWyFdIiBmb3IgYnVmZmVyIE4xLCBOMiwgZXRjLiAgVGhlIGFyZ3VtZW50cyBjYW4gYmUKKwkJYnVmZmVyIG51bWJlcnMgb3IgYnVmZmVyIG5hbWVzIChidXQgbm90IGJ1ZmZlciBuYW1lcyB0aGF0IGFyZQorCQlhIG51bWJlcikuICBJbnNlcnQgYSBiYWNrc2xhc2ggYmVmb3JlIGEgc3BhY2UgaW4gYSBidWZmZXIKKwkJbmFtZS4KKworOltOXWJbdWZmZXJdWyFdIFtOXQkJCSo6YiogKjpidSogKjpidWYqICo6YnVmZmVyKiAqRTg2KgorCQlFZGl0IGJ1ZmZlciBbTl0gZnJvbSB0aGUgYnVmZmVyIGxpc3QuICBJZiBbTl0gaXMgbm90IGdpdmVuLAorCQl0aGUgY3VycmVudCBidWZmZXIgcmVtYWlucyBiZWluZyBlZGl0ZWQuICBTZWUgfDpidWZmZXItIXwgZm9yCisJCVshXS4gIFRoaXMgd2lsbCBhbHNvIGVkaXQgYSBidWZmZXIgdGhhdCBpcyBub3QgaW4gdGhlIGJ1ZmZlcgorCQlsaXN0LCB3aXRob3V0IHNldHRpbmcgdGhlICdidWZsaXN0ZWQnIGZsYWcuCisKKzpbTl1iW3VmZmVyXVshXSB7ZmlsZW5hbWV9CisJCUVkaXQgYnVmZmVyIGZvciB7ZmlsZW5hbWV9IGZyb20gdGhlIGJ1ZmZlciBsaXN0LiAgU2VlCisJCXw6YnVmZmVyLSF8IGZvciBbIV0uICBUaGlzIHdpbGwgYWxzbyBlZGl0IGEgYnVmZmVyIHRoYXQgaXMgbm90CisJCWluIHRoZSBidWZmZXIgbGlzdCwgd2l0aG91dCBzZXR0aW5nIHRoZSAnYnVmbGlzdGVkJyBmbGFnLgorCis6W05dc2JbdWZmZXJdIFtOXQkJCQkJKjpzYiogKjpzYnVmZmVyKgorCQlTcGxpdCB3aW5kb3cgYW5kIGVkaXQgYnVmZmVyIFtOXSBmcm9tIHRoZSBidWZmZXIgbGlzdC4gIElmIFtOXQorCQlpcyBub3QgZ2l2ZW4sIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBlZGl0ZWQuICBSZXNwZWN0cyB0aGUKKwkJInVzZW9wZW4iIHNldHRpbmcgb2YgJ3N3aXRjaGJ1Zicgd2hlbiBzcGxpdHRpbmcuICBUaGlzIHdpbGwKKwkJYWxzbyBlZGl0IGEgYnVmZmVyIHRoYXQgaXMgbm90IGluIHRoZSBidWZmZXIgbGlzdCwgd2l0aG91dAorCQlzZXR0aW5nIHRoZSAnYnVmbGlzdGVkJyBmbGFnLgorCis6W05dc2JbdWZmZXJdIHtmaWxlbmFtZX0KKwkJU3BsaXQgd2luZG93IGFuZCBlZGl0IGJ1ZmZlciBmb3Ige2ZpbGVuYW1lfSBmcm9tIHRoZSBidWZmZXIKKwkJbGlzdC4gIFRoaXMgd2lsbCBhbHNvIGVkaXQgYSBidWZmZXIgdGhhdCBpcyBub3QgaW4gdGhlIGJ1ZmZlcgorCQlsaXN0LCB3aXRob3V0IHNldHRpbmcgdGhlICdidWZsaXN0ZWQnIGZsYWcuCisKKwkJCQkJCQkqOmJuKiAqOmJuZXh0KiAqRTg3KgorOltOXWJuW2V4dF1bIV0gW05dCisJCUdvIHRvIFtOXXRoIG5leHQgYnVmZmVyIGluIGJ1ZmZlciBsaXN0LiAgW05dIGRlZmF1bHRzIHRvIG9uZS4KKwkJV3JhcHMgYXJvdW5kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBsaXN0LgorCQlTZWUgfDpidWZmZXItIXwgZm9yIFshXS4KKwkJSWYgeW91IGFyZSBpbiBhIGhlbHAgYnVmZmVyLCB0aGlzIHRha2VzIHlvdSB0byB0aGUgbmV4dCBoZWxwCisJCWJ1ZmZlciAoaWYgdGhlcmUgaXMgb25lKS4gIFNpbWlsYXJseSwgaWYgeW91IGFyZSBpbiBhIG5vcm1hbAorCQkobm9uLWhlbHApIGJ1ZmZlciwgdGhpcyB0YWtlcyB5b3UgdG8gdGhlIG5leHQgbm9ybWFsIGJ1ZmZlci4KKwkJVGhpcyBpcyBzbyB0aGF0IGlmIHlvdSBoYXZlIGludm9rZWQgaGVscCwgaXQgZG9lc24ndCBnZXQgaW4KKwkJdGhlIHdheSB3aGVuIHlvdSdyZSBicm93c2luZyBjb2RlL3RleHQgYnVmZmVycy4gVGhlIG5leHQgdGhyZWUKKwkJY29tbWFuZHMgYWxzbyB3b3JrIGxpa2UgdGhpcy4KKworCQkJCQkJCSo6c2JuKiAqOnNibmV4dCoKKzpbTl1zYm5bZXh0XSBbTl0KKwkJU3BsaXQgd2luZG93IGFuZCBnbyB0byBbTl10aCBuZXh0IGJ1ZmZlciBpbiBidWZmZXIgbGlzdC4KKwkJV3JhcHMgYXJvdW5kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBsaXN0LiAgVXNlcyAnc3dpdGNoYnVmJworCis6W05dYk5bZXh0XVshXSBbTl0JCQkqOmJOKiAqOmJOZXh0KiAqOmJwKiAqOmJwcmV2aW91cyogKkU4OCoKKzpbTl1icFtyZXZpb3VzXVshXSBbTl0KKwkJR28gdG8gW05ddGggcHJldmlvdXMgYnVmZmVyIGluIGJ1ZmZlciBsaXN0LiAgW05dIGRlZmF1bHRzIHRvCisJCW9uZS4gIFdyYXBzIGFyb3VuZCB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciBsaXN0LgorCQlTZWUgfDpidWZmZXItIXwgZm9yIFshXSBhbmQgJ3N3aXRjaGJ1ZicuCisKKzpbTl1zYk5bZXh0XSBbTl0JCQkqOnNiTiogKjpzYk5leHQqICo6c2JwKiAqOnNicHJldmlvdXMqCis6W05dc2JwW3JldmlvdXNdIFtOXQorCQlTcGxpdCB3aW5kb3cgYW5kIGdvIHRvIFtOXXRoIHByZXZpb3VzIGJ1ZmZlciBpbiBidWZmZXIgbGlzdC4KKwkJV3JhcHMgYXJvdW5kIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIGxpc3QuCisJCVVzZXMgJ3N3aXRjaGJ1ZicuCisKKwkJCQkJCQkqOmJyKiAqOmJyZXdpbmQqCis6YnJbZXdpbmRdWyFdCUdvIHRvIGZpcnN0IGJ1ZmZlciBpbiBidWZmZXIgbGlzdC4gIElmIHRoZSBidWZmZXIgbGlzdCBpcworCQllbXB0eSwgZ28gdG8gdGhlIGZpcnN0IHVubGlzdGVkIGJ1ZmZlci4KKwkJU2VlIHw6YnVmZmVyLSF8IGZvciBbIV0uCisKKwkJCQkJCQkqOmJmKiAqOmJmaXJzdCoKKzpiZltpcnN0XQlTYW1lIGFzICI6YnJld2luZCIuCisKKwkJCQkJCQkqOnNiciogKjpzYnJld2luZCoKKzpzYnJbZXdpbmRdCVNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gZmlyc3QgYnVmZmVyIGluIGJ1ZmZlciBsaXN0LiAgSWYgdGhlCisJCWJ1ZmZlciBsaXN0IGlzIGVtcHR5LCBnbyB0byB0aGUgZmlyc3QgdW5saXN0ZWQgYnVmZmVyLgorCQlSZXNwZWN0cyB0aGUgJ3N3aXRjaGJ1Zicgb3B0aW9uLgorCisJCQkJCQkJKjpzYmYqICo6c2JmaXJzdCoKKzpzYmZbaXJzdF0JU2FtZSBhcyAiOnNicmV3aW5kIi4KKworCQkJCQkJCSo6YmwqICo6Ymxhc3QqCis6YmxbYXN0XVshXQlHbyB0byBsYXN0IGJ1ZmZlciBpbiBidWZmZXIgbGlzdC4gIElmIHRoZSBidWZmZXIgbGlzdCBpcworCQllbXB0eSwgZ28gdG8gdGhlIGxhc3QgdW5saXN0ZWQgYnVmZmVyLgorCQlTZWUgfDpidWZmZXItIXwgZm9yIFshXS4KKworCQkJCQkJCSo6c2JsKiAqOnNibGFzdCoKKzpzYmxbYXN0XQlTcGxpdCB3aW5kb3cgYW5kIGdvIHRvIGxhc3QgYnVmZmVyIGluIGJ1ZmZlciBsaXN0LiAgSWYgdGhlCisJCWJ1ZmZlciBsaXN0IGlzIGVtcHR5LCBnbyB0byB0aGUgbGFzdCB1bmxpc3RlZCBidWZmZXIuCisJCVJlc3BlY3RzICdzd2l0Y2hidWYnIG9wdGlvbi4KKworOltOXWJtW29kaWZpZWRdWyFdIFtOXQkJCQkqOmJtKiAqOmJtb2RpZmllZCogKkU4NCoKKwkJR28gdG8gW05ddGggbmV4dCBtb2RpZmllZCBidWZmZXIuICBOb3RlOiB0aGlzIGNvbW1hbmQgYWxzbworCQlmaW5kcyB1bmxpc3RlZCBidWZmZXJzLiAgSWYgdGhlcmUgaXMgbm8gbW9kaWZpZWQgYnVmZmVyIHRoZQorCQljb21tYW5kIGZhaWxzLgorCis6W05dc2JtW29kaWZpZWRdIFtOXQkJCQkJKjpzYm0qICo6c2Jtb2RpZmllZCoKKwkJU3BsaXQgd2luZG93IGFuZCBnbyB0byBbTl10aCBuZXh0IG1vZGlmaWVkIGJ1ZmZlci4KKwkJUmVzcGVjdHMgJ3N3aXRjaGJ1Zicgb3B0aW9uLgorCQlOb3RlOiB0aGlzIGNvbW1hbmQgYWxzbyBmaW5kcyBidWZmZXJzIG5vdCBpbiB0aGUgYnVmZmVyIGxpc3QuCisKKzpbTl11bmhbaWRlXSBbTl0JCQkqOnVuaCogKjp1bmhpZGUqICo6c3VuKiAqOnN1bmhpZGUqCis6W05dc3VuW2hpZGVdIFtOXQorCQlSZWFycmFuZ2UgdGhlIHNjcmVlbiB0byBvcGVuIG9uZSB3aW5kb3cgZm9yIGVhY2ggbG9hZGVkIGJ1ZmZlcgorCQlpbiB0aGUgYnVmZmVyIGxpc3QuICBXaGVuIGEgY291bnQgaXMgZ2l2ZW4sIHRoaXMgaXMgdGhlCisJCW1heGltdW0gbnVtYmVyIG9mIHdpbmRvd3MgdG8gb3Blbi4KKworOltOXWJhW2xsXSBbTl0JCQkJCSo6YmEqICo6YmFsbCogKjpzYmEqICo6c2JhbGwqCis6W05dc2JhW2xsXSBbTl0JUmVhcnJhbmdlIHRoZSBzY3JlZW4gdG8gb3BlbiBvbmUgd2luZG93IGZvciBlYWNoIGJ1ZmZlciBpbgorCQl0aGUgYnVmZmVyIGxpc3QuICBXaGVuIGEgY291bnQgaXMgZ2l2ZW4sIHRoaXMgaXMgdGhlIG1heGltdW0KKwkJbnVtYmVyIG9mIHdpbmRvd3MgdG8gb3Blbi4gICd3aW5oZWlnaHQnIGFsc28gbGltaXRzIHRoZSBudW1iZXIKKwkJb2Ygd2luZG93cyBvcGVuZWQgKCd3aW53aWR0aCcgaWYgfDp2ZXJ0aWNhbHwgd2FzIHByZXBlbmRlZCkuCisJCUJ1Zi9XaW4gRW50ZXIvTGVhdmUgYXV0b2NvbW1hbmRzIGFyZSBub3QgZXhlY3V0ZWQgZm9yIHRoZSBuZXcKKwkJd2luZG93cyBoZXJlLCB0aGF0J3Mgb25seSBkb25lIHdoZW4gdGhleSBhcmUgcmVhbGx5IGVudGVyZWQuCisKK05vdGU6IEFsbCB0aGUgY29tbWFuZHMgYWJvdmUgdGhhdCBzdGFydCBlZGl0aW5nIGFub3RoZXIgYnVmZmVyLCBrZWVwIHRoZQorJ3JlYWRvbmx5JyBmbGFnIGFzIGl0IHdhcy4gIFRoaXMgZGlmZmVycyBmcm9tIHRoZSAiOmVkaXQiIGNvbW1hbmQsIHdoaWNoIHNldHMKK3RoZSAncmVhZG9ubHknIGZsYWcgZWFjaCB0aW1lIHRoZSBmaWxlIGlzIHJlYWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTIuIFNwZWNpYWwga2luZHMgb2YgYnVmZmVycwkJCSpzcGVjaWFsLWJ1ZmZlcnMqCisKK0luc3RlYWQgb2YgY29udGFpbmluZyB0aGUgdGV4dCBvZiBhIGZpbGUsIGJ1ZmZlcnMgY2FuIGFsc28gYmUgdXNlZCBmb3Igb3RoZXIKK3B1cnBvc2VzLiAgQSBmZXcgb3B0aW9ucyBjYW4gYmUgc2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgYSBidWZmZXI6CisJJ2J1ZmhpZGRlbicJd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGJ1ZmZlciBpcyBubyBsb25nZXIgZGlzcGxheWVkCisJCQlpbiBhIHdpbmRvdy4KKwknYnVmdHlwZScJd2hhdCBraW5kIG9mIGEgYnVmZmVyIHRoaXMgaXMKKwknc3dhcGZpbGUnCXdoZXRoZXIgdGhlIGJ1ZmZlciB3aWxsIGhhdmUgYSBzd2FwIGZpbGUKKwknYnVmbGlzdGVkJwlidWZmZXIgc2hvd3MgdXAgaW4gdGhlIGJ1ZmZlciBsaXN0CisKK0EgZmV3IHVzZWZ1bCBraW5kcyBvZiBhIGJ1ZmZlcjoKKworcXVpY2tmaXgJVXNlZCB0byBjb250YWluIHRoZSBlcnJvciBsaXN0LiAgU2VlIHw6Y3dpbmRvd3wuICBUaGlzIGNvbW1hbmQKKwkJc2V0cyB0aGUgJ2J1ZnR5cGUnIG9wdGlvbiB0byAicXVpY2tmaXgiLiAgWW91IGFyZSBub3Qgc3VwcG9zZWQKKwkJdG8gY2hhbmdlIHRoaXMhICAnc3dhcGZpbGUnIGlzIG9mZi4KKworaGVscAkJQ29udGFpbnMgYSBoZWxwIGZpbGUuICBXaWxsIG9ubHkgYmUgY3JlYXRlZCB3aXRoIHRoZSB8OmhlbHB8CisJCWNvbW1hbmQuICBUaGUgZmxhZyB0aGF0IGluZGljYXRlcyBhIGhlbHAgYnVmZmVyIGlzIGludGVybmFsCisJCWFuZCBjYW4ndCBiZSBjaGFuZ2VkLiAgVGhlICdidWZsaXN0ZWQnIG9wdGlvbiB3aWxsIGJlIHJlc2V0CisJCWZvciBhIGhlbHAgYnVmZmVyLgorCitkaXJlY3RvcnkJRGlzcGxheXMgZGlyZWN0b3J5IGNvbnRlbnRzLiAgVXNlZCBieSB0aGUgfGZpbGUtZXhwbG9yZXJ8CisJCXBsdWdpbi4gIFRoZSBidWZmZXIgaXMgY3JlYXRlZCB3aXRoIHRoZXNlIHNldHRpbmdzOiA+CisJCQk6c2V0IGJ1ZnR5cGU9bm93cml0ZQorCQkJOnNldCBidWZoaWRkZW49ZGVsZXRlCisJCQk6c2V0IG5vc3dhcGZpbGUKKzwJCVRoZSBidWZmZXIgbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGFuZCBpcyBhZGp1c3RlZAorCQl3aGVuIHVzaW5nIHRoZSB8OmNkfCBjb21tYW5kLgorCitzY3JhdGNoCQlDb250YWlucyB0ZXh0IHRoYXQgY2FuIGJlIGRpc2NhcmRlZCBhdCBhbnkgdGltZS4gIEl0IGlzIGtlcHQKKwkJd2hlbiBjbG9zaW5nIHRoZSB3aW5kb3csIGl0IG11c3QgYmUgZGVsZXRlZCBleHBsaWNpdGx5LgorCQlTZXR0aW5nczogPgorCQkJOnNldCBidWZ0eXBlPW5vZmlsZQorCQkJOnNldCBidWZoaWRkZW49aGlkZQorCQkJOnNldCBub3N3YXBmaWxlCis8CQlUaGUgYnVmZmVyIG5hbWUgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGJ1ZmZlci4KKworCQkJCQkJKnVubGlzdGVkLWJ1ZmZlcioKK3VubGlzdGVkCVRoZSBidWZmZXIgaXMgbm90IGluIHRoZSBidWZmZXIgbGlzdC4gIEl0IGlzIG5vdCB1c2VkIGZvcgorCQlub3JtYWwgZWRpdGluZywgYnV0IHRvIHNob3cgYSBoZWxwIGZpbGUsIHJlbWVtYmVyIGEgZmlsZSBuYW1lCisJCW9yIG1hcmtzLiAgVGhlICI6YmRlbGV0ZSIgY29tbWFuZCB3aWxsIGFsc28gc2V0IHRoaXMgb3B0aW9uLAorCQl0aHVzIGl0IGRvZXNuJ3QgY29tcGxldGVseSBkZWxldGUgdGhlIGJ1ZmZlci4gIFNldHRpbmdzOiA+CisJCQk6c2V0IG5vYnVmbGlzdGVkCis8CisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy93b3Jrc2hvcC50eHQgYi9ydW50aW1lL2RvYy93b3Jrc2hvcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2OGM3NQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3dvcmtzaG9wLnR4dApAQCAtMCwwICsxLDk4IEBACisqd29ya3Nob3AudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSmFuIDA4CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEdvcmRvbiBQcmlldXIKKworCitTdW4gVmlzdWFsIFdvcmtTaG9wIEZlYXR1cmVzCQkJKndvcmtzaG9wKiAqd29ya3Nob3Atc3VwcG9ydCoKKworMS4gSW50cm9kdWN0aW9uCQkJCQkJfHdvcmtzaG9wLWludHJvfAorMi4gQ29tbWFuZHMJCQkJCQl8d29ya3Nob3AtY29tbWFuZHN8CiszLiBDb21waWxpbmcgdmltL2d2aW0gZm9yIFdvcmtTaG9wCQkJfHdvcmtzaG9wLWNvbXBpbGluZ3wKKzQuIENvbmZpZ3VyaW5nIGd2aW0gZm9yIGEgV29ya1Nob3AgcmVsZWFzZSB0cmVlCQl8d29ya3Nob3AtY29uZmlndXJlfAorNS4gT2J0YWluaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgWFBNIGxpYnJhcnkJfHdvcmtzaG9wLXhwbXwKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGZlYXR1cmVzfQore29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtzdW5fd29ya3Nob3B8IGZlYXR1cmV9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW50cm9kdWN0aW9uCQkJCQkJKndvcmtzaG9wLWludHJvKgorCitTdW4gVmlzdWFsIFdvcmtTaG9wIGhhcyBhbiAiRWRpdG9yIG9mIENob2ljZSIgZmVhdHVyZSBkZXNpZ25lZCB0byBsZXQgdXNlcnMKK2RlYnVnIHVzaW5nIHRoZWlyIGZhdm9yaXRlIGVkaXRvcnMuIEZvciB0aGUgNi4wIHJlbGVhc2Ugd2UgaGF2ZSBhZGRlZCBzdXBwb3J0Citmb3IgZ3ZpbS4gQSB3b3Jrc2hvcCBkZWJ1ZyBzZXNzaW9uIHdpbGwgaGF2ZSBhIGRlYnVnZ2luZyB3aW5kb3cgYW5kIGFuIGVkaXRvcgord2luZG93IChwb3NzaWJseSBvdGhlcnMgYXMgd2VsbCkuIFRoZSB1c2VyIGNhbiBkbyBtYW55IGRlYnVnZ2luZyBvcGVyYXRpb25zCitmcm9tIHRoZSBlZGl0b3Igd2luZG93LCBtaW5pbWl6aW5nIHRoZSBuZWVkIHRvIHN3aXRjaCBmcm9tIHdpbmRvdyB0byB3aW5kb3cuCisKK1RoZSB2ZXJzaW9uIG9mIHZpbSBzaGlwcGVkIHdpdGggU3VuIFZpc3VhbCBXb3JrU2hvcCA2IChhbHNvIGNhbGxlZCBGb3J0ZQorRGV2ZWxvcGVyIDYpIGlzIHZpbSA1LjMuIFRoZSBmZWF0dXJlcyBpbiB0aGlzIHJlbGVhc2UgYXJlIG11Y2ggbW9yZSByZWxpYWJsZQordGhhbiB0aGUgdmltL2d2aW0gc2hpcHBlZCB3aXRoIFZpc3VhbCBXb3JrU2hvcC4gVldTIHVzZXJzIHdpc2hpbmcgdG8gdXNlIHZpbQorYXMgdGhlaXIgZWRpdG9yIHNob3VsZCBjb21waWxlIHRoZXNlIHNvdXJjZXMgYW5kIGluc3RhbGwgdGhlbSBpbiB0aGVpcgord29ya3Nob3AgcmVsZWFzZSB0cmVlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIENvbW1hbmRzCQkJCQkJKndvcmtzaG9wLWNvbW1hbmRzKgorCisJCQkJCQkqOndzKiAqOndzdmVyYioKKzp3c1t2ZXJiXSB2ZXJiCQkJUGFzcyB0aGUgdmVyYiB0byB0aGUgdmVyYiBleGVjdXRvcgorCitQYXNzIHRoZSB2ZXJiIHRvIGEgd29ya3Nob3AgZnVuY3Rpb24gd2hpY2ggZ2F0aGVycyBzb21lIGFyZ3VtZW50cyBhbmQKK3NlbmRzIHRoZSB2ZXJiIGFuZCBkYXRhIHRvIHdvcmtzaG9wIG92ZXIgYW4gSVBDIGNvbm5lY3Rpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gQ29tcGlsaW5nIHZpbS9ndmltIGZvciBXb3JrU2hvcAkJCSp3b3Jrc2hvcC1jb21waWxpbmcqCisKK0NvbXBpbGluZyB2aW0gd2l0aCBGRUFUX1NVTl9XT1JLU0hPUCB0dXJucyBvbiBhbGwgY29tcGlsZSB0aW1lIGZsYWdzIG5lY2Vzc2FyeQorZm9yIGJ1aWxkaW5nIGEgdmltIHRvIHdvcmsgd2l0aCBWaXN1YWwgV29ya1Nob3AuIFRoZSBmZWF0dXJlcyByZXF1aXJlZCBmb3IgVldTCitoYXZlIGJlZW4gYnVpbHQgYW5kIHRlc3RlZCB1c2luZyB0aGUgU3VuIGNvbXBpbGVycyBmcm9tIHRoZSBWV1MgcmVsZWFzZS4gVGhleQoraGF2ZSBub3QgYmVlbiBidWlsdCBvciB0ZXN0ZWQgdXNpbmcgR251IGNvbXBpbGVycy4gVGhpcyBkb2VzIG5vdCBtZWFuIHRoZQorZmVhdHVyZXMgd29uJ3QgYnVpbGQgYW5kIHJ1biBpZiBjb21waWxlZCB3aXRoIGdjYywganVzdCB0aGF0IG5vdGhpbmcgaXMKK2d1YXJhbnRlZWQgd2l0aCBnY2MhCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gQ29uZmlndXJpbmcgZ3ZpbSBmb3IgYSBXb3JrU2hvcCByZWxlYXNlIHRyZWUJCSp3b3Jrc2hvcC1jb25maWd1cmUqCisKK1RoZXJlIGFyZSBzZXZlcmFsIGFzc3VtcHRpb25zIHdoaWNoIG11c3QgYmUgbWV0IGluIG9yZGVyIHRvIGNvbXBpbGUgYSBndmltIGZvcgordXNlIHdpdGggU3VuIFZpc3VhbCBXb3JrU2hvcCA2LgorCisgICAgbyBZb3Ugc2hvdWxkIHVzZSB0aGUgY29tcGlsZXIgaW4gVldTIHJhdGhlciB0aGFuIGdjYy4gV2UgaGF2ZSBuZWl0aGVyCisgICAgICBidWlsdCBub3IgdGVzdGVkIHdpdGggZ2NjIGFuZCBjYW5ub3QgZ3VhcmFudGVlIGl0IHdpbGwgYnVpbGQgcHJvcGVybHkuCisKKyAgICBvIFlvdSBtdXN0IHN1cHBseSB5b3VyIG93biBYUE0gbGlicmFyeS4gU2VlIHx3b3Jrc2hvcC14cG18IGJlbG93IGZvcgorICAgICAgZGV0YWlscyBvbiBvYnRhaW5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhQTS4KKworICAgIG8gRWRpdCB0aGUgTWFrZWZpbGUgaW4gdGhlIHNyYyBkaXJlY3RvcnkgYW5kIHVuY29tbWVudCB0aGUgbGluZXMgZm9yIFN1bgorICAgICAgVmlzdWFsIFdvcmtTaG9wLiBZb3UgY2FuIGVhc2lseSBmaW5kIHRoZXNlIGJ5IHNlYXJjaGluZyBmb3IgdGhlIHN0cmluZworICAgICAgRkVBVF9TVU5fV09SS1NIT1AKKworICAgIG8gV2UgYWxzbyBzdWdnZXN0IHlvdSB1c2UgTW90aWYgZm9yIHlvdXIgZ3VpLiBUaGlzIHdpbGwgcHJvdmlkZSBndmltIHdpdGgKKyAgICAgIHRoZSBzYW1lIGxvb2stYW5kLWZlZWwgYXMgdGhlIHJlc3Qgb2YgU3VuIFZpc3VhbCBXb3JrU2hvcC4KKworVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGxpbmUgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHZpbSB0byBidWlsZCBmb3IgdXNlCit3aXRoIFN1biBWaXN1YWwgV29ya1Nob3A6CisKKyAgICAkIENDPWNjIGNvbmZpZ3VyZSAtLWVuYWJsZS13b3Jrc2hvcCAtLWVuYWJsZS1ndWk9bW90aWYgXAorCS1wcmVmaXg9PFZXUy1pbnN0YWxsLWRpcj4vY29udHJpYi9jb250cmliNi88dmltLXZlcnNpb24+CisKK1RoZSBWV1MtaW5zdGFsbC1kaXIgc2hvdWxkIGJlIHRoZSBiYXNlIGRpcmVjdG9yeSB3aGVyZSB5b3VyIFN1biBWaXN1YWwgV29ya1Nob3AKK3dhcyBpbnN0YWxsZWQuIEJ5IGRlZmF1bHQgdGhpcyBpcyAvb3B0L1NVTldzcHJvLiBJdCB3aWxsIG5vcm1hbGx5IHJlcXVpcmUKK3Jvb3QgcGVybWlzc2lvbnMgdG8gaW5zdGFsbCB0aGUgdmltIHJlbGVhc2UuIFlvdSB3aWxsIGFsc28gbmVlZCB0byBjaGFuZ2UgdGhlCitzeW1saW5rIDxWV1MtaW5zdGFsbC1kaXI+L2Jpbi9ndmltIHRvIHBvaW50IHRvIHRoZSB2aW0gaW4geW91ciBuZXdseSBpbnN0YWxsZWQKK2RpcmVjdG9yeS4gVGhlIDx2aW0tdmVyc2lvbj4gc2hvdWxkIGJlIGEgdW5pcXVlIHZlcnNpb24gc3RyaW5nLiBJIHVzZSAidmltIgorY29uY2F0ZW5hdGVkIHdpdGggdGhlIGVxdWl2YWxlbnQgb2YgdmVyc2lvbi5oJ3MgVklNX1ZFUlNJT05fU0hPUlQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gT2J0YWluaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgWFBNIGxpYnJhcnkJKndvcmtzaG9wLXhwbSoKKworVGhlIFhQTSBsaWJyYXJ5IGlzIHJlcXVpcmVkIHRvIHNob3cgaW1hZ2VzIHdpdGhpbiBWaW0gd2l0aCBNb3RpZiBvciBBdGhlbmEuCitXaXRob3V0IGl0IHRoZSB0b29sYmFyIGFuZCBzaWducyB3aWxsIGJlIGRpc2FibGVkLgorCitUaGUgWFBNIGxpYnJhcnkgaXMgcHJvdmlkZSBieSBBcm5hdWQgTGUgSG9ycyBvZiB0aGUgRnJlbmNoIE5hdGlvbmFsIEluc3RpdHV0ZQorZm9yIFJlc2VhcmNoIGluIENvbXB1dGVyIFNjaWVuY2UgYW5kIENvbnRyb2wuIEl0IGNhbiBiZSBkb3dubG9hZGVkIGZyb20KK2h0dHA6Ly9rb2FsYS5pbG9nLmZyL2Z0cC9wdWIveHBtLiBUaGUgY3VycmVudCByZWxlYXNlLCBhcyBvZiB0aGlzIHdyaXRpbmcsIGlzCit4cG0tMy40ay1zb2xhcmlzLnRneiwgd2hpY2ggaXMgYSBnemlwJ2VkIHRhciBmaWxlLiBJZiB5b3UgY3JlYXRlIHRoZSBkaXJlY3RvcnkKKy91c3IvbG9jYWwveHBtIGFuZCB1bnRhciB0aGUgZmlsZSB0aGVyZSB5b3UgY2FuIHVzZSB0aGUgdW5jb21tZW50ZWQgbGluZXMgaW4KK3RoZSBNYWtlZmlsZSB3aXRob3V0IGNoYW5naW5nIHRoZW0uIElmIHlvdSB1c2UgYW5vdGhlciB4cG0gZGlyZWN0b3J5IHlvdSB3aWxsCituZWVkIHRvIGNoYW5nZSB0aGUgWFBNX0RJUiBpbiBzcmMvTWFrZWZpbGUuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy94eGQuMSBiL3J1bnRpbWUvZG9jL3h4ZC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTA1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy94eGQuMQpAQCAtMCwwICsxLDM3MyBAQAorLlRIIFhYRCAxICJBdWd1c3QgMTk5NiIgIk1hbnVhbCBwYWdlIGZvciB4eGQiCisuXCIKKy5cIiAyMXN0IE1heSAxOTk2CisuXCIgTWFuIHBhZ2UgYXV0aG9yOgorLlwiICAgIFRvbnkgTnVnZW50IDx0b255QHNjdG51Z2VuLnBwcC5ndS5lZHUuYXU+IDxULk51Z2VudEBzY3QuZ3UuZWR1LmF1PgorLlwiICAgIENoYW5nZXMgYnkgQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKy5TSCBOQU1FCisuSSB4eGQKK1wtIG1ha2UgYSBoZXhkdW1wIG9yIGRvIHRoZSByZXZlcnNlLgorLlNIIFNZTk9QU0lTCisuQiB4eGQKK1wtaFtlbHBdCisuYnIKKy5CIHh4ZAorW29wdGlvbnNdIFtpbmZpbGUgW291dGZpbGVdXQorLmJyCisuQiB4eGQKK1wtcltldmVydF0gW29wdGlvbnNdIFtpbmZpbGUgW291dGZpbGVdXQorLlNIIERFU0NSSVBUSU9OCisuSSB4eGQKK2NyZWF0ZXMgYSBoZXggZHVtcCBvZiBhIGdpdmVuIGZpbGUgb3Igc3RhbmRhcmQgaW5wdXQuCitJdCBjYW4gYWxzbyBjb252ZXJ0IGEgaGV4IGR1bXAgYmFjayB0byBpdHMgb3JpZ2luYWwgYmluYXJ5IGZvcm0uCitMaWtlCisuQlIgdXVlbmNvZGUoMSkKK2FuZAorLkJSIHV1ZGVjb2RlKDEpCitpdCBhbGxvd3MgdGhlIHRyYW5zbWlzc2lvbiBvZiBiaW5hcnkgZGF0YSBpbiBhIGBtYWlsLXNhZmUnIEFTQ0lJIHJlcHJlc2VudGF0aW9uLAorYnV0IGhhcyB0aGUgYWR2YW50YWdlIG9mIGRlY29kaW5nIHRvIHN0YW5kYXJkIG91dHB1dC4KK01vcmVvdmVyLCBpdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGJpbmFyeSBmaWxlIHBhdGNoaW5nLgorLlNIIE9QVElPTlMKK0lmIG5vCisuSSBpbmZpbGUKK2lzIGdpdmVuLCBzdGFuZGFyZCBpbnB1dCBpcyByZWFkLgorSWYKKy5JIGluZmlsZQoraXMgc3BlY2lmaWVkIGFzIGEKKy5SQiBcYCBcLSAnCitjaGFyYWN0ZXIsIHRoZW4gaW5wdXQgaXMgdGFrZW4gZnJvbSBzdGFuZGFyZCBpbnB1dC4KK0lmIG5vCisuSSBvdXRmaWxlCitpcyBnaXZlbiAob3IgYQorLlJCIFxgIFwtICcKK2NoYXJhY3RlciBpcyBpbiBpdHMgcGxhY2UpLCByZXN1bHRzIGFyZSBzZW50IHRvIHN0YW5kYXJkIG91dHB1dC4KKy5QUAorTm90ZSB0aGF0IGEgImxhenkiIHBhcnNlciBpcyB1c2VkIHdoaWNoIGRvZXMgbm90IGNoZWNrIGZvciBtb3JlIHRoYW4gdGhlIGZpcnN0CitvcHRpb24gbGV0dGVyLCB1bmxlc3MgdGhlIG9wdGlvbiBpcyBmb2xsb3dlZCBieSBhIHBhcmFtZXRlci4KK1NwYWNlcyBiZXR3ZWVuIGEgc2luZ2xlIG9wdGlvbiBsZXR0ZXIgYW5kIGl0cyBwYXJhbWV0ZXIgYXJlIG9wdGlvbmFsLgorUGFyYW1ldGVycyB0byBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgaW4gZGVjaW1hbCwgaGV4YWRlY2ltYWwgb3Igb2N0YWwKK25vdGF0aW9uLgorVGh1cworLkJSIFwtYzggLAorLkJSICJcLWMgOCIgLAorLkIgXC1jIDAxMAorYW5kCisuQiBcLWNvbHMgOAorYXJlIGFsbCBlcXVpdmFsZW50LgorLlBQCisuVFAKKy5JUiBcLWEgIiB8ICIgXC1hdXRvc2tpcAordG9nZ2xlIGF1dG9za2lwOiBBIHNpbmdsZSAnKicgcmVwbGFjZXMgbnVsLWxpbmVzLiAgRGVmYXVsdCBvZmYuCisuVFAKKy5JUiBcLWIgIiB8ICIgXC1iaXRzCitTd2l0Y2ggdG8gYml0cyAoYmluYXJ5IGRpZ2l0cykgZHVtcCwgcmF0aGVyIHRoYW4gaGV4ZHVtcC4KK1RoaXMgb3B0aW9uIHdyaXRlcyBvY3RldHMgYXMgZWlnaHQgZGlnaXRzICIxInMgYW5kICIwInMgaW5zdGVhZCBvZiBhIG5vcm1hbAoraGV4YWNlY2ltYWwgZHVtcC4gRWFjaCBsaW5lIGlzIHByZWNlZGVkIGJ5IGEgbGluZSBudW1iZXIgaW4gaGV4YWRlY2ltYWwgYW5kCitmb2xsb3dlZCBieSBhbiBhc2NpaSAob3IgZWJjZGljKSByZXByZXNlbnRhdGlvbi4gVGhlIGNvbW1hbmQgbGluZSBzd2l0Y2hlcworXC1yLCBcLXAsIFwtaSBkbyBub3Qgd29yayB3aXRoIHRoaXMgbW9kZS4KKy5UUAorLklSICJcLWMgY29scyAiIHwgIiBcLWNvbHMgY29scyIKKy5JUiAiXC1jIGNvbHMgIiB8ICIgXC1jb2xzIGNvbHMiCitmb3JtYXQKKy5SSSA8IGNvbHMgPgorb2N0ZXRzIHBlciBsaW5lLiBEZWZhdWx0IDE2IChcLWk6IDEyLCBcLXBzOiAzMCwgXC1iOiA2KS4gTWF4IDI1Ni4KKy5UUAorLklSIFwtRSAiIHwgIiBcLUVCQ0RJQworQ2hhbmdlIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgaW4gdGhlIHJpZ2h0aGFuZCBjb2x1bW4gZnJvbSBBU0NJSSB0byBFQkNESUMuCitUaGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uIFRoZSBvcHRpb24gaXMKK21lYW5pbmdsZXNzIGluIGNvbWJpbmF0aW9ucyB3aXRoIFwtciwgXC1wIG9yIFwtaS4KKy5UUAorLklSICJcLWcgYnl0ZXMgIiB8ICIgXC1ncm91cHNpemUgYnl0ZXMiCitzZXBlcmF0ZSB0aGUgb3V0cHV0IG9mIGV2ZXJ5CisuUkkgPCBieXRlcyA+CitieXRlcyAodHdvIGhleCBjaGFyYWN0ZXJzIG9yIGVpZ2h0IGJpdC1kaWdpdHMgZWFjaCkgYnkgYSB3aGl0ZXNwYWNlLgorU3BlY2lmeQorLkkgXC1nIDAKK3RvIHN1cHByZXNzIGdyb3VwaW5nLgorLlJJIDwgQnl0ZXMgIj4gZGVmYXVsdHMgdG8gIiAyCitpbiBub3JtYWwgbW9kZSBhbmQgXGZJMVxmUCBpbiBiaXRzIG1vZGUuCitHcm91cGluZyBkb2VzIG5vdCBhcHBseSB0byBwb3N0c2NyaXB0IG9yIGluY2x1ZGUgc3R5bGUuCisuVFAKKy5JUiBcLWggIiB8ICIgXC1oZWxwCitwcmludCBhIHN1bW1hcnkgb2YgYXZhaWxhYmxlIGNvbW1hbmRzIGFuZCBleGl0LiAgTm8gaGV4IGR1bXBpbmcgaXMgcGVyZm9ybWVkLgorLlRQCisuSVIgXC1pICIgfCAiIFwtaW5jbHVkZQorb3V0cHV0IGluIEMgaW5jbHVkZSBmaWxlIHN0eWxlLiBBIGNvbXBsZXRlIHN0YXRpYyBhcnJheSBkZWZpbml0aW9uIGlzIHdyaXR0ZW4KKyhuYW1lZCBhZnRlciB0aGUgaW5wdXQgZmlsZSksIHVubGVzcyB4eGQgcmVhZHMgZnJvbSBzdGRpbi4KKy5UUAorLklSICJcLWwgbGVuICIgfCAiIFwtbGVuIGxlbiIKK3N0b3AgYWZ0ZXIgd3JpdGluZworLlJJICA8IGxlbiA+CitvY3RldHMuCisuVFAKKy5JUiBcLXAgIiB8ICIgXC1wcyAiIHwgIiBcLXBvc3RzY3JpcHQgIiB8ICIgXC1wbGFpbgorb3V0cHV0IGluIHBvc3RzY3JpcHQgY29udGludW91cyBoZXhkdW1wIHN0eWxlLiBBbHNvIGtub3duIGFzIHBsYWluIGhleGR1bXAKK3N0eWxlLgorLlRQCisuSVIgXC1yICIgfCAiIFwtcmV2ZXJ0CityZXZlcnNlIG9wZXJhdGlvbjogY29udmVydCAob3IgcGF0Y2gpIGhleGR1bXAgaW50byBiaW5hcnkuCitJZiBub3Qgd3JpdGluZyB0byBzdGRvdXQsIHh4ZCB3cml0ZXMgaW50byBpdHMgb3V0cHV0IGZpbGUgd2l0aG91dCB0cnVuY2F0aW5nCitpdC4gVXNlIHRoZSBjb21iaW5hdGlvbgorLkkgXC1yIFwtcAordG8gcmVhZCBwbGFpbiBoZXhhZGVjaW1hbCBkdW1wcyB3aXRob3V0IGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIGFuZCB3aXRob3V0IGEKK3BhcnRpY3VsYXIgY29sdW1uIGxheW91dC4gQWRkaXRpb25hbCBXaGl0ZXNwYWNlIGFuZCBsaW5lLWJyZWFrcyBhcmUgYWxsb3dlZAorYW55d2hlcmUuCisuVFAKKy5JIFwtc2VlayBvZmZzZXQKK1doZW4gdXNlZCBhZnRlcgorLkkgXC1yCis6IHJldmVydCB3aXRoCisuUkkgPCBvZmZzZXQgPgorYWRkZWQgdG8gZmlsZSBwb3NpdGlvbnMgZm91bmQgaW4gaGV4ZHVtcC4KKy5UUAorLkkgXC1zIFtcK11bXC1dc2Vlaworc3RhcnQgYXQKKy5SSSA8IHNlZWsgPgorYnl0ZXMgYWJzLiAob3IgcmVsLikgaW5maWxlIG9mZnNldC4KK1xmSVwrIFxmUmluZGljYXRlcyB0aGF0IHRoZSBzZWVrIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHN0ZGluIGZpbGUgcG9zaXRpb24KKyhtZWFuaW5nbGVzcyB3aGVuIG5vdCByZWFkaW5nIGZyb20gc3RkaW4pLiAgXGZJXC0gXGZSaW5kaWNhdGVzIHRoYXQgdGhlIHNlZWsKK3Nob3VsZCBiZSB0aGF0IG1hbnkgY2hhcmFjdGVycyBmcm9tIHRoZSBlbmQgb2YgdGhlIGlucHV0IChvciBpZiBjb21iaW5lZCB3aXRoCitcZkkgXCsgXGZSOiBiZWZvcmUgdGhlIGN1cnJlbnQgc3RkaW4gZmlsZSBwb3NpdGlvbikuCitXaXRob3V0IFwtcyBvcHRpb24sIHh4ZCBzdGFydHMgYXQgdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbi4KKy5UUAorLkkgXC11Cit1c2UgdXBwZXIgY2FzZSBoZXggbGV0dGVycy4gRGVmYXVsdCBpcyBsb3dlciBjYXNlLgorLlRQCisuSVIgXC12ICIgfCAiIFwtdmVyc2lvbgorc2hvdyB2ZXJzaW9uIHN0cmluZy4KKy5TSCBDQVZFQVRTCisuUFAKKy5JIHh4ZCBcLXIKK2hhcyBzb21lIGJ1aWx0aW4gbWFnaWMgd2hpbGUgZXZhbHVhdGluZyBsaW5lIG51bWJlciBpbmZvcm1hdGlvbi4KK0lmIHRoZSBvdXB1dCBmaWxlIGlzIHNlZWthYmxlLCB0aGVuIHRoZSBsaW5lbnVtYmVycyBhdCB0aGUgc3RhcnQgb2YgZWFjaAoraGV4ZHVtcCBsaW5lIG1heSBiZSBvdXQgb2Ygb3JkZXIsIGxpbmVzIG1heSBiZSBtaXNzaW5nLCBvciBvdmVybGFwcGluZy4gSW4KK3RoZXNlIGNhc2VzIHh4ZCB3aWxsIGxzZWVrKDIpIHRvIHRoZSBuZXh0IHBvc2l0aW9uLiBJZiB0aGUgb3V0cHV0IGZpbGUgaXMgbm90CitzZWVrYWJsZSwgb25seSBnYXBzIGFyZSBhbGxvd2VkLCB3aGljaCB3aWxsIGJlIGZpbGxlZCBieSBudWxsLWJ5dGVzLgorLlBQCisuSSB4eGQgXC1yCituZXZlciBnZW5lcmF0ZXMgcGFyc2UgZXJyb3JzLiBHYXJiYWdlIGlzIHNpbGVudGx5IHNraXBwZWQuCisuUFAKK1doZW4gZWRpdGluZyBoZXhkdW1wcywgcGxlYXNlIG5vdGUgdGhhdAorLkkgeHhkIFwtcgorc2tpcHMgZXZlcnl0aGluZyBvbiB0aGUgaW5wdXQgbGluZSBhZnRlciByZWFkaW5nIGVub3VnaCBjb2x1bW5zIG9mIGhleGFkZWNpbWFsCitkYXRhIChzZWUgb3B0aW9uIFwtYykuIFRoaXMgYWxzbyBtZWFucywgdGhhdCBjaGFuZ2VzIHRvIHRoZSBwcmludGFibGUgYXNjaWkgKG9yCitlYmNkaWMpIGNvbHVtbnMgYXJlIGFsd2F5cyBpZ25vcmVkLiBSZXZlcnRpbmcgYSBwbGFpbiAob3IgcG9zdHNjcmlwdCkgc3R5bGUKK2hleGR1bXAgd2l0aCB4eGQgXC1yIFwtcCBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGNvbHVtbnMuIEhlcmUgYW4gdGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgcGFpciBvZiBoZXgtZGlnaXRzIGlzIGludGVycHJldGVkLgorLlBQCitOb3RlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKy5icgorXGZJJSB4eGQgXC1pIGZpbGVcZlIKKy5icgorYW5kCisuYnIKK1xmSSUgeHhkIFwtaSBcPCBmaWxlXGZSCisuUFAKKy5JIHh4ZCBcLXMgXCtzZWVrCittYXkgYmUgZGlmZmVyZW50IGZyb20KKy5JIHh4ZCBcLXMgc2VlaworLCBhcyBsc2VlaygyKSBpcyB1c2VkIHRvICJyZXdpbmQiIGlucHV0LiAgQSAnKycKK21ha2VzIGEgZGlmZmVyZW5jZSBpZiB0aGUgaW5wdXQgc291cmNlIGlzIHN0ZGluLCBhbmQgaWYgc3RkaW4ncyBmaWxlIHBvc2l0aW9uCitpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIGJ5IHRoZSB0aW1lIHh4ZCBpcyBzdGFydGVkIGFuZCBnaXZlbiBpdHMgaW5wdXQuCitUaGUgZm9sbG93aW5nIGV4YW1wbGVzIG1heSBoZWxwIHRvIGNsYXJpZnkgKG9yIGZ1cnRoZXIgY29uZnVzZSEpLi4uCisuUFAKK1Jld2luZCBzdGRpbiBiZWZvcmUgcmVhZGluZzsgbmVlZGVkIGJlY2F1c2UgdGhlIGBjYXQnIGhhcyBhbHJlYWR5IHJlYWQgdG8gdGhlCitlbmQgb2Ygc3RkaW4uCisuYnIKK1xmSSUgc2ggXC1jICdjYXQgPiBwbGFpbl9jb3B5OyB4eGQgXC1zIDAgPiBoZXhfY29weScgPCBmaWxlCisuUFAKK0hleGR1bXAgZnJvbSBmaWxlIHBvc2l0aW9uIDB4NDgwICg9MTAyNCsxMjgpIG9ud2FyZHMuCitUaGUgYCsnIHNpZ24gbWVhbnMgInJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIiwgdGh1cyB0aGUgYDEyOCcgYWRkcyB0bwordGhlIDFrIHdoZXJlIGRkIGxlZnQgb2ZmLgorLmJyCitcZkklIHNoIFwtYyAnZGQgb2Y9cGxhaW5fc25pcHBldCBicz0xayBjb3VudD0xOyB4eGQgXC1zICsxMjggPiBoZXhfc25pcHBldCcgPCBmaWxlCisuUFAKK0hleGR1bXAgZnJvbSBmaWxlIHBvc2l0aW9uIDB4MTAwICggPSAxMDI0LTc2OCkgb24uCisuYnIKK1xmSSUgc2ggXC1jICdkZCBvZj1wbGFpbl9zbmlwcGV0IGJzPTFrIGNvdW50PTE7IHh4ZCBcLXMgKy03NjggPiBoZXhfc25pcHBldCcgPCBmaWxlCisuUFAKK0hvd2V2ZXIsIHRoaXMgaXMgYSByYXJlIHNpdHVhdGlvbiBhbmQgdGhlIHVzZSBvZiBgKycgaXMgcmFyZWx5IG5lZWRlZC4KK3RoZSBhdXRob3IgcHJlZmVycyB0byBtb25pdG9yIHRoZSBlZmZlY3Qgb2YgeHhkIHdpdGggc3RyYWNlKDEpIG9yIHRydXNzKDEpLCB3aGVuZXZlciBcLXMgaXMgdXNlZC4KKy5TSCBFWEFNUExFUworLlBQCisuYnIKK1ByaW50IGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCB0aHJlZSBsaW5lcyAoaGV4IDB4MzAgYnl0ZXMpIG9mCisuQiBmaWxlCitcLgorLmJyCitcZkklIHh4ZCBcLXMgMHgzMCBmaWxlCisuUFAKKy5icgorUHJpbnQgMyBsaW5lcyAoaGV4IDB4MzAgYnl0ZXMpIGZyb20gdGhlIGVuZCBvZgorLkIgZmlsZQorXC4KKy5icgorXGZJJSB4eGQgXC1zIFwtMHgzMCBmaWxlCisuUFAKKy5icgorUHJpbnQgMTIwIGJ5dGVzIGFzIGNvbnRpbnVvdXMgaGV4ZHVtcCB3aXRoIDQwIG9jdGV0cyBwZXIgbGluZS4KKy5icgorXGZJJSB4eGQgXC1sIDEyMCBcLXBzIFwtYyAyMCB4eGQuMVxmUgorLmJyCisyZTU0NDgyMDU4NTg0NDIwMzEyMDIyNGQ2MTZlNzU2MTZjMjA3MDYxCisuYnIKKzY3NjUyMDY2NmY3MjIwNzg3ODY0MjIwYTJlNWMyMjBhMmU1YzIyMjAKKy5icgorMzIzMTczNzQyMDRkNjE3OTIwMzEzOTM5MzYwYTJlNWMyMjIwNGQ2MQorLmJyCis2ZTIwNzA2MTY3NjUyMDYxNzU3NDY4NmY3MjNhMGEyZTVjMjIyMDIwCisuYnIKKzIwMjA1NDZmNmU3OTIwNGU3NTY3NjU2ZTc0MjAzYzc0NmY2ZTc5NDAKKy5icgorNzM2Mzc0NmU3NTY3NjU2ZTJlNzA3MDcwMmU2Nzc1MmU2NTY0NzUyZQorLmJyCisKKy5icgorSGV4ZHVtcCB0aGUgZmlyc3QgMTIwIGJ5dGVzIG9mIHRoaXMgbWFuIHBhZ2Ugd2l0aCAxMiBvY3RldHMgcGVyIGxpbmUuCisuYnIKK1xmSSUgeHhkIFwtbCAxMjAgXC1jIDEyIHh4ZC4xXGZSCisuYnIKKzAwMDAwMDA6IDJlNTQgNDgyMCA1ODU4IDQ0MjAgMzEyMCAyMjRkICAuVEggWFhEIDEgIk0KKy5icgorMDAwMDAwYzogNjE2ZSA3NTYxIDZjMjAgNzA2MSA2NzY1IDIwNjYgIGFudWFsIHBhZ2UgZgorLmJyCiswMDAwMDE4OiA2ZjcyIDIwNzggNzg2NCAyMjBhIDJlNWMgMjIwYSAgb3IgeHhkIi4uXFwiLgorLmJyCiswMDAwMDI0OiAyZTVjIDIyMjAgMzIzMSA3Mzc0IDIwNGQgNjE3OSAgLlxcIiAyMXN0IE1heQorLmJyCiswMDAwMDMwOiAyMDMxIDM5MzkgMzYwYSAyZTVjIDIyMjAgNGQ2MSAgIDE5OTYuLlxcIiBNYQorLmJyCiswMDAwMDNjOiA2ZTIwIDcwNjEgNjc2NSAyMDYxIDc1NzQgNjg2ZiAgbiBwYWdlIGF1dGhvCisuYnIKKzAwMDAwNDg6IDcyM2EgMGEyZSA1YzIyIDIwMjAgMjAyMCA1NDZmICByOi4uXFwiICAgIFRvCisuYnIKKzAwMDAwNTQ6IDZlNzkgMjA0ZSA3NTY3IDY1NmUgNzQyMCAzYzc0ICBueSBOdWdlbnQgPHQKKy5icgorMDAwMDA2MDogNmY2ZSA3OTQwIDczNjMgNzQ2ZSA3NTY3IDY1NmUgIG9ueUBzY3RudWdlbgorLmJyCiswMDAwMDZjOiAyZTcwIDcwNzAgMmU2NyA3NTJlIDY1NjQgNzUyZSAgLnBwcC5ndS5lZHUuCisuUFAKKy5icgorRGlzcGxheSBqdXN0IHRoZSBkYXRlIGZyb20gdGhlIGZpbGUgeHhkLjEKKy5icgorXGZJJSB4eGQgXC1zIDB4MjggXC1sIDEyIFwtYyAxMiB4eGQuMVxmUgorLmJyCiswMDAwMDI4OiAzMjMxIDczNzQgMjA0ZCA2MTc5IDIwMzEgMzkzOSAgMjFzdCBNYXkgMTk5CisuUFAKKy5icgorQ29weQorLkIgaW5wdXRfZmlsZQordG8KKy5CIG91dHB1dF9maWxlCithbmQgcHJlcGVuZCAxMDAgYnl0ZXMgb2YgdmFsdWUgMHgwMC4KKy5icgorXGZJJSB4eGQgaW5wdXRfZmlsZSB8IHh4ZCBcLXIgXC1zIDEwMCBcPiBvdXRwdXRfZmlsZVxmUgorLmJyCisKKy5icgorUGF0Y2ggdGhlIGRhdGUgaW4gdGhlIGZpbGUgeHhkLjEKKy5icgorXGZJJSBlY2hvICcwMDAwMDI5OiAzNTc0IDY4JyB8IHh4ZCBcLXIgXC0geHhkLjFcZlIKKy5icgorXGZJJSB4eGQgXC1zIDB4MjggXC1sIDEyIFwtYyAxMiB4eGQuMVxmUgorLmJyCiswMDAwMDI4OiAzMjM1IDc0NjggMjA0ZCA2MTc5IDIwMzEgMzkzOSAgMjV0aCBNYXkgMTk5CisuUFAKKy5icgorQ3JlYXRlIGEgNjU1MzcgYnl0ZSBmaWxlIHdpdGggYWxsIGJ5dGVzIDB4MDAsCitleGNlcHQgZm9yIHRoZSBsYXN0IG9uZSB3aGljaCBpcyAnQScgKGhleCAweDQxKS4KKy5icgorXGZJJSBlY2hvICcwMTAwMDA6IDQxJyB8IHh4ZCBcLXIgXD4gZmlsZVxmUgorLlBQCisuYnIKK0hleGR1bXAgdGhpcyBmaWxlIHdpdGggYXV0b3NraXAuCisuYnIKK1xmSSUgeHhkIFwtYSBcLWMgMTIgZmlsZVxmUgorLmJyCiswMDAwMDAwOiAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAgLi4uLi4uLi4uLi4uCisuYnIKKyoKKy5icgorMDAwZmZmYzogMDAwMCAwMDAwIDQwICAgICAgICAgICAgICAgICAgIC4uLi5BCisuUFAKK0NyZWF0ZSBhIDEgYnl0ZSBmaWxlIGNvbnRhaW5pbmcgYSBzaW5nbGUgJ0EnIGNoYXJhY3Rlci4KK1RoZSBudW1iZXIgYWZ0ZXIgJ1wtciBcLXMnIGFkZHMgdG8gdGhlIGxpbmVudW1iZXJzIGZvdW5kIGluIHRoZSBmaWxlOworaW4gZWZmZWN0LCB0aGUgbGVhZGluZyBieXRlcyBhcmUgc3VwcHJlc3NlZC4KKy5icgorXGZJJSBlY2hvICcwMTAwMDA6IDQxJyB8IHh4ZCBcLXIgXC1zIFwtMHgxMDAwMCBcPiBmaWxlXGZSCisuUFAKK1VzZSB4eGQgYXMgYSBmaWx0ZXIgd2l0aGluIGFuIGVkaXRvciBzdWNoIGFzCisuQiB2aW0oMSkKK3RvIGhleGR1bXAgYSByZWdpb24gbWFya2VkIGJldHdlZW4gYGEnIGFuZCBgeicuCisuYnIKK1xmSTonYSwneiF4eGRcZlIKKy5QUAorVXNlIHh4ZCBhcyBhIGZpbHRlciB3aXRoaW4gYW4gZWRpdG9yIHN1Y2ggYXMKKy5CIHZpbSgxKQordG8gcmVjb3ZlciBhIGJpbmFyeSBoZXhkdW1wIG1hcmtlZCBiZXR3ZWVuIGBhJyBhbmQgYHonLgorLmJyCitcZkk6J2EsJ3oheHhkIFwtclxmUgorLlBQCitVc2UgeHhkIGFzIGEgZmlsdGVyIHdpdGhpbiBhbiBlZGl0b3Igc3VjaCBhcworLkIgdmltKDEpCit0byByZWNvdmVyIG9uZSBsaW5lIG9mIGEgaGV4ZHVtcC4gIE1vdmUgdGhlIGN1cnNvciBvdmVyIHRoZSBsaW5lIGFuZCB0eXBlOgorLmJyCitcZkkhIXh4ZCBcLXJcZlIKKy5QUAorUmVhZCBzaW5nbGUgY2hhcmFjdGVycyBmcm9tIGEgc2VyaWFsIGxpbmUKKy5icgorXGZJJSB4eGQgXC1jMSA8IC9kZXYvdGVybS9iICZcZlIKKy5icgorXGZJJSBzdHR5IDwgL2Rldi90ZXJtL2IgXC1lY2hvIFwtb3Bvc3QgXC1pc2lnIFwtaWNhbm9uIG1pbiAxXGZSCisuYnIKK1xmSSUgZWNobyBcLW4gZm9vID4gL2Rldi90ZXJtL2JcZlIKKy5QUAorLlNIICJSRVRVUk4gVkFMVUVTIgorVGhlIGZvbGxvd2luZyBlcnJvciB2YWx1ZXMgYXJlIHJldHVybmVkOgorLlRQCiswCitubyBlcnJvcnMgZW5jb3VudGVyZWQuCisuVFAKK1wtMQorb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgKAorLkkgeHhkIFwtciBcLWkKK3N0aWxsIGltcG9zc2libGUpLgorLlRQCisxCitlcnJvciB3aGlsZSBwYXJzaW5nIG9wdGlvbnMuCisuVFAKKzIKK3Byb2JsZW1zIHdpdGggaW5wdXQgZmlsZS4KKy5UUAorMworcHJvYmxlbXMgd2l0aCBvdXRwdXQgZmlsZS4KKy5UUAorNCw1CitkZXNpcmVkIHNlZWsgcG9zaXRpb24gaXMgdW5yZWFjaGFibGUuCisuU0ggIlNFRSBBTFNPIgordXVlbmNvZGUoMSksIHV1ZGVjb2RlKDEpLCBwYXRjaCgxKQorLmJyCisuU0ggV0FSTklOR1MKK1RoZSB0b29scyB3ZWlyZG5lc3MgbWF0Y2hlcyBpdHMgY3JlYXRvcnMgYnJhaW4uCitVc2UgZW50aXJlbHkgYXQgeW91ciBvd24gcmlzay4gQ29weSBmaWxlcy4gVHJhY2UgaXQuIEJlY29tZSBhIHdpemFyZC4KKy5icgorLlNIIFZFUlNJT04KK1RoaXMgbWFudWFsIHBhZ2UgZG9jdW1lbnRzIHh4ZCB2ZXJzaW9uIDEuNworLlNIIEFVVEhPUgorLmJyCisoYykgMTk5MC0xOTk3IGJ5IEp1ZXJnZW4gV2VpZ2VydAorLmJyCis8am53ZWlnZXJAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisuTFAKK0Rpc3RyaWJ1dGUgZnJlZWx5IGFuZCBjcmVkaXQgbWUsCisuYnIKK21ha2UgbW9uZXkgYW5kIHNoYXJlIHdpdGggbWUsCisuYnIKK2xvc2UgbW9uZXkgYW5kIGRvbid0IGFzayBtZS4KKy5QUAorTWFudWFsIHBhZ2Ugc3RhcnRlZCBieSBUb255IE51Z2VudAorLmJyCis8dG9ueUBzY3RudWdlbi5wcHAuZ3UuZWR1LmF1PiA8VC5OdWdlbnRAc2N0Lmd1LmVkdS5hdT4KKy5icgorU21hbGwgY2hhbmdlcyBieSBCcmFtIE1vb2xlbmFhci4KK0VkaXRlZCBieSBKdWVyZ2VuIFdlaWdlcnQuCisuUFAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3h4ZC5tYW4gYi9ydW50aW1lL2RvYy94eGQubWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YjIyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy94eGQubWFuCkBAIC0wLDAgKzEsMzk2IEBACisKKworCitYWEQoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhYRCgxKQorCisKK05BTUUKKyAgICAgICB4eGQgLSBtYWtlIGEgaGV4ZHVtcCBvciBkbyB0aGUgcmV2ZXJzZS4KKworU1lOT1BTSVMKKyAgICAgICB4eGQgLWhbZWxwXQorICAgICAgIHh4ZCBbb3B0aW9uc10gW2luZmlsZSBbb3V0ZmlsZV1dCisgICAgICAgeHhkIC1yW2V2ZXJ0XSBbb3B0aW9uc10gW2luZmlsZSBbb3V0ZmlsZV1dCisKK0RFU0NSSVBUSU9OCisgICAgICAgeHhkICBjcmVhdGVzIGEgaGV4IGR1bXAgb2YgYSBnaXZlbiBmaWxlIG9yIHN0YW5kYXJkIGlucHV0LgorICAgICAgIEl0IGNhbiBhbHNvIGNvbnZlcnQgYSBoZXggZHVtcCBiYWNrIHRvIGl0cyBvcmlnaW5hbCBiaW5hcnkKKyAgICAgICBmb3JtLiAgIExpa2UgIHV1ZW5jb2RlKDEpICBhbmQgIHV1ZGVjb2RlKDEpICBpdCBhbGxvd3MgdGhlCisgICAgICAgdHJhbnNtaXNzaW9uIG9mIGJpbmFyeSBkYXRhIGluIGEgYG1haWwtc2FmZScgQVNDSUkgIHJlcHJlLQorICAgICAgIHNlbnRhdGlvbiwgIGJ1dCAgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgZGVjb2RpbmcgdG8gc3RhbmRhcmQKKyAgICAgICBvdXRwdXQuICBNb3Jlb3ZlciwgaXQgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSAgYmluYXJ5ICBmaWxlCisgICAgICAgcGF0Y2hpbmcuCisKK09QVElPTlMKKyAgICAgICBJZiAgbm8gaW5maWxlIGlzIGdpdmVuLCBzdGFuZGFyZCBpbnB1dCBpcyByZWFkLiAgSWYgaW5maWxlCisgICAgICAgaXMgc3BlY2lmaWVkIGFzIGEgYC0nIGNoYXJhY3RlciwgdGhlbiBpbnB1dCBpcyB0YWtlbiAgZnJvbQorICAgICAgIHN0YW5kYXJkICBpbnB1dC4gIElmIG5vIG91dGZpbGUgaXMgZ2l2ZW4gKG9yIGEgYC0nIGNoYXJhYy0KKyAgICAgICB0ZXIgaXMgaW4gaXRzIHBsYWNlKSwgcmVzdWx0cyBhcmUgc2VudCB0byBzdGFuZGFyZCBvdXRwdXQuCisKKyAgICAgICBOb3RlIHRoYXQgYSAibGF6eSIgcGFyc2VyIGlzIHVzZWQgd2hpY2ggZG9lcyBub3QgY2hlY2sgZm9yCisgICAgICAgbW9yZSB0aGFuIHRoZSBmaXJzdCBvcHRpb24gbGV0dGVyLCB1bmxlc3MgIHRoZSAgb3B0aW9uICBpcworICAgICAgIGZvbGxvd2VkICBieSAgYSBwYXJhbWV0ZXIuICBTcGFjZXMgYmV0d2VlbiBhIHNpbmdsZSBvcHRpb24KKyAgICAgICBsZXR0ZXIgYW5kIGl0cyAgcGFyYW1ldGVyICBhcmUgIG9wdGlvbmFsLiAgIFBhcmFtZXRlcnMgIHRvCisgICAgICAgb3B0aW9ucyAgY2FuIGJlIHNwZWNpZmllZCBpbiBkZWNpbWFsLCBoZXhhZGVjaW1hbCBvciBvY3RhbAorICAgICAgIG5vdGF0aW9uLiAgVGh1cyAtYzgsIC1jIDgsIC1jIDAxMCAgYW5kICAtY29scyAgOCAgYXJlICBhbGwKKyAgICAgICBlcXVpdmFsZW50LgorCisKKyAgICAgICAtYSB8IC1hdXRvc2tpcAorICAgICAgICAgICAgICB0b2dnbGUgIGF1dG9za2lwOiAgQSBzaW5nbGUgJyonIHJlcGxhY2VzIG51bC1saW5lcy4KKyAgICAgICAgICAgICAgRGVmYXVsdCBvZmYuCisKKyAgICAgICAtYiB8IC1iaXRzCisgICAgICAgICAgICAgIFN3aXRjaCB0byBiaXRzIChiaW5hcnkgZGlnaXRzKSAgZHVtcCwgIHJhdGhlciAgdGhhbgorICAgICAgICAgICAgICBoZXhkdW1wLiAgVGhpcyBvcHRpb24gd3JpdGVzIG9jdGV0cyBhcyBlaWdodCBkaWdpdHMKKyAgICAgICAgICAgICAgIjEicyBhbmQgIjAicyBpbnN0ZWFkIG9mIGEgbm9ybWFsIGhleGFjZWNpbWFsIGR1bXAuCisgICAgICAgICAgICAgIEVhY2ggbGluZSBpcyBwcmVjZWRlZCBieSBhIGxpbmUgbnVtYmVyIGluIGhleGFkZWNpLQorICAgICAgICAgICAgICBtYWwgYW5kIGZvbGxvd2VkIGJ5IGFuIGFzY2lpIChvciBlYmNkaWMpICByZXByZXNlbi0KKyAgICAgICAgICAgICAgdGF0aW9uLiBUaGUgY29tbWFuZCBsaW5lIHN3aXRjaGVzIC1yLCAtcCwgLWkgZG8gbm90CisgICAgICAgICAgICAgIHdvcmsgd2l0aCB0aGlzIG1vZGUuCisKKyAgICAgICAtYyBjb2xzIHwgLWNvbHMgY29scworICAgICAgICAgICAgICAtYyBjb2xzIHwgLWNvbHMgY29scyBmb3JtYXQgPGNvbHM+IG9jdGV0cyBwZXIgbGluZS4KKyAgICAgICAgICAgICAgRGVmYXVsdCAxNiAoLWk6IDEyLCAtcHM6IDMwLCAtYjogNikuIE1heCAyNTYuCisKKyAgICAgICAtRSB8IC1FQkNESUMKKyAgICAgICAgICAgICAgQ2hhbmdlIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgaW4gdGhlIHJpZ2h0aGFuZCBjb2wtCisgICAgICAgICAgICAgIHVtbiBmcm9tIEFTQ0lJIHRvIEVCQ0RJQy4gIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZQorICAgICAgICAgICAgICBoZXhhZGVjaW1hbCAgcmVwcmVzZW50YXRpb24uIFRoZSBvcHRpb24gaXMgbWVhbmluZy0KKyAgICAgICAgICAgICAgbGVzcyBpbiBjb21iaW5hdGlvbnMgd2l0aCAtciwgLXAgb3IgLWkuCisKKworCitNYW51YWwgcGFnZSBmb3IgeHhkICAgICAgICBBdWd1c3QgMTk5NiAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisKKworCisKK1hYRCgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFhEKDEpCisKKworICAgICAgIC1nIGJ5dGVzIHwgLWdyb3Vwc2l6ZSBieXRlcworICAgICAgICAgICAgICBzZXBlcmF0ZSB0aGUgb3V0cHV0IG9mIGV2ZXJ5IDxieXRlcz4gYnl0ZXMgKHR3byBoZXgKKyAgICAgICAgICAgICAgY2hhcmFjdGVycyAgb3IgIGVpZ2h0IGJpdC1kaWdpdHMgZWFjaCkgYnkgYSB3aGl0ZXMtCisgICAgICAgICAgICAgIHBhY2UuICBTcGVjaWZ5IC1nIDAgdG8gc3VwcHJlc3MgZ3JvdXBpbmcuICAgPEJ5dGVzPgorICAgICAgICAgICAgICBkZWZhdWx0cyAgdG8gIDIgIGluIG5vcm1hbCBtb2RlIGFuZCAxIGluIGJpdHMgbW9kZS4KKyAgICAgICAgICAgICAgR3JvdXBpbmcgZG9lcyBub3QgYXBwbHkgdG8gIHBvc3RzY3JpcHQgIG9yICBpbmNsdWRlCisgICAgICAgICAgICAgIHN0eWxlLgorCisgICAgICAgLWggfCAtaGVscAorICAgICAgICAgICAgICBwcmludCBhIHN1bW1hcnkgb2YgYXZhaWxhYmxlIGNvbW1hbmRzIGFuZCBleGl0LiAgTm8KKyAgICAgICAgICAgICAgaGV4IGR1bXBpbmcgaXMgcGVyZm9ybWVkLgorCisgICAgICAgLWkgfCAtaW5jbHVkZQorICAgICAgICAgICAgICBvdXRwdXQgaW4gQyBpbmNsdWRlIGZpbGUgc3R5bGUuIEEgIGNvbXBsZXRlICBzdGF0aWMKKyAgICAgICAgICAgICAgYXJyYXkgIGRlZmluaXRpb24gaXMgd3JpdHRlbiAobmFtZWQgYWZ0ZXIgdGhlIGlucHV0CisgICAgICAgICAgICAgIGZpbGUpLCB1bmxlc3MgeHhkIHJlYWRzIGZyb20gc3RkaW4uCisKKyAgICAgICAtbCBsZW4gfCAtbGVuIGxlbgorICAgICAgICAgICAgICBzdG9wIGFmdGVyIHdyaXRpbmcgPGxlbj4gb2N0ZXRzLgorCisgICAgICAgLXAgfCAtcHMgfCAtcG9zdHNjcmlwdCB8IC1wbGFpbgorICAgICAgICAgICAgICBvdXRwdXQgaW4gcG9zdHNjcmlwdCBjb250aW51b3VzIGhleGR1bXAgc3R5bGUuIEFsc28KKyAgICAgICAgICAgICAga25vd24gYXMgcGxhaW4gaGV4ZHVtcCBzdHlsZS4KKworICAgICAgIC1yIHwgLXJldmVydAorICAgICAgICAgICAgICByZXZlcnNlICBvcGVyYXRpb246IGNvbnZlcnQgKG9yIHBhdGNoKSBoZXhkdW1wIGludG8KKyAgICAgICAgICAgICAgYmluYXJ5LiAgSWYgbm90IHdyaXRpbmcgdG8gc3Rkb3V0LCB4eGQgd3JpdGVzICBpbnRvCisgICAgICAgICAgICAgIGl0cyBvdXRwdXQgZmlsZSB3aXRob3V0IHRydW5jYXRpbmcgaXQuIFVzZSB0aGUgY29tLQorICAgICAgICAgICAgICBiaW5hdGlvbiAtciAtcCAgdG8gIHJlYWQgIHBsYWluICBoZXhhZGVjaW1hbCAgZHVtcHMKKyAgICAgICAgICAgICAgd2l0aG91dCAgbGluZSBudW1iZXIgaW5mb3JtYXRpb24gYW5kIHdpdGhvdXQgYSBwYXItCisgICAgICAgICAgICAgIHRpY3VsYXIgY29sdW1uIGxheW91dC4gIEFkZGl0aW9uYWwgIFdoaXRlc3BhY2UgIGFuZAorICAgICAgICAgICAgICBsaW5lLWJyZWFrcyBhcmUgYWxsb3dlZCBhbnl3aGVyZS4KKworICAgICAgIC1zZWVrIG9mZnNldAorICAgICAgICAgICAgICBXaGVuICB1c2VkIGFmdGVyIC1yIDogcmV2ZXJ0IHdpdGggPG9mZnNldD4gYWRkZWQgdG8KKyAgICAgICAgICAgICAgZmlsZSBwb3NpdGlvbnMgZm91bmQgaW4gaGV4ZHVtcC4KKworICAgICAgIC1zIFsrXVstXXNlZWsKKyAgICAgICAgICAgICAgc3RhcnQgYXQgPHNlZWs+IGJ5dGVzIGFicy4gKG9yIHJlbC4pIGluZmlsZSBvZmZzZXQuCisgICAgICAgICAgICAgICsgIGluZGljYXRlcyAgdGhhdCB0aGUgc2VlayBpcyByZWxhdGl2ZSB0byB0aGUgY3VyLQorICAgICAgICAgICAgICByZW50IHN0ZGluICBmaWxlICBwb3NpdGlvbiAgKG1lYW5pbmdsZXNzICB3aGVuICBub3QKKyAgICAgICAgICAgICAgcmVhZGluZyAgZnJvbSAgc3RkaW4pLiAgIC0gIGluZGljYXRlcyB0aGF0IHRoZSBzZWVrCisgICAgICAgICAgICAgIHNob3VsZCBiZSB0aGF0IG1hbnkgY2hhcmFjdGVycyBmcm9tIHRoZSBlbmQgb2YgIHRoZQorICAgICAgICAgICAgICBpbnB1dCAob3IgaWYgY29tYmluZWQgd2l0aAorICAgICAgICAgICAgICAgKyAgOiAgYmVmb3JlICB0aGUgIGN1cnJlbnQgIHN0ZGluICBmaWxlIHBvc2l0aW9uKS4KKyAgICAgICAgICAgICAgV2l0aG91dCAtcyBvcHRpb24sIHh4ZCBzdGFydHMgYXQgdGhlICBjdXJyZW50ICBmaWxlCisgICAgICAgICAgICAgIHBvc2l0aW9uLgorCisgICAgICAgLXUgICAgIHVzZSAgdXBwZXIgY2FzZSBoZXggbGV0dGVycy4gRGVmYXVsdCBpcyBsb3dlciBjYXNlLgorCisgICAgICAgLXYgfCAtdmVyc2lvbgorICAgICAgICAgICAgICBzaG93IHZlcnNpb24gc3RyaW5nLgorCisKKworCisKK01hbnVhbCBwYWdlIGZvciB4eGQgICAgICAgIEF1Z3VzdCAxOTk2ICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKworCisKKworWFhEKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYWEQoMSkKKworCitDQVZFQVRTCisgICAgICAgeHhkIC1yIGhhcyBzb21lIGJ1aWx0aW4gbWFnaWMgd2hpbGUgZXZhbHVhdGluZyBsaW5lIG51bWJlcgorICAgICAgIGluZm9ybWF0aW9uLiAgIElmICB0aGUgIG91cHV0ICBmaWxlICBpcyBzZWVrYWJsZSwgdGhlbiB0aGUKKyAgICAgICBsaW5lbnVtYmVycyBhdCB0aGUgc3RhcnQgb2YgZWFjaCBoZXhkdW1wIGxpbmUgbWF5ICBiZSAgb3V0CisgICAgICAgb2YgIG9yZGVyLCAgbGluZXMgbWF5IGJlIG1pc3NpbmcsIG9yIG92ZXJsYXBwaW5nLiBJbiB0aGVzZQorICAgICAgIGNhc2VzIHh4ZCB3aWxsIGxzZWVrKDIpIHRvIHRoZSBuZXh0IHBvc2l0aW9uLiBJZiB0aGUgIG91dC0KKyAgICAgICBwdXQgIGZpbGUgIGlzICBub3QgIHNlZWthYmxlLCBvbmx5IGdhcHMgYXJlIGFsbG93ZWQsIHdoaWNoCisgICAgICAgd2lsbCBiZSBmaWxsZWQgYnkgbnVsbC1ieXRlcy4KKworICAgICAgIHh4ZCAtciBuZXZlciBnZW5lcmF0ZXMgcGFyc2UgZXJyb3JzLiBHYXJiYWdlICBpcyAgc2lsZW50bHkKKyAgICAgICBza2lwcGVkLgorCisgICAgICAgV2hlbiAgZWRpdGluZyAgaGV4ZHVtcHMsICBwbGVhc2UgIG5vdGUgIHRoYXQgIHh4ZCAtciBza2lwcworICAgICAgIGV2ZXJ5dGhpbmcgb24gdGhlIGlucHV0IGxpbmUgYWZ0ZXIgcmVhZGluZyBlbm91Z2ggIGNvbHVtbnMKKyAgICAgICBvZiBoZXhhZGVjaW1hbCBkYXRhIChzZWUgb3B0aW9uIC1jKS4gVGhpcyBhbHNvIG1lYW5zLCB0aGF0CisgICAgICAgY2hhbmdlcyB0byB0aGUgcHJpbnRhYmxlIGFzY2lpICAob3IgIGViY2RpYykgIGNvbHVtbnMgIGFyZQorICAgICAgIGFsd2F5cyAgaWdub3JlZC4gIFJldmVydGluZyAgYSBwbGFpbiAob3IgcG9zdHNjcmlwdCkgc3R5bGUKKyAgICAgICBoZXhkdW1wIHdpdGggeHhkIC1yIC1wIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgY29ycmVjdCBudW0tCisgICAgICAgYmVyICBvZiAgY29sdW1ucy4gIEhlcmUgYW4gdGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgcGFpciBvZgorICAgICAgIGhleC1kaWdpdHMgaXMgaW50ZXJwcmV0ZWQuCisKKyAgICAgICBOb3RlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKyAgICAgICAlIHh4ZCAtaSBmaWxlCisgICAgICAgYW5kCisgICAgICAgJSB4eGQgLWkgPCBmaWxlCisKKyAgICAgICB4eGQgLXMgK3NlZWsgbWF5IGJlICBkaWZmZXJlbnQgIGZyb20gIHh4ZCAgLXMgIHNlZWsgICwgIGFzCisgICAgICAgbHNlZWsoMikgaXMgdXNlZCB0byAicmV3aW5kIiBpbnB1dC4gIEEgJysnIG1ha2VzIGEgZGlmZmVyLQorICAgICAgIGVuY2UgaWYgdGhlIGlucHV0IHNvdXJjZSBpcyBzdGRpbiwgIGFuZCAgaWYgIHN0ZGluJ3MgIGZpbGUKKyAgICAgICBwb3NpdGlvbiAgaXMgIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgYnkgdGhlIHRpbWUgeHhkCisgICAgICAgaXMgc3RhcnRlZCBhbmQgZ2l2ZW4gaXRzIGlucHV0LiAgIFRoZSAgZm9sbG93aW5nICBleGFtcGxlcworICAgICAgIG1heSBoZWxwIHRvIGNsYXJpZnkgKG9yIGZ1cnRoZXIgY29uZnVzZSEpLi4uCisKKyAgICAgICBSZXdpbmQgIHN0ZGluIGJlZm9yZSByZWFkaW5nOyBuZWVkZWQgYmVjYXVzZSB0aGUgYGNhdCcgaGFzCisgICAgICAgYWxyZWFkeSByZWFkIHRvIHRoZSBlbmQgb2Ygc3RkaW4uCisgICAgICAgJSBzaCAtYyAnY2F0ID4gcGxhaW5fY29weTsgeHhkIC1zIDAgPiBoZXhfY29weScgPCBmaWxlCisKKyAgICAgICBIZXhkdW1wIGZyb20gZmlsZSBwb3NpdGlvbiAweDQ4MCAoPTEwMjQrMTI4KSBvbndhcmRzLiAgVGhlCisgICAgICAgYCsnICBzaWduICBtZWFucyAgInJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIiwgdGh1cworICAgICAgIHRoZSBgMTI4JyBhZGRzIHRvIHRoZSAxayB3aGVyZSBkZCBsZWZ0IG9mZi4KKyAgICAgICAlIHNoIC1jICdkZCBvZj1wbGFpbl9zbmlwcGV0IGJzPTFrIGNvdW50PTE7IHh4ZCAtcyArMTI4ICA+CisgICAgICAgaGV4X3NuaXBwZXQnIDwgZmlsZQorCisgICAgICAgSGV4ZHVtcCBmcm9tIGZpbGUgcG9zaXRpb24gMHgxMDAgKCA9IDEwMjQtNzY4KSBvbi4KKyAgICAgICAlIHNoIC1jICdkZCBvZj1wbGFpbl9zbmlwcGV0IGJzPTFrIGNvdW50PTE7IHh4ZCAtcyArLTc2OCA+CisgICAgICAgaGV4X3NuaXBwZXQnIDwgZmlsZQorCisgICAgICAgSG93ZXZlciwgdGhpcyBpcyBhIHJhcmUgc2l0dWF0aW9uIGFuZCB0aGUgdXNlICBvZiAgYCsnICBpcworICAgICAgIHJhcmVseSAgbmVlZGVkLiAgIHRoZSBhdXRob3IgcHJlZmVycyB0byBtb25pdG9yIHRoZSBlZmZlY3QKKyAgICAgICBvZiB4eGQgd2l0aCBzdHJhY2UoMSkgb3IgdHJ1c3MoMSksIHdoZW5ldmVyIC1zIGlzIHVzZWQuCisKK0VYQU1QTEVTCisgICAgICAgUHJpbnQgZXZlcnl0aGluZyBidXQgIHRoZSAgZmlyc3QgIHRocmVlICBsaW5lcyAgKGhleCAgMHgzMAorICAgICAgIGJ5dGVzKSBvZiBmaWxlCisKKworCitNYW51YWwgcGFnZSBmb3IgeHhkICAgICAgICBBdWd1c3QgMTk5NiAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisKKworCisKK1hYRCgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFhEKDEpCisKKworICAgICAgICUgeHhkIC1zIDB4MzAgZmlsZQorCisgICAgICAgUHJpbnQgMyBsaW5lcyAoaGV4IDB4MzAgYnl0ZXMpIGZyb20gdGhlIGVuZCBvZiBmaWxlCisgICAgICAgJSB4eGQgLXMgLTB4MzAgZmlsZQorCisgICAgICAgUHJpbnQgIDEyMCAgYnl0ZXMgYXMgY29udGludW91cyBoZXhkdW1wIHdpdGggNDAgb2N0ZXRzIHBlcgorICAgICAgIGxpbmUuCisgICAgICAgJSB4eGQgLWwgMTIwIC1wcyAtYyAyMCB4eGQuMQorICAgICAgIDJlNTQ0ODIwNTg1ODQ0MjAzMTIwMjI0ZDYxNmU3NTYxNmMyMDcwNjEKKyAgICAgICA2NzY1MjA2NjZmNzIyMDc4Nzg2NDIyMGEyZTVjMjIwYTJlNWMyMjIwCisgICAgICAgMzIzMTczNzQyMDRkNjE3OTIwMzEzOTM5MzYwYTJlNWMyMjIwNGQ2MQorICAgICAgIDZlMjA3MDYxNjc2NTIwNjE3NTc0Njg2ZjcyM2EwYTJlNWMyMjIwMjAKKyAgICAgICAyMDIwNTQ2ZjZlNzkyMDRlNzU2NzY1NmU3NDIwM2M3NDZmNmU3OTQwCisgICAgICAgNzM2Mzc0NmU3NTY3NjU2ZTJlNzA3MDcwMmU2Nzc1MmU2NTY0NzUyZQorCisgICAgICAgSGV4ZHVtcCB0aGUgZmlyc3QgMTIwIGJ5dGVzICBvZiAgdGhpcyAgbWFuICBwYWdlICB3aXRoICAxMgorICAgICAgIG9jdGV0cyBwZXIgbGluZS4KKyAgICAgICAlIHh4ZCAtbCAxMjAgLWMgMTIgeHhkLjEKKyAgICAgICAwMDAwMDAwOiAyZTU0IDQ4MjAgNTg1OCA0NDIwIDMxMjAgMjI0ZCAgLlRIIFhYRCAxICJNCisgICAgICAgMDAwMDAwYzogNjE2ZSA3NTYxIDZjMjAgNzA2MSA2NzY1IDIwNjYgIGFudWFsIHBhZ2UgZgorICAgICAgIDAwMDAwMTg6IDZmNzIgMjA3OCA3ODY0IDIyMGEgMmU1YyAyMjBhICBvciB4eGQiLi5cIi4KKyAgICAgICAwMDAwMDI0OiAyZTVjIDIyMjAgMzIzMSA3Mzc0IDIwNGQgNjE3OSAgLlwiIDIxc3QgTWF5CisgICAgICAgMDAwMDAzMDogMjAzMSAzOTM5IDM2MGEgMmU1YyAyMjIwIDRkNjEgICAxOTk2Li5cIiBNYQorICAgICAgIDAwMDAwM2M6IDZlMjAgNzA2MSA2NzY1IDIwNjEgNzU3NCA2ODZmICBuIHBhZ2UgYXV0aG8KKyAgICAgICAwMDAwMDQ4OiA3MjNhIDBhMmUgNWMyMiAyMDIwIDIwMjAgNTQ2ZiAgcjouLlwiICAgIFRvCisgICAgICAgMDAwMDA1NDogNmU3OSAyMDRlIDc1NjcgNjU2ZSA3NDIwIDNjNzQgIG55IE51Z2VudCA8dAorICAgICAgIDAwMDAwNjA6IDZmNmUgNzk0MCA3MzYzIDc0NmUgNzU2NyA2NTZlICBvbnlAc2N0bnVnZW4KKyAgICAgICAwMDAwMDZjOiAyZTcwIDcwNzAgMmU2NyA3NTJlIDY1NjQgNzUyZSAgLnBwcC5ndS5lZHUuCisKKyAgICAgICBEaXNwbGF5IGp1c3QgdGhlIGRhdGUgZnJvbSB0aGUgZmlsZSB4eGQuMQorICAgICAgICUgeHhkIC1zIDB4MjggLWwgMTIgLWMgMTIgeHhkLjEKKyAgICAgICAwMDAwMDI4OiAzMjMxIDczNzQgMjA0ZCA2MTc5IDIwMzEgMzkzOSAgMjFzdCBNYXkgMTk5CisKKyAgICAgICBDb3B5ICBpbnB1dF9maWxlICB0byAgb3V0cHV0X2ZpbGUgYW5kIHByZXBlbmQgMTAwIGJ5dGVzIG9mCisgICAgICAgdmFsdWUgMHgwMC4KKyAgICAgICAlIHh4ZCBpbnB1dF9maWxlIHwgeHhkIC1yIC1zIDEwMCA+IG91dHB1dF9maWxlCisKKyAgICAgICBQYXRjaCB0aGUgZGF0ZSBpbiB0aGUgZmlsZSB4eGQuMQorICAgICAgICUgZWNobyAnMDAwMDAyOTogMzU3NCA2OCcgfCB4eGQgLXIgLSB4eGQuMQorICAgICAgICUgeHhkIC1zIDB4MjggLWwgMTIgLWMgMTIgeHhkLjEKKyAgICAgICAwMDAwMDI4OiAzMjM1IDc0NjggMjA0ZCA2MTc5IDIwMzEgMzkzOSAgMjV0aCBNYXkgMTk5CisKKyAgICAgICBDcmVhdGUgYSA2NTUzNyBieXRlIGZpbGUgd2l0aCBhbGwgYnl0ZXMgMHgwMCwgIGV4Y2VwdCAgZm9yCisgICAgICAgdGhlIGxhc3Qgb25lIHdoaWNoIGlzICdBJyAoaGV4IDB4NDEpLgorICAgICAgICUgZWNobyAnMDEwMDAwOiA0MScgfCB4eGQgLXIgPiBmaWxlCisKKyAgICAgICBIZXhkdW1wIHRoaXMgZmlsZSB3aXRoIGF1dG9za2lwLgorICAgICAgICUgeHhkIC1hIC1jIDEyIGZpbGUKKyAgICAgICAwMDAwMDAwOiAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAgLi4uLi4uLi4uLi4uCisgICAgICAgKgorICAgICAgIDAwMGZmZmM6IDAwMDAgMDAwMCA0MCAgICAgICAgICAgICAgICAgICAuLi4uQQorCisgICAgICAgQ3JlYXRlICBhICAxICBieXRlIGZpbGUgY29udGFpbmluZyBhIHNpbmdsZSAnQScgY2hhcmFjdGVyLgorICAgICAgIFRoZSBudW1iZXIgYWZ0ZXIgJy1yIC1zJyBhZGRzIHRvIHRoZSBsaW5lbnVtYmVycyBmb3VuZCAgaW4KKworCisKK01hbnVhbCBwYWdlIGZvciB4eGQgICAgICAgIEF1Z3VzdCAxOTk2ICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKworCisKKworWFhEKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYWEQoMSkKKworCisgICAgICAgdGhlIGZpbGU7IGluIGVmZmVjdCwgdGhlIGxlYWRpbmcgYnl0ZXMgYXJlIHN1cHByZXNzZWQuCisgICAgICAgJSBlY2hvICcwMTAwMDA6IDQxJyB8IHh4ZCAtciAtcyAtMHgxMDAwMCA+IGZpbGUKKworICAgICAgIFVzZSAgeHhkICBhcyAgYSAgZmlsdGVyIHdpdGhpbiBhbiBlZGl0b3Igc3VjaCBhcyB2aW0oMSkgdG8KKyAgICAgICBoZXhkdW1wIGEgcmVnaW9uIG1hcmtlZCBiZXR3ZWVuIGBhJyBhbmQgYHonLgorICAgICAgIDonYSwneiF4eGQKKworICAgICAgIFVzZSB4eGQgYXMgYSBmaWx0ZXIgd2l0aGluIGFuIGVkaXRvciAgc3VjaCAgYXMgIHZpbSgxKSAgdG8KKyAgICAgICByZWNvdmVyIGEgYmluYXJ5IGhleGR1bXAgbWFya2VkIGJldHdlZW4gYGEnIGFuZCBgeicuCisgICAgICAgOidhLCd6IXh4ZCAtcgorCisgICAgICAgVXNlICB4eGQgIGFzICBhICBmaWx0ZXIgd2l0aGluIGFuIGVkaXRvciBzdWNoIGFzIHZpbSgxKSB0bworICAgICAgIHJlY292ZXIgb25lIGxpbmUgb2YgYSBoZXhkdW1wLiAgTW92ZSB0aGUgY3Vyc29yICBvdmVyICB0aGUKKyAgICAgICBsaW5lIGFuZCB0eXBlOgorICAgICAgICEheHhkIC1yCisKKyAgICAgICBSZWFkIHNpbmdsZSBjaGFyYWN0ZXJzIGZyb20gYSBzZXJpYWwgbGluZQorICAgICAgICUgeHhkIC1jMSA8IC9kZXYvdGVybS9iICYKKyAgICAgICAlIHN0dHkgPCAvZGV2L3Rlcm0vYiAtZWNobyAtb3Bvc3QgLWlzaWcgLWljYW5vbiBtaW4gMQorICAgICAgICUgZWNobyAtbiBmb28gPiAvZGV2L3Rlcm0vYgorCisKK1JFVFVSTiBWQUxVRVMKKyAgICAgICBUaGUgZm9sbG93aW5nIGVycm9yIHZhbHVlcyBhcmUgcmV0dXJuZWQ6CisKKyAgICAgICAwICAgICAgbm8gZXJyb3JzIGVuY291bnRlcmVkLgorCisgICAgICAgLTEgICAgIG9wZXJhdGlvbiAgbm90IHN1cHBvcnRlZCAoIHh4ZCAtciAtaSBzdGlsbCBpbXBvc3NpLQorICAgICAgICAgICAgICBibGUpLgorCisgICAgICAgMSAgICAgIGVycm9yIHdoaWxlIHBhcnNpbmcgb3B0aW9ucy4KKworICAgICAgIDIgICAgICBwcm9ibGVtcyB3aXRoIGlucHV0IGZpbGUuCisKKyAgICAgICAzICAgICAgcHJvYmxlbXMgd2l0aCBvdXRwdXQgZmlsZS4KKworICAgICAgIDQsNSAgICBkZXNpcmVkIHNlZWsgcG9zaXRpb24gaXMgdW5yZWFjaGFibGUuCisKK1NFRSBBTFNPCisgICAgICAgdXVlbmNvZGUoMSksIHV1ZGVjb2RlKDEpLCBwYXRjaCgxKQorCitXQVJOSU5HUworICAgICAgIFRoZSB0b29scyAgd2VpcmRuZXNzICBtYXRjaGVzICBpdHMgIGNyZWF0b3JzICBicmFpbi4gICBVc2UKKyAgICAgICBlbnRpcmVseSAgYXQgeW91ciBvd24gcmlzay4gQ29weSBmaWxlcy4gVHJhY2UgaXQuIEJlY29tZSBhCisgICAgICAgd2l6YXJkLgorCitWRVJTSU9OCisgICAgICAgVGhpcyBtYW51YWwgcGFnZSBkb2N1bWVudHMgeHhkIHZlcnNpb24gMS43CisKK0FVVEhPUgorICAgICAgIChjKSAxOTkwLTE5OTcgYnkgSnVlcmdlbiBXZWlnZXJ0CisgICAgICAgPGpud2VpZ2VyQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorCisgICAgICAgRGlzdHJpYnV0ZSBmcmVlbHkgYW5kIGNyZWRpdCBtZSwKKworCisKK01hbnVhbCBwYWdlIGZvciB4eGQgICAgICAgIEF1Z3VzdCAxOTk2ICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKworCisKKworWFhEKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYWEQoMSkKKworCisgICAgICAgbWFrZSBtb25leSBhbmQgc2hhcmUgd2l0aCBtZSwKKyAgICAgICBsb3NlIG1vbmV5IGFuZCBkb24ndCBhc2sgbWUuCisKKyAgICAgICBNYW51YWwgcGFnZSBzdGFydGVkIGJ5IFRvbnkgTnVnZW50CisgICAgICAgPHRvbnlAc2N0bnVnZW4ucHBwLmd1LmVkdS5hdT4gPFQuTnVnZW50QHNjdC5ndS5lZHUuYXU+CisgICAgICAgU21hbGwgIGNoYW5nZXMgIGJ5ICBCcmFtICBNb29sZW5hYXIuICAgRWRpdGVkICBieSAgSnVlcmdlbgorICAgICAgIFdlaWdlcnQuCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworTWFudWFsIHBhZ2UgZm9yIHh4ZCAgICAgICAgQXVndXN0IDE5OTYgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworCmRpZmYgLS1naXQgYS9ydW50aW1lL2V2aW0udmltIGIvcnVudGltZS9ldmltLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjg5ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9ldmltLnZpbQpAQCAtMCwwICsxLDY2IEBACisiIFZpbSBzY3JpcHQgZm9yIEV2aW0ga2V5IGJpbmRpbmdzCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAyIE1hciAwNAorCisiIERvbid0IHVzZSBWaS1jb21wYXRpYmxlIG1vZGUuCitzZXQgbm9jb21wYXRpYmxlCisKKyIgVXNlIHRoZSBtc3dpbi52aW0gc2NyaXB0IGZvciBtb3N0IG1hcHBpbmdzCitzb3VyY2UgPHNmaWxlPjpwOmgvbXN3aW4udmltCisKKyIgVmltIGlzIGluIEluc2VydCBtb2RlIGJ5IGRlZmF1bHQKK3NldCBpbnNlcnRtb2RlCisKKyIgTWFrZSBhIGJ1ZmZlciBoaWRkZW4gd2hlbiBlZGl0aW5nIGFub3RoZXIgb25lCitzZXQgaGlkZGVuCisKKyIgTWFrZSBjdXJzb3Iga2V5cyBpZ25vcmUgd3JhcHBpbmcKK2lub3JlbWFwIDxEb3duPiA8Qy1PPmdqCitpbm9yZW1hcCA8VXA+IDxDLU8+Z2sKKworIiBDVFJMLUYgZG9lcyBGaW5kIGRpYWxvZyBpbnN0ZWFkIG9mIHBhZ2UgZm9yd2FyZAorbm9yZW1hcCA8Qy1GPiA6cHJvbXB0ZmluZDxDUj4KK3Zub3JlbWFwIDxDLUY+IHk6cHJvbXB0ZmluZCA8Qy1SPiI8Q1I+Citvbm9yZW1hcCA8Qy1GPiA8Qy1DPjpwcm9tcHRmaW5kPENSPgoraW5vcmVtYXAgPEMtRj4gPEMtTz46cHJvbXB0ZmluZDxDUj4KK2Nub3JlbWFwIDxDLUY+IDxDLUM+OnByb21wdGZpbmQ8Q1I+CisKKworc2V0IGJhY2tzcGFjZT0yCQkiIGFsbG93IGJhY2tzcGFjaW5nIG92ZXIgZXZlcnl0aGluZyBpbiBpbnNlcnQgbW9kZQorc2V0IGF1dG9pbmRlbnQJCSIgYWx3YXlzIHNldCBhdXRvaW5kZW50aW5nIG9uCitpZiBoYXMoInZtcyIpCisgIHNldCBub2JhY2t1cAkJIiBkbyBub3Qga2VlcCBhIGJhY2t1cCBmaWxlLCB1c2UgdmVyc2lvbnMgaW5zdGVhZAorZWxzZQorICBzZXQgYmFja3VwCQkiIGtlZXAgYSBiYWNrdXAgZmlsZQorZW5kaWYKK3NldCBoaXN0b3J5PTUwCQkiIGtlZXAgNTAgbGluZXMgb2YgY29tbWFuZCBsaW5lIGhpc3RvcnkKK3NldCBydWxlcgkJIiBzaG93IHRoZSBjdXJzb3IgcG9zaXRpb24gYWxsIHRoZSB0aW1lCitzZXQgaW5jc2VhcmNoCQkiIGRvIGluY3JlbWVudGFsIHNlYXJjaGluZworc2V0IG1vdXNlPWEJCSIgYWx3YXlzIHVzZSB0aGUgbW91c2UKKworIiBEb24ndCB1c2UgRXggbW9kZSwgdXNlIFEgZm9yIGZvcm1hdHRpbmcKK21hcCBRIGdxCisKKyIgU3dpdGNoIHN5bnRheCBoaWdobGlnaHRpbmcgb24sIHdoZW4gdGhlIHRlcm1pbmFsIGhhcyBjb2xvcnMKKyIgSGlnaGxpZ2h0IHRoZSBsYXN0IHVzZWQgc2VhcmNoIHBhdHRlcm4gb24gdGhlIG5leHQgc2VhcmNoIGNvbW1hbmQuCitpZiAmdF9DbyA+IDIgfHwgaGFzKCJndWlfcnVubmluZyIpCisgIHN5bnRheCBvbgorICBzZXQgaGxzZWFyY2gKKyAgbm9obHNlYXJjaAorZW5kaWYKKworIiBPbmx5IGRvIHRoaXMgcGFydCB3aGVuIGNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgYXV0b2NvbW1hbmRzLgoraWYgaGFzKCJhdXRvY21kIikKKworICAiIEVuYWJsZSBmaWxlIHR5cGUgZGV0ZWN0aW9uLgorICAiIFVzZSB0aGUgZGVmYXVsdCBmaWxldHlwZSBzZXR0aW5ncywgc28gdGhhdCBtYWlsIGdldHMgJ3R3JyBzZXQgdG8gNzIsCisgICIgJ2NpbmRlbnQnIGlzIG9uIGluIEMgZmlsZXMsIGV0Yy4KKyAgIiBBbHNvIGxvYWQgaW5kZW50IGZpbGVzLCB0byBhdXRvbWF0aWNhbGx5IGRvIGxhbmd1YWdlLWRlcGVuZGVudCBpbmRlbnRpbmcuCisgIGZpbGV0eXBlIHBsdWdpbiBpbmRlbnQgb24KKworICAiIEZvciBhbGwgdGV4dCBmaWxlcyBzZXQgJ3RleHR3aWR0aCcgdG8gNzggY2hhcmFjdGVycy4KKyAgYXUgRmlsZVR5cGUgdGV4dCBzZXRsb2NhbCB0dz03OAorCitlbmRpZiAiIGhhcygiYXV0b2NtZCIpCisKKyIgdmltOiBzZXQgc3c9MiA6CmRpZmYgLS1naXQgYS9ydW50aW1lL2ZpbGV0eXBlLnZpbSBiL3J1bnRpbWUvZmlsZXR5cGUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYTFjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2ZpbGV0eXBlLnZpbQpAQCAtMCwwICsxLDE3MzcgQEAKKyIgVmltIHN1cHBvcnQgZmlsZSB0byBkZXRlY3QgZmlsZSB0eXBlcworIgorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwNCBKdW4gMTAKKworIiBMaXN0ZW4gdmVyeSBjYXJlZnVsbHksIEkgd2lsbCBzYXkgdGhpcyBvbmx5IG9uY2UKK2lmIGV4aXN0cygiZGlkX2xvYWRfZmlsZXR5cGVzIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9sb2FkX2ZpbGV0eXBlcyA9IDEKKworIiBMaW5lIGNvbnRpbnVhdGlvbiBpcyB1c2VkIGhlcmUsIHJlbW92ZSAnQycgZnJvbSAnY3BvcHRpb25zJworbGV0IHM6Y3BvX3NhdmUgPSAmY3BvCitzZXQgY3BvJnZpbQorCithdWdyb3VwIGZpbGV0eXBlZGV0ZWN0CisKKyIgSWdub3JlZCBleHRlbnNpb25zCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5vcmlnLCouYmFrLCoub2xkLCoubmV3LCoucnBtc2F2ZSwqLnJwbW5ldworCVwgZXhlICJkb2F1IGZpbGV0eXBlZGV0ZWN0IEJ1ZlJlYWQgIiAuIGV4cGFuZCgiPGFmaWxlPjpyIikKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqfgorCVwgbGV0IHM6bmFtZSA9IGV4cGFuZCgiPGFmaWxlPiIpIHwKKwlcIGxldCBzOnNob3J0ID0gc3Vic3RpdHV0ZShzOm5hbWUsICdcfiQnLCAnJywgJycpIHwKKwlcIGlmIHM6bmFtZSAhPSBzOnNob3J0ICYmIHM6c2hvcnQgIT0gIiIgfAorCVwgICBleGUgImRvYXUgZmlsZXR5cGVkZXRlY3QgQnVmUmVhZCAiIC4gczpzaG9ydCB8CisJXCBlbmRpZiB8CisJXCB1bmxldCBzOm5hbWUgfAorCVwgdW5sZXQgczpzaG9ydAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaW4KKwlcIGlmIGV4cGFuZCgiPGFmaWxlPjp0IikgIT0gImNvbmZpZ3VyZS5pbiIgfAorCVwgICBleGUgImRvYXUgZmlsZXR5cGVkZXRlY3QgQnVmUmVhZCAiIC4gZXhwYW5kKCI8YWZpbGU+OnIiKSB8CisJXCBlbmRpZgorCisiIFBhdHRlcm4gdXNlZCB0byBtYXRjaCBmaWxlIG5hbWVzIHdoaWNoIHNob3VsZCBub3QgYmUgaW5zcGVjdGVkLgorIiBDdXJyZW50bHkgZmluZHMgY29tcHJlc3NlZCBmaWxlcy4KK2lmICFleGlzdHMoImc6ZnRfaWdub3JlX3BhdCIpCisgIGxldCBnOmZ0X2lnbm9yZV9wYXQgPSAnXC5cKFpcfGd6XHxiejJcfHppcFx8dGd6XCkkJworZW5kaWYKKworIiBBYmFxdXMgb3IgVHJhc3lzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pbnAJCQljYWxsIEZUQ2hlY2tfaW5wKCkKKworZnVuISBGVENoZWNrX2lucCgpCisgIGlmIGdldGxpbmUoMSkgPX4gJ15cKicKKyAgICBzZXRmIGFiYXF1cworICBlbHNlCisgICAgbGV0IG4gPSAxCisgICAgaWYgbGluZSgiJCIpID4gNTAwCisgICAgICBsZXQgbm1heCA9IDUwMAorICAgIGVsc2UKKyAgICAgIGxldCBubWF4ID0gbGluZSgiJCIpCisgICAgZW5kaWYKKyAgICB3aGlsZSBuIDw9IG5tYXgKKyAgICAgIGlmIGdldGxpbmUobikgPX4/ICJeaGVhZGVyIHN1cmZhY2UgZGF0YSIKKwlzZXRmIHRyYXN5cworCWJyZWFrCisgICAgICBlbmRpZgorICAgICAgbGV0IG4gPSBuICsgMQorICAgIGVuZHdoaWxlCisgIGVuZGlmCitlbmRmdW4KKworIiBBLUEtUCByZWNpcGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFhcAkJCXNldGYgYWFwCisKKyIgQUJDIG11c2ljIG5vdGF0aW9uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hYmMJCQlzZXRmIGFiYworCisiIEFCRUwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFibAkJCXNldGYgYWJlbAorCisiIEFjZURCCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi53cm0JCQlzZXRmIGFjZWRiCisKKyIgQWRhICg4MywgOVgsIDk1KQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYWRiLCouYWRzLCouYWRhCQlzZXRmIGFkYQorCisiIEFIREwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnRkZgkJCXNldGYgYWhkbAorCisiIEFNUEwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnJ1bgkJCXNldGYgYW1wbAorCisiIEFudAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGJ1aWxkLnhtbAkJCXNldGYgYW50CisKKyIgQXBhY2hlIHN0eWxlIGNvbmZpZyBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgcHJvZnRwZC5jb25mKgkJc2V0ZiBhcGFjaGVzdHlsZQorCisiIEFwYWNoZSBjb25maWcgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGh0dHBkLmNvbmYqLHNybS5jb25mKixhY2Nlc3MuY29uZiosLmh0YWNjZXNzLGFwYWNoZS5jb25mKiBzZXRmIGFwYWNoZQorCisiIFhBNjUgTU9TNjUxMCBjcm9zcyBhc3NlbWJsZXIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmE2NQkJCXNldGYgYTY1CisKKyIgQXBwbGl4IEVMRgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYW0KKwlcIGlmIGV4cGFuZCgiPGFmaWxlPiIpICF+PyAnTWFrZWZpbGUuYW1cPicgfCBzZXRmIGVsZiB8IGVuZGlmCisKKyIgQXJjIE1hY3JvIExhbmd1YWdlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hbWwJCQlzZXRmIGFtbAorCisiIEFyY2ggSW52ZW50b3J5IGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuYXJjaC1pbnZlbnRvcnksPXRhZ2dpbmctbWV0aG9kCXNldGYgYXJjaAorCisiIEFSVCpFbnRlcnByaXNlIChmb3JtZXJseSBBUlQtSU0pCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hcnQJCQlzZXRmIGFydAorCisiIEFTTi4xCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hc24sKi5hc24xCQlzZXRmIGFzbgorCisiIEFjdGl2ZSBTZXJ2ZXIgUGFnZXMgKHdpdGggVmlzdWFsIEJhc2ljIFNjcmlwdCkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFzYQorCVwgaWYgZXhpc3RzKCJnOmZpbGV0eXBlX2FzYSIpIHwKKwlcICAgZXhlICJzZXRmICIgLiBnOmZpbGV0eXBlX2FzYSB8CisJXCBlbHNlIHwKKwlcICAgc2V0ZiBhc3B2YnMgfAorCVwgZW5kaWYKKworIiBBY3RpdmUgU2VydmVyIFBhZ2VzICh3aXRoIFBlcmwgb3IgVmlzdWFsIEJhc2ljIFNjcmlwdCkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFzcAorCVwgaWYgZXhpc3RzKCJnOmZpbGV0eXBlX2FzcCIpIHwKKwlcICAgZXhlICJzZXRmICIgLiBnOmZpbGV0eXBlX2FzcCB8CisJXCBlbHNlaWYgZ2V0bGluZSgxKSAuIGdldGxpbmUoMikgLiBnZXRsaW5lKDMpID1+PyAicGVybHNjcmlwdCIgfAorCVwgICBzZXRmIGFzcHBlcmwgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgYXNwdmJzIHwKKwlcIGVuZGlmCisKKyIgR3J1YiAobXVzdCBiZSBiZWZvcmUgY2F0Y2ggKi5sc3QpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2Jvb3QvZ3J1Yi9tZW51LmxzdCwvYm9vdC9ncnViL2dydWIuY29uZglzZXRmIGdydWIKKworIiBBc3NlbWJseSAoYWxsIGtpbmRzKQorIiAqLmxzdCBpcyBub3QgcHVyZSBhc3NlbWJseSwgaXQgaGFzIHR3byBleHRyYSBjb2x1bW5zIChhZGRyZXNzLCBieXRlIGNvZGVzKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYXNtLCouW3NTXSwqLlthQV0sKi5tYWMsKi5sc3QJY2FsbCA8U0lEPkZUYXNtKCkKKworIiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgdGhlIGtpbmQgb2YgYXNzZW1ibHkgdGhhdCBpcyB3YW50ZWQgYnkgdGhlIHVzZXIsIG9yCisiIGNhbiBiZSBkZXRlY3RlZCBmcm9tIHRoZSBmaXJzdCBmaXZlIGxpbmVzIG9mIHRoZSBmaWxlLgorZnVuISA8U0lEPkZUYXNtKCkKKyAgIiBtYWtlIHN1cmUgYjphc21zeW50YXggZXhpc3RzCisgIGlmICFleGlzdHMoImI6YXNtc3ludGF4IikKKyAgICBsZXQgYjphc21zeW50YXggPSAiIgorICBlbmRpZgorCisgIGlmIGI6YXNtc3ludGF4ID09ICIiCisgICAgY2FsbCBGVENoZWNrX2FzbXN5bnRheCgpCisgIGVuZGlmCisKKyAgIiBpZiBiOmFzbXN5bnRheCBzdGlsbCBpc24ndCBzZXQsIGRlZmF1bHQgdG8gYXNtc3ludGF4IG9yIEdOVQorICBpZiBiOmFzbXN5bnRheCA9PSAiIgorICAgIGlmIGV4aXN0cygiZzphc21zeW50YXgiKQorICAgICAgbGV0IGI6YXNtc3ludGF4ID0gZzphc21zeW50YXgKKyAgICBlbHNlCisgICAgICBsZXQgYjphc21zeW50YXggPSAiYXNtIgorICAgIGVuZGlmCisgIGVuZGlmCisKKyAgZXhlICJzZXRmICIgLiBiOmFzbXN5bnRheAorZW5kZnVuCisKK2Z1biEgRlRDaGVja19hc21zeW50YXgoKQorICAiIHNlZSBpZiBmaWxlIGNvbnRhaW5zIGFueSBhc21zeW50YXg9Zm9vIG92ZXJyaWRlcy4gSWYgc28sIGNoYW5nZQorICAiIGI6YXNtc3ludGF4IGFwcHJvcHJpYXRlbHkKKyAgbGV0IGhlYWQgPSAiICIuZ2V0bGluZSgxKS4iICIuZ2V0bGluZSgyKS4iICIuZ2V0bGluZSgzKS4iICIuZ2V0bGluZSg0KS4KKwlcIiAiLmdldGxpbmUoNSkuIiAiCisgIGlmIGhlYWQgPX4gJ1xzYXNtc3ludGF4PVxTXCtccycKKyAgICBsZXQgYjphc21zeW50YXggPSBzdWJzdGl0dXRlKGhlYWQsICcuKlxzYXNtc3ludGF4PVwoXFNcK1wpXHMuKicsJ1wxJywgIiIpCisgIGVsc2VpZiAoKGhlYWQgPX4/ICdcLnRpdGxlJykgfHwgKGhlYWQgPX4/ICdcLmlkZW50JykgfHwgKGhlYWQgPX4/ICdcLm1hY3JvJykgfHwgKGhlYWQgPX4/ICdcLnN1YnRpdGxlJykgfHwgKGhlYWQgPX4/ICdcLmxpYnJhcnknKSkKKyAgICBsZXQgYjphc21zeW50YXggPSAidm1hc20iCisgIGVuZGlmCitlbmRmdW4KKworIiBNYWNybyAoVkFYKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubWFyCQkJc2V0ZiB2bWFzbQorCisiIEF0bGFzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hdGwsKi5hcwkJc2V0ZiBhdGxhcworCisiIEF1dG9tYWtlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgW21NXWFrZWZpbGUuYW0JCXNldGYgYXV0b21ha2UKKworIiBBdmVudWUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmF2ZQkJCXNldGYgYXZlCisKKyIgQXdrCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hd2sJCQlzZXRmIGF3aworCisiIEIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1jaCwqLnJlZiwqLmltcAkJc2V0ZiBiCisKKyIgQkFTSUMgb3IgVmlzdWFsIEJhc2ljCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5iYXMJCQljYWxsIDxTSUQ+RlRWQigiYmFzaWMiKQorCisiIENoZWNrIGlmIG9uZSBvZiB0aGUgZmlyc3QgZml2ZSBsaW5lcyBjb250YWlucyAiVkJfTmFtZSIuICBJbiB0aGF0IGNhc2UgaXQgaXMKKyIgcHJvYmFibHkgYSBWaXN1YWwgQmFzaWMgZmlsZS4gIE90aGVyd2lzZSBpdCdzIGFzc3VtZWQgdG8gYmUgImFsdCIgZmlsZXR5cGUuCitmdW4hIDxTSUQ+RlRWQihhbHQpCisgIGlmIGdldGxpbmUoMSkuZ2V0bGluZSgyKS5nZXRsaW5lKDMpLmdldGxpbmUoNCkuZ2V0bGluZSg1KSA9fj8gJ1ZCX05hbWVcfEJlZ2luIFZCXC5cKEZvcm1cfE1ESUZvcm1cfFVzZXJDb250cm9sXCknCisgICAgc2V0ZiB2YgorICBlbHNlCisgICAgZXhlICJzZXRmICIgLiBhOmFsdAorICBlbmRpZgorZW5kZnVuCisKKyIgVmlzdWFsIEJhc2ljIFNjcmlwdCAoY2xvc2UgdG8gVmlzdWFsIEJhc2ljKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudmJzLCouZHNtLCouY3RsCQlzZXRmIHZiCisKKyIgQmF0Y2ggZmlsZSBmb3IgTVNET1MuCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5iYXQsKi5idG0sKi5zeXMJCXNldGYgZG9zYmF0Y2gKKyIgKi5jbWQgaXMgY2xvc2UgdG8gYSBCYXRjaCBmaWxlLCBidXQgb24gT1MvMiBSZXh4IGZpbGVzIGFsc28gdXNlICouY21kLgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY21kCisJXCBpZiBnZXRsaW5lKDEpID1+ICdeL1wqJyB8IHNldGYgcmV4eCB8IGVsc2UgfCBzZXRmIGRvc2JhdGNoIHwgZW5kaWYKKworIiBCYXRjaCBmaWxlIGZvciA0RE9TCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5idG0JCQlzZXRmIGJ0bQorCisiIEJDIGNhbGN1bGF0b3IKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJjCQkJc2V0ZiBiYworCisiIEJERiBmb250CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5iZGYJCQlzZXRmIGJkZgorCisiIEJpYlRlWCBiaWJsaW9ncmFwaHkgZGF0YWJhc2UgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYmliCQkJc2V0ZiBiaWIKKworIiBCSU5EIGNvbmZpZ3VyYXRpb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBuYW1lZC5jb25mCQlzZXRmIG5hbWVkCisKKyIgQklORCB6b25lCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgbmFtZWQucm9vdAkJc2V0ZiBiaW5kem9uZQorCisiIEJsYW5rCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ibAkJCXNldGYgYmxhbmsKKworIiBDIG9yIGxwYworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYwkJCWNhbGwgPFNJRD5GVGxwYygpCisKK2Z1biEgPFNJRD5GVGxwYygpCisgIGlmIGV4aXN0cygiZzpscGNfc3ludGF4X2Zvcl9jIikKKyAgICBsZXQgbG51bSA9IDEKKyAgICB3aGlsZSBsbnVtIDw9IDEyCisgICAgICBpZiBnZXRsaW5lKGxudW0pID1+IyAnXlwoLy9cfGluaGVyaXRcfHByaXZhdGVcfHByb3RlY3RlZFx8bm9zYXZlXHxzdHJpbmdcfG9iamVjdFx8bWFwcGluZ1x8bWl4ZWRcKScKKwlzZXRmIGxwYworCXJldHVybgorICAgICAgZW5kaWYKKyAgICAgIGxldCBsbnVtID0gbG51bSArIDEKKyAgICBlbmR3aGlsZQorICBlbmRpZgorICBzZXRmIGMKK2VuZGZ1bgorCisiIENhbGVuZGFyCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgY2FsZW5kYXIsKi8uY2FsZW5kYXIvKiwKKwlcKi9zaGFyZS9jYWxlbmRhci8qL2NhbGVuZGFyLiosKi9zaGFyZS9jYWxlbmRhci9jYWxlbmRhci4qCisJXAkJCQkJc2V0ZiBjYWxlbmRhcgorCisiIEMjCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jcwkJCXNldGYgY3MKKworIiBDb21zaGFyZSBEaW1lbnNpb24gRGVmaW5pdGlvbiBMYW5ndWFnZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY2RsCQkJc2V0ZiBjZGwKKworIiBDb250cm9sbGFibGUgUmVnZXggTXV0aWxhdG9yCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jcm0JCQlzZXRmIGNybQorCisiIEN5bisrCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jeW4JCQlzZXRmIGN5bnBwCisKKyIgQ3lubGliCisiIC5jYyBhbmQgLmNwcCBmaWxlcyBjYW4gYmUgQysrIG9yIEN5bmxpYi4KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNjCisJXCBpZiBleGlzdHMoImN5bmxpYl9zeW50YXhfZm9yX2NjIil8c2V0ZiBjeW5saWJ8ZWxzZXxzZXRmIGNwcHxlbmRpZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY3BwCisJXCBpZiBleGlzdHMoImN5bmxpYl9zeW50YXhfZm9yX2NwcCIpfHNldGYgY3lubGlifGVsc2V8c2V0ZiBjcHB8ZW5kaWYKKworIiBDKysKK2lmIGhhcygiZm5hbWVfY2FzZSIpCisgIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmN4eCwqLmMrKywqLkMsKi5ILCouaGgsKi5oeHgsKi5ocHAsKi5tb2MsKi50Y2MsKi5pbmwgc2V0ZiBjcHAKK2Vsc2UKKyAgYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY3h4LCouYysrLCouaGgsKi5oeHgsKi5ocHAsKi5tb2MsKi50Y2MsKi5pbmwgc2V0ZiBjcHAKK2VuZGlmCisKKyIgLmggZmlsZXMgY2FuIGJlIEMsIENoIG9yIEMrKywgc2V0IGNfc3ludGF4X2Zvcl9oIGlmIHlvdSB3YW50IEMsCisiIGNoX3N5bnRheF9mb3JfaCBpZiB5b3Ugd2FudCBDaC4KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmgKKwlcIGlmIGV4aXN0cygiY19zeW50YXhfZm9yX2giKSB8IHNldGYgYyB8CisJXCBlbHNlaWYgZXhpc3RzKCJjaF9zeW50YXhfZm9yX2giKSB8IHNldGYgY2ggfAorCVwgZWxzZSB8IHNldGYgY3BwIHwgZW5kaWYKKworIiBDaCAoQ0hzY3JpcHQpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jaGYJCQlzZXRmIGNoCisKKyIgVExIIGZpbGVzIGFyZSBDKysgaGVhZGVycyBnZW5lcmF0ZWQgYnkgVmlzdWFsIEMrKydzICNpbXBvcnQgZnJvbSB0eXBlbGlicworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudGxoCQkJc2V0ZiBjcHAKKworIiBDYXNjYWRpbmcgU3R5bGUgU2hlZXRzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jc3MJCQlzZXRmIGNzcworCisiIENlbnR1cnkgVGVybSBDb21tYW5kIFNjcmlwdHMgKCouY21kIHRvbykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNvbgkJCXNldGYgY3Rlcm0KKworIiBDaGFuZ2Vsb2cKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBjaGFuZ2Vsb2cuRGViaWFuLGNoYW5nZWxvZy5kY2ggc2V0ZiBkZWJjaGFuZ2Vsb2cKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBbY0NdaGFuZ2VbbExdb2cJCWlmIGdldGxpbmUoMSkgPX4gJzsgdXJnZW5jeT0nCisJXHwgc2V0ZiBkZWJjaGFuZ2Vsb2cgfCBlbHNlIHwgc2V0ZiBjaGFuZ2Vsb2cgfCBlbmRpZgorCisiIENISUxMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi4uY2gJCQlzZXRmIGNoaWxsCisKKyIgQ2hhbmdlcyBmb3IgV0VCIGFuZCBDV0VCIG9yIENISUxMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jaAkJCWNhbGwgPFNJRD5GVGNoYW5nZSgpCisKKyIgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgb25lIG9mIHRoZSBmaXJzdCB0ZW4gbGluZXMgc3RhcnQgd2l0aCBhICdAJy4gIEluCisiIHRoYXQgY2FzZSBpdCBpcyBwcm9iYWJseSBhIGNoYW5nZSBmaWxlLgorIiBJZiB0aGUgZmlyc3QgbGluZSBzdGFydHMgd2l0aCAjIG9yICEgaXQncyBwcm9iYWJseSBhIGNoIGZpbGUuCisiIElmIGEgbGluZSBoYXMgIm1haW4iLCAiaW5jbHVkZSIsICIvLyIgaXIgIi8qIiBpdCdzIHByb2JhYmx5IGNoLgorIiBPdGhlcndpc2UgQ0hJTEwgaXMgYXNzdW1lZC4KK2Z1biEgPFNJRD5GVGNoYW5nZSgpCisgIGxldCBsbnVtID0gMQorICB3aGlsZSBsbnVtIDw9IDEwCisgICAgaWYgZ2V0bGluZShsbnVtKVswXSA9PSAnQCcKKyAgICAgIHNldGYgY2hhbmdlCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGlmIGxudW0gPT0gMSAmJiAoZ2V0bGluZSgxKVswXSA9PSAnIycgfHwgZ2V0bGluZSgxKVswXSA9PSAnIScpCisgICAgICBzZXRmIGNoCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGlmIGdldGxpbmUobG51bSkgPX4gIk1PRFVMRSIKKyAgICAgIHNldGYgY2hpbGwKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgaWYgZ2V0bGluZShsbnVtKSA9fiAnbWFpblxzKihcfCNccyppbmNsdWRlXHwvLycKKyAgICAgIHNldGYgY2gKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgbGV0IGxudW0gPSBsbnVtICsgMQorICBlbmR3aGlsZQorICBzZXRmIGNoaWxsCitlbmRmdW4KKworIiBDbGVhbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZGNsLCouaWNsCQlzZXRmIGNsZWFuCisKKyIgQ2xldmVyCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5lbmkJCQlzZXRmIGNsCisKKyIgQ2xldmVyIG9yIGR0ZAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZW50CQkJY2FsbCA8U0lEPkZUZW50KCkKKworZnVuISA8U0lEPkZUZW50KCkKKyAgIiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgdmFsaWQgY2wgc3ludGF4IGluIHRoZSBmaXJzdCBmaXZlIGxpbmVzLgorICAiIExvb2sgZm9yIGVpdGhlciBhbiBvcGVuaW5nIGNvbW1lbnQsICcjJywgb3IgYSBibG9jayBzdGFydCwgJ3siLgorICAiIElmIG5vdCBmb3VuZCwgYXNzdW1lIFNHTUwuCisgIGxldCBsbnVtID0gMQorICB3aGlsZSBsbnVtIDwgNgorICAgIGxldCBsaW5lID0gZ2V0bGluZShsbnVtKQorICAgIGlmIGxpbmUgPX4gJ15ccypbI3tdJworICAgICAgc2V0ZiBjbAorICAgICAgcmV0dXJuCisgICAgZWxzZWlmIGxpbmUgIX4gJ15ccyokJworICAgICAgIiBOb3QgYSBibGFuayBsaW5lLCBub3QgYSBjb21tZW50LCBhbmQgbm90IGEgYmxvY2sgc3RhcnQsCisgICAgICAiIHNvIGRvZXNuJ3QgbG9vayBsaWtlIHZhbGlkIGNsIGNvZGUuCisgICAgICBicmVhaworICAgIGVuZGlmCisgICAgbGV0IGxudW0gPSBsbnVtICsgMQorICBlbmR3CisgIHNldGYgZHRkCitlbmRmdW4KKworIiBDbGlwcGVyIChvciBGb3hQcm8pCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wcmcKKwlcIGlmIGV4aXN0cygiZzpmaWxldHlwZV9wcmciKSB8CisJXCAgIGV4ZSAic2V0ZiAiIC4gZzpmaWxldHlwZV9wcmcgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgY2xpcHBlciB8CisJXCBlbmRpZgorCisiIENvYm9sCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jYmwsKi5jb2IsKi5jcHksKi5saWIJc2V0ZiBjb2JvbAorCisiIENvbGQgRnVzaW9uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jZm0sKi5jZmksKi5jZmMJCXNldGYgY2YKKworIiBDb25maWd1cmUgc2NyaXB0cworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGNvbmZpZ3VyZS5pbixjb25maWd1cmUuYWMgc2V0ZiBjb25maWcKKworIiBXaWxkUGFja2V0cyBFdGhlclBlZWsgRGVjb2RlcgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZGNkCQkJc2V0ZiBkY2QKKworIiBFbmxpZ2h0ZW5tZW50IGNvbmZpZ3VyYXRpb24gZmlsZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqZW5saWdodGVubWVudC8qLmNmZwlzZXRmIGMKKworIiBFdGVybQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICpFdGVybS8qLmNmZwkJc2V0ZiBldGVybQorCisiIEx5bnggY29uZmlnIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgbHlueC5jZmcJCQlzZXRmIGx5bngKKworIiBRdWFrZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICpiYXNlcVsyLTNdLyouY2ZnLCppZDEvKi5jZmcJc2V0ZiBxdWFrZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICpxdWFrZVsxLTNdLyouY2ZnCQkJc2V0ZiBxdWFrZQorCisiIFF1YWtlIEMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnFjCQkJc2V0ZiBjCisKKyIgQ29uZmlndXJlIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jZmcJCQlzZXRmIGNmZworCisiIENvbW11bmljYXRpbmcgU2VxdWVudGlhbCBQcm9jZXNzZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNzcCwqLmZkcgkJc2V0ZiBjc3AKKworIiBDVVBMIGxvZ2ljIGRlc2NyaXB0aW9uIGFuZCBzaW11bGF0aW9uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wbGQJCQlzZXRmIGN1cGwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNpCQkJc2V0ZiBjdXBsc2ltCisKKyIgRGViaWFuIENvbnRyb2wKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2RlYmlhbi9jb250cm9sCQlzZXRmIGRlYmNvbnRyb2wKKworIiBST0NLTGludXggcGFja2FnZSBkZXNjcmlwdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZGVzYwkJCXNldGYgZGVzYworCisiIHRoZSBEIGxhbmd1YWdlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5kCQkJc2V0ZiBkCisKKyIgRGVza3RvcCBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZGVza3RvcCwuZGlyZWN0b3J5CXNldGYgZGVza3RvcAorCisiIERpZmYgZmlsZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRpZmYsKi5yZWosKi5wYXRjaAlzZXRmIGRpZmYKKworIiBEaXJjb2xvcnMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuZGlyX2NvbG9ycywvZXRjL0RJUl9DT0xPUlMJc2V0ZiBkaXJjb2xvcnMKKworIiBEaXZhICh3aXRoIFNraWxsKSBvciBJbnN0YWxsU2hpZWxkCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ydWwKKwlcIGlmIGdldGxpbmUoMSkuZ2V0bGluZSgyKS5nZXRsaW5lKDMpLmdldGxpbmUoNCkuZ2V0bGluZSg1KS5nZXRsaW5lKDYpID1+PyAnSW5zdGFsbFNoaWVsZCcgfAorCVwgICBzZXRmIGlzaGQgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgZGl2YSB8CisJXCBlbmRpZgorCisiIERDTCAoRGlnaXRhbCBDb21tYW5kIExhbmd1YWdlIC0gdm1zKSBvciBETlMgem9uZSBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jb20KKwlcIGlmIGdldGxpbmUoMSkuZ2V0bGluZSgyKSA9fiAnJE9SSUdJTlx8JFRUTFx8SU5ccypTT0EnCisJXAl8fCBnZXRsaW5lKDEpLmdldGxpbmUoMikuZ2V0bGluZSgzKS5nZXRsaW5lKDQpID1+ICdCSU5ELipuYW1lZCcKKwlcIHwgc2V0ZiBkbnMgfCBlbHNlIHwgc2V0ZiBkY2wgfCBlbmRpZgorCisiIERPVAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZG90CQkJc2V0ZiBkb3QKKworIiBEeWxhbiAtIGxpZCBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubGlkCQkJc2V0ZiBkeWxhbmxpZAorCisiIER5bGFuIC0gaW50ciBmaWxlcyAobWVsYW5nZSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmludHIJCQlzZXRmIGR5bGFuaW50cgorCisiIER5bGFuCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5keWxhbgkJCXNldGYgZHlsYW4KKworIiBNaWNyb3NvZnQgTW9kdWxlIERlZmluaXRpb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRlZgkJCXNldGYgZGVmCisKKyIgRHJhY3VsYQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZHJhYywqLmRyYywqbHZzLCpscGUJc2V0ZiBkcmFjdWxhCisKKyIgZHNsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5kc2wJCQlzZXRmIGRzbAorCisiIERURCAoRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uIGZvciBYTUwpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5kdGQJCQlzZXRmIGR0ZAorCisiIEVESUYgKCouZWRmLCouZWRpZiwqLmVkbiwqLmVkbykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmVkXChmXHxpZlx8blx8b1wpCXNldGYgZWRpZgorCisiIEVtYmVkaXggQ29tcG9uZW50IERlc2NyaXB0aW9uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5lY2QJCQlzZXRmIGVjZAorCisiIEVpZmZlbCBvciBTcGVjbWFuCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5lLCouRQkJCWNhbGwgRlRDaGVja19lKCkKKworIiBFbGlua3MgY29uZmlndXJhdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL2VsaW5rcy5jb25mLCovLmVsaW5rcy9lbGlua3MuY29uZglzZXRmIGVsaW5rcworCitmdW4hIEZUQ2hlY2tfZSgpCisgIGxldCBuID0gMQorICB3aGlsZSBuIDwgMTAwICYmIG4gPCBsaW5lKCIkIikKKyAgICBpZiBnZXRsaW5lKG4pID1+ICJeXFxzKlxcKDwnXFx8Jz5cXClcXHMqJCIKKyAgICAgIHNldGYgc3BlY21hbgorICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgICBsZXQgbiA9IG4gKyAxCisgIGVuZHdoaWxlCisgIHNldGYgZWlmZmVsCitlbmRmdW4KKworIiBFUmljc3NvbiBMQU5HdWFnZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZXJsCQkJc2V0ZiBlcmxhbmcKKworIiBFbG0gRmlsdGVyIFJ1bGVzIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBmaWx0ZXItcnVsZXMJCXNldGYgZWxtZmlsdAorCisiIEVTUUwtQworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZWMsKi5FQwkJCXNldGYgZXNxbGMKKworIiBFc3NiYXNlIHNjcmlwdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY3NjCQkJc2V0ZiBjc2MKKworIiBFeGltCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgZXhpbS5jb25mCQkJc2V0ZiBleGltCisKKyIgRXhwZWN0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5leHAJCQlzZXRmIGV4cGVjdAorCisiIEV4cG9ydHMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBleHBvcnRzCQkJc2V0ZiBleHBvcnRzCisKKyIgRmV0Y2htYWlsIFJDIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuZmV0Y2htYWlscmMJCXNldGYgZmV0Y2htYWlsCisKKyIgRm9jdXMgRXhlY3V0YWJsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZmV4LCouZm9jZXhlYwkJc2V0ZiBmb2NleGVjCisKKyIgRm9jdXMgTWFzdGVyIGZpbGUgKGJ1dCBub3QgZm9yIGF1dG8ubWFzdGVyKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGF1dG8ubWFzdGVyCQlzZXRmIGNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1hcywqLm1hc3RlcgkJc2V0ZiBtYXN0ZXIKKworIiBGb3J0aAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZnMsKi5mdAkJCXNldGYgZm9ydGgKKworIiBGb3J0cmFuCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5mLCouRiwqLmZvciwqLmZwcCwqLmZ0biwqLmY3NywqLkY3NywqLmY5MCwqLkY5MCwqLmY5NSwqLkY5NQlzZXRmIGZvcnRyYW4KKworIiBGU3RhYgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGZzdGFiCQkJc2V0ZiBmc3RhYgorCisiIEdEQiBjb21tYW5kIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmdkYmluaXQJCQlzZXRmIGdkYgorCisiIEdETU8KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1vLCouZ2RtbwkJc2V0ZiBnZG1vCisKKyIgR2VkY29tCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5nZWQJCQlzZXRmIGdlZGNvbQorCisiIEdrcmVsbG1yYworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGdrcmVsbG1yYyxna3JlbGxtcmNfPwlzZXRmIGdrcmVsbG1yYworCisiIEdQIHNjcmlwdHMgKDIuMCBhbmQgb253YXJkKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZ3AJCQlzZXRmIGdwCisKKyIgR1BHCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi8uZ251cGcvb3B0aW9ucwkJc2V0ZiBncGcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLy5nbnVwZy9ncGcuY29uZgkJc2V0ZiBncGcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvdXNyLyoqL2dudXBnL29wdGlvbnMuc2tlbCBzZXRmIGdwZworCisiIEdudXBsb3Qgc2NyaXB0cworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZ3BpCQkJc2V0ZiBnbnVwbG90CisKKyIgR3JBRFMgc2NyaXB0cworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZ3MJCQlzZXRmIGdyYWRzCisKKyIgR3Jvb3Z5CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ncm9vdnkJCQlzZXRmIGdyb292eQorCisiIEdOVSBTZXJ2ZXIgUGFnZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmdzcAkJCXNldGYgZ3NwCisKKyIgR1RLIFJDCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmd0a3JjLGd0a3JjCQlzZXRmIGd0a3JjCisKKyIgSGFza2VsbAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaHMJCQlzZXRmIGhhc2tlbGwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxocwkJCXNldGYgbGhhc2tlbGwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNocwkJCXNldGYgY2hhc2tlbGwKKworIiBIZXJjdWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudmMsKi5ldiwqLnJzLCouc3VtLCouZXJyc3VtCXNldGYgaGVyY3VsZXMKKworIiBIRVggKEludGVsKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaGV4LCouaDMyCQlzZXRmIGhleAorCisiIFRpbGRlIChtdXN0IGJlIGJlZm9yZSBIVE1MKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudC5odG1sCQkJc2V0ZiB0aWxkZQorCisiIEhUTUwgKC5zaHRtbCBhbmQgLnN0bSBmb3Igc2VydmVyIHNpZGUpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5odG1sLCouaHRtLCouc2h0bWwsKi5zdG0gIGNhbGwgPFNJRD5GVENoZWNrX2h0bWwoKQorCisiIERpc3Rpbmd1aXNoIGJldHdlZW4gSFRNTCBhbmQgWEhUTUwKK2Z1biEgPFNJRD5GVENoZWNrX2h0bWwoKQorICBsZXQgbiA9IDEKKyAgd2hpbGUgbiA8IDEwICYmIG4gPCBsaW5lKCIkIikKKyAgICBpZiBnZXRsaW5lKG4pID1+ICdcPERURFxzXCtYSFRNTFxzJworICAgICAgc2V0ZiB4aHRtbAorICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgICBsZXQgbiA9IG4gKyAxCisgIGVuZHdoaWxlCisgIHNldGYgaHRtbAorZW5kZnVuCisKKworIiBIVE1MIHdpdGggTTQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmh0bWwubTQJCQlzZXRmIGh0bWxtNAorCisiIEhUTUwgQ2hlZXRhaCB0ZW1wbGF0ZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudG1wbAkJCXNldGYgaHRtbGNoZWV0YWgKKworIiBIeXBlciBCdWlsZGVyCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5oYgkJCXNldGYgaGIKKworIiBJY29uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pY24JCQlzZXRmIGljb24KKworIiBJREwgKEludGVyZmFjZSBEZXNjcmlwdGlvbiBMYW5ndWFnZSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmlkbAkJCWNhbGwgPFNJRD5GVENoZWNrX2lkbCgpCisKKyIgRGlzdGluZ3Vpc2ggYmV0d2VlbiBzdGFuZGFyZCBJREwgYW5kIE1TLUlETAorZnVuISA8U0lEPkZUQ2hlY2tfaWRsKCkKKyAgbGV0IG4gPSAxCisgIHdoaWxlIG4gPCA1MCAmJiBuIDwgbGluZSgiJCIpCisgICAgaWYgZ2V0bGluZShuKSA9fiAnXlxzKmltcG9ydFxzXCsiXCh1bmtud25cfG9iamlkbFwpXC5pZGwiJworICAgICAgc2V0ZiBtc2lkbAorICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgICBsZXQgbiA9IG4gKyAxCisgIGVuZHdoaWxlCisgIHNldGYgaWRsCitlbmRmdW4KKworIiBNaWNyb3NvZnQgSURMIChJbnRlcmZhY2UgRGVzY3JpcHRpb24gTGFuZ3VhZ2UpICBBbHNvICouaWRsCisiIE1PRiA9IFdNSSAoV2luZG93cyBNYW5hZ2VtZW50IEluc3RydW1lbnRhdGlvbikgTWFuYWdlZCBPYmplY3QgRm9ybWF0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5vZGwsKi5tb2YJCXNldGYgbXNpZGwKKworIiBJY2V3bSBtZW51CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi8uaWNld20vbWVudQkJc2V0ZiBpY2VtZW51CisKKyIgSW5mb3JtCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmluZGVudC5wcm8JCXNldGYgaW5kZW50CisKKyIgSURMIChJbnRlcmFjdGl2ZSBEYXRhIExhbmd1YWdlKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucHJvCQkJc2V0ZiBpZGxhbmcKKworIiBJbmZvcm0KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmluZiwqLklORgkJc2V0ZiBpbmZvcm0KKworIiBJbmZvcm1peCA0R0wgKHNvdXJjZSAtIGNhbm9uaWNhbCwgaW5jbHVkZSBmaWxlLCBJNEdMK000IHByZXByb2MuKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouNGdsLCouNGdoLCoubTRnbAlzZXRmIGZnbAorCisiIC5JTkkgZmlsZSBmb3IgTVNET1MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmluaQkJCXNldGYgZG9zaW5pCisKKyIgU3lzViBJbml0dGFiCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgaW5pdHRhYgkJCXNldGYgaW5pdHRhYgorCisiIElubm8gU2V0dXAKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmlzcwkJCXNldGYgaXNzCisKKyIgSkFMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5qYWwsKi5KQUwJCXNldGYgamFsCisKKyIgSmFtCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5qcGwsKi5qcHIJCXNldGYgamFtCisKKyIgSmF2YQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouamF2YSwqLmphdgkJc2V0ZiBqYXZhCisKKyIgSmF2YUNDCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5qaiwqLmpqdAkJc2V0ZiBqYXZhY2MKKworIiBKYXZhU2NyaXB0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5qcywqLmphdmFzY3JpcHQJCXNldGYgamF2YXNjcmlwdAorCisiIEphdmEgU2VydmVyIFBhZ2VzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5qc3AJCQlzZXRmIGpzcAorCisiIEphdmEgUHJvcGVydGllcyByZXNvdXJjZSBmaWxlIChub3RlOiBkb2Vzbid0IGNhdGNoIGZvbnQucHJvcGVydGllcy5wbCkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnByb3BlcnRpZXMsKi5wcm9wZXJ0aWVzXz8/LCoucHJvcGVydGllc18/P18/PywqLnByb3BlcnRpZXNfPz9fPz9fKglzZXRmIGpwcm9wZXJ0aWVzCisKKyIgSmVzcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY2xwCQkJc2V0ZiBqZXNzCisKKyIgSmdyYXBoCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5qZ3IJCQlzZXRmIGpncmFwaAorCisiIEtpeHRhcnQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmtpeAkJCXNldGYga2l4CisKKyIgS2ltd2l0dVsrK10KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmsJCQlzZXRmIGt3dAorCisiIEtERSBzY3JpcHQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmtzCQkJc2V0ZiBrc2NyaXB0CisKKyIgTGFjZSAoSVNFKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYWNlLCouQUNFCQlzZXRmIGxhY2UKKworIiBMYXR0ZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubGF0dGUsKi5sdGUJCXNldGYgbGF0dGUKKworIiBMYW1iZGFQcm9sb2cgKCoubW9kIHRvbywgc2VlIE1vZHNpbSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNpZwkJCXNldGYgbHByb2xvZworCisiIExEQVAgTERJRgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubGRpZgkJCXNldGYgbGRpZgorCisiIExleAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubGV4LCoubAkJCXNldGYgbGV4CisKKyIgTGliYW8KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL2xpYmFvLmNvbmYsKi8ubGliYW8Jc2V0ZiBsaWJhbworCisiIExGVFAKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBsZnRwLmNvbmYsLmxmdHByYywqbGZ0cC9yYwlzZXRmIGxmdHAKKworIiBMaWZlbGluZXMgKG9yIExleCBmb3IgQysrISkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxsCQkJc2V0ZiBsaWZlbGluZXMKKworIiBMaWxvOiBMaW51eCBsb2FkZXIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBsaWxvLmNvbmYqCQlzZXRmIGxpbG8KKworIiBMaXNwICgqLmVsID0gRUxpc3AsICouY2wgPSBDb21tb24gTGlzcCwgKi5qbCA9IGxpYnJlcCBMaXNwKQoraWYgaGFzKCJmbmFtZV9jYXNlIikKKyAgYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubHNwLCoubGlzcCwqLmVsLCouY2wsKi5qbCwqLkwsLmVtYWNzLC5zYXdmaXNocmMgc2V0ZiBsaXNwCitlbHNlCisgIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxzcCwqLmxpc3AsKi5lbCwqLmNsLCouamwsLmVtYWNzLC5zYXdmaXNocmMgc2V0ZiBsaXNwCitlbmRpZgorCisiIExpdGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxpdGUsKi5sdAkJc2V0ZiBsaXRlCisKKyIgTG9ndGFsaworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubGd0CQkJc2V0ZiBsb2d0YWxrCisKKyIgTE9UT1MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxvdCwqLmxvdG9zCQlzZXRmIGxvdG9zCisKKyIgTG91dCAoYWxzbzogKi5sdCkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxvdSwqLmxvdXQJCXNldGYgbG91dAorCisiIEx1YQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubHVhCQkJc2V0ZiBsdWEKKworIiBMeW54IHN0eWxlIGZpbGUgKG9yIExvdHVzU2NyaXB0ISkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxzcwkJCXNldGYgbHNzCisKKyIgTTQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm00CisJXCBpZiBleHBhbmQoIjxhZmlsZT4iKSAhfj8gJ2h0bWwubTQkXHxmdndtMnJjJyB8IHNldGYgbTQgfCBlbmRpZgorCisiIE1hR2ljIFBvaW50CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tZ3AJCQlzZXRmIG1ncAorCisiIE1haWwgKGZvciBFbG0sIHRybiwgbXV0dCwgcm4sIHNscm4pCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgc25kLlxkXCssLmxldHRlciwubGV0dGVyLlxkXCssLmZvbGxvd3VwLC5hcnRpY2xlLC5hcnRpY2xlLlxkXCsscGljby5cZFwrLG11dHQtKi1cd1wrLG11dHRcd1x7Nlx9LGFlXGRcKy50eHQsL3RtcC9TTFJOWzAtOUEtWi5dXCssKi5lbWwgc2V0ZiBtYWlsCisKKyIgTWFpbGNhcCBjb25maWd1cmF0aW9uIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAubWFpbGNhcCxtYWlsY2FwCQlzZXRmIG1haWxjYXAKKworIiBNYWtlZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICpbbU1dYWtlZmlsZSwqLm1rLCoubWFrLCouZHNwIHNldGYgbWFrZQorCisiIE1ha2VJbmRleAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaXN0LCoubXN0CQlzZXRmIGlzdAorCisiIE1hbnBhZ2UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1hbgkJCXNldGYgbWFuCisKKyIgTWFwbGUgVgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubXYsKi5tcGwsKi5td3MJCXNldGYgbWFwbGUKKworIiBNYXNvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubWFzb24sKi5taHRtbAkJc2V0ZiBtYXNvbgorCisiIE1hdGxhYiBvciBPYmplY3RpdmUgQworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubQkJCWNhbGwgRlRDaGVja19tKCkKKworZnVuISBGVENoZWNrX20oKQorICBsZXQgbiA9IDEKKyAgd2hpbGUgbiA8IDEwCisgICAgbGV0IGxpbmUgPSBnZXRsaW5lKG4pCisgICAgaWYgbGluZSA9fiAnXlxzKlwoI1xzKlwoaW5jbHVkZVx8aW1wb3J0XClcPlx8L1wqXCknCisgICAgICBzZXRmIG9iamMKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgaWYgbGluZSA9fiAnXlxzKiUnCisgICAgICBzZXRmIG1hdGxhYgorICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgICBpZiBsaW5lID1+ICdeXHMqKFwqJworICAgICAgc2V0ZiBtbWEKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgbGV0IG4gPSBuICsgMQorICBlbmR3aGlsZQorICBzZXRmIG1hdGxhYgorZW5kZnVuCisKKyIgTWF5YSBFeHRlbnNpb24gTGFuZ3VhZ2UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1lbAkJCXNldGYgbWVsCisKKyIgTWV0YWZvbnQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1mCQkJc2V0ZiBtZgorCisiIE1ldGFQb3N0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tcAkJCXNldGYgbXAKKworIiBNTUlYIG9yIFZNUyBtYWtlZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubW1zCQkJY2FsbCBGVENoZWNrX21tcygpCisKK2Z1biEgRlRDaGVja19tbXMoKQorICBsZXQgbiA9IDEKKyAgd2hpbGUgbiA8IDEwCisgICAgbGV0IGxpbmUgPSBnZXRsaW5lKG4pCisgICAgaWYgbGluZSA9fiAnXlxzKlwoJVx8Ly9cKScgfHwgbGluZSA9fiAnXlwqJworICAgICAgc2V0ZiBtbWl4CisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGlmIGxpbmUgPX4gJ15ccyojJworICAgICAgc2V0ZiBtYWtlCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGxldCBuID0gbiArIDEKKyAgZW5kd2hpbGUKKyAgc2V0ZiBtbWl4CitlbmRmdW4KKworCisiIE1vZHNpbSBJSUkgKG9yIExhbWJkYVByb2xvZykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1vZAorCVwgaWYgZ2V0bGluZSgxKSA9fiAnXDxtb2R1bGVcPicgfAorCVwgICBzZXRmIGxwcm9sb2cgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgbW9kc2ltMyB8CisJXCBlbmRpZgorCisiIE1vZHVsYSAyCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tMiwqLkRFRiwqLk1PRCwqLm1kLCoubWkgc2V0ZiBtb2R1bGEyCisKKyIgTW9kdWxhIDMgKC5tMywgLmkzLCAubWcsIC5pZykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLlttaV1bM2ddCQlzZXRmIG1vZHVsYTMKKworIiBNb25rCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pc2MsKi5tb25rLCouc3NjLCoudHNjCXNldGYgbW9uaworCisiIE1PTworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubW9vCQkJc2V0ZiBtb28KKworIiBNb2Rjb25mCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9tb2R1bGVzLmNvbmYsL2V0Yy9jb25mLm1vZHVsZXMJc2V0ZiBtb2Rjb25mCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9tb2R1dGlscy8qCisJXCBpZiBleGVjdXRhYmxlKGV4cGFuZCgiPGFmaWxlPiIpKSAhPSAxIHwgc2V0ZiBtb2Rjb25mIHwgZW5kaWYKKworIiBNcGxheWVyIGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIG1wbGF5ZXIuY29uZiwqLy5tcGxheWVyL2NvbmZpZwlzZXRmIG1wbGF5ZXJjb25mCisKKyIgTW90ZXJvbGEgUyByZWNvcmQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnMxOSwqLnMyOCwqLnMzNwkJc2V0ZiBzcmVjCisKKyIgTXNxbAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubXNxbAkJCXNldGYgbXNxbAorCisiIE15c3FsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5teXNxbAkJCXNldGYgbXlzcWwKKworIiBNJCBSZXNvdXJjZSBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucmMJCQlzZXRmIHJjCisKKyIgTXVzaAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubXVzaAkJCXNldGYgbXVzaAorCisiIE11dHQgc2V0dXAgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5tdXR0cmMqLCovLm11dHQvbXV0dHJjKixNdXR0cmMJc2V0ZiBtdXR0cmMKKworIiBOYXN0cmFuIGlucHV0L0RNQVAKKyJhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5kYXQJCQlzZXRmIG5hc3RyYW4KKworIiBOYXR1cmFsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5OU1tBQ0dMTU5QU10JCXNldGYgbmF0dXJhbAorCisiIE5vdmVsbCBuZXR3YXJlIGJhdGNoIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5uY2YJCQlzZXRmIG5jZgorCisiIE5yb2ZmL1Ryb2ZmICgqLm1zIGFuZCAqLnQgYXJlIGNoZWNrZWQgYmVsb3cpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tZQorCVwgaWYgZXhwYW5kKCI8YWZpbGU+IikgIT0gInJlYWQubWUiICYmIGV4cGFuZCgiPGFmaWxlPiIpICE9ICJjbGljay5tZSIgfAorCVwgICBzZXRmIG5yb2ZmIHwKKwlcIGVuZGlmCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50ciwqLm5yLCoucm9mZiwqLnRtYWMsKi5tb20Jc2V0ZiBucm9mZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouWzEtOV0JCQljYWxsIDxTSUQ+RlRucm9mZigpCisKKyIgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgb25lIG9mIHRoZSBmaXJzdCBmaXZlIGxpbmVzIHN0YXJ0IHdpdGggYSBkb3QuICBJbgorIiB0aGF0IGNhc2UgaXQgaXMgcHJvYmFibHkgYW4gbnJvZmYgZmlsZTogJ2ZpbGV0eXBlJyBpcyBzZXQgYW5kIDEgaXMgcmV0dXJuZWQuCitmdW4hIDxTSUQ+RlRucm9mZigpCisgIGlmIGdldGxpbmUoMSlbMF0gLiBnZXRsaW5lKDIpWzBdIC4gZ2V0bGluZSgzKVswXSAuIGdldGxpbmUoNClbMF0gLiBnZXRsaW5lKDUpWzBdID1+ICdcLicKKyAgICBzZXRmIG5yb2ZmCisgICAgcmV0dXJuIDEKKyAgZW5kaWYKKyAgcmV0dXJuIDAKK2VuZGZ1bgorCisiIE5yb2ZmIG9yIE9iamVjdGl2ZSBDKysKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1tCQkJY2FsbCA8U0lEPkZUY2hlY2tfbW0oKQorCitmdW4hIDxTSUQ+RlRjaGVja19tbSgpCisgIGxldCBuID0gMQorICB3aGlsZSBuIDwgMTAKKyAgICBsZXQgbGluZSA9IGdldGxpbmUobikKKyAgICBpZiBsaW5lID1+ICdeXHMqXCgjXHMqXChpbmNsdWRlXHxpbXBvcnRcKVw+XHwvXCpcKScKKyAgICAgIHNldGYgb2JqY3BwCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGxldCBuID0gbiArIDEKKyAgZW5kd2hpbGUKKyAgc2V0ZiBucm9mZgorZW5kZnVuCisKKyIgTm90IFF1aXRlIEMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm5xYwkJCXNldGYgbnFjCisKKyIgTlNJUworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubnNpCQkJc2V0ZiBuc2lzCisKKyIgT0NBTUwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1sLCoubWxpLCoubWxsLCoubWx5CXNldGYgb2NhbWwKKworIiBPY2NhbQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoub2NjCQkJc2V0ZiBvY2NhbQorCisiIE9tbmltYXJrCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi54b20sKi54aW4JCXNldGYgb21uaW1hcmsKKworIiBPcGVuUk9BRAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoub3IJCQlzZXRmIG9wZW5yb2FkCisKKyIgT1BMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5bT29dW1BwXVtMbF0JCXNldGYgb3BsCisKKyIgT3JhY2xlIGNvbmZpZyBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5vcmEJCQlzZXRmIG9yYQorCisiIFBhY2tldCBmaWx0ZXIgY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHBmLmNvbmYJCQlzZXRmIHBmCisKKyIgUEFwcAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGFwcCwqLnB4bWwsKi5weHNsCXNldGYgcGFwcAorCisiIFBhc2NhbCAoYWxzbyAqLnApCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wYXMJCQlzZXRmIHBhc2NhbAorCisiIERlbHBoaSBwcm9qZWN0IGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRwcgkJCXNldGYgcGFzY2FsCisKKyIgUGVybAoraWYgaGFzKCJmbmFtZV9jYXNlIikKKyAgYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGwsKi5QTAkJY2FsbCBGVENoZWNrX3BsKCkKK2Vsc2UKKyAgYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGwJCQljYWxsIEZUQ2hlY2tfcGwoKQorZW5kaWYKKworZnVuISBGVENoZWNrX3BsKCkKKyAgaWYgZXhpc3RzKCJnOmZpbGV0eXBlX3BsIikKKyAgICBleGUgInNldGYgIiAuIGc6ZmlsZXR5cGVfcGwKKyAgZWxzZQorICAgICIgcmVjb2duaXplIFByb2xvZyBieSBzcGVjaWZpYyB0ZXh0IGluIHRoZSBmaXJzdCBub24tZW1wdHkgbGluZQorICAgICIgcmVxdWlyZSBhIGJsYW5rIGFmdGVyIHRoZSAnJScgYmVjYXVzZSBQZXJsIHVzZXMgIiVsaXN0IiBhbmQgIiV0cmFuc2xhdGUiCisgICAgbGV0IGwgPSBnZXRsaW5lKG5leHRub25ibGFuaygxKSkKKyAgICBpZiBsID1+ICdcPHByb2xvZ1w+JyB8fCBsID1+ICdeXHMqXCglXCtcKFxzXHwkXClcfC9cKlwpJyB8fCBsID1+ICc6LScKKyAgICAgIHNldGYgcHJvbG9nCisgICAgZWxzZQorICAgICAgc2V0ZiBwZXJsCisgICAgZW5kaWYKKyAgZW5kaWYKK2VuZGZ1bgorCisiIFBlcmwsIFhQTSBvciBYUE0yCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wbQorCVwgaWYgZ2V0bGluZSgxKSA9fiAiWFBNMiIgfAorCVwgICBzZXRmIHhwbTIgfAorCVwgZWxzZWlmIGdldGxpbmUoMSkgPX4gIlhQTSIgfAorCVwgICBzZXRmIHhwbSB8CisJXCBlbHNlIHwKKwlcICAgc2V0ZiBwZXJsIHwKKwlcIGVuZGlmCisKKyIgUGVybCBQT0QKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBvZAkJCXNldGYgcG9kCisKKyIgUGhwMworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGhwLCoucGhwMwkJc2V0ZiBwaHAKKworIiBQaHRtbAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGh0bWwJCQlzZXRmIHBodG1sCisKKyIgUGlrZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGlrZSwqLmxwYywqLnVscGMsKi5wbW9kIHNldGYgcGlrZQorCisiIFBpbmZvIGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL3BpbmZvcmMsKi8ucGluZm9yYwlzZXRmIHBpbmZvCisKKyIgUGFsbSBSZXNvdXJjZSBjb21waWxlcgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucmNwCQkJc2V0ZiBwaWxyYworCisiIFBpbmUgY29uZmlnCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLnBpbmVyYyxwaW5lcmMsLnBpbmVyY2V4LHBpbmVyY2V4CQlzZXRmIHBpbmUKKworIiBQTC9NIChhbHNvOiAqLmlucCkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBsbSwqLnAzNiwqLnBhYwkJc2V0ZiBwbG0KKworIiBQTC9TUUwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBscywqLnBsc3FsCQlzZXRmIHBsc3FsCisKKyIgUExQCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wbHAJCQlzZXRmIHBscAorCisiIFBPIGFuZCBQTyB0ZW1wbGF0ZSAoR05VIGdldHRleHQpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wbywqLnBvdAkJc2V0ZiBwbworCisiIFBvc3RmaXggbWFpbiBjb25maWcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBtYWluLmNmCQkJc2V0ZiBwZm1haW4KKworIiBQb3N0U2NyaXB0ICgrIGZvbnQgZmlsZXMsIGVuY2Fwc3VsYXRlZCBQb3N0U2NyaXB0LCBBZG9iZSBJbGx1c3RyYXRvcikKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBzLCoucGZhLCouYWZtLCouZXBzLCouZXBzZiwqLmVwc2ksKi5haQkgIHNldGYgcG9zdHNjcgorCisiIFBvc3RTY3JpcHQgUHJpbnRlciBEZXNjcmlwdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucHBkCQkJc2V0ZiBwcGQKKworIiBQb3ZyYXkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBvdgkJCXNldGYgcG92CisKKyIgUG92cmF5IGNvbmZpZ3VyYXRpb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAucG92cmF5cmMJCQlzZXRmIHBvdmluaQorCisiIFBvdnJheSwgUEhQIG9yIGFzc2VtYmx5CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pbmMJCQljYWxsIEZUQ2hlY2tfaW5jKCkKKworZnVuISBGVENoZWNrX2luYygpCisgIGlmIGV4aXN0cygiZzpmaWxldHlwZV9pbmMiKQorICAgIGV4ZSAic2V0ZiAiIC4gZzpmaWxldHlwZV9pbmMKKyAgZWxzZQorICAgIGxldCBsaW5lcyA9IGdldGxpbmUoMSkuZ2V0bGluZSgyKS5nZXRsaW5lKDMpCisgICAgaWYgbGluZXMgPX4/ICJwZXJsc2NyaXB0IgorICAgICAgc2V0ZiBhc3BwZXJsCisgICAgZWxzZWlmIGxpbmVzID1+ICI8JSIKKyAgICAgIHNldGYgYXNwdmJzCisgICAgZWxzZWlmIGxpbmVzID1+ICI8PyIKKyAgICAgIHNldGYgcGhwCisgICAgZWxzZQorICAgICAgY2FsbCBGVENoZWNrX2FzbXN5bnRheCgpCisgICAgICBpZiBleGlzdHMoImI6YXNtc3ludGF4IikKKwlleGUgInNldGYgIiAuIGI6YXNtc3ludGF4CisgICAgICBlbHNlCisJc2V0ZiBwb3YKKyAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgZW5kaWYKK2VuZGZ1bgorCisiIFByaW50Y2FwIGFuZCBUZXJtY2FwCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKnByaW50Y2FwCisJXCBsZXQgYjpwdGNhcF90eXBlID0gInByaW50IiB8IHNldGYgcHRjYXAKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqdGVybWNhcAorCVwgbGV0IGI6cHRjYXBfdHlwZSA9ICJ0ZXJtIiB8IHNldGYgcHRjYXAKKworIiBQQ0NUUyAvIEFOVFJMCisiYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZwkJCXNldGYgYW50cmwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmcJCQlzZXRmIHBjY3RzCisKKyIgUFBXaXphcmQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLml0LCouaWgJCQlzZXRmIHBwd2l6CisKKyIgT3JhY2xlIFBybypDL0MrKworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5wYwkJCXNldGYgcHJvYworCisiIFByb2NtYWlsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLnByb2NtYWlsLC5wcm9jbWFpbHJjCXNldGYgcHJvY21haWwKKworIiBQcm9ncmVzcyBvciBDV0VCCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi53CQkJY2FsbCA8U0lEPkZUcHJvZ3Jlc3NfY3dlYigpCisKK2Z1bmN0aW9uISA8U0lEPkZUcHJvZ3Jlc3NfY3dlYigpCisgIGlmIGV4aXN0cygiZzpmaWxldHlwZV93IikKKyAgICBleGUgInNldGYgIiAuIGc6ZmlsZXR5cGVfdworICAgIHJldHVybgorICBlbmRpZgorICBpZiBnZXRsaW5lKDEpID1+ICcmQU5BTFlaRScgfHwgZ2V0bGluZSgzKSA9fiAnJkdMT0JBTC1ERUZJTkUnCisgICAgc2V0ZiBwcm9ncmVzcworICBlbHNlCisgICAgc2V0ZiBjd2ViCisgIGVuZGlmCitlbmRmdW4KKworIiBQcm9ncmVzcyBvciBhc3NlbWJseQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaQkJCWNhbGwgPFNJRD5GVHByb2dyZXNzX2FzbSgpCisKK2Z1bmN0aW9uISA8U0lEPkZUcHJvZ3Jlc3NfYXNtKCkKKyAgaWYgZXhpc3RzKCJnOmZpbGV0eXBlX2kiKQorICAgIGV4ZSAic2V0ZiAiIC4gZzpmaWxldHlwZV9pCisgICAgcmV0dXJuCisgIGVuZGlmCisgICIgVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIGFuIGFzc2VtYmx5IGNvbW1lbnQgdGhlIGZpcnN0IHRlbiBsaW5lcy4KKyAgIiBJZiBub3QgZm91bmQsIGFzc3VtZSBQcm9ncmVzcy4KKyAgbGV0IGxudW0gPSAxCisgIHdoaWxlIGxudW0gPD0gMTAKKyAgICBsZXQgbGluZSA9IGdldGxpbmUobG51bSkKKyAgICBpZiBsaW5lID1+ICdeXHMqOycgfHwgbGluZSA9fiAnXlwqJworICAgICAgY2FsbCBGVENoZWNrX2FzbSgpCisgICAgICByZXR1cm4KKyAgICBlbHNlaWYgbGluZSAhfiAnXlxzKiQnIHx8IGxpbmUgPX4gJ14vXConCisgICAgICAiIE5vdCBhbiBlbXB0eSBsaW5lOiBEb2Vzbid0IGxvb2sgbGlrZSB2YWxpZCBhc3NlbWJseSBjb2RlLgorICAgICAgIiBPciBpdCBsb29rcyBsaWtlIGEgUHJvZ3Jlc3MgLyogY29tbWVudAorICAgICAgYnJlYWsKKyAgICBlbmRpZgorICAgIGxldCBsbnVtID0gbG51bSArIDEKKyAgZW5kdworICBzZXRmIHByb2dyZXNzCitlbmRmdW4KKworIiBQcm9ncmVzcyBvciBQYXNjYWwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnAJCQljYWxsIDxTSUQ+RlRwcm9ncmVzc19wYXNjYWwoKQorCitmdW5jdGlvbiEgPFNJRD5GVHByb2dyZXNzX3Bhc2NhbCgpCisgIGlmIGV4aXN0cygiZzpmaWxldHlwZV9wIikKKyAgICBleGUgInNldGYgIiAuIGc6ZmlsZXR5cGVfcAorICAgIHJldHVybgorICBlbmRpZgorICAiIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciB2YWxpZCBQYXNjYWwgc3ludGF4IGluIHRoZSBmaXJzdCB0ZW4gbGluZXMuCisgICIgTG9vayBmb3IgZWl0aGVyIGFuIG9wZW5pbmcgY29tbWVudCBvciBhIHByb2dyYW0gc3RhcnQuCisgICIgSWYgbm90IGZvdW5kLCBhc3N1bWUgUHJvZ3Jlc3MuCisgIGxldCBsbnVtID0gMQorICB3aGlsZSBsbnVtIDw9IDEwCisgICAgbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCisgICAgaWYgbGluZSA9fiAnXlxzKlwocHJvZ3JhbVx8cHJvY2VkdXJlXHxmdW5jdGlvblx8Y29uc3RcfHR5cGVcfHZhclwpXD4nCisJXCB8fCBsaW5lID1+ICdeXHMqeycgfHwgbGluZSA9fiAnXlxzKihcKicKKyAgICAgIHNldGYgcGFzY2FsCisgICAgICByZXR1cm4KKyAgICBlbHNlaWYgbGluZSAhfiAnXlxzKiQnIHx8IGxpbmUgPX4gJ14vXConCisgICAgICAiIE5vdCBhbiBlbXB0eSBsaW5lOiBEb2Vzbid0IGxvb2sgbGlrZSB2YWxpZCBQYXNjYWwgY29kZS4KKyAgICAgICIgT3IgaXQgbG9va3MgbGlrZSBhIFByb2dyZXNzIC8qIGNvbW1lbnQKKyAgICAgIGJyZWFrCisgICAgZW5kaWYKKyAgICBsZXQgbG51bSA9IGxudW0gKyAxCisgIGVuZHcKKyAgc2V0ZiBwcm9ncmVzcworZW5kZnVuCisKKworIiBTb2Z0d2FyZSBEaXN0cmlidXRvciBQcm9kdWN0IFNwZWNpZmljYXRpb24gRmlsZSAoUE9TSVggMTM4Ny4yLTE5OTUpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wc2YJCQlzZXRmIHBzZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIElOREVYLElORk8KKwlcIGlmIGdldGxpbmUoMSkgPX4gJ15ccypcKGRpc3RyaWJ1dGlvblx8aW5zdGFsbGVkX3NvZnR3YXJlXHxyb290XHxidW5kbGVcfHByb2R1Y3RcKVxzKiQnIHwKKwlcICAgc2V0ZiBwc2YgfAorCVwgZW5kaWYKKworIiBQcm9sb2cKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBkYgkJCXNldGYgcHJvbG9nCisKKyIgUHlyZXgKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnB5eCwqLnB4ZAkJc2V0ZiBweXJleAorCisiIFB5dGhvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucHksKi5weXcJCXNldGYgcHl0aG9uCisKKyIgUmFkaWFuY2UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnJhZCwqLm1hdAkJc2V0ZiByYWRpYW5jZQorCisiIFJhdHBvaXNvbiBjb25maWcvY29tbWFuZCBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5yYXRwb2lzb25yYyxyYXRwb2lzb25yYwlzZXRmIHJhdHBvaXNvbgorCisiIFJDUyBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKlwsdgkJCXNldGYgcmNzCisKKyIgUmVhZGxpbmUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuaW5wdXRyYwkJCXNldGYgcmVhZGxpbmUKKworIiBSZWdpc3RyeSBmb3IgTVMtV2luZG93cworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucmVnCisJXCBpZiBnZXRsaW5lKDEpID1+PyAnXlJFR0VESVRbMC05XSpccyokXHxeV2luZG93cyBSZWdpc3RyeSBFZGl0b3IgVmVyc2lvbiBcZCpcLlxkKlxzKiQnIHwgc2V0ZiByZWdpc3RyeSB8IGVuZGlmCisKKyIgUmVuZGVybWFuIEludGVyZmFjZSBCeXRlc3RyZWFtCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5yaWIJCQlzZXRmIHJpYgorCisiIFJleHgKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnJleHgsKi5yZXgJCXNldGYgcmV4eAorCisiIFIgKFNwbHVzKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucywqLlMJCQlzZXRmIHIKKworIiBSZXh4LCBSZWJvbCBvciBSCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5yLCouUgkJCWNhbGwgPFNJRD5GVENoZWNrX3IoKQorCitmdW4hIDxTSUQ+RlRDaGVja19yKCkKKyAgaWYgZ2V0bGluZSgxKSA9fiAnXlJFQk9MJworICAgIHNldGYgcmVib2wKKyAgZWxzZQorICAgIGxldCBuID0gMQorICAgIGxldCBtYXggPSBsaW5lKCIkIikKKyAgICBpZiBtYXggPiA1MAorICAgICAgbGV0IG1heCA9IDUwCisgICAgZW5kaWYKKyAgICB3aGlsZSBuIDwgbWF4CisgICAgICAiIFIgaGFzICMgY29tbWVudHMKKyAgICAgIGlmIGdldGxpbmUobikgPX4gJ15ccyojJworCXNldGYgcgorCWJyZWFrCisgICAgICBlbmRpZgorICAgICAgIiBSZXh4IGhhcyAvKiBjb21tZW50cyAqLworICAgICAgaWYgZ2V0bGluZShuKSA9fiAnXlxzKi9cKicKKwlzZXRmIHJleHgKKwlicmVhaworICAgICAgZW5kaWYKKyAgICAgIGxldCBuID0gbiArIDEKKyAgICBlbmR3aGlsZQorICAgIGlmIG4gPj0gbWF4CisgICAgICBzZXRmIHJleHgKKyAgICBlbmRpZgorICBlbmRpZgorZW5kZnVuCisKKyIgUmVtaW5kCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLnJlbWluZGVycyoJCXNldGYgcmVtaW5kCisKKyIgUmVzb2x2LmNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCByZXNvbHYuY29uZgkJc2V0ZiByZXNvbHYKKworIiBSZWxheCBORyBDb21wYWN0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ybmMJCQlzZXRmIHJuYworCisiIFJQTC8yCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ycGwJCQlzZXRmIHJwbAorCisiIFJvYm90cy50eHQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCByb2JvdHMudHh0CQlzZXRmIHJvYm90cworCisiIFJwY2dlbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoueAkJCXNldGYgcnBjZ2VuCisKKyIgcmVTdHJ1Y3R1cmVkVGV4dCBEb2N1bWVudGF0aW9uIEZvcm1hdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucnN0CQkJc2V0ZiByc3QKKworIiBSVEYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnJ0ZgkJCXNldGYgcnRmCisKKyIgUnVieQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucmIsKi5yYncsKi5nZW0sKi5nZW1zcGVjCXNldGYgcnVieQorCisiIFMtbGFuZyAob3Igc2hhZGVyIGxhbmd1YWdlISkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNsCQkJc2V0ZiBzbGFuZworCisiIFNhbWJhIGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHNtYi5jb25mCQkJc2V0ZiBzYW1iYQorCisiIFNBUyBzY3JpcHQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNhcwkJCXNldGYgc2FzCisKKyIgU2F0aGVyCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zYQkJCXNldGYgc2F0aGVyCisKKyIgU2NpbGFiCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zY2kJCQlzZXRmIHNjaWxhYgorCisiIFNETAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc2RsLCoucHIJCXNldGYgc2RsCisKKyIgc2VkCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zZWQJCQlzZXRmIHNlZAorCisiIFNlbmRtYWlsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgc2VuZG1haWwuY2YJCXNldGYgc20KKworIiBTZW5kbWFpbCAubWMgZmlsZXMgYXJlIGFjdHVhbGx5IG00CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tYwkJCXNldGYgbTQKKworIiBTR01MCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zZ20sKi5zZ21sCisJXCBpZiBnZXRsaW5lKDEpLmdldGxpbmUoMikuZ2V0bGluZSgzKS5nZXRsaW5lKDQpLmdldGxpbmUoNSkgPX4/ICdsaW51eGRvYycgfAorCVwgICBzZXRmIHNnbWxsbnggfAorCVwgZWxzZWlmIGdldGxpbmUoMSkgPX4gJzwhRE9DVFlQRS4qRG9jQm9vaycgfHwgZ2V0bGluZSgyKSA9fiAnPCFET0NUWVBFLipEb2NCb29rJyB8CisJXCAgIGxldCBiOmRvY2JrX3R5cGU9InNnbWwiIHwKKwlcICAgc2V0ZiBkb2NiayB8CisJXCBlbHNlIHwKKwlcICAgc2V0ZiBzZ21sIHwKKwlcIGVuZGlmCisKKyIgU0dNTERFQ0wKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRlY2wsKi5kY2wsKi5kZWMKKwlcIGlmIGdldGxpbmUoMSkuZ2V0bGluZSgyKS5nZXRsaW5lKDMpID1+PyAnXjwhU0dNTCcgfAorCVwgICAgc2V0ZiBzZ21sZGVjbCB8CisJXCBlbmRpZgorCisiIFNHTUwgY2F0YWxvZyBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgc2dtbC5jYXRhbG9nKixjYXRhbG9nCXNldGYgY2F0YWxvZworCisiIFNoZWxsIHNjcmlwdHMgKHNoLCBrc2gsIGJhc2gsIGJhc2gyLCBjc2gpOyBBbGxvdyAucHJvZmlsZV9mb28gZXRjLgorIiBHZW50b28gZWJ1aWxkcyBhcmUgYWN0dWFsbHkgYmFzaCBzY3JpcHRzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmJhc2hyYyosYmFzaHJjLGJhc2guYmFzaHJjLC5iYXNoX3Byb2ZpbGUqLC5iYXNoX2xvZ291dCosKi5iYXNoLCouZWJ1aWxkIGNhbGwgU2V0RmlsZVR5cGVTSCgiYmFzaCIpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmtzaHJjKiwqLmtzaCBjYWxsIFNldEZpbGVUeXBlU0goImtzaCIpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9wcm9maWxlLC5wcm9maWxlKiwqLnNoLCouZW52IGNhbGwgU2V0RmlsZVR5cGVTSChnZXRsaW5lKDEpKQorCitmdW4hIFNldEZpbGVUeXBlU0gobmFtZSkKKyAgaWYgYTpuYW1lID1+ICdcPGtzaFw+JworICAgIGxldCBiOmlzX2tvcm5zaGVsbCA9IDEKKyAgICBpZiBleGlzdHMoImI6aXNfYmFzaCIpCisgICAgICB1bmxldCBiOmlzX2Jhc2gKKyAgICBlbmRpZgorICAgIGlmIGV4aXN0cygiYjppc19zaCIpCisgICAgICB1bmxldCBiOmlzX3NoCisgICAgZW5kaWYKKyAgZWxzZWlmIGV4aXN0cygiZzpiYXNoX2lzX3NoIikgfHwgYTpuYW1lID1+ICdcPGJhc2hcPicgfHwgYTpuYW1lID1+ICdcPGJhc2gyXD4nCisgICAgbGV0IGI6aXNfYmFzaCA9IDEKKyAgICBpZiBleGlzdHMoImI6aXNfa29ybnNoZWxsIikKKyAgICAgIHVubGV0IGI6aXNfa29ybnNoZWxsCisgICAgZW5kaWYKKyAgICBpZiBleGlzdHMoImI6aXNfc2giKQorICAgICAgdW5sZXQgYjppc19zaAorICAgIGVuZGlmCisgIGVsc2VpZiBhOm5hbWUgPX4gJ1w8c2hcPicKKyAgICBsZXQgYjppc19zaCA9IDEKKyAgICBpZiBleGlzdHMoImI6aXNfa29ybnNoZWxsIikKKyAgICAgIHVubGV0IGI6aXNfa29ybnNoZWxsCisgICAgZW5kaWYKKyAgICBpZiBleGlzdHMoImI6aXNfYmFzaCIpCisgICAgICB1bmxldCBiOmlzX2Jhc2gKKyAgICBlbmRpZgorICBlbmRpZgorICBzZXRmIHNoCitlbmRmdW4KKworIiB0Y3NoIHNjcmlwdHMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAudGNzaHJjKiwqLnRjc2gsdGNzaC50Y3NocmMsdGNzaC5sb2dpbglzZXRmIHRjc2gKKworIiBjc2ggc2NyaXB0cywgYnV0IG1pZ2h0IGFsc28gYmUgdGNzaCBzY3JpcHRzIChvbiBzb21lIHN5c3RlbXMgY3NoIGlzIHRjc2gpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmxvZ2luKiwuY3NocmMqLGNzaC5jc2hyYyxjc2gubG9naW4sY3NoLmxvZ291dCwqLmNzaCwuYWxpYXMgIGNhbGwgU2V0RmlsZVR5cGVDU0goKQorCitmdW4hIFNldEZpbGVUeXBlQ1NIKCkKKyAgaWYgZXhpc3RzKCJnOmZpbGV0eXBlX2NzaCIpCisgICAgZXhlICJzZXRmICIgLiBnOmZpbGV0eXBlX2NzaAorICBlbHNlaWYgJnNoZWxsID1+ICJ0Y3NoIgorICAgIHNldGYgdGNzaAorICBlbHNlCisgICAgc2V0ZiBjc2gKKyAgZW5kaWYKK2VuZGZ1bgorCisiIFotU2hlbGwgc2NyaXB0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLnpzaCosLnpsb2cqLC56cHJvZmlsZSwvZXRjL3pwcm9maWxlLC56ZmJmbWFya3MsLnpjb21wZHVtcCogIHNldGYgenNoCisKKyIgU2NoZW1lCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zY20sKi5zcwkJc2V0ZiBzY2hlbWUKKworIiBTY3JlZW4gUkMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuc2NyZWVucmMsc2NyZWVucmMJc2V0ZiBzY3JlZW4KKworIiBTaW11bGEKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNpbQkJCXNldGYgc2ltdWxhCisKKyIgU0lOREEKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNpbiwqLnM4NQkJc2V0ZiBzaW5kYQorCisiIFNLSUxMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pbAkJCXNldGYgc2tpbGwKKworIiBTTFJOCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLnNscm5yYwkJCXNldGYgc2xybnJjCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zY29yZQkJCXNldGYgc2xybnNjCisKKyIgU21hbGx0YWxrCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zdCwqLmNscwkJc2V0ZiBzdAorCisiIFNtYXJ0eSB0ZW1wbGF0ZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnRwbAkJCXNldGYgc21hcnR5CisKKyIgU01JTCBvciBYTUwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNtaWwKKwlcIGlmIGdldGxpbmUoMSkgPX4gJzw/XHMqeG1sLio/PicgfAorCVwgICBzZXRmIHhtbCB8CisJXCBlbHNlIHwKKwlcICAgc2V0ZiBzbWlsIHwKKwlcIGVuZGlmCisKKyIgU01JTCBvciBTTk1QIE1JQiBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zbWkKKwlcIGlmIGdldGxpbmUoMSkgPX4gJ1w8c21pbFw+JyB8CisJXCAgIHNldGYgc21pbCB8CisJXCBlbHNlIHwKKwlcICAgc2V0ZiBtaWIgfAorCVwgZW5kaWYKKworIiBTTUlUSAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc210LCouc21pdGgJCXNldGYgc21pdGgKKworIiBTbm9ib2w0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zbm8JCQlzZXRmIHNub2JvbDQKKworIiBTTk1QIE1JQiBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubWliLCoubXkJCXNldGYgbWliCisKKyIgU25vcnQgQ29uZmlndXJhdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaG9nLHNub3J0LmNvbmYsdmlzaW9uLmNvbmYsKi5ydWxlcwlzZXRmIGhvZworCisiIFNwZWMgKExpbnV4IFJQTSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNwZWMJCQlzZXRmIHNwZWMKKworIiBTcGVlZHVwIChBc3BlblRlY2ggcGxhbnQgc2ltdWxhdG9yKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc3BlZWR1cCwqLnNwZGF0YSwqLnNwZAlzZXRmIHNwdXAKKworIiBTbGljZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaWNlCQkJc2V0ZiBzbGljZQorCisiIFNwaWNlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zcCwqLnNwaWNlCQlzZXRmIHNwaWNlCisKKyIgU3B5Y2UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNweSwqLnNwaQkJc2V0ZiBzcHljZQorCisiIFNxdWlkCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgc3F1aWQuY29uZgkJc2V0ZiBzcXVpZAorCisiIFNRTCAoYWxsIGJ1dCB0aGUgZmlyc3Qgb25lIGZvciBPcmFjbGUgRGVzaWduZXIpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zcWwsKi50eWIsKi50eXAsKi50eWMsKi5wa2IsKi5wa3MJc2V0ZiBzcWwKKworIiBTUUxKCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zcWxqCQkJc2V0ZiBzcWxqCisKKyIgU1FSCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zcXIsKi5zcWkJCXNldGYgc3FyCisKKyIgT3BlblNTSCBjb25maWd1cmF0aW9uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgc3NoX2NvbmZpZywqLy5zc2gvY29uZmlnCXNldGYgc3NoY29uZmlnCisKKyIgT3BlblNTSCBzZXJ2ZXIgY29uZmlndXJhdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHNzaGRfY29uZmlnCQlzZXRmIHNzaGRjb25maWcKKworIiBTdG9yZWQgUHJvY2VkdXJlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc3RwCQkJc2V0ZiBzdHAKKworIiBTdGFuZGFyZCBNTAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc21sCQkJc2V0ZiBzbWwKKworIiBUYWRzIChvciBOcm9mZikKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnQKKwlcIGlmICE8U0lEPkZUbnJvZmYoKSB8IHNldGYgdGFkcyB8IGVuZGlmCisKKyIgVGFncworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHRhZ3MJCQlzZXRmIHRhZ3MKKworIiBUQUsKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnRhawkJCXNldGYgdGFrCisKKyIgVGNsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50Y2wsKi50aywqLml0Y2wsKi5pdGsJc2V0ZiB0Y2wKKworIiBUZWFsSW5mbworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudGxpCQkJc2V0ZiB0bGkKKworIiBUZWxpeCBTYWx0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zbHQJCQlzZXRmIHRzYWx0CisKKyIgVGVybWluZm8KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnRpCQkJc2V0ZiB0ZXJtaW5mbworCisiIFRlWAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudGV4LCoubGF0ZXgsKi5zdHksKi5kdHgsKi5sdHgsKi5iYmwJc2V0ZiB0ZXgKKworIiBUZXhpbmZvCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50ZXhpbmZvLCoudGV4aSwqLnR4aQlzZXRmIHRleGluZm8KKworIiBUZVggY29uZmlndXJhdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHRleG1mLmNuZgkJCXNldGYgdGV4bWYKKworIiBUaWR5IGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC50aWR5cmMsdGlkeXJjCQlzZXRmIHRpZHkKKworIiBURiBtdWQgY2xpZW50CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50ZiwudGZyYyx0ZnJjCQlzZXRmIHRmCisKKyIgVFNTIC0gR2VvbWV0cnkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZFBvc3QgKi50c3NnbQkJc2V0ZiB0c3NnbQorCisiIFRTUyAtIE9wdGljcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkUG9zdCAqLnRzc29wCQlzZXRmIHRzc29wCisKKyIgVFNTIC0gQ29tbWFuZCBMaW5lICh0ZW1wb3JhcnkpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWRQb3N0ICoudHNzY2wJCXNldGYgdHNzY2wKKworIiBNb3RpZiBVSVQvVUlMIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi51aXQsKi51aWwJCXNldGYgdWlsCisKKyIgVW5yZWFsU2NyaXB0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi51YwkJCXNldGYgdWMKKworIiBWZXJpbG9nIEhETAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudgkJCXNldGYgdmVyaWxvZworCisiIFZIREwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmhkbCwqLnZoZCwqLnZoZGwsKi52aGRsX1swLTldKiwqLnZiZSwqLnZzdCAgc2V0ZiB2aGRsCisKKyIgVmltIHNjcmlwdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudmltLC5leHJjLF9leHJjCQlzZXRmIHZpbQorCisiIFZpbWluZm8gZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC52aW1pbmZvLF92aW1pbmZvCQlzZXRmIHZpbWluZm8KKworIiBWaXJhdGEgQ29uZmlnIFNjcmlwdCBGaWxlCithdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5odywqLm1vZHVsZSwqLnBrZwlzZXRmIHZpcmF0YQorCisiIFZpc3VhbCBCYXNpYyAoYWxzbyB1c2VzICouYmFzKSBvciBGT1JNCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5mcm0JCQljYWxsIDxTSUQ+RlRWQigiZm9ybSIpCisKKyIgU2F4QmFzaWMgaXMgY2xvc2UgdG8gVmlzdWFsIEJhc2ljCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zYmEJCQlzZXRmIHZiCisKKyIgVmdyaW5kZWZzIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCB2Z3JpbmRlZnMJCQlzZXRmIHZncmluZGVmcworCisiIFZSTUwgVjEuMGMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLndybAkJCXNldGYgdnJtbAorCisiIFdlYm1hY3JvCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi53bQkJCXNldGYgd2VibWFjcm8KKworIiBXZ2V0IGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC53Z2V0cmMsd2dldHJjCQlzZXRmIHdnZXQKKworIiBXZWJzaXRlIE1ldGFMYW5ndWFnZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoud21sCQkJc2V0ZiB3bWwKKworIiBXaW5iYXRjaAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoud2J0CQkJc2V0ZiB3aW5iYXRjaAorCisiIFd2RGlhbAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHd2ZGlhbC5jb25mLC53dmRpYWxyYwlzZXRmIHd2ZGlhbAorCisiIENWUyBSQyBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmN2c3JjCQkJc2V0ZiBjdnNyYworCisiIENWUyBjb21taXQgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGN2c1xkXCsJCQlzZXRmIGN2cworCisiIFdFQiAoKi53ZWIgaXMgYWxzbyB1c2VkIGZvciBXaW5iYXRjaDogR3Vlc3MsIGJhc2VkIG9uIGV4cGVjdGluZyAiJSIgY29tbWVudAorIiBsaW5lcyBpbiBhIFdFQiBmaWxlKS4KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLndlYgorCVwgaWYgZ2V0bGluZSgxKVswXS5nZXRsaW5lKDIpWzBdLmdldGxpbmUoMylbMF0uZ2V0bGluZSg0KVswXS5nZXRsaW5lKDUpWzBdID1+ICIlIiB8CisJXCAgIHNldGYgd2ViIHwKKwlcIGVsc2UgfAorCVwgICBzZXRmIHdpbmJhdGNoIHwKKwlcIGVuZGlmCisKKyIgV2luZG93cyBTY3JpcHRpbmcgSG9zdCBhbmQgV2luZG93cyBTY3JpcHQgQ29tcG9uZW50CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi53c1tmY10JCQlzZXRmIHdzaAorCisiIFggUGl4bWFwIChkeW5hbWljYWxseSBzZXRzIGNvbG9ycywgdXNlIEJ1ZkVudGVyIHRvIG1ha2UgaXQgd29yayBiZXR0ZXIpCithdSBCdWZFbnRlciAqLnhwbQorCVwgaWYgZ2V0bGluZSgxKSA9fiAiWFBNMiIgfAorCVwgICBzZXRmIHhwbTIgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgeHBtIHwKKwlcIGVuZGlmCithdSBCdWZFbnRlciAqLnhwbTIJCQkJc2V0ZiB4cG0yCisKKyIgWEZyZWU4NiBjb25maWcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBYRjg2Q29uZmlnCisJXCBpZiBnZXRsaW5lKDEpID1+ICdcPFhDb25maWd1cmF0b3JcPicgfAorCVwgICBsZXQgYjp4Zjg2Y194ZnJlZTg2X3ZlcnNpb24gPSAzIHwKKwlcIGVuZGlmIHwKKwlcIHNldGYgeGY4NmNvbmYKKworIiBYb3JnIGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHhvcmcuY29uZix4b3JnLmNvbmYtNAlsZXQgYjp4Zjg2Y194ZnJlZTg2X3ZlcnNpb24gPSA0IHwgc2V0ZiB4Zjg2Y29uZgorCisiIFhTIFBlcmwgZXh0ZW5zaW9uIGludGVyZmFjZSBsYW5ndWFnZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoueHMJCQlzZXRmIHhzCisKKyIgWCByZXNvdXJjZXMgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5YZGVmYXVsdHMsLlhwZGVmYXVsdHMsLlhyZXNvdXJjZXMseGRtLWNvbmZpZywqLmFkIHNldGYgeGRlZmF1bHRzCisKKyIgWG1hdGgKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1zYywqLm1zZgkJc2V0ZiB4bWF0aAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubXMKKwlcIGlmICE8U0lEPkZUbnJvZmYoKSB8IHNldGYgeG1hdGggfCBlbmRpZgorCisiIFhNTAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoueG1sCisJXCBpZiBnZXRsaW5lKDEpIC4gZ2V0bGluZSgyKSAuIGdldGxpbmUoMykgPX4gJzwhRE9DVFlQRS4qRG9jQm9vaycgfAorCVwgICBsZXQgYjpkb2Nia190eXBlPSJ4bWwiIHwKKwlcICAgc2V0ZiBkb2NiayB8CisJXCBlbHNlIHwKKwlcICAgc2V0ZiB4bWwgfAorCVwgZW5kaWYKKworIiBYTUkgKGhvbGRpbmcgVU1MIG1vZGVscykgaXMgYWxzbyBYTUwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnhtaQkJCXNldGYgeG1sCisKKyIgQ1NQUk9KIGZpbGVzIGFyZSBWaXN1YWwgU3R1ZGlvLk5FVCdzIFhNTC1iYXNlZCBwcm9qZWN0IGNvbmZpZyBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY3Nwcm9qLCouY3Nwcm9qLnVzZXIJc2V0ZiB4bWwKKworIiBRdCBMaW5ndWlzdCB0cmFuc2xhdGlvbiBzb3VyY2UgYW5kIFF0IFVzZXIgSW50ZXJmYWNlIEZpbGVzIGFyZSBYTUwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnRzLCoudWkJCQlzZXRmIHhtbAorCisiIFhTRAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoueHNkCQkJc2V0ZiB4c2QKKworIiBYc2x0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi54c2wsKi54c2x0CQlzZXRmIHhzbHQKKworIiBZYWNjCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi55LCoueXkJCQlzZXRmIHlhY2MKKworIiBZYW1sCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi55YW1sLCoueW1sCQlzZXRmIHlhbWwKKworIiBaODAgYXNzZW1ibGVyIGFzejgwCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi56OGEJCQlzZXRmIHo4YQorCithdWdyb3VwIEVORAorCisKKyIgU291cmNlIHRoZSB1c2VyLXNwZWNpZmllZCBmaWxldHlwZSBmaWxlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAorIiBWaW0gNS54LgoraWYgZXhpc3RzKCJteWZpbGV0eXBlZmlsZSIpICYmIGZpbGVfcmVhZGFibGUoZXhwYW5kKG15ZmlsZXR5cGVmaWxlKSkKKyAgZXhlY3V0ZSAic291cmNlICIgLiBteWZpbGV0eXBlZmlsZQorZW5kaWYKKworCisiIENoZWNrIGZvciAiKiIgYWZ0ZXIgbG9hZGluZyBteWZpbGV0eXBlZmlsZSwgc28gdGhhdCBzY3JpcHRzLnZpbSBpcyBvbmx5IHVzZWQKKyIgd2hlbiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgZmlsZSBuYW1lIGV4dGVuc2lvbnMuCisiIERvbid0IGRvIHRoaXMgZm9yIGNvbXByZXNzZWQgZmlsZXMuCithdWdyb3VwIGZpbGV0eXBlZGV0ZWN0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKgorCVwgaWYgIWRpZF9maWxldHlwZSgpICYmIGV4cGFuZCgiPGFtYXRjaD4iKSAhfiBnOmZ0X2lnbm9yZV9wYXQKKwlcIHwgcnVudGltZSEgc2NyaXB0cy52aW0gfCBlbmRpZgorYXUgU3RkaW5SZWFkUG9zdCAqIGlmICFkaWRfZmlsZXR5cGUoKSB8IHJ1bnRpbWUhIHNjcmlwdHMudmltIHwgZW5kaWYKKworCisiIEV4dHJhIGNoZWNrcyBmb3Igd2hlbiBubyBmaWxldHlwZSBoYXMgYmVlbiBkZXRlY3RlZCBub3cuICBNb3N0bHkgdXNlZCBmb3IKKyIgcGF0dGVybnMgdGhhdCBlbmQgaW4gIioiLiAgRS5nLiwgInpzaCoiIG1hdGNoZXMgInpzaC52aW0iLCBidXQgdGhhdCdzIGEgVmltCisiIHNjcmlwdCBmaWxlLgorCisiIEJJTkQgem9uZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC92YXIvbmFtZWQvKgkJc2V0ZiBiaW5kem9uZQorCisiIENoYW5nZWxvZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIFtjQ11oYW5nZVtsTF1vZyoJCWlmIGdldGxpbmUoMSkgPX4gJzsgdXJnZW5jeT0nCisJXHwgc2V0ZiBkZWJjaGFuZ2Vsb2cgfCBlbHNlIHwgc2V0ZiBjaGFuZ2Vsb2cgfCBlbmRpZgorCisiIENyb250YWIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBjcm9udGFiLGNyb250YWIuKgkJc2V0ZiBjcm9udGFiCisKKyIgRHJhY3VsYQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGRyYWMuKgkJCXNldGYgZHJhY3VsYQorCisiIEZ2d20KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqZnZ3bXJjKiwqZnZ3bTk1Ki5ob29rCisJXCBsZXQgYjpmdndtX3ZlcnNpb24gPSAxIHwgc2V0ZiBmdndtCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKmZ2d20ycmMqCisJXCBpZiBleHBhbmQoIjxhZmlsZT46ZSIpID09ICJtNCIgfCBzZXRmIGZ2d20ybTQgfCBlbHNlIHwKKwlcIGxldCBiOmZ2d21fdmVyc2lvbiA9IDIgfCBzZXRmIGZ2d20gfCBlbmRpZgorCisiIEdUSyBSQworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5ndGtyYyosZ3RrcmMqCQlzZXRmIGd0a3JjCisKKyIgSmFtCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgUHJsKi4qLEpBTSouKgkJc2V0ZiBqYW0KKworIiBKYXJnb24KK2F1ISBCdWZOZXdGaWxlLEJ1ZlJlYWQgKmphcmcqCisJXCBpZiBnZXRsaW5lKDEpLmdldGxpbmUoMikuZ2V0bGluZSgzKS5nZXRsaW5lKDQpLmdldGxpbmUoNSkgPX4/ICdUSElTIElTIFRIRSBKQVJHT04gRklMRScgfAorCVwgICBzZXRmIGphcmdvbiB8CisJXCBlbmRpZgorCisiIE1ha2VmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgW21NXWFrZWZpbGUqCQlzZXRmIG1ha2UKKworIiBSdWJ5IE1ha2VmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgW3JSXWFrZWZpbGUqCQlzZXRmIHJ1YnkKKworIiBNdXR0IHNldHVwIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBtdXR0cmMqLE11dHRyYyoJCXNldGYgbXV0dHJjCisKKyIgTnJvZmYgbWFjcm9zCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgdG1hYy4qCQkJc2V0ZiBucm9mZgorCisiIFByaW50Y2FwIGFuZCBUZXJtY2FwCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKnByaW50Y2FwKgorCVwgaWYgIWRpZF9maWxldHlwZSgpIHwgbGV0IGI6cHRjYXBfdHlwZSA9ICJwcmludCIgfCBzZXRmIHB0Y2FwIHwgZW5kaWYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqdGVybWNhcCoKKwlcIGlmICFkaWRfZmlsZXR5cGUoKSB8IGxldCBiOnB0Y2FwX3R5cGUgPSAidGVybSIgfCBzZXRmIHB0Y2FwIHwgZW5kaWYKKworIiBWaW0gc2NyaXB0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKnZpbXJjKgkJCXNldGYgdmltCisKKyIgU3VidmVyc2lvbiBjb21taXQgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHN2bi1jb21taXQuKi50bXAJCXNldGYgc3ZuCisKKyIgWCByZXNvdXJjZXMgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIFhyZXNvdXJjZXMqLCovYXBwLWRlZmF1bHRzLyosKi9YcmVzb3VyY2VzLyogc2V0ZiB4ZGVmYXVsdHMKKworIiBYRnJlZTg2IGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIFhGODZDb25maWctNCoKKwlcIGxldCBiOnhmODZjX3hmcmVlODZfdmVyc2lvbiA9IDQgfCBzZXRmIHhmODZjb25mCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgWEY4NkNvbmZpZyoKKwlcIGlmIGdldGxpbmUoMSkgPX4gJ1w8WENvbmZpZ3VyYXRvclw+JyB8CisJXCAgIGxldCBiOnhmODZjX3hmcmVlODZfdmVyc2lvbiA9IDMgfAorCVwgZW5kaWYgfAorCVwgc2V0ZiB4Zjg2Y29uZgorCisiIFgxMSB4bW9kbWFwCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKnhtb2RtYXAqCQkJc2V0ZiB4bW9kbWFwCisKKyIgWi1TaGVsbCBzY3JpcHQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCB6c2gqLHpsb2cqCQlzZXRmIHpzaAorCisKKyIgR2VuZXJpYyBjb25maWd1cmF0aW9uIGZpbGUgKGNoZWNrIHRoaXMgbGFzdCwgaXQncyBqdXN0IGd1ZXNzaW5nISkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCxTdGRpblJlYWRQb3N0ICoKKwlcIGlmICFkaWRfZmlsZXR5cGUoKSAmJiBleHBhbmQoIjxhbWF0Y2g+IikgIX4gZzpmdF9pZ25vcmVfcGF0CisJXCAgICAmJiAoZ2V0bGluZSgxKSA9fiAnXiMnIHx8IGdldGxpbmUoMikgPX4gJ14jJyB8fCBnZXRsaW5lKDMpID1+ICdeIycKKwlcCXx8IGdldGxpbmUoNCkgPX4gJ14jJyB8fCBnZXRsaW5lKDUpID1+ICdeIycpIHwKKwlcICAgc2V0ZiBjb25mIHwKKwlcIGVuZGlmCisKKyIgVXNlIHRoZSBwbHVnaW4tZmlsZXR5cGUgY2hlY2tzIGxhc3QsIHRoZXkgbWF5IG92ZXJydWxlIGFueSBvZiB0aGUgcHJldmlvdXNseQorIiBkZXRlY3RlZCBmaWxldHlwZXMuCitydW50aW1lISBmdGRldGVjdC8qLnZpbQorCithdWdyb3VwIEVORAorCisKKyIgSWYgdGhlIEdVSSBpcyBhbHJlYWR5IHJ1bm5pbmcsIG1heSBzdGlsbCBuZWVkIHRvIGluc3RhbGwgdGhlIFN5bnRheCBtZW51LgorIiBEb24ndCBkbyBpdCB3aGVuIHRoZSAnTScgZmxhZyBpcyBpbmNsdWRlZCBpbiAnZ3Vpb3B0aW9ucycuCitpZiBoYXMoIm1lbnUiKSAmJiBoYXMoImd1aV9ydW5uaW5nIikKKyAgICAgIFwgJiYgIWV4aXN0cygiZGlkX2luc3RhbGxfc3ludGF4X21lbnUiKSAmJiAmZ3Vpb3B0aW9ucyAhfiMgIk0iCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9tZW51LnZpbQorZW5kaWYKKworIiBSZXN0b3JlICdjcG9wdGlvbnMnCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRvZmYudmltIGIvcnVudGltZS9mdG9mZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3YzZlZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRvZmYudmltCkBAIC0wLDAgKzEsMTEgQEAKKyIgVmltIHN1cHBvcnQgZmlsZSB0byBzd2l0Y2ggb2ZmIGRldGVjdGlvbiBvZiBmaWxlIHR5cGVzCisiCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgY2hhbmdlOgkyMDAxIEp1biAxMQorCitpZiBleGlzdHMoImRpZF9sb2FkX2ZpbGV0eXBlcyIpCisgIHVubGV0IGRpZF9sb2FkX2ZpbGV0eXBlcworZW5kaWYKKworIiBSZW1vdmUgYWxsIGF1dG9jb21tYW5kcyBpbiB0aGUgZmlsZXR5cGVkZXRlY3QgZ3JvdXAKK3NpbGVudCEgYXUhIGZpbGV0eXBlZGV0ZWN0ICoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4udmltIGIvcnVudGltZS9mdHBsdWdpbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM2NDU1MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4udmltCkBAIC0wLDAgKzEsMjcgQEAKKyIgVmltIHN1cHBvcnQgZmlsZSB0byBzd2l0Y2ggb24gbG9hZGluZyBwbHVnaW5zIGZvciBmaWxlIHR5cGVzCisiCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgY2hhbmdlOgkyMDAzIE1heSAxMAorCitpZiBleGlzdHMoImRpZF9sb2FkX2Z0cGx1Z2luIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9sb2FkX2Z0cGx1Z2luID0gMQorCithdWdyb3VwIGZpbGV0eXBlcGx1Z2luCisgIGF1IEZpbGVUeXBlICogY2FsbCBzOkxvYWRGVFBsdWdpbigpCisgIGZ1bmMhIHM6TG9hZEZUUGx1Z2luKCkKKyAgICBpZiBleHBhbmQoIjxhbWF0Y2g+IikgIT0gIiIKKyAgICAgIGlmIGV4aXN0cygiYjp1bmRvX2Z0cGx1Z2luIikKKwlleGUgYjp1bmRvX2Z0cGx1Z2luCisJdW5sZXQgYjp1bmRvX2Z0cGx1Z2luIGI6ZGlkX2Z0cGx1Z2luCisgICAgICBlbmRpZgorICAgICAgaWYgJmNwbyA9fiMgIlMiICYmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorCSIgSW4gY29tcGF0aWJsZSBtb2RlIG9wdGlvbnMgYXJlIHJlc2V0IHRvIHRoZSBnbG9iYWwgdmFsdWVzLCBuZWVkIHRvCisJIiBzZXQgdGhlIGxvY2FsIHZhbHVlcyBhbHNvIHdoZW4gYSBwbHVnaW4gd2FzIGFscmVhZHkgdXNlZC4KKwl1bmxldCBiOmRpZF9mdHBsdWdpbgorICAgICAgZW5kaWYKKyAgICAgIHJ1bnRpbWUhIGZ0cGx1Z2luLzxhbWF0Y2g+LnZpbSBmdHBsdWdpbi88YW1hdGNoPl8qLnZpbSBmdHBsdWdpbi88YW1hdGNoPi8qLnZpbQorICAgIGVuZGlmCisgIGVuZGZ1bmMKK2F1Z3JvdXAgRU5ECmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL1JFQURNRS50eHQgYi9ydW50aW1lL2Z0cGx1Z2luL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhZDU4YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vUkVBRE1FLnR4dApAQCAtMCwwICsxLDI0IEBACitUaGUgZnRwbHVnaW4gZGlyZWN0b3J5IGlzIGZvciBWaW0gcGx1Z2luIHNjcmlwdHMgdGhhdCBhcmUgb25seSB1c2VkIGZvciBhCitzcGVjaWZpYyBmaWxldHlwZS4KKworQWxsIGZpbGVzIGVuZGluZyBpbiAudmltIGluIHRoaXMgZGlyZWN0b3J5IGFuZCBzdWJkaXJlY3RvcmllcyB3aWxsIGJlIHNvdXJjZWQKK2J5IFZpbSB3aGVuIGl0IGRldGVjdHMgdGhlIGZpbGV0eXBlIHRoYXQgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBvcgorc3ViZGlyZWN0b3J5LgorRm9yIGV4YW1wbGUsIHRoZXNlIGFyZSBhbGwgbG9hZGVkIGZvciB0aGUgImMiIGZpbGV0eXBlOgorCisJYy52aW0KKwljX2V4dHJhLnZpbQorCWMvc2V0dGluZ3MudmltCisKK05vdGUgdGhhdCB0aGUgIl8iIGluICJjX2V4dHJhLnZpbSIgaXMgcmVxdWlyZWQgdG8gc2VwYXJhdGUgdGhlIGZpbGV0eXBlIG5hbWUKK2Zyb20gdGhlIGZvbGxvd2luZyBhcmJpdHJhcnkgbmFtZS4KKworVGhlIGZpbGV0eXBlIHBsdWdpbnMgYXJlIG9ubHkgbG9hZGVkIHdoZW4gdGhlICI6ZmlsZXR5cGUgcGx1Z2luIiBjb21tYW5kIGhhcworYmVlbiB1c2VkLgorCitUaGUgZGVmYXVsdCBmaWxldHlwZSBwbHVnaW4gZmlsZXMgY29udGFpbiBzZXR0aW5ncyB0aGF0IDk1JSBvZiB0aGUgdXNlcnMgd2lsbAord2FudCB0byB1c2UuICBUaGV5IGRvIG5vdCBjb250YWluIHBlcnNvbmFsIHByZWZlcmVuY2VzLCBsaWtlIHRoZSB2YWx1ZSBvZgorJ3NoaWZ0d2lkdGgnLgorCitJZiB5b3Ugd2FudCB0byBkbyBhZGRpdGlvbmFsIHNldHRpbmdzLCBvciBvdmVycnVsZSB0aGUgZGVmYXVsdCBmaWxldHlwZQorcGx1Z2luLCB5b3UgY2FuIGNyZWF0ZSB5b3VyIG93biBwbHVnaW4gZmlsZS4gIFNlZSAiOmhlbHAgZnRwbHVnaW4iIGluIFZpbS4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vYWFwLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vYWFwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGQ0MDRmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9hYXAudmltCkBAIC0wLDAgKzEsMjUgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglBYXAgcmVjaXBlCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAzIE5vdiAwNAorCisiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCisKKyIgRG9uJ3QgbG9hZCBhbm90aGVyIHBsdWdpbiBmb3IgdGhpcyBidWZmZXIKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworIiBSZXNldCAnZm9ybWF0b3B0aW9ucycsICdjb21tZW50cycgYW5kICdleHBhbmR0YWInIHRvIHVuZG8gdGhpcyBwbHVnaW4uCitsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInNldGwgZm88IGNvbTwgZXQ8IgorCisiIFNldCAnZm9ybWF0b3B0aW9ucycgdG8gYnJlYWsgY29tbWVudCBsaW5lcyBidXQgbm90IG90aGVyIGxpbmVzLAorIiBhbmQgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciB3aGVuIGhpdHRpbmcgPENSPiBvciB1c2luZyAibyIuCitzZXRsb2NhbCBmby09dCBmbys9Y3JvcWwKKworIiBTZXQgJ2NvbW1lbnRzJyB0byBmb3JtYXQgZGFzaGVkIGxpc3RzIGluIGNvbW1lbnRzLgorc2V0bG9jYWwgY29tbWVudHM9czojXCAtLG06I1wgXCxlOiMsbjojLGZiOi0KKworIiBFeHBhbmQgdGFicyB0byBzcGFjZXMgdG8gYXZvaWQgdHJvdWJsZS4KK3NldGxvY2FsIGV4cGFuZHRhYgpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9hYmFxdXMudmltIGIvcnVudGltZS9mdHBsdWdpbi9hYmFxdXMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Mzk2MmYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL2FiYXF1cy52aW0KQEAgLTAsMCArMSw3NSBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBBYmFxdXMgZmluaXRlIGVsZW1lbnQgaW5wdXQgZmlsZSAod3d3LmFiYXF1cy5jb20pCisiIE1haW50YWluZXI6ICAgQ2FybCBPc3Rlcndpc2NoIDxvc3Rlcndpc2NoY0Bhc21lLm9yZz4KKyIgTGFzdCBDaGFuZ2U6ICAyMDA0IE1heQorCisiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCisKKyIgRG9uJ3QgbG9hZCBhbm90aGVyIHBsdWdpbiBmb3IgdGhpcyBidWZmZXIKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworIiBTYXZlIHRoZSBjb21wYXRpYmlsaXR5IG9wdGlvbnMgYW5kIHRlbXBvcmFyaWx5IHN3aXRjaCB0byB2aW0gZGVmYXVsdHMKK2xldCBzOmNwb19zYXZlID0gJmNwb3B0aW9ucworc2V0IGNwb3B0aW9ucyZ2aW0KKworIiBGb2xkaW5nCitpZiB2ZXJzaW9uID49IDYwMAorICAgICIgRm9sZCBhbGwgbGluZXMgdGhhdCBkbyBub3QgYmVnaW4gd2l0aCAqCisgICAgc2V0bG9jYWwgZm9sZGV4cHI9Z2V0bGluZSh2OmxudW0pWzBdIT1cIlwqXCIKKyAgICBzZXRsb2NhbCBmb2xkbWV0aG9kPWV4cHIKK2VuZGlmCisKKyIgU2V0IHRoZSBmb3JtYXQgb2YgdGhlIGluY2x1ZGUgZmlsZSBzcGVjaWZpY2F0aW9uIGZvciBBYmFxdXMKKyIgVXNlZCBpbiA6Y2hlY2sgZ2YgXndmIFtpIGFuZCBvdGhlciBjb21tYW5kcworc2V0bG9jYWwgaW5jbHVkZT1cXDxcXGNJTlBVVFxccyo9CisKKyIgUmVtb3ZlIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGZpcnN0ID0gd2hlbiBldmFsdWF0aW5nIGZpbGVuYW1lcworc2V0bG9jYWwgaW5jbHVkZWV4cHI9c3Vic3RpdHV0ZSh2OmZuYW1lLCcuXFx7LX09JywnJywnJykKKworIiBEZWZpbmUgZm9ybWF0IG9mIGNvbW1lbnQgbGluZXMgKHNlZSAnZm9ybWF0b3B0aW9ucycgZm9yIHVzZXMpCitzZXRsb2NhbCBjb21tZW50cz06KioKK3NldGxvY2FsIGNvbW1lbnRzdHJpbmc9KiolcworCisiIERlZmluaXRpb25zIHN0YXJ0IHdpdGggYSAqIGFuZCBhc3NpZ24gYSBOQU1FLCBOU0VULCBvciBFTFNFVAorIiBVc2VkIGluIFtkIF53ZCBhbmQgb3RoZXIgY29tbWFuZHMKK3NldGxvY2FsIGRlZmluZT1eXFwqXFxhLipcXGNcXChOQU1FXFxcfE5TRVRcXFx8RUxTRVRcXClcXHMqPQorCisiIEFiYXF1cyBrZXl3b3JkcyBhbmQgaWRlbnRpZmllcnMgbWF5IGluY2x1ZGUgYSAtIGNoYXJhY3Rlcgorc2V0bG9jYWwgaXNrZXl3b3JkKz0tCisKKyIgU2V0IHRoZSBmaWxlIGJyb3dzZSBmaWx0ZXIgKGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCB1bmRlciBXaW4zMiBndWkpCitpZiBoYXMoImd1aV93aW4zMiIpICYmICFleGlzdHMoImI6YnJvd3NlZmlsdGVyIikKKyAgICBsZXQgYjpicm93c2VmaWx0ZXIgPSAiQWJhcXVzIElucHV0IEZpbGVzICgqLmlucCAqLmluYylcdCouaW5wOyouaW5jXG4iIC4KKyAgICBcICJBYmFxdXMgUmVzdWx0cyAoKi5kYXQpXHQqLmRhdFxuIiAuCisgICAgXCAiQWJhcXVzIE1lc3NhZ2VzICgqLnByZSAqLm1zZyAqLnN0YSlcdCoucHJlOyoubXNnOyouc3RhXG4iIC4KKyAgICBcICJBbGwgRmlsZXMgKCouKilcdCouKlxuIgorZW5kaWYKKworIiBEZWZpbmUga2V5cyB1c2VkIHRvIG1vdmUgW2NvdW50XSBzZWN0aW9ucyBiYWNrd2FyZCBvciBmb3J3YXJkLgorIiBUT0RPOiBNYWtlIHRoaXMgZG8gc29tZXRoaW5nIGludGVsbGlnZW50IGluIHZpc3VhbCBtb2RlLgorbm5vcmVtYXAgPHNpbGVudD4gPGJ1ZmZlcj4gW1sgOmNhbGwgPFNJRD5BYmFxdXNfSnVtcCgnP15cKlxhPycpPENSPgorbm5vcmVtYXAgPHNpbGVudD4gPGJ1ZmZlcj4gXV0gOmNhbGwgPFNJRD5BYmFxdXNfSnVtcCgnL15cKlxhLycpPENSPgorZnVuY3Rpb24hIDxTSUQ+QWJhcXVzX0p1bXAobW90aW9uKSByYW5nZQorICAgIGxldCBzOmNvdW50ID0gdjpjb3VudDEKKyAgICBtYXJrICcKKyAgICB3aGlsZSBzOmNvdW50ID4gMAorICAgICAgICBzaWxlbnQhIGV4ZWN1dGUgYTptb3Rpb24KKyAgICAgICAgbGV0IHM6Y291bnQgPSBzOmNvdW50IC0gMQorICAgIGVuZHdoaWxlCitlbmRmdW5jdGlvbgorCisiIERlZmluZSBrZXkgdG8gdG9nZ2xlIGNvbW1lbnRpbmcgb2YgdGhlIGN1cnJlbnQgbGluZSBvciByYW5nZQorbm9yZW1hcCA8c2lsZW50PiA8YnVmZmVyPiA8bS1jPiA6Y2FsbCA8U0lEPkFiYXF1c19Ub2dnbGVDb21tZW50KCk8Q1I+agorZnVuY3Rpb24hIDxTSUQ+QWJhcXVzX1RvZ2dsZUNvbW1lbnQoKSByYW5nZQorICAgIGlmIHN0cnBhcnQoZ2V0bGluZShhOmZpcnN0bGluZSksIDAsIDIpID09ICIqKiIKKyAgICAgICAgIiBVbi1jb21tZW50IGFsbCBsaW5lcyBpbiByYW5nZQorICAgICAgICBzaWxlbnQgZXhlY3V0ZSBhOmZpcnN0bGluZSAuICcsJyAuIGE6bGFzdGxpbmUgLiAncy9eXCpcKi8vJworICAgIGVsc2UKKyAgICAgICAgIiBDb21tZW50IGFsbCBsaW5lcyBpbiByYW5nZQorICAgICAgICBzaWxlbnQgZXhlY3V0ZSBhOmZpcnN0bGluZSAuICcsJyAuIGE6bGFzdGxpbmUgLiAncy9eLyoqLycKKyAgICBlbmRpZgorZW5kZnVuY3Rpb24KKworIiBSZXN0b3JlIHNhdmVkIGNvbXBhdGliaWxpdHkgb3B0aW9ucworbGV0ICZjcG9wdGlvbnMgPSBzOmNwb19zYXZlCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2FkYS52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2FkYS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjMDU3ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vYWRhLnZpbQpAQCAtMCwwICsxLDIyNiBAQAorIiBWaW0gQWRhIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglBZGEKKyIgTWFpbnRhaW5lcjoJTmVpbCBCaXJkIDxuZWlsQGZueHdlYi5jb20+CisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAxMQorIiBWZXJzaW9uOgkkSWQkCisiIExvb2sgZm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBhdCBodHRwOi8vdmltLnNvdXJjZWZvcmdlLm5ldC8KKyIKKyIgUGVyZm9ybSBBZGEgc3BlY2lmaWMgY29tcGxldGlvbiAmIHRhZ2dpbmcuCisiCisiCisiIFByb3ZpZGVzIG1hcHBpbmcgb3ZlcnJpZGVzIGZvciB0YWcganVtcGluZyB0aGF0IGZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQKKyIgQWRhIG9iamVjdCBhbmQgdGFnIGp1bXAgdG8gdGhhdCwgbm90IHRoZSAnc2ltcGxlJyB2aW0gd29yZC4KKyIgU2ltaWxhcmx5IGFsbG93cyA8Q3RybC1OPiBtYXRjaGluZyBvZiBmdWxsLWxlbmd0aCBhZGEgZW50aXRpZXMgZnJvbSB0YWdzLgorIiBFeHBvcnRzICdBZGFXb3JkKCknIGZ1bmN0aW9uIHRvIHJldHVybiBmdWxsIG5hbWUgb2YgQWRhIGVudGl0eSB1bmRlciB0aGUKKyIgY3Vyc29yKCBvciBhdCBnaXZlbiBsaW5lL2NvbHVtbiksIHN0cmlwcGluZyB3aGl0ZXNwYWNlL25ld2xpbmVzIGFzIG5lY2Vzc2FyeS4KKworCisiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCisKKyIgRG9uJ3QgbG9hZCBhbm90aGVyIHBsdWdpbiBmb3IgdGhpcyBidWZmZXIKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworIiBUZW1wb3JhcmlseSBzZXQgY3BvcHRpb25zIHRvIGVuc3VyZSB0aGUgc2NyaXB0IGxvYWRzIE9LCitsZXQgczpjcG9wdGlvbnMgPSAmY3BvcHRpb25zCitzZXQgY3BvLT1DCisKKworIiBBZGEgY29tbWVudHMKK3NldGxvY2FsIGNvbW1lbnRzKz1POi0tCisKKworIiBNYWtlIGxvY2FsIHRhZyBtYXBwaW5ncyBmb3IgdGhpcyBidWZmZXIgKGlmIG5vdCBhbHJlYWR5IHNldCkKK2lmIG1hcGNoZWNrKCc8Qy1dPicsJ24nKSA9PSAnJworICBubm9yZW1hcCA8dW5pcXVlPiA8YnVmZmVyPiA8Qy1dPiAgICA6Y2FsbCBKdW1wVG9UYWdfYWRhKCcnKTxjcj4KK2VuZGlmCitpZiBtYXBjaGVjaygnZzxDLV0+JywnbicpID09ICcnCisgIG5ub3JlbWFwIDx1bmlxdWU+IDxidWZmZXI+IGc8Qy1dPiAgIDpjYWxsIEp1bXBUb1RhZ19hZGEoJycsJ3N0aicpPGNyPgorZW5kaWYKKworaWYgbWFwY2hlY2soJzxDLU4+JywnaScpID09ICcnCisgIGlub3JlbWFwIDx1bmlxdWU+IDxidWZmZXI+IDxDLU4+IDxDLVI+PTxTSUQ+QWRhQ29tcGxldGlvbigiXDxsdD5DLU4+Iik8Y3I+CitlbmRpZgoraWYgbWFwY2hlY2soJzxDLVA+JywnaScpID09ICcnCisgIGlub3JlbWFwIDx1bmlxdWU+IDxidWZmZXI+IDxDLVA+IDxDLVI+PTxTSUQ+QWRhQ29tcGxldGlvbigiXDxsdD5DLVA+Iik8Y3I+CitlbmRpZgoraWYgbWFwY2hlY2soJzxDLVg+PEMtXT4nLCdpJykgPT0gJycKKyAgaW5vcmVtYXAgPHVuaXF1ZT4gPGJ1ZmZlcj4gPEMtWD48Qy1dPiA8Qy1SPj08U0lEPkFkYUNvbXBsZXRpb24oIlw8bHQ+Qy1YPlw8bHQ+Qy1dPiIpPGNyPgorZW5kaWYKK2lmIG1hcGNoZWNrKCc8YnM+JywnaScpID09ICcnCisgIGlub3JlbWFwIDxzaWxlbnQ+IDx1bmlxdWU+IDxidWZmZXI+IDxicz4gPEMtUj49PFNJRD5BZGFJbnNlcnRCYWNrc3BhY2UoKTxjcj4KK2VuZGlmCisKKworIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyICYgbWF0Y2hpdCBpcyB1c2VkCitpZiAhIGV4aXN0cygiYjptYXRjaF93b3JkcyIpICAmJiAgZXhpc3RzKCJsb2FkZWRfbWF0Y2hpdCIpCisgICIgVGhlIGZvbGxvd2luZyBsaW5lcyBlbmFibGUgdGhlIG1hY3Jvcy9tYXRjaGl0LnZpbSBwbHVnaW4gZm9yCisgICIgQWRhLXNwZWNpZmljIGV4dGVuZGVkIG1hdGNoaW5nIHdpdGggdGhlICUga2V5LgorICBsZXQgczpub3RlbmQgPSAnXCUoXDxlbmRcc1wrXClcQDwhJworICBsZXQgYjptYXRjaF93b3Jkcz0KKyAgXCBzOm5vdGVuZCAuICdcPGlmXD46XDxlbHNpZlw+Olw8ZWxzZVw+Olw8ZW5kXD5cc1wrXDxpZlw+LCcgLgorICBcIHM6bm90ZW5kIC4gJ1w8Y2FzZVw+Olw8d2hlblw+Olw8ZW5kXD5cc1wrXDxjYXNlXD4sJyAuCisgIFwgJ1wlKFw8d2hpbGVcPi4qXHxcPGZvclw+LipcfCcuczpub3RlbmQuJ1wpXDxsb29wXD46XDxlbmRcPlxzXCtcPGxvb3BcPiwnIC4KKyAgXCAnXCUoXDxkb1w+XHxcPGJlZ2luXD5cKTpcPGV4Y2VwdGlvblw+Olw8ZW5kXD5ccypcJSgkXHxbO0EtWl1cKSwnIC4KKyAgXCBzOm5vdGVuZCAuICdcPHJlY29yZFw+Olw8ZW5kXD5cc1wrXDxyZWNvcmRcPicKK2VuZGlmCisKKworIiBQcmV2ZW50IHJlLWxvYWQgb2YgZnVuY3Rpb25zCitpZiBleGlzdHMoJ3M6aWQnKQorICBmaW5pc2gKK2VuZGlmCisKKyIgR2V0IHRoaXMgc2NyaXB0J3MgdW5pcXVlIGlkCittYXAgPHNjcmlwdD4gPFNJRD4/PyA8U0lEPj8/CitsZXQgczppZCA9IHN1YnN0aXR1dGUoIG1hcGFyZygnPFNJRD4/PycpLCAnXjxTTlI+XCguKlwpXz8/JCcsICdcMScsICcnICkKK3VubWFwIDxzY3JpcHQ+IDxTSUQ+Pz8KKworCisiIEV4dHJhY3QgY3VycmVudCBBZGEgd29yZCBhY3Jvc3MgbXVsdGlwbGUgbGluZXMKKyIgQWRhV29yZCggW2xpbmUsIGNvbHVtbl0gKVwKK2xldCBzOkFkYVdvcmRSZWdleCA9ICdcYVx3KlwoXF9zKlwuXF9zKlxhXHcqXCkqJworbGV0IHM6QWRhQ29tbWVudCAgID0gIlxcdl4oXCJbXlwiXSpcInwnLid8W15cIiddKXstfVxcenNcXHMqLS0uKiIKKworZnVuY3Rpb24hIEFkYVdvcmQoLi4uKQorICBpZiBhOjAgPiAxCisgICAgbGV0IGxpbmVuciA9IGE6MQorICAgIGxldCBjb2xuciAgPSBhOjIgLSAxCisgIGVsc2UKKyAgICBsZXQgbGluZW5yID0gbGluZSgnLicpCisgICAgbGV0IGNvbG5yICA9IGNvbCgnLicpIC0gMQorICBlbmRpZgorICBsZXQgbGluZSA9IHN1YnN0aXR1dGUoIGdldGxpbmUobGluZW5yKSwgczpBZGFDb21tZW50LCAnJywgJycgKQorICAiIENvcGUgd2l0aCB0YWcgc2VhcmNoaW5nIGZvciBpdGVtcyBpbiBjb21tZW50czsgaWYgd2UgYXJlLCBkb24ndCBsb29wCisgICIgYmFja2FyZHMgbG9va2luZyBmb3IgcHJldmlvdXMgbGluZXMKKyAgaWYgY29sbnIgPiBzdHJsZW4obGluZSkKKyAgICAiIFdlIHdlcmUgaW4gYSBjb21tZW50CisgICAgbGV0IGxpbmUgPSBnZXRsaW5lKGxpbmVucikKKyAgICBsZXQgc2VhcmNoX3ByZXZfbGluZXMgPSAwCisgIGVsc2UKKyAgICBsZXQgc2VhcmNoX3ByZXZfbGluZXMgPSAxCisgIGVuZGlmCisKKyAgIiBHbyBiYWNrd2FyZHMgdW50aWwgd2UgZmluZCBhIG1hdGNoIChBZGEgSUQpIHRoYXQgKmRvZXNuJ3QqIGluY2x1ZGUgb3VyCisgICIgbG9jYXRpb24gLSBpLmUuLCB0aGUgcHJldmlvdXMgSUQuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY3VycmVudCAnY29ycmVjdCcKKyAgIiBtYXRjaCB3aWxsIHRvZ2dsZSBtYXRjaGluZy9ub3QgbWF0Y2hpbmcgYXMgd2UgdHJhdmVyc2UgY2hhcmFjdGVycworICAiIGJhY2t3YXJkcy4gVGh1cywgd2UgaGF2ZSB0byBmaW5kIHRoZSBwcmV2aW91cyB1bnJlbGF0ZWQgbWF0Y2gsIGV4Y2x1ZGUKKyAgIiBpdCwgdGhlbiB1c2UgdGhlIG5leHQgZnVsbCBtYXRjaCAob3VycykuCisgICIgUmVtZW1iZXIgdG8gY29udmVydCB2aW0gY29sdW1uICdjb2xucicgWzEuLm5dIHRvIHN0cmluZyBvZmZzZXQgWzAuLihuLTEpXQorICAiIC4uLiBidXQgc3RhcnQsIGhlcmUsIG9uZSBhZnRlciB0aGUgcmVxdWlyZWQgY2hhci4KKyAgbGV0IG5ld2NvbCA9IGNvbG5yICsgMQorICB3aGlsZSAxCisgICAgbGV0IG5ld2NvbCA9IG5ld2NvbCAtIDEKKyAgICBpZiBuZXdjb2wgPCAwCisgICAgICAiIEhhdmUgdG8gaW5jbHVkZSBwcmV2aW91cyBsaW5lIGZyb20gZmlsZQorICAgICAgbGV0IGxpbmVuciA9IGxpbmVuciAtIDEKKyAgICAgIGlmIGxpbmVuciA8IDEgIHx8ICAhc2VhcmNoX3ByZXZfbGluZXMKKwkiIFN0YXJ0IG9mIGZpbGUgb3IgbWF0Y2hpbmcgaW4gYSBjb21tZW50CisJbGV0IGxpbmVuciA9IDEKKwlsZXQgbmV3Y29sID0gMAorCWxldCBvdXJtYXRjaCA9IG1hdGNoKCBsaW5lLCBzOkFkYVdvcmRSZWdleCApCisJYnJlYWsKKyAgICAgIGVuZGlmCisgICAgICAiIEdldCBwcmV2aW91cyBsaW5lLCBhbmQgcHJlcGVuZCBpdCB0byBvdXIgc2VhcmNoIHN0cmluZworICAgICAgbGV0IG5ld2xpbmUgPSBzdWJzdGl0dXRlKCBnZXRsaW5lKGxpbmVuciksIHM6QWRhQ29tbWVudCwgJycsICcnICkKKyAgICAgIGxldCBuZXdjb2wgID0gc3RybGVuKG5ld2xpbmUpIC0gMQorICAgICAgbGV0IGNvbG5yICAgPSBjb2xuciArIG5ld2NvbAorICAgICAgbGV0IGxpbmUgICAgPSBuZXdsaW5lIC4gbGluZQorICAgIGVuZGlmCisgICAgIiBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIG1hdGNoIGV4Y2x1ZGluZyAndXMnCisgICAgbGV0IG1lbmQgPSBuZXdjb2wgKyBtYXRjaGVuZCggc3RycGFydChsaW5lLG5ld2NvbCksIHM6QWRhV29yZFJlZ2V4ICkgLSAxCisgICAgaWYgbWVuZCA+PSBuZXdjb2wgICYmICBtZW5kIDwgY29sbnIKKyAgICAgICIgWWVzCisgICAgICBsZXQgb3VybWF0Y2ggPSBtZW5kKzEgKyBtYXRjaCggc3RycGFydChsaW5lLG1lbmQrMSksIHM6QWRhV29yZFJlZ2V4ICkKKyAgICAgIGJyZWFrCisgICAgZW5kaWYKKyAgZW5kd2hpbGUKKworICAiIEdvdCBhbnl0aGluZz8KKyAgaWYgb3VybWF0Y2ggPCAwCisgICAgcmV0dXJuICcnCisgIGVsc2UKKyAgICBsZXQgbGluZSA9IHN0cnBhcnQoIGxpbmUsIG91cm1hdGNoKQorICBlbmRpZgorCisgICIgTm93IHNpbXBseSBhZGQgZnVydGhlciBsaW5lcyB1bnRpbCB0aGUgbWF0Y2ggZ2V0cyBubyBiaWdnZXIKKyAgbGV0IG1hdGNoc3RyID0gbWF0Y2hzdHIoIGxpbmUsIHM6QWRhV29yZFJlZ2V4ICkKKyAgbGV0IGxhc3RsaW5lICA9IGxpbmUoJyQnKQorICBsZXQgbGluZW5yICAgID0gbGluZSgnLicpICsgMQorICB3aGlsZSBsaW5lbnIgPD0gbGFzdGxpbmUKKyAgICBsZXQgbGFzdG1hdGNoID0gbWF0Y2hzdHIKKyAgICBsZXQgbGluZSA9IGxpbmUgLiBzdWJzdGl0dXRlKCBnZXRsaW5lKGxpbmVuciksIHM6QWRhQ29tbWVudCwgJycsICcnICkKKyAgICBsZXQgbWF0Y2hzdHIgPSBtYXRjaHN0ciggbGluZSwgczpBZGFXb3JkUmVnZXggKQorICAgIGlmIG1hdGNoc3RyID09IGxhc3RtYXRjaAorICAgICAgYnJlYWsKKyAgICBlbmRpZgorICBlbmR3aGlsZQorCisgICIgU3RyaXAgd2hpdGVzcGFjZSAmIHJldHVybgorICByZXR1cm4gc3Vic3RpdHV0ZSggbWF0Y2hzdHIsICdcc1wrJywgJycsICdnJyApCitlbmRmdW5jdGlvbgorCisKKyIgV29yZCB0YWcgLSBpbmNsdWRlICcuJyBhbmQgaWYgQWRhIG1ha2UgdXBwZXJjYXNlCisiIE5hbWUgYWxsb3dzIGEgY29tbW9uIEp1bXBUb1RhZygpIHRvIGxvb2sgZm9yIGFuIGZ0IHNwZWNpZmljIEp1bXBUb1RhZ19mdCgpLgorZnVuY3Rpb24hIEp1bXBUb1RhZ19hZGEod29yZCwuLi4pCisgIGlmIGE6d29yZCA9PSAnJworICAgICIgR2V0IGN1cnJlbnQgd29yZAorICAgIGxldCB3b3JkID0gQWRhV29yZCgpCisgICAgaWYgd29yZCA9PSAnJworICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgZWxzZQorICAgIGxldCB3b3JkID0gYTp3b3JkCisgIGVuZGlmCisgIGlmIGE6MCA+IDAKKyAgICBsZXQgbW9kZSA9IGE6MQorICBlbHNlCisgICAgbGV0IG1vZGUgPSAndGonCisgIGVuZGlmCisKKyAgbGV0IHY6ZXJybXNnID0gJycKKyAgZXhlY3V0ZSAnc2lsZW50IScgbW9kZSB3b3JkCisgIGlmIHY6ZXJybXNnICE9ICcnCisgICAgaWYgdjplcnJtc2cgPX4gJ15FNDI2OicgICIgVGFnIG5vdCBmb3VuZAorICAgICAgbGV0IGlnbm9yZWNhc2UgPSAmaWdub3JlY2FzZQorICAgICAgc2V0IGlnbm9yZWNhc2UKKyAgICAgIGV4ZWN1dGUgbW9kZSB3b3JkCisgICAgICBsZXQgJmlnbm9yZWNhc2UgPSBpZ25vcmVjYXNlCisgICAgZWxzZQorICAgICAgIiBSZXBlYXQgdG8gZ2l2ZSBlcnJvcgorICAgICAgZXhlY3V0ZSBtb2RlIHdvcmQKKyAgICBlbmRpZgorICBlbmRpZgorZW5kZnVuY3Rpb24KKworCisiIFdvcmQgY29tcGxldGlvbiAoXk4vXlIvXlheXSkgLSBmb3JjZSAnLicgaW5jbHVzaW9uCitmdW5jdGlvbiEgczpBZGFDb21wbGV0aW9uKGNtZCkKKyAgc2V0IGlza2V5d29yZCs9NDYKKyAgcmV0dXJuIGE6Y21kIC4gIlw8Qy1SPj08U05SPiIgLiBzOmlkIC4gIl9BZGFDb21wbGV0aW9uRW5kKClcPENSPiIKK2VuZGZ1bmN0aW9uCitmdW5jdGlvbiEgczpBZGFDb21wbGV0aW9uRW5kKCkKKyAgc2V0IGlza2V5d29yZC09NDYKKyAgcmV0dXJuICcnCitlbmRmdW5jdGlvbgorCisKKyIgQmFja3NwYWNlIGF0IGVuZCBvZiBsaW5lIGFmdGVyIGF1dG8taW5zZXJ0ZWQgY29tbWVudHN0cmluZyAnLS0gJyB3aXBlcyBpdAorZnVuY3Rpb24hIHM6QWRhSW5zZXJ0QmFja3NwYWNlKCkKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKCcuJykKKyAgaWYgY29sKCcuJykgPiBzdHJsZW4obGluZSkgJiYgbWF0Y2gobGluZSwnLS0gJCcpICE9IC0xICYmIG1hdGNoKCZjb21tZW50cywnLS0nKSAhPSAtMQorICAgIHJldHVybiAiXDxicz5cPGJzPlw8YnM+IgorICBlbHNlCisgICAgcmV0dXJuICJcPGJzPiIKKyAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKKworIiBSZXNldCBjcG9wdGlvbnMKK2xldCAmY3BvcHRpb25zID0gczpjcG9wdGlvbnMKK3VubGV0IHM6Y3BvcHRpb25zCisKKyIgdmltOiBzdHM9MiBzdz0yIDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vYW50LnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vYW50LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDVlZjNiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9hbnQudmltCkBAIC0wLDAgKzEsNDMgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglhbnQKKyIgTWFpbnRhaW5lcjoJRGFuIFNoYXJwIDxkd3NoYXJwIGF0IGhvdG1haWwgZG90IGNvbT4KKyIgTGFzdCBDaGFuZ2VkOiAyMDAzIFNlcCAyOQorIiBVUkw6CQlodHRwOi8vbXl3ZWJwYWdlLm5ldHNjYXBlLmNvbS9zaGFycHBlb3BsZS92aW0vZnRwbHVnaW4KKworaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpIHwgZmluaXNoIHwgZW5kaWYKKworIiBNYWtlIHN1cmUgdGhlIGNvbnRpbnVhdGlvbiBsaW5lcyBiZWxvdyBkbyBub3QgY2F1c2UgcHJvYmxlbXMgaW4KKyIgY29tcGF0aWJpbGl0eSBtb2RlLgorbGV0IHM6c2F2ZV9jcG8gPSAmY3BvCitzZXQgY3BvLT1DCisKKyIgRGVmaW5lIHNvbWUgZGVmYXVsdHMgaW4gY2FzZSB0aGUgaW5jbHVkZWQgZnRwbHVnaW5zIGRvbid0IHNldCB0aGVtLgorbGV0IHM6dW5kb19mdHBsdWdpbiA9ICIiCitsZXQgczpicm93c2VmaWx0ZXIgPSAiWE1MIEZpbGVzICgqLnhtbClcdCoueG1sXG4iIC4KKwkgICAgXAkgICAgICJBbGwgRmlsZXMgKCouKilcdCouKlxuIgorCitydW50aW1lISBmdHBsdWdpbi94bWwudmltIGZ0cGx1Z2luL3htbF8qLnZpbSBmdHBsdWdpbi94bWwvKi52aW0KK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworIiBPdmVycmlkZSBvdXIgZGVmYXVsdHMgaWYgdGhlc2Ugd2VyZSBzZXQgYnkgYW4gaW5jbHVkZWQgZnRwbHVnaW4uCitpZiBleGlzdHMoImI6dW5kb19mdHBsdWdpbiIpCisgICAgbGV0IHM6dW5kb19mdHBsdWdpbiA9IGI6dW5kb19mdHBsdWdpbgorZW5kaWYKK2lmIGV4aXN0cygiYjpicm93c2VmaWx0ZXIiKQorICAgIGxldCBzOmJyb3dzZWZpbHRlciA9IGI6YnJvd3NlZmlsdGVyCitlbmRpZgorCisiIENoYW5nZSB0aGUgOmJyb3dzZSBlIGZpbHRlciB0byBwcmltYXJpbHkgc2hvdyBBbnQtcmVsYXRlZCBmaWxlcy4KK2lmIGhhcygiZ3VpX3dpbjMyIikKKyAgICBsZXQgYjpicm93c2VmaWx0ZXIgPSAiQnVpbGQgRmlsZXMgKGJ1aWxkLnhtbClcdGJ1aWxkLnhtbFxuIiAuCisJCVwJICJKYXZhIEZpbGVzICgqLmphdmEpXHQqLmphdmFcbiIgLgorCQlcCSAiUHJvcGVydGllcyBGaWxlcyAoKi5wcm9wKilcdCoucHJvcCpcbiIgLgorCQlcCSAiTWFuaWZlc3QgRmlsZXMgKCoubWYpXHQqLm1mXG4iIC4KKwkJXAkgczpicm93c2VmaWx0ZXIKK2VuZGlmCisKKyIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAidW5sZXQhIGI6YnJvd3NlZmlsdGVyIHwgIiAuIHM6dW5kb19mdHBsdWdpbgorCisiIFJlc3RvcmUgdGhlIHNhdmVkIGNvbXBhdGliaWxpdHkgb3B0aW9ucy4KK2xldCAmY3BvID0gczpzYXZlX2NwbwpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9hcnQudmltIGIvcnVudGltZS9mdHBsdWdpbi9hcnQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTVlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL2FydC52aW0KQEAgLTAsMCArMSwxNiBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luCisiIExhbmd1YWdlOiAgICAgIEFSVC1JTSBhbmQgQVJUKkVudGVycHJpc2UKKyIgTWFpbnRhaW5lcjogICAgRG9yYWkgU2l0YXJhbSA8ZHMyNkBndGUuY29tPgorIiBVUkw6CQkgaHR0cDovL3d3dy5jY3MubmV1LmVkdS9+ZG9yYWkvdmltcGx1Z2lucy92aW1wbHVnaW5zLmh0bWwKKyIgTGFzdCBDaGFuZ2U6ICAgQXByIDIsIDIwMDMKKworIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKyAgZmluaXNoCitlbmRpZgorCitydW4gZnRwbHVnaW4vbGlzcC52aW0KKworc2V0bCBsdy09aWYKK3NldGwgbHcrPWRlZi1hcnQtZnVuLGRlZmZhY3RzLGRlZmdsb2JhbCxkZWZydWxlLGRlZnNjaGVtYSwKKyAgICAgIFxmb3Isc2NoZW1hLHdoaWxlCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2FzcHZicy52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2FzcHZicy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2ZTNjZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vYXNwdmJzLnZpbQpAQCAtMCwwICsxLDU4IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJYXNwdmJzCisiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlZDogMjAwMyBTZXAgMjkKKyIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCisKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCisKKyIgTWFrZSBzdXJlIHRoZSBjb250aW51YXRpb24gbGluZXMgYmVsb3cgZG8gbm90IGNhdXNlIHByb2JsZW1zIGluCisiIGNvbXBhdGliaWxpdHkgbW9kZS4KK2xldCBzOnNhdmVfY3BvID0gJmNwbworc2V0IGNwby09QworCisiIERlZmluZSBzb21lIGRlZmF1bHRzIGluIGNhc2UgdGhlIGluY2x1ZGVkIGZ0cGx1Z2lucyBkb24ndCBzZXQgdGhlbS4KK2xldCBzOnVuZG9fZnRwbHVnaW4gPSAiIgorbGV0IHM6YnJvd3NlZmlsdGVyID0gIkhUTUwgRmlsZXMgKCouaHRtbCwgKi5odG0pXHQqLmh0bSpcbiIgLgorCSAgICBcCSAgICAgIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCitsZXQgczptYXRjaF93b3JkcyA9ICIiCisKK3J1bnRpbWUhIGZ0cGx1Z2luL2h0bWwudmltIGZ0cGx1Z2luL2h0bWxfKi52aW0gZnRwbHVnaW4vaHRtbC8qLnZpbQorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCisiIE92ZXJyaWRlIG91ciBkZWZhdWx0cyBpZiB0aGVzZSB3ZXJlIHNldCBieSBhbiBpbmNsdWRlZCBmdHBsdWdpbi4KK2lmIGV4aXN0cygiYjp1bmRvX2Z0cGx1Z2luIikKKyAgICBsZXQgczp1bmRvX2Z0cGx1Z2luID0gYjp1bmRvX2Z0cGx1Z2luCitlbmRpZgoraWYgZXhpc3RzKCJiOmJyb3dzZWZpbHRlciIpCisgICAgbGV0IHM6YnJvd3NlZmlsdGVyID0gYjpicm93c2VmaWx0ZXIKK2VuZGlmCitpZiBleGlzdHMoImI6bWF0Y2hfd29yZHMiKQorICAgIGxldCBzOm1hdGNoX3dvcmRzID0gYjptYXRjaF93b3JkcworZW5kaWYKKworIiBBU1A6ICBBY3RpdmUgU2VydmVyIFBhZ2VzICh3aXRoIFZpc3VhbCBCYXNpYyBTY3JpcHQpCisiIHRoYW5rcyB0byBHb250cmFuIEJBRVJUUworaWYgZXhpc3RzKCJsb2FkZWRfbWF0Y2hpdCIpCisgIGxldCBzOm5vdGVuZCA9ICdcJShcPGVuZFxzXCtcKVxAPCEnCisgIGxldCBiOm1hdGNoX3dvcmRzID0KKyAgXCBzOm5vdGVuZCAuICdcPElmXD46XlxzXCtcPEVsc2VcPjpcPEVsc2VJZlw+Olw8ZW5kXHNcK1w8aWZcPiwnIC4KKyAgXCBzOm5vdGVuZCAuICdcPFNlbGVjdFxzXCtcPENhc2VcPjpcPENhc2VcPjpcPENhc2Vcc1wrXDxFbHNlXD46XDxFbmRcc1wrXDxTZWxlY3RcPiwnIC4KKyAgXCAnXlxzKlw8U3ViXD46XDxFbmRcc1wrXDxTdWJcPiwnIC4KKyAgXCAnXlxzKlw8RnVuY3Rpb25cPjpcPEVuZFxzXCtcPEZ1bmN0aW9uXD4sJyAuCisgIFwgJ1w8Q2xhc3NcPjpcPEVuZFxzXCtcPENsYXNzXD4sJyAuCisgIFwgJ15ccypcPERvXD46XDxMb29wXD4sJyAuCisgIFwgJ15ccypcPEZvclw+Olw8TmV4dFw+LCcgLgorICBcICdcPFdoaWxlXD46XDxXZW5kXD4sJyAuCisgIFwgczptYXRjaF93b3JkcworZW5kaWYKKworIiBDaGFuZ2UgdGhlIDpicm93c2UgZSBmaWx0ZXIgdG8gcHJpbWFyaWx5IHNob3cgQVNQLXJlbGF0ZWQgZmlsZXMuCitpZiBoYXMoImd1aV93aW4zMiIpCisgICAgbGV0ICBiOmJyb3dzZWZpbHRlcj0iQVNQIEZpbGVzICgqLmFzcClcdCouYXNwXG4iIC4gczpicm93c2VmaWx0ZXIKK2VuZGlmCisKK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAidW5sZXQhIGI6bWF0Y2hfd29yZHMgYjpicm93c2VmaWx0ZXIgfCAiIC4gczp1bmRvX2Z0cGx1Z2luCisKKyIgUmVzdG9yZSB0aGUgc2F2ZWQgY29tcGF0aWJpbGl0eSBvcHRpb25zLgorbGV0ICZjcG8gPSBzOnNhdmVfY3BvCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2F1dG9tYWtlLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vYXV0b21ha2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNTc3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL2F1dG9tYWtlLnZpbQpAQCAtMCwwICsxLDExIEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWdhZ2U6CSAgICBBdXRvbWFrZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vZnRwbHVnaW4vcGNwL2F1dG9tYWtlLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTIyCisiIGFyY2gtdGFnOgkgICAgM2E3OGIwY2QtMjdiMi00MTBhLThlN2ItNTFhMTcxN2MyYTViCisKKyIgU2FtZSBhcyBtYWtlZmlsZSBmaWxldHlwZSBwbHVnaW4gZm9yIG5vdy4KK3J1bnRpbWUhIGZ0cGx1Z2luL21ha2UudmltIGZ0cGx1Z2luL21ha2VfKi52aW0gZnRwbHVnaW4vbWFrZS8qLnZpbQorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2JpYi52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2JpYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRjZDIwZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vYmliLnZpbQpAQCAtMCwwICsxLDE1IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4KKyIgTGFuZ3VhZ2U6ICAgICAgQmliVGVYCisiIE1haW50YWluZXI6ICAgIERvcmFpIFNpdGFyYW0gPGRzMjZAZ3RlLmNvbT4KKyIgVVJMOgkJIGh0dHA6Ly93d3cuY2NzLm5ldS5lZHUvfmRvcmFpL3ZpbXBsdWdpbnMvdmltcGx1Z2lucy5odG1sCisiIExhc3QgQ2hhbmdlOiAgIE1heSAyMSwgMjAwMworCisiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCisKKyIgRG9uJ3QgbG9hZCBhbm90aGVyIHBsdWdpbiBmb3IgdGhpcyBidWZmZXIKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworc2V0bCBjaW5kZW50CmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2MudmltIGIvcnVudGltZS9mdHBsdWdpbi9jLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDUwNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9jLnZpbQpAQCAtMCwwICsxLDUyIEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJQworIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXkgMTYKKworIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKyAgZmluaXNoCitlbmRpZgorCisiIERvbid0IGxvYWQgYW5vdGhlciBwbHVnaW4gZm9yIHRoaXMgYnVmZmVyCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKK3NldCBjcG8tPUMKKworbGV0IGI6dW5kb19mdHBsdWdpbiA9ICJzZXRsIGNpbjwgZm88IGNvbTwiCisJXCAuICJ8IGlmIGhhcygndm1zJykgfCBzZXRsIGlzazwgfCBlbmRpZiIKKworc2V0bG9jYWwgY2luZGVudAorCisiIFNldCAnZm9ybWF0b3B0aW9ucycgdG8gYnJlYWsgY29tbWVudCBsaW5lcyBidXQgbm90IG90aGVyIGxpbmVzLAorIiBhbmQgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciB3aGVuIGhpdHRpbmcgPENSPiBvciB1c2luZyAibyIuCitzZXRsb2NhbCBmby09dCBmbys9Y3JvcWwKKworIiBTZXQgJ2NvbW1lbnRzJyB0byBmb3JtYXQgZGFzaGVkIGxpc3RzIGluIGNvbW1lbnRzLgorc2V0bG9jYWwgY29tbWVudHM9c086KlwgLSxtTzoqXCBcICxleE86Ki8sczE6LyosbWI6KixleDoqLyw6Ly8KKworIiBJbiBWTVMgQyBrZXl3b3JkcyBjb250YWluICckJyBjaGFyYWN0ZXJzLgoraWYgaGFzKCJ2bXMiKQorICBzZXRsb2NhbCBpc2tleXdvcmQrPSQKK2VuZGlmCisKKyIgV2luMzIgY2FuIGZpbHRlciBmaWxlcyBpbiB0aGUgYnJvd3NlIGRpYWxvZworaWYgaGFzKCJndWlfd2luMzIiKSAmJiAhZXhpc3RzKCJiOmJyb3dzZWZpbHRlciIpCisgIGlmICZmdCA9PSAiY3BwIgorICAgIGxldCBiOmJyb3dzZWZpbHRlciA9ICJDKysgU291cmNlIEZpbGVzICgqLmNwcCAqLmMrKylcdCouY3BwOyouYysrXG4iIC4KKwkgIFwgIkMgSGVhZGVyIEZpbGVzICgqLmgpXHQqLmhcbiIgLgorCSAgXCAiQyBTb3VyY2UgRmlsZXMgKCouYylcdCouY1xuIiAuCisJICBcICJBbGwgRmlsZXMgKCouKilcdCouKlxuIgorICBlbHNlaWYgJmZ0ID09ICJjaHNjcmlwdCIKKyAgICBsZXQgYjpicm93c2VmaWx0ZXIgPSAiQ2ggU291cmNlIEZpbGVzICgqLmNoICouY2hmKVx0Ki5jaDsqLmNoZlxuIiAuCisJICBcICJDIEhlYWRlciBGaWxlcyAoKi5oKVx0Ki5oXG4iIC4KKwkgIFwgIkMgU291cmNlIEZpbGVzICgqLmMpXHQqLmNcbiIgLgorCSAgXCAiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKKyAgZWxzZQorICAgIGxldCBiOmJyb3dzZWZpbHRlciA9ICJDIFNvdXJjZSBGaWxlcyAoKi5jKVx0Ki5jXG4iIC4KKwkgIFwgIkMgSGVhZGVyIEZpbGVzICgqLmgpXHQqLmhcbiIgLgorCSAgXCAiQ2ggU291cmNlIEZpbGVzICgqLmNoICouY2hmKVx0Ki5jaDsqLmNoZlxuIiAuCisJICBcICJDKysgU291cmNlIEZpbGVzICgqLmNwcCAqLmMrKylcdCouY3BwOyouYysrXG4iIC4KKwkgIFwgIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCisgIGVuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9jaC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2NoLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDA5MDAzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9jaC52aW0KQEAgLTAsMCArMSwxNyBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBDaAorIiBNYWludGFpbmVyOiAgIFNvZnRJbnRlZ3JhdGlvbiwgSW5jLiA8aW5mb0Bzb2Z0aW50ZWdyYXRpb24uY29tPgorIiBVUkw6CQlodHRwOi8vd3d3LnNvZnRpbnRlZ3JhdGlvbi5jb20vZG93bmxvYWQvdmltL2Z0cGx1Z2luL2NoLnZpbQorIiBMYXN0IGNoYW5nZToJMjAwNCBNYXkgMTYKKyIJCUNyZWF0ZWQgYmFzZWQgb24gY3BwLnZpbQorIgorIiBDaCBpcyBhIEMvQysrIGludGVycHJldGVyIHdpdGggbWFueSBoaWdoIGxldmVsIGV4dGVuc2lvbnMKKyIKKworIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKyAgZmluaXNoCitlbmRpZgorCisiIEJlaGF2ZXMganVzdCBsaWtlIEMKK3J1bnRpbWUhIGZ0cGx1Z2luL2MudmltIGZ0cGx1Z2luL2NfKi52aW0gZnRwbHVnaW4vYy8qLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9jaGFuZ2Vsb2cudmltIGIvcnVudGltZS9mdHBsdWdpbi9jaGFuZ2Vsb2cudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZDU4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL2NoYW5nZWxvZy52aW0KQEAgLTAsMCArMSwyNTYgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOgkgICAgZ2VuZXJpYyBDaGFuZ2Vsb2cgZmlsZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vZnRwbHVnaW4vcGNwL2NoYW5nZWxvZy8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNC0yNQorIiBhcmNoLXRhZzoJICAgIGIwMGUyOTc0LWM1NTktNDQ3Ny1iN2IyLTNlZjNmNDA2MWJkYgorIiBWYXJpYWJsZXM6CisiICAgZzpjaGFuZ2Vsb2dfdGltZWZvcm1hdCAtCisiCWRlc2NyaXB0aW9uOiB0aGUgdGltZWZvcm1hdCB1c2VkIGluIENoYW5nZUxvZyBlbnRyaWVzLgorIglkZWZhdWx0OiAiJVktJW0tJWQiLgorIiAgIGc6Y2hhbmdlbG9nX3VzZXJuYW1lIC0KKyIJZGVzY3JpcHRpb246IHRoZSB1c2VybmFtZSB0byB1c2UgaW4gQ2hhbmdlTG9nIGVudHJpZXMKKyIJZGVmYXVsdDogdHJ5IHRvIGRlZHVjZSBpdCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgc3lzdGVtCWZpbGVzLgorIiBMb2NhbCBNYXBwaW5nczoKKyIgICA8TGVhZGVyPm8gLQorIglhZGRzIGEgbmV3IGNoYW5nZWxvZyBlbnRyeSBmb3IgdGhlIGN1cnJlbnQgdXNlciBmb3IgdGhlIGN1cnJlbnQgZGF0ZS4KKyIgR2xvYmFsIE1hcHBpbmdzOgorIiAgIDxMZWFkZXI+byAtCisiCXN3aXRjaGVzIHRvIHRoZSBDaGFuZ2VMb2cgYnVmZmVyIG9wZW5lZCBmb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBvcgorIglvcGVucyBpdCBpbiBhIG5ldyBidWZmZXIgaWYgaXQgZXhpc3RzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoZW4KKyIJaXQgZG9lcyB0aGUgc2FtZSBhcyB0aGUgbG9jYWwgPExlYWRlcj5vIGRlc2NyaWJlZCBhYm92ZS4KKyIgTm90ZXM6CisiICAgcnVuICdydW50aW1lIGZ0cGx1Z2luL2NoYW5nZWxvZy52aW0nIHRvIGVuYWJsZSB0aGUgZ2xvYmFsIG1hcHBpbmcgZm9yCisiICAgY2hhbmdlbG9nIGZpbGVzLgorIiBUT0RPOgorIiAgc2hvdWxkIHdlIHBlcmhhcHMgb3BlbiB0aGUgQ2hhbmdlTG9nIGZpbGUgZXZlbiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHk/CisiICBQcm9ibGVtIGlzIHRoYXQgeW91IG1pZ2h0IGVuZCB1cCB3aXRoIENoYW5nZUxvZyBmaWxlcyBhbGwgb3ZlciB0aGUgcGxhY2UuCisKKyIgSWYgJ2ZpbGV0eXBlJyBpc24ndCAiY2hhbmdlbG9nIiwgd2UgbXVzdCBoYXZlIGJlZW4gdG8gYWRkIENoYW5nZUxvZyBvcGVuZXIKK2lmICZmaWxldHlwZSA9PSAiY2hhbmdlbG9nIgorICAiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKKyAgaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgICAgZmluaXNoCisgIGVuZGlmCisKKyAgIiBEb24ndCBsb2FkIGFub3RoZXIgcGx1Z2luIGZvciB0aGlzIGJ1ZmZlcgorICBsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyAgbGV0IGNwb19zYXZlID0gJmNwbworICBzZXQgY3BvLT1DCisKKyAgIiBUaGUgZm9ybWF0IG9mIHRoZSBkYXRlLXRpbWUgZmllbGQgKHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGRhdGVmb3JtYXQpCisgIGlmICFleGlzdHMoImc6Y2hhbmdlbG9nX3RpbWVmb3JtYXQiKQorICAgIGxldCBnOmNoYW5nZWxvZ190aW1lZm9ybWF0ID0gIiVZLSVtLSVkIgorICBlbmRpZgorCisgICIgVHJ5IHRvIGZpZ3VyZSBvdXQgYSByZWFzb25hYmxlIHVzZXJuYW1lIG9mIHRoZSBmb3JtOgorICAiIEZ1bGwgTmFtZSA8dXNlckBob3N0PgorICBpZiAhZXhpc3RzKCJnOmNoYW5nZWxvZ191c2VybmFtZSIpCisgICAgaWYgZXhpc3RzKCIkRU1BSUxfQUREUkVTUyIpCisgICAgICBsZXQgZzpjaGFuZ2Vsb2dfdXNlcm5hbWUgPSAkRU1BSUxfQUREUkVTUworICAgIGVsc2VpZiBleGlzdHMoIiRFTUFJTCIpCisgICAgICBsZXQgZzpjaGFuZ2Vsb2dfdXNlcm5hbWUgPSAkRU1BSUwKKyAgICBlbHNlCisgICAgICAiIEdldCB0aGUgdXNlcnMgbG9naW4gbmFtZQorICAgICAgbGV0IGxvZ2luID0gc3lzdGVtKCd3aG9hbWknKQorICAgICAgaWYgdjpzaGVsbF9lcnJvcgorCWxldCBsb2dpbiA9ICd1bmtub3duJworICAgICAgZWxzZQorCWxldCBuZXdsaW5lID0gc3RyaWR4KGxvZ2luLCAiXG4iKQorCWlmIG5ld2xpbmUgIT0gLTEKKwkgIGxldCBsb2dpbiA9IHN0cnBhcnQobG9naW4sIDAsIG5ld2xpbmUpCisJZW5kaWYKKyAgICAgIGVuZGlmCisKKyAgICAgICIgVHJ5IHRvIGZ1bGwgbmFtZSBmcm9tIGdlY29zIGZpZWxkIGluIC9ldGMvcGFzc3dkCisgICAgICBpZiBmaWxlcmVhZGFibGUoJy9ldGMvcGFzc3dkJykKKwlsZXQgbmFtZSA9IHN1YnN0aXR1dGUoCisJICAgICAgXHN5c3RlbSgnY2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCBeYHdob2FtaWAnKSwKKwkgICAgICBcJ15cJShbXjpdKjpcKVx7NH1cKFteOl0qXCk6LiokJywgJ1wxJywgJycpCisgICAgICBlbmRpZgorCisgICAgICAiIElmIHRoZXJlIGlzIG5vIHN1Y2ggZmlsZSwgb3IgdGhlcmUgd2FzIHNvbWUgb3RoZXIgcHJvYmxlbSB0cnkKKyAgICAgICIgb3RoZXJzCisgICAgICBpZiAhZmlsZXJlYWRhYmxlKCcvZXRjL3Bhc3N3ZCcpIHx8IHY6c2hlbGxfZXJyb3IKKwkiIE1heWJlIHRoZSBlbnZpcm9ubWVudCBoYXMgc29tZXRoaW5nIG9mIGludGVyZXN0CisJaWYgZXhpc3RzKCIkTkFNRSIpCisJICBsZXQgbmFtZSA9ICROQU1FCisJZWxzZQorCSAgIiBObz8gd2VsbCwgdXNlIHRoZSBsb2dpbiBuYW1lIGFuZCBjYXBpdGFsaXplIGZpcnN0CisJICAiIGNoYXJhY3RlcgorCSAgbGV0IG5hbWUgPSB0b3VwcGVyKGxvZ2luWzBdKSAuIHN0cnBhcnQobG9naW4sIDEpCisJZW5kaWYKKyAgICAgIGVuZGlmCisKKyAgICAgICIgT25seSBrZWVwIHN0dWZmIGJlZm9yZSB0aGUgZmlyc3QgY29tbWEKKyAgICAgIGxldCBjb21tYSA9IHN0cmlkeChuYW1lLCAnLCcpCisgICAgICBpZiBjb21tYSAhPSAtMQorCWxldCBuYW1lID0gc3RycGFydChuYW1lLCAwLCBjb21tYSkKKyAgICAgIGVuZGlmCisKKyAgICAgICIgQW5kIHN1YnN0aXR1dGUgJiBpbiB0aGUgcmVhbCBuYW1lIHdpdGggdGhlIGxvZ2luIG9mIG91ciB1c2VyCisgICAgICBsZXQgYW1wID0gc3RyaWR4KG5hbWUsICcmJykKKyAgICAgIGlmIGFtcCAhPSAtMQorCWxldCBuYW1lID0gc3RycGFydChuYW1lLCAwLCBhbXApIC4gdG91cHBlcihsb2dpblswXSkgLgorCSAgICAgIFxzdHJwYXJ0KGxvZ2luLCAxKSAuIHN0cnBhcnQobmFtZSwgYW1wICsgMSkKKyAgICAgIGVuZGlmCisKKyAgICAgICIgR2V0IG91ciBob3N0bmFtZQorICAgICAgbGV0IGhvc3RuYW1lID0gc3lzdGVtKCJob3N0bmFtZSIpCisgICAgICBpZiB2OnNoZWxsX2Vycm9yCisJbGV0IGhvc3RuYW1lID0gJ3Vua25vd25ob3N0JworICAgICAgZWxzZQorCWxldCBuZXdsaW5lID0gc3RyaWR4KGhvc3RuYW1lLCAiXG4iKQorCWlmIG5ld2xpbmUgIT0gLTEKKwkgIGxldCBob3N0bmFtZSA9IHN0cnBhcnQoaG9zdG5hbWUsIDAsIG5ld2xpbmUpCisJZW5kaWYKKyAgICAgIGVuZGlmCisKKyAgICAgICIgQW5kIGZpbmFsbHkgc2V0IHRoZSB1c2VybmFtZQorICAgICAgbGV0IGc6Y2hhbmdlbG9nX3VzZXJuYW1lID0gbmFtZS4nICA8Jy5sb2dpbi4nQCcuaG9zdG5hbWUuJz4nCisgICAgZW5kaWYKKyAgZW5kaWYKKworICAiIEZvcm1hdCB1c2VkIGZvciBuZXcgZGF0ZS1lbnRyaWVzCisgIGlmICFleGlzdHMoImc6Y2hhbmdlbG9nX25ld19kYXRlX2Zvcm1hdCIpCisgICAgbGV0IGc6Y2hhbmdlbG9nX25ld19kYXRlX2Zvcm1hdCA9ICIlZCAgJXVcblxuXHQqICVjXG5cbiIKKyAgZW5kaWYKKworICAiIEZvcm1hdCB1c2VkIGZvciBuZXcgZW50cmllcyB0byBjdXJyZW50IGRhdGUtZW50cnkKKyAgaWYgIWV4aXN0cygiZzpjaGFuZ2Vsb2dfbmV3X2VudHJ5X2Zvcm1hdCIpCisgICAgbGV0IGc6Y2hhbmdlbG9nX25ld19lbnRyeV9mb3JtYXQgPSAiXHQqICVjIgorICBlbmRpZgorCisgIGlmICFleGlzdHMoImc6Y2hhbmdlbG9nX2RhdGVfZW50cnlfc2VhcmNoIikKKyAgICBsZXQgZzpjaGFuZ2Vsb2dfZGF0ZV9lbnRyeV9zZWFyY2ggPSAnXlxzKiVkXF9zKiV1JworICBlbmRpZgorCisgICIgU3Vic3RpdHV0ZXMgc3BlY2lmaWMgaXRlbXMgaW4gbmV3IGRhdGUtZW50cnkgZm9ybWF0cyBhbmQgc2VhcmNoIHN0cmluZ3MKKyAgIiBDYW4gYmUgZG9uZSB3aXRoIHN1YnN0aXR1dGUgb2YgY291cnNlLCBidXQgdW5jbGVhbiwgYW5kIG5lZWQgXEAhIHRoZW4KKyAgZnVuY3Rpb24hIHM6c3Vic3RpdHV0ZV9pdGVtcyhzdHIsIGRhdGUsIHVzZXIpCisgICAgbGV0IHN0ciA9IGE6c3RyCisgICAgbGV0IGkgPSBzdHJpZHgoc3RyLCAnJScpCisgICAgd2hpbGUgaSAhPSAtMQorICAgICAgbGV0IGNoYXIgPSBzdHJbaSArIDFdCisgICAgICBpZiBjaGFyID09ICclJworCWxldCBtaWRkbGUgPSAnJScKKyAgICAgIGVsc2VpZiBjaGFyID09ICdkJworCWxldCBtaWRkbGUgPSBhOmRhdGUKKyAgICAgIGVsc2VpZiBjaGFyID09ICd1JworCWxldCBtaWRkbGUgPSBhOnVzZXIKKyAgICAgIGVsc2VpZiBjaGFyID09ICdjJworCWxldCBtaWRkbGUgPSAne2N1cnNvcn0nCisgICAgICBlbHNlCisJbGV0IG1pZGRsZSA9IGNoYXIKKyAgICAgIGVuZGlmCisgICAgICBsZXQgc3RyID0gc3RycGFydChzdHIsIDAsIGkpIC4gbWlkZGxlIC4gc3RycGFydChzdHIsIGkgKyAyKQorICAgICAgbGV0IGkgPSBzdHJpZHgoc3RyLCAnJScpCisgICAgZW5kd2hpbGUKKyAgICByZXR1cm4gc3RyCisgIGVuZGZ1bmN0aW9uCisKKyAgZnVuY3Rpb24hIHM6cG9zaXRpb25fY3Vyc29yKCkKKyAgICBpZiBzZWFyY2goJ3tjdXJzb3J9JykgPiAwCisgICAgICBsZXQgcG9zID0gbGluZSgnLicpCisgICAgICBsZXQgbGluZSA9IGdldGxpbmUocG9zKQorICAgICAgbGV0IGN1cnNvciA9IHN0cmlkeChsaW5lLCAne2N1cnNvcn0nKQorICAgICAgY2FsbCBzZXRsaW5lKHBvcywgc3Vic3RpdHV0ZShsaW5lLCAne2N1cnNvcn0nLCAnJywgJycpKQorICAgIGVuZGlmCisgICAgc3RhcnRpbnNlcnQhCisgIGVuZGZ1bmN0aW9uCisKKyAgIiBJbnRlcm5hbCBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgZW50cnkgaW4gdGhlIENoYW5nZUxvZworICBmdW5jdGlvbiEgczpuZXdfY2hhbmdlbG9nX2VudHJ5KCkKKyAgICAiIERlYWwgd2l0aCAncGFzdGUnIG9wdGlvbgorICAgIGxldCBzYXZlX3Bhc3RlID0gJnBhc3RlCisgICAgbGV0ICZwYXN0ZSA9IDEKKyAgICAxCisgICAgIiBMb29rIGZvciBhbiBlbnRyeSBmb3IgdG9kYXkgYnkgb3VyIHVzZXIKKyAgICBsZXQgZGF0ZSA9IHN0cmZ0aW1lKGc6Y2hhbmdlbG9nX3RpbWVmb3JtYXQpCisgICAgbGV0IHNlYXJjaCA9IHM6c3Vic3RpdHV0ZV9pdGVtcyhnOmNoYW5nZWxvZ19kYXRlX2VudHJ5X3NlYXJjaCwgZGF0ZSwKKwkgIFxnOmNoYW5nZWxvZ191c2VybmFtZSkKKyAgICBpZiBzZWFyY2goc2VhcmNoKSA+IDAKKyAgICAgICIgT2ssIG5vdyB3ZSBsb29rIGZvciB0aGUgZW5kIG9mIHRoZSBkYXRlLWVudHJ5LCBhbmQgYWRkIGFuIGVudHJ5CisgICAgICBsZXQgcG9zID0gbmV4dG5vbmJsYW5rKGxpbmUoJy4nKSArIDEpCisgICAgICBsZXQgbGluZSA9IGdldGxpbmUocG9zKQorICAgICAgd2hpbGUgbGluZSA9fiAnXlxzXCtcU1wrJworCWxldCBwb3MgPSBwb3MgKyAxCisJbGV0IGxpbmUgPSBnZXRsaW5lKHBvcykKKyAgICAgIGVuZHdoaWxlCisgICAgICBsZXQgaW5zZXJ0ID0gczpzdWJzdGl0dXRlX2l0ZW1zKGc6Y2hhbmdlbG9nX25ld19lbnRyeV9mb3JtYXQsCisJICAgIFwnJywgJycpCisgICAgICBleGVjdXRlICJub3JtYWwhICIuKHBvcyAtIDEpLiJHbyIuaW5zZXJ0CisgICAgICBleGVjdXRlIHBvcworICAgIGVsc2UKKyAgICAgICIgRmxhZyBmb3IgcmVtb3ZpbmcgZW1wdHkgbGluZXMgYXQgZW5kIG9mIG5ldyBDaGFuZ2VMb2dzCisgICAgICBsZXQgcmVtb3ZlX2VtcHR5ID0gbGluZSgnJCcpID09IDEKKworICAgICAgIiBObyBlbnRyeSB0b2RheSwgc28gY3JlYXRlIGEgZGF0ZS11c2VyIGhlYWRlciBhbmQgaW5zZXJ0IGFuIGVudHJ5CisgICAgICBsZXQgdG9kYXlzX2VudHJ5ID0gczpzdWJzdGl0dXRlX2l0ZW1zKGc6Y2hhbmdlbG9nX25ld19kYXRlX2Zvcm1hdCwKKwkgICAgXGRhdGUsIGc6Y2hhbmdlbG9nX3VzZXJuYW1lKQorICAgICAgIiBNYWtlIHN1cmUgd2UgaGF2ZSBhIGN1cnNvciBwb3NpdGlvbmluZworICAgICAgaWYgc3RyaWR4KHRvZGF5c19lbnRyeSwgJ3tjdXJzb3J9JykgPT0gLTEKKwlsZXQgdG9kYXlzX2VudHJ5ID0gdG9kYXlzX2VudHJ5Lid7Y3Vyc29yfScKKyAgICAgIGVuZGlmCisKKyAgICAgICIgTm93IGRvIHRoZSB3b3JrCisgICAgICBleGVjdXRlICJub3JtYWwhIGkiLnRvZGF5c19lbnRyeQorICAgICAgaWYgcmVtb3ZlX2VtcHR5CisJd2hpbGUgZ2V0bGluZSgnJCcpID09ICcnCisJICAkZGVsZXRlCisJZW5kd2hpbGUKKyAgICAgIGVuZGlmCisKKyAgICAgIDEKKyAgICBlbmRpZgorCisgICAgY2FsbCBzOnBvc2l0aW9uX2N1cnNvcigpCisKKyAgICAiIEFuZCByZXNldCAncGFzdGUnIG9wdGlvbgorICAgIGxldCAmcGFzdGUgPSBzYXZlX3Bhc3RlCisgIGVuZGZ1bmN0aW9uCisKKyAgaWYgZXhpc3RzKCI6TmV3Q2hhbmdlbG9nRW50cnkiKSAhPSAyCisgICAgbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxMZWFkZXI+byA8RXNjPjpjYWxsIDxTSUQ+bmV3X2NoYW5nZWxvZ19lbnRyeSgpPENSPgorICAgIGNvbW1hbmQhIC1uYXJncz0wIE5ld0NoYW5nZWxvZ0VudHJ5IGNhbGwgczpuZXdfY2hhbmdlbG9nX2VudHJ5KCkKKyAgZW5kaWYKKworICBsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInNldGwgY29tPCB0dzwgZm88IGV0PCBhaTwiCisKKyAgaWYgJnRleHR3aWR0aCA9PSAwCisgICAgc2V0bG9jYWwgdGV4dHdpZHRoPTc4CisgIGVuZGlmCisgIHNldGxvY2FsIGNvbW1lbnRzPQorICBzZXRsb2NhbCBmb3JtYXRvcHRpb25zKz10CisgIHNldGxvY2FsIG5vZXhwYW5kdGFiCisgIHNldGxvY2FsIGF1dG9pbmRlbnQKKworICBsZXQgJmNwbyA9IGNwb19zYXZlCitlbHNlCisgICIgQWRkIHRoZSBDaGFuZ2Vsb2cgb3BlbmluZyBtYXBwaW5nCisgIG5tYXAgPHNpbGVudD4gPExlYWRlcj5vIDpjYWxsIDxTSUQ+b3Blbl9jaGFuZ2Vsb2coKTxDUj4KKworICBmdW5jdGlvbiEgczpvcGVuX2NoYW5nZWxvZygpCisgICAgaWYgZmlsZXJlYWRhYmxlKCdDaGFuZ2VMb2cnKQorICAgICAgaWYgYnVmbG9hZGVkKCdDaGFuZ2VMb2cnKQorCWxldCBidWYgPSBidWZucignQ2hhbmdlTG9nJykKKwlleGVjdXRlICJub3JtYWwhIFw8Qy1XPnQiCisJd2hpbGUgd2luYnVmbnIod2lubnIoKSkgIT0gYnVmCisJICBleGVjdXRlICJub3JtYWwhIFw8Qy1XPnciCisJZW5kd2hpbGUKKyAgICAgIGVsc2UKKwlzcGxpdCBDaGFuZ2VMb2cKKyAgICAgIGVuZGlmCisKKyAgICAgIGlmIGV4aXN0cygiZzptYXBsZWFkZXIiKQorCWV4ZWN1dGUgIm5vcm1hbCAiIC4gZzptYXBsZWFkZXIgLiAibyIKKyAgICAgIGVsc2UKKwlleGVjdXRlICJub3JtYWwgXFxvIgorICAgICAgZW5kaWYKKyAgICAgIHN0YXJ0aW5zZXJ0IQorICAgIGVuZGlmCisgIGVuZGZ1bmN0aW9uCitlbmRpZgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2NvbmZpZy52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2NvbmZpZy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlMWE0MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vY29uZmlnLnZpbQpAQCAtMCwwICsxLDQxIEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJY29uZmlnCisiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlZDogMjAwMyBTZXAgMjkKKyIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCisKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCisKKyIgTWFrZSBzdXJlIHRoZSBjb250aW51YXRpb24gbGluZXMgYmVsb3cgZG8gbm90IGNhdXNlIHByb2JsZW1zIGluCisiIGNvbXBhdGliaWxpdHkgbW9kZS4KK2xldCBzOnNhdmVfY3BvID0gJmNwbworc2V0IGNwby09QworCisiIERlZmluZSBzb21lIGRlZmF1bHRzIGluIGNhc2UgdGhlIGluY2x1ZGVkIGZ0cGx1Z2lucyBkb24ndCBzZXQgdGhlbS4KK2xldCBzOnVuZG9fZnRwbHVnaW4gPSAiIgorbGV0IHM6YnJvd3NlZmlsdGVyID0gIkJvdXJuZSBTaGVsbCBGaWxlcyAoKi5zaClcdCouc2hcbiIgLgorCSAgICBcCSAiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKK2xldCBzOm1hdGNoX3dvcmRzID0gIiIKKworcnVudGltZSEgZnRwbHVnaW4vc2gudmltIGZ0cGx1Z2luL3NoXyoudmltIGZ0cGx1Z2luL3NoLyoudmltCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgT3ZlcnJpZGUgb3VyIGRlZmF1bHRzIGlmIHRoZXNlIHdlcmUgc2V0IGJ5IGFuIGluY2x1ZGVkIGZ0cGx1Z2luLgoraWYgZXhpc3RzKCJiOnVuZG9fZnRwbHVnaW4iKQorICAgIGxldCBzOnVuZG9fZnRwbHVnaW4gPSBiOnVuZG9fZnRwbHVnaW4KK2VuZGlmCitpZiBleGlzdHMoImI6YnJvd3NlZmlsdGVyIikKKyAgICBsZXQgczpicm93c2VmaWx0ZXIgPSBiOmJyb3dzZWZpbHRlcgorZW5kaWYKKworIiBDaGFuZ2UgdGhlIDpicm93c2UgZSBmaWx0ZXIgdG8gcHJpbWFyaWx5IHNob3cgY29uZmlndXJlLXJlbGF0ZWQgZmlsZXMuCitpZiBoYXMoImd1aV93aW4zMiIpCisgICAgbGV0ICBiOmJyb3dzZWZpbHRlcj0iQ29uZmlndXJlIFNjcmlwdHMgKGNvbmZpZ3VyZS4qKVx0Y29uZmlndXJlLipcbiIgLgorCQlcCXM6YnJvd3NlZmlsdGVyCitlbmRpZgorCisiIFVuZG8gdGhlIHN0dWZmIHdlIGNoYW5nZWQuCitsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInVubGV0ISBiOmJyb3dzZWZpbHRlciB8ICIgLiBiOnVuZG9fZnRwbHVnaW4KKworIiBSZXN0b3JlIHRoZSBzYXZlZCBjb21wYXRpYmlsaXR5IG9wdGlvbnMuCitsZXQgJmNwbyA9IHM6c2F2ZV9jcG8KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vY3BwLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vY3BwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzNmMjExCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9jcHAudmltCkBAIC0wLDAgKzEsMTIgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglDKysKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgSmFuIDE1CisKKyIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKKworIiBCZWhhdmVzIGp1c3QgbGlrZSBDCitydW50aW1lISBmdHBsdWdpbi9jLnZpbSBmdHBsdWdpbi9jXyoudmltIGZ0cGx1Z2luL2MvKi52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vY3MudmltIGIvcnVudGltZS9mdHBsdWdpbi9jcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0NTA5OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vY3MudmltCkBAIC0wLDAgKzEsMjYgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglDIworIiBNYWludGFpbmVyOglKb2hhbm5lcyBaZWxsbmVyIDxqb2hhbm5lc0B6ZWxsbmVyLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CVR1ZSwgMDkgTWFyIDIwMDQgMTQ6MDk6MzMgQ0VUCisKKyIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKKworIiBEb24ndCBsb2FkIGFub3RoZXIgcGx1Z2luIGZvciB0aGlzIGJ1ZmZlcgorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCitzZXRsb2NhbCBjaW5kZW50CisKKyIgU2V0ICdmb3JtYXRvcHRpb25zJyB0byBicmVhayBjb21tZW50IGxpbmVzIGJ1dCBub3Qgb3RoZXIgbGluZXMsCisiIGFuZCBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gaGl0dGluZyA8Q1I+IG9yIHVzaW5nICJvIi4KK3NldGxvY2FsIGZvLT10IGZvKz1jcm9xbAorCisiIFNldCAnY29tbWVudHMnIHRvIGZvcm1hdCBkYXNoZWQgbGlzdHMgaW4gY29tbWVudHMuCitzZXRsb2NhbCBjb21tZW50cz1zTzoqXCAtLG1POipcIFwgLGV4TzoqLyxzMTovKixtYjoqLGV4OiovLDovLy8sOi8vCisKK2lmIGhhcygiZ3VpX3dpbjMyIikgJiYgIWV4aXN0cygiYjpicm93c2VmaWx0ZXIiKQorICAgIGxldCBiOmJyb3dzZWZpbHRlciA9ICJDIyBTb3VyY2UgRmlsZXMgKCouY3MpXHQqLmNzXG4iIC4KKwkJICAgICAgIFwgIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9jc2MudmltIGIvcnVudGltZS9mdHBsdWdpbi9jc2MudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZjkwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL2NzYy52aW0KQEAgLTAsMCArMSwyNiBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6CWNzYworIiBNYWludGFpbmVyOglEYW4gU2hhcnAgPGR3c2hhcnAgYXQgaG90bWFpbCBkb3QgY29tPgorIiBMYXN0IENoYW5nZWQ6IDIwMDMgU2VwIDI5CisiIFVSTDoJCWh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwcGVvcGxlL3ZpbS9mdHBsdWdpbgorCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikgfCBmaW5pc2ggfCBlbmRpZgorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCisiIE1ha2Ugc3VyZSB0aGUgY29udGludWF0aW9uIGxpbmVzIGJlbG93IGRvIG5vdCBjYXVzZSBwcm9ibGVtcyBpbgorIiBjb21wYXRpYmlsaXR5IG1vZGUuCitsZXQgczpzYXZlX2NwbyA9ICZjcG8KK3NldCBjcG8tPUMKKworaWYgZXhpc3RzKCJsb2FkZWRfbWF0Y2hpdCIpCisgICAgbGV0IGI6bWF0Y2hfd29yZHM9CisJXCAnXDxmaXhcPjpcPGVuZGZpeFw+LCcgLgorCVwgJ1w8aWZcPjpcPGVsc2VcJShpZlwpXD1cPjpcPGVuZGlmXD4sJyAuCisJXCAnXDwhbG9vcG9uZGltZW5zaW9uc1w+XHxcPCFsb29wb25zZWxlY3RlZFw+Olw8IWVuZGxvb3BcPicKK2VuZGlmCisKKyIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAidW5sZXQhIGI6bWF0Y2hfd29yZHMiCisKKyIgUmVzdG9yZSB0aGUgc2F2ZWQgY29tcGF0aWJpbGl0eSBvcHRpb25zLgorbGV0ICZjcG8gPSBzOnNhdmVfY3BvCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2NzaC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2NzaC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1M2NiYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vY3NoLnZpbQpAQCAtMCwwICsxLDQ3IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJY3NoCisiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlZDogMjAwMyBTZXAgMjkKKyIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCisKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgTWFrZSBzdXJlIHRoZSBjb250aW51YXRpb24gbGluZXMgYmVsb3cgZG8gbm90IGNhdXNlIHByb2JsZW1zIGluCisiIGNvbXBhdGliaWxpdHkgbW9kZS4KK2xldCBzOnNhdmVfY3BvID0gJmNwbworc2V0IGNwby09QworCitzZXRsb2NhbCBjb21tZW50c3RyaW5nPSMlcworc2V0bG9jYWwgZm9ybWF0b3B0aW9ucy09dAorc2V0bG9jYWwgZm9ybWF0b3B0aW9ucys9Y3JxbAorCisiIENzaDogIHRoYW5rcyB0byBKb2hhbm5lcyBaZWxsbmVyCisiIC0gQm90aCBmb3JlYWNoIGFuZCBlbmQgbXVzdCBhcHBlYXIgYWxvbmUgb24gc2VwYXJhdGUgbGluZXMuCisiIC0gVGhlIHdvcmRzIGVsc2UgYW5kIGVuZGlmIG11c3QgYXBwZWFyIGF0IHRoZSBiZWdpbm5pbmcgb2YgaW5wdXQgbGluZXM7CisiICAgdGhlIGlmIG11c3QgYXBwZWFyIGFsb25lIG9uIGl0cyBpbnB1dCBsaW5lIG9yIGFmdGVyIGFuIGVsc2UuCisiIC0gRWFjaCBjYXNlIGxhYmVsIGFuZCB0aGUgZGVmYXVsdCBsYWJlbCBtdXN0IGFwcGVhciBhdCB0aGUgc3RhcnQgb2YgYQorIiAgIGxpbmUuCisiIC0gd2hpbGUgYW5kIGVuZCBtdXN0IGFwcGVhciBhbG9uZSBvbiB0aGVpciBpbnB1dCBsaW5lcy4KK2lmIGV4aXN0cygibG9hZGVkX21hdGNoaXQiKQorICAgIGxldCBiOm1hdGNoX3dvcmRzID0KKyAgICAgIFwgJ15ccypcPGlmXD4uKiguKikuKlw8dGhlblw+OicuCisgICAgICBcICAgJ15ccypcPGVsc2VcPlxzXCtcPGlmXD4uKiguKikuKlw8dGhlblw+Ol5ccypcPGVsc2VcPjonLgorICAgICAgXCAgICdeXHMqXDxlbmRpZlw+LCcuCisgICAgICBcICdcJSheXHMqXDxmb3JlYWNoXD5cc1wrXFNcK1x8XnMqXDx3aGlsZVw+XCkuKiguKik6Jy4KKyAgICAgIFwgICAnXDxicmVha1w+Olw8Y29udGludWVcPjpeXHMqXDxlbmRcPiwnLgorICAgICAgXCAnXlxzKlw8c3dpdGNoXD4uKiguKik6XlxzKlw8Y2FzZVw+XHNcKzpeXHMqXDxkZWZhdWx0XD46XlxzKlw8ZW5kc3dcPicKK2VuZGlmCisKKyIgQ2hhbmdlIHRoZSA6YnJvd3NlIGUgZmlsdGVyIHRvIHByaW1hcmlseSBzaG93IGNzaC1yZWxhdGVkIGZpbGVzLgoraWYgaGFzKCJndWlfd2luMzIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9ImNzaCBTY3JpcHRzICgqLmNzaClcdCouY3NoXG4iIC4KKwkJXAkiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKK2VuZGlmCisKKyIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAic2V0bG9jYWwgY29tbWVudHN0cmluZzwgZm9ybWF0b3B0aW9uczwiIC4KKwkJXCAgICAgIiB8IHVubGV0ISBiOm1hdGNoX3dvcmRzIGI6YnJvd3NlZmlsdGVyIgorCisiIFJlc3RvcmUgdGhlIHNhdmVkIGNvbXBhdGliaWxpdHkgb3B0aW9ucy4KK2xldCAmY3BvID0gczpzYXZlX2NwbwpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9jc3MudmltIGIvcnVudGltZS9mdHBsdWdpbi9jc3MudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZWI5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL2Nzcy52aW0KQEAgLTAsMCArMSwyMCBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBDU1MKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL2Z0cGx1Z2luL3BjcC9jc3MvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDQtMjUKKyIgYXJjaC10YWc6CSAgICA1ZmE3Yzc0Zi1iZjFhLTQ3YzQtYjA2Zi02ZWZlOGY0OGRiM2IKKworIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKyAgZmluaXNoCitlbmRpZgorCisiIERvbid0IGxvYWQgYW5vdGhlciBwbHVnaW4gZm9yIHRoaXMgYnVmZmVyCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAic2V0bCBjb208IgorCitzZXRsb2NhbCBjb21tZW50cz1zMTovKixtYjoqLGV4OiovCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vZGViY2hhbmdlbG9nLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vZGViY2hhbmdlbG9nLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmRiNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9kZWJjaGFuZ2Vsb2cudmltCkBAIC0wLDAgKzEsMjA2IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJRGViaWFuIENoYW5nZWxvZworIiBNYWludGFpbmVyOglNaWNoYWVsIFBpZWZlbCA8cGllZmVsQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgorIiBMYXN0IENoYW5nZToJMjMgTWFyY2ggMjAwNAorCitpZiBleGlzdHMoImc6ZGlkX2NoYW5nZWxvZ19mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKKworIiBEb24ndCBsb2FkIGFub3RoZXIgcGx1Z2luICh0aGlzIGlzIGdsb2JhbCkKK2xldCBnOmRpZF9jaGFuZ2Vsb2dfZnRwbHVnaW4gPSAxCisKKyIgSGVscGVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdmFyaW91cyBkYXRhLgorIiBSZXR1cm5zIGZ1bGwgbmFtZSwgZWl0aGVyIGZyb20gJERFQkZVTExOQU1FIG9yIGRlYmlhbmZ1bGxuYW1lLgorIiBUT0RPIElzIHRoZXJlIGEgd2F5IHRvIGRldGVybWluZSBuYW1lIGZyb20gYW55d2hlcmUgZWxzZT8KK2Z1bmN0aW9uIDxTSUQ+RnVsbE5hbWUoKQorICAgIGlmIGV4aXN0cygiJERFQkZVTExOQU1FIikKKwlyZXR1cm4gJERFQkZVTExOQU1FCisgICAgZWxzZWlmIGV4aXN0cygiZzpkZWJpYW5mdWxsbmFtZSIpCisJcmV0dXJuIGc6ZGViaWFuZnVsbG5hbWUKKyAgICBlbHNlCisJcmV0dXJuICJZb3VyIE5hbWUiCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKKyIgUmV0dXJucyBlbWFpbCBhZGRyZXNzLCBmcm9tICRERUJFTUFJTCwgJEVNQUlMIG9yIGRlYmlhbmVtYWlsLgorZnVuY3Rpb24gPFNJRD5FbWFpbCgpCisgICAgaWYgZXhpc3RzKCIkREVCRU1BSUwiKQorCXJldHVybiAkREVCRU1BSUwKKyAgICBlbHNlaWYgZXhpc3RzKCIkRU1BSUwiKQorCXJldHVybiAkRU1BSUwKKyAgICBlbHNlaWYgZXhpc3RzKCJnOmRlYmlhbmVtYWlsIikKKwlyZXR1cm4gZzpkZWJpYW5mdWxsZW1haWwKKyAgICBlbHNlCisJcmV0dXJuICJ5b3VyQGVtYWlsLmFkZHJlc3MiCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKKyIgUmV0dXJucyBkYXRlIGluIFJGQzgyMiBmb3JtYXQuCitmdW5jdGlvbiA8U0lEPkRhdGUoKQorICAgIGxldCBzYXZlbGFuZyA9IHY6bGNfdGltZQorICAgIGV4ZWN1dGUgImxhbmd1YWdlIHRpbWUgQyIKKyAgICBsZXQgZGF0ZWFuZHRpbWUgPSBzdHJmdGltZSgiJWEsICVkICViICVZICVYICV6IikKKyAgICBleGVjdXRlICJsYW5ndWFnZSB0aW1lICIgLiBzYXZlbGFuZworICAgIHJldHVybiBkYXRlYW5kdGltZQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gPFNJRD5XYXJuSWZOb3RVbmZpbmFsaXNlZCgpCisgICAgaWYgbWF0Y2goZ2V0bGluZSgiLiIpLCAiIC0tIFtbOmFscGhhOl1dW1s6YWxudW06XS5dIikhPS0xCisJZWNob2hsIFdhcm5pbmdNc2cKKwllY2hvICJUaGUgZW50cnkgaGFzIG5vdCBiZWVuIHVuZmluYWxpc2VkIGJlZm9yZSBlZGl0aW5nLiIKKwllY2hvaGwgTm9uZQorCXJldHVybiAxCisgICAgZW5kaWYKKyAgICByZXR1cm4gMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gPFNJRD5GaW5hbGlzZWQoKQorICAgIGxldCBzYXZlbGluZW51bSA9IGxpbmUoIi4iKQorICAgIG5vcm1hbCAxRworICAgIGNhbGwgc2VhcmNoKCJeIC0tICIpCisgICAgaWYgbWF0Y2goZ2V0bGluZSgiLiIpLCAiIC0tIFtbOmFscGhhOl1dW1s6YWxudW06XS5dIikhPS0xCisJbGV0IHJldHVybnZhbHVlID0gMQorICAgIGVsc2UKKwlsZXQgcmV0dXJudmFsdWUgPSAwCisgICAgZW5kaWYKKyAgICBleGVjdXRlIHNhdmVsaW5lbnVtCisgICAgcmV0dXJuIHJldHVybnZhbHVlCitlbmRmdW5jdGlvbgorCisiIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIG1lbnVzCitmdW5jdGlvbiBOZXdWZXJzaW9uKCkKKyAgICAiIFRoZSBuZXcgZW50cnkgaXMgdW5maW5hbGlzZWQgYW5kIHNoYWxsIGJlIGNoYW5nZWQKKyAgICBhbWVudSBkaXNhYmxlIENoYW5nZWxvZy5OZXdcIFZlcnNpb24KKyAgICBhbWVudSBlbmFibGUgQ2hhbmdlbG9nLkFkZFwgRW50cnkKKyAgICBhbWVudSBlbmFibGUgQ2hhbmdlbG9nLkNsb3NlXCBCdWcKKyAgICBhbWVudSBlbmFibGUgQ2hhbmdlbG9nLlNldFwgRGlzdHJpYnV0aW9uCisgICAgYW1lbnUgZW5hYmxlIENoYW5nZWxvZy5TZXRcIFVyZ2VuY3kKKyAgICBhbWVudSBkaXNhYmxlIENoYW5nZWxvZy5VbmZpbmFsaXNlCisgICAgYW1lbnUgZW5hYmxlIENoYW5nZWxvZy5GaW5hbGlzZQorICAgIGNhbGwgYXBwZW5kKDAsIHN1YnN0aXR1dGUoZ2V0bGluZSgxKSwnLVwoW1s6ZGlnaXQ6XV1cK1wpKScsICct3FwxKScsICcnKSkKKyAgICBjYWxsIGFwcGVuZCgxLCAiIikKKyAgICBjYWxsIGFwcGVuZCgyLCAiIikKKyAgICBjYWxsIGFwcGVuZCgzLCAiIC0tICIpCisgICAgY2FsbCBhcHBlbmQoNCwgIiIpCisgICAgY2FsbCBEaXN0cmlidXRpb24oInVuc3RhYmxlIikKKyAgICBjYWxsIFVyZ2VuY3koImxvdyIpCisgICAgbm9ybWFsIDFHCisgICAgY2FsbCBzZWFyY2goIikiKQorICAgIG5vcm1hbCBoCisgICAgbm9ybWFsIAEKKyAgICBjYWxsIHNldGxpbmUoMSwgc3Vic3RpdHV0ZShnZXRsaW5lKDEpLCct3FwoW1s6ZGlnaXQ6XV1cK1wpKScsICctXDEpJywgJycpKQorICAgIGNhbGwgQWRkRW50cnkoKQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gQWRkRW50cnkoKQorICAgIG5vcm1hbCAxRworICAgIGNhbGwgc2VhcmNoKCJeIC0tICIpCisgICAgbm9ybWFsIGtrCisgICAgY2FsbCBhcHBlbmQoIi4iLCAiICAqICIpCisgICAgbm9ybWFsIGpqagorICAgIGxldCB3YXJuPTxTSUQ+V2FybklmTm90VW5maW5hbGlzZWQoKQorICAgIG5vcm1hbCBraworICAgIGlmIHdhcm4KKwllY2hvaGwgTW9yZU1zZworCWNhbGwgaW5wdXQoIkhpdCBFTlRFUiIpCisJZWNob2hsIE5vbmUKKyAgICBlbmRpZgorICAgIHN0YXJ0aW5zZXJ0IQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gQ2xvc2VCdWcoKQorICAgIG5vcm1hbCAxRworICAgIGNhbGwgc2VhcmNoKCJeIC0tICIpCisgICAgbGV0IHdhcm49PFNJRD5XYXJuSWZOb3RVbmZpbmFsaXNlZCgpCisgICAgbm9ybWFsIGtrCisgICAgY2FsbCBhcHBlbmQoIi4iLCAiICAqICAoY2xvc2VzOiAjIiAuIGlucHV0KCJCdWcgbnVtYmVyIHRvIGNsb3NlOiAiKSAuICIpIikKKyAgICBub3JtYWwgal5sbAorICAgIHN0YXJ0aW5zZXJ0CitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiBEaXN0cmlidXRpb24oZGlzdCkKKyAgICBjYWxsIHNldGxpbmUoMSwgc3Vic3RpdHV0ZShnZXRsaW5lKDEpLCAiKSBbWzpsb3dlcjpdIF0qOyIsICIpICIgLiBhOmRpc3QgLiAiOyIsICIiKSkKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIFVyZ2VuY3kodXJnKQorICAgIGNhbGwgc2V0bGluZSgxLCBzdWJzdGl0dXRlKGdldGxpbmUoMSksICJ1cmdlbmN5PS4qJCIsICJ1cmdlbmN5PSIgLiBhOnVyZywgIiIpKQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gPFNJRD5VbmZpbmFsaXNlTWVudSgpCisgICAgIiBUaGlzIG1lYW5zIHRoZSBlbnRyeSBzaGFsbCBiZSBjaGFuZ2VkCisgICAgYW1lbnUgZGlzYWJsZSBDaGFuZ2Vsb2cuTmV3XCBWZXJzaW9uCisgICAgYW1lbnUgZW5hYmxlIENoYW5nZWxvZy5BZGRcIEVudHJ5CisgICAgYW1lbnUgZW5hYmxlIENoYW5nZWxvZy5DbG9zZVwgQnVnCisgICAgYW1lbnUgZW5hYmxlIENoYW5nZWxvZy5TZXRcIERpc3RyaWJ1dGlvbgorICAgIGFtZW51IGVuYWJsZSBDaGFuZ2Vsb2cuU2V0XCBVcmdlbmN5CisgICAgYW1lbnUgZGlzYWJsZSBDaGFuZ2Vsb2cuVW5maW5hbGlzZQorICAgIGFtZW51IGVuYWJsZSBDaGFuZ2Vsb2cuRmluYWxpc2UKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIFVuZmluYWxpc2UoKQorICAgIGNhbGwgPFNJRD5VbmZpbmFsaXNlTWVudSgpCisgICAgbm9ybWFsIDFHCisgICAgY2FsbCBzZWFyY2goIl4gLS0gIikKKyAgICBjYWxsIHNldGxpbmUoIi4iLCAiIC0tICIpCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiA8U0lEPkZpbmFsaXNlTWVudSgpCisgICAgIiBUaGlzIG1lYW5zIHRoZSBlbnRyeSBzaG91bGQgbm90IGJlIGNoYW5nZWQgYW55bW9yZQorICAgIGFtZW51IGVuYWJsZSBDaGFuZ2Vsb2cuTmV3XCBWZXJzaW9uCisgICAgYW1lbnUgZGlzYWJsZSBDaGFuZ2Vsb2cuQWRkXCBFbnRyeQorICAgIGFtZW51IGRpc2FibGUgQ2hhbmdlbG9nLkNsb3NlXCBCdWcKKyAgICBhbWVudSBkaXNhYmxlIENoYW5nZWxvZy5TZXRcIERpc3RyaWJ1dGlvbgorICAgIGFtZW51IGRpc2FibGUgQ2hhbmdlbG9nLlNldFwgVXJnZW5jeQorICAgIGFtZW51IGVuYWJsZSBDaGFuZ2Vsb2cuVW5maW5hbGlzZQorICAgIGFtZW51IGRpc2FibGUgQ2hhbmdlbG9nLkZpbmFsaXNlCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiBGaW5hbGlzZSgpCisgICAgY2FsbCA8U0lEPkZpbmFsaXNlTWVudSgpCisgICAgbm9ybWFsIDFHCisgICAgY2FsbCBzZWFyY2goIl4gLS0gIikKKyAgICBjYWxsIHNldGxpbmUoIi4iLCAiIC0tICIgLiA8U0lEPkZ1bGxOYW1lKCkgLiAiIDwiIC4gPFNJRD5FbWFpbCgpIC4gIj4gICIgLiA8U0lEPkRhdGUoKSkKK2VuZGZ1bmN0aW9uCisKKworZnVuY3Rpb24gPFNJRD5NYWtlTWVudSgpCisgICAgYW1lbnUgJkNoYW5nZWxvZy4mTmV3XCBWZXJzaW9uCQkJOmNhbGwgTmV3VmVyc2lvbigpPENSPgorICAgIGFtZW51IENoYW5nZWxvZy4mQWRkXCBFbnRyeQkJCQk6Y2FsbCBBZGRFbnRyeSgpPENSPgorICAgIGFtZW51IENoYW5nZWxvZy4mQ2xvc2VcIEJ1ZwkJCQk6Y2FsbCBDbG9zZUJ1ZygpPENSPgorICAgIG1lbnUgQ2hhbmdlbG9nLi1zZXAtCQkJCTxudWw+CisKKyAgICBhbWVudSBDaGFuZ2Vsb2cuU2V0XCAmRGlzdHJpYnV0aW9uLiZ1bnN0YWJsZQk6Y2FsbCBEaXN0cmlidXRpb24oInVuc3RhYmxlIik8Q1I+CisgICAgYW1lbnUgQ2hhbmdlbG9nLlNldFwgRGlzdHJpYnV0aW9uLiZmcm96ZW4JCTpjYWxsIERpc3RyaWJ1dGlvbigiZnJvemVuIik8Q1I+CisgICAgYW1lbnUgQ2hhbmdlbG9nLlNldFwgRGlzdHJpYnV0aW9uLiZzdGFibGUJCTpjYWxsIERpc3RyaWJ1dGlvbigic3RhYmxlIik8Q1I+CisgICAgbWVudSBDaGFuZ2Vsb2cuU2V0XCBEaXN0cmlidXRpb24uLXNlcC0JCTxudWw+CisgICAgYW1lbnUgQ2hhbmdlbG9nLlNldFwgRGlzdHJpYnV0aW9uLmZyb3plblwgdW5zdGFibGUJOmNhbGwgRGlzdHJpYnV0aW9uKCJmcm96ZW4gdW5zdGFibGUiKTxDUj4KKyAgICBhbWVudSBDaGFuZ2Vsb2cuU2V0XCBEaXN0cmlidXRpb24uc3RhYmxlXCB1bnN0YWJsZQk6Y2FsbCBEaXN0cmlidXRpb24oInN0YWJsZSB1bnN0YWJsZSIpPENSPgorICAgIGFtZW51IENoYW5nZWxvZy5TZXRcIERpc3RyaWJ1dGlvbi5zdGFibGVcIGZyb3plbgk6Y2FsbCBEaXN0cmlidXRpb24oInN0YWJsZSBmcm96ZW4iKTxDUj4KKyAgICBhbWVudSBDaGFuZ2Vsb2cuU2V0XCBEaXN0cmlidXRpb24uc3RhYmxlXCBmcm96ZW5cIHVuc3RhYmxlCTpjYWxsIERpc3RyaWJ1dGlvbigic3RhYmxlIGZyb3plbiB1bnN0YWJsZSIpPENSPgorCisgICAgYW1lbnUgQ2hhbmdlbG9nLlNldFwgJlVyZ2VuY3kuJmxvdwkJCTpjYWxsIFVyZ2VuY3koImxvdyIpPENSPgorICAgIGFtZW51IENoYW5nZWxvZy5TZXRcIFVyZ2VuY3kuJm1lZGl1bQkJOmNhbGwgVXJnZW5jeSgibWVkaXVtIik8Q1I+CisgICAgYW1lbnUgQ2hhbmdlbG9nLlNldFwgVXJnZW5jeS4maGlnaAkJCTpjYWxsIFVyZ2VuY3koImhpZ2giKTxDUj4KKworICAgIG1lbnUgQ2hhbmdlbG9nLi1zZXAtCQkJCTxudWw+CisgICAgYW1lbnUgQ2hhbmdlbG9nLlUmbmZpbmFsaXNlCQkJCTpjYWxsIFVuZmluYWxpc2UoKTxDUj4KKyAgICBhbWVudSBDaGFuZ2Vsb2cuJkZpbmFsaXNlCQkJCTpjYWxsIEZpbmFsaXNlKCk8Q1I+CisKKyAgICBpZiA8U0lEPkZpbmFsaXNlZCgpCisJY2FsbCA8U0lEPkZpbmFsaXNlTWVudSgpCisgICAgZWxzZQorCWNhbGwgPFNJRD5VbmZpbmFsaXNlTWVudSgpCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2F1Z3JvdXAgY2hhbmdlbG9nTWVudQorYXUgQnVmRW50ZXIgKiBpZiAmZmlsZXR5cGUgPT0gImRlYmNoYW5nZWxvZyIgfCBjYWxsIDxTSUQ+TWFrZU1lbnUoKSB8IGVuZGlmCithdSBCdWZMZWF2ZSAqIGlmICZmaWxldHlwZSA9PSAiZGViY2hhbmdlbG9nIiB8IGF1bm1lbnUgQ2hhbmdlbG9nIHwgZW5kaWYKK2F1Z3JvdXAgRU5ECisKKyIgRGViaWFuIGNoYW5nZWxvZ3MgYXJlIG5vdCBzdXBwb3NlZCB0byBoYXZlIGFueSBvdGhlciB0ZXh0IHdpZHRoLAorIiBzbyB0aGUgdXNlciBjYW5ub3Qgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nCitzZXRsb2NhbCB0dz03OAorc2V0bG9jYWwgY29tbWVudHM9ZjoqIAorbGV0IGI6dW5kb19mdHBsdWdpbiA9ICJzZXRsb2NhbCB0dzwgY29tbWVudHM8IgpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9kb3NiYXRjaC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2Rvc2JhdGNoLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWE4M2M0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9kb3NiYXRjaC52aW0KQEAgLTAsMCArMSwyMSBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6ICAgIE1TLURPUyAuYmF0IGZpbGVzCisiIE1haW50YWluZXI6ICBNaWtlIFdpbGxpYW1zIDxtcndAZWFuZGVtLmNvLnVrPgorIiBMYXN0IENoYW5nZTogNXRoIEZlYnJ1YXJ5IDIwMDMKKworIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKyAgZmluaXNoCitlbmRpZgorCisiIERvbid0IGxvYWQgYW5vdGhlciBwbHVnaW4gZm9yIHRoaXMgYnVmZmVyCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgQkFUIGNvbW1lbnQgZm9ybWF0dGluZworc2V0bG9jYWwgY29tbWVudHM9YjpyZW0sYjpAcmVtLGI6UkVNLGI6QFJFTSxiOjo6CitzZXRsb2NhbCBmb3JtYXRvcHRpb25zLT10IGZvcm1hdG9wdGlvbnMrPXJvbAorCisiIERlZmluZSBwYXR0ZXJucyBmb3IgdGhlIGJyb3dzZSBmaWxlIGZpbHRlcgoraWYgaGFzKCJndWlfd2luMzIiKSAmJiAhZXhpc3RzKCJiOmJyb3dzZWZpbHRlciIpCisgIGxldCBiOmJyb3dzZWZpbHRlciA9ICJET1MgQmF0Y2ggRmlsZXMgKCouYmF0LCAqLmNtZClcdCouYmF0OyouY21kXG5BbGwgRmlsZXMgKCouKilcdCouKlxuIgorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vZHRkLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vZHRkLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTExMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9kdGQudmltCkBAIC0wLDAgKzEsMzMgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglkdGQKKyIgTWFpbnRhaW5lcjoJRGFuIFNoYXJwIDxkd3NoYXJwIGF0IGhvdG1haWwgZG90IGNvbT4KKyIgTGFzdCBDaGFuZ2VkOiAyMDAzIFNlcCAyOQorIiBVUkw6CQlodHRwOi8vbXl3ZWJwYWdlLm5ldHNjYXBlLmNvbS9zaGFycHBlb3BsZS92aW0vZnRwbHVnaW4KKworaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpIHwgZmluaXNoIHwgZW5kaWYKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworIiBNYWtlIHN1cmUgdGhlIGNvbnRpbnVhdGlvbiBsaW5lcyBiZWxvdyBkbyBub3QgY2F1c2UgcHJvYmxlbXMgaW4KKyIgY29tcGF0aWJpbGl0eSBtb2RlLgorbGV0IHM6c2F2ZV9jcG8gPSAmY3BvCitzZXQgY3BvLT1DCisKK3NldGxvY2FsIGNvbW1lbnRzdHJpbmc9PCEtLSVzLS0+CisKK2lmIGV4aXN0cygibG9hZGVkX21hdGNoaXQiKQorICAgIGxldCBiOm1hdGNoX3dvcmRzID0gJzwhLS06LS0+LDwhOj4nCitlbmRpZgorCisiIENoYW5nZSB0aGUgOmJyb3dzZSBlIGZpbHRlciB0byBwcmltYXJpbHkgc2hvdyBKYXZhLXJlbGF0ZWQgZmlsZXMuCitpZiBoYXMoImd1aV93aW4zMiIpCisgICAgbGV0ICBiOmJyb3dzZWZpbHRlcj0iRFREIEZpbGVzICgqLmR0ZClcdCouZHRkXG4iIC4KKwkJXAkiWE1MIEZpbGVzICgqLnhtbClcdCoueG1sXG4iIC4KKwkJXAkiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKK2VuZGlmCisKKyIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAic2V0bG9jYWwgY29tbWVudHN0cmluZzwiIC4KKwkJXCAgICAgIiB8IHVubGV0ISBiOm1hdGNod29yZHMgYjpicm93c2VmaWx0ZXIiCisKKyIgUmVzdG9yZSB0aGUgc2F2ZWQgY29tcGF0aWJpbGl0eSBvcHRpb25zLgorbGV0ICZjcG8gPSBzOnNhdmVfY3BvCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2ZvcnRyYW4udmltIGIvcnVudGltZS9mdHBsdWdpbi9mb3J0cmFuLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTg5YmY0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9mb3J0cmFuLnZpbQpAQCAtMCwwICsxLDExNCBAQAorIiBWaW0gc2V0dGluZ3MgZmlsZQorIiBMYW5ndWFnZToJRm9ydHJhbjkwIChhbmQgRm9ydHJhbjk1LCBGb3J0cmFuNzcsIEYgYW5kIGVsZjkwKQorIiBWZXJzaW9uOgkwLjQ0CisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAxOAorIiBVUkw6CQlodHRwOi8vd3d3LnVuYi5jYS9jaGVtL2FqaXQvZnRwbHVnaW4vZm9ydHJhbi52aW0KKyIgTWFpbnRhaW5lcjoJQWppdCBKLiBUaGFra2FyIDxhaml0QHVuYi5jYT47IDxodHRwOi8vd3d3LnVuYi5jYS9jaGVtL2FqaXQvPgorIiBVc2FnZToJRG8gOmhlbHAgZm9ydHJhbi1wbHVnaW4gZnJvbSBWaW0KKworIiBPbmx5IGRvIHRoZXNlIHNldHRpbmdzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKKworIiBEb24ndCBkbyBvdGhlciBmaWxlIHR5cGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIGZpeGVkIG9yIGZyZWUgZm9ybWF0IHNvdXJjZSBmaWxlCisiIGlmIHRoaXMgaGFzbid0IGJlZW4gZG9uZSB5ZXQKK2lmICFleGlzdHMoImI6Zm9ydHJhbl9maXhlZF9zb3VyY2UiKQorICBpZiBleGlzdHMoImZvcnRyYW5fZnJlZV9zb3VyY2UiKQorICAgICIgVXNlciBndWFyYW50ZWVzIGZyZWUgc291cmNlIGZvcm0KKyAgICBsZXQgYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9IDAKKyAgZWxzZWlmIGV4aXN0cygiZm9ydHJhbl9maXhlZF9zb3VyY2UiKQorICAgICIgVXNlciBndWFyYW50ZWVzIGZpeGVkIHNvdXJjZSBmb3JtCisgICAgbGV0IGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPSAxCisgIGVsc2UKKyAgICAiIGY5MCBhbmQgZjk1IGFsbG93IGJvdGggZml4ZWQgYW5kIGZyZWUgc291cmNlIGZvcm0KKyAgICAiIGFzc3VtZSBmaXhlZCBzb3VyY2UgZm9ybSB1bmxlc3Mgc2lnbnMgb2YgZnJlZSBzb3VyY2UgZm9ybQorICAgICIgYXJlIGRldGVjdGVkIGluIHRoZSBmaXJzdCBmaXZlIGNvbHVtbnMgb2YgdGhlIGZpcnN0IDI1IGxpbmVzCisgICAgIiBEZXRlY3Rpb24gYmVjb21lcyBtb3JlIGFjY3VyYXRlIGFuZCB0aW1lLWNvbnN1bWluZyBpZiBtb3JlIGxpbmVzCisgICAgIiBhcmUgY2hlY2tlZC4gSW5jcmVhc2UgdGhlIGxpbWl0IGJlbG93IGlmIHlvdSBrZWVwIGxvdHMgb2YgY29tbWVudHMgYXQKKyAgICAiIHRoZSB2ZXJ5IHRvcCBvZiBlYWNoIGZpbGUgYW5kIHlvdSBoYXZlIGEgZmFzdCBjb21wdXRlcgorICAgIGxldCBzOmxtYXggPSAyNQorICAgIGlmICggczpsbWF4ID4gbGluZSgiJCIpICkKKyAgICAgIGxldCBzOmxtYXggPSBsaW5lKCIkIikKKyAgICBlbmRpZgorICAgIGxldCBiOmZvcnRyYW5fZml4ZWRfc291cmNlID0gMQorICAgIGxldCBzOmxuPTEKKyAgICB3aGlsZSBzOmxuIDw9IHM6bG1heAorICAgICAgbGV0IHM6dGVzdCA9IHN0cnBhcnQoZ2V0bGluZShzOmxuKSwwLDUpCisgICAgICBpZiBzOnRlc3RbMF0gIX4gJ1tDYyohI10nICYmIHM6dGVzdCAhfiAnXiBcK1shI10nICYmIHM6dGVzdCA9fiAnW14gMC05XHRdJworCWxldCBiOmZvcnRyYW5fZml4ZWRfc291cmNlID0gMAorCWJyZWFrCisgICAgICBlbmRpZgorICAgICAgbGV0IHM6bG4gPSBzOmxuICsgMQorICAgIGVuZHdoaWxlCisgIGVuZGlmCitlbmRpZgorCisiIFNldCBjb21tZW50cyBhbmQgdGV4dHdpZHRoIGFjY29yZGluZyB0byBzb3VyY2UgdHlwZQoraWYgKGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMSkKKyAgc2V0bG9jYWwgY29tbWVudHM9OiEsOiosOkMKKyAgIiBGaXhlZCBmb3JtYXQgcmVxdWlyZXMgYSB0ZXh0d2lkdGggb2YgNzIgZm9yIGNvZGUKKyAgc2V0bG9jYWwgdHc9NzIKKyAgIiBJZiB5b3UgbmVlZCB0byBhZGQgIiYiIG9uIGNvbnRpbnVlZCBsaW5lcyBzbyB0aGF0IHRoZSBjb2RlIGlzCisgICIgY29tcGF0aWJsZSB3aXRoIGJvdGggZnJlZSBhbmQgZml4ZWQgZm9ybWF0LCB0aGVuIHlvdSBzaG91bGQgZG8gc28KKyAgIiBpbiBjb2x1bW4gNzMgYW5kIHVuY29tbWVudCB0aGUgbmV4dCBsaW5lCisgICIgc2V0bG9jYWwgdHc9NzMKK2Vsc2UKKyAgc2V0bG9jYWwgY29tbWVudHM9OiEKKyAgIiBGcmVlIGZvcm1hdCBhbGxvd3MgYSB0ZXh0d2lkdGggb2YgMTMyIGZvciBjb2RlIGJ1dCA4MCBpcyBtb3JlIHVzdWFsCisgIHNldGxvY2FsIHR3PTgwCitlbmRpZgorCisiIFNldCBjb21tZW50c3RyaW5nIGZvciBmb2xkbWV0aG9kPW1hcmtlcgorc2V0bG9jYWwgY21zPSElcworCisiIFRhYnMgYXJlIG5vdCBhIGdvb2QgaWRlYSBpbiBGb3J0cmFuIHNvIHRoZSBkZWZhdWx0IGlzIHRvIGV4cGFuZCB0YWJzCitpZiAhZXhpc3RzKCJmb3J0cmFuX2hhdmVfdGFicyIpCisgIHNldGxvY2FsIGV4cGFuZHRhYgorZW5kaWYKKworIiBTZXQgJ2Zvcm1hdG9wdGlvbnMnIHRvIGJyZWFrIGNvbW1lbnQgYW5kIHRleHQgbGluZXMgYnV0IGFsbG93IGxvbmcgbGluZXMKK3NldGxvY2FsIGZvKz10Y3FsCisKK3NldGxvY2FsIGluY2x1ZGU9XiNcXD1cXHMqaW5jbHVkZVxcc1xcKworCitsZXQgczpjcG9zZXQ9JmNwb3B0aW9ucworc2V0IGNwb3B0aW9ucy09QworCisiIERlZmluZSBwYXR0ZXJucyBmb3IgdGhlIG1hdGNoaXQgcGx1Z2luCitpZiAhZXhpc3RzKCJiOm1hdGNoX3dvcmRzIikKKyAgbGV0IHM6bm90ZW5kID0gJ1wlKFw8ZW5kXHNcK1wpXEA8IScKKyAgbGV0IHM6bm90c2VsZWN0ID0gJ1wlKFw8c2VsZWN0XHNcK1wpXEA8IScKKyAgbGV0IHM6bm90ZWxzZSA9ICdcJShcPGVuZFxzXCtcfFw8ZWxzZVxzXCtcKVxAPCEnCisgIGxldCBiOm1hdGNoX2lnbm9yZWNhc2UgPSAxCisgIGxldCBiOm1hdGNoX3dvcmRzID0KKyAgICBcICdcPHNlbGVjdFxzKmNhc2VcPjonIC4gczpub3RzZWxlY3QuICdcPGNhc2VcPjpcPGVuZFxzKnNlbGVjdFw+LCcgLgorICAgIFwgczpub3RlbHNlIC4gJ1w8aWZccyooLlwrKVxzKnRoZW5cPjonIC4KKyAgICBcICdcPGVsc2VccypcJShpZlxzKiguXCspXHMqdGhlblwpXD1cPjpcPGVuZFxzKmlmXD4sJy4KKyAgICBcICdkb1xzXCtcKFxkXCtcKTpcJSheXHMqXClcQDw9XDFccywnLgorICAgIFwgczpub3RlbmQgLiAnXDxkb1w+Olw8ZW5kXHMqZG9cPiwnLgorICAgIFwgczpub3RlbHNlIC4gJ1w8d2hlcmVcPjpcPGVsc2V3aGVyZVw+Olw8ZW5kXHMqd2hlcmVcPiwnLgorICAgIFwgczpub3RlbmQgLiAnXDx0eXBlXHMqW14oXTpcPGVuZFxzKnR5cGVcPiwnLgorICAgIFwgczpub3RlbmQgLiAnXDxpbnRlcmZhY2VcPjpcPGVuZFxzKmludGVyZmFjZVw+LCcuCisgICAgXCBzOm5vdGVuZCAuICdcPHN1YnJvdXRpbmVcPjpcPGVuZFxzKnN1YnJvdXRpbmVcPiwnLgorICAgIFwgczpub3RlbmQgLiAnXDxmdW5jdGlvblw+Olw8ZW5kXHMqZnVuY3Rpb25cPiwnLgorICAgIFwgczpub3RlbmQgLiAnXDxtb2R1bGVcPjpcPGVuZFxzKm1vZHVsZVw+LCcuCisgICAgXCBzOm5vdGVuZCAuICdcPHByb2dyYW1cPjpcPGVuZFxzKnByb2dyYW1cPicKK2VuZGlmCisKKyIgRmlsZSBmaWx0ZXJzIGZvciA6YnJvd3NlIGUKK2lmIGhhcygiZ3VpX3dpbjMyIikgJiYgIWV4aXN0cygiYjpicm93c2VmaWx0ZXIiKQorICBsZXQgYjpicm93c2VmaWx0ZXIgPSAiRm9ydHJhbiBGaWxlcyAoKi5mOyouRjsqLmZvcjsqLmY3NzsqLmY5MDsqLmY5NTsqLmZwcDsqLmZ0bilcdCouZjsqLkY7Ki5mb3I7Ki5mNzc7Ki5mOTA7Ki5mOTU7Ki5mcHA7Ki5mdG5cbiIgLgorICAgIFwgIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCitlbmRpZgorCitsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInNldGwgZm88IGNvbTwgdHc8IGNtczwgZXQ8IGluYzwiCisJXCAuICJ8IHVubGV0ISBiOm1hdGNoX2lnbm9yZWNhc2UgYjptYXRjaF93b3JkcyBiOmJyb3dzZWZpbHRlciIKKworbGV0ICZjcG9wdGlvbnM9czpjcG9zZXQKK3VubGV0IHM6Y3Bvc2V0CisKKyIgdmltOnN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vaHRtbC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2h0bWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMzRiMTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL2h0bWwudmltCkBAIC0wLDAgKzEsNDAgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglodG1sCisiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlZDogMjAwNCBNYXkgMTEKKyIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCisKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgTWFrZSBzdXJlIHRoZSBjb250aW51YXRpb24gbGluZXMgYmVsb3cgZG8gbm90IGNhdXNlIHByb2JsZW1zIGluCisiIGNvbXBhdGliaWxpdHkgbW9kZS4KK2xldCBzOnNhdmVfY3BvID0gJmNwbworc2V0IGNwby09QworCitzZXRsb2NhbCBjb21tZW50c3RyaW5nPTwhLS0lcy0tPgorCisiIEhUTUw6ICB0aGFua3MgdG8gSm9oYW5uZXMgWmVsbG5lciBhbmQgQmVuamkgRmlzaGVyLgoraWYgZXhpc3RzKCJsb2FkZWRfbWF0Y2hpdCIpCisgICAgbGV0IGI6bWF0Y2hfaWdub3JlY2FzZSA9IDEKKyAgICBsZXQgYjptYXRjaF9za2lwID0gJ3M6Q29tbWVudCcKKyAgICBsZXQgYjptYXRjaF93b3JkcyA9ICc8Oj4sJyAuCisgICAgXCAnPFxAPD1bb3VdbFw+W14+XSpcJSg+XHwkXCk6PFxAPD1saVw+OjxcQDw9L1tvdV1sPiwnIC4KKyAgICBcICc8XEA8PWRsXD5bXj5dKlwlKD5cfCRcKTo8XEA8PWRbdGRdXD46PFxAPD0vZGw+LCcgLgorICAgIFwgJzxcQDw9XChbXi9dW14gXHQ+XSpcKVtePl0qXCUoPlx8JFwpOjxcQDw9L1wxPicKK2VuZGlmCisKKyIgQ2hhbmdlIHRoZSA6YnJvd3NlIGUgZmlsdGVyIHRvIHByaW1hcmlseSBzaG93IEhUTUwtcmVsYXRlZCBmaWxlcy4KK2lmIGhhcygiZ3VpX3dpbjMyIikKKyAgICBsZXQgIGI6YnJvd3NlZmlsdGVyPSJIVE1MIEZpbGVzICgqLmh0bWwsKi5odG0pXHQqLmh0bSpcbiIgLgorCQlcCSJKYXZhU2NyaXB0IEZpbGVzICgqLmpzKVx0Ki5qc1xuIiAuCisJCVwJIkNhc2NhZGluZyBTdHlsZVNoZWV0cyAoKi5jc3MpXHQqLmNzc1xuIiAuCisJCVwJIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCitlbmRpZgorCisiIFVuZG8gdGhlIHN0dWZmIHdlIGNoYW5nZWQuCitsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInNldGxvY2FsIGNvbW1lbnRzdHJpbmc8IgorICAgIFwJIiB8IHVubGV0ISBiOm1hdGNoX2lnbm9yZWNhc2UgYjptYXRjaF9za2lwIGI6bWF0Y2hfd29yZHMgYjpicm93c2VmaWx0ZXIiCisKKyIgUmVzdG9yZSB0aGUgc2F2ZWQgY29tcGF0aWJpbGl0eSBvcHRpb25zLgorbGV0ICZjcG8gPSBzOnNhdmVfY3BvCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2lzaGQudmltIGIvcnVudGltZS9mdHBsdWdpbi9pc2hkLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2UxYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9pc2hkLnZpbQpAQCAtMCwwICsxLDMwIEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJSW5zdGFsbFNoaWVsZCAoZnQ9aXNoZCkKKyIgTWFpbnRhaW5lcjoJSm9oYW5uZXMgWmVsbG5lciA8am9oYW5uZXNAemVsbG5lci5vcmc+CisiIExhc3QgQ2hhbmdlOglTYXQsIDI0IE1heSAyMDAzIDExOjU1OjM2IENFU1QKKworaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpIHwgZmluaXNoIHwgZW5kaWYKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworc2V0bG9jYWwgbm9jaW5kZW50CitzZXRsb2NhbCBhdXRvaW5kZW50CitzZXRsb2NhbCBmb2xkbWV0aG9kPXN5bnRheAorCitzZXQgY3BvLT1DCisKKyIgbWF0Y2hpdCBzdXBwb3J0CitpZiBleGlzdHMoImxvYWRlZF9tYXRjaGl0IikKKyAgICBsZXQgYjptYXRjaF9pZ25vcmVjYXNlPTAKKyAgICBsZXQgYjptYXRjaF93b3Jkcz0KKyAgICBcICdcJSheXHMqXClcQDw9XDxmdW5jdGlvblw+XHNcK1teKCldXCtccyooOlwlKF5ccypcKVxAPD1cPGJlZ2luXD5ccyokOlwlKF5ccypcKVxAPD1cPHJldHVyblw+OlwlKF5ccypcKVxAPD1cPGVuZFw+XHMqO1xzKiQsJyAuCisgICAgXCAnXCUoXlxzKlwpXEA8PVw8cmVwZWF0XD5ccyokOlwlKF5ccypcKVxAPD1cPHVudGlsXD5cc1wrLlx7LX1ccyo7XHMqJCwnIC4KKyAgICBcICdcJSheXHMqXClcQDw9XDxzd2l0Y2hcPlxzKiguXHstfSk6XCUoXlxzKlwpXEA8PVw8XCUoY2FzZVx8ZGVmYXVsdFwpXD46XCUoXlxzKlwpXEA8PVw8ZW5kc3dpdGNoXD5ccyo7XHMqJCwnIC4KKyAgICBcICdcJSheXHMqXClcQDw9XDx3aGlsZVw+XHMqKC5cey19KTpcJSheXHMqXClcQDw9XDxlbmR3aGlsZVw+XHMqO1xzKiQsJyAuCisgICAgXCAnXCUoXlxzKlwpXEA8PVw8Zm9yXD4uXHstfVw8XCUodG9cfGRvd250b1wpXD46XCUoXlxzKlwpXEA8PVw8ZW5kZm9yXD5ccyo7XHMqJCwnIC4KKyAgICBcICdcJSheXHMqXClcQDw9XDxpZlw+XHMqKC5cey19KVxzKnRoZW46XCUoXlxzKlwpXEA8PVw8ZWxzZVxzKmlmXD5ccyooW14pXSopXHMqdGhlbjpcJSheXHMqXClcQDw9XDxlbHNlXD46XCUoXlxzKlwpXEA8PVw8ZW5kaWZcPlxzKjtccyokJworZW5kaWYKKworaWYgaGFzKCJndWlfd2luMzIiKSAmJiAhZXhpc3RzKCJiOmJyb3dzZWZpbHRlciIpCisgICAgbGV0IGI6YnJvd3NlZmlsdGVyID0gIkluc3RhbGxTaGllbGQgRmlsZXMgKCoucnVsKVx0Ki5ydWxcbiIgLgorCQkgICAgICAgXCAiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKK2VuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2phdmEudmltIGIvcnVudGltZS9mdHBsdWdpbi9qYXZhLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTBiZjMzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9qYXZhLnZpbQpAQCAtMCwwICsxLDYzIEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJSmF2YQorIiBNYWludGFpbmVyOglEYW4gU2hhcnAgPGR3c2hhcnAgYXQgaG90bWFpbCBkb3QgY29tPgorIiBMYXN0IENoYW5nZTogIDIwMDQgTWF5IDE2CisiIFVSTDoJCWh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwcGVvcGxlL3ZpbS9mdHBsdWdpbgorCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikgfCBmaW5pc2ggfCBlbmRpZgorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCisiIE1ha2Ugc3VyZSB0aGUgY29udGludWF0aW9uIGxpbmVzIGJlbG93IGRvIG5vdCBjYXVzZSBwcm9ibGVtcyBpbgorIiBjb21wYXRpYmlsaXR5IG1vZGUuCitsZXQgczpzYXZlX2NwbyA9ICZjcG8KK3NldCBjcG8tPUMKKworIiBHbyBhaGVhZCBhbmQgc2V0IHRoaXMgdG8gZ2V0IGRlY2VudCBpbmRlbnRpbmcgZXZlbiBpZiB0aGUgaW5kZW50IGZpbGVzCisiIGFyZW4ndCBiZWluZyB1c2VkLiAgRm9yIHBlb3BsZSB3aG8gcmVhbGx5IGRvbid0IHdhbnQgYW55IGluZGVudGF0aW9uLAorIiBsZXQgdGhlbSB0dXJuIGl0IG9mZi4KK2lmICFleGlzdHMoImc6ZnRwbHVnaW5famF2YV9ub19pbmRlbnQiKQorICAgIHNldGxvY2FsIGNpbmRlbnQKKworICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAiIENvcnJlY3RseSBpbmRlbnQgYW5vbnltb3VzIGNsYXNzZXMKKyAgICAiIEZyb20gSm9oYW5uZXMgWmVsbG5lciA8am9oYW5uZXNAemVsbG5lci5vcmc+CisgICAgc2V0bG9jYWwgY2lub3B0aW9ucys9ajEKKyAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlbmRpZgorCisiIEZvciBmaWxlbmFtZSBjb21wbGV0aW9uLCBwcmVmZXIgdGhlIC5qYXZhIGV4dGVuc2lvbiBvdmVyIHRoZSAuY2xhc3MKKyIgZXh0ZW5zaW9uLgorc2V0IHN1ZmZpeGVzKz0uY2xhc3MKKworIiBFbmFibGUgZ2Ygb24gaW1wb3J0IHN0YXRlbWVudHMuICBDb252ZXJ0IC4gaW4gdGhlIHBhY2thZ2UKKyIgbmFtZSB0byAvIGFuZCBhcHBlbmQgLmphdmEgdG8gdGhlIG5hbWUsIHRoZW4gc2VhcmNoIHRoZSBwYXRoLgorc2V0bG9jYWwgaW5jbHVkZWV4cHI9c3Vic3RpdHV0ZSh2OmZuYW1lLCdcXC4nLCcvJywnZycpCitzZXRsb2NhbCBzdWZmaXhlc2FkZD0uamF2YQoraWYgZXhpc3RzKCJnOmZ0cGx1Z2luX2phdmFfc291cmNlX3BhdGgiKQorICAgIGxldCAmbDpwYXRoPWc6ZnRwbHVnaW5famF2YV9zb3VyY2VfcGF0aCAuICcsJyAuICZsOnBhdGgKK2VuZGlmCisKKyIgU2V0ICdmb3JtYXRvcHRpb25zJyB0byBicmVhayBjb21tZW50IGxpbmVzIGJ1dCBub3Qgb3RoZXIgbGluZXMsCisiIGFuZCBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gaGl0dGluZyA8Q1I+IG9yIHVzaW5nICJvIi4KK3NldGxvY2FsIGZvcm1hdG9wdGlvbnMtPXQgZm9ybWF0b3B0aW9ucys9Y3JvcWwKKworIiBTZXQgJ2NvbW1lbnRzJyB0byBmb3JtYXQgZGFzaGVkIGxpc3RzIGluIGNvbW1lbnRzLiBCZWhhdmVzIGp1c3QgbGlrZSBDLgorc2V0bG9jYWwgY29tbWVudHMmIGNvbW1lbnRzXj1zTzoqXCAtLG1POipcIFwgLGV4TzoqLworCitzZXRsb2NhbCBjb21tZW50c3RyaW5nPS8vJXMKKworIiBDaGFuZ2UgdGhlIDpicm93c2UgZSBmaWx0ZXIgdG8gcHJpbWFyaWx5IHNob3cgSmF2YS1yZWxhdGVkIGZpbGVzLgoraWYgaGFzKCJndWlfd2luMzIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9IkphdmEgRmlsZXMgKCouamF2YSlcdCouamF2YVxuIiAuCisJCVwJIlByb3BlcnRpZXMgRmlsZXMgKCoucHJvcCopXHQqLnByb3AqXG4iIC4KKwkJXAkiTWFuaWZlc3QgRmlsZXMgKCoubWYpXHQqLm1mXG4iIC4KKwkJXAkiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKK2VuZGlmCisKKyIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAic2V0bG9jYWwgY2luZGVudDwgY2lub3B0aW9uczwgc3VmZml4ZXM8IHN1ZmZpeGVzYWRkPCIgLgorCQlcICAgICAiIGZvcm1hdG9wdGlvbnM8IGNvbW1lbnRzPCBjb21tZW50c3RyaW5nPCBwYXRoPCBpbmNsdWRlZXhwcjwiIC4KKwkJXCAgICAgIiB8IHVubGV0ISBiOmJyb3dzZWZpbHRlciIKKworIiBSZXN0b3JlIHRoZSBzYXZlZCBjb21wYXRpYmlsaXR5IG9wdGlvbnMuCitsZXQgJmNwbyA9IHM6c2F2ZV9jcG8KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vanNwLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vanNwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzZhYzg0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9qc3AudmltCkBAIC0wLDAgKzEsNjYgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglqc3AKKyIgTWFpbnRhaW5lcjoJRGFuIFNoYXJwIDxkd3NoYXJwIGF0IGhvdG1haWwgZG90IGNvbT4KKyIgTGFzdCBDaGFuZ2VkOiAyMDAzIFNlcCAyOQorIiBVUkw6CQlodHRwOi8vbXl3ZWJwYWdlLm5ldHNjYXBlLmNvbS9zaGFycHBlb3BsZS92aW0vZnRwbHVnaW4KKworaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpIHwgZmluaXNoIHwgZW5kaWYKKworIiBNYWtlIHN1cmUgdGhlIGNvbnRpbnVhdGlvbiBsaW5lcyBiZWxvdyBkbyBub3QgY2F1c2UgcHJvYmxlbXMgaW4KKyIgY29tcGF0aWJpbGl0eSBtb2RlLgorbGV0IHM6c2F2ZV9jcG8gPSAmY3BvCitzZXQgY3BvLT1DCisKKyIgRGVmaW5lIHNvbWUgZGVmYXVsdHMgaW4gY2FzZSB0aGUgaW5jbHVkZWQgZnRwbHVnaW5zIGRvbid0IHNldCB0aGVtLgorbGV0IHM6dW5kb19mdHBsdWdpbiA9ICIiCitsZXQgczpicm93c2VmaWx0ZXIgPSAiSmF2YSBGaWxlcyAoKi5qYXZhKVx0Ki5qYXZhXG4iIC4KKwkgICAgXAkgIkhUTUwgRmlsZXMgKCouaHRtbCwgKi5odG0pXHQqLmh0bSpcbiIgLgorCSAgICBcCSAiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKK2xldCBzOm1hdGNoX3dvcmRzID0gIiIKKworcnVudGltZSEgZnRwbHVnaW4vaHRtbC52aW0gZnRwbHVnaW4vaHRtbF8qLnZpbSBmdHBsdWdpbi9odG1sLyoudmltCit1bmxldCBiOmRpZF9mdHBsdWdpbgorCisiIE92ZXJyaWRlIG91ciBkZWZhdWx0cyBpZiB0aGVzZSB3ZXJlIHNldCBieSBhbiBpbmNsdWRlZCBmdHBsdWdpbi4KK2lmIGV4aXN0cygiYjp1bmRvX2Z0cGx1Z2luIikKKyAgICBsZXQgczp1bmRvX2Z0cGx1Z2luID0gYjp1bmRvX2Z0cGx1Z2luCisgICAgdW5sZXQgYjp1bmRvX2Z0cGx1Z2luCitlbmRpZgoraWYgZXhpc3RzKCJiOmJyb3dzZWZpbHRlciIpCisgICAgbGV0IHM6YnJvd3NlZmlsdGVyID0gYjpicm93c2VmaWx0ZXIKKyAgICB1bmxldCBiOmJyb3dzZWZpbHRlcgorZW5kaWYKK2lmIGV4aXN0cygiYjptYXRjaF93b3JkcyIpCisgICAgbGV0IHM6bWF0Y2hfd29yZHMgPSBiOm1hdGNoX3dvcmRzCisgICAgdW5sZXQgYjptYXRjaF93b3JkcworZW5kaWYKKworcnVudGltZSEgZnRwbHVnaW4vamF2YS52aW0gZnRwbHVnaW4vamF2YV8qLnZpbSBmdHBsdWdpbi9qYXZhLyoudmltCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgQ29tYmluZSB0aGUgbmV3IHNldCBvZiB2YWx1ZXMgd2l0aCB0aG9zZSBwcmV2aW91c2x5IGluY2x1ZGVkLgoraWYgZXhpc3RzKCJiOnVuZG9fZnRwbHVnaW4iKQorICAgIGxldCBzOnVuZG9fZnRwbHVnaW4gPSBiOnVuZG9fZnRwbHVnaW4gLiAiIHwgIiAuIHM6dW5kb19mdHBsdWdpbgorZW5kaWYKK2lmIGV4aXN0cyAoImI6YnJvd3NlZmlsdGVyIikKKyAgICBsZXQgczpicm93c2VmaWx0ZXIgPSBiOmJyb3dzZWZpbHRlciAuIHM6YnJvd3NlZmlsdGVyCitlbmRpZgoraWYgZXhpc3RzKCJiOm1hdGNoX3dvcmRzIikKKyAgICBsZXQgczptYXRjaF93b3JkcyA9IGI6bWF0Y2hfd29yZHMgLiAnLCcgLiBzOm1hdGNod29yZHMKK2VuZGlmCisKKyIgTG9hZCB0aGUgY29tYmluZWQgbGlzdCBvZiBtYXRjaF93b3JkcyBmb3IgbWF0Y2hpdC52aW0KK2lmIGV4aXN0cygibG9hZGVkX21hdGNoaXQiKQorICAgIGxldCBiOm1hdGNoX3dvcmRzID0gczptYXRjaF93b3JkcworZW5kaWYKKworIiBDaGFuZ2UgdGhlIDpicm93c2UgZSBmaWx0ZXIgdG8gcHJpbWFyaWx5IHNob3cgSlNQLXJlbGF0ZWQgZmlsZXMuCitpZiBoYXMoImd1aV93aW4zMiIpCisgICAgbGV0ICBiOmJyb3dzZWZpbHRlcj0iSlNQIEZpbGVzICgqLmpzcClcdCouanNwXG4iIC4gczpicm93c2VmaWx0ZXIKK2VuZGlmCisKKyIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAidW5sZXQhIGI6YnJvd3NlZmlsdGVyIGI6bWF0Y2hfd29yZHMgfCAiIC4gczp1bmRvX2Z0cGx1Z2luCisKKyIgUmVzdG9yZSB0aGUgc2F2ZWQgY29tcGF0aWJpbGl0eSBvcHRpb25zLgorbGV0ICZjcG8gPSBzOnNhdmVfY3BvCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2t3dC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2t3dC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlNjQyMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4va3d0LnZpbQpAQCAtMCwwICsxLDIwIEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJS2ltd2l0dSsrCisiIE1haW50YWluZXI6CU1pY2hhZWwgUGllZmVsIDxwaWVmZWxAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CisiIExhc3QgQ2hhbmdlOgkxNiBBdWd1c3QgMjAwMQorCisiIEJlaGF2ZXMgYWxtb3N0IGxpa2UgQysrCitydW50aW1lISBmdHBsdWdpbi9jcHAudmltIGZ0cGx1Z2luL2NwcF8qLnZpbSBmdHBsdWdpbi9jcHAvKi52aW0KKworc2V0IGNwby09QworCisiIExpbWl0IHRoZSBicm93c2VyIHRvIHJlbGF0ZWQgZmlsZXMKK2lmIGhhcygiZ3VpX3dpbjMyIikgJiYgIWV4aXN0cygiYjpicm93c2VmaWx0ZXIiKQorICAgIGxldCBiOmJyb3dzZWZpbHRlciA9ICJLaW13aXR1L0tpbXdpdHUrKyBGaWxlcyAoKi5rKVx0Ki5rXG4iIC4KKwkJXCAiTGV4L0ZsZXggRmlsZXMgKCoubClcdCoubFxuIiAuCisJCVwgIllhY2MvQmlzb24gRmlsZXMgKCoueSlcdCoueVxuIiAuCisJCVwgIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCitlbmRpZgorCisiIFNldCB0aGUgZXJyb3Jmb3JtYXQgZm9yIHRoZSBLaW13aXR1KysgY29tcGlsZXIKK3NldCBlZm0rPWtjJS4lIzpcIGVycm9yXCBhdFwgJWY6JWw6XCAlbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9saXNwLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vbGlzcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjMjVhZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vbGlzcC52aW0KQEAgLTAsMCArMSwyMCBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luCisiIExhbmd1YWdlOiAgICAgIExpc3AKKyIgTWFpbnRhaW5lcjogICAgRG9yYWkgU2l0YXJhbSA8ZHMyNkBndGUuY29tPgorIiBVUkw6CQkgaHR0cDovL3d3dy5jY3MubmV1LmVkdS9+ZG9yYWkvdmltcGx1Z2lucy92aW1wbHVnaW5zLmh0bWwKKyIgTGFzdCBDaGFuZ2U6ICAgTWF5IDE1LCAyMDAzCisKKyIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKKworIiBEb24ndCBsb2FkIGFub3RoZXIgcGx1Z2luIGZvciB0aGlzIGJ1ZmZlcgorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCitzZXRsIGF1dG9pbmRlbnQKK3NldGwgY29tbWVudHM9OjsKK3NldGwgZGVmaW5lPV5cXHMqKGRlZlxcayoKK3NldGwgZm9ybWF0b3B0aW9ucy09dAorc2V0bCBpc2tleXdvcmQrPSssLSwqLC8sJSw8LD0sPiw6LCQsPywhLEAtQCw5NAorc2V0bCBsaXNwCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2xwcm9sb2cudmltIGIvcnVudGltZS9mdHBsdWdpbi9scHJvbG9nLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTczZjBjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9scHJvbG9nLnZpbQpAQCAtMCwwICsxLDM3IEBACisiIFZpbSBzZXR0aW5ncyBmaWxlCisiIExhbmd1YWdlOiAgICAgTGFtYmRhUHJvbG9nIChUZXlqdXMpCisiIE1haW50YWluZXI6ICAgTWFya3VzIE1vdHRsICA8bWFya3VzQG9lZmFpLmF0PgorIiBVUkw6CQlodHRwOi8vd3d3LmFpLnVuaXZpZS5hYy5hdC9+bWFya3VzL3ZpbS9mdHBsdWdpbi9scHJvbG9nLnZpbQorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMTEKKyIJCTIwMDEgU2VwIDE2IC0gZml4ZWQgJ25vX21haWxfbWFwcyctYnVnIChNTSkKKyIJCTIwMDEgU2VwIDAyIC0gaW5pdGlhbCByZWxlYXNlICAoTU0pCisKKyIgT25seSBkbyB0aGVzZSBzZXR0aW5ncyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCisKKyIgRG9uJ3QgZG8gb3RoZXIgZmlsZSB0eXBlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlcgorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCisiIEVycm9yIGZvcm1hdAorc2V0bG9jYWwgZWZtPSUrQS4vJWY6JWwuJWM6XCAlbSBmb3JtYXRwcmc9Zm10XCAtdzc1XCAtcFxcJQorCisiIEZvcm1hdHRpbmcgb2YgY29tbWVudHMKK3NldGxvY2FsIGZvcm1hdHByZz1mbXRcIC13NzVcIC1wXFwlCisKKyIgQWRkIG1hcHBpbmdzLCB1bmxlc3MgdGhlIHVzZXIgZGlkbid0IHdhbnQgdGhpcy4KK2lmICFleGlzdHMoIm5vX3BsdWdpbl9tYXBzIikgJiYgIWV4aXN0cygibm9fbHByb2xvZ19tYXBzIikKKyAgIiBVbmNvbW1lbnRpbmcKKyAgaWYgIWhhc21hcHRvKCc8UGx1Zz5Db21tZW50JykKKyAgICBubWFwIDxidWZmZXI+IDxMb2NhbExlYWRlcj5jIDxQbHVnPkxVbmNvbU9uCisgICAgdm1hcCA8YnVmZmVyPiA8TG9jYWxMZWFkZXI+YyA8UGx1Zz5CVW5jb21PbgorICAgIG5tYXAgPGJ1ZmZlcj4gPExvY2FsTGVhZGVyPkMgPFBsdWc+TFVuY29tT2ZmCisgICAgdm1hcCA8YnVmZmVyPiA8TG9jYWxMZWFkZXI+QyA8UGx1Zz5CVW5jb21PZmYKKyAgZW5kaWYKKworICBubm9yZW1hcCA8YnVmZmVyPiA8UGx1Zz5MVW5jb21PbiBtejBpLyogPEVTQz4kQSAqLzxFU0M+YHoKKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gPFBsdWc+TFVuY29tT2ZmIDxFU0M+OnMvXlwvXCogXCguKlwpIFwqXC8vXDEvPENSPgorICB2bm9yZW1hcCA8YnVmZmVyPiA8UGx1Zz5CVW5jb21PbiA8RVNDPjonPCwnPjxDUj5gPE88RVNDPjBpLyo8RVNDPmA+bzxFU0M+MGkqLzxFU0M+YDwKKyAgdm5vcmVtYXAgPGJ1ZmZlcj4gPFBsdWc+QlVuY29tT2ZmIDxFU0M+Oic8LCc+PENSPmA8ZGRgPmRkYDwKK2VuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL2x1YS52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL2x1YS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjNjQwZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vbHVhLnZpbQpAQCAtMCwwICsxLDM2IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZS4KKyIgTGFuZ3VhZ2U6CUx1YSA0LjArCisiIE1haW50YWluZXI6CU1heCBJc2NoZW5rbyA8bWZpQHVrci5uZXQ+CisiIExhc3QgQ2hhbmdlOgkyMDAxIFNlcCAxNworCisiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCisKKyIgRG9uJ3QgbG9hZCBhbm90aGVyIHBsdWdpbiBmb3IgdGhpcyBidWZmZXIKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworIiBTZXQgJ2Zvcm1hdG9wdGlvbnMnIHRvIGJyZWFrIGNvbW1lbnQgbGluZXMgYnV0IG5vdCBvdGhlciBsaW5lcywgYW5kIGluc2VydAorIiB0aGUgY29tbWVudCBsZWFkZXIgd2hlbiBoaXR0aW5nIDxDUj4gb3IgdXNpbmcgIm8iLgorc2V0bG9jYWwgZm8tPXQgZm8rPWNyb3FsCisKK3NldGxvY2FsIGNvbT06LS0KK3NldGxvY2FsIGNtcz0iLS0lcyIKK3NldGxvY2FsIHN1ZmZpeGVzYWRkPS5sdWEKKworCisiIFRoZSBmb2xsb3dpbmcgbGluZXMgZW5hYmxlIHRoZSBtYWNyb3MvbWF0Y2hpdC52aW0gcGx1Z2luIGZvcgorIiBleHRlbmRlZCBtYXRjaGluZyB3aXRoIHRoZSAlIGtleS4KKworc2V0IGNwby09QworaWYgZXhpc3RzKCJsb2FkZWRfbWF0Y2hpdCIpCisKKyAgbGV0IGI6bWF0Y2hfaWdub3JlY2FzZSA9IDAKKyAgbGV0IGI6bWF0Y2hfd29yZHMgPQorICAgIFwgJ1w8XCUoZG9cfGZ1bmN0aW9uXHxpZlwpXD46JyAuCisgICAgXCAnXDxcJShyZXR1cm5cfGVsc2VcfGVsc2VpZlwpXD46JyAuCisgICAgXCAnXDxlbmRcPiwnIC4KKyAgICBcICdcPHJlcGVhdFw+Olw8dW50aWxcPicKKworZW5kaWYgIiBleGlzdHMoImxvYWRlZF9tYXRjaGl0IikKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vbWFpbC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL21haWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YmYxOTcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL21haWwudmltCkBAIC0wLDAgKzEsMzQgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglNYWlsCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDA0IEZlYiAyMAorCisiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAic2V0bCBtb2RlbGluZTwgdHc8IGZvPCIKKworIiBEb24ndCB1c2UgbW9kZWxpbmVzIGluIGUtbWFpbCBtZXNzYWdlcywgYXZvaWQgdHJvamFuIGhvcnNlcworc2V0bG9jYWwgbm9tb2RlbGluZQorCisiIG1hbnkgcGVvcGxlIHJlY29tbWVuZCBrZWVwaW5nIGUtbWFpbCBtZXNzYWdlcyA3MiBjaGFycyB3aWRlCitpZiAmdHcgPT0gMAorICBzZXRsb2NhbCB0dz03MgorZW5kaWYKKworIiBTZXQgJ2Zvcm1hdG9wdGlvbnMnIHRvIGJyZWFrIHRleHQgbGluZXMgYW5kIGtlZXAgdGhlIGNvbW1lbnQgbGVhZGVyICI+Ii4KK3NldGxvY2FsIGZvKz10Y3FsCisKKyIgQWRkIG1hcHBpbmdzLCB1bmxlc3MgdGhlIHVzZXIgZGlkbid0IHdhbnQgdGhpcy4KK2lmICFleGlzdHMoIm5vX3BsdWdpbl9tYXBzIikgJiYgIWV4aXN0cygibm9fbWFpbF9tYXBzIikKKyAgIiBRdW90ZSB0ZXh0IGJ5IGluc2VydGluZyAiPiAiCisgIGlmICFoYXNtYXB0bygnPFBsdWc+TWFpbFF1b3RlJykKKyAgICB2bWFwIDxidWZmZXI+IDxMb2NhbExlYWRlcj5xIDxQbHVnPk1haWxRdW90ZQorICAgIG5tYXAgPGJ1ZmZlcj4gPExvY2FsTGVhZGVyPnEgPFBsdWc+TWFpbFF1b3RlCisgIGVuZGlmCisgIHZub3JlbWFwIDxidWZmZXI+IDxQbHVnPk1haWxRdW90ZSA6cy9eLz4gLzxDUj46bm9oPENSPmBgCisgIG5ub3JlbWFwIDxidWZmZXI+IDxQbHVnPk1haWxRdW90ZSA6Liwkcy9eLz4gLzxDUj46bm9oPENSPmBgCitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9tYWtlLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vbWFrZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczOTdkYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vbWFrZS52aW0KQEAgLTAsMCArMSwyNSBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6CU1ha2UKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDA0CisKKyIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworbGV0IGI6dW5kb19mdHBsdWdpbiA9ICJzZXRsIGV0PCBmbzwgY29tPCBjb21tZW50c3RyaW5nPCIKKworIiBNYWtlIHN1cmUgYSBoYXJkIHRhYiBpcyB1c2VkLCByZXF1aXJlZCBmb3IgbW9zdCBtYWtlIHByb2dyYW1zCitzZXRsb2NhbCBub2V4cGFuZHRhYiBzb2Z0dGFic3RvcD0wCisKKyIgU2V0ICdmb3JtYXRvcHRpb25zJyB0byBicmVhayBjb21tZW50IGxpbmVzIGJ1dCBub3Qgb3RoZXIgbGluZXMsCisiIGFuZCBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gaGl0dGluZyA8Q1I+IG9yIHVzaW5nICJvIi4KK3NldGxvY2FsIGZvLT10IGZvKz1jcm9xbAorCisiIFNldCAnY29tbWVudHMnIHRvIGZvcm1hdCBkYXNoZWQgbGlzdHMgaW4gY29tbWVudHMKK3NldGxvY2FsIGNvbT1zTzojXCAtLG1POiNcIFwgLGI6IworCisiIFNldCAnY29tbWVudHN0cmluZycgdG8gcHV0IHRoZSBtYXJrZXIgYWZ0ZXIgYSAjLgorc2V0bG9jYWwgY29tbWVudHN0cmluZz0jXCAlcwpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9tYW4udmltIGIvcnVudGltZS9mdHBsdWdpbi9tYW4udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OWFlOWEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL21hbi52aW0KQEAgLTAsMCArMSwxNzcgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOgltYW4KKyIgTWFpbnRhaW5lcjoJTmFtIFN1bmdIeXVuIDxuYW1zaEBrbGRwLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgRGVjIDI0CisKKyIgVG8gbWFrZSB0aGUgIjpNYW4iIGNvbW1hbmQgYXZhaWxhYmxlIGJlZm9yZSBlZGl0aW5nIGEgbWFudWFsIHBhZ2UsIHNvdXJjZQorIiB0aGlzIHNjcmlwdCBmcm9tIHlvdXIgc3RhcnR1cCB2aW1yYyBmaWxlLgorCisiIElmICdmaWxldHlwZScgaXNuJ3QgIm1hbiIsIHdlIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCB0byBvbmx5IGRlZmluZSAiOk1hbiIuCitpZiAmZmlsZXR5cGUgPT0gIm1hbiIKKworICAiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKKyAgaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgICAgZmluaXNoCisgIGVuZGlmCisgIGxldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworICAiIGFsbG93IGRvdCBhbmQgZGFzaCBpbiBtYW51YWwgcGFnZSBuYW1lLgorICBzZXRsb2NhbCBpc2tleXdvcmQrPVwuLC0KKworICAiIEFkZCBtYXBwaW5ncywgdW5sZXNzIHRoZSB1c2VyIGRpZG4ndCB3YW50IHRoaXMuCisgIGlmICFleGlzdHMoIm5vX3BsdWdpbl9tYXBzIikgJiYgIWV4aXN0cygibm9fbWFuX21hcHMiKQorICAgIGlmICFoYXNtYXB0bygnPFBsdWc+TWFuQlMnKQorICAgICAgbm1hcCA8YnVmZmVyPiA8TG9jYWxMZWFkZXI+aCA8UGx1Zz5NYW5CUworICAgIGVuZGlmCisgICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPFBsdWc+TWFuQlMgOiVzLy5cYi8vZzxDUj46c2V0IG5vbW9kPENSPicnCisKKyAgICBubm9yZW1hcCA8YnVmZmVyPiA8Yy1dPiA6Y2FsbCA8U0lEPlByZUdldFBhZ2Uodjpjb3VudCk8Q1I+CisgICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPGMtdD4gOmNhbGwgPFNJRD5Qb3BQYWdlKCk8Q1I+CisgIGVuZGlmCisKK2VuZGlmCisKK2lmIGV4aXN0cygiOk1hbiIpICE9IDIKKyAgY29tIC1uYXJncz0rIE1hbiBjYWxsIHM6R2V0UGFnZSg8Zi1hcmdzPikKKyAgbm1hcCA8TGVhZGVyPksgOmNhbGwgPFNJRD5QcmVHZXRQYWdlKDApPENSPgorZW5kaWYKKworIiBEZWZpbmUgZnVuY3Rpb25zIG9ubHkgb25jZS4KK2lmICFleGlzdHMoInM6bWFuX3RhZ19kZXB0aCIpCisKK2xldCBzOm1hbl90YWdfZGVwdGggPSAwCisKK2lmICFoYXMoIndpbjMyIikgJiYgJE9TVFlQRSAhfiAnY3lnd2luXHxsaW51eCcgJiYgc3lzdGVtKCd1bmFtZSAtcycpID1+ICJTdW5PUyIgJiYgc3lzdGVtKCd1bmFtZSAtcicpID1+ICJeNSIKKyAgbGV0IHM6bWFuX3NlY3RfYXJnID0gIi1zIgorICBsZXQgczptYW5fZmluZF9hcmcgPSAiLWwiCitlbHNlCisgIGxldCBzOm1hbl9zZWN0X2FyZyA9ICIiCisgIGxldCBzOm1hbl9maW5kX2FyZyA9ICItdyIKK2VuZGlmCisKK2Z1bmMgPFNJRD5QcmVHZXRQYWdlKGNudCkKKyAgaWYgYTpjbnQgPT0gMAorICAgIGxldCBvbGRfaXNrID0gJmlza2V5d29yZAorICAgIHNldGwgaXNrZXl3b3JkKz0oLCkKKyAgICBsZXQgc3RyID0gZXhwYW5kKCI8Y3dvcmQ+IikKKyAgICBsZXQgJmw6aXNrZXl3b3JkID0gb2xkX2lzaworICAgIGxldCBwYWdlID0gc3Vic3RpdHV0ZShzdHIsICcoKlwoXGtcK1wpLionLCAnXDEnLCAnJykKKyAgICBsZXQgc2VjdCA9IHN1YnN0aXR1dGUoc3RyLCAnXChca1wrXCkoXChbXigpXSpcKSkuKicsICdcMicsICcnKQorICAgIGlmIG1hdGNoKHNlY3QsICdeWzAtOSBdXCskJykgPT0gLTEKKyAgICAgIGxldCBzZWN0ID0gIiIKKyAgICBlbmRpZgorICAgIGlmIHNlY3QgPT0gcGFnZQorICAgICAgbGV0IHNlY3QgPSAiIgorICAgIGVuZGlmCisgIGVsc2UKKyAgICBsZXQgc2VjdCA9IGE6Y250CisgICAgbGV0IHBhZ2UgPSBleHBhbmQoIjxjd29yZD4iKQorICBlbmRpZgorICBjYWxsIHM6R2V0UGFnZShzZWN0LCBwYWdlKQorZW5kZnVuYworCitmdW5jIDxTSUQ+R2V0Q21kQXJnKHNlY3QsIHBhZ2UpCisgIGlmIGE6c2VjdCA9PSAnJworICAgIHJldHVybiBhOnBhZ2UKKyAgZW5kaWYKKyAgcmV0dXJuIHM6bWFuX3NlY3RfYXJnLicgJy5hOnNlY3QuJyAnLmE6cGFnZQorZW5kZnVuYworCitmdW5jIDxTSUQ+RmluZFBhZ2Uoc2VjdCwgcGFnZSkKKyAgbGV0IHdoZXJlID0gc3lzdGVtKCIvdXNyL2Jpbi9tYW4gIi5zOm1hbl9maW5kX2FyZy4nICcuczpHZXRDbWRBcmcoYTpzZWN0LCBhOnBhZ2UpKQorICBpZiB3aGVyZSAhfiAiXi8iCisgICAgaWYgbWF0Y2hzdHIod2hlcmUsICIgW14gXSokIikgIX4gIl4gLyIKKyAgICAgIHJldHVybiAwCisgICAgZW5kaWYKKyAgZW5kaWYKKyAgcmV0dXJuIDEKK2VuZGZ1bmMKKworZnVuYyA8U0lEPkdldFBhZ2UoLi4uKQorICBpZiBhOjAgPj0gMgorICAgIGxldCBzZWN0ID0gYToxCisgICAgbGV0IHBhZ2UgPSBhOjIKKyAgZWxzZWlmIGE6MCA+PSAxCisgICAgbGV0IHNlY3QgPSAiIgorICAgIGxldCBwYWdlID0gYToxCisgIGVsc2UKKyAgICByZXR1cm4KKyAgZW5kaWYKKworICAiIFRvIHN1cHBvcnQ6CSAgICBubWFwIEsgOk1hbiA8Y3dvcmQ+CisgIGlmIHBhZ2UgPT0gJzxjd29yZD4nCisgICAgbGV0IHBhZ2UgPSBleHBhbmQoJzxjd29yZD4nKQorICBlbmRpZgorCisgIGlmIHNlY3QgIT0gIiIgJiYgczpGaW5kUGFnZShzZWN0LCBwYWdlKSA9PSAwCisgICAgbGV0IHNlY3QgPSAiIgorICBlbmRpZgorICBpZiBzOkZpbmRQYWdlKHNlY3QsIHBhZ2UpID09IDAKKyAgICBlY2hvICJcbkNhbm5vdCBmaW5kIGEgJyIucGFnZS4iJy4iCisgICAgcmV0dXJuCisgIGVuZGlmCisgIGV4ZWMgImxldCBzOm1hbl90YWdfYnVmXyIuczptYW5fdGFnX2RlcHRoLiIgPSAiLmJ1Zm5yKCIlIikKKyAgZXhlYyAibGV0IHM6bWFuX3RhZ19saW5fIi5zOm1hbl90YWdfZGVwdGguIiA9ICIubGluZSgiLiIpCisgIGV4ZWMgImxldCBzOm1hbl90YWdfY29sXyIuczptYW5fdGFnX2RlcHRoLiIgPSAiLmNvbCgiLiIpCisgIGxldCBzOm1hbl90YWdfZGVwdGggPSBzOm1hbl90YWdfZGVwdGggKyAxCisKKyAgIiBVc2UgYW4gZXhpc3RpbmcgIm1hbiIgd2luZG93IGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIG9wZW4gYSBuZXcgb25lLgorICBpZiAmZmlsZXR5cGUgIT0gIm1hbiIKKyAgICBsZXQgdGhpc3dpbiA9IHdpbm5yKCkKKyAgICBleGUgIm5vcm0hIFw8Qy1XPmIiCisgICAgaWYgd2lubnIoKSA9PSAxCisgICAgICBuZXcKKyAgICBlbHNlCisgICAgICBleGUgIm5vcm0hICIgLiB0aGlzd2luIC4gIlw8Qy1XPnciCisgICAgICB3aGlsZSAxCisJaWYgJmZpbGV0eXBlID09ICJtYW4iCisJICBicmVhaworCWVuZGlmCisJZXhlICJub3JtISBcPEMtVz53IgorCWlmIHRoaXN3aW4gPT0gd2lubnIoKQorCSAgbmV3CisJICBicmVhaworCWVuZGlmCisgICAgICBlbmR3aGlsZQorICAgIGVuZGlmCisgIGVuZGlmCisgIHNpbGVudCBleGVjICJlZGl0ICRIT01FLyIucGFnZS4iLiIuc2VjdC4ifiIKKyAgIiBBdm9pZCB3YXJuaW5nIGZvciBlZGl0aW5nIHRoZSBkdW1teSBmaWxlIHR3aWNlCisgIHNldCBidWZ0eXBlPW5vZmlsZSBub3N3YXBmaWxlCisKKyAgc2V0IG1hCisgIHNpbGVudCBleGVjICJub3JtIDFHZEciCisgIGxldCAkTUFOV0lEVEggPSB3aW53aWR0aCgwKQorICBzaWxlbnQgZXhlYyAiciEvdXNyL2Jpbi9tYW4gIi5zOkdldENtZEFyZyhzZWN0LCBwYWdlKS4iIHwgY29sIC1iIgorICAiIFJlbW92ZSBibGFuayBsaW5lcyBmcm9tIHRvcCBhbmQgYm90dG9tLgorICB3aGlsZSBnZXRsaW5lKDEpID1+ICdeXHMqJCcKKyAgICBzaWxlbnQgbm9ybSBnZ2RkCisgIGVuZHdoaWxlCisgIHdoaWxlIGdldGxpbmUoJyQnKSA9fiAnXlxzKiQnCisgICAgc2lsZW50IG5vcm0gR2RkCisgIGVuZHdoaWxlCisgIDEKKyAgc2V0bCBmdD1tYW4gbm9tb2QKKyAgc2V0bCBidWZoaWRkZW49aGlkZQorICBzZXRsIG5vYnVmbGlzdGVkCitlbmRmdW5jCisKK2Z1bmMgPFNJRD5Qb3BQYWdlKCkKKyAgaWYgczptYW5fdGFnX2RlcHRoID4gMAorICAgIGxldCBzOm1hbl90YWdfZGVwdGggPSBzOm1hbl90YWdfZGVwdGggLSAxCisgICAgZXhlYyAibGV0IHM6bWFuX3RhZ19idWY9czptYW5fdGFnX2J1Zl8iLnM6bWFuX3RhZ19kZXB0aAorICAgIGV4ZWMgImxldCBzOm1hbl90YWdfbGluPXM6bWFuX3RhZ19saW5fIi5zOm1hbl90YWdfZGVwdGgKKyAgICBleGVjICJsZXQgczptYW5fdGFnX2NvbD1zOm1hbl90YWdfY29sXyIuczptYW5fdGFnX2RlcHRoCisgICAgZXhlYyBzOm1hbl90YWdfYnVmLiJiIgorICAgIGV4ZWMgczptYW5fdGFnX2xpbgorICAgIGV4ZWMgIm5vcm0gIi5zOm1hbl90YWdfY29sLiJ8IgorICAgIGV4ZWMgInVubGV0IHM6bWFuX3RhZ19idWZfIi5zOm1hbl90YWdfZGVwdGgKKyAgICBleGVjICJ1bmxldCBzOm1hbl90YWdfbGluXyIuczptYW5fdGFnX2RlcHRoCisgICAgZXhlYyAidW5sZXQgczptYW5fdGFnX2NvbF8iLnM6bWFuX3RhZ19kZXB0aAorICAgIHVubGV0IHM6bWFuX3RhZ19idWYgczptYW5fdGFnX2xpbiBzOm1hbl90YWdfY29sCisgIGVuZGlmCitlbmRmdW5jCisKK2VuZGlmCisKKyIgdmltOiBzZXQgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vbWYudmltIGIvcnVudGltZS9mdHBsdWdpbi9tZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2NmQ1MwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vbWYudmltCkBAIC0wLDAgKzEsMTYgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbgorIiBMYW5ndWFnZToJTUVUQUZPTlQKKyIgTWFpbnRhaW5lcjoJRG9yYWkgU2l0YXJhbSA8ZHMyNkBndGUuY29tPgorIiBVUkw6CQlodHRwOi8vd3d3LmNjcy5uZXUuZWR1L35kb3JhaS92aW1wbHVnaW5zL3ZpbXBsdWdpbnMuaHRtbAorIiBMYXN0IENoYW5nZToJTWF5IDI3LCAyMDAzCisKKyIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKKworIiBEb24ndCBsb2FkIGFub3RoZXIgcGx1Z2luIGZvciB0aGlzIGJ1ZmZlcgorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCitzZXRsIGNvbT06JQorc2V0bCBmby09dApkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9tcC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL21wLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzg1NTY1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9tcC52aW0KQEAgLTAsMCArMSw3IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4KKyIgTGFuZ3VhZ2U6CU1ldGFQb3N0CisiIE1haW50YWluZXI6CURvcmFpIFNpdGFyYW0gPGRzMjZAZ3RlLmNvbT4KKyIgVVJMOgkJaHR0cDovL3d3dy5jY3MubmV1LmVkdS9+ZG9yYWkvdmltcGx1Z2lucy92aW1wbHVnaW5zLmh0bWwKKyIgTGFzdCBDaGFuZ2U6CU1heSAyNywgMjAwMworCitydW50aW1lISBmdHBsdWdpbi9tZi52aW0gZnRwbHVnaW4vbWZfKi52aW0gZnRwbHVnaW4vbWYvKi52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vb2JqYy52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL29iamMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MWJlYjUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL29iamMudmltCkBAIC0wLDAgKzEsMTIgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglPYmplY3RpdmUgQworIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMyBKYW4gMTUKKworIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKyAgZmluaXNoCitlbmRpZgorCisiIEJlaGF2ZXMganVzdCBsaWtlIEMKK3J1bnRpbWUhIGZ0cGx1Z2luL2MudmltIGZ0cGx1Z2luL2NfKi52aW0gZnRwbHVnaW4vYy8qLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9vY2FtbC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL29jYW1sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmYyYzBjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9vY2FtbC52aW0KQEAgLTAsMCArMSw0OSBAQAorIiBWaW0gc2V0dGluZ3MgZmlsZQorIiBMYW5ndWFnZTogICAgIE9DYW1sCisiIE1haW50YWluZXJzOiAgTWlrZSBMZWFyeSAgICA8bGVhcnlAbndsaW5rLmNvbT4KKyIJCU1hcmt1cyBNb3R0bCAgPG1hcmt1c0BvZWZhaS5hdD4KKyIgVVJMOgkJaHR0cDovL3d3dy5haS51bml2aWUuYWMuYXQvfm1hcmt1cy92aW0vZnRwbHVnaW4vb2NhbWwudmltCisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAxMQorIgkJMjAwMSBOb3YgMDEgLSBhZGRlZCBsb2NhbCBiaW5kaW5ncyBmb3IgaW5zZXJ0aW5nCisiCQkJICAgICAgdHlwZSBob2xlcyB1c2luZyAnYXNzZXJ0IGZhbHNlJyAoTU0pCisiCQkyMDAxIE9jdCAwMiAtIGluc2VydCBzcGFjZXMgaW4gbGluZSBjb21tZW50cyAoTU0pCisKKyIgT25seSBkbyB0aGVzZSBzZXR0aW5ncyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCisKKyIgRG9uJ3QgZG8gb3RoZXIgZmlsZSB0eXBlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlcgorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCitzZXQgY3BvLT1DCisKKyIgRXJyb3IgZm9ybWF0cworc2V0bG9jYWwgZWZtPQorICBcJUVGaWxlXCBcIiVmXCJcXCxcIGxpbmVcICVsXFwsXCBjaGFyYWN0ZXJzXCAlYy0lKlxcZDosCisgIFwlRUZpbGVcIFwiJWZcIlxcLFwgbGluZVwgJWxcXCxcIGNoYXJhY3RlclwgJWM6JW0sCisgIFwlK0VSZWZlcmVuY2VcIHRvXCB1bmJvdW5kXCByZWdleHBcIG5hbWVcICVtLAorICBcJUVvY2FtbHlhY2M6XCBlXCAtXCBsaW5lXCAlbFwgb2ZcIFwiJWZcIlxcLFwgJW0sCisgIFwlV29jYW1seWFjYzpcIHdcIC1cICVtLAorICBcJS1abWFrZSUuJSMsCisgIFwlQyVtCisKKyIgQWRkIG1hcHBpbmdzLCB1bmxlc3MgdGhlIHVzZXIgZGlkbid0IHdhbnQgdGhpcy4KK2lmICFleGlzdHMoIm5vX3BsdWdpbl9tYXBzIikgJiYgIWV4aXN0cygibm9fb2NhbWxfbWFwcyIpCisgICIgVW5jb21tZW50aW5nCisgIGlmICFoYXNtYXB0bygnPFBsdWc+Q29tbWVudCcpCisgICAgbm1hcCA8YnVmZmVyPiA8TG9jYWxMZWFkZXI+YyA8UGx1Zz5MVW5jb21PbgorICAgIHZtYXAgPGJ1ZmZlcj4gPExvY2FsTGVhZGVyPmMgPFBsdWc+QlVuY29tT24KKyAgICBubWFwIDxidWZmZXI+IDxMb2NhbExlYWRlcj5DIDxQbHVnPkxVbmNvbU9mZgorICAgIHZtYXAgPGJ1ZmZlcj4gPExvY2FsTGVhZGVyPkMgPFBsdWc+QlVuY29tT2ZmCisgIGVuZGlmCisKKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gPFBsdWc+TFVuY29tT24gbXowaSgqIDxFU0M+JEEgKik8RVNDPmB6CisgIG5ub3JlbWFwIDxidWZmZXI+IDxQbHVnPkxVbmNvbU9mZiA8RVNDPjpzL14oXCogXCguKlwpIFwqKS9cMS88Q1I+CisgIHZub3JlbWFwIDxidWZmZXI+IDxQbHVnPkJVbmNvbU9uIDxFU0M+Oic8LCc+PENSPmA8TzxFU0M+MGkoKjxFU0M+YD5vPEVTQz4waSopPEVTQz5gPAorICB2bm9yZW1hcCA8YnVmZmVyPiA8UGx1Zz5CVW5jb21PZmYgPEVTQz46JzwsJz48Q1I+YDxkZGA+ZGRgPAorCisgIGlmICFoYXNtYXB0bygnPFBsdWc+QWJicmV2JykKKyAgICBpYWJicmV2IDxidWZmZXI+IEFTUyAoYXNzZXJ0IGZhbHNlKQorICBlbmRpZgorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vb2NjYW0udmltIGIvcnVudGltZS9mdHBsdWdpbi9vY2NhbS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyYzRmNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vb2NjYW0udmltCkBAIC0wLDAgKzEsMzkgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglvY2NhbQorIiBDb3B5cmlnaHQ6CUNocmlzdGlhbiBKYWNvYnNlbiA8Y2xqM0BrZW50LmFjLnVrPiwgTWFyaW8gU2Nod2VpZ2xlciA8bXM0NEBrZW50LmFjLnVrPgorIiBNYWludGFpbmVyOglNYXJpbyBTY2h3ZWlnbGVyIDxtczQ0QGtlbnQuYWMudWs+CisiIExhc3QgQ2hhbmdlOgkyMyBBcHJpbCAyMDAzCisKKyIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworInt7eyAgSW5kZW50IHNldHRpbmdzCisiIFNldCBzaGlmdCB3aWR0aCBmb3IgaW5kZW50CitzZXRsb2NhbCBzaGlmdHdpZHRoPTIKKyIgU2V0IHRoZSB0YWIga2V5IHNpemUgdG8gdHdvIHNwYWNlcworc2V0bG9jYWwgc29mdHRhYnN0b3A9MgorIiBMZXQgdGFiIGtleXMgYWx3YXlzIGJlIGV4cGFuZGVkIHRvIHNwYWNlcworc2V0bG9jYWwgZXhwYW5kdGFiCisifX19CisKKyJ7e3sgIEZvcm1hdHRpbmcKKyIgQnJlYWsgY29tbWVudCBsaW5lcyBhbmQgaW5zZXJ0IGNvbW1lbnQgbGVhZGVyIGluIHRoaXMgY2FzZQorc2V0bG9jYWwgZm9ybWF0b3B0aW9ucy09dCBmb3JtYXRvcHRpb25zKz1jcWwKK3NldGxvY2FsIGNvbW1lbnRzKz06LS0KKyIgTWF4aW11bSBsZW5ndGggb2YgY29tbWVudHMgaXMgNzgKK3NldGxvY2FsIHRleHR3aWR0aD03OAorIn19fQorCisie3t7ICBGaWxlIGJyb3dzaW5nIGZpbHRlcnMKKyIgV2luMzIgY2FuIGZpbHRlciBmaWxlcyBpbiB0aGUgYnJvd3NlIGRpYWxvZworaWYgaGFzKCJndWlfd2luMzIiKSAmJiAhZXhpc3RzKCJiOmJyb3dzZWZpbHRlciIpCisgIGxldCBiOmJyb3dzZWZpbHRlciA9ICJBbGwgT2NjYW0gRmlsZXMgKCoub2NjICouaW5jKVx0Ki5vY2M7Ki5pbmNcbiIgLgorCVwgIk9jY2FtIEluY2x1ZGUgRmlsZXMgKCouaW5jKVx0Ki5pbmNcbiIgLgorCVwgIk9jY2FtIFNvdXJjZSBGaWxlcyAoKi5vY2MpXHQqLm9jY1xuIiAuCisJXCAiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKK2VuZGlmCisifX19CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vcGFzY2FsLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vcGFzY2FsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U4ZjgxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9wYXNjYWwudmltCkBAIC0wLDAgKzEsMTUgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglwYXNjYWwKKyIgTWFpbnRhaW5lcjoJRGFuIFNoYXJwIDxkd3NoYXJwIGF0IGhvdG1haWwgZG90IGNvbT4KKyIgTGFzdCBDaGFuZ2VkOiAyMDAzIFNlcCAyOQorIiBVUkw6CQlodHRwOi8vbXl3ZWJwYWdlLm5ldHNjYXBlLmNvbS9zaGFycHBlb3BsZS92aW0vZnRwbHVnaW4KKworaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpIHwgZmluaXNoIHwgZW5kaWYKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworaWYgZXhpc3RzKCJsb2FkZWRfbWF0Y2hpdCIpCisgICAgbGV0IGI6bWF0Y2hfd29yZHM9J1w8YmVnaW5cPjpcPGVuZFw+JworZW5kaWYKKworIiBVbmRvIHRoZSBzdHVmZiB3ZSBjaGFuZ2VkLgorbGV0IGI6dW5kb19mdHBsdWdpbiA9ICJ1bmxldCEgYjptYXRjaF93b3JkcyIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vcGVybC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL3BlcmwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzE0YTkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL3BlcmwudmltCkBAIC0wLDAgKzEsNjYgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglQZXJsCisiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlOiAgMjAwNCBNYXkgMTYKKyIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCisKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgTWFrZSBzdXJlIHRoZSBjb250aW51YXRpb24gbGluZXMgYmVsb3cgZG8gbm90IGNhdXNlIHByb2JsZW1zIGluCisiIGNvbXBhdGliaWxpdHkgbW9kZS4KK2xldCBzOnNhdmVfY3BvID0gJmNwbworc2V0IGNwby09QworCitzZXRsb2NhbCBmb3JtYXRvcHRpb25zKz1jcnEKKworc2V0bG9jYWwgY29tbWVudHM9OiMKK3NldGxvY2FsIGNvbW1lbnRzdHJpbmc9IyVzCisKKyIgQ2hhbmdlIHRoZSBicm93c2UgZGlhbG9nIG9uIFdpbjMyIHRvIHNob3cgbWFpbmx5IFBlcmwtcmVsYXRlZCBmaWxlcworaWYgaGFzKCJndWlfd2luMzIiKQorICAgIGxldCBiOmJyb3dzZWZpbHRlciA9ICJQZXJsIFNvdXJjZSBGaWxlcyAoKi5wbClcdCoucGxcbiIgLgorCQkgICAgICAgXCAiUGVybCBNb2R1bGVzICgqLnBtKVx0Ki5wbVxuIiAuCisJCSAgICAgICBcICJQZXJsIERvY3VtZW50YXRpb24gRmlsZXMgKCoucG9kKVx0Ki5wb2RcbiIgLgorCQkgICAgICAgXCAiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKK2VuZGlmCisKKyIgUHJvdmlkZWQgYnkgTmVkIEtvbnogPG5lZCBhdCBiaWtlLW5vbWFkIGRvdCBjb20+CisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzZXRsb2NhbCBpbmNsdWRlPVxcPFxcKHVzZVx8cmVxdWlyZVxcKVxcPgorc2V0bG9jYWwgaW5jbHVkZWV4cHI9c3Vic3RpdHV0ZShzdWJzdGl0dXRlKHY6Zm5hbWUsJzo6JywnLycsJ2cnKSwnJCcsJy5wbScsJycpCitzZXRsb2NhbCBkZWZpbmU9W15BLVphLXpfXQorCisiIFRoZSBmb2xsb3dpbmcgbGluZSBjaGFuZ2VzIGEgZ2xvYmFsIHZhcmlhYmxlIGJ1dCBpcyBuZWNlc3NhcnkgdG8gbWFrZQorIiBnZiBhbmQgc2ltaWxhciBjb21tYW5kcyB3b3JrLiAgVGhlIGNoYW5nZSB0byBpc2tleXdvcmQgd2FzIGluY29ycmVjdC4KKyIgVGhhbmtzIHRvIEFuZHJldyBQaW1sb3R0IGZvciBwb2ludGluZyBvdXQgdGhlIHByb2JsZW0uIElmIHRoaXMgY2F1c2VzIGEKKyIgcHJvYmxlbSBmb3IgeW91LCBhZGQgYW4gYWZ0ZXIvZnRwbHVnaW4vcGVybC52aW0gZmlsZSB0aGF0IGNvbnRhaW5zCisiICAgICAgIHNldCBpc2ZuYW1lLT06CitzZXQgaXNmbmFtZSs9OgorInNldGxvY2FsIGlza2V5d29yZD00OC01NyxfLEEtWixhLXosOgorCisiIFNldCB0aGlzIG9uY2UsIGdsb2JhbGx5LgoraWYgIWV4aXN0cygicGVybHBhdGgiKQorICAgIGlmIGV4ZWN1dGFibGUoInBlcmwiKQorCWlmICZzaGVsbHhxdW90ZSAhPSAnIicKKwkgICAgbGV0IHBlcmxwYXRoID0gc3lzdGVtKCdwZXJsIC1lICJwcmludCBqb2luKHEvLC8sQElOQykiJykKKwllbHNlCisJICAgIGxldCBwZXJscGF0aCA9IHN5c3RlbSgicGVybCAtZSAncHJpbnQgam9pbihxLywvLEBJTkMpJyIpCisJZW5kaWYKKwlsZXQgcGVybHBhdGggPSBzdWJzdGl0dXRlKHBlcmxwYXRoLCcsLiQnLCcsLCcsJycpCisgICAgZWxzZQorCSIgSWYgd2UgY2FuJ3QgY2FsbCBwZXJsIHRvIGdldCBpdHMgcGF0aCwganVzdCBkZWZhdWx0IHRvIHVzaW5nIHRoZQorCSIgY3VycmVudCBkaXJlY3RvcnkgYW5kIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKwlsZXQgcGVybHBhdGggPSAiLiwsIgorICAgIGVuZGlmCitlbmRpZgorCitsZXQgJmw6cGF0aD1wZXJscGF0aAorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiIFVuZG8gdGhlIHN0dWZmIHdlIGNoYW5nZWQuCitsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInNldGxvY2FsIGZvPCBjb208IGNtczwgaW5jPCBpbmV4PCBkZWY8IGlzZjwiIC4KKwkgICAgXAkgICAgICAiIHwgdW5sZXQhIGI6YnJvd3NlZmlsdGVyIgorCisiIFJlc3RvcmUgdGhlIHNhdmVkIGNvbXBhdGliaWxpdHkgb3B0aW9ucy4KK2xldCAmY3BvID0gczpzYXZlX2NwbwpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9waHAudmltIGIvcnVudGltZS9mdHBsdWdpbi9waHAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzczMjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL3BocC52aW0KQEAgLTAsMCArMSw2MiBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6CXBocAorIiBNYWludGFpbmVyOglEYW4gU2hhcnAgPGR3c2hhcnAgYXQgaG90bWFpbCBkb3QgY29tPgorIiBMYXN0IENoYW5nZWQ6IDIwMDMgU2VwIDI5CisiIFVSTDoJCWh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwcGVvcGxlL3ZpbS9mdHBsdWdpbgorCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikgfCBmaW5pc2ggfCBlbmRpZgorCisiIE1ha2Ugc3VyZSB0aGUgY29udGludWF0aW9uIGxpbmVzIGJlbG93IGRvIG5vdCBjYXVzZSBwcm9ibGVtcyBpbgorIiBjb21wYXRpYmlsaXR5IG1vZGUuCitsZXQgczpzYXZlX2NwbyA9ICZjcG8KK3NldCBjcG8tPUMKKworIiBEZWZpbmUgc29tZSBkZWZhdWx0cyBpbiBjYXNlIHRoZSBpbmNsdWRlZCBmdHBsdWdpbnMgZG9uJ3Qgc2V0IHRoZW0uCitsZXQgczp1bmRvX2Z0cGx1Z2luID0gIiIKK2xldCBzOmJyb3dzZWZpbHRlciA9ICJIVE1MIEZpbGVzICgqLmh0bWwsICouaHRtKVx0Ki5odG0qXG4iIC4KKwkgICAgXAkgICAgICJBbGwgRmlsZXMgKCouKilcdCouKlxuIgorbGV0IHM6bWF0Y2hfd29yZHMgPSAiIgorCitydW50aW1lISBmdHBsdWdpbi9odG1sLnZpbSBmdHBsdWdpbi9odG1sXyoudmltIGZ0cGx1Z2luL2h0bWwvKi52aW0KK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworIiBPdmVycmlkZSBvdXIgZGVmYXVsdHMgaWYgdGhlc2Ugd2VyZSBzZXQgYnkgYW4gaW5jbHVkZWQgZnRwbHVnaW4uCitpZiBleGlzdHMoImI6dW5kb19mdHBsdWdpbiIpCisgICAgbGV0IHM6dW5kb19mdHBsdWdpbiA9IGI6dW5kb19mdHBsdWdpbgorZW5kaWYKK2lmIGV4aXN0cygiYjpicm93c2VmaWx0ZXIiKQorICAgIGxldCBzOmJyb3dzZWZpbHRlciA9IGI6YnJvd3NlZmlsdGVyCitlbmRpZgoraWYgZXhpc3RzKCJiOm1hdGNoX3dvcmRzIikKKyAgICBsZXQgczptYXRjaF93b3JkcyA9IGI6bWF0Y2hfd29yZHMKK2VuZGlmCisKKyIgQ2hhbmdlIHRoZSA6YnJvd3NlIGUgZmlsdGVyIHRvIHByaW1hcmlseSBzaG93IFBIUC1yZWxhdGVkIGZpbGVzLgoraWYgaGFzKCJndWlfd2luMzIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9IlBIUCBGaWxlcyAoKi5waHApXHQqLnBocFxuIiAuIHM6YnJvd3NlZmlsdGVyCitlbmRpZgorCisiICMjIworIiBQcm92aWRlZCBieSBNaWtvbGFqIE1hY2hvd3NraSA8bWlrbWFjaCBhdCB3cCBkb3QgcGw+CitzZXRsb2NhbCBpbmNsdWRlPVxcXChyZXF1aXJlXFxcfGluY2x1ZGVcXFwpXFxcKF9vbmNlXFxcKVxcXD8KK3NldGxvY2FsIGlza2V5d29yZCs9JAoraWYgZXhpc3RzKCJsb2FkZWRfbWF0Y2hpdCIpCisgICAgbGV0IGI6bWF0Y2hfd29yZHMgPSAnXDxzd2l0Y2hcPjpcPGVuZHN3aXRjaFw+LCcgLgorCQkgICAgICBcICdcPGlmXD46XDxlbHNlaWZcPjpcPGVsc2VcPjpcPGVuZGlmXD4sJyAuCisJCSAgICAgIFwgJ1w8d2hpbGVcPjpcPGVuZHdoaWxlXD4sJyAuCisJCSAgICAgIFwgJ1w8ZG9cPjpcPHdoaWxlXD4sJyAuCisJCSAgICAgIFwgJ1w8Zm9yXD46XDxlbmRmb3JcPiwnIC4KKwkJICAgICAgXCAnXDxmb3JlYWNoXD46XDxlbmRmb3JlYWNoXD4sJyAuCisJCSAgICAgIFwgczptYXRjaF93b3JkcworZW5kaWYKKyIgIyMjCisKK3NldGxvY2FsIGNvbW1lbnRzdHJpbmc9LyolcyovCisKKyIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAic2V0bG9jYWwgY21zPCBpbmM8IGlzazwiIC4KKwkgICAgXAkgICAgICAiIHwgdW5sZXQhIGI6YnJvd3NlZmlsdGVyIGI6bWF0Y2hfd29yZHMgfCAiIC4KKwkgICAgXAkgICAgICBzOnVuZG9fZnRwbHVnaW4KKworIiBSZXN0b3JlIHRoZSBzYXZlZCBjb21wYXRpYmlsaXR5IG9wdGlvbnMuCitsZXQgJmNwbyA9IHM6c2F2ZV9jcG8KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vcG9zdHNjci52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL3Bvc3RzY3IudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZjRlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL3Bvc3RzY3IudmltCkBAIC0wLDAgKzEsMzEgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOiAgICAgUG9zdFNjcmlwdAorIiBNYWludGFpbmVyOiAgIE1pa2UgV2lsbGlhbXMgPG1yd0BlYW5kZW0uY28udWs+CisiIExhc3QgQ2hhbmdlOiAgMjd0aCBKdW5lIDIwMDIKKworIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKyAgZmluaXNoCitlbmRpZgorCisiIERvbid0IGxvYWQgYW5vdGhlciBwbHVnaW4gZm9yIHRoaXMgYnVmZmVyCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgUFMgY29tbWVudCBmb3JtYXR0aW5nCitzZXRsb2NhbCBjb21tZW50cz1iOiUKK3NldGxvY2FsIGZvcm1hdG9wdGlvbnMtPXQgZm9ybWF0b3B0aW9ucys9cm9sCisKKyIgRGVmaW5lIHBhdHRlcm5zIGZvciB0aGUgbWF0Y2hpdCBtYWNybworaWYgIWV4aXN0cygiYjptYXRjaF93b3JkcyIpCisgIGxldCBiOm1hdGNoX2lnbm9yZWNhc2UgPSAwCisgIGxldCBiOm1hdGNoX3dvcmRzID0gJzw8Oj4+LFw8YmVnaW5cPjpcPGVuZFw+LFw8c2F2ZVw+Olw8cmVzdG9yZVw+LFw8Z3NhdmVcPjpcPGdyZXN0b3JlXD4nCitlbmRpZgorCitzZXQgY3BvLT1DCisKKyIgRGVmaW5lIHBhdHRlcm5zIGZvciB0aGUgYnJvd3NlIGZpbGUgZmlsdGVyCitpZiBoYXMoImd1aV93aW4zMiIpICYmICFleGlzdHMoImI6YnJvd3NlZmlsdGVyIikKKyAgbGV0IGI6YnJvd3NlZmlsdGVyID0gIlBvc3RTY3JpcHQgRmlsZXMgKCoucHMpXHQqLnBzXG4iIC4KKyAgICBcICJFUFMgRmlsZXMgKCouZXBzKVx0Ki5lcHNcbiIgLgorICAgIFwgIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9weXJleC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL3B5cmV4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWJkOTNkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9weXJleC52aW0KQEAgLTAsMCArMSwyMiBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6CVB5cmV4CisiIE1haW50YWluZXI6CU1hcmNvIEJhcmlzaW9uZSA8bWFyY28uYmFyaUBwZW9wbGUuaXQ+CisiIFVSTDoJCWh0dHA6Ly9tYXJjb2JhcmkuYWx0ZXJ2aXN0YS5vcmcvcHlyZXhfdmltLmh0bWwKKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDE2CisKKyIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKKworIiBCZWhhdmVzIGp1c3QgbGlrZSBQeXRob24KK3J1bnRpbWUhIGZ0cGx1Z2luL3B5dGhvbi52aW0gZnRwbHVnaW4vcHl0aG9uXyoudmltIGZ0cGx1Z2luL3B5dGhvbi8qLnZpbQorCitpZiBoYXMoImd1aV93aW4zMiIpICYmIGV4aXN0cygiYjpicm93c2VmaWx0ZXIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXIgPSAiUHlyZXggZmlsZXMgKCoucHl4LCoucHhkKVx0Ki5weXg7Ki5weGRcbiIgLgorCQkJXCAiUHl0aG9uIEZpbGVzICgqLnB5KVx0Ki5weVxuIiAuCisJCQlcICJDIFNvdXJjZSBGaWxlcyAoKi5jKVx0Ki5jXG4iIC4KKwkJCVwgIkMgSGVhZGVyIEZpbGVzICgqLmgpXHQqLmhcbiIgLgorCQkJXCAiQysrIFNvdXJjZSBGaWxlcyAoKi5jcHAgKi5jKyspXHQqLmNwcDsqLmMrK1xuIiAuCisJCQlcICJBbGwgRmlsZXMgKCouKilcdCouKlxuIgorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vcHl0aG9uLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vcHl0aG9uLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODM0YjQwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9weXRob24udmltCkBAIC0wLDAgKzEsNDEgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglweXRob24KKyIgTWFpbnRhaW5lcjoJSm9oYW5uZXMgWmVsbG5lciA8am9oYW5uZXNAemVsbG5lci5vcmc+CisiIExhc3QgQ2hhbmdlOglXZWQsIDIxIEFwciAyMDA0IDEzOjEzOjA4IENFU1QKKworaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpIHwgZmluaXNoIHwgZW5kaWYKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworc2V0bG9jYWwgY2lua2V5cy09MCMKK3NldGxvY2FsIGluZGVudGtleXMtPTAjCitzZXRsb2NhbCBpbmNsdWRlPVxzKlxcKGZyb21cXFx8aW1wb3J0XFwpCitzZXRsb2NhbCBpbmNsdWRlZXhwcj1zdWJzdGl0dXRlKHY6Zm5hbWUsJ1xcLicsJy8nLCdnJykKK3NldGxvY2FsIHN1ZmZpeGVzYWRkPS5weQorc2V0bG9jYWwgY29tbWVudHMtPTolCitzZXRsb2NhbCBjb21tZW50c3RyaW5nPSMlcworCitzZXQgd2lsZGlnbm9yZSs9Ki5weWMKKworbm5vcmVtYXAgPHNpbGVudD4gPGJ1ZmZlcj4gXV0gOmNhbGwgPFNJRD5QeXRob25fanVtcCgnL15cKGNsYXNzXFx8ZGVmXCknKTxjcj4KK25ub3JlbWFwIDxzaWxlbnQ+IDxidWZmZXI+IFtbIDpjYWxsIDxTSUQ+UHl0aG9uX2p1bXAoJz9eXChjbGFzc1xcfGRlZlwpJyk8Y3I+Citubm9yZW1hcCA8c2lsZW50PiA8YnVmZmVyPiBdbSA6Y2FsbCA8U0lEPlB5dGhvbl9qdW1wKCcvXlxzKlwoY2xhc3NcXHxkZWZcKScpPGNyPgorbm5vcmVtYXAgPHNpbGVudD4gPGJ1ZmZlcj4gW20gOmNhbGwgPFNJRD5QeXRob25fanVtcCgnP15ccypcKGNsYXNzXFx8ZGVmXCknKTxjcj4KKworaWYgZXhpc3RzKCcqPFNJRD5QeXRob25fanVtcCcpIHwgZmluaXNoIHwgZW5kaWYKKworZnVuISA8U0lEPlB5dGhvbl9qdW1wKG1vdGlvbikgcmFuZ2UKKyAgICBsZXQgY250ID0gdjpjb3VudDEKKyAgICBsZXQgc2F2ZSA9IEAvICAgICIgc2F2ZSBsYXN0IHNlYXJjaCBwYXR0ZXJuCisgICAgbWFyayAnCisgICAgd2hpbGUgY250ID4gMAorCXNpbGVudCEgZXhlIGE6bW90aW9uCisJbGV0IGNudCA9IGNudCAtIDEKKyAgICBlbmR3aGlsZQorICAgIGNhbGwgaGlzdGRlbCgnLycsIC0xKQorICAgIGxldCBALyA9IHNhdmUgICAgIiByZXN0b3JlIGxhc3Qgc2VhcmNoIHBhdHRlcm4KK2VuZGZ1bgorCitpZiBoYXMoImd1aV93aW4zMiIpICYmICFleGlzdHMoImI6YnJvd3NlZmlsdGVyIikKKyAgICBsZXQgYjpicm93c2VmaWx0ZXIgPSAiUHl0aG9uIEZpbGVzICgqLnB5KVx0Ki5weVxuIiAuCisJCSAgICAgICBcICJBbGwgRmlsZXMgKCouKilcdCouKlxuIgorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vcnBsLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vcnBsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjI2ZWYxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9ycGwudmltCkBAIC0wLDAgKzEsMjIgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOiAgICAgUlBMLzIKKyIgTWFpbnRhaW5lcjogICBKb+tsIEJFUlRSQU5EIDxycGwyQGZyZWUuZnI+CisiIExhc3QgQ2hhbmdlOgkyMDAyIEZlYiAwNworIiBWZXJzaW9uOiAJCTAuMQorCisiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCisKKyIgRG9uJ3QgbG9hZCBhbm90aGVyIHBsdWdpbiBmb3IgdGhpcyBidWZmZXIKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworc2V0bG9jYWwgYXV0b2luZGVudAorCisiIFNldCAnZm9ybWF0b3B0aW9ucycgdG8gYnJlYWsgY29tbWVudCBsaW5lcyBidXQgbm90IG90aGVyIGxpbmVzLAorIiBhbmQgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciB3aGVuIGhpdHRpbmcgPENSPiBvciB1c2luZyAibyIuCitzZXRsb2NhbCBmby09dCBmbys9Y3JvcWwKKworIiBTZXQgJ2NvbW1lbnRzJyB0byBmb3JtYXQgZGFzaGVkIGxpc3RzIGluIGNvbW1lbnRzLgorc2V0bG9jYWwgY29tbWVudHM9c086KlwgLSxtTzoqXCBcICxleE86Ki8sczE6LyosbWI6KixleDoqLyw6Ly8KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vcnN0LnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vcnN0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGRkNWEwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9yc3QudmltCkBAIC0wLDAgKzEsMjMgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOgkgICAgcmVTdHJ1Y3R1cmVkVGV4dCBEb2N1bWVudGF0aW9uIEZvcm1hdAorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vZnRwbHVnaW4vcGNwL3JzdC8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNC0yNQorIiBhcmNoLXRhZzoJICAgIDYxOGJmNTA0LTgxYmEtNDUxOC1iYWQyLTQzYmEyYjg0NGEyNgorCisiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCisKKyIgRG9uJ3QgbG9hZCBhbm90aGVyIHBsdWdpbiBmb3IgdGhpcyBidWZmZXIKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworbGV0IGI6dW5kb19mdHBsdWdpbiA9ICJzZXRsIGNvbTwgY21zPCIKKworc2V0bG9jYWwgY29tbWVudHM9ZmI6Li4KK3NldGxvY2FsIGNvbW1lbnRzdHJpbmc9Li5cICVzCitzZXRsb2NhbCBleHBhbmR0YWIKK3NldGxvY2FsIHN0cz0yIHN3PTIKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9ydWJ5LnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vcnVieS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIxYWZlZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vcnVieS52aW0KQEAgLTAsMCArMSwxNCBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luCisiIExhbmd1YWdlOiAgICAgUnVieQorIiBNYWludGFpbmVyOiAgIEdhdmluIFNpbmNsYWlyIDxnc2luY2xhaXJAc295YWJlYW4uY29tLmF1PgorIiBMYXN0IENoYW5nZTogIDIwMDIvMDgvMTIKKyIgVVJMOiB3d3cuc295YWJlYW4uY29tLmF1L2dhdmluL3ZpbS9pbmRleC5odG1sCisKKyIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgKGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSkKKyAgICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgVGhlcmUgYXJlIG5vIGtub3duIHNldHRpbmcgcGFydGljdWxhcmx5IGFwcHJvcHJpYXRlIGZvciBSdWJ5LiAgUGxlYXNlCisiIGNvbnRhY3QgdGhlIG1haW50YWluZXIgaWYgeW91IHRoaW5rIG9mIHNvbWUuCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL3NjaGVtZS52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL3NjaGVtZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzNGY3MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vc2NoZW1lLnZpbQpAQCAtMCwwICsxLDcgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbgorIiBMYW5ndWFnZTogICAgICBTY2hlbWUKKyIgTWFpbnRhaW5lcjogICAgRG9yYWkgU2l0YXJhbSA8ZHMyNkBndGUuY29tPgorIiBVUkw6CQkgaHR0cDovL3d3dy5jY3MubmV1LmVkdS9+ZG9yYWkvdmltcGx1Z2lucy92aW1wbHVnaW5zLmh0bWwKKyIgTGFzdCBDaGFuZ2U6ICAgQXByIDIsIDIwMDMKKworcnVuIGZ0cGx1Z2luL2xpc3AudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL3NnbWwudmltIGIvcnVudGltZS9mdHBsdWdpbi9zZ21sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTE5ZGRhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9zZ21sLnZpbQpAQCAtMCwwICsxLDM5IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJc2dtbAorIiBNYWludGFpbmVyOglEYW4gU2hhcnAgPGR3c2hhcnAgYXQgaG90bWFpbCBkb3QgY29tPgorIiBMYXN0IENoYW5nZWQ6IDIwMDMgU2VwIDMwCisiIFVSTDoJCWh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwcGVvcGxlL3ZpbS9mdHBsdWdpbgorCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikgfCBmaW5pc2ggfCBlbmRpZgorCisiIE1ha2Ugc3VyZSB0aGUgY29udGludWF0aW9uIGxpbmVzIGJlbG93IGRvIG5vdCBjYXVzZSBwcm9ibGVtcyBpbgorIiBjb21wYXRpYmlsaXR5IG1vZGUuCitsZXQgczpzYXZlX2NwbyA9ICZjcG8KK3NldCBjcG8tPUMKKworIiBEZWZpbmUgc29tZSBkZWZhdWx0cyBpbiBjYXNlIHRoZSBpbmNsdWRlZCBmdHBsdWdpbnMgZG9uJ3Qgc2V0IHRoZW0uCitsZXQgczp1bmRvX2Z0cGx1Z2luID0gIiIKK2xldCBzOmJyb3dzZWZpbHRlciA9ICJYTUwgRmlsZXMgKCoueG1sKVx0Ki54bWxcbiIgLgorCSAgICBcCSAgICAgIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCisKK3J1bnRpbWUhIGZ0cGx1Z2luL3htbC52aW0gZnRwbHVnaW4veG1sXyoudmltIGZ0cGx1Z2luL3htbC8qLnZpbQorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCisiIE92ZXJyaWRlIG91ciBkZWZhdWx0cyBpZiB0aGVzZSB3ZXJlIHNldCBieSBhbiBpbmNsdWRlZCBmdHBsdWdpbi4KK2lmIGV4aXN0cygiYjp1bmRvX2Z0cGx1Z2luIikKKyAgICBsZXQgczp1bmRvX2Z0cGx1Z2luID0gYjp1bmRvX2Z0cGx1Z2luCitlbmRpZgoraWYgZXhpc3RzKCJiOmJyb3dzZWZpbHRlciIpCisgICAgbGV0IHM6YnJvd3NlZmlsdGVyID0gYjpicm93c2VmaWx0ZXIKK2VuZGlmCisKKyIgQ2hhbmdlIHRoZSA6YnJvd3NlIGUgZmlsdGVyIHRvIHByaW1hcmlseSBzaG93IHhtbC1yZWxhdGVkIGZpbGVzLgoraWYgaGFzKCJndWlfd2luMzIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9IlNHTUwgRmlsZXMgKCouc2dtbCwqLnNnbSlcdCouc2dtKlxuIiAuIHM6YnJvd3NlZmlsdGVyCitlbmRpZgorCisiIFVuZG8gdGhlIHN0dWZmIHdlIGNoYW5nZWQuCitsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInVubGV0ISBiOmJyb3dzZWZpbHRlciB8ICIgLiBzOnVuZG9fZnRwbHVnaW4KKworIiBSZXN0b3JlIHRoZSBzYXZlZCBjb21wYXRpYmlsaXR5IG9wdGlvbnMuCitsZXQgJmNwbyA9IHM6c2F2ZV9jcG8KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vc2gudmltIGIvcnVudGltZS9mdHBsdWdpbi9zaC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgzMjE1YQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vc2gudmltCkBAIC0wLDAgKzEsMzggQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglzaAorIiBNYWludGFpbmVyOglEYW4gU2hhcnAgPGR3c2hhcnAgYXQgaG90bWFpbCBkb3QgY29tPgorIiBMYXN0IENoYW5nZWQ6IDIwMDMgU2VwIDI5CisiIFVSTDoJCWh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwcGVvcGxlL3ZpbS9mdHBsdWdpbgorCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikgfCBmaW5pc2ggfCBlbmRpZgorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCisiIE1ha2Ugc3VyZSB0aGUgY29udGludWF0aW9uIGxpbmVzIGJlbG93IGRvIG5vdCBjYXVzZSBwcm9ibGVtcyBpbgorIiBjb21wYXRpYmlsaXR5IG1vZGUuCitsZXQgczpzYXZlX2NwbyA9ICZjcG8KK3NldCBjcG8tPUMKKworc2V0bG9jYWwgY29tbWVudHN0cmluZz0jJXMKKworIiBTaGVsbDogIHRoYW5rcyB0byBKb2hhbm5lcyBaZWxsbmVyCitpZiBleGlzdHMoImxvYWRlZF9tYXRjaGl0IikKKyAgICBsZXQgczpzb2wgPSAnXCUoO1xzKlx8XlxzKlwpXEA8PScgICIgc3RhcnQgb2YgbGluZQorICAgIGxldCBiOm1hdGNoX3dvcmRzID0KKyAgICBcIHM6c29sLidpZlw+OicgLiBzOnNvbC4nZWxpZlw+OicgLiBzOnNvbC4nZWxzZVw+OicgLiBzOnNvbC4gJ2ZpXD4sJyAuCisgICAgXCBzOnNvbC4nXCUoZm9yXHx3aGlsZVwpXD46JyAuIHM6c29sLiAnZG9uZVw+LCcgLgorICAgIFwgczpzb2wuJ2Nhc2VcPjonIC4gczpzb2wuICdlc2FjXD4nCitlbmRpZgorCisiIENoYW5nZSB0aGUgOmJyb3dzZSBlIGZpbHRlciB0byBwcmltYXJpbHkgc2hvdyBzaGVsbC1yZWxhdGVkIGZpbGVzLgoraWYgaGFzKCJndWlfd2luMzIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9IkJvdXJuZSBTaGVsbCBTY3JpcHRzICgqLnNoKVx0Ki5zaFxuIiAuCisJCVwJIktvcm4gU2hlbGwgU2NyaXB0cyAoKi5rc2gpXHQqLmtzaFxuIiAuCisJCVwJIkJhc2ggU2hlbGwgU2NyaXB0cyAoKi5iYXNoKVx0Ki5iYXNoXG4iIC4KKwkJXAkiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKK2VuZGlmCisKKyIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAic2V0bG9jYWwgY21zPCB8IHVubGV0ISBiOmJyb3dzZWZpbHRlciBiOm1hdGNoX3dvcmRzIgorCisiIFJlc3RvcmUgdGhlIHNhdmVkIGNvbXBhdGliaWxpdHkgb3B0aW9ucy4KK2xldCAmY3BvID0gczpzYXZlX2NwbwpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9zcGVjLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vc3BlYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxZDcwYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vc3BlYy52aW0KQEAgLTAsMCArMSwxNjggQEAKKyIgUGx1Z2luIHRvIHVwZGF0ZSB0aGUgJWNoYW5nZWxvZyBzZWN0aW9uIG9mIFJQTSBzcGVjIGZpbGVzCisiIEZpbGVuYW1lOiBzcGVjLnZpbQorIiBNYWludGFpbmVyOiBHdXN0YXZvIE5pZW1leWVyIDxuaWVtZXllckBjb25lY3RpdmEuY29tPgorIiBMYXN0IENoYW5nZTogV2VkLCAxMCBBcHIgMjAwMiAxNjoyODo1MiAtMDMwMAorCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKwlmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKK2lmICFleGlzdHMoIm5vX3BsdWdpbl9tYXBzIikgJiYgIWV4aXN0cygibm9fc3BlY19tYXBzIikKKwlpZiAhaGFzbWFwdG8oIjxQbHVnPlNwZWNDaGFuZ2Vsb2ciKQorCQltYXAgPGJ1ZmZlcj4gPExvY2FsTGVhZGVyPmMgPFBsdWc+U3BlY0NoYW5nZWxvZworCWVuZGlmCitlbmRpZgorCitub3JlbWFwIDxidWZmZXI+IDx1bmlxdWU+IDxzY3JpcHQ+IDxQbHVnPlNwZWNDaGFuZ2Vsb2cgOmNhbGwgPFNJRD5TcGVjQ2hhbmdlbG9nKCIiKTxDUj4KKworaWYgIWV4aXN0cygiKnM6U3BlY0NoYW5nZWxvZyIpCisJZnVuY3Rpb24gczpTcGVjQ2hhbmdlbG9nKGZvcm1hdCkKKwkJaWYgc3RybGVuKGE6Zm9ybWF0KSA9PSAwCisJCQlpZiAhZXhpc3RzKCJnOnNwZWNfY2hnbG9nX2Zvcm1hdCIpCisJCQkJbGV0IGVtYWlsID0gaW5wdXQoIkVtYWlsIGFkZHJlc3M6ICIpCisJCQkJbGV0IGc6c3BlY19jaGdsb2dfZm9ybWF0ID0gIiVhICViICVkICVZICIgLiBsOmVtYWlsCisJCQkJZWNobyAiXHIiCisJCQllbmRpZgorCQkJbGV0IGZvcm1hdCA9IGc6c3BlY19jaGdsb2dfZm9ybWF0CisJCWVsc2UKKwkJCWlmICFleGlzdHMoImc6c3BlY19jaGdsb2dfZm9ybWF0IikKKwkJCQlsZXQgZzpzcGVjX2NoZ2xvZ19mb3JtYXQgPSBhOmZvcm1hdAorCQkJZW5kaWYKKwkJCWxldCBmb3JtYXQgPSBhOmZvcm1hdAorCQllbmRpZgorCQlsZXQgbGluZSA9IDAKKwkJbGV0IG5hbWUgPSAiIgorCQlsZXQgdmVyID0gIiIKKwkJbGV0IHJlbCA9ICIiCisJCWxldCBuYW1lbGluZSA9IC0xCisJCWxldCB2ZXJsaW5lID0gLTEKKwkJbGV0IHJlbGxpbmUgPSAtMQorCQlsZXQgY2hnbGluZSA9IC0xCisJCXdoaWxlIChsaW5lIDw9IGxpbmUoIiQiKSkKKwkJCWxldCBsaW5lc3RyID0gZ2V0bGluZShsaW5lKQorCQkJaWYgKG5hbWUgPT0gIiIgJiYgbGluZXN0ciA9fj8gJ15OYW1lOicpCisJCQkJbGV0IG5hbWVsaW5lID0gbGluZQorCQkJCWxldCBuYW1lID0gc3Vic3RpdHV0ZShzdHJwYXJ0KGxpbmVzdHIsNSksICdeWwkgXSpcKFteIAldXCtcKVsJCV0qJCcsJ1wxJywnJykKKwkJCWVsc2VpZiAodmVyID09ICIiICYmIGxpbmVzdHIgPX4/ICdeVmVyc2lvbjonKQorCQkJCWxldCB2ZXJsaW5lID0gbGluZQorCQkJCWxldCB2ZXIgPSBzdWJzdGl0dXRlKHN0cnBhcnQobGluZXN0ciw4KSwgJ15bCSBdKlwoW14gCV1cK1wpWwkJXSokJywnXDEnLCcnKQorCQkJZWxzZWlmIChyZWwgPT0gIiIgJiYgbGluZXN0ciA9fj8gJ15SZWxlYXNlOicpCisJCQkJbGV0IHJlbGxpbmUgPSBsaW5lCisJCQkJbGV0IHJlbCA9IHN1YnN0aXR1dGUoc3RycGFydChsaW5lc3RyLDgpLCAnXlsJIF0qXChbXiAJXVwrXClbCQldKiQnLCdcMScsJycpCisJCQllbHNlaWYgKGxpbmVzdHIgPX4/ICdeJWNoYW5nZWxvZycpCisJCQkJbGV0IGNoZ2xpbmUgPSBsaW5lCisJCQkJZXhlY3V0ZSBsaW5lCisJCQkJYnJlYWsKKwkJCWVuZGlmCisJCQlsZXQgbGluZSA9IGxpbmUrMQorCQllbmR3aGlsZQorCQlpZiAobmFtZWxpbmUgIT0gLTEgJiYgdmVybGluZSAhPSAtMSAmJiByZWxsaW5lICE9IC0xKQorCQkJbGV0IGluY2x1ZGVfcmVsZWFzZV9pbmZvID0gZXhpc3RzKCJnOnNwZWNfY2hnbG9nX3JlbGVhc2VfaW5mbyIpCisJCQlsZXQgbmFtZSA9IHM6UGFyc2VScG1WYXJzKG5hbWUsIG5hbWVsaW5lKQorCQkJbGV0IHZlciA9IHM6UGFyc2VScG1WYXJzKHZlciwgdmVybGluZSkKKwkJCWxldCByZWwgPSBzOlBhcnNlUnBtVmFycyhyZWwsIHJlbGxpbmUpCisJCWVsc2UKKwkJCWxldCBpbmNsdWRlX3JlbGVhc2VfaW5mbyA9IDAKKwkJZW5kaWYKKwkJaWYgKGNoZ2xpbmUgPT0gLTEpCisJCQlsZXQgb3B0aW9uID0gY29uZmlybSgiQ2FuJ3QgZmluZCAlY2hhbmdlbG9nLiBDcmVhdGUgb25lPyAiLCImRW5kIG9mIGZpbGVcbiZIZXJlXG4mQ2FuY2VsIiwzKQorCQkJaWYgKG9wdGlvbiA9PSAxKQorCQkJCWNhbGwgYXBwZW5kKGxpbmUoIiQiKSwiIikKKwkJCQljYWxsIGFwcGVuZChsaW5lKCIkIiksIiVjaGFuZ2Vsb2ciKQorCQkJCWV4ZWN1dGUgbGluZSgiJCIpCisJCQkJbGV0IGNoZ2xpbmUgPSBsaW5lKCIuIikKKwkJCWVsc2VpZiAob3B0aW9uID09IDIpCisJCQkJY2FsbCBhcHBlbmQobGluZSgiLiIpLCIlY2hhbmdlbG9nIikKKwkJCQlub3JtYWwgagorCQkJCWNoZ2xpbmUgPSBsaW5lKCIuIikKKwkJCWVuZGlmCisJCWVuZGlmCisJCWlmIChjaGdsaW5lICE9IC0xKQorCQkJbGV0IHBhcnNlZF9mb3JtYXQgPSAiKiAiLnN0cmZ0aW1lKGZvcm1hdCkKKwkJCWxldCByZWxlYXNlX2luZm8gPSAiKyAiLm5hbWUuIi0iLnZlci4iLSIucmVsCisJCQlsZXQgd3JvbmdfZm9ybWF0ID0gMAorCQkJbGV0IHdyb25nX3JlbGVhc2UgPSAwCisJCQlsZXQgaW5zZXJ0X2xpbmUgPSAwCisJCQlpZiAoZ2V0bGluZShjaGdsaW5lKzEpICE9IHBhcnNlZF9mb3JtYXQpCisJCQkJbGV0IHdyb25nX2Zvcm1hdCA9IDEKKwkJCWVuZGlmCisJCQlpZiAoaW5jbHVkZV9yZWxlYXNlX2luZm8gJiYgZ2V0bGluZShjaGdsaW5lKzIpICE9IHJlbGVhc2VfaW5mbykKKwkJCQlsZXQgd3JvbmdfcmVsZWFzZSA9IDEKKwkJCWVuZGlmCisJCQlpZiAod3JvbmdfZm9ybWF0IHx8IHdyb25nX3JlbGVhc2UpCisJCQkJaWYgKGluY2x1ZGVfcmVsZWFzZV9pbmZvICYmICF3cm9uZ19yZWxlYXNlICYmICFleGlzdHMoImc6c3BlY19jaGdsb2dfbmV2ZXJfaW5jcmVhc2VfcmVsZWFzZSIpKQorCQkJCQlsZXQgb3B0aW9uID0gY29uZmlybSgiSW5jcmVhc2UgcmVsZWFzZT8gIiwiJlllc1xuJk5vIiwxKQorCQkJCQlpZiAob3B0aW9uID09IDEpCisJCQkJCQlleGVjdXRlIHJlbGxpbmUKKwkJCQkJCW5vcm1hbCABCisJCQkJCQlsZXQgcmVsID0gc3Vic3RpdHV0ZShzdHJwYXJ0KGdldGxpbmUocmVsbGluZSksOCksICdeWwkgXSpcKFteIAldXCtcKVsJCV0qJCcsJ1wxJywnJykKKwkJCQkJCWxldCByZWxlYXNlX2luZm8gPSAiKyAiLm5hbWUuIi0iLnZlci4iLSIucmVsCisJCQkJCWVuZGlmCisJCQkJZW5kaWYKKwkJCQlsZXQgbiA9IDAKKwkJCQljYWxsIGFwcGVuZChjaGdsaW5lK24sIHBhcnNlZF9mb3JtYXQpCisJCQkJaWYgaW5jbHVkZV9yZWxlYXNlX2luZm8KKwkJCQkJbGV0IG4gPSBuICsgMQorCQkJCQljYWxsIGFwcGVuZChjaGdsaW5lK24sIHJlbGVhc2VfaW5mbykKKwkJCQllbmRpZgorCQkJCWxldCBuID0gbiArIDEKKwkJCQljYWxsIGFwcGVuZChjaGdsaW5lK24sIi0gIikKKwkJCQlsZXQgbiA9IG4gKyAxCisJCQkJY2FsbCBhcHBlbmQoY2hnbGluZStuLCIiKQorCQkJCWxldCBpbnNlcnRfbGluZSA9IGNoZ2xpbmUrbgorCQkJZWxzZQorCQkJCWxldCBsaW5lID0gY2hnbGluZQorCQkJCWlmICFleGlzdHMoImc6c3BlY19jaGdsb2dfcHJlcGVuZCIpCisJCQkJCXdoaWxlICEoZ2V0bGluZShsaW5lKzIpID1+ICdeXCggKlx8XCouKlwpJCcpCisJCQkJCQlsZXQgbGluZSA9IGxpbmUrMQorCQkJCQllbmR3aGlsZQorCQkJCWVuZGlmCisJCQkJY2FsbCBhcHBlbmQobGluZSsxLCItICIpCisJCQkJbGV0IGluc2VydF9saW5lID0gbGluZSsyCisJCQllbmRpZgorCQkJZXhlY3V0ZSBpbnNlcnRfbGluZQorCQkJc3RhcnRpbnNlcnQhCisJCWVuZGlmCisJZW5kZnVuY3Rpb24KK2VuZGlmCisKK2lmICFleGlzdHMoIipzOlBhcnNlUnBtVmFycyIpCisgICAgZnVuY3Rpb24gczpQYXJzZVJwbVZhcnMoc3RyLCBzdHJsaW5lKQorCWxldCBlbmQgPSAtMQorCWxldCByZXQgPSAiIgorCXdoaWxlICgxKQorCQlsZXQgc3RhcnQgPSBtYXRjaChhOnN0ciwgIlwleyIsIGVuZCsxKQorCQlpZiAoc3RhcnQgPT0gLTEpCisJCQlsZXQgcmV0ID0gcmV0IC4gc3RycGFydChhOnN0ciwgZW5kKzEpCisJCQlicmVhaworCQllbmRpZgorCQlsZXQgcmV0ID0gcmV0IC4gc3RycGFydChhOnN0ciwgZW5kKzEsIHN0YXJ0LShlbmQrMSkpCisJCWxldCBlbmQgPSBtYXRjaChhOnN0ciwgIn0iLCBzdGFydCkKKwkJaWYgKGVuZCA9PSAtMSkKKwkJCWxldCByZXQgPSByZXQgLiBzdHJwYXJ0KGE6c3RyLCBzdGFydCkKKwkJCWJyZWFrCisJCWVuZGlmCisJCWxldCB2YXJuYW1lID0gc3RycGFydChhOnN0ciwgc3RhcnQrMiwgZW5kLShzdGFydCsyKSkKKwkJZXhlY3V0ZSBhOnN0cmxpbmUKKwkJbGV0IGRlZmluZXN0ciA9ICJeWyBcdF0qJWRlZmluZVsgXHRdXFwrIiAuIHZhcm5hbWUgLiAiWyBcdF1cXCtcXCguKlxcKSQiCisJCWxldCBsaW5lbnVtID0gc2VhcmNoKGRlZmluZXN0ciwgImJXIikKKwkJaWYgKGxpbmVudW0gIT0gLTEpCisJCQlsZXQgcmV0ID0gcmV0IC4gIHN1YnN0aXR1dGUoZ2V0bGluZShsaW5lbnVtKSwgZGVmaW5lc3RyLCAiXFwxIiwgIiIpCisJCWVsc2UKKwkJCWxldCByZXQgPSByZXQgLiBzdHJwYXJ0KHN0ciwgc3RhcnQsIGVuZCsxLXN0YXJ0KQorCQllbmRpZgorCWVuZHdoaWxlCisJcmV0dXJuIHJldAorICAgIGVuZGZ1bmN0aW9uCitlbmRpZgorCisiIFRoZSBmb2xsb3dpbmcgbGluZXMsIGFsb25nIHdpdGggdGhlIG1hY3Jvcy9tYXRjaGl0LnZpbSBwbHVnaW4sCisiIG1ha2UgaXQgZWFzeSB0byBuYXZpZ2F0ZSB0aGUgZGlmZmVyZW50IHNlY3Rpb25zIG9mIGEgc3BlYyBmaWxlCisiIHdpdGggdGhlICUga2V5ICh0aGFua3MgdG8gTWF4IElzY2hlbmtvKS4KKworbGV0IGI6bWF0Y2hfaWdub3JlY2FzZSA9IDAKK2xldCBiOm1hdGNoX3dvcmRzID0KKyAgXCAnXk5hbWU6XiVkZXNjcmlwdGlvbjpeJWNsZWFuOl4lc2V0dXA6XiVidWlsZDpeJWluc3RhbGw6XiVmaWxlczonIC4KKyAgXCAnXiVwYWNrYWdlOl4lcHJldW46XiVwb3N0dW46XiVjaGFuZ2Vsb2cnCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vc3FsLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vc3FsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmJkZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9zcWwudmltCkBAIC0wLDAgKzEsMzUgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglTUUwgKENvbW1vbiBmb3IgT3JhY2xlLCBNaWNyb3NvZnQgU1FMIFNlcnZlciwgU3liYXNlKQorIiBWZXJzaW9uOgkwLjAyCisiIE1haW50YWluZXI6CURhdmlkIEZpc2hidXJuIDxmaXNoYnVybkBpYW55d2hlcmUuY29tPgorIiBMYXN0IENoYW5nZToJVHVlIE1heSAyNyAyMDAzIDA5OjMzOjMxCisKKyIgVGhpcyBmaWxlIHNob3VsZCBvbmx5IGNvbnRhaW4gdmFsdWVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgU1FMIGxhbmd1YWdlcworIiBPcmFjbGUsIE1pY3Jvc29mdCBTUUwgU2VydmVyLCBTeWJhc2UgQVNBL0FTRSwgTXlTUUwsIGFuZCBzbyBvbgorIiBJZiBhZGRpdGlvbmFsIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBjcmVhdGU6CisiIHZpbWZpbGVzL2FmdGVyL2Z0cGx1Z2luL3NxbC52aW0KKyIgdG8gb3ZlcnJpZGUgYW5kIGFkZCBhbnkgb2YgeW91ciBvd24gc2V0dGluZ3MKKworIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKyAgZmluaXNoCitlbmRpZgorCisiIERvbid0IGxvYWQgYW5vdGhlciBwbHVnaW4gZm9yIHRoaXMgYnVmZmVyCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgRGVmaW5lIHBhdHRlcm5zIGZvciB0aGUgbWF0Y2hpdCBtYWNybworaWYgIWV4aXN0cygiYjptYXRjaF93b3JkcyIpCisgICAgIiBTUUwgaXMgZ2VuZXJhbGx5IGNhc2UgaW5zZW5zaXRpdmUKKyAgICBsZXQgYjptYXRjaF9pZ25vcmVjYXNlID0gMQorICAgIGxldCBiOm1hdGNoX3dvcmRzID0KKwkJXCAnXDxiZWdpblw+Olw8ZW5kXD5cKDtcKVw/JCwnLgorCQlcICdcPGlmXD46XDxlbHNpZlw+Olw8ZWxzZWlmXD46XDxlbHNlXD46Jy4KKwkJXCAnXCUoXDxlbmRcc1wrXClcQDwhJyAuICdcPGlmXD46XDxlbmRcc1wraWZcPiwnLgorCQlcICdcPGxvb3BcPjpcPGJyZWFrXD46XDxjb250aW51ZVw+OicuCisJCVwgJ1wlKFw8ZW5kXHNcK1wpXEA8IScgLiAnXDxsb29wXD46XDxlbmRcc1wrbG9vcFw+LCcuCisJCVwgJ1w8Zm9yXD46XDxicmVha1w+Olw8Y29udGludWVcPjonLgorCQlcICdcJShcPGVuZFxzXCtcKVxAPCEnIC4gJ1w8Zm9yXD46XDxlbmRcc1wrZm9yXD4sJy4KKwkJXCAnXDxjYXNlXD46XDx3aGVuXD46XDxkZWZhdWx0XD46Jy4KKwkJXCAnXCUoXDxlbmRcc1wrXClcQDwhJyAuICdcPGNhc2VcPjpcPGVuZFxzXCtjYXNlXD4nCitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9zdmcudmltIGIvcnVudGltZS9mdHBsdWdpbi9zdmcudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NDQxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL3N2Zy52aW0KQEAgLTAsMCArMSwzOSBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6CXN2ZworIiBNYWludGFpbmVyOglEYW4gU2hhcnAgPGR3c2hhcnAgYXQgaG90bWFpbCBkb3QgY29tPgorIiBMYXN0IENoYW5nZWQ6IDIwMDMgU2VwIDI5CisiIFVSTDoJCWh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwcGVvcGxlL3ZpbS9mdHBsdWdpbgorCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikgfCBmaW5pc2ggfCBlbmRpZgorCisiIE1ha2Ugc3VyZSB0aGUgY29udGludWF0aW9uIGxpbmVzIGJlbG93IGRvIG5vdCBjYXVzZSBwcm9ibGVtcyBpbgorIiBjb21wYXRpYmlsaXR5IG1vZGUuCitsZXQgczpzYXZlX2NwbyA9ICZjcG8KK3NldCBjcG8tPUMKKworIiBEZWZpbmUgc29tZSBkZWZhdWx0cyBpbiBjYXNlIHRoZSBpbmNsdWRlZCBmdHBsdWdpbnMgZG9uJ3Qgc2V0IHRoZW0uCitsZXQgczp1bmRvX2Z0cGx1Z2luID0gIiIKK2xldCBzOmJyb3dzZWZpbHRlciA9ICJYTUwgRmlsZXMgKCoueG1sKVx0Ki54bWxcbiIgLgorCSAgICBcCSAgICAgIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCisKK3J1bnRpbWUhIGZ0cGx1Z2luL3htbC52aW0gZnRwbHVnaW4veG1sXyoudmltIGZ0cGx1Z2luL3htbC8qLnZpbQorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCisiIE92ZXJyaWRlIG91ciBkZWZhdWx0cyBpZiB0aGVzZSB3ZXJlIHNldCBieSBhbiBpbmNsdWRlZCBmdHBsdWdpbi4KK2lmIGV4aXN0cygiYjp1bmRvX2Z0cGx1Z2luIikKKyAgICBsZXQgczp1bmRvX2Z0cGx1Z2luID0gYjp1bmRvX2Z0cGx1Z2luCitlbmRpZgoraWYgZXhpc3RzKCJiOmJyb3dzZWZpbHRlciIpCisgICAgbGV0IHM6YnJvd3NlZmlsdGVyID0gYjpicm93c2VmaWx0ZXIKK2VuZGlmCisKKyIgQ2hhbmdlIHRoZSA6YnJvd3NlIGUgZmlsdGVyIHRvIHByaW1hcmlseSBzaG93IHhtbC1yZWxhdGVkIGZpbGVzLgoraWYgaGFzKCJndWlfd2luMzIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9IlNWRyBGaWxlcyAoKi5zdmcpXHQqLnN2Z1xuIiAuIHM6YnJvd3NlZmlsdGVyCitlbmRpZgorCisiIFVuZG8gdGhlIHN0dWZmIHdlIGNoYW5nZWQuCitsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInVubGV0ISBiOmJyb3dzZWZpbHRlciB8ICIgLiBzOnVuZG9fZnRwbHVnaW4KKworIiBSZXN0b3JlIHRoZSBzYXZlZCBjb21wYXRpYmlsaXR5IG9wdGlvbnMuCitsZXQgJmNwbyA9IHM6c2F2ZV9jcG8KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vdGNzaC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL3Rjc2gudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzI0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL3Rjc2gudmltCkBAIC0wLDAgKzEsMzkgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOgl0Y3NoCisiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlZDogMjAwMyBTZXAgMjkKKyIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCisKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCisKKyIgTWFrZSBzdXJlIHRoZSBjb250aW51YXRpb24gbGluZXMgYmVsb3cgZG8gbm90IGNhdXNlIHByb2JsZW1zIGluCisiIGNvbXBhdGliaWxpdHkgbW9kZS4KK2xldCBzOnNhdmVfY3BvID0gJmNwbworc2V0IGNwby09QworCisiIERlZmluZSBzb21lIGRlZmF1bHRzIGluIGNhc2UgdGhlIGluY2x1ZGVkIGZ0cGx1Z2lucyBkb24ndCBzZXQgdGhlbS4KK2xldCBzOnVuZG9fZnRwbHVnaW4gPSAiIgorbGV0IHM6YnJvd3NlZmlsdGVyID0gImNzaCBGaWxlcyAoKi5jc2gpXHQqLmNzaFxuIiAuCisJICAgIFwJICAgICAiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKKworcnVudGltZSEgZnRwbHVnaW4vY3NoLnZpbSBmdHBsdWdpbi9jc2hfKi52aW0gZnRwbHVnaW4vY3NoLyoudmltCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgT3ZlcnJpZGUgb3VyIGRlZmF1bHRzIGlmIHRoZXNlIHdlcmUgc2V0IGJ5IGFuIGluY2x1ZGVkIGZ0cGx1Z2luLgoraWYgZXhpc3RzKCJiOnVuZG9fZnRwbHVnaW4iKQorICAgIGxldCBzOnVuZG9fZnRwbHVnaW4gPSBiOnVuZG9fZnRwbHVnaW4KK2VuZGlmCitpZiBleGlzdHMoImI6YnJvd3NlZmlsdGVyIikKKyAgICBsZXQgczpicm93c2VmaWx0ZXIgPSBiOmJyb3dzZWZpbHRlcgorZW5kaWYKKworIiBDaGFuZ2UgdGhlIDpicm93c2UgZSBmaWx0ZXIgdG8gcHJpbWFyaWx5IHNob3cgdGNzaC1yZWxhdGVkIGZpbGVzLgoraWYgaGFzKCJndWlfd2luMzIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9InRjc2ggU2NyaXB0cyAoKi50Y3NoKVx0Ki50Y3NoXG4iIC4gczpicm93c2VmaWx0ZXIKK2VuZGlmCisKKyIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAidW5sZXQhIGI6YnJvd3NlZmlsdGVyIHwgIiAuIHM6dW5kb19mdHBsdWdpbgorCisiIFJlc3RvcmUgdGhlIHNhdmVkIGNvbXBhdGliaWxpdHkgb3B0aW9ucy4KK2xldCAmY3BvID0gczpzYXZlX2NwbwpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi90ZXgudmltIGIvcnVudGltZS9mdHBsdWdpbi90ZXgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NzFlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2Z0cGx1Z2luL3RleC52aW0KQEAgLTAsMCArMSwxMTIgQEAKKyIgTGFUZVggZmlsZXR5cGUgcGx1Z2luCisiIExhbmd1YWdlOiAgICAgTGFUZVggKGZ0PXRleCkKKyIgTWFpbnRhaW5lcjogICBCZW5qaSBGaXNoZXIsIFBoLkQuIDxiZW5qaUBtZW1iZXIuQU1TLm9yZz4KKyIgVmVyc2lvbjoJMS4yCisiIExhc3QgQ2hhbmdlOglUdWUgMTEgTWF5IDIwMDQgMDQ6NDk6MjAgUE0gRURUCisiICBVUkw6CQlodHRwOi8vd3d3LnZpbS5vcmcvc2NyaXB0LnBocD9zY3JpcHRfaWQ9NDExCisKKyIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgoraWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKKworIiBEb24ndCBsb2FkIGFub3RoZXIgcGx1Z2luIGZvciB0aGlzIGJ1ZmZlcgorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCitsZXQgczpzYXZlX2NwbyA9ICZjcG8KK3NldCBjcG8mdmltCisKKyIgVGhpcyBtYXkgYmUgdXNlZCB0byBzZXQgYjp0ZXhfZmxhdm9yLiAgQSBtb3JlIGNvbXBsZXRlIHZlcnNpb24gY2FuIGJlIGZvdW5kCisiIGluIGZvby52aW0gKHNlZSBodHRwOi8vd3d3LnZpbS5vcmcvc2NyaXB0LnBocD9zY3JpcHRfaWQ9NzIpLgoraWYgIWV4aXN0cygiKnM6R2V0TW9kZWxpbmVzIikKKyAgZnVuISBzOkdldE1vZGVsaW5lcyhwYXQsIC4uLikKKyAgICAiIExvbmcgYnV0IHNpbXBsZTogIHNldCBzdGFydCBsaW5lIGFuZCBmaW5pc2ggbGluZS4KKyAgICBsZXQgRU9GID0gbGluZSgiJCIpCisgICAgaWYgYTowID4gMQorICAgICAgbGV0IHN0YXJ0ID0gYToxIHwgbGV0IGZpbmlzaCA9IGE6MgorICAgIGVsc2VpZiBhOjAgPT0gMQorICAgICAgaWYgYToxID4gMAorCWxldCBmaW5pc2ggPSBhOjEKKyAgICAgIGVsc2UKKwlsZXQgc3RhcnQgPSBFT0YgKyBhOjEgKyAxCisgICAgICBlbmRpZgorICAgIGVuZGlmCisgICAgaWYgIWV4aXN0cygic3RhcnQiKSB8fCBzdGFydCA8IDEKKyAgICAgIGxldCBzdGFydCA9IDEKKyAgICBlbmRpZgorICAgIGlmICFleGlzdHMoImZpbmlzaCIpIHx8IGZpbmlzaCA+IEVPRgorICAgICAgbGV0IGZpbmlzaCA9IEVPRgorICAgIGVuZGlmCisgICAgbGV0IG4gPSAwCisgICAgc2lsZW50ISBleGVjdXRlIHN0YXJ0IC4iLCIuIGZpbmlzaAorCSAgXCAnZy8nIC4gZXNjYXBlKGE6cGF0LCAiLyIpIC4gIi9sZXQgbj1saW5lKCcuJykiCisgICAgaWYgbgorICAgICAgZXhlY3V0ZSAibm9ybWFsIVw8Qy1PPiIKKyAgICBlbmRpZgorICAgIHJldHVybiBuIC4gIjoiCisgIGVuZGZ1bgorZW5kaWYgIiAhZXhpc3RzKCIqR2V0TW9kZWxpbmVzIikKKworIiBEZWZpbmUgdGhlIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZSBiOnRleF9mbGF2b3IgdG8gInRleCIgKGZvciBwbGFpbikgb3IKKyIgImxhdGV4Ii4KKyIgMS4gQ2hlY2sgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUgZm9yICIlJjxmb3JtYXQ+Ii4KKyIgMi4gQ2hlY2sgdGhlIGZpcnN0IDEwMDAgbGluZXMgZm9yICJcYmVnaW57ZG9jdW1lbnR9Ii4KKyIgMy4gQ2hlY2sgZm9yIGEgZ2xvYmFsIHZhcmlhYmxlIGc6dGV4X2ZsYXZvciwgY2FuIGJlIHNldCBpbiB1c2VyJ3MgdmltcmMuCisiIDQuIERlZmF1bHQgdG8gImxhdGV4Ii4KKyIgNS4gU3RyaXAgInBkZiIgYW5kIGNoYW5nZSAicGxhaW4iIHRvICJ0ZXgiLgoraWYgZ2V0bGluZSgxKSA9fiAnXiUmXHMqXGtcKycKKwlsZXQgYjp0ZXhfZmxhdm9yID0gbWF0Y2hzdHIoZ2V0bGluZSgxKSwgJyUmXHMqXHpzXGtcKycpCitlbHNlaWYgczpHZXRNb2RlbGluZXMoJ1xcYmVnaW5ccyp7XHMqZG9jdW1lbnRccyp9JywgMTAwMCkgIT0gIjA6IgorCWxldCBiOnRleF9mbGF2b3IgPSAibGF0ZXgiCitlbHNlaWYgZXhpc3RzKCJnOnRleF9mbGF2b3IiKQorCWxldCBiOnRleF9mbGF2b3IgPSBnOnRleF9mbGF2b3IKK2Vsc2UKKwlsZXQgYjp0ZXhfZmxhdm9yID0gImxhdGV4IgorZW5kaWYKK2xldCBiOnRleF9mbGF2b3IgPSBzdWJzdGl0dXRlKGI6dGV4X2ZsYXZvciwgJ3BkZicsICcnLCAnJykKK2lmIGI6dGV4X2ZsYXZvciA9PSAicGxhaW4iCisJbGV0IGI6dGV4X2ZsYXZvciA9ICJ0ZXgiCitlbmRpZgorCisiIFNldCAnY29tbWVudHMnIHRvIGZvcm1hdCBkYXNoZWQgbGlzdHMgaW4gY29tbWVudHMKK3NldGxvY2FsIGNvbT1zTzolXCAtLG1POiVcIFwgLGVPOiUlLDolCisKKyIgU2V0ICdjb21tZW50c3RyaW5nJyB0byByZWNvZ25pemUgdGhlICUgY29tbWVudCBjaGFyYWN0ZXI6CisiIChUaGFua3MgdG8gQWppdCBUaGFra2FyLikKK3NldGxvY2FsIGNtcz0lJXMKKworIiBBbGxvdyAiW2QiIHRvIGJlIHVzZWQgdG8gZmluZCBhIG1hY3JvIGRlZmluaXRpb246CisiIFJlY29nbml6ZSBwbGFpbiBUZVggXGRlZiBhcyB3ZWxsIGFzIExhVGVYIFxuZXdjb21tYW5kIGFuZCBccmVuZXdjb21tYW5kIC4KKyIgSSBtYXkgYXMgd2VsbCBhZGQgdGhlIEFNUy1MYVRlWCBEZWNsYXJlTWF0aE9wZXJhdG9yIGFzIHdlbGwuCitsZXQgJmw6ZGVmaW5lPSdcXFwoW2VneF1cfGNoYXJcfG1hdGhjaGFyXHxjb3VudFx8ZGltZW5cfG11c2tpcFx8c2tpcFx8dG9rc1wpXD0nCisJXCAuCSdkZWZcfFxcZm9udFx8XFxcKGZ1dHVyZVwpXD1sZXQnCisJXCAuICdcfFxcbmV3XChjb3VudFx8ZGltZW5cfHNraXBcfG11c2tpcFx8Ym94XHx0b2tzXHxyZWFkXHx3cml0ZScKKwlcIC4JJ1x8ZmFtXHxpbnNlcnRcKScKKwlcIC4gJ1x8XFxcKHJlXClcPW5ld1woYm9vbGVhblx8Y29tbWFuZFx8Y291bnRlclx8ZW52aXJvbm1lbnRcfGZvbnQnCisJXCAuICdcfGlmXHxsZW5ndGhcfHNhdmVib3hcfHRoZW9yZW1cKHN0eWxlXClcPVwpXHMqXCpcPVxzKntcPScKKwlcIC4gJ1x8RGVjbGFyZU1hdGhPcGVyYXRvclxzKntcPVxzKicKKworIiBUZWxsIFZpbSBob3cgdG8gcmVjb2duaXplIExhVGVYIFxpbmNsdWRle2Zvb30gYW5kIHBsYWluIFxpbnB1dCBiYXIgOgorc2V0bG9jYWwgaW5jbHVkZT1cXFxcaW5wdXRcXFxcfFxcXFxpbmNsdWRleworc2V0bG9jYWwgc3VmZml4ZXNhZGQ9LnRleAorIiBPbiBzb21lIGZpbGUgc3lzdGVtcywgInsiIGFuZCAifSIgYXJlIGlubHVkZWQgaW4gJ2lzZm5hbWUnLiAgSW4gY2FzZSB0aGUKKyIgVGVYIGZpbGUgaGFzIFxpbmNsdWRle2ZuYW1lfSAoTGFUZVggb25seSksIHN0cmlwIGV2ZXJ5dGhpbmcgZXhjZXB0ICJmbmFtZSIuCitsZXQgJmw6aW5jbHVkZWV4cHIgPSAic3Vic3RpdHV0ZSh2OmZuYW1lLCAnXi5cXHstfXtcXHx9LionLCAnJywgJ2cnKSIKKyIgZnVuISBUZXhJbmNsdWRlRXhwcigpCisiICAgbGV0IGZuYW1lID0gc3Vic3RpdHV0ZSh2OmZuYW1lLCAnfS4qJywgJycsICcnKQorIiAgIHJldHVybiBmbmFtZQorIiBlbmRmdW4KKworIiBUaGUgZm9sbG93aW5nIGxpbmVzIGVuYWJsZSB0aGUgbWFjcm9zL21hdGNoaXQudmltIHBsdWdpbiBmb3IKKyIgZXh0ZW5kZWQgbWF0Y2hpbmcgd2l0aCB0aGUgJSBrZXkuCisiIFRPRE86ICBDdXN0b21pemUgdGhpcyBiYXNlZCBvbiBiOnRleF9mbGF2b3IgLgoraWYgZXhpc3RzKCJsb2FkZWRfbWF0Y2hpdCIpCisgIGxldCBiOm1hdGNoX2lnbm9yZWNhc2UgPSAwCisgICAgXCB8IGxldCBiOm1hdGNoX3NraXAgPSAncjpcXFxAPCFcJShcXFxcXCkqJScKKyAgICBcIHwgbGV0IGI6bWF0Y2hfd29yZHMgPSAnKDopLFxbOl0sezp9LFxcKDpcXCksXFxcWzpcXF0sJyAuCisgICAgXCAnXFxiZWdpblxzKlwoe1xhXCtcKlw9fVwpOlxcZW5kXHMqXDEnCitlbmRpZiAiIGV4aXN0cygibG9hZGVkX21hdGNoaXQiKQorCitsZXQgJmNwbyA9IHM6c2F2ZV9jcG8KKworIiB2aW06c3RzPTI6c3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vdmIudmltIGIvcnVudGltZS9mdHBsdWdpbi92Yi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0YzIzYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vdmIudmltCkBAIC0wLDAgKzEsNDcgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglWaXN1YWxCYXNpYyAoZnQ9dmIpCisiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgorIiBMYXN0IENoYW5nZToJVGh1LCAyMiBOb3YgMjAwMSAxMjo1NjoxNCBXLiBFdXJvcGUgU3RhbmRhcmQgVGltZQorCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikgfCBmaW5pc2ggfCBlbmRpZgorbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCitzZXRsb2NhbCBub2NpbmRlbnQKK3NldGxvY2FsIGF1dG9pbmRlbnQKK3NldGxvY2FsIGNvbT1zcjonXCAtLG1iOidcIFwgLGVsOidcIFwgLDonCisKKyIgd2UgbmVlZCB0aGlzIHdyYXBwZXIsIGFzIGNhbGwgZG9lc24ndCBhbGxvdyBhIGNvdW50CitmdW4hIDxTSUQ+VmJTZWFyY2gocGF0dGVybiwgZmxhZ3MpCisgICAgbGV0IGNudCA9IHY6Y291bnQxCisgICAgd2hpbGUgY250ID4gMAorCWNhbGwgc2VhcmNoKGE6cGF0dGVybiwgYTpmbGFncykKKwlsZXQgY250ID0gY250IC0gMQorICAgIGVuZHdoaWxlCitlbmRmdW4KKworbGV0IHM6Y3BvX3NhdmUgPSAmY3BvCitzZXQgY3BvJnZpbQorCisiIE5PVEUgdGhlIGRvdWJsZSBlc2NhcGluZyBcXHwKK25ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFtbIDpjYWxsIDxTSUQ+VmJTZWFyY2goJ15ccypcKFwocHJpdmF0ZVx8cHVibGljXClcc1wrXClcPVwoZnVuY3Rpb25cXHxzdWJcKScsICdiVycpPGNyPgorbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gXV0gOmNhbGwgPFNJRD5WYlNlYXJjaCgnXlxzKlwoXChwcml2YXRlXHxwdWJsaWNcKVxzXCtcKVw9XChmdW5jdGlvblxcfHN1YlwpJywgJ1cnKTxjcj4KK25ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFtdIDpjYWxsIDxTSUQ+VmJTZWFyY2goJ15ccypcPGVuZFw+XHNcK1woZnVuY3Rpb25cXHxzdWJcKScsICdiVycpPGNyPgorbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gXVsgOmNhbGwgPFNJRD5WYlNlYXJjaCgnXlxzKlw8ZW5kXD5cc1wrXChmdW5jdGlvblxcfHN1YlwpJywgJ1cnKTxjcj4KKworIiBtYXRjaGl0IHN1cHBvcnQKK2lmIGV4aXN0cygibG9hZGVkX21hdGNoaXQiKQorICAgIGxldCBiOm1hdGNoX2lnbm9yZWNhc2U9MQorICAgIGxldCBiOm1hdGNoX3dvcmRzPQorICAgIFwgJ1wlKF5ccypcKVxAPD1cPGlmXD4uKlw8dGhlblw+XHMqJDpcJSheXHMqXClcQDw9XDxlbHNlXD46XCUoXlxzKlwpXEA8PVw8ZWxzZWlmXD46XCUoXlxzKlwpXEA8PVw8ZW5kXD5cc1wrXDxpZlw+LCcgLgorICAgIFwgJ1wlKF5ccypcKVxAPD1cPGZvclw+OlwlKF5ccypcKVxAPD1cPG5leHRcPiwnIC4KKyAgICBcICdcJSheXHMqXClcQDw9XDx3aGlsZVw+OlwlKF5ccypcKVxAPD1cPHdlbmRcPiwnIC4KKyAgICBcICdcJSheXHMqXClcQDw9XDxkb1w+OlwlKF5ccypcKVxAPD1cPGxvb3BcPlxzXCtcPHdoaWxlXD4sJyAuCisgICAgXCAnXCUoXlxzKlwpXEA8PVw8c2VsZWN0XD5cc1wrXDxjYXNlXD46XCUoXlxzKlwpXEA8PVw8Y2FzZVw+OlwlKF5ccypcKVxAPD1cPGVuZFw+XHNcK1w8c2VsZWN0XD4sJyAuCisgICAgXCAnXCUoXlxzKlwpXEA8PVw8ZW51bVw+OlwlKF5ccypcKVxAPD1cPGVuZFw+XHNcPGVudW1cPiwnIC4KKyAgICBcICdcJSheXHMqXClcQDw9XDx3aXRoXD46XCUoXlxzKlwpXEA8PVw8ZW5kXD5cc1w8d2l0aFw+LCcgLgorICAgIFwgJ1wlKF5ccypcKVxAPD1cJShcPFwlKHByaXZhdGVcfHB1YmxpY1wpXD5cc1wrXClcPVw8ZnVuY3Rpb25cPlxzXCtcKFteIFx0KF1cK1wpOlwlKF5ccypcKVxAPD1cPFwxXD5ccyo9OlwlKF5ccypcKVxAPD1cPGVuZFw+XHNcK1w8ZnVuY3Rpb25cPiwnIC4KKyAgICBcICdcJSheXHMqXClcQDw9XCUoXDxcJShwcml2YXRlXHxwdWJsaWNcKVw+XHNcK1wpXD1cPHN1Ylw+XHNcKzpcJSheXHMqXClcQDw9XDxlbmRcPlxzXCtcPHN1Ylw+JworZW5kaWYKKworbGV0ICZjcG8gPSBzOmNwb19zYXZlCit1bmxldCBzOmNwb19zYXZlCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL3Zlcmlsb2cudmltIGIvcnVudGltZS9mdHBsdWdpbi92ZXJpbG9nLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThjZmJlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi92ZXJpbG9nLnZpbQpAQCAtMCwwICsxLDQ1IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJVmVyaWxvZyBIREwKKyIgTWFpbnRhaW5lcjoJQ2hpaC1Uc3VuIEh1YW5nIDxjdGh1YW5nQGxhcmMuZWUubnRodS5lZHUudHc+CisiIExhc3QgQ2hhbmdlOglXZWQgT2N0IDMxIDE2OjE2OjE5IENTVCAyMDAxCisiIFVSTDoJCWh0dHA6Ly9sYXJjLmVlLm50aHUuZWR1LnR3L35jdGh1YW5nL3ZpbS9mdHBsdWdpbi92ZXJpbG9nLnZpbQorCisiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCisKKyIgRG9uJ3QgbG9hZCBhbm90aGVyIHBsdWdpbiBmb3IgdGhpcyBidWZmZXIKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworIiBTZXQgJ2Zvcm1hdG9wdGlvbnMnIHRvIGJyZWFrIGNvbW1lbnQgbGluZXMgYnV0IG5vdCBvdGhlciBsaW5lcywKKyIgYW5kIGluc2VydCB0aGUgY29tbWVudCBsZWFkZXIgd2hlbiBoaXR0aW5nIDxDUj4gb3IgdXNpbmcgIm8iLgorc2V0bG9jYWwgZm8tPXQgZm8rPWNyb3FsbTEKKworIiBTZXQgJ2NvbW1lbnRzJyB0byBmb3JtYXQgZGFzaGVkIGxpc3RzIGluIGNvbW1lbnRzLgorc2V0bG9jYWwgY29tbWVudHM9c086KlwgLSxtTzoqXCBcICxleE86Ki8sczE6LyosbWI6KixleDoqLyw6Ly8KKworIiBGb3JtYXQgY29tbWVudHMgdG8gYmUgdXAgdG8gNzggY2hhcmFjdGVycyBsb25nCitzZXRsb2NhbCB0dz03NQorCitzZXQgY3BvLT1DCisKKyIgV2luMzIgY2FuIGZpbHRlciBmaWxlcyBpbiB0aGUgYnJvd3NlIGRpYWxvZworaWYgaGFzKCJndWlfd2luMzIiKSAmJiAhZXhpc3RzKCJiOmJyb3dzZWZpbHRlciIpCisgIGxldCBiOmJyb3dzZWZpbHRlciA9ICJWZXJpbG9nIFNvdXJjZSBGaWxlcyAoKi52KVx0Ki52XG4iIC4KKwlcICJBbGwgRmlsZXMgKCouKilcdCouKlxuIgorZW5kaWYKKworIiBMZXQgdGhlIG1hdGNoaXQgcGx1Z2luIGtub3cgd2hhdCBpdGVtcyBjYW4gYmUgbWF0Y2hlZC4KK2lmIGV4aXN0cygibG9hZGVkX21hdGNoaXQiKQorICBsZXQgYjptYXRjaF9pZ25vcmVjYXNlPTAKKyAgbGV0IGI6bWF0Y2hfd29yZHM9CisgICAgXCAnXDxiZWdpblw+Olw8ZW5kXD4sJyAuCisgICAgXCAnXDxjYXNlXD5cfFw8Y2FzZXhcPlx8XDxjYXNlelw+Olw8ZW5kY2FzZVw+LCcgLgorICAgIFwgJ1w8bW9kdWxlXD46XDxlbmRtb2R1bGVcPiwnIC4KKyAgICBcICdcPGlmXD46XDxlbHNlXD4sJyAuCisgICAgXCAnXDxmdW5jdGlvblw+Olw8ZW5kZnVuY3Rpb25cPiwnIC4KKyAgICBcICdgaWZkZWZcPjpgZWxzZVw+OmBlbmRpZlw+LCcgLgorICAgIFwgJ1w8dGFza1w+Olw8ZW5kdGFza1w+LCcgLgorICAgIFwgJ1w8c3BlY2lmeVw+Olw8ZW5kc3BlY2lmeVw+JworZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vdmltLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vdmltLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWU3NGYzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi92aW0udmltCkBAIC0wLDAgKzEsNjEgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbgorIiBMYW5ndWFnZToJVmltCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDA0IEZlYiAyMAorCisiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKQorICBmaW5pc2gKK2VuZGlmCisKKyIgRG9uJ3QgbG9hZCBhbm90aGVyIHBsdWdpbiBmb3IgdGhpcyBidWZmZXIKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworbGV0IGNwb19zYXZlID0gJmNwbworc2V0IGNwby09QworCitsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInNldGwgZm88IGNvbTwgdHc8IGNvbW1lbnRzdHJpbmc8IgorCVwgLiAifCB1bmxldCEgYjptYXRjaF9pZ25vcmVjYXNlIGI6bWF0Y2hfd29yZHMgYjptYXRjaF9za2lwIgorCisiIFNldCAnZm9ybWF0b3B0aW9ucycgdG8gYnJlYWsgY29tbWVudCBsaW5lcyBidXQgbm90IG90aGVyIGxpbmVzLAorIiBhbmQgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciB3aGVuIGhpdHRpbmcgPENSPiBvciB1c2luZyAibyIuCitzZXRsb2NhbCBmby09dCBmbys9Y3JvcWwKKworIiBTZXQgJ2NvbW1lbnRzJyB0byBmb3JtYXQgZGFzaGVkIGxpc3RzIGluIGNvbW1lbnRzCitzZXRsb2NhbCBjb209c086XCJcIC0sbU86XCJcIFwgLGVPOlwiXCIsOlwiCisKKyIgRm9ybWF0IGNvbW1lbnRzIHRvIGJlIHVwIHRvIDc4IGNoYXJhY3RlcnMgbG9uZworaWYgJnR3ID09IDAKKyAgc2V0bG9jYWwgdHc9NzgKK2VuZGlmCisKKyIgQ29tbWVudHMgc3RhcnQgd2l0aCBhIGRvdWJsZSBxdW90ZQorc2V0bG9jYWwgY29tbWVudHN0cmluZz1cIiVzCisKKyIgTW92ZSBhcm91bmQgZnVuY3Rpb25zLgorbm9yZW1hcCA8c2lsZW50PjxidWZmZXI+IFtbIDpjYWxsIHNlYXJjaCgnXlxzKmZ1XCVbbmN0aW9uXVw+JywgImJXIik8Q1I+Citub3JlbWFwIDxzaWxlbnQ+PGJ1ZmZlcj4gXV0gOmNhbGwgc2VhcmNoKCdeXHMqZnVcJVtuY3Rpb25dXD4nLCAiVyIpPENSPgorbm9yZW1hcCA8c2lsZW50PjxidWZmZXI+IFtdIDpjYWxsIHNlYXJjaCgnXlxzKmVuZGYqXCVbdW5jdGlvbl1cPicsICJiVyIpPENSPgorbm9yZW1hcCA8c2lsZW50PjxidWZmZXI+IF1bIDpjYWxsIHNlYXJjaCgnXlxzKmVuZGYqXCVbdW5jdGlvbl1cPicsICJXIik8Q1I+CisKKyIgTW92ZSBhcm91bmQgY29tbWVudHMKK25vcmVtYXAgPHNpbGVudD48YnVmZmVyPiBdIiA6Y2FsbCBzZWFyY2goJ15cKFxzKiIuKlxuXClcQDwhXChccyoiXCknLCAiVyIpPENSPgorbm9yZW1hcCA8c2lsZW50PjxidWZmZXI+IFsiIDpjYWxsIHNlYXJjaCgnXCUoXlxzKiIuKlxuXClcJSheXHMqIlwpXEAhJywgImJXIik8Q1I+CisKKyIgTGV0IHRoZSBtYXRjaGl0IHBsdWdpbiBrbm93IHdoYXQgaXRlbXMgY2FuIGJlIG1hdGNoZWQuCitpZiBleGlzdHMoImxvYWRlZF9tYXRjaGl0IikKKyAgbGV0IGI6bWF0Y2hfaWdub3JlY2FzZSA9IDAKKyAgbGV0IGI6bWF0Y2hfd29yZHMgPQorCVwgJ1w8ZnVcJVtuY3Rpb25dXD46XDxyZXR1XCVbcm5dXD46XDxlbmRmXCVbdW5jdGlvbl1cPiwnIC4KKwlcICdcPHdoXCVbaWxlXVw+Olw8YnJlYVwlW2tdXD46XDxjb25cJVt0aW51ZV1cPjpcPGVuZHdcJVtoaWxlXVw+LCcgLgorCVwgJ1w8aWZcPjpcPGVsXCVbc2VpZl1cPjpcPGVuXCVbZGlmXVw+LCcgLgorCVwgJ1w8dHJ5XD46XDxjYXRcJVtjaF1cPjpcPGZpbmFcJVtsbHldXD46XDxlbmR0XCVbcnldXD4sJyAuCisJXCAnXDxhdWdcJVtyb3VwXVxzXCtcJShFTkRcPlwpXEAhXFM6XDxhdWdcJVtyb3VwXVxzXCtFTkRcPiwnIC4KKwlcICcoOiknCisgICIgSWdub3JlICI6c3ludGF4IHJlZ2lvbiIgY29tbWFuZHMsIHRoZSAnZW5kJyBhcmd1bWVudCBjbG9iYmVycyBpZi1lbmRpZgorICBsZXQgYjptYXRjaF9za2lwID0gJ2dldGxpbmUoIi4iKSA9fiAiXlxccypzeVxcJVtudGF4XVxcc1xcK3JlZ2lvbiIgfHwKKwlcIHN5bklEYXR0cihzeW5JRChsaW5lKCIuIiksY29sKCIuIiksMSksIm5hbWUiKSA9fj8gImNvbW1lbnRcXHxzdHJpbmciJworZW5kaWYKKworbGV0ICZjcG8gPSBjcG9fc2F2ZQorc2V0bG9jYWwgY3BvKz1NCQkiIG1ha2VzIFwlKCBtYXRjaCBcKQpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi94aHRtbC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL3hodG1sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDExNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi94aHRtbC52aW0KQEAgLTAsMCArMSw2NiBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6CXhodG1sCisiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlZDogMjAwNCBNYXkgMTEKKyIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCisKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCisKKyIgTWFrZSBzdXJlIHRoZSBjb250aW51YXRpb24gbGluZXMgYmVsb3cgZG8gbm90IGNhdXNlIHByb2JsZW1zIGluCisiIGNvbXBhdGliaWxpdHkgbW9kZS4KK2xldCBzOnNhdmVfY3BvID0gJmNwbworc2V0IGNwby09QworCisiIERlZmluZSBzb21lIGRlZmF1bHRzIGluIGNhc2UgdGhlIGluY2x1ZGVkIGZ0cGx1Z2lucyBkb24ndCBzZXQgdGhlbS4KK2xldCBzOnVuZG9fZnRwbHVnaW4gPSAiIgorbGV0IHM6YnJvd3NlZmlsdGVyID0gIkhUTUwgRmlsZXMgKCouaHRtbCwgKi5odG0pXHQqLmh0bSpcbiIgLgorCSAgICBcCSAgICAgIlhNTCBGaWxlcyAoKi54bWwpXHQqLnhtbFxuIiAuCisJICAgIFwJICAgICAiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKK2xldCBzOm1hdGNoX3dvcmRzID0gIiIKKworcnVudGltZSEgZnRwbHVnaW4veG1sLnZpbSBmdHBsdWdpbi94bWxfKi52aW0gZnRwbHVnaW4veG1sLyoudmltCit1bmxldCBiOmRpZF9mdHBsdWdpbgorCisiIE92ZXJyaWRlIG91ciBkZWZhdWx0cyBpZiB0aGVzZSB3ZXJlIHNldCBieSBhbiBpbmNsdWRlZCBmdHBsdWdpbi4KK2lmIGV4aXN0cygiYjp1bmRvX2Z0cGx1Z2luIikKKyAgICBsZXQgczp1bmRvX2Z0cGx1Z2luID0gYjp1bmRvX2Z0cGx1Z2luCisgICAgdW5sZXQgYjp1bmRvX2Z0cGx1Z2luCitlbmRpZgoraWYgZXhpc3RzKCJiOmJyb3dzZWZpbHRlciIpCisgICAgbGV0IHM6YnJvd3NlZmlsdGVyID0gYjpicm93c2VmaWx0ZXIKKyAgICB1bmxldCBiOmJyb3dzZWZpbHRlcgorZW5kaWYKK2lmIGV4aXN0cygiYjptYXRjaF93b3JkcyIpCisgICAgbGV0IHM6bWF0Y2hfd29yZHMgPSBiOm1hdGNoX3dvcmRzCisgICAgdW5sZXQgYjptYXRjaF93b3JkcworZW5kaWYKKworcnVudGltZSEgZnRwbHVnaW4vaHRtbC52aW0gZnRwbHVnaW4vaHRtbF8qLnZpbSBmdHBsdWdpbi9odG1sLyoudmltCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgQ29tYmluZSB0aGUgbmV3IHNldCBvZiB2YWx1ZXMgd2l0aCB0aG9zZSBwcmV2aW91c2x5IGluY2x1ZGVkLgoraWYgZXhpc3RzKCJiOnVuZG9fZnRwbHVnaW4iKQorICAgIGxldCBzOnVuZG9fZnRwbHVnaW4gPSBiOnVuZG9fZnRwbHVnaW4gLiAiIHwgIiAuIHM6dW5kb19mdHBsdWdpbgorZW5kaWYKK2lmIGV4aXN0cygiYjpicm93c2VmaWx0ZXIiKQorICAgIGxldCBzOmJyb3dzZWZpbHRlciA9IGI6YnJvd3NlZmlsdGVyIC4gczpicm93c2VmaWx0ZXIKK2VuZGlmCitpZiBleGlzdHMoImI6bWF0Y2hfd29yZHMiKQorICAgIGxldCBzOm1hdGNoX3dvcmRzID0gYjptYXRjaF93b3JkcyAuICIsIiAuIHM6bWF0Y2hfd29yZHMKK2VuZGlmCisKKyIgTG9hZCB0aGUgY29tYmluZWQgbGlzdCBvZiBtYXRjaF93b3JkcyBmb3IgbWF0Y2hpdC52aW0KK2lmIGV4aXN0cygibG9hZGVkX21hdGNoaXQiKQorICAgIGxldCBiOm1hdGNoX3dvcmRzID0gczptYXRjaF93b3JkcworZW5kaWYKKworIiBDaGFuZ2UgdGhlIDpicm93c2UgZSBmaWx0ZXIgdG8gcHJpbWFyaWx5IHNob3cgdGNzaC1yZWxhdGVkIGZpbGVzLgoraWYgaGFzKCJndWlfd2luMzIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9czpicm93c2VmaWx0ZXIKK2VuZGlmCisKKyIgVW5kbyB0aGUgc3R1ZmYgd2UgY2hhbmdlZC4KK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAidW5sZXQhIGI6YnJvd3NlZmlsdGVyIGI6bWF0Y2hfd29yZHMgfCAiIC4gczp1bmRvX2Z0cGx1Z2luCisKKyIgUmVzdG9yZSB0aGUgc2F2ZWQgY29tcGF0aWJpbGl0eSBvcHRpb25zLgorbGV0ICZjcG8gPSBzOnNhdmVfY3BvCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL3htbC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL3htbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkZThlNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4veG1sLnZpbQpAQCAtMCwwICsxLDQ3IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJeG1sCisiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlZDogMjAwMyBTZXAgMjkKKyIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCisKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgTWFrZSBzdXJlIHRoZSBjb250aW51YXRpb24gbGluZXMgYmVsb3cgZG8gbm90IGNhdXNlIHByb2JsZW1zIGluCisiIGNvbXBhdGliaWxpdHkgbW9kZS4KK2xldCBzOnNhdmVfY3BvID0gJmNwbworc2V0IGNwby09QworCitzZXRsb2NhbCBjb21tZW50c3RyaW5nPTwhLS0lcy0tPgorCisiIFhNTDogIHRoYW5rcyB0byBKb2hhbm5lcyBaZWxsbmVyIGFuZCBBa2JhciBJYnJhaGltCisiIC0gY2FzZSBzZW5zaXRpdmUKKyIgLSBkb24ndCBtYXRjaCBlbXB0eSB0YWdzIDxmcmVkLz4KKyIgLSBtYXRjaCA8IS0tLCAtLT4gc3R5bGUgY29tbWVudHMgKGJ1dCBub3QgLS0sIC0tKQorIiAtIG1hdGNoIDwhLCA+IGlubGluZWQgZHRkJ3MuIFRoaXMgaXMgbm90IHBlcmZlY3QsIGFzIGl0CisiICAgZ2V0cyBjb25mdXNlZCBmb3IgZXhhbXBsZSBieQorIiAgICAgICA8IUVOVElUWSBndCAiPiI+CitpZiBleGlzdHMoImxvYWRlZF9tYXRjaGl0IikKKyAgICBsZXQgYjptYXRjaF9pZ25vcmVjYXNlPTAKKyAgICBsZXQgYjptYXRjaF93b3JkcyA9CisgICAgIFwgICc8Oj4sJyAuCisgICAgIFwgICc8XEA8PSFcW0NEQVRBXFs6XV0+LCcuCisgICAgIFwgICc8XEA8PSEtLTotLT4sJy4KKyAgICAgXCAgJzxcQDw9P1xrXCs6Pz4sJy4KKyAgICAgXCAgJzxcQDw9XChbXiBcdD4vXVwrXClcJShcc1wrW14+XSpcJShbXi9dPlx8JFwpXHw+XHwkXCk6PFxAPD0vXDE+LCcuCisgICAgIFwgICc8XEA8PVwlKFteIFx0Pi9dXCtcKVwlKFxzXCtbXi8+XSpcfCRcKTovPicKK2VuZGlmCisKKyIgQ2hhbmdlIHRoZSA6YnJvd3NlIGUgZmlsdGVyIHRvIHByaW1hcmlseSBzaG93IHhtbC1yZWxhdGVkIGZpbGVzLgoraWYgaGFzKCJndWlfd2luMzIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9IlhNTCBGaWxlcyAoKi54bWwpXHQqLnhtbFxuIiAuCisJCVwJIkRURCBGaWxlcyAoKi5kdGQpXHQqLmR0ZFxuIiAuCisJCVwJIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCitlbmRpZgorCisiIFVuZG8gdGhlIHN0dWZmIHdlIGNoYW5nZWQuCitsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInNldGxvY2FsIGNtczwiIC4KKwkJXCAgICAgIiB8IHVubGV0ISBiOm1hdGNoX2lnbm9yZWNhc2UgYjptYXRjaF93b3JkcyBiOmJyb3dzZWZpbHRlciIKKworIiBSZXN0b3JlIHRoZSBzYXZlZCBjb21wYXRpYmlsaXR5IG9wdGlvbnMuCitsZXQgJmNwbyA9IHM6c2F2ZV9jcG8KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4veHMudmltIGIvcnVudGltZS9mdHBsdWdpbi94cy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzMzE4MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4veHMudmltCkBAIC0wLDAgKzEsMTIgQEAKKyIgVmltIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOglYUyAoUGVybCBleHRlbnNpb24gaW50ZXJmYWNlIGxhbmd1YWdlKQorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMSBTZXAgMTgKKworIiBPbmx5IGRvIHRoaXMgd2hlbiBub3QgZG9uZSB5ZXQgZm9yIHRoaXMgYnVmZmVyCitpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKyAgZmluaXNoCitlbmRpZgorCisiIEp1c3QgdXNlIHRoZSBDIHBsdWdpbiBmb3Igbm93LgorcnVudGltZSEgZnRwbHVnaW4vYy52aW0gZnRwbHVnaW4vY18qLnZpbSBmdHBsdWdpbi9jLyoudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL3hzZC52aW0gYi9ydW50aW1lL2Z0cGx1Z2luL3hzZC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNkN2FkYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4veHNkLnZpbQpAQCAtMCwwICsxLDM4IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJeHNkCisiIE1haW50YWluZXI6CURhbiBTaGFycCA8ZHdzaGFycCBhdCBob3RtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlZDogMjAwMyBTZXAgMjkKKyIgVVJMOgkJaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2Z0cGx1Z2luCisKK2lmIGV4aXN0cygiYjpkaWRfZnRwbHVnaW4iKSB8IGZpbmlzaCB8IGVuZGlmCisKKyIgTWFrZSBzdXJlIHRoZSBjb250aW51YXRpb24gbGluZXMgYmVsb3cgZG8gbm90IGNhdXNlIHByb2JsZW1zIGluCisiIGNvbXBhdGliaWxpdHkgbW9kZS4KK2xldCBzOnNhdmVfY3BvID0gJmNwbworc2V0IGNwby09QworCisiIERlZmluZSBzb21lIGRlZmF1bHRzIGluIGNhc2UgdGhlIGluY2x1ZGVkIGZ0cGx1Z2lucyBkb24ndCBzZXQgdGhlbS4KK2xldCBzOnVuZG9fZnRwbHVnaW4gPSAiIgorbGV0IHM6YnJvd3NlZmlsdGVyID0gIlhNTCBGaWxlcyAoKi54bWwpXHQqLnhtbFxuIiAuCisJICAgIFwJICAgICAiQWxsIEZpbGVzICgqLiopXHQqLipcbiIKKworcnVudGltZSEgZnRwbHVnaW4veG1sLnZpbSBmdHBsdWdpbi94bWxfKi52aW0gZnRwbHVnaW4veG1sLyoudmltCitsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCisKKyIgT3ZlcnJpZGUgb3VyIGRlZmF1bHRzIGlmIHRoZXNlIHdlcmUgc2V0IGJ5IGFuIGluY2x1ZGVkIGZ0cGx1Z2luLgoraWYgZXhpc3RzKCJiOnVuZG9fZnRwbHVnaW4iKQorICAgIGxldCBzOnVuZG9fZnRwbHVnaW4gPSBiOnVuZG9fZnRwbHVnaW4KK2VuZGlmCitpZiBleGlzdHMoImI6YnJvd3NlZmlsdGVyIikKKyAgICBsZXQgczpicm93c2VmaWx0ZXIgPSBiOmJyb3dzZWZpbHRlcgorZW5kaWYKKworIiBDaGFuZ2UgdGhlIDpicm93c2UgZSBmaWx0ZXIgdG8gcHJpbWFyaWx5IHNob3cgeHNkLXJlbGF0ZWQgZmlsZXMuCitpZiBoYXMoImd1aV93aW4zMiIpCisgICAgbGV0ICBiOmJyb3dzZWZpbHRlcj0iWFNEIEZpbGVzICgqLnhzZClcdCoueHNkXG4iIC4gczpicm93c2VmaWx0ZXIKK2VuZGlmCisKK2xldCBiOnVuZG9fZnRwbHVnaW4gPSAidW5sZXQhIGI6YnJvd3NlZmlsdGVyIHwgIiAuIHM6dW5kb19mdHBsdWdpbgorCisiIFJlc3RvcmUgdGhlIHNhdmVkIGNvbXBhdGliaWxpdHkgb3B0aW9ucy4KK2xldCAmY3BvID0gczpzYXZlX2NwbwpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi94c2x0LnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4veHNsdC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiODBhNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4veHNsdC52aW0KQEAgLTAsMCArMSwxNiBAQAorIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKKyIgTGFuZ3VhZ2U6CXhzbHQKKyIgTWFpbnRhaW5lcjoJRGFuIFNoYXJwIDxkd3NoYXJwIGF0IGhvdG1haWwgZG90IGNvbT4KKyIgTGFzdCBDaGFuZ2VkOiAyMDAyIE5vdiAyNgorIiBVUkw6CQlodHRwOi8vbXl3ZWJwYWdlLm5ldHNjYXBlLmNvbS9zaGFycHBlb3BsZS92aW0vZnRwbHVnaW4KKworaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpIHwgZmluaXNoIHwgZW5kaWYKKworcnVudGltZSEgZnRwbHVnaW4veG1sLnZpbSBmdHBsdWdpbi94bWxfKi52aW0gZnRwbHVnaW4veG1sLyoudmltCisKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworIiBDaGFuZ2UgdGhlIDpicm93c2UgZSBmaWx0ZXIgdG8gcHJpbWFyaWx5IHNob3cgeHNkLXJlbGF0ZWQgZmlsZXMuCitpZiBoYXMoImd1aV93aW4zMiIpICYmIGV4aXN0cygiYjpicm93c2VmaWx0ZXIiKQorICAgIGxldCAgYjpicm93c2VmaWx0ZXI9IlhTTFQgRmlsZXMgKCoueHNsLCoueHNsdClcdCoueHNsLCoueHNsdFxuIiAuIGI6YnJvd3NlZmlsdGVyCitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdvZi52aW0gYi9ydW50aW1lL2Z0cGx1Z29mLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDk5Y2UwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdvZi52aW0KQEAgLTAsMCArMSwxMSBAQAorIiBWaW0gc3VwcG9ydCBmaWxlIHRvIHN3aXRjaCBvZmYgbG9hZGluZyBwbHVnaW5zIGZvciBmaWxlIHR5cGVzCisiCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAyIEFwciAwNAorCitpZiBleGlzdHMoImRpZF9sb2FkX2Z0cGx1Z2luIikKKyAgdW5sZXQgZGlkX2xvYWRfZnRwbHVnaW4KK2VuZGlmCisKKyIgUmVtb3ZlIGFsbCBhdXRvY29tbWFuZHMgaW4gdGhlIGZpbGV0eXBlcGx1Z2luIGdyb3VwCitzaWxlbnQhIGF1ISBmaWxldHlwZXBsdWdpbiAqCmRpZmYgLS1naXQgYS9ydW50aW1lL2d2aW1yY19leGFtcGxlLnZpbSBiL3J1bnRpbWUvZ3ZpbXJjX2V4YW1wbGUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNTE5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2d2aW1yY19leGFtcGxlLnZpbQpAQCAtMCwwICsxLDU5IEBACisiIEFuIGV4YW1wbGUgZm9yIGEgZ3ZpbXJjIGZpbGUuCisiIFRoZSBjb21tYW5kcyBpbiB0aGlzIGFyZSBleGVjdXRlZCB3aGVuIHRoZSBHVUkgaXMgc3RhcnRlZC4KKyIKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBjaGFuZ2U6CTIwMDEgU2VwIDAyCisiCisiIFRvIHVzZSBpdCwgY29weSBpdCB0bworIiAgICAgZm9yIFVuaXggYW5kIE9TLzI6ICB+Ly5ndmltcmMKKyIJICAgICAgZm9yIEFtaWdhOiAgczouZ3ZpbXJjCisiICBmb3IgTVMtRE9TIGFuZCBXaW4zMjogICRWSU1cX2d2aW1yYworIgkgICAgZm9yIE9wZW5WTVM6ICBzeXMkbG9naW46Lmd2aW1yYworCisiIE1ha2UgZXh0ZXJuYWwgY29tbWFuZHMgd29yayB0aHJvdWdoIGEgcGlwZSBpbnN0ZWFkIG9mIGEgcHNldWRvLXR0eQorInNldCBub2d1aXB0eQorCisiIHNldCB0aGUgWDExIGZvbnQgdG8gdXNlCisiIHNldCBndWlmb250PS1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xCisKK3NldCBjaD0yCQkiIE1ha2UgY29tbWFuZCBsaW5lIHR3byBsaW5lcyBoaWdoCisKK3NldCBtb3VzZWhpZGUJCSIgSGlkZSB0aGUgbW91c2Ugd2hlbiB0eXBpbmcgdGV4dAorCisiIE1ha2Ugc2hpZnQtaW5zZXJ0IHdvcmsgbGlrZSBpbiBYdGVybQorbWFwIDxTLUluc2VydD4gPE1pZGRsZU1vdXNlPgorbWFwISA8Uy1JbnNlcnQ+IDxNaWRkbGVNb3VzZT4KKworIiBPbmx5IGRvIHRoaXMgZm9yIFZpbSB2ZXJzaW9uIDUuMCBhbmQgbGF0ZXIuCitpZiB2ZXJzaW9uID49IDUwMAorCisgICIgSSBsaWtlIGhpZ2hsaWdodGluZyBzdHJpbmdzIGluc2lkZSBDIGNvbW1lbnRzCisgIGxldCBjX2NvbW1lbnRfc3RyaW5ncz0xCisKKyAgIiBTd2l0Y2ggb24gc3ludGF4IGhpZ2hsaWdodGluZyBpZiBpdCB3YXNuJ3Qgb24geWV0LgorICBpZiAhZXhpc3RzKCJzeW50YXhfb24iKQorICAgIHN5bnRheCBvbgorICBlbmRpZgorCisgICIgU3dpdGNoIG9uIHNlYXJjaCBwYXR0ZXJuIGhpZ2hsaWdodGluZy4KKyAgc2V0IGhsc2VhcmNoCisKKyAgIiBGb3IgV2luMzIgdmVyc2lvbiwgaGF2ZSAiSyIgbG9va3VwIHRoZSBrZXl3b3JkIGluIGEgaGVscCBmaWxlCisgICJpZiBoYXMoIndpbjMyIikKKyAgIiAgbGV0IHdpbmhlbHBmaWxlPSd3aW5kb3dzLmhscCcKKyAgIiAgbWFwIEsgOmV4ZWN1dGUgIiFzdGFydCB3aW5obHAzMiAtayA8Y3dvcmQ+ICIgLiB3aW5oZWxwZmlsZSA8Q1I+CisgICJlbmRpZgorCisgICIgU2V0IG5pY2UgY29sb3JzCisgICIgYmFja2dyb3VuZCBmb3Igbm9ybWFsIHRleHQgaXMgbGlnaHQgZ3JleQorICAiIFRleHQgYmVsb3cgdGhlIGxhc3QgbGluZSBpcyBkYXJrZXIgZ3JleQorICAiIEN1cnNvciBpcyBncmVlbiwgQ3lhbiB3aGVuICI6bG1hcCIgbWFwcGluZ3MgYXJlIGFjdGl2ZQorICAiIENvbnN0YW50cyBhcmUgbm90IHVuZGVybGluZWQgYnV0IGhhdmUgYSBzbGlnaHRseSBsaWdodGVyIGJhY2tncm91bmQKKyAgaGlnaGxpZ2h0IE5vcm1hbCBndWliZz1ncmV5OTAKKyAgaGlnaGxpZ2h0IEN1cnNvciBndWliZz1HcmVlbiBndWlmZz1OT05FCisgIGhpZ2hsaWdodCBsQ3Vyc29yIGd1aWJnPUN5YW4gZ3VpZmc9Tk9ORQorICBoaWdobGlnaHQgTm9uVGV4dCBndWliZz1ncmV5ODAKKyAgaGlnaGxpZ2h0IENvbnN0YW50IGd1aT1OT05FIGd1aWJnPWdyZXk5NQorICBoaWdobGlnaHQgU3BlY2lhbCBndWk9Tk9ORSBndWliZz1ncmV5OTUKKworZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaWNvbnMuaW5mbyBiL3J1bnRpbWUvaWNvbnMuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjZiYzU2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pY29ucy5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50LnZpbSBiL3J1bnRpbWUvaW5kZW50LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGZiOWQwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQudmltCkBAIC0wLDAgKzEsMTMgQEAKKyIgVmltIHN1cHBvcnQgZmlsZSB0byBzd2l0Y2ggb24gbG9hZGluZyBpbmRlbnQgZmlsZXMgZm9yIGZpbGUgdHlwZXMKKyIKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgU2VwIDEyCisKK2lmIGV4aXN0cygiZGlkX2luZGVudF9vbiIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBkaWRfaW5kZW50X29uID0gMQorCithdWdyb3VwIGZpbGV0eXBlaW5kZW50CisgIGF1IEZpbGVUeXBlICogaWYgZXhwYW5kKCI8YW1hdGNoPiIpICE9ICIiIHwgaWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKSB8IHVubGV0IGI6ZGlkX2luZGVudCB8IGVuZGlmIHwgcnVudGltZSEgaW5kZW50LzxhbWF0Y2g+LnZpbSB8IGVuZGlmCithdWdyb3VwIEVORApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvUkVBRE1FLnR4dCBiL3J1bnRpbWUvaW5kZW50L1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQyNGI0ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L1JFQURNRS50eHQKQEAgLTAsMCArMSw0NSBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZmlsZXMgdG8gYXV0b21hdGljYWxseSBjb21wdXRlIHRoZSBpbmRlbnQgZm9yIGEKK3R5cGUgb2YgZmlsZS4KKworSWYgeW91IHdhbnQgdG8gYWRkIHlvdXIgb3duIGluZGVudCBmaWxlIGZvciB5b3VyIHBlcnNvbmFsIHVzZSwgcmVhZCB0aGUgZG9jcworYXQgIjpoZWxwIGluZGVudC1leHByZXNzaW9uIi4gIExvb2tpbmcgYXQgdGhlIGV4aXN0aW5nIGZpbGVzIHNob3VsZCBnaXZlIHlvdQoraW5zcGlyYXRpb24uCisKK0lmIHlvdSBtYWtlIGEgbmV3IGluZGVudCBmaWxlIHdoaWNoIHdvdWxkIGJlIHVzZWZ1bCBmb3Igb3RoZXJzLCBwbGVhc2Ugc2VuZCBpdAordG8gQnJhbUB2aW0ub3JnLiAgSW5jbHVkZSBpbnN0cnVjdGlvbnMgZm9yIGRldGVjdGluZyB0aGUgZmlsZSB0eXBlIGZvciB0aGlzCitsYW5ndWFnZSwgYnkgZmlsZSBuYW1lIGV4dGVuc2lvbiBvciBieSBjaGVja2luZyBhIGZldyBsaW5lcyBpbiB0aGUgZmlsZS4KK0FuZCBwbGVhc2Ugc3RpY2sgdG8gdGhlIHJ1bGVzIGJlbG93LgorCitJZiB5b3UgaGF2ZSByZW1hcmtzIGFib3V0IGFuIGV4aXN0aW5nIGZpbGUsIHNlbmQgdGhlbSB0byB0aGUgbWFpbnRhaW5lciBvZgordGhhdCBmaWxlLiAgT25seSB3aGVuIHlvdSBnZXQgbm8gcmVzcG9uc2Ugc2VuZCBhIG1lc3NhZ2UgdG8gQnJhbUB2aW0ub3JnLgorCitJZiB5b3UgYXJlIHRoZSBtYWludGFpbmVyIG9mIGFuIGluZGVudCBmaWxlIGFuZCBtYWtlIGltcHJvdmVtZW50cywgZS1tYWlsIHRoZQorbmV3IHZlcnNpb24gdG8gQnJhbUB2aW0ub3JnLgorCisKK1J1bGVzIGZvciBtYWtpbmcgYW4gaW5kZW50IGZpbGU6CisKK1lvdSBzaG91bGQgdXNlIHRoaXMgY2hlY2sgZm9yICJiOmRpZF9pbmRlbnQiOgorCisJIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQgeWV0LgorCWlmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKwkgIGZpbmlzaAorCWVuZGlmCisJbGV0IGI6ZGlkX2luZGVudCA9IDEKKworQWx3YXlzIHVzZSAiOnNldGxvY2FsIiB0byBzZXQgJ2luZGVudGV4cHInLiAgVGhpcyBhdm9pZHMgaXQgYmVpbmcgY2FycmllZCBvdmVyCit0byBvdGhlciBidWZmZXJzLgorCitUbyB0cmlnZ2VyIHRoZSBpbmRlbnRpbmcgYWZ0ZXIgdHlwaW5nIGEgd29yZCBsaWtlICJlbmRpZiIsIGFkZCB0aGUgd29yZCB0byB0aGUKKydjaW5rZXlzJyBvcHRpb24gd2l0aCAiKz0iLgorCitZb3Ugbm9ybWFsbHkgc2V0ICdpbmRlbnRleHByJyB0byBldmFsdWF0ZSBhIGZ1bmN0aW9uIGFuZCB0aGVuIGRlZmluZSB0aGF0CitmdW5jdGlvbi4gIFRoYXQgZnVuY3Rpb24gb25seSBuZWVkcyB0byBiZSBkZWZpbmVkIG9uY2UgZm9yIGFzIGxvbmcgYXMgVmltIGlzCitydW5uaW5nLiAgQWRkIGEgdGVzdCBpZiB0aGUgZnVuY3Rpb24gZXhpc3RzIGFuZCB1c2UgIjpmaW5pc2giLCBsaWtlIHRoaXM6CisJaWYgZXhpc3RzKCIqR2V0TXlJbmRlbnQiKQorCSAgZmluaXNoCisJZW5kaWYKKworVGhlIHVzZXIgbWF5IGhhdmUgc2V2ZXJhbCBvcHRpb25zIHNldCB1bmxpa2UgeW91LCB0cnkgdG8gd3JpdGUgdGhlIGZpbGUgc3VjaAordGhhdCBpdCB3b3JrcyB3aXRoIGFueSBvcHRpb24gc2V0dGluZ3MuICBBbHNvIGJlIGF3YXJlIG9mIGNlcnRhaW4gZmVhdHVyZXMgbm90CitiZWluZyBjb21waWxlZCBpbi4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2FhcC52aW0gYi9ydW50aW1lL2luZGVudC9hYXAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YWMwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9hYXAudmltCkBAIC0wLDAgKzEsNyBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CUFhcCByZWNpcGUKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgU2VwIDA4CisKKyIgV29ya3MgbW9zdGx5IGxpa2UgUHl0aG9uLgorcnVudGltZSEgaW5kZW50L3B5dGhvbi52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2FkYS52aW0gYi9ydW50aW1lL2luZGVudC9hZGEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTJlODAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9hZGEudmltCkBAIC0wLDAgKzEsMjY0IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJQWRhCisiIE1haW50YWluZXI6CU5laWwgQmlyZCA8bmVpbEBmbnh3ZWIuY29tPgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMjAKKyIgVmVyc2lvbjoJJElkJAorIiBMb29rIGZvciB0aGUgbGF0ZXN0IHZlcnNpb24gYXQgaHR0cDovL3ZpbS5zb3VyY2Vmb3JnZS5uZXQvCisiCisiIFRvRG86CisiICBWZXJpZnkgaGFuZGxpbmcgb2YgbXVsdGktbGluZSBleHBycy4gYW5kIHJlY292ZXJ5IHVwb24gdGhlIGZpbmFsICc7Jy4KKyIgIENvcnJlY3RseSBmaW5kIGNvbW1lbnRzIGdpdmVuICciJyBhbmQgIiIgPT0+ICIgc3ludGF4LgorIiAgQ29tYmluZSB0aGUgdHdvIGxhcmdlIGJsb2NrLWluZGVudCBmdW5jdGlvbnMgaW50byBvbmU/CisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICAgZmluaXNoCitlbmRpZgorbGV0IGI6ZGlkX2luZGVudCA9IDEKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRBZGFJbmRlbnQoKQorc2V0bG9jYWwgaW5kZW50a2V5cy09MHssMH0KK3NldGxvY2FsIGluZGVudGtleXMrPTA9fnRoZW4sMD1+ZW5kLDA9fmVsc2lmLDA9fndoZW4sMD1+ZXhjZXB0aW9uLDA9fmJlZ2luLDA9fmlzLDA9fnJlY29yZAorCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbnMgb25jZS4KK2lmIGV4aXN0cygiKkdldEFkYUluZGVudCIpCisgICBmaW5pc2gKK2VuZGlmCisKK2xldCBzOkFkYUJsb2NrU3RhcnQgPSAnXlxzKlwoaWZcPlx8d2hpbGVcPlx8ZWxzZVw+XHxlbHNpZlw+XHxsb29wXD5cfGZvclw+LipcPGxvb3BcPlx8ZGVjbGFyZVw+XHxiZWdpblw+XHx0eXBlXD4uKlw8aXNccyokXHxcKHR5cGVcPi4qXClcPVw8cmVjb3JkXD5cfHByb2NlZHVyZVw+XHxmdW5jdGlvblw+XHxhY2NlcHRcPlx8ZG9cPlx8dGFza1w+XHxwYWNrYWdlXD5cfHRoZW5cPlx8d2hlblw+XHxpc1w+XCknCitsZXQgczpBZGFDb21tZW50ID0gIlxcdl4oXCJbXlwiXSpcInwnLid8W15cIiddKXstfVxcenNcXHMqLS0uKiIKKworCisiIFRyeSB0byBmaW5kIGluZGVudCBvZiB0aGUgYmxvY2sgd2UncmUgaW4gKGFuZCBhYm91dCB0byBjb21wbGV0ZSkKKyIgcHJldl9pbmRlbnQgPSB0aGUgcHJldmlvdXMgbGluZSdzIGluZGVudAorIiBwcmV2X2xudW0gICA9IHByZXZpb3VzIGxpbmUgKHRvIHN0YXJ0IGxvb2tpbmcgb24pCisiIGJsb2Nrc3RhcnQgID0gZXhwci4gdGhhdCBpbmRpY2F0ZXMgYSBwb3NzaWJsZSBzdGFydCBvZiB0aGlzIGJsb2NrCisiIHN0b3BfYXQgICAgID0gaWYgbm9uLW51bGwsIGlmIGEgbWF0Y2hpbmcgbGluZSBpcyBmb3VuZCwgZ2l2ZXMgdXAhCisiIE5vIHJlY3Vyc2l2ZSBwcmV2aW91cyBibG9jayBhbmFseXNpczogc2ltcGx5IGxvb2sgZm9yIGEgdmFsaWQgbGluZQorIiB3aXRoIGEgbGVzc2VyIG9yIGVxdWFsIGluZGVudCB0aGFuIHdlIGN1cnJlbnRseSAob24gcHJldl9sbnVtKSBoYXZlLgorIiBUaGlzIHNob3VsZG4ndCB3b3JrIGFzIHdlbGwgYXMgaXQgYXBwZWFycyB0byB3aXRoIGxpbmVzIHRoYXQgYXJlIGN1cnJlbnRseQorIiBub3doZXJlIG5lYXIgdGhlIGNvcnJlY3QgaW5kZW50IChlLmcuLCBzdGFydCBvZiBsaW5lKSEKKyIgU2VlbXMgdG8gd29yayBPSyBhcyBpdCAnc3RhcnRzJyB3aXRoIHRoZSBpbmRlbnQgb2YgdGhlIC9wcmV2aW91cy8gbGluZS4KK2Z1bmN0aW9uIHM6TWFpbkJsb2NrSW5kZW50KCBwcmV2X2luZGVudCwgcHJldl9sbnVtLCBibG9ja3N0YXJ0LCBzdG9wX2F0ICkKKyAgIGxldCBsbnVtID0gYTpwcmV2X2xudW0KKyAgIGxldCBsaW5lID0gc3Vic3RpdHV0ZSggZ2V0bGluZShsbnVtKSwgczpBZGFDb21tZW50LCAnJywgJycgKQorICAgd2hpbGUgbG51bSA+IDEKKyAgICAgIGlmIGE6c3RvcF9hdCAhPSAnJyAgJiYgIGxpbmUgPX4gJ15ccyonIC4gYTpzdG9wX2F0ICAmJiAgaW5kZW50KGxudW0pIDwgYTpwcmV2X2luZGVudAorICAgICAgICAgcmV0dXJuIC0xCisgICAgICBlbHNlaWYgbGluZSA9fiAnXlxzKicgLiBhOmJsb2Nrc3RhcnQKKyAgICAgICAgIGxldCBpbmQgPSBpbmRlbnQobG51bSkKKyAgICAgICAgIGlmIGluZCA8IGE6cHJldl9pbmRlbnQKKyAgICAgICAgICAgIHJldHVybiBpbmQKKyAgICAgICAgIGVuZGlmCisgICAgICBlbmRpZgorCisgICAgICBsZXQgbG51bSA9IHByZXZub25ibGFuayhsbnVtIC0gMSkKKyAgICAgICIgR2V0IHByZXZpb3VzIG5vbi1ibGFuay9ub24tY29tbWVudC1vbmx5IGxpbmUKKyAgICAgIHdoaWxlIDEKKyAgICAgICAgIGxldCBsaW5lID0gc3Vic3RpdHV0ZSggZ2V0bGluZShsbnVtKSwgczpBZGFDb21tZW50LCAnJywgJycgKQorICAgICAgICAgaWYgbGluZSAhfiAnXlxzKiQnICYmIGxpbmUgIX4gJ15ccyojJworICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIGVuZGlmCisgICAgICAgICBsZXQgbG51bSA9IHByZXZub25ibGFuayhsbnVtIC0gMSkKKyAgICAgICAgIGlmIGxudW0gPD0gMAorICAgICAgICAgICAgcmV0dXJuIGE6cHJldl9pbmRlbnQKKyAgICAgICAgIGVuZGlmCisgICAgICBlbmR3aGlsZQorICAgZW5kd2hpbGUKKyAgICIgRmFsbGJhY2sgLSBqdXN0IG1vdmUgYmFjayBvbmUKKyAgIHJldHVybiBhOnByZXZfaW5kZW50IC0gJnN3CitlbmRmdW5jdGlvbgorCisiIFRyeSB0byBmaW5kIGluZGVudCBvZiB0aGUgYmxvY2sgd2UncmUgaW4gKGFuZCBhYm91dCB0byBjb21wbGV0ZSksCisiIGluY2x1ZGluZyBoYW5kbGluZyBvZiBuZXN0ZWQgYmxvY2tzLiBXb3JrcyBvbiB0aGUgJ2VuZCcgb2YgYSBibG9jay4KKyIgcHJldl9pbmRlbnQgPSB0aGUgcHJldmlvdXMgbGluZSdzIGluZGVudAorIiBwcmV2X2xudW0gICA9IHByZXZpb3VzIGxpbmUgKHRvIHN0YXJ0IGxvb2tpbmcgb24pCisiIGJsb2Nrc3RhcnQgID0gZXhwci4gdGhhdCBpbmRpY2F0ZXMgYSBwb3NzaWJsZSBzdGFydCBvZiB0aGlzIGJsb2NrCisiIGJsb2NrZW5kICAgID0gZXhwci4gdGhhdCBpbmRpY2F0ZXMgYSBwb3NzaWJsZSBlbmQgb2YgdGhpcyBibG9jaworZnVuY3Rpb24gczpFbmRCbG9ja0luZGVudCggcHJldl9pbmRlbnQsIHByZXZfbG51bSwgYmxvY2tzdGFydCwgYmxvY2tlbmQgKQorICAgbGV0IGxudW0gPSBhOnByZXZfbG51bQorICAgbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCisgICBsZXQgZW5kcyA9IDAKKyAgIHdoaWxlIGxudW0gPiAxCisgICAgICBpZiBnZXRsaW5lKGxudW0pID1+ICdeXHMqJyAuIGE6YmxvY2tzdGFydAorCSBsZXQgaW5kID0gaW5kZW50KGxudW0pCisgICAgICAgICBpZiBlbmRzIDw9IDAKKyAgICAgICAgICAgIGlmIGluZCA8IGE6cHJldl9pbmRlbnQKKwkgICAgICAgcmV0dXJuIGluZAorICAgICAgICAgICAgZW5kaWYKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxldCBlbmRzID0gZW5kcyAtIDEKKwkgZW5kaWYKKyAgICAgIGVsc2VpZiBnZXRsaW5lKGxudW0pID1+ICdeXHMqJyAuIGE6YmxvY2tlbmQKKyAgICAgICAgIGxldCBlbmRzID0gZW5kcyArIDEKKyAgICAgIGVuZGlmCisKKyAgICAgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKGxudW0gLSAxKQorICAgICAgIiBHZXQgcHJldmlvdXMgbm9uLWJsYW5rL25vbi1jb21tZW50LW9ubHkgbGluZQorICAgICAgd2hpbGUgMQorCSBsZXQgbGluZSA9IGdldGxpbmUobG51bSkKKwkgbGV0IGxpbmUgPSBzdWJzdGl0dXRlKCBsaW5lLCBzOkFkYUNvbW1lbnQsICcnLCAnJyApCisJIGlmIGxpbmUgIX4gJ15ccyokJworCSAgICBicmVhaworCSBlbmRpZgorCSBsZXQgbG51bSA9IHByZXZub25ibGFuayhsbnVtIC0gMSkKKwkgaWYgbG51bSA8PSAwCisJICAgIHJldHVybiBhOnByZXZfaW5kZW50CisJIGVuZGlmCisgICAgICBlbmR3aGlsZQorICAgZW5kd2hpbGUKKyAgICIgRmFsbGJhY2sgLSBqdXN0IG1vdmUgYmFjayBvbmUKKyAgIHJldHVybiBhOnByZXZfaW5kZW50IC0gJnN3CitlbmRmdW5jdGlvbgorCisiIEFzIHBlciBNYWluQmxvY2tJbmRlbnQsIGJ1dCByZXR1cm4gaW5kZW50IG9mIHByZXZpb3VzIHN0YXRlbWVudC1zdGFydAorIiAoYWZ0ZXIgd2UndmUgaW5kZW50ZWQgZHVlIHRvIG11bHRpLWxpbmUgc3RhdGVtZW50cykuCisiIFRoaXMgdGltZSwgd2Ugc3RhcnQgc2VhcmNoaW5nIG9uIHRoZSBsaW5lICpiZWZvcmUqIHRoZSBvbmUgZ2l2ZW4gKHdoaWNoIGlzCisiIHRoZSBlbmQgb2YgYSBzdGF0ZW1lbnQgLSB3ZSB3YW50IHRoZSBwcmV2aW91cyBiZWdpbm5pbmcpLgorZnVuY3Rpb24gczpTdGF0ZW1lbnRJbmRlbnQoIGN1cnJlbnRfaW5kZW50LCBwcmV2X2xudW0gKQorICAgbGV0IGxudW0gID0gYTpwcmV2X2xudW0KKyAgIHdoaWxlIGxudW0gPiAwCisgICAgICBsZXQgcHJldl9sbnVtID0gbG51bQorICAgICAgbGV0IGxudW0gPSBwcmV2bm9uYmxhbmsobG51bSAtIDEpCisgICAgICAiIEdldCBwcmV2aW91cyBub24tYmxhbmsvbm9uLWNvbW1lbnQtb25seSBsaW5lCisgICAgICB3aGlsZSAxCisgICAgICAgICBsZXQgbGluZSA9IHN1YnN0aXR1dGUoIGdldGxpbmUobG51bSksIHM6QWRhQ29tbWVudCwgJycsICcnICkKKyAgICAgICAgIGlmIGxpbmUgIX4gJ15ccyokJyAmJiBsaW5lICF+ICdeXHMqIycKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICBlbmRpZgorICAgICAgICAgbGV0IGxudW0gPSBwcmV2bm9uYmxhbmsobG51bSAtIDEpCisgICAgICAgICBpZiBsbnVtIDw9IDAKKyAgICAgICAgICAgIHJldHVybiBhOmN1cnJlbnRfaW5kZW50CisgICAgICAgICBlbmRpZgorICAgICAgZW5kd2hpbGUKKyAgICAgICIgTGVhdmUgaW5kZW50IGFsb25lIGlmIG91ciAnOycgbGluZSBpcyBwYXJ0IG9mIGEgJzsnLWRlbGluZWF0ZWQKKyAgICAgICIgYWdncmVnYXRlIChlLmcuLCBwcm9jZWR1cmUgYXJncy4pIG9yIGZpcnN0IGxpbmUgYWZ0ZXIgYSBibG9jayBzdGFydC4KKyAgICAgIGlmIGxpbmUgPX4gczpBZGFCbG9ja1N0YXJ0IHx8IGxpbmUgPX4gJyhccyokJworICAgICAgICAgcmV0dXJuIGE6Y3VycmVudF9pbmRlbnQKKyAgICAgIGVuZGlmCisgICAgICBpZiBsaW5lICF+ICdbLj0oXVxzKiQnCisgICAgICAgICBsZXQgaW5kID0gaW5kZW50KHByZXZfbG51bSkKKyAgICAgICAgIGlmIGluZCA8IGE6Y3VycmVudF9pbmRlbnQKKyAgICAgICAgICAgIHJldHVybiBpbmQKKyAgICAgICAgIGVuZGlmCisgICAgICBlbmRpZgorICAgZW5kd2hpbGUKKyAgICIgRmFsbGJhY2sgLSBqdXN0IHVzZSBjdXJyZW50IG9uZQorICAgcmV0dXJuIGE6Y3VycmVudF9pbmRlbnQKK2VuZGZ1bmN0aW9uCisKKworIiBGaW5kIGNvcnJlY3QgaW5kZW50IG9mIGEgbmV3IGxpbmUgYmFzZWQgdXBvbiB3aGF0IHdlbnQgYmVmb3JlCitmdW5jdGlvbiBHZXRBZGFJbmRlbnQoKQorICAgIiBGaW5kIGEgbm9uLWJsYW5rIGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZS4KKyAgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisgICBsZXQgaW5kID0gaW5kZW50KGxudW0pCisgICBsZXQgcGFja2FnZV9saW5lID0gMAorCisgICAiIEdldCBwcmV2aW91cyBub24tYmxhbmsvbm9uLWNvbW1lbnQtb25seS9ub24tY3BwIGxpbmUKKyAgIHdoaWxlIDEKKyAgICAgIGxldCBsaW5lID0gc3Vic3RpdHV0ZSggZ2V0bGluZShsbnVtKSwgczpBZGFDb21tZW50LCAnJywgJycgKQorICAgICAgaWYgbGluZSAhfiAnXlxzKiQnICYmIGxpbmUgIX4gJ15ccyojJworICAgICAgICAgYnJlYWsKKyAgICAgIGVuZGlmCisgICAgICBsZXQgbG51bSA9IHByZXZub25ibGFuayhsbnVtIC0gMSkKKyAgICAgIGlmIGxudW0gPD0gMAorICAgICAgICAgcmV0dXJuIGluZAorICAgICAgZW5kaWYKKyAgIGVuZHdoaWxlCisKKyAgICIgR2V0IGRlZmF1bHQgaW5kZW50IChmcm9tIHByZXYuIGxpbmUpCisgICBsZXQgaW5kID0gaW5kZW50KGxudW0pCisKKyAgICIgTm93IGNoZWNrIHdoYXQncyBvbiB0aGUgcHJldmlvdXMgbGluZQorICAgaWYgbGluZSA9fiBzOkFkYUJsb2NrU3RhcnQgIHx8ICBsaW5lID1+ICcoXHMqJCcKKyAgICAgICIgQ2hlY2sgZm9yIGZhbHNlIG1hdGNoZXMgdG8gQWRhQmxvY2tTdGFydAorICAgICAgbGV0IGZhbHNlX21hdGNoID0gMAorICAgICAgaWYgbGluZSA9fiAnXlxzKlwocHJvY2VkdXJlXHxmdW5jdGlvblx8cGFja2FnZVwpXD4uKlw8aXNccypuZXdcPicKKyAgICAgICAgICIgR2VuZXJpYyBpbnN0YW50aWF0aW9uCisgICAgICAgICBsZXQgZmFsc2VfbWF0Y2ggPSAxCisgICAgICBlbHNlaWYgbGluZSA9fiAnKVxzKjtccyokJyAgfHwgIGxpbmUgPX4gJ15cKFteKF0qKFteKV0qKVwpKlteKF0qO1xzKiQnCisgICAgICAgICAiIGZvcndhcmQgZGVjbGFyYXRpb24KKyAgICAgICAgIGxldCBmYWxzZV9tYXRjaCA9IDEKKyAgICAgIGVuZGlmCisgICAgICAiIE1vdmUgaW5kZW50IGluCisgICAgICBpZiAhIGZhbHNlX21hdGNoCisgICAgICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgICBlbmRpZgorICAgZWxzZWlmIGxpbmUgPX4gJ15ccypcKGNhc2VcfGV4Y2VwdGlvblwpXD4nCisgICAgICAiIE1vdmUgaW5kZW50IGluIHR3aWNlIChuZXh0ICd3aGVuJyB3aWxsIG1vdmUgYmFjaykKKyAgICAgIGxldCBpbmQgPSBpbmQgKyAyICogJnN3CisgICBlbHNlaWYgbGluZSA9fiAnXlxzKmVuZFxzKnJlY29yZFw+JworICAgICAgIiBNb3ZlIGluZGVudCBiYWNrIHRvIHRhbGx5aW5nICd0eXBlJyBwcmVjZWVkaW5nIHRoZSAncmVjb3JkJy4KKyAgICAgICIgQWxsb3cgaW5kZW50IHRvIGJlIGVxdWFsIHRvICdlbmQgcmVjb3JkJ3MuCisgICAgICBsZXQgaW5kID0gczpNYWluQmxvY2tJbmRlbnQoIGluZCsmc3csIGxudW0sICd0eXBlXD4nLCAnJyApCisgICBlbHNlaWYgbGluZSA9fiAnXCheXHMqbmV3XD4uKlwpXEA8ISlccypbOyxdXHMqJCcKKyAgICAgICIgUmV2ZXJ0IHRvIGluZGVudCBvZiBsaW5lIHRoYXQgc3RhcnRlZCB0aGlzIHBhcmVudGhlc2lzIHBhaXIKKyAgICAgIGV4ZSBsbnVtCisgICAgICBleGUgJ25vcm1hbCEgJEYpJScKKyAgICAgIGlmIGdldGxpbmUoJy4nKSA9fiAnXlxzKignCisgICAgICAgICAiIERpcmUgbGF5b3V0IC0gdXNlIHByZXZpb3VzIGluZGVudCAoY291bGQgY2hlY2sgZm9yIEFkYUNvbW1lbnQgaGVyZSkKKyAgICAgICAgIGxldCBpbmQgPSBpbmRlbnQoIHByZXZub25ibGFuayggbGluZSgnLicpLTEgKSApCisgICAgICBlbHNlCisgICAgICAgICBsZXQgaW5kID0gaW5kZW50KCcuJykKKyAgICAgIGVuZGlmCisgICAgICBleGUgdjpsbnVtCisgICBlbHNlaWYgbGluZSA9fiAnWy49KF1ccyokJworICAgICAgIiBBIHN0YXRlbWVudCBjb250aW51YXRpb24gLSBtb3ZlIGluIG9uZQorICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgZWxzZWlmIGxpbmUgPX4gJ15ccypuZXdcPicKKyAgICAgICIgTXVsdGlwbGUgbGluZSBnZW5lcmljIGluc3RhbnRpYXRpb24gKCdwYWNrYWdlIGJsYWggaXNcbm5ldyB0aGluZ3knKQorICAgICAgbGV0IGluZCA9IHM6U3RhdGVtZW50SW5kZW50KCBpbmQgLSAmc3csIGxudW0gKQorICAgZWxzZWlmIGxpbmUgPX4gJztccyokJworICAgICAgIiBTdGF0ZW1lbnQgZW5kIC0gdHJ5IHRvIGZpbmQgY3VycmVudCBzdGF0ZW1lbnQtc3RhcnQgaW5kZW50CisgICAgICBsZXQgaW5kID0gczpTdGF0ZW1lbnRJbmRlbnQoIGluZCwgbG51bSApCisgICBlbmRpZgorCisgICAiIENoZWNrIGZvciBwb3RlbnRpYWwgYXJndW1lbnQgbGlzdCBvbiBuZXh0IGxpbmUKKyAgIGxldCBjb250aW51YXRpb24gPSAobGluZSA9fiAnW0EtWmEtejAtOV9dXHMqJCcpCisKKworICAgIiBDaGVjayBjdXJyZW50IGxpbmU7IHNlYXJjaCBmb3Igc2ltcGxpc3RpYyBtYXRjaGluZyBzdGFydC1vZi1ibG9jaworICAgbGV0IGxpbmUgPSBnZXRsaW5lKHY6bG51bSkKKyAgIGlmIGxpbmUgPX4gJ15ccyojJworICAgICAgIiBTdGFydCBvZiBsaW5lIGZvciBhZGEtcHAKKyAgICAgIGxldCBpbmQgPSAwCisgICBlbHNlaWYgY29udGludWF0aW9uICYmIGxpbmUgPX4gJ15ccyooJworICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgZWxzZWlmIGxpbmUgPX4gJ15ccypcKGJlZ2luXHxpc1wpXD4nCisgICAgICBsZXQgaW5kID0gczpNYWluQmxvY2tJbmRlbnQoIGluZCwgbG51bSwgJ1wocHJvY2VkdXJlXHxmdW5jdGlvblx8ZGVjbGFyZVx8cGFja2FnZVx8dGFza1wpXD4nLCAnYmVnaW5cPicgKQorICAgZWxzZWlmIGxpbmUgPX4gJ15ccypyZWNvcmRcPicKKyAgICAgIGxldCBpbmQgPSBzOk1haW5CbG9ja0luZGVudCggaW5kLCBsbnVtLCAndHlwZVw+JywgJycgKSArICZzdworICAgZWxzZWlmIGxpbmUgPX4gJ15ccypcKGVsc2VcfGVsc2lmXClcPicKKyAgICAgIGxldCBpbmQgPSBzOk1haW5CbG9ja0luZGVudCggaW5kLCBsbnVtLCAnaWZcPicsICcnICkKKyAgIGVsc2VpZiBsaW5lID1+ICdeXHMqd2hlblw+JworICAgICAgIiBBbGlnbiAnd2hlbicgb25lIC9pbi8gZnJvbSBtYXRjaGluZyBibG9jayBzdGFydAorICAgICAgbGV0IGluZCA9IHM6TWFpbkJsb2NrSW5kZW50KCBpbmQsIGxudW0sICdcKGNhc2VcfGV4Y2VwdGlvblwpXD4nLCAnJyApICsgJnN3CisgICBlbHNlaWYgbGluZSA9fiAnXlxzKmVuZFw+XHMqXDxpZlw+JworICAgICAgIiBFbmQgb2YgaWYgc3RhdGVtZW50cworICAgICAgbGV0IGluZCA9IHM6RW5kQmxvY2tJbmRlbnQoIGluZCwgbG51bSwgJ2lmXD4nLCAnZW5kXD5ccypcPGlmXD4nICkKKyAgIGVsc2VpZiBsaW5lID1+ICdeXHMqZW5kXD5ccypcPGxvb3BcPicKKyAgICAgICIgRW5kIG9mIGxvb3BzCisgICAgICBsZXQgaW5kID0gczpFbmRCbG9ja0luZGVudCggaW5kLCBsbnVtLCAnXChcKHdoaWxlXHxmb3JcKVw+LipcKVw/XDxsb29wXD4nLCAnZW5kXD5ccypcPGxvb3BcPicgKQorICAgZWxzZWlmIGxpbmUgPX4gJ15ccyplbmRcPlxzKlw8cmVjb3JkXD4nCisgICAgICAiIEVuZCBvZiByZWNvcmRzCisgICAgICBsZXQgaW5kID0gczpFbmRCbG9ja0luZGVudCggaW5kLCBsbnVtLCAnXCh0eXBlXD4uKlwpXD1cPHJlY29yZFw+JywgJ2VuZFw+XHMqXDxyZWNvcmRcPicgKQorICAgZWxzZWlmIGxpbmUgPX4gJ15ccyplbmRcPlxzKlw8cHJvY2VkdXJlXD4nCisgICAgICAiIEVuZCBvZiBwcm9jZWR1cmVzCisgICAgICBsZXQgaW5kID0gczpFbmRCbG9ja0luZGVudCggaW5kLCBsbnVtLCAncHJvY2VkdXJlXD4uKlw8aXNcPicsICdlbmRcPlxzKlw8cHJvY2VkdXJlXD4nICkKKyAgIGVsc2VpZiBsaW5lID1+ICdeXHMqZW5kXD5ccypcPGNhc2VcPicKKyAgICAgICIgRW5kIG9mIGNhc2Ugc3RhdGVtZW50CisgICAgICBsZXQgaW5kID0gczpFbmRCbG9ja0luZGVudCggaW5kLCBsbnVtLCAnY2FzZVw+LipcPGlzXD4nLCAnZW5kXD5ccypcPGNhc2VcPicgKQorICAgZWxzZWlmIGxpbmUgPX4gJ15ccyplbmRcPicKKyAgICAgICIgR2VuZXJhbCBjYXNlIGZvciBlbmQKKyAgICAgIGxldCBpbmQgPSBzOk1haW5CbG9ja0luZGVudCggaW5kLCBsbnVtLCAnXChpZlx8d2hpbGVcfGZvclx8bG9vcFx8YWNjZXB0XHxiZWdpblx8cmVjb3JkXHxjYXNlXHxleGNlcHRpb25cKVw+JywgJycgKQorICAgZWxzZWlmIGxpbmUgPX4gJ15ccypleGNlcHRpb25cPicKKyAgICAgIGxldCBpbmQgPSBzOk1haW5CbG9ja0luZGVudCggaW5kLCBsbnVtLCAnYmVnaW5cPicsICcnICkKKyAgIGVsc2VpZiBsaW5lID1+ICdeXHMqdGhlblw+JworICAgICAgbGV0IGluZCA9IHM6TWFpbkJsb2NrSW5kZW50KCBpbmQsIGxudW0sICdpZlw+JywgJycgKQorICAgZW5kaWYKKworICAgcmV0dXJuIGluZAorZW5kZnVuY3Rpb24KKworIiB2aW06IHNldCBzdz0zIHN0cz0zIDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2FudC52aW0gYi9ydW50aW1lL2luZGVudC9hbnQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2N2YyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9hbnQudmltCkBAIC0wLDAgKzEsMTIgQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOiAgICBBTlQgZmlsZXMKKyIgTWFpbnRhaW5lcjogIERhdmlkIEZpc2hidXJuIDxmaXNoYnVybkBpYW55d2hlcmUuY29tPgorIiBMYXN0IENoYW5nZTogVGh1IE1heSAxNSAyMDAzIDEwOjAyOjU0IFBNCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgVXNlIFhNTCBmb3JtYXR0aW5nIHJ1bGVzCitydW50aW1lISBpbmRlbnQveG1sLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvYXV0b21ha2UudmltIGIvcnVudGltZS9pbmRlbnQvYXV0b21ha2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZWZmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9hdXRvbWFrZS52aW0KQEAgLTAsMCArMSwxMSBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBhdXRvbWFrZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vaW5kZW50L3BjcC9hdXRvbWFrZS8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNC0yNQorIiBhcmNoLXRhZzoJICAgIDlhMmFmNDhjLTQ4ZDQtNGJhZS04MmMzLWM4MDFiYzlkMTk3NgorCisiIHNhbWUgYXMgbWFrZWZpbGUgaW5kZW50aW5nIGZvciBub3cuCitzb3VyY2UgPHNmaWxlPjpwOmgvbWFrZS52aW0KKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvYXdrLnZpbSBiL3J1bnRpbWUvaW5kZW50L2F3ay52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2YTVkZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L2F3ay52aW0KQEAgLTAsMCArMSwyMjggQEAKKyIgIHZpbTogc2V0IHN3PTMgc3RzPTM6CisKKyIgQXdrIGluZGVudCBzY3JpcHQuIEl0IGNhbiBoYW5kbGUgbXVsdGktbGluZSBzdGF0ZW1lbnRzIGFuZCBleHByZXNzaW9ucy4KKyIgSXQgd29ya3MgdXAgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGNvcnJlY3QvaW5jb3JyZWN0CisiIGFuZCBwZXJzb25hbCB0YXN0ZSBnZXRzIGZ1enp5LiBEcm9wIG1lIGFuIGUtbWFpbCBmb3IgYnVnIHJlcG9ydHMgYW5kCisiIHJlYXNvbmFibGUgc3R5bGUgc3VnZ2VzdGlvbnMuCisiCisiIEJ1Z3M6CisiID09PT09CisiIC0gU29tZSBzeW50YXggZXJyb3JzIG1heSBjYXVzZSBlcnJhdGljIGluZGVudGF0aW9uLgorIiAtIFNhbWUgZm9yIHZlcnkgdW51c3VhbCBidXQgc3ludGFjdGljbHkgY29ycmVjdCB1c2Ugb2YgeyB9CisiIC0gSW4gc29tZSBjYXNlcyBpdCdzIGNvbmZ1c2VkIGJ5IHRoZSB1c2Ugb2YgKCBhbmQgeyBpbiBzdHJpbmdzIGNvbnN0YW50cworIiAtIFRoaXMgdmVyc2lvbiBsaWtlcyB0aGUgY2xvc2luZyBicmFjZSBvZiBhIG11bHRpbGluZSBwYXR0ZXJuLWFjdGlvbiBiZSBvbgorIiAgIGNoYXJhY3RlciBwb3NpdGlvbiAxIGJlZm9yZSB0aGUgZm9sbG93aW5nIHBhdHRlcm4tYWN0aW9uIGNvbWJpbmF0aW9uIGlzCisiICAgZm9ybWF0dGVkCisKKyIgQXV0aG9yOgorIiA9PT09PT09CisiIEVyaWsgSmFuc3NlbiwgZWphbnNzZW5AaXRtYXR0ZXJzLm5sCisiCisiIEhpc3Rvcnk6CisiID09PT09PT09CisiIDI2LTA0LTIwMDIgR290IGluaXRpYWwgdmVyc2lvbiB3b3JraW5nIHJlYXNvbmFibHkgd2VsbAorIiAyOS0wNC0yMDAyIEZpeGVkIHByb2JsZW1zIGluIGZ1bmN0aW9uIGhlYWRlcnMgYW5kIG1heCBsaW5lIHdpZHRoCisiCSAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdHdvLWxpbmUgaWYncyB3aXRob3V0IGN1cmx5IGJyYWNlcworCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0QXdrSW5kZW50KCkKKyIgTW1tLCBjb3BpZWQgZnJvbSB0aGUgdGNsIGluZGVudCBwcm9ncmFtLiBJcyB0aGlzIG9rYXk/CitzZXRsb2NhbCBpbmRlbnRrZXlzLT06LDAjCisKKyIgT25seSBkZWZpbmUgdGhlIGZ1bmN0aW9uIG9uY2UuCitpZiBleGlzdHMoIipHZXRBd2tJbmRlbnQiKQorICAgIGZpbmlzaAorZW5kaWYKKworIiBUaGlzIGZ1bmN0aW9uIGNvbnRhaW5zIGEgbG90IG9mIGV4aXQgcG9pbnRzLiBJdCBjaGVja3MgZm9yIHNpbXBsZSBjYXNlcworIiBmaXJzdCB0byBnZXQgb3V0IG9mIHRoZSBmdW5jdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLCB0aGVyZWJ5IHJlZHVjaW5nIHRoZQorIiBudW1iZXIgb2YgcG9zc2liaWxpdGllcyBsYXRlciBvbiBpbiB0aGUgZGlmZmljdWx0IHBhcnRzCisKK2Z1bmN0aW9uISBHZXRBd2tJbmRlbnQoKQorCisgICAiIEZpbmQgcHJldmlvdXMgbGluZSBhbmQgZ2V0IGl0J3MgaW5kZW50YXRpb24KKyAgIGxldCBwcmV2X2xpbmVubyA9IHM6R2V0X3ByZXZfbGluZSggdjpsbnVtICkKKyAgIGlmIHByZXZfbGluZW5vID09IDAKKyAgICAgIHJldHVybiAwCisgICBlbmRpZgorICAgbGV0IHByZXZfZGF0YSA9IGdldGxpbmUoIHByZXZfbGluZW5vICkKKyAgIGxldCBpbmQgPSBpbmRlbnQoIHByZXZfbGluZW5vICkKKworICAgIiBJbmNyZWFzZSBpbmRlbnQgaWYgdGhlIHByZXZpb3VzIGxpbmUgY29udGFpbnMgYW4gb3BlbmluZyBicmFjZS4gU2VhcmNoCisgICAiIGZvciB0aGlzIGJyYWNlIHRoZSBoYXJkIHdheSB0byBwcmV2ZW50IGVycm9ycyBpZiB0aGUgcHJldmlvdXMgbGluZSBpcyBhCisgICAiICdwYXR0ZXJuIHsgYWN0aW9uIH0nIChzaW1wbGUgY2hlY2sgbWF0Y2ggb24gL3svIGluY3JlYXNlcyB0aGUgaW5kZW50IHRoZW4pCisKKyAgIGlmIHM6R2V0X2JyYWNlX2JhbGFuY2UoIHByZXZfZGF0YSwgJ3snLCAnfScgKSA+IDAKKyAgICAgIHJldHVybiBpbmQgKyAmc3cKKyAgIGVuZGlmCisKKyAgIGxldCBicmFjZV9iYWxhbmNlID0gczpHZXRfYnJhY2VfYmFsYW5jZSggcHJldl9kYXRhLCAnKCcsICcpJyApCisKKyAgICIgSWYgcHJldiBsaW5lIGhhcyBwb3NpdGl2ZSBicmFjZV9iYWxhbmNlIGFuZCBzdGFydHMgd2l0aCBhIHdvcmQgKGtleXdvcmQKKyAgICIgb3IgZnVuY3Rpb24gbmFtZSksIGFsaWduIHRoZSBjdXJyZW50IGxpbmUgb24gdGhlIGZpcnN0ICcoJyBvZiB0aGUgcHJldgorICAgIiBsaW5lCisKKyAgIGlmIGJyYWNlX2JhbGFuY2UgPiAwICYmIHM6U3RhcnRzX3dpdGhfd29yZCggcHJldl9kYXRhICkKKyAgICAgIHJldHVybiBzOlNhZmVfaW5kZW50KCBpbmQsIHM6Rmlyc3Rfd29yZF9sZW4ocHJldl9kYXRhKSwgZ2V0bGluZSh2OmxudW0pKQorICAgZW5kaWYKKworICAgIiBJZiB0aGlzIGxpbmUgc3RhcnRzIHdpdGggYW4gb3BlbiBicmFjZSBiYWlsIG91dCBub3cgYmVmb3JlIHRoZSBsaW5lCisgICAiIGNvbnRpbnVhdGlvbiBjaGVja3MuCisKKyAgIGlmIGdldGxpbmUoIHY6bG51bSApID1+ICdeXHMqeycKKyAgICAgIHJldHVybiBpbmQKKyAgIGVuZGlmCisKKyAgICIgSWYgcHJldiBsaW5lIHNlZW1zIHRvIGJlIHBhcnQgb2YgbXVsdGlsaW5lIHN0YXRlbWVudDoKKyAgICIgMS4gUHJldiBsaW5lIGlzIGZpcnN0IGxpbmUgb2YgYSBtdWx0aWxpbmUgc3RhdGVtZW50CisgICAiICAgIC0+IGF0dGVtcHQgdG8gaW5kZW50IG9uIGZpcnN0ICcgJyBvciAnKCcgb2YgcHJldiBsaW5lLCBqdXN0IGxpa2Ugd2UKKyAgICIgICAgICAgaW5kZW50ZWQgdGhlIHBvc2l0aXZlIGJyYWNlIGJhbGFuY2UgY2FzZSBhYm92ZQorICAgIiAyLiBQcmV2IGxpbmUgaXMgbm90IGZpcnN0IGxpbmUgb2YgYSBtdWx0aWxpbmUgc3RhdGVtZW50CisgICAiICAgIC0+IGNvcHkgaW5kZW50IG9mIHByZXYgbGluZQorCisgICBsZXQgY29udGludWVfbW9kZSA9IHM6U2VlbXNfY29udGludWluZyggcHJldl9kYXRhICkKKyAgIGlmIGNvbnRpbnVlX21vZGUgPiAwCisgICAgIGlmIHM6U2VlbXNfY29udGludWluZyggZ2V0bGluZShzOkdldF9wcmV2X2xpbmUoIHByZXZfbGluZW5vICkpICkKKyAgICAgICAiIENhc2UgMgorICAgICAgIHJldHVybiBpbmQKKyAgICAgZWxzZQorICAgICAgICIgQ2FzZSAxCisgICAgICAgaWYgY29udGludWVfbW9kZSA9PSAxCisJICAiIE5lZWQgY29udGludWF0aW9uIGR1ZSB0byBjb21tYSwgYmFja3NsYXNoLCBldGMKKwkgIHJldHVybiBzOlNhZmVfaW5kZW50KCBpbmQsIHM6Rmlyc3Rfd29yZF9sZW4ocHJldl9kYXRhKSwgZ2V0bGluZSh2OmxudW0pKQorICAgICAgIGVsc2UKKwkgIiBpZi9mb3Ivd2hpbGUgd2l0aG91dCAneycKKwkgcmV0dXJuIGluZCArICZzdworICAgICAgIGVuZGlmCisgICAgIGVuZGlmCisgICBlbmRpZgorCisgICAiIElmIHRoZSBwcmV2aW91cyBsaW5lIGRvZXNuJ3QgbmVlZCBjb250aW51YXRpb24gb24gdGhlIGN1cnJlbnQgbGluZSB3ZSBhcmUKKyAgICIgb24gdGhlIHN0YXJ0IG9mIGEgbmV3IHN0YXRlbWVudC4gIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHdlIGFsaWduIHdpdGggdGhlCisgICAiIHByZXZpb3VzIHN0YXRlbWVudCBpbnN0ZWFkIG9mIGp1c3QgdGhlIHByZXZpb3VzIGxpbmUuIFRoaXMgaXMgYSBiaXQKKyAgICIgY29tcGxpY2F0ZWQgYmVjYXVzZSB0aGUgcHJldmlvdXMgc3RhdGVtZW50IG1pZ2h0IGJlIG11bHRpLWxpbmUuCisgICAiCisgICAiIFRoZSBzdGFydCBvZiBhIG11bHRpbGluZSBzdGF0ZW1lbnQgY2FuIGJlIGZvdW5kIGJ5OgorICAgIgorICAgIiAxIElmIHRoZSBwcmV2aW91cyBsaW5lIGNvbnRhaW5zIGNsb3NpbmcgYnJhY2VzIGFuZCBoYXMgbmVnYXRpdmUgYnJhY2UKKyAgICIgICBiYWxhbmNlLCBzZWFyY2ggYmFja3dhcmRzIHVudGlsIGN1bXVsYXRpdmUgYnJhY2UgYmFsYW5jZSBiZWNvbWVzIHplcm8sCisgICAiICAgdGFrZSBpbmRlbnQgb2YgdGhhdCBsaW5lCisgICAiIDIgSWYgdGhlIGxpbmUgYmVmb3JlIHRoZSBwcmV2aW91cyBuZWVkcyBjb250aW51YXRpb24gc2VhcmNoIGJhY2t3YXJkCisgICAiICAgdW50aWwgdGhhdCdzIG5vdCB0aGUgY2FzZSBhbnltb3JlLiBUYWtlIGluZGVudCBvZiBvbmUgbGluZSBkb3duLgorCisgICAiIENhc2UgMQorICAgaWYgcHJldl9kYXRhID1+ICcpJyAmJiBicmFjZV9iYWxhbmNlIDwgMAorICAgICAgd2hpbGUgYnJhY2VfYmFsYW5jZSAhPSAwCisJIGxldCBwcmV2X2xpbmVubyA9IHM6R2V0X3ByZXZfbGluZSggcHJldl9saW5lbm8gKQorCSBsZXQgcHJldl9kYXRhID0gZ2V0bGluZSggcHJldl9saW5lbm8gKQorCSBsZXQgYnJhY2VfYmFsYW5jZT1icmFjZV9iYWxhbmNlK3M6R2V0X2JyYWNlX2JhbGFuY2UocHJldl9kYXRhLCcoJywnKScgKQorICAgICAgZW5kd2hpbGUKKyAgICAgIGxldCBpbmQgPSBpbmRlbnQoIHByZXZfbGluZW5vICkKKyAgIGVsc2UKKyAgICAgICIgQ2FzZSAyCisgICAgICBpZiBzOlNlZW1zX2NvbnRpbnVpbmcoIGdldGxpbmUoIHByZXZfbGluZW5vIC0gMSApICkKKwkgbGV0IHByZXZfbGluZW5vID0gcHJldl9saW5lbm8gLSAyCisJIGxldCBwcmV2X2RhdGEgPSBnZXRsaW5lKCBwcmV2X2xpbmVubyApCisJIHdoaWxlIHByZXZfbGluZW5vID4gMCAmJiAoczpTZWVtc19jb250aW51aW5nKCBwcmV2X2RhdGEgKSA+IDApCisJICAgIGxldCBwcmV2X2xpbmVubyA9IHM6R2V0X3ByZXZfbGluZSggcHJldl9saW5lbm8gKQorCSAgICBsZXQgcHJldl9kYXRhID0gZ2V0bGluZSggcHJldl9saW5lbm8gKQorCSBlbmR3aGlsZQorCSBsZXQgaW5kID0gaW5kZW50KCBwcmV2X2xpbmVubyArIDEgKQorICAgICAgZW5kaWYKKyAgIGVuZGlmCisKKyAgICIgRGVjcmVhc2UgaW5kZW50IGlmIHRoaXMgbGluZSBjb250YWlucyBhICd9Jy4KKyAgIGlmIGdldGxpbmUodjpsbnVtKSA9fiAnXlxzKn0nCisgICAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgICBlbmRpZgorCisgICByZXR1cm4gaW5kCitlbmRmdW5jdGlvbgorCisiIEZpbmQgdGhlIG9wZW4gYW5kIGNsb3NlIGJyYWNlcyBpbiB0aGlzIGxpbmUgYW5kIHJldHVybiBob3cgbWFueSBtb3JlIG9wZW4tCisiIHRoYW4gY2xvc2UgYnJhY2VzIHRoZXJlIGFyZS4gSXQncyBhbHNvIHVzZWQgdG8gZGV0ZXJtaW5lIGN1bXVsYXRpdmUgYmFsYW5jZQorIiBhY3Jvc3MgbXVsdGlwbGUgbGluZXMuCisKK2Z1bmN0aW9uISBzOkdldF9icmFjZV9iYWxhbmNlKCBsaW5lLCBiX29wZW4sIGJfY2xvc2UgKQorICAgbGV0IGxpbmUyID0gc3Vic3RpdHV0ZSggYTpsaW5lLCBhOmJfb3BlbiwgIiIsICJnIiApCisgICBsZXQgb3BlbmIgPSBzdHJsZW4oIGE6bGluZSApIC0gc3RybGVuKCBsaW5lMiApCisgICBsZXQgbGluZTMgPSBzdWJzdGl0dXRlKCBsaW5lMiwgYTpiX2Nsb3NlLCAiIiwgImciICkKKyAgIGxldCBjbG9zZWIgPSBzdHJsZW4oIGxpbmUyICkgLSBzdHJsZW4oIGxpbmUzICkKKyAgIHJldHVybiBvcGVuYiAtIGNsb3NlYgorZW5kZnVuY3Rpb24KKworIiBGaW5kIG91dCB3aGV0aGVyIHRoZSBsaW5lIHN0YXJ0cyB3aXRoIGEgd29yZCAoaS5lLiBrZXl3b3JkIG9yIGZ1bmN0aW9uCisiIGNhbGwpLiBNaWdodCBuZWVkIGVuaGFuY2VtZW50cyBoZXJlLgorCitmdW5jdGlvbiEgczpTdGFydHNfd2l0aF93b3JkKCBsaW5lICkKKyAgaWYgYTpsaW5lID1+ICdeXHMqW2EtekEtWl8wLTldXCtccyooJworICAgICByZXR1cm4gMQorICBlbmRpZgorICByZXR1cm4gMAorZW5kZnVuY3Rpb24KKworIiBGaW5kIHRoZSBsZW5ndGggb2YgdGhlIGZpcnN0IHdvcmQgaW4gYSBsaW5lLiBUaGlzIGlzIHVzZWQgdG8gYmUgYWJsZSB0bworIiBhbGlnbiBhIGxpbmUgcmVsYXRpdmUgdG8gdGhlICdwcmludCAnIG9yICdpZiAoJyBvbiB0aGUgcHJldmlvdXMgbGluZSBpbiBjYXNlCisiIHN1Y2ggYSBzdGF0ZW1lbnQgc3BhbnMgbXVsdGlwbGUgbGluZXMuCisiIFByZWNvbmRpdGlvbjogb25seSB0byBiZSB1c2VkIG9uIGxpbmVzIHdoZXJlICdTdGFydHNfd2l0aF93b3JkJyByZXR1cm5zIDEuCisKK2Z1bmN0aW9uISBzOkZpcnN0X3dvcmRfbGVuKCBsaW5lICkKKyAgIGxldCB3aGl0ZV9lbmQgPSBtYXRjaGVuZCggYTpsaW5lLCAnXlxzKicgKQorICAgaWYgbWF0Y2goIGE6bGluZSwgJ15ccypmdW5jJyApICE9IC0xCisgICAgIGxldCB3b3JkX2VuZCA9IG1hdGNoZW5kKCBhOmxpbmUsICdbYS16XVwrXHNcK1thLXpBLVpfMC05XVwrWyAoXSonICkKKyAgIGVsc2UKKyAgICAgbGV0IHdvcmRfZW5kID0gbWF0Y2hlbmQoIGE6bGluZSwgJ1thLXpBLVpfMC05XVwrWyAoXSonICkKKyAgIGVuZGlmCisgICByZXR1cm4gd29yZF9lbmQgLSB3aGl0ZV9lbmQKK2VuZGZ1bmN0aW9uCisKKyIgRGV0ZXJtaW5lIGlmICdsaW5lJyBjb21wbGV0ZXMgYSBzdGF0ZW1lbnQgb3IgaXMgY29udGludWVkIG9uIHRoZSBuZXh0IGxpbmUuCisiIFRoaXMgb25lIGlzIGZhciBmcm9tIGNvbXBsZXRlIGFuZCBhY2NlcHRzIGlsbGVnYWwgY29kZS4gTm90IGltcG9ydGFudCBmb3IKKyIgaW5kZW50aW5nLCBob3dldmVyLgorCitmdW5jdGlvbiEgczpTZWVtc19jb250aW51aW5nKCBsaW5lICkKKyAgIiBVbmZpbmlzaGVkIGxpbmVzCisgIGlmIGE6bGluZSA9fiAnW1xcLFx8XCZcK1wtXCpcJVxeXVxzKiQnCisgICAgcmV0dXJuIDEKKyAgZW5kaWYKKyAgIiBpZi9mb3Ivd2hpbGUgKGNvbmQpIGVvbAorICBpZiBhOmxpbmUgPX4gJ15ccypcKGlmXHx3aGlsZVx8Zm9yXClccyooLiopXHMqJCcgfHwgYTpsaW5lID1+ICdeXHMqZWxzZVxzKicKKyAgICAgIHJldHVybiAyCisgICBlbmRpZgorICByZXR1cm4gMAorZW5kZnVuY3Rpb24KKworIiBHZXQgcHJldmlvdXMgcmVsZXZhbnQgbGluZS4gU2VhcmNoIGJhY2sgdW50aWwgYSBsaW5lIGlzIHRoYXQgaXMgbm8KKyIgY29tbWVudCBvciBibGFuayBhbmQgcmV0dXJuIHRoZSBsaW5lIG51bWJlcgorCitmdW5jdGlvbiEgczpHZXRfcHJldl9saW5lKCBsaW5lbm8gKQorICAgbGV0IGxudW0gPSBhOmxpbmVubyAtIDEKKyAgIGxldCBkYXRhID0gZ2V0bGluZSggbG51bSApCisgICB3aGlsZSBsbnVtID4gMCAmJiAoZGF0YSA9fiAnXlxzKiMnIHx8IGRhdGEgPX4gJ15ccyokJykKKyAgICAgIGxldCBsbnVtID0gbG51bSAtIDEKKyAgICAgIGxldCBkYXRhID0gZ2V0bGluZSggbG51bSApCisgICBlbmR3aGlsZQorICAgcmV0dXJuIGxudW0KK2VuZGZ1bmN0aW9uCisKKyIgVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBhbiBpbmRlbnRlZCBsaW5lIGV4Y2VlZHMgYSBtYXhpbXVtIGxpbmV3aWR0aAorIiAoaGFyZGNvZGVkIDgwKS4gSWYgc28gYW5kIGl0IGlzIHBvc3NpYmxlIHRvIHN0YXkgd2l0aGluIDgwIHBvc2l0aW9ucyAob3IKKyIgbGltaXQgbnVtIG9mIGNoYXJhY3RlcnMgYmV5b25kIGxpbmV3aWR0aCkgYnkgZGVjcmVhc2luZyB0aGUgaW5kZW50IChrZWVwaW5nCisiIGl0ID4gYmFzZV9pbmRlbnQpLCBkbyBzby4KKworZnVuY3Rpb24hIHM6U2FmZV9pbmRlbnQoIGJhc2UsIHdvcmRsZW4sIHRoaXNfbGluZSApCisgICBsZXQgbGluZV9iYXNlID0gbWF0Y2hlbmQoIGE6dGhpc19saW5lLCAnXlxzKicgKQorICAgbGV0IGxpbmVfbGVuID0gc3RybGVuKCBhOnRoaXNfbGluZSApIC0gbGluZV9iYXNlCisgICBsZXQgaW5kZW50ID0gYTpiYXNlCisgICBpZiAoaW5kZW50ICsgYTp3b3JkbGVuICsgbGluZV9sZW4pID4gODAKKyAgICAgIiBTaW1wbGUgaW1wbGVtZW50YXRpb24gZ29vZCBlbm91Z2ggZm9yIHRoZSB0aW1lIGJlaW5nCisgICAgIGxldCBpbmRlbnQgPSBpbmRlbnQgKyAzCisgICBlbmRpZgorICAgcmV0dXJuIGluZGVudCArIGE6d29yZGxlbgorZW5kZnVuY3Rpb24KZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2MudmltIGIvcnVudGltZS9pbmRlbnQvYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1MjUxZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L2MudmltCkBAIC0wLDAgKzEsMTMgQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOglDCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAxIEp1biAxMgorCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKKyIgQyBpbmRlbnRpbmcgaXMgYnVpbHQtaW4sIHRodXMgdGhpcyBpcyB2ZXJ5IHNpbXBsZQorc2V0bG9jYWwgY2luZGVudApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvY2RsLnZpbSBiL3J1bnRpbWUvaW5kZW50L2NkbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyYjkwNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L2NkbC52aW0KQEAgLTAsMCArMSwxMjkgQEAKKyIgRGVzY3JpcHRpb246CUNvbXNoYXJlIERpbWVuc2lvbiBEZWZpbml0aW9uIExhbmd1YWdlIChDREwpCisiIEF1dGhvcjoJUmF1bCBTZWd1cmEgQWNldmVkbyA8cmF1bHNlZ3VyYWFjZXZlZEBuZXRzY2FwZS5uZXQ+CisiIExhc3QgQ2hhbmdlOglGcmkgTm92IDMwIDEzOjM1OjQ4ICAyMDAxIENTVAorCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgICAgImZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9Q2RsR2V0SW5kZW50KHY6bG51bSkKK3NldGxvY2FsIGluZGVudGtleXMmCitzZXRsb2NhbCBpbmRlbnRrZXlzKz09fmVsc2UsPX5lbmRpZiw9fnRoZW4sOywpLD0KKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkNkbEdldEluZGVudCIpCisgICAgImZpbmlzaAorZW5kaWYKKworIiBmaW5kIG91dCBpZiBhbiAiLi4uPS4uLiIgZXhwcmVzaW9uIGl0cyBhbiBhc2lnbm1lbnQgKG9yIGEgY29uZGl0aW9uYWwpCisiIGl0IHNjYW5zICdsaW5lJyBmaXJzdCwgYW5kIHRoZW4gdGhlIHByZXZpb3MgbGluZXMKK2Z1biEgQ2RsQXNpZ25tZW50KGxudW0sIGxpbmUpCisgIGxldCBmID0gLTEKKyAgbGV0IGxudW0gPSBhOmxudW0KKyAgbGV0IGxpbmUgPSBhOmxpbmUKKyAgd2hpbGUgbG51bSA+IDAgJiYgZiA9PSAtMQorICAgICIgbGluZSB3aXRob3V0IG1lbWJlcnMgW2FdIG9mIFtiXTpbY10uLi4KKyAgICBsZXQgaW5pY2lvID0gMAorICAgIHdoaWxlIDEKKyAgICAgICIga2V5d29yZHMgdGhhdCBoZWxwIHRvIGRlY2lkZQorICAgICAgbGV0IGluaWNpbyA9IG1hdGNoZW5kKGxpbmUsICdcY1w8XChleHByXHxcYSppZlx8YW5kXHxvclx8bm90XHxlbHNlXHx0aGVuXHxtZW1iZXJpc1x8XGtcK29mXClcPlx8Wzw+O10nLCBpbmljaW8pCisgICAgICBpZiBpbmljaW8gPCAwCisJYnJlYWsKKyAgICAgIGVuZGlmCisgICAgICAiIGl0J3MgZm9ybXVsYSBpZiB0aGVyZSdzIGEgJzsnLCAnZWxzRScsICd0aGVOJywgJ2VuRGlmJyBvciAnZXhwcicKKyAgICAgICIgY29uZGl0aW9uYWwgaWYgdGhlcmUncyBhICc8JywgJz4nLCAnZWxzZWlmJywgJ2lmJywgJ2FuZCcsICdvcicsICdub3QnLAorICAgICAgIiAnbWVtYmVyaXMnLCAnY2hpbGRyZW5vZicgYW5kIG90aGVyIFxrXCtvZiBmdW5jaW9ucworICAgICAgbGV0IGYgPSBsaW5lW2luaWNpby0xXSA9fj8gJ1tlbjtdJyB8fCBzdHJwYXJ0KGxpbmUsIGluaWNpby00LCA0KSA9fj8gJ25kaWZcfGV4cHInCisgICAgZW5kdworICAgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKGxudW0tMSkKKyAgICBsZXQgbGluZSA9IHN1YnN0aXR1dGUoZ2V0bGluZShsbnVtKSwgJ1xjXChcW1teXV0qXVwoXHMqb2ZccypcfDpcKSpcKVwrJywgJyAnLCAnZycpCisgIGVuZHcKKyAgIiBpZiB3ZSBoaXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIHRoZW4gZiA9IC0xLCByZXR1cm4gMSAoZm9ybXVsYSkKKyAgcmV0dXJuIGYgIT0gMAorZW5kZgorCitmdW4hIENkbEdldEluZGVudChsbnVtKQorICBsZXQgdGhpc2xpbmUgPSBnZXRsaW5lKGE6bG51bSkKKyAgaWYgbWF0Y2godGhpc2xpbmUsICdeXHMqXChca1wrXHxcW1teXV0qXVwpXHMqXCgsXHw7XHMqJFwpJykgPj0gMAorICAgICIgaXQncyBhbiBhdHRyaWJ1dGVzIGxpbmUKKyAgICByZXR1cm4gJnN3CisgIGVsc2VpZiBtYXRjaCh0aGlzbGluZSwgJ15cY1xzKlwoW3t9XVx8XC9bKi9dXHxkaW1lbnNpb25cfHNjaGVkdWxlXHxncm91cFx8aGllcmFyY2h5XHxjbGFzc1wpJykgPj0gMAorICAgICIgaXQncyBhIGhlYWRlciBvciAneycgb3IgJ30nIG9yIGEgY29tbWVudAorICAgIHJldHVybiAwCisgIGVuZAorCisgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKGE6bG51bS0xKQorICAiIEhpdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUsIHVzZSB6ZXJvIGluZGVudC4KKyAgaWYgbG51bSA9PSAwCisgICAgcmV0dXJuIDAKKyAgZW5kaWYKKworICAiIFBSRVZJT1VTIExJTkUKKyAgbGV0IGluZCA9IGluZGVudChsbnVtKQorICBsZXQgbGluZSA9IGdldGxpbmUobG51bSkKKyAgbGV0IGYgPSAtMSAiIHdldGhlciBhICc9JyBpcyBhIGNvbmRpdGlvbmFsIG9yIGEgYXNpZ25tZW50LCAtMSBtZWFucyB3ZSBkb24ndCBrbm93IHlldAorICAiIG9uZSAnY2xvc2luZycgZWxlbWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lIGhhcyBhbHJlYWR5IHJlZHVjZWQgdGhlCisgICIgICBpbmRlbnQsIGJ1dCAnZWxzZScsICdlbHNlaWYnICYgJ3RoZW4nIGluY3JlbWVudCBpdCBmb3IgdGhlIG5leHQgbGluZQorICAiICc9JyBhdCB0aGUgYmVnaW5uaW5nIGhhcyBhbHJlYWR5IGRlIHJpZ2h0IGluZGVudCAoaW5jcmVhc2VkIGZvciBhc2lnbm1lbnRzKQorICBsZXQgaW5pY2lvID0gbWF0Y2hlbmQobGluZSwgJ15cY1xzKlwoZWxzZVxhKlx8dGhlblx8ZW5kaWZcfC9bKi9dXHxbKTs9e11cKScpCisgIGlmIGluaWNpbyA+IDAKKyAgICBsZXQgYyA9IGxpbmVbaW5pY2lvLTFdCisgICAgIiAnKScgYW5kICc9JyBkb24ndCBjaGFuZ2UgaW5kZW50IGFuZCBhcmUgdXNlbGVzcyB0byBzZXQgJ2YnCisgICAgaWYgYyA9PSAneycKKyAgICAgIHJldHVybiAmc3cKKyAgICBlbHNlaWYgYyAhPSAnKScgJiYgYyAhPSAnPScKKyAgICAgIGxldCBmID0gMSAiIGFsbCBidXQgJ2Vsc2VpZicgYXJlIGZvbGxvd2VkIGJ5IGEgZm9ybXVsYQorICAgICAgaWYgYyA9PT8gJ24nIHx8IGMgPT0/ICdlJyAiICd0aGVuJywgJ2Vsc2UnCisJbGV0IGluZCA9IGluZCArICZzdworICAgICAgZWxzZWlmIHN0cnBhcnQobGluZSwgaW5pY2lvLTYsIDYpID09PyAnZWxzZWlmJyAiIGVsc2VpZiwgc2V0IGYgdG8gY29uZGl0aW9uYWwKKwlsZXQgaW5kID0gaW5kICsgJnN3CisJbGV0IGYgPSAwCisgICAgICBlbmQKKyAgICBlbmQKKyAgZW5kCisKKyAgIiByZW1vdmUgbWVtYmVycyBbYV0gb2YgW2JdOltjXS4uLiAoaW5pY2lvIHJlbWFpbmRzIHZhbGlkKQorICBsZXQgbGluZSA9IHN1YnN0aXR1dGUobGluZSwgJ1xjXChcW1teXV0qXVwoXHMqb2ZccypcfDpcKSpcKVwrJywgJyAnLCAnZycpCisgIHdoaWxlIDEKKyAgICAiIHNlYXJjaCBmb3IgdGhlIG5leHQgaW50ZXJlc3RpbmcgZWxlbWVudAorICAgIGxldCBpbmljaW89bWF0Y2hlbmQobGluZSwgJ1xjXDxpZlx8ZW5kaWZcfFsoKT07XScsIGluaWNpbykKKyAgICBpZiBpbmljaW8gPCAwCisgICAgICBicmVhaworICAgIGVuZAorCisgICAgbGV0IGMgPSBsaW5lW2luaWNpby0xXQorICAgICIgJ2V4cHIoLi4uKScgY29udGFpbmluZyB0aGUgZm9ybXVsYQorICAgIGlmIHN0cnBhcnQobGluZSwgaW5pY2lvLTUsIDUpID09PyAnZXhwcignCisgICAgICBsZXQgaW5kID0gMAorICAgICAgbGV0IGYgPSAxCisgICAgZWxzZWlmIGMgPT0gJyknIHx8IGM9PSAnOycgfHwgc3RycGFydChsaW5lLCBpbmljaW8tNSwgNSkgPT0/ICdlbmRpZicKKyAgICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICBlbHNlaWYgYyA9PSAnKCcgfHwgYyA9PT8gJ2YnICIgJygnIG9yICdpZicKKyAgICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICBlbHNlICIgYyA9PSAnPScKKyAgICAgICIgaWYgaXQgaXMgYW4gYXNpZ25tZW50IGluY3JlYXNlIGluZGVudAorICAgICAgaWYgZiA9PSAtMSAiIHdlIGRvbid0IGtub3cgeWV0LCBmaW5kIG91dAorCWxldCBmID0gQ2RsQXNpZ25tZW50KGxudW0sIHN0cnBhcnQobGluZSwgMCwgaW5pY2lvKSkKKyAgICAgIGVuZAorICAgICAgaWYgZiA9PSAxICIgZm9ybXVsYSBpbmNyZWFzZSBpdAorCWxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICAgIGVuZAorICAgIGVuZAorICBlbmR3CisKKyAgIiBDVVJSRU5UIExJTkUsIGlmIGl0IHN0YXJ0cyB3aXRoIGEgY2xvc2luZyBlbGVtZW50LCBkZWNyZWFzZSBpbmRlbnQKKyAgIiBvciBpZiBpdCBzdGFydHMgd2l0aCAnPScgKGFzaWdubWVudCksIGluY3JlYXNlIGluZGVudAorICBpZiBtYXRjaCh0aGlzbGluZSwgJ15cY1xzKlwoZWxzZVx8dGhlblx8ZW5kaWZcfFspO11cKScpID49IDAKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVsc2VpZiBtYXRjaCh0aGlzbGluZSwgJ15ccyo9JykgPj0gMAorICAgIGlmIGYgPT0gLTEgIiB3ZSBkb24ndCBrbm93IHlldCBpZiBpcyBhbiBhc2lnbm1lbnQsIGZpbmQgb3V0CisgICAgICBsZXQgZiA9IENkbEFzaWdubWVudChsbnVtLCAiIikKKyAgICBlbmQKKyAgICBpZiBmID09IDEgIiBmb3JtdWxhIGluY3JlYXNlIGl0CisgICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgZW5kCisgIGVuZAorCisgIHJldHVybiBpbmQKK2VuZGZ1bgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvY2gudmltIGIvcnVudGltZS9pbmRlbnQvY2gudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZDU4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9jaC52aW0KQEAgLTAsMCArMSwxOCBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CUNoCisiIE1haW50YWluZXI6ICAgU29mdEludGVncmF0aW9uLCBJbmMuIDxpbmZvQHNvZnRpbnRlZ3JhdGlvbi5jb20+CisiIFVSTDogICAgICAgICAgaHR0cDovL3d3dy5zb2Z0aW50ZWdyYXRpb24uY29tL2Rvd25sb2FkL3ZpbS9pbmRlbnQvY2gudmltCisiIExhc3QgY2hhbmdlOiAgMjAwMyBBdWcgMDUKKyIgICAgICAgICAgICAgICBDcmVhdGVkIGJhc2VkIG9uIGNwcC52aW0KKyIKKyIgQ2ggaXMgYSBDL0MrKyBpbnRlcnByZXRlciB3aXRoIG1hbnkgaGlnaCBsZXZlbCBleHRlbnNpb25zCisKKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCisiIENoIGluZGVudGluZyBpcyBidWlsdC1pbiwgdGh1cyB0aGlzIGlzIHZlcnkgc2ltcGxlCitzZXRsb2NhbCBjaW5kZW50CmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9jb25maWcudmltIGIvcnVudGltZS9pbmRlbnQvY29uZmlnLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTgwM2VkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvY29uZmlnLnZpbQpAQCAtMCwwICsxLDg1IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJICAgIEF1dG9jb25mIGNvbmZpZ3VyZS57YWMsaW59IGZpbGUKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL2luZGVudC9wY3AvY29uZmlnLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA0LTI1CisiIGFyY2gtdGFnOgkgICAgNzc3OWMzNDEtNzk2Zi00MDhlLTgwZTQtYTU1YzI2YjUxOWE0CisiIFRPRE86CQkgICAgaG93IGFib3V0IG5lc3RlZCBbKCldJ3MgaW4gb25lIGxpbmUKKyIJCSAgICB3aGF0J3Mgd3Jvbmcgd2l0aCAnXFxcQCEnPworCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCitzb3VyY2UgPHNmaWxlPjpwOmgvc2gudmltICAgICAgICIgd2lsbCBzZXQgYjpkaWRfaW5kZW50CisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0Q29uZmlnSW5kZW50KCkKK3NldGxvY2FsIGluZGVudGtleXM9IV5GLG8sTyw9dGhlbiw9ZG8sPWVsc2UsPWVsaWYsPWVzYWMsPWZpLD1maW4sPWZpbCw9ZG9uZQorCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0Q29uZmlnSW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCisiIGdldCB0aGUgb2Zmc2V0IChpbmRlbnQpIG9mIHRoZSBlbmQgb2YgdGhlIG1hdGNoIG9mICdyZWdleHAnIGluICdsaW5lJworZnVuY3Rpb24gczpHZXRPZmZzZXRPZihsaW5lLCByZWdleHApCisgIGxldCBlbmQgPSBtYXRjaGVuZChhOmxpbmUsIGE6cmVnZXhwKQorICBsZXQgd2lkdGggPSAwCisgIGxldCBpID0gMAorICB3aGlsZSBpIDwgZW5kCisgICAgaWYgYTpsaW5lW2ldICE9ICJcdCIKKyAgICAgIGxldCB3aWR0aCA9IHdpZHRoICsgMQorICAgIGVsc2UKKyAgICAgIGxldCB3aWR0aCA9IHdpZHRoICsgJnRzIC0gKHdpZHRoICUgJnRzKQorICAgIGVuZGlmCisgICAgbGV0IGkgPSBpICsgMQorICBlbmR3aGlsZQorICByZXR1cm4gd2lkdGgKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIEdldENvbmZpZ0luZGVudCgpCisgICIgRmluZCBhIG5vbi1ibGFuayBsaW5lIGFib3ZlIHRoZSBjdXJyZW50IGxpbmUuCisgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisKKyAgIiBIaXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCB1c2UgemVybyBpbmRlbnQuCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgIiB3aGVyZSB0byBwdXQgdGhpcworICBsZXQgaW5kID0gR2V0U2hJbmRlbnQoKQorICBsZXQgbGluZSA9IGdldGxpbmUobG51bSkKKworICAiIGlmIHByZXZpb3VzIGxpbmUgaGFzIHVubWF0Y2hlZCwgdW5lc2NhcGVkIG9wZW5pbmcgcGFyZW50aGVzZXMsCisgICIgaW5kZW50IHRvIGl0cyBwb3NpdGlvbi4gVE9ETzogbm90IGZhaWxzYWZlIGlmIG11bHRpcGxlICgncworICBpZiBsaW5lID1+ICdcXFxAPCEoW14pXSokJworICAgIGxldCBpbmQgPSBzOkdldE9mZnNldE9mKGxpbmUsICdcXFxAISgnKQorICBlbmRpZgorCisgICIgaWYgcHJldmlvdXMgbGluZSBoYXMgdW5tYXRjaGVkIG9wZW5pbmcgYnJhY2tldCwKKyAgIiBpbmRlbnQgdG8gaXRzIHBvc2l0aW9uLiBUT0RPOiBzYW1lIGFzIGFib3ZlCisgIGlmIGxpbmUgPX4gJ1xbW15dXSokJworICAgIGxldCBpbmQgPSBzOkdldE9mZnNldE9mKGxpbmUsICdcWycpCisgIGVuZGlmCisKKyAgIiBpZiBwcmV2aW91cyBsaW5lIGhhZCBhbiB1bm1hdGNoZWQgY2xvc2luZyBwYXJhbnRoZXNlcywKKyAgIiBpbmRlbnQgdG8gdGhlIG1hdGNoaW5nIG9wZW5pbmcgcGFyYW50aGVzZXMKKyAgaWYgbGluZSA9fiAnW14oXSpcXFxAPCEpJCcKKyAgICBjYWxsIHNlYXJjaCgnKScsICdiVycpCisgICAgbGV0IGxudW0gPSBzZWFyY2hwYWlyKCdcXFxAPCEoJywgJycsICcpJywgJ2JXbicpCisgICAgbGV0IGluZCA9IGluZGVudChsbnVtKQorICBlbmRpZgorCisgICIgaWYgcHJldmlvdXMgbGluZSBoYWQgYW4gdW5tYXRjaGVkIGNsb3NpbmcgYnJhY2tldCwKKyAgIiBpbmRlbnQgdG8gdGhlIG1hdGNoaW5nIG9wZW5pbmcgYnJhY2tldAorICBpZiBsaW5lID1+ICdbXltdKl0kJworICAgIGNhbGwgc2VhcmNoKCddJywgJ2JXJykKKyAgICBsZXQgbG51bSA9IHNlYXJjaHBhaXIoJ1xbJywgJycsICddJywgJ2JXbicpCisgICAgbGV0IGluZCA9IGluZGVudChsbnVtKQorICBlbmRpZgorCisgIHJldHVybiBpbmQKK2VuZGZ1bmN0aW9uCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2NwcC52aW0gYi9ydW50aW1lL2luZGVudC9jcHAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZTEyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9jcHAudmltCkBAIC0wLDAgKzEsMTMgQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOglDKysKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgSnVuIDEyCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICAgZmluaXNoCitlbmRpZgorbGV0IGI6ZGlkX2luZGVudCA9IDEKKworIiBDKysgaW5kZW50aW5nIGlzIGJ1aWx0LWluLCB0aHVzIHRoaXMgaXMgdmVyeSBzaW1wbGUKK3NldGxvY2FsIGNpbmRlbnQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2NzLnZpbSBiL3J1bnRpbWUvaW5kZW50L2NzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjRhYjAwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvY3MudmltCkBAIC0wLDAgKzEsMTMgQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOglDIworIiBNYWludGFpbmVyOglKb2hhbm5lcyBaZWxsbmVyIDxqb2hhbm5lc0B6ZWxsbmVyLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CUZyaSwgMTUgTWFyIDIwMDIgMDc6NTM6NTQgQ0VUCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICAgZmluaXNoCitlbmRpZgorbGV0IGI6ZGlkX2luZGVudCA9IDEKKworIiBDIyBpcyBsaWtlIGluZGVudGluZyBDCitzZXRsb2NhbCBjaW5kZW50CmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9jc3MudmltIGIvcnVudGltZS9pbmRlbnQvY3NzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTBjNzI1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvY3NzLnZpbQpAQCAtMCwwICsxLDc5IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJICAgIENTUworIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vaW5kZW50L3BjcC9jc3MvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDQtMjUKKyIgYXJjaC10YWc6CSAgICBjY2ZkNzdhMC0xYzlhLTQzZjctYTQwNy1iYmU3MDQ1NDE0NDIKKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgIGZpbmlzaAorZW5kaWYKKworbGV0IGI6ZGlkX2luZGVudCA9IDEKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRDU1NJbmRlbnQoKQorc2V0bG9jYWwgaW5kZW50a2V5cy09OiwwIyBpbmRlbnRrZXlzLT1lCisKKyIgT25seSBkZWZpbmUgdGhlIGZ1bmN0aW9uIG9uY2UuCitpZiBleGlzdHMoIipHZXRDU1NJbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2Z1bmN0aW9uISBzOkxvb2t1cExpbmUobG51bSkKKyAgIiBmaW5kIGEgbm9uLWJsYW5rIGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZQorICBsZXQgbG51bSA9IHByZXZub25ibGFuayhhOmxudW0gLSAxKQorCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCisKKyAgIiBpZiB0aGUgbGluZSBoYXMgYW4gZW5kIGNvbW1lbnQgc2VxdWVuY2Ugd2UgbmVlZCB0byBmaW5kIGEgbGluZQorICAiIHRoYXQgaXNuJ3QgYWZmZWN0ZWQgYnkgdGhlIGNvbW1lbnQuCisgIGlmIGxpbmUgPX4gJ1wqLycKKyAgICB3aGlsZSBsaW5lICF+ICcvXConCisgICAgICBsZXQgbG51bSA9IGxudW0gLSAxCisgICAgICBsZXQgbGluZSA9IGdldGxpbmUobG51bSkKKyAgICBlbmR3aGlsZQorICBlbmRpZgorCisgICIgaWYgdGhlIGxpbmUgd2UgZm91bmQgb25seSBjb250YWluZWQgdGhlIGNvbW1lbnQgYW5kIHdoaXRlc3BhY2UKKyAgIiB3ZSBuZWVkIHRvIGZpbmQgYW5vdGhlciBsaW5lIHRvIHVzZS4uLgorICBpZiBsaW5lID1+ICdeXHMqL1wqJworICAgIHJldHVybiBzOkxvb2t1cExpbmUobG51bSkKKyAgZWxzZQorICAgIHJldHVybiBsbnVtCisgIGVuZGlmCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiBHZXRDU1NJbmRlbnQoKQorICBsZXQgbG51bSA9IHM6TG9va3VwTGluZSh2OmxudW0pCisKKyAgaWYgbG51bSA9PSAwCisgICAgcmV0dXJuIDAKKyAgZW5kaWYKKworICAiIHJlbW92ZSBjb21tZW50ZWQgc3R1ZmYgZnJvbSBsaW5lCisgIGxldCBsaW5lID0gc3Vic3RpdHV0ZShnZXRsaW5lKGxudW0pLCAnL1wqLlwqLycsICcnLCAnZWcnKQorCisgIGxldCBpbmQgPSBpbmRlbnQobG51bSkKKworICAiIGNoZWNrIGZvciBvcGVuaW5nIGJyYWNlIG9uIHRoZSBwcmV2aW91cyBsaW5lCisgICIgc2tpcCBpZiBpdCBhbHNvIGNvbnRhaW5zIGEgY2xvc2luZyBicmFjZS4uLgorICBpZiBsaW5lID1+ICd7XCguKn1cKVxAIScKKyAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgIGVuZGlmCisKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKHY6bG51bSkKKworICAiIGNoZWNrIGZvciBjbG9zaW5nIGJyYWNlIGZpcnN0IG9uIGN1cnJlbnQgbGluZQorICBpZiBsaW5lID1+ICdeXHMqfScKKyAgICBsZXQgaW5kCT0gaW5kIC0gJnN3CisgIGVuZGlmCisKKyAgcmV0dXJuIGluZAorZW5kZnVuY3Rpb24KKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvZG9jYmsudmltIGIvcnVudGltZS9pbmRlbnQvZG9jYmsudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiODA3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9kb2Niay52aW0KQEAgLTAsMCArMSwxMyBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBEb2NCb29rIERvY3VtZW50YXRpb24gRm9ybWF0CisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9pbmRlbnQvcGNwL2RvY2JrLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTIyCisiIGFyY2gtdGFnOgkgICAgM2QwNzNhZjctMWQ2OS00MmEyLTk5YWQtOWE0OWEyMWViMjhmCisKKyIgU2FtZSBhcyBYTUwgaW5kZW50aW5nIGZvciBub3cuCitydW50aW1lISBpbmRlbnQveG1sLnZpbQorCitzZXRsb2NhbCBpbmRlbnRleHByPVhtbEluZGVudEdldCh2OmxudW0sMCkKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvZHlsYW4udmltIGIvcnVudGltZS9pbmRlbnQvZHlsYW4udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZmNiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9keWxhbi52aW0KQEAgLTAsMCArMSw5MCBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CUR5bGFuCisiIFZlcnNpb246CTAuMDEKKyIgTGFzdCBDaGFuZ2U6CTIwMDMgRmViIDA0CisiIE1haW50YWluZXI6CUJyZW50IEEuIEZ1bGdoYW0gPGJmdWxnaGFtQGRlYmlhbi5vcmc+CisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCitzZXRsb2NhbCBpbmRlbnRrZXlzKz09fmJlZ2luLD1+YmxvY2ssPX5jYXNlLD1+Y2xlYW51cCw9fmRlZmluZSw9fmVuZCw9fmVsc2UsPX5lbHNlaWYsPX5leGNlcHRpb24sPX5mb3IsPX5maW5hbGx5LD1+aWYsPX5vdGhlcndpc2UsPX5zZWxlY3QsPX51bmxlc3MsPX53aGlsZQorCisiIERlZmluZSB0aGUgYXBwcm9wcmlhdGUgaW5kZW50IGZ1bmN0aW9uIGJ1dCBvbmx5IG9uY2UKK3NldGxvY2FsIGluZGVudGV4cHI9RHlsYW5HZXRJbmRlbnQoKQoraWYgZXhpc3RzKCIqRHlsYW5HZXRJbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2Z1bmN0aW9uIER5bGFuR2V0SW5kZW50KCkKKyAgIiBHZXQgdGhlIGxpbmUgdG8gYmUgaW5kZW50ZWQKKyAgbGV0IGNsaW5lID0gZ2V0bGluZSh2OmxudW0pCisKKyAgIiBEb24ndCByZWluZGVudCBjb21tZW50cyBvbiBmaXJzdCBjb2x1bW4KKyAgaWYgY2xpbmUgPX4gJ14vXFsvXCpdJworICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgIkZpbmQgdGhlIHByZXZpb3VzIG5vbi1ibGFuayBsaW5lCisgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisgICJVc2UgemVybyBpbmRlbnQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZQorICBpZiBsbnVtID09IDAKKyAgICByZXR1cm4gMAorICBlbmRpZgorCisgIGxldCBwcmV2bGluZT1nZXRsaW5lKGxudW0pCisgIGxldCBpbmQgPSBpbmRlbnQobG51bSkKKyAgbGV0IGNoZyA9IDAKKworICAiIElmIHByZXZpb3VzIGxpbmUgd2FzIGEgY29tbWVudCwgdXNlIGl0cyBpbmRlbnQKKyAgaWYgcHJldmxpbmUgPX4gJ15ccyovLycKKyAgICByZXR1cm4gaW5kCisgIGVuZGlmCisKKyAgIiBJZiBwcmV2aW91cyBsaW5lIHdhcyBhICdkZWZpbmUnLCBpbmRlbnQKKyAgaWYgcHJldmxpbmUgPX4/ICdcKF5ccypcKGJlZ2luXHxibG9ja1x8Y2FzZVx8ZGVmaW5lXHxlbHNlXHxlbHNlaWZcfGZvclx8ZmluYWxseVx8aWZcfHNlbGVjdFx8dW5sZXNzXHx3aGlsZVwpXHxccypcUypccyo9PiRcKScKKyAgICBsZXQgY2hnID0gJnN3CisgICIgbG9jYWwgbWV0aG9kcyBpbmRlbnQgdGhlIHNoaWZ0LXdpZHRoLCBwbHVzIDYgZm9yIHRoZSAnbG9jYWwnCisgIGVsc2VpZiBwcmV2bGluZSA9fj8gJ15ccypsb2NhbCcKKyAgICBsZXQgY2hnID0gJnN3ICsgNgorICAiIElmIHByZXZpb3VzIGxpbmUgd2FzIGEgbGV0IHdpdGggbm8gY2xvc2luZyBzZW1pY29sb24sIGluZGVudAorICBlbHNlaWYgcHJldmxpbmUgPX4/ICdeXHMqbGV0LipbXjtdXHMqJCcKKyAgICBsZXQgY2hnID0gJnN3CisgICIgSWYgcHJldmlvdXMgbGluZSBvcGVuZWQgYSBwYXJlbnRoZXNpcywgYW5kIGRpZCBub3QgY2xvc2UgaXQsIGluZGVudAorICBlbHNlaWYgcHJldmxpbmUgPX4gJ14uKihccypbXildKlwoKC4qKVwpKlteKV0qJCcKKyAgICByZXR1cm4gPSBtYXRjaCggcHJldmxpbmUsICcoLipcKCguKilcfFteKV1cKSouKiQnKSArIDEKKyAgImVsc2VpZiBwcmV2bGluZSA9fiAnXi4qKFxzKlteKV0qXCgoLiopXCkqW14pXSokJworICBlbHNlaWYgcHJldmxpbmUgPX4gJ15bXihdKilccyokJworICAgICIgVGhpcyBsaW5lIGNsb3NlcyBhIHBhcmVudGhlc2lzLiAgRmluZCBvcGVuaW5nCisgICAgbGV0IGN1cnJfbGluZSA9IHByZXZub25ibGFuayhsbnVtIC0gMSkKKyAgICB3aGlsZSBjdXJyX2xpbmUgPj0gMAorICAgICAgbGV0IHN0ciA9IGdldGxpbmUoY3Vycl9saW5lKQorICAgICAgaWYgc3RyICF+ICdeLiooXHMqW14pXSpcKCguKilcKSpbXildKiQnCisJbGV0IGN1cnJfbGluZSA9IHByZXZub25ibGFuayhjdXJyX2xpbmUgLSAxKQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBlbmRpZgorICAgIGVuZHdoaWxlCisgICAgaWYgY3Vycl9saW5lIDwgMAorICAgICAgcmV0dXJuIC0xCisgICAgZW5kaWYKKyAgICBsZXQgaW5kID0gaW5kZW50KGN1cnJfbGluZSkKKyAgICAiIEFsdGhvdWdoIHdlIGZvdW5kIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzLCBtYWtlIHN1cmUgdGhpcworICAgICIgbGluZSBkb2Vzbid0IHN0YXJ0IHdpdGggYW4gaW5kZW50YWJsZSBjb21tYW5kOgorICAgIGxldCBjdXJyX3N0ciA9IGdldGxpbmUoY3Vycl9saW5lKQorICAgIGlmIGN1cnJfc3RyID1+PyAnXlxzKlwoYmVnaW5cfGJsb2NrXHxjYXNlXHxkZWZpbmVcfGVsc2VcfGVsc2VpZlx8Zm9yXHxmaW5hbGx5XHxpZlx8c2VsZWN0XHx1bmxlc3NcfHdoaWxlXCknCisgICAgICBsZXQgY2hnID0gJnN3CisgICAgZW5kaWYKKyAgZW5kaWYKKworICAiIElmIGEgbGluZSBzdGFydHMgd2l0aCBlbmQsIHVuLWluZGVudCAoZXZlbiBpZiB3ZSBqdXN0IGluZGVudGVkISkKKyAgaWYgY2xpbmUgPX4/ICdeXHMqXChjbGVhbnVwXHxlbmRcfGVsc2VcfGVsc2VpZlx8ZXhjZXB0aW9uXHxmaW5hbGx5XHxvdGhlcndpc2VcKScKKyAgICBsZXQgY2hnID0gY2hnIC0gJnN3CisgIGVuZGlmCisKKyAgcmV0dXJuIGluZCArIGNoZworZW5kZnVuY3Rpb24KKworIiB2aW06c3c9MiB0dz0xMzAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2VpZmZlbC52aW0gYi9ydW50aW1lL2luZGVudC9laWZmZWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMzFkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9laWZmZWwudmltCkBAIC0wLDAgKzEsMTA2IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJRWlmZmVsCisiIE1haW50YWluZXI6CURhdmlkIENsYXJrZSA8Z2FkaWNhdGhAZGlzaGV2ZWxsZWQubmV0PgorIiAkRGF0ZSQKKyIgJFJldmlzaW9uJAorIiBVUkw6IGh0dHA6Ly9nYWRpY2F0aC53ZWJob3AubmV0L290aGVyL2VpZmZlbC52aW0KKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0RWlmZmVsSW5kZW50KCkKK3NldGxvY2FsIG5vbGlzcAorc2V0bG9jYWwgbm9zbWFydGluZGVudAorc2V0bG9jYWwgbm9jaW5kZW50CitzZXRsb2NhbCBhdXRvaW5kZW50CitzZXRsb2NhbCBjb21tZW50cz06LS0KK3NldGxvY2FsIGluZGVudGtleXMrPT1lbmQsPWVsc2UsPWVuc3VyZSw9cmVxdWlyZSw9Y2hlY2ssPWxvb3AsPXVudGlsCitzZXRsb2NhbCBpbmRlbnRrZXlzKz09Y3JlYXRpb24sPWZlYXR1cmUsPWluaGVyaXQsPWNsYXNzLD1pcyw9cmVkZWZpbmUsPXJlbmFtZSw9dmFyaWFudAorc2V0bG9jYWwgaW5kZW50a2V5cys9PWludmFyaWFudCw9ZG8sPWxvY2FsLD1leHBvcnQKK3NldGxvY2FsIHN3PTMKK3NldGxvY2FsIHR3PTc4CisKKyIgRGVmaW5lIHNvbWUgc3R1ZmYKKyIga2V5d29yZHMgZ3JvdXBlZCBieSBpbmRlbnRpbmcKK2xldCBzOnRydXN0X3VzZXJfaW5kZW50ID0gJ1woK1wpXChccypcKC0tXCkuKlwpXD0kJworbGV0IHM6cmVsYXRpdmVfaW5kZW50ID0gJ15ccypcKGRlZmVycmVkXHxjbGFzc1x8ZmVhdHVyZVx8Y3JlYXRpb25cfGluaGVyaXRcfGxvb3BcfGZyb21cfHVudGlsXHxpZlx8ZWxzZVx8ZWxzZWlmXHxlbnN1cmVcfHJlcXVpcmVcfGNoZWNrXHxkb1x8bG9jYWxcfGludmFyaWFudFx8dmFyaWFudFx8cmVuYW1lXHxyZWRlZmluZVx8ZG9cfGV4cG9ydFwpXD4nCitsZXQgczpvdXRkZW50ID0gJ15ccypcKGVsc2VcfGludmFyaWFudFx8dmFyaWFudFx8ZG9cfHJlcXVpcmVcfHVudGlsXHxsb29wXHxsb2NhbFwpXD4nCitsZXQgczpub19pbmRlbnQgPSAnXlxzKlwoY2xhc3NcfGZlYXR1cmVcfGNyZWF0aW9uXHxpbmhlcml0XClcPicKK2xldCBzOnNpbmdsZV9kZW50ID0gJ15bXi1dXCtbWzphbG51bTpdXVwrIGlzXChccypcKC0tXCkuKlwpXD0kJworbGV0IHM6aW5oZXJpdGFuY2VfZGVudCA9ICdccypcKHJlZGVmaW5lXHxyZW5hbWVcfGV4cG9ydFwpXD4nCisKKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldEVpZmZlbEluZGVudCIpCisgIGZpbmlzaAorZW5kaWYKKworZnVuY3Rpb24gR2V0RWlmZmVsSW5kZW50KCkKKworICAiIEVpZmZlbCBDbGFzcyBpbmRlbnRpbmcKKyAgIgorICAiIEZpbmQgYSBub24tYmxhbmsgbGluZSBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorICBsZXQgbG51bSA9IHByZXZub25ibGFuayh2OmxudW0gLSAxKQorCisgICIgQXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIHVzZSB6ZXJvIGluZGVudC4KKyAgaWYgbG51bSA9PSAwCisgICAgcmV0dXJuIDAKKyAgZW5kaWYKKworICAiIHRydXN0IHRoZSB1c2VyJ3MgaW5kZW50aW5nCisgIGlmIGdldGxpbmUobG51bSkgPX4gczp0cnVzdF91c2VyX2luZGVudAorICAgIHJldHVybiAtMQorICBlbmRpZgorCisgICIgQWRkIGEgJ3NoaWZ0d2lkdGgnIGFmdGVyIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCBhbiBpbmRlbnQgd29yZAorICBsZXQgaW5kID0gaW5kZW50KGxudW0pCisgIGlmIGdldGxpbmUobG51bSkgPX4gczpyZWxhdGl2ZV9pbmRlbnQKKyAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgIGVuZGlmCisKKyAgIiBJbmRlbnQgdG8gc2luZ2xlIGluZGVudAorICBpZiBnZXRsaW5lKHY6bG51bSkgPX4gczpzaW5nbGVfZGVudCAmJiBnZXRsaW5lKHY6bG51bSkgIX4gczpyZWxhdGl2ZV9pbmRlbnQKKwkgICBcICYmIGdldGxpbmUodjpsbnVtKSAhfiAnXHMqXDxcKGFuZFx8b3JcfGltcGxpZXNcKVw+JworICAgICBsZXQgaW5kID0gJnN3CisgIGVuZGlmCisKKyAgIiBJbmRlbnQgdG8gZG91YmxlIGluZGVudAorICBpZiBnZXRsaW5lKHY6bG51bSkgPX4gczppbmhlcml0YW5jZV9kZW50CisgICAgIGxldCBpbmQgPSAyICogJnN3CisgIGVuZGlmCisKKyAgIiBJbmRlbnQgbGluZSBhZnRlciB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbgorICBpZiBnZXRsaW5lKGxudW0pID1+IHM6c2luZ2xlX2RlbnQKKyAgICAgbGV0IGluZCA9IGluZCArICZzdworICBlbmRpZgorCisgICIgVGhlIGZvbGxvd2luZyBzaG91bGQgYWx3YXlzIGJlIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUsIG5vIGluZGVudGluZworICBpZiBnZXRsaW5lKHY6bG51bSkgPX4gczpub19pbmRlbnQKKyAgICAgbGV0IGluZCA9IDAKKyAgZW5kaWYKKworICAiIFN1YnRyYWN0IGEgJ3NoaWZ0d2lkdGgnLCBpZiB0aGlzIGlzbid0IHRoZSBmaXJzdCB0aGluZyBhZnRlciB0aGUgJ2lzJworICAiIG9yIGZpcnN0IHRoaW5nIGFmdGVyIHRoZSAnZG8nCisgIGlmIGdldGxpbmUodjpsbnVtKSA9fiBzOm91dGRlbnQgJiYgZ2V0bGluZSh2OmxudW0gLSAxKSAhfiBzOnNpbmdsZV9kZW50CisJXCAmJiBnZXRsaW5lKHY6bG51bSAtIDEpICF+ICdeXHMqZG9cPicKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVuZGlmCisKKyAgIiBTdWJ0cmFjdCBhIHNoaWZ0d2lkdGggZm9yIGVuZCBzdGF0ZW1lbnRzCisgIGlmIGdldGxpbmUodjpsbnVtKSA9fiAnXlxzKmVuZFw+JworICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgZW5kaWYKKworICAiIHNldCBpbmRlbnQgb2YgemVybyBlbmQgc3RhdGVtZW50cyB0aGF0IGFyZSBhdCBhbiBpbmRlbnQgb2YgMywgdGhpcyBzaG91bGQKKyAgIiBvbmx5IGV2ZXIgYmUgdGhlIGNsYXNzJ3MgZW5kLgorICBpZiBnZXRsaW5lKHY6bG51bSkgPX4gJ15ccyplbmRcPicgJiYgaW5kID09IDMKKyAgICBsZXQgaW5kID0gMAorICBlbmRpZgorCisgIHJldHVybiBpbmQKK2VuZGZ1bmN0aW9uCisKKyIgdmltOnN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2V0ZXJtLnZpbSBiL3J1bnRpbWUvaW5kZW50L2V0ZXJtLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTdiYTE4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvZXRlcm0udmltCkBAIC0wLDAgKzEsNDkgQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOgkgICAgRXRlcm0gY29uZmlndXJhdGlvbiBmaWxlCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9pbmRlbnQvcGNwL2V0ZXJtLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA0LTI1CisiIGFyY2gtdGFnOgkgICAgYTIyYTkyYjEtYzU5Zi00ZjQ3LTgyMDctYjIxZGI2NTQ5YjIxCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0RXRlcm1JbmRlbnQoKQorc2V0bG9jYWwgaW5kZW50a2V5cz0hXkYsbyxPLD1lbmQKKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldEV0ZXJtSW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCitmdW5jdGlvbiBHZXRFdGVybUluZGVudCgpCisgICIgRmluZCBhIG5vbi1ibGFuayBsaW5lIGFib3ZlIHRoZSBjdXJyZW50IGxpbmUuCisgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisKKyAgIiBIaXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCB1c2UgemVybyBpbmRlbnQuCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCisgIGxldCBpbmQgPSBpbmRlbnQobG51bSkKKworICBpZiBsaW5lID1+ICdeXHMqYmVnaW5cPicKKyAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgIGVuZGlmCisKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKHY6bG51bSkKKworICAiIENoZWNrIGZvciBjbG9zaW5nIGJyYWNlIG9uIGN1cnJlbnQgbGluZQorICBpZiBsaW5lID1+ICdeXHMqZW5kXD4nCisgICAgbGV0IGluZCA9IGluZCAtICZzdworICBlbmRpZgorCisgIHJldHVybiBpbmQKK2VuZGZ1bmN0aW9uCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2ZvcnRyYW4udmltIGIvcnVudGltZS9pbmRlbnQvZm9ydHJhbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0MjczYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L2ZvcnRyYW4udmltCkBAIC0wLDAgKzEsMTYxIEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJRm9ydHJhbjk1IChhbmQgRm9ydHJhbjkwLCBGb3J0cmFuNzcsIEYgYW5kIGVsZjkwKQorIiBWZXJzaW9uOgkwLjM2CisiIFVSTDoJCWh0dHA6Ly93d3cudW5iLmNhL2NoZW0vYWppdC9pbmRlbnQvZm9ydHJhbi52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgQXByLiAwNQorIiBNYWludGFpbmVyOglBaml0IEouIFRoYWtrYXIgPGFqaXRAdW5iLmNhPjsgPGh0dHA6Ly93d3cudW5iLmNhL2NoZW0vYWppdC8+CisiIFVzYWdlOglEbyA6aGVscCBmb3J0cmFuLWluZGVudCBmcm9tIFZpbQorCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorbGV0IGI6ZGlkX2luZGVudCA9IDEKKworbGV0IHM6Y3Bvc2V0PSZjcG9wdGlvbnMKK3NldCBjcG9wdGlvbnMtPUMKKworc2V0bG9jYWwgaW5kZW50a2V5cys9PX5lbmQsPX5jYXNlLD1+aWYsPX5lbHNlLD1+ZG8sPX53aGVyZSw9fmVsc2V3aGVyZSw9fnNlbGVjdAorc2V0bG9jYWwgaW5kZW50a2V5cys9PX5lbmRpZiw9fmVuZGRvLD1+ZW5kd2hlcmUsPX5lbmRzZWxlY3QKKworIiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgZml4ZWQgb3IgZnJlZSBmb3JtYXQgc291cmNlIGZpbGUKKyIgaWYgdGhpcyBoYXNuJ3QgYmVlbiBkb25lIHlldAoraWYgIWV4aXN0cygiYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSIpCisgIGlmIGV4aXN0cygiZm9ydHJhbl9mcmVlX3NvdXJjZSIpCisgICAgIiBVc2VyIGd1YXJhbnRlZXMgZnJlZSBzb3VyY2UgZm9ybQorICAgIGxldCBiOmZvcnRyYW5fZml4ZWRfc291cmNlID0gMAorICBlbHNlaWYgZXhpc3RzKCJmb3J0cmFuX2ZpeGVkX3NvdXJjZSIpCisgICAgIiBVc2VyIGd1YXJhbnRlZXMgZml4ZWQgc291cmNlIGZvcm0KKyAgICBsZXQgYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9IDEKKyAgZWxzZQorICAgICIgZjkwIGFuZCBmOTUgYWxsb3cgYm90aCBmaXhlZCBhbmQgZnJlZSBzb3VyY2UgZm9ybQorICAgICIgYXNzdW1lIGZpeGVkIHNvdXJjZSBmb3JtIHVubGVzcyBzaWducyBvZiBmcmVlIHNvdXJjZSBmb3JtCisgICAgIiBhcmUgZGV0ZWN0ZWQgaW4gdGhlIGZpcnN0IGZpdmUgY29sdW1ucyBvZiB0aGUgZmlyc3QgMjUgbGluZXMKKyAgICAiIERldGVjdGlvbiBiZWNvbWVzIG1vcmUgYWNjdXJhdGUgYW5kIHRpbWUtY29uc3VtaW5nIGlmIG1vcmUgbGluZXMKKyAgICAiIGFyZSBjaGVja2VkLiBJbmNyZWFzZSB0aGUgbGltaXQgYmVsb3cgaWYgeW91IGtlZXAgbG90cyBvZiBjb21tZW50cyBhdAorICAgICIgdGhlIHZlcnkgdG9wIG9mIGVhY2ggZmlsZSBhbmQgeW91IGhhdmUgYSBmYXN0IGNvbXB1dGVyCisgICAgbGV0IHM6bG1heCA9IDI1CisgICAgaWYgKCBzOmxtYXggPiBsaW5lKCIkIikgKQorICAgICAgbGV0IHM6bG1heCA9IGxpbmUoIiQiKQorICAgIGVuZGlmCisgICAgbGV0IGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPSAxCisgICAgbGV0IHM6bG49MQorICAgIHdoaWxlIHM6bG4gPD0gczpsbWF4CisgICAgICBsZXQgczp0ZXN0ID0gc3RycGFydChnZXRsaW5lKHM6bG4pLDAsNSkKKyAgICAgIGlmIHM6dGVzdFswXSAhfiAnW0NjKiEjXScgJiYgczp0ZXN0ICF+ICdeIFwrWyEjXScgJiYgczp0ZXN0ID1+ICdbXiAwLTlcdF0nCisJbGV0IGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPSAwCisJYnJlYWsKKyAgICAgIGVuZGlmCisgICAgICBsZXQgczpsbiA9IHM6bG4gKyAxCisgICAgZW5kd2hpbGUKKyAgZW5kaWYKK2VuZGlmCisKKyIgRGVmaW5lIHRoZSBhcHByb3ByaWF0ZSBpbmRlbnQgZnVuY3Rpb24gYnV0IG9ubHkgb25jZQoraWYgKGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMSkKKyAgc2V0bG9jYWwgaW5kZW50ZXhwcj1Gb3J0cmFuR2V0Rml4ZWRJbmRlbnQoKQorICBpZiBleGlzdHMoIipGb3J0cmFuR2V0Rml4ZWRJbmRlbnQiKQorICAgIGZpbmlzaAorICBlbmRpZgorZWxzZQorICBzZXRsb2NhbCBpbmRlbnRleHByPUZvcnRyYW5HZXRGcmVlSW5kZW50KCkKKyAgaWYgZXhpc3RzKCIqRm9ydHJhbkdldEZyZWVJbmRlbnQiKQorICAgIGZpbmlzaAorICBlbmRpZgorZW5kaWYKKworZnVuY3Rpb24gRm9ydHJhbkdldEluZGVudChsbnVtKQorICBsZXQgaW5kID0gaW5kZW50KGE6bG51bSkKKyAgbGV0IHByZXZsaW5lPWdldGxpbmUoYTpsbnVtKQorICAiIFN0cmlwIHRhaWwgY29tbWVudAorICBsZXQgcHJldnN0YXQ9c3Vic3RpdHV0ZShwcmV2bGluZSwgJyEuKiQnLCAnJywgJycpCisKKyAgIkluZGVudCBkbyBsb29wcyBvbmx5IGlmIHRoZXkgYXJlIGFsbCBndWFyYW50ZWVkIHRvIGJlIG9mIGRvL2VuZCBkbyB0eXBlCisgIGlmIGV4aXN0cygiYjpmb3J0cmFuX2RvX2VuZGRvIikgfHwgZXhpc3RzKCJmb3J0cmFuX2RvX2VuZGRvIikKKyAgICBpZiBwcmV2c3RhdCA9fj8gJ15ccypcKFxkXCtcc1wpXD1ccypcKFxhXHcqXHMqOlwpXD1ccypkb1w+JworICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgIGVuZGlmCisgICAgaWYgZ2V0bGluZSh2OmxudW0pID1+PyAnXlxzKlwoXGRcK1xzXClcPVxzKmVuZFxzKmRvXD4nCisgICAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgICAgZW5kaWYKKyAgZW5kaWYKKworICAiQWRkIGEgc2hpZnR3aWR0aCB0byBzdGF0ZW1lbnRzIGZvbGxvd2luZyBpZiwgZWxzZSwgY2FzZSwKKyAgIndoZXJlIGFuZCBlbHNld2hlcmUgc3RhdGVtZW50cworICBpZiBwcmV2c3RhdCA9fj8gJ15ccypcKFxkXCtcc1wpXD1ccypcKGVsc2VcfGNhc2VcfHdoZXJlXHxlbHNld2hlcmVcKVw+JworCVwgfHwgcHJldnN0YXQgPX4/ICdeXHMqXChcZFwrXHNcKVw9XHMqXChcYVx3KlxzKjpcKVw9XHMqaWZcPicKKyAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgICIgUmVtb3ZlIHVud2FudGVkIGluZGVudCBhZnRlciBsb2dpY2FsIGFuZCBhcml0aG1ldGljIGlmcworICAgIGlmIHByZXZzdGF0ID1+PyAnXDxpZlw+JyAmJiBwcmV2c3RhdCAhfj8gJ1w8dGhlblw+JworICAgICAgbGV0IGluZCA9IGluZCAtICZzdworICAgIGVuZGlmCisgIGVuZGlmCisKKyAgIlN1YnRyYWN0IGEgc2hpZnR3aWR0aCBmcm9tIGVsc2UsIGVsc2V3aGVyZSwgY2FzZSwgZW5kIGlmLAorICAiIGVuZCB3aGVyZSBhbmQgZW5kIHNlbGVjdCBzdGF0ZW1lbnRzCisgIGlmIGdldGxpbmUodjpsbnVtKSA9fj8gJ15ccypcKFxkXCtcc1wpXD1ccyonCisJXC4gJ1woZWxzZVx8ZWxzZXdoZXJlXHxjYXNlXHxlbmRccypcKGlmXHx3aGVyZVx8c2VsZWN0XClcKVw+JworICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICAiIEZpeCBpbmRlbnQgZm9yIGNhc2Ugc3RhdGVtZW50IGltbWVkaWF0ZWx5IGFmdGVyIHNlbGVjdAorICAgIGlmIHByZXZzdGF0ID1+PyAnXDxzZWxlY3RcPicKKyAgICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICBlbmRpZgorICBlbmRpZgorCisgIHJldHVybiBpbmQKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIEZvcnRyYW5HZXRGcmVlSW5kZW50KCkKKyAgIkZpbmQgdGhlIHByZXZpb3VzIG5vbi1ibGFuayBsaW5lCisgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisKKyAgIlVzZSB6ZXJvIGluZGVudCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgbGV0IGluZD1Gb3J0cmFuR2V0SW5kZW50KGxudW0pCisgIHJldHVybiBpbmQKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIEZvcnRyYW5HZXRGaXhlZEluZGVudCgpCisgIGxldCBjdXJybGluZT1nZXRsaW5lKHY6bG51bSkKKyAgIkRvbid0IGluZGVudCBjb21tZW50cywgY29udGludWF0aW9uIGxpbmVzIGFuZCBsYWJlbGxlZCBsaW5lcworICBpZiBzdHJwYXJ0KGN1cnJsaW5lLDAsNikgPX4gJ1teIFx0XScKKyAgICBsZXQgaW5kID0gaW5kZW50KHY6bG51bSkKKyAgICByZXR1cm4gaW5kCisgIGVuZGlmCisKKyAgIkZpbmQgdGhlIHByZXZpb3VzIGxpbmUgd2hpY2ggaXMgbm90IGJsYW5rLCBub3QgYSBjb21tZW50LAorICAibm90IGEgY29udGludWF0aW9uIGxpbmUsIGFuZCBkb2VzIG5vdCBoYXZlIGEgbGFiZWwKKyAgbGV0IGxudW0gPSB2OmxudW0gLSAxCisgIHdoaWxlIGxudW0gPiAwCisgICAgbGV0IHByZXZsaW5lPWdldGxpbmUobG51bSkKKyAgICBpZiAocHJldmxpbmUgPX4gIl5bQyohXSIpIHx8IChwcmV2bGluZSA9fiAiXlxzKiQiKQorCVwgfHwgKHN0cnBhcnQocHJldmxpbmUsNSwxKSAhfiAiWyAwXSIpCisgICAgICAiIFNraXAgY29tbWVudHMsIGJsYW5rIGxpbmVzIGFuZCBjb250aW51YXRpb24gbGluZXMKKyAgICAgIGxldCBsbnVtID0gbG51bSAtIDEKKyAgICBlbHNlCisgICAgICBsZXQgdGVzdD1zdHJwYXJ0KHByZXZsaW5lLDAsNSkKKyAgICAgIGlmIHRlc3QgPX4gIlswLTldIgorCSIgU2tpcCBsaW5lcyB3aXRoIHN0YXRlbWVudCBudW1iZXJzCisJbGV0IGxudW0gPSBsbnVtIC0gMQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBlbmRpZgorICAgIGVuZGlmCisgIGVuZHdoaWxlCisKKyAgIkZpcnN0IGxpbmUgbXVzdCBiZWdpbiBhdCBjb2x1bW4gNworICBpZiBsbnVtID09IDAKKyAgICByZXR1cm4gNgorICBlbmRpZgorCisgIGxldCBpbmQ9Rm9ydHJhbkdldEluZGVudChsbnVtKQorICByZXR1cm4gaW5kCitlbmRmdW5jdGlvbgorCitsZXQgJmNwb3B0aW9ucz1zOmNwb3NldAordW5sZXQgczpjcG9zZXQKKworIiB2aW06c3c9MiB0dz0xMzAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2h0bWwudmltIGIvcnVudGltZS9pbmRlbnQvaHRtbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4ZGExOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L2h0bWwudmltCkBAIC0wLDAgKzEsMjE5IEBACisiIERlc2NyaXB0aW9uOglodG1sIGluZGVudGVyCisiIEF1dGhvcjoJSm9oYW5uZXMgWmVsbG5lciA8am9oYW5uZXNAemVsbG5lci5vcmc+CisiIExhc3QgQ2hhbmdlOglUdWUsIDI3IEFwciAyMDA0IDEwOjI4OjM5IENFU1QKKyIgR2xvYmFsczoJZzpodG1sX2luZGVudF90YWdzCSAgIC0tIGluZGVudGluZyB0YWdzCisiCQlnOmh0bWxfaW5kZW50X3N0cmljdAkgICAtLSBpbmhpYml0ICdPIE8nIGVsZW1lbnRzCisiCQlnOmh0bWxfaW5kZW50X3N0cmljdF90YWJsZSAtLSBpbmhpYml0ICdPIC0nIGVsZW1lbnRzCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICAgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKKworIiBbLS0gbG9jYWwgc2V0dGluZ3MgKG11c3QgY29tZSBiZWZvcmUgYWJvcnRpbmcgdGhlIHNjcmlwdCkgLS1dCitzZXRsb2NhbCBpbmRlbnRleHByPUh0bWxJbmRlbnRHZXQodjpsbnVtKQorc2V0bG9jYWwgaW5kZW50a2V5cz1vLE8sKjxSZXR1cm4+LDw+Piw8YnM+LHssfQorCisKK2lmIGV4aXN0cygnZzpodG1sX2luZGVudF90YWdzJykKKyAgICB1bmxldCBnOmh0bWxfaW5kZW50X3RhZ3MKK2VuZGlmCisKKyIgWy0tIGhlbHBlciBmdW5jdGlvbiB0byBhc3NlbWJsZSB0YWcgbGlzdCAtLV0KK2Z1biEgPFNJRD5IdG1sSW5kZW50UHVzaCh0YWcpCisgICAgaWYgZXhpc3RzKCdnOmh0bWxfaW5kZW50X3RhZ3MnKQorCWxldCBnOmh0bWxfaW5kZW50X3RhZ3MgPSBnOmh0bWxfaW5kZW50X3RhZ3MuJ1x8Jy5hOnRhZworICAgIGVsc2UKKwlsZXQgZzpodG1sX2luZGVudF90YWdzID0gYTp0YWcKKyAgICBlbmRpZgorZW5kZnVuCisKKworIiBbLS0gPEVMRU1FTlQgPyAtIC0gLi4uPiAtLV0KK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnYScpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2FiYnInKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdhY3JvbnltJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnYWRkcmVzcycpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2InKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdiZG8nKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdiaWcnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdibG9ja3F1b3RlJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnYnV0dG9uJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnY2FwdGlvbicpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2NlbnRlcicpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2NpdGUnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdjb2RlJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnY29sZ3JvdXAnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdkZWwnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdkZm4nKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdkaXInKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdkaXYnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdkbCcpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2VtJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnZmllbGRzZXQnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdmb250JykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnZm9ybScpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2ZyYW1lc2V0JykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnaDEnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdoMicpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2gzJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnaDQnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdoNScpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2g2JykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnaScpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2lmcmFtZScpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2lucycpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2tiZCcpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2xhYmVsJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnbGVnZW5kJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnbWFwJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnbWVudScpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ25vZnJhbWVzJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnbm9zY3JpcHQnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdvYmplY3QnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdvbCcpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ29wdGdyb3VwJykKKyIgY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdwcmUnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdxJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgncycpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ3NhbXAnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdzY3JpcHQnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdzZWxlY3QnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdzbWFsbCcpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ3NwYW4nKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdzdHJvbmcnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdzdHlsZScpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ3N1YicpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ3N1cCcpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ3RhYmxlJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgndGV4dGFyZWEnKQorY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCd0aXRsZScpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ3R0JykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgndScpCitjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ3VsJykKK2NhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgndmFyJykKKworCisiIFstLSA8RUxFTUVOVCA/IE8gTyAuLi4+IC0tXQoraWYgIWV4aXN0cygnZzpodG1sX2luZGVudF9zdHJpY3QnKQorICAgIGNhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgnYm9keScpCisgICAgY2FsbCA8U0lEPkh0bWxJbmRlbnRQdXNoKCdoZWFkJykKKyAgICBjYWxsIDxTSUQ+SHRtbEluZGVudFB1c2goJ2h0bWwnKQorICAgIGNhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgndGJvZHknKQorZW5kaWYKKworCisiIFstLSA8RUxFTUVOVCA/IE8gLSAuLi4+IC0tXQoraWYgIWV4aXN0cygnZzpodG1sX2luZGVudF9zdHJpY3RfdGFibGUnKQorICAgIGNhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgndGgnKQorICAgIGNhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgndGQnKQorICAgIGNhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgndHInKQorICAgIGNhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgndGZvb3QnKQorICAgIGNhbGwgPFNJRD5IdG1sSW5kZW50UHVzaCgndGhlYWQnKQorZW5kaWYKKworZGVsZnVuIDxTSUQ+SHRtbEluZGVudFB1c2gKKworc2V0IGNwby09QworCisiIFstLSBjb3VudCBpbmRlbnQtaW5jcmVhc2luZyB0YWdzIG9mIGxpbmUgYTpsbnVtIC0tXQorZnVuISA8U0lEPkh0bWxJbmRlbnRPcGVuKGxudW0sIHBhdHRlcm4pCisgICAgbGV0IHMgPSBzdWJzdGl0dXRlKCd4Jy5nZXRsaW5lKGE6bG51bSksCisgICAgXCAnLlx7LX1cKFwoPFwpXCgnLmE6cGF0dGVybi4nXClcPlwpJywgIlwxIiwgJ2cnKQorICAgIGxldCBzID0gc3Vic3RpdHV0ZShzLCAiW15cMV0uKiQiLCAnJywgJycpCisgICAgcmV0dXJuIHN0cmxlbihzKQorZW5kZnVuCisKKyIgWy0tIGNvdW50IGluZGVudC1kZWNyZWFzaW5nIHRhZ3Mgb2YgbGluZSBhOmxudW0gLS1dCitmdW4hIDxTSUQ+SHRtbEluZGVudENsb3NlKGxudW0sIHBhdHRlcm4pCisgICAgbGV0IHMgPSBzdWJzdGl0dXRlKCd4Jy5nZXRsaW5lKGE6bG51bSksCisgICAgXCAnLlx7LX1cKFwoPFwpL1woJy5hOnBhdHRlcm4uJ1wpXD4+XCknLCAiXDEiLCAnZycpCisgICAgbGV0IHMgPSBzdWJzdGl0dXRlKHMsICJbXlwxXS4qJCIsICcnLCAnJykKKyAgICByZXR1cm4gc3RybGVuKHMpCitlbmRmdW4KKworIiBbLS0gY291bnQgaW5kZW50LWluY3JlYXNpbmcgJ3snIG9mIChqYXZhfGNzcykgbGluZSBhOmxudW0gLS1dCitmdW4hIDxTSUQ+SHRtbEluZGVudE9wZW5BbHQobG51bSkKKyAgICByZXR1cm4gc3RybGVuKHN1YnN0aXR1dGUoZ2V0bGluZShhOmxudW0pLCAnW157XVwrJywgJycsICdnJykpCitlbmRmdW4KKworIiBbLS0gY291bnQgaW5kZW50LWRlY3JlYXNpbmcgJ30nIG9mIChqYXZhfGNzcykgbGluZSBhOmxudW0gLS1dCitmdW4hIDxTSUQ+SHRtbEluZGVudENsb3NlQWx0KGxudW0pCisgICAgcmV0dXJuIHN0cmxlbihzdWJzdGl0dXRlKGdldGxpbmUoYTpsbnVtKSwgJ1tefV1cKycsICcnLCAnZycpKQorZW5kZnVuCisKKyIgWy0tIHJldHVybiB0aGUgc3VtIG9mIGluZGVudHMgcmVzcGVjdGluZyB0aGUgc3ludGF4IG9mIGE6bG51bSAtLV0KK2Z1biEgPFNJRD5IdG1sSW5kZW50U3VtKGxudW0sIHN0eWxlKQorICAgIGlmIGE6c3R5bGUgPT0gbWF0Y2goZ2V0bGluZShhOmxudW0pLCAnXlxzKjwvJykKKwlpZiBhOnN0eWxlID09IG1hdGNoKGdldGxpbmUoYTpsbnVtKSwgJ15ccyo8L1w8XCgnLmc6aHRtbF9pbmRlbnRfdGFncy4nXClcPicpCisJICAgIGxldCBvcGVuID0gPFNJRD5IdG1sSW5kZW50T3BlbihhOmxudW0sIGc6aHRtbF9pbmRlbnRfdGFncykKKwkgICAgbGV0IGNsb3NlID0gPFNJRD5IdG1sSW5kZW50Q2xvc2UoYTpsbnVtLCBnOmh0bWxfaW5kZW50X3RhZ3MpCisJICAgIGlmIDAgIT0gb3BlbiB8fCAwICE9IGNsb3NlCisJCXJldHVybiBvcGVuIC0gY2xvc2UKKwkgICAgZW5kaWYKKwllbmRpZgorICAgIGVuZGlmCisgICAgaWYgJycgIT0gJnN5bnRheCAmJgorCVwgc3luSURhdHRyKHN5bklEKGE6bG51bSwgMSwgMSksICduYW1lJykgPX4gJ1woY3NzXHxqYXZhXCkuKicgJiYKKwlcIHN5bklEYXR0cihzeW5JRChhOmxudW0sIHN0cmxlbihnZXRsaW5lKGE6bG51bSkpLCAxKSwgJ25hbWUnKQorCVwgPX4gJ1woY3NzXHxqYXZhXCkuKicKKwlpZiBhOnN0eWxlID09IG1hdGNoKGdldGxpbmUoYTpsbnVtKSwgJ15ccyp9JykKKwkgICAgcmV0dXJuIDxTSUQ+SHRtbEluZGVudE9wZW5BbHQoYTpsbnVtKSAtIDxTSUQ+SHRtbEluZGVudENsb3NlQWx0KGE6bG51bSkKKwllbmRpZgorICAgIGVuZGlmCisgICAgcmV0dXJuIDAKK2VuZGZ1bgorCitmdW4hIEh0bWxJbmRlbnRHZXQobG51bSkKKyAgICAiIEZpbmQgYSBub24tZW1wdHkgbGluZSBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorICAgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKGE6bG51bSAtIDEpCisKKyAgICAiIEhpdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUsIHVzZSB6ZXJvIGluZGVudC4KKyAgICBpZiBsbnVtID09IDAKKwlyZXR1cm4gMAorICAgIGVuZGlmCisKKyAgICBsZXQgcmVzdG9yZV9pYyA9ICZpYworICAgIHNldGxvY2FsIGljICIgaWdub3JlIGNhc2UKKworICAgICIgWy0tIHNwZWNpYWwgaGFuZGxpbmcgZm9yIDxwcmU+OiBubyBpbmRlbnRpbmcgLS1dCisgICAgaWYgZ2V0bGluZShhOmxudW0pID1+ICdcYzwvcHJlPicKKwkJXCB8fCAwIDwgc2VhcmNocGFpcignXGM8cHJlPicsICcnLCAnXGM8L3ByZT4nLCAnbldiJykKKwkJXCB8fCAwIDwgc2VhcmNocGFpcignXGM8cHJlPicsICcnLCAnXGM8L3ByZT4nLCAnblcnKQorCSIgd2UncmUgaW4gYSBsaW5lIHdpdGggPC9wcmU+IG9yIGluc2lkZSA8cHJlPiAuLi4gPC9wcmU+CisJcmV0dXJuIC0xCisgICAgZW5kaWYKKworICAgICIgWy0tIHNwZWNpYWwgaGFuZGxpbmcgZm9yIDxqYXZhc2NyaXB0PjogdXNlIGNpbmRlbnQgLS1dCisgICAgbGV0IGpzID0gJzxzY3JpcHQuKnR5cGVccyo9XHMqLipqYXZhJworICAgIGlmICAgMCA8IHNlYXJjaHBhaXIoanMsICcnLCAnPC9zY3JpcHQ+JywgJ25XYicpCisgICAgXCB8fCAwIDwgc2VhcmNocGFpcihqcywgJycsICc8L3NjcmlwdD4nLCAnblcnKQorCSIgd2UncmUgaW5zaWRlIGphdmFzY3JpcHQKKwlpZiBnZXRsaW5lKGxudW0pICF+IGpzICYmIGdldGxpbmUoYTpsbnVtKSAhPSAnPC9zY3JpcHQ+JworCSAgICByZXR1cm4gY2luZGVudChhOmxudW0pCisJZW5kaWYKKyAgICBlbmRpZgorCisgICAgaWYgZ2V0bGluZShsbnVtKSA9fiAnXGM8L3ByZT4nCisJIiBsaW5lIGJlZm9yZSB0aGUgY3VycmVudCBsaW5lIGE6bG51bSBjb250YWlucworCSIgYSBjbG9zaW5nIDwvcHJlPi4gLS0+IHNlYXJjaCBmb3IgbGluZSBiZWZvcmUKKwkiIHN0YXJ0aW5nIDxwcmU+IHRvIHJlc3RvcmUgdGhlIGluZGVudC4KKwlsZXQgcHJlbGluZSA9IHByZXZub25ibGFuayhzZWFyY2goJ1xjPHByZT4nLCAnYlcnKSAtIDEpCisJaWYgcHJlbGluZSA+IDAKKwkgICAgcmV0dXJuIGluZGVudChwcmVsaW5lKQorCWVuZGlmCisgICAgZW5kaWYKKworICAgIGxldCBpbmQgPSA8U0lEPkh0bWxJbmRlbnRTdW0obG51bSwgLTEpCisgICAgbGV0IGluZCA9IGluZCArIDxTSUQ+SHRtbEluZGVudFN1bShhOmxudW0sIDApCisKKyAgICBpZiByZXN0b3JlX2ljID09IDAKKwlzZXRsb2NhbCBub2ljCisgICAgZW5kaWYKKworICAgIHJldHVybiBpbmRlbnQobG51bSkgKyAoJnN3ICogaW5kKQorZW5kZnVuCisKKyIgWy0tIEVPRiA8cnVudGltZT4vaW5kZW50L2h0bWwudmltIC0tXQpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvaWRsYW5nLnZpbSBiL3J1bnRpbWUvaW5kZW50L2lkbGFuZy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjMzFhZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L2lkbGFuZy52aW0KQEAgLTAsMCArMSw2MyBAQAorIiBJREwgKEludGVyYWN0aXZlIERhdGEgTGFuZ3VhZ2UpIGluZGVudCBmaWxlLgorIiBMYW5ndWFnZTogSURMIChmdD1pZGxhbmcpCisiIExhc3QgY2hhbmdlOgkyMDAyIFNlcCAyMworIiBNYWludGFpbmVyOiBBbGVrc2FuZGFyIEplbGVuYWsgPGFqZWxlbmFrIEFUIHlhaG9vLmNvbT4KKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCitzZXRsb2NhbCBpbmRlbnRrZXlzPW8sTywwPWVuZGlmLDA9RU5ESUYsMD1lbmRlbHNlLDA9RU5ERUxTRSwwPWVuZHdoaWxlLAorCQkgICAgXDA9RU5EV0hJTEUsMD1lbmRmb3IsMD1FTkRGT1IsMD1lbmRyZXAsMD1FTkRSRVAKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRJZGxhbmdJbmRlbnQodjpsbnVtKQorCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0SWRsYW5nSW5kZW50IikKKyAgIGZpbmlzaAorZW5kaWYKKworZnVuY3Rpb24gR2V0SWRsYW5nSW5kZW50KGxudW0pCisgICAiIEZpcnN0IG5vbi1lbXB0eSBsaW5lIGFib3ZlIHRoZSBjdXJyZW50IGxpbmUuCisgICBsZXQgcG51bSA9IHByZXZub25ibGFuayh2OmxudW0tMSkKKyAgICIgdjpsbnVtIGlzIHRoZSBmaXJzdCBub24tZW1wdHkgbGluZSAtLSB6ZXJvIGluZGVudC4KKyAgIGlmIHBudW0gPT0gMAorICAgICAgcmV0dXJuIDAKKyAgIGVuZGlmCisgICAiIFNlY29uZCBub24tZW1wdHkgbGluZSBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorICAgbGV0IHBudW0yID0gcHJldm5vbmJsYW5rKHBudW0tMSkKKworICAgIiBDdXJyZW50IGluZGVudC4KKyAgIGxldCBjdXJpbmQgPSBpbmRlbnQocG51bSkKKworICAgIiBJbmRlbnRpbmcgb2YgY29udGludWVkIGxpbmVzLgorICAgaWYgZ2V0bGluZShwbnVtKSA9fiAnXCRccypcKDsuKlwpXD0kJworICAgICAgaWYgZ2V0bGluZShwbnVtMikgIX4gJ1wkXHMqXCg7LipcKVw9JCcKKwkgbGV0IGN1cmluZCA9IGN1cmluZCsmc3cKKyAgICAgIGVuZGlmCisgICBlbHNlCisgICAgICBpZiBnZXRsaW5lKHBudW0yKSA9fiAnXCRccypcKDsuKlwpXD0kJworCSBsZXQgY3VyaW5kID0gY3VyaW5kLSZzdworICAgICAgZW5kaWYKKyAgIGVuZGlmCisKKyAgICIgSW5kZW50aW5nIGJsb2NrcyBvZiBzdGF0ZW1lbnRzLgorICAgaWYgZ2V0bGluZSh2OmxudW0pID1+PyAnXlxzKlwoZW5kaWZcfGVuZGVsc2VcfGVuZHdoaWxlXHxlbmRmb3JcfGVuZHJlcFwpXD4nCisgICAgICBpZiBnZXRsaW5lKHBudW0pID1+PyAnYmVnaW5cPicKKyAgICAgIGVsc2VpZiBpbmRlbnQodjpsbnVtKSA+IGN1cmluZC0mc3cKKwkgbGV0IGN1cmluZCA9IGN1cmluZC0mc3cKKyAgICAgIGVsc2UKKwkgcmV0dXJuIC0xCisgICAgICBlbmRpZgorICAgZWxzZWlmIGdldGxpbmUocG51bSkgPX4/ICdiZWdpblw+JworICAgICAgaWYgaW5kZW50KHY6bG51bSkgPCBjdXJpbmQrJnN3CisJIGxldCBjdXJpbmQgPSBjdXJpbmQrJnN3CisgICAgICBlbHNlCisJIHJldHVybiAtMQorICAgICAgZW5kaWYKKyAgIGVuZGlmCisgICByZXR1cm4gY3VyaW5kCitlbmRmdW5jdGlvbgorCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9pc2hkLnZpbSBiL3J1bnRpbWUvaW5kZW50L2lzaGQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNGQ3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9pc2hkLnZpbQpAQCAtMCwwICsxLDY1IEBACisiIERlc2NyaXB0aW9uOglJbnN0YWxsU2hpZWxkIGluZGVudGVyCisiIEF1dGhvcjoJSm9oYW5uZXMgWmVsbG5lciA8am9oYW5uZXNAemVsbG5lci5vcmc+CisiIExhc3QgQ2hhbmdlOglUdWUsIDI3IEFwciAyMDA0IDE0OjU0OjU5IENFU1QKKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgICAgZmluaXNoCitlbmRpZgorbGV0IGI6ZGlkX2luZGVudCA9IDEKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRJc2hkSW5kZW50KHY6bG51bSkKK3NldGxvY2FsIGluZGVudGtleXMmCitzZXRsb2NhbCBpbmRlbnRrZXlzKz09ZWxzZSw9ZWxzZWlmLD1lbmRpZiw9ZW5kLD1iZWdpbiw8Oj4KKyIgc2V0bG9jYWwgaW5kZW50a2V5cy09MCMKKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldElzaGRJbmRlbnQiKQorICAgIGZpbmlzaAorZW5kaWYKKworZnVuISBHZXRJc2hkSW5kZW50KGxudW0pCisgICAgIiBsYWJlbHMgYW5kIHByZXByb2Nlc3NvciBnZXQgemVybyBpbmRlbnQgaW1tZWRpYXRlbHkKKyAgICBsZXQgdGhpc19saW5lID0gZ2V0bGluZShhOmxudW0pCisgICAgbGV0IExBQkVMU19PUl9QUkVQUk9DID0gJ15ccypcKFw8XGtcK1w+OlxzKiRcfCMuKlwpJworICAgIGxldCBMQUJFTFNfT1JfUFJFUFJPQ19FWENFUFQgPSAnXlxzKlw8ZGVmYXVsdFwrXD46JworICAgIGlmIHRoaXNfbGluZSA9fiBMQUJFTFNfT1JfUFJFUFJPQyAmJiB0aGlzX2xpbmUgIX4gTEFCRUxTX09SX1BSRVBST0NfRVhDRVBUCisJcmV0dXJuIDAKKyAgICBlbmRpZgorCisgICAgIiBGaW5kIGEgbm9uLWJsYW5rIGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZS4KKyAgICAiIFNraXAgb3ZlciBsYWJlbHMgYW5kIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIGxldCBsbnVtID0gYTpsbnVtCisgICAgd2hpbGUgbG51bSA+IDAKKwlsZXQgbG51bSA9IHByZXZub25ibGFuayhsbnVtIC0gMSkKKwlsZXQgcHJldmlvdXNfbGluZSA9IGdldGxpbmUobG51bSkKKwlpZiBwcmV2aW91c19saW5lICF+IExBQkVMU19PUl9QUkVQUk9DIHx8IHByZXZpb3VzX2xpbmUgPX4gTEFCRUxTX09SX1BSRVBST0NfRVhDRVBUCisJICAgIGJyZWFrCisJZW5kaWYKKyAgICBlbmR3aGlsZQorCisgICAgIiBIaXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCB1c2UgemVybyBpbmRlbnQuCisgICAgaWYgbG51bSA9PSAwCisJcmV0dXJuIDAKKyAgICBlbmRpZgorCisgICAgbGV0IGluZCA9IGluZGVudChsbnVtKQorCisgICAgIiBBZGQKKyAgICBpZiBwcmV2aW91c19saW5lID1+ICdeXHMqXDxcKGZ1bmN0aW9uXHxiZWdpblx8c3dpdGNoXHxjYXNlXHxkZWZhdWx0XHxpZi5cey19dGhlblx8ZWxzZVx8ZWxzZWlmXHx3aGlsZVx8cmVwZWF0XClcPicKKwlsZXQgaW5kID0gaW5kICsgJnN3CisgICAgZW5kaWYKKworICAgICIgU3VidHJhY3QKKyAgICBpZiB0aGlzX2xpbmUgPX4gJ15ccypcPGVuZHN3aXRjaFw+JworCWxldCBpbmQgPSBpbmQgLSAyICogJnN3CisgICAgZWxzZWlmIHRoaXNfbGluZSA9fiAnXlxzKlw8XChiZWdpblx8ZW5kXHxlbmRpZlx8ZW5kd2hpbGVcfGVsc2VcfGVsc2VpZlx8dW50aWxcKVw+JworCWxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICBlbHNlaWYgdGhpc19saW5lID1+ICdeXHMqXDxcKGNhc2VcfGRlZmF1bHRcKVw+JworCWlmIHByZXZpb3VzX2xpbmUgIX4gJ15ccypcPHN3aXRjaFw+JworCSAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisJZW5kaWYKKyAgICBlbmRpZgorCisgICAgcmV0dXJuIGluZAorZW5kZnVuCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9qYXZhLnZpbSBiL3J1bnRpbWUvaW5kZW50L2phdmEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MDBjNGIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9qYXZhLnZpbQpAQCAtMCwwICsxLDEyOCBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CUphdmEKKyIgTWFpbnRhaW5lcjoJVG9ieSBBbGxzb3BwIDx0b2J5LmFsbHNvcHBAcGVhY2UuY29tPgorIiBMYXN0IENoYW5nZToJMjAwMyBPY3QgMjEKKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKKyIgSW5kZW50IEphdmEgYW5vbnltb3VzIGNsYXNzZXMgY29ycmVjdGx5Lgorc2V0bG9jYWwgY2lub3B0aW9ucyYgY2lub3B0aW9ucys9ajEKKworIiBUaGUgImV4dGVuZHMiIGFuZCAiaW1wbGVtZW50cyIgbGluZXMgc3RhcnQgb2ZmIHdpdGggdGhlIHdyb25nIGluZGVudC4KK3NldGxvY2FsIGluZGVudGtleXMmIGluZGVudGtleXMrPTA9ZXh0ZW5kcyBpbmRlbnRrZXlzKz0wPWltcGxlbWVudHMKKworIiBTZXQgdGhlIGZ1bmN0aW9uIHRvIGRvIHRoZSB3b3JrLgorc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRKYXZhSW5kZW50KCkKKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldEphdmFJbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2Z1bmN0aW9uISBTa2lwSmF2YUJsYW5rc0FuZENvbW1lbnRzKHN0YXJ0bGluZSkKKyAgbGV0IGxudW0gPSBhOnN0YXJ0bGluZQorICB3aGlsZSBsbnVtID4gMQorICAgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKGxudW0pCisgICAgaWYgZ2V0bGluZShsbnVtKSA9fiAnXCovXHMqJCcKKyAgICAgIHdoaWxlIGdldGxpbmUobG51bSkgIX4gJy9cKicgJiYgbG51bSA+IDEKKyAgICAgICAgbGV0IGxudW0gPSBsbnVtIC0gMQorICAgICAgZW5kd2hpbGUKKyAgICAgIGlmIGdldGxpbmUobG51bSkgPX4gJ15ccyovXConCisgICAgICAgIGxldCBsbnVtID0gbG51bSAtIDEKKyAgICAgIGVsc2UKKyAgICAgICAgYnJlYWsKKyAgICAgIGVuZGlmCisgICAgZWxzZWlmIGdldGxpbmUobG51bSkgPX4gJ15ccyovLycKKyAgICAgIGxldCBsbnVtID0gbG51bSAtIDEKKyAgICBlbHNlCisgICAgICBicmVhaworICAgIGVuZGlmCisgIGVuZHdoaWxlCisgIHJldHVybiBsbnVtCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiBHZXRKYXZhSW5kZW50KCkKKworICAiIEphdmEgaXMganVzdCBsaWtlIEM7IHVzZSB0aGUgYnVpbHQtaW4gQyBpbmRlbnRpbmcgYW5kIHRoZW4gY29ycmVjdCBhIGZldworICAiIHNwZWNpZmljIGNhc2VzLgorICBsZXQgdGhlSW5kZW50ID0gY2luZGVudCh2OmxudW0pCisKKyAgIiBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29tbWVudCB0aGVuIGp1c3QgdHJ1c3QgY2luZGVudAorICBpZiBnZXRsaW5lKHY6bG51bSkgPX4gJ15ccypcKicKKyAgICByZXR1cm4gdGhlSW5kZW50CisgIGVuZGlmCisKKyAgIiBmaW5kIHN0YXJ0IG9mIHByZXZpb3VzIGxpbmUsIGluIGNhc2UgaXQgd2FzIGEgY29udGludWF0aW9uIGxpbmUKKyAgbGV0IGxudW0gPSBTa2lwSmF2YUJsYW5rc0FuZENvbW1lbnRzKHY6bG51bSAtIDEpCisgIGxldCBwcmV2ID0gbG51bQorICB3aGlsZSBwcmV2ID4gMQorICAgIGxldCBuZXh0X3ByZXYgPSBTa2lwSmF2YUJsYW5rc0FuZENvbW1lbnRzKHByZXYgLSAxKQorICAgIGlmIGdldGxpbmUobmV4dF9wcmV2KSAhfiAnLFxzKiQnCisgICAgICBicmVhaworICAgIGVuZGlmCisgICAgbGV0IHByZXYgPSBuZXh0X3ByZXYKKyAgZW5kd2hpbGUKKworICAiIFRyeSB0byBhbGlnbiAidGhyb3dzIiBsaW5lcyBmb3IgbWV0aG9kcyBhbmQgImV4dGVuZHMiIGFuZCAiaW1wbGVtZW50cyIgZm9yCisgICIgY2xhc3Nlcy4KKyAgaWYgZ2V0bGluZSh2OmxudW0pID1+ICdeXHMqXChleHRlbmRzXHxpbXBsZW1lbnRzXClcPicKKyAgICAgICAgXCAmJiBnZXRsaW5lKGxudW0pICF+ICdeXHMqXChleHRlbmRzXHxpbXBsZW1lbnRzXClcPicKKyAgICBsZXQgdGhlSW5kZW50ID0gdGhlSW5kZW50ICsgJnN3CisgIGVuZGlmCisKKyAgIiBjb3JyZWN0IGZvciBjb250aW51YXRpb24gbGluZXMgb2YgInRocm93cyIsICJpbXBsZW1lbnRzIiBhbmQgImV4dGVuZHMiCisgIGxldCBjb250X2t3ID0gbWF0Y2hzdHIoZ2V0bGluZShwcmV2KSwKKyAgICAgICAgXCAnXlxzKlx6c1wodGhyb3dzXHxpbXBsZW1lbnRzXHxleHRlbmRzXClcPlx6ZS4qLFxzKiQnKQorICBpZiBzdHJsZW4oY29udF9rdykgPiAwCisgICAgbGV0IGFtb3VudCA9IHN0cmxlbihjb250X2t3KSArIDEKKyAgICBpZiBnZXRsaW5lKGxudW0pICF+ICcsXHMqJCcKKyAgICAgIGxldCB0aGVJbmRlbnQgPSB0aGVJbmRlbnQgLSAoYW1vdW50ICsgJnN3KQorICAgICAgaWYgdGhlSW5kZW50IDwgMAorICAgICAgICBsZXQgdGhlSW5kZW50ID0gMAorICAgICAgZW5kaWYKKyAgICBlbHNlaWYgcHJldiA9PSBsbnVtCisgICAgICBsZXQgdGhlSW5kZW50ID0gdGhlSW5kZW50ICsgYW1vdW50CisgICAgICBpZiBjb250X2t3ID09IyAndGhyb3dzJworICAgICAgICBsZXQgdGhlSW5kZW50ID0gdGhlSW5kZW50ICsgJnN3CisgICAgICBlbmRpZgorICAgIGVuZGlmCisgIGVsc2VpZiBnZXRsaW5lKHByZXYpID1+ICdeXHMqXCh0aHJvd3NcfGltcGxlbWVudHNcfGV4dGVuZHNcKVw+JworICAgICAgICBcICYmIChnZXRsaW5lKHByZXYpID1+ICd7XHMqJCcKKyAgICAgICAgXCAgfHwgZ2V0bGluZSh2OmxudW0pID1+ICdeXHMqe1xzKiQnKQorICAgIGxldCB0aGVJbmRlbnQgPSB0aGVJbmRlbnQgLSAmc3cKKyAgZW5kaWYKKworICAiIFdoZW4gdGhlIGxpbmUgc3RhcnRzIHdpdGggYSB9LCB0cnkgYWxpZ25pbmcgaXQgd2l0aCB0aGUgbWF0Y2hpbmcgeywKKyAgIiBza2lwcGluZyBvdmVyICJ0aHJvd3MiLCAiZXh0ZW5kcyIgYW5kICJpbXBsZW1lbnRzIiBjbGF1c2VzLgorICBpZiBnZXRsaW5lKHY6bG51bSkgPX4gJ15ccyp9XHMqXCgvLy4qXHwvXCouKlwpXD0kJworICAgIGNhbGwgY3Vyc29yKHY6bG51bSwgMSkKKyAgICBzaWxlbnQgbm9ybWFsICUKKyAgICBsZXQgbG51bSA9IGxpbmUoJy4nKQorICAgIGlmIGxudW0gPCB2OmxudW0KKyAgICAgIHdoaWxlIGxudW0gPiAxCisgICAgICAgIGxldCBuZXh0X2xudW0gPSBTa2lwSmF2YUJsYW5rc0FuZENvbW1lbnRzKGxudW0gLSAxKQorICAgICAgICBpZiBnZXRsaW5lKGxudW0pICF+ICdeXHMqXCh0aHJvd3NcfGV4dGVuZHNcfGltcGxlbWVudHNcKVw+JworICAgICAgICAgICAgICBcICYmIGdldGxpbmUobmV4dF9sbnVtKSAhfiAnLFxzKiQnCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZW5kaWYKKyAgICAgICAgbGV0IGxudW0gPSBwcmV2bm9uYmxhbmsobmV4dF9sbnVtKQorICAgICAgZW5kd2hpbGUKKyAgICAgIHJldHVybiBpbmRlbnQobG51bSkKKyAgICBlbmRpZgorICBlbmRpZgorCisgICIgQmVsb3cgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIn0iIG5ldmVyIGluZGVudCBtb3JlLiAgTmVlZGVkIGZvciBhIG1ldGhvZAorICAiIGJlbG93IGEgbWV0aG9kIHdpdGggYW4gaW5kZW50ZWQgInRocm93cyIgY2xhdXNlLgorICBsZXQgbG51bSA9IFNraXBKYXZhQmxhbmtzQW5kQ29tbWVudHModjpsbnVtIC0gMSkKKyAgaWYgZ2V0bGluZShsbnVtKSA9fiAnXlxzKn1ccypcKC8vLipcfC9cKi4qXClcPSQnICYmIGluZGVudChsbnVtKSA8IHRoZUluZGVudAorICAgIGxldCB0aGVJbmRlbnQgPSBpbmRlbnQobG51bSkKKyAgZW5kaWYKKworICByZXR1cm4gdGhlSW5kZW50CitlbmRmdW5jdGlvbgorCisiIHZpOiBzdz0yIGV0CmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9sdWEudmltIGIvcnVudGltZS9pbmRlbnQvbHVhLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2UzOTdlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvbHVhLnZpbQpAQCAtMCwwICsxLDQ5IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJTHVhIHNjcmlwdAorIiBNYWludGFpbmVyOglNYXJjdXMgQXVyZWxpdXMgRmFyaWFzIDxtYXJjdXNjZkB2YW50LmNvbS5icj4KKyIgRmlyc3QgQXV0aG9yOglNYXggSXNjaGVua28gPG1maUB1a3IubmV0PgorIiBMYXN0IENoYW5nZToJMjAwMyBKYW4gMjAKKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldEx1YUluZGVudCIpIHwgZmluaXNoIHwgZW5kaWYKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRMdWFJbmRlbnQoKQorCisiIFRvIG1ha2UgVmltIGNhbGwgR2V0THVhSW5kZW50KCkgd2hlbiBpdCBmaW5kcyAnXHMqZW5kJyBvciAnXHMqdW50aWwnCisiIG9uIHRoZSBjdXJyZW50IGxpbmUgKGVsc2UgaXMgZGVmYXVsdCkuCitzZXRsb2NhbCBpbmRlbnRrZXlzKz0wPWVuZCwwPXVudGlsCisKK3NldGxvY2FsIGF1dG9pbmRlbnQKKworZnVuY3Rpb24hIEdldEx1YUluZGVudCgpCisgICIgRmluZCBhIG5vbi1ibGFuayBsaW5lIGFib3ZlIHRoZSBjdXJyZW50IGxpbmUuCisgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisKKyAgIiBIaXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCB1c2UgemVybyBpbmRlbnQuCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgIiBBZGQgYSAnc2hpZnR3aWR0aCcgYWZ0ZXIgbGluZXMgYmVnaW5uaW5nIHdpdGg6CisgICIgZnVuY3Rpb24sIGlmLCBmb3IsIHdoaWxlLCByZXBlYXQsIGVsc2UsIGVsc2VpZiwgJ3snCisgIGxldCBpbmQgPSBpbmRlbnQobG51bSkKKyAgbGV0IGZsYWcgPSAwCisgIGlmIGdldGxpbmUobG51bSkgPX4gJ15ccypcKGZ1bmN0aW9uXD5cfGlmXD5cfGZvclw+XHx3aGlsZVw+XHxyZXBlYXRcPlx8ZWxzZVw+XHxlbHNlaWZcPlx8ZG9cPlwpJyB8fCBnZXRsaW5lKGxudW0pID1+ICd7XHMqJCcgfHwgZ2V0bGluZShsbnVtKSA9fiAnXHMqPVxzKmZ1bmN0aW9uJworICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICBsZXQgZmxhZyA9IDEKKyAgZW5kaWYKKworICAiIFN1YnRyYWN0IGEgJ3NoaWZ0d2lkdGgnIGFmdGVyIGxpbmVzIGVuZGluZyB3aXRoCisgICIgJ2VuZCcgd2hlbiB0aGV5IGJlZ2luIHdpdGggd2hpbGUsIGlmLCBmb3IsIGV0Yy4KKyAgaWYgZmxhZyA9PSAxICYmIGdldGxpbmUobG51bSkgPX4gJ1w8ZW5kXD5cfFw8dW50aWxcPicKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVuZGlmCisKKyAgIiBTdWJ0cmFjdCBhICdzaGlmdHdpZHRoJyBvbiBlbmQsIGVsc2UgKGFuZCBlbHNlaWYpLCB1bnRpbCBhbmQgJ30nCisgICIgVGhpcyBpcyB0aGUgcGFydCB0aGF0IHJlcXVpcmVzICdpbmRlbnRrZXlzJy4KKyAgaWYgZ2V0bGluZSh2OmxudW0pID1+ICdeXHMqXChlbmRcfGVsc2VcfHVudGlsXHx9XCknCisgICAgbGV0IGluZCA9IGluZCAtICZzdworICBlbmRpZgorCisgIHJldHVybiBpbmQKK2VuZGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9tYWtlLnZpbSBiL3J1bnRpbWUvaW5kZW50L21ha2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNzY0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9tYWtlLnZpbQpAQCAtMCwwICsxLDU3IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJICAgIE1ha2VmaWxlCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9pbmRlbnQvcGNwL21ha2UvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDQtMjUKKyIgYXJjaC10YWc6CSAgICBiNTM5ZTE0Ny1hMDVjLTQ4NjAtOThhZi0xZDI0MzZkYjJmNGIKKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgIGZpbmlzaAorZW5kaWYKKworbGV0IGI6ZGlkX2luZGVudCA9IDEKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRNYWtlSW5kZW50KCkKK3NldGxvY2FsIGluZGVudGtleXM9IV5GLG8sTworCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0TWFrZUluZGVudCIpCisgIGZpbmlzaAorZW5kaWYKKworZnVuY3Rpb24gczpHZXRTdHJpbmdXaWR0aChsaW5lLCBzdHIpCisgIGxldCBlbmQgPSBtYXRjaGVuZChhOmxpbmUsIGE6c3RyKQorICBsZXQgd2lkdGggPSAwCisgIGxldCBpID0gMAorICB3aGlsZSBpIDwgZW5kCisgICAgaWYgYTpsaW5lW2ldICE9ICJcdCIKKyAgICAgIGxldCB3aWR0aCA9IHdpZHRoICsgMQorICAgIGVsc2UKKyAgICAgIGxldCB3aWR0aCA9IHdpZHRoICsgJnRzIC0gKHdpZHRoICUgJnRzKQorICAgIGVuZGlmCisgICAgbGV0IGkgPSBpICsgMQorICBlbmR3aGlsZQorICByZXR1cm4gd2lkdGgKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIEdldE1ha2VJbmRlbnQoKQorICBpZiB2OmxudW0gPT0gMQorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgbGV0IGluZCA9IGluZGVudCh2OmxudW0gLSAxKQorICBsZXQgbGluZSA9IGdldGxpbmUodjpsbnVtIC0gMSkKKworICBpZiBsaW5lID09ICcnCisgICAgbGV0IGluZCA9IDAKKyAgZWxzZWlmIGxpbmUgPX4gJ15bXiBcdCM6XVteIzpdKjpcezEsMn1cKFtePTpdXHwkXCknCisgICAgbGV0IGluZCA9IGluZCArICZ0cworICBlbHNlaWYgbGluZSA9fiAnXlxzKlxoXHcqXHMqPVxzKi5cK1xcJCcKKyAgICBsZXQgaW5kID0gczpHZXRTdHJpbmdXaWR0aChsaW5lLCAnPVxzKicpCisgIGVuZGlmCisKKyAgcmV0dXJuIGluZAorZW5kZnVuY3Rpb24KKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvbWF0bGFiLnZpbSBiL3J1bnRpbWUvaW5kZW50L21hdGxhYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjY2M3YwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L21hdGxhYi52aW0KQEAgLTAsMCArMSw3NCBAQAorIiBNYXRsYWIgaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CU1hdGxhYgorIiBNYWludGFpbmVyOglDaHJpc3RvcGhlIFBvdWNldCA8Y2hyaXN0b3BoZS5wb3VjZXRAcGFuZG9yYS5iZT4KKyIgTGFzdCBDaGFuZ2U6CTYgSmFudWFyeSwgMjAwMQorCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorbGV0IGI6ZGlkX2luZGVudCA9IDEKKworIiBTb21lIHByZWxpbWluYXJ5IHNldHRpbmcKK3NldGxvY2FsIGluZGVudGtleXM9IQYsbyxPPWVuZCw9Y2FzZSw9ZWxzZSw9ZWxzZWlmLD1vdGhlcndpc2UsPWNhdGNoCisKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRNYXRsYWJJbmRlbnQodjpsbnVtKQorCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0TWF0bGFiSW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCitmdW5jdGlvbiBHZXRNYXRsYWJJbmRlbnQobG51bSkKKyAgIiBHaXZlIHVwIGlmIHRoaXMgbGluZSBpcyBleHBsaWNpdGx5IGpvaW5lZC4KKyAgaWYgZ2V0bGluZShhOmxudW0gLSAxKSA9fiAnXFwkJworICAgIHJldHVybiAtMQorICBlbmRpZgorCisgICIgU2VhcmNoIGJhY2t3YXJkcyBmb3IgdGhlIGZpcnN0IG5vbi1lbXB0eSBsaW5lLgorICBsZXQgcGxudW0gPSBhOmxudW0gLSAxCisgIHdoaWxlIHBsbnVtID4gMCAmJiBnZXRsaW5lKHBsbnVtKSA9fiAnXlxzKiQnCisgICAgbGV0IHBsbnVtID0gcGxudW0gLSAxCisgIGVuZHdoaWxlCisKKyAgaWYgcGxudW0gPT0gMAorICAgICIgVGhpcyBpcyB0aGUgZmlyc3Qgbm9uLWVtcHR5IGxpbmUsIHVzZSB6ZXJvIGluZGVudC4KKyAgICByZXR1cm4gMAorICBlbmRpZgorCisgIGxldCBjdXJpbmQgPSBpbmRlbnQocGxudW0pCisKKyAgIiBJZiB0aGUgY3VycmVudCBsaW5lIGlzIGEgc3RvcC1ibG9jayBzdGF0ZW1lbnQuLi4KKyAgaWYgZ2V0bGluZSh2OmxudW0pID1+ICdeXHMqXChlbmRcfGVsc2VcfGVsc2VpZlx8Y2FzZVx8b3RoZXJ3aXNlXHxjYXRjaFwpXD4nCisgICAgIiBTZWUgaWYgdGhpcyBsaW5lIGRvZXMgbm90IGZvbGxvdyB0aGUgbGluZSByaWdodCBhZnRlciBhbiBvcGVuYmxvY2sKKyAgICBpZiBnZXRsaW5lKHBsbnVtKSA9fiAnXlxzKlwoZm9yXHxpZlx8ZWxzZVx8ZWxzZWlmXHxjYXNlXHx3aGlsZVx8c3dpdGNoXHx0cnlcfG90aGVyd2lzZVx8Y2F0Y2hcKVw+JworICAgICIgU2VlIGlmIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGRlZGVudGVkCisgICAgZWxzZWlmIGluZGVudCh2OmxudW0pID4gY3VyaW5kIC0gJnN3CisgICAgICAiIElmIG5vdCwgcmVjb21tZW5kIG9uZSBkZWRlbnQKKwlsZXQgY3VyaW5kID0gY3VyaW5kIC0gJnN3CisgICAgZWxzZQorICAgICAgIiBPdGhlcndpc2UsIHRydXN0IHRoZSB1c2VyCisgICAgICByZXR1cm4gLTEKKyAgICBlbmRpZgorIiAgZW5kaWYKKworICAiIElmIHRoZSBwcmV2aW91cyBsaW5lIG9wZW5lZCBhIGJsb2NrCisgIGVsc2VpZiBnZXRsaW5lKHBsbnVtKSA9fiAnXlxzKlwoZm9yXHxpZlx8ZWxzZVx8ZWxzZWlmXHxjYXNlXHx3aGlsZVx8c3dpdGNoXHx0cnlcfG90aGVyd2lzZVx8Y2F0Y2hcKVw+JworICAgICIgU2VlIGlmIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGluZGVudGVkCisgICAgaWYgaW5kZW50KHY6bG51bSkgPCBjdXJpbmQgKyAmc3cKKyAgICAgICJJZiBub3QsIHJlY29tbWVuZCBpbmRlbnQKKyAgICAgIGxldCBjdXJpbmQgPSBjdXJpbmQgKyAmc3cKKyAgICBlbHNlCisgICAgICAiIE90aGVyd2lzZSwgdHJ1c3QgdGhlIHVzZXIKKyAgICAgIHJldHVybiAtMQorICAgIGVuZGlmCisgIGVuZGlmCisKKworCisgICIgSWYgd2UgZ290IHRvIGhlcmUsIGl0IG1lYW5zIHRoYXQgdGhlIHVzZXIgdGFrZXMgdGhlIHN0YW5kYXJkdmVyc2lvbiwgc28gd2UgcmV0dXJuIGl0CisgIHJldHVybiBjdXJpbmQKK2VuZGZ1bmN0aW9uCisKKyIgdmltOnN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L21wLnZpbSBiL3J1bnRpbWUvaW5kZW50L21wLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWVhNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvbXAudmltCkBAIC0wLDAgKzEsMjA2IEBACisiIE1ldGFQb3N0IGluZGVudCBmaWxlCisiIExhbmd1YWdlOglNZXRhUG9zdAorIiBNYWludGFpbmVyOglFdWdlbmUgTWlua292c2tpaSA8ZW1pbkBtY2NtZS5ydT4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTm92IDIxCisiIFZlcnNpb246IDAuMQorIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisiIElkZW50YXRpb24gUnVsZXM6IHt7ezEKKyIgRmlyc3Qgb2YgYWxsLCBNZXRhUG9zdCBsYW5ndWFnZSBkb24ndCBleHBlY3QgYW55IGlkZW50YXRpb24gcnVsZXMuCisiIFRoaXMgc2NyZWVwdCBuZWVkIGZvciB5b3Ugb25seSBpZiB5b3UgKG5vdCBNZXRhUG9zdCkgbmVlZCB0byBkbworIiBleGFjdGx5IGNvZGUuIElmIHlvdSBkb24ndCBuZWVkIHRvIHVzZSBpbmRlbnRhdGlvbiwgc2VlCisiIDpoZWxwIGZpbGV0eXBlLWluZGVudC1vZmYKKyIKKyIgTm90ZTogRXZlcnkgcnVsZXMgb2YgaWRlbnRhdGlvbiBpbiBNZXRhUG9zdCBvciBUZVggbGFuZ3VhZ2VzIChhbmQgaW4gc29tZQorIiBvdGhlciBvZiBjb3Vyc2UpIGlzIHZlcnkgc3ViamVjdGl2ZS4gSSBjYW4gcmVsZWFzZSBvbmx5IG15IHZpc2lvbiBvZiB0aGlzCisiIHByb21sZW0uCisiCisiIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisiIEV4YW1wbGUgb2YgY29ycmVjdCAoYnkgbWUpIGlkZW50YXRpb24ge3t7MgorIiBzaGlmdHdpZHRoPTQKKyIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyIgZm9yIGk9MCB1cHRvIDk5OgorIiAgICAgeltpXSA9ICgwLDF1KSByb3RhdGVkIChpKjM2MC8xMDApOworIiBlbmRmb3IKKyIgZHJhdyB6MCAtLSB6MTAgLS0gejIwCisiICAgICAgICAgd2l0aHBlbiAuLi4gICAgICUgPC0gMnN3IGJlY2F1c2UgYnJlYWtlZCBsaW5lCisiICAgICAgICAgd2l0aGNvbG9yIC4uLjsgICUgPC0gc2FtZSBhcyBwcmV2aW91cworIiBkcmF3IHowIGZvciBpPTEgdXB0byA5OToKKyIgICAgICAgICAgICAgLS0geltpXSAgICAgICAgICAgICAlIDwtIDFzdyBmcm9tIGxlZnQgZW5kIG9mICdmb3InIHNhdGVtZW50CisiICAgICAgICAgZW5kZm9yIHdpdGhwZW4gLi4uICAgICAgJSA8LSAwc3cgZnJvbSBsZWZ0IGVuZCBvZiAnZm9yJyBzYXRlbWVudAorIiAgICAgICAgICAgICAgICAgd2l0aGNvbG9yIC4uLjsgICUgPC0gMnN3IGJlY2F1c2UgYnJlYWtlZCBsaW5lCisiIGRyYXcgaWYgT25lOiAgICAgJSA8LSBUaGlzIGlzIGludGVybmFsIGlmIChsaWtlICdmb3InIGFib3ZlKQorIiAgICAgICAgICBvbmUKKyIgICAgICBlbHNpZiBPdGhlcjoKKyIgICAgICAgICAgb3RoZXIKKyIgICAgICBmaSB3aXRocGVuIC4uLjsKKyIgaWYgb25lOiAgICAgICAgICAlIDwtIFRoaXMgaXMgZXh0ZXJuYWwgaWYKKyIgICAgIGRyYXcgb25lOworIiBlbHNlaWYgb3RoZXI6CisiICAgICBkcmF3IG90aGVyOworIiBmaQorIiBkcmF3IHowOyBkcmF3IHoxOworIiB9fX0KKyIgfX19CisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCitzZXRsb2NhbCBpbmRlbnRleHByPUdldE1ldGFQb3N0SW5kZW50KCkKK3NldGxvY2FsIGluZGVudGtleXMrPTssPDo+LD1pZiw9Zm9yLD1kZWYsPWVuZCw9ZWxzZSw9ZmkKKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldE1ldGFQb3N0SW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCisiIEF1eGlsaWFyeSBEZWZpbml0aW9uczoge3t7MQorZnVuY3Rpb24hIE1ldGFOZXh0Tm9uYmxhbmtOb25jb21tZW50KHBvcykKKyAgIiBMaWtlIG5leHRub25ibGFuaygpIGJ1dCBpZ25vcmUgY29tbWVudCBsaW5lcworICBsZXQgdG1wID0gbmV4dG5vbmJsYW5rKGE6cG9zKQorICB3aGlsZSB0bXAgJiYgZ2V0bGluZSh0bXApID1+ICdeXHMqJScKKyAgICBsZXQgdG1wID0gbmV4dG5vbmJsYW5rKHRtcCsxKQorICBlbmR3aGlsZQorICByZXR1cm4gdG1wCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgTWV0YVByZXZOb25ibGFua05vbmNvbW1lbnQocG9zKQorICAiIExpa2UgcHJldm5vbmJsYW5rKCkgYnV0IGlnbm9yZSBjb21tZW50IGxpbmVzCisgIGxldCB0bXAgPSBwcmV2bm9uYmxhbmsoYTpwb3MpCisgIHdoaWxlIHRtcCAmJiBnZXRsaW5lKHRtcCkgPX4gJ15ccyolJworICAgIGxldCB0bXAgPSBwcmV2bm9uYmxhbmsodG1wLTEpCisgIGVuZHdoaWxlCisgIHJldHVybiB0bXAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBNZXRhU2VhcmNoTm9uY29tbWVudChwYXR0ZXJuLCAuLi4pCisgICIgTGlrZSBzZWFyY2goKSBidXQgaWdub3JlIGNvbW1lbnRlZCBhcmVhcworICBpZiBhOjAKKyAgICBsZXQgZmxhZ3MgPSBhOjEKKyAgZWxzZWlmICZ3cmFwc2NhbgorICAgIGxldCBmbGFncyA9ICJ3IgorICBlbHNlCisgICAgbGV0IGZsYWdzID0gIlciCisgIGVuZGlmCisgIGxldCBjbCAgPSBsaW5lKCIuIikKKyAgbGV0IGNjICA9IGNvbCgiLiIpCisgIGxldCB0bXAgPSBzZWFyY2goYTpwYXR0ZXJuLCBmbGFncykKKyAgd2hpbGUgdG1wICYmIHN5bklEYXR0cihzeW5JRChsaW5lKCIuIiksIGNvbCgiLiIpLCAxKSwgIm5hbWUiKSA9fgorICAgICAgICBcICdtW2ZwXVwoQ29tbWVudFx8VGVYaW5zZXJ0XHxTdHJpbmdcKScKKyAgICBsZXQgdG1wID0gc2VhcmNoKGE6cGF0dGVybiwgZmxhZ3MpCisgIGVuZHdoaWxlCisgIGlmICF0bXAKKyAgICBjYWxsIGN1cnNvcihjbCxjYykKKyAgZW5kaWYKKyAgcmV0dXJuIHRtcAorZW5kZnVuY3Rpb24KKyIgfX19CisKK2Z1bmN0aW9uISBHZXRNZXRhUG9zdEluZGVudCgpCisgICIgbm90IGluZGVudCBpbiBjb21tZW50ID8/PworICBpZiBzeW5JRGF0dHIoc3luSUQobGluZSgiLiIpLCBjb2woIi4iKSwgMSksICJuYW1lIikgPX4KKyAgICAgICAgXCAnbVtmcF1cKENvbW1lbnRcfFRlWGluc2VydFx8U3RyaW5nXCknCisgICAgcmV0dXJuIC0xCisgIGVuZGlmCisgICIgU29tZSBSZWdFeHBzOiB7e3sxCisgICIgZW5kX29mX2l0ZW06IGFsbCBvZiBlbmQgYnkgJzsnCisgICIgICAgICAgICAgICArIGFsbCBvZiBlbmQgYnkgOmVuZGZvciwgOmVuZGRlZiwgOmVuZGZpZywgOmVuZGdyb3VwLCA6ZmkKKyAgIiAgICAgICAgICAgICsgYWxsIG9mIHN0YXJ0IGJ5IDpiZWdpbmZpZyhudW0pLCA6YmVnaW5ncm91cAorICAiICAgICAgICAgICAgKyBhbGwgb2Ygc3RhcnQgYnkgOmZvciwgOmlmLCA6ZWxzZSwgOmVsc2VpZiBhbmQgZW5kIGJ5ICc6JworICAiICAgICAgICAgICAgKyBhbGwgb2Ygc3RhcnQgYnkgOmRlZiwgOnZhcmRlZiAgICAgICAgICAgICBhbmQgZW5kIGJ5ICc9JworICBsZXQgZW5kX29mX2l0ZW0gPSAnXCgnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICBcICc7XHwnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICBcICdcPFwoZW5kXChmb3JcfGRlZlx8ZmlnXHxncm91cFwpXHxmaVwpXD5cfCcgLgorICAgICAgICBcICdcPGJlZ2luXChncm91cFw+XHxmaWdccyooXHMqXGRcK1xzKilcKVx8JyAgLgorICAgICAgICBcICdcPFwoZm9yXHxpZlx8ZWxzZVwoaWZcKVw9XClcPi5cKzpcfCcgICAgICAgLgorICAgICAgICBcICdcPFwodmFyXClcPWRlZlw+LlwrPScgICAgICAgICAgICAgICAgICAgICAgLiAnXCknCisgICIgfX19CisgICIgU2F2ZTogY3VycmVudCBwb3NpdGlvbiB7e3sxCisgIGxldCBjbCA9IGxpbmUgICAoIi4iKQorICBsZXQgY2MgPSBjb2wgICAgKCIuIikKKyAgbGV0IGNzID0gZ2V0bGluZSgiLiIpCisgICIgaWYgaXQgaXMgOmJlZ2luZmlnIG9yIDplbmRmaWcgdXNlIHplcm8gaW5kZW50CisgIGlmICBjcyA9fiAnXlxzKlwoYmVnaW5cfGVuZFwpZmlnXD4nCisgICAgcmV0dXJuIDAKKyAgZW5kaWYKKyAgIiB9fX0KKyAgIiBJbml0aWFsaXNlOiBpbmQgdmFyaWFibGUge3t7MQorICAiIHNlYXJjaCBwcmV2aW91cyBpdGVtIG5vdCBpbiBjdXJyZW50IGxpbmUKKyAgbGV0IHBfc2VtaWNvbF9sID0gTWV0YVNlYXJjaE5vbmNvbW1lbnQoZW5kX29mX2l0ZW0sImJXIikKKyAgd2hpbGUgcF9zZW1pY29sX2wgPT0gY2wKKyAgICBsZXQgcF9zZW1pY29sX2wgPSBNZXRhU2VhcmNoTm9uY29tbWVudChlbmRfb2ZfaXRlbSwiYlciKQorICBlbmR3aGlsZQorICAiIGlmIHRoaXMgaXMgZmlyc3QgaXRlbSBpbiBwcm9ncmFtIHVzZSB6ZXJvIGluZGVudAorICBpZiAhcF9zZW1pY29sX2wKKyAgICByZXR1cm4gMAorICBlbmRpZgorICAiIGlmIHRoaXMgaXMgbXVsdGlsaW5lIGl0ZW0sIHJlbWVtYmVyIGZpcnN0IGluZGVudAorICBpZiBNZXRhTmV4dE5vbmJsYW5rTm9uY29tbWVudChwX3NlbWljb2xfbCsxKSA8IGNsCisgICAgbGV0IGluZCA9IGluZGVudChNZXRhTmV4dE5vbmJsYW5rTm9uY29tbWVudChwX3NlbWljb2xfbCsxKSkKKyAgIiBlbHNlIC0tLSBzZWFyY2ggcHJlLXByZXZpb3VzIGl0ZW0gZm9yIHNlYXJjaCBmaXJzdCBsaW5lIGluIHByZXZpb3VzIGl0ZW0KKyAgZWxzZQorICAgICIgc2VhcmNoIHByZS1wcmV2aW91cyBpdGVtIG5vdCBpbiBjdXJyZW50IGxpbmUKKyAgICBsZXQgcHBfc2VtaWNvbF9sID0gTWV0YVNlYXJjaE5vbmNvbW1lbnQoZW5kX29mX2l0ZW0sImJXIikKKyAgICB3aGlsZSBwcF9zZW1pY29sX2wgPT0gcF9zZW1pY29sX2wKKyAgICAgIGxldCBwcF9zZW1pY29sX2wgPSBNZXRhU2VhcmNoTm9uY29tbWVudChlbmRfb2ZfaXRlbSwiYlciKQorICAgIGVuZHdoaWxlCisgICAgIiBpZiB3ZSBmaW5kIHByZS1wcmV2aW91cyBpdGVtLCByZW1lbWJlciBpbmRlbnQgb2YgcHJldmlvdXMgaXRlbQorICAgICIgZWxzZSAtLS0gcmVtZW1iZXIgemVybworICAgIGlmIHBwX3NlbWljb2xfbAorICAgICAgbGV0IGluZCA9IGluZGVudChNZXRhTmV4dE5vbmJsYW5rTm9uY29tbWVudChsaW5lKCIuIikrMSkpCisgICAgZWxzZQorICAgICAgbGV0IGluZCA9IDAKKyAgICBlbmRpZgorICBlbmRpZgorICAiIH19fQorICAiIEluY3JlYXNlIEluZGVudDoge3t7MQorICAiIGlmIGl0IGlzIGFuIGludGVybmFsL2V4dGVybmFsIDpmb3Igb3IgOmlmIHN0YXRlbWVudHMge3t7MgorICBsZXQgcG5uX3MgPSBnZXRsaW5lKE1ldGFQcmV2Tm9uYmxhbmtOb25jb21tZW50KGNsLTEpKQorICBpZiAgcG5uX3MgPX4gJ1w8XChmb3JcfGlmXClcPi5cKzpccypcKCRcfCVcKScKKyAgICBsZXQgaW5kID0gbWF0Y2gocG5uX3MsICdcPFwoZm9yXHxpZlwpXD4uXCs6XHMqXCgkXHwlXCknKSArICZzdworICAiIH19fQorICAiIGlmIGl0IGlzIGEgOmRlZiwgOnZhcmRlZiwgOmJlZ2luZmlnLCA6YmVnaW5ncm91cCwgOmVsc2UsIDplbHNlaWYge3t7MgorICBlbHNlaWYgcG5uX3MgPX4gJ15ccypcKCcgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgXCAnXCh2YXJcKVw9ZGVmXHwnICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgIFwgJ2JlZ2luXChncm91cFx8ZmlnXHMqKFxzKlxkXCtccyopXClcfCcgLgorICAgICAgICBcICdlbHNlXChpZlwpXD0nICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ1wpXD4nCisgICAgbGV0IGluZCA9IGluZCArICZzdworICAiIH19fQorICAiIGlmIGl0IGlzIGEgYnJva2VuIGxpbmUge3t7MgorICBlbHNlaWYgcG5uX3MgIX4gZW5kX29mX2l0ZW0uJ1xzKlwoJFx8JVwpJworICAgIGxldCBpbmQgPSBpbmQgKyAoMiAqICZzdykKKyAgZW5kaWYKKyAgIiB9fX0KKyAgIiB9fX0KKyAgIiBEZWNyZWFzZSBJbmRlbnQ6IHt7ezEKKyAgIiBpZiB0aGlzIGlzIDplbmRmb3Igb3IgOmVuZGRlZiBzdGF0ZW1lbnRzIHt7ezIKKyAgIiB0aGlzIGlzIGNvcnJlY3QgYmVjYXVzZSA6ZGVmIGNhbm5vdCBiZSBpbnNpZGUgOmZvcgorICBpZiAgY3MgID1+ICdcPGVuZFwoZm9yXHxkZWZcKVw9XD4nCisgICAgY2FsbCBNZXRhU2VhcmNoTm9uY29tbWVudCgnXDxmb3JcPi5cKzpccypcKCRcfCVcKScgLiAnXHwnIC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICdeXHMqXCh2YXJcKVw9ZGVmXD4nLCJiVyIpCisgICAgaWYgY29sKCIuIikgPiAxCisgICAgICBsZXQgaW5kID0gY29sKCIuIikgLSAxCisgICAgZWxzZQorICAgICAgbGV0IGluZCA9IGluZGVudCgiLiIpCisgICAgZW5kaWYKKyAgIiB9fX0KKyAgIiBpZiB0aGlzIGlzIDpmaSwgOmVsc2UsIDplbHNlaWYgc3RhdGVtZW50cyB7e3syCisgIGVsc2VpZiBjcyA9fiAnXDxcKGVsc2VcKGlmXClcPVx8ZmlcKVw+JworICAgIGNhbGwgTWV0YVNlYXJjaE5vbmNvbW1lbnQoJ1w8aWZcPi5cKzpccypcKCRcfCVcKScsImJXIikKKyAgICBsZXQgaW5kID0gY29sKCIuIikgLSAxCisgICIgfX19CisgICIgaWYgdGhpcyBpcyA6ZW5kZ3JvdXAgc3RhdGVtZW50IHt7ezIKKyAgZWxzZWlmIGNzID1+ICdeXHMqZW5kZ3JvdXBcPicKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVuZGlmCisgICIgfX19CisgICIgfX19CisKKyAgcmV0dXJuIGluZAorZW5kZnVuY3Rpb24KKyIKKworIiB2aW06c3c9MjpmZG09bWFya2VyCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9vYmpjLnZpbSBiL3J1bnRpbWUvaW5kZW50L29iamMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYWRjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9vYmpjLnZpbQpAQCAtMCwwICsxLDc5IEBACisiICAgVmltIGluZGVudCBmaWxlCisiICAgTGFuZ3VhZ2U6CSAgICBPYmplY3RpdmUtQworIiAgIE1haW50YWluZXI6CSAgICBLYXp1bm9idSBLdXJpeWFtYSA8a2F6dW5vYnUua3VyaXlhbWFAbmlmdHkuY29tPgorIiAgIExhc3QgQ2hhbmdlOiAgICAyMDA0IE1heSAxNgorIgorCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICAgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCitzZXRsb2NhbCBjaW5kZW50CisKKyIgU2V0IHRoZSBmdW5jdGlvbiB0byBkbyB0aGUgd29yay4KK3NldGxvY2FsIGluZGVudGV4cHI9R2V0T2JqQ0luZGVudCgpCisKKyIgVG8gbWFrZSBhIGNvbG9uICg6KSBzdWdnZXN0IGFuIGluZGVudGF0aW9uIG90aGVyIHRoYW4gYSBnb3RvL3N3aWNoIGxhYmVsLAorc2V0bG9jYWwgaW5kZW50a2V5cy09Ogorc2V0bG9jYWwgaW5kZW50a2V5cys9PDo+CisKKyIgT25seSBkZWZpbmUgdGhlIGZ1bmN0aW9uIG9uY2UuCitpZiBleGlzdHMoIipHZXRPYmpDSW5kZW50IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK2Z1bmN0aW9uIHM6R2V0V2lkdGgobGluZSwgcmVnZXhwKQorICAgIGxldCBlbmQgPSBtYXRjaGVuZChhOmxpbmUsIGE6cmVnZXhwKQorICAgIGxldCB3aWR0aCA9IDAKKyAgICBsZXQgaSA9IDAKKyAgICB3aGlsZSBpIDwgZW5kCisJaWYgYTpsaW5lW2ldICE9ICJcdCIKKwkgICAgbGV0IHdpZHRoID0gd2lkdGggKyAxCisJZWxzZQorCSAgICBsZXQgd2lkdGggPSB3aWR0aCArICZ0cyAtICh3aWR0aCAlICZ0cykKKwllbmRpZgorCWxldCBpID0gaSArIDEKKyAgICBlbmR3aGlsZQorICAgIHJldHVybiB3aWR0aAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gczpMZWFkaW5nV2hpdGVTcGFjZShsaW5lKQorICAgIGxldCBlbmQgPSBzdHJsZW4oYTpsaW5lKQorICAgIGxldCB3aWR0aCA9IDAKKyAgICBsZXQgaSA9IDAKKyAgICB3aGlsZSBpIDwgZW5kCisJbGV0IGNoYXIgPSBhOmxpbmVbaV0KKwlpZiBjaGFyICE9ICIgIiAmJiBjaGFyICE9ICJcdCIKKwkgICAgYnJlYWsKKwllbmRpZgorCWlmIGNoYXIgIT0gIlx0IgorCSAgICBsZXQgd2lkdGggPSB3aWR0aCArIDEKKwllbHNlCisJICAgIGxldCB3aWR0aCA9IHdpZHRoICsgJnRzIC0gKHdpZHRoICUgJnRzKQorCWVuZGlmCisJbGV0IGkgPSBpICsgMQorICAgIGVuZHdoaWxlCisgICAgcmV0dXJuIHdpZHRoCitlbmRmdW5jdGlvbgorCisKK2Z1bmN0aW9uIEdldE9iakNJbmRlbnQoKQorICAgIGxldCB0aGVJbmRlbnQgPSBjaW5kZW50KHY6bG51bSkKKworICAgIGxldCBwcmV2X2xpbmUgPSBnZXRsaW5lKHY6bG51bSAtIDEpCisgICAgbGV0IGN1cl9saW5lID0gZ2V0bGluZSh2OmxudW0pCisKKyAgICBpZiBwcmV2X2xpbmUgIX4jICI6IiB8fCBjdXJfbGluZSAhfiMgIjoiCisJcmV0dXJuIHRoZUluZGVudAorICAgIGVuZGlmCisKKyAgICBpZiBwcmV2X2xpbmUgIX4jICI7IgorCWxldCBwcmV2X2NvbG9uX3BvcyA9IHM6R2V0V2lkdGgocHJldl9saW5lLCAiOiIpCisJbGV0IGRlbHRhID0gczpHZXRXaWR0aChjdXJfbGluZSwgIjoiKSAtIHM6TGVhZGluZ1doaXRlU3BhY2UoY3VyX2xpbmUpCisJbGV0IHRoZUluZGVudCA9IHByZXZfY29sb25fcG9zIC0gZGVsdGEKKyAgICBlbmRpZgorCisgICAgcmV0dXJuIHRoZUluZGVudAorZW5kZnVuY3Rpb24KZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L29jYW1sLnZpbSBiL3J1bnRpbWUvaW5kZW50L29jYW1sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjZiNGJjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvb2NhbWwudmltCkBAIC0wLDAgKzEsMzExIEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJT0NhbWwKKyIgTWFpbnRhaW5lcnM6CUplYW4tRnJhbmNvaXMgWXVlbiAgPGpmeXVlbkBpZnJhbmNlLmNvbT4KKyIJCU1pa2UgTGVhcnkJICAgIDxsZWFyeUBud2xpbmsuY29tPgorIgkJTWFya3VzIE1vdHRsCSAgICA8bWFya3VzQG9lZmFpLmF0PgorIiBVUkw6CQlodHRwOi8vd3d3Lm9lZmFpLmF0L35tYXJrdXMvdmltL2luZGVudC9vY2FtbC52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgQXByIDE0CisiCQkyMDAzIE1hciAwNSAtIEFkZGVkICd7PCcgYW5kIHNvbWUgZml4ZXMgKEpZKQorIgkJMjAwMiBOb3YgMDYgLSBTb21lIGZpeGVzIChKWSkKKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGV4cGFuZHRhYgorc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRPQ2FtbEluZGVudCgpCitzZXRsb2NhbCBpbmRlbnRrZXlzKz0wPWFuZCwwPWNvbnN0cmFpbnQsMD1kb25lLDA9ZWxzZSwwPWVuZCwwPWV4Y2VwdGlvbiwwPWV4dGVybmFsLDA9aWYsMD1pbiwwPWluY2x1ZGUsMD1pbmhlcml0LDA9aW5pdGlhbGl6ZXIsMD1sZXQsMD1tZXRob2QsMD1vcGVuLDA9dGhlbiwwPXR5cGUsMD12YWwsMD13aXRoLDA9OzssMD0+XF0sMD1cfFxdLDA9XHwsMD0qKSwwPT59LDB9LDBcXSwwKQorc2V0bG9jYWwgbm9saXNwCitzZXRsb2NhbCBub3NtYXJ0aW5kZW50CitzZXRsb2NhbCB0ZXh0d2lkdGg9ODAKKworIiBDb21tZW50IGZvcm1hdHRpbmcKK2lmIChoYXMoImNvbW1lbnRzIikpCisgIHNldGxvY2FsIGNvbW1lbnRzPXNyOigqLG1iOiosZXg6KikKKyAgc2V0bG9jYWwgZm89Y3FvcnQKK2VuZGlmCisKKyIgT25seSBkZWZpbmUgdGhlIGZ1bmN0aW9uIG9uY2UuCitpZiBleGlzdHMoIipHZXRPQ2FtbEluZGVudCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBEZWZpbmUgc29tZSBwYXR0ZXJuczoKK2xldCBzOmJlZmxldCA9ICdeXHMqXChpbml0aWFsaXplclx8bWV0aG9kXHx0cnlcKVx8XChcPFwoYmVnaW5cfGRvXHxlbHNlXHxpblx8dGhlblx8dHJ5XClcfC0+XHw7XHwoXClccyokJworbGV0IHM6bGV0cGF0ID0gJ15ccypcKGxldFx8dHlwZVx8bW9kdWxlXHxjbGFzc1x8b3Blblx8ZXhjZXB0aW9uXHx2YWxcfGluY2x1ZGVcfGV4dGVybmFsXClcPicKK2xldCBzOmxldGxpbSA9ICdcKFw8XChzaWdcfHN0cnVjdFwpXHw7O1wpXHMqJCcKK2xldCBzOmxpbSA9ICdeXHMqXChleGNlcHRpb25cfGV4dGVybmFsXHxpbmNsdWRlXHxsZXRcfG1vZHVsZVx8b3Blblx8dHlwZVx8dmFsXClcPicKK2xldCBzOm1vZHVsZSA9ICdcPFwlKGJlZ2luXHxzaWdcfHN0cnVjdFx8b2JqZWN0XClcPicKK2xldCBzOm9iaiA9ICdeXHMqXChjb25zdHJhaW50XHxpbmhlcml0XHxpbml0aWFsaXplclx8bWV0aG9kXHx2YWxcKVw+XHxcPFwob2JqZWN0XHxvYmplY3RccyooLiopXClccyokJworbGV0IHM6dHlwZSA9ICdeXHMqXCUobGV0XHx0eXBlXClcPi4qPScKK2xldCBzOnZhbCA9ICdeXHMqXCh2YWxcfGV4dGVybmFsXClcPi4qOicKKworIiBTa2lwcGluZyBwYXR0ZXJuLCBmb3IgY29tbWVudHMKK2Z1bmN0aW9uIHM6U2tpcFBhdHRlcm4obG51bSwgcGF0KQorICBsZXQgZGVmID0gcHJldm5vbmJsYW5rKGE6bG51bSAtIDEpCisgIHdoaWxlIGRlZiA+IDAgJiYgZ2V0bGluZShkZWYpID1+IGE6cGF0CisgICAgbGV0IGRlZiA9IHByZXZub25ibGFuayhkZWYgLSAxKQorICBlbmR3aGlsZQorICByZXR1cm4gZGVmCitlbmRmdW5jdGlvbgorCisiIEluZGVudCBmb3IgJzs7JyB0byBtYXRjaCBtdWx0aXBsZSAnbGV0JworZnVuY3Rpb24gczpHZXRJbmQobG51bSwgcGF0LCBsaW0pCisgIGxldCBsbGV0ID0gc2VhcmNoKGE6cGF0LCAnYlcnKQorICBsZXQgb2xkID0gaW5kZW50KGE6bG51bSkKKyAgd2hpbGUgbGxldCA+IDAKKyAgICBsZXQgb2xkID0gaW5kZW50KGxsZXQpCisgICAgbGV0IG5iID0gczpTa2lwUGF0dGVybihsbGV0LCAnXlxzKihcKi4qXCopXHMqJCcpCisgICAgaWYgZ2V0bGluZShuYikgPX4gYTpsaW0KKyAgICAgIHJldHVybiBvbGQKKyAgICBlbmRpZgorICAgIGxldCBsbGV0ID0gc2VhcmNoKGE6cGF0LCAnYlcnKQorICBlbmR3aGlsZQorICByZXR1cm4gb2xkCitlbmRmdW5jdGlvbgorCisiIEluZGVudCBwYWlycworZnVuY3Rpb24gczpGaW5kUGFpcihwc3RhcnQsIHBtaWQsIHBlbmQpCisgIGNhbGwgc2VhcmNoKGE6cGVuZCwgJ2JXJykKKyAgcmV0dXJuIGluZGVudChzZWFyY2hwYWlyKGE6cHN0YXJ0LCBhOnBtaWQsIGE6cGVuZCwgJ2JXbicsICdzeW5JRGF0dHIoc3luSUQobGluZSgiLiIpLCBjb2woIi4iKSwgMCksICJuYW1lIikgPX4/ICJzdHJpbmdcXHxjb21tZW50IicpKQorZW5kZnVuY3Rpb24KKworIiBJbmRlbnQgJ2xldCcKK2Z1bmN0aW9uIHM6RmluZExldChwc3RhcnQsIHBtaWQsIHBlbmQpCisgIGNhbGwgc2VhcmNoKGE6cGVuZCwgJ2JXJykKKyAgcmV0dXJuIGluZGVudChzZWFyY2hwYWlyKGE6cHN0YXJ0LCBhOnBtaWQsIGE6cGVuZCwgJ2JXbicsICdzeW5JRGF0dHIoc3luSUQobGluZSgiLiIpLCBjb2woIi4iKSwgMCksICJuYW1lIikgPX4/ICJzdHJpbmdcXHxjb21tZW50IiB8fCBnZXRsaW5lKCIuIikgPX4gIl5cXHMqbGV0XFw+Lio9LipcXDxpblxccyokIiB8fCBnZXRsaW5lKHByZXZub25ibGFuaygiLiIpIC0gMSkgPX4gIl5cXHMqbGV0XFw+Lio9XFxzKiRcXHwiIC4gczpiZWZsZXQnKSkKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIEdldE9DYW1sSW5kZW50KCkKKyAgIiBGaW5kIGEgbm9uLWJsYW5rIGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZS4KKyAgbGV0IGxudW0gPSBwcmV2bm9uYmxhbmsodjpsbnVtIC0gMSkKKworICAiIEF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZSB1c2UgemVybyBpbmRlbnQuCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgbGV0IGluZCA9IGluZGVudChsbnVtKQorICBsZXQgbGxpbmUgPSBnZXRsaW5lKGxudW0pCisKKyAgIiBSZXR1cm4gZG91YmxlICdzaGlmdHdpZHRoJyBhZnRlciBsaW5lcyBtYXRjaGluZzoKKyAgaWYgbGxpbmUgPX4gJ15ccyp8LiotPlxzKiQnCisgICAgcmV0dXJuIGluZCArICZzdyArICZzdworICBlbmRpZgorCisgIGxldCBsaW5lID0gZ2V0bGluZSh2OmxudW0pCisKKyAgIiBJbmRlbnQgaWYgY3VycmVudCBsaW5lIGJlZ2lucyB3aXRoICdlbmQnCisgICIgZm9yICdzaWcnLCAnc3RydWN0JywgJ29iamVjdCcgYW5kICdiZWdpbic6CisgIGlmIGxpbmUgPX4gJ15ccyplbmRcPicKKyAgICByZXR1cm4gczpGaW5kUGFpcihzOm1vZHVsZSwgJycsJ1w8ZW5kXD4nKQorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAnZG9uZScgZm9yICdkbyc6CisgIGVsc2VpZiBsaW5lID1+ICdeXHMqZG9uZVw+JworICAgIHJldHVybiBzOkZpbmRQYWlyKCdcPGRvXD4nLCAnJywnXDxkb25lXD4nKQorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAnfScgb3IgJz59JzoKKyAgZWxzZWlmIGxpbmUgPX4gJ15ccypcKFx8PlwpfScKKyAgICByZXR1cm4gczpGaW5kUGFpcigneycsICcnLCd9JykKKworICAiIEluZGVudCBpZiBjdXJyZW50IGxpbmUgYmVnaW5zIHdpdGggJ10nLCAnfF0nIG9yICc+XSc6CisgIGVsc2VpZiBsaW5lID1+ICdeXHMqXChcfHxcfD5cKVxdJworICAgIHJldHVybiBzOkZpbmRQYWlyKCdcWycsICcnLCdcXScpCisKKyAgIiBJbmRlbnQgaWYgY3VycmVudCBsaW5lIGJlZ2lucyB3aXRoICcpJzoKKyAgZWxzZWlmIGxpbmUgPX4gJ15ccyopJworICAgIHJldHVybiBzOkZpbmRQYWlyKCcoJywgJycsJyknKQorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAnbGV0JworICAiIGFuZCBsYXN0IGxpbmUgZG9lcyBub3QgYmVnaW4gd2l0aCAnbGV0JyBvciBlbmQgd2l0aCAnaW4nIG9yICc7Oyc6CisgIGVsc2VpZiBsaW5lID1+ICdeXHMqbGV0XD4nCisgICAgaWYgbGxpbmUgIX4gczpsaW0gLiAnXHwnIC4gczpsZXRsaW0gLiAnXHwnIC4gczpiZWZsZXQKKyAgICAgIHJldHVybiBzOkZpbmRMZXQoczp0eXBlLCAnJywnXDxsZXRccyokJykKKyAgICBlbHNlIHJldHVybiBpbmQKKyAgICBlbmRpZgorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAndHlwZScKKyAgIiBhbmQgbGFzdCBsaW5lIGRvZXMgbm90IGVuZCB3aXRoICdhbmQnIG9yICc7Oyc6CisgIGVsc2VpZiBsaW5lID1+ICdeXHMqdHlwZVw+JworICAgIGlmIGxsaW5lICF+IHM6bGltIC4gJ1x8XDxhbmRccyokXHwnIC4gczpsZXRsaW0KKyAgICAgIHJldHVybiBzOkZpbmRMZXQoczp0eXBlLCAnJywnXDx0eXBlXHMqJCcpCisgICAgZWxzZSByZXR1cm4gaW5kCisgICAgZW5kaWYKKworICAiIEluZGVudCBmb3IgcGF0dGVybiBtYXRjaGluZzoKKyAgZWxzZWlmIGxpbmUgPX4gJ15ccyp8JworICAgIGlmIGxsaW5lICF+ICdeXHMqXCh8XHxcKG1hdGNoXHx3aXRoXHx0eXBlXClcPlwpXHxcPFwoZnVuY3Rpb25cfHBhcnNlclx8d2l0aFwpXHMqJCcKKyAgICAgIGNhbGwgc2VhcmNoKCd8JywgJ2JXJykKKyAgICAgIHJldHVybiBpbmRlbnQoc2VhcmNocGFpcignXlxzKlwodHlwZVx8bWF0Y2hcKVw+XHxcPFwod2l0aFx8ZnVuY3Rpb25cfHBhcnNlclwpXHMqJCcsICcnLCAnfCcsICdiV24nLCAnc3luSURhdHRyKHN5bklEKGxpbmUoIi4iKSwgY29sKCIuIiksIDApLCAibmFtZSIpID1+PyAic3RyaW5nXFx8Y29tbWVudCIgfHwgZ2V0bGluZSgiLiIpID1+ICJcXFt8XFx8fFxcXSIgJiYgZ2V0bGluZSgiLiIpICF+ICJeXFxzKnwuKi0+IicpKQorICAgIGVsc2UgcmV0dXJuIGluZAorICAgIGVuZGlmCisKKyAgIiBJbmRlbnQgaWYgY3VycmVudCBsaW5lIGJlZ2lucyB3aXRoICc7Oyc6CisgIGVsc2VpZiBsaW5lID1+ICdeXHMqOzsnCisgICAgaWYgbGxpbmUgIX4gJzs7XHMqJCcKKyAgICAgIHJldHVybiBzOkdldEluZCh2OmxudW0sIHM6bGV0cGF0LCBzOmxldGxpbSkKKyAgICBlbHNlIHJldHVybiBpbmQKKyAgICBlbmRpZgorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAnaW4nIGFuZCBwcmV2aW91cworICAiIGxpbmUgZG9lcyBub3Qgc3RhcnQgd2l0aCAnbGV0JyBvciAnYW5kJzoKKyAgZWxzZWlmIGxpbmUgPX4gJ15ccyppblw+JworICAgIGlmIGxsaW5lICF+ICdeXHMqXChsZXRcfGFuZFwpXD4nCisgICAgICByZXR1cm4gczpGaW5kUGFpcignXDxsZXRcPicsICcnLCAnXDxpblw+JykKKyAgICBlbHNlIHJldHVybiBpbmQKKyAgICBlbmRpZgorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAnZWxzZScKKyAgIiBhbmQgcHJldmlvdXMgbGluZSBkb2VzIG5vdCBzdGFydCB3aXRoICdpZicsICd0aGVuJyBvciAnZWxzZSc6CisgIGVsc2VpZiBsaW5lID1+ICdeXHMqZWxzZVw+JworICAgIGlmIGxsaW5lICF+ICdeXHMqXChpZlx8ZWxzZVx8dGhlblwpXD4nCisgICAgICByZXR1cm4gczpGaW5kUGFpcignXDxpZlw+JywgJycsICdcPGVsc2VcPicpCisgICAgZWxzZSByZXR1cm4gaW5kCisgICAgZW5kaWYKKworICAiIEluZGVudCBpZiBjdXJyZW50IGxpbmUgYmVnaW5zIHdpdGggJ3RoZW4nCisgICIgYW5kIHByZXZpb3VzIGxpbmUgZG9lcyBub3Qgc3RhcnQgd2l0aCAnaWYnLCAndGhlbicgb3IgJ2Vsc2UnOgorICBlbHNlaWYgbGluZSA9fiAnXlxzKnRoZW5cPicKKyAgICBpZiBsbGluZSAhfiAnXlxzKlwoaWZcfGVsc2VcfHRoZW5cKVw+JworICAgICAgcmV0dXJuIHM6RmluZFBhaXIoJ1w8aWZcPicsICcnLCAnXDx0aGVuXD4nKQorICAgIGVsc2UgcmV0dXJuIGluZAorICAgIGVuZGlmCisKKyAgIiBTdWJ0cmFjdCBhICdzaGlmdHdpZHRoJyBpZiBjdXJyZW50IGxpbmUgYmVnaW5zIHdpdGggJ2FuZCcgYW5kIHByZXZpb3VzCisgICIgbGluZSBkb2VzIG5vdCBzdGFydCB3aXRoICdsZXQnLCAnYW5kJyBvciAndHlwZScgb3IgZW5kIHdpdGggJ2VuZCcKKyAgIiAoZm9yIGNsYXNzZXMpOgorICBlbHNlaWYgbGluZSA9fiAnXlxzKmFuZFw+JworICAgIGlmIGxsaW5lICF+ICdeXHMqXChhbmRcfGxldFx8dHlwZVwpXD5cfFw8ZW5kXHMqJCcKKyAgICAgIHJldHVybiBpbmQgLSAmc3cKKyAgICBlbHNlIHJldHVybiBpbmQKKyAgICBlbmRpZgorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAnd2l0aCcKKyAgIiBhbmQgcHJldmlvdXMgbGluZSBkb2VzIG5vdCBzdGFydCB3aXRoICdtYXRjaCcgb3IgJ3RyeSc6CisgIGVsc2VpZiBsaW5lID1+ICdeXHMqd2l0aFw+JworICAgIGlmIGxsaW5lICF+ICdeXHMqXChtYXRjaFx8dHJ5XClcPicKKyAgICAgIHJldHVybiBzOkZpbmRQYWlyKCdcPFwlKG1hdGNoXHx0cnlcKVw+JywgJycsJ1w8d2l0aFw+JykKKyAgICBlbHNlIHJldHVybiBpbmQKKyAgICBlbmRpZgorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAnZXhjZXB0aW9uJzoKKyAgZWxzZWlmIGxpbmUgPX4gJ15ccypleGNlcHRpb25cPicKKyAgICBpZiBsbGluZSAhfiBzOmxpbSAuICdcfCcgLiBzOmxldGxpbQorICAgICAgcmV0dXJuIGluZGVudChzZWFyY2goczp2YWwgLiAnXHxeXHMqXChleHRlcm5hbFx8aW5jbHVkZVx8b3Blblx8dHlwZVwpXD4nLCAnYlcnKSkKKyAgICBlbHNlIHJldHVybiBpbmQKKyAgICBlbmRpZgorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAnZXh0ZXJuYWwnOgorICBlbHNlaWYgbGluZSA9fiAnXlxzKmV4dGVybmFsXD4nCisgICAgaWYgbGxpbmUgIX4gczpsaW0gLiAnXHwnIC4gczpsZXRsaW0KKyAgICAgIHJldHVybiBpbmRlbnQoc2VhcmNoKHM6dmFsIC4gJ1x8XlxzKlwoZXhjZXB0aW9uXHxpbmNsdWRlXHxvcGVuXHx0eXBlXClcPicsICdiVycpKQorICAgIGVsc2UgcmV0dXJuIGluZAorICAgIGVuZGlmCisKKyAgIiBJbmRlbnQgaWYgY3VycmVudCBsaW5lIGJlZ2lucyB3aXRoICdpbmNsdWRlJzoKKyAgZWxzZWlmIGxpbmUgPX4gJ15ccyppbmNsdWRlXD4nCisgICAgaWYgbGxpbmUgIX4gczpsaW0gLiAnXHwnIC4gczpsZXRsaW0KKyAgICAgIHJldHVybiBpbmRlbnQoc2VhcmNoKHM6dmFsIC4gJ1x8XlxzKlwoZXhjZXB0aW9uXHxleHRlcm5hbFx8b3Blblx8dHlwZVwpXD4nLCAnYlcnKSkKKyAgICBlbHNlIHJldHVybiBpbmQKKyAgICBlbmRpZgorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAnb3Blbic6CisgIGVsc2VpZiBsaW5lID1+ICdeXHMqb3Blblw+JworICAgIGlmIGxsaW5lICF+IHM6bGltIC4gJ1x8JyAuIHM6bGV0bGltCisgICAgICByZXR1cm4gaW5kZW50KHNlYXJjaChzOnZhbCAuICdcfF5ccypcKGV4Y2VwdGlvblx8ZXh0ZXJuYWxcfGluY2x1ZGVcfHR5cGVcKVw+JywgJ2JXJykpCisgICAgZWxzZSByZXR1cm4gaW5kCisgICAgZW5kaWYKKworICAiIEluZGVudCBpZiBjdXJyZW50IGxpbmUgYmVnaW5zIHdpdGggJ3ZhbCc6CisgIGVsc2VpZiBsaW5lID1+ICdeXHMqdmFsXD4nCisgICAgaWYgbGxpbmUgIX4gJ15ccypcKGV4Y2VwdGlvblx8ZXh0ZXJuYWxcfGluY2x1ZGVcfG9wZW5cKVw+XHwnIC4gczpvYmogLiAnXHwnIC4gczpsZXRsaW0KKyAgICAgIHJldHVybiBpbmRlbnQoc2VhcmNoKHM6dmFsIC4gJ1x8XlxzKlwoZXhjZXB0aW9uXHxpbmNsdWRlXHxpbml0aWFsaXplclx8bWV0aG9kXHxvcGVuXHx0eXBlXClcPicsICdiVycpKQorICAgIGVsc2UgcmV0dXJuIGluZAorICAgIGVuZGlmCisKKyAgIiBJbmRlbnQgaWYgY3VycmVudCBsaW5lIGJlZ2lucyB3aXRoICdjb25zdHJhaW50JzoKKyAgZWxzZWlmIGxpbmUgPX4gJ15ccypjb25zdHJhaW50XD4nCisgICAgaWYgbGxpbmUgIX4gczpvYmoKKyAgICAgIHJldHVybiBpbmRlbnQoc2VhcmNoKCdeXHMqXChpbmhlcml0XHxpbml0aWFsaXplclx8bWV0aG9kXHx2YWxcKVw+JywgJ2JXJykpCisgICAgZWxzZSByZXR1cm4gaW5kCisgICAgZW5kaWYKKworICAiIEluZGVudCBpZiBjdXJyZW50IGxpbmUgYmVnaW5zIHdpdGggJ2luaGVyaXQnOgorICBlbHNlaWYgbGluZSA9fiAnXlxzKmluaGVyaXRcPicKKyAgICBpZiBsbGluZSAhfiBzOm9iagorICAgICAgcmV0dXJuIGluZGVudChzZWFyY2goJ15ccypcKGNvbnN0cmFpbnRcfGluaXRpYWxpemVyXHxtZXRob2RcfHZhbFwpXD4nLCAnYlcnKSkKKyAgICBlbHNlIHJldHVybiBpbmQKKyAgICBlbmRpZgorCisgICIgSW5kZW50IGlmIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCAnaW5oZXJpdCc6CisgIGVsc2VpZiBsaW5lID1+ICdeXHMqaW5pdGlhbGl6ZXJcPicKKyAgICBpZiBsbGluZSAhfiBzOm9iagorICAgICAgcmV0dXJuIGluZGVudChzZWFyY2goJ15ccypcKGNvbnN0cmFpbnRcfGluaGVyaXRcfG1ldGhvZFx8dmFsXClcPicsICdiVycpKQorICAgIGVsc2UgcmV0dXJuIGluZAorICAgIGVuZGlmCisKKyAgIiBJbmRlbnQgaWYgY3VycmVudCBsaW5lIGJlZ2lucyB3aXRoICdtZXRob2QnOgorICBlbHNlaWYgbGluZSA9fiAnXlxzKm1ldGhvZFw+JworICAgIGlmIGxsaW5lICF+IHM6b2JqCisgICAgICByZXR1cm4gaW5kZW50KHNlYXJjaCgnXlxzKlwoXChjb25zdHJhaW50XHxpbmhlcml0XHxpbml0aWFsaXplclx8dmFsXClcPlx8bWV0aG9kXD4uKlwoOlx8PVwpXCknLCAnYlcnKSkKKyAgICBlbHNlIHJldHVybiBpbmQKKyAgICBlbmRpZgorCisgICIgSW5kZW50IGJhY2sgdG8gbm9ybWFsIGFmdGVyIGNvbW1lbnRzOgorICBlbHNlaWYgbGluZSA9fiAnXlxzKlwqKScKKyAgICBjYWxsIHNlYXJjaCgnXCopJywgJ2JXJykKKyAgICByZXR1cm4gaW5kZW50KHNlYXJjaHBhaXIoJyhcKicsICcnLCAnXCopJywgJ2JXbicsICdzeW5JRGF0dHIoc3luSUQobGluZSgiLiIpLCBjb2woIi4iKSwgMCksICJuYW1lIikgPX4/ICJzdHJpbmciJykpCisKKyAgZW5kaWYKKworICAiIEFkZCBhICdzaGlmdHdpZHRoJyBhZnRlciBsaW5lcyBlbmRpbmcgd2l0aDoKKyAgaWYgbGxpbmUgPX4gJ1woOlx8PVx8LT5cfDwtXHwoXHxcW1x8e1x8ezxcfFxbfFx8XFs8XHxcPFwoYmVnaW5cfHN0cnVjdFx8c2lnXHxmdW5jdG9yXHxpbml0aWFsaXplclx8b2JqZWN0XHx0cnlcfGRvXHxpZlx8dGhlblx8ZWxzZVx8ZnVuXHxmdW5jdGlvblx8cGFyc2VyXClcfFw8b2JqZWN0XHMqKC4qKVwpXHMqJCcKKyAgICBsZXQgaW5kID0gaW5kICsgJnN3CisKKyAgIiBCYWNrIHRvIG5vcm1hbCBpbmRlbnQgYWZ0ZXIgbGluZXMgZW5kaW5nIHdpdGggJzs7JzoKKyAgZWxzZWlmIGxsaW5lID1+ICc7O1xzKiQnICYmIGxsaW5lICF+ICdeXHMqOzsnCisgICAgbGV0IGluZCA9IHM6R2V0SW5kKHY6bG51bSwgczpsZXRwYXQsIHM6bGV0bGltKQorCisgICIgQmFjayB0byBub3JtYWwgaW5kZW50IGFmdGVyIGxpbmVzIGVuZGluZyB3aXRoICdlbmQnOgorICBlbHNlaWYgbGxpbmUgPX4gJ1w8ZW5kXHMqJCcKKyAgICBsZXQgaW5kID0gczpGaW5kUGFpcihzOm1vZHVsZSwgJycsJ1w8ZW5kXD4nKQorCisgICIgQmFjayB0byBub3JtYWwgaW5kZW50IGFmdGVyIGxpbmVzIGVuZGluZyB3aXRoICdpbic6CisgIGVsc2VpZiBsbGluZSA9fiAnXDxpblxzKiQnICYmIGxsaW5lICF+ICdeXHMqaW5cPicKKyAgICBsZXQgaW5kID0gczpGaW5kUGFpcignXDxsZXRcPicsICcnLCAnXDxpblw+JykKKworICAiIEJhY2sgdG8gbm9ybWFsIGluZGVudCBhZnRlciBsaW5lcyBlbmRpbmcgd2l0aCAnZG9uZSc6CisgIGVsc2VpZiBsbGluZSA9fiAnXDxkb25lXHMqJCcKKyAgICBsZXQgaW5kID0gczpGaW5kUGFpcignXDxkb1w+JywgJycsJ1w8ZG9uZVw+JykKKworICAiIEJhY2sgdG8gbm9ybWFsIGluZGVudCBhZnRlciBsaW5lcyBlbmRpbmcgd2l0aCAnfScgb3IgJz59JzoKKyAgZWxzZWlmIGxsaW5lID1+ICdcKFx8PlwpfVxzKiQnCisgICAgbGV0IGluZCA9IHM6RmluZFBhaXIoJ3snLCAnJywnfScpCisKKyAgIiBCYWNrIHRvIG5vcm1hbCBpbmRlbnQgYWZ0ZXIgbGluZXMgZW5kaW5nIHdpdGggJ10nLCAnfF0nIG9yICc+XSc6CisgIGVsc2VpZiBsbGluZSA9fiAnXChcfHxcfD5cKVxdXHMqJCcKKyAgICBsZXQgaW5kID0gczpGaW5kUGFpcignXFsnLCAnJywnXF0nKQorCisgICIgQmFjayB0byBub3JtYWwgaW5kZW50IGFmdGVyIGNvbW1lbnRzOgorICBlbHNlaWYgbGxpbmUgPX4gJ1wqKVxzKiQnCisgICAgY2FsbCBzZWFyY2goJ1wqKScsICdiVycpCisgICAgbGV0IGluZCA9IGluZGVudChzZWFyY2hwYWlyKCcoXConLCAnJywgJ1wqKScsICdiV24nLCAnc3luSURhdHRyKHN5bklEKGxpbmUoIi4iKSwgY29sKCIuIiksIDApLCAibmFtZSIpID1+PyAic3RyaW5nIicpKQorCisgICIgQmFjayB0byBub3JtYWwgaW5kZW50IGFmdGVyIGxpbmVzIGVuZGluZyB3aXRoICcpJzoKKyAgZWxzZWlmIGxsaW5lID1+ICcpXHMqJCcKKyAgICBsZXQgaW5kID0gczpGaW5kUGFpcignKCcsICcnLCcpJykKKworICBlbmRpZgorCisgICIgU3VidHJhY3QgYSAnc2hpZnR3aWR0aCcgYWZ0ZXIgbGluZXMgbWF0Y2hpbmcgJ21hdGNoIC4uLiB3aXRoIHBhcnNlcic6CisgIGlmIGxsaW5lID1+ICdeXHMqbWF0Y2hcPi4qXDx3aXRoXD5ccypcPHBhcnNlclxzKiQnCisgICAgbGV0IGluZCA9IGluZCAtICZzdworICBlbmRpZgorCisgIHJldHVybiBpbmQKKworZW5kZnVuY3Rpb24KKworIiB2aW06c3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvb2NjYW0udmltIGIvcnVudGltZS9pbmRlbnQvb2NjYW0udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOTc4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9vY2NhbS52aW0KQEAgLTAsMCArMSwxODIgQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOglvY2NhbQorIiBNYWludGFpbmVyOglNYXJpbyBTY2h3ZWlnbGVyIDxtczQ0QGtlbnQuYWMudWs+CisiIExhc3QgQ2hhbmdlOgkyMyBBcHJpbCAyMDAzCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCisie3t7ICBTZXR0aW5ncworIiBTZXQgdGhlIG9jY2FtIGluZGVudCBmdW5jdGlvbgorc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRPY2NhbUluZGVudCgpCisiIEluZGVudCBhZnRlciBuZXcgbGluZSBhbmQgYWZ0ZXIgaW5pdGlhbCBjb2xvbgorc2V0bG9jYWwgaW5kZW50a2V5cz1vLE8sMD06CisifX19CisKKyIgT25seSBkZWZpbmUgdGhlIGZ1bmN0aW9uIG9uY2UKK2lmIGV4aXN0cygiKkdldE9jY2FtSW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCisie3t7ICBJbmRlbnQgZGVmaW5pdGlvbnMKKyIgRGVmaW5lIGNhcnJpYWdlIHJldHVybiBpbmRlbnQKK2xldCBzOkZpcnN0TGV2ZWxJbmRlbnQgPSAnXlxDXHMqXChJRlx8QUxUXHxQUklcc1wrQUxUXHxQQVJcfFNFUVx8UFJJXHNcK1BBUlx8V0hJTEVcfFZBTE9GXHxDTEFJTVx8Rk9SS0lOR1wpXD5cfFwoLS0uKlwpXEA8IVwoXDxQUk9DXD5cfD8/XHxcPENBU0VcPlxzKlwoLS0uKlwpXD1cXyRcKScKK2xldCBzOkZpcnN0TGV2ZWxOb25Db2xvbkVuZEluZGVudCA9ICdeXENccypQUk9UT0NPTFw+XHxcKC0tLipcKVxAPCFcPFwoXChDSEFOXHxEQVRBXClcc1wrVFlQRVx8RlVOQ1RJT05cKVw+JworbGV0IHM6U2Vjb25kTGV2ZWxJbmRlbnQgPSAnXlxDXHMqXChJRlx8QUxUXHxQUklcc1wrQUxUXClcPlx8XCgtLS4qXClcQDwhP1xzKlw8Q0FTRVw+XHMqXCgtLS4qXClcPVxfJCcKK2xldCBzOlNlY29uZExldmVsTm9uQ29sb25FbmRJbmRlbnQgPSAnXCgtLS4qXClcQDwhXDxcKENIQU5cfERBVEFcKVxzXCtUWVBFXD4nCisKKyIgRGVmaW5lIGNvbG9uIGluZGVudAorbGV0IHM6Q29sb25JbmRlbnQgPSAnXCgtLS4qXClcQDwhXDxQUk9DXD4nCitsZXQgczpDb2xvbk5vbkNvbG9uRW5kSW5kZW50ID0gJ15cQ1xzKlBST1RPQ09MXD5cfFwoLS0uKlwpXEA8IVw8XChcKENIQU5cfERBVEFcKVxzXCtUWVBFXHxGVU5DVElPTlwpXD4nCisKK2xldCBzOkNvbG9uRW5kID0gJ1woLS0uKlwpXEA8ITpccypcKC0tLipcKVw9JCcKK2xldCBzOkNvbG9uU3RhcnQgPSAnXlxzKjpccypcKC0tLipcKVw9JCcKKworIiBEZWZpbmUgY29tbWVudAorbGV0IHM6Q29tbWVudExpbmUgPSAnXlxzKi0tJworIn19fQorCisie3t7ICBmdW5jdGlvbiBHZXRPY2NhbUluZGVudCgpCisiIEF1eGlsaWFyeSBmdW5jdGlvbiB0byBnZXQgdGhlIGNvcnJlY3QgaW5kZW50IGZvciBhIGxpbmUgb2Ygb2NjYW0gY29kZQorZnVuY3Rpb24gR2V0T2NjYW1JbmRlbnQoKQorCisgICIgRW5zdXJlIG1hZ2ljIGlzIG9uCisgIGxldCBzYXZlX21hZ2ljID0gJm1hZ2ljCisgIHNldGxvY2FsIG1hZ2ljCisKKyAgIiBHZXQgcmVmZXJlbmNlIGxpbmUgbnVtYmVyCisgIGxldCBsaW5lbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisgIHdoaWxlIGxpbmVudW0gPiAwICYmIGdldGxpbmUobGluZW51bSkgPX4gczpDb21tZW50TGluZQorICAgIGxldCBsaW5lbnVtID0gcHJldm5vbmJsYW5rKGxpbmVudW0gLSAxKQorICBlbmR3aGlsZQorCisgICIgR2V0IGN1cnJlbnQgaW5kZW50CisgIGxldCBjdXJpbmRlbnQgPSBpbmRlbnQobGluZW51bSkKKworICAiIEdldCBjdXJyZW50IGxpbmUKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKGxpbmVudW0pCisKKyAgIiBHZXQgcHJldmlvdXMgbGluZSBudW1iZXIKKyAgbGV0IHByZXZsaW5lbnVtID0gcHJldm5vbmJsYW5rKGxpbmVudW0gLSAxKQorICB3aGlsZSBwcmV2bGluZW51bSA+IDAgJiYgZ2V0bGluZShwcmV2bGluZW51bSkgPX4gczpDb21tZW50TGluZQorICAgIGxldCBwcmV2bGluZW51bSA9IHByZXZub25ibGFuayhwcmV2bGluZW51bSAtIDEpCisgIGVuZHdoaWxlCisKKyAgIiBHZXQgcHJldmlvdXMgbGluZQorICBsZXQgcHJldmxpbmUgPSBnZXRsaW5lKHByZXZsaW5lbnVtKQorCisgICIgQ29sb24gaW5kZW50CisgIGlmIGdldGxpbmUodjpsbnVtKSA9fiBzOkNvbG9uU3RhcnQKKworICAgIGxldCBmb3VuZCA9IDAKKworICAgIHdoaWxlIGZvdW5kIDwgMQorCisgICAgICBpZiBsaW5lID1+IHM6Q29sb25TdGFydAorCWxldCBmb3VuZCA9IGZvdW5kIC0gMQorICAgICAgZWxzZWlmIGxpbmUgPX4gczpDb2xvbkluZGVudCB8fCAobGluZSA9fiBzOkNvbG9uTm9uQ29sb25FbmRJbmRlbnQgJiYgbGluZSAhfiBzOkNvbG9uRW5kKQorCWxldCBmb3VuZCA9IGZvdW5kICsgMQorICAgICAgZW5kaWYKKworICAgICAgaWYgZm91bmQgPCAxCisJbGV0IGxpbmVudW0gPSBwcmV2bm9uYmxhbmsobGluZW51bSAtIDEpCisJaWYgbGluZW51bSA+IDAKKwkgIGxldCBsaW5lID0gZ2V0bGluZShsaW5lbnVtKQorCWVsc2UKKwkgIGxldCBmb3VuZCA9IDEKKwllbmRpZgorICAgICAgZW5kaWYKKworICAgIGVuZHdoaWxlCisKKyAgICBpZiBsaW5lbnVtID4gMAorICAgICAgbGV0IGN1cmluZGVudCA9IGluZGVudChsaW5lbnVtKQorICAgIGVsc2UKKyAgICAgIGxldCBjb2xvbmxpbmUgPSBnZXRsaW5lKHY6bG51bSkKKyAgICAgIGxldCB0YWJzdHIgPSAnJworICAgICAgd2hpbGUgc3RybGVuKHRhYnN0cikgPCAmdGFic3RvcAorCWxldCB0YWJzdHIgPSAnICcgLiB0YWJzdHIKKyAgICAgIGVuZHdoaWxlCisgICAgICBsZXQgY29sb25saW5lID0gc3Vic3RpdHV0ZShjb2xvbmxpbmUsICdcdCcsIHRhYnN0ciwgJ2cnKQorICAgICAgbGV0IGN1cmluZGVudCA9IG1hdGNoKGNvbG9ubGluZSwgJzonKQorICAgIGVuZGlmCisKKyAgICAiIFJlc3RvcmUgbWFnaWMKKyAgICBpZiAhc2F2ZV9tYWdpY3xzZXRsb2NhbCBub21hZ2ljfGVuZGlmCisKKyAgICByZXR1cm4gY3VyaW5kZW50CisgIGVuZGlmCisKKyAgaWYgZ2V0bGluZSh2OmxudW0pID1+ICdeXHMqOicKKyAgICBsZXQgY29sb25saW5lID0gZ2V0bGluZSh2OmxudW0pCisgICAgbGV0IHRhYnN0ciA9ICcnCisgICAgd2hpbGUgc3RybGVuKHRhYnN0cikgPCAmdGFic3RvcAorICAgICAgbGV0IHRhYnN0ciA9ICcgJyAuIHRhYnN0cgorICAgIGVuZHdoaWxlCisgICAgbGV0IGNvbG9ubGluZSA9IHN1YnN0aXR1dGUoY29sb25saW5lLCAnXHQnLCB0YWJzdHIsICdnJykKKyAgICBsZXQgY3VyaW5kZW50ID0gbWF0Y2goY29sb25saW5lLCAnOicpCisKKyAgICAiIFJlc3RvcmUgbWFnaWMKKyAgICBpZiAhc2F2ZV9tYWdpY3xzZXRsb2NhbCBub21hZ2ljfGVuZGlmCisKKyAgICByZXR1cm4gY3VyaW5kZW50CisgIGVuZGlmCisKKyAgIiBDYXJyaWFnZSByZXR1cm4gaW5kZW5hdAorICBpZiBsaW5lID1+IHM6Rmlyc3RMZXZlbEluZGVudCB8fCAobGluZSA9fiBzOkZpcnN0TGV2ZWxOb25Db2xvbkVuZEluZGVudCAmJiBsaW5lICF+IHM6Q29sb25FbmQpCisJXCB8fCAobGluZSAhfiBzOkNvbG9uU3RhcnQgJiYgKHByZXZsaW5lID1+IHM6U2Vjb25kTGV2ZWxJbmRlbnQKKwlcIHx8IChwcmV2bGluZSA9fiBzOlNlY29uZExldmVsTm9uQ29sb25FbmRJbmRlbnQgJiYgcHJldmxpbmUgIX4gczpDb2xvbkVuZCkpKQorICAgIGxldCBjdXJpbmRlbnQgPSBjdXJpbmRlbnQgKyAmc2hpZnR3aWR0aAorCisgICAgIiBSZXN0b3JlIG1hZ2ljCisgICAgaWYgIXNhdmVfbWFnaWN8c2V0bG9jYWwgbm9tYWdpY3xlbmRpZgorCisgICAgcmV0dXJuIGN1cmluZGVudAorICBlbmRpZgorCisgICIgQ29tbWVudGVkIGxpbmUKKyAgaWYgZ2V0bGluZShwcmV2bm9uYmxhbmsodjpsbnVtIC0gMSkpID1+IHM6Q29tbWVudExpbmUKKworICAgICIgUmVzdG9yZSBtYWdpYworICAgIGlmICFzYXZlX21hZ2ljfHNldGxvY2FsIG5vbWFnaWN8ZW5kaWYKKworICAgIHJldHVybiBpbmRlbnQocHJldm5vbmJsYW5rKHY6bG51bSAtIDEpKQorICBlbmRpZgorCisgICIgTG9vayBmb3IgcHJldmlvdXMgc2Vjb25kIGxldmVsIElGIC8gQUxUIC8gUFJJIEFMVAorICBsZXQgZm91bmQgPSAwCisKKyAgd2hpbGUgIWZvdW5kCisKKyAgICBpZiBpbmRlbnQocHJldmxpbmVudW0pID09IGN1cmluZGVudCAtICZzaGlmdHdpZHRoCisgICAgICBsZXQgZm91bmQgPSAxCisgICAgZW5kaWYKKworICAgIGlmICFmb3VuZAorICAgICAgbGV0IHByZXZsaW5lbnVtID0gcHJldm5vbmJsYW5rKHByZXZsaW5lbnVtIC0gMSkKKyAgICAgIHdoaWxlIHByZXZsaW5lbnVtID4gMCAmJiBnZXRsaW5lKHByZXZsaW5lbnVtKSA9fiBzOkNvbW1lbnRMaW5lCisJbGV0IHByZXZsaW5lbnVtID0gcHJldm5vbmJsYW5rKHByZXZsaW5lbnVtIC0gMSkKKyAgICAgIGVuZHdoaWxlCisgICAgICBpZiBwcmV2bGluZW51bSA9PSAwCisJbGV0IGZvdW5kID0gMQorICAgICAgZW5kaWYKKyAgICBlbmRpZgorCisgIGVuZHdoaWxlCisKKyAgaWYgcHJldmxpbmVudW0gPiAwCisgICAgaWYgZ2V0bGluZShwcmV2bGluZW51bSkgPX4gczpTZWNvbmRMZXZlbEluZGVudAorICAgICAgbGV0IGN1cmluZGVudCA9IGN1cmluZGVudCArICZzaGlmdHdpZHRoCisgICAgZW5kaWYKKyAgZW5kaWYKKworICAiIFJlc3RvcmUgbWFnaWMKKyAgaWYgIXNhdmVfbWFnaWN8c2V0bG9jYWwgbm9tYWdpY3xlbmRpZgorCisgIHJldHVybiBjdXJpbmRlbnQKKworZW5kZnVuY3Rpb24KKyJ9fX0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3BlcmwudmltIGIvcnVudGltZS9pbmRlbnQvcGVybC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFmMDU4MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3BlcmwudmltCkBAIC0wLDAgKzEsMTgwIEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJUGVybAorIiBBdXRob3I6CVJhZmFlbCBHYXJjaWEtU3VhcmV6IDxyZ2FyY2lhc3VhcmV6QGZyZWUuZnI+CisiIFVSTDoJCWh0dHA6Ly9yZ2FyY2lhc3VhcmV6LmZyZWUuZnIvdmltL2luZGVudC9wZXJsLnZpbQorIiBMYXN0IENoYW5nZToJMjAwMyBBcHIgMjUKKworIiBTdWdnZXN0aW9ucyBhbmQgaW1wcm92ZW1lbnRzIGJ5IDoKKyIgICBBYXJvbiBKLiBTaGVybWFuICh1c2Ugc3ludGF4IGZvciBoaW50cykKKyIgICBBcnRlbSBDaHVwcmluYSAocGxheSBuaWNlIHdpdGggZm9sZGluZykKKworIiBUT0RPIHRoaW5ncyB0aGF0IGFyZSBub3Qgb3Igbm90IHByb3Blcmx5IGluZGVudGVkICh5ZXQpIDoKKyIgLSBDb250aW51ZWQgc3RhdGVtZW50cworIiAgICAgcHJpbnQgImZvbyIsCisiCSJiYXIiOworIiAgICAgcHJpbnQgImZvbyIKKyIJaWYgYmFyKCk7CisiIC0gTXVsdGlsaW5lIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKG0vL3gpCisiIChUaGUgZm9sbG93aW5nIHByb2JhYmx5IG5lZWRzIG1vZGlmeWluZyB0aGUgcGVybCBzeW50YXggZmlsZSkKKyIgLSBxdygpIGxpc3RzCisiIC0gSGVyZWRvY3Mgd2l0aCB0ZXJtaW5hdG9ycyB0aGF0IGRvbid0IG1hdGNoIFxJXGkqCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCisiIElzIHN5bnRheCBoaWdobGlnaHRpbmcgYWN0aXZlID8KK2xldCBiOmluZGVudF91c2Vfc3ludGF4ID0gaGFzKCJzeW50YXgiKSAmJiAmc3ludGF4ID09ICJwZXJsIgorCitsZXQgczpjcG9fc2F2ZSA9ICZjcG8KK3NldCBjcG8tPUMKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRQZXJsSW5kZW50KCkKK3NldGxvY2FsIGluZGVudGtleXMrPTA9LDApLDA9b3IsMD1hbmQKK2lmICFiOmluZGVudF91c2Vfc3ludGF4CisgIHNldGxvY2FsIGluZGVudGtleXMrPTA9RU8KK2VuZGlmCisKKyIgT25seSBkZWZpbmUgdGhlIGZ1bmN0aW9uIG9uY2UuCitpZiBleGlzdHMoIipHZXRQZXJsSW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCitmdW5jdGlvbiBHZXRQZXJsSW5kZW50KCkKKworICAiIEdldCB0aGUgbGluZSB0byBiZSBpbmRlbnRlZAorICBsZXQgY2xpbmUgPSBnZXRsaW5lKHY6bG51bSkKKworICAiIEluZGVudCBQT0QgbWFya2VycyB0byBjb2x1bW4gMAorICBpZiBjbGluZSA9fiAnXlxzKj1cTFxAIScKKyAgICByZXR1cm4gMAorICBlbmRpZgorCisgICIgRG9uJ3QgcmVpbmRlbnQgY29tZW50cyBvbiBmaXJzdCBjb2x1bW4KKyAgaWYgY2xpbmUgPX4gJ14jLicKKyAgICByZXR1cm4gMAorICBlbmRpZgorCisgICIgR2V0IGN1cnJlbnQgc3ludGF4IGl0ZW0gYXQgdGhlIGxpbmUncyBmaXJzdCBjaGFyCisgIGxldCBjc3luaWQgPSAnJworICBpZiBiOmluZGVudF91c2Vfc3ludGF4CisgICAgbGV0IGNzeW5pZCA9IHN5bklEYXR0cihzeW5JRCh2OmxudW0sMSwwKSwibmFtZSIpCisgIGVuZGlmCisKKyAgIiBEb24ndCByZWluZGVudCBQT0QgYW5kIGhlcmVkb2NzCisgIGlmIGNzeW5pZCA9PSAicGVybFBPRCIgfHwgY3N5bmlkID09ICJwZXJsSGVyZURvYyIgfHwgY3N5bmlkID1+ICJecG9kIgorICAgIHJldHVybiBpbmRlbnQodjpsbnVtKQorICBlbmRpZgorCisgICIgSW5kZW50IGVuZC1vZi1oZXJlZG9jcyBtYXJrZXJzIHRvIGNvbHVtbiAwCisgIGlmIGI6aW5kZW50X3VzZV9zeW50YXgKKyAgICAiIEFzc3VtZXMgdGhhdCBhbiBlbmQtb2YtaGVyZWRvYyBtYXJrZXIgbWF0Y2hlcyBcSVxpKiB0byBhdm9pZAorICAgICIgY29uZnVzaW9uIHdpdGggb3RoZXIgdHlwZXMgb2Ygc3RyaW5ncworICAgIGlmIGNzeW5pZCA9PSAicGVybFN0cmluZ1N0YXJ0RW5kIiAmJiBjbGluZSA9fiAnXlxJXGkqJCcKKyAgICAgIHJldHVybiAwCisgICAgZW5kaWYKKyAgZWxzZQorICAgICIgV2l0aG91dCBzeW50YXggaGludHMsIGFzc3VtZSB0aGF0IGVuZC1vZi1oZXJlZG9jcyBtYXJrZXJzIGJlZ2luIHdpdGggRU8KKyAgICBpZiBjbGluZSA9fiAnXlxzKkVPJworICAgICAgcmV0dXJuIDAKKyAgICBlbmRpZgorICBlbmRpZgorCisgICIgTm93IGdldCB0aGUgaW5kZW50IG9mIHRoZSBwcmV2aW91cyBwZXJsIGxpbmUuCisKKyAgIiBGaW5kIGEgbm9uLWJsYW5rIGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZS4KKyAgbGV0IGxudW0gPSBwcmV2bm9uYmxhbmsodjpsbnVtIC0gMSkKKyAgIiBIaXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCB1c2UgemVybyBpbmRlbnQuCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAwCisgIGVuZGlmCisgIGxldCBsaW5lID0gZ2V0bGluZShsbnVtKQorICBsZXQgaW5kID0gaW5kZW50KGxudW0pCisgICIgU2tpcCBoZXJlZG9jcywgUE9ELCBhbmQgY29tbWVudHMgb24gMXN0IGNvbHVtbgorICBpZiBiOmluZGVudF91c2Vfc3ludGF4CisgICAgbGV0IHNraXBwaW4gPSAyCisgICAgd2hpbGUgc2tpcHBpbgorICAgICAgbGV0IHN5bmlkID0gc3luSURhdHRyKHN5bklEKGxudW0sMSwwKSwibmFtZSIpCisgICAgICBpZiAoc3luaWQgPT0gInBlcmxTdHJpbmdTdGFydEVuZCIgJiYgbGluZSA9fiAnXlxJXGkqJCcpCisJICAgIFwgfHwgKHNraXBwaW4gIT0gMiAmJiBzeW5pZCA9PSAicGVybFBPRCIpCisJICAgIFwgfHwgKHNraXBwaW4gIT0gMiAmJiBzeW5pZCA9PSAicGVybEhlcmVEb2MiKQorCSAgICBcIHx8IHN5bmlkID09ICJwZXJsQ29tbWVudCIKKwkgICAgXCB8fCBzeW5pZCA9fiAiXnBvZCIKKwlsZXQgbG51bSA9IHByZXZub25ibGFuayhsbnVtIC0gMSkKKwlpZiBsbnVtID09IDAKKwkgIHJldHVybiAwCisJZW5kaWYKKwlsZXQgbGluZSA9IGdldGxpbmUobG51bSkKKwlsZXQgaW5kID0gaW5kZW50KGxudW0pCisJbGV0IHNraXBwaW4gPSAxCisgICAgICBlbHNlCisJbGV0IHNraXBwaW4gPSAwCisgICAgICBlbmRpZgorICAgIGVuZHdoaWxlCisgIGVsc2UKKyAgICBpZiBsaW5lID1+ICJeRU8iCisgICAgICBsZXQgbG51bSA9IHNlYXJjaCgiPDxbXCInXVxcPUVPIiwgImJXIikKKyAgICAgIGxldCBsaW5lID0gZ2V0bGluZShsbnVtKQorICAgICAgbGV0IGluZCA9IGluZGVudChsbnVtKQorICAgIGVuZGlmCisgIGVuZGlmCisKKyAgIiBJbmRlbnQgYmxvY2tzIGVuY2xvc2VkIGJ5IHt9IG9yICgpCisgIGlmIGI6aW5kZW50X3VzZV9zeW50YXgKKyAgICAiIEZpbmQgYSByZWFsIG9wZW5pbmcgYnJhY2UKKyAgICBsZXQgYnJhY2Vwb3MgPSBtYXRjaChsaW5lLCAnWygpe31dJywgbWF0Y2hlbmQobGluZSwgJ15ccypbKX1dJykpCisgICAgd2hpbGUgYnJhY2Vwb3MgIT0gLTEKKyAgICAgIGxldCBzeW5pZCA9IHN5bklEYXR0cihzeW5JRChsbnVtLCBicmFjZXBvcyArIDEsIDApLCAibmFtZSIpCisgICAgICAiIElmIHRoZSBicmFjZSBpcyBoaWdobGlnaHRlZCBpbiBvbmUgb2YgdGhvc2UgZ3JvdXBzLCBpbmRlbnQgaXQuCisgICAgICAiICdwZXJsSGVyZURvYycgaXMgaGVyZSBvbmx5IHRvIGhhbmRsZSB0aGUgY2FzZSAnJmZvbyg8PEVPRiknLgorICAgICAgaWYgc3luaWQgPT0gIiIKKwkgICAgXCB8fCBzeW5pZCA9PSAicGVybE1hdGNoU3RhcnRFbmQiCisJICAgIFwgfHwgc3luaWQgPT0gInBlcmxIZXJlRG9jIgorCSAgICBcIHx8IHN5bmlkID1+ICJecGVybEZpbGVkZXNjU3RhdGVtZW50IgorCSAgICBcIHx8IHN5bmlkID1+ICdecGVybFwoU3ViXHxCRUdJTkVORFx8SWZcKUZvbGQnCisJbGV0IGJyYWNlID0gc3RycGFydChsaW5lLCBicmFjZXBvcywgMSkKKwlpZiBicmFjZSA9PSAnKCcgfHwgYnJhY2UgPT0gJ3snCisJICBsZXQgaW5kID0gaW5kICsgJnN3CisJZWxzZQorCSAgbGV0IGluZCA9IGluZCAtICZzdworCWVuZGlmCisgICAgICBlbmRpZgorICAgICAgbGV0IGJyYWNlcG9zID0gbWF0Y2gobGluZSwgJ1soKXt9XScsIGJyYWNlcG9zICsgMSkKKyAgICBlbmR3aGlsZQorICAgIGxldCBicmFjZXBvcyA9IG1hdGNoZW5kKGNsaW5lLCAnXlxzKlspfV0nKQorICAgIGlmIGJyYWNlcG9zICE9IC0xCisgICAgICBsZXQgc3luaWQgPSBzeW5JRGF0dHIoc3luSUQodjpsbnVtLCBicmFjZXBvcywgMCksICJuYW1lIikKKyAgICAgIGlmIHN5bmlkID09ICIiCisJICAgIFwgfHwgc3luaWQgPT0gInBlcmxNYXRjaFN0YXJ0RW5kIgorCSAgICBcIHx8IHN5bmlkID1+ICdecGVybFwoU3ViXHxCRUdJTkVORFx8SWZcKUZvbGQnCisJbGV0IGluZCA9IGluZCAtICZzdworICAgICAgZW5kaWYKKyAgICBlbmRpZgorICBlbHNlCisgICAgaWYgbGluZSA9fiAnW3soXVxzKlwoI1teKX1dKlwpXD0kJworICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgIGVuZGlmCisgICAgaWYgY2xpbmUgPX4gJ15ccypbKX1dJworICAgICAgbGV0IGluZCA9IGluZCAtICZzdworICAgIGVuZGlmCisgIGVuZGlmCisKKyAgIiBJbmRlbnQgbGluZXMgdGhhdCBiZWdpbiB3aXRoICdvcicgb3IgJ2FuZCcKKyAgaWYgY2xpbmUgPX4gJ15ccypcKG9yXHxhbmRcKVw+JworICAgIGlmIGxpbmUgIX4gJ15ccypcKG9yXHxhbmRcKVw+JworICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgIGVuZGlmCisgIGVsc2VpZiBsaW5lID1+ICdeXHMqXChvclx8YW5kXClcPicKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVuZGlmCisKKyAgcmV0dXJuIGluZAorCitlbmRmdW5jdGlvbgorCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKKworIiB2aW06dHM9ODpzdHM9Mjpzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9waHAudmltIGIvcnVudGltZS9pbmRlbnQvcGhwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhkZjNhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvcGhwLnZpbQpAQCAtMCwwICsxLDExOCBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CVBIUAorIiBBdXRob3I6CU1pbGVzIExvdHQgPG1pbG9zQGdyb3Vwd2hlcmUub3JnPgorIiBVUkw6CQlodHRwOi8vbWlsb3NjaC5keW5kbnMub3JnL3BocC52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDE4CisiIFZlcnNpb246CTAuNQorIiBOb3RlczogIENsb3NlIGFsbCBzd2l0Y2hlcyB3aXRoIGRlZmF1bHQ6XG5icmVhazsgYW5kIGl0IHdpbGwgbG9vayBiZXR0ZXIuCisiICAgICAgICAgQWxzbywgb3BlbiBhbmQgY2xvc2UgYnJhY2tldHMgc2hvdWxkIGJlIGFsb25lIG9uIGEgbGluZS4KKyIgICAgICAgICBUaGlzIGlzIG15IHByZWZlcmVuY2UsIGFuZCB0aGUgb25seSB3YXkgdGhpcyB3aWxsIGxvb2sgbmljZS4KKyIgICAgICAgICBUcnkgYW4gb2xkZXIgdmVyc2lvbiBpZiB5b3UgY2FyZSBsZXNzIGFib3V0IHRoZSBmb3JtYXR0aW5nIG9mCisiICAgICAgICAgc3dpdGNoL2Nhc2UuICBJdCBpcyBuZWFybHkgcGVyZmVjdCBmb3IgYW55b25lIHJlZ2FyZGxlc3Mgb2YgeW91cgorIiAgICAgICAgIHN0YW5jZSBvbiBicmFja2V0cy4KKyIKKyIgQ2hhbmdlczogMC41IC0gZml4IGR1cGxpY2F0ZSBpbmRlbnQgb24gb3BlbiB0YWcsIGFuZCBlbXB0eSBicmFja2V0ZWQKKyIgICAgICAgICAgc3RhdGVtZW50cy4KKyIgICAgICAgICAgMC40IC0gRml4ZXMgZm9yIGNsb3NpbmcgcGhwIHRhZywgc3dpdGNoIHN0YXRlbWVudCBjbG9zdXJlLCBhbmQgcGhwX2luZGVudF9zaG9ydG9wZW50YWdzCisiICAgICAgICAgIG9wdGlvbiBmcm9tIFN0ZWZmZW4gQnJ1ZW50amVuIDx2aW1Aa29udHJhcGhvbi5kZT4KKyIKKyIgT3B0aW9uczogcGhwX25vaW5kZW50X3N3aXRjaD0xIC0tIGRvIG5vdCB0cnkgdG8gaW5kZW50IHN3aXRjaC9jYXNlIHN0YXRlbWVudHMgKHZlcnNpb24gMC4xIGJlaGF2aW9yKQorIiAgICAgICAgICBwaHBfaW5kZW50X3Nob3J0b3BlbnRhZ3M9MSAtLSBpbmRlbnQgYWZ0ZXIgc2hvcnQgcGhwIG9wZW4gdGFncywgdG9vCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorCWZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0UGhwSW5kZW50KCkKKyJzZXRsb2NhbCBpbmRlbnRrZXlzKz0wPSwwKSw9RU8KK3NldGxvY2FsIGluZGVudGtleXMrPTA9LDApLD1FTyw9PgorCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0UGhwSW5kZW50IikKKwlmaW5pc2gKK2VuZGlmCisKKyIgSGFuZGxlIG9wdGlvbihzKQoraWYgZXhpc3RzKCJwaHBfbm9pbmRlbnRfc3dpdGNoIikKKwlsZXQgYjpwaHBfbm9pbmRlbnRfc3dpdGNoPTEKK2VuZGlmCisKK2Z1bmN0aW9uIEdldFBocEluZGVudCgpCisJIiBGaW5kIGEgbm9uLWJsYW5rIGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZS4KKwlsZXQgbG51bSA9IHByZXZub25ibGFuayh2OmxudW0gLSAxKQorCSIgSGl0IHRoZSBzdGFydCBvZiB0aGUgZmlsZSwgdXNlIHplcm8gaW5kZW50LgorCWlmIGxudW0gPT0gMAorCQlyZXR1cm4gMAorCWVuZGlmCisJbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pICAgICIgbGFzdCBsaW5lCisJbGV0IGNsaW5lID0gZ2V0bGluZSh2OmxudW0pICIgY3VycmVudCBsaW5lCisJbGV0IHBsaW5lID0gZ2V0bGluZShsbnVtIC0gMSkgIiBwcmV2aW91cyB0byBsYXN0IGxpbmUKKwlsZXQgaW5kID0gaW5kZW50KGxudW0pCisKKwkiIEluZGVudCBhZnRlciBwaHAgb3BlbiB0YWcKKwlpZiBsaW5lID1+ICc8P3BocCcKKwkJbGV0IGluZCA9IGluZCArICZzdworCWVsc2VpZiBleGlzdHMoJ2c6cGhwX2luZGVudF9zaG9ydG9wZW50YWdzJykKKwkJIiBpbmRlbnQgYWZ0ZXIgc2hvcnQgb3BlbiB0YWcKKwkJaWYgbGluZSA9fiAnPD8nCisJCQlsZXQgaW5kID0gaW5kICsgJnN3CisJCWVuZGlmCisJZW5kaWYKKwkiIGluZGVudCBhZnRlciBwaHAgY2xvc2luZyB0YWcKKwlpZiBjbGluZSA9fiAnXE0/PicKKwkJbGV0IGluZCA9IGluZCAtICZzdworCWVuZGlmCisKKwlpZiBleGlzdHMoImI6cGhwX25vaW5kZW50X3N3aXRjaCIpICIgdmVyc2lvbiAxIGJlaGF2aW9yLCBkaXkgc3dpdGNoL2Nhc2UsZXRjCisJCSIgSW5kZW50IGJsb2NrcyBlbmNsb3NlZCBieSB7fSBvciAoKQorCQlpZiBsaW5lID1+ICdbeyhdXHMqXCgjW14pfV0qXClcPSQnCisJCQlsZXQgaW5kID0gaW5kICsgJnN3CisJCWVuZGlmCisJCWlmIGNsaW5lID1+ICdeXHMqWyl9XScKKwkJCWxldCBpbmQgPSBpbmQgLSAmc3cKKwkJZW5kaWYKKwkJcmV0dXJuIGluZAorCWVsc2UKKwkJIiBTZWFyY2ggdGhlIG1hdGNoaW5nIGJyYWNrZXQgKHdpdGggc2VhcmNocGFpcigpKSBhbmQgc2V0IHRoZSBpbmRlbnQgb2YKKwkJIiB0byB0aGUgaW5kZW50IG9mIHRoZSBtYXRjaGluZyBsaW5lLgorCQlpZiBjbGluZSA9fiAnXlxzKn0nCisJCQljYWxsIGN1cnNvcihsaW5lKCcuJyksIDEpCisJCQlsZXQgaW5kID0gaW5kZW50KHNlYXJjaHBhaXIoJ3snLCAnJywgJ30nLAorCQkJJ2JXJywgJ3N5bklEYXR0cihzeW5JRChsaW5lKCIuIiksIGNvbCgiLiIpLAorCQkJMCksICJuYW1lIikgPX4/ICJzdHJpbmciJykpCisJCQlyZXR1cm4gaW5kCisJCWVuZGlmCisJCSIgVHJ5IHRvIGluZGVudCBzd2l0Y2gvY2FzZSBzdGF0ZW1lbnRzIGFzIHdlbGwKKwkJIiBJbmRlbnQgYmxvY2tzIGVuY2xvc2VkIGJ5IHt9IG9yICgpIG9yIGNhc2Ugc3RhdGVtZW50cywgd2l0aCBzb21lIGFuYWwgcmVxdWlyZW1lbnRzCisJCWlmIGxpbmUgPX4gJ2Nhc2UuKjpcfFt7KF1ccypcKCNbXil9XSpcKVw9JCcKKwkJCWxldCBpbmQgPSBpbmQgKyAmc3cKKwkJCSIgcmV0dXJuIGlmIHRoZSBjdXJyZW50IGxpbmUgaXMgbm90IGFub3RoZXIgY2FzZSBzdGF0ZW1lbnQgb2YgdGhlIHByZXZpb3VzIGxpbmUgaXMgYSBicmFja2V0IG9wZW4KKwkJCWlmIGNsaW5lICF+ICcuKmNhc2UuKjpcfGRlZmF1bHQ6JyB8fCBsaW5lID1+ICdbeyhdXHMqXCgjW14pfV0qXClcPSQnCisJCQkJcmV0dXJuIGluZAorCQkJZW5kaWYKKwkJZW5kaWYKKwkJaWYgY2xpbmUgPX4gJ15ccypjYXNlLio6XHxeXHMqZGVmYXVsdDpcfF5ccypbKX1dJworCQkJbGV0IGluZCA9IGluZCAtICZzdworCQkJIiBpZiB0aGUgbGFzdCBsaW5lIGlzIGEgYnJlYWsgb3IgcmV0dXJuLCBvciB0aGUgY3VycmVudCBsaW5lIGlzIGEgY2xvc2UgYnJhY2tldCwKKwkJCSIgb3IgaWYgdGhlIHByZXZpb3VzIGxpbmUgaXMgYSBkZWZhdWx0IHN0YXRlbWVudCwgc3VidHJhY3QgYW5vdGhlcgorCQkJaWYgbGluZSA9fiAnXlxzKmJyZWFrO1x8XlxzKnJldHVyblx8JyAmJiBjbGluZSA9fiAnXlxzKlspfV0nICYmIHBsaW5lID1+ICdkZWZhdWx0OicKKwkJCQlsZXQgaW5kID0gaW5kIC0gJnN3CisJCQllbmRpZgorCQllbmRpZgorCQkiIFNlYXJjaCB0aGUgbWF0Y2hpbmcgYnJhY2tldCAod2l0aCBzZWFyY2hwYWlyKCkpIGFuZCBzZXQgdGhlIGluZGVudCBvZiBjbGluZQorCQkiIHRvIHRoZSBpbmRlbnQgb2YgdGhlIG1hdGNoaW5nIGxpbmUuCisJCWlmIGNsaW5lID1+ICdeXHMqfScKKwkJCWNhbGwgY3Vyc29yKGxpbmUoJy4gJyksIDEpCisJCQlsZXQgaW5kID0gaW5kZW50KHNlYXJjaHBhaXIoJ3snLCAnJywgJ30nLCAnYlcnLCAnc3luSURhdHRyKHN5bklEKGxpbmUoIi4iKSwgY29sKCIuIiksIDApLCAibmFtZSIpID1+PyAic3RyaW5nIicpKQorCQkJcmV0dXJuIGluZAorCQllbmRpZgorCisJCWlmIGxpbmUgPX4gJ2RlZmF1bHQ6JworCQkJbGV0IGluZCA9IGluZCArICZzdworCQllbmRpZgorCQlyZXR1cm4gaW5kCisJZW5kaWYKK2VuZGZ1bmN0aW9uCisiIHZpbTogc2V0IHRzPTQgc3c9NDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3Bvc3RzY3IudmltIGIvcnVudGltZS9pbmRlbnQvcG9zdHNjci52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmZjQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3Bvc3RzY3IudmltCkBAIC0wLDAgKzEsNjggQEAKKyIgUG9zdFNjcmlwdCBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZTogICAgUG9zdFNjcmlwdAorIiBNYWludGFpbmVyOiAgTWlrZSBXaWxsaWFtcyA8bXJ3QG5ldGNvbXVrLmNvLnVrPgorIiBMYXN0IENoYW5nZTogMm5kIEp1bHkgMjAwMQorIgorCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorbGV0IGI6ZGlkX2luZGVudCA9IDEKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1Qb3N0c2NySW5kZW50R2V0KHY6bG51bSkKK3NldGxvY2FsIGluZGVudGtleXMrPTBdLDA9Pj4sMD0lJSwwPWVuZCwwPXJlc3RvcmUsMD1ncmVzdG9yZSBpbmRlbnRrZXlzLT06LDAjLGUKKworIiBDYXRjaCBtdWx0aXBsZSBpbnN0YW50aWF0aW9ucworaWYgZXhpc3RzKCIqUG9zdHNjckluZGVudEdldCIpCisgIGZpbmlzaAorZW5kaWYKKworZnVuY3Rpb24hIFBvc3RzY3JJbmRlbnRHZXQobG51bSkKKyAgIiBGaW5kIGEgbm9uLWVtcHR5IG5vbi1jb21tZW50IGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZS4KKyAgIiBOb3RlOiBpZ25vcmVzIERTQyBjb21tZW50cyBhcyB3ZWxsIQorICBsZXQgbG51bSA9IGE6bG51bSAtIDEKKyAgd2hpbGUgbG51bSAhPSAwCisgICAgbGV0IGxudW0gPSBwcmV2bm9uYmxhbmsobG51bSkKKyAgICBpZiBnZXRsaW5lKGxudW0pICF+ICdeXHMqJS4qJCcKKyAgICAgIGJyZWFrCisgICAgZW5kaWYKKyAgICBsZXQgbG51bSA9IGxudW0gLSAxCisgIGVuZHdoaWxlCisKKyAgIiBIaXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCB1c2UgdXNlciBpbmRlbnQuCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAtMQorICBlbmRpZgorCisgICIgU3RhcnQgd2l0aCB0aGUgaW5kZW50IG9mIHRoZSBwcmV2aW91cyBsaW5lCisgIGxldCBpbmQgPSBpbmRlbnQobG51bSkKKyAgbGV0IHBsaW5lID0gZ2V0bGluZShsbnVtKQorCisgICIgSW5kZW50IGZvciBkaWN0cywgYXJyYXlzLCBhbmQgc2F2ZXMgd2l0aCBwb3NzaWJsZSB0cmFpbGluZyBjb21tZW50CisgIGlmIHBsaW5lID1+ICdcKGJlZ2luXHw8PFx8Z1w9c2F2ZVx8e1x8W1wpXHMqXCglLipcKVw9JCcKKyAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgIGVuZGlmCisKKyAgIiBSZW1vdmUgaW5kZW50IGZvciBwb3BwZWQgZGljdHMsIGFuZCByZXN0b3Jlcy4KKyAgaWYgcGxpbmUgPX4gJ1woZW5kXHxnXD1yZXN0b3JlXClccyokJworICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKworICAiIEVsc2UgaGFuZGxlIGltbWVkaWF0ZSBkZWRlbnRzIG9mIGRpY3RzLCByZXN0b3JlcywgYW5kIGFycmF5cy4KKyAgZWxzZWlmIGdldGxpbmUoYTpsbnVtKSA9fiAnXChlbmRcfD4+XHxnXD1yZXN0b3JlXHx9XHxdXCknCisgICAgbGV0IGluZCA9IGluZCAtICZzdworCisgICIgRWxzZSBoYW5kbGUgRFNDIGNvbW1lbnRzIC0gYWx3YXlzIHN0YXJ0IG9mIGxpbmUuCisgIGVsc2VpZiBnZXRsaW5lKGE6bG51bSkgPX4gJ15ccyolJScKKyAgICBsZXQgaW5kID0gMAorICBlbmRpZgorCisgICIgRm9yIG5vdyBjYXRjaCBleGNlc3NpdmUgbGVmdCBpbmRlbnRzIGlmIHRoZXkgb2NjdXIuCisgIGlmIGluZCA8IDAKKyAgICBsZXQgaW5kID0gLTEKKyAgZW5kaWYKKworICByZXR1cm4gaW5kCitlbmRmdW5jdGlvbgorCisiIHZpbTpzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9wb3YudmltIGIvcnVudGltZS9pbmRlbnQvcG92LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjE5NzYzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvcG92LnZpbQpAQCAtMCwwICsxLDg0IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZTogUG9WLVJheSBTY2VuZSBEZXNjcmlwdGlvbiBMYW5ndWFnZQorIiBNYWludGFpbmVyOiBEYXZpZCBOZWNhcyAoWWV0aSkgPHlldGlAcGh5c2ljcy5tdW5pLmN6PgorIiBMYXN0IENoYW5nZTogMjAwMi0xMC0yMAorIiBVUkk6IGh0dHA6Ly90cmlmaWMuYXRoLmN4L0Z0cC92aW0vaW5kZW50L3Bvdi52aW0KKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKKyIgU29tZSBwcmVsaW1pbmFyeSBzZXR0aW5ncy4KK3NldGxvY2FsIG5vbGlzcCAiIE1ha2Ugc3VyZSBsaXNwIGluZGVudGluZyBkb2Vzbid0IHN1cGVyc2VkZSB1cy4KKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRQb1ZSYXlJbmRlbnQoKQorc2V0bG9jYWwgaW5kZW50a2V5cys9PWVsc2UsPWVuZCwwXQorCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0UG9WUmF5SW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCisiIENvdW50cyBtYXRjaGVzIG9mIGEgcmVnZXhwIDxyZXhwPiBpbiBsaW5lIG51bWJlciA8bGluZT4uCisiIERvZXNuJ3QgY291bnQgbWF0Y2hlcyBpbnNpZGUgc3RyaW5ncyBhbmQgY29tbWVudHMgKGFzIGRlZmluZWQgYnkgY3VycmVudAorIiBzeW50YXgpLgorZnVuY3Rpb24hIHM6TWF0Y2hDb3VudChsaW5lLCByZXhwKQorICBsZXQgc3RyID0gZ2V0bGluZShhOmxpbmUpCisgIGxldCBpID0gMAorICBsZXQgbiA9IDAKKyAgd2hpbGUgaSA+PSAwCisgICAgbGV0IGkgPSBtYXRjaGVuZChzdHIsIGE6cmV4cCwgaSkKKyAgICBpZiBpID49IDAgJiYgc3luSURhdHRyKHN5bklEKGE6bGluZSwgaSwgMCksICJuYW1lIikgIX4/ICJzdHJpbmdcfGNvbW1lbnQiCisgICAgICBsZXQgbiA9IG4gKyAxCisgICAgZW5kaWYKKyAgZW5kd2hpbGUKKyAgcmV0dXJuIG4KK2VuZGZ1bmN0aW9uCisKKyIgVGhlIG1haW4gZnVuY3Rpb24uICBSZXR1cm5zIGluZGVudCBhbW91bnQuCitmdW5jdGlvbiBHZXRQb1ZSYXlJbmRlbnQoKQorICAiIElmIHdlIGFyZSBpbnNpZGUgYSBjb21tZW50IChtYXkgYmUgbmVzdGVkIGluIG9ic2N1cmUgd2F5cyksIGdpdmUgdXAKKyAgaWYgc3luSURhdHRyKHN5bklEKHY6bG51bSwgaW5kZW50KHY6bG51bSkrMSwgMCksICJuYW1lIikgPX4/ICJzdHJpbmdcfGNvbW1lbnQiCisgICAgcmV0dXJuIC0xCisgIGVuZGlmCisKKyAgIiBTZWFyY2ggYmFja3dhcmRzIGZvciB0aGUgZnJpc3Qgbm9uLWVtcHR5LCBub24tY29tbWVudCBsaW5lLgorICBsZXQgcGxudW0gPSBwcmV2bm9uYmxhbmsodjpsbnVtIC0gMSkKKyAgbGV0IHBsaW5kID0gaW5kZW50KHBsbnVtKQorICB3aGlsZSBwbG51bSA+IDAgJiYgc3luSURhdHRyKHN5bklEKHBsbnVtLCBwbGluZCsxLCAwKSwgIm5hbWUiKSA9fj8gImNvbW1lbnQiCisgICAgbGV0IHBsbnVtID0gcHJldm5vbmJsYW5rKHBsbnVtIC0gMSkKKyAgICBsZXQgcGxpbmQgPSBpbmRlbnQocGxudW0pCisgIGVuZHdoaWxlCisKKyAgIiBTdGFydCBpbmRlbnRpbmcgZnJvbSB6ZXJvCisgIGlmIHBsbnVtID09IDAKKyAgICByZXR1cm4gMAorICBlbmRpZgorCisgICIgQW5hbHlzZSBwcmV2aW91cyBub25lbXB0eSBsaW5lLgorICBsZXQgY2hnID0gMAorICBsZXQgY2hnID0gY2hnICsgczpNYXRjaENvdW50KHBsbnVtLCAnW1t7KF0nKQorICBsZXQgY2hnID0gY2hnICsgczpNYXRjaENvdW50KHBsbnVtLCAnI1xzKlwlKGlmXHxpZmRlZlx8aWZuZGVmXHxzd2l0Y2hcfHdoaWxlXHxtYWNyb1x8ZWxzZVwpXD4nKQorICBsZXQgY2hnID0gY2hnIC0gczpNYXRjaENvdW50KHBsbnVtLCAnI1xzKmVuZFw+JykKKyAgbGV0IGNoZyA9IGNoZyAtIHM6TWF0Y2hDb3VudChwbG51bSwgJ1tdfSldJykKKyAgIiBEaXJ0eSBoYWNrIGZvciBwZW9wbGUgd3JpdGluZyAjaWYgYW5kICNlbHNlIG9uIHRoZSBzYW1lIGxpbmUuCisgIGxldCBjaGcgPSBjaGcgLSBzOk1hdGNoQ291bnQocGxudW0sICcjXHMqXCUoaWZcfGlmZGVmXHxpZm5kZWZcfHN3aXRjaFwpXD4uKiNccyplbHNlXD4nKQorICAiIFdoZW4gY2hnID4gMCwgdGhlbiB3ZSBvcGVuZWQgZ3JvdXBzIGFuZCB3ZSBzaG91bGQgaW5kZW50IG1vcmUsIGJ1dCB3aGVuCisgICIgY2hnIDwgMCwgd2UgY2xvc2VkIGdyb3VwcyBhbmQgdGhpcyBhbHJlYWR5IGFmZmVjdGVkIHRoZSBwcmV2aW91cyBsaW5lLAorICAiIHNvIHdlIHNob3VsZCBub3QgZGVkZW50LiAgQW5kIHdoZW4gZXZlcnl0aGluZyBlbHNlIGZhaWxzLCBzY3JlYW0uCisgIGxldCBjaGcgPSBjaGcgPiAwID8gY2hnIDogMAorCisgICIgQW5hbHlzZSBjdXJyZW50IGxpbmUKKyAgIiBGSVhNRTogSWYgd2UgaGF2ZSB0byBkZWRlbnQsIHdlIHNob3VsZCB0cnkgdG8gZmluZCB0aGUgaW5kZW50YXRpb24gb2YgdGhlCisgICIgb3BlbmluZyBsaW5lLgorICBsZXQgY3VyID0gczpNYXRjaENvdW50KHY6bG51bSwgJ15ccypcJSgjXHMqXCUoZW5kXHxlbHNlXClcPlx8W119KV1cKScpCisgIGlmIGN1ciA+IDAKKyAgICBsZXQgZmluYWwgPSBwbGluZCArIChjaGcgLSBjdXIpICogJnN3CisgIGVsc2UKKyAgICBsZXQgZmluYWwgPSBwbGluZCArIGNoZyAqICZzdworICBlbmRpZgorCisgIHJldHVybiBmaW5hbCA8IDAgPyAwIDogZmluYWwKK2VuZGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9wcm9sb2cudmltIGIvcnVudGltZS9pbmRlbnQvcHJvbG9nLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmU0NDhlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvcHJvbG9nLnZpbQpAQCAtMCwwICsxLDU4IEBACisiICB2aW06IHNldCBzdz00IHN0cz00OgorIiAgTWFpbnRhaW5lcgk6IEdlcmdlbHkgS29udHJhIDxrZ2VyZ2VseUBtY2wuaHU+CisiICBSZXZpc2VkIG9uCTogMjAwMi4wMi4xOC4gMjM6MzQ6MDUKKyIgIExhbmd1YWdlCTogUHJvbG9nCisKKyIgVE9ETzoKKyIgICBjaGVja2luZyB3aXRoIHJlc3BlY3QgdG8gc3ludGF4IGhpZ2hsaWdodGluZworIiAgIGlnbm9yaW5nIG11bHRpbGluZSBjb21tZW50cworIiAgIGRldGVjdGluZyBtdWx0aWxpbmUgc3RyaW5ncworCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0UHJvbG9nSW5kZW50KCkKK3NldGxvY2FsIGluZGVudGtleXMtPTosMCMKK3NldGxvY2FsIGluZGVudGtleXMrPTAlLC0sMDssPiwwKQorCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgorImlmIGV4aXN0cygiKkdldFByb2xvZ0luZGVudCIpCisiICAgIGZpbmlzaAorImVuZGlmCisKK2Z1bmN0aW9uISBHZXRQcm9sb2dJbmRlbnQoKQorICAgICIgRmluZCBhIG5vbi1ibGFuayBsaW5lIGFib3ZlIHRoZSBjdXJyZW50IGxpbmUuCisgICAgbGV0IHBudW0gPSBwcmV2bm9uYmxhbmsodjpsbnVtIC0gMSkKKyAgICAiIEhpdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUsIHVzZSB6ZXJvIGluZGVudC4KKyAgICBpZiBwbnVtID09IDAKKyAgICAgICByZXR1cm4gMAorICAgIGVuZGlmCisgICAgbGV0IGxpbmUgPSBnZXRsaW5lKHY6bG51bSkKKyAgICBsZXQgcGxpbmUgPSBnZXRsaW5lKHBudW0pCisKKyAgICBsZXQgaW5kID0gaW5kZW50KHBudW0pCisgICAgIiBQcmV2aW91cyBsaW5lIHdhcyBjb21tZW50IC0+IHVzZSBwcmV2aW91cyBsaW5lJ3MgaW5kZW50CisgICAgaWYgcGxpbmUgPX4gJ15ccyolJworCXJldHUgaW5kCisgICAgZW5kaWYKKyAgICAiIENoZWNrIGZvciBjbGF1c2UgaGVhZCBvbiBwcmV2aW91cyBsaW5lCisgICAgaWYgcGxpbmUgPX4gJzotXHMqXCglLipcKVw/JCcKKwlsZXQgaW5kID0gaW5kICsgJnN3CisgICAgIiBDaGVjayBmb3IgZW5kIG9mIGNsYXVzZSBvbiBwcmV2aW91cyBsaW5lCisgICAgZWxzZWlmIHBsaW5lID1+ICdcLlxzKlwoJS4qXClcPyQnCisJbGV0IGluZCA9IGluZCAtICZzdworICAgIGVuZGlmCisgICAgIiBDaGVjayBmb3Igb3BlbmluZyBjb25kaXRpb25hbCBvbiBwcmV2aW91cyBsaW5lCisgICAgaWYgcGxpbmUgPX4gJ15ccypcKFsoO11cfC0+XCknCisJbGV0IGluZCA9IGluZCArICZzdworICAgIGVuZGlmCisgICAgIiBDaGVjayBmb3IgY2xvc2luZyBhbiB1bmNsb3NlZCBwYXJlbiwgb3IgbWlkZGxlIDsgb3IgLT4KKyAgICBpZiBsaW5lID1+ICdeXHMqXChbKTtdXHwtPlwpJworCWxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICBlbmRpZgorICAgIHJldHVybiBpbmQKK2VuZGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9weXJleC52aW0gYi9ydW50aW1lL2luZGVudC9weXJleC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3NzEyNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3B5cmV4LnZpbQpAQCAtMCwwICsxLDggQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOglQeXJleAorIiBNYWludGFpbmVyOglNYXJjbyBCYXJpc2lvbmUgPG1hcmNvLmJhcmlAcGVvcGxlLml0PgorIiBVUkw6CQlodHRwOi8vbWFyY29iYXJpLmFsdGVydmlzdGEub3JnL3B5cmV4X3ZpbS5odG1sCisiIExhc3QgQ2hhbmdlOgkyMDA0IE1heSAxNgorCisiIFVzZSBQeXRob24gZm9ybWF0dGluZyBydWxlcworcnVudGltZSEgaW5kZW50L3B5dGhvbi52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3B5dGhvbi52aW0gYi9ydW50aW1lL2luZGVudC9weXRob24udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYmJlMTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9weXRob24udmltCkBAIC0wLDAgKzEsMTc1IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJUHl0aG9uCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIE9yaWdpbmFsIEF1dGhvcjoJRGF2aWQgQnVzdG9zIDxidXN0b3NAY2FsdGVjaC5lZHU+CisiIExhc3QgQ2hhbmdlOgkyMDAzIFNlcCAwOAorCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorbGV0IGI6ZGlkX2luZGVudCA9IDEKKworIiBTb21lIHByZWxpbWluYXJ5IHNldHRpbmdzCitzZXRsb2NhbCBub2xpc3AJCSIgTWFrZSBzdXJlIGxpc3AgaW5kZW50aW5nIGRvZXNuJ3Qgc3VwZXJzZWRlIHVzCitzZXRsb2NhbCBhdXRvaW5kZW50CSIgaW5kZW50ZXhwciBpc24ndCBtdWNoIGhlbHAgb3RoZXJ3aXNlCisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0UHl0aG9uSW5kZW50KHY6bG51bSkKK3NldGxvY2FsIGluZGVudGtleXMrPTw6Piw9ZWxpZiw9ZXhjZXB0CisKKyIgT25seSBkZWZpbmUgdGhlIGZ1bmN0aW9uIG9uY2UuCitpZiBleGlzdHMoIipHZXRQeXRob25JbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2xldCBzOm1heG9mZiA9IDUwCSIgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gbG9vayBiYWNrd2FyZHMgZm9yICgpCisKK2Z1bmN0aW9uIEdldFB5dGhvbkluZGVudChsbnVtKQorICAiIElmIHRoaXMgbGluZSBpcyBleHBsaWNpdGx5IGpvaW5lZDogSWYgdGhlIHByZXZpb3VzIGxpbmUgd2FzIGFsc28gam9pbmVkLAorICAiIGxpbmUgaXQgdXAgd2l0aCB0aGF0IG9uZSwgb3RoZXJ3aXNlIGFkZCB0d28gJ3NoaWZ0d2lkdGgnCisgIGlmIGdldGxpbmUoYTpsbnVtIC0gMSkgPX4gJ1xcJCcKKyAgICBpZiBhOmxudW0gPiAxICYmIGdldGxpbmUoYTpsbnVtIC0gMikgPX4gJ1xcJCcKKyAgICAgIHJldHVybiBpbmRlbnQoYTpsbnVtIC0gMSkKKyAgICBlbmRpZgorICAgIHJldHVybiBpbmRlbnQoYTpsbnVtIC0gMSkgKyAoJnN3ICogMikKKyAgZW5kaWYKKworICAiIElmIHRoZSBzdGFydCBvZiB0aGUgbGluZSBpcyBpbiBhIHN0cmluZyBkb24ndCBjaGFuZ2UgdGhlIGluZGVudC4KKyAgaWYgaGFzKCdzeW50YXhfaXRlbXMnKQorCVwgJiYgc3luSURhdHRyKHN5bklEKGE6bG51bSwgMSwgMSksICJuYW1lIikgPT0gInB5dGhvblN0cmluZyIKKyAgICByZXR1cm4gLTEKKyAgZW5kaWYKKworICAiIFNlYXJjaCBiYWNrd2FyZHMgZm9yIHRoZSBwcmV2aW91cyBub24tZW1wdHkgbGluZS4KKyAgbGV0IHBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisKKyAgaWYgcGxudW0gPT0gMAorICAgICIgVGhpcyBpcyB0aGUgZmlyc3Qgbm9uLWVtcHR5IGxpbmUsIHVzZSB6ZXJvIGluZGVudC4KKyAgICByZXR1cm4gMAorICBlbmRpZgorCisgICIgSWYgdGhlIHByZXZpb3VzIGxpbmUgaXMgaW5zaWRlIHBhcmVudGhlc2lzLCB1c2UgdGhlIGluZGVudCBvZiB0aGUgc3RhcnRpbmcKKyAgIiBsaW5lLgorICAiIFRyaWNrOiB1c2UgdGhlIG5vbi1leGlzdGluZyAiZHVtbXkiIHZhcmlhYmxlIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCB3aGVuCisgICIgZ29pbmcgdG9vIGZhciBiYWNrLgorICBjYWxsIGN1cnNvcihwbG51bSwgMSkKKyAgbGV0IHBhcmxudW0gPSBzZWFyY2hwYWlyKCcoJywgJycsICcpJywgJ25iVycsCisJICBcICJsaW5lKCcuJykgPCAiIC4gKHBsbnVtIC0gczptYXhvZmYpIC4gIiA/IGR1bW15IDoiCisJICBcIC4gIiBzeW5JRGF0dHIoc3luSUQobGluZSgnLicpLCBjb2woJy4nKSwgMSksICduYW1lJykiCisJICBcIC4gIiA9fiAncHl0aG9uXFwoQ29tbWVudFxcfFN0cmluZ1xcKSciKQorICBpZiBwYXJsbnVtID4gMAorICAgIGxldCBwbGluZGVudCA9IGluZGVudChwYXJsbnVtKQorICAgIGxldCBwbG51bXN0YXJ0ID0gcGFybG51bQorICBlbHNlCisgICAgbGV0IHBsaW5kZW50ID0gaW5kZW50KHBsbnVtKQorICAgIGxldCBwbG51bXN0YXJ0ID0gcGxudW0KKyAgZW5kaWYKKworCisgICIgV2hlbiBpbnNpZGUgcGFyZW50aGVzaXM6IElmIGF0IHRoZSBmaXJzdCBsaW5lIGJlbG93IHRoZSBwYXJlbnRoZXNpcyBhZGQKKyAgIiB0d28gJ3NoaWZ0d2lkdGgnLCBvdGhlcndpc2Ugc2FtZSBhcyBwcmV2aW91cyBsaW5lLgorICAiIGkgPSAoYQorICAiICAgICAgICsgYgorICAiICAgICAgICsgYykKKyAgY2FsbCBjdXJzb3IoYTpsbnVtLCAxKQorICBsZXQgcCA9IHNlYXJjaHBhaXIoJygnLCAnJywgJyknLCAnYlcnLAorCSAgXCAibGluZSgnLicpIDwgIiAuIChhOmxudW0gLSBzOm1heG9mZikgLiAiID8gZHVtbXkgOiIKKwkgIFwgLiAiIHN5bklEYXR0cihzeW5JRChsaW5lKCcuJyksIGNvbCgnLicpLCAxKSwgJ25hbWUnKSIKKwkgIFwgLiAiID1+ICdweXRob25cXChDb21tZW50XFx8U3RyaW5nXFwpJyIpCisgIGlmIHAgPiAwCisgICAgaWYgcCA9PSBwbG51bQorICAgICAgIiBXaGVuIHRoZSBzdGFydCBpcyBpbnNpZGUgcGFyZW50aGVzaXMsIG9ubHkgaW5kZW50IG9uZSAnc2hpZnR3aWR0aCcuCisgICAgICBsZXQgcHAgPSBzZWFyY2hwYWlyKCcoJywgJycsICcpJywgJ2JXJywKKwkgIFwgImxpbmUoJy4nKSA8ICIgLiAoYTpsbnVtIC0gczptYXhvZmYpIC4gIiA/IGR1bW15IDoiCisJICBcIC4gIiBzeW5JRGF0dHIoc3luSUQobGluZSgnLicpLCBjb2woJy4nKSwgMSksICduYW1lJykiCisJICBcIC4gIiA9fiAncHl0aG9uXFwoQ29tbWVudFxcfFN0cmluZ1xcKSciKQorICAgICAgaWYgcHAgPiAwCisJcmV0dXJuIGluZGVudChwbG51bSkgKyAmc3cKKyAgICAgIGVuZGlmCisgICAgICByZXR1cm4gaW5kZW50KHBsbnVtKSArICgmc3cgKiAyKQorICAgIGVuZGlmCisgICAgaWYgcGxudW1zdGFydCA9PSBwCisgICAgICByZXR1cm4gaW5kZW50KHBsbnVtKQorICAgIGVuZGlmCisgICAgcmV0dXJuIHBsaW5kZW50CisgIGVuZGlmCisKKworICAiIEdldCB0aGUgbGluZSBhbmQgcmVtb3ZlIGEgdHJhaWxpbmcgY29tbWVudC4KKyAgIiBVc2Ugc3ludGF4IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIHdoZW4gcG9zc2libGUuCisgIGxldCBwbGluZSA9IGdldGxpbmUocGxudW0pCisgIGxldCBwbGluZV9sZW4gPSBzdHJsZW4ocGxpbmUpCisgIGxldCBjb2wgPSAwCisgIHdoaWxlIGNvbCA8IHBsaW5lX2xlbgorICAgIGlmIHBsaW5lW2NvbF0gPT0gJyMnICYmICghaGFzKCdzeW50YXhfaXRlbXMnKQorCSAgICBcIHx8IHN5bklEYXR0cihzeW5JRChwbG51bSwgY29sICsgMSwgMSksICJuYW1lIikgPT0gInB5dGhvbkNvbW1lbnQiKQorICAgICAgbGV0IHBsaW5lID0gc3RycGFydChwbGluZSwgMCwgY29sKQorICAgICAgYnJlYWsKKyAgICBlbmRpZgorICAgIGxldCBjb2wgPSBjb2wgKyAxCisgIGVuZHdoaWxlCisKKyAgIiBJZiB0aGUgcHJldmlvdXMgbGluZSBlbmRlZCB3aXRoIGEgY29sb24sIGluZGVudCB0aGlzIGxpbmUKKyAgaWYgcGxpbmUgPX4gJzpccyokJworICAgIHJldHVybiBwbGluZGVudCArICZzdworICBlbmRpZgorCisgICIgSWYgdGhlIHByZXZpb3VzIGxpbmUgd2FzIGEgc3RvcC1leGVjdXRpb24gc3RhdGVtZW50Li4uCisgIGlmIGdldGxpbmUocGxudW0pID1+ICdeXHMqXChicmVha1x8Y29udGludWVcfHJhaXNlXHxyZXR1cm5cKVw+JworICAgICIgU2VlIGlmIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGRlZGVudGVkCisgICAgaWYgaW5kZW50KGE6bG51bSkgPiBpbmRlbnQocGxudW0pIC0gJnN3CisgICAgICAiIElmIG5vdCwgcmVjb21tZW5kIG9uZSBkZWRlbnQKKyAgICAgIHJldHVybiBpbmRlbnQocGxudW0pIC0gJnN3CisgICAgZW5kaWYKKyAgICAiIE90aGVyd2lzZSwgdHJ1c3QgdGhlIHVzZXIKKyAgICByZXR1cm4gLTEKKyAgZW5kaWYKKworICAiIElmIHRoZSBjdXJyZW50IGxpbmUgYmVnaW5zIHdpdGggYSBrZXl3b3JkIHRoYXQgbGluZXMgdXAgd2l0aCAidHJ5IgorICBpZiBnZXRsaW5lKGE6bG51bSkgPX4gJ15ccypcKGV4Y2VwdFx8ZmluYWxseVwpXD4nCisgICAgbGV0IGxudW0gPSBhOmxudW0gLSAxCisgICAgd2hpbGUgbG51bSA+PSAxCisgICAgICBlY2hvbXNnICdnb3QgaGVyZScKKyAgICAgIGlmIGdldGxpbmUobG51bSkgPX4gJ15ccypcKHRyeVx8ZXhjZXB0XClcPicKKwlsZXQgaW5kID0gaW5kZW50KGxudW0pCisJZWNob21zZyAnZ290IGhlcmUsIGluZGVudCBpcyAnIC4gaW5kCisJaWYgaW5kID49IGluZGVudChhOmxudW0pCisJICByZXR1cm4gLTEJIiBpbmRlbnQgaXMgYWxyZWFkeSBsZXNzIHRoYW4gdGhpcworCWVuZGlmCisJcmV0dXJuIGluZAkiIGxpbmUgdXAgd2l0aCBwcmV2aW91cyB0cnkgb3IgZXhjZXB0CisgICAgICBlbmRpZgorICAgICAgbGV0IGxudW0gPSBsbnVtIC0gMQorICAgIGVuZHdoaWxlCisgICAgZWNob21zZyAnZ290IHRvIHRoZSBlbmQnCisgICAgcmV0dXJuIC0xCQkiIG5vIG1hdGNoaW5nICJ0cnkiIQorICBlbmRpZgorCisgICIgSWYgdGhlIGN1cnJlbnQgbGluZSBiZWdpbnMgd2l0aCBhIGhlYWRlciBrZXl3b3JkLCBkZWRlbnQKKyAgaWYgZ2V0bGluZShhOmxudW0pID1+ICdeXHMqXChlbGlmXHxlbHNlXClcPicKKworICAgICIgVW5sZXNzIHRoZSBwcmV2aW91cyBsaW5lIHdhcyBhIG9uZS1saW5lcgorICAgIGlmIGdldGxpbmUocGxudW1zdGFydCkgPX4gJ15ccypcKGZvclx8aWZcfHRyeVwpXD4nCisgICAgICByZXR1cm4gcGxpbmRlbnQKKyAgICBlbmRpZgorCisgICAgIiBPciB0aGUgdXNlciBoYXMgYWxyZWFkeSBkZWRlbnRlZAorICAgIGlmIGluZGVudChhOmxudW0pIDw9IHBsaW5kZW50IC0gJnN3CisgICAgICByZXR1cm4gLTEKKyAgICBlbmRpZgorCisgICAgcmV0dXJuIHBsaW5kZW50IC0gJnN3CisgIGVuZGlmCisKKyAgIiBXaGVuIGFmdGVyIGEgKCkgY29uc3RydWN0IHdlIHByb2JhYmx5IHdhbnQgdG8gZ28gYmFjayB0byB0aGUgc3RhcnQgbGluZS4KKyAgIiBhID0gKGIKKyAgIiAgICAgICArIGMpCisgICIgaGVyZQorICBpZiBwYXJsbnVtID4gMAorICAgIHJldHVybiBwbGluZGVudAorICBlbmRpZgorCisgIHJldHVybiAtMQorCitlbmRmdW5jdGlvbgorCisiIHZpbTpzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9yZWFkbGluZS52aW0gYi9ydW50aW1lL2luZGVudC9yZWFkbGluZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI2NDBmMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3JlYWRsaW5lLnZpbQpAQCAtMCwwICsxLDQ4IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJICAgIHJlYWRsaW5lIGNvbmZpZ3VyYXRpb24gZmlsZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vaW5kZW50L3BjcC9yZWFkbGluZS8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNC0yNQorIiBhcmNoLXRhZzoJICAgIGVlNjgxMjM1LTNhYmYtNGE0Mi04NTg3LWVkYWJkNDA5YTk4MAorCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCitzZXRsb2NhbCBpbmRlbnRleHByPUdldFJlYWRsaW5lSW5kZW50KCkKK3NldGxvY2FsIGluZGVudGtleXM9IV5GLG8sTyw9JGVsc2UsPSRlbmRpZgorCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0UmVhZGxpbmVJbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2Z1bmN0aW9uIEdldFJlYWRsaW5lSW5kZW50KCkKKyAgbGV0IGxudW0gPSBwcmV2bm9uYmxhbmsodjpsbnVtIC0gMSkKKworICBpZiBsbnVtID09IDAKKyAgICByZXR1cm4gMAorICBlbmRpZgorCisgIGxldCBsaW5lID0gZ2V0bGluZShsbnVtKQorICBsZXQgaW5kID0gaW5kZW50KGxudW0pCisKKyAgIiBpbmNyZWFzZSBpbmRlbnQgaWYgcHJldmlvdXMgbGluZSBzdGFydGVkIHdpdGggJGlmIG9yICRlbHNlCisgIGlmICBsaW5lID1+ICdeXHMqJFwoaWZcfGVsc2VcKVw+JworICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgZW5kaWYKKworICBsZXQgbGluZSA9IGdldGxpbmUodjpsbnVtKQorCisgICIgZGVjcmVhc2UgaW5kZW50IGlmIHRoaXMgbGluZSBzdGFydHMgd2l0aCAkZWxzZSBvciAkZW5kaWYKKyAgaWYgbGluZSA9fiAnXlxzKiRcKGVsc2VcfGVuZGlmXClcPicKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVuZGlmCisKKyAgcmV0dXJuIGluZAorZW5kZnVuY3Rpb24KKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvcnBsLnZpbSBiL3J1bnRpbWUvaW5kZW50L3JwbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQxZjVmOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3JwbC52aW0KQEAgLTAsMCArMSw2MCBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CVJQTC8yCisiIFZlcnNpb246CTAuMgorIiBMYXN0IENoYW5nZToJMjAwMiBBdWd1c3QgMTYKKyIgTWFpbnRhaW5lcjoJQkVSVFJBTkQgSm/rbCA8cnBsMkBmcmVlLmZyPgorCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorbGV0IGI6ZGlkX2luZGVudCA9IDEKKworc2V0bG9jYWwgaW5kZW50a2V5cys9PX5lbmQsPX5jYXNlLD1+aWYsPX50aGVuLD1+ZWxzZSw9fmRvLD1+dW50aWwsPX53aGlsZSw9fnJlcGVhdCw9fnNlbGVjdCw9fmRlZmF1bHQsPX5mb3IsPX5zdGFydCw9fm5leHQsPX5zdGVwLDw8Piw8Pj4KKworIiBEZWZpbmUgdGhlIGFwcHJvcHJpYXRlIGluZGVudCBmdW5jdGlvbiBidXQgb25seSBvbmNlCitzZXRsb2NhbCBpbmRlbnRleHByPVJwbEdldEZyZWVJbmRlbnQoKQoraWYgZXhpc3RzKCIqUnBsR2V0RnJlZUluZGVudCIpCisgIGZpbmlzaAorZW5kaWYKKworZnVuY3Rpb24gUnBsR2V0SW5kZW50KGxudW0pCisgIGxldCBpbmQgPSBpbmRlbnQoYTpsbnVtKQorICBsZXQgcHJldmxpbmU9Z2V0bGluZShhOmxudW0pCisgICIgU3RyaXAgdGFpbCBjb21tZW50CisgIGxldCBwcmV2c3RhdD1zdWJzdGl0dXRlKHByZXZsaW5lLCAnIS4qJCcsICcnLCAnJykKKworICAiIEFkZCBhIHNoaWZ0d2lkdGggdG8gc3RhdGVtZW50cyBmb2xsb3dpbmcgaWYsIGlmZXJyLCB0aGVuLCBlbHNlLCBlbHNlaWYsCisgICIgY2FzZSwgc2VsZWN0LCBkZWZhdWx0LCBkbywgdW50aWwsIHdoaWxlLCByZXBlYXQsIGZvciwgc3RhcnQKKyAgaWYgcHJldnN0YXQgPX4/ICdcPFwoaWZcfGlmZXJyXHxkb1x8d2hpbGVcKVw+JyAmJiBwcmV2c3RhdCA9fj8gJ1w8ZW5kXD4nCisgIGVsc2VpZiBwcmV2c3RhdCA9fj8gJ1woXlx8XHNcK1wpPDxcKCRcfFxzXCtcKScgJiYgcHJldnN0YXQgPX4/ICdcc1wrPj5cKCRcfFxzXCtcKScKKyAgZWxzZWlmIHByZXZzdGF0ID1+PyAnXDxcKGlmXHxpZmVyclx8dGhlblx8ZWxzZVx8ZWxzZWlmXHxzZWxlY3RcfGNhc2VcfGRvXHx1bnRpbFx8d2hpbGVcfHJlcGVhdFx8Zm9yXHxzdGFydFx8ZGVmYXVsdFwpXD4nIHx8IHByZXZzdGF0ID1+PyAnXCheXHxcc1wrXCk8PFwoJFx8XHNcK1wpJworICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgZW5kaWYKKworICAiIFN1YnRyYWN0IGEgc2hpZnR3aWR0aCBmcm9tIHRoZW4sIGVsc2UsIGVsc2VpZiwgZW5kLCB1bnRpbCwgcmVwZWF0LCBuZXh0LAorICAiIHN0ZXAKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKHY6bG51bSkKKyAgaWYgbGluZSA9fj8gJ15ccypcKHRoZW5cfGVsc2VcfGVsc2VpZlx8dW50aWxcfHJlcGVhdFx8bmV4dFx8c3RlcFx8ZGVmYXVsdFx8ZW5kXClcPicKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVsc2VpZiBsaW5lID1+PyAnXlxzKj4+XCgkXHxcc1wrXCknCisgICAgbGV0IGluZCA9IGluZCAtICZzdworICBlbmRpZgorCisgIHJldHVybiBpbmQKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIFJwbEdldEZyZWVJbmRlbnQoKQorICAiIEZpbmQgdGhlIHByZXZpb3VzIG5vbi1ibGFuayBsaW5lCisgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisKKyAgIiBVc2UgemVybyBpbmRlbnQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZQorICBpZiBsbnVtID09IDAKKyAgICByZXR1cm4gMAorICBlbmRpZgorCisgIGxldCBpbmQ9UnBsR2V0SW5kZW50KGxudW0pCisgIHJldHVybiBpbmQKK2VuZGZ1bmN0aW9uCisKKyIgdmltOnN3PTIgdHc9MTMwCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9yc3QudmltIGIvcnVudGltZS9pbmRlbnQvcnN0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjI2OWVjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvcnN0LnZpbQpAQCAtMCwwICsxLDYwIEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJICAgIHJlU3RydWN0dXJlZFRleHQgRG9jdW1lbnRhdGlvbiBGb3JtYXQKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL2luZGVudC9wY3AvcnN0LworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA0LTI1CisiIGFyY2gtdGFnOgkgICAgM2ZlMTBmNzUtMjRkMC00ZDk0LWE5MjQtMGNlOTQ1OTU4MTA0CisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0UlNUSW5kZW50KCkKK3NldGxvY2FsIGluZGVudGtleXMtPTosMCMgaW5kZW50a2V5cy09ZQorCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0UlNUSW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCitmdW5jdGlvbiBHZXRSU1RJbmRlbnQoKQorICBsZXQgbG51bSA9IHByZXZub25ibGFuayh2OmxudW0gLSAxKQorCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgbGV0IGluZCA9IGluZGVudChsbnVtKQorICBsZXQgbGluZSA9IGdldGxpbmUobG51bSkKKworICBpZiBsaW5lID1+ICdeXHMqWy0qK11ccycKKyAgICBsZXQgaW5kID0gaW5kICsgMgorICBlbHNlaWYgbGluZSA9fiAnXlxzKlxkXCsuXHMnCisgICAgbGV0IGluZCA9IGluZCArIG1hdGNoZW5kKHN1YnN0aXR1dGUobGluZSwgJ15ccyonLCAnJywgJycpLCAnXGRcKy5cc1wrJykKKyAgZW5kaWYKKworICBsZXQgbGluZSA9IGdldGxpbmUodjpsbnVtIC0gMSkKKworICBpZiBsaW5lID1+ICdeXHMqJCcKKyAgICBleGVjdXRlIGxudW0KKyAgICBjYWxsIHNlYXJjaCgnXlxzKlwlKFstKitdXHNcfFxkXCsuXHNcfFwuXC5cfCRcKScsICdiVycpCisgICAgbGV0IGxpbmUgPSBnZXRsaW5lKCcuJykKKyAgICBpZiBsaW5lID1+ICdeXHMqWy0qK10nCisgICAgICBsZXQgaW5kID0gaW5kIC0gMgorICAgIGVsc2VpZiBsaW5lID1+ICdeXHMqXGRcK1wuXHMnCisgICAgICBsZXQgaW5kID0gaW5kIC0gbWF0Y2hlbmQoc3Vic3RpdHV0ZShsaW5lLCAnXlxzKicsICcnLCAnJyksCisJICAgIFwgJ1xkXCtcLlxzXCsnKQorICAgIGVsc2VpZiBsaW5lID1+ICdeXHMqXC5cLicKKyAgICAgIGxldCBpbmQgPSBpbmQgLSAzCisgICAgZWxzZQorICAgICAgbGV0IGluZCA9IGluZAorICAgIGVuZGlmCisgIGVuZGlmCisKKyAgcmV0dXJuIGluZAorZW5kZnVuY3Rpb24KKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvcnVieS52aW0gYi9ydW50aW1lL2luZGVudC9ydWJ5LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTA3OGYyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvcnVieS52aW0KQEAgLTAsMCArMSw2NyBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CVJ1YnkKKyIgTWFpbnRhaW5lcjoJR2F2aW4gU2luY2xhaXIgPGdzaW5jbGFpckBzb3lhYmVhbi5jb20uYXU+CisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAxMQorIiBVUkw6IHd3dy5zb3lhYmVhbi5jb20uYXUvZ2F2aW4vdmltL2luZGV4Lmh0bWwKKyIgQ2hhbmdlczogKHNpbmNlIHZpbSA2LjEpCisiICAtIGluZGVudGF0aW9uIGFmdGVyIGEgbGluZSBlbmRpbmcgaW4gY29tbWEsIGV0YywgKGV2ZW4gaW4gYSBjb21tZW50KSB3YXMKKyIgICAgYnJva2VuLCBub3cgZml4ZWQgKDIwMDIvMDgvMTQpCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCitzZXRsb2NhbCBpbmRlbnRleHByPUdldFJ1YnlJbmRlbnQoKQorc2V0bG9jYWwgbm9saXNwCitzZXRsb2NhbCBub3NtYXJ0aW5kZW50CitzZXRsb2NhbCBhdXRvaW5kZW50CitzZXRsb2NhbCBpbmRlbnRrZXlzKz09ZW5kLD1lbHNlLD1lbHNpZiw9d2hlbiw9ZW5zdXJlLD1yZXNjdWUKKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldFJ1YnlJbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2Z1bmN0aW9uIEdldFJ1YnlJbmRlbnQoKQorICAiIEZpbmQgYSBub24tYmxhbmsgbGluZSBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorICBsZXQgbG51bSA9IHByZXZub25ibGFuayh2OmxudW0gLSAxKQorCisgICIgQXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIHVzZSB6ZXJvIGluZGVudC4KKyAgaWYgbG51bSA9PSAwCisgICAgcmV0dXJuIDAKKyAgZW5kaWYKKworICAiIElmIHRoZSBsaW5lIHRyYWlsZWQgd2l0aCBbKissLihdIC0gYnV0IG5vdCBpbiBhIGNvbW1lbnQgLSB0cnVzdCB0aGUgdXNlcgorICBpZiBnZXRsaW5lKGxudW0pID1+ICdcKFxbXiNcXS4qXCk/XChcKlx8XC5cfCtcfCxcfChcKVwoXHMqIy4qXClcPSQnCisgICAgcmV0dXJuIC0xCisgIGVuZGlmCisKKyAgIiBBZGQgYSAnc2hpZnR3aWR0aCcgYWZ0ZXIgbGluZXMgYmVnaW5uaW5nIHdpdGg6CisgICIgbW9kdWxlLCBjbGFzcywgZGV2LCBpZiwgZm9yLCB3aGlsZSwgdW50aWwsIGVsc2UsIGVsc2lmLCBjYXNlLCB3aGVuLCB7CisgIGxldCBpbmQgPSBpbmRlbnQobG51bSkKKyAgbGV0IGZsYWcgPSAwCisgIGlmIGdldGxpbmUobG51bSkgPX4gJ15ccypcKG1vZHVsZVw+XHxjbGFzc1w+XHxkZWZcPlx8aWZcPlx8Zm9yXD5cfHdoaWxlXD5cfHVudGlsXD5cfGVsc2VcPlx8ZWxzaWZcPlx8Y2FzZVw+XHx3aGVuXD5cfHVubGVzc1x8YmVnaW5cfGVuc3VyZVw+XHxyZXNjdWVcPlwpJworCVwgfHwgZ2V0bGluZShsbnVtKSA9fiAne1xzKiQnCisJXCB8fCBnZXRsaW5lKGxudW0pID1+ICdcKHtcfFw8ZG9cPlwpLip8Lip8XHMqJCcKKwlcIHx8IGdldGxpbmUobG51bSkgPX4gJ1w8ZG9cPlwoXHMqIy4qXClcPSQnCisgICAgbGV0IGluZCA9IGluZCArICZzdworICAgIGxldCBmbGFnID0gMQorICBlbmRpZgorCisgICIgU3VidHJhY3QgYSAnc2hpZnR3aWR0aCcgYWZ0ZXIgbGluZXMgZW5kaW5nIHdpdGgKKyAgIiAiZW5kIiB3aGVuIHRoZXkgYmVnaW4gd2l0aCB3aGlsZSwgaWYsIGZvciwgdW50aWwKKyAgaWYgZmxhZyA9PSAxICYmIGdldGxpbmUobG51bSkgPX4gJ1w8ZW5kXD5cKFxzKiMuKlwpXD0kJworICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgZW5kaWYKKworICAiIFN1YnRyYWN0IGEgJ3NoaWZ0d2lkdGgnIG9uIGVuZCwgZWxzZSBhbmQsIGVsc2lmLCB3aGVuIGFuZCB9CisgIGlmIGdldGxpbmUodjpsbnVtKSA9fiAnXlxzKlwoZW5kXD5cfGVsc2VcPlx8ZWxzaWZcPlx8d2hlblw+XHxlbnN1cmVcPlx8cmVzY3VlXD5cfH1cKScKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVuZGlmCisKKyAgcmV0dXJuIGluZAorZW5kZnVuY3Rpb24KKworIiB2aW06c3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvc2RsLnZpbSBiL3J1bnRpbWUvaW5kZW50L3NkbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkZTJjMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3NkbC52aW0KQEAgLTAsMCArMSw4OSBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CVNETAorIiBNYWludGFpbmVyOglNaWNoYWVsIFBpZWZlbCA8cGllZmVsQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgorIiBMYXN0IENoYW5nZToJMjAwMSBTZXAgMTcKKworIiBTaGFtZWxlc3NseSBzdG9sZW4gZnJvbSB0aGUgVmltLVNjcmlwdCBpbmRlbnQgZmlsZQorCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorbGV0IGI6ZGlkX2luZGVudCA9IDEKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRTRExJbmRlbnQoKQorc2V0bG9jYWwgaW5kZW50a2V5cys9PX5lbmQsPX5zdGF0ZSwqPFJldHVybj4KKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldFNETEluZGVudCIpCisiICBmaW5pc2gKK2VuZGlmCisKK3NldCBjcG8tPUMKKworZnVuY3Rpb24hIEdldFNETEluZGVudCgpCisgICIgRmluZCBhIG5vbi1ibGFuayBsaW5lIGFib3ZlIHRoZSBjdXJyZW50IGxpbmUuCisgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisKKyAgIiBBdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgdXNlIHplcm8gaW5kZW50LgorICBpZiBsbnVtID09IDAKKyAgICByZXR1cm4gMAorICBlbmRpZgorCisgIGxldCBpbmQgPSBpbmRlbnQobG51bSkKKyAgbGV0IHZpcnR1YWxpdHkgPSAnXlxzKlwoXCh2aXJ0dWFsXHxyZWRlZmluZWRcfGZpbmFsaXplZFwpXHNcK1wpXD1ccyonCisKKyAgIiBBZGQgYSBzaW5nbGUgc3BhY2UgdG8gY29tbWVudHMgd2hpY2ggdXNlIGFzdGVyaXNrcworICBpZiBnZXRsaW5lKGxudW0pID1+ICdeXHMqXConCisgICAgbGV0IGluZCA9IGluZCAtIDEKKyAgZW5kaWYKKyAgaWYgZ2V0bGluZSh2OmxudW0pID1+ICdeXHMqXConCisgICAgbGV0IGluZCA9IGluZCArIDEKKyAgZW5kaWYKKworICAiIEFkZCBhICdzaGlmdHdpZHRoJyBhZnRlciBzdGF0ZXMsIGRpZmZlcmVudCBibG9ja3MsIGRlY2lzaW9uIChhbmQgYWx0ZXJuYXRpdmVzKSwgaW5wdXRzCisgIGlmIChnZXRsaW5lKGxudW0pID1+PyAnXlxzKlwoc3RhcnRcfHN0YXRlXHxzeXN0ZW1cfHBhY2thZ2VcfGNvbm5lY3Rpb25cfGNoYW5uZWxcfGFsdGVybmF0aXZlXHxtYWNyb1x8b3BlcmF0b3JcfG5ld3R5cGVcfHNlbGVjdFx8c3Vic3RydWN0dXJlXHxkZWNpc2lvblx8Z2VuZXJhdG9yXHxyZWZpbmVtZW50XHxzZXJ2aWNlXHxtZXRob2RcfGV4Y2VwdGlvbmhhbmRsZXJcfGFzbnR5cGVcfHN5bnR5cGVcfHZhbHVlXHwoLiopOlx8XChwcmlvcml0eVxzXCtcKVw9aW5wdXRcfHByb3ZpZGVkXCknCisgICAgXCB8fCBnZXRsaW5lKGxudW0pID1+PyB2aXJ0dWFsaXR5IC4gJ1wocHJvY2Vzc1x8cHJvY2VkdXJlXHxibG9ja1x8b2JqZWN0XCknKQorICAgIFwgJiYgZ2V0bGluZShsbnVtKSAhfj8gJ2VuZFtbOmFscGhhOl1dXCs7JCcKKyAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgIGVuZGlmCisKKyAgIiBTdWJ0cmFjdCBhICdzaGlmdHdpZHRoJyBhZnRlciBzdGF0ZXMKKyAgaWYgZ2V0bGluZShsbnVtKSA9fj8gJ15ccypcKHN0b3BcfHJldHVyblw+XHxuZXh0c3RhdGVcKScKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVuZGlmCisKKyAgIiBTdWJ0cmFjdCBhICdzaGlmdHdpZHRoJyBvbiBvbiBlbmQgKHVuY29tcGxldGVkIGxpbmUpCisgIGlmIGdldGxpbmUodjpsbnVtKSA9fj8gJ15ccyplbmRcPicKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVuZGlmCisKKyAgIiBQdXQgZWFjaCBhbHRlcm5hdGl2ZXMgd2hlcmUgdGhlIGNvcnJlc3BvbmRpbmcgZGVjaXNpb24gd2FzCisgIGlmIGdldGxpbmUodjpsbnVtKSA9fj8gJ15ccypcKCguKilcfGVsc2VcKTonCisgICAgbm9ybWFsIGsKKyAgICBsZXQgaW5kID0gaW5kZW50KHNlYXJjaHBhaXIoJ15ccypkZWNpc2lvbicsICcnLCAnXlxzKmVuZGRlY2lzaW9uJywgJ2JXJywKKyAgICAgIFwgJ3N5bklEYXR0cihzeW5JRChsaW5lKCIuIiksIGNvbCgiLiIpLCAwKSwgIm5hbWUiKSA9fj8gInNkbFN0cmluZyInKSkKKyAgZW5kaWYKKworICAiIFB1dCBlYWNoIHN0YXRlIHdoZXJlIHRoZSBwcmVjZWRpbmcgc3RhdGUgd2FzCisgIGlmIGdldGxpbmUodjpsbnVtKSA9fj8gJ15ccypzdGF0ZVw+JworICAgIGxldCBpbmQgPSBpbmRlbnQoc2VhcmNoKCdeXHMqc3RhcnQnLCAnYlcnKSkKKyAgZW5kaWYKKworICAiIFN5c3RlbXMgYW5kIHBhY2thZ2VzIGFyZSBhbHdheXMgaW4gY29sdW1uIDAKKyAgaWYgZ2V0bGluZSh2OmxudW0pID1+PyAnXlxzKlwoXChlbmRcKVw9c3lzdGVtXHxcKGVuZFwpXD1wYWNrYWdlXCknCisgICAgcmV0dXJuIDA7CisgIGVuZGlmCisKKyAgIiBQdXQgZWFjaCBlbmQqIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIGJlZ2luIHdhcworICBpZiBnZXRsaW5lKHY6bG51bSkgPX4/ICdeXHMqZW5kW1s6YWxwaGE6XV0nCisgICAgbm9ybWFsIGsKKyAgICBsZXQgcGFydG5lcj1tYXRjaHN0cihnZXRsaW5lKHY6bG51bSksICdcKCcgLiB2aXJ0dWFsaXR5IC4gJ2VuZFwpXEA8PVtbOmFscGhhOl1dXCsnKQorICAgIGxldCBpbmQgPSBpbmRlbnQoc2VhcmNocGFpcih2aXJ0dWFsaXR5IC4gcGFydG5lciwgJycsICdeXHMqZW5kJyAuIHBhcnRuZXIsICdiVycsCisgICAgICBcICdzeW5JRGF0dHIoc3luSUQobGluZSgiLiIpLCBjb2woIi4iKSwgMCksICJuYW1lIikgPX4/ICJzZGxTdHJpbmciJykpCisgIGVuZGlmCisKKyAgcmV0dXJuIGluZAorZW5kZnVuY3Rpb24KKworIiB2aW06c3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvc2gudmltIGIvcnVudGltZS9pbmRlbnQvc2gudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MGFkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC9zaC52aW0KQEAgLTAsMCArMSw1OCBAQAorIiBWaW0gaW5kZW50IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBTaGVsbCBTY3JpcHQKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL2luZGVudC9wY3Avc2gvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDQtMjUKKyIgYXJjaC10YWc6CSAgICA0MzFjN2ZjMS0xMmE2LTRkNzEtOTYzNi0xNDk4ZWY1NmIwMzgKKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgIGZpbmlzaAorZW5kaWYKKworbGV0IGI6ZGlkX2luZGVudCA9IDEKKworc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRTaEluZGVudCgpCitzZXRsb2NhbCBpbmRlbnRrZXlzKz09dGhlbiw9ZG8sPWVsc2UsPWVsaWYsPWVzYWMsPWZpLD1maW4sPWZpbCw9ZG9uZQorc2V0bG9jYWwgaW5kZW50a2V5cy09OiwwIworCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0U2hJbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK3NldCBjcG9wdGlvbnMtPUMKKworZnVuY3Rpb24gR2V0U2hJbmRlbnQoKQorICAiIEZpbmQgYSBub24tYmxhbmsgbGluZSBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorICBsZXQgbG51bSA9IHByZXZub25ibGFuayh2OmxudW0gLSAxKQorCisgICIgSGl0IHRoZSBzdGFydCBvZiB0aGUgZmlsZSwgdXNlIHplcm8gaW5kZW50LgorICBpZiBsbnVtID09IDAKKyAgICByZXR1cm4gMAorICBlbmRpZgorCisgICIgQWRkIGEgJ3NoaWZ0d2lkdGgnIGFmdGVyIGlmLCB3aGlsZSwgZWxzZSwgY2FzZSwgdW50aWwsIGZvciwgZnVuY3Rpb24oKQorICAiIFNraXAgaWYgdGhlIGxpbmUgYWxzbyBjb250YWlucyB0aGUgY2xvc3VyZSBmb3IgdGhlIGFib3ZlCisgIGxldCBpbmQgPSBpbmRlbnQobG51bSkKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCisgIGlmIGxpbmUgPX4gJ15ccypcKGlmXHx0aGVuXHxkb1x8ZWxzZVx8ZWxpZlx8Y2FzZVx8d2hpbGVcfHVudGlsXHxmb3JcKVw+JworCVwgfHwgbGluZSA9fiAnXlxzKlw8XGhcdypcPlxzKigpXHMqeycKKwlcIHx8IGxpbmUgPX4gJ15ccyp7JworICAgIGlmIGxpbmUgIX4gJ1woZXNhY1x8ZmlcfGRvbmVcKVw+XHMqJCcgJiYgbGluZSAhfiAnfVxzKiQnCisgICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgZW5kaWYKKyAgZW5kaWYKKworICAiIFN1YnRyYWN0IGEgJ3NoaWZ0d2lkdGgnIG9uIGEgdGhlbiwgZG8sIGVsc2UsIGVzYWMsIGZpLCBkb25lCisgICIgUmV0YWluIHRoZSBpbmRlbnRhdGlvbiBsZXZlbCBpZiBsaW5lIG1hdGNoZXMgZmluIChmb3IgZmluZCkKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKHY6bG51bSkKKyAgaWYgKGxpbmUgPX4gJ15ccypcKHRoZW5cfGRvXHxlbHNlXHxlbGlmXHxlc2FjXHxmaVx8ZG9uZVwpXD4nIHx8IGxpbmUgPX4gJ15ccyp9JykKKwlcICYmIGxpbmUgIX4gJ15ccypmaVtsbl1cPicKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVuZGlmCisKKyAgcmV0dXJuIGluZAorZW5kZnVuY3Rpb24KKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvdGNsLnZpbSBiL3J1bnRpbWUvaW5kZW50L3RjbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2NTc1ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3RjbC52aW0KQEAgLTAsMCArMSwxMjMgQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOgkgICAgVGNsCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9pbmRlbnQvcGNwL3RjbC8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNS0yMQorIiBhcmNoLXRhZzoJICAgIDY0ZmFiMWZhLWQ2NzAtNDBhYi1hMTkxLTU1Njc4ZjIwY2ViMAorCisiIG9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCitzZXRsb2NhbCBpbmRlbnRleHByPUdldFRjbEluZGVudCgpCitzZXRsb2NhbCBpbmRlbnRrZXlzLT06LDAjCitzZXRsb2NhbCBpbmRlbnRrZXlzKz0wXQorCisiIG9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0VGNsSW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCitmdW5jdGlvbiBzOlByZXZOb25CbGFua05vbkNvbW1lbnQobG51bSkKKyAgbGV0IGxudW0gPSBwcmV2bm9uYmxhbmsoYTpsbnVtKQorICB3aGlsZSBsbnVtID4gMAorICAgIGxldCBsaW5lID0gZ2V0bGluZShsbnVtKQorICAgIGlmIGxpbmUgIX4gJ15ccypcKCNcfCRcKScKKyAgICAgIGJyZWFrCisgICAgZW5kaWYKKyAgICBsZXQgbG51bSA9IHByZXZub25ibGFuayhsbnVtIC0gMSkKKyAgZW5kd2hpbGUKKyAgcmV0dXJuIGxudW0KK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBHZXRUY2xJbmRlbnQoKQorICBsZXQgbG51bSA9IHM6UHJldk5vbkJsYW5rTm9uQ29tbWVudCh2OmxudW0gLSAxKQorCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCisgIGxldCBpbmQgPSBpbmRlbnQobG51bSkKKworICAiIFRPRE86IFBvc3NpYmxlIGltcHJvdmVtZW50LCBjaGVjayB0aGF0ICdiZWdpbicgYW5kICdlbmQnIGFyZW4ndCBpbnNpZGUgYQorICAiIGNvbW1lbnQgb3Igc3RyaW5nLiAgVGhpcyB3aWxsIG1lc3MgaXQgdXAuICBBcyBJIGFtIHByZXNzZWQgZm9yIHRpbWUgYW5kCisgICIgc3R1ZmYgbGlrZSB0aGlzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiBJIHdvbid0IGRlYWwgd2l0aCBpdCBpbiB0aGlzCisgICIgdmVyc2lvbi4KKyAgbGV0IG9wZW4gPSAwCisgIGxldCBiZWdpbiA9IG1hdGNoKGxpbmUsICd7JywgMCkKKyAgd2hpbGUgYmVnaW4gPiAtMQorICAgIGxldCBlbmQgPSBtYXRjaChsaW5lLCAnfScsIGJlZ2luICsgMSkKKyAgICBpZiBlbmQgPCAwCisgICAgICBsZXQgb3BlbiA9IG9wZW4gKyAxCisgICAgZWxzZQorICAgICAgbGV0IHRtcCA9IG1hdGNoKGxpbmUsICd7JywgYmVnaW4gKyAxKQorICAgICAgaWYgdG1wICE9IC0xICYmIHRtcCA8IGVuZAorCWxldCBvcGVuID0gb3BlbiArIDEKKyAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgICBsZXQgYmVnaW4gPSBtYXRjaChsaW5lLCAneycsIGJlZ2luICsgMSkKKyAgZW5kd2hpbGUKKworICBsZXQgYmVnaW4gPSBtYXRjaChsaW5lLCAnWycsIDApCisgIHdoaWxlIGJlZ2luID4gLTEKKyAgICBsZXQgZW5kID0gbWF0Y2gobGluZSwgJ10nLCBiZWdpbiArIDEpCisgICAgaWYgZW5kIDwgMAorICAgICAgbGV0IG9wZW4gPSBvcGVuICsgMQorICAgIGVsc2UKKyAgICAgIGxldCB0bXAgPSBtYXRjaChsaW5lLCAneycsIGJlZ2luICsgMSkKKyAgICAgIGlmIHRtcCAhPSAtMSAmJiB0bXAgPCBlbmQKKwlsZXQgb3BlbiA9IG9wZW4gKyAxCisgICAgICBlbmRpZgorICAgIGVuZGlmCisgICAgbGV0IGJlZ2luID0gbWF0Y2gobGluZSwgJ3snLCBiZWdpbiArIDEpCisgIGVuZHdoaWxlCisKKyAgbGV0IGNsb3NlID0gMAorICBsZXQgcHJldiA9IDAKKyAgbGV0IGVuZCA9IG1hdGNoZW5kKGxpbmUsICdeXHMqfS4qfScsIHByZXYpCisgIHdoaWxlIGVuZCA+IC0xCisgICAgbGV0IGJlZ2luID0gbWF0Y2gobGluZSwgJ3snLCBwcmV2ICsgMSkKKyAgICBpZiBiZWdpbiA8IDAgfHwgYmVnaW4gPiBwcmV2CisgICAgICBsZXQgY2xvc2UgPSBjbG9zZSArIDEKKyAgICBlbmRpZgorICAgIGxldCBwcmV2ID0gZW5kCisgICAgbGV0IGVuZCA9IG1hdGNoKGxpbmUsICd9JywgcHJldiArIDEpCisgIGVuZHdoaWxlCisKKyAgbGV0IHByZXYgPSAwCisgIGxldCBlbmQgPSBtYXRjaChsaW5lLCAnXScsIHByZXYpCisgIHdoaWxlIGVuZCA+IC0xCisgICAgbGV0IGJlZ2luID0gbWF0Y2gobGluZSwgJ1snLCBwcmV2ICsgMSkKKyAgICBpZiBiZWdpbiA8IDAgfHwgYmVnaW4gPiBwcmV2CisgICAgICBsZXQgY2xvc2UgPSBjbG9zZSArIDEKKyAgICBlbmRpZgorICAgIGxldCBwcmV2ID0gZW5kCisgICAgbGV0IGVuZCA9IG1hdGNoKGxpbmUsICddJywgcHJldiArIDEpCisgIGVuZHdoaWxlCisKKyAgbGV0IGluZCA9IGluZCArIChvcGVuIC0gY2xvc2UpICogJnN3CisKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKHY6bG51bSkKKworICBsZXQgY2xvc2UgPSAwCisgIGxldCBwcmV2ID0gMAorICBsZXQgZW5kID0gbWF0Y2gobGluZSwgJ30nLCBwcmV2KQorICB3aGlsZSBlbmQgPiAtMQorICAgIGxldCBiZWdpbiA9IG1hdGNoKGxpbmUsICd7JywgcHJldiArIDEpCisgICAgaWYgYmVnaW4gPCAwIHx8IGJlZ2luID4gcHJldgorICAgICAgbGV0IGNsb3NlID0gY2xvc2UgKyAxCisgICAgZW5kaWYKKyAgICBsZXQgcHJldiA9IGVuZAorICAgIGxldCBlbmQgPSBtYXRjaChsaW5lLCAnfScsIHByZXYgKyAxKQorICBlbmR3aGlsZQorCisgIGxldCBpbmQgPSBpbmQgLSBjbG9zZSAqICZzdworCisgIHJldHVybiBpbmQgPj0gMCA/IGluZCA6IDAKK2VuZGZ1bmN0aW9uCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3Rjc2gudmltIGIvcnVudGltZS9pbmRlbnQvdGNzaC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk0MDNjOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3Rjc2gudmltCkBAIC0wLDAgKzEsNTEgQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOgkJQy1zaGVsbCAodGNzaCkKKyIgTWFpbnRhaW5vcjoJCUdhdXRhbSBJeWVyIDxnYXV0YW1AbWF0aC51Y2hpY2Fnby5lZHU+CisiIExhc3QgTW9kaWZpZWQ6CVdlZCAwNCBGZWIgMjAwNCAwNDozNjowNyBQTSBDU1QKKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgICAgZmluaXNoCitlbmRpZgorCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCitzZXRsb2NhbCBpbmRlbnRleHByPVRjc2hHZXRJbmRlbnQoKQorc2V0bG9jYWwgaW5kZW50a2V5cys9ZSwwPWVuZCwwPWVuZHN3LCo8cmV0dXJuPiBpbmRlbnRrZXlzLT0weywwfSwwKSw6LDAjCisKKyIgT25seSBkZWZpbmUgdGhlIGZ1bmN0aW9uIG9uY2UuCitpZiBleGlzdHMoIipUY3NoR2V0SW5kZW50IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK3NldCBjcG9wdGlvbnMtPUMKKworZnVuY3Rpb24gVGNzaEdldEluZGVudCgpCisgICAgIiBGaW5kIGEgbm9uLWJsYW5rIGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZS4KKyAgICBsZXQgbG51bSA9IHByZXZub25ibGFuayh2OmxudW0gLSAxKQorCisgICAgIiBIaXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCB1c2UgemVybyBpbmRlbnQuCisgICAgaWYgbG51bSA9PSAwCisJcmV0dXJuIDAKKyAgICBlbmRpZgorCisgICAgIiBBZGQgaW5kZW50IGlmIHByZXZpb3VzIGxpbmUgYmVnaW5zIHdpdGggd2hpbGUgb3IgZm9yZWFjaAorICAgICIgT1IgbGluZSBlbmRzIHdpdGggY2FzZSA8c3RyPjosIGRlZmF1bHQ6LCBlbHNlLCB0aGVuIG9yIFwKKyAgICBsZXQgaW5kID0gaW5kZW50KGxudW0pCisgICAgbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCisgICAgaWYgbGluZSA9fiAnXHZeXHMqJSh3aGlsZXxmb3JlYWNoKT58XlxzKiUoY2FzZVxzLio6fGRlZmF1bHQ6fGVsc2UpXHMqJHwlKDx0aGVufFxcKSQnCisJbGV0IGluZCA9IGluZCArICZzdworICAgIGVuZGlmCisKKyAgICBpZiBsaW5lID1+ICdcdl5ccypicmVha3N3PicKKwlsZXQgaW5kID0gaW5kIC0gJnN3CisgICAgZW5kaWYKKworICAgICIgU3VidHJhY3QgaW5kZW50IGlmIGN1cnJlbnQgbGluZSBoYXMgb24gZW5kLCBlbmRpZiwgY2FzZSBjb21tYW5kcworICAgIGxldCBsaW5lID0gZ2V0bGluZSh2OmxudW0pCisgICAgaWYgbGluZSA9fiAnXHZeXHMqJShlbHNlfGVuZHxlbmRpZilccyokJworCWxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICBlbmRpZgorCisgICAgcmV0dXJuIGluZAorZW5kZnVuY3Rpb24KZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3RpbGRlLnZpbSBiL3J1bnRpbWUvaW5kZW50L3RpbGRlLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmRjZmUwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvdGlsZGUudmltCkBAIC0wLDAgKzEsMzYgQEAKKyJEZXNjcmlwdGlvbjogSW5kZW50IHNjaGVtZSBmb3IgdGhlIHRpbGRlIHdlYmxhbmd1YWdlCisiQXV0aG9yOiBUb2JpYXMgUnVuZHN0cvZtIDx0b2JpQHRvYmkubnU+CisiVVJMOiBodHRwOi8vdGlsZGUudGlsZGVzb2Z0d2FyZS5uZXQKKyJMYXN0IENoYW5nZTogTWF5ICA4IDA5OjE1OjA5IENFU1QgMjAwMgorCitpZiBleGlzdHMgKCJiOmRpZF9pbmRlbnQiKQorCWZpbmlzaAorZW5kaWYKKworbGV0IGI6ZGlkX2luZGVudCA9IDEKKworc2V0bG9jYWwgYXV0b2luZGVudAorc2V0bG9jYWwgaW5kZW50ZXhwcj1HZXRUaWxkZUluZGVudCh2OmxudW0pCitzZXRsb2NhbCBpbmRlbnRrZXlzPW8sTywpCisKK2lmIGV4aXN0cygiKkdldFRpbGRlSW5kZW50IikKKwlmaW5pc2gKK2VuZGlmCisKK2Z1bmN0aW9uIEdldFRpbGRlSW5kZW50KGxudW0pCisJbGV0IHBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bS0xKQorCisJaWYgcGxudW0gPT0gMAorCQlyZXR1cm4gMAorCWVuZGlmCisKKwlpZiBnZXRsaW5lKHY6bG51bSkgPX4gJ15ccypcflwoZW5kaWZcfGVsc2VcfGVsc2VpZlx8ZW5kXClcPicKKwkJcmV0dXJuIGluZGVudCh2OmxudW0pIC0gJnN3CisJZW5kaWYKKworCWlmIGdldGxpbmUocGxudW0pID1+ICdeXHMqXH5cKGlmXHxmb3JlYWNoXHxmb3JlYWNoX3Jvd1x8eG1sX2xvb3BcfGZpbGVfbG9vcFx8ZmlsZV93cml0ZVx8ZmlsZV9hcHBlbmRcfGltYXBfbG9vcHNlY3Rpb25zXHxpbWFwX2luZGV4XHxpbWFwX2xpc3RcfGxkYXBfc2VhcmNoXHxwb3N0X2xvb3BhbGxcfHBvc3RfbG9vcFx8ZmlsZV9sb29wXHxzcWxfbG9vcF9udW1cfHNxbF9kYm1zc2VsZWN0XHxzZWFyY2hcfHNxbF9sb29wXHxwb3N0XHxmb3JcfGZ1bmN0aW9uX2RlZmluZVx8c2lsZW50XHx3aGlsZVx8c2V0dmFsYmlnXHxtYWlsX2NyZWF0ZVx8c3lzdGVtcGlwZVx8bWFpbF9zZW5kXHxkdWFsXHxlbHNlaWZcfGVsc2VcKVw+JworCQlyZXR1cm4gaW5kZW50KHBsbnVtKSArICZzdworCWVsc2UKKwkJcmV0dXJuIC0xCisJZW5kaWYKK2VuZGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC92Yi52aW0gYi9ydW50aW1lL2luZGVudC92Yi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1ZTRkYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3ZiLnZpbQpAQCAtMCwwICsxLDcyIEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJVmlzdWFsQmFzaWMgKGZ0PXZiKSAvIEJhc2ljIChmdD1iYXNpYykgLyBTYXhCYXNpYyAoZnQ9dmIpCisiIEF1dGhvcjoJSm9oYW5uZXMgWmVsbG5lciA8am9oYW5uZXNAemVsbG5lci5vcmc+CisiIExhc3QgQ2hhbmdlOglUdWUsIDI3IEFwciAyMDA0IDE0OjU0OjU5IENFU1QKKworaWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICAgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9VmJHZXRJbmRlbnQodjpsbnVtKQorc2V0bG9jYWwgaW5kZW50a2V5cyYKK3NldGxvY2FsIGluZGVudGtleXMrPT1+ZWxzZSw9fmVsc2VpZiw9fmVuZCw9fndlbmQsPX5jYXNlLD1+bmV4dCw9fnNlbGVjdCx+PWxvb3AsPDo+CisKKyIgT25seSBkZWZpbmUgdGhlIGZ1bmN0aW9uIG9uY2UuCitpZiBleGlzdHMoIipWYkdldEluZGVudCIpCisgICAgZmluaXNoCitlbmRpZgorCitmdW4hIFZiR2V0SW5kZW50KGxudW0pCisgICAgIiBsYWJlbHMgYW5kIHByZXByb2Nlc3NvciBnZXQgemVybyBpbmRlbnQgaW1tZWRpYXRlbHkKKyAgICBsZXQgdGhpc19saW5lID0gZ2V0bGluZShhOmxudW0pCisgICAgbGV0IExBQkVMU19PUl9QUkVQUk9DID0gJ15ccypcKFw8XGtcK1w+OlxzKiRcfCMuKlwpJworICAgIGlmIHRoaXNfbGluZSA9fj8gTEFCRUxTX09SX1BSRVBST0MKKwlyZXR1cm4gMAorICAgIGVuZGlmCisKKyAgICAiIEZpbmQgYSBub24tYmxhbmsgbGluZSBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorICAgICIgU2tpcCBvdmVyIGxhYmVscyBhbmQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCisgICAgbGV0IGxudW0gPSBhOmxudW0KKyAgICB3aGlsZSBsbnVtID4gMAorCWxldCBsbnVtID0gcHJldm5vbmJsYW5rKGxudW0gLSAxKQorCWxldCBwcmV2aW91c19saW5lID0gZ2V0bGluZShsbnVtKQorCWlmIHByZXZpb3VzX2xpbmUgIX4/IExBQkVMU19PUl9QUkVQUk9DCisJICAgIGJyZWFrCisJZW5kaWYKKyAgICBlbmR3aGlsZQorCisgICAgIiBIaXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCB1c2UgemVybyBpbmRlbnQuCisgICAgaWYgbG51bSA9PSAwCisJcmV0dXJuIDAKKyAgICBlbmRpZgorCisgICAgbGV0IGluZCA9IGluZGVudChsbnVtKQorCisgICAgIiBBZGQKKyAgICBpZiBwcmV2aW91c19saW5lID1+PyAnXlxzKlw8XChiZWdpblx8XCUoXCUocHJpdmF0ZVx8cHVibGljXHxmcmllbmRcKVxzXCtcKVw9XCUoZnVuY3Rpb25cfHN1Ylx8cHJvcGVydHlcKVx8c2VsZWN0XHxjYXNlXHxkZWZhdWx0XHxpZlw+Llx7LX1cPHRoZW5cPlxzKiRcfGVsc2VcfGVsc2VpZlx8ZG9cfGZvclx8d2hpbGVcfGVudW1cfHdpdGhcKVw+JworCWxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICBlbmRpZgorCisgICAgIiBTdWJ0cmFjdAorICAgIGlmIHRoaXNfbGluZSA9fj8gJ15ccypcPGVuZFw+XHNcK1w8c2VsZWN0XD4nCisJaWYgcHJldmlvdXNfbGluZSAhfj8gJ15ccypcPHNlbGVjdFw+JworCSAgICBsZXQgaW5kID0gaW5kIC0gMiAqICZzdworCWVsc2UKKwkgICAgIiB0aGlzIGNhc2UgaXMgZm9yIGFuIGVtcHR5ICdzZWxlY3QnIC0tICdlbmQgc2VsZWN0JworCSAgICAiICh3L28gYW55IGNhc2Ugc3RhdGVtZW50cykgbGlrZToKKwkgICAgIgorCSAgICAiIHNlbGVjdCBjYXNlIHJlYWR3cml0ZQorCSAgICAiIGVuZCBzZWxlY3QKKwkgICAgbGV0IGluZCA9IGluZCAtICZzdworCWVuZGlmCisgICAgZWxzZWlmIHRoaXNfbGluZSA9fj8gJ15ccypcPFwoZW5kXHxlbHNlXHx1bnRpbFx8bG9vcFx8bmV4dFx8d2VuZFwpXD4nCisJbGV0IGluZCA9IGluZCAtICZzdworICAgIGVsc2VpZiB0aGlzX2xpbmUgPX4/ICdeXHMqXDxcKGNhc2VcfGRlZmF1bHRcKVw+JworCWlmIHByZXZpb3VzX2xpbmUgIX4/ICdeXHMqXDxzZWxlY3RcPicKKwkgICAgbGV0IGluZCA9IGluZCAtICZzdworCWVuZGlmCisgICAgZW5kaWYKKworICAgIHJldHVybiBpbmQKK2VuZGZ1bgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvdmVyaWxvZy52aW0gYi9ydW50aW1lL2luZGVudC92ZXJpbG9nLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGM4YzVmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvdmVyaWxvZy52aW0KQEAgLTAsMCArMSwyMTkgQEAKKyIgTGFuZ3VhZ2U6ICAgICBWZXJpbG9nIEhETAorIiBNYWludGFpbmVyOglDaGloLVRzdW4gSHVhbmcgPGN0aHVhbmdAbGFyYy5lZS5udGh1LmVkdS50dz4KKyIgTGFzdCBDaGFuZ2U6CVdlZCBPY3QgMzEgMTY6MTM6MTEgQ1NUIDIwMDEKKyIgVVJMOgkJaHR0cDovL2xhcmMuZWUubnRodS5lZHUudHcvfmN0aHVhbmcvdmltL2luZGVudC92ZXJpbG9nLnZpbQorIgorIiBDcmVkaXRzOgorIiAgIFN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgYnVnIHJlcG9ydHMgYnkKKyIgICAgIExlbyBCdXRsZXJvIDxsYnV0bGVyQGJyb2NhZGUuY29tPgorIgorIiBCdWZmZXIgVmFyaWFibGVzOgorIiAgICAgYjp2ZXJpbG9nX2luZGVudF9tb2R1bGVzIDogaW5kZW50aW5nIGFmdGVyIHRoZSBkZWNsYXJhdGlvbgorIgkJCQkgb2YgbW9kdWxlIGJsb2NrcworIiAgICAgYjp2ZXJpbG9nX2luZGVudF93aWR0aCAgIDogaW5kZW50aW5nIHdpZHRoCisiICAgICBiOnZlcmlsb2dfaW5kZW50X3ZlcmJvc2UgOiB2ZXJib3NlIHRvIGVhY2ggaW5kZW50aW5nCisiCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCitzZXRsb2NhbCBpbmRlbnRleHByPUdldFZlcmlsb2dJbmRlbnQoKQorc2V0bG9jYWwgaW5kZW50a2V5cz0hXkYsbyxPLDApLD1iZWdpbiw9ZW5kLD1qb2luLD1lbmRjYXNlCitzZXRsb2NhbCBpbmRlbnRrZXlzKz09ZW5kbW9kdWxlLD1lbmRmdW5jdGlvbiw9ZW5kdGFzayw9ZW5kc3BlY2lmeQorc2V0bG9jYWwgaW5kZW50a2V5cys9PWBlbHNlLD1gZW5kaWYKKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldFZlcmlsb2dJbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK3NldCBjcG8tPUMKKworZnVuY3Rpb24gR2V0VmVyaWxvZ0luZGVudCgpCisKKyAgaWYgZXhpc3RzKCdiOnZlcmlsb2dfaW5kZW50X3dpZHRoJykKKyAgICBsZXQgb2Zmc2V0ID0gYjp2ZXJpbG9nX2luZGVudF93aWR0aAorICBlbHNlCisgICAgbGV0IG9mZnNldCA9ICZzdworICBlbmRpZgorICBpZiBleGlzdHMoJ2I6dmVyaWxvZ19pbmRlbnRfbW9kdWxlcycpCisgICAgbGV0IGluZGVudF9tb2R1bGVzID0gb2Zmc2V0CisgIGVsc2UKKyAgICBsZXQgaW5kZW50X21vZHVsZXMgPSAwCisgIGVuZGlmCisKKyAgIiBGaW5kIGEgbm9uLWJsYW5rIGxpbmUgYWJvdmUgdGhlIGN1cnJlbnQgbGluZS4KKyAgbGV0IGxudW0gPSBwcmV2bm9uYmxhbmsodjpsbnVtIC0gMSkKKworICAiIEF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZSB1c2UgemVybyBpbmRlbnQuCisgIGlmIGxudW0gPT0gMAorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgbGV0IGxudW0yID0gcHJldm5vbmJsYW5rKGxudW0gLSAxKQorICBsZXQgY3Vycl9saW5lICA9IGdldGxpbmUodjpsbnVtKQorICBsZXQgbGFzdF9saW5lICA9IGdldGxpbmUobG51bSkKKyAgbGV0IGxhc3RfbGluZTIgPSBnZXRsaW5lKGxudW0yKQorICBsZXQgaW5kICA9IGluZGVudChsbnVtKQorICBsZXQgaW5kMiA9IGluZGVudChsbnVtIC0gMSkKKyAgbGV0IG9mZnNldF9jb21tZW50MSA9IDEKKyAgIiBEZWZpbmUgdGhlIGNvbmRpdGlvbiBvZiBhbiBvcGVuIHN0YXRlbWVudAorICAiICAgRXhjbHVkZSB0aGUgbWF0Y2ggb2YgLy8sIC8qIG9yICovCisgIGxldCB2bG9nX29wZW5zdGF0ID0gJ1woXDxvclw+XHxcKFsqL11cKVxAPCFbKigsez48Ky0vJV4mfCE9PzpdXChbKi9dXClcQCFcKScKKyAgIiBEZWZpbmUgdGhlIGNvbmRpdGlvbiB3aGVuIHRoZSBzdGF0ZW1lbnQgZW5kcyB3aXRoIGEgb25lLWxpbmUgY29tbWVudAorICBsZXQgdmxvZ19jb21tZW50ID0gJ1woLy8uKlx8L1wqLipcKi9ccypcKScKKyAgaWYgZXhpc3RzKCdiOnZlcmlsb2dfaW5kZW50X3ZlcmJvc2UnKQorICAgIGxldCB2dmVyYl9zdHIgPSAnSU5ERU5UIFZFUkJPU0U6JworICAgIGxldCB2dmVyYiA9IDEKKyAgZWxzZQorICAgIGxldCB2dmVyYiA9IDAKKyAgZW5kaWYKKworICAiIEluZGVudCBhY2NvZGluZyB0byBsYXN0IGxpbmUKKyAgIiBFbmQgb2YgbXVsdGlwbGUtbGluZSBjb21tZW50CisgIGlmIGxhc3RfbGluZSA9fiAnXCovXHMqJCcgJiYgbGFzdF9saW5lICF+ICcvXCouXHstfVwqLycKKyAgICBsZXQgaW5kID0gaW5kIC0gb2Zmc2V0X2NvbW1lbnQxCisgICAgaWYgdnZlcmIKKyAgICAgIGVjaG8gdnZlcmJfc3RyICJEZS1pbmRlbnQgYWZ0ZXIgYSBtdWx0aXBsZS1saW5lIGNvbW1lbnQuIgorICAgIGVuZGlmCisKKyAgIiBJbmRlbnQgYWZ0ZXIgaWYvZWxzZS9mb3IvY2FzZS9hbHdheXMvaW5pdGlhbC9zcGVjaWZ5L2ZvcmsgYmxvY2tzCisgIGVsc2VpZiBsYXN0X2xpbmUgPX4gJ2BcQDwhXDxcKGlmXHxlbHNlXClcPicgfHwKKyAgICBcIGxhc3RfbGluZSA9fiAnXlxzKlw8XChmb3JcfGNhc2VcJVtbenhdXVwpXD4nIHx8CisgICAgXCBsYXN0X2xpbmUgPX4gJ15ccypcPFwoYWx3YXlzXHxpbml0aWFsXClcPicgfHwKKyAgICBcIGxhc3RfbGluZSA9fiAnXlxzKlw8XChzcGVjaWZ5XHxmb3JrXClcPicKKyAgICBpZiBsYXN0X2xpbmUgIX4gJ1woO1x8XDxlbmRcPlwpXHMqJyAuIHZsb2dfY29tbWVudCAuICcqJCcgfHwKKyAgICAgIFwgbGFzdF9saW5lID1+ICdcKC8vXHwvXCpcKS4qXCg7XHxcPGVuZFw+XClccyonIC4gdmxvZ19jb21tZW50IC4gJyokJworICAgICAgbGV0IGluZCA9IGluZCArIG9mZnNldAorICAgICAgaWYgdnZlcmIgfCBlY2hvIHZ2ZXJiX3N0ciAiSW5kZW50IGFmdGVyIGEgYmxvY2sgc3RhdGVtZW50LiIgfCBlbmRpZgorICAgIGVuZGlmCisgICIgSW5kZW50IGFmdGVyIGZ1bmN0aW9uL3Rhc2sgYmxvY2tzCisgIGVsc2VpZiBsYXN0X2xpbmUgPX4gJ15ccypcPFwoZnVuY3Rpb25cfHRhc2tcKVw+JworICAgIGlmIGxhc3RfbGluZSAhfiAnXDxlbmRcPlxzKicgLiB2bG9nX2NvbW1lbnQgLiAnKiQnIHx8CisgICAgICBcIGxhc3RfbGluZSA9fiAnXCgvL1x8L1wqXCkuKlwoO1x8XDxlbmRcPlwpXHMqJyAuIHZsb2dfY29tbWVudCAuICcqJCcKKyAgICAgIGxldCBpbmQgPSBpbmQgKyBvZmZzZXQKKyAgICAgIGlmIHZ2ZXJiCisJZWNobyB2dmVyYl9zdHIgIkluZGVudCBhZnRlciBmdW5jdGlvbi90YXNrIGJsb2NrIHN0YXRlbWVudC4iCisgICAgICBlbmRpZgorICAgIGVuZGlmCisKKyAgIiBJbmRlbnQgYWZ0ZXIgbW9kdWxlL2Z1bmN0aW9uL3Rhc2svc3BlY2lmeS9mb3JrIGJsb2NrcworICBlbHNlaWYgbGFzdF9saW5lID1+ICdeXHMqXDxtb2R1bGVcPicKKyAgICBsZXQgaW5kID0gaW5kICsgaW5kZW50X21vZHVsZXMKKyAgICBpZiB2dmVyYiAmJiBpbmRlbnRfbW9kdWxlcworICAgICAgZWNobyB2dmVyYl9zdHIgIkluZGVudCBhZnRlciBtb2R1bGUgc3RhdGVtZW50LiIKKyAgICBlbmRpZgorICAgIGlmIGxhc3RfbGluZSA9fiAnWygsXVxzKicgLiB2bG9nX2NvbW1lbnQgLiAnKiQnICYmCisgICAgICBcIGxhc3RfbGluZSAhfiAnXCgvL1x8L1wqXCkuKlsoLF1ccyonIC4gdmxvZ19jb21tZW50IC4gJyokJworICAgICAgbGV0IGluZCA9IGluZCArIG9mZnNldAorICAgICAgaWYgdnZlcmIKKwllY2hvIHZ2ZXJiX3N0ciAiSW5kZW50IGFmdGVyIGEgbXVsdGlwbGUtbGluZSBtb2R1bGUgc3RhdGVtZW50LiIKKyAgICAgIGVuZGlmCisgICAgZW5kaWYKKworICAiIEluZGVudCBhZnRlciBhICdiZWdpbicgc3RhdGVtZW50CisgIGVsc2VpZiBsYXN0X2xpbmUgPX4gJ1woXDxiZWdpblw+XClcKFxzKjpccypcd1wrXCkqJyAuIHZsb2dfY29tbWVudCAuICcqJCcgJiYKKyAgICBcIGxhc3RfbGluZSAhfiAnXCgvL1x8L1wqXCkuKlwoXDxiZWdpblw+XCknICYmCisgICAgXCAoIGxhc3RfbGluZTIgIX4gdmxvZ19vcGVuc3RhdCAuICdccyonIC4gdmxvZ19jb21tZW50IC4gJyokJyB8fAorICAgIFwgbGFzdF9saW5lMiA9fiAnXlxzKltePSFdXCtccyo6XHMqJyAuIHZsb2dfY29tbWVudCAuICcqJCcgKQorICAgIGxldCBpbmQgPSBpbmQgKyBvZmZzZXQKKyAgICBpZiB2dmVyYiB8IGVjaG8gdnZlcmJfc3RyICJJbmRlbnQgYWZ0ZXIgYmVnaW4gc3RhdGVtZW50LiIgfCBlbmRpZgorCisgICIgRGUtaW5kZW50IGZvciB0aGUgZW5kIG9mIG9uZS1saW5lIGJsb2NrCisgIGVsc2VpZiAoIGxhc3RfbGluZSAhfiAnXDxiZWdpblw+JyB8fAorICAgIFwgbGFzdF9saW5lID1+ICdcKC8vXHwvXCpcKS4qXDxiZWdpblw+JyApICYmCisgICAgXCBsYXN0X2xpbmUyID1+ICdcPFwoYFxAPCFpZlx8YFxAPCFlbHNlXHxmb3JcfGFsd2F5c1x8aW5pdGlhbFwpXD4uKicgLgorICAgICAgXCB2bG9nX2NvbW1lbnQgLiAnKiQnICYmCisgICAgXCBsYXN0X2xpbmUyICF+CisgICAgICBcICdcKC8vXHwvXCpcKS4qXDxcKGBcQDwhaWZcfGBcQDwhZWxzZVx8Zm9yXHxhbHdheXNcfGluaXRpYWxcKVw+JyAmJgorICAgIFwgbGFzdF9saW5lMiAhfiB2bG9nX29wZW5zdGF0IC4gJ1xzKicgLiB2bG9nX2NvbW1lbnQgLiAnKiQnICYmCisgICAgXCAoIGxhc3RfbGluZTIgIX4gJ1w8YmVnaW5cPicgfHwKKyAgICBcIGxhc3RfbGluZTIgPX4gJ1woLy9cfC9cKlwpLipcPGJlZ2luXD4nICkKKyAgICBsZXQgaW5kID0gaW5kIC0gb2Zmc2V0CisgICAgaWYgdnZlcmIKKyAgICAgIGVjaG8gdnZlcmJfc3RyICJEZS1pbmRlbnQgYWZ0ZXIgdGhlIGVuZCBvZiBvbmUtbGluZSBzdGF0ZW1lbnQuIgorICAgIGVuZGlmCisKKyAgICAiIE11bHRpcGxlLWxpbmUgc3RhdGVtZW50IChpbmNsdWRpbmcgY2FzZSBzdGF0ZW1lbnQpCisgICAgIiBPcGVuIHN0YXRlbWVudAorICAgICIgICBJZGVudCB0aGUgZmlyc3Qgb3BlbiBsaW5lCisgICAgZWxzZWlmICBsYXN0X2xpbmUgPX4gdmxvZ19vcGVuc3RhdCAuICdccyonIC4gdmxvZ19jb21tZW50IC4gJyokJyAmJgorICAgICAgXCBsYXN0X2xpbmUgIX4gJ1woLy9cfC9cKlwpLionIC4gdmxvZ19vcGVuc3RhdCAuICdccyokJyAmJgorICAgICAgXCBsYXN0X2xpbmUyICF+IHZsb2dfb3BlbnN0YXQgLiAnXHMqJyAuIHZsb2dfY29tbWVudCAuICcqJCcKKyAgICAgIGxldCBpbmQgPSBpbmQgKyBvZmZzZXQKKyAgICAgIGlmIHZ2ZXJiIHwgZWNobyB2dmVyYl9zdHIgIkluZGVudCBhZnRlciBhbiBvcGVuIHN0YXRlbWVudC4iIHwgZW5kaWYKKworICAgICIgQ2xvc2Ugc3RhdGVtZW50CisgICAgIiAgIERlLWluZGVudCBmb3IgYW4gb3B0aW9uYWwgY2xvc2UgcGFyZW50aGVzaXMgYW5kIGEgc2VtaWNvbG9uLCBhbmQgb25seQorICAgICIgICBpZiB0aGVyZSBleGlzdHMgcHJlY2VkZW50IG5vbi13aGl0ZXNwYWNlIGNoYXIKKyAgICBlbHNlaWYgbGFzdF9saW5lID1+ICcpKlxzKjtccyonIC4gdmxvZ19jb21tZW50IC4gJyokJyAmJgorICAgICAgXCBsYXN0X2xpbmUgIX4gJ15ccyopKlxzKjtccyonIC4gdmxvZ19jb21tZW50IC4gJyokJyAmJgorICAgICAgXCBsYXN0X2xpbmUgIX4gJ1woLy9cfC9cKlwpLipcUykqXHMqO1xzKicgLiB2bG9nX2NvbW1lbnQgLiAnKiQnICYmCisgICAgICBcICggbGFzdF9saW5lMiA9fiB2bG9nX29wZW5zdGF0IC4gJ1xzKicgLiB2bG9nX2NvbW1lbnQgLiAnKiQnICYmCisgICAgICBcIGxhc3RfbGluZTIgIX4gJztccyovLy4qJCcpICYmCisgICAgICBcIGxhc3RfbGluZTIgIX4gJ15ccyonIC4gdmxvZ19jb21tZW50IC4gJyQnCisgICAgICBsZXQgaW5kID0gaW5kIC0gb2Zmc2V0CisgICAgICBpZiB2dmVyYiB8IGVjaG8gdnZlcmJfc3RyICJEZS1pbmRlbnQgYWZ0ZXIgYSBjbG9zZSBzdGF0ZW1lbnQuIiB8IGVuZGlmCisKKyAgIiBgaWZkZWYgYW5kIGBlbHNlCisgIGVsc2VpZiBsYXN0X2xpbmUgPX4gJ15ccypgXDxcKGlmZGVmXHxlbHNlXClcPicKKyAgICBsZXQgaW5kID0gaW5kICsgb2Zmc2V0CisgICAgaWYgdnZlcmIKKyAgICAgIGVjaG8gdnZlcmJfc3RyICJJbmRlbnQgYWZ0ZXIgYSBgaWZkZWYgb3IgYGVsc2Ugc3RhdGVtZW50LiIKKyAgICBlbmRpZgorCisgIGVuZGlmCisKKyAgIiBSZS1pbmRlbnQgY3VycmVudCBsaW5lCisKKyAgIiBEZS1pbmRlbnQgb24gdGhlIGVuZCBvZiB0aGUgYmxvY2sKKyAgIiBqb2luL2VuZC9lbmRjYXNlL2VuZGZ1bmN0aW9uL2VuZHRhc2svZW5kc3BlY2lmeQorICBpZiBjdXJyX2xpbmUgPX4gJ15ccypcPFwoam9pblx8ZW5kXHxlbmRjYXNlXClcPicgfHwKKyAgICBcIGN1cnJfbGluZSA9fiAnXlxzKlw8XChlbmRmdW5jdGlvblx8ZW5kdGFza1x8ZW5kc3BlY2lmeVwpXD4nCisgICAgbGV0IGluZCA9IGluZCAtIG9mZnNldAorICAgIGlmIHZ2ZXJiIHwgZWNobyB2dmVyYl9zdHIgIkRlLWluZGVudCB0aGUgZW5kIG9mIGEgYmxvY2suIiB8IGVuZGlmCisgIGVsc2VpZiBjdXJyX2xpbmUgPX4gJ15ccypcPGVuZG1vZHVsZVw+JworICAgIGxldCBpbmQgPSBpbmQgLSBpbmRlbnRfbW9kdWxlcworICAgIGlmIHZ2ZXJiICYmIGluZGVudF9tb2R1bGVzCisgICAgICBlY2hvIHZ2ZXJiX3N0ciAiRGUtaW5kZW50IHRoZSBlbmQgb2YgYSBtb2R1bGUuIgorICAgIGVuZGlmCisKKyAgIiBEZS1pbmRlbnQgb24gYSBzdGFuZC1hbG9uZSAnYmVnaW4nCisgIGVsc2VpZiBjdXJyX2xpbmUgPX4gJ15ccypcPGJlZ2luXD4nCisgICAgaWYgbGFzdF9saW5lICF+ICdeXHMqXDxcKGZ1bmN0aW9uXHx0YXNrXHxzcGVjaWZ5XHxtb2R1bGVcKVw+JyAmJgorICAgICAgXCBsYXN0X2xpbmUgIX4gJ15ccypcKCkqXHMqO1x8KVwrXClccyonIC4gdmxvZ19jb21tZW50IC4gJyokJyAmJgorICAgICAgXCAoIGxhc3RfbGluZSA9fgorCVwgJ1w8XChgXEA8IWlmXHxgXEA8IWVsc2VcfGZvclx8Y2FzZVwlW1t6eF1dXHxhbHdheXNcfGluaXRpYWxcKVw+JyB8fAorICAgICAgXCBsYXN0X2xpbmUgPX4gJylccyonIC4gdmxvZ19jb21tZW50IC4gJyokJyB8fAorICAgICAgXCBsYXN0X2xpbmUgPX4gdmxvZ19vcGVuc3RhdCAuICdccyonIC4gdmxvZ19jb21tZW50IC4gJyokJyApCisgICAgICBsZXQgaW5kID0gaW5kIC0gb2Zmc2V0CisgICAgICBpZiB2dmVyYgorCWVjaG8gdnZlcmJfc3RyICJEZS1pbmRlbnQgYSBzdGFuZCBhbG9uZSBiZWdpbiBzdGF0ZW1lbnQuIgorICAgICAgZW5kaWYKKyAgICBlbmRpZgorCisgICIgRGUtaW5kZW50IGFmdGVyIHRoZSBlbmQgb2YgbXVsdGlwbGUtbGluZSBzdGF0ZW1lbnQKKyAgZWxzZWlmIGN1cnJfbGluZSA9fiAnXlxzKiknICYmCisgICAgXCAoIGxhc3RfbGluZSA9fiB2bG9nX29wZW5zdGF0IC4gJ1xzKicgLiB2bG9nX2NvbW1lbnQgLiAnKiQnIHx8CisgICAgXCBsYXN0X2xpbmUgIX4gdmxvZ19vcGVuc3RhdCAuICdccyonIC4gdmxvZ19jb21tZW50IC4gJyokJyAmJgorICAgIFwgbGFzdF9saW5lMiA9fiB2bG9nX29wZW5zdGF0IC4gJ1xzKicgLiB2bG9nX2NvbW1lbnQgLiAnKiQnICkKKyAgICBsZXQgaW5kID0gaW5kIC0gb2Zmc2V0CisgICAgaWYgdnZlcmIKKyAgICAgIGVjaG8gdnZlcmJfc3RyICJEZS1pbmRlbnQgdGhlIGVuZCBvZiBhIG11bHRpcGxlIHN0YXRlbWVudC4iCisgICAgZW5kaWYKKworICAiIERlLWluZGVudCBgZWxzZSBhbmQgYGVuZGlmCisgIGVsc2VpZiBjdXJyX2xpbmUgPX4gJ15ccypgXDxcKGVsc2VcfGVuZGlmXClcPicKKyAgICBsZXQgaW5kID0gaW5kIC0gb2Zmc2V0CisgICAgaWYgdnZlcmIgfCBlY2hvIHZ2ZXJiX3N0ciAiRGUtaW5kZW50IGBlbHNlIGFuZCBgZW5kaWYgc3RhdGVtZW50LiIgfCBlbmRpZgorCisgIGVuZGlmCisKKyAgIiBSZXR1cm4gdGhlIGluZGVudGlvbgorICByZXR1cm4gaW5kCitlbmRmdW5jdGlvbgorCisiIHZpbTpzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC92aW0udmltIGIvcnVudGltZS9pbmRlbnQvdmltLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGU3Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvdmltLnZpbQpAQCAtMCwwICsxLDY1IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJVmltIHNjcmlwdAorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMjUKKworIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCitpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0VmltSW5kZW50KCkKK3NldGxvY2FsIGluZGVudGtleXMrPT1lbmQsPWVsc2UsPWNhdCw9ZmluYSw9RU5ELDBcXAorCisiIE9ubHkgZGVmaW5lIHRoZSBmdW5jdGlvbiBvbmNlLgoraWYgZXhpc3RzKCIqR2V0VmltSW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCitmdW5jdGlvbiBHZXRWaW1JbmRlbnQoKQorICAiIEZpbmQgYSBub24tYmxhbmsgbGluZSBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorICBsZXQgbG51bSA9IHByZXZub25ibGFuayh2OmxudW0gLSAxKQorCisgICIgSWYgdGhlIGN1cnJlbnQgbGluZSBkb2Vzbid0IHN0YXJ0IHdpdGggJ1wnIGFuZCBiZWxvdyBhIGxpbmUgdGhhdCBzdGFydHMKKyAgIiB3aXRoICdcJywgdXNlIHRoZSBpbmRlbnQgb2YgdGhlIGxpbmUgYWJvdmUgaXQuCisgIGlmIGdldGxpbmUodjpsbnVtKSAhfiAnXlxzKlxcJworICAgIHdoaWxlIGxudW0gPiAwICYmIGdldGxpbmUobG51bSkgPX4gJ15ccypcXCcKKyAgICAgIGxldCBsbnVtID0gbG51bSAtIDEKKyAgICBlbmR3aGlsZQorICBlbmRpZgorCisgICIgQXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIHVzZSB6ZXJvIGluZGVudC4KKyAgaWYgbG51bSA9PSAwCisgICAgcmV0dXJuIDAKKyAgZW5kaWYKKworICAiIEFkZCBhICdzaGlmdHdpZHRoJyBhZnRlciA6aWYsIDp3aGlsZSwgOnRyeSwgOmNhdGNoLCA6ZmluYWxseSwgOmZ1bmN0aW9uCisgICIgYW5kIDplbHNlLiAgQWRkIGl0IHRocmVlIHRpbWVzIGZvciBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAnXCcgYWZ0ZXIKKyAgIiBhIGxpbmUgdGhhdCBkb2Vzbid0LgorICBsZXQgaW5kID0gaW5kZW50KGxudW0pCisgIGlmIGdldGxpbmUodjpsbnVtKSA9fiAnXlxzKlxcJyAmJiB2OmxudW0gPiAxICYmIGdldGxpbmUobG51bSkgIX4gJ15ccypcXCcKKyAgICBsZXQgaW5kID0gaW5kICsgJnN3ICogMworICBlbHNlaWYgZ2V0bGluZShsbnVtKSA9fiAnXCheXHx8XClccypcKGlmXHx3aFwlW2lsZV1cfHRyeVx8Y2F0XCVbY2hdXHxmaW5hXCVbbGx5XVx8ZnVcJVtuY3Rpb25dXHxlbFwlW3NlaWZdXClcPicKKyAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgIGVsc2VpZiBnZXRsaW5lKGxudW0pID1+ICdeXHMqYXVnXCVbcm91cF0nICYmIGdldGxpbmUobG51bSkgIX4gJ15ccyphdWdcJVtyb3VwXVxzKiFcPVxzXCtFTkQnCisgICAgbGV0IGluZCA9IGluZCArICZzdworICBlbmRpZgorCisgICIgSWYgdGhlIHByZXZpb3VzIGxpbmUgY29udGFpbnMgYW4gImVuZCIgYWZ0ZXIgYSBwaXBlLCBidXQgbm90IGluIGFuICI6YXUiCisgICIgY29tbWFuZC4KKyAgaWYgZ2V0bGluZShsbnVtKSA9fiAnfFxzKlwoZW5lXEAhXCknICYmIGdldGxpbmUobG51bSkgIX4gJ15ccyphdVwlW3RvY21kXScKKyAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgIGVuZGlmCisKKworICAiIFN1YnRyYWN0IGEgJ3NoaWZ0d2lkdGgnIG9uIGEgOmVuZGlmLCA6ZW5kd2hpbGUsIDpjYXRjaCwgOmZpbmFsbHksIDplbmR0cnksCisgICIgOmVuZGZ1biwgOmVsc2UgYW5kIDphdWdyb3VwIEVORC4KKyAgaWYgZ2V0bGluZSh2OmxudW0pID1+ICdeXHMqXChlbmVcQCFcfGNhdFx8ZmluYVx8ZWxcfGF1Z1wlW3JvdXBdXHMqIVw9XHNcK0VORFwpJworICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgZW5kaWYKKworICByZXR1cm4gaW5kCitlbmRmdW5jdGlvbgorCisiIHZpbTpzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC94Zjg2Y29uZi52aW0gYi9ydW50aW1lL2luZGVudC94Zjg2Y29uZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkYjFiYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3hmODZjb25mLnZpbQpAQCAtMCwwICsxLDQyIEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJICAgIFhGcmVlODYgQ29uZmlndXJhdGlvbiBGaWxlCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9pbmRlbnQvcGNwL3hmODZjb25mLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA0LTI1CisiIGFyY2gtdGFnOgkgICAgOGE0MmY3YjYtNTA4OC00OWNmLWIxNWItMDc2OTZhOTFjMDE1CisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0WEY4NkNvbmZJbmRlbnQoKQorc2V0bG9jYWwgaW5kZW50a2V5cz0hXkYsbyxPLD1FbmQKKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldFhGODZDb25mSW5kZW50IikKKyAgZmluaXNoCitlbmRpZgorCitmdW5jdGlvbiBHZXRYRjg2Q29uZkluZGVudCgpCisgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKHY6bG51bSAtIDEpCisKKyAgaWYgbG51bSA9PSAwCisgICAgcmV0dXJuIDAKKyAgZW5kaWYKKworICBsZXQgaW5kID0gaW5kZW50KGxudW0pCisgIGxldCBsaW5lID0gZ2V0bGluZShsbnVtKQorCisgIGlmIGxpbmUgPX4/ICdeXHMqXChTdWJcKVw9U2VjdGlvbicKKyAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgIGVsc2VpZiBnZXRsaW5lKHY6bG51bSkgPX4/ICdeXHMqRW5kJworICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgZW5kaWYKKworICByZXR1cm4gaW5kCitlbmRmdW5jdGlvbgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC94aHRtbC52aW0gYi9ydW50aW1lL2luZGVudC94aHRtbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiZjZiNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3hodG1sLnZpbQpAQCAtMCwwICsxLDcgQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOglYSFRNTAorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiAoZm9yIG5vdykKKyIgTGFzdCBDaGFuZ2U6CTIwMDMgRmViIDA0CisKKyIgSGFuZGxlZCBsaWtlIEhUTUwgZm9yIG5vdy4KK3J1bnRpbWUhIGluZGVudC9odG1sLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQveG1sLnZpbSBiL3J1bnRpbWUvaW5kZW50L3htbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwOTgxYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3htbC52aW0KQEAgLTAsMCArMSw4OCBAQAorIiBMYW5ndWFnZToJeG1sCisiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgorIiBMYXN0IENoYW5nZToJVHVlLCAyNyBBcHIgMjAwNCAxNDo1NDo1OSBDRVNUCisiIE5vdGVzOgkxKSBkb2VzIG5vdCBpbmRlbnQgcHVyZSBub24teG1sIGNvZGUgKGUuZy4gZW1iZWRkZWQgc2NyaXB0cykKKyIJCTIpIHdpbGwgYmUgY29uZnVzZWQgYnkgdW5iYWxhbmNlZCB0YWdzIGluIGNvbW1lbnRzCisiCQlvciBDREFUQSBzZWN0aW9ucy4KKyIgVE9ETzoJCWltcGxlbWVudCBwcmUtbGlrZSB0YWdzLCBzZWUgeG1sX2luZGVudF9vcGVuIC8geG1sX2luZGVudF9jbG9zZQorCisiIE9ubHkgbG9hZCB0aGlzIGluZGVudCBmaWxlIHdoZW4gbm8gb3RoZXIgd2FzIGxvYWRlZC4KK2lmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKKyAgICBmaW5pc2gKK2VuZGlmCitsZXQgYjpkaWRfaW5kZW50ID0gMQorCisiIFstLSBsb2NhbCBzZXR0aW5ncyAobXVzdCBjb21lIGJlZm9yZSBhYm9ydGluZyB0aGUgc2NyaXB0KSAtLV0KK3NldGxvY2FsIGluZGVudGV4cHI9WG1sSW5kZW50R2V0KHY6bG51bSwxKQorc2V0bG9jYWwgaW5kZW50a2V5cz1vLE8sKjxSZXR1cm4+LDw+Piw8PD4sLyx7LH0KKworc2V0IGNwby09QworCitpZiAhZXhpc3RzKCdiOnhtbF9pbmRlbnRfb3BlbicpCisgICAgbGV0IGI6eG1sX2luZGVudF9vcGVuID0gJy5cey19PFxhJworICAgICIgcHJlIHRhZywgZS5nLiA8YWRkcmVzcz4KKyAgICAiIGxldCBiOnhtbF9pbmRlbnRfb3BlbiA9ICcuXHstfTxbL11cQCFcKGFkZHJlc3NcKVxAIScKK2VuZGlmCisKK2lmICFleGlzdHMoJ2I6eG1sX2luZGVudF9jbG9zZScpCisgICAgbGV0IGI6eG1sX2luZGVudF9jbG9zZSA9ICcuXHstfTwvJworICAgICIgZW5kIHByZSB0YWcsIGUuZy4gPC9hZGRyZXNzPgorICAgICIgbGV0IGI6eG1sX2luZGVudF9jbG9zZSA9ICcuXHstfTwvXChhZGRyZXNzXClcQCEnCitlbmRpZgorCisiIFstLSBmaW5pc2gsIGlmIHRoZSBmdW5jdGlvbiBhbHJlYWR5IGV4aXN0cyAtLV0KK2lmIGV4aXN0cygnKlhtbEluZGVudEdldCcpIHwgZmluaXNoIHwgZW5kaWYKKworZnVuISA8U0lEPlhtbEluZGVudFdpdGhQYXR0ZXJuKGxpbmUsIHBhdCkKKyAgICBsZXQgcyA9IHN1YnN0aXR1dGUoJ3gnLmE6bGluZSwgYTpwYXQsICJcMSIsICdnJykKKyAgICByZXR1cm4gc3RybGVuKHN1YnN0aXR1dGUocywgIlteXDFdLiokIiwgJycsICcnKSkKK2VuZGZ1bgorCisiIFstLSBjaGVjayBpZiBpdCdzIHhtbCAtLV0KK2Z1biEgPFNJRD5YbWxJbmRlbnRTeW5DaGVjayhsbnVtKQorICAgIGlmICcnICE9ICZzeW50YXgKKwlsZXQgc3luMSA9IHN5bklEYXR0cihzeW5JRChhOmxudW0sIDEsIDEpLCAnbmFtZScpCisJbGV0IHN5bjIgPSBzeW5JRGF0dHIoc3luSUQoYTpsbnVtLCBzdHJsZW4oZ2V0bGluZShhOmxudW0pKSAtIDEsIDEpLCAnbmFtZScpCisJaWYgJycgIT0gc3luMSAmJiBzeW4xICF+ICd4bWwnICYmICcnICE9IHN5bjIgJiYgc3luMiAhfiAneG1sJworCSAgICAiIGRvbid0IGluZGVudCBwdXJlIG5vbi14bWwgY29kZQorCSAgICByZXR1cm4gMAorCWVuZGlmCisgICAgZW5kaWYKKyAgICByZXR1cm4gMQorZW5kZnVuCisKKyIgWy0tIHJldHVybiB0aGUgc3VtIG9mIGluZGVudHMgb2YgYTpsbnVtIC0tXQorZnVuISA8U0lEPlhtbEluZGVudFN1bShsbnVtLCBzdHlsZSwgYWRkKQorICAgIGxldCBsaW5lID0gZ2V0bGluZShhOmxudW0pCisgICAgaWYgYTpzdHlsZSA9PSBtYXRjaChsaW5lLCAnXlxzKjwvJykKKwlyZXR1cm4gKCZzdyAqCisJXCAgKDxTSUQ+WG1sSW5kZW50V2l0aFBhdHRlcm4obGluZSwgYjp4bWxfaW5kZW50X29wZW4pCisJXCAtIDxTSUQ+WG1sSW5kZW50V2l0aFBhdHRlcm4obGluZSwgYjp4bWxfaW5kZW50X2Nsb3NlKQorCVwgLSA8U0lEPlhtbEluZGVudFdpdGhQYXR0ZXJuKGxpbmUsICcuXHstfS8+JykpKSArIGE6YWRkCisgICAgZWxzZQorCXJldHVybiBhOmFkZAorICAgIGVuZGlmCitlbmRmdW4KKworZnVuISBYbWxJbmRlbnRHZXQobG51bSwgdXNlX3N5bnRheF9jaGVjaykKKyAgICAiIEZpbmQgYSBub24tZW1wdHkgbGluZSBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorICAgIGxldCBsbnVtID0gcHJldm5vbmJsYW5rKGE6bG51bSAtIDEpCisKKyAgICAiIEhpdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUsIHVzZSB6ZXJvIGluZGVudC4KKyAgICBpZiBsbnVtID09IDAKKwlyZXR1cm4gMAorICAgIGVuZGlmCisKKyAgICBpZiBhOnVzZV9zeW50YXhfY2hlY2sKKwlpZiAwID09IDxTSUQ+WG1sSW5kZW50U3luQ2hlY2sobG51bSkgfHwgMCA9PSA8U0lEPlhtbEluZGVudFN5bkNoZWNrKGE6bG51bSkKKwkgICAgcmV0dXJuIGluZGVudChhOmxudW0pCisJZW5kaWYKKyAgICBlbmRpZgorCisgICAgbGV0IGluZCA9IDxTSUQ+WG1sSW5kZW50U3VtKGxudW0sIC0xLCBpbmRlbnQobG51bSkpCisgICAgbGV0IGluZCA9IDxTSUQ+WG1sSW5kZW50U3VtKGE6bG51bSwgMCwgaW5kKQorCisgICAgcmV0dXJuIGluZAorZW5kZnVuCisKKyIgdmltOnRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3hzbHQudmltIGIvcnVudGltZS9pbmRlbnQveHNsdC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5M2Q2OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvaW5kZW50L3hzbHQudmltCkBAIC0wLDAgKzEsMTMgQEAKKyIgVmltIGluZGVudCBmaWxlCisiIExhbmd1YWdlOiAgICBYU0xUIC54c2x0IGZpbGVzCisiIE1haW50YWluZXI6ICBEYXZpZCBGaXNoYnVybiA8ZmlzaGJ1cm5AaWFueXdoZXJlLmNvbT4KKyIgTGFzdCBDaGFuZ2U6IFdlZCBNYXkgMTQgMjAwMyA4OjQ4OjQxIFBNCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgVXNlIFhNTCBmb3JtYXR0aW5nIHJ1bGVzCitydW50aW1lISBpbmRlbnQveG1sLnZpbQorCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC95YWNjLnZpbSBiL3J1bnRpbWUvaW5kZW50L3lhY2MudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYThmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZGVudC95YWNjLnZpbQpAQCAtMCwwICsxLDQ0IEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJICAgIFlBQ0MgaW5wdXQgZmlsZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vaW5kZW50L3BjcC95YWNjLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA0LTI1CisiIGFyY2gtdGFnOgkgICAgNjI5YWE3MTktOGZlNC00Nzg3LWFkYjctYWU5NGNhODAxNjEwCisKKyIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgoraWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2xldCBiOmRpZF9pbmRlbnQgPSAxCisKK3NldGxvY2FsIGluZGVudGV4cHI9R2V0WWFjY0luZGVudCgpCitzZXRsb2NhbCBpbmRlbnRrZXlzPSFeRixvLE8KKworIiBPbmx5IGRlZmluZSB0aGUgZnVuY3Rpb24gb25jZS4KK2lmIGV4aXN0cygiKkdldFlhY2NJbmRlbnQiKQorICBmaW5pc2gKK2VuZGlmCisKK2Z1bmN0aW9uIEdldFlhY2NJbmRlbnQoKQorICBpZiB2OmxudW0gPT0gMQorICAgIHJldHVybiAwCisgIGVuZGlmCisKKyAgbGV0IGluZCA9IGluZGVudCh2OmxudW0gLSAxKQorICBsZXQgbGluZSA9IGdldGxpbmUodjpsbnVtIC0gMSkKKworICBpZiBsaW5lID09ICcnCisgICAgbGV0IGluZCA9IDAKKyAgZWxzZWlmIGxpbmUgPX4gJ15cd1wrXHMqOicKKyAgICBsZXQgaW5kID0gaW5kICsgbWF0Y2hlbmQobGluZSwgJ15cd1wrXHMqJykKKyAgZWxzZWlmIGxpbmUgPX4gJ15ccyo7JworICAgIGxldCBpbmQgPSAwCisgIGVsc2UKKyAgICBsZXQgaW5kID0gaW5kZW50KHY6bG51bSkKKyAgZW5kaWYKKworICByZXR1cm4gaW5kCitlbmRmdW5jdGlvbgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC96c2gudmltIGIvcnVudGltZS9pbmRlbnQvenNoLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjI4ZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9pbmRlbnQvenNoLnZpbQpAQCAtMCwwICsxLDExIEBACisiIFZpbSBpbmRlbnQgZmlsZQorIiBMYW5ndWFnZToJICAgIFpzaCBTaGVsbCBTY3JpcHQKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL2luZGVudC9wY3AvenNoLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTIyCisiIGFyY2gtdGFnOgkgICAgZTU2NmY1NWYtZDhjMC00YzYwLWI0YjMtNjBjMGRiZDZkZWExCisKKyIgU2FtZSBhcyBzaCBpbmRlbnRpbmcgZm9yIG5vdy4KK3J1bnRpbWUhIGluZGVudC9zaC52aW0KKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRvZmYudmltIGIvcnVudGltZS9pbmRvZmYudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOTMwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2luZG9mZi52aW0KQEAgLTAsMCArMSwxMSBAQAorIiBWaW0gc3VwcG9ydCBmaWxlIHRvIHN3aXRjaCBvZmYgbG9hZGluZyBpbmRlbnQgZmlsZXMgZm9yIGZpbGUgdHlwZXMKKyIKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgSnVuIDExCisKK2lmIGV4aXN0cygiZGlkX2luZGVudF9vbiIpCisgIHVubGV0IGRpZF9pbmRlbnRfb24KK2VuZGlmCisKKyIgUmVtb3ZlIGFsbCBhdXRvY29tbWFuZHMgaW4gdGhlIGZpbGV0eXBlaW5kZW50IGdyb3VwCitzaWxlbnQhIGF1ISBmaWxldHlwZWluZGVudCAqCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9SRUFETUUudHh0IGIvcnVudGltZS9rZXltYXAvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDJlMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvUkVBRE1FLnR4dApAQCAtMCwwICsxLDI2IEBACitrZXltYXAgZmlsZXMgZm9yIFZpbQorCitPbmUgb2YgdGhlc2UgZmlsZXMgaXMgbG9hZGVkIHdoZW4gdGhlICdrZXltYXAnIG9wdGlvbiBpcyBzZXQuCisKK1RoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnNpc3RzIG9mIHRoZXNlIHBhcnRzOgorCisJe2xhbmd1YWdlfVste2xheW91dH1dW197ZW5jb2Rpbmd9XS52aW0KKwore2xhbmd1YWdlfQlOYW1lIG9mIHRoZSBsYW5ndWFnZSAoZS5nLiwgImhlYnJldyIsICJncmVlayIpCisKK3tsYXlvdXR9CU9wdGlvbmFsOiBuYW1lIG9mIHRoZSBrZXlib2FyZCBsYXlvdXQgKGUuZy4sICJzcGFuaXNoIiwKKwkJInJ1c3NpYW4zIikuICBXaGVuIG9taXR0ZWQgdGhlIGxheW91dCBvZiB0aGUgc3RhbmRhcmQKKwkJVVMtZW5nbGlzaCBrZXlib2FyZCBpcyBhc3N1bWVkLgorCit7ZW5jb2Rpbmd9CU9wdGlvbmFsOiBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIHdoaWNoIHRoaXMga2V5bWFwIHdvcmtzLgorCQlXaGVuIG9taXR0ZWQgdGhlICJub3JtYWwiIGVuY29kaW5nIGZvciB0aGUgbGFuZ3VhZ2UgaXMKKwkJYXNzdW1lZC4KKwkJVXNlIHRoZSB2YWx1ZSB0aGUgJ2VuY29kaW5nJyBvcHRpb246IGxvd2VyIGNhc2Ugb25seSwgdXNlICctJworCQlpbnN0ZWFkIG9mICdfJy4KKworRWFjaCBmaWxlIHN0YXJ0cyB3aXRoIGEgaGVhZGVyLCBuYW1pbmcgdGhlIG1haW50YWluZXIgYW5kIHRoZSBkYXRlIHdoZW4gaXQgd2FzCitsYXN0IGNoYW5nZWQuICBJZiB5b3UgZmluZCBhIHByb2JsZW0gaW4gYSBrZXltYXAgZmlsZSwgY2hlY2sgaWYgeW91IGhhdmUgdGhlCittb3N0IHJlY2VudCB2ZXJzaW9uLiAgSWYgbmVjZXNzYXJ5LCByZXBvcnQgYSBwcm9ibGVtIHRvIHRoZSBtYWludGFpbmVyLgorCitUaGUgZm9ybWF0IG9mIHRoZSBrZXltYXAgbGluZXMgYmVsb3cgImxvYWRrZXltYXAiIGlzIGV4cGxhaW5lZCBpbiB0aGUgVmltIGhlbHAKK2ZpbGVzLCBzZWUgIjpoZWxwIGtleW1hcC1maWxlLWZvcm1hdCIuCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9hY2NlbnRzLnZpbSBiL3J1bnRpbWUva2V5bWFwL2FjY2VudHMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTQ2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9hY2NlbnRzLnZpbQpAQCAtMCwwICsxLDcxIEBACisiIFZpbSBLZXltYXAgZmlsZSBmb3IgbGF0aW4xIGFjY2VudHMgdGhyb3VnaCBkZWFkIGNoYXJhY3RlcnMKKyIgTWFpbnRhaW5lcjogQnJhbSBNb29sZW5hYXIKKyIgTGFzdCBDaGFuZ2U6IDIwMDEgSnVsIDIyCisKKyIgQWxsIGNoYXJhY3RlcnMgYXJlIGdpdmVuIGxpdGVyYWxseSwgY29udmVyc2lvbiB0byBhbm90aGVyIGVuY29kaW5nIChlLmcuLAorIiBVVEYtOCkgc2hvdWxkIHdvcmsuCitzY3JpcHRlbmNvZGluZyBsYXRpbjEKKworIiBVc2UgdGhpcyBzaG9ydCBuYW1lIGluIHRoZSBzdGF0dXMgbGluZS4KK2xldCBiOmtleW1hcF9uYW1lID0gImFjYyIKKworbG9hZGtleW1hcAorYEEJwAorJ0EJwQortEEJwQorXkEJwgorfkEJwworJ0MJxwortEMJxworYEUJyAorJ0UJyQortEUJyQorXkUJygorYEkJzAorJ0kJzQortEkJzQorXkkJzgorfk4J0QorYE8J0gorJ08J0wortE8J0worXk8J1Aorfk8J1QorYFUJ2QorJ1UJ2gortFUJ2gorXlUJ2worJ1kJ3QortFkJ3QorYGEJ4AorJ2EJ4QortGEJ4QorXmEJ4gorfmEJ4worJ2MJ5wortGMJ5worYGUJ6AorJ2UJ6QortGUJ6QorXmUJ6gorYGkJ7AorJ2kJ7QortGkJ7QorXmkJ7gorfm4J8QorYG8J8gorJ28J8wortG8J8worXm8J9Aorfm8J9QorYHUJ+QorJ3UJ+gortHUJ+gorXnUJ+worJ3kJ/QortHkJ/QorJycJJwortLQJtAorYGAJYAorXl4JXgorfn4JfgpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvYXJhYmljLnZpbSBiL3J1bnRpbWUva2V5bWFwL2FyYWJpYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViOWExNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL2FyYWJpYy52aW0KQEAgLTAsMCArMSwyIEBACisiIEFzc3VtZSAnZW5jb2RpbmcnIGlzIHNldCB0byAibGF0aW4xIiB3aGlsZSBhY3R1YWxseSBpc28tODg1OS02IGlzIHVzZWQKK3NvdXJjZSA8c2ZpbGU+OnA6aC9hcmFiaWNfdXRmLTgudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9hcmFiaWNfdXRmLTgudmltIGIvcnVudGltZS9rZXltYXAvYXJhYmljX3V0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWI0YTRmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvYXJhYmljX3V0Zi04LnZpbQpAQCAtMCwwICsxLDg2IEBACisiIFZpbSBLZXltYXAgZmlsZSBmb3IgQXJhYmljCisiIE1haW50YWluZXIgICA6IEFyYWJpYyBTdXBwb3J0IGdyb3VwIDxzdXBwb3J0LWF0LWFyYWJleWVzLm9yZz4KKyIgQ3JlYXRlZCBieSAgIDogTmFkaW0gU2hhaWtsaSA8bmFkaW0tYXQtYXJhYmV5ZXMub3JnPgorIiBMYXN0IFVwZGF0ZWQgOiAyMDAzIEFwciAyNgorIiBUaGlzIGlzIGZvciBhIHN0YW5kYXJkIE1pY3Jvc29mdCBBcmFiaWMga2V5Ym9hcmQgbGF5b3V0LgorCisiIFVzZSB0aGlzIHNob3J0IG5hbWUgaW4gdGhlIHN0YXR1cyBsaW5lLgorbGV0IGI6a2V5bWFwX25hbWUgPSAiYXJhYiIKKworbG9hZGtleW1hcAorcQk8Y2hhci0weDA2MzY+CQkJIiAoMTU5MCkJLSBEQUQKK3cJPGNoYXItMHgwNjM1PgkJCSIgKDE1ODkpCS0gU0FECitlCTxjaGFyLTB4MDYyYj4JCQkiICgxNTc5KQktIFRIRUgKK3IJPGNoYXItMHgwNjQyPgkJCSIgKDE2MDIpCS0gUUFGCit0CTxjaGFyLTB4MDY0MT4JCQkiICgxNjAxKQktIEZFSAoreQk8Y2hhci0weDA2M2E+CQkJIiAoMTU5NCkJLSBHSEFJTgordQk8Y2hhci0weDA2Mzk+CQkJIiAoMTU5MykJLSBBSU4KK2kJPGNoYXItMHgwNjQ3PgkJCSIgKDE2MDcpCS0gSEVICitvCTxjaGFyLTB4MDYyZT4JCQkiICgxNTgyKQktIEtIQUgKK3AJPGNoYXItMHgwNjJkPgkJCSIgKDE1ODEpCS0gSEFICitbCTxjaGFyLTB4MDYyYz4JCQkiICgxNTgwKQktIEpFRU0KK10JPGNoYXItMHgwNjJmPgkJCSIgKDE1ODMpCS0gREFMCithCTxjaGFyLTB4MDYzND4JCQkiICgxNTg4KQktIFNIRUVOCitzCTxjaGFyLTB4MDYzMz4JCQkiICgxNTg3KQktIFNFRU4KK2QJPGNoYXItMHgwNjRhPgkJCSIgKDE2MTApCS0gWUVICitmCTxjaGFyLTB4MDYyOD4JCQkiICgxNTc2KQktIEJFSAorZwk8Y2hhci0weDA2NDQ+CQkJIiAoMTYwNCkJLSBMQU0KK2gJPGNoYXItMHgwNjI3PgkJCSIgKDE1NzUpCS0gQUxFRgoragk8Y2hhci0weDA2MmE+CQkJIiAoMTU3OCkJLSBURUgKK2sJPGNoYXItMHgwNjQ2PgkJCSIgKDE2MDYpCS0gTk9PTgorbAk8Y2hhci0weDA2NDU+CQkJIiAoMTYwNSkJLSBNRUVNCis7CTxjaGFyLTB4MDY0Mz4JCQkiICgxNjAzKQktIEtBRgorJwk8Y2hhci0weDA2Mzc+CQkJIiAoMTU5MSkJLSBUQUgKK3oJPGNoYXItMHgwNjI2PgkJCSIgKDE1NzQpCS0gWUVIIHdpdGggSEFNWkEgQUJPVkUKK3gJPGNoYXItMHgwNjIxPgkJCSIgKDE1NjkpCS0gSEFNWkEKK2MJPGNoYXItMHgwNjI0PgkJCSIgKDE1NzIpCS0gV0FXIHdpdGggSEFNWkEgQUJPVkUKK3YJPGNoYXItMHgwNjMxPgkJCSIgKDE1ODUpCS0gUkVICitiCTxjaGFyLTB4MDY0ND48Y2hhci0weDA2Mjc+CSIgKDE2MDQvMTU3NSkJLSBMQUEgKGxhbSBhbGVmKQorbgk8Y2hhci0weDA2NDk+CQkJIiAoMTYwOSkJLSBBTEVGIE1BS1NVUkEKK20JPGNoYXItMHgwNjI5PgkJCSIgKDE1NzcpCS0gVEVIIE1BUkJVVEEKKywJPGNoYXItMHgwNjQ4PgkJCSIgKDE2MDgpCS0gV0FXCisuCTxjaGFyLTB4MDYzMj4JCQkiICgxNTg2KQktIFpBSU4KKy8JPGNoYXItMHgwNjM4PgkJCSIgKDE1OTIpCS0gWkFICiswCTxjaGFyLTB4MDY2MD4JCQkiICgxNjMyKQktIEFyYWJpYyAwCisxCTxjaGFyLTB4MDY2MT4JCQkiICgxNjMzKQktIEFyYWJpYyAxCisyCTxjaGFyLTB4MDY2Mj4JCQkiICgxNjM0KQktIEFyYWJpYyAyCiszCTxjaGFyLTB4MDY2Mz4JCQkiICgxNjM1KQktIEFyYWJpYyAzCis0CTxjaGFyLTB4MDY2ND4JCQkiICgxNjM2KQktIEFyYWJpYyA0Cis1CTxjaGFyLTB4MDY2NT4JCQkiICgxNjM3KQktIEFyYWJpYyA1Cis2CTxjaGFyLTB4MDY2Nj4JCQkiICgxNjM4KQktIEFyYWJpYyA2Cis3CTxjaGFyLTB4MDY2Nz4JCQkiICgxNjM5KQktIEFyYWJpYyA3Cis4CTxjaGFyLTB4MDY2OD4JCQkiICgxNjQwKQktIEFyYWJpYyA4Cis5CTxjaGFyLTB4MDY2OT4JCQkiICgxNjQxKQktIEFyYWJpYyA5CitgCTxjaGFyLTB4MDYzMD4JCQkiICgxNTg0KQktIFRIQUwKK34JPGNoYXItMHgwNjUxPgkJCSIgKDE2MTcpCS0gVGFud2VlbiAtLSBTSEFEREEKK1EJPGNoYXItMHgwNjRlPgkJCSIgKDE2MTQpCS0gVGFud2VlbiAtLSBGQVRIQQorVwk8Y2hhci0weDA2NGI+CQkJIiAoMTYxMSkJLSBUYW53ZWVuIC0tIEZBVEhBVEFOCitFCTxjaGFyLTB4MDY0Zj4JCQkiICgxNjE1KQktIFRhbndlZW4gLS0gREFNTUEKK1IJPGNoYXItMHgwNjRjPgkJCSIgKDE2MTIpCS0gVGFud2VlbiAtLSBEQU1NQVRBTgorVAk8Y2hhci0weDA2NDQ+PGNoYXItMHgwNjI1PgkiICgxNjA0LzE1NzMpCS0gTEFBICB3aXRoIEhBTVpBIEJFTE9XCitZCTxjaGFyLTB4MDYyNT4JCQkiICgxNTczKQktIEFMRUYgd2l0aCBIQU1aQSBCRUxPVworVQk8Y2hhci0weDAwNjA+CQkJIiAoOTYpCQktIEFTQ0lJIC0tIGAKK0kJPGNoYXItMHgwMGY3PgkJCSIgKDI0NykJCS0gQVNDSUkgc3VwcGwgLS0gZGl2CitPCTxjaGFyLTB4MDBkNz4JCQkiICgyMTUpCQktIEFTQ0lJIHN1cHBsIC0tIG11bAorUAk8Y2hhci0weDA2MWI+CQkJIiAoMTU2MykJLSBBcmFiaWMgU2VtaWNvbG9uCit7CTxjaGFyLTB4MDAzYz4JCQkiICg2MCkJCS0gQVNDSUkgLS0gPAorfQk8Y2hhci0weDAwM2U+CQkJIiAoNjIpCQktIEFTQ0lJIC0tID4KK0EJPGNoYXItMHgwNjUwPgkJCSIgKDE2MTYpCS0gVGFud2VlbiAtLSBLQVNSQQorUwk8Y2hhci0weDA2NGQ+CQkJIiAoMTYxMykJLSBUYW53ZWVuIC0tIEtBU1JBVEFOCitECTxjaGFyLTB4MDA1Yj4JCQkiICg5MSkJCS0gQVNDSUkgLS0gWworRgk8Y2hhci0weDAwNWQ+CQkJIiAoOTMpCQktIEFTQ0lJIC0tIF0KK0cJPGNoYXItMHgwNjQ0PjxjaGFyLTB4MDYyMz4JIiAoMTYwNC8xNTcxKQktIExBQSAgd2l0aCBIQU1aQSBBQk9WRQorSAk8Y2hhci0weDA2MjM+CQkJIiAoMTU3MSkJLSBBTEVGIHdpdGggSEFNWkEgQUJPVkUKK0oJPGNoYXItMHgwNjQwPgkJCSIgKDE2MDApCS0gVEFUV0VFTAorSwk8Y2hhci0weDA2MGM+CQkJIiAoMTU0OCkJLSBBcmFiaWMgQ29tbWEKK0wJPGNoYXItMHgwMDJmPgkJCSIgKDQ3KQkJLSBBU0NJSSAtLSAvCitaCTxjaGFyLTB4MDA3ZT4JCQkiICgxMjYpCQktIEFTQ0lJIC0tIH4KK1gJPGNoYXItMHgwNjUyPgkJCSIgKDE2MTgpCS0gVGFud2VlbiAtLSBTVUtVTgorQwk8Y2hhci0weDAwN2I+CQkJIiAoMTIzKQkJLSBBU0NJSSAtLSB7CitWCTxjaGFyLTB4MDA3ZD4JCQkiICgxMjUpCQktIEFTQ0lJIC0tIH0KK0IJPGNoYXItMHgwNjQ0PjxjaGFyLTB4MDYyMj4JIiAoMTYwNC8xNTcwKQktIExBQSAgd2l0aCBNQUREQSBBQk9WRQorTgk8Y2hhci0weDA2MjI+CQkJIiAoMTU3MCkJLSBBTEVGIHdpdGggTUFEREEgQUJPVkUKK00JPGNoYXItMHgwMDI3PgkJCSIgKDM5KQkJLSBBU0NJSSAtLSAnCis8CTxjaGFyLTB4MDAyYz4JCQkiICg0NCkJCS0gQVNDSUkgLS0gLAorPgk8Y2hhci0weDAwMmU+CQkJIiAoNDYpCQktIEFTQ0lJIC0tIC4KKz8JPGNoYXItMHgwNjFmPgkJCSIgKDE1NjcpCS0gQXJhYmljIFF1ZXN0aW9uIE1hcmsKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL2N6ZWNoLnZpbSBiL3J1bnRpbWUva2V5bWFwL2N6ZWNoLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmNhNTMxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvY3plY2gudmltCkBAIC0wLDAgKzEgQEAKK3NvdXJjZSA8c2ZpbGU+OnA6aC9jemVjaF91dGYtOC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL2N6ZWNoX3V0Zi04LnZpbSBiL3J1bnRpbWUva2V5bWFwL2N6ZWNoX3V0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjdmODBiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvY3plY2hfdXRmLTgudmltCkBAIC0wLDAgKzEsNzggQEAKKyIgTWFpbnRhaW5lcjogICBKaXJpIFRvYmlzZWsgPHRvYmljaEB5YWhvby5jb20+CisiIExhc3QgQ2hhbmdlZDogMjAwMSBTZXAgMzAKKworbGV0IGI6a2V5bWFwID0gImN6ZWNoIgorCitsb2Fka2V5CiswCcOpCis5CcOtCis4CcO3Cis3CcO9Cis2CcW1Cis1CcWZCis0CcSrCiszCcW3CisyCcSbCisxCSsKK2AJOworKQkwCisoCTkKKyoJOAorJgk3CiteCTYKKyUJNQorJAk0CisjCTMKK0AJMgorIQkxCitdCSkKK30JKAorWwnDugorewkvCisnCcKnCisiCSEKKzsJxa8KKzoJIgorLwktCis/CV8KKz4JOgorPAk/Cit8CScKK351CcWvCit+VQnFrgorXFxhCcOkCitcXGUJw6sKK1xcaQnDrworXFxvCcO2CitcXHUJw6UKK1xceQnDvworXFxBCcOECitcXEUJw4sKK1xcSQnDrAorXFxPCcOWCitcXFUJw7YKK1xcWQnFuAorPWEJw7cKKz1lCcOpCis9aQnDrQorPW8Jw7MKKz11CcO6Cis9eQnDvQorPUEJw4EKKz1FCcOJCis9SQnDqworPU8Jw5MKKz1VCcO5Cis9WQnDuworK2MJxKsKKytkCcSsCisrZQnEmworK24JxYgKKytyCcWZCisrcwnFtworK3QJxaEKKyt6CcW1CisieQl6CUlmIHlvdSBwcmVmZXJlICdxdWVydHonIGtleWJvYXJkCisiWQlaCWluc3RlYWQgb2YgJ3F1ZXJ0eScsCisiegl5CWp1c3QgdW5jb21tZW50IHRoZXNlCisiWglZCWZvdXIgbGFzdCBsaW5lcwpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvZXNwZXJhbnRvLnZpbSBiL3J1bnRpbWUva2V5bWFwL2VzcGVyYW50by52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiMzk4NwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL2VzcGVyYW50by52aW0KQEAgLTAsMCArMSBAQAorc291cmNlIDxzZmlsZT46cDpoL2VzcGVyYW50b191dGYtOC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL2VzcGVyYW50b191dGYtOC52aW0gYi9ydW50aW1lL2tleW1hcC9lc3BlcmFudG9fdXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMzM1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9lc3BlcmFudG9fdXRmLTgudmltCkBAIC0wLDAgKzEsNTggQEAKKyIgRXNwZXJhbnRvIGtleW1hcCBmb3IgdXRmLTgKKyIgTWFpbnRhaW5lcjoJQS5KLk1lY2hlbHluY2sJPGFudG9pbmUubWVjaGVseW5ja0Bza3luZXQuYmU+CisiIExhc3QgQ2hhbmdlZDoJU2F0IDIwMDMgTWFyIDE1IDA1OjIzCisKKyIgVGhpcyBrZXltYXAgYWRkcyB0aGUgc3BlY2lhbCBjb25zb25hbnRzIG9mIEVzcGVyYW50byB0byBhbiBleGlzdGluZyBMYXRpbgorIiBrZXlib2FyZC4KKyIKKyIgQWxsIGtleXMgc2FtZSBhcyB1c3VhbCwgZXhjZXB0OgorIiBeIGZvbGxvd2VkIGJ5IGFueSBvZiBDY0dnSGhKalNzIGFkZHMgYSBjaXJjdW1mbGV4IG9uIHRvcCBvZiB0aGUgbGV0dGVyCisiIPkgYW5kINkgcmVwbGFjZXMgdGhlIGdyYXZlIGFjY2VudCBieSBhIGJyZXZlCisiIGFueSBvZiBDY0dnSGhKalNzVXUgZm9sbG93ZWQgYnkgWCBvciB4IG1hcHMgdG8gY29uc29uYW50IHdpdGggXiBvciBVdSB3aXRoCisiIGJyZXZlLgorCisiIHNob3J0IGtleW1hcCBuYW1lIGZvciBzdGF0dXNsaW5lCitsZXQgYjprZXltYXBfbmFtZSA9ICJFbyIKKworIiBtYWtlIGN1cnNvciBicmlnaHQgZ3JlZW4gd2hlbiBrZXltYXAgaXMgYWN0aXZlCisiaGlnaGxpZ2h0IGxDdXJzb3IgZ3VpZmc9Tk9ORSBndWliZz0jMDBFMDAwCisKKyIgVGhlIGZvbGxvd2luZyBkaWdyYXBocyBhcmUgYWxyZWFkeSBkZWZpbmVkCisiIGRpZ3JhcGggQz4gMHgwMTA4IGM+IDB4MDEwOQlHPiAweDAxMUMgZz4gMHgwMTFECUg+IDB4MDEyNCBoPiAweDAxMjUKKyIgZGlncmFwaCBKPiAweDAxMzQgaj4gMHgwMTM1CVM+IDB4MDE1QyBzPiAweDAxNUQJVSggMHgwMTZDIHUoIDB4MDE2RAorCitzY3JpcHRlbmNvZGluZyBsYXRpbjEKKworbG9hZGtleW1hcAorCiteQwk8Q2hhci0weDAxMDg+CSIgKDI2NCkJVVBQRVJDQVNFIEMgV0lUSCBDSVJDVU1GTEVYCiteYwk8Q2hhci0weDAxMDk+CSIgKDI2NSkgTE9XRVJDQVNFIGMgV0lUSCBDSVJDVU1GTEVYCiteRwk8Q2hhci0weDAxMUM+CSIgKDI4NCkgVVBQRVJDQVNFIEcgV0lUSCBDSVJDVU1GTEVYCiteZwk8Q2hhci0weDAxMUQ+CSIgKDI4NSkgTE9XRVJDQVNFIGcgV0lUSCBDSVJDVU1GTEVYCiteSAk8Q2hhci0weDAxMjQ+CSIgKDI5MikgVVBQRVJDQVNFIEggV0lUSCBDSVJDVU1GTEVYCiteaAk8Q2hhci0weDAxMjU+CSIgKDI5MykgTE9XRVJDQVNFIGggV0lUSCBDSVJDVU1GTEVYCiteSgk8Q2hhci0weDAxMzQ+CSIgKDMwOCkgVVBQRVJDQVNFIEogV0lUSCBDSVJDVU1GTEVYCiteagk8Q2hhci0weDAxMzU+CSIgKDMwOSkgTE9XRVJDQVNFIGogV0lUSCBDSVJDVU1GTEVYCiteUwk8Q2hhci0weDAxNUM+CSIgKDM0OCkgVVBQRVJDQVNFIFMgV0lUSCBDSVJDVU1GTEVYCitecwk8Q2hhci0weDAxNUQ+CSIgKDM0OSkgTE9XRVJDQVNFIHMgV0lUSCBDSVJDVU1GTEVYCivZCTxDaGFyLTB4MDE2Qz4JIiAoMzY0KSBVUFBFUkNBU0UgVSBXSVRIIEJSRVZFCiv5CTxDaGFyLTB4MDE2RD4JIiAoMzY1KSBMT1dFUkNBU0UgdSBXSVRIIEJSRVZFCisKK0NYCTxDaGFyLTB4MDEwOD4JIiAoMjY0KQlVUFBFUkNBU0UgQyBXSVRIIENJUkNVTUZMRVgKK0N4CTxDaGFyLTB4MDEwOD4JIiAoMjY0KQlVUFBFUkNBU0UgQyBXSVRIIENJUkNVTUZMRVgKK2N4CTxDaGFyLTB4MDEwOT4JIiAoMjY1KSBMT1dFUkNBU0UgYyBXSVRIIENJUkNVTUZMRVgKK0dYCTxDaGFyLTB4MDExQz4JIiAoMjg0KSBVUFBFUkNBU0UgRyBXSVRIIENJUkNVTUZMRVgKK0d4CTxDaGFyLTB4MDExQz4JIiAoMjg0KSBVUFBFUkNBU0UgRyBXSVRIIENJUkNVTUZMRVgKK2d4CTxDaGFyLTB4MDExRD4JIiAoMjg1KSBMT1dFUkNBU0UgZyBXSVRIIENJUkNVTUZMRVgKK0hYCTxDaGFyLTB4MDEyND4JIiAoMjkyKSBVUFBFUkNBU0UgSCBXSVRIIENJUkNVTUZMRVgKK0h4CTxDaGFyLTB4MDEyND4JIiAoMjkyKSBVUFBFUkNBU0UgSCBXSVRIIENJUkNVTUZMRVgKK2h4CTxDaGFyLTB4MDEyNT4JIiAoMjkzKSBMT1dFUkNBU0UgaCBXSVRIIENJUkNVTUZMRVgKK0pYCTxDaGFyLTB4MDEzND4JIiAoMzA4KSBVUFBFUkNBU0UgSiBXSVRIIENJUkNVTUZMRVgKK0p4CTxDaGFyLTB4MDEzND4JIiAoMzA4KSBVUFBFUkNBU0UgSiBXSVRIIENJUkNVTUZMRVgKK2p4CTxDaGFyLTB4MDEzNT4JIiAoMzA5KSBMT1dFUkNBU0UgaiBXSVRIIENJUkNVTUZMRVgKK1NYCTxDaGFyLTB4MDE1Qz4JIiAoMzQ4KSBVUFBFUkNBU0UgUyBXSVRIIENJUkNVTUZMRVgKK1N4CTxDaGFyLTB4MDE1Qz4JIiAoMzQ4KSBVUFBFUkNBU0UgUyBXSVRIIENJUkNVTUZMRVgKK3N4CTxDaGFyLTB4MDE1RD4JIiAoMzQ5KSBMT1dFUkNBU0UgcyBXSVRIIENJUkNVTUZMRVgKK1VYCTxDaGFyLTB4MDE2Qz4JIiAoMzY0KSBVUFBFUkNBU0UgVSBXSVRIIEJSRVZFCitVeAk8Q2hhci0weDAxNkM+CSIgKDM2NCkgVVBQRVJDQVNFIFUgV0lUSCBCUkVWRQordXgJPENoYXItMHgwMTZEPgkiICgzNjUpIExPV0VSQ0FTRSB1IFdJVEggQlJFVkUKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL2dyZWVrLnZpbSBiL3J1bnRpbWUva2V5bWFwL2dyZWVrLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjJjMWRlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvZ3JlZWsudmltCkBAIC0wLDAgKzEsNyBAQAorIiBBc3N1bWUgJ2VuY29kaW5nJyBpcyBzZXQgdG8gImxhdGluMSIgd2hpbGUgYWN0dWFsbHkgY3AxMjUzIG9yIGlzby04ODU5LTcgaXMKKyIgYmVpbmcgdXNlZAoraWYgaGFzKCJ3aW4xNiIpIHx8IGhhcygid2luMzIiKSB8fCBoYXMoIndpbjMydW5peCIpCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9ncmVla19jcDEyNTMudmltCitlbHNlCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9ncmVla19pc28tODg1OS03LnZpbQorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL2dyZWVrX2NwMTI1My52aW0gYi9ydW50aW1lL2tleW1hcC9ncmVla19jcDEyNTMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNDY0NzcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9ncmVla19jcDEyNTMudmltCkBAIC0wLDAgKzEsMTE5IEBACisiIFZpbSBLZXltYXAgZmlsZSBmb3IgZ3JlZWsKKyIgTWFpbnRhaW5lcjogR3JpZ29yaW9zIE1hZ2tsaXMgPG1hZ2xpc0Bjcy5yb2NoZXN0ZXIuZWR1PgorIiBQYXRjaGVkIGZvciBNUy1XaW5kb3dzIENQMTI1MzogUGFuYWdpb3RpcyBMb3VyaWRhcyA8bG91cmlkYXNAYWNtLm9yZz4KKyIgTGFzdCBVcGRhdGVkOiBGcmkgMTMgRmViIDIwMDQgMTM6MDE6MzMKKyIKKyIgVGhpcyBrZXlib2FyZCBsYXlvdXQgYWxsb3dzIGFsbCBHcmVlayBzeW1ib2xzIHRvIGJlIHR5cGVkLAorIiBpbmNsdWRpbmcgYWNjZW50ZWQgY2FwaXRhbHMsIGRpYWVyZXNpcyAmIGFjY2VudCBvbiB0aGUgc2FtZQorIiB2b3dlbCwgYW5kIHRoZSBHcmVlayBzZW1pY29sb24gc2lnbi4KKyIKKyIgYWNjZW50CQkJIjsiICsgbGV0dGVyCisiIGRpYWVyZXNpcwkJCSI6IiArIGxldHRlcgorIiBkaWFlcmVzaXMgKyBhY2NlbnQJCSI7IiArICI6IiAob3IgIjoiICsgIjsiKSArIGxldHRlcgorIiBzZW1pY29sb24JCQkicSIKKyIgY29sb24JCQkJIlEiCisiIGdyZWVrIHNlbWljb2xvbgkJIlciCisiIHNpZ21hIGF0IGVuZCBvZiB3b3JkCQkidyIKKyIgZ3JlZWsgbGVmdCBkb3VibGUtcXVvdGUJIjwiIHR3aWNlCisiIGdyZWVrIHJpZ2h0IGRvdWJsZS1xdW90ZQkiPiIgdHdpY2UKKworIiBVc2UgdGhpcyBzaG9ydCBuYW1lIGluIHRoZSBzdGF0dXMgbGluZS4KK2xldCBiOmtleW1hcF9uYW1lID0gImdyZWVrIgorCitsb2Fka2V5bWFwCisiIGNhcGl0YWwKK0EJPGNoYXItMTkzPgkiIMEKK0IJPGNoYXItMTk0PgkiIMIKK0cJPGNoYXItMTk1PgkiIMMKK0QJPGNoYXItMTk2PgkiIMQKK0UJPGNoYXItMTk3PgkiIMUKK1oJPGNoYXItMTk4PgkiIMYKK0gJPGNoYXItMTk5PgkiIMcKK1UJPGNoYXItMjAwPgkiIMgKK0kJPGNoYXItMjAxPgkiIMkKK0sJPGNoYXItMjAyPgkiIMoKK0wJPGNoYXItMjAzPgkiIMsKK00JPGNoYXItMjA0PgkiIMwKK04JPGNoYXItMjA1PgkiIM0KK0oJPGNoYXItMjA2PgkiIM4KK08JPGNoYXItMjA3PgkiIM8KK1AJPGNoYXItMjA4PgkiINAKK1IJPGNoYXItMjA5PgkiINEKK1MJPGNoYXItMjExPgkiINMKK1QJPGNoYXItMjEyPgkiINQKK1kJPGNoYXItMjEzPgkiINUKK0YJPGNoYXItMjE0PgkiINYKK1gJPGNoYXItMjE1PgkiINcKK0MJPGNoYXItMjE2PgkiINgKK1YJPGNoYXItMjE3PgkiINkKKworIiBzbWFsbAorYQk8Y2hhci0yMjU+CSIg4QorYgk8Y2hhci0yMjY+CSIg4gorZwk8Y2hhci0yMjc+CSIg4worZAk8Y2hhci0yMjg+CSIg5AorZQk8Y2hhci0yMjk+CSIg5Qoregk8Y2hhci0yMzA+CSIg5goraAk8Y2hhci0yMzE+CSIg5wordQk8Y2hhci0yMzI+CSIg6AoraQk8Y2hhci0yMzM+CSIg6Qorawk8Y2hhci0yMzQ+CSIg6gorbAk8Y2hhci0yMzU+CSIg6worbQk8Y2hhci0yMzY+CSIg7Aorbgk8Y2hhci0yMzc+CSIg7Qoragk8Y2hhci0yMzg+CSIg7gorbwk8Y2hhci0yMzk+CSIg7worcAk8Y2hhci0yNDA+CSIg8Aorcgk8Y2hhci0yNDE+CSIg8Qordwk8Y2hhci0yNDI+CSIg8gorcwk8Y2hhci0yNDM+CSIg8wordAk8Y2hhci0yNDQ+CSIg9AoreQk8Y2hhci0yNDU+CSIg9QorZgk8Y2hhci0yNDY+CSIg9goreAk8Y2hhci0yNDc+CSIg9worYwk8Y2hhci0yNDg+CSIg+Aordgk8Y2hhci0yNDk+CSIg+QorCisiIGFjY2VudGVkIGNhcGl0YWwKKztBCTxjaGFyLTE2Mj4JIiCiCis7RQk8Y2hhci0xODQ+CSIguAorO0gJPGNoYXItMTg1PgkiILkKKztJCTxjaGFyLTE4Nj4JIiC6Cis7WQk8Y2hhci0xOTA+CSIgvgorO08JPGNoYXItMTg4PgkiILwKKztWCTxjaGFyLTE5MT4JIiC/CisiCis6SQk8Y2hhci0yMTg+CSIg2gorOlkJPGNoYXItMjE5PgkiINsKKworIiBhY2NlbnRlZCBzbWFsbAorO2EJPGNoYXItMjIwPgkiINwKKztlCTxjaGFyLTIyMT4JIiDdCis7aAk8Y2hhci0yMjI+CSIg3gorO2kJPGNoYXItMjIzPgkiIN8KKzt5CTxjaGFyLTI1Mz4JIiD9Cis7bwk8Y2hhci0yNTI+CSIg/AorO3YJPGNoYXItMjU0PgkiIP4KKyIKKzppCTxjaGFyLTI1MD4JIiD6Cis6eQk8Y2hhci0yNTE+CSIg+worIgorOzppCTxjaGFyLTE5Mj4JIiDACis6O2kJPGNoYXItMTkyPgkiIMAKKzs6eQk8Y2hhci0yMjQ+CSIg4AorOjt5CTxjaGFyLTIyND4JIiDgCisKKyIgc3ltYm9scworcQk7CQkiIDsKK1EJOgkJIiA6CitXCTxjaGFyLTE4Mz4JIiC3Cis7CTxjaGFyLTE4MD4JIiC0Cis6CTxjaGFyLTE2OD4JIiCoCis7Ogk8Y2hhci0xODE+CSIgtQorOjsJPGNoYXItMTgxPgkiILUKKworIiBxdW90ZXMKKzw8CTxjaGFyLTE3MT4JIiCrCis+Pgk8Y2hhci0xODc+CSIguworIiA8Y2hhci0xNjE+CSIgoQorIiA8Y2hhci0xNjI+CSIgogpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvZ3JlZWtfaXNvLTg4NTktNy52aW0gYi9ydW50aW1lL2tleW1hcC9ncmVla19pc28tODg1OS03LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2ZkOTM2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvZ3JlZWtfaXNvLTg4NTktNy52aW0KQEAgLTAsMCArMSwxMTggQEAKKyIgVmltIEtleW1hcCBmaWxlIGZvciBncmVlaworIiBNYWludGFpbmVyOiBHcmlnb3Jpb3MgTWFna2xpcyA8bWFnbGlzQGNzLnJvY2hlc3Rlci5lZHU+CisiIExhc3QgVXBkYXRlZDogVHVlIDEwIEp1bCAyMDAxIDE2OjUwOjUwCisiCisiIFRoaXMga2V5Ym9hcmQgbGF5b3V0IGFsbG93cyBhbGwgR3JlZWsgc3ltYm9scyB0byBiZSB0eXBlZCwKKyIgaW5jbHVkaW5nIGFjY2VudGVkIGNhcGl0YWxzLCBkaWFlcmVzaXMgJiBhY2NlbnQgb24gdGhlIHNhbWUKKyIgdm93ZWwsIGFuZCB0aGUgR3JlZWsgc2VtaWNvbG9uIHNpZ24uCisiCisiIGFjY2VudAkJCSI7IiArIGxldHRlcgorIiBkaWFlcmVzaXMJCQkiOiIgKyBsZXR0ZXIKKyIgZGlhZXJlc2lzICsgYWNjZW50CQkiOyIgKyAiOiIgKG9yICI6IiArICI7IikgKyBsZXR0ZXIKKyIgc2VtaWNvbG9uCQkJInEiCisiIGNvbG9uCQkJCSJRIgorIiBncmVlayBzZW1pY29sb24JCSJXIgorIiBzaWdtYSBhdCBlbmQgb2Ygd29yZAkJInciCisiIGdyZWVrIGxlZnQgZG91YmxlLXF1b3RlCSI8IiB0d2ljZQorIiBncmVlayByaWdodCBkb3VibGUtcXVvdGUJIj4iIHR3aWNlCisKKyIgVXNlIHRoaXMgc2hvcnQgbmFtZSBpbiB0aGUgc3RhdHVzIGxpbmUuCitsZXQgYjprZXltYXBfbmFtZSA9ICJncmVlayIKKworbG9hZGtleW1hcAorIiBjYXBpdGFsCitBCTxjaGFyLTE5Mz4JIiDBCitCCTxjaGFyLTE5ND4JIiDCCitHCTxjaGFyLTE5NT4JIiDDCitECTxjaGFyLTE5Nj4JIiDECitFCTxjaGFyLTE5Nz4JIiDFCitaCTxjaGFyLTE5OD4JIiDGCitICTxjaGFyLTE5OT4JIiDHCitVCTxjaGFyLTIwMD4JIiDICitJCTxjaGFyLTIwMT4JIiDJCitLCTxjaGFyLTIwMj4JIiDKCitMCTxjaGFyLTIwMz4JIiDLCitNCTxjaGFyLTIwND4JIiDMCitOCTxjaGFyLTIwNT4JIiDNCitKCTxjaGFyLTIwNj4JIiDOCitPCTxjaGFyLTIwNz4JIiDPCitQCTxjaGFyLTIwOD4JIiDQCitSCTxjaGFyLTIwOT4JIiDRCitTCTxjaGFyLTIxMT4JIiDTCitUCTxjaGFyLTIxMj4JIiDUCitZCTxjaGFyLTIxMz4JIiDVCitGCTxjaGFyLTIxND4JIiDWCitYCTxjaGFyLTIxNT4JIiDXCitDCTxjaGFyLTIxNj4JIiDYCitWCTxjaGFyLTIxNz4JIiDZCisKKyIgc21hbGwKK2EJPGNoYXItMjI1PgkiIOEKK2IJPGNoYXItMjI2PgkiIOIKK2cJPGNoYXItMjI3PgkiIOMKK2QJPGNoYXItMjI4PgkiIOQKK2UJPGNoYXItMjI5PgkiIOUKK3oJPGNoYXItMjMwPgkiIOYKK2gJPGNoYXItMjMxPgkiIOcKK3UJPGNoYXItMjMyPgkiIOgKK2kJPGNoYXItMjMzPgkiIOkKK2sJPGNoYXItMjM0PgkiIOoKK2wJPGNoYXItMjM1PgkiIOsKK20JPGNoYXItMjM2PgkiIOwKK24JPGNoYXItMjM3PgkiIO0KK2oJPGNoYXItMjM4PgkiIO4KK28JPGNoYXItMjM5PgkiIO8KK3AJPGNoYXItMjQwPgkiIPAKK3IJPGNoYXItMjQxPgkiIPEKK3cJPGNoYXItMjQyPgkiIPIKK3MJPGNoYXItMjQzPgkiIPMKK3QJPGNoYXItMjQ0PgkiIPQKK3kJPGNoYXItMjQ1PgkiIPUKK2YJPGNoYXItMjQ2PgkiIPYKK3gJPGNoYXItMjQ3PgkiIPcKK2MJPGNoYXItMjQ4PgkiIPgKK3YJPGNoYXItMjQ5PgkiIPkKKworIiBhY2NlbnRlZCBjYXBpdGFsCis7QQk8Y2hhci0xODI+CSIgtgorO0UJPGNoYXItMTg0PgkiILgKKztICTxjaGFyLTE4NT4JIiC5Cis7SQk8Y2hhci0xODY+CSIgugorO1kJPGNoYXItMTkwPgkiIL4KKztPCTxjaGFyLTE4OD4JIiC8Cis7Vgk8Y2hhci0xOTE+CSIgvworIgorOkkJPGNoYXItMjE4PgkiINoKKzpZCTxjaGFyLTIxOT4JIiDbCisKKyIgYWNjZW50ZWQgc21hbGwKKzthCTxjaGFyLTIyMD4JIiDcCis7ZQk8Y2hhci0yMjE+CSIg3QorO2gJPGNoYXItMjIyPgkiIN4KKztpCTxjaGFyLTIyMz4JIiDfCis7eQk8Y2hhci0yNTM+CSIg/QorO28JPGNoYXItMjUyPgkiIPwKKzt2CTxjaGFyLTI1ND4JIiD+CisiCis6aQk8Y2hhci0yNTA+CSIg+gorOnkJPGNoYXItMjUxPgkiIPsKKyIKKzs6aQk8Y2hhci0xOTI+CSIgwAorOjtpCTxjaGFyLTE5Mj4JIiDACis7OnkJPGNoYXItMjI0PgkiIOAKKzo7eQk8Y2hhci0yMjQ+CSIg4AorCisiIHN5bWJvbHMKK3EJOwkJIiA7CitRCToJCSIgOgorVwk8Y2hhci0xODM+CSIgtworOwk8Y2hhci0xODA+CSIgtAorOgk8Y2hhci0xNjg+CSIgqAorOzoJPGNoYXItMTgxPgkiILUKKzo7CTxjaGFyLTE4MT4JIiC1CisKKyIgcXVvdGVzCis8PAk8Y2hhci0xNzE+CSIgqworPj4JPGNoYXItMTg3PgkiILsKKyIgPGNoYXItMTYxPgkiIKEKKyIgPGNoYXItMTYyPgkiIKIKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL2dyZWVrX3V0Zi04LnZpbSBiL3J1bnRpbWUva2V5bWFwL2dyZWVrX3V0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWI2N2NmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvZ3JlZWtfdXRmLTgudmltCkBAIC0wLDAgKzEsNjAwIEBACisiIFRoaXMgZmlsZSB3YXMgYWRhcHRlZCBmb3IgVmltIDYgZnJvbSB0aGUgeXVkaXQgZGlzdHJpYnV0aW9uIGJ5CisiIFJvYmVydCBHb3VsZGluZyA8Z291bGRpbmdAcHJpbmNldG9uLmVkdT4KKyIKKyIgVGhlIG1vbm90b25pYyBwYXJ0IG9mIHRoaXMga21hcCB3YXMgbWFkZSBieSBDb25zdGFudGluZSBTdGF0aG9wb3Vsb3MKKyIgPGNzdGF0aEBpcmlzbWVkaWEuZ3I+LgorIiBUaGUgcG9seXRvbmljIHBhcnQgd2FzIG1hZGUgYnkgPGJpcmdlci5sYW5na2plckBpbWFnZS5kaz4gMDQvMTEtMTk5OSwKKyIgQWFyaHVzLCBEZW5tYXJrLgorIiBJdCB3YXMgbW9kaWZpZWQgYW5kIGNvbXBsZXRlZCBieSBBLiBUc29sb21pdGlzIDxhdHNvbEBhZWdlYW4uZ3I+CisiIFRoZSBsaWNlbmNlIGFsbG93cyBtb2RpZmljYXRpb25zIGJ1dCByZWRpc3RyaWJ1dGlvbiBvZiBtb2RpZmljYXRpb25zCisiIHNob3VsZCBiZSB3aXRoIGFuIG90aGVyIG5hbWUuCisiIEFueSBjb21tZW50cyBjYW4gYmUgc2VudCB0byBBLiBUc29sb21pdGlzIDxhdHNvbEBhZWdlYW4uZ3I+CisKKyIgVGhlIGtleW1hcCBub3cgY29uZm9ybXMgd2l0aCB0aGUKKyIgTGFUZVgncy1CYWJlbCBTdGFuZGFyZCBieSBBLiBTeXJvcG91bG9zIDxhcG9zdG9sb0BvY2VhbjEuZWUuZHV0aC5ncj4KKworIiBUaGUgY29udmVudGlvbnMgYXJlIGFzIGZvbGxvd3M6CisiIEVVUk8gU0lHTiBpcyBFJCAoMHgyMEFDKSwKKyIgRHJhY2htYSBzaWduIGlzIEQkICgweDIwQUYpCisKKyIgUklHSFQgYW4gTEVGVCBRVU9UQVRJT04gTUFSS1MgKDB4MDBCQiksICgweDAwQUIpLAorIiBmb2xsb3cgdGhlIGtpa2JkIGNvbnZlbnRpb25zICg7PCBhYmQgOz4pIEFORCA8PCBhbmQgPj4KKworIiBBcG9zdHJvZm9zIGlzIGNvcnJlY3RlZCBpbiBvcmRlciB0byBhZ3JlZSB3aXRoIHRoZSBHcmVlayBncmFtbWFyIHJ1bGVzCisiIG9mIFRyaWFudGFmaWxpZGlzIHdobyByZXF1aXJlcyB0aGUgUFNJTEkgKG9yIEtvcm9uaXMpIHN5bWJvbCBmb3IgYW4KKyIgYXBvc3Ryb3BoZS4KKworIiBUaGUgR3JlZWsgQU5PIFRFTEVJQSAoMHgwMzg3KSwgZm9sbG93cyBhZ2FpbiB0aGUga2lrYmQgY29udmVudGlvbnMgYXMKKyIgd2VsbCBhcyB0aGUgRW1hY3MgY29udmVudGlvbnMuIFNvIGl0IGlzIHByb2R1Y2VkIGJ5IGJvdGggOy4gYW5kIFcKKworIiBBbGwgZ3JlZWsgYWNjZW50cyBhcmUgYWRkZWQgc28gdGhleSBjYW4gYmUgcHJvZHVjZWQgYnkgc2Nob2xhcnMKKyIgd2l0aG91dCBoYXZpbmcgdG8gY29tYmluZSB0aGVtIHdpdGggbGV0dGVycyAodXN1ZnVsbCBmb3IgZ3JhbW1hcmlhbnMKKyIgaW4gcGFydGljdWxhcikgKGVzcGVjaWFsbHkgZm9yIGRhc2lhIGFuZCBwc2lsbiB3ZSB1c2UgJyBmb3IgcHNpbGkKKyIgKHRoYXQgaXMgYXBvc3Ryb3BoZSkgYW5kIDsnIGZvciBkYXNpYS4gVGhpcyBpcyBkb25lIGluIG9yZGVyIHRvCisiIHByZXNlcnZlIHRoZSBwb3NpYmlsaXR5IHRvIHdyaXRlIGEgcGxhaW4gPCBvciA+LgorCisiIFlwb2dlZ3JhbW1lbmkgaXMgfCBmb2xsb3dpbmcgdGhlIGNoYXJhY3RlciAodGhlIG9yaWdpbmFsbHkgcHJvcG9zZWQKKyIgaSBhZnRlciB0aGUgY2hhcmFjdGVyIGlzIHByb2JsZW1hdGljOiBjYW4ndCB3cml0ZSBlYXNpbHkgYWkgb3IgdmkpIDoKKworIiA+IGRhc2lhICIgYW4gb3hpYSBvciBiYXJpYSAqYWx3YXlzKiBzaG91bGQgZm9sbG93IGRhc2lhCisiIDwgcHNpbGkgIiBhbiBveGlhIG9yIGJhcmlhICphbHdheXMqIHNob3VsZCBmb2xsb3cgcHNpbGkKKyIgOyBveGlhCisiIGAgdmFyaWEKKyIgfiBwZXJpc3BvbWVuaQorIiA6IGRpYWx5dGlrYQorIiA6OyBvciA7OiBkaWFseXRpa2Egb3hpYQorIiA6YCBvciBgOiBkaWFseXRpa2EgYmFyaWEKKyIgfHwgYSBzaW5nbGUgeXBvZ2VncmFtbWVuaQorIiB2b3dlbCBmb2xsb3dlZCBieSB8IGdpdmVzIHlwb2dlZ3JhbW1lbmkgdG8gdGhlIHZvd2VsCisiIC12b3dlbCBnaXZlcyB2b3dlbCB3aXRoIG1hY3JvbgorIiBedm93ZWwgZ2l2ZXMgdm93ZWwgd2l0aCBicmF4eQorIiAtLSBlbmRhc2gKKyIgLS0tIGVtZGFzaAorIiA7YiA7cCA7ZiA7dSA7ciA7ayBnaXZlIGFsdGVybmF0aXZlIGZvcm1zCisiICYmIGdpdmUgdGhlIEdyZWVrIGthaSBzeW1ib2wKKyIgI1EgYW5kICNxIGdpdmUgYXJjaGFpYyBRb3BwYSBhbmQgcW9wcGEKKyIgO1UgaXMgY2FwaXRhbCBUaGV0YSBzeW1ib2wKKyIgIWUgYW5kICFFIGFyZSBsdW5hdGUgZXBzaWxvbiBhbmQgRXBzaWxvbgorIiAjU1Qgc3RpZ21hCisiICNTUCBzYW1waQorIiAjRyBkaWdhbW1hCisiICNRIHFvcHBhCisiIDsjIGF2dyB0b3ZvcyAoZm9yIG51bWVyYWxzKQorIiA7IyMga2F0dyB0b3ZvcyAoZm9yIG51bWVyYWxzKQorCisKKyIgQWxsIGFjY2VudHMgYXJlIHN1cHBvcnRlZC4gRXZlbiByaG8gd2l0aCA8IGFuZCA+IGFuZCBSaG8gd2l0aCA8CisiIEFsc28gOn5pIGFuZCA6fnUgYW5kIG1hY3JvbiBhbmQgYnJheHkgYSxpLHUgYW5kIHRoZWlyIGNhcGl0YWxzLgorbGV0IGI6a2V5bWFwX25hbWUgPSAiZ3JrIgorbG9hZGtleW1hcAorIiBQVU5DVFVBVElPTiBNQVJLUyAtIFNZTUJPTFMgKEdSRUVLIFNQRUNJRklDKQorIgorRSQJPGNoYXItMHgyMEFDPiAgIiBFVVJPIFNJR04KKz4+CTxjaGFyLTB4MDBCQj4gICIgUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLIFtHUkVFSworCQkgICAgICAgIiBFSVNBR09HSUtBL09NT0lPTUFUSUtBIC0gREVGSU5JVElPTgorCQkgICAgICAgIiBNSVNTSU5HIEZST00gVU5JQ09ERV0KKzs+CTxjaGFyLTB4MDBCQj4gICIKKzw8CTxjaGFyLTB4MDBBQj4gICIgTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksgW0dSRUVLCisJCSAgICAgICAiIEVJU0FHT0dJS0EgLSBERUZJTklUSU9OIE1JU1NJTkcgRlJPTSBVTklDT0RFXQorOzwJPGNoYXItMHgwMEFCPiAiCitRCTxjaGFyLTB4MDAzQT4gICAiIENPTE9OIFtHUkVFSyBFUEVYSUdJTUFUSUtBIE9SIEFOTyAmIEtBVE8gVEVMRUlBIC0KKwkJCSIgREVGSU5JVElPTiBNSVNTSU5HIEZST00gVU5JQ09ERV0KK3EJPGNoYXItMHgwMzdFPiAgICIgR1JFRUsgUVVFU1RJT04gTUFSSyAoRVJPVElNQVRJS08pCis7Lgk8Y2hhci0weDAzODc+CSIgR1JFRUsgQU5PIFRFTEVJQSAoS0RFL2tpa2JkL1hpbnB1dCBzdGFuZGFyZCkKK1cJPGNoYXItMHgwMzg3PiAgICIgR1JFRUsgQU5PIFRFTEVJQSAoRW1hY3Mgc3RhbmRhcmQpCisnCTxjaGFyLTB4MUZCRD4gICAiIEdSRUVLIEFQT1NUUk9GT1MKKy0tCTxjaGFyLTB4MjAxMz4JIiBlbmRhc2gKKy0tLQk8Y2hhci0weDIwMTQ+CSIgZW1kYXNoCisiCisiIEdSRUVLIERJQUNSSVRJQ1MKKyIKKzoJPGNoYXItMHgwMEE4PiAgICIgRElBRVJFU0lTIFtHUkVFSyBESUFMWVRJS0EgLSBERUZJTklUSU9OIE1JU1NJTkcgRlJPTQorCQkJIiBVTklDT0RFXQorOwk8Y2hhci0weDAzODQ+ICAgIiBHUkVFSyBUT05PUworOjsJPGNoYXItMHgwMzg1PgkiIEdSRUVLIERJQUxZVElLQSBPeGlhCis7Ogk8Y2hhci0weDAzODU+CSIgR1JFRUsgRElBTFlUSUtBIE94aWEKKzpgCTxjaGFyLTB4MUZFRD4JIiBHUkVFSyBESUFMWVRJS0EgVkFSSUEKK2A6CTxjaGFyLTB4MUZFRD4JIiBHUkVFSyBESUFMWVRJS0EgVkFSSUEKK2AJPGNoYXItMHgxRkVGPiAgICIgR3JlZWsgVmFyaWEKK34JPGNoYXItMHgxRkMwPiAgICIgUGVyaXNwb21lbmkKKz5gCTxjaGFyLTB4MUZDRD4JIiBQc2lsaSBWYXJpYQorPGAJPGNoYXItMHgxRkREPgkiIERhc2lhIFZhcmlhCis+Owk8Y2hhci0weDFGQ0U+CSIgUHNpbGkgT3hpYQorPDsJPGNoYXItMHgxRkRFPgkiIERhc2lhIE94aWEKKzx+CTxjaGFyLTB4MUZERj4JIiBEYXNpYSBQZXJpc3BvbWVuaQorPn4JPGNoYXItMHgxRkNGPgkiIFBzaWxpIFBlcmlzcG9tZW5pCisiRm9yIHBsYWluIHBzaWxpIHVzZSBhcG9zdHJvcGhlCis7Jwk8Y2hhci0weDFGRkU+CSIgKFBsYWluKSBkYXNpYQorCisKKyIKKyIgR1JFRUsgTEVUVEVSUworIgorQQk8Y2hhci0weDAzOTE+ICAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQQorQgk8Y2hhci0weDAzOTI+ICAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBCRVRBCitHCTxjaGFyLTB4MDM5Mz4gICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEdBTU1BCitECTxjaGFyLTB4MDM5ND4gICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIERFTFRBCitFCTxjaGFyLTB4MDM5NT4gICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04KK1oJPGNoYXItMHgwMzk2PiAgICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgWkVUQQorSAk8Y2hhci0weDAzOTc+ICAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEKK1UJPGNoYXItMHgwMzk4PiAgICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVEhFVEEKK0kJPGNoYXItMHgwMzk5PiAgICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQQorSwk8Y2hhci0weDAzOUE+ICAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBLQVBQQQorTAk8Y2hhci0weDAzOUI+ICAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBMQU1EQQorTQk8Y2hhci0weDAzOUM+ICAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBNVQorTgk8Y2hhci0weDAzOUQ+ICAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBOVQorSgk8Y2hhci0weDAzOUU+ICAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBYSQorTwk8Y2hhci0weDAzOUY+ICAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUlLUk9OCitQCTxjaGFyLTB4MDNBMD4gICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIFBJCitSCTxjaGFyLTB4MDNBMT4gICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIFJITworIlcJPGNoYXItMHgwM0EzPiAgICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgU0lHTUEgW0NBUElUQUwgQU5BTE9HVUUgRk9SCisJCQkiIFNNQUxMIExFVFRFUiBGSU5BTCBTSUdNQV0KK1MJPGNoYXItMHgwM0EzPiAgICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgU0lHTUEKK1QJPGNoYXItMHgwM0E0PiAgICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVEFVCitZCTxjaGFyLTB4MDNBNT4gICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIFVQU0lMT04KK0YJPGNoYXItMHgwM0E2PiAgICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgUEhJCitYCTxjaGFyLTB4MDNBNz4gICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIENISQorQwk8Y2hhci0weDAzQTg+ICAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBQU0kKK1YJPGNoYXItMHgwM0E5PiAgICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EKK2EJPGNoYXItMHgwM0IxPiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBCitiCTxjaGFyLTB4MDNCMj4gICAiIEdSRUVLIFNNQUxMIExFVFRFUiBCRVRBCitnCTxjaGFyLTB4MDNCMz4gICAiIEdSRUVLIFNNQUxMIExFVFRFUiBHQU1NQQorZAk8Y2hhci0weDAzQjQ+ICAgIiBHUkVFSyBTTUFMTCBMRVRURVIgREVMVEEKK2UJPGNoYXItMHgwM0I1PiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04KK3oJPGNoYXItMHgwM0I2PiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIFpFVEEKK2gJPGNoYXItMHgwM0I3PiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIEVUQQordQk8Y2hhci0weDAzQjg+ICAgIiBHUkVFSyBTTUFMTCBMRVRURVIgVEhFVEEKK2kJPGNoYXItMHgwM0I5PiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEKK2sJPGNoYXItMHgwM0JBPiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIEtBUFBBCitsCTxjaGFyLTB4MDNCQj4gICAiIEdSRUVLIFNNQUxMIExFVFRFUiBMQU1EQQorbQk8Y2hhci0weDAzQkM+ICAgIiBHUkVFSyBTTUFMTCBMRVRURVIgTVUKK24JPGNoYXItMHgwM0JEPiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIE5VCitqCTxjaGFyLTB4MDNCRT4gICAiIEdSRUVLIFNNQUxMIExFVFRFUiBYSQorbwk8Y2hhci0weDAzQkY+ICAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTgorcAk8Y2hhci0weDAzQzA+ICAgIiBHUkVFSyBTTUFMTCBMRVRURVIgUEkKK3IJPGNoYXItMHgwM0MxPiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIFJITwordwk8Y2hhci0weDAzQzI+ICAgIiBHUkVFSyBTTUFMTCBMRVRURVIgRklOQUwgU0lHTUEKK3MJPGNoYXItMHgwM0MzPiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIFNJR01BCit0CTxjaGFyLTB4MDNDND4gICAiIEdSRUVLIFNNQUxMIExFVFRFUiBUQVUKK3kJPGNoYXItMHgwM0M1PiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04KK2YJPGNoYXItMHgwM0M2PiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIFBISQoreAk8Y2hhci0weDAzQzc+ICAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQ0hJCitjCTxjaGFyLTB4MDNDOD4gICAiIEdSRUVLIFNNQUxMIExFVFRFUiBQU0kKK3YJPGNoYXItMHgwM0M5PiAgICIgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBCisiCisiQ09NQklORUQgR1JFRUsgTEVUVEVSUyBXSVRIIERJQUNSSVRJQ1MKKyIKKztBCTxjaGFyLTB4MDM4Nj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBUT05PUworO0UJPGNoYXItMHgwMzg4PiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggVE9OT1MKKztICTxjaGFyLTB4MDM4OT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggVE9OT1MKKztJCTxjaGFyLTB4MDM4QT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFRPTk9TCis7Twk8Y2hhci0weDAzOEM+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBUT05PUworO1kJPGNoYXItMHgwMzhFPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggVE9OT1MKKztWCTxjaGFyLTB4MDM4Rj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBUT05PUworOjtpCTxjaGFyLTB4MDM5MD4gICIgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EgQU5EIFRPTk9TCis7OmkJPGNoYXItMHgwMzkwPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERJQUxZVElLQSBBTkQgVE9OT1MKKzpgaQk8Y2hhci0weDFGRDI+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBiYXJpYQorYDppCTxjaGFyLTB4MUZEMj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EgQU5EIGJhcmlhCis6SQk8Y2hhci0weDAzQUE+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EKKzpZCTxjaGFyLTB4MDNBQj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQQorO2EJPGNoYXItMHgwM0FDPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBUT05PUworO2UJPGNoYXItMHgwM0FEPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIFRPTk9TCis7aAk8Y2hhci0weDAzQUU+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBUT05PUworO2kJPGNoYXItMHgwM0FGPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFRPTk9TCis6O3kJPGNoYXItMHgwM0IwPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQSBBTkQgVE9OT1MKKzs6eQk8Y2hhci0weDAzQjA+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggRElBTFlUSUtBIEFORCBUT05PUworOmB5CTxjaGFyLTB4MUZFMj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EgQU5EIGJhcmlhCitgOnkJPGNoYXItMHgxRkUyPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQSBBTkQgYmFyaWEKKzppCTxjaGFyLTB4MDNDQT4gICIgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EKKzp5CTxjaGFyLTB4MDNDQj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EKKztvCTxjaGFyLTB4MDNDQz4gICIgR1JFRUsgU01BTEwgTEVUVEVSIE9NSUNST04gV0lUSCBUT05PUworO3kJPGNoYXItMHgwM0NEPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFRPTk9TCis7dgk8Y2hhci0weDAzQ0U+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFRPTk9TCisKKworCisiCisiIGxldHRlcnMgd2l0aCBWYXJpYToKKyIKK2BBCTxjaGFyLTB4MUZCQT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBWQVJJQQorYEUJPGNoYXItMHgxRkM4PiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFZBUklBCitgSAk8Y2hhci0weDFGQ0E+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFZBUklBCitgSQk8Y2hhci0weDFGREE+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIElPVEEgV0lUSCBWQVJJQQorYE8JPGNoYXItMHgxRkY4PiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFZBUklBCitgWQk8Y2hhci0weDFGRUE+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggVkFSSUEKK2BWCTxjaGFyLTB4MUZGQT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBWQVJJQQorYGEJPGNoYXItMHgxRjcwPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBWQVJJQQorYGUJPGNoYXItMHgxRjcyPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBWQVJJQQorYGgJPGNoYXItMHgxRjc0PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggVkFSSUEKK2BpCTxjaGFyLTB4MUY3Nj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBWQVJJQQorYG8JPGNoYXItMHgxRjc4PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBWQVJJQQorYHkJPGNoYXItMHgxRjdBPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBWQVJJQQorYHYJPGNoYXItMHgxRjdDPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBWQVJJQQorIgorIiBsZXR0ZXJzIHdpdGggT3hpYToKKyIKKztBCTxjaGFyLTB4MUZCQj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBPWElBCis7RQk8Y2hhci0weDFGQzk+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBPWElBCis7SAk8Y2hhci0weDFGQ0I+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIE9YSUEKKztJCTxjaGFyLTB4MUZEQj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIE9YSUEKKztPCTxjaGFyLTB4MUZGOT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIE9YSUEKKztZCTxjaGFyLTB4MUZFQj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIE9YSUEKKztWCTxjaGFyLTB4MUZGQj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBPWElBCis7YQk8Y2hhci0weDFGNzE+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIE9YSUEKKztlCTxjaGFyLTB4MUY3Mz4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBPWElBCis7aAk8Y2hhci0weDFGNzU+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBPWElBCis7aQk8Y2hhci0weDFGNzc+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggT1hJQQorO28JPGNoYXItMHgxRjc5PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIE9YSUEKKzt5CTxjaGFyLTB4MUY3Qj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBPWElBCis7dgk8Y2hhci0weDFGN0Q+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIE9YSUEKKyIKKyIKKyIgVGhpcyBhcmVhIGNvdmVycyAweDFGMDAtMHgxRjZGCisiCisiIGxldHRlcnMgd2l0aCBQc2lsaToKKyIKKz5BCTxjaGFyLTB4MUYwOD4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSQorPkUJPGNoYXItMHgxRjE4PiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggUFNJTEkKKz5ICTxjaGFyLTB4MUYyOD4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggUFNJTEkKKz5JCTxjaGFyLTB4MUYzOD4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJCis+Twk8Y2hhci0weDFGNDg+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBQU0lMSQorPlkJPGNoYXItMHgxRjU4PiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggUFNJTEkKKz5WCTxjaGFyLTB4MUY2OD4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSQorPmEJPGNoYXItMHgxRjAwPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSQorPmUJPGNoYXItMHgxRjEwPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIFBTSUxJCis+aAk8Y2hhci0weDFGMjA+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQU0lMSQorPmkJPGNoYXItMHgxRjMwPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJCis+bwk8Y2hhci0weDFGNDA+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OIFdJVEggUFNJTEkKKz55CTxjaGFyLTB4MUY1MD4gICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBQU0lMSQorPnYJPGNoYXItMHgxRjYwPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSQorCisiCisiIExldHRlcnMgd2l0aCBEYXNpYToKKyIKKzxBCTxjaGFyLTB4MUYwOT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQQorPEUJPGNoYXItMHgxRjE5PiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggREFTSUEKKzxICTxjaGFyLTB4MUYyOT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggREFTSUEKKzxJCTxjaGFyLTB4MUYzOT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBCis8Twk8Y2hhci0weDFGNDk+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBEQVNJQQorPFkJPGNoYXItMHgxRjU5PiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBVUFNJTE9OIFdJVEggREFTSUEKKzxWCTxjaGFyLTB4MUY2OT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQQorPGEJPGNoYXItMHgxRjAxPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQQorPGUJPGNoYXItMHgxRjExPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiBXSVRIIERBU0lBCis8aAk8Y2hhci0weDFGMjE+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQQorPGkJPGNoYXItMHgxRjMxPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBCis8bwk8Y2hhci0weDFGNDE+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUlDUk9OIFdJVEggREFTSUEKKzx5CTxjaGFyLTB4MUY1MT4gICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQQorPHYJPGNoYXItMHgxRjYxPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQQorIgorIiBsZXR0ZXJzIHdpdGggUHNpbGkgYW5kIFZhcmlhOgorIgorPmBBCTxjaGFyLTB4MUYwQT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEKKz5gRQk8Y2hhci0weDFGMUE+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBQU0lMSSBBTkQgVkFSSUEKKz5gSAk8Y2hhci0weDFGMkE+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBWQVJJQQorPmBJCTxjaGFyLTB4MUYzQT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJIEFORCBWQVJJQQorPmBPCTxjaGFyLTB4MUY0QT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBWQVJJQQorPmBZCTxjaGFyLTB4MUY1QT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIFBTSUxJIEFORCBWQVJJQQorPmBWCTxjaGFyLTB4MUY2QT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgVkFSSUEKKz5gYQk8Y2hhci0weDFGMDI+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBWQVJJQQorPmBlCTxjaGFyLTB4MUYxMj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBQU0lMSSBBTkQgVkFSSUEKKz5gaAk8Y2hhci0weDFGMjI+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEKKz5gaQk8Y2hhci0weDFGMzI+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggUFNJTEkgQU5EIFZBUklBCis+YG8JPGNoYXItMHgxRjQyPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBWQVJJQQorPmB5CTxjaGFyLTB4MUY1Mj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBQU0lMSSBBTkQgVkFSSUEKKz5gdgk8Y2hhci0weDFGNjI+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBWQVJJQQorIgorIiBMZXR0ZXJzIHdpdGggRGFzaWEgYW5kIFZhcmlhOgorIgorPGBBCTxjaGFyLTB4MUYwQj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxgRQk8Y2hhci0weDFGMUI+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxgSAk8Y2hhci0weDFGMkI+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBWQVJJQQorPGBJCTxjaGFyLTB4MUYzQj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBIEFORCBWQVJJQQorPGBPCTxjaGFyLTB4MUY0Qj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBIEFORCBWQVJJQQorPGBZCTxjaGFyLTB4MUY1Qj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIERBU0lBIEFORCBWQVJJQQorPGBWCTxjaGFyLTB4MUY2Qj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxgYQk8Y2hhci0weDFGMDM+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBWQVJJQQorPGBlCTxjaGFyLTB4MUYxMz4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxgaAk8Y2hhci0weDFGMjM+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxgaQk8Y2hhci0weDFGMzM+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggREFTSUEgQU5EIFZBUklBCis8YG8JPGNoYXItMHgxRjQzPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBIEFORCBWQVJJQQorPGB5CTxjaGFyLTB4MUY1Mz4gICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgVkFSSUEKKzxgdgk8Y2hhci0weDFGNjM+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBWQVJJQQorIgorIiBsZXR0ZXJzIHdpdGggUHNpbGkgYW5kIE94aWE6CisiCis+O0EJPGNoYXItMHgxRjBDPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBPWElBCis+O0UJPGNoYXItMHgxRjFDPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggUFNJTEkgQU5EIE9YSUEKKz47SAk8Y2hhci0weDFGMkM+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBPWElBCis+O0kJPGNoYXItMHgxRjNDPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggUFNJTEkgQU5EIE9YSUEKKz47Twk8Y2hhci0weDFGNEM+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBQU0lMSSBBTkQgT1hJQQorPjtZCTxjaGFyLTB4MUY1Qz4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIFBTSUxJIEFORCBPWElBCis+O1YJPGNoYXItMHgxRjZDPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBPWElBCis+O2EJPGNoYXItMHgxRjA0PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgT1hJQQorPjtlCTxjaGFyLTB4MUYxND4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBQU0lMSSBBTkQgT1hJQQorPjtoCTxjaGFyLTB4MUYyND4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBPWElBCis+O2kJPGNoYXItMHgxRjM0PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJIEFORCBPWElBCis+O28JPGNoYXItMHgxRjQ0PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBPWElBCis+O3kJPGNoYXItMHgxRjU0PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIFBTSUxJIEFORCBPWElBCis+O3YJPGNoYXItMHgxRjY0PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgT1hJQQorIgorIiBMZXR0ZXJzIHdpdGggRGFzaWEgYW5kIE94aWE6CisiCis8O0EJPGNoYXItMHgxRjBEPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBPWElBCis8O0UJPGNoYXItMHgxRjFEPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBFUFNJTE9OIFdJVEggREFTSUEgQU5EIE9YSUEKKzw7SAk8Y2hhci0weDFGMkQ+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBCis8O0kJPGNoYXItMHgxRjNEPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBJT1RBIFdJVEggREFTSUEgQU5EIE9YSUEKKzw7Twk8Y2hhci0weDFGNEQ+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NSUNST04gV0lUSCBEQVNJQSBBTkQgT1hJQQorPDtZCTxjaGFyLTB4MUY1RD4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIERBU0lBIEFORCBPWElBCis8O1YJPGNoYXItMHgxRjZEPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBPWElBCis8O2EJPGNoYXItMHgxRjA1PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgT1hJQQorPDtlCTxjaGFyLTB4MUYxNT4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQSBBTkQgT1hJQQorPDtoCTxjaGFyLTB4MUYyNT4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBCis8O2kJPGNoYXItMHgxRjM1PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBIEFORCBPWElBCis8O28JPGNoYXItMHgxRjQ1PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBIEFORCBPWElBCis8O3kJPGNoYXItMHgxRjU1PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERBU0lBIEFORCBPWElBCis8O3YJPGNoYXItMHgxRjY1PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgT1hJQQorIgorIiBsZXR0ZXJzIHdpdGggUHNpbGkgYW5kIFBlcmlzcG9tZW5pOgorIgorPn5BCTxjaGFyLTB4MUYwRT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkKKz5+RQk8Y2hhci0weDFGMUU+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkKKz5+SAk8Y2hhci0weDFGMkU+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorPn5JCTxjaGFyLTB4MUYzRT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorPn5PCTxjaGFyLTB4MUY0RT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorPn5ZCTxjaGFyLTB4MUY1RT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorPn5WCTxjaGFyLTB4MUY2RT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkKKz5+YQk8Y2hhci0weDFGMDY+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorPn5lCTxjaGFyLTB4MUYxNj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkKKz5+aAk8Y2hhci0weDFGMjY+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkKKz5+aQk8Y2hhci0weDFGMzY+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JCis+fm8JPGNoYXItMHgxRjQ2PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorPn55CTxjaGFyLTB4MUY1Nj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkKKz5+dgk8Y2hhci0weDFGNjY+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorIgorIiBMZXR0ZXJzIHdpdGggRGFzaWEgYW5kIFBlcmlzcG9tZW5pOgorIgorPH5BCTxjaGFyLTB4MUYwRj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKzx+RQk8Y2hhci0weDFGMUY+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKzx+SAk8Y2hhci0weDFGMkY+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorPH5JCTxjaGFyLTB4MUYzRj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgSU9UQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorPH5PCTxjaGFyLTB4MUY0Rj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorPH5ZCTxjaGFyLTB4MUY1Rj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgVVBTSUxPTiBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorPH5WCTxjaGFyLTB4MUY2Rj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKzx+YQk8Y2hhci0weDFGMDc+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorPH5lCTxjaGFyLTB4MUYxNz4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04gV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKzx+aAk8Y2hhci0weDFGMjc+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKzx+aQk8Y2hhci0weDFGMzc+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JCis8fm8JPGNoYXItMHgxRjQ3PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01JQ1JPTiBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorPH55CTxjaGFyLTB4MUY1Nz4gICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKzx+dgk8Y2hhci0weDFGNjc+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorIgorIgorIgorIiBsZXR0ZXJzIHdpdGggWXBvZ2VncmFtbWVuaS9Qcm9zZ2VncmFtbWVuaToKKyIKK0F8CTxjaGFyLTB4MUZCQz4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQUk9TR0VHUkFNTUVOSQorSHwJPGNoYXItMHgxRkNDPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBQUk9TR0VHUkFNTUVOSQorVnwJPGNoYXItMHgxRkZDPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBST1NHRUdSQU1NRU5JCithfAk8Y2hhci0weDFGQjM+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFlQT0dFR1JBTU1FTkkKK2h8CTxjaGFyLTB4MUZDMz4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFlQT0dFR1JBTU1FTkkKK3Z8CTxjaGFyLTB4MUZGMz4gICIgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggWVBPR0VHUkFNTUVOSQorIgorIgorIiBUaGlzIGFyZWEgY292ZXJzIDB4MUY4MC0weDFGQUYKKyIKKyIgbGV0dGVycyB3aXRoIFBzaWxpIGFuZCBZcG9nZWdyYW1tZW5pL1Byb3NnZWdyYW1tZW5pOgorIgorPkF8CTxjaGFyLTB4MUY4OD4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQKKwkJICAgICAgICIgUFJPU0dFR1JBTU1FTkkKKz5IfAk8Y2hhci0weDFGOTg+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBQUk9TR0VHUkFNTUVOSQorPlZ8CTxjaGFyLTB4MUZBOD4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQKKwkJICAgICAgICIgUFJPU0dFR1JBTU1FTkkKKz5hfAk8Y2hhci0weDFGODA+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBTSUxJIEFORCBZUE9HRUdSQU1NRU5JCis+aHwJPGNoYXItMHgxRjkwPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFlQT0dFR1JBTU1FTkkKKz52fAk8Y2hhci0weDFGQTA+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBZUE9HRUdSQU1NRU5JCisiCisiIGxldHRlcnMgd2l0aCBEYXNpYSBhbmQgWXBvZ2VncmFtbWVuaS9Qcm9zZ2VncmFtbWVuaToKKyIKKzxBfAk8Y2hhci0weDFGODk+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5ECisJCSAgICAgICAiIFBST1NHRUdSQU1NRU5JCis8SHwJPGNoYXItMHgxRjk5PiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgUFJPU0dFR1JBTU1FTkkKKzxWfAk8Y2hhci0weDFGQTk+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5ECisJCSAgICAgICAiIFBST1NHRUdSQU1NRU5JCis8YXwJPGNoYXItMHgxRjgxPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgWVBPR0VHUkFNTUVOSQorPGh8CTxjaGFyLTB4MUY5MT4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBZUE9HRUdSQU1NRU5JCis8dnwJPGNoYXItMHgxRkExPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgWVBPR0VHUkFNTUVOSQorIgorIiBsZXR0ZXJzIHdpdGggUHNpbGkgYW5kIFZhcmlhIGFuZCBZcG9nZWdyYW1tZW5pL1Byb3NnZWdyYW1tZW5pOgorIgorPmBBfAk8Y2hhci0weDFGOEE+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFZBUklBIEFORAorCQkgICAgICAgIiBQUk9TR0VHUkFNTUVOSQorPmBIfAk8Y2hhci0weDFGOUE+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBWQVJJQSBBTkQKKwkJICAgICAgICIgUFJPU0dFR1JBTU1FTkkKKz5gVnwJPGNoYXItMHgxRkFBPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBWQVJJQSBBTkQKKwkJICAgICAgICIgUFJPU0dFR1JBTU1FTkkKKz5gYXwJPGNoYXItMHgxRjgyPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgVkFSSUEgQU5ECisJCSAgICAgICAiIFlQT0dFR1JBTU1FTkkKKz5gaHwJPGNoYXItMHgxRjkyPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIFZBUklBIEFORAorCQkgICAgICAgIiBZUE9HRUdSQU1NRU5JCis+YHZ8CTxjaGFyLTB4MUZBMj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUFNJTEkgQU5EIFZBUklBIEFORAorCQkgICAgICAgIiBZUE9HRUdSQU1NRU5JCisiCisiIGxldHRlcnMgd2l0aCBEYXNpYSBhbmQgVmFyaWEgYW5kIFlwb2dlZ3JhbW1lbmkvUHJvc2dlZ3JhbW1lbmk6CisiCis8YEF8CTxjaGFyLTB4MUY4Qj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5ECisJCSAgICAgICAiIFBST1NHRUdSQU1NRU5JCis8YEh8CTxjaGFyLTB4MUY5Qj4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFZBUklBIEFORAorCQkgICAgICAgIiBQUk9TR0VHUkFNTUVOSQorPGBWfAk8Y2hhci0weDFGQUI+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIFZBUklBIEFORAorCQkgICAgICAgIiBQUk9TR0VHUkFNTUVOSQorPGBhfAk8Y2hhci0weDFGODM+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBWQVJJQSBBTkQKKwkJICAgICAgICIgWVBPR0VHUkFNTUVOSQorPGBofAk8Y2hhci0weDFGOTM+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5ECisJCSAgICAgICAiIFlQT0dFR1JBTU1FTkkKKzxgdnwJPGNoYXItMHgxRkEzPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgVkFSSUEgQU5ECisJCSAgICAgICAiIFlQT0dFR1JBTU1FTkkKKyIKKyIgbGV0dGVycyB3aXRoIFBzaWxpIGFuZCBPeGlhIGFuZCBZcG9nZWdyYW1tZW5pL1Byb3NnZWdyYW1tZW5pOgorIgorPjtBfAk8Y2hhci0weDFGOEM+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIE9YSUEgQU5ECisJCSAgICAgICAiIFBST1NHRUdSQU1NRU5JCis+O0h8CTxjaGFyLTB4MUY5Qz4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgRVRBIFdJVEggUFNJTEkgQU5EIE9YSUEgQU5ECisJCSAgICAgICAiIFBST1NHRUdSQU1NRU5JCis+O1Z8CTxjaGFyLTB4MUZBQz4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQKKwkJICAgICAgICIgUFJPU0dFR1JBTU1FTkkKKz47YXwJPGNoYXItMHgxRjg0PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQKKwkJICAgICAgICIgWVBPR0VHUkFNTUVOSQorPjtofAk8Y2hhci0weDFGOTQ+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBQU0lMSSBBTkQgT1hJQSBBTkQKKwkJICAgICAgICIgWVBPR0VHUkFNTUVOSQorPjt2fAk8Y2hhci0weDFGQTQ+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBPWElBIEFORAorCQkgICAgICAgIiBZUE9HRUdSQU1NRU5JCisiCisiIGxldHRlcnMgd2l0aCBEYXNpYSBhbmQgT3hpYSBhbmQgWXBvZ2VncmFtbWVuaS9Qcm9zZ2VncmFtbWVuaToKKyIKKzw7QXwJPGNoYXItMHgxRjhEPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBBTFBIQSBXSVRIIERBU0lBIEFORCBPWElBIEFORAorCQkgICAgICAgIiBQUk9TR0VHUkFNTUVOSQorPDtIfAk8Y2hhci0weDFGOUQ+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBPWElBIEFORAorCQkgICAgICAgIiBQUk9TR0VHUkFNTUVOSQorPDtWfAk8Y2hhci0weDFGQUQ+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5ECisJCSAgICAgICAiIFBST1NHRUdSQU1NRU5JCis8O2F8CTxjaGFyLTB4MUY4NT4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5ECisJCSAgICAgICAiIFlQT0dFR1JBTU1FTkkKKzw7aHwJPGNoYXItMHgxRjk1PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIE9YSUEgQU5ECisJCSAgICAgICAiIFlQT0dFR1JBTU1FTkkKKzw7dnwJPGNoYXItMHgxRkE1PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBEQVNJQSBBTkQgT1hJQSBBTkQKKwkJICAgICAgICIgWVBPR0VHUkFNTUVOSQorIgorIiBsZXR0ZXJzIHdpdGggUHNpbGkgYW5kIFBlcmlzcG9tZW5pIGFuZCBZcG9nZWdyYW1tZW5pL1Byb3NnZWdyYW1tZW5pOgorIgorPn5BfAk8Y2hhci0weDFGOEU+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JCisJCSAgICAgICAiIEFORCBQUk9TR0VHUkFNTUVOSQorPn5IfAk8Y2hhci0weDFGOUU+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBPWElBCisJCSAgICAgICAiIFBFUklTUE9NRU5JIFBST1NHRUdSQU1NRU5JCis+flZ8CTxjaGFyLTB4MUZBRT4gICIgR1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0EgV0lUSCBQU0lMSSBBTkQgUEVSSVNQT01FTkkKKwkJICAgICAgICIgQU5EIFBST1NHRUdSQU1NRU5JCis+fmF8CTxjaGFyLTB4MUY4Nj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggUFNJTEkgQU5EIFBFUklTUE9NRU5JCisJCSAgICAgICAiIEFORCBZUE9HRUdSQU1NRU5JCis+fmh8CTxjaGFyLTB4MUY5Nj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSSBBTkQKKwkJICAgICAgICIgWVBPR0VHUkFNTUVOSQorPn52fAk8Y2hhci0weDFGQTY+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBPTUVHQSBXSVRIIFBTSUxJIEFORCBQRVJJU1BPTUVOSQorCQkgICAgICAgIiBBTkQgWVBPR0VHUkFNTUVOSQorIgorIiBsZXR0ZXJzIHdpdGggRGFzaWEgYW5kIFBlcmlzcG9tZW5pIGFuZCBZcG9nZWdyYW1tZW5pL1Byb3NnZWdyYW1tZW5pOgorIgorPH5BfAk8Y2hhci0weDFGOEY+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEFMUEhBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JCisJCSAgICAgICAiIEFORCBQUk9TR0VHUkFNTUVOSQorPH5IfAk8Y2hhci0weDFGOUY+ICAiIEdSRUVLIENBUElUQUwgTEVUVEVSIEVUQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorCQkgICAgICAgIiBBTkQgUFJPU0dFR1JBTU1FTkkKKzx+VnwJPGNoYXItMHgxRkFGPiAgIiBHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQSBXSVRIIERBU0lBIEFORCBQRVJJU1BPTUVOSQorCQkgICAgICAgIiBBTkQgUFJPU0dFR1JBTU1FTkkKKzx+YXwJPGNoYXItMHgxRjg3PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBEQVNJQSBBTkQgUEVSSVNQT01FTkkKKwkJICAgICAgICIgQU5EIFlQT0dFR1JBTU1FTkkKKzx+aHwJPGNoYXItMHgxRjk3PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgRVRBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JIEFORAorCQkgICAgICAgIiBZUE9HRUdSQU1NRU5JCis8fnZ8CTxjaGFyLTB4MUZBNz4gICIgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggREFTSUEgQU5EIFBFUklTUE9NRU5JCisJCSAgICAgICAiIEFORCBZUE9HRUdSQU1NRU5JCisiCisiIGxldHRlcnMgd2l0aCBQZXJpc3BvbWVuaToKKyIKK35hCTxjaGFyLTB4MUZCNj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBIFdJVEggUEVSSVNQT01FTkkKK35oCTxjaGFyLTB4MUZDNj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBFUklTUE9NRU5JCit+aQk8Y2hhci0weDFGRDY+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggUEVSSVNQT01FTkkKK355CTxjaGFyLTB4MUZFNj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBQRVJJU1BPTUVOSQorfnYJPGNoYXItMHgxRkY2PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBQRVJJU1BPTUVOSQorIgorIiBsZXR0ZXJzIHdpdGggUGVyaXNwb21lbmkgYW5kIFlwb2dlZ3JhbW1lbmk6CisiCit+YXwJPGNoYXItMHgxRkI3PiAiIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIFBFUklTUE9NRU5JIEFORAorCQkgICAgICAiIFlQT0dFR1JBTU1FTkkKK35ofAk8Y2hhci0weDFGQzc+ICIgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFBFUklTUE9NRU5JIEFORAorCQkgICAgICAiIFlQT0dFR1JBTU1FTkkKK352fAk8Y2hhci0weDFGRjc+ICIgR1JFRUsgU01BTEwgTEVUVEVSIE9NRUdBIFdJVEggUEVSSVNQT01FTkkgQU5ECisJCSAgICAgICIgWVBPR0VHUkFNTUVOSQorIgorIgorIiBsZXR0ZXJzIHdpdGggVmFyaWEgYW5kIFlwb2dlZ3JhbW1lbmk6CisiCitgYXwJPGNoYXItMHgxRkIyPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEEgV0lUSCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorYGh8CTxjaGFyLTB4MUZDMj4gICIgR1JFRUsgU01BTEwgTEVUVEVSIEVUQSBXSVRIIFZBUklBIEFORCBZUE9HRUdSQU1NRU5JCitgdnwJPGNoYXItMHgxRkYyPiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBWQVJJQSBBTkQgWVBPR0VHUkFNTUVOSQorIgorIiBsZXR0ZXJzIHdpdGggT3hpYSBhbmQgWXBvZ2VncmFtbWVuaToKKyIKKzthfAk8Y2hhci0weDFGQjQ+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBBTFBIQSBXSVRIIE9YSUEgQU5EIFlQT0dFR1JBTU1FTkkKKztofAk8Y2hhci0weDFGQzQ+ICAiIEdSRUVLIFNNQUxMIExFVFRFUiBFVEEgV0lUSCBPWElBIEFORCBZUE9HRUdSQU1NRU5JCis7dnwJPGNoYXItMHgxRkY0PiAgIiBHUkVFSyBTTUFMTCBMRVRURVIgT01FR0EgV0lUSCBPWElBIEFORCBZUE9HRUdSQU1NRU5JCisiCisiCisiIENvbWJpbmluZy9Ob25zcGFjaW5nIGNvbW1hIGFib3ZlICgweDAzMTMpIGluc3RlYWQgb2YgUHNpbGk6CisiCis+LAk8Y2hhci0weDAzMTM+ICAgIiBDT01CSU5JTkcgQ09NTUEgQUJPVkUKKyIKKyIgQ29tYmluaW5nL05vbnNwYWNpbmcgcmV2ZXJzZWQgY29tbWEgYWJvdmUgKDB4MDMxNCkgaW5zdGVhZCBvZiBEYXNpYToKKyIKKzwsCTxjaGFyLTB4MDMxND4gICAiIENPTUJJTklORyBSRVZFUlNFRCBDT01NQSBBQk9WRQorIgorIgorIiBHcmVlayBRdW90ZXMgaWYgeW91ciBrZXlib2FyZCBzdXBwb3J0cyB0aGVtCiu0CTxjaGFyLTB4MjAxQz4gICAgIiBRVU9URURCTExFRlQKK6oJPGNoYXItMHgyMDFEPiAgICAiIFFVT1RFREJMUklHSFQKKyIKKyIKKyIKKworCisiIEFQUEVORElYIEEgLSBBZGRpdGlvbmFsIGNoYXJhY3RlcnMKKyIKKyIKKzsjCTxjaGFyLTB4MDM3ND4gICIgR1JFRUsgTlVNRVJBTCBTSUdOCis7IyMJPGNoYXItMHgwMzc1PiAgIiBHUkVFSyBMT1dFUiBOVU1FUkFMIFNJR04KK3x8CTxjaGFyLTB4MDM3QT4gICIgR1JFRUsgWVBPR0VHUkFNTUVOSQorO2IJPGNoYXItMHgwM0QwPiAgIiBHUkVFSyBCRVRBIFNZTUJPTAorO3UJPGNoYXItMHgwM0QxPiAgIiBHUkVFSyBUSEVUQSBTWU1CT0wKKyIJPGNoYXItMHgwM0QyPiAgIiBHUkVFSyBVUFNJTE9OIFdJVEggSE9PSyBTWU1CT0wKKyIJPGNoYXItMHgwM0QzPiAgIiBHUkVFSyBVUFNJTE9OIFdJVEggQUNVVEUgQU5EIEhPT0sgU1lNQk9MCisiCTxjaGFyLTB4MDNEND4gICIgR1JFRUsgVVBTSUxPTiBXSVRIIERJQUVSRVNJUyBBTkQgSE9PSyBTWU1CT0wKKztmCTxjaGFyLTB4MDNENT4gICIgR1JFRUsgUEhJIFNZTUJPTAorO3AJPGNoYXItMHgwM0Q2PiAgIiBHUkVFSyBQSSBTWU1CT0wKKyNTVAk8Y2hhci0weDAzREE+ICAiIEdSRUVLIExFVFRFUiBTVElHTUEKKyNHCTxjaGFyLTB4MDNEQz4gICIgR1JFRUsgTEVUVEVSIERJR0FNTUEKKyNRCTxjaGFyLTB4MDNERT4gICIgR1JFRUsgTEVUVEVSIEtPUFBBCisjU1AJPGNoYXItMHgwM0UwPiAgIiBHUkVFSyBMRVRURVIgU0FNUEkKKztrCTxjaGFyLTB4MDNGMD4gICIgR1JFRUsgS0FQUEEgU1lNQk9MCis7cgk8Y2hhci0weDAzRjE+ICAiIEdSRUVLIFJITyBTWU1CT0wKKyIJPGNoYXItMHgwM0YyPiAgIiBHUkVFSyBMVU5BVEUgU0lHTUEgU1lNQk9MCisiCTxjaGFyLTB4MDNGMz4gICIgR1JFRUsgTEVUVEVSIFlPVAorCis6fgk8Y2hhci0weDFGQzE+ICAgImRpYWx5dGlrYSBwZXJpcHN3bWV2bgorfjoJPGNoYXItMHgxRkMxPiAgICJkaWFseXRpa2EgcGVyaXBzd21ldm4KKworOn5pCTxjaGFyLTB4MUZENz4gICJpb3RhIGRpYWx5dGlrYSBwZXJpc3BvbWVuaQorfjppCTxjaGFyLTB4MUZENz4gICJpb3RhIGRpYWx5dGlrYSBwZXJpc3BvbWVuaQorCis6fnkJPGNoYXItMHgxRkU3PiAgInVwc2lsb24gZGlhbHl0aWthIHBlcmlzcG9tZW5pCit+OnkJPGNoYXItMHgxRkU3PiAgInVwc2lsb24gZGlhbHl0aWthIHBlcmlzcG9tZW5pCisKKy1hCTxjaGFyLTB4MUZCMT4gICAiYWxwaGEgbWFjcm9uCistaQk8Y2hhci0weDFGRDE+ICAgImlvdGEgbWFjcm9uCisteQk8Y2hhci0weDFGRTE+ICAgInVwc2lsb24gbWFjcm9uCistQQk8Y2hhci0weDFGQjk+ICAgIkFscGhhIG1hY3JvbgorLUkJPGNoYXItMHgxRkQ5PiAgICJJb3RhIG1hY3JvbgorLVkJPGNoYXItMHgxRkU5PiAgICJVcHNpbG9uIG1hY3JvbgorXmEJPGNoYXItMHgxRkIwPiAgICJhbHBoYSBicmF4eQorXmkJPGNoYXItMHgxRkQwPiAgICJpb3RhIGJyYXh5CiteeQk8Y2hhci0weDFGRTA+ICAgInVwc2lsb24gYnJheHkKK15BCTxjaGFyLTB4MUZCOD4gICAiYWxwaGEgYnJheHkKK15JCTxjaGFyLTB4MUZEOD4gICAiaW90YSBicmF4eQorXlkJPGNoYXItMHgxRkU4PiAgICJ1cHNpbG9uIGJyYXh5Cis+cgk8Y2hhci0weDFGRTQ+ICAgInJobyBwc2lsaQorPHIJPGNoYXItMHgxRkU1PiAgICJyaG8gZGFzaWEKKworPFIJPGNoYXItMHgxRkVDPiAgICJSaG8gZGFzaWEKKworIiBNb3JlIFN5bWJvbHMKKyYmCTxjaGFyLTB4MDNENz4gIkdyZWVrIGthaQorRCQJPGNoYXItMHgyMEFGPiAiRHJhY2htYSBzeW1ib2wKKyNRCTxjaGFyLTB4MDNEOD4gIkFyY2hhaWMgUW9wcGEKKyNxCTxjaGFyLTB4MDNEOT4gIkFyY2hhaWMgcW9wcGEKKztVCTxjaGFyLTB4MDNGND4gIkNhcGl0YWwgVGhldGEgc3ltYm9sCisiIWUJPGNoYXItMHgwM0Y1PiAiTHVuYXRlIGVwc2lsb24KKyIhRQk8Y2hhci0weDAzRjY+ICJMdW5hdGUgRXBzaWxvbgpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvaGVicmV3LnZpbSBiL3J1bnRpbWUva2V5bWFwL2hlYnJldy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyOGZjYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL2hlYnJldy52aW0KQEAgLTAsMCArMSwxNiBAQAorbGV0IGVuY29kaW5nID0gJmVuYworaWYgZW5jb2RpbmcgPT0gJ2xhdGluMScKKyAgICBpZiBoYXMoInVuaXgiKQorCWxldCBlbmNvZGluZyA9ICdpc28tODg1OS04JworICAgIGVsc2UKKwlsZXQgZW5jb2RpbmcgPSAnY3AxMjU1JworICAgIGVuZGlmCitlbmRpZgorCitpZiBlbmNvZGluZyA9PSAndXRmLTgnCisJc291cmNlIDxzZmlsZT46cDpoL2hlYnJld191dGYtOC52aW0KK2Vsc2VpZiBlbmNvZGluZyA9PSAnY3AxMjU1JworCXNvdXJjZSA8c2ZpbGU+OnA6aC9oZWJyZXdfY3AxMjU1LnZpbQorZWxzZQorCXNvdXJjZSA8c2ZpbGU+OnA6aC9oZWJyZXdfaXNvLTg4NTktOC52aW0KK2VuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9oZWJyZXdfY3AxMjU1LnZpbSBiL3J1bnRpbWUva2V5bWFwL2hlYnJld19jcDEyNTUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YThjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9oZWJyZXdfY3AxMjU1LnZpbQpAQCAtMCwwICsxLDYyIEBACisiIGFkZCBpbiB0aGUgdm93ZWwgcG9pbnRzLCBrbm93biBhcyAnbmlxdWQnLCB3aGljaCBhcmUgcHJlc2VudCBpbgorIiBDUDEyNTU6IE5vdGU6IHRoZXJlIGFyZSBzZXZlcmFsICdzdGFuZGFyZHMnIGZvciBwbGFjZW1lbnQgb2YgdGhlIHZvd2VsCisiIHBvaW50cywgYW5kIEkgaWdub3JlZCBhbGwgb2YgdGhlbS4gIFNpbmNlIHdlIGNhbiBpbnB1dCBFbmdsaXNoIGJ5IHNpbXBseQorIiBwcmVzc2luZyBDdHJsLV4gYW5kIGVsaW1pbmF0aW5nIHRoaXMgbWFwLCBJIHNhdyBubyByZWFzb24gdG8gdHJ5IHRvIHVzZQorIiBleG90aWMga2V5IGxvY2F0aW9ucy4gIElmIHlvdSBkb24ndCBsaWtlIGl0LCB0aGF0J3MganVzdCB0b28gYmFkIDotKQorbGV0IGI6a2V5bWFwX25hbWUgPSAiaGViIgorbG9hZGtleW1hcAorYQk8Y2hhci0yNDk+CSIg16kgLSBzaGluCitiCTxjaGFyLTI0MD4JIiDXoCAtIG51bgorYwk8Y2hhci0yMjU+CSIg15EgLSBiZXQKK2QJPGNoYXItMjI2PgkiINeSIC0gZ2ltZWwKK2UJPGNoYXItMjQ3PgkiINenIC0gcW9mCitmCTxjaGFyLTIzNT4JIiDXmyAtIGthZgorZwk8Y2hhci0yNDI+CSIg16IgLSBheWluCitoCTxjaGFyLTIzMz4JIiDXmSAtIHlvZAoraQk8Y2hhci0yMzk+CSIg158gLSBmaW5hbCBudW4KK2oJPGNoYXItMjMxPgkiINeXIC0gaGV0CitrCTxjaGFyLTIzNj4JIiDXnCAtIGxhbWVkCitsCTxjaGFyLTIzND4JIiDXmiAtIGZpbmFsIGthZgorbQk8Y2hhci0yNDY+CSIg16YgLSB0c2FkaQorbgk8Y2hhci0yMzg+CSIg154gLSBtZW0KK28JPGNoYXItMjM3PgkiINedIC0gZmluYWwgbWVtCitwCTxjaGFyLTI0ND4JIiDXpCAtIHBlCitxCS8JCSIgLyAtIHNsYXNoCityCTxjaGFyLTI0OD4JIiDXqCAtIHJlc2gKK3MJPGNoYXItMjI3PgkiINeTIC0gZGFsZXQKK3QJPGNoYXItMjI0PgkiINeQIC0gYWxlZgordQk8Y2hhci0yMjk+CSIg15UgLSB2YXYKK3YJPGNoYXItMjI4PgkiINeUIC0gaGUKK3cJJwkJIiAnIC0gc2luZ2xlLXF1b3RlCit4CTxjaGFyLTI0MT4JIiDXoSAtIHNhbWVraAoreQk8Y2hhci0yMzI+CSIg15ggLSB0ZXQKK3oJPGNoYXItMjMwPgkiINeWIC0gemF5aW4KKywJPGNoYXItMjUwPgkiINeqIC0gdGF2CisuCTxjaGFyLTI0NT4JIiDXpSAtIGZpbmFsIHRzYWRpCis7CTxjaGFyLTI0Mz4JIiDXoyAtIGZpbmFsIHBlCisnCSwJCSIgLCAtIGNvbW1hCisvCS4JCSIgLiAtIHBlcmlvZAorYAk7CQkiIDsgLSBzZW1pY29sb24KKyIgdm93ZWxzOgorQToJPENoYXItMTkyPgkiIHNoZXZhCitIRQk8Q2hhci0xOTM+CSIgaGF0YWYgc2Vnb2wKK0hBCTxDaGFyLTE5ND4JIiBoYXRhZiBwYXRhaAorSE8JPENoYXItMTk1PgkiIGhhdGFmIHFhbWF0cworSQk8Q2hhci0xOTY+CSIgaGlyaXEKK0FZCTxDaGFyLTE5Nz4JIiB0c2VyZQorRQk8Q2hhci0xOTg+CSIgc2Vnb2wKK0FBCTxDaGFyLTE5OT4JIiBwYXRhaAorQU8JPENoYXItMjAwPgkiIHFhbWF0cworTwk8Q2hhci0yMDE+CSIgaG9sYW0KK1UJPENoYXItMjAzPgkiIHF1YnV0cworRAk8Q2hhci0yMDQ+CSIgZGFnZXNoCitdVAk8Q2hhci0yMDU+CSIgbWV0ZWcKK11RCTxDaGFyLTIwNj4JIiBtYXFhZgorXVIgICAgICA81rxDaGFyLTIwNz4JIiByYWZlCitdcCAgICAgIDxDaGFyLTIwOD4gICAgICAiIHBhc2VxCitTUgk8Q2hhci0yMDk+CSIgc2hpbi1kb3QKK1NMCTxDaGFyLTIxMD4JIiBzaW4tZG90CitdUAk8Q2hhci0yMTE+CSIgc29mLXBhc3VxCitWVgk8Q2hhci0yMTI+ICAgICIgZG91YmxlLXZhdgorVlkJPENoYXItMjEzPiAgICAiIHZhdi15b2QKK1lZCTxDaGFyLTIxND4gICAgIiB5b2QteW9kCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9oZWJyZXdfaXNvLTg4NTktOC52aW0gYi9ydW50aW1lL2tleW1hcC9oZWJyZXdfaXNvLTg4NTktOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiMzA4NAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL2hlYnJld19pc28tODg1OS04LnZpbQpAQCAtMCwwICsxLDQxIEBACisiIFZpbSBLZXltYXAgZmlsZSBmb3IgaGVicmV3CisiIE1haW50YWluZXIgIDogUm9uIEFhcm9uIDxyb25Acm9ud2FyZS5vcmc+CisiIExhc3QgVXBkYXRlZDogV2VkIDI4IEZlYiAyMDAxIDIxOjI4OjUxCisiIFRoaXMgaXMgdGhlIHN0YW5kYXJkIElzcmFlbGkga2V5Ym9hcmQgbGF5b3V0CisKKyIgVXNlIHRoaXMgc2hvcnQgbmFtZSBpbiB0aGUgc3RhdHVzIGxpbmUuCitsZXQgYjprZXltYXBfbmFtZSA9ICJoZWIiCisKK2xvYWRrZXltYXAKK2EJPGNoYXItMjQ5PgkiIPkgLSBzaGluCitiCTxjaGFyLTI0MD4JIiDwIC0gbnVuCitjCTxjaGFyLTIyNT4JIiDhIC0gYmV0CitkCTxjaGFyLTIyNj4JIiDiIC0gZ2ltZWwKK2UJPGNoYXItMjQ3PgkiIPcgLSBxb2YKK2YJPGNoYXItMjM1PgkiIOsgLSBrYWYKK2cJPGNoYXItMjQyPgkiIPIgLSBheWluCitoCTxjaGFyLTIzMz4JIiDpIC0geW9kCitpCTxjaGFyLTIzOT4JIiDvIC0gZmluYWwgbnVuCitqCTxjaGFyLTIzMT4JIiDnIC0gaGV0CitrCTxjaGFyLTIzNj4JIiDsIC0gbGFtZWQKK2wJPGNoYXItMjM0PgkiIOogLSBmaW5hbCBrYWYKK20JPGNoYXItMjQ2PgkiIPYgLSB0c2FkaQorbgk8Y2hhci0yMzg+CSIg7iAtIG1lbQorbwk8Y2hhci0yMzc+CSIg7SAtIGZpbmFsIG1lbQorcAk8Y2hhci0yNDQ+CSIg9CAtIHBlCitxCS8JCSIgLyAtIHNsYXNoCityCTxjaGFyLTI0OD4JIiD4IC0gcmVzaAorcwk8Y2hhci0yMjc+CSIg4yAtIGRhbGV0Cit0CTxjaGFyLTIyND4JIiDgIC0gYWxlZgordQk8Y2hhci0yMjk+CSIg5SAtIHZhdgordgk8Y2hhci0yMjg+CSIg5CAtIGhlCit3CScJCSIgJyAtIHNpbmdsZS1xdW90ZQoreAk8Y2hhci0yNDE+CSIg8SAtIHNhbWVraAoreQk8Y2hhci0yMzI+CSIg6CAtIHRldAoregk8Y2hhci0yMzA+CSIg5iAtIHpheWluCissCTxjaGFyLTI1MD4JIiD6IC0gdGF2CisuCTxjaGFyLTI0NT4JIiD1IC0gZmluYWwgdHNhZGkKKzsJPGNoYXItMjQzPgkiIPMgLSBmaW5hbCBwZQorJwksCQkiICwgLSBjb21tYQorLwkuCQkiIC4gLSBwZXJpb2QKK2AJOwkJIiA7IC0gc2VtaWNvbG9uCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9oZWJyZXdfdXRmLTgudmltIGIvcnVudGltZS9rZXltYXAvaGVicmV3X3V0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQzODg0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvaGVicmV3X3V0Zi04LnZpbQpAQCAtMCwwICsxLDEyOCBAQAorIiBWaW0gS2V5bWFwIGZpbGUgZm9yIGhlYnJldworIiBNYWludGFpbmVyICA6IFJvbiBBYXJvbiA8cm9uQHJvbndhcmUub3JnPgorIiBMYXN0IFVwZGF0ZWQ6IFdlZCAyOCBGZWIgMjAwMSAyMToyODo1MQorIiBUaGlzIGlzIHRoZSBzdGFuZGFyZCBJc3JhZWxpIGtleWJvYXJkIGxheW91dCB3aXRoIChteSBub25zdGFuZGFyZCBsb2NhdGlvbnMKKyIgZm9yKSBuaXF1ZCwgZm9yIHV0ZjoKKworIiBVc2UgdGhpcyBzaG9ydCBuYW1lIGluIHRoZSBzdGF0dXMgbGluZS4KK2xldCBiOmtleW1hcF9uYW1lID0gImhlYiIKK2xvYWRrZXltYXAKK2EJPGNoYXItMHg1ZTk+CSIg16kgLSBzaGluCitiCTxjaGFyLTB4NWUwPgkiINegIC0gbnVuCitjCTxjaGFyLTB4NWQxPgkiINeRIC0gYmV0CitkCTxjaGFyLTB4NWQyPgkiINeSIC0gZ2ltZWwKK2UJPGNoYXItMHg1ZTc+CSIg16cgLSBxb2YKK2YJPGNoYXItMHg1ZGI+CSIg15sgLSBrYWYKK2cJPGNoYXItMHg1ZTI+CSIg16IgLSBheWluCitoCTxjaGFyLTB4NWQ5PgkiINeZIC0geW9kCitpCTxjaGFyLTB4NWRmPgkiINefIC0gZmluYWwgbnVuCitqCTxjaGFyLTB4NWQ3PgkiINeXIC0gaGV0CitrCTxjaGFyLTB4NWRjPgkiINecIC0gbGFtZWQKK2wJPGNoYXItMHg1ZGE+CSIg15ogLSBmaW5hbCBrYWYKK20JPGNoYXItMHg1ZTY+CSIg16YgLSB0c2FkaQorbgk8Y2hhci0weDVkZT4JIiDXniAtIG1lbQorbwk8Y2hhci0weDVkZD4JIiDXnSAtIGZpbmFsIG1lbQorcAk8Y2hhci0weDVlND4JIiDXpCAtIHBlCitxCS8JCSIgLyAtIHNsYXNoCityCTxjaGFyLTB4NWU4PgkiINeoIC0gcmVzaAorcwk8Y2hhci0weDVkMz4JIiDXkyAtIGRhbGV0Cit0CTxjaGFyLTB4NWQwPgkiINeQIC0gYWxlZgordQk8Y2hhci0weDVkNT4JIiDXlSAtIHZhdgordgk8Y2hhci0weDVkND4JIiDXlCAtIGhlCit3CScJCSIgJyAtIHNpbmdsZS1xdW90ZQoreAk8Y2hhci0weDVlMT4JIiDXoSAtIHNhbWVraAoreQk8Y2hhci0weDVkOD4JIiDXmCAtIHRldAoregk8Y2hhci0weDVkNj4JIiDXliAtIHpheWluCissCTxjaGFyLTB4NWVhPgkiINeqIC0gdGF2CisuCTxjaGFyLTB4NWU1PgkiINelIC0gZmluYWwgdHNhZGkKKzsJPGNoYXItMHg1ZTM+CSIg16MgLSBmaW5hbCBwZQorJwksCQkiICwgLSBjb21tYQorLwkuCQkiIC4gLSBwZXJpb2QKK2AJOwkJIiA7IC0gc2VtaWNvbG9uCitBOgk8Q2hhci0weDViMD4JIiBzaGV2YQorSEUJPENoYXItMHg1YjE+CSIgaGF0YWYgc2Vnb2wKK0hBCTxDaGFyLTB4NWIyPgkiIGhhdGFmIHBhdGFoCitITwk8Q2hhci0weDViMz4JIiBoYXRhZiBxYW1hdHMKK0kJPENoYXItMHg1YjQ+CSIgaGlyaXEKK0FZCTxDaGFyLTB4NWI1PgkiIHRzZXJlCitFCTxDaGFyLTB4NWI2PgkiIHNlZ29sCitBQQk8Q2hhci0weDViNz4JIiBwYXRhaAorQU8JPENoYXItMHg1Yjg+CSIgcWFtYXRzCitPCTxDaGFyLTB4NWI5PgkiIGhvbGFtCitVCTxDaGFyLTB4NWJiPgkiIHF1YnV0cworRAk8Q2hhci0weDViYz4JIiBkYWdlc2gKK11UCTxDaGFyLTB4NWJkPgkiIG1ldGVnCitdUQk8Q2hhci0weDViZT4JIiBtYXFhZgorXVIgICAgICA8Q2hhci0weDViZj4JIiByYWZlCitdcCAgICAgIDxDaGFyLTB4NWMwPiAgICAiIHBhc2VxCitTUgk8Q2hhci0weDVjMT4JIiBzaGluLWRvdAorU0wJPENoYXItMHg1YzI+CSIgc2luLWRvdAorXVAJPENoYXItMHg1YzM+CSIgc29mLXBhc3VxCitWVgk8Q2hhci0weDVmMD4gICAgIiBkb3VibGUtdmF2CitWWQk8Q2hhci0weDVmMT4gICAgIiB2YXYteW9kCitZWQk8Q2hhci0weDVmMj4gICAgIiB5b2QteW9kCisiIGNhbnRpbGxhdGlvbjoKK0M6CTxDaGFyLTB4NTkxPgkiIGV0bmFodGEKK0NzIDxDaGFyLTB4NTkyPiAgICIgc2Vnb2wKK0NTIDxDaGFyLTB4NTkzPiAgICIgc2hhbHNoZWxldAorQ3ogPENoYXItMHg1OTQ+ICAgIiB6YXFlZiBxYXRhbgorQ1ogPENoYXItMHg1OTU+ICAgIiB6YXFlZiBnYWRvbAorQ3QgPENoYXItMHg1OTY+ICAgIiB0aXBlaGEKK0NyIDxDaGFyLTB4NTk3PiAgICIgcmV2aWEKK0NxIDxDaGFyLTB4NTk4PiAgICIgemFycWEKK0NwIDxDaGFyLTB4NTk5PiAgICIgcGFzaHRhCitDISA8Q2hhci0weDU5YT4gICAiIHlldGl2CitDdiA8Q2hhci0weDU5Yj4gICAiIHRldmlyCitDZyA8Q2hhci0weDU5Yz4gICAiIGdlcmVzaAorQyogPENoYXItMHg1OWQ+ICAgIiBnZXJlc2ggcWFkaW0KK0NHIDxDaGFyLTB4NTllPiAgICIgZ2Vyc2hheWltCitDUCA8Q2hhci0weDU5Zj4gICAiIHFhcm5laS1wYXJhaAorQ3kgPENoYXItMHg1YWE+ICAgIiB5ZXJhY2gtYmVuLXlvbW8KK0NvIDxDaGFyLTB4NWFiPiAgIiBvbGUKK0NpIDxDaGFyLTB4NWFjPiAgIiBpbHV5CitDZCA8Q2hhci0weDVhZD4gICIgZGVoaQorQ24gPENoYXItMHg1YWU+ICAiIHppbm9yCitDQyA8Q2hhci0weDVhZj4gICIgbWFzb3JhIGNpcmNsZQorWGAgPENoYXItMHhmYjIwPiAgIiBBbHRlcm5hdGl2ZSBgYXlpbgorWCcgPENoYXItMHhmYjIxPiAgIiBBbHRlcm5hdGl2ZSAnYWxlZgorWC1kIDxDaGFyLTB4ZmIyMj4gICIgQWx0ZXJuYXRpdmUgZGFsZXQKK1gtaCA8Q2hhci0weGZiMjM+ICAiIEFsdGVybmF0aXZlIGhlCitYLWsgPENoYXItMHhmYjI0PiAgIiBBbHRlcm5hdGl2ZSBrYWYKK1gtbCA8Q2hhci0weGZiMjU+ICAiIEFsdGVybmF0aXZlIGxhbWVkCitYLW0gPENoYXItMHhmYjI2PiAgIiBBbHRlcm5hdGl2ZSBtZW0tc29maXQKK1gtciA8Q2hhci0weGZiMjc+ICAiIEFsdGVybmF0aXZlIHJlc2gKK1gtdCA8Q2hhci0weGZiMjg+ICAiIEFsdGVybmF0aXZlIHRhdgorWC0rIDxDaGFyLTB4ZmIyOT4gICIgQWx0ZXJuYXRpdmUgcGx1cworWFcgPENoYXItMHhmYjJhPiAgIiBzaGluK3NoaW4tZG90CitYdyA8Q2hhci0weGZiMmI+ICAiIHNoaW4rc2luLWRvdAorWC4uVyA8Q2hhci0weGZiMmM+ICAiIHNoaW4rc2hpbi1kb3QrZGFnZXNoCitYLi53IDxDaGFyLTB4ZmIyZD4gICIgc2hpbitzaW4tZG90K2RhZ2VzaAorWEEgPENoYXItMHhmYjJlPiAgIiBhbGVmK3BhdGFoCitYTyA8Q2hhci0weGZiMmY+ICAiIGFsZWYrcWFtYXRzCitYSSA8Q2hhci0weGZiMzA+ICAiIGFsZWYraGlyaXEgKG1hcGlxKQorWC5iIDxDaGFyLTB4ZmIzMT4gICIgYmV0K2RhZ2VzaAorWC5nIDxDaGFyLTB4ZmIzMj4gICIgZ2ltZWwrZGFnZXNoCitYLmQgPENoYXItMHhmYjMzPiAgIiBkYWxldCtkYWdlc2gKK1guaCA8Q2hhci0weGZiMzQ+ICAiIGhlK2RhZ2VzaAorWHUgPENoYXItMHhmYjM1PiAgIiB2YXYrZGFnZXNoCitYLnogPENoYXItMHhmYjM2PiAgIiB6YXlpbitkYWdlc2gKK1guVCA8Q2hhci0weGZiMzg+ICAiIHRldCtkYWdlc2gKK1gueSA8Q2hhci0weGZiMzk+ICAiIHl1ZCtkYWdlc2gKK1guSyA8Q2hhci0weGZiM2E+ICAiIGthZiBzb2ZpdCtkYWdlc2gKK1guayA8Q2hhci0weGZiM2I+ICAiIGthZitkYWdlc2gKK1gubCA8Q2hhci0weGZiM2M+ICAiIGxhbWVkK2RhZ2VzaAorWC5tIDxDaGFyLTB4ZmIzZT4gICIgbWVtK2RhZ2VzaAorWC5uIDxDaGFyLTB4ZmI0MD4gICIgbnVuK2RhZ2VzaAorWC5zIDxDaGFyLTB4ZmI0MT4gICIgc2FtZWNoK2RhZ2VzaAorWC5QIDxDaGFyLTB4ZmI0Mz4gICIgcGUgc29maXQrZGFnZXNoCitYLnAgPENoYXItMHhmYjQ0PiAgIiBwZStkYWdlc2gKK1gueCA8Q2hhci0weGZiNDY+ICAiIHRzYWRpK2RhZ2VzaAorWC5xIDxDaGFyLTB4ZmI0Nz4gICIgcW9mK2RhZ2VzaAorWC5yIDxDaGFyLTB4ZmI0OD4gICIgcmVzaCtkYWdlc2gKK1gudyA8Q2hhci0weGZiNDk+ICAiIHNoaW4rZGFnZXNoCitYLnQgPENoYXItMHhmYjRhPiAgIiB0YXYrZGFnZXNoCitYbyA8Q2hhci0weGZiNGI+ICAiIHZhditob2xhbQorWFJiIDxDaGFyLTB4ZmI0Yz4gICIgYmV0K3JhZmUKK1hSayA8Q2hhci0weGZiNGQ+ICAiIGthZityYWZlCitYUnAgPENoYXItMHhmYjRlPiAgIiBwZStyYWZlCitYYWwgPENoYXItMHhmYjRmPiAgIiBhbGVmLWxhbWVkCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9oZWJyZXdwLnZpbSBiL3J1bnRpbWUva2V5bWFwL2hlYnJld3AudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4N2NkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9oZWJyZXdwLnZpbQpAQCAtMCwwICsxLDE2IEBACitsZXQgZW5jb2RpbmcgPSAmZW5jCitpZiBlbmNvZGluZyA9PSAnbGF0aW4xJworICAgIGlmIGhhcygidW5peCIpCisJbGV0IGVuY29kaW5nID0gJ2lzby04ODU5LTgnCisgICAgZWxzZQorCWxldCBlbmNvZGluZyA9ICdjcDEyNTUnCisgICAgZW5kaWYKK2VuZGlmCisKK2lmIGVuY29kaW5nID09ICd1dGYtOCcKKwlzb3VyY2UgPHNmaWxlPjpwOmgvaGVicmV3cF91dGYtOC52aW0KK2Vsc2VpZiBlbmNvZGluZyA9PSAnY3AxMjU1JworCXNvdXJjZSA8c2ZpbGU+OnA6aC9oZWJyZXdwX2NwMTI1NS52aW0KK2Vsc2UKKwlzb3VyY2UgPHNmaWxlPjpwOmgvaGVicmV3cF9pc28tODg1OS04LnZpbQorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL2hlYnJld3BfY3AxMjU1LnZpbSBiL3J1bnRpbWUva2V5bWFwL2hlYnJld3BfY3AxMjU1LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTBmOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvaGVicmV3cF9jcDEyNTUudmltCkBAIC0wLDAgKzEsNTggQEAKKyIgY29kZXBhZ2UgMTI1NSBvbiBXaW5kb3dzIGlzIGVxdWFsIHRvIElTTyA4ODU5LTggYnV0IGl0CisiIGFkZHMgaW4gdGhlIHZvd2VsIHBvaW50cywga25vd24gYXMgJ25pcXVkJywgd2hpY2ggYXJlIHByZXNlbnQgaW4KKyIgQ1AxMjU1OiBOb3RlOiB0aGVyZSBhcmUgc2V2ZXJhbCAnc3RhbmRhcmRzJyBmb3IgcGxhY2VtZW50IG9mIHRoZSB2b3dlbAorIiBwb2ludHMsIGFuZCBJIGlnbm9yZWQgYWxsIG9mIHRoZW0uICBTaW5jZSB3ZSBjYW4gaW5wdXQgRW5nbGlzaCBieSBzaW1wbHkKKyIgcHJlc3NpbmcgQ3RybC1eIGFuZCBlbGltaW5hdGluZyB0aGlzIG1hcCwgSSBzYXcgbm8gcmVhc29uIHRvIHRyeSB0byB1c2UKKyIgZXhvdGljIGtleSBsb2NhdGlvbnMuICBJZiB5b3UgZG9uJ3QgbGlrZSBpdCwgdGhhdCdzIGp1c3QgdG9vIGJhZCA6LSkKK2xldCBiOmtleW1hcF9uYW1lID0gImhlYnAiCitsb2Fka2V5bWFwCitLCTxjaGFyLTIzND4JIiBmaW5hbCBrYWYKK00JPGNoYXItMjM3PgkiIGZpbmFsIG1lbQorTgk8Y2hhci0yMzk+CSIgZmluYWwgbnVuCitQCTxjaGFyLTI0Mz4JIiBmaW5hbCBwZQorVAk8Y2hhci0yMzI+CSIgdGV0CitYCTxjaGFyLTI0NT4JIiBmaW5hbCB0c2FkaQorYQk8Y2hhci0yMjQ+CSIgYWxlZgorYgk8Y2hhci0yMjU+CSIgYmV0CitkCTxjaGFyLTIyNz4JIiBkYWxldAorZwk8Y2hhci0yMjY+CSIgZ2ltZWwKK2gJPGNoYXItMjI4PgkiIGhlCitqCTxjaGFyLTIzMT4JIiBoZXQKK2sJPGNoYXItMjM1PgkiIGthZgorbAk8Y2hhci0yMzY+CSIgbGFtZWQKK20JPGNoYXItMjM4PgkiIG1lbQorbgk8Y2hhci0yNDA+CSIgbnVuCitzCTxjaGFyLTI0MT4JIiBzYW1la2gKK3AJPGNoYXItMjQ0PgkiIHBlCitxCTxjaGFyLTI0Nz4JIiBxb2YKK3IJPGNoYXItMjQ4PgkiIHJlc2gKK3QJPGNoYXItMjUwPgkiIHRhdgordQk8Y2hhci0yNDI+CSIgYXlpbgordgk8Y2hhci0yMjk+CSIgdmF2Cit3CTxjaGFyLTI0OT4JIiBzaGluCit4CTxjaGFyLTI0Nj4JIiB0c2FkaQoreQk8Y2hhci0yMzM+CSIgeW9kCit6CTxjaGFyLTIzMD4JIiB6YXlpbgorIiB2b3dlbHM6CitBOiAgICA8Q2hhci0xOTI+ICAiIHNoZXZhCitIRQk8Q2hhci0xOTM+CSIgaGF0YWYgc2Vnb2wKK0hBCTxDaGFyLTE5ND4JIiBoYXRhZiBwYXRhaAorSE8JPENoYXItMTk1PgkiIGhhdGFmIHFhbWF0cworSQk8Q2hhci0xOTY+CSIgaGlyaXEKK0FZCTxDaGFyLTE5Nz4JIiB0c2VyZQorRQk8Q2hhci0xOTg+CSIgc2Vnb2wKK0FBCTxDaGFyLTE5OT4JIiBwYXRhaAorQU8JPENoYXItMjAwPgkiIHFhbWF0cworTwk8Q2hhci0yMDE+CSIgaG9sYW0KK1UJPENoYXItMjAzPgkiIHF1YnV0cworRAk8Q2hhci0yMDQ+CSIgZGFnZXNoCitdVAk8Q2hhci0yMDU+CSIgbWV0ZWcKK11RCTxDaGFyLTIwNj4JIiBtYXFhZgorXVIgICAgICA8zENoYXItMjA3PgkiIHJhZmUKK11wICAgICAgPENoYXItMjA4PiAgICAgICIgcGFzZXEKK1NSCTxDaGFyLTIwOT4JIiBzaGluLWRvdAorU0wJPENoYXItMjEwPgkiIHNpbi1kb3QKK11QCTxDaGFyLTIxMT4JIiBzb2YtcGFzdXEKK1ZWCTxDaGFyLTIxMj4gICAgIiBkb3VibGUtdmF2CitWWQk8Q2hhci0yMTM+ICAgICIgdmF2LXlvZAorWVkJPENoYXItMjE0PiAgICAiIHlvZC15b2QKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL2hlYnJld3BfaXNvLTg4NTktOC52aW0gYi9ydW50aW1lL2tleW1hcC9oZWJyZXdwX2lzby04ODU5LTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0Yjk3MTQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9oZWJyZXdwX2lzby04ODU5LTgudmltCkBAIC0wLDAgKzEsMzYgQEAKKyIgVmltIEtleW1hcCBmaWxlIGZvciBoZWJyZXcKKyIgTWFpbnRhaW5lciAgOiBSb24gQWFyb24gPHJvbkByb253YXJlLm9yZz4KKyIgTGFzdCBVcGRhdGVkOiBTdW4gMTAgRmViIDIwMDIgMTE6NTA6NTYKKyIgVGhpcyBpcyBteSB2ZXJzaW9uIG9mIGEgcGhvbmV0aWMgSGVicmV3CisKKyIgVXNlIHRoaXMgc2hvcnQgbmFtZSBpbiB0aGUgc3RhdHVzIGxpbmUuCitsZXQgYjprZXltYXBfbmFtZSA9ICJoZWJwIgorCitsb2Fka2V5bWFwCitLCTxjaGFyLTIzND4JIiBmaW5hbCBrYWYKK00JPGNoYXItMjM3PgkiIGZpbmFsIG1lbQorTgk8Y2hhci0yMzk+CSIgZmluYWwgbnVuCitQCTxjaGFyLTI0Mz4JIiBmaW5hbCBwZQorVAk8Y2hhci0yMzI+CSIgdGV0CitYCTxjaGFyLTI0NT4JIiBmaW5hbCB0c2FkaQorYQk8Y2hhci0yMjQ+CSIgYWxlZgorYgk8Y2hhci0yMjU+CSIgYmV0CitkCTxjaGFyLTIyNz4JIiBkYWxldAorZwk8Y2hhci0yMjY+CSIgZ2ltZWwKK2gJPGNoYXItMjI4PgkiIGhlCitqCTxjaGFyLTIzMT4JIiBoZXQKK2sJPGNoYXItMjM1PgkiIGthZgorbAk8Y2hhci0yMzY+CSIgbGFtZWQKK20JPGNoYXItMjM4PgkiIG1lbQorbgk8Y2hhci0yNDA+CSIgbnVuCitzCTxjaGFyLTI0MT4JIiBzYW1la2gKK3AJPGNoYXItMjQ0PgkiIHBlCitxCTxjaGFyLTI0Nz4JIiBxb2YKK3IJPGNoYXItMjQ4PgkiIHJlc2gKK3QJPGNoYXItMjUwPgkiIHRhdgordQk8Y2hhci0yNDI+CSIgYXlpbgordgk8Y2hhci0yMjk+CSIgdmF2Cit3CTxjaGFyLTI0OT4JIiBzaGluCit4CTxjaGFyLTI0Nj4JIiB0c2FkaQoreQk8Y2hhci0yMzM+CSIgeW9kCit6CTxjaGFyLTIzMD4JIiB6YXlpbgpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvaGVicmV3cF91dGYtOC52aW0gYi9ydW50aW1lL2tleW1hcC9oZWJyZXdwX3V0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGVkNjBlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvaGVicmV3cF91dGYtOC52aW0KQEAgLTAsMCArMSwxMjIgQEAKKyIgVmltIEtleW1hcCBmaWxlIGZvciBoZWJyZXcKKyIgTWFpbnRhaW5lciAgOiBSb24gQWFyb24gPHJvbkByb253YXJlLm9yZz4KKyIgTGFzdCBVcGRhdGVkOiBUaHUgMDggTWFyIDIwMDEgMTM6NDk6MDEKKyIgVGhpcyBpcyBteSB2ZXJzaW9uIG9mIGEgcGhvbmV0aWMgSGVicmV3CisKKyIgVXNlIHRoaXMgc2hvcnQgbmFtZSBpbiB0aGUgc3RhdHVzIGxpbmUuCitsZXQgYjprZXltYXBfbmFtZSA9ICJoZWJwIgorbG9hZGtleW1hcAordwk8Y2hhci0weDVlOT4JIiD5IC0gc2hpbgorbgk8Y2hhci0weDVlMD4JIiDwIC0gbnVuCitiCTxjaGFyLTB4NWQxPgkiIOEgLSBiZXQKK2cJPGNoYXItMHg1ZDI+CSIg4iAtIGdpbWVsCitxCTxjaGFyLTB4NWU3PgkiIPcgLSBxb2YKK2sJPGNoYXItMHg1ZGI+CSIg6yAtIGthZgorZwk8Y2hhci0weDVlMj4JIiDyIC0gYXlpbgoreQk8Y2hhci0weDVkOT4JIiDpIC0geW9kCitOCTxjaGFyLTB4NWRmPgkiIO8gLSBmaW5hbCBudW4KK2oJPGNoYXItMHg1ZDc+CSIg5yAtIGhldAorbAk8Y2hhci0weDVkYz4JIiDsIC0gbGFtZWQKK0sJPGNoYXItMHg1ZGE+CSIg6iAtIGZpbmFsIGthZgoreAk8Y2hhci0weDVlNj4JIiD2IC0gdHNhZGkKK20JPGNoYXItMHg1ZGU+CSIg7iAtIG1lbQorTQk8Y2hhci0weDVkZD4JIiDtIC0gZmluYWwgbWVtCitwCTxjaGFyLTB4NWU0PgkiIPQgLSBwZQorcgk8Y2hhci0weDVlOD4JIiD4IC0gcmVzaAorZAk8Y2hhci0weDVkMz4JIiDjIC0gZGFsZXQKK2EJPGNoYXItMHg1ZDA+CSIg4CAtIGFsZWYKK3YJPGNoYXItMHg1ZDU+CSIg5SAtIHZhdgoraAk8Y2hhci0weDVkND4JIiDkIC0gaGUKK3MJPGNoYXItMHg1ZTE+CSIg8SAtIHNhbWVraAorVAk8Y2hhci0weDVkOD4JIiDoIC0gdGV0Cit6CTxjaGFyLTB4NWQ2PgkiIOYgLSB6YXlpbgordAk8Y2hhci0weDVlYT4JIiD6IC0gdGF2CitYCTxjaGFyLTB4NWU1PgkiIPUgLSBmaW5hbCB0c2FkaQorUAk8Y2hhci0weDVlMz4JIiDzIC0gZmluYWwgcGUKK0E6CTxDaGFyLTB4NWIwPgkiIHNoZXZhCitIRQk8Q2hhci0weDViMT4JIiBoYXRhZiBzZWdvbAorSEEJPENoYXItMHg1YjI+CSIgaGF0YWYgcGF0YWgKK0hPCTxDaGFyLTB4NWIzPgkiIGhhdGFmIHFhbWF0cworSQk8Q2hhci0weDViND4JIiBoaXJpcQorQVkJPENoYXItMHg1YjU+CSIgdHNlcmUKK0UJPENoYXItMHg1YjY+CSIgc2Vnb2wKK0FBCTxDaGFyLTB4NWI3PgkiIHBhdGFoCitBTwk8Q2hhci0weDViOD4JIiBxYW1hdHMKK08JPENoYXItMHg1Yjk+CSIgaG9sYW0KK1UJPENoYXItMHg1YmI+CSIgcXVidXRzCitECTxDaGFyLTB4NWJjPgkiIGRhZ2VzaAorXVQJPENoYXItMHg1YmQ+CSIgbWV0ZWcKK11RCTxDaGFyLTB4NWJlPgkiIG1hcWFmCitdUiAgICAgIDzMQ2hhci0weDViZj4JIiByYWZlCitdcCAgICAgIDxDaGFyLTB4NWMwPiAgICAiIHBhc2VxCitTUgk8Q2hhci0weDVjMT4JIiBzaGluLWRvdAorU0wJPENoYXItMHg1YzI+CSIgc2luLWRvdAorXVAJPENoYXItMHg1YzM+CSIgc29mLXBhc3VxCitWVgk8Q2hhci0weDVmMD4gICAgIiBkb3VibGUtdmF2CitWWQk8Q2hhci0weDVmMT4gICAgIiB2YXYteW9kCitZWQk8Q2hhci0weDVmMj4gICAgIiB5b2QteW9kCisiIGNhbnRpbGxhdGlvbjoKK0M6CTxDaGFyLTB4NTkxPgkiIGV0bmFodGEKK0NzIDxDaGFyLTB4NTkyPiAgICIgc2Vnb2wKK0NTIDxDaGFyLTB4NTkzPiAgICIgc2hhbHNoZWxldAorQ3ogPENoYXItMHg1OTQ+ICAgIiB6YXFlZiBxYXRhbgorQ1ogPENoYXItMHg1OTU+ICAgIiB6YXFlZiBnYWRvbAorQ3QgPENoYXItMHg1OTY+ICAgIiB0aXBlaGEKK0NyIDxDaGFyLTB4NTk3PiAgICIgcmV2aWEKK0NxIDxDaGFyLTB4NTk4PiAgICIgemFycWEKK0NwIDxDaGFyLTB4NTk5PiAgICIgcGFzaHRhCitDISA8Q2hhci0weDU5YT4gICAiIHlldGl2CitDdiA8Q2hhci0weDU5Yj4gICAiIHRldmlyCitDZyA8Q2hhci0weDU5Yz4gICAiIGdlcmVzaAorQyogPENoYXItMHg1OWQ+ICAgIiBnZXJlc2ggcWFkaW0KK0NHIDxDaGFyLTB4NTllPiAgICIgZ2Vyc2hheWltCitDUCA8Q2hhci0weDU5Zj4gICAiIHFhcm5laS1wYXJhaAorQ3kgPENoYXItMHg1YWE+ICAgIiB5ZXJhY2gtYmVuLXlvbW8KK0NvIDxDaGFyLTB4NWFiPiAgIiBvbGUKK0NpIDxDaGFyLTB4NWFjPiAgIiBpbHV5CitDZCA8Q2hhci0weDVhZD4gICIgZGVoaQorQ24gPENoYXItMHg1YWU+ICAiIHppbm9yCitDQyA8Q2hhci0weDVhZj4gICIgbWFzb3JhIGNpcmNsZQorWGAgPENoYXItMHhmYjIwPiAgIiBBbHRlcm5hdGl2ZSBgYXlpbgorWCcgPENoYXItMHhmYjIxPiAgIiBBbHRlcm5hdGl2ZSAnYWxlZgorWC1kIDxDaGFyLTB4ZmIyMj4gICIgQWx0ZXJuYXRpdmUgZGFsZXQKK1gtaCA8Q2hhci0weGZiMjM+ICAiIEFsdGVybmF0aXZlIGhlCitYLWsgPENoYXItMHhmYjI0PiAgIiBBbHRlcm5hdGl2ZSBrYWYKK1gtbCA8Q2hhci0weGZiMjU+ICAiIEFsdGVybmF0aXZlIGxhbWVkCitYLW0gPENoYXItMHhmYjI2PiAgIiBBbHRlcm5hdGl2ZSBtZW0tc29maXQKK1gtciA8Q2hhci0weGZiMjc+ICAiIEFsdGVybmF0aXZlIHJlc2gKK1gtdCA8Q2hhci0weGZiMjg+ICAiIEFsdGVybmF0aXZlIHRhdgorWC0rIDxDaGFyLTB4ZmIyOT4gICIgQWx0ZXJuYXRpdmUgcGx1cworWFcgPENoYXItMHhmYjJhPiAgIiBzaGluK3NoaW4tZG90CitYdyA8Q2hhci0weGZiMmI+ICAiIHNoaW4rc2luLWRvdAorWC4uVyA8Q2hhci0weGZiMmM+ICAiIHNoaW4rc2hpbi1kb3QrZGFnZXNoCitYLi53IDxDaGFyLTB4ZmIyZD4gICIgc2hpbitzaW4tZG90K2RhZ2VzaAorWEEgPENoYXItMHhmYjJlPiAgIiBhbGVmK3BhdGFoCitYTyA8Q2hhci0weGZiMmY+ICAiIGFsZWYrcWFtYXRzCitYSSA8Q2hhci0weGZiMzA+ICAiIGFsZWYraGlyaXEgKG1hcGlxKQorWC5iIDxDaGFyLTB4ZmIzMT4gICIgYmV0K2RhZ2VzaAorWC5nIDxDaGFyLTB4ZmIzMj4gICIgZ2ltZWwrZGFnZXNoCitYLmQgPENoYXItMHhmYjMzPiAgIiBkYWxldCtkYWdlc2gKK1guaCA8Q2hhci0weGZiMzQ+ICAiIGhlK2RhZ2VzaAorWHUgPENoYXItMHhmYjM1PiAgIiB2YXYrZGFnZXNoCitYLnogPENoYXItMHhmYjM2PiAgIiB6YXlpbitkYWdlc2gKK1guVCA8Q2hhci0weGZiMzg+ICAiIHRldCtkYWdlc2gKK1gueSA8Q2hhci0weGZiMzk+ICAiIHl1ZCtkYWdlc2gKK1guSyA8Q2hhci0weGZiM2E+ICAiIGthZiBzb2ZpdCtkYWdlc2gKK1guayA8Q2hhci0weGZiM2I+ICAiIGthZitkYWdlc2gKK1gubCA8Q2hhci0weGZiM2M+ICAiIGxhbWVkK2RhZ2VzaAorWC5tIDxDaGFyLTB4ZmIzZT4gICIgbWVtK2RhZ2VzaAorWC5uIDxDaGFyLTB4ZmI0MD4gICIgbnVuK2RhZ2VzaAorWC5zIDxDaGFyLTB4ZmI0MT4gICIgc2FtZWNoK2RhZ2VzaAorWC5QIDxDaGFyLTB4ZmI0Mz4gICIgcGUgc29maXQrZGFnZXNoCitYLnAgPENoYXItMHhmYjQ0PiAgIiBwZStkYWdlc2gKK1gueCA8Q2hhci0weGZiNDY+ICAiIHRzYWRpK2RhZ2VzaAorWC5xIDxDaGFyLTB4ZmI0Nz4gICIgcW9mK2RhZ2VzaAorWC5yIDxDaGFyLTB4ZmI0OD4gICIgcmVzaCtkYWdlc2gKK1gudyA8Q2hhci0weGZiNDk+ICAiIHNoaW4rZGFnZXNoCitYLnQgPENoYXItMHhmYjRhPiAgIiB0YXYrZGFnZXNoCitYbyA8Q2hhci0weGZiNGI+ICAiIHZhditob2xhbQorWFJiIDxDaGFyLTB4ZmI0Yz4gICIgYmV0K3JhZmUKK1hSayA8Q2hhci0weGZiNGQ+ICAiIGthZityYWZlCitYUnAgPENoYXItMHhmYjRlPiAgIiBwZStyYWZlCitYYWwgPENoYXItMHhmYjRmPiAgIiBhbGVmLWxhbWVkCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9saXRodWFuaWFuLWJhbHRpYy52aW0gYi9ydW50aW1lL2tleW1hcC9saXRodWFuaWFuLWJhbHRpYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4OGRiNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL2xpdGh1YW5pYW4tYmFsdGljLnZpbQpAQCAtMCwwICsxLDMxIEBACisiIFZpbSBLZXltYXAgZmlsZSBmb3IgbGl0aHVhbmlhbiBjaGFyYWN0ZXJzLCBwaG9uZXRpYyBsYXlvdXQgJ0JhbHRpYycKKyIgVXNlZnVsIG1haW5seSB3aXRoIHV0Zi04IGJ1dCBtYXkgd29yayB3aXRoIG90aGVyIGVuY29kaW5ncworCisiIE1haW50YWluZXI6ICAgQWxleCBKYWt1c2hldiA8QWxleC5KYWt1c2hldkBrZW1lay5sdD4KKyIgTGFzdCBDaGFuZ2VkOiAyMDAyIEFwciAxMgorCisiIEFsbCBjaGFyYWN0ZXJzIGFyZSBnaXZlbiBsaXRlcmFsbHksIGNvbnZlcnNpb24gdG8gYW5vdGhlciBlbmNvZGluZyAoZS5nLiwKKyIgVVRGLTgpIHNob3VsZCB3b3JrLgorc2NyaXB0ZW5jb2RpbmcgdXRmLTgKKworbGV0IGI6a2V5bWFwX25hbWUgPSAibHQiCisKK2xvYWRrZXltYXAKKyEJxIQJTElUSFVBTklBTiBDQVBJVEFMIEEgTk9TSU5FCitACcSMCUxJVEhVQU5JQU4gQ0FQSVRBTCBDSAorIwnEmAlMSVRIVUFOSUFOIENBUElUQUwgRSBOT1NJTkUKKyQJxJYJTElUSFVBTklBTiBDQVBJVEFMIEUgU1UgVEFTS1UKKyUJxK4JTElUSFVBTklBTiBDQVBJVEFMIEkgTk9TSU5FCiteCcWgCUxJVEhVQU5JQU4gQ0FQSVRBTCBTSAorJgnFsglMSVRIVUFOSUFOIENBUElUQUwgVSBOT1NJTkUKKyoJxaoJTElUSFVBTklBTiBDQVBJVEFMIFUgU1UgQlJVS1NOSVUKKysJxb0JTElUSFVBTklBTiBDQVBJVEFMIFpICisxCcSFCUxJVEhVQU5JQU4gTE9XRVJDQVNFIEEgTk9TSU5FCisyCcSNCUxJVEhVQU5JQU4gTE9XRVJDQVNFIENICiszCcSZCUxJVEhVQU5JQU4gTE9XRVJDQVNFIEUgTk9TSU5FCis0CcSXCUxJVEhVQU5JQU4gTE9XRVJDQVNFIEUgU1UgVEFTS1UKKzUJxK8JTElUSFVBTklBTiBMT1dFUkNBU0UgSSBOT1NJTkUKKzYJxaEJTElUSFVBTklBTiBMT1dFUkNBU0UgU0gKKzcJxbMJTElUSFVBTklBTiBMT1dFUkNBU0UgVSBOT1NJTkUKKzgJxasJTElUSFVBTklBTiBMT1dFUkNBU0UgVSBTVSBCUlVLU05JVQorPQnFvglMSVRIVUFOSUFOIExPV0VSQ0FTRSBaSApkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvbWFneWFyX3V0Zi04LnZpbSBiL3J1bnRpbWUva2V5bWFwL21hZ3lhcl91dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5NzcxNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL21hZ3lhcl91dGYtOC52aW0KQEAgLTAsMCArMSwzNyBAQAorIiBNYWludGFpbmVyOiAgIExhc3psbyBaYXZhbGV0YSA8emF2YWxldGFAc21hcnRjaGF0Lm5ldC5hdT4KKyIgTGFzdCBDaGFuZ2VkOiAyMDAzIEF1ZyAwOAorIiBpdCBoYXMgYWxsIHRoZSBhY2NlbnRzIGFuZCBhIGZldyBvZiB0aGUgY2hhcmFjdGVyIGFsdGVyYXRpb25zCisKK2xldCBiOmtleW1hcCA9ICJtYWd5YXIiCisKK2xvYWRrZXkKK2AJw60KK34Jw40KKyEJJworQAkiCisjCSsKKyQJIQorXgkvCismCT0KKyoJKAorKAkpCiswCcO2CispCcOWCistCcO8CitfCcOcCis9CcOzCisrCcOTCitcXAnFsQorfAnFsAorWwnFkQorewnFkAorXQnDugorfQnDmgorOwnDqQorOgnDiQorJwnDoQorXCIJw4EKKy8JLQorPAk/Cis+CToKKz8JXwpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvcGVyc2lhbi1pcmFuaWFuX3V0Zi04LnZpbSBiL3J1bnRpbWUva2V5bWFwL3BlcnNpYW4taXJhbmlhbl91dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRmMzk2MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL3BlcnNpYW4taXJhbmlhbl91dGYtOC52aW0KQEAgLTAsMCArMSwxMTUgQEAKKyIgVmltIEtleW1hcCBmaWxlIGZvciBQZXJzaWFuIFN0YW5kYXJkIEtleWJvYXJkIExheW91dAorIiBNYWludGFpbmVyczogQmVobmFtIEVzZmFoYm9kIDxiZWhuYW1AYmFtZGFkLm9yZz4sCisiCSAgICAgICBBbWlyIEhlZGF5YXR5IDxhbWlyQGJhbWRhZC5vcmc+CisiIExhc3QgQ2hhbmdlOiAyMDA0IE1heSAxNgorCisiIEFsbCBjaGFyYWN0ZXJzIGFyZSBnaXZlbiBsaXRlcmFsbHksIGNvbnZlcnNpb24gdG8gYW5vdGhlciBlbmNvZGluZyAoZS5nLiwKKyIgVVRGLTgpIHNob3VsZCB3b3JrLgorc2NyaXB0ZW5jb2RpbmcgdXRmLTgKKworIiBVc2UgdGhpcyBzaG9ydCBuYW1lIGluIHRoZSBzdGF0dXMgbGluZS4KK2xldCBiOmtleW1hcF9uYW1lID0gInBlciIKKworbG9hZGtleW1hcAorYAnigI0KKzEJ27EKKzIJ27IKKzMJ27MKKzQJ27QKKzUJ27UKKzYJ27YKKzcJ27cKKzgJ27gKKzkJ27kKKzAJ27AKKy0JLQorPQk9CisKK3EJ2LYKK3cJ2LUKK2UJ2KsKK3IJ2YIKK3QJ2YEKK3kJ2LoKK3UJ2LkKK2kJ2YcKK28J2K4KK3AJ2K0KK1sJ2KwKK10J2oYKKworYQnYtAorcwnYsworZAnbjAorZgnYqAorZwnZhAoraAnYpworagnYqgorawnZhgorbAnZhQorOwnaqQorJwnarworCit6Cdi4Cit4Cdi3CitjCdiyCit2CdixCitiCdiwCituCdivCittCdm+CissCdmICisuCS4KKy8JLworXAlcCisKK34Jw7cKKyEJIQorQAnZrAorIwnZqworJAnvt7wKKyUJ2aoKK14Jw5cKKyYJ2IwKKyoJKgorKAkpCispCSgKK18J2YAKKysJKworCitRCdmSCitXCdmMCitFCdmNCitSCdmLCitUCdmPCitZCdmQCitVCdmOCitJCdmRCitPCV0KK1AJWworewl9Cit9CXsKKworQQnYpAorUwnYpgorRAnZigorRgnYpQorRwnYoworSAnYogorSgnYqQorSwnCuworTAnCqworOgk6CitcIgnYmworCitaCdmDCitYCdmTCitDCdqYCitWCdmwCitCCeKAjAorTgnZlAorTQnYoQorPAk+Cis+CTwKKz8J2J8KK3wJfAorCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9wZXJzaWFuLnZpbSBiL3J1bnRpbWUva2V5bWFwL3BlcnNpYW4udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZjVjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9wZXJzaWFuLnZpbQpAQCAtMCwwICsxLDggQEAKK2xldCBlbmNvZGluZyA9ICZlbmMKK2lmIGVuY29kaW5nID09ICcnCisJbGV0IGVuY29kaW5nID0gJ3V0Zi04JworZW5kaWYKKworaWYgZW5jb2RpbmcgPT0gJ3V0Zi04JworCXNvdXJjZSA8c2ZpbGU+OnA6aC9wZXJzaWFuLWlyYW5pYW5fdXRmLTgudmltCitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvcGlueWluLnZpbSBiL3J1bnRpbWUva2V5bWFwL3Bpbnlpbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3ODUwYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL3Bpbnlpbi52aW0KQEAgLTAsMCArMSw1NCBAQAorIiBWaW0gS2V5bWFwIGZpbGUgZm9yIEhhbnl1IFBpbnlpbiB0b25lIG1hcmtzIHRocm91Z2ggbnVtYmVycy4KKyIgTWFpbnRhaW5lcjogRnJlZHJpayBSb3ViZXJ0IDxyb3ViZXJ0QGRmLmx0aC5zZT4KKyIgTGFzdCBDaGFuZ2VkOiBGZWJydWFyeSAxNSwgMjAwNAorCisiIEFsbCBjaGFyYWN0ZXJzIGFyZSBnaXZlbiBsaXRlcmFsbHkuCitzY3JpcHRlbmNvZGluZyB1dGYtOAorCisiIFVzZSB0aGlzIHNob3J0IG5hbWUgaW4gdGhlIHN0YXR1cyBsaW5lLgorbGV0IGI6a2V5bWFwX25hbWUgPSAicHkiCisKK2xvYWRrZXltYXAKK2EwCWEKK2ExCcSBCithMgnDoQorYTMJx44KK2E0CcOgCithNQlhCitlMAllCitlMQnEkworZTIJw6kKK2UzCcSbCitlNAnDqAorZTUJZQoraTAJaQoraTEJxKsKK2kyCcOtCitpMwnHkAoraTQJw6wKK2k1CWkKK28wCW8KK28xCcWNCitvMgnDsworbzMJx5IKK280CcOyCitvNQlvCit1MAl1Cit1MQnFqwordTIJw7oKK3UzCceUCit1NAnDuQordTUJdQorw7wwCcO8CivDvDEJx5YKK8O8MgnHmAorw7wzCceaCivDvDQJx5wKK8O8NQnDvAordjAJw7wKK3YxCceWCit2MgnHmAordjMJx5oKK3Y0CcecCit2NQnDvAorCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9ydXNzaWFuLWpjdWtlbi52aW0gYi9ydW50aW1lL2tleW1hcC9ydXNzaWFuLWpjdWtlbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwZWM4YwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL3J1c3NpYW4tamN1a2VuLnZpbQpAQCAtMCwwICsxLDg3IEBACisiIFZpbSBLZXltYXAgZmlsZSBmb3IgcnVzc2lhbiBjaGFyYWN0ZXJzLCBsYXlvdXQgJ2pjdWtlbicsIGNsYXNzaWNhbCB2YXJpYW50CisiIChjb21wYXRpYmxlIHdpdGggWEZyZWU4NiAncnUnIGtleW1hcCkKKyIgVXNlZnVsIG1haW5seSB3aXRoIHV0Zi04IGJ1dCBtYXkgd29yayB3aXRoIG90aGVyIGVuY29kaW5ncworCisiIE1haW50YWluZXI6ICAgQXJ0ZW0gQ2h1cHJpbmEgPHJhbkByYW4ucHAucnU+CisiIExhc3QgQ2hhbmdlZDogMjAwMSBKdW4gMjMKKworIiBBbGwgY2hhcmFjdGVycyBhcmUgZ2l2ZW4gbGl0ZXJhbGx5LCBjb252ZXJzaW9uIHRvIGFub3RoZXIgZW5jb2RpbmcgKGUuZy4sCisiIFVURi04KSBzaG91bGQgd29yay4KK3NjcmlwdGVuY29kaW5nIHV0Zi04CisKK2xldCBiOmtleW1hcF9uYW1lID0gInJ1IgorCitsb2Fka2V5bWFwCit+CdCBCUNZUklMTElDIENBUElUQUwgTEVUVEVSIElPCitgCdGRCUNZUklMTElDIFNNQUxMIExFVFRFUiBJTworRgnQkAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBCis8CdCRCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCitECdCSCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFZFCitVCdCTCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRQorTAnQlAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQorVAnQlQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRQorOgnQlglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKK1AJ0JcJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKK0IJ0JgJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorUQnQmQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJCitSCdCaCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEtBCitLCdCbCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVMCitWCdCcCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCitZCdCdCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVOCitKCdCeCUNZUklMTElDIENBUElUQUwgTEVUVEVSIE8KK0cJ0J8JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUEUKK0gJ0KAJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKK0MJ0KEJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVMKK04J0KIJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUKK0UJ0KMJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorQQnQpAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRgorewnQpQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQQorVwnQpglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0UKK1gJ0KcJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCitJCdCoCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQQorTwnQqQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQQorfQnQqglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQVJEIFNJR04KK1MJ0KsJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVQorTQnQrAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR04KK1wiCdCtCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEUKKz4J0K4JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWVUKK1oJ0K8JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUEKK2YJ0LAJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKKywJ0LEJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJFCitkCdCyCUNZUklMTElDIFNNQUxMIExFVFRFUiBWRQordQnQswlDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCitsCdC0CUNZUklMTElDIFNNQUxMIExFVFRFUiBERQordAnQtQlDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKKzsJ0LYJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorcAnQtwlDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUKK2IJ0LgJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkKK3EJ0LkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEkKK3IJ0LoJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBCitrCdC7CUNZUklMTElDIFNNQUxMIExFVFRFUiBFTAordgnQvAlDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KK3kJ0L0JQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVOCitqCdC+CUNZUklMTElDIFNNQUxMIExFVFRFUiBPCitnCdC/CUNZUklMTElDIFNNQUxMIExFVFRFUiBQRQoraAnRgAlDWVJJTExJQyBTTUFMTCBMRVRURVIgRVIKK2MJ0YEJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTCituCdGCCUNZUklMTElDIFNNQUxMIExFVFRFUiBURQorZQnRgwlDWVJJTExJQyBTTUFMTCBMRVRURVIgVQorYQnRhAlDWVJJTExJQyBTTUFMTCBMRVRURVIgRUYKK1sJ0YUJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBCit3CdGGCUNZUklMTElDIFNNQUxMIExFVFRFUiBUU0UKK3gJ0YcJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRQoraQnRiAlDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hBCitvCdGJCUNZUklMTElDIFNNQUxMIExFVFRFUiBTSENIQQorXQnRiglDWVJJTExJQyBTTUFMTCBMRVRURVIgSEFSRCBTSUdOCitzCdGLCUNZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCittCdGMCUNZUklMTElDIFNNQUxMIExFVFRFUiBTT0ZUIFNJR04KKycJ0Y0JQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEUKKy4J0Y4JQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCit6CdGPCUNZUklMTElDIFNNQUxMIExFVFRFUiBZQQorQAkiCisjCScKKyQJKgorJQk6CiteCSwKKyYJLgorKgk7CmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9ydXNzaWFuLWpjdWtlbndpbi52aW0gYi9ydW50aW1lL2tleW1hcC9ydXNzaWFuLWpjdWtlbndpbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2NDcwZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL3J1c3NpYW4tamN1a2Vud2luLnZpbQpAQCAtMCwwICsxLDg3IEBACisiIFZpbSBLZXltYXAgZmlsZSBmb3IgcnVzc2lhbiBjaGFyYWN0ZXJzLCBsYXlvdXQgJ2pjdWtlbicsIE1TIFdpbmRvd3MgdmFyaWFudAorIiAoc2xpZ2h0bHkgaW5jb21wYXRpYmxlIHdpdGggWEZyZWU4NiAncnUnIGtleW1hcCAtIG1ha2VzIHVzZSBvZiBOVU1FUk8gU0lHTikKKyIgVXNlZnVsIG1haW5seSB3aXRoIHV0Zi04IGJ1dCBtYXkgd29yayB3aXRoIG90aGVyIGVuY29kaW5ncworCisiIE1haW50YWluZXI6ICAgQXJ0ZW0gQ2h1cHJpbmEgPHJhbkByYW4ucHAucnU+CisiIExhc3QgQ2hhbmdlZDogMjAwMSBKdW4gMjMKKworIiBBbGwgY2hhcmFjdGVycyBhcmUgZ2l2ZW4gbGl0ZXJhbGx5LCBjb252ZXJzaW9uIHRvIGFub3RoZXIgZW5jb2RpbmcgKGUuZy4sCisiIFVURi04KSBzaG91bGQgd29yay4KK3NjcmlwdGVuY29kaW5nIHV0Zi04CisKK2xldCBiOmtleW1hcF9uYW1lID0gInJ1IgorCitsb2Fka2V5bWFwCit+CdCBCUNZUklMTElDIENBUElUQUwgTEVUVEVSIElPCitgCdGRCUNZUklMTElDIFNNQUxMIExFVFRFUiBJTworRgnQkAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBCis8CdCRCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCitECdCSCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFZFCitVCdCTCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRQorTAnQlAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQorVAnQlQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRQorOgnQlglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKK1AJ0JcJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKK0IJ0JgJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorUQnQmQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJCitSCdCaCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEtBCitLCdCbCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVMCitWCdCcCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCitZCdCdCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVOCitKCdCeCUNZUklMTElDIENBUElUQUwgTEVUVEVSIE8KK0cJ0J8JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUEUKK0gJ0KAJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKK0MJ0KEJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVMKK04J0KIJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUKK0UJ0KMJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorQQnQpAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRgorewnQpQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQQorVwnQpglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0UKK1gJ0KcJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCitJCdCoCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQQorTwnQqQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQQorfQnQqglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQVJEIFNJR04KK1MJ0KsJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVQorTQnQrAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR04KK1wiCdCtCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEUKKz4J0K4JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWVUKK1oJ0K8JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUEKK2YJ0LAJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKKywJ0LEJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJFCitkCdCyCUNZUklMTElDIFNNQUxMIExFVFRFUiBWRQordQnQswlDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCitsCdC0CUNZUklMTElDIFNNQUxMIExFVFRFUiBERQordAnQtQlDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKKzsJ0LYJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorcAnQtwlDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUKK2IJ0LgJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkKK3EJ0LkJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEkKK3IJ0LoJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBCitrCdC7CUNZUklMTElDIFNNQUxMIExFVFRFUiBFTAordgnQvAlDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KK3kJ0L0JQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVOCitqCdC+CUNZUklMTElDIFNNQUxMIExFVFRFUiBPCitnCdC/CUNZUklMTElDIFNNQUxMIExFVFRFUiBQRQoraAnRgAlDWVJJTExJQyBTTUFMTCBMRVRURVIgRVIKK2MJ0YEJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTCituCdGCCUNZUklMTElDIFNNQUxMIExFVFRFUiBURQorZQnRgwlDWVJJTExJQyBTTUFMTCBMRVRURVIgVQorYQnRhAlDWVJJTExJQyBTTUFMTCBMRVRURVIgRUYKK1sJ0YUJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBCit3CdGGCUNZUklMTElDIFNNQUxMIExFVFRFUiBUU0UKK3gJ0YcJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRQoraQnRiAlDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hBCitvCdGJCUNZUklMTElDIFNNQUxMIExFVFRFUiBTSENIQQorXQnRiglDWVJJTExJQyBTTUFMTCBMRVRURVIgSEFSRCBTSUdOCitzCdGLCUNZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCittCdGMCUNZUklMTElDIFNNQUxMIExFVFRFUiBTT0ZUIFNJR04KKycJ0Y0JQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEUKKy4J0Y4JQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCit6CdGPCUNZUklMTElDIFNNQUxMIExFVFRFUiBZQQorQAkiCisjCeKElglOVU1FUk8gU0lHTgorJAk7CiteCToKKyYJPworLwkuCis/CSwKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL3J1c3NpYW4teWF3ZXJ0eS52aW0gYi9ydW50aW1lL2tleW1hcC9ydXNzaWFuLXlhd2VydHkudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NWQ3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9ydXNzaWFuLXlhd2VydHkudmltCkBAIC0wLDAgKzEsNzkgQEAKKyIgVmltIEtleW1hcCBmaWxlIGZvciBydXNzaWFuIGNoYXJhY3RlcnMsIHBob25ldGljIGxheW91dCAneWF3ZXJ0eScKKyIgVXNlZnVsIG1haW5seSB3aXRoIHV0Zi04IGJ1dCBtYXkgd29yayB3aXRoIG90aGVyIGVuY29kaW5ncworCisiIE1haW50YWluZXI6ICAgSWdvciBHb2xkZW5iZXJnIDxpZ29sZEBpZ29sZC5wcC5ydT4KKyIgTGFzdCBDaGFuZ2VkOiAyMDAyIEphbiAxNAorCisiIEFsbCBjaGFyYWN0ZXJzIGFyZSBnaXZlbiBsaXRlcmFsbHksIGNvbnZlcnNpb24gdG8gYW5vdGhlciBlbmNvZGluZyAoZS5nLiwKKyIgVVRGLTgpIHNob3VsZCB3b3JrLgorc2NyaXB0ZW5jb2RpbmcgdXRmLTgKKworbGV0IGI6a2V5bWFwX25hbWUgPSAicnUiCisKK2xvYWRrZXltYXAKK0EJ0JAJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQQorQgnQkQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCRQorVwnQkglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBWRQorRwnQkwlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUKK0QJ0JQJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgREUKK0UJ0JUJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUKKyYJ0IEJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU8KK1YJ0JYJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFCitaCdCXCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFpFCitJCdCYCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEkKK0oJ0JkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hPUlQgSQorSwnQmglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQQorTAnQmwlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTAorTQnQnAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTQorTgnQnQlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTgorTwnQnglDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPCitQCdCfCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFBFCitSCdCgCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVSCitTCdChCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEVTCitUCdCiCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFRFCitVCdCjCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFUKK0YJ0KQJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUYKK0gJ0KUJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEEKK0MJ0KYJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVFNFCisrCdCnCUNZUklMTElDIENBUElUQUwgTEVUVEVSIENIRQorewnQqAlDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSEEKK30J0KkJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hDSEEKKyQJ0KoJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEFSRCBTSUdOCitZCdCrCUNZUklMTElDIENBUElUQUwgTEVUVEVSIFlFUlUKK1gJ0KwJQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU09GVCBTSUdOCit8CdCtCUNZUklMTElDIENBUElUQUwgTEVUVEVSIEUKK34J0K4JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWVUKK1EJ0K8JQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUEKK2EJ0LAJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKK2IJ0LEJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJFCit3CdCyCUNZUklMTElDIFNNQUxMIExFVFRFUiBWRQorZwnQswlDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCitkCdC0CUNZUklMTElDIFNNQUxMIExFVFRFUiBERQorZQnQtQlDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKK14J0ZEJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPCit2CdC2CUNZUklMTElDIFNNQUxMIExFVFRFUiBaSEUKK3oJ0LcJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFCitpCdC4CUNZUklMTElDIFNNQUxMIExFVFRFUiBJCitqCdC5CUNZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJCitrCdC6CUNZUklMTElDIFNNQUxMIExFVFRFUiBLQQorbAnQuwlDWVJJTExJQyBTTUFMTCBMRVRURVIgRUwKK20J0LwJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVNCituCdC9CUNZUklMTElDIFNNQUxMIExFVFRFUiBFTgorbwnQvglDWVJJTExJQyBTTUFMTCBMRVRURVIgTworcAnQvwlDWVJJTExJQyBTTUFMTCBMRVRURVIgUEUKK3IJ0YAJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVSCitzCdGBCUNZUklMTElDIFNNQUxMIExFVFRFUiBFUwordAnRgglDWVJJTExJQyBTTUFMTCBMRVRURVIgVEUKK3UJ0YMJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUKK2YJ0YQJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVGCitoCdGFCUNZUklMTElDIFNNQUxMIExFVFRFUiBIQQorYwnRhglDWVJJTExJQyBTTUFMTCBMRVRURVIgVFNFCis9CdGHCUNZUklMTElDIFNNQUxMIExFVFRFUiBDSEUKK1sJ0YgJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQQorXQnRiQlDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hDSEEKKyMJ0YoJQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBUkQgU0lHTgoreQnRiwlDWVJJTExJQyBTTUFMTCBMRVRURVIgWUVSVQoreAnRjAlDWVJJTExJQyBTTUFMTCBMRVRURVIgU09GVCBTSUdOCitcXAnRjQlDWVJJTExJQyBTTUFMTCBMRVRURVIgRQorYAnRjglDWVJJTExJQyBTTUFMTCBMRVRURVIgWVUKK3EJ0Y8JQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9zZXJiaWFuLWxhdGluLnZpbSBiL3J1bnRpbWUva2V5bWFwL3NlcmJpYW4tbGF0aW4udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmRlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9zZXJiaWFuLWxhdGluLnZpbQpAQCAtMCwwICsxIEBACitzb3VyY2UgPHNmaWxlPjpwOmgvc2VyYmlhbi1sYXRpbl91dGYtOC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL3NlcmJpYW4tbGF0aW5fdXRmLTgudmltIGIvcnVudGltZS9rZXltYXAvc2VyYmlhbi1sYXRpbl91dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiNTc3YQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL3NlcmJpYW4tbGF0aW5fdXRmLTgudmltCkBAIC0wLDAgKzEsNDQgQEAKKyIgVmltIEtleW1hcCBmaWxlIGZvciBTZXJiaWFuIGNoYXJhY3RlcnMsIGNsYXNzaWNhbCB2YXJpYW50LCBVVEYtOCBlbmNvZGluZworIgorIiBNYWludGFpbmVyOiAgIEFsZWtzYW5kYXIgVmVzZWxpbm92aWMgPGFsZWtzYUBjcy5jbXUuZWR1PgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5jcy5jbXUuZWR1L35hbGVrc2EvcGVyc29uYWwvdmltL2tleW1hcC9zZXJiaWFuLWxhdGluLVVURi04LnZpbQorIiBMYXN0IENoYW5nZWQ6IDIwMDIgTWFyIDI5CisKK3NjcmlwdGVuY29kaW5nIFVURi04CisKK2xldCBiOmtleW1hcF9uYW1lID0gInNlcmJpYW4tVVRGLTgiCisKK2xvYWRrZXltYXAKK1kJWgorewnFoAorfQnEkAoreQl6CitbCcWhCitdCcSRCis6ICAgxIwKK1wiCcSGCitcfAnFvQorOwnEjQorJwnEhworXFwJxb4KKyJaCVkKKyJ6CXkKKzwJOworPgk6CisvCS0KK18JPworLCwJ4oCeCisnJwnigJ0KKworRSQJPGNoYXItMHgyMEFDPgkiIEVVUk8gU0lHTgorLS0JPGNoYXItMHgyMDEzPgkiIGVuZGFzaAorLS0tCTxjaGFyLTB4MjAxND4JIiBlbWRhc2gKKworIiBACSIKKyIgIwknCisiICQJKgorIiAlCToKKyIgXgksCisiICZhbXA7CS4KKyIgKgk7CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL3NlcmJpYW4udmltIGIvcnVudGltZS9rZXltYXAvc2VyYmlhbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkMjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL3NlcmJpYW4udmltCkBAIC0wLDAgKzEsMjAgQEAKK2xldCBlbmNvZGluZyA9ICZlbmMKK2lmIGVuY29kaW5nID09ICdsYXRpbjEnCisgICAgaWYgaGFzKCJ1bml4IikKKwlsZXQgZW5jb2RpbmcgPSAnaXNvLTg4NTktMicKKyAgICBlbHNlCisJbGV0IGVuY29kaW5nID0gJ2NwMTI1MCcKKyAgICBlbmRpZgorZW5kaWYKKworaWYgZW5jb2RpbmcgPT0gJ3V0Zi04JworCXNvdXJjZSA8c2ZpbGU+OnA6aC9zZXJiaWFuX3V0Zi04LnZpbQorZWxzZWlmIGVuY29kaW5nID09ICdjcDEyNTAnCisJc291cmNlIDxzZmlsZT46cDpoL3NlcmJpYW5fY3AxMjUwLnZpbQorZWxzZWlmIGVuY29kaW5nID09ICdjcDEyNTEnCisJc291cmNlIDxzZmlsZT46cDpoL3NlcmJpYW5fY3AxMjUxLnZpbQorZWxzZWlmIGVuY29kaW5nID09ICdpc28tODg1OS0yJworCXNvdXJjZSA8c2ZpbGU+OnA6aC9zZXJiaWFuX2lzby04ODU5LTIudmltCitlbHNlCisJc291cmNlIDxzZmlsZT46cDpoL3NlcmJpYW5faXNvLTg4NTktNS52aW0KK2VuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL2tleW1hcC9zZXJiaWFuX2NwMTI1MC52aW0gYi9ydW50aW1lL2tleW1hcC9zZXJiaWFuX2NwMTI1MC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmODBhZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL3NlcmJpYW5fY3AxMjUwLnZpbQpAQCAtMCwwICsxLDQwIEBACisiIFZpbSBLZXltYXAgZmlsZSBmb3IgU2VyYmlhbiBjaGFyYWN0ZXJzLCBjbGFzc2ljYWwgdmFyaWFudCwgY3AxMjUwIGVuY29kaW5nCisiCisiIE1haW50YWluZXI6ICAgQWxla3NhbmRhciBWZXNlbGlub3ZpYyA8YWxla3NhQGNzLmNtdS5lZHU+CisiIFVSTDoJCSAgICBodHRwOi8vZ2FsZWIuZXRmLmJnLmFjLnl1L35hbGV4YS92aW0va2V5bWFwL3NlcmJpYW4tY3AxMjUwLnZpbQorIiBMYXN0IENoYW5nZWQ6IDIwMDIgTWFyIDI5CisKK3NjcmlwdGVuY29kaW5nIGNwMTI1MAorCitsZXQgYjprZXltYXBfbmFtZSA9ICJzZXJiaWFuLWNwMTI1MCIKKworbG9hZGtleW1hcAorWQlaCit7CYoKK30J0AoreQl6CitbCZoKK10J8AorOiAgIMgKK1wiCcYKK1x8CY4KKzsJ6AorJwnmCitcXAmeCisiWglZCisiegl5Cis8CTsKKz4JOgorLwktCitfCT8KKywsCYQKKycnCZQKKworIiBACSIKKyIgIwknCisiICQJKgorIiAlCToKKyIgXgksCisiICZhbXA7CS4KKyIgKgk7CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL3NlcmJpYW5fY3AxMjUxLnZpbSBiL3J1bnRpbWUva2V5bWFwL3NlcmJpYW5fY3AxMjUxLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjFjZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvc2VyYmlhbl9jcDEyNTEudmltCkBAIC0wLDAgKzEsOTAgQEAKKyIgVmltIEtleW1hcCBmaWxlIGZvciBTZXJiaWFuIGNoYXJhY3RlcnMsIGNsYXNzaWNhbCB2YXJpYW50LCB3aW4gY3AxMjUxCisiIGVuY29kaW5nCisiCisiIE1haW50YWluZXI6ICAgQWxla3NhbmRhciBWZXNlbGlub3ZpYyA8YWxla3NhQGNzLmNtdS5lZHU+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LmNzLmNtdS5lZHUvfmFsZWtzYS9wZXJzb25hbC92aW0va2V5bWFwL3NlcmJpYW4tY3AxMjUxLnZpbQorIiBMYXN0IENoYW5nZWQ6IDIwMDIgTWFyIDI5CisKK3NjcmlwdGVuY29kaW5nIGNwMTI1MQorCitsZXQgYjprZXltYXBfbmFtZSA9ICJzZXJiaWFuLWNwMTI1MSIKKworbG9hZGtleW1hcAorUQmKCitXCYwKK0UJxQorUgnQCitUCdIKK1kJxworVQnTCitJCcgKK08JzgorUAnPCit7CdgKK30JgAorcQmaCit3CZwKK2UJ5QorcgnwCit0CfIKK3kJ5wordQnzCitpCegKK28J7gorcAnvCitbCfgKK10JkAorQQnACitTCdEKK0QJxAorRgnUCitHCcMKK0gJ1QorSgmjCitLCcoKK0wJyworOgnXCitcIgmOCitcfAnGCithCeAKK3MJ8QorZAnkCitmCfQKK2cJ4woraAn1CitqCbwKK2sJ6gorbAnrCis7CfcKKycJngorXFwJ5gorIloJxworWAmPCitDCdYKK1YJwgorQgnBCitOCc0KK00JzAorInoJ5woreAmfCitjCfYKK3YJ4gorYgnhCituCe0KK20J7AorCis8CTsKKz4JOgorLwktCitfCT8KKywsCYQKKycnCZQKKworIiBACSIKKyIgIwknCisiICQJKgorIiAlCToKKyIgXgksCisiICZhbXA7CS4KKyIgKgk7CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL3NlcmJpYW5faXNvLTg4NTktMi52aW0gYi9ydW50aW1lL2tleW1hcC9zZXJiaWFuX2lzby04ODU5LTIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYmUzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9zZXJiaWFuX2lzby04ODU5LTIudmltCkBAIC0wLDAgKzEsNDAgQEAKKyIgVmltIEtleW1hcCBmaWxlIGZvciBTZXJiaWFuIGNoYXJhY3RlcnMsIGNsYXNzaWNhbCB2YXJpYW50LCBpc28tODg1OS0yIGVuY29kaW5nCisiCisiIE1haW50YWluZXI6ICAgQWxla3NhbmRhciBWZXNlbGlub3ZpYyA8YWxla3NhQGNzLmNtdS5lZHU+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LmNzLmNtdS5lZHUvfmFsZWtzYS9wZXJzb25hbC92aW0va2V5bWFwL3NlcmJpYW4taXNvLTg4NTktMi52aW0KKyIgTGFzdCBDaGFuZ2VkOiAyMDAyIE1hciAyOQorCitzY3JpcHRlbmNvZGluZyBpc28tODg1OS0yCisKK2xldCBiOmtleW1hcF9uYW1lID0gInNlcmJpYW4taXNvLTg4NTktMiIKKworbG9hZGtleW1hcAorWQlaCit7CakKK30J0AoreQl6CitbCbkKK10J8AorOiAgIMgKK1wiCcYKK1x8Ca4KKzsJ6AorJwnmCitcXAm+CisiWglZCisiegl5Cis8CTsKKz4JOgorLwktCitfCT8KKywsCT8KKycnCT8KKworIiBACSIKKyIgIwknCisiICQJKgorIiAlCToKKyIgXgksCisiICZhbXA7CS4KKyIgKgk7CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL3NlcmJpYW5faXNvLTg4NTktNS52aW0gYi9ydW50aW1lL2tleW1hcC9zZXJiaWFuX2lzby04ODU5LTUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzM4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9zZXJiaWFuX2lzby04ODU5LTUudmltCkBAIC0wLDAgKzEsODkgQEAKKyIgVmltIEtleW1hcCBmaWxlIGZvciBTZXJiaWFuIGNoYXJhY3RlcnMsIGNsYXNzaWNhbCB2YXJpYW50LCBpc28tODg1OS01IGVuY29kaW5nCisiCisiIE1haW50YWluZXI6ICAgQWxla3NhbmRhciBWZXNlbGlub3ZpYyA8YWxla3NhQGNzLmNtdS5lZHU+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LmNzLmNtdS5lZHUvfmFsZWtzYS9wZXJzb25hbC92aW0va2V5bWFwL3NlcmJpYW4taXNvLTg4NTktNS52aW0KKyIgTGFzdCBDaGFuZ2VkOiAyMDAyIE1hciAyOQorCitzY3JpcHRlbmNvZGluZyBpc28tODg1OS01CisKK2xldCBiOmtleW1hcF9uYW1lID0gInNlcmJpYW4taXNvLTg4NTktNSIKKworbG9hZGtleW1hcAorUQmpCitXCaoKK0UJtQorUgnACitUCcIKK1kJtworVQnDCitJCbgKK08JvgorUAm/Cit7CcgKK30JogorcQn5Cit3CfoKK2UJ1QorcgngCit0CeIKK3kJ1wordQnjCitpCdgKK28J3gorcAnfCitbCegKK10J8gorQQmwCitTCcEKK0QJtAorRgnECitHCbMKK0gJxQorSgmoCitLCboKK0wJuworOgnHCitcIgmrCitcfAm2CithCdAKK3MJ4QorZAnUCitmCeQKK2cJ0woraAnlCitqCfgKK2sJ2gorbAnbCis7CecKKycJ+worXFwJ1gorIloJtworWAmvCitDCcYKK1YJsgorQgmxCitOCb0KK00JvAorInoJ1woreAn/CitjCeYKK3YJ0gorYgnRCituCd0KK20J3AorCis8CTsKKz4JOgorLwktCitfCT8KKywsCT8KKycnCT8KKworIiBACSIKKyIgIwknCisiICQJKgorIiAlCToKKyIgXgksCisiICYJLgorIiAqCTsKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvc2VyYmlhbl91dGYtOC52aW0gYi9ydW50aW1lL2tleW1hcC9zZXJiaWFuX3V0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzg4YmZkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvc2VyYmlhbl91dGYtOC52aW0KQEAgLTAsMCArMSw5MyBAQAorIiBWaW0gS2V5bWFwIGZpbGUgZm9yIFNlcmJpYW4gY2hhcmFjdGVycywgY2xhc3NpY2FsIHZhcmlhbnQsIFVURi04IGVuY29kaW5nCisiCisiIE1haW50YWluZXI6ICAgQWxla3NhbmRhciBWZXNlbGlub3ZpYyA8YWxla3NhQGNzLmNtdS5lZHU+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LmNzLmNtdS5lZHUvfmFsZWtzYS9wZXJzb25hbC92aW0va2V5bWFwL3NlcmJpYW4tVVRGLTgudmltCisiIExhc3QgQ2hhbmdlZDogMjAwMiBNYXIgMjkKKworc2NyaXB0ZW5jb2RpbmcgVVRGLTgKKworbGV0IGI6a2V5bWFwX25hbWUgPSAic2VyYmlhbi1VVEYtOCIKKworbG9hZGtleW1hcAorUQnQiQorVwnQigorRQnQlQorUgnQoAorVAnQogorWQnQlworVQnQoworSQnQmAorTwnQngorUAnQnworewnQqAorfQnQggorcQnRmQordwnRmgorZQnQtQorcgnRgAordAnRggoreQnQtwordQnRgworaQnQuAorbwnQvgorcAnQvworWwnRiAorXQnRkgorQQnQkAorUwnQoQorRAnQlAorRgnQpAorRwnQkworSAnQpQorSgnQiAorSwnQmgorTAnQmworOgnQpworXCIJ0IsKK1x8CdCWCithCdCwCitzCdGBCitkCdC0CitmCdGECitnCdCzCitoCdGFCitqCdGYCitrCdC6CitsCdC7Cis7CdGHCisnCdGbCitcXAnQtgorIloJ0JcKK1gJ0I8KK0MJ0KYKK1YJ0JIKK0IJ0JEKK04J0J0KK00J0JwKKyJ6CdC3Cit4CdGfCitjCdGGCit2CdCyCitiCdCxCituCdC9CittCdC8CisKKzwJOworPgk6CisvCS0KK18JPworLCwJ4oCeCisnJwnigJ0KKworRSQJPGNoYXItMHgyMEFDPgkiIEVVUk8gU0lHTgorLS0JPGNoYXItMHgyMDEzPgkiIGVuZGFzaAorLS0tCTxjaGFyLTB4MjAxND4JIiBlbWRhc2gKKworIiBACSIKKyIgIwknCisiICQJKgorIiAlCToKKyIgXgksCisiICZhbXA7CS4KKyIgKgk7CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUva2V5bWFwL3Nsb3Zhay52aW0gYi9ydW50aW1lL2tleW1hcC9zbG92YWsudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZmQ2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9zbG92YWsudmltCkBAIC0wLDAgKzEsMTYgQEAKK2xldCBlbmNvZGluZyA9ICZlbmMKK2lmIGVuY29kaW5nID09ICdsYXRpbjEnCisgICAgaWYgaGFzKCJ1bml4IikKKwlsZXQgZW5jb2RpbmcgPSAnaXNvLTg4NTktMicKKyAgICBlbHNlCisJbGV0IGVuY29kaW5nID0gJ2NwMTI1MCcKKyAgICBlbmRpZgorZW5kaWYKKworaWYgZW5jb2RpbmcgPT0gJ3V0Zi04JworCXNvdXJjZSA8c2ZpbGU+OnA6aC9zbG92YWtfdXRmLTgudmltCitlbHNlaWYgZW5jb2RpbmcgPT0gJ2NwMTI1MCcKKwlzb3VyY2UgPHNmaWxlPjpwOmgvc2xvdmFrX2NwMTI1MC52aW0KK2Vsc2UKKwlzb3VyY2UgPHNmaWxlPjpwOmgvc2xvdmFrX2lzby04ODU5LTIudmltCitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvc2xvdmFrX2NwMTI1MC52aW0gYi9ydW50aW1lL2tleW1hcC9zbG92YWtfY3AxMjUwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzIzNGNiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9rZXltYXAvc2xvdmFrX2NwMTI1MC52aW0KQEAgLTAsMCArMSwxMDAgQEAKKyIgTWFpbnRhaW5lcjoJUGV0ZXIgVmFsYWNoIDxwdmFsYWNoQGdteC5uZXQ+CisiIExhc3QgQ2hhbmdlZDogMjAwMiBGZWIgMworIiBVUkw6CQlodHRwOi8vd3d3LnB2MmMuc2svZnJlZS9za192aW1rZXltYXAvCisKK2xldCBiOmtleW1hcF9uYW1lID0gInNrIgorCitsb2Fka2V5bWFwCisiIFogYSBZIC0gYWsgY2hjZXRlIHNsb3ZlbnNrdSBxd2VydHksIHpha29tZW50dWp0ZSB0aWV0byBzdHlyaSByaWFka3kKK3kgegoreiB5CitZIFoKK1ogWQorCisiIEhvcm55IHJpYWRvaworYCA7CisxICsKKyEgMQorMiC+CitAIDIKKzMgmgorIyAzCis0IOgKKyQgNAorNSCdCislIDUKKzYgngorXiA2Cis3IP0KKyYgNworOCDhCisqIDgKKzkg7QorKCA5CiswIOkKKykgMAorLSA9CitfICUKKworIiBLbGF2ZXN5IG9rb2xvIEVudGVydSA6KQorWyD6Cit7IC8KK10g5AorfSAoCitcXCDyCis8QmFyPiApCis7IPQKKzogIgorJyCnCitcIiAhCisiLCAsIDstKQorPCA/CisiLiAuIDstKQorPiA6CisvIC0KKz8gXworCisiIERsem5lCis9YSDhCis9QSDBCis9ZSDpCis9RSDJCis9aSDtCis9SSDNCis9bCDlCis9TCDFCis9byDzCis9TyDTCis9ciDgCis9UiDACis9dSD6Cis9VSDaCis9eiD9Cis9WiDdCisiIHByZSBwcmlwYWQgb215bHUgOikgYWxlYm8gc2xvdmVuc2tlaiBRV0VSVFkKKz15IP0KKz1ZIN0KKworIiBNYWtjZW5lCisrYSDkCisrQSDECisrYyDoCisrQyDICisrZCDvCisrRCDPCisrbCC+CisrTCC8CisrbiDyCisrTiDSCisrbyD0CisrTyDUCisrcyCaCisrUyCKCisrdCCdCisrVCCNCisreSCeCisrWSCOCisiIHByZSBwcmlwYWQgb215bHUgOikgYWxlYm8gc2xvdmVuc2tlaiBRV0VSVFkKKyt6IJ4KKytaII4KKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvc2xvdmFrX2lzby04ODU5LTIudmltIGIvcnVudGltZS9rZXltYXAvc2xvdmFrX2lzby04ODU5LTIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNDNmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tleW1hcC9zbG92YWtfaXNvLTg4NTktMi52aW0KQEAgLTAsMCArMSwxMDAgQEAKKyIgTWFpbnRhaW5lcjoJUGV0ZXIgVmFsYWNoIDxwdmFsYWNoQGdteC5uZXQ+CisiIExhc3QgQ2hhbmdlZDogMjAwMiBGZWIgMworIiBVUkw6CQlodHRwOi8vd3d3LnB2MmMuc2svZnJlZS9za192aW1rZXltYXAvCisKK2xldCBiOmtleW1hcF9uYW1lID0gInNrIgorCitsb2Fka2V5bWFwCisiIFogYSBZIC0gYWsgY2hjZXRlIHNsb3ZlbnNrdSBxd2VydHksIHpha29tZW50dWp0ZSB0aWV0byBzdHlyaSByaWFka3kKK3kgegoreiB5CitZIFoKK1ogWQorCisiIEhvcm55IHJpYWRvaworYCA7CisxICsKKyEgMQorMiC1CitAIDIKKzMguQorIyAzCis0IOgKKyQgNAorNSC7CislIDUKKzYgvgorXiA2Cis3IP0KKyYgNworOCDhCisqIDgKKzkg7QorKCA5CiswIOkKKykgMAorLSA9CitfICUKKworIiBLbGF2ZXN5IG9rb2xvIEVudGVydSA6KQorWyD6Cit7IC8KK10g5AorfSAoCitcXCDyCis8QmFyPiApCis7IPQKKzogIgorJyCnCitcIiAhCisiLCAsIDstKQorPCA/CisiLiAuIDstKQorPiA6CisvIC0KKz8gXworCisiIERsem5lCis9YSDhCis9QSDBCis9ZSDpCis9RSDJCis9aSDtCis9SSDNCis9bCDlCis9TCDFCis9byDzCis9TyDTCis9ciDgCis9UiDACis9dSD6Cis9VSDaCis9eiD9Cis9WiDdCisiIHByZSBwcmlwYWQgb215bHUgOikgYWxlYm8gc2xvdmVuc2tlaiBRV0VSVFkKKz15IP0KKz1ZIN0KKworIiBNYWtjZW5lCisrYSDkCisrQSDECisrYyDoCisrQyDICisrZCDvCisrRCDPCisrbCC1CisrTCClCisrbiDyCisrTiDSCisrbyD0CisrTyDUCisrcyC5CisrUyCpCisrdCC7CisrVCCrCisreSC+CisrWSCuCisiIHByZSBwcmlwYWQgb215bHUgOikgYWxlYm8gc2xvdmVuc2tlaiBRV0VSVFkKKyt6IL4KKytaIK4KKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9rZXltYXAvc2xvdmFrX3V0Zi04LnZpbSBiL3J1bnRpbWUva2V5bWFwL3Nsb3Zha191dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzZTA4MwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUva2V5bWFwL3Nsb3Zha191dGYtOC52aW0KQEAgLTAsMCArMSwxMDAgQEAKKyIgTWFpbnRhaW5lcjoJUGV0ZXIgVmFsYWNoIDxwdmFsYWNoQGdteC5uZXQ+CisiIExhc3QgQ2hhbmdlZDogMjAwMiBOb3YgNQorIiBVUkw6CQlodHRwOi8vd3d3LnB2MmMuc2svZnJlZS9za192aW1rZXltYXAvCisKK2xldCBiOmtleW1hcF9uYW1lID0gInNrIgorCitsb2Fka2V5bWFwCisiIFogYSBZIC0gYWsgY2hjZXRlIHNsb3ZlbnNrdSBxd2VydHksIHpha29tZW50dWp0ZSB0aWV0byBzdHlyaSByaWFka3kKK3kgegoreiB5CitZIFoKK1ogWQorCisiIEhvcm55IHJpYWRvaworYCA7CisxICsKKyEgMQorMiDEvgorQCAyCiszIMWhCisjIDMKKzQgxI0KKyQgNAorNSDFpQorJSA1Cis2IMW+CiteIDYKKzcgw70KKyYgNworOCDDoQorKiA4Cis5IMOtCisoIDkKKzAgw6kKKykgMAorLSA9CitfICUKKworIiBLbGF2ZXN5IG9rb2xvIEVudGVydSA6KQorWyDDugoreyAvCitdIMOkCit9ICgKK1xcIMWICis8QmFyPiApCis7IMO0Cis6ICIKKycgwqcKK1wiICEKKyIsICwgOy0pCis8ID8KKyIuIC4gOy0pCis+IDoKKy8gLQorPyBfCisKKyIgRGx6bmUKKz1hIMOhCis9QSDDgQorPWUgw6kKKz1FIMOJCis9aSDDrQorPUkgw40KKz1sIMS6Cis9TCDEuQorPW8gw7MKKz1PIMOTCis9ciDFlQorPVIgxZQKKz11IMO6Cis9VSDDmgorPXogw70KKz1aIMOdCisiIHByZSBwcmlwYWQgb215bHUgOikgYWxlYm8gc2xvdmVuc2tlaiBRV0VSVFkKKz15IMO9Cis9WSDDnQorCisiIE1ha2NlbmUKKythIMOkCisrQSDDhAorK2MgxI0KKytDIMSMCisrZCDEjworK0QgxI4KKytsIMS+CisrTCDEvQorK24gxYgKKytOIMWHCisrbyDDtAorK08gw5QKKytzIMWhCisrUyDFoAorK3QgxaUKKytUIMWkCisreSDFvgorK1kgxb0KKyIgcHJlIHByaXBhZCBvbXlsdSA6KSBhbGVibyBzbG92ZW5za2VqIFFXRVJUWQorK3ogxb4KKytaIMW9CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9SRUFETUUudHh0IGIvcnVudGltZS9sYW5nL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxMGI0ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9SRUFETUUudHh0CkBAIC0wLDAgKzEsNjQgQEAKK0xhbmd1YWdlIGZpbGVzIGZvciBWaW0KKworVHJhbnNsYXRlZCBtZW51cworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29udGVudHMgb2YgZWFjaCBtZW51IGZpbGUgaXMgYSBzZXF1ZW5jZSBvZiBsaW5lcyB3aXRoICJtZW51dHJhbnMiCitjb21tYW5kcy4gIFJlYWQgb25lIG9mIHRoZSBleGlzdGluZyBmaWxlcyB0byBnZXQgYW4gaWRlYSBvZiBob3cgdGhpcyB3b3Jrcy4KKworTW9yZSBpbmZvcm1hdGlvbiBpbiB0aGUgb24tbGluZSBoZWxwOgorCisJOmhlbHAgbXVsdGlsYW5nLW1lbnVzCisJOmhlbHAgOm1lbnV0cmFucworCTpoZWxwICdsYW5nbWVudScKKwk6aGVscCA6bGFuZ3VhZ2UKKworVGhlICIkVklNUlVOVElNRS9tZW51LnZpbSIgZmlsZSB3aWxsIHNlYXJjaCBmb3IgYSBtZW51IHRyYW5zbGF0aW9uIGZpbGUuICBUaGlzCitkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgInY6bGFuZyIgdmFyaWFibGUuCisKKwkibWVudV8iIC4gdjpsYW5nIC4gIi52aW0iCisKK1doZW4gdGhlICdtZW51dHJhbnMnIG9wdGlvbiBpcyBzZXQsIGl0cyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB2OmxhbmcuCisKK1RoZSBmaWxlIG5hbWUgaXMgYWx3YXlzIGxvd2VyIGNhc2UuICBJdCBpcyB0aGUgZnVsbCBuYW1lIGFzIHRoZSAiOmxhbmd1YWdlIgorY29tbWFuZCBzaG93cyAodGhlIExDX01FU1NBR0VTIHZhbHVlKS4KKworRm9yIGV4YW1wbGUsIHRvIHVzZSB0aGUgQmlnNSAoVGFpd2FuKSBtZW51cyBvbiBNUy1XaW5kb3dzIHRoZSAkTEFORyB3aWxsIGJlCisKKwlDaGluZXNlKFRhaXdhbilfVGFpd2FuLjk1MAorCithbmQgdXNlIHRoZSBtZW51IHRyYW5zbGF0aW9uIGZpbGU6CisKKwkkVklNUlVOVElNRS9sYW5nL21lbnVfY2hpbmVzZSh0YWl3YW4pX3RhaXdhbi45NTAudmltCisKK09uIFVuaXggeW91IHNob3VsZCBzZXQgJExBTkcsIGRlcGVuZGluZyBvbiB5b3VyIHNoZWxsOgorCisJY3NoL3Rjc2g6CXNldGVudiBMQU5HICJ6aF9UVy5CaWc1IgorCXNoL2Jhc2gva3NoOglleHBvcnQgTEFORz0iemhfVFcuQmlnNSIKKworYW5kIHRoZSBtZW51IHRyYW5zbGF0aW9uIGZpbGUgaXM6CisKKwkkVklNUlVOVElNRS9sYW5nL21lbnVfemhfdHcuYmlnNS52aW0KKworVGhlIG1lbnUgdHJhbnNsYXRpb24gZmlsZSBzaG91bGQgc2V0IHRoZSAiZGlkX21lbnVfdHJhbnMiIHZhcmlhYmxlIHNvIHRoYXQgVmltCit3aWxsIG5vdCBsb2FkIGFub3RoZXIgZmlsZS4KKworCitBVVRPTUFUSUMgQ09OVkVSU0lPTgorCitXaGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCBtdWx0aS1ieXRlIHN1cHBvcnQsIGNvbnZlcnNpb24gYmV0d2VlbiBsYXRpbjEgYW5kCitVVEYtOCB3aWxsIGFsd2F5cyBiZSBwb3NzaWJsZS4gIE90aGVyIGNvbnZlcnNpb25zIGRlcGVuZCBvbiB0aGUgaWNvbnYKK2xpYnJhcnksIHdoaWNoIGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlLgorRm9yIFVURi04IG1lbnUgZmlsZXMgd2hpY2ggb25seSB1c2UgbGF0aW4xIGNoYXJhY3RlcnMsIHlvdSBjYW4gcmVseSBvbiBWaW0KK2RvaW5nIHRoZSBjb252ZXJzaW9uLiAgTGV0IHRoZSBVVEYtOCBtZW51IGZpbGUgc291cmNlIHRoZSBsYXRpbjEgbWVudSBmaWxlLAorYW5kIHB1dCAic2NyaXB0ZW5jb2RpbmcgbGF0aW4xIiBpbiB0aGF0IG9uZS4KK090aGVyIGNvbnZlcnNpb25zIG1heSBub3QgYWx3YXlzIGJlIGF2YWlsYWJsZSAoZS5nLiwgYmV0d2VlbiBpc28tODg1OS0jIGFuZAorTVMtV2luZG93cyBjb2RlcGFnZXMpLCB0aHVzIHRoZSBjb252ZXJ0ZWQgbWVudSBmaWxlIG11c3QgYmUgYXZhaWxhYmxlLgorCisKK1RyYW5zbGF0ZWQgbWVzc2FnZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyByZXF1aXJlcyBkb2luZyAibWFrZSBpbnN0YWxsIiBpbiB0aGUgInNyYyIgZGlyZWN0b3J5LiAgSXQgd2lsbCBjb21waWxlCit0aGUgcG9ydGFibGUgZmlsZXMgInNyYy9wby8qLnBvIiBpbnRvIGJpbmFyeSAiLm1vIiBmaWxlcyBhbmQgcGxhY2UgdGhlbSBpbiB0aGUKK3JpZ2h0IGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2FmLmxhdGluMS52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9hZi5sYXRpbjEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYzJlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9hZi5sYXRpbjEudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJQWZyaWthYW5zCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X2FmX2FmLmxhdGluMS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2FmLnV0Zi04LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2FmLnV0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTM5YjU5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfYWYudXRmLTgudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJQWZyaWthYW5zIGZvciBVVEYtOCBlbmNvZGluZworCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9hZl9hZi5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9hZl9hZi5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfYWZfYWYubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzJlOGU5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfYWZfYWYubGF0aW4xLnZpbQpAQCAtMCwwICsxLDE1MiBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJQWZyaWthYXMKKyIgTWFpbnRhaW5lcjoJCURhbmllIFJvdXggPGRyb3V4QHR1a3MuY28uemE+CisiIExhc3QgQ2hhbmdlOgkJMjAwMyBNYXIgMzAKKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX21lbnVfdHJhbnMgPSAxCisKKyIgVGhlIHRyYW5zbGF0aW9ucyBiZWxvdyBhcmUgaW4gbGF0aW4xLCBidXQgdGhleSB3b3JrIGZvciBjcDEyNTIgYW5kCisiIGlzby04ODU5LTE1IHdpdGhvdXQgY29udmVyc2lvbiBhcyB3ZWxsLgoraWYgJmVuYyAhPSAiY3AxMjUyIiAmJiAmZW5jICE9ICJpc28tODg1OS0xNSIKKyAgc2NyaXB0ZW5jb2RpbmcgbGF0aW4xCitlbmRpZgorCisKKyIgSGVscCBtZW51CittZW51dHJhbnMgJkhlbHAJCQkmSHVscAorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgkmT29yc2lnPFRhYj48RjE+CittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJJkhvdy10b1wgSW5kZWtzCisibWVudXRyYW5zICZHVUkJCQkmR1VJCittZW51dHJhbnMgJkNyZWRpdHMJCSZNZXRcIGRhbmtcIGFhbgorbWVudXRyYW5zIENvJnB5aW5nCQkmS29waWVyZWcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJJlNvZWtcLlwuXC4KK21lbnV0cmFucyAmVmVyc2lvbgkJJldlZXJnYXdlCittZW51dHJhbnMgJkFib3V0CQkmSW5sZWlkaW5nXCBza2VybQorCisiIEZpbGUgbWVudQorbWVudXRyYW5zICZGaWxlCQkJCSZM6mVyCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQkmT3BlblwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCU1hYWtcIG9vcFwgaW5cIG51d2VcICZ2ZW5zdGVyXC5cLlwuPFRhYj46c3AKK21lbnV0cmFucyAmTmV3PFRhYj46ZW5ldwkJJk51dXQ8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCU1hYWtcICZUb2U8VGFiPjpjbG9zZQorbWVudXRyYW5zICZTYXZlPFRhYj46dwkJCSZTa3J5ZjxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjp3CVNrcnlmXCAmYXNcLlwuXC48VGFiPjp3CittZW51dHJhbnMgJlByaW50CQkJJkRydWsKK21lbnV0cmFucyBTYSZ2ZS1FeGl0PFRhYj46d3FhCQlTa3J5ZlwgZW5cIHZlcmxhYXQ8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJJlZlcmxhYXQ8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCSZXeXNpZworbWVudXRyYW5zICZVbmRvPFRhYj51CQkJVGVydWc8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQlWb28mcnVpdDxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJCSZIZXJoYWFsPFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCSZLbmlwPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJJktvcGnrZXI8VGFiPiIreQorbWVudXRyYW5zICZQYXN0ZTxUYWI+IitnUAkJUGxhazxUYWI+IitnUAorbWVudXRyYW5zIFB1dFwgJkJlZm9yZTxUYWI+W3AJCVZvZWdcICZWb29yXCBpbjxUYWI+W3AKK21lbnV0cmFucyBQdXRcICZBZnRlcjxUYWI+XXAJCVZvZWdcIEEmZ3RlclwgaW48VGFiPl1wCittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHCQlLaWVzXCAmQWxsZXM8VGFiPmdnVkcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCSZTb2VrXC5cLlwuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZVwuXC5cLgkJCVNvZWtcIGVuXCBWZXJ2YW5nXC5cLlwuCittZW51dHJhbnMgT3B0aW9uc1wuXC5cLgkJCU9wc2llc1wuXC5cLgorCisiIFByb2dyYW1taW5nIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJCQkmR2VyZWVkc2thcAorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JJlNwcmluZ1wgbmFcIEV0aWtldDxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQlTcHJpbmdcICZUZXJ1ZzxUYWI+XlQKK21lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCUdlbmVyZWVyXCAmRXRpa2V0XCBMZepyCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQlWb2VyXCAmTWFrZVwgdWl0PFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJJkZvdXRseXM8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQkmQm9vZHNrYXBseXM8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkJVm9sZ2VuZGVcIEZvdXQ8VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAlWb3JpZ2VcIEZvdXQ8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJJk91ZXJcIEx5czxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3CSZOdXdlclwgTHlzPFRhYj46Y25ldworbWVudXRyYW5zIEVycm9yXCAmV2luZG93PFRhYj46Y3dpbglGb3V0ZVwgVmVuc3RlcjxUYWI+OmN3aW4KK21lbnV0cmFucyBDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJVmVyd2lzc2VsXCBuYVwgSEVYPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZXJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yCVZlcndpc3NlbFwgdGVydWc8VGFiPjolIXh4ZFwgLXIKKworIiBOYW1lcyBmb3IgYnVmZmVyIG1lbnUuCittZW51dHJhbnMgJkJ1ZmZlcnMJJkJ1ZmZlcnMKK21lbnV0cmFucyBSZWZyZXNoCVZlcmZyaXMKK21lbnV0cmFucyBEZWxldGUJVmVyd3lkZXIKK21lbnV0cmFucyBBbHRlcm5hdGUJVm9yaWdlCittZW51dHJhbnMgW05vXCBGaWxlXQlbR2VlblwgTGXqcl0KKworIiBXaW5kb3cgbWVudQorbWVudXRyYW5zICZXaW5kb3cJCQkmVmVuc3RlcgorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCSZOdXV0PFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJVmVyJmRlZWw8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JVmVyZGVlbFwgTiZhXCAjPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJCVZlcmRlZWxcIFZlcnRpa2FhbDxUYWI+Xld2CittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCSZNYWFrXCB0b2U8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwlNYWFrXCAmQW5kZXJcIFRvZTxUYWI+XldvCittZW51dHJhbnMgTmUmeHQ8VGFiPl5XdwkJCVZvbGdlbmRlPFRhYj5eV3cKK21lbnV0cmFucyBQJnJldmlvdXM8VGFiPl5XVwkJJlZvcmlnZTxUYWI+XldXCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JCSZHZWx5a2VcIGhvb2d0ZTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCSZNYWtzaW1hbGVcIGhvb2d0ZTxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQlNaSZuaW1hbGVcIGhvb2d0ZTxUYWI+XlcxXworbWVudXRyYW5zIE1heFwgV2lkdGg8VGFiPl5XXHwJCU1ha3NpbWFsZVwgYnJlZWR0ZTxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdGg8VGFiPl5XMVx8CQlNaW5pbWFsZVwgYnJlZWR0ZTxUYWI+XlcxXHwKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQlSb3RlZXJcIG5hXCAmYm88VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJUm90ZWVyXCBuYVwgJm9uZGVyPFRhYj5eV3IKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQlLaWVzXCBmb250XC5cLlwuCisKKyIgVGhlIHBvcHVwIG1lbnUKK21lbnV0cmFucyAmVW5kbwkJCSZUZXJ1ZworbWVudXRyYW5zIEN1JnQJCQlLbmlwCittZW51dHJhbnMgJkNvcHkJCQkmS29waetlcgorbWVudXRyYW5zICZQYXN0ZQkJJlBsYWsKK21lbnV0cmFucyAmRGVsZXRlCQkmVmVyd3lkZXIKK21lbnV0cmFucyBTZWxlY3RcIEJsb2Nrd2lzZQlLaWVzXCBwZXJcIEJsb2sKK21lbnV0cmFucyBTZWxlY3RcICZXb3JkCQlLaWVzXCBlZW5cICZXb29yZAorbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCUtpZXNcIGVlblwgJlJl62wKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawlLaWVzXCBlZW5cICZCbG9rCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQlLaWVzXCAmQWxsZXMKKworIiBUaGUgR1VJIHRvb2xiYXIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCU1hYWsgbGXqciBvb3AKKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCVNrcnlmIGxl6nIKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJU2tyeWYgYWxsZSBsZepycworICAgIHRtZW51IFRvb2xCYXIuUHJpbnQJCURydWsKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCVRlcnVnCisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQlWb29ydWl0CisgICAgdG1lbnUgVG9vbEJhci5DdXQJCUtuaXAKKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCUtvcGnrZXIKKyAgICB0bWVudSBUb29sQmFyLlBhc3RlCQlQbGFrCisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQlTb2VrLi4uCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAlTb2VrIHZvbGdlbmRlCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldglTb2VrIHZvcmlnZQorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQlTb2VrIGVuIHZlcnZhbmcuLi4KKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCUxhYWkgc2Vzc2llCisgICAgdG1lbnUgVG9vbEJhci5TYXZlU2VzbglTdG9vciBzZXNzaWUKKyAgICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdAlWb2VyIHZpbSBza3JpcCB1aXQKKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCVZvZXIgbWFrZSB1aXQKKyAgICB0bWVudSBUb29sQmFyLlNoZWxsCQlCZWdpbiBkb3AKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCUdlbmVyZWVyIGV0aWtldHRlCisgICAgdG1lbnUgVG9vbEJhci5UYWdKdW1wCVNwcmluZyBuYSBldGlrZXQKKyAgICB0bWVudSBUb29sQmFyLkhlbHAJCUh1bHAKKyAgICB0bWVudSBUb29sQmFyLkZpbmRIZWxwCVNvZWsgaHVscC4uLgorICBlbmRmdW4KK2VuZGlmCisKKyIgU3ludGF4IG1lbnUKK21lbnV0cmFucyAmU3ludGF4CQkmU2ludGFrcworbWVudXRyYW5zIFNldFwgJ3N5bnRheCdcIG9ubHkJCVN0ZWxcIHNsZWdzXCAnc3ludGF4JworbWVudXRyYW5zIFNldFwgJ2ZpbGV0eXBlJ1wgdG9vCVZlcmFuZGVyXCAnZmlsZXR5cGUnXCBvb2sKK21lbnV0cmFucyAmT2ZmCQkJJkFmCittZW51dHJhbnMgJk1hbnVhbAkJJk1ldFwgZGllXCBoYW5kCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJTyZ1dG9tYXRpZXMKK21lbnV0cmFucyBvJm5cICh0aGlzXCBmaWxlKQkJQWEmblwgKGRpZVwgbGXqcikKK21lbnV0cmFucyBvJmZmXCAodGhpc1wgZmlsZSkJJkFmXCAoZGllXCBsZepyKQorbWVudXRyYW5zIENvJmxvclwgdGVzdAkJVG9ldHNcIGRpZVwgJmtsZXVyZQorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJVG9ldHNcIGRpZVwgdmVybGlndGluZworbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSFRNTAlWZXJ3aXNzZWxcIG5hXCBIVE1MCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9hZl9hZi51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9hZl9hZi51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzOWI1OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2FmX2FmLnV0Zi04LnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUFmcmlrYWFucyBmb3IgVVRGLTggZW5jb2RpbmcKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfYWZfYWYubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfY2EubGF0aW4xLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2NhLmxhdGluMS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlZGZkOAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2NhLmxhdGluMS52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgdHJhbnNsYXRpb25zIGZvciBDYXRhbGFuCisiCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9jYV9lcy5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9jYS51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9jYS51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlZTEwZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2NhLnV0Zi04LnZpbQpAQCAtMCwwICsxLDcgQEAKKyIgTWVudSB0cmFuc2xhdGlvbnMgZm9yIENhdGFsYW4KKyIKKyIgTWFpbnRhaW5lcjoJRXJuZXN0IEFkcm9ndekgPGVhZHJvZ3VlQGdteC5uZXQ+CisiIExhc3QgQ2hhbmdlOgkyOSBEZWMgMjAwMworIgorc291cmNlIDxzZmlsZT46cDpoL21lbnVfY2FfZXMubGF0aW4xLnZpbQorCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9jYV9lcy5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfY2FfZXMubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzFjNjBlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfY2FfZXMubGF0aW4xLnZpbQpAQCAtMCwwICsxLDI5MyBAQAorIiBNZW51IHRyYW5zbGF0aW9ucyBmb3IgQ2F0YWxhbgorIgorIiBNYWludGFpbmVyOglFcm5lc3QgQWRyb2d16SA8ZWFkcm9ndWVAZ214Lm5ldD4KKyIgTGFzdCBDaGFuZ2U6CTE4IEphbiAyMDA0CisiCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCisiIFRoZSB0cmFuc2xhdGlvbnMgYmVsb3cgYXJlIGluIGxhdGluMSwgYnV0IHRoZXkgd29yayBmb3IgY3AxMjUyLAorIiBpc28tODg1OS0xNSB3aXRob3V0IGNvbnZlcnNpb24gYXMgd2VsbC4KK2lmICZlbmMgIT0gImNwMTI1MiIgJiYgJmVuYyAhPSAiaXNvLTg4NTktMTUiCisgIHNjcmlwdGVuY29kaW5nIGxhdGluMQorZW5kaWYKKworCisiIG1lbvogQWp1ZGEKK21lbnV0cmFucyAmSGVscAkJCQkmQWp1ZGEKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4JCSZJbnRyb2R1Y2Np8zxUYWI+PEYxPgorbWVudXRyYW5zICZVc2VyXCBNYW51YWwJCQkmTWFudWFsXCBkZVwgbCd1c3VhcmkKK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcwkJQ29tXCAmZmVyXC5cLlwuPworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJJkNlcmNhXC5cLlwuCittZW51dHJhbnMgJkNyZWRpdHMJCQkmQXV0b3JzCittZW51dHJhbnMgQ28mcHlpbmcJCQlDb24mZGljaW9ucworbWVudXRyYW5zIE8mcnBoYW5zCQkJJk9yZmVzCittZW51dHJhbnMgJlZlcnNpb24JCQkmVmVyc2nzCittZW51dHJhbnMgJkFib3V0CQkJJlF1YW50XCBhXC5cLlwuCisiIHRleHQgZGVsIGRp4GxlZyBBanVkYS9DZXJjYS4uLgorbGV0IGc6bWVudXRyYW5zX2hlbHBfZGlhbG9nID0gIkludHJvZHXvdSBlbCB0ZXJtZSBzb2JyZSBlbCBxdWFsIG5lY2Vzc2l0ZXUgYWp1ZGEuXG5cblVzZXUgZWwgcHJlZml4IGlfIHBlciBvcmRyZXMgZCdlbnRyYWRhIChwLmV4LjogaV9DVFJMLVgpXG5Vc2V1IGVsIHByZWZpeCBjXyBwZXIgb3JkcmVzIGRlIGxhIGztbmlhIGQnb3JkcmVzIChwLmV4LjogY188RGVsPilcblVzZXUgZWwgcHJlZml4ICcgcGVyIG5vbXMgZCdvcGNpb25zIChwLmV4LjogJ3NoaWZ0d2lkdGgnKSIKKworCisiIG1lbvogRml0eGVyCittZW51dHJhbnMgJkZpbGUJCQkJJkZpdHhlcgorbWVudXRyYW5zICZPcGVuXC5cLlwuPFRhYj46ZQkJJk9icmVcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAlPYnJlXCBlblwgdW5hXCAmZmluZXN0cmFcIG5vdmFcLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQkmTm91PFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQkmVGFuY2E8VGFiPjpjbG9zZQorbWVudXRyYW5zICZTYXZlPFRhYj46dwkJCSZEZXNhPFRhYj46dworbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdgkmQW5vbWVuYVwgaVwgZGVzYVwuXC5cLjxUYWI+OnNhdgorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLgkmTW9zdHJhXCBsZXNcIGRpZmVy6G5jaWVzXCByZXNwZWN0ZVwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JQXBsaWNhXCBsZXNcIG1vZGlmaWNhY2lvbnNcIGRlXC5cLlwuCittZW51dHJhbnMgJlByaW50CQkJJkltcHJpbWVpeAorbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJCURlc2FcIGlcIHMmdXJ0PFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCSZTdXJ0PFRhYj46cWEKKworCisiIG1lbvogRWRpdGEKK21lbnV0cmFucyAmRWRpdAkJCQkmRWRpdGEKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSZEZXNm6XM8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQkmUmVm6XM8VGFiPl5SCittZW51dHJhbnMgUmVwJmVhdDxUYWI+XC4JCVJlJnBldGVpeDxUYWI+XC4KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCQlSZSZ0YWxsYTxUYWI+Iit4CittZW51dHJhbnMgJkNvcHk8VGFiPiIreQkJCSZDb3BpYTxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQlFbmdhbiZ4YTxUYWI+IitnUAorbWVudXRyYW5zIFB1dFwgJkJlZm9yZTxUYWI+W3AJCVBvc2FcICZhYmFuczxUYWI+W3AKK21lbnV0cmFucyBQdXRcICZBZnRlcjxUYWI+XXAJCVAmb3NhXCBkZXNwculzPFRhYj5dcAorbWVudXRyYW5zICZEZWxldGU8VGFiPngJCQlTdXByaW1laXg8VGFiPngKK21lbnV0cmFucyAmU2VsZWN0XCBhbGw8VGFiPmdnVkcJCSZTZWxlY2Npb25hLWhvXCB0b3Q8VGFiPmdnVkcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCSZDZXJjYVwuXC5cLgorbWVudXRyYW5zICZGaW5kPFRhYj4vCQkJJkNlcmNhPFRhYj4vCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZQkJQ2VyY2FcIGlcIHMmdWJzdGl0dWVpeAorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JQ2VyY2FcIGlcIHMmdWJzdGl0dWVpeFwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjolcwlDZXJjYVwgaVwgcyZ1YnN0aXR1ZWl4PFRhYj46JXMKK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlPFRhYj46cwlDZXJjYVwgaVwgcyZ1YnN0aXR1ZWl4PFRhYj46cworbWVudXRyYW5zIFNldHRpbmdzXCAmV2luZG93CQkmRmluZXN0cmFcIGQnb3BjaW9ucworbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQlPcGNpb25zXCAmZ2xvYmFscworIiBzdWJtZW76IEVkaXRhL09wY2lvbnMgR2xvYmFscworICBtZW51dHJhbnMgVG9nZ2xlXCBQYXR0ZXJuXCAmSGlnaGxpZ2h0PFRhYj46c2V0XCBobHMhCVJlc3NhbHRcIGRlXCAmcGF0cm9uczxUYWI+OnNldFwgaGxzIQorICBtZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljIQkJU2Vuc2liaWxpdGF0XCBhXCBsZXNcIG1hJmr6c2N1bGVzPFRhYj46c2V0XCBpYyEKKyAgbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCQkmUmVzc2FsdFwgZGVcIGNvaW5jaWTobmNpZXM8VGFiPjpzZXRcIHNtIQorICBtZW51dHJhbnMgJkNvbnRleHRcIGxpbmVzCQkJCUztbmllc1wgZGVcIGNvJm50ZXh0CisgIG1lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJCQlFZGljafNcICZ2aXJ0dWFsCisiIHN1Ym1lbvogRWRpdGEvT3BjaW9ucyBHbG9iYWxzL0VkaWNp8yB2aXJ0dWFsCisgICAgbWVudXRyYW5zIE5ldmVyCQkJCQkmTWFpCisgICAgbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCQkJJlNlbGVjY2nzXCBkZVwgYmxvY3MKKyAgICBtZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJCU1vZGVcIGQnJmluc2VyY2nzCisgICAgbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJCSZCbG9jcyBpIGluc2VyY2nzCisgICAgbWVudXRyYW5zIEFsd2F5cwkJCQkJUyZlbXByZQorICBtZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJCU1vZGVcIGQnJmluc2VyY2nzPFRhYj46c2V0XCBpbSEKKyAgbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEJQ28mbXBhdGlibGVcIGFtYlwgVmk8VGFiPjpzZXRcIGNwIQorICBtZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkJCQkmVWJpY2FjaW9uc1wuXC5cLgorICBtZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4JCQkJRml0eGVyc1wgZCcmZXRpcXVldGVzXC5cLlwuCisgIG1lbnV0cmFucyBUb2dnbGVcICZUb29sYmFyCQkJCSZCYXJyYVwgZCdlaW5lcworICBtZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJCQlCYXJyYVwgZGVcICZkZXNwbGHnYW1lbnRcIGluZmVyaW9yCisgIG1lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJCQlCYXJyYVwgZGVcIGRlc3BsYedhbWVudFwgZSZzcXVlcnJhCisgIG1lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCQkJQmFycmFcIGRlXCBkZXNwbGHnYW1lbnRcIGRyZSZ0YQorbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJCQlPcGNpb25zXCBkZWxcIGYmaXR4ZXIKKyIgc3VibWVu+iBFZGl0YS9PcGNpb25zIGRlbCBmaXR4ZXIKKyAgbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCSZFbm51bWVyYVwgbGVzXCBs7W5pZXM8VGFiPjpzZXRcIG51IQorICBtZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCU1vZGVcICZsbGlzdGE8VGFiPjpzZXRcIGxpc3QhCisgIG1lbnV0cmFucyBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQkJQSZqdXN0YVwgbGVzXCBs7W5pZXNcIGxsYXJndWVzPFRhYj46c2V0XCB3cmFwIQorICBtZW51dHJhbnMgVG9nZ2xlXCBXJnJhcFwgYXRcIHdvcmQ8VGFiPjpzZXRcIGxiciEJQWp1c3RhXCBzZW5zZVwgcGFydGlyXCAmcGFyYXVsZXM8VGFiPjpzZXRcIGxiciEKKyAgbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJRXN06W5cIGxlc1wgdGEmYnVsYWNpb25zPFRhYj46c2V0XCBldCEKKyAgbWVudXRyYW5zIFRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEJCSZTYWduaWFcIGF1dG9t4HRpY2E8VGFiPjpzZXRcIGFpIQorICBtZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJCVNhZ25pYVwgZXN0aWxcICZDPFRhYj46c2V0XCBjaW4hCisgIG1lbnV0cmFucyAmU2hpZnR3aWR0aAkJCQkJU2EmZ25pYQorICBtZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCQkJQW1wbGFkYVwgZGVcICZ0YWJ1bGFjafMKKyAgbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJCQkmQW1wbGFkYVwgZGVsXCB0ZXh0XC5cLlwuCisgIG1lbnV0cmFucyAmRmlsZVwgRm9ybWF0XC5cLlwuCQkJCSZGb3JtYXRcIGRlbFwgZml0eGVyXC5cLlwuCittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkJVGlwdXNcIGRlXCAmbGxldHJhXC5cLlwuCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCUVzJnF1ZW1hXCBkZVwgY29sb3JzCisiIHN1Ym1lbvogRWRpdGEvRXNxdWVtYSBkZSBjb2xvcnMKKyAgbWVudXRyYW5zIGJsdWUJCQlibGF1CisgIG1lbnV0cmFucyBkYXJrYmx1ZQkJCWJsYXVcIGZvc2MKKyAgbWVudXRyYW5zIGRlZmF1bHQJCQlub3JtYWwKKyAgbWVudXRyYW5zIGRlc2VydAkJCWRlc2VydAorICBtZW51dHJhbnMgZXZlbmluZwkJCXZlc3ByYWRhCisgIG1lbnV0cmFucyBtb3JuaW5nCQkJbWF0aW5hZGEKKyAgbWVudXRyYW5zIHBlYWNocHVmZgkJCXBy6XNzZWMKKyAgbWVudXRyYW5zIHNoaW5lCQkJYnJpbGxhbnQKK21lbnV0cmFucyAmS2V5bWFwCQkJJk1hcGFcIGRlXCB0ZWNsZXMKKyIgc3VibWVu+iBFZGl0YS9NYXBhIGRlIHRlY2xlcworICBtZW51dHJhbnMgTm9uZQkJCUNhcAorICBtZW51dHJhbnMgYWNjZW50cwkJCUFjY2VudHMKKyAgbWVudXRyYW5zIGFyYWJpYwkJCcByYWIKKyAgbWVudXRyYW5zIGN6ZWNoCQkJVHhlYworICBtZW51dHJhbnMgZXNwZXJhbnRvCQkJRXNwZXJhbnRvCisgIG1lbnV0cmFucyBncmVlawkJCUdyZWMKKyAgbWVudXRyYW5zIGhlYnJldwkJCUhlYnJldQorICBtZW51dHJhbnMgaGVicmV3cAkJCUhlYnJldVwgKGZvbuh0aWMpCisgIG1lbnV0cmFucyBsaXRodWFuaWFuLWJhbHRpYwkJTGl0deBcIChi4Gx0aWMpCisgIG1lbnV0cmFucyBwaW55aW4JCQlNYW5kYXLtXCAoZm9u6HRpYykKKyAgbWVudXRyYW5zIHJ1c3NpYW4tamN1a2VuCQlSdXNcIChqY3VrZW4pCisgIG1lbnV0cmFucyBydXNzaWFuLWpjdWtlbndpbgkJUnVzXCAoamN1a2Vud2luKQorICBtZW51dHJhbnMgcnVzc2lhbi15YXdlcnR5CQlSdXNcICh5YXdlcnR5KQorICBtZW51dHJhbnMgc2VyYmlhbgkJCVNlcmJpCisgIG1lbnV0cmFucyBzZXJiaWFuLWxhdGluCQlTZXJiaVwgKGxsYXTtKQorICBtZW51dHJhbnMgc2xvdmFrCQkJRXNsb3ZhYworIiB0ZXh0IGRlbCBkaeBsZWcgRWRpdGEvT3BjaW9ucyBnbG9iYWxzL1ViaWNhY2lvbnMuLi4KK2xldCBnOm1lbnV0cmFuc19wYXRoX2RpYWxvZyA9ICJJbnRyb2R173UgbGVzIHViaWNhY2lvbnMgb24gY2VyY2FyIGZpdHhlcnMuXG5TZXBhcmV1IGVscyBub21zIGRlbHMgZGlyZWN0b3JpcyBhbWIgdW5hIGNvbWEuIgorIiB0ZXh0IGRlbCBkaeBsZWcgRWRpdGEvT3BjaW9ucyBnbG9iYWxzL0ZpdHhlcnMgZCdldGlxdWV0ZXMuLi4KK2xldCBnOm1lbnV0cmFuc190YWdzX2RpYWxvZyA9ICJJbnRyb2R173UgZWxzIG5vbXMgZGVscyBmaXR4ZXJzIGQnZXRpcXVldGVzLlxuU2VwYXJldSBlbHMgbm9tcyBhbWIgdW5hIGNvbWEuIgorIiB0ZXh0IGRlbCBkaeBsZWcgRWRpdGEvT3BjaW9ucyBkZWwgZml0eGVyL0FtcGxhZGEgZGVsIHRleHQuLi4KK2xldCBnOm1lbnV0cmFuc190ZXh0d2lkdGhfZGlhbG9nID0gIkludHJvZHXvdSBsYSBub3ZhIGFtcGxhZGEgZGVsIHRleHQgKDAgcGVyIGluZmluaXQpOiAiCisiIHRleHQgZGVsIGRp4GxlZyBFZGl0YS9PcGNpb25zIGRlbCBmaXR4ZXIvRm9ybWF0IGRlbCBmaXR4ZXIuLi4KK2xldCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2RpYWxvZyA9ICJTZWxlY2Npb25ldSBlbCBmb3JtYXQgcGVyIGVzY3JpdXJlIGVsIGZpdHhlci4iCisKKworIiBtZW76IEVpbmVzCittZW51dHJhbnMgJlRvb2xzCQkJRWkmbmVzCittZW51dHJhbnMgJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQkmU2FsdGFcIGFcIGFxdWVzdGFcIGV0aXF1ZXRhPFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJCVNhbHRhXCBlbiZyZXJlPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJQ3JlYVwgdW5cIGZpdHhlclwgZCdldGkmcXVldGVzCittZW51dHJhbnMgJkZvbGRpbmcJCQkmUGxlY3MKKyIgc3VibWVu+iBFaW5lcy9QbGVjcworICBtZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkgICZIYWJpbGl0YS9EZXNoYWJpbGl0YVwgZWxzXCBwbGVjczxUYWI+emkKKyAgbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CSZM7W5pYVwgZGVsXCBjdXJzb3JcIHZpc2libGU8VGFiPnp2CisgIG1lbnV0cmFucyBWaWUmd1wgQ3Vyc29yXCBMaW5lXCBvbmx5PFRhYj56TXp4ICAmTm9t6XNcIHZpc2libGVcIGxhXCBs7W5pYVwgZGVsXCBjdXJzb3I8VGFiPnpNengKKyAgbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCSZUYW5jYVwgbelzXCBwbGVjczxUYWI+em0KKyAgbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JVGFuY2FcIHQmb3RzXCBlbHNcIHBsZWNzPFRhYj56TQorICBtZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cglPYnJlXCAmbelzXCBwbGVjczxUYWI+enIKKyAgbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UglPJmJyZVwgdG90c1wgZWxzXCBwbGVjczxUYWI+elIKKyAgbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCU3odG8mZGUKKyIgc3VibWVu+iBFaW5lcy9QbOhjcy9N6HRvZGUKKyAgICBtZW51dHJhbnMgTSZhbnVhbAkJCU0mYW51YWwKKyAgICBtZW51dHJhbnMgSSZuZGVudAkJCSZTYWduaWEKKyAgICBtZW51dHJhbnMgRSZ4cHJlc3Npb24JCUUmeHByZXNzafMKKyAgICBtZW51dHJhbnMgUyZ5bnRheAkJCVMmaW50YXhpCisgICAgbWVudXRyYW5zICZEaWZmCQkJJkRpZmVy6G5jaWVzCisgICAgbWVudXRyYW5zIE1hJnJrZXIJCQkmTWFycXVlcworICBtZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJJkNyZWFcIHVuXCBwbGVjPFRhYj56ZgorICBtZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJJkVsaW1pbmFcIHVuXCBwbGVjPFRhYj56ZAorICBtZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJRWxpbWluYVwgdG90JnNcIGVsc1wgcGxlY3M8VGFiPnpECisgIG1lbnV0cmFucyBGb2xkXCBjb2wmdW1uXCB3aWR0aAkmQW1wbGFkYVwgZGVcIGxhXCBjb2x1bW5hXCBkZVwgcGxlY3MKK21lbnV0cmFucyAmRGlmZgkJCQkmRGlmZXLobmNpZXMKKyIgc3VibWVu+iBFaW5lcy9EaWZlcuhuY2llcworICAgIG1lbnV0cmFucyAmVXBkYXRlCQkJJkFjdHVhbGl0emEKKyAgICBtZW51dHJhbnMgJkdldFwgQmxvY2sJCSZPYnRpbmd1ZXNcIHVuXCBibG9jCisgICAgbWVudXRyYW5zICZQdXRcIEJsb2NrCQkmUG9zYVwgdW5cIGJsb2MKK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCUNyaWRhXCBhXCAmbWFrZTxUYWI+Om1ha2UKK21lbnV0cmFucyAmTGlzdFwgRXJyb3JzPFRhYj46Y2wJCUxsaXN0YVwgZCcmZXJyb3JzPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJJkxsaXN0YVwgZGVcIG1pc3NhdGdlczxUYWI+OmNsIQorbWVudXRyYW5zICZOZXh0XCBFcnJvcjxUYWI+OmNuCQlFcnJvclwgc2UmZ/xlbnQ8VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAlFcnJvclwgYW4mdGVyaW9yPFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCUxsaXN0YVwgJmFudGlnYTxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3CUxsaXN0YVwgbm8mdmE8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCUYmaW5lc3RyYVwgZCdlcnJvcnMKKyIgc3VibWVu+iBFaW5lcy9GaW5lc3RyYSBkJ2Vycm9ycworICBtZW51dHJhbnMgJlVwZGF0ZTxUYWI+OmN3aW4JCSZBY3R1YWxpdHphPFRhYj46Y3dpbgorICBtZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbgkJJk9icmU8VGFiPjpjb3BlbgorICBtZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCQkmVGFuY2E8VGFiPjpjY2xvc2UKK21lbnV0cmFucyAmU2V0XCBDb21waWxlcgkJJkNvbXBpbGFkb3IKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCUNvbnZlcnRlaXhcIGFcICZIRVg8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yCVRvcm5hXCBhbFwgZm9ybWF0XCAmb3JpZ2luYWw8VGFiPjolIXh4ZFwgLXIKKworCisiIG1lbvogQnVmZmVycworbWVudXRyYW5zICZCdWZmZXJzCQkJJkJ1ZmZlcnMKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQkJJlJlZnJlc2NhXCBlbFwgbWVu+gorbWVudXRyYW5zICZEZWxldGUJCQkmRWxpbWluYQorbWVudXRyYW5zICZBbHRlcm5hdGUJCQkmQWx0ZXJuYQorbWVudXRyYW5zICZOZXh0CQkJCSZTZWf8ZW50CittZW51dHJhbnMgJlByZXZpb3VzCQkJQSZudGVyaW9yCitsZXQgZzptZW51dHJhbnNfbm9fZmlsZSA9ICJbQ2FwIGZpdHhlcl0iCisKKworIiBtZW76IEZpbmVzdHJhCittZW51dHJhbnMgJldpbmRvdwkJCUYmaW5lc3RyYQorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCSZOb3ZhPFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJJkRpdmlkZWl4PFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCURpdmlkZWl4XCAmZW5cICM8VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdglEaXZpZGVpeFwgJnZlcnRpY2FsbWVudDxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcglFJnhwbG9yYWRvclwgZGVcIGZpdHhlcnMKK21lbnV0cmFucyAmQ2xvc2U8VGFiPl5XYwkJJlRhbmNhPFRhYj5eV2MKK21lbnV0cmFucyBDbG9zZVwgJk90aGVyKHMpPFRhYj5eV28JVGFuY2FcIGxlc1wgYWx0cmUmczxUYWI+XldvCittZW51dHJhbnMgTW92ZVwgJlRvCQkJTSZvdVwgYQorIiBzdWJtZW76IEZpbmVzdHJhL01vdQorICBtZW51dHJhbnMgJlRvcDxUYWI+XldLCQkmRGFsdFwgZGVcIHRvdDxUYWI+XldLCisgIG1lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJCSZCYWl4XCBkZVwgdG90PFRhYj5eV0oKKyAgbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCUNvc3RhdFwgJmVzcXVlcnJhPFRhYj5eV0gKKyAgbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCUNvc3RhdFwgZCZyZXQ8VGFiPl5XTAorbWVudXRyYW5zIFJvdGF0ZVwgJlVwPFRhYj5eV1IJCUFsdGVybmFcIGNhcFwgYW0mdW50PFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IJCUFsdGUmcm5hXCBjYXBcIGF2YWxsPFRhYj5eV3IKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkJJklndWFsYTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCU3geGltYVwgJmFs52FkYTxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQlN7W5pbWFcIGEmbOdhZGE8VGFiPl5XMV8KK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkJTeB4aW1hXCBhJm1wbGFkYTxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJTe1uaW1hXCBhbSZwbGFkYTxUYWI+XlcxXHwKKworCisiIG1lbvogZW1lcmdlbnQKK21lbnV0cmFucyAmVW5kbwkJCQkmRGVzZulzCittZW51dHJhbnMgQ3UmdAkJCQkmUmV0YWxsYQorbWVudXRyYW5zICZDb3B5CQkJCSZDb3BpYQorbWVudXRyYW5zICZQYXN0ZQkJCSZFbmdhbnhhCittZW51dHJhbnMgJkRlbGV0ZQkJCSZTdXByaW1laXgKK21lbnV0cmFucyBTZWxlY3RcIEJsb2Nrd2lzZQkJU2UmbGVjY2nzCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJCVNlbGVjY2nzXCBkZVwgJnBhcmF1bGVzCittZW51dHJhbnMgU2VsZWN0XCAmTGluZQkJCVNlbGVjY2nzXCBkZVwgJmztbmllcworbWVudXRyYW5zIFNlbGVjdFwgJkJsb2NrCQlTZWxlY2Np81wgZGVcIGJsJm9jcworbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJCVNlbGVjY2lvbmEtaG9cICZ0b3QKKworCisiIGJhcnJhIGQnZWluZXMKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCU9icmUgdW4gZml0eGVyCisgICAgdG1lbnUgVG9vbEJhci5TYXZlCQlEZXNhIGVsIGZpdHhlcgorICAgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbAlEZXNhIHRvdHMgZWxzIGZpdHhlcnMKKyAgICB0bWVudSBUb29sQmFyLlByaW50CQlJbXByaW1laXgKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCURlc2bpcworICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJUmVm6XMKKyAgICB0bWVudSBUb29sQmFyLkN1dAkJUmV0YWxsYQorICAgIHRtZW51IFRvb2xCYXIuQ29weQkJQ29waWEKKyAgICB0bWVudSBUb29sQmFyLlBhc3RlCQlFbmdhbnhhCisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQlDZXJjYQorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJQ2VyY2EgZWwgc2Vn/GVudAorICAgIHRtZW51IFRvb2xCYXIuRmluZFByZXYJQ2VyY2EgbCdhbnRlcmlvcgorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQlDZXJjYSBpIHN1YnN0aXR1ZWl4CisgICAgaWYgMAkiIGRpc2FibGVkOyBUaGVzZSBhcmUgaW4gdGhlIFdpbmRvd3MgbWVudQorICAgICAgdG1lbnUgVG9vbEJhci5OZXcJCUZpbmVzdHJhIG5vdmEKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luU3BsaXQJRGl2aWRlaXggbGEgZmluZXN0cmEKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWF4CUFs52FkYSBt4HhpbWEKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWluCUFs52FkYSBt7W5pbWEKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luVlNwbGl0CURpdmlkZWl4IGxhIGZpbmVzdHJhIHZlcnRpY2FsbWVudAorICAgICAgdG1lbnUgVG9vbEJhci5XaW5NYXhXaWR0aAlBbXBsYWRhIG3geGltYQorICAgICAgdG1lbnUgVG9vbEJhci5XaW5NaW5XaWR0aAlBbXBsYWRhIG3tbmltYQorICAgICAgdG1lbnUgVG9vbEJhci5XaW5DbG9zZQlUYW5jYSBsYSBmaW5lc3RyYQorICAgIGVuZGlmCisgICAgdG1lbnUgVG9vbEJhci5Mb2FkU2VzbglDYXJyZWdhIHVuYSBzZXNzafMKKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCURlc2EgbGEgc2Vzc2nzCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJRXhlY3V0YSB1biBzY3JpcHQKKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCUNyaWRhIGEgbWFrZQorICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCU9icmUgbCdpbnTocnByZXQgZCdvcmRyZXMKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCUNyZWEgdW4gZml0eGVyIGQnZXRpcXVldGVzCisgICAgdG1lbnUgVG9vbEJhci5UYWdKdW1wCVNhbHRhIGEgdW5hIGV0aXF1ZXRhCisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQlBanVkYQorICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJQ2VyY2EgYSBsJ2FqdWRhCisgIGVuZGZ1bgorZW5kaWYKKworCisiIG1lbvogU2ludGF4aQorbWVudXRyYW5zICZTeW50YXgJCQkmU2ludGF4aQorbWVudXRyYW5zICZNYW51YWwJCQkmTWFudWFsCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJCUEmdXRvbeB0aWNhCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCUFjdGl2YS9EZXNhY3RpdmFcIGVuXCAmYXF1ZXN0XCBmaXR4ZXIKK21lbnV0cmFucyAmU2hvd1wgZmlsZXR5cGVzXCBpblwgbWVudQlNb3N0cmFcIHRvdHNcIGVsc1wgJnRpcHVzXCBhbFwgbWVu+gorbWVudXRyYW5zICZPZmYJCQkJJkRlc2FjdGl2YQorbWVudXRyYW5zIENvJmxvclwgdGVzdAkJCVByb3ZhXCBkZWxzXCAmY29sb3JzCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAkJUHJvdmFcIGRlbFwgJnJlc3NhbHQKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJCUNvbnZlcnRlaXhcIGFcICZIVE1MCittZW51dHJhbnMgQXNzZW1ibHkJCQlFbnNhbWJsYWRvcgorbWVudXRyYW5zIENvbmZpZwkJCUNvbmZpZ3VyYWNp8worbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CQlOb23pc1wgZWxcIHJlc3NhbHRcIGRlXCBzaW50YXhpCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCQlDYXJyZWdhXCB0YW1i6VwgZWxzXCBwbHVnaW5zCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2NhX2VzLnV0Zi04LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2NhX2VzLnV0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2VlMTBkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfY2FfZXMudXRmLTgudmltCkBAIC0wLDAgKzEsNyBAQAorIiBNZW51IHRyYW5zbGF0aW9ucyBmb3IgQ2F0YWxhbgorIgorIiBNYWludGFpbmVyOglFcm5lc3QgQWRyb2d16SA8ZWFkcm9ndWVAZ214Lm5ldD4KKyIgTGFzdCBDaGFuZ2U6CTI5IERlYyAyMDAzCisiCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9jYV9lcy5sYXRpbjEudmltCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2NoaW5lc2VfZ2IuOTM2LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2NoaW5lc2VfZ2IuOTM2LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNiZjZkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfY2hpbmVzZV9nYi45MzYudmltCkBAIC0wLDAgKzEsMjMwIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglTaW1wbGlmaWVkIENoaW5lc2UgKFdpbmRvd3MpCisiIFRyYW5zbGF0ZWQgQnk6CVdhbmcgSnVuIDxqdW53QHR1cmJvbGludXguY29tLmNuPgorIiBMYXN0IENoYW5nZToJCVR1ZSBTZXAgIDQgMTE6MjY6NTIgQ1NUIDIwMDEKKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX21lbnVfdHJhbnMgPSAxCisKK3NjcmlwdGVuY29kaW5nIGNwOTM2CisKKyIgSGVscCBtZW51CittZW51dHJhbnMgJkhlbHAJCQmw79b6KCZIKQorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgnUpMDAKCZPKTxUYWI+PEYxPgorbWVudXRyYW5zICZVc2VyXCBNYW51YWwJCdPDu6fK1rLhKCZVKQorbWVudXRyYW5zICZHVUkJCQnNvNDOvefD5igmRykKK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcwlIT1dUT87EtbVcLlwuXC4oJkgpCittZW51dHJhbnMgJkNyZWRpdHMJCdf31d8oJkMpCittZW51dHJhbnMgQ28mcHlpbmcJCbDmyKgoJlApCittZW51dHJhbnMgJlZlcnNpb24JCbDmsb4oJlYpCittZW51dHJhbnMgJkFib3V0CQm52NPaXCBWaW0oJkEpCisKKyIgRmlsZSBtZW51CittZW51dHJhbnMgJkZpbGUJCQkJzsS8/igmRikKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCbTyv6ooJk8pXC5cLlwuPFRhYj46ZQorbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AJt9a47rSwv9qyorTyv6ooJkwpPFRhYj46c3AKK21lbnV0cmFucyAmTmV3PFRhYj46ZW5ldwkJ0MK9qCgmTik8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCbnYsdUoJkMpPFRhYj46Y2xvc2UKK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCQmxo7TmKCZTKTxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJwe205s6qKCZBKVwuXC5cLjxUYWI+OnNhdgorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLgm31rjusci9zygmRGlmZilcLlwuXC4KK21lbnV0cmFucyBTcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCbfWuO608rK5tqEoJlBhdGNoKVwuXC5cLgorbWVudXRyYW5zICZQcmludAkJCbTy06EoJlApCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJsaO05rKizcuz9igmVik8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJzcuz9igmWCk8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCbHgvK0oJkUpCittZW51dHJhbnMgJlVuZG88VGFiPnUJCQm71ri0KCZVKTxUYWI+dQorbWVudXRyYW5zICZSZWRvPFRhYj5eUgkJCdbY1/YoJlIpPFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQnW2Li0yc+0zrav1/coJkUpPFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCbz0x9AoJlQpPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJuLTWxigmQyk8VGFiPiIreQorbWVudXRyYW5zICZQYXN0ZTxUYWI+IitnUAkJ1bPM+ygmUCk8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQnM+bW9ueKx6sewKCZCKTxUYWI+W3AKK21lbnV0cmFucyBQdXRcICZBZnRlcjxUYWI+XXAJCcz5tb254rHquvMoJkEpPFRhYj5dcAorbWVudXRyYW5zICZEZWxldGU8VGFiPngJCQnJvrP9KCZEKTxUYWI+eAorbWVudXRyYW5zICZTZWxlY3RcIGFsbDxUYWI+Z2dWRwkJyKvRoSgmUyk8VGFiPmdndkcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCbLp1dIoJkYpXC5cLlwuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZVwuXC5cLgmy6dXSzOa7uygmTClcLlwuXC4KK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJyei2qLSwv9ooJlcpCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJCcirvtbJ6LaoKCZHKQorCisiIEJ1aWxkIGJvb2xlYW4gb3B0aW9ucworbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQm/qi+52NT2wb+y6dXSxKPKvTxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEJCb+qL7nYuvbC1LTz0KHQtMSjyr08VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCQm/qi+52MalxeTP1Mq+PFRhYj46c2V0IHNtIQorbWVudXRyYW5zICZDb250ZXh0XCBsaW5lcwkJCcnPz8LOxNDQyv0oJkMpCisKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJCb/JytO7r7HgvK3Eo8q9KCZWKQorbWVudXRyYW5zIE5ldmVyCQkJCQm007K7CittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgkJCb/p0aHU8QorbWVudXRyYW5zIEluc2VydFwgbW9kZQkJCQmy5cjrxKPKvQorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJCb/p0aHU8dPrsuXI68Sjyr0KK21lbnV0cmFucyBBbHdheXMJCQkJy/nT0MSjyr0KKworbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCb+qL7nYsuXI68Sjyr08VGFiPjpzZXRcIGltIQorCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkJCbLp1dLCt762XC5cLlwuKCZQKQorCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4JCQmx6sepzsS8/lwuXC5cLigmZykKKworIiBHVUkgb3B0aW9ucworbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCQm/qi+52Lmkvt/M9SgmVCkKK21lbnV0cmFucyBUb2dnbGVcICZCb3R0b21cIFNjcm9sbGJhcgkJv6ovudi117K/ufa2r8z1KCZCKQorbWVudXRyYW5zIFRvZ2dsZVwgJkxlZnRcIFNjcm9sbGJhcgkJv6ovudjX87bLufa2r8z1KCZMKQorbWVudXRyYW5zIFRvZ2dsZVwgJlJpZ2h0XCBTY3JvbGxiYXIJCb+qL7nY09K2y7n2tq/M9SgmUikKKworCisiIEVkaXQvRmlsZSBTZXR0aW5ncworbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJCc7EvP7J6LaoKCZpKQorCisiIEJvb2xlYW4gb3B0aW9ucworbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCb+qL7nYz9TKvtDQusU8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCQm/qi+52M/Uyr5UYWI8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJCb+qL7nY19S2r9Xb0NA8VGFiPjpzZXRcIHdyYXAhCittZW51dHJhbnMgVG9nZ2xlXCBXJnJhcFwgYXRcIHdvcmQ8VGFiPjpzZXRcIGxiciEJv6ovudi0ys6y1dvQ0DxUYWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJv6ovudhleHBhbmQtdGFiPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQm/qi+52GF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQkJv6ovudhDLWluZGVudDxUYWI+OnNldFwgY2luIQorCisKKyIgb3RoZXIgb3B0aW9ucworbWVudXRyYW5zICZTaGlmdHdpZHRoCQkJy/XFxb/ttsgoJlMpCittZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCc6xVGFiv+22yCgmVCkKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCdKzw+a/7bbIKCZ4KVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCc7EvP648cq9KCZGKVwuXC5cLgorCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCbX3yauw5SgmbykKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQnRodTx19bM5SgmbilcLlwuXC4KKworCisiIFByb2dyYW1taW5nIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJCQm5pL7fKCZUKQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JvOzL97niseq0prXEserHqbnYvPzX1ih0YWcpKCZKKTxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQnM+LvYvOzL98ewtcTOu9bDKCZCKTxUYWI+XlQKK21lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCb2owaKx6sepy/fS/c7EvP5cIFRhZ3MoJlQpCittZW51dHJhbnMgJkZvbGRpbmcJCQlGb2xkaW5nyei2qCgmRikKK21lbnV0cmFucyAmRGlmZgkJCQmxyL3PKCZEKQorbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZQkJ1rTQ0FwgTWFrZSgmTSk8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsCQnB0LP2seDS67TtzvMoJkUpPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJwdCz9sv509DQxc+iKCZJKTxUYWI+OmNsIQorbWVudXRyYW5zICZOZXh0XCBFcnJvcjxUYWI+OmNuCQnPwtK7uPax4NLrtO3O87SmKCZOKTxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCcnP0ru49rHg0uu07c7ztKYoJlApPFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCb7JtO3O88HQse0oJk8pPFRhYj46Y29sZAorbWVudXRyYW5zIE4mZXdlclwgTGlzdDxUYWI+OmNuZXcJ0MK07c7zwdCx7SgmRSk8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCbTtzvPQxc+itLC/2igmVykKK21lbnV0cmFucyAmU2V0XCBDb21waWxlcgkJyejWw7Hg0uvG9ygmUykKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCdequ7uzyTE2vfjWxjxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJtNMxNr341sbXqru7u9jOxNfWPFRhYj46JSF4eGRcIC1yCisKKyIgVG9vbHMuRm9sZCBNZW51CittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJCcq508MvsrvKudPDRm9sZGluZygmRSk8VGFiPnppCittZW51dHJhbnMgJlZpZXdcIEN1cnNvclwgTGluZTxUYWI+enYJCbLpv7S0y9DQKCZWKTxUYWI+enYKK21lbnV0cmFucyBWaWUmd1wgQ3Vyc29yXCBMaW5lXCBvbmx5PFRhYj56TXp4Cda7sum/tLTL0NAoJlcpPFRhYj56TXp4CittZW51dHJhbnMgQyZsb3NlXCBtb3JlXCBmb2xkczxUYWI+em0JCbnYsdVGb2xkcygmTCk8VGFiPnptCittZW51dHJhbnMgJkNsb3NlXCBhbGxcIGZvbGRzPFRhYj56TQkJudix1cv509BGb2xkcygmQyk8VGFiPnpNCittZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cgkJ1bm/qkZvbGRzKCZQKTxUYWI+enIKK21lbnV0cmFucyAmT3BlblwgYWxsXCBmb2xkczxUYWI+elIJCdW5v6rL+dPQRm9sZHMoJk8pPFRhYj56UgorIiBmb2xkIG1ldGhvZAorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQkJRm9sZLe9yr0oJkgpCittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCQm9qMGiRm9sZCgmRik8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCQnJvrP9Rm9sZCgmRCk8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJCcm+s/3L+dPQRm9sZCgmQSk8VGFiPnpECisiIG1vdmluZyBhcm91bmQgaW4gZm9sZHMKK21lbnV0cmFucyBGb2xkXCBjb2x1bW5cICZ3aWR0aAkJCcnotqhGb2xkwLi/7SgmVykKKworIiBUb29scy5EaWZmIE1lbnUKK21lbnV0cmFucyAmVXBkYXRlCQm4/NDCKCZVKQorbWVudXRyYW5zICZHZXRcIEJsb2NrCQnIobXDsrvNrLK/t9YoJkcpCittZW51dHJhbnMgJlB1dFwgQmxvY2sJCb2rsrvNrLK/t9bTptPDtb221Le9KCZQKQorCisKKyIgTmFtZXMgZm9yIGJ1ZmZlciBtZW51LgorbWVudXRyYW5zICZCdWZmZXJzCQm7urPlx/goJkIpCittZW51dHJhbnMgJlJlZnJlc2hcIG1lbnUJuPzQwigmUikKK21lbnV0cmFucyAmRGVsZXRlCQnJvrP9KCZEKQorbWVudXRyYW5zICZBbHRlcm5hdGUJCdDeuMQoJkwpCittZW51dHJhbnMgJk5leHQJCQnPwtK7uPYoJk4pCittZW51dHJhbnMgJlByZXZpb3VzCQnHsNK7uPYoJlApCisKKyIgV2luZG93IG1lbnUKK21lbnV0cmFucyAmV2luZG93CQkJtLC/2igmVykKK21lbnV0cmFucyAmTmV3PFRhYj5eV24JCQnQwr2otLC/2igmTik8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQm31rjutLC/2igmUCk8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4Jt9a47rW9IygmTCk8VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5Xdgm0udaxt9a47igmVik8VGFiPl5XdgorbWVudXRyYW5zIFNwbGl0XCBGaWxlXCBFJnhwbG9yZXIJzsS8/uSvwMDG98q9t9a47igmWCkKK21lbnV0cmFucyAmQ2xvc2U8VGFiPl5XYwkJudix1bSwv9ooJkMpPFRhYj5eV2MKK21lbnV0cmFucyBDbG9zZVwgJk90aGVyKHMpPFRhYj5eV28Judix1cbky/y0sL/aKCZPKTxUYWI+XldvCittZW51dHJhbnMgTW92ZVwgJlRvCQkJ0sa2r7W9KCZUKQorbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJCbaltssoJlQpPFRhYj5eV0sKK21lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJCbXXtssoJkIpPFRhYj5eV0oKK21lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICQnX87HfKCZMKTxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCdPSsd8oJlIpPFRhYj5eV0wKKyIgbWVudXRyYW5zIE5lJnh0PFRhYj5eV3cJCc/C0ru49igmWCk8VGFiPl5XdworIiBtZW51dHJhbnMgUCZyZXZpb3VzPFRhYj5eV1cJCcnP0ru49igmUik8VGFiPl5XVworbWVudXRyYW5zIFJvdGF0ZVwgJlVwPFRhYj5eV1IJCcnP0sa0sL/aKCZVKTxUYWI+XldSCittZW51dHJhbnMgUm90YXRlXCAmRG93bjxUYWI+XldyCQnPwtLGtLC/2igmRCk8VGFiPl5XcgorbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CQnL+dPQtLC/2rXIuN8oJkUpPFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkJ1+6087jftsgoJk0pPFRhYj5eVworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXwkJ1+7QobjftsgoJmkpPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCdfutPO/7bbIKCZXKTxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJ1+7Qob/ttsgoJmgpPFRhYj5eVzFcfAorIgorIiBUaGUgcG9wdXAgbWVudQorbWVudXRyYW5zICZVbmRvCQkJs7fP+igmVSkKK21lbnV0cmFucyBDdSZ0CQkJvPTH0CgmVCkKK21lbnV0cmFucyAmQ29weQkJCbi01sYoJkMpCittZW51dHJhbnMgJlBhc3RlCQnVs8z7KCZQKQorbWVudXRyYW5zICZEZWxldGUJCcm+s/0oJkQpCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJQmxvY2t3aXNl0aHU8QorbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCdGh1PG1pbTKKCZXKQorbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCdGh1PHQ0CgmTCkKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawnRodTxv+koJkIpCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQnIq9GhKCZBKQorIgorIiBUaGUgR1VJIHRvb2xiYXIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCbTyv6rOxLz+CisgICAgdG1lbnUgVG9vbEJhci5TYXZlCQmxo7TmtbHHsM7EvP4KKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJsaO05sirsr/OxLz+CisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJtPLToQorICAgIHRtZW51IFRvb2xCYXIuVW5kbwkJs7fP+snPtM7Q3rjECisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQnW2Nf2yc+0zrO3z/q1xLav1/cKKyAgICB0bWVudSBUb29sQmFyLkN1dAkJvPTH0NbBvPTM+bDlCisgICAgdG1lbnUgVG9vbEJhci5Db3B5CQm4tNbGtb289Mz5sOUKKyAgICB0bWVudSBUb29sQmFyLlBhc3RlCQnTybz0zPmw5dWzzPsKKyAgICB0bWVudSBUb29sQmFyLkZpbmQJCbLp1dIuLi4KKyAgICB0bWVudSBUb29sQmFyLkZpbmROZXh0CbLp1dLPwtK7uPYKKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CbLp1dLJz9K7uPYKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJzOa7uy4uLgorICAgIHRtZW51IFRvb2xCYXIuTG9hZFNlc24JvNPU2Lvhu7AKKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCbGjtOa1scewtcS74buwCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJ1MvQ0FZpbb3Fsb4KKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCda00NAgTWFrZQorICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCbTyv6rSu7j2w/zB7rSwv9oKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCda00NAgY3RhZ3MKKyAgICB0bWVudSBUb29sQmFyLlRhZ0p1bXAJzPi1vbWxx7C54rHqzrvWw7XEserHqQorICAgIHRtZW51IFRvb2xCYXIuSGVscAkJVmltILDv1voKKyAgICB0bWVudSBUb29sQmFyLkZpbmRIZWxwCbLp1dIgVmltILDv1voKKyAgZW5kZnVuCitlbmRpZgorCisiIFN5bnRheCBtZW51CittZW51dHJhbnMgJlN5bnRheAkJ0++3qCgmUykKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seQnWu8notqhcICdzeW50YXgnKCZzKQorbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwnSssnotqhcICdmaWxldHlwZScoJmYpCittZW51dHJhbnMgJk9mZgkJCbnYsdUoJk8pCittZW51dHJhbnMgJk1hbnVhbAkJyta2r8notqgoJk0pCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJ19S2r8notqgoJlUpCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCda7ttTV4rj2zsS8/rTyv6ovudix1SgmVCkKK21lbnV0cmFucyBDbyZsb3JcIHRlc3QJCcmrssrP1Mq+suLK1CgmTCkKK21lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0CdPvt6jQp7n7suLK1CgmSCkKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJ16q7u7PJXCBIVE1MXCC48cq9KCZDKQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfY2hpbmVzZV90YWl3YW4uOTUwLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2NoaW5lc2VfdGFpd2FuLjk1MC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiMjg1OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2NoaW5lc2VfdGFpd2FuLjk1MC52aW0KQEAgLTAsMCArMSwyODQgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CVRyYWRpdGlvbmFsIENoaW5lc2UgKGZvciBCaWc1IFVOSVgvV2luZG93cykKKyIgVHJhbnNsYXRlZCBCeToJSHVuZy1UZWgsIExpbgk8cGlhaXBAY3NpZS5udHUuZWR1LnR3PgorIiBMYXN0IENoYW5nZToJCVRodSBBcHIgMjQgMTc6MzQ6NTAgQ1NUIDIwMDMKKworIiB7e3sgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorIiB9fX0KKworc2NyaXB0ZW5jb2RpbmcgY3A5NTAKKworIiB7e3sgSGVscCBtZW51OiBjb21wbGV0ZQorbWVudXRyYW5zICZIZWxwCQkJu7KnVbuhqfooJkgpCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgm7oan6pOWl88FgxP0oJk8pPFRhYj48RjE+CittZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJqM+lzqrMpOKlVSgmVSkKK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcwmmcKbzp0BcLlwuXC4oJkgpCittZW51dHJhbnMgJkdVSQkJCbnPq6ysya2xKCZHKQorbWVudXRyYW5zICZDcmVkaXRzCQm3UMHCKCZDKQorbWVudXRyYW5zIENvJnB5aW5nCQmqqcV2q8WnaSgmUCkKK21lbnV0cmFucyBPJnJwaGFucwkJrECxz6l0qOAoJlIpCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZWZXJzaW9uCQm1e6ahqqmlu7jqsFQoJlYpCittZW51dHJhbnMgJkFib3V0CQnD9qnzXCBWaW0oJkEpCisiIH19fQorCisiIHt7eyBGaWxlIG1lbnU6IGNvbXBsZXRlCittZW51dHJhbnMgJkZpbGUJCQkJwMmu1ygmRikKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQm2fbHSKCZPKVwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCaTAs861+LWhqMO2fbHSKCZMKTxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCb1zv+i3c8DJrtcoJk4pPFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQnD9rOswMmu1ygmQyk8VGFiPjpjbG9zZQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCQnAeKZzKCZTKTxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJpXSmc7dzwMkoJkEpXC5cLlwuPFRhYj46c2F2CisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLgmk8bj7KCZEaWZmKVwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JsPWm5lBhdGNoKCZCKVwuXC5cLgorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmUHJpbnQJCQmmQ6ZMKCZQKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyBTYSZ2ZS1FeGl0PFRhYj46d3FhCQnAeKZzqMPC97Z9KCZWKTxUYWI+OndxYQorbWVudXRyYW5zIEUmeGl0PFRhYj46cWEJCQnC97Z9KCZYKTxUYWI+OnFhCisiIH19fQorCisiIHt7eyBFZGl0IG1lbnUKK21lbnV0cmFucyAmRWRpdAkJCQm9c7/oKCZFKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCbRfrewoJlUpPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJqPqu+KRXpri0X63sKCZSKTxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJrau9xqRXpriwyqdAKCZFKTxUYWI+XC4KKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgQ3UmdDxUYWI+Iit4CQkJsMWkVSgmVCk8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQm9xrtzKCZDKTxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQm2S6RXKCZQKTxUYWI+IitnUAorbWVudXRyYW5zIFB1dFwgJkJlZm9yZTxUYWI+W3AJCbZLqOy05bzQq2UoJkIpPFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkJtkuo7LTlvNCr4SgmQSk8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCadSsKMoJkQpPFRhYj54CittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHCQml/r/vKCZTKTxUYWI+Z2d2RworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCbRNp+QoJkYpXC5cLlwuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZVwuXC5cLgm0TafkqMOo+qVOKCZMKVwuXC5cLgorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJs12pd7X4taEoJlcpCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJCaX+sOyzXal3KCZHKQorbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJs12pd6a5wMmu1ygmSSkKK21lbnV0cmFucyBDJm9sb3JcIFNjaGVtZQkJsHSm4rNdqXcoJk8pCittZW51dHJhbnMgJktleW1hcAkJCcHkvUy578CzKCZLKQorICAgICIgInt7eyBLZXltYXA6CisgICAgbWVudXRyYW5zIE5vbmUJCQm1TAorICAgICIgfX19CittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkJs12pd6Zyq6woJk4pXC5cLlwuCisiIH19fQorCisiIHt7eyBFZGl0LkZpbGVTZXR0aW5ncworbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhICAgIKTBtKvF46Xcpua4uSgmTik8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCSAgICCkwbSrxeOl3Kbmp8CkzlRBQigmTCk8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJICAgIKTBtKum27DKp+mm5sXjpdwoJlcpPFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhICAgIKTBtKun6abmxeOl3KVppfS3TsJfpXkoJlIpPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCSAgICCkwbSrrmm2fVRBQigmRSk8VGFiPjpzZXRcIGV0IQorbWVudXRyYW5zIFRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEJICAgIKTBtKum27DKwVmxxigmQSk8VGFiPjpzZXRcIGFpIQorbWVudXRyYW5zIFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCSAgICCkwbSrotG7eailwVmxxigmQyk8VGFiPjpzZXRcIGNpbiEKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJlNoaWZ0d2lkdGgJCQkJICAgIMFZsca8ZavXKHNoaWZ0d2lkdGgpKCZTKQorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQkJICAgILNuxem80sDAVEFCKHNvZnR0YWJzdG9wKSgmVCkKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQkgICAgpOWmcq22rbG8ZavXKHRleHR3aWR0aCkoJlgpXC5cLlwuCittZW51dHJhbnMgJkZpbGVcIEZvcm1hdFwuXC5cLgkJCSAgICCzXal3wMmu167mpqEoue/As6dAt36odLLOKSgmRilcLlwuXC4KKyIgfX19CisKKyIge3t7IEVkaXQuR2xvYmFsU2V0dGluZ3MKK21lbnV0cmFucyBUb2dnbGVcIFBhdHRlcm5cICZIaWdobGlnaHQ8VGFiPjpzZXRcIGhscyEgpMG0q7Cqq0er17dqtE2mcqbqKCZIKTxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEJICAgICCkwbSrqb+ypKRqpHC8ZygmSSk8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCSAgICAgpMG0q8Xjpdy578CzrEG4uSgmUyk8VGFiPjpzZXRcIHNtIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEJICAgICCkwbSrtseyzlZprNuuZbzSpqEoJk8pPFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCQkgICAgIKW7pOWrZavhq0+vZKbmvMYoc2Nyb2xsb2ZmKSgmQykKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJCSAgICAgtOW80KX0t06yvrDKKHZpcnR1YWxlZGl0KSgmVikKKyAgICAiIHt7eyBFZGl0Lkdsb2JhbFNldHRpbmdzLlZpcnR1YWxFZGl0CisgICAgbWVudXRyYW5zIE5ldmVyCQkJCSAgICAgpKOoz6XOCisgICAgbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCQkgICAgILDPtvS/777crskKKyAgICBtZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJICAgICC0oaRKvNKmoa7JCisgICAgbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJICAgICCwz7b0u1C0oaRKvNKmoQorICAgIG1lbnV0cmFucyBBbHdheXMJCQkJICAgICCkQKq9tn2x0gorICAgICIgfX19CittZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJICAgICCkwbSrtKGkSrzSpqEoJk0pPFRhYj46c2V0XCBpbSEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQkJICAgICC3arRNuPSufCgmUClcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJCSAgICAgVGFnXCC80MXSr8Gk3sDJrtcoJkcpXC5cLlwuCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCQkgICAgIKTBtKuoz6XOpHWo46ZDKCZUKQorbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCQkgICAgIKTBtKuoz6XOqbO63bGysMq2YigmQikKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJCSAgICAgpMG0q6jPpc6lqrrdsbKwyrZiKCZMKQorbWVudXRyYW5zIFRvZ2dsZVwgJlJpZ2h0XCBTY3JvbGxiYXIJCSAgICAgpMG0q6jPpc6la7rdsbKwyrZiKCZSKQorIiB9fX0KKworIiB7e3sgVG9vbHMgbWVudTogY29tcGxldGUKK21lbnV0cmFucyAmVG9vbHMJCQmkdajjKCZUKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dCcDLr8G05bzQs0KqurzQxdLD9sHkpnIodGFnKSgmSik8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkJuPWmXsDLr8GrZaq6puy4bSgmQik8VGFiPl5UCittZW51dHJhbnMgQnVpbGRcICZUYWdzXCBGaWxlCQmr2KXfvNDF0q/BpN7AyVwgVGFncygmVCkKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJkZvbGRpbmcJCQnC0MV8KEZvbGQps12pdygmRikKKyAgICAiIHt7eyBUb29scy5Gb2xkCisgICAgbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppCSAgICCkwbSrqM+lzlwgRm9sZGluZygmRSk8VGFiPnppCisgICAgbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CSAgICDAy7X4prm8aFwgRm9sZCgmVik8VGFiPnp2CisgICAgbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNenggICAgpXXAy7X4prlcIEZvbGQoJlcpPFRhYj56TXp4CisgICAgbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCSAgICCmrLBfpEC8aFwgRm9sZHMoJkwpPFRhYj56bQorICAgIG1lbnV0cmFucyAmQ2xvc2VcIGFsbFwgZm9sZHM8VGFiPnpNCQkgICAgpqywX6nSprNcIEZvbGRzKCZDKTxUYWI+ek0KKyAgICBtZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cgkJICAgIKW0tn2kQLxoXCBGb2xkcygmUCk8VGFiPnpyCisgICAgbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgkJICAgIKW0tn2p0qazXCBGb2xkcygmTyk8VGFiPnpSCisgICAgbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQkgICAgRm9sZGluZ1wgpOimoSgmSCkKKwkiIHt7eyBUb29scy5Gb2xkLk1ldGhvZAorCW1lbnV0cmFucyBNJmFudWFsCQmk4rDKq9il3ygmQSkKKwltZW51dHJhbnMgSSZuZGVudAkJqMy308FZscYoJk4pCisJbWVudXRyYW5zIEUmeHByZXNzaW9uCQmm261xuUK64qahKCZYKQorCW1lbnV0cmFucyBTJnludGF4CQmozLfTu3mqa7NdqXcoJlkpCisJbWVudXRyYW5zICZEaWZmCQkJRGlmZigmRCkKKwltZW51dHJhbnMgTWEmcmtlcgkJvNCwTyhNYXJrZXIpKCZSKQorCSIgfX19CisgICAgIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBtZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCSAgICCr2KXfXCBGb2xkKCZGKTxUYWI+emYKKyAgICBtZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCSAgICCnUrCjXCBGb2xkKCZEKTxUYWI+emQKKyAgICBtZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJICAgIKdSsKOp0qazXCBGb2xkKCZBKTxUYWI+ekQKKyAgICAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG1lbnV0cmFucyBGb2xkXCBjb2x1bW5cICZ3aWR0aAkJICAgILNdqXdcIEZvbGTE5rxlKCZXKQorICAgICIgfX19CittZW51dHJhbnMgJkRpZmYJCQkJRGlmZigmRCkKKyAgICAiIHt7eyBUb29scy5EaWZmCisgICAgbWVudXRyYW5zICZVcGRhdGUJCQmn87dzKCZVKQorICAgIG1lbnV0cmFucyAmR2V0XCBCbG9jawkJqPqxb7DPtvQoJkcpCisgICAgbWVudXRyYW5zICZQdXRcIEJsb2NrCQm2S6RXsM+29CgmUCkKKyAgICAiIH19fQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCbD1puZcIE1ha2UoJk0pPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJpkOlWL1zxLa/+bt+KCZFKTxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCaZDpVip0qazsFSupygmSSk8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkJpFWkQK3TvXPEtr/5u36zQigmTik8VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAmkV6RArdO9c8S2v/m7frNCKCZQKTxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAnAy7X4wsK/+bt+pkOq7SgmTyk8VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwnAy7X4t3O/+bt+pkOq7SgmRSk8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCb/5u36wVK6ntfi1oSgmVykKKyAgICAiIHt7eyBUb29scy5FcnJvcldpbmRvdworICAgIG1lbnV0cmFucyAmVXBkYXRlPFRhYj46Y3dpbgkJp/O3cygmVSk8VGFiPjpjd2luCisgICAgbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4JCbZ9sdIoJk8pPFRhYj46Y29wZW4KKyAgICBtZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCcP2s6woJkMpPFRhYj46Y2Nsb3NlCisgICAgIiB9fX0KK21lbnV0cmFucyAmU2V0XCBDb21waWxlcgkJs12pd71zxLa+uUNvbXBpbGVyKCZTKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCcLgtKumqDE2tmmm7L1YKCZDKTxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJsXExNrZppuy9WMLgtKumXqTlpnIoJlIpPFRhYj46JSF4eGRcIC1yCisiIH19fQorCisiIHt7eyBTeW50YXggbWVudTogY29tcGV0ZQorbWVudXRyYW5zICZTeW50YXgJCSAgICC7eaprrsSqRygmUykKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJlNob3dcIGZpbGV0eXBlc1wgaW5cIG1lbnUJxeOl3KnSprOlaaXOwMmu167mpqEoJlMpCittZW51dHJhbnMgU2V0XCAnJnN5bnRheCdcIG9ubHkJICAgIKV1qM+lzlwgJ3N5bnRheCcoJlMpCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCSAgICCoz6XOXCAnc3ludGF4JysnZmlsZXR5cGUnKCZGKQorbWVudXRyYW5zICZPZmYJCQkgICAgw/azrK7EqkcoJk8pCittZW51dHJhbnMgJk1hbnVhbAkJICAgIKTisMqzXal3KCZNKQorbWVudXRyYW5zIEEmdXRvbWF0aWMJCSAgICCm27DKs12pdygmVSkKK21lbnV0cmFucyBvbi9vZmZcIGZvclwgJlRoaXNcIGZpbGUgIKV1pMG0q6a5wMmquq7EqkezXal3KCZUKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyBDbyZsb3JcIHRlc3QJCSAgICCm4rFtxeOl3LT6uNUoJkwpCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAkgICAgu3mqa67Eqke0+rjVKCZIKQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSFRNTAkgICAgwuC0q6aoXCBIVE1MXCCu5qahKCZDKQorIiB9fX0KKworIiB7e3sgQnVmZmVycyBtZW51OiBjb21wbGV0ZQorbWVudXRyYW5zICZCdWZmZXJzCQkJvXe9xLDPKCZCKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQkJp/O3cygmUikKK21lbnV0cmFucyAmRGVsZXRlCQkJp1KwoygmRCkKK21lbnV0cmFucyAmQWx0ZXJuYXRlCQkJpMG0q6RXpri9c7/ovXe9xLDPKCZBKQorbWVudXRyYW5zICZOZXh0CQkJCaRVpECt0ygmTikKK21lbnV0cmFucyAmUHJldmlvdXMJCQmrZaRArdMoJlApCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBtZW51dHJhbnMgW05vXCBmaWxlXQkJCVu1TMDJrtddCisiIH19fQorCisiIHt7eyBXaW5kb3cgbWVudTogY29tcGxldGUKK21lbnV0cmFucyAmV2luZG93CQkJtfi1oSgmVykKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJtn23c7X4taEoJk4pPFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJpMCzzrX4taEoJlApPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCaTAs86o7CMoJkwpPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJq6uqvaTAs84oJlYpPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCcDJrtfBYLrepqGkwLPOKCZYKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmQ2xvc2U8VGFiPl5XYwkJw/azrLX4taEoJkMpPFRhYj5eV2MKK21lbnV0cmFucyBDbG9zZVwgJk90aGVyKHMpPFRhYj5eV28Jw/azrKjkpaa1+LWhKCZPKTxUYWI+XldvCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zIE1vdmVcICZUbwkJCbK+ptwoJlQpCisgICAgIiB7e3sgV2luZG93Lk1vdmVUbworICAgIG1lbnV0cmFucyAmVG9wPFRhYj5eV0sJCbO7ut0oJlQpPFRhYj5eV0sKKyAgICBtZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCQmps7rdKCZCKTxUYWI+XldKCisgICAgbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJparD5CgmTCk8VGFiPl5XSAorICAgIG1lbnV0cmFucyAmUmlnaHRcIHNpZGU8VGFiPl5XTAmla8PkKCZSKTxUYWI+XldMCisgICAgIiB9fX0KK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQmkV7K+tfi1oSgmVSk8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJpFWyvrX4taEoJkQpPFRhYj5eV3IKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JCanSprO1+LWhtaWwqigmRSk8VGFiPl5XPQorbWVudXRyYW5zICZNYXhcIEhlaWdodDxUYWI+XldfCQmzzKRqsKqr1ygmTSk8VGFiPl5XCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQmzzKRwsKqr1ygmSSk8VGFiPl5XMV8KK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkJs8ykarxlq9coJlcpPFRhYj5eV1x8CittZW51dHJhbnMgTWluXCBXaWR0Jmg8VGFiPl5XMVx8CQmzzKRwvGWr1ygmSCk8VGFiPl5XMVx8CisiIH19fQorCisiIHt7eyBUaGUgcG9wdXAgbWVudTogY29tcGxldGUKK21lbnV0cmFucyAmVW5kbwkJCQm0X63sKCZVKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyBDdSZ0CQkJCbDFpFUoJlQpCittZW51dHJhbnMgJkNvcHkJCQkJvca7cygmQykKK21lbnV0cmFucyAmUGFzdGUJCQm2S6RXKCZQKQorbWVudXRyYW5zICZEZWxldGUJCQmnUrCjKCZEKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyBTZWxlY3RcIEJsb2Nrd2lzZQkJQmxvY2t3aXNlpqG/777cCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJCb/vvtyz5qZyKCZXKQorbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCQm/777cpuYoJkwpCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJCb/vvtywz7b0KCZCKQorbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJCaX+v+8oJkEpCisiIH19fQorCisiIHt7eyBUaGUgR1VJIHRvb2xiYXI6IGNvbXBsZXRlCitpZiBoYXMoInRvb2xiYXIiKQorICBpZiBleGlzdHMoIipEb190b29sYmFyX3RtZW51IikKKyAgICBkZWxmdW4gRG9fdG9vbGJhcl90bWVudQorICBlbmRpZgorICBmdW4gRG9fdG9vbGJhcl90bWVudSgpCisgICAgdG1lbnUgVG9vbEJhci5PcGVuCQm2fbHSwMmu1worICAgIHRtZW51IFRvb2xCYXIuU2F2ZQkJwHimc6XYq2W9c7/opKSqusDJrtcKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJwHimc6X+s6HAya7XCisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJpkOmTAorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCbRfreykV6a4xdywygorICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJqPqu+KRXpri0X63ssMqnQAorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB0bWVudSBUb29sQmFyLkN1dAkJsMWkVabcsMW2S8OvCisgICAgdG1lbnUgVG9vbEJhci5Db3B5CQm9xrtzqOywxbZLw68KKyAgICB0bWVudSBUb29sQmFyLlBhc3RlCQml0bDFtkvDr7ZLpFcKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQm0TafkLi4uCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAmn5KRVpECt0worICAgIHRtZW51IFRvb2xCYXIuRmluZFByZXYJp+SkV6RArdMKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJqPqlTi4uLgorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCbj8pEogU2Vzc2lvbgorICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24JwHimc6XYq2WquiBTZXNzaW9uCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJsPWm5iBWaW0gtXumocDJCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHRtZW51IFRvb2xCYXIuTWFrZQkJsPWm5iBNYWtlCisgICAgdG1lbnUgVG9vbEJhci5TaGVsbAkJtn2x0qRArdOpUqVPpkO1+LWhIERvc0JveAorICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJsPWm5iBjdGFncworICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAm49ajspdirZbTlvNCm7LhtqrogdGFnCisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQlWaW0gu7KnVbuhqfoKKyAgICB0bWVudSBUb29sQmFyLkZpbmRIZWxwCbdqtE0gVmltILuhqfqk5aXzCisgIGVuZGZ1bgorZW5kaWYKKyIgfX19CisKKyIgdmltOmZvbGRtZXRob2Q9bWFya2VyOm5vd3JhcDpmb2xkY29sdW1uPTI6Zm9sZGxldmVsPTEKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2NzLmNwMTI1MC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9jcy5jcDEyNTAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlY2JkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9jcy5jcDEyNTAudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJQ3plY2gKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfY3plY2hfY3plY2hfcmVwdWJsaWMuMTI1MC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2NzLmxhdGluMS52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9jcy5sYXRpbjEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjI4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9jcy5sYXRpbjEudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJQ3plY2gKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfY3plY2hfY3plY2hfcmVwdWJsaWMuMTI1Mi52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2NzX2N6LmNwMTI1MC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9jc19jei5jcDEyNTAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlY2JkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9jc19jei5jcDEyNTAudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJQ3plY2gKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfY3plY2hfY3plY2hfcmVwdWJsaWMuMTI1MC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2NzX2N6Lmlzb184ODU5LTIudmltIGIvcnVudGltZS9sYW5nL21lbnVfY3NfY3ouaXNvXzg4NTktMi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhZWI0ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2NzX2N6Lmlzb184ODU5LTIudmltCkBAIC0wLDAgKzEsMjQ1IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglDemVjaCBmb3IgSVNPLTg4NTktMgorIiBNYWludGFpbmVyOgkJSmlyaSBCcmV6aW5hIDxicnpqQHNlem5hbS5jej4KKyIgdmltOnNldCBmb2xkbWV0aG9kPW1hcmtlcjoKKyIgJFJldmlzaW9uJAorIiAkRGF0ZSQKKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX21lbnVfdHJhbnMgPSAxCisKK3NjcmlwdGVuY29kaW5nIElTTy04ODU5LTIKKworIiB7e3sgRmlsZSBtZW51CittZW51dHJhbnMgJkZpbGUJCQkJJlNvdWJvcgorbWVudXRyYW5zICZPcGVuXC5cLlwuPFRhYj46ZQkJJk90ZXb47XRcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAlPdGV2+O10XCB2XCBubyZ26W1cIG9rbuxcLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQkmTm92/TxUYWI+OmVuZXcKK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjbG9zZQkJJlphdvjtdDxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJJlVsb75pdDxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJVWxvvml0XCAmamFrb1wuXC5cLjxUYWI+OnNhdgorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLglSb3pk7GxpdFwgb2tub1wgLVwgJkRpZmZcLlwuXC4KK21lbnV0cmFucyBTcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCVJvemTsbGl0XCBva25vXCAtXCAmUGF0Y2hcLlwuXC4KK21lbnV0cmFucyAmUHJpbnQJCQkmVGlzaworbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJCVUmbG++aXRcIC1cIEtvbmVjPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCSZLb25lYzxUYWI+OnFhCisiIH19fQorCisiIHt7eyBFZGl0IG1lbnUKK21lbnV0cmFucyAmRWRpdAkJCQnacHImYXZ5CittZW51dHJhbnMgJlVuZG88VGFiPnUJCQkmWnDsdDxUYWI+dQorbWVudXRyYW5zICZSZWRvPFRhYj5eUgkJCVomcnW5aXRcIHZy4WNlbu08VGFiPl5SCittZW51dHJhbnMgUmVwJmVhdDxUYWI+XC4JCSZPcGFrb3ZhdDxUYWI+XC4KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCQkmVnn47Xpub3V0PFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJJktvcO1yb3ZhdDxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQlWJmxvvml0PFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkJVmxvvml0XCAmcPhlZDxUYWI+W3AKK21lbnV0cmFucyBQdXRcICZBZnRlcjxUYWI+XXAJCVZsb75pJnRcIHphPFRhYj5dcAorbWVudXRyYW5zICZEZWxldGU8VGFiPngJCQkmU21hemF0PFRhYj54CittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHCQlWeSZicmF0XCB2uWU8VGFiPmdnVkcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCSZIbGVkYXRcLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuCSZOYWhyYWRpdFwuXC5cLgorbWVudXRyYW5zIE9wdGlvbnNcLlwuXC4JCQlWb2xiJnlcLlwuXC4KK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJTmFzdGF2JmVu7Vwgb2tuYQorCSIge3t7MiBFZGl0IC0xCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJCQkJJkdsb2LhbG7tXCBuYXN0YXZlbu0KK21lbnV0cmFucyBUb2dnbGVcIFBhdHRlcm5cICZIaWdobGlnaHQ8VGFiPjpzZXRcIGhscyEJJlD4ZXBub3V0XCB6dv1yYXpu7G7tXCB2em9ydTxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEJCVD4ZXBub3V0XCBpZ25vcm924W7tXCAmVkVSWsFMRUs8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCQlQ+GVwbm91dFwgJlNob3dtYXRjaFwgXHtcKFxbXF0pXH08VGFiPjpzZXRcIHNtIQorbWVudXRyYW5zICZDb250ZXh0XCBsaW5lcwkJCQlab2JyYXppdFwga29udGUmeHRcIGt1cnpvcnUKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJCQlWaXJ0deFsbu1cIHAmb3ppY2VcIGt1cnpvcnUKKwltZW51dHJhbnMgTmV2ZXIJCQkJCQlOaWtkeQorCW1lbnV0cmFucyBCbG9ja1wgU2VsZWN0aW9uCQkJCVb9YuxyXCBCbG9rdQorCW1lbnV0cmFucyBJbnNlcnRcIG1vZGUJCQkJCUluc2VydFwgbfNkCisJbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJCQlCbG9rXCBhXCBJbnNlcnQKKwltZW51dHJhbnMgQWx3YXlzCQkJCQlWvmR5Y2t5CittZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJCVD4ZXBub3V0XCBJbnNlcnRcIG3zJmQ8VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEJCVD4ZXBub3V0XCBrb21wYXRpYmlsbu1cIHJlvmltXCBzXCAndmknPFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQkJCU5hc3Rhdml0XCAmY2VzdHVcIGtcIHByb2hsZWThduFu7VwuXC5cLgorbWVudXRyYW5zIFRhJmdcIEZpbGVzXC5cLlwuCQkJCVRhJmdcIHNvdWJvcnlcLlwuXC4KK21lbnV0cmFucyBUb2dnbGVcICZUb29sYmFyCQkJCVD4ZXBub3V0XCAmVG9vbGJhcgorbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCQkJUPgmZXBub3V0XCBkb2xu7Vwgcm9sb3ZhY+1cIGxpuXR1CittZW51dHJhbnMgVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyCQkJUPhlcG5vdXRcICZsZXZvdVwgcm9sb3ZhY+1cIGxpuXR1CittZW51dHJhbnMgVG9nZ2xlXCAmUmlnaHRcIFNjcm9sbGJhcgkJCVD4ZXBub3V0XCBwJnJhdm91XCByb2xvdmFj7VwgbGm5dHUKKwkiIHt7ezIgRWRpdCAtMgorbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJCQlOYXN0YXZlbu1cIHNvJnVib3J1CittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmTnVtYmVyaW5nPFRhYj46c2V0XCBudSEJUPhlcG5vdXRcIOjtc2xvduFu7Vwg+OEmZGv5PFRhYj46c2V0XCBudSEKK21lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQkJUPhlcG5vdXRcICZMaXN0XCBt82Q8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJCVD4ZXBub3V0XCB6YWxhJm1vduFu7Vwg+OFka/k8VGFiPjpzZXRcIHdyYXAhCittZW51dHJhbnMgVG9nZ2xlXCBXJnJhcFwgYXRcIHdvcmQ8VGFiPjpzZXRcIGxiciEJUPhlcG5vdXRcIHpsJm9tXCB2ZVwgc2xvduw8VGFiPjpzZXRcIGxiciEKK21lbnV0cmFucyBUb2dnbGVcICZleHBhbmQtdGFiPFRhYj46c2V0XCBldCEJCVD4ZXBub3V0XCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCittZW51dHJhbnMgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQkJUPhlcG5vdXRcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCittZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJCVD4ZXBub3V0XCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEKK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJCQkJTmFzdGF2Jml0XCC57fhrdVwgb2Qmc2F6ZW7tCittZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCQkJTmFzdGF2aXRcIFNvZnRcICZUYWJzdG9wCittZW51dHJhbnMgVGUmeHRcIFdpZHRoXC5cLlwuCQkJCant+GthXCB0ZSZ4dHVcLlwuXC4KK21lbnV0cmFucyAmRmlsZVwgRm9ybWF0XC5cLlwuCQkJCSZGb3Jt4XRcIHNvdWJvcnVcLlwuXC4KKwkiIHt7ezIgRWRpdCAtMworbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQlCYXJldm7pXCBzJmNo6W1hCittZW51dHJhbnMgJktleW1hcAkJCUts4XZlc2924VwgbSZhcGEKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQlWeWJyYXRcIHDtcyZtb1wuXC5cLgorIiB9fX0xCisKKyIge3t7IFByb2dyYW1taW5nIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJCQlO4XN0JnJvamUKK21lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dCSZTa2/oaXRcIG5hXCB0YWc8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkJU2tv6Gl0XCAmenDsdDxUYWI+XlQKK21lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCSZWeXR2b/hpdFwgc291Ym9yXCB0YWf5CisKK21lbnV0cmFucyAmRm9sZGluZwkJCSZGb2xkeQorbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppICZBbm8vTmU8VGFiPnppCittZW51dHJhbnMgJlZpZXdcIEN1cnNvclwgTGluZTxUYWI+enYJJlpvYnJheml0XCD44WRla1wga3Vyem9ydTxUYWI+enYKK21lbnV0cmFucyBWaWUmd1wgQ3Vyc29yXCBMaW5lXCBvbmx5PFRhYj56TXp4CQlabyZicmF6aXRcIHBvdXplXCD44WRla1wga3Vyem9ydVwgPFRhYj56TXp4CittZW51dHJhbnMgQyZsb3NlXCBtb3JlXCBmb2xkczxUYWI+em0JJlZ5am1vdXRcIGplZG51XCD6cm92ZfJcIGZvbGT5PFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JWmF2+O0mdFwgdrllY2hueVwgZm9sZHk8VGFiPnpNCittZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cglQ+GlkYXRcIGplZG4mdVwg+nJvdmXyXCBmb2xk+TxUYWI+enIKK21lbnV0cmFucyAmT3BlblwgYWxsXCBmb2xkczxUYWI+elIJJk90ZXb47XRcIHa5ZWNobnlcIGZvbGR5PFRhYj56UgorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQlNZXRvZGFcICZza2zhZOFu7QorCSJtZW51dHJhbnMgTSZhbnVhbAkJCSZSdehu7AorCSJtZW51dHJhbnMgSSZuZGVudAkJCSZPZHNhemVu7QorCSJtZW51dHJhbnMgRSZ4cHJlc3Npb24JCQkmVv1yYXoKKwkibWVudXRyYW5zIFMmeW50YXgJCQkmU3ludGF4CisJIm1lbnV0cmFucyAmRGlmZgkJCSZEaWZmCisJIm1lbnV0cmFucyBNYSZya2VyCQkJTWEmcmtlcgorbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQlWeXR2b/hpdFwgJmZvbGQ8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCVZ5bWF6YXRcIGZvbCZkPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECVYmeW1hemF0XCB2uWVjaG55XCBmb2xkeTxUYWI+ekQKK21lbnV0cmFucyBGb2xkXCBjb2wmdW1uXCB3aWR0aAkJU2xvdXBlY1wgem9iJnJhemVu7VwgZm9sZPkKKworbWVudXRyYW5zICZVcGRhdGUJCQkmT2Jub3ZpdAorbWVudXRyYW5zICZHZXRcIEJsb2NrCQkJJlNlam1vdXRcIEJsb2sKK21lbnV0cmFucyAmUHV0XCBCbG9jawkJCSZWbG++aXRcIEJsb2sKK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCSZNYWtlPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJVv1waXNcICZjaHliPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJVv1wJmlzXCB6cHLhdjxUYWI+OmNsIQorbWVudXRyYW5zICZOZXh0XCBFcnJvcjxUYWI+OmNuCQlEYWy57VwgY2gmeWJhPFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AJJlD4ZWRjaG967VwgY2h5YmE8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJU3RhJnK57Vwgc2V6bmFtPFRhYj46Y29sZAorbWVudXRyYW5zIE4mZXdlclwgTGlzdDxUYWI+OmNuZXcJTiZvduxque1cIHNlem5hbTxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdwkJQ2h5Ym926VwgbyZrbm8KK21lbnV0cmFucyAmVXBkYXRlPFRhYj46Y3dpbgkJTyZibm92aXQ8VGFiPjpjd2luCittZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbgkJJk90ZXb47XQ8VGFiPjpjb3BlbgorbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQkJJlphdvjtdDxUYWI+OmNjbG9zZQorbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCQlOJmFzdGF2aXRcIGtvbXBpbOF0b3IKKworbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJUPhldulzdFwgZG9cILllc3Ru4WN0a2926WhvXCBmb3Jt4XQmdTxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIgUPgmZXbpc3RcIHpw7HQ8VGFiPjolIXh4ZFwgLXIKKyIgfX19CisKKyIge3t7IFN5bnRheCBtZW51CittZW51dHJhbnMgJlN5bnRheAkJU3ludGEmeGUKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seQlOYXN0YXZpdFwgcG91emVcICdzeW50YSZ4JworbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwlOYXN0YXZpdFwgdGFr6VwgJyZmaWxldHlwZScKK21lbnV0cmFucyAmT2ZmCQkJJlZ5cG5vdXQKK21lbnV0cmFucyAmTWFudWFsCQkmUnXobuwKK21lbnV0cmFucyBBJnV0b21hdGljCQlBJnV0b21hdGlja3kKK21lbnV0cmFucyBvbi9vZmZcIGZvclwgJlRoaXNcIGZpbGUJJlD4ZXBub3V0XCAocHJvXCB0ZW50b1wgc291Ym9yKQorbWVudXRyYW5zIG8mZmZcICh0aGlzXCBmaWxlKQl2eXAmbm91dFwgKHByb1wgdGVudG9cIHNvdWJvcikKK21lbnV0cmFucyBDbyZsb3JcIHRlc3QJCVRlc3RcICZiYXJldgorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJJlRlc3RcIHp2/XJhevJvduFu7QorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSFRNTAlQ+GV26XN0XCAmZG9cIEhUTUwKK21lbnV0cmFucyAmU2hvd1wgZmlsZXR5cGVzXCBpblwgbWVudQkmWm9icmF6aXRcIHb9YuxyXCBtb75ub3N07QorIiB9fX0KKworIiB7e3sgTWVudSBCdWZmZXJzCittZW51dHJhbnMgJkJ1ZmZlcnMJCSZCdWZmZXJ5CittZW51dHJhbnMgJlJlZnJlc2hcIG1lbnUJJk9ibm92aXRcIG1lbnUKK21lbnV0cmFucyAmRGVsZXRlCQlaJnJ1uWl0CittZW51dHJhbnMgJkFsdGVybmF0ZQkJJlpt7G5pdAorbWVudXRyYW5zICZOZXh0CQkJJkRhbLntCittZW51dHJhbnMgJlByZXZpb3VzCQkmUPhlZGNob3rtCittZW51dHJhbnMgW05vXCBGaWxlXQkJW67hZG79XCBzb3Vib3JdCisiIH19fQorCisiIHt7eyBNZW51IFdpbmRvdworbWVudXRyYW5zICZXaW5kb3cJCQkmT2tuYQorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCSZOb3bpPFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJJlJvemTsbGl0PFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCVJvJnpk7GxpdFwgbmFcICM8VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdglSb3pk7GxpdFwgJnZlcnRpa+Fsbuw8VGFiPl5XdgorbWVudXRyYW5zIFNwbGl0XCBGaWxlXCBFJnhwbG9yZXIJUm96ZOxsaXRcIC1cIEZpbGVcIEUmeHBsb3JlcgorbWVudXRyYW5zIE1vdmVcICZUbwkJCSZQ+GVzdW4KK21lbnV0cmFucyAmVG9wPFRhYj5eV0sJCQkmTmFob3J1PFRhYj5eV0sKK21lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJCSZEb2x1PFRhYj5eV0oKK21lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICQkmVmxldm88VGFiPl5XSAorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCQlWcCZyYXZvPFRhYj5eV0wKKworbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCQlaYXb47SZ0PFRhYj5eV2MKK21lbnV0cmFucyBDbG9zZVwgJk90aGVyKHMpPFRhYj5eV28JWmF2+O10XCAmb3N0YXRu7TxUYWI+XldvCittZW51dHJhbnMgTmUmeHQ8VGFiPl5XdwkJCSZEYWy57TxUYWI+Xld3CittZW51dHJhbnMgUCZyZXZpb3VzPFRhYj5eV1cJCSZQ+GVkY2hveu08VGFiPl5XVworbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CQkmU3Rlam7hXCB2/blrYTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCU1heGlt4Wxu7Vwgdv25JmthPFRhYj5eV18KK21lbnV0cmFucyBNJmluXCBIZWlnaHQ8VGFiPl5XMV8JCU0maW5pbeFsbu1cIHb9uWthPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCSZNYXhpbeFsbu1cILnt+GthPFRhYj5eV1x8CittZW51dHJhbnMgTWluXCBXaWR0Jmg8VGFiPl5XMVx8CQlNaW5pbeFsbu1cILnt+GsmYTxUYWI+XlcxXHwKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQlSb3RvdmF0XCBuYSZob3J1PFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IJCVJvdG92YXRcICZkb2z5PFRhYj5eV3IKKworIiB7e3sgSGVscCBtZW51CittZW51dHJhbnMgJkhlbHAJCQkmTuFwb3bsZGEKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4JJlD4ZWhsZWQ8VGFiPjxGMT4KK21lbnV0cmFucyAmVXNlclwgTWFudWFsCQkmVb5pdmF0ZWxza/1cIE1hbnXhbAorbWVudXRyYW5zICZIb3ctdG9cIGxpbmtzCUhvJnd0bworbWVudXRyYW5zICZHVUkJCQkmR3JhZmlja+lcIHJvemhyYW7tCittZW51dHJhbnMgJkNyZWRpdHMJCSZBdXRv+GkKK21lbnV0cmFucyBDbyZweWluZwkJJkxpY2Vu6G7tXCBwb2xpdGlrYQorbWVudXRyYW5zICZGaW5kXC5cLlwuCQkmSGxlZGF0XC5cLlwuCittZW51dHJhbnMgTyZycGhhbnMJCU8mc2n4ZWzpXCBk7HRpCittZW51dHJhbnMgJlZlcnNpb24JCSZWZXJ6ZQorbWVudXRyYW5zICZBYm91dAkJJk9cIGFwbGlrYWNpCisiIH19fQorCisiIHt7eyBUaGUgcG9wdXAgbWVudQorbWVudXRyYW5zICZVbmRvCQkJJlpw7HQKK21lbnV0cmFucyBDdSZ0CQkJJlZ5+O16bm91dAorbWVudXRyYW5zICZDb3B5CQkJJktvcO1yb3ZhdAorbWVudXRyYW5zICZQYXN0ZQkJJlZsb75pdAorbWVudXRyYW5zICZEZWxldGUJCSZTbWF6YXQKK21lbnV0cmFucyBTZWxlY3RcIEJsb2Nrd2lzZQlWeWJyYXRcIGJsb2tvduwKK21lbnV0cmFucyBTZWxlY3RcICZXb3JkCQlWeWJyYXRcICZzbG92bworbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCVZ5YnJhdFwgJvjhZGVrCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJVnlicmF0XCAmYmxvaworbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJVnlicmF0XCAmdrllCisiIH19fQorCisiIHt7eyBUaGUgR1VJIHRvb2xiYXIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCU90ZXb47XQgc291Ym9yCisgICAgdG1lbnUgVG9vbEJhci5TYXZlCQlVbG++aXQgc291Ym9yCisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCQlVbG++aXQgdrllY2hueSBzb3Vib3J5CisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJVGlzaworICAgIHRtZW51IFRvb2xCYXIuVW5kbwkJWnDsdAorICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJWnJ1uWl0IHZy4WNlbu0KKyAgICB0bWVudSBUb29sQmFyLkN1dAkJVnn47Xpub3V0CisgICAgdG1lbnUgVG9vbEJhci5Db3B5CQlLb3Dtcm92YXQKKyAgICB0bWVudSBUb29sQmFyLlBhc3RlCQlWbG++aXQKKyAgICB0bWVudSBUb29sQmFyLkZpbmQJCUhsZWRhdC4uLgorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJSGxlZGF0IGRhbLntCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldglIbGVkYXQgcPhlZGNob3rtCisgICAgdG1lbnUgVG9vbEJhci5SZXBsYWNlCQlOYWhyYWRpdC4uLgorICAgIGlmIDAJIiBkaXNhYmxlZDsgVGhlc2UgYXJlIGluIHRoZSBXaW5kb3dzIG1lbnUKKyAgICAgIHRtZW51IFRvb2xCYXIuTmV3CQlOb3bpIG9rbm8KKyAgICAgIHRtZW51IFRvb2xCYXIuV2luU3BsaXQJUm96ZOxsaXQgb2tubworICAgICAgdG1lbnUgVG9vbEJhci5XaW5NYXgJCU1heGltYWxpem92YXQgb2tubworICAgICAgdG1lbnUgVG9vbEJhci5XaW5NaW4JCU1pbmltYWxpem92YXQgb2tubworICAgICAgdG1lbnUgVG9vbEJhci5XaW5DbG9zZQlaYXb47XQgb2tubworICAgIGVuZGlmCisgICAgdG1lbnUgVG9vbEJhci5Mb2FkU2VzbglOYejtc3Qgc2V6ZW7tCisgICAgdG1lbnUgVG9vbEJhci5TYXZlU2VzbglVbG++aXQgc2V6ZW7tCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJU3B1c3RpdCBza3JpcHQKKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCVNwdXN0aXQgbWFrZQorICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCVNwdXN0aXQgc2hlbGwKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCVNwdXN0aXQgY3RhZ3MKKyAgICB0bWVudSBUb29sQmFyLlRhZ0p1bXAJCVNrb+hpdCBuYSB0YWcgcG9kIGt1cnpvcmVtCisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQlO4XBvduxkYQorICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJSGxlZGF0IG7hcG927GR1IGsuLi4KKyAgZW5kZnVuCitlbmRpZgorIiB9fX0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2NzX2N6LmxhdGluMS52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9jc19jei5sYXRpbjEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjI4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9jc19jei5sYXRpbjEudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJQ3plY2gKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfY3plY2hfY3plY2hfcmVwdWJsaWMuMTI1Mi52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2N6ZWNoX2N6ZWNoX3JlcHVibGljLjEyNTAudmltIGIvcnVudGltZS9sYW5nL21lbnVfY3plY2hfY3plY2hfcmVwdWJsaWMuMTI1MC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmZjllMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2N6ZWNoX2N6ZWNoX3JlcHVibGljLjEyNTAudmltCkBAIC0wLDAgKzEsMjQ1IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglDemVjaCBmb3IgTVMtV2luZG93cworIiBNYWludGFpbmVyOgkJSmlyaSBCcmV6aW5hIDxicnpqQHNlem5hbS5jej4KKyIgdmltOnNldCBmb2xkbWV0aG9kPW1hcmtlcjoKKyIgJFJldmlzaW9uJAorIiAkRGF0ZSQKKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX21lbnVfdHJhbnMgPSAxCisKK3NjcmlwdGVuY29kaW5nIGNwMTI1MAorCisiIHt7eyBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCQkmU291Ym9yCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQkmT3RldvjtdFwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCU90ZXb47XRcIHZcIG5vJnbpbVwgb2tu7FwuXC5cLjxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCSZOb3b9PFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQkmWmF2+O10PFRhYj46Y2xvc2UKK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCQkmVWxvnml0PFRhYj46dworbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdglVbG+eaXRcICZqYWtvXC5cLlwuPFRhYj46c2F2CittZW51dHJhbnMgU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCVJvemTsbGl0XCBva25vXCAtXCAmRGlmZlwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JUm96ZOxsaXRcIG9rbm9cIC1cICZQYXRjaFwuXC5cLgorbWVudXRyYW5zICZQcmludAkJCSZUaXNrCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJVSZsb55pdFwgLVwgS29uZWM8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJJktvbmVjPFRhYj46cWEKKyIgfX19CisKKyIge3t7IEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCdpwciZhdnkKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSZacOx0PFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJWiZydZppdFwgdnLhY2Vu7TxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJJk9wYWtvdmF0PFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCSZWefjtem5vdXQ8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQkmS29w7XJvdmF0PFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCVYmbG+eaXQ8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQlWbG+eaXRcICZw+GVkPFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkJVmxvnmkmdFwgemE8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCSZTbWF6YXQ8VGFiPngKK21lbnV0cmFucyAmU2VsZWN0XCBhbGw8VGFiPmdnVkcJCVZ5JmJyYXRcIHaaZTxUYWI+Z2dWRworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJJkhsZWRhdFwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JJk5haHJhZGl0XC5cLlwuCittZW51dHJhbnMgT3B0aW9uc1wuXC5cLgkJCVZvbGImeVwuXC5cLgorbWVudXRyYW5zIFNldHRpbmdzXCAmV2luZG93CQlOYXN0YXYmZW7tXCBva25hCisJIiB7e3syIEVkaXQgLTEKK21lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkJCQkmR2xvYuFsbu1cIG5hc3RhdmVu7QorbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQkmUPhlcG5vdXRcIHp2/XJhem7sbu1cIHZ6b3J1PFRhYj46c2V0XCBobHMhCittZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljIQkJUPhlcG5vdXRcIGlnbm9yb3bhbu1cICZWRVJawUxFSzxUYWI+OnNldFwgaWMhCittZW51dHJhbnMgVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEJCVD4ZXBub3V0XCAmU2hvd21hdGNoXCBce1woXFtcXSlcfTxUYWI+OnNldFwgc20hCittZW51dHJhbnMgJkNvbnRleHRcIGxpbmVzCQkJCVpvYnJheml0XCBrb250ZSZ4dFwga3Vyem9ydQorbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQkJCVZpcnR14Wxu7VwgcCZvemljZVwga3Vyem9ydQorCW1lbnV0cmFucyBOZXZlcgkJCQkJCU5pa2R5CisJbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCQkJVv1i7HJcIEJsb2t1CisJbWVudXRyYW5zIEluc2VydFwgbW9kZQkJCQkJSW5zZXJ0XCBt82QKKwltZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CQkJCUJsb2tcIGFcIEluc2VydAorCW1lbnV0cmFucyBBbHdheXMJCQkJCVaeZHlja3kKK21lbnV0cmFucyBUb2dnbGVcIEluc2VydFwgJk1vZGU8VGFiPjpzZXRcIGltIQkJUPhlcG5vdXRcIEluc2VydFwgbfMmZDxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwIQkJUPhlcG5vdXRcIGtvbXBhdGliaWxu7VwgcmWeaW1cIHNcICd2aSc8VGFiPjpzZXRcIGNwIQorbWVudXRyYW5zIFNlYXJjaFwgJlBhdGhcLlwuXC4JCQkJTmFzdGF2aXRcICZjZXN0dVwga1wgcHJvaGxlZOF24W7tXC5cLlwuCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4JCQkJVGEmZ1wgc291Ym9yeVwuXC5cLgorbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCQkJUPhlcG5vdXRcICZUb29sYmFyCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJCQlQ+CZlcG5vdXRcIGRvbG7tXCByb2xvdmFj7VwgbGmadHUKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJCQlQ+GVwbm91dFwgJmxldm91XCByb2xvdmFj7VwgbGmadHUKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCQkJUPhlcG5vdXRcIHAmcmF2b3VcIHJvbG92YWPtXCBsaZp0dQorCSIge3t7MiBFZGl0IC0yCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQkJCU5hc3RhdmVu7Vwgc28mdWJvcnUKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQlQ+GVwbm91dFwg6O1zbG924W7tXCD44SZka/k8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCQlQ+GVwbm91dFwgJkxpc3RcIG3zZDxUYWI+OnNldFwgbGlzdCEKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQkJUPhlcG5vdXRcIHphbGEmbW924W7tXCD44WRr+TxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyIQlQ+GVwbm91dFwgemwmb21cIHZlXCBzbG927DxUYWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJUPhlcG5vdXRcICZleHBhbmQtdGFiPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQlQ+GVwbm91dFwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQkJUPhlcG5vdXRcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQorbWVudXRyYW5zICZTaGlmdHdpZHRoCQkJCQlOYXN0YXYmaXRcIJrt+Gt1XCBvZCZzYXplbu0KK21lbnV0cmFucyBTb2Z0XCAmVGFic3RvcAkJCQlOYXN0YXZpdFwgU29mdFwgJlRhYnN0b3AKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQkJiu34a2FcIHRlJnh0dVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkJJkZvcm3hdFwgc291Ym9ydVwuXC5cLgorCSIge3t7MiBFZGl0IC0zCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCUJhcmV2bulcIHMmY2jpbWEKK21lbnV0cmFucyAmS2V5bWFwCQkJS2zhdmVzb3bhXCBtJmFwYQorbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCVZ5YnJhdFwgcO1zJm1vXC5cLlwuCisiIH19fTEKKworIiB7e3sgUHJvZ3JhbW1pbmcgbWVudQorbWVudXRyYW5zICZUb29scwkJCU7hc3Qmcm9qZQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JJlNrb+hpdFwgbmFcIHRhZzxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQlTa2/oaXRcICZ6cOx0PFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJJlZ5dHZv+Gl0XCBzb3Vib3JcIHRhZ/kKKworbWVudXRyYW5zICZGb2xkaW5nCQkJJkZvbGR5CittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkgJkFuby9OZTxUYWI+emkKK21lbnV0cmFucyAmVmlld1wgQ3Vyc29yXCBMaW5lPFRhYj56dgkmWm9icmF6aXRcIPjhZGVrXCBrdXJ6b3J1PFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJCVpvJmJyYXppdFwgcG91emVcIPjhZGVrXCBrdXJ6b3J1XCA8VGFiPnpNengKK21lbnV0cmFucyBDJmxvc2VcIG1vcmVcIGZvbGRzPFRhYj56bQkmVnlqbW91dFwgamVkbnVcIPpyb3Zl8lwgZm9sZPk8VGFiPnptCittZW51dHJhbnMgJkNsb3NlXCBhbGxcIGZvbGRzPFRhYj56TQlaYXb47SZ0XCB2mmVjaG55XCBmb2xkeTxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyCVD4aWRhdFwgamVkbiZ1XCD6cm92ZfJcIGZvbGT5PFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgkmT3RldvjtdFwgdpplY2hueVwgZm9sZHk8VGFiPnpSCittZW51dHJhbnMgRm9sZFwgTWV0JmhvZAkJCU1ldG9kYVwgJnNrbOFk4W7tCisJIm1lbnV0cmFucyBNJmFudWFsCQkJJlJ16G7sCisJIm1lbnV0cmFucyBJJm5kZW50CQkJJk9kc2F6ZW7tCisJIm1lbnV0cmFucyBFJnhwcmVzc2lvbgkJCSZW/XJhegorCSJtZW51dHJhbnMgUyZ5bnRheAkJCSZTeW50YXgKKwkibWVudXRyYW5zICZEaWZmCQkJJkRpZmYKKwkibWVudXRyYW5zIE1hJnJrZXIJCQlNYSZya2VyCittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCVZ5dHZv+Gl0XCAmZm9sZDxUYWI+emYKK21lbnV0cmFucyAmRGVsZXRlXCBGb2xkPFRhYj56ZAkJVnltYXphdFwgZm9sJmQ8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJViZ5bWF6YXRcIHaaZWNobnlcIGZvbGR5PFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbCZ1bW5cIHdpZHRoCQlTbG91cGVjXCB6b2ImcmF6ZW7tXCBmb2xk+QorCittZW51dHJhbnMgJlVwZGF0ZQkJCSZPYm5vdml0CittZW51dHJhbnMgJkdldFwgQmxvY2sJCQkmU2VqbW91dFwgQmxvaworbWVudXRyYW5zICZQdXRcIEJsb2NrCQkJJlZsb55pdFwgQmxvaworbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZQkJJk1ha2U8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsCQlW/XBpc1wgJmNoeWI8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQlW/XAmaXNcIHpwcuF2PFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCURhbJrtXCBjaCZ5YmE8VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAkmUPhlZGNob3rtXCBjaHliYTxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAlTdGEmcprtXCBzZXpuYW08VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwlOJm927Gqa7Vwgc2V6bmFtPFRhYj46Y25ldworbWVudXRyYW5zIEVycm9yXCAmV2luZG93CQlDaHlib3bpXCBvJmtubworbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCQlPJmJub3ZpdDxUYWI+OmN3aW4KK21lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQkmT3RldvjtdDxUYWI+OmNvcGVuCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCQkmWmF2+O10PFRhYj46Y2Nsb3NlCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCU4mYXN0YXZpdFwga29tcGls4XRvcgorCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAlQ+GV26XN0XCBkb1wgmmVzdG7hY3Rrb3bpaG9cIGZvcm3hdCZ1PFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtciBQ+CZldulzdFwgenDsdDxUYWI+OiUheHhkXCAtcgorIiB9fX0KKworIiB7e3sgU3ludGF4IG1lbnUKK21lbnV0cmFucyAmU3ludGF4CQlTeW50YSZ4ZQorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CU5hc3Rhdml0XCBwb3V6ZVwgJ3N5bnRhJngnCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCU5hc3Rhdml0XCB0YWvpXCAnJmZpbGV0eXBlJworbWVudXRyYW5zICZPZmYJCQkmVnlwbm91dAorbWVudXRyYW5zICZNYW51YWwJCSZSdehu7AorbWVudXRyYW5zIEEmdXRvbWF0aWMJCUEmdXRvbWF0aWNreQorbWVudXRyYW5zIG9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZQkmUPhlcG5vdXRcIChwcm9cIHRlbnRvXCBzb3Vib3IpCittZW51dHJhbnMgbyZmZlwgKHRoaXNcIGZpbGUpCXZ5cCZub3V0XCAocHJvXCB0ZW50b1wgc291Ym9yKQorbWVudXRyYW5zIENvJmxvclwgdGVzdAkJVGVzdFwgJmJhcmV2CittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAkmVGVzdFwgenb9cmF68m924W7tCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCVD4ZXbpc3RcICZkb1wgSFRNTAorbWVudXRyYW5zICZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51CSZab2JyYXppdFwgdv1i7HJcIG1vnm5vc3TtCisiIH19fQorCisiIHt7eyBNZW51IEJ1ZmZlcnMKK21lbnV0cmFucyAmQnVmZmVycwkJJkJ1ZmZlcnkKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQkmT2Jub3ZpdFwgbWVudQorbWVudXRyYW5zICZEZWxldGUJCVomcnWaaXQKK21lbnV0cmFucyAmQWx0ZXJuYXRlCQkmWm3sbml0CittZW51dHJhbnMgJk5leHQJCQkmRGFsmu0KK21lbnV0cmFucyAmUHJldmlvdXMJCSZQ+GVkY2hveu0KK21lbnV0cmFucyBbTm9cIEZpbGVdCQlbjuFkbv1cIHNvdWJvcl0KKyIgfX19CisKKyIge3t7IE1lbnUgV2luZG93CittZW51dHJhbnMgJldpbmRvdwkJCSZPa25hCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJJk5vduk8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQkmUm96ZOxsaXQ8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JUm8memTsbGl0XCBuYVwgIzxUYWI+XldeXgorbWVudXRyYW5zIFNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2CVJvemTsbGl0XCAmdmVydGlr4Wxu7DxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcglSb3pk7GxpdFwgLVwgRmlsZVwgRSZ4cGxvcmVyCittZW51dHJhbnMgTW92ZVwgJlRvCQkJJlD4ZXN1bgorbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJCSZOYWhvcnU8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJJkRvbHU8VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCSZWbGV2bzxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCVZwJnJhdm88VGFiPl5XTAorCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCVphdvjtJnQ8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwlaYXb47XRcICZvc3RhdG7tPFRhYj5eV28KK21lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQkJJkRhbJrtPFRhYj5eV3cKK21lbnV0cmFucyBQJnJldmlvdXM8VGFiPl5XVwkJJlD4ZWRjaG967TxUYWI+XldXCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JCSZTdGVqbuFcIHb9mmthPFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkJTWF4aW3hbG7tXCB2/Zoma2E8VGFiPl5XXworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXwkJTSZpbmlt4Wxu7Vwgdv2aa2E8VGFiPl5XMV8KK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkJJk1heGlt4Wxu7Vwgmu34a2E8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCU1pbmlt4Wxu7Vwgmu34ayZhPFRhYj5eVzFcfAorbWVudXRyYW5zIFJvdGF0ZVwgJlVwPFRhYj5eV1IJCVJvdG92YXRcIG5hJmhvcnU8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJUm90b3ZhdFwgJmRvbPk8VGFiPl5XcgorCisiIHt7eyBIZWxwIG1lbnUKK21lbnV0cmFucyAmSGVscAkJCSZO4XBvduxkYQorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgkmUPhlaGxlZDxUYWI+PEYxPgorbWVudXRyYW5zICZVc2VyXCBNYW51YWwJCSZVnml2YXRlbHNr/VwgTWFudeFsCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJSG8md3RvCittZW51dHJhbnMgJkdVSQkJCSZHcmFmaWNr6Vwgcm96aHJhbu0KK21lbnV0cmFucyAmQ3JlZGl0cwkJJkF1dG/4aQorbWVudXRyYW5zIENvJnB5aW5nCQkmTGljZW7obu1cIHBvbGl0aWthCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCSZIbGVkYXRcLlwuXC4KK21lbnV0cmFucyBPJnJwaGFucwkJTyZzafhlbOlcIGTsdGkKK21lbnV0cmFucyAmVmVyc2lvbgkJJlZlcnplCittZW51dHJhbnMgJkFib3V0CQkmT1wgYXBsaWthY2kKKyIgfX19CisKKyIge3t7IFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCQkmWnDsdAorbWVudXRyYW5zIEN1JnQJCQkmVnn47Xpub3V0CittZW51dHJhbnMgJkNvcHkJCQkmS29w7XJvdmF0CittZW51dHJhbnMgJlBhc3RlCQkmVmxvnml0CittZW51dHJhbnMgJkRlbGV0ZQkJJlNtYXphdAorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlCVZ5YnJhdFwgYmxva2927AorbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCVZ5YnJhdFwgJnNsb3ZvCittZW51dHJhbnMgU2VsZWN0XCAmTGluZQkJVnlicmF0XCAm+OFkZWsKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawlWeWJyYXRcICZibG9rCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQlWeWJyYXRcICZ2mmUKKyIgfX19CisKKyIge3t7IFRoZSBHVUkgdG9vbGJhcgoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorICAgIHRtZW51IFRvb2xCYXIuT3BlbgkJT3RldvjtdCBzb3Vib3IKKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCVVsb55pdCBzb3Vib3IKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJCVVsb55pdCB2mmVjaG55IHNvdWJvcnkKKyAgICB0bWVudSBUb29sQmFyLlByaW50CQlUaXNrCisgICAgdG1lbnUgVG9vbEJhci5VbmRvCQlacOx0CisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQlacnWaaXQgdnLhY2Vu7QorICAgIHRtZW51IFRvb2xCYXIuQ3V0CQlWefjtem5vdXQKKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCUtvcO1yb3ZhdAorICAgIHRtZW51IFRvb2xCYXIuUGFzdGUJCVZsb55pdAorICAgIHRtZW51IFRvb2xCYXIuRmluZAkJSGxlZGF0Li4uCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAlIbGVkYXQgZGFsmu0KKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CUhsZWRhdCBw+GVkY2hveu0KKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJCU5haHJhZGl0Li4uCisgICAgaWYgMAkiIGRpc2FibGVkOyBUaGVzZSBhcmUgaW4gdGhlIFdpbmRvd3MgbWVudQorICAgICAgdG1lbnUgVG9vbEJhci5OZXcJCU5vdukgb2tubworICAgICAgdG1lbnUgVG9vbEJhci5XaW5TcGxpdAlSb3pk7GxpdCBva25vCisgICAgICB0bWVudSBUb29sQmFyLldpbk1heAkJTWF4aW1hbGl6b3ZhdCBva25vCisgICAgICB0bWVudSBUb29sQmFyLldpbk1pbgkJTWluaW1hbGl6b3ZhdCBva25vCisgICAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlCVphdvjtdCBva25vCisgICAgZW5kaWYKKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCU5h6O1zdCBzZXplbu0KKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCVVsb55pdCBzZXplbu0KKyAgICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdAlTcHVzdGl0IHNrcmlwdAorICAgIHRtZW51IFRvb2xCYXIuTWFrZQkJU3B1c3RpdCBtYWtlCisgICAgdG1lbnUgVG9vbEJhci5TaGVsbAkJU3B1c3RpdCBzaGVsbAorICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJU3B1c3RpdCBjdGFncworICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAkJU2tv6Gl0IG5hIHRhZyBwb2Qga3Vyem9yZW0KKyAgICB0bWVudSBUb29sQmFyLkhlbHAJCU7hcG927GRhCisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscAlIbGVkYXQgbuFwb3bsZHUgay4uLgorICBlbmRmdW4KK2VuZGlmCisiIH19fQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfY3plY2hfY3plY2hfcmVwdWJsaWMuMTI1Mi52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9jemVjaF9jemVjaF9yZXB1YmxpYy4xMjUyLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2UxZmI0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfY3plY2hfY3plY2hfcmVwdWJsaWMuMTI1Mi52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglDemVjaCBmb3IgV2luZG93cyBpbiBBU0NJSSBlbmNvZGluZworCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9jemVjaF9jemVjaF9yZXB1YmxpYy5hc2NpaS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2N6ZWNoX2N6ZWNoX3JlcHVibGljLmFzY2lpLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2N6ZWNoX2N6ZWNoX3JlcHVibGljLmFzY2lpLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjJlOTZlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfY3plY2hfY3plY2hfcmVwdWJsaWMuYXNjaWkudmltCkBAIC0wLDAgKzEsMjQ1IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglDemVjaCBmb3Igc3lzdGVtcyB3aXRob3V0IGxvY2FsaXphdGlvbgorIiBNYWludGFpbmVyOgkJSmlyaSBCcmV6aW5hIDxicnpqQHNlem5hbS5jej4KKyIgdmltOnNldCBmb2xkbWV0aG9kPW1hcmtlcjoKKyIgJFJldmlzaW9uJAorIiAkRGF0ZSQKKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX21lbnVfdHJhbnMgPSAxCisKKworCisiIHt7eyBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCQkmU291Ym9yCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQkmT3RldnJpdFwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCU90ZXZyaXRcIHZcIG5vJnZlbVwgb2tuZVwuXC5cLjxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCSZOb3Z5PFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQkmWmF2cml0PFRhYj46Y2xvc2UKK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCQkmVWxveml0PFRhYj46dworbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdglVbG96aXRcICZqYWtvXC5cLlwuPFRhYj46c2F2CittZW51dHJhbnMgU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCVJvemRlbGl0XCBva25vXCAtXCAmRGlmZlwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JUm96ZGVsaXRcIG9rbm9cIC1cICZQYXRjaFwuXC5cLgorbWVudXRyYW5zICZQcmludAkJCSZUaXNrCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJVSZsb3ppdFwgLVwgS29uZWM8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJJktvbmVjPFRhYj46cWEKKyIgfX19CisKKyIge3t7IEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCVVwciZhdnkKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSZacGV0PFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJWiZydXNpdFwgdnJhY2VuaTxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJJk9wYWtvdmF0PFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCSZWeXJpem5vdXQ8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQkmS29waXJvdmF0PFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCVYmbG96aXQ8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQlWbG96aXRcICZwcmVkPFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkJVmxvemkmdFwgemE8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCSZTbWF6YXQ8VGFiPngKK21lbnV0cmFucyAmU2VsZWN0XCBhbGw8VGFiPmdnVkcJCVZ5JmJyYXRcIHZzZTxUYWI+Z2dWRworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJJkhsZWRhdFwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JJk5haHJhZGl0XC5cLlwuCittZW51dHJhbnMgT3B0aW9uc1wuXC5cLgkJCVZvbGImeVwuXC5cLgorbWVudXRyYW5zIFNldHRpbmdzXCAmV2luZG93CQlOYXN0YXYmZW5pXCBva25hCisJIiB7e3syIEVkaXQgLTEKK21lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkJCQkmR2xvYmFsbmlcIG5hc3RhdmVuaQorbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQkmUHJlcG5vdXRcIHp2eXJhem5lbmlcIHZ6b3J1PFRhYj46c2V0XCBobHMhCittZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljIQkJUHJlcG5vdXRcIGlnbm9yb3ZhbmlcICZWRVJaQUxFSzxUYWI+OnNldFwgaWMhCittZW51dHJhbnMgVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEJCVByZXBub3V0XCAmU2hvd21hdGNoXCBce1woXFtcXSlcfTxUYWI+OnNldFwgc20hCittZW51dHJhbnMgJkNvbnRleHRcIGxpbmVzCQkJCVpvYnJheml0XCBrb250ZSZ4dFwga3Vyem9ydQorbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQkJCVZpcnR1YWxuaVwgcCZvemljZVwga3Vyem9ydQorCW1lbnV0cmFucyBOZXZlcgkJCQkJCU5pa2R5CisJbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCQkJVnliZXJcIEJsb2t1CisJbWVudXRyYW5zIEluc2VydFwgbW9kZQkJCQkJSW5zZXJ0XCBtb2QKKwltZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CQkJCUJsb2tcIGFcIEluc2VydAorCW1lbnV0cmFucyBBbHdheXMJCQkJCVZ6ZHlja3kKK21lbnV0cmFucyBUb2dnbGVcIEluc2VydFwgJk1vZGU8VGFiPjpzZXRcIGltIQkJUHJlcG5vdXRcIEluc2VydFwgbW8mZDxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwIQkJUHJlcG5vdXRcIGtvbXBhdGliaWxuaVwgcmV6aW1cIHNcICd2aSc8VGFiPjpzZXRcIGNwIQorbWVudXRyYW5zIFNlYXJjaFwgJlBhdGhcLlwuXC4JCQkJTmFzdGF2aXRcICZjZXN0dVwga1wgcHJvaGxlZGF2YW5pXC5cLlwuCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4JCQkJVGEmZ1wgc291Ym9yeVwuXC5cLgorbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCQkJUHJlcG5vdXRcICZUb29sYmFyCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJCQlQciZlcG5vdXRcIGRvbG5pXCByb2xvdmFjaVwgbGlzdHUKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJCQlQcmVwbm91dFwgJmxldm91XCByb2xvdmFjaVwgbGlzdHUKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCQkJUHJlcG5vdXRcIHAmcmF2b3VcIHJvbG92YWNpXCBsaXN0dQorCSIge3t7MiBFZGl0IC0yCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQkJCU5hc3RhdmVuaVwgc28mdWJvcnUKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQlQcmVwbm91dFwgY2lzbG92YW5pXCByYSZka3U8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCQlQcmVwbm91dFwgJkxpc3RcIG1vZDxUYWI+OnNldFwgbGlzdCEKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQkJUHJlcG5vdXRcIHphbGEmbW92YW5pXCByYWRrdTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyIQlQcmVwbm91dFwgemwmb21cIHZlXCBzbG92ZTxUYWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJUHJlcG5vdXRcICZleHBhbmQtdGFiPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQlQcmVwbm91dFwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQkJUHJlcG5vdXRcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQorbWVudXRyYW5zICZTaGlmdHdpZHRoCQkJCQlOYXN0YXYmaXRcIHNpcmt1XCBvZCZzYXplbmkKK21lbnV0cmFucyBTb2Z0XCAmVGFic3RvcAkJCQlOYXN0YXZpdFwgU29mdFwgJlRhYnN0b3AKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQkJU2lya2FcIHRlJnh0dVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkJJkZvcm1hdFwgc291Ym9ydVwuXC5cLgorCSIge3t7MiBFZGl0IC0zCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCUJhcmV2bmVcIHMmY2hlbWEKK21lbnV0cmFucyAmS2V5bWFwCQkJS2xhdmVzb3ZhXCBtJmFwYQorbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCVZ5YnJhdFwgcGlzJm1vXC5cLlwuCisiIH19fTEKKworIiB7e3sgUHJvZ3JhbW1pbmcgbWVudQorbWVudXRyYW5zICZUb29scwkJCU5hc3Qmcm9qZQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JJlNrb2NpdFwgbmFcIHRhZzxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQlTa29jaXRcICZ6cGV0PFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJJlZ5dHZvcml0XCBzb3Vib3JcIHRhZ3UKKworbWVudXRyYW5zICZGb2xkaW5nCQkJJkZvbGR5CittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkgJkFuby9OZTxUYWI+emkKK21lbnV0cmFucyAmVmlld1wgQ3Vyc29yXCBMaW5lPFRhYj56dgkmWm9icmF6aXRcIHJhZGVrXCBrdXJ6b3J1PFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJCVpvJmJyYXppdFwgcG91emVcIHJhZGVrXCBrdXJ6b3J1XCA8VGFiPnpNengKK21lbnV0cmFucyBDJmxvc2VcIG1vcmVcIGZvbGRzPFRhYj56bQkmVnlqbW91dFwgamVkbnVcIHVyb3ZlblwgZm9sZHU8VGFiPnptCittZW51dHJhbnMgJkNsb3NlXCBhbGxcIGZvbGRzPFRhYj56TQlaYXZyaSZ0XCB2c2VjaG55XCBmb2xkeTxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyCVByaWRhdFwgamVkbiZ1XCB1cm92ZW5cIGZvbGR1PFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgkmT3RldnJpdFwgdnNlY2hueVwgZm9sZHk8VGFiPnpSCittZW51dHJhbnMgRm9sZFwgTWV0JmhvZAkJCU1ldG9kYVwgJnNrbGFkYW5pCisJIm1lbnV0cmFucyBNJmFudWFsCQkJJlJ1Y25lCisJIm1lbnV0cmFucyBJJm5kZW50CQkJJk9kc2F6ZW5pCisJIm1lbnV0cmFucyBFJnhwcmVzc2lvbgkJCSZWeXJhegorCSJtZW51dHJhbnMgUyZ5bnRheAkJCSZTeW50YXgKKwkibWVudXRyYW5zICZEaWZmCQkJJkRpZmYKKwkibWVudXRyYW5zIE1hJnJrZXIJCQlNYSZya2VyCittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCVZ5dHZvcml0XCAmZm9sZDxUYWI+emYKK21lbnV0cmFucyAmRGVsZXRlXCBGb2xkPFRhYj56ZAkJVnltYXphdFwgZm9sJmQ8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJViZ5bWF6YXRcIHZzZWNobnlcIGZvbGR5PFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbCZ1bW5cIHdpZHRoCQlTbG91cGVjXCB6b2ImcmF6ZW5pXCBmb2xkdQorCittZW51dHJhbnMgJlVwZGF0ZQkJCSZPYm5vdml0CittZW51dHJhbnMgJkdldFwgQmxvY2sJCQkmU2VqbW91dFwgQmxvaworbWVudXRyYW5zICZQdXRcIEJsb2NrCQkJJlZsb3ppdFwgQmxvaworbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZQkJJk1ha2U8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsCQlWeXBpc1wgJmNoeWI8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQlWeXAmaXNcIHpwcmF2PFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCURhbHNpXCBjaCZ5YmE8VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAkmUHJlZGNob3ppXCBjaHliYTxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAlTdGEmcnNpXCBzZXpuYW08VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwlOJm92ZWpzaVwgc2V6bmFtPFRhYj46Y25ldworbWVudXRyYW5zIEVycm9yXCAmV2luZG93CQlDaHlib3ZlXCBvJmtubworbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCQlPJmJub3ZpdDxUYWI+OmN3aW4KK21lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQkmT3RldnJpdDxUYWI+OmNvcGVuCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCQkmWmF2cml0PFRhYj46Y2Nsb3NlCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCU4mYXN0YXZpdFwga29tcGlsYXRvcgorCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAlQcmV2ZXN0XCBkb1wgc2VzdG5hY3Rrb3ZlaG9cIGZvcm1hdCZ1PFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtciBQciZldmVzdFwgenBldDxUYWI+OiUheHhkXCAtcgorIiB9fX0KKworIiB7e3sgU3ludGF4IG1lbnUKK21lbnV0cmFucyAmU3ludGF4CQlTeW50YSZ4ZQorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CU5hc3Rhdml0XCBwb3V6ZVwgJ3N5bnRhJngnCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCU5hc3Rhdml0XCB0YWtlXCAnJmZpbGV0eXBlJworbWVudXRyYW5zICZPZmYJCQkmVnlwbm91dAorbWVudXRyYW5zICZNYW51YWwJCSZSdWNuZQorbWVudXRyYW5zIEEmdXRvbWF0aWMJCUEmdXRvbWF0aWNreQorbWVudXRyYW5zIG9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZQkmUHJlcG5vdXRcIChwcm9cIHRlbnRvXCBzb3Vib3IpCittZW51dHJhbnMgbyZmZlwgKHRoaXNcIGZpbGUpCXZ5cCZub3V0XCAocHJvXCB0ZW50b1wgc291Ym9yKQorbWVudXRyYW5zIENvJmxvclwgdGVzdAkJVGVzdFwgJmJhcmV2CittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAkmVGVzdFwgenZ5cmF6bm92YW5pCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCVByZXZlc3RcICZkb1wgSFRNTAorbWVudXRyYW5zICZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51CSZab2JyYXppdFwgdnliZXJcIG1vem5vc3RpCisiIH19fQorCisiIHt7eyBNZW51IEJ1ZmZlcnMKK21lbnV0cmFucyAmQnVmZmVycwkJJkJ1ZmZlcnkKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQkmT2Jub3ZpdFwgbWVudQorbWVudXRyYW5zICZEZWxldGUJCVomcnVzaXQKK21lbnV0cmFucyAmQWx0ZXJuYXRlCQkmWm1lbml0CittZW51dHJhbnMgJk5leHQJCQkmRGFsc2kKK21lbnV0cmFucyAmUHJldmlvdXMJCSZQcmVkY2hvemkKK21lbnV0cmFucyBbTm9cIEZpbGVdCQlbWmFkbnlcIHNvdWJvcl0KKyIgfX19CisKKyIge3t7IE1lbnUgV2luZG93CittZW51dHJhbnMgJldpbmRvdwkJCSZPa25hCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJJk5vdmU8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQkmUm96ZGVsaXQ8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JUm8memRlbGl0XCBuYVwgIzxUYWI+XldeXgorbWVudXRyYW5zIFNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2CVJvemRlbGl0XCAmdmVydGlrYWxuZTxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcglSb3pkZWxpdFwgLVwgRmlsZVwgRSZ4cGxvcmVyCittZW51dHJhbnMgTW92ZVwgJlRvCQkJJlByZXN1bgorbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJCSZOYWhvcnU8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJJkRvbHU8VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCSZWbGV2bzxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCVZwJnJhdm88VGFiPl5XTAorCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCVphdnJpJnQ8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwlaYXZyaXRcICZvc3RhdG5pPFRhYj5eV28KK21lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQkJJkRhbHNpPFRhYj5eV3cKK21lbnV0cmFucyBQJnJldmlvdXM8VGFiPl5XVwkJJlByZWRjaG96aTxUYWI+XldXCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JCSZTdGVqbmFcIHZ5c2thPFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkJTWF4aW1hbG5pXCB2eXMma2E8VGFiPl5XXworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXwkJTSZpbmltYWxuaVwgdnlza2E8VGFiPl5XMV8KK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkJJk1heGltYWxuaVwgc2lya2E8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCU1pbmltYWxuaVwgc2lyayZhPFRhYj5eVzFcfAorbWVudXRyYW5zIFJvdGF0ZVwgJlVwPFRhYj5eV1IJCVJvdG92YXRcIG5hJmhvcnU8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJUm90b3ZhdFwgJmRvbHU8VGFiPl5XcgorCisiIHt7eyBIZWxwIG1lbnUKK21lbnV0cmFucyAmSGVscAkJCSZOYXBvdmVkYQorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgkmUHJlaGxlZDxUYWI+PEYxPgorbWVudXRyYW5zICZVc2VyXCBNYW51YWwJCSZVeml2YXRlbHNreVwgTWFudWFsCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJSG8md3RvCittZW51dHJhbnMgJkdVSQkJCSZHcmFmaWNrZVwgcm96aHJhbmkKK21lbnV0cmFucyAmQ3JlZGl0cwkJJkF1dG9yaQorbWVudXRyYW5zIENvJnB5aW5nCQkmTGljZW5jbmlcIHBvbGl0aWthCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCSZIbGVkYXRcLlwuXC4KK21lbnV0cmFucyBPJnJwaGFucwkJTyZzaXJlbGVcIGRldGkKK21lbnV0cmFucyAmVmVyc2lvbgkJJlZlcnplCittZW51dHJhbnMgJkFib3V0CQkmT1wgYXBsaWthY2kKKyIgfX19CisKKyIge3t7IFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCQkmWnBldAorbWVudXRyYW5zIEN1JnQJCQkmVnlyaXpub3V0CittZW51dHJhbnMgJkNvcHkJCQkmS29waXJvdmF0CittZW51dHJhbnMgJlBhc3RlCQkmVmxveml0CittZW51dHJhbnMgJkRlbGV0ZQkJJlNtYXphdAorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlCVZ5YnJhdFwgYmxva292ZQorbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCVZ5YnJhdFwgJnNsb3ZvCittZW51dHJhbnMgU2VsZWN0XCAmTGluZQkJVnlicmF0XCAmcmFkZWsKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawlWeWJyYXRcICZibG9rCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQlWeWJyYXRcICZ2c2UKKyIgfX19CisKKyIge3t7IFRoZSBHVUkgdG9vbGJhcgoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorICAgIHRtZW51IFRvb2xCYXIuT3BlbgkJT3RldnJpdCBzb3Vib3IKKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCVVsb3ppdCBzb3Vib3IKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJCVVsb3ppdCB2c2VjaG55IHNvdWJvcnkKKyAgICB0bWVudSBUb29sQmFyLlByaW50CQlUaXNrCisgICAgdG1lbnUgVG9vbEJhci5VbmRvCQlacGV0CisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQlacnVzaXQgdnJhY2VuaQorICAgIHRtZW51IFRvb2xCYXIuQ3V0CQlWeXJpem5vdXQKKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCUtvcGlyb3ZhdAorICAgIHRtZW51IFRvb2xCYXIuUGFzdGUJCVZsb3ppdAorICAgIHRtZW51IFRvb2xCYXIuRmluZAkJSGxlZGF0Li4uCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAlIbGVkYXQgZGFsc2kKKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CUhsZWRhdCBwcmVkY2hvemkKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJCU5haHJhZGl0Li4uCisgICAgaWYgMAkiIGRpc2FibGVkOyBUaGVzZSBhcmUgaW4gdGhlIFdpbmRvd3MgbWVudQorICAgICAgdG1lbnUgVG9vbEJhci5OZXcJCU5vdmUgb2tubworICAgICAgdG1lbnUgVG9vbEJhci5XaW5TcGxpdAlSb3pkZWxpdCBva25vCisgICAgICB0bWVudSBUb29sQmFyLldpbk1heAkJTWF4aW1hbGl6b3ZhdCBva25vCisgICAgICB0bWVudSBUb29sQmFyLldpbk1pbgkJTWluaW1hbGl6b3ZhdCBva25vCisgICAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlCVphdnJpdCBva25vCisgICAgZW5kaWYKKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCU5hY2lzdCBzZXplbmkKKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCVVsb3ppdCBzZXplbmkKKyAgICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdAlTcHVzdGl0IHNrcmlwdAorICAgIHRtZW51IFRvb2xCYXIuTWFrZQkJU3B1c3RpdCBtYWtlCisgICAgdG1lbnUgVG9vbEJhci5TaGVsbAkJU3B1c3RpdCBzaGVsbAorICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJU3B1c3RpdCBjdGFncworICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAkJU2tvY2l0IG5hIHRhZyBwb2Qga3Vyem9yZW0KKyAgICB0bWVudSBUb29sQmFyLkhlbHAJCU5hcG92ZWRhCisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscAlIbGVkYXQgbmFwb3ZlZHUgay4uLgorICBlbmRmdW4KK2VuZGlmCisiIH19fQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfZGUubGF0aW4xLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2RlLmxhdGluMS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdmZWU0YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2RlLmxhdGluMS52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglHZXJtYW4gZm9yIGlzby04ODU5LTEgZW5jb2RpbmcKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfZGVfZGUubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfZGUudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfZGUudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NGJkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9kZS51dGYtOC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglHZXJtYW4gZm9yIFVURi04IGVuY29kaW5nCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X2RlX2RlLmxhdGluMS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2RlX2RlLmxhdGluMS52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9kZV9kZS5sYXRpbjEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZWNmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9kZV9kZS5sYXRpbjEudmltCkBAIC0wLDAgKzEsMjc5IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglHZXJtYW4gLyBEZXV0c2NoCisiIE1haW50YWluZXI6CQlKb2hhbm5lcyBaZWxsbmVyIDxqb2hhbm5lc0B6ZWxsbmVyLm9yZz4KKyIgT3JpZ2luYWxseSBCeToJTWFyY2luIERhbGVja2kgPGRhbGVja2lAY3MubmV0LnBsPgorIiBMYXN0IENoYW5nZToJU2F0LCAyMCBBcHIgMjAwMiAxOTowMjo0MiBDRVNUCisiIHZpbTpzZXQgZm9sZG1ldGhvZD1tYXJrZXIgdGFic3RvcD04OgorCisiIFF1aXQgd2hlbiBtZW51IHRyYW5zbGF0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLgoraWYgZXhpc3RzKCJkaWRfbWVudV90cmFucyIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBkaWRfbWVudV90cmFucyA9IDEKKworIiBUaGUgdHJhbnNsYXRpb25zIGJlbG93IGFyZSBpbiBsYXRpbjEsIGJ1dCB0aGV5IHdvcmsgZm9yIGNwMTI1MiBhbmQKKyIgaXNvLTg4NTktMTUgd2l0aG91dCBjb252ZXJzaW9uIGFzIHdlbGwuCitpZiAmZW5jICE9ICJjcDEyNTIiICYmICZlbmMgIT0gImlzby04ODU5LTE1IgorICBzY3JpcHRlbmNvZGluZyBsYXRpbjEKK2VuZGlmCisKKyIge3t7IEZJTEUgLyBEQVRFSQorbWVudXRyYW5zICZGaWxlCQkJCSZEYXRlaQorbWVudXRyYW5zICZPcGVuXC5cLlwuPFRhYj46ZQkJJtZmZm5lblwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCUluXCBnZXRlaWx0ZW1cICZGZW5zdGVyXCDWZmZuZW5cLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQkmTmV1ZVwgRGF0ZWk8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCVMmY2hsaWXfZW48VGFiPjpjbG9zZQorbWVudXRyYW5zICZTYXZlPFRhYj46dwkJCSZTcGVpY2hlcm48VGFiPjp3CittZW51dHJhbnMgU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2CVNwZWljaGVyblwgJkFsc1wuXC5cLjxUYWI+OnNhdgorbWVudXRyYW5zICZQcmludAkJCSZEcnVja2VuCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJU3BlaWNoZXJuXCB1bmRcIEJlJmVuZGVuPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCSZCZWVuZGVuPFRhYj46cWEKKworaWYgaGFzKCJkaWZmIikKKyAgICBtZW51dHJhbnMgU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCUQmaWZmZXJlbnpcIGluXCBnZXRlaWx0ZW1cIEZlbnN0ZXJcIG1pdFwuXC5cLgorICAgIG1lbnV0cmFucyBTcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCSZQYXRjaFwgaW5cIGdldGVpbHRlbVwgRmVuc3RlclwgbWl0XC5cLlwuCitlbmRpZgorIiB9fX0gRklMRSAvIERBVEVJCisKKyIge3t7IEVESVQgLyBFRElUSUVSRU4KK21lbnV0cmFucyAmRWRpdAkJCQkmRWRpdGllcmVuCittZW51dHJhbnMgJlVuZG88VGFiPnUJCQlaJnVy/GNrPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJVm8mcjxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJJldpZWRlcmhvbGVuPFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCSZBdXNzY2huZWlkZW48VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQkmS29waWVyZW48VGFiPiIreQorbWVudXRyYW5zICZQYXN0ZTxUYWI+IitnUAkJRWluJmb8Z2VuPFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkJRGEmdm9yXCBFaW5m/GdlbjxUYWI+W3AKK21lbnV0cmFucyBQdXRcICZBZnRlcjxUYWI+XXAJCURhJm5hY2hcIEVpbmb8Z2VuPFRhYj5dcAorbWVudXRyYW5zICZTZWxlY3RcIGFsbDxUYWI+Z2dWRwkJQWxsZXNcICZNYXJraWVyZW48VGFiPmdnVkcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCSZTdWNoZW5cLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuCVN1Y2hlblwgdW5kXCAmRXJzZXR6ZW5cLlwuXC4KKworIiBbLS0gU0VUVElOR1MgLS1dCisiIFhYWCAmRSB3b3VsZCBjb25mbGljdCB3aXRoICdTdWNoZW5cIHVuZFwgJkVyc2V0emVuJywgc2VlIGFib3ZlCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCQkJRSZpbnN0ZWxsdW5nZW5cLlwuXC4KK21lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkJCQkmR2xvYmFsZVwgRWluc3RlbGx1bmdlbgorCittZW51dHJhbnMgVG9nZ2xlXCBQYXR0ZXJuXCAmSGlnaGxpZ2h0PFRhYj46c2V0XCBobHMhCSZIZXJ2b3JoZWJ1bmdlblwgZWluLVwgdW5kXCBhdXNzY2hhbHRlbjxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEJCUdyb99zY2hyZWlidW5nXCAmaWdub3JpZXJlblwgb2RlclwgYmVudXR6ZW48VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCQlBbnplaWdlXCBkZXNcIHBhc3NlbmRlblwgJlN5bWJvbHNcIGVpbi1cIHVuZFwgYXVzc2NoYWx0ZW48VGFiPjpzZXRcIHNtIQorCittZW51dHJhbnMgJkNvbnRleHRcIGxpbmVzCQkJCSZadXNhbW1lbmhhbmcKKworbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQkJCSZWaXJ0dWVsbGVyXCBFZGl0aWVyLU1vZHVzCittZW51dHJhbnMgTmV2ZXIJCQkJCQlOaWUKK21lbnV0cmFucyBCbG9ja1wgU2VsZWN0aW9uCQkJCUJsb2NrLUF1c3dhaGwKK21lbnV0cmFucyBJbnNlcnRcIG1vZGUJCQkJCUVpbmb8Z2UtTW9kdXMKK21lbnV0cmFucyBCbG9ja1wgYW5kXCBJbnNlcnQJCQkJQmxvY2stXCB1bmRcIEVpbmb8Z2UtTW9kdXMKK21lbnV0cmFucyBBbHdheXMJCQkJCUltbWVyCittZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJCUVpbmb8Z2UtJk1vZHVzXCBlaW4tXCB1bmRcIGF1c3NjaGFsdGVuPFRhYj46c2V0XCBpbSEKK21lbnV0cmFucyBUb2dnbGVcIFZpXCBDJm9tcGF0aWJsZTxUYWI+OnNldFwgY3AhCQlWaS1Lb21wYXRpYmlsaXTkdFwgZWluLVwgdW5kXCBhdXNzY2hhbHRlbjxUYWI+OnNldFwgY3AhCisKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQkJCVN1Y2gtJlBmYWRcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJCQlUYSZnLURhdGVpZW5cLlwuXC4KKworbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCQkJV2Vya3pldWdsZWlzdGVcIGVpbi1cIHVuZFwgYXVzc2NoYWx0ZW4KK21lbnV0cmFucyBUb2dnbGVcICZCb3R0b21cIFNjcm9sbGJhcgkJCVVudGVyZW5cIFJvbGxiYWxrZW5cIGVpbi1cIHVuZFwgYXVzc2NoYWx0ZW4KK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJCQlMaW5rZW5cIFJvbGxiYWxrZW5cIGVpbi1cIHVuZFwgYXVzc2NoYWx0ZW4KK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCQkJUmVjaHRlblwgUm9sbGJhbGtlblwgZWluLVwgdW5kXCBhdXNzY2hhbHRlbgorCisiIEVkaXQvRmlsZSBTZXR0aW5ncworbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJCQkmRGF0ZWktRWluc3RlbGx1bmdlbgorCisiIEJvb2xlYW4gb3B0aW9ucworbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCUFuemVpZ2VcIGRlclwgWmVpbGVuJm51bW1lclwgZWluLVwgdW5kXCBhdXNzY2hhbHRlbjxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCSZMaXN0LU1vZHVzXCBlaW4tXCB1bmRcIGF1c3NjaGFsdGVuPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQkmWmVpbGVudW1icnVjaFwgZWluLVwgdW5kXCBhdXNzY2hhbHRlbjxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyIQlVbWJydWNoXCBhblwgJldvcnRncmVuemVuXCBlaW4tXCB1bmRcIGF1c3NjaGFsdGVuPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCQkmRXJ3ZWl0ZXJ1bmdcIHZvblwgVGFidWxhdG9yZW5cIGVpbi1cIHVuZFwgYXVzc2NoYWx0ZW48VGFiPjpzZXRcIGV0IQorbWVudXRyYW5zIFRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEJCSZBdXRvbWF0aXNjaGVcIEVpbnL8Y2t1bmdcIGVpbi1cIHVuZFwgYXVzc2NoYWx0ZW48VGFiPjpzZXRcIGFpIQorbWVudXRyYW5zIFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCQkmQy1FaW5y/GNrdW5nXCBlaW4tXCB1bmRcIGF1c3NjaGFsdGVuPFRhYj46c2V0XCBjaW4hCisKKyIgb3RoZXIgb3B0aW9ucworbWVudXRyYW5zICZTaGlmdHdpZHRoCQkJCQkmU2NoaWViZXdlaXRlCittZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCQkJJlRhYnVsYXRvcgorbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJCQlUZSZ4dFwgQnJlaXRlXC5cLlwuCittZW51dHJhbnMgJkZpbGVcIEZvcm1hdFwuXC5cLgkJCQkmRGF0ZWlcIEZvcm1hdFwuXC5cLgorbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQkJCUYmYXJic2NoZW1hXC5cLlwuCittZW51dHJhbnMgJktleW1hcAkJCQkJJlRhc3RhdHVyLUJlbGVndW5nCisiIH19fSBFRElUIC8gRURJVElFUkVOCisKKyIge3t7ICBUT09MUyAvIFdFUktaRVVHRQoraWYgaGFzKCJmb2xkaW5nIikKKyAgbWVudXRyYW5zICZGb2xkaW5nCQkJCQlGYSZsdHVuZworICAiIG9wZW4gY2xvc2UgZm9sZHMKKyAgbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppCQkmRWluLVwgdW5kXCBhdXNzY2hhbHRlbjxUYWI+emkKKyAgbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CQkJTW9tZW50YW5lXCAmUG9zaXRpb25cIGFuemVpZ2VuPFRhYj56dgorICBtZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eAkJJkF1c3NjaGxpZd9saWNoXCBtb21lbnRhbmVcIFBvc2l0aW9uXCBhbnplaWdlbjxUYWI+ek16eAorICBtZW51dHJhbnMgQyZsb3NlXCBtb3JlXCBmb2xkczxUYWI+em0JCQlGYWx0dW5nZW5cICZzY2hsaWXfZW48VGFiPnptCisgIG1lbnV0cmFucyAmQ2xvc2VcIGFsbFwgZm9sZHM8VGFiPnpNCQkJQWxsZVwgRmFsdHVuZ2VuXCBzY2hsaWXfZW48VGFiPnpNCisgIG1lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyCQkJRmFsdHVuZ2VuXCAm9mZmbmVuPFRhYj56cgorICBtZW51dHJhbnMgJk9wZW5cIGFsbFwgZm9sZHM8VGFiPnpSCQkJQWxsZVwgRmFsdHVuZ2VuXCD2ZmZuZW48VGFiPnpSCisgICIgZm9sZCBtZXRob2QKKyAgbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQkJRmFsdHVuZ3MtJk1ldGhvZGUKKyAgbWVudXRyYW5zIE0mYW51YWwJCQkJCSZNYW51ZWxsCisgIG1lbnV0cmFucyBJJm5kZW50CQkJCQkmRWlucvxja3VuZ2VuCisgIG1lbnV0cmFucyBFJnhwcmVzc2lvbgkJCQkJJkF1c2RydWNrCisgIG1lbnV0cmFucyBTJnludGF4CQkJCQkmU3ludGF4CisgIG1lbnV0cmFucyAmRGlmZgkJCQkJJkRpZmZlcmVuegorICBtZW51dHJhbnMgTWEmcmtlcgkJCQkJTWEmcmtpZXJ1bmdlbgorICAiIGNyZWF0ZSBhbmQgZGVsZXRlIGZvbGRzCisgICIgVE9ETyBhY2NlbGVyYXRvcnMKKyAgbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQkJRmFsdHVuZ1wgRXJ6ZXVnZW48VGFiPnpmCisgIG1lbnV0cmFucyAmRGVsZXRlXCBGb2xkPFRhYj56ZAkJCUZhbHR1bmdcIEz2c2NoZW48VGFiPnpkCisgIG1lbnV0cmFucyBEZWxldGVcICZBbGxcIEZvbGRzPFRhYj56RAkJCUFsbGVcIEZhbHR1bmdlblwgTPZzY2hlbjxUYWI+ekQKKyAgIiBtb3ZpbmcgYXJvdW5kIGluIGZvbGRzCisgIG1lbnV0cmFucyBGb2xkXCBjb2x1bW5cICZ3aWR0aAkJCSZCcmVpdGVcIGRlclwgRmFsdHVuZ3MtU3BhbHRlCitlbmRpZiAgIiBoYXMgZm9sZGluZworCitpZiBoYXMoImRpZmYiKQorICBtZW51dHJhbnMgJkRpZmYJCQkJCSZEaWZmZXJlbnoKKyAgbWVudXRyYW5zICZVcGRhdGUJCQkJCSZBa3R1YWxpc2llcmVuCisgIG1lbnV0cmFucyAmR2V0XCBCbG9jawkJCQkJQmxvY2tcICZFaW5m/GdlbgorICBtZW51dHJhbnMgJlB1dFwgQmxvY2sJCQkJCUJsb2NrXCAm3GJlcnRyYWdlbgorZW5kaWYKKworbWVudXRyYW5zICZUb29scwkJCQkJJldlcmt6ZXVnZQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JCQkmU3ByaW5nZVwgenVtXCBUYWc8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkJCQlTcHJpbmdlXCAmWnVy/GNrPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJCQlFcnN0ZWxsZVwgJlRhZ3NcIERhdGVpCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQkJCSZFcnN0ZWxsZW48VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsCQkJCSZGZWhsZXJcIEFuemVpZ2VuPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJCQkmSGlud2Vpc2VcIEFuemVpZ2VuPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCQkJWnVtXCAmTuRjaHN0ZW5cIEZlaGxlcjxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCQkJWnVtXCAmVm9yaGVyaWdlblwgRmVobGVyPFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCQkJJsRsdGVyZVwgTGlzdGU8VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwkJCSZOZXVlcmVcIExpc3RlPFRhYj46Y25ldworCittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCQkJRmVoJmxlci1GZW5zdGVyCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCQkJJkNvbXBpbGVyCittZW51dHJhbnMgJlVwZGF0ZTxUYWI+OmN3aW4JCQkJJkFrdHVhbGlzaWVyZW48VGFiPjpjd2luCittZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbgkJCQkm1mZmbmVuPFRhYj46Y29wZW4KK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjY2xvc2UJCQkJJlNjaGxpZd9lbjxUYWI+OmNjbG9zZQorCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAkJCU5hY2hcIEhFJlhcIGtvbnZlcnRpZXJlbjxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJCQladXL8Y2tcIGtvbnZlcnRpZXJlbjxUYWI+OiUheHhkXCAtcgorIiB9fX0gIFRPT0xTIC8gV0VSS1pFVUdFCisKKyIge3t7IFNZTlRBWCAvIFNZTlRBWAorbWVudXRyYW5zICZTeW50YXgJCQkJJlN5bnRheAorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CQkJTnVyXCAnJnN5bnRheCdcIFNldHplbgorbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwkJCUF1Y2hcICcmZmlsZXR5cGUnXCBTZXR6ZW4KK21lbnV0cmFucyAmT2ZmCQkJCQkmQXVzCittZW51dHJhbnMgJk1hbnVhbAkJCQkmTWFudWVsbAorbWVudXRyYW5zIEEmdXRvbWF0aWMJCQkJQSZ1dG9tYXRpc2NoCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCQlBbi9BdXMgKGRpZXNlXCAmRGF0ZWkpCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQkJCVRlc3RcIGRlclwgRmFyYmVuCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAkJCVRlc3RcIGRlclwgVW4mdGVyc3RyZWljaHVuZ2VuCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCQkJS29udmVydGllcmVuXCBuYWNoXCAmSFRNTAorIiB9fX0gU1lOVEFYIC8gU1lOVEFYCisKKyIge3t7IEJVRkZFUlMgLyBQVUZGRVIKK21lbnV0cmFucyAmQnVmZmVycwkJCQkJJlB1ZmZlcgorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51CQkJCSZBa3R1YWxpc2llcmVuCittZW51dHJhbnMgRGVsZXRlCQkJCQlM9nNjaGVuCittZW51dHJhbnMgJkFsdGVybmF0ZQkJCQkJJldlY2hzZWxuCittZW51dHJhbnMgJk5leHQJCQkJCQkmTuRjaHN0ZXIKK21lbnV0cmFucyAmUHJldmlvdXMJCQkJCSZWb3JoZXJpZ2VyCittZW51dHJhbnMgW05vXCBGaWxlXQkJCQkJW0tlaW5lXCBEYXRlaV0KKyIgfX19IEJVRkZFUlMgLyBQVUZGRVIKKworIiB7e3sgV0lORE9XIC8gQU5TSUNIVAorbWVudXRyYW5zICZXaW5kb3cJCQkmQW5zaWNodAorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCSZOZXU8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQlBdWZzJnBhbHRlbjxUYWI+XldzCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJJlZlcnRpa2FsXCBBdWZzcGFsdGVuPFRhYj5eV3MKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCVZlciZ6ZWljaG5pcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JQXVmc3BhJmx0ZW5cIGluXCAjPFRhYj5eV15eCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCSZTY2hsaWXfZW48VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwkmQW5kZXJlXCBTY2hsaWXfZW48VGFiPl5XbworbWVudXRyYW5zIE5lJnh0PFRhYj5eV3cJCQlOJuRjaHN0ZXM8VGFiPl5XdworbWVudXRyYW5zIFAmcmV2aW91czxUYWI+XldXCQlWb3ImaGVyaWdlczxUYWI+XldXCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JCSZHbGVpY2hlXCBI9mhlbjxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCSZNYXhpbWFsZVwgSPZoZTxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQlNJmluaW1hbGVcIEj2aGU8VGFiPl5XMV8KK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkJTWF4aW1hbGVcICZCcmVpdGU8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCU1pbmltYWxlXCBCcmVpJnRlPFRhYj5eVzFcfAorbWVudXRyYW5zIE1vdmVcICZUbwkJCVYmZXJzY2hpZWJlXCBuYWNoCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkJJk9iZW48VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJJlVudGVuPFRhYj5eV0oKK21lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICQkmTGlua3M8VGFiPl5XSAorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCQkmUmVjaHRzPFRhYj5eV0wKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQlSb3RpZXJlXCBuYWNoXCAmb2JlbjxUYWI+XldSCittZW51dHJhbnMgUm90YXRlXCAmRG93bjxUYWI+XldyCQlSb3RpZXJlXCBuYWNoXCAmdW50ZW48VGFiPl5XcgorbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCUF1c3dhaGxcIGRlclwgU2NocmlmdGFydFwuXC5cLgorIiB9fX0gV0lORE9XIC8gQU5TSUNIVAorCisiIHt7eyBIRUxQIC8gSElMRkUKK21lbnV0cmFucyAmSGVscAkJCSZIaWxmZQorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgkm3GJlcmJsaWNrPFRhYj48RjE+CittZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJJkhhbmRidWNoCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJSG93LXRvXCAmSW5kZXgKK21lbnV0cmFucyAmR1VJCQkJJkdyYXBoaXNjaGVcIE9iZXJmbORjaGUKK21lbnV0cmFucyAmQ3JlZGl0cwkJJkF1dG9yZW4KK21lbnV0cmFucyBDbyZweWluZwkJJlVyaGViZXJyZWNodAorbWVudXRyYW5zIE8mcnBoYW5zCQkmV2Fpc2VuCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCSZTdWNoZW5cLlwuXC4JIiBjb25mbGljdHMgd2l0aCBFZGl0LkZpbmQKK21lbnV0cmFucyAmVmVyc2lvbgkJJlZlcnNpb24KK21lbnV0cmFucyAmQWJvdXQJCSZUaXRlbHNlaXRlCisiIH19fSBIRUxQIC8gSElMRkUKKworIiB7e3sgUE9QVVAKK21lbnV0cmFucyAmVW5kbwkJCQkmWnVy/GNrCittZW51dHJhbnMgQ3UmdAkJCQlBdXMmc2NobmVpZGVuCittZW51dHJhbnMgJkNvcHkJCQkJJktvcGllcmVuCittZW51dHJhbnMgJlBhc3RlCQkJJkVpbmb8Z2VuCittZW51dHJhbnMgJkRlbGV0ZQkJCSZM9nNjaGVuCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJCUF1c3dhaGxcIEJsb2NrYXJ0aWcKK21lbnV0cmFucyBTZWxlY3RcICZXb3JkCQkJQXVzd2FobFwgZGVzXCAmV29ydGVzCittZW51dHJhbnMgU2VsZWN0XCAmTGluZQkJCUF1c3dhaGxcIGRlclwgJlplaWxlCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJCUF1c3dhaGxcIGRlc1wgJkJsb2NrcworbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJCSZBbGxlc1wgQXVzd+RobGVuCisiIH19fSBQT1BVUAorCisiIHt7eyBUT09MQkFSCitpZiBoYXMoInRvb2xiYXIiKQorICBpZiBleGlzdHMoIipEb190b29sYmFyX3RtZW51IikKKyAgICBkZWxmdW4gRG9fdG9vbGJhcl90bWVudQorICBlbmRpZgorICBmdW4gRG9fdG9vbGJhcl90bWVudSgpCisgICAgdG1lbnUgVG9vbEJhci5PcGVuCQlEYXRlaSDWZmZuZW4KKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCURhdGVpIFNwZWljaGVybgorICAgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbAlBbGxlIERhdGVpZW4gU3BlaWNoZXJuCisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJRHJ1Y2tlbgorICAgIHRtZW51IFRvb2xCYXIuVW5kbwkJWnVy/GNrCisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQlXaWVkZXJob2xlbgorICAgIHRtZW51IFRvb2xCYXIuQ3V0CQlBdXNzY2huZWlkZW4KKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCUtvcGllcmVuCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJRWluZvxnZW4KKyAgICB0bWVudSBUb29sQmFyLkZpbmQJCVN1Y2hlbi4uLgorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJU3VjaGUgTuRjaHN0ZW4KKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CVN1Y2hlIFZvcmhlcmlnZW4KKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJU3VjaGVuIHVuZCBFcnNldHplbi4uLgorICAgIGlmIDAJIiBkaXNhYmxlZDsgVGhlc2UgYXJlIGluIHRoZSBXaW5kb3dzIG1lbnUKKyAgICAgIHRtZW51IFRvb2xCYXIuTmV3CQlOZXVlIEFuc2ljaHQKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luU3BsaXQJQW5zaWNodCBBdWZzcGFsdGVuCisgICAgICB0bWVudSBUb29sQmFyLldpbk1heAlBbnNpY2h0IE1heGltYWxlIEj2aGVuCisgICAgICB0bWVudSBUb29sQmFyLldpbk1pbglBbnNpY2h0IE1pbmltYWxlIEj2aGVuCisgICAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlCUFuc2ljaHQgU2NobGll32VuCisgICAgZW5kaWYKKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCVNpdHp1bmcgTGFkZW4KKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCVNpdHp1bmcgU3BlaWNoZXJuCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJVmltLVNrcmlwdCBBdXNm/GhyZW4KKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCUVyc3RlbGxlbgorICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCVNoZWxsIFN0YXJ0ZW4KKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCUVyc3RlbGxlIFRhZ3MgRGF0ZWkKKyAgICB0bWVudSBUb29sQmFyLlRhZ0p1bXAJU3ByaW5nZSB6dW0gVGFnCisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQlIaWxmZSEKKyAgICB0bWVudSBUb29sQmFyLkZpbmRIZWxwCUhpbGZlIER1cmNoc3VjaGVuLi4uCisgIGVuZGZ1bgorZW5kaWYKKyIgfX19IFRPT0xCQVIKKworIiB7e3sgRElBTE9HIFRFWFRTCitsZXQgZzptZW51dHJhbnNfbm9fZmlsZSA9ICJbS2VpbmUgRGF0ZWldIgorbGV0IGc6bWVudXRyYW5zX2hlbHBfZGlhbG9nID0gIkdlYmVuIFNpZSBlaW5lbiBCZWZlaGwgb2RlciBlaW4gV29ydCBlaW4sIGb8ciBkYXMgU2llIEhpbGZlIGJlbvZ0aWdlbjpcblxuVmVyd2VuZGVuIFNpZSBpXyBm/HIgRWluZ2FiZSAoJ2lucHV0JykgQmVmZWhsZSAoei5CLjogaV9DVFJMLVgpXG5WZXJ3ZW5kZW4gU2llIGNfIGb8ciBCZWZlaGxzLVplaWxlbiAoJ2NvbW1hbmQtbGluZScpIEJlZmVobGUgKHouQi46IGNfPERlbD4pXG5WZXJ3ZW5kZW4gU2llICcgZvxyIE9wdGlvbnMtTmFtZW4gKHouQi46ICdzaGlmdHdpZHRoJykiCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAiR2ViZW4gU2llIFN1Y2gtUGZhZGUgZvxyIERhdGVpZW4gZWluLlxuVHJlbm5lbiBTaWUgZGllIFZlcnplaWNobmlzLU5hbWVuIGR1cmNoIEtvbW1hdGEuIgorbGV0IGc6bWVudXRyYW5zX3RhZ3NfZGlhbG9nID0gIkdlYmVuIFNpZSBkaWUgTmFtZW4gZGVyICd0YWcnLURhdGVpZW4gZWluLlxuVHJlbm5lbiBTaWUgZGllIE5hbWVuIGR1cmNoIEtvbW1hdGEuIgorbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAiR2ViZW4gU2llIGVpbmUgbmV1ZSBUZXh0LUJyZWl0ZSBlaW4gKG9kZXIgMCwgdW0gZGllIEZvcm1hdGllcnVuZyBhYnp1c2NoYWx0ZW4pIgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIlfkaGxlbiBTaWUgZWluIERhdGVpLUZvcm1hdCBhdXMiCisiIH19fQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfZGVfZGUudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfZGVfZGUudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NGJkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9kZV9kZS51dGYtOC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglHZXJtYW4gZm9yIFVURi04IGVuY29kaW5nCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X2RlX2RlLmxhdGluMS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2VuX2diLmxhdGluMS52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9lbl9nYi5sYXRpbjEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYmNmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9lbl9nYi5sYXRpbjEudmltCkBAIC0wLDAgKzEsMTYgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CVVLIEVuZ2xpc2gKKyIgTWFpbnRhaW5lcjoJCU1pa2UgV2lsbGlhbXMgPG1yd0BlYW5kZW0uY28udWs+CisiIExhc3QgQ2hhbmdlOgkJMjAwMyBGZWIgMTAKKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX21lbnVfdHJhbnMgPSAxCisKKyIgTm90ZTogdGhlcmUgaXMgbm8gInNjcmlwdGVuY29kaW5nIiBjb21tYW5kIGhlcmUsIGFsbCBlbmNvZGluZ3Mgc2hvdWxkIGJlCisiIGFibGUgdG8gaGFuZGxlIGFzY2lpIGNoYXJhY3RlcnMgd2l0aG91dCBjb252ZXJzaW9uLgorCisiIENvbnZlcnQgZnJvbSBBbWVyaWNhbiB0byBVSyBzcGVsbGluZ3MuCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCQlDJm9sb3VyXCBTY2hlbWUKK21lbnV0cmFucyBDbyZsb3JcIHRlc3QJCQkJQ28mbG91clwgdGVzdApkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfZW5fZ2IudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfZW5fZ2IudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMmIzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9lbl9nYi51dGYtOC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglVSyBFbmdsaXNoCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X2VuX2diLmxhdGluMS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2VuZ2xpc2hfdW5pdGVkX2tpbmdkb20uMTI1Mi52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9lbmdsaXNoX3VuaXRlZF9raW5nZG9tLjEyNTIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNzNmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9lbmdsaXNoX3VuaXRlZF9raW5nZG9tLjEyNTIudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJVUsgRW5nbGlzaCBmb3IgQVNDSUkKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfZW5fZ2IubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfZW5nbGlzaF91bml0ZWRfa2luZ2RvbS5hc2NpaS52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9lbmdsaXNoX3VuaXRlZF9raW5nZG9tLmFzY2lpLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTczZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfZW5nbGlzaF91bml0ZWRfa2luZ2RvbS5hc2NpaS52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglVSyBFbmdsaXNoIGZvciBBU0NJSQorCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9lbl9nYi5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9lcy5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfZXMubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGVmZTUxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfZXMubGF0aW4xLnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CVNwYW5pc2gKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfZXNfZXMubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfZXMudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfZXMudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNmY3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9lcy51dGYtOC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglTcGFuaXNoIGZvciBVVEYtOCBlbmNvZGluZworCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9lc19lcy5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9lc19lcy5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfZXNfZXMubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2U2NjdhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfZXNfZXMubGF0aW4xLnZpbQpAQCAtMCwwICsxLDI5NiBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJRXNwYfFvbAorIiBNYWludGFpbmVyOgkJQWxlamFuZHJvIEzzcGV6LVZhbGVuY2lhIDxkcmFkdWxAeWFob28uY29tPgorIiBMYXN0IENoYW5nZToJCTIwMDQgTWF5IDEyCisiCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCisiIFRoZSB0cmFuc2xhdGlvbnMgYmVsb3cgYXJlIGluIGxhdGluMSwgYnV0IHRoZXkgd29yayBmb3IgY3AxMjUyLAorIiBpc28tODg1OS0xNSB3aXRob3V0IGNvbnZlcnNpb24gYXMgd2VsbC4KK2lmICZlbmMgIT0gImNwMTI1MiIgJiYgJmVuYyAhPSAiaXNvLTg4NTktMTUiCisgIHNjcmlwdGVuY29kaW5nIGxhdGluMQorZW5kaWYKKworCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJQXkmdWRhCittZW51dHJhbnMgJk92ZXJ2aWV3PFRhYj48RjE+CVRhYmxhXCBkZVwgJmNvbnRlbmlkb3M8VGFiPjxGMT4KK21lbnV0cmFucyAmVXNlclwgTWFudWFsCQkmTWFudWFsXCBkZWxcIHVzdWFyaW8KK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcwkmRW5sYWNlc1wgYVwgv0PzbW9cIGhhZ29cLlwuXC4/CittZW51dHJhbnMgJkZpbmRcLlwuXC4JCSZCdXNjYXJcIGVuXCBsYVwgYXl1ZGEKK21lbnV0cmFucyAmQ3JlZGl0cwkJJlJlY29ub2NpbWllbnRvcworbWVudXRyYW5zIE8mcnBoYW5zCQlBeXVkZVwgYVwgbG9zXCBuafFvc1wgJmh16XJmYW5vcworbWVudXRyYW5zIENvJnB5aW5nCQkmVOlybWlub3NcIGRlXCBMaWNlbmNpYQorbWVudXRyYW5zIFNwb25zb3IvUmVnaXN0ZXIJQmVuZWZhY3Rvci9SZWftc3RyZXNlCittZW51dHJhbnMgJlZlcnNpb24JCSZWZXJzafNuXCBlXCBcaW5mb3JtYWNp825cIGRlXCBjb25maWd1cmFjafNuCittZW51dHJhbnMgJkFib3V0CQkmQWNlcmNhXCBkZVwgVmltLgorCisiIEZpbGUgbWVudQorbWVudXRyYW5zICZGaWxlCQkJCSZBcmNoaXZvCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQkmQWJyaXJcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAlBJmJyaXJcIGVuXCBvdHJhXCB2ZW50YW5hXC5cLlwuPFRhYj46c3AKK21lbnV0cmFucyAmTmV3PFRhYj46ZW5ldwkJJk51ZXZvPFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQkmQ2VycmFyPFRhYj46Y2xvc2UKK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCQkmR3VhcmRhcjxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJR3VhcmRhclwgJmNvbW9cLlwuXC48VGFiPjpzYXYKK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4JJk1vc3RyYXJcIGRpZmVyZW5jaWFzXCBjb25cLlwuXC4KK21lbnV0cmFucyBTcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCU1vc3RyYXJcICZwYXJjaGVhZG9cIHBvclwuXC5cLgorbWVudXRyYW5zICZQcmludAkJCSZJbXByaW1pcgorbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJCUd1YSZyZGFyXCB5XCBzYWxpcjxUYWI+OndxYQorbWVudXRyYW5zIEUmeGl0PFRhYj46cWEJCQkmU2FsaXI8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCSZFZGl0YXIKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSZEZXNoYWNlcjxUYWI+dQorbWVudXRyYW5zICZSZWRvPFRhYj5eUgkJCSZSZWhhY2VyPFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQlSZXBlJnRpcjxUYWI+XC4KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCQlDb3ImdGFyPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJJkNvcGlhcjxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQkmUGVnYXI8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQlQb25lclwgJmFudGVzPFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkJUG9uZXJcICZkZXNwdelzPFRhYj5dcAoraWYgaGFzKCJ3aW4zMiIpIHx8IGhhcygid2luMTYiKQorICBtZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJUyZ1cHJpbWlyPFRhYj54CitlbmRpZgorbWVudXRyYW5zICZTZWxlY3RcIGFsbDxUYWI+Z2dWRwkJJlNlbGVjY2lvbmFyXCB0b2RvPFRhYj5nZ1ZHCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCQkmQnVzY2FyXC5cLlwuCittZW51dHJhbnMgJkZpbmQ8VGFiPi8JCQkmQnVzY2FyPFRhYj4vCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZVwuXC5cLiAgICAgQnVzY2FyXCB5XCBSJmVlbXBsYXphclwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjolcwlCdXNjYXJcIHlcIFImZWVtcGxhemFyPFRhYj46JXMKK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlCQlCdXNjYXJcIHlcIFImZWVtcGxhemFyCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OnMJQnVzY2FyXCB5XCBSJmVlbXBsYXphcjxUYWI+OnMKK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJJlZlbnRhbmFcIGRlXCBvcGNpb25lcworCisiIEVkaXQvR2xvYmFsIFNldHRpbmdzCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJCU9wY2lvbmVzXCAmZ2xvYmFsZXMKKworbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQlBY3RpdmFyL0Rlc2FjdGl2YXJcICZyZWFsemFkb1wgZGVcIHNpbnRheGlzPFRhYj46c2V0XCBobHMhCittZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljIQkJQWN0aXZhci9EZXNhY3RpdmFyXCAmaWdub3JhclwgbWF5+nNjdWxhc1wgeVwgbWlu+nNjdWxhczxUYWI+OnNldFwgaWMhCittZW51dHJhbnMgVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEJCUFjdGl2YXIvRGVzYWN0aXZhclwgJm1vc3RyYXJcIGNvaW5jaWRlbmNpYXM8VGFiPjpzZXRcIHNtIQorCittZW51dHJhbnMgJkNvbnRleHRcIGxpbmVzCQlM7W5lYXNcIGRlXCAmY29udGV4dG8KKworbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQlFZGljafNuXCAmdmlydHVhbAorbWVudXRyYW5zIE5ldmVyCQkJCU51bmNhCittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgkJU2VsZWNjafNuXCBkZVwgYmxvcXVlCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJTW9kb1wgZGVcIGluc2VyY2nzbgorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJQmxvcXVlXCBlXCBpbnNlcmNp824KK21lbnV0cmFucyBBbHdheXMJCQlTaWVtcHJlCisKK21lbnV0cmFucyBUb2dnbGVcIEluc2VydFwgJk1vZGU8VGFiPjpzZXRcIGltIQlBY3RpdmFyL0Rlc2FjdGl2YXJcIG1vZG9cIGRlXCBpbiZzZXJjafNuPFRhYj46c2V0XCBpbSEKK21lbnV0cmFucyBUb2dnbGVcIFZpXCBDJm9tcGF0aWJsZTxUYWI+OnNldFwgY3AhCUFjdGl2YXIvRGVzYWN0aXZhclwgY29tcGF0aWJsaWRhZFwgY29uXCBWaTxUYWI+OnNldFwgY3AhCisKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQlSdXRhXCBkZVwgJmL6c3F1ZWRhXC5cLlwuCisKK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJRmljaGVyb3NcIGRlXCCrdGEmZ3O7XC5cLlwuCisKKyIgR1VJIG9wdGlvbnMKK21lbnV0cmFucyBUb2dnbGVcICZUb29sYmFyCQlPY3VsdGFyL01vc3RyYXJcIGJhcnJhXCBkZVwgJmhlcnJhbWllbnRhcworbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCU9jdWx0YXIvTW9zdHJhclwgYmFycmFcIGRlXCBkZXNwbGF6YW1pZW50b1wgJmluZmVyaW9yCittZW51dHJhbnMgVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyCU9jdWx0YXIvTW9zdHJhclwgYmFycmFcIGRlXCBkZXNwbGF6YW1pZW50b1wgaSZ6cXVpZXJkYQorbWVudXRyYW5zIFRvZ2dsZVwgJlJpZ2h0XCBTY3JvbGxiYXIJT2N1bHRhci9Nb3N0cmFyXCBiYXJyYVwgZGVcIGRlc3BsYXphbWllbnRvXCAmZGVyZWNoYQorCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAiSW50cm9kdXpjYSBsYSBydXRhIGRlIGL6c3F1ZWRhIHBhcmEgbG9zIGZpY2hlcm9zLlxuU2VwYXJlIGxvcyBub21icmVzIGRlIGxvcyBkaXJlY3RvcmlvcyBjb24gdW5hIGNvbWEuIgorbGV0IGc6bWVudXRyYW5zX3RhZ3NfZGlhbG9nID0gIkludHJvZHV6Y2EgbG9zIG5vbWJyZXMgZGUgbG9zIGZpY2hlcm8gZGUgdGFncy5cblNlcGFyZSBsb3Mgbm9tYnJlcyBjb24gdW5hIGNvbWEuIgorCisiIEVkaXQvRmlsZSBTZXR0aW5ncworbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJT3BjaW9uZXNcIGRlbFwgJmZpY2hlcm8KKworIiBCb29sZWFuIG9wdGlvbnMKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQlBY3RpdmFyL0Rlc2FjdGl2YXJcICZudW1lcmFjafNuXCBkZVwgbO1uZWFzPFRhYj46c2V0XCBudSEKK21lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQkJQWN0aXZhci9EZXNhY3RpdmFyXCBtb2RvXCCrJmxpc3S7PFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQlBY3RpdmFyL0Rlc2FjdGl2YXJcICZxdWllYnJlXCBkZVwgbO1uZWFzPFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCUFjdGl2YXIvRGVzYWN0aXZhclwgcXVpZWJyZVwgZW50cmVcICZwYWxhYnJhczxUYWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJQWN0aXZhci9EZXNhY3RpdmFyXCAmZXhwYW5zafNuXCBkZVwgbWFyY2FzXCBkZVwgXHRhYnVsYWRvPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQlBY3RpdmFyL0Rlc2FjdGl2YXJcICZhdXRvLXNhbmdyYWRvPFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQkJQWN0aXZhci9EZXNhY3RpdmFyXCBzYW5ncmFkb1wgJkM8VGFiPjpzZXRcIGNpbiEKKworIiBvdGhlciBvcHRpb25zCittZW51dHJhbnMgJlNoaWZ0d2lkdGgJCQlBbmNodXJhXCBkZWxcICZzYW5ncmFkbworCittZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCSZUYWJ1bGFkb1wgq2JsYW5kb7sKKworbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJQW5jaHVyYVwgZGVsXCB0ZSZ4dG9cLlwuXC4KK2xldCBnOm1lbnV0cmFuc190ZXh0d2lkdGhfZGlhbG9nID0gIkludHJvZHV6Y2EgZWwgbnVldm8gYW5jaG8gZGVsIHRleHRvICgwIHBhcmEgZGVzYWN0aXZhciBlbCBxdWllYnJlIGRlIGztbmVhKTogIgorCittZW51dHJhbnMgJkZpbGVcIEZvcm1hdFwuXC5cLgkJJkZvcm1hdG9cIGRlbFwgZmljaGVyb1wuXC5cLgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIlNlbGVjY2lvbmUgZWwgZm9ybWF0byBwYXJhIGVzY3JpYmlyIGVsIGZpY2hlcm8iCisKK21lbnV0cmFucyBDJm9sb3JcIFNjaGVtZQkJRXNxdWVtYVwgZGVcIGMmb2xvcmVzCittZW51dHJhbnMgYmx1ZQkJYXp1bAorbWVudXRyYW5zIGRhcmtibHVlCWF6dWxcIG9zY3VybworbWVudXRyYW5zIGRlZmF1bHQJb3JpZ2luYWwKK21lbnV0cmFucyBkZXNlcnQJZGVzaWVydG8KK21lbnV0cmFucyBldmVuaW5nCXZlc3BlcnRpbm8KK21lbnV0cmFucyBtb3JuaW5nCW1hdHV0aW5vCittZW51dHJhbnMgcGVhY2hwdWZmCW1lbG9jb3TzbgorbWVudXRyYW5zIHNoaW5lCQlicmlsbGFudGUKKworbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCVNlbGVjY2lvbmFyXCBmdWUmbnRlXC5cLlwuCisKK21lbnV0cmFucyAmS2V5bWFwCUFzb2NpYWNp825cIGRlXCB0ZWNsYWRvcworbWVudXRyYW5zIE5vbmUJCU5pbmd1bmEKK21lbnV0cmFucyBhY2NlbnRzCWFjZW50b3MKK21lbnV0cmFucyBhcmFiaWMJ4XJhYmUKK21lbnV0cmFucyBjemVjaAkJY2hlY28KK21lbnV0cmFucyBncmVlawkJZ3JpZWdvCittZW51dHJhbnMgaGVicmV3CWhlYnJlbworbWVudXRyYW5zIGhlYnJld3AJaGVicmVvXCBmb27pdGljbworbWVudXRyYW5zIGxpdGh1YW5pYW4tYmFsdGljCWxpdHVhbm8tYuFsdGljbworbWVudXRyYW5zIHJ1c3NpYW4tamN1a2VuCXJ1c28tq2pjdWtlbrsKK21lbnV0cmFucyBydXNzaWFuLWpjdWtlbndpbglydXNvLatqY3VrZW67XCBXaW5kb3dzCittZW51dHJhbnMgcnVzc2lhbi15YXdlcnR5CXJ1c28tq3lhd2VydHm7CittZW51dHJhbnMgc2VyYmlhbi1sYXRpbgkJc2VyYmlvLWxhdGlubworbWVudXRyYW5zIHNlcmJpYW4Jc2VyYmlvCittZW51dHJhbnMgc2xvdmFrCWVzbG92YWNvCisKKworIiBQcm9ncmFtbWluZyBtZW51CittZW51dHJhbnMgJlRvb2xzCQkJJkhlcnJhbWllbnRhcworbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JJlNhbHRhclwgYVwgZXN0ZVwgq3RhZ7s8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkJU2FsdGFyXCAmYXRy4XM8VGFiPl5UCittZW51dHJhbnMgQnVpbGRcICZUYWdzXCBGaWxlCQlDcmVhclwgZmljaGVyb1wgZGVcIKsmdGFnc7tcCittZW51dHJhbnMgJkRpZmYJCQkJTW9kb1wgZGVcICZkaWZlcmVuY2lhcworbWVudXRyYW5zICZGb2xkaW5nCQkJJlBsZWdhZG8KK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCUVqZWN1dGFyXCCrJk1ha2W7PFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJJkxpc3RhXCBkZVwgZXJyb3JlczxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCUwmaXN0YVwgZGVcIG1lbnNhamVzPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCSZFcnJvclwgc2lndWllbnRlPFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AJRXJyb3JcIHAmcmV2aW88VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJTGlzdGFcIGRlXCAmdmllam9zXCBhXCBudWV2b3M8VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwlMaXN0YVwgZGVcICZudWV2b3NcIGFcIHZpZWpvczxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdwkJVmVuJnRhbmFcIGRlXCBlcnJvcmVzCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCUVzY28mZ2VyXCBlbFwgY29tcGlsYWRvclwgYVwgdXNhcgorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJQ29udmVydGlyXCBhXCBmb3JtYXRvXCAmaGV4YWRlY2ltYWw8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yCSZDb252ZXJ0aXJcIGFsXCBmb3JtYXRvXCBvcmlnaW5hbDxUYWI+OiUheHhkXCAtcgorCisiIFRvb2xzLkZvbGQgTWVudQorbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppCQkmQWN0aXZhci9EZXNhY3RpdmFyXCBwbGllZ3VlczxUYWI+emkKK21lbnV0cmFucyAmVmlld1wgQ3Vyc29yXCBMaW5lPFRhYj56dgkJJlZlclwgbO1uZWFcIGRlbFwgY3Vyc29yPFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJVmUmclwgc/Nsb1wgbGFcIGztbmVhXCBkZWxcIGN1cnNvcjxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCQlDJmVycmFyXCBt4XNcIHBsaWVndWVzPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JCSZDZXJyYXJcIHRvZG9zXCBsb3NcIHBsaWVndWVzPFRhYj56TQorbWVudXRyYW5zIE8mcGVuXCBtb3JlXCBmb2xkczxUYWI+enIJCUFicmlyXCAmbeFzXCBwbGllZ3VlczxUYWI+enIKK21lbnV0cmFucyAmT3BlblwgYWxsXCBmb2xkczxUYWI+elIJCSZBYnJpclwgdG9kb3NcIGxvc1wgcGxpZWd1ZXM8VGFiPnpSCisiIGZvbGQgbWV0aG9kCittZW51dHJhbnMgRm9sZFwgTWV0JmhvZAkJCQkmTel0b2RvXCBkZVwgcGxlZ2FkbworIiBjcmVhdGUgYW5kIGRlbGV0ZSBmb2xkcworbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQkJQ3JlYXJcICZwbGllZ3VlPFRhYj56ZgorbWVudXRyYW5zICZEZWxldGVcIEZvbGQ8VGFiPnpkCQkJJlN1cHJpbWlyXCBwbGllZ3VlPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECQlTdXByaW1pclwgJnRvZG9zXCBsb3NcIHBsaWd1ZXM8VGFiPnpECisiIG1vdmluZyBhcm91bmQgaW4gZm9sZHMKK21lbnV0cmFucyBGb2xkXCBjb2wmdW1uXCB3aWR0aAkJCUEmbmNodXJhXCBkZVwgY29sdW1uYVwgZGVsXCBwbGllZ3VlCisKKyIgVG9vbHMuRGlmZiBNZW51CittZW51dHJhbnMgJlVwZGF0ZQkmQWN0dWFsaXphcgorbWVudXRyYW5zICZHZXRcIEJsb2NrCSZPYnRlbmVyXCBibG9xdWUKK21lbnV0cmFucyAmUHV0XCBCbG9jawkmUG9uZXJcIGJsb3F1ZQorCisiVG9vbHMuRXJyb3IgTWVudQorbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCSZBY3R1YWxpemFyCittZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbglBJmJyaXIKK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjY2xvc2UJJkNlcnJhcgorCisiIE5hbWVzIGZvciBidWZmZXIgbWVudS4KK21lbnV0cmFucyAmQnVmZmVycwkJJkJ1ZmZlcnMKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQkmUmVmcmVzY2FyXCBtZW76CittZW51dHJhbnMgJkRlbGV0ZQkJJlN1cHJpbWlyCittZW51dHJhbnMgJkFsdGVybmF0ZQkJJkFsdGVybmFyCittZW51dHJhbnMgJk5leHQJCQlTaSZndWllbnRlCittZW51dHJhbnMgJlByZXZpb3VzCQkmUHJldmlvCitsZXQgZzptZW51dHJhbnNfbm9fZmlsZSA9ICJbU2luIGZpY2hlcm9dIgorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJCSZWZW50YW5hCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJVmVudGFuYVwgJm51ZXZhPFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJJkRpdmlkaXJcIGxhXCB2ZW50YW5hPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCUQmaXZpZGlyXCBlblwgZWxcIG1hcmNhZG9yXCAoIyk8VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdiAgICBEaXZpZGlyXCAmdmVydGljYWxtZW50ZTxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcgkmQWJyaXJcIGVsXCCrRXhwbG9yYWRvclwgZGVcIGZpY2hlcm9zuworbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCQkmQ2VycmFyXCBlc3RhXCB2ZW50YW5hPFRhYj5eV2MKK21lbnV0cmFucyBDbG9zZVwgJk90aGVyKHMpPFRhYj5eV28JQ2VycmFyXCAmb3RyYShzKVwgdmVudGFuYShzKTxUYWI+XldvCittZW51dHJhbnMgTW92ZVwgJlRvCQkJTW92JmVyXCBhCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkJJkFycmliYTxUYWI+XldLCittZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCQlBJmJham88VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCUxhZG9cICZpenF1aWVyZG88VGFiPl5XSAorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCQlMYWRvXCAmZGVyZWNobzxUYWI+XldMCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJJlJvdGFyXCBoYWNpYVwgYXJyaWJhPFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IJCVJvdGFyXCBoYWNpYVwgYSZiYWpvPFRhYj5eV3IKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkJTWlzbW9cICZ0YW1h8W88VGFiPl5XPQorbWVudXRyYW5zICZNYXhcIEhlaWdodDxUYWI+XldfCQlBbHR1cmFcICZt4XhpbWE8VGFiPl5XXworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXwkJQWx0dXJhXCBt7SZuaW1hPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCUFuY2h1cmFcIG3hJnhpbWE8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCUFuYyZodXJhXCBt7W5pbWE8VGFiPl5XMVx8CisKKyIgVGhlIHBvcHVwIG1lbnUKK21lbnV0cmFucyAmVW5kbwkJCSZEZXNoYWNlcgorbWVudXRyYW5zIEN1JnQJCQlDb3ImdGFyCittZW51dHJhbnMgJkNvcHkJCQkmQ29waWFyCittZW51dHJhbnMgJlBhc3RlCQkmUGVnYXIKK21lbnV0cmFucyAmRGVsZXRlCQkmQm9ycmFyCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJU2VsZWNjaW9uYXJcIHBvclwgYmxvcXVlCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJU2VsZWNjaW9uYXJcICZwYWxhYnJhCittZW51dHJhbnMgU2VsZWN0XCAmTGluZQkJU2VsZWNjaW9uYXJcIHVuYVwgJmztbmVhCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJU2VsZWNjaW9uYXJcIHVuXCAmYmxvcXVlCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQlTZWxlY2Npb25hclwgJnRvZG8KKworIiBUaGUgR1VJIHRvb2xiYXIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCUFicmlyIGZpY2hlcm8KKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCUd1YXJkYXIgZmljaGVybworICAgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbAlHdWFyZGFyIHRvZG9zIGxvcyBmaWNoZXJvcworICAgIHRtZW51IFRvb2xCYXIuUHJpbnQJCUltcHJpbWlyCisgICAgdG1lbnUgVG9vbEJhci5VbmRvCQlEZXNoYWNlcgorICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJUmVoYWNlcgorICAgIHRtZW51IFRvb2xCYXIuQ3V0CQlDb3J0YXIKKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCUNvcGlhcgorICAgIHRtZW51IFRvb2xCYXIuUGFzdGUJCVBlZ2FyCisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQlCdXNjYXIuLi4KKyAgICB0bWVudSBUb29sQmFyLkZpbmROZXh0CUJ1c2NhciBzaWd1aWVudGUKKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CUJ1c2NhciBwcmVjZWRlbnRlCisgICAgdG1lbnUgVG9vbEJhci5SZXBsYWNlCUJ1c2NhciB5IHJlZW1wbGF6YXIKKyAgICBpZiAwCSIgZGlzYWJsZWQ7IFRoZXNlIGFyZSBpbiB0aGUgV2luZG93cyBtZW51CisgICAgICB0bWVudSBUb29sQmFyLk5ldwkJVmVudGFuYSBudWV2YQorICAgICAgdG1lbnUgVG9vbEJhci5XaW5TcGxpdAlEaXZpZGlyIHZlbnRhbmEKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWF4CVZlbnRhbmEgbeF4aW1hCisgICAgICB0bWVudSBUb29sQmFyLldpbk1pbglWZW50YW5hIG3tbmltYQorICAgICAgdG1lbnUgVG9vbEJhci5XaW5WU3BsaXQJRGl2aWRpciB2ZXJ0aWNhbG1lbnRlCisgICAgICB0bWVudSBUb29sQmFyLldpbk1heFdpZHRoCUFuY2h1cmEgbeF4aW1hCisgICAgICB0bWVudSBUb29sQmFyLldpbk1pbldpZHRoCUFuY2h1cmEgbe1uaW1hCisgICAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlCUNlcnJhciB2ZW50YW5hCisgICAgZW5kaWYKKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCUNhcmdhciBzZXNp824KKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCUd1YXJkYXIgc2VzafNuCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJRWplY3V0YXIgdW4gq3NjcmlwdLsKKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCUVqZWN1dGFyIKtNYWtluworICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCUFicmlyIHVuYSCrU2hlbGy7CisgICAgdG1lbnUgVG9vbEJhci5SdW5DdGFncwlHZW5lcmFyIHVuIGZpY2hlcm8gZGUgq3RhZ3O7CisgICAgdG1lbnUgVG9vbEJhci5UYWdKdW1wCVNhbHRhciBhIHVuIKt0YWe7CisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQlBeXVkYQorICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJQnVzY2FyIGVuIGxhIGF5dWRhLi4uCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXgJCQkmU2ludGF4aXMKK21lbnV0cmFucyAmU2hvd1wgZmlsZXR5cGVzXCBpblwgbWVudQkmTW9zdHJhclwgbGlzdGFzXCBkZVwgq3RpcG9cIGRlXCBmaWNoZXJvuworbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CQlBY3RpdmFyXCBz82xvXCCrc2ludGF4aXO7CittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCQlBY3RpdmFyXCB0YW1iaeluXCCrdGlwb1wgZGVcIGZpY2hlcm+7CittZW51dHJhbnMgJk9mZgkJCQkmRGVzYWN0aXZhclwgq3NpbnRheGlzuworbWVudXRyYW5zICZNYW51YWwJCQmrc2ludGF4aXO7XCAmbWFudWFsCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJCatzaW50YXhpc7tcIGEmdXRvbeF0aWNhCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCUFjdGl2YXIvRGVzYWN0aXZhclwgZW5cIGVzJnRlXCBmaWNoZXJvCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQkJJlBydWViYVwgZGVcIGNvbG9yZXMKK21lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0CQlQcnVlYmFcIGRlXCAmcmVhbHphZG8KK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJCSZDb252ZXJ0aXJcIGVuXCBIVE1MCisKKyIgRmluZCBIZWxwIGRpYWxvZyB0ZXh0CitsZXQgZzptZW51dHJhbnNfaGVscF9kaWFsb2cgPSAiSW50cm9kdXpjYSB1biBub21icmUgZGUgY29tYW5kbyBvIHBhbGFicmEgcGFyYSBvYnRlbmVyIGF5dWRhO1xuXG5BbnRlcG9uZ2EgaV8gcGFyYSBjb21hbmRvcyBkZSBlbnRyYWRhIChlLmcuOiBpX0NUUkwtWClcbkFudGVwb25nYSBjXyBwYXJhIGNvbWFuZG9zIGRlIGxhIGztbmVhIGRlIGNvbWFuZG9zIChlLmcuOiBjXzxEZWw+KVxuQW50ZXBvbmdhIGAgcGFyYSB1biBub21icmUgZGUgb3BjafNuIChlLmcuOiBgc2hpZnR3aWR0aGApIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfZXNfZXMudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfZXNfZXMudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNmY3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9lc19lcy51dGYtOC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglTcGFuaXNoIGZvciBVVEYtOCBlbmNvZGluZworCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9lc19lcy5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9mci5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfZnIubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQ2ODBiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfZnIubGF0aW4xLnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUZyZW5jaCBmb3IgSVNPIDg4NTktMSBlbmNvZGluZworCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9mcl9mci5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9mci51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9mci51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0MTkwNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2ZyLnV0Zi04LnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUZyZW5jaCBmb3IgVVRGLTggZW5jb2RpbmcKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfZnJfZnIubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfZnJfZnIubGF0aW4xLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2ZyX2ZyLmxhdGluMS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjYTcxYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2ZyX2ZyLmxhdGluMS52aW0KQEAgLTAsMCArMSw0NDQgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUZyYW5jYWlzCisiIE1haW50YWluZXI6CQlBZHJpZW4gQmVhdSA8dmVyc2lvbi5mcmFuY2Fpc2VAZnJlZS5mcj4KKyIgRmlyc3QgVmVyc2lvbjoJRnJhbmNvaXMgVGh1bnVzIDx0aHVudXNAc3lzdHJhbi5mcj4KKyIgTGFzdCBDaGFuZ2U6CQkyMDAzIE1heSAyOQorCisiIFF1aXQgd2hlbiBtZW51IHRyYW5zbGF0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLgoraWYgZXhpc3RzKCJkaWRfbWVudV90cmFucyIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBkaWRfbWVudV90cmFucyA9IDEKKworIiBUaGUgdHJhbnNsYXRpb25zIGJlbG93IGFyZSBpbiBsYXRpbjEsIGJ1dCB0aGV5IHdvcmsgZm9yIGNwMTI1MiBhbmQKKyIgaXNvLTg4NTktMTUgd2l0aG91dCBjb252ZXJzaW9uIGFzIHdlbGwuCitpZiAmZW5jICE9ICJjcDEyNTIiICYmICZlbmMgIT0gImlzby04ODU5LTE1IiAmJiAmZW5jICE9ICJpc28tODg1OS0xIgorICBzY3JpcHRlbmNvZGluZyBsYXRpbjEKK2VuZGlmCisKK21lbnV0cmFucyAmSGVscAkJCQkmQWlkZQorCittZW51dHJhbnMgJk92ZXJ2aWV3PFRhYj48RjE+CQkJJlNvbW1haXJlPFRhYj48RjE+CittZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJCQkmTWFudWVsXCB1dGlsaXNhdGV1cgorbWVudXRyYW5zICZIb3ctdG9cIGxpbmtzCQkJJlTiY2hlc1wgY291cmFudGVzCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCQkJUmVjJmhlcmNoZXJcLlwuXC4KKyIgLXNlcDEtCittZW51dHJhbnMgJkNyZWRpdHMJCQkJJlJlbWVyY2llbWVudHMKK21lbnV0cmFucyBDbyZweWluZwkJCQkmTGljZW5zZQorbWVudXRyYW5zIE8mcnBoYW5zCQkJCSZPcnBoZWxpbnMKKyIgLXNlcDItCittZW51dHJhbnMgJlZlcnNpb24JCQkJJlZlcnNpb24KK21lbnV0cmFucyAmQWJvdXQJCQkJwFwgJnByb3Bvc1wgZGVcIFZpbQorCitsZXQgZzptZW51dHJhbnNfaGVscF9kaWFsb2cgPSAiRW50cmV6IHVuZSBjb21tYW5kZSBvdSB1biBtb3Qg4CByZWNoZXJjaGVyIGRhbnMgbCdhaWRlLlxuXG5Bam91dGV6IGlfIHBvdXIgbGVzIGNvbW1hbmRlcyBkdSBtb2RlIEluc2VydGlvbiAoZXg6IGlfQ1RSTC1YKVxuQWpvdXRleiBjXyBwb3VyIGwn6WRpdGlvbiBkZSBsYSBsaWduZSBkZSBjb21tYW5kZSAoZXg6IGNfPERlbD4pXG5FbnRvdXJleiBsZXMgb3B0aW9ucyBhdmVjIGRlcyBhcG9zdHJvcGhlcyAoZXg6ICdzaGlmdHdpZHRoJykiCisKKworbWVudXRyYW5zICZGaWxlCQkJCSZGaWNoaWVyCisKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCQkmT3V2cmlyXC5cLlwuPFRhYj46ZQorbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AJCU91dnJpclwg4FwgcCZhcnRcLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQkJJk5vdXZlYXU8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCQkmRmVybWVyPFRhYj46Y2xvc2UKKyIgLVNFUDEtCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJCSZFbnJlZ2lzdHJlcjxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJCUVucmVnaXN0cmVyXCAmc291c1wuXC5cLjxUYWI+OnNhdgorIiAtU0VQMi0KK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4JCSZEaWZmZXJlbmNlXCBhdmVjXC5cLlwuCisibWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JCSZQYXRjaGVyXCBhdmVjXC5cLlwuCittZW51dHJhbnMgU3BsaXRcIFBhdGNoZWRcICZCeVwuXC5cLgkJJlRlc3RlclwgdW5cIHBhdGNoXC5cLlwuCisiIC1TRVAzLQorbWVudXRyYW5zICZQcmludAkJCQkmSW1wcmltZXIKKyIgLVNFUDQtCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJCUVuJnJlZ2lzdHJlclwgZXRcIHF1aXR0ZXI8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJCSZRdWl0dGVyPFRhYj46cWEKKworCittZW51dHJhbnMgJkVkaXQJCQkJJkVkaXRpb24KKworbWVudXRyYW5zICZVbmRvPFRhYj51CQkJCSZBbm51bGVyPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJCVJlJmZhaXJlPFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQkJUibpcOl0ZXI8VGFiPlwuCisiIC1TRVAxLQorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCQlDbyZ1cGVyPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJCUNvcCZpZXI8VGFiPiIreQorbWVudXRyYW5zICZQYXN0ZTxUYWI+IitnUAkJCUMmb2xsZXI8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQkJUGxhY2VyXCBhJnZhbnQ8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQkJUGxhY2VyXCBhcHIm6HM8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCQlFZmZhJmNlcjxUYWI+eAorbWVudXRyYW5zICZTZWxlY3RcIGFsbDxUYWI+Z2dWRwkJCSZT6WxlY3Rpb25uZXJcIHRvdXQ8VGFiPmdnVkcKKyIgLVNFUDItCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCQkJUmVjJmhlcmNoZXJcLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuCQlSZSZtcGxhY2VyXC5cLlwuCittZW51dHJhbnMgJkZpbmQ8VGFiPi8JCQkJUmVjJmhlcmNoZXI8VGFiPi8KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlPFRhYj46JXMJCVJlJm1wbGFjZXI8VGFiPjolcworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjpzCQlSZSZtcGxhY2VyPFRhYj46cworIiAtU0VQMy0KK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJCUZlJm7qdHJlXCBkZXNcIHLpZ2xhZ2VzCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJCQlS6WdsYWdlc1wgZ2xvYmF1JngKKworbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQkmU3VybGlnbmVyXCByZWNoZXJjaGVcIG9uL29mZjxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEJCSZJZ25vcmVyXCBjYXNzZVwgb24vb2ZmPFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQkJVulyaWZpZXJcIHBhcmVudGgm6HNlc1wgb24vb2ZmPFRhYj46c2V0XCBzbSEKKworbWVudXRyYW5zICZDb250ZXh0XCBsaW5lcwkJCQlMaWduZXNcICZhdXRvdXJcIGR1XCBjdXJzZXVyCisKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJCQnJZGl0aW9uXCAmdmlydHVlbGxlCittZW51dHJhbnMgTmV2ZXIJCQkJCQkJJkphbWFpcworbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCQkJCSZT6WxlY3Rpb25cIGVuXCBibG9jCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJCQkJJk1vZGVcIGluc2VydGlvbgorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJCQkJJkJsb2NcIGV0XCBpbnNlcnRpb24KK21lbnV0cmFucyBBbHdheXMJCQkJCQkmVG91am91cnMKKworbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCQlJJm5zZXJ0aW9uXCBwZXJtYW5lbnRlXCBvbi9vZmY8VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEJCSZDb21wYXRpYmlsaXTpXCBWaVwgb24vb2ZmPFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQkJCUNoZW1pblwgZGVcIHJlYyZoZXJjaGVcIGRlc1wgZmljaGllcnNcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJCQlGaWNoaWVyc1wgZCcm6XRpcXVldHRlc1wuXC5cLgorIiAtU0VQMS0KK21lbnV0cmFucyBUb2dnbGVcICZUb29sYmFyCQkJCUJhcnJlXCBkJyZvdXRpbHNcIG9uL29mZgorbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCQkJQXNjZW5zZXVyXCAmaG9yaXpvbnRhbFwgb24vb2ZmCittZW51dHJhbnMgVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyCQkJQXNjZW5zZXVyXCDgXCBnYSZ1Y2hlXCBvbi9vZmYKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCQkJQXNjZW5zZXVyXCDgXCAmZHJvaXRlXCBvbi9vZmYKKworbGV0IGc6bWVudXRyYW5zX3BhdGhfZGlhbG9nID0gIkVudHJleiBsZSBjaGVtaW4gZGUgcmVjaGVyY2hlIGRlcyBmaWNoaWVycy5cblPpcGFyZXogbGVzIHLpcGVydG9pcmVzIHBhciBkZXMgdmlyZ3VsZXMuIgorbGV0IGc6bWVudXRyYW5zX3RhZ3NfZGlhbG9nID0gIkVudHJleiBsZXMgbm9tcyBkZXMgZmljaGllcnMgZCfpdGlxdWV0dGVzLlxuU+lwYXJleiBsZXMgbm9tcyBwYXIgZGVzIHZpcmd1bGVzLiIKKworbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJCVLpZ2xhZ2VzXCBmaWNoaWUmcgorCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmTnVtYmVyaW5nPFRhYj46c2V0XCBudSEJJk51belyb3RhdGlvblwgb24vb2ZmPFRhYj46c2V0XCBudSEKK21lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQkJTW9kZVwgJmxpc3RpbmdcIG9uL29mZjxUYWI+OnNldFwgbGlzdCEKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQkJJlJldG91clwg4FwgbGFcIGxpZ25lXCBvbi9vZmY8VGFiPjpzZXRcIHdyYXAhCittZW51dHJhbnMgVG9nZ2xlXCBXJnJhcFwgYXRcIHdvcmQ8VGFiPjpzZXRcIGxiciEJUmV0b3VyXCBzdXJcICZtb3RcIG9uL29mZjxUYWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJJlRhYlwuXCBlblwgZXNwYWNlc1wgb24vb2ZmPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQlJbmRlbnRhdGlvblwgJmF1dG9cLlwgb24vb2ZmPFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQkJSW5kZW50XC5cIGxhbmdhZ2VcICZDXCBvbi9vZmY8VGFiPjpzZXRcIGNpbiEKKyIgLVNFUDItCittZW51dHJhbnMgJlNoaWZ0d2lkdGgJCQkJCUxhcmdldXJcIGRlc1wgaW4mZGVudGF0aW9ucworbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQkJCSZQc2V1ZG8tdGFidWxhdGlvbnMKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQkJTGFyZ2V1clwgZHVcIHRlJnh0ZVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkJRm9ybWF0XCBkdVwgJmZpY2hpZXJcLlwuXC4KKworbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAiRW50cmV6IGxhIG5vdXZlbGxlIGxhcmdldXIgZHUgdGV4dGVcbigwIHBvdXIgZOlzYWN0aXZlciBsZSBmb3JtYXR0YWdlKS4iCitsZXQgZzptZW51dHJhbnNfZmlsZWZvcm1hdF9kaWFsb2cgPSAiQ2hvaXNpc3NleiBsZSBmb3JtYXQgZGFucyBsZXF1ZWwg6WNyaXJlIGxlIGZpY2hpZXIuIgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfY2hvaWNlcyA9ICIgJlVuaXggXG4gJkRvcyBcbiAmTWFjIFxuICZBbm51bGVyICIKKworbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQkJJkpldVwgZGVcIGNvdWxldXJzCittZW51dHJhbnMgJktleW1hcAkJCQkmVHlwZVwgZGVcIGNsYXZpZXIKK21lbnV0cmFucyBOb25lCQkJCQkJKGF1Y3VuKQorbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCQlT6WxlY3Rpb25uZXJcICZwb2xpY2VcLlwuXC4KKworCittZW51dHJhbnMgJlRvb2xzCQkJJk91dGlscworCittZW51dHJhbnMgJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQkJJkF0dGVpbmRyZVwgY2V0dGVcIOl0aXF1ZXR0ZTxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQkJUmVwYXJ0aXJcIGVuXCBhcnJpJuhyZTxUYWI+XlQKK21lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCQkmR+lu6XJlclwgZmljaGllclwgZCfpdGlxdWV0dGVzCisKKyIgLVNFUDEtCittZW51dHJhbnMgJkZvbGRpbmcJCQkJJlJlcGxpcworCittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJCQkmUmVwbGlzXCBvbi9vZmY8VGFiPnppCittZW51dHJhbnMgJlZpZXdcIEN1cnNvclwgTGluZTxUYWI+enYJCQlEJulwbGllclwgbGlnbmVcIGN1cnNldXI8VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eAkJVG91dFwgcGxpZXJcICZzYXVmXCBsaWduZVwgY3Vyc2V1cjxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCQkJRmVybWVyXCAmcGx1c1wgZGVcIHJlcGxpczxUYWI+em0KK21lbnV0cmFucyAmQ2xvc2VcIGFsbFwgZm9sZHM8VGFiPnpNCQkJRiZlcm1lclwgdG91c1wgbGVzXCByZXBsaXM8VGFiPnpNCittZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cgkJCU91dnJpclwgcGwmdXNcIGRlXCByZXBsaXM8VGFiPnpyCittZW51dHJhbnMgJk9wZW5cIGFsbFwgZm9sZHM8VGFiPnpSCQkJJk91dnJpclwgdG91c1wgbGVzXCByZXBsaXM8VGFiPnpSCisiIC1TRVAxLQorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQkJCSZN6XRob2RlXCBkZVwgcmVwbGkKKworbWVudXRyYW5zIE0mYW51YWwJCQkJCQkmTWFudWVsbGUKK21lbnV0cmFucyBJJm5kZW50CQkJCQkJJkluZGVudGF0aW9uCittZW51dHJhbnMgRSZ4cHJlc3Npb24JCQkJCQkmRXhwcmVzc2lvbgorbWVudXRyYW5zIFMmeW50YXgJCQkJCQkmU3ludGF4ZQorbWVudXRyYW5zICZEaWZmCQkJCQkJCSZEaWZm6XJlbmNlCittZW51dHJhbnMgTWEmcmtlcgkJCQkJCU1hJnJxdWV1cnMKKworbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQkJCSZDcullclwgcmVwbGk8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCQkJRSZmZmFjZXJcIHJlcGxpPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECQkJRWZmYWNlclwgJnRvdXNcIGxlc1wgcmVwbGlzPFRhYj56RAorIiAtU0VQMi0KK21lbnV0cmFucyBGb2xkXCBjb2wmdW1uXCB3aWR0aAkJCQkmTGFyZ2V1clwgY29sb25uZVwgcmVwbGlzCisKK21lbnV0cmFucyAmRGlmZgkJCQkJJkRpZmbpcmVuY2UKKworbWVudXRyYW5zICZVcGRhdGUJCQkJCSZNZXR0cmVcIOBcIGpvdXIKK21lbnV0cmFucyAmR2V0XCBCbG9jawkJCQkJQ29ycmlnZXJcICZjZVwgdGFtcG9uCittZW51dHJhbnMgJlB1dFwgQmxvY2sJCQkJCUNvcnJpZ2VyXCBsJyZhdXRyZVwgdGFtcG9uCisKKyIgLVNFUDItCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQkJTGFuY2VyXCBtYSZrZTxUYWI+Om1ha2UKK21lbnV0cmFucyAmTGlzdFwgRXJyb3JzPFRhYj46Y2wJCQlMaXN0ZXJcICZlcnJldXJzPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJCUxpc3RlclwgJm1lc3NhZ2VzPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCQlFcnJldXJcICZzdWl2YW50ZTxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCQlFcnJldXJcIHByJulj6WRlbnRlPFRhYj46Y3AKKyJtZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAkJQSZuY2llbm5lXCBsaXN0ZTxUYWI+OmNvbGQKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCQlMaXN0ZVwgJnBy6WPpZGVudGU8VGFiPjpjb2xkCisibWVudXRyYW5zIE4mZXdlclwgTGlzdDxUYWI+OmNuZXcJCU5vJnV2ZWxsZVwgbGlzdGU8VGFiPjpjbmV3CittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwkJTGlzdGVcIHN1aXZhbiZ0ZTxUYWI+OmNuZXcKKworbWVudXRyYW5zIEVycm9yXCAmV2luZG93CQkJJkZlbup0cmVcIGQnZXJyZXVycworCittZW51dHJhbnMgJlVwZGF0ZTxUYWI+OmN3aW4JCQkJJk1ldHRyZVwg4Fwgam91cjxUYWI+OmN3aW4KK21lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQkJCSZPdXZyaXI8VGFiPjpjb3BlbgorbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQkJCQkmRmVybWVyPFRhYj46Y2Nsb3NlCisKKyIgLVNFUDMtCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAkJQ29udmVydGlyXCBlblwgaGUmeGE8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yCQlE6WNvbiZ2ZXJ0aXI8VGFiPjolIXh4ZFwgLXIKKworbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCQkJVHlwZVwgZGVcICZjb21waWxhdGV1cgorCisKK21lbnV0cmFucyAmQnVmZmVycwkJCSZUYW1wb25zCisKK21lbnV0cmFucyBEdW1teQkJCQkJRmFjdGljZQorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51CQkJJk1ldHRyZVwgY2VcIG1lbnVcIOBcIGpvdXIKK21lbnV0cmFucyAmRGVsZXRlCQkJCSZFZmZhY2VyCittZW51dHJhbnMgJkFsdGVybmF0ZQkJCQkmQWx0ZXJuZXIKK21lbnV0cmFucyAmTmV4dAkJCQkJJlN1aXZhbnQKK21lbnV0cmFucyAmUHJldmlvdXMJCQkJJlBy6WPpZGVudAorIiAtU0VQLQorCittZW51dHJhbnMgJm90aGVycwkJCQlhdSZ0cmVzCittZW51dHJhbnMgJnUtegkJCQkJJnV2d3h5egorbGV0IGc6bWVudXRyYW5zX25vX2ZpbGUgPSAiW0F1Y3VuIGZpY2hpZXJdIgorCisKK21lbnV0cmFucyAmV2luZG93CQkJRmUmbup0cmUKKworbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCQkmTm91dmVsbGVcIGZlbup0cmU8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQkJJkZyYWN0aW9ubmVyPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCQlGcmFjdGlvbm5lclwgcCZvdXJcICM8VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdgkJRnJhY3Rpb25uZXJcICZ2ZXJ0aWNhbGVtZW50PFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCQlGcmFjdGlvbm5lclwgJmV4cGxvcmF0ZXVyCisiIC1TRVAxLQorbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCQkJRmVyJm1lcjxUYWI+XldjCittZW51dHJhbnMgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvCQlGZXJtZXJcIGxlc1wgJmF1dHJlczxUYWI+XldvCisiIC1TRVAyLQorbWVudXRyYW5zIE1vdmVcICZUbwkJCQkmROlwbGFjZXJcIHZlcnNcIGxlCisKK21lbnV0cmFucyAmVG9wPFRhYj5eV0sJCQkJCSZIYXV0PFRhYj5eV0sKK21lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJCQkJJkJhczxUYWI+XldKCittZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAkJCQlD9HTpXCAmZ2F1Y2hlPFRhYj5eV0gKK21lbnV0cmFucyAmUmlnaHRcIHNpZGU8VGFiPl5XTAkJCQlD9HTpXCAmZHJvaXQ8VGFiPl5XTAorCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJCVJvdGF0aW9uXCB2ZXJzXCBsZVwgJmhhdXQ8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJCVJvdGF0aW9uXCB2ZXJzXCBsZVwgJmJhczxUYWI+XldyCisiIC1TRVAzLQorbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CQkJyWdhbGlzZXJcIHRhJmlsbGVzPFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkJCUhhdSZ0ZXVyXCBtYXhpbWFsZTxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQkJSGEmdXRldXJcIG1pbmltYWxlPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCQkmTGFyZ2V1clwgbWF4aW1hbGU8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCQlMYSZyZ2V1clwgbWluaW1hbGU8VGFiPl5XMVx8CisKKworIiBQb3BVcAorCittZW51dHJhbnMgJlVuZG8JCQkJCSZBbm51bGVyCisiIC1TRVAxLQorbWVudXRyYW5zIEN1JnQJCQkJCUNvJnVwZXIKK21lbnV0cmFucyAmQ29weQkJCQkJQ29wJmllcgorbWVudXRyYW5zICZQYXN0ZQkJCQlDJm9sbGVyCisiICZCdWZmZXJzLiZEZWxldGUgb3ZlcndyaXRlcyB0aGlzIG9uZQorbWVudXRyYW5zICZEZWxldGUJCQkJJkVmZmFjZXIKKyIgLVNFUDItCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJCQlT6WxlY3Rpb25uZXJcICZibG9jCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJCQlT6WxlY3Rpb25uZXJcICZtb3QKK21lbnV0cmFucyBTZWxlY3RcICZMaW5lCQkJCVPpbGVjdGlvbm5lclwgJmxpZ25lCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJCQlT6WxlY3Rpb25uZXJcICZibG9jCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQkJCVPpbGVjdGlvbm5lclwgJnRvdXQKKworCisiIFRvb2xCYXIKKworbWVudXRyYW5zIE9wZW4JCQkJCU91dnJpcgorbWVudXRyYW5zIFNhdmUJCQkJCUVucmVnCittZW51dHJhbnMgU2F2ZUFsbAkJCQlFbnJlZ1RvdXQKK21lbnV0cmFucyBQcmludAkJCQkJSW1wcmltZXIKKyIgLXNlcDEtCittZW51dHJhbnMgVW5kbwkJCQkJQW5udWxlcgorbWVudXRyYW5zIFJlZG8JCQkJCVJlZmFpcmUKKyIgLXNlcDItCittZW51dHJhbnMgQ3V0CQkJCQlDb3VwZXIKK21lbnV0cmFucyBDb3B5CQkJCQlDb3BpZXIKK21lbnV0cmFucyBQYXN0ZQkJCQkJQ29sbGVyCisiIC1zZXAzLQorbWVudXRyYW5zIEZpbmQJCQkJCUNoZXJjaGVyCittZW51dHJhbnMgRmluZE5leHQJCQkJQ2hlcmNoU3VpdgorbWVudXRyYW5zIEZpbmRQcmV2CQkJCUNoZXJjaFByZWMKK21lbnV0cmFucyBSZXBsYWNlCQkJCVJlbXBsYWNlcgorIiAtc2VwNC0KK21lbnV0cmFucyBOZXcJCQkJCU5vdXZlbGxlCittZW51dHJhbnMgV2luU3BsaXQJCQkJRmVuRnJhY3QKK21lbnV0cmFucyBXaW5NYXgJCQkJRmVuTWF4CittZW51dHJhbnMgV2luTWluCQkJCUZlbk1pbgorbWVudXRyYW5zIFdpblZTcGxpdAkJCQlGZW5WRnJhY3QKK21lbnV0cmFucyBXaW5NYXhXaWR0aAkJCQlGZW5NYXhMYXJnCittZW51dHJhbnMgV2luTWluV2lkdGgJCQkJRmVuTWluTGFyZworbWVudXRyYW5zIFdpbkNsb3NlCQkJCUZlbkZlcm1lCisiIC1zZXA1LQorbWVudXRyYW5zIExvYWRTZXNuCQkJCU91dnJpclNlc3MKK21lbnV0cmFucyBTYXZlU2VzbgkJCQlFbnJlZ1Nlc3MKK21lbnV0cmFucyBSdW5TY3JpcHQJCQkJTGFuY1NjcmlwdAorIiAtc2VwNi0KK21lbnV0cmFucyBNYWtlCQkJCQlNYWtlCittZW51dHJhbnMgUnVuQ3RhZ3MJCQkJQ3LpZXJFdGlxdQorbWVudXRyYW5zIFRhZ0p1bXAJCQkJQWxsZXJFdGlxdQorIiAtc2VwNy0KK21lbnV0cmFucyBIZWxwCQkJCQlBaWRlCittZW51dHJhbnMgRmluZEhlbHAJCQkJQ2hlcmNoQWlkZQorCitmdW4hIERvX3Rvb2xiYXJfdG1lbnUoKQorICBsZXQgZGlkX3Rvb2xiYXJfdG1lbnUgPSAxCisgIHRtZW51IFRvb2xCYXIuT3BlbgkJCQlPdXZyaXIgZmljaGllcgorICB0bWVudSBUb29sQmFyLlNhdmUJCQkJRW5yZWdpc3RyZXIgZmljaGllciBjb3VyYW50CisgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbAkJCQlFbnJlZ2lzdHJlciB0b3VzIGxlcyBmaWNoaWVycworICB0bWVudSBUb29sQmFyLlByaW50CQkJCUltcHJpbWVyCisgIHRtZW51IFRvb2xCYXIuVW5kbwkJCQlBbm51bGVyCisgIHRtZW51IFRvb2xCYXIuUmVkbwkJCQlSZWZhaXJlCisgIHRtZW51IFRvb2xCYXIuQ3V0CQkJCUNvdXBlcgorICB0bWVudSBUb29sQmFyLkNvcHkJCQkJQ29waWVyCisgIHRtZW51IFRvb2xCYXIuUGFzdGUJCQkJQ29sbGVyCisgIGlmICFoYXMoImd1aV9hdGhlbmEiKQorICAgIHRtZW51IFRvb2xCYXIuRmluZAkJCQlSZWNoZXJjaGVyCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAkJCUNoZXJjaGVyIHN1aXZhbnQKKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CQkJQ2hlcmNoZXIgcHLpY+lkZW50CisgICAgdG1lbnUgVG9vbEJhci5SZXBsYWNlCQkJUmVtcGxhY2VyCisgIGVuZGlmCisgaWYgMAkiIGRpc2FibGVkOyBUaGVzZSBhcmUgaW4gdGhlIFdpbmRvd3MgbWVudQorICB0bWVudSBUb29sQmFyLk5ldwkJCQlOb3V2ZWxsZSBmZW7qdHJlCisgIHRtZW51IFRvb2xCYXIuV2luU3BsaXQJCQlGcmFjdGlvbm5lciBmZW7qdHJlCisgIHRtZW51IFRvb2xCYXIuV2luTWF4CQkJCU1heGltaXNlciBmZW7qdHJlCisgIHRtZW51IFRvb2xCYXIuV2luTWluCQkJCU1pbmltaXNlciBmZW7qdHJlCisgIHRtZW51IFRvb2xCYXIuV2luVlNwbGl0CQkJRnJhY3Rpb25uZXIgdmVydGljYWxlbWVudAorICB0bWVudSBUb29sQmFyLldpbk1heFdpZHRoCQkJTWF4aW1pc2VyIGxhcmdldXIgZmVu6nRyZQorICB0bWVudSBUb29sQmFyLldpbk1pbldpZHRoCQkJTWluaW1pc2VyIGxhcmdldXIgZmVu6nRyZQorICB0bWVudSBUb29sQmFyLldpbkNsb3NlCQkJRmVybWVyIGZlbup0cmUKKyBlbmRpZgorICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCQkJT3V2cmlyIHNlc3Npb24KKyAgdG1lbnUgVG9vbEJhci5TYXZlU2VzbgkJCUVucmVnaXN0ZXIgc2Vzc2lvbiBjb3VyYW50ZQorICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdAkJCUxhbmNlciB1biBzY3JpcHQgVmltCisgIHRtZW51IFRvb2xCYXIuTWFrZQkJCQlMYW5jZXIgbWFrZQorICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCQkJQ3LpZXIgbGVzIOl0aXF1ZXR0ZXMKKyAgdG1lbnUgVG9vbEJhci5UYWdKdW1wCQkJCUF0dGVpbmRyZSBjZXR0ZSDpdGlxdWV0dGUKKyAgdG1lbnUgVG9vbEJhci5IZWxwCQkJCUFpZGUgZGUgVmltCisgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJCQlSZWNoZXJjaGVyIGRhbnMgbCdhaWRlCitlbmRmdW4KKworCittZW51dHJhbnMgJlN5bnRheAkJCSZTeW50YXhlCisKK21lbnV0cmFucyAmTWFudWFsCQkJCSZNYW51ZWxsZQorbWVudXRyYW5zIEEmdXRvbWF0aWMJCQkJJkF1dG9tYXRpcXVlCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCQlPbi9vZmZcIHBvdXJcICZjZVwgZmljaGllcgorCisiIFRoZSBTdGFydCBPZiBUaGUgU3ludGF4IE1lbnUKK21lbnV0cmFucyBBQkNcIG11c2ljXCBub3RhdGlvbgkJQUJDXCAobm90YXRpb25cIG11c2ljYWxlKQorbWVudXRyYW5zIEFjZURCXCBtb2RlbAkJCU1vZOhsZVwgQWNlREIKK21lbnV0cmFucyBBcGFjaGVcIGNvbmZpZwkJQ29uZmlnXC5cIEFwYWNoZQorbWVudXRyYW5zIEFwYWNoZS1zdHlsZVwgY29uZmlnCQlDb25maWdcLlwgc3R5bGVcIEFwYWNoZQorbWVudXRyYW5zIEFTUFwgd2l0aFwgVkJTY3JpcHQJCUFTUFwgYXZlY1wgVkJTY3JpcHQKK21lbnV0cmFucyBBU1BcIHdpdGhcIFBlcmwJCUFTUFwgYXZlY1wgUGVybAorbWVudXRyYW5zIEFzc2VtYmx5CQkJQXNzZW1ibGV1cgorbWVudXRyYW5zIEJDXCBjYWxjdWxhdG9yCQlDYWxjdWxhdGV1clwgQkMKK21lbnV0cmFucyBCREZcIGZvbnQJCQlGb250ZVwgQkRGCittZW51dHJhbnMgQklORFwgY29uZmlnCQkJQ29uZmlnXC5cIEJJTkQKK21lbnV0cmFucyBCSU5EXCB6b25lCQkJWm9uZVwgQklORAorbWVudXRyYW5zIENhc2NhZGluZ1wgU3R5bGVcIFNoZWV0cwlGZXVpbGxlc1wgZGVcIHN0eWxlXCBlblwgY2FzY2FkZQorbWVudXRyYW5zIENmZ1wgQ29uZmlnXCBmaWxlCQlGaWNoaWVyXCBkZVwgY29uZmlnXC5cIFwuY2ZnCittZW51dHJhbnMgQ2hlZXRhaFwgdGVtcGxhdGUJCVBhdHJvblwgQ2hlZXRhaAorbWVudXRyYW5zIGNvbW1pdFwgZmlsZQkJCUZpY2hpZXJcIGNvbW1pdAorbWVudXRyYW5zIEdlbmVyaWNcIENvbmZpZ1wgZmlsZQkJRmljaGllclwgZGVcIGNvbmZpZ1wuXCBn6W7pcmlxdWUKK21lbnV0cmFucyBEaWdpdGFsXCBDb21tYW5kXCBMYW5nCURDTAorbWVudXRyYW5zIEROUy9CSU5EXCB6b25lCQlab25lXCBCSU5EL0ROUworbWVudXRyYW5zIER5bGFuXCBpbnRlcmZhY2UJCUludGVyZmFjZQorbWVudXRyYW5zIER5bGFuXCBsaWQJCQlMSUQKK21lbnV0cmFucyBFbG1cIGZpbHRlclwgcnVsZXMJCVLoZ2xlc1wgZGVcIGZpbHRyYWdlXCBFbG0KK21lbnV0cmFucyBFUmljc3NvblwgTEFOR3VhZ2UJCUVybGFuZ1wgKGxhbmdhZ2VcIEVyaWNzc29uKQorbWVudXRyYW5zIEVzc2Jhc2VcIHNjcmlwdAkJU2NyaXB0XCBFc3NiYXNlCittZW51dHJhbnMgRXRlcm1cIGNvbmZpZwkJCUNvbmZpZ1wuXCBFdGVybQorbWVudXRyYW5zIEV4aW1cIGNvbmYJCQlDb25maWdcLlwgRXhpbQorbWVudXRyYW5zIEZ2d21cIGNvbmZpZ3VyYXRpb24JCUNvbmZpZ1wuXCBGdndtCittZW51dHJhbnMgRnZ3bTJcIGNvbmZpZ3VyYXRpb24JCUNvbmZpZ1wuXCBGdndtMgorbWVudXRyYW5zIEZ2d20yXCBjb25maWd1cmF0aW9uXCB3aXRoXCBNNAlDb25maWdcLlwgRnZ3bTJcIGF2ZWNcIE00CittZW51dHJhbnMgR0RCXCBjb21tYW5kXCBmaWxlCQlGaWNoaWVyXCBkZVwgY29tbWFuZGVzXCBHREIKK21lbnV0cmFucyBIVE1MXCB3aXRoXCBNNAkJSFRNTFwgYXZlY1wgTTQKK21lbnV0cmFucyBDaGVldGFoXCBIVE1MXCB0ZW1wbGF0ZQlQYXRyb25cIENoZWV0YWhcIHBvdXJcIEhUTUwKK21lbnV0cmFucyBJRExcR2VuZXJpY1wgSURMCQlJRExcSURMXCBn6W7pcmlxdWUKK21lbnV0cmFucyBJRExcTWljcm9zb2Z0XCBJREwJCUlETFxJRExcIE1pY3Jvc29mdAorbWVudXRyYW5zIEluZGVudFwgcHJvZmlsZQkJUHJvZmlsXCBJbmRlbnQKK21lbnV0cmFucyBJbm5vXCBzZXR1cAkJCUNvbmZpZ1wuXCBJbm5vCittZW51dHJhbnMgSW5zdGFsbFNoaWVsZFwgc2NyaXB0CQlTY3JpcHRcIEluc3RhbGxTaGllbGQKK21lbnV0cmFucyBLREVcIHNjcmlwdAkJCVNjcmlwdFwgS0RFCittZW51dHJhbnMgTEZUUFwgY29uZmlnCQkJQ29uZmlnXC5cIExGVFAKK21lbnV0cmFucyBMaWZlTGluZXNcIHNjcmlwdAkJU2NyaXB0XCBMaWZlTGluZXMKK21lbnV0cmFucyBMeW54XCBTdHlsZQkJCVN0eWxlXCBMeW54CittZW51dHJhbnMgTHlueFwgY29uZmlnCQkJQ29uZmlnXC5cIEx5bngKK21lbnV0cmFucyBNYW5cIHBhZ2UJCQlQYWdlXCBNYW4KK21lbnV0cmFucyBNRUxcIChmb3JcIE1heWEpCQlNRUxcIChwb3VyXCBNYXlhKQorbWVudXRyYW5zIDRET1NcIFwuYmF0XCBmaWxlCQlGaWNoaWVyXCBcLmJhdFwgNERPUworbWVudXRyYW5zIFwuYmF0XC9cLmNtZFwgZmlsZQkJRmljaGllclwgXC5iYXRcIC9cIFwuY21kCittZW51dHJhbnMgXC5pbmlcIGZpbGUJCQlGaWNoaWVyXCBcLmluaQorbWVudXRyYW5zIE1vZHVsZVwgRGVmaW5pdGlvbgkJROlmaW5pdGlvblwgZGVcIG1vZHVsZQorbWVudXRyYW5zIFJlZ2lzdHJ5CQkJRXh0cmFpdFwgZHVcIHJlZ2lzdHJlCittZW51dHJhbnMgUmVzb3VyY2VcIGZpbGUJCUZpY2hpZXJcIGRlXCByZXNzb3VyY2VzCittZW51dHJhbnMgTm92ZWxsXCBOQ0ZcIGJhdGNoCQlCYXRjaFwgTm92ZWxsXCBOQ0YKK21lbnV0cmFucyBOU0lTXCBzY3JpcHQJCQlTY3JpcHRcIE5TSVMKK21lbnV0cmFucyBPcmFjbGVcIGNvbmZpZwkJQ29uZmlnXC5cIE9yYWNsZQorbWVudXRyYW5zIFBhbG1cIHJlc291cmNlXCBjb21waWxlcglDb21waWxcLlwgZGVcIHJlc291cmNlc1wgUGFsbQorbWVudXRyYW5zIFBIUFwgMy00CQkJUEhQXCAzXCBldFwgNAorbWVudXRyYW5zIFBvc3RmaXhcIG1haW5cIGNvbmZpZwkJQ29uZmlnXC5cIFBvc3RmaXgKK21lbnV0cmFucyBQb3ZyYXlcIHNjZW5lXCBkZXNjcgkJU2PobmVcIFBvdnJheQorbWVudXRyYW5zIFBvdnJheVwgY29uZmlndXJhdGlvbgkJQ29uZmlnXC5cIFBvdnJheQorbWVudXRyYW5zIFB1cmlmeVwgbG9nCQkJTG9nXCBQdXJpZnkKK21lbnV0cmFucyBSZWFkbGluZVwgY29uZmlnCQlDb25maWdcLlwgUmVhZGxpbmUKK21lbnV0cmFucyBSQ1NcIGxvZ1wgb3V0cHV0CQlMb2dcIFJDUworbWVudXRyYW5zIFJDU1wgZmlsZQkJCUZpY2hpZXJcIFJDUworbWVudXRyYW5zIFJvY2tMaW51eFwgcGFja2FnZVwgZGVzY1wuCURlc2NcLlwgcGtnXC5cIFJvY2tMaW51eAorbWVudXRyYW5zIFNhbWJhXCBjb25maWcJCQlDb25maWdcLlwgU2FtYmEKK21lbnV0cmFucyBTR01MXCBjYXRhbG9nCQkJQ2F0YWxvZ3VlXCBTR01MCittZW51dHJhbnMgU0dNTFwgRFRECQkJRFREXCBTR01MCittZW51dHJhbnMgU0dNTFwgRGVjbGFyYXRpb24JCUTpY2xhcmF0aW9uXCBTR01MCittZW51dHJhbnMgU2hlbGxcIHNjcmlwdAkJCVNjcmlwdFwgc2hlbGwKK21lbnV0cmFucyBzaFwgYW5kXCBrc2gJCQlzaFwgZXRcIGtzaAorbWVudXRyYW5zIFNpbmRhXCBjb21wYXJlCQlDb21wYXJhaXNvblwgU2luZGEKK21lbnV0cmFucyBTaW5kYVwgaW5wdXQJCQlFbnRy6WVcIFNpbmRhCittZW51dHJhbnMgU2luZGFcIG91dHB1dAkJCVNvcnRpZVwgU2luZGEKK21lbnV0cmFucyBTS0lMTFwgZm9yXCBEaXZhCQlTS0lMTFwgcG91clwgRGl2YQorbWVudXRyYW5zIFNtYXJ0eVwgVGVtcGxhdGVzCQlQYXRyb25zXCBTbWFydHkKK21lbnV0cmFucyBTTk5TXCBuZXR3b3JrCQkJUulzZWF1XCBTTk5TCittZW51dHJhbnMgU05OU1wgcGF0dGVybgkJCU1vdGlmXCBTTk5TCittZW51dHJhbnMgU05OU1wgcmVzdWx0CQkJUulzdWx0YXRcIFNOTlMKK21lbnV0cmFucyBTbm9ydFwgQ29uZmlndXJhdGlvbgkJQ29uZmlnXC5cIFNub3J0CittZW51dHJhbnMgU3F1aWRcIGNvbmZpZwkJCUNvbmZpZ1wuXCBTcXVpZAorbWVudXRyYW5zIFN1YnZlcnNpb25cIGNvbW1pdAkJQ29tbWl0XCBTdWJ2ZXJzaW9uCittZW51dHJhbnMgVEFLXCBjb21wYXJlCQkJQ29tcGFyYWlzb25cIFRBSworbWVudXRyYW5zIFRBS1wgaW5wdXQJCQlFbnRy6WVcIFRBSworbWVudXRyYW5zIFRBS1wgb3V0cHV0CQkJU29ydGllXCBUQUsKK21lbnV0cmFucyBUZVhcIGNvbmZpZ3VyYXRpb24JCUNvbmZpZ1wuXCBUZVgKK21lbnV0cmFucyBURlwgbXVkXCBjbGllbnQJCVRGXCAoY2xpZW50XCBNVUQpCittZW51dHJhbnMgVGlkeVwgY29uZmlndXJhdGlvbgkJQ29uZmlnXC5cIFRpZHkKK21lbnV0cmFucyBUcmFzeXNcIGlucHV0CQkJRW50cullXCBUcmFzeXMKK21lbnV0cmFucyBDb21tYW5kXCBMaW5lCQkJTGlnbmVcIGRlXCBjb21tYW5kZQorbWVudXRyYW5zIEdlb21ldHJ5CQkJR+lvbel0cmllCittZW51dHJhbnMgT3B0aWNzCQkJT3B0aXF1ZXMKK21lbnV0cmFucyBWaW1cIGhlbHBcIGZpbGUJCUZpY2hpZXJcIGQnYWlkZVwgVmltCittZW51dHJhbnMgVmltXCBzY3JpcHQJCQlTY3JpcHRcIFZpbQorbWVudXRyYW5zIFZpbWluZm9cIGZpbGUJCQlGaWNoaWVyXCBWaW1pbmZvCittZW51dHJhbnMgVmlyYXRhXCBjb25maWcJCUNvbmZpZ1wuXCBWaXJhdGEKK21lbnV0cmFucyBXZ2V0XCBjb25maWcJCQlDb25maWdcLlwgd2dldAorbWVudXRyYW5zIFdoaXRlc3BhY2VcIChhZGQpCQlFc3BhY2VzXCBldFwgdGFidWxhdGlvbnMKK21lbnV0cmFucyBXaWxkUGFja2V0c1wgRXRoZXJQZWVrXCBEZWNvZGVyCUTpY29kZXVyXCBXaWxkUGFja2V0c1wgRXRoZXJQZWVrCittZW51dHJhbnMgWFwgcmVzb3VyY2VzCQkJUmVzb3VyY2VzXCBYCittZW51dHJhbnMgWFhEXCBoZXhcIGR1bXAJCVNvcnRpZVwgaGV4YVwuXCBkZVwgeHhkCittZW51dHJhbnMgWEZyZWU4NlwgQ29uZmlnCQlDb25maWdcLlwgWEZyZWU4NgorIiBUaGUgRW5kIE9mIFRoZSBTeW50YXggTWVudQorCittZW51dHJhbnMgJlNob3dcIGZpbGV0eXBlc1wgaW5cIG1lbnUJCSZBZmZpY2hlclwgdG91dFwgbGVcIG1lbnUKKyIgLVNFUDEtCittZW51dHJhbnMgU2V0XCAnJnN5bnRheCdcIG9ubHkJCQlDaGFuZ2VyXCAnJnN5bnRheCdcIHNldWxlbWVudAorbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwkJCUNoYW5nZXJcICcmZmlsZXR5cGUnXCBhdXNzaQorbWVudXRyYW5zICZPZmYJCQkJCSZPZmYKKyIgLVNFUDMtCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQkJCVRlc3RlclwgbGVzXCBjbyZ1bGV1cnMKK21lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0CQkJVGVzdGVyXCBsZXNcIGcmcm91cGVzXCBkZVwgc3VybGlnbmFnZQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSFRNTAkJCUNvbiZ2ZXJ0aXJcIGVuXCBIVE1MCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9mcl9mci51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9mcl9mci51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0MTkwNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2ZyX2ZyLnV0Zi04LnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUZyZW5jaCBmb3IgVVRGLTggZW5jb2RpbmcKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfZnJfZnIubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfZnJlbmNoX2ZyYW5jZS4xMjUyLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2ZyZW5jaF9mcmFuY2UuMTI1Mi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1ZGRiNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2ZyZW5jaF9mcmFuY2UuMTI1Mi52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglGcmVuY2ggZm9yIFdpbmRvd3MgQ29kZVBhZ2UgMTI1MiBlbmNvZGluZworCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9mcl9mci5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9nZXJtYW5fZ2VybWFueS4xMjUyLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2dlcm1hbl9nZXJtYW55LjEyNTIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MGQ2YjUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9nZXJtYW5fZ2VybWFueS4xMjUyLnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUdlcm1hbiBmb3IgV2luZG93cyBDb2RlUGFnZSAxMjUyIGVuY29kaW5nCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X2RlX2RlLmxhdGluMS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2h1Lmlzb184ODU5LTIudmltIGIvcnVudGltZS9sYW5nL21lbnVfaHUuaXNvXzg4NTktMi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyMWQxMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2h1Lmlzb184ODU5LTIudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJSXRhbGlhbiBmb3IgVVRGLTggZW5jb2RpbmcKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfaHVfaHUuaXNvXzg4NTktMi52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2h1LnV0Zi04LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2h1LnV0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQzNWVmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfaHUudXRmLTgudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJSXRhbGlhbiBmb3IgVVRGLTggZW5jb2RpbmcKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfaHVfaHUudXRmLTgudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9odV9odS5pc29fODg1OS0yLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2h1X2h1Lmlzb184ODU5LTIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZmFmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9odV9odS5pc29fODg1OS0yLnZpbQpAQCAtMCwwICsxLDI1OCBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJSHVuZ2FyaWFuIChNYWd5YXIpCisiIE9yaWdpbmFsIFRyYW5zbGF0aW9uOglab2x04W4gwXJw4WRmZnkKKyIgTWFpbnRhaW5lZCBCeToJS29udHJhIEdlcmdlbHkgPGtnZXJnZWx5QG1jbC5odT4KKyIgTGFzdCBDaGFuZ2U6CQkyMDAzIE1heSAzMQorIiBJJ20gd29ya2luZyBvbiBkZWZpbmluZyAodW5hY2NlbnRlZCkgaG90a2V5cyBmb3IgZXZlcnl0aGluZy4KKyIgSSB3YW50IHRvIHJlbW92ZSB5IGFuZCB6IGhvdGtleXMsIGJlY2F1c2Ugb24gdGhlIGh1bmdhcmlhbiBrZXltYXAgdGhleSdyZSBhdAorIiBhIGRpZmZlcnJlbnQgcGxhY2UuCisiIEkgYWxzbyB3YW50IHRvIGF2b2lkIGcgYW5kIGogc2hvcnRjdXRzLCBiZWNhdXNlIHlvdSBjYW5ub3Qgc2VlLCB3aGV0ZXIKKyIgdGhleSdyZSB1bmRlcmxpbmVkIG9yIG5vdC4KKyIgSWYgdGhlIGhvdGtleXMgYXJlIG5vdCB1bmlxIChwcmVzc2luZyB0aGUgaG90a2V5IGRvZXNuJ3QgZXhlY3V0ZXMgdGhlIG1lbnUsCisiIGp1c3Qgb25lIG1lbnVwb2ludCBpcyBzZWxlY3RlZCksIG9yIHlvdSBmaW5kIGFueSBvdGhlciB1bmRlc2lyZWQgYmVoYXZpb3VyLAorIiBwbGVhc2UgcmVwb3J0IGl0IHRvIG1lLgorIiBBbGwga2luZCBvZiBmZWVkYmFjayBpcyB3ZWxjb21lLgorIgorIiBJZ3lla2V6dGVtIG1pbmRlbmhleiBneW9yc2JpbGxlbnR5+3QgcmVuZGVsbmksIGxlaGV09WxlZyBuZW0g6WtlemV0ZXNldC4KKyIgVG924WJiaSB0ZW5uaXZhbPMgYXogeSDpcyB6IGd5b3JzYmlsbGVudHn7ayBraWlydOFzYSwgZXplbmvtdvxsIGEgZywgagorIiBiaWxsZW50eftrIGlydOFzYSBpcywgbWl2ZWwgZXogdXTzYmJpYWsgYWzhaPp6b3R0IHbhbHRvemF04XQgbmVtIGv2bm55+worIiBmZWxpc21lcm5pLgorIiBBbWVubnlpYmVuIHZhbGFob2wgbmVtIGVneelydGVsbftrIGEgZ3lvcnNiaWxsZW50eftrIChhIGd5b3JzYmlsbGVudHn7dAorIiBsZfx0dmUgbmVtIGhhanTzZGlrIHbpZ3JlIGEga2lzemVtZWx0IG1lbvxwb250LCBoYW5lbSBjc2FrIGtpduFsYXN6dPNkaWssCisiIHZhZ3kgbeFzaWsgbWVu/HBvbnQgduFsYXN6dPNkaWsga2kpLCB2YWd5IGVneeliIGhpYuF0IHRhbOFsc3osIGvpcmxlayBqZWxlemQKKyIgbmVrZW0gYSBmZW50aSBlbWFpbCBj7W1lbi4KKyIgTWluZGVubmVt+yB2aXNzemFqZWx66XN0IHN67XZlc2VuIGZvZ2Fkb2suCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCitzY3JpcHRlbmNvZGluZyBpc28tODg1OS0yCisKKyIgSGVscCBtZW51CittZW51dHJhbnMgJkhlbHAJCQkmU/pn8worbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgnBJnR0ZWtpbnTpczxUYWI+PEYxPgorbWVudXRyYW5zICZIb3ctdG9cIGxpbmtzCSZIT0dZQU5cIGxpbmtlaworbWVudXRyYW5zICZVc2VyXCBNYW51YWwJCSZL6Xppa/ZueXYKK21lbnV0cmFucyAmQ3JlZGl0cwkJJlN6ZXJ69WssXCBr9nN69m5ldGVrCittZW51dHJhbnMgQ28mcHlpbmcJCSZW6WRqZWd5CittZW51dHJhbnMgTyZycGhhbnMJCcFyduEmaworbWVudXRyYW5zICZGaW5kXC5cLlwuCQlLZSZyZXPpc1wuXC5cLgorbWVudXRyYW5zICZWZXJzaW9uCQkmVmVyemnzCittZW51dHJhbnMgJkFib3V0CQkmTul2amVneQorIiBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCQkmRuFqbAorbWVudXRyYW5zICZPcGVuXC5cLlwuPFRhYj46ZQkJTWVnJm55aXThc1wuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCU1lZ255aXThc1wg+mpcIGEmYmxha2JhXC5cLlwuPFRhYj46c3AKK21lbnV0cmFucyAmTmV3PFRhYj46ZW5ldwkJ2mpcIGRvayZ1bWVudHVtPFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQlCZSZ64XLhczxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJJk1lbnTpczxUYWI+OncKK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4J1nNzemUmaGFzb25s7XThc1wuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4J1nNzemVoYXNvbmztdOFzXCAmcGF0Y2hcIC1lbFwuXC5cLgorbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdglNZW506SZzXCBt4XNr6W50XC5cLlwuPFRhYj46dworbWVudXRyYW5zICZQcmludAkJCU55b210JmF04XMKK21lbnV0cmFucyBTYSZ2ZS1FeGl0PFRhYj46d3FhCQlNZW506XNcIOlzXCBrJmls6XDpczxUYWI+OndxYQorbWVudXRyYW5zIEUmeGl0PFRhYj46cWEJCQkmS2ls6XDpczxUYWI+OnFhCisKKyIgRWRpdCBtZW51CittZW51dHJhbnMgJkVkaXQJCQkJUyZ6ZXJrZXN6dOlzCittZW51dHJhbnMgJlVuZG88VGFiPnUJCQkmVmlzc3phdm9u4XM8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQlN6SZnaXM8VGFiPl5SCittZW51dHJhbnMgUmVwJmVhdDxUYWI+XC4JCSZJc23pdDxUYWI+XC4KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCQkmS2l24WfhczxUYWI+Iit4CittZW51dHJhbnMgJkNvcHk8VGFiPiIreQkJCSZN4XNvbOFzPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCSZCZWlsbGVzenTpczxUYWI+IitnUAorbWVudXRyYW5zIFB1dFwgJkJlZm9yZTxUYWI+W3AJCUJlcmFr4XNcIGUmbOk8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQlCZXJha+FzXCAmbfZn6TxUYWI+XXAKK21lbnV0cmFucyAmRGVsZXRlPFRhYj54CQkJJlT2cmzpczxUYWI+eAorbWVudXRyYW5zICZTZWxlY3RcIGFsbDxUYWI+Z2dWRwkJQSZ6XCD2c3N6ZXMga2lqZWz2bOlzZTxUYWI+Z2d2RworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJS2UmcmVz6XNcLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuCUtlcmVz6XNcIOlzXCBjJnNlcmVcLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlPFRhYj46JXMJS2VyZXPpc1wg6XNcIGMmc2VyZTxUYWI+OiVzCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZQkJS2VyZXPpc1wg6XNcIGMmc2VyZQorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjpzCUtlcmVz6XNcIOlzXCBjJnNlcmU8VGFiPjpzCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCSZBYmxha1wgYmXhbGztdOFzYWkKK21lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkJwWwmdGFs4W5vc1wgYmXhbGztdOFzb2sKK21lbnV0cmFucyBGJmlsZVwgU2V0dGluZ3MJCSZG4WpsXCBiZeFsbO104XNvaworbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQkmU3rtbmVrCittZW51dHJhbnMgJktleW1hcAkJCUJpbGxlbnQmeft6ZXRraW9zenThcworCisiIEVkaXQuR2xvYmFsIFNldHRpbmdzCittZW51dHJhbnMgVG9nZ2xlXCBQYXR0ZXJuXCAmSGlnaGxpZ2h0PFRhYj46c2V0XCBobHMhCSZNaW50YVwga2llbWVs6XNcIEJFL0tJPFRhYj46c2V0XCBobHMhCittZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljIQkmS2lzL25hZ3liZXT7XCBhem9ub3Mva/xs9m5i9nr1PFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQkmWuFy82plbHDhclwgbXV0YXThc2FcIEJFL0tJPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCSZLdXJ6b3JcIGFibGFrXCBzeuls6XT1bAorbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQkmVmlydHXhbGlzXCBzemVya2VzenTpcworbWVudXRyYW5zIE5ldmVyCQkJCSZTb2hhCittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgkJJkJsb2trXCBraWplbPZs6XNla29yCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJUyZ69nZlZ1wgYmV2aXRlbGVrb3IKK21lbnV0cmFucyBCbG9ja1wgYW5kXCBJbnNlcnQJCUJsJm9ra1wga2lqZWz2bOlzZWtvclwg6XNcIHN69nZlZ1wgYmV2aXRlbGVrb3IKK21lbnV0cmFucyBBbHdheXMJCQkmTWluZGlnCittZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJJlN69nZlZ2Jldml0ZWxpXCBt82RcIEJFL0tJPFRhYj46c2V0XCBpbSEKK21lbnV0cmFucyBUb2dnbGVcIFZpXCBDJm9tcGF0aWJsZTxUYWI+OnNldFwgY3AhCSZWaVwga29tcGF07WJpbGlzXCBt82RcIEJFL0tpPFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQlLZSZyZXPpc2lcIPp0dm9uYWxcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJJlRhZ1wgZuFqbFwuXC5cLgorbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCSZFc3pr9np04XJcIEJFL0tJCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJJlbtenN6aW50ZXNcIEf2cmdldPVz4XZcIEJFL0tJCittZW51dHJhbnMgVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyCSZCYWxcIGf2cmdldPVz4XZcIEJFL0tJCittZW51dHJhbnMgVG9nZ2xlXCAmUmlnaHRcIFNjcm9sbGJhcgkmSm9iYlwgZ/ZyZ2V09XPhdlwgQkUvS0kKK21lbnV0cmFucyBOb25lCQkJCU5pbmNzCisKKyIgRWRpdC5GaWxlIFNldHRpbmdzCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmTnVtYmVyaW5nPFRhYj46c2V0XCBudSEJU29yc3rhJm1veuFzXCBCRS9LSTxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCSZMaXN0YVwgbfNkXCBCRS9LSTxUYWI+OnNldFwgbGlzdCEKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQkJU29yJnT2culzXCBCRS9LSTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyIQlTb3J09nLpc1wgcyZ683bpZ2VrbulsXCBCRS9LSTx0YWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJJlRhYlwga2lmZWp06XNcIEJFL0tJPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQkmQXV0b21hdGlrdXNcIGJlaPp64XNcIEJFL0tJPFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQkJJkMtYmVo+nrhc1wgQkUvS0k8VGFiPjpzZXRcIGNpbiEKK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJCQkJJkJlaPp64XNcIG3pcnTpa2VcICgnc3cnKQorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQkJCVQmYWJ1bOFs4XNcIG3pcnTpa2VcICgnc3RzJykKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQkJJlN69nZlZ1wgc3rpbGVzc+lnZVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkJJkbhamxmb3Jt4XR1bVwuXC5cLgorCisiIFRvb2xzIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJCQkmRXN6a/Z69msKK21lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dCSZVZ3Lhc1wgYVwgdGFnaG96PFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJCVVncuFzXCAmdmlzc3phPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJJlRhZ1wgZuFqbFwga+lzeu106XNlCittZW51dHJhbnMgJkZvbGRpbmcJCQkmQmVoYWp04XNvaworbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZQkJJkZvcmTtdOFzPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJJkhpYuFrXCBsaXN04WphPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJ3CZ6ZW5ldGVrXCBsaXN04WphPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCSZL9nZldGtlevVcICZoaWJhPFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AJJkVs9Xr1XCBoaWJhPFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCSZS6WdlYmJpXCBsaXN0YTxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3CSbaamFiYlwgbGlzdGE8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCUhpYmFhYmxhaworbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCQkmRnJpc3PtdOlzPFRhYj46Y3dpbgorbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4JCU0mZWdueWl04XM8VGFiPjpjb3BlbgorbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQkJQmUmeuFy4XM8VGFiPjpjY2xvc2UKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCU5vcm3hbC0+SEVYXCBu6XpldDxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJSEVYLT5Ob3Jt4WxcIG7pemV0PFRhYj46JSF4eGRcIC1yCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCUZvcmTtdPNcICZtZWdhZOFzYQorCisiIFRvb2xzLkZvbGRpbmcKK21lbnV0cmFucyAmRW5hYmxlL0Rpc2FibGVcIGZvbGRzPFRhYj56aQlCZWhhanThc29rXCBCRSYvS0k8VGFiPnppCittZW51dHJhbnMgJlZpZXdcIEN1cnNvclwgTGluZTxUYWI+enYJJkFrdHXhbGlzXCBzb3JcIGzhdHN6aWs8VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eAkmQ3Nha1wgYWt0deFsaXNcIHNvclwgbOF0c3ppazxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCUv2dmV0a2V69Vwgc3ppbnRcIGJlJnrhcuFzYTxUYWI+em0KK21lbnV0cmFucyAmQ2xvc2VcIGFsbFwgZm9sZHM8VGFiPnpNCdZzc3plc1wgaGFqdOFzXCAmYmV64XLhc2E8VGFiPnpNCittZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cglL9nZldGtlevVcIHN6aW50XCBraSZueWl04XNhPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgnWc3N6ZXNcIGhhanThc1wgJmtpbnlpdOFzYTxUYWI+elIKK21lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkJQmVoYWp04XNva1wgJmzpdHJlaG964XNhCittZW51dHJhbnMgTSZhbnVhbAkJCSZL6XppCittZW51dHJhbnMgSSZuZGVudAkJCUJlJmj6euFzCittZW51dHJhbnMgRSZ4cHJlc3Npb24JCQlLaSZmZWpleulzCittZW51dHJhbnMgUyZ5bnRheAkJCSZTemludGF4aXMKK21lbnV0cmFucyAmRGlmZgkJCQkmRGlmZi1r/Gz2bmJz6WcKK21lbnV0cmFucyBNYSZya2VyCQkJJkplbPZs6XMKK21lbnV0cmFucyBDcmVhdGVcICZGb2xkPFRhYj56ZgkJ2iZqXCBiZWhhanThczxUYWI+emYKK21lbnV0cmFucyAmRGVsZXRlXCBGb2xkPFRhYj56ZAkJQmVoYWp04XNcICZ09nJs6XNlPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECdZzcyZ6ZXNcIGJlaGFqdOFzXCB09nJs6XNlPFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbCZ1bW5cIHdpZHRoCQlCZWhhanThc29rXCBhXCAmbWFyZ/NuXCB4XCBvc3psb3BiYW4KKworIiBUb29scy5EaWZmCittZW51dHJhbnMgJlVwZGF0ZQkJJkZyaXNz7XTpcworbWVudXRyYW5zICZHZXRcIEJsb2NrCQlCbG9ja1wgJkJFCittZW51dHJhbnMgJlB1dFwgQmxvY2sJCUJsb2NrXCAmS0kKKworCisKKyIgTmFtZXMgZm9yIGJ1ZmZlciBtZW51LgorbWVudXRyYW5zICZCdWZmZXJzCQkmUHVmZmVyb2sKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQkmRnJpc3PtdOlzCittZW51dHJhbnMgRGVsZXRlCQkmVPZybOlzCittZW51dHJhbnMgJkFsdGVybmF0ZQkJJkNzZXJlCittZW51dHJhbnMgJk5leHQJCQkmS/Z2ZXRrZXr1CittZW51dHJhbnMgJlByZXZpb3VzCQkmRWz1evUKKworIiBXaW5kb3cgbWVudQorbWVudXRyYW5zICZXaW5kb3cJCQkmQWJsYWsKK21lbnV0cmFucyAmTmV3PFRhYj5eV24JCQnaJmo8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQkmRmVsb3N6dOFzPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCUZlbG9zenThc1wgJiMtdmFsPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJRmVsb3N6dOFzXCBG/CZnZ/VsZWdlc2VuPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCdpqXCAmaW506Xr1CittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCUJlJnrhcuFzPFRhYj5eV2MKK21lbnV0cmFucyBDbG9zZVwgJk90aGVyKHMpPFRhYj5eV28JJlT2YmJpXCBiZXrhcuFzYTxUYWI+XldvCittZW51dHJhbnMgTmUmeHQ8VGFiPl5XdwkJCSZL9nZldGtlevU8VGFiPl5XdworbWVudXRyYW5zIFAmcmV2aW91czxUYWI+XldXCQkmRWz1evU8VGFiPl5XVworbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CQkmQXpvbm9zXCBtYWdhc3PhZzxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCU1hJnhcIG1hZ2Fzc+FnPFRhYj5eV18KK21lbnV0cmFucyBNJmluXCBIZWlnaHQ8VGFiPl5XMV8JCSZNaW5cIG1hZ2Fzc+FnPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCU1heFwgJnN66Wxlc3PpZzxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJTWkmblwgc3rpbGVzc+lnPFRhYj5eVzFcfAorbWVudXRyYW5zIE1vdmVcICZUbwkJCSZFbG1vemTtdOFzCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkJJkZlbDxUYWI+XldLCittZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCQkmTGU8VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCSZCYWxyYTxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCSZKb2JicmE8VGFiPl5XTAorbWVudXRyYW5zIFJvdGF0ZVwgJlVwPFRhYj5eV1IJCUf2cmTtdOlzXCAmZmVsZmVs6TxUYWI+XldSCittZW51dHJhbnMgUm90YXRlXCAmRG93bjxUYWI+XldyCQlH9nJk7XTpc1wgJmxlZmVs6TxUYWI+XldyCittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkJJkJldPt07XB1c1wuXC5cLgorCisiIFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCQkmVmlzc3phdm9u4XMKK21lbnV0cmFucyBDdSZ0CQkJJktpduFn4XMKK21lbnV0cmFucyAmQ29weQkJCSZN4XNvbOFzCittZW51dHJhbnMgJlBhc3RlCQkmQmVpbGxlc3p06XMKK21lbnV0cmFucyAmRGVsZXRlCQkmVPZybOlzCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJS2lqZWz2bOlzXCBibG8ma2vpbnQKK21lbnV0cmFucyBTZWxlY3RcICZXb3JkCQlTJnrzXCBraWplbPZs6XNlCittZW51dHJhbnMgU2VsZWN0XCAmTGluZQkJJlNvclwga2lqZWz2bOlzZQorbWVudXRyYW5zIFNlbGVjdFwgJkJsb2NrCUImbG9ra1wga2lqZWz2bOlzZQorbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJQSZ6XCD2c3N6ZXNcIGtpamVs9mzpc2UKKworIiBUaGUgR1VJIHRvb2xiYXIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCU1lZ255aXThcworICAgIHRtZW51IFRvb2xCYXIuU2F2ZQkJTWVudOlzCisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCU1pbmRldCBtZW50aQorICAgIHRtZW51IFRvb2xCYXIuUHJpbnQJCU55b210YXThcworICAgIHRtZW51IFRvb2xCYXIuVW5kbwkJVmlzc3phdm9u4XMKKyAgICB0bWVudSBUb29sQmFyLlJlZG8JCU3pZ2lzCisgICAgdG1lbnUgVG9vbEJhci5DdXQJCUtpduFn4XMKKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCU3hc29s4XMKKyAgICB0bWVudSBUb29sQmFyLlBhc3RlCQlCZWlsbGVzenTpcworICAgIHRtZW51IFRvb2xCYXIuRmluZAkJS2VyZXPpcworICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJVG924WJiIGtlcmVz6XMKKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CUtlcmVz6XMgdmlzc3phZmVs6QorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQlLZXJlc+lzL2NzZXJlCisgICAgdG1lbnUgVG9vbEJhci5Mb2FkU2VzbglNdW5rYW1lbmV0IGJlb2x2YXPhcworICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24JTXVua2FtZW5ldCBtZW506XMKKyAgICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdAlWaW0gcHJvZ3JhbSBpbmTtdOFzCisgICAgdG1lbnUgVG9vbEJhci5NYWtlCQlQcm9qZWt0IOlw7XTpcworICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCVNoZWxsIGluZO104XMKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCVRhZyDpcO106XMKKyAgICB0bWVudSBUb29sQmFyLlRhZ0p1bXAJVWdy4XMgYSBrdXJ6b3IgYWxhdHRpIHRhZ3JhCisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQlWaW0gc/pn8worICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJS2VyZXPpcyBhIFZpbSBz+mfzYmFuCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXgJCQlTeiZpbnRheGlzCittZW51dHJhbnMgJlNob3dcIGZpbGV0eXBlc1wgaW5cIG1lbnUJRuFqbCZ07XB1c29rXCBtZW78CittZW51dHJhbnMgU2V0XCAnJnN5bnRheCdcIG9ubHkJCUNzYWtcICcmc3ludGF4JworbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwkJJyZmaWxldHlwZSdcIGlzCittZW51dHJhbnMgJk9mZgkJCQkmS2kKK21lbnV0cmFucyAmTWFudWFsCQkJS+kmemkKK21lbnV0cmFucyBBJnV0b21hdGljCQkJQSZ1dG9tYXRpa3VzCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCSZCRS9LSVwgZW5u6WxcIGFcIGbhamxu4WwKK21lbnV0cmFucyBDbyZsb3JcIHRlc3QJCQkmU3rtbnRlc3p0CittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAkJS2llbWVs6XNcICZ0ZXN6dAorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSFRNTAkJJkhUTUxcIG9sZGFsXCBr6XN67XTpc2UKKworIiBkaWFsb2cgdGV4dHMKK2xldCBtZW51dHJhbnNfbm9fZmlsZSA9ICJbTmluY3MgZmlsZV0iCitsZXQgbWVudXRyYW5zX2hlbHBfZGlhbG9nID0gIs1yZCBiZSBhIGvtduFudCBzevN0IHZhZ3kgcGFyYW5jc290OlxuXG4gQSBzevZ2ZWdiZXZpdGVsaSBwYXJhbmNzb2sgZWzpIO1yaiBpXy10IChwbC46IGlfQ1RSTC1YKVxuQSBzb3JzemVya2VzevUgcGFyYW5jc29rIGVs6SBjXy10IChwbC46IGNfPERlbD4pXG5BIHbhbHRvevNrYXQgYSAnIGplbGxlbCB2ZWRkIGv2cvxsIChwbC46ICdzaGlmdHdpZHRoJykiCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAizXJkIGJlIGEga2VyZXNldHQgZuFqbCBsZWhldHPpZ2VzIGVs6XLpc2kg+nRqYWl0LCB2ZXNzevV2ZWwgZWx24Wxhc3p0dmEiCitsZXQgZzptZW51dHJhbnNfdGFnc19kaWFsb2cgPSAizXJkIGJlIGEgdGFnIGbhamwgbGVoZXRz6WdlcyBlbOly6XNpIPp0amFpdCwgdmVzc3r1dmVsIGVsduFsYXN6dHZhIgorbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAizXJkIGJlIGEgc3r2dmVnIHN66Wxlc3PpZ+l0ICgwID0gZm9ybeF64XMga2lrYXBjc29sdmEpIgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIlbhbGFzemQga2kgYSBm4WpsIGZvcm3hdHVt4XQiCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9odV9odS51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9odV9odS51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhNGRjYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2h1X2h1LnV0Zi04LnZpbQpAQCAtMCwwICsxLDI0MiBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJSHVuZ2FyaWFuIChNYWd5YXIpCisiIE9yaWdpbmFsIFRyYW5zbGF0aW9uOglab2x0w6FuIMOBcnDDoWRmZnkKKyIgTWFpbnRhaW5lZCBCeToJS29udHJhIEdlcmdlbHkgPGtnZXJnZWx5QG1jbC5odT4KKyIgTGFzdCBDaGFuZ2U6CQkyMDA0IEp1biAxMAorIgorIiBUaGlzIGZpbGUgd2FzIGNvbnZlcnRlZCBmcm9tIG1lbnVfaHVfaHUuaXNvXzg4NTktMi52aW0uICBTZWUgdGhlcmUgZm9yCisiIHJlbWFya3MuCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCitzY3JpcHRlbmNvZGluZyB1dGYtOAorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJJlPDumfDsworbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgnDgSZ0dGVraW50w6lzPFRhYj48RjE+CittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJJkhPR1lBTlwgbGlua2VrCittZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJJkvDqXppa8O2bnl2CittZW51dHJhbnMgJkNyZWRpdHMJCSZTemVyesWRayxcIGvDtnN6w7ZuZXRlaworbWVudXRyYW5zIENvJnB5aW5nCQkmVsOpZGplZ3kKK21lbnV0cmFucyBPJnJwaGFucwkJw4FydsOhJmsKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJS2UmcmVzw6lzXC5cLlwuCittZW51dHJhbnMgJlZlcnNpb24JCSZWZXJ6acOzCittZW51dHJhbnMgJkFib3V0CQkmTsOpdmplZ3kKKyIgRmlsZSBtZW51CittZW51dHJhbnMgJkZpbGUJCQkJJkbDoWpsCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQlNZWcmbnlpdMOhc1wuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCU1lZ255aXTDoXNcIMO6alwgYSZibGFrYmFcLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQnDmmpcIGRvayZ1bWVudHVtPFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQlCZSZ6w6Fyw6FzPFRhYj46Y2xvc2UKK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCQkmTWVudMOpczxUYWI+OncKK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4Jw5Zzc3plJmhhc29ubMOtdMOhc1wuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4Jw5Zzc3plaGFzb25sw610w6FzXCAmcGF0Y2hcIC1lbFwuXC5cLgorbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdglNZW50w6kmc1wgbcOhc2vDqW50XC5cLlwuPFRhYj46dworbWVudXRyYW5zICZQcmludAkJCU55b210JmF0w6FzCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJTWVudMOpc1wgw6lzXCBrJmlsw6lww6lzPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCSZLaWzDqXDDqXM8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCVMmemVya2VzenTDqXMKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSZWaXNzemF2b27DoXM8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQlNw6kmZ2lzPFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQkmSXNtw6l0PFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCSZLaXbDoWfDoXM8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQkmTcOhc29sw6FzPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCSZCZWlsbGVzenTDqXM8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQlCZXJha8Ohc1wgZSZsw6k8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQlCZXJha8Ohc1wgJm3DtmfDqTxUYWI+XXAKK21lbnV0cmFucyAmRGVsZXRlPFRhYj54CQkJJlTDtnJsw6lzPFRhYj54CittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHCQlBJnpcIMO2c3N6ZXMga2lqZWzDtmzDqXNlPFRhYj5nZ3ZHCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCQlLZSZyZXPDqXNcLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuCUtlcmVzw6lzXCDDqXNcIGMmc2VyZVwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjolcwlLZXJlc8Opc1wgw6lzXCBjJnNlcmU8VGFiPjolcworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2UJCUtlcmVzw6lzXCDDqXNcIGMmc2VyZQorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjpzCUtlcmVzw6lzXCDDqXNcIGMmc2VyZTxUYWI+OnMKK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJJkFibGFrXCBiZcOhbGzDrXTDoXNhaQorbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQnDgWwmdGFsw6Fub3NcIGJlw6FsbMOtdMOhc29rCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQkmRsOhamxcIGJlw6FsbMOtdMOhc29rCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCSZTesOtbmVrCittZW51dHJhbnMgJktleW1hcAkJCUJpbGxlbnQmecWxemV0a2lvc3p0w6FzCisKKyIgRWRpdC5HbG9iYWwgU2V0dGluZ3MKK21lbnV0cmFucyBUb2dnbGVcIFBhdHRlcm5cICZIaWdobGlnaHQ8VGFiPjpzZXRcIGhscyEJJk1pbnRhXCBraWVtZWzDqXNcIEJFL0tJPFRhYj46c2V0XCBobHMhCittZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljIQkmS2lzL25hZ3liZXTFsVwgYXpvbm9zL2vDvGzDtm5iw7Z6xZE8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCSZaw6Fyw7NqZWxww6FyXCBtdXRhdMOhc2FcIEJFL0tJPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCSZLdXJ6b3JcIGFibGFrXCBzesOpbMOpdMWRbAorbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQkmVmlydHXDoWxpc1wgc3plcmtlc3p0w6lzCittZW51dHJhbnMgTmV2ZXIJCQkJJlNvaGEKK21lbnV0cmFucyBCbG9ja1wgU2VsZWN0aW9uCQkmQmxva2tcIGtpamVsw7Zsw6lzZWtvcgorbWVudXRyYW5zIEluc2VydFwgbW9kZQkJCVMmesO2dmVnXCBiZXZpdGVsZWtvcgorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJQmwmb2trXCBraWplbMO2bMOpc2Vrb3JcIMOpc1wgc3rDtnZlZ1wgYmV2aXRlbGVrb3IKK21lbnV0cmFucyBBbHdheXMJCQkmTWluZGlnCittZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJJlN6w7Z2ZWdiZXZpdGVsaVwgbcOzZFwgQkUvS0k8VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEJJlZpXCBrb21wYXTDrWJpbGlzXCBtw7NkXCBCRS9LaTxUYWI+OnNldFwgY3AhCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkJS2UmcmVzw6lzaVwgw7p0dm9uYWxcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJJlRhZ1wgZsOhamxcLlwuXC4KK21lbnV0cmFucyBUb2dnbGVcICZUb29sYmFyCQkmRXN6a8O2enTDoXJcIEJFL0tJCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJJlbDrXpzemludGVzXCBHw7ZyZ2V0xZFzw6F2XCBCRS9LSQorbWVudXRyYW5zIFRvZ2dsZVwgJkxlZnRcIFNjcm9sbGJhcgkmQmFsXCBnw7ZyZ2V0xZFzw6F2XCBCRS9LSQorbWVudXRyYW5zIFRvZ2dsZVwgJlJpZ2h0XCBTY3JvbGxiYXIJJkpvYmJcIGfDtnJnZXTFkXPDoXZcIEJFL0tJCittZW51dHJhbnMgTm9uZQkJCQlOaW5jcworCisiIEVkaXQuRmlsZSBTZXR0aW5ncworbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCVNvcnN6w6EmbW96w6FzXCBCRS9LSTxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCSZMaXN0YVwgbcOzZFwgQkUvS0k8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJCVNvciZ0w7Zyw6lzXCBCRS9LSTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyIQlTb3J0w7Zyw6lzXCBzJnrDs3bDqWdla27DqWxcIEJFL0tJPHRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCQkmVGFiXCBraWZlanTDqXNcIEJFL0tJPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQkmQXV0b21hdGlrdXNcIGJlaMO6esOhc1wgQkUvS0k8VGFiPjpzZXRcIGFpIQorbWVudXRyYW5zIFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCQkmQy1iZWjDunrDoXNcIEJFL0tJPFRhYj46c2V0XCBjaW4hCittZW51dHJhbnMgJlNoaWZ0d2lkdGgJCQkJCSZCZWjDunrDoXNcIG3DqXJ0w6lrZVwgKCdzdycpCittZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCQkJVCZhYnVsw6Fsw6FzXCBtw6lydMOpa2VcICgnc3RzJykKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQkJJlN6w7Z2ZWdcIHN6w6lsZXNzw6lnZVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkJJkbDoWpsZm9ybcOhdHVtXC5cLlwuCisKKyIgVG9vbHMgbWVudQorbWVudXRyYW5zICZUb29scwkJCSZFc3prw7Z6w7ZrCittZW51dHJhbnMgJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQkmVWdyw6FzXCBhXCB0YWdob3o8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkJVWdyw6FzXCAmdmlzc3phPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJJlRhZ1wgZsOhamxcIGvDqXN6w610w6lzZQorbWVudXRyYW5zICZGb2xkaW5nCQkJJkJlaGFqdMOhc29rCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQkmRm9yZMOtdMOhczxUYWI+Om1ha2UKK21lbnV0cmFucyAmTGlzdFwgRXJyb3JzPFRhYj46Y2wJCSZIaWLDoWtcIGxpc3TDoWphPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJw5wmemVuZXRla1wgbGlzdMOhamE8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkJJkvDtnZldGtlesWRXCAmaGliYTxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCSZFbMWResWRXCBoaWJhPFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCSZSw6lnZWJiaVwgbGlzdGE8VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwkmw5pqYWJiXCBsaXN0YTxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdwkJSGliYWFibGFrCittZW51dHJhbnMgJlVwZGF0ZTxUYWI+OmN3aW4JCSZGcmlzc8OtdMOpczxUYWI+OmN3aW4KK21lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQlNJmVnbnlpdMOhczxUYWI+OmNvcGVuCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCQlCZSZ6w6Fyw6FzPFRhYj46Y2Nsb3NlCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAlOb3Jtw6FsLT5IRVhcIG7DqXpldDxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJSEVYLT5Ob3Jtw6FsXCBuw6l6ZXQ8VGFiPjolIXh4ZFwgLXIKK21lbnV0cmFucyAmU2V0XCBDb21waWxlcgkJRm9yZMOtdMOzXCAmbWVnYWTDoXNhCisKKyIgVG9vbHMuRm9sZGluZworbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppCUJlaGFqdMOhc29rXCBCRSYvS0k8VGFiPnppCittZW51dHJhbnMgJlZpZXdcIEN1cnNvclwgTGluZTxUYWI+enYJJkFrdHXDoWxpc1wgc29yXCBsw6F0c3ppazxUYWI+enYKK21lbnV0cmFucyBWaWUmd1wgQ3Vyc29yXCBMaW5lXCBvbmx5PFRhYj56TXp4CSZDc2FrXCBha3R1w6FsaXNcIHNvclwgbMOhdHN6aWs8VGFiPnpNengKK21lbnV0cmFucyBDJmxvc2VcIG1vcmVcIGZvbGRzPFRhYj56bQlLw7Z2ZXRrZXrFkVwgc3ppbnRcIGJlJnrDoXLDoXNhPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0Jw5Zzc3plc1wgaGFqdMOhc1wgJmJlesOhcsOhc2E8VGFiPnpNCittZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cglLw7Z2ZXRrZXrFkVwgc3ppbnRcIGtpJm55aXTDoXNhPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgnDlnNzemVzXCBoYWp0w6FzXCAma2lueWl0w6FzYTxUYWI+elIKK21lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkJQmVoYWp0w6Fzb2tcICZsw6l0cmVob3rDoXNhCittZW51dHJhbnMgTSZhbnVhbAkJCSZLw6l6aQorbWVudXRyYW5zIEkmbmRlbnQJCQlCZSZow7p6w6FzCittZW51dHJhbnMgRSZ4cHJlc3Npb24JCQlLaSZmZWplesOpcworbWVudXRyYW5zIFMmeW50YXgJCQkmU3ppbnRheGlzCittZW51dHJhbnMgJkRpZmYJCQkJJkRpZmYta8O8bMO2bmJzw6lnCittZW51dHJhbnMgTWEmcmtlcgkJCSZKZWzDtmzDqXMKK21lbnV0cmFucyBDcmVhdGVcICZGb2xkPFRhYj56ZgkJw5omalwgYmVoYWp0w6FzPFRhYj56ZgorbWVudXRyYW5zICZEZWxldGVcIEZvbGQ8VGFiPnpkCQlCZWhhanTDoXNcICZ0w7ZybMOpc2U8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJw5ZzcyZ6ZXNcIGJlaGFqdMOhc1wgdMO2cmzDqXNlPFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbCZ1bW5cIHdpZHRoCQlCZWhhanTDoXNva1wgYVwgJm1hcmfDs25cIHhcIG9zemxvcGJhbgorCisiIFRvb2xzLkRpZmYKK21lbnV0cmFucyAmVXBkYXRlCQkmRnJpc3PDrXTDqXMKK21lbnV0cmFucyAmR2V0XCBCbG9jawkJQmxvY2tcICZCRQorbWVudXRyYW5zICZQdXRcIEJsb2NrCQlCbG9ja1wgJktJCisKKworCisiIE5hbWVzIGZvciBidWZmZXIgbWVudS4KK21lbnV0cmFucyAmQnVmZmVycwkJJlB1ZmZlcm9rCittZW51dHJhbnMgJlJlZnJlc2hcIG1lbnUJJkZyaXNzw610w6lzCittZW51dHJhbnMgRGVsZXRlCQkmVMO2cmzDqXMKK21lbnV0cmFucyAmQWx0ZXJuYXRlCQkmQ3NlcmUKK21lbnV0cmFucyAmTmV4dAkJCSZLw7Z2ZXRrZXrFkQorbWVudXRyYW5zICZQcmV2aW91cwkJJkVsxZF6xZEKKworIiBXaW5kb3cgbWVudQorbWVudXRyYW5zICZXaW5kb3cJCQkmQWJsYWsKK21lbnV0cmFucyAmTmV3PFRhYj5eV24JCQnDmiZqPFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJJkZlbG9zenTDoXM8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JRmVsb3N6dMOhc1wgJiMtdmFsPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJRmVsb3N6dMOhc1wgRsO8JmdnxZFsZWdlc2VuPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCcOaalwgJmludMOpesWRCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCUJlJnrDoXLDoXM8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwkmVMO2YmJpXCBiZXrDoXLDoXNhPFRhYj5eV28KK21lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQkJJkvDtnZldGtlesWRPFRhYj5eV3cKK21lbnV0cmFucyBQJnJldmlvdXM8VGFiPl5XVwkJJkVsxZF6xZE8VGFiPl5XVworbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CQkmQXpvbm9zXCBtYWdhc3PDoWc8VGFiPl5XPQorbWVudXRyYW5zICZNYXhcIEhlaWdodDxUYWI+XldfCQlNYSZ4XCBtYWdhc3PDoWc8VGFiPl5XXworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXwkJJk1pblwgbWFnYXNzw6FnPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCU1heFwgJnN6w6lsZXNzw6lnPFRhYj5eV1x8CittZW51dHJhbnMgTWluXCBXaWR0Jmg8VGFiPl5XMVx8CQlNaSZuXCBzesOpbGVzc8OpZzxUYWI+XlcxXHwKK21lbnV0cmFucyBNb3ZlXCAmVG8JCQkmRWxtb3pkw610w6FzCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkJJkZlbDxUYWI+XldLCittZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCQkmTGU8VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCSZCYWxyYTxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCSZKb2JicmE8VGFiPl5XTAorbWVudXRyYW5zIFJvdGF0ZVwgJlVwPFRhYj5eV1IJCUfDtnJkw610w6lzXCAmZmVsZmVsw6k8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJR8O2cmTDrXTDqXNcICZsZWZlbMOpPFRhYj5eV3IKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQkmQmV0xbF0w61wdXNcLlwuXC4KKworIiBUaGUgcG9wdXAgbWVudQorbWVudXRyYW5zICZVbmRvCQkJJlZpc3N6YXZvbsOhcworbWVudXRyYW5zIEN1JnQJCQkmS2l2w6Fnw6FzCittZW51dHJhbnMgJkNvcHkJCQkmTcOhc29sw6FzCittZW51dHJhbnMgJlBhc3RlCQkmQmVpbGxlc3p0w6lzCittZW51dHJhbnMgJkRlbGV0ZQkJJlTDtnJsw6lzCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJS2lqZWzDtmzDqXNcIGJsbyZra8OpbnQKK21lbnV0cmFucyBTZWxlY3RcICZXb3JkCQlTJnrDs1wga2lqZWzDtmzDqXNlCittZW51dHJhbnMgU2VsZWN0XCAmTGluZQkJJlNvclwga2lqZWzDtmzDqXNlCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJQiZsb2trXCBraWplbMO2bMOpc2UKK21lbnV0cmFucyBTZWxlY3RcICZBbGwJCUEmelwgw7Zzc3plc1wga2lqZWzDtmzDqXNlCisKKyIgVGhlIEdVSSB0b29sYmFyCitpZiBoYXMoInRvb2xiYXIiKQorICBpZiBleGlzdHMoIipEb190b29sYmFyX3RtZW51IikKKyAgICBkZWxmdW4gRG9fdG9vbGJhcl90bWVudQorICBlbmRpZgorICBmdW4gRG9fdG9vbGJhcl90bWVudSgpCisgICAgdG1lbnUgVG9vbEJhci5PcGVuCQlNZWdueWl0w6FzCisgICAgdG1lbnUgVG9vbEJhci5TYXZlCQlNZW50w6lzCisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCU1pbmRldCBtZW50aQorICAgIHRtZW51IFRvb2xCYXIuUHJpbnQJCU55b210YXTDoXMKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCVZpc3N6YXZvbsOhcworICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJTcOpZ2lzCisgICAgdG1lbnUgVG9vbEJhci5DdXQJCUtpdsOhZ8OhcworICAgIHRtZW51IFRvb2xCYXIuQ29weQkJTcOhc29sw6FzCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJQmVpbGxlc3p0w6lzCisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQlLZXJlc8OpcworICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJVG92w6FiYiBrZXJlc8OpcworICAgIHRtZW51IFRvb2xCYXIuRmluZFByZXYJS2VyZXPDqXMgdmlzc3phZmVsw6kKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJS2VyZXPDqXMvY3NlcmUKKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCU11bmthbWVuZXQgYmVvbHZhc8OhcworICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24JTXVua2FtZW5ldCBtZW50w6lzCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJVmltIHByb2dyYW0gaW5kw610w6FzCisgICAgdG1lbnUgVG9vbEJhci5NYWtlCQlQcm9qZWt0IMOpcMOtdMOpcworICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCVNoZWxsIGluZMOtdMOhcworICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJVGFnIMOpcMOtdMOpcworICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAlVZ3LDoXMgYSBrdXJ6b3IgYWxhdHRpIHRhZ3JhCisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQlWaW0gc8O6Z8OzCisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscAlLZXJlc8OpcyBhIFZpbSBzw7pnw7NiYW4KKyAgZW5kZnVuCitlbmRpZgorCisiIFN5bnRheCBtZW51CittZW51dHJhbnMgJlN5bnRheAkJCVN6JmludGF4aXMKK21lbnV0cmFucyAmU2hvd1wgZmlsZXR5cGVzXCBpblwgbWVudQlGw6FqbCZ0w61wdXNva1wgbWVuw7wKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seQkJQ3Nha1wgJyZzeW50YXgnCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCQknJmZpbGV0eXBlJ1wgaXMKK21lbnV0cmFucyAmT2ZmCQkJCSZLaQorbWVudXRyYW5zICZNYW51YWwJCQlLw6kmemkKK21lbnV0cmFucyBBJnV0b21hdGljCQkJQSZ1dG9tYXRpa3VzCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCSZCRS9LSVwgZW5uw6lsXCBhXCBmw6FqbG7DoWwKK21lbnV0cmFucyBDbyZsb3JcIHRlc3QJCQkmU3rDrW50ZXN6dAorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJCUtpZW1lbMOpc1wgJnRlc3p0CittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCQkmSFRNTFwgb2xkYWxcIGvDqXN6w610w6lzZQorCisiIGRpYWxvZyB0ZXh0cworbGV0IG1lbnV0cmFuc19ub19maWxlID0gIltOaW5jcyBmaWxlXSIKK2xldCBtZW51dHJhbnNfaGVscF9kaWFsb2cgPSAiw41yZCBiZSBhIGvDrXbDoW50IHN6w7N0IHZhZ3kgcGFyYW5jc290OlxuXG4gQSBzesO2dmVnYmV2aXRlbGkgcGFyYW5jc29rIGVsw6kgw61yaiBpXy10IChwbC46IGlfQ1RSTC1YKVxuQSBzb3JzemVya2VzesWRIHBhcmFuY3NvayBlbMOpIGNfLXQgKHBsLjogY188RGVsPilcbkEgdsOhbHRvesOza2F0IGEgJyBqZWxsZWwgdmVkZCBrw7Zyw7xsIChwbC46ICdzaGlmdHdpZHRoJykiCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAiw41yZCBiZSBhIGtlcmVzZXR0IGbDoWpsIGxlaGV0c8OpZ2VzIGVsw6lyw6lzaSDDunRqYWl0LCB2ZXNzesWRdmVsIGVsdsOhbGFzenR2YSIKK2xldCBnOm1lbnV0cmFuc190YWdzX2RpYWxvZyA9ICLDjXJkIGJlIGEgdGFnIGbDoWpsIGxlaGV0c8OpZ2VzIGVsw6lyw6lzaSDDunRqYWl0LCB2ZXNzesWRdmVsIGVsdsOhbGFzenR2YSIKK2xldCBnOm1lbnV0cmFuc190ZXh0d2lkdGhfZGlhbG9nID0gIsONcmQgYmUgYSBzesO2dmVnIHN6w6lsZXNzw6lnw6l0ICgwID0gZm9ybcOhesOhcyBraWthcGNzb2x2YSkiCitsZXQgZzptZW51dHJhbnNfZmlsZWZvcm1hdF9kaWFsb2cgPSAiVsOhbGFzemQga2kgYSBmw6FqbCBmb3Jtw6F0dW3DoXQiCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9pdC5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfaXQubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzNiYjQxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfaXQubGF0aW4xLnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUl0YWxpYW4KKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfaXRfaXQubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfaXQudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfaXQudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzA0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9pdC51dGYtOC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglJdGFsaWFuIGZvciBVVEYtOCBlbmNvZGluZworCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9pdF9pdC5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9pdF9pdC5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfaXRfaXQubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGE1OGUxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfaXRfaXQubGF0aW4xLnZpbQpAQCAtMCwwICsxLDMyNyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJSXRhbGlhbiAvIEl0YWxpYW5vCisiIE1haW50YWluZXI6CQlBbnRvbmlvIENvbG9tYm8gPGFudG9uaW8uY29sb21ib0BqcmMuaXQ+CisiCQkJVmxhZCBTYW5kcmluaSA8c2F0b3I3MkBsaWJlcm8uaXQ+CisiIExhc3QgQ2hhbmdlOgkyMDA0IE1hciAzCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCitzY3JpcHRlbmNvZGluZyBpc28tODg1OS0xCisKKyIgSGVscCAvIEFpdXRvCittZW51dCAmSGVscAkJCSZBaXV0bworbWVudXQgJk92ZXJ2aWV3PFRhYj48RjE+CSZQYW5vcmFtaWNhPFRhYj48RjE+CittZW51dCAmVXNlclwgTWFudWFsCQlNYW51YWxlXCAmVXRlbnRlCittZW51dCAmSG93LXRvXCBsaW5rcwlDbyZtZVwuXC5cLgorIm1lbnV0ICZHVUkJCQkmR1VJCittZW51dCAmQ3JlZGl0cwkJQ3ImZWRpdGkKK21lbnV0IENvJnB5aW5nCQlDJm9waWUKK21lbnV0ICZTcG9uc29yL1JlZ2lzdGVyICZTcG9uc29yL1JlZ2lzdHJhemlvbmUKK21lbnV0IE8mcnBoYW5zCQlPJnJmYW5pCisibWVudXQgJkZpbmRcLlwuXC4JCSZDZXJjYVwuXC5cLgorIk5PVEE6IGZhIGNvbmZsaXR0byBjb24gJ2NlcmNhJyBuZWwgbWVudSAnbW9kaWZpY2EnCittZW51dCAmVmVyc2lvbgkJJlZlcnNpb25lCittZW51dCAmQWJvdXQJCSZJbnRybworCitsZXQgZzptZW51dHJhbnNfaGVscF9kaWFsb2cgPSAiQmF0dGkgdW4gY29tYW5kbyBvIHVuYSBwYXJvbGEgcGVyIGNlcmNhcmUgYWl1dG86XG5cblByZW1ldHRpIGlfIHBlciBjb21hbmRpIGluIG1vZGFsaXTgIElucHV0IChhZC5lcy46IGlfQ1RSTC1YKVxuUHJlbWV0dGkgY18gcGVyIGNvbWFuZGkgY2hlIGVkaXRhbm8gbGEgbGluZWEtY29tYW5kaSAoYWQuZXMuOiBjXzxEZWw+KVxuUHJlbWV0dGkgJyBwZXIgdW4gbm9tZSBkaSBvcHppb25lIChhZC5lcy46ICdzaGlmdHdpZHRoJykiCisKKyIgRmlsZSBtZW51CisibWVudXQgJkZpbGUJCQkJJkZpbGUKKyIKK21lbnV0ICZPcGVuXC5cLlwuPFRhYj46ZQkJJkFwcmlcLlwuXC48VGFiPjplCittZW51dCBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCUEmcHJpXCBudW92YVwgRmluZXN0cmFcLlwuXC48VGFiPjpzcAorbWVudXQgJk5ldzxUYWI+OmVuZXcJCSZOdW92bzxUYWI+OmVuZXcKK21lbnV0ICZDbG9zZTxUYWI+OmNsb3NlCQkmQ2hpdWRpPFRhYj46Y2xvc2UKK21lbnV0ICZTYXZlPFRhYj46dwkJCSZTYWx2YTxUYWI+OncKK21lbnV0IFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdglTYWx2YVwgJmNvblwgbm9tZVwuXC5cLjxUYWI+OnNhdgorCitpZiBoYXMoImRpZmYiKQorICAgIG1lbnV0IFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLglGaW5lc3RyYVwgJkRpZmZlcmVuemFcIGNvblwuXC5cLgorICAgIG1lbnV0IFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JRmluZXN0cmFcIFBhdGMmaFwgZGFcLlwuXC4KK2VuZGlmCisKK21lbnV0ICZQcmludAkJCVMmdGFtcGEKK21lbnV0IFNhJnZlLUV4aXQ8VGFiPjp3cWEJCVNhJmx2YVwgZWRcIGVzY2k8VGFiPjp3cWEKK21lbnV0IEUmeGl0PFRhYj46cWEJCQkmRXNjaTxUYWI+OnFhCisKKyIgRWRpdCAvIE1vZGlmaWNhCisKK21lbnV0ICZFZGl0CQkJCSZNb2RpZmljYQorbWVudXQgJlVuZG88VGFiPnUJCQkmQW5udWxsYTxUYWI+dQorbWVudXQgJlJlZG88VGFiPl5SCQkJJlJpcHJpc3RpbmE8VGFiPl5SCittZW51dCBSZXAmZWF0PFRhYj5cLgkJUmkmcGV0aTxUYWI+XC4KK21lbnV0IEN1JnQ8VGFiPiIreAkJCSZUYWdsaWE8VGFiPiIreAorbWVudXQgJkNvcHk8VGFiPiIreQkJCSZDb3BpYTxUYWI+Iit5CittZW51dCAmUGFzdGU8VGFiPiIrZ1AJCSZJbmNvbGxhPFRhYj4iK2dQCittZW51dCBQdXRcICZCZWZvcmU8VGFiPltwCQkmTWV0dGlcIGRhdmFudGk8VGFiPltwCittZW51dCBQdXRcICZBZnRlcjxUYWI+XXAJCU0mZXR0aVwgZGlldHJvPFRhYj5dcAorbWVudXQgJkRlbGV0ZTxUYWI+eAkJCUNhbmNlJmxsYTxUYWI+eAorbWVudXQgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHCQlTZWxlemlvbmFcICZ0dXR0bzxUYWI+Z2dWRworbWVudXQgJlNlbGVjdFwgQWxsPFRhYj5nZ1ZHCQlTZWxlemlvbmFcICZ0dXR0bzxUYWI+Z2dWRworbWVudXQgJkZpbmRcLlwuXC4JCQkmQ2VyY2FcLlwuXC4KK21lbnV0IEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JJlNvc3RpdHVpc2NpXC5cLlwuCittZW51dCBTZXR0aW5nc1wgJldpbmRvdwkJJkZpbmVzdHJhXCBJbXBvc3RhemlvbmkKK21lbnV0ICZHbG9iYWxcIFNldHRpbmdzCQlJbXBvc3RhemlvbmlcICZnbG9iYWxpCittZW51dCBRdWVzdGlvbgkJCURvbWFuZGEKKworIiBFZGl0IC8gTW9kaWZpY2EgSW1wb3N0YXppb25pIEdsb2JhbGkKK21lbnV0ICZHbG9iYWxcIFNldHRpbmdzCUltcG9zdGF6aW9uaVwgJkdsb2JhbGkKK21lbnV0IFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQkmRXZpZGVuemlhXCByaWNlcmNoZVwgU+wvTm88VGFiPjpzZXRcIGhscyEKK21lbnV0IFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEJCSZJZ25vcmFcIG1haXVzY1wuLW1pbnVzY1wuXCBT7C9ObzxUYWI+OnNldFwgaWMhCittZW51dCBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQlJbmRpY2FcICZDb3JyaXNwb25kZW50ZVwgU+wvTm88VGFiPjpzZXRcIHNtIQorCittZW51dCAmQ29udGV4dFwgbGluZXMJJkxpbmVlXCBkaVwgY29udGVzdG8KK21lbnV0ICZWaXJ0dWFsXCBFZGl0CQkmRWRpdFwgVmlydHVhbGUKKworbWVudXQgTmV2ZXIJCU1haQorbWVudXQgQmxvY2tcIFNlbGVjdGlvbgkJU2VsZXppb25lXCBCbG9jY28KK21lbnV0IEluc2VydFwgbW9kZQlNb2RhbGl04FwgSW5zZXJpbWVudG8KK21lbnV0IEJsb2NrXCBhbmRcIEluc2VydAlTZWxlemlvbmVcIEJsb2NjbytJbnNlcmltZW50bworbWVudXQgQWx3YXlzCQlTZW1wcmUKKworbWVudXQgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJJk1vZGFsaXTgXCBJbnNlcmltZW50b1wgU+wvTm88VGFiPjpzZXRcIGltIQorbWVudXQgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwIQlDJm9tcGF0aWJpbGVcIFZpXCBT7C9ObzxUYWI+OnNldFwgY3AhCittZW51dCBTZWFyY2hcICZQYXRoXC5cLlwuCUNhJm1taW5vXCBkaVwgcmljZXJjYVwuXC5cLgorbWVudXQgVGEmZ1wgRmlsZXNcLlwuXC4JCUZpbGVcIFRhJmdcLlwuXC4KKyIKKyIgT3B6aW9uaSBHVUkKK21lbnV0IFRvZ2dsZVwgJlRvb2xiYXIJQmFycmFcIFMmdHJ1bWVudGlcIFPsL05vCittZW51dCBUb2dnbGVcICZCb3R0b21cIFNjcm9sbGJhcglCYXJyYVwgU2NvcnJpbWVudG9cIGluXCAmZm9uZG9cIFPsL05vCittZW51dCBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJQmFycmFcIFNjb3JyaW1lbnRvXCBhXCAmc2luaXN0cmFcIFPsL05vCittZW51dCBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCUJhcnJhXCBTY29ycmltZW50b1wgYVwgJmRlc3RyYVwgU+wvTm8KKworbGV0IGc6bWVudXRyYW5zX3BhdGhfZGlhbG9nID0gIkJhdHRpIHBlcmNvcnNvIGRpIHJpY2VyY2EgcGVyIGkgZmlsZS5cblNlcGFyYSBmcmEgbG9ybyBpIG5vbWkgZGkgZGlyZWN0b3J5IGNvbiB1bmEgdmlyZ29sYS4iCitsZXQgZzptZW51dHJhbnNfdGFnc19kaWFsb2cgPSAiQmF0dGkgbm9tZSBkZWkgZmlsZSBkaSB0YWcuXG5TZXBhcmEgZnJhIGxvcm8gaSBub21pIGRpIGRpcmVjdG9yeSBjb24gdW5hIHZpcmdvbGEuIgorCisiIEVkaXQgLyBJbXBvc3RhemlvbmkgRmlsZQorbWVudXQgRiZpbGVcIFNldHRpbmdzCSZJbXBvc3RhemlvbmlcIEZpbGUKKworIiBCb29sZWFuIG9wdGlvbnMKK21lbnV0IFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCSZOdW1lcmF6aW9uZVwgXCBT7C9ObzxUYWI+OnNldFwgbnUhCittZW51dCBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQkJTW9kYWxpdOBcICZMaXN0YVwgU+wvTm88VGFiPjpzZXRcIGxpc3QhCittZW51dCBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQkJTGluZWVcICZDb250aW51YXRlXCBT7C9ObzxUYWI+OnNldFwgd3JhcCEKK21lbnV0IFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCUFcIGNhcG9cIGFsbGFcICZwYXJvbGFcIFPsL05vPFRhYj46c2V0XCBsYnIhCittZW51dCBUb2dnbGVcICZleHBhbmQtdGFiPFRhYj46c2V0XCBldCEJCSZFc3BhbmRpXCBUYWJ1bGF6aW9uZVwgU+wvTm88VGFiPjpzZXRcIGV0IQorbWVudXQgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQlJbmRlbnRhemlvbmVcICZhdXRvbWF0aWNhXCBT7C9ObzxUYWI+OnNldCBhaSEKK21lbnV0IFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCUluZGVudGF6aW9uZVwgc3RpbGVcICZDXCBT7C9ObzxUYWI+OnNldCBjaW4hCisKKyIgYWx0cmUgb3B6aW9uaQorbWVudXQgJlNoaWZ0d2lkdGgJCQkmU3BhemlcIFJpZW50cmFuemEKK21lbnV0IFNvZnRcICZUYWJzdG9wCQkmVGFidWxhemlvbmVcIFNvZnR3YXJlCittZW51dCBUZSZ4dFwgV2lkdGhcLlwuXC4JCUx1bmdoZSZ6emFcIFJpZ2FcLlwuXC4KK21lbnV0ICZGaWxlXCBGb3JtYXRcLlwuXC4JRm9ybWF0b1wgJkZpbGVcLlwuXC4KKworbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAiQmF0dGkgbnVvdmEgbHVuZ2hlenphIGxpbmVhICgwIHBlciBpbmliaXJlIGxhIGZvcm1hdHRhemlvbmUpOiAiCisKK2xldCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2RpYWxvZyA9ICJTY2VnbGkgZm9ybWF0byBjb24gY3VpIHNjcml2ZXJlIGlsIGZpbGUiCisKK21lbnV0IEMmb2xvclwgU2NoZW1lCQlTY2hlbWFcIEMmb2xvcmkKKworbWVudXQgZGVmYXVsdAkJbm9ybWFsZQorbWVudXQgREVGQVVMVAkJTk9STUFMRQorbWVudXQgZXZlbmluZwkJbm90dHVybm8KK21lbnV0IEVWRU5JTkcJCU5PVFRVUk5PCittZW51dCBtb3JuaW5nCQlkaXVybm8KK21lbnV0IE1PUk5JTkcJCURJVVJOTworbWVudXQgc2hpbmUJCWJyaWxsYW50ZQorbWVudXQgU0hJTkUJCUJSSUxMQU5URQorbWVudXQgcGVhY2hwdWZmCQlwZXNjYQorbWVudXQgUEVBQ0hQVUYJCVBFU0NBCisKK21lbnV0ICZLZXltYXAJCQkJJk1hcHBhXCB0YXN0aWVyYQorCittZW51dCBOb25lCQluZXNzdW5hCittZW51dCBhY2NlbnRzCQlhY2NlbnRpCittZW51dCBBQ0NFTlRTCQlBQ0NFTlRJCittZW51dCBoZWJyZXcJCWVicmFpY28KK21lbnV0IEhFQlJFVwkJRUJSQUlDTworbWVudXQgaGVicmV3X2lzby04ODU5LTggZWJyYWljb19pc28tODg1OS04CittZW51dCBoZWJyZXdfY3AxMjU1CWVicmFpY29fY3AxMjU1CittZW51dCBoZWJyZXdfdXRmLTgJZWJyYWljb191dGYtOAorbWVudXQgaGVicmV3cF9pc28tODg1OS04IGVicmFpY29fcF9pc28tODg1OS04CittZW51dCBIRUJSRVctCQlFQlJBSUNPKworbWVudXQgaGVicmV3cAkJRUJSQUlDT1AKK21lbnV0IEhFQlJFV1AJCUVCUkFJQ09QCittZW51dCBydXNzaWFuLWpjdWtlbgljaXJpbGxpY28tamN1a2VuCittZW51dCBydXNzaWFuLWpjdWtlbndpbgljaXJpbGxpY28tamN1a2VuLXdpbgorbWVudXQgUlVTU0lBTgkJQ0lSSUxMSUNPCittZW51dCBSVVNTSUFOLQkJQ0lSSUxMSUNPLQorCittZW51dCBTZWxlY3RcIEZvJm50XC5cLlwuCQlTY2VnbGlcICZGb250XC5cLlwuCisKKyIgTWVudSBzdHJ1bWVudGkgcHJvZ3JhbW1hemlvbmUKK21lbnV0ICZUb29scwkJCSZTdHJ1bWVudGkKKworbWVudXQgJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQkmVmFpXCBhXCBxdWVzdGFcIFRhZzxUYWI+Z15dCittZW51dCBKdW1wXCAmYmFjazxUYWI+XlQJCVRvcm5hXCAmaW5kaWV0cm88VGFiPl5UCittZW51dCBCdWlsZFwgJlRhZ3NcIEZpbGUJCUNvc3RydWlzY2lcIEZpbGVcICZUYWdzXAorCisiIE1lbnUgcGllZ2F0dXJlIC8gRm9sZAoraWYgaGFzKCJmb2xkaW5nIikKKyAgbWVudXQgJkZvbGRpbmcJCQkJCSZQaWVnYXR1cmUKKyAgIiBhcHJpIGUgY2hpdWRpIHBpZWdhdHVyZQorICBtZW51dCAmRW5hYmxlL0Rpc2FibGVcIGZvbGRzPFRhYj56aQkJUGkmZWdhdHVyZVwgU+wvTm88VGFiPnppCisgIG1lbnV0ICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CQkJJlZlZGlcIGxpbmVhXCBjb2xcIEN1cnNvcmU8VGFiPnp2CisgIG1lbnV0IFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJCVZlZGlcICZzb2xvXCBsaW5lYVwgY29sXCBDdXJzb3JlPFRhYj56TXp4CisgIG1lbnV0IEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCQkJQyZoaXVkaVwgcGn5XCBQaWVnYXR1cmU8VGFiPnptCisgIG1lbnV0ICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JCQkmQ2hpdWRpXCB0dXR0ZVwgbGVcIFBpZWdhdHVyZTxUYWI+ek0KKyAgbWVudXQgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cgkJCUEmcHJpXCBwaflcIFBpZWdhdHVyZTxUYWI+enIKKyAgbWVudXQgJk9wZW5cIGFsbFwgZm9sZHM8VGFiPnpSCQkJJkFwcmlcIHR1dHRlXCBsZVwgUGllZ2F0dXJlPFRhYj56UgorICAiIG1ldG9kbyBwaWVnYXR1cmEKKyAgbWVudXQgRm9sZFwgTWV0JmhvZAkJCQlNZXRvJmRvXCBQaWVnYXR1cmEKKyAgbWVudXQgTSZhbnVhbAkJCQkJJk1hbnVhbGUKKyAgbWVudXQgSSZuZGVudAkJCQkJJk5pZGlmaWNhemlvbmUKKyAgbWVudXQgRSZ4cHJlc3Npb24JCQkJCSZFc3ByZXNzaW9uZVwgUmVnXC4KKyAgbWVudXQgUyZ5bnRheAkJCQkJJlNpbnRhc3NpCisgIG1lbnV0ICZEaWZmCQkJCQkmRGlmZmVyZW56YQorICBtZW51dCBNYSZya2VyCQkJCQlNYXImY2F0dXJhCisgICIgY3JlYSBlIGNhbmNlbGxhIHBpZWdhdHVyZQorICBtZW51dCBDcmVhdGVcICZGb2xkPFRhYj56ZgkJCUNyZWFcICZQaWVnYXR1cmE8VGFiPnpmCisgIG1lbnV0ICZEZWxldGVcIEZvbGQ8VGFiPnpkCQkJJkxldmFcIFBpZWdhdHVyYTxUYWI+emQKKyAgbWVudXQgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJCQlMZXZhXCAmdHV0dGVcIGxlXCBQaWVnYXR1cmU8VGFiPnpECisgICIgbW92aW1lbnRpIGFsbCdpbnRlcm5vIGRlbGxlIHBpZWdhdHVyZQorICBtZW51dCBGb2xkXCBjb2wmdW1uXCB3aWR0aAkJCUxhcmdoZXp6YVwgcGllZ2F0JnVyZVwgaW5cIGNvbG9ubmUKK2VuZGlmICAiIGhhcyBmb2xkaW5nCisKK2lmIGhhcygiZGlmZiIpCisgIG1lbnV0ICZEaWZmCQkJCQkmRGlmZmVyZW56YQorICAiCisgIG1lbnV0ICZVcGRhdGUJCQkJCSZBZ2dpb3JuYQorICBtZW51dCAmR2V0XCBCbG9jawkJCQkJJkltcG9ydGFcIERpZmZlcmVuemUKKyAgbWVudXQgJlB1dFwgQmxvY2sJCQkJCSZFc3BvcnRhXCBEaWZmZXJlbnplCitlbmRpZiAgIiBoYXMgZGlmZgorCittZW51dCAmTWFrZTxUYWI+Om1ha2UJCUVzZWd1aVwgJk1ha2U8VGFiPjptYWtlCisKK21lbnV0ICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJTGlzdGFcICZFcnJvcmk8VGFiPjpjbAorbWVudXQgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCUxpc3RhXCAmTWVzc2FnZ2k8VGFiPjpjbCEKK21lbnV0ICZOZXh0XCBFcnJvcjxUYWI+OmNuCQlFcnJvcmVcIFMmdWNjZXNzaXZvPFRhYj46Y24KK21lbnV0ICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAlFcnJvcmVcICZQcmVjZWRlbnRlPFRhYj46Y3AKK21lbnV0ICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJTGlzdGFcIG1lbiZvXCByZWNlbnRlPFRhYj46Y29sZAorbWVudXQgTiZld2VyXCBMaXN0PFRhYj46Y25ldwlMaXN0YVwgcGn5XCByZWNlJm50ZTxUYWI+OmNuZXcKKworbWVudXQgRXJyb3JcICZXaW5kb3cJCSZGaW5lc3RyYVwgZXJyb3JpCisKK21lbnV0ICZVcGRhdGU8VGFiPjpjd2luCQlBJmdnaW9ybmE8VGFiPjpjd2luCittZW51dCAmT3BlbjxUYWI+OmNvcGVuCQkmQXByaTxUYWI+OmNvcGVuCittZW51dCAmQ2xvc2U8VGFiPjpjY2xvc2UJJkNoaXVkaTxUYWI+OmNjbG9zZQorCittZW51dCAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCSZDb252ZXJ0aVwgYVwgRXNhZGVjaW1hbGU8VGFiPjolIXh4ZAorbWVudXQgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJQ29udmUmcnRpXCBkYVwgRXNhZGVjaW1hbGU8VGFiPjolIXh4ZFwgLXIKKworbWVudXQgJlNldFwgQ29tcGlsZXIJCUltcG8mc3RhXCBDb21waWxhdG9yZQorCisiIEJ1ZmZlcnMgLyBCdWZmZXIKK21lbnV0ICZCdWZmZXJzCQkmQnVmZmVyCisKK21lbnV0ICZSZWZyZXNoXCBtZW51CQkJCUEmZ2dpb3JuYVwgbWVudQorbWVudXQgJkRlbGV0ZQkJJkVsaW1pbmEKK21lbnV0ICZBbHRlcm5hdGUJCSZBbHRlcm5hdG8KK21lbnV0ICZOZXh0CQkJJlN1Y2Nlc3Npdm8KK21lbnV0ICZQcmV2aW91cwkJJlByZWNlZGVudGUKK21lbnV0IFtOb1wgRmlsZV0JCVtOZXNzdW5cIEZpbGVdCisiIFN5bnRheCAvIFNpbnRhc3NpCittZW51dCAmU3ludGF4CQkmU2ludGFzc2kKK21lbnV0ICZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51CU1vJnN0cmFcIHRpcGlcIGRpXCBmaWxlXCBuZWxcIG1lbnUKK21lbnV0IFNldFwgJyZzeW50YXgnXCBvbmx5CUF0dGl2YVwgc29sb1wgXCAnJnN5bnRheCcKK21lbnV0IFNldFwgJyZmaWxldHlwZSdcIHRvbwlBdHRpdmFcIGFuY2hlXCAnJmZpbGV0eXBlJworbWVudXQgJk9mZgkJCSZEaXNhdHRpdmEKK21lbnV0ICZNYW51YWwJCSZNYW51YWxlCittZW51dCBBJnV0b21hdGljCQlBJnV0b21hdGljbworbWVudXQgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCUF0dGl2YVwgU+wvTm9cIHN1XCBxdWVzJnRvXCBmaWxlCittZW51dCBDbyZsb3JcIHRlc3QJCVRlc3RcICZDb2xvcmkKK21lbnV0ICZIaWdobGlnaHRcIHRlc3QJVGVzdFwgJkV2aWRlbnppYW1lbnRvCittZW51dCAmQ29udmVydFwgdG9cIEhUTUwJQ29udmVydGlcIGFkXCAmSFRNTAorCitsZXQgZzptZW51dHJhbnNfbm9fZmlsZSA9ICJbU2VuemEgbm9tZV0iCisKKyIgV2luZG93IC8gRmluZXN0cmEKK21lbnV0ICZXaW5kb3cJCQkmRmluZXN0cmEKKworbWVudXQgJk5ldzxUYWI+XlduCQkJJk51b3ZhPFRhYj5eV24KK21lbnV0IFMmcGxpdDxUYWI+XldzCQkmRGl2aWRpXCBsb1wgc2NoZXJtbzxUYWI+XldzCittZW51dCBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCUQmaXZpZGlcIHZlcnNvXCAjPFRhYj5eV15eCittZW51dCBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdglEaSZ2aWRpXCB2ZXJ0aWNhbG1lbnRlPFRhYj5eV3YKK21lbnV0IFNwbGl0XCBGaWxlXCBFJnhwbG9yZXIJQWdnaXVuZ2lcIGZpbmVzdHJhXCBFJnhwbG9yZXIKKworbWVudXQgJkNsb3NlPFRhYj5eV2MJCSZDaGl1ZGk8VGFiPl5XYworbWVudXQgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvCUMmaGl1ZGlcIGFsdHJhKGUpPFRhYj5eV28KKworbWVudXQgTW92ZVwgJlRvCQkJJk11b3ZpXCB2ZXJzbworCittZW51dCAmVG9wPFRhYj5eV0sJCQkmQ2ltYTxUYWI+XldLCittZW51dCAmQm90dG9tPFRhYj5eV0oJCSZGb25kbzxUYWI+XldKCittZW51dCAmTGVmdFwgc2lkZTxUYWI+XldICQlMYXRvXCAmU2luaXN0cm88VGFiPl5XSAorbWVudXQgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCUxhdG9cICZEZXN0cm88VGFiPl5XTAorbWVudXQgUm90YXRlXCAmVXA8VGFiPl5XUgkJUnVvdGFcIHZlcnNvXCBsJyZhbHRvPFRhYj5eV1IKK21lbnV0IFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJUnVvdGFcIHZlcnNvXCBpbFwgJmJhc3NvPFRhYj5eV3IKKworbWVudXQgJkVxdWFsXCBTaXplPFRhYj5eVz0JCSZVZ3VhbGVcIGFtcGllenphPFRhYj5eVz0KK21lbnV0ICZNYXhcIEhlaWdodDxUYWI+XldfCQkmQWx0ZXp6YVwgbWFzc2ltYTxUYWI+XldfCittZW51dCBNJmluXCBIZWlnaHQ8VGFiPl5XMV8JCUEmbHRlenphXCBtaW5pbWE8VGFiPl5XMV8KK21lbnV0IE1heFwgJldpZHRoPFRhYj5eV1x8CQlMYXJnaGV6emFcIG1hc3NpbWE8VGFiPl5XXHwKK21lbnV0IE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJTGFyZ2hlenphXCBtaW5pbWE8VGFiPl5XMVx8CisKKyIgVGhlIHBvcHVwIG1lbnUKK21lbnV0ICZVbmRvCQkJJkFubnVsbGEKK21lbnV0IEN1JnQJCQkmVGFnbGlhCittZW51dCAmQ29weQkJCSZDb3BpYQorbWVudXQgJlBhc3RlCQkmSW5jb2xsYQorbWVudXQgJkRlbGV0ZQkJJkVsaW1pbmEKKworbWVudXQgU2VsZWN0XCBCbG9ja3dpc2UJU2VsZXppb25hXCBpblwgYmxvY2NvCittZW51dCBTZWxlY3RcICZXb3JkCQlTZWxlemlvbmFcICZQYXJvbGEKK21lbnV0IFNlbGVjdFwgJkxpbmUJCVNlbGV6aW9uYVwgJkxpbmVhCittZW51dCBTZWxlY3RcICZCbG9jawlTZWxlemlvbmFcICZCbG9jY28KK21lbnV0IFNlbGVjdFwgJkFsbAkJU2VsZXppb25hXCBUJnV0dG8KKworIiBUaGUgR1VJIFRvb2xiYXIgLyBCYXJyYSBTdHJ1bWVudGkKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCUFwcmkKKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCVNhbHZhCisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCVNhbHZhIFR1dHRvCisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJU3RhbXBhCisgICAgdG1lbnUgVG9vbEJhci5VbmRvCQlBbm51bGxhCisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQlSaXByaXN0aW5hCisgICAgdG1lbnUgVG9vbEJhci5DdXQJCVRhZ2xpYQorICAgIHRtZW51IFRvb2xCYXIuQ29weQkJQ29waWEKKyAgICB0bWVudSBUb29sQmFyLlBhc3RlCQlJbmNvbGxhCisKKyAgICBpZiAhaGFzKCJndWlfYXRoZW5hIikKKyAgICAgIHRtZW51IFRvb2xCYXIuRmluZAlDZXJjYQorICAgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAlDZXJjYSBTdWNjZXNzaXZvCisgICAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CUNlcmNhIFByZWNlZGVudGUKKyAgICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQlTb3N0aXR1aXNjaQorICAgIGVuZGlmCisKK2lmIDAJIiBkaXNhYmxlZDsgVGhlc2UgYXJlIGluIHRoZSBXaW5kb3dzIG1lbnUKKyAgICAgIHRtZW51IFRvb2xCYXIuTmV3CQlOdW92YSBmaW5lc3RyYQorICAgICAgdG1lbnUgVG9vbEJhci5XaW5TcGxpdAlEaXZpZGkgZmluZXN0cmEKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWF4CU1hc3NpbWEgYW1waWV6emEKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWluCU1pbmltYSBhbXBpZXp6YQorICAgICAgdG1lbnUgVG9vbEJhci5XaW5WU3BsaXQJRGl2aWRpIHZlcnRpY2FsbWVudGUKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWF4V2lkdGgJTWFzc2ltYSBsYXJnaGV6emEKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWluV2lkdGgJTWluaW1hIGxhcmdoZXp6YQorICAgICAgdG1lbnUgVG9vbEJhci5XaW5DbG9zZQlDaGl1ZGkgZmluZXN0cmEKK2VuZGlmCisKKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCUNhcmljYSBTZXNzaW9uZQorICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24JU2FsdmEgU2Vzc2lvbmUKKyAgICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdAlFc2VndWkgU2NyaXB0CisgICAgdG1lbnUgVG9vbEJhci5NYWtlCQlNYWtlCisgICAgdG1lbnUgVG9vbEJhci5TaGVsbAkJU2hlbGwKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCUVzZWd1aSBDdGFncworICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAlWYWkgYSBUYWcKKyAgICB0bWVudSBUb29sQmFyLkhlbHAJCUFpdXRvCisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscAlDZXJjYSBpbiBBaXV0bworICBlbmRmdW4KK2VuZGlmCisKKyIgdmltOiBzZXQgc3c9MiA6CmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9pdF9pdC51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9pdF9pdC51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc3MDQ0NQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2l0X2l0LnV0Zi04LnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUl0YWxpYW4gZm9yIFVURi04IGVuY29kaW5nCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X2l0X2l0LmxhdGluMS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2l0YWxpYW5faXRhbHkuMTI1Mi52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9pdGFsaWFuX2l0YWx5LjEyNTIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzZmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9pdGFsaWFuX2l0YWx5LjEyNTIudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJSXRhbGlhbiBmb3IgTGF0aW4xCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X2l0X2l0LmxhdGluMS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2phLmNwOTMyLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2phLmNwOTMyLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzYxYjA4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfamEuY3A5MzIudmltCkBAIC0wLDAgKzEsNSBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJSmFwYW5lc2UgKGZvciBXaW5kb3dzKQorIiBUcmFuc2xhdGVkIEJ5OglNVVJBT0tBIFRhcm8gIDxrb3JvbkB0a2EuYXR0Lm5lLmpwPgorIiBMYXN0IENoYW5nZToJCTI5LUFwci0yMDA0LgorCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9qYXBhbmVzZV9qYXBhbi45MzIudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9qYS51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9qYS51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1YTE5OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2phLnV0Zi04LnZpbQpAQCAtMCwwICsxLDQgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUphcGFuZXNlCisKKyIgZXVjanAgaXMgdGhlIHNhbWUgYXMgZXVjLWpwLiAgU291cmNlIHRoZSBvdGhlciBvbmUgZnJvbSBoZXJlLgorc291cmNlIDxzZmlsZT46cDpoL21lbnVfamFfanAudXRmLTgudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9qYV9qcC5jcDkzMi52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9qYV9qcC5jcDkzMi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2MWIwOAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2phX2pwLmNwOTMyLnZpbQpAQCAtMCwwICsxLDUgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUphcGFuZXNlIChmb3IgV2luZG93cykKKyIgVHJhbnNsYXRlZCBCeToJTVVSQU9LQSBUYXJvICA8a29yb25AdGthLmF0dC5uZS5qcD4KKyIgTGFzdCBDaGFuZ2U6CQkyOS1BcHItMjAwNC4KKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfamFwYW5lc2VfamFwYW4uOTMyLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfamFfanAuZXVjLWpwLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2phX2pwLmV1Yy1qcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiZTNmZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2phX2pwLmV1Yy1qcC52aW0KQEAgLTAsMCArMSwzMTUgQEAKKyIgdmk6c2V0IHRzPTggc3RzPTggc3c9OCB0dz0wOgorIgorIiBNZW51IFRyYW5zbGF0aW9uczoJSmFwYW5lc2UgKEVVQy1KUCkKKyIgVHJhbnNsYXRlZCBCeToJTVVSQU9LQSBUYXJvICA8a29yb25AdGthLmF0dC5uZS5qcD4KKyIgTGFzdCBDaGFuZ2U6CQkyOS1BcHItMjAwNC4KKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX21lbnVfdHJhbnMgPSAxCisKK3NjcmlwdGVuY29kaW5nIGV1Yy1qcAorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJpdil66XXKCZIKQorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgmztc6sKCZPKTxUYWI+PEYxPgorbWVudXRyYW5zICZVc2VyXCBNYW51YWwJCaXmobyltqXepcul5aWipesoJlUpCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJJkhvdy10b6XqpfOlrworbWVudXRyYW5zICZDcmVkaXRzCQmlr6Xspbilw6XIKCZDKQorbWVudXRyYW5zIENvJnB5aW5nCQnD+LruuKK+8MrzKCZQKQorbWVudXRyYW5zICZTcG9uc29yL1JlZ2lzdGVyCaW5pd2l86W1obwvxdDPvygmUykKK21lbnV0cmFucyBPJnJwaGFucwkJuMm7+SgmUikKK21lbnV0cmFucyAmVmVyc2lvbgkJpdChvKW4peel877wyvMoJlYpCittZW51dHJhbnMgJkFib3V0CQlWaW2ky6TEpKSkxigmQSkKKworbGV0IGc6bWVudXRyYW5zX2hlbHBfZGlhbG9nID0gIqXYpeul16TyuKG696S3pL+kpKWzpd6l86XJpOKkt6SvpM/DsbjspPLG/s7PpLekxqSvpMCktaSkOlxuXG7B3sb+peKhvKXJpM6ls6XepfOlyaTLpM8gaV8gpPLA6MaspMvJ1bLDpLek3qS5LiAozuM6IGlfQ1RSTC1YKVxupbOl3qXzpcml6aWkpfPK1L24pbOl3qXzpcmky6TPIGNfIKTywOjGrKTLydWyw6S3pN6kuS4gKM7jOiBjXzxEZWw+KVxupaql16W3peel86TOzL7BsKTLpM8gJyCk8snVssOkt6TepLkuICjO4zogJ3NoaWZ0d2lkdGgnKSIKKworIiBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCQml1aWhpaSl6ygmRikKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCbOrpK8oJk8pXC5cLlwuPFRhYj46ZQorbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AJyqyz5KS3pMazq6SvKCZMKVwuXC5cLjxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCb+3tay67sCuKCZOKTxUYWI+OmVuZXcKK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjbG9zZQkJysSkuKTrKCZDKTxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJyt3CuCgmUyk8VGFiPjp3CittZW51dHJhbnMgU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2Ccy+wbCk8snVpLGkxsrdwrgoJkEpXC5cLlwuPFRhYj46c2F2CittZW51dHJhbnMgU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCbq5yqzJvbyoKCZEKVwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JpdGlw6XBt+uyzKTyyb28qCgmQilcLlwuXC4KK21lbnV0cmFucyAmUHJpbnQJCQmw9br+KCZQKQorbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJCcrdwrikt6TGvarOuygmVik8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJvarOuygmWCk8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCcrUvbgoJkUpCittZW51dHJhbnMgJlVuZG88VGFiPnUJCQm86KTqvsOkuSgmVSk8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQmk4qSmsOzF2aTkpOsoJlIpPFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQm3q6TqytakuSgmRSk8VGFiPlwuCittZW51dHJhbnMgQ3UmdDxUYWI+Iit4CQkJwNqk6rzopOooJlQpPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJpbOl1KG8KCZDKTxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQnFvaTqydWksSgmUCk8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQnBsKTLxb2k6ygmQik8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQm45aTLxb2k6ygmQSk8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCb7DpLkoJkQpPFRhYj54CittZW51dHJhbnMgJlNlbGVjdFwgQWxsPFRhYj5nZ1ZHCQnBtKTGwarC8igmUyk8VGFiPmdndkcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCbihuvcoJkYpXC5cLlwuCittZW51dHJhbnMgJkZpbmQ8VGFiPi8JCQm4obr3KCZGKTxUYWI+LworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4Jw9a0uSgmTClcLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlPFRhYj46JXMJw9a0uSgmTCk8VGFiPjolcworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjpzCcPWtLkoJkwpPFRhYj46cworIm1lbnV0cmFucyBPcHRpb25zXC5cLlwuCQkJpaql16W3peel8ygmTylcLlwuXC4KK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJwN/E6qWmpaOl86XJpaYoJlcpCisKKyIgRWRpdC9HbG9iYWwgU2V0dGluZ3MKK21lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkJwbTCzsDfxOooJkcpCittZW51dHJhbnMgVG9nZ2xlXCBQYXR0ZXJuXCAmSGlnaGxpZ2h0PFRhYj46c2V0XCBobHMhCisJXAml0aW/obyl87avxLTA2sLYKCZIKTxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEKKwlcCcLnvq7KuLv6tujKzMDawtgoJkkpPFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQorCVwJpd6lw6XByb28qMDawtgoJlMpPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCaWrobylvaXrvP7K1bnUv/QoJkMpCittZW51dHJhbnMgJlZpcnR1YWxcIEVkaXQJCbK+wdvK1L24KCZWKQorbWVudXRyYW5zIE5ldmVyCQkJCcy1uPoKK21lbnV0cmFucyBCbG9ja1wgU2VsZWN0aW9uCQml1qXtpcOlr8GqwvK7/gorbWVudXRyYW5zIEluc2VydFwgbW9kZQkJCcHexv6l4qG8pcm7/gorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJpdal7aXDpa8vwd7G/qXiobylybv+CittZW51dHJhbnMgQWx3YXlzCQkJvu+7/gorbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCisJXAnB3sb+KL3pv7S81Cml4qG8pcnA2sLYKCZNKTxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwIQorCVwJVmm437S5peKhvKXJwNrC2CgmTyk8VGFiPjpzZXRcIGNwIQorbWVudXRyYW5zIFNlYXJjaFwgJlBhdGhcLlwuXC4JCbihuvel0aW5KCZQKVwuXC5cLgorbWVudXRyYW5zIFRhJmdcIEZpbGVzXC5cLlwuCQmlv6WwpdWloaWkpesoJkcpXC5cLlwuCisiCisiIEdVSSBvcHRpb25zCittZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhcgkJpcShvKXrpdChvMm9vKjA2sLYKCZUKQorbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCaW5pa+l7aG8peul0KG8KLK8Kcm9vKjA2sLYKCZCKQorbWVudXRyYW5zIFRvZ2dsZVwgJkxlZnRcIFNjcm9sbGJhcgmluaWvpe2hvKXrpdChvCi6uCnJvbyowNrC2CgmTCkKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCaW5pa+l7aG8peul0KG8KLGmKcm9vKjA2sLYKCZSKQorCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAipdWloaWkpeukzrihuvel0aW5pPLG/s7PpLekxqSvpMCktaSkOlxupcelo6Xspa+lyKXqzL6kz6WrpfOl3iAoICwgKSCkx7bowNqkw6TGpK+kwKS1pKQuIgorbGV0IGc6bWVudXRyYW5zX3RhZ3NfZGlhbG9nID0gIqW/pbCl1aWhpaSl66TOzL7BsKTyxv7Oz6S3pMakr6TApLWkpDpcbsy+wbCkz6WrpfOl3iAoICwgKSCkx7bowNqkw6TGpK+kwKS1pKQuIgorCisiIEVkaXQvRmlsZSBTZXR0aW5ncworCisiIEJvb2xlYW4gb3B0aW9ucworbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJpdWloaWkpevA38TqKCZJKQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCisJXAm51MjWuebJvbyowNrC2CgmTik8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCisJXCCl6qW5pcil4qG8pcnA2sLYKCZMKTxUYWI+OnNldFwgbGlzdCEKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQorCVwJudTA3srWpLfA2sLYKCZXKTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyIQorCVwJw7G47MDeytakt8DawtgoJlIpPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCisJXAmlv6XWxbizq8DawtgoJkUpPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCisJXAm8q8awu/qyvKSywNrC2CgmQSk8VGFiPjpzZXRcIGFpIQorbWVudXRyYW5zIFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCisJXAlDuMC47Lv6srykssDawtgoJkMpPFRhYj46c2V0XCBjaW4hCisKKyIgb3RoZXIgb3B0aW9ucworbWVudXRyYW5zICZTaGlmdHdpZHRoCQkJpbel1aXIyf0oJlMpCittZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCaW9pdWlyKWmpaeloqW/pdbJ/SgmVCkKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCaXGpa2luaXIyf0oJlgpXC5cLlwuCittZW51dHJhbnMgJkZpbGVcIEZvcm1hdFwuXC5cLgkJsv651LWtuebBqsLyKCZGKVwuXC5cLgorCitsZXQgZzptZW51dHJhbnNfdGV4dHdpZHRoX2RpYWxvZyA9ICKlxqWtpbmlyKTOyf0oJ3RleHR3aWR0aCcppPLA38TqpLekxqSvpMCktaSkICgwpMfAsLfBpPLMtbj6sr0pOiIKK2xldCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2RpYWxvZyA9ICKl1aWhpaSl673Qzs+kzrrdpM6y/rnUta255qTOt8G8sKTywaqk86THpK+kwKS1pKQuIgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfY2hvaWNlcyA9ICImVW5peFxuJkRvc1xuJk1hY1xupa2l46Xzpbul6ygmQykiCisKK21lbnV0cmFucyBDJm9sb3JcIFNjaGVtZQkJv6elxqG8pd7BqsLyKCZPKQorbWVudXRyYW5zICZLZXltYXAJCQmlraG8pd6lw6XXKCZLKQorbWVudXRyYW5zIE5vbmUJCQkJpMqktworCisiIFByb2dyYW1taW5nIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJCQmlxKG8pesoJlQpCittZW51dHJhbnMgJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQmlv6Wwpbil46XzpdcoJkopPFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJCczhpOsoJkIpPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJpb+lsKXVpaGlpKXruu7ArigmVCkKK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCaXhpaSlrygmTSk8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsCQmlqKXpobyl6qW5pcgoJkwpPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJpeGlw6W7obyluKXqpbmlyCgmSSk8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkJvKGkzqWopemhvKTYKCZOKTxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCcGwpM6lqKXpobyk2CgmUCk8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJuMWkpKXqpbmlyCgmTyk8VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwm/t6S3pKSl6qW5pcgoJkUpPFRhYj46Y25ldworbWVudXRyYW5zIEVycm9yXCAmV2luZG93CQmlqKXpobylpqWjpfOlyaWmKCZXKQorbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCQm5ub+3KCZVKTxUYWI+OmN3aW4KK21lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQmzq6SvKCZPKTxUYWI+OmNvcGVuCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCQnKxKS4pOsoJkMpPFRhYj46Y2Nsb3NlCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAlIRVik2MrRtLkoJkMpPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtcglIRVikq6TptdXK0bS5KCZSKTxUYWI+JSF4eGRcIC1yCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCaWzpfOl0aWkpenA38TqKCZTKQorCisiIFRvb2xzLkZvbGQgTWVudQorbWVudXRyYW5zICZGb2xkaW5nCQkJwN6+9qTfKCZGKQorIiBvcGVuIGNsb3NlIGZvbGRzCittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJza24+i/Mtbj6wNrC2CgmRSk8VGFiPnppCittZW51dHJhbnMgJlZpZXdcIEN1cnNvclwgTGluZTxUYWI+enYJpauhvKW9peu51KTyyb28qCgmVik8VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eAmlq6G8pb2l67nUpMCksaTyyb28qCgmVyk8VGFiPnpNengKK21lbnV0cmFucyBDJmxvc2VcIG1vcmVcIGZvbGRzPFRhYj56bQnA3r72pN+k8srEpLik6ygmTCk8VGFiPnptCittZW51dHJhbnMgJkNsb3NlXCBhbGxcIGZvbGRzPFRhYj56TQnBtMDevvak36TyysSkuKTrKCZDKTxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyCcDevvak36Tys6ukrygmUCk8VGFiPnpyCittZW51dHJhbnMgJk9wZW5cIGFsbFwgZm9sZHM8VGFiPnpSCcG0wN6+9qTfpPKzq6SvKCZPKTxUYWI+elIKKyIgZm9sZCBtZXRob2QKK21lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkJwN6+9qTfyv3LoSgmSCkKK21lbnV0cmFucyBNJmFudWFsCQkJvOrGsCgmQSkKK21lbnV0cmFucyBJJm5kZW50CQkJpaSl86XHpfOlyCgmTikKK21lbnV0cmFucyBFJnhwcmVzc2lvbgkJCbywyb6ywSgmWCkKK21lbnV0cmFucyBTJnludGF4CQkJpbel86W/pcOlr6W5KCZZKQorbWVudXRyYW5zICZEaWZmCQkJCbq5yqwoJkQpCittZW51dHJhbnMgTWEmcmtlcgkJCaXeobylq6G8KCZSKQorIiBjcmVhdGUgYW5kIGRlbGV0ZSBmb2xkcworbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQnA3r72pN+67sCuKCZGKTxUYWI+emYKK21lbnV0cmFucyAmRGVsZXRlXCBGb2xkPFRhYj56ZAkJwN6+9qTfuu+9/CgmRCk8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJwbTA3r72pN+67738KCZBKTxUYWI+ekQKKyIgbW92aW5nIGFyb3VuZCBpbiBmb2xkcworbWVudXRyYW5zIEZvbGRcIGNvbCZ1bW5cIHdpZHRoCQnA3r72pN+lq6XppeDJ/SgmVSkKKworbWVudXRyYW5zICZVcGRhdGUJCbm5v7coJlUpCittZW51dHJhbnMgJkdldFwgQmxvY2sJCaXWpe2lw6Wvw+q90CgmRykKK21lbnV0cmFucyAmUHV0XCBCbG9jawkJpdal7aXDpa/FrM3RKCZQKQorCisiIE5hbWVzIGZvciBidWZmZXIgbWVudS4KK21lbnV0cmFucyAmQnVmZmVycwkJpdClw6XVpaEoJkIpCittZW51dHJhbnMgJlJlZnJlc2hcIG1lbnUJpeGly6Xloby6xsbJuf4oJlIpCittZW51dHJhbnMgJkRlbGV0ZQkJuu+9/CgmRCkKK21lbnV0cmFucyAmQWx0ZXJuYXRlCQnOoqTYwNrC2CgmQSkKK21lbnV0cmFucyAmTmV4dAkJCbyhpM6l0KXDpdWloSgmTikKK21lbnV0cmFucyAmUHJldmlvdXMJCcGwpM6l0KXDpdWloSgmUCkKK21lbnV0cmFucyBbTm9cIEZpbGVdCQlbzLXC6l0KK2xldCBnOm1lbnV0cmFuc19ub19maWxlID0gIlvMtcLqXSIKKworIiBXaW5kb3cgbWVudQorbWVudXRyYW5zICZXaW5kb3cJCQmlpqWjpfOlyaWmKCZXKQorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCb+3tay67sCuKCZOKTxUYWI+XlduCittZW51dHJhbnMgUyZwbGl0PFRhYj5eV3MJCcqss+QoJlApPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCc6ipdClw6XVpaGk2Mqss+QoJkwpPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJv+LEvsqss+QoJlYpPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCaXVpaGlpKXrpailr6W5pdel7aG8pekoJlgpCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCcrEpLik6ygmQyk8VGFiPl5XYworbWVudXRyYW5zIE1vdmVcICZUbwkJCbDcxrAoJlQpCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkJvuUoJlQpPFRhYj5eV0sKK21lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJCbK8KCZCKTxUYWI+XldKCittZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAkJurgoJkwpPFRhYj5eV0gKK21lbnV0cmFucyAmUmlnaHRcIHNpZGU8VGFiPl5XTAkJsaYoJlIpPFRhYj5eV0wKK21lbnV0cmFucyBDbG9zZVwgJk90aGVyKHMpPFRhYj5eV28Jwr6k8srEpLik6ygmTyk8VGFiPl5XbworbWVudXRyYW5zIE5lJnh0PFRhYj5eV3cJCQm8oaTYKCZYKTxUYWI+Xld3CittZW51dHJhbnMgUCZyZXZpb3VzPFRhYj5eV1cJCcGwpNgoJlIpPFRhYj5eV1cKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQnGsaS4ueKktaTLKCZFKTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCbrHwue54qTLKCZNKTxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQm6x76uueKkyygmaSk8VGFiPl5XMV8KK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkJusfC58n9pMsoJlcpPFRhYj5eV1x8CittZW51dHJhbnMgTWluXCBXaWR0Jmg8VGFiPl5XMVx8CQm6x76uyf2kyygmSCk8VGFiPl5XMVx8CittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJvuWky6XtobylxqG8pbel56XzKCZVKTxUYWI+XldSCittZW51dHJhbnMgUm90YXRlXCAmRG93bjxUYWI+XldyCQmyvKTLpe2hvKXGobylt6XnpfMoJkQpPFRhYj5eV3IKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQml1aWppfOlyMDfxOooJk4pXC5cLlwuCisKKyIgVGhlIHBvcHVwIG1lbnUKK21lbnV0cmFucyAmVW5kbwkJCbzopOq+w6S5KCZVKQorbWVudXRyYW5zIEN1JnQJCQnA2qTqvOik6igmVCkKK21lbnV0cmFucyAmQ29weQkJCaWzpdShvCgmQykKK21lbnV0cmFucyAmUGFzdGUJCcW9pOrJ1aSxKCZQKQorbWVudXRyYW5zICZEZWxldGUJCbrvvfwoJkQpCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJtuu3waXWpe2lw6WvwarC8gorbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCcOxuOzBqsLyKCZXKQorbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCbnUwarC8igmTCkKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawml1qXtpcOlr8GqwvIoJkIpCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQmkuaTZpMbBqsLyKCZBKQorCisiIFRoZSBHVUkgdG9vbGJhciAoZm9yIFdpbjMyIG9yIEdUSykKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCaXVpaGlpKXrpPKzq6SvCisgICAgdG1lbnUgVG9vbEJhci5TYXZlCQm4vbrfpM6l1aWhpaSl66Tyyt3CuAorICAgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbAmkuaTZpMakzqXVpaGlpKXrpPLK3cK4CisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJsPW6/gorICAgIHRtZW51IFRvb2xCYXIuVW5kbwkJvOik6r7DpLcKKyAgICB0bWVudSBUb29sQmFyLlJlZG8JCaTipKaw7MXZpOSk6worICAgIHRtZW51IFRvb2xCYXIuQ3V0CQmlr6XqpcOl16XcobylyaTYwNqk6rzopOoKKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCaWvpeqlw6XXpdyhvKXJpNils6XUobwKKyAgICB0bWVudSBUb29sQmFyLlBhc3RlCQmlr6XqpcOl16XcobylyaSrpOnFvaTqydWksQorICAgIHRtZW51IFRvb2xCYXIuRmluZAkJuKG69y4uLgorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJvKGk8rihuvcKKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CcGwpPK4obr3CisgICAgdG1lbnUgVG9vbEJhci5SZXBsYWNlCcPWtLkuLi4KKyAgICBpZiAwCSIgZGlzYWJsZWQ7IFRoZXNlIGFyZSBpbiB0aGUgV2luZG93cyBtZW51CisgICAgICB0bWVudSBUb29sQmFyLk5ldwkJv7e1rKWmpaOl86XJpaa67sCuCisgICAgICB0bWVudSBUb29sQmFyLldpblNwbGl0CaWmpaOl86XJpabKrLPkCisgICAgICB0bWVudSBUb29sQmFyLldpbk1heAmlpqWjpfOlyaWmusfC57K9CisgICAgICB0bWVudSBUb29sQmFyLldpbk1pbgmlpqWjpfOlyaWmuse+rrK9CisgICAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlCaWmpaOl86XJpaak8srEpLik6worICAgIGVuZGlmCisgICAgdG1lbnUgVG9vbEJhci5Mb2FkU2Vzbgmlu6XDpbel56Xzxsm5/gorICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24Jpbulw6W3peel88rdwrgKKyAgICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdAlWaW2luaWvpeql16XIvMK51AorICAgIHRtZW51IFRvb2xCYXIuTWFrZQkJpdel7aW4paelr6XIpPJNYWtlCisgICAgdG1lbnUgVG9vbEJhci5TaGVsbAkJpbelp6XrpPKzq6SvCisgICAgdG1lbnUgVG9vbEJhci5SdW5DdGFncwl0YWdzuu7ArgorICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAmlv6Wwpbil46XzpdcKKyAgICB0bWVudSBUb29sQmFyLkhlbHAJCVZpbaXYpeul1worICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJVmltpdil66XXuKG69worICBlbmRmdW4KK2VuZGlmCisKKyIgU3ludGF4IG1lbnUKK21lbnV0cmFucyAmU3ludGF4CQmlt6Xzpb+lw6WvpbkoJlMpCittZW51dHJhbnMgJlNob3dcIGZpbGV0eXBlc1wgaW5cIG1lbnUJwtCx/rfBvLCk8qXhpcul5aG8pMvJvbyoKCZTKQorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CSdzeW50YXgnpMCkscDfxOooJlMpCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCSdmaWxldHlwZSek4sDfxOooJkYpCittZW51dHJhbnMgJk9mZgkJCcy1uPqyvSgmTykKK21lbnV0cmFucyAmTWFudWFsCQm86sawwN/E6igmTSkKK21lbnV0cmFucyBBJnV0b21hdGljCQm8q8awwN/E6igmVSkKK21lbnV0cmFucyBvbi9vZmZcIGZvclwgJlRoaXNcIGZpbGUKKwlcCaWqpfMvpaql1cDawtgoJlQpCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQmlq6XpobylxqW5pcgoJkwpCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAmlz6WkpemlpKXIpcaluaXIKCZIKQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSFRNTAlIVE1MpNils6XzpdChvKXIKCZDKQorCisiIEphcGFuZXNlIHNwZWNpZmljIG1lbnUKKyIgwK7I3aTPaWNvbna8ocLooaLJrKS6pLek4rvYxOqkt6S/pail86WzobylyaTLpMqk66TvpLGkx6TPpMqkpKSzpMiky8PtsNUKK2lmIGhhcygnaWNvbnYnKQorICAiIGljb252pM6l0KG8pbil56XzyL3E6gorICBsZXQgc3VwcG9ydF9qaXN4MDIxMyA9IChpY29udigiXHg4N1x4NjRceDg3XHg2YSIsICdjcDkzMicsICdldWMtamlzeDAyMTMnKSA9PSMgIlx4YWRceGM1XHhhZFx4Y2IiKSA/IDEgOiAwCisgICIKKyAgIiDGyaTfuf6k3worICBhbiAxMC4zOTUgpdWloaWkpesoJkYpLi1TRVBJQ09OVi0gPE5vcD4KKyAgYW4gMTAuMzk2LjEwMC4xMDAgpdWloaWkpesoJkYpLqWopfOls6G8pcm72MTqKCZFKVwuXC5cLi6zq6SvKCZPKVwuXC5cLi5TSklTKCZTKTxUYWI+ZmVuYz1jcDkzMiA6YnJvd3NlIGNvbmZpcm0gZSArK2VuYz1jcDkzMjxDUj4KKyAgaWYgIXN1cHBvcnRfamlzeDAyMTMKKyAgICBhbiAxMC4zOTYuMTAwLjExMCCl1aWhpaSl6ygmRikupail86WzobylybvYxOooJkUpXC5cLlwuLrOrpK8oJk8pXC5cLlwuLkVVQygmRSk8VGFiPmZlbmM9ZXVjLWpwIDpicm93c2UgY29uZmlybSBlICsrZW5jPWV1Yy1qcDxDUj4KKyAgICBhbiAxMC4zOTYuMTAwLjEyMCCl1aWhpaSl6ygmRikupail86WzobylybvYxOooJkUpXC5cLlwuLrOrpK8oJk8pXC5cLlwuLkpJUygmSik8VGFiPmZlbmM9aXNvLTIwMjItanAgOmJyb3dzZSBjb25maXJtIGUgKytlbmM9aXNvLTIwMjItanA8Q1I+CisgIGVsc2UKKyAgICBhbiAxMC4zOTYuMTAwLjExMCCl1aWhpaSl6ygmRikupail86WzobylybvYxOooJkUpXC5cLlwuLrOrpK8oJk8pXC5cLlwuLkVVQygmRSk8VGFiPmZlbmM9ZXVjLWppc3gwMjEzIDpicm93c2UgY29uZmlybSBlICsrZW5jPWV1Yy1qaXN4MDIxMzxDUj4KKyAgICBhbiAxMC4zOTYuMTAwLjEyMCCl1aWhpaSl6ygmRikupail86WzobylybvYxOooJkUpXC5cLlwuLrOrpK8oJk8pXC5cLlwuLkpJUygmSik8VGFiPmZlbmM9aXNvLTIwMjItanAtMyA6YnJvd3NlIGNvbmZpcm0gZSArK2VuYz1pc28tMjAyMi1qcC0zPENSPgorICBlbmRpZgorICBhbiAxMC4zOTYuMTAwLjEzMCCl1aWhpaSl6ygmRikupail86WzobylybvYxOooJkUpXC5cLlwuLrOrpK8oJk8pXC5cLlwuLlVURi04KCY4KTxUYWI+ZmVuYz11dGYtOCA6YnJvd3NlIGNvbmZpcm0gZSArK2VuYz11dGYtODxDUj4KKworICAiILrGxsm5/gorICBhbiAxMC4zOTYuMTEwLjEwMCCl1aWhpaSl6ygmRikupail86WzobylybvYxOooJkUpXC5cLlwuLrrGxsm5/igmUilcLlwuXC4uU0pJUygmUyk8VGFiPmZlbmM9Y3A5MzIgOmUgKytlbmM9Y3A5MzI8Q1I+CisgIGlmICFzdXBwb3J0X2ppc3gwMjEzCisgICAgYW4gMTAuMzk2LjExMC4xMTAgpdWloaWkpesoJkYpLqWopfOls6G8pcm72MTqKCZFKVwuXC5cLi66xsbJuf4oJlIpXC5cLlwuLkVVQygmRSk8VGFiPmZlbmM9ZXVjLWpwIDplICsrZW5jPWV1Yy1qcDxDUj4KKyAgICBhbiAxMC4zOTYuMTEwLjEyMCCl1aWhpaSl6ygmRikupail86WzobylybvYxOooJkUpXC5cLlwuLrrGxsm5/igmUilcLlwuXC4uSklTKCZKKTxUYWI+ZmVuYz1pc28tMjAyMi1qcCA6ZSArK2VuYz1pc28tMjAyMi1qcDxDUj4KKyAgZWxzZQorICAgIGFuIDEwLjM5Ni4xMTAuMTEwIKXVpaGlpKXrKCZGKS6lqKXzpbOhvKXJu9jE6igmRSlcLlwuXC4uusbGybn+KCZSKVwuXC5cLi5FVUMoJkUpPFRhYj5mZW5jPWV1Yy1qaXN4MDIxMyA6ZSArK2VuYz1ldWMtamlzeDAyMTM8Q1I+CisgICAgYW4gMTAuMzk2LjExMC4xMjAgpdWloaWkpesoJkYpLqWopfOls6G8pcm72MTqKCZFKVwuXC5cLi66xsbJuf4oJlIpXC5cLlwuLkpJUygmSik8VGFiPmZlbmM9aXNvLTIwMjItanAtMyA6ZSArK2VuYz1pc28tMjAyMi1qcC0zPENSPgorICBlbmRpZgorICBhbiAxMC4zOTYuMTEwLjEzMCCl1aWhpaSl6ygmRikupail86WzobylybvYxOooJkUpXC5cLlwuLrrGxsm5/igmUilcLlwuXC4uVVRGLTgoJjgpPFRhYj5mZW5jPXV0Zi04IDplICsrZW5jPXV0Zi04PENSPgorCisgICIgyt3CuAorICBhbiAxMC4zOTYuMTE1IKXVpaGlpKXrKCZGKS6lqKXzpbOhvKXJu9jE6igmRSlcLlwuXC4uLVNFUDEtIDxOb3A+CisgIGFuIDEwLjM5Ni4xMjAuMTAwIKXVpaGlpKXrKCZGKS6lqKXzpbOhvKXJu9jE6igmRSlcLlwuXC4uyt3CuCgmUylcLlwuXC4uU0pJUygmUyk8VGFiPmZlbmM9Y3A5MzIgOnNldCBmZW5jPWNwOTMyIFx8IHc8Q1I+CisgIGlmICFzdXBwb3J0X2ppc3gwMjEzCisgICAgYW4gMTAuMzk2LjEyMC4xMTAgpdWloaWkpesoJkYpLqWopfOls6G8pcm72MTqKCZFKVwuXC5cLi7K3cK4KCZTKVwuXC5cLi5FVUMoJkUpPFRhYj5mZW5jPWV1Yy1qcCA6c2V0IGZlbmM9ZXVjLWpwIFx8IHc8Q1I+CisgICAgYW4gMTAuMzk2LjEyMC4xMjAgpdWloaWkpesoJkYpLqWopfOls6G8pcm72MTqKCZFKVwuXC5cLi7K3cK4KCZTKVwuXC5cLi5KSVMoJkopPFRhYj5mZW5jPWlzby0yMDIyLWpwIDpzZXQgZmVuYz1pc28tMjAyMi1qcCBcfCB3PENSPgorICBlbHNlCisgICAgYW4gMTAuMzk2LjEyMC4xMTAgpdWloaWkpesoJkYpLqWopfOls6G8pcm72MTqKCZFKVwuXC5cLi7K3cK4KCZTKVwuXC5cLi5FVUMoJkUpPFRhYj5mZW5jPWV1Yy1qaXN4MDIxMyA6c2V0IGZlbmM9ZXVjLWppc3gwMjEzIFx8IHc8Q1I+CisgICAgYW4gMTAuMzk2LjEyMC4xMjAgpdWloaWkpesoJkYpLqWopfOls6G8pcm72MTqKCZFKVwuXC5cLi7K3cK4KCZTKVwuXC5cLi5KSVMoJkopPFRhYj5mZW5jPWlzby0yMDIyLWpwLTMgOnNldCBmZW5jPWlzby0yMDIyLWpwLTMgXHwgdzxDUj4KKyAgZW5kaWYKKyAgYW4gMTAuMzk2LjEyMC4xMzAgpdWloaWkpesoJkYpLqWopfOls6G8pcm72MTqKCZFKVwuXC5cLi7K3cK4KCZTKVwuXC5cLi5VVEYtOCgmOCk8VGFiPmZlbmM9dXRmLTggOnNldCBmZW5jPXV0Zi04IFx8IHc8Q1I+CitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfamFfanAuZXVjanAudmltIGIvcnVudGltZS9sYW5nL21lbnVfamFfanAuZXVjanAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjEzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9qYV9qcC5ldWNqcC52aW0KQEAgLTAsMCArMSw2IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglKYXBhbmVzZSAoZm9yIFVOSVgpCisiIFRyYW5zbGF0ZWQgQnk6CU11cmFva2EgVGFybyAgPGtvcm9uQHRrYS5hdHQubmUuanA+CisiIExhc3QgQ2hhbmdlOgkJMDg6NTA6NDcgMjUtTWFyLTIwMDEuCisKKyIgZXVjanAgaXMgdGhlIHNhbWUgYXMgZXVjLWpwLiAgU291cmNlIHRoZSBvdGhlciBvbmUgZnJvbSBoZXJlLgorc291cmNlIDxzZmlsZT46cDpoL21lbnVfamFfanAuZXVjLWpwLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfamFfanAudWppcy52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9qYV9qcC51amlzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTI0OGZjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfamFfanAudWppcy52aW0KQEAgLTAsMCArMSw2IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglKYXBhbmVzZSAoZm9yIFVOSVgpCisiIFRyYW5zbGF0ZWQgQnk6CU11cmFva2EgVGFybyAgPGtvcm9uQHRrYS5hdHQubmUuanA+CisiIExhc3QgQ2hhbmdlOgkJMDg6NTA6NDcgMjUtTWFyLTIwMDEuCisKKyIgdWppcyBpcyB0aGUgc2FtZSBhcyBldWMtanAuICBTb3VyY2UgdGhlIG90aGVyIG9uZSBmcm9tIGhlcmUuCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9qYV9qcC5ldWMtanAudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9qYV9qcC51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9qYV9qcC51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3ZjhiZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2phX2pwLnV0Zi04LnZpbQpAQCAtMCwwICsxLDMxNSBAQAorIiB2aTpzZXQgdHM9OCBzdHM9OCBzdz04IHR3PTA6CisiCisiIE1lbnUgVHJhbnNsYXRpb25zOglKYXBhbmVzZSAoVVRGLTgpCisiIFRyYW5zbGF0ZWQgQnk6CU1VUkFPS0EgVGFybyAgPGtvcm9uQHRrYS5hdHQubmUuanA+CisiIExhc3QgQ2hhbmdlOgkJMjktQXByLTIwMDQuCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCitzY3JpcHRlbmNvZGluZyB1dGYtOAorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJ44OY44Or44OXKCZIKQorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgnmpoLnlaUoJk8pPFRhYj48RjE+CittZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJ44Om44O844K244Oe44OL44Ol44Ki44OrKCZVKQorbWVudXRyYW5zICZIb3ctdG9cIGxpbmtzCSZIb3ctdG/jg6rjg7Pjgq8KK21lbnV0cmFucyAmQ3JlZGl0cwkJ44Kv44Os44K444OD44OIKCZDKQorbWVudXRyYW5zIENvJnB5aW5nCQnokZfkvZzmqKnmg4XloLEoJlApCittZW51dHJhbnMgJlNwb25zb3IvUmVnaXN0ZXIJ44K544Od44Oz44K144O8L+eZu+mMsigmUykKK21lbnV0cmFucyBPJnJwaGFucwkJ5a2k5YWQKCZSKQorbWVudXRyYW5zICZWZXJzaW9uCQnjg5Djg7zjgrjjg6fjg7Pmg4XloLEoJlYpCittZW51dHJhbnMgJkFib3V0CQlWaW3jgavjgaTjgYTjgaYoJkEpCisKK2xldCBnOm1lbnV0cmFuc19oZWxwX2RpYWxvZyA9ICLjg5jjg6vjg5fjgpLmpJzntKLjgZfjgZ/jgYTjgrPjg57jg7Pjg4njgoLjgZfjgY/jga/ljZjoqp7jgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQ6XG5cbuaMv+WFpeODouODvOODieOBruOCs+ODnuODs+ODieOBq+OBryBpXyDjgpLlhYjpoK3jgavku5jliqDjgZfjgb7jgZkuICjkvos6IGlfQ1RSTC1YKVxu44Kz44Oe44Oz44OJ44Op44Kk44Oz57eo6ZuG44Kz44Oe44Oz44OJ44Gr44GvIGNfIOOCkuWFiOmgreOBq+S7mOWKoOOBl+OBvuOBmS4gKOS+izogY188RGVsPilcbuOCquODl+OCt+ODp+ODs+OBruWQjeWJjeOBq+OBryAnIOOCkuS7mOWKoOOBl+OBvuOBmS4gKOS+izogJ3NoaWZ0d2lkdGgnKSIKKworIiBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCQnjg5XjgqHjgqTjg6soJkYpCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQnplovjgY8oJk8pXC5cLlwuPFRhYj46ZQorbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AJ5YiG5Ymy44GX44Gm6ZaL44GPKCZMKVwuXC5cLjxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCeaWsOimj+S9nOaIkCgmTik8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCemWieOBmOOCiygmQyk8VGFiPjpjbG9zZQorbWVudXRyYW5zICZTYXZlPFRhYj46dwkJCeS/neWtmCgmUyk8VGFiPjp3CittZW51dHJhbnMgU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2CeWQjeWJjeOCkuS7mOOBkeOBpuS/neWtmCgmQSlcLlwuXC48VGFiPjpzYXYKK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4J5beu5YiG6KGo56S6KCZEKVwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4J44OR44OD44OB57WQ5p6c44KS6KGo56S6KCZCKVwuXC5cLgorbWVudXRyYW5zICZQcmludAkJCeWNsOWItygmUCkKK21lbnV0cmFucyBTYSZ2ZS1FeGl0PFRhYj46d3FhCQnkv53lrZjjgZfjgabntYLkuoYoJlYpPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCee1guS6higmWCk8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCee3qOmbhigmRSkKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCeWPluOCiua2iOOBmSgmVSk8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQnjgoLjgYbkuIDluqbjgoTjgosoJlIpPFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQnnubDjgorov5TjgZkoJkUpPFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCeWIh+OCiuWPluOCiigmVCk8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQnjgrPjg5Tjg7woJkMpPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCeiyvOOCiuS7mOOBkSgmUCk8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQnliY3jgavosrzjgosoJkIpPFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkJ5b6M44Gr6LK844KLKCZBKTxUYWI+XXAKK21lbnV0cmFucyAmRGVsZXRlPFRhYj54CQkJ5raI44GZKCZEKTxUYWI+eAorbWVudXRyYW5zICZTZWxlY3RcIEFsbDxUYWI+Z2dWRwkJ5YWo44Gm6YG45oqeKCZTKTxUYWI+Z2d2RworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJ5qSc57SiKCZGKVwuXC5cLgorbWVudXRyYW5zICZGaW5kPFRhYj4vCQkJ5qSc57SiKCZGKTxUYWI+LworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4J572u5o+bKCZMKVwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjolcwnnva7mj5soJkwpPFRhYj46JXMKK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlPFRhYj46cwnnva7mj5soJkwpPFRhYj46cworIm1lbnV0cmFucyBPcHRpb25zXC5cLlwuCQkJ44Kq44OX44K344On44OzKCZPKVwuXC5cLgorbWVudXRyYW5zIFNldHRpbmdzXCAmV2luZG93CQnoqK3lrprjgqbjgqPjg7Pjg4njgqYoJlcpCisKKyIgRWRpdC9HbG9iYWwgU2V0dGluZ3MKK21lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkJ5YWo5L2T6Kit5a6aKCZHKQorbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQorCVwJ44OR44K/44O844Oz5by36Kq/5YiH5pu/KCZIKTxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEKKwlcCeWkp+Wwj+aWh+Wtl+WMuuWIpeWIh+abvygmSSk8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCisJXAnjg57jg4Pjg4HooajnpLrliIfmm78oJlMpPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCeOCq+ODvOOCveODq+WRqOi+uuihjOaVsCgmQykKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJ5Luu5oOz57eo6ZuGKCZWKQorbWVudXRyYW5zIE5ldmVyCQkJCeeEoeWKuQorbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCeODluODreODg+OCr+mBuOaKnuaZggorbWVudXRyYW5zIEluc2VydFwgbW9kZQkJCeaMv+WFpeODouODvOODieaZggorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJ44OW44Ot44OD44KvL+aMv+WFpeODouODvOODieaZggorbWVudXRyYW5zIEFsd2F5cwkJCeW4uOaZggorbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCisJXAnmjL/lhaUo5Yid5b+D6ICFKeODouODvOODieWIh+abvygmTSk8VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEKKwlcCVZp5LqS5o+b44Oi44O844OJ5YiH5pu/KCZPKTxUYWI+OnNldFwgY3AhCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkJ5qSc57Si44OR44K5KCZQKVwuXC5cLgorbWVudXRyYW5zIFRhJmdcIEZpbGVzXC5cLlwuCQnjgr/jgrDjg5XjgqHjgqTjg6soJkcpXC5cLlwuCisiCisiIEdVSSBvcHRpb25zCittZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhcgkJ44OE44O844Or44OQ44O86KGo56S65YiH5pu/KCZUKQorbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCeOCueOCr+ODreODvOODq+ODkOODvCjkuIsp6KGo56S65YiH5pu/KCZCKQorbWVudXRyYW5zIFRvZ2dsZVwgJkxlZnRcIFNjcm9sbGJhcgnjgrnjgq/jg63jg7zjg6vjg5Djg7wo5bemKeihqOekuuWIh+abvygmTCkKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCeOCueOCr+ODreODvOODq+ODkOODvCjlj7Mp6KGo56S65YiH5pu/KCZSKQorCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAi44OV44Kh44Kk44Or44Gu5qSc57Si44OR44K544KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEOlxu44OH44Kj44Os44Kv44OI44Oq5ZCN44Gv44Kr44Oz44OeICggLCApIOOBp+WMuuWIh+OBo+OBpuOBj+OBoOOBleOBhC4iCitsZXQgZzptZW51dHJhbnNfdGFnc19kaWFsb2cgPSAi44K/44Kw44OV44Kh44Kk44Or44Gu5ZCN5YmN44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEOlxu5ZCN5YmN44Gv44Kr44Oz44OeICggLCApIOOBp+WMuuWIh+OBo+OBpuOBj+OBoOOBleOBhC4iCisKKyIgRWRpdC9GaWxlIFNldHRpbmdzCisKKyIgQm9vbGVhbiBvcHRpb25zCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQnjg5XjgqHjgqTjg6voqK3lrpooJkkpCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmTnVtYmVyaW5nPFRhYj46c2V0XCBudSEKKwlcCeihjOeVquWPt+ihqOekuuWIh+abvygmTik8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCisJXCDjg6rjgrnjg4jjg6Ljg7zjg4nliIfmm78oJkwpPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCisJXAnooYzmipjov5TjgZfliIfmm78oJlcpPFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCisJXAnljZjoqp7mipjov5TjgZfliIfmm78oJlIpPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCisJXAnjgr/jg5blsZXplovliIfmm78oJkUpPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCisJXAnoh6rli5XlrZfkuIvjgZLliIfmm78oJkEpPFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQorCVwJQ+iogOiqnuWtl+S4i+OBkuWIh+abvygmQyk8VGFiPjpzZXRcIGNpbiEKKworIiBvdGhlciBvcHRpb25zCittZW51dHJhbnMgJlNoaWZ0d2lkdGgJCQnjgrfjg5Xjg4jluYUoJlMpCittZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCeOCveODleODiOOCpuOCp+OCouOCv+ODluW5hSgmVCkKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCeODhuOCreOCueODiOW5hSgmWClcLlwuXC4KK21lbnV0cmFucyAmRmlsZVwgRm9ybWF0XC5cLlwuCQnmlLnooYzoqJjlj7fpgbjmip4oJkYpXC5cLlwuCisKK2xldCBnOm1lbnV0cmFuc190ZXh0d2lkdGhfZGlhbG9nID0gIuODhuOCreOCueODiOOBruW5hSgndGV4dHdpZHRoJynjgpLoqK3lrprjgZfjgabjgY/jgaDjgZXjgYQgKDDjgafmlbTlvaLjgpLnhKHlirnljJYpOiIKK2xldCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2RpYWxvZyA9ICLjg5XjgqHjgqTjg6vlh7rlipvjga7pmpvjga7mlLnooYzoqJjlj7fjga7lvaLlvI/jgpLpgbjjgpPjgafjgY/jgaDjgZXjgYQuIgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfY2hvaWNlcyA9ICImVW5peFxuJkRvc1xuJk1hY1xu44Kt44Oj44Oz44K744OrKCZDKSIKKworbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQnoibLjg4bjg7zjg57pgbjmip4oJk8pCittZW51dHJhbnMgJktleW1hcAkJCeOCreODvOODnuODg+ODlygmSykKK21lbnV0cmFucyBOb25lCQkJCeOBquOBlworCisiIFByb2dyYW1taW5nIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJCQnjg4Tjg7zjg6soJlQpCittZW51dHJhbnMgJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQnjgr/jgrDjgrjjg6Pjg7Pjg5coJkopPFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJCeaIu+OCiygmQik8VGFiPl5UCittZW51dHJhbnMgQnVpbGRcICZUYWdzXCBGaWxlCQnjgr/jgrDjg5XjgqHjgqTjg6vkvZzmiJAoJlQpCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQnjg6HjgqTjgq8oJk0pPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJ44Ko44Op44O844Oq44K544OIKCZMKTxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCeODoeODg+OCu+ODvOOCuOODquOCueODiCgmSSk8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkJ5qyh44Gu44Ko44Op44O844G4KCZOKTxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCeWJjeOBruOCqOODqeODvOOBuCgmUCk8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJ5Y+k44GE44Oq44K544OIKCZPKTxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3CeaWsOOBl+OBhOODquOCueODiCgmRSk8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCeOCqOODqeODvOOCpuOCo+ODs+ODieOCpigmVykKK21lbnV0cmFucyAmVXBkYXRlPFRhYj46Y3dpbgkJ5pu05pawKCZVKTxUYWI+OmN3aW4KK21lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQnplovjgY8oJk8pPFRhYj46Y29wZW4KK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjY2xvc2UJCemWieOBmOOCiygmQyk8VGFiPjpjY2xvc2UKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCUhFWOOBuOWkieaPmygmQyk8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yCUhFWOOBi+OCiemAhuWkieaPmygmUik8VGFiPiUheHhkXCAtcgorbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCQnjgrPjg7Pjg5HjgqTjg6noqK3lrpooJlMpCisKKyIgVG9vbHMuRm9sZCBNZW51CittZW51dHJhbnMgJkZvbGRpbmcJCQnmipjnlbPjgb8oJkYpCisiIG9wZW4gY2xvc2UgZm9sZHMKK21lbnV0cmFucyAmRW5hYmxlL0Rpc2FibGVcIGZvbGRzPFRhYj56aQnmnInlirkv54Sh5Yq55YiH5pu/KCZFKTxUYWI+emkKK21lbnV0cmFucyAmVmlld1wgQ3Vyc29yXCBMaW5lPFRhYj56dgnjgqvjg7zjgr3jg6vooYzjgpLooajnpLooJlYpPFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJ44Kr44O844K944Or6KGM44Gg44GR44KS6KGo56S6KCZXKTxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCeaKmOeVs+OBv+OCkumWieOBmOOCiygmTCk8VGFiPnptCittZW51dHJhbnMgJkNsb3NlXCBhbGxcIGZvbGRzPFRhYj56TQnlhajmipjnlbPjgb/jgpLplonjgZjjgosoJkMpPFRhYj56TQorbWVudXRyYW5zIE8mcGVuXCBtb3JlXCBmb2xkczxUYWI+enIJ5oqY55Wz44G/44KS6ZaL44GPKCZQKTxUYWI+enIKK21lbnV0cmFucyAmT3BlblwgYWxsXCBmb2xkczxUYWI+elIJ5YWo5oqY55Wz44G/44KS6ZaL44GPKCZPKTxUYWI+elIKKyIgZm9sZCBtZXRob2QKK21lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkJ5oqY55Wz44G/5pa55rOVKCZIKQorbWVudXRyYW5zIE0mYW51YWwJCQnmiYvli5UoJkEpCittZW51dHJhbnMgSSZuZGVudAkJCeOCpOODs+ODh+ODs+ODiCgmTikKK21lbnV0cmFucyBFJnhwcmVzc2lvbgkJCeW8j+ipleS+oSgmWCkKK21lbnV0cmFucyBTJnludGF4CQkJ44K344Oz44K/44OD44Kv44K5KCZZKQorbWVudXRyYW5zICZEaWZmCQkJCeW3ruWIhigmRCkKK21lbnV0cmFucyBNYSZya2VyCQkJ44Oe44O844Kr44O8KCZSKQorIiBjcmVhdGUgYW5kIGRlbGV0ZSBmb2xkcworbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQnmipjnlbPjgb/kvZzmiJAoJkYpPFRhYj56ZgorbWVudXRyYW5zICZEZWxldGVcIEZvbGQ8VGFiPnpkCQnmipjnlbPjgb/liYrpmaQoJkQpPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECeWFqOaKmOeVs+OBv+WJiumZpCgmQSk8VGFiPnpECisiIG1vdmluZyBhcm91bmQgaW4gZm9sZHMKK21lbnV0cmFucyBGb2xkXCBjb2wmdW1uXCB3aWR0aAkJ5oqY55Wz44G/44Kr44Op44Og5bmFKCZVKQorCittZW51dHJhbnMgJlVwZGF0ZQkJ5pu05pawKCZVKQorbWVudXRyYW5zICZHZXRcIEJsb2NrCQnjg5bjg63jg4Pjgq/mir3lh7ooJkcpCittZW51dHJhbnMgJlB1dFwgQmxvY2sJCeODluODreODg+OCr+mBqeeUqCgmUCkKKworIiBOYW1lcyBmb3IgYnVmZmVyIG1lbnUuCittZW51dHJhbnMgJkJ1ZmZlcnMJCeODkOODg+ODleOCoSgmQikKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQnjg6Hjg4vjg6Xjg7zlho3oqq3ovrwoJlIpCittZW51dHJhbnMgJkRlbGV0ZQkJ5YmK6ZmkKCZEKQorbWVudXRyYW5zICZBbHRlcm5hdGUJCeijj+OBuOWIh+abvygmQSkKK21lbnV0cmFucyAmTmV4dAkJCeasoeOBruODkOODg+ODleOCoSgmTikKK21lbnV0cmFucyAmUHJldmlvdXMJCeWJjeOBruODkOODg+ODleOCoSgmUCkKK21lbnV0cmFucyBbTm9cIEZpbGVdCQlb54Sh6aGMXQorbGV0IGc6bWVudXRyYW5zX25vX2ZpbGUgPSAiW+eEoemhjF0iCisKKyIgV2luZG93IG1lbnUKK21lbnV0cmFucyAmV2luZG93CQkJ44Km44Kj44Oz44OJ44KmKCZXKQorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCeaWsOimj+S9nOaIkCgmTik8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQnliIblibIoJlApPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCeijj+ODkOODg+ODleOCoeOBuOWIhuWJsigmTCk8VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdgnlnoLnm7TliIblibIoJlYpPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCeODleOCoeOCpOODq+OCqOOCr+OCueODl+ODreODvOODqSgmWCkKK21lbnV0cmFucyAmQ2xvc2U8VGFiPl5XYwkJ6ZaJ44GY44KLKCZDKTxUYWI+XldjCittZW51dHJhbnMgTW92ZVwgJlRvCQkJ56e75YuVKCZUKQorbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJCeS4iigmVCk8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJ5LiLKCZCKTxUYWI+XldKCittZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAkJ5bemKCZMKTxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCeWPsygmUik8VGFiPl5XTAorbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5Xbwnku5bjgpLplonjgZjjgosoJk8pPFRhYj5eV28KK21lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQkJ5qyh44G4KCZYKTxUYWI+Xld3CittZW51dHJhbnMgUCZyZXZpb3VzPFRhYj5eV1cJCeWJjeOBuCgmUik8VGFiPl5XVworbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CeWQjOOBmOmrmOOBleOBqygmRSk8VGFiPl5XPQorbWVudXRyYW5zICZNYXhcIEhlaWdodDxUYWI+XldfCQnmnIDlpKfpq5jjgasoJk0pPFRhYj5eV18KK21lbnV0cmFucyBNJmluXCBIZWlnaHQ8VGFiPl5XMV8JCeacgOWwj+mrmOOBqygmaSk8VGFiPl5XMV8KK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkJ5pyA5aSn5bmF44GrKCZXKTxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJ5pyA5bCP5bmF44GrKCZIKTxUYWI+XlcxXHwKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQnkuIrjgavjg63jg7zjg4bjg7zjgrfjg6fjg7MoJlUpPFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IJCeS4i+OBq+ODreODvOODhuODvOOCt+ODp+ODsygmRCk8VGFiPl5XcgorbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCeODleOCqeODs+ODiOioreWumigmTilcLlwuXC4KKworIiBUaGUgcG9wdXAgbWVudQorbWVudXRyYW5zICZVbmRvCQkJ5Y+W44KK5raI44GZKCZVKQorbWVudXRyYW5zIEN1JnQJCQnliIfjgorlj5bjgoooJlQpCittZW51dHJhbnMgJkNvcHkJCQnjgrPjg5Tjg7woJkMpCittZW51dHJhbnMgJlBhc3RlCQnosrzjgorku5jjgZEoJlApCittZW51dHJhbnMgJkRlbGV0ZQkJ5YmK6ZmkKCZEKQorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlCeefqeW9ouODluODreODg+OCr+mBuOaKngorbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCeWNmOiqnumBuOaKnigmVykKK21lbnV0cmFucyBTZWxlY3RcICZMaW5lCQnooYzpgbjmip4oJkwpCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJ44OW44Ot44OD44Kv6YG45oqeKCZCKQorbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJ44GZ44G544Gm6YG45oqeKCZBKQorCisiIFRoZSBHVUkgdG9vbGJhciAoZm9yIFdpbjMyIG9yIEdUSykKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCeODleOCoeOCpOODq+OCkumWi+OBjworICAgIHRtZW51IFRvb2xCYXIuU2F2ZQkJ54++5Zyo44Gu44OV44Kh44Kk44Or44KS5L+d5a2YCisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCeOBmeOBueOBpuOBruODleOCoeOCpOODq+OCkuS/neWtmAorICAgIHRtZW51IFRvb2xCYXIuUHJpbnQJCeWNsOWItworICAgIHRtZW51IFRvb2xCYXIuVW5kbwkJ5Y+W44KK5raI44GXCisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQnjgoLjgYbkuIDluqbjgoTjgosKKyAgICB0bWVudSBUb29sQmFyLkN1dAkJ44Kv44Oq44OD44OX44Oc44O844OJ44G45YiH44KK5Y+W44KKCisgICAgdG1lbnUgVG9vbEJhci5Db3B5CQnjgq/jg6rjg4Pjg5fjg5zjg7zjg4njgbjjgrPjg5Tjg7wKKyAgICB0bWVudSBUb29sQmFyLlBhc3RlCQnjgq/jg6rjg4Pjg5fjg5zjg7zjg4njgYvjgonosrzjgorku5jjgZEKKyAgICB0bWVudSBUb29sQmFyLkZpbmQJCeaknOe0oi4uLgorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJ5qyh44KS5qSc57SiCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldgnliY3jgpLmpJzntKIKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJ572u5o+bLi4uCisgICAgaWYgMAkiIGRpc2FibGVkOyBUaGVzZSBhcmUgaW4gdGhlIFdpbmRvd3MgbWVudQorICAgICAgdG1lbnUgVG9vbEJhci5OZXcJCeaWsOimj+OCpuOCo+ODs+ODieOCpuS9nOaIkAorICAgICAgdG1lbnUgVG9vbEJhci5XaW5TcGxpdAnjgqbjgqPjg7Pjg4njgqbliIblibIKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWF4CeOCpuOCo+ODs+ODieOCpuacgOWkp+WMlgorICAgICAgdG1lbnUgVG9vbEJhci5XaW5NaW4J44Km44Kj44Oz44OJ44Km5pyA5bCP5YyWCisgICAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlCeOCpuOCo+ODs+ODieOCpuOCkumWieOBmOOCiworICAgIGVuZGlmCisgICAgdG1lbnUgVG9vbEJhci5Mb2FkU2Vzbgnjgrvjg4Pjgrfjg6fjg7Poqq3ovrwKKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCeOCu+ODg+OCt+ODp+ODs+S/neWtmAorICAgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0CVZpbeOCueOCr+ODquODl+ODiOWun+ihjAorICAgIHRtZW51IFRvb2xCYXIuTWFrZQkJ44OX44Ot44K444Kn44Kv44OI44KSTWFrZQorICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCeOCt+OCp+ODq+OCkumWi+OBjworICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJdGFnc+S9nOaIkAorICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAnjgr/jgrDjgrjjg6Pjg7Pjg5cKKyAgICB0bWVudSBUb29sQmFyLkhlbHAJCVZpbeODmOODq+ODlworICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJVmlt44OY44Or44OX5qSc57SiCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXgJCeOCt+ODs+OCv+ODg+OCr+OCuSgmUykKK21lbnV0cmFucyAmU2hvd1wgZmlsZXR5cGVzXCBpblwgbWVudQnlr77lv5zlvaLlvI/jgpLjg6Hjg4vjg6Xjg7zjgavooajnpLooJlMpCittZW51dHJhbnMgU2V0XCAnJnN5bnRheCdcIG9ubHkJJ3N5bnRheCfjgaDjgZHoqK3lrpooJlMpCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCSdmaWxldHlwZSfjgoLoqK3lrpooJkYpCittZW51dHJhbnMgJk9mZgkJCeeEoeWKueWMligmTykKK21lbnV0cmFucyAmTWFudWFsCQnmiYvli5XoqK3lrpooJk0pCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJ6Ieq5YuV6Kit5a6aKCZVKQorbWVudXRyYW5zIG9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZQorCVwJ44Kq44OzL+OCquODleWIh+abvygmVCkKK21lbnV0cmFucyBDbyZsb3JcIHRlc3QJCeOCq+ODqeODvOODhuOCueODiCgmTCkKK21lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0CeODj+OCpOODqeOCpOODiOODhuOCueODiCgmSCkKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJSFRNTOOBuOOCs+ODs+ODkOODvOODiCgmQykKKworIiBKYXBhbmVzZSBzcGVjaWZpYyBtZW51CisiIOaIkOWQpuOBr2ljb2525qyh56ys44CB5b+F44Ga44GX44KC5oyH5a6a44GX44Gf44Ko44Oz44Kz44O844OJ44Gr44Gq44KL44KP44GR44Gn44Gv44Gq44GE44GT44Go44Gr5rOo5oSPCitpZiBoYXMoJ2ljb252JykKKyAgIiBpY29uduOBruODkOODvOOCuOODp+ODs+WIpOWumgorICBsZXQgc3VwcG9ydF9qaXN4MDIxMyA9IChpY29udigiXHg4N1x4NjRceDg3XHg2YSIsICdjcDkzMicsICdldWMtamlzeDAyMTMnKSA9PSMgIlx4YWRceGM1XHhhZFx4Y2IiKSA/IDEgOiAwCisgICIKKyAgIiDoqq3jgb/ovrzjgb8KKyAgYW4gMTAuMzk1IOODleOCoeOCpOODqygmRikuLVNFUElDT05WLSA8Tm9wPgorICBhbiAxMC4zOTYuMTAwLjEwMCDjg5XjgqHjgqTjg6soJkYpLuOCqOODs+OCs+ODvOODieaMh+WumigmRSlcLlwuXC4u6ZaL44GPKCZPKVwuXC5cLi5TSklTKCZTKTxUYWI+ZmVuYz1jcDkzMiA6YnJvd3NlIGNvbmZpcm0gZSArK2VuYz1jcDkzMjxDUj4KKyAgaWYgIXN1cHBvcnRfamlzeDAyMTMKKyAgICBhbiAxMC4zOTYuMTAwLjExMCDjg5XjgqHjgqTjg6soJkYpLuOCqOODs+OCs+ODvOODieaMh+WumigmRSlcLlwuXC4u6ZaL44GPKCZPKVwuXC5cLi5FVUMoJkUpPFRhYj5mZW5jPWV1Yy1qcCA6YnJvd3NlIGNvbmZpcm0gZSArK2VuYz1ldWMtanA8Q1I+CisgICAgYW4gMTAuMzk2LjEwMC4xMjAg44OV44Kh44Kk44OrKCZGKS7jgqjjg7PjgrPjg7zjg4nmjIflrpooJkUpXC5cLlwuLumWi+OBjygmTylcLlwuXC4uSklTKCZKKTxUYWI+ZmVuYz1pc28tMjAyMi1qcCA6YnJvd3NlIGNvbmZpcm0gZSArK2VuYz1pc28tMjAyMi1qcDxDUj4KKyAgZWxzZQorICAgIGFuIDEwLjM5Ni4xMDAuMTEwIOODleOCoeOCpOODqygmRiku44Ko44Oz44Kz44O844OJ5oyH5a6aKCZFKVwuXC5cLi7plovjgY8oJk8pXC5cLlwuLkVVQygmRSk8VGFiPmZlbmM9ZXVjLWppc3gwMjEzIDpicm93c2UgY29uZmlybSBlICsrZW5jPWV1Yy1qaXN4MDIxMzxDUj4KKyAgICBhbiAxMC4zOTYuMTAwLjEyMCDjg5XjgqHjgqTjg6soJkYpLuOCqOODs+OCs+ODvOODieaMh+WumigmRSlcLlwuXC4u6ZaL44GPKCZPKVwuXC5cLi5KSVMoJkopPFRhYj5mZW5jPWlzby0yMDIyLWpwLTMgOmJyb3dzZSBjb25maXJtIGUgKytlbmM9aXNvLTIwMjItanAtMzxDUj4KKyAgZW5kaWYKKyAgYW4gMTAuMzk2LjEwMC4xMzAg44OV44Kh44Kk44OrKCZGKS7jgqjjg7PjgrPjg7zjg4nmjIflrpooJkUpXC5cLlwuLumWi+OBjygmTylcLlwuXC4uVVRGLTgoJjgpPFRhYj5mZW5jPXV0Zi04IDpicm93c2UgY29uZmlybSBlICsrZW5jPXV0Zi04PENSPgorCisgICIg5YaN6Kqt6L68CisgIGFuIDEwLjM5Ni4xMTAuMTAwIOODleOCoeOCpOODqygmRiku44Ko44Oz44Kz44O844OJ5oyH5a6aKCZFKVwuXC5cLi7lho3oqq3ovrwoJlIpXC5cLlwuLlNKSVMoJlMpPFRhYj5mZW5jPWNwOTMyIDplICsrZW5jPWNwOTMyPENSPgorICBpZiAhc3VwcG9ydF9qaXN4MDIxMworICAgIGFuIDEwLjM5Ni4xMTAuMTEwIOODleOCoeOCpOODqygmRiku44Ko44Oz44Kz44O844OJ5oyH5a6aKCZFKVwuXC5cLi7lho3oqq3ovrwoJlIpXC5cLlwuLkVVQygmRSk8VGFiPmZlbmM9ZXVjLWpwIDplICsrZW5jPWV1Yy1qcDxDUj4KKyAgICBhbiAxMC4zOTYuMTEwLjEyMCDjg5XjgqHjgqTjg6soJkYpLuOCqOODs+OCs+ODvOODieaMh+WumigmRSlcLlwuXC4u5YaN6Kqt6L68KCZSKVwuXC5cLi5KSVMoJkopPFRhYj5mZW5jPWlzby0yMDIyLWpwIDplICsrZW5jPWlzby0yMDIyLWpwPENSPgorICBlbHNlCisgICAgYW4gMTAuMzk2LjExMC4xMTAg44OV44Kh44Kk44OrKCZGKS7jgqjjg7PjgrPjg7zjg4nmjIflrpooJkUpXC5cLlwuLuWGjeiqrei+vCgmUilcLlwuXC4uRVVDKCZFKTxUYWI+ZmVuYz1ldWMtamlzeDAyMTMgOmUgKytlbmM9ZXVjLWppc3gwMjEzPENSPgorICAgIGFuIDEwLjM5Ni4xMTAuMTIwIOODleOCoeOCpOODqygmRiku44Ko44Oz44Kz44O844OJ5oyH5a6aKCZFKVwuXC5cLi7lho3oqq3ovrwoJlIpXC5cLlwuLkpJUygmSik8VGFiPmZlbmM9aXNvLTIwMjItanAtMyA6ZSArK2VuYz1pc28tMjAyMi1qcC0zPENSPgorICBlbmRpZgorICBhbiAxMC4zOTYuMTEwLjEzMCDjg5XjgqHjgqTjg6soJkYpLuOCqOODs+OCs+ODvOODieaMh+WumigmRSlcLlwuXC4u5YaN6Kqt6L68KCZSKVwuXC5cLi5VVEYtOCgmOCk8VGFiPmZlbmM9dXRmLTggOmUgKytlbmM9dXRmLTg8Q1I+CisKKyAgIiDkv53lrZgKKyAgYW4gMTAuMzk2LjExNSDjg5XjgqHjgqTjg6soJkYpLuOCqOODs+OCs+ODvOODieaMh+WumigmRSlcLlwuXC4uLVNFUDEtIDxOb3A+CisgIGFuIDEwLjM5Ni4xMjAuMTAwIOODleOCoeOCpOODqygmRiku44Ko44Oz44Kz44O844OJ5oyH5a6aKCZFKVwuXC5cLi7kv53lrZgoJlMpXC5cLlwuLlNKSVMoJlMpPFRhYj5mZW5jPWNwOTMyIDpzZXQgZmVuYz1jcDkzMiBcfCB3PENSPgorICBpZiAhc3VwcG9ydF9qaXN4MDIxMworICAgIGFuIDEwLjM5Ni4xMjAuMTEwIOODleOCoeOCpOODqygmRiku44Ko44Oz44Kz44O844OJ5oyH5a6aKCZFKVwuXC5cLi7kv53lrZgoJlMpXC5cLlwuLkVVQygmRSk8VGFiPmZlbmM9ZXVjLWpwIDpzZXQgZmVuYz1ldWMtanAgXHwgdzxDUj4KKyAgICBhbiAxMC4zOTYuMTIwLjEyMCDjg5XjgqHjgqTjg6soJkYpLuOCqOODs+OCs+ODvOODieaMh+WumigmRSlcLlwuXC4u5L+d5a2YKCZTKVwuXC5cLi5KSVMoJkopPFRhYj5mZW5jPWlzby0yMDIyLWpwIDpzZXQgZmVuYz1pc28tMjAyMi1qcCBcfCB3PENSPgorICBlbHNlCisgICAgYW4gMTAuMzk2LjEyMC4xMTAg44OV44Kh44Kk44OrKCZGKS7jgqjjg7PjgrPjg7zjg4nmjIflrpooJkUpXC5cLlwuLuS/neWtmCgmUylcLlwuXC4uRVVDKCZFKTxUYWI+ZmVuYz1ldWMtamlzeDAyMTMgOnNldCBmZW5jPWV1Yy1qaXN4MDIxMyBcfCB3PENSPgorICAgIGFuIDEwLjM5Ni4xMjAuMTIwIOODleOCoeOCpOODqygmRiku44Ko44Oz44Kz44O844OJ5oyH5a6aKCZFKVwuXC5cLi7kv53lrZgoJlMpXC5cLlwuLkpJUygmSik8VGFiPmZlbmM9aXNvLTIwMjItanAtMyA6c2V0IGZlbmM9aXNvLTIwMjItanAtMyBcfCB3PENSPgorICBlbmRpZgorICBhbiAxMC4zOTYuMTIwLjEzMCDjg5XjgqHjgqTjg6soJkYpLuOCqOODs+OCs+ODvOODieaMh+WumigmRSlcLlwuXC4u5L+d5a2YKCZTKVwuXC5cLi5VVEYtOCgmOCk8VGFiPmZlbmM9dXRmLTggOnNldCBmZW5jPXV0Zi04IFx8IHc8Q1I+CitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfamFwYW5lc2VfamFwYW4uOTMyLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2phcGFuZXNlX2phcGFuLjkzMi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZhMjFiNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2phcGFuZXNlX2phcGFuLjkzMi52aW0KQEAgLTAsMCArMSwzMTUgQEAKKyIgdmk6c2V0IHRzPTggc3RzPTggc3c9OCB0dz0wOgorIgorIiBNZW51IFRyYW5zbGF0aW9uczoJSmFwYW5lc2UgKENQOTMyKQorIiBUcmFuc2xhdGVkIEJ5OglNVVJBT0tBIFRhcm8gIDxrb3JvbkB0a2EuYXR0Lm5lLmpwPgorIiBMYXN0IENoYW5nZToJCTI5LUFwci0yMDA0LgorCisiIFF1aXQgd2hlbiBtZW51IHRyYW5zbGF0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLgoraWYgZXhpc3RzKCJkaWRfbWVudV90cmFucyIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBkaWRfbWVudV90cmFucyA9IDEKKworc2NyaXB0ZW5jb2RpbmcgY3A5MzIKKworIiBIZWxwIG1lbnUKK21lbnV0cmFucyAmSGVscAkJCYN3g4uDdigmSCkKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4JilSXqigmTyk8VGFiPjxGMT4KK21lbnV0cmFucyAmVXNlclwgTWFudWFsCQmDhoFbg1WDfYNqg4WDQYOLKCZVKQorbWVudXRyYW5zICZIb3ctdG9cIGxpbmtzCSZIb3ctdG+DioOTg04KK21lbnV0cmFucyAmQ3JlZGl0cwkJg06DjINXg2KDZygmQykKK21lbnV0cmFucyBDbyZweWluZwkJkpiN7Iygj+6V8SgmUCkKK21lbnV0cmFucyAmU3BvbnNvci9SZWdpc3RlcgmDWIN8g5ODVIFbL5NvmF4oJlMpCittZW51dHJhbnMgTyZycGhhbnMJCYzHjpkoJlIpCittZW51dHJhbnMgJlZlcnNpb24JCYNvgVuDV4OHg5OP7pXxKCZWKQorbWVudXRyYW5zICZBYm91dAkJVmltgsmCwoKigsQoJkEpCisKK2xldCBnOm1lbnV0cmFuc19oZWxwX2RpYWxvZyA9ICKDd4OLg3aC8IyfjfWCtYK9gqKDUoN9g5ODaILggrWCrYLNklCM6oLwk/yXzYK1gsSCrYK+grOCojpcblxukX2T/IOCgVuDaILMg1KDfYOTg2iCyYLNIGlfIILwkOaTqoLJlXSJwYK1gtyCty4gKJfhOiBpX0NUUkwtWClcboNSg32Dk4Nog4mDQ4OTldKPV4NSg32Dk4NogsmCzSBjXyCC8JDmk6qCyZV0icGCtYLcgrcuICiX4TogY188RGVsPilcboNJg3aDVoOHg5OCzJa8kU+CyYLNICcggvCVdInBgrWC3IK3LiAol+E6ICdzaGlmdHdpZHRoJykiCisKKyIgRmlsZSBtZW51CittZW51dHJhbnMgJkZpbGUJCQkJg3SDQINDg4soJkYpCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQmKSoKtKCZPKVwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCZWqioSCtYLEikqCrSgmTClcLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQmQVotLjeyQrCgmTik8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCZXCgraC6SgmQyk8VGFiPjpjbG9zZQorbWVudXRyYW5zICZTYXZlPFRhYj46dwkJCZXbkbYoJlMpPFRhYj46dworbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdgmWvJFPgvCVdIKvgsSV25G2KCZBKVwuXC5cLjxUYWI+OnNhdgorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLgmNt5WqlVyOpigmRClcLlwuXC4KK21lbnV0cmFucyBTcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCYNwg2KDYIyLicqC8JVcjqYoJkIpXC5cLlwuCittZW51dHJhbnMgJlByaW50CQkJiPON/CgmUCkKK21lbnV0cmFucyBTYSZ2ZS1FeGl0PFRhYj46d3FhCQmV25G2grWCxI9Jl7koJlYpPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCY9Jl7koJlgpPFRhYj46cWEKKworIiBFZGl0IG1lbnUKK21lbnV0cmFucyAmRWRpdAkJCQmV0o9XKCZFKQorbWVudXRyYW5zICZVbmRvPFRhYj51CQkJjuaC6I/BgrcoJlUpPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJguCCpIjqk3iC4oLpKCZSKTxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJjEqC6JXUgrcoJkUpPFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCZDYguiO5oLoKCZUKTxUYWI+Iit4CittZW51dHJhbnMgJkNvcHk8VGFiPiIreQkJCYNSg3OBWygmQyk8VGFiPiIreQorbWVudXRyYW5zICZQYXN0ZTxUYWI+IitnUAkJk1yC6JV0gq8oJlApPFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkJkU+CyZNcgukoJkIpPFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkJjOOCyZNcgukoJkEpPFRhYj5dcAorbWVudXRyYW5zICZEZWxldGU8VGFiPngJCQmPwYK3KCZEKTxUYWI+eAorbWVudXRyYW5zICZTZWxlY3RcIEFsbDxUYWI+Z2dWRwkJkVOCxJFJkfAoJlMpPFRhYj5nZ3ZHCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCQmMn431KCZGKVwuXC5cLgorbWVudXRyYW5zICZGaW5kPFRhYj4vCQkJjJ+N9SgmRik8VGFiPi8KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuCZJ1ircoJkwpXC5cLlwuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OiVzCZJ1ircoJkwpPFRhYj46JXMKK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlPFRhYj46cwmSdYq3KCZMKTxUYWI+OnMKKyJtZW51dHJhbnMgT3B0aW9uc1wuXC5cLgkJCYNJg3aDVoOHg5MoJk8pXC5cLlwuCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCZDdkuiDRYNCg5ODaINFKCZXKQorCisiIEVkaXQvR2xvYmFsIFNldHRpbmdzCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJCZFTkcyQ3ZLoKCZHKQorbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQorCVwJg3CDXoFbg5OLrZKykNiR1igmSCk8VGFiPjpzZXRcIGhscyEKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCisJXAmR5Y+slbaOmovmlcqQ2JHWKCZJKTxUYWI+OnNldFwgaWMhCittZW51dHJhbnMgVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEKKwlcCYN9g2KDYJVcjqaQ2JHWKCZTKTxUYWI+OnNldFwgc20hCittZW51dHJhbnMgJkNvbnRleHRcIGxpbmVzCQmDSoFbg1yDi478ldONc5CUKCZDKQorbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQmJvJF6ldKPVygmVikKK21lbnV0cmFucyBOZXZlcgkJCQmWs4z4CittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgkJg3WDjYNig06RSZHwjp4KK21lbnV0cmFucyBJbnNlcnRcIG1vZGUJCQmRfZP8g4KBW4Nojp4KK21lbnV0cmFucyBCbG9ja1wgYW5kXCBJbnNlcnQJCYN1g42DYoNOL5F9k/yDgoFbg2iOngorbWVudXRyYW5zIEFsd2F5cwkJCY/tjp4KK21lbnV0cmFucyBUb2dnbGVcIEluc2VydFwgJk1vZGU8VGFiPjpzZXRcIGltIQorCVwJkX2T/CiPiZBTjtIpg4KBW4NokNiR1igmTSk8VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEKKwlcCVZpjN2Kt4OCgVuDaJDYkdYoJk8pPFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQmMn431g3CDWCgmUClcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJg16DT4N0g0CDQ4OLKCZHKVwuXC5cLgorIgorIiBHVUkgb3B0aW9ucworbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCYNjgVuDi4NvgVuVXI6mkNiR1igmVCkKK21lbnV0cmFucyBUb2dnbGVcICZCb3R0b21cIFNjcm9sbGJhcgmDWINOg42BW4OLg2+BWyiJuimVXI6mkNiR1igmQikKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJg1iDToONgVuDi4NvgVsojbYplVyOppDYkdYoJkwpCittZW51dHJhbnMgVG9nZ2xlXCAmUmlnaHRcIFNjcm9sbGJhcgmDWINOg42BW4OLg2+BWyiJRSmVXI6mkNiR1igmUikKKworbGV0IGc6bWVudXRyYW5zX3BhdGhfZGlhbG9nID0gIoN0g0CDQ4OLgsyMn431g3CDWILwk/yXzYK1gsSCrYK+grOCojpcboNmg0KDjINOg2eDipa8gs2DSoOTg30gKCAsICkggsWL5pDYgsGCxIKtgr6Cs4KiLiIKK2xldCBnOm1lbnV0cmFuc190YWdzX2RpYWxvZyA9ICKDXoNPg3SDQINDg4uCzJa8kU+C8JP8l82CtYLEgq2CvoKzgqI6XG6WvJFPgs2DSoOTg30gKCAsICkggsWL5pDYgsGCxIKtgr6Cs4KiLiIKKworIiBFZGl0L0ZpbGUgU2V0dGluZ3MKKworIiBCb29sZWFuIG9wdGlvbnMKK21lbnV0cmFucyBGJmlsZVwgU2V0dGluZ3MJCYN0g0CDQ4OLkN2S6CgmSSkKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQorCVwJjXOU1I2GlVyOppDYkdYoJk4pPFRhYj46c2V0XCBudSEKK21lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQorCVwgg4qDWINng4KBW4NokNiR1igmTCk8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEKKwlcCY1zkNyV1IK1kNiR1igmVyk8VGFiPjpzZXRcIHdyYXAhCittZW51dHJhbnMgVG9nZ2xlXCBXJnJhcFwgYXRcIHdvcmQ8VGFiPjpzZXRcIGxiciEKKwlcCZJQjOqQ3JXUgrWQ2JHWKCZSKTxUYWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQorCVwJg16DdZNXikqQ2JHWKCZFKTxUYWI+OnNldFwgZXQhCittZW51dHJhbnMgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQorCVwJjqmTro6aibqCsJDYkdYoJkEpPFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQorCVwJQ4y+jOqOmom6grCQ2JHWKCZDKTxUYWI+OnNldFwgY2luIQorCisiIG90aGVyIG9wdGlvbnMKK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJCYNWg3SDZ5WdKCZTKQorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQmDXIN0g2eDRYNGg0GDXoN1lZ0oJlQpCittZW51dHJhbnMgVGUmeHRcIFdpZHRoXC5cLlwuCQmDZYNMg1iDZ5WdKCZYKVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCYn8jXOLTI2GkUmR8CgmRilcLlwuXC4KKworbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAig2WDTINYg2eCzJWdKCd0ZXh0d2lkdGgnKYLwkN2S6IK1gsSCrYK+grOCoiAoMILFkK6MYILwlrOM+Im7KToiCitsZXQgZzptZW51dHJhbnNfZmlsZWZvcm1hdF9kaWFsb2cgPSAig3SDQINDg4uPb5fNgsyN24LMifyNc4tMjYaCzIxgjq6C8JFJgvGCxYKtgr6Cs4KiLiIKK2xldCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2Nob2ljZXMgPSAiJlVuaXhcbiZEb3NcbiZNYWNcboNMg4ODk4Nag4soJkMpIgorCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCZBGg2WBW4N9kUmR8CgmTykKK21lbnV0cmFucyAmS2V5bWFwCQkJg0yBW4N9g2KDdigmSykKK21lbnV0cmFucyBOb25lCQkJCYLIgrUKKworIiBQcm9ncmFtbWluZyBtZW51CittZW51dHJhbnMgJlRvb2xzCQkJg2OBW4OLKCZUKQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0Jg16DT4NXg4ODk4N2KCZKKTxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQmW34LpKCZCKTxUYWI+XlQKK21lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCYNeg0+DdINAg0ODi43skKwoJlQpCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQmDgYNDg04oJk0pPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJg0eDiYFbg4qDWINnKCZMKTxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCYOBg2KDWoFbg1eDioNYg2coJkkpPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCY6fgsyDR4OJgVuC1igmTik8VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAmRT4LMg0eDiYFbgtYoJlApPFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCYzDgqKDioNYg2coJk8pPFRhYj46Y29sZAorbWVudXRyYW5zIE4mZXdlclwgTGlzdDxUYWI+OmNuZXcJkFaCtYKig4qDWINnKCZFKTxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdwkJg0eDiYFbg0WDQoOTg2iDRSgmVykKK21lbnV0cmFucyAmVXBkYXRlPFRhYj46Y3dpbgkJjViQVigmVSk8VGFiPjpjd2luCittZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbgkJikqCrSgmTyk8VGFiPjpjb3BlbgorbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQkJlcKCtoLpKCZDKTxUYWI+OmNjbG9zZQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJSEVYgtaVz4q3KCZDKTxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJSEVYgqmC54t0lc+KtygmUik8VGFiPiUheHhkXCAtcgorbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCQmDUoOTg3CDQ4OJkN2S6CgmUykKKworIiBUb29scy5Gb2xkIE1lbnUKK21lbnV0cmFucyAmRm9sZGluZwkJCZDcj/SC3SgmRikKKyIgb3BlbiBjbG9zZSBmb2xkcworbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppCZdMjPgvlrOM+JDYkdYoJkUpPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CYNKgVuDXIOLjXOC8JVcjqYoJlYpPFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJg0qBW4Ncg4uNc4K+gq+C8JVcjqYoJlcpPFRhYj56TXp4CittZW51dHJhbnMgQyZsb3NlXCBtb3JlXCBmb2xkczxUYWI+em0JkNyP9ILdgvCVwoK2gukoJkwpPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JkVOQ3I/0gt2C8JXCgraC6SgmQyk8VGFiPnpNCittZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cgmQ3I/0gt2C8IpKgq0oJlApPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgmRU5Dcj/SC3YLwikqCrSgmTyk8VGFiPnpSCisiIGZvbGQgbWV0aG9kCittZW51dHJhbnMgRm9sZFwgTWV0JmhvZAkJCZDcj/SC3ZX7lkAoJkgpCittZW51dHJhbnMgTSZhbnVhbAkJCY7ok64oJkEpCittZW51dHJhbnMgSSZuZGVudAkJCYNDg5ODZoOTg2coJk4pCittZW51dHJhbnMgRSZ4cHJlc3Npb24JCQmOrpVdib8oJlgpCittZW51dHJhbnMgUyZ5bnRheAkJCYNWg5ODXoNig06DWCgmWSkKK21lbnV0cmFucyAmRGlmZgkJCQmNt5WqKCZEKQorbWVudXRyYW5zIE1hJnJrZXIJCQmDfYFbg0qBWygmUikKKyIgY3JlYXRlIGFuZCBkZWxldGUgZm9sZHMKK21lbnV0cmFucyBDcmVhdGVcICZGb2xkPFRhYj56ZgkJkNyP9ILdjeyQrCgmRik8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCZDcj/SC3Y3tj5woJkQpPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECZFTkNyP9ILdje2PnCgmQSk8VGFiPnpECisiIG1vdmluZyBhcm91bmQgaW4gZm9sZHMKK21lbnV0cmFucyBGb2xkXCBjb2wmdW1uXCB3aWR0aAkJkNyP9ILdg0qDiYOAlZ0oJlUpCisKK21lbnV0cmFucyAmVXBkYXRlCQmNWJBWKCZVKQorbWVudXRyYW5zICZHZXRcIEJsb2NrCQmDdYONg2KDTpKKj28oJkcpCittZW51dHJhbnMgJlB1dFwgQmxvY2sJCYN1g42DYoNOk0uXcCgmUCkKKworIiBOYW1lcyBmb3IgYnVmZmVyIG1lbnUuCittZW51dHJhbnMgJkJ1ZmZlcnMJCYNvg2KDdINAKCZCKQorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51CYOBg2qDhYFbjcSTx42eKCZSKQorbWVudXRyYW5zICZEZWxldGUJCY3tj5woJkQpCittZW51dHJhbnMgJkFsdGVybmF0ZQkJl6CC1pDYkdYoJkEpCittZW51dHJhbnMgJk5leHQJCQmOn4LMg2+DYoN0g0AoJk4pCittZW51dHJhbnMgJlByZXZpb3VzCQmRT4LMg2+DYoN0g0AoJlApCittZW51dHJhbnMgW05vXCBGaWxlXQkJW5azkehdCitsZXQgZzptZW51dHJhbnNfbm9fZmlsZSA9ICJblrOR6F0iCisKKyIgV2luZG93IG1lbnUKK21lbnV0cmFucyAmV2luZG93CQkJg0WDQoOTg2iDRSgmVykKK21lbnV0cmFucyAmTmV3PFRhYj5eV24JCQmQVotLjeyQrCgmTik8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQmVqoqEKCZQKTxUYWI+XldzCittZW51dHJhbnMgU3AmbGl0XCBUb1wgIzxUYWI+XldeXgmXoINvg2KDdINAgtaVqoqEKCZMKTxUYWI+XldeXgorbWVudXRyYW5zIFNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2CZCCkryVqoqEKCZWKTxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcgmDdINAg0ODi4NHg06DWIN2g42BW4OJKCZYKQorbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCQmVwoK2gukoJkMpPFRhYj5eV2MKK21lbnV0cmFucyBNb3ZlXCAmVG8JCQmI2pOuKCZUKQorbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJCY/jKCZUKTxUYWI+XldLCittZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCQmJuigmQik8VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCY22KCZMKTxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCYlFKCZSKTxUYWI+XldMCittZW51dHJhbnMgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvCZG8gvCVwoK2gukoJk8pPFRhYj5eV28KK21lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQkJjp+C1igmWCk8VGFiPl5XdworbWVudXRyYW5zIFAmcmV2aW91czxUYWI+XldXCQmRT4LWKCZSKTxUYWI+XldXCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0Jk6+Cto2CgrOCySgmRSk8VGFiPl5XPQorbWVudXRyYW5zICZNYXhcIEhlaWdodDxUYWI+XldfCQmNxZHljYKCySgmTSk8VGFiPl5XXworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXwkJjcWPrI2CgskoJmkpPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCY3FkeWVnYLJKCZXKTxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJjcWPrJWdgskoJkgpPFRhYj5eVzFcfAorbWVudXRyYW5zIFJvdGF0ZVwgJlVwPFRhYj5eV1IJCY/jgsmDjYFbg2WBW4NWg4eDkygmVSk8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJibqCyYONgVuDZYFbg1aDh4OTKCZEKTxUYWI+XldyCittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkJg3SDSIOTg2eQ3ZLoKCZOKVwuXC5cLgorCisiIFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCQmO5oLoj8GCtygmVSkKK21lbnV0cmFucyBDdSZ0CQkJkNiC6I7mgugoJlQpCittZW51dHJhbnMgJkNvcHkJCQmDUoNzgVsoJkMpCittZW51dHJhbnMgJlBhc3RlCQmTXILolXSCrygmUCkKK21lbnV0cmFucyAmRGVsZXRlCQmN7Y+cKCZEKQorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlCYvpjGCDdYONg2KDTpFJkfAKK21lbnV0cmFucyBTZWxlY3RcICZXb3JkCQmSUIzqkUmR8CgmVykKK21lbnV0cmFucyBTZWxlY3RcICZMaW5lCQmNc5FJkfAoJkwpCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJg3WDjYNig06RSZHwKCZCKQorbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJgreC14LEkUmR8CgmQSkKKworIiBUaGUgR1VJIHRvb2xiYXIgKGZvciBXaW4zMiBvciBHVEspCitpZiBoYXMoInRvb2xiYXIiKQorICBpZiBleGlzdHMoIipEb190b29sYmFyX3RtZW51IikKKyAgICBkZWxmdW4gRG9fdG9vbGJhcl90bWVudQorICBlbmRpZgorICBmdW4gRG9fdG9vbGJhcl90bWVudSgpCisgICAgdG1lbnUgVG9vbEJhci5PcGVuCQmDdINAg0ODi4LwikqCrQorICAgIHRtZW51IFRvb2xCYXIuU2F2ZQkJjLuN3YLMg3SDQINDg4uC8JXbkbYKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJgreC14LEgsyDdINAg0ODi4LwlduRtgorICAgIHRtZW51IFRvb2xCYXIuUHJpbnQJCYjzjfwKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCY7mguiPwYK1CisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQmC4IKkiOqTeILigukKKyAgICB0bWVudSBUb29sQmFyLkN1dAkJg06DioNig3aDe4Fbg2iC1pDYguiO5oLoCisgICAgdG1lbnUgVG9vbEJhci5Db3B5CQmDToOKg2KDdoN7gVuDaILWg1KDc4FbCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJg06DioNig3aDe4Fbg2iCqYLnk1yC6JV0gq8KKyAgICB0bWVudSBUb29sQmFyLkZpbmQJCYyfjfUuLi4KKyAgICB0bWVudSBUb29sQmFyLkZpbmROZXh0CY6fgvCMn431CisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldgmRT4LwjJ+N9QorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQmSdYq3Li4uCisgICAgaWYgMAkiIGRpc2FibGVkOyBUaGVzZSBhcmUgaW4gdGhlIFdpbmRvd3MgbWVudQorICAgICAgdG1lbnUgVG9vbEJhci5OZXcJCZBWi0uDRYNCg5ODaINFjeyQrAorICAgICAgdG1lbnUgVG9vbEJhci5XaW5TcGxpdAmDRYNCg5ODaINFlaqKhAorICAgICAgdG1lbnUgVG9vbEJhci5XaW5NYXgJg0WDQoOTg2iDRY3FkeWJuworICAgICAgdG1lbnUgVG9vbEJhci5XaW5NaW4Jg0WDQoOTg2iDRY3Fj6yJuworICAgICAgdG1lbnUgVG9vbEJhci5XaW5DbG9zZQmDRYNCg5ODaINFgvCVwoK2gukKKyAgICBlbmRpZgorICAgIHRtZW51IFRvb2xCYXIuTG9hZFNlc24Jg1qDYoNWg4eDk5PHjZ4KKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCYNag2KDVoOHg5OV25G2CisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJVmltg1iDToOKg3aDZ47AjXMKKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCYN2g42DV4NGg06DZ4LwTWFrZQorICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCYNWg0aDi4LwikqCrQorICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJdGFnc43skKwKKyAgICB0bWVudSBUb29sQmFyLlRhZ0p1bXAJg16DT4NXg4ODk4N2CisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQlWaW2Dd4OLg3YKKyAgICB0bWVudSBUb29sQmFyLkZpbmRIZWxwCVZpbYN3g4uDdoyfjfUKKyAgZW5kZnVuCitlbmRpZgorCisiIFN5bnRheCBtZW51CittZW51dHJhbnMgJlN5bnRheAkJg1aDk4Neg2KDToNYKCZTKQorbWVudXRyYW5zICZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51CZHOiZ6MYI6ugvCDgYNqg4WBW4LJlVyOpigmUykKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seQknc3ludGF4J4K+gq+Q3ZLoKCZTKQorbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwknZmlsZXR5cGUnguCQ3ZLoKCZGKQorbWVudXRyYW5zICZPZmYJCQmWs4z4ibsoJk8pCittZW51dHJhbnMgJk1hbnVhbAkJjuiTrpDdkugoJk0pCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJjqmTrpDdkugoJlUpCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCisJXAmDSYOTL4NJg3SQ2JHWKCZUKQorbWVudXRyYW5zIENvJmxvclwgdGVzdAkJg0qDiYFbg2WDWINnKCZMKQorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJg26DQ4OJg0ODZ4Nlg1iDZygmSCkKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJSFRNTILWg1KDk4NvgVuDZygmQykKKworIiBKYXBhbmVzZSBzcGVjaWZpYyBtZW51CisiIJCslNuCzWljb252jp+R5oFBlUuCuIK1guCOd5LogrWCvYNHg5ODUoFbg2iCyYLIgumC7YKvgsWCzYLIgqKCsYLGgsmSjYjTCitpZiBoYXMoJ2ljb252JykKKyAgIiBpY29udoLMg2+BW4NXg4eDk5S7kugKKyAgbGV0IHN1cHBvcnRfamlzeDAyMTMgPSAoaWNvbnYoIlx4ODdceDY0XHg4N1x4NmEiLCAnY3A5MzInLCAnZXVjLWppc3gwMjEzJykgPT0jICJceGFkXHhjNVx4YWRceGNiIikgPyAxIDogMAorICAiCisgICIgk8eC3Y2egt0KKyAgYW4gMTAuMzk1IIN0g0CDQ4OLKCZGKS4tU0VQSUNPTlYtIDxOb3A+CisgIGFuIDEwLjM5Ni4xMDAuMTAwIIN0g0CDQ4OLKCZGKS6DR4OTg1KBW4NojneS6CgmRSlcLlwuXC4uikqCrSgmTylcLlwuXC4uU0pJUygmUyk8VGFiPmZlbmM9Y3A5MzIgOmJyb3dzZSBjb25maXJtIGUgKytlbmM9Y3A5MzI8Q1I+CisgIGlmICFzdXBwb3J0X2ppc3gwMjEzCisgICAgYW4gMTAuMzk2LjEwMC4xMTAgg3SDQINDg4soJkYpLoNHg5ODUoFbg2iOd5LoKCZFKVwuXC5cLi6KSoKtKCZPKVwuXC5cLi5FVUMoJkUpPFRhYj5mZW5jPWV1Yy1qcCA6YnJvd3NlIGNvbmZpcm0gZSArK2VuYz1ldWMtanA8Q1I+CisgICAgYW4gMTAuMzk2LjEwMC4xMjAgg3SDQINDg4soJkYpLoNHg5ODUoFbg2iOd5LoKCZFKVwuXC5cLi6KSoKtKCZPKVwuXC5cLi5KSVMoJkopPFRhYj5mZW5jPWlzby0yMDIyLWpwIDpicm93c2UgY29uZmlybSBlICsrZW5jPWlzby0yMDIyLWpwPENSPgorICBlbHNlCisgICAgYW4gMTAuMzk2LjEwMC4xMTAgg3SDQINDg4soJkYpLoNHg5ODUoFbg2iOd5LoKCZFKVwuXC5cLi6KSoKtKCZPKVwuXC5cLi5FVUMoJkUpPFRhYj5mZW5jPWV1Yy1qaXN4MDIxMyA6YnJvd3NlIGNvbmZpcm0gZSArK2VuYz1ldWMtamlzeDAyMTM8Q1I+CisgICAgYW4gMTAuMzk2LjEwMC4xMjAgg3SDQINDg4soJkYpLoNHg5ODUoFbg2iOd5LoKCZFKVwuXC5cLi6KSoKtKCZPKVwuXC5cLi5KSVMoJkopPFRhYj5mZW5jPWlzby0yMDIyLWpwLTMgOmJyb3dzZSBjb25maXJtIGUgKytlbmM9aXNvLTIwMjItanAtMzxDUj4KKyAgZW5kaWYKKyAgYW4gMTAuMzk2LjEwMC4xMzAgg3SDQINDg4soJkYpLoNHg5ODUoFbg2iOd5LoKCZFKVwuXC5cLi6KSoKtKCZPKVwuXC5cLi5VVEYtOCgmOCk8VGFiPmZlbmM9dXRmLTggOmJyb3dzZSBjb25maXJtIGUgKytlbmM9dXRmLTg8Q1I+CisKKyAgIiCNxJPHjZ4KKyAgYW4gMTAuMzk2LjExMC4xMDAgg3SDQINDg4soJkYpLoNHg5ODUoFbg2iOd5LoKCZFKVwuXC5cLi6NxJPHjZ4oJlIpXC5cLlwuLlNKSVMoJlMpPFRhYj5mZW5jPWNwOTMyIDplICsrZW5jPWNwOTMyPENSPgorICBpZiAhc3VwcG9ydF9qaXN4MDIxMworICAgIGFuIDEwLjM5Ni4xMTAuMTEwIIN0g0CDQ4OLKCZGKS6DR4OTg1KBW4NojneS6CgmRSlcLlwuXC4ujcSTx42eKCZSKVwuXC5cLi5FVUMoJkUpPFRhYj5mZW5jPWV1Yy1qcCA6ZSArK2VuYz1ldWMtanA8Q1I+CisgICAgYW4gMTAuMzk2LjExMC4xMjAgg3SDQINDg4soJkYpLoNHg5ODUoFbg2iOd5LoKCZFKVwuXC5cLi6NxJPHjZ4oJlIpXC5cLlwuLkpJUygmSik8VGFiPmZlbmM9aXNvLTIwMjItanAgOmUgKytlbmM9aXNvLTIwMjItanA8Q1I+CisgIGVsc2UKKyAgICBhbiAxMC4zOTYuMTEwLjExMCCDdINAg0ODiygmRikug0eDk4NSgVuDaI53kugoJkUpXC5cLlwuLo3Ek8eNnigmUilcLlwuXC4uRVVDKCZFKTxUYWI+ZmVuYz1ldWMtamlzeDAyMTMgOmUgKytlbmM9ZXVjLWppc3gwMjEzPENSPgorICAgIGFuIDEwLjM5Ni4xMTAuMTIwIIN0g0CDQ4OLKCZGKS6DR4OTg1KBW4NojneS6CgmRSlcLlwuXC4ujcSTx42eKCZSKVwuXC5cLi5KSVMoJkopPFRhYj5mZW5jPWlzby0yMDIyLWpwLTMgOmUgKytlbmM9aXNvLTIwMjItanAtMzxDUj4KKyAgZW5kaWYKKyAgYW4gMTAuMzk2LjExMC4xMzAgg3SDQINDg4soJkYpLoNHg5ODUoFbg2iOd5LoKCZFKVwuXC5cLi6NxJPHjZ4oJlIpXC5cLlwuLlVURi04KCY4KTxUYWI+ZmVuYz11dGYtOCA6ZSArK2VuYz11dGYtODxDUj4KKworICAiIJXbkbYKKyAgYW4gMTAuMzk2LjExNSCDdINAg0ODiygmRikug0eDk4NSgVuDaI53kugoJkUpXC5cLlwuLi1TRVAxLSA8Tm9wPgorICBhbiAxMC4zOTYuMTIwLjEwMCCDdINAg0ODiygmRikug0eDk4NSgVuDaI53kugoJkUpXC5cLlwuLpXbkbYoJlMpXC5cLlwuLlNKSVMoJlMpPFRhYj5mZW5jPWNwOTMyIDpzZXQgZmVuYz1jcDkzMiBcfCB3PENSPgorICBpZiAhc3VwcG9ydF9qaXN4MDIxMworICAgIGFuIDEwLjM5Ni4xMjAuMTEwIIN0g0CDQ4OLKCZGKS6DR4OTg1KBW4NojneS6CgmRSlcLlwuXC4ulduRtigmUylcLlwuXC4uRVVDKCZFKTxUYWI+ZmVuYz1ldWMtanAgOnNldCBmZW5jPWV1Yy1qcCBcfCB3PENSPgorICAgIGFuIDEwLjM5Ni4xMjAuMTIwIIN0g0CDQ4OLKCZGKS6DR4OTg1KBW4NojneS6CgmRSlcLlwuXC4ulduRtigmUylcLlwuXC4uSklTKCZKKTxUYWI+ZmVuYz1pc28tMjAyMi1qcCA6c2V0IGZlbmM9aXNvLTIwMjItanAgXHwgdzxDUj4KKyAgZWxzZQorICAgIGFuIDEwLjM5Ni4xMjAuMTEwIIN0g0CDQ4OLKCZGKS6DR4OTg1KBW4NojneS6CgmRSlcLlwuXC4ulduRtigmUylcLlwuXC4uRVVDKCZFKTxUYWI+ZmVuYz1ldWMtamlzeDAyMTMgOnNldCBmZW5jPWV1Yy1qaXN4MDIxMyBcfCB3PENSPgorICAgIGFuIDEwLjM5Ni4xMjAuMTIwIIN0g0CDQ4OLKCZGKS6DR4OTg1KBW4NojneS6CgmRSlcLlwuXC4ulduRtigmUylcLlwuXC4uSklTKCZKKTxUYWI+ZmVuYz1pc28tMjAyMi1qcC0zIDpzZXQgZmVuYz1pc28tMjAyMi1qcC0zIFx8IHc8Q1I+CisgIGVuZGlmCisgIGFuIDEwLjM5Ni4xMjAuMTMwIIN0g0CDQ4OLKCZGKS6DR4OTg1KBW4NojneS6CgmRSlcLlwuXC4ulduRtigmUylcLlwuXC4uVVRGLTgoJjgpPFRhYj5mZW5jPXV0Zi04IDpzZXQgZmVuYz11dGYtOCBcfCB3PENSPgorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2tvLnV0Zi04LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2tvLnV0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmVmZGRjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfa28udXRmLTgudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJS29yZWFuCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X2tvX2tyLnV0Zi04LnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfa29fa3IuZXVja3IudmltIGIvcnVudGltZS9sYW5nL21lbnVfa29fa3IuZXVja3IudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGE0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9rb19rci5ldWNrci52aW0KQEAgLTAsMCArMSwyNDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CUtvcmVhbgorIiBNYWludGFpbmVyOgkJTmFtIFN1bmdIeXVuIDxuYW1zaEBrbGRwLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CQkyMDAzIEFwciAyNQorCisiIFF1aXQgd2hlbiBtZW51IHRyYW5zbGF0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLgoraWYgZXhpc3RzKCJkaWRfbWVudV90cmFucyIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBkaWRfbWVudV90cmFucyA9IDEKKworc2NyaXB0ZW5jb2RpbmcgZXVjLWtyCisKKyIgSGVscCBtZW51CittZW51dHJhbnMgJkhlbHAJCQm1tb/yuLsoJkgpCittZW51dHJhbnMgJk92ZXJ2aWV3PFRhYj48RjE+CbCzsPwoJk8pPFRhYj48RjE+CittZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJu+e/68DaXCC4xbS6vvMoJlUpCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJvu7C7sfPs6pcILjxt88oJkgpCittZW51dHJhbnMgJkdVSQkJCbG4wMwoJkcpCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCcOjseIoJkYpXC5cLlwuCittZW51dHJhbnMgJkNyZWRpdHMJCbDtuLa/7lwgutAoJkMpCittZW51dHJhbnMgQ28mcHlpbmcJCcD6wNuxxygmcCkKK21lbnV0cmFucyBPJnJwaGFucwkJsO2+xigmcikKK21lbnV0cmFucyAmVmVyc2lvbgkJufbA/CgmVikKK21lbnV0cmFucyAmQWJvdXQJCcDMXCDHwbfOsde3pcC6KCZBKQorCisiIEZpbGUgbWVudQorbWVudXRyYW5zICZGaWxlCQkJCcbEwM8oJkYpCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQm/rbHiKCZPKVwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCbOqtLK8rVwgv62x4igmbClcLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQm79bfOv+4oJk4pPFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQm03bHiKCZDKTxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJwPrA5SgmUyk8VGFiPjp3CittZW51dHJhbnMgU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2CbTZuKVcIMDMuKfAuLfOXCDA+sDlKCZBKVwuXC5cLjxUYWI+OnNhdgorIm1lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4JU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCisibWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JU3BsaXRcIFBhdGNoZWRcICZCeVwuXC5cLgorbWVudXRyYW5zICZQcmludAkJCcDOvOIoJlApCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJwPrA5cfPsO1cILOhs7ux4igmdik8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJs6Gzu7HiKCZ4KTxUYWI+OnFhCisKKyIgRWRpdCBtZW51CittZW51dHJhbnMgJkVkaXQJCQkJxu3B/SgmRSkKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCcPrvNIoJlUpPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJtNm9wyC9x8fgKCZSKTxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJtcfHrsDMKCZlKTxUYWI+XC4KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCQnA2rijseIoJnQpPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJurm75ygmQyk8VGFiPiIreQorbWVudXRyYW5zICZQYXN0ZTxUYWI+IitnUAkJutnAzLHiKCZQKTxUYWI+IitnUAorbWVudXRyYW5zIFB1dFwgJkJlZm9yZTxUYWI+W3AJCb7Vv6FcILrZwMyx4igmQik8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQm12r+hXCC62cDMseIoJkEpPFRhYj5dcAorbWVudXRyYW5zICZEZWxldGU8VGFiPngJCQnB9r/sseIoJkQpPFRhYj54CittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHCQm48LXOXCCw7bijseIoJlMpPFRhYj5nZ1ZHCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCQnDo7HiKCZGKVwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4Jw6O+xrytXCC52bLZseIoJmwpXC5cLlwuCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCbyzwaRcIMOiKCZXKQorCisiIEVkaXQvR2xvYmFsIFNldHRpbmdzCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJCcD8v6pcILyzwaQoJkcpCittZW51dHJhbnMgVG9nZ2xlXCBQYXR0ZXJuXCAmSGlnaGxpZ2h0PFRhYj46c2V0XCBobHMhIMbQxc9cIMfPwMy288DMxq5cIMXksdsoJkgpPFRhYj46c2V0XCBobHMhCittZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljISC067zSua7A2lwgsbi60FwgxeSx2ygmSSk8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hIFNob3dtYXRjaFwgxeSx2ygmUyk8VGFiPjpzZXRcIHNtIQorbWVudXRyYW5zICZDb250ZXh0XCBsaW5lcwkJxNzF2L26xq5cIMHZKCZDKQorbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQmwobvzXCDG7cH9KCZWKQorbWVudXRyYW5zIE5ldmVyCQkJCbvnv+sgvsggx9QKK21lbnV0cmFucyBCbG9ja1wgU2VsZWN0aW9uCQm67bewXCCw7bijseIKK21lbnV0cmFucyBJbnNlcnRcIG1vZGUJCQm78MDUXCC48LXlCittZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CQm67bewsPpcILvwwNQKK21lbnV0cmFucyBBbHdheXMJCQnH17vzXCC757/rCittZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEgu/DA1FwguPC15VwgxeSx2ygmTSk8VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEgVmlcIMijyK9cIMXksdsoJm8pPFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQnDo7HiXCCw5rfOKCZQKVwuXC5cLgorbWVudXRyYW5zIFRhJmdcIEZpbGVzXC5cLlwuCQmyv7iux6VcIMbEwM8oJmcpXC5cLlwuCisKKyIgR1VJIG9wdGlvbnMKK21lbnV0cmFucyBUb2dnbGVcICZUb29sYmFyCQm1tbG4uLe061wgxeSx2ygmVCkKK21lbnV0cmFucyBUb2dnbGVcICZCb3R0b21cIFNjcm9sbGJhcgm52bTaXCC9usWpt9G52VwgxeSx2ygmQikKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJv97CylwgvbrFqbfRudlcIMXksdsoJkwpCittZW51dHJhbnMgVG9nZ2xlXCAmUmlnaHRcIFNjcm9sbGJhcgm/wLilwspcIL26xam30bnZXCDF5LHbKCZSKQorCisiIEVkaXQvRmlsZSBTZXR0aW5ncworbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJxsTAz1wgvLPBpCgmaSkKKworIiBCb29sZWFuIG9wdGlvbnMKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51ISDB2VwgufjIo7rZwMyx4lwgxeSx2ygmTik8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhILjxt89cILjwteVcIMXksdsoJkwpPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhIMHZXCBXcmFwXCDF5LHbKCZXKTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyISAgs7m4u7+hvK1cIFdyYXBcIMXksdsoJnIpPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhIMXHXCDIrsDlXCDF5LHbKCZlKTxUYWI+OnNldFwgZXQhCittZW51dHJhbnMgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpISDA2rW/wM61p8auXCDF5LHbKCZhKTxUYWI+OnNldFwgYWkhCittZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEgQy3AzrWnxsNcIMXksdsoJkMpPFRhYj46c2V0XCBjaW4hCisKKyIgb3RoZXIgb3B0aW9ucworbWVudXRyYW5zICZTaGlmdHdpZHRoCQkJvazHwcauILPKuvEoJlMpCittZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCbzSx8HGrlwgxce9usXpKCZUKQorbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJxdi9usauXCCzyrrxKCZ4KVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCcbEwM9cIMf8vcQoJkYpXC5cLlwuCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCcTDt69cIL26xbQoJm8pCittZW51dHJhbnMgJktleW1hcAkJCcWwuMooJkspCisKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQmx27LDXCCw7bijseIoJkYpXC5cLlwuCisKKyIgUHJvZ3JhbW1pbmcgbWVudQorbWVudXRyYW5zICZUb29scwkJCbW1sbgoJlQpCittZW51dHJhbnMgJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQnAzFwgsr+4rselt85cILChseIoJkopPFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJCbXat85cILChseIoJmIpPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJsr+4rselXCDGxMDPXCC4uLXpseIoJlQpCisKKyIgVG9vbHMuRm9sZCBNZW51CittZW51dHJhbnMgJkZvbGRpbmcJCQnBorHiKCZGKQorIiBvcGVuIGNsb3NlIGZvbGRzCittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJwaK0wlwgseK0yVwgu+e/61wgxeSx2ygmRSk8VGFiPnppCittZW51dHJhbnMgJlZpZXdcIEN1cnNvclwgTGluZTxUYWI+enYJxL+8rVwgwdlcILq4seIoJlYpPFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNenggxL+8rVwgwdm4uFwgurix4igmdyk8VGFiPnpNengKK21lbnV0cmFucyBDJmxvc2VcIG1vcmVcIGZvbGRzPFRhYj56bQm09VwguLnAulwgwaKx4lwgtN2x4igmbCk8VGFiPnptCittZW51dHJhbnMgJkNsb3NlXCBhbGxcIGZvbGRzPFRhYj56TQnBosj5XCC6zrrQXCC48LXOXCDBorHiKCZDKTxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyCbT1ILi5wLpcIMGiseJcIL+tseIoJnApPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgnBosj5XCC6zrrQXCC48LXOXCDG7LHiKCZPKTxUYWI+elIKKyIgZm9sZCBtZXRob2QKK21lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkJwaK0wlwguea5/SgmaCkKK21lbnV0cmFucyBNJmFudWFsCQkJvPa1vygmYSkKK21lbnV0cmFucyBJJm5kZW50CQkJtem/qb6yseIoJm4pCittZW51dHJhbnMgRSZ4cHJlc3Npb24JCQnHpcf2vcQoJngpCittZW51dHJhbnMgUyZ5bnRheAkJCb3FxcO9uigmeSkKKyJtZW51dHJhbnMgJkRpZmYJCQkJJkRpZmYKK21lbnV0cmFucyBNYSZya2VyCQkJsr+4rselKCZyKQorIiBjcmVhdGUgYW5kIGRlbGV0ZSBmb2xkcworbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQm79bfOIMGiseIoJkYpPFRhYj56ZgorbWVudXRyYW5zICZEZWxldGVcIEZvbGQ8VGFiPnpkCQm/z8D8yPcgxuyx4igmRCk8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJuPC1zlwgxuyx4igmQSk8VGFiPnpECisiIG1vdmluZyBhcm91bmQgaW4gZm9sZHMKK21lbnV0cmFucyBGb2xkXCBjb2x1bW5cICZ3aWR0aAkJwaLAu1wgxK1cILPKuvEoJncpCisKKyJtZW51dHJhbnMgJkRpZmYJCQkJJkRpZmYKK21lbnV0cmFucyAmVXBkYXRlCQkJsLu9xSgmVSkKK21lbnV0cmFucyAmR2V0XCBCbG9jawkJCbrtt7BcILChwa6/wLHiKCZHKQorbWVudXRyYW5zICZQdXRcIEJsb2NrCQkJuu23sFwgwf2+7rPWseIoJlApCisKK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCU1ha2UoJk0pPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJv6G3r1wguPG3z1wgurix4igmTCk8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQm43r3DwfZcILjxt89cILq4seIoJmkpPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCbTZwL1cIL+ht68oJk4pPFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AJwMzA/Fwgv6G3rygmUCk8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJv8C3obXIXCC48bfPKCZPKTxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3Cbv1t86/7lwguPG3zygmZSk8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCb+ht69cIMOiKCZXKQorbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCQmwu73FKCZVKTxUYWI+OmN3aW4KK21lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQm/rbHiKCZPKTxUYWI+OmNvcGVuCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCQm03bHiKCZDKTxUYWI+OmNjbG9zZQorbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCQnExMbEwM+3r1wgvLPBpCgmUykKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUhbWNcIHZpbTp4eGQJvcrAsMH4wLi3zlwguq/IrzxUYWI+OiUhbWNcIHZpbTp4eGQKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCb3KwLDB+MC4t85cILqvyK8oJkMpPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUhbWNcIHZpbTp4eGRcIC1yCb/4t6G067fOXCC6r8ivKCZyKTxUYWI+OiUhbWNcIHZpbTp4eGRcIC1yCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJv/i3obTrt85cILqvyK8oJnIpPFRhYj46JSF4eGRcIC1yCisKKyIgTmFtZXMgZm9yIGJ1ZmZlciBtZW51LgorbWVudXRyYW5zICZCdWZmZXJzCQkJufbG2ygmQikKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQkJwve4sselXCC02b3Dsde4rrHiKCZSKQorbWVudXRyYW5zICZEZWxldGUJCQnB9r/sseIoJkQpCittZW51dHJhbnMgJkFsdGVybmF0ZQkJCbGzw7woJkEpCittZW51dHJhbnMgJk5leHQJCQkJtNnAvSgmTikKK21lbnV0cmFucyAmUHJldmlvdXMJCQnAzMD8KCZQKQorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJCcOiKCZXKQorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCbv1XCDDoigmTik8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQmzqrSpseIoJnApPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCSPAuLfOXCCzqrSpseIoJmwpPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJvLy3zrfOXCCzqrSpseIoJlYpPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCcbEwM9cIMDNvbrHw7fOt69cILOqtKmx4gorCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCbTdseIoJkMpPFRhYj5eV2MKK21lbnV0cmFucyBDbG9zZVwgJk90aGVyKHMpPFRhYj5eV28JtNm4pVwgw6JcILTdseIoJk8pPFRhYj5eV28KKworbWVudXRyYW5zIE1vdmVcICZUbwkJCcDMtb8oJlQpCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkJssC067HiKCZUKTxUYWI+XldLCittZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCQm52bTaKCZCKTxUYWI+XldKCittZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAkJv97CyigmTCk8VGFiPl5XSAorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCQm/wLilwsooJlIpPFRhYj5eV0wKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQnAp7fOXCDIuMD8KCZVKTxUYWI+XldSCittZW51dHJhbnMgUm90YXRlXCAmRG93bjxUYWI+XldyCQm+xreht85cIMi4wPwoJkQpPFRhYj5eV3IKKworbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CQmwsMC6XCCz9MDMt84oJkUpPFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkJw9a061wgs/TAzLfOKCZNKTxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQnD1rzSXCCz9MDMt84oJmkpPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCcPWtOtcILPQwMy3zigmVyk8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCcPWvNJcILPQwMy3zigmaCk8VGFiPl5XMVx8CisKKyIgVGhlIHBvcHVwIG1lbnUKK21lbnV0cmFucyAmVW5kbwkJCcPrvNIoJlUpCittZW51dHJhbnMgQ3UmdAkJCcDauKOx4igmdCkKK21lbnV0cmFucyAmQ29weQkJCbq5u+coJkMpCittZW51dHJhbnMgJlBhc3RlCQm62cDMseIoJlApCittZW51dHJhbnMgJkRlbGV0ZQkJwfa/7LHiKCZEKQorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlCbvnsKLH/FwgsO24o7HiCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJs7m4u1wgsO24o7HiKCZXKQorbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCcHZXCCw7bijseIoJkwpCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJsbjIuVwgsO24o7HiKCZCKQorbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJuPC1zlwgsO24o7HiKCZBKQorCisiIFRoZSBHVUkgdG9vbGJhcgoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorICAgIHRtZW51IFRvb2xCYXIuT3BlbgkJxsTAzyC/rbHiCisgICAgdG1lbnUgVG9vbEJhci5TYXZlCQnH9sDnIMbEwM8gwPrA5QorICAgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbAm48LXOIMD6wOUKKyAgICB0bWVudSBUb29sQmFyLlByaW50CQnAzrziCisgICAgdG1lbnUgVG9vbEJhci5VbmRvCQnD67zSCisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQm02b3DIL3Hx+AKKyAgICB0bWVudSBUb29sQmFyLkN1dAkJwNq4o7HiCisgICAgdG1lbnUgVG9vbEJhci5Db3B5CQm6ubvnCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJutnAzLHiCisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQnDo7HiLi4uCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAm02cC9IMOjseIKKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CcDMwPwgw6Ox4gorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQm52bLZseIKKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCby8vMcgwNC+7r/AseIKKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCby8vMcgwPrA5QorICAgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0Cb26xam4s8auIL3Hx+AKKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCU1ha2UKKyAgICB0bWVudSBUb29sQmFyLlNoZWxsCQm9qQorICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJsr+4rselILi4temx4gorICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAmyv7iux6W3ziCwobHiCisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQm1tb/yuLsKKyAgICB0bWVudSBUb29sQmFyLkZpbmRIZWxwCbW1v/K4uyDDo7HiLi4uCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXgJCbmuuf0oJlMpCittZW51dHJhbnMgJlNob3dcIGluZGl2aWR1YWxcIGNob2ljZXMgILjwtedcILyxxcOwobTJx9FcIMfXuPFcILq4seIoJlMpCittZW51dHJhbnMgU2V0XCAnJnN5bnRheCdcIG9ubHkJJ3N5bnRheCe4uFwgvLPBpCgmcykKK21lbnV0cmFucyBTZXRcICcmZmlsZXR5cGUnXCB0b28JJ2ZpbGV0eXBlJ7W1XCC8s8GkKCZmKQorbWVudXRyYW5zICZPZmYJCQmy9LHiKCZPKQorbWVudXRyYW5zICZNYW51YWwJCbz2tb8oJk0pCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJwNq1vygmdSkKK21lbnV0cmFucyBvbi9vZmZcIGZvclwgJlRoaXNcIGZpbGUgwMxcIMbEwM+4uFwgxNGx4i+y9LHiKCZUKQorCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQm79lwgvcPH6CgmbCkKK21lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0CUhpZ2hsaWdodFwgvcPH6CgmSCkKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJSFRNTLfOXCC6r8ivKCZDKQorCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9rb19rci51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9rb19rci51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4ZDliYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2tvX2tyLnV0Zi04LnZpbQpAQCAtMCwwICsxLDI0MyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJS29yZWFuCisiIE1haW50YWluZXI6CQlOYW0gU3VuZ0h5dW4gPG5hbXNoQGtsZHAub3JnPgorIiBMYXN0IENoYW5nZToJCTIwMDMgQXByIDI1CisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCitzY3JpcHRlbmNvZGluZyB1dGYtOAorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJ64+E7JuA66eQKCZIKQorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgnqsJzqtIAoJk8pPFRhYj48RjE+CittZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJ7IKs7Jqp7J6QXCDrp6TribTslrwoJlUpCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJ7Ja07LCM7ZWY64KYXCDrqqnroZ0oJkgpCittZW51dHJhbnMgJkdVSQkJCeq1rOydtCgmRykKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJ7LC+6riwKCZGKVwuXC5cLgorbWVudXRyYW5zICZDcmVkaXRzCQnqs6Drp4jsmrRcIOu2hCgmQykKK21lbnV0cmFucyBDbyZweWluZwkJ7KCA7J6R6raMKCZwKQorbWVudXRyYW5zIE8mcnBoYW5zCQnqs6DslYQoJnIpCittZW51dHJhbnMgJlZlcnNpb24JCeuyhOyghCgmVikKK21lbnV0cmFucyAmQWJvdXQJCeydtFwg7ZSE66Gc6re4656o7J2AKCZBKQorCisiIEZpbGUgbWVudQorbWVudXRyYW5zICZGaWxlCQkJCe2MjOydvCgmRikKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCeyXtOq4sCgmTylcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAnrgpjriKDshJxcIOyXtOq4sCgmbClcLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQnsg4jroZzsmrQoJk4pPFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQnri6vquLAoJkMpPFRhYj46Y2xvc2UKK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCQnsoIDsnqUoJlMpPFRhYj46dworbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdgnri6TrpbhcIOydtOumhOycvOuhnFwg7KCA7J6lKCZBKVwuXC5cLjxUYWI+OnNhdgorIm1lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4JU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCisibWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JU3BsaXRcIFBhdGNoZWRcICZCeVwuXC5cLgorbWVudXRyYW5zICZQcmludAkJCeyduOyHhCgmUCkKK21lbnV0cmFucyBTYSZ2ZS1FeGl0PFRhYj46d3FhCQnsoIDsnqXtlZjqs6BcIOuBneuCtOq4sCgmdik8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJ64Gd64K06riwKCZ4KTxUYWI+OnFhCisKKyIgRWRpdCBtZW51CittZW51dHJhbnMgJkVkaXQJCQkJ7Y647KeRKCZFKQorbWVudXRyYW5zICZVbmRvPFRhYj51CQkJ7Leo7IaMKCZVKTxUYWI+dQorbWVudXRyYW5zICZSZWRvPFRhYj5eUgkJCeuLpOyLnCDsi6TtlokoJlIpPFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQnrkJjtkoDsnbQoJmUpPFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCeyekOultOq4sCgmdCk8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQnrs7XsgqwoJkMpPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCeu2meydtOq4sCgmUCk8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQnslZ7sl5BcIOu2meydtOq4sCgmQik8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQnrkqTsl5BcIOu2meydtOq4sCgmQSk8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCeyngOyasOq4sCgmRCk8VGFiPngKK21lbnV0cmFucyAmU2VsZWN0XCBhbGw8VGFiPmdnVkcJCeuqqOuRkFwg6rOg66W06riwKCZTKTxUYWI+Z2dWRworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJ7LC+6riwKCZGKVwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4J7LC+7JWE7IScXCDrsJTqvrjquLAoJmwpXC5cLlwuCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCeyEpOyglVwg7LC9KCZXKQorCisiIEVkaXQvR2xvYmFsIFNldHRpbmdzCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJCeyghOyXrVwg7ISk7KCVKCZHKQorbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzISDtjKjthLRcIO2VmOydtOudvOydtO2KuFwg7Yag6riAKCZIKTxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEg64yA7IaM66y47J6QXCDqtazrtoRcIO2GoOq4gCgmSSk8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hIFNob3dtYXRjaFwg7Yag6riAKCZTKTxUYWI+OnNldFwgc20hCittZW51dHJhbnMgJkNvbnRleHRcIGxpbmVzCQnsvZjthY3siqTtirhcIOykhCgmQykKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJ6rCA7IOBXCDtjrjsp5EoJlYpCittZW51dHJhbnMgTmV2ZXIJCQkJ7IKs7JqpIOyViCDtlagKK21lbnV0cmFucyBCbG9ja1wgU2VsZWN0aW9uCQnruJTrn61cIOqzoOultOq4sAorbWVudXRyYW5zIEluc2VydFwgbW9kZQkJCeyCveyehVwg66qo65OcCittZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CQnruJTrn63qs7xcIOyCveyehQorbWVudXRyYW5zIEFsd2F5cwkJCe2VreyDgVwg7IKs7JqpCittZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEg7IK97J6FXCDrqqjrk5xcIO2GoOq4gCgmTSk8VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEgVmlcIO2YuO2ZmFwg7Yag6riAKCZvKTxUYWI+OnNldFwgY3AhCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkJ7LC+6riwXCDqsr3roZwoJlApXC5cLlwuCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4JCeq8rOumrO2RnFwg7YyM7J28KCZnKVwuXC5cLgorCisiIEdVSSBvcHRpb25zCittZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhcgkJ64+E6rWs66eJ64yAXCDthqDquIAoJlQpCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJ67CU64ulXCDsiqTtgazroaTrsJRcIO2GoOq4gCgmQikKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJ7Jm87Kq9XCDsiqTtgazroaTrsJRcIO2GoOq4gCgmTCkKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCeyYpOuluOyqvVwg7Iqk7YGs66Gk67CUXCDthqDquIAoJlIpCisKKyIgRWRpdC9GaWxlIFNldHRpbmdzCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQntjIzsnbxcIOyEpOyglSgmaSkKKworIiBCb29sZWFuIG9wdGlvbnMKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51ISDspIRcIOuyiO2YuOu2meydtOq4sFwg7Yag6riAKCZOKTxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEg66qp66GdXCDrqqjrk5xcIO2GoOq4gCgmTCk8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEg7KSEXCBXcmFwXCDthqDquIAoJlcpPFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhICDrgrHrp5Dsl5DshJxcIFdyYXBcIO2GoOq4gCgmcik8VGFiPjpzZXRcIGxiciEKK21lbnV0cmFucyBUb2dnbGVcICZleHBhbmQtdGFiPFRhYj46c2V0XCBldCEg7YOtXCDtmZXsnqVcIO2GoOq4gCgmZSk8VGFiPjpzZXRcIGV0IQorbWVudXRyYW5zIFRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEg7J6Q64+Z7J2464207Yq4XCDthqDquIAoJmEpPFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luISBDLeyduOuNtO2MhVwg7Yag6riAKCZDKTxUYWI+OnNldFwgY2luIQorCisiIG90aGVyIG9wdGlvbnMKK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJCeyJrO2UhO2KuCDrhIjruYQoJlMpCittZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCeyGjO2UhO2KuFwg7YOt7Iqk7YaxKCZUKQorbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJ7YWN7Iqk7Yq4XCDrhIjruYQoJngpXC5cLlwuCittZW51dHJhbnMgJkZpbGVcIEZvcm1hdFwuXC5cLgkJ7YyM7J28XCDtmJXsi50oJkYpXC5cLlwuCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCey7rOufrFwg7Iqk7YK0KCZvKQorbWVudXRyYW5zICZLZXltYXAJCQntgqTrp7UoJkspCisKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQnquIDqvLRcIOqzoOultOq4sCgmRilcLlwuXC4KKworIiBQcm9ncmFtbWluZyBtZW51CittZW51dHJhbnMgJlRvb2xzCQkJ64+E6rWsKCZUKQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0J7J20XCDqvKzrpqztkZzroZxcIOqwgOq4sCgmSik8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkJ65Kk66GcXCDqsIDquLAoJmIpPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJ6rys66as7ZGcXCDtjIzsnbxcIOunjOuTpOq4sCgmVCkKKworIiBUb29scy5Gb2xkIE1lbnUKK21lbnV0cmFucyAmRm9sZGluZwkJCeygkeq4sCgmRikKKyIgb3BlbiBjbG9zZSBmb2xkcworbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppCeygkeuKlFwg6riw64qlXCDsgqzsmqlcIO2GoOq4gCgmRSk8VGFiPnppCittZW51dHJhbnMgJlZpZXdcIEN1cnNvclwgTGluZTxUYWI+enYJ7Luk7IScXCDspIRcIOuztOq4sCgmVik8VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eCDsu6TshJxcIOykhOunjFwg67O06riwKCZ3KTxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCeuNlFwg66eO7J2AXCDsoJHquLBcIOuLq+q4sCgmbCk8VGFiPnptCittZW51dHJhbnMgJkNsb3NlXCBhbGxcIGZvbGRzPFRhYj56TQnsoJHtnoxcIOu2gOu2hFwg66qo65GQXCDsoJHquLAoJkMpPFRhYj56TQorbWVudXRyYW5zIE8mcGVuXCBtb3JlXCBmb2xkczxUYWI+enIJ642UIOunjuydgFwg7KCR6riwXCDsl7TquLAoJnApPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgnsoJHtnoxcIOu2gOu2hFwg66qo65GQXCDtjrTquLAoJk8pPFRhYj56UgorIiBmb2xkIG1ldGhvZAorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQnsoJHripRcIOuwqeuylSgmaCkKK21lbnV0cmFucyBNJmFudWFsCQkJ7IiY64+ZKCZhKQorbWVudXRyYW5zIEkmbmRlbnQJCQnrk6Tsl6zsk7DquLAoJm4pCittZW51dHJhbnMgRSZ4cHJlc3Npb24JCQntkZztmITsi50oJngpCittZW51dHJhbnMgUyZ5bnRheAkJCeyLoO2DneyKpCgmeSkKKyJtZW51dHJhbnMgJkRpZmYJCQkJJkRpZmYKK21lbnV0cmFucyBNYSZya2VyCQkJ6rys66as7ZGcKCZyKQorIiBjcmVhdGUgYW5kIGRlbGV0ZSBmb2xkcworbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQnsg4jroZwg7KCR6riwKCZGKTxUYWI+emYKK21lbnV0cmFucyAmRGVsZXRlXCBGb2xkPFRhYj56ZAkJ7JmE7KCE7Z6IIO2OtOq4sCgmRCk8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJ66qo65GQXCDtjrTquLAoJkEpPFRhYj56RAorIiBtb3ZpbmcgYXJvdW5kIGluIGZvbGRzCittZW51dHJhbnMgRm9sZFwgY29sdW1uXCAmd2lkdGgJCeygkeydhFwg7Lm4XCDrhIjruYQoJncpCisKKyJtZW51dHJhbnMgJkRpZmYJCQkJJkRpZmYKK21lbnV0cmFucyAmVXBkYXRlCQkJ6rCx7IugKCZVKQorbWVudXRyYW5zICZHZXRcIEJsb2NrCQkJ67iU65+tXCDqsIDsoLjsmKTquLAoJkcpCittZW51dHJhbnMgJlB1dFwgQmxvY2sJCQnruJTrn61cIOynkeyWtOuEo+q4sCgmUCkKKworbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZQkJTWFrZSgmTSk8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsCQnsl5Drn6xcIOuqqeuhnVwg67O06riwKCZMKTxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCeuplOyLnOyngFwg66qp66GdXCDrs7TquLAoJmkpPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCeuLpOydjFwg7JeQ65+sKCZOKTxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCeydtOyghFwg7JeQ65+sKCZQKTxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAnsmKTrnpjrkJxcIOuqqeuhnSgmTyk8VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwnsg4jroZzsmrRcIOuqqeuhnSgmZSk8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCeyXkOufrFwg7LC9KCZXKQorbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCQnqsLHsi6AoJlUpPFRhYj46Y3dpbgorbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4JCeyXtOq4sCgmTyk8VGFiPjpjb3BlbgorbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQkJ64ur6riwKCZDKTxUYWI+OmNjbG9zZQorbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCQnsu7TtjIzsnbzrn6xcIOyEpOyglSgmUykKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUhbWNcIHZpbTp4eGQJ7Iut7Jyh7KeE7Jy866GcXCDrs4DtmZg8VGFiPjolIW1jXCB2aW06eHhkCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAnsi63snKHsp4TsnLzroZxcIOuzgO2ZmCgmQyk8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSFtY1wgdmltOnh4ZFwgLXIJ7JuQ656Y64yA66GcXCDrs4DtmZgoJnIpPFRhYj46JSFtY1wgdmltOnh4ZFwgLXIKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtcgnsm5DrnpjrjIDroZxcIOuzgO2ZmCgmcik8VGFiPjolIXh4ZFwgLXIKKworIiBOYW1lcyBmb3IgYnVmZmVyIG1lbnUuCittZW51dHJhbnMgJkJ1ZmZlcnMJCQnrsoTtjbwoJkIpCittZW51dHJhbnMgJlJlZnJlc2hcIG1lbnUJCeywqOumvO2RnFwg64uk7Iuc6re466as6riwKCZSKQorbWVudXRyYW5zICZEZWxldGUJCQnsp4DsmrDquLAoJkQpCittZW51dHJhbnMgJkFsdGVybmF0ZQkJCeq1kOyytCgmQSkKK21lbnV0cmFucyAmTmV4dAkJCQnri6TsnYwoJk4pCittZW51dHJhbnMgJlByZXZpb3VzCQkJ7J207KCEKCZQKQorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJCeywvSgmVykKK21lbnV0cmFucyAmTmV3PFRhYj5eV24JCQnsg4hcIOywvSgmTik8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQnrgpjriITquLAoJnApPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCSPsnLzroZxcIOuCmOuIhOq4sCgmbCk8VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdgnshLjroZzroZxcIOuCmOuIhOq4sCgmVik8VGFiPl5XdgorbWVudXRyYW5zIFNwbGl0XCBGaWxlXCBFJnhwbG9yZXIJ7YyM7J28XCDsnbXsiqTtlIzroZzrn6xcIOuCmOuIhOq4sAorCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCeuLq+q4sCgmQyk8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5Xbwnri6TrpbhcIOywvVwg64ur6riwKCZPKTxUYWI+XldvCisKK21lbnV0cmFucyBNb3ZlXCAmVG8JCQnsnbTrj5koJlQpCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkJ6ryt64yA6riwKCZUKTxUYWI+XldLCittZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCQnrsJTri6UoJkIpPFRhYj5eV0oKK21lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICQnsmbzsqr0oJkwpPFRhYj5eV0gKK21lbnV0cmFucyAmUmlnaHRcIHNpZGU8VGFiPl5XTAkJ7Jik66W47Kq9KCZSKTxUYWI+XldMCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJ7JyE66GcXCDtmozsoIQoJlUpPFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IJCeyVhOuemOuhnFwg7ZqM7KCEKCZEKTxUYWI+XldyCisKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkJ6rCZ7J2AXCDrhpLsnbTroZwoJkUpPFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkJ7LWc64yAXCDrhpLsnbTroZwoJk0pPFRhYj5eV18KK21lbnV0cmFucyBNJmluXCBIZWlnaHQ8VGFiPl5XMV8JCey1nOyGjFwg64aS7J2066GcKCZpKTxUYWI+XlcxXworbWVudXRyYW5zIE1heFwgJldpZHRoPFRhYj5eV1x8CQnstZzrjIBcIOuEk+ydtOuhnCgmVyk8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCey1nOyGjFwg64ST7J2066GcKCZoKTxUYWI+XlcxXHwKKworIiBUaGUgcG9wdXAgbWVudQorbWVudXRyYW5zICZVbmRvCQkJ7Leo7IaMKCZVKQorbWVudXRyYW5zIEN1JnQJCQnsnpDrpbTquLAoJnQpCittZW51dHJhbnMgJkNvcHkJCQnrs7XsgqwoJkMpCittZW51dHJhbnMgJlBhc3RlCQnrtpnsnbTquLAoJlApCittZW51dHJhbnMgJkRlbGV0ZQkJ7KeA7Jqw6riwKCZEKQorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlCeyCrOqwge2YlVwg6rOg66W06riwCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJ64Kx66eQXCDqs6DrpbTquLAoJlcpCittZW51dHJhbnMgU2VsZWN0XCAmTGluZQkJ7KSEXCDqs6DrpbTquLAoJkwpCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJ6rWs7ZqNXCDqs6DrpbTquLAoJkIpCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQnrqqjrkZBcIOqzoOultOq4sCgmQSkKKworIiBUaGUgR1VJIHRvb2xiYXIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCe2MjOydvCDsl7TquLAKKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCe2YhOyerCDtjIzsnbwg7KCA7J6lCisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCeuqqOuRkCDsoIDsnqUKKyAgICB0bWVudSBUb29sQmFyLlByaW50CQnsnbjsh4QKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCey3qOyGjAorICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJ64uk7IucIOyLpO2WiQorICAgIHRtZW51IFRvb2xCYXIuQ3V0CQnsnpDrpbTquLAKKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCeuzteyCrAorICAgIHRtZW51IFRvb2xCYXIuUGFzdGUJCeu2meydtOq4sAorICAgIHRtZW51IFRvb2xCYXIuRmluZAkJ7LC+6riwLi4uCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAnri6TsnYwg7LC+6riwCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldgnsnbTsoIQg7LC+6riwCisgICAgdG1lbnUgVG9vbEJhci5SZXBsYWNlCeuwlOq+uOq4sAorICAgIHRtZW51IFRvb2xCYXIuTG9hZFNlc24J7IS47IWYIOydveyWtOyYpOq4sAorICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24J7IS47IWYIOyggOyepQorICAgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0CeyKpO2BrOumve2KuCDsi6TtlokKKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCU1ha2UKKyAgICB0bWVudSBUb29sQmFyLlNoZWxsCQnsiZgKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCeq8rOumrO2RnCDrp4zrk6TquLAKKyAgICB0bWVudSBUb29sQmFyLlRhZ0p1bXAJ6rys66as7ZGc66GcIOqwgOq4sAorICAgIHRtZW51IFRvb2xCYXIuSGVscAkJ64+E7JuA66eQCisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscAnrj4Tsm4Drp5Ag7LC+6riwLi4uCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXgJCeusuOuylSgmUykKK21lbnV0cmFucyAmU2hvd1wgaW5kaXZpZHVhbFwgY2hvaWNlcyAg66qo65OgXCDshKDtg53qsIDriqXtlZxcIO2VreuqqVwg67O06riwKCZTKQorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CSdzeW50YXgn66eMXCDshKTsoJUoJnMpCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCSdmaWxldHlwZSfrj4RcIOyEpOyglSgmZikKK21lbnV0cmFucyAmT2ZmCQkJ64GE6riwKCZPKQorbWVudXRyYW5zICZNYW51YWwJCeyImOuPmSgmTSkKK21lbnV0cmFucyBBJnV0b21hdGljCQnsnpDrj5koJnUpCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlIOydtFwg7YyM7J2866eMXCDsvJzquLAv64GE6riwKCZUKQorCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQnsg4lcIOyLnO2XmCgmbCkKK21lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0CUhpZ2hsaWdodFwg7Iuc7ZeYKCZIKQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSFRNTAlIVE1M66GcXCDrs4DtmZgoJkMpCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2tvX2tyLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2tvX2tyLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmE5NTlhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfa29fa3IudmltCkBAIC0wLDAgKzEsNSBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJS29yZWFuCisiIFRyYW5zbGF0ZWQgQnk6CU5hbSBTdW5nSHl1biA8bmFtc2hAa2xkcC5vcmc+CisiIExhc3QgQ2hhbmdlOgkJMjAwMyBGZWIgMjQKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfa29fa3IuZXVja3IudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9ubC5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfbmwubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTBlYzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfbmwubGF0aW4xLnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CU5lZGVybGFuZHMKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfbmxfbmwubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfbmwudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfbmwudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODdkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9ubC51dGYtOC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglOZWRlcmxhbmRzIGZvciBVVEYtOCBlbmNvZGluZworCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9ubF9ubC5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9ubF9ubC5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfbmxfbmwubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Y3NWYyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfbmxfbmwubGF0aW4xLnZpbQpAQCAtMCwwICsxLDI0MCBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJTmVkZXJsYW5kcworIiBNYWludGFpbmVyOgkJQnJhbSBNb29sZW5hYXIKKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDA1CisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCisiIFRoZSB0cmFuc2xhdGlvbnMgYmVsb3cgYXJlIGluIGxhdGluMSwgYnV0IHRoZXkgd29yayBmb3IgY3AxMjUyIGFuZAorIiBpc28tODg1OS0xNSB3aXRob3V0IGNvbnZlcnNpb24gYXMgd2VsbC4KK2lmICZlbmMgIT0gImNwMTI1MiIgJiYgJmVuYyAhPSAiaXNvLTg4NTktMTUiCisgIHNjcmlwdGVuY29kaW5nIGxhdGluMQorZW5kaWYKKworIiBIZWxwIG1lbnUKK21lbnV0cmFucyAmSGVscAkJCSZIZWxwCittZW51dHJhbnMgJk92ZXJ2aWV3PFRhYj48RjE+CSZPdmVyemljaHQ8VGFiPjxGMT4KK21lbnV0cmFucyAmVXNlclwgTWFudWFsCQlHZWJydWlrZXJzaGFuZGxlaWRpbmcKK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcwkmSG9lLWRvZS1pa1wgbGlqc3QKKyJtZW51dHJhbnMgJkdVSQkJCSZHVUkKK21lbnV0cmFucyAmQ3JlZGl0cwkJJk1ldFwgZGFua1wgYWFuCittZW51dHJhbnMgQ28mcHlpbmcJCSZDb3B5cmlnaHQKK21lbnV0cmFucyAmU3BvbnNvci9SZWdpc3RlcgkmU3BvbnNvci9SZWdpc3RyZWVyCittZW51dHJhbnMgTyZycGhhbnMJCSZXZWVza2luZGVyZW4KK21lbnV0cmFucyAmVmVyc2lvbgkJJlZlcnNpZQorbWVudXRyYW5zICZBYm91dAkJJkludHJvZHVjdGllc2NoZXJtCisKKyIgRmlsZSBtZW51CittZW51dHJhbnMgJkZpbGUJCQkJJkJlc3RhbmQKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCSZPcGVuZW5cLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAlJblwgbmlldXdcICZWZW5zdGVyXCBvcGVuZW5cLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQkmTmlldXc8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCSZTbHVpdGVuPFRhYj46Y2xvc2UKK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCQkmQmV3YXJlbjxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJQmV3YXJlblwgYWxzXC5cLlwuPFRhYj46c2F2CittZW51dHJhbnMgU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCVRvb25cIGRpZmZcIG1ldFwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JVG9vblwgZ2V3aWp6aWdkXCBkb29yXC5cLlwuCittZW51dHJhbnMgJlByaW50CQkJQWYmZHJ1a2tlbgorbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJCUJld2FyZW5cIGVuXCBBZnNsdWl0ZW48VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJJkFmc2x1aXRlbjxUYWI+OnFhCisKKyIgRWRpdCBtZW51CittZW51dHJhbnMgJkVkaXQJCQkJQmUmd2Vya2VuCittZW51dHJhbnMgJlVuZG88VGFiPnUJCQlUZXJ1ZzxUYWI+dQorbWVudXRyYW5zICZSZWRvPFRhYj5eUgkJCVZvbyZydWl0PFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQkmSGVyaGFsZW48VGFiPlwuCittZW51dHJhbnMgQ3UmdDxUYWI+Iit4CQkJJktuaXBwZW48VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQlLJm9waetlcmVuPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCVBsYWtrZW48VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQlFcnZvb3JcIGludm9lZ2VuPFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkJRXJhY2h0ZXJcIGludm9lZ2VuPFRhYj5dcAorbWVudXRyYW5zICZTZWxlY3RcIGFsbDxUYWI+Z2dWRwkJQWxsZXNcICZNYXJrZXJlbjxUYWI+Z2dWRworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJJlpvZWtlblwuXC5cLgorbWVudXRyYW5zICZGaW5kPFRhYj4vCQkJJlpvZWtlbjxUYWI+LworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JWm9la2VuXCBlblwgJlZlcnZhbmdlblwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjolcwlab2VrZW5cIGVuXCAmVmVydmFuZ2VuPFRhYj46JXMKK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlCQlab2VrZW5cIGVuXCAmVmVydmFuZ2VuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OnMJWm9la2VuXCBlblwgJlZlcnZhbmdlbjxUYWI+OnMKK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJT3B0aWV2ZW5zdGVyCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJCUdsb2JhbGVcIE9wdGllcworbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJQmVzdGFuZG9wdGllcworbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQlLbGV1cmVuc2NoZW1hCittZW51dHJhbnMgJktleW1hcAkJCVRvZXRzZW5ib3JkaW5kZWxpbmcKKworIiBFZGl0Lkdsb2JhbCBTZXR0aW5ncworbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQlGbGlwXCBQYXRyb29ua2xldXJpbmc8VGFiPjpzZXRcIGhscyEKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCUZsaXBcIE5lZ2VyZW5cIGhvb2ZkL2tsZWluZVwgbGV0dGVyczxUYWI+OnNldFwgaWMhCittZW51dHJhbnMgVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEJRmxpcFwgU2hvd21hdGNoPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCUNvbnRleHRyZWdlbHMKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJVmlydHVlZWxcIHBvc2l0aW9uZXJlbgorbWVudXRyYW5zIE5ldmVyCQkJCU5vb2l0CittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgkJQmlqXCBCbG9rc2VsZWN0aWUKK21lbnV0cmFucyBJbnNlcnRcIG1vZGUJCQlJblwgSW52b2VnbW9kZQorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJQmlqXCBCbG9rc2VsZWN0aWVcIGVuXCBJbnZvZWdtb2RlCittZW51dHJhbnMgQWx3YXlzCQkJQWx0aWpkCittZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJRmxpcFwgSW52b2VnbW9kZTxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwIQlGbGlwXCBWaVwgQ29tcGF0aWJpbGl0ZWl0PFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQlab2VrcGFkXC5cLlwuCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4JCVRhZ1wgQmVzdGFuZGVuXC5cLlwuCittZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhcgkJVG9vbi92ZXJiZXJnXCBLbm9wcGVuYmFsaworbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCVRvb24vdmVyYmVyZ1wgb25kZXJzdGVcIHNjaHVpZmJhbGsKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJVG9vbi92ZXJiZXJnXCBsaW5rZXJcIHNjaHVpZmJhbGsKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCVRvb24vdmVyYmVyZ1wgcmVjaHRlclwgc2NodWlmYmFsaworbWVudXRyYW5zIE5vbmUJCQkJR2VlbgorCisiIEVkaXQuRmlsZSBTZXR0aW5ncworbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCUZsaXBcIHJlZ2VsbnVtbWVyczxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCUZsaXBcIGxpc3RcIG1vZGU8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJCUZsaXBcIHJlZ2VsYWZicmVrZW48VGFiPjpzZXRcIHdyYXAhCittZW51dHJhbnMgVG9nZ2xlXCBXJnJhcFwgYXRcIHdvcmQ8VGFiPjpzZXRcIGxiciEJRmxpcFwgYWZicmVrZW5cIG9wXCB3b29yZGdyZW5zPHRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCQlGbGlwXCB0YWJleHBhbnNpZTxUYWI+OnNldFwgZXQhCittZW51dHJhbnMgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQkJRmxpcFwgYXV0b21hdGlzY2hcIGluZGVudGVyZW48VGFiPjpzZXRcIGFpIQorbWVudXRyYW5zIFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCQlGbGlwXCBDLWluZGVudGVyZW48VGFiPjpzZXRcIGNpbiEKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQkJVGVrc3RicmVlZHRlXC5cLlwuCittZW51dHJhbnMgJkZpbGVcIEZvcm1hdFwuXC5cLgkJCQlCZXN0YW5kc2Zvcm1hYXRcLlwuXC4KKworIiBUb29scyBtZW51CittZW51dHJhbnMgJlRvb2xzCQkJJkdlcmVlZHNjaGFwCittZW51dHJhbnMgJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQkmU3ByaW5nXCBuYWFyXCBUYWc8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkJU3ByaW5nXCAmVGVydWc8VGFiPl5UCittZW51dHJhbnMgQnVpbGRcICZUYWdzXCBGaWxlCQlHZW5lcmVlclwgJlRhZ3NiZXN0YW5kCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQkmTWFrZVwgdWl0dm9lcmVuPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJJkZvdXRlbmxpanN0PFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJJkJlcmljaHRlbmxpanN0PFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCVZvbGdlbmRlXCBGb3V0PFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AJVm9yaWdlXCBGb3V0PFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCSZPdWRlcmVcIExpanN0PFRhYj46Y29sZAorbWVudXRyYW5zIE4mZXdlclwgTGlzdDxUYWI+OmNuZXcJJk5pZXV3ZXJlXCBMaWpzdDxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdwkJRm91dGVudmVuc3RlcgorbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCQkmQWFucGFzc2VuPFRhYj46Y3dpbgorbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4JCSZPcGVuZW48VGFiPjpjb3BlbgorbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQkJJlNsdWl0ZW48VGFiPjpjY2xvc2UKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCUNvbnZlcnRlZXJcIG5hYXJcIEhFWDxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJQ29udmVydGVlclwgdGVydWc8VGFiPjolIXh4ZFwgLXIKK21lbnV0cmFucyAmU2V0XCBDb21waWxlcgkJS2llc1wgQ29tcGlsZXIKKworIiBUb29scy5Gb2xkaW5nCittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJRmxpcFwgdG9uZW5cIGZvbGRzPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CVRvb25cIGN1cnNvcnJlZ2VsPFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJVG9vblwgYWxsZWVuXCBjdXJzb3JyZWdlbDxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCVNsdWl0XCBtZWVyXCBmb2xkczxUYWI+em0KK21lbnV0cmFucyAmQ2xvc2VcIGFsbFwgZm9sZHM8VGFiPnpNCVNsdWl0XCBhbGxlXCBmb2xkczxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyCU9wZW5cIG1lZXJcIGZvbGRzPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UglPcGVuXCBhbGxlXCBmb2xkczxUYWI+elIKK21lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkJRm9sZHdpanplCittZW51dHJhbnMgTSZhbnVhbAkJCUhhbmRtYXRpZworbWVudXRyYW5zIEkmbmRlbnQJCQlJbnNwcmluZ2luZworbWVudXRyYW5zIEUmeHByZXNzaW9uCQkJRXhwcmVzc2llCittZW51dHJhbnMgUyZ5bnRheAkJCVN5bnRheAorbWVudXRyYW5zICZEaWZmCQkJCVZlcnNjaGlsbGVuCittZW51dHJhbnMgTWEmcmtlcgkJCU1hcmtlcmluZ2VuCittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCW1hYWtcIEZvbGQ8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCXZlcndpamRlclwgRm9sZDxUYWI+emQKK21lbnV0cmFucyBEZWxldGVcICZBbGxcIEZvbGRzPFRhYj56RAl2ZXJ3aWpkZXJcIGFsbGVcIEZvbGRzPFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbHVtblwgJndpZHRoCQlGb2xkXCBrb2xvbVwgYnJlZWR0ZQorCisiIFRvb2xzLkRpZmYKK21lbnV0cmFucyAmVXBkYXRlCQlWZXJ2ZXJzZW4KK21lbnV0cmFucyAmR2V0XCBCbG9jawkJQmxva1wgb3BoYWxlblwgdmFuXCBhbmRlclwgdmVuc3RlcgorbWVudXRyYW5zICZQdXRcIEJsb2NrCQlCbG9rXCBuYWFyXCBhbmRlclwgdmVuc3RlcgorCisiIE5hbWVzIGZvciBidWZmZXIgbWVudS4KK21lbnV0cmFucyAmQnVmZmVycwkJJkJ1ZmZlcgorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51CVZlcnZlcnNcIG1lbnUKK21lbnV0cmFucyAmRGVsZXRlCQlXaXNzZW4KK21lbnV0cmFucyAmQWx0ZXJuYXRlCQlWb3JpZ2UKK21lbnV0cmFucyAmTmV4dAkJCVZvb3J1aXQKK21lbnV0cmFucyAmUHJldmlvdXMJCUFjaHRlcnVpdAorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJCSZWZW5zdGVyCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJJk5pZXV3PFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJU3BsaXRzZW48VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JU3BsaXRzXCBuYWFyXCAjPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJU3BsaXRzXCAmVmVydGlrYWFsPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCVNwbGl0c1wgQmVzdGFuZHZlcmtlbm5lcgorbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCQkmU2x1aXRlbjxUYWI+XldjCittZW51dHJhbnMgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvCSZTbHVpdFwgYWxsZVwgYW5kZXJlPFRhYj5eV28KK21lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQkJVm9sZ2VuZGU8VGFiPl5XdworbWVudXRyYW5zIFAmcmV2aW91czxUYWI+XldXCQkmVm9yaWdlPFRhYj5eV1cKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkJJkdlbGlqa2VcIGFmbWV0aW5nZW48VGFiPl5XPQorbWVudXRyYW5zICZNYXhcIEhlaWdodDxUYWI+XldfCQkmTWF4aW1hbGVcIGhvb2d0ZTxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQlNaSZuaW1hbGVcIGhvb2d0ZTxUYWI+XlcxXworbWVudXRyYW5zIE1heFwgJldpZHRoPFRhYj5eV1x8CQlNYXhpbWFsZVwgYnJlZWR0ZTxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJTWluaW1hbGVcIGJyZWVkdGU8VGFiPl5XMVx8CittZW51dHJhbnMgTW92ZVwgJlRvCQkJVmVycGxhYXRzXCBuYWFyCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkJQm92ZW5rYW50PFRhYj5eV0sKK21lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJCU9uZGVya2FudDxUYWI+XldKCittZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAkJTGlua2Vya2FudDxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCVJlY2h0ZXJrYW50PFRhYj5eV0wKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQlSb3RlcmVuXCBuYWFyXCAmYm92ZW48VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJUm90ZXJlblwgbmFhclwgJm9uZGVyPFRhYj5eV3IKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQlTZWxlY3RlZXJcIGZvbnRcLlwuXC4KKworIiBUaGUgcG9wdXAgbWVudQorbWVudXRyYW5zICZVbmRvCQkJJlRlcnVnCittZW51dHJhbnMgQ3UmdAkJCUtuaXAKK21lbnV0cmFucyAmQ29weQkJCSZLb3Bp62VyCittZW51dHJhbnMgJlBhc3RlCQkmUGxhaworbWVudXRyYW5zICZEZWxldGUJCSZXaXNzZW4KK21lbnV0cmFucyBTZWxlY3RcIEJsb2Nrd2lzZQlTZWxlY3RlZXJcIHBlclwgUmVjaHRob2VrCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJU2VsZWN0ZWVyXCBlZW5cICZXb29yZAorbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCVNlbGVjdGVlclwgZWVuXCAmUmVnZWwKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawlTZWxlY3RlZXJcIGVlblwgUmVjaHQmaG9laworbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJU2VsZWN0ZWVyXCAmQWxsZXMKKworIiBUaGUgR1VJIHRvb2xiYXIgKGZvciBXaW4zMiBvciBHVEspCitpZiBoYXMoInRvb2xiYXIiKQorICBpZiBleGlzdHMoIipEb190b29sYmFyX3RtZW51IikKKyAgICBkZWxmdW4gRG9fdG9vbGJhcl90bWVudQorICBlbmRpZgorICBmdW4gRG9fdG9vbGJhcl90bWVudSgpCisgICAgdG1lbnUgVG9vbEJhci5PcGVuCQlCZXN0YW5kIG9wZW5lbgorICAgIHRtZW51IFRvb2xCYXIuU2F2ZQkJQmVzdGFuZCBvcHNsYWFuCisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCUFsbGUgYmVzdGFuZGVuIG9wc2xhYW4KKyAgICB0bWVudSBUb29sQmFyLlByaW50CQlhZmRydWtrZW4KKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCXRlcnVnCisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQl2b29ydWl0CisgICAgdG1lbnUgVG9vbEJhci5DdXQJCWtuaXBwZW4KKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCUtvcGnrcmVuCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJUGxha2tlbgorICAgIHRtZW51IFRvb2xCYXIuRmluZAkJWm9la2VuLi4uCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAlab2VrIHZvbGdlbmRlCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldglab2VrIHZvcmlnZQorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQlab2VrIGVuIHZlcnZhbmcuLi4KKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCVNlc3NpZSBMYWRlbgorICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24JU2Vzc2llIG9wc2xhYW4KKyAgICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdAlWaW0gc2NyaXB0IHVpdHZvZXJlbgorICAgIHRtZW51IFRvb2xCYXIuTWFrZQkJTWFrZSB1aXR2b2VyZW4KKyAgICB0bWVudSBUb29sQmFyLlNoZWxsCQlTaGVsbCBzdGFydGVuCisgICAgdG1lbnUgVG9vbEJhci5SdW5DdGFncwlUYWdzIGJlc3RhbmQgZ2VuZXJlcmVuCisgICAgdG1lbnUgVG9vbEJhci5UYWdKdW1wCVNwcmluZyBuYWFyIHRhZworICAgIHRtZW51IFRvb2xCYXIuSGVscAkJSGVscCEKKyAgICB0bWVudSBUb29sQmFyLkZpbmRIZWxwCUhlbHAgdmluZGVuLi4uCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXgJCSZTeW50YXgKK21lbnV0cmFucyAmU2hvd1wgZmlsZXR5cGVzXCBpblwgbWVudSAgVG9vblwgZmlsZXR5cGVzXCBpblwgbWVudQorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CUFsbGVlblwgJ3N5bnRheCdcIHdpanppZ2VuCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCU9va1wgJ2ZpbGV0eXBlJ1wgd2lqemlnZW4KK21lbnV0cmFucyAmT2ZmCQkJJlVpdAorbWVudXRyYW5zICZNYW51YWwJCSZIYW5kbWF0aWcKK21lbnV0cmFucyBBJnV0b21hdGljCQlBJnV0b21hdGlzY2gKK21lbnV0cmFucyBvbi9vZmZcIGZvclwgJlRoaXNcIGZpbGUJQWFuL1VpdFwgdm9vclwgZGl0XCBCZXN0YW5kCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQlUZXN0XCBkZVwgJktsZXVyZW4KK21lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0CVRlc3RcIGRlXCBNYXJrZXJpbmdlbgorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSFRNTAlDb252ZXJ0ZXJlblwgbmFhclwgJkhUTUwKK21lbnV0cmFucyAmU2hvd1wgaW5kaXZpZHVhbFwgY2hvaWNlcwlUb29uXCBlbGtlXCBrZXV6ZQorCisiIGRpYWxvZyB0ZXh0cworbGV0IG1lbnV0cmFuc19ub19maWxlID0gIltHZWVuIEJlc3RhbmRdIgorbGV0IG1lbnV0cmFuc19oZWxwX2RpYWxvZyA9ICJUeXAgZWVuIGNvbW1hbmRvIG9mIHdvb3JkIG9tIGhlbHAgdm9vciB0ZSB2aW5kZW46XG5cblZvZWcgaV8gaW4gdm9vciBJbnB1dCBtb2RlIGNvbW1hbmRvcyAoYmlqdi4gaV9DVFJMLVgpXG5Wb2VnIGNfIGluIHZvb3IgZWVuIGNvbW1hbmRvLXJlZ2VsIGVkaXQgY29tbWFuZG8gKGJpanYuIGNfPERlbD4pXG5Wb2VnICcgaW4gXHZvb3IgZWVuIG9wdGllIG5hYW0gKGJpanYuICdzaGlmdHdpZHRoJykiCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAiVHlwIGhldCB6b2VrcGFkIHZvb3IgYmVzdGFuZGVuLlxuR2VicnVpayBjb21tYXMgdHVzc2VuIGRlIHBhZG5hbWVuLiIKK2xldCBnOm1lbnV0cmFuc190YWdzX2RpYWxvZyA9ICJUeXAgbmFtZW4gdmFuIHRhZyBiZXN0YW5kZW4uXG5HZWJydWlrIGNvbW1hcyB0dXNzZW4gZGUgbmFtZW4uIgorbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAiVHlwIGRlIG5pZXV3ZSB0ZWtzdCBicmVlZHRlICgwIG9tIGZvcm1hdHRlcmVuIHVpdCB0aGUgc2NoYWtlbGVuKTogIgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIlNlbGVjdGVlciBmb3JtYWF0IHZvb3IgaGV0IHNjaHJpanZlbiB2YW4gaGV0IGJlc3RhbmQiCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9ubF9ubC51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9ubF9ubC51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU4N2Q5NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X25sX25sLnV0Zi04LnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CU5lZGVybGFuZHMgZm9yIFVURi04IGVuY29kaW5nCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X25sX25sLmxhdGluMS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X25vLmxhdGluMS52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9uby5sYXRpbjEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzFhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9uby5sYXRpbjEudmltCkBAIC0wLDAgKzEsNCBAQAorIiBNZW51IFRyYW5zbGF0aW9uczogTm9yd2VnaWFuCisiIG1lbnVfbm8ubGF0aW4xLnZpbSAyODkgMjAwNC0wNS0xNiAxODowMDo1Mlogc3VubnkKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfbm9fbm8ubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfbm8udXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfbm8udXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyY2U4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9uby51dGYtOC52aW0KQEAgLTAsMCArMSw0IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOiBOb3J3ZWdpYW4gZm9yIFVURi04IGVuY29kaW5nCisiIG1lbnVfbm8udXRmLTgudmltIDI4OSAyMDA0LTA1LTE2IDE4OjAwOjUyWiBzdW5ueQorCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9ub19uby5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9ub19uby5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfbm9fbm8ubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjdiMDVjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfbm9fbm8ubGF0aW4xLnZpbQpAQCAtMCwwICsxLDIzMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJTm9yd2VnaWFuIC8gTm9yc2sgKEJva23lbCkKKyIgTWFpbnRhaW5lcjoJCdh5dmluZCBBLiBIb2xtIDxzdW5ueUBzdW5iYXNlLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CQkyMDA0LTA1LTE2IDIwOjAwOjUyICswMjAwCisiIG1lbnVfbm9fbm8ubGF0aW4xLnZpbSAyODkgMjAwNC0wNS0xNiAxODowMDo1Mlogc3VubnkKKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorCWZpbmlzaAorZW5kaWYKK2xldCBkaWRfbWVudV90cmFucyA9IDEKKworIiBUaGUgdHJhbnNsYXRpb25zIGJlbG93IGFyZSBpbiBJU08tODg1OS0xLCBidXQgdGhleSB3b3JrIGZvciBJU08tODg1OS0xNSBhbmQKKyIgQ1AxMjUyIHdpdGhvdXQgY29udmVyc2lvbiBhcyB3ZWxsLgoraWYgJmVuYyAhPSAiY3AxMjUyIiAmJiAmZW5jICE9ICJpc28tODg1OS0xNSIKKwlzY3JpcHRlbmNvZGluZyBsYXRpbjEKK2VuZGlmCisKK21lbnV0cmFucyAmRmlsZQkJJkZpbAorCW1lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCSbFcG5loFwuXC5cLjxUYWI+OmUKKwltZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAnFcG5lXCBpXCBueXR0XCAmdmluZHWgXC5cLlwuPFRhYj46c3AKKwltZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCSZOeVwgZmlsPFRhYj46ZW5ldworCW1lbnV0cmFucyAmQ2xvc2U8VGFiPjpjbG9zZQkJTCZ1a2s8VGFiPjpjbG9zZQorCW1lbnV0cmFucyAmU2F2ZTxUYWI+OncJCQkmTGFncmU8VGFiPjp3CisJbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdglMYWdyZVwgcyZvbaBcLlwuXC48VGFiPjpzYXYKKwlpZiBoYXMoImRpZmYiKQorCW1lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4JU2EmbW1lbmxpZ25cIG1lZFwgbnlcIGZpbKBcLlwuXC4KKwltZW51dHJhbnMgU3BsaXRcIFBhdGNoZWRcICZCeVwuXC5cLgkmUGF0Y2hcIGlcIG55dHRcIHZpbmR1oFwuXC5cLgorCWVuZGlmCisJbWVudXRyYW5zICZQcmludAkJCSZTa3JpdlwgdXQKKwltZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJTGFncmVcIG8mZ1wgYXZzbHV0dDxUYWI+OndxYQorCW1lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJJkF2c2x1dHQ8VGFiPjpxYQorbWVudXRyYW5zICZFZGl0CQkmUmVkaWdlcgorCW1lbnV0cmFucyAmVW5kbzxUYWI+dQkJCQkJCSZBbmdyZTxUYWI+dQorCW1lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQkJCQkmR2plbm9wcHJldHQ8VGFiPl5SCisJbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQkJCQkmUmVwZXRlcjxUYWI+XC4KKwltZW51dHJhbnMgQ3UmdDxUYWI+Iit4CQkJCQkJJktsaXBwXCB1dDxUYWI+Iit4CisJbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQkJCQlLJm9waWVyPFRhYj4iK3kKKwltZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQkJCQkmTGltXCBpbm48VGFiPiIrZ1AKKwltZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkJCQkJTGltXCBpJm5uXCBm+HJcIG1hcmv4cjxUYWI+W3AKKwltZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQkJCQlMaW1cIGlublwgJmV0dGVyXCBtYXJr+HI8VGFiPl1wCisJbWVudXRyYW5zICZTZWxlY3RcIEFsbDxUYWI+Z2dWRwkJCQkJJk1lcmtcIGFsdDxUYWI+Z2dWRworCW1lbnV0cmFucyAmRmluZFwuXC5cLgkJCQkJCSZT+GugXC5cLlwuCisJbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JCQkJUyb4a1wgb2dcIGVyc3RhdHSgXC5cLlwuCisJbWVudXRyYW5zIFNldHRpbmdzXCAmV2luZG93CQkJCQkmSW5uc3RpbGxpbmdlcgorCW1lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkJCQkJR2xvJmJhbGVcIGlubnN0aWxsaW5nZXIKKwkJbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQkJJlV0aGV2aW5nXCBhdlwgc/hrZXRla3N0XCBhdi9w5TxUYWI+OnNldFwgaGxzIQorCQltZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljIQkJCSZGb3Jza2plbGxcIG1lbGxvbVwgc3RvcmUvc23lIGJva3N0YXZlclwgYXYvcOU8VGFiPjpzZXRcIGljIQorCQltZW51dHJhbnMgVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEJCQkmSW5kaWtlcmluZ1wgYXZcIHNhbXN2YXJlbmRlXCBwYXJlbnRlc1wgYXYvcOU8VGFiPjpzZXRcIHNtIQorCQltZW51dHJhbnMgJkNvbnRleHRcIGxpbmVzCQkJCQkmS29udGVrc3RsaW5qZXIKKwkJbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQkJCQlWaSZydHVlbGxcIHJlZGlnZXJpbmcKKwkJCW1lbnV0cmFucyBOZXZlcgkJCQkJCQkmQWxkcmkKKwkJCW1lbnV0cmFucyBCbG9ja1wgU2VsZWN0aW9uCQkJCQlJXCAmYmxva2ttb2R1cworCQkJbWVudXRyYW5zIEluc2VydFwgbW9kZQkJCQkJCUlcICZJbm5zZXR0aW5nc21vZHVzCisJCQltZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CQkJCQlJXCBCbG9ray1cICZvZ1wgaW5uc2V0dGluZ3Ntb2R1cworCQkJbWVudXRyYW5zIEFsd2F5cwkJCQkJCUEmbGx0aWQKKwkJbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCQkJSW5uc2V0dGluZ3MmbW9kdXNcIGF2L3DlPFRhYj46c2V0XCBpbSEKKwkJbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEJCQkmVmkta29tcGF0aWJsaXRldFwgYXYvcOU8VGFiPjpzZXRcIGNwIQorCQltZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkJCQkJJlP4a2VzdGmgXC5cLlwuCisJCW1lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJCQkJVGEmZ2ZpbGVyoFwuXC5cLgorCQltZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhcgkJCQkJVmVya3Qm+HlsaW5qZQorCQltZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJCQkJTmUmZHJlXCBydWxsZWZlbHRcIGF2L3DlCisJCW1lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJCQkJVmUmbnN0cmVcIHJ1bGxlZmVsdFwgYXYvcOUKKwkJbWVudXRyYW5zIFRvZ2dsZVwgJlJpZ2h0XCBTY3JvbGxiYXIJCQkJJkj4eXJlXCBydWxsZWZlbHRcIGF2L3DlCisJbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJCQkJRmlsbyZwcHNldHQKKwkJbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCQkmTGluamVudW1tZXJcIGF2L3DlPFRhYj46c2V0XCBudSEKKwkJbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCQkJTCZpc3RlbW9kdXNcIGF2L3DlPFRhYj46c2V0XCBsaXN0IQorCQltZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJCQlMaSZuamVicnl0aW5nXCBhdi9w5TxUYWI+OnNldFwgd3JhcCEKKwkJbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCQlMaW5qZWJyeXRpbmdcIHZlZFwgJm9yZFwgYXYvcOU8VGFiPjpzZXRcIGxiciEKKwkJbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJCVV0dmlkZWxzZVwgYXZcICZ0YWJ1bGF0b3JlclwgYXYvcOU8VGFiPjpzZXRcIGV0IQorCQltZW51dHJhbnMgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQkJCUEmdXRvbWF0aXNrXCBpbm5yeWtrXCBhdi9w5TxUYWI+OnNldFwgYWkhCisJCW1lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQkJCSZDLWlubnJ5a2tcIGF2L3DlPFRhYj46c2V0XCBjaW4hCisJCW1lbnV0cmFucyAmU2hpZnR3aWR0aAkJCQkJCSZTdPhycmVsc2VcIHDlXCBpbm5yeWtrCisJCW1lbnV0cmFucyBTb2Z0XCAmVGFic3RvcAkJCQkJJk15a2VcIHRhYnVsYXRvcnN0b3BwCisJCW1lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQkJCVRlJmtzdGJyZWRkZaBcLlwuXC4KKwkJbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkJCSZGaWxmb3JtYXSgXC5cLlwuCisJbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQkJCQkmRmFyZ2VrYXJ0CisJbWVudXRyYW5zICZLZXltYXAJCQkJCQkmVGFzdGF0dXJvcHBzZXR0CisJbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCQkJCVNrcmlmdHQmeXBloFwuXC5cLgorbWVudXRyYW5zICZUb29scwkmVmVya3T4eQorCW1lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dCQkJJkhvcHBcIHRpbFwgdGFnXCB1bmRlclwgbWFya/hyPFRhYj5nXl0KKwltZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQkJCUhvcHBcICZ0aWxiYWtlPFRhYj5eVAorCW1lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCQkJTGFnXCB0YSZnZmlsCisJaWYgaGFzKCJmb2xkaW5nIikKKwltZW51dHJhbnMgJkZvbGRpbmcJCQkJCUZvbCZkZXIKKwkJbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppCQkJJkZvbGRlclwgYXYvcOU8VGFiPnppCisJCW1lbnV0cmFucyAmVmlld1wgQ3Vyc29yXCBMaW5lPFRhYj56dgkJCVNlXCAmbWFya/hybGluamU8VGFiPnp2CisJCW1lbnV0cmFucyBWaWUmd1wgQ3Vyc29yXCBMaW5lXCBvbmx5PFRhYj56TXp4CQlTZVwgJmJhcmVcIG1hcmv4cmxpbmplbjxUYWI+ek16eAorCQltZW51dHJhbnMgQyZsb3NlXCBtb3JlXCBmb2xkczxUYWI+em0JCQlMJnVra1wgZmxlcmVcIGZvbGRlcjxUYWI+em0KKwkJbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JCQlMdWtrXCAmYWxsZVwgZm9sZGVyPFRhYj56TQorCQltZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cgkJCSbFcG5lXCBmbGVyZVwgZm9sZGVyPFRhYj56cgorCQltZW51dHJhbnMgJk9wZW5cIGFsbFwgZm9sZHM8VGFiPnpSCQkJxSZwbmVcIGFsbGVcIGZvbGRlcjxUYWI+elIKKwkJbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQkJCUZvbGRtZSZ0b2RlCisJCQltZW51dHJhbnMgTSZhbnVhbAkJCQkJJk1hbnVlbGwKKwkJCW1lbnV0cmFucyBJJm5kZW50CQkJCQkmSW5ucnlraworCQkJbWVudXRyYW5zIEUmeHByZXNzaW9uCQkJCQkmVXR0cnlraworCQkJbWVudXRyYW5zIFMmeW50YXgJCQkJCSZTeW50YWtzCisJCQltZW51dHJhbnMgJkRpZmYJCQkJCQkmRm9yc2tqZWxsZXIKKwkJCW1lbnV0cmFucyBNYSZya2VyCQkJCQlNJmFya2VyaW5nCisJCW1lbnV0cmFucyBDcmVhdGVcICZGb2xkPFRhYj56ZgkJCQlMYSZnXCBmb2xkPFRhYj56ZgorCQltZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCQkJJlNsZXR0XCBmb2xkPFRhYj56ZAorCQltZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJCQlTbCZldHRcIGFsbGVcIGZvbGRlcjxUYWI+ekQKKwkJbWVudXRyYW5zIEZvbGRcIGNvbCZ1bW5cIHdpZHRoCQkJCUJyZWRkZVwgcOVcIGZvbGQma29sb25uZQorCWVuZGlmCisJaWYgaGFzKCJkaWZmIikKKwltZW51dHJhbnMgJkRpZmYJCQkJCQkmRm9yc2tqZWxsZXIKKwkJbWVudXRyYW5zICZVcGRhdGUJCQkJCSZPcHBkYXRlcgorCQltZW51dHJhbnMgJkdldFwgQmxvY2sJCQkJCSZIZW50XCBibG9raworCQltZW51dHJhbnMgJlB1dFwgQmxvY2sJCQkJCSZQdXR0XCBibG9raworCWVuZGlmCisJbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZQkJCQkmS2r4clwgIm1ha2UiPFRhYj46bWFrZQorCW1lbnV0cmFucyAmTGlzdFwgRXJyb3JzPFRhYj46Y2wJCQkJJkxpc3RcIGZlaWw8VGFiPjpjbAorCW1lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJCQlMaXN0XCAmbWVsZGluZ2VyPFRhYj46Y2whCisJbWVudXRyYW5zICZOZXh0XCBFcnJvcjxUYWI+OmNuCQkJCSZOZXN0ZVwgZmVpbDxUYWI+OmNuCisJbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAkJCUZvJnJyaWdlXCBmZWlsPFRhYj46Y3AKKwltZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAkJCSZFbGRyZVwgbGlzdGU8VGFiPjpjb2xkCisJbWVudXRyYW5zIE4mZXdlclwgTGlzdDxUYWI+OmNuZXcJCQlOJnllcmVcIGxpc3RlPFRhYj46Y25ldworCW1lbnV0cmFucyBFcnJvclwgJldpbmRvdwkJCQlGZSZpbHZpbmR1CisJCW1lbnV0cmFucyAmVXBkYXRlPFRhYj46Y3dpbgkJCQkmT3BwZGF0ZXI8VGFiPjpjd2luCisJCW1lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQkJCSbFcG5lPFRhYj46Y29wZW4KKwkJbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQkJCQkmTHVrazxUYWI+OmNjbG9zZQorCW1lbnV0cmFucyAmU2V0XCBDb21waWxlcgkJCQkmVmVsZ1wga29tcGlsYXRvcgorCW1lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCQkJS29udmVydGVyXCB0aWxcIGhlayZzYWRlc2ltYWw8VGFiPjolIXh4ZAorCW1lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtcgkJCUsmb252ZXJ0ZXJcIHRpbGJha2U8VGFiPjolIXh4ZFwgLXIKK21lbnV0cmFucyAmU3ludGF4CSZTeW50YWtzCisJbWVudXRyYW5zICZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51CSZWaXNcIGZpbHR5cGVyXCBpXCBtZW55ZW4KKwltZW51dHJhbnMgU2V0XCAnJnN5bnRheCdcIG9ubHkJCVNldHRcIGJhcmVcICcmc3ludGF4JworCW1lbnV0cmFucyBTZXRcICcmZmlsZXR5cGUnXCB0b28JCVNldHRcICcmZmlsZXR5cGUnXCBvZ3PlCisJbWVudXRyYW5zICZPZmYJCQkJJkF2CisJbWVudXRyYW5zICZNYW51YWwJCQkmTWFudWVsbAorCW1lbnV0cmFucyBBJnV0b21hdGljCQkJQSZ1dG9tYXRpc2sKKwltZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCUF2L3DlXCBmb3JcICZkZW5uZVwgZmlsZW4KKwltZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQkJRmFyJmdldGVzdAorCW1lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0CQlVdGhldmluZ3MmdGVzdAorCW1lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJCUtvbnZlcnRlclwgdGlsXCAmSFRNTAorbWVudXRyYW5zICZCdWZmZXJzCSZCdWZmZXIKKwltZW51dHJhbnMgJlJlZnJlc2hcIG1lbnUJJk9wcGRhdGVyCisJbWVudXRyYW5zIERlbGV0ZQkJJlNsZXR0CisJbWVudXRyYW5zICZBbHRlcm5hdGUJCSZWZWtzbGUKKwltZW51dHJhbnMgJk5leHQJCQkmTmVzdGUKKwltZW51dHJhbnMgJlByZXZpb3VzCQkmRm9ycmlnZQorCW1lbnV0cmFucyBbTm9cIEZpbGVdCQlbVXRlblwgbmF2bl0KK21lbnV0cmFucyAmV2luZG93CVZpJm5kdQorCW1lbnV0cmFucyAmTmV3PFRhYj5eV24JCQkmTnl0dDxUYWI+XlduCisJbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQkmU3BsaXR0PFRhYj5eV3MKKwltZW51dHJhbnMgU3AmbGl0XCBUb1wgIzxUYWI+XldeXglTcGxpdHRcICZ0aWxcICM8VGFiPl5XXl4KKwltZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJUyZwbGl0dFwgbG9kZHJldHQ8VGFiPl5XcworCW1lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCSZGaWxiZWhhbmRsZXIKKwltZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCSZMdWtrPFRhYj5eV2MKKwltZW51dHJhbnMgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvCUx1a2tcICZhbmRyZTxUYWI+XldvCisJbWVudXRyYW5zIE1vdmVcICZUbwkJCUZsJnl0dFwgdGlsCisJCW1lbnV0cmFucyAmVG9wPFRhYj5eV0sJCQkmVG9wcGVuPFRhYj5eV0sKKwkJbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJJkJ1bm5lbjxUYWI+XldKCisJCW1lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICQkmVmVuc3RyZVwgc2lkZTxUYWI+XldICisJCW1lbnV0cmFucyAmUmlnaHRcIHNpZGU8VGFiPl5XTAkJJkj4eXJlXCBzaWRlPFRhYj5eV0wKKwltZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJUm90ZXJcICZvcHA8VGFiPl5XUgorCW1lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IJCSZSb3RlclwgbmVkPFRhYj5eV3IKKwltZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JCUxpa1wgc3Qm+HJyZWxzZTxUYWI+Xlc9CisJbWVudXRyYW5zICZNYXhcIEhlaWdodDxUYWI+XldfCQkmTWFrc2ltYWxcIGj4eWRlPFRhYj5eV18KKwltZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQlNJmluaW1hbFwgaPh5ZGU8VGFiPl5XMV8KKwltZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCU1hJmtzaW1hbFwgYnJlZGRlPFRhYj5eV1x8CisJbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJTWluaW1hbFwgJmJyZWRkZTxUYWI+XlcxXHwKK21lbnV0cmFucyAmSGVscAkJJkhqZWxwCisJbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgkmT3ZlcnNpa3Q8VGFiPjxGMT4KKwltZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJJkJydWtlcmjlbmRib2sKKwltZW51dHJhbnMgJkhvdy10b1wgbGlua3MJJkb4cnN0ZWhqZWxwCisJbWVudXRyYW5zICZGaW5kXC5cLlwuCQkmU/hroFwuXC5cLgorCW1lbnV0cmFucyAmQ3JlZGl0cwkJJktyZWRpdGVyaW5nCisJbWVudXRyYW5zIENvJnB5aW5nCQkmUHJvZ3JhbWxpc2VucworCW1lbnV0cmFucyAmU3BvbnNvci9SZWdpc3RlcglTJnT4dHRlL1JlZ2lzdHJlcmluZworCW1lbnV0cmFucyBPJnJwaGFucwkJRm8mcmVsZHJlbPhzZQorCW1lbnV0cmFucyAmVmVyc2lvbgkJJlZlcnNqb24KKwltZW51dHJhbnMgJkFib3V0CQkmT21cIFZpbQorCisiIFBvcHVwCisJbWVudXRyYW5zICZVbmRvCQkJJkFuZ3JlCisJbWVudXRyYW5zIEN1JnQJCQlLbGlwcFwgJnV0CisJbWVudXRyYW5zICZDb3B5CQkJJktvcGllcgorCW1lbnV0cmFucyAmUGFzdGUJCSZMaW1cIGlubgorCW1lbnV0cmFucyAmRGVsZXRlCQkmU2xldHQKKwltZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJTWFya2VyXCBibG9rayZ2aXMKKwltZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJTWFya2VyXCAmb3JkCisJbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCU1hcmtlclwgbGluJmplCisJbWVudXRyYW5zIFNlbGVjdFwgJkJsb2NrCU1hcmtlclwgJmJsb2trCisJbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJTWFya2VyXCBhbCZ0CisKKyIgVmVya3T4eWxpbmplCitpZiBoYXMoInRvb2xiYXIiKQorCWlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorCQlkZWxmdW5jdGlvbiBEb190b29sYmFyX3RtZW51CisJZW5kaWYKKwlmdW5jdGlvbiBEb190b29sYmFyX3RtZW51KCkKKwkJdG1lbnUgVG9vbEJhci5PcGVuCQnFcG5lIGZpbAorCQl0bWVudSBUb29sQmFyLlNhdmUJCUxhZ3JlIGZpbAorCQl0bWVudSBUb29sQmFyLlNhdmVBbGwJCUxhZ3JlIGFsbGUgZmlsZXIKKwkJdG1lbnUgVG9vbEJhci5QcmludAkJU2tyaXYgdXQKKwkJdG1lbnUgVG9vbEJhci5VbmRvCQlBbmdyZQorCQl0bWVudSBUb29sQmFyLlJlZG8JCUdqZW5vcHByZXR0CisJCXRtZW51IFRvb2xCYXIuQ3V0CQlLbGlwcAorCQl0bWVudSBUb29sQmFyLkNvcHkJCUtvcGllcgorCQl0bWVudSBUb29sQmFyLlBhc3RlCQlMaW0gaW5uCisJCXRtZW51IFRvb2xCYXIuRmluZAkJU/hroC4uLgorCQl0bWVudSBUb29sQmFyLkZpbmROZXh0CQlGaW5uIG5lc3RlCisJCXRtZW51IFRvb2xCYXIuRmluZFByZXYJCUZpbm4gZm9ycmlnZQorCQl0bWVudSBUb29sQmFyLlJlcGxhY2UJCVP4ayBvZyBlcnN0YXR0oC4uLgorCQlpZiAwICIgRGlzYWJsZWQsIHRoZXkgYXJlIGluIHRoZSBXaW5kb3dzIG1lbnUKKwkJCXRtZW51IFRvb2xCYXIuTmV3CU55dHQgdmluZHUKKwkJCXRtZW51IFRvb2xCYXIuV2luU3BsaXQJU3BsaXR0IHZpbmR1CisJCQl0bWVudSBUb29sQmFyLldpbk1heAlNYWtzaW1hbCB2aW5kdXNo+HlkZQorCQkJdG1lbnUgVG9vbEJhci5XaW5NaW4JTWluaW1hbCB2aW5kdXNo+HlkZQorCQkJdG1lbnUgVG9vbEJhci5XaW5DbG9zZQlMdWtrIHZpbmR1CisJCWVuZGlmCisJCXRtZW51IFRvb2xCYXIuTG9hZFNlc24JCcVwbmUg+Gt0CisJCXRtZW51IFRvb2xCYXIuU2F2ZVNlc24JCUxhZ3JlIPhrdAorCQl0bWVudSBUb29sQmFyLlJ1blNjcmlwdAkJS2r4ciBWaW0tc2tyaXB0CisJCXRtZW51IFRvb2xCYXIuTWFrZQkJS2r4ciAibWFrZSIKKwkJdG1lbnUgVG9vbEJhci5TaGVsbAkJU3RhcnQgc2thbGwKKwkJdG1lbnUgVG9vbEJhci5SdW5DdGFncwkJT3BwZGF0ZXIgdGFnLWZpbAorCQl0bWVudSBUb29sQmFyLlRhZ0p1bXAJCUhvcHAgdGlsIHRhZworCQl0bWVudSBUb29sQmFyLkhlbHAJCUhqZWxwIQorCQl0bWVudSBUb29sQmFyLkZpbmRIZWxwCQlT+GsgaSBoamVscGVuoC4uLgorCWVuZGZ1bmN0aW9uCitlbmRpZgorCisiIERpYWxvZ21lbGRpbmdlcgorCWxldCBnOm1lbnV0cmFuc19ub19maWxlID0gIltVdGVuIG5hdm5dIgorCWxldCBnOm1lbnV0cmFuc19oZWxwX2RpYWxvZyA9ICJTa3JpdiBlbiBrb21tYW5kbyBlbGxlciBvcmQgZHUgdmlsIGhhIGhqZWxwIG9tOlxuXG5MZWdnIHRpbCBpXyBpIGJlZ3lubmVsc2VuIGZvciBpbm5kYXRhbWV0b2RlciAoZi5la3MuOiBpX0NUUkwtWClcbkxlZ2cgdGlsIGNfIGkgYmVneW5uZWxzZW4gZm9yIGtvbW1hbmRvZXIgc29tIHJlZGlnZXJlciBrb21tYW5kb2xpbmplbiAoZi5la3MuOiBjXzxEZWw+KVxuTGVnZyB0aWwgJyBpIGJlZ3lubmVsc2VuIGZvciBldCB2YWxnbmF2biAoZi5la3MuOiAnc2hpZnR3aWR0aCcpIgorCWxldCBnOm1lbnV0cmFuc19wYXRoX2RpYWxvZyA9ICJTa3JpdiBz+Gtlc3RpIGZvciBmaWxlci5cblNraWxsIGthdGFsb2duYXZuIG1lZCBrb21tYS4iCisJbGV0IGc6bWVudXRyYW5zX3RhZ3NfZGlhbG9nID0gIlNrcml2IG5hdm4gcOUgdGFnZmlsZXIuXG5Ta2lsbCBuYXZuZW5lIG1lZCBrb21tYS4iCisJbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAiVmVsZyBueSB0ZWtzdGJyZWRkZSAoMCBmb3Ig5SBmb3JoaW5kcmUgZm9ybWF0ZXJpbmcpOiAiCisJbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIlZlbGcgZmlsZm9ybWF0IHNvbSBmaWxlbiBza2FsIGxhZ3JlcyBtZWQiCisKKyIgICAgdmltOiBzZXQgdHM9OCBzdz04IDoKKyIgdmltNjAwOiBzZXQgZmRtPWluZGVudCA6CmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9ub19uby51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9ub19uby51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzOWNjOAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X25vX25vLnV0Zi04LnZpbQpAQCAtMCwwICsxLDQgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6IE5vcndlZ2lhbiBmb3IgVVRGLTggZW5jb2RpbmcKKyIgbWVudV9ub19uby51dGYtOC52aW0gMjg5IDIwMDQtMDUtMTYgMTg6MDA6NTJaIHN1bm55CisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X25vX25vLmxhdGluMS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3BsLmNwMTI1MC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9wbC5jcDEyNTAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMGZkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9wbC5jcDEyNTAudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJUG9saXNoCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X3BvbGlzaF9wb2xhbmQuMTI1MC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3BsX3BsLmNwMTI1MC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9wbF9wbC5jcDEyNTAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMGZkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9wbF9wbC5jcDEyNTAudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJUG9saXNoCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X3BvbGlzaF9wb2xhbmQuMTI1MC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3BsX3BsLmlzb184ODU5LTIudmltIGIvcnVudGltZS9sYW5nL21lbnVfcGxfcGwuaXNvXzg4NTktMi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkZTFkNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3BsX3BsLmlzb184ODU5LTIudmltCkBAIC0wLDAgKzEsMjYzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglQb2xpc2gKKyIgTWFpbnRhaW5lcjoJCVJhZmFsIE0uIFN1bGVqbWFuIDxybXNAcG9jenRhLm9uZXQucGw+CisiIEluaXRpYWwgVHJhbnNsYXRpb246CU1hcmNpbiBEYWxlY2tpIDxkYWxlY2tpQGNzLm5ldC5wbD4KKyIgTGFzdCBDaGFuZ2U6IDUgTWF5ICAyMDA0CisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCitzY3JpcHRlbmNvZGluZyBpc28tODg1OS0yCisKKyIgSGVscCBtZW51CittZW51dHJhbnMgJkhlbHAJCQlQbyZtb2MKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4JJlNwaXNcIHRyZbZjaTxUYWI+PEYxPgorbWVudXRyYW5zICZIb3ctdG9cIGxpbmtzCSZPZG5vtm5pa2lcIEpUWgorbWVudXRyYW5zICZDcmVkaXRzCQlQbyZkemnqa293YW5pYQorbWVudXRyYW5zICZVc2VyXCBNYW51YWwgICAgUG9kcupjem5pa1wgJnW/eXRrb3duaWthCittZW51dHJhbnMgQ28mcHlpbmcJCSZLb3Bpb3dhbmllCittZW51dHJhbnMgJlZlcnNpb24JCSZXZXJzamEKK21lbnV0cmFucyAmQWJvdXQJCW9cICZBcGxpa2FjamkKK21lbnV0cmFucyAmU3BvbnNvci9SZWdpc3RlcgkmU3BvbnNvcm93YW5pZS9SZWplc3RyYWNqYQorbWVudXRyYW5zIE8mcnBoYW5zCUsmaWJhYWxlXCBDaGlsZHJlblwnc1wgQ2VudGVyCisKKyIgRmlsZSBtZW51CittZW51dHJhbnMgJkZpbGUJCQkJJlBsaWsKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCSZPdHfzcnpcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAlPdHfzcnpcIHpcICZwb2R6aWGzZW1cLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3ICAgICAgICZOb3d5PFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQkmWmFta25pajxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJWmEmcGlzejxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJWmFwaXN6XCAmamFrb1wuXC5cLjxUYWI+OnNhdgorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLglQb2R6aWVsXCBuYVwgZGlmZi1hXCBtaepkenlcLlwuXC4KK21lbnV0cmFucyBTcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCVBvZHppZWxcILNhdGFuZVwgcHJ6ZXpcLlwuXC4KK21lbnV0cmFucyAmUHJpbnQJCQkmRHJ1a3VqCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJVyZ5arZjaWVcIHpcIHphcGlzZW08VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJJld5arZjaWU8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCSZFZHljamEKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSZDb2ZuaWo8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQkmUG9u83c8VGFiPl5SCittZW51dHJhbnMgUmVwJmVhdDxUYWI+XC4JCVAmb3d083J6PFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCVcmeXRuaWo8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQkmS29waXVqPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCSZXa2xlajxUYWI+IitnUAorbWVudXRyYW5zIFB1dFwgJkJlZm9yZTxUYWI+W3AJCVdzdGF3XCBwJnJ6ZWQ8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQlXc3Rhd1wgcCZvPFRhYj5dcAorbWVudXRyYW5zICZTZWxlY3RcIEFsbDxUYWI+Z2dWRwkJWiZhem5hY3pcIGNhs2+25jxUYWI+Z2dWRworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJJlN6dWthalwuXC5cLgorbWVudXRyYW5zICZGaW5kPFRhYj4vCQkJJlN6dWthajxUYWI+LworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JJlphbWll8VwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjolcwkmWmFtaWXxPFRhYj46JXMKK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlCQkmWmFtaWXxCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OnMJJlphbWll8TxUYWI+OnMKK21lbnV0cmFucyBPcHRpb25zXC5cLlwuCQkJT3BjamVcLlwuXC4KK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJVXN0YXdpZW5pYQorbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQlVc3Rhd2llbmlhXCAmZ2xvYmFsbmUKK21lbnV0cmFucyBGJmlsZVwgU2V0dGluZ3MJCVVzdGF3aWVuaWFcIGRsYVwgcGxpa3UKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQkJCSZOdW1lcm93YW5pZVwgd2llcnN6eTxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCQkJCVRyeWJcICZsaXN0b3dhbmlhPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQkJWmEmd2lqYW5pZVwgd2llcnN6eTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyIQkJCaNhbWFuaWVcIHdpZSZyc3phPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCQkJUm96d2lqYW5pJmVcIHRhYnVsYXRvcvN3PFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQkJJkF1dG9tYXR5Y3puZVwgd2Np6mNpYTxUYWI+OnNldFwgYWkhCittZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJCQlXY2nqY2lhXCAmQzxUYWI+OnNldFwgY2luIQorbWVudXRyYW5zICZTaGlmdHdpZHRoCQkJCSZTemVyb2tvtuZcIHdjaepjaWEKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQlEs3Vnb7bmXCBsaW5paVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkmRm9ybWF0XCBwbGlrdVwuXC5cLgorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQkJCVJvem1pYXJcICZ0YWJ1bGFjamkKK21lbnV0cmFucyBDJm9sb3JcIFNjaGVtZQkJWmVzdGF3eVwga29sb3LzdworbWVudXRyYW5zICZLZXltYXAJCQlVa7NhZHlcIGtsYXdpYXR1cnkKK21lbnV0cmFucyBOb25lCQkJCb9hZGVuCittZW51dHJhbnMgYWNjZW50cwkJCWFrY2VudHkKK21lbnV0cmFucyBoZWJyZXcJCQloZWJyYWpza2kKK21lbnV0cmFucyBoZWJyZXdwCQkJaGVicmFqc2tpXCBwCittZW51dHJhbnMgcnVzc2lhbi1qY3VrZW4JCXJvc3lqc2tpLWpjdWtlbgorbWVudXRyYW5zIHJ1c3NpYW4tamN1a2Vud2luCQlyb3N5anNraS1qY3VrZW53aW4KKworbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQlQb2RrcmW2bGFuaWVcICZ3em9yY/N3PFRhYj46c2V0XCBobHMhCisKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCSZJZ25vcm93YW5pZVwgd2llbGtvtmNpPFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQkJJlBva2F6eXdhbmllXCBwYXN1arFjeWNoPFRhYj46c2V0XCBzbSEKKworbWVudXRyYW5zICZDb250ZXh0XCBsaW5lcwlXaWVyc3plXCAma29udGVrc3Rvd2UKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAlPYnLzYmthXCAmd2lydHVhbG5hCisKK21lbnV0cmFucyBOZXZlcgkJCU5pZ2R5CittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbglaYXpuYWN6YW5pZVwgemFrcmVzdQorbWVudXRyYW5zIEluc2VydFwgbW9kZQkJVHJ5Ylwgd3Byb3dhZHphbmlhCittZW51dHJhbnMgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwIQlUcnliXCB6ZyZvZG5vtmNpXCB6XCBWaTxUYWI+OnNldFwgY3AhCittZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CVpha3Jlc1wgaVwgd3Byb3dhZHphbmllCittZW51dHJhbnMgQWx3YXlzCQlaYXdzemUKKworbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCVRyeWJcIHdwcm93YWR6YW5pYTxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLglTY2llv2thXCBwb3N6dWtpd2FuaWFcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLglQbGlraVwgdGFn83dcLlwuXC4KKworCisiCisiIEdVSSBvcHRpb25zCittZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhcgkJUGFzZWtcIG5hcnrqZHppCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJRG9sbnlcIHByemV3aWphY3oKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJJkxld3lcIHByemV3aWphY3oKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCVAmcmF3eVwgcHJ6ZXdpamFjegorCisiIFByb2dyYW1taW5nIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJCQkmTmFyeupkemlhCittZW51dHJhbnMgJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQkmU2tvY3pcIGRvXCB0YWdhPFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJCVNrb2tcIHdcICZ0ebM8VGFiPl5UCittZW51dHJhbnMgQnVpbGRcICZUYWdzXCBGaWxlCQkmVHfzcnpcIHBsaWtcIHRhZ/N3CisiIEZvbGRpbmcKK21lbnV0cmFucyAmRm9sZGluZwkJCQkmWndpamFuaWUKK21lbnV0cmFucyAmRW5hYmxlL0Rpc2FibGVcIGZvbGRzPFRhYj56aQkJJlp3afEvcm96d2nxPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CQkJJkxpbmlhXCBrdXJzb3JhPFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJCQkmVHlsa29cIGxpbmlhXCBrdXJzb3JhPFRhYj56TXp4CittZW51dHJhbnMgQyZsb3NlXCBtb3JlXCBmb2xkczxUYWI+em0JCQkJWndp8Vwgd2nqY2VqPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JCQkJWiZ3afFcIHdzenlzdGtpZTxUYWI+ek0KK21lbnV0cmFucyAmT3BlblwgYWxsXCBmb2xkczxUYWI+elIJCQkJUm96d2nxXCB3c3p5c3RraWU8VGFiPnpSCittZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cgkJCQlSJm96d2nxXCB3aepjZWo8VGFiPnpyCisKK21lbnV0cmFucyBDcmVhdGVcICZGb2xkPFRhYj56ZgkJCQlUJnfzcnpcIHphd2luaepjaWU8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCQkJVSZzdfFcIHphd2luaepjaWU8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJCQkJJlVzdfFcIHdzenlzdGtpZVwgemF3aW5p6mNpYTxUYWI+ekQKK21lbnV0cmFucyBGb2xkXCBjb2x1bW5cICZ3aWR0aAkJCQlTemVyb2tvtuZcIGtvbHVtbnlcIHphJndpbmnq5gorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCU1lJnRvZGFcIHphd2lqYW5pYQorbWVudXRyYW5zIE0mYW51YWwJCQkmUupjem5pZQorbWVudXRyYW5zIEkmbmRlbnQJCQlXJmNp6mNpZQorbWVudXRyYW5zIEUmeHByZXNzaW9uIFcmeXJhemVuaWUKK21lbnV0cmFucyBTJnludGF4CQkJUyZrs2FkbmlhCittZW51dHJhbnMgTWEmcmtlcgkJCVpuJmFjem5paworCisiIERpZmYKK21lbnV0cmFucyAmVXBkYXRlCQkJCQkmT2S2d2llvworbWVudXRyYW5zICZHZXRcIEJsb2NrCQkJJlBvYmllcnpcIGJsb2sKK21lbnV0cmFucyAmUHV0XCBCbG9jawkJCSZXc3Rhd1wgYmxvaworCisiIE1ha2UgYW5kIHN0dWZmLi4uCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQlNJmFrZTxUYWI+Om1ha2UKK21lbnV0cmFucyAmTGlzdFwgRXJyb3JzPFRhYj46Y2wJCSZQb2thv1wgYrPqZHk8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQlXJnlsaWN6XCBwb3dpYWRvbWllbmlhPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCSZOYXN06nBueVwgYrOxZDxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCSZQb3ByemVkbmlcIGKzsWQ8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJJlN0YXJzemFcIGxpc3RhPFRhYj46Y29sZAorbWVudXRyYW5zIE4mZXdlclwgTGlzdDxUYWI+OmNuZXcJTiZvd3N6YVwgbGlzdGE8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cgIE9rbm9cIGtvbXUmbmlrYXTzdworbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCQkJQWt0JnVhbGl6dWo8VGFiPjpjd2luCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCQkJJlphbWtuaWo8VGFiPjpjY2xvc2UKK21lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQkJJk90d/NyejxUYWI+OmNvcGVuCisKK21lbnV0cmFucyAmU2V0XCBDb21waWxlcgkJCQlVJnN0YXdcIGtvbXBpbGF0b3IKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkICAgICBLb2R5XCBzemVzbmFzdGtvd2U8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yICAgICBad3lrs3lcIHRla3N0PFRhYj46JSF4eGRcIC1yCisKKyIgTmFtZXMgZm9yIGJ1ZmZlciBtZW51LgorbWVudXRyYW5zICZCdWZmZXJzCSZCdWZvcnkKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQlPZLZ3aWW/CittZW51dHJhbnMgRGVsZXRlCVNrYXN1agorbWVudXRyYW5zICZBbHRlcm5hdGUJJlptaWXxCittZW51dHJhbnMgJk5leHQJCSZOYXN06nBueQorbWVudXRyYW5zICZQcmV2aW91cwkmUG9wcnplZG5pCittZW51dHJhbnMgW05vXCBGaWxlXQlbQnJha1wgUGxpa3VdCisKKyIgV2luZG93IG1lbnUKK21lbnV0cmFucyAmV2luZG93CQkJJldpZG9raQorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCSZOb3d5PFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJUG8mZHppZWw8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JUCZvZHppZWxcIG5hXCAjPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJUG9kemllbFwgcGlvbm93bzxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcgkJT3R383J6XCBtZW5lZL9lclwgcGxpa/N3CisKK21lbnV0cmFucyAmQ2xvc2U8VGFiPl5XYwkJJlphbWtuaWo8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwlaYW1rbmlqXCAmaW5uZTxUYWI+XldvCittZW51dHJhbnMgTmUmeHQ8VGFiPl5XdwkJCSZOYXN06nBueTxUYWI+Xld3CittZW51dHJhbnMgUCZyZXZpb3VzPFRhYj5eV1cJCSZQb3ByemVkbmk8VGFiPl5XVworbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CQkmV3ly83duYWpcIHd5c29rb7ZjaTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCVombWFrc3ltYWxpenVqXCB3eXNva2+25jxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQlabWluaW0mYWxpenVqXCB3eXNva2+25jxUYWI+XlcxXworbWVudXRyYW5zIE1heFwgV2lkdGg8VGFiPl5XXHwJCU1ha3N5bWFsbmFcIHN6ZXJva2+25jxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdGg8VGFiPl5XMVx8CQlNaW5pbWFsbmFcIHN6ZXJva2+25jxUYWI+XlcxXHwKK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkJWm1ha3N5bWFsaXp1alwgc3plcm9rb7bmPFRhYj5eV1x8CittZW51dHJhbnMgTWluXCBXaWR0Jmg8VGFiPl5XMVx8CQlabWluaW1hbGl6dWpcIHN6ZXJva2+25jxUYWI+XlcxXHwKK21lbnV0cmFucyBNb3ZlXCAmVG8JCQkmSWS8XCBkbworbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJCSZH83JhPFRhYj5eV0sKK21lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJCSZE87M8VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCSZMZXdhXCBzdHJvbmE8VGFiPl5XSAorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCQkmUHJhd2FcIHN0cm9uYTxUYWI+XldMCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJT2Jy8+ZcIHdcICZn83LqPFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IJCU9icvPmXCB3XCAmZPOzPFRhYj5eV3IKK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdgkmUG9kemllbFwgd1wgcG96aW9taWU8VGFiPl5XdgorbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCVd5YmllcnpcICZjemNpb25r6lwuXC5cLgorCisiIFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCQkmQ29mbmlqCittZW51dHJhbnMgQ3UmdAkJCVcmeXRuaWoKK21lbnV0cmFucyAmQ29weQkJCSZLb3BpdWoKK21lbnV0cmFucyAmUGFzdGUJCSZXa2xlagorbWVudXRyYW5zICZEZWxldGUJCSZTa2FzdWoKK21lbnV0cmFucyBTZWxlY3RcIEJsb2Nrd2lzZQlaYXpuYWN6XCAmYmxvaworbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCVphem5hY3pcICZzs293bworbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCVphem5hY3pcIHcmaWVyc3oKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawlaYXpuYWN6XCAmYmxvaworbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJWmF6bmFjelwgYyZhs2+25gorCisiIFRoZSBHVUkgdG9vbGJhcgoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorICAgIHRtZW51IFRvb2xCYXIuT3BlbgkJT3R383J6IHBsaWsKKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCVphcGlzeiBiaWW/sWN5IHBsaWsKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJCVphcGlzeiB3c3p5c3RraWUgcGxpa2kKKyAgICB0bWVudSBUb29sQmFyLlByaW50CQlEcnVrdWoKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCUNvZm5pagorICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJUG9u83cKKyAgICB0bWVudSBUb29sQmFyLkN1dAkJV3l0bmlqCisgICAgdG1lbnUgVG9vbEJhci5Db3B5CQlTa29waXVqCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJV2tsZWoKKyAgICB0bWVudSBUb29sQmFyLkZpbmQJCVN6dWthai4uLgorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJU3p1a2FqIG5hc3TqcG5lZ28KKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CVN6dWthaiBwb3ByemVkbmllZ28KKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJCVN6dWthaiBpIHphbWllbmlhai4uLgorICAgIGlmIDAJIiBkaXNhYmxlZDsgVGhlc2UgYXJlIGluIHRoZSBXaW5kb3dzIG1lbnUKKyAgICAgIHRtZW51IFRvb2xCYXIuTmV3CQlOb3d5IHdpZG9rCisgICAgICB0bWVudSBUb29sQmFyLldpblNwbGl0CVBvZHppZWwgd2lkb2sKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWF4CQlabWFrc3ltYWxpenVqIHdpZG9rCisgICAgICB0bWVudSBUb29sQmFyLldpbk1pbgkJWm1pbmltYWxpenVqIHdpZG9rCisgICAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlCVphbWtuaWogd2lkb2sKKyAgICBlbmRpZgorICAgIHRtZW51IFRvb2xCYXIuTG9hZFNlc24JWmGzYWR1aiBzZXNq6gorICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24JWmFjaG93YWogYmllv7FjsSBzZXNq6gorICAgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0CVVydWNob20gc2tyeXB0IFZpbWEKKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCVd5a29uYWogYmllv7FjeSBwcm9qZWt0CisgICAgdG1lbnUgVG9vbEJhci5TaGVsbAkJT3R383J6IHBvd7Nva+oKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCVR383J6IHRhZ2kgdyBiaWW/sWN5bSBrYXRhbG9ndQorICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAkJU2tvayBkbyB0YWdhIHBvZCBrdXJzb3JlbQorICAgIHRtZW51IFRvb2xCYXIuSGVscAkJUG9tb2MgVmltYQorICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJUHJ6ZXN6dWt1aiBwb21vYyBWaW0tYQorICBlbmRmdW4KK2VuZGlmCisKKyIgU3ludGF4IG1lbnUKK21lbnV0cmFucyAmU3ludGF4ICZTa7NhZG5pYQorbWVudXRyYW5zICZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51CVBva2G/XCB0eXB5XCAmcGxpa/N3XCB3XCBtZW51CittZW51dHJhbnMgU2V0XCAnJnN5bnRheCdcIG9ubHkJVXN0YXdcIHR5bGtvXCAnJnN5bnRheCcKK21lbnV0cmFucyBTZXRcICcmZmlsZXR5cGUnXCB0b28JVXN0YXdcIHLzd25pZb9cICcmZmlsZXR5cGUnCittZW51dHJhbnMgJk9mZgkJCSZXebOxY3oKK21lbnV0cmFucyAmTWFudWFsCQkmUupjem5pZQorbWVudXRyYW5zIEEmdXRvbWF0aWMJCUEmdXRvbWF0eWN6bmUKK21lbnV0cmFucyBvbi9vZmZcIGZvclwgJlRoaXNcIGZpbGUJCQl3s7Fjei93JnmzsWN6XCBkbGFcIHBsaWt1CittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQlUZXN0XCAma29sb3LzdworbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJJlRlc3RcIHBvZLZ3aWV0bGFuaWEKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJUHJ6ZXR383J6XCBuYVwgJkhUTUwKKworIiBkaWFsb2cgdGV4dHMKK2xldCBtZW51dHJhbnNfbm9fZmlsZSA9ICJbQnJhayBwbGlrdV0iCitsZXQgbWVudXRyYW5zX2hlbHBfZGlhbG9nID0gIldwcm93YWS8IGtvbWVuZOogbHViIHOzb3dvLCBhYnkgb3RyenltYeYgcG9tb2MgbzpcblxuUHJ6ZWRyb3N0ZWsgaV8gb3puYWN6YSBrb21lbmTqIHRyeWJ1IFdwcm93YWR6YW5pYSAobnAuIGlfQ1RSTC1YKVxuUHJ6ZWRyb3N0ZWsgY18gb3puYWN6YSBrb21lbmTqIGVkeWNqaSB3aWVyc3phIGtvbWVuZCAobnAuIGNfPERlbD4pXG5QcnplZHJvc3RlayAnIG96bmFjemEgbmF6d+ogb3BjamkgKG5wLiAnc2hpZnR3aWR0aCcpIgorbGV0IGc6bWVudXRyYW5zX3BhdGhfZGlhbG9nID0gIldwcm93YWS8ILZjaWW/a+ogcG9zenVraXdhbmlhIHBsaWvzdy5cblByb3N66iByb3pkemllbGHmIG5hend5IGthdGFsb2fzdyBwcnplY2lua2llbS4iCitsZXQgZzptZW51dHJhbnNfdGFnc19kaWFsb2cgPSAiUG9kYWogbmF6d3kgcGxpa/N3IHRhZ/N3LlxuUHJvc3rqIHJvemR6aWVsYeYgbmF6d3kgcHJ6ZWNpbmtpZW0uIgorbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAiV3Byb3dhZLwgbm93sSBzemVyb2tvtuYgdGVrc3R1ICgwIHd5s7FjemEgcHJ6ZXdpamFuaWUpOiAiCitsZXQgZzptZW51dHJhbnNfZmlsZWZvcm1hdF9kaWFsb2cgPSAiV3liaWVyeiBmb3JtYXQgdyBrdPNyeW0gdGVuIHBsaWsgbWEgYnnmIHphcGlzYW55IgpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfcG9saXNoX3BvbGFuZC4xMjUwLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X3BvbGlzaF9wb2xhbmQuMTI1MC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5NDQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3BvbGlzaF9wb2xhbmQuMTI1MC52aW0KQEAgLTAsMCArMSwyNTkgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CVBvbGlzaAorIiBNYWludGFpbmVyOgkJUmFmYWwgTS4gU3VsZWptYW4gPHJtc0Bwb2N6dGEub25ldC5wbD4KKyIgSW5pdGlhbCBUcmFuc2xhdGlvbjoJTWFyY2luIERhbGVja2kgPGRhbGVja2lAY3MubmV0LnBsPgorIiBMYXN0IENoYW5nZToJMDYgU2VwIDIwMDEKKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX21lbnVfdHJhbnMgPSAxCisKK3NjcmlwdGVuY29kaW5nIGNwMTI1MAorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJUG8mbW9jCittZW51dHJhbnMgJk92ZXJ2aWV3PFRhYj48RjE+CSZTcGlzXCBUcmWcY2k8VGFiPjxGMT4KK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcwkmT2Rub5xuaWtpXCBKVFoKK21lbnV0cmFucyAmQ3JlZGl0cwkJUG8mZHpp6mtvd2FuaWEKK21lbnV0cmFucyAmVXNlclwgTWFudWFsICAgIFBvZHLqY3puaWtcICZ1v3l0a293bmlrYQorbWVudXRyYW5zIENvJnB5aW5nCQkmS29waW93YW5pZQorbWVudXRyYW5zICZWZXJzaW9uCQkmV2Vyc2phCittZW51dHJhbnMgJkFib3V0CQlvXCAmQXBsaWthY2ppCisKKyIgRmlsZSBtZW51CittZW51dHJhbnMgJkZpbGUJCQkJJlBsaWsKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCSZPdHfzcnpcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAlPdHfzcnpcIHpcICZwb2R6aWGzZW1cLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3ICAgICAgICZOb3d5PFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQkmWmFta25pajxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJWmEmcGlzejxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJWmFwaXN6XCAmamFrb1wuXC5cLjxUYWI+OnNhdgorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLglQb2R6aWVsXCBuYVwgZGlmZi1hXCBtaepkenlcLlwuXC4KK21lbnV0cmFucyBTcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCVBvZHppZWxcILNhdGFuZVwgcHJ6ZXpcLlwuXC4KK21lbnV0cmFucyAmUHJpbnQJCQkmRHJ1a3VqCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJWmFwaXN6XCBpXCB3JnlqZJ88VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJJld5apxjaWU8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCSZFZHljamEKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSZDb2ZuaWo8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQkmUG9u83c8VGFiPl5SCittZW51dHJhbnMgUmVwJmVhdDxUYWI+XC4JCVAmb3d083J6PFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCVcmeXRuaWo8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQkmS29waXVqPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCSZXa2xlajxUYWI+IitnUAorbWVudXRyYW5zIFB1dFwgJkJlZm9yZTxUYWI+W3AJCVdzdGF3XCBwJnJ6ZWQ8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQlXc3Rhd1wgcCZvPFRhYj5dcAorbWVudXRyYW5zICZTZWxlY3RcIGFsbDxUYWI+Z2dWRwkJWiZhem5hY3pcIGNhs2+c5jxUYWI+Z2dWRworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJJlN6dWthalwuXC5cLgorbWVudXRyYW5zICZGaW5kPFRhYj4vCQkJJlN6dWthajxUYWI+LworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JJlphbWll8VwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2U8VGFiPjolcwkmWmFtaWXxPFRhYj46JXMKK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlCQkmWmFtaWXxCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OnMJJlphbWll8TxUYWI+OnMKK21lbnV0cmFucyBPcHRpb25zXC5cLlwuCQkJT3BjamVcLlwuXC4KK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJVXN0YXdpZW5pYQorbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQlVc3Rhd2llbmlhXCAmZ2xvYmFsbmUKK21lbnV0cmFucyBGJmlsZVwgU2V0dGluZ3MJCVVzdGF3aWVuaWFcIGRsYVwgcGxpa3UKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQkJCSZOdW1lcm93YW5pZVwgd2llcnN6eTxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCQkJCVRyeWJcICZsaXN0b3dhbmlhPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQkJWmEmd2lqYW5pZVwgd2llcnN6eTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyIQkJCaNhbWFuaWVcIHdpZSZyc3phPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCQkJUm96d2lqYW5pJmVcIHRhYnVsYXRvcvN3PFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQkJJkF1dG9tYXR5Y3puZVwgd2Np6mNpYTxUYWI+OnNldFwgYWkhCittZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJCQlXY2nqY2lhXCAmQzxUYWI+OnNldFwgY2luIQorbWVudXRyYW5zICZTaGlmdHdpZHRoCQkJCSZTemVyb2tvnOZcIHdjaepjaWEKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQlEs3Vnb5zmXCBsaW5paVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkmRm9ybWF0XCBwbGlrdVwuXC5cLgorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQkJCVJvem1pYXJcICZ0YWJ1bGFjamkKK21lbnV0cmFucyBDJm9sb3JcIFNjaGVtZQkJWmVzdGF3eVwga29sb3LzdworbWVudXRyYW5zICZLZXltYXAJCQlVa7NhZHlcIGtsYXdpYXR1cnkKK21lbnV0cmFucyBOb25lCQkJCb9hZGVuCittZW51dHJhbnMgYWNjZW50cwkJCWFrY2VudHkKK21lbnV0cmFucyBoZWJyZXcJCQloZWJyYWpza2kKK21lbnV0cmFucyBoZWJyZXdwCQkJaGVicmFqc2tpXCBwCittZW51dHJhbnMgcnVzc2lhbi1qY3VrZW4JCXJvc3lqc2tpLWpjdWtlbgorbWVudXRyYW5zIHJ1c3NpYW4tamN1a2Vud2luCQlyb3N5anNraS1qY3VrZW53aW4KKworbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQlQb2RrcmWcbGFuaWVcICZ3em9yY/N3PFRhYj46c2V0XCBobHMhCisKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCSZJZ25vcm93YW5pZVwgd2llbGtvnGNpPFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQkJJlBva2F6eXdhbmllXCBwYXN1arljeWNoPFRhYj46c2V0XCBzbSEKKworbWVudXRyYW5zICZDb250ZXh0XCBsaW5lcwlXaWVyc3plXCAma29udGVrc3Rvd2UKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAlPYnLzYmthXCAmd2lydHVhbG5hCisKK21lbnV0cmFucyBOZXZlcgkJCU5pZ2R5CittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbglaYXpuYWN6YW5pZVwgemFrcmVzdQorbWVudXRyYW5zIEluc2VydFwgbW9kZQkJVHJ5Ylwgd3Byb3dhZHphbmlhCittZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CVpha3Jlc1wgaVwgd3Byb3dhZHphbmllCittZW51dHJhbnMgQWx3YXlzCQlaYXdzemUKKworbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCVRyeWJcIHdwcm93YWR6YW5pYTxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLglTY2llv2thXCBwb3N6dWtpd2FuaWFcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLglQbGlraVwgdGFn83dcLlwuXC4KKworCisiCisiIEdVSSBvcHRpb25zCittZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhcgkJUGFzZWtcIG5hcnrqZHppCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJRG9sbnlcIHByemV3aWphY3oKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJJkxld3lcIHByemV3aWphY3oKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCVAmcmF3eVwgcHJ6ZXdpamFjegorCisiIFByb2dyYW1taW5nIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJCQkmTmFyeupkemlhCittZW51dHJhbnMgJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQkmU2tvY3pcIGRvXCB0YWdhPFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJCVNrb2tcIHdcICZ0ebM8VGFiPl5UCittZW51dHJhbnMgQnVpbGRcICZUYWdzXCBGaWxlCQkmVHfzcnpcIHBsaWtcIHRhZ/N3CisiIEZvbGRpbmcKK21lbnV0cmFucyAmRm9sZGluZwkJCQkmWndpamFuaWUKK21lbnV0cmFucyAmRW5hYmxlL0Rpc2FibGVcIGZvbGRzPFRhYj56aQkJJlp3afEvcm96d2nxPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CQkJJkxpbmlhXCBrdXJzb3JhPFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJCQkmVHlsa29cIGxpbmlhXCBrdXJzb3JhPFRhYj56TXp4CittZW51dHJhbnMgQyZsb3NlXCBtb3JlXCBmb2xkczxUYWI+em0JCQkJWndp8Vwgd2nqY2VqPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JCQkJWiZ3afFcIHdzenlzdGtpZTxUYWI+ek0KK21lbnV0cmFucyAmT3BlblwgYWxsXCBmb2xkczxUYWI+elIJCQkJUm96d2nxXCB3c3p5c3RraWU8VGFiPnpSCittZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cgkJCQlSJm96d2nxXCB3aepjZWo8VGFiPnpyCisKK21lbnV0cmFucyBDcmVhdGVcICZGb2xkPFRhYj56ZgkJCQlUJnfzcnpcIHphd2luaepjaWU8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCQkJVSZzdfFcIHphd2luaepjaWU8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJCQkJJlVzdfFcIHdzenlzdGtpZVwgemF3aW5p6mNpYTxUYWI+ekQKK21lbnV0cmFucyBGb2xkXCBjb2x1bW5cICZ3aWR0aAkJCQlTemVyb2tvnOZcIGtvbHVtbnlcIHphJndpbmnq5gorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCU1lJnRvZGFcIHphd2lqYW5pYQorbWVudXRyYW5zIE0mYW51YWwJCQkmUupjem5pZQorbWVudXRyYW5zIEkmbmRlbnQJCQlXJmNp6mNpZQorbWVudXRyYW5zIEUmeHByZXNzaW9uIFcmeXJhemVuaWUKK21lbnV0cmFucyBTJnludGF4CQkJUyZrs2FkbmlhCittZW51dHJhbnMgTWEmcmtlcgkJCVpuJmFjem5paworCisiIERpZmYKK21lbnV0cmFucyAmVXBkYXRlCQkJCQkmT2Scd2llvworbWVudXRyYW5zICZHZXRcIEJsb2NrCQkJJlBvYmllcnpcIGJsb2sKK21lbnV0cmFucyAmUHV0XCBCbG9jawkJCSZXc3Rhd1wgYmxvaworCisiIE1ha2UgYW5kIHN0dWZmLi4uCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQlNJmFrZTxUYWI+Om1ha2UKK21lbnV0cmFucyAmTGlzdFwgRXJyb3JzPFRhYj46Y2wJCSZQb2thv1wgYrPqZHk8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQlXJnlsaWN6XCBwb3dpYWRvbWllbmlhPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCSZOYXN06nBueVwgYrO5ZDxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCSZQb3ByemVkbmlcIGKzuWQ8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJJlN0YXJzemFcIGxpc3RhPFRhYj46Y29sZAorbWVudXRyYW5zIE4mZXdlclwgTGlzdDxUYWI+OmNuZXcJTiZvd3N6YVwgbGlzdGE8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cgIE9rbm9cIGtvbXUmbmlrYXTzdworbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCQkJQWt0JnVhbGl6dWo8VGFiPjpjd2luCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCQkJJlphbWtuaWo8VGFiPjpjY2xvc2UKK21lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQkJJk90d/NyejxUYWI+OmNvcGVuCisKK21lbnV0cmFucyAmU2V0XCBDb21waWxlcgkJCQlVJnN0YXdcIGtvbXBpbGF0b3IKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkICAgICBLb2R5XCBzemVzbmFzdGtvd2U8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yICAgICBad3lrs3lcIHRla3N0PFRhYj46JSF4eGRcIC1yCisKKyIgTmFtZXMgZm9yIGJ1ZmZlciBtZW51LgorbWVudXRyYW5zICZCdWZmZXJzCSZCdWZvcnkKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQlPZJx3aWW/CittZW51dHJhbnMgRGVsZXRlCVNrYXN1agorbWVudXRyYW5zICZBbHRlcm5hdGUJJlptaWXxCittZW51dHJhbnMgJk5leHQJCSZOYXN06nBueQorbWVudXRyYW5zICZQcmV2aW91cwkmUG9wcnplZG5pCittZW51dHJhbnMgW05vXCBGaWxlXQlbQnJha1wgUGxpa3VdCisKKyIgV2luZG93IG1lbnUKK21lbnV0cmFucyAmV2luZG93CQkJJldpZG9raQorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCSZOb3d5PFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJUG8mZHppZWw8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JUCZvZHppZWxcIG5hXCAjPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJUG9kemllbFwgcGlvbm93bzxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcgkJT3R383J6XCBtZW5lZL9lclwgcGxpa/N3CisKK21lbnV0cmFucyAmQ2xvc2U8VGFiPl5XYwkJJlphbWtuaWo8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwlaYW1rbmlqXCAmaW5uZTxUYWI+XldvCittZW51dHJhbnMgTmUmeHQ8VGFiPl5XdwkJCSZOYXN06nBueTxUYWI+Xld3CittZW51dHJhbnMgUCZyZXZpb3VzPFRhYj5eV1cJCSZQb3ByemVkbmk8VGFiPl5XVworbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CQkmV3ly83duYWpcIHd5c29rb5xjaTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCVombWFrc3ltYWxpenVqXCB3eXNva2+c5jxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQlabWluaW0mYWxpenVqXCB3eXNva2+c5jxUYWI+XlcxXworbWVudXRyYW5zIE1heFwgV2lkdGg8VGFiPl5XXHwJCU1ha3N5bWFsbmFcIHN6ZXJva2+c5jxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdGg8VGFiPl5XMVx8CQlNaW5pbWFsbmFcIHN6ZXJva2+c5jxUYWI+XlcxXHwKK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkJWm1ha3N5bWFsaXp1alwgc3plcm9rb5zmPFRhYj5eV1x8CittZW51dHJhbnMgTWluXCBXaWR0Jmg8VGFiPl5XMVx8CQlabWluaW1hbGl6dWpcIHN6ZXJva2+c5jxUYWI+XlcxXHwKK21lbnV0cmFucyBNb3ZlXCAmVG8JCQkmSWSfXCBkbworbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJCSZH83JhPFRhYj5eV0sKK21lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJCSZE87M8VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCSZMZXdhXCBzdHJvbmE8VGFiPl5XSAorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCQkmUHJhd2FcIHN0cm9uYTxUYWI+XldMCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJT2Jy8+ZcIHdcICZn83LqPFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IJCU9icvPmXCB3XCAmZPOzPFRhYj5eV3IKK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdgkmUG9kemllbFwgd1wgcG96aW9taWU8VGFiPl5XdgorbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCVd5YmllcnpcICZjemNpb25r6lwuXC5cLgorCisiIFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCQkmQ29mbmlqCittZW51dHJhbnMgQ3UmdAkJCVcmeXRuaWoKK21lbnV0cmFucyAmQ29weQkJCSZLb3BpdWoKK21lbnV0cmFucyAmUGFzdGUJCSZXa2xlagorbWVudXRyYW5zICZEZWxldGUJCSZTa2FzdWoKK21lbnV0cmFucyBTZWxlY3RcIEJsb2Nrd2lzZQlaYXpuYWN6XCAmYmxvaworbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCVphem5hY3pcICZzs293bworbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCVphem5hY3pcIHcmaWVyc3oKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawlaYXpuYWN6XCAmYmxvaworbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJWmF6bmFjelwgYyZhs2+c5gorCisiIFRoZSBHVUkgdG9vbGJhcgoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorICAgIHRtZW51IFRvb2xCYXIuT3BlbgkJT3R383J6IHBsaWsKKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCVphcGlzeiBiaWW/uWN5IHBsaWsKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJCVphcGlzeiB3c3p5c3RraWUgcGxpa2kKKyAgICB0bWVudSBUb29sQmFyLlByaW50CQlEcnVrdWoKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCUNvZm5pagorICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJUG9u83cKKyAgICB0bWVudSBUb29sQmFyLkN1dAkJV3l0bmlqCisgICAgdG1lbnUgVG9vbEJhci5Db3B5CQlTa29waXVqCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJV2tsZWoKKyAgICB0bWVudSBUb29sQmFyLkZpbmQJCVN6dWthai4uLgorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJU3p1a2FqIG5hc3TqcG5lZ28KKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CVN6dWthaiBwb3ByemVkbmllZ28KKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJCVN6dWthaiBpIHphbWllbmlhai4uLgorICAgIGlmIDAJIiBkaXNhYmxlZDsgVGhlc2UgYXJlIGluIHRoZSBXaW5kb3dzIG1lbnUKKyAgICAgIHRtZW51IFRvb2xCYXIuTmV3CQlOb3d5IHdpZG9rCisgICAgICB0bWVudSBUb29sQmFyLldpblNwbGl0CVBvZHppZWwgd2lkb2sKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWF4CQlabWFrc3ltYWxpenVqIHdpZG9rCisgICAgICB0bWVudSBUb29sQmFyLldpbk1pbgkJWm1pbmltYWxpenVqIHdpZG9rCisgICAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlCVphbWtuaWogd2lkb2sKKyAgICBlbmRpZgorICAgIHRtZW51IFRvb2xCYXIuTG9hZFNlc24JWmGzYWR1aiBzZXNq6gorICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24JWmFjaG93YWogYmllv7ljuSBzZXNq6gorICAgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0CVVydWNob20gc2tyeXB0IFZpbWEKKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCVd5a29uYWogYmllv7ljeSBwcm9qZWt0CisgICAgdG1lbnUgVG9vbEJhci5TaGVsbAkJT3R383J6IHBvd7Nva+oKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCVR383J6IHRhZ2kgdyBiaWW/uWN5bSBrYXRhbG9ndQorICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAkJU2tvayBkbyB0YWdhIHBvZCBrdXJzb3JlbQorICAgIHRtZW51IFRvb2xCYXIuSGVscAkJUG9tb2MgVmltYQorICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJUHJ6ZXN6dWt1aiBwb21vYyBWaW0tYQorICBlbmRmdW4KK2VuZGlmCisKKyIgU3ludGF4IG1lbnUKK21lbnV0cmFucyAmU3ludGF4ICZTa7NhZG5pYQorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CVVzdGF3XCB0eWxrb1wgJyZzeW50YXgnCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCVVzdGF3XCBy83duaWW/XCAnJmZpbGV0eXBlJworbWVudXRyYW5zICZPZmYJCQkmV3mzuWN6CittZW51dHJhbnMgJk1hbnVhbAkJJlLqY3puaWUKK21lbnV0cmFucyBBJnV0b21hdGljCQlBJnV0b21hdHljem5lCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCQkJd7O5Y3ovdyZ5s7ljelwgZGxhXCBwbGlrdQorbWVudXRyYW5zIENvJmxvclwgdGVzdAkJVGVzdFwgJmtvbG9y83cKK21lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0CSZUZXN0XCBwb2Scd2lldGxhbmlhCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCVByemV0d/NyelwgbmFcICZIVE1MCisKKyIgZGlhbG9nIHRleHRzCitsZXQgbWVudXRyYW5zX25vX2ZpbGUgPSAiW0JyYWsgcGxpa3VdIgorbGV0IG1lbnV0cmFuc19oZWxwX2RpYWxvZyA9ICJXcHJvd2FknyBrb21lbmTqIGx1YiBzs293bywgYWJ5IG90cnp5bWHmIHBvbW9jIG86XG5cblByemVkcm9zdGVrIGlfIG96bmFjemEga29tZW5k6iB0cnlidSBXcHJvd2FkemFuaWEgKG5wLiBpX0NUUkwtWClcblByemVkcm9zdGVrIGNfIG96bmFjemEga29tZW5k6iBlZHljamkgd2llcnN6YSBrb21lbmQgKG5wLiBjXzxEZWw+KVxuUHJ6ZWRyb3N0ZWsgJyBvem5hY3phIG5henfqIG9wY2ppIChucC4gJ3NoaWZ0d2lkdGgnKSIKK2xldCBnOm1lbnV0cmFuc19wYXRoX2RpYWxvZyA9ICJXcHJvd2FknyCcY2llv2vqIHBvc3p1a2l3YW5pYSBwbGlr83cuXG5Qcm9zeuogcm96ZHppZWxh5iBuYXp3eSBrYXRhbG9n83cgcHJ6ZWNpbmtpZW0uIgorbGV0IGc6bWVudXRyYW5zX3RhZ3NfZGlhbG9nID0gIlBvZGFqIG5hend5IHBsaWvzdyB0YWfzdy5cblByb3N66iByb3pkemllbGHmIG5hend5IHByemVjaW5raWVtLiIKK2xldCBnOm1lbnV0cmFuc190ZXh0d2lkdGhfZGlhbG9nID0gIldwcm93YWSfIG5vd7kgc3plcm9rb5zmIHRla3N0dSAoMCB3ebO5Y3phIHByemV3aWphbmllKTogIgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIld5YmllcnogZm9ybWF0IHcga3TzcnltIHRlbiBwbGlrIG1hIGJ55iB6YXBpc2FueSIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3B0X2JyLmxhdGluMS52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9wdF9ici5sYXRpbjEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZDk0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9wdF9ici5sYXRpbjEudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IHRyYW5zbGF0aW9uczogUG9ydHVndWVzZQorCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9wdF9ici52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3B0X2JyLnV0Zi04LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X3B0X2JyLnV0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODc5YzI0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfcHRfYnIudXRmLTgudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IHRyYW5zbGF0aW9uczogUG9ydHVndWVzZSBmb3IgVVRGLTggZW5jb2RpbmcKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfcHRfYnIudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9wdF9ici52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9wdF9ici52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhZDI2ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3B0X2JyLnZpbQpAQCAtMCwwICsxLDI2NSBAQAorIiBNZW51IFRyYW5zbGF0aW9uczogUG9ydHVndepzCisiIE1haW50YWluZXI6IEpvc+kgZGUgUGF1bGEgPGpvc2VfZGVfcGF1bGFAaWcuY29tLmJyPgorIiBMYXN0IENoYW5nZTogMjAwMyBKdW4gMTIKKyIKKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorCWZpbmlzaAorZW5kaWYKK2xldCBkaWRfbWVudV90cmFucyA9IDEKKworIiBUcmFuc2xhdGlvbnMgaW4gbGF0aW4xIChJU08tODg1OS0xKSwgYW5kIHNob3VsZCB3b3JrIGluCisiIGxhdGluOSAoSVNPLTg4NTktMTUpCisKK2lmICZlbmMgIT0gImNwMTI1MiIgJiYgJmVuYyAhPSAiaXNvLTg4NTktMTUiCisJc2NyaXB0ZW5jb2RpbmcgbGF0aW4xCitlbmRpZgorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJQSZqdWRhCittZW51dHJhbnMgJk92ZXJ2aWV3PFRhYj48RjE+CSZDb250ZfpkbworbWVudXRyYW5zICZVc2VyXCBNYW51YWwJCSZNYW51YWxcIGRvXCBVc3XhcmlvCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJJkNvbW9cIGZhemVyPworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkmUHJvY3VyYXJcLlwuXC4KK21lbnV0cmFucyAmQ3JlZGl0cwkJJkNy6WRpdG9zCittZW51dHJhbnMgTyZycGhhbnMJCSbTcmbjb3MKK21lbnV0cmFucyBDbyZweWluZwkJJkxpY2Vu52EKK21lbnV0cmFucyAmVmVyc2lvbgkJJlZlcnPjbworbWVudXRyYW5zICZBYm91dAkJJlNvYnJlCisKKyIgRmlsZSBtZW51CittZW51dHJhbnMgJkZpbGUJCQkJJkFycXVpdm8KK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCUEmYnJpclwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCUFiJnJpclwgZW1cIG91dHJhXCBqYW5lbGFcLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQkmTm92bzxUYWI+OmVuZXcKK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjbG9zZQkJJkZlY2hhcjxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJJlNhbHZhcjxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJU2EmbHZhclwgY29tb1wuXC5cLjxUYWI+OnNhdgorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLgkmRXhpYmlyXCBkaWZlcmVu52FzXCBjb21cLlwuXC4KK21lbnV0cmFucyBTcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCUV4JmliaXJcIHBhdGNoZWFkb1wgcG9yXC5cLlwuCittZW51dHJhbnMgJlByaW50CQkJSSZtcHJpbWlyCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJU2FsJnZhclwgZVwgc2FpcjxUYWI+OndxYQorbWVudXRyYW5zIEUmeGl0PFRhYj46cWEJCQlTYWkmcjxUYWI+OnFhCisKKyIgRWRpdCBtZW51CittZW51dHJhbnMgJkVkaXQJCQkJJkVkaXRhcgorbWVudXRyYW5zICZVbmRvPFRhYj51CQkJJkRlc2ZhemVyPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJJlJlZmF6ZXI8VGFiPnUKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJUmVwZSZ0aXI8VGFiPlwuCittZW51dHJhbnMgQ3UmdDxUYWI+Iit4CQkJUmUmY29ydGFyPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJQ29wJmlhcjxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQlDJm9sYXI8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQlDb2xvY2FyXCAmYW50ZXM8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQlDb2xvY2FyXCAmZGVwb2lzPFRhYj5dcAorbWVudXRyYW5zICZTZWxlY3RcIGFsbDxUYWI+Z2dWRwkJJlNlbGVjaW9uYXJcIHR1ZG88VGFiPmdnVkcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCSZQcm9jdXJhclwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JUHJvY3VyYXJcIGVcIHN1YnN0aXQmdWlyXC5cLlwuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OiVzCVByb2N1cmFyXCBlXCBzdWJzdGl0JnVpcjxUYWI+OiVzCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZQkJUHJvY3VyYXJcIGVcIHN1YnN0aXQmdWlyCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OnMJUHJvY3VyYXJcIGVcIHN1YnN0aXR1aXI8VGFiPjpzCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCU9wJuf1ZXMKKworIiBFZGl0L0dsb2JhbCBTZXR0aW5ncworbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQlPcOf1ZXNcICZHbG9iYWlzCisKK21lbnV0cmFucyBUb2dnbGVcIFBhdHRlcm5cICZIaWdobGlnaHQ8VGFiPjpzZXRcIGhscyEJQXRpdmFyL0Rlc2F0aXZhclwgJlJlYWxjZVwgZGVcIFBhZHL1ZXM8VGFiPjpzZXRcIGhscyEKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCQlBdGl2YXIvRGVzYXRpdmFyXCAmSWdub3JhclwgbWFp+nNjdWxhczxUYWI+OnNldFwgaWMhCittZW51dHJhbnMgVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEJCUF0aXZhci9EZXNhdGl2YXJcICZjb2luY2lk6m5jaWFzPFRhYj46c2V0XCBzbSEKKworbWVudXRyYW5zICZDb250ZXh0XCBsaW5lcwkJTGluaGFzXCBkZVwgQyZvbnRleHRvCisKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJRWRp5+NvXCAmVmlydHVhbAorbWVudXRyYW5zIE5ldmVyCQkJCU51bmNhCittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgkJU2VsZefjb1wgZGVcIEJsb2NvCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJTW9kb1wgZGVcIGluc2Vy5+NvCittZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CQlCbG9jb1wgZVwgaW5zZXLn428KK21lbnV0cmFucyBBbHdheXMJCQlTZW1wcmUKKworbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hIEF0aXZhci9EZXNhdGl2YXJcIE1vZG9cIGRlXCBJbiZzZXLn4288VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEgQXRpdmFyL0Rlc2F0aXZhclwgQ28mbXBhdGliaWxpZGFkZVwgY29tXCBWaTxUYWI+OnNldFwgY3AhCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkJQ2FtaW4maG9cIGRlXCBCdXNjYVwuXC5cLgorbWVudXRyYW5zIFRhJmdcIEZpbGVzXC5cLlwuCQlBcnF1aXZvc1wgZGVcIFRhZ3NcLlwuXC4KKworIiBHVUkgb3B0aW9ucworbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCU9jdWx0YXIvRXhpYmlyXCBCYXJyYVwgZGVcICZGZXJyYW1lbnRhcworbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCU9jdWx0YXIvRXhpYmlyXCBCYXJyYVwgZGVcICZSb2xhZ2VtXCBJbmZlcmlvcgorbWVudXRyYW5zIFRvZ2dsZVwgJkxlZnRcIFNjcm9sbGJhcglPY3VsdGFyL0V4aWJpclwgQmFycmFcIGRlXCBSJm9sYWdlbVwgRXNxdWVyZGEKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCU9jdWx0YXIvRXhpYmlyXCBCYXJyYVwgZGVcIFJvJmxhZ2VtXCBEaXJlaXRhCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAiSW5kaXF1ZSB1bSBjYW1pbmhvIGRlIHByb2N1cmEgcGFyYSBvcyBhcnF1aXZvcy5cblNlcGFyZSBvcyBub21lcyBkb3MgZGlyZXTzcmlvcyBjb20gdW1hIHbtcmd1bGEuIgorbGV0IGc6bWVudXRyYW5zX3RhZ3NfZGlhbG9nID0gIkluZGlxdWUgb3Mgbm9tZXMgZG9zIGFycXVpdm9zIGRlIHRhZ3MuXG5TZXBhcmUgb3Mgbm9tZXMgY29tIHVtYSB27XJndWxhLiIKKworIiBFZGl0L0ZpbGUgU2V0dGluZ3MKK21lbnV0cmFucyBGJmlsZVwgU2V0dGluZ3MJCU9w5/Vlc1wgZG9cICZBcnF1aXZvCisKKyIgQm9vbGVhbiBvcHRpb25zCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmTnVtYmVyaW5nPFRhYj46c2V0XCBudSEJQXRpdmFyL0Rlc2F0aXZhclwgJm51bWVyYefjb1wgZGVcIGxpbmhhczxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCUF0aXZhci9EZXNhdGl2YXJcIG1vZG9cICZsaXN0PFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQlBdGl2YXIvRGVzYXRpdmFyXCAmcXVlYnJhXCBkZVwgbGluaGFzPFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCUF0aXZhci9EZXNhdGl2YXJcIHF1ZWJyYVwgbmFcICZwYWxhdnJhPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCQlBdGl2YXIvRGVzYXRpdmFyXCBleHBhbnPjbyBkZSB0YWJzPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQlBdGl2YXIvRGVzYXRpdmFyXCAmYXV0by1pbmRlbnRh5+NvPFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQkJQXRpdmFyL0Rlc2F0aXZhclwgaW5kZW50YefjbyBlc3RpbG8gJkM8VGFiPjpzZXRcIGNpbiEKKworIiBvdGhlciBvcHRpb25zCittZW51dHJhbnMgJlNoaWZ0d2lkdGgJCQlMYXJndXJhXCBkYVwgJmluZGVudGHn428KKworbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQkmVGFidWxh5+NvXCBjb21cIGVzcGHnb3MKKworbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJTGFyZ3VyYVwgZG9cIHRlJnh0b1wuXC5cLgorbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAiRGlnaXRlIGEgbm92YSBsYXJndXJhIGRvIHRleHRvICgwIHBhcmEgZGVzYXRpdmFyIGEgZm9ybWF0Yefjbyk6ICIKKworbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCSZGb3JtYXRvXCBkb1wgYXJxdWl2b1wuXC5cLgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIlNlbGVjaW9uZSBvIGZvcm1hdG8gcGFyYSBncmF2YXIgbyBhcnF1aXZvIgorCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCUVzcXVlbWFcIGRlXCBjJm9yZXMKK21lbnV0cmFucyBkZWZhdWx0CXBhZHLjbworCittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkJU2VsZWNpb25hclwgZm8mbnRlXC5cLlwuCisKK21lbnV0cmFucyAmS2V5bWFwCU1hcGFcIGRlXCB0ZWNsYWRvCittZW51dHJhbnMgTm9uZQkJTmVuaHVtCisKKyIgUHJvZ3JhbW1pbmcgbWVudQorbWVudXRyYW5zICZUb29scwkJCSZGZXJyYW1lbnRhcworbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JJlB1bGFyXCBwYXJhXCBlc3RlXCB0YWc8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkJJlZvbHRhcjxUYWI+XlQKK21lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCSZDb25zdHJ1aXJcIEFycXVpdm9cIGRlXCB0YWdzCittZW51dHJhbnMgJkZvbGRpbmcJCQkmRG9icmEKK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCSZNYWtlPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJJkxpc3RhXCBkZVwgZXJyb3M8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQlMaSZzdGFcIGRlXCBtZW5zYWdlbnM8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkJUCZy83hpbW9cIGVycm88VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAkmRXJyb1wgYW50ZXJpb3I8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJTGlzdGFyXCBlcnJvc1wgJmFudGlnb3M8VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwlMaXN0YXJcIGVycm9zXCAmbm92b3M8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCSZKYW5lbGFcIGRlXCBlcnJvcworbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCQlEZWYmaW5pclwgQ29tcGlsYWRvcgorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJQ29udmVydGVyXCBwYXJhXCBoZXhhZGVjaW1hbDxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJQ29udmVyJnRlclwgZGVcIHZvbHRhPFRhYj46JSF4eGRcIC1yCisKKyIgVG9vbHMuRm9sZCBNZW51CittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJCSZBdGl2YXIvRGVzYXRpdmFyXCBkb2JyYXM8VGFiPnppCittZW51dHJhbnMgJlZpZXdcIEN1cnNvclwgTGluZTxUYWI+enYJCSZWZXJcIGxpbmhhXCBkb1wgY3Vyc29yPFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJVmUmclwgc29tZW50ZVwgbGluaGFcIGRvXCBjdXJzb3I8VGFiPnpNengKK21lbnV0cmFucyBDJmxvc2VcIG1vcmVcIGZvbGRzPFRhYj56bQkJJkZlY2hhclwgbWFpc1wgZG9icmFzPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JCUYmZWNoYXJcIHRvZGFzXCBhc1wgZG9icmFzPFRhYj56TQorbWVudXRyYW5zIE8mcGVuXCBtb3JlXCBmb2xkczxUYWI+enIJCUEmYnJpclwgbWFpc1wgZG9icmFzPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgkJQWJyJmlyXCB0b2Rhc1wgYXNcIGRvYnJhczxUYWI+elIKKyIgZm9sZCBtZXRob2QKK21lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkJCSZNb2RvXCBkZVwgZG9icmFzCittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCQlDcmlhclwgJmRvYnJhczxUYWI+emYKK21lbnV0cmFucyAmRGVsZXRlXCBGb2xkPFRhYj56ZAkJCVJlbW92ZXJcIGQmb2JyYXM8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJCVJlbW92ZXJcICZ0b2Rhc1wgYXNcIGRvYnJhczxUYWI+ekQKKyIgbW92aW5nIGFyb3VuZCBpbiBmb2xkcworbWVudXRyYW5zIEZvbGRcIGNvbCZ1bW5cIHdpZHRoCQkJJkxhcmd1cmFcIGRhXCBjb2x1bmFcIGRhXCBkb2JyYQorCisiIFRvb2xzLkRpZmYgTWVudQorbWVudXRyYW5zICZVcGRhdGUJJkF0dWFsaXphcgorbWVudXRyYW5zICZHZXRcIEJsb2NrCSZPYnRlclwgQmxvY28KK21lbnV0cmFucyAmUHV0XCBCbG9jawkmUPRyXCBCbG9jbworCisiIFRvb2xzLkVycm9yIE1lbnUKK21lbnV0cmFucyAmVXBkYXRlPFRhYj46Y3dpbgkmQXR1YWxpemFyPFRhYj46Y3dpbgorbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4JQSZicmlyPFRhYj46Y29wZW4KK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjY2xvc2UJJkZlY2hhcjxUYWI+OmNjbG9zZQorCisiIE5hbWVzIGZvciBidWZmZXIgbWVudS4KK21lbnV0cmFucyAmQnVmZmVycwkJJkJ1ZmZlcnMKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQlBJnR1YWxpemFyXCBtZW51CittZW51dHJhbnMgJkRlbGV0ZQkJJkFwYWdhcgorbWVudXRyYW5zICZBbHRlcm5hdGUJCUEmbHRlcm5hcgorbWVudXRyYW5zICZOZXh0CQkJUCZy83hpbW8KK21lbnV0cmFucyAmUHJldmlvdXMJCUEmbnRlcmlvcgorbGV0IGc6bWVudXRyYW5zX25vX2ZpbGUgPSAiW1NlbSBhcnF1aXZvc10iCisKKyIgV2luZG93IG1lbnUKK21lbnV0cmFucyAmV2luZG93CQkJJkphbmVsYQorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCU4mb3ZhPFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJJkRpdmlkaXI8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JRCZpdmlkaXJcIHBhcmFcICM8VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdglEaXZpZGlyXCAmdmVydGljYWxtZW50ZTxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcgkmQWJyaXJcIEdlcmVuY2lhZG9yXCBkZVwgYXJxdWl2b3MKK21lbnV0cmFucyAmQ2xvc2U8VGFiPl5XYwkJJkZlY2hhcjxUYWI+XldjCittZW51dHJhbnMgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvCUZlY2hhclwgJm91dHJhKHMpPFRhYj5eV28KK21lbnV0cmFucyBNb3ZlXCAmVG8JCQlNb3ZlclwgJnBhcmEKK21lbnV0cmFucyAmVG9wPFRhYj5eV0sJCQlBJmNpbWE8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJQSZiYWl4bzxUYWI+XldKCittZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAkJTGFkb1wgJmVzcXVlcmRvPFRhYj5eV0gKK21lbnV0cmFucyAmUmlnaHRcIHNpZGU8VGFiPl5XTAkJTGFkb1wgZGkmcmVpdG88VGFiPl5XTAorbWVudXRyYW5zIFJvdGF0ZVwgJlVwPFRhYj5eV1IJCSZHaXJhclwgcGFyYVwgY2ltYTxUYWI+XldSCittZW51dHJhbnMgUm90YXRlXCAmRG93bjxUYWI+XldyCQlHaXJhclwgcGFyYVwgYmFpJnhvPFRhYj5eV3IKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkJTWVzbW9cICZUYW1hbmhvPFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkJQWx0dXJhXCAmTeF4aW1hPFRhYj5eV18KK21lbnV0cmFucyBNJmluXCBIZWlnaHQ8VGFiPl5XMV8JCUEmbHR1cmFcIE3tbmltYTxUYWI+XlcxXworbWVudXRyYW5zIE1heFwgJldpZHRoPFRhYj5eV1x8CQlMYXJnJnVyYVwgTeF4aW1hPFRhYj5eV1x8CittZW51dHJhbnMgTWluXCBXaWR0Jmg8VGFiPl5XMVx8CQlMYXJndXJhXCBN7SZuaW1hPFRhYj5eVzFcfAorCisiIFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCQkmRGVzZmF6ZXIKK21lbnV0cmFucyBDdSZ0CQkJUmVjb3ImdGFyCittZW51dHJhbnMgJkNvcHkJCQkmQ29waWFyCittZW51dHJhbnMgJlBhc3RlCQlDbyZsYXIKK21lbnV0cmFucyAmRGVsZXRlCQkmQXBhZ2FyCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJU2VsZefjb1wgZGVcIGJsb2NvCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJU2VsZWNpb25hclwgJlBhbGF2cmEKK21lbnV0cmFucyBTZWxlY3RcICZMaW5lCQlTZWxlY2lvbmFyXCBMJmluaGEKK21lbnV0cmFucyBTZWxlY3RcICZBbGwJCVNlbGVjaW9uYXJcIFQmdWRvCisKKyIgVGhlIEdVSSB0b29sYmFyCitpZiBoYXMoInRvb2xiYXIiKQorICBpZiBleGlzdHMoIipEb190b29sYmFyX3RtZW51IikKKyAgICBkZWxmdW4gRG9fdG9vbGJhcl90bWVudQorICBlbmRpZgorICBmdW4gRG9fdG9vbGJhcl90bWVudSgpCisJICB0bWVudSBUb29sQmFyLk9wZW4JQWJyaXIgQXJxdWl2bworCSAgdG1lbnUgVG9vbEJhci5TYXZlCVNhbHZhciBBcnF1aXZvCisJICB0bWVudSBUb29sQmFyLlNhdmVBbGwJU2FsdmFyIFRvZG9zIG9zIGFycXVpdm9zCisJICB0bWVudSBUb29sQmFyLlByaW50CUltcHJpbWlyCisJICB0bWVudSBUb29sQmFyLlVuZG8JRGVzZmF6ZXIKKwkgIHRtZW51IFRvb2xCYXIuUmVkbwlSZWZhemVyCisJICB0bWVudSBUb29sQmFyLkN1dAlSZWNvcnRhcgorCSAgdG1lbnUgVG9vbEJhci5Db3B5CUNvcGlhcgorCSAgdG1lbnUgVG9vbEJhci5QYXN0ZQlDb2xhcgorCSAgdG1lbnUgVG9vbEJhci5GaW5kCVByb2N1cmFyLi4uCisJICB0bWVudSBUb29sQmFyLkZpbmROZXh0CVByb2N1cmFyIFBy83hpbW8KKwkgIHRtZW51IFRvb2xCYXIuRmluZFByZXYJUHJvY3VyYXIgQW50ZXJpb3IKKwkgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQkJUHJvY3VyYXIgZSBTdWJzdGl0dWlyCisJICBpZiAwCSIgZGlzYWJsZTsgdGhlc2UgYXJlIGluIHRoZSBXaW5kb3plIG1lbnUKKwkJICB0bWVudSBUb29sQmFyLk5ldwlOb3ZhIEphbmVsYQorCQkgIHRtZW51IFRvb2xCYXIuV2luU3BsaXQJRGl2aWRpciBKYW5lbGEKKwkJICB0bWVudSBUb29sQmFyLldpbk1heAkJSmFuZWxhIE3heGltYQorCQkgIHRtZW51IFRvb2xCYXIuV2luTWluCQlKYW5lbGEgTe1uaW1hCisJCSAgdG1lbnUgVG9vbEJhci5XaW5WU3BsaXQJRGl2aWRpciBWZXJ0aWNhbG1lbnRlCisJCSAgdG1lbnUgVG9vbEJhci5XaW5NYXhXaWR0aAlMYXJndXJhIE3heGltYQorCQkgIHRtZW51IFRvb2xCYXIuV2luTWluV2lkdGgJTGFyZ3VyYSBN7W5pbWEKKwkJICB0bWVudSBUb29sQmFyLldpbkNsb3NlCUZlY2hhciBKYW5lbGEKKwkgIGVuZGlmCisJICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCUNhcnJlZ2FyIFNlc3PjbworCSAgdG1lbnUgVG9vbEJhci5TYXZlU2VzbglTYWx2YXIgU2Vzc+NvCisJICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdAlFeGVjdXRhciBzY3JpcHQKKwkgIHRtZW51IFRvb2xCYXIuTWFrZQkJTWFrZQorCSAgdG1lbnUgVG9vbEJhci5TaGVsbAkJQWJyaXIgdW0gc2hlbGwKKwkgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJR2VyYXIgdW0gYXJxdWl2byBkZSB0YWdzCisJICB0bWVudSBUb29sQmFyLlRhZ0p1bXAJCVNhbHRhciBwYXJhIHVtIHRhZworCSAgdG1lbnUgVG9vbEJhci5IZWxwCQlBanVkYQorCSAgdG1lbnUgVG9vbEJhci5GaW5kSGVscAlQcm9jdXJhciBuYSBBanVkYQorICBlbmRmdW4KK2VuZGlmCisKKyIgU3ludGF4IG1lbnUKK21lbnV0cmFucyAmU3ludGF4CQkJJlNpbnRheGUKKyJtZW51dHJhbnMgJlNob3dcIGluZGl2aWR1YWxcIGNob2ljZXMJRSZ4aWJpclwgZXNjb2xoYXNcIGluZGl2aWR1YWlzCittZW51dHJhbnMgJlNob3dcIGZpbGV0eXBlc1wgaW5cIG1lbnUJRSZ4aWJpclwgdGlwb3NcIGRlXCBhcnF1aXZvc1wgbm9cIG1lbnUKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seQkJQXRpdmFyXCBzb21lbnRlXCBzJmludGF4ZQorbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwkJQXRpdmFyXCB0YW1i6W1cICZ0aXBvXCBkZVwgYXJxdWl2bworbWVudXRyYW5zICZPZmYJCQkJJkRlc2F0aXZhcgorbWVudXRyYW5zICZNYW51YWwJCQkmTWFudWFsCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJCUEmdXRvbeF0aWNhCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCUF0aXZhci9EZXNhdGl2YXJcIG5lc3RlXCAmYXJxdWl2bworbWVudXRyYW5zIENvJmxvclwgdGVzdAkJCVQmZXN0ZVwgZGVcIGNvcmVzCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAkJVGVzdGVcIGRlXCAmcmVhbGNlCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCQkmQ29udmVydGVyXCBwYXJhXCBIVE1MCisKKyIgRmluZCBIZWxwIGRpYWxvZyB0ZXh0CitsZXQgZzptZW51dHJhbnNfaGVscF9kaWFsb2cgPSAiRGlnaXRlIHVtIGNvbWFuZG8gb3UgcGFsYXZyYSBwYXJhIG9idGVyIGFqdWRhO1xuXG5BbnRlcG9uaGEgaV8gcGFyYSBjb21hbmRvcyBkZSBlbnRyYWRhIChleC46IGlfQ1RSTC1YKVxuQW50ZXBvbmhhIGNfIHBhcmEgY29tYW5kb3MgZGEgbGluaGEgZGUgY29tYW5kb3MgKGV4LjogY188RGVsPilcbkFudGVwb25oYSBgIHBhcmEgdW0gbm9tZSBkZSBvcOfjbyAoZXguOiBgc2hpZnR3aWR0aGApIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfcHRfcHQubGF0aW4xLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X3B0X3B0LmxhdGluMS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjNzNkMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3B0X3B0LmxhdGluMS52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglQb3J0dWd16nMKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfcHRfcHQudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9wdF9wdC51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9wdF9wdC51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjNzNkMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3B0X3B0LnV0Zi04LnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CVBvcnR1Z3XqcworCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9wdF9wdC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3B0X3B0LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X3B0X3B0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGI5NzI2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfcHRfcHQudmltCkBAIC0wLDAgKzEsMjY0IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOiBQb3J0dWd16nMKKyIgYWRhcHRhZG8gZGUgcHRfYnIuCisiIE1haW50YWluZXI6IER1YXJ0ZSBIZW5yaXF1ZXMgPGR1YXJ0ZV9oZW5yaXF1ZXNAbXlyZWFsYm94LmNvbT4KKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorCWZpbmlzaAorZW5kaWYKK2xldCBkaWRfbWVudV90cmFucyA9IDEKKworIiBUcmFuc2xhdGlvbnMgaW4gbGF0aW4xIChJU08tODg1OS0xKSwgYW5kIHNob3VsZCB3b3JrIGluCisiIGxhdGluOSAoSVNPLTg4NTktMTUpCisKK2lmICZlbmMgIT0gImNwMTI1MiIgJiYgJmVuYyAhPSAiaXNvLTg4NTktMTUiCisJc2NyaXB0ZW5jb2RpbmcgbGF0aW4xCitlbmRpZgorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJQSZqdWRhCittZW51dHJhbnMgJk92ZXJ2aWV3PFRhYj48RjE+CSZDb250ZfpkbworbWVudXRyYW5zICZVc2VyXCBNYW51YWwJCSZNYW51YWxcIGRvXCBVdGlsaXphZG9yCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJJkNvbW9cIGZhemVyPworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkmUHJvY3VyYXJcLlwuXC4KK21lbnV0cmFucyAmQ3JlZGl0cwkJJkNy6WRpdG9zCittZW51dHJhbnMgTyZycGhhbnMJCSbTcmbjb3MKK21lbnV0cmFucyBDbyZweWluZwkJJkxpY2Vu52EKK21lbnV0cmFucyAmVmVyc2lvbgkJJlZlcnPjbworbWVudXRyYW5zICZBYm91dAkJJlNvYnJlCisKKyIgRmlsZSBtZW51CittZW51dHJhbnMgJkZpbGUJCQkJJkZpY2hlaXJvCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQlBJmJyaXJcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAlBYnJpclwgbm91dHJhXCAmamFuZWxhXC5cLlwuPFRhYj46c3AKK21lbnV0cmFucyAmTmV3PFRhYj46ZW5ldwkJJk5vdm88VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCSZGZWNoYXI8VGFiPjpjbG9zZQorbWVudXRyYW5zICZTYXZlPFRhYj46dwkJCSZHdWFyZGFyPFRhYj46dworbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdglHdSZhcmRhclwgY29tb1wuXC5cLjxUYWI+OnNhdgorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLgkmRXhpYmlyXCBkaWZlcmVu52FzXCBjb21cLlwuXC4KK21lbnV0cmFucyBTcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCUV4JmliaXJcIHBhdGNoZWFkb1wgcG9yXC5cLlwuCittZW51dHJhbnMgJlByaW50CQkJSW0mcHJpbWlyCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJR3VhJnJkYXJcIGVcIHNhaXI8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkJU2FpJnI8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCSZFZGl0YXIKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSZEZXNmYXplcjxUYWI+dQorbWVudXRyYW5zICZSZWRvPFRhYj5eUgkJCSZSZWZhemVyPFRhYj51CittZW51dHJhbnMgUmVwJmVhdDxUYWI+XC4JCVJlcGUmdGlyPFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCSZDb3J0YXI8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQlDb3AmaWFyPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCUMmb2xhcjxUYWI+IitnUAorbWVudXRyYW5zIFB1dFwgJkJlZm9yZTxUYWI+W3AJCUNvbG9jYXJcICZhbnRlczxUYWI+W3AKK21lbnV0cmFucyBQdXRcICZBZnRlcjxUYWI+XXAJCUNvbG9jYXJcICZkZXBvaXM8VGFiPl1wCittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHCQkmU2VsZWNjaW9uYXJcIHR1ZG88VGFiPmdnVkcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCSZQcm9jdXJhclwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JUHJvY3VyYXJcIGVcIHN1YnN0aXQmdWlyXC5cLlwuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OiVzCVByb2N1cmFyXCBlXCBzdWJzdGl0JnVpcjxUYWI+OiVzCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZQkJUHJvY3VyYXJcIGVcIHN1YnN0aXQmdWlyCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OnMJUHJvY3VyYXJcIGVcIHN1YnN0aXR1aXI8VGFiPjpzCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCU9wJuf1ZXMKKworIiBFZGl0L0dsb2JhbCBTZXR0aW5ncworbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQlPcOf1ZXNcICZHbG9iYWlzCisKK21lbnV0cmFucyBUb2dnbGVcIFBhdHRlcm5cICZIaWdobGlnaHQ8VGFiPjpzZXRcIGhscyEJQWN0aXZhci9EZXNhY3RpdmFyXCAmUmVhbGNlXCBkZVwgUGFkcvVlczxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEJCUFjdGl2YXIvRGVzYWN0aXZhclwgJklnbm9yYXJcIG1hafpzY3VsYXM8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCQlBY3RpdmFyL0Rlc2FjdGl2YXJcICZjb2luY2lk6m5jaWFzPFRhYj46c2V0XCBzbSEKKworbWVudXRyYW5zICZDb250ZXh0XCBsaW5lcwkJTGluaGFzXCBkZVwgQyZvbnRleHRvCisKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJRWRp5+NvXCAmVmlydHVhbAorbWVudXRyYW5zIE5ldmVyCQkJCU51bmNhCittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgkJU2VsZefjb1wgZGVcIEJsb2NvCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJTW9kb1wgZGVcIGluc2Vy5+NvCittZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CQlCbG9jb1wgZVwgaW5zZXLn428KK21lbnV0cmFucyBBbHdheXMJCQlTZW1wcmUKKworbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hIEFjdGl2YXIvRGVzYWN0aXZhclwgTW9kb1wgZGVcIEluJnNlcufjbzxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwISBBY3RpdmFyL0Rlc2FjdGl2YXJcIENvJm1wYXRpYmlsaWRhZGVcIGNvbVwgVmk8VGFiPjpzZXRcIGNwIQorbWVudXRyYW5zIFNlYXJjaFwgJlBhdGhcLlwuXC4JCUNhbWluJmhvXCBkZVwgQnVzY2FcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJQXJxdWl2b3NcIGRlXCBUYWdzXC5cLlwuCisKKyIgR1VJIG9wdGlvbnMKK21lbnV0cmFucyBUb2dnbGVcICZUb29sYmFyCQlPY3VsdGFyL0V4aWJpclwgQmFycmFcIGRlXCAmRmVycmFtZW50YXMKK21lbnV0cmFucyBUb2dnbGVcICZCb3R0b21cIFNjcm9sbGJhcglPY3VsdGFyL0V4aWJpclwgQmFycmFcIGRlXCAmUm9sYWdlbVwgSW5mZXJpb3IKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJT2N1bHRhci9FeGliaXJcIEJhcnJhXCBkZVwgUiZvbGFnZW1cIEVzcXVlcmRhCittZW51dHJhbnMgVG9nZ2xlXCAmUmlnaHRcIFNjcm9sbGJhcglPY3VsdGFyL0V4aWJpclwgQmFycmFcIGRlXCBSbyZsYWdlbVwgRGlyZWl0YQorbGV0IGc6bWVudXRyYW5zX3BhdGhfZGlhbG9nID0gIkluZGlxdWUgdW0gY2FtaW5obyBkZSBwcm9jdXJhIHBhcmEgb3MgYXJxdWl2b3MuXG5TZXBhcmUgb3Mgbm9tZXMgZG9zIGRpcmV083Jpb3MgY29tIHVtYSB27XJndWxhLiIKK2xldCBnOm1lbnV0cmFuc190YWdzX2RpYWxvZyA9ICJJbmRpcXVlIG9zIG5vbWVzIGRvcyBhcnF1aXZvcyBkZSB0YWdzLlxuU2VwYXJlIG9zIG5vbWVzIGNvbSB1bWEgdu1yZ3VsYS4iCisKKyIgRWRpdC9GaWxlIFNldHRpbmdzCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQlPcOf1ZXNcIGRvXCAmQXJxdWl2bworCisiIEJvb2xlYW4gb3B0aW9ucworbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCUFjdGl2YXIvRGVzYWN0aXZhclwgJm51bWVyYefjb1wgZGVcIGxpbmhhczxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCUFjdGl2YXIvRGVzYWN0aXZhclwgbW9kb1wgJmxpc3Q8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJCUFjdGl2YXIvRGVzYWN0aXZhclwgJnF1ZWJyYVwgZGVcIGxpbmhhczxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyIQlBY3RpdmFyL0Rlc2FjdGl2YXJcIHF1ZWJyYVwgbmFcICZwYWxhdnJhPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCQlBY3RpdmFyL0Rlc2FjdGl2YXJcIGV4cGFuc+NvIGRlIHRhYnM8VGFiPjpzZXRcIGV0IQorbWVudXRyYW5zIFRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEJCUFjdGl2YXIvRGVzYWN0aXZhclwgJmF1dG8taW5kZW50YefjbzxUYWI+OnNldFwgYWkhCittZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJCUFjdGl2YXIvRGVzYWN0aXZhclwgaW5kZW50YefjbyBlc3RpbG8gJkM8VGFiPjpzZXRcIGNpbiEKKworIiBvdGhlciBvcHRpb25zCittZW51dHJhbnMgJlNoaWZ0d2lkdGgJCQlMYXJndXJhXCBkYVwgJmluZGVudGHn428KKworbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQkmVGFidWxh5+NvXCBjb21cIGVzcGHnb3MKKworbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJTGFyZ3VyYVwgZG9cIHRlJnh0b1wuXC5cLgorbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAiRGlnaXRlIGEgbm92YSBsYXJndXJhIGRvIHRleHRvICgwIHBhcmEgZGVzYXRpdmFyIGEgZm9ybWF0Yefjbyk6ICIKKworbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCSZGb3JtYXRvXCBkb1wgYXJxdWl2b1wuXC5cLgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIlNlbGVjaW9uZSBvIGZvcm1hdG8gcGFyYSBncmF2YXIgbyBhcnF1aXZvIgorCittZW51dHJhbnMgQyZvbG9yXCBTY2hlbWUJCUVzcXVlbWFcIGRlXCBjJm9yZXMKK21lbnV0cmFucyBkZWZhdWx0CXBhZHLjbworCittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkJU2VsZWNjaW9uYXJcIGZvJm50ZVwuXC5cLgorCittZW51dHJhbnMgJktleW1hcAlNYXBhXCBkZVwgdGVjbGFkbworbWVudXRyYW5zIE5vbmUJCU5lbmh1bQorCisiIFByb2dyYW1taW5nIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJCQlGZSZycmFtZW50YXMKK21lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dCVNhbHRhclwgcGFyYVwgZXN0YVwgJnRhZzxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQkmVm9sdGFyPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJJkNvbnN0cnVpclwgQXJxdWl2b1wgZGVcIHRhZ3MKK21lbnV0cmFucyAmRm9sZGluZwkJCSZEb2JyYQorbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZQkJJk1ha2U8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsCQkmTGlzdGFcIGRlXCBlcnJvczxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCUxpJnN0YVwgZGVcIG1lbnNhZ2VuczxUYWI+OmNsIQorbWVudXRyYW5zICZOZXh0XCBFcnJvcjxUYWI+OmNuCQlQJnLzeGltb1wgZXJybzxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCSZFcnJvXCBhbnRlcmlvcjxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAlMaXN0YXJcIGVycm9zXCAmYW50aWdvczxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3CUxpc3RhclwgZXJyb3NcICZub3ZvczxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdwkJJkphbmVsYVwgZGVcIGVycm9zCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCURlZiZpbmlyXCBDb21waWxhZG9yCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAlDb252ZXJ0ZXJcIHBhcmFcIGhleGFkZWNpbWFsPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtcglDb252ZXImdGVyXCBkZVwgdm9sdGE8VGFiPjolIXh4ZFwgLXIKKworIiBUb29scy5Gb2xkIE1lbnUKK21lbnV0cmFucyAmRW5hYmxlL0Rpc2FibGVcIGZvbGRzPFRhYj56aQkJJkFjdGl2YXIvRGVzYWN0aXZhclwgZG9icmFzPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CQkmVmVyXCBsaW5oYVwgZG9cIGN1cnNvcjxUYWI+enYKK21lbnV0cmFucyBWaWUmd1wgQ3Vyc29yXCBMaW5lXCBvbmx5PFRhYj56TXp4CVZlJnJcIHNvbWVudGVcIGxpbmhhXCBkb1wgY3Vyc29yPFRhYj56TXp4CittZW51dHJhbnMgQyZsb3NlXCBtb3JlXCBmb2xkczxUYWI+em0JCSZGZWNoYXJcIG1haXNcIGRvYnJhczxUYWI+em0KK21lbnV0cmFucyAmQ2xvc2VcIGFsbFwgZm9sZHM8VGFiPnpNCQlGJmVjaGFyXCB0b2Rhc1wgYXNcIGRvYnJhczxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyCQlBJmJyaXJcIG1haXNcIGRvYnJhczxUYWI+enIKK21lbnV0cmFucyAmT3BlblwgYWxsXCBmb2xkczxUYWI+elIJCUFiciZpclwgdG9kYXNcIGFzXCBkb2JyYXM8VGFiPnpSCisiIGZvbGQgbWV0aG9kCittZW51dHJhbnMgRm9sZFwgTWV0JmhvZAkJCQkmTW9kb1wgZGVcIGRvYnJhcworbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQkJQ3JpYXJcICZkb2JyYXM8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCQlSZW1vdmVyXCBkJm9icmFzPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECQlSZW1vdmVyXCAmdG9kYXNcIGFzXCBkb2JyYXM8VGFiPnpECisiIG1vdmluZyBhcm91bmQgaW4gZm9sZHMKK21lbnV0cmFucyBGb2xkXCBjb2wmdW1uXCB3aWR0aAkJCSZMYXJndXJhXCBkYVwgY29sdW5hXCBkYVwgZG9icmEKKworIiBUb29scy5EaWZmIE1lbnUKK21lbnV0cmFucyAmVXBkYXRlCSZBY3R1YWxpemFyCittZW51dHJhbnMgJkdldFwgQmxvY2sJJk9idGVyXCBCbG9jbworbWVudXRyYW5zICZQdXRcIEJsb2NrCSZQ9HJcIEJsb2NvCisKKyIgVG9vbHMuRXJyb3IgTWVudQorbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCSZBY3R1YWxpemFyPFRhYj46Y3dpbgorbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4JQSZicmlyPFRhYj46Y29wZW4KK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjY2xvc2UJJkZlY2hhcjxUYWI+OmNjbG9zZQorCisiIE5hbWVzIGZvciBidWZmZXIgbWVudS4KK21lbnV0cmFucyAmQnVmZmVycwkJJkJ1ZmZlcnMKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQlBJmN0dWFsaXphclwgbWVudQorbWVudXRyYW5zICZEZWxldGUJCSZBcGFnYXIKK21lbnV0cmFucyAmQWx0ZXJuYXRlCQlBJmx0ZXJuYXIKK21lbnV0cmFucyAmTmV4dAkJCVAmcvN4aW1vCittZW51dHJhbnMgJlByZXZpb3VzCQlBJm50ZXJpb3IKK2xldCBnOm1lbnV0cmFuc19ub19maWxlID0gIltTZW0gYXJxdWl2b3NdIgorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJCSZKYW5lbGEKK21lbnV0cmFucyAmTmV3PFRhYj5eV24JCQlOJm92YTxUYWI+XlduCittZW51dHJhbnMgUyZwbGl0PFRhYj5eV3MJCSZEaXZpZGlyPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCUQmaXZpZGlyXCBwYXJhXCAjPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJRGl2aWRpclwgJnZlcnRpY2FsbWVudGU8VGFiPl5XdgorbWVudXRyYW5zIFNwbGl0XCBGaWxlXCBFJnhwbG9yZXIJJkFicmlyXCBHZXJlbmNpYWRvclwgZGVcIGFycXVpdm9zCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCSZGZWNoYXI8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwlGZWNoYXJcICZvdXRyYShzKTxUYWI+XldvCittZW51dHJhbnMgTW92ZVwgJlRvCQkJTW92ZXJcICZwYXJhCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkJQSZjaW1hPFRhYj5eV0sKK21lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJCUEmYmFpeG88VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCUxhZG9cICZlc3F1ZXJkbzxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCUxhZG9cIGRpJnJlaXRvPFRhYj5eV0wKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQkmR2lyYXJcIHBhcmFcIGNpbWE8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJR2lyYXJcIHBhcmFcIGJhaSZ4bzxUYWI+XldyCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JCU1lc21vXCAmVGFtYW5obzxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCUFsdHVyYVwgJk3heGltYTxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQlBJmx0dXJhXCBN7W5pbWE8VGFiPl5XMV8KK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkJTGFyZyZ1cmFcIE3heGltYTxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJTGFyZ3VyYVwgTe0mbmltYTxUYWI+XlcxXHwKKworIiBUaGUgcG9wdXAgbWVudQorbWVudXRyYW5zICZVbmRvCQkJJkRlc2ZhemVyCittZW51dHJhbnMgQ3UmdAkJCVJlY29yJnRhcgorbWVudXRyYW5zICZDb3B5CQkJJkNvcGlhcgorbWVudXRyYW5zICZQYXN0ZQkJQ28mbGFyCittZW51dHJhbnMgJkRlbGV0ZQkJJkFwYWdhcgorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlCVNlbGXn429cIGRlXCBibG9jbworbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCVNlbGVjY2lvbmFyXCAmUGFsYXZyYQorbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCVNlbGVjY2lvbmFyXCBMJmluaGEKK21lbnV0cmFucyBTZWxlY3RcICZBbGwJCVNlbGVjY2lvbmFyXCBUJnVkbworCisiIFRoZSBHVUkgdG9vbGJhcgoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorCSAgdG1lbnUgVG9vbEJhci5PcGVuCUFicmlyIEFycXVpdm8KKwkgIHRtZW51IFRvb2xCYXIuU2F2ZQlTYWx2YXIgQXJxdWl2bworCSAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCVNhbHZhciBUb2RvcyBvcyBhcnF1aXZvcworCSAgdG1lbnUgVG9vbEJhci5QcmludAlJbXByaW1pcgorCSAgdG1lbnUgVG9vbEJhci5VbmRvCURlc2ZhemVyCisJICB0bWVudSBUb29sQmFyLlJlZG8JUmVmYXplcgorCSAgdG1lbnUgVG9vbEJhci5DdXQJUmVjb3J0YXIKKwkgIHRtZW51IFRvb2xCYXIuQ29weQlDb3BpYXIKKwkgIHRtZW51IFRvb2xCYXIuUGFzdGUJQ29sYXIKKwkgIHRtZW51IFRvb2xCYXIuRmluZAlQcm9jdXJhci4uLgorCSAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAlQcm9jdXJhciBQcvN4aW1vCisJICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CVByb2N1cmFyIEFudGVyaW9yCisJICB0bWVudSBUb29sQmFyLlJlcGxhY2UJCVByb2N1cmFyIGUgU3Vic3RpdHVpcgorCSAgaWYgMAkiIGRpc2FibGU7IHRoZXNlIGFyZSBpbiB0aGUgV2luZG96ZSBtZW51CisJCSAgdG1lbnUgVG9vbEJhci5OZXcJTm92YSBKYW5lbGEKKwkJICB0bWVudSBUb29sQmFyLldpblNwbGl0CURpdmlkaXIgSmFuZWxhCisJCSAgdG1lbnUgVG9vbEJhci5XaW5NYXgJCUphbmVsYSBN4XhpbWEKKwkJICB0bWVudSBUb29sQmFyLldpbk1pbgkJSmFuZWxhIE3tbmltYQorCQkgIHRtZW51IFRvb2xCYXIuV2luVlNwbGl0CURpdmlkaXIgVmVydGljYWxtZW50ZQorCQkgIHRtZW51IFRvb2xCYXIuV2luTWF4V2lkdGgJTGFyZ3VyYSBN4XhpbWEKKwkJICB0bWVudSBUb29sQmFyLldpbk1pbldpZHRoCUxhcmd1cmEgTe1uaW1hCisJCSAgdG1lbnUgVG9vbEJhci5XaW5DbG9zZQlGZWNoYXIgSmFuZWxhCisJICBlbmRpZgorCSAgdG1lbnUgVG9vbEJhci5Mb2FkU2VzbglDYXJyZWdhciBTZXNz428KKwkgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24JU2FsdmFyIFNlc3PjbworCSAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJRXhlY3V0YXIgc2NyaXB0CisJICB0bWVudSBUb29sQmFyLk1ha2UJCU1ha2UKKwkgIHRtZW51IFRvb2xCYXIuU2hlbGwJCUFicmlyIHVtIHNoZWxsCisJICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCUdlcmFyIHVtIGFycXVpdm8gZGUgdGFncworCSAgdG1lbnUgVG9vbEJhci5UYWdKdW1wCQlTYWx0YXIgcGFyYSB1bSB0YWcKKwkgIHRtZW51IFRvb2xCYXIuSGVscAkJQWp1ZGEKKwkgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJUHJvY3VyYXIgbmEgQWp1ZGEKKyAgZW5kZnVuCitlbmRpZgorCisiIFN5bnRheCBtZW51CittZW51dHJhbnMgJlN5bnRheAkJCSZTaW50YXhlCisibWVudXRyYW5zICZTaG93XCBpbmRpdmlkdWFsXCBjaG9pY2VzCUUmeGliaXJcIGVzY29saGFzXCBpbmRpdmlkdWFpcworbWVudXRyYW5zICZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51CUUmeGliaXJcIHRpcG9zXCBkZVwgYXJxdWl2b3NcIG5vXCBtZW51CittZW51dHJhbnMgU2V0XCAnJnN5bnRheCdcIG9ubHkJCUFjdGl2YXJcIHNvbWVudGVcIHMmaW50YXhlCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCQlBY3RpdmFyXCB0YW1i6W1cICZ0aXBvXCBkZVwgYXJxdWl2bworbWVudXRyYW5zICZPZmYJCQkJJkRlc2FjdGl2YXIKK21lbnV0cmFucyAmTWFudWFsCQkJJk1hbnVhbAorbWVudXRyYW5zIEEmdXRvbWF0aWMJCQlBJnV0b23hdGljYQorbWVudXRyYW5zIG9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZQlBY3RpdmFyL0Rlc2FjdGl2YXJcIG5lc3RlXCAmYXJxdWl2bworbWVudXRyYW5zIENvJmxvclwgdGVzdAkJCVQmZXN0ZVwgZGVcIGNvcmVzCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAkJVGVzdGVcIGRlXCAmcmVhbGNlCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCQkmQ29udmVydGVyXCBwYXJhXCBIVE1MCisKKyIgRmluZCBIZWxwIGRpYWxvZyB0ZXh0CitsZXQgZzptZW51dHJhbnNfaGVscF9kaWFsb2cgPSAiRGlnaXRlIHVtIGNvbWFuZG8gb3UgcGFsYXZyYSBwYXJhIG9idGVyIGFqdWRhO1xuXG5BbnRlcG9uaGEgaV8gcGFyYSBjb21hbmRvcyBkZSBlbnRyYWRhIChleC46IGlfQ1RSTC1YKVxuQW50ZXBvbmhhIGNfIHBhcmEgY29tYW5kb3MgZGEgbGluaGEgZGUgY29tYW5kb3MgKGV4LjogY188RGVsPilcbkFudGVwb25oYSBgIHBhcmEgdW0gbm9tZSBkZSBvcOfjbyAoZXguOiBgc2hpZnR3aWR0aGApIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfcnUudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfcnUudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYjBiMmQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9ydS51dGYtOC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglSdXNzaWFuCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X3J1X3J1LnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfcnVfcnUua29pOC1yLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X3J1X3J1LmtvaTgtci52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkNzhhNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3J1X3J1LmtvaTgtci52aW0KQEAgLTAsMCArMSwyOTQgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CVJ1c3NpYW4KKyIgTWFpbnRhaW5lcjoJCXZhc3NpbHkgcmFnb3NpbiA8dnJyW2F0XXVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyIgTGFzdCBDaGFuZ2U6CQkyNiBBcHIgMjAwNAorIiBVUkw6CQkJY3ZzOi8vY3ZzLnNmLm5ldDovY3Zzcm9vdC9ydXZpbS9leHRyYXMvbWVudS9tZW51X3J1X3J1LnZpbQorIgorIiAkSWQkCisiCisiIEFkb3B0ZWQgZm9yIFJ1VmltIHByb2plY3QgYnkgVmFzc2lseSBSYWdvc2luLgorIiBGaXJzdCB0cmFuc2xhdGlvbjogVGltIEFsZXhlZXZza3kgPHJlYWx0aW0gW2F0XSBtYWlsLnJ1PiwKKyIgYmFzZWQgb24gdWtyYWluaWFuIHRyYW5zbGF0aW9uIGJ5IEJvaGRhbiBWbGFzeXVrIDxib2hkYW5AdnN0dS5lZHUudWE+CisiCisiCisiIFF1aXQgd2hlbiBtZW51IHRyYW5zbGF0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLgorIgoraWYgZXhpc3RzKCJkaWRfbWVudV90cmFucyIpCisgICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX21lbnVfdHJhbnMgPSAxCisKK3NjcmlwdGVuY29kaW5nIGtvaTgtcgorCisiIFRvcAorbWVudXRyYW5zICZGaWxlCQkJCSbmwcrMCittZW51dHJhbnMgJkVkaXQJCQkJ8CbSwdfLwQorbWVudXRyYW5zICZUb29scwkJCSbpztPU0tXNxc7U2QorbWVudXRyYW5zICZTeW50YXgJCQkm88nO1MHL08nTCittZW51dHJhbnMgJkJ1ZmZlcnMJCQkm4tXGxdLZCittZW51dHJhbnMgJldpbmRvdwkJCSbvy87PCittZW51dHJhbnMgJkhlbHAJCQkJ8ybQ0sHXy8EKKyIKKyIKKyIKKyIgSGVscCBtZW51CittZW51dHJhbnMgJk92ZXJ2aWV3PFRhYj48RjE+CQkm78Laz9I8VGFiPjxGMT4KK21lbnV0cmFucyAmVXNlclwgTWFudWFsCQkJ8tXLz9fPJsTT1NfPXCDQz8zY2s/XwdTFzNEKK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcwkJJuvBy1wg3NTPXCDTxMXMwdTYXC5cLlwuCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCQkm8M/J08sKKyItLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZDcmVkaXRzCQkJJuLMwcfPxMHSzs/T1MkKK21lbnV0cmFucyBDbyZweWluZwkJCSbywdPQ0s/T1NLBzsXOycUKK21lbnV0cmFucyAmU3BvbnNvci9SZWdpc3RlcgkJ8M/Nzybd2C/yxcfJ09TSwcPJ0QorbWVudXRyYW5zIE8mcnBoYW5zCQkJJvPJ0s/U2QorIi0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJlZlcnNpb24JCQkm6c7Gz9LNwcPJ0Vwgz1wg0NLPx9LBzc3FCittZW51dHJhbnMgJkFib3V0CQkJJvrB09TB18vBCisiCisiCisiIEZpbGUgbWVudQorbWVudXRyYW5zICZPcGVuXC5cLlwuPFRhYj46ZQkJJu/Uy9LZ1NhcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAnwzybExczJ1NhcIM/Lzs9cLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CQkm7s/X2co8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCSb6wcvS2dTYPFRhYj46Y2xvc2UKKyItLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZTYXZlPFRhYj46dwkJCSbzz8jSwc7J1Ng8VGFiPjp3CittZW51dHJhbnMgU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2CfPPyNLBzsnU2FwgJsvBy1wuXC5cLjxUYWI+OnNhdgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCfPSJsHXzsnU2Fwg01wuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4J89LB187J1NhcINNcINDSyc3FzsXOycXNXCDawdAmzMHUy8lcLlwuXC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZQcmludAkJCe7BJtDF3sHUwdTYCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJ99kmyM/EXCDTXCDTz8jSwc7FzsnFzTxUYWI+OndxYQorbWVudXRyYW5zIEUmeGl0PFRhYj46cWEJCQkm99nIz8Q8VGFiPjpxYQorIgorIgorIiBFZGl0IG1lbnUKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCe8m1M3FzsnU2DxUYWI+dQorbWVudXRyYW5zICZSZWRvPFRhYj5eUgkJCfcmxdLO1dTYPFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQnwz9fUz9LJ1CbYPFRhYj5cLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgQ3UmdDxUYWI+Iit4CQkJJvfZ0sXawdTYPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJJuvP0MnSz9fB1Ng8VGFiPiIreQorbWVudXRyYW5zICZQYXN0ZTxUYWI+IitnUAkJ98smzMXJ1Ng8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQn3y8zFydTYXCDQxdLFJsQ8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQn3y8zFydTYXCDQzybTzMU8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCSb1xMHMydTYPFRhYj54CittZW51dHJhbnMgJlNlbGVjdFwgQWxsPFRhYj5nZ1ZHCQn3JtnExczJ1NhcINfTozxUYWI+Z2dWRworIi0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJkZpbmRcLlwuXC48VGFiPi8JCSbwz8nTy1wuXC5cLjxUYWI+LworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4J8M/J08tcIMlcICbawc3FzsFcLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuPFRhYj46JXMJ8M/J08tcIMlcICbawc3FzsFcLlwuXC48VGFiPjolcworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC48VGFiPjpzICAgICDwz8nTy1wgyVwgJtrBzcXOwVwuXC5cLjxUYWI+OnMKKyItLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zIFNldHRpbmdzXCAmV2luZG93CQnvy87PXCDOwdPU0s/Ky8lcICbP0MPJygorbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQkm58zPwsHM2M7ZxVwgzsHT1NLPysvJCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQnuwdPU0s/Ky8lcICbGwcrMz9cKK21lbnV0cmFucyBDJm9sb3JcIFNjaGVtZQkJJuPXxdTP18HRXCDTyMXNwQorbWVudXRyYW5zICZLZXltYXAJCQnywdPLzMHEy8FcIMvMJsHXycHU1dLZCittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkJ99nCz9JcICbb0snG1MFcLlwuXC4KKyI+Pj4tLS0tLS0tLS0tLS0tLS0tLSBFZGl0L0dsb2JhbCBzZXR0aW5ncworbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzIQkg8M/E09fF1MvBXCAmzsHKxMXOztnIXCDTz8/U18XU09TXyco8VGFiPjpzZXRcIGhscyEKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCQkgJvLFx8nT1NLPzsXawdfJ08nN2cpcINDPydPLPFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQkJIPDPy8Ha2dfB1NhcINDB0s7ZxVwgJtzMxc3FztTZPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCQkJIPPU0ibPy1wg18/L0tXHXCDL1dLTz9LBCittZW51dHJhbnMgJlZpcnR1YWxcIEVkaXQJCQkJIPfJ0ibU1cHM2M7PxVwg0sXEwcvUydLP18HOycUKK21lbnV0cmFucyBUb2dnbGVcIEluc2VydFwgJk1vZGU8VGFiPjpzZXRcIGltIQkJIPLF1snNXCAm99PUwdfLyTxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwIQkJICbzz9fNxdPUyc3P09TYXCDTXCBWaTxUYWI+OnNldFwgY3AhCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkJCQkgJvDV1NhcIMTM0Vwg0M/J08vBXCDGwcrMz9dcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJCQkg5sHKzNlcICbNxdTPy1wuXC5cLgorIgorbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCQkJICbpztPU0tXNxc7UwczYzsHRXCDQwc7FzNgKK21lbnV0cmFucyBUb2dnbGVcICZCb3R0b21cIFNjcm9sbGJhcgkJCSDwz8zP08FcINDSz8vS1dTLyVwg187JJtrVCittZW51dHJhbnMgVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyCQkJIPDPzM/TwVwg0NLPy9LV1MvJXCDTJszF18EKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCQkJIPDPzM/TwVwg0NLPy9LV1MvJXCDT0NImwdfBCisiPj4+LT4+Pi0tLS0tLS0tLS0tLS0gRWRpdC9HbG9iYWwgc2V0dGluZ3MvVmlydHVhbCBlZGl0CittZW51dHJhbnMgTmV2ZXIJCQkJCQkg99nLzMDexc7PCittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgkJCQkg8NLJXCDX2cTFzMXOyclcIMLMz8vBCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJCQkg91wg0sXWyc3FXCD309TB18vJCittZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CQkJCSDw0slcINfZxMXMxc7JyVwgwszPy8FcIMlcINdcINLF1snNxVwg99PUwdfLyQorbWVudXRyYW5zIEFsd2F5cwkJCQkJIPfLzMDexc7PXCDX08XHxMEKKyI+Pj4tLS0tLS0tLS0tLS0tLS0tLSBFZGl0L0ZpbGUgc2V0dGluZ3MKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQkgJu7VzcXSwcPJ0Vwg09TSz8s8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCQkg79TPwtLBJtbFzsnFXCDOxdfJxMnN2chcINPJzdfPzM/XPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQkgJvDF0sXOz9NcIMTMyc7O2chcINPU0s/LPFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCSDwxdLFzs/TXCAmw8XM2chcINPMz9c8VGFiPjpzZXRcIGxiciEKK21lbnV0cmFucyBUb2dnbGVcICZleHBhbmQtdGFiPFRhYj46c2V0XCBldCEJCSDw0s8mwsXM2Vwg183F09TPXCDUwcLVzNHDyck8VGFiPjpzZXRcIGV0IQorbWVudXRyYW5zIFRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEJCSDh19TPzcHUyd7F08vPxVwgxs/SzcHUydLP18HOycVcICbP1NPU1dDP1zxUYWI+OnNldFwgYWkhCittZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJCSDmz9LNwdTJ0s/Xwc7JxVwgz9TT1NXQz9dcINdcICbT1MnMxVwgQzxUYWI+OnNldFwgY2luIQorIj4+Pi0tLQorbWVudXRyYW5zICZTaGlmdHdpZHRoCQkJCQkg98XMySbeyc7BXCDP1NPU1dDBCittZW51dHJhbnMgU29mdFwgJlRhYnN0b3AJCQkJIPvJ0snOwVwgJtTBwtXM0cPJyQorbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJCQkgJvvJ0snOwVwg1MXL09TBXC5cLlwuCittZW51dHJhbnMgJkZpbGVcIEZvcm1hdFwuXC5cLgkJCQkgJubP0s3B1FwgxsHKzMFcLlwuXC4KKyIKKyIKKyIKKyIgVG9vbHMgbWVudQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JCQkm8MXSxcjPxFwgy1wgzcXUy8U8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkJCQkm98XSztXU2NPRXCDOwdrBxDxUYWI+XlQKK21lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCQkJ88/axMHU2FwgJsbBysxcIM3F1M/LCisiLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZGb2xkaW5nCQkJCQnywcLP1MFcINPPXCAm08vMwcTLwc3JCittZW51dHJhbnMgJkRpZmYJCQkJCQkm79TMyd7J0VwgKGRpZmYpCisiLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZQkJCQnrzybN0MnM0cPJ0TxUYWI+Om1ha2UKK21lbnV0cmFucyAmTGlzdFwgRXJyb3JzPFRhYj46Y2wJCQkJ89DJ08/LXCDPJtvJws/LPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEJCQnz0MnTz8tcINfTxSbIXCDP28nCz8tcIMlcINDSxcTV0NLF1sTFzsnKPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCQkJ88zFxNUmwN3B0Vwgz9vJwsvBPFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AJCQnwJtLFxNnE1d3B0Vwgz9vJwsvBPFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCQkJ4s/MxcVcINPUwdIm2cpcINPQydPPy1wgz9vJws/LPFRhYj46Y29sZAorbWVudXRyYW5zIE4mZXdlclwgTGlzdDxUYWI+OmNuZXcJCQniz8zFxVwg09fFJtbJylwg09DJ08/LXCDP28nCz8s8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCQkJ78smzs9cIM/bycLPyworbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCQkJCffZws/SXCAmy8/N0MnM0dTP0sEKKyItLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAkJCfAmxdLF18XT1MlcINdcIEhFWDxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJCQnwxdLF18XT1MlcIMkm2lwgSEVYPFRhYj46JSF4eGRcIC1yCisiPj4+LS0tLS0tLS0tLS0tLS0tLSBGb2xkcworbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppCQkJ98vML9fZy8xcICbTy8zBxMvJPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CQkJ79TL0tnU2Fwg09TSz8vVXCDTXCAmy9XS08/Sz808VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eAkJ79TL0tnU2FwgJtTPzNjLz1wg09TSz8vVXCDTXCDL1dLTz9LPzTxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCQkJ+sHL0tnU2FwgJsLPzNjbxVwg08vMwcTPyzxUYWI+em0KK21lbnV0cmFucyAmQ2xvc2VcIGFsbFwgZm9sZHM8VGFiPnpNCQkJ+sHL0tnU2FwgJtfTxVwg08vMwcTLyTxUYWI+ek0KK21lbnV0cmFucyAmT3BlblwgYWxsXCBmb2xkczxUYWI+elIJCQnv1MvSJtnU2Fwg19PFXCDTy8zBxMvJPFRhYj56UgorbWVudXRyYW5zIE8mcGVuXCBtb3JlXCBmb2xkczxUYWI+enIJCQnv1Msm0tnU2Fwgws/M2NvFXCDTy8zBxM/LPFRhYj56cgorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQkJCSbtxdTPxFwg08vMwcTPyworbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQkJCfPPJtrEwdTYXCDTy8zBxMvVPFRhYj56ZgorbWVudXRyYW5zICZEZWxldGVcIEZvbGQ8VGFiPnpkCQkJCfUmxMHMydTYXCDTy8zBxMvVPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECQkJ9cTBzMnU2Fwg19MmxVwg08vMwcTLyTxUYWI+ekQKK21lbnV0cmFucyBGb2xkXCBjb2x1bW5cICZ3aWR0aAkJCQkm+8nSyc7BXCDLz8zPzsvJXCDTy8zBxM/LCisiPj4+LT4+Pi0tLS0tLS0tLS0tIFRvb2xzL0ZvbGRzL0ZvbGQgTWV0aG9kCittZW51dHJhbnMgTSZhbnVhbAkJCQkJ99LVJt7O1cAKK21lbnV0cmFucyBJJm5kZW50CQkJCQnvJtTT1NXQCittZW51dHJhbnMgRSZ4cHJlc3Npb24JCQkJCSb32dLB1sXOycUKK21lbnV0cmFucyBNYSZya2VyCQkJCQkm7cHSy8XS2QorIj4+Pi0tLS0tLS0tLS0tLS0tLSBUb29scy9EaWZmCittZW51dHJhbnMgJlVwZGF0ZQkJCQkJ7ybCzs/XydTYCittZW51dHJhbnMgJkdldFwgQmxvY2sJCQkJCenazcXOydTYXCAm3NTP1FwgwtXGxdIKK21lbnV0cmFucyAmUHV0XCBCbG9jawkJCQkJ6drNxc7J1NhcICbE0tXHz8pcIMLVxsXSCisiPj4+LS0tLS0tLS0tLS0tLS0tIFRvb2xzL0RpZmYvRXJyb3Igd2luZG93CittZW51dHJhbnMgJlVwZGF0ZTxUYWI+OmN3aW4JCQkJ7ybCzs/XydTYPFRhYj46Y3dpbgorbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQkJCQkm+sHL0tnU2DxUYWI+OmNjbG9zZQorbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4JCQkJJu/Uy9LZ1Ng8VGFiPjpjb3BlbgorIgorIgorIiBTeW50YXggbWVudQorIgorbWVudXRyYW5zICZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51CQkJ8M/LwdrB1NhcIM3FzsBcIMTM0Vwg19nCz9LBXCDUydDBXCAmxsHKzMEKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seQkJCQkm6drNxc7R1NhcINTPzNjLz1wg2s7B3sXOycVcICdzeW50YXgnCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCQkJCenazcXO0dTYXCAm1MHL1sVcINrOwd7FzsnFXCAnZmlsZXR5cGUnCittZW51dHJhbnMgJk9mZgkJCQkJCSbv1MvMwN7J1NgKK21lbnV0cmFucyBBJnV0b21hdGljCQkJCQkm4dfUz83B1MnexdPLyQorbWVudXRyYW5zIG9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZQkJCffLzC/X2cvMXCDEzNFcICbc1M/Hz1wgxsHKzMEKK21lbnV0cmFucyBDbyZsb3JcIHRlc3QJCQkJCfDSz9fF0svBXCAmw9fF1M/XCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAkJCQnw0s/XxdLLwVwg0M/EJtPXxdTLyQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSFRNTAkJCQnzJsTFzMHU2FwgSFRNTFwg01wg0M/E09fF1MvPygorIgorIgorIiBCdWZmZXJzIG1lbnUKKyIKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQkJCQnvJsLOz9fJ1NhcIM3FzsAKK21lbnV0cmFucyBEZWxldGUJCQkJCfUmxMHMydTYCittZW51dHJhbnMgJkFsdGVybmF0ZQkJCQkJJvPP08XEzsnKCittZW51dHJhbnMgJk5leHQJCQkJCQnzJszFxNXA3cnKCittZW51dHJhbnMgJlByZXZpb3VzCQkJCQkm8NLFxNnE1d3JygorbWVudXRyYW5zIFtOb1wgRmlsZV0JCQkJCVvuxdRcIMbByszBXQorIgorIgorIiBXaW5kb3cgbWVudQorIgorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJCQkJJu7P18/FXCDPy87PPFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJCQkm8sHaxMXMydTYXCDPy87PPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCQkJ79TL0tnU2FwgJtPP08XEzsnKXCDGwcrMXCDXXCDOz9fPzVwgz8vOxTxUYWI+XldeXgorbWVudXRyYW5zIFNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2CQkJ8sHaxMXMydTYXCDQz1wgJtfF0tTJy8HMyTxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcgkJCe/Uy9LZ1NhcINDSz9fPxM7Jy1wg0M9cICbGwcrMz9fPylwg08nT1MXNxQorIgorbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCQkJCSb6wcvS2dTYXCDc1M9cIM/Lzs88VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwkJCfrBy9LZ1NhcICbP09TBzNjO2cVcIM/LzsE8VGFiPl5XbworIgorbWVudXRyYW5zIE1vdmVcICZUbwkJCQkJJvDF0sXNxdPUydTYCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJCQnzxNfJztXU2Fwg19fF0ibIPFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IJCQkJ88TXyc7V1NhcINcmzsnaPFRhYj5eV3IKKyIKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkJCQnvJsTJzsHLz9fZylwg0sHazcXSPFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkJCQntwcvTyc3BzNjOwdFcINcm2dPP1ME8VGFiPl5XXworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXwkJCQntyc7JzcHM2M7B0Vwg19nTzybUwTxUYWI+XlcxXworbWVudXRyYW5zIE1heFwgJldpZHRoPFRhYj5eV1x8CQkJCe3By9PJzcHM2M7B0VwgJtvJ0snOwTxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJCQntyc7JzcHMJtjOwdFcINvJ0snOwTxUYWI+XlcxXHwKKyI+Pj4tLS0tLS0tLS0tLS0tLS0tLSBXaW5kb3cvTW92ZSBUbworbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJCQkJ7sEm18XSyDxUYWI+XldLCittZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCQkJCfcmzsnaPFRhYj5eV0oKK21lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICQkJCfcmzMXXzzxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCQkJ9ybQ0sHXzzxUYWI+XldMCisiCisiCisiIFRoZSBwb3B1cCBtZW51CisiCisiCittZW51dHJhbnMgJlVuZG8JCQkJCQnvJtTNxc7J1NgKK21lbnV0cmFucyBDdSZ0CQkJCQkJJvfZ0sXawdTYCittZW51dHJhbnMgJkNvcHkJCQkJCQkm68/QydLP18HU2AorbWVudXRyYW5zICZQYXN0ZQkJCQkJ98smzMXJ1NgKK21lbnV0cmFucyAmRGVsZXRlCQkJCQkm9cTBzMnU2AorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlCQkJCeLMz8vP18/FXCDX2cTFzMXOycUKK21lbnV0cmFucyBTZWxlY3RcICZXb3JkCQkJCQn32cTFzMnU2FwgJtPMz9fPCittZW51dHJhbnMgU2VsZWN0XCAmTGluZQkJCQkJ99nExczJ1NhcINPUJtLPy9UKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawkJCQn32cTFzMnU2FwgJsLMz8sKK21lbnV0cmFucyBTZWxlY3RcICZBbGwJCQkJCfcm2cTFzMnU2FwgJtfToworIgorIiBUaGUgR1VJIHRvb2xiYXIKKyIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCQkJCe/Uy9LZ1NggxsHKzAorICAgIHRtZW51IFRvb2xCYXIuU2F2ZQkJCQkJ88/I0sHOydTYIMbByswKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJCQkJ88/I0sHOydTYINfTxSDGwcrM2QorICAgIHRtZW51IFRvb2xCYXIuUHJpbnQJCQkJCe7B0MXewdTB1NgKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCQkJCe/UzcXOydTYCisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQkJCQn3xdLO1dTYCisgICAgdG1lbnUgVG9vbEJhci5DdXQJCQkJCffZ0sXawdTYCisgICAgdG1lbnUgVG9vbEJhci5Db3B5CQkJCQnrz9DJ0s/XwdTYCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJCQkJ98vMxcnU2AorICAgIHRtZW51IFRvb2xCYXIuRmluZAkJCQkJ8M/J08suLi4KKyAgICB0bWVudSBUb29sQmFyLkZpbmROZXh0CQkJCfDPydPLINPMxcTVwN3Fx88g08/P1NfF1NPU18nRCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldgkJCQnwz8nTyyDQ0sXE2cTV3cXHzyDTz8/U18XU09TXydEKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJCQkJ+sHNxc7J1NguLi4KKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCQkJCfrBx9LV2snU2CDTxcHO0yDSxcTBy9TJ0s/Xwc7J0QorICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24JCQkJ88/I0sHOydTYINPFwc7TINLFxMHL1MnSz9fBzsnRCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJCQkJ99nQz8zOydTYINPDxc7B0snKIFZpbQorICAgIHRtZW51IFRvb2xCYXIuTWFrZQkJCQkJ68/N0MnM0cPJ0QorICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCQkJCe/Cz8zP3svBCisgICAgdG1lbnUgVG9vbEJhci5SdW5DdGFncwkJCQnzz9rEwdTYIMbByswgzcXUz8sKKyAgICB0bWVudSBUb29sQmFyLlRhZ0p1bXAJCQkJ8MXSxcrUySDLIM3F1MvFCisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQkJCQnz0NLB18vBCisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscAkJCQnuwcrUySDT0NLB18vVCisgIGVuZGZ1bgorZW5kaWYKKyIKKyIKKyIgRGlhbG9nIHRleHRzCisiCisiIEZpbmQgaW4gaGVscCBkaWFsb2cKKyIKK2xldCBnOm1lbnV0cmFuc19oZWxwX2RpYWxvZyA9ICL318XEydTFIMvPzcHOxNUgyczJINPMz9fPIMTM0SDQz8nTy8E6XG5cbuTPwsHX2NTFIGlfIMTM0SDQz8nTy8Egy8/Nwc7EINLF1snNwSD309TB18vJICjOwdDSyc3F0iwgaV9DVFJMLVgpXG7kz8LB19jUxSBjXyDEzNEg0M/J08vBIMvPzcHOxCDvwtnezs/HzyDSxdbJzcEgKM7B0NLJzcXSLCDTXzxEZWw+KVxu5M/CwdfY1MUgJyDEzNEg0M/J08vBINPQ0sHXy8kg0M8gz9DDyckgKM7B0NLJzcXSLCAnc2hpZnR3aWR0aCcpIgorIgorIiBTZWFyaCBwYXRoIGRpYWxvZworIgorbGV0IGc6bWVudXRyYW5zX3BhdGhfZGlhbG9nID0gIvXLwdbJ1MUg0NXU2CDEzNEg0M/J08vBIMbByszP1y5cbunNxc7BIMvB1MHMz8fP1yDSwdrExczRwNTT0SDawdDR1NnNyS4iCisiCisiIFRhZyBmaWxlcyBkaWFsb2cKKyIKK2xldCBnOm1lbnV0cmFuc190YWdzX2RpYWxvZyA9ICL318XEydTFIMnNxc7BIMbByszP1yDNxdTPyyAo3sXSxdog2sHQ0dTVwCkuXG4iCisiCisiIFRleHQgd2lkdGggZGlhbG9nCisiCitsZXQgZzptZW51dHJhbnNfdGV4dHdpZHRoX2RpYWxvZyA9ICL318XEydTFINvJ0snO1SDUxcvT1MEgxMzRIMbP0s3B1MnSz9fBzsnRLlxu5MzRIM/UzcXO2SDGz9LNwdTJ0s/Xwc7J0SDX18XEydTFIDAuIgorIgorIiBGaWxlIGZvcm1hdCBkaWFsb2cKKyIKK2xldCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2RpYWxvZyA9ICL32cLF0snUxSDGz9LNwdQgxsHKzMEuIgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfY2hvaWNlcyA9ICImVW5peFxuJkRvc1xuJk1hY1xu7ybUzcXOwSIKKyIKK2xldCBtZW51dHJhbnNfbm9fZmlsZSA9ICJb7sXUIMbByszBXSIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3J1X3J1LnV0Zi04LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X3J1X3J1LnV0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGIwYjJkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfcnVfcnUudXRmLTgudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJUnVzc2lhbgorCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9ydV9ydS52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3J1X3J1LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X3J1X3J1LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDcxZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfcnVfcnUudmltCkBAIC0wLDAgKzEsMjk2IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglSdXNzaWFuCisiIE1haW50YWluZXI6CQl2YXNzaWx5IHJhZ29zaW4gPHZyclthdF11c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisiIExhc3QgQ2hhbmdlOgkJMjYgQXByIDIwMDQKKyIgVVJMOgkJCWN2czovL2N2cy5zZi5uZXQ6L2N2c3Jvb3QvcnV2aW0vZXh0cmFzL21lbnUvbWVudV9ydV9ydS52aW0KKyIKKyIgJElkJAorIgorIiBBZG9wdGVkIGZvciBSdVZpbSBwcm9qZWN0IGJ5IFZhc3NpbHkgUmFnb3Npbi4KKyIgRmlyc3QgdHJhbnNsYXRpb246IFRpbSBBbGV4ZWV2c2t5IDxyZWFsdGltIFthdF0gbWFpbC5ydT4sCisiIGJhc2VkIG9uIHVrcmFpbmlhbiB0cmFuc2xhdGlvbiBieSBCb2hkYW4gVmxhc3l1ayA8Ym9oZGFuQHZzdHUuZWR1LnVhPgorIgorIgorIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KKyIKK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorICAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCitzY3JpcHRlbmNvZGluZyB1dGYtOAorCisiIFRvcAorbWVudXRyYW5zICZGaWxlCQkJCSbQpNCw0LnQuworbWVudXRyYW5zICZFZGl0CQkJCdCfJtGA0LDQstC60LAKK21lbnV0cmFucyAmVG9vbHMJCQkm0JjQvdGB0YLRgNGD0LzQtdC90YLRiworbWVudXRyYW5zICZTeW50YXgJCQkm0KHQuNC90YLQsNC60YHQuNGBCittZW51dHJhbnMgJkJ1ZmZlcnMJCQkm0JHRg9GE0LXRgNGLCittZW51dHJhbnMgJldpbmRvdwkJCSbQntC60L3QvgorbWVudXRyYW5zICZIZWxwCQkJCdChJtC/0YDQsNCy0LrQsAorIgorIgorIgorIiBIZWxwIG1lbnUKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4JCSbQntCx0LfQvtGAPFRhYj48RjE+CittZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJCdCg0YPQutC+0LLQvibQtNGB0YLQstC+XCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8KK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcwkJJtCa0LDQulwg0Y3RgtC+XCDRgdC00LXQu9Cw0YLRjFwuXC5cLgorbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJJtCf0L7QuNGB0LoKKyItLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZDcmVkaXRzCQkJJtCR0LvQsNCz0L7QtNCw0YDQvdC+0YHRgtC4CittZW51dHJhbnMgQ28mcHlpbmcJCQkm0KDQsNGB0L/RgNC+0YHRgtGA0LDQvdC10L3QuNC1CittZW51dHJhbnMgJlNwb25zb3IvUmVnaXN0ZXIJCdCf0L7QvNC+JtGJ0Ywv0KDQtdCz0LjRgdGC0YDQsNGG0LjRjworbWVudXRyYW5zIE8mcnBoYW5zCQkJJtCh0LjRgNC+0YLRiworIi0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJlZlcnNpb24JCQkm0JjQvdGE0L7RgNC80LDRhtC40Y9cINC+XCDQv9GA0L7Qs9GA0LDQvNC80LUKK21lbnV0cmFucyAmQWJvdXQJCQkm0JfQsNGB0YLQsNCy0LrQsAorIgorIgorIiBGaWxlIG1lbnUKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCSbQntGC0LrRgNGL0YLRjFwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCdCf0L4m0LTQtdC70LjRgtGMXCDQvtC60L3QvlwuXC5cLjxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCSbQndC+0LLRi9C5PFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQkm0JfQsNC60YDRi9GC0Yw8VGFiPjpjbG9zZQorIi0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJJtCh0L7RhdGA0LDQvdC40YLRjDxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJ0KHQvtGF0YDQsNC90LjRgtGMXCAm0LrQsNC6XC5cLlwuPFRhYj46c2F2CisiLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4J0KHRgCbQsNCy0L3QuNGC0YxcINGBXC5cLlwuCittZW51dHJhbnMgU3BsaXRcIFBhdGNoZWRcICZCeVwuXC5cLgnQodGA0LDQstC90LjRgtGMXCDRgVwg0L/RgNC40LzQtdC90LXQvdC40LXQvFwg0LfQsNC/JtC70LDRgtC60LhcLlwuXC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZQcmludAkJCdCd0LAm0L/QtdGH0LDRgtCw0YLRjAorbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJCdCS0Ysm0YXQvtC0XCDRgVwg0YHQvtGF0YDQsNC90LXQvdC40LXQvDxUYWI+OndxYQorbWVudXRyYW5zIEUmeGl0PFRhYj46cWEJCQkm0JLRi9GF0L7QtDxUYWI+OnFhCisiCisiCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZVbmRvPFRhYj51CQkJ0J4m0YLQvNC10L3QuNGC0Yw8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQnQkibQtdGA0L3Rg9GC0Yw8VGFiPl5SCittZW51dHJhbnMgUmVwJmVhdDxUYWI+XC4JCdCf0L7QstGC0L7RgNC40YIm0Yw8VGFiPlwuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCQkm0JLRi9GA0LXQt9Cw0YLRjDxUYWI+Iit4CittZW51dHJhbnMgJkNvcHk8VGFiPiIreQkJCSbQmtC+0L/QuNGA0L7QstCw0YLRjDxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQnQktC6JtC70LXQuNGC0Yw8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQnQktC60LvQtdC40YLRjFwg0L/QtdGA0LUm0LQ8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQnQktC60LvQtdC40YLRjFwg0L/QvibRgdC70LU8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCSbQo9C00LDQu9C40YLRjDxUYWI+eAorbWVudXRyYW5zICZTZWxlY3RcIEFsbDxUYWI+Z2dWRwkJ0JIm0YvQtNC10LvQuNGC0YxcINCy0YHRkTxUYWI+Z2dWRworIi0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJkZpbmRcLlwuXC48VGFiPi8JCSbQn9C+0LjRgdC6XC5cLlwuPFRhYj4vCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZVwuXC5cLiAgICAg0J/QvtC40YHQulwg0LhcICbQt9Cw0LzQtdC90LBcLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuPFRhYj46JXMgICAgINCf0L7QuNGB0LpcINC4XCAm0LfQsNC80LXQvdCwXC5cLlwuPFRhYj46JXMKK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuPFRhYj46cyAgICAg0J/QvtC40YHQulwg0LhcICbQt9Cw0LzQtdC90LBcLlwuXC48VGFiPjpzCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJ0J7QutC90L5cINC90LDRgdGC0YDQvtC50LrQuFwgJtC+0L/RhtC40LkKK21lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkJJtCT0LvQvtCx0LDQu9GM0L3Ri9C1XCDQvdCw0YHRgtGA0L7QudC60LgKK21lbnV0cmFucyBGJmlsZVwgU2V0dGluZ3MJCdCd0LDRgdGC0YDQvtC50LrQuFwgJtGE0LDQudC70L7QsgorbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQkm0KbQstC10YLQvtCy0LDRj1wg0YHRhdC10LzQsAorbWVudXRyYW5zICZLZXltYXAJCQnQoNCw0YHQutC70LDQtNC60LBcINC60Lsm0LDQstC40LDRgtGD0YDRiworbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCdCS0YvQsdC+0YBcICbRiNGA0LjRhNGC0LBcLlwuXC4KKyI+Pj4tLS0tLS0tLS0tLS0tLS0tLSBFZGl0L0dsb2JhbCBzZXR0aW5ncworbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzISAgICAg0J/QvtC00YHQstC10YLQutCwXCAm0L3QsNC50LTQtdC90L3Ri9GFXCDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Lk8VGFiPjpzZXRcIGhscyEKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCQkgJtCg0LXQs9C40YHRgtGA0L7QvdC10LfQsNCy0LjRgdC40LzRi9C5XCDQv9C+0LjRgdC6PFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQkJINCf0L7QutCw0LfRi9Cy0LDRgtGMXCDQv9Cw0YDQvdGL0LVcICbRjdC70LXQvNC10L3RgtGLPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCQkJINCh0YLRgCbQvtC6XCDQstC+0LrRgNGD0LNcINC60YPRgNGB0L7RgNCwCittZW51dHJhbnMgJlZpcnR1YWxcIEVkaXQJCQkJINCS0LjRgCbRgtGD0LDQu9GM0L3QvtC1XCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1CittZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJCSDQoNC10LbQuNC8XCAm0JLRgdGC0LDQstC60Lg8VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEJCSAm0KHQvtCy0LzQtdGB0YLQuNC80L7RgdGC0YxcINGBXCBWaTxUYWI+OnNldFwgY3AhCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkJCQkgJtCf0YPRgtGMXCDQtNC70Y9cINC/0L7QuNGB0LrQsFwg0YTQsNC50LvQvtCyXC5cLlwuCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4JCQkJINCk0LDQudC70YtcICbQvNC10YLQvtC6XC5cLlwuCisiCittZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhcgkJCQkgJtCY0L3RgdGC0YDRg9C80LXQvdGC0LDQu9GM0L3QsNGPXCDQv9Cw0L3QtdC70YwKK21lbnV0cmFucyBUb2dnbGVcICZCb3R0b21cIFNjcm9sbGJhcgkJCSDQn9C+0LvQvtGB0LBcINC/0YDQvtC60YDRg9GC0LrQuFwg0LLQvdC4JtC30YMKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJCQkg0J/QvtC70L7RgdCwXCDQv9GA0L7QutGA0YPRgtC60LhcINGBJtC70LXQstCwCittZW51dHJhbnMgVG9nZ2xlXCAmUmlnaHRcIFNjcm9sbGJhcgkJCSDQn9C+0LvQvtGB0LBcINC/0YDQvtC60YDRg9GC0LrQuFwg0YHQv9GAJtCw0LLQsAorIj4+Pi0+Pj4tLS0tLS0tLS0tLS0tIEVkaXQvR2xvYmFsIHNldHRpbmdzL1ZpcnR1YWwgZWRpdAorbWVudXRyYW5zIE5ldmVyCQkJCQkJINCS0YvQutC70Y7Rh9C10L3QvgorbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCQkJINCf0YDQuFwg0LLRi9C00LXQu9C10L3QuNC4XCDQsdC70L7QutCwCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJCQkg0JJcINGA0LXQttC40LzQtVwg0JLRgdGC0LDQstC60LgKK21lbnV0cmFucyBCbG9ja1wgYW5kXCBJbnNlcnQJCQkJINCf0YDQuFwg0LLRi9C00LXQu9C10L3QuNC4XCDQsdC70L7QutCwXCDQuFwg0LJcINGA0LXQttC40LzQtVwg0JLRgdGC0LDQstC60LgKK21lbnV0cmFucyBBbHdheXMJCQkJCSDQktC60LvRjtGH0LXQvdC+XCDQstGB0LXQs9C00LAKKyI+Pj4tLS0tLS0tLS0tLS0tLS0tLSBFZGl0L0ZpbGUgc2V0dGluZ3MKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQkgJtCd0YPQvNC10YDQsNGG0LjRj1wg0YHRgtGA0L7QujxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCSDQntGC0L7QsdGA0LAm0LbQtdC90LjQtVwg0L3QtdCy0LjQtNC40LzRi9GFXCDRgdC40LzQstC+0LvQvtCyPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQkgJtCf0LXRgNC10L3QvtGBXCDQtNC70LjQvdC90YvRhVwg0YHRgtGA0L7QujxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyIQkg0J/QtdGA0LXQvdC+0YFcICbRhtC10LvRi9GFXCDRgdC70L7QsjxUYWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJINCf0YDQvibQsdC10LvRi1wg0LLQvNC10YHRgtC+XCDRgtCw0LHRg9C70Y/RhtC40Lg8VGFiPjpzZXRcIGV0IQorbWVudXRyYW5zIFRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEJCSDQkNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtC1XCDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1XCAm0L7RgtGB0YLRg9C/0L7QsjxUYWI+OnNldFwgYWkhCittZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJCSDQpNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1XCDQvtGC0YHRgtGD0L/QvtCyXCDQslwgJtGB0YLQuNC70LVcIEM8VGFiPjpzZXRcIGNpbiEKKyI+Pj4tLS0KK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJCQkJINCS0LXQu9C4JtGH0LjQvdCwXCDQvtGC0YHRgtGD0L/QsAorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQkJCSDQqNC40YDQuNC90LBcICbRgtCw0LHRg9C70Y/RhtC40LgKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JCQkJICbQqNC40YDQuNC90LBcINGC0LXQutGB0YLQsFwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkJICbQpNC+0YDQvNCw0YJcINGE0LDQudC70LBcLlwuXC4KKyIKKyIKKyIKKyIgVG9vbHMgbWVudQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JCQkm0J/QtdGA0LXRhdC+0LRcINC6XCDQvNC10YLQutC1PFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJCQkJJtCS0LXRgNC90YPRgtGM0YHRj1wg0L3QsNC30LDQtDxUYWI+XlQKK21lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCQkJ0KHQvtC30LTQsNGC0YxcICbRhNCw0LnQu1wg0LzQtdGC0L7QugorIi0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmRm9sZGluZwkJCQkJ0KDQsNCx0L7RgtCwXCDRgdC+XCAm0YHQutC70LDQtNC60LDQvNC4CittZW51dHJhbnMgJkRpZmYJCQkJCQkm0J7RgtC70LjRh9C40Y9cIChkaWZmKQorIi0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCQkJ0JrQvibQvNC/0LjQu9GP0YbQuNGPPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJCQnQodC/0LjRgdC+0LpcINC+JtGI0LjQsdC+0Lo8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQkJCdCh0L/QuNGB0L7Qulwg0LLRgdC1JtGFXCDQvtGI0LjQsdC+0LpcINC4XCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC5PFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCQkJ0KHQu9C10LTRgybRjtGJ0LDRj1wg0L7RiNC40LHQutCwPFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AJCQnQnybRgNC10LTRi9C00YPRidCw0Y9cINC+0YjQuNCx0LrQsDxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAkJCdCR0L7Qu9C10LVcINGB0YLQsNGAJtGL0LlcINGB0L/QuNGB0L7Qulwg0L7RiNC40LHQvtC6PFRhYj46Y29sZAorbWVudXRyYW5zIE4mZXdlclwgTGlzdDxUYWI+OmNuZXcJCQnQkdC+0LvQtdC1XCDRgdCy0LUm0LbQuNC5XCDRgdC/0LjRgdC+0LpcINC+0YjQuNCx0L7QujxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdwkJCQnQntC6JtC90L5cINC+0YjQuNCx0L7QugorbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCQkJCdCS0YvQsdC+0YBcICbQutC+0LzQv9C40LvRj9GC0L7RgNCwCisiLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJCQnQnybQtdGA0LXQstC10YHRgtC4XCDQslwgSEVYPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtcgkJCdCf0LXRgNC10LLQtdGB0YLQuFwg0Lgm0LdcIEhFWDxUYWI+OiUheHhkXCAtcgorIj4+Pi0tLS0tLS0tLS0tLS0tLS0gRm9sZHMKK21lbnV0cmFucyAmRW5hYmxlL0Rpc2FibGVcIGZvbGRzPFRhYj56aQkJCdCS0LrQuy/QstGL0LrQu1wgJtGB0LrQu9Cw0LTQutC4PFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CQkJ0J7RgtC60YDRi9GC0YxcINGB0YLRgNC+0LrRg1wg0YFcICbQutGD0YDRgdC+0YDQvtC8PFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJCdCe0YLQutGA0YvRgtGMXCAm0YLQvtC70YzQutC+XCDRgdGC0YDQvtC60YNcINGBXCDQutGD0YDRgdC+0YDQvtC8PFRhYj56TXp4CittZW51dHJhbnMgQyZsb3NlXCBtb3JlXCBmb2xkczxUYWI+em0JCQnQl9Cw0LrRgNGL0YLRjFwgJtCx0L7Qu9GM0YjQtVwg0YHQutC70LDQtNC+0Lo8VGFiPnptCittZW51dHJhbnMgJkNsb3NlXCBhbGxcIGZvbGRzPFRhYj56TQkJCdCX0LDQutGA0YvRgtGMXCAm0LLRgdC1XCDRgdC60LvQsNC00LrQuDxUYWI+ek0KK21lbnV0cmFucyAmT3BlblwgYWxsXCBmb2xkczxUYWI+elIJCQnQntGC0LrRgCbRi9GC0YxcINCy0YHQtVwg0YHQutC70LDQtNC60Lg8VGFiPnpSCittZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cgkJCdCe0YLQuibRgNGL0YLRjFwg0LHQvtC70YzRiNC1XCDRgdC60LvQsNC00L7QujxUYWI+enIKK21lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkJCQkm0JzQtdGC0L7QtFwg0YHQutC70LDQtNC+0LoKK21lbnV0cmFucyBDcmVhdGVcICZGb2xkPFRhYj56ZgkJCQnQodC+JtC30LTQsNGC0YxcINGB0LrQu9Cw0LTQutGDPFRhYj56ZgorbWVudXRyYW5zICZEZWxldGVcIEZvbGQ8VGFiPnpkCQkJCdCjJtC00LDQu9C40YLRjFwg0YHQutC70LDQtNC60YM8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJCQnQo9C00LDQu9C40YLRjFwg0LLRgSbQtVwg0YHQutC70LDQtNC60Lg8VGFiPnpECittZW51dHJhbnMgRm9sZFwgY29sJnVtblwgd2lkdGgJCQkJJtCo0LjRgNC40L3QsFwg0LrQvtC70L7QvdC60LhcINGB0LrQu9Cw0LTQvtC6CisiPj4+LT4+Pi0tLS0tLS0tLS0tIFRvb2xzL0ZvbGRzL0ZvbGQgTWV0aG9kCittZW51dHJhbnMgTSZhbnVhbAkJCQkJ0JLRgNGDJtGH0L3Rg9GOCittZW51dHJhbnMgSSZuZGVudAkJCQkJ0J4m0YLRgdGC0YPQvworbWVudXRyYW5zIEUmeHByZXNzaW9uCQkJCQkm0JLRi9GA0LDQttC10L3QuNC1CittZW51dHJhbnMgUyZ5bnRheAkJCQkJJtCh0LjQvdGC0LDQutGB0LjRgQorbWVudXRyYW5zIE1hJnJrZXIJCQkJCSbQnNCw0YDQutC10YDRiworIj4+Pi0tLS0tLS0tLS0tLS0tLSBUb29scy9EaWZmCittZW51dHJhbnMgJlVwZGF0ZQkJCQkJ0J4m0LHQvdC+0LLQuNGC0YwKK21lbnV0cmFucyAmR2V0XCBCbG9jawkJCQkJ0JjQt9C80LXQvdC40YLRjFwgJtGN0YLQvtGCXCDQsdGD0YTQtdGACittZW51dHJhbnMgJlB1dFwgQmxvY2sJCQkJCdCY0LfQvNC10L3QuNGC0YxcICbQtNGA0YPQs9C+0LlcINCx0YPRhNC10YAKKyI+Pj4tLS0tLS0tLS0tLS0tLS0gVG9vbHMvRGlmZi9FcnJvciB3aW5kb3cKK21lbnV0cmFucyAmVXBkYXRlPFRhYj46Y3dpbgkJCQnQnibQsdC90L7QstC40YLRjDxUYWI+OmN3aW4KK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjY2xvc2UJCQkJJtCX0LDQutGA0YvRgtGMPFRhYj46Y2Nsb3NlCittZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbgkJCQkm0J7RgtC60YDRi9GC0Yw8VGFiPjpjb3BlbgorIgorIgorIiBTeW50YXggbWVudQorIgorbWVudXRyYW5zICZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51CQkJ0J/QvtC60LDQt9Cw0YLRjFwg0LzQtdC90Y5cINC00LvRj1wg0LLRi9Cx0L7RgNCwXCDRgtC40L/QsFwgJtGE0LDQudC70LAKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seQkJCQkm0JjQt9C80LXQvdGP0YLRjFwg0YLQvtC70YzQutC+XCDQt9C90LDRh9C10L3QuNC1XCAnc3ludGF4JworbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwkJCQnQmNC30LzQtdC90Y/RgtGMXCAm0YLQsNC60LbQtVwg0LfQvdCw0YfQtdC90LjQtVwgJ2ZpbGV0eXBlJworbWVudXRyYW5zICZPZmYJCQkJCQkm0J7RgtC60LvRjtGH0LjRgtGMCittZW51dHJhbnMgJk1hbnVhbAkJCQkJ0JLRgNGDJtGH0L3Rg9GOCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJCQkJJtCQ0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4CittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCQkJ0JLQutC7L9Cy0YvQutC7XCDQtNC70Y9cICbRjdGC0L7Qs9C+XCDRhNCw0LnQu9CwCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQkJCQnQn9GA0L7QstC10YDQutCwXCAm0YbQstC10YLQvtCyCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAkJCQnQn9GA0L7QstC10YDQutCwXCDQv9C+0LQm0YHQstC10YLQutC4CittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCQkJCdChJtC00LXQu9Cw0YLRjFwgSFRNTFwg0YFcINC/0L7QtNGB0LLQtdGC0LrQvtC5CisiCisiCisiIEJ1ZmZlcnMgbWVudQorIgorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51CQkJCdCeJtCx0L3QvtCy0LjRgtGMXCDQvNC10L3RjgorbWVudXRyYW5zIERlbGV0ZQkJCQkJ0KMm0LTQsNC70LjRgtGMCittZW51dHJhbnMgJkFsdGVybmF0ZQkJCQkJJtCh0L7RgdC10LTQvdC40LkKK21lbnV0cmFucyAmTmV4dAkJCQkJCdChJtC70LXQtNGD0Y7RidC40LkKK21lbnV0cmFucyAmUHJldmlvdXMJCQkJCSbQn9GA0LXQtNGL0LTRg9GJ0LjQuQorbWVudXRyYW5zIFtOb1wgRmlsZV0JCQkJCVvQndC10YJcINGE0LDQudC70LBdCisiCisiCisiIFdpbmRvdyBtZW51CisiCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJCQkm0J3QvtCy0L7QtVwg0L7QutC90L48VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQkJCSbQoNCw0LfQtNC10LvQuNGC0YxcINC+0LrQvdC+PFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCQkJ0J7RgtC60YDRi9GC0YxcICbRgdC+0YHQtdC00L3QuNC5XCDRhNCw0LnQu1wg0LJcINC90L7QstC+0LxcINC+0LrQvdC1PFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJCQnQoNCw0LfQtNC10LvQuNGC0YxcINC/0L5cICbQstC10YDRgtC40LrQsNC70Lg8VGFiPl5XdgorbWVudXRyYW5zIFNwbGl0XCBGaWxlXCBFJnhwbG9yZXIJCQnQntGC0LrRgNGL0YLRjFwg0L/RgNC+0LLQvtC00L3QuNC6XCDQv9C+XCAm0YTQsNC50LvQvtCy0L7QuVwg0YHQuNGB0YLQtdC80LUKKyIKK21lbnV0cmFucyAmQ2xvc2U8VGFiPl5XYwkJCQkm0JfQsNC60YDRi9GC0YxcINGN0YLQvlwg0L7QutC90L48VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwkJCdCX0LDQutGA0YvRgtGMXCAm0L7RgdGC0LDQu9GM0L3Ri9C1XCDQvtC60L3QsDxUYWI+XldvCisiCittZW51dHJhbnMgTW92ZVwgJlRvCQkJCQkm0J/QtdGA0LXQvNC10YHRgtC40YLRjAorbWVudXRyYW5zIFJvdGF0ZVwgJlVwPFRhYj5eV1IJCQkJ0KHQtNCy0LjQvdGD0YLRjFwg0LLQstC10YAm0YU8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJCQnQodC00LLQuNC90YPRgtGMXCDQsibQvdC40Lc8VGFiPl5XcgorIgorbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CQkJCdCeJtC00LjQvdCw0LrQvtCy0YvQuVwg0YDQsNC30LzQtdGAPFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkJCQnQnNCw0LrRgdC40LzQsNC70YzQvdCw0Y9cINCyJtGL0YHQvtGC0LA8VGFiPl5XXworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXwkJCQnQnNC40L3QuNC80LDQu9GM0L3QsNGPXCDQstGL0YHQvibRgtCwPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCQkJ0JzQsNC60YHQuNC80LDQu9GM0L3QsNGPXCAm0YjQuNGA0LjQvdCwPFRhYj5eV1x8CittZW51dHJhbnMgTWluXCBXaWR0Jmg8VGFiPl5XMVx8CQkJCdCc0LjQvdC40LzQsNC7JtGM0L3QsNGPXCDRiNC40YDQuNC90LA8VGFiPl5XMVx8CisiPj4+LS0tLS0tLS0tLS0tLS0tLS0gV2luZG93L01vdmUgVG8KK21lbnV0cmFucyAmVG9wPFRhYj5eV0sJCQkJCdCd0LAm0LLQtdGA0YU8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJCQnQkibQvdC40Lc8VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJCQkJ0JIm0LvQtdCy0L48VGFiPl5XSAorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCQkJCdCSJtC/0YDQsNCy0L48VGFiPl5XTAorIgorIgorIiBUaGUgcG9wdXAgbWVudQorIgorIgorbWVudXRyYW5zICZVbmRvCQkJCQkJ0J4m0YLQvNC10L3QuNGC0YwKK21lbnV0cmFucyBDdSZ0CQkJCQkJJtCS0YvRgNC10LfQsNGC0YwKK21lbnV0cmFucyAmQ29weQkJCQkJCSbQmtC+0L/QuNGA0L7QstCw0YLRjAorbWVudXRyYW5zICZQYXN0ZQkJCQkJ0JLQuibQu9C10LjRgtGMCittZW51dHJhbnMgJkRlbGV0ZQkJCQkJJtCj0LTQsNC70LjRgtGMCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJCQkJ0JHQu9C+0LrQvtCy0L7QtVwg0LLRi9C00LXQu9C10L3QuNC1CittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJCQkJ0JLRi9C00LXQu9C40YLRjFwgJtGB0LvQvtCy0L4KK21lbnV0cmFucyBTZWxlY3RcICZMaW5lCQkJCQnQktGL0LTQtdC70LjRgtGMXCDRgdGCJtGA0L7QutGDCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJCQkJ0JLRi9C00LXQu9C40YLRjFwgJtCx0LvQvtC6CittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQkJCQnQkibRi9C00LXQu9C40YLRjFwgJtCy0YHRkQorIgorIiBUaGUgR1VJIHRvb2xiYXIKKyIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCQkJCdCe0YLQutGA0YvRgtGMINGE0LDQudC7CisgICAgdG1lbnUgVG9vbEJhci5TYXZlCQkJCQnQodC+0YXRgNCw0L3QuNGC0Ywg0YTQsNC50LsKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJCQkJ0KHQvtGF0YDQsNC90LjRgtGMINCy0YHQtSDRhNCw0LnQu9GLCisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJCQkJ0J3QsNC/0LXRh9Cw0YLQsNGC0YwKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCQkJCdCe0YLQvNC10L3QuNGC0YwKKyAgICB0bWVudSBUb29sQmFyLlJlZG8JCQkJCdCS0LXRgNC90YPRgtGMCisgICAgdG1lbnUgVG9vbEJhci5DdXQJCQkJCdCS0YvRgNC10LfQsNGC0YwKKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCQkJCdCa0L7Qv9C40YDQvtCy0LDRgtGMCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJCQkJ0JLQutC70LXQuNGC0YwKKyAgICB0bWVudSBUb29sQmFyLkZpbmQJCQkJCdCf0L7QuNGB0LouLi4KKyAgICB0bWVudSBUb29sQmFyLkZpbmROZXh0CQkJCdCf0L7QuNGB0Log0YHQu9C10LTRg9GO0YnQtdCz0L4g0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldgkJCQnQn9C+0LjRgdC6INC/0YDQtdC00YvQtNGD0YnQtdCz0L4g0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPCisgICAgdG1lbnUgVG9vbEJhci5SZXBsYWNlCQkJCdCX0LDQvNC10L3QuNGC0YwuLi4KKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCQkJCdCX0LDQs9GA0YPQt9C40YLRjCDRgdC10LDQvdGBINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8KKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCQkJCdCh0L7RhdGA0LDQvdC40YLRjCDRgdC10LDQvdGBINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8KKyAgICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdAkJCQnQktGL0L/QvtC70L3QuNGC0Ywg0YHRhtC10L3QsNGA0LjQuSBWaW0KKyAgICB0bWVudSBUb29sQmFyLk1ha2UJCQkJCdCa0L7QvNC/0LjQu9GP0YbQuNGPCisgICAgdG1lbnUgVG9vbEJhci5TaGVsbAkJCQkJ0J7QsdC+0LvQvtGH0LrQsAorICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJCQkJ0KHQvtC30LTQsNGC0Ywg0YTQsNC50Lsg0LzQtdGC0L7QugorICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAkJCQnQn9C10YDQtdC50YLQuCDQuiDQvNC10YLQutC1CisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQkJCQnQodC/0YDQsNCy0LrQsAorICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJCQkJ0J3QsNC50YLQuCDRgdC/0YDQsNCy0LrRgworICBlbmRmdW4KK2VuZGlmCisiCisiCisiIERpYWxvZyB0ZXh0cworIgorIiBGaW5kIGluIGhlbHAgZGlhbG9nCisiCitsZXQgZzptZW51dHJhbnNfaGVscF9kaWFsb2cgPSAi0JLQstC10LTQuNGC0LUg0LrQvtC80LDQvdC00YMg0LjQu9C4INGB0LvQvtCy0L4g0LTQu9GPINC/0L7QuNGB0LrQsDpcblxu0JTQvtCx0LDQstGM0YLQtSBpXyDQtNC70Y8g0L/QvtC40YHQutCwINC60L7QvNCw0L3QtCDRgNC10LbQuNC80LAg0JLRgdGC0LDQstC60LggKNC90LDQv9GA0LjQvNC10YAsIGlfQ1RSTC1YKVxu0JTQvtCx0LDQstGM0YLQtSBjXyDQtNC70Y8g0L/QvtC40YHQutCwINC60L7QvNCw0L3QtCDQntCx0YvRh9C90L7Qs9C+INGA0LXQttC40LzQsCAo0L3QsNC/0YDQuNC80LXRgCwg0YFfPERlbD4pXG7QlNC+0LHQsNCy0YzRgtC1ICcg0LTQu9GPINC/0L7QuNGB0LrQsCDRgdC/0YDQsNCy0LrQuCDQv9C+INC+0L/RhtC40LggKNC90LDQv9GA0LjQvNC10YAsICdzaGlmdHdpZHRoJykiCisiCisiIFNlYXJoIHBhdGggZGlhbG9nCisiCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAi0KPQutCw0LbQuNGC0LUg0L/Rg9GC0Ywg0LTQu9GPINC/0L7QuNGB0LrQsCDRhNCw0LnQu9C+0LIuXG7QmNC80LXQvdCwINC60LDRgtCw0LvQvtCz0L7QsiDRgNCw0LfQtNC10LvRj9GO0YLRgdGPINC30LDQv9GP0YLRi9C80LguIgorIgorIiBUYWcgZmlsZXMgZGlhbG9nCisiCitsZXQgZzptZW51dHJhbnNfdGFnc19kaWFsb2cgPSAi0JLQstC10LTQuNGC0LUg0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIg0LzQtdGC0L7QuiAo0YfQtdGA0LXQtyDQt9Cw0L/Rj9GC0YPRjikuXG4iCisiCisiIFRleHQgd2lkdGggZGlhbG9nCisiCitsZXQgZzptZW51dHJhbnNfdGV4dHdpZHRoX2RpYWxvZyA9ICLQktCy0LXQtNC40YLQtSDRiNC40YDQuNC90YMg0YLQtdC60YHRgtCwINC00LvRjyDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNGPLlxu0JTQu9GPINC+0YLQvNC10L3RiyDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNGPINCy0LLQtdC00LjRgtC1IDAuIgorIgorIiBGaWxlIGZvcm1hdCBkaWFsb2cKKyIKK2xldCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2RpYWxvZyA9ICLQktGL0LHQtdGA0LjRgtC1INGE0L7RgNC80LDRgiDRhNCw0LnQu9CwLiIKK2xldCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2Nob2ljZXMgPSAiJlVuaXhcbiZEb3NcbiZNYWNcbtCeJtGC0LzQtdC90LAiCisiCitsZXQgbWVudXRyYW5zX25vX2ZpbGUgPSAiW9Cd0LXRgiDRhNCw0LnQu9CwXSIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3NrLmNwMTI1MC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9zay5jcDEyNTAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYjQ5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9zay5jcDEyNTAudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczogICAgU2xvdmFrCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X3Nsb3Zha19zbG92YWtfcmVwdWJsaWMuMTI1MC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3NrX3NrLjEyNTAudmltIGIvcnVudGltZS9sYW5nL21lbnVfc2tfc2suMTI1MC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlMzc4ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3NrX3NrLjEyNTAudmltCkBAIC0wLDAgKzEsNiBAQAorIiBNZW51IFRyYW5zbGF0aW9uczogICAgU2xvdmFrCisiIFRyYW5zbGF0ZWQgQnk6CU1hcnRpbiBMYWNrbyA8bGFja29AaG9zdC5zaz4KKyIgTGFzdCBDaGFuZ2U6CQkyMDAzIE1heSAxMQorIiBUaGlzIGlzIHJlZGlyZWN0aW9uIHRvIHNsb3ZhayBtZW51LXRyYW5zbGF0aW9ucyBmaWxlCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X3Nsb3Zha19zbG92YWtfcmVwdWJsaWMuMTI1MC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3NrX3NrLmNwMTI1MC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9za19zay5jcDEyNTAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYjQ5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9za19zay5jcDEyNTAudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczogICAgU2xvdmFrCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X3Nsb3Zha19zbG92YWtfcmVwdWJsaWMuMTI1MC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3NrX3NrLmlzb184ODU5LTIudmltIGIvcnVudGltZS9sYW5nL21lbnVfc2tfc2suaXNvXzg4NTktMi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjZTdkMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3NrX3NrLmlzb184ODU5LTIudmltCkBAIC0wLDAgKzEsMjMyIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglTbG92YWsKKyIgVHJhbnNsYXRlZCBCeToJTWFydGluIExhY2tvIDxsYWNrb0Bob3N0LnNrPgorIiBMYXN0IENoYW5nZToJCTIwMDMgTWFyIDMwCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCitzY3JpcHRlbmNvZGluZyBpc28tODg1OS0yCisKKyIgSGVscCBtZW51CittZW51dHJhbnMgJkhlbHAJCQkmUG9tb2Nu7WsKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4JJlByZWi1YWQ8VGFiPjxGMT4KK21lbnV0cmFucyAmVXNlclwgTWFudWFsCQlQbyZ1vu12YXRltXNr/VwgbWFudeFsCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJJlRpcHkKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJJk7hanO7XC5cLlwuCittZW51dHJhbnMgJkNyZWRpdHMJCVBv7yZha292YW5pZQorbWVudXRyYW5zIE8mcnBoYW5zCQlTaSZyb3R5CittZW51dHJhbnMgQ28mcHlpbmcJCSZMaWNlbmNpYQorbWVudXRyYW5zICZWZXJzaW9uCQkmVmVyemlhCittZW51dHJhbnMgJkFib3V0CQkmT1wgcHJvZ3JhbWUKKworIiBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCQkmU/pib3IKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCSZPdHZvcmm7XC5cLlwuPFRhYj46ZQorbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AJT3Qmdm9yabtcIHZcIG5vdm9tXCBva25lXC5cLlwuPFRhYj46c3AKK21lbnV0cmFucyAmTmV3PFRhYj46ZW5ldwkJJk5vdv08VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCSZaYXR2b3JpuzxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJJlVsb75puzxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJVWxvvmm7XCAmYWtvXC5cLlwuPFRhYj46c2F2CittZW51dHJhbnMgU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCU90dm9yJmm7XCBwb3Jvdm5hbmllXCB2XCBub3ZvbVwgb2tuZVwgc1wuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JT3R2byZyabtcIGFrdHVhbGl6b3ZhbulcIHNcLlwuXC4KK21lbnV0cmFucyAmUHJpbnQJCQkmVGxh6AorbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJCVUmbG++abstS29uaWVjPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCSZLb25pZWM8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCSbacHJhdnkKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSZTcOS7PFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJWiZydblpu1wgc3DkuzxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJJk9wYWtvdmG7PFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCSZWeXN0cmlobvq7PFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJJktvcO1yb3ZhuzxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQlWJmxvvmm7PFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkJVmxvvmm7XCAmcHJlZDxUYWI+W3AKK21lbnV0cmFucyBQdXRcICZBZnRlcjxUYWI+XXAJCVZsb75pu1wgemE8VGFiPl1wCittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHCQlWeSZicmG7XCB2uWV0a288VGFiPmdnVkcKK21lbnV0cmFucyAmRGVsZXRlPFRhYj54CQkJVnkmbWF6Ybs8VGFiPngKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCSZO4Wpzu1wuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JTiZhaHJhZGm7XC5cLlwuCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCU1vJr5ub3N0aQorbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQkmR2xvYuFsbmUgbW++bm9zdGkKK21lbnV0cmFucyBUb2dnbGVcIFBhdHRlcm5cICZIaWdobGlnaHQ8VGFiPjpzZXRcIGhscyEJUHJlcG76u1wgcGFsZXR1XCB6dv1yYXryb3ZhbmlhPFRhYj46c2V0XCBobHMhCittZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljIQlQcmVwbvq7XCAmaWdub3JvdmFuaWUgdmW1a29zdGk8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCVByZXBu+rtcICZ1a+F6YbtcIHpob2R1PFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCSZLb250ZXh0b3bpXCByaWFka3kKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJJlZpcnR14WxuZSD6cHJhdnkKK21lbnV0cmFucyBOZXZlcgkJCQlOaWtkeQorbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCUJsb2tvdv1cIHb9YmVyCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJUmW+aW1cIHZrbGFkYW5pYQorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJQmxva1wgYVwgdmtsYWRhbmllCittZW51dHJhbnMgQWx3YXlzCQkJVr5keQorbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCVByZXBu+rtcIHJlvmkmbVwgdmtsYWRhbmlhPFRhYj46c2V0XCBpbSEKK21lbnV0cmFucyBUb2dnbGVcIFZpXCBDJm9tcGF0aWJsZTxUYWI+OnNldFwgY3AhCVByZXBu+rtcIHZpXCBrb21wYXRpYmlsaXR1PFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQlDZXN0YVwgJmi1YWRhbmlhXC5cLlwuCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4JCVRhJmdvdukgc/pib3J5XC5cLlwuCittZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhcgkJUHJlcG76u1wgJnBhbmVsCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJUHJlcG76u1wgc3BvZG79XCBwb3N1dm7taworbWVudXRyYW5zIFRvZ2dsZVwgJkxlZnRcIFNjcm9sbGJhcglQcmVwbvq7XCC1YXb9XCBwb3N1dm7taworbWVudXRyYW5zIFRvZ2dsZVwgJlJpZ2h0XCBTY3JvbGxiYXIJUHJlcG76u1wgcHJhdv1cIHBvc3V2bu1rCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQlOYXN0YXZlbmlhXCBz+mJvcnUKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQlQcmVwbvq7XCDo7XNsb3ZhJm5pZVwgcmlhZGtvdjxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCVByZXBu+rtcIHJlvmltXCAmem96bmFtdTxUYWI+OnNldFwgbGlzdCEKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQkJUHJlcG76u1wgeiZhbGFtb3ZhbmllXCByaWFka292PFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCVByZXBu+rtcIHphJmxhbW92YW5pZVwgc2xvdjxUYWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJUHJlcG76u1wgcm96ue1yJmVu6VwgdGFidWzhdG9yeTxUYWI+OnNldFwgZXQhCittZW51dHJhbnMgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQkJUHJlcG76u1wgYXV0b21hdGlja+lcICZvZHNhZHpvdmFuaWU8VGFiPjpzZXRcIGFpIQorbWVudXRyYW5zIFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCQlQcmVwbvq7XCAmQy1vZHNhZHpvdmFuaWU8VGFiPjpzZXRcIGNpbiEKK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJCSap7XJrYVwguWlmdHUKK21lbnV0cmFucyBTb2Z0XCAmVGFic3RvcAkJJlNvZnR26XJvdv1cIHRhYnVs4XRvcgorbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJqe1ya2FcIHRlJnh0dVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCSZGb3Jt4XRcIHP6Ym9ydVwuXC5cLgorbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQlGYXImZWJu4Vwgc2No6W1hCisKKyIgUHJvZ3JhbW1pbmcgbWVudQorbWVudXRyYW5zICZUb29scwkJCSZO4XN0cm9qZQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JJlNrb+hpu1wgbmFcIHpuYehrdTxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQlTayZv6Gm7XCBzcOS7PFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJJlZ5dHZvcmm7XCBz+mJvclwgem5h6GllaworbWVudXRyYW5zICZGb2xkaW5nCQkJJlZu4XJhbmllCittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJWmFwbvq7L1Z5cG76u1wgdm7hcmFuaSZlPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CVpvYnJhemm7XCBrdXJ6b3JvJnb9XCByaWFkb2s8VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eAlab2JyYXppu1wgaWJhXCBrdXJ6b3Jvdv1cIHJpYWRvazxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCVphdHZvcmm7XCB2aWFjIFx2bm9yZW7tPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JWmF0dm9yJmm7XCB2uWV0a3lcIHZub3JlbmlhPFRhYj56TQorbWVudXRyYW5zIE8mcGVuXCBtb3JlXCBmb2xkczxUYWI+enIJTyZ0dm9yabtcIHZpYWNcIHZub3Jlbu08VGFiPnpyCittZW51dHJhbnMgJk9wZW5cIGFsbFwgZm9sZHM8VGFiPnpSCSZPdHZvcmm7XCB2uWV0a3lcIHZub3JlbmlhPFRhYj56UgorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQlNZXTzJmRhXCB2buFyYW5pYQorbWVudXRyYW5zIE0mYW51YWwJCQlNJmFudeFsbmUKK21lbnV0cmFucyBJJm5kZW50CQkJT2RzYWRlJm5pZQorbWVudXRyYW5zIEUmeHByZXNzaW9uCQkJJlb9cmF6CittZW51dHJhbnMgUyZ5bnRheAkJCVMmeW50YXgKK21lbnV0cmFucyAmRGlmZgkJCQlSb3omZGllbAorbWVudXRyYW5zIE1hJnJrZXIJCQlabmEm6GtvdmHoCittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCVZ5dCZ2b3Jpu1wgdm5vcmVuaWU8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCVYmeW1hemG7XCB2bm9yZW5pZTxUYWI+emQKK21lbnV0cmFucyBEZWxldGVcICZBbGxcIEZvbGRzPFRhYj56RAlWeW1hemG7XCB2uWV0a3lcIHZub3JlbmlhPFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbHVtblwgJndpZHRoCQmp7XJrYVwgJnZrbGFkYW7paG9cIHN05XBjYQorbWVudXRyYW5zICZEaWZmCQkJCSZSb3pkaWVseQorbWVudXRyYW5zICZVcGRhdGUJCQlBa3QmdWFsaXpvdmG7CittZW51dHJhbnMgJkdldFwgQmxvY2sJCQlab2ImcmG7XCBibG9rCittZW51dHJhbnMgJlB1dFwgQmxvY2sJCQkmVmxvvmm7XCBibG9rCittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCUNoeWJvdulcICZva25vCittZW51dHJhbnMgJlVwZGF0ZTxUYWI+OmN3aW4JCUFrdCZ1YWxpem92Ybs8VGFiPjpjd2luCittZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbgkJJk90dm9yabs8VGFiPjpjb3BlbgorbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQkJJlphdHZvcmm7PFRhYj46Y2Nsb3NlCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAkmS29udmVydG92YbtcIGRvXCBIRVg8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yCUtvbnZlJnJ0b3Zhu1wgc3DkuzxUYWI+OiUheHhkXCAtcgorbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZQkJJk1ha2U8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsCQlW/XBpc1wgJmNo/WI8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQlW/XAmaXNcIHNwcuF2PFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCc9hJmy5aWFcIGNoeWJhPFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AJJlByZWRjaOFkemFq+mNhXCBjaHliYTxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAlTdGEmcrntXCB6b3puYW08VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwlOb3a57VwgJnpvem5hbTxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdzxUYWI+OmN3aW4JQ2h5Ym926VwgbyZrbm88VGFiPjpjd2luCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCVZ5YmVydGVcIGsmb21waWzhdG9yCittZW51dHJhbnMgQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCVBydmllc7tcIGRvXCC5ZXMmdG7hc3Rrb3bpaG9cIGZvcm3hdHU8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJUHImZXZpZXO7XCBzcOS7PFRhYj46JSF4eGRcIC1yCisKKyIgTmFtZXMgZm9yIGJ1ZmZlciBtZW51LgorbWVudXRyYW5zICZCdWZmZXJzCQkmVnlyb3Zu4XZhY2lhXCBwYW3kuworbWVudXRyYW5zICZSZWZyZXNoXCBtZW51CU9ibm92absKK21lbnV0cmFucyAmRGVsZXRlCQlWeW1hemG7CittZW51dHJhbnMgJkFsdGVybmF0ZQkJWm1lbmm7CittZW51dHJhbnMgJk5leHQJCQnPJmFsuWlhCittZW51dHJhbnMgJlByZXZpb3VzCQkmUHJlZGNo4WR6YWr6Y2EKK21lbnV0cmFucyBbTm8gRmlsZV0JCVuuaWFkbnlcIHP6Ym9yXQorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJCSZPa27hCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJJk5vduk8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQkmUm96ZGVsabs8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JUm8memRlbGm7XCBuYVwgIzxUYWI+XldeXgorbWVudXRyYW5zIFNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2CVJvemRlbGm7XCAmdmVydGlr4WxuZTxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcglPdHZvcmm7XCBwcmkmZXNrdW1u7WthCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCVphdHZvciZpuzxUYWI+XldjCittZW51dHJhbnMgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvCVphdHZvcmm7XCBpJm7pPFRhYj5eV28KK21lbnV0cmFucyBNb3ZlXCAmVG8JCQlQcmVzdW76JrsKK21lbnV0cmFucyAmVG9wPFRhYj5eV0sJCQlOYSZob3I8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJTmFkbyZsPFRhYj5eV0oKK21lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICQlWJrVhdm88VGFiPl5XSgorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCQlWcHJhdiZvPFRhYj5eV0wKK21lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQkJzyZhbLlpZTxUYWI+Xld3CittZW51dHJhbnMgUCZyZXZpb3VzPFRhYj5eV1cJCSZQcmVkY2jhZHphavpjZTxUYWI+XldXCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JCVJvdm5ha+FcIHb9uSZrYTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCSZNYXhpbeFsbmFcIHb9uWthPFRhYj5eV18KK21lbnV0cmFucyBNJmluXCBIZWlnaHQ8VGFiPl5XMV8JCU1pbmlt4WxuYVwgdv0muWthPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCU1heGlt4WxuYVwgue1ya2E8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCU1pbmlt4WxuYSC5aXJrYTxUYWI+XlcxXHwKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQlSb3RvdmEmu1wgbmFob3I8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJUm90b3Zhu1wgbmEmZG9sPFRhYj5eV3IKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQlWeSZicmG7XCBw7XNtb1wuXC5cLgorCisiIFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCQkmU3DkuworbWVudXRyYW5zIEN1JnQJCQkmVnlzdHJpaG76uworbWVudXRyYW5zICZDb3B5CQkJJktvcO1yb3ZhuworbWVudXRyYW5zICZQYXN0ZQkJViZsb75puworbWVudXRyYW5zICZEZWxldGUJCVYmeW1hemG7CittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJVnlicmG7XCBibG9rb3ZvCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJVnlicmG7XCBzbCZvdm8KK21lbnV0cmFucyBTZWxlY3RcICZMaW5lCQlWeWJyYbtcICZyaWFkb2sKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawlWeWJyYbtcICZibG9rCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQlWeWJyYbtcIHa5JmV0a28KKworIiBUaGUgR1VJIHRvb2xiYXIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCU90dm9yabsgc/pib3IKKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCVVsb75puyBz+mJvcgorICAgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbAlVbG++absgdrlldGt5CisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJVGxh6AorICAgIHRtZW51IFRvb2xCYXIuVW5kbwkJU3DkuworICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJT3Bha292YbsKKyAgICB0bWVudSBUb29sQmFyLkN1dAkJVnlzdHJpaG76uworICAgIHRtZW51IFRvb2xCYXIuQ29weQkJS29w7XJvdmG7CisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJVmxvvmm7CisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQlO4Wpzuy4uLgorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJTuFqc7sg72FsuWllCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldglO4WpzuyBwcmVkY2jhZHphavpjZQorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQlOYWhyYWRpuy4uLgorICAgIGlmIDAJIiBkaXNhYmxlZDsgVGhlc2UgYXJlIGluIHRoZSBXaW5kb3dzIG1lbnUKKyAgICAgIHRtZW51IFRvb2xCYXIuTmV3CQlOb3bpIG9rbm8KKyAgICAgIHRtZW51IFRvb2xCYXIuV2luU3BsaXQJUm96ZGVsabsgb2tubworICAgICAgdG1lbnUgVG9vbEJhci5XaW5NYXgJTWF4aW1hbGl6b3ZhuyBva25vCisgICAgICB0bWVudSBUb29sQmFyLldpbk1pbglNaW5pbWFsaXpvdmG7IG9rbm8KKyAgICAgIHRtZW51IFRvb2xCYXIuV2luVlNwbGl0CVJvemRlbGm7IG9rbm8gdmVydGlr4WxuZQorICAgICAgdG1lbnUgVG9vbEJhci5XaW5NYXhXaWR0aAlNYXhpbWFsaXpvdmG7ILntcmt1IG9rbmEKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWluV2lkdGgJTWluaW1hbGl6b3ZhuyC57XJrdSBva25hCisgICAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlCVphdHZvcmm7IG9rbm8KKyAgICBlbmRpZgorICAgIHRtZW51IFRvb2xCYXIuTG9hZFNlc24JTmHo7XRhuyBzZWRlbmllCisgICAgdG1lbnUgVG9vbEJhci5TYXZlU2VzbglVbG++absgc2VkZW5pZQorICAgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0CVNwdXN0absgc2tyaXB0CisgICAgdG1lbnUgVG9vbEJhci5NYWtlCQlTcHVzdGm7IG1ha2UKKyAgICB0bWVudSBUb29sQmFyLlNoZWxsCQlTcHVzdGm7ILllbAorICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJU3B1c3RpuyBjdGFncworICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAlTa2/oabsgbmEgdGFnIHBvZCBrdXJ6b3JvbQorICAgIHRtZW51IFRvb2xCYXIuSGVscAkJUG9tb2Nu7WsKKyAgICB0bWVudSBUb29sQmFyLkZpbmRIZWxwCU7hanO7IHBvbW9jbu1rYSBrLi4uCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXgJCSZTeW50YXgKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seQlOYXN0YXZpu1wgaWJhXCAnc3ludGF4JworbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwlOYXN0YXZpu1wgYWpcICdmaWxldHlwZScKK21lbnV0cmFucyAmT2ZmCQkJJlZ5cG76uworbWVudXRyYW5zICZNYW51YWwJCSZSdehuZQorbWVudXRyYW5zIEEmdXRvbWF0aWMJCUEmdXRvbWF0aWNreQorIiBtZW51dHJhbnMgbyZuXCAodGhpc1wgZmlsZSkJJlphcG76u1wgKHByZVwgdGVudG9cIHP6Ym9yKQorIiBtZW51dHJhbnMgbyZmZlwgKHRoaXNcIGZpbGUpCVZ5cCZu+rtcIChwcmVcIHRlbnRvXCBz+mJvciApCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCVphcG76uy92eXBu+rtcIHByZVwgJnRlbnRvXCBz+mJvcgorbWVudXRyYW5zIENvJmxvclwgdGVzdAkJVGVzdFwgJmZhcmllYgorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJJlRlc3RcIHp2/XJhevJvdmFuaWEKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJJlByZXZpZXO7XCBkb1wgSFRNTApkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfc2tfc2sudmltIGIvcnVudGltZS9sYW5nL21lbnVfc2tfc2sudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzUwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9za19zay52aW0KQEAgLTAsMCArMSw5IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglTbG92YWsKKyIgVHJhbnNsYXRlZCBCeToJTWFydGluIExhY2tvIDxsYWNrb0Bob3N0LnNrPgorIiBMYXN0IENoYW5nZToJCTIwMDIgTWF5IDI3CisKK2lmIGhhcygid2luMzIiKSB8fCBoYXMoIndpbjE2IikgfHwgaGFzKCJkb3MxNiIpIHx8IGhhcygiZG9zMzIiKQorCXNvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X3NrX3NrLjEyNTAudmltCitlbHNlCisJc291cmNlIDxzZmlsZT46cDpoL21lbnVfc2tfc2suaXNvXzg4NTktMi52aW0KK2VuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9zbG92YWtfc2xvdmFrX3JlcHVibGljLjEyNTAudmltIGIvcnVudGltZS9sYW5nL21lbnVfc2xvdmFrX3Nsb3Zha19yZXB1YmxpYy4xMjUwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTBhZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfc2xvdmFrX3Nsb3Zha19yZXB1YmxpYy4xMjUwLnZpbQpAQCAtMCwwICsxLDIzMiBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJU2xvdmFrCisiIFRyYW5zbGF0ZWQgQnk6CU1hcnRpbiBMYWNrbyA8bGFja29AaG9zdC5zaz4KKyIgTGFzdCBDaGFuZ2U6CQkyMDAzIE1hciAzMAorCisiIFF1aXQgd2hlbiBtZW51IHRyYW5zbGF0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLgoraWYgZXhpc3RzKCJkaWRfbWVudV90cmFucyIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBkaWRfbWVudV90cmFucyA9IDEKKworc2NyaXB0ZW5jb2RpbmcgY3AxMjUwCisKKyIgSGVscCBtZW51CittZW51dHJhbnMgJkhlbHAJCQkmUG9tb2Nu7WsKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4JJlByZWi+YWQ8VGFiPjxGMT4KK21lbnV0cmFucyAmVXNlclwgTWFudWFsCQlQbyZ1nu12YXRlvnNr/VwgbWFudeFsCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJJlRpcHkKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJJk7hanOdXC5cLlwuCittZW51dHJhbnMgJkNyZWRpdHMJCVBv7yZha292YW5pZQorbWVudXRyYW5zIE8mcnBoYW5zCQlTaSZyb3R5CittZW51dHJhbnMgQ28mcHlpbmcJCSZMaWNlbmNpYQorbWVudXRyYW5zICZWZXJzaW9uCQkmVmVyemlhCittZW51dHJhbnMgJkFib3V0CQkmT1wgcHJvZ3JhbWUKKworIiBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCQkmU/pib3IKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCSZPdHZvcmmdXC5cLlwuPFRhYj46ZQorbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AJT3Qmdm9yaZ1cIHZcIG5vdm9tXCBva25lXC5cLlwuPFRhYj46c3AKK21lbnV0cmFucyAmTmV3PFRhYj46ZW5ldwkJJk5vdv08VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCSZaYXR2b3JpnTxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJJlVsb55pnTxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJVWxvnmmdXCAmYWtvXC5cLlwuPFRhYj46c2F2CittZW51dHJhbnMgU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCU90dm9yJmmdXCBwb3Jvdm5hbmllXCB2XCBub3ZvbVwgb2tuZVwgc1wuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4JT3R2byZyaZ1cIGFrdHVhbGl6b3ZhbulcIHNcLlwuXC4KK21lbnV0cmFucyAmUHJpbnQJCQkmVGxh6AorbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJCVUmbG+eaZ0tS29uaWVjPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCSZLb25pZWM8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCSbacHJhdnkKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSZTcOSdPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJWiZydZppnVwgc3DknTxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJJk9wYWtvdmGdPFRhYj5cLgorbWVudXRyYW5zIEN1JnQ8VGFiPiIreAkJCSZWeXN0cmlobvqdPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJJktvcO1yb3ZhnTxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQlWJmxvnmmdPFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkJVmxvnmmdXCAmcHJlZDxUYWI+W3AKK21lbnV0cmFucyBQdXRcICZBZnRlcjxUYWI+XXAJCVZsb55pnVwgemE8VGFiPl1wCittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHCQlWeSZicmGdXCB2mmV0a288VGFiPmdnVkcKK21lbnV0cmFucyAmRGVsZXRlPFRhYj54CQkJVnkmbWF6YZ08VGFiPngKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCSZO4WpznVwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JTiZhaHJhZGmdXC5cLlwuCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCU1vJp5ub3N0aQorbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQkmR2xvYuFsbmUgbW+ebm9zdGkKK21lbnV0cmFucyBUb2dnbGVcIFBhdHRlcm5cICZIaWdobGlnaHQ8VGFiPjpzZXRcIGhscyEJUHJlcG76nVwgcGFsZXR1XCB6dv1yYXryb3ZhbmlhPFRhYj46c2V0XCBobHMhCittZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljIQlQcmVwbvqdXCAmaWdub3JvdmFuaWUgdmW+a29zdGk8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCVByZXBu+p1cICZ1a+F6YZ1cIHpob2R1PFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCSZLb250ZXh0b3bpXCByaWFka3kKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJJlZpcnR14WxuZSD6cHJhdnkKK21lbnV0cmFucyBOZXZlcgkJCQlOaWtkeQorbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCUJsb2tvdv1cIHb9YmVyCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJUmWeaW1cIHZrbGFkYW5pYQorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJQmxva1wgYVwgdmtsYWRhbmllCittZW51dHJhbnMgQWx3YXlzCQkJVp5keQorbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCVByZXBu+p1cIHJlnmkmbVwgdmtsYWRhbmlhPFRhYj46c2V0XCBpbSEKK21lbnV0cmFucyBUb2dnbGVcIFZpXCBDJm9tcGF0aWJsZTxUYWI+OnNldFwgY3AhCVByZXBu+p1cIHZpXCBrb21wYXRpYmlsaXR1PFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuCQlDZXN0YVwgJmi+YWRhbmlhXC5cLlwuCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4JCVRhJmdvdukgc/pib3J5XC5cLlwuCittZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhcgkJUHJlcG76nVwgJnBhbmVsCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJUHJlcG76nVwgc3BvZG79XCBwb3N1dm7taworbWVudXRyYW5zIFRvZ2dsZVwgJkxlZnRcIFNjcm9sbGJhcglQcmVwbvqdXCC+YXb9XCBwb3N1dm7taworbWVudXRyYW5zIFRvZ2dsZVwgJlJpZ2h0XCBTY3JvbGxiYXIJUHJlcG76nVwgcHJhdv1cIHBvc3V2bu1rCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQlOYXN0YXZlbmlhXCBz+mJvcnUKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQlQcmVwbvqdXCDo7XNsb3ZhJm5pZVwgcmlhZGtvdjxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEJCVByZXBu+p1cIHJlnmltXCAmem96bmFtdTxUYWI+OnNldFwgbGlzdCEKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQkJUHJlcG76nVwgeiZhbGFtb3ZhbmllXCByaWFka292PFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCVByZXBu+p1cIHphJmxhbW92YW5pZVwgc2xvdjxUYWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJUHJlcG76nVwgcm96mu1yJmVu6VwgdGFidWzhdG9yeTxUYWI+OnNldFwgZXQhCittZW51dHJhbnMgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQkJUHJlcG76nVwgYXV0b21hdGlja+lcICZvZHNhZHpvdmFuaWU8VGFiPjpzZXRcIGFpIQorbWVudXRyYW5zIFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCQlQcmVwbvqdXCAmQy1vZHNhZHpvdmFuaWU8VGFiPjpzZXRcIGNpbiEKK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJCSaK7XJrYVwgmmlmdHUKK21lbnV0cmFucyBTb2Z0XCAmVGFic3RvcAkJJlNvZnR26XJvdv1cIHRhYnVs4XRvcgorbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJiu1ya2FcIHRlJnh0dVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCSZGb3Jt4XRcIHP6Ym9ydVwuXC5cLgorbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQlGYXImZWJu4Vwgc2No6W1hCisKKyIgUHJvZ3JhbW1pbmcgbWVudQorbWVudXRyYW5zICZUb29scwkJCSZO4XN0cm9qZQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JJlNrb+hpnVwgbmFcIHpuYehrdTxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQlTayZv6GmdXCBzcOSdPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJJlZ5dHZvcmmdXCBz+mJvclwgem5h6GllaworbWVudXRyYW5zICZGb2xkaW5nCQkJJlZu4XJhbmllCittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJWmFwbvqdL1Z5cG76nVwgdm7hcmFuaSZlPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CVpvYnJhemmdXCBrdXJ6b3JvJnb9XCByaWFkb2s8VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eAlab2JyYXppnVwgaWJhXCBrdXJ6b3Jvdv1cIHJpYWRvazxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCVphdHZvcmmdXCB2aWFjIFx2bm9yZW7tPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JWmF0dm9yJmmdXCB2mmV0a3lcIHZub3JlbmlhPFRhYj56TQorbWVudXRyYW5zIE8mcGVuXCBtb3JlXCBmb2xkczxUYWI+enIJTyZ0dm9yaZ1cIHZpYWNcIHZub3Jlbu08VGFiPnpyCittZW51dHJhbnMgJk9wZW5cIGFsbFwgZm9sZHM8VGFiPnpSCSZPdHZvcmmdXCB2mmV0a3lcIHZub3JlbmlhPFRhYj56UgorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQlNZXTzJmRhXCB2buFyYW5pYQorbWVudXRyYW5zIE0mYW51YWwJCQlNJmFudeFsbmUKK21lbnV0cmFucyBJJm5kZW50CQkJT2RzYWRlJm5pZQorbWVudXRyYW5zIEUmeHByZXNzaW9uCQkJJlb9cmF6CittZW51dHJhbnMgUyZ5bnRheAkJCVMmeW50YXgKK21lbnV0cmFucyAmRGlmZgkJCQlSb3omZGllbAorbWVudXRyYW5zIE1hJnJrZXIJCQlabmEm6GtvdmHoCittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCVZ5dCZ2b3JpnVwgdm5vcmVuaWU8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCVYmeW1hemGdXCB2bm9yZW5pZTxUYWI+emQKK21lbnV0cmFucyBEZWxldGVcICZBbGxcIEZvbGRzPFRhYj56RAlWeW1hemGdXCB2mmV0a3lcIHZub3JlbmlhPFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbHVtblwgJndpZHRoCQmK7XJrYVwgJnZrbGFkYW7paG9cIHN05XBjYQorbWVudXRyYW5zICZEaWZmCQkJCSZSb3pkaWVseQorbWVudXRyYW5zICZVcGRhdGUJCQlBa3QmdWFsaXpvdmGdCittZW51dHJhbnMgJkdldFwgQmxvY2sJCQlab2ImcmGdXCBibG9rCittZW51dHJhbnMgJlB1dFwgQmxvY2sJCQkmVmxvnmmdXCBibG9rCittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCUNoeWJvdulcICZva25vCittZW51dHJhbnMgJlVwZGF0ZTxUYWI+OmN3aW4JCUFrdCZ1YWxpem92YZ08VGFiPjpjd2luCittZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbgkJJk90dm9yaZ08VGFiPjpjb3BlbgorbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQkJJlphdHZvcmmdPFRhYj46Y2Nsb3NlCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAkmS29udmVydG92YZ1cIGRvXCBIRVg8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yCUtvbnZlJnJ0b3ZhnVwgc3DknTxUYWI+OiUheHhkXCAtcgorbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZQkJJk1ha2U8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsCQlW/XBpc1wgJmNo/WI8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQlW/XAmaXNcIHNwcuF2PFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCc9hJmyaaWFcIGNoeWJhPFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AJJlByZWRjaOFkemFq+mNhXCBjaHliYTxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAlTdGEmcprtXCB6b3puYW08VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwlOb3aa7VwgJnpvem5hbTxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdzxUYWI+OmN3aW4JQ2h5Ym926VwgbyZrbm88VGFiPjpjd2luCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCVZ5YmVydGVcIGsmb21waWzhdG9yCittZW51dHJhbnMgQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCVBydmllc51cIGRvXCCaZXMmdG7hc3Rrb3bpaG9cIGZvcm3hdHU8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJUHImZXZpZXOdXCBzcOSdPFRhYj46JSF4eGRcIC1yCisKKyIgTmFtZXMgZm9yIGJ1ZmZlciBtZW51LgorbWVudXRyYW5zICZCdWZmZXJzCQkmVnlyb3Zu4XZhY2lhXCBwYW3knQorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51CU9ibm92aZ0KK21lbnV0cmFucyAmRGVsZXRlCQlWeW1hemGdCittZW51dHJhbnMgJkFsdGVybmF0ZQkJWm1lbmmdCittZW51dHJhbnMgJk5leHQJCQnPJmFsmmlhCittZW51dHJhbnMgJlByZXZpb3VzCQkmUHJlZGNo4WR6YWr6Y2EKK21lbnV0cmFucyBbTm8gRmlsZV0JCVuOaWFkbnlcIHP6Ym9yXQorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJCSZPa27hCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJJk5vduk8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQkmUm96ZGVsaZ08VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4JUm8memRlbGmdXCBuYVwgIzxUYWI+XldeXgorbWVudXRyYW5zIFNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2CVJvemRlbGmdXCAmdmVydGlr4WxuZTxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlcglPdHZvcmmdXCBwcmkmZXNrdW1u7WthCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCVphdHZvciZpnTxUYWI+XldjCittZW51dHJhbnMgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvCVphdHZvcmmdXCBpJm7pPFRhYj5eV28KK21lbnV0cmFucyBNb3ZlXCAmVG8JCQlQcmVzdW76Jp0KK21lbnV0cmFucyAmVG9wPFRhYj5eV0sJCQlOYSZob3I8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJTmFkbyZsPFRhYj5eV0oKK21lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICQlWJr5hdm88VGFiPl5XSgorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCQlWcHJhdiZvPFRhYj5eV0wKK21lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQkJzyZhbJppZTxUYWI+Xld3CittZW51dHJhbnMgUCZyZXZpb3VzPFRhYj5eV1cJCSZQcmVkY2jhZHphavpjZTxUYWI+XldXCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JCVJvdm5ha+FcIHb9miZrYTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCSZNYXhpbeFsbmFcIHb9mmthPFRhYj5eV18KK21lbnV0cmFucyBNJmluXCBIZWlnaHQ8VGFiPl5XMV8JCU1pbmlt4WxuYVwgdv0mmmthPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCU1heGlt4WxuYVwgmu1ya2E8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCU1pbmlt4WxuYSCaaXJrYTxUYWI+XlcxXHwKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQlSb3RvdmEmnVwgbmFob3I8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJUm90b3ZhnVwgbmEmZG9sPFRhYj5eV3IKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQlWeSZicmGdXCBw7XNtb1wuXC5cLgorCisiIFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCQkmU3DknQorbWVudXRyYW5zIEN1JnQJCQkmVnlzdHJpaG76nQorbWVudXRyYW5zICZDb3B5CQkJJktvcO1yb3ZhnQorbWVudXRyYW5zICZQYXN0ZQkJViZsb55pnQorbWVudXRyYW5zICZEZWxldGUJCVYmeW1hemGdCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJVnlicmGdXCBibG9rb3ZvCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJVnlicmGdXCBzbCZvdm8KK21lbnV0cmFucyBTZWxlY3RcICZMaW5lCQlWeWJyYZ1cICZyaWFkb2sKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawlWeWJyYZ1cICZibG9rCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQlWeWJyYZ1cIHaaJmV0a28KKworIiBUaGUgR1VJIHRvb2xiYXIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCU90dm9yaZ0gc/pib3IKKyAgICB0bWVudSBUb29sQmFyLlNhdmUJCVVsb55pnSBz+mJvcgorICAgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbAlVbG+eaZ0gdppldGt5CisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJVGxh6AorICAgIHRtZW51IFRvb2xCYXIuVW5kbwkJU3DknQorICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJT3Bha292YZ0KKyAgICB0bWVudSBUb29sQmFyLkN1dAkJVnlzdHJpaG76nQorICAgIHRtZW51IFRvb2xCYXIuQ29weQkJS29w7XJvdmGdCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJVmxvnmmdCisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQlO4WpznS4uLgorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJTuFqc50g72FsmmllCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldglO4WpznSBwcmVkY2jhZHphavpjZQorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQlOYWhyYWRpnS4uLgorICAgIGlmIDAJIiBkaXNhYmxlZDsgVGhlc2UgYXJlIGluIHRoZSBXaW5kb3dzIG1lbnUKKyAgICAgIHRtZW51IFRvb2xCYXIuTmV3CQlOb3bpIG9rbm8KKyAgICAgIHRtZW51IFRvb2xCYXIuV2luU3BsaXQJUm96ZGVsaZ0gb2tubworICAgICAgdG1lbnUgVG9vbEJhci5XaW5NYXgJTWF4aW1hbGl6b3ZhnSBva25vCisgICAgICB0bWVudSBUb29sQmFyLldpbk1pbglNaW5pbWFsaXpvdmGdIG9rbm8KKyAgICAgIHRtZW51IFRvb2xCYXIuV2luVlNwbGl0CVJvemRlbGmdIG9rbm8gdmVydGlr4WxuZQorICAgICAgdG1lbnUgVG9vbEJhci5XaW5NYXhXaWR0aAlNYXhpbWFsaXpvdmGdIJrtcmt1IG9rbmEKKyAgICAgIHRtZW51IFRvb2xCYXIuV2luTWluV2lkdGgJTWluaW1hbGl6b3ZhnSCa7XJrdSBva25hCisgICAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlCVphdHZvcmmdIG9rbm8KKyAgICBlbmRpZgorICAgIHRtZW51IFRvb2xCYXIuTG9hZFNlc24JTmHo7XRhnSBzZWRlbmllCisgICAgdG1lbnUgVG9vbEJhci5TYXZlU2VzbglVbG+eaZ0gc2VkZW5pZQorICAgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0CVNwdXN0aZ0gc2tyaXB0CisgICAgdG1lbnUgVG9vbEJhci5NYWtlCQlTcHVzdGmdIG1ha2UKKyAgICB0bWVudSBUb29sQmFyLlNoZWxsCQlTcHVzdGmdIJplbAorICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJU3B1c3RpnSBjdGFncworICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAlTa2/oaZ0gbmEgdGFnIHBvZCBrdXJ6b3JvbQorICAgIHRtZW51IFRvb2xCYXIuSGVscAkJUG9tb2Nu7WsKKyAgICB0bWVudSBUb29sQmFyLkZpbmRIZWxwCU7hanOdIHBvbW9jbu1rYSBrLi4uCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXgJCSZTeW50YXgKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seQlOYXN0YXZpnVwgaWJhXCAnc3ludGF4JworbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwlOYXN0YXZpnVwgYWpcICdmaWxldHlwZScKK21lbnV0cmFucyAmT2ZmCQkJJlZ5cG76nQorbWVudXRyYW5zICZNYW51YWwJCSZSdehuZQorbWVudXRyYW5zIEEmdXRvbWF0aWMJCUEmdXRvbWF0aWNreQorIiBtZW51dHJhbnMgbyZuXCAodGhpc1wgZmlsZSkJJlphcG76nVwgKHByZVwgdGVudG9cIHP6Ym9yKQorIiBtZW51dHJhbnMgbyZmZlwgKHRoaXNcIGZpbGUpCVZ5cCZu+p1cIChwcmVcIHRlbnRvXCBz+mJvciApCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCVphcG76nS92eXBu+p1cIHByZVwgJnRlbnRvXCBz+mJvcgorbWVudXRyYW5zIENvJmxvclwgdGVzdAkJVGVzdFwgJmZhcmllYgorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJJlRlc3RcIHp2/XJhevJvdmFuaWEKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJJlByZXZpZXOdXCBkb1wgSFRNTApkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfc3BhbmlzaF9zcGFpbi44NTAudmltIGIvcnVudGltZS9sYW5nL21lbnVfc3BhbmlzaF9zcGFpbi44NTAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOTZhMzkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9zcGFuaXNoX3NwYWluLjg1MC52aW0KQEAgLTAsMCArMSBAQAorc291cmNlIDxzZmlsZT46cDpoL21lbnVfZXNfZXMubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfc3IudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfc3IudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNWMzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9zci51dGYtOC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglTZXJiaWFuCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X3NyX3l1LnV0Zi04LnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfc3JfeXUuYXNjaWkudmltIGIvcnVudGltZS9sYW5nL21lbnVfc3JfeXUuYXNjaWkudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTkwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9zcl95dS5hc2NpaS52aW0KQEAgLTAsMCArMSwyNTggQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6IFNlcmJpYW4KKyIgTWFpbnRhaW5lcjogQWxla3NhbmRhciBKZWxlbmFrIDxhamVsZW5hayBBVCB5YWhvby5jb20+CisiIExhc3QgQ2hhbmdlOglGcmksIDMwIE1heSAyMDAzIDEyOjE1OjMwIC0wNDAwCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkgICAgICBQb21vJmMKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4gICZQcmVnbGVkPFRhYj48RjE+CittZW51dHJhbnMgJlVzZXJcIE1hbnVhbCAgICAgICAmVXB1dHN0dm9cIHphXCBrb3Jpc25pa2UKK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcyAgICAgICZLYWtvXCBkYVwuXC5cLgorbWVudXRyYW5zICZGaW5kCQkgICAgICAmTmFkamkKK21lbnV0cmFucyAmQ3JlZGl0cwkgICAgICAmWmFzbHVnZQorbWVudXRyYW5zIENvJnB5aW5nCSAgICAgIFAmcmV1emltYW5qZQorbWVudXRyYW5zIE8mcnBoYW5zCSAgICAgICZTaXJvY2ljaQorbWVudXRyYW5zICZWZXJzaW9uCSAgICAgICZWZXJ6aWphCittZW51dHJhbnMgJkFib3V0CSAgICAgICZPXCBwcm9ncmFtdQorCisiIEZpbGUgbWVudQorbWVudXRyYW5zICZGaWxlCQkJICAgICZEYXRvdGVrYQorbWVudXRyYW5zICZPcGVuXC5cLlwuPFRhYj46ZQkgICAgJk90dm9yaVwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwICZQb2RlbGktb3R2b3JpXC5cLlwuPFRhYj46c3AKK21lbnV0cmFucyAmTmV3PFRhYj46ZW5ldwkgICAgJk5vdmE8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJICAgICZaYXR2b3JpPFRhYj46Y2xvc2UKK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCSAgICAmU2FjdXZhajxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYgIFNhY3V2YWpcICZrYW9cLlwuXC48VGFiPjpzYXYKK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4gIFBvZGVsaVwgaVwgJnVwb3JlZGlcIHNhXC5cLlwuCittZW51dHJhbnMgU3BsaXRcIFBhdGNoZWRcICZCeVwuXC5cLiBQbyZkZWxpXCBpXCBwcmVwcmF2aVwgc2FcLlwuXC4KK21lbnV0cmFucyAmUHJpbnQJCSAgICBTdGEmbXBhagorbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJICAgIFNhY3V2YWpcIGlcIHphJnZyc2k8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkgICAgSyZyYWo8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJICZVcmVkaml2YW5qZQorbWVudXRyYW5zICZVbmRvPFRhYj51CQkgJlZyYXRpPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkgJlBvdnJhdGk8VGFiPl5SCittZW51dHJhbnMgUmVwJmVhdDxUYWI+XC4JIFAmb25vdmk8VGFiPlwuCittZW51dHJhbnMgQ3UmdDxUYWI+Iit4CQkgSXNlJmNpPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkgJktvcGlyYWo8VGFiPiIreQorbWVudXRyYW5zICZQYXN0ZTxUYWI+IitnUAkgJlViYWNpPFRhYj4iK2dQCittZW51dHJhbnMgJlBhc3RlPFRhYj4iK1AJJlViYWNpPFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkgU3RhdmlcIHByZSZkPFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkgU3RhdmlcICZpemE8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJIEl6JmJyaXNpPFRhYj54CittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHICBJemFiZXJpXCBzdiZlPFRhYj5nZ1ZHCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCSAmTmFkamlcLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuIE5hZGppXCBpXCAmemFtZW5pXC5cLlwuCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJIFAmcm96b3JcIHBvZGVzYXZhbmphCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJIE9wJnN0YVwgcG9kZXNhdmFuamEKK21lbnV0cmFucyBGJmlsZVwgU2V0dGluZ3MJIFBvZGVzYXZhbmphXCB6YVwgZGEmdG90ZWtlCittZW51dHJhbnMgJlNoaWZ0d2lkdGgJCSAmUG9tZXJhagorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCSAmTWVrYVwgdGFidWxhY2lqYQorbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkgJlNpcmluYVwgdGVrc3RhXC5cLlwuCittZW51dHJhbnMgJkZpbGVcIEZvcm1hdFwuXC5cLgkgJlZyc3RhXCBkYXRvdGVrZVwuXC5cLgorbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCSBCbyZqZQorbWVudXRyYW5zICZLZXltYXAJCSBQcmVzJmxpa2F2YW5qZVwgdGFzdGF0dXJlCittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkgSXpib3JcICZmb250YVwuXC5cLgorCisiIEVkaXQvR2xvYmFsIFNldHRpbmdzCittZW51dHJhbnMgVG9nZ2xlXCBQYXR0ZXJuXCAmSGlnaGxpZ2h0PFRhYj46c2V0XCBobHMhIE5hZ2xhc2lcICZvYnJhemNlXCAoZGEvbmUpPFRhYj46c2V0XCBobHMhCittZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljISBaYW5lbWFyaVwgXHZlbGljaW51XCAmc2xvdmFcIChkYS9uZSk8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hIFByb3ZlcmlcIHByYXRlY3VcICZ6YWdyYWR1XCAoZGEvbmUpPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMgIFZpZGxqaXZpXCAmcmVkb3ZpCittZW51dHJhbnMgJlZpcnR1YWxcIEVkaXQgICBWaXJ0dWVsbm9cICZ1cmVkaml2YW5qZQorbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hICAgUmV6aW1cIHUmbm9zYVwgKGRhL25lKTxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwISAgICAgJyZWaSdcIHNhZ2xhc25vXCAoZGEvbmUpPFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuIFB1dGFuamFcICZwcmV0cmFnZVwuXC5cLgorbWVudXRyYW5zIFRhJmdcIEZpbGVzXC5cLlwuICAgJkRhdG90ZWtlXCBvem5ha2FcLlwuXC4KK21lbnV0cmFucyBUb2dnbGVcICZUb29sYmFyICAgIExpbmlqYVwgc2FcICZhbGF0a2FtYVwgKGRhL25lKQorbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyICAgRG9uamFcIGwmaW5pamFcIGtsaXphbmphXCAoZGEvbmUpCittZW51dHJhbnMgVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyICAmTGV2YVwgbGluaWphXCBrbGl6YW5qYVwgKGRhL25lKQorbWVudXRyYW5zIFRvZ2dsZVwgJlJpZ2h0XCBTY3JvbGxiYXIgJkRlc25hXCBsaW5pamFcIGtsaXphbmphXCAoZGEvbmUpCisKKyIgRWRpdC9HbG9iYWwgU2V0dGluZ3MvVmlydHVhbCBFZGl0CittZW51dHJhbnMgTmV2ZXIJCSAgICAgIE5pa2FkCittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbiAgICBJemJvclwgYmxva2EKK21lbnV0cmFucyBJbnNlcnRcIG1vZGUJICAgICAgUmV6aW1cIHVub3NhCittZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0ICBCbG9rXCBpXCB1bm9zCittZW51dHJhbnMgQWx3YXlzCSAgICAgIFV2ZWsKKworIiBFZGl0L0ZpbGUgU2V0dGluZ3MKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51ISAgIFJlZG5pXCAmYnJvamV2aVwgKGRhL25lKTxUYWI+OnNldFwgbnUhCittZW51dHJhbnMgVG9nZ2xlXCAmTGlzdFwgTW9kZTxUYWI+OnNldFwgbGlzdCEgICAgICBSZXppbVwgJmxpc3RlXCAoZGEvbmUpPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhICAgICAgT2JhdmlqYW5qZVwgJnJlZG92YVwgKGRhL25lKTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyISAgIFByZWxvbWlcICZuYVwgcmVjXCAoZGEvbmUpPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCSAgIFJhem1hY2lcIHVtZXN0b1wgJnRhYnVsYWNpamVcIChkYS9uZSk8VGFiPjpzZXRcIGV0IQorbWVudXRyYW5zIFRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEgICAgQXV0by0mdXZsYWNlbmplXCAoZGEvbmUpPFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luISAgICAgICZDZS11dmxhY2VuamVcIChkYS9uZSk8VGFiPjpzZXRcIGNpbiEKKworIiBFZGl0L0tleW1hcAorbWVudXRyYW5zIE5vbmUgTmlqZWRhbgorCisiIFRvb2xzIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJJkFsYXRrZQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0gU2tvY2lcIG5hXCAmb3Z1XCBvem5ha3U8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkgU2tvY2lcICZuYXRyYWc8VGFiPl5UCittZW51dHJhbnMgQnVpbGRcICZUYWdzXCBGaWxlCSBJemdyYWRpXCAmZGF0b3Rla3VcIG96bmFrYQorbWVudXRyYW5zICZGb2xkaW5nCSAgICAgICZQb2R2aWphbmplCittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCSAgUyZ0dm9yaVwgcG9kdmlqdXRhazxUYWI+emYKK21lbnV0cmFucyAmRGVsZXRlXCBGb2xkPFRhYj56ZAkJICBPJmJyaXNpXCBwb2R2aWp1dGFrPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECSAgT2JyaXNpXCBzdmVcIHBvJmR2aWp1dGtlPFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbHVtblwgJndpZHRoCQkgIFNpcmluYVwgJnJlZGFcIHBvZHZpanV0a2EKK21lbnV0cmFucyAmRGlmZgkJICAgICAgJlVwb3JlZGppdmFuamUKK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UgICAgICdtYWsmZSc8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsICAgICBTcGlzYWtcICZncmVzYWthPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEgIFNwJmlzYWtcIHBvcnVrYTxUYWI+OmNsIQorbWVudXRyYW5zICZOZXh0XCBFcnJvcjxUYWI+OmNuCSAgICBTJmxlZGVjYVwgZ3Jlc2thPFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AgIFByZSZ0aG9kbmFcIGdyZXNrYTxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZCAgICBTdGFyaVwgc3Bpc2EmazxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3ICAgIE5vJnZpXCBzcGlzYWs8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJICAgIFByb3pvclwgc2FcIGcmcmVza2FtYQorbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCSAgICBJJnphYmVyaVwgcHJldm9kaW9jYQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJICAgUHJldHZvcmlcIHVcICZIRUtTPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtciAgICBWciZhdGlcIHVcIHBydm9iaXRhblwgb2JsaWs8VGFiPjolIXh4ZFwgLXIKKworIiBUb29scy9Gb2xkaW5nCittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkgICAmT21vZ3VjaS9wcmVraW5pXCBwb2R2aWphbmplPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2ICAgICAgJlBva2F6aVwgcmVkXCBzYVwga3Vyc29yb208VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eCBQb2themlcICZzYW1vXCByZWRcIHNhXCBrdXJzb3JvbTxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptICAgJlphdHZvcmlcIHZpc2VcIHBvZHZpanV0YWthPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0gICAgWmF0dm9yaVwgcyZ2ZVwgcG9kdmlqdXRrZTxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyICAgIE90dm9yaVwgdmlzJmVcIHBvZHZpanV0YWthPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UiAgICAgTyZ0dm9yaVwgc3ZlXCBwb2R2aWp1dGtlPFRhYj56UgorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCSAgICAgICAmTmFjaW5cIHBvZHZpamFuamEKKworIiBUb29scy9Gb2xkaW5nL0ZvbGQgTWV0aG9kCittZW51dHJhbnMgTSZhbnVhbCAgICAgICAmUnVjbm8KK21lbnV0cmFucyBJJm5kZW50ICAgICAgICZVdnVjZW5vc3QKK21lbnV0cmFucyBFJnhwcmVzc2lvbiAgICZJenJhegorbWVudXRyYW5zIFMmeW50YXggICAgICAgJlNpbnRha3NhCisibWVudXRyYW5zICZEaWZmCittZW51dHJhbnMgTWEmcmtlciAgICAgICAmT3puYWthCisKKyIgVG9vbHMvRGlmZgorbWVudXRyYW5zICZVcGRhdGUgICAgICAgJkF6dXJpcmFqCittZW51dHJhbnMgJkdldFwgQmxvY2sgICAmUHJpaHZhdGlcIGl6bWVudQorbWVudXRyYW5zICZQdXRcIEJsb2NrICAgUHJlJmJhY2lcIGl6bWVudQorCisiIFRvb2xzL0Vycm9yIFdpbmRvdworbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luICAgJkF6dXJpcmFqPFRhYj46Y3dpbgorbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4gICAgJk90dm9yaTxUYWI+OmNvcGVuCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlICAmWmF0dm9yaTxUYWI+OmNjbG9zZQorCisiIEJ1ZmVycyBtZW51CittZW51dHJhbnMgJkJ1ZmZlcnMJICAgJkJhZmVyaQorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51ICAgJkF6dXJpcmFqCittZW51dHJhbnMgRGVsZXRlCSAgICZPYnJpc2kKK21lbnV0cmFucyAmQWx0ZXJuYXRlCSAgIEEmbHRlcm5hdGl2bmkKK21lbnV0cmFucyAmTmV4dAkJICAgJlNsZWRlY2kKK21lbnV0cmFucyAmUHJldmlvdXMJICAgJlByZXRob2RuaQorbWVudXRyYW5zIFtOb1wgRmlsZV0JICAgW05lbWFcIGRhdG90ZWtlXQorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJICAgICZQcm96b3IKK21lbnV0cmFucyAmTmV3PFRhYj5eV24JCSAgICAmTm92aTxUYWI+XlduCittZW51dHJhbnMgUyZwbGl0PFRhYj5eV3MJICAgICZQb2RlbGk8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4gICAgUG9kZWxpXCBzYVwgJmFsdGVybmF0aXZuaW08VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdiAgIFBvZGVsaVwgJnVzcHJhdm5vPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyICAgIFBvZGVsaVwgemFcIHByZWdsZWRcICZkYXRvdGVrYQorbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCSAgICAmWmF0dm9yaTxUYWI+XldjCittZW51dHJhbnMgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvICBaYXR2b3JpXCAmb3N0YWxlPFRhYj5eV28KKyJtZW51dHJhbnMgTmUmeHQ8VGFiPl5XdyAgICAgICAmU2xlZGVjaTxUYWI+Xld3CisibWVudXRyYW5zIFAmcmV2aW91czxUYWI+XldXCSAgUCZyZXRob2RuaTxUYWI+XldXCittZW51dHJhbnMgTW92ZVwgJlRvCQkgICAgUHJlJm1lc3RpCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkgICAgJktydXpub1wgbmFnb3JlPFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IgICAgIEtydXpub1wgbmFkb2wmZTxUYWI+XldyCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JICAgICZJc3RlXCB2ZWxpY2luZTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JICAgIE1ha3NpbWFsbmFcICZ2aXNpbmE8VGFiPl5XXworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXyAgICAgTWluaW1hJmxuYVwgdmlzaW5hPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJICAgIE1ha3NpbWFsbmFcICZzaXJpbmE8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwgICAgIE1pbmltYWxuYVwgc2kmcmluYTxUYWI+XlcxXHwKKworIiBXaW5kb3cvTW92ZSBUbworbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJICZWcmg8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkgJlBvZG5vemplPFRhYj5eV0oKK21lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICSBVJmxldm88VGFiPl5XSAorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCSBVJmRlc25vPFRhYj5eV0wKKworIiBUaGUgcG9wdXAgbWVudQorbWVudXRyYW5zICZVbmRvCQkgICAgICAmVnJhdGkKK21lbnV0cmFucyBDdSZ0CQkgICAgICAmSXNlY2kKK21lbnV0cmFucyAmQ29weQkJICAgICAgJktvcGlyYWoKK21lbnV0cmFucyAmUGFzdGUJICAgICAgJlViYWNpCittZW51dHJhbnMgJkRlbGV0ZQkgICAgICBJJnpicmlzaQorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlICAgQmlyYWpcICZwcmF2b3VnYW9ubworbWVudXRyYW5zIFNlbGVjdFwgJldvcmQgICAgICAgSXphYmVyaVwgJnJlYworbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUgICAgICAgSXphYmVyaVwgciZlZAorbWVudXRyYW5zIFNlbGVjdFwgJkJsb2NrICAgICAgSXphYmVyaVwgJmJsb2sKK21lbnV0cmFucyBTZWxlY3RcICZBbGwJICAgICAgSXphYmVyaVwgJnN2ZQorCisiIFRoZSBHVUkgdG9vbGJhcgoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorICAgIHRtZW51IFRvb2xCYXIuT3BlbiAgICAgVWNpdGFqCisgICAgdG1lbnUgVG9vbEJhci5TYXZlICAgICBTYWN1dmFqCisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsICBTYWN1dmFqIHN2ZQorICAgIHRtZW51IFRvb2xCYXIuUHJpbnQgICAgU3RhbXBhagorICAgIHRtZW51IFRvb2xCYXIuVW5kbyAgICAgVnJhdGkKKyAgICB0bWVudSBUb29sQmFyLlJlZG8gICAgIFBvdnJhdGkKKyAgICB0bWVudSBUb29sQmFyLkN1dCAgICAgIElzZWNpCisgICAgdG1lbnUgVG9vbEJhci5Db3B5ICAgICBLb3BpcmFqCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZSAgICBVYmFjaQorICAgIHRtZW51IFRvb2xCYXIuRmluZCAgICAgTmFkamkKKyAgICB0bWVudSBUb29sQmFyLkZpbmROZXh0IE5hZGppIHNsZWRlY2kKKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2IE5hZGppIHByZXRob2RuaQorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZSAgWmFtZW5pCisgICAgdG1lbnUgVG9vbEJhci5OZXcgICAgICBOb3ZpCisgICAgdG1lbnUgVG9vbEJhci5XaW5TcGxpdCBQb2RlbGkgcHJvem9yCisgICAgdG1lbnUgVG9vbEJhci5XaW5NYXggICBNYWtzaW1hbG5hIHZpc2luYQorICAgIHRtZW51IFRvb2xCYXIuV2luTWluICAgTWluaW1hbG5hIHZpc2luYQorICAgIHRtZW51IFRvb2xCYXIuV2luVlNwbGl0ICAgUG9kZWxpIHVzcHJhdm5vCisgICAgdG1lbnUgVG9vbEJhci5XaW5NYXhXaWR0aCBNYWtzaW1hbG5hIHNpcmluYQorICAgIHRtZW51IFRvb2xCYXIuV2luTWluV2lkdGggTWluaW1hbG5hIHNpcmluYQorICAgIHRtZW51IFRvb2xCYXIuV2luQ2xvc2UgWmF0dm9yaSBwcm96b3IKKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuIFVjaXRhaiBzZWFuc3UKKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuIFNhY3V2YWogc2VhbnN1CisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQgICBJenZyc2kgc3BpcworICAgIHRtZW51IFRvb2xCYXIuTWFrZSAgICAgJ21ha2UnCisgICAgdG1lbnUgVG9vbEJhci5TaGVsbCAgICBPcGVyYXRpdm5vIG9rcnV6ZW5qZQorICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MgTmFwcmF2aSBvem5ha2UKKyAgICB0bWVudSBUb29sQmFyLlRhZ0p1bXAgIElkaSBuYSBvem5ha3UKKyAgICB0bWVudSBUb29sQmFyLkhlbHAgICAgIFBvbW9jCisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscCBOYWRqaSBvYmphc25qZW5qZQorICBlbmRmdW4KK2VuZGlmCisKKyIgU3ludGF4IG1lbnUKK21lbnV0cmFucyAmU3ludGF4ICZTaW50YWtzYQorbWVudXRyYW5zICZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51ICBJemJvclwgJ2ZpbGV0eXBlJ1wgaXpcICZtZW5pamEKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seSAgIFBvZGUmc2lcICdzeW50YXgnXCBzYW1vCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vICBQb2Rlc2lcICdmaWxldHlwZSdcICZ0YWtvZGplCittZW51dHJhbnMgJk9mZiAgICAgICAmSXNrbGp1Y2VubworbWVudXRyYW5zICZNYW51YWwgICAgJlJ1Y25vCittZW51dHJhbnMgQSZ1dG9tYXRpYyAgICAmQXV0b21hdHNraQorbWVudXRyYW5zIG9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZSAgICAgRGEvbmVcIHphXCBvdnVcICZkYXRvdGVrdQorbWVudXRyYW5zIENvJmxvclwgdGVzdCAgICAgUHJvdmVyYVwgJmJvamEKK21lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0IFByb3ZlcmFcIGlzdGkmY2FuamEKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwgIFByZXR2b3JpXCAmdVwgSFRNTAorCisiIGRpYWxvZyB0ZXh0cworbGV0IG1lbnV0cmFuc19oZWxwX2RpYWxvZyA9ICJVbmVzaXRlIG5hcmVkYnUgaWxpIHJlYyBjaWplIHBvamFzbmplbmplIHRyYXppdGU6XG5cbkRvZGFqdGUgaV8gemEgbmFyZWRiZSB1bm9zYSAobnByLiBpX0NUUkwtWClcbkRvZGFqdGUgY18gemEgbmFyZWRiZSBrb21hbmRub2cgcmV6aW1hIChucHIuIHNfPERlbD4pXG5Eb2RhanRlICcgemEgaW1lbmEgb3BjaWphIChucHIuICdzaGlmdHdpZHRoJykiCisKK2xldCBnOm1lbnV0cmFuc19wYXRoX2RpYWxvZyA9ICJVbmVzaXRlIHB1dCBwcmV0cmFnZSB6YSBkYXRvdGVrZVxuUmF6ZHZvaml0ZSB6YXJlemltYSBpbWVuYSBkaXJla3RvcmlqdW1hLiIKKworbGV0IGc6bWVudXRyYW5zX3RhZ3NfZGlhbG9nID0gIlVuZXNpdGUgaW1lbmEgZGF0b3Rla2Egc2Egb3puYWthbWFcblJhemR2b2ppdGUgemFyZXppbWEgaW1lbmEuIgorCitsZXQgZzptZW51dHJhbnNfdGV4dHdpZHRoX2RpYWxvZyA9ICJVbmVzaXRlIG5vdnUgc2lyaW51IHRla3N0YSAoMCBzcHJlY2F2YSBwcmVsb20pIgorCitsZXQgZzptZW51dHJhbnNfZmlsZWZvcm1hdF9kaWFsb2cgPSAiSXphYmVyaXRlIHZyc3R1IGRhdG90ZWtlIgorCitsZXQgbWVudXRyYW5zX25vX2ZpbGUgPSAiW05lbWEgZGF0b3Rla2VdIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfc3JfeXUuaXNvXzg4NTktMi52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9zcl95dS5pc29fODg1OS0yLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTIxMjRjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfc3JfeXUuaXNvXzg4NTktMi52aW0KQEAgLTAsMCArMSwyNTkgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6IFNlcmJpYW4KKyIgTWFpbnRhaW5lcjogQWxla3NhbmRhciBKZWxlbmFrIDxhamVsZW5hayBBVCB5YWhvby5jb20+CisiIExhc3QgQ2hhbmdlOglGcmksIDMwIE1heSAyMDAzIDEyOjA0OjQ4IC0wNDAwCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorc2NyaXB0ZW5jb2RpbmcgaXNvODg1OS0yCisKKyIgSGVscCBtZW51CittZW51dHJhbnMgJkhlbHAJCSAgICAgIFBvbW8m5gorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPiAgJlByZWdsZWQ8VGFiPjxGMT4KK21lbnV0cmFucyAmVXNlclwgTWFudWFsICAgICAgICZVcHV0c3R2b1wgemFcIGtvcmlzbmlrZQorbWVudXRyYW5zICZIb3ctdG9cIGxpbmtzICAgICAgJktha29cIGRhXC5cLlwuCittZW51dHJhbnMgJkZpbmQJCSAgICAgICZOYfBpCittZW51dHJhbnMgJkNyZWRpdHMJICAgICAgJlphc2x1Z2UKK21lbnV0cmFucyBDbyZweWluZwkgICAgICBQJnJldXppbWFuamUKK21lbnV0cmFucyBPJnJwaGFucwkgICAgICAmU2lyb+hp5mkKK21lbnV0cmFucyAmVmVyc2lvbgkgICAgICAmVmVyemlqYQorbWVudXRyYW5zICZBYm91dAkgICAgICAmT1wgcHJvZ3JhbXUKKworIiBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCSAgICAmRGF0b3Rla2EKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJICAgICZPdHZvcmlcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcCAmUG9kZWxpLW90dm9yaVwuXC5cLjxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJICAgICZOb3ZhPFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCSAgICAmWmF0dm9yaTxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkgICAgJlNh6HV2YWo8VGFiPjp3CittZW51dHJhbnMgU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2ICBTYeh1dmFqXCAma2FvXC5cLlwuPFRhYj46c2F2CittZW51dHJhbnMgU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuICBQb2RlbGlcIGlcICZ1cG9yZWRpXCBzYVwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4gUG8mZGVsaVwgaVwgcHJlcHJhdmlcIHNhXC5cLlwuCittZW51dHJhbnMgJlByaW50CQkgICAgqXRhJm1wYWoKK21lbnV0cmFucyBTYSZ2ZS1FeGl0PFRhYj46d3FhCSAgICBTYeh1dmFqXCBpXCB6YSZ2crlpPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJICAgIEsmcmFqPFRhYj46cWEKKworIiBFZGl0IG1lbnUKK21lbnV0cmFucyAmRWRpdAkJCSAmVXJl8Gl2YW5qZQorbWVudXRyYW5zICZVbmRvPFRhYj51CQkgJlZyYXRpPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkgJlBvdnJhdGk8VGFiPl5SCittZW51dHJhbnMgUmVwJmVhdDxUYWI+XC4JIFAmb25vdmk8VGFiPlwuCittZW51dHJhbnMgQ3UmdDxUYWI+Iit4CQkgSXNlJmNpPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkgJktvcGlyYWo8VGFiPiIreQorbWVudXRyYW5zICZQYXN0ZTxUYWI+IitnUAkgJlViYWNpPFRhYj4iK2dQCittZW51dHJhbnMgJlBhc3RlPFRhYj4iK1AJJlViYWNpPFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkgU3RhdmlcIHByZSZkPFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkgU3RhdmlcICZpemE8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJIEl6JmJyablpPFRhYj54CittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHICBJemFiZXJpXCBzdiZlPFRhYj5nZ1ZHCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCSAmTmHwaVwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4gTmHwaVwgaVwgJnphbWVuaVwuXC5cLgorbWVudXRyYW5zIFNldHRpbmdzXCAmV2luZG93CSBQJnJvem9yXCBwb2RluWF2YW5qYQorbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCSBPcCa5dGFcIHBvZGW5YXZhbmphCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCSBQb2RluWF2YW5qYVwgemFcIGRhJnRvdGVrZQorbWVudXRyYW5zICZTaGlmdHdpZHRoCQkgJlBvbWVyYWoKK21lbnV0cmFucyBTb2Z0XCAmVGFic3RvcAkgJk1la2FcIHRhYnVsYWNpamEKK21lbnV0cmFucyBUZSZ4dFwgV2lkdGhcLlwuXC4JICapaXJpbmFcIHRla3N0YVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JICZWcnN0YVwgZGF0b3Rla2VcLlwuXC4KK21lbnV0cmFucyBDJm9sb3JcIFNjaGVtZQkgQm8mamUKK21lbnV0cmFucyAmS2V5bWFwCQkgUHJlcyZsaWthdmFuamVcIHRhc3RhdHVyZQorbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JIEl6Ym9yXCAmZm9udGFcLlwuXC4KKworIiBFZGl0L0dsb2JhbCBTZXR0aW5ncworbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzISBOYWdsYXNpXCAmb2JyYXpjZVwgKGRhL25lKTxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEgWmFuZW1hcmlcIFx2ZWxp6GludVwgJnNsb3ZhXCAoZGEvbmUpPFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtISBQcm92ZXJpXCBwcmF0ZeZ1XCAmemFncmFkdVwgKGRhL25lKTxUYWI+OnNldFwgc20hCittZW51dHJhbnMgJkNvbnRleHRcIGxpbmVzICBWaWRsaml2aVwgJnJlZG92aQorbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0ICAgVmlydHVlbG5vXCAmdXJl8Gl2YW5qZQorbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCVJlvmltXCB1Jm5vc2FcIChkYS9uZSk8VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEgICAgICcmVmknXCBzYWdsYXNub1wgKGRhL25lKTxUYWI+OnNldFwgY3AhCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLiBQdXRhbmphXCAmcHJldHJhZ2VcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLiAgICZEYXRvdGVrZVwgb3puYWthXC5cLlwuCittZW51dHJhbnMgVG9nZ2xlXCAmVG9vbGJhciAgICBMaW5pamFcIHNhXCAmYWxhdGthbWFcIChkYS9uZSkKK21lbnV0cmFucyBUb2dnbGVcICZCb3R0b21cIFNjcm9sbGJhciAgIERvbmphXCBsJmluaWphXCBrbGl6YW5qYVwgKGRhL25lKQorbWVudXRyYW5zIFRvZ2dsZVwgJkxlZnRcIFNjcm9sbGJhciAgJkxldmFcIGxpbmlqYVwga2xpemFuamFcIChkYS9uZSkKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyICZEZXNuYVwgbGluaWphXCBrbGl6YW5qYVwgKGRhL25lKQorCisiIEVkaXQvR2xvYmFsIFNldHRpbmdzL1ZpcnR1YWwgRWRpdAorbWVudXRyYW5zIE5ldmVyCQkgICAgICBOaWthZAorbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24gICAgSXpib3JcIGJsb2thCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCSAgICAgIFJlvmltXCB1bm9zYQorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydCAgQmxva1wgaVwgdW5vcworbWVudXRyYW5zIEFsd2F5cwkgICAgICBVdmVrCisKKyIgRWRpdC9GaWxlIFNldHRpbmdzCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmTnVtYmVyaW5nPFRhYj46c2V0XCBudSEgICBSZWRuaVwgJmJyb2pldmlcIChkYS9uZSk8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCSAgIFJlvmltXCAmbGlzdGVcIChkYS9uZSk8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJICAgT2JhdmlqYW5qZVwgJnJlZG92YVwgKGRhL25lKTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyISAgIFByZWxvbWlcICZuYVwgcmXoXCAoZGEvbmUpPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCSAgIFJhem1hY2lcIHVtZXN0b1wgJnRhYnVsYWNpamVcIChkYS9uZSk8VGFiPjpzZXRcIGV0IQorbWVudXRyYW5zIFRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEJQXV0by0mdXZsYehlbmplXCAoZGEvbmUpPFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQkgICAmQ2UtdXZsYehlbmplXCAoZGEvbmUpPFRhYj46c2V0XCBjaW4hCisKKyIgRWRpdC9LZXltYXAKK21lbnV0cmFucyBOb25lIE5pamVkYW4KKworIiBUb29scyBtZW51CittZW51dHJhbnMgJlRvb2xzCSZBbGF0a2UKK21lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dIFNrb+hpXCBuYVwgJm92dVwgb3puYWt1PFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJIFNrb+hpXCAmbmF0cmFnPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkgSXpncmFkaVwgJmRhdG90ZWt1XCBvem5ha2EKK21lbnV0cmFucyAmRm9sZGluZwkgICAgICAmUG9kdmlqYW5qZQorbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQkgIFMmdHZvcmlcIHBvZHZpanV0YWs8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCSAgTyZicmm5aVwgcG9kdmlqdXRhazxUYWI+emQKK21lbnV0cmFucyBEZWxldGVcICZBbGxcIEZvbGRzPFRhYj56RAkgIE9icmm5aVwgc3ZlXCBwbyZkdmlqdXRrZTxUYWI+ekQKK21lbnV0cmFucyBGb2xkXCBjb2x1bW5cICZ3aWR0aAkJICCpaXJpbmFcICZyZWRhXCBwb2R2aWp1dGthCittZW51dHJhbnMgJkRpZmYJCSAgICAgICZVcG9yZfBpdmFuamUKK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UgICAgICdtYWsmZSc8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsICAgICBTcGlzYWtcICZncmW5YWthPFRhYj46Y2wKK21lbnV0cmFucyBMJmlzdFwgTWVzc2FnZXM8VGFiPjpjbCEgIFNwJmlzYWtcIHBvcnVrYTxUYWI+OmNsIQorbWVudXRyYW5zICZOZXh0XCBFcnJvcjxUYWI+OmNuCSAgICBTJmxlZGXmYVwgZ3JluWthPFRhYj46Y24KK21lbnV0cmFucyAmUHJldmlvdXNcIEVycm9yPFRhYj46Y3AgIFByZSZ0aG9kbmFcIGdyZblrYTxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZCAgICBTdGFyaVwgc3Bpc2EmazxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3ICAgIE5vJnZpXCBzcGlzYWs8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJICAgIFByb3pvclwgc2FcIGcmcmW5a2FtYQorbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCSAgICBJJnphYmVyaVwgcHJldm9kaW9jYQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJICAgUHJldHZvcmlcIHVcICZIRUtTPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtciAgICBWciZhdGlcIHVcIHBydm9iaXRhblwgb2JsaWs8VGFiPjolIXh4ZFwgLXIKKworIiBUb29scy9Gb2xkaW5nCittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkgICAmT21vZ3XmaS9wcmVraW5pXCBwb2R2aWphbmplPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CSAgJlBva2G+aVwgcmVkXCBzYVwga3Vyc29yb208VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eCBQb2thvmlcICZzYW1vXCByZWRcIHNhXCBrdXJzb3JvbTxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptICAgJlphdHZvcmlcIHZpuWVcIHBvZHZpanV0YWthPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0gICAgWmF0dm9yaVwgcyZ2ZVwgcG9kdmlqdXRrZTxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyICAgIE90dm9yaVwgdmm5JmVcIHBvZHZpanV0YWthPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UiAgICAgTyZ0dm9yaVwgc3ZlXCBwb2R2aWp1dGtlPFRhYj56UgorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCSAgICAgICAmTmHoaW5cIHBvZHZpamFuamEKKworIiBUb29scy9Gb2xkaW5nL0ZvbGQgTWV0aG9kCittZW51dHJhbnMgTSZhbnVhbAkmUnXobm8KK21lbnV0cmFucyBJJm5kZW50CSZVdnXoZW5vc3QKK21lbnV0cmFucyBFJnhwcmVzc2lvbgkmSXpyYXoKK21lbnV0cmFucyBTJnludGF4CSZTaW50YWtzYQorIm1lbnV0cmFucyAmRGlmZgorbWVudXRyYW5zIE1hJnJrZXIJJk96bmFrYQorCisiIFRvb2xzL0RpZmYKK21lbnV0cmFucyAmVXBkYXRlCSZBvnVyaXJhagorbWVudXRyYW5zICZHZXRcIEJsb2NrCSZQcmlodmF0aVwgaXptZW51CittZW51dHJhbnMgJlB1dFwgQmxvY2sJUHJlJmJhY2lcIGl6bWVudQorCisiIFRvb2xzL0Vycm9yIFdpbmRvdworbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luICAgJkG+dXJpcmFqPFRhYj46Y3dpbgorbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4gICAgJk90dm9yaTxUYWI+OmNvcGVuCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlICAmWmF0dm9yaTxUYWI+OmNjbG9zZQorCisiIEJ1ZmVycyBtZW51CittZW51dHJhbnMgJkJ1ZmZlcnMJICAgJkJhZmVyaQorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51ICAgJkG+dXJpcmFqCittZW51dHJhbnMgRGVsZXRlCSAgICZPYnJpuWkKK21lbnV0cmFucyAmQWx0ZXJuYXRlCSAgIEEmbHRlcm5hdGl2bmkKK21lbnV0cmFucyAmTmV4dAkJICAgJlNsZWRl5mkKK21lbnV0cmFucyAmUHJldmlvdXMJICAgJlByZXRob2RuaQorbWVudXRyYW5zIFtOb1wgRmlsZV0JICAgW05lbWFcIGRhdG90ZWtlXQorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJICAgICZQcm96b3IKK21lbnV0cmFucyAmTmV3PFRhYj5eV24JCSAgICAmTm92aTxUYWI+XlduCittZW51dHJhbnMgUyZwbGl0PFRhYj5eV3MJICAgICZQb2RlbGk8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4gICAgUG9kZWxpXCBzYVwgJmFsdGVybmF0aXZuaW08VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdiAgIFBvZGVsaVwgJnVzcHJhdm5vPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyICAgIFBvZGVsaVwgemFcIHByZWdsZWRcICZkYXRvdGVrYQorbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCSAgICAmWmF0dm9yaTxUYWI+XldjCittZW51dHJhbnMgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvICBaYXR2b3JpXCAmb3N0YWxlPFRhYj5eV28KKyJtZW51dHJhbnMgTmUmeHQ8VGFiPl5XdyAgICAgICAmU2xlZGXmaTxUYWI+Xld3CisibWVudXRyYW5zIFAmcmV2aW91czxUYWI+XldXCSAgUCZyZXRob2RuaTxUYWI+XldXCittZW51dHJhbnMgTW92ZVwgJlRvCQkgICAgUHJlJm1lc3RpCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkgICAgJktydb5ub1wgbmFnb3JlPFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IgICAgIEtydb5ub1wgbmFkb2wmZTxUYWI+XldyCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JICAgICZJc3RlXCB2ZWxp6GluZTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JICAgIE1ha3NpbWFsbmFcICZ2aXNpbmE8VGFiPl5XXworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXyAgICAgTWluaW1hJmxuYVwgdmlzaW5hPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJICAgIE1ha3NpbWFsbmFcICa5aXJpbmE8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwgICAgIE1pbmltYWxuYVwguWkmcmluYTxUYWI+XlcxXHwKKworIiBXaW5kb3cvTW92ZSBUbworbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJICZWcmg8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkgJlBvZG5vvmplPFRhYj5eV0oKK21lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICSBVJmxldm88VGFiPl5XSAorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCSBVJmRlc25vPFRhYj5eV0wKKworIiBUaGUgcG9wdXAgbWVudQorbWVudXRyYW5zICZVbmRvCQkgICAgICAmVnJhdGkKK21lbnV0cmFucyBDdSZ0CQkgICAgICAmSXNlY2kKK21lbnV0cmFucyAmQ29weQkJICAgICAgJktvcGlyYWoKK21lbnV0cmFucyAmUGFzdGUJICAgICAgJlViYWNpCittZW51dHJhbnMgJkRlbGV0ZQkgICAgICBJJnpicmm5aQorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlICAgQmlyYWpcICZwcmF2b3VnYW9ubworbWVudXRyYW5zIFNlbGVjdFwgJldvcmQgICAgICAgSXphYmVyaVwgJnJl6AorbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUgICAgICAgSXphYmVyaVwgciZlZAorbWVudXRyYW5zIFNlbGVjdFwgJkJsb2NrICAgICAgSXphYmVyaVwgJmJsb2sKK21lbnV0cmFucyBTZWxlY3RcICZBbGwJICAgICAgSXphYmVyaVwgJnN2ZQorCisiIFRoZSBHVUkgdG9vbGJhcgoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorICAgIHRtZW51IFRvb2xCYXIuT3BlbgkgICBV6Gl0YWoKKyAgICB0bWVudSBUb29sQmFyLlNhdmUJICAgU2HodXZhagorICAgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbCAgU2HodXZhaiBzdmUKKyAgICB0bWVudSBUb29sQmFyLlByaW50ICAgIKl0YW1wYWoKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JICAgVnJhdGkKKyAgICB0bWVudSBUb29sQmFyLlJlZG8JICAgUG92cmF0aQorICAgIHRtZW51IFRvb2xCYXIuQ3V0CSAgIElzZWNpCisgICAgdG1lbnUgVG9vbEJhci5Db3B5CSAgIEtvcGlyYWoKKyAgICB0bWVudSBUb29sQmFyLlBhc3RlICAgIFViYWNpCisgICAgdG1lbnUgVG9vbEJhci5GaW5kCSAgIE5h8GkKKyAgICB0bWVudSBUb29sQmFyLkZpbmROZXh0IE5h8Gkgc2xlZGXmaQorICAgIHRtZW51IFRvb2xCYXIuRmluZFByZXYgTmHwaSBwcmV0aG9kbmkKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UgIFphbWVuaQorICAgIHRtZW51IFRvb2xCYXIuTmV3CSAgIE5vdmkKKyAgICB0bWVudSBUb29sQmFyLldpblNwbGl0IFBvZGVsaSBwcm96b3IKKyAgICB0bWVudSBUb29sQmFyLldpbk1heCAgIE1ha3NpbWFsbmEgdmlzaW5hCisgICAgdG1lbnUgVG9vbEJhci5XaW5NaW4gICBNaW5pbWFsbmEgdmlzaW5hCisgICAgdG1lbnUgVG9vbEJhci5XaW5WU3BsaXQgICBQb2RlbGkgdXNwcmF2bm8KKyAgICB0bWVudSBUb29sQmFyLldpbk1heFdpZHRoIE1ha3NpbWFsbmEguWlyaW5hCisgICAgdG1lbnUgVG9vbEJhci5XaW5NaW5XaWR0aCBNaW5pbWFsbmEguWlyaW5hCisgICAgdG1lbnUgVG9vbEJhci5XaW5DbG9zZSBaYXR2b3JpIHByb3pvcgorICAgIHRtZW51IFRvb2xCYXIuTG9hZFNlc24gVehpdGFqIHNlYW5zdQorICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24gU2HodXZhaiBzZWFuc3UKKyAgICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdCAgIEl6dnK5aSBzcGlzCisgICAgdG1lbnUgVG9vbEJhci5NYWtlCSAgICdtYWtlJworICAgIHRtZW51IFRvb2xCYXIuU2hlbGwgICAgT3BlcmF0aXZubyBva3J1vmVuamUKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzIE5hcHJhdmkgb3puYWtlCisgICAgdG1lbnUgVG9vbEJhci5UYWdKdW1wICBJZGkgbmEgb3puYWt1CisgICAgdG1lbnUgVG9vbEJhci5IZWxwCSAgIFBvbW/mCisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscCBOYfBpIG9iamG5bmplbmplCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXggJlNpbnRha3NhCittZW51dHJhbnMgJlNob3dcIGZpbGV0eXBlc1wgaW5cIG1lbnUgIEl6Ym9yXCAnZmlsZXR5cGUnXCBpelwgJm1lbmlqYQorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CSBQb2RlJnNpXCAnc3ludGF4J1wgc2FtbworbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbyAgUG9kZXNpXCAnZmlsZXR5cGUnXCAmdGFrb/BlCittZW51dHJhbnMgJk9mZgkgICAgICZJc2tsanXoZW5vCittZW51dHJhbnMgJk1hbnVhbCAgICAmUnXobm8KK21lbnV0cmFucyBBJnV0b21hdGljCSZBdXRvbWF0c2tpCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlICAgICBEYS9uZVwgemFcIG92dVwgJmRhdG90ZWt1CittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CSAgIFByb3ZlcmFcICZib2phCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdCBQcm92ZXJhXCBpc3RpJmNhbmphCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MICBQcmV0dm9yaVwgJnVcIEhUTUwKKworIiBkaWFsb2cgdGV4dHMKK2xldCBtZW51dHJhbnNfaGVscF9kaWFsb2cgPSAiVW5lc2l0ZSBuYXJlZGJ1IGlsaSByZegg6GlqZSBwb2phuW5qZW5qZSB0cmG+aXRlOlxuXG5Eb2RhanRlIGlfIHphIG5hcmVkYmUgdW5vc2EgKG5wci4gaV9DVFJMLVgpXG5Eb2RhanRlIGNfIHphIG5hcmVkYmUga29tYW5kbm9nIHJlvmltYSAobnByLiBzXzxEZWw+KVxuRG9kYWp0ZSAnIHphIGltZW5hIG9wY2lqYSAobnByLiAnc2hpZnR3aWR0aCcpIgorCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAiVW5lc2l0ZSBwdXQgcHJldHJhZ2UgemEgZGF0b3Rla2VcblJhemR2b2ppdGUgemFyZXppbWEgaW1lbmEgZGlyZWt0b3JpanVtYS4iCisKK2xldCBnOm1lbnV0cmFuc190YWdzX2RpYWxvZyA9ICJVbmVzaXRlIGltZW5hIGRhdG90ZWthIHNhIG96bmFrYW1hXG5SYXpkdm9qaXRlIHphcmV6aW1hIGltZW5hLiIKKworbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAiVW5lc2l0ZSBub3Z1ILlpcmludSB0ZWtzdGEgKDAgc3ByZehhdmEgcHJlbG9tKSIKKworbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIkl6YWJlcml0ZSB2cnN0dSBkYXRvdGVrZSIKKworbGV0IG1lbnV0cmFuc19ub19maWxlID0gIltOZW1hIGRhdG90ZWtlXSIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3NyX3l1Lmlzb184ODU5LTUudmltIGIvcnVudGltZS9sYW5nL21lbnVfc3JfeXUuaXNvXzg4NTktNS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkMzIyZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3NyX3l1Lmlzb184ODU5LTUudmltCkBAIC0wLDAgKzEsMjU5IEBACisiIE1lbnUgVHJhbnNsYXRpb25zOiBTZXJiaWFuCisiIE1haW50YWluZXI6IEFsZWtzYW5kYXIgSmVsZW5hayA8YWplbGVuYWsgQVQgeWFob28uY29tPgorIiBMYXN0IENoYW5nZToJRnJpLCAzMCBNYXkgMjAwMyAxMjowMjowNyAtMDQwMAorCisiIFF1aXQgd2hlbiBtZW51IHRyYW5zbGF0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLgoraWYgZXhpc3RzKCJkaWRfbWVudV90cmFucyIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBkaWRfbWVudV90cmFucyA9IDEKK3NjcmlwdGVuY29kaW5nIGlzbzg4NTktNQorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkgICAgICC/3tzeJvsKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4gICa/4NXT29XUPFRhYj48RjE+CittZW51dHJhbnMgJlVzZXJcIE1hbnVhbCAgICAgICAmw9/j4uHi0t5cINfQXCDa3uDY4d3Y2tUKK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcyAgICAgICa60NreXCDU0FwuXC5cLgorbWVudXRyYW5zICZGaW5kCQkgICAgICAmvdDy2AorbWVudXRyYW5zICZDcmVkaXRzCSAgICAgICa30OHb49PVCittZW51dHJhbnMgQ28mcHlpbmcJICAgICAgvybg1ePX2NzQ+tUKK21lbnV0cmFucyBPJnJwaGFucwkgICAgICAmwdjg3ufY+9gKK21lbnV0cmFucyAmVmVyc2lvbgkgICAgICAmstXg19j40AorbWVudXRyYW5zICZBYm91dAkgICAgICAmvlwg3+De0+DQ3OMKKworIiBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCSAgICAmtNDi3uLV2tAKK21lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJICAgICa+4tLe4NhcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcCAmv97U1dvYLd7i0t7g2FwuXC5cLjxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJICAgICa93tLQPFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCSAgICAmt9Di0t7g2DxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkgICAgJsHQ5+PS0Pg8VGFiPjp3CittZW51dHJhbnMgU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2ICDB0Ofj0tD4XCAm2tDeXC5cLlwuPFRhYj46c2F2CittZW51dHJhbnMgU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuICC/3tTV29hcINhcICbj397g1dTYXCDh0FwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4gv94m1NXb2Fwg2Fwg3+DV3+DQ0thcIOHQXC5cLlwuCittZW51dHJhbnMgJlByaW50CQkgICAgyOLQJtzf0PgKK21lbnV0cmFucyBTYSZ2ZS1FeGl0PFRhYj46d3FhCSAgICDB0Ofj0tD4XCDYXCDX0CbS4OjYPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJICAgILom4ND4PFRhYj46cWEKKworIiBFZGl0IG1lbnUKK21lbnV0cmFucyAmRWRpdAkJCSAmw+DV8tjS0PrVCittZW51dHJhbnMgJlVuZG88VGFiPnUJCSAmsuDQ4tg8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCSAmv97S4NDi2DxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkgvybe3d7S2DxUYWI+XC4KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCSC44dUm5tg8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCSAmut7f2ODQ+DxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCSAmw9HQ5tg8VGFiPiIrZ1AKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrUAkmw9HQ5tg8VGFiPiIrZ1AKK21lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCSDB4tDS2Fwg3+DVJtQ8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCSDB4tDS2FwgJtjX0DxUYWI+XXAKK21lbnV0cmFucyAmRGVsZXRlPFRhYj54CQkguNcm0eDY6Ng8VGFiPngKK21lbnV0cmFucyAmU2VsZWN0XCBhbGw8VGFiPmdnVkcgILjX0NHV4NhcIOHSJtU8VGFiPmdnVkcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJICa90PLYXC5cLlwuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZVwuXC5cLiC90PLYXCDYXCAm19Dc1d3YXC5cLlwuCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJIL8m4N7X3uBcIN/e1NXo0NLQ+tAKK21lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkgvt8m6OLQXCDf3tTV6NDS0PrQCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCSC/3tTV6NDS0PrQXCDX0Fwg1NAm4t7i1drVCittZW51dHJhbnMgJlNoaWZ0d2lkdGgJCSAmv97c1eDQ+AorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCSAmvNXa0Fwg4tDR49vQ5tj40AorbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkgJsjY4Njd0Fwg4tXa4eLQXC5cLlwuCittZW51dHJhbnMgJkZpbGVcIEZvcm1hdFwuXC5cLgkgJrLg4eLQXCDU0OLe4tXa1VwuXC5cLgorbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCSCx3ib41QorbWVudXRyYW5zICZLZXltYXAJCSC/4NXhJtvY2tDS0PrVXCDi0OHi0OLj4NUKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCSC419He4FwgJuTe3eLQXC5cLlwuCisKKyIgRWRpdC9HbG9iYWwgU2V0dGluZ3MKK21lbnV0cmFucyBUb2dnbGVcIFBhdHRlcm5cICZIaWdobGlnaHQ8VGFiPjpzZXRcIGhscyEgvdDT29Dh2FwgJt7R4NDX5tVcICjU0C/d1Sk8VGFiPjpzZXRcIGhscyEKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhILfQ3dXc0ODYXCBc0tXb2OfY3eNcICbh297S0FwgKNTQL93VKTxUYWI+OnNldFwgaWMhCittZW51dHJhbnMgVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEgv+De0tXg2Fwg3+DQ4tX741wgJtfQ0+DQ1ONcICjU0C/d1Sk8VGFiPjpzZXRcIHNtIQorbWVudXRyYW5zICZDb250ZXh0XCBsaW5lcyAgstjU+djS2FwgJuDV1N7S2AorbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0ICAgstjg4uPV293eXCAm4+DV8tjS0PrVCittZW51dHJhbnMgVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJwNXW2NxcIOMm3d7h0FwgKNTQL93VKTxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwISAgICAgJyZWaSdcIOHQ09vQ4d3eXCAo1NAv3dUpPFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuIL/j4tD60FwgJt/g1eLg0NPVXC5cLlwuCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4gICAmtNDi3uLV2tVcIN7X3dDa0FwuXC5cLgorbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIgICAgu9jd2PjQXCDh0FwgJtDb0OLa0NzQXCAo1NAv3dUpCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIgICC03vrQXCDbJtjd2PjQXCDa29jX0PrQXCAo1NAv3dUpCittZW51dHJhbnMgVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyICAmu9XS0Fwg29jd2PjQXCDa29jX0PrQXCAo1NAv3dUpCittZW51dHJhbnMgVG9nZ2xlXCAmUmlnaHRcIFNjcm9sbGJhciAmtNXh3dBcINvY3dj40Fwg2tvY19D60FwgKNTQL93VKQorCisiIEVkaXQvR2xvYmFsIFNldHRpbmdzL1ZpcnR1YWwgRWRpdAorbWVudXRyYW5zIE5ldmVyCQkgICAgICC92NrQ1AorbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24gICAguNfR3uBcINHb3trQCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCSAgICAgIMDV1tjcXCDj3d7h0AorbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydCAgsdve2lwg2Fwg493e4QorbWVudXRyYW5zIEFsd2F5cwkgICAgICDD0tXaCisKKyIgRWRpdC9GaWxlIFNldHRpbmdzCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmTnVtYmVyaW5nPFRhYj46c2V0XCBudSEgICDA1dTd2FwgJtHg3vjV0thcICjU0C/d1Sk8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCSAgIMDV1tjcXCAm29jh4tVcICjU0C/d1Sk8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJICAgvtHQ0tj40PrVXCAm4NXU3tLQXCAo1NAv3dUpPFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhICAgv+DV297c2FwgJt3QXCDg1edcICjU0C/d1Sk8VGFiPjpzZXRcIGxiciEKK21lbnV0cmFucyBUb2dnbGVcICZleHBhbmQtdGFiPFRhYj46c2V0XCBldCEJICAgwNDX3NDm2Fwg49zV4eLeXCAm4tDR49vQ5tj41VwgKNTQL93VKTxUYWI+OnNldFwgZXQhCittZW51dHJhbnMgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQmw4+LeLSbj0tvQ59X61VwgKNTQL93VKTxUYWI+OnNldFwgYWkhCittZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJICAgJsbVLePS29Dn1frVXCAo1NAv3dUpPFRhYj46c2V0XCBjaW4hCisKKyIgRWRpdC9LZXltYXAKK21lbnV0cmFucyBOb25lIL3Y+NXU0N0KKworIiBUb29scyBtZW51CittZW51dHJhbnMgJlRvb2xzCSaw29Di2tUKK21lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dIMHa3ufYXCDd0FwgJt7S41wg3tfd0NrjPFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJIMHa3ufYXCAm3dDi4NDTPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkguNfT4NDU2FwgJtTQ4t7i1drjXCDe193Q2tAKK21lbnV0cmFucyAmRm9sZGluZwkgICAgICAmv97U0tj40PrVCittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCSAgwSbi0t7g2Fwg397U0tj44+LQ2jxUYWI+emYKK21lbnV0cmFucyAmRGVsZXRlXCBGb2xkPFRhYj56ZAkJICC+JtHg2OjYXCDf3tTS2Pjj4tDaPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECSAgvtHg2OjYXCDh0tVcIN/eJtTS2Pjj4trVPFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbHVtblwgJndpZHRoCQkgIMjY4Njd0FwgJuDV1NBcIN/e1NLY+OPi2tAKK21lbnV0cmFucyAmRGlmZgkJICAgICAgJsPf3uDV8tjS0PrVCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlICAgICAnbWFrJtUnPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbCAgICAgwd/Y4dDaXCAm0+DV6NDa0DxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whICDB3ybY4dDaXCDf3uDj2tA8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkgICAgwSbb1dTV+9BcINPg1eja0DxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwICC/4NUm4uXe1N3QXCDT4NXo2tA8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQgICAgweLQ4NhcIOHf2OHQJto8VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldyAgICC93ibS2Fwg4d/Y4dDaPFRhYj46Y25ldworbWVudXRyYW5zIEVycm9yXCAmV2luZG93CSAgICC/4N7X3uBcIOHQXCDTJuDV6NrQ3NAKK21lbnV0cmFucyAmU2V0XCBDb21waWxlcgkgICAguCbX0NHV4NhcIN/g1dLe1Nje5tAKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCSAgIL/g1eLS3uDYXCDjXCAmxbW6wTxUYWI+OiUheHhkCittZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIgICAgsuAm0OLYXCDjXCDf4NLe0dji0N1cIN7R29jaPFRhYj46JSF4eGRcIC1yCisKKyIgVG9vbHMvRm9sZGluZworbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppICAgJr7c3tPj+9gv3+DV2tjd2Fwg397U0tj40PrVPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CSAgJr/e2tDW2Fwg4NXUXCDh0Fwg2uPg4d7g3tw8VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eCC/3trQ1thcICbh0NzeXCDg1dRcIOHQXCDa4+Dh3uDe3DxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptICAgJrfQ4tLe4NhcINLY6NVcIN/e1NLY+OPi0NrQPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0gICAgt9Di0t7g2Fwg4SbS1Vwg397U0tj44+La1TxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyICAgIL7i0t7g2Fwg0tjoJtVcIN/e1NLY+OPi0NrQPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UiAgICAgvibi0t7g2Fwg4dLVXCDf3tTS2Pjj4trVPFRhYj56UgorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCSAgICAgICAmvdDn2N1cIN/e1NLY+ND60AorCisiIFRvb2xzL0ZvbGRpbmcvRm9sZCBNZXRob2QKK21lbnV0cmFucyBNJmFudWFsCSbA4+fd3gorbWVudXRyYW5zIEkmbmRlbnQJJsPS4+fV3d7h4gorbWVudXRyYW5zIEUmeHByZXNzaW9uCSa41+DQ1worbWVudXRyYW5zIFMmeW50YXgJJsHY3eLQ2uHQCisibWVudXRyYW5zICZEaWZmCittZW51dHJhbnMgTWEmcmtlcgkmvtfd0NrQCisKKyIgVG9vbHMvRGlmZgorbWVudXRyYW5zICZVcGRhdGUJJrDW4+DY4ND4CittZW51dHJhbnMgJkdldFwgQmxvY2sJJr/g2OXS0OLYXCDY19zV3eMKK21lbnV0cmFucyAmUHV0XCBCbG9jawm/4NUm0dDm2Fwg2Nfc1d3jCisKKyIgVG9vbHMvRXJyb3IgV2luZG93CittZW51dHJhbnMgJlVwZGF0ZTxUYWI+OmN3aW4gICAmsNbj4Njg0Pg8VGFiPjpjd2luCittZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbiAgICAmvuLS3uDYPFRhYj46Y29wZW4KK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjY2xvc2UgICa30OLS3uDYPFRhYj46Y2Nsb3NlCisKKyIgQnVmZXJzIG1lbnUKK21lbnV0cmFucyAmQnVmZmVycwkgICAmsdDk1eDYCittZW51dHJhbnMgJlJlZnJlc2hcIG1lbnUgICAmsNbj4Njg0PgKK21lbnV0cmFucyBEZWxldGUJICAgJr7R4Njo2AorbWVudXRyYW5zICZBbHRlcm5hdGUJICAgsCbb4tXg3dDi2NLd2AorbWVudXRyYW5zICZOZXh0CQkgICAmwdvV1NX72AorbWVudXRyYW5zICZQcmV2aW91cwkgICAmv+DV4uXe1N3YCittZW51dHJhbnMgW05vXCBGaWxlXQkgICBbvdXc0Fwg1NDi3uLV2tVdCisKKyIgV2luZG93IG1lbnUKK21lbnV0cmFucyAmV2luZG93CQkgICAgJr/g3tfe4AorbWVudXRyYW5zICZOZXc8VGFiPl5XbgkJICAgICa93tLYPFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkgICAgJr/e1NXb2DxUYWI+XldzCittZW51dHJhbnMgU3AmbGl0XCBUb1wgIzxUYWI+XldeXiAgICC/3tTV29hcIOHQXCAm0Nvi1eDd0OLY0t3Y3DxUYWI+XldeXgorbWVudXRyYW5zIFNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2ICAgv97U1dvYXCAm4+Hf4NDS3d48VGFiPl5XdgorbWVudXRyYW5zIFNwbGl0XCBGaWxlXCBFJnhwbG9yZXIgICAgv97U1dvYXCDX0Fwg3+DV09vV1FwgJtTQ4t7i1drQCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJICAgICa30OLS3uDYPFRhYj5eV2MKK21lbnV0cmFucyBDbG9zZVwgJk90aGVyKHMpPFRhYj5eV28gILfQ4tLe4NhcICbe4eLQ29U8VGFiPl5XbworIm1lbnV0cmFucyBOZSZ4dDxUYWI+Xld3ICAgICAgICbB29XU1fvYPFRhYj5eV3cKKyJtZW51dHJhbnMgUCZyZXZpb3VzPFRhYj5eV1cJICC/JuDV4uXe1N3YPFRhYj5eV1cKK21lbnV0cmFucyBNb3ZlXCAmVG8JCSAgICC/4NUm3NXh4tgKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCSAgICAmuuDj1t3eXCDd0NPe4NU8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XciAgICAguuDj1t3eXCDd0NTe2ybVPFRhYj5eV3IKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkgICAgJrjh4tVcINLV29jn2N3VPFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkgICAgvNDa4djc0Nvd0FwgJtLY4djd0DxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfICAgICC82N3Y3NAm293QXCDS2OHY3dA8VGFiPl5XMV8KK21lbnV0cmFucyBNYXhcICZXaWR0aDxUYWI+XldcfAkgICAgvNDa4djc0Nvd0FwgJujY4Njd0DxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfCAgICAgvNjd2NzQ293QXCDo2Cbg2N3QPFRhYj5eVzFcfAorCisiIFdpbmRvdy9Nb3ZlIFRvCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkgJrLg5TxUYWI+XldLCittZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCSAmv97U3d7W+NU8VGFiPl5XSgorbWVudXRyYW5zICZMZWZ0XCBzaWRlPFRhYj5eV0gJIMMm29XS3jxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJIMMm1NXh3d48VGFiPl5XTAorCisiIFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCSAgICAgICay4NDi2AorbWVudXRyYW5zIEN1JnQJCSAgICAgICa44dXm2AorbWVudXRyYW5zICZDb3B5CQkgICAgICAmut7f2ODQ+AorbWVudXRyYW5zICZQYXN0ZQkgICAgICAmw9HQ5tgKK21lbnV0cmFucyAmRGVsZXRlCSAgICAgILgm19Hg2OjYCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UgICCx2ODQ+FwgJt/g0NLe49PQ3t3eCittZW51dHJhbnMgU2VsZWN0XCAmV29yZCAgICAgICC419DR1eDYXCAm4NXnCittZW51dHJhbnMgU2VsZWN0XCAmTGluZSAgICAgICC419DR1eDYXCDgJtXUCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sgICAgICC419DR1eDYXCAm0dve2gorbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkgICAgICC419DR1eDYXCAm4dLVCisKKyIgVGhlIEdVSSB0b29sYmFyCitpZiBoYXMoInRvb2xiYXIiKQorICBpZiBleGlzdHMoIipEb190b29sYmFyX3RtZW51IikKKyAgICBkZWxmdW4gRG9fdG9vbGJhcl90bWVudQorICBlbmRpZgorICBmdW4gRG9fdG9vbGJhcl90bWVudSgpCisgICAgdG1lbnUgVG9vbEJhci5PcGVuCSAgIMPn2OLQ+AorICAgIHRtZW51IFRvb2xCYXIuU2F2ZQkgICDB0Ofj0tD4CisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsICDB0Ofj0tD4IOHS1QorICAgIHRtZW51IFRvb2xCYXIuUHJpbnQgICAgyOLQ3N/Q+AorICAgIHRtZW51IFRvb2xCYXIuVW5kbwkgICCy4NDi2AorICAgIHRtZW51IFRvb2xCYXIuUmVkbwkgICC/3tLg0OLYCisgICAgdG1lbnUgVG9vbEJhci5DdXQJICAguOHV5tgKKyAgICB0bWVudSBUb29sQmFyLkNvcHkJICAgut7f2ODQ+AorICAgIHRtZW51IFRvb2xCYXIuUGFzdGUgICAgw9HQ5tgKKyAgICB0bWVudSBUb29sQmFyLkZpbmQJICAgvdDy2AorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQgvdDy2CDh29XU1fvYCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldiC90PLYIN/g1eLl3tTd2AorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZSAgt9Dc1d3YCisgICAgdG1lbnUgVG9vbEJhci5OZXcJICAgvd7S2AorICAgIHRtZW51IFRvb2xCYXIuV2luU3BsaXQgv97U1dvYIN/g3tfe4AorICAgIHRtZW51IFRvb2xCYXIuV2luTWF4ICAgvNDa4djc0Nvd0CDS2OHY3dAKKyAgICB0bWVudSBUb29sQmFyLldpbk1pbiAgILzY3djc0Nvd0CDS2OHY3dAKKyAgICB0bWVudSBUb29sQmFyLldpblZTcGxpdCAgIL/e1NXb2CDj4d/g0NLd3gorICAgIHRtZW51IFRvb2xCYXIuV2luTWF4V2lkdGggvNDa4djc0Nvd0CDo2ODY3dAKKyAgICB0bWVudSBUb29sQmFyLldpbk1pbldpZHRoILzY3djc0Nvd0CDo2ODY3dAKKyAgICB0bWVudSBUb29sQmFyLldpbkNsb3NlILfQ4tLe4Ngg3+De197gCisgICAgdG1lbnUgVG9vbEJhci5Mb2FkU2VzbiDD59ji0Pgg4dXQ3eHjCisgICAgdG1lbnUgVG9vbEJhci5TYXZlU2VzbiDB0Ofj0tD4IOHV0N3h4worICAgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0ICAguNfS4OjYIOHf2OEKKyAgICB0bWVudSBUb29sQmFyLk1ha2UJICAgJ21ha2UnCisgICAgdG1lbnUgVG9vbEJhci5TaGVsbCAgICC+39Xg0OLY0t3eIN7a4OPW1frVCisgICAgdG1lbnUgVG9vbEJhci5SdW5DdGFncyC90N/g0NLYIN7X3dDa1QorICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcCAguNTYIN3QIN7X3dDa4worICAgIHRtZW51IFRvb2xCYXIuSGVscAkgICC/3tze+worICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAgvdDy2CDe0fjQ6PrV+tUKKyAgZW5kZnVuCitlbmRpZgorCisiIFN5bnRheCBtZW51CittZW51dHJhbnMgJlN5bnRheCAmwdjd4tDa4dAKK21lbnV0cmFucyAmU2hvd1wgZmlsZXR5cGVzXCBpblwgbWVudSAguNfR3uBcICdmaWxldHlwZSdcINjXXCAm3NXd2PjQCittZW51dHJhbnMgU2V0XCAnJnN5bnRheCdcIG9ubHkJIL/e1NUm4dhcICdzeW50YXgnXCDh0NzeCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vICC/3tTV4dhcICdmaWxldHlwZSdcICbi0Nre8tUKK21lbnV0cmFucyAmT2ZmCSAgICAgJrjh2vnj59Xd3gorbWVudXRyYW5zICZNYW51YWwgICAgJsDj593eCittZW51dHJhbnMgQSZ1dG9tYXRpYwkmsOPi3tzQ4uHa2AorbWVudXRyYW5zIG9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZSAgICAgtNAv3dVcINfQXCDe0uNcICbU0OLe4tXa4worbWVudXRyYW5zIENvJmxvclwgdGVzdAkgICC/4N7S1eDQXCAm0d740AorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3Qgv+De0tXg0Fwg2OHi2Cbm0PrQCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MICC/4NXi0t7g2FwgJuNcIEhUTUwKKworIiBkaWFsb2cgdGV4dHMKK2xldCBtZW51dHJhbnNfaGVscF9kaWFsb2cgPSAiw93V4dji1SDd0ODV1NHjINjb2CDg1ecg59j41SDf3vjQ6PrV+tUg4uDQ1tji1TpcblxutN7U0Pji1SBpXyDX0CDd0ODV1NHVIOPd3uHQICjd3+AuIGlfQ1RSTC1YKVxutN7U0Pji1SBjXyDX0CDd0ODV1NHVINre3NDd1N3e0yDg1dbY3NAgKN3f4C4g4V88RGVsPilcbrTe1ND44tUgJyDX0CDY3NXd0CDe3+bY+NAgKN3f4C4gJ3NoaWZ0d2lkdGgnKSIKKworbGV0IGc6bWVudXRyYW5zX3BhdGhfZGlhbG9nID0gIsPd1eHY4tUg3+PiIN/g1eLg0NPVINfQINTQ4t7i1drVXG7A0NfU0t742OLVINfQ4NXX2NzQINjc1d3QINTY4NXa4t7g2Pjj3NAuIgorCitsZXQgZzptZW51dHJhbnNfdGFnc19kaWFsb2cgPSAiw93V4dji1SDY3NXd0CDU0OLe4tXa0CDh0CDe193Q2tDc0FxuwNDX1NLe+Nji1SDX0ODV19jc0CDY3NXd0C4iCisKK2xldCBnOm1lbnV0cmFuc190ZXh0d2lkdGhfZGlhbG9nID0gIsPd1eHY4tUg3d7S4yDo2ODY3eMg4tXa4eLQICgwIOHf4NXn0NLQIN/g1dve3CkiCisKK2xldCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2RpYWxvZyA9ICK419DR1eDY4tUg0uDh4uMg1NDi3uLV2tUiCisKK2xldCBtZW51dHJhbnNfbm9fZmlsZSA9ICJbvdXc0CDU0OLe4tXa1V0iCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9zcl95dS51dGYtOC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9zcl95dS51dGYtOC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzNTY2MwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3NyX3l1LnV0Zi04LnZpbQpAQCAtMCwwICsxLDI2MSBAQAorIiBNZW51IFRyYW5zbGF0aW9uczogU2VyYmlhbgorIiBNYWludGFpbmVyOiBBbGVrc2FuZGFyIEplbGVuYWsgPGFqZWxlbmFrIEFUIHlhaG9vLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CUZyaSwgMzAgTWF5IDIwMDMgMTA6MTc6MzkgRWFzdGVybiBEYXlsaWdodCBUaW1lCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorc2NyaXB0ZW5jb2RpbmcgdXRmLTgKKworIiBIZWxwIG1lbnUKK21lbnV0cmFucyAmSGVscAkJICAgICAg0J/QvtC80L4m0ZsKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4gICbQn9GA0LXQs9C70LXQtDxUYWI+PEYxPgorbWVudXRyYW5zICZVc2VyXCBNYW51YWwgICAgICAgJtCj0L/Rg9GC0YHRgtCy0L5cINC30LBcINC60L7RgNC40YHQvdC40LrQtQorbWVudXRyYW5zICZIb3ctdG9cIGxpbmtzICAgICAgJtCa0LDQutC+XCDQtNCwXC5cLlwuCittZW51dHJhbnMgJkZpbmQJCSAgICAgICbQndCw0ZLQuAorbWVudXRyYW5zICZDcmVkaXRzCSAgICAgICbQl9Cw0YHQu9GD0LPQtQorbWVudXRyYW5zIENvJnB5aW5nCSAgICAgINCfJtGA0LXRg9C30LjQvNCw0ZrQtQorbWVudXRyYW5zIE8mcnBoYW5zCSAgICAgICbQodC40YDQvtGH0LjRm9C4CittZW51dHJhbnMgJlZlcnNpb24JICAgICAgJtCS0LXRgNC30LjRmNCwCittZW51dHJhbnMgJkFib3V0CSAgICAgICbQnlwg0L/RgNC+0LPRgNCw0LzRgworCisiIEZpbGUgbWVudQorbWVudXRyYW5zICZGaWxlCQkJICAgICbQlNCw0YLQvtGC0LXQutCwCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCSAgICAm0J7RgtCy0L7RgNC4XC5cLlwuPFRhYj46ZQorbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AgJtCf0L7QtNC10LvQuC3QvtGC0LLQvtGA0LhcLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CSAgICAm0J3QvtCy0LA8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJICAgICbQl9Cw0YLQstC+0YDQuDxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkgICAgJtCh0LDRh9GD0LLQsNGYPFRhYj46dworbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdiAg0KHQsNGH0YPQstCw0ZhcICbQutCw0L5cLlwuXC48VGFiPjpzYXYKK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4gINCf0L7QtNC10LvQuFwg0LhcICbRg9C/0L7RgNC10LTQuFwg0YHQsFwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4g0J/QvibQtNC10LvQuFwg0LhcINC/0YDQtdC/0YDQsNCy0LhcINGB0LBcLlwuXC4KK21lbnV0cmFucyAmUHJpbnQJCSAgICDQqNGC0LAm0LzQv9Cw0ZgKK21lbnV0cmFucyBTYSZ2ZS1FeGl0PFRhYj46d3FhCSAgICDQodCw0YfRg9Cy0LDRmFwg0LhcINC30LAm0LLRgNGI0Lg8VGFiPjp3cWEKK21lbnV0cmFucyBFJnhpdDxUYWI+OnFhCQkgICAg0Jom0YDQsNGYPFRhYj46cWEKKworIiBFZGl0IG1lbnUKK21lbnV0cmFucyAmRWRpdAkJCSAm0KPRgNC10ZLQuNCy0LDRmtC1CittZW51dHJhbnMgJlVuZG88VGFiPnUJCSAm0JLRgNCw0YLQuDxUYWI+dQorbWVudXRyYW5zICZSZWRvPFRhYj5eUgkJICbQn9C+0LLRgNCw0YLQuDxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkg0J8m0L7QvdC+0LLQuDxUYWI+XC4KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCSDQmNGB0LUm0YbQuDxUYWI+Iit4CittZW51dHJhbnMgJkNvcHk8VGFiPiIreQkJICbQmtC+0L/QuNGA0LDRmDxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCSAm0KPQsdCw0YbQuDxUYWI+IitnUAorbWVudXRyYW5zICZQYXN0ZTxUYWI+IitQCSbQo9Cx0LDRhtC4PFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkg0KHRgtCw0LLQuFwg0L/RgNC1JtC0PFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkg0KHRgtCw0LLQuFwgJtC40LfQsDxUYWI+XXAKK21lbnV0cmFucyAmRGVsZXRlPFRhYj54CQkg0JjQtybQsdGA0LjRiNC4PFRhYj54CittZW51dHJhbnMgJlNlbGVjdFwgYWxsPFRhYj5nZ1ZHICDQmNC30LDQsdC10YDQuFwg0YHQsibQtTxUYWI+Z2dWRworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkgJtCd0LDRktC4XC5cLlwuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZVwuXC5cLiDQndCw0ZLQuFwg0LhcICbQt9Cw0LzQtdC90LhcLlwuXC4KK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkg0J8m0YDQvtC30L7RgFwg0L/QvtC00LXRiNCw0LLQsNGa0LAKK21lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkg0J7QvybRiNGC0LBcINC/0L7QtNC10YjQsNCy0LDRmtCwCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCSDQn9C+0LTQtdGI0LDQstCw0ZrQsFwg0LfQsFwg0LTQsCbRgtC+0YLQtdC60LUKK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJICbQn9C+0LzQtdGA0LDRmAorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCSAm0JzQtdC60LBcINGC0LDQsdGD0LvQsNGG0LjRmNCwCittZW51dHJhbnMgVGUmeHRcIFdpZHRoXC5cLlwuCSAm0KjQuNGA0LjQvdCwXCDRgtC10LrRgdGC0LBcLlwuXC4KK21lbnV0cmFucyAmRmlsZVwgRm9ybWF0XC5cLlwuCSAm0JLRgNGB0YLQsFwg0LTQsNGC0L7RgtC10LrQtVwuXC5cLgorbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCSDQkdC+JtGY0LUKK21lbnV0cmFucyAmS2V5bWFwCQkg0J/RgNC10YEm0LvQuNC60LDQstCw0ZrQtVwg0YLQsNGB0YLQsNGC0YPRgNC1CittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkg0JjQt9Cx0L7RgFwgJtGE0L7QvdGC0LBcLlwuXC4KKworIiBFZGl0L0dsb2JhbCBTZXR0aW5ncworbWVudXRyYW5zIFRvZ2dsZVwgUGF0dGVyblwgJkhpZ2hsaWdodDxUYWI+OnNldFwgaGxzISDQndCw0LPQu9Cw0YHQuFwgJtC+0LHRgNCw0LfRhtC1XCAo0LTQsC/QvdC1KTxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEg0JfQsNC90LXQvNCw0YDQuFwgXNCy0LXQu9C40YfQuNC90YNcICbRgdC70L7QstCwXCAo0LTQsC/QvdC1KTxUYWI+OnNldFwgaWMhCittZW51dHJhbnMgVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEg0J/RgNC+0LLQtdGA0LhcINC/0YDQsNGC0LXRm9GDXCAm0LfQsNCz0YDQsNC00YNcICjQtNCwL9C90LUpPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMgINCS0LjQtNGZ0LjQstC4XCAm0YDQtdC00L7QstC4CittZW51dHJhbnMgJlZpcnR1YWxcIEVkaXQgICDQktC40YDRgtGD0LXQu9C90L5cICbRg9GA0LXRktC40LLQsNGa0LUKK21lbnV0cmFucyBUb2dnbGVcIEluc2VydFwgJk1vZGU8VGFiPjpzZXRcIGltISAgINCg0LXQttC40LxcINGDJtC90L7RgdCwXCAo0LTQsC/QvdC1KTxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgVG9nZ2xlXCBWaVwgQyZvbXBhdGlibGU8VGFiPjpzZXRcIGNwISAgICAgJyZWaSdcINGB0LDQs9C70LDRgdC90L5cICjQtNCwL9C90LUpPFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyBTZWFyY2hcICZQYXRoXC5cLlwuINCf0YPRgtCw0ZrQsFwgJtC/0YDQtdGC0YDQsNCz0LVcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLiAgICbQlNCw0YLQvtGC0LXQutC1XCDQvtC30L3QsNC60LBcLlwuXC4KK21lbnV0cmFucyBUb2dnbGVcICZUb29sYmFyICAgINCb0LjQvdC40ZjQsFwg0YHQsFwgJtCw0LvQsNGC0LrQsNC80LBcICjQtNCwL9C90LUpCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIgICDQlNC+0ZrQsFwg0Lsm0LjQvdC40ZjQsFwg0LrQu9C40LfQsNGa0LBcICjQtNCwL9C90LUpCittZW51dHJhbnMgVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyICAm0JvQtdCy0LBcINC70LjQvdC40ZjQsFwg0LrQu9C40LfQsNGa0LBcICjQtNCwL9C90LUpCittZW51dHJhbnMgVG9nZ2xlXCAmUmlnaHRcIFNjcm9sbGJhciAm0JTQtdGB0L3QsFwg0LvQuNC90LjRmNCwXCDQutC70LjQt9Cw0ZrQsFwgKNC00LAv0L3QtSkKKworIiBFZGl0L0dsb2JhbCBTZXR0aW5ncy9WaXJ0dWFsIEVkaXQKK21lbnV0cmFucyBOZXZlcgkJICAgICAg0J3QuNC60LDQtAorbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24gICAg0JjQt9Cx0L7RgFwg0LHQu9C+0LrQsAorbWVudXRyYW5zIEluc2VydFwgbW9kZQkgICAgICDQoNC10LbQuNC8XCDRg9C90L7RgdCwCittZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0ICDQkdC70L7Qulwg0LhcINGD0L3QvtGBCittZW51dHJhbnMgQWx3YXlzCSAgICAgINCj0LLQtdC6CisKKyIgRWRpdC9GaWxlIFNldHRpbmdzCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmTnVtYmVyaW5nPFRhYj46c2V0XCBudSEgICDQoNC10LTQvdC4XCAm0LHRgNC+0ZjQtdCy0LhcICjQtNCwL9C90LUpPFRhYj46c2V0XCBudSEKK21lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQkgICDQoNC10LbQuNC8XCAm0LvQuNGB0YLQtVwgKNC00LAv0L3QtSk8VGFiPjpzZXRcIGxpc3QhCittZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJICAg0J7QsdCw0LLQuNGY0LDRmtC1XCAm0YDQtdC00L7QstCwXCAo0LTQsC/QvdC1KTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyISAgINCf0YDQtdC70L7QvNC4XCAm0L3QsFwg0YDQtdGHXCAo0LTQsC/QvdC1KTxUYWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkgICDQoNCw0LfQvNCw0YbQuFwg0YPQvNC10YHRgtC+XCAm0YLQsNCx0YPQu9Cw0YbQuNGY0LVcICjQtNCwL9C90LUpPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCdCQ0YPRgtC+LSbRg9Cy0LvQsNGH0LXRmtC1XCAo0LTQsC/QvdC1KTxUYWI+OnNldFwgYWkhCittZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJICAgJtCm0LUt0YPQstC70LDRh9C10ZrQtVwgKNC00LAv0L3QtSk8VGFiPjpzZXRcIGNpbiEKKworIiBFZGl0L0tleW1hcAorbWVudXRyYW5zIE5vbmUg0J3QuNGY0LXQtNCw0L0KKworIiBUb29scyBtZW51CittZW51dHJhbnMgJlRvb2xzCSbQkNC70LDRgtC60LUKK21lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dINCh0LrQvtGH0LhcINC90LBcICbQvtCy0YNcINC+0LfQvdCw0LrRgzxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCSDQodC60L7Rh9C4XCAm0L3QsNGC0YDQsNCzPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkg0JjQt9Cz0YDQsNC00LhcICbQtNCw0YLQvtGC0LXQutGDXCDQvtC30L3QsNC60LAKK21lbnV0cmFucyAmRm9sZGluZwkgICAgICAm0J/QvtC00LLQuNGY0LDRmtC1CittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCSAg0KEm0YLQstC+0YDQuFwg0L/QvtC00LLQuNGY0YPRgtCw0Lo8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCSAg0J4m0LHRgNC40YjQuFwg0L/QvtC00LLQuNGY0YPRgtCw0Lo8VGFiPnpkCittZW51dHJhbnMgRGVsZXRlXCAmQWxsXCBGb2xkczxUYWI+ekQJICDQntCx0YDQuNGI0LhcINGB0LLQtVwg0L/QvibQtNCy0LjRmNGD0YLQutC1PFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbHVtblwgJndpZHRoCQkgINCo0LjRgNC40L3QsFwgJtGA0LXQtNCwXCDQv9C+0LTQstC40ZjRg9GC0LrQsAorbWVudXRyYW5zICZEaWZmCQkgICAgICAm0KPQv9C+0YDQtdGS0LjQstCw0ZrQtQorbWVudXRyYW5zICZNYWtlPFRhYj46bWFrZSAgICAgJ21haybQtSc8VGFiPjptYWtlCittZW51dHJhbnMgJkxpc3RcIEVycm9yczxUYWI+OmNsICAgICDQodC/0LjRgdCw0LpcICbQs9GA0LXRiNCw0LrQsDxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whICDQodC/JtC40YHQsNC6XCDQv9C+0YDRg9C60LA8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkgICAg0KEm0LvQtdC00LXRm9CwXCDQs9GA0LXRiNC60LA8VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcCAg0J/RgNC1JtGC0YXQvtC00L3QsFwg0LPRgNC10YjQutCwPFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkICAgINCh0YLQsNGA0LhcINGB0L/QuNGB0LAm0Lo8VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldyAgICDQndC+JtCy0LhcINGB0L/QuNGB0LDQujxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdwkgICAg0J/RgNC+0LfQvtGAXCDRgdCwXCDQsybRgNC10YjQutCw0LzQsAorbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCSAgICDQmCbQt9Cw0LHQtdGA0LhcINC/0YDQtdCy0L7QtNC40L7RhtCwCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAkgICDQn9GA0LXRgtCy0L7RgNC4XCDRg1wgJtCl0JXQmtChPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtciAgICDQktGAJtCw0YLQuFwg0YNcINC/0YDQstC+0LHQuNGC0LDQvVwg0L7QsdC70LjQujxUYWI+OiUheHhkXCAtcgorCisiIFRvb2xzL0ZvbGRpbmcKK21lbnV0cmFucyAmRW5hYmxlL0Rpc2FibGVcIGZvbGRzPFRhYj56aSAgICbQntC80L7Qs9GD0ZvQuC/Qv9GA0LXQutC40L3QuFwg0L/QvtC00LLQuNGY0LDRmtC1PFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CSAgJtCf0L7QutCw0LbQuFwg0YDQtdC0XCDRgdCwXCDQutGD0YDRgdC+0YDQvtC8PFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengg0J/QvtC60LDQttC4XCAm0YHQsNC80L5cINGA0LXQtFwg0YHQsFwg0LrRg9GA0YHQvtGA0L7QvDxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptICAgJtCX0LDRgtCy0L7RgNC4XCDQstC40YjQtVwg0L/QvtC00LLQuNGY0YPRgtCw0LrQsDxUYWI+em0KK21lbnV0cmFucyAmQ2xvc2VcIGFsbFwgZm9sZHM8VGFiPnpNICAgINCX0LDRgtCy0L7RgNC4XCDRgSbQstC1XCDQv9C+0LTQstC40ZjRg9GC0LrQtTxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyICAgINCe0YLQstC+0YDQuFwg0LLQuNGIJtC1XCDQv9C+0LTQstC40ZjRg9GC0LDQutCwPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UiAgICAg0J4m0YLQstC+0YDQuFwg0YHQstC1XCDQv9C+0LTQstC40ZjRg9GC0LrQtTxUYWI+elIKK21lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkgICAgICAgJtCd0LDRh9C40L1cINC/0L7QtNCy0LjRmNCw0ZrQsAorCisiIFRvb2xzL0ZvbGRpbmcvRm9sZCBNZXRob2QKK21lbnV0cmFucyBNJmFudWFsCSbQoNGD0YfQvdC+CittZW51dHJhbnMgSSZuZGVudAkm0KPQstGD0YfQtdC90L7RgdGCCittZW51dHJhbnMgRSZ4cHJlc3Npb24JJtCY0LfRgNCw0LcKK21lbnV0cmFucyBTJnludGF4CSbQodC40L3RgtCw0LrRgdCwCisibWVudXRyYW5zICZEaWZmCittZW51dHJhbnMgTWEmcmtlcgkm0J7Qt9C90LDQutCwCisKKyIgVG9vbHMvRGlmZgorbWVudXRyYW5zICZVcGRhdGUJJtCQ0LbRg9GA0LjRgNCw0ZgKK21lbnV0cmFucyAmR2V0XCBCbG9jawkm0J/RgNC40YXQstCw0YLQuFwg0LjQt9C80LXQvdGDCittZW51dHJhbnMgJlB1dFwgQmxvY2sJ0J/RgNC1JtCx0LDRhtC4XCDQuNC30LzQtdC90YMKKworIiBUb29scy9FcnJvciBXaW5kb3cKK21lbnV0cmFucyAmVXBkYXRlPFRhYj46Y3dpbiAgICbQkNC20YPRgNC40YDQsNGYPFRhYj46Y3dpbgorbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4gICAgJtCe0YLQstC+0YDQuDxUYWI+OmNvcGVuCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlICAm0JfQsNGC0LLQvtGA0Lg8VGFiPjpjY2xvc2UKKworIiBCdWZlcnMgbWVudQorbWVudXRyYW5zICZCdWZmZXJzCSAgICbQkdCw0YTQtdGA0LgKK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudSAgICbQkNC20YPRgNC40YDQsNGYCittZW51dHJhbnMgRGVsZXRlCSAgICbQntCx0YDQuNGI0LgKK21lbnV0cmFucyAmQWx0ZXJuYXRlCSAgINCQJtC70YLQtdGA0L3QsNGC0LjQstC90LgKK21lbnV0cmFucyAmTmV4dAkJICAgJtCh0LvQtdC00LXRm9C4CittZW51dHJhbnMgJlByZXZpb3VzCSAgICbQn9GA0LXRgtGF0L7QtNC90LgKK21lbnV0cmFucyBbTm9cIEZpbGVdCSAgIFvQndC10LzQsFwg0LTQsNGC0L7RgtC10LrQtV0KKworIiBXaW5kb3cgbWVudQorbWVudXRyYW5zICZXaW5kb3cJCSAgICAm0J/RgNC+0LfQvtGACittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkgICAgJtCd0L7QstC4PFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkgICAgJtCf0L7QtNC10LvQuDxUYWI+XldzCittZW51dHJhbnMgU3AmbGl0XCBUb1wgIzxUYWI+XldeXiAgICDQn9C+0LTQtdC70LhcINGB0LBcICbQsNC70YLQtdGA0L3QsNGC0LjQstC90LjQvDxUYWI+XldeXgorbWVudXRyYW5zIFNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2ICAg0J/QvtC00LXQu9C4XCAm0YPRgdC/0YDQsNCy0L3QvjxUYWI+Xld2CittZW51dHJhbnMgU3BsaXRcIEZpbGVcIEUmeHBsb3JlciAgICDQn9C+0LTQtdC70LhcINC30LBcINC/0YDQtdCz0LvQtdC0XCAm0LTQsNGC0L7RgtC10LrQsAorbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCSAgICAm0JfQsNGC0LLQvtGA0Lg8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbyAg0JfQsNGC0LLQvtGA0LhcICbQvtGB0YLQsNC70LU8VGFiPl5XbworIm1lbnV0cmFucyBOZSZ4dDxUYWI+Xld3ICAgICAgICbQodC70LXQtNC10ZvQuDxUYWI+Xld3CisibWVudXRyYW5zIFAmcmV2aW91czxUYWI+XldXCSAg0J8m0YDQtdGC0YXQvtC00L3QuDxUYWI+XldXCittZW51dHJhbnMgTW92ZVwgJlRvCQkgICAg0J/RgNC1JtC80LXRgdGC0LgKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCSAgICAm0JrRgNGD0LbQvdC+XCDQvdCw0LPQvtGA0LU8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XciAgICAg0JrRgNGD0LbQvdC+XCDQvdCw0LTQvtC7JtC1PFRhYj5eV3IKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkgICAgJtCY0YHRgtC1XCDQstC10LvQuNGH0LjQvdC1PFRhYj5eVz0KK21lbnV0cmFucyAmTWF4XCBIZWlnaHQ8VGFiPl5XXwkgICAg0JzQsNC60YHQuNC80LDQu9C90LBcICbQstC40YHQuNC90LA8VGFiPl5XXworbWVudXRyYW5zIE0maW5cIEhlaWdodDxUYWI+XlcxXyAgICAg0JzQuNC90LjQvNCwJtC70L3QsFwg0LLQuNGB0LjQvdCwPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJICAgINCc0LDQutGB0LjQvNCw0LvQvdCwXCAm0YjQuNGA0LjQvdCwPFRhYj5eV1x8CittZW51dHJhbnMgTWluXCBXaWR0Jmg8VGFiPl5XMVx8ICAgICDQnNC40L3QuNC80LDQu9C90LBcINGI0Lgm0YDQuNC90LA8VGFiPl5XMVx8CisKKyIgV2luZG93L01vdmUgVG8KK21lbnV0cmFucyAmVG9wPFRhYj5eV0sJCSAm0JLRgNGFPFRhYj5eV0sKK21lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJICbQn9C+0LTQvdC+0LbRmNC1PFRhYj5eV0oKK21lbnV0cmFucyAmTGVmdFwgc2lkZTxUYWI+XldICSDQoybQu9C10LLQvjxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJINCjJtC00LXRgdC90L48VGFiPl5XTAorCisiIFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCSAgICAgICbQktGA0LDRgtC4CittZW51dHJhbnMgQ3UmdAkJICAgICAgJtCY0YHQtdGG0LgKK21lbnV0cmFucyAmQ29weQkJICAgICAgJtCa0L7Qv9C40YDQsNGYCittZW51dHJhbnMgJlBhc3RlCSAgICAgICbQo9Cx0LDRhtC4CittZW51dHJhbnMgJkRlbGV0ZQkgICAgICDQmCbQt9Cx0YDQuNGI0LgKK21lbnV0cmFucyBTZWxlY3RcIEJsb2Nrd2lzZSAgINCR0LjRgNCw0ZhcICbQv9GA0LDQstC+0YPQs9Cw0L7QvdC+CittZW51dHJhbnMgU2VsZWN0XCAmV29yZCAgICAgICDQmNC30LDQsdC10YDQuFwgJtGA0LXRhworbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUgICAgICAg0JjQt9Cw0LHQtdGA0LhcINGAJtC10LQKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jayAgICAgINCY0LfQsNCx0LXRgNC4XCAm0LHQu9C+0LoKK21lbnV0cmFucyBTZWxlY3RcICZBbGwJICAgICAg0JjQt9Cw0LHQtdGA0LhcICbRgdCy0LUKKworIiBUaGUgR1VJIHRvb2xiYXIKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4gICAgINCj0YfQuNGC0LDRmAorICAgIHRtZW51IFRvb2xCYXIuU2F2ZSAgICAg0KHQsNGH0YPQstCw0ZgKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwgINCh0LDRh9GD0LLQsNGYINGB0LLQtQorICAgIHRtZW51IFRvb2xCYXIuUHJpbnQgICAg0KjRgtCw0LzQv9Cw0ZgKKyAgICB0bWVudSBUb29sQmFyLlVuZG8gICAgINCS0YDQsNGC0LgKKyAgICB0bWVudSBUb29sQmFyLlJlZG8gICAgINCf0L7QstGA0LDRgtC4CisgICAgdG1lbnUgVG9vbEJhci5DdXQgICAgICDQmNGB0LXRhtC4CisgICAgdG1lbnUgVG9vbEJhci5Db3B5ICAgICDQmtC+0L/QuNGA0LDRmAorICAgIHRtZW51IFRvb2xCYXIuUGFzdGUgICAg0KPQsdCw0YbQuAorICAgIHRtZW51IFRvb2xCYXIuRmluZCAgICAg0J3QsNGS0LgKKyAgICB0bWVudSBUb29sQmFyLkZpbmROZXh0INCd0LDRktC4INGB0LvQtdC00LXRm9C4CisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldiDQndCw0ZLQuCDQv9GA0LXRgtGF0L7QtNC90LgKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UgINCX0LDQvNC10L3QuAorICAgIHRtZW51IFRvb2xCYXIuTmV3ICAgICAg0J3QvtCy0LgKKyAgICB0bWVudSBUb29sQmFyLldpblNwbGl0INCf0L7QtNC10LvQuCDQv9GA0L7Qt9C+0YAKKyAgICB0bWVudSBUb29sQmFyLldpbk1heCAgINCc0LDQutGB0LjQvNCw0LvQvdCwINCy0LjRgdC40L3QsAorICAgIHRtZW51IFRvb2xCYXIuV2luTWluICAg0JzQuNC90LjQvNCw0LvQvdCwINCy0LjRgdC40L3QsAorICAgIHRtZW51IFRvb2xCYXIuV2luVlNwbGl0ICAg0J/QvtC00LXQu9C4INGD0YHQv9GA0LDQstC90L4KKyAgICB0bWVudSBUb29sQmFyLldpbk1heFdpZHRoINCc0LDQutGB0LjQvNCw0LvQvdCwINGI0LjRgNC40L3QsAorICAgIHRtZW51IFRvb2xCYXIuV2luTWluV2lkdGgg0JzQuNC90LjQvNCw0LvQvdCwINGI0LjRgNC40L3QsAorICAgIHRtZW51IFRvb2xCYXIuV2luQ2xvc2Ug0JfQsNGC0LLQvtGA0Lgg0L/RgNC+0LfQvtGACisgICAgdG1lbnUgVG9vbEJhci5Mb2FkU2VzbiDQo9GH0LjRgtCw0Zgg0YHQtdCw0L3RgdGDCisgICAgdG1lbnUgVG9vbEJhci5TYXZlU2VzbiDQodCw0YfRg9Cy0LDRmCDRgdC10LDQvdGB0YMKKyAgICB0bWVudSBUb29sQmFyLlJ1blNjcmlwdCAgINCY0LfQstGA0YjQuCDRgdC/0LjRgQorICAgIHRtZW51IFRvb2xCYXIuTWFrZSAgICAgJ21ha2UnCisgICAgdG1lbnUgVG9vbEJhci5TaGVsbCAgICDQntC/0LXRgNCw0YLQuNCy0L3QviDQvtC60YDRg9C20LXRmtC1CisgICAgdG1lbnUgVG9vbEJhci5SdW5DdGFncyDQndCw0L/RgNCw0LLQuCDQvtC30L3QsNC60LUKKyAgICB0bWVudSBUb29sQmFyLlRhZ0p1bXAgINCY0LTQuCDQvdCwINC+0LfQvdCw0LrRgworICAgIHRtZW51IFRvb2xCYXIuSGVscCAgICAg0J/QvtC80L7RmworICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAg0J3QsNGS0Lgg0L7QsdGY0LDRiNGa0LXRmtC1CisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXggJtCh0LjQvdGC0LDQutGB0LAKK21lbnV0cmFucyAmU2hvd1wgZmlsZXR5cGVzXCBpblwgbWVudSAg0JjQt9Cx0L7RgFwgJ2ZpbGV0eXBlJ1wg0LjQt1wgJtC80LXQvdC40ZjQsAorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5ICAg0J/QvtC00LUm0YHQuFwgJ3N5bnRheCdcINGB0LDQvNC+CittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vICDQn9C+0LTQtdGB0LhcICdmaWxldHlwZSdcICbRgtCw0LrQvtGS0LUKK21lbnV0cmFucyAmT2ZmICAgICAgICbQmNGB0LrRmdGD0YfQtdC90L4KK21lbnV0cmFucyAmTWFudWFsICAgICbQoNGD0YfQvdC+CittZW51dHJhbnMgQSZ1dG9tYXRpYyAgICAm0JDRg9GC0L7QvNCw0YLRgdC60LgKK21lbnV0cmFucyBvbi9vZmZcIGZvclwgJlRoaXNcIGZpbGUgICAgINCU0LAv0L3QtVwg0LfQsFwg0L7QstGDXCAm0LTQsNGC0L7RgtC10LrRgworbWVudXRyYW5zIENvJmxvclwgdGVzdCAgICAg0J/RgNC+0LLQtdGA0LBcICbQsdC+0ZjQsAorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3Qg0J/RgNC+0LLQtdGA0LBcINC40YHRgtC4JtGG0LDRmtCwCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MICDQn9GA0LXRgtCy0L7RgNC4XCAm0YNcIEhUTUwKKworIiBkaWFsb2cgdGV4dHMKK2xldCBtZW51dHJhbnNfaGVscF9kaWFsb2cgPSAi0KPQvdC10YHQuNGC0LUg0L3QsNGA0LXQtNCx0YMg0LjQu9C4INGA0LXRhyDRh9C40ZjQtSDQv9C+0ZjQsNGI0ZrQtdGa0LUg0YLRgNCw0LbQuNGC0LU6XG5cbtCU0L7QtNCw0ZjRgtC1IGlfINC30LAg0L3QsNGA0LXQtNCx0LUg0YPQvdC+0YHQsCAo0L3Qv9GALiBpX0NUUkwtWClcbtCU0L7QtNCw0ZjRgtC1IGNfINC30LAg0L3QsNGA0LXQtNCx0LUg0LrQvtC80LDQvdC00L3QvtCzINGA0LXQttC40LzQsCAo0L3Qv9GALiDRgV88RGVsPilcbtCU0L7QtNCw0ZjRgtC1ICcg0LfQsCDQuNC80LXQvdCwINC+0L/RhtC40ZjQsCAo0L3Qv9GALiAnc2hpZnR3aWR0aCcpIgorCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAi0KPQvdC10YHQuNGC0LUg0L/Rg9GCINC/0YDQtdGC0YDQsNCz0LUg0LfQsCDQtNCw0YLQvtGC0LXQutC1XG7QoNCw0LfQtNCy0L7RmNC40YLQtSDQt9Cw0YDQtdC30LjQvNCwINC40LzQtdC90LAg0LTQuNGA0LXQutGC0L7RgNC40ZjRg9C80LAuIgorCitsZXQgZzptZW51dHJhbnNfdGFnc19kaWFsb2cgPSAi0KPQvdC10YHQuNGC0LUg0LjQvNC10L3QsCDQtNCw0YLQvtGC0LXQutCwINGB0LAg0L7Qt9C90LDQutCw0LzQsFxu0KDQsNC30LTQstC+0ZjQuNGC0LUg0LfQsNGA0LXQt9C40LzQsCDQuNC80LXQvdCwLiIKKworbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAi0KPQvdC10YHQuNGC0LUg0L3QvtCy0YMg0YjQuNGA0LjQvdGDINGC0LXQutGB0YLQsCAoMCDRgdC/0YDQtdGH0LDQstCwINC/0YDQtdC70L7QvCkiCisKK2xldCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2RpYWxvZyA9ICLQmNC30LDQsdC10YDQuNGC0LUg0LLRgNGB0YLRgyDQtNCw0YLQvtGC0LXQutC1IgorCitsZXQgbWVudXRyYW5zX25vX2ZpbGUgPSAiW9Cd0LXQvNCwINC00LDRgtC+0YLQtdC60LVdIgorCisiIHZpbTogdHc9MCBrZXltYXA9c2VyYmN5cmlsLVVTCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9zdi5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfc3YubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWM0NjcxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfc3YubGF0aW4xLnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6IFN3ZWRpc2gKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfc3Zfc2UubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfc3YudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfc3YudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNGYyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV9zdi51dGYtOC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOiBTd2VkaXNoIGZvciBVVEYtOCBlbmNvZGluZworCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9zdl9zZS5sYXRpbjEudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9zdl9zZS5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfc3Zfc2UubGF0aW4xLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmViNTYyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfc3Zfc2UubGF0aW4xLnZpbQpAQCAtMCwwICsxLDIzOCBAQAorIiBNZW51IFRyYW5zbGF0aW9uczogICAgU3dlZGlzaAorIiBNYWludGFpbmVyOgkJSm9oYW4gU3ZlZGJlcmcgPGpvaGFuQHN2ZWRiZXJnLnBwLnNlPgorIiBMYXN0IENoYW5nZToJCTIwMDQgTWF5IDE2CisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCisiIFRoZSB0cmFuc2xhdGlvbnMgYmVsb3cgYXJlIGluIGxhdGluMSwgYnV0IHRoZXkgd29yayBmb3IgY3AxMjUyIGFuZAorIiBpc28tODg1OS0xNSB3aXRob3V0IGNvbnZlcnNpb24gYXMgd2VsbC4KK2lmICZlbmMgIT0gImNwMTI1MiIgJiYgJmVuYyAhPSAiaXNvLTg4NTktMTUiCisgIHNjcmlwdGVuY29kaW5nIGxhdGluMQorZW5kaWYKKworIiBIZWxwIG1lbnUKK21lbnV0cmFucyAmSGVscAkJCSZIauRscAorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgkm1nZlcnNpa3Q8VGFiPjxGMT4KK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcwkmSHVyLWf2cmEtbORua2FyCittZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJJkFuduRuZGFybWFudWFsCisibWVudXRyYW5zICZHVUkJCQkmR1VJCittZW51dHJhbnMgJkNyZWRpdHMJCSZUYWNrCittZW51dHJhbnMgQ28mcHlpbmcJCSZLb3BpZXJpbmdzcuR0dGlnaGV0ZXIKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJJlP2a1wuXC5cLgorbWVudXRyYW5zICZWZXJzaW9uCQkmVmVyc2lvbgorbWVudXRyYW5zICZBYm91dAkJJk9tCisKKyIgRmlsZSBtZW51CittZW51dHJhbnMgJkZpbGUJCQkJJkFya2l2CittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQkm1nBwbmFcLlwuXC48VGFiPjplCittZW51dHJhbnMgU3AmbGl0LU9wZW5cLlwuXC48VGFiPjpzcAnWcHBuYVwgaVwgc3BsaXR0LXZ5XC5cLlwuPFRhYj46c3AKK21lbnV0cmFucyAmTmV3PFRhYj46ZW5ldwkJJk55PFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQlTJnTkbmc8VGFiPjpjbG9zZQorbWVudXRyYW5zICZTYXZlPFRhYj46dwkJCSZTcGFyYTxUYWI+OncKK21lbnV0cmFucyBTYXZlXCAmQXNcLlwuXC48VGFiPjpzYXYJU3BhcmFcIHNvbVwuXC5cLjxUYWI+OnNhdgorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLglEZWxhXCBkaWZmXCBtZWRcLlwuXC4KK21lbnV0cmFucyBTcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCURlbGFcIGxhcHBhZFwgbWVkXC5cLlwuCittZW51dHJhbnMgJlByaW50CQkJU2tyaXZcICZ1dAorbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJCVNwYXJhXCAmb2NoXCBhdnNsdXRhPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCSZBdnNsdXRhPFRhYj46cWEKKworIiBFZGl0IG1lbnUKK21lbnV0cmFucyAmRWRpdAkJCQkmUmVkaWdlcmEKK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCSbFbmdyYTxUYWI+dQorbWVudXRyYW5zICZSZWRvPFRhYj5eUgkJCSZH9nJcIG9tPFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQkmUmVwZXRlcmE8VGFiPlwuCittZW51dHJhbnMgQ3UmdDxUYWI+Iit4CQkJS2xpcHBcICZ1dDxUYWI+Iit4CittZW51dHJhbnMgJkNvcHk8VGFiPiIreQkJCSZLb3BpZXJhPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCUtsaXN0cmEgJmluPFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkJU+R0dFwgaW5cICZm9nJlPFRhYj5bcAorbWVudXRyYW5zIFB1dFwgJkFmdGVyPFRhYj5dcAkJU+R0dFwgaW5cICZlZnRlcjxUYWI+XXAKK21lbnV0cmFucyAmU2VsZWN0XCBhbGw8VGFiPmdnVkcJCSZNYXJrZXJhXCBhbGx0PFRhYj5nZ1ZHCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCQkmU/ZrXC5cLlwuCittZW51dHJhbnMgJkZpbmQ8VGFiPi8JCQkmU/ZrPFRhYj4vCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZVwuXC5cLglT9mtcIG9jaFwgZXJz5HR0XC5cLlwuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OiVzCVP2a1wgb2NoXCBlcnPkdHQ8VGFiPjolcworbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2UJCVP2a1wgb2NoXCBlcnPkdHQKK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlPFRhYj46cwlT9mtcIG9jaFwgZXJz5HR0PFRhYj46cworbWVudXRyYW5zIFNldHRpbmdzXCAmV2luZG93CQlJbiZzdORsbG5pbmdhcgorbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQlHbCZvYmFsYVwgaW5zdORsbG5pbmdhcgorbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJRmkmbGluc3TkbGxuaW5nYXIKK21lbnV0cmFucyBDJm9sb3JcIFNjaGVtZQkJRibkcmdzY2hlbWEKK21lbnV0cmFucyAmS2V5bWFwCQkJJlRhbmdlbnRib3Jkc3VwcHPkdHRuaW5nCisKKyIgRWRpdC5HbG9iYWwgU2V0dGluZ3MKK21lbnV0cmFucyBUb2dnbGVcIFBhdHRlcm5cICZIaWdobGlnaHQ8VGFiPjpzZXRcIGhscyEJVuR4bGFcIG32bnN0ZXJmcmFtaOR2bmluZzxUYWI+OnNldFwgaGxzIQorbWVudXRyYW5zIFRvZ2dsZVwgJklnbm9yZS1jYXNlPFRhYj46c2V0XCBpYyEJVuR4bGFcIGlnbm9yZXJpbmdcIGF2XCBzdG9ybGVrPFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQlW5HhsYVwgbWF0Y2huaW5nc3Zpc25pbmc8VGFiPjpzZXRcIHNtIQorbWVudXRyYW5zICZDb250ZXh0XCBsaW5lcwkJU2FtbWFuaGFuZ3NyYWRlcgorbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQlWaXJ0dWVsbFwgcmVkaWdlcmluZworbWVudXRyYW5zIE5ldmVyCQkJCUFsZHJpZworbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCUJsb2NrdmFsCittZW51dHJhbnMgSW5zZXJ0XCBtb2RlCQkJSW5mb2duaW5nc2zkZ2UKK21lbnV0cmFucyBCbG9ja1wgYW5kXCBJbnNlcnQJCUJsb2NrXCBvY2hcIGluZm9nbmluZworbWVudXRyYW5zIEFsd2F5cwkJCUFsbHRpZAorbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCVbkeGxhXCBpbmZvZ25pbmdzbORnZTxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkJU/ZrduRnXC5cLlwuCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4JCVRhZ2dmaWxlclwuXC5cLgorbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCVbkeGxhXCB2ZXJrdHlnc3JhZAorbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCVbkeGxhXCBydWxsbmluZ3NsaXN0YVwgaVwgYm90dGVuCittZW51dHJhbnMgVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyCVbkeGxhXCB25G5zdGVyXCBydWxsbmluZ3NsaXN0YQorbWVudXRyYW5zIFRvZ2dsZVwgJlJpZ2h0XCBTY3JvbGxiYXIJVuR4bGFcIGj2Z2VyXCBydWxsbmluZ3NsaXN0YQorbWVudXRyYW5zIE5vbmUJCQkJSW5nZW4KKworIiBFZGl0LkZpbGUgU2V0dGluZ3MKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQlW5HhsYVwgcmFkbnVtcmVyaW5nPFRhYj46c2V0XCBudSEKK21lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQkJVuR4bGFcIGxpc3Rs5GdlPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQlW5HhsYVwgcmFkYnJ5dG5pbmc8VGFiPjpzZXRcIHdyYXAhCittZW51dHJhbnMgVG9nZ2xlXCBXJnJhcFwgYXRcIHdvcmQ8VGFiPjpzZXRcIGxiciEJVuR4bGFcIHJhZGJyeXRuaW5nXCB2aWRcIG9yZDx0YWI+OnNldFwgbGJyIQorbWVudXRyYW5zIFRvZ2dsZVwgJmV4cGFuZC10YWI8VGFiPjpzZXRcIGV0IQkJVuR4bGFcIHRhYi1leHBhbmRlcmluZzxUYWI+OnNldFwgZXQhCittZW51dHJhbnMgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQkJVuR4bGFcIGF1dG8taW5kZW50ZXJpbmc8VGFiPjpzZXRcIGFpIQorbWVudXRyYW5zIFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCQlW5HhsYVwgQy1pbmRlbnRlcmluZzxUYWI+OnNldFwgY2luIQorbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJCQlUZXh0YnJlZGRcLlwuXC4KK21lbnV0cmFucyAmRmlsZVwgRm9ybWF0XC5cLlwuCQkJCUZpbGZvcm1hdFwuXC5cLgorCisiIFRvb2xzIG1lbnUKK21lbnV0cmFucyAmVG9vbHMJCQkmVmVya3R5ZworbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JJkhvcHBhXCB0aWxsXCBkZW5cIGjkclwgdGFnZ2VuPFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJCUhvcHBhXCB0aWxsYmFrYTxUYWI+XlQKK21lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCUJ5Z2dcIHRhZ2dmaWwKK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCSZCeWdnPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJTGlzdGZlbDxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCUxpc3RtZWRkZWxhbmRlPFRhYj46Y2whCittZW51dHJhbnMgJk5leHRcIEVycm9yPFRhYj46Y24JCU7kc3RhXCBmZWw8VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAlUaWRpZ2FyZVwgZmVsPFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCSbEbGRyZVwgbGlzdGE8VGFiPjpjb2xkCittZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwkmTnlhcmVcIGxpc3RhPFRhYj46Y25ldworbWVudXRyYW5zIEVycm9yXCAmV2luZG93CQlGZWxm9m5zdGVyCittZW51dHJhbnMgJlVwZGF0ZTxUYWI+OmN3aW4JCSZVcHBkYXRlcmE8VGFiPjpjd2luCittZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbgkJJtZwcG5hPFRhYj46Y29wZW4KK21lbnV0cmFucyAmQ2xvc2U8VGFiPjpjY2xvc2UJCSZTdORuZzxUYWI+OmNjbG9zZQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJS29udmVydGVyYVwgdGlsbFwgSEVYPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtcglLb252ZXJ0ZXJhXCB0aWxsYmFrYTxUYWI+OiUheHhkXCAtcgorbWVudXRyYW5zICZTZXRcIENvbXBpbGVyCQlT5HR0XCBrb21waWxlcmFyZQorCisiIFRvb2xzLkZvbGRpbmcKK21lbnV0cmFucyAmRW5hYmxlL0Rpc2FibGVcIGZvbGRzPFRhYj56aQlW5HhsYVwgdmVjazxUYWI+emkKK21lbnV0cmFucyAmVmlld1wgQ3Vyc29yXCBMaW5lPFRhYj56dglWaXNhXCBtYXJr9nJyYWQ8VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eAlWaXNhXCBiYXJhXCBtYXJr9nJyYWQ8VGFiPnpNengKK21lbnV0cmFucyBDJmxvc2VcIG1vcmVcIGZvbGRzPFRhYj56bQlTdORuZ1wgbWVyXCB2ZWNrPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JU3TkbmdcIGFsbGFcIHZlY2s8VGFiPnpNCittZW51dHJhbnMgTyZwZW5cIG1vcmVcIGZvbGRzPFRhYj56cgnWcHBuYVwgbWVyXCB2ZWNrPFRhYj56cgorbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgnWcHBuYVwgbWVyXCB2ZWNrPFRhYj56UgorbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCQlWZWNrbWV0b2QKK21lbnV0cmFucyBNJmFudWFsCQkJTWFudWFsCittZW51dHJhbnMgSSZuZGVudAkJCUluZGVudGVyaW5nCittZW51dHJhbnMgRSZ4cHJlc3Npb24JCQlVdHRyeWNrCittZW51dHJhbnMgUyZ5bnRheAkJCVN5bnRheAorbWVudXRyYW5zICZGb2xkaW5nCQkJVmlrbmluZworbWVudXRyYW5zICZEaWZmCQkJCURpZmZlcmFucworbWVudXRyYW5zIE1hJnJrZXIJCQlNYXJrZXJpbmcKK21lbnV0cmFucyBDcmVhdGVcICZGb2xkPFRhYj56ZgkJU2thcGFcIHZlY2s8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCVRhXCBib3J0XCB2ZWNrPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECVRhXCBib3J0XCBhbGxhXCB2ZWNrPFRhYj56RAorbWVudXRyYW5zIEZvbGRcIGNvbCZ1bW5cIHdpZHRoCQlWZWNrY29sdW1uc2JyZWRkCisKKyIgVG9vbHMuRGlmZgorbWVudXRyYW5zICZVcGRhdGUJCVVwcGRhdGVyYQorbWVudXRyYW5zICZHZXRcIEJsb2NrCQlI5G10YVwgYmxvY2sKK21lbnV0cmFucyAmUHV0XCBCbG9jawkJTORtbmFcIGJsb2NrCisKKyIgTmFtZXMgZm9yIGJ1ZmZlciBtZW51LgorbWVudXRyYW5zICZCdWZmZXJzCQkmQnVmZmVydGFyCittZW51dHJhbnMgJlJlZnJlc2hcIG1lbnUJVXBwZGF0ZXJhXCBtZW55CittZW51dHJhbnMgJkRlbGV0ZQkJVGFcIGJvcnQKK21lbnV0cmFucyAmQWx0ZXJuYXRlCQlBbHRlcm5hdGl2CittZW51dHJhbnMgJk5leHQJCQkmTuRzdGEKK21lbnV0cmFucyAmUHJldmlvdXMJCSZUaWRpZ2FyZQorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJCSZG9m5zdGVyCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJJk55dHQ8VGFiPl5XbgorbWVudXRyYW5zIFMmcGxpdDxUYWI+XldzCQlEZWxhPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCURlbGFcIHRpbGxcICM8VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdglEZWxhXCAmdmVydGlrYWx0PFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCURlbGFcIGZpbGhhbnRlcmFyZQorbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCQkmU3Tkbmc8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5XbwkmU3TkbmdcIGFsbGFcIGFuZHJhPFRhYj5eV28KK21lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQkJTuRzdGE8VGFiPl5XdworbWVudXRyYW5zIFAmcmV2aW91czxUYWI+XldXCQkmVGlkaWdhcmU8VGFiPl5XVworbWVudXRyYW5zICZFcXVhbFwgU2l6ZTxUYWI+Xlc9CQkmU2FtbWFcIHN0b3JsZWs8VGFiPl5XPQorbWVudXRyYW5zICZNYXhcIEhlaWdodDxUYWI+XldfCQkmTWF4aW1hbFwgc3RvcmxlazxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQlNJmluaW1hbFwgc3RvcmxlazxUYWI+XlcxXworbWVudXRyYW5zIE1heFwgJldpZHRoPFRhYj5eV1x8CQlNYXhpbWFsXCBicmVkZDxUYWI+XldcfAorbWVudXRyYW5zIE1pblwgV2lkdCZoPFRhYj5eVzFcfAkJTWluaW1hbFwgYnJlZGQ8VGFiPl5XMVx8CittZW51dHJhbnMgTW92ZVwgJlRvCQkJRmx5dHRhXCB0aWxsCittZW51dHJhbnMgJlRvcDxUYWI+XldLCQkJVG9wcGVuPFRhYj5eV0sKK21lbnV0cmFucyAmQm90dG9tPFRhYj5eV0oJCUJvdHRlbjxUYWI+XldKCittZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAkJJlbkbnN0cmFcIHNpZGFuPFRhYj5eV0gKK21lbnV0cmFucyAmUmlnaHRcIHNpZGU8VGFiPl5XTAkJJkj2Z3JhXCBzaWRhbjxUYWI+XldMCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJUm90ZXJhXCB1cHA8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJUm90ZXJhXCBuZWQ8VGFiPl5XcgorbWVudXRyYW5zIFNlbGVjdFwgRm8mbnRcLlwuXC4JCVbkbGpcIHR5cHNuaXR0XC5cLlwuCisKKyIgVGhlIHBvcHVwIG1lbnUKK21lbnV0cmFucyAmVW5kbwkJCSbFbmdyYQorbWVudXRyYW5zIEN1JnQJCQlLbGlwcFwgdXQKK21lbnV0cmFucyAmQ29weQkJCSZLb3BpZXJhCittZW51dHJhbnMgJlBhc3RlCQkmS2xpc3RyYVwgaW4KK21lbnV0cmFucyAmRGVsZXRlCQkmVGFcIGJvcnQKK21lbnV0cmFucyBTZWxlY3RcIEJsb2Nrd2lzZQlNYXJrZXJhXCBibG9ja3ZpcworbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCU1hcmtlcmFcIG9yZAorbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCU1hcmtlcmFcIHJhZAorbWVudXRyYW5zIFNlbGVjdFwgJkJsb2NrCU1hcmtlcmFcIGJsb2NrCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQlNYXJrZXJhXCBhbGx0CisKKyIgVGhlIEdVSSB0b29sYmFyIChmb3IgV2luMzIgb3IgR1RLKQoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorICAgIHRtZW51IFRvb2xCYXIuT3BlbgkJ1nBwbmEgZmlsCisgICAgdG1lbnUgVG9vbEJhci5TYXZlCQlTcGFyYSBha3R1ZWxsIGZpbAorICAgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbAlTcGFyYSBhbGxhIGZpbGVyCisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJU2tyaXYgdXQKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCcVuZ3JhCisgICAgdG1lbnUgVG9vbEJhci5SZWRvCQlH9nIgb20KKyAgICB0bWVudSBUb29sQmFyLkN1dAkJS2xpcHAgdXQKKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCUtvcGllcmEKKyAgICB0bWVudSBUb29sQmFyLlBhc3RlCQlLbGlzdHJhIGluCisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQlT9msuLi4KKyAgICB0bWVudSBUb29sQmFyLkZpbmROZXh0CVP2ayBu5HN0YQorICAgIHRtZW51IFRvb2xCYXIuRmluZFByZXYJU/ZrIHRpZGlnYXJlCisgICAgdG1lbnUgVG9vbEJhci5SZXBsYWNlCVP2ayBvY2ggZXJz5HR0Li4uCisgICAgdG1lbnUgVG9vbEJhci5Mb2FkU2VzbglMYWRkYSBzZXNzaW9uCisgICAgdG1lbnUgVG9vbEJhci5TYXZlU2VzbglTcGFyYSBzZXNzaW9uCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJS/ZyIGV0dCBWaW0tc2tyaXB0CisgICAgdG1lbnUgVG9vbEJhci5NYWtlCQlCeWdnIGFrdHVlbGx0IHByb2pla3QKKyAgICB0bWVudSBUb29sQmFyLlNoZWxsCQnWcHBuYSBldHQga29tbWFuZG9za2FsCisgICAgdG1lbnUgVG9vbEJhci5SdW5DdGFncwlL9nIgQ3RhZ3MKKyAgICB0bWVudSBUb29sQmFyLlRhZ0p1bXAJSG9wcGEgdGlsbCB0YWdnIHVuZGVyIG1hcmv2cgorICAgIHRtZW51IFRvb2xCYXIuSGVscAkJSGrkbHAKKyAgICB0bWVudSBUb29sQmFyLkZpbmRIZWxwCVP2ayBpIGhq5GxwCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXgJCSZTeW50YXgKK21lbnV0cmFucyBTZXRcICcmc3ludGF4J1wgb25seQlT5HR0XCBiYXJhXCAnc3ludGF4JworbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwlT5HR0XCAnZmlsZXR5cGUnXCBvY2tz5QorbWVudXRyYW5zICZPZmYJCQkmQXYKK21lbnV0cmFucyAmTWFudWFsCQkmTWFudWFsCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJQXV0b21hdGlza3QKK21lbnV0cmFucyBvbi9vZmZcIGZvclwgJlRoaXNcIGZpbGUJQXYvUOVcIGb2clwgYWt0dWVsbFwgZmlsCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQlG5HJndGVzdAorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJRnJhbWjkdm5pbmdzdGVzdAorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSFRNTAlLb252ZXJ0ZXJhXCB0aWxsXCAmSFRNTAorbWVudXRyYW5zICZTaG93XCBpbmRpdmlkdWFsXCBjaG9pY2VzCVZpc2FcIGluZGl2aWR1ZWxsYVwgdmFsCisKKyIgZGlhbG9nIHRleHRzCitsZXQgbWVudXRyYW5zX25vX2ZpbGUgPSAiW0luZ2VuIGZpbF0iCitsZXQgbWVudXRyYW5zX2hlbHBfZGlhbG9nID0gIlNrcml2IGluIGV0dCBrb21tYW5kbyBlbGxlciBvcmQgc29tIGR1IHZpbGwgc/ZrYSBoauRscCBw5TpcblxuQvZyamEgbWVkIGlfIGb2ciBpbmZvZ25pbmds5Gdlc2tvbW1hbmRvbiAodC5leC4gaV9DVFJMLVgpXG5C9nJqYSBtZWQgY18gZvZyIGtvbW1hbmRvcmFkcmVkaWdlcmluZ3Nrb21tYW5kb24gKHQuZXguIGNfPERlbD4pXG5C9nJqYSBtZWQgJyBm9nIgZXR0IGluc3TkbGxuaW5nc25hbW4gKHQuZXguICdzaGlmdHdpZHRoJykiCitsZXQgZzptZW51dHJhbnNfcGF0aF9kaWFsb2cgPSAiU2tyaXYgaW4gc/ZrduRnIGb2ciBmaWxlci5cblNlcGFyZXJhIGthdGFsb2duYW1uIG1lZCBrb21tYSIKK2xldCBnOm1lbnV0cmFuc190YWdzX2RpYWxvZyA9ICJTa3JpdiBpbiBuYW1uIHDlIHRhZ2dmaWxlci5cblNlcGFyZXJhIG5hbW4gbWVkIGtvbW1hLiIKK2xldCBnOm1lbnV0cmFuc190ZXh0d2lkdGhfZGlhbG9nID0gIlbkbGogbnkgdGV4dGJyZWRkICgwIGb2ciBhdHQgZvZyaGluZHJhIGZvcm1hdGVyaW5nKTogIgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIlbkbGogZmlsZm9ybWF0IHNvbSBmaWxlbiBza2Egc3BhcmFzIG1lZCIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3N2X3NlLnV0Zi04LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X3N2X3NlLnV0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjRmMjk0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfc3Zfc2UudXRmLTgudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczogU3dlZGlzaCBmb3IgVVRGLTggZW5jb2RpbmcKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfc3Zfc2UubGF0aW4xLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfdWtfdWEua29pOC11LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X3VrX3VhLmtvaTgtdS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4NDE0NQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3VrX3VhLmtvaTgtdS52aW0KQEAgLTAsMCArMSwyNDYgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CVVrcmFpbmlhbgorIiBNYWludGFpbmVyOgkJQm9oZGFuIFZsYXN5dWsgPGJvaGRhbkB2c3R1LmVkdS51YT4KKyIgTGFzdCBDaGFuZ2U6CQkxMSBPY3QgMjAwMQorCisiCisiIFBsZWFzZSwgc2VlIHJlYWRtZSBhdCBodHBwOi8vd3d3LnZzdHUuZWR1LnVhL35ib2hkYW4vdmltIGJlZm9yZSBhbnkKKyIgY29tcGxhaW5zLCBhbmQgZXZlbiBpZiB5b3Ugd29uJ3QgY29tcGxhaW4sIHJlYWQgaXQgYW55d2F5LgorIgorCisiIFF1aXQgd2hlbiBtZW51IHRyYW5zbGF0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLgoraWYgZXhpc3RzKCJkaWRfbWVudV90cmFucyIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBkaWRfbWVudV90cmFucyA9IDEKK3NjcmlwdGVuY29kaW5nIGtvaTgtdQorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJJuTP0M/Nz8fBCittZW51dHJhbnMgJk92ZXJ2aWV3PFRhYj48RjE+CSb6wcfBzNjOwVwgts7Gz9LNwcOm0TxUYWI+PEYxPgorbWVudXRyYW5zICZVc2VyXCBNYW51YWwJCSbrxdKm187Jw9TXz1wgxMzRXCDLz9LJ09TV18HewQorbWVudXRyYW5zICZIb3ctdG9cIGxpbmtzCSbxyy360s/CydTJPworIm1lbnV0cmFucyAmR1VJCQkJJkdJVQorbWVudXRyYW5zICZDcmVkaXRzCQkm8M/E0cvJCittZW51dHJhbnMgQ28mcHlpbmcJCSbyz9rQz9fTwMTWxc7O0QorbWVudXRyYW5zIE8mcnBoYW5zCQkm5M/Qz83Px8FcINPJ0s/Uwc0KK21lbnV0cmFucyAmVmVyc2lvbgkJJvfF0tOm0QorbWVudXRyYW5zICZBYm91dAkJ8NLPXCAm0NLPx9LBzdUKKworIiBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCQkm5sHKzAorbWVudXRyYW5zICZPcGVuXC5cLlwuPFRhYj46ZQkgICAgJvemxMvSydTJXC5cLlwuPFRhYj46ZQorbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AgJvLP2sSmzMnUyVwg16bLzs9cLlwuXC48VGFiPjpzcAorbWVudXRyYW5zICZOZXc8VGFiPjplbmV3CSAgICAm7s/Xyco8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJICAgICb6wcvSydTJPFRhYj46Y2xvc2UKK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCSAgICD6wSbQwc0n0dTB1Mk8VGFiPjp3CittZW51dHJhbnMgU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2CfrB0MHNJ9HUwdTJXCAm0ctcLlwuXC48VGFiPjpzYXYKK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4J8M8m0qbXztHUyVwg2lwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4J+sEmzMHUwdTJXC5cLlwuCittZW51dHJhbnMgJlByaW50CQkJCQkm5NLVy9XXwdTJCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJ+sHQydPB1MlcIKZcINfJJsrUyTxUYWI+OndxYQorbWVudXRyYW5zIEUmeGl0PFRhYj46cWEJCQkm98nIpsQ8VGFiPjpxYQorCisiIEVkaXQgbWVudQorbWVudXRyYW5zICZFZGl0CQkJCSbyxcTBx9XXwdTJCittZW51dHJhbnMgJlVuZG88VGFiPnUJCQkm96bEzabOydTJPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJJvDP18XSztXUyTxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJ8CbP19TP0snUyTxUYWI+XC4KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCQn3ySbSptrB1Mk8VGFiPiIreAorbWVudXRyYW5zICZDb3B5PFRhYj4iK3kJCQkm68/QpsDXwdTJPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCfcm09TB18nUyTxUYWI+IitnUAorbWVudXRyYW5zIFB1dFwgJkJlZm9yZTxUYWI+W3AJCffT1MHXydTJXCDQz9DFJtLFxNU8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQn309TB18nUyVwg0Cam08zRPFRhYj5dcAorbWVudXRyYW5zICZTZWxlY3RcIGFsbDxUYWI+Z2dWRwkJ98kmwtLB1MlcINXTxTxUYWI+Z2dWRworbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJJvrOwcrUyVwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4J+sEmzabOydTJXC5cLlwuCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCfemy87PXCAmzsHMwdvU1dfBztgKK21lbnV0cmFucyAmR2xvYmFsXCBTZXR0aW5ncwkJ+sHHwczYzqZcIM7BJszB29TV18HOztEKK21lbnV0cmFucyBGJmlsZVwgU2V0dGluZ3MJCe7BzMHb1NXXwc7O0VwgxMzRXCAmxsHKzNUKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQkm7tXNxdLBw6bRXCDS0cTLptc8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCQnyxdbJzVwgzsEmxMzJ28vP18/Hz1wg16bEz8LSwdbFzs7RPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQnyxdbJzVwgJtDF0sXOz9PVPFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCfDF0sXOz9PJ1MlcINXTxVwgJtPMz9fPPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCQkJ68/SydPU1dfB1MnT0Vwg08nN18/Mz81cICbUwcLVzNHDpqc8VGFiPjpzZXRcIGV0IQorbWVudXRyYW5zIFRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEJCeHX1M/NwdTJ3s7JylwgJtemxNPU1dA8VGFiPjpzZXRcIGFpIQorbWVudXRyYW5zIFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCQn3psTT1NXQyVwgxMzRXCDNz9fJXCAmQzxUYWI+OnNldFwgY2luIQorbWVudXRyYW5zICZTaGlmdHdpZHRoCQkJCQkJCQkm+tPV1worbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJCQkJCSb7ydLJzsFcINTFy9PU1VwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkm5s/SzcHUXCDGwcrM1VwuXC5cLgorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQkJCfDP2snDptFcICbUwcLVzNHDpqcKK21lbnV0cmFucyBDJm9sb3JcIFNjaGVtZQkJJuvPzNjP0skKK21lbnV0cmFucyBTZWxlY3RcIEZvJm50XC5cLlwuCQn3ycLSwdTJXCAm29LJxtRcLlwuXC4KKworCittZW51dHJhbnMgJktleW1hcAkJCfLF1snNXCDLzMHXpsHU1dLJCittZW51dHJhbnMgVG9nZ2xlXCBQYXR0ZXJuXCAmSGlnaGxpZ2h0PFRhYj46c2V0XCBobHMhCffJxKbM0dTJXCAm2tLB2s/LPFRhYj46c2V0XCBobHMhCittZW51dHJhbnMgVG9nZ2xlXCAmSWdub3JlLWNhc2U8VGFiPjpzZXRcIGljIQkJJvLP2tKm2s7R1MlcIFzXxczJy6ZcINTBXCDNwcymXCDMptTF0sk8VGFiPjpzZXRcIGljIQorbWVudXRyYW5zIFRvZ2dsZVwgJlNob3dtYXRjaDxUYWI+OnNldFwgc20hCQkm7sXHwcrOycpcINDP29XLPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJ66bM2Mum09TYXCAm18HWzMnXychcINLRxMum1worbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CevV0tPP0lwgJtLVyMGk1NjT0VwgwsXaXCDNxdYKKworbWVudXRyYW5zIE5ldmVyCQkJ7qbLz8zJCittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgn3ycKm0lwg4szPy9UKK21lbnV0cmFucyBJbnNlcnRcIG1vZGUJCfLF1snNXCDX09TB18vJCittZW51dHJhbnMgQmxvY2tcIGFuZFwgSW5zZXJ0CffJwqbSXCCmXCDX09TB18vBCittZW51dHJhbnMgQWx3YXlzCQn6wdfWxMkKKworbWVudXRyYW5zIFRvZ2dsZVwgSW5zZXJ0XCAmTW9kZTxUYWI+OnNldFwgaW0hCfLF1snNXCAm19PUwdfLyTxUYWI+OnNldFwgaW0hCittZW51dHJhbnMgU2VhcmNoXCAmUGF0aFwuXC5cLgkm+8zRyFwg0M/b1cvVXC5cLlwuCittZW51dHJhbnMgVGEmZ1wgRmlsZXNcLlwuXC4J5sHKzMlcICbQz82m1M/LXC5cLlwuCisKKworIgorIiBHVUkgb3B0aW9ucworbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCfDBzsXM2FwgJqbO09TS1c3FztSm1worbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCSbuydbO0VwgzKbOpsrLwVwg2tPV19UKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJJuym18FcIMymzqbKy8FcINrT1dfVCittZW51dHJhbnMgVG9nZ2xlXCAmUmlnaHRcIFNjcm9sbGJhcgkm8NLB18FcIMymzqbKy8FcINrT1dfVCisKKyIgUHJvZ3JhbW1pbmcgbWVudQorbWVudXRyYW5zICZUb29scwkJCSa2ztPU0tXNxc7UyQorbWVudXRyYW5zICZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0JJvDF0sXK1MlcIMTPXCDQz82m1MvJPFRhYj5nXl0KK21lbnV0cmFucyBKdW1wXCAmYmFjazxUYWI+XlQJCfDPJtfF0s7V1MnT0TxUYWI+XlQKK21lbnV0cmFucyBCdWlsZFwgJlRhZ3NcIEZpbGUJCSbz1NfP0snUyVwgxsHKzFwg0M/NptTPyworIiBGb2xkaW5nCittZW51dHJhbnMgJkZvbGRpbmcJCQkJJvrHz9LUy8kKK21lbnV0cmFucyAmRW5hYmxlL0Rpc2FibGVcIGZvbGRzPFRhYj56aQkJJuTP2tfPzMnUyS/awcLP0s/OydTJXCDax8/S1MvJPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CQkJJuLB3snUyVwg0tHEz8tcINpcIMvV0tPP0s/NPFRhYj56dgorbWVudXRyYW5zIFZpZSZ3XCBDdXJzb3JcIExpbmVcIG9ubHk8VGFiPnpNengJCQniwd7J1MlcICbMydvFXCDS0cTPy1wg2lwgy9XS08/Sz808VGFiPnpNengKK21lbnV0cmFucyBDJmxvc2VcIG1vcmVcIGZvbGRzPFRhYj56bQkJCQn6wcvSydTJXCAmwqbM2NvFXCDax8/S1Mum1zxUYWI+em0KK21lbnV0cmFucyAmQ2xvc2VcIGFsbFwgZm9sZHM8VGFiPnpNCQkJCfrBy9LJ1MlcICbV06ZcINrHz9LUy8k8VGFiPnpNCittZW51dHJhbnMgJk9wZW5cIGFsbFwgZm9sZHM8VGFiPnpSCQkJCfemxMvSydTJXCDVJtOmXCDax8/S1MvJPFRhYj56UgorbWVudXRyYW5zIE8mcGVuXCBtb3JlXCBmb2xkczxUYWI+enIJCQkJ96bEy9LJ1MlcIMImpszY28VcINrHz9LUy6bXPFRhYj56cgorCittZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCQkJ8ybU18/SydTJXCDax8/S1M/LPFRhYj56ZgorbWVudXRyYW5zICZEZWxldGVcIEZvbGQ8VGFiPnpkCQkJCSb3ycTBzMnUyVwg2sfP0tTPyzxUYWI+emQKK21lbnV0cmFucyBEZWxldGVcICZBbGxcIEZvbGRzPFRhYj56RAkJ98nEwczJ1CbJXCDV06ZcINrHz9LUy8k8VGFiPnpECittZW51dHJhbnMgRm9sZFwgY29sdW1uXCAmd2lkdGgJCQkJJvTP193JzsFcINLRxMvBXCDax8/S1Mum1worbWVudXRyYW5zIEZvbGRcIE1ldCZob2QJCSbtxdTPxFwg2sfP0tTBzs7RCittZW51dHJhbnMgTSZhbnVhbAkJCSby1d7OycoKK21lbnV0cmFucyBJJm5kZW50CQkJJvemxNPU1dAKK21lbnV0cmFucyBFJnhwcmVzc2lvbiAgICAgICD3JsnSwdoKK21lbnV0cmFucyBTJnludGF4CQkJJvPJztTBy9PJ3s7PCittZW51dHJhbnMgTWEmcmtlcgkJCfDPJtrOwd7LyQorCisiIERpZmYKK21lbnV0cmFucyAmRGlmZgkJCQkJ8M8m0qbXztHOztEKK21lbnV0cmFucyAmVXBkYXRlCQkJCSbwz87P18nUyQorbWVudXRyYW5zICZHZXRcIEJsb2NrCQkJJvrB0M/ayd7J1MlcINKm2s7Jw8AKK21lbnV0cmFucyAmUHV0XCBCbG9jawkJCSb30NLP18HEydTJXCDSptrOycPACisKKyIgTWFrZSBhbmQgc3R1ZmYuLi4KK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCSbi1cTV18HUyShtYWtlKTxUYWI+Om1ha2UKK21lbnV0cmFucyAmTGlzdFwgRXJyb3JzPFRhYj46Y2wJCSbz0MnTz8tcINDPzcnMz8s8VGFiPjpjbAorbWVudXRyYW5zIEwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQnz0CbJ08/LXCDQz9emxM/NzMXO2DxUYWI+OmNsIQorbWVudXRyYW5zICZOZXh0XCBFcnJvcjxUYWI+OmNuCQkm7sHT1NXQzsFcINDPzcnMy8E8VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAkm8M/QxdLFxM7RXCDQz83JzMvBPFRhYj46Y3AKK21lbnV0cmFucyAmT2xkZXJcIExpc3Q8VGFiPjpjb2xkCSbi1dfbplwg0M/NyczLyTxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3CSbtwcrC1dTOplwg0M/NyczLyTxUYWI+OmNuZXcKK21lbnV0cmFucyBFcnJvclwgJldpbmRvdwkgICAgJvemy87PXCDQz83JzM/LCittZW51dHJhbnMgJlVwZGF0ZTxUYWI+OmN3aW4JCQkm8M/Oz9fJ1Mk8VGFiPjpjd2luCittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCQkm+sHL0snUyTxUYWI+OmNjbG9zZQorbWVudXRyYW5zICZPcGVuPFRhYj46Y29wZW4JCQkm96bEy9LJ1Mk8VGFiPjpjb3BlbgorCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCQkJ99PUwc7P18nUyVwgJsvPzdCmzNHUz9IKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkICAgICDwxdLF18XT1MlcINdcINum09TOwcTD0dTLz9emXCDLz8TJPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtciAgICAg8M/XxdLO1dTJXCDXXCDE16bKy8/X1Vwgxs/SzdU8VGFiPjolIXh4ZFwgLXIKKworIiBOYW1lcyBmb3IgYnVmZmVyIG1lbnUuCittZW51dHJhbnMgJkJ1ZmZlcnMJJuLVxsXSyQorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51ICbwz87P18nUyQorbWVudXRyYW5zIERlbGV0ZQkm98nEwczJ1MkKK21lbnV0cmFucyAmQWx0ZXJuYXRlCSb31M/Syc7OycoKK21lbnV0cmFucyAmTmV4dAkJJvPMpsTVwN7JygorbWVudXRyYW5zICZQcmV2aW91cwkm8M/QxdLFxM6mygorbWVudXRyYW5zIFtOb1wgRmlsZV0JW+7FzcGkXCDmwcrMwV0KKworIiBXaW5kb3cgbWVudQorbWVudXRyYW5zICZXaW5kb3cJCQkm96bLzs8KK21lbnV0cmFucyAmTmV3PFRhYj5eV24JCQkm7s/XxTxUYWI+XlduCittZW51dHJhbnMgUyZwbGl0PFRhYj5eV3MJCSbyz9rEpszJ1Mk8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4J8s/axKbMydTJXCDEzNFcICbX1M/Syc7Oz8fPXCDGwcrM1TxUYWI+XldeXgorbWVudXRyYW5zIFNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2CfLP2sSmzMnUyVwgJtDP0MXSxcs8VGFiPl5XdgorIm1lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5Xdgkm8s/axKbMydTJXCDQz9DF0sXLPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCQnyz9rEpszJ1MlcIMTM0VwgJtDF0sXHzNHE1VwgxsHKzKbXCisKK21lbnV0cmFucyAmQ2xvc2U8VGFiPl5XYwkJJvrBy9LJ1Mk8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5Xbwn6wcvSydTJXCDV06ZcICamztumPFRhYj5eV28KK21lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQkJJu7B09TV0M7FPFRhYj5eV3cKK21lbnV0cmFucyBQJnJldmlvdXM8VGFiPl5XVwkJJvDP0MXSxcTOpDxUYWI+XldXCittZW51dHJhbnMgJkVxdWFsXCBTaXplPFRhYj5eVz0JCSb3ydKm187R1MlcINLP2s2m0jxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCe7ByibCpszY28FcINfJ08/UwTxUYWI+XldfCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQnuwcomzcXO28FcINfJ08/UwTxUYWI+XlcxXworbWVudXRyYW5zIE1heFwgJldpZHRoPFRhYj5eV1x8CQnuwcrCpibM2NvBXCDbydLJzsE8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCe7Bys3FzibbwVwg28nSyc7BPFRhYj5eVzFcfAorbWVudXRyYW5zIE1vdmVcICZUbwkJCSb6zabT1MnUyQorbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJCeTPJsfP0sk8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJ5M8mzsna1TxUYWI+XldKCittZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAkJ9SbMptfPPFRhYj5eV0gKK21lbnV0cmFucyAmUmlnaHRcIHNpZGU8VGFiPl5XTAkJ9ybQ0sHXzzxUYWI+XldMCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJJuPJy8ym3s7PXCDEz8fP0sk8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJ4ybJy8ym3s7PXCDVzsnaPFRhYj5eV3IKKworIiBUaGUgcG9wdXAgbWVudQorbWVudXRyYW5zICZVbmRvCQkJJvemxM2mzsnUyQorbWVudXRyYW5zIEN1JnQJCQn3ySbSptrB1MkKK21lbnV0cmFucyAmQ29weQkJCSbrz9CmwNfB1MkKK21lbnV0cmFucyAmUGFzdGUJCfcm09TB18nUyQorbWVudXRyYW5zICZEZWxldGUJCffJJsTBzMnUyQorbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCffJwtLB1MlcICbTzM/XzworbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCffJwtLB1MlcICbS0cTPyworbWVudXRyYW5zIFNlbGVjdFwgJkJsb2NrCffJwtLB1MlcICbCzM/LCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQn3ycLSwdTJXCAm1dPFCisKKworCisiIFRoZSBHVUkgdG9vbGJhcgoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorICAgIHRtZW51IFRvb2xCYXIuT3BlbgkJ96bEy9LJ1MkgxsHKzAorICAgIHRtZW51IFRvb2xCYXIuU2F2ZQkJ+sHQwc0n0dTB1MkgxsHKzAorICAgIHRtZW51IFRvb2xCYXIuU2F2ZUFsbAkJ+sHQwc0n0dTB1Mkg1dOmIMbByszJCisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJ5NLVy9XXwdTJCisgICAgdG1lbnUgVG9vbEJhci5VbmRvCQn3psTNps7J1MkKKyAgICB0bWVudSBUb29sQmFyLlJlZG8JCfDP18XSztXUyQorICAgIHRtZW51IFRvb2xCYXIuQ3V0CQn3ydKm2sHUyQorICAgIHRtZW51IFRvb2xCYXIuQ29weQkJ68/QpsDXwdTJCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJ99PUwdfJ1MkKKyAgICB0bWVudSBUb29sQmFyLkZpbmQJCfrOwcrUyS4uLgorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJ+s7BytTJIM7B09TV0M7JygorICAgIHRtZW51IFRvb2xCYXIuRmluZFByZXYJ+s7BytTJINDP0MXSxcTOpsoKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJ+sHNps7J1MkuLi4KKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCfrB18HO1MHWydTJINPFwc7TINLFxMHH1dfBzs7RCisgICAgdG1lbnUgVG9vbEJhci5TYXZlU2Vzbgn6wdDBzSfR1MHUySDTxcHO0yDSxcTBx9XXwc7O0QorICAgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0CffJy8/OwdTJIMbByswgy8/Nwc7ECisgICAgdG1lbnUgVG9vbEJhci5NYWtlCQn6wtXE1dfB1Mkg0NLPxcvUCisgICAgdG1lbnUgVG9vbEJhci5TaGVsbAkJU2hlbGwKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCfPU18/SydTJIMbByswg0M/NptTPyworICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAnwxdLFytTJIMTPINDPzabUy8kKKyAgICB0bWVudSBUb29sQmFyLkhlbHAJCeTP0M/Nz8fBCisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscAnwz9vVyyDVIMTP0M/Nz9qmCisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXggJvPJztTBy9PJ0worbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CffT1MHOz9fMwNfB1MlcIMzJ28VcICcmc3ludGF4JworbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwn309TBzs/XzMDXwdTJXCAnJmZpbGV0eXBlJ1wg1MHLz9YKK21lbnV0cmFucyAmT2ZmCQkJJvfJzcvOxc7PCittZW51dHJhbnMgJk1hbnVhbAkJJvLV3s7JygorbWVudXRyYW5zIEEmdXRvbWF0aWMJCSbh19TPzcHUyd7OzworbWVudXRyYW5zIG9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZQkJ8MXSxc3LztXUyVwgxMzRXCDD2M/Hz1wgJsbByszBCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQnwxdLF16bSy8FcICbLz8zYz9Km1worbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJJvDF0sXXptLLwVwg18nEpszFzs7RCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCfPU18/SydTJXCAmSFRNTAorCisiIGRpYWxvZyB0ZXh0cworbGV0IG1lbnV0cmFuc19ub19maWxlID0gIlvuxc3BpFwg5sHKzMFdIgorbGV0IG1lbnV0cmFuc19oZWxwX2RpYWxvZyA9ICL3y8HWptTYIMvPzcHOxNUgwcLPINPMz9fPIMTM0SDQz9vVy9U6XG5cbuTPxMHK1MUgaV8gxMzRIMvPzcHOxCDSxdbJzdUg19PUwdfLySAozsHQ0i4gaV9DVFJMLVgpXG7kz8TBytTFIGlfIMTM0SDLz83BzsTOz8fPINLF1snN1SAozsHQ0i4g0188RGVsPilcbuTPxMHK1MUgJyDEzNEg0M/azsHexc7O0SDOwdrXySDP0MOmpyAozsHQ0i4gJ3NoaWZ0d2lkdGgnKSIKK2xldCBnOm1lbnV0cmFuc19wYXRoX2RpYWxvZyA9ICL3y8HWptTYINvM0cgg0M/b1cvVIMbBysym11xu8s/axKbM0crUxSDOwdrXySDEydLFy9TP0qbKIMvPzcHNyS4iCitsZXQgZzptZW51dHJhbnNfdGFnc19kaWFsb2cgPSAi98vB1qbU2CDOwdrXySDGwcrMptcg0M/NptTPy1xu8s/axKbM0crUxSDOwdrXySDLz83BzckuIgorbGV0IGc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2cgPSAi98vB1qbU2CDOz9fVINvJ0snO1SDUxcvT1NUgKDAgxMzRINemxM2mzskgxs/NwdTV18HOztEpIgorbGV0IGc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nID0gIvfJwsXSptTYIMbP0s3B1CDGwcrM1SIKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfemguYmlnNS52aW0gYi9ydW50aW1lL2xhbmcvbWVudV96aC5iaWc1LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDdkOGVmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfemguYmlnNS52aW0KQEAgLTAsMCArMSBAQAorc291cmNlIDxzZmlsZT46cDpoL21lbnVfY2hpbmVzZSh0YWl3YW4pX3RhaXdhbi45NTAudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV96aC5jcDkzNi52aW0gYi9ydW50aW1lL2xhbmcvbWVudV96aC5jcDkzNi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5ODU4MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3poLmNwOTM2LnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CVNpbXBsaWZpZWQgQ2hpbmVzZSAoZm9yIFdpbmRvd3MpCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X2NoaW5lc2VfZ2IuOTM2LnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfemguY3A5NTAudmltIGIvcnVudGltZS9sYW5nL21lbnVfemguY3A5NTAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MzdjZTcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV96aC5jcDk1MC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglUcmFkaXRpb25hbCBDaGluZXNlCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X2NoaW5lc2VfdGFpd2FuLjk1MC52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3poLmdiMjMxMi52aW0gYi9ydW50aW1lL2xhbmcvbWVudV96aC5nYjIzMTIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMTZlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV96aC5nYjIzMTIudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJU2ltcGxpZmllZCBDaGluZXNlIChmb3IgV2luZG93cykKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfemhfY24uZ2IyMzEyLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfemhfY24uMTgwMzAudmltIGIvcnVudGltZS9sYW5nL21lbnVfemhfY24uMTgwMzAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZGE0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV96aF9jbi4xODAzMC52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglTaW1wbGlmaWVkIENoaW5lc2UKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfemhfY24uZ2IyMzEyLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfemhfY24uY3A5MzYudmltIGIvcnVudGltZS9sYW5nL21lbnVfemhfY24uY3A5MzYudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTg1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV96aF9jbi5jcDkzNi52aW0KQEAgLTAsMCArMSwzIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglTaW1wbGlmaWVkIENoaW5lc2UgKGZvciBXaW5kb3dzKQorCitzb3VyY2UgPHNmaWxlPjpwOmgvbWVudV9jaGluZXNlX2diLjkzNi52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3poX2NuLmdiMjMxMi52aW0gYi9ydW50aW1lL2xhbmcvbWVudV96aF9jbi5nYjIzMTIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZWFjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV96aF9jbi5nYjIzMTIudmltCkBAIC0wLDAgKzEsMjMwIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglTaW1wbGlmaWVkIENoaW5lc2UgKFVOSVgpCisiIFRyYW5zbGF0ZWQgQnk6CVdhbmcgSnVuIDxqdW53QHR1cmJvbGludXguY29tLmNuPgorIiBMYXN0IENoYW5nZToJCVR1ZSBTZXAgIDQgMTE6MjY6NTIgQ1NUIDIwMDEKKworIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KK2lmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX21lbnVfdHJhbnMgPSAxCisKK3NjcmlwdGVuY29kaW5nIGdiMjMxMgorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJsO/W+igmSCkKK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4J1KTAwCgmTyk8VGFiPjxGMT4KK21lbnV0cmFucyAmVXNlclwgTWFudWFsCQnTw7unytay4SgmVSkKK21lbnV0cmFucyAmR1VJCQkJzbzQzr3nw+YoJkcpCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJSE9XVE/OxLW1XC5cLlwuKCZIKQorbWVudXRyYW5zICZDcmVkaXRzCQnX99XfKCZDKQorbWVudXRyYW5zIENvJnB5aW5nCQmw5sioKCZQKQorbWVudXRyYW5zICZWZXJzaW9uCQmw5rG+KCZWKQorbWVudXRyYW5zICZBYm91dAkJudjT2lwgVmltKCZBKQorCisiIEZpbGUgbWVudQorbWVudXRyYW5zICZGaWxlCQkJCc7EvP4oJkYpCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQm08r+qKCZPKVwuXC5cLjxUYWI+OmUKK21lbnV0cmFucyBTcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCbfWuO60sL/asqK08r+qKCZMKTxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCdDCvagoJk4pPFRhYj46ZW5ldworbWVudXRyYW5zICZDbG9zZTxUYWI+OmNsb3NlCQm52LHVKCZDKTxUYWI+OmNsb3NlCittZW51dHJhbnMgJlNhdmU8VGFiPjp3CQkJsaO05igmUyk8VGFiPjp3CittZW51dHJhbnMgU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2CcHttObOqigmQSlcLlwuXC48VGFiPjpzYXYKK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4Jt9a47rHIvc8oJkRpZmYpXC5cLlwuCittZW51dHJhbnMgU3BsaXRcIFBhdGNoZWRcICZCeVwuXC5cLgm31rjutPKyubahKCZQYXRjaClcLlwuXC4KK21lbnV0cmFucyAmUHJpbnQJCQm08tOhKCZQKQorbWVudXRyYW5zIFNhJnZlLUV4aXQ8VGFiPjp3cWEJCbGjtOayos3Ls/YoJlYpPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCc3Ls/YoJlgpPFRhYj46cWEKKworIiBFZGl0IG1lbnUKK21lbnV0cmFucyAmRWRpdAkJCQmx4LytKCZFKQorbWVudXRyYW5zICZVbmRvPFRhYj51CQkJu9a4tCgmVSk8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQnW2Nf2KCZSKTxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJ1ti4tMnPtM62r9f3KCZFKTxUYWI+XC4KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCQm89MfQKCZUKTxUYWI+Iit4CittZW51dHJhbnMgJkNvcHk8VGFiPiIreQkJCbi01sYoJkMpPFRhYj4iK3kKK21lbnV0cmFucyAmUGFzdGU8VGFiPiIrZ1AJCdWzzPsoJlApPFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkJzPm1vbniserHsCgmQik8VGFiPltwCittZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQnM+bW9ueKx6rrzKCZBKTxUYWI+XXAKK21lbnV0cmFucyAmRGVsZXRlPFRhYj54CQkJyb6z/SgmRCk8VGFiPngKK21lbnV0cmFucyAmU2VsZWN0XCBhbGw8VGFiPmdnVkcJCcir0aEoJlMpPFRhYj5nZ3ZHCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCQmy6dXSKCZGKVwuXC5cLgorbWVudXRyYW5zIEZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JsunV0szmu7soJkwpXC5cLlwuCittZW51dHJhbnMgU2V0dGluZ3NcICZXaW5kb3cJCcnotqi0sL/aKCZXKQorbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQnIq77Wyei2qCgmRykKKworIiBCdWlsZCBib29sZWFuIG9wdGlvbnMKK21lbnV0cmFucyBUb2dnbGVcIFBhdHRlcm5cICZIaWdobGlnaHQ8VGFiPjpzZXRcIGhscyEJv6ovudjU9sG/sunV0sSjyr08VGFiPjpzZXRcIGhscyEKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCQm/qi+52Lr2wtS089Ch0LTEo8q9PFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQkJv6ovudjGpcXkz9TKvjxUYWI+OnNldCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCQnJz8/CzsTQ0Mr9KCZDKQorCittZW51dHJhbnMgJlZpcnR1YWxcIEVkaXQJCQm/ycrTu6+x4LytxKPKvSgmVikKK21lbnV0cmFucyBOZXZlcgkJCQkJtNOyuworbWVudXRyYW5zIEJsb2NrXCBTZWxlY3Rpb24JCQm/6dGh1PEKK21lbnV0cmFucyBJbnNlcnRcIG1vZGUJCQkJsuXI68Sjyr0KK21lbnV0cmFucyBCbG9ja1wgYW5kXCBJbnNlcnQJCQm/6dGh1PHT67LlyOvEo8q9CittZW51dHJhbnMgQWx3YXlzCQkJCcv509DEo8q9CisKK21lbnV0cmFucyBUb2dnbGVcIEluc2VydFwgJk1vZGU8VGFiPjpzZXRcIGltIQm/qi+52LLlyOvEo8q9PFRhYj46c2V0XCBpbSEKKworbWVudXRyYW5zIFNlYXJjaFwgJlBhdGhcLlwuXC4JCQmy6dXSwre+tlwuXC5cLigmUCkKKworbWVudXRyYW5zIFRhJmdcIEZpbGVzXC5cLlwuCQkJserHqc7EvP5cLlwuXC4oJmcpCisKKyIgR1VJIG9wdGlvbnMKK21lbnV0cmFucyBUb2dnbGVcICZUb29sYmFyCQkJv6ovudi5pL7fzPUoJlQpCittZW51dHJhbnMgVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIJCb+qL7nYtdeyv7n2tq/M9SgmQikKK21lbnV0cmFucyBUb2dnbGVcICZMZWZ0XCBTY3JvbGxiYXIJCb+qL7nY1/O2y7n2tq/M9SgmTCkKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCQm/qi+52NPStsu59ravzPUoJlIpCisKKworIiBFZGl0L0ZpbGUgU2V0dGluZ3MKK21lbnV0cmFucyBGJmlsZVwgU2V0dGluZ3MJCQnOxLz+yei2qCgmaSkKKworIiBCb29sZWFuIG9wdGlvbnMKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQm/qi+52M/Uyr7Q0LrFPFRhYj46c2V0XCBudSEKK21lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQkJv6ovudjP1Mq+VGFiPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQm/qi+52NfUtq/V29DQPFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCb+qL7nYtMrOstXb0NA8VGFiPjpzZXRcIGxiciEKK21lbnV0cmFucyBUb2dnbGVcICZleHBhbmQtdGFiPFRhYj46c2V0XCBldCEJCb+qL7nYZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCittZW51dHJhbnMgVG9nZ2xlXCAmYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQkJv6ovudhhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCittZW51dHJhbnMgVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJCb+qL7nYQy1pbmRlbnQ8VGFiPjpzZXRcIGNpbiEKKworCisiIG90aGVyIG9wdGlvbnMKK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJCcv1xcW/7bbIKCZTKQorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQnOsVRhYr/ttsgoJlQpCittZW51dHJhbnMgVGUmeHRcIFdpZHRoXC5cLlwuCQnSs8Pmv+22yCgmeClcLlwuXC4KK21lbnV0cmFucyAmRmlsZVwgRm9ybWF0XC5cLlwuCQnOxLz+uPHKvSgmRilcLlwuXC4KKworbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQm198mrsOUoJm8pCittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkJ0aHU8dfWzOUoJm4pXC5cLlwuCisKKworIiBQcm9ncmFtbWluZyBtZW51CittZW51dHJhbnMgJlRvb2xzCQkJuaS+3ygmVCkKK21lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dCbzsy/e54rHqtKa1xLHqx6m52Lz819YodGFnKSgmSik8VGFiPmdeXQorbWVudXRyYW5zIEp1bXBcICZiYWNrPFRhYj5eVAkJzPi72Lzsy/fHsLXEzrvWwygmQik8VGFiPl5UCittZW51dHJhbnMgQnVpbGRcICZUYWdzXCBGaWxlCQm9qMGiserHqcv30v3OxLz+XCBUYWdzKCZUKQorbWVudXRyYW5zICZGb2xkaW5nCQkJRm9sZGluZ8notqgoJkYpCittZW51dHJhbnMgJkRpZmYJCQkJsci9zygmRCkKK21lbnV0cmFucyAmTWFrZTxUYWI+Om1ha2UJCda00NBcIE1ha2UoJk0pPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJwdCz9rHg0uu07c7zKCZFKTxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCcHQs/bL+dPQ0MXPoigmSSk8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkJz8LSu7j2seDS67TtzvO0pigmTik8VGFiPjpjbgorbWVudXRyYW5zICZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAnJz9K7uPax4NLrtO3O87SmKCZQKTxUYWI+OmNwCittZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAm+ybTtzvPB0LHtKCZPKTxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3CdDCtO3O88HQse0oJkUpPFRhYj46Y25ldworbWVudXRyYW5zIEVycm9yXCAmV2luZG93CQm07c7z0MXPorSwv9ooJlcpCittZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCcno1sOx4NLrxvcoJlMpCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIRVg8VGFiPjolIXh4ZAnXqru7s8kxNr341sY8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yCbTTMTa9+NbG16q7u7vYzsTX1jxUYWI+OiUheHhkXCAtcgorCisiIFRvb2xzLkZvbGQgTWVudQorbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppCQnKudPDL7K7yrnTw0ZvbGRpbmcoJkUpPFRhYj56aQorbWVudXRyYW5zICZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CQmy6b+0tMvQ0CgmVik8VGFiPnp2CittZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eAnWu7Lpv7S0y9DQKCZXKTxUYWI+ek16eAorbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCQm52LHVRm9sZHMoJkwpPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JCbnYsdXL+dPQRm9sZHMoJkMpPFRhYj56TQorbWVudXRyYW5zIE8mcGVuXCBtb3JlXCBmb2xkczxUYWI+enIJCdW5v6pGb2xkcygmUCk8VGFiPnpyCittZW51dHJhbnMgJk9wZW5cIGFsbFwgZm9sZHM8VGFiPnpSCQnVub+qy/nT0EZvbGRzKCZPKTxUYWI+elIKKyIgZm9sZCBtZXRob2QKK21lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkJCUZvbGS3vcq9KCZIKQorbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQkJvajBokZvbGQoJkYpPFRhYj56ZgorbWVudXRyYW5zICZEZWxldGVcIEZvbGQ8VGFiPnpkCQkJyb6z/UZvbGQoJkQpPFRhYj56ZAorbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECQnJvrP9y/nT0EZvbGQoJkEpPFRhYj56RAorIiBtb3ZpbmcgYXJvdW5kIGluIGZvbGRzCittZW51dHJhbnMgRm9sZFwgY29sdW1uXCAmd2lkdGgJCQnJ6LaoRm9sZMC4v+0oJlcpCisKKyIgVG9vbHMuRGlmZiBNZW51CittZW51dHJhbnMgJlVwZGF0ZQkJuPzQwigmVSkKK21lbnV0cmFucyAmR2V0XCBCbG9jawkJyKG1w7K7zayyv7fWKCZHKQorbWVudXRyYW5zICZQdXRcIEJsb2NrCQm9q7K7zayyv7fW06bTw7W9ttS3vSgmUCkKKworCisiIE5hbWVzIGZvciBidWZmZXIgbWVudS4KK21lbnV0cmFucyAmQnVmZmVycwkJu7qz5cf4KCZCKQorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51Cbj80MIoJlIpCittZW51dHJhbnMgJkRlbGV0ZQkJyb6z/SgmRCkKK21lbnV0cmFucyAmQWx0ZXJuYXRlCQnQ3rjEKCZMKQorbWVudXRyYW5zICZOZXh0CQkJz8LSu7j2KCZOKQorbWVudXRyYW5zICZQcmV2aW91cwkJx7DSu7j2KCZQKQorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJCbSwv9ooJlcpCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJ0MK9qLSwv9ooJk4pPFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJt9a47rSwv9ooJlApPFRhYj5eV3MKK21lbnV0cmFucyBTcCZsaXRcIFRvXCAjPFRhYj5eV15eCbfWuO61vSMoJkwpPFRhYj5eV15eCittZW51dHJhbnMgU3BsaXRcICZWZXJ0aWNhbGx5PFRhYj5eV3YJtLnWsbfWuO4oJlYpPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCc7EvP7kr8DAxvfKvbfWuO4oJlgpCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCbnYsdW0sL/aKCZDKTxUYWI+XldjCittZW51dHJhbnMgQ2xvc2VcICZPdGhlcihzKTxUYWI+XldvCbnYsdXG5Mv8tLC/2igmTyk8VGFiPl5XbworbWVudXRyYW5zIE1vdmVcICZUbwkJCdLGtq+1vSgmVCkKK21lbnV0cmFucyAmVG9wPFRhYj5eV0sJCQm2pbbLKCZUKTxUYWI+XldLCittZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCQm117bLKCZCKTxUYWI+XldKCittZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAkJ1/Ox3ygmTCk8VGFiPl5XSAorbWVudXRyYW5zICZSaWdodFwgc2lkZTxUYWI+XldMCQnT0rHfKCZSKTxUYWI+XldMCisiIG1lbnV0cmFucyBOZSZ4dDxUYWI+Xld3CQnPwtK7uPYoJlgpPFRhYj5eV3cKKyIgbWVudXRyYW5zIFAmcmV2aW91czxUYWI+XldXCQnJz9K7uPYoJlIpPFRhYj5eV1cKK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQnJz9LGtLC/2igmVSk8VGFiPl5XUgorbWVudXRyYW5zIFJvdGF0ZVwgJkRvd248VGFiPl5XcgkJz8LSxrSwv9ooJkQpPFRhYj5eV3IKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkJy/nT0LSwv9q1yLjfKCZFKTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCdfutPO437bIKCZNKTxUYWI+XlcKK21lbnV0cmFucyBNJmluXCBIZWlnaHQ8VGFiPl5XMV8JCdfu0KG437bIKCZpKTxUYWI+XlcxXworbWVudXRyYW5zIE1heFwgJldpZHRoPFRhYj5eV1x8CQnX7rTzv+22yCgmVyk8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCdfu0KG/7bbIKCZoKTxUYWI+XlcxXHwKKyIKKyIgVGhlIHBvcHVwIG1lbnUKK21lbnV0cmFucyAmVW5kbwkJCbO3z/ooJlUpCittZW51dHJhbnMgQ3UmdAkJCbz0x9AoJlQpCittZW51dHJhbnMgJkNvcHkJCQm4tNbGKCZDKQorbWVudXRyYW5zICZQYXN0ZQkJ1bPM+ygmUCkKK21lbnV0cmFucyAmRGVsZXRlCQnJvrP9KCZEKQorbWVudXRyYW5zIFNlbGVjdFwgQmxvY2t3aXNlCUJsb2Nrd2lzZdGh1PEKK21lbnV0cmFucyBTZWxlY3RcICZXb3JkCQnRodTxtaW0yigmVykKK21lbnV0cmFucyBTZWxlY3RcICZMaW5lCQnRodTx0NAoJkwpCittZW51dHJhbnMgU2VsZWN0XCAmQmxvY2sJ0aHU8b/pKCZCKQorbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJyKvRoSgmQSkKKyIKKyIgVGhlIEdVSSB0b29sYmFyCitpZiBoYXMoInRvb2xiYXIiKQorICBpZiBleGlzdHMoIipEb190b29sYmFyX3RtZW51IikKKyAgICBkZWxmdW4gRG9fdG9vbGJhcl90bWVudQorICBlbmRpZgorICBmdW4gRG9fdG9vbGJhcl90bWVudSgpCisgICAgdG1lbnUgVG9vbEJhci5PcGVuCQm08r+qzsS8/gorICAgIHRtZW51IFRvb2xCYXIuU2F2ZQkJsaO05rWxx7DOxLz+CisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCbGjtObIq7K/zsS8/gorICAgIHRtZW51IFRvb2xCYXIuUHJpbnQJCbTy06EKKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCbO3z/rJz7TO0N64xAorICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJ1tjX9snPtM6zt8/6tcS2r9f3CisgICAgdG1lbnUgVG9vbEJhci5DdXQJCbz0x9DWwbz0zPmw5QorICAgIHRtZW51IFRvb2xCYXIuQ29weQkJuLTWxrW9vPTM+bDlCisgICAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJ08m89Mz5sOXVs8z7CisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQmy6dXSLi4uCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAmy6dXSz8LSu7j2CisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldgmy6dXSyc/Su7j2CisgICAgdG1lbnUgVG9vbEJhci5SZXBsYWNlCczmu7suLi4KKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCbzT1Ni74buwCisgICAgdG1lbnUgVG9vbEJhci5TYXZlU2Vzbgmxo7TmtbHHsLXEu+G7sAorICAgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0CdTL0NBWaW29xbG+CisgICAgdG1lbnUgVG9vbEJhci5NYWtlCQnWtNDQIE1ha2UKKyAgICB0bWVudSBUb29sQmFyLlNoZWxsCQm08r+q0ru49sP8we60sL/aCisgICAgdG1lbnUgVG9vbEJhci5SdW5DdGFncwnWtNDQIGN0YWdzCisgICAgdG1lbnUgVG9vbEJhci5UYWdKdW1wCcz4tb21scewueKx6s671sO1xLHqx6kKKyAgICB0bWVudSBUb29sQmFyLkhlbHAJCVZpbSCw79b6CisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscAmy6dXSIFZpbSCw79b6CisgIGVuZGZ1bgorZW5kaWYKKworIiBTeW50YXggbWVudQorbWVudXRyYW5zICZTeW50YXgJCdPvt6goJlMpCittZW51dHJhbnMgU2V0XCAnJnN5bnRheCdcIG9ubHkJ1rvJ6LaoXCAnc3ludGF4JygmcykKK21lbnV0cmFucyBTZXRcICcmZmlsZXR5cGUnXCB0b28J0rLJ6LaoXCAnZmlsZXR5cGUnKCZmKQorbWVudXRyYW5zICZPZmYJCQm52LHVKCZPKQorbWVudXRyYW5zICZNYW51YWwJCcrWtq/J6LaoKCZNKQorbWVudXRyYW5zIEEmdXRvbWF0aWMJCdfUtq/J6LaoKCZVKQorbWVudXRyYW5zIG9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZQnWu7bU1eK49s7EvP608r+qL7nYsdUoJlQpCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQnJq7LKz9TKvrLiytQoJkwpCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAnT77eo0Ke5+7LiytQoJkgpCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCdequ7uzyVwgSFRNTFwguPHKvSgmQykKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3poX2NuLmdiay52aW0gYi9ydW50aW1lL2xhbmcvbWVudV96aF9jbi5nYmsudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZGE0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV96aF9jbi5nYmsudmltCkBAIC0wLDAgKzEsMyBAQAorIiBNZW51IFRyYW5zbGF0aW9uczoJU2ltcGxpZmllZCBDaGluZXNlCisKK3NvdXJjZSA8c2ZpbGU+OnA6aC9tZW51X3poX2NuLmdiMjMxMi52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X3poX2NuLnV0Zi04LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X3poX2NuLnV0Zi04LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGQ0NDZlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfemhfY24udXRmLTgudmltCkBAIC0wLDAgKzEsMjMwIEBACisiIE1lbnUgVHJhbnNsYXRpb25zOglTaW1wbGlmaWVkIENoaW5lc2UgKFVURi04KQorIiBUcmFuc2xhdGVkIEJ5OglXYW5nIEp1biA8anVud0B0dXJib2xpbnV4LmNvbS5jbj4KKyIgTGFzdCBDaGFuZ2U6CQlUdWUgU2VwICA0IDExOjI2OjUyIENTVCAyMDAxCisKKyIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorCitzY3JpcHRlbmNvZGluZyB1dGYtOAorCisiIEhlbHAgbWVudQorbWVudXRyYW5zICZIZWxwCQkJ5biu5YqpKCZIKQorbWVudXRyYW5zICZPdmVydmlldzxUYWI+PEYxPgnpooTop4goJk8pPFRhYj48RjE+CittZW51dHJhbnMgJlVzZXJcIE1hbnVhbAkJ55So5oi35omL5YaMKCZVKQorbWVudXRyYW5zICZHVUkJCQnlm77lvaLnlYzpnaIoJkcpCittZW51dHJhbnMgJkhvdy10b1wgbGlua3MJSE9XVE/mlofmoaNcLlwuXC4oJkgpCittZW51dHJhbnMgJkNyZWRpdHMJCeS9nOiAhSgmQykKK21lbnV0cmFucyBDbyZweWluZwkJ54mI5p2DKCZQKQorbWVudXRyYW5zICZWZXJzaW9uCQnniYjmnKwoJlYpCittZW51dHJhbnMgJkFib3V0CQnlhbPkuo5cIFZpbSgmQSkKKworIiBGaWxlIG1lbnUKK21lbnV0cmFucyAmRmlsZQkJCQnmlofku7YoJkYpCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQnmiZPlvIAoJk8pXC5cLlwuPFRhYj46ZQorbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AJ5YiG5Ymy56qX5Y+j5bm25omT5byAKCZMKTxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCeaWsOW7uigmTik8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCeWFs+mXrSgmQyk8VGFiPjpjbG9zZQorbWVudXRyYW5zICZTYXZlPFRhYj46dwkJCeS/neWtmCgmUyk8VGFiPjp3CittZW51dHJhbnMgU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2CeWPpuWtmOS4uigmQSlcLlwuXC48VGFiPjpzYXYKK21lbnV0cmFucyBTcGxpdFwgJkRpZmZcIHdpdGhcLlwuXC4J5YiG5Ymy5q+U6L6DKCZEaWZmKVwuXC5cLgorbWVudXRyYW5zIFNwbGl0XCBQYXRjaGVkXCAmQnlcLlwuXC4J5YiG5Ymy5omT6KGl5LiBKCZQYXRjaClcLlwuXC4KK21lbnV0cmFucyAmUHJpbnQJCQnmiZPljbAoJlApCittZW51dHJhbnMgU2EmdmUtRXhpdDxUYWI+OndxYQkJ5L+d5a2Y5bm26YCA5Ye6KCZWKTxUYWI+OndxYQorbWVudXRyYW5zIEUmeGl0PFRhYj46cWEJCQnpgIDlh7ooJlgpPFRhYj46cWEKKworIiBFZGl0IG1lbnUKK21lbnV0cmFucyAmRWRpdAkJCQnnvJbovpEoJkUpCittZW51dHJhbnMgJlVuZG88VGFiPnUJCQnmgaLlpI0oJlUpPFRhYj51CittZW51dHJhbnMgJlJlZG88VGFiPl5SCQkJ6YeN5YGaKCZSKTxUYWI+XlIKK21lbnV0cmFucyBSZXAmZWF0PFRhYj5cLgkJ6YeN5aSN5LiK5qyh5Yqo5L2cKCZFKTxUYWI+XC4KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCQnliarliIcoJlQpPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJ5aSN5Yi2KCZDKTxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQnnspjluJYoJlApPFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkJ6LS05Yiw5YWJ5qCH5YmNKCZCKTxUYWI+W3AKK21lbnV0cmFucyBQdXRcICZBZnRlcjxUYWI+XXAJCei0tOWIsOWFieagh+WQjigmQSk8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCeWIoOmZpCgmRCk8VGFiPngKK21lbnV0cmFucyAmU2VsZWN0XCBhbGw8VGFiPmdnVkcJCeWFqOmAiSgmUyk8VGFiPmdndkcKK21lbnV0cmFucyAmRmluZFwuXC5cLgkJCeafpeaJvigmRilcLlwuXC4KK21lbnV0cmFucyBGaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuCeafpeaJvuabv+aNoigmTClcLlwuXC4KK21lbnV0cmFucyBTZXR0aW5nc1wgJldpbmRvdwkJ6K6+5a6a56qX5Y+jKCZXKQorbWVudXRyYW5zICZHbG9iYWxcIFNldHRpbmdzCQnlhajlsYDorr7lrpooJkcpCisKKyIgQnVpbGQgYm9vbGVhbiBvcHRpb25zCittZW51dHJhbnMgVG9nZ2xlXCBQYXR0ZXJuXCAmSGlnaGxpZ2h0PFRhYj46c2V0XCBobHMhCeW8gC/lhbPlop7ph4/mn6Xmib7mqKHlvI88VGFiPjpzZXRcIGhscyEKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCQnlvIAv5YWz5b+955Wl5aSn5bCP5YaZ5qih5byPPFRhYj46c2V0XCBpYyEKK21lbnV0cmFucyBUb2dnbGVcICZTaG93bWF0Y2g8VGFiPjpzZXRcIHNtIQkJ5byAL+WFs+WMuemFjeaYvuekujxUYWI+OnNldCBzbSEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCQnkuIrkuIvmlofooYzmlbAoJkMpCisKK21lbnV0cmFucyAmVmlydHVhbFwgRWRpdAkJCeWPr+inhuWMlue8lui+keaooeW8jygmVikKK21lbnV0cmFucyBOZXZlcgkJCQkJ5LuO5LiNCittZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgkJCeWdl+mAieaLqQorbWVudXRyYW5zIEluc2VydFwgbW9kZQkJCQnmj5LlhaXmqKHlvI8KK21lbnV0cmFucyBCbG9ja1wgYW5kXCBJbnNlcnQJCQnlnZfpgInmi6nkuI7mj5LlhaXmqKHlvI8KK21lbnV0cmFucyBBbHdheXMJCQkJ5omA5pyJ5qih5byPCisKK21lbnV0cmFucyBUb2dnbGVcIEluc2VydFwgJk1vZGU8VGFiPjpzZXRcIGltIQnlvIAv5YWz5o+S5YWl5qih5byPPFRhYj46c2V0XCBpbSEKKworbWVudXRyYW5zIFNlYXJjaFwgJlBhdGhcLlwuXC4JCQnmn6Xmib7ot6/lvoRcLlwuXC4oJlApCisKK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJCeagh+etvuaWh+S7tlwuXC5cLigmZykKKworIiBHVUkgb3B0aW9ucworbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCQnlvIAv5YWz5bel5YW35p2hKCZUKQorbWVudXRyYW5zIFRvZ2dsZVwgJkJvdHRvbVwgU2Nyb2xsYmFyCQnlvIAv5YWz5bqV6YOo5rua5Yqo5p2hKCZCKQorbWVudXRyYW5zIFRvZ2dsZVwgJkxlZnRcIFNjcm9sbGJhcgkJ5byAL+WFs+W3puerr+a7muWKqOadoSgmTCkKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCQnlvIAv5YWz5Y+z56uv5rua5Yqo5p2hKCZSKQorCisKKyIgRWRpdC9GaWxlIFNldHRpbmdzCittZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQkJ5paH5Lu26K6+5a6aKCZpKQorCisiIEJvb2xlYW4gb3B0aW9ucworbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCeW8gC/lhbPmmL7npLrooYzlj7c8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgJkxpc3RcIE1vZGU8VGFiPjpzZXRcIGxpc3QhCQnlvIAv5YWz5pi+56S6VGFiPFRhYj46c2V0XCBsaXN0IQorbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJldyYXA8VGFiPjpzZXRcIHdyYXAhCQnlvIAv5YWz6Ieq5Yqo5oqY6KGMPFRhYj46c2V0XCB3cmFwIQorbWVudXRyYW5zIFRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCeW8gC/lhbPor43lsL7mipjooYw8VGFiPjpzZXRcIGxiciEKK21lbnV0cmFucyBUb2dnbGVcICZleHBhbmQtdGFiPFRhYj46c2V0XCBldCEJCeW8gC/lhbNleHBhbmQtdGFiPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCQnlvIAv5YWzYXV0by1pbmRlbnQ8VGFiPjpzZXRcIGFpIQorbWVudXRyYW5zIFRvZ2dsZVwgJkMtaW5kZW50aW5nPFRhYj46c2V0XCBjaW4hCQnlvIAv5YWzQy1pbmRlbnQ8VGFiPjpzZXRcIGNpbiEKKworCisiIG90aGVyIG9wdGlvbnMKK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJCee8qeaOkuWuveW6pigmUykKK21lbnV0cmFucyBTb2Z0XCAmVGFic3RvcAkJ5LyqVGFi5a695bqmKCZUKQorbWVudXRyYW5zIFRlJnh0XCBXaWR0aFwuXC5cLgkJ6aG16Z2i5a695bqmKCZ4KVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCeaWh+S7tuagvOW8jygmRilcLlwuXC4KKworbWVudXRyYW5zIEMmb2xvclwgU2NoZW1lCQnosIPoibLmnb8oJm8pCittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkJ6YCJ5oup5a2X5L2TKCZuKVwuXC5cLgorCisKKyIgUHJvZ3JhbW1pbmcgbWVudQorbWVudXRyYW5zICZUb29scwkJCeW3peWFtygmVCkKK21lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dCeajgOe0ouWFieagh+WkhOeahOagh+etvuWFs+mUruWtlyh0YWcpKCZKKTxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQnot7Plm57mo4DntKLliY3nmoTkvY3nva4oJkIpPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJ5bu656uL5qCH562+57Si5byV5paH5Lu2XCBUYWdzKCZUKQorbWVudXRyYW5zICZGb2xkaW5nCQkJRm9sZGluZ+iuvuWumigmRikKK21lbnV0cmFucyAmRGlmZgkJCQnmr5TovoMoJkQpCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQnmiafooYxcIE1ha2UoJk0pPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJ5YiX5Ye657yW6K+R6ZSZ6K+vKCZFKTxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCeWIl+WHuuaJgOacieS/oeaBrygmSSk8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkJ5LiL5LiA5Liq57yW6K+R6ZSZ6K+v5aSEKCZOKTxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCeS4iuS4gOS4que8luivkemUmeivr+WkhCgmUCk8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJ5pen6ZSZ6K+v5YiX6KGoKCZPKTxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3CeaWsOmUmeivr+WIl+ihqCgmRSk8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCemUmeivr+S/oeaBr+eql+WPoygmVykKK21lbnV0cmFucyAmU2V0XCBDb21waWxlcgkJ6K6+572u57yW6K+R5ZmoKCZTKQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJ6L2s5o2i5oiQMTbov5vliLY8VGFiPjolIXh4ZAorbWVudXRyYW5zIENvbnZlJnJ0XCBiYWNrPFRhYj46JSF4eGRcIC1yCeS7jjE26L+b5Yi26L2s5o2i5Zue5paH5a2XPFRhYj46JSF4eGRcIC1yCisKKyIgVG9vbHMuRm9sZCBNZW51CittZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJCeS9v+eUqC/kuI3kvb/nlKhGb2xkaW5nKCZFKTxUYWI+emkKK21lbnV0cmFucyAmVmlld1wgQ3Vyc29yXCBMaW5lPFRhYj56dgkJ5p+l55yL5q2k6KGMKCZWKTxUYWI+enYKK21lbnV0cmFucyBWaWUmd1wgQ3Vyc29yXCBMaW5lXCBvbmx5PFRhYj56TXp4CeWPquafpeeci+atpOihjCgmVyk8VGFiPnpNengKK21lbnV0cmFucyBDJmxvc2VcIG1vcmVcIGZvbGRzPFRhYj56bQkJ5YWz6ZetRm9sZHMoJkwpPFRhYj56bQorbWVudXRyYW5zICZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JCeWFs+mXreaJgOaciUZvbGRzKCZDKTxUYWI+ek0KK21lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyCQnlsZXlvIBGb2xkcygmUCk8VGFiPnpyCittZW51dHJhbnMgJk9wZW5cIGFsbFwgZm9sZHM8VGFiPnpSCQnlsZXlvIDmiYDmnIlGb2xkcygmTyk8VGFiPnpSCisiIGZvbGQgbWV0aG9kCittZW51dHJhbnMgRm9sZFwgTWV0JmhvZAkJCQlGb2xk5pa55byPKCZIKQorbWVudXRyYW5zIENyZWF0ZVwgJkZvbGQ8VGFiPnpmCQkJ5bu656uLRm9sZCgmRik8VGFiPnpmCittZW51dHJhbnMgJkRlbGV0ZVwgRm9sZDxUYWI+emQJCQnliKDpmaRGb2xkKCZEKTxUYWI+emQKK21lbnV0cmFucyBEZWxldGVcICZBbGxcIEZvbGRzPFRhYj56RAkJ5Yig6Zmk5omA5pyJRm9sZCgmQSk8VGFiPnpECisiIG1vdmluZyBhcm91bmQgaW4gZm9sZHMKK21lbnV0cmFucyBGb2xkXCBjb2x1bW5cICZ3aWR0aAkJCeiuvuWumkZvbGTmoI/lrr0oJlcpCisKKyIgVG9vbHMuRGlmZiBNZW51CittZW51dHJhbnMgJlVwZGF0ZQkJ5pu05pawKCZVKQorbWVudXRyYW5zICZHZXRcIEJsb2NrCQnlj5blvpfkuI3lkIzpg6jliIYoJkcpCittZW51dHJhbnMgJlB1dFwgQmxvY2sJCeWwhuS4jeWQjOmDqOWIhuW6lOeUqOWIsOWvueaWuSgmUCkKKworCisiIE5hbWVzIGZvciBidWZmZXIgbWVudS4KK21lbnV0cmFucyAmQnVmZmVycwkJ57yT5Yay5Yy6KCZCKQorbWVudXRyYW5zICZSZWZyZXNoXCBtZW51CeabtOaWsCgmUikKK21lbnV0cmFucyAmRGVsZXRlCQnliKDpmaQoJkQpCittZW51dHJhbnMgJkFsdGVybmF0ZQkJ5L+u5pS5KCZMKQorbWVudXRyYW5zICZOZXh0CQkJ5LiL5LiA5LiqKCZOKQorbWVudXRyYW5zICZQcmV2aW91cwkJ5YmN5LiA5LiqKCZQKQorCisiIFdpbmRvdyBtZW51CittZW51dHJhbnMgJldpbmRvdwkJCeeql+WPoygmVykKK21lbnV0cmFucyAmTmV3PFRhYj5eV24JCQnmlrDlu7rnqpflj6MoJk4pPFRhYj5eV24KK21lbnV0cmFucyBTJnBsaXQ8VGFiPl5XcwkJ5YiG5Ymy56qX5Y+jKCZQKTxUYWI+XldzCittZW51dHJhbnMgU3AmbGl0XCBUb1wgIzxUYWI+XldeXgnliIblibLliLAjKCZMKTxUYWI+XldeXgorbWVudXRyYW5zIFNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2CeWeguebtOWIhuWJsigmVik8VGFiPl5XdgorbWVudXRyYW5zIFNwbGl0XCBGaWxlXCBFJnhwbG9yZXIJ5paH5Lu25rWP6KeI5Zmo5byP5YiG5YmyKCZYKQorbWVudXRyYW5zICZDbG9zZTxUYWI+XldjCQnlhbPpl63nqpflj6MoJkMpPFRhYj5eV2MKK21lbnV0cmFucyBDbG9zZVwgJk90aGVyKHMpPFRhYj5eV28J5YWz6Zet5YW25a6D56qX5Y+jKCZPKTxUYWI+XldvCittZW51dHJhbnMgTW92ZVwgJlRvCQkJ56e75Yqo5YiwKCZUKQorbWVudXRyYW5zICZUb3A8VGFiPl5XSwkJCemhtuerrygmVCk8VGFiPl5XSworbWVudXRyYW5zICZCb3R0b208VGFiPl5XSgkJ5bqV56uvKCZCKTxUYWI+XldKCittZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAkJ5bem6L65KCZMKTxUYWI+XldICittZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJCeWPs+i+uSgmUik8VGFiPl5XTAorIiBtZW51dHJhbnMgTmUmeHQ8VGFiPl5XdwkJ5LiL5LiA5LiqKCZYKTxUYWI+Xld3CisiIG1lbnV0cmFucyBQJnJldmlvdXM8VGFiPl5XVwkJ5LiK5LiA5LiqKCZSKTxUYWI+XldXCittZW51dHJhbnMgUm90YXRlXCAmVXA8VGFiPl5XUgkJ5LiK56e756qX5Y+jKCZVKTxUYWI+XldSCittZW51dHJhbnMgUm90YXRlXCAmRG93bjxUYWI+XldyCQnkuIvnp7vnqpflj6MoJkQpPFRhYj5eV3IKK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkJ5omA5pyJ56qX5Y+j562J6auYKCZFKTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCeacgOWkp+mrmOW6pigmTSk8VGFiPl5XCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQnmnIDlsI/pq5jluqYoJmkpPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCeacgOWkp+WuveW6pigmVyk8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCeacgOWwj+WuveW6pigmaCk8VGFiPl5XMVx8CisiCisiIFRoZSBwb3B1cCBtZW51CittZW51dHJhbnMgJlVuZG8JCQnmkqTplIAoJlUpCittZW51dHJhbnMgQ3UmdAkJCeWJquWIhygmVCkKK21lbnV0cmFucyAmQ29weQkJCeWkjeWItigmQykKK21lbnV0cmFucyAmUGFzdGUJCeeymOW4ligmUCkKK21lbnV0cmFucyAmRGVsZXRlCQnliKDpmaQoJkQpCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJQmxvY2t3aXNl6YCJ5oupCittZW51dHJhbnMgU2VsZWN0XCAmV29yZAkJ6YCJ5oup5Y2V6K+NKCZXKQorbWVudXRyYW5zIFNlbGVjdFwgJkxpbmUJCemAieaLqeihjCgmTCkKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawnpgInmi6nlnZcoJkIpCittZW51dHJhbnMgU2VsZWN0XCAmQWxsCQnlhajpgIkoJkEpCisiCisiIFRoZSBHVUkgdG9vbGJhcgoraWYgaGFzKCJ0b29sYmFyIikKKyAgaWYgZXhpc3RzKCIqRG9fdG9vbGJhcl90bWVudSIpCisgICAgZGVsZnVuIERvX3Rvb2xiYXJfdG1lbnUKKyAgZW5kaWYKKyAgZnVuIERvX3Rvb2xiYXJfdG1lbnUoKQorICAgIHRtZW51IFRvb2xCYXIuT3BlbgkJ5omT5byA5paH5Lu2CisgICAgdG1lbnUgVG9vbEJhci5TYXZlCQnkv53lrZjlvZPliY3mlofku7YKKyAgICB0bWVudSBUb29sQmFyLlNhdmVBbGwJ5L+d5a2Y5YWo6YOo5paH5Lu2CisgICAgdG1lbnUgVG9vbEJhci5QcmludAkJ5omT5Y2wCisgICAgdG1lbnUgVG9vbEJhci5VbmRvCQnmkqTplIDkuIrmrKHkv67mlLkKKyAgICB0bWVudSBUb29sQmFyLlJlZG8JCemHjeWBmuS4iuasoeaSpOmUgOeahOWKqOS9nAorICAgIHRtZW51IFRvb2xCYXIuQ3V0CQnliarliIfoh7PliarotLTmnb8KKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCeWkjeWItuWIsOWJqui0tOadvworICAgIHRtZW51IFRvb2xCYXIuUGFzdGUJCeeUseWJqui0tOadv+eymOW4lgorICAgIHRtZW51IFRvb2xCYXIuRmluZAkJ5p+l5om+Li4uCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAnmn6Xmib7kuIvkuIDkuKoKKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CeafpeaJvuS4iuS4gOS4qgorICAgIHRtZW51IFRvb2xCYXIuUmVwbGFjZQnmm7/mjaIuLi4KKyAgICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCeWKoOi9veS8muivnQorICAgIHRtZW51IFRvb2xCYXIuU2F2ZVNlc24J5L+d5a2Y5b2T5YmN55qE5Lya6K+dCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJ6L+Q6KGMVmlt6ISa5pysCisgICAgdG1lbnUgVG9vbEJhci5NYWtlCQnmiafooYwgTWFrZQorICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCeaJk+W8gOS4gOS4quWRveS7pOeql+WPoworICAgIHRtZW51IFRvb2xCYXIuUnVuQ3RhZ3MJ5omn6KGMIGN0YWdzCisgICAgdG1lbnUgVG9vbEJhci5UYWdKdW1wCei3s+WIsOW9k+WJjeWFieagh+S9jee9rueahOagh+etvgorICAgIHRtZW51IFRvb2xCYXIuSGVscAkJVmltIOW4ruWKqQorICAgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJ5p+l5om+IFZpbSDluK7liqkKKyAgZW5kZnVuCitlbmRpZgorCisiIFN5bnRheCBtZW51CittZW51dHJhbnMgJlN5bnRheAkJ6K+t5rOVKCZTKQorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CeWPquiuvuWumlwgJ3N5bnRheCcoJnMpCittZW51dHJhbnMgU2V0XCAnJmZpbGV0eXBlJ1wgdG9vCeS5n+iuvuWumlwgJ2ZpbGV0eXBlJygmZikKK21lbnV0cmFucyAmT2ZmCQkJ5YWz6ZetKCZPKQorbWVudXRyYW5zICZNYW51YWwJCeaJi+WKqOiuvuWumigmTSkKK21lbnV0cmFucyBBJnV0b21hdGljCQnoh6rliqjorr7lrpooJlUpCittZW51dHJhbnMgb24vb2ZmXCBmb3JcICZUaGlzXCBmaWxlCeWPquWvuei/meS4quaWh+S7tuaJk+W8gC/lhbPpl60oJlQpCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQnoibLlvanmmL7npLrmtYvor5UoJkwpCittZW51dHJhbnMgJkhpZ2hsaWdodFwgdGVzdAnor63ms5XmlYjmnpzmtYvor5UoJkgpCittZW51dHJhbnMgJkNvbnZlcnRcIHRvXCBIVE1MCei9rOaNouaIkFwgSFRNTFwg5qC85byPKCZDKQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfemhfdHcuYmlnNS52aW0gYi9ydW50aW1lL2xhbmcvbWVudV96aF90dy5iaWc1LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDdkOGVmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9sYW5nL21lbnVfemhfdHcuYmlnNS52aW0KQEAgLTAsMCArMSBAQAorc291cmNlIDxzZmlsZT46cDpoL21lbnVfY2hpbmVzZSh0YWl3YW4pX3RhaXdhbi45NTAudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV96aF90dy5jcDk1MC52aW0gYi9ydW50aW1lL2xhbmcvbWVudV96aF90dy5jcDk1MC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzN2NlNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X3poX3R3LmNwOTUwLnZpbQpAQCAtMCwwICsxLDMgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CVRyYWRpdGlvbmFsIENoaW5lc2UKKworc291cmNlIDxzZmlsZT46cDpoL21lbnVfY2hpbmVzZV90YWl3YW4uOTUwLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfemhfdHcudXRmLTgudmltIGIvcnVudGltZS9sYW5nL21lbnVfemhfdHcudXRmLTgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MWNlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2xhbmcvbWVudV96aF90dy51dGYtOC52aW0KQEAgLTAsMCArMSwyODQgQEAKKyIgTWVudSBUcmFuc2xhdGlvbnM6CVRyYWRpdGlvbmFsIENoaW5lc2UgKGZvciBVVEYtOCkKKyIgVHJhbnNsYXRlZCBCeToJSHVuZy1UZWgsIExpbgk8cGlhaXBAY3NpZS5udHUuZWR1LnR3PgorIiBMYXN0IENoYW5nZToJCVRodSBBcHIgMjQgMTc6MzU6MTcgQ1NUIDIwMDMKKworIiB7e3sgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCitpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGRpZF9tZW51X3RyYW5zID0gMQorIiB9fX0KKworc2NyaXB0ZW5jb2RpbmcgdXRmLTgKKworIiB7e3sgSGVscCBtZW51OiBjb21wbGV0ZQorbWVudXRyYW5zICZIZWxwCQkJ6LyU5Yqp6Kqq5piOKCZIKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmT3ZlcnZpZXc8VGFiPjxGMT4J6Kqq5piO5paH5Lu257i96Ka9KCZPKTxUYWI+PEYxPgorbWVudXRyYW5zICZVc2VyXCBNYW51YWwJCeS9v+eUqOiAheaJi+WGiigmVSkKK21lbnV0cmFucyAmSG93LXRvXCBsaW5rcwnlpoLkvZXkvZxcLlwuXC4oJkgpCittZW51dHJhbnMgJkdVSQkJCeWcluWei+eVjOmdoigmRykKK21lbnV0cmFucyAmQ3JlZGl0cwkJ5oSf6KydKCZDKQorbWVudXRyYW5zIENvJnB5aW5nCQnniYjmrIrlrqPlkYooJlApCittZW51dHJhbnMgTyZycGhhbnMJCeaLr+aVkeWtpOWFkigmUikKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJlZlcnNpb24JCeeoi+W8j+eJiOacrOizh+ioiigmVikKK21lbnV0cmFucyAmQWJvdXQJCemXnOaWvFwgVmltKCZBKQorIiB9fX0KKworIiB7e3sgRmlsZSBtZW51OiBjb21wbGV0ZQorbWVudXRyYW5zICZGaWxlCQkJCeaqlOahiCgmRikKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJk9wZW5cLlwuXC48VGFiPjplCQnplovllZ8oJk8pXC5cLlwuPFRhYj46ZQorbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AJ5YiG5Ymy6KaW56qX5Lim6ZaL5ZWfKCZMKTxUYWI+OnNwCittZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCee3qOi8r+aWsOaqlOahiCgmTik8VGFiPjplbmV3CittZW51dHJhbnMgJkNsb3NlPFRhYj46Y2xvc2UJCemXnOmWieaqlOahiCgmQyk8VGFiPjpjbG9zZQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmU2F2ZTxUYWI+OncJCQnlhLLlrZgoJlMpPFRhYj46dworbWVudXRyYW5zIFNhdmVcICZBc1wuXC5cLjxUYWI+OnNhdgnlj6blrZjmlrDmqpQoJkEpXC5cLlwuPFRhYj46c2F2CisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zIFNwbGl0XCAmRGlmZlwgd2l0aFwuXC5cLgnmr5TovIMoJkRpZmYpXC5cLlwuCittZW51dHJhbnMgU3BsaXRcIFBhdGNoZWRcICZCeVwuXC5cLgnln7fooYxQYXRjaCgmQilcLlwuXC4KKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJlByaW50CQkJ5YiX5Y2wKCZQKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyBTYSZ2ZS1FeGl0PFRhYj46d3FhCQnlhLLlrZjkuKbpm6LplosoJlYpPFRhYj46d3FhCittZW51dHJhbnMgRSZ4aXQ8VGFiPjpxYQkJCemboumWiygmWCk8VGFiPjpxYQorIiB9fX0KKworIiB7e3sgRWRpdCBtZW51CittZW51dHJhbnMgJkVkaXQJCQkJ57eo6LyvKCZFKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmVW5kbzxUYWI+dQkJCeW+qeWOnygmVSk8VGFiPnUKK21lbnV0cmFucyAmUmVkbzxUYWI+XlIJCQnlj5bmtojkuIrmrKHlvqnljp8oJlIpPFRhYj5eUgorbWVudXRyYW5zIFJlcCZlYXQ8VGFiPlwuCQnph43opIfkuIrmrKHli5XkvZwoJkUpPFRhYj5cLgorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyBDdSZ0PFRhYj4iK3gJCQnliarkuIsoJlQpPFRhYj4iK3gKK21lbnV0cmFucyAmQ29weTxUYWI+Iit5CQkJ6KSH6KO9KCZDKTxUYWI+Iit5CittZW51dHJhbnMgJlBhc3RlPFRhYj4iK2dQCQnosrzkuIooJlApPFRhYj4iK2dQCittZW51dHJhbnMgUHV0XCAmQmVmb3JlPFRhYj5bcAkJ6LK85Yiw5ri45qiZ5YmNKCZCKTxUYWI+W3AKK21lbnV0cmFucyBQdXRcICZBZnRlcjxUYWI+XXAJCeiyvOWIsOa4uOaomeW+jCgmQSk8VGFiPl1wCittZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCeWIqumZpCgmRCk8VGFiPngKK21lbnV0cmFucyAmU2VsZWN0XCBhbGw8VGFiPmdnVkcJCeWFqOmBuCgmUyk8VGFiPmdndkcKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJkZpbmRcLlwuXC4JCQnlsIvmib4oJkYpXC5cLlwuCittZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZVwuXC5cLgnlsIvmib7kuKblj5bku6MoJkwpXC5cLlwuCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zIFNldHRpbmdzXCAmV2luZG93CQnoqK3lrproppbnqpcoJlcpCittZW51dHJhbnMgJkdsb2JhbFwgU2V0dGluZ3MJCeWFqOWfn+ioreWumigmRykKK21lbnV0cmFucyBGJmlsZVwgU2V0dGluZ3MJCeioreWumuatpOaqlOahiCgmSSkKK21lbnV0cmFucyBDJm9sb3JcIFNjaGVtZQkJ6YWN6Imy6Kit5a6aKCZPKQorbWVudXRyYW5zICZLZXltYXAJCQnpjbXnm6TlsI3mh4koJkspCisgICAgIiAie3t7IEtleW1hcDoKKyAgICBtZW51dHJhbnMgTm9uZQkJCeeEoQorICAgICIgfX19CittZW51dHJhbnMgU2VsZWN0XCBGbyZudFwuXC5cLgkJ6Kit5a6a5a2X5Z6LKCZOKVwuXC5cLgorIiB9fX0KKworIiB7e3sgRWRpdC5GaWxlU2V0dGluZ3MKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51ISAgICDliIfmj5vpoa/npLrooYzomZ8oJk4pPFRhYj46c2V0XCBudSEKK21lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQkgICAg5YiH5o+b6aGv56S66KGM5bC+5Y+KVEFCKCZMKTxUYWI+OnNldFwgbGlzdCEKK21lbnV0cmFucyBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQkgICAg5YiH5o+b6Ieq5YuV5oqY6KGM6aGv56S6KCZXKTxUYWI+OnNldFwgd3JhcCEKK21lbnV0cmFucyBUb2dnbGVcIFcmcmFwXCBhdFwgd29yZDxUYWI+OnNldFwgbGJyISAgICDliIfmj5vmipjooYzpoa/npLrlj6/ku7vmhI/mlrflj6UoJlIpPFRhYj46c2V0XCBsYnIhCittZW51dHJhbnMgVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCSAgICDliIfmj5vlsZXplotUQUIoJkUpPFRhYj46c2V0XCBldCEKK21lbnV0cmFucyBUb2dnbGVcICZhdXRvLWluZGVudDxUYWI+OnNldFwgYWkhCSAgICDliIfmj5voh6rli5XnuK7mjpIoJkEpPFRhYj46c2V0XCBhaSEKK21lbnV0cmFucyBUb2dnbGVcICZDLWluZGVudGluZzxUYWI+OnNldFwgY2luIQkgICAg5YiH5o+b77yj6Kqe6KiA57iu5o6SKCZDKTxUYWI+OnNldFwgY2luIQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmU2hpZnR3aWR0aAkJCQkgICAg57iu5o6S5a+s5bqmKHNoaWZ0d2lkdGgpKCZTKQorbWVudXRyYW5zIFNvZnRcICZUYWJzdG9wCQkJICAgIOi7n+mrlOaooeaTrFRBQihzb2Z0dGFic3RvcCkoJlQpCittZW51dHJhbnMgVGUmeHRcIFdpZHRoXC5cLlwuCQkJICAgIOaWh+Wtl+mggemdouWvrOW6pih0ZXh0d2lkdGgpKCZYKVwuXC5cLgorbWVudXRyYW5zICZGaWxlXCBGb3JtYXRcLlwuXC4JCQkgICAg6Kit5a6a5qqU5qGI5qC85byPKOWwjeaHieS9nOalreezu+e1sSkoJkYpXC5cLlwuCisiIH19fQorCisiIHt7eyBFZGl0Lkdsb2JhbFNldHRpbmdzCittZW51dHJhbnMgVG9nZ2xlXCBQYXR0ZXJuXCAmSGlnaGxpZ2h0PFRhYj46c2V0XCBobHMhIOWIh+aPm+mrmOS6ruW6puaQnOWwi+Wtl+S4sigmSCk8VGFiPjpzZXRcIGhscyEKK21lbnV0cmFucyBUb2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCSAgICAg5YiH5o+b5b+955Wl5aSn5bCP5a+rKCZJKTxUYWI+OnNldFwgaWMhCittZW51dHJhbnMgVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEJICAgICDliIfmj5vpoa/npLrlsI3mh4nmi6zomZ8oJlMpPFRhYj46c2V0XCBzbSEKK21lbnV0cmFucyBUb2dnbGVcIFZpXCBDJm9tcGF0aWJsZTxUYWI+OnNldFwgY3AhCSAgICAg5YiH5o+b5YKz57WxVmnnm7jlrrnmqKHlvI8oJk8pPFRhYj46c2V0XCBjcCEKK21lbnV0cmFucyAmQ29udGV4dFwgbGluZXMJCQkgICAgIOacrOaWh+WJjeW+jOS/neeVmeihjOaVuChzY3JvbGxvZmYpKCZDKQorbWVudXRyYW5zICZWaXJ0dWFsXCBFZGl0CQkJICAgICDmuLjmqJnku7vmhI/np7vli5UodmlydHVhbGVkaXQpKCZWKQorICAgICIge3t7IEVkaXQuR2xvYmFsU2V0dGluZ3MuVmlydHVhbEVkaXQKKyAgICBtZW51dHJhbnMgTmV2ZXIJCQkJICAgICDkuI3kvb/nlKgKKyAgICBtZW51dHJhbnMgQmxvY2tcIFNlbGVjdGlvbgkJCSAgICAg5Y2A5aGK6YG45pOH5pmCCisgICAgbWVudXRyYW5zIEluc2VydFwgbW9kZQkJCSAgICAg5o+S5YWl5qih5byP5pmCCisgICAgbWVudXRyYW5zIEJsb2NrXCBhbmRcIEluc2VydAkJICAgICDljYDloYroiIfmj5LlhaXmqKHlvI8KKyAgICBtZW51dHJhbnMgQWx3YXlzCQkJCSAgICAg5LiA55u06ZaL5ZWfCisgICAgIiB9fX0KK21lbnV0cmFucyBUb2dnbGVcIEluc2VydFwgJk1vZGU8VGFiPjpzZXRcIGltIQkgICAgIOWIh+aPm+aPkuWFpeaooeW8jygmTSk8VGFiPjpzZXRcIGltIQorbWVudXRyYW5zIFNlYXJjaFwgJlBhdGhcLlwuXC4JCQkgICAgIOaQnOWwi+i3r+W+kSgmUClcLlwuXC4KK21lbnV0cmFucyBUYSZnXCBGaWxlc1wuXC5cLgkJCSAgICAgVGFnXCDmqJnnsaTntKLlvJXmqpTmoYgoJkcpXC5cLlwuCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zIFRvZ2dsZVwgJlRvb2xiYXIJCQkgICAgIOWIh+aPm+S9v+eUqOW3peWFt+WIlygmVCkKK21lbnV0cmFucyBUb2dnbGVcICZCb3R0b21cIFNjcm9sbGJhcgkJICAgICDliIfmj5vkvb/nlKjlupXnq6/mjbLli5Xou7goJkIpCittZW51dHJhbnMgVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyCQkgICAgIOWIh+aPm+S9v+eUqOW3puerr+aNsuWLlei7uCgmTCkKK21lbnV0cmFucyBUb2dnbGVcICZSaWdodFwgU2Nyb2xsYmFyCQkgICAgIOWIh+aPm+S9v+eUqOWPs+err+aNsuWLlei7uCgmUikKKyIgfX19CisKKyIge3t7IFRvb2xzIG1lbnU6IGNvbXBsZXRlCittZW51dHJhbnMgJlRvb2xzCQkJ5bel5YW3KCZUKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmSnVtcFwgdG9cIHRoaXNcIHRhZzxUYWI+Z15dCeaqoue0oua4uOaomeiZleeahOaomeexpOmXnOmNteWtlyh0YWcpKCZKKTxUYWI+Z15dCittZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQnot7Plm57mqqLntKLliY3nmoTkvY3nva4oJkIpPFRhYj5eVAorbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJ5bu656uL5qiZ57Gk57Si5byV5qqUXCBUYWdzKCZUKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmRm9sZGluZwkJCeimhueWiihGb2xkKeioreWumigmRikKKyAgICAiIHt7eyBUb29scy5Gb2xkCisgICAgbWVudXRyYW5zICZFbmFibGUvRGlzYWJsZVwgZm9sZHM8VGFiPnppCSAgICDliIfmj5vkvb/nlKhcIEZvbGRpbmcoJkUpPFRhYj56aQorICAgIG1lbnV0cmFucyAmVmlld1wgQ3Vyc29yXCBMaW5lPFRhYj56dgkgICAg5qqi6KaW5q2k5bGkXCBGb2xkKCZWKTxUYWI+enYKKyAgICBtZW51dHJhbnMgVmllJndcIEN1cnNvclwgTGluZVwgb25seTxUYWI+ek16eCAgICDlj6rmqqLoppbmraRcIEZvbGQoJlcpPFRhYj56TXp4CisgICAgbWVudXRyYW5zIEMmbG9zZVwgbW9yZVwgZm9sZHM8VGFiPnptCSAgICDmlLbotbfkuIDlsaRcIEZvbGRzKCZMKTxUYWI+em0KKyAgICBtZW51dHJhbnMgJkNsb3NlXCBhbGxcIGZvbGRzPFRhYj56TQkJICAgIOaUtui1t+aJgOaciVwgRm9sZHMoJkMpPFRhYj56TQorICAgIG1lbnV0cmFucyBPJnBlblwgbW9yZVwgZm9sZHM8VGFiPnpyCQkgICAg5omT6ZaL5LiA5bGkXCBGb2xkcygmUCk8VGFiPnpyCisgICAgbWVudXRyYW5zICZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgkJICAgIOaJk+mWi+aJgOaciVwgRm9sZHMoJk8pPFRhYj56UgorICAgIG1lbnV0cmFucyBGb2xkXCBNZXQmaG9kCQkJICAgIEZvbGRpbmdcIOaWueW8jygmSCkKKwkiIHt7eyBUb29scy5Gb2xkLk1ldGhvZAorCW1lbnV0cmFucyBNJmFudWFsCQnmiYvli5Xlu7rnq4soJkEpCisJbWVudXRyYW5zIEkmbmRlbnQJCeS+neeFp+e4ruaOkigmTikKKwltZW51dHJhbnMgRSZ4cHJlc3Npb24JCeiHquiogumBi+eul+W8jygmWCkKKwltZW51dHJhbnMgUyZ5bnRheAkJ5L6d54Wn6Kqe5rOV6Kit5a6aKCZZKQorCW1lbnV0cmFucyAmRGlmZgkJCURpZmYoJkQpCisJbWVudXRyYW5zIE1hJnJrZXIJCeaomeiomChNYXJrZXIpKCZSKQorCSIgfX19CisgICAgIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBtZW51dHJhbnMgQ3JlYXRlXCAmRm9sZDxUYWI+emYJCSAgICDlu7rnq4tcIEZvbGQoJkYpPFRhYj56ZgorICAgIG1lbnV0cmFucyAmRGVsZXRlXCBGb2xkPFRhYj56ZAkJICAgIOWIqumZpFwgRm9sZCgmRCk8VGFiPnpkCisgICAgbWVudXRyYW5zIERlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECSAgICDliKrpmaTmiYDmnIlcIEZvbGQoJkEpPFRhYj56RAorICAgICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgbWVudXRyYW5zIEZvbGRcIGNvbHVtblwgJndpZHRoCQkgICAg6Kit5a6aXCBGb2xk5qyE5a+sKCZXKQorICAgICIgfX19CittZW51dHJhbnMgJkRpZmYJCQkJRGlmZigmRCkKKyAgICAiIHt7eyBUb29scy5EaWZmCisgICAgbWVudXRyYW5zICZVcGRhdGUJCQnmm7TmlrAoJlUpCisgICAgbWVudXRyYW5zICZHZXRcIEJsb2NrCQnlj5blvpfljYDloYooJkcpCisgICAgbWVudXRyYW5zICZQdXRcIEJsb2NrCQnosrzkuIrljYDloYooJlApCisgICAgIiB9fX0KKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJk1ha2U8VGFiPjptYWtlCQnln7fooYxcIE1ha2UoJk0pPFRhYj46bWFrZQorbWVudXRyYW5zICZMaXN0XCBFcnJvcnM8VGFiPjpjbAkJ5YiX5Ye657eo6K2v6Yyv6KqkKCZFKTxUYWI+OmNsCittZW51dHJhbnMgTCZpc3RcIE1lc3NhZ2VzPFRhYj46Y2whCeWIl+WHuuaJgOacieioiuaBrygmSSk8VGFiPjpjbCEKK21lbnV0cmFucyAmTmV4dFwgRXJyb3I8VGFiPjpjbgkJ5LiL5LiA5YCL57eo6K2v6Yyv6Kqk6JmVKCZOKTxUYWI+OmNuCittZW51dHJhbnMgJlByZXZpb3VzXCBFcnJvcjxUYWI+OmNwCeS4iuS4gOWAi+e3qOitr+mMr+iqpOiZlSgmUCk8VGFiPjpjcAorbWVudXRyYW5zICZPbGRlclwgTGlzdDxUYWI+OmNvbGQJ5qqi6KaW6IiK6Yyv6Kqk5YiX6KGoKCZPKTxUYWI+OmNvbGQKK21lbnV0cmFucyBOJmV3ZXJcIExpc3Q8VGFiPjpjbmV3CeaqouimluaWsOmMr+iqpOWIl+ihqCgmRSk8VGFiPjpjbmV3CittZW51dHJhbnMgRXJyb3JcICZXaW5kb3cJCemMr+iqpOioiuaBr+imlueqlygmVykKKyAgICAiIHt7eyBUb29scy5FcnJvcldpbmRvdworICAgIG1lbnV0cmFucyAmVXBkYXRlPFRhYj46Y3dpbgkJ5pu05pawKCZVKTxUYWI+OmN3aW4KKyAgICBtZW51dHJhbnMgJk9wZW48VGFiPjpjb3BlbgkJ6ZaL5ZWfKCZPKTxUYWI+OmNvcGVuCisgICAgbWVudXRyYW5zICZDbG9zZTxUYWI+OmNjbG9zZQnpl5zplokoJkMpPFRhYj46Y2Nsb3NlCisgICAgIiB9fX0KK21lbnV0cmFucyAmU2V0XCBDb21waWxlcgkJ6Kit5a6a57eo6K2v5ZmoQ29tcGlsZXIoJlMpCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zICZDb252ZXJ0XCB0b1wgSEVYPFRhYj46JSF4eGQJ6L2J5o+b5oiQMTbpgLLkvY3norwoJkMpPFRhYj46JSF4eGQKK21lbnV0cmFucyBDb252ZSZydFwgYmFjazxUYWI+OiUheHhkXCAtcgnlvp4xNumAsuS9jeeivOi9ieaPm+WbnuaWh+WtlygmUik8VGFiPjolIXh4ZFwgLXIKKyIgfX19CisKKyIge3t7IFN5bnRheCBtZW51OiBjb21wZXRlCittZW51dHJhbnMgJlN5bnRheAkJICAgIOiqnuazleaViOaenCgmUykKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJlNob3dcIGZpbGV0eXBlc1wgaW5cIG1lbnUJ6aGv56S65omA5pyJ5Y+v55So5qqU5qGI5qC85byPKCZTKQorbWVudXRyYW5zIFNldFwgJyZzeW50YXgnXCBvbmx5CSAgICDlj6rkvb/nlKhcICdzeW50YXgnKCZTKQorbWVudXRyYW5zIFNldFwgJyZmaWxldHlwZSdcIHRvbwkgICAg5L2/55SoXCAnc3ludGF4JysnZmlsZXR5cGUnKCZGKQorbWVudXRyYW5zICZPZmYJCQkgICAg6Zec6ZaJ5pWI5p6cKCZPKQorbWVudXRyYW5zICZNYW51YWwJCSAgICDmiYvli5XoqK3lrpooJk0pCittZW51dHJhbnMgQSZ1dG9tYXRpYwkJICAgIOiHquWLleioreWumigmVSkKK21lbnV0cmFucyBvbi9vZmZcIGZvclwgJlRoaXNcIGZpbGUgIOWPquWIh+aPm+atpOaqlOeahOaViOaenOioreWumigmVCkKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQkgICAg6Imy5b2p6aGv56S65ris6KmmKCZMKQorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJICAgIOiqnuazleaViOaenOa4rOippigmSCkKK21lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJICAgIOi9ieaPm+aIkFwgSFRNTFwg5qC85byPKCZDKQorIiB9fX0KKworIiB7e3sgQnVmZmVycyBtZW51OiBjb21wbGV0ZQorbWVudXRyYW5zICZCdWZmZXJzCQkJ57ep6KGd5Y2AKCZCKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmUmVmcmVzaFwgbWVudQkJ5pu05pawKCZSKQorbWVudXRyYW5zICZEZWxldGUJCQnliKrpmaQoJkQpCittZW51dHJhbnMgJkFsdGVybmF0ZQkJCeWIh+aPm+S4iuasoee3qOi8r+e3qeihneWNgCgmQSkKK21lbnV0cmFucyAmTmV4dAkJCQnkuIvkuIDlgIsoJk4pCittZW51dHJhbnMgJlByZXZpb3VzCQkJ5YmN5LiA5YCLKCZQKQorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgbWVudXRyYW5zIFtOb1wgZmlsZV0JCQlb54Sh5qqU5qGIXQorIiB9fX0KKworIiB7e3sgV2luZG93IG1lbnU6IGNvbXBsZXRlCittZW51dHJhbnMgJldpbmRvdwkJCeimlueqlygmVykKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJk5ldzxUYWI+XlduCQkJ6ZaL5paw6KaW56qXKCZOKTxUYWI+XlduCittZW51dHJhbnMgUyZwbGl0PFRhYj5eV3MJCeWIhuWJsuimlueqlygmUCk8VGFiPl5XcworbWVudXRyYW5zIFNwJmxpdFwgVG9cICM8VGFiPl5XXl4J5YiG5Ymy5YiwIygmTCk8VGFiPl5XXl4KK21lbnV0cmFucyBTcGxpdFwgJlZlcnRpY2FsbHk8VGFiPl5XdgnlnoLnm7TliIblibIoJlYpPFRhYj5eV3YKK21lbnV0cmFucyBTcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCeaqlOahiOe4veeuoeW8j+WIhuWJsigmWCkKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgJkNsb3NlPFRhYj5eV2MJCemXnOmWieimlueqlygmQyk8VGFiPl5XYworbWVudXRyYW5zIENsb3NlXCAmT3RoZXIocyk8VGFiPl5Xbwnpl5zplonlhbblroPoppbnqpcoJk8pPFRhYj5eV28KKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgTW92ZVwgJlRvCQkJ56e76IezKCZUKQorICAgICIge3t7IFdpbmRvdy5Nb3ZlVG8KKyAgICBtZW51dHJhbnMgJlRvcDxUYWI+XldLCQnpoILnq68oJlQpPFRhYj5eV0sKKyAgICBtZW51dHJhbnMgJkJvdHRvbTxUYWI+XldKCQnlupXnq68oJkIpPFRhYj5eV0oKKyAgICBtZW51dHJhbnMgJkxlZnRcIHNpZGU8VGFiPl5XSAnlt6bpgoooJkwpPFRhYj5eV0gKKyAgICBtZW51dHJhbnMgJlJpZ2h0XCBzaWRlPFRhYj5eV0wJ5Y+z6YKKKCZSKTxUYWI+XldMCisgICAgIiB9fX0KK21lbnV0cmFucyBSb3RhdGVcICZVcDxUYWI+XldSCQnkuIrnp7voppbnqpcoJlUpPFRhYj5eV1IKK21lbnV0cmFucyBSb3RhdGVcICZEb3duPFRhYj5eV3IJCeS4i+enu+imlueqlygmRCk8VGFiPl5XcgorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21lbnV0cmFucyAmRXF1YWxcIFNpemU8VGFiPl5XPQkJ5omA5pyJ6KaW56qX562J6auYKCZFKTxUYWI+Xlc9CittZW51dHJhbnMgJk1heFwgSGVpZ2h0PFRhYj5eV18JCeacgOWkp+mrmOW6pigmTSk8VGFiPl5XCittZW51dHJhbnMgTSZpblwgSGVpZ2h0PFRhYj5eVzFfCQnmnIDlsI/pq5jluqYoJkkpPFRhYj5eVzFfCittZW51dHJhbnMgTWF4XCAmV2lkdGg8VGFiPl5XXHwJCeacgOWkp+WvrOW6pigmVyk8VGFiPl5XXHwKK21lbnV0cmFucyBNaW5cIFdpZHQmaDxUYWI+XlcxXHwJCeacgOWwj+WvrOW6pigmSCk8VGFiPl5XMVx8CisiIH19fQorCisiIHt7eyBUaGUgcG9wdXAgbWVudTogY29tcGxldGUKK21lbnV0cmFucyAmVW5kbwkJCQnlvqnljp8oJlUpCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWVudXRyYW5zIEN1JnQJCQkJ5Ymq5LiLKCZUKQorbWVudXRyYW5zICZDb3B5CQkJCeikh+ijvSgmQykKK21lbnV0cmFucyAmUGFzdGUJCQnosrzkuIooJlApCittZW51dHJhbnMgJkRlbGV0ZQkJCeWIqumZpCgmRCkKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittZW51dHJhbnMgU2VsZWN0XCBCbG9ja3dpc2UJCUJsb2Nrd2lzZeW8j+mBuOaThworbWVudXRyYW5zIFNlbGVjdFwgJldvcmQJCQnpgbjmk4fllq7lrZcoJlcpCittZW51dHJhbnMgU2VsZWN0XCAmTGluZQkJCemBuOaTh+ihjCgmTCkKK21lbnV0cmFucyBTZWxlY3RcICZCbG9jawkJ6YG45pOH5Y2A5aGKKCZCKQorbWVudXRyYW5zIFNlbGVjdFwgJkFsbAkJCeWFqOmBuCgmQSkKKyIgfX19CisKKyIge3t7IFRoZSBHVUkgdG9vbGJhcjogY29tcGxldGUKK2lmIGhhcygidG9vbGJhciIpCisgIGlmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICAgIGRlbGZ1biBEb190b29sYmFyX3RtZW51CisgIGVuZGlmCisgIGZ1biBEb190b29sYmFyX3RtZW51KCkKKyAgICB0bWVudSBUb29sQmFyLk9wZW4JCemWi+WVn+aqlOahiAorICAgIHRtZW51IFRvb2xCYXIuU2F2ZQkJ5YSy5a2Y55uu5YmN57eo6Lyv5Lit55qE5qqU5qGICisgICAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCeWEsuWtmOWFqOmDqOaqlOahiAorICAgIHRtZW51IFRvb2xCYXIuUHJpbnQJCeWIl+WNsAorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB0bWVudSBUb29sQmFyLlVuZG8JCeW+qeWOn+S4iuasoeiuiuWLlQorICAgIHRtZW51IFRvb2xCYXIuUmVkbwkJ5Y+W5raI5LiK5qyh5b6p5Y6f5YuV5L2cCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHRtZW51IFRvb2xCYXIuQ3V0CQnliarkuIvoh7PliarosrznsL8KKyAgICB0bWVudSBUb29sQmFyLkNvcHkJCeikh+ijveWIsOWJquiyvOewvworICAgIHRtZW51IFRvb2xCYXIuUGFzdGUJCeeUseWJquiyvOewv+iyvOS4igorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB0bWVudSBUb29sQmFyLkZpbmQJCeWwi+aJvi4uLgorICAgIHRtZW51IFRvb2xCYXIuRmluZE5leHQJ5om+5LiL5LiA5YCLCisgICAgdG1lbnUgVG9vbEJhci5GaW5kUHJldgnmib7kuIrkuIDlgIsKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJ5Y+W5LujLi4uCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHRtZW51IFRvb2xCYXIuTG9hZFNlc24J6LyJ5YWlIFNlc3Npb24KKyAgICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCeWEsuWtmOebruWJjeeahCBTZXNzaW9uCisgICAgdG1lbnUgVG9vbEJhci5SdW5TY3JpcHQJ5Z+36KGMIFZpbSDnqIvlvI/mqpQKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdG1lbnUgVG9vbEJhci5NYWtlCQnln7fooYwgTWFrZQorICAgIHRtZW51IFRvb2xCYXIuU2hlbGwJCemWi+WVn+S4gOWAi+WRveS7pOWIl+imlueqlyBEb3NCb3gKKyAgICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCeWft+ihjCBjdGFncworICAgIHRtZW51IFRvb2xCYXIuVGFnSnVtcAnot7PliLDnm67liY3muLjmqJnkvY3nva7nmoQgdGFnCisgICAgdG1lbnUgVG9vbEJhci5IZWxwCQlWaW0g6LyU5Yqp6Kqq5piOCisgICAgdG1lbnUgVG9vbEJhci5GaW5kSGVscAnmkJzlsIsgVmltIOiqquaYjuaWh+S7tgorICBlbmRmdW4KK2VuZGlmCisiIH19fQorCisiIHZpbTpmb2xkbWV0aG9kPW1hcmtlcjpub3dyYXA6Zm9sZGNvbHVtbj0yOmZvbGRsZXZlbD0xCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy5pbmZvIGIvcnVudGltZS9tYWNyb3MuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYmIwYjRmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy9SRUFETUUudHh0IGIvcnVudGltZS9tYWNyb3MvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTA2NmM1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvUkVBRE1FLnR4dApAQCAtMCwwICsxLDIyIEBACitUaGUgbWFjcm9zIGluIHRoZSBtYXplLCBoYW5vaSBhbmQgdXJtIGRpcmVjdG9yaWVzIGNhbiBiZSB1c2VkIHRvIHRlc3QgVmltIGZvcgordmkgY29tcGF0aWJpbGl0eS4gIFRoZXkgaGF2ZSBiZWVuIHdyaXR0ZW4gZm9yIHZpIHRvIHNob3cgaXRzIHVubGltaXRlZAorcG9zc2liaWxpdGllcy4JVGhlIGxpZmUgbWFjcm9zIGNhbiBiZSB1c2VkIGZvciBwZXJmb3JtYW5jZSBjb21wYXJpc29ucy4KKworaGFub2kJTWFjcm9zIHRoYXQgc29sdmUgdGhlIHRvd2VyIG9mIGhhbm9pIHByb2JsZW0uCitsaWZlCU1hY3JvcyB0aGF0IHJ1biBDb253YXkncyBnYW1lIG9mIGxpZmUuCittYXplCU1hY3JvcyB0aGF0IHNvbHZlIGEgbWF6ZSAoYW1hemluZyEpLgordXJtCU1hY3JvcyB0aGF0IHNpbXVsYXRlIGEgc2ltcGxlIGNvbXB1dGVyOiAiVW5pdmVyc2FsIFJlZ2lzdGVyIE1hY2hpbmUiCisKKworVGhlIG90aGVyIGZpbGVzIGNvbnRhaW4gc29tZSBoYW5keSB1dGlsaXRpZXMuICBUaGV5IGFsc28gc2VydmUgYXMgZXhhbXBsZXMgZm9yCitob3cgdG8gdXNlIFZpIGFuZCBWaW0gZnVuY3Rpb25hbGl0eS4KKworZHZvcmFrCQkJZm9yIHdoZW4geW91IHVzZSBhIER2b3JhayBrZXlib2FyZAoranVzdGlmeS52aW0JCXVzZXIgZnVuY3Rpb24gZm9yIGp1c3RpZnlpbmcgdGV4dAorbWF0Y2hpdC52aW0gKyBtYXRjaGl0LnR4dCAgbWFrZSAlIG1hdGNoIGlmLWZpLCBIVE1MIHRhZ3MsIGFuZCBtdWNoIG1vcmUKK2xlc3Muc2ggKyBsZXNzLnZpbQltYWtlIFZpbSB3b3JrIGxpa2UgbGVzcyAob3IgbW9yZSkKK3NoZWxsbWVudS52aW0JCW1lbnVzIGZvciBlZGl0aW5nIHNoZWxsIHNjcmlwdHMgaW4gdGhlIEdVSSB2ZXJzaW9uCitzd2FwbW91cy52aW0JCXN3YXAgbGVmdCBhbmQgcmlnaHQgbW91c2UgYnV0dG9ucworCitUaGlzIG9uZSBpcyBvbmx5IGZvciBVbml4LiAgSXQgY2FuIGJlIGZvdW5kIGluIHRoZSBleHRyYSBhcmNoaXZlOgorZmlsZV9zZWxlY3QudmltCQltYWNyb3MgdGhhdCBtYWtlIGEgaGFuZHkgZmlsZSBzZWxlY3RvcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvUkVBRE1FLnR4dC5pbmZvIGIvcnVudGltZS9tYWNyb3MvUkVBRE1FLnR4dC5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzNlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9SRUFETUUudHh0LmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvZHZvcmFrIGIvcnVudGltZS9tYWNyb3MvZHZvcmFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNzU4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9kdm9yYWsKQEAgLTAsMCArMSwxNjQgQEAKK1doZW4gdXNpbmcgYSBkdm9yYWsga2V5Ym9hcmQgdGhpcyBmaWxlIG1heSBiZSBvZiBoZWxwIHRvIHlvdS4KK1RoZXNlIG1hcHBpbmdzIGhhdmUgYmVlbiBtYWRlIGJ5IExhd3JlbmNlIEtlc3RlbG9vdCA8a2VzdGVsb29AY3MudW5jLmVkdT4uCitXaGF0IHRoZXkgZG8gaXMgdGhhdCB0aGUgbW9zdCBvZnRlbiB1c2VkIGtleXMsIGxpa2UgaGprbCwgYXJlIHB1dCBpbiBhIG1vcmUKK2Vhc3kgdG8gdXNlIHBvc2l0aW9uLgorSXQgbWF5IHRha2Ugc29tZSB0aW1lIHRvIGxlYXJuIHVzaW5nIHRoaXMuCisKK1B1dCB0aGVzZSBsaW5lcyBpbiB5b3VyIC52aW1yYzoKKy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorIiBLZXkgdG8gZ28gaW50byBkdm9yYWsgbW9kZToKK21hcCAsZCA6c291cmNlIH4vLmR2b3JhaworIiBLZXkgdG8gZ2V0IG91dCBvZiBkdm9yYWsgbW9kZToKK21hcCAscSA6c291cmNlIH4vLnF3ZXJ0eQorLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCisKK3dyaXRlIHRoZXNlIGxpbmVzIGludG8gdGhlIGZpbGUgfi8uZHZvcmFrOgorLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCisiIER2b3JhayBrZXlib2FyZCwgb25seSBpbiBpbnNlcnQgbW9kZSBhbmQgZXggbW9kZS4KKyIgWW91IG1heSB3YW50IHRvIGFkZCBhIGxpc3Qgb2YgbWFwJ3MgdG9vLgoraW1hcCEgYSAWFmEKK2ltYXAhIGIgFhZ4CitpbWFwISBjIBYWagoraW1hcCEgZCAWFmUKK2ltYXAhIGUgFhYuCitpbWFwISBmIBYWdQoraW1hcCEgZyAWFmkKK2ltYXAhIGggFhZkCitpbWFwISBpIBYWYworaW1hcCEgaiAWFmgKK2ltYXAhIGsgFhZ0CitpbWFwISBsIBYWbgoraW1hcCEgbSAWFm0KK2ltYXAhIG4gFhZiCitpbWFwISBvIBYWcgoraW1hcCEgcCAWFmwKK2ltYXAhIHEgFhYnCitpbWFwISByIBYWcAoraW1hcCEgcyAWFm8KK2ltYXAhIHQgFhZ5CitpbWFwISB1IBYWZworaW1hcCEgdiAWFmsKK2ltYXAhIHcgFhYsCitpbWFwISB4IBYWcQoraW1hcCEgeSAWFmYKK2ltYXAhIHogFhY7CitpbWFwISA7IBYWcworaW1hcCEgJyAWFi0KK2ltYXAhICIgFhZfCitpbWFwISAsIBYWdworaW1hcCEgLiAWFnYKK2ltYXAhIC8gFhZ6CitpbWFwISBBIBYWQQoraW1hcCEgQiAWFlgKK2ltYXAhIEMgFhZKCitpbWFwISBEIBYWRQoraW1hcCEgRSAWFj4KK2ltYXAhIEYgFhZVCitpbWFwISBHIBYWSQoraW1hcCEgSCAWFkQKK2ltYXAhIEkgFhZDCitpbWFwISBKIBYWSAoraW1hcCEgSyAWFlQKK2ltYXAhIEwgFhZOCitpbWFwISBNIBYWTQoraW1hcCEgTiAWFkIKK2ltYXAhIE8gFhZSCitpbWFwISBQIBYWTAoraW1hcCEgUSAWFiIKK2ltYXAhIFIgFhZQCitpbWFwISBTIBYWTworaW1hcCEgVCAWFlkKK2ltYXAhIFUgFhZHCitpbWFwISBWIBYWSworaW1hcCEgVyAWFjwKK2ltYXAhIFggFhZRCitpbWFwISBZIBYWRgoraW1hcCEgWiAWFjoKK2ltYXAhIDwgFhZXCitpbWFwISA+IBYWVgoraW1hcCEgPyAWFloKK2ltYXAhIDogFhZTCitpbWFwISBbIBYWLworaW1hcCEgXSAWFj0KK2ltYXAhIHsgFhY/CitpbWFwISB9IBYWKworaW1hcCEgLSAWFlsKK2ltYXAhIF8gFhZ7CitpbWFwISA9IBYWXQoraW1hcCEgKyAWFn0KKy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCit3cml0ZSB0aGVzZSBsaW5lcyBpbnRvIHRoZSBmaWxlIH4vLnF3ZXJ0eQorLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCisiIFF3ZXJ0eSBrZXlib2FyZAordW5tYXAhIGEKK3VubWFwISBiCit1bm1hcCEgYwordW5tYXAhIGQKK3VubWFwISBlCit1bm1hcCEgZgordW5tYXAhIGcKK3VubWFwISBoCit1bm1hcCEgaQordW5tYXAhIGoKK3VubWFwISBrCit1bm1hcCEgbAordW5tYXAhIG0KK3VubWFwISBuCit1bm1hcCEgbwordW5tYXAhIHAKK3VubWFwISBxCit1bm1hcCEgcgordW5tYXAhIHMKK3VubWFwISB0Cit1bm1hcCEgdQordW5tYXAhIHYKK3VubWFwISB3Cit1bm1hcCEgeAordW5tYXAhIHkKK3VubWFwISB6Cit1bm1hcCEgOwordW5tYXAhICcKK3VubWFwISBcIgordW5tYXAhICwKK3VubWFwISAuCit1bm1hcCEgLwordW5tYXAhIEEKK3VubWFwISBCCit1bm1hcCEgQwordW5tYXAhIEQKK3VubWFwISBFCit1bm1hcCEgRgordW5tYXAhIEcKK3VubWFwISBICit1bm1hcCEgSQordW5tYXAhIEoKK3VubWFwISBLCit1bm1hcCEgTAordW5tYXAhIE0KK3VubWFwISBOCit1bm1hcCEgTwordW5tYXAhIFAKK3VubWFwISBRCit1bm1hcCEgUgordW5tYXAhIFMKK3VubWFwISBUCit1bm1hcCEgVQordW5tYXAhIFYKK3VubWFwISBXCit1bm1hcCEgWAordW5tYXAhIFkKK3VubWFwISBaCit1bm1hcCEgPAordW5tYXAhID4KK3VubWFwISA/Cit1bm1hcCEgOgordW5tYXAhIFsKK3VubWFwISBdCit1bm1hcCEgewordW5tYXAhIH0KK3VubWFwISAtCit1bm1hcCEgXwordW5tYXAhID0KK3VubWFwISArCistPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbWFjcm9zL2hhbm9pLmluZm8gYi9ydW50aW1lL21hY3Jvcy9oYW5vaS5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNzJlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9oYW5vaS5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbWFjcm9zL2hhbm9pL2NsaWNrLm1lIGIvcnVudGltZS9tYWNyb3MvaGFub2kvY2xpY2subWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmMTc4YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWFjcm9zL2hhbm9pL2NsaWNrLm1lCkBAIC0wLDAgKzEsMTQgQEAKKworCitTZWUgVmltIHNvbHZlIHRoZSB0b3dlcnMgb2YgSGFub2khCisKK0luc3RydWN0aW9uczoKKyAgIHR5cGUgIjpzbyBoYW5vaS52aW08UkVUVVJOPiIgdG8gbG9hZCB0aGUgbWFjcm9zCisgICB0eXBlICJnIiB0byBzdGFydCBpdAorCithbmQgd2F0Y2ggaXQgZ28uCisKKyAgICAgdG8gcXVpdCB0eXBlICI6cSE8UkVUVVJOPiIKK3RvIGludGVycnVwdCB0eXBlIENUUkwtQworCisoVGhpcyB0ZXh0IHdpbGwgZGlzYXBwZWFyIGFzIHNvb24gYXMgeW91IHR5cGUgImciKQpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvaGFub2kvY2xpY2subWUuaW5mbyBiL3J1bnRpbWUvbWFjcm9zL2hhbm9pL2NsaWNrLm1lLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4Y2I1YQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWFjcm9zL2hhbm9pL2NsaWNrLm1lLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvaGFub2kvaGFub2kudmltIGIvcnVudGltZS9tYWNyb3MvaGFub2kvaGFub2kudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNGQ2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9oYW5vaS9oYW5vaS52aW0KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvaGFub2kvcG9zdGVyIGIvcnVudGltZS9tYWNyb3MvaGFub2kvcG9zdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMDNiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9oYW5vaS9wb3N0ZXIKQEAgLTAsMCArMSwzNiBAQAorQXJ0aWNsZSAyOTEzIG9mIGFsdC5zb3VyY2VzOgorUGF0aDogb2NlLXJkMSFocDRubCFtY3N1biF1dW5ldCFtdW5uYXJpLm96LmF1IW1ldHJvIWNsdXN0ZXIhc3dpZnQhc29mdHdheSFvdGMhZ3JlZ20KK0Zyb206IGdyZWdtQG90Yy5vdGNhLm96LmF1IChHcmVnIE1jRmFybGFuZSkKK05ld3Nncm91cHM6IGNvbXAuc291cmNlcy5kLGFsdC5zb3VyY2VzLGNvbXAuZWRpdG9ycworU3ViamVjdDogVkkgU09MVkVTIEhBTk9JCitNZXNzYWdlLUlEOiA8MjMyM0BvdGMub3RjYS5vej4KK0RhdGU6IDE5IEZlYiA5MSAwMTozMjoxNCBHTVQKK1NlbmRlcjogbmV3c0BvdGMub3RjYS5vegorUmVwbHktVG86IGdyZWdtQG90Yy5vdGNhLm96LmF1IChHcmVnIE1jRmFybGFuZSkKK09yZ2FuaXphdGlvbjogT1RDIERldmVsb3BtZW50IFVuaXQsIEF1c3RyYWxpYQorTGluZXM6IDgwCitYcmVmOiBvY2UtcmQxIGNvbXAuc291cmNlcy5kOjU3MDIgYWx0LnNvdXJjZXM6MjkxMyBjb21wLmVkaXRvcnM6MjMxMworCitTdWJtaXR0ZWQtYnk6IGdyZWdtQG90Yy5vdGNhLm96LmF1CitBcmNoaXZlLW5hbWU6IGhhbm9pLnZpLm1hY3Jvcy9wYXJ0MDEKKworRXZlcnlvbmUgc2VlbXMgdG8gYmUgd3JpdGluZyBzdHVwaWQgVG93ZXIgb2YgSGFub2kgcHJvZ3JhbXMuCitXZWxsLCBoZXJlIGlzIHRoZSBzdHVwaWRlc3Qgb2YgdGhlbSBhbGw6IHRoZSBoYW5vaSBzb2x2aW5nIHZpIG1hY3Jvcy4KKworU2F2ZSB0aGlzIGFydGljbGUsIHVuc2hhciBpdCwgYW5kIHJ1biB1dWRlY29kZSBvbiBoYW5vaS52aS5tYWNyb3MudXUuCitUaGlzIHdpbGwgZ2l2ZSB5b3UgdGhlIG1hY3JvIGZpbGUgaGFub2kudmkubWFjcm9zLgorVGhlbiBydW4gdmkgKHdpdGggbm8gZmlsZToganVzdCB0eXBlICJ2aSIpIGFuZCB0eXBlOgorCTpzbyBoYW5vaS52aS5tYWNyb3MKKwlnCithbmQgd2F0Y2ggaXQgZ28uCisKK1RoZSBkZWZhdWx0IGhlaWdodCBvZiB0aGUgdG93ZXIgaXMgNyBidXQgY2FuIGJlIGVhc2lseSBjaGFuZ2VkIGJ5IGVkaXRpbmcKK3RoZSBtYWNybyBmaWxlLgorCitUaGUgZGlza3MgYXJlbid0IGFjdHVhbGx5IHNob3duIGluIHRoaXMgdmVyc2lvbiwgb25seSBudW1iZXJzIHJlcHJlc2VudGluZworZWFjaCBkaXNrLCBidXQgSSBiZWxpZXZlIGl0IGlzIHBvc3NpYmxlIHRvIHdyaXRlIHNvbWUgbWFjcm9zIHRvIHNob3cgdGhlCitkaXNrcyBtb3ZpbmcgYWJvdXQgYXMgd2VsbC4gQW55IHRha2Vycz8KKworKEZvciBtYXplIHNvbHZpbmcgbWFjcm9zLCBzZWUgYWx0LnNvdXJjZXMgb3IgY29tcC5lZGl0b3JzKQorCitHcmVnCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy9oYW5vaS9wb3N0ZXIuaW5mbyBiL3J1bnRpbWUvbWFjcm9zL2hhbm9pL3Bvc3Rlci5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MGZhMzUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9oYW5vaS9wb3N0ZXIuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy9qdXN0aWZ5LnZpbSBiL3J1bnRpbWUvbWFjcm9zL2p1c3RpZnkudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZDA1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9qdXN0aWZ5LnZpbQpAQCAtMCwwICsxLDMxNiBAQAorIiBGdW5jdGlvbiB0byBsZWZ0IGFuZCByaWd0IGFsaWduIHRleHQuCisiCisiIFdyaXR0ZW4gYnk6CVByZWJlbiAiUGVwcGUiIEd1bGRiZXJnIDxjOTI4NDAwQHN0dWRlbnQuZHR1LmRrPgorIiBDcmVhdGVkOgk5ODA4MDYgMTQ6MTMgKG9yIGFyb3VuZCB0aGF0IHRpbWUgYW55d2F5KQorIiBSZXZpc2VkOgkwMDExMDMgMDA6MzYgKFNlZSAiUmV2aXNpb25zIiBiZWxvdykKKworCisiIGZ1bmN0aW9uIEp1c3RpZnkoIFsgdGV4dHdpZHRoIFssIG1heHNwYWNlcyBbLCBpbmRlbnRdIF0gXSApCisiCisiIEp1c3RpZnkoKSAgd2lsbCAgbGVmdCAgYW5kICByaWdodCAgYWxpZ24gIGEgIGxpbmUgIGJ5ICBmaWxsaW5nICBpbiAgYW4KKyIgYXBwcm9wcmlhdGUgYW1vdW50IG9mIHNwYWNlcy4gIEV4dHJhICBzcGFjZXMgIGFyZSAgYWRkZWQgIHRvICBleGlzdGluZworIiBzcGFjZXMgc3RhcnRpbmcgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgbGluZS4gIEFzIGFuICBleGFtcGxlLCAgdGhlCisiIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIGp1c3RpZmllZC4KKyIKKyIgVGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgorCisiIHRleHR3aWR0aCBhcmd1bWVudAorIiAtLS0tLS0tLS0tLS0tLS0tLS0KKyIgSWYgbm90IHNwZWNpZmllZCwgdGhlIHZhbHVlIG9mIHRoZSAndGV4dHdpZHRoJyAgb3B0aW9uICBpcyAgdXNlZC4gICBJZgorIiAndGV4dHdpZHRoJyBpcyB6ZXJvIGEgdmFsdWUgb2YgODAgaXMgdXNlZC4KKyIKKyIgQWRkaXRpb25hbGx5IHRoZSBhcmd1bWVudHMgJ3R3JyBhbmQgJycgYXJlICBhY2NlcHRlZC4gICBUaGUgIHZhbHVlICBvZgorIiAndGV4dHdpZHRoJyB3aWxsIGJlIHVzZWQuIFRoZXNlIGFyZSBoYW5keSwgaWYgeW91IGp1c3Qgd2FudCB0byBzcGVjaWZ5CisiIHRoZSBtYXhzcGFjZXMgYXJndW1lbnQuCisKKyIgbWF4c3BhY2VzIGFyZ3VtZW50CisiIC0tLS0tLS0tLS0tLS0tLS0tLQorIiBJZiBzcGVjaWZpZWQsIGFsaWdubWVudCB3aWxsIG9ubHkgYmUgZG9uZSwgaWYgdGhlICBsb25nZXN0ICBzcGFjZSAgcnVuCisiIGFmdGVyIGFsaWdubWVudCBpcyBubyBsb25nZXIgdGhhbiBtYXhzcGFjZXMuCisiCisiIEFuIGFyZ3VtZW50IG9mICcnIGlzIGFjY2VwdGVkLCBzaG91bGQgdGhlIHVzZXIgIGxpa2UgIHRvICBzcGVjaWZ5ICBhbGwKKyIgYXJndW1lbnRzLgorIgorIiBUbyBhaWQgdXNlciBkZWZpbmVkIGNvbW1hbmRzLCBuZWdhdGl2ZSAgdmFsdWVzICBhcmUgIGFjY2VwdGVkICBhc3dlbGwuCisiIFVzaW5nIGEgbmVnYXRpdmUgdmFsdWUgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGJlaGF2aW91cjogYW55IGxlbmd0aCAgb2YKKyIgc3BhY2UgcnVucyB3aWxsIGJlIHVzZWQgdG8ganVzdGlmeSB0aGUgdGV4dC4KKworIiBpbmRlbnQgYXJndW1lbnQKKyIgLS0tLS0tLS0tLS0tLS0tCisiIFRoaXMgYXJndW1lbnQgc3BlY2lmaWVzIGhvdyBhIGxpbmUgc2hvdWxkIGJlIGluZGVudGVkLiBUaGUgZGVmYXVsdCAgaXMKKyIgdG8ga2VlcCB0aGUgY3VycmVudCBpbmRlbnRhdGlvbi4KKyIKKyIgTmVnYXRpdmUgIHZhbHVlczogIEtlZXAgIGN1cnJlbnQgICBhbW91bnQgICBvZiAgIGxlYWRpbmcgICB3aGl0ZXNwYWNlLgorIiBQb3NpdGl2ZSB2YWx1ZXM6IEluZGVudCBhbGwgbGluZXMgd2l0aCBsZWFkaW5nIHdoaXRlc3BhY2UgIHVzaW5nICB0aGlzCisiIGFtb3VudCBvZiB3aGl0ZXNwYWNlLgorIgorIiBOb3RlIHRoYXQgdGhlIHZhbHVlIDAsIG5lZWRzIHRvIGJlIHF1b3RlZCBhcyAgYSAgc3RyaW5nLiAgIFRoaXMgIHZhbHVlCisiIGxlYWRzIHRvIGEgbGVmdCBmbHVzaGVkIHRleHQuCisiCisiIEFkZGl0aW9uYWxseSB1bml0cyBvZiAgJ3NoaWZ0d2lkdGgnLydzdycgIGFuZCAgJ3RhYnN0b3AnLyd0cycgIG1heSAgYmUKKyIgYWRkZWQuIEluIHRoaXMgY2FzZSwgaWYgdGhlIHZhbHVlIG9mIGluZGVudCBpcyBwb3NpdGl2ZSwgdGhlIGFtb3VudCBvZgorIiB3aGl0ZXNwYWNlIHRvIGJlICBhZGRlZCAgd2lsbCAgYmUgIG11bHRpcGxpZWQgIGJ5ICB0aGUgIHZhbHVlICBvZiAgdGhlCisiICdzaGlmdHdpZHRoJyBhbmQgJ3RhYnN0b3AnIHNldHRpbmdzLiAgSWYgdGhlc2UgIHVuaXRzICBhcmUgIHVzZWQsICB0aGUKKyIgIGFyZ3VtZW50IG11c3QgIGJlICBnaXZlbiAgYXMgIGEgIHN0cmluZywgIGVnLiAgIEp1c3RpZnkoJycsJycsJzJzdycpLgorIgorIiBJZiB0aGUgdmFsdWVzIG9mICdzdycgb3IgJ3R3JyBhcmUgbmVnYXRpdmUsIHRoZXkgIGFyZSAgdHJlYXRlZCAgYXMgIGlmCisiIHRoZXkgd2VyZSAwLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0ZXh0IGlzIGZsdXNoZWQgbGVmdC4gIFRoZXJlICBpcyAgbm8KKyIgY2hlY2sgaWYgYSBuZWdhdGl2ZSBudW1iZXIgcHJlZml4IGlzIHVzZWQgdG8gIGNoYW5nZSAgdGhlICBzaWduICBvZiAgYQorIiBuZWdhdGl2ZSAnc3cnIG9yICd0cycgdmFsdWUuCisiCisiIEFzIHdpdGggdGhlIG90aGVyIGFyZ3VtZW50cywgICcnICBtYXkgIGJlICB1c2VkICB0byAgZ2V0ICB0aGUgIGRlZmF1bHQKKyIgYmVoYXZpb3VyLgorCisKKyIgTm90ZXM6CisiCisiIElmIHRoZSBsaW5lLCBhZGp1c3RlZCBmb3Igc3BhY2UgcnVucyBhbmQgbGVhZGluZy90cmFpbGluZyAgd2hpdGVzcGFjZSwKKyIgaXMgd2lkZXIgdGhhbiB0aGUgdXNlZCB0ZXh0d2lkdGgsIHRoZSBsaW5lIHdpbGwgYmUgbGVmdCB1bnRvdWNoZWQgIChubworIiB3aGl0ZXNwYWNlIHJlbW92ZWQpLiAgVGhpcyBzaG91bGQgYmUgZXF1aXZhbGVudCB0byAgdGhlICBiZWhhdmlvdXIgIG9mCisiIDpsZWZ0LCA6cmlnaHQgYW5kIDpjZW50ZXIuCisiCisiIElmIHRoZSByZXN1bHRpbmcgbGluZSBpcyBzaG9ydGVyIHRoYW4gdGhlIHVzZWQgdGV4dHdpZHRoICBpdCAgaXMgIGxlZnQKKyIgdW50b3VjaGVkLgorIgorIiBBbGwgc3BhY2UgcnVucyBpbiB0aGUgbGluZSAgYXJlICB0cnVuY2F0ZWQgIGJlZm9yZSAgdGhlICBhbGlnbm1lbnQgIGlzCisiIGNhcnJpZWQgb3V0LgorIgorIiBJZiB5b3UgaGF2ZSBzZXQgJ25vZXhwYW5kdGFiJywgOnJldGFiISAgaXMgdXNlZCB0byByZXBsYWNlIHNwYWNlICBydW5zCisiICB3aXRoIHdoaXRlc3BhY2UgIHVzaW5nICB0aGUgIHZhbHVlICBvZiAgJ3RhYnN0b3AnLiAgIFRoaXMgIHNob3VsZCAgYmUKKyIgY29uZm9ybWFudCB3aXRoIDpsZWZ0LCA6cmlnaHQgYW5kIDpjZW50ZXIuCisiCisiIElmIGpvaW5zcGFjZXMgaXMgc2V0LCBhbiBleHRyYSBzcGFjZSBpcyBhZGRlZCBhZnRlciAnLicsICc/JyBhbmQgICchJy4KKyIgSWYgJ2Nwb29wdGlvbnMnIGluY2x1ZGUgJ2onLCBleHRyYSBzcGFjZSAgaXMgIG9ubHkgIGFkZGVkICBhZnRlciAgJy4nLgorIiAoVGhpcyBtYXkgb24gb2NjYXNpb24gY29uZmxpY3Qgd2l0aCBtYXhzcGFjZXMuKQorCisKKyIgUmVsYXRlZCBtYXBwaW5nczoKKyIKKyIgTWFwcGluZ3MgdGhhdCB3aWxsIGFsaWduIHRleHQgdXNpbmcgdGhlIGN1cnJlbnQgdGV4dCB3aWR0aCwgIHVzaW5nICBhdAorIiBtb3N0IGZvdXIgc3BhY2VzIGluIGEgIHNwYWNlICBydW4gIGFuZCAga2VlcGluZyAgY3VycmVudCAgaW5kZW50YXRpb24uCitubWFwIF9qIDolY2FsbCBKdXN0aWZ5KCd0dycsNCk8Q1I+Cit2bWFwIF9qIDpjYWxsIEp1c3RpZnkoJ3R3Jyw0KTxDUj4KKyIKKyIgTWFwcGluZ3MgdGhhdCB3aWxsIHJlbW92ZSBzcGFjZSBydW5zIGFuZCBmb3JtYXQgbGluZXMgKG1pZ2h0IGJlIHVzZWZ1bAorIiBwcmlvciB0byBhbGlnbmluZyB0aGUgdGV4dCkuCitubWFwICxncSA6JXMvXHNcKy8gL2c8Q1I+Z3ExRwordm1hcCAsZ3EgOnMvXHNcKy8gL2c8Q1I+Z3ZncQorCisKKyIgVXNlciBkZWZpbmVkIGNvbW1hbmQ6CisiCisiIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXggY29tbWFuZCB0aGF0IHdvcmtzIGFzIGEgc2hvcnRjdXQgdG8gdGhlIEp1c3RpZnkKKyIgZnVuY3Rpb24uICBBcmd1bWVudHMgdG8gSnVzdGlmeSgpIGNhbiAgYmUgIGFkZGVkICBhZnRlciAgdGhlICBjb21tYW5kLgorY29tISAtcmFuZ2UgLW5hcmdzPSogSnVzdGlmeSA8bGluZTE+LDxsaW5lMj5jYWxsIEp1c3RpZnkoPGYtYXJncz4pCisiCisiIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIGFsbCBlcXVpdmFsZW50OgorIgorIiAxLiBTaW1wbGVzdCB1c2Ugb2YgSnVzdGlmeSgpOgorIiAgICAgICA6Y2FsbCBKdXN0aWZ5KCkKKyIgICAgICAgOkp1c3RpZnkKKyIKKyIgMi4gVGhlIF9qIG1hcHBpbmcgYWJvdmUgdmlhIHRoZSBleCBjb21tYW5kOgorIiAgICAgICA6JUp1c3RpZnkgdHcgNAorIgorIiAzLiAgSnVzdGlmeSAgdmlzdWFsaXNlZCAgdGV4dCAgYXQgIDcybmQgIGNvbHVtbiAgd2hpbGUgIGluZGVudGluZyAgYWxsCisiIHByZXZpb3VzbHkgaW5kZW50ZWQgdGV4dCB0d28gc2hpZnR3aWR0aHMKKyIgICAgICAgOic8LCc+Y2FsbCBKdXN0aWZ5KDcyLCcnLCcyc3cnKQorIiAgICAgICA6JzwsJz5KdXN0aWZ5IDcyIC0xIDJzdworIgorIiBUaGlzIGRvY3VtZW50YXRpb24gaGFzIGJlZW4ganVzdGlmaWVkICB1c2luZyAgdGhlICBmb2xsb3dpbmcgIGNvbW1hbmQ6CisiOnNlIGV0fGt6fDE7L14iIGZ1bmN0aW9uIEp1c3RpZnkoLyssJ3otZy9eIiAvcy9eIiAvL3xjYWxsIEp1c3RpZnkoNzAsMyl8cy9eLyIgLworCisiIFJldmlzaW9uczoKKyIgMDAxMTAzOiBJZiAnam9pbnNwYWNlcycgd2FzIHNldCwgY2FsY3VsYXRpb25zIGNvdWxkIGJlIHdyb25nLgorIgkgIFRhYnMgYXQgc3RhcnQgb2YgbGluZSBjb3VsZCBhbHNvIGxlYWQgdG8gZXJyb3JzLgorIgkgIFVzZSBzZXRsaW5lKCkgaW5zdGVhZCBvZiAiZXhlYyAncy9mb28vYmFyLycgLSBzYWZlci4KKyIJICBDbGVhbmVkIHVwIHRoZSBjb2RlIGEgYml0LgorIgorIiBUb2RvOgkgIENvbnZlcnQgbWFwcyB0byB0aGUgbmV3IHNjcmlwdCBzcGVjaWZpYyBmb3JtCisKKyIgRXJyb3IgZnVuY3Rpb24KK2Z1bmN0aW9uISBKdXN0aWZ5X2Vycm9yKG1lc3NhZ2UpCisgICAgZWNob2hsIEVycm9yCisgICAgZWNobyAiSnVzdGlmeShbdHcsIFttYXhzcGFjZXMgWywgaW5kZW50XV1dKTogIiAuIGE6bWVzc2FnZQorICAgIGVjaG9obCBOb25lCitlbmRmdW5jdGlvbgorCisKKyIgTm93IGZvciB0aGUgcmVhbCB0aGluZworZnVuY3Rpb24hIEp1c3RpZnkoLi4uKSByYW5nZQorCisgICAgaWYgYTowID4gMworICAgIGNhbGwgSnVzdGlmeV9lcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIChtYXggMykiKQorICAgIHJldHVybiAxCisgICAgZW5kaWYKKworICAgICIgU2V0IHRleHR3aWR0aCAoYWNjZXB0ICd0dycgYW5kICcnIGFzIGFyZ3VtZW50cykKKyAgICBpZiBhOjAgPj0gMQorCWlmIGE6MSA9fiAnXlwodHdcKVw9JCcKKwkgICAgbGV0IHR3ID0gJnR3CisJZWxzZWlmIGE6MSA9fiAnXlxkXCskJworCSAgICBsZXQgdHcgPSBhOjEKKwllbHNlCisJICAgIGNhbGwgSnVzdGlmeV9lcnJvcigidHcgbXVzdCBiZSBhIG51bWJlciAoPjApLCAnJyBvciAndHcnIikKKwkgICAgcmV0dXJuIDIKKwllbmRpZgorICAgIGVsc2UKKwlsZXQgdHcgPSAmdHcKKyAgICBlbmRpZgorICAgIGlmIHR3ID09IDAKKwlsZXQgdHcgPSA4MAorICAgIGVuZGlmCisKKyAgICAiIFNldCBtYXhpbXVtIG51bWJlciBvZiBzcGFjZXMgYmV0d2VlbiBXT1JEcworICAgIGlmIGE6MCA+PSAyCisJaWYgYToyID09ICcnCisJICAgIGxldCBtYXhzcGFjZXMgPSB0dworCWVsc2VpZiBhOjIgPX4gJ14tXGRcKyQnCisJICAgIGxldCBtYXhzcGFjZXMgPSB0dworCWVsc2VpZiBhOjIgPX4gJ15cZFwrJCcKKwkgICAgbGV0IG1heHNwYWNlcyA9IGE6MgorCWVsc2UKKwkgICAgY2FsbCBKdXN0aWZ5X2Vycm9yKCJtYXhzcGFjZXMgbXVzdCBiZSBhIG51bWJlciBvciAnJyIpCisJICAgIHJldHVybiAzCisJZW5kaWYKKyAgICBlbHNlCisJbGV0IG1heHNwYWNlcyA9IHR3CisgICAgZW5kaWYKKyAgICBpZiBtYXhzcGFjZXMgPD0gMQorCWNhbGwgSnVzdGlmeV9lcnJvcigibWF4c3BhY2VzIHNob3VsZCBiZSBsYXJnZXIgdGhhbiAxIikKKwlyZXR1cm4gNAorICAgIGVuZGlmCisKKyAgICAiIFNldCB0aGUgaW5kZW50YXRpb24gc3R5bGUgKGFjY2VwdCBzdyBhbmQgdHMgdW5pdHMpCisgICAgbGV0IGluZGVudF9maXggPSAnJworICAgIGlmIGE6MCA+PSAzCisJaWYgKGE6MyA9PSAnJykgfHwgYTozID1+ICdeLVsxLTldXGQqXChzaGlmdHdpZHRoXHxzd1x8dGFic3RvcFx8dHNcKVw9JCcKKwkgICAgbGV0IGluZGVudCA9IC0xCisJZWxzZWlmIGE6MyA9fiAnXi1cPTBcKHNoaWZ0d2lkdGhcfHN3XHx0YWJzdG9wXHx0c1wpXD0kJworCSAgICBsZXQgaW5kZW50ID0gMAorCWVsc2VpZiBhOjMgPX4gJ15cZFwrXChzaGlmdHdpZHRoXHxzd1x8dGFic3RvcFx8dHNcKVw9JCcKKwkgICAgbGV0IGluZGVudCA9IHN1YnN0aXR1dGUoYTozLCAnXEQnLCAnJywgJ2cnKQorCWVsc2VpZiBhOjMgPX4gJ15cKHNoaWZ0d2lkdGhcfHN3XHx0YWJzdG9wXHx0c1wpJCcKKwkgICAgbGV0IGluZGVudCA9IDEKKwllbHNlCisJICAgIGNhbGwgSnVzdGlmeV9lcnJvcigiaW5kZW50OiBhIG51bWJlciB3aXRoICdzdycvJ3RzJyB1bml0IikKKwkgICAgcmV0dXJuIDUKKwllbmRpZgorCWlmIGluZGVudCA+PSAwCisJICAgIHdoaWxlIGluZGVudCA+IDAKKwkJbGV0IGluZGVudF9maXggPSBpbmRlbnRfZml4IC4gJyAnCisJCWxldCBpbmRlbnQgPSBpbmRlbnQgLSAxCisJICAgIGVuZHdoaWxlCisJICAgIGxldCBpbmRlbnRfc3cgPSAwCisJICAgIGlmIGE6MyA9fiAnXChzaGlmdHdpZHRoXHxzd1wpJworCQlsZXQgaW5kZW50X3N3ID0gJnN3CisJICAgIGVsc2VpZiBhOjMgPX4gJ1wodGFic3RvcFx8dHNcKScKKwkJbGV0IGluZGVudF9zdyA9ICZ0cworCSAgICBlbmRpZgorCSAgICBsZXQgaW5kZW50X2ZpeDIgPSAnJworCSAgICB3aGlsZSBpbmRlbnRfc3cgPiAwCisJCWxldCBpbmRlbnRfZml4MiA9IGluZGVudF9maXgyIC4gaW5kZW50X2ZpeAorCQlsZXQgaW5kZW50X3N3ID0gaW5kZW50X3N3IC0gMQorCSAgICBlbmR3aGlsZQorCSAgICBsZXQgaW5kZW50X2ZpeCA9IGluZGVudF9maXgyCisJZW5kaWYKKyAgICBlbHNlCisJbGV0IGluZGVudCA9IC0xCisgICAgZW5kaWYKKworICAgICIgQXZvaWQgc3Vic3RpdHV0aW9uIHJlcG9ydHMKKyAgICBsZXQgc2F2ZV9yZXBvcnQgPSAmcmVwb3J0CisgICAgc2V0IHJlcG9ydD0xMDAwMDAwCisKKyAgICAiIENoZWNrICdqb2luc3BhY2VzJyBhbmQgJ2NwbycKKyAgICBpZiAmanMgPT0gMQorCWlmICZjcG8gPX4gJ2onCisJICAgIGxldCBqb2luX3N0ciA9ICdcKFwuIFwpJworCWVsc2UKKwkgICAgbGV0IGpvaW5fc3RyID0gJ1woWy4hPyFdIFwpJworCWVuZGlmCisgICAgZW5kaWYKKworICAgIGxldCBjdXIgPSBhOmZpcnN0bGluZQorICAgIHdoaWxlIGN1ciA8PSBhOmxhc3RsaW5lCisKKwlsZXQgc3RyX29yaWcgPSBnZXRsaW5lKGN1cikKKwlsZXQgc2F2ZV9ldCA9ICZldAorCXNldCBldAorCWV4ZWMgY3VyIC4gInJldGFiIgorCWxldCAmZXQgPSBzYXZlX2V0CisJbGV0IHN0ciA9IGdldGxpbmUoY3VyKQorCisJbGV0IGluZGVudF9zdHIgPSBpbmRlbnRfZml4CisJbGV0IGluZGVudF9uID0gc3RybGVuKGluZGVudF9zdHIpCisJIiBTaGFsbCB3ZSByZW1lbWJlciB0aGUgY3VycmVudCBpbmRlbnRhdGlvbgorCWlmIGluZGVudCA8IDAKKwkgICAgbGV0IGluZGVudF9vcmlnID0gbWF0Y2hzdHIoc3RyX29yaWcsICdeXHMqJykKKwkgICAgaWYgc3RybGVuKGluZGVudF9vcmlnKSA+IDAKKwkJbGV0IGluZGVudF9zdHIgPSBpbmRlbnRfb3JpZworCQlsZXQgaW5kZW50X24gPSBzdHJsZW4obWF0Y2hzdHIoc3RyLCAnXlxzKicpKQorCSAgICBlbmRpZgorCWVuZGlmCisKKwkiIFRyaW0gdHJhaWxpbmcsIGxlYWRpbmcgYW5kIHJ1bm5pbmcgd2hpdGVzcGFjZQorCWxldCBzdHIgPSBzdWJzdGl0dXRlKHN0ciwgJ1xzXCskJywgJycsICcnKQorCWxldCBzdHIgPSBzdWJzdGl0dXRlKHN0ciwgJ15cc1wrJywgJycsICcnKQorCWxldCBzdHIgPSBzdWJzdGl0dXRlKHN0ciwgJ1xzXCsnLCAnICcsICdnJykKKwlsZXQgc3RyX24gPSBzdHJsZW4oc3RyKQorCisJIiBQb3NzaWJsZSBhZGRpdGlvbiBvZiBzcGFjZSBhZnRlciBwdW5jdHVhdGlvbgorCWlmIGV4aXN0cygiam9pbl9zdHIiKQorCSAgICBsZXQgc3RyID0gc3Vic3RpdHV0ZShzdHIsIGpvaW5fc3RyLCAnXDEgJywgJ2cnKQorCWVuZGlmCisJbGV0IGpvaW5fbiA9IHN0cmxlbihzdHIpIC0gc3RyX24KKworCSIgQ2FuIGV4dHJhc3BhY2VzIGJlIGFkZGVkPworCSIgTm90ZSB0aGF0IHN0cl9uIG1heSBiZSBsZXNzIHRoYW4gc3RybGVuKHN0cikgW2pvaW5zcGFjZXMgYWJvdmVdCisJaWYgc3RybGVuKHN0cikgPCB0dyAtIGluZGVudF9uICYmIHN0cl9uID4gMAorCSAgICAiIEhvdyBtYW55IHNwYWNlcyBzaG91bGQgYmUgYWRkZWQKKwkgICAgbGV0IHNfYWRkID0gdHcgLSBzdHJfbiAtIGluZGVudF9uIC0gam9pbl9uCisJICAgIGxldCBzX25yICA9IHN0cmxlbihzdWJzdGl0dXRlKHN0ciwgJ1xTJywgJycsICdnJykgKSAtIGpvaW5fbgorCSAgICBsZXQgc19kdXAgPSBzX2FkZCAvIHNfbnIKKwkgICAgbGV0IHNfbW9kID0gc19hZGQgJSBzX25yCisKKwkgICAgIiBUZXN0IGlmIHRoZSBjaGFuZ2VkIGxpbmUgZml0cyB3aXRoIHR3CisJICAgIGlmIDAgPD0gKHN0cl9uICsgKG1heHNwYWNlcyAtIDEpKnNfbnIgKyBpbmRlbnRfbikgLSB0dworCisJCSIgRHVwbGljYXRlIHNwYWNlcworCQl3aGlsZSBzX2R1cCA+IDAKKwkJICAgIGxldCBzdHIgPSBzdWJzdGl0dXRlKHN0ciwgJ1woIFwrXCknLCAnIFwxJywgJ2cnKQorCQkgICAgbGV0IHNfZHVwID0gc19kdXAgLSAxCisJCWVuZHdoaWxlCisKKwkJIiBBZGQgZXh0cmEgc3BhY2VzIGZyb20gdGhlIGVuZAorCQl3aGlsZSBzX21vZCA+IDAKKwkJICAgIGxldCBzdHIgPSBzdWJzdGl0dXRlKHN0ciwgJ1woXChcc1wrXFNcK1wpXHsnIC4gc19tb2QgLiAgJ31cKSQnLCAnIFwxJywgJycpCisJCSAgICBsZXQgc19tb2QgPSBzX21vZCAtIDEKKwkJZW5kd2hpbGUKKworCQkiIEluZGVudCB0aGUgbGluZQorCQlpZiBpbmRlbnRfbiA+IDAKKwkJICAgIGxldCBzdHIgPSBzdWJzdGl0dXRlKHN0ciwgJ14nLCBpbmRlbnRfc3RyLCAnJyApCisJCWVuZGlmCisKKwkJIiBSZXBsYWNlIHRoZSBsaW5lCisJCWNhbGwgc2V0bGluZShjdXIsIHN0cikKKworCQkiIENvbnZlcnQgdG8gd2hpdGVzcGFjZQorCQlpZiAmZXQgPT0gMAorCQkgICAgZXhlYyBjdXIgLiAncmV0YWIhJworCQllbmRpZgorCisJICAgIGVuZGlmICAgIiBDaGFuZ2Ugb2YgbGluZQorCWVuZGlmCSIgUG9zc2libGUgY2hhbmdlCisKKwlsZXQgY3VyID0gY3VyICsgMQorICAgIGVuZHdoaWxlCisKKyAgICBub3JtIF4KKworICAgIGxldCAmcmVwb3J0ID0gc2F2ZV9yZXBvcnQKKworZW5kZnVuY3Rpb24KKworIiBFT0YJdmltOiB0dz03OCB0cz04IHN3PTQgc3RzPTQgbm9ldCBhaQpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbGVzcy5zaCBiL3J1bnRpbWUvbWFjcm9zL2xlc3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU2OTM2YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWFjcm9zL2xlc3Muc2gKQEAgLTAsMCArMSw5IEBACisjIS9iaW4vc2gKKyMgU2hlbGwgc2NyaXB0IHRvIHN0YXJ0IFZpbSB3aXRoIGxlc3MudmltLgorIyBSZWFkIHN0ZGluIGlmIG5vIGFyZ3VtZW50cyB3ZXJlIGdpdmVuLgorCitpZiB0ZXN0ICQjID0gMDsgdGhlbgorICB2aW0gLS1jbWQgJ2xldCBub19wbHVnaW5fbWFwcyA9IDEnIC1jICdydW50aW1lISBtYWNyb3MvbGVzcy52aW0nIC0KK2Vsc2UKKyAgdmltIC0tY21kICdsZXQgbm9fcGx1Z2luX21hcHMgPSAxJyAtYyAncnVudGltZSEgbWFjcm9zL2xlc3MudmltJyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbGVzcy52aW0gYi9ydW50aW1lL21hY3Jvcy9sZXNzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGVlN2FiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvbGVzcy52aW0KQEAgLTAsMCArMSwyNDQgQEAKKyIgVmltIHNjcmlwdCB0byB3b3JrIGxpa2UgImxlc3MiCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDA0IEZlYiAxOQorCisiIEF2b2lkIGxvYWRpbmcgdGhpcyBmaWxlIHR3aWNlLCBhbGxvdyB0aGUgdXNlciB0byBkZWZpbmUgaGlzIG93biBzY3JpcHQuCitpZiBleGlzdHMoImxvYWRlZF9sZXNzIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGxvYWRlZF9sZXNzID0gMQorCisiIElmIG5vdCByZWFkaW5nIGZyb20gc3RkaW4sIHNraXAgZmlsZXMgdGhhdCBjYW4ndCBiZSByZWFkLgorIiBFeGl0IGlmIHRoZXJlIGlzIG5vIGZpbGUgYXQgYWxsLgoraWYgYXJnYygpID4gMAorICBsZXQgczppID0gMAorICB3aGlsZSAxCisgICAgaWYgZmlsZXJlYWRhYmxlKGFyZ3YoczppKSkKKyAgICAgIGlmIHM6aSAhPSAwCisJc2xlZXAgMworICAgICAgZW5kaWYKKyAgICAgIGJyZWFrCisgICAgZW5kaWYKKyAgICBpZiBpc2RpcmVjdG9yeShhcmd2KHM6aSkpCisgICAgICBlY2hvbXNnICJTa2lwcGluZyBkaXJlY3RvcnkgIiAuIGFyZ3YoczppKQorICAgIGVsc2VpZiBnZXRmdGltZShhcmd2KHM6aSkpIDwgMAorICAgICAgZWNob21zZyAiU2tpcHBpbmcgbm9uLWV4aXN0aW5nIGZpbGUgIiAuIGFyZ3YoczppKQorICAgIGVsc2UKKyAgICAgIGVjaG9tc2cgIlNraXBwaW5nIHVucmVhZGFibGUgZmlsZSAiIC4gYXJndihzOmkpCisgICAgZW5kaWYKKyAgICBlY2hvICJcbiIKKyAgICBsZXQgczppID0gczppICsgMQorICAgIGlmIHM6aSA9PSBhcmdjKCkKKyAgICAgIHF1aXQKKyAgICBlbmRpZgorICAgIG5leHQKKyAgZW5kd2hpbGUKK2VuZGlmCisKK3NldCBub2NwCitzeW50YXggb24KK3NldCBzbz0wCitzZXQgaGxzZWFyY2gKK3NldCBpbmNzZWFyY2gKK25vaGxzZWFyY2gKKyIgRG9uJ3QgcmVtZW1iZXIgZmlsZSBuYW1lcyBhbmQgcG9zaXRpb25zCitzZXQgdmltaW5mbz0KK3NldCBub3dzCisiIEluaGliaXQgc2NyZWVuIHVwZGF0ZXMgd2hpbGUgc2VhcmNoaW5nCitsZXQgczpseiA9ICZsegorc2V0IGx6CisKKyIgVXNlZCBhZnRlciBlYWNoIGNvbW1hbmQ6IHB1dCBjdXJzb3IgYXQgZW5kIGFuZCBkaXNwbGF5IHBvc2l0aW9uCitpZiAmd3JhcAorICBub3JlbWFwIDxTSUQ+TCBMMDpyZWRyYXc8Q1I+OmZpbGU8Q1I+CisgIGF1IFZpbUVudGVyICogbm9ybWFsISBMMAorZWxzZQorICBub3JlbWFwIDxTSUQ+TCBMZzA6cmVkcmF3PENSPjpmaWxlPENSPgorICBhdSBWaW1FbnRlciAqIG5vcm1hbCEgTGcwCitlbmRpZgorCisiIFdoZW4gcmVhZGluZyBmcm9tIHN0ZGluIGRvbid0IGNvbnNpZGVyIHRoZSBmaWxlIG1vZGlmaWVkLgorYXUgVmltRW50ZXIgKiBzZXQgbm9tb2QKKworIiBDYW4ndCBtb2RpZnkgdGhlIHRleHQKK3NldCBub21hCisKKyIgR2l2ZSBoZWxwCitub3JlbWFwIGggOmNhbGwgPFNJRD5IZWxwKCk8Q1I+CittYXAgSCBoCitmdW4hIHM6SGVscCgpCisgIGVjaG8gIjxTcGFjZT4gICBPbmUgcGFnZSBmb3J3YXJkICAgICAgICAgIGIgICAgICAgICBPbmUgcGFnZSBiYWNrd2FyZCIKKyAgZWNobyAiZCAgICAgICAgIEhhbGYgYSBwYWdlIGZvcndhcmQgICAgICAgdSAgICAgICAgIEhhbGYgYSBwYWdlIGJhY2t3YXJkIgorICBlY2hvICI8RW50ZXI+ICAgT25lIGxpbmUgZm9yd2FyZCAgICAgICAgICBrICAgICAgICAgT25lIGxpbmUgYmFja3dhcmQiCisgIGVjaG8gIkcgICAgICAgICBFbmQgb2YgZmlsZSAgICAgICAgICAgICAgIGcgICAgICAgICBTdGFydCBvZiBmaWxlIgorICBlY2hvICJOJSAgICAgICAgcGVyY2VudGFnZSBpbiBmaWxlIgorICBlY2hvICJcbiIKKyAgZWNobyAiL3BhdHRlcm4gIFNlYXJjaCBmb3IgcGF0dGVybiAgICAgICAgP3BhdHRlcm4gIFNlYXJjaCBiYWNrd2FyZCBmb3IgcGF0dGVybiIKKyAgZWNobyAibiAgICAgICAgIG5leHQgcGF0dGVybiBtYXRjaCAgICAgICAgTiAgICAgICAgIFByZXZpb3VzIHBhdHRlcm4gbWF0Y2giCisgIGVjaG8gIlxuIgorICBlY2hvICI6bjxFbnRlcj4gTmV4dCBmaWxlICAgICAgICAgICAgICAgICA6cDxFbnRlcj4gUHJldmlvdXMgZmlsZSIKKyAgZWNobyAiXG4iCisgIGVjaG8gInEgICAgICAgICBRdWl0ICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICBFZGl0IGZpbGUiCisgIGxldCBpID0gaW5wdXQoIkhpdCBFbnRlciB0byBjb250aW51ZSIpCitlbmRmdW4KKworIiBTY3JvbGwgb25lIHBhZ2UgZm9yd2FyZAorbm9yZW1hcCA8c2NyaXB0PiA8U3BhY2U+IDpjYWxsIDxTSUQ+TmV4dFBhZ2UoKTxDUj48U0lEPkwKK21hcCA8Qy1WPiA8U3BhY2U+CittYXAgZiA8U3BhY2U+CittYXAgPEMtRj4gPFNwYWNlPgorbWFwIHogPFNwYWNlPgorbWFwIDxFc2M+PFNwYWNlPiA8U3BhY2U+CitmdW4hIHM6TmV4dFBhZ2UoKQorICBpZiBsaW5lKCIuIikgPT0gbGluZSgiJCIpCisgICAgaWYgYXJnaWR4KCkgKyAxID49IGFyZ2MoKQorICAgICAgcXVpdAorICAgIGVuZGlmCisgICAgbmV4dAorICAgIDEKKyAgZWxzZQorICAgIGV4ZSAibm9ybWFsISBcPEMtRj4iCisgIGVuZGlmCitlbmRmdW4KKworIiBSZS1yZWFkIGZpbGUgYW5kIHBhZ2UgZm9yd2FyZCAidGFpbCAtZiIKK21hcCBGIDplPENSPkc8U0lEPkw6c2xlZXAgMTxDUj5GCisKKyIgU2Nyb2xsIGhhbGYgYSBwYWdlIGZvcndhcmQKK25vcmVtYXAgPHNjcmlwdD4gZCA8Qy1EPjxTSUQ+TAorbWFwIDxDLUQ+IGQKKworIiBTY3JvbGwgb25lIGxpbmUgZm9yd2FyZAorbm9yZW1hcCA8c2NyaXB0PiA8Q1I+IDxDLUU+PFNJRD5MCittYXAgPEMtTj4gPENSPgorbWFwIGUgPENSPgorbWFwIDxDLUU+IDxDUj4KK21hcCBqIDxDUj4KK21hcCA8Qy1KPiA8Q1I+CisKKyIgU2Nyb2xsIG9uZSBwYWdlIGJhY2t3YXJkCitub3JlbWFwIDxzY3JpcHQ+IGIgPEMtQj48U0lEPkwKK21hcCA8Qy1CPiBiCittYXAgdyBiCittYXAgPEVzYz52IGIKKworIiBTY3JvbGwgaGFsZiBhIHBhZ2UgYmFja3dhcmQKK25vcmVtYXAgPHNjcmlwdD4gdSA8Qy1VPjxTSUQ+TAorbm9yZW1hcCA8c2NyaXB0PiA8Qy1VPiA8Qy1VPjxTSUQ+TAorCisiIFNjcm9sbCBvbmUgbGluZSBiYWNrd2FyZAorbm9yZW1hcCA8c2NyaXB0PiBrIDxDLVk+PFNJRD5MCittYXAgeSBrCittYXAgPEMtWT4gaworbWFwIDxDLVA+IGsKK21hcCA8Qy1LPiBrCisKKyIgUmVkcmF3Citub3JlbWFwIDxzY3JpcHQ+IHIgPEMtTD48U0lEPkwKK25vcmVtYXAgPHNjcmlwdD4gPEMtUj4gPEMtTD48U0lEPkwKK25vcmVtYXAgPHNjcmlwdD4gUiA8Qy1MPjxTSUQ+TAorCisiIFN0YXJ0IG9mIGZpbGUKK25vcmVtYXAgPHNjcmlwdD4gZyBnZzxTSUQ+TAorbWFwIDwgZworbWFwIDxFc2M+PCBnCisKKyIgRW5kIG9mIGZpbGUKK25vcmVtYXAgPHNjcmlwdD4gRyBHPFNJRD5MCittYXAgPiBHCittYXAgPEVzYz4+IEcKKworIiBHbyB0byBwZXJjZW50YWdlCitub3JlbWFwIDxzY3JpcHQ+ICUgJTxTSUQ+TAorbWFwIHAgJQorCisiIFNlYXJjaAorbm9yZW1hcCA8c2NyaXB0PiAvIEgkOmNhbGwgPFNJRD5Gb3J3YXJkKCk8Q1I+LworaWYgJndyYXAKKyAgbm9yZW1hcCA8c2NyaXB0PiA/IEgwOmNhbGwgPFNJRD5CYWNrd2FyZCgpPENSPj8KK2Vsc2UKKyAgbm9yZW1hcCA8c2NyaXB0PiA/IEhnMDpjYWxsIDxTSUQ+QmFja3dhcmQoKTxDUj4/CitlbmRpZgorCitmdW4hIHM6Rm9yd2FyZCgpCisgICIgU2VhcmNoaW5nIGZvcndhcmQKKyAgbm9yZW1hcCA8c2NyaXB0PiBuIEgkbnp0PFNJRD5MCisgIGlmICZ3cmFwCisgICAgbm9yZW1hcCA8c2NyaXB0PiBOIEgwTnp0PFNJRD5MCisgIGVsc2UKKyAgICBub3JlbWFwIDxzY3JpcHQ+IE4gSGcwTnp0PFNJRD5MCisgIGVuZGlmCisgIGNub3JlbWFwIDxzY3JpcHQ+IDxDUj4gPENSPjpjdW5tYXAgPGx0PkNSPjxDUj56dDxTSUQ+TAorZW5kZnVuCisKK2Z1biEgczpCYWNrd2FyZCgpCisgICIgU2VhcmNoaW5nIGJhY2t3YXJkCisgIGlmICZ3cmFwCisgICAgbm9yZW1hcCA8c2NyaXB0PiBuIEgwbnp0PFNJRD5MCisgIGVsc2UKKyAgICBub3JlbWFwIDxzY3JpcHQ+IG4gSGcwbnp0PFNJRD5MCisgIGVuZGlmCisgIG5vcmVtYXAgPHNjcmlwdD4gTiBIJE56dDxTSUQ+TAorICBjbm9yZW1hcCA8c2NyaXB0PiA8Q1I+IDxDUj46Y3VubWFwIDxsdD5DUj48Q1I+enQ8U0lEPkwKK2VuZGZ1bgorCitjYWxsIHM6Rm9yd2FyZCgpCisKKyIgUXVpdHRpbmcKK25vcmVtYXAgcSA6cTxDUj4KKworIiBTd2l0Y2ggdG8gZWRpdGluZyAoc3dpdGNoIG9mZiBsZXNzIG1vZGUpCittYXAgdiA6c2lsZW50IGNhbGwgPFNJRD5FbmQoKTxDUj4KK2Z1biEgczpFbmQoKQorICBzZXQgbWEKKyAgaWYgZXhpc3RzKHM6bHopCisgICAgbGV0ICZseiA9IHM6bHoKKyAgZW5kaWYKKyAgdW5tYXAgaAorICB1bm1hcCBICisgIHVubWFwIDxTcGFjZT4KKyAgdW5tYXAgPEMtVj4KKyAgdW5tYXAgZgorICB1bm1hcCA8Qy1GPgorICB1bm1hcCB6CisgIHVubWFwIDxFc2M+PFNwYWNlPgorICB1bm1hcCBGCisgIHVubWFwIGQKKyAgdW5tYXAgPEMtRD4KKyAgdW5tYXAgPENSPgorICB1bm1hcCA8Qy1OPgorICB1bm1hcCBlCisgIHVubWFwIDxDLUU+CisgIHVubWFwIGoKKyAgdW5tYXAgPEMtSj4KKyAgdW5tYXAgYgorICB1bm1hcCA8Qy1CPgorICB1bm1hcCB3CisgIHVubWFwIDxFc2M+dgorICB1bm1hcCB1CisgIHVubWFwIDxDLVU+CisgIHVubWFwIGsKKyAgdW5tYXAgeQorICB1bm1hcCA8Qy1ZPgorICB1bm1hcCA8Qy1QPgorICB1bm1hcCA8Qy1LPgorICB1bm1hcCByCisgIHVubWFwIDxDLVI+CisgIHVubWFwIFIKKyAgdW5tYXAgZworICB1bm1hcCA8CisgIHVubWFwIDxFc2M+PAorICB1bm1hcCBHCisgIHVubWFwID4KKyAgdW5tYXAgPEVzYz4+CisgIHVubWFwICUKKyAgdW5tYXAgcAorICB1bm1hcCBuCisgIHVubWFwIE4KKyAgdW5tYXAgcQorICB1bm1hcCB2CisgIHVubWFwIC8KKyAgdW5tYXAgPworZW5kZnVuCisKKyIgdmltOiBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy9saWZlL2NsaWNrLm1lIGIvcnVudGltZS9tYWNyb3MvbGlmZS9jbGljay5tZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmVkNDY5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvbGlmZS9jbGljay5tZQpAQCAtMCwwICsxLDkgQEAKKworVG8gcnVuIHRoZSAiQ29ud2F5J3MgZ2FtZSBvZiBsaWZlIiBtYWNyb3M6CisKKyAgMS4gIFR5cGUgIjpzbyBsaWZlLnZpbSIuICBUaGlzIGxvYWRzIHRoZSBtYWNyb3MuCisgIDIuICBUeXBlICJnIiB0byBydW4gdGhlIG1hY3Jvcy4KKyAgMy4gIFR5cGUgQ1RSTC1DIHRvIGludGVycnVwdC4KKyAgNC4gIFR5cGUgIjpxISIgdG8gZ2V0IG91dC4KKworU2VlIGxpZmUudmltIGZvciBtb3JlIGFkdmFuY2VkIHVzYWdlLgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbGlmZS9jbGljay5tZS5pbmZvIGIvcnVudGltZS9tYWNyb3MvbGlmZS9jbGljay5tZS5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NzU2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9saWZlL2NsaWNrLm1lLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbGlmZS9saWZlLnZpbSBiL3J1bnRpbWUvbWFjcm9zL2xpZmUvbGlmZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmNGUyMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWFjcm9zL2xpZmUvbGlmZS52aW0KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbWF0Y2hpdC50eHQgYi9ydW50aW1lL21hY3Jvcy9tYXRjaGl0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWE0ZGU1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvbWF0Y2hpdC50eHQKQEAgLTAsMCArMSw0MDIgQEAKKyptYXRjaGl0LnR4dCogICBFeHRlbmRlZCAiJSIgbWF0Y2hpbmcKKworRm9yIGluc3RydWN0aW9ucyBvbiBpbnN0YWxsaW5nIHRoaXMgZmlsZSwgdHlwZQorCTpoZWxwIG1hdGNoaXQtaW5zdGFsbAoraW5zaWRlIFZpbS4KKworRm9yIFZpbSB2ZXJzaW9uIDYuMy4gIExhc3QgY2hhbmdlOiAgMjAwNCBNYXkgMTIKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQmVuamkgRmlzaGVyCisKKyptYXRjaGl0KiAqbWF0Y2hpdC52aW0qCisKKzEuIEV4dGVuZGVkIG1hdGNoaW5nIHdpdGggIiUiCQkJCXxtYXRjaGl0LWludHJvfAorMi4gQWN0aXZhdGlvbgkJCQkJCXxtYXRjaGl0LWFjdGl2YXRlfAorMy4gQ29uZmlndXJhdGlvbgkJCQkJfG1hdGNoaXQtY29uZmlndXJlfAorNC4gU3VwcG9ydGluZyBhIE5ldyBMYW5ndWFnZQkJCQl8bWF0Y2hpdC1uZXdsYW5nfAorNS4gS25vd24gQnVncyBhbmQgTGltaXRhdGlvbnMJCQkJfG1hdGNoaXQtYnVnc3wKKworVGhlIGZ1bmN0aW9uYWxpdHkgbWVudGlvbmVkIGhlcmUgaXMgYSBwbHVnaW4sIHNlZSB8YWRkLXBsdWdpbnwuCitUaGlzIHBsdWdpbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiAnY29tcGF0aWJsZScgaXMgbm90IHNldC4KK1lvdSBjYW4gYXZvaWQgbG9hZGluZyB0aGlzIHBsdWdpbiBieSBzZXR0aW5nIHRoZSAibG9hZGVkX21hdGNoaXQiIHZhcmlhYmxlCitpbiB5b3VyIHx2aW1yY3wgZmlsZTogPgorCTpsZXQgbG9hZGVkX21hdGNoaXQgPSAxCisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGlzfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEV4dGVuZGVkIG1hdGNoaW5nIHdpdGggIiUiCQkJCSptYXRjaGl0LWludHJvKgorCisJCQkJCQkJKm1hdGNoaXQtJSoKKyUJQ3ljbGUgZm9yd2FyZCB0aHJvdWdoIG1hdGNoaW5nIGdyb3Vwcywgc3VjaCBhcyAiaWYiLCAiZWxzZSIsICJlbmRpZiIsCisJYXMgc3BlY2lmaWVkIGJ5IHxiOm1hdGNoX3dvcmRzfC4KKworCQkJCQkJCSpnJSogKnZfZyUqICpvX2clKgorZyUJQ3ljbGUgYmFja3dhcmRzIHRocm91Z2ggbWF0Y2hpbmcgZ3JvdXBzLCBhcyBzcGVjaWZpZWQgYnkKKwl8YjptYXRjaF93b3Jkc3wuICBGb3IgZXhhbXBsZSwgZ28gZnJvbSAiZW5kaWYiIHRvICJlbHNlIiB0byAiaWYiLgorCisJCQkJCQkJKlslKiAqdl9bJSogKm9fWyUqCitbJQlHbyB0byBbY291bnRdIHByZXZpb3VzIHVubWF0Y2hlZCBncm91cCwgYXMgc3BlY2lmaWVkIGJ5CisJfGI6bWF0Y2hfd29yZHN8LiAgU2ltaWxhciB0byB8W3t8LgorCisJCQkJCQkJKl0lKiAqdl9dJSogKm9fXSUqCitdJQlHbyB0byBbY291bnRdIG5leHQgdW5tYXRjaGVkIGdyb3VwLCBhcyBzcGVjaWZpZWQgYnkKKwl8YjptYXRjaF93b3Jkc3wuICBTaW1pbGFyIHRvIHxdfXwuCisKKwkJCQkJCQkqdl9hJSoKK2ElCUluIFZpc3VhbCBtb2RlLCBzZWxlY3QgdGhlIG1hdGNoaW5nIGdyb3VwLCBhcyBzcGVjaWZpZWQgYnkKKwl8YjptYXRjaF93b3Jkc3wsIGNvbnRhaW5pbmcgdGhlIGN1cnNvci4gIFNpbWlsYXIgdG8gfHZfYVt8LgorCUEgW2NvdW50XSBpcyBpZ25vcmVkLCBhbmQgb25seSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBjbG9zaW5nCisJcGF0dGVybiBpcyBzZWxlY3RlZC4KKworSW4gVmltLCBhcyBpbiBwbGFpbiB2aSwgdGhlIHBlcmNlbnQga2V5LCB8JXwsIGp1bXBzIHRoZSBjdXJzb3IgZnJvbSBhIGJyYWNlLAorYnJhY2tldCwgb3IgcGFyZW4gdG8gaXRzIG1hdGNoLiAgVGhpcyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSAnbWF0Y2hwYWlycycKK29wdGlvbi4gIFRoZSBtYXRjaGl0IHBsdWdpbiBleHRlbmRzIHRoaXMgaW4gc2V2ZXJhbCB3YXlzOgorCisJICAgIFlvdSBjYW4gbWF0Y2ggd2hvbGUgd29yZHMsIHN1Y2ggYXMgImlmIiBhbmQgImVuZGlmIiwgbm90IGp1c3QKKwlzaW5nbGUgY2hhcmFjdGVycy4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgfHJlZ3VsYXItZXhwcmVzc2lvbnwuCisJICAgIFlvdSBjYW4gZGVmaW5lIGdyb3VwcyB3aXRoIG1vcmUgdGhhbiB0d28gd29yZHMsIHN1Y2ggYXMgImlmIiwKKwkiZWxzZSIsICJlbmRpZiIuICBCYW5naW5nIG9uIHRoZSAiJSIga2V5IHdpbGwgY3ljbGUgZnJvbSB0aGUgImlmIiB0bworCXRoZSBmaXJzdCAiZWxzZSIsIHRoZSBuZXh0ICJlbHNlIiwgLi4uLCB0aGUgY2xvc2luZyAiZW5kaWYiLCBhbmQgYmFjaworCXRvIHRoZSBvcGVuaW5nICJpZiIuICBOZXN0ZWQgc3RydWN0dXJlcyBhcmUgc2tpcHBlZC4gIFVzaW5nIHxnJXwgZ29lcworCWluIHRoZSByZXZlcnNlIGRpcmVjdGlvbi4KKwkgICAgQnkgZGVmYXVsdCwgd29yZHMgaW5zaWRlIGNvbW1lbnRzIGFuZCBzdHJpbmdzIGFyZSBpZ25vcmVkLCB1bmxlc3MKKwl0aGUgY3Vyc29yIGlzIGluc2lkZSBhIGNvbW1lbnQgb3Igc3RyaW5nIHdoZW4geW91IHR5cGUgIiUiLiAgSWYgdGhlCisJb25seSB0aGluZyB5b3Ugd2FudCB0byBkbyBpcyBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mICIlIiBzbyB0aGF0IGl0CisJYmVoYXZlcyB0aGlzIHdheSwgeW91IGNhbiA+CisJCTpsZXQgYjptYXRjaF93b3JkcyA9ICZtYXRjaHBhaXJzCis8CitTZWUgfG1hdGNoaXQtZGV0YWlsc3wgZm9yIGRldGFpbHMgb24gd2hhdCB0aGUgc2NyaXB0IGRvZXMsIGFuZCB8YjptYXRjaF93b3Jkc3wKK2ZvciBob3cgdG8gc3BlY2lmeSBtYXRjaGluZyBwYXR0ZXJucy4KKworTU9ERVM6CQkJKm1hdGNoaXQtbW9kZXMqICptYXRjaGl0LXZfJSogKm1hdGNoaXQtb18lKgorCitNb3N0bHksICUgYW5kIHJlbGF0ZWQgbW90aW9ucyAofGclfCBhbmQgfFslfCBhbmQgfF0lfCkgd29yayBqdXN0IGxpa2UgYnVpbHQtaW4KK3xtb3Rpb258IGNvbW1hbmRzIGluIHxPcGVyYXRvci1wZW5kaW5nfCBhbmQgfFZpc3VhbHwgbW9kZXMuICBIb3dldmVyLCB5b3UKK2Nhbm5vdCBtYWtlIHRoZXNlIG1vdGlvbnMgfGxpbmV3aXNlfCBvciB8Y2hhcmFjdGVyd2lzZXwsIHNpbmNlIHRoZSB8Om9tYXB8cwordGhhdCBkZWZpbmUgdGhlbSBzdGFydCB3aXRoICJ2IiBpbiBvcmRlciB0byBtYWtlIHRoZSBkZWZhdWx0IGJlaGF2aW9yCitpbmNsdXNpdmUuICAoU2VlIHxvX3Z8LikgIEluIG90aGVyIHdvcmRzLCAiZFYlIiB3aWxsIG5vdCB3b3JrLiAgVGhlCit3b3JrLWFyb3VuZCBpcyB0byBnbyB0aHJvdWdoIFZpc3VhbCBtb2RlOiAgIlYlZCIgd2lsbCB3b3JrLgorCitMQU5HVUFHRVM6CQkJCQkqbWF0Y2hpdC1sYW5ndWFnZXMqCisKK0N1cnJlbnRseSwgdGhlIGZvbGxvd2luZyBsYW5ndWFnZXMgYXJlIHN1cHBvcnRlZDogIEFkYSwgQVNQIHdpdGggVkJTLCBDc2gsCitEVEQsIEVudGl0eSwgRXNzYmFzZSwgRm9ydHJhbiwgSFRNTCwgSlNQIChzYW1lIGFzIEhUTUwpLCBMYVRlWCwgTHVhLCBQYXNjYWwsCitTR01MLCBTaGVsbCwgVGNzaCwgVmltLCBYTUwuICBPdGhlciBsYW5ndWFnZXMgbWF5IGFscmVhZHkgaGF2ZSBzdXBwb3J0IHZpYQorfGZpbGV0eXBlLXBsdWdpbnxzLgorCitUbyBzdXBwb3J0IGEgbmV3IGxhbmd1YWdlLCBzZWUgfG1hdGNoaXQtbmV3bGFuZ3wgYmVsb3cuCisKK0RFVEFJTFM6CQkJCSptYXRjaGl0LWRldGFpbHMqICptYXRjaGl0LXBhcnNlKgorCitIZXJlIGlzIGFuIG91dGxpbmUgb2Ygd2hhdCBtYXRjaGl0LnZpbSBkb2VzIGVhY2ggdGltZSB5b3UgaGl0IHRoZSAiJSIga2V5LiAgSWYKK3RoZXJlIGFyZSB8YmFja3JlZnxzIGluIHxiOm1hdGNoX3dvcmRzfCB0aGVuIHRoZSBmaXJzdCBzdGVwIGlzIHRvIHByb2R1Y2UgYQordmVyc2lvbiBpbiB3aGljaCB0aGVzZSBiYWNrIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQ7IGlmIHRoZXJlIGFyZSBubworfGJhY2tyZWZ8cyB0aGVuIHRoaXMgc3RlcCBpcyBza2lwcGVkLiAgVGhpcyBzdGVwIGlzIGNhbGxlZCBwYXJzaW5nLiAgRm9yCitleGFtcGxlLCAiXChmb29cfGJhclwpOmVuZFwxIiBpcyBwYXJzZWQgdG8geWllbGQKKyJcKGZvb1x8YmFyXCk6ZW5kXChmb29cfGJhclwpIi4gIFRoaXMgY2FuIGdldCB0cmlja3ksIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlCituZXN0ZWQgZ3JvdXBzLiAgSWYgZGVidWdnaW5nIGlzIHR1cm5lZCBvbiwgdGhlIHBhcnNlZCB2ZXJzaW9uIGlzIHNhdmVkIGFzCit8YjptYXRjaF9wYXR8LgorCisJCQkJCQkJKm1hdGNoaXQtY2hvb3NlKgorTmV4dCwgdGhlIHNjcmlwdCBsb29rcyBmb3IgYSB3b3JkIG9uIHRoZSBjdXJyZW50IGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuCitqdXN0IGNvbnN0cnVjdGVkLiAgSXQgaW5jbHVkZXMgdGhlIHBhdHRlcm5zIGZyb20gdGhlICdtYXRjaHBhaXJzJyBvcHRpb24uCitUaGUgZ29hbCBpcyB0byBkbyB3aGF0IHlvdSBleHBlY3QsIHdoaWNoIHR1cm5zIG91dCB0byBiZSBhIGxpdHRsZSBjb21wbGljYXRlZC4KK1RoZSBzY3JpcHQgZm9sbG93cyB0aGVzZSBydWxlczoKKworCUluc2lzdCBvbiBhIG1hdGNoIHRoYXQgZW5kcyBvbiBvciBhZnRlciB0aGUgY3Vyc29yLgorCVByZWZlciBhIG1hdGNoIHRoYXQgaW5jbHVkZXMgdGhlIGN1cnNvciBwb3NpdGlvbiAodGhhdCBpcywgb25lIHRoYXQKKwkJc3RhcnRzIG9uIG9yIGJlZm9yZSB0aGUgY3Vyc29yKS4KKwlQcmVmZXIgYSBtYXRjaCB0aGF0IHN0YXJ0cyBhcyBjbG9zZSB0byB0aGUgY3Vyc29yIGFzIHBvc3NpYmxlLgorCVByZWZlciBhIG1hdGNoIGluIHxiOm1hdGNoX3dvcmRzfCB0byBhIG1hdGNoIGluICdtYXRjaHBhaXJzJy4KKwlJZiBtb3JlIHRoYW4gb25lIHBhdHRlcm4gaW4gfGI6bWF0Y2hfd29yZHN8IG1hdGNoZXMsIGNob29zZSB0aGUgb25lCisJCXRoYXQgaXMgbGlzdGVkIGZpcnN0LgorCitFeGFtcGxlczoKKworCVN1cHBvc2UgeW91ID4KKwkJOmxldCBiOm1hdGNoX3dvcmRzID0gJzw6Piw8dGFnPjo8L3RhZz4nCis8CWFuZCBoaXQgIiUiIHdpdGggdGhlIGN1cnNvciBvbiBvciBiZWZvcmUgdGhlICI8IiBpbiAiYSA8dGFnPiBpcyBib3JuIi4KKwlUaGUgcGF0dGVybiAnPCcgY29tZXMgZmlyc3QsIHNvIGl0IGlzIHByZWZlcnJlZCBvdmVyICc8dGFnPicsIHdoaWNoCisJYWxzbyBtYXRjaGVzLiAgSWYgdGhlIGN1cnNvciBpcyBvbiB0aGUgInQiLCBob3dldmVyLCB0aGVuICc8dGFnPicgaXMKKwlwcmVmZXJyZWQsIGJlY2F1c2UgdGhpcyBtYXRjaGVzIGEgYml0IG9mIHRleHQgY29udGFpbmluZyB0aGUgY3Vyc29yLgorCUlmIHRoZSB0d28gZ3JvdXBzIG9mIHBhdHRlcm5zIHdlcmUgcmV2ZXJzZWQgdGhlbiAnPCcgd291bGQgbmV2ZXIgYmUKKwlwcmVmZXJyZWQuCisKKwlTdXBwb3NlIHlvdSA+CisJCTpsZXQgYjptYXRjaF93b3JkcyA9ICdpZjplbmQgaWYnCis8CShOb3RlIHRoZSBzcGFjZSEpIGFuZCBoaXQgIiUiIHdpdGggdGhlIGN1cnNvciBhdCB0aGUgZW5kIG9mICJlbmQgaWYiLgorCVRoZW4gImlmIiBtYXRjaGVzLCB3aGljaCBpcyBwcm9iYWJseSBub3Qgd2hhdCB5b3Ugd2FudCwgYnV0IGlmIHRoZQorCWN1cnNvciBzdGFydHMgb24gdGhlICJlbmQgIiB0aGVuICJlbmQgaWYiIGlzIGNob3Nlbi4gIChZb3UgY2FuIGF2b2lkCisJdGhpcyBwcm9ibGVtIGJ5IHVzaW5nIGEgbW9yZSBjb21wbGljYXRlZCBwYXR0ZXJuLikKKworSWYgdGhlcmUgaXMgbm8gbWF0Y2gsIHRoZSBzY3JpcHQgZmFsbHMgYmFjayBvbiB0aGUgdXN1YWwgYmVoYXZpb3Igb2YgfCV8LiAgSWYKK2RlYnVnZ2luZyBpcyB0dXJuZWQgb24sIHRoZSBtYXRjaGVkIGJpdCBvZiB0ZXh0IGlzIHNhdmVkIGFzIHxiOm1hdGNoX21hdGNofAorYW5kIHRoZSBjdXJzb3IgY29sdW1uIG9mIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2ggaXMgc2F2ZWQgYXMgfGI6bWF0Y2hfY29sfC4KKworTmV4dCwgdGhlIHNjcmlwdCBsb29rcyB0aHJvdWdoIHxiOm1hdGNoX3dvcmRzfCAob3JpZ2luYWwgYW5kIHBhcnNlZCB2ZXJzaW9ucykKK2ZvciB0aGUgZ3JvdXAgYW5kIHBhdHRlcm4gdGhhdCBtYXRjaC4gIElmIGRlYnVnZ2luZyBpcyB0dXJuZWQgb24sIHRoZSBncm91cCBpcworc2F2ZWQgYXMgfGI6bWF0Y2hfaW5pfCAodGhlIGZpcnN0IHBhdHRlcm4pIGFuZCB8YjptYXRjaF90YWlsfCAodGhlIHJlc3QpLiAgSWYKK3RoZXJlIGFyZSB8YmFja3JlZnxzIHRoZW4sIGluIGFkZGl0aW9uLCB0aGUgbWF0Y2hpbmcgcGF0dGVybiBpcyBzYXZlZCBhcworfGI6bWF0Y2hfd29yZHwgYW5kIGEgdGFibGUgb2YgdHJhbnNsYXRpb25zIGlzIHNhdmVkIGFzIHxiOm1hdGNoX3RhYmxlfC4gIElmCit0aGVyZSBhcmUgfGJhY2tyZWZ8cywgdGhlc2UgYXJlIGRldGVybWluZWQgZnJvbSB0aGUgbWF0Y2hpbmcgcGF0dGVybiBhbmQKK3xiOm1hdGNoX21hdGNofCBhbmQgc3Vic3RpdHV0ZWQgaW50byBlYWNoIHBhdHRlcm4gaW4gdGhlIG1hdGNoaW5nIGdyb3VwLgorCitUaGUgc2NyaXB0IGRlY2lkZXMgd2hldGhlciB0byBzZWFyY2ggZm9yd2FyZHMgb3IgYmFja3dhcmRzIGFuZCBjaG9vc2VzCithcmd1bWVudHMgZm9yIHRoZSB8c2VhcmNocGFpcigpfCBmdW5jdGlvbi4gIFRoZW4sIHRoZSBjdXJzb3IgaXMgbW92ZWQgdG8gdGhlCitzdGFydCBvZiB0aGUgbWF0Y2gsIGFuZCB8c2VhcmNocGFpcigpfCBpcyBjYWxsZWQuICBCeSBkZWZhdWx0LCBtYXRjaGluZworc3RydWN0dXJlcyBpbnNpZGUgc3RyaW5ncyBhbmQgY29tbWVudHMgYXJlIGlnbm9yZWQuICBUaGlzIGNhbiBiZSBjaGFuZ2VkIGJ5CitzZXR0aW5nIHxiOm1hdGNoX3NraXB8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIEFjdGl2YXRpb24JCQkJCQkqbWF0Y2hpdC1hY3RpdmF0ZSoKKworWW91IGNhbiB1c2UgdGhpcyBzY3JpcHQgYXMgYSBwbHVnaW4sIGJ5IGNvcHlpbmcgaXQgdG8geW91ciBwbHVnaW4gZGlyZWN0b3J5LgorU2VlIHxhZGQtZ2xvYmFsLXBsdWdpbnwgZm9yIGluc3RydWN0aW9ucy4gIFlvdSBjYW4gYWxzbyBhZGQgYSBsaW5lIHRvIHlvdXIKK3x2aW1yY3wgZmlsZSwgc3VjaCBhcyA+CisJOnNvdXJjZSAkVklNUlVOVElNRS9tYWNyb3MvbWF0Y2hpdC52aW0KK29yID4KKwk6cnVudGltZSBtYWNyb3MvbWF0Y2hpdC52aW0KK0VpdGhlciB3YXksIHRoZSBzY3JpcHQgc2hvdWxkIHN0YXJ0IHdvcmtpbmcgdGhlIG5leHQgdGltZSB5b3Ugc3RhcnQgdXAgVmltLgorCitUaGUgc2NyaXB0IGRvZXMgbm90aGluZyB1bmxlc3MgaXQgZmluZHMgYSB8YnVmZmVyLXZhcmlhYmxlfCBuYW1lZAorfGI6bWF0Y2hfd29yZHN8LiAgVGhlIHNjcmlwdCBjb250YWlucyBhdXRvY29tbWFuZHMgdGhhdCBzZXQgdGhpcyB2YXJpYWJsZSBmb3IKK3ZhcmlvdXMgZmlsZSB0eXBlczogIHNlZSB8bWF0Y2hpdC1sYW5ndWFnZXN8IGFib3ZlLiAgRm9yIGEgbmV3IGxhbmd1YWdlLCB5b3UKK2NhbiBhZGQgYXV0b2NvbW1hbmRzIHRvIHRoZSBzY3JpcHQgb3IgdG8geW91ciB2aW1yYyBmaWxlLCBidXQgdGhlIHJlY29tbWVuZGVkCittZXRob2QgaXMgdG8gYWRkIGEgbGluZSBzdWNoIGFzID4KKwlsZXQgYjptYXRjaF93b3JkcyA9ICdcPGZvb1w+Olw8YmFyXD4nCit0byB0aGUgfGZpbGV0eXBlLXBsdWdpbnwgZm9yIHlvdXIgbGFuZ3VhZ2UuICBTZWUgfGI6bWF0Y2hfd29yZHN8IGJlbG93IGZvciBob3cKK3RoaXMgdmFyaWFibGUgaXMgaW50ZXJwcmV0ZWQuCisKK1RST1VCTEVTSE9PVElORwkJCQkJKm1hdGNoaXQtdHJvdWJsZXNob290KgorCitUaGUgc2NyaXB0IHNob3VsZCB3b3JrIGluIG1vc3QgaW5zdGFsbGF0aW9ucyBvZiBWaW0uICBJdCBtYXkgbm90IHdvcmsgaWYgVmltCit3YXMgY29tcGlsZWQgd2l0aCBhIG1pbmltYWwgZmVhdHVyZSBzZXQsIGZvciBleGFtcGxlIGlmIHRoZSB8K3N5bnRheHwgb3B0aW9uCit3YXMgbm90IGVuYWJsZWQuICBJZiB5b3VyIFZpbSBoYXMgc3VwcG9ydCBmb3Igc3ludGF4IGNvbXBpbGVkIGluLCBidXQgeW91IGRvCitub3QgaGF2ZSB8c3ludGF4fCBoaWdobGlnaHRpbmcgdHVybmVkIG9uLCBtYXRjaGl0LnZpbSBzaG91bGQgd29yaywgYnV0IGl0IG1heQorZmFpbCB0byBza2lwIG1hdGNoaW5nIGdyb3VwcyBpbiBjb21tZW50cyBhbmQgc3RyaW5ncy4gIElmIHRoZSB8ZmlsZXR5cGV8CittZWNoYW5pc20gaXMgdHVybmVkIG9mZiwgdGhlIHxiOm1hdGNoX3dvcmRzfCB2YXJpYWJsZSB3aWxsIHByb2JhYmx5IG5vdCBiZQorZGVmaW5lZCBhdXRvbWF0aWNhbGx5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIENvbmZpZ3VyYXRpb24JCQkJCSptYXRjaGl0LWNvbmZpZ3VyZSoKKworVGhlcmUgYXJlIHNldmVyYWwgdmFyaWFibGVzIHRoYXQgZ292ZXJuIHRoZSBiZWhhdmlvciBvZiBtYXRjaGl0LnZpbS4gIE5vdGUKK3RoYXQgdGhlc2UgYXJlIHZhcmlhYmxlcyBsb2NhbCB0byB0aGUgYnVmZmVyLCBub3Qgb3B0aW9ucywgc28gdXNlIHw6bGV0fCB0bworZGVmaW5lIHRoZW0sIG5vdCB8OnNldHwuICBTb21lIG9mIHRoZXNlIHZhcmlhYmxlcyBoYXZlIHZhbHVlcyB0aGF0IG1hdHRlcjsgZm9yCitvdGhlcnMsIGl0IG9ubHkgbWF0dGVycyB3aGV0aGVyIHRoZSB2YXJpYWJsZSBoYXMgYmVlbiBkZWZpbmVkLiAgQWxsIG9mIHRoZXNlCitjYW4gYmUgZGVmaW5lZCBpbiB0aGUgfGZpbGV0eXBlLXBsdWdpbnwgb3IgYXV0b2NvbW1hbmQgdGhhdCBkZWZpbmVzCit8YjptYXRjaF93b3Jkc3wgb3IgIm9uIHRoZSBmbHkuIgorCitUaGUgbWFpbiB2YXJpYWJsZSBpcyB8YjptYXRjaF93b3Jkc3wuICBJdCBpcyBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gYmVsb3cgb24KK3N1cHBvcnRpbmcgYSBuZXcgbGFuZ3VhZ2UuCisKKwkJCQkqTWF0Y2hFcnJvciogKm1hdGNoaXQtaGwqICptYXRjaGl0LWhpZ2hsaWdodCoKK01hdGNoRXJyb3IgaXMgdGhlIGhpZ2hsaWdodCBncm91cCBmb3IgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgc2NyaXB0LiAgQnkKK2RlZmF1bHQsIGl0IGlzIGxpbmtlZCB0byBXYXJuaW5nTXNnLiAgSWYgeW91IGRvIG5vdCB3YW50IHRvIGJlIGJvdGhlcmVkIGJ5CitlcnJvciBtZXNzYWdlcywgeW91IGNhbiBkZWZpbmUgdGhpcyB0byBiZSBzb21ldGhpbmcgaW52aXNpYmxlLiAgRm9yIGV4YW1wbGUsCitpZiB5b3UgdXNlIHRoZSBHVUkgdmVyc2lvbiBvZiBWaW0gYW5kIHlvdXIgY29tbWFuZCBsaW5lIGlzIG5vcm1hbGx5IHdoaXRlLCB5b3UKK2NhbiBkbyA+CisJOmhpIE1hdGNoRXJyb3IgZ3VpZmc9d2hpdGUgZ3VpYmc9d2hpdGUKKzwKKwkJCQkJCSpiOm1hdGNoX2lnbm9yZWNhc2UqCitJZiB5b3UgPgorCTpsZXQgYjptYXRjaF9pZ25vcmVjYXNlID0gMQordGhlbiBtYXRjaGl0LnZpbSBhY3RzIGFzIGlmICdpZ25vcmVjYXNlJyBpcyBzZXQ6IGZvciBleGFtcGxlLCAiZW5kIiBhbmQgIkVORCIKK2FyZSBlcXVpdmFsZW50LiAgSWYgeW91ID4KKwk6bGV0IGI6bWF0Y2hfaWdub3JlY2FzZSA9IDAKK3RoZW4gbWF0Y2hpdC52aW0gdHJlYXRzICJlbmQiIGFuZCAiRU5EIiBkaWZmZXJlbnRseS4gIChUaGVyZSB3aWxsIGJlIG5vCitiOm1hdGNoX2luZmVyY2FzZSBvcHRpb24gdW5sZXNzIHNvbWVvbmUgcmVxdWVzdHMgaXQuKQorCisJCQkJCQkqYjptYXRjaF9kZWJ1ZyoKK0RlZmluZSBiOm1hdGNoX2RlYnVnIGlmIHlvdSB3YW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byBiZSBzYXZlZC4gIFNlZQorfG1hdGNoaXQtZGVidWd8LCBiZWxvdy4KKworCQkJCQkJKmI6bWF0Y2hfc2tpcCoKK0lmIGI6bWF0Y2hfc2tpcCBpcyBkZWZpbmVkLCBpdCBpcyBwYXNzZWQgYXMgdGhlIHNraXAgYXJndW1lbnQgdG8KK3xzZWFyY2hwYWlyKCl8LiAgVGhpcyBjb250cm9scyB3aGVuIG1hdGNoaW5nIHN0cnVjdHVyZXMgYXJlIHNraXBwZWQsIG9yCitpZ25vcmVkLiAgQnkgZGVmYXVsdCwgdGhleSBhcmUgaWdub3JlZCBpbnNpZGUgY29tbWVudHMgYW5kIHN0cmluZ3MsIGFzCitkZXRlcm1pbmVkIGJ5IHRoZSB8c3ludGF4fCBtZWNoYW5pc20uICAoSWYgc3ludGF4IGhpZ2hsaWdodGluZyBpcyB0dXJuZWQgb2ZmLAorbm90aGluZyBpcyBza2lwcGVkLikgIFlvdSBjYW4gc2V0IGI6bWF0Y2hfc2tpcCB0byBhIHN0cmluZywgd2hpY2ggZXZhbHVhdGVzIHRvCithIG5vbi16ZXJvLCBudW1lcmljYWwgdmFsdWUgaWYgdGhlIG1hdGNoIGlzIHRvIGJlIHNraXBwZWQgb3IgemVybyBpZiB0aGUgbWF0Y2gKK3Nob3VsZCBub3QgYmUgc2tpcHBlZC4gIEluIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIHNwZWNpYWwgdmFsdWVzIGFyZQorc3VwcG9ydGVkIGJ5IG1hdGNoaXQudmltOgorCXM6Zm9vIGJlY29tZXMgKGN1cnJlbnQgc3ludGF4IGl0ZW0pID1+IGZvbworCVM6Zm9vIGJlY29tZXMgKGN1cnJlbnQgc3ludGF4IGl0ZW0pICF+IGZvbworCXI6Zm9vIGJlY29tZXMgKGxpbmUgYmVmb3JlIGN1cnNvcikgPX4gZm9vCisJUjpmb28gYmVjb21lcyAobGluZSBiZWZvcmUgY3Vyc29yKSAhfiBmb28KKyhUaGUgInMiIGlzIG1lYW50IHRvIHN1Z2dlc3QgInN5bnRheCIsIGFuZCB0aGUgInIiIGlzIG1lYW50IHRvIHN1Z2dlc3QKKyJyZWd1bGFyIGV4cHJlc3Npb24iLikKKworRXhhbXBsZXM6CisKKwlZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aXRoID4KKwkJOmxldCBiOm1hdGNoX3NraXAgPSAnczpjb21tZW50XHxzdHJpbmcnCis8CisJSWYgeW91IHdhbnQgdG8gc2tpcCBtYXRjaGluZyBzdHJ1Y3R1cmVzIHVubGVzcyB0aGV5IGFyZSBhdCB0aGUgc3RhcnQKKwlvZiB0aGUgbGluZSAoaWdub3Jpbmcgd2hpdGVzcGFjZSkgdGhlbiB5b3UgY2FuID4KKwkJOmxldCBiOm1hdGNoX3NraXAgPSAnUjpeXHMqJworPAlEbyBub3QgZG8gdGhpcyBpZiBzdHJpbmdzIG9yIGNvbW1lbnRzIGNhbiBzcGFuIHNldmVyYWwgbGluZXMsIHNpbmNlCisJdGhlIG5vcm1hbCBzeW50YXggY2hlY2tpbmcgd2lsbCBub3QgYmUgZG9uZSBpZiB5b3Ugc2V0IGI6bWF0Y2hfc2tpcC4KKworCUluIExhVGVYLCBzaW5jZSAiJSIgaXMgdXNlZCBhcyB0aGUgY29tbWVudCBjaGFyYWN0ZXIsIHlvdSBjYW4gPgorCQk6bGV0IGI6bWF0Y2hfc2tpcCA9ICdyOiUnCis8CVVuZm9ydHVuYXRlbHksIHRoaXMgd2lsbCBza2lwIGFueXRoaW5nIGFmdGVyICJcJSIsIGFuIGVzY2FwZWQgIiUiLiAgVG8KKwlhbGxvdyBmb3IgdGhpcywgYW5kIGFsc28gIlxcJSIgKGFuIGV4Y2FwZWQgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IHRoZQorCWNvbW1lbnQgY2hhcmFjdGVyKSB5b3UgY2FuID4KKwkJOmxldCBiOm1hdGNoX3NraXAgPSAncjpcKF5cfFteXFxdXClcKFxcXFxcKSolJworPAorCVNlZSB0aGUgJFZJTVJVTlRJTUUvc3ludGF4L3ZpbS52aW0gZm9yIGFuIGV4YW1wbGUgdGhhdCB1c2VzIGJvdGgKKwlzeW50YXggYW5kIGEgcmVndWxhciBleHByZXNzaW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFN1cHBvcnRpbmcgYSBOZXcgTGFuZ3VhZ2UJCQkJKm1hdGNoaXQtbmV3bGFuZyoKKwkJCQkJCQkqYjptYXRjaF93b3JkcyoKK0luIG9yZGVyIGZvciBtYXRjaGl0LnZpbSB0byBzdXBwb3J0IGEgbmV3IGxhbmd1YWdlLCB5b3UgbXVzdCBkZWZpbmUgYSBzdWl0YWJsZQorcGF0dGVybiBmb3IgfGI6bWF0Y2hfd29yZHN8LiAgWW91IG1heSBhbHNvIHdhbnQgdG8gc2V0IHNvbWUgb2YgdGhlCit8bWF0Y2hpdC1jb25maWd1cmV8IHZhcmlhYmxlcywgYXMgZGVzY3JpYmVkIGFib3ZlLiAgSWYgeW91ciBsYW5ndWFnZSBoYXMgYQorY29tcGxpY2F0ZWQgc3ludGF4LCBvciBtYW55IGtleXdvcmRzLCB5b3Ugd2lsbCBuZWVkIHRvIGtub3cgc29tZXRoaW5nIGFib3V0CitWaW0ncyB8cmVndWxhci1leHByZXNzaW9ufHMuCisKK1RoZSBmb3JtYXQgZm9yIHxiOm1hdGNoX3dvcmRzfCBpcyBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlICdtYXRjaHBhaXJzJyBvcHRpb246CitpdCBpcyBhIGNvbW1hICgsKS1zZXBhcmF0ZWQgbGlzdCBvZiBncm91cHM7IGVhY2ggZ3JvdXAgaXMgYSBjb2xvbig6KS1zZXBhcmF0ZWQKK2xpc3Qgb2YgcGF0dGVybnMgKHJlZ3VsYXIgZXhwcmVzc2lvbnMpLiAgSXQgaXMgT0sgdG8gaGF2ZSBvbmx5IG9uZSBncm91cDsgdGhlCitlZmZlY3QgaXMgdW5kZWZpbmVkIGlmIGEgZ3JvdXAgaGFzIG9ubHkgb25lIHBhdHRlcm4uICBBIHNpbXBsZSBleGFtcGxlIGlzID4KKwk6bGV0IGI6bWF0Y2hfd29yZHMgPSAnXDxpZlw+Olw8ZW5kaWZcPiwnCisJCVwgLiAnXDx3aGlsZVw+Olw8Y29udGludWVcPjpcPGJyZWFrXD46XDxlbmR3aGlsZVw+JworKEluIFZpbSByZWd1bGFyIGV4cHJlc3Npb25zLCB8XDx8IGFuZCB8XD58IGRlbm90ZSB3b3JkIGJvdW5kYXJpZXMuICBUaHVzICJpZiIKK21hdGNoZXMgdGhlIGVuZCBvZiAiZW5kaWYiIGJ1dCAiXDxpZlw+IiBkb2VzIG5vdC4pICBUaGVuIGJhbmdpbmcgb24gdGhlICIlIgora2V5IHdpbGwgYm91bmNlIHRoZSBjdXJzb3IgYmV0d2VlbiAiaWYiIGFuZCB0aGUgbWF0Y2hpbmcgImVuZGlmIjsgYW5kIGZyb20KKyJ3aGlsZSIgdG8gYW55IG1hdGNoaW5nICJjb250aW51ZSIgb3IgImJyZWFrIiwgdGhlbiB0byB0aGUgbWF0Y2hpbmcgImVuZHdoaWxlIgorYW5kIGJhY2sgdG8gdGhlICJ3aGlsZSIuICBJdCBpcyBhbG1vc3QgYWx3YXlzIGVhc2llciB0byB1c2UgfGxpdGVyYWwtc3RyaW5nfHMKKyhzaW5nbGUgcXVvdGVzKSBhcyBhYm92ZTogICdcPGlmXD4nIHJhdGhlciB0aGFuICJcXDxpZlxcPiIgYW5kIHNvIG9uLgorCitFeGNlcHRpb246ICBJZiB0aGUgIjoiIGNoYXJhY3RlciBkb2VzIG5vdCBhcHBlYXIgaW4gYjptYXRjaF93b3JkcywgdGhlbiBpdCBpcwordHJlYXRlZCBhcyBhbiBleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZC4gIEZvciBleGFtcGxlLCA+CisJOmxldCBiOm1hdGNoX3dvcmRzID0gJ0dldE1hdGNoV29yZHMoKScKK2FsbG93cyB5b3UgdG8gZGVmaW5lIGEgZnVuY3Rpb24uICBUaGlzIGNhbiByZXR1cm4gYSBkaWZmZXJlbnQgc3RyaW5nIGRlcGVuZGluZworb24gdGhlIGN1cnJlbnQgc3ludGF4LCBmb3IgZXhhbXBsZS4KKworT25jZSB5b3UgaGF2ZSBkZWZpbmVkIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSBvZiB8YjptYXRjaF93b3Jkc3wsIHlvdSB3aWxsCitwcm9iYWJseSB3YW50IHRvIGhhdmUgdGhpcyBzZXQgYXV0b21hdGljYWxseSBlYWNoIHRpbWUgeW91IGVkaXQgdGhlCithcHByb3ByaWF0ZSBmaWxlIHR5cGUuICBUaGUgcmVjb21tZW5kZWQgd2F5IHRvIGRvIHRoaXMgaXMgYnkgYWRkaW5nIHRoZQorZGVmaW5pdGlvbiB0byBhIHxmaWxldHlwZS1wbHVnaW58IGZpbGUuCisKK1RpcHM6IEJlIGNhcmVmdWwgdGhhdCB5b3VyIGluaXRpYWwgcGF0dGVybiBkb2VzIG5vdCBtYXRjaCB5b3VyIGZpbmFsIHBhdHRlcm4uCitTZWUgdGhlIGV4YW1wbGUgYWJvdmUgZm9yIHRoZSB1c2Ugb2Ygd29yZC1ib3VuZGFyeSBleHByZXNzaW9ucy4gIEl0IGlzIHVzdWFsbHkKK2JldHRlciB0byB1c2UgIi5cey19IiAoYXMgbWFueSBhcyBuZWNlc3NhcnkpIGluc3RlYWQgb2YgIi4qIiAoYXMgbWFueSBhcworcG9zc2libGUpLiAgU2VlIHxcey18LiAgRm9yIGV4YW1wbGUsIGluIHRoZSBzdHJpbmcgIjx0YWc+bGFiZWw8L3RhZz4iLCAiPC4qPiIKK21hdGNoZXMgdGhlIHdob2xlIHN0cmluZyB3aGVyZWFzICI8Llx7LX0+IiBhbmQgIjxbXj5dKj4iIG1hdGNoICI8dGFnPiIgYW5kCisiPC90YWc+Ii4KKworCQkJCSptYXRjaGl0LXNwYWNlcyogKm1hdGNoaXQtczpub3RlbmQqCitJZiAiaWYiIGlzIHRvIGJlIHBhaXJlZCB3aXRoICJlbmQgaWYiIChOb3RlIHRoZSBzcGFjZSEpIHRoZW4gd29yZCBib3VuZGFyaWVzCithcmUgbm90IGVub3VnaC4gIEluc3RlYWQsIGRlZmluZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzOm5vdGVuZCB0aGF0IHdpbGwgbWF0Y2gKK2FueXRoaW5nIGJ1dCAiZW5kIiBhbmQgdXNlIGl0IGFzIGZvbGxvd3M6ID4KKwk6bGV0IHM6bm90ZW5kID0gJ1wlKFw8ZW5kXHNcK1wpXEA8IScKKwk6bGV0IGI6bWF0Y2hfd29yZHMgPSBzOm5vdGVuZCAuICdcPGlmXD46XDxlbmRcc1wraWZcPicKKzwJCQkJCQkJKm1hdGNoaXQtczpzb2wqCitUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHdoYXQgaXMgZG9uZSBmb3IgQWRhLiAgVGhlIHM6bm90ZW5kIGlzIGEKK3xzY3JpcHQtdmFyaWFibGV8LiAgU2ltaWxhcmx5LCB5b3UgbWF5IHdhbnQgdG8gZGVmaW5lIGEgc3RhcnQtb2YtbGluZSByZWd1bGFyCitleHByZXNzaW9uID4KKwk6bGV0IHM6c29sID0gJ1wlKF5cfDtcKVxzKicKK2lmIGtleXdvcmRzIGFyZSBvbmx5IHJlY29nbml6ZWQgYWZ0ZXIgdGhlIHN0YXJ0IG9mIGEgbGluZSBvciBhZnRlciBhCitzZW1pY29sb24gKDspLCB3aXRoIG9wdGlvbmFsIHdoaXRlIHNwYWNlLgorCisJCQkJCSptYXRjaGl0LWJhY2tyZWYqICptYXRjaGl0LVwxKgorSW4gYW55IGdyb3VwLCB0aGUgZXhwcmVzc2lvbnMgfFwxfCwgfFwyfCwgLi4uLCB8XDl8IHJlZmVyIHRvIHBhcnRzIG9mIHRoZQorSU5JVElBTCBwYXR0ZXJuIGVuY2xvc2VkIGluIHxcKHxlc2NhcGVkIHBhcmVudGhlc2VzfFwpfC4gIFRoZXNlIGFyZSByZWZlcnJlZAordG8gYXMgYmFjayByZWZlcmVuY2VzLCBvciBiYWNrcmVmcy4gIEZvciBleGFtcGxlLCA+CisJOmxldCBiOm1hdGNoX3dvcmRzID0gJ1w8Ylwob1wrXClcPjpcKGhcKVwxXD4nCittZWFucyB0aGF0ICJibyIgcGFpcnMgd2l0aCAiaG8iIGFuZCAiYm9vIiBwYWlycyB3aXRoICJob28iIGFuZCBzbyBvbi4gIE5vdGUKK3RoYXQgIlwxIiBkb2VzIG5vdCByZWZlciB0byB0aGUgIlwoaFwpIiBpbiB0aGlzIGV4YW1wbGUuICBJZiB5b3UgaGF2ZQorIlwobmVzdGVkIFwocGFyZW50aGVzZXNcKVwpIHRoZW4gIlxkIiByZWZlcnMgdG8gdGhlIGQtdGggIlwoIiBhbmQgZXZlcnl0aGluZwordXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbWF0Y2hpbmcgIlwpIjogIGluICJcKG5lc3RlZFwocGFyZW50aGVzZXNcKVwpIiwgIlwxIgorcmVmZXJzIHRvIGV2ZXJ5dGhpbmcgYW5kICJcMiIgcmVmZXJzIHRvICJcKHBhcmVudGhlc2VzXCkiLiAgSWYgeW91IHVzZSBhCit2YXJpYWJsZSBzdWNoIGFzIHxzOm5vdGVuZHwgb3IgfHM6c29sfCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoIHRoZW4gcmVtZW1iZXIKK3RvIGNvdW50IGFueSAiXCgiIHBhdHRlcm5zIGluIHRoaXMgdmFyaWFibGUuICBZb3UgZG8gbm90IGhhdmUgdG8gY291bnQgZ3JvdXBzCitkZWZpbmVkIGJ5IHxcJShcKXwuCisKK0l0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZXNvbHZlIGJhY2sgcmVmZXJlbmNlcyBmcm9tIGFueSBwYXR0ZXJuIGluIHRoZQorZ3JvdXAuICBGb3IgZXhhbXBsZSwgPgorCTpsZXQgYjptYXRjaF93b3JkcyA9ICdcKGZvb1wpXChiYXJcKTptb3JlXDE6YW5kXDI6ZW5kXDFcMicKK3dvdWxkIG5vdCB3b3JrIGJlY2F1c2UgIlwyIiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBmcm9tICJtb3JlZm9vIiBhbmQgIlwxIgorY2Fubm90IGJlIGRldGVybWluZWQgZnJvbSAiYW5kYmFyIi4gIE9uIHRoZSBvdGhlciBoYW5kLCA+CisJOmxldCBiOm1hdGNoX3dvcmRzID0gJ1woXChmb29cKVwoYmFyXClcKTpcM1wyOmVuZFwxJworc2hvdWxkIHdvcmsgKGFuZCBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcyAiZm9vYmFyOmJhcmZvbzplbmRmb29iYXIiKSwgYWx0aG91Z2gKK3RoaXMgaGFzIG5vdCBiZWVuIHRob3JvdWdobHkgdGVzdGVkLgorCitZb3UgY2FuIHVzZSB8emVyby13aWR0aHwgcGF0dGVybnMgc3VjaCBhcyB8XEA8PXwgYW5kIHxcenN8LiAgKFRoZSBsYXR0ZXIgaGFzCitub3QgYmVlbiB0aG91cm91Z2hseSB0ZXN0ZWQgaW4gbWF0Y2hpdC52aW0uKSAgRm9yIGV4YW1wbGUsIGlmIHRoZSBrZXl3b3JkICJpZiIKK211c3Qgb2NjdXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLCB3aXRoIG9wdGlvbmFsIHdoaXRlIHNwYWNlLCB5b3UgbWlnaHQgdXNlCit0aGUgcGF0dGVybiAiXCheXHMqXClcQDw9aWYiIHNvIHRoYXQgdGhlIGN1cnNvciB3aWxsIGVuZCBvbiB0aGUgImkiIGluc3RlYWQgb2YKK2F0IHRoZSBzdGFydCBvZiB0aGUgbGluZS4gIEZvciBhbm90aGVyIGV4YW1wbGUsIGlmIEhUTUwgaGFkIG9ubHkgb25lIHRhZyB0aGVuCitvbmUgY291bGQgPgorCTpsZXQgYjptYXRjaF93b3JkcyA9ICc8Oj4sPFxAPD10YWc+OjxcQDw9L3RhZz4nCitzbyB0aGF0ICIlIiBjYW4gYm91bmNlIGJldHdlZW4gbWF0Y2hpbmcgIjwiIGFuZCAiPiIgcGFpcnMgb3IgKHN0YXJ0aW5nIG9uCisidGFnIiBvciAiL3RhZyIpIGJldHdlZW4gbWF0Y2hpbmcgdGFncy4gIFdpdGhvdXQgdGhlIHxcQDw9fCwgdGhlIHNjcmlwdCB3b3VsZAorYm91bmNlIGZyb20gInRhZyIgdG8gdGhlICI8IiBpbiAiPC90YWc+IiwgYW5kIGFub3RoZXIgIiUiIHdvdWxkIG5vdCB0YWtlIHlvdQorYmFjayB0byB3aGVyZSB5b3Ugc3RhcnRlZC4KKworREVCVUdHSU5HCQkJCSptYXRjaGl0LWRlYnVnKiAqOk1hdGNoRGVidWcqCisKK0lmIHlvdSBhcmUgaGF2aW5nIHRyb3VibGUgZmlndXJpbmcgb3V0IHRoZSBhcHByb3ByaWF0ZSBkZWZpbml0aW9uIG9mCit8YjptYXRjaF93b3Jkc3wgdGhlbiB5b3UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBzYW1lIGluZm9ybWF0aW9uIEkgdXNlIHdoZW4KK2RlYnVnZ2luZyB0aGUgc2NyaXB0LiAgVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgaWYgeW91IGFyZSBub3Qgc3VyZSB3aGV0aGVyCit5b3VyIHBhdHRlcm5zIG9yIG15IHNjcmlwdCBhcmUgYXQgZmF1bHQhICBUbyBtYWtlIHRoaXMgbW9yZSBjb252ZW5pZW50LCBJIGhhdmUKK21hZGUgdGhlIGNvbW1hbmQgOk1hdGNoRGVidWcsIHdoaWNoIGRlZmluZXMgdGhlIHZhcmlhYmxlIHxiOm1hdGNoX2RlYnVnfCBhbmQKK2NyZWF0ZXMgYSBNYXRjaGl0IG1lbnUuICBUaGlzIG1lbnUgbWFrZXMgaXQgY29udmVuaWVudCB0byBjaGVjayB0aGUgdmFsdWVzIG9mCit0aGUgdmFyaWFibGVzIGRlc2NyaWJlZCBiZWxvdy4gIFlvdSB3aWxsIHByb2JhYmx5IGFsc28gd2FudCB0byByZWFkCit8bWF0Y2hpdC1kZXRhaWxzfCBhYm92ZS4KKworRGVmaW5pbmcgdGhlIHZhcmlhYmxlIHxiOm1hdGNoX2RlYnVnfCBjYXVzZXMgdGhlIHNjcmlwdCB0byBzZXQgdGhlIGZvbGxvd2luZwordmFyaWFibGVzLCBlYWNoIHRpbWUgeW91IGhpdCB0aGUgIiUiIGtleS4gIFNldmVyYWwgb2YgdGhlc2UgYXJlIG9ubHkgZGVmaW5lZAoraWYgfGI6bWF0Y2hfd29yZHN8IGluY2x1ZGVzIHxiYWNrcmVmfHMuCisKKwkJCQkJCQkqYjptYXRjaF9wYXQqCitUaGUgYjptYXRjaF9wYXQgdmFyaWFibGUgaXMgc2V0IHRvIHxiOm1hdGNoX3dvcmRzfCB3aXRoIHxiYWNrcmVmfHMgcGFyc2VkLgorCQkJCQkJCSpiOm1hdGNoX21hdGNoKgorVGhlIGI6bWF0Y2hfbWF0Y2ggdmFyaWFibGUgaXMgc2V0IHRvIHRoZSBiaXQgb2YgdGV4dCB0aGF0IGlzIHJlY29nbml6ZWQgYXMgYQorbWF0Y2guCisJCQkJCQkJKmI6bWF0Y2hfY29sKgorVGhlIGI6bWF0Y2hfY29sIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgY3Vyc29yIGNvbHVtbiBvZiB0aGUgc3RhcnQgb2YgdGhlCittYXRjaGluZyB0ZXh0LgorCQkJCQkJCSpiOm1hdGNoX3dob2xlQlIqCitUaGUgYjptYXRjaF93aG9sZUJSIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgY29tbWEtc2VwYXJhdGVkIGdyb3VwIG9mIHBhdHRlcm5zCit0aGF0IG1hdGNoZXMsIHdpdGggfGJhY2tyZWZ8cyB1bnBhcnNlZC4KKwkJCQkJCQkqYjptYXRjaF9pbmlCUioKK1RoZSBiOm1hdGNoX2luaUJSIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgZmlyc3QgcGF0dGVybiBpbiB8YjptYXRjaF93aG9sZUJSfC4KKwkJCQkJCQkqYjptYXRjaF9pbmkqCitUaGUgYjptYXRjaF9pbmkgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSBmaXJzdCBwYXR0ZXJuIGluIHxiOm1hdGNoX3dob2xlQlJ8LAord2l0aCB8YmFja3JlZnxzIHJlc29sdmVkIGZyb20gfGI6bWF0Y2hfbWF0Y2h8LgorCQkJCQkJCSpiOm1hdGNoX3RhaWwqCitUaGUgYjptYXRjaF90YWlsIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgcmVtYWluaW5nIHBhdHRlcm5zIGluCit8YjptYXRjaF93aG9sZUJSfCwgd2l0aCB8YmFja3JlZnxzIHJlc29sdmVkIGZyb20gfGI6bWF0Y2hfbWF0Y2h8LgorCQkJCQkJCSpiOm1hdGNoX3dvcmQqCitUaGUgYjptYXRjaF93b3JkIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgcGF0dGVybiBmcm9tIHxiOm1hdGNoX3dob2xlQlJ8IHRoYXQKK21hdGNoZXMgfGI6bWF0Y2hfbWF0Y2h8LgorCQkJCQkJCSpiOm1hdGNoX3RhYmxlKgorVGhlIGJhY2sgcmVmZXJlbmNlICdcJy5kIHJlZmVycyB0byB0aGUgc2FtZSB0aGluZyBhcyAnXCcuYjptYXRjaF90YWJsZVtkXSBpbgorfGI6bWF0Y2hfd29yZHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gS25vd24gQnVncyBhbmQgTGltaXRhdGlvbnMJCQkJKm1hdGNoaXQtYnVncyoKKworSnVzdCBiZWNhdXNlIEkga25vdyBhYm91dCBhIGJ1ZyBkb2VzIG5vdCBtZWFuIHRoYXQgaXQgaXMgb24gbXkgdG9kbyBsaXN0LiAgSQordHJ5IHRvIHJlc3BvbmQgdG8gcmVwb3J0cyBvZiBidWdzIHRoYXQgY2F1c2UgcmVhbCBwcm9ibGVtcy4gIElmIGl0IGRvZXMgbm90CitjYXVzZSBzZXJpb3VzIHByb2JsZW1zLCBvciBpZiB0aGVyZSBpcyBhIHdvcmstYXJvdW5kLCBhIGJ1ZyBtYXkgc2l0IHRoZXJlIGZvcgorYSB3aGlsZS4gIE1vcmFsOiAgaWYgYSBidWcgKGtub3duIG9yIG5vdCkgYm90aGVycyB5b3UsIGxldCBtZSBrbm93LgorCitUaGUgdmFyaW91cyB8OnZtYXB8cyBkZWZpbmVkIGluIHRoZSBzY3JpcHQgKCUsIHxnJXwsIHxbJXwsIHxdJXwsIHxhJXwpIG1heQoraGF2ZSB1bmRlc2lyZWQgZWZmZWN0cyBpbiBTZWxlY3QgbW9kZSB8U2VsZWN0LW1vZGUtbWFwcGluZ3wuICBBdCBsZWFzdCwgaWYgeW91Cit3YW50IHRvIHJlcGxhY2UgdGhlIHNlbGVjdGlvbiB3aXRoIGFueSBjaGFyYWN0ZXIgaW4gImFnJVtdIiB0aGVyZSB3aWxsIGJlIGEKK3BhdXNlIG9mIHwndXBkYXRldGltZSd8IGZpcnN0LgorCitJdCB3b3VsZCBiZSBuaWNlIGlmICJcMCIgd2VyZSByZWNvZ25pemVkIGFzIHRoZSBlbnRpcmUgcGF0dGVybi4gIFRoYXQgaXMsIGl0Cit3b3VsZCBiZSBuaWNlIGlmICJmb286XGVuZFwwIiBoYWQgdGhlIHNhbWUgZWZmZWN0IGFzICJcKGZvb1wpOlxlbmRcMSIuICBJIG1heQordHJ5IHRvIGltcGxlbWVudCB0aGlzIGluIGEgZnV0dXJlIHZlcnNpb24uICAoVGhpcyBpcyBub3Qgc28gZWFzeSB0byBhcnJhbmdlIGFzCit5b3UgbWlnaHQgdGhpbmshKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZpbTp0dz03ODpmbz10Y3EyOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbWF0Y2hpdC52aW0gYi9ydW50aW1lL21hY3Jvcy9tYXRjaGl0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTYwOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvbWF0Y2hpdC52aW0KQEAgLTAsMCArMSw4MDYgQEAKKyIgIG1hdGNoaXQudmltOiAoZ2xvYmFsIHBsdWdpbikgRXh0ZW5kZWQgIiUiIG1hdGNoaW5nCisiICBMYXN0IENoYW5nZTogU2F0IE1heSAxNSAxMTowMCBBTSAyMDA0IEVEVAorIiAgTWFpbnRhaW5lcjogIEJlbmppIEZpc2hlciBQaEQgICA8YmVuamlAbWVtYmVyLkFNUy5vcmc+CisiICBWZXJzaW9uOiAgICAgMS45LCBmb3IgVmltIDYuMworIiAgVVJMOgkJaHR0cDovL3d3dy52aW0ub3JnL3NjcmlwdC5waHA/c2NyaXB0X2lkPTM5CisKKyIgRG9jdW1lbnRhdGlvbjoKKyIgIFRoZSBkb2N1bWVudGF0aW9uIGlzIGluIGEgc2VwYXJhdGUgZmlsZSwgbWF0Y2hpdC50eHQgLgorCisiIENyZWRpdHM6CisiICBWaW0gZWRpdG9yIGJ5IEJyYW0gTW9vbGVuYWFyIChUaGFua3MsIEJyYW0hKQorIiAgT3JpZ2luYWwgc2NyaXB0IGFuZCBkZXNpZ24gYnkgUmF1bCBTZWd1cmEgQWNldmVkbworIiAgU3VwcG9ydCBmb3IgY29tbWVudHMgYnkgRG91Z2xhcyBQb3R0cworIiAgU3VwcG9ydCBmb3IgYmFjayByZWZlcmVuY2VzIGFuZCBvdGhlciBpbXByb3ZlbWVudHMgYnkgQmVuamkgRmlzaGVyCisiICBTdXBwb3J0IGZvciBtYW55IGxhbmd1YWdlcyBieSBKb2hhbm5lcyBaZWxsbmVyCisiICBTdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIGJ1ZyByZXBvcnRzLCBhbmQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbAorIiAgbGFuZ3VhZ2VzIGJ5IEpvcmRpLUFsYmVydCBCYXRhbGxhLCBOZWlsIEJpcmQsIFNlcnZhdGl1cyBCcmFuZHQsIE1hcmsKKyIgIENvbGxldHQsIFN0ZXBoZW4gV2FsbCwgRGFueSBTdC1BbWFudCwgYW5kIEpvaGFubmVzIFplbGxuZXIuCisKKyIgRGVidWdnaW5nOgorIiAgSWYgeW91J2QgbGlrZSB0byB0cnkgdGhlIGJ1aWx0LWluIGRlYnVnZ2luZyBjb21tYW5kcy4uLgorIiAgIDpNYXRjaERlYnVnICAgICAgdG8gYWN0aXZhdGUgZGVidWdnaW5nIGZvciB0aGUgY3VycmVudCBidWZmZXIKKyIgIFRoaXMgc2F2ZXMgdGhlIHZhbHVlcyBvZiBzZXZlcmFsIGtleSBzY3JpcHQgdmFyaWFibGVzIGFzIGJ1ZmZlci1sb2NhbAorIiAgdmFyaWFibGVzLiAgU2VlIHRoZSBNYXRjaERlYnVnKCkgZnVuY3Rpb24sIGJlbG93LCBmb3IgZGV0YWlscy4KKworIiBUT0RPOiAgSSBzaG91bGQgdGhpbmsgYWJvdXQgbXVsdGktbGluZSBwYXR0ZXJucyBmb3IgYjptYXRjaF93b3Jkcy4KKyIgICBUaGlzIHdvdWxkIHJlcXVpcmUgYW4gb3B0aW9uOiAgaG93IG1hbnkgbGluZXMgdG8gc2NhbiAoZGVmYXVsdCAxKS4KKyIgICBUaGlzIHdvdWxkIGJlIHVzZWZ1bCBmb3IgUHl0aG9uLCBtYXliZSBhbHNvIGZvciAqTUwuCisiIFRPRE86ICBNYXliZSBJIHNob3VsZCBhZGQgYSBtZW51IHNvIHRoYXQgcGVvcGxlIHdpbGwgYWN0dWFsbHkgdXNlIHNvbWUgb2YKKyIgICB0aGUgZmVhdHVyZXMgdGhhdCBJIGhhdmUgaW1wbGVtZW50ZWQuCisiIFRPRE86ICBFbGltaW5hdGUgdGhlIE11bHRpTWF0Y2ggZnVuY3Rpb24uICBBZGQgeWV0IGFub3RoZXIgYXJndW1lbnQgdG8KKyIgICBNYXRjaF93cmFwcGVyKCkgaW5zdGVhZC4KKyIgVE9ETzogIEFsbG93IDpsZXQgYjptYXRjaF93b3JkcyA9ICdcKFwoZm9vXClcKGJhclwpXCk6XDNcMjplbmRcMScKKyIgVE9ETzogIE1ha2UgYmFja3JlZnMgc2FmZXIgYnkgdXNpbmcgJ1xWJyAodmVyeSBuby1tYWdpYykuCisiIFRPRE86ICBBZGQgYSBsZXZlbCBvZiBpbmRpcmVjdGlvbiwgc28gdGhhdCBjdXN0b20gJSBzY3JpcHRzIGNhbiB1c2UgbXkKKyIgICB3b3JrIGJ1dCBleHRlbmQgaXQuCisKKyIgYWxsb3cgdXNlciB0byBwcmV2ZW50IGxvYWRpbmcKKyIgYW5kIHByZXZlbnQgZHVwbGljYXRlIGxvYWRpbmcKK2lmIGV4aXN0cygibG9hZGVkX21hdGNoaXQiKSB8fCAmY3AKKyAgZmluaXNoCitlbmRpZgorbGV0IGxvYWRlZF9tYXRjaGl0ID0gMQorbGV0IHM6bGFzdF9tcHMgPSAiIgorbGV0IHM6bGFzdF93b3JkcyA9ICIiCisKK2xldCBzOnNhdmVfY3BvID0gJmNwbworc2V0IGNwbyZ2aW0KKworbm5vcmVtYXAgPHNpbGVudD4gJSAgOjxDLVU+Y2FsbCA8U0lEPk1hdGNoX3dyYXBwZXIoJycsMSwnbicpIDxDUj4KK25ub3JlbWFwIDxzaWxlbnQ+IGclIDo8Qy1VPmNhbGwgPFNJRD5NYXRjaF93cmFwcGVyKCcnLDAsJ24nKSA8Q1I+Cit2bm9yZW1hcCA8c2lsZW50PiAlICA6PEMtVT5jYWxsIDxTSUQ+TWF0Y2hfd3JhcHBlcignJywxLCd2JykgPENSPm0nZ3ZgYAordm5vcmVtYXAgPHNpbGVudD4gZyUgOjxDLVU+Y2FsbCA8U0lEPk1hdGNoX3dyYXBwZXIoJycsMCwndicpIDxDUj5tJ2d2YGAKK29ub3JlbWFwIDxzaWxlbnQ+ICUgIHY6PEMtVT5jYWxsIDxTSUQ+TWF0Y2hfd3JhcHBlcignJywxLCdvJykgPENSPgorb25vcmVtYXAgPHNpbGVudD4gZyUgdjo8Qy1VPmNhbGwgPFNJRD5NYXRjaF93cmFwcGVyKCcnLDAsJ28nKSA8Q1I+CisKKyIgQW5hbG9ndWVzIG9mIFt7IGFuZCBdfSB1c2luZyBtYXRjaGluZyBwYXR0ZXJuczoKK25ub3JlbWFwIDxzaWxlbnQ+IFslIDo8Qy1VPmNhbGwgPFNJRD5NdWx0aU1hdGNoKCJiVyIsICJuIikgPENSPgorbm5vcmVtYXAgPHNpbGVudD4gXSUgOjxDLVU+Y2FsbCA8U0lEPk11bHRpTWF0Y2goIlciLCAgIm4iKSA8Q1I+Cit2bWFwIFslIDxFc2M+WyVtJ2d2YGAKK3ZtYXAgXSUgPEVzYz5dJW0nZ3ZgYAorIiB2bm9yZW1hcCA8c2lsZW50PiBbJSA6PEMtVT5jYWxsIDxTSUQ+TXVsdGlNYXRjaCgiYlciLCAidiIpIDxDUj5tJ2d2YGAKKyIgdm5vcmVtYXAgPHNpbGVudD4gXSUgOjxDLVU+Y2FsbCA8U0lEPk11bHRpTWF0Y2goIlciLCAgInYiKSA8Q1I+bSdndmBgCitvbm9yZW1hcCA8c2lsZW50PiBbJSB2OjxDLVU+Y2FsbCA8U0lEPk11bHRpTWF0Y2goImJXIiwgIm8iKSA8Q1I+Citvbm9yZW1hcCA8c2lsZW50PiBdJSB2OjxDLVU+Y2FsbCA8U0lEPk11bHRpTWF0Y2goIlciLCAgIm8iKSA8Q1I+CisKKyIgdGV4dCBvYmplY3Q6Cit2bWFwIGElIDxFc2M+WyV2XSUKKworIiBBdXRvLWNvbXBsZXRlIG1hcHBpbmdzOiAgKG5vdCB5ZXQgInJlYWR5IGZvciBwcmltZSB0aW1lIikKKyIgVE9ETyBSZWFkIDpoZWxwIHdyaXRlLXBsdWdpbiBmb3IgdGhlICJyaWdodCIgd2F5IHRvIGxldCB0aGUgdXNlcgorIiBzcGVjaWZ5IGEga2V5IGJpbmRpbmcuCisiICAgbGV0IGc6bWF0Y2hfYXV0byA9ICc8Qy1dPicKKyIgICBsZXQgZzptYXRjaF9hdXRvQ1IgPSAnPEMtQ1I+JworIiBpZiBleGlzdHMoImc6bWF0Y2hfYXV0byIpCisiICAgZXhlY3V0ZSAiaW5vcmVtYXAgIiAuIGc6bWF0Y2hfYXV0byAuICcgeDxFc2M+Ij08U0lEPkF1dG9jb21wbGV0ZSgpPENSPlBscycKKyIgZW5kaWYKKyIgaWYgZXhpc3RzKCJnOm1hdGNoX2F1dG9DUiIpCisiICAgZXhlY3V0ZSAiaW5vcmVtYXAgIiAuIGc6bWF0Y2hfYXV0b0NSIC4gJyA8Q1I+PEMtUj49PFNJRD5BdXRvY29tcGxldGUoKTxDUj4nCisiIGVuZGlmCisiIGlmIGV4aXN0cygiZzptYXRjaF9ndGhob2giKQorIiAgIGV4ZWN1dGUgImlub3JlbWFwICIgLiBnOm1hdGNoX2d0aGhvaCAuICcgPEMtTz46Y2FsbCA8U0lEPkd0aGhvaCgpPENSPicKKyIgZW5kaWYgIiBndGhob2ggPSAiR2V0IHRoZSBoZWNrIG91dCBvZiBoZXJlISIKKworbGV0IHM6bm90c2xhc2ggPSAnXFxcQDwhXCUoXFxcXFwpKicKKworZnVuY3Rpb24hIHM6TWF0Y2hfd3JhcHBlcih3b3JkLCBmb3J3YXJkLCBtb2RlKSByYW5nZQorICAiIEluIHM6Q2xlYW5VcCgpLCA6ZXhlY3V0ZSAic2V0IiByZXN0b3JlX29wdGlvbnMgLgorICBsZXQgcmVzdG9yZV9vcHRpb25zID0gKCZpYyA/ICIgIiA6ICIgbm8iKSAuICJpZ25vcmVjYXNlIgorICBpZiBleGlzdHMoImI6bWF0Y2hfaWdub3JlY2FzZSIpCisgICAgbGV0ICZpZ25vcmVjYXNlID0gYjptYXRjaF9pZ25vcmVjYXNlCisgIGVuZGlmCisgIGxldCByZXN0b3JlX29wdGlvbnMgPSAiIHZlPSIgLiAmdmUgLiByZXN0b3JlX29wdGlvbnMKKyAgc2V0IHZlPQorICAiIElmIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCBmcm9tIFZpc3VhbCBtb2RlLCBtYWtlIHN1cmUgdGhhdCB0aGUgY3Vyc29yCisgICIgaXMgYXQgdGhlIGNvcnJlY3QgZW5kIG9mIHRoZSBWaXN1YWwgcmFuZ2U6CisgIGlmIGE6bW9kZSA9PSAidiIKKyAgICBleGVjdXRlICJub3JtYWwhIGd2XDxFc2M+IgorICBlbmRpZgorICAiIEluIHM6Q2xlYW5VcCgpLCB3ZSBtYXkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBjdXJzb3IgbW92ZWQgZm9yd2FyZC4KKyAgbGV0IHN0YXJ0bGluZSA9IGxpbmUoIi4iKQorICBsZXQgc3RhcnRjb2wgPSBjb2woIi4iKQorICAiIFVzZSBkZWZhdWx0IGJlaGF2aW9yIGlmIGNhbGxlZCB3aXRoIGEgY291bnQgb3IgaWYgbm8gcGF0dGVybnMgYXJlIGRlZmluZWQuCisgIGlmIHY6Y291bnQKKyAgICBleGUgIm5vcm1hbCEgIiAuIHY6Y291bnQgLiAiJSIKKyAgICByZXR1cm4gczpDbGVhblVwKHJlc3RvcmVfb3B0aW9ucywgYTptb2RlLCBzdGFydGxpbmUsIHN0YXJ0Y29sKQorICBlbHNlaWYgIWV4aXN0cygiYjptYXRjaF93b3JkcyIpIHx8IGI6bWF0Y2hfd29yZHMgPT0gIiIKKyAgICBzaWxlbnQhIG5vcm1hbCEgJQorICAgIHJldHVybiBzOkNsZWFuVXAocmVzdG9yZV9vcHRpb25zLCBhOm1vZGUsIHN0YXJ0bGluZSwgc3RhcnRjb2wpCisgIGVuZAorCisgICIgRmlyc3Qgc3RlcDogIGlmIG5vdCBhbHJlYWR5IGRvbmUsIHNldCB0aGUgc2NyaXB0IHZhcmlhYmxlcworICAiICAgczpkb19CUglmbGFnIGZvciB3aGV0aGVyIHRoZXJlIGFyZSBiYWNrcmVmcworICAiICAgczpwYXQJcGFyc2VkIHZlcnNpb24gb2YgYjptYXRjaF93b3JkcworICAiICAgczphbGwJcmVnZXhwIGJhc2VkIG9uIHM6cGF0IGFuZCB0aGUgZGVmYXVsdCBncm91cHMKKyAgIgorICAiIEFsbG93IGI6bWF0Y2hfd29yZHMgPSAiR2V0VmltTWF0Y2hXb3JkcygpIiAuCisgIGlmIGI6bWF0Y2hfd29yZHMgPX4gIjoiCisgICAgbGV0IG1hdGNoX3dvcmRzID0gYjptYXRjaF93b3JkcworICBlbHNlCisgICAgZXhlY3V0ZSAibGV0IG1hdGNoX3dvcmRzID0iIGI6bWF0Y2hfd29yZHMKKyAgZW5kaWYKKyIgVGhhbmtzIHRvIFByZWJlbiAiUGVwcGUiIEd1bGRiZXJnIGFuZCBCcmFtIE1vb2xlbmFhciBmb3IgdGhpcyBzdWdnZXN0aW9uIQorICBpZiAobWF0Y2hfd29yZHMgIT0gczpsYXN0X3dvcmRzKSB8fCAoJm1wcyAhPSBzOmxhc3RfbXBzKSB8fAorICAgIFwgZXhpc3RzKCJiOm1hdGNoX2RlYnVnIikKKyAgICBsZXQgczpsYXN0X3dvcmRzID0gbWF0Y2hfd29yZHMKKyAgICBsZXQgczpsYXN0X21wcyA9ICZtcHMKKyAgICBpZiBtYXRjaF93b3JkcyAhfiBzOm5vdHNsYXNoIC4gJ1xcXGQnCisgICAgICBsZXQgczpkb19CUiA9IDAKKyAgICAgIGxldCBzOnBhdCA9IG1hdGNoX3dvcmRzCisgICAgZWxzZQorICAgICAgbGV0IHM6ZG9fQlIgPSAxCisgICAgICBsZXQgczpwYXQgPSBzOlBhcnNlV29yZHMobWF0Y2hfd29yZHMpCisgICAgZW5kaWYKKyAgICAiIFRoZSBuZXh0IHNldmVyYWwgbGluZXMgd2VyZSBoZXJlIGJlZm9yZQorICAgICIgQkYgc3RhcnRlZCBtZXNzaW5nIHdpdGggdGhpcyBzY3JpcHQuCisgICAgIiBxdW90ZSB0aGUgc3BlY2lhbCBjaGFycyBpbiAnbWF0Y2hwYWlycycsIHJlcGxhY2UgWyw6XSB3aXRoIFx8IGFuZCB0aGVuCisgICAgIiBhcHBlbmQgdGhlIGJ1aWx0aW4gcGFpcnMgKC8qLCAqLywgI2lmLCAjaWZkZWYsICNlbHNlLCAjZWxpZiwgI2VuZGlmKQorICAgICIgbGV0IGRlZmF1bHQgPSBzdWJzdGl0dXRlKGVzY2FwZSgmbXBzLCAnWyReLip+XFwvP10nKSwgJ1ssOl1cKycsCisgICAgIiAgXCAnXFx8JywgJ2cnKS4nXHxcL1wqXHxcKlwvXHwjaWZcPlx8I2lmZGVmXD5cfCNlbHNlXD5cfCNlbGlmXD5cfCNlbmRpZlw+JworICAgIGxldCBkZWZhdWx0ID0gZXNjYXBlKCZtcHMsICdbJF4uKn5cXC8/XScpIC4gKHN0cmxlbigmbXBzKSA/ICIsIiA6ICIiKSAuCisgICAgICBcICdcL1wqOlwqXC8sI2lmXCUoZGVmXClcPTojZWxzZVw+OiNlbGlmXD46I2VuZGlmXD4nCisgICAgIiBzOmFsbCA9IHBhdHRlcm4gd2l0aCBhbGwgdGhlIGtleXdvcmRzCisgICAgbGV0IHM6YWxsID0gczpwYXQgLiAoc3RybGVuKHM6cGF0KSA/ICIsIiA6ICIiKSAuIGRlZmF1bHQKKyAgICBsZXQgczphbGwgPSBzdWJzdGl0dXRlKHM6YWxsLCBzOm5vdHNsYXNoIC4gJ1x6c1ssOl1cKycsICdcXHwnLCAnZycpCisgICAgbGV0IHM6YWxsID0gJ1wlKCcgLiBzOmFsbCAuICdcKScKKyAgICAiIGxldCBzOmFsbCA9ICdcJSgnIC4gc3Vic3RpdHV0ZShzOmFsbCwgJ1xcXHplWyw6XScsICcnLCAnZycpIC4gJ1wpJworICAgIGlmIGV4aXN0cygiYjptYXRjaF9kZWJ1ZyIpCisgICAgICBsZXQgYjptYXRjaF9wYXQgPSBzOnBhdAorICAgIGVuZGlmCisgIGVuZGlmCisKKyAgIiBTZWNvbmQgc3RlcDogIHNldCB0aGUgZm9sbG93aW5nIGxvY2FsIHZhcmlhYmxlczoKKyAgIiAgICAgbWF0Y2hsaW5lID0gbGluZSBvbiB3aGljaCB0aGUgY3Vyc29yIHN0YXJ0ZWQKKyAgIiAgICAgY3VyY29sICAgID0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIG1hdGNoCisgICIgICAgIHByZWZpeCAgICA9IHJlZ2V4cCBmb3Igc3RhcnQgb2YgbGluZSB0byBzdGFydCBvZiBtYXRjaAorICAiICAgICBzdWZmaXggICAgPSByZWdleHAgZm9yIGVuZCBvZiBtYXRjaCB0byBlbmQgb2YgbGluZQorICAiIFJlcXVpcmUgbWF0Y2ggdG8gZW5kIG9uIG9yIGFmdGVyIHRoZSBjdXJzb3IgYW5kIHByZWZlciBpdCB0bworICAiIHN0YXJ0IG9uIG9yIGJlZm9yZSB0aGUgY3Vyc29yLgorICBsZXQgbWF0Y2hsaW5lID0gZ2V0bGluZShzdGFydGxpbmUpCisgIGlmIGE6d29yZCAhPSAnJworICAgICIgd29yZCBnaXZlbgorICAgIGlmIGE6d29yZCAhfiBzOmFsbAorICAgICAgZWNob2hsIFdhcm5pbmdNc2d8ZWNobyAnTWlzc2luZyBydWxlIGZvciB3b3JkOiInLmE6d29yZC4nIid8ZWNob2hsIE5PTkUKKyAgICAgIHJldHVybiBzOkNsZWFuVXAocmVzdG9yZV9vcHRpb25zLCBhOm1vZGUsIHN0YXJ0bGluZSwgc3RhcnRjb2wpCisgICAgZW5kaWYKKyAgICBsZXQgbWF0Y2hsaW5lID0gYTp3b3JkCisgICAgbGV0IGN1cmNvbCA9IDAKKyAgICBsZXQgcHJlZml4ID0gJ15cJSgnCisgICAgbGV0IHN1ZmZpeCA9ICdcKSQnCisgICIgTm93IHRoZSBjYXNlIHdoZW4gIndvcmQiIGlzIG5vdCBnaXZlbgorICBlbHNlCSIgRmluZCB0aGUgbWF0Y2ggdGhhdCBlbmRzIG9uIG9yIGFmdGVyIHRoZSBjdXJzb3IgYW5kIHNldCBjdXJjb2wuCisgICAgbGV0IHJlZ2V4cCA9IHM6V2hvbGVtYXRjaChtYXRjaGxpbmUsIHM6YWxsLCBzdGFydGNvbC0xKQorICAgIGxldCBjdXJjb2wgPSBtYXRjaChtYXRjaGxpbmUsIHJlZ2V4cCkKKyAgICBsZXQgc3VmID0gc3RybGVuKG1hdGNobGluZSkgLSBtYXRjaGVuZChtYXRjaGxpbmUsIHJlZ2V4cCkKKyAgICBsZXQgcHJlZml4ID0gKGN1cmNvbCA/ICdeLlx7JyAgLiBjdXJjb2wgLiAnfVwlKCcgOiAnXlwlKCcpCisgICAgbGV0IHN1ZmZpeCA9IChzdWYgPyAnXCkuXHsnIC4gc3VmIC4gJ30kJyAgOiAnXCkkJykKKyAgICAiIElmIHRoZSBtYXRjaCBjb21lcyBmcm9tIHRoZSBkZWZhdWx0cywgYmFpbCBvdXQuCisgICAgaWYgbWF0Y2hsaW5lICF+IHByZWZpeCAuCisgICAgICBcIHN1YnN0aXR1dGUoczpwYXQsIHM6bm90c2xhc2guJ1x6c1ssOl1cKycsICdcXHwnLCAnZycpIC4gc3VmZml4CisgICAgICBzaWxlbnQhIG5vcm0hICUKKyAgICAgIHJldHVybiBzOkNsZWFuVXAocmVzdG9yZV9vcHRpb25zLCBhOm1vZGUsIHN0YXJ0bGluZSwgc3RhcnRjb2wpCisgICAgZW5kaWYKKyAgZW5kaWYKKyAgaWYgZXhpc3RzKCJiOm1hdGNoX2RlYnVnIikKKyAgICBsZXQgYjptYXRjaF9tYXRjaCA9IG1hdGNoc3RyKG1hdGNobGluZSwgcmVnZXhwKQorICAgIGxldCBiOm1hdGNoX2NvbCA9IGN1cmNvbCsxCisgIGVuZGlmCisKKyAgIiBUaGlyZCBzdGVwOiAgRmluZCB0aGUgZ3JvdXAgYW5kIHNpbmdsZSB3b3JkIHRoYXQgbWF0Y2gsIGFuZCB0aGUgb3JpZ2luYWwKKyAgIiAoYmFja3JlZikgdmVyc2lvbnMgb2YgdGhlc2UuICBUaGVuLCByZXNvbHZlIHRoZSBiYWNrcmVmcy4KKyAgIiBTZXQgdGhlIGZvbGxvd2luZyBsb2NhbCB2YXJpYWJsZToKKyAgIiBncm91cCA9IGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zLCBvbmUgb2Ygd2hpY2ggbWF0Y2hlcworICAiICAgICAgID0gaW5pOm1pZDpmaW4gb3IgaW5pOmZpbgorICAiCisgICIgUmVjb25zdHJ1Y3QgdGhlIHZlcnNpb24gd2l0aCB1bnJlc29sdmVkIGJhY2tyZWZzLgorICBsZXQgcGF0QlIgPSBzdWJzdGl0dXRlKG1hdGNoX3dvcmRzLicsJywKKyAgICBcIHM6bm90c2xhc2guJ1x6c1ssOl0qLFssOl0qJywgJywnLCAnZycpCisgIGxldCBwYXRCUiA9IHN1YnN0aXR1dGUocGF0QlIsIHM6bm90c2xhc2guJ1x6czpcezIsfScsICc6JywgJ2cnKQorICAiIE5vdywgc2V0IGdyb3VwIGFuZCBncm91cEJSIHRvIHRoZSBtYXRjaGluZyBncm91cDogJ2lmOmVuZGlmJyBvcgorICAiICd3aGlsZTplbmR3aGlsZScgb3Igd2hhdGV2ZXIuICBBIGJpdCBvZiBhIGtsdWdlOiAgczpDaG9vc2UoKSByZXR1cm5zCisgICIgZ3JvdXAgLiAiLCIgLiBncm91cEJSLCBhbmQgd2UgcGljayBpdCBhcGFydC4KKyAgbGV0IGdyb3VwID0gczpDaG9vc2UoczpwYXQsIG1hdGNobGluZSwgIiwiLCAiOiIsIHByZWZpeCwgc3VmZml4LCBwYXRCUikKKyAgbGV0IGkgPSBtYXRjaGVuZChncm91cCwgczpub3RzbGFzaCAuICIsIikKKyAgbGV0IGdyb3VwQlIgPSBzdHJwYXJ0KGdyb3VwLCBpKQorICBsZXQgZ3JvdXAgPSBzdHJwYXJ0KGdyb3VwLCAwLCBpLTEpCisgICIgTm93LCBtYXRjaGxpbmUgPX4gcHJlZml4IC4gc3Vic3RpdHV0ZShncm91cCwnOicsJ1x8JywnZycpIC4gc3VmZml4CisgIGlmIHM6ZG9fQlIgIiBEbyB0aGUgaGFyZCBwYXJ0OiAgcmVzb2x2ZSB0aG9zZSBiYWNrcmVmcyEKKyAgICBsZXQgZ3JvdXAgPSBzOkluc2VydFJlZnMoZ3JvdXBCUiwgcHJlZml4LCBncm91cCwgc3VmZml4LCBtYXRjaGxpbmUpCisgIGVuZGlmCisgIGlmIGV4aXN0cygiYjptYXRjaF9kZWJ1ZyIpCisgICAgbGV0IGI6bWF0Y2hfd2hvbGVCUiA9IGdyb3VwQlIKKyAgICBsZXQgaSA9IG1hdGNoZW5kKGdyb3VwQlIsIHM6bm90c2xhc2ggLiAiOiIpCisgICAgbGV0IGI6bWF0Y2hfaW5pQlIgPSBzdHJwYXJ0KGdyb3VwQlIsIDAsIGktMSkKKyAgZW5kaWYKKworICAiIEZvdXJ0aCBzdGVwOiAgU2V0IHRoZSBhcmd1bWVudHMgZm9yIHNlYXJjaHBhaXIoKS4KKyAgbGV0IGkgPSBtYXRjaGVuZChncm91cCwgczpub3RzbGFzaCAuICI6IikKKyAgbGV0IGogPSBtYXRjaGVuZChncm91cCwgJy4qJyAuIHM6bm90c2xhc2ggLiAiOiIpCisgIGxldCBpbmkgPSBzdHJwYXJ0KGdyb3VwLCAwLCBpLTEpCisgIGxldCBtaWQgPSBzdWJzdGl0dXRlKHN0cnBhcnQoZ3JvdXAsIGksai1pLTEpLCBzOm5vdHNsYXNoLidcenM6JywgJ1xcfCcsICdnJykKKyAgbGV0IGZpbiA9IHN0cnBhcnQoZ3JvdXAsIGopCisgICIgc2VhcmNocGFpcigpIHJlcXVpcmVzIHRoYXQgdGhlc2UgcGF0dGVybnMgYXZvaWQgXChcKSBncm91cHMuCisgIGxldCBpbmkgPSBzdWJzdGl0dXRlKGluaSwgczpub3RzbGFzaCAuICdcenNcXCgnLCAnXFwlKCcsICdnJykKKyAgbGV0IG1pZCA9IHN1YnN0aXR1dGUobWlkLCBzOm5vdHNsYXNoIC4gJ1x6c1xcKCcsICdcXCUoJywgJ2cnKQorICBsZXQgZmluID0gc3Vic3RpdHV0ZShmaW4sIHM6bm90c2xhc2ggLiAnXHpzXFwoJywgJ1xcJSgnLCAnZycpCisgICIgU2V0IG1pZC4gIFRoaXMgaXMgb3B0aW1pemVkIGZvciByZWFkYWJpbGl0eSwgbm90IG1pY3JvLWVmZmljaWVuY3khCisgIGlmIGE6Zm9yd2FyZCAmJiBtYXRjaGxpbmUgPX4gcHJlZml4IC4gZmluIC4gc3VmZml4CisgICAgXCB8fCAhYTpmb3J3YXJkICYmIG1hdGNobGluZSA9fiBwcmVmaXggLiBpbmkgLiBzdWZmaXgKKyAgICBsZXQgbWlkID0gIiIKKyAgZW5kaWYKKyAgIiBTZXQgZmxhZy4gIFRoaXMgaXMgb3B0aW1pemVkIGZvciByZWFkYWJpbGl0eSwgbm90IG1pY3JvLWVmZmljaWVuY3khCisgIGlmIGE6Zm9yd2FyZCAmJiBtYXRjaGxpbmUgPX4gcHJlZml4IC4gZmluIC4gc3VmZml4CisgICAgXCB8fCAhYTpmb3J3YXJkICYmIG1hdGNobGluZSAhfiBwcmVmaXggLiBpbmkgLiBzdWZmaXgKKyAgICBsZXQgZmxhZyA9ICJiVyIKKyAgZWxzZQorICAgIGxldCBmbGFnID0gIlciCisgIGVuZGlmCisgICIgU2V0IHNraXAuCisgIGlmIGV4aXN0cygiYjptYXRjaF9za2lwIikKKyAgICBsZXQgc2tpcCA9IGI6bWF0Y2hfc2tpcAorICBlbHNlaWYgZXhpc3RzKCJiOm1hdGNoX2NvbW1lbnQiKSAiIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCB0ZXN0aW5nIQorICAgIGxldCBza2lwID0gInI6IiAuIGI6bWF0Y2hfY29tbWVudAorICBlbHNlCisgICAgbGV0IHNraXAgPSAnczpjb21tZW50XHxzdHJpbmcnCisgIGVuZGlmCisgIGxldCBza2lwID0gczpQYXJzZVNraXAoc2tpcCkKKyAgaWYgZXhpc3RzKCJiOm1hdGNoX2RlYnVnIikKKyAgICBsZXQgYjptYXRjaF9pbmkgPSBpbmkKKyAgICBsZXQgYjptYXRjaF90YWlsID0gKHN0cmxlbihtaWQpID8gbWlkLidcfCcgOiAnJykgLiBmaW4KKyAgZW5kaWYKKworICAiIEZpZnRoIHN0ZXA6ICBhY3R1YWxseSBzdGFydCBtb3ZpbmcgdGhlIGN1cnNvciBhbmQgY2FsbCBzZWFyY2hwYWlyKCkuCisgICIgTGF0ZXIsIDpleGVjdXRlIHJlc3RvcmVfY3Vyc29yIHRvIGdldCB0byB0aGUgb3JpZ2luYWwgc2NyZWVuLgorICBsZXQgcmVzdG9yZV9jdXJzb3IgPSB2aXJ0Y29sKCIuIikgLiAifCIKKyAgbm9ybWFsISBnMAorICBsZXQgcmVzdG9yZV9jdXJzb3IgPSBsaW5lKCIuIikgLiAiRyIgLiAgdmlydGNvbCgiLiIpIC4gInx6cyIgLiByZXN0b3JlX2N1cnNvcgorICBub3JtYWwhIEgKKyAgbGV0IHJlc3RvcmVfY3Vyc29yID0gIm5vcm1hbCEiIC4gbGluZSgiLiIpIC4gIkd6dCIgLiByZXN0b3JlX2N1cnNvcgorICBleGVjdXRlIHJlc3RvcmVfY3Vyc29yCisgIG5vcm1hbCEgMAorICBpZiBjdXJjb2wKKyAgICBleGVjdXRlICJub3JtYWwhIiAuIGN1cmNvbCAuICJsIgorICBlbmRpZgorICBpZiBza2lwID1+ICdzeW5JRCcgJiYgIShoYXMoInN5bnRheCIpICYmIGV4aXN0cygiZzpzeW50YXhfb24iKSkKKyAgICBsZXQgc2tpcCA9ICIwIgorICBlbHNlCisgICAgZXhlY3V0ZSAiaWYgIiAuIHNraXAgLiAifCBsZXQgc2tpcCA9ICcwJyB8IGVuZGlmIgorICBlbmRpZgorICBsZXQgc3BfcmV0dXJuID0gc2VhcmNocGFpcihpbmksIG1pZCwgZmluLCBmbGFnLCBza2lwKQorICBsZXQgZmluYWxfcG9zaXRpb24gPSAiY2FsbCBjdXJzb3IoIiAuIGxpbmUoIi4iKSAuICIsIiAuIGNvbCgiLiIpIC4gIikiCisgICIgUmVzdG9yZSBjdXJzb3IgcG9zaXRpb24gYW5kIG9yaWdpbmFsIHNjcmVlbi4KKyAgZXhlY3V0ZSByZXN0b3JlX2N1cnNvcgorICBub3JtYWwhIG0nCisgIGlmIHNwX3JldHVybiA+IDAKKyAgICBleGVjdXRlIGZpbmFsX3Bvc2l0aW9uCisgIGVuZGlmCisgIHJldHVybiBzOkNsZWFuVXAocmVzdG9yZV9vcHRpb25zLCBhOm1vZGUsIHN0YXJ0bGluZSwgc3RhcnRjb2wsIG1pZC4nXHwnLmZpbikKK2VuZGZ1bgorCisiIFJlc3RvcmUgb3B0aW9ucyBhbmQgZG8gc29tZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBPcGVyYXRvci1wZW5kaW5nIG1vZGUuCisiIFRoZSBvcHRpb25hbCBhcmd1bWVudCBpcyB0aGUgdGFpbCBvZiB0aGUgbWF0Y2hpbmcgZ3JvdXAuCitmdW4hIHM6Q2xlYW5VcChvcHRpb25zLCBtb2RlLCBzdGFydGxpbmUsIHN0YXJ0Y29sLCAuLi4pCisgIGV4ZWN1dGUgInNldCIgYTpvcHRpb25zCisgICIgT3BlbiBmb2xkcywgaWYgYXBwcm9wcmlhdGUuCisgIGlmIGE6bW9kZSAhPSAibyIKKyAgICBpZiAmZm9sZG9wZW4gPX4gInBlcmNlbnQiCisgICAgICBub3JtYWwhIHp2CisgICAgZW5kaWYKKyAgICAiIEluIE9wZXJhdG9yLXBlbmRpbmcgbW9kZSwgd2Ugd2FudCB0byBpbmNsdWRlIHRoZSB3aG9sZSBtYXRjaAorICAgICIgKGZvciBleGFtcGxlLCBkJSkuCisgICAgIiBUaGlzIGlzIG9ubHkgYSBwcm9ibGVtIGlmIHdlIGVuZCB1cCBtb3ZpbmcgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uLgorICBlbHNlaWYgKGE6c3RhcnRsaW5lIDwgbGluZSgiLiIpKSB8fAorCVwgKGE6c3RhcnRsaW5lID09IGxpbmUoIi4iKSAmJiBhOnN0YXJ0Y29sIDwgY29sKCIuIikpCisgICAgaWYgYTowCisgICAgICAiIENoZWNrIHdoZXRoZXIgdGhlIG1hdGNoIGlzIGEgc2luZ2xlIGNoYXJhY3Rlci4gIElmIG5vdCwgbW92ZSB0byB0aGUKKyAgICAgICIgZW5kIG9mIHRoZSBtYXRjaC4KKyAgICAgIGxldCBtYXRjaGxpbmUgPSBnZXRsaW5lKCIuIikKKyAgICAgIGxldCBjdXJyY29sID0gY29sKCIuIikKKyAgICAgIGxldCByZWdleHAgPSBzOldob2xlbWF0Y2gobWF0Y2hsaW5lLCBhOjEsIGN1cnJjb2wtMSkKKyAgICAgIGxldCBlbmRjb2wgPSBtYXRjaGVuZChtYXRjaGxpbmUsIHJlZ2V4cCkKKyAgICAgIGlmIGVuZGNvbCA+IGN1cnJjb2wgICIgVGhpcyBpcyBOT1Qgb2ZmIGJ5IG9uZSEKKwlleGVjdXRlICJub3JtYWwhIiAuIChlbmRjb2wgLSBjdXJyY29sKSAuICJsIgorICAgICAgZW5kaWYKKyAgICBlbmRpZiAiIGE6MAorICBlbmRpZiAiIGE6bW9kZSAhPSAibyIgJiYgZXRjLgorICByZXR1cm4gMAorZW5kZnVuCisKKyIgRXhhbXBsZSAoc2ltcGxpZmllZCBIVE1MIHBhdHRlcm5zKTogIGlmCisiICAgYTpncm91cEJSCT0gJzxcKFxrXCtcKT46PC9cMT4nCisiICAgYTpwcmVmaXgJPSAnXi5cezN9XCgnCisiICAgYTpncm91cAk9ICc8XChca1wrXCk+OjwvXChca1wrXCk+JworIiAgIGE6c3VmZml4CT0gJ1wpLlx7Mn0kJworIiAgIGE6bWF0Y2hsaW5lCT0gICIxMjM8dGFnPjEyIiBvciAiMTIzPC90YWc+MTIiCisiIHRoZW4gZXh0cmFjdCAidGFnIiBmcm9tIGE6bWF0Y2hsaW5lIGFuZCByZXR1cm4gIjx0YWc+OjwvdGFnPiIgLgorZnVuISBzOkluc2VydFJlZnMoZ3JvdXBCUiwgcHJlZml4LCBncm91cCwgc3VmZml4LCBtYXRjaGxpbmUpCisgIGlmIGE6bWF0Y2hsaW5lICF+IGE6cHJlZml4IC4KKyAgICBcIHN1YnN0aXR1dGUoYTpncm91cCwgczpub3RzbGFzaCAuICdcenM6JywgJ1xcfCcsICdnJykgLiBhOnN1ZmZpeAorICAgIHJldHVybiBhOmdyb3VwCisgIGVuZGlmCisgIGxldCBpID0gbWF0Y2hlbmQoYTpncm91cEJSLCBzOm5vdHNsYXNoIC4gJzonKQorICBsZXQgaW5pID0gc3RycGFydChhOmdyb3VwQlIsIDAsIGktMSkKKyAgbGV0IHRhaWxCUiA9IHN0cnBhcnQoYTpncm91cEJSLCBpKQorICBsZXQgd29yZCA9IHM6Q2hvb3NlKGE6Z3JvdXAsIGE6bWF0Y2hsaW5lLCAiOiIsICIiLCBhOnByZWZpeCwgYTpzdWZmaXgsCisgICAgXCBhOmdyb3VwQlIpCisgIGxldCBpID0gbWF0Y2hlbmQod29yZCwgczpub3RzbGFzaCAuICI6IikKKyAgbGV0IHdvcmRCUiA9IHN0cnBhcnQod29yZCwgaSkKKyAgbGV0IHdvcmQgPSBzdHJwYXJ0KHdvcmQsIDAsIGktMSkKKyAgIiBOb3csIGE6bWF0Y2hsaW5lID1+IGE6cHJlZml4IC4gd29yZCAuIGE6c3VmZml4CisgIGlmIHdvcmRCUiAhPSBpbmkKKyAgICBsZXQgdGFibGUgPSBzOlJlc29sdmUoaW5pLCB3b3JkQlIsICJ0YWJsZSIpCisgIGVsc2UKKyAgICAiIGxldCB0YWJsZSA9ICItLS0tLS0tLS0tIgorICAgIGxldCB0YWJsZSA9ICIiCisgICAgbGV0IGQgPSAwCisgICAgd2hpbGUgZCA8IDEwCisgICAgICBpZiB0YWlsQlIgPX4gczpub3RzbGFzaCAuICdcXCcgLiBkCisJIiBsZXQgdGFibGVbZF0gPSBkCisJbGV0IHRhYmxlID0gdGFibGUgLiBkCisgICAgICBlbHNlCisJbGV0IHRhYmxlID0gdGFibGUgLiAiLSIKKyAgICAgIGVuZGlmCisgICAgICBsZXQgZCA9IGQgKyAxCisgICAgZW5kd2hpbGUKKyAgZW5kaWYKKyAgbGV0IGQgPSA5CisgIHdoaWxlIGQKKyAgICBpZiB0YWJsZVtkXSAhPSAiLSIKKyAgICAgIGxldCBiYWNrcmVmID0gc3Vic3RpdHV0ZShhOm1hdGNobGluZSwgYTpwcmVmaXgud29yZC5hOnN1ZmZpeCwKKwlcICdcJy50YWJsZVtkXSwgIiIpCisJIiBBcmUgdGhlcmUgYW55IG90aGVyIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgYmUgZXNjYXBlZD8KKyAgICAgIGxldCBiYWNrcmVmID0gZXNjYXBlKGJhY2tyZWYsICcqLDonKQorICAgICAgZXhlY3V0ZSBzOlJlZihpbmksIGQsICJzdGFydCIsICJsZW4iKQorICAgICAgbGV0IGluaSA9IHN0cnBhcnQoaW5pLCAwLCBzdGFydCkgLiBiYWNrcmVmIC4gc3RycGFydChpbmksIHN0YXJ0K2xlbikKKyAgICAgIGxldCB0YWlsQlIgPSBzdWJzdGl0dXRlKHRhaWxCUiwgczpub3RzbGFzaCAuICdcenNcXCcgLiBkLAorCVwgZXNjYXBlKGJhY2tyZWYsICdcXCcpLCAnZycpCisgICAgZW5kaWYKKyAgICBsZXQgZCA9IGQtMQorICBlbmR3aGlsZQorICBpZiBleGlzdHMoImI6bWF0Y2hfZGVidWciKQorICAgIGlmIHM6ZG9fQlIKKyAgICAgIGxldCBiOm1hdGNoX3RhYmxlID0gdGFibGUKKyAgICAgIGxldCBiOm1hdGNoX3dvcmQgPSB3b3JkCisgICAgZWxzZQorICAgICAgbGV0IGI6bWF0Y2hfdGFibGUgPSAiIgorICAgICAgbGV0IGI6bWF0Y2hfd29yZCA9ICIiCisgICAgZW5kaWYKKyAgZW5kaWYKKyAgcmV0dXJuIGluaSAuICI6IiAuIHRhaWxCUgorZW5kZnVuCisKKyIgSW5wdXQgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBncm91cHMgd2l0aCBiYWNrcmVmcywgc3VjaCBhcworIiAgIGE6Z3JvdXBzID0gJ1woZm9vXCk6ZW5kXDEsXChiYXJcKTplbmRcMScKKyIgYW5kIHJldHVybiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGdyb3VwcyB3aXRoIGJhY2tyZWZzIHJlcGxhY2VkOgorIiAgIHJldHVybiAnXChmb29cKTplbmRcKGZvb1wpLFwoYmFyXCk6ZW5kXChiYXJcKScKK2Z1biEgczpQYXJzZVdvcmRzKGdyb3VwcykKKyAgbGV0IGdyb3VwcyA9IHN1YnN0aXR1dGUoYTpncm91cHMuIiwiLCBzOm5vdHNsYXNoLidcenNbLDpdKixbLDpdKicsICcsJywgJ2cnKQorICBsZXQgZ3JvdXBzID0gc3Vic3RpdHV0ZShncm91cHMsIHM6bm90c2xhc2ggLiAnXHpzOlx7Mix9JywgJzonLCAnZycpCisgIGxldCBwYXJzZWQgPSAiIgorICB3aGlsZSBncm91cHMgPX4gJ1teLDpdJworICAgIGxldCBpID0gbWF0Y2hlbmQoZ3JvdXBzLCBzOm5vdHNsYXNoIC4gJzonKQorICAgIGxldCBqID0gbWF0Y2hlbmQoZ3JvdXBzLCBzOm5vdHNsYXNoIC4gJywnKQorICAgIGxldCBpbmkgPSBzdHJwYXJ0KGdyb3VwcywgMCwgaS0xKQorICAgIGxldCB0YWlsID0gc3RycGFydChncm91cHMsIGksIGotaS0xKSAuICI6IgorICAgIGxldCBncm91cHMgPSBzdHJwYXJ0KGdyb3VwcywgaikKKyAgICBsZXQgcGFyc2VkID0gcGFyc2VkIC4gaW5pCisgICAgbGV0IGkgPSBtYXRjaGVuZCh0YWlsLCBzOm5vdHNsYXNoIC4gJzonKQorICAgIHdoaWxlIGkgIT0gLTEKKyAgICAgICIgSW4gJ2lmOmVsc2U6ZW5kaWYnLCBpbmk9J2lmJyBhbmQgd29yZD0nZWxzZScgYW5kIHRoZW4gd29yZD0nZW5kaWYnLgorICAgICAgbGV0IHdvcmQgPSBzdHJwYXJ0KHRhaWwsIDAsIGktMSkKKyAgICAgIGxldCB0YWlsID0gc3RycGFydCh0YWlsLCBpKQorICAgICAgbGV0IGkgPSBtYXRjaGVuZCh0YWlsLCBzOm5vdHNsYXNoIC4gJzonKQorICAgICAgbGV0IHBhcnNlZCA9IHBhcnNlZCAuICI6IiAuIHM6UmVzb2x2ZShpbmksIHdvcmQsICJ3b3JkIikKKyAgICBlbmR3aGlsZSAiIE5vdywgdGFpbCBoYXMgYmVlbiB1c2VkIHVwLgorICAgIGxldCBwYXJzZWQgPSBwYXJzZWQgLiAiLCIKKyAgZW5kd2hpbGUgIiBncm91cHMgPX4gJ1teLDpdJworICByZXR1cm4gcGFyc2VkCitlbmRmdW4KKworIiBUT0RPIEkgdGhpbmsgdGhpcyBjYW4gYmUgc2ltcGxpZmllZCBhbmQvb3IgbWFkZSBtb3JlIGVmZmljaWVudC4KKyIgVE9ETyBXaGF0IHNob3VsZCBJIGRvIGlmIGE6c3RhcnQgaXMgb3V0IG9mIHJhbmdlPworIiBSZXR1cm4gYSByZWdleHAgdGhhdCBtYXRjaGVzIGFsbCBvZiBhOnN0cmluZywgc3VjaCB0aGF0CisiIG1hdGNoc3RyKGE6c3RyaW5nLCByZWdleHApIHJlcHJlc2VudHMgdGhlIG1hdGNoIGZvciBhOnBhdCB0aGF0IHN0YXJ0cworIiBhcyBjbG9zZSB0byBhOnN0YXJ0IGFzIHBvc3NpYmxlLCBiZWZvcmUgYmVpbmcgcHJlZmVycmVkIHRvIGFmdGVyLCBhbmQKKyIgZW5kcyBhZnRlciBhOnN0YXJ0IC4KKyIgVXNhZ2U6CisiIGxldCByZWdleHAgPSBzOldob2xlbWF0Y2goZ2V0bGluZSgiLiIpLCAnZm9vXHxiYXInLCBjb2woIi4iKS0xKQorIiBsZXQgaSAgICAgID0gbWF0Y2goZ2V0bGluZSgiLiIpLCByZWdleHApCisiIGxldCBqICAgICAgPSBtYXRjaGVuZChnZXRsaW5lKCIuIiksIHJlZ2V4cCkKKyIgbGV0IG1hdGNoICA9IG1hdGNoc3RyKGdldGxpbmUoIi4iKSwgcmVnZXhwKQorZnVuISBzOldob2xlbWF0Y2goc3RyaW5nLCBwYXQsIHN0YXJ0KQorICBsZXQgZ3JvdXAgPSAnXCUoJyAuIGE6cGF0IC4gJ1wpJworICBsZXQgcHJlZml4ID0gKGE6c3RhcnQgPyAnXCheLlx7LCcgLiBhOnN0YXJ0IC4gJ31cKVx6cycgOiAnXicpCisgIGxldCBsZW4gPSBzdHJsZW4oYTpzdHJpbmcpCisgIGxldCBzdWZmaXggPSAoYTpzdGFydCsxIDwgbGVuID8gJ1woLlx7LCcuKGxlbi1hOnN0YXJ0LTEpLid9JFwpXEA9JyA6ICckJykKKyAgaWYgYTpzdHJpbmcgIX4gcHJlZml4IC4gZ3JvdXAgLiBzdWZmaXgKKyAgICBsZXQgcHJlZml4ID0gJycKKyAgZW5kaWYKKyAgcmV0dXJuIHByZWZpeCAuIGdyb3VwIC4gc3VmZml4CitlbmRmdW4KKworIiBObyBleHRyYSBhcmd1bWVudHM6ICBzOlJlZihzdHJpbmcsIGQpIHdpbGwKKyIgZmluZCB0aGUgZCd0aCBvY2N1cnJlbmNlIG9mICdcKCcgYW5kIHJldHVybiBpdCwgYWxvbmcgd2l0aCBldmVyeXRoaW5nIHVwCisiIHRvIGFuZCBpbmNsdWRpbmcgdGhlIG1hdGNoaW5nICdcKScuCisiIE9uZSBhcmd1bWVudDogIHM6UmVmKHN0cmluZywgZCwgInN0YXJ0IikgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHN0YXJ0CisiIG9mIHRoZSBkJ3RoICdcKCcgYW5kIGFueSBvdGhlciBhcmd1bWVudCByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGdyb3VwLgorIiBUd28gYXJndW1lbnRzOiAgczpSZWYoc3RyaW5nLCBkLCAiZm9vIiwgImJhciIpIHJldHVybnMgYSBzdHJpbmcgdG8gYmUKKyIgZXhlY3V0ZWQsIGhhdmluZyB0aGUgZWZmZWN0IG9mCisiICAgOmxldCBmb28gPSBzOlJlZihzdHJpbmcsIGQsICJzdGFydCIpCisiICAgOmxldCBiYXIgPSBzOlJlZihzdHJpbmcsIGQsICJsZW4iKQorZnVuISBzOlJlZihzdHJpbmcsIGQsIC4uLikKKyAgbGV0IGxlbiA9IHN0cmxlbihhOnN0cmluZykKKyAgaWYgYTpkID09IDAKKyAgICBsZXQgc3RhcnQgPSAwCisgIGVsc2UKKyAgICBsZXQgY250ID0gYTpkCisgICAgbGV0IG1hdGNoID0gYTpzdHJpbmcKKyAgICB3aGlsZSBjbnQKKyAgICAgIGxldCBjbnQgPSBjbnQgLSAxCisgICAgICBsZXQgaW5kZXggPSBtYXRjaGVuZChtYXRjaCwgczpub3RzbGFzaCAuICdcXCgnKQorICAgICAgaWYgaW5kZXggPT0gLTEKKwlyZXR1cm4gIiIKKyAgICAgIGVuZGlmCisgICAgICBsZXQgbWF0Y2ggPSBzdHJwYXJ0KG1hdGNoLCBpbmRleCkKKyAgICBlbmR3aGlsZQorICAgIGxldCBzdGFydCA9IGxlbiAtIHN0cmxlbihtYXRjaCkKKyAgICBpZiBhOjAgPT0gMSAmJiBhOjEgPT0gInN0YXJ0IgorICAgICAgcmV0dXJuIHN0YXJ0IC0gMgorICAgIGVuZGlmCisgICAgbGV0IGNudCA9IDEKKyAgICB3aGlsZSBjbnQKKyAgICAgIGxldCBpbmRleCA9IG1hdGNoZW5kKG1hdGNoLCBzOm5vdHNsYXNoIC4gJ1xcKFx8XFwpJykgLSAxCisgICAgICBpZiBpbmRleCA9PSAtMgorCXJldHVybiAiIgorICAgICAgZW5kaWYKKyAgICAgICIgSW5jcmVtZW50IGlmIGFuIG9wZW4sIGRlY3JlbWVudCBpZiBhICcpJzoKKyAgICAgIGxldCBjbnQgPSBjbnQgKyAobWF0Y2hbaW5kZXhdPT0iKCIgPyAxIDogLTEpICAiICcpJworICAgICAgIiBsZXQgY250ID0gc3RyaWR4KCcwKCcsIG1hdGNoW2luZGV4XSkgKyBjbnQKKyAgICAgIGxldCBtYXRjaCA9IHN0cnBhcnQobWF0Y2gsIGluZGV4KzEpCisgICAgZW5kd2hpbGUKKyAgICBsZXQgc3RhcnQgPSBzdGFydCAtIDIKKyAgICBsZXQgbGVuID0gbGVuIC0gc3RhcnQgLSBzdHJsZW4obWF0Y2gpCisgIGVuZGlmCisgIGlmIGE6MCA9PSAxCisgICAgcmV0dXJuIGxlbgorICBlbHNlaWYgYTowID09IDIKKyAgICByZXR1cm4gImxldCAiIC4gYToxIC4gIj0iIC4gc3RhcnQgLiAifCBsZXQgIiAuIGE6MiAuICI9IiAuIGxlbgorICBlbHNlCisgICAgcmV0dXJuIHN0cnBhcnQoYTpzdHJpbmcsIHN0YXJ0LCBsZW4pCisgIGVuZGlmCitlbmRmdW4KKworIiBDb3VudCB0aGUgbnVtYmVyIG9mIGRpc2pvaW50IGNvcGllcyBvZiBwYXR0ZXJuIGluIHN0cmluZy4KKyIgSWYgdGhlIHBhdHRlcm4gaXMgYSBsaXRlcmFsIHN0cmluZyBhbmQgY29udGFpbnMgbm8gJzAnIG9yICcxJyBjaGFyYWN0ZXJzCisiIHRoZW4gczpDb3VudChzdHJpbmcsIHBhdHRlcm4sICcwJywgJzEnKSBzaG91bGQgYmUgZmFzdGVyIHRoYW4KKyIgczpDb3VudChzdHJpbmcsIHBhdHRlcm4pLgorZnVuISBzOkNvdW50KHN0cmluZywgcGF0dGVybiwgLi4uKQorICBsZXQgcGF0ID0gZXNjYXBlKGE6cGF0dGVybiwgJ1xcJykKKyAgaWYgYTowID4gMQorICAgIGxldCBmb28gPSBzdWJzdGl0dXRlKGE6c3RyaW5nLCAnW14nLmE6cGF0dGVybi4nXScsICJhOjEiLCAiZyIpCisgICAgbGV0IGZvbyA9IHN1YnN0aXR1dGUoYTpzdHJpbmcsIHBhdCwgYToyLCAiZyIpCisgICAgbGV0IGZvbyA9IHN1YnN0aXR1dGUoZm9vLCAnW14nIC4gYToyIC4gJ10nLCAiIiwgImciKQorICAgIHJldHVybiBzdHJsZW4oZm9vKQorICBlbmRpZgorICBsZXQgcmVzdWx0ID0gMAorICBsZXQgZm9vID0gYTpzdHJpbmcKKyAgbGV0IGluZGV4ID0gbWF0Y2hlbmQoZm9vLCBwYXQpCisgIHdoaWxlIGluZGV4ICE9IC0xCisgICAgbGV0IHJlc3VsdCA9IHJlc3VsdCArIDEKKyAgICBsZXQgZm9vID0gc3RycGFydChmb28sIGluZGV4KQorICAgIGxldCBpbmRleCA9IG1hdGNoZW5kKGZvbywgcGF0KQorICBlbmR3aGlsZQorICByZXR1cm4gcmVzdWx0CitlbmRmdW4KKworIiBzOlJlc29sdmUoJ1woYVwpXChiXCknLCAnXChjXClcMlwxXDFcMicpIHNob3VsZCByZXR1cm4gdGFibGUud29yZCwgd2hlcmUKKyIgd29yZCA9ICdcKGNcKVwoYlwpXChhXClcM1wyJyBhbmQgdGFibGUgPSAnLTMyLS0tLS0tLScuICBUaGF0IGlzLCB0aGUgZmlyc3QKKyIgJ1wxJyBpbiB0YXJnZXQgaXMgcmVwbGFjZWQgYnkgJ1woYVwpJyBpbiB3b3JkLCB0YWJsZVsxXSA9IDMsIGFuZCB0aGlzCisiIGluZGljYXRlcyB0aGF0IGFsbCBvdGhlciBpbnN0YW5jZXMgb2YgJ1wxJyBpbiB0YXJnZXQgYXJlIHRvIGJlIHJlcGxhY2VkCisiIGJ5ICdcMycuICBUaGUgaGFyZCBwYXJ0IGlzIGRlYWxpbmcgd2l0aCBuZXN0aW5nLi4uCisiIE5vdGUgdGhhdCAiOiIgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZm9yIHNvdXJjZSBhbmQgdGFyZ2V0LAorIiB1bmxlc3MgaXQgaXMgcHJlY2VkZWQgYnkgIlwiLgorZnVuISBzOlJlc29sdmUoc291cmNlLCB0YXJnZXQsIG91dHB1dCkKKyAgbGV0IHdvcmQgPSBhOnRhcmdldAorICBsZXQgaSA9IG1hdGNoZW5kKHdvcmQsIHM6bm90c2xhc2ggLiAnXFxcZCcpIC0gMQorICBsZXQgdGFibGUgPSAiLS0tLS0tLS0tLSIKKyAgd2hpbGUgaSAhPSAtMiAiIFRoZXJlIGFyZSBiYWNrIHJlZmVyZW5jZXMgdG8gYmUgcmVwbGFjZWQuCisgICAgbGV0IGQgPSB3b3JkW2ldCisgICAgbGV0IGJhY2tyZWYgPSBzOlJlZihhOnNvdXJjZSwgZCkKKyAgICAiIFRoZSBpZGVhIGlzIHRvIHJlcGxhY2UgJ1xkJyB3aXRoIGJhY2tyZWYuICBCZWZvcmUgd2UgZG8gdGhpcywKKyAgICAiIHJlcGxhY2UgYW55IFwoXCkgZ3JvdXBzIGluIGJhY2tyZWYgd2l0aCA6MSwgOjIsIC4uLiBpZiB0aGV5CisgICAgIiBjb3JyZXNwb25kIHRvIHRoZSBmaXJzdCwgc2Vjb25kLCAuLi4gZ3JvdXAgYWxyZWFkeSBpbnNlcnRlZAorICAgICIgaW50byBiYWNrcmVmLiAgTGF0ZXIsIHJlcGxhY2UgOjEgd2l0aCBcMSBhbmQgc28gb24uICBUaGUgZ3JvdXAKKyAgICAiIG51bWJlciB3K2Igd2l0aGluIGJhY2tyZWYgY29ycmVzcG9uZHMgdG8gdGhlIGdyb3VwIG51bWJlcgorICAgICIgcyB3aXRoaW4gYTpzb3VyY2UuCisgICAgIiB3ID0gbnVtYmVyIG9mICdcKCcgaW4gd29yZCBiZWZvcmUgdGhlIGN1cnJlbnQgb25lCisgICAgbGV0IHcgPSBzOkNvdW50KAorICAgIFwgc3Vic3RpdHV0ZShzdHJwYXJ0KHdvcmQsIDAsIGktMSksICdcXFxcJywgJycsICdnJyksICdcKCcsICcxJykKKyAgICBsZXQgYiA9IDEgIiBudW1iZXIgb2YgdGhlIGN1cnJlbnQgJ1woJyBpbiBiYWNrcmVmCisgICAgbGV0IHMgPSBkICIgbnVtYmVyIG9mIHRoZSBjdXJyZW50ICdcKCcgaW4gYTpzb3VyY2UKKyAgICB3aGlsZSBiIDw9IHM6Q291bnQoc3Vic3RpdHV0ZShiYWNrcmVmLCAnXFxcXCcsICcnLCAnZycpLCAnXCgnLCAnMScpCisgICAgXCAmJiBzIDwgMTAKKyAgICAgIGlmIHRhYmxlW3NdID09ICItIgorCWlmIHcgKyBiIDwgMTAKKwkgICIgbGV0IHRhYmxlW3NdID0gdyArIGIKKwkgIGxldCB0YWJsZSA9IHN0cnBhcnQodGFibGUsIDAsIHMpIC4gKHcrYikgLiBzdHJwYXJ0KHRhYmxlLCBzKzEpCisJZW5kaWYKKwlsZXQgYiA9IGIgKyAxCisJbGV0IHMgPSBzICsgMQorICAgICAgZWxzZQorCWV4ZWN1dGUgczpSZWYoYmFja3JlZiwgYiwgInN0YXJ0IiwgImxlbiIpCisJbGV0IHJlZiA9IHN0cnBhcnQoYmFja3JlZiwgc3RhcnQsIGxlbikKKwlsZXQgYmFja3JlZiA9IHN0cnBhcnQoYmFja3JlZiwgMCwgc3RhcnQpIC4gIjoiLiB0YWJsZVtzXQorCVwgLiBzdHJwYXJ0KGJhY2tyZWYsIHN0YXJ0K2xlbikKKwlsZXQgcyA9IHMgKyBzOkNvdW50KHN1YnN0aXR1dGUocmVmLCAnXFxcXCcsICcnLCAnZycpLCAnXCgnLCAnMScpCisgICAgICBlbmRpZgorICAgIGVuZHdoaWxlCisgICAgbGV0IHdvcmQgPSBzdHJwYXJ0KHdvcmQsIDAsIGktMSkgLiBiYWNrcmVmIC4gc3RycGFydCh3b3JkLCBpKzEpCisgICAgbGV0IGkgPSBtYXRjaGVuZCh3b3JkLCBzOm5vdHNsYXNoIC4gJ1xcXGQnKSAtIDEKKyAgZW5kd2hpbGUKKyAgbGV0IHdvcmQgPSBzdWJzdGl0dXRlKHdvcmQsIHM6bm90c2xhc2ggLiAnXHpzOicsICdcXCcsICdnJykKKyAgaWYgYTpvdXRwdXQgPT0gInRhYmxlIgorICAgIHJldHVybiB0YWJsZQorICBlbHNlaWYgYTpvdXRwdXQgPT0gIndvcmQiCisgICAgcmV0dXJuIHdvcmQKKyAgZWxzZQorICAgIHJldHVybiB0YWJsZSAuIHdvcmQKKyAgZW5kaWYKK2VuZGZ1bgorCisiIEFzc3VtZSBhOmNvbW1hID0gIiwiLiAgVGhlbiB0aGUgZm9ybWF0IGZvciBhOnBhdHRlcm5zIGFuZCBhOjEgaXMKKyIgICBhOnBhdHRlcm5zID0gIjxwYXQxPiw8cGF0Mj4sLi4uIgorIiAgIGE6MSA9ICI8YWx0MT4sPGFsdDI+LC4uLiIKKyIgSWYgPHBhdG4+IGlzIHRoZSBmaXJzdCBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhOnN0cmluZyB0aGVuIHJldHVybiA8cGF0bj4KKyIgaWYgbm8gb3B0aW9uYWwgYXJndW1lbnRzIGFyZSBnaXZlbjsgcmV0dXJuIDxwYXRuPiw8YWx0bj4gaWYgYToxIGlzIGdpdmVuLgorZnVuISBzOkNob29zZShwYXR0ZXJucywgc3RyaW5nLCBjb21tYSwgYnJhbmNoLCBwcmVmaXgsIHN1ZmZpeCwgLi4uKQorICBsZXQgdGFpbCA9IChhOnBhdHRlcm5zID1+IGE6Y29tbWEuIiQiID8gYTpwYXR0ZXJucyA6IGE6cGF0dGVybnMgLiBhOmNvbW1hKQorICBsZXQgaSA9IG1hdGNoZW5kKHRhaWwsIHM6bm90c2xhc2ggLiBhOmNvbW1hKQorICBpZiBhOjAKKyAgICBsZXQgYWx0dGFpbCA9IChhOjEgPX4gYTpjb21tYS4iJCIgPyBhOjEgOiBhOjEgLiBhOmNvbW1hKQorICAgIGxldCBqID0gbWF0Y2hlbmQoYWx0dGFpbCwgczpub3RzbGFzaCAuIGE6Y29tbWEpCisgIGVuZGlmCisgIGxldCBjdXJyZW50ID0gc3RycGFydCh0YWlsLCAwLCBpLTEpCisgIGlmIGE6YnJhbmNoID09ICIiCisgICAgbGV0IGN1cnJwYXQgPSBjdXJyZW50CisgIGVsc2UKKyAgICBsZXQgY3VycnBhdCA9IHN1YnN0aXR1dGUoY3VycmVudCwgYTpicmFuY2gsICdcXHwnLCAnZycpCisgIGVuZGlmCisgIHdoaWxlIGE6c3RyaW5nICF+IGE6cHJlZml4IC4gY3VycnBhdCAuIGE6c3VmZml4CisgICAgbGV0IHRhaWwgPSBzdHJwYXJ0KHRhaWwsIGkpCisgICAgbGV0IGkgPSBtYXRjaGVuZCh0YWlsLCBzOm5vdHNsYXNoIC4gYTpjb21tYSkKKyAgICBpZiBpID09IC0xCisgICAgICByZXR1cm4gLTEKKyAgICBlbmRpZgorICAgIGxldCBjdXJyZW50ID0gc3RycGFydCh0YWlsLCAwLCBpLTEpCisgICAgaWYgYTpicmFuY2ggPT0gIiIKKyAgICAgIGxldCBjdXJycGF0ID0gY3VycmVudAorICAgIGVsc2UKKyAgICAgIGxldCBjdXJycGF0ID0gc3Vic3RpdHV0ZShjdXJyZW50LCBhOmJyYW5jaCwgJ1xcfCcsICdnJykKKyAgICBlbmRpZgorICAgIGlmIGE6MAorICAgICAgbGV0IGFsdHRhaWwgPSBzdHJwYXJ0KGFsdHRhaWwsIGopCisgICAgICBsZXQgaiA9IG1hdGNoZW5kKGFsdHRhaWwsIHM6bm90c2xhc2ggLiBhOmNvbW1hKQorICAgIGVuZGlmCisgIGVuZHdoaWxlCisgIGlmIGE6MAorICAgIGxldCBjdXJyZW50ID0gY3VycmVudCAuIGE6Y29tbWEgLiBzdHJwYXJ0KGFsdHRhaWwsIDAsIGotMSkKKyAgZW5kaWYKKyAgcmV0dXJuIGN1cnJlbnQKK2VuZGZ1bgorCisiIENhbGwgdGhpcyBmdW5jdGlvbiB0byB0dXJuIG9uIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gIEV2ZXJ5IHRpbWUgdGhlIG1haW4KKyIgc2NyaXB0IGlzIHJ1biwgYnVmZmVyIHZhcmlhYmxlcyB3aWxsIGJlIHNhdmVkLiAgVGhlc2UgY2FuIGJlIHVzZWQgZGlyZWN0bHkKKyIgb3Igdmlld2VkIHVzaW5nIHRoZSBtZW51IGl0ZW1zIGJlbG93LgoraWYgIWV4aXN0cygiOk1hdGNoRGVidWciKQorICBjb21tYW5kISAtbmFyZ3M9MCBNYXRjaERlYnVnIGNhbGwgczpNYXRjaF9kZWJ1ZygpCitlbmRpZgorCitmdW4hIHM6TWF0Y2hfZGVidWcoKQorICBsZXQgYjptYXRjaF9kZWJ1ZyA9IDEJIiBTYXZlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKyAgIiBwYXQgPSBhbGwgb2YgYjptYXRjaF93b3JkcyB3aXRoIGJhY2tyZWZzIHBhcnNlZAorICBhbWVudSAmTWF0Y2hpdC4mcGF0CTplY2hvIGI6bWF0Y2hfcGF0PENSPgorICAiIG1hdGNoID0gYml0IG9mIHRleHQgdGhhdCBpcyByZWNvZ25pemVkIGFzIGEgbWF0Y2gKKyAgYW1lbnUgJk1hdGNoaXQuJm1hdGNoCTplY2hvIGI6bWF0Y2hfbWF0Y2g8Q1I+CisgICIgY3VyY29sID0gY3Vyc29yIGNvbHVtbiBvZiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoaW5nIHRleHQKKyAgYW1lbnUgJk1hdGNoaXQuJmN1cmNvbAk6ZWNobyBiOm1hdGNoX2NvbDxDUj4KKyAgIiB3aG9sZUJSID0gbWF0Y2hpbmcgZ3JvdXAsIG9yaWdpbmFsIHZlcnNpb24KKyAgYW1lbnUgJk1hdGNoaXQud2gmb2xlQlIJOmVjaG8gYjptYXRjaF93aG9sZUJSPENSPgorICAiIGluaUJSID0gJ2lmJyBwaWVjZSwgb3JpZ2luYWwgdmVyc2lvbgorICBhbWVudSAmTWF0Y2hpdC5pbmkmQlIJOmVjaG8gYjptYXRjaF9pbmlCUjxDUj4KKyAgIiBpbmkgPSAnaWYnIHBpZWNlLCB3aXRoIGFsbCBiYWNrcmVmcyByZXNvbHZlZCBmcm9tIG1hdGNoCisgIGFtZW51ICZNYXRjaGl0LiZpbmkJOmVjaG8gYjptYXRjaF9pbmk8Q1I+CisgICIgdGFpbCA9ICdlbHNlXHxlbmRpZicgcGllY2UsIHdpdGggYWxsIGJhY2tyZWZzIHJlc29sdmVkIGZyb20gbWF0Y2gKKyAgYW1lbnUgJk1hdGNoaXQuJnRhaWwJOmVjaG8gYjptYXRjaF90YWlsPENSPgorICAiIGZpbiA9ICdlbmRpZicgcGllY2UsIHdpdGggYWxsIGJhY2tyZWZzIHJlc29sdmVkIGZyb20gbWF0Y2gKKyAgYW1lbnUgJk1hdGNoaXQuJndvcmQJOmVjaG8gYjptYXRjaF93b3JkPENSPgorICAiICdcJy5kIGluIGluaSByZWZlcnMgdG8gdGhlIHNhbWUgdGhpbmcgYXMgJ1wnLnRhYmxlW2RdIGluIHdvcmQuCisgIGFtZW51ICZNYXRjaGl0LnQmYWJsZQk6ZWNobyAnMDonIC4gYjptYXRjaF90YWJsZSAuICc6OSc8Q1I+CitlbmRmdW4KKworIiBKdW1wIHRvIHRoZSBuZWFyZXN0IHVubWF0Y2hlZCAiKCIgb3IgImlmIiBvciAiPHRhZz4iIGlmIGE6c3BmbGFnID09ICJiVyIKKyIgb3IgdGhlIG5lYXJlc3QgdW5tYXRjaGVkICI8L3RhZz4iIG9yICJlbmRpZiIgb3IgIikiIGlmIGE6c3BmbGFnID09ICJXIi4KKyIgUmV0dXJuIGEgIm1hcmsiIGZvciB0aGUgb3JpZ2luYWwgcG9zaXRpb24sIHNvIHRoYXQKKyIgICBsZXQgbSA9IE11bHRpTWF0Y2goImJXIiwgIm4iKSAuLi4gZXhlY3V0ZSBtCisiIHdpbGwgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBwb3NpdGlvbi4gIElmIHRoZXJlIGlzIGEgcHJvYmxlbSwgZG8gbm90CisiIG1vdmUgdGhlIGN1cnNvciBhbmQgcmV0dXJuICIiLCB1bmxlc3MgYSBjb3VudCBpcyBnaXZlbiwgaW4gd2hpY2ggY2FzZQorIiBnbyB1cCBvciBkb3duIGFzIG1hbnkgbGV2ZWxzIGFzIHBvc3NpYmxlIGFuZCBhZ2FpbiByZXR1cm4gIiIuCisiIFRPRE8gVGhpcyByZWxpZXMgb24gdGhlIHNhbWUgcGF0dGVybnMgYXMgJSBtYXRjaGluZy4gIEl0IG1pZ2h0IGJlIGEgZ29vZAorIiBpZGVhIHRvIGdpdmUgaXQgaXRzIG93biBtYXRjaGluZyBwYXR0ZXJucy4KK2Z1biEgczpNdWx0aU1hdGNoKHNwZmxhZywgbW9kZSkKKyAgaWYgIWV4aXN0cygiYjptYXRjaF93b3JkcyIpIHx8IGI6bWF0Y2hfd29yZHMgPT0gIiIKKyAgICByZXR1cm4gIiIKKyAgZW5kCisgIGxldCByZXN0b3JlX29wdGlvbnMgPSAoJmljID8gIiIgOiAibm8iKSAuICJpZ25vcmVjYXNlIgorICBpZiBleGlzdHMoImI6bWF0Y2hfaWdub3JlY2FzZSIpCisgICAgbGV0ICZpZ25vcmVjYXNlID0gYjptYXRjaF9pZ25vcmVjYXNlCisgIGVuZGlmCisgIGxldCBzdGFydGxpbmUgPSBsaW5lKCIuIikKKyAgbGV0IHN0YXJ0Y29sID0gY29sKCIuIikKKworICAiIEZpcnN0IHN0ZXA6ICBpZiBub3QgYWxyZWFkeSBkb25lLCBzZXQgdGhlIHNjcmlwdCB2YXJpYWJsZXMKKyAgIiAgIHM6ZG9fQlIJZmxhZyBmb3Igd2hldGhlciB0aGVyZSBhcmUgYmFja3JlZnMKKyAgIiAgIHM6cGF0CXBhcnNlZCB2ZXJzaW9uIG9mIGI6bWF0Y2hfd29yZHMKKyAgIiAgIHM6YWxsCXJlZ2V4cCBiYXNlZCBvbiBzOnBhdCBhbmQgdGhlIGRlZmF1bHQgZ3JvdXBzCisgICIgVGhpcyBwYXJ0IGlzIGNvcGllZCBhbmQgc2xpZ2h0bHkgbW9kaWZpZWQgZnJvbSBzOk1hdGNoX3dyYXBwZXIoKS4KKyAgbGV0IGRlZmF1bHQgPSBlc2NhcGUoJm1wcywgJ1skXi4qflxcLz9dJykgLiAoc3RybGVuKCZtcHMpID8gIiwiIDogIiIpIC4KKyAgICBcICdcL1wqOlwqXC8sI2lmXCUoZGVmXClcPTokZWxzZVw+OiNlbGlmXD46I2VuZGlmXD4nCisgICIgQWxsb3cgYjptYXRjaF93b3JkcyA9ICJHZXRWaW1NYXRjaFdvcmRzKCkiIC4KKyAgaWYgYjptYXRjaF93b3JkcyA9fiAiOiIKKyAgICBsZXQgbWF0Y2hfd29yZHMgPSBiOm1hdGNoX3dvcmRzCisgIGVsc2UKKyAgICBleGVjdXRlICJsZXQgbWF0Y2hfd29yZHMgPSIgYjptYXRjaF93b3JkcworICBlbmRpZgorICBpZiAobWF0Y2hfd29yZHMgIT0gczpsYXN0X3dvcmRzKSB8fCAoJm1wcyAhPSBzOmxhc3RfbXBzKSB8fAorICAgIFwgZXhpc3RzKCJiOm1hdGNoX2RlYnVnIikKKyAgICBsZXQgczpsYXN0X3dvcmRzID0gbWF0Y2hfd29yZHMKKyAgICBsZXQgczpsYXN0X21wcyA9ICZtcHMKKyAgICBpZiBtYXRjaF93b3JkcyAhfiBzOm5vdHNsYXNoIC4gJ1xcXGQnCisgICAgICBsZXQgczpkb19CUiA9IDAKKyAgICAgIGxldCBzOnBhdCA9IG1hdGNoX3dvcmRzCisgICAgZWxzZQorICAgICAgbGV0IHM6ZG9fQlIgPSAxCisgICAgICBsZXQgczpwYXQgPSBzOlBhcnNlV29yZHMobWF0Y2hfd29yZHMpCisgICAgZW5kaWYKKyAgICBsZXQgczphbGwgPSAnXCUoJyAuIHN1YnN0aXR1dGUoczpwYXQgLiAoc3RybGVuKHM6cGF0KT8iLCI6IiIpIC4gZGVmYXVsdCwKKyAgICAgIFwJJ1ssOl1cKycsJ1xcfCcsJ2cnKSAuICdcKScKKyAgICBpZiBleGlzdHMoImI6bWF0Y2hfZGVidWciKQorICAgICAgbGV0IGI6bWF0Y2hfcGF0ID0gczpwYXQKKyAgICBlbmRpZgorICBlbmRpZgorCisgICIgU2Vjb25kIHN0ZXA6ICBmaWd1cmUgb3V0IHRoZSBwYXR0ZXJucyBmb3Igc2VhcmNocGFpcigpCisgICIgYW5kIHNhdmUgdGhlIHNjcmVlbiwgY3Vyc29yIHBvc2l0aW9uLCBhbmQgJ2lnbm9yZWNhc2UnLgorICAiIC0gVE9ETzogIEEgbG90IG9mIHRoaXMgaXMgY29waWVkIGZyb20gczpNYXRjaF93cmFwcGVyKCkuCisgICIgLSBtYXliZSBldmVuIG1vcmUgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgc3BsaXQgb2ZmCisgICIgLSBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucyEKKyAgbGV0IGNkZWZhdWx0ID0gKHM6cGF0ID1+ICdbXixdJCcgPyAiLCIgOiAiIikgLiBkZWZhdWx0CisgIGxldCBvcGVuID0gIHN1YnN0aXR1dGUoczpwYXQgLiBjZGVmYXVsdCwgJzpbXixdKiwnLCAnXFwpLFxcKCcsICdnJykKKyAgbGV0IG9wZW4gPSAgJ1woJyAuIHN1YnN0aXR1dGUob3BlbiwgJzpbXixdKiQnLCAnXFwpJywgJycpCisgIGxldCBjbG9zZSA9IHN1YnN0aXR1dGUoczpwYXQgLiBjZGVmYXVsdCwgJyxbXixdKjonLCAnXFwpLFxcKCcsICdnJykKKyAgbGV0IGNsb3NlID0gc3Vic3RpdHV0ZShjbG9zZSwgJ1teLF0qOicsICdcXCgnLCAnJykgLiAnXCknCisgIGlmIGV4aXN0cygiYjptYXRjaF9za2lwIikKKyAgICBsZXQgc2tpcCA9IGI6bWF0Y2hfc2tpcAorICBlbHNlaWYgZXhpc3RzKCJiOm1hdGNoX2NvbW1lbnQiKSAiIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCB0ZXN0aW5nIQorICAgIGxldCBza2lwID0gInI6IiAuIGI6bWF0Y2hfY29tbWVudAorICBlbHNlCisgICAgbGV0IHNraXAgPSAnczpjb21tZW50XHxzdHJpbmcnCisgIGVuZGlmCisgIGxldCBza2lwID0gczpQYXJzZVNraXAoc2tpcCkKKyAgIiBsZXQgcmVzdG9yZV9jdXJzb3IgPSBsaW5lKCIuIikgLiAiRyIgLiB2aXJ0Y29sKCIuIikgLiAifCIKKyAgIiBub3JtYWwhIEgKKyAgIiBsZXQgcmVzdG9yZV9jdXJzb3IgPSAibm9ybWFsISIgLiBsaW5lKCIuIikgLiAiR3p0IiAuIHJlc3RvcmVfY3Vyc29yCisgIGxldCByZXN0b3JlX2N1cnNvciA9IHZpcnRjb2woIi4iKSAuICJ8IgorICBub3JtYWwhIGcwCisgIGxldCByZXN0b3JlX2N1cnNvciA9IGxpbmUoIi4iKSAuICJHIiAuICB2aXJ0Y29sKCIuIikgLiAifHpzIiAuIHJlc3RvcmVfY3Vyc29yCisgIG5vcm1hbCEgSAorICBsZXQgcmVzdG9yZV9jdXJzb3IgPSAibm9ybWFsISIgLiBsaW5lKCIuIikgLiAiR3p0IiAuIHJlc3RvcmVfY3Vyc29yCisgIGV4ZWN1dGUgcmVzdG9yZV9jdXJzb3IKKworICAiIFRoaXJkIHN0ZXA6IGNhbGwgc2VhcmNocGFpcigpLgorICAiIFJlcGxhY2UgJ1woJy0tYnV0IG5vdCAnXFwoJy0td2l0aCAnXCUoJyBhbmQgJywnIHdpdGggJ1x8Jy4KKyAgbGV0IG9wZW5wYXQgPSAgc3Vic3RpdHV0ZShvcGVuLCAnXChcXFxAPCFcKFxcXFxcKSpcKVxAPD1cXCgnLCAnXFwlKCcsICdnJykKKyAgbGV0IG9wZW5wYXQgPSBzdWJzdGl0dXRlKG9wZW5wYXQsICcsJywgJ1xcfCcsICdnJykKKyAgbGV0IGNsb3NlcGF0ID0gc3Vic3RpdHV0ZShjbG9zZSwgJ1woXFxcQDwhXChcXFxcXCkqXClcQDw9XFwoJywgJ1xcJSgnLCAnZycpCisgIGxldCBjbG9zZXBhdCA9IHN1YnN0aXR1dGUoY2xvc2VwYXQsICcsJywgJ1xcfCcsICdnJykKKyAgaWYgc2tpcCA9fiAnc3luSUQnICYmICEoaGFzKCJzeW50YXgiKSAmJiBleGlzdHMoImc6c3ludGF4X29uIikpCisgICAgbGV0IHNraXAgPSAnMCcKKyAgZWxzZQorICAgIGV4ZWN1dGUgImlmICIgLiBza2lwIC4gInwgbGV0IHNraXAgPSAnMCcgfCBlbmRpZiIKKyAgZW5kaWYKKyAgbWFyayAnCisgIGxldCBsZXZlbCA9IHY6Y291bnQxCisgIHdoaWxlIGxldmVsCisgICAgaWYgc2VhcmNocGFpcihvcGVucGF0LCAnJywgY2xvc2VwYXQsIGE6c3BmbGFnLCBza2lwKSA8IDEKKyAgICAgIGNhbGwgczpDbGVhblVwKHJlc3RvcmVfb3B0aW9ucywgYTptb2RlLCBzdGFydGxpbmUsIHN0YXJ0Y29sKQorICAgICAgcmV0dXJuICIiCisgICAgZW5kaWYKKyAgICBsZXQgbGV2ZWwgPSBsZXZlbCAtIDEKKyAgZW5kd2hpbGUKKworICAiIFJlc3RvcmUgb3B0aW9ucyBhbmQgcmV0dXJuIGEgc3RyaW5nIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9uLgorICBjYWxsIHM6Q2xlYW5VcChyZXN0b3JlX29wdGlvbnMsIGE6bW9kZSwgc3RhcnRsaW5lLCBzdGFydGNvbCkKKyAgcmV0dXJuIHJlc3RvcmVfY3Vyc29yCitlbmRmdW4KKworIiBTZWFyY2ggYmFja3dhcmRzIGZvciAiaWYiIG9yICJ3aGlsZSIgb3IgIjx0YWc+IiBvciAuLi4KKyIgYW5kIHJldHVybiAiZW5kaWYiIG9yICJlbmR3aGlsZSIgb3IgIjwvdGFnPiIgb3IgLi4uIC4KKyIgRm9yIG5vdywgdGhpcyB1c2VzIGI6bWF0Y2hfd29yZHMgYW5kIHRoZSBzYW1lIHNjcmlwdCB2YXJpYWJsZXMKKyIgYXMgczpNYXRjaF93cmFwcGVyKCkgLiAgTGF0ZXIsIGl0IG1heSBnZXQgaXRzIG93biBwYXR0ZXJucywKKyIgZWl0aGVyIGZyb20gYSBidWZmZXIgdmFyaWFibGUgb3IgcGFzc2VkIGFzIGFyZ3VtZW50cy4KKyIgZnVuISBzOkF1dG9jb21wbGV0ZSgpCisiICAgZWNobyAiYXV0b2NvbXBsZXRlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgOi0oIgorIiAgIGlmICFleGlzdHMoImI6bWF0Y2hfd29yZHMiKSB8fCBiOm1hdGNoX3dvcmRzID09ICIiCisiICAgICByZXR1cm4gIiIKKyIgICBlbmQKKyIgICBsZXQgc3RhcnRwb3MgPSBzOk11bHRpTWF0Y2goImJXIikKKyIKKyIgICBpZiBzdGFydHBvcyA9PSAiIgorIiAgICAgcmV0dXJuICIiCisiICAgZW5kaWYKKyIgICAiIC0gVE9ETzogIGZpZ3VyZSBvdXQgd2hldGhlciAnaWYnIG9yICc8dGFnPicgbWF0Y2hlZCwgYW5kIGNvbnN0cnVjdAorIiAgICIgLSB0aGUgYXBwcm9wcmlhdGUgY2xvc2luZy4KKyIgICBsZXQgbWF0Y2hsaW5lID0gZ2V0bGluZSgiLiIpCisiICAgbGV0IGN1cmNvbCA9IGNvbCgiLiIpIC0gMQorIiAgICIgLSBUT0RPOiAgQ2hhbmdlIHRoZSBzOmFsbCBhcmd1bWVudCBpZiB0aGVyZSBpcyBhIG5ldyBzZXQgb2YgbWF0Y2ggcGF0cy4KKyIgICBsZXQgcmVnZXhwID0gczpXaG9sZW1hdGNoKG1hdGNobGluZSwgczphbGwsIGN1cmNvbCkKKyIgICBsZXQgc3VmID0gc3RybGVuKG1hdGNobGluZSkgLSBtYXRjaGVuZChtYXRjaGxpbmUsIHJlZ2V4cCkKKyIgICBsZXQgcHJlZml4ID0gKGN1cmNvbCA/ICdeLlx7JyAgLiBjdXJjb2wgLiAnfVwlKCcgOiAnXlwlKCcpCisiICAgbGV0IHN1ZmZpeCA9IChzdWYgPyAnXCkuXHsnIC4gc3VmIC4gJ30kJyAgOiAnXCkkJykKKyIgICAiIFJlY29uc3RydWN0IHRoZSB2ZXJzaW9uIHdpdGggdW5yZXNvbHZlZCBiYWNrcmVmcy4KKyIgICBsZXQgcGF0QlIgPSBzdWJzdGl0dXRlKGI6bWF0Y2hfd29yZHMuJywnLCAnWyw6XSosWyw6XSonLCAnLCcsICdnJykKKyIgICBsZXQgcGF0QlIgPSBzdWJzdGl0dXRlKHBhdEJSLCAnOlx7Mix9JywgJzonLCAiZyIpCisiICAgIiBOb3csIHNldCBncm91cCBhbmQgZ3JvdXBCUiB0byB0aGUgbWF0Y2hpbmcgZ3JvdXA6ICdpZjplbmRpZicgb3IKKyIgICAiICd3aGlsZTplbmR3aGlsZScgb3Igd2hhdGV2ZXIuCisiICAgbGV0IGdyb3VwID0gczpDaG9vc2UoczpwYXQsIG1hdGNobGluZSwgIiwiLCAiOiIsIHByZWZpeCwgc3VmZml4LCBwYXRCUikKKyIgICBsZXQgaSA9IG1hdGNoZW5kKGdyb3VwLCBzOm5vdHNsYXNoIC4gIiwiKQorIiAgIGxldCBncm91cEJSID0gc3RycGFydChncm91cCwgaSkKKyIgICBsZXQgZ3JvdXAgPSBzdHJwYXJ0KGdyb3VwLCAwLCBpLTEpCisiICAgIiBOb3csIG1hdGNobGluZSA9fiBwcmVmaXggLiBzdWJzdGl0dXRlKGdyb3VwLCc6JywnXHwnLCdnJykgLiBzdWZmaXgKKyIgICBpZiBzOmRvX0JSCisiICAgICBsZXQgZ3JvdXAgPSBzOkluc2VydFJlZnMoZ3JvdXBCUiwgcHJlZml4LCBncm91cCwgc3VmZml4LCBtYXRjaGxpbmUpCisiICAgZW5kaWYKKyIgIiBsZXQgZzpncm91cCA9IGdyb3VwCisiCisiICAgIiAtIFRPRE86ICBDb25zdHJ1Y3QgdGhlIGNsb3NpbmcgZnJvbSBncm91cC4KKyIgICBsZXQgZmFrZSA9ICJlbmQiIC4gZXhwYW5kKCI8Y3dvcmQ+IikKKyIgICBleGVjdXRlIHN0YXJ0cG9zCisiICAgcmV0dXJuIGZha2UKKyIgZW5kZnVuCisKKyIgQ2xvc2UgYWxsIG9wZW4gc3RydWN0dXJlcy4gICJHZXQgdGhlIGhlY2sgb3V0IG9mIGhlcmUhIgorIiBmdW4hIHM6R3RoaG9oKCkKKyIgICBsZXQgY2xvc2UgPSBzOkF1dG9jb21wbGV0ZSgpCisiICAgd2hpbGUgc3RybGVuKGNsb3NlKQorIiAgICAgcHV0PWNsb3NlCisiICAgICBsZXQgY2xvc2UgPSBzOkF1dG9jb21wbGV0ZSgpCisiICAgZW5kd2hpbGUKKyIgZW5kZnVuCisKKyIgUGFyc2Ugc3BlY2lhbCBzdHJpbmdzIGFzIHR5cGljYWwgc2tpcCBhcmd1bWVudHMgZm9yIHNlYXJjaHBhaXIoKToKKyIgICBzOmZvbyBiZWNvbWVzIChjdXJyZW50IHN5bnRheCBpdGVtKSA9fiBmb28KKyIgICBTOmZvbyBiZWNvbWVzIChjdXJyZW50IHN5bnRheCBpdGVtKSAhfiBmb28KKyIgICByOmZvbyBiZWNvbWVzIChsaW5lIGJlZm9yZSBjdXJzb3IpID1+IGZvbworIiAgIFI6Zm9vIGJlY29tZXMgKGxpbmUgYmVmb3JlIGN1cnNvcikgIX4gZm9vCitmdW4hIHM6UGFyc2VTa2lwKHN0cikKKyAgbGV0IHNraXAgPSBhOnN0cgorICBpZiBza2lwWzFdID09ICI6IgorICAgIGlmIHNraXBbMF0gPT0gInMiCisgICAgICBsZXQgc2tpcCA9ICJzeW5JRGF0dHIoc3luSUQobGluZSgnLicpLGNvbCgnLicpLDEpLCduYW1lJykgPX4/ICciIC4KKwlcIHN0cnBhcnQoc2tpcCwyKSAuICInIgorICAgIGVsc2VpZiBza2lwWzBdID09ICJTIgorICAgICAgbGV0IHNraXAgPSAic3luSURhdHRyKHN5bklEKGxpbmUoJy4nKSxjb2woJy4nKSwxKSwnbmFtZScpICF+PyAnIiAuCisJXCBzdHJwYXJ0KHNraXAsMikgLiAiJyIKKyAgICBlbHNlaWYgc2tpcFswXSA9PSAiciIKKyAgICAgIGxldCBza2lwID0gInN0cnBhcnQoZ2V0bGluZSgnLicpLDAsY29sKCcuJykpPX4nIiAuIHN0cnBhcnQoc2tpcCwyKS4gIiciCisgICAgZWxzZWlmIHNraXBbMF0gPT0gIlIiCisgICAgICBsZXQgc2tpcCA9ICJzdHJwYXJ0KGdldGxpbmUoJy4nKSwwLGNvbCgnLicpKSF+JyIgLiBzdHJwYXJ0KHNraXAsMikuICInIgorICAgIGVuZGlmCisgIGVuZGlmCisgIHJldHVybiBza2lwCitlbmRmdW4KKworbGV0ICZjcG8gPSBzOnNhdmVfY3BvCisKKyIgdmltOnN0cz0yOnN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy9tYXplLmluZm8gYi9ydW50aW1lL21hY3Jvcy9tYXplLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFkMjdkYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWFjcm9zL21hemUuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy9tYXplL01ha2VmaWxlIGIvcnVudGltZS9tYWNyb3MvbWF6ZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzRlMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvbWF6ZS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMgSXQncyBzaW1wbGUuLi4KKworbWF6ZTogbWF6ZWFuc2kuYworCWNjIC1vIG1hemUgbWF6ZWFuc2kuYworCittYXplY2xlYW46IG1hemVjbGVhbi5jCisJY2MgLW8gbWF6ZWNsZWFuIG1hemVjbGVhbi5jCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy9tYXplL1JFQURNRS50eHQgYi9ydW50aW1lL21hY3Jvcy9tYXplL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4ZThlZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWFjcm9zL21hemUvUkVBRE1FLnR4dApAQCAtMCwwICsxLDQ5IEBACitUbyBydW4gdGhlIG1hemUgbWFjcm9zIHdpdGggVmltOgorCisJdmltIC11IG1hemVfbWFjIG1hemVfNS43OAorCXByZXNzICJnIgorCitUaGUgIi11IG1hemUubWFjIiBsb2FkcyB0aGUgbWF6ZSBtYWNyb3MgYW5kIHNraXBzIGxvYWRpbmcgeW91ciAudmltcmMsIHdoaWNoCittYXkgY29udGFpbiBzZXR0aW5ncyBhbmQgbWFwcGluZ3MgdGhhdCBnZXQgaW4gdGhlIHdheS4KKworCitUaGUgb3JpZ2luYWwgUkVBRE1FOgorCitUbyBwcm92ZSB0aGF0IHlvdSBjYW4gZG8gYW55dGhpbmcgaW4gdmksIEkgd3JvdGUgYSBjb3VwbGUgb2YgbWFjcm9zIHRoYXQKK2FsbG93cyB2aSB0byBzb2x2ZSBtYXplcy4gSXQgd2lsbCBzb2x2ZSBhbnkgbWF6ZSBwcm9kdWNlZCBieSBtYXplLmMKK3RoYXQgd2FzIHBvc3RlZCB0byB0aGUgbmV0IHJlY2VudGx5LgorCitKdXN0IGZvbGxvdyB0aGlzIHJlY2lwZSBhbmQgU0VFIEZPUiBZT1VSU0VMRi4KKwkxLiBydW4gdXVkZWNvZGUgb24gdGhlIGZpbGUgIm1hemUudmkubWFjcm9zLnV1IiB0bworCQlwcm9kdWNlIHRoZSBmaWxlICJtYXplLnZpLm1hY3JvcyIKKwkoSWYgeW91IGNhbid0IHdhaXQgdG8gc2VlIHRoZSBhY3Rpb24sIGp1bXAgdG8gc3RlcCA0KQorCTIuIGNvbXBpbGUgbWF6ZS5jIHdpdGggImNjIC1vIG1hemUgbWF6ZS5jIgorCTMuIHJ1biBtYXplID4gbWF6ZS5vdXQgYW5kIGlucHV0IGEgc21hbGwgbnVtYmVyIChmb3IgZXhhbXBsZSAxMCBpZgorCQl5b3UgYXJlIG9uIGEgZmFzdCBtYWNoaW5lLCAzLTUgaWYgc2xvdykgd2hpY2gKKwkJaXMgdGhlIHNpemUgb2YgdGhlIG1hemUgdG8gcHJvZHVjZQorCTQuIGVkaXQgdGhlIG1hemUgKHZpIG1hemUub3V0KQorCTUuIGluY2x1ZGUgdGhlIG1hY3JvcyB3aXRoIHRoZSB2aSBjb21tYW5kOgorCQk6c28gbWF6ZS52aS5tYWNyb3MKKwk2LiB0eXBlIHRoZSBsZXR0ZXIgImciIChmb3IgImdvIikgYW5kIHdhdGNoIHZpIHNvbHZlIHRoZSBtYXplCisJNy4gd2hlbiB2aSBzb2x2ZXMgdGhlIG1hemUsIHlvdSB3aWxsIHNlZSB3aHkgaXQgbGllcworCTguIG5vdyBsb29rIGF0IG1hemUudmkubWFjcm9zIGFuZCBhbGwgd2lsbCBiZSByZXZlYWxlZAorCitUZXN0ZWQgb24gYSBzcGFyYywgYSBzdW4gYW5kIGEgcHlyYW1pZCAoYWx0aG91Z2ggbWF6ZS5jIHdpbGwgbm90IGNvbXBpbGUKK29uIHRoZSBweXJhbWlkKS4KKworQW55b25lIHdobyBjYW4ndCBnZXQgdGhlIG1hemUuYyBmaWxlIHRvIGNvbXBpbGUsIGdldCBhIG5ldyBjb21waWxlciwKK3RyeSBtYXplLmFuc2kuYyB3aGljaCB3YXMgYWxzbyBwb3N0ZWQgdG8gdGhlIG5ldC4KK0lmIHlvdSBjYW4gZ2V0IGl0IHRvIGNvbXBpbGUgYnV0IHRoZSBtYXplIGNvbWVzIG91dCBsb29raW5nIGxpa2UgYSBmZW5jZQorYW5kIG5vdCBhIG1hemUgYW5kIHlvdSBhcmUgdXNpbmcgU3lzViBvciBET1MgcmVwbGFjZSB0aGUgIjI3IiBvbiB0aGUKK2xhc3QgbGluZSBvZiBtYXplLmMgYnkgIjExIgorVGhhbmtzIHRvIEpvaG4gVHJvbXAgKHRyb21wQHBpcmluZy5jd2kubmwpIGZvciBtYXplLmMuCitUaGFua3MgdG8gYW50b255Y0BubnRwLXNlcnZlci5jYWx0ZWNoLmVkdSAoQmlsbCBULiBDYXQpIGZvciBtYXplLmFuc2kuYy4KKworQW55IGRvbmF0aW9ucyBzaG91bGQgYmUgaW4gdW5tYXJrZWQgc21hbGwgZGVub21pbmF0aW9uIGJpbGxzIDpeKT0uCisKKwkJICAgQUNTbmV0OiAgZ3JlZ21Ab3RjLm90Y2Eub3ouYXUKK0dyZWcgTWNGYXJsYW5lCSAgICAgVVVDUDogIHt1dW5ldCxtY3ZheH0hb3RjLm90Y2Eub3ouYXUhZ3JlZ20KK3x8fHwgT1RDIHx8CSAgICBTbmFpbDogIE9UQyBSJkQgR1BPIEJveCA3MDAwLCBTeWRuZXkgMjAwMSwgQXVzdHJhbGlhCisJCSAgICBQaG9uZTogICs2MSAyIDI4NyAzMTM5ICAgIEZheDogKzYxIDIgMjg3IDMyOTkKKworCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy9tYXplL1JFQURNRS50eHQuaW5mbyBiL3J1bnRpbWUvbWFjcm9zL21hemUvUkVBRE1FLnR4dC5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2M2RkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9tYXplL1JFQURNRS50eHQuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy9tYXplL21haW4uYWFwIGIvcnVudGltZS9tYWNyb3MvbWF6ZS9tYWluLmFhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTlhZjIxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvbWF6ZS9tYWluLmFhcApAQCAtMCwwICsxLDQgQEAKKyMgQWFwIHJlY2lwZSB0byBidWlsZCB0aGUgbWF6ZSBwcm9ncmFtCis6cHJvZ3JhbSBtYXplIDogbWF6ZWFuc2kuYworCis6cHJvZ3JhbSBtYXplY2xlYW4gOiBtYXplY2xlYW4uYwpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplLmMgYi9ydW50aW1lL21hY3Jvcy9tYXplL21hemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTE3NDUzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplLmMKQEAgLTAsMCArMSw3IEBACitjaGFyKk0sQSxaLEU9NDAsSls0MF0sVFs0MF07bWFpbihDKXtmb3IoKko9QT1zY2FuZihNPSIlZCIsJkMpOworLS0gICAgICAgICAgICBFOyAgICAgICAgICAgICBKWyAgICAgICAgICAgICAgRV0gICAgICAgICAgICAgPVQKK1tFICAgXT0gIEUpICAgcHJpbnRmKCIuXyIpOyAgZm9yKDsoQS09Wj0hWikgIHx8ICAocHJpbnRmKCJcbnwiCispICAgICwgICBBICAgID0gICAgICAgICAgICAgIDM5ICAgICAgICAgICAgICAsQyAgICAgICAgICAgICAtLQorKSAgICA7ICAgWiAgICB8fCAgICBwcmludGYgICAoTSAgICkpTVtaXT1aW0EtKEUgICA9QVtKLVpdKSYmIUMKKyYgICAgQSAgID09ICAgICAgICAgICAgIFRbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFdCit8Njw8Mjc8cmFuZCgpfHwhQyYhWj9KW1RbRV09VFtBXV09RSxKW1RbQV09QS1aXT1BLCJfLiI6IiB8Il07fQpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplXzUuNzggYi9ydW50aW1lL21hY3Jvcy9tYXplL21hemVfNS43OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmUzZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplXzUuNzgKQEAgLTAsMCArMSwxNiBAQAorLl8uXy5fLl8uXy5fLl8uXy5fLl8uXy5fLl8uXy5fLl8uXy5fLl8uXy5fLl8uXy5fLl8uXy5fLl8uXy5fLl8uXy5fLl8uXy5fLl8uXworfCAuX3wgLiAuIC5ffCB8IHxfLl8uXy4gLiAuX3xfLl8uXy5fLl8uIC5ffF8uIC5ffF8uXy4gLl98IC4gLl98Xy4gfCAuIC5fLl8uIHwKK3wgLl98X3wgfF8uIHwgfCB8IHwgLl8uX3xfLl98Xy5fLiAuIHxfLiB8IHwgfCAuXy5ffCB8Xy5fLl98IHwgLl8uIC5ffCAuIC4gfF98Cit8Xy5fLl8uXy4gfCAuX3xfLiAuXy5fLl8uIHwgfCAuXy4gfF8uXy4gLiB8IC5fLl98IHxfLiB8IC5fLl8uXy4gfF8uIHwgfF98X3wgfAorfCB8IC4gfF8uX3wgLiAuXy5fLl98IC5fLl8uIC5fLl98IHwgfCB8X3wgLiB8IHxfLiAuIC5ffF98IC5fLl8uIHxfLl98X3wgLiB8IHwKK3xfLl98Xy5fLl8uX3xfLl8uXy5ffF98Xy5fLl8uX3xfLl98Xy5fLl8uX3xfLl8uXy5ffF8uXy5fLl98Xy5fLl8uXy5fLl8uX3xfLl98CisKK1NlZSBWaW0gc29sdmUgYSBtYXplIQorCisgICB0eXBlICI6c28gbWF6ZV9tYWM8UkVUVVJOPiIgdG8gbG9hZCB0aGUgbWFjcm9zCisKKyAgIHR5cGUgImciIHRvIHN0YXJ0CisKK3RvIGludGVycnVwdCB0eXBlICI8Q1RSTC1DPiIKKyAgICAgdG8gcXVpdCB0eXBlICI6cSE8UkVUVVJOPiIKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplXzUuNzguaW5mbyBiL3J1bnRpbWUvbWFjcm9zL21hemUvbWF6ZV81Ljc4LmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2NWNlZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWFjcm9zL21hemUvbWF6ZV81Ljc4LmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplX21hYyBiL3J1bnRpbWUvbWFjcm9zL21hemUvbWF6ZV9tYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxYWVlYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWFjcm9zL21hemUvbWF6ZV9tYWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplYW5zaS5jIGIvcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplYW5zaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTVlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9tYXplL21hemVhbnNpLmMKQEAgLTAsMCArMSw3IEBACitjaGFyKk0sQSxaLEU9NDAsSls4MF0sVFszXTttYWluKEMpe2ZvcihNPUorRSwqSj1BPXNjYW5mKCIlZCIsJgorQykgICAgICAgICAgICA7LS0gICAgICAgICAgICBFO0ogICAgICAgICAgICAgW0UgICAgICAgICAgICBdPU0KK1tFICAgXT0gIEUpICAgcHJpbnRmKCIuXyIpOyAgZm9yKDsoQS09Wj0hWikgIHx8ICAocHJpbnRmKCJcbnwiCispICAgICwgICBBICAgID0gICAgICAgICAgICAgIDM5ICAgICAgICAgICAgICAsQyAgICAgICAgICAgICAtLQorKSAgICA7ICAgWiAgICB8fCAgICBwcmludGYgICAoVCAgICkpVFtaXT1aW0EtKEUgICA9QVtKLVpdKSYmIUMKKyYgICAgQSAgID09ICAgICAgICAgICAgIE1bICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFdCit8Njw8Mjc8cmFuZCgpfHwhQyYhWj9KW01bRV09TVtBXV09RSxKW01bQV09QS1aXT1BLCJfLiI6IiB8Il07fQpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplY2xlYW4uYyBiL3J1bnRpbWUvbWFjcm9zL21hemUvbWF6ZWNsZWFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkY2ViZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWFjcm9zL21hemUvbWF6ZWNsZWFuLmMKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENsZWFuZWQtdXAgdmVyc2lvbiBvZiB0aGUgbWF6ZSBwcm9ncmFtLgorICogRG9lc24ndCBsb29rIGFzIG5pY2UsIGJ1dCBzaG91bGQgd29yayB3aXRoIGFsbCBDIGNvbXBpbGVycy4KKyAqIFNhc2NoYSBXaWxkZSwgT2N0b2JlciAyMDAzCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitjaGFyICpNLCBBLCBaLCBFID0gNDAsIGxpbmVbODBdLCBUWzNdOworaW50CittYWluIChDKQoreworICBmb3IgKE0gPSBsaW5lICsgRSwgKmxpbmUgPSBBID0gc2NhbmYgKCIlZCIsICZDKTsgLS1FOyBsaW5lW0VdID0gTVtFXSA9IEUpCisgICAgcHJpbnRmICgiLl8iKTsKKyAgZm9yICg7IChBIC09IFogPSAhWikgfHwgKHByaW50ZiAoIlxufCIpLCBBID0gMzksIEMtLSk7IFogfHwgcHJpbnRmIChUKSkKKyAgICBUW1pdID0gWltBIC0gKEUgPSBBW2xpbmUgLSBaXSkgJiYgIUMKKwkgICAgICYgQSA9PSBNW0FdCisJICAgICB8IFJBTkRfTUFYLzMgPCByYW5kICgpCisJICAgICB8fCAhQyAmICFaID8gbGluZVtNW0VdID0gTVtBXV0gPSBFLCBsaW5lW01bQV0gPSBBIC0gWl0gPQorCSAgICAgQSwgIl8uIiA6ICIgfCJdOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbWFjcm9zL21hemUvcG9zdGVyIGIvcnVudGltZS9tYWNyb3MvbWF6ZS9wb3N0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExNGY1OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWFjcm9zL21hemUvcG9zdGVyCkBAIC0wLDAgKzEsMzcgQEAKK0FydGljbGUgMjg0NiBvZiBhbHQuc291cmNlczoKK1BhdGg6IG9jZS1yZDEhaHA0bmwhbWNzdW4hdXVuZXQhbXVubmFyaS5vei5hdSFtZXRybyFvdGMhZ3JlZ20KK0Zyb206IGdyZWdtQG90Yy5vdGNhLm96LmF1IChHcmVnIE1jRmFybGFuZSkKK05ld3Nncm91cHM6IGFsdC5zb3VyY2VzCitTdWJqZWN0OiBWSSBTT0xWRVMgTUFaRSAoY29tbWVudGVkIG1hY3JvcykKK01lc3NhZ2UtSUQ6IDwyMjg5QG90Yy5vdGNhLm96PgorRGF0ZTogMTAgRmViIDkxIDIzOjMxOjAyIEdNVAorU2VuZGVyOiBuZXdzQG90Yy5vdGNhLm96CitSZXBseS1UbzogZ3JlZ21Ab3RjLm90Y2Eub3ouYXUgKEdyZWcgTWNGYXJsYW5lKQorT3JnYW5pemF0aW9uOiBPVEMgRGV2ZWxvcG1lbnQgVW5pdCwgQXVzdHJhbGlhCitMaW5lczogNDY0CisKK1N1Ym1pdHRlZC1ieTogZ3JlZ21Ab3RjLm90Y2Eub3ouYXUKK0FyY2hpdmUtbmFtZTogbWF6ZV9zb2x2aW5nX3ZpX21hY3JvcworCitBIHJlYWwgd29ya2luZyBtb2RlbC4gU2VlIGl0IHdhbGsgdGhlIG1hemUgaW4gZnJvbnQgb2YgeW91ciB2ZXJ5IG93biBleWVzLgorCitUbyBwcm92ZSB0aGF0IHlvdSBjYW4gZG8gYW55dGhpbmcgaW4gdmksIEkgd3JvdGUgYSBjb3VwbGUgb2YgbWFjcm9zIHRoYXQKK2FsbG93cyB2aSB0byBzb2x2ZSBtYXplcy4gSXQgd2lsbCBzb2x2ZSBhbnkgbWF6ZSBwcm9kdWNlZCBieSBtYXplLmMKK3RoYXQgd2FzIHBvc3RlZCB0byB0aGUgYWx0LnNvdXJjZXMgbGFzdCBtb250aC4gKE1hemUuYyBpcyBhbHNvIGluY2x1ZGVkCitpbiB0aGlzIHBvc3RpbmcgYXMgd2VsbCBhcyBhbiBleGFtcGxlIG9mIGl0cyBvdXRwdXQuKQorCitUaGUgdW5jb21tZW50ZWQgdmVyc2lvbiBvZiB0aGUgbWFjcm9zIHdhcyBzZW50IHRvIGFsdC5zb3VyY2VzIGxhc3QgbW9udGguCitIb3dldmVyLCBzbyBtYW55IHBlb3BsZSBtYWlsZWQgbWUgcmVxdWVzdGluZyB0aGUgY29tbWVudGVkIHZlcnNpb24gb2YgdGhlCittYWNyb3MgdGhhdCBJIGRlY2lkZWQgdG8gcG9zdCBpdC4gSSBoYXZlIG1hZGUgc29tZSBtb2RpZmljYXRpb25zIHRvIHRoZQorb3JpZ2luYWwgbWFjcm9zIHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gZm9sbG93IGFuZCBhbHNvIGFmdGVyIEkgbGVhcm50Cit0aGF0IHlvdSBjYW4gZXNjYXBlIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgJ3wnIGluIG1hY3JvcyBieSB1c2luZyAnXlZ8Jy4KKworU2F2ZSB0aGlzIGFydGljbGUgYW5kIHVuc2hhciBpdC4gVGhlbiByZWFkIG1hemUuUkVBRE1FLgorCitBZnRlciBzdHVkeWluZyB0aGVzZSBtYWNyb3MsIGFueW9uZSB3aG8gY2Fubm90IHdyaXRlIGFuIGVtYWNzIGVtdWxhdG9yCitpbiB2aSBtYWNyb3Mgc2hvdWxkIGp1c3QgY3VybCB1cCBhbmQgOnEhLgorCitDb21pbmcgc29vbiB0byBhIG5ld3Nncm91cCBuZWFyIHlvdTogIlZpIG1hY3JvcyBzb2x2ZSBUb3dlciBvZiBIYW5vaSIsCithbmQgYSByZXBvc3Qgb2YgdGhlIG9yaWdpbmFsICJUdXJpbmcgTWFjaGluZSBpbXBsZW1lbnRlZCBpbiBWaSBtYWNyb3MiCisKK0FueW9uZSB3aG8gaGFzIGEgdmVyc2lvbiBvZiB0aGVzZSBtYWNyb3MgZm9yIGVkbGluIG9yIG5yb2ZmLCBwbGVhc2UgcG9zdC4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbWFjcm9zL21hemUvcG9zdGVyLmluZm8gYi9ydW50aW1lL21hY3Jvcy9tYXplL3Bvc3Rlci5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNDc4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9tYXplL3Bvc3Rlci5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbWFjcm9zL3NoZWxsbWVudS52aW0gYi9ydW50aW1lL21hY3Jvcy9zaGVsbG1lbnUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNzVkMWQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy9zaGVsbG1lbnUudmltCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbWFjcm9zL3N3YXBtb3VzLnZpbSBiL3J1bnRpbWUvbWFjcm9zL3N3YXBtb3VzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjg1YmUwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3Mvc3dhcG1vdXMudmltCkBAIC0wLDAgKzEsMjIgQEAKKyIgVGhlc2UgbWFjcm9zIHN3YXAgdGhlIGxlZnQgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRvbnMgKGZvciBsZWZ0IGhhbmRlZCkKKyIgRG9uJ3QgZm9yZ2V0IHRvIGRvICI6c2V0IG1vdXNlPWEiIG9yIHRoZSBtb3VzZSB3b24ndCB3b3JrIGF0IGFsbAorbm9yZW1hcAkgPExlZnRNb3VzZT4JPFJpZ2h0TW91c2U+Citub3JlbWFwCSA8Mi1MZWZ0TW91c2U+CTwyLVJpZ2h0TW91c2U+Citub3JlbWFwCSA8My1MZWZ0TW91c2U+CTwzLVJpZ2h0TW91c2U+Citub3JlbWFwCSA8NC1MZWZ0TW91c2U+CTw0LVJpZ2h0TW91c2U+Citub3JlbWFwCSA8TGVmdERyYWc+CTxSaWdodERyYWc+Citub3JlbWFwCSA8TGVmdFJlbGVhc2U+CTxSaWdodFJlbGVhc2U+Citub3JlbWFwCSA8UmlnaHRNb3VzZT4JPExlZnRNb3VzZT4KK25vcmVtYXAJIDwyLVJpZ2h0TW91c2U+CTwyLUxlZnRNb3VzZT4KK25vcmVtYXAJIDwzLVJpZ2h0TW91c2U+CTwzLUxlZnRNb3VzZT4KK25vcmVtYXAJIDw0LVJpZ2h0TW91c2U+CTw0LUxlZnRNb3VzZT4KK25vcmVtYXAJIDxSaWdodERyYWc+CTxMZWZ0RHJhZz4KK25vcmVtYXAJIDxSaWdodFJlbGVhc2U+CTxMZWZ0UmVsZWFzZT4KK25vcmVtYXAJIGc8TGVmdE1vdXNlPgk8Qy1SaWdodE1vdXNlPgorbm9yZW1hcAkgZzxSaWdodE1vdXNlPgk8Qy1MZWZ0TW91c2U+Citub3JlbWFwISA8TGVmdE1vdXNlPgk8UmlnaHRNb3VzZT4KK25vcmVtYXAhIDxMZWZ0RHJhZz4JPFJpZ2h0RHJhZz4KK25vcmVtYXAhIDxMZWZ0UmVsZWFzZT4JPFJpZ2h0UmVsZWFzZT4KK25vcmVtYXAhIDxSaWdodE1vdXNlPgk8TGVmdE1vdXNlPgorbm9yZW1hcCEgPFJpZ2h0RHJhZz4JPExlZnREcmFnPgorbm9yZW1hcCEgPFJpZ2h0UmVsZWFzZT4JPExlZnRSZWxlYXNlPgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvdXJtLmluZm8gYi9ydW50aW1lL21hY3Jvcy91cm0uaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWU4MjM0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvdXJtLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9tYWNyb3MvdXJtL1JFQURNRS50eHQgYi9ydW50aW1lL21hY3Jvcy91cm0vUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWVjYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvdXJtL1JFQURNRS50eHQKQEAgLTAsMCArMSw0NyBAQAorVGhpcyBpcyBhbm90aGVyIHByb29mIHRoYXQgVmltIGlzIHBlcmZlY3RseSBjb21wYXRpYmxlIHdpdGggVmkuCitUaGUgVVJNIG1hY3JvIHBhY2thZ2Ugd2FzIHdyaXR0ZW4gYnkgUnVkb2xmIEtvZW5pZyAoIlJ1ZGkiKQorKHJ1ZG9sZkBrb2VuaWdsaWNoLmRlKSBmb3IgaHB1eC12aSBpbiBBdWd1c3QgMTk5MS4KKworR2V0dGluZyBzdGFydGVkOgorCit0eXBlCitpbiB5b3VyIHNoZWxsOgkgdmltIHVybTxSRVRVUk4+CitpbiB2aW06CQkgOnNvIHVybS52aW08UkVUVVJOPgoraW4gdmltOgkJICoJKHRvIGxvYWQgdGhlIHJlZ2lzdGVycyBhbmQgYm9vdCB0aGUgVVJNLW1hY2hpbmUgOi0pCitpbiB2aW06CQkgZwkoZm9yICdnbycpIGFuZCB3YXRjaCB0aGUgZnVuLiBQZXIgZGVmYXVsdCwgMyBhbmQgNAorCQkJYXJlIG11bHRpcGxpZWQuIFdhdGNoIHRoZSBQcm9ncmFtIGNvdW50ZXIsIGl0IGlzCisJCQl2aXNpYmxlIGFzIGEga29tbWEgbW92aW5nIGFyb3VuZC4KKworVGhpcyBpcyBhICJzdGFuZGFyZCBVUk0iIChVbml2ZXJzYWwgcmVnaXN0ZXIgbWFjaGluZSkgIGludGVycHJldGVyLiBUaGUgVVJNCitjb25jZXB0IGlzIHVzZWQgaW4gdGhlb3JldGljYWwgY29tcHV0ZXIgc2NpZW5jZSB0byBhaWQgaW4gdGhlb3JlbSBwcm92aW5nLgorSGVyZSBpdCBwcm92ZXMgdGhhdCB2aW0gaXMgYSBnZW5lcmFsIHByb2JsZW0gc29sdmVyIChpZiB5b3UgYnJpbmcgZW5vdWdoCitwYXRpZW5jZSkuCisKK1RoZSBpbnRlcnByZXRlciBiZWdpbnMgd2l0aCByZWdpc3RlciAxIChub3QgMCksIHdpdGhvdXQgbWFjcm9zIGFuZCBtb3JlLWxpbmVzCitjYXBhYmlsaXR5LiAgQSBkb3QgbWFya3MgdGhlIGVuZCBvZiBhIHByb2dyYW0uIChCdWc6IHRoZXJlIG11c3QgYmUgYSBzcGFjZQorYWZ0ZXIgdGhlIGRvdC4pCisKK1RoZSByZWdpc3RlcnMgYXJlIHRoZSBmaXJzdCBmZXcgbGluZXMsIGJlZ2lubmluZyB3aXRoIGEgJz4nIC4KK1RoZSBwcm9ncmFtIGlzIHRoZSBmaXJzdCBsaW5lIGFmdGVyIHRoZSByZWdpc3RlcnMuCitZb3Ugc2hvdWxkIGFsd2F5cyBpbml0aWFsaXplIHRoZSByZWdpc3RlcnMgcmVxdWlyZWQgYnkgdGhlIHByb2dyYW0uCisKK091dHB1dCByZWdpc3RlcjoJbGluZSAyCitJbnB1dCByZWdpc3RlcnM6CWxpbmUgMiB0byAuLi4KKworQ29tbWFuZHM6CithPG4+CQlpbmNyZW1lbnQgcmVnaXN0ZXIgPG4+CitzPG4+CQlkZWNyZW1lbnQgcmVnaXN0ZXIgPG4+Cis8eD47PHk+CQlleGVjdXRlIGNvbW1hbmQgPHg+IGFuZCB0aGVuIDx5PgorKDx4Pik8bj4JZXhlY3V0ZSBjb21tYW5kIDx4PiB3aGlsZSByZWdpc3RlciA8bj4gaXMgbm9uemVybworLiAJCSgiZG90IGJsYW5rIikgIGhhbHQgdGhlIG1hY2hpbmUuCisKK0V4YW1wbGVzOgorCitBZGQgcmVnaXN0ZXIgMiB0byByZWdpc3RlciAzOgorCShhMjtzMykzLgorTXVsdGlwbHkgcmVnaXN0ZXIgMiB3aXRoIHJlZ2lzdGVyIDM6CisJKGE0O2E1O3MyKTI7ICgoYTI7czQpNDsgczM7IChhMTthNDtzNSk1OyAoYTU7czEpMSkzLgorCitUaGVyZSBhcmUgbW9yZSAoY29tcGxpY2F0ZWQpIGV4YW1wbGVzIGluIHRoZSBmaWxlIGV4YW1wbGVzLgorTm90ZSwgdW5kbyBtYXkgdGFrZSBhIHdoaWxlIGFmdGVyIGEgZGl2aXNpb24uCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbWFjcm9zL3VybS9SRUFETUUudHh0LmluZm8gYi9ydW50aW1lL21hY3Jvcy91cm0vUkVBRE1FLnR4dC5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMzc5MzcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy91cm0vUkVBRE1FLnR4dC5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbWFjcm9zL3VybS9leGFtcGxlcyBiL3J1bnRpbWUvbWFjcm9zL3VybS9leGFtcGxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTA3ZDRhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvdXJtL2V4YW1wbGVzCkBAIC0wLDAgKzEsMTYgQEAKK05vdGUgdGhhdCBlbm91Z2ggdGVtcG9yYXJ5IHJlZ2lzdGVycyBzaG91bGQgYmUgcHJvdmlkZWQgZm9yIGVhY2ggZXhhbXBsZS4KK0FsbCBzaG91bGQgYmUgaW5pdGlhbGlzZWQgdG8gMC4KKworSW5pdGlhbCByZWdpc3RlciB2YWx1ZXMgZm9yIGJlbmNobWFya2luZzogMCw4LDMsMCwuLi4KKworUGVyZm9ybWVkIG9uIGEgWGVuaXggMzg2LzE2OgorT3BlcmF0aW9uIFtzZWMsIGtieXRlIHRtcCBzcGFjZV06IHByb2dyYW0KKworQXN5bS4gRGlmZi5bIDcsIDRdOiAoczI7czMpMy4gCitBYnMuIERpZmYuIFs5MCw4MV06IChhMTthNDtzMikyOyAoYTI7czEpMTsgKGExO2E1O3MzKTM7IChhMztzMSkxOyAoczI7czMpMzsgKHM1O3M0KTQ7IChhMjtzNSk1LiAKK0FkZCAgWyAgNywgICA0XTogKGEyO3MzKTMuIAorTXVsdCBbMjI3LCAxNjFdOiAoYTQ7YTU7czIpMjsgKChhMjtzNCk0OyBzMzsgKGExO2E0O3M1KTU7IChhNTtzMSkxKTMuIAorQ29weSBbIDQ4LCAgMjVdOiAoYTE7YTM7czIpMjsgKGEyO3MxKTEuIAorc2lnbiBbIDMwLCAgMTddOiAoYTM7czIpMjsgKGEyOyhzMykzKTMuIAorIXNpZ25bIDM2LCAgMjhdOiAoYTM7czIpMjsgKGEyOyhzMykzKTM7IGEzOyAoczM7czIpMjsgKHMzO2EyKTMuICAKK0RpdiAgWzYzMCwxNTIyXTogKGE5O3MyKTI7IChhMjthMTA7czMpMzsgKGEzO3MyKTI7IChhMjsoczMpMykzOyBhMzsgKHMzO3MyKTI7IChzMzthMikzOyAoYTIpMjsoYTI7czkpOTsoYTM7czEwKTEwOyAoYTk7YTEwO3MyKTI7IChhMTE7YTEyO3MzKTM7IChhMjtzMTIpMTI7IChhMztzOSk5OyAoczI7czMpMzsgKGEzO3MyKTI7IChhMjsoczMpMykzOyBhMzsgKHMzO3MyKTI7IChzMzthMikzOyAoYTE7czIpMjsgKGEyO3MxMCkxMDsgKGEzO3MxMSkxMTsgKChhMTI7YTEzO3MzKTM7IChhMztzMTMpMTM7IChzMjtzMykzOyAoYTM7czEyKTEyOyBhMTQ7IChzMSkxOyAoYTk7YTEwO3MyKTI7IChhMTE7YTEyO3MzKTM7IChhMjtzMTIpMTI7IChhMztzOSk5OyAoczI7czMpMzsgKGEzO3MyKTI7IChhMjsoczMpMykzOyBhMzsgKHMzO3MyKTI7IChzMzthMikzOyAoYTE7czIpMjsgKGEyO3MxMCkxMDsgKGEzO3MxMSkxMSkxOyAoczIpMjsgKGEyO3MxNCkxNC4gCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy91cm0vdXJtIGIvcnVudGltZS9tYWNyb3MvdXJtL3VybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2JlZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9tYWNyb3MvdXJtL3VybQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL21hY3Jvcy91cm0vdXJtLnZpbSBiL3J1bnRpbWUvbWFjcm9zL3VybS91cm0udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMDgxODAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21hY3Jvcy91cm0vdXJtLnZpbQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL21ha2VtZW51LnZpbSBiL3J1bnRpbWUvbWFrZW1lbnUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MGM0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL21ha2VtZW51LnZpbQpAQCAtMCwwICsxLDQ2OCBAQAorIiBTY3JpcHQgdG8gZGVmaW5lIHRoZSBzeW50YXggbWVudSBpbiBzeW5tZW51LnZpbQorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXkgMjIKKworIiBUaGlzIGlzIHVzZWQgYnkgIm1ha2UgbWVudSIgaW4gdGhlIHNyYyBkaXJlY3RvcnkuCitlZGl0IDxzZmlsZT46cDpoL3N5bm1lbnUudmltCisKKy9UaGUgU3RhcnQgT2YgVGhlIFN5bnRheCBNZW51LysxLC9UaGUgRW5kIE9mIFRoZSBTeW50YXggTWVudS8tMWQKK2xldCBzOmxudW0gPSBsaW5lKCIuIikgLSAxCitjYWxsIGFwcGVuZChzOmxudW0sICIiKQorbGV0IHM6bG51bSA9IHM6bG51bSArIDEKKworIiBVc2UgdGhlIFN5bk1lbnUgY29tbWFuZCBhbmQgZnVuY3Rpb24gdG8gZGVmaW5lIGFsbCBtZW51IGVudHJpZXMKK2NvbW1hbmQhIC1uYXJncz0qIFN5bk1lbnUgY2FsbCA8U0lEPlN5big8cS1hcmdzPikKKworbGV0IHM6Y3VyX21lbnVfbmFtZSA9ICIiCitsZXQgczpjdXJfbWVudV9uciA9IDAKK2xldCBzOmN1cl9tZW51X2l0ZW0gPSAwCitsZXQgczpjdXJfbWVudV9jaGFyID0gIiIKKworZnVuISA8U0lEPlN5bihhcmcpCisgICIgaXNvbGF0ZSBtZW51IG5hbWU6IHVudGlsIHRoZSBmaXJzdCBkb3QKKyAgbGV0IGkgPSBtYXRjaChhOmFyZywgJ1wuJykKKyAgbGV0IG1lbnVfbmFtZSA9IHN0cnBhcnQoYTphcmcsIDAsIGkpCisgIGxldCByID0gc3RycGFydChhOmFyZywgaSArIDEsIDk5OSkKKyAgIiBpc29sYXRlIHN1Ym1lbnUgbmFtZTogdW50aWwgdGhlIGNvbG9uCisgIGxldCBpID0gbWF0Y2gociwgIjoiKQorICBsZXQgc3VibWVudV9uYW1lID0gc3RycGFydChyLCAwLCBpKQorICAiIGFmdGVyIHRoZSBjb2xvbiBpcyB0aGUgc3ludGF4IG5hbWUKKyAgbGV0IHN5bnRheF9uYW1lID0gc3RycGFydChyLCBpICsgMSwgOTk5KQorCisgIGlmIHM6Y3VyX21lbnVfbmFtZSAhPSBtZW51X25hbWUKKyAgICBsZXQgczpjdXJfbWVudV9uYW1lID0gbWVudV9uYW1lCisgICAgbGV0IHM6Y3VyX21lbnVfbnIgPSBzOmN1cl9tZW51X25yICsgMTAKKyAgICBsZXQgczpjdXJfbWVudV9pdGVtID0gMTAwCisgICAgbGV0IHM6Y3VyX21lbnVfY2hhciA9IHN1Ym1lbnVfbmFtZVswXQorICBlbHNlCisgICAgIiBXaGVuIHN0YXJ0aW5nIGEgbmV3IGxldHRlciwgaW5zZXJ0IGEgbWVudSBzZXBhcmF0b3IuCisgICAgbGV0IGMgPSBzdWJtZW51X25hbWVbMF0KKyAgICBpZiBjICE9IHM6Y3VyX21lbnVfY2hhcgorICAgICAgZXhlICdhbiA1MC4nIC4gczpjdXJfbWVudV9uciAuICcuJyAuIHM6Y3VyX21lbnVfaXRlbSAuICcgJlN5bnRheC4nIC4gbWVudV9uYW1lIC4gIi4tIiAuIGMgLiAnLSA8bnVsPicKKyAgICAgIGxldCBzOmN1cl9tZW51X2l0ZW0gPSBzOmN1cl9tZW51X2l0ZW0gKyAxMAorICAgICAgbGV0IHM6Y3VyX21lbnVfY2hhciA9IGMKKyAgICBlbmRpZgorICBlbmRpZgorICBjYWxsIGFwcGVuZChzOmxudW0sICdhbiA1MC4nIC4gczpjdXJfbWVudV9uciAuICcuJyAuIHM6Y3VyX21lbnVfaXRlbSAuICcgJlN5bnRheC4nIC4gbWVudV9uYW1lIC4gIi4iIC4gc3VibWVudV9uYW1lIC4gJyA6Y2FsIFNldFN5bigiJyAuIHN5bnRheF9uYW1lIC4gJyIpPENSPicpCisgIGxldCBzOmN1cl9tZW51X2l0ZW0gPSBzOmN1cl9tZW51X2l0ZW0gKyAxMAorICBsZXQgczpsbnVtID0gczpsbnVtICsgMQorZW5kZnVuCisKK1N5bk1lbnUgQUIuQWFwOmFhcAorU3luTWVudSBBQi5BYmFxdXM6YWJhcXVzCitTeW5NZW51IEFCLkFCQ1wgbXVzaWNcIG5vdGF0aW9uOmFiYworU3luTWVudSBBQi5BQkVMOmFiZWwKK1N5bk1lbnUgQUIuQWNlREJcIG1vZGVsOmFjZWRiCitTeW5NZW51IEFCLkFkYTphZGEKK1N5bk1lbnUgQUIuQWZMZXg6YWZsZXgKK1N5bk1lbnUgQUIuQWx0ZXJhXCBBSERMOmFoZGwKK1N5bk1lbnUgQUIuQW1pZ2FcIERPUzphbWlnYQorU3luTWVudSBBQi5BTVBMOmFtcGwKK1N5bk1lbnUgQUIuQW50XCBidWlsZFwgZmlsZTphbnQKK1N5bk1lbnUgQUIuQU5UTFI6YW50bHIKK1N5bk1lbnUgQUIuQXBhY2hlXCBjb25maWc6YXBhY2hlCitTeW5NZW51IEFCLkFwYWNoZS1zdHlsZVwgY29uZmlnOmFwYWNoZXN0eWxlCitTeW5NZW51IEFCLkFwcGxpeFwgRUxGOmVsZgorU3luTWVudSBBQi5BcmNcIE1hY3JvXCBMYW5ndWFnZTphbWwKK1N5bk1lbnUgQUIuQXJjaFwgaW52ZW50b3J5OmFyY2gKK1N5bk1lbnUgQUIuQVJUOmFydAorU3luTWVudSBBQi5BU1BcIHdpdGhcIFZCU2NyaXB0OmFzcHZicworU3luTWVudSBBQi5BU1BcIHdpdGhcIFBlcmw6YXNwcGVybAorU3luTWVudSBBQi5Bc3NlbWJseS42ODB4MDphc202OGsKK1N5bk1lbnUgQUIuQXNzZW1ibHkuRmxhdDpmYXNtCitTeW5NZW51IEFCLkFzc2VtYmx5LkdOVTphc20KK1N5bk1lbnUgQUIuQXNzZW1ibHkuR05VXCBILTgzMDA6YXNtaDgzMDAKK1N5bk1lbnUgQUIuQXNzZW1ibHkuSW50ZWxcIElBLTY0OmlhNjQKK1N5bk1lbnUgQUIuQXNzZW1ibHkuTWljcm9zb2Z0Om1hc20KK1N5bk1lbnUgQUIuQXNzZW1ibHkuTmV0d2lkZTpuYXNtCitTeW5NZW51IEFCLkFzc2VtYmx5LlBJQzpwaWMKK1N5bk1lbnUgQUIuQXNzZW1ibHkuVHVyYm86dGFzbQorU3luTWVudSBBQi5Bc3NlbWJseS5WQVhcIE1hY3JvXCBBc3NlbWJseTp2bWFzbQorU3luTWVudSBBQi5Bc3NlbWJseS5aLTgwOno4YQorU3luTWVudSBBQi5Bc3NlbWJseS54YVwgNjUwMlwgY3Jvc3NcIGFzc2VtYmVyOmE2NQorU3luTWVudSBBQi5BU05cLjE6YXNuCitTeW5NZW51IEFCLkF0bGFzOmF0bGFzCitTeW5NZW51IEFCLkF1dG9tYWtlOmF1dG9tYWtlCitTeW5NZW51IEFCLkF2ZW51ZTphdmUKK1N5bk1lbnUgQUIuQXdrOmF3aworU3luTWVudSBBQi5BWWFjYzpheWFjYworCitTeW5NZW51IEFCLkI6YgorU3luTWVudSBBQi5CYWFuOmJhYW4KK1N5bk1lbnUgQUIuQkFTSUM6YmFzaWMKK1N5bk1lbnUgQUIuQkNcIGNhbGN1bGF0b3I6YmMKK1N5bk1lbnUgQUIuQkRGXCBmb250OmJkZgorU3luTWVudSBBQi5CaWJUZVg6YmliCitTeW5NZW51IEFCLkJJTkQuQklORFwgY29uZmlnOm5hbWVkCitTeW5NZW51IEFCLkJJTkQuQklORFwgem9uZTpiaW5kem9uZQorU3luTWVudSBBQi5CbGFuazpibGFuaworCitTeW5NZW51IEMuQzpjCitTeW5NZW51IEMuQysrOmNwcAorU3luTWVudSBDLkMjOmNzCitTeW5NZW51IEMuQ2FsZW5kYXI6Y2FsZW5kYXIKK1N5bk1lbnUgQy5DREw6Y2RsCitTeW5NZW51IEMuQ3JvbnRhYjpjcm9udGFiCitTeW5NZW51IEMuQ3luKys6Y3lucHAKK1N5bk1lbnUgQy5DeW5saWI6Y3lubGliCitTeW5NZW51IEMuQ2FzY2FkaW5nXCBTdHlsZVwgU2hlZXRzOmNzcworU3luTWVudSBDLkNlbnR1cnlcIFRlcm06Y3Rlcm0KK1N5bk1lbnUgQy5DSFwgc2NyaXB0OmNoCitTeW5NZW51IEMuQ2hhbmdlTG9nOmNoYW5nZWxvZworU3luTWVudSBDLkNoZWV0YWhcIHRlbXBsYXRlOmNoZWV0YWgKK1N5bk1lbnUgQy5DSElMTDpjaGlsbAorU3luTWVudSBDLkNsZWFuOmNsZWFuCitTeW5NZW51IEMuQ2xldmVyOmNsCitTeW5NZW51IEMuQ2xpcHBlcjpjbGlwcGVyCitTeW5NZW51IEMuQ29sZFwgRnVzaW9uOmNmCitTeW5NZW51IEMuQ29uZmlnLkNmZ1wgQ29uZmlnXCBmaWxlOmNmZworU3luTWVudSBDLkNvbmZpZy5HZW5lcmljXCBDb25maWdcIGZpbGU6Y29uZgorU3luTWVudSBDLkNvbmZpZy5Db25maWd1cmVcLmluOmNvbmZpZworU3luTWVudSBDLkNSTTExNDpjcm0KK1N5bk1lbnUgQy5DdHJsLUg6Y3RybGgKK1N5bk1lbnUgQy5Db2JvbDpjb2JvbAorU3luTWVudSBDLkNTUDpjc3AKK1N5bk1lbnUgQy5DVVBMLkNVUEw6Y3VwbAorU3luTWVudSBDLkNVUEwuU2ltdWxhdGlvbjpjdXBsc2ltCitTeW5NZW51IEMuQ1ZTLmNvbW1pdFwgZmlsZTpjdnMKK1N5bk1lbnUgQy5DVlMuY3ZzcmM6Y3ZzcmMKKworU3luTWVudSBERS5EOmQKK1N5bk1lbnUgREUuRGViaWFuLkRlYmlhblwgQ2hhbmdlTG9nOmRlYmNoYW5nZWxvZworU3luTWVudSBERS5EZWJpYW4uRGViaWFuXCBDb250cm9sOmRlYmNvbnRyb2wKK1N5bk1lbnUgREUuRGVza3RvcDpkZXNrdG9wCitTeW5NZW51IERFLkRpZmY6ZGlmZgorU3luTWVudSBERS5EaWdpdGFsXCBDb21tYW5kXCBMYW5nOmRjbAorU3luTWVudSBERS5EaXJjb2xvcnM6ZGlyY29sb3JzCitTeW5NZW51IERFLkROUy9CSU5EXCB6b25lOmRucworU3luTWVudSBERS5Eb2NCb29rLmF1dG8tZGV0ZWN0OmRvY2JrCitTeW5NZW51IERFLkRvY0Jvb2suU0dNTDpkb2Nia3NnbWwKK1N5bk1lbnUgREUuRG9jQm9vay5YTUw6ZG9jYmt4bWwKK1N5bk1lbnUgREUuRG90OmRvdAorU3luTWVudSBERS5EcmFjdWxhOmRyYWN1bGEKK1N5bk1lbnUgREUuRFNTU0w6ZHNsCitTeW5NZW51IERFLkRURDpkdGQKK1N5bk1lbnUgREUuRFRNTFwgKFpvcGUpOmR0bWwKK1N5bk1lbnUgREUuRHlsYW4uRHlsYW46ZHlsYW4KK1N5bk1lbnUgREUuRHlsYW4uRHlsYW5cIGludGVyZmFjZTpkeWxhbmludHIKK1N5bk1lbnUgREUuRHlsYW4uRHlsYW5cIGxpZDpkeWxhbmxpZAorCitTeW5NZW51IERFLkVESUY6ZWRpZgorU3luTWVudSBERS5FaWZmZWw6ZWlmZmVsCitTeW5NZW51IERFLkVsaW5rc1wgY29uZmlnOmVsaW5rcworU3luTWVudSBERS5FbG1cIGZpbHRlclwgcnVsZXM6ZWxtZmlsdAorU3luTWVudSBERS5FbWJlZGl4XCBDb21wb25lbnRcIERlc2NyaXB0aW9uOmVjZAorU3luTWVudSBERS5FUmljc3NvblwgTEFOR3VhZ2U6ZXJsYW5nCitTeW5NZW51IERFLkVTUUwtQzplc3FsYworU3luTWVudSBERS5Fc3NiYXNlXCBzY3JpcHQ6Y3NjCitTeW5NZW51IERFLkV0ZXJtXCBjb25maWc6ZXRlcm0KK1N5bk1lbnUgREUuRXhpbVwgY29uZjpleGltCitTeW5NZW51IERFLkV4cGVjdDpleHBlY3QKK1N5bk1lbnUgREUuRXhwb3J0czpleHBvcnRzCisKK1N5bk1lbnUgRkcuRmV0Y2htYWlsOmZldGNobWFpbAorU3luTWVudSBGRy5Gb2N1c1wgRXhlY3V0YWJsZTpmb2NleGVjCitTeW5NZW51IEZHLkZvY3VzXCBNYXN0ZXI6bWFzdGVyCitTeW5NZW51IEZHLkZPUk06Zm9ybQorU3luTWVudSBGRy5Gb3J0aDpmb3J0aAorU3luTWVudSBGRy5Gb3J0cmFuOmZvcnRyYW4KK1N5bk1lbnUgRkcuRm94UHJvOmZveHBybworU3luTWVudSBGRy5Gc3RhYjpmc3RhYgorU3luTWVudSBGRy5GdndtLkZ2d21cIGNvbmZpZ3VyYXRpb246ZnZ3bTEKK1N5bk1lbnUgRkcuRnZ3bS5GdndtMlwgY29uZmlndXJhdGlvbjpmdndtMgorU3luTWVudSBGRy5GdndtLkZ2d20yXCBjb25maWd1cmF0aW9uXCB3aXRoXCBNNDpmdndtMm00CisKK1N5bk1lbnUgRkcuR0RCXCBjb21tYW5kXCBmaWxlOmdkYgorU3luTWVudSBGRy5HRE1POmdkbW8KK1N5bk1lbnUgRkcuR2VkY29tOmdlZGNvbQorU3luTWVudSBGRy5Ha3JlbGxtcmM6Z2tyZWxsbXJjCitTeW5NZW51IEZHLkdQOmdwCitTeW5NZW51IEZHLkdQRzpncGcKK1N5bk1lbnUgRkcuR3J1YjpncnViCitTeW5NZW51IEZHLkdOVVwgU2VydmVyXCBQYWdlczpnc3AKK1N5bk1lbnUgRkcuR05VcGxvdDpnbnVwbG90CitTeW5NZW51IEZHLkdyQURTXCBzY3JpcHRzOmdyYWRzCitTeW5NZW51IEZHLkdyb2ZmOmdyb2ZmCitTeW5NZW51IEZHLkdUS3JjOmd0a3JjCisKK1N5bk1lbnUgSElKSy5IYXNrZWxsLkhhc2tlbGw6aGFza2VsbAorU3luTWVudSBISUpLLkhhc2tlbGwuSGFza2VsbC1jMmhzOmNoYXNrZWxsCitTeW5NZW51IEhJSksuSGFza2VsbC5IYXNrZWxsLWxpdGVyYXRlOmxoYXNrZWxsCitTeW5NZW51IEhJSksuSGVyY3VsZXM6aGVyY3VsZXMKK1N5bk1lbnUgSElKSy5IZXhcIGR1bXAuWFhEOnh4ZAorU3luTWVudSBISUpLLkhleFwgZHVtcC5JbnRlbFwgTUNTNTE6aGV4CitTeW5NZW51IEhJSksuSFRNTC5IVE1MOmh0bWwKK1N5bk1lbnUgSElKSy5IVE1MLkhUTUxcIHdpdGhcIE00Omh0bWxtNAorU3luTWVudSBISUpLLkhUTUwuQ2hlZXRhaFwgSFRNTFwgdGVtcGxhdGU6aHRtbGNoZWV0YWgKK1N5bk1lbnUgSElKSy5IVE1MLkhUTUwvT1M6aHRtbG9zCitTeW5NZW51IEhJSksuSFRNTC5YSFRNTDp4aHRtbAorU3luTWVudSBISUpLLkh5cGVyXCBCdWlsZGVyOmhiCitTeW5NZW51IEhJSksuSWNld21cIG1lbnU6aWNlbWVudQorU3luTWVudSBISUpLLkljb246aWNvbgorU3luTWVudSBISUpLLklETFxHZW5lcmljXCBJREw6aWRsCitTeW5NZW51IEhJSksuSURMXE1pY3Jvc29mdFwgSURMOm1zaWRsCitTeW5NZW51IEhJSksuSW5kZW50XCBwcm9maWxlOmluZGVudAorU3luTWVudSBISUpLLkluZm9ybTppbmZvcm0KK1N5bk1lbnUgSElKSy5JbmZvcm1peFwgNEdMOmZnbAorU3luTWVudSBISUpLLkluaXR0YWI6aW5pdHRhYgorU3luTWVudSBISUpLLklubm9cIHNldHVwOmlzcworU3luTWVudSBISUpLLkluc3RhbGxTaGllbGRcIHNjcmlwdDppc2hkCitTeW5NZW51IEhJSksuSW50ZXJhY3RpdmVcIERhdGFcIExhbmc6aWRsYW5nCitTeW5NZW51IEhJSksuSVBmaWx0ZXI6aXBmaWx0ZXIKK1N5bk1lbnUgSElKSy5KQUw6amFsCitTeW5NZW51IEhJSksuSkFNOmphbQorU3luTWVudSBISUpLLkphcmdvbjpqYXJnb24KK1N5bk1lbnUgSElKSy5KYXZhLkphdmE6amF2YQorU3luTWVudSBISUpLLkphdmEuSmF2YUNDOmphdmFjYworU3luTWVudSBISUpLLkphdmEuSmF2YVwgU2VydmVyXCBQYWdlczpqc3AKK1N5bk1lbnUgSElKSy5KYXZhLkphdmFcIFByb3BlcnRpZXM6anByb3BlcnRpZXMKK1N5bk1lbnUgSElKSy5KYXZhU2NyaXB0OmphdmFzY3JpcHQKK1N5bk1lbnUgSElKSy5KZXNzOmplc3MKK1N5bk1lbnUgSElKSy5KZ3JhcGg6amdyYXBoCitTeW5NZW51IEhJSksuS0RFXCBzY3JpcHQ6a3NjcmlwdAorU3luTWVudSBISUpLLktpbXdpdHUrKzprd3QKK1N5bk1lbnUgSElKSy5LaXhUYXJ0OmtpeAorCitTeW5NZW51IEwtTWEuTGFjZTpsYWNlCitTeW5NZW51IEwtTWEuTGFtZGFQcm9sb2c6bHByb2xvZworU3luTWVudSBMLU1hLkxhdHRlOmxhdHRlCitTeW5NZW51IEwtTWEuTERBUFwgTERJRjpsZGlmCitTeW5NZW51IEwtTWEuTGV4OmxleAorU3luTWVudSBMLU1hLkxGVFBcIGNvbmZpZzpsZnRwCitTeW5NZW51IEwtTWEuTGliYW86bGliYW8KK1N5bk1lbnUgTC1NYS5MaWZlTGluZXNcIHNjcmlwdDpsaWZlbGluZXMKK1N5bk1lbnUgTC1NYS5MaWxvOmxpbG8KK1N5bk1lbnUgTC1NYS5MaXNwOmxpc3AKK1N5bk1lbnUgTC1NYS5MaXRlOmxpdGUKK1N5bk1lbnUgTC1NYS5Mb2NhbGVcIElucHV0OmZkY2MKK1N5bk1lbnUgTC1NYS5Mb2d0YWxrOmxvZ3RhbGsKK1N5bk1lbnUgTC1NYS5MT1RPUzpsb3RvcworU3luTWVudSBMLU1hLkxvdHVzU2NyaXB0OmxzY3JpcHQKK1N5bk1lbnUgTC1NYS5Mb3V0OmxvdXQKK1N5bk1lbnUgTC1NYS5MUEM6bHBjCitTeW5NZW51IEwtTWEuTHVhOmx1YQorU3luTWVudSBMLU1hLkx5bnhcIFN0eWxlOmxzcworU3luTWVudSBMLU1hLkx5bnhcIGNvbmZpZzpseW54CitTeW5NZW51IEwtTWEuTTQ6bTQKK1N5bk1lbnUgTC1NYS5NYUdpY1wgUG9pbnQ6bWdwCitTeW5NZW51IEwtTWEuTWFpbDptYWlsCitTeW5NZW51IEwtTWEuTWFpbGNhcDptYWlsY2FwCitTeW5NZW51IEwtTWEuTWFrZWZpbGU6bWFrZQorU3luTWVudSBMLU1hLk1ha2VJbmRleDppc3QKK1N5bk1lbnUgTC1NYS5NYW5cIHBhZ2U6bWFuCitTeW5NZW51IEwtTWEuTWFwbGVcIFY6bWFwbGUKK1N5bk1lbnUgTC1NYS5NYXNvbjptYXNvbgorU3luTWVudSBMLU1hLk1hdGhlbWF0aWNhOm1tYQorU3luTWVudSBMLU1hLk1hdGxhYjptYXRsYWIKKworU3luTWVudSBNZS1OTy5NRUxcIChmb3JcIE1heWEpOm1lbAorU3luTWVudSBNZS1OTy5NZXRhZm9udDptZgorU3luTWVudSBNZS1OTy5NZXRhUG9zdDptcAorU3luTWVudSBNZS1OTy5NTUlYOm1taXgKK1N5bk1lbnUgTWUtTk8uTW9kY29uZjptb2Rjb25mCitTeW5NZW51IE1lLU5PLk1vZGVsOm1vZGVsCitTeW5NZW51IE1lLU5PLk1vZHNpbVwgSUlJOm1vZHNpbTMKK1N5bk1lbnUgTWUtTk8uTW9kdWxhXCAyOm1vZHVsYTIKK1N5bk1lbnUgTWUtTk8uTW9kdWxhXCAzOm1vZHVsYTMKK1N5bk1lbnUgTWUtTk8uTW9uazptb25rCitTeW5NZW51IE1lLU5PLk1wbGF5ZXJcIGNvbmZpZzptcGxheWVyY29uZgorU3luTWVudSBNZS1OTy5NT086bW9vCitTeW5NZW51IE1lLU5PLk1TLURPUy9XaW5kb3dzLjRET1NcIFwuYmF0XCBmaWxlOmJ0bQorU3luTWVudSBNZS1OTy5NUy1ET1MvV2luZG93cy5cLmJhdFwvXC5jbWRcIGZpbGU6ZG9zYmF0Y2gKK1N5bk1lbnUgTWUtTk8uTVMtRE9TL1dpbmRvd3MuXC5pbmlcIGZpbGU6ZG9zaW5pCitTeW5NZW51IE1lLU5PLk1TLURPUy9XaW5kb3dzLk1vZHVsZVwgRGVmaW5pdGlvbjpkZWYKK1N5bk1lbnUgTWUtTk8uTVMtRE9TL1dpbmRvd3MuUmVnaXN0cnk6cmVnaXN0cnkKK1N5bk1lbnUgTWUtTk8uTVMtRE9TL1dpbmRvd3MuUmVzb3VyY2VcIGZpbGU6cmMKK1N5bk1lbnUgTWUtTk8uTXNxbDptc3FsCitTeW5NZW51IE1lLU5PLk1VU0hjb2RlOm11c2gKK1N5bk1lbnUgTWUtTk8uTXV0dHJjOm11dHRyYworU3luTWVudSBNZS1OTy5OYXN0cmFuXCBpbnB1dC9ETUFQOm5hc3RyYW4KK1N5bk1lbnUgTWUtTk8uTmF0dXJhbDpuYXR1cmFsCitTeW5NZW51IE1lLU5PLk5vdmVsbFwgTkNGXCBiYXRjaDpuY2YKK1N5bk1lbnUgTWUtTk8uTm90XCBRdWl0ZVwgQ1wgKExFR08pOm5xYworU3luTWVudSBNZS1OTy5Ocm9mZjpucm9mZgorU3luTWVudSBNZS1OTy5OU0lTXCBzY3JpcHQ6bnNpcworU3luTWVudSBNZS1OTy5PYmplY3RpdmVcIEM6b2JqYworU3luTWVudSBNZS1OTy5PYmplY3RpdmVcIEMrKzpvYmpjcHAKK1N5bk1lbnUgTWUtTk8uT0NBTUw6b2NhbWwKK1N5bk1lbnUgTWUtTk8uT2NjYW06b2NjYW0KK1N5bk1lbnUgTWUtTk8uT21uaW1hcms6b21uaW1hcmsKK1N5bk1lbnUgTWUtTk8uT3BlblJPQUQ6b3BlbnJvYWQKK1N5bk1lbnUgTWUtTk8uT3BlblwgUHNpb25cIExhbmc6b3BsCitTeW5NZW51IE1lLU5PLk9yYWNsZVwgY29uZmlnOm9yYQorCitTeW5NZW51IFBRLlBhbG1cIHJlc291cmNlXCBjb21waWxlcjpwaWxyYworU3luTWVudSBQUS5QYWNrZXRcIGZpbHRlclwgY29uZjpwZgorU3luTWVudSBQUS5QQXBwOnBhcHAKK1N5bk1lbnUgUFEuUGFzY2FsOnBhc2NhbAorU3luTWVudSBQUS5QQ0NUUzpwY2N0cworU3luTWVudSBQUS5QUFdpemFyZDpwcHdpegorU3luTWVudSBQUS5QZXJsLlBlcmw6cGVybAorU3luTWVudSBQUS5QZXJsLlBlcmxcIFBPRDpwb2QKK1N5bk1lbnUgUFEuUGVybC5QZXJsXCBYUzp4cworU3luTWVudSBQUS5QSFAuUEhQXCAzLTQ6cGhwCitTeW5NZW51IFBRLlBIUC5QaHRtbFwgKFBIUFwgMik6cGh0bWwKK1N5bk1lbnUgUFEuUGlrZTpwaWtlCitTeW5NZW51IFBRLlBpbmVcIFJDOnBpbmUKK1N5bk1lbnUgUFEuUGluZm9cIFJDOnBpbmZvCitTeW5NZW51IFBRLlBML006cGxtCitTeW5NZW51IFBRLlBML1NRTDpwbHNxbAorU3luTWVudSBQUS5QTFA6cGxwCitTeW5NZW51IFBRLlBPXCAoR05VXCBnZXR0ZXh0KTpwbworU3luTWVudSBQUS5Qb3N0Zml4XCBtYWluXCBjb25maWc6cGZtYWluCitTeW5NZW51IFBRLlBvc3RTY3JpcHQuUG9zdFNjcmlwdDpwb3N0c2NyCitTeW5NZW51IFBRLlBvc3RTY3JpcHQuUG9zdFNjcmlwdFwgUHJpbnRlclwgRGVzY3JpcHRpb246cHBkCitTeW5NZW51IFBRLlBvdnJheS5Qb3ZyYXlcIHNjZW5lXCBkZXNjcjpwb3YKK1N5bk1lbnUgUFEuUG92cmF5LlBvdnJheVwgY29uZmlndXJhdGlvbjpwb3ZpbmkKK1N5bk1lbnUgUFEuUHJpbnRjYXA6cGNhcAorU3luTWVudSBQUS5Qcm9jbWFpbDpwcm9jbWFpbAorU3luTWVudSBQUS5Qcm9kdWN0XCBTcGVjXCBGaWxlOnBzZgorU3luTWVudSBQUS5Qcm9ncmVzczpwcm9ncmVzcworU3luTWVudSBQUS5Qcm9sb2c6cHJvbG9nCitTeW5NZW51IFBRLlB1cmlmeVwgbG9nOnB1cmlmeWxvZworU3luTWVudSBQUS5QeXJleDpweXJleAorU3luTWVudSBQUS5QeXRob246cHl0aG9uCitTeW5NZW51IFBRLlF1YWtlOnF1YWtlCitTeW5NZW51IFBRLlF1aWNrZml4XCB3aW5kb3c6cWYKKworU3luTWVudSBSLVNnLlI6cgorU3luTWVudSBSLVNnLlJhZGlhbmNlOnJhZGlhbmNlCitTeW5NZW51IFItU2cuUmF0cG9pc29uOnJhdHBvaXNvbgorU3luTWVudSBSLVNnLlJDUy5SQ1NcIGxvZ1wgb3V0cHV0OnJjc2xvZworU3luTWVudSBSLVNnLlJDUy5SQ1NcIGZpbGU6cmNzCitTeW5NZW51IFItU2cuUmVhZGxpbmVcIGNvbmZpZzpyZWFkbGluZQorU3luTWVudSBSLVNnLlJlYm9sOnJlYm9sCitTeW5NZW51IFItU2cuUmVtaW5kOnJlbWluZAorU3luTWVudSBSLVNnLlJlbGF4XCBOR1wgY29tcGFjdDpybmMKK1N5bk1lbnUgUi1TZy5SZW5kZXJtYW4uUmVuZGVybWFuXCBTaGFkZXJcIExhbmc6c2wKK1N5bk1lbnUgUi1TZy5SZW5kZXJtYW4uUmVuZGVybWFuXCBJbnRlcmZhY2VcIEJ5dGVzdHJlYW06cmliCitTeW5NZW51IFItU2cuUmVzb2x2XC5jb25mOnJlc29sdgorU3luTWVudSBSLVNnLlJleHg6cmV4eAorU3luTWVudSBSLVNnLlJvYm90c1wudHh0OnJvYm90cworU3luTWVudSBSLVNnLlJvY2tMaW51eFwgcGFja2FnZVwgZGVzY1wuOmRlc2MKK1N5bk1lbnUgUi1TZy5ScGNnZW46cnBjZ2VuCitTeW5NZW51IFItU2cuUlBMLzI6cnBsCitTeW5NZW51IFItU2cuUmVTdHJ1Y3R1cmVkVGV4dDpyc3QKK1N5bk1lbnUgUi1TZy5SVEY6cnRmCitTeW5NZW51IFItU2cuUnVieTpydWJ5CitTeW5NZW51IFItU2cuUy1MYW5nOnNsYW5nCitTeW5NZW51IFItU2cuU2FtYmFcIGNvbmZpZzpzYW1iYQorU3luTWVudSBSLVNnLlNBUzpzYXMKK1N5bk1lbnUgUi1TZy5TYXRoZXI6c2F0aGVyCitTeW5NZW51IFItU2cuU2NoZW1lOnNjaGVtZQorU3luTWVudSBSLVNnLlNjaWxhYjpzY2lsYWIKK1N5bk1lbnUgUi1TZy5TY3JlZW5cIFJDOnNjcmVlbgorU3luTWVudSBSLVNnLlNETDpzZGwKK1N5bk1lbnUgUi1TZy5TZWQ6c2VkCitTeW5NZW51IFItU2cuU2VuZG1haWxcLmNmOnNtCitTeW5NZW51IFItU2cuU2VuZC1wcjpzZW5kcHIKK1N5bk1lbnUgUi1TZy5TR01MLlNHTUxcIGNhdGFsb2c6Y2F0YWxvZworU3luTWVudSBSLVNnLlNHTUwuU0dNTFwgRFREOnNnbWwKK1N5bk1lbnUgUi1TZy5TR01MLlNHTUxcIERlY2xhcmF0aW9uOnNnbWxkZWNsCitTeW5NZW51IFItU2cuU0dNTC5TR01MLWxpbnV4ZG9jOnNnbWxsbngKKworU3luTWVudSBTaC1TLlNoZWxsXCBzY3JpcHQuc2hcIGFuZFwga3NoOnNoCitTeW5NZW51IFNoLVMuU2hlbGxcIHNjcmlwdC5jc2g6Y3NoCitTeW5NZW51IFNoLVMuU2hlbGxcIHNjcmlwdC50Y3NoOnRjc2gKK1N5bk1lbnUgU2gtUy5TaGVsbFwgc2NyaXB0LnpzaDp6c2gKK1N5bk1lbnUgU2gtUy5TaUNBRDpzaWNhZAorU3luTWVudSBTaC1TLlNpbXVsYTpzaW11bGEKK1N5bk1lbnUgU2gtUy5TaW5kYS5TaW5kYVwgY29tcGFyZTpzaW5kYWNtcAorU3luTWVudSBTaC1TLlNpbmRhLlNpbmRhXCBpbnB1dDpzaW5kYQorU3luTWVudSBTaC1TLlNpbmRhLlNpbmRhXCBvdXRwdXQ6c2luZGFvdXQKK1N5bk1lbnUgU2gtUy5TS0lMTC5TS0lMTDpza2lsbAorU3luTWVudSBTaC1TLlNLSUxMLlNLSUxMXCBmb3JcIERpdmE6ZGl2YQorU3luTWVudSBTaC1TLlNsaWNlOnNsaWNlCitTeW5NZW51IFNoLVMuU0xSTi5TbHJuXCByYzpzbHJucmMKK1N5bk1lbnUgU2gtUy5TTFJOLlNscm5cIHNjb3JlOnNscm5zYworU3luTWVudSBTaC1TLlNtYWxsVGFsazpzdAorU3luTWVudSBTaC1TLlNtYXJ0eVwgVGVtcGxhdGVzOnNtYXJ0eQorU3luTWVudSBTaC1TLlNNSUw6c21pbAorU3luTWVudSBTaC1TLlNNSVRIOnNtaXRoCitTeW5NZW51IFNoLVMuU05NUFwgTUlCOm1pYgorU3luTWVudSBTaC1TLlNOTlMuU05OU1wgbmV0d29yazpzbm5zbmV0CitTeW5NZW51IFNoLVMuU05OUy5TTk5TXCBwYXR0ZXJuOnNubnNwYXQKK1N5bk1lbnUgU2gtUy5TTk5TLlNOTlNcIHJlc3VsdDpzbm5zcmVzCitTeW5NZW51IFNoLVMuU25vYm9sNDpzbm9ib2w0CitTeW5NZW51IFNoLVMuU25vcnRcIENvbmZpZ3VyYXRpb246aG9nCitTeW5NZW51IFNoLVMuU1BFQ1wgKExpbnV4XCBSUE0pOnNwZWMKK1N5bk1lbnUgU2gtUy5TcGVjbWFuOnNwZWNtYW4KK1N5bk1lbnUgU2gtUy5TcGljZTpzcGljZQorU3luTWVudSBTaC1TLlNweWNlOnNweWNlCitTeW5NZW51IFNoLVMuU3BlZWR1cDpzcHVwCitTeW5NZW51IFNoLVMuU3BsaW50OnNwbGludAorU3luTWVudSBTaC1TLlNxdWlkXCBjb25maWc6c3F1aWQKK1N5bk1lbnUgU2gtUy5TUUwuTXlTUUw6bXlzcWwKK1N5bk1lbnUgU2gtUy5TUUwuU1FMOnNxbAorU3luTWVudSBTaC1TLlNRTC5TUUxcIEZvcm1zOnNxbGZvcm1zCitTeW5NZW51IFNoLVMuU1FMLlNRTEo6c3FsagorU3luTWVudSBTaC1TLlNRUjpzcXIKK1N5bk1lbnUgU2gtUy5Tc2guc3NoX2NvbmZpZzpzc2hjb25maWcKK1N5bk1lbnUgU2gtUy5Tc2guc3NoZF9jb25maWc6c3NoZGNvbmZpZworU3luTWVudSBTaC1TLlN0YW5kYXJkXCBNTDpzbWwKK1N5bk1lbnUgU2gtUy5TdG9yZWRcIFByb2NlZHVyZXM6c3RwCitTeW5NZW51IFNoLVMuU3RyYWNlOnN0cmFjZQorU3luTWVudSBTaC1TLlN1YnZlcnNpb25cIGNvbW1pdDpzdm4KKworU3luTWVudSBUVVYuVEFEUzp0YWRzCitTeW5NZW51IFRVVi5UYWdzOnRhZ3MKK1N5bk1lbnUgVFVWLlRBSy5UQUtcIGNvbXBhcmU6dGFrY21wCitTeW5NZW51IFRVVi5UQUsuVEFLXCBpbnB1dDp0YWsKK1N5bk1lbnUgVFVWLlRBSy5UQUtcIG91dHB1dDp0YWtvdXQKK1N5bk1lbnUgVFVWLlRjbC9Uazp0Y2wKK1N5bk1lbnUgVFVWLlRlYWxJbmZvOnRsaQorU3luTWVudSBUVVYuVGVsaXhcIFNhbHQ6dHNhbHQKK1N5bk1lbnUgVFVWLlRlcm1jYXAvUHJpbnRjYXA6cHRjYXAKK1N5bk1lbnUgVFVWLlRlcm1pbmZvOnRlcm1pbmZvCitTeW5NZW51IFRVVi5UZVguVGVYOnRleAorU3luTWVudSBUVVYuVGVYLlRlWFwgY29uZmlndXJhdGlvbjp0ZXhtZgorU3luTWVudSBUVVYuVGVYLlRleGluZm86dGV4aW5mbworU3luTWVudSBUVVYuVEZcIG11ZFwgY2xpZW50OnRmCitTeW5NZW51IFRVVi5UaWR5XCBjb25maWd1cmF0aW9uOnRpZHkKK1N5bk1lbnUgVFVWLlRpbGRlOnRpbGRlCitTeW5NZW51IFRVVi5UcmFzeXNcIGlucHV0OnRyYXN5cworU3luTWVudSBUVVYuVFNTLkNvbW1hbmRcIExpbmU6dHNzY2wKK1N5bk1lbnUgVFVWLlRTUy5HZW9tZXRyeTp0c3NnbQorU3luTWVudSBUVVYuVFNTLk9wdGljczp0c3NvcAorU3luTWVudSBUVVYuVUlUL1VJTDp1aWwKK1N5bk1lbnUgVFVWLlVucmVhbFNjcmlwdDp1YworU3luTWVudSBUVVYuVmFsZ3JpbmQ6dmFsZ3JpbmQKK1N5bk1lbnUgVFVWLlZlcmlsb2dcIEhETDp2ZXJpbG9nCitTeW5NZW51IFRVVi5WZ3JpbmRlZnM6dmdyaW5kZWZzCitTeW5NZW51IFRVVi5WSERMOnZoZGwKK1N5bk1lbnUgVFVWLlZpbS5WaW1cIGhlbHBcIGZpbGU6aGVscAorU3luTWVudSBUVVYuVmltLlZpbVwgc2NyaXB0OnZpbQorU3luTWVudSBUVVYuVmltLlZpbWluZm9cIGZpbGU6dmltaW5mbworU3luTWVudSBUVVYuVmlyYXRhXCBjb25maWc6dmlyYXRhCitTeW5NZW51IFRVVi5WaXN1YWxcIEJhc2ljOnZiCitTeW5NZW51IFRVVi5WUk1MOnZybWwKK1N5bk1lbnUgVFVWLlZTRVwgSkNMOnZzZWpjbAorCitTeW5NZW51IFdYWVouV0VCLkNXRUI6Y3dlYgorU3luTWVudSBXWFlaLldFQi5XRUI6d2ViCitTeW5NZW51IFdYWVouV0VCLldFQlwgQ2hhbmdlczpjaGFuZ2UKK1N5bk1lbnUgV1hZWi5XZWJtYWNybzp3ZWJtYWNybworU3luTWVudSBXWFlaLldlYnNpdGVcIE1ldGFMYW5ndWFnZTp3bWwKK1N5bk1lbnUgV1hZWi53RGlmZjp3ZGlmZgorU3luTWVudSBXWFlaLldnZXRcIGNvbmZpZzp3Z2V0CitTeW5NZW51IFdYWVouV2hpdGVzcGFjZVwgKGFkZCk6d2hpdGVzcGFjZQorU3luTWVudSBXWFlaLldpbGRQYWNrZXRzXCBFdGhlclBlZWtcIERlY29kZXI6ZGNkCitTeW5NZW51IFdYWVouV2luQmF0Y2gvV2ViYmF0Y2g6d2luYmF0Y2gKK1N5bk1lbnUgV1hZWi5XaW5kb3dzXCBTY3JpcHRpbmdcIEhvc3Q6d3NoCitTeW5NZW51IFdYWVouV3ZEaWFsOnd2ZGlhbAorU3luTWVudSBXWFlaLlhcIEtleWJvYXJkXCBFeHRlbnNpb246eGtiCitTeW5NZW51IFdYWVouWFwgUGl4bWFwOnhwbQorU3luTWVudSBXWFlaLlhcIFBpeG1hcFwgKDIpOnhwbTIKK1N5bk1lbnUgV1hZWi5YXCByZXNvdXJjZXM6eGRlZmF1bHRzCitTeW5NZW51IFdYWVouWG1vZG1hcDp4bW9kbWFwCitTeW5NZW51IFdYWVouWG1hdGg6eG1hdGgKK1N5bk1lbnUgV1hZWi5YTUw6eG1sCitTeW5NZW51IFdYWVouWE1MXCBTY2hlbWFcIChYU0QpOnhzZAorU3luTWVudSBXWFlaLlhzbHQ6eHNsdAorU3luTWVudSBXWFlaLlhGcmVlODZcIENvbmZpZzp4Zjg2Y29uZgorU3luTWVudSBXWFlaLllBTUw6eWFtbAorU3luTWVudSBXWFlaLllhY2M6eWFjYworCitjYWxsIGFwcGVuZChzOmxudW0sICIiKQorCit3cQpkaWZmIC0tZ2l0IGEvcnVudGltZS9tZW51LnZpbSBiL3J1bnRpbWUvbWVudS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1ZGM5MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbWVudS52aW0KQEAgLTAsMCArMSw5NzQgQEAKKyIgVmltIHN1cHBvcnQgZmlsZSB0byBkZWZpbmUgdGhlIGRlZmF1bHQgbWVudXMKKyIgWW91IGNhbiBhbHNvIHVzZSB0aGlzIGFzIGEgc3RhcnQgZm9yIHlvdXIgb3duIHNldCBvZiBtZW51cy4KKyIKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDI2CisKKyIgTm90ZSB0aGF0ICI6YW4iIChzaG9ydCBmb3IgIjphbm9yZW1lbnUiKSBpcyBvZnRlbiB1c2VkIHRvIG1ha2UgYSBtZW51IHdvcmsKKyIgaW4gYWxsIG1vZGVzIGFuZCBhdm9pZCBzaWRlIGVmZmVjdHMgZnJvbSBtYXBwaW5ncyBkZWZpbmVkIGJ5IHRoZSB1c2VyLgorCisiIE1ha2Ugc3VyZSB0aGUgJzwnIGFuZCAnQycgZmxhZ3MgYXJlIG5vdCBpbmNsdWRlZCBpbiAnY3BvcHRpb25zJywgb3RoZXJ3aXNlCisiIDxDUj4gd291bGQgbm90IGJlIHJlY29nbml6ZWQuICBTZWUgIjpoZWxwICdjcG9wdGlvbnMnIi4KK2xldCBzOmNwb19zYXZlID0gJmNwbworc2V0IGNwbyZ2aW0KKworIiBBdm9pZCBpbnN0YWxsaW5nIHRoZSBtZW51cyB0d2ljZQoraWYgIWV4aXN0cygiZGlkX2luc3RhbGxfZGVmYXVsdF9tZW51cyIpCitsZXQgZGlkX2luc3RhbGxfZGVmYXVsdF9tZW51cyA9IDEKKworCitpZiBleGlzdHMoInY6bGFuZyIpIHx8ICZsYW5nbWVudSAhPSAiIgorICAiIFRyeSB0byBmaW5kIGEgbWVudSB0cmFuc2xhdGlvbiBmaWxlIGZvciB0aGUgY3VycmVudCBsYW5ndWFnZS4KKyAgaWYgJmxhbmdtZW51ICE9ICIiCisgICAgaWYgJmxhbmdtZW51ID1+ICJub25lIgorICAgICAgbGV0IHM6bGFuZyA9ICIiCisgICAgZWxzZQorICAgICAgbGV0IHM6bGFuZyA9ICZsYW5nbWVudQorICAgIGVuZGlmCisgIGVsc2UKKyAgICBsZXQgczpsYW5nID0gdjpsYW5nCisgIGVuZGlmCisgICIgQSBsYW5ndWFnZSBuYW1lIG11c3QgYmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMsIGRvbid0IGFjY2VwdCAiQyIKKyAgaWYgc3RybGVuKHM6bGFuZykgPiAxCisgICAgIiBXaGVuIHRoZSBsYW5ndWFnZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBjaGFyc2V0IGFkZCAnZW5jb2RpbmcnCisgICAgaWYgczpsYW5nID1+ICdeXGFcYSRcfF5cYVxhX1xhXGEkJworICAgICAgbGV0IHM6bGFuZyA9IHM6bGFuZyAuICcuJyAuICZlbmMKKyAgICBlbmRpZgorCisgICAgIiBXZSBhbHdheXMgdXNlIGEgbG93ZXJjYXNlIG5hbWUuCisgICAgIiBDaGFuZ2UgImlzby04ODU5IiB0byAiaXNvXzg4NTkiIGFuZCAiaXNvODg1OSIgdG8gImlzb184ODU5Iiwgc29tZQorICAgICIgc3lzdGVtcyBhcHBlYXIgdG8gdXNlIHRoaXMuCisgICAgIiBDaGFuZ2Ugc3BhY2VzIHRvIHVuZGVyc2NvcmVzLgorICAgIGxldCBzOmxhbmcgPSBzdWJzdGl0dXRlKHRvbG93ZXIoczpsYW5nKSwgJ1wuaXNvLScsICIuaXNvXyIsICIiKQorICAgIGxldCBzOmxhbmcgPSBzdWJzdGl0dXRlKHM6bGFuZywgJ1wuaXNvODg1OScsICIuaXNvXzg4NTkiLCAiIikKKyAgICBsZXQgczpsYW5nID0gc3Vic3RpdHV0ZShzOmxhbmcsICIgIiwgIl8iLCAiZyIpCisgICAgIiBSZW1vdmUgIkBldXJvIiwgb3RoZXJ3aXNlICJMQ19BTEw9ZGVfREVAZXVybyBndmltIiB3aWxsIHNob3cgRW5nbGlzaCBtZW51cworICAgIGxldCBzOmxhbmcgPSBzdWJzdGl0dXRlKHM6bGFuZywgIkBldXJvIiwgIiIsICIiKQorICAgICIgQ2hhbmdlICJpc29fODg1OS0xIiBhbmQgImlzb184ODU5LTE1IiB0byAibGF0aW4xIiwgd2UgYWx3YXlzIHVzZSB0aGUKKyAgICAiIHNhbWUgbWVudSBmaWxlIGZvciB0aGVtLgorICAgIGxldCBzOmxhbmcgPSBzdWJzdGl0dXRlKHM6bGFuZywgJ2lzb184ODU5LTE1XD0kJywgImxhdGluMSIsICIiKQorICAgIG1lbnV0cmFucyBjbGVhcgorICAgIGV4ZSAicnVudGltZSEgbGFuZy9tZW51XyIgLiBzOmxhbmcgLiAiLnZpbSIKKworICAgIGlmICFleGlzdHMoImRpZF9tZW51X3RyYW5zIikKKyAgICAgICIgVGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIHRyeSBtYXRjaGluZyB3aXRoIGEgd2lsZGNhcmQgYWRkZWQKKyAgICAgICIgKGUuZy4gZmluZCBtZW51X2RlX2RlLmlzb184ODU5LTEudmltIGlmIHM6bGFuZyA9PSBkZV9ERSkuCisgICAgICBsZXQgczpsYW5nID0gc3Vic3RpdHV0ZShzOmxhbmcsICdcLlteLl0qJywgIiIsICIiKQorICAgICAgZXhlICJydW50aW1lISBsYW5nL21lbnVfIiAuIHM6bGFuZyAuICIqLnZpbSIKKworICAgICAgaWYgIWV4aXN0cygiZGlkX21lbnVfdHJhbnMiKSAmJiBzdHJsZW4oJExBTkcpID4gMQorCSIgT24gd2luZG93cyBsb2NhbGUgbmFtZXMgYXJlIGNvbXBsaWNhdGVkLCB0cnkgdXNpbmcgJExBTkcsIGl0IG1pZ2h0CisJIiBoYXZlIGJlZW4gc2V0IGJ5IHNldF9pbml0XzEoKS4KKwlleGUgInJ1bnRpbWUhIGxhbmcvbWVudV8iIC4gdG9sb3dlcigkTEFORykgLiAiKi52aW0iCisgICAgICBlbmRpZgorICAgIGVuZGlmCisgIGVuZGlmCitlbmRpZgorCisKKyIgSGVscCBtZW51CithbiA5OTk5LjEwICZIZWxwLiZPdmVydmlldzxUYWI+PEYxPgk6aGVscDxDUj4KK2FuIDk5OTkuMjAgJkhlbHAuJlVzZXJcIE1hbnVhbAkJOmhlbHAgdXNyX3RvYzxDUj4KK2FuIDk5OTkuMzAgJkhlbHAuJkhvdy10b1wgbGlua3MJCTpoZWxwIGhvdy10bzxDUj4KK2FuIDxzaWxlbnQ+IDk5OTkuNDAgJkhlbHAuJkZpbmRcLlwuXC4JOmNhbGwgPFNJRD5IZWxwZmluZCgpPENSPgorYW4gOTk5OS40NSAmSGVscC4tc2VwMS0JCQk8Tm9wPgorYW4gOTk5OS41MCAmSGVscC4mQ3JlZGl0cwkJOmhlbHAgY3JlZGl0czxDUj4KK2FuIDk5OTkuNjAgJkhlbHAuQ28mcHlpbmcJCTpoZWxwIGNvcHlpbmc8Q1I+CithbiA5OTk5LjcwICZIZWxwLiZTcG9uc29yL1JlZ2lzdGVyCTpoZWxwIHNwb25zb3I8Q1I+CithbiA5OTk5LjcwICZIZWxwLk8mcnBoYW5zCQk6aGVscCBrY2M8Q1I+CithbiA5OTk5Ljc1ICZIZWxwLi1zZXAyLQkJCTxOb3A+CithbiA5OTk5LjgwICZIZWxwLiZWZXJzaW9uCQk6dmVyc2lvbjxDUj4KK2FuIDk5OTkuOTAgJkhlbHAuJkFib3V0CQkJOmludHJvPENSPgorCitmdW4hIHM6SGVscGZpbmQoKQorICBpZiAhZXhpc3RzKCJnOm1lbnV0cmFuc19oZWxwX2RpYWxvZyIpCisgICAgbGV0IGc6bWVudXRyYW5zX2hlbHBfZGlhbG9nID0gIkVudGVyIGEgY29tbWFuZCBvciB3b3JkIHRvIGZpbmQgaGVscCBvbjpcblxuUHJlcGVuZCBpXyBmb3IgSW5wdXQgbW9kZSBjb21tYW5kcyAoZS5nLjogaV9DVFJMLVgpXG5QcmVwZW5kIGNfIGZvciBjb21tYW5kLWxpbmUgZWRpdGluZyBjb21tYW5kcyAoZS5nLjogY188RGVsPilcblByZXBlbmQgJyBmb3IgYW4gb3B0aW9uIG5hbWUgKGUuZy46ICdzaGlmdHdpZHRoJykiCisgIGVuZGlmCisgIGxldCBoID0gaW5wdXRkaWFsb2coZzptZW51dHJhbnNfaGVscF9kaWFsb2cpCisgIGlmIGggIT0gIiIKKyAgICBsZXQgdjplcnJtc2cgPSAiIgorICAgIHNpbGVudCEgZXhlICJoZWxwICIgLiBoCisgICAgaWYgdjplcnJtc2cgIT0gIiIKKyAgICAgIGVjaG8gdjplcnJtc2cKKyAgICBlbmRpZgorICBlbmRpZgorZW5kZnVuCisKKyIgRmlsZSBtZW51CithbiAxMC4zMTAgJkZpbGUuJk9wZW5cLlwuXC48VGFiPjplCQk6YnJvd3NlIGNvbmZpcm0gZTxDUj4KK2FuIDEwLjMyMCAmRmlsZS5TcCZsaXQtT3BlblwuXC5cLjxUYWI+OnNwCTpicm93c2Ugc3A8Q1I+CithbiAxMC4zMjUgJkZpbGUuJk5ldzxUYWI+OmVuZXcJCQk6Y29uZmlybSBlbmV3PENSPgorYW4gPHNpbGVudD4gMTAuMzMwICZGaWxlLiZDbG9zZTxUYWI+OmNsb3NlCisJXCA6aWYgd2luaGVpZ2h0KDIpIDwgMCA8QmFyPgorCVwgICBjb25maXJtIGVuZXcgPEJhcj4KKwlcIGVsc2UgPEJhcj4KKwlcICAgY29uZmlybSBjbG9zZSA8QmFyPgorCVwgZW5kaWY8Q1I+CithbiAxMC4zMzUgJkZpbGUuLVNFUDEtCQkJCTxOb3A+CithbiA8c2lsZW50PiAxMC4zNDAgJkZpbGUuJlNhdmU8VGFiPjp3CQk6aWYgZXhwYW5kKCIlIikgPT0gIiI8QmFyPmJyb3dzZSBjb25maXJtIHc8QmFyPmVsc2U8QmFyPmNvbmZpcm0gdzxCYXI+ZW5kaWY8Q1I+CithbiAxMC4zNTAgJkZpbGUuU2F2ZVwgJkFzXC5cLlwuPFRhYj46c2F2CTpicm93c2UgY29uZmlybSBzYXZlYXM8Q1I+CisKK2lmIGhhcygiZGlmZiIpCisgIGFuIDEwLjQwMCAmRmlsZS4tU0VQMi0JCQk8Tm9wPgorICBhbiAxMC40MTAgJkZpbGUuU3BsaXRcICZEaWZmXCB3aXRoXC5cLlwuCTpicm93c2UgdmVydCBkaWZmc3BsaXQ8Q1I+CisgIGFuIDEwLjQyMCAmRmlsZS5TcGxpdFwgUGF0Y2hlZFwgJkJ5XC5cLlwuCTpicm93c2UgdmVydCBkaWZmcGF0Y2g8Q1I+CitlbmRpZgorCitpZiBoYXMoInByaW50ZXIiKQorICBhbiAxMC41MDAgJkZpbGUuLVNFUDMtCQkJPE5vcD4KKyAgYW4gMTAuNTEwICZGaWxlLiZQcmludAkJCTpoYXJkY29weTxDUj4KKyAgdnVubWVudSAgICZGaWxlLiZQcmludAorICB2bm9yZW1lbnUgJkZpbGUuJlByaW50CQkJOmhhcmRjb3B5PENSPgorZWxzZWlmIGhhcygidW5peCIpCisgIGFuIDEwLjUwMCAmRmlsZS4tU0VQMy0JCQk8Tm9wPgorICBhbiAxMC41MTAgJkZpbGUuJlByaW50CQkJOncgIWxwcjxDUj4KKyAgdnVubWVudSAgICZGaWxlLiZQcmludAorICB2bm9yZW1lbnUgJkZpbGUuJlByaW50CQkJOncgIWxwcjxDUj4KK2VuZGlmCithbiAxMC42MDAgJkZpbGUuLVNFUDQtCQkJCTxOb3A+CithbiAxMC42MTAgJkZpbGUuU2EmdmUtRXhpdDxUYWI+OndxYQkJOmNvbmZpcm0gd3FhPENSPgorYW4gMTAuNjIwICZGaWxlLkUmeGl0PFRhYj46cWEJCQk6Y29uZmlybSBxYTxDUj4KKworIiBQYXN0aW5nIGJsb2Nrd2lzZSBhbmQgbGluZXdpc2Ugc2VsZWN0aW9ucyBpcyBub3QgcG9zc2libGUgaW4gSW5zZXJ0IGFuZAorIiBWaXN1YWwgbW9kZSB3aXRob3V0IHRoZSArdmlydHVhbGVkaXQgZmVhdHVyZS4gIFRoZXkgYXJlIHBhc3RlZCBhcyBpZiB0aGV5CisiIHdlcmUgY2hhcmFjdGVyd2lzZSBpbnN0ZWFkLiAgQWRkIHRvIHRoYXQgc29tZSB0cmlja3MgdG8gbGVhdmUgdGhlIGN1cnNvciBpbgorIiB0aGUgcmlnaHQgcG9zaXRpb24sIGFsc28gZm9yICJnaSIuCisiIE5vdGU6IHRoZSBzYW1lIHN0dWZmIGFwcGVhcnMgaW4gbXN3aW4udmltLgoraWYgaGFzKCJ2aXJ0dWFsZWRpdCIpCisgIG5ub3JlbWFwIDxzaWxlbnQ+IDxzY3JpcHQ+IDxTSUQ+UGFzdGUgOmNhbGwgPFNJRD5QYXN0ZSgpPENSPgorICBmdW5jISA8U0lEPlBhc3RlKCkKKyAgICBsZXQgb3ZlID0gJnZlCisgICAgc2V0IHZlPWFsbAorICAgIG5vcm1hbCBgXgorICAgIGlmIEArICE9ICcnCisgICAgICBub3JtYWwgIitnUAorICAgIGVuZGlmCisgICAgbGV0IGMgPSBjb2woIi4iKQorICAgIG5vcm1hbCBpGworICAgIGlmIGNvbCgiLiIpIDwgYwkiIGNvbXBlbnNhdGUgZm9yIGk8RVNDPiBtb3ZpbmcgdGhlIGN1cnNvciBsZWZ0CisgICAgICBub3JtYWwgbAorICAgIGVuZGlmCisgICAgbGV0ICZ2ZSA9IG92ZQorICBlbmRmdW5jCitlbHNlCisgIG5ub3JlbWFwIDxzaWxlbnQ+IDxzY3JpcHQ+IDxTSUQ+UGFzdGUgIj1AKy4neHknPENSPmdQRngiXzJ4CitlbmRpZgorCisiIFVzZSBtYXBzIGZvciBpdGVtcyB0aGF0IGFyZSBwcmVzZW50IGJvdGggaW4gRWRpdCwgUG9wdXAgYW5kIFRvb2xiYXIgbWVudS4KK2lmIGhhcygidmlydHVhbGVkaXQiKQorICB2bm9yZW1hcCA8c2NyaXB0PiA8U0lEPnZQYXN0ZQkiLWM8RXNjPjxTSUQ+UGFzdGUKKyAgaW5vcmVtYXAgPHNjcmlwdD4gPFNJRD5pUGFzdGUJPEVzYz48U0lEPlBhc3RlZ2kKK2Vsc2UKKyAgdm5vcmVtYXAgPHNjcmlwdD4gPFNJRD52UGFzdGUJIi1jPEVzYz5naXg8RXNjPjxTSUQ+UGFzdGUiX3gKKyAgaW5vcmVtYXAgPHNjcmlwdD4gPFNJRD5pUGFzdGUJeDxFc2M+PFNJRD5QYXN0ZSJfcworZW5kaWYKKworZnVuYyEgPFNJRD5TZWxlY3RBbGwoKQorICBleGUgIm5vcm0gZ2ciIC4gKCZzbG0gPT0gIiIgPyAiVkciIDogImdIXDxDLU8+RyIpCitlbmRmdW5jCisKKworIiBFZGl0IG1lbnUKK2FuIDIwLjMxMCAmRWRpdC4mVW5kbzxUYWI+dQkJCXUKK2FuIDIwLjMyMCAmRWRpdC4mUmVkbzxUYWI+XlIJCQk8Qy1SPgorYW4gMjAuMzMwICZFZGl0LlJlcCZlYXQ8VGFiPlwuCQkJLgorCithbiAyMC4zMzUgJkVkaXQuLVNFUDEtCQkJCTxOb3A+Cit2bm9yZW1lbnUgMjAuMzQwICZFZGl0LkN1JnQ8VGFiPiIreAkJIit4Cit2bm9yZW1lbnUgMjAuMzUwICZFZGl0LiZDb3B5PFRhYj4iK3kJCSIreQorY25vcmVtZW51IDIwLjM1MCAmRWRpdC4mQ29weTxUYWI+Iit5CQk8Qy1ZPgorbm5vcmVtZW51IDIwLjM2MCAmRWRpdC4mUGFzdGU8VGFiPiIrZ1AJCSIrZ1AKK2Nub3JlbWVudQkgJkVkaXQuJlBhc3RlPFRhYj4iK2dQCQk8Qy1SPisKK3Zub3JlbWVudSA8c2NyaXB0PiAmRWRpdC4mUGFzdGU8VGFiPiIrZ1AJPFNJRD52UGFzdGUKK2lub3JlbWVudSA8c2NyaXB0PiAmRWRpdC4mUGFzdGU8VGFiPiIrZ1AJPFNJRD5pUGFzdGUKK25ub3JlbWVudSAyMC4zNzAgJkVkaXQuUHV0XCAmQmVmb3JlPFRhYj5bcAlbcAoraW5vcmVtZW51CSAmRWRpdC5QdXRcICZCZWZvcmU8VGFiPltwCTxDLU8+W3AKK25ub3JlbWVudSAyMC4zODAgJkVkaXQuUHV0XCAmQWZ0ZXI8VGFiPl1wCV1wCitpbm9yZW1lbnUJICZFZGl0LlB1dFwgJkFmdGVyPFRhYj5dcAk8Qy1PPl1wCitpZiBoYXMoIndpbjMyIikgfHwgaGFzKCJ3aW4xNiIpCisgIHZub3JlbWVudSAyMC4zOTAgJkVkaXQuJkRlbGV0ZTxUYWI+eAkJeAorZW5kaWYKK25vcmVtZW51ICA8c2NyaXB0PiA8c2lsZW50PiAyMC40MDAgJkVkaXQuJlNlbGVjdFwgQWxsPFRhYj5nZ1ZHCTo8Qy1VPmNhbGwgPFNJRD5TZWxlY3RBbGwoKTxDUj4KK2lub3JlbWVudSA8c2NyaXB0PiA8c2lsZW50PiAyMC40MDAgJkVkaXQuJlNlbGVjdFwgQWxsPFRhYj5nZ1ZHCTxDLU8+OmNhbGwgPFNJRD5TZWxlY3RBbGwoKTxDUj4KK2Nub3JlbWVudSA8c2NyaXB0PiA8c2lsZW50PiAyMC40MDAgJkVkaXQuJlNlbGVjdFwgQWxsPFRhYj5nZ1ZHCTxDLVU+Y2FsbCA8U0lEPlNlbGVjdEFsbCgpPENSPgorCithbiAyMC40MDUJICZFZGl0Li1TRVAyLQkJCQk8Tm9wPgoraWYgaGFzKCJ3aW4zMiIpICB8fCBoYXMoIndpbjE2IikgfHwgaGFzKCJndWlfZ3RrIikgfHwgaGFzKCJndWlfbW90aWYiKQorICBhbiAyMC40MTAJICZFZGl0LiZGaW5kXC5cLlwuCQkJOnByb21wdGZpbmQ8Q1I+CisgIHZ1bm1lbnUJICZFZGl0LiZGaW5kXC5cLlwuCisgIHZub3JlbWVudQkgJkVkaXQuJkZpbmRcLlwuXC4JCQl5OnByb21wdGZpbmQgPEMtUj4iPENSPgorICBhbiAyMC40MjAJICZFZGl0LkZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4JOnByb21wdHJlcGw8Q1I+CisgIHZ1bm1lbnUJICZFZGl0LkZpbmRcIGFuZFwgUmVwJmxhY2VcLlwuXC4KKyAgdm5vcmVtZW51CSAmRWRpdC5GaW5kXCBhbmRcIFJlcCZsYWNlXC5cLlwuCXk6cHJvbXB0cmVwbCA8Qy1SPiI8Q1I+CitlbHNlCisgIGFuIDIwLjQxMAkgJkVkaXQuJkZpbmQ8VGFiPi8JCQkvCisgIGFuIDIwLjQyMAkgJkVkaXQuRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OiVzCTolcy8KKyAgdnVubWVudQkgJkVkaXQuRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OiVzCisgIHZub3JlbWVudQkgJkVkaXQuRmluZFwgYW5kXCBSZXAmbGFjZTxUYWI+OnMJOnMvCitlbmRpZgorCithbiAyMC40MjUJICZFZGl0Li1TRVAzLQkJCQk8Tm9wPgorYW4gMjAuNDMwCSAmRWRpdC5TZXR0aW5nc1wgJldpbmRvdwkJOm9wdGlvbnM8Q1I+CisKKyIgRWRpdC9HbG9iYWwgU2V0dGluZ3MKK2FuIDIwLjQ0MC4xMDAgJkVkaXQuJkdsb2JhbFwgU2V0dGluZ3MuVG9nZ2xlXCBQYXR0ZXJuXCAmSGlnaGxpZ2h0PFRhYj46c2V0XCBobHMhCTpzZXQgaGxzISBobHM/PENSPgorYW4gMjAuNDQwLjExMCAmRWRpdC4mR2xvYmFsXCBTZXR0aW5ncy5Ub2dnbGVcICZJZ25vcmUtY2FzZTxUYWI+OnNldFwgaWMhCTpzZXQgaWMhIGljPzxDUj4KK2FuIDIwLjQ0MC4xMTAgJkVkaXQuJkdsb2JhbFwgU2V0dGluZ3MuVG9nZ2xlXCAmU2hvd21hdGNoPFRhYj46c2V0XCBzbSEJOnNldCBzbSEgc20/PENSPgorCithbiAyMC40NDAuMTIwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLiZDb250ZXh0XCBsaW5lcy5cIDFcICA6c2V0IHNvPTE8Q1I+CithbiAyMC40NDAuMTIwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLiZDb250ZXh0XCBsaW5lcy5cIDJcICA6c2V0IHNvPTI8Q1I+CithbiAyMC40NDAuMTIwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLiZDb250ZXh0XCBsaW5lcy5cIDNcICA6c2V0IHNvPTM8Q1I+CithbiAyMC40NDAuMTIwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLiZDb250ZXh0XCBsaW5lcy5cIDRcICA6c2V0IHNvPTQ8Q1I+CithbiAyMC40NDAuMTIwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLiZDb250ZXh0XCBsaW5lcy5cIDVcICA6c2V0IHNvPTU8Q1I+CithbiAyMC40NDAuMTIwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLiZDb250ZXh0XCBsaW5lcy5cIDdcICA6c2V0IHNvPTc8Q1I+CithbiAyMC40NDAuMTIwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLiZDb250ZXh0XCBsaW5lcy5cIDEwXCAgOnNldCBzbz0xMDxDUj4KK2FuIDIwLjQ0MC4xMjAgJkVkaXQuJkdsb2JhbFwgU2V0dGluZ3MuJkNvbnRleHRcIGxpbmVzLlwgMTAwXCAgOnNldCBzbz0xMDA8Q1I+CisKK2FuIDIwLjQ0MC4xMzAuNDAgJkVkaXQuJkdsb2JhbFwgU2V0dGluZ3MuJlZpcnR1YWxcIEVkaXQuTmV2ZXIgOnNldCB2ZT08Q1I+CithbiAyMC40NDAuMTMwLjUwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLiZWaXJ0dWFsXCBFZGl0LkJsb2NrXCBTZWxlY3Rpb24gOnNldCB2ZT1ibG9jazxDUj4KK2FuIDIwLjQ0MC4xMzAuNjAgJkVkaXQuJkdsb2JhbFwgU2V0dGluZ3MuJlZpcnR1YWxcIEVkaXQuSW5zZXJ0XCBtb2RlIDpzZXQgdmU9aW5zZXJ0PENSPgorYW4gMjAuNDQwLjEzMC43MCAmRWRpdC4mR2xvYmFsXCBTZXR0aW5ncy4mVmlydHVhbFwgRWRpdC5CbG9ja1wgYW5kXCBJbnNlcnQgOnNldCB2ZT1ibG9jayxpbnNlcnQ8Q1I+CithbiAyMC40NDAuMTMwLjgwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLiZWaXJ0dWFsXCBFZGl0LkFsd2F5cyA6c2V0IHZlPWFsbDxDUj4KK2FuIDIwLjQ0MC4xNDAgJkVkaXQuJkdsb2JhbFwgU2V0dGluZ3MuVG9nZ2xlXCBJbnNlcnRcICZNb2RlPFRhYj46c2V0XCBpbSEJOnNldCBpbSE8Q1I+CithbiAyMC40NDAuMTQ1ICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLlRvZ2dsZVwgVmlcIEMmb21wYXRpYmxlPFRhYj46c2V0XCBjcCEJOnNldCBjcCE8Q1I+CithbiA8c2lsZW50PiAyMC40NDAuMTUwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLlNlYXJjaFwgJlBhdGhcLlwuXC4gIDpjYWxsIDxTSUQ+U2VhcmNoUCgpPENSPgorYW4gPHNpbGVudD4gMjAuNDQwLjE2MCAmRWRpdC4mR2xvYmFsXCBTZXR0aW5ncy5UYSZnXCBGaWxlc1wuXC5cLiAgOmNhbGwgPFNJRD5UYWdGaWxlcygpPENSPgorIgorIiBHVUkgb3B0aW9ucworYW4gMjAuNDQwLjMwMCAmRWRpdC4mR2xvYmFsXCBTZXR0aW5ncy4tU0VQMS0JCQkJPE5vcD4KK2FuIDxzaWxlbnQ+IDIwLjQ0MC4zMTAgJkVkaXQuJkdsb2JhbFwgU2V0dGluZ3MuVG9nZ2xlXCAmVG9vbGJhcgkJOmNhbGwgPFNJRD5Ub2dnbGVHdWlPcHRpb24oIlQiKTxDUj4KK2FuIDxzaWxlbnQ+IDIwLjQ0MC4zMjAgJkVkaXQuJkdsb2JhbFwgU2V0dGluZ3MuVG9nZ2xlXCAmQm90dG9tXCBTY3JvbGxiYXIgOmNhbGwgPFNJRD5Ub2dnbGVHdWlPcHRpb24oImIiKTxDUj4KK2FuIDxzaWxlbnQ+IDIwLjQ0MC4zMzAgJkVkaXQuJkdsb2JhbFwgU2V0dGluZ3MuVG9nZ2xlXCAmTGVmdFwgU2Nyb2xsYmFyCTpjYWxsIDxTSUQ+VG9nZ2xlR3VpT3B0aW9uKCJsIik8Q1I+CithbiA8c2lsZW50PiAyMC40NDAuMzQwICZFZGl0LiZHbG9iYWxcIFNldHRpbmdzLlRvZ2dsZVwgJlJpZ2h0XCBTY3JvbGxiYXIgOmNhbGwgPFNJRD5Ub2dnbGVHdWlPcHRpb24oInIiKTxDUj4KKworZnVuISBzOlNlYXJjaFAoKQorICBpZiAhZXhpc3RzKCJnOm1lbnV0cmFuc19wYXRoX2RpYWxvZyIpCisgICAgbGV0IGc6bWVudXRyYW5zX3BhdGhfZGlhbG9nID0gIkVudGVyIHNlYXJjaCBwYXRoIGZvciBmaWxlcy5cblNlcGFyYXRlIGRpcmVjdG9yeSBuYW1lcyB3aXRoIGEgY29tbWEuIgorICBlbmRpZgorICBsZXQgbiA9IGlucHV0ZGlhbG9nKGc6bWVudXRyYW5zX3BhdGhfZGlhbG9nLCBzdWJzdGl0dXRlKCZwYXRoLCAnXFwgJywgJyAnLCAnZycpKQorICBpZiBuICE9ICIiCisgICAgbGV0ICZwYXRoID0gc3Vic3RpdHV0ZShuLCAnICcsICdcXCAnLCAnZycpCisgIGVuZGlmCitlbmRmdW4KKworZnVuISBzOlRhZ0ZpbGVzKCkKKyAgaWYgIWV4aXN0cygiZzptZW51dHJhbnNfdGFnc19kaWFsb2ciKQorICAgIGxldCBnOm1lbnV0cmFuc190YWdzX2RpYWxvZyA9ICJFbnRlciBuYW1lcyBvZiB0YWcgZmlsZXMuXG5TZXBhcmF0ZSB0aGUgbmFtZXMgd2l0aCBhIGNvbW1hLiIKKyAgZW5kaWYKKyAgbGV0IG4gPSBpbnB1dGRpYWxvZyhnOm1lbnV0cmFuc190YWdzX2RpYWxvZywgc3Vic3RpdHV0ZSgmdGFncywgJ1xcICcsICcgJywgJ2cnKSkKKyAgaWYgbiAhPSAiIgorICAgIGxldCAmdGFncyA9IHN1YnN0aXR1dGUobiwgJyAnLCAnXFwgJywgJ2cnKQorICBlbmRpZgorZW5kZnVuCisKK2Z1biEgczpUb2dnbGVHdWlPcHRpb24ob3B0aW9uKQorICAgICIgSWYgYTpvcHRpb24gaXMgYWxyZWFkeSBzZXQgaW4gZ3Vpb3B0aW9ucywgdGhlbiB3ZSB3YW50IHRvIHJlbW92ZSBpdAorICAgIGlmIG1hdGNoKCZndWlvcHRpb25zLCAiXFxDIiAuIGE6b3B0aW9uKSA+IC0xCisJZXhlYyAic2V0IGdvLT0iIC4gYTpvcHRpb24KKyAgICBlbHNlCisJZXhlYyAic2V0IGdvKz0iIC4gYTpvcHRpb24KKyAgICBlbmRpZgorZW5kZnVuCisKKyIgRWRpdC9GaWxlIFNldHRpbmdzCisKKyIgQm9vbGVhbiBvcHRpb25zCithbiAyMC40NDAuMTAwICZFZGl0LkYmaWxlXCBTZXR0aW5ncy5Ub2dnbGVcIExpbmVcICZOdW1iZXJpbmc8VGFiPjpzZXRcIG51IQk6c2V0IG51ISBudT88Q1I+CithbiAyMC40NDAuMTEwICZFZGl0LkYmaWxlXCBTZXR0aW5ncy5Ub2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQk6c2V0IGxpc3QhIGxpc3Q/PENSPgorYW4gMjAuNDQwLjEyMCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEJOnNldCB3cmFwISB3cmFwPzxDUj4KK2FuIDIwLjQ0MC4xMzAgJkVkaXQuRiZpbGVcIFNldHRpbmdzLlRvZ2dsZVwgVyZyYXBcIGF0XCB3b3JkPFRhYj46c2V0XCBsYnIhCTpzZXQgbGJyISBsYnI/PENSPgorYW4gMjAuNDQwLjE2MCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuVG9nZ2xlXCAmZXhwYW5kLXRhYjxUYWI+OnNldFwgZXQhCTpzZXQgZXQhIGV0PzxDUj4KK2FuIDIwLjQ0MC4xNzAgJkVkaXQuRiZpbGVcIFNldHRpbmdzLlRvZ2dsZVwgJmF1dG8taW5kZW50PFRhYj46c2V0XCBhaSEJOnNldCBhaSEgYWk/PENSPgorYW4gMjAuNDQwLjE4MCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuVG9nZ2xlXCAmQy1pbmRlbnRpbmc8VGFiPjpzZXRcIGNpbiEJOnNldCBjaW4hIGNpbj88Q1I+CisKKyIgb3RoZXIgb3B0aW9ucworYW4gMjAuNDQwLjYwMCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuLVNFUDItCQk8Tm9wPgorYW4gMjAuNDQwLjYxMC4yMCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuJlNoaWZ0d2lkdGguMgk6c2V0IHN3PTIgc3c/PENSPgorYW4gMjAuNDQwLjYxMC4zMCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuJlNoaWZ0d2lkdGguMwk6c2V0IHN3PTMgc3c/PENSPgorYW4gMjAuNDQwLjYxMC40MCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuJlNoaWZ0d2lkdGguNAk6c2V0IHN3PTQgc3c/PENSPgorYW4gMjAuNDQwLjYxMC41MCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuJlNoaWZ0d2lkdGguNQk6c2V0IHN3PTUgc3c/PENSPgorYW4gMjAuNDQwLjYxMC42MCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuJlNoaWZ0d2lkdGguNgk6c2V0IHN3PTYgc3c/PENSPgorYW4gMjAuNDQwLjYxMC44MCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuJlNoaWZ0d2lkdGguOAk6c2V0IHN3PTggc3c/PENSPgorCithbiAyMC40NDAuNjIwLjIwICZFZGl0LkYmaWxlXCBTZXR0aW5ncy5Tb2Z0XCAmVGFic3RvcC4yCTpzZXQgc3RzPTIgc3RzPzxDUj4KK2FuIDIwLjQ0MC42MjAuMzAgJkVkaXQuRiZpbGVcIFNldHRpbmdzLlNvZnRcICZUYWJzdG9wLjMJOnNldCBzdHM9MyBzdHM/PENSPgorYW4gMjAuNDQwLjYyMC40MCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuU29mdFwgJlRhYnN0b3AuNAk6c2V0IHN0cz00IHN0cz88Q1I+CithbiAyMC40NDAuNjIwLjUwICZFZGl0LkYmaWxlXCBTZXR0aW5ncy5Tb2Z0XCAmVGFic3RvcC41CTpzZXQgc3RzPTUgc3RzPzxDUj4KK2FuIDIwLjQ0MC42MjAuNjAgJkVkaXQuRiZpbGVcIFNldHRpbmdzLlNvZnRcICZUYWJzdG9wLjYJOnNldCBzdHM9NiBzdHM/PENSPgorYW4gMjAuNDQwLjYyMC44MCAmRWRpdC5GJmlsZVwgU2V0dGluZ3MuU29mdFwgJlRhYnN0b3AuOAk6c2V0IHN0cz04IHN0cz88Q1I+CisKK2FuIDxzaWxlbnQ+IDIwLjQ0MC42MzAgJkVkaXQuRiZpbGVcIFNldHRpbmdzLlRlJnh0XCBXaWR0aFwuXC5cLiAgOmNhbGwgPFNJRD5UZXh0V2lkdGgoKTxDUj4KK2FuIDxzaWxlbnQ+IDIwLjQ0MC42NDAgJkVkaXQuRiZpbGVcIFNldHRpbmdzLiZGaWxlXCBGb3JtYXRcLlwuXC4gIDpjYWxsIDxTSUQ+RmlsZUZvcm1hdCgpPENSPgorZnVuISBzOlRleHRXaWR0aCgpCisgIGlmICFleGlzdHMoImc6bWVudXRyYW5zX3RleHR3aWR0aF9kaWFsb2ciKQorICAgIGxldCBnOm1lbnV0cmFuc190ZXh0d2lkdGhfZGlhbG9nID0gIkVudGVyIG5ldyB0ZXh0IHdpZHRoICgwIHRvIGRpc2FibGUgZm9ybWF0dGluZyk6ICIKKyAgZW5kaWYKKyAgbGV0IG4gPSBpbnB1dGRpYWxvZyhnOm1lbnV0cmFuc190ZXh0d2lkdGhfZGlhbG9nLCAmdHcpCisgIGlmIG4gIT0gIiIKKyAgICAiIHJlbW92ZSBsZWFkaW5nIHplcm9zIHRvIGF2b2lkIGl0IGJlaW5nIHVzZWQgYXMgYW4gb2N0YWwgbnVtYmVyCisgICAgbGV0ICZ0dyA9IHN1YnN0aXR1dGUobiwgIl4wKiIsICIiLCAiIikKKyAgZW5kaWYKK2VuZGZ1bgorCitmdW4hIHM6RmlsZUZvcm1hdCgpCisgIGlmICFleGlzdHMoImc6bWVudXRyYW5zX2ZpbGVmb3JtYXRfZGlhbG9nIikKKyAgICBsZXQgZzptZW51dHJhbnNfZmlsZWZvcm1hdF9kaWFsb2cgPSAiU2VsZWN0IGZvcm1hdCBmb3Igd3JpdGluZyB0aGUgZmlsZSIKKyAgZW5kaWYKKyAgaWYgIWV4aXN0cygiZzptZW51dHJhbnNfZmlsZWZvcm1hdF9jaG9pY2VzIikKKyAgICBsZXQgZzptZW51dHJhbnNfZmlsZWZvcm1hdF9jaG9pY2VzID0gIiZVbml4XG4mRG9zXG4mTWFjXG4mQ2FuY2VsIgorICBlbmRpZgorICBpZiAmZmYgPT0gImRvcyIKKyAgICBsZXQgZGVmID0gMgorICBlbHNlaWYgJmZmID09ICJtYWMiCisgICAgbGV0IGRlZiA9IDMKKyAgZWxzZQorICAgIGxldCBkZWYgPSAxCisgIGVuZGlmCisgIGxldCBuID0gY29uZmlybShnOm1lbnV0cmFuc19maWxlZm9ybWF0X2RpYWxvZywgZzptZW51dHJhbnNfZmlsZWZvcm1hdF9jaG9pY2VzLCBkZWYsICJRdWVzdGlvbiIpCisgIGlmIG4gPT0gMQorICAgIHNldCBmZj11bml4CisgIGVsc2VpZiBuID09IDIKKyAgICBzZXQgZmY9ZG9zCisgIGVsc2VpZiBuID09IDMKKyAgICBzZXQgZmY9bWFjCisgIGVuZGlmCitlbmRmdW4KKworIiBTZXR1cCB0aGUgRWRpdC5Db2xvciBTY2hlbWUgc3VibWVudQorbGV0IHM6biA9IGdsb2JwYXRoKCZydW50aW1lcGF0aCwgImNvbG9ycy8qLnZpbSIpCitsZXQgczppZHggPSAxMDAKK3doaWxlIHN0cmxlbihzOm4pID4gMAorICBsZXQgczppID0gc3RyaWR4KHM6biwgIlxuIikKKyAgaWYgczppIDwgMAorICAgIGxldCBzOm5hbWUgPSBzOm4KKyAgICBsZXQgczpuID0gIiIKKyAgZWxzZQorICAgIGxldCBzOm5hbWUgPSBzdHJwYXJ0KHM6biwgMCwgczppKQorICAgIGxldCBzOm4gPSBzdHJwYXJ0KHM6biwgczppICsgMSwgMTk5OTkpCisgIGVuZGlmCisgICIgSWdub3JlIGNhc2UgZm9yIFZNUyBhbmQgd2luZG93cworICBsZXQgczpuYW1lID0gc3Vic3RpdHV0ZShzOm5hbWUsICdcYy4qWy9cXDpcXV1cKFteL1xcOl0qXClcLnZpbScsICdcMScsICcnKQorICBleGUgImFuIDIwLjQ1MC4iIC4gczppZHggLiAnICZFZGl0LkMmb2xvclwgU2NoZW1lLicgLiBzOm5hbWUgLiAiIDpjb2xvcnMgIiAuIHM6bmFtZSAuICI8Q1I+IgorICB1bmxldCBzOm5hbWUKKyAgdW5sZXQgczppCisgIGxldCBzOmlkeCA9IHM6aWR4ICsgMTAKK2VuZHdoaWxlCit1bmxldCBzOm4KK3VubGV0IHM6aWR4CisKKyIgU2V0dXAgdGhlIEVkaXQuS2V5bWFwIHN1Ym1lbnUKK2lmIGhhcygia2V5bWFwIikKKyAgbGV0IHM6biA9IGdsb2JwYXRoKCZydW50aW1lcGF0aCwgImtleW1hcC8qLnZpbSIpCisgIGlmIHM6biAhPSAiIgorICAgIGxldCBzOmlkeCA9IDEwMAorICAgIGFuIDIwLjQ2MC45MCAmRWRpdC4mS2V5bWFwLk5vbmUgOnNldCBrZXltYXA9PENSPgorICAgIHdoaWxlIHN0cmxlbihzOm4pID4gMAorICAgICAgbGV0IHM6aSA9IHN0cmlkeChzOm4sICJcbiIpCisgICAgICBpZiBzOmkgPCAwCisJbGV0IHM6bmFtZSA9IHM6bgorCWxldCBzOm4gPSAiIgorICAgICAgZWxzZQorCWxldCBzOm5hbWUgPSBzdHJwYXJ0KHM6biwgMCwgczppKQorCWxldCBzOm4gPSBzdHJwYXJ0KHM6biwgczppICsgMSwgMTk5OTkpCisgICAgICBlbmRpZgorICAgICAgIiBJZ25vcmUgY2FzZSBmb3IgVk1TIGFuZCB3aW5kb3dzCisgICAgICBsZXQgczpuYW1lID0gc3Vic3RpdHV0ZShzOm5hbWUsICdcYy4qWy9cXDpcXV1cKFteL1xcOl9dKlwpXChfWzAtOWEtekEtWi1dKlwpXD1cLnZpbScsICdcMScsICcnKQorICAgICAgZXhlICJhbiAyMC40NjAuIiAuIHM6aWR4IC4gJyAmRWRpdC4mS2V5bWFwLicgLiBzOm5hbWUgLiAiIDpzZXQga2V5bWFwPSIgLiBzOm5hbWUgLiAiPENSPiIKKyAgICAgIHVubGV0IHM6bmFtZQorICAgICAgdW5sZXQgczppCisgICAgICBsZXQgczppZHggPSBzOmlkeCArIDEwCisgICAgZW5kd2hpbGUKKyAgICB1bmxldCBzOmlkeAorICBlbmRpZgorICB1bmxldCBzOm4KK2VuZGlmCitpZiBoYXMoIndpbjMyIikgfHwgaGFzKCJ3aW4xNiIpIHx8IGhhcygiZ3VpX2d0ayIpIHx8IGhhcygiZ3VpX3Bob3RvbiIpCisgIGFuIDIwLjQ3MCAmRWRpdC5TZWxlY3RcIEZvJm50XC5cLlwuCTpzZXQgZ3VpZm9udD0qPENSPgorZW5kaWYKKworIiBQcm9ncmFtbWluZyBtZW51CitpZiAhZXhpc3RzKCJnOmN0YWdzX2NvbW1hbmQiKQorICBpZiBoYXMoInZtcyIpCisgICAgbGV0IGc6Y3RhZ3NfY29tbWFuZCA9ICJtYyB2aW06Y3RhZ3MgLiIKKyAgZWxzZQorICAgIGxldCBnOmN0YWdzX2NvbW1hbmQgPSAiY3RhZ3MgLVIgLiIKKyAgZW5kaWYKK2VuZGlmCisKK2FuIDQwLjMwMCAmVG9vbHMuJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQlnPEMtXT4KK3Z1bm1lbnUgJlRvb2xzLiZKdW1wXCB0b1wgdGhpc1wgdGFnPFRhYj5nXl0KK3Zub3JlbWVudSAmVG9vbHMuJkp1bXBcIHRvXCB0aGlzXCB0YWc8VGFiPmdeXQlnPEMtXT4KK2FuIDQwLjMxMCAmVG9vbHMuSnVtcFwgJmJhY2s8VGFiPl5UCQk8Qy1UPgorYW4gNDAuMzIwICZUb29scy5CdWlsZFwgJlRhZ3NcIEZpbGUJCTpleGUgIiEiIC4gZzpjdGFnc19jb21tYW5kPENSPgorCisiIFRvb2xzLkZvbGQgTWVudQoraWYgaGFzKCJmb2xkaW5nIikKKyAgYW4gNDAuMzMwICZUb29scy4tU0VQMS0JCQkJCQk8Tm9wPgorICAiIG9wZW4gY2xvc2UgZm9sZHMKKyAgYW4gNDAuMzQwLjExMCAmVG9vbHMuJkZvbGRpbmcuJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJCXppCisgIGFuIDQwLjM0MC4xMjAgJlRvb2xzLiZGb2xkaW5nLiZWaWV3XCBDdXJzb3JcIExpbmU8VGFiPnp2CQl6dgorICBhbiA0MC4zNDAuMTIwICZUb29scy4mRm9sZGluZy5WaWUmd1wgQ3Vyc29yXCBMaW5lXCBvbmx5PFRhYj56TXp4CXpNengKKyAgYW4gNDAuMzQwLjEzMCAmVG9vbHMuJkZvbGRpbmcuQyZsb3NlXCBtb3JlXCBmb2xkczxUYWI+em0JCXptCisgIGFuIDQwLjM0MC4xNDAgJlRvb2xzLiZGb2xkaW5nLiZDbG9zZVwgYWxsXCBmb2xkczxUYWI+ek0JCXpNCisgIGFuIDQwLjM0MC4xNTAgJlRvb2xzLiZGb2xkaW5nLk8mcGVuXCBtb3JlXCBmb2xkczxUYWI+enIJCXpyCisgIGFuIDQwLjM0MC4xNjAgJlRvb2xzLiZGb2xkaW5nLiZPcGVuXCBhbGxcIGZvbGRzPFRhYj56UgkJelIKKyAgIiBmb2xkIG1ldGhvZAorICBhbiA0MC4zNDAuMjAwICZUb29scy4mRm9sZGluZy4tU0VQMS0JCQk8Tm9wPgorICBhbiA0MC4zNDAuMjEwICZUb29scy4mRm9sZGluZy5Gb2xkXCBNZXQmaG9kLk0mYW51YWwJOnNldCBmZG09bWFudWFsPENSPgorICBhbiA0MC4zNDAuMjEwICZUb29scy4mRm9sZGluZy5Gb2xkXCBNZXQmaG9kLkkmbmRlbnQJOnNldCBmZG09aW5kZW50PENSPgorICBhbiA0MC4zNDAuMjEwICZUb29scy4mRm9sZGluZy5Gb2xkXCBNZXQmaG9kLkUmeHByZXNzaW9uIDpzZXQgZmRtPWV4cHI8Q1I+CisgIGFuIDQwLjM0MC4yMTAgJlRvb2xzLiZGb2xkaW5nLkZvbGRcIE1ldCZob2QuUyZ5bnRheAk6c2V0IGZkbT1zeW50YXg8Q1I+CisgIGFuIDQwLjM0MC4yMTAgJlRvb2xzLiZGb2xkaW5nLkZvbGRcIE1ldCZob2QuJkRpZmYJOnNldCBmZG09ZGlmZjxDUj4KKyAgYW4gNDAuMzQwLjIxMCAmVG9vbHMuJkZvbGRpbmcuRm9sZFwgTWV0JmhvZC5NYSZya2VyCTpzZXQgZmRtPW1hcmtlcjxDUj4KKyAgIiBjcmVhdGUgYW5kIGRlbGV0ZSBmb2xkcworICB2bm9yZW1lbnUgNDAuMzQwLjIyMCAmVG9vbHMuJkZvbGRpbmcuQ3JlYXRlXCAmRm9sZDxUYWI+emYJemYKKyAgYW4gNDAuMzQwLjIzMCAmVG9vbHMuJkZvbGRpbmcuJkRlbGV0ZVwgRm9sZDxUYWI+emQJCXpkCisgIGFuIDQwLjM0MC4yNDAgJlRvb2xzLiZGb2xkaW5nLkRlbGV0ZVwgJkFsbFwgRm9sZHM8VGFiPnpECXpECisgICIgbW92aW5nIGFyb3VuZCBpbiBmb2xkcworICBhbiA0MC4zNDAuMzAwICZUb29scy4mRm9sZGluZy4tU0VQMi0JCQkJPE5vcD4KKyAgYW4gNDAuMzQwLjMxMC4xMCAmVG9vbHMuJkZvbGRpbmcuRm9sZFwgY29sJnVtblwgd2lkdGguXCAmMFwgCTpzZXQgZmRjPTA8Q1I+CisgIGFuIDQwLjM0MC4zMTAuMjAgJlRvb2xzLiZGb2xkaW5nLkZvbGRcIGNvbCZ1bW5cIHdpZHRoLlwgJjJcIAk6c2V0IGZkYz0yPENSPgorICBhbiA0MC4zNDAuMzEwLjMwICZUb29scy4mRm9sZGluZy5Gb2xkXCBjb2wmdW1uXCB3aWR0aC5cICYzXCAJOnNldCBmZGM9MzxDUj4KKyAgYW4gNDAuMzQwLjMxMC40MCAmVG9vbHMuJkZvbGRpbmcuRm9sZFwgY29sJnVtblwgd2lkdGguXCAmNFwgCTpzZXQgZmRjPTQ8Q1I+CisgIGFuIDQwLjM0MC4zMTAuNTAgJlRvb2xzLiZGb2xkaW5nLkZvbGRcIGNvbCZ1bW5cIHdpZHRoLlwgJjVcIAk6c2V0IGZkYz01PENSPgorICBhbiA0MC4zNDAuMzEwLjYwICZUb29scy4mRm9sZGluZy5Gb2xkXCBjb2wmdW1uXCB3aWR0aC5cICY2XCAJOnNldCBmZGM9NjxDUj4KKyAgYW4gNDAuMzQwLjMxMC43MCAmVG9vbHMuJkZvbGRpbmcuRm9sZFwgY29sJnVtblwgd2lkdGguXCAmN1wgCTpzZXQgZmRjPTc8Q1I+CisgIGFuIDQwLjM0MC4zMTAuODAgJlRvb2xzLiZGb2xkaW5nLkZvbGRcIGNvbCZ1bW5cIHdpZHRoLlwgJjhcIAk6c2V0IGZkYz04PENSPgorZW5kaWYgICIgaGFzIGZvbGRpbmcKKworaWYgaGFzKCJkaWZmIikKKyAgYW4gNDAuMzUwLjEwMCAmVG9vbHMuJkRpZmYuJlVwZGF0ZQkJOmRpZmZ1cGRhdGU8Q1I+CisgIGFuIDQwLjM1MC4xMTAgJlRvb2xzLiZEaWZmLiZHZXRcIEJsb2NrCTpkaWZmZ2V0PENSPgorICB2dW5tZW51ICZUb29scy4mRGlmZi4mR2V0XCBCbG9jaworICB2bm9yZW1lbnUgJlRvb2xzLiZEaWZmLiZHZXRcIEJsb2NrCQk6ZGlmZmdldDxDUj4KKyAgYW4gNDAuMzUwLjEyMCAmVG9vbHMuJkRpZmYuJlB1dFwgQmxvY2sJOmRpZmZwdXQ8Q1I+CisgIHZ1bm1lbnUgJlRvb2xzLiZEaWZmLiZQdXRcIEJsb2NrCisgIHZub3JlbWVudSAmVG9vbHMuJkRpZmYuJlB1dFwgQmxvY2sJCTpkaWZmcHV0PENSPgorZW5kaWYKKworYW4gNDAuMzU4ICZUb29scy4tU0VQMi0JCQkJCTxOb3A+CithbiA0MC4zNjAgJlRvb2xzLiZNYWtlPFRhYj46bWFrZQkJCTptYWtlPENSPgorYW4gNDAuMzcwICZUb29scy4mTGlzdFwgRXJyb3JzPFRhYj46Y2wJCQk6Y2w8Q1I+CithbiA0MC4zODAgJlRvb2xzLkwmaXN0XCBNZXNzYWdlczxUYWI+OmNsIQkJOmNsITxDUj4KK2FuIDQwLjM5MCAmVG9vbHMuJk5leHRcIEVycm9yPFRhYj46Y24JCQk6Y248Q1I+CithbiA0MC40MDAgJlRvb2xzLiZQcmV2aW91c1wgRXJyb3I8VGFiPjpjcAkJOmNwPENSPgorYW4gNDAuNDEwICZUb29scy4mT2xkZXJcIExpc3Q8VGFiPjpjb2xkCQkJOmNvbGRlcjxDUj4KK2FuIDQwLjQyMCAmVG9vbHMuTiZld2VyXCBMaXN0PFRhYj46Y25ldwkJCTpjbmV3ZXI8Q1I+CithbiA0MC40MzAuNTAgJlRvb2xzLkVycm9yXCAmV2luZG93LiZVcGRhdGU8VGFiPjpjd2luCTpjd2luPENSPgorYW4gNDAuNDMwLjYwICZUb29scy5FcnJvclwgJldpbmRvdy4mT3BlbjxUYWI+OmNvcGVuCTpjb3BlbjxDUj4KK2FuIDQwLjQzMC43MCAmVG9vbHMuRXJyb3JcICZXaW5kb3cuJkNsb3NlPFRhYj46Y2Nsb3NlCTpjY2xvc2U8Q1I+CisKK2FuIDQwLjUyMCAmVG9vbHMuLVNFUDMtCQkJCQk8Tm9wPgorYW4gPHNpbGVudD4gNDAuNTMwICZUb29scy4mQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCisJXCA6Y2FsbCA8U0lEPlh4ZENvbnYoKTxDUj4KK2FuIDxzaWxlbnQ+IDQwLjU0MCAmVG9vbHMuQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIKKwlcIDpjYWxsIDxTSUQ+WHhkQmFjaygpPENSPgorCisiIFVzZSBhIGZ1bmN0aW9uIHRvIGRvIHRoZSBjb252ZXJzaW9uLCBzbyB0aGF0IGl0IGFsc28gd29ya3Mgd2l0aCAnaW5zZXJ0bW9kZScKKyIgc2V0LgorZnVuYyEgczpYeGRDb252KCkKKyAgbGV0IG1vZCA9ICZtb2QKKyAgaWYgaGFzKCJ2bXMiKQorICAgICUhbWMgdmltOnh4ZAorICBlbHNlCisgICAgY2FsbCBzOlh4ZEZpbmQoKQorICAgIGV4ZSAnJSEiJyAuIGc6eHhkcHJvZ3JhbSAuICciJworICBlbmRpZgorICBpZiBnZXRsaW5lKDEpID1+ICJeMDAwMDAwMDoiCQkiIG9ubHkgaWYgaXQgd29ya2VkCisgICAgc2V0IGZ0PXh4ZAorICBlbmRpZgorICBsZXQgJm1vZCA9IG1vZAorZW5kZnVuCisKK2Z1bmMhIHM6WHhkQmFjaygpCisgIGxldCBtb2QgPSAmbW9kCisgIGlmIGhhcygidm1zIikKKyAgICAlIW1jIHZpbTp4eGQgLXIKKyAgZWxzZQorICAgIGNhbGwgczpYeGRGaW5kKCkKKyAgICBleGUgJyUhIicgLiBnOnh4ZHByb2dyYW0gLiAnIiAtcicKKyAgZW5kaWYKKyAgc2V0IGZ0PQorICBkb2F1dG9jbWQgZmlsZXR5cGVkZXRlY3QgQnVmUmVhZFBvc3QKKyAgbGV0ICZtb2QgPSBtb2QKK2VuZGZ1bgorCitmdW5jISBzOlh4ZEZpbmQoKQorICBpZiAhZXhpc3RzKCJnOnh4ZHByb2dyYW0iKQorICAgICIgT24gdGhlIFBDIHh4ZCBtYXkgbm90IGJlIGluIHRoZSBwYXRoIGJ1dCBpbiB0aGUgaW5zdGFsbCBkaXJlY3RvcnkKKyAgICBpZiAoaGFzKCJ3aW4zMiIpIHx8IGhhcygiZG9zMzIiKSkgJiYgIWV4ZWN1dGFibGUoInh4ZCIpCisgICAgICBsZXQgZzp4eGRwcm9ncmFtID0gJFZJTVJVTlRJTUUgLiAoJnNoZWxsc2xhc2ggPyAnLycgOiAnXCcpIC4gInh4ZC5leGUiCisgICAgZWxzZQorICAgICAgbGV0IGc6eHhkcHJvZ3JhbSA9ICJ4eGQiCisgICAgZW5kaWYKKyAgZW5kaWYKK2VuZGZ1bgorCisiIFNldHVwIHRoZSBUb29scy5Db21waWxlciBzdWJtZW51CitsZXQgczpuID0gZ2xvYnBhdGgoJnJ1bnRpbWVwYXRoLCAiY29tcGlsZXIvKi52aW0iKQorbGV0IHM6aWR4ID0gMTAwCit3aGlsZSBzdHJsZW4oczpuKSA+IDAKKyAgbGV0IHM6aSA9IHN0cmlkeChzOm4sICJcbiIpCisgIGlmIHM6aSA8IDAKKyAgICBsZXQgczpuYW1lID0gczpuCisgICAgbGV0IHM6biA9ICIiCisgIGVsc2UKKyAgICBsZXQgczpuYW1lID0gc3RycGFydChzOm4sIDAsIHM6aSkKKyAgICBsZXQgczpuID0gc3RycGFydChzOm4sIHM6aSArIDEsIDE5OTk5KQorICBlbmRpZgorICAiIElnbm9yZSBjYXNlIGZvciBWTVMgYW5kIHdpbmRvd3MKKyAgbGV0IHM6bmFtZSA9IHN1YnN0aXR1dGUoczpuYW1lLCAnXGMuKlsvXFw6XF1dXChbXi9cXDpdKlwpXC52aW0nLCAnXDEnLCAnJykKKyAgZXhlICJhbiAzMC40NDAuIiAuIHM6aWR4IC4gJyAmVG9vbHMuJlNldFwgQ29tcGlsZXIuJyAuIHM6bmFtZSAuICIgOmNvbXBpbGVyICIgLiBzOm5hbWUgLiAiPENSPiIKKyAgdW5sZXQgczpuYW1lCisgIHVubGV0IHM6aQorICBsZXQgczppZHggPSBzOmlkeCArIDEwCitlbmR3aGlsZQordW5sZXQgczpuCit1bmxldCBzOmlkeAorCitpZiAhZXhpc3RzKCJub19idWZmZXJzX21lbnUiKQorCisiIEJ1ZmZlciBsaXN0IG1lbnUgLS0gU2V0dXAgZnVuY3Rpb25zICYgYWN0aW9ucworCisiIHdhaXQgd2l0aCBidWlsZGluZyB0aGUgbWVudSB1bnRpbCBhZnRlciBsb2FkaW5nICdzZXNzaW9uJyBmaWxlcy4gTWFrZXMKKyIgc3RhcnR1cCBmYXN0ZXIuCitsZXQgczpibWVudV93YWl0ID0gMQorCitpZiAhZXhpc3RzKCJibWVudV9wcmlvcml0eSIpCisgIGxldCBibWVudV9wcmlvcml0eSA9IDYwCitlbmRpZgorCitmdW5jISBzOkJNQWRkKCkKKyAgaWYgczpibWVudV93YWl0ID09IDAKKyAgICAiIHdoZW4gYWRkaW5nIHRvbyBtYW55IGJ1ZmZlcnMsIHJlZHJhdyBpbiBzaG9ydCBmb3JtYXQKKyAgICBpZiBzOmJtZW51X2NvdW50ID09ICZtZW51aXRlbXMgJiYgczpibWVudV9zaG9ydCA9PSAwCisgICAgICBjYWxsIHM6Qk1TaG93KCkKKyAgICBlbHNlCisgICAgICBjYWxsIDxTSUQ+Qk1GaWxlbmFtZShleHBhbmQoIjxhZmlsZT4iKSwgZXhwYW5kKCI8YWJ1Zj4iKSkKKyAgICAgIGxldCBzOmJtZW51X2NvdW50ID0gczpibWVudV9jb3VudCArIDEKKyAgICBlbmRpZgorICBlbmRpZgorZW5kZnVuYworCitmdW5jISBzOkJNUmVtb3ZlKCkKKyAgaWYgczpibWVudV93YWl0ID09IDAKKyAgICBsZXQgbmFtZSA9IGV4cGFuZCgiPGFmaWxlPiIpCisgICAgaWYgaXNkaXJlY3RvcnkobmFtZSkKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgbGV0IG11bmdlID0gPFNJRD5CTU11bmdlKG5hbWUsIGV4cGFuZCgiPGFidWY+IikpCisKKyAgICBpZiBzOmJtZW51X3Nob3J0ID09IDAKKyAgICAgIGV4ZSAnc2lsZW50ISBhdW4gJkJ1ZmZlcnMuJyAuIG11bmdlCisgICAgZWxzZQorICAgICAgZXhlICdzaWxlbnQhIGF1biAmQnVmZmVycy4nIC4gPFNJRD5CTUhhc2gyKG11bmdlKSAuIG11bmdlCisgICAgZW5kaWYKKyAgICBsZXQgczpibWVudV9jb3VudCA9IHM6Ym1lbnVfY291bnQgLSAxCisgIGVuZGlmCitlbmRmdW5jCisKKyIgQ3JlYXRlIHRoZSBidWZmZXIgbWVudSAoZGVsZXRlIGFuIGV4aXN0aW5nIG9uZSBmaXJzdCkuCitmdW5jISBzOkJNU2hvdyguLi4pCisgIGxldCBzOmJtZW51X3dhaXQgPSAxCisgIGxldCBzOmJtZW51X3Nob3J0ID0gMQorICBsZXQgczpibWVudV9jb3VudCA9IDAKKyAgIgorICAiIGdldCBuZXcgcHJpb3JpdHksIGlmIGV4aXN0cworICBpZiBhOjAgPT0gMQorICAgIGxldCBnOmJtZW51X3ByaW9yaXR5ID0gYToxCisgIGVuZGlmCisKKyAgIiByZW1vdmUgb2xkIG1lbnUsIGlmIGV4aXN0czsga2VlcCBvbmUgZW50cnkgdG8gYXZvaWQgYSB0b3JuIG9mZiBtZW51IHRvCisgICIgZGlzYXBwZWFyLgorICBzaWxlbnQhIHVubWVudSAmQnVmZmVycworICBleGUgJ25vcmVtZW51ICcgLiBnOmJtZW51X3ByaW9yaXR5IC4gIi4xICZCdWZmZXJzLkR1bW15IGwiCisgIHNpbGVudCEgdW5tZW51ISAmQnVmZmVycworCisgICIgY3JlYXRlIG5ldyBtZW51OyBzZXQgJ2NwbycgdG8gaW5jbHVkZSB0aGUgPENSPgorICBsZXQgY3BvX3NhdmUgPSAmY3BvCisgIHNldCBjcG8mdmltCisgIGV4ZSAnYW4gPHNpbGVudD4gJyAuIGc6Ym1lbnVfcHJpb3JpdHkgLiAiLjIgJkJ1ZmZlcnMuJlJlZnJlc2hcXCBtZW51IDpjYWxsIDxTSUQ+Qk1TaG93KCk8Q1I+IgorICBleGUgJ2FuICcgLiBnOmJtZW51X3ByaW9yaXR5IC4gIi40ICZCdWZmZXJzLiZEZWxldGUgOmNvbmZpcm0gYmQ8Q1I+IgorICBleGUgJ2FuICcgLiBnOmJtZW51X3ByaW9yaXR5IC4gIi42ICZCdWZmZXJzLiZBbHRlcm5hdGUgOmNvbmZpcm0gYiAjPENSPiIKKyAgZXhlICdhbiAnIC4gZzpibWVudV9wcmlvcml0eSAuICIuNyAmQnVmZmVycy4mTmV4dCA6Y29uZmlybSBibmV4dDxDUj4iCisgIGV4ZSAnYW4gJyAuIGc6Ym1lbnVfcHJpb3JpdHkgLiAiLjggJkJ1ZmZlcnMuJlByZXZpb3VzIDpjb25maXJtIGJwcmV2PENSPiIKKyAgZXhlICdhbiAnIC4gZzpibWVudV9wcmlvcml0eSAuICIuOSAmQnVmZmVycy4tU0VQLSA6IgorICBsZXQgJmNwbyA9IGNwb19zYXZlCisgIHVubWVudSAmQnVmZmVycy5EdW1teQorCisgICIgZmlndXJlIG91dCBob3cgbWFueSBidWZmZXJzIHRoZXJlIGFyZQorICBsZXQgYnVmID0gMQorICB3aGlsZSBidWYgPD0gYnVmbnIoJyQnKQorICAgIGlmIGJ1ZmV4aXN0cyhidWYpICYmICFpc2RpcmVjdG9yeShidWZuYW1lKGJ1ZikpICYmIGJ1Zmxpc3RlZChidWYpCisJCQkJCSAgICBcICYmICFnZXRidWZ2YXIoYnVmLCAiJmJ1ZnNlY3JldCIpCisgICAgICBsZXQgczpibWVudV9jb3VudCA9IHM6Ym1lbnVfY291bnQgKyAxCisgICAgZW5kaWYKKyAgICBsZXQgYnVmID0gYnVmICsgMQorICBlbmR3aGlsZQorICBpZiBzOmJtZW51X2NvdW50IDw9ICZtZW51aXRlbXMKKyAgICBsZXQgczpibWVudV9zaG9ydCA9IDAKKyAgZW5kaWYKKworICAiIGl0ZXJhdGUgdGhyb3VnaCBidWZmZXIgbGlzdCwgYWRkaW5nIGVhY2ggYnVmZmVyIHRvIHRoZSBtZW51OgorICBsZXQgYnVmID0gMQorICB3aGlsZSBidWYgPD0gYnVmbnIoJyQnKQorICAgIGlmIGJ1ZmV4aXN0cyhidWYpICYmICFpc2RpcmVjdG9yeShidWZuYW1lKGJ1ZikpICYmIGJ1Zmxpc3RlZChidWYpCisJCQkJCSAgICBcICYmICFnZXRidWZ2YXIoYnVmLCAiJmJ1ZnNlY3JldCIpCisgICAgICBjYWxsIDxTSUQ+Qk1GaWxlbmFtZShidWZuYW1lKGJ1ZiksIGJ1ZikKKyAgICBlbmRpZgorICAgIGxldCBidWYgPSBidWYgKyAxCisgIGVuZHdoaWxlCisgIGxldCBzOmJtZW51X3dhaXQgPSAwCisgIGF1ZyBidWZmZXJfbGlzdAorICBhdSEKKyAgYXUgQnVmQ3JlYXRlLEJ1ZkZpbGVQb3N0ICogY2FsbCA8U0lEPkJNQWRkKCkKKyAgYXUgQnVmRGVsZXRlLEJ1ZkZpbGVQcmUgKiBjYWxsIDxTSUQ+Qk1SZW1vdmUoKQorICBhdWcgRU5ECitlbmRmdW5jCisKK2Z1bmMhIHM6Qk1IYXNoKG5hbWUpCisgICIgTWFrZSBuYW1lIGFsbCB1cHBlciBjYXNlLCBzbyB0aGF0IGNoYXJzIGFyZSBiZXR3ZWVuIDMyIGFuZCA5NgorICBsZXQgbm0gPSBzdWJzdGl0dXRlKGE6bmFtZSwgIi4qIiwgJ1xVXDAnLCAiIikKKyAgaWYgaGFzKCJlYmNkaWMiKQorICAgICIgSEFDSzogUmVwbGFjZSBhbGwgbm9uIGFscGhhYmV0aWNzIHdpdGggJ1onCisgICAgIiAgICAgICBKdXN0IHRvIG1ha2UgaXQgd29yayBmb3Igbm93LgorICAgIGxldCBubSA9IHN1YnN0aXR1dGUobm0sICJbXkEtWl0iLCAnWicsICJnIikKKyAgICBsZXQgc3AgPSBjaGFyMm5yKCdBJykgLSAxCisgIGVsc2UKKyAgICBsZXQgc3AgPSBjaGFyMm5yKCcgJykKKyAgZW5kaWYKKyAgIiBjb252ZXJ0IGZpcnN0IHNpeCBjaGFycyBpbnRvIGEgbnVtYmVyIGZvciBzb3J0aW5nOgorICByZXR1cm4gKGNoYXIybnIobm1bMF0pIC0gc3ApICogMHg4MDAwMDAgKyAoY2hhcjJucihubVsxXSkgLSBzcCkgKiAweDIwMDAwICsgKGNoYXIybnIobm1bMl0pIC0gc3ApICogMHgxMDAwICsgKGNoYXIybnIobm1bM10pIC0gc3ApICogMHg4MCArIChjaGFyMm5yKG5tWzRdKSAtIHNwKSAqIDB4MjAgKyAoY2hhcjJucihubVs1XSkgLSBzcCkKK2VuZGZ1bmMKKworZnVuYyEgczpCTUhhc2gyKG5hbWUpCisgIGxldCBubSA9IHN1YnN0aXR1dGUoYTpuYW1lLCAiLiIsICdcTFwwJywgIiIpCisgICIgTm90IGV4YWN0bHkgcmlnaHQgZm9yIEVCQ0RJQy4uLgorICBpZiBubVswXSA8ICdhJyB8fCBubVswXSA+ICd6JworICAgIHJldHVybiAnJm90aGVycy4nCisgIGVsc2VpZiBubVswXSA8PSAnZCcKKyAgICByZXR1cm4gJyZhYmNkLicKKyAgZWxzZWlmIG5tWzBdIDw9ICdoJworICAgIHJldHVybiAnJmVmZ2guJworICBlbHNlaWYgbm1bMF0gPD0gJ2wnCisgICAgcmV0dXJuICcmaWprbC4nCisgIGVsc2VpZiBubVswXSA8PSAncCcKKyAgICByZXR1cm4gJyZtbm9wLicKKyAgZWxzZWlmIG5tWzBdIDw9ICd0JworICAgIHJldHVybiAnJnFyc3QuJworICBlbHNlCisgICAgcmV0dXJuICcmdS16LicKKyAgZW5kaWYKK2VuZGZ1bmMKKworIiBpbnNlcnQgYSBidWZmZXIgbmFtZSBpbnRvIHRoZSBidWZmZXIgbWVudToKK2Z1bmMhIHM6Qk1GaWxlbmFtZShuYW1lLCBudW0pCisgIGlmIGlzZGlyZWN0b3J5KGE6bmFtZSkKKyAgICByZXR1cm4KKyAgZW5kaWYKKyAgbGV0IG11bmdlID0gPFNJRD5CTU11bmdlKGE6bmFtZSwgYTpudW0pCisgIGxldCBoYXNoID0gPFNJRD5CTUhhc2gobXVuZ2UpCisgIGlmIHM6Ym1lbnVfc2hvcnQgPT0gMAorICAgIGxldCBuYW1lID0gJ2FuICcgLiBnOmJtZW51X3ByaW9yaXR5IC4gJy4nIC4gaGFzaCAuICcgJkJ1ZmZlcnMuJyAuIG11bmdlCisgIGVsc2UKKyAgICBsZXQgbmFtZSA9ICdhbiAnIC4gZzpibWVudV9wcmlvcml0eSAuICcuJyAuIGhhc2ggLiAnLicgLiBoYXNoIC4gJyAmQnVmZmVycy4nIC4gPFNJRD5CTUhhc2gyKG11bmdlKSAuIG11bmdlCisgIGVuZGlmCisgICIgc2V0ICdjcG8nIHRvIGluY2x1ZGUgdGhlIDxDUj4KKyAgbGV0IGNwb19zYXZlID0gJmNwbworICBzZXQgY3BvJnZpbQorICBleGUgbmFtZSAuICcgOmNvbmZpcm0gYicgLiBhOm51bSAuICc8Q1I+JworICBsZXQgJmNwbyA9IGNwb19zYXZlCitlbmRmdW5jCisKKyIgVHJ1bmNhdGUgYSBsb25nIHBhdGggdG8gZml0IGl0IGluIGEgbWVudSBpdGVtLgoraWYgIWV4aXN0cygiZzpibWVudV9tYXhfcGF0aGxlbiIpCisgIGxldCBnOmJtZW51X21heF9wYXRobGVuID0gMzUKK2VuZGlmCitmdW5jISBzOkJNVHJ1bmNOYW1lKGZuYW1lKQorICBsZXQgbmFtZSA9IGE6Zm5hbWUKKyAgaWYgZzpibWVudV9tYXhfcGF0aGxlbiA8IDUKKyAgICBsZXQgbmFtZSA9ICIiCisgIGVsc2UKKyAgICBsZXQgbGVuID0gc3RybGVuKG5hbWUpCisgICAgaWYgbGVuID4gZzpibWVudV9tYXhfcGF0aGxlbgorICAgICAgbGV0IGFtb3VudGwgPSAoZzpibWVudV9tYXhfcGF0aGxlbiAvIDIpIC0gMgorICAgICAgbGV0IGFtb3VudHIgPSBnOmJtZW51X21heF9wYXRobGVuIC0gYW1vdW50bCAtIDMKKyAgICAgIGxldCBwYXR0ZXJuID0gJ15cKC5ceywnIC4gYW1vdW50bCAuICd9XCkuXHstfVwoLlx7LCcgLiBhbW91bnRyIC4gJ31cKSQnCisgICAgICBsZXQgbGVmdCA9IHN1YnN0aXR1dGUobmFtZSwgcGF0dGVybiwgJ1wxJywgJycpCisgICAgICBsZXQgcmlnaHQgPSBzdWJzdGl0dXRlKG5hbWUsIHBhdHRlcm4sICdcMicsICcnKQorICAgICAgaWYgc3RybGVuKGxlZnQpICsgc3RybGVuKHJpZ2h0KSA8IGxlbgorCWxldCBuYW1lID0gbGVmdCAuICcuLi4nIC4gcmlnaHQKKyAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgZW5kaWYKKyAgcmV0dXJuIG5hbWUKK2VuZGZ1bmMKKworZnVuYyEgczpCTU11bmdlKGZuYW1lLCBibnVtKQorICBsZXQgbmFtZSA9IGE6Zm5hbWUKKyAgaWYgbmFtZSA9PSAnJworICAgIGlmICFleGlzdHMoImc6bWVudXRyYW5zX25vX2ZpbGUiKQorICAgICAgbGV0IGc6bWVudXRyYW5zX25vX2ZpbGUgPSAiW05vIGZpbGVdIgorICAgIGVuZGlmCisgICAgbGV0IG5hbWUgPSBnOm1lbnV0cmFuc19ub19maWxlCisgIGVsc2UKKyAgICBsZXQgbmFtZSA9IGZuYW1lbW9kaWZ5KG5hbWUsICc6cDp+JykKKyAgZW5kaWYKKyAgIiBkZXRhY2ggZmlsZSBuYW1lIGFuZCBzZXBhcmF0ZSBpdCBvdXQ6CisgIGxldCBuYW1lMiA9IGZuYW1lbW9kaWZ5KG5hbWUsICc6dCcpCisgIGlmIGE6Ym51bSA+PSAwCisgICAgbGV0IG5hbWUyID0gbmFtZTIgLiAnICgnIC4gYTpibnVtIC4gJyknCisgIGVuZGlmCisgIGxldCBuYW1lID0gbmFtZTIgLiAiXHQiIC4gPFNJRD5CTVRydW5jTmFtZShmbmFtZW1vZGlmeShuYW1lLCc6aCcpKQorICBsZXQgbmFtZSA9IGVzY2FwZShuYW1lLCAiXFwuIFx0fCIpCisgIGxldCBuYW1lID0gc3Vic3RpdHV0ZShuYW1lLCAiJiIsICImJiIsICJnIikKKyAgbGV0IG5hbWUgPSBzdWJzdGl0dXRlKG5hbWUsICJcbiIsICJeQCIsICJnIikKKyAgcmV0dXJuIG5hbWUKK2VuZGZ1bmMKKworIiBXaGVuIGp1c3Qgc3RhcnRpbmcgVmltLCBsb2FkIHRoZSBidWZmZXIgbWVudSBsYXRlcgoraWYgaGFzKCJ2aW1fc3RhcnRpbmciKQorICBhdWdyb3VwIExvYWRCdWZmZXJNZW51CisgICAgYXUhIFZpbUVudGVyICogaWYgIWV4aXN0cygibm9fYnVmZmVyc19tZW51IikgfCBjYWxsIDxTSUQ+Qk1TaG93KCkgfCBlbmRpZgorICAgIGF1ICBWaW1FbnRlciAqIGF1ISBMb2FkQnVmZmVyTWVudQorICBhdWdyb3VwIEVORAorZWxzZQorICBjYWxsIDxTSUQ+Qk1TaG93KCkKK2VuZGlmCisKK2VuZGlmICIgIWV4aXN0cygibm9fYnVmZmVyc19tZW51IikKKworIiBXaW5kb3cgbWVudQorYW4gNzAuMzAwICZXaW5kb3cuJk5ldzxUYWI+XlduCQkJPEMtVz5uCithbiA3MC4zMTAgJldpbmRvdy5TJnBsaXQ8VGFiPl5XcwkJPEMtVz5zCithbiA3MC4zMjAgJldpbmRvdy5TcCZsaXRcIFRvXCAjPFRhYj5eV15eCTxDLVc+PEMtXj4KK2FuIDcwLjMzMCAmV2luZG93LlNwbGl0XCAmVmVydGljYWxseTxUYWI+Xld2CTxDLVc+dgoraWYgaGFzKCJ2ZXJ0c3BsaXQiKQorICBhbiA8c2lsZW50PiA3MC4zMzIgJldpbmRvdy5TcGxpdFwgRmlsZVwgRSZ4cGxvcmVyCTpjYWxsIE1lbnVFeHBsT3BlbigpPENSPgorICBpZiAhZXhpc3RzKCIqTWVudUV4cGxPcGVuIikKKyAgICBmdW4gTWVudUV4cGxPcGVuKCkKKyAgICAgIGlmIEAlID09ICIiCisJMjB2c3AgLgorICAgICAgZWxzZQorCWV4ZSAiMjB2c3AgIiAuIGV4cGFuZCgiJTpwOmgiKQorICAgICAgZW5kaWYKKyAgICBlbmRmdW4KKyAgZW5kaWYKK2VuZGlmCithbiA3MC4zMzUgJldpbmRvdy4tU0VQMS0JCQkJPE5vcD4KK2FuIDcwLjM0MCAmV2luZG93LiZDbG9zZTxUYWI+XldjCQkJOmNvbmZpcm0gY2xvc2U8Q1I+CithbiA3MC4zNDUgJldpbmRvdy5DbG9zZVwgJk90aGVyKHMpPFRhYj5eV28JCTpjb25maXJtIG9ubHk8Q1I+CithbiA3MC4zNTAgJldpbmRvdy4tU0VQMi0JCQkJPE5vcD4KK2FuIDcwLjM1NSAmV2luZG93Lk1vdmVcICZUby4mVG9wPFRhYj5eV0sJCTxDLVc+SworYW4gNzAuMzU1ICZXaW5kb3cuTW92ZVwgJlRvLiZCb3R0b208VGFiPl5XSgkJPEMtVz5KCithbiA3MC4zNTUgJldpbmRvdy5Nb3ZlXCAmVG8uJkxlZnRcIHNpZGU8VGFiPl5XSAkJPEMtVz5ICithbiA3MC4zNTUgJldpbmRvdy5Nb3ZlXCAmVG8uJlJpZ2h0XCBzaWRlPFRhYj5eV0wJPEMtVz5MCithbiA3MC4zNjAgJldpbmRvdy5Sb3RhdGVcICZVcDxUYWI+XldSCQkJPEMtVz5SCithbiA3MC4zNjIgJldpbmRvdy5Sb3RhdGVcICZEb3duPFRhYj5eV3IJCQk8Qy1XPnIKK2FuIDcwLjM2NSAmV2luZG93Li1TRVAzLQkJCQk8Tm9wPgorYW4gNzAuMzcwICZXaW5kb3cuJkVxdWFsXCBTaXplPFRhYj5eVz0JCQk8Qy1XPj0KK2FuIDcwLjM4MCAmV2luZG93LiZNYXhcIEhlaWdodDxUYWI+XldfCQkJPEMtVz5fCithbiA3MC4zOTAgJldpbmRvdy5NJmluXCBIZWlnaHQ8VGFiPl5XMV8JCQk8Qy1XPjFfCithbiA3MC40MDAgJldpbmRvdy5NYXhcICZXaWR0aDxUYWI+XldcfAkJCTxDLVc+XHwKK2FuIDcwLjQxMCAmV2luZG93Lk1pblwgV2lkdCZoPFRhYj5eVzFcfAkJCTxDLVc+MVx8CisKKyIgVGhlIHBvcHVwIG1lbnUKK2FuIDEuMTAgUG9wVXAuJlVuZG8JCQl1CithbiAxLjE1IFBvcFVwLi1TRVAxLQkJCTxOb3A+Cit2bm9yZW1lbnUgMS4yMCBQb3BVcC5DdSZ0CQkiK3gKK3Zub3JlbWVudSAxLjMwIFBvcFVwLiZDb3B5CQkiK3kKK2Nub3JlbWVudSAxLjMwIFBvcFVwLiZDb3B5CQk8Qy1ZPgorbm5vcmVtZW51IDEuNDAgUG9wVXAuJlBhc3RlCQkiK2dQCitjbm9yZW1lbnUgMS40MCBQb3BVcC4mUGFzdGUJCTxDLVI+Kwordm5vcmVtZW51IDxzY3JpcHQ+IDEuNDAgUG9wVXAuJlBhc3RlCTxTSUQ+dlBhc3RlCitpbm9yZW1lbnUgPHNjcmlwdD4gMS40MCBQb3BVcC4mUGFzdGUJPFNJRD5pUGFzdGUKK3Zub3JlbWVudSAxLjUwIFBvcFVwLiZEZWxldGUJCXgKK2FuIDEuNTUgUG9wVXAuLVNFUDItCQkJPE5vcD4KK3Zub3JlbWVudSAxLjYwIFBvcFVwLlNlbGVjdFwgQmxvY2t3aXNlCTxDLVY+CithbiAxLjcwIFBvcFVwLlNlbGVjdFwgJldvcmQJCXZhdworYW4gMS44MCBQb3BVcC5TZWxlY3RcICZMaW5lCQlWCithbiAxLjkwIFBvcFVwLlNlbGVjdFwgJkJsb2NrCQk8Qy1WPgorbm9yZW1lbnUgIDxzY3JpcHQ+IDxzaWxlbnQ+IDEuMTAwIFBvcFVwLlNlbGVjdFwgJkFsbAk6PEMtVT5jYWxsIDxTSUQ+U2VsZWN0QWxsKCk8Q1I+Citpbm9yZW1lbnUgPHNjcmlwdD4gPHNpbGVudD4gMS4xMDAgUG9wVXAuU2VsZWN0XCAmQWxsCTxDLU8+OmNhbGwgPFNJRD5TZWxlY3RBbGwoKTxDUj4KK2Nub3JlbWVudSA8c2NyaXB0PiA8c2lsZW50PiAxLjEwMCBQb3BVcC5TZWxlY3RcICZBbGwJPEMtVT5jYWxsIDxTSUQ+U2VsZWN0QWxsKCk8Q1I+CisKKworIiBUaGUgR1VJIHRvb2xiYXIgKGZvciBNUy1XaW5kb3dzIGFuZCBHVEspCitpZiBoYXMoInRvb2xiYXIiKQorICBhbiAxLjEwIFRvb2xCYXIuT3BlbgkJCTpicm93c2UgY29uZmlybSBlPENSPgorICBhbiA8c2lsZW50PiAxLjIwIFRvb2xCYXIuU2F2ZQkJOmlmIGV4cGFuZCgiJSIpID09ICIiPEJhcj5icm93c2UgY29uZmlybSB3PEJhcj5lbHNlPEJhcj5jb25maXJtIHc8QmFyPmVuZGlmPENSPgorICBhbiAxLjMwIFRvb2xCYXIuU2F2ZUFsbAkJOmJyb3dzZSBjb25maXJtIHdhPENSPgorCisgIGlmIGhhcygicHJpbnRlciIpCisgICAgYW4gMS40MCAgIFRvb2xCYXIuUHJpbnQJCTpoYXJkY29weTxDUj4KKyAgICB2dW5tZW51ICAgVG9vbEJhci5QcmludAorICAgIHZub3JlbWVudSBUb29sQmFyLlByaW50CQk6aGFyZGNvcHk8Q1I+CisgIGVsc2VpZiBoYXMoInVuaXgiKQorICAgIGFuIDEuNDAgICBUb29sQmFyLlByaW50CQk6dyAhbHByPENSPgorICAgIHZ1bm1lbnUgICBUb29sQmFyLlByaW50CisgICAgdm5vcmVtZW51IFRvb2xCYXIuUHJpbnQJCTp3ICFscHI8Q1I+CisgIGVuZGlmCisKKyAgYW4gMS40NSBUb29sQmFyLi1zZXAxLQkJPE5vcD4KKyAgYW4gMS41MCBUb29sQmFyLlVuZG8JCQl1CisgIGFuIDEuNjAgVG9vbEJhci5SZWRvCQkJPEMtUj4KKworICBhbiAxLjY1IFRvb2xCYXIuLXNlcDItCQk8Tm9wPgorICB2bm9yZW1lbnUgMS43MCBUb29sQmFyLkN1dAkJIit4CisgIHZub3JlbWVudSAxLjgwIFRvb2xCYXIuQ29weQkJIit5CisgIGNub3JlbWVudSAxLjgwIFRvb2xCYXIuQ29weQkJPEMtWT4KKyAgbm5vcmVtZW51IDEuOTAgVG9vbEJhci5QYXN0ZQkJIitnUAorICBjbm9yZW1lbnUJIFRvb2xCYXIuUGFzdGUJCTxDLVI+KworICB2bm9yZW1lbnUgPHNjcmlwdD4JIFRvb2xCYXIuUGFzdGUJPFNJRD52UGFzdGUKKyAgaW5vcmVtZW51IDxzY3JpcHQ+CSBUb29sQmFyLlBhc3RlCTxTSUQ+aVBhc3RlCisKKyAgaWYgIWhhcygiZ3VpX2F0aGVuYSIpCisgICAgYW4gMS45NSAgIFRvb2xCYXIuLXNlcDMtCQk8Tm9wPgorICAgIGFuIDEuMTAwICBUb29sQmFyLkZpbmQJCTpwcm9tcHRmaW5kPENSPgorICAgIHZ1bm1lbnUgICBUb29sQmFyLkZpbmQKKyAgICB2bm9yZW1lbnUgVG9vbEJhci5GaW5kCQl5OnByb21wdGZpbmQgPEMtUj4iPENSPgorICAgIGFuIDEuMTEwICBUb29sQmFyLkZpbmROZXh0CQluCisgICAgYW4gMS4xMjAgIFRvb2xCYXIuRmluZFByZXYJCU4KKyAgICBhbiAxLjEzMCAgVG9vbEJhci5SZXBsYWNlCQk6cHJvbXB0cmVwbDxDUj4KKyAgICB2dW5tZW51ICAgVG9vbEJhci5SZXBsYWNlCisgICAgdm5vcmVtZW51IFRvb2xCYXIuUmVwbGFjZQkJeTpwcm9tcHRyZXBsIDxDLVI+IjxDUj4KKyAgZW5kaWYKKworaWYgMAkiIGRpc2FibGVkOyBUaGVzZSBhcmUgaW4gdGhlIFdpbmRvd3MgbWVudQorICBhbiAxLjEzNSBUb29sQmFyLi1zZXA0LQkJPE5vcD4KKyAgYW4gMS4xNDAgVG9vbEJhci5OZXcJCQk8Qy1XPm4KKyAgYW4gMS4xNTAgVG9vbEJhci5XaW5TcGxpdAkJPEMtVz5zCisgIGFuIDEuMTYwIFRvb2xCYXIuV2luTWF4CQk6cmVzaXplIDIwMDxDUj4KKyAgYW4gMS4xNzAgVG9vbEJhci5XaW5NaW4JCTpyZXNpemUgMTxDUj4KKyAgYW4gMS4xODAgVG9vbEJhci5XaW5WU3BsaXQJCTxDLVc+dgorICBhbiAxLjE5MCBUb29sQmFyLldpbk1heFdpZHRoCQk8Qy1XPjUwMD4KKyAgYW4gMS4yMDAgVG9vbEJhci5XaW5NaW5XaWR0aAkJPEMtVz4xXHwKKyAgYW4gMS4yMTAgVG9vbEJhci5XaW5DbG9zZQkJOmNsb3NlPENSPgorZW5kaWYKKworICBhbiAxLjIxNSBUb29sQmFyLi1zZXA1LQkJPE5vcD4KKyAgYW4gPHNpbGVudD4gMS4yMjAgVG9vbEJhci5Mb2FkU2Vzbgk6Y2FsbCA8U0lEPkxvYWRWaW1TZXNuKCk8Q1I+CisgIGFuIDxzaWxlbnQ+IDEuMjMwIFRvb2xCYXIuU2F2ZVNlc24JOmNhbGwgPFNJRD5TYXZlVmltU2VzbigpPENSPgorICBhbiAxLjI0MCBUb29sQmFyLlJ1blNjcmlwdAkJOmJyb3dzZSBzbzxDUj4KKworICBhbiAxLjI0NSBUb29sQmFyLi1zZXA2LQkJPE5vcD4KKyAgYW4gMS4yNTAgVG9vbEJhci5NYWtlCQkJOm1ha2U8Q1I+CisgIGFuIDEuMjcwIFRvb2xCYXIuUnVuQ3RhZ3MJCTpleGUgIiEiIC4gZzpjdGFnc19jb21tYW5kPENSPgorICBhbiAxLjI4MCBUb29sQmFyLlRhZ0p1bXAJCWc8Qy1dPgorCisgIGFuIDEuMjk1IFRvb2xCYXIuLXNlcDctCQk8Tm9wPgorICBhbiAxLjMwMCBUb29sQmFyLkhlbHAJCQk6aGVscDxDUj4KKyAgYW4gPHNpbGVudD4gMS4zMTAgVG9vbEJhci5GaW5kSGVscAk6Y2FsbCA8U0lEPkhlbHBmaW5kKCk8Q1I+CisKKyIgT25seSBzZXQgdGhlIHRvb2x0aXBzIGhlcmUgaWYgbm90IGRvbmUgaW4gYSBsYW5ndWFnZSBtZW51IGZpbGUKK2lmIGV4aXN0cygiKkRvX3Rvb2xiYXJfdG1lbnUiKQorICBjYWxsIERvX3Rvb2xiYXJfdG1lbnUoKQorZWxzZQorICBsZXQgZGlkX3Rvb2xiYXJfdG1lbnUgPSAxCisgIHRtZW51IFRvb2xCYXIuT3BlbgkJT3BlbiBmaWxlCisgIHRtZW51IFRvb2xCYXIuU2F2ZQkJU2F2ZSBjdXJyZW50IGZpbGUKKyAgdG1lbnUgVG9vbEJhci5TYXZlQWxsCQlTYXZlIGFsbCBmaWxlcworICB0bWVudSBUb29sQmFyLlByaW50CQlQcmludAorICB0bWVudSBUb29sQmFyLlVuZG8JCVVuZG8KKyAgdG1lbnUgVG9vbEJhci5SZWRvCQlSZWRvCisgIHRtZW51IFRvb2xCYXIuQ3V0CQlDdXQgdG8gY2xpcGJvYXJkCisgIHRtZW51IFRvb2xCYXIuQ29weQkJQ29weSB0byBjbGlwYm9hcmQKKyAgdG1lbnUgVG9vbEJhci5QYXN0ZQkJUGFzdGUgZnJvbSBDbGlwYm9hcmQKKyAgaWYgIWhhcygiZ3VpX2F0aGVuYSIpCisgICAgdG1lbnUgVG9vbEJhci5GaW5kCQlGaW5kLi4uCisgICAgdG1lbnUgVG9vbEJhci5GaW5kTmV4dAlGaW5kIE5leHQKKyAgICB0bWVudSBUb29sQmFyLkZpbmRQcmV2CUZpbmQgUHJldmlvdXMKKyAgICB0bWVudSBUb29sQmFyLlJlcGxhY2UJCUZpbmQgLyBSZXBsYWNlLi4uCisgIGVuZGlmCisgaWYgMAkiIGRpc2FibGVkOyBUaGVzZSBhcmUgaW4gdGhlIFdpbmRvd3MgbWVudQorICB0bWVudSBUb29sQmFyLk5ldwkJTmV3IFdpbmRvdworICB0bWVudSBUb29sQmFyLldpblNwbGl0CVNwbGl0IFdpbmRvdworICB0bWVudSBUb29sQmFyLldpbk1heAkJTWF4aW1pc2UgV2luZG93CisgIHRtZW51IFRvb2xCYXIuV2luTWluCQlNaW5pbWlzZSBXaW5kb3cKKyAgdG1lbnUgVG9vbEJhci5XaW5WU3BsaXQJU3BsaXQgV2luZG93IFZlcnRpY2FsbHkKKyAgdG1lbnUgVG9vbEJhci5XaW5NYXhXaWR0aAlNYXhpbWlzZSBXaW5kb3cgV2lkdGgKKyAgdG1lbnUgVG9vbEJhci5XaW5NaW5XaWR0aAlNaW5pbWlzZSBXaW5kb3cgV2lkdGgKKyAgdG1lbnUgVG9vbEJhci5XaW5DbG9zZQlDbG9zZSBXaW5kb3cKKyBlbmRpZgorICB0bWVudSBUb29sQmFyLkxvYWRTZXNuCUxvYWQgc2Vzc2lvbgorICB0bWVudSBUb29sQmFyLlNhdmVTZXNuCVNhdmUgY3VycmVudCBzZXNzaW9uCisgIHRtZW51IFRvb2xCYXIuUnVuU2NyaXB0CVJ1biBhIFZpbSBTY3JpcHQKKyAgdG1lbnUgVG9vbEJhci5NYWtlCQlNYWtlIGN1cnJlbnQgcHJvamVjdAorICB0bWVudSBUb29sQmFyLlJ1bkN0YWdzCUJ1aWxkIHRhZ3MgaW4gY3VycmVudCBkaXJlY3RvcnkgdHJlZQorICB0bWVudSBUb29sQmFyLlRhZ0p1bXAJCUp1bXAgdG8gdGFnIHVuZGVyIGN1cnNvcgorICB0bWVudSBUb29sQmFyLkhlbHAJCVZpbSBIZWxwCisgIHRtZW51IFRvb2xCYXIuRmluZEhlbHAJU2VhcmNoIFZpbSBIZWxwCitlbmRpZgorCisiIFNlbGVjdCBhIHNlc3Npb24gdG8gbG9hZDsgZGVmYXVsdCB0byBjdXJyZW50IHNlc3Npb24gbmFtZSBpZiBwcmVzZW50CitmdW4hIHM6TG9hZFZpbVNlc24oKQorICBpZiBzdHJsZW4odjp0aGlzX3Nlc3Npb24pID4gMAorICAgIGxldCBuYW1lID0gdjp0aGlzX3Nlc3Npb24KKyAgZWxzZQorICAgIGxldCBuYW1lID0gIlNlc3Npb24udmltIgorICBlbmRpZgorICBleGVjdXRlICJicm93c2Ugc28gIiAuIG5hbWUKK2VuZGZ1bgorCisiIFNlbGVjdCBhIHNlc3Npb24gdG8gc2F2ZTsgZGVmYXVsdCB0byBjdXJyZW50IHNlc3Npb24gbmFtZSBpZiBwcmVzZW50CitmdW4hIHM6U2F2ZVZpbVNlc24oKQorICBpZiBzdHJsZW4odjp0aGlzX3Nlc3Npb24pID09IDAKKyAgICBsZXQgdjp0aGlzX3Nlc3Npb24gPSAiU2Vzc2lvbi52aW0iCisgIGVuZGlmCisgIGV4ZWN1dGUgImJyb3dzZSBta3Nlc3Npb24hICIgLiB2OnRoaXNfc2Vzc2lvbgorZW5kZnVuCisKK2VuZGlmCisKK2VuZGlmICIgIWV4aXN0cygiZGlkX2luc3RhbGxfZGVmYXVsdF9tZW51cyIpCisKKyIgRGVmaW5lIHRoZXNlIGl0ZW1zIGFsd2F5cywgc28gdGhhdCBzeW50YXggY2FuIGJlIHN3aXRjaGVkIG9uIHdoZW4gaXQgd2Fzbid0LgorIiBCdXQgc2tpcCB0aGVtIHdoZW4gdGhlIFN5bnRheCBtZW51IHdhcyBkaXNhYmxlZCBieSB0aGUgdXNlci4KK2lmICFleGlzdHMoImRpZF9pbnN0YWxsX3N5bnRheF9tZW51IikKKyAgYW4gNTAuMjEyICZTeW50YXguJk1hbnVhbAkJOnN5biBtYW51YWw8Q1I+CisgIGFuIDUwLjIxNCAmU3ludGF4LkEmdXRvbWF0aWMJCTpzeW4gb248Q1I+CisgIGFuIDxzaWxlbnQ+IDUwLjIxNiAmU3ludGF4Lm9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZSA6Y2FsbCA8U0lEPlN5bk9uT2ZmKCk8Q1I+CisgIGlmICFleGlzdHMoIipzOlN5bk9uT2ZmIikKKyAgICBmdW4gczpTeW5Pbk9mZigpCisgICAgICBpZiBoYXMoInN5bnRheF9pdGVtcyIpCisJc3luIGNsZWFyCisgICAgICBlbHNlCisJaWYgIWV4aXN0cygiZzpzeW50YXhfb24iKQorCSAgc3luIG1hbnVhbAorCWVuZGlmCisJc2V0IHN5bj1PTgorICAgICAgZW5kaWYKKyAgICBlbmRmdW4KKyAgZW5kaWYKK2VuZGlmCisKKworIiBJbnN0YWxsIHRoZSBTeW50YXggbWVudSBvbmx5IHdoZW4gZmlsZXR5cGUudmltIGhhcyBiZWVuIGxvYWRlZCBvciB3aGVuCisiIG1hbnVhbCBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIGVuYWJsZWQuCisiIEF2b2lkIGluc3RhbGxpbmcgdGhlIFN5bnRheCBtZW51IHR3aWNlLgoraWYgKGV4aXN0cygiZGlkX2xvYWRfZmlsZXR5cGVzIikgfHwgZXhpc3RzKCJzeW50YXhfb24iKSkKKwlcICYmICFleGlzdHMoImRpZF9pbnN0YWxsX3N5bnRheF9tZW51IikKKyAgbGV0IGRpZF9pbnN0YWxsX3N5bnRheF9tZW51ID0gMQorCisiIFNraXAgc2V0dGluZyB1cCB0aGUgaW5kaXZpZHVhbCBzeW50YXggc2VsZWN0aW9uIG1lbnVzIHVubGVzcworIiBkb19zeW50YXhfc2VsX21lbnUgaXMgZGVmaW5lZCAoaXQgdGFrZXMgcXVpdGUgYSBiaXQgb2YgdGltZSkuCitpZiBleGlzdHMoImRvX3N5bnRheF9zZWxfbWVudSIpCisgIHJ1bnRpbWUhIHN5bm1lbnUudmltCitlbHNlCisgIGFuIDUwLjEwICZTeW50YXguJlNob3dcIGZpbGV0eXBlc1wgaW5cIG1lbnUJOmxldCBkb19zeW50YXhfc2VsX21lbnUgPSAxPEJhcj5ydW50aW1lISBzeW5tZW51LnZpbTxCYXI+YXVubWVudSAmU3ludGF4LiZTaG93XCBmaWxldHlwZXNcIGluXCBtZW51PENSPgorICBhbiA1MC4xOTUgJlN5bnRheC4tU0VQMS0JCTxOb3A+CitlbmRpZgorCithbiA1MC4yMTAgJlN5bnRheC4mT2ZmCQkJOnN5biBvZmY8Q1I+CithbiA1MC43MDAgJlN5bnRheC4tU0VQMy0JCTxOb3A+CithbiA1MC43MTAgJlN5bnRheC5DbyZsb3JcIHRlc3QJCTpzcCAkVklNUlVOVElNRS9zeW50YXgvY29sb3J0ZXN0LnZpbTxCYXI+c28gJTxDUj4KK2FuIDUwLjcyMCAmU3ludGF4LiZIaWdobGlnaHRcIHRlc3QJOnJ1bnRpbWUgc3ludGF4L2hpdGVzdC52aW08Q1I+CithbiA1MC43MzAgJlN5bnRheC4mQ29udmVydFwgdG9cIEhUTUwJOnJ1bnRpbWUgc3ludGF4LzJodG1sLnZpbTxDUj4KKworZW5kaWYgIiAhZXhpc3RzKCJkaWRfaW5zdGFsbF9zeW50YXhfbWVudSIpCisKKyIgUmVzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgJ2Nwb3B0aW9ucycuCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKKworIiB2aW06IHNldCBzdz0yIDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvbXN3aW4udmltIGIvcnVudGltZS9tc3dpbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3MmFmMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvbXN3aW4udmltCkBAIC0wLDAgKzEsMTE1IEBACisiIFNldCBvcHRpb25zIGFuZCBhZGQgbWFwcGluZyBzdWNoIHRoYXQgVmltIGJlaGF2ZXMgYSBsb3QgbGlrZSBNUy1XaW5kb3dzCisiCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgY2hhbmdlOgkyMDA0IE1heSAyNgorCisiIHNldCB0aGUgJ2Nwb3B0aW9ucycgdG8gaXRzIFZpbSBkZWZhdWx0CitpZiAxCSIgb25seSBkbyB0aGlzIHdoZW4gY29tcGlsZWQgd2l0aCBleHByZXNzaW9uIGV2YWx1YXRpb24KKyAgbGV0IHM6c2F2ZV9jcG8gPSAmY3BvcHRpb25zCitlbmRpZgorc2V0IGNwbyZ2aW0KKworIiBzZXQgJ3NlbGVjdGlvbicsICdzZWxlY3Rtb2RlJywgJ21vdXNlbW9kZWwnIGFuZCAna2V5bW9kZWwnIGZvciBNUy1XaW5kb3dzCitiZWhhdmUgbXN3aW4KKworIiBiYWNrc3BhY2UgYW5kIGN1cnNvciBrZXlzIHdyYXAgdG8gcHJldmlvdXMvbmV4dCBsaW5lCitzZXQgYmFja3NwYWNlPWluZGVudCxlb2wsc3RhcnQgd2hpY2h3cmFwKz08LD4sWyxdCisKKyIgYmFja3NwYWNlIGluIFZpc3VhbCBtb2RlIGRlbGV0ZXMgc2VsZWN0aW9uCit2bm9yZW1hcCA8QlM+IGQKKworIiBDVFJMLVggYW5kIFNISUZULURlbCBhcmUgQ3V0Cit2bm9yZW1hcCA8Qy1YPiAiK3gKK3Zub3JlbWFwIDxTLURlbD4gIit4CisKKyIgQ1RSTC1DIGFuZCBDVFJMLUluc2VydCBhcmUgQ29weQordm5vcmVtYXAgPEMtQz4gIit5Cit2bm9yZW1hcCA8Qy1JbnNlcnQ+ICIreQorCisiIENUUkwtViBhbmQgU0hJRlQtSW5zZXJ0IGFyZSBQYXN0ZQorbWFwIDxDLVY+CQkiK2dQCittYXAgPFMtSW5zZXJ0PgkJIitnUAorCitjbWFwIDxDLVY+CQk8Qy1SPisKK2NtYXAgPFMtSW5zZXJ0PgkJPEMtUj4rCisKKyIgUGFzdGluZyBibG9ja3dpc2UgYW5kIGxpbmV3aXNlIHNlbGVjdGlvbnMgaXMgbm90IHBvc3NpYmxlIGluIEluc2VydCBhbmQKKyIgVmlzdWFsIG1vZGUgd2l0aG91dCB0aGUgK3ZpcnR1YWxlZGl0IGZlYXR1cmUuICBUaGV5IGFyZSBwYXN0ZWQgYXMgaWYgdGhleQorIiB3ZXJlIGNoYXJhY3Rlcndpc2UgaW5zdGVhZC4KKyIgTm90ZTogdGhlIHNhbWUgc3R1ZmYgYXBwZWFycyBpbiBtZW51LnZpbS4KK2lmIGhhcygidmlydHVhbGVkaXQiKQorICBubm9yZW1hcCA8c2lsZW50PiA8U0lEPlBhc3RlIDpjYWxsIDxTSUQ+UGFzdGUoKTxDUj4KKyAgZnVuYyEgPFNJRD5QYXN0ZSgpCisgICAgbGV0IG92ZSA9ICZ2ZQorICAgIHNldCB2ZT1hbGwKKyAgICBub3JtYWwgYF4KKyAgICBpZiBAKyAhPSAnJworICAgICAgbm9ybWFsICIrZ1AKKyAgICBlbmRpZgorICAgIGxldCBjID0gY29sKCIuIikKKyAgICBub3JtYWwgaRsKKyAgICBpZiBjb2woIi4iKSA8IGMJIiBjb21wZW5zYXRlIGZvciBpPEVTQz4gbW92aW5nIHRoZSBjdXJzb3IgbGVmdAorICAgICAgbm9ybWFsIGwKKyAgICBlbmRpZgorICAgIGxldCAmdmUgPSBvdmUKKyAgZW5kZnVuYworICBpbm9yZW1hcCA8c2NyaXB0PiA8Qy1WPgl4PEJTPjxFc2M+PFNJRD5QYXN0ZWdpCisgIHZub3JlbWFwIDxzY3JpcHQ+IDxDLVY+CSItYzxFc2M+PFNJRD5QYXN0ZQorZWxzZQorICBubm9yZW1hcCA8c2lsZW50PiA8U0lEPlBhc3RlCSI9QCsuJ3h5JzxDUj5nUEZ4Il8yeAorICBpbm9yZW1hcCA8c2NyaXB0PiA8Qy1WPgl4PEVzYz48U0lEPlBhc3RlIl9zCisgIHZub3JlbWFwIDxzY3JpcHQ+IDxDLVY+CSItYzxFc2M+Z2l4PEVzYz48U0lEPlBhc3RlIl94CitlbmRpZgoraW1hcCA8Uy1JbnNlcnQ+CQk8Qy1WPgordm1hcCA8Uy1JbnNlcnQ+CQk8Qy1WPgorCisiIFVzZSBDVFJMLVEgdG8gZG8gd2hhdCBDVFJMLVYgdXNlZCB0byBkbworbm9yZW1hcCA8Qy1RPgkJPEMtVj4KKworIiBVc2UgQ1RSTC1TIGZvciBzYXZpbmcsIGFsc28gaW4gSW5zZXJ0IG1vZGUKK25vcmVtYXAgPEMtUz4JCTp1cGRhdGU8Q1I+Cit2bm9yZW1hcCA8Qy1TPgkJPEMtQz46dXBkYXRlPENSPgoraW5vcmVtYXAgPEMtUz4JCTxDLU8+OnVwZGF0ZTxDUj4KKworIiBGb3IgQ1RSTC1WIHRvIHdvcmsgYXV0b3NlbGVjdCBtdXN0IGJlIG9mZi4KKyIgT24gVW5peCB3ZSBoYXZlIHR3byBzZWxlY3Rpb25zLCBhdXRvc2VsZWN0IGNhbiBiZSB1c2VkLgoraWYgIWhhcygidW5peCIpCisgIHNldCBndWlvcHRpb25zLT1hCitlbmRpZgorCisiIENUUkwtWiBpcyBVbmRvOyBub3QgaW4gY21kbGluZSB0aG91Z2gKK25vcmVtYXAgPEMtWj4gdQoraW5vcmVtYXAgPEMtWj4gPEMtTz51CisKKyIgQ1RSTC1ZIGlzIFJlZG8gKGFsdGhvdWdoIG5vdCByZXBlYXQpOyBub3QgaW4gY21kbGluZSB0aG91Z2gKK25vcmVtYXAgPEMtWT4gPEMtUj4KK2lub3JlbWFwIDxDLVk+IDxDLU8+PEMtUj4KKworIiBBbHQtU3BhY2UgaXMgU3lzdGVtIG1lbnUKK2lmIGhhcygiZ3VpIikKKyAgbm9yZW1hcCA8TS1TcGFjZT4gOnNpbWFsdCB+PENSPgorICBpbm9yZW1hcCA8TS1TcGFjZT4gPEMtTz46c2ltYWx0IH48Q1I+CisgIGNub3JlbWFwIDxNLVNwYWNlPiA8Qy1DPjpzaW1hbHQgfjxDUj4KK2VuZGlmCisKKyIgQ1RSTC1BIGlzIFNlbGVjdCBhbGwKK25vcmVtYXAgPEMtQT4gZ2dnSDxDLU8+RworaW5vcmVtYXAgPEMtQT4gPEMtTz5nZzxDLU8+Z0g8Qy1PPkcKK2Nub3JlbWFwIDxDLUE+IDxDLUM+Z2dnSDxDLU8+RworCisiIENUUkwtVGFiIGlzIE5leHQgd2luZG93Citub3JlbWFwIDxDLVRhYj4gPEMtVz53Citpbm9yZW1hcCA8Qy1UYWI+IDxDLU8+PEMtVz53Citjbm9yZW1hcCA8Qy1UYWI+IDxDLUM+PEMtVz53CisKKyIgQ1RSTC1GNCBpcyBDbG9zZSB3aW5kb3cKK25vcmVtYXAgPEMtRjQ+IDxDLVc+YworaW5vcmVtYXAgPEMtRjQ+IDxDLU8+PEMtVz5jCitjbm9yZW1hcCA8Qy1GND4gPEMtQz48Qy1XPmMKKworIiByZXN0b3JlICdjcG9wdGlvbnMnCitzZXQgY3BvJgoraWYgMQorICBsZXQgJmNwb3B0aW9ucyA9IHM6c2F2ZV9jcG8KKyAgdW5sZXQgczpzYXZlX2NwbworZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvb3B0d2luLnZpbSBiL3J1bnRpbWUvb3B0d2luLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWY0NTExCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9vcHR3aW4udmltCkBAIC0wLDAgKzEsMTE5MyBAQAorIiBUaGVzZSBjb21tYW5kcyBjcmVhdGUgdGhlIG9wdGlvbiB3aW5kb3cuCisiCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDA0IE1heSAwNAorCisiIElmIHRoZXJlIGFscmVhZHkgaXMgYW4gb3B0aW9uIHdpbmRvdywganVtcCB0byB0aGF0IG9uZS4KK2lmIGJ1Zndpbm5yKCJvcHRpb24td2luZG93IikgPiAwCisgIGxldCBzOnRoaXN3aW4gPSB3aW5ucigpCisgIHdoaWxlIDEKKyAgICBpZiBAJSA9PSAib3B0aW9uLXdpbmRvdyIKKyAgICAgIGZpbmlzaAorICAgIGVuZGlmCisgICAgZXhlICJub3JtISBcPEMtVz53IgorICAgIGlmIHM6dGhpc3dpbiA9PSB3aW5ucigpCisgICAgICBicmVhaworICAgIGVuZGlmCisgIGVuZHdoaWxlCitlbmRpZgorCisiIE1ha2Ugc3VyZSB0aGUgJzwnIGZsYWcgaXMgbm90IGluY2x1ZGVkIGluICdjcG9wdGlvbnMnLCBvdGhlcndpc2UgPENSPiB3b3VsZAorIiBub3QgYmUgcmVjb2duaXplZC4gIFNlZSAiOmhlbHAgJ2Nwb3B0aW9ucyciLgorbGV0IHM6Y3BvX3NhdmUgPSAmY3BvCitzZXQgY3BvJnZpbQorCisiIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIDxDUj4gaXMgaGl0IGluIHRoZSBvcHRpb24td2luZG93CitmdW4hIDxTSUQ+Q1IoKQorCisgICIgSWYgb24gYSBjb250aW51ZWQgY29tbWVudCBsaW5lLCBnbyBiYWNrIHRvIHRoZSBmaXJzdCBjb21tZW50IGxpbmUKKyAgbGV0IGxudW0gPSBsaW5lKCIuIikKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCisgIHdoaWxlIGxpbmVbMF0gPT0gIlx0IgorICAgIGxldCBsbnVtID0gbG51bSAtIDEKKyAgICBsZXQgbGluZSA9IGdldGxpbmUobG51bSkKKyAgZW5kd2hpbGUKKworICAiIDxDUj4gb24gYSAic2V0IiBsaW5lIGV4ZWN1dGVzIHRoZSBvcHRpb24gbGluZQorICBpZiBtYXRjaChsaW5lLCAiXiBcdHNldCAiKSA+PSAwCisKKyAgICAiIEZvciBhIGxvY2FsIG9wdGlvbjogZ28gdG8gdGhlIHByZXZpb3VzIHdpbmRvdworICAgICIgSWYgdGhpcyBpcyBhIGhlbHAgd2luZG93LCBnbyB0byB0aGUgd2luZG93IGJlbG93IGl0CisgICAgbGV0IHRoaXN3aW4gPSB3aW5ucigpCisgICAgbGV0IGxvY2FsID0gPFNJRD5GaW5kKGxudW0pCisgICAgaWYgbG9jYWwgPj0gMAorICAgICAgZXhlIGxpbmUKKyAgICAgIGNhbGwgPFNJRD5VcGRhdGUobG51bSwgbGluZSwgbG9jYWwsIHRoaXN3aW4pCisgICAgZW5kaWYKKworICAiIDxDUj4gb24gYSAib3B0aW9uIiBsaW5lIHNob3dzIGhlbHAgZm9yIHRoYXQgb3B0aW9uCisgIGVsc2VpZiBtYXRjaChsaW5lLCAiXlthLXpdIikgPj0gMAorICAgIGxldCBuYW1lID0gc3Vic3RpdHV0ZShsaW5lLCAnXChbXlx0XSpcKS4qJywgJ1wxJywgIiIpCisgICAgZXhlICJoZWxwICciIC4gbmFtZSAuICInIgorCisgICIgPENSPiBvbiBhbiBpbmRleCBsaW5lIGp1bXBzIHRvIHRoZSBncm91cAorICBlbHNlaWYgbWF0Y2gobGluZSwgJ14gXD1bMC05XScpID49IDAKKyAgICBleGUgIm5vcm0hIC8iIC4gbGluZSAuICJcPENSPnp0IgorICBlbmRpZgorZW5kZnVuCisKKyIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gPFNwYWNlPiBpcyBoaXQgaW4gdGhlIG9wdGlvbi13aW5kb3cKK2Z1biEgPFNJRD5TcGFjZSgpCisKKyAgbGV0IGxudW0gPSBsaW5lKCIuIikKKyAgbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCisKKyAgIiA8U3BhY2U+IG9uIGEgInNldCIgbGluZSByZWZyZXNoZXMgdGhlIG9wdGlvbiBsaW5lCisgIGlmIG1hdGNoKGxpbmUsICJeIFx0c2V0ICIpID49IDAKKworICAgICIgRm9yIGEgbG9jYWwgb3B0aW9uOiBnbyB0byB0aGUgcHJldmlvdXMgd2luZG93CisgICAgIiBJZiB0aGlzIGlzIGEgaGVscCB3aW5kb3csIGdvIHRvIHRoZSB3aW5kb3cgYmVsb3cgaXQKKyAgICBsZXQgdGhpc3dpbiA9IHdpbm5yKCkKKyAgICBsZXQgbG9jYWwgPSA8U0lEPkZpbmQobG51bSkKKyAgICBpZiBsb2NhbCA+PSAwCisgICAgICBjYWxsIDxTSUQ+VXBkYXRlKGxudW0sIGxpbmUsIGxvY2FsLCB0aGlzd2luKQorICAgIGVuZGlmCisKKyAgZW5kaWYKK2VuZGZ1bgorCisiIGZpbmQgdGhlIHdpbmRvdyBpbiB3aGljaCB0aGUgb3B0aW9uIGFwcGxpZXMKKyIgcmV0dXJucyAwIGZvciBnbG9iYWwgb3B0aW9uLCAxIGZvciBsb2NhbCBvcHRpb24sIC0xIGZvciBlcnJvcgorZnVuISA8U0lEPkZpbmQobG51bSkKKyAgICBpZiBnZXRsaW5lKGE6bG51bSAtIDEpID1+ICIobG9jYWwgdG8iCisgICAgICBsZXQgbG9jYWwgPSAxCisgICAgICBsZXQgdGhpc3dpbiA9IHdpbm5yKCkKKyAgICAgIGV4ZSAibm9ybSEgXDxDLVc+cCIKKyAgICAgIGlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpICYmIGI6Y3VycmVudF9zeW50YXggPT0gImhlbHAiCisJZXhlICJub3JtISBcPEMtVz5qIgorCWlmIHdpbm5yKCkgPT0gdGhpc3dpbgorCSAgZXhlICJub3JtISBcPEMtVz5qIgorCWVuZGlmCisgICAgICBlbmRpZgorICAgIGVsc2UKKyAgICAgIGxldCBsb2NhbCA9IDAKKyAgICBlbmRpZgorICAgIGlmIGxvY2FsICYmICh3aW5ucigpID09IHRoaXN3aW4gfHwgKGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisJXCAmJiBiOmN1cnJlbnRfc3ludGF4ID09ICJoZWxwIikpCisgICAgICBlY2hvICJEb24ndCBrbm93IGluIHdoaWNoIHdpbmRvdyIKKyAgICAgIGxldCBsb2NhbCA9IC0xCisgICAgZW5kaWYKKyAgICByZXR1cm4gbG9jYWwKK2VuZGZ1bgorCisiIFVwZGF0ZSBhICJzZXQiIGxpbmUgaW4gdGhlIG9wdGlvbiB3aW5kb3cKK2Z1biEgPFNJRD5VcGRhdGUobG51bSwgbGluZSwgbG9jYWwsIHRoaXN3aW4pCisgICIgZ2V0IHRoZSBuZXcgdmFsdWUgb2YgdGhlIG9wdGlvbiBhbmQgdXBkYXRlIHRoZSBvcHRpb24gd2luZG93IGxpbmUKKyAgaWYgbWF0Y2goYTpsaW5lLCAiPSIpID49IDAKKyAgICBsZXQgbmFtZSA9IHN1YnN0aXR1dGUoYTpsaW5lLCAnXiBcdHNldCBcKFtePV0qXCk9LionLCAnXDEnLCAiIikKKyAgZWxzZQorICAgIGxldCBuYW1lID0gc3Vic3RpdHV0ZShhOmxpbmUsICdeIFx0c2V0IFwobm9cKVw9XChbYS16XSpcKS4qJywgJ1wyJywgIiIpCisgIGVuZGlmCisgIGlmIG5hbWUgPT0gInB0IiAmJiAmcHQgPX4gIlx4ODAiCisgICAgbGV0IHZhbCA9IDxTSUQ+UFR2YWx1ZSgpCisgIGVsc2UKKyAgICBleGUgImxldCB2YWwgPSBzdWJzdGl0dXRlKCYiIC4gbmFtZSAuICcsICJbIFxcdFxcXFxcInxdIiwgIlxcXFxcXDAiLCAiZyIpJworICBlbmRpZgorICBpZiBhOmxvY2FsCisgICAgZXhlICJub3JtISAiIC4gYTp0aGlzd2luIC4gIlw8Qy1XPnciCisgIGVuZGlmCisgIGlmIG1hdGNoKGE6bGluZSwgIj0iKSA+PSAwIHx8ICh2YWwgIT0gIjAiICYmIHZhbCAhPSAiMSIpCisgICAgY2FsbCBzZXRsaW5lKGE6bG51bSwgIiBcdHNldCAiIC4gbmFtZSAuICI9IiAuIHZhbCkKKyAgZWxzZQorICAgIGlmIHZhbAorICAgICAgY2FsbCBzZXRsaW5lKGE6bG51bSwgIiBcdHNldCAiIC4gbmFtZSAuICJcdG5vIiAuIG5hbWUpCisgICAgZWxzZQorICAgICAgY2FsbCBzZXRsaW5lKGE6bG51bSwgIiBcdHNldCBubyIgLiBuYW1lIC4gIlx0IiAuIG5hbWUpCisgICAgZW5kaWYKKyAgZW5kaWYKKyAgc2V0IG5vbW9kaWZpZWQKK2VuZGZ1bgorCisiIFJlc2V0ICd0aXRsZScgYW5kICdpY29uJyB0byBtYWtlIGl0IHdvcmsgZmFzdGVyLgorbGV0IHM6b2xkX3RpdGxlID0gJnRpdGxlCitsZXQgczpvbGRfaWNvbiA9ICZpY29uCitsZXQgczpvbGRfc2MgPSAmc2MKK2xldCBzOm9sZF9ydSA9ICZydQorc2V0IG5vdGl0bGUgbm9pY29uIG5vc2Mgbm9ydQorCisiIElmIHRoZSBjdXJyZW50IHdpbmRvdyBpcyBhIGhlbHAgd2luZG93LCB0cnkgZmluZGluZyBhIG5vbi1oZWxwIHdpbmRvdy4KKyIgUmVsaWVzIG9uIHN5bnRheCBoaWdobGlnaHRpbmcgdG8gYmUgc3dpdGNoZWQgb24uCitsZXQgczp0aGlzd2luID0gd2lubnIoKQord2hpbGUgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikgJiYgYjpjdXJyZW50X3N5bnRheCA9PSAiaGVscCIKKyAgZXhlICJub3JtISBcPEMtVz53IgorICBpZiBzOnRoaXN3aW4gPT0gd2lubnIoKQorICAgIGJyZWFrCisgIGVuZGlmCitlbmR3aGlsZQorCisiIE9wZW4gdGhlIHdpbmRvdworbmV3IG9wdGlvbi13aW5kb3cKK3NldGxvY2FsIHRzPTE1IHR3PTAKKworIiBJbnNlcnQgaGVscCBhbmQgYSAic2V0IiBjb21tYW5kIGZvciBlYWNoIG9wdGlvbi4KK2NhbGwgYXBwZW5kKDAsICciIEVhY2ggInNldCIgbGluZSBzaG93cyB0aGUgY3VycmVudCB2YWx1ZSBvZiBhbiBvcHRpb24gKG9uIHRoZSBsZWZ0KS4nKQorY2FsbCBhcHBlbmQoMSwgJyIgSGl0IDxDUj4gb24gYSAic2V0IiBsaW5lIHRvIGV4ZWN1dGUgaXQuJykKK2NhbGwgYXBwZW5kKDIsICciICAgICAgICAgICAgQSBib29sZWFuIG9wdGlvbiB3aWxsIGJlIHRvZ2dsZWQuJykKK2NhbGwgYXBwZW5kKDMsICciICAgICAgICAgICAgRm9yIG90aGVyIG9wdGlvbnMgeW91IGNhbiBlZGl0IHRoZSB2YWx1ZS4nKQorY2FsbCBhcHBlbmQoNCwgJyIgSGl0IDxDUj4gb24gYSBoZWxwIGxpbmUgdG8gb3BlbiBhIGhlbHAgd2luZG93IG9uIHRoaXMgb3B0aW9uLicpCitjYWxsIGFwcGVuZCg1LCAnIiBIaXQgPENSPiBvbiBhbiBpbmRleCBsaW5lIHRvIGp1bXAgdGhlcmUuJykKK2NhbGwgYXBwZW5kKDYsICciIEhpdCA8U3BhY2U+IG9uIGEgInNldCIgbGluZSB0byByZWZyZXNoIGl0LicpCisKKyIgVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgb2Z0ZW4gYmVsb3cuICBLZWVwIHRoZW0gZmFzdCEKKworIiBJbml0IGEgbG9jYWwgYmluYXJ5IG9wdGlvbgorZnVuISA8U0lEPkJpbk9wdGlvbkwobmFtZSkKKyAgZXhlICJub3JtISBcPEMtVz5wIgorICBleGUgImxldCB2YWwgPSAmIiAuIGE6bmFtZQorICBleGUgIm5vcm0hIFw8Qy1XPnAiCisgIGNhbGwgYXBwZW5kKCIkIiwgc3Vic3RpdHV0ZShzdWJzdGl0dXRlKCIgXHRzZXQgIiAuIHZhbCAuIGE6bmFtZSAuICJcdCIgLgorCVwhdmFsIC4gYTpuYW1lLCAiMCIsICJubyIsICIiKSwgIjEiLCAiIiwgIiIpKQorZW5kZnVuCisKKyIgSW5pdCBhIGdsb2JhbCBiaW5hcnkgb3B0aW9uCitmdW4hIDxTSUQ+QmluT3B0aW9uRyhuYW1lLCB2YWwpCisgIGNhbGwgYXBwZW5kKCIkIiwgc3Vic3RpdHV0ZShzdWJzdGl0dXRlKCIgXHRzZXQgIiAuIGE6dmFsIC4gYTpuYW1lIC4gIlx0IiAuCisJXCFhOnZhbCAuIGE6bmFtZSwgIjAiLCAibm8iLCAiIiksICIxIiwgIiIsICIiKSkKK2VuZGZ1bgorCisiIEluaXQgYSBsb2NhbCBzdHJpbmcgb3B0aW9uCitmdW4hIDxTSUQ+T3B0aW9uTChuYW1lKQorICBleGUgIm5vcm0hIFw8Qy1XPnAiCisgIGV4ZSAibGV0IHZhbCA9IHN1YnN0aXR1dGUoJiIgLiBhOm5hbWUgLiAnLCAiWyBcXHRcXFxcXCJ8XSIsICJcXFxcXFwwIiwgImciKScKKyAgZXhlICJub3JtISBcPEMtVz5wIgorICBjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgIiAuIGE6bmFtZSAuICI9IiAuIHZhbCkKK2VuZGZ1bgorCisiIEluaXQgYSBnbG9iYWwgc3RyaW5nIG9wdGlvbgorZnVuISA8U0lEPk9wdGlvbkcobmFtZSwgdmFsKQorICBjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgIiAuIGE6bmFtZSAuICI9IiAuIHN1YnN0aXR1dGUoYTp2YWwsICdbIFx0XFwifF0nLAorCVwgJ1xcXDAnLCAiZyIpKQorZW5kZnVuCisKK2xldCBzOmlkeCA9IDEKK2xldCBzOmxudW0gPSBsaW5lKCIkIikKK2NhbGwgYXBwZW5kKCIkIiwgIiIpCisKK2Z1biEgPFNJRD5IZWFkZXIodGV4dCkKKyAgbGV0IGxpbmUgPSBzOmlkeCAuICIgIiAuIGE6dGV4dAorICBpZiBzOmlkeCA8IDEwCisgICAgbGV0IGxpbmUgPSAiICIgLiBsaW5lCisgIGVuZGlmCisgIGNhbGwgYXBwZW5kKCIkIiwgIiIpCisgIGNhbGwgYXBwZW5kKCIkIiwgbGluZSkKKyAgY2FsbCBhcHBlbmQoIiQiLCAiIikKKyAgY2FsbCBhcHBlbmQoczpsbnVtLCBsaW5lKQorICBsZXQgczppZHggPSBzOmlkeCArIDEKKyAgbGV0IHM6bG51bSA9IHM6bG51bSArIDEKK2VuZGZ1bgorCisiIEdldCB0aGUgdmFsdWUgb2YgJ3Bhc3RldG9nZ2xlJy4gIEl0IGNvdWxkIGJlIGEgc3BlY2lhbCBrZXkuCitmdW4hIDxTSUQ+UFR2YWx1ZSgpCisgIHJlZGlyIEBhCisgIHNpbGVudCBzZXQgcHQKKyAgcmVkaXIgRU5ECisgIHJldHVybiBzdWJzdGl0dXRlKEBhLCAnW149XSo9XCguKlwpJywgJ1wxJywgIiIpCitlbmRmdW4KKworIiBSZXN0b3JlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiAnY3BvcHRpb25zJyBoZXJlLCBpdCdzIHVzZWQgYmVsb3cuCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKKworIiBMaXN0IG9mIGFsbCBvcHRpb25zLCBvcmdhbml6ZWQgYnkgZnVuY3Rpb24uCisiIFRoZSB0ZXh0IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGtub3cgd2hhdCB0aGUgb3B0aW9uIGlzIHVzZWQgZm9yLgorCitjYWxsIDxTSUQ+SGVhZGVyKCJpbXBvcnRhbnQiKQorY2FsbCBhcHBlbmQoIiQiLCAiY29tcGF0aWJsZVx0YmVoYXZlIHZlcnkgVmkgY29tcGF0aWJsZSAobm90IGFkdmlzYWJsZSkiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoImNwIiwgJmNwKQorY2FsbCBhcHBlbmQoIiQiLCAiY3BvcHRpb25zXHRsaXN0IG9mIGZsYWdzIHRvIHNwZWNpZnkgVmkgY29tcGF0aWJpbGl0eSIpCitjYWxsIDxTSUQ+T3B0aW9uRygiY3BvIiwgJmNwbykKK2NhbGwgYXBwZW5kKCIkIiwgImluc2VydG1vZGVcdHVzZSBJbnNlcnQgbW9kZSBhcyB0aGUgZGVmYXVsdCBtb2RlIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJpbSIsICZpbSkKK2NhbGwgYXBwZW5kKCIkIiwgInBhc3RlXHRwYXN0ZSBtb2RlLCBpbnNlcnQgdHlwZWQgdGV4dCBsaXRlcmFsbHkiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoInBhc3RlIiwgJnBhc3RlKQorY2FsbCBhcHBlbmQoIiQiLCAicGFzdGV0b2dnbGVcdGtleSBzZXF1ZW5jZSB0byB0b2dnbGUgcGFzdGUgbW9kZSIpCitpZiAmcHQgPX4gIlx4ODAiCisgIGNhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCBwdD0iIC4gPFNJRD5QVHZhbHVlKCkpCitlbHNlCisgIGNhbGwgPFNJRD5PcHRpb25HKCJwdCIsICZwdCkKK2VuZGlmCitjYWxsIGFwcGVuZCgiJCIsICJydW50aW1lcGF0aFx0bGlzdCBvZiBkaXJlY3RvcmllcyB1c2VkIGZvciBydW50aW1lIGZpbGVzIGFuZCBwbHVnaW5zIikKK2NhbGwgPFNJRD5PcHRpb25HKCJydHAiLCAmcnRwKQorY2FsbCBhcHBlbmQoIiQiLCAiaGVscGZpbGVcdG5hbWUgb2YgdGhlIG1haW4gaGVscCBmaWxlIikKK2NhbGwgPFNJRD5PcHRpb25HKCJoZiIsICZoZikKKworCitjYWxsIDxTSUQ+SGVhZGVyKCJtb3ZpbmcgYXJvdW5kLCBzZWFyY2hpbmcgYW5kIHBhdHRlcm5zIikKK2NhbGwgYXBwZW5kKCIkIiwgIndoaWNod3JhcFx0bGlzdCBvZiBmbGFncyBzcGVjaWZ5aW5nIHdoaWNoIGNvbW1hbmRzIHdyYXAgdG8gYW5vdGhlciBsaW5lIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIHdpbmRvdykiKQorY2FsbCA8U0lEPk9wdGlvbkwoInd3IikKK2NhbGwgYXBwZW5kKCIkIiwgInN0YXJ0b2ZsaW5lXHRtYW55IGp1bXAgY29tbWFuZHMgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBub24tYmxhbmsiKQorY2FsbCBhcHBlbmQoIiQiLCAiXHRjaGFyYWN0ZXIgb2YgYSBsaW5lIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJzb2wiLCAmc29sKQorY2FsbCBhcHBlbmQoIiQiLCAicGFyYWdyYXBoc1x0bnJvZmYgbWFjcm8gbmFtZXMgdGhhdCBzZXBhcmF0ZSBwYXJhZ3JhcGhzIikKK2NhbGwgPFNJRD5PcHRpb25HKCJwYXJhIiwgJnBhcmEpCitjYWxsIGFwcGVuZCgiJCIsICJzZWN0aW9uc1x0bnJvZmYgbWFjcm8gbmFtZXMgdGhhdCBzZXBhcmF0ZSBzZWN0aW9ucyIpCitjYWxsIDxTSUQ+T3B0aW9uRygic2VjdCIsICZzZWN0KQorY2FsbCBhcHBlbmQoIiQiLCAicGF0aFx0bGlzdCBvZiBkaXJlY3RvcnkgbmFtZXMgdXNlZCBmb3IgZmlsZSBzZWFyY2hpbmciKQorY2FsbCBhcHBlbmQoIiQiLCAiXHQoZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPk9wdGlvbkcoInBhIiwgJnBhKQorY2FsbCBhcHBlbmQoIiQiLCAiY2RwYXRoXHRsaXN0IG9mIGRpcmVjdG9yeSBuYW1lcyB1c2VkIGZvciA6Y2QiKQorY2FsbCA8U0lEPk9wdGlvbkcoImNkIiwgJmNkKQoraWYgaGFzKCJuZXRiZWFuc19pbnRnIikgfHwgaGFzKCJzdW5fd29ya3Nob3AiKQorICBjYWxsIGFwcGVuZCgiJCIsICJhdXRvY2hkaXJcdGNoYW5nZSB0byBkaXJlY3Rvcnkgb2YgZmlsZSBpbiBidWZmZXIiKQorICBjYWxsIDxTSUQ+QmluT3B0aW9uRygiYWNkIiwgJmFjZCkKK2VuZGlmCitjYWxsIGFwcGVuZCgiJCIsICJ3cmFwc2Nhblx0c2VhcmNoIGNvbW1hbmRzIHdyYXAgYXJvdW5kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygid3MiLCAmd3MpCitjYWxsIGFwcGVuZCgiJCIsICJpbmNzZWFyY2hcdHNob3cgbWF0Y2ggZm9yIHBhcnRseSB0eXBlZCBzZWFyY2ggY29tbWFuZCIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygiaXMiLCAmaXMpCitjYWxsIGFwcGVuZCgiJCIsICJtYWdpY1x0Y2hhbmdlIHRoZSB3YXkgYmFja3NsYXNoZXMgYXJlIHVzZWQgaW4gc2VhcmNoIHBhdHRlcm5zIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJtYWdpYyIsICZtYWdpYykKK2NhbGwgYXBwZW5kKCIkIiwgImlnbm9yZWNhc2VcdGlnbm9yZSBjYXNlIHdoZW4gdXNpbmcgYSBzZWFyY2ggcGF0dGVybiIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygiaWMiLCAmaWMpCitjYWxsIGFwcGVuZCgiJCIsICJzbWFydGNhc2VcdG92ZXJyaWRlICdpZ25vcmVjYXNlJyB3aGVuIHBhdHRlcm4gaGFzIHVwcGVyIGNhc2UgY2hhcmFjdGVycyIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygic2NzIiwgJnNjcykKK2NhbGwgYXBwZW5kKCIkIiwgImNhc2VtYXBcdFdoYXQgbWV0aG9kIHRvIHVzZSBmb3IgY2hhbmdpbmcgY2FzZSBvZiBsZXR0ZXJzIikKK2NhbGwgPFNJRD5PcHRpb25HKCJjbXAiLCAmY21wKQorY2FsbCBhcHBlbmQoIiQiLCAiZGVmaW5lXHRwYXR0ZXJuIGZvciBhIG1hY3JvIGRlZmluaXRpb24gbGluZSIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyKSIpCitjYWxsIDxTSUQ+T3B0aW9uRygiZGVmIiwgJmRlZikKK2lmIGhhcygiZmluZF9pbl9wYXRoIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiaW5jbHVkZVx0cGF0dGVybiBmb3IgYW4gaW5jbHVkZS1maWxlIGxpbmUiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKKyAgY2FsbCA8U0lEPk9wdGlvbkwoImluYyIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImluY2x1ZGVleHByXHRleHByZXNzaW9uIHVzZWQgdG8gdHJhbnNmb3JtIGFuIGluY2x1ZGUgbGluZSB0byBhIGZpbGUgbmFtZSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorICBjYWxsIDxTSUQ+T3B0aW9uTCgiaW5leCIpCitlbmRpZgorCisKK2NhbGwgPFNJRD5IZWFkZXIoInRhZ3MiKQorY2FsbCBhcHBlbmQoIiQiLCAidGFnYnNlYXJjaFx0dXNlIGJpbmFyeSBzZWFyY2hpbmcgaW4gdGFncyBmaWxlcyIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygidGJzIiwgJnRicykKK2NhbGwgYXBwZW5kKCIkIiwgInRhZ2xlbmd0aFx0bnVtYmVyIG9mIHNpZ25pZmljYW50IGNoYXJhY3RlcnMgaW4gYSB0YWcgbmFtZSBvciB6ZXJvIikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCB0bD0iIC4gJnRsKQorY2FsbCBhcHBlbmQoIiQiLCAidGFnc1x0bGlzdCBvZiBmaWxlIG5hbWVzIHRvIHNlYXJjaCBmb3IgdGFncyIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyKSIpCitjYWxsIDxTSUQ+T3B0aW9uRygidGFnIiwgJnRhZykKK2NhbGwgYXBwZW5kKCIkIiwgInRhZ3JlbGF0aXZlXHRmaWxlIG5hbWVzIGluIGEgdGFncyBmaWxlIGFyZSByZWxhdGl2ZSB0byB0aGUgdGFncyBmaWxlIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJ0ciIsICZ0cikKK2NhbGwgYXBwZW5kKCIkIiwgInRhZ3N0YWNrXHRhIDp0YWcgY29tbWFuZCB3aWxsIHVzZSB0aGUgdGFnc3RhY2siKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoInRnc3QiLCAmdGdzdCkKK2NhbGwgYXBwZW5kKCIkIiwgInNob3dmdWxsdGFnXHR3aGVuIGNvbXBsZXRpbmcgdGFncyBpbiBJbnNlcnQgbW9kZSBzaG93IG1vcmUgaW5mbyIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygic2Z0IiwgJnNmdCkKK2lmIGhhcygiY3Njb3BlIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiY3Njb3BlcHJnXHRjb21tYW5kIGZvciBleGVjdXRpbmcgY3Njb3BlIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImNzcHJnIiwgJmNzcHJnKQorICBjYWxsIGFwcGVuZCgiJCIsICJjc2NvcGV0YWdcdHVzZSBjc2NvcGUgZm9yIHRhZyBjb21tYW5kcyIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25HKCJjc3QiLCAmY3N0KQorICBjYWxsIGFwcGVuZCgiJCIsICJjc2NvcGV0YWdvcmRlclx0MCBvciAxOyB0aGUgb3JkZXIgaW4gd2hpY2ggXCI6Y3N0YWdcIiBwZXJmb3JtcyBhIHNlYXJjaCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCBjc3RvPSIgLiAmY3N0bykKKyAgY2FsbCBhcHBlbmQoIiQiLCAiY3Njb3BldmVyYm9zZVx0Z2l2ZSBtZXNzYWdlcyB3aGVuIGFkZGluZyBhIGNzY29wZSBkYXRhYmFzZSIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25HKCJjc3ZlcmIiLCAmY3N2ZXJiKQorICBjYWxsIGFwcGVuZCgiJCIsICJjc2NvcGVwYXRoY29tcFx0aG93IG1hbnkgY29tcG9uZW50cyBvZiB0aGUgcGF0aCB0byBzaG93IikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IGNzcGM9IiAuICZjc3BjKQorICBjYWxsIGFwcGVuZCgiJCIsICJjc2NvcGVxdWlja2ZpeFx0V2hlbiB0byBvcGVuIGEgcXVpY2tmaXggd2luZG93IGZvciBjc2NvcGUiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygiY3NxZiIsICZjc3FmKQorZW5kaWYKKworCitjYWxsIDxTSUQ+SGVhZGVyKCJkaXNwbGF5aW5nIHRleHQiKQorY2FsbCBhcHBlbmQoIiQiLCAic2Nyb2xsXHRudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsIGZvciBDVFJMLVUgYW5kIENUUkwtRCIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKK2NhbGwgPFNJRD5PcHRpb25MKCJzY3IiKQorY2FsbCBhcHBlbmQoIiQiLCAic2Nyb2xsb2ZmXHRudW1iZXIgb2Ygc2NyZWVuIGxpbmVzIHRvIHNob3cgYXJvdW5kIHRoZSBjdXJzb3IiKQorY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IHNvPSIgLiAmc28pCitjYWxsIGFwcGVuZCgiJCIsICJ3cmFwXHRsb25nIGxpbmVzIHdyYXAiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoIndyYXAiLCAmd3JhcCkKK2NhbGwgYXBwZW5kKCIkIiwgImxpbmVicmVha1x0d3JhcCBsb25nIGxpbmVzIGF0IGEgY2hhcmFjdGVyIGluICdicmVha2F0JyIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKK2NhbGwgPFNJRD5CaW5PcHRpb25MKCJsYnIiKQorY2FsbCBhcHBlbmQoIiQiLCAiYnJlYWthdFx0d2hpY2ggY2hhcmFjdGVycyBtaWdodCBjYXVzZSBhIGxpbmUgYnJlYWsiKQorY2FsbCA8U0lEPk9wdGlvbkcoImJyayIsICZicmspCitjYWxsIGFwcGVuZCgiJCIsICJzaG93YnJlYWtcdHN0cmluZyB0byBwdXQgYmVmb3JlIHdyYXBwZWQgc2NyZWVuIGxpbmVzIikKK2NhbGwgPFNJRD5PcHRpb25HKCJzYnIiLCAmc2JyKQorY2FsbCBhcHBlbmQoIiQiLCAic2lkZXNjcm9sbFx0bWluaW1hbCBudW1iZXIgb2YgY29sdW1ucyB0byBzY3JvbGwgaG9yaXpvbnRhbGx5IikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCBzcz0iIC4gJnNzKQorY2FsbCBhcHBlbmQoIiQiLCAic2lkZXNjcm9sbG9mZlx0bWluaW1hbCBudW1iZXIgb2YgY29sdW1ucyB0byBrZWVwIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBjdXJzb3IiKQorY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IHNpc289IiAuICZzaXNvKQorY2FsbCBhcHBlbmQoIiQiLCAiZGlzcGxheVx0aW5jbHVkZSBcImxhc3RsaW5lXCIgdG8gc2hvdyB0aGUgbGFzdCBsaW5lIGV2ZW4gaWYgaXQgZG9lc24ndCBmaXQiKQorY2FsbCBhcHBlbmQoIiQiLCAiXHRpbmNsdWRlIFwidWhleFwiIHRvIHNob3cgdW5wcmludGFibGUgY2hhcmFjdGVycyBhcyBhIGhleCBudW1iZXIiKQorY2FsbCA8U0lEPk9wdGlvbkcoImR5IiwgJmR5KQorY2FsbCBhcHBlbmQoIiQiLCAiZmlsbGNoYXJzXHRjaGFyYWN0ZXJzIHRvIHVzZSBmb3IgdGhlIHN0YXR1cyBsaW5lLCBmb2xkcyBhbmQgZmlsbGVyIGxpbmVzIikKK2NhbGwgPFNJRD5PcHRpb25HKCJmY3MiLCAmZmNzKQorY2FsbCBhcHBlbmQoIiQiLCAiY21kaGVpZ2h0XHRudW1iZXIgb2YgbGluZXMgdXNlZCBmb3IgdGhlIGNvbW1hbmQtbGluZSIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgY2g9IiAuICZjaCkKK2NhbGwgYXBwZW5kKCIkIiwgImNvbHVtbnNcdHdpZHRoIG9mIHRoZSBkaXNwbGF5IikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCBjbz0iIC4gJmNvKQorY2FsbCBhcHBlbmQoIiQiLCAibGluZXNcdG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZGlzcGxheSIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgbGluZXM9IiAuICZsaW5lcykKK2NhbGwgYXBwZW5kKCIkIiwgImxhenlyZWRyYXdcdGRvbid0IHJlZHJhdyB3aGlsZSBleGVjdXRpbmcgbWFjcm9zIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJseiIsICZseikKK2NhbGwgYXBwZW5kKCIkIiwgIndyaXRlZGVsYXlcdGRlbGF5IGluIG1zZWMgZm9yIGVhY2ggY2hhciB3cml0dGVuIHRvIHRoZSBkaXNwbGF5IikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGZvciBkZWJ1Z2dpbmcpIikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCB3ZD0iIC4gJndkKQorY2FsbCBhcHBlbmQoIiQiLCAibGlzdFx0c2hvdyA8VGFiPiBhcyBeSSBhbmQgZW5kLW9mLWxpbmUgYXMgJCIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKK2NhbGwgPFNJRD5CaW5PcHRpb25MKCJsaXN0IikKK2NhbGwgYXBwZW5kKCIkIiwgImxpc3RjaGFyc1x0bGlzdCBvZiBzdHJpbmdzIHVzZWQgZm9yIGxpc3QgbW9kZSIpCitjYWxsIDxTSUQ+T3B0aW9uRygibGNzIiwgJmxjcykKK2NhbGwgYXBwZW5kKCIkIiwgIm51bWJlclx0c2hvdyB0aGUgbGluZSBudW1iZXIgZm9yIGVhY2ggbGluZSIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKK2NhbGwgPFNJRD5CaW5PcHRpb25MKCJudSIpCisKKworY2FsbCA8U0lEPkhlYWRlcigic3ludGF4IGFuZCBoaWdobGlnaHRpbmciKQorY2FsbCBhcHBlbmQoIiQiLCAiYmFja2dyb3VuZFx0XCJkYXJrXCIgb3IgXCJsaWdodFwiOyB0aGUgYmFja2dyb3VuZCBjb2xvciBicmlnaHRuZXNzIikKK2NhbGwgPFNJRD5PcHRpb25HKCJiZyIsICZiZykKK2lmIGhhcygiYXV0b2NtZCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImZpbGV0eXBlXHR0eXBlIG9mIGZpbGU7IHRyaWdnZXJzIHRoZSBGaWxlVHlwZSBldmVudCB3aGVuIHNldCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorICBjYWxsIDxTSUQ+T3B0aW9uTCgiZnQiKQorZW5kaWYKK2lmIGhhcygic3ludGF4IikKKyAgY2FsbCBhcHBlbmQoIiQiLCAic3ludGF4XHRuYW1lIG9mIHN5bnRheCBoaWdobGlnaHRpbmcgdXNlZCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorICBjYWxsIDxTSUQ+T3B0aW9uTCgic3luIikKK2VuZGlmCitjYWxsIGFwcGVuZCgiJCIsICJoaWdobGlnaHRcdHdoaWNoIGhpZ2hsaWdodGluZyB0byB1c2UgZm9yIHZhcmlvdXMgb2NjYXNpb25zIikKK2NhbGwgPFNJRD5PcHRpb25HKCJobCIsICZobCkKK2NhbGwgYXBwZW5kKCIkIiwgImhsc2VhcmNoXHRoaWdobGlnaHQgYWxsIG1hdGNoZXMgZm9yIHRoZSBsYXN0IHVzZWQgc2VhcmNoIHBhdHRlcm4iKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoImhscyIsICZobHMpCisKKworY2FsbCA8U0lEPkhlYWRlcigibXVsdGlwbGUgd2luZG93cyIpCitjYWxsIGFwcGVuZCgiJCIsICJsYXN0c3RhdHVzXHQwLCAxIG9yIDI7IHdoZW4gdG8gdXNlIGEgc3RhdHVzIGxpbmUgZm9yIHRoZSBsYXN0IHdpbmRvdyIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgbHM9IiAuICZscykKK2lmIGhhcygic3RhdHVzbGluZSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgInN0YXR1c2xpbmVcdGFsdGVybmF0ZSBmb3JtYXQgdG8gYmUgdXNlZCBmb3IgYSBzdGF0dXMgbGluZSIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJzdGwiLCAmc3RsKQorZW5kaWYKK2NhbGwgYXBwZW5kKCIkIiwgImVxdWFsYWx3YXlzXHRtYWtlIGFsbCB3aW5kb3dzIHRoZSBzYW1lIHNpemUgd2hlbiBhZGRpbmcvcmVtb3Zpbmcgd2luZG93cyIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygiZWEiLCAmZWEpCitpZiBoYXMoInZlcnRzcGxpdCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImVhZGlyZWN0aW9uXHRpbiB3aGljaCBkaXJlY3Rpb24gJ2VxdWFsYWx3YXlzJyB3b3JrczogXCJ2ZXJcIiwgXCJob3JcIiBvciBcImJvdGhcIiIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJlYWQiLCAmZWFkKQorZW5kaWYKK2NhbGwgYXBwZW5kKCIkIiwgIndpbmhlaWdodFx0bWluaW1hbCBudW1iZXIgb2YgbGluZXMgdXNlZCBmb3IgdGhlIGN1cnJlbnQgd2luZG93IikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCB3aD0iIC4gJndoKQorY2FsbCBhcHBlbmQoIiQiLCAid2lubWluaGVpZ2h0XHRtaW5pbWFsIG51bWJlciBvZiBsaW5lcyB1c2VkIGZvciBhbnkgd2luZG93IikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCB3bWg9IiAuICZ3bWgpCitjYWxsIGFwcGVuZCgiJCIsICJ3aW5maXhoZWlnaHRcdGtlZXAgdGhlIGhlaWdodCBvZiB0aGUgd2luZG93IikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIHdpbmRvdykiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkwoIndmaCIpCitpZiBoYXMoInZlcnRzcGxpdCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIndpbndpZHRoXHRtaW5pbWFsIG51bWJlciBvZiBjb2x1bW5zIHVzZWQgZm9yIHRoZSBjdXJyZW50IHdpbmRvdyIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCB3aXc9IiAuICZ3aXcpCisgIGNhbGwgYXBwZW5kKCIkIiwgIndpbm1pbndpZHRoXHRtaW5pbWFsIG51bWJlciBvZiBjb2x1bW5zIHVzZWQgZm9yIGFueSB3aW5kb3ciKQorICBjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgd213PSIgLiAmd213KQorZW5kaWYKK2NhbGwgYXBwZW5kKCIkIiwgImhlbHBoZWlnaHRcdGluaXRpYWwgaGVpZ2h0IG9mIHRoZSBoZWxwIHdpbmRvdyIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgaGg9IiAuICZoaCkKK2lmIGhhcygicXVpY2tmaXgiKQorICBjYWxsIGFwcGVuZCgiJCIsICJwcmV2aWV3aGVpZ2h0XHRkZWZhdWx0IGhlaWdodCBmb3IgdGhlIHByZXZpZXcgd2luZG93IikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IHB2aD0iIC4gJnB2aCkKKyAgY2FsbCBhcHBlbmQoIiQiLCAicHJldmlld3dpbmRvd1x0aWRlbnRpZmllcyB0aGUgcHJldmlldyB3aW5kb3ciKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkwoInB2dyIpCitlbmRpZgorY2FsbCBhcHBlbmQoIiQiLCAiaGlkZGVuXHRkb24ndCB1bmxvYWQgYSBidWZmZXIgd2hlbiBubyBsb25nZXIgc2hvd24gaW4gYSB3aW5kb3ciKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoImhpZCIsICZoaWQpCitjYWxsIGFwcGVuZCgiJCIsICJzd2l0Y2hidWZcdFwidXNlb3BlblwiIGFuZC9vciBcInNwbGl0XCI7IHdoaWNoIHdpbmRvdyB0byB1c2Ugd2hlbiBqdW1waW5nIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0dG8gYSBidWZmZXIiKQorY2FsbCA8U0lEPk9wdGlvbkcoInN3YiIsICZzd2IpCitjYWxsIGFwcGVuZCgiJCIsICJzcGxpdGJlbG93XHRhIG5ldyB3aW5kb3cgaXMgcHV0IGJlbG93IHRoZSBjdXJyZW50IG9uZSIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygic2IiLCAmc2IpCitpZiBoYXMoInZlcnRzcGxpdCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgInNwbGl0cmlnaHRcdGEgbmV3IHdpbmRvdyBpcyBwdXQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgb25lIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoInNwciIsICZzcHIpCitlbmRpZgoraWYgaGFzKCJzY3JvbGxiaW5kIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAic2Nyb2xsYmluZFx0dGhpcyB3aW5kb3cgc2Nyb2xscyB0b2dldGhlciB3aXRoIG90aGVyIGJvdW5kIHdpbmRvd3MiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkwoInNjYiIpCisgIGNhbGwgYXBwZW5kKCIkIiwgInNjcm9sbG9wdFx0XCJ2ZXJcIiwgXCJob3JcIiBhbmQvb3IgXCJqdW1wXCI7IGxpc3Qgb2Ygb3B0aW9ucyBmb3IgJ3Njcm9sbGJpbmQnIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoInNibyIsICZzYm8pCitlbmRpZgorCisKK2NhbGwgPFNJRD5IZWFkZXIoInRlcm1pbmFsIikKK2NhbGwgYXBwZW5kKCIkIiwgInRlcm1cdG5hbWUgb2YgdGhlIHVzZWQgdGVybWluYWwiKQorY2FsbCA8U0lEPk9wdGlvbkcoInRlcm0iLCAmdGVybSkKK2NhbGwgYXBwZW5kKCIkIiwgInR0eXR5cGVcdGFsaWFzIGZvciAndGVybSciKQorY2FsbCA8U0lEPk9wdGlvbkcoInR0eSIsICZ0dHkpCitjYWxsIGFwcGVuZCgiJCIsICJ0dHlidWlsdGluXHRjaGVjayBidWlsdC1pbiB0ZXJtY2FwcyBmaXJzdCIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygidGJpIiwgJnRiaSkKK2NhbGwgYXBwZW5kKCIkIiwgInR0eWZhc3RcdHRlcm1pbmFsIGNvbm5lY3Rpb24gaXMgZmFzdCIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygidGYiLCAmdGYpCitjYWxsIGFwcGVuZCgiJCIsICJ3ZWlyZGludmVydFx0dGVybWluYWwgdGhhdCByZXF1aXJlcyBleHRyYSByZWRyYXdpbmciKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoIndpdiIsICZ3aXYpCitjYWxsIGFwcGVuZCgiJCIsICJlc2NrZXlzXHRyZWNvZ25pemUga2V5cyB0aGF0IHN0YXJ0IHdpdGggPEVzYz4gaW4gSW5zZXJ0IG1vZGUiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoImVrIiwgJmVrKQorY2FsbCBhcHBlbmQoIiQiLCAic2Nyb2xsanVtcFx0bWluaW1hbCBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsIGF0IGEgdGltZSIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgc2o9IiAuICZzaikKK2NhbGwgYXBwZW5kKCIkIiwgInR0eXNjcm9sbFx0bWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gdXNlIHNjcm9sbGluZyBpbnN0ZWFkIG9mIHJlZHJhd2luZyIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgdHNsPSIgLiAmdHNsKQoraWYgaGFzKCJndWkiKSB8fCBoYXMoIm1zZG9zIikgfHwgaGFzKCJ3aW4zMiIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImd1aWN1cnNvclx0c3BlY2lmaWVzIHdoYXQgdGhlIGN1cnNvciBsb29rcyBsaWtlIGluIGRpZmZlcmVudCBtb2RlcyIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJnY3IiLCAmZ2NyKQorZW5kaWYKK2lmIGhhcygidGl0bGUiKQorICBsZXQgJnRpdGxlID0gczpvbGRfdGl0bGUKKyAgY2FsbCBhcHBlbmQoIiQiLCAidGl0bGVcdHNob3cgaW5mbyBpbiB0aGUgd2luZG93IHRpdGxlIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoInRpdGxlIiwgJnRpdGxlKQorICBzZXQgbm90aXRsZQorICBjYWxsIGFwcGVuZCgiJCIsICJ0aXRsZWxlblx0cGVyY2VudGFnZSBvZiAnY29sdW1ucycgdXNlZCBmb3IgdGhlIHdpbmRvdyB0aXRsZSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCB0aXRsZWxlbj0iIC4gJnRpdGxlbGVuKQorICBjYWxsIGFwcGVuZCgiJCIsICJ0aXRsZXN0cmluZ1x0d2hlbiBub3QgZW1wdHksIHN0cmluZyB0byBiZSB1c2VkIGZvciB0aGUgd2luZG93IHRpdGxlIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoInRpdGxlc3RyaW5nIiwgJnRpdGxlc3RyaW5nKQorICBjYWxsIGFwcGVuZCgiJCIsICJ0aXRsZW9sZFx0c3RyaW5nIHRvIHJlc3RvcmUgdGhlIHRpdGxlIHRvIHdoZW4gZXhpdGluZyBWaW0iKQorICBjYWxsIDxTSUQ+T3B0aW9uRygidGl0bGVvbGQiLCAmdGl0bGVvbGQpCisgIGxldCAmaWNvbiA9IHM6b2xkX2ljb24KKyAgY2FsbCBhcHBlbmQoIiQiLCAiaWNvblx0c2V0IHRoZSB0ZXh0IG9mIHRoZSBpY29uIGZvciB0aGlzIHdpbmRvdyIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25HKCJpY29uIiwgJmljb24pCisgIHNldCBub2ljb24KKyAgY2FsbCBhcHBlbmQoIiQiLCAiaWNvbnN0cmluZ1x0d2hlbiBub3QgZW1wdHksIHRleHQgZm9yIHRoZSBpY29uIG9mIHRoaXMgd2luZG93IikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImljb25zdHJpbmciLCAmaWNvbnN0cmluZykKK2VuZGlmCitpZiBoYXMoIndpbjMyIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAicmVzdG9yZXNjcmVlblx0cmVzdG9yZSB0aGUgc2NyZWVuIGNvbnRlbnRzIHdoZW4gZXhpdGluZyBWaW0iKQorICBjYWxsIDxTSUQ+QmluT3B0aW9uRygicnMiLCAmcnMpCitlbmRpZgorCisKK2NhbGwgPFNJRD5IZWFkZXIoInVzaW5nIHRoZSBtb3VzZSIpCitjYWxsIGFwcGVuZCgiJCIsICJtb3VzZVx0bGlzdCBvZiBmbGFncyBmb3IgdXNpbmcgdGhlIG1vdXNlIikKK2NhbGwgPFNJRD5PcHRpb25HKCJtb3VzZSIsICZtb3VzZSkKK2lmIGhhcygiZ3VpIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAibW91c2Vmb2N1c1x0dGhlIHdpbmRvdyB3aXRoIHRoZSBtb3VzZSBwb2ludGVyIGJlY29tZXMgdGhlIGN1cnJlbnQgb25lIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoIm1vdXNlZiIsICZtb3VzZWYpCisgIGNhbGwgYXBwZW5kKCIkIiwgIm1vdXNlaGlkZVx0aGlkZSB0aGUgbW91c2UgcG9pbnRlciB3aGlsZSB0eXBpbmciKQorICBjYWxsIDxTSUQ+QmluT3B0aW9uRygibWgiLCAmbWgpCitlbmRpZgorY2FsbCBhcHBlbmQoIiQiLCAibW91c2Vtb2RlbFx0XCJleHRlbmRcIiwgXCJwb3B1cFwiIG9yIFwicG9wdXBfc2V0cG9zXCI7IHdoYXQgdGhlIHJpZ2h0IikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0bW91c2UgYnV0dG9uIGlzIHVzZWQgZm9yIikKK2NhbGwgPFNJRD5PcHRpb25HKCJtb3VzZW0iLCAmbW91c2VtKQorY2FsbCBhcHBlbmQoIiQiLCAibW91c2V0aW1lXHRtYXhpbXVtIHRpbWUgaW4gbXNlYyB0byByZWNvZ25pemUgYSBkb3VibGUtY2xpY2siKQorY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IG1vdXNldD0iIC4gJm1vdXNldCkKK2NhbGwgYXBwZW5kKCIkIiwgInR0eW1vdXNlXHRcInh0ZXJtXCIsIFwieHRlcm0yXCIsIFwiZGVjXCIgb3IgXCJuZXR0ZXJtXCI7IHR5cGUgb2YgbW91c2UiKQorY2FsbCA8U0lEPk9wdGlvbkcoInR0eW0iLCAmdHR5bSkKK2lmIGhhcygibW91c2VzaGFwZSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIm1vdXNlc2hhcGVcdHdoYXQgdGhlIG1vdXNlIHBvaW50ZXIgbG9va3MgbGlrZSBpbiBkaWZmZXJlbnQgbW9kZXMiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygibW91c2VzIiwgJm1vdXNlcykKK2VuZGlmCisKKworaWYgaGFzKCJndWkiKQorICBjYWxsIDxTSUQ+SGVhZGVyKCJHVUkiKQorICBjYWxsIGFwcGVuZCgiJCIsICJndWlmb250XHRsaXN0IG9mIGZvbnQgbmFtZXMgdG8gYmUgdXNlZCBpbiB0aGUgR1VJIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImdmbiIsICZnZm4pCisgIGlmIGhhcygieGZvbnRzZXQiKQorICAgIGNhbGwgYXBwZW5kKCIkIiwgImd1aWZvbnRzZXRcdHBhaXIgb2YgZm9udHMgdG8gYmUgdXNlZCwgZm9yIG11bHRpYnl0ZSBlZGl0aW5nIikKKyAgICBjYWxsIDxTSUQ+T3B0aW9uRygiZ2ZzIiwgJmdmcykKKyAgZW5kaWYKKyAgY2FsbCBhcHBlbmQoIiQiLCAiZ3VpZm9udHdpZGVcdGxpc3Qgb2YgZm9udCBuYW1lcyB0byBiZSB1c2VkIGZvciBkb3VibGUtd2lkZSBjaGFyYWN0ZXJzIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImdmdyIsICZnZncpCisgIGlmIGhhcygibWFjIikKKyAgICBjYWxsIGFwcGVuZCgiJCIsICJhbnRpYWxpYXNcdHVzZSBzbW9vdGgsIGFudGlhbGlhc2VkIGZvbnRzIikKKyAgICBjYWxsIDxTSUQ+QmluT3B0aW9uRygiYW50aSIsICZhbnRpKQorICBlbmRpZgorICBjYWxsIGFwcGVuZCgiJCIsICJndWlvcHRpb25zXHRsaXN0IG9mIGZsYWdzIHRoYXQgc3BlY2lmeSBob3cgdGhlIEdVSSB3b3JrcyIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJnbyIsICZnbykKKyAgaWYgaGFzKCJndWlfZ3RrIikKKyAgICBjYWxsIGFwcGVuZCgiJCIsICJ0b29sYmFyXHRcImljb25zXCIsIFwidGV4dFwiIGFuZC9vciBcInRvb2x0aXBzXCI7IGhvdyB0byBzaG93IHRoZSB0b29sYmFyIikKKyAgICBjYWxsIDxTSUQ+T3B0aW9uRygidGIiLCAmdGIpCisgICAgaWYgaGFzKCJndWlfZ3RrMiIpCisgICAgICBjYWxsIGFwcGVuZCgiJCIsICJ0b29sYmFyaWNvbnNpemVcdFNpemUgb2YgdG9vbGJhciBpY29ucyIpCisgICAgICBjYWxsIDxTSUQ+T3B0aW9uRygidGJpcyIsICZ0YmlzKQorICAgIGVuZGlmCisgICAgY2FsbCBhcHBlbmQoIiQiLCAiZ3VpaGVhZHJvb21cdHJvb20gKGluIHBpeGVscykgbGVmdCBhYm92ZS9iZWxvdyB0aGUgd2luZG93IikKKyAgICBjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgZ2hyPSIgLiAmZ2hyKQorICBlbmRpZgorICBjYWxsIGFwcGVuZCgiJCIsICJndWlwdHlcdHVzZSBhIHBzZXVkby10dHkgZm9yIEkvTyB0byBleHRlcm5hbCBjb21tYW5kcyIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25HKCJndWlwdHkiLCAmZ3VpcHR5KQorICBpZiBoYXMoImJyb3dzZSIpCisgICAgY2FsbCBhcHBlbmQoIiQiLCAiYnJvd3NlZGlyXHRcImxhc3RcIiwgXCJidWZmZXJcIiBvciBcImN1cnJlbnRcIjogd2hpY2ggZGlyZWN0b3J5IHVzZWQgZm9yIHRoZSBmaWxlIGJyb3dzZXIiKQorICAgIGNhbGwgPFNJRD5PcHRpb25HKCJic2RpciIsICZic2RpcikKKyAgZW5kaWYKKyAgaWYgaGFzKCJtdWx0aV9sYW5nIikKKyAgICBjYWxsIGFwcGVuZCgiJCIsICJsYW5nbWVudVx0bGFuZ3VhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1lbnVzIikKKyAgICBjYWxsIDxTSUQ+T3B0aW9uRygibGFuZ21lbnUiLCAmbG0pCisgIGVuZGlmCisgIGNhbGwgYXBwZW5kKCIkIiwgIm1lbnVpdGVtc1x0bWF4aW11bSBudW1iZXIgb2YgaXRlbXMgaW4gb25lIG1lbnUiKQorICBjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgbWlzPSIgLiAmbWlzKQorICBpZiBoYXMoIndpbmFsdGtleXMiKQorICAgIGNhbGwgYXBwZW5kKCIkIiwgIndpbmFsdGtleXNcdFwibm9cIiwgXCJ5ZXNcIiBvciBcIm1lbnVcIjsgaG93IHRvIHVzZSB0aGUgQUxUIGtleSIpCisgICAgY2FsbCA8U0lEPk9wdGlvbkcoIndhayIsICZ3YWspCisgIGVuZGlmCisgIGNhbGwgYXBwZW5kKCIkIiwgImxpbmVzcGFjZVx0bnVtYmVyIG9mIHBpeGVsIGxpbmVzIHRvIHVzZSBiZXR3ZWVuIGNoYXJhY3RlcnMiKQorICBjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgbHNwPSIgLiAmbHNwKQorICBpZiBoYXMoImJhbGxvb25fZXZhbCIpCisgICAgY2FsbCBhcHBlbmQoIiQiLCAiYmFsbG9vbmRlbGF5XHRkZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIGEgYmFsbG9vbiBtYXkgcG9wIHVwIikKKyAgICBjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgYmRsYXk9IiAuICZiZGxheSkKKyAgICBpZiBoYXMoInN1bl93b3Jrc2hvcCIpCisgICAgICBjYWxsIGFwcGVuZCgiJCIsICJiYWxsb29uZXZhbFx0d2hldGhlciB0aGUgYmFsbG9vbiBldmFsdWF0aW9uIGlzIHRvIGJlIHVzZWQiKQorICAgICAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoImJldmFsIiwgJmJldmFsKQorICAgIGVuZGlmCisgIGVuZGlmCitlbmRpZgorCitpZiBoYXMoInByaW50ZXIiKQorICBjYWxsIDxTSUQ+SGVhZGVyKCJwcmludGluZyIpCisgIGNhbGwgYXBwZW5kKCIkIiwgInByaW50ZGV2aWNlXHRuYW1lIG9mIHRoZSBwcmludGVyIHRvIGJlIHVzZWQgZm9yIDpoYXJkY29weSIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJwZGV2IiwgJnBkZXYpCisgIGNhbGwgYXBwZW5kKCIkIiwgInByaW50ZW5jb2RpbmdcdGVuY29kaW5nIHVzZWQgdG8gcHJpbnQgdGhlIFBvc3RTY3JpcHQgZmlsZSBmb3IgOmhhcmRjb3B5IikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoInBlbmMiLCAmcGVuYykKKyAgY2FsbCBhcHBlbmQoIiQiLCAicHJpbnRleHByXHRleHByZXNzaW9uIHVzZWQgdG8gcHJpbnQgdGhlIFBvc3RTY3JpcHQgZmlsZSBmb3IgOmhhcmRjb3B5IikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoInBleHByIiwgJnBleHByKQorICBjYWxsIGFwcGVuZCgiJCIsICJwcmludGZvbnRcdG5hbWUgb2YgdGhlIGZvbnQgdG8gYmUgdXNlZCBmb3IgOmhhcmRjb3B5IikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoInBmbiIsICZwZm4pCisgIGNhbGwgYXBwZW5kKCIkIiwgInByaW50aGVhZGVyXHRmb3JtYXQgb2YgdGhlIGhlYWRlciB1c2VkIGZvciA6aGFyZGNvcHkiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygicGhlYWRlciIsICZwaGVhZGVyKQorICBjYWxsIGFwcGVuZCgiJCIsICJwcmludG9wdGlvbnNcdGxpc3Qgb2YgaXRlbXMgdGhhdCBjb250cm9sIHRoZSBmb3JtYXQgb2YgOmhhcmRjb3B5IG91dHB1dCIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJwb3B0IiwgJnBvcHQpCitlbmRpZgorCitjYWxsIDxTSUQ+SGVhZGVyKCJtZXNzYWdlcyBhbmQgaW5mbyIpCitjYWxsIGFwcGVuZCgiJCIsICJ0ZXJzZVx0YWRkICdzJyBmbGFnIGluICdzaG9ydG1lc3MnIChkb24ndCBzaG93IHNlYXJjaCBtZXNzYWdlKSIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygidGVyc2UiLCAmdGVyc2UpCitjYWxsIGFwcGVuZCgiJCIsICJzaG9ydG1lc3NcdGxpc3Qgb2YgZmxhZ3MgdG8gbWFrZSBtZXNzYWdlcyBzaG9ydGVyIikKK2NhbGwgPFNJRD5PcHRpb25HKCJzaG0iLCAmc2htKQorY2FsbCBhcHBlbmQoIiQiLCAic2hvd2NtZFx0c2hvdyAocGFydGlhbCkgY29tbWFuZCBrZXlzIGluIHRoZSBzdGF0dXMgbGluZSIpCitsZXQgJnNjID0gczpvbGRfc2MKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJzYyIsICZzYykKK3NldCBub3NjCitjYWxsIGFwcGVuZCgiJCIsICJzaG93bW9kZVx0ZGlzcGxheSB0aGUgY3VycmVudCBtb2RlIGluIHRoZSBzdGF0dXMgbGluZSIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygic21kIiwgJnNtZCkKK2NhbGwgYXBwZW5kKCIkIiwgInJ1bGVyXHRzaG93IGN1cnNvciBwb3NpdGlvbiBiZWxvdyBlYWNoIHdpbmRvdyIpCitsZXQgJnJ1ID0gczpvbGRfcnUKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJydSIsICZydSkKK3NldCBub3J1CitpZiBoYXMoInN0YXR1c2xpbmUiKQorICBjYWxsIGFwcGVuZCgiJCIsICJydWxlcmZvcm1hdFx0YWx0ZXJuYXRlIGZvcm1hdCB0byBiZSB1c2VkIGZvciB0aGUgcnVsZXIiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygicnVmIiwgJnJ1ZikKK2VuZGlmCitjYWxsIGFwcGVuZCgiJCIsICJyZXBvcnRcdHRocmVzaG9sZCBmb3IgcmVwb3J0aW5nIG51bWJlciBvZiBjaGFuZ2VkIGxpbmVzIikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCByZXBvcnQ9IiAuICZyZXBvcnQpCitjYWxsIGFwcGVuZCgiJCIsICJ2ZXJib3NlXHR0aGUgaGlnaGVyIHRoZSBtb3JlIG1lc3NhZ2VzIGFyZSBnaXZlbiIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgdmJzPSIgLiAmdmJzKQorY2FsbCBhcHBlbmQoIiQiLCAibW9yZVx0cGF1c2UgbGlzdGluZ3Mgd2hlbiB0aGUgc2NyZWVuIGlzIGZ1bGwiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoIm1vcmUiLCAmbW9yZSkKK2lmIGhhcygiZGlhbG9nX2NvbiIpIHx8IGhhcygiZGlhbG9nX2d1aSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImNvbmZpcm1cdHN0YXJ0IGEgZGlhbG9nIHdoZW4gYSBjb21tYW5kIGZhaWxzIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoImNmIiwgJmNmKQorZW5kaWYKK2NhbGwgYXBwZW5kKCIkIiwgImVycm9yYmVsbHNcdHJpbmcgdGhlIGJlbGwgZm9yIGVycm9yIG1lc3NhZ2VzIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJlYiIsICZlYikKK2NhbGwgYXBwZW5kKCIkIiwgInZpc3VhbGJlbGxcdHVzZSBhIHZpc3VhbCBiZWxsIGluc3RlYWQgb2YgYmVlcGluZyIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygidmIiLCAmdmIpCitpZiBoYXMoIm11bHRpX2xhbmciKQorICBjYWxsIGFwcGVuZCgiJCIsICJoZWxwbGFuZ1x0bGlzdCBvZiBwcmVmZXJyZWQgbGFuZ3VhZ2VzIGZvciBmaW5kaW5nIGhlbHAiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygiaGxnIiwgJmhsZykKK2VuZGlmCisKKworY2FsbCA8U0lEPkhlYWRlcigic2VsZWN0aW5nIHRleHQiKQorY2FsbCBhcHBlbmQoIiQiLCAic2VsZWN0aW9uXHRcIm9sZFwiLCBcImluY2x1c2l2ZVwiIG9yIFwiZXhjbHVzaXZlXCI7IGhvdyBzZWxlY3RpbmcgdGV4dCBiZWhhdmVzIikKK2NhbGwgPFNJRD5PcHRpb25HKCJzZWwiLCAmc2VsKQorY2FsbCBhcHBlbmQoIiQiLCAic2VsZWN0bW9kZVx0XCJtb3VzZVwiLCBcImtleVwiIGFuZC9vciBcImNtZFwiOyB3aGVuIHRvIHN0YXJ0IFNlbGVjdCBtb2RlIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0aW5zdGVhZCBvZiBWaXN1YWwgbW9kZSIpCitjYWxsIDxTSUQ+T3B0aW9uRygic2xtIiwgJnNsbSkKK2lmIGhhcygiY2xpcGJvYXJkIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiY2xpcGJvYXJkXHRcInVubmFtZWRcIiB0byB1c2UgdGhlICogcmVnaXN0ZXIgbGlrZSB1bm5hbWVkIHJlZ2lzdGVyIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHRcImF1dG9zZWxlY3RcIiB0byBhbHdheXMgcHV0IHNlbGVjdGVkIHRleHQgb24gdGhlIGNsaXBib2FyZCIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJjYiIsICZjYikKK2VuZGlmCitjYWxsIGFwcGVuZCgiJCIsICJrZXltb2RlbFx0XCJzdGFydHNlbFwiIGFuZC9vciBcInN0b3BzZWxcIjsgd2hhdCBzcGVjaWFsIGtleXMgY2FuIGRvIikKK2NhbGwgPFNJRD5PcHRpb25HKCJrbSIsICZrbSkKKworCitjYWxsIDxTSUQ+SGVhZGVyKCJlZGl0aW5nIHRleHQiKQorY2FsbCBhcHBlbmQoIiQiLCAidW5kb2xldmVsc1x0bWF4aW11bSBudW1iZXIgb2YgY2hhbmdlcyB0aGF0IGNhbiBiZSB1bmRvbmUiKQorY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IHVsPSIgLiAmdWwpCitjYWxsIGFwcGVuZCgiJCIsICJtb2RpZmllZFx0Y2hhbmdlcyBoYXZlIGJlZW4gbWFkZSBhbmQgbm90IHdyaXR0ZW4gdG8gYSBmaWxlIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkwoIm1vZCIpCitjYWxsIGFwcGVuZCgiJCIsICJyZWFkb25seVx0YnVmZmVyIGlzIG5vdCB0byBiZSB3cml0dGVuIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkwoInJvIikKK2NhbGwgYXBwZW5kKCIkIiwgIm1vZGlmaWFibGVcdGNoYW5nZXMgdG8gdGhlIHRleHQgYXJlIG5vdCBwb3NzaWJsZSIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5CaW5PcHRpb25MKCJtYSIpCitjYWxsIGFwcGVuZCgiJCIsICJ0ZXh0d2lkdGhcdGxpbmUgbGVuZ3RoIGFib3ZlIHdoaWNoIHRvIGJyZWFrIGEgbGluZSIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5PcHRpb25MKCJ0dyIpCitjYWxsIGFwcGVuZCgiJCIsICJ3cmFwbWFyZ2luXHRtYXJnaW4gZnJvbSB0aGUgcmlnaHQgaW4gd2hpY2ggdG8gYnJlYWsgYSBsaW5lIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPk9wdGlvbkwoIndtIikKK2NhbGwgYXBwZW5kKCIkIiwgImJhY2tzcGFjZVx0c3BlY2lmaWVzIHdoYXQgPEJTPiwgQ1RSTC1XLCBldGMuIGNhbiBkbyBpbiBJbnNlcnQgbW9kZSIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgYnM9IiAuICZicykKK2NhbGwgYXBwZW5kKCIkIiwgImNvbW1lbnRzXHRkZWZpbml0aW9uIG9mIHdoYXQgY29tbWVudCBsaW5lcyBsb29rIGxpa2UiKQorY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCitjYWxsIDxTSUQ+T3B0aW9uTCgiY29tIikKK2NhbGwgYXBwZW5kKCIkIiwgImZvcm1hdG9wdGlvbnNcdGxpc3Qgb2YgZmxhZ3MgdGhhdCB0ZWxsIGhvdyBhdXRvbWF0aWMgZm9ybWF0dGluZyB3b3JrcyIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5PcHRpb25MKCJmbyIpCitpZiBoYXMoImluc2VydF9leHBhbmQiKQorICBjYWxsIGFwcGVuZCgiJCIsICJjb21wbGV0ZVx0c3BlY2lmaWVzIGhvdyBJbnNlcnQgbW9kZSBjb21wbGV0aW9uIHdvcmtzIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJjcHQiKQorICBjYWxsIGFwcGVuZCgiJCIsICJkaWN0aW9uYXJ5XHRsaXN0IG9mIGRpY3Rpb25hcnkgZmlsZXMgZm9yIGtleXdvcmQgY29tcGxldGlvbiIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIpIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImRpY3QiLCAmZGljdCkKKyAgY2FsbCBhcHBlbmQoIiQiLCAidGhlc2F1cnVzXHRsaXN0IG9mIHRoZXNhdXJ1cyBmaWxlcyBmb3Iga2V5d29yZCBjb21wbGV0aW9uIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQoZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlcikiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygidHNyIiwgJnRzcikKK2VuZGlmCitjYWxsIGFwcGVuZCgiJCIsICJpbmZlcmNhc2VcdGFkanVzdCBjYXNlIG9mIGEga2V5d29yZCBjb21wbGV0aW9uIG1hdGNoIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkwoImluZiIpCitpZiBoYXMoImRpZ3JhcGhzIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiZGlncmFwaFx0ZW5hYmxlIGVudGVyaW5nIGRpZ3JhcHMgd2l0aCBjMSA8QlM+IGMyIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoImRnIiwgJmRnKQorZW5kaWYKK2NhbGwgYXBwZW5kKCIkIiwgInRpbGRlb3BcdHRoZSBcIn5cIiBjb21tYW5kIGJlaGF2ZXMgbGlrZSBhbiBvcGVyYXRvciIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygidG9wIiwgJnRvcCkKK2NhbGwgYXBwZW5kKCIkIiwgInNob3dtYXRjaFx0V2hlbiBpbnNlcnRpbmcgYSBicmFja2V0LCBicmllZmx5IGp1bXAgdG8gaXRzIG1hdGNoIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJzbSIsICZzbSkKK2NhbGwgYXBwZW5kKCIkIiwgIm1hdGNodGltZVx0dGVudGggb2YgYSBzZWNvbmQgdG8gc2hvdyBhIG1hdGNoIGZvciAnc2hvd21hdGNoJyIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgbWF0PSIgLiAmbWF0KQorY2FsbCBhcHBlbmQoIiQiLCAibWF0Y2hwYWlyc1x0bGlzdCBvZiBwYWlycyB0aGF0IG1hdGNoIGZvciB0aGUgXCIlXCIgY29tbWFuZCIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5PcHRpb25MKCJtcHMiKQorY2FsbCBhcHBlbmQoIiQiLCAiam9pbnNwYWNlc1x0dXNlIHR3byBzcGFjZXMgYWZ0ZXIgJy4nIHdoZW4gam9pbmluZyBhIGxpbmUiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoImpzIiwgJmpzKQorY2FsbCBhcHBlbmQoIiQiLCAibnJmb3JtYXRzXHRcImFscGhhXCIsIFwib2N0YWxcIiBhbmQvb3IgXCJoZXhcIjsgbnVtYmVyIGZvcm1hdHMgcmVjb2duaXplZCBmb3IiKQorY2FsbCBhcHBlbmQoIiQiLCAiXHRDVFJMLUEgYW5kIENUUkwtWCBjb21tYW5kcyIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5PcHRpb25MKCJuZiIpCisKKworY2FsbCA8U0lEPkhlYWRlcigidGFicyBhbmQgaW5kZW50aW5nIikKK2NhbGwgYXBwZW5kKCIkIiwgInRhYnN0b3BcdG51bWJlciBvZiBzcGFjZXMgYSA8VGFiPiBpbiB0aGUgdGV4dCBzdGFuZHMgZm9yIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPk9wdGlvbkwoInRzIikKK2NhbGwgYXBwZW5kKCIkIiwgInNoaWZ0d2lkdGhcdG51bWJlciBvZiBzcGFjZXMgdXNlZCBmb3IgZWFjaCBzdGVwIG9mIChhdXRvKWluZGVudCIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5PcHRpb25MKCJzdyIpCitjYWxsIGFwcGVuZCgiJCIsICJzbWFydHRhYlx0YSA8VGFiPiBpbiBhbiBpbmRlbnQgaW5zZXJ0cyAnc2hpZnR3aWR0aCcgc3BhY2VzIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJzdGEiLCAmc3RhKQorY2FsbCBhcHBlbmQoIiQiLCAic29mdHRhYnN0b3BcdGlmIG5vbi16ZXJvLCBudW1iZXIgb2Ygc3BhY2VzIHRvIGluc2VydCBmb3IgYSA8VGFiPiIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5PcHRpb25MKCJzdHMiKQorY2FsbCBhcHBlbmQoIiQiLCAic2hpZnRyb3VuZFx0cm91bmQgdG8gJ3NoaWZ0d2lkdGgnIGZvciBcIjw8XCIgYW5kIFwiPj5cIiIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygic3IiLCAmc3IpCitjYWxsIGFwcGVuZCgiJCIsICJleHBhbmR0YWJcdGV4cGFuZCA8VGFiPiB0byBzcGFjZXMgaW4gSW5zZXJ0IG1vZGUiKQorY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCitjYWxsIDxTSUQ+QmluT3B0aW9uTCgiZXQiKQorY2FsbCBhcHBlbmQoIiQiLCAiYXV0b2luZGVudFx0YXV0b21hdGljYWxseSBzZXQgdGhlIGluZGVudCBvZiBhIG5ldyBsaW5lIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkwoImFpIikKK2lmIGhhcygic21hcnRpbmRlbnQiKQorICBjYWxsIGFwcGVuZCgiJCIsICJzbWFydGluZGVudFx0ZG8gY2xldmVyIGF1dG9pbmRlbnRpbmciKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkwoInNpIikKK2VuZGlmCitpZiBoYXMoImNpbmRlbnQiKQorICBjYWxsIGFwcGVuZCgiJCIsICJjaW5kZW50XHRlbmFibGUgc3BlY2lmaWMgaW5kZW50aW5nIGZvciBDIGNvZGUiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkwoImNpbiIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImNpbm9wdGlvbnNcdG9wdGlvbnMgZm9yIEMtaW5kZW50aW5nIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJjaW5vIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiY2lua2V5c1x0a2V5cyB0aGF0IHRyaWdnZXIgQy1pbmRlbnRpbmcgaW4gSW5zZXJ0IG1vZGUiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKKyAgY2FsbCA8U0lEPk9wdGlvbkwoImNpbmsiKQorICBjYWxsIGFwcGVuZCgiJCIsICJjaW53b3Jkc1x0bGlzdCBvZiB3b3JkcyB0aGF0IGNhdXNlIG1vcmUgQy1pbmRlbnQiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKKyAgY2FsbCA8U0lEPk9wdGlvbkwoImNpbnciKQorICBjYWxsIGFwcGVuZCgiJCIsICJpbmRlbnRleHByXHRleHByZXNzaW9uIHVzZWQgdG8gb2J0YWluIHRoZSBpbmRlbnQgb2YgYSBsaW5lIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJpbmRlIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiaW5kZW50a2V5c1x0a2V5cyB0aGF0IHRyaWdnZXIgaW5kZW50aW5nIHdpdGggJ2luZGVudGV4cHInIGluIEluc2VydCBtb2RlIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJpbmRrIikKK2VuZGlmCitjYWxsIGFwcGVuZCgiJCIsICJjb3B5aW5kZW50XHRDb3B5IHdoaXRlc3BhY2UgZm9yIGluZGVudGluZyBmcm9tIHByZXZpb3VzIGxpbmUiKQorY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCitjYWxsIDxTSUQ+QmluT3B0aW9uTCgiY2kiKQorY2FsbCBhcHBlbmQoIiQiLCAicHJlc2VydmVpbmRlbnRcdFByZXNlcnZlIGtpbmQgb2Ygd2hpdGVzcGFjZSB3aGVuIGNoYW5naW5nIGluZGVudCIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5CaW5PcHRpb25MKCJwaSIpCitpZiBoYXMoImxpc3BpbmRlbnQiKQorICBjYWxsIGFwcGVuZCgiJCIsICJsaXNwXHRlbmFibGUgbGlzcCBtb2RlIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25MKCJsaXNwIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAibGlzcHdvcmRzXHR3b3JkcyB0aGF0IGNoYW5nZSBob3cgbGlzcCBpbmRlbnRpbmcgd29ya3MiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygibHciLCAmbHcpCitlbmRpZgorCisKK2lmIGhhcygiZm9sZGluZyIpCisgIGNhbGwgPFNJRD5IZWFkZXIoImZvbGRpbmciKQorICBjYWxsIGFwcGVuZCgiJCIsICJmb2xkZW5hYmxlXHRzZXQgdG8gZGlzcGxheSBhbGwgZm9sZHMgb3BlbiIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIHdpbmRvdykiKQorICBjYWxsIDxTSUQ+QmluT3B0aW9uTCgiZmVuIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiZm9sZGxldmVsXHRmb2xkcyB3aXRoIGEgbGV2ZWwgaGlnaGVyIHRoYW4gdGhpcyBudW1iZXIgd2lsbCBiZSBjbG9zZWQiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKKyAgY2FsbCA8U0lEPk9wdGlvbkwoImZkbCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImZvbGRsZXZlbHN0YXJ0XHR2YWx1ZSBmb3IgJ2ZvbGRsZXZlbCcgd2hlbiBzdGFydGluZyB0byBlZGl0IGEgZmlsZSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCBmZGxzPSIgLiAmZmRscykKKyAgY2FsbCBhcHBlbmQoIiQiLCAiZm9sZGNvbHVtblx0d2lkdGggb2YgdGhlIGNvbHVtbiB1c2VkIHRvIGluZGljYXRlIGZvbGRzIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gd2luZG93KSIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJmZGMiKQorICBjYWxsIGFwcGVuZCgiJCIsICJmb2xkdGV4dFx0ZXhwcmVzc2lvbiB1c2VkIHRvIGRpc3BsYXkgdGhlIHRleHQgb2YgYSBjbG9zZWQgZm9sZCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIHdpbmRvdykiKQorICBjYWxsIDxTSUQ+T3B0aW9uTCgiZmR0IikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiZm9sZGNsb3NlXHRzZXQgdG8gXCJhbGxcIiB0byBjbG9zZSBhIGZvbGQgd2hlbiB0aGUgY3Vyc29yIGxlYXZlcyBpdCIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJmY2wiLCAmZmNsKQorICBjYWxsIGFwcGVuZCgiJCIsICJmb2xkb3Blblx0c3BlY2lmaWVzIGZvciB3aGljaCBjb21tYW5kcyBhIGZvbGQgd2lsbCBiZSBvcGVuZWQiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygiZmRvIiwgJmZkbykKKyAgY2FsbCBhcHBlbmQoIiQiLCAiZm9sZG1pbmxpbmVzXHRtaW5pbXVtIG51bWJlciBvZiBzY3JlZW4gbGluZXMgZm9yIGEgZm9sZCB0byBiZSBjbG9zZWQiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKKyAgY2FsbCA8U0lEPk9wdGlvbkwoImZtbCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImNvbW1lbnRzdHJpbmdcdHRlbXBsYXRlIGZvciBjb21tZW50czsgdXNlZCB0byBwdXQgdGhlIG1hcmtlciBpbiIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJjbXMiKQorICBjYWxsIGFwcGVuZCgiJCIsICJmb2xkbWV0aG9kXHRmb2xkaW5nIHR5cGU6IFwibWFudWFsXCIsIFwiaW5kZW50XCIsIFwiZXhwclwiLCBcIm1hcmtlclwiIG9yIFwic3ludGF4XCIiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKKyAgY2FsbCA8U0lEPk9wdGlvbkwoImZkbSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImZvbGRleHByXHRleHByZXNzaW9uIHVzZWQgd2hlbiAnZm9sZG1ldGhvZCcgaXMgXCJleHByXCIiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKKyAgY2FsbCA8U0lEPk9wdGlvbkwoImZkZSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImZvbGRpZ25vcmVcdHVzZWQgdG8gaWdub3JlIGxpbmVzIHdoZW4gJ2ZvbGRtZXRob2QnIGlzIFwiaW5kZW50XCIiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKKyAgY2FsbCA8U0lEPk9wdGlvbkwoImZkaSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImZvbGRtYXJrZXJcdG1hcmtlcnMgdXNlZCB3aGVuICdmb2xkbWV0aG9kJyBpcyBcIm1hcmtlclwiIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gd2luZG93KSIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJmbXIiKQorICBjYWxsIGFwcGVuZCgiJCIsICJmb2xkbmVzdG1heFx0bWF4aW11bSBmb2xkIGRlcHRoIGZvciB3aGVuICdmb2xkbWV0aG9kIGlzIFwiaW5kZW50XCIgb3IgXCJzeW50YXhcIiIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIHdpbmRvdykiKQorICBjYWxsIDxTSUQ+T3B0aW9uTCgiZmRuIikKK2VuZGlmCisKKworaWYgaGFzKCJkaWZmIikKKyAgY2FsbCA8U0lEPkhlYWRlcigiZGlmZiBtb2RlIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiZGlmZlx0dXNlIGRpZmYgbW9kZSBmb3IgdGhlIGN1cnJlbnQgd2luZG93IikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gd2luZG93KSIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25MKCJkaWZmIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiZGlmZm9wdFx0b3B0aW9ucyBmb3IgdXNpbmcgZGlmZiBtb2RlIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImRpcCIsICZkaXApCisgIGNhbGwgYXBwZW5kKCIkIiwgImRpZmZleHByXHRleHByZXNzaW9uIHVzZWQgdG8gb2J0YWluIGEgZGlmZiBmaWxlIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImRleCIsICZkZXgpCisgIGNhbGwgYXBwZW5kKCIkIiwgInBhdGNoZXhwclx0ZXhwcmVzc2lvbiB1c2VkIHRvIHBhdGNoIGEgZmlsZSIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJwZXgiLCAmcGV4KQorZW5kaWYKKworCitjYWxsIDxTSUQ+SGVhZGVyKCJtYXBwaW5nIikKK2NhbGwgYXBwZW5kKCIkIiwgIm1heG1hcGRlcHRoXHRtYXhpbXVtIGRlcHRoIG9mIG1hcHBpbmciKQorY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IG1tZD0iIC4gJm1tZCkKK2NhbGwgYXBwZW5kKCIkIiwgInJlbWFwXHRyZWNvZ25pemUgbWFwcGluZ3MgaW4gbWFwcGVkIGtleXMiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoInJlbWFwIiwgJnJlbWFwKQorY2FsbCBhcHBlbmQoIiQiLCAidGltZW91dFx0YWxsb3cgdGltaW5nIG91dCBoYWxmd2F5IGludG8gYSBtYXBwaW5nIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJ0byIsICZ0bykKK2NhbGwgYXBwZW5kKCIkIiwgInR0aW1lb3V0XHRhbGxvdyB0aW1pbmcgb3V0IGhhbGZ3YXkgaW50byBhIGtleSBjb2RlIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJ0dGltZW91dCIsICZ0dGltZW91dCkKK2NhbGwgYXBwZW5kKCIkIiwgInRpbWVvdXRsZW5cdHRpbWUgaW4gbXNlYyBmb3IgJ3RpbWVvdXQnIikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCB0bT0iIC4gJnRtKQorY2FsbCBhcHBlbmQoIiQiLCAidHRpbWVvdXRsZW5cdHRpbWUgaW4gbXNlYyBmb3IgJ3R0aW1lb3V0JyIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgdHRtPSIgLiAmdHRtKQorCisKK2NhbGwgPFNJRD5IZWFkZXIoInJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsZXMiKQorY2FsbCBhcHBlbmQoIiQiLCAibW9kZWxpbmVcdGVuYWJsZSB1c2luZyBzZXR0aW5ncyBmcm9tIG1vZGVsaW5lcyB3aGVuIHJlYWRpbmcgYSBmaWxlIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkwoIm1sIikKK2NhbGwgYXBwZW5kKCIkIiwgIm1vZGVsaW5lc1x0bnVtYmVyIG9mIGxpbmVzIHRvIGNoZWNrIGZvciBtb2RlbGluZXMiKQorY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IG1scz0iIC4gJm1scykKK2NhbGwgYXBwZW5kKCIkIiwgImJpbmFyeVx0YmluYXJ5IGZpbGUgZWRpdGluZyIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5CaW5PcHRpb25MKCJiaW4iKQorY2FsbCBhcHBlbmQoIiQiLCAiZW5kb2ZsaW5lXHRsYXN0IGxpbmUgaW4gdGhlIGZpbGUgaGFzIGFuIGVuZC1vZi1saW5lIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkwoImVvbCIpCitpZiBoYXMoIm11bHRpX2J5dGUiKQorICBjYWxsIGFwcGVuZCgiJCIsICJib21iXHRQcmVwZW5kIGEgQnl0ZSBPcmRlciBNYXJrIHRvIHRoZSBmaWxlIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25MKCJib21iIikKK2VuZGlmCitjYWxsIGFwcGVuZCgiJCIsICJmaWxlZm9ybWF0XHRlbmQtb2YtbGluZSBmb3JtYXQ6IFwiZG9zXCIsIFwidW5peFwiIG9yIFwibWFjXCIiKQorY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCitjYWxsIDxTSUQ+T3B0aW9uTCgiZmYiKQorY2FsbCBhcHBlbmQoIiQiLCAiZmlsZWZvcm1hdHNcdGxpc3Qgb2YgZmlsZSBmb3JtYXRzIHRvIGxvb2sgZm9yIHdoZW4gZWRpdGluZyBhIGZpbGUiKQorY2FsbCA8U0lEPk9wdGlvbkcoImZmcyIsICZmZnMpCitjYWxsIGFwcGVuZCgiJCIsICJ0ZXh0bW9kZVx0b2Jzb2xldGUsIHVzZSAnZmlsZWZvcm1hdCciKQorY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCitjYWxsIDxTSUQ+QmluT3B0aW9uTCgidHgiKQorY2FsbCBhcHBlbmQoIiQiLCAidGV4dGF1dG9cdG9ic29sZXRlLCB1c2UgJ2ZpbGVmb3JtYXRzJyIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygidGEiLCAmdGEpCitjYWxsIGFwcGVuZCgiJCIsICJ3cml0ZVx0d3JpdGluZyBmaWxlcyBpcyBhbGxvd2VkIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJ3cml0ZSIsICZ3cml0ZSkKK2NhbGwgYXBwZW5kKCIkIiwgIndyaXRlYmFja3VwXHR3cml0ZSBhIGJhY2t1cCBmaWxlIGJlZm9yZSBvdmVyd3JpdGluZyBhIGZpbGUiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoIndiIiwgJndiKQorY2FsbCBhcHBlbmQoIiQiLCAiYmFja3VwXHRrZWVwIGEgYmFja3VwIGFmdGVyIG92ZXJ3cml0aW5nIGEgZmlsZSIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygiYmsiLCAmYmspCitjYWxsIGFwcGVuZCgiJCIsICJiYWNrdXBza2lwXHRwYXR0ZXJucyB0aGF0IHNwZWNpZnkgZm9yIHdoaWNoIGZpbGVzIGEgYmFja3VwIGlzIG5vdCBtYWRlIikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCBic2s9IiAuICZic2spCitjYWxsIGFwcGVuZCgiJCIsICJiYWNrdXBjb3B5XHR3aGV0aGVyIHRvIG1ha2UgdGhlIGJhY2t1cCBhcyBhIGNvcHkgb3IgcmVuYW1lIHRoZSBleGlzdGluZyBmaWxlIikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCBia2M9IiAuICZia2MpCitjYWxsIGFwcGVuZCgiJCIsICJiYWNrdXBkaXJcdGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gcHV0IGJhY2t1cCBmaWxlcyBpbiIpCitjYWxsIDxTSUQ+T3B0aW9uRygiYmRpciIsICZiZGlyKQorY2FsbCBhcHBlbmQoIiQiLCAiYmFja3VwZXh0XHRmaWxlIG5hbWUgZXh0ZW5zaW9uIGZvciB0aGUgYmFja3VwIGZpbGUiKQorY2FsbCA8U0lEPk9wdGlvbkcoImJleCIsICZiZXgpCitjYWxsIGFwcGVuZCgiJCIsICJhdXRvd3JpdGVcdGF1dG9tYXRpY2FsbHkgd3JpdGUgYSBmaWxlIHdoZW4gbGVhdmluZyBhIG1vZGlmaWVkIGJ1ZmZlciIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygiYXciLCAmYXcpCitjYWxsIGFwcGVuZCgiJCIsICJhdXRvd3JpdGVhbGxcdGFzICdhdXRvd3JpdGUnLCBidXQgd29ya3Mgd2l0aCBtb3JlIGNvbW1hbmRzIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJhd2EiLCAmYXdhKQorY2FsbCBhcHBlbmQoIiQiLCAid3JpdGVhbnlcdGFsd2F5cyB3cml0ZSB3aXRob3V0IGFza2luZyBmb3IgY29uZmlybWF0aW9uIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJ3YSIsICZ3YSkKK2NhbGwgYXBwZW5kKCIkIiwgImF1dG9yZWFkXHRhdXRvbWF0aWNhbGx5IHJlYWQgYSBmaWxlIHdoZW4gaXQgd2FzIG1vZGlmaWVkIG91dHNpZGUgb2YgVmltIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJhciIsICZhcikKK2NhbGwgYXBwZW5kKCIkIiwgInBhdGNobW9kZVx0a2VlcCBvbGRlc3QgdmVyc2lvbiBvZiBhIGZpbGU7IHNwZWNpZmllcyBmaWxlIG5hbWUgZXh0ZW5zaW9uIikKK2NhbGwgPFNJRD5PcHRpb25HKCJwbSIsICZwbSkKK2lmICFoYXMoIm1zZG9zIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAic2hvcnRuYW1lXHR1c2UgOC4zIGZpbGUgbmFtZXMiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkwoInNuIikKK2VuZGlmCisKKworY2FsbCA8U0lEPkhlYWRlcigidGhlIHN3YXAgZmlsZSIpCitjYWxsIGFwcGVuZCgiJCIsICJkaXJlY3RvcnlcdGxpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIHRoZSBzd2FwIGZpbGUiKQorY2FsbCA8U0lEPk9wdGlvbkcoImRpciIsICZkaXIpCitjYWxsIGFwcGVuZCgiJCIsICJzd2FwZmlsZVx0dXNlIGEgc3dhcCBmaWxlIGZvciB0aGlzIGJ1ZmZlciIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5CaW5PcHRpb25MKCJzd2YiKQorY2FsbCBhcHBlbmQoIiQiLCAic3dhcHN5bmNcdFwic3luY1wiLCBcImZzeW5jXCIgb3IgZW1wdHk7IGhvdyB0byBmbHVzaCBhIHN3YXAgZmlsZSB0byBkaXNrIikKK2NhbGwgPFNJRD5PcHRpb25HKCJzd3MiLCAmc3dzKQorY2FsbCBhcHBlbmQoIiQiLCAidXBkYXRlY291bnRcdG51bWJlciBvZiBjaGFyYWN0ZXJzIHR5cGVkIHRvIGNhdXNlIGEgc3dhcCBmaWxlIHVwZGF0ZSIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgdWM9IiAuICZ1YykKK2NhbGwgYXBwZW5kKCIkIiwgInVwZGF0ZXRpbWVcdHRpbWUgaW4gbXNlYyBhZnRlciB3aGljaCB0aGUgc3dhcCBmaWxlIHdpbGwgYmUgdXBkYXRlZCIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgdXQ9IiAuICZ1dCkKK2NhbGwgYXBwZW5kKCIkIiwgIm1heG1lbVx0bWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IGluIEtieXRlIHVzZWQgZm9yIG9uZSBidWZmZXIiKQorY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IG1tPSIgLiAmbW0pCitjYWxsIGFwcGVuZCgiJCIsICJtYXhtZW10b3RcdG1heGltdW0gYW1vdW50IG9mIG1lbW9yeSBpbiBLYnl0ZSB1c2VkIGZvciBhbGwgYnVmZmVycyIpCitjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgbW10PSIgLiAmbW10KQorCisKK2NhbGwgPFNJRD5IZWFkZXIoImNvbW1hbmQgbGluZSBlZGl0aW5nIikKK2NhbGwgYXBwZW5kKCIkIiwgImhpc3RvcnlcdGhvdyBtYW55IGNvbW1hbmQgbGluZXMgYXJlIHJlbWVtYmVyZWQgIikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCBoaT0iIC4gJmhpKQorY2FsbCBhcHBlbmQoIiQiLCAid2lsZGNoYXJcdGtleSB0aGF0IHRyaWdnZXJzIGNvbW1hbmQtbGluZSBleHBhbnNpb24iKQorY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IHdjPSIgLiAmd2MpCitjYWxsIGFwcGVuZCgiJCIsICJ3aWxkY2hhcm1cdGxpa2UgJ3dpbGRjaGFyJyBidXQgY2FuIGFsc28gYmUgdXNlZCBpbiBhIG1hcHBpbmciKQorY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IHdjbT0iIC4gJndjbSkKK2NhbGwgYXBwZW5kKCIkIiwgIndpbGRtb2RlXHRzcGVjaWZpZXMgaG93IGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIHdvcmtzIikKK2NhbGwgPFNJRD5PcHRpb25HKCJ3aW0iLCAmd2ltKQorY2FsbCBhcHBlbmQoIiQiLCAic3VmZml4ZXNcdGxpc3Qgb2YgZmlsZSBuYW1lIGV4dGVuc2lvbnMgdGhhdCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkiKQorY2FsbCA8U0lEPk9wdGlvbkcoInN1IiwgJnN1KQoraWYgaGFzKCJmaWxlX2luX3BhdGgiKQorICBjYWxsIGFwcGVuZCgiJCIsICJzdWZmaXhlc2FkZFx0bGlzdCBvZiBmaWxlIG5hbWUgZXh0ZW5zaW9ucyBhZGRlZCB3aGVuIHNlYXJjaGluZyBmb3IgYSBmaWxlIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJzdWEiKQorZW5kaWYKK2lmIGhhcygid2lsZGlnbm9yZSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIndpbGRpZ25vcmVcdGxpc3Qgb2YgcGF0dGVybnMgdG8gaWdub3JlIGZpbGVzIGZvciBmaWxlIG5hbWUgY29tcGxldGlvbiIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJ3aWciLCAmd2lnKQorZW5kaWYKK2lmIGhhcygid2lsZG1lbnUiKQorICBjYWxsIGFwcGVuZCgiJCIsICJ3aWxkbWVudVx0Y29tbWFuZC1saW5lIGNvbXBsZXRpb24gc2hvd3MgYSBsaXN0IG9mIG1hdGNoZXMiKQorICBjYWxsIDxTSUQ+QmluT3B0aW9uRygid21udSIsICZ3bW51KQorZW5kaWYKK2lmIGhhcygidmVydHNwbGl0IikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiY2VkaXRcdGtleSB1c2VkIHRvIG9wZW4gdGhlIGNvbW1hbmQtbGluZSB3aW5kb3ciKQorICBjYWxsIDxTSUQ+T3B0aW9uRygiY2VkaXQiLCAmY2VkaXQpCisgIGNhbGwgYXBwZW5kKCIkIiwgImNtZHdpbmhlaWdodFx0aGVpZ2h0IG9mIHRoZSBjb21tYW5kLWxpbmUgd2luZG93IikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImN3aCIsICZjd2gpCitlbmRpZgorCisKK2NhbGwgPFNJRD5IZWFkZXIoImV4ZWN1dGluZyBleHRlcm5hbCBjb21tYW5kcyIpCitjYWxsIGFwcGVuZCgiJCIsICJzaGVsbFx0bmFtZSBvZiB0aGUgc2hlbGwgcHJvZ3JhbSB1c2VkIGZvciBleHRlcm5hbCBjb21tYW5kcyIpCitjYWxsIDxTSUQ+T3B0aW9uRygic2giLCAmc2gpCitpZiBoYXMoImFtaWdhIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAic2hlbGx0eXBlXHR3aGVuIHRvIHVzZSB0aGUgc2hlbGwgb3IgZGlyZWN0bHkgZXhlY3V0ZSBhIGNvbW1hbmQiKQorICBjYWxsIGFwcGVuZCgiJCIsICIgXHRzZXQgc3Q9IiAuICZzdCkKK2VuZGlmCitjYWxsIGFwcGVuZCgiJCIsICJzaGVsbHF1b3RlXHRjaGFyYWN0ZXIocykgdG8gZW5jbG9zZSBhIHNoZWxsIGNvbW1hbmQgaW4iKQorY2FsbCA8U0lEPk9wdGlvbkcoInNocSIsICZzaHEpCitjYWxsIGFwcGVuZCgiJCIsICJzaGVsbHhxdW90ZVx0bGlrZSAnc2hlbGxxdW90ZScgYnV0IGluY2x1ZGUgdGhlIHJlZGlyZWN0aW9uIikKK2NhbGwgPFNJRD5PcHRpb25HKCJzeHEiLCAmc3hxKQorY2FsbCBhcHBlbmQoIiQiLCAic2hlbGxjbWRmbGFnXHRhcmd1bWVudCBmb3IgJ3NoZWxsJyB0byBleGVjdXRlIGEgY29tbWFuZCIpCitjYWxsIDxTSUQ+T3B0aW9uRygic2hjZiIsICZzaGNmKQorY2FsbCBhcHBlbmQoIiQiLCAic2hlbGxyZWRpclx0dXNlZCB0byByZWRpcmVjdCBjb21tYW5kIG91dHB1dCB0byBhIGZpbGUiKQorY2FsbCA8U0lEPk9wdGlvbkcoInNyciIsICZzcnIpCitjYWxsIGFwcGVuZCgiJCIsICJlcXVhbHByZ1x0cHJvZ3JhbSB1c2VkIGZvciBcIj1cIiBjb21tYW5kIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIpIikKK2NhbGwgPFNJRD5PcHRpb25HKCJlcCIsICZlcCkKK2NhbGwgYXBwZW5kKCIkIiwgImZvcm1hdHByZ1x0cHJvZ3JhbSB1c2VkIHRvIGZvcm1hdCBsaW5lcyB3aXRoIFwiZ3FcIiBjb21tYW5kIikKK2NhbGwgPFNJRD5PcHRpb25HKCJmcCIsICZmcCkKK2NhbGwgYXBwZW5kKCIkIiwgImtleXdvcmRwcmdcdHByb2dyYW0gdXNlZCBmb3IgdGhlIFwiS1wiIGNvbW1hbmQiKQorY2FsbCA8U0lEPk9wdGlvbkcoImtwIiwgJmtwKQorY2FsbCBhcHBlbmQoIiQiLCAid2Fyblx0d2FybiB3aGVuIHVzaW5nIGEgc2hlbGwgY29tbWFuZCBhbmQgYSBidWZmZXIgaGFzIGNoYW5nZXMiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoIndhcm4iLCAmd2FybikKKworCitpZiBoYXMoInF1aWNrZml4IikKKyAgY2FsbCA8U0lEPkhlYWRlcigicnVubmluZyBtYWtlIGFuZCBqdW1waW5nIHRvIGVycm9ycyIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImVycm9yZmlsZVx0bmFtZSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIGVycm9yIG1lc3NhZ2VzIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImVmIiwgJmVmKQorICBjYWxsIGFwcGVuZCgiJCIsICJlcnJvcmZvcm1hdFx0bGlzdCBvZiBmb3JtYXRzIGZvciBlcnJvciBtZXNzYWdlcyIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIpIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImVmbSIsICZlZm0pCisgIGNhbGwgYXBwZW5kKCIkIiwgIm1ha2VwcmdcdHByb2dyYW0gdXNlZCBmb3IgdGhlIFwiOm1ha2VcIiBjb21tYW5kIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQoZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlcikiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygibXAiLCAmbXApCisgIGNhbGwgYXBwZW5kKCIkIiwgInNoZWxscGlwZVx0c3RyaW5nIHVzZWQgdG8gcHV0IHRoZSBvdXRwdXQgb2YgXCI6bWFrZVwiIGluIHRoZSBlcnJvciBmaWxlIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoInNwIiwgJnNwKQorICBjYWxsIGFwcGVuZCgiJCIsICJtYWtlZWZcdG5hbWUgb2YgdGhlIGVycm9yZmlsZSBmb3IgdGhlICdtYWtlcHJnJyBjb21tYW5kIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoIm1lZiIsICZtZWYpCisgIGNhbGwgYXBwZW5kKCIkIiwgImdyZXBwcmdcdHByb2dyYW0gdXNlZCBmb3IgdGhlIFwiOmdyZXBcIiBjb21tYW5kIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQoZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlcikiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygiZ3AiLCAmZ3ApCisgIGNhbGwgYXBwZW5kKCIkIiwgImdyZXBmb3JtYXRcdGxpc3Qgb2YgZm9ybWF0cyBmb3Igb3V0cHV0IG9mICdncmVwcHJnJyIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJnZm0iLCAmZ2ZtKQorZW5kaWYKKworCitpZiBoYXMoIm1zZG9zIikgfHwgaGFzKCJvczIiKSB8fCBoYXMoIndpbjE2IikgfHwgaGFzKCJ3aW4zMiIpIHx8IGhhcygib3NmaWxldHlwZSIpCisgIGNhbGwgPFNJRD5IZWFkZXIoInN5c3RlbSBzcGVjaWZpYyIpCisgIGlmIGhhcygibXNkb3MiKQorICAgIGNhbGwgYXBwZW5kKCIkIiwgImJpb3NrZXlcdGNhbGwgdGhlIEJJT1MgdG8gZ2V0IGEga2V5b2FyZCBjaGFyYWN0ZXIiKQorICAgIGNhbGwgPFNJRD5CaW5PcHRpb25HKCJiaW9zayIsICZiaW9zaykKKyAgICBjYWxsIGFwcGVuZCgiJCIsICJjb25za2V5XHR1c2UgZGlyZWN0IGNvbnNvbGUgSS9PIHRvIGdldCBhIGtleWJvYXJkIGNoYXJhY3RlciIpCisgICAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoImNvbnNrIiwgJmNvbnNrKQorICBlbmRpZgorICBpZiBoYXMoIm9zZmlsZXR5cGUiKQorICAgIGNhbGwgYXBwZW5kKCIkIiwgIm9zZmlsZXR5cGVcdE9TLXNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0eXBlIG9mIGZpbGUiKQorICAgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorICAgIGNhbGwgPFNJRD5PcHRpb25MKCJvZnQiKQorICBlbmRpZgorICBpZiBoYXMoIm1zZG9zIikgfHwgaGFzKCJvczIiKSB8fCBoYXMoIndpbjE2IikgfHwgaGFzKCJ3aW4zMiIpCisgICAgY2FsbCBhcHBlbmQoIiQiLCAic2hlbGxzbGFzaFx0dXNlIGZvcndhcmQgc2xhc2hlcyBpbiBmaWxlIG5hbWVzOyBmb3IgVW5peC1saWtlIHNoZWxscyIpCisgICAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoInNzbCIsICZzc2wpCisgIGVuZGlmCitlbmRpZgorCisKK2NhbGwgPFNJRD5IZWFkZXIoImxhbmd1YWdlIHNwZWNpZmljIikKK2NhbGwgYXBwZW5kKCIkIiwgImlzZm5hbWVcdHNwZWNpZmllcyB0aGUgY2hhcmFjdGVycyBpbiBhIGZpbGUgbmFtZSIpCitjYWxsIDxTSUQ+T3B0aW9uRygiaXNmIiwgJmlzZikKK2NhbGwgYXBwZW5kKCIkIiwgImlzaWRlbnRcdHNwZWNpZmllcyB0aGUgY2hhcmFjdGVycyBpbiBhbiBpZGVudGlmaWVyIikKK2NhbGwgPFNJRD5PcHRpb25HKCJpc2kiLCAmaXNpKQorY2FsbCBhcHBlbmQoIiQiLCAiaXNrZXl3b3JkXHRzcGVjaWZpZXMgdGhlIGNoYXJhY3RlcnMgaW4gYSBrZXl3b3JkIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPk9wdGlvbkwoImlzayIpCitjYWxsIGFwcGVuZCgiJCIsICJpc3ByaW50XHRzcGVjaWZpZXMgcHJpbnRhYmxlIGNoYXJhY3RlcnMiKQorY2FsbCA8U0lEPk9wdGlvbkcoImlzcCIsICZpc3ApCitpZiBoYXMoInJpZ2h0bGVmdCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgInJpZ2h0bGVmdFx0ZGlzcGxheSB0aGUgYnVmZmVyIHJpZ2h0LXRvLWxlZnQiKQorICBjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkwoInJsIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAicmlnaHRsZWZ0Y21kXHRXaGVuIHRvIGVkaXQgdGhlIGNvbW1hbmQtbGluZSByaWdodC10by1sZWZ0IikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gd2luZG93KSIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJybGMiKQorICBjYWxsIGFwcGVuZCgiJCIsICJyZXZpbnNcdEluc2VydCBjaGFyYWN0ZXJzIGJhY2t3YXJkcyIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25HKCJyaSIsICZyaSkKKyAgY2FsbCBhcHBlbmQoIiQiLCAiYWxsb3dyZXZpbnNcdEFsbG93IENUUkwtXyBpbiBJbnNlcnQgYW5kIENvbW1hbmQtbGluZSBtb2RlIHRvIHRvZ2dsZSAncmV2aW5zJyIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25HKCJhcmkiLCAmYXJpKQorICBjYWxsIGFwcGVuZCgiJCIsICJhbGVwaFx0dGhlIEFTQ0lJIGNvZGUgZm9yIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIEhlYnJldyBhbHBoYWJldCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCBhbD0iIC4gJmFsKQorICBjYWxsIGFwcGVuZCgiJCIsICJoa21hcFx0dXNlIEhlYnJldyBrZXlib2FyZCBtYXBwaW5nIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoImhrIiwgJmhrKQorICBjYWxsIGFwcGVuZCgiJCIsICJoa21hcHBcdHVzZSBwaG9uZXRpYyBIZWJyZXcga2V5Ym9hcmQgbWFwcGluZyIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25HKCJoa3AiLCAmaGtwKQorZW5kaWYKK2lmIGhhcygiZmFyc2kiKQorICBjYWxsIGFwcGVuZCgiJCIsICJhbHRrZXltYXBcdHVzZSBGYXJzaSBhcyB0aGUgc2Vjb25kIGxhbmd1YWdlIHdoZW4gJ3JldmlucycgaXMgc2V0IikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoImFrbSIsICZha20pCisgIGNhbGwgYXBwZW5kKCIkIiwgImZrbWFwXHR1c2UgRmFyc2kga2V5Ym9hcmQgbWFwcGluZyIpCisgIGNhbGwgPFNJRD5CaW5PcHRpb25HKCJmayIsICZmaykKK2VuZGlmCitpZiBoYXMoImFyYWJpYyIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImFyYWJpY1x0UHJlcGFyZSBmb3IgZWRpdGluZyBBcmFiaWMgdGV4dCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIHdpbmRvdykiKQorICBjYWxsIDxTSUQ+QmluT3B0aW9uTCgiYXJhYiIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImFyYWJpY3NoYXBlXHRQZXJmb3JtIHNoYXBpbmcgb2YgQXJhYmljIGNoYXJhY3RlcnMiKQorICBjYWxsIDxTSUQ+QmluT3B0aW9uRygiYXJzaGFwZSIsICZhcnNoYXBlKQorICBjYWxsIGFwcGVuZCgiJCIsICJ0ZXJtYmlkaVx0VGVybWluYWwgd2lsbCBwZXJmb3JtIGJpZGkgaGFuZGxpbmciKQorICBjYWxsIDxTSUQ+QmluT3B0aW9uRygidGJpZGkiLCAmdGJpZGkpCitlbmRpZgoraWYgaGFzKCJrZXltYXAiKQorICBjYWxsIGFwcGVuZCgiJCIsICJrZXltYXBcdG5hbWUgb2YgYSBrZXlib2FyZCBtYXBwcGluZyIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJrbXAiKQorZW5kaWYKK2lmIGhhcygibGFuZ21hcCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImxhbmdtYXBcdHRyYW5zbGF0ZSBjaGFyYWN0ZXJzIGZvciBOb3JtYWwgbW9kZSIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJsbWFwIiwgJmxtYXApCitlbmRpZgoraWYgaGFzKCJ4aW0iKQorICBjYWxsIGFwcGVuZCgiJCIsICJpbWRpc2FibGVcdHdoZW4gc2V0IG5ldmVyIHVzZSBJTTsgb3ZlcnJ1bGVzIGZvbGxvd2luZyBJTSBvcHRpb25zIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoImltZCIsICZpbWQpCitlbmRpZgorY2FsbCBhcHBlbmQoIiQiLCAiaW1pbnNlcnRcdGluIEluc2VydCBtb2RlOiAxOiB1c2UgOmxtYXA7IDI6IHVzZSBJTTsgMDogbmVpdGhlciIpCitjYWxsIGFwcGVuZCgiJCIsICJcdChsb2NhbCB0byB3aW5kb3cpIikKK2NhbGwgPFNJRD5PcHRpb25MKCJpbWkiKQorY2FsbCBhcHBlbmQoIiQiLCAiaW1zZWFyY2hcdGVudGVyaW5nIGEgc2VhcmNoIHBhdHRlcm46IDE6IHVzZSA6bG1hcDsgMjogdXNlIElNOyAwOiBuZWl0aGVyIikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIHdpbmRvdykiKQorY2FsbCA8U0lEPk9wdGlvbkwoImltcyIpCitpZiBoYXMoInhpbSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImltY21kbGluZVx0d2hlbiBzZXQgYWx3YXlzIHVzZSBJTSB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBjb21tYW5kIGxpbmUiKQorICBjYWxsIDxTSUQ+QmluT3B0aW9uRygiaW1jIiwgJmltYykKK2VuZGlmCisKKworaWYgaGFzKCJtdWx0aV9ieXRlIikKKyAgY2FsbCA8U0lEPkhlYWRlcigibXVsdGktYnl0ZSBjaGFyYWN0ZXJzIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiZW5jb2RpbmdcdGNoYXJhY3RlciBlbmNvZGluZyB1c2VkIGluIFZpbTogXCJsYXRpbjFcIiwgXCJ1dGYtOFwiIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHRcImV1Yy1qcFwiLCBcImJpZzVcIiwgZXRjLiIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJlbmMiLCAmZW5jKQorICBjYWxsIGFwcGVuZCgiJCIsICJmaWxlZW5jb2RpbmdcdGNoYXJhY3RlciBlbmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgZmlsZSIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorICBjYWxsIDxTSUQ+T3B0aW9uTCgiZmVuYyIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImZpbGVlbmNvZGluZ3NcdGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgY2hhcmFjdGVyIGVuY29kaW5ncyIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJmZW5jcyIsICZmZW5jcykKKyAgY2FsbCBhcHBlbmQoIiQiLCAidGVybWVuY29kaW5nXHRjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCBieSB0aGUgdGVybWluYWwiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygidGVuYyIsICZ0ZW5jKQorICBjYWxsIGFwcGVuZCgiJCIsICJjaGFyY29udmVydFx0ZXhwcmVzc2lvbiB1c2VkIGZvciBjaGFyYWN0ZXIgZW5jb2RpbmcgY29udmVyc2lvbiIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJjY3YiLCAmY2N2KQorICBjYWxsIGFwcGVuZCgiJCIsICJkZWxjb21iaW5lXHREZWxldGUgY29tYmluaW5nIChjb21wb3NpbmcpIGNoYXJhY3RlcnMgb24gdGhlaXIgb3duIikKKyAgY2FsbCA8U0lEPkJpbk9wdGlvbkcoImRlY28iLCAmZGVjbykKKyAgaWYgaGFzKCJ4aW0iKSAmJiBoYXMoImd1aV9ndGsiKQorICAgIGNhbGwgYXBwZW5kKCIkIiwgImltYWN0aXZhdGVrZXlcdGtleSB0aGF0IGFjdGl2YXRlcyB0aGUgWCBpbnB1dCBtZXRob2QiKQorICAgIGNhbGwgPFNJRD5PcHRpb25HKCJpbWFrIiwgJmltYWspCisgIGVuZGlmCisgIGNhbGwgYXBwZW5kKCIkIiwgImFtYml3aWR0aFx0V2lkdGggb2YgYW1iaWd1b3VzIHdpZHRoIGNoYXJhY3RlcnMiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygiYW1idyIsICZhbWJ3KQorZW5kaWYKKworCitjYWxsIDxTSUQ+SGVhZGVyKCJ2YXJpb3VzIikKK2lmIGhhcygidmlydHVhbGVkaXQiKQorICBjYWxsIGFwcGVuZCgiJCIsICJ2aXJ0dWFsZWRpdFx0d2hlbiB0byB1c2UgdmlydHVhbCBlZGl0aW5nOiBcImJsb2NrXCIsIFwiaW5zZXJ0XCIgYW5kL29yIFwiYWxsXCIiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygidmUiLCAmdmUpCitlbmRpZgoraWYgaGFzKCJhdXRvY21kIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiZXZlbnRpZ25vcmVcdGxpc3Qgb2YgYXV0b2NvbW1hbmQgZXZlbnRzIHdoaWNoIGFyZSB0byBiZSBpZ25vcmVkIikKKyAgY2FsbCA8U0lEPk9wdGlvbkcoImVpIiwgJmVpKQorZW5kaWYKK2NhbGwgYXBwZW5kKCIkIiwgImxvYWRwbHVnaW5zXHRsb2FkIHBsdWdpbiBzY3JpcHRzIHdoZW4gc3RhcnRpbmcgdXAiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoImxwbCIsICZscGwpCitjYWxsIGFwcGVuZCgiJCIsICJleHJjXHRlbmFibGUgcmVhZGluZyAudmltcmMvLmV4cmMvLmd2aW1yYyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoImV4IiwgJmV4KQorY2FsbCBhcHBlbmQoIiQiLCAic2VjdXJlXHRzYWZlciB3b3JraW5nIHdpdGggc2NyaXB0IGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSIpCitjYWxsIDxTSUQ+QmluT3B0aW9uRygic2VjdXJlIiwgJnNlY3VyZSkKK2NhbGwgYXBwZW5kKCIkIiwgImdkZWZhdWx0XHR1c2UgdGhlICdnJyBmbGFnIGZvciBcIjpzdWJzdGl0dXRlXCIiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkcoImdkIiwgJmdkKQorY2FsbCBhcHBlbmQoIiQiLCAiZWRjb21wYXRpYmxlXHQnZycgYW5kICdjJyBmbGFncyBvZiBcIjpzdWJzdGl0dXRlXCIgdG9nZ2xlIikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJlZCIsICZlZCkKKyAgY2FsbCBhcHBlbmQoIiQiLCAibWF4ZnVuY2RlcHRoXHRtYXhpbXVtIGRlcHRoIG9mIGZ1bmN0aW9uIGNhbGxzIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiIFx0c2V0IG1mZD0iIC4gJm1mZCkKK2lmIGhhcygibWtzZXNzaW9uIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAic2Vzc2lvbm9wdGlvbnNcdGxpc3Qgb2Ygd29yZHMgdGhhdCBzcGVjaWZpZXMgd2hhdCB0byBwdXQgaW4gYSBzZXNzaW9uIGZpbGUiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygic3NvcCIsICZzc29wKQorICBjYWxsIGFwcGVuZCgiJCIsICJ2aWV3b3B0aW9uc1x0bGlzdCBvZiB3b3JkcyB0aGF0IHNwZWNpZmllcyB3aGF0IHRvIHNhdmUgZm9yIDpta3ZpZXciKQorICBjYWxsIDxTSUQ+T3B0aW9uRygidm9wIiwgJnZvcCkKKyAgY2FsbCBhcHBlbmQoIiQiLCAidmlld2Rpclx0ZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIGZpbGVzIHdpdGggOm1rdmlldyIpCisgIGNhbGwgPFNJRD5PcHRpb25HKCJ2ZGlyIiwgJnZkaXIpCitlbmRpZgoraWYgaGFzKCJ2aW1pbmZvIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAidmltaW5mb1x0bGlzdCB0aGF0IHNwZWNpZmllcyB3aGF0IHRvIHdyaXRlIGluIHRoZSB2aW1pbmZvIGZpbGUiKQorICBjYWxsIDxTSUQ+T3B0aW9uRygidmkiLCAmdmkpCitlbmRpZgoraWYgaGFzKCJxdWlja2ZpeCIpCisgIGNhbGwgYXBwZW5kKCIkIiwgImJ1ZmhpZGRlblx0d2hhdCBoYXBwZW5zIHdpdGggYSBidWZmZXIgd2hlbiBpdCdzIG5vIGxvbmdlciBpbiBhIHdpbmRvdyIpCisgIGNhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorICBjYWxsIDxTSUQ+T3B0aW9uTCgiYmgiKQorICBjYWxsIGFwcGVuZCgiJCIsICJidWZ0eXBlXHRcIlwiLCBcIm5vZmlsZVwiLCBcIm5vd3JpdGVcIiBvciBcInF1aWNrZml4XCI6IHR5cGUgb2YgYnVmZmVyIikKKyAgY2FsbCBhcHBlbmQoIiQiLCAiXHQobG9jYWwgdG8gYnVmZmVyKSIpCisgIGNhbGwgPFNJRD5PcHRpb25MKCJidCIpCitlbmRpZgorY2FsbCBhcHBlbmQoIiQiLCAiYnVmbGlzdGVkXHR3aGV0aGVyIHRoZSBidWZmZXIgc2hvd3MgdXAgaW4gdGhlIGJ1ZmZlciBsaXN0IikKK2NhbGwgYXBwZW5kKCIkIiwgIlx0KGxvY2FsIHRvIGJ1ZmZlcikiKQorY2FsbCA8U0lEPkJpbk9wdGlvbkwoImJsIikKK2NhbGwgYXBwZW5kKCIkIiwgImRlYnVnXHRzZXQgdG8gXCJtc2dcIiB0byBzZWUgYWxsIGVycm9yIG1lc3NhZ2VzIikKK2NhbGwgYXBwZW5kKCIkIiwgIiBcdHNldCBkZWJ1Zz0iIC4gJmRlYnVnKQorCitzZXQgY3BvJnZpbQorCisiIGdvIHRvIGZpcnN0IGxpbmUKKzEKKworIiByZXNldCAnbW9kaWZpZWQnLCBzbyB0aGF0ICI6cSIgY2FuIGJlIHVzZWQgdG8gY2xvc2UgdGhlIHdpbmRvdworc2V0bG9jYWwgbm9tb2RpZmllZAorCitpZiBoYXMoInN5bnRheCIpCisgICIgVXNlIFZpbSBoaWdobGlnaHRpbmcsIHdpdGggc29tZSBhZGRpdGlvbmFsIHN0dWZmCisgIHNldGxvY2FsIGZ0PXZpbQorICBzeW4gbWF0Y2ggb3B0d2luSGVhZGVyICJeIFw9WzAtOV0uKiIKKyAgc3luIG1hdGNoIG9wdHdpbk5hbWUgIl5bYS16XSpcdCIgbmV4dGdyb3VwPW9wdHdpbkNvbW1lbnQKKyAgc3luIG1hdGNoIG9wdHdpbkNvbW1lbnQgIi4qIiBjb250YWluZWQKKyAgc3luIG1hdGNoIG9wdHdpbkNvbW1lbnQgIl5cdC4qIgorICBpZiAhZXhpc3RzKCJkaWRfb3B0d2luX3N5bnRheF9pbml0cyIpCisgICAgbGV0IGRpZF9vcHR3aW5fc3ludGF4X2luaXRzID0gMQorICAgIGhpIGxpbmsgb3B0d2luSGVhZGVyIFRpdGxlCisgICAgaGkgbGluayBvcHR3aW5OYW1lIElkZW50aWZpZXIKKyAgICBoaSBsaW5rIG9wdHdpbkNvbW1lbnQgQ29tbWVudAorICBlbmRpZgorZW5kaWYKKworIiBJbnN0YWxsIGF1dG9jb21tYW5kcyB0byBlbmFibGUgbWFwcGluZ3MgaW4gb3B0aW9uLXdpbmRvdworbm9yZW1hcCA8c2lsZW50PiA8YnVmZmVyPiA8Q1I+IDxDLVw+PEMtTj46Y2FsbCA8U0lEPkNSKCk8Q1I+Citpbm9yZW1hcCA8c2lsZW50PiA8YnVmZmVyPiA8Q1I+IDxFc2M+OmNhbGwgPFNJRD5DUigpPENSPgorbm9yZW1hcCA8c2lsZW50PiA8YnVmZmVyPiA8U3BhY2U+IDpjYWxsIDxTSUQ+U3BhY2UoKTxDUj4KKworIiBNYWtlIHRoZSBidWZmZXIgYmUgZGVsZXRlZCB3aGVuIHRoZSB3aW5kb3cgaXMgY2xvc2VkLgorc2V0bG9jYWwgYnVmdHlwZT1ub2ZpbGUgYnVmaGlkZGVuPWRlbGV0ZSBub3N3YXBmaWxlCisKK2F1Z3JvdXAgb3B0d2luCisgIGF1ISBCdWZVbmxvYWQsQnVmSGlkZGVuIG9wdGlvbi13aW5kb3cgbmVzdGVkCisJXCBjYWxsIDxTSUQ+dW5sb2FkKCkgfCBkZWxmdW4gPFNJRD51bmxvYWQKK2F1Z3JvdXAgRU5ECisKK2Z1biEgPFNJRD51bmxvYWQoKQorICBkZWxmdW4gPFNJRD5DUgorICBkZWxmdW4gPFNJRD5TcGFjZQorICBkZWxmdW4gPFNJRD5GaW5kCisgIGRlbGZ1biA8U0lEPlVwZGF0ZQorICBkZWxmdW4gPFNJRD5PcHRpb25MCisgIGRlbGZ1biA8U0lEPk9wdGlvbkcKKyAgZGVsZnVuIDxTSUQ+QmluT3B0aW9uTAorICBkZWxmdW4gPFNJRD5CaW5PcHRpb25HCisgIGRlbGZ1biA8U0lEPkhlYWRlcgorICBhdSEgb3B0d2luCitlbmRmdW4KKworIiBSZXN0b3JlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiAndGl0bGUnIGFuZCAnaWNvbicuCitsZXQgJnRpdGxlID0gczpvbGRfdGl0bGUKK2xldCAmaWNvbiA9IHM6b2xkX2ljb24KK2xldCAmcnUgPSBzOm9sZF9ydQorbGV0ICZzYyA9IHM6b2xkX3NjCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6b2xkX3RpdGxlIHM6b2xkX2ljb24gczpvbGRfcnUgczpvbGRfc2MgczpjcG9fc2F2ZSBzOmlkeCBzOmxudW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvcGx1Z2luL1JFQURNRS50eHQgYi9ydW50aW1lL3BsdWdpbi9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4OWViZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3BsdWdpbi9SRUFETUUudHh0CkBAIC0wLDAgKzEsOSBAQAorVGhlIHBsdWdpbiBkaXJlY3RvcnkgaXMgZm9yIHN0YW5kYXJkIFZpbSBwbHVnaW4gc2NyaXB0cy4KKworQWxsIGZpbGVzIGhlcmUgZW5kaW5nIGluIC52aW0gd2lsbCBiZSBzb3VyY2VkIGJ5IFZpbSB3aGVuIGl0IHN0YXJ0cyB1cC4KKworU3RhbmRhcmQgcGx1Z2luczoKK2V4cGxvcmVyLnZpbQlmaWxlIGJyb3dzZXIKK2d6aXAudmltCWVkaXQgY29tcHJlc3NlZCBmaWxlcworbmV0cncudmltCWVkaXQgZmlsZXMgb3ZlciBhIG5ldHdvcmsKK3JyaGVscGVyLnZpbQl1c2VkIGZvciAtLXJlbW90ZS13YWl0IGVkaXRpbmcKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcGx1Z2luL2V4cGxvcmVyLnZpbSBiL3J1bnRpbWUvcGx1Z2luL2V4cGxvcmVyLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTViNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9wbHVnaW4vZXhwbG9yZXIudmltCkBAIC0wLDAgKzEsMTMyNiBAQAorIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisiIEZpbGU6IGV4cGxvcmVyLnZpbQorIiBBdXRob3I6IE0gQSBBeml6IEFobWVkIChheml6QGFjb3JuLW5ldHdvcmtzLmNvbSAtIGRvZXNuJ3Qgd29yaykKKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDEzCisiIFZlcnNpb246IDIuNSArIGNoYW5nZXMKKyIgQWRkaXRpb25zIGJ5IE1hcmsgV2FnZ29uZXIgKHdhZ2dvbmVyQGFyYWNuZXQuY29tKSBldCBhbC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIGZpbGUgZXhwbG9yZXIuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgTm9ybWFsbHksIHRoaXMgZmlsZSB3aWxsIHJlc2lkZSBpbiB0aGUgcGx1Z2lucyBkaXJlY3RvcnkgYW5kIGJlCisiIGF1dG9tYXRpY2FsbHkgc291cmNlZC4gIElmIG5vdCwgeW91IG11c3QgbWFudWFsbHkgc291cmNlIHRoaXMgZmlsZQorIiB1c2luZyA6c291cmNlIGV4cGxvcmVyLnZpbQorIgorIiBUbyB1c2UgaXQsIGp1c3QgZWRpdCBhIGRpcmVjdG9yeSAodmkgZGlybmFtZSkgb3IgdHlwZSA6RXhwbG9yZSB0bworIiBsYXVuY2ggdGhlIGZpbGUgZXhwbG9yZXIgaW4gdGhlIGN1cnJlbnQgd2luZG93LCBvciA6U2V4cGxvcmUgdG8gc3BsaXQKKyIgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBsYXVuY2ggZXhwbG9yZXIgdGhlcmUuCisiCisiIElmIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBtb2RpZmllZCwgdGhlIHdpbmRvdyBpcyBhbHdheXMgc3BsaXQuCisiCisiIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZGVsZXRlIGZpbGVzIGFuZCByZW5hbWUgZmlsZXMgd2l0aGluIGV4cGxvcmVyLgorIiBTZWUgOmhlbHAgZmlsZS1leHBsb3JlciBmb3IgbW9yZSBkZXRhaWxzCisiCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVXBkYXRlIGhpc3RvcnkgcmVtb3ZlZCwgaXQncyBub3QgdmVyeSBpbnRlcmVzdGluZy4KKyIgQ29udHJpYnV0b3JzIHdlcmU6IERvdWcgUG90dHMsIEJyYW0gTW9vbGVuYWFyLCBUaG9tYXMgS/ZobGVyCisiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIiBIYXMgdGhpcyBhbHJlYWR5IGJlZW4gbG9hZGVkPworaWYgZXhpc3RzKCJsb2FkZWRfZXhwbG9yZXIiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgbG9hZGVkX2V4cGxvcmVyPTEKKworIiBMaW5lIGNvbnRpbnVhdGlvbiB1c2VkIGhlcmUKK2xldCBzOmNwb19zYXZlID0gJmNwbworc2V0IGNwbyZ2aW0KKworIi0tLQorIiBEZWZhdWx0IHNldHRpbmdzIGZvciBnbG9iYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKworIiBTcGxpdCB2ZXJ0aWNhbGx5IGluc3RlYWQgb2YgaG9yaXpvbnRhbGx5PworaWYgIWV4aXN0cygiZzpleHBsVmVydGljYWwiKQorICBsZXQgZzpleHBsVmVydGljYWw9MAorZW5kaWYKKworIiBIb3cgYmlnIHRvIG1ha2UgdGhlIHdpbmRvdz8gU2V0IHRvICIiIHRvIGF2b2lkIHJlc2l6aW5nCitpZiAhZXhpc3RzKCJnOmV4cGxXaW5TaXplIikKKyAgbGV0IGc6ZXhwbFdpblNpemU9MTUKK2VuZGlmCisKKyIgV2hlbiBvcGVuaW5nIGEgbmV3IGZpbGUvZGlyZWN0b3J5LCBzcGxpdCBiZWxvdyBjdXJyZW50IHdpbmRvdyAob3IKKyIgYWJvdmUpPyAgMSA9IGJlbG93LCAwID0gdG8gYWJvdmUKK2lmICFleGlzdHMoImc6ZXhwbFNwbGl0QmVsb3ciKQorICBsZXQgZzpleHBsU3BsaXRCZWxvdyA9ICZzcGxpdGJlbG93CitlbmRpZgorCisiIFNwbGl0IHRvIHJpZ2h0IG9mIGN1cnJlbnQgd2luZG93IChvciB0byBsZWZ0KT8KKyIgMSA9IHRvIHJpZ2h0LCAwID0gdG8gbGVmdAoraWYgIWV4aXN0cygiZzpleHBsU3BsaXRSaWdodCIpCisgIGxldCBnOmV4cGxTcGxpdFJpZ2h0ID0gJnNwbGl0cmlnaHQKK2VuZGlmCisKKyIgU3RhcnQgdGhlIGZpcnN0IGV4cGxvcmVyIHdpbmRvdy4uLgorIiBEZWZhdWx0cyB0byBiZSB0aGUgc2FtZSBhcyBleHBsU3BsaXRCZWxvdworaWYgIWV4aXN0cygiZzpleHBsU3RhcnRCZWxvdyIpCisgIGxldCBnOmV4cGxTdGFydEJlbG93ID0gZzpleHBsU3BsaXRCZWxvdworZW5kaWYKKworIiBTdGFydCB0aGUgZmlyc3QgZXhwbG9yZXIgd2luZG93Li4uCisiIERlZmF1bHRzIHRvIGJlIHRoZSBzYW1lIGFzIGV4cGxTcGxpdFJpZ2h0CitpZiAhZXhpc3RzKCJnOmV4cGxTdGFydFJpZ2h0IikKKyAgbGV0IGc6ZXhwbFN0YXJ0UmlnaHQgPSBnOmV4cGxTcGxpdFJpZ2h0CitlbmRpZgorCisiIFNob3cgZGV0YWlsZWQgaGVscD8KK2lmICFleGlzdHMoImc6ZXhwbERldGFpbGVkSGVscCIpCisgIGxldCBnOmV4cGxEZXRhaWxlZEhlbHA9MAorZW5kaWYKKworIiBTaG93IGZpbGUgc2l6ZSBhbmQgZGF0ZXM/CitpZiAhZXhpc3RzKCJnOmV4cGxEZXRhaWxlZExpc3QiKQorICBsZXQgZzpleHBsRGV0YWlsZWRMaXN0PTAKK2VuZGlmCisKKyIgRm9ybWF0IGZvciB0aGUgZGF0ZQoraWYgIWV4aXN0cygiZzpleHBsRGF0ZUZvcm1hdCIpCisgIGxldCBnOmV4cGxEYXRlRm9ybWF0PSIlZCAlYiAlWSAlSDolTSIKK2VuZGlmCisKKyIgRmlsZXMgdG8gaGlkZQoraWYgIWV4aXN0cygiZzpleHBsSGlkZUZpbGVzIikKKyAgbGV0IGc6ZXhwbEhpZGVGaWxlcz0nJworZW5kaWYKKworIiBGaWVsZCB0byBzb3J0IGJ5CitpZiAhZXhpc3RzKCJnOmV4cGxTb3J0QnkiKQorICBsZXQgZzpleHBsU29ydEJ5PSduYW1lJworZW5kaWYKKworIiBTZWdyZWdhdGUgZGlyZWN0b3JpZXM/IDEsIDAsIG9yIC0xCitpZiAhZXhpc3RzKCJnOmV4cGxEaXJzRmlyc3QiKQorICBsZXQgZzpleHBsRGlyc0ZpcnN0PTEKK2VuZGlmCisKKyIgU2VncmVnYXRlIGl0ZW1zIGluIHN1ZmZpeGVzIG9wdGlvbj8gMSwgMCwgb3IgLTEKK2lmICFleGlzdHMoImc6ZXhwbFN1ZmZpeGVzTGFzdCIpCisgIGxldCBnOmV4cGxTdWZmaXhlc0xhc3Q9MQorZW5kaWYKKworIiBJbmNsdWRlIHNlcGFyYXRvciBsaW5lcyBiZXR3ZWVuIGRpcmVjdG9yaWVzLCBmaWxlcywgYW5kIHN1ZmZpeGVzPworaWYgIWV4aXN0cygiZzpleHBsVXNlU2VwYXJhdG9ycyIpCisgIGxldCBnOmV4cGxVc2VTZXBhcmF0b3JzPTAKK2VuZGlmCisKKyIgRXhlY3V0ZSBmaWxlIGhhbmRsZXIKK2lmICFleGlzdHMoImc6ZXhwbEZpbGVIYW5kbGVyIikKKyAgaWYgaGFzKCJ3aW4zMiIpCisgICAgIiBmb3IgV2luMzIgdXNlIHJ1bmRsbDMyCisgICAgZnVuY3Rpb24hIHM6ZXhwbEZpbGVIYW5kbGVyV2luMzIoZm4pCisgICAgICBleGVjICdzaWxlbnQgIXN0YXJ0IHJ1bmRsbDMyIHVybC5kbGwsRmlsZVByb3RvY29sSGFuZGxlciAiJworCQlcIC4gZXNjYXBlKGE6Zm4sICclIycpIC4gJyInCisgICAgZW5kZnVuY3Rpb24KKyAgICBsZXQgZzpleHBsRmlsZUhhbmRsZXIgPSAiPFNJRD5leHBsRmlsZUhhbmRsZXJXaW4zMiIKKworICBlbHNlaWYgaGFzKCJ1bml4IikKKyAgICAiIGZvciBLREUgdXNlIGtmbWNsaWVudCwgZm9yIEdOVU1FIHVzZSBnbm9tZS1vcGVuCisgICAgaWYgZXhlY3V0YWJsZSgia2ZtY2xpZW50IikKKyAgICAgIGxldCBnOmV4cGxGaWxlSGFuZGxlckNtZCA9ICJrZm1jbGllbnQgZXhlYyIKKyAgICBlbHNlaWYgZXhlY3V0YWJsZSgiZ25vbWUtb3BlbiIpCisgICAgICBsZXQgZzpleHBsRmlsZUhhbmRsZXJDbWQgPSAiZ25vbWUtb3BlbiIKKyAgICBlbHNlCisgICAgICBsZXQgZzpleHBsRmlsZUhhbmRsZXJDbWQgPSAiIgorICAgIGVuZGlmCisgICAgaWYgZzpleHBsRmlsZUhhbmRsZXJDbWQgIT0gIiIKKyAgICAgIGZ1bmN0aW9uISBzOmV4cGxGaWxlSGFuZGxlclVuaXgoZm4pCisJaWYgJnNoZWxscmVkaXIgPX4gIiVzIgorCSAgbGV0IHJlZGlyID0gc3Vic3RpdHV0ZSgmc2hlbGxyZWRpciwgIiVzIiwgIi9kZXYvbnVsbCIsICIiKQorCWVsc2UKKwkgIGxldCByZWRpciA9ICZzaGVsbHJlZGlyIC4gIi9kZXYvbnVsbCIKKwllbmRpZgorCSIgTmVlZCB0byBlc2NhcGUgJSBhbmQgIyBidXQgbm90IHNwYWNlcy4KKwlleGVjICJzaWxlbnQgISIgLiBnOmV4cGxGaWxlSGFuZGxlckNtZCAuICIgJyIgLiBlc2NhcGUoYTpmbiwgJyUjJykgLiAiJyIgLiByZWRpcgorICAgICAgZW5kZnVuY3Rpb24KKyAgICAgIGxldCBnOmV4cGxGaWxlSGFuZGxlciA9ICI8U0lEPmV4cGxGaWxlSGFuZGxlclVuaXgiCisgICAgZW5kaWYKKyAgZW5kaWYKK2VuZGlmCisKKyItLS0KKyIgc2NyaXB0IHZhcmlhYmxlcyAtIHRoZXNlIGFyZSB0aGUgc2FtZSBhY3Jvc3MgYWxsCisiIGV4cGxvcmVyIHdpbmRvd3MKKworIiBjaGFyYWN0ZXJzIHRoYXQgbXVzdCBiZSBlc2NhcGVkIGZvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorbGV0IHM6ZXNjcmVnZXhwID0gJy8qXiQuflwnCisKKyIgY2hhcmFjdGVycyB0aGF0IG11c3QgYmUgZXNjYXBlZCBmb3IgZmlsZW5hbWVzCitpZiBoYXMoImRvczE2IikgfHwgaGFzKCJkb3MzMiIpIHx8IGhhcygid2luMTYiKSB8fCBoYXMoIndpbjMyIikgfHwgaGFzKCJvczIiKQorICBsZXQgczplc2NmaWxlbmFtZSA9ICcgJSMnCitlbHNlCisgIGxldCBzOmVzY2ZpbGVuYW1lID0gJyBcJSNbXScKK2VuZGlmCisKKworIiBBIGxpbmUgdG8gdXNlIGZvciBzZXBhcmF0aW5nIHNlY3Rpb25zCitsZXQgczpzZXBhcmF0b3I9JyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCisKKyItLS0KKyIgQ3JlYXRlIGNvbW1hbmRzCisKK2lmICFleGlzdHMoJzpFeHBsb3JlJykKKyAgY29tbWFuZCAtbj0/IC1jb21wbGV0ZT1kaXIgRXhwbG9yZSA6Y2FsbCBzOlN0YXJ0RXhwbG9yZXIoMCwgJzxhPicpCitlbmRpZgoraWYgIWV4aXN0cygnOlNleHBsb3JlJykKKyAgY29tbWFuZCAtbj0/IC1jb21wbGV0ZT1kaXIgU2V4cGxvcmUgOmNhbGwgczpTdGFydEV4cGxvcmVyKDEsICc8YT4nKQorZW5kaWYKKworIi0tLQorIiBTdGFydCB0aGUgZXhwbG9yZXIgdXNpbmcgdGhlIHByZWZlcmVuY2VzIGZyb20gdGhlIGdsb2JhbCB2YXJpYWJsZXMKKyIKK2Z1bmN0aW9uISBzOlN0YXJ0RXhwbG9yZXIoc3BsaXQsIHN0YXJ0X2RpcikKKyAgbGV0IHN0YXJ0Y21kID0gImVkaXQiCisgIGlmIGE6c3RhcnRfZGlyICE9ICIiCisgICAgbGV0IGZuYW1lPWE6c3RhcnRfZGlyCisgIGVsc2UKKyAgICBsZXQgZm5hbWUgPSBleHBhbmQoIiU6cDpoIikKKyAgZW5kaWYKKyAgaWYgZm5hbWUgPT0gIiIKKyAgICBsZXQgZm5hbWUgPSBnZXRjd2QoKQorICBlbmRpZgorCisgICIgQ3JlYXRlIGEgdmFyaWFibGUgdG8gdXNlIGlmIHNwbGl0dGluZyB2ZXJ0aWNhbGx5CisgIGxldCBzcGxpdE1vZGUgPSAiIgorICBpZiBnOmV4cGxWZXJ0aWNhbCA9PSAxCisgICAgbGV0IHNwbGl0TW9kZSA9ICJ2ZXJ0aWNhbCIKKyAgZW5kaWYKKworICAiIFNhdmUgdGhlIHVzZXIncyBzZXR0aW5ncyBmb3Igc3BsaXRiZWxvdyBhbmQgc3BsaXRyaWdodAorICBsZXQgc2F2ZXNwbGl0YmVsb3cgPSAmc3BsaXRiZWxvdworICBsZXQgc2F2ZXNwbGl0cmlnaHQgPSAmc3BsaXRyaWdodAorCisgIGlmIGE6c3BsaXQgfHwgJm1vZGlmaWVkCisgICAgbGV0IHN0YXJ0Y21kID0gc3BsaXRNb2RlIC4gIiAiIC4gZzpleHBsV2luU2l6ZSAuICJuZXcgIiAuIGZuYW1lCisgICAgbGV0ICZzcGxpdGJlbG93ID0gZzpleHBsU3RhcnRCZWxvdworICAgIGxldCAmc3BsaXRyaWdodCA9IGc6ZXhwbFN0YXJ0UmlnaHQKKyAgZWxzZQorICAgIGxldCBzdGFydGNtZCA9ICJlZGl0ICIgLiBmbmFtZQorICBlbmRpZgorICBzaWxlbnQgZXhlY3V0ZSBzdGFydGNtZAorICBsZXQgJnNwbGl0YmVsb3cgPSBzYXZlc3BsaXRiZWxvdworICBsZXQgJnNwbGl0cmlnaHQgPSBzYXZlc3BsaXRyaWdodAorZW5kZnVuY3Rpb24KKworIi0tLQorIiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IGZvciAnZWRpdGluZycgYSBkaXJlY3RvcnkKKyIKK2Z1bmN0aW9uISBzOkVkaXREaXIoKQorICAiIEdldCBvdXQgb2YgaGVyZSByaWdodCBhd2F5IGlmIHRoaXMgaXNuJ3QgYSBkaXJlY3RvcnkhCisgIGxldCBuYW1lID0gZXhwYW5kKCIlIikKKyAgaWYgbmFtZSA9PSAiIgorICAgIGxldCBuYW1lID0gZXhwYW5kKCIlOnAiKQorICBlbmRpZgorICBpZiAhaXNkaXJlY3RvcnkobmFtZSkKKyAgICByZXR1cm4KKyAgZW5kaWYKKworICAiIFR1cm4gb2ZmIHRoZSBzd2FwZmlsZSwgc2V0IHRoZSBidWZmZXIgdHlwZSBzbyB0aGF0IGl0IHdvbid0IGdldAorICAiIHdyaXR0ZW4sIGFuZCBzbyB0aGF0IGl0IHdpbGwgZ2V0IGRlbGV0ZWQgd2hlbiBpdCBnZXRzIGhpZGRlbi4KKyAgc2V0bG9jYWwgbm9yZWFkb25seSBtb2RpZmlhYmxlCisgIHNldGxvY2FsIG5vc3dhcGZpbGUKKyAgc2V0bG9jYWwgYnVmdHlwZT1ub3dyaXRlCisgIHNldGxvY2FsIGJ1ZmhpZGRlbj1kZWxldGUKKyAgIiBEb24ndCB3cmFwIGFyb3VuZCBsb25nIGxpbmVzCisgIHNldGxvY2FsIG5vd3JhcAorCisgICIgTm8gbmVlZCBmb3IgYW55IGluc2VydG1vZGUgYWJicmV2aWF0aW9ucywgc2luY2Ugd2UgZG9uJ3QgYWxsb3cKKyAgIiBpbnNlcnRpb25zIGFueXdheSEKKyAgaWFiYyA8YnVmZmVyPgorCisgICIgTG9uZyBvciBzaG9ydCBsaXN0aW5nPyAgVXNlIHRoZSBnbG9iYWwgdmFyaWFibGUgdGhlIGZpcnN0IHRpbWUKKyAgIiBleHBsb3JlciBpcyBjYWxsZWQsIGFmdGVyIHRoYXQgdXNlIHRoZSBzY3JpcHQgdmFyaWFibGUgYXMgc2V0IGJ5CisgICIgdGhlIGludGVyYWN0aXZlIHVzZXIuCisgIGlmIGV4aXN0cygiczpsb25nbGlzdCIpCisgICAgbGV0IHc6bG9uZ2xpc3QgPSBzOmxvbmdsaXN0CisgIGVsc2UKKyAgICBsZXQgdzpsb25nbGlzdCA9IGc6ZXhwbERldGFpbGVkTGlzdAorICBlbmRpZgorCisgICIgU2hvdyBrZXlib2FyZCBzaG9ydGN1dHM/CisgIGlmIGV4aXN0cygiczpsb25naGVscCIpCisgICAgbGV0IHc6bG9uZ2hlbHAgPSBzOmxvbmdoZWxwCisgIGVsc2UKKyAgICBsZXQgdzpsb25naGVscCA9IGc6ZXhwbERldGFpbGVkSGVscAorICBlbmRpZgorCisgICIgU2V0IHRoZSBzb3J0IGJhc2VkIG9uIHRoZSBnbG9iYWwgdmFyaWFibGVzIHRoZSBmaXJzdCB0aW1lLiAgSWYgeW91CisgICIgbGF0ZXIgY2hhbmdlIHRoZSBzb3J0IG9yZGVyLCBpdCB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBzOnNvcnRieQorICAiIHZhcmlhYmxlIGZvciB0aGUgbmV4dCB0aW1lIHlvdSBvcGVuIGV4cGxvcmVyCisgIGxldCB3OnNvcnRkaXJlY3Rpb249MQorICBsZXQgdzpzb3J0ZGlybGFiZWwgPSAiIgorICBsZXQgdzpzb3J0dHlwZSA9ICIiCisgIGlmIGV4aXN0cygiczpzb3J0YnkiKQorICAgIGxldCBzb3J0Ynk9czpzb3J0YnkKKyAgZWxzZQorICAgIGxldCBzb3J0Ynk9ZzpleHBsU29ydEJ5CisgIGVuZGlmCisgIGlmIHNvcnRieSA9fiAicmV2ZXJzZSIKKyAgICBsZXQgdzpzb3J0ZGlyZWN0aW9uPS0xCisgICAgbGV0IHc6c29ydGRpcmxhYmVsID0gInJldmVyc2UgIgorICBlbmRpZgorICBpZiBzb3J0YnkgPX4gImRhdGUiCisgICAgbGV0IHc6c29ydHR5cGUgPSAiZGF0ZSIKKyAgZWxzZWlmIHNvcnRieSA9fiAic2l6ZSIKKyAgICBsZXQgdzpzb3J0dHlwZSA9ICJzaXplIgorICBlbHNlCisgICAgbGV0IHc6c29ydHR5cGUgPSAibmFtZSIKKyAgZW5kaWYKKyAgY2FsbCBzOlNldFN1ZmZpeGVzTGFzdCgpCisKKyAgIiBJZiBkaXJlY3RvcnkgaXMgYWxyZWFkeSBsb2FkZWQsIGRvbid0IG9wZW4gaXQgYWdhaW4hCisgIGlmIGxpbmUoJyQnKSA+IDEKKyAgICBzZXRsb2NhbCByZWFkb25seSBub21vZGlmaWFibGUKKyAgICByZXR1cm4KKyAgZW5kaWYKKworICAiIEdldCB0aGUgY29tcGxldGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIGxvb2sgYXQgd2l0aCBhIHNsYXNoIGF0CisgICIgdGhlIGVuZC4gIFRoaXMgYWxzbyByZW1vdmVzICIvLi4vIiBhbmQgIi8uLyIgdGhpbmdzLgorICBsZXQgYjpjb21wbGV0ZVBhdGggPSBzOlBhdGgoZXhwYW5kKCIlOnAiKSkKKworICAiIEFkZCBhIHNsYXNoIGF0IHRoZSBlbmQKKyAgaWYgYjpjb21wbGV0ZVBhdGggIX4gJy8kJworICAgIGxldCBiOmNvbXBsZXRlUGF0aCA9IGI6Y29tcGxldGVQYXRoIC4gJy8nCisgIGVuZGlmCisKKyAgIiBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGZvciBleGVjIGNvbW1hbmRzCisgIGxldCBiOmNvbXBsZXRlUGF0aEVzYyA9IGVzY2FwZShiOmNvbXBsZXRlUGF0aCwgczplc2NmaWxlbmFtZSkKKyAgbGV0IGI6cGFyZW50RGlyRXNjID0gc3Vic3RpdHV0ZShiOmNvbXBsZXRlUGF0aEVzYywgJy9bXi9dKi8kJywgJy8nLCAnZycpCisKKyAgIiBTZXQgdXAgc3ludGF4IGhpZ2hsaWdodGluZworICAiIFNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBjb25kaXRpb25hbCB0aG91Z2guLi4KKyAgaWYgaGFzKCJzeW50YXgiKSAmJiBleGlzdHMoImc6c3ludGF4X29uIikgJiYgIWhhcygic3ludGF4X2l0ZW1zIikKKyAgICBzeW4gbWF0Y2ggYnJvd3NlU3lub3BzaXMgICAgIl5cIlsgLV0uKiIKKyAgICBzeW4gbWF0Y2ggYnJvd3NlRGlyZWN0b3J5ICAgIlteXCJdLiovICIKKyAgICBzeW4gbWF0Y2ggYnJvd3NlRGlyZWN0b3J5ICAgIlteXCJdLiovJCIKKyAgICBzeW4gbWF0Y2ggYnJvd3NlQ3VyRGlyICAgICAgIl5cIj0gLiokIgorICAgIHN5biBtYXRjaCBicm93c2VTb3J0QnkgICAgICAiXlwiIFNvcnRlZCBieSAuKiQiICBjb250YWlucz1icm93c2VTdWZmaXhJbmZvCisgICAgc3luIG1hdGNoIGJyb3dzZVN1ZmZpeEluZm8gICIoLiopJCIgIGNvbnRhaW5lZAorICAgIHN5biBtYXRjaCBicm93c2VGaWx0ZXIgICAgICAiXlwiIE5vdCBTaG93aW5nOi4qJCIKKyAgICBzeW4gbWF0Y2ggYnJvd3NlRmlsZXRpbWUgICAgIqurXGRcKyQiCisgICAgZXhlYygnc3luIG1hdGNoIGJyb3dzZVN1ZmZpeGVzICAgICInIC4gYjpzdWZmaXhlc0hpZ2hsaWdodCAuICciJykKKworICAgICJoaSBkZWYgbGluayBicm93c2VTeW5vcHNpcyAgICBQcmVQcm9jCisgICAgaGkgZGVmIGxpbmsgYnJvd3NlU3lub3BzaXMgICAgU3BlY2lhbAorICAgIGhpIGRlZiBsaW5rIGJyb3dzZURpcmVjdG9yeSAgIERpcmVjdG9yeQorICAgIGhpIGRlZiBsaW5rIGJyb3dzZUN1ckRpciAgICAgIFN0YXRlbWVudAorICAgIGhpIGRlZiBsaW5rIGJyb3dzZVNvcnRCeSAgICAgIFN0cmluZworICAgIGhpIGRlZiBsaW5rIGJyb3dzZVN1ZmZpeEluZm8gIFR5cGUKKyAgICBoaSBkZWYgbGluayBicm93c2VGaWx0ZXIgICAgICBTdHJpbmcKKyAgICBoaSBkZWYgbGluayBicm93c2VGaWxldGltZSAgICBJZ25vcmUKKyAgICBoaSBkZWYgbGluayBicm93c2VTdWZmaXhlcyAgICBUeXBlCisgIGVuZGlmCisKKyAgIiBTZXQgZmlsdGVyIGZvciBoaWRpbmcgZmlsZXMKKyAgbGV0IGI6ZmlsdGVyRm9ybXVsYT1zdWJzdGl0dXRlKGc6ZXhwbEhpZGVGaWxlcywgJ1woW15cXF1cKSwnLCAnXDFcXHwnLCAnZycpCisgIGlmIGI6ZmlsdGVyRm9ybXVsYSAhPSAnJworICAgIGxldCBiOmZpbHRlcmluZz0iXG5Ob3Qgc2hvd2luZzogIiAuIGI6ZmlsdGVyRm9ybXVsYQorICBlbHNlCisgICAgbGV0IGI6ZmlsdGVyaW5nPSIiCisgIGVuZGlmCisKKyAgIiBTaG93IHRoZSBmaWxlcworICBjYWxsIHM6U2hvd0RpcmVjdG9yeSgpCisKKyAgIiBTZXQgdXAgbWFwcGluZ3MgZm9yIHRoaXMgYnVmZmVyCisgIGxldCBjcG9fc2F2ZSA9ICZjcG8KKyAgc2V0IGNwbyZ2aW0KKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gPGNyPiA6Y2FsbCA8U0lEPkVkaXRFbnRyeSgiIiwiZWRpdCIpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiAtICAgIDpleGVjICgic2lsZW50IGUgIiAgLiBiOnBhcmVudERpckVzYyk8Y3I+CisgIGlmIGV4aXN0cygiZzpleHBsRmlsZUhhbmRsZXIiKQorICAgIG5ub3JlbWFwIDxidWZmZXI+IHggICAgOmNhbGwgPFNJRD5FeGVjdXRlRW50cnkoKTxjcj4KKyAgZW5kaWYKKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gbyAgICA6Y2FsbCA8U0lEPk9wZW5FbnRyeSgpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiBPICAgIDpjYWxsIDxTSUQ+T3BlbkVudHJ5UHJldldpbmRvdygpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiBwICAgIDpjYWxsIDxTSUQ+RWRpdEVudHJ5KCIiLCJwZWRpdCIpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiA/ICAgIDpjYWxsIDxTSUQ+VG9nZ2xlSGVscCgpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiBhICAgIDpjYWxsIDxTSUQ+U2hvd0FsbEZpbGVzKCk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IFIgICAgOmNhbGwgPFNJRD5SZW5hbWVGaWxlKCk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IEQgICAgOi4gY2FsbCA8U0lEPkRlbGV0ZUZpbGUoKTxjcj4KKyAgdm5vcmVtYXAgPGJ1ZmZlcj4gRCAgICA6Y2FsbCA8U0lEPkRlbGV0ZUZpbGUoKTxjcj4KKyAgbm5vcmVtYXAgPGJ1ZmZlcj4gaSAgICA6Y2FsbCA8U0lEPlRvZ2dsZUxvbmdMaXN0KCk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IHMgICAgOmNhbGwgPFNJRD5Tb3J0U2VsZWN0KCk8Y3I+CisgIG5ub3JlbWFwIDxidWZmZXI+IHIgICAgOmNhbGwgPFNJRD5Tb3J0UmV2ZXJzZSgpPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiBjICAgIDpleGVjICJjZCAiLmI6Y29tcGxldGVQYXRoRXNjPGNyPgorICBubm9yZW1hcCA8YnVmZmVyPiA8Mi1sZWZ0bW91c2U+IDpjYWxsIDxTSUQ+RG91YmxlQ2xpY2soKTxjcj4KKyAgaWYgZXhpc3RzKCIqRXhwbG9yZXJDdXN0b21NYXAiKQorICAgIGNhbGwgRXhwbG9yZXJDdXN0b21NYXAoKQorICBlbmRpZgorICBsZXQgJmNwbyA9IGNwb19zYXZlCisKKyAgIiBwcmV2ZW50IHRoZSBidWZmZXIgZnJvbSBiZWluZyBtb2RpZmllZAorICBzZXRsb2NhbCByZWFkb25seSBub21vZGlmaWFibGUKK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygd2luZG93cyBvcGVuIHRvIHRoaXMgYnVmZmVyIG51bWJlci4KKyIgQ2FyZSBvZiBZZWdhcHBhbiBMYWtzaG1hbi4gIFRoYW5rcyEKK2Z1biEgczpCdWZJbldpbmRvd3MoYm51bSkKKyAgbGV0IGNudCA9IDAKKyAgbGV0IHdpbm51bSA9IDEKKyAgd2hpbGUgMQorICAgIGxldCBidWZudW0gPSB3aW5idWZucih3aW5udW0pCisgICAgaWYgYnVmbnVtIDwgMAorICAgICAgYnJlYWsKKyAgICBlbmRpZgorICAgIGlmIGJ1Zm51bSA9PSBhOmJudW0KKyAgICAgIGxldCBjbnQgPSBjbnQgKyAxCisgICAgZW5kaWYKKyAgICBsZXQgd2lubnVtID0gd2lubnVtICsgMQorICBlbmR3aGlsZQorCisgIHJldHVybiBjbnQKK2VuZGZ1bmN0aW9uCisKKyIgSWYgdGhpcyBpcyB0aGUgb25seSB3aW5kb3csIG9wZW4gZmlsZSBpbiBhIG5ldyB3aW5kb3cKKyIgT3RoZXJ3aXNlLCBvcGVuIGZpbGUgaW4gdGhlIG1vc3QgcmVjZW50bHkgdmlzaXRlZCB3aW5kb3cKKyIKK2Z1bmN0aW9uISBzOk9wZW5FbnRyeVByZXZXaW5kb3coKQorICAiIEZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciB3aW5kb3dzCisgIGxldCBuID0gd2lubnIoKQorICB3aW5jbWQgcAorICAiIE5vIG90aGVyIHdpbmRvdz8gIFRoZW4gb3BlbiBhIG5ldyBvbmUKKyAgaWYgbiA9PSB3aW5ucigpCisgICAgY2FsbCBzOk9wZW5FbnRyeSgpCisgICIgT3RoZXIgd2luZG93cyBleGlzdAorICBlbHNlCisgICAgIiBDaGVjayBpZiB0aGUgcHJldmlvdXMgYnVmZmVyIGlzIG1vZGlmaWVkIC0gYXNrIGlmIHRoZXkgd2FudCB0byBzYXZlIQorICAgICIgV2FzIGl0IG1vZGlmaWVkLCBhbmQgaXMgaXQgdGhlIG9ubHkgd2luZG93IG9wZW4gdG8gdGhpcyBmaWxlCisgICAgaWYgJm1vZGlmaWVkICYmIHM6QnVmSW5XaW5kb3dzKHdpbmJ1Zm5yKHdpbm5yKCkpKSA8IDIKKyAgICAgIGxldCBidWZuYW1lID0gYnVmbmFtZSh3aW5idWZucih3aW5ucigpKSkKKworICAgICAgbGV0IGFjdGlvbj1jb25maXJtKCJTYXZlIENoYW5nZXMgaW4gIiAuIGJ1Zm5hbWUgLiAiPyIsIiZZZXNcbiZOb1xuJkNhbmNlbCIpCisgICAgICAiIFllcyAtIHRyeSB0byBzYXZlIC0gaWYgdGhlcmUgaXMgYW4gZXJyb3IsIGNhbmNlbAorICAgICAgaWYgYWN0aW9uID09IDEKKwlsZXQgdjplcnJtc2cgPSAiIgorCXNpbGVudCB3CisJaWYgdjplcnJtc2cgIT0gIiIKKwkgIGVjaG9lcnIgIlVuYWJsZSB0byB3cml0ZSBidWZmZXIhIgorCSAgd2luY21kIHAKKwkgIHJldHVybgorCWVuZGlmCisgICAgICAiIE5vLCBhYmFuZG9uIGNoYW5nZXMKKyAgICAgIGVsc2VpZiBhY3Rpb24gPT0gMgorCXNldCBub21vZGlmaWVkCisJZWNob21zZyAiV2FybmluZywgYWJhbmRvbmluZyBjaGFuZ2VzIGluICIgLiBidWZuYW1lCisgICAgICAiIENhbmNlbCAob3IgYW55IG90aGVyIHJlc3VsdCksIGRvbid0IGRvIHRoZSBvcGVuCisgICAgICBlbHNlCisJd2luY21kIHAKKwlyZXR1cm4KKyAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgICB3aW5jbWQgcAorICAgIGNhbGwgczpFZGl0RW50cnkoIndpbmNtZCBwIiwiZWRpdCIpCisgIGVuZGlmCitlbmRmdW5jdGlvbgorCisKKyItLS0KKyIgT3BlbiBhIGZpbGUgb3IgZGlyZWN0b3J5IGluIGEgbmV3IHdpbmRvdy4KKyIgVXNlIGc6ZXhwbFNwbGl0QmVsb3cgYW5kIGc6ZXhwbFNwbGl0UmlnaHQgdG8gZGVjaWRlIHdoZXJlIHRvIHB1dCB0aGUKKyIgc3BsaXQgd2luZG93LCBhbmQgcmVzaXplIHRoZSBvcmlnaW5hbCBleHBsb3JlciB3aW5kb3cgaWYgaXQgaXMKKyIgbGFyZ2VyIHRoYW4gZzpleHBsV2luU2l6ZQorIgorZnVuY3Rpb24hIHM6T3BlbkVudHJ5KCkKKyAgIiBBcmUgd2Ugb24gYSBsaW5lIHdpdGggYSBmaWxlIG5hbWU/CisgIGxldCBsID0gZ2V0bGluZSgiLiIpCisgIGlmIGwgPX4gJ14iJworICAgIHJldHVybgorICBlbmRpZgorCisgICIgQ29weSB3aW5kb3cgc2V0dGluZ3MgdG8gc2NyaXB0IHNldHRpbmdzCisgIGxldCBzOnNvcnRieT13OnNvcnRkaXJsYWJlbCAuIHc6c29ydHR5cGUKKyAgbGV0IHM6bG9uZ2hlbHAgPSB3OmxvbmdoZWxwCisgIGxldCBzOmxvbmdsaXN0ID0gdzpsb25nbGlzdAorCisgICIgR2V0IHRoZSB3aW5kb3cgbnVtYmVyIG9mIHRoZSBleHBsb3JlciB3aW5kb3cKKyAgbGV0IG4gPSB3aW5ucigpCisKKyAgIiBTYXZlIHRoZSB1c2VyJ3Mgc2V0dGluZ3MgZm9yIHNwbGl0YmVsb3cgYW5kIHNwbGl0cmlnaHQKKyAgbGV0IHNhdmVzcGxpdGJlbG93PSZzcGxpdGJlbG93CisgIGxldCBzYXZlc3BsaXRyaWdodD0mc3BsaXRyaWdodAorCisgICIgRmlndXJlIG91dCBob3cgdG8gZG8gdGhlIHNwbGl0IGJhc2VkIG9uIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMuCisgICIgV2Ugd2FudCB0byBzcGxpdCB0byB0aGUgKGxlZnQscmlnaHQsdG9wLGJvdHRvbSkgb2YgdGhlIGV4cGxvcmVyCisgICIgd2luZG93LCBidXQgd2Ugd2FudCB0byBleHRyYWN0IHRoZSBzY3JlZW4gcmVhbC1lc3RhdGUgZnJvbSB0aGUKKyAgIiB3aW5kb3cgbmV4dCB0byB0aGUgZXhwbG9yZXIgaWYgcG9zc2libGUuCisgICIKKyAgIiAndGhlcmUnIHdpbGwgYmUgc2V0IHRvIGEgY29tbWFuZCB0byBtb3ZlIGZyb20gdGhlIHNwbGl0IHdpbmRvdworICAiIGJhY2sgdG8gdGhlIGV4cGxvcmVyIHdpbmRvdworICAiCisgICIgJ2JhY2snIHdpbGwgYmUgc2V0IHRvIGEgY29tbWFuZCB0byBtb3ZlIGZyb20gdGhlIGV4cGxvcmVyIHdpbmRvdworICAiIGJhY2sgdG8gdGhlIG5ld2x5IHNwbGl0IHdpbmRvdworICAiCisgICIgJ3JpZ2h0JyBhbmQgJ2JlbG93JyB3aWxsIGJlIHNldCB0byB0aGUgc2V0dGluZ3MgbmVlZGVkIGZvcgorICAiIHNwbGl0YmVsb3cgYW5kIHNwbGl0cmlnaHQgSUYgdGhlIGV4cGxvcmVyIGlzIHRoZSBvbmx5IHdpbmRvdy4KKyAgIgorICBpZiBnOmV4cGxWZXJ0aWNhbAorICAgIGlmIGc6ZXhwbFNwbGl0UmlnaHQKKyAgICAgIGxldCB0aGVyZT0id2luY21kIGgiCisgICAgICBsZXQgYmFjayA9IndpbmNtZCBsIgorICAgICAgbGV0IHJpZ2h0PTEKKyAgICAgIGxldCBiZWxvdz0wCisgICAgZWxzZQorICAgICAgbGV0IHRoZXJlPSJ3aW5jbWQgbCIKKyAgICAgIGxldCBiYWNrID0id2luY21kIGgiCisgICAgICBsZXQgcmlnaHQ9MAorICAgICAgbGV0IGJlbG93PTAKKyAgICBlbmRpZgorICBlbHNlCisgICAgaWYgZzpleHBsU3BsaXRCZWxvdworICAgICAgbGV0IHRoZXJlPSJ3aW5jbWQgayIKKyAgICAgIGxldCBiYWNrID0id2luY21kIGoiCisgICAgICBsZXQgcmlnaHQ9MAorICAgICAgbGV0IGJlbG93PTEKKyAgICBlbHNlCisgICAgICBsZXQgdGhlcmU9IndpbmNtZCBqIgorICAgICAgbGV0IGJhY2sgPSJ3aW5jbWQgayIKKyAgICAgIGxldCByaWdodD0wCisgICAgICBsZXQgYmVsb3c9MAorICAgIGVuZGlmCisgIGVuZGlmCisKKyAgIiBHZXQgdGhlIGZpbGUgbmFtZQorICBsZXQgZm49czpHZXRGdWxsRmlsZU5hbWUoKQorCisgICIgQXR0ZW1wdCB0byBnbyB0byBhZGphY2VudCB3aW5kb3cKKyAgZXhlYyhiYWNrKQorICAiIElmIG5vIGFkamFjZW50IHdpbmRvdywgc2V0IHNwbGl0cmlnaHQgYW5kIHNwbGl0YmVsb3cgYXBwcm9wcmlhdGVseQorICBpZiBuID09IHdpbm5yKCkKKyAgICBsZXQgJnNwbGl0cmlnaHQ9cmlnaHQKKyAgICBsZXQgJnNwbGl0YmVsb3c9YmVsb3cKKyAgZWxzZQorICAgICIgZm91bmQgYWRqYWNlbnQgd2luZG93IC0gaW52ZXJ0IHNwbGl0IGRpcmVjdGlvbgorICAgIGxldCAmc3BsaXRyaWdodD0hcmlnaHQKKyAgICBsZXQgJnNwbGl0YmVsb3c9IWJlbG93CisgIGVuZGlmCisKKyAgIiBDcmVhdGUgYSB2YXJpYWJsZSB0byB1c2UgaWYgc3BsaXR0aW5nIHZlcnRpY2FsbHkKKyAgbGV0IHNwbGl0TW9kZSA9ICIiCisgIGlmIGc6ZXhwbFZlcnRpY2FsID09IDEKKyAgICBsZXQgc3BsaXRNb2RlID0gInZlcnRpY2FsIgorICBlbmRpZgorCisgICIgSXMgaXQgYSBkaXJlY3Rvcnk/ICBJZiBzbywgZ2V0IGEgcmVhbCBwYXRoIHRvIGl0IGluc3RlYWQgb2YKKyAgIiByZWxhdGl2ZSBwYXRoLiAgVGhpcyBhbHNvIHJlbW92ZXMgIi8uLi8iIGFuZCAiLy4vIiB0aGluZ3MuCisgIGlmIGlzZGlyZWN0b3J5KGZuKQorICAgIGxldCBmbiA9IGZuYW1lbW9kaWZ5KGZuLCAiOnAiKQorICBlbmRpZgorCisgICIgT3BlbiB0aGUgbmV3IHdpbmRvdworICBleGVjKCJzaWxlbnQgIiAuIHNwbGl0TW9kZS4iIHNwICIgLiBlc2NhcGUoZm4sczplc2NmaWxlbmFtZSkpCisKKyAgIiByZXNpemUgdGhlIGV4cGxvcmVyIHdpbmRvdyBpZiBpdCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUKKyAgZXhlYyh0aGVyZSkKKyAgaWYgZzpleHBsV2luU2l6ZSA9fiAnWzAtOV1cKycgJiYgd2luaGVpZ2h0KCIiKSA+IGc6ZXhwbFdpblNpemUKKyAgICBleGVjKCJzaWxlbnQgIi5zcGxpdE1vZGUuIiByZXNpemUgIi5nOmV4cGxXaW5TaXplKQorICBlbmRpZgorICBleGVjKGJhY2spCisKKyAgIiBSZXN0b3JlIHNwbGl0bW9kZSBzZXR0aW5ncworICBsZXQgJnNwbGl0YmVsb3c9c2F2ZXNwbGl0YmVsb3cKKyAgbGV0ICZzcGxpdHJpZ2h0PXNhdmVzcGxpdHJpZ2h0CisKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBzOkV4ZWN1dGVFbnRyeSgpCisgICIgQXJlIHdlIG9uIGEgbGluZSB3aXRoIGEgZmlsZSBuYW1lPworICBsZXQgbCA9IGdldGxpbmUoIi4iKQorICBpZiBsID1+ICdeIicKKyAgICByZXR1cm4KKyAgZW5kaWYKKworICAiIEdldCB0aGUgZmlsZSBuYW1lCisgIGxldCBmbiA9IHM6R2V0RnVsbEZpbGVOYW1lKCkKKyAgaWYgaGFzKCJ3aW4zMiIpICYmIGZuID1+ICdeLy8nCisgICAgbGV0IGZuID0gc3Vic3RpdHV0ZShmbiwgJy8nLCAnXFwnLCAnZycpCisgIGVuZGlmCisgIGV4ZWMgImNhbGwgIiAuIGc6ZXhwbEZpbGVIYW5kbGVyIC4gIihmbikiCitlbmRmdW5jdGlvbgorCisiLS0tCisiIERvdWJsZSBjbGljayB3aXRoIHRoZSBtb3VzZQorIgorZnVuY3Rpb24gczpEb3VibGVDbGljaygpCisgIGlmIGV4cGFuZCgiPGNmaWxlPiIpID1+ICdbXFwvXSQnCisgICAgY2FsbCBzOkVkaXRFbnRyeSgiIiwiZWRpdCIpCQkiIGRpcmVjdG9yeTogb3BlbiBpbiB0aGlzIHdpbmRvdworICBlbHNlCisgICAgY2FsbCBzOk9wZW5FbnRyeVByZXZXaW5kb3coKQkiIGZpbGU6IG9wZW4gaW4gYW5vdGhlciB3aW5kb3cKKyAgZW5kaWYKK2VuZGZ1bgorCisiLS0tCisiIE9wZW4gZmlsZSBvciBkaXJlY3RvcnkgaW4gdGhlIHNhbWUgd2luZG93IGFzIHRoZSBleHBsb3JlciBpcworIiBjdXJyZW50bHkgaW4KKyIKK2Z1bmN0aW9uISBzOkVkaXRFbnRyeShtb3ZlZmlyc3QsZWRpdGNtZCkKKyAgIiBBcmUgd2Ugb24gYSBsaW5lIHdpdGggYSBmaWxlIG5hbWU/CisgIGxldCBsID0gZ2V0bGluZSgiLiIpCisgIGlmIGwgPX4gJ14iJworICAgIHJldHVybgorICBlbmRpZgorCisgICIgQ29weSB3aW5kb3cgc2V0dGluZ3MgdG8gc2NyaXB0IHNldHRpbmdzCisgIGxldCBzOnNvcnRieT13OnNvcnRkaXJsYWJlbCAuIHc6c29ydHR5cGUKKyAgbGV0IHM6bG9uZ2hlbHAgPSB3OmxvbmdoZWxwCisgIGxldCBzOmxvbmdsaXN0ID0gdzpsb25nbGlzdAorCisgICIgR2V0IHRoZSBmaWxlIG5hbWUKKyAgbGV0IGZuID0gczpHZXRGdWxsRmlsZU5hbWUoKQorICBpZiBpc2RpcmVjdG9yeShmbikKKyAgICAiIFRoaXMgcmVtb3ZlcyAiLy4uLyIgYW5kICIvLi8iIHRoaW5ncy4KKyAgICBsZXQgZm4gPSBmbmFtZW1vZGlmeShmbiwgIjpwIikKKyAgZW5kaWYKKworICAiIE1vdmUgdG8gZGVzaXJlZCB3aW5kb3cgaWYgbmVlZGVkCisgIGV4ZWMoYTptb3ZlZmlyc3QpCisgICIgRWRpdCB0aGUgZmlsZS9kaXIKKyAgZXhlYyhhOmVkaXRjbWQgLiAiICIgLiBlc2NhcGUoZm4sczplc2NmaWxlbmFtZSkpCitlbmRmdW5jdGlvbgorCisKKyItLS0KKyIgQ3JlYXRlIGEgcmVndWxhciBleHByZXNzaW9uIG91dCBvZiB0aGUgc3VmZml4ZXMgb3B0aW9uIGZvciBzb3J0aW5nCisiIGFuZCBzZXQgYSBzdHJpbmcgdG8gaW5kaWNhdGUgd2hldGhlciB3ZSBhcmUgc29ydGluZyB3aXRoIHRoZQorIiBzdWZmaXhlcyBhdCB0aGUgZW5kIChvciB0aGUgYmVnaW5uaW5nKQorIgorZnVuY3Rpb24hIHM6U2V0U3VmZml4ZXNMYXN0KCkKKyAgbGV0IGI6c3VmZml4ZXNSZWdleHAgPSAnXCgnIC4gc3Vic3RpdHV0ZShlc2NhcGUoJnN1ZmZpeGVzLHM6ZXNjcmVnZXhwKSwnLCcsJ1xcfCcsJ2cnKSAuICdcKSQnCisgIGxldCBiOnN1ZmZpeGVzSGlnaGxpZ2h0ID0gJ15bXiJdLipcKCcgLiBzdWJzdGl0dXRlKGVzY2FwZSgmc3VmZml4ZXMsczplc2NyZWdleHApLCcsJywnXFx8JywnZycpIC4gJ1wpXCggXHwkXCknCisgIGlmIGhhcygiZm5hbWVfY2FzZSIpCisgICAgbGV0IGI6c3VmZml4ZXNSZWdleHAgPSAnXEMnIC4gYjpzdWZmaXhlc1JlZ2V4cAorICAgIGxldCBiOnN1ZmZpeGVzSGlnaGxpZ2h0ID0gJ1xDJyAuIGI6c3VmZml4ZXNIaWdobGlnaHQKKyAgZWxzZQorICAgIGxldCBiOnN1ZmZpeGVzUmVnZXhwID0gJ1xjJyAuIGI6c3VmZml4ZXNSZWdleHAKKyAgICBsZXQgYjpzdWZmaXhlc0hpZ2hsaWdodCA9ICdcYycgLiBiOnN1ZmZpeGVzSGlnaGxpZ2h0CisgIGVuZGlmCisgIGlmIGc6ZXhwbFN1ZmZpeGVzTGFzdCA+IDAgJiYgJnN1ZmZpeGVzICE9ICIiCisgICAgbGV0IGI6c3VmZml4ZXNsYXN0PSIgKCIgLiAmc3VmZml4ZXMgLiAiIGF0IGVuZCBvZiBsaXN0KSIKKyAgZWxzZWlmIGc6ZXhwbFN1ZmZpeGVzTGFzdCA8IDAgJiYgJnN1ZmZpeGVzICE9ICIiCisgICAgbGV0IGI6c3VmZml4ZXNsYXN0PSIgKCIgLiAmc3VmZml4ZXMgLiAiIGF0IHN0YXJ0IG9mIGxpc3QpIgorICBlbHNlCisgICAgbGV0IGI6c3VmZml4ZXNsYXN0PSIgKCdzdWZmaXhlcycgbWl4ZWQgd2l0aCBmaWxlcykiCisgIGVuZGlmCitlbmRmdW5jdGlvbgorCisiLS0tCisiIFNob3cgdGhlIGhlYWRlciBhbmQgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeQorIgorZnVuY3Rpb24hIHM6U2hvd0RpcmVjdG9yeSgpCisgICJEZWxldGUgYWxsIGxpbmVzCisgIDEsJGQgXworICAiIFByZXZlbnQgYSByZXBvcnQgb2Ygb3VyIGFjdGlvbnMgZnJvbSBzaG93aW5nIHVwCisgIGxldCBvbGRSZXA9JnJlcG9ydAorICBsZXQgc2F2ZV9zYyA9ICZzYworICBzZXQgcmVwb3J0PTEwMDAwIG5vc2MKKworICAiIEFkZCB0aGUgaGVhZGVyCisgIGNhbGwgczpBZGRIZWFkZXIoKQorICAkZCBfCisKKyAgIiBEaXNwbGF5IHRoZSBmaWxlcworCisgICIgR2V0IGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVzCisgIGxldCBmaWxlcyA9IHM6UGF0aChnbG9iKGI6Y29tcGxldGVQYXRoRXNjIC4gIioiKSkKKyAgaWYgZmlsZXMgIT0gIiIgJiYgZmlsZXMgIX4gIlxuJCIKKyAgICBsZXQgZmlsZXMgPSBmaWxlcyAuICJcbiIKKyAgZW5kaWYKKworICAiIEFkZCB0aGUgZG90IGZpbGVzIG5vdywgbWFraW5nIHN1cmUgIi4iIGlzIG5vdCBpbmNsdWRlZCEKKyAgbGV0IGZpbGVzID0gZmlsZXMgLiBzdWJzdGl0dXRlKHM6UGF0aChnbG9iKGI6Y29tcGxldGVQYXRoRXNjIC4gIi4qIikpLCAiW15cbl0qLy4vXFw9XG4iLCAnJyAsICcnKQorICBpZiBmaWxlcyAhPSAiIiAmJiBmaWxlcyAhfiAiXG4kIgorICAgIGxldCBmaWxlcyA9IGZpbGVzIC4gIlxuIgorICBlbmRpZgorCisgICIgQXJlIHRoZXJlIGFueSBmaWxlcyBsZWZ0IGFmdGVyIGZpbHRlcmluZz8KKyAgaWYgZmlsZXMgIT0gIiIKKyAgICBub3JtYWwhIG10CisgICAgcHV0ID1maWxlcworICAgIGxldCBiOm1heEZpbGVMZW4gPSAwCisgICAgMAorICAgIC9eIj0vKzEsJGcvXi9jYWxsIHM6TWFya0RpcnMoKQorICAgIG5vcm1hbCEgYHQKKyAgICBjYWxsIHM6QWRkRmlsZUluZm8oKQorICBlbmRpZgorCisgIG5vcm1hbCEgenoKKworICAiIE1vdmUgdG8gZmlyc3QgZGlyZWN0b3J5IGluIHRoZSBsaXN0aW5nCisgIDAKKyAgL14iPS8rMQorCisgICIgRG8gdGhlIHNvcnQKKyAgY2FsbCBzOlNvcnRMaXN0aW5nKCJMb2FkZWQgY29udGVudHMgb2YgIi5iOmNvbXBsZXRlUGF0aC4iLiAiKQorCisgICIgTW92ZSB0byBmaXJzdCBkaXJlY3RvcnkgaW4gdGhlIGxpc3RpbmcKKyAgMAorICAvXiI9LysxCisKKyAgbGV0ICZyZXBvcnQ9b2xkUmVwCisgIGxldCAmc2MgPSBzYXZlX3NjCisKK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgTWFyayB3aGljaCBpdGVtcyBhcmUgZGlyZWN0b3JpZXMgLSBjYWxsZWQgb25jZSBmb3IgZWFjaCBmaWxlIG5hbWUKKyIgbXVzdCBiZSB1c2VkIG9ubHkgd2hlbiBzaXplL2RhdGUgaXMgbm90IGRpc3BsYXllZAorIgorZnVuY3Rpb24hIHM6TWFya0RpcnMoKQorICBsZXQgb2xkUmVwPSZyZXBvcnQKKyAgc2V0IHJlcG9ydD0xMDAwCisgICJSZW1vdmUgc2xhc2hlcyBpZiBhZGRlZAorICBzOy8kOztlCisgICJSZW1vdmVzIGFsbCB0aGUgbGVhZGluZyBzbGFzaGVzIGFuZCBhZGRzIHNsYXNoZXMgYXQgdGhlIGVuZCBvZiBkaXJlY3RvcmllcworICBzO14uKlxcXChbXlxcXSpcKSQ7XDE7ZQorICBzO14uKi9cKFteL10qXCkkO1wxO2UKKyAgIm5vcm1hbCEgXgorICBsZXQgY3VyckxpbmU9Z2V0bGluZSgiLiIpCisgIGlmIGlzZGlyZWN0b3J5KGI6Y29tcGxldGVQYXRoIC4gY3VyckxpbmUpCisgICAgczskOy87CisgICAgbGV0IGZpbGVMZW49c3RybGVuKGN1cnJMaW5lKSsxCisgIGVsc2UKKyAgICBsZXQgZmlsZUxlbj1zdHJsZW4oY3VyckxpbmUpCisgICAgaWYgKGI6ZmlsdGVyRm9ybXVsYSE9IiIpICYmIChjdXJyTGluZSA9fiBiOmZpbHRlckZvcm11bGEpCisgICAgICAiIERvbid0IHNob3cgdGhlIGZpbGUgaWYgaXQgaXMgdG8gYmUgZmlsdGVyZWQuCisgICAgICBkIF8KKyAgICBlbmRpZgorICBlbmRpZgorICBpZiBmaWxlTGVuID4gYjptYXhGaWxlTGVuCisgICAgbGV0IGI6bWF4RmlsZUxlbj1maWxlTGVuCisgIGVuZGlmCisgIGxldCAmcmVwb3J0PW9sZFJlcAorZW5kZnVuY3Rpb24KKworIi0tLQorIiBNYWtlIHN1cmUgYSBwYXRoIGhhcyBwcm9wZXIgZm9ybQorIgorZnVuY3Rpb24hIHM6UGF0aChwKQorICBpZiBoYXMoImRvczE2IikgfHwgaGFzKCJkb3MzMiIpIHx8IGhhcygid2luMTYiKSB8fCBoYXMoIndpbjMyIikgfHwgaGFzKCJvczIiKQorICAgIHJldHVybiBzdWJzdGl0dXRlKGE6cCwnXFwnLCcvJywnZycpCisgIGVsc2UKKyAgICByZXR1cm4gYTpwCisgIGVuZGlmCitlbmRmdW5jdGlvbgorCisiLS0tCisiIEV4dHJhY3QgdGhlIGZpbGUgbmFtZSBmcm9tIGEgbGluZSBpbiBzZXZlcmFsIGRpZmZlcmVudCBmb3JtcworIgorZnVuY3Rpb24hIHM6R2V0RnVsbEZpbGVOYW1lRXNjKCkKKyAgICByZXR1cm4gczpFc2NhcGVGaWxlbmFtZShzOkdldEZ1bGxGaWxlTmFtZSgpKQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIHM6R2V0RmlsZU5hbWVFc2MoKQorICAgIHJldHVybiBzOkVzY2FwZUZpbGVuYW1lKHM6R2V0RmlsZU5hbWUoKSkKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBzOkVzY2FwZUZpbGVuYW1lKG5hbWUpCisgICAgcmV0dXJuIGVzY2FwZShhOm5hbWUsczplc2NmaWxlbmFtZSkKK2VuZGZ1bmN0aW9uCisKKworZnVuY3Rpb24hIHM6R2V0RnVsbEZpbGVOYW1lKCkKKyAgcmV0dXJuIHM6RXh0cmFjdEZ1bGxGaWxlTmFtZShnZXRsaW5lKCIuIikpCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgczpHZXRGaWxlTmFtZSgpCisgIHJldHVybiBzOkV4dHJhY3RGaWxlTmFtZShnZXRsaW5lKCIuIikpCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgczpFeHRyYWN0RnVsbEZpbGVOYW1lKGxpbmUpCisgICAgICBsZXQgZm49czpFeHRyYWN0RmlsZU5hbWUoYTpsaW5lKQorICAgICAgaWYgZm4gPT0gJy8nCisJcmV0dXJuIGI6Y29tcGxldGVQYXRoCisgICAgICBlbHNlCisJcmV0dXJuIGI6Y29tcGxldGVQYXRoIC4gczpFeHRyYWN0RmlsZU5hbWUoYTpsaW5lKQorICAgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBzOkV4dHJhY3RGaWxlTmFtZShsaW5lKQorICByZXR1cm4gc3Vic3RpdHV0ZShzdHJwYXJ0KGE6bGluZSwwLGI6bWF4RmlsZUxlbiksJ1xzXCskJywnJywnJykKK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgR2V0IHRoZSBzaXplIG9mIHRoZSBmaWxlCitmdW5jdGlvbiEgczpFeHRyYWN0RmlsZVNpemUobGluZSkKKyAgaWYgKHc6bG9uZ2xpc3Q9PTApCisgICAgcmV0dXJuIGdldGZzaXplKHM6RXh0cmFjdEZpbGVOYW1lKGE6bGluZSkpCisgIGVsc2UKKyAgICByZXR1cm4gc3RycGFydChhOmxpbmUsYjptYXhGaWxlTGVuKzIsYjptYXhGaWxlU2l6ZUxlbikKKyAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgR2V0IHRoZSBkYXRlIG9mIHRoZSBmaWxlIGFzIGEgbnVtYmVyCitmdW5jdGlvbiEgczpFeHRyYWN0RmlsZURhdGUobGluZSkKKyAgaWYgdzpsb25nbGlzdD09MAorICAgIHJldHVybiBnZXRmdGltZShzOkV4dHJhY3RGaWxlTmFtZShhOmxpbmUpKQorICBlbHNlCisgICAgcmV0dXJuIHN0cnBhcnQobWF0Y2hzdHIoc3RycGFydChhOmxpbmUsYjptYXhGaWxlTGVuK2I6bWF4RmlsZVNpemVMZW4rNCksIqurLioiKSwyKSArIDAKKyAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKKworIi0tLQorIiBBZGQgdGhlIGhlYWRlciB3aXRoIGhlbHAgaW5mb3JtYXRpb24KKyIKK2Z1bmN0aW9uISBzOkFkZEhlYWRlcigpCisgICAgbGV0IHNhdmVfZj1AZgorICAgIDEKKyAgICBpZiB3OmxvbmdoZWxwPT0xCisgICAgICBsZXQgQGY9IlwiIDxlbnRlcj4gOiBvcGVuIGZpbGUgb3IgZGlyZWN0b3J5XG4iCisJICAgXC4iXCIgbyA6IG9wZW4gbmV3IHdpbmRvdyBmb3IgZmlsZS9kaXJlY3RvcnlcbiIKKwkgICBcLiJcIiBPIDogb3BlbiBmaWxlIGluIHByZXZpb3VzbHkgdmlzaXRlZCB3aW5kb3dcbiIKKwkgICBcLiJcIiBwIDogcHJldmlldyB0aGUgZmlsZVxuIgorICAgICAgaWYgZXhpc3RzKCJnOmV4cGxGaWxlSGFuZGxlciIpCisJbGV0IEBmPUBmLiJcIiB4IDogZXhlY3V0ZSBmaWxlIG9yIGRpcmVjdG9yeVxuIgorICAgICAgZW5kaWYKKyAgICAgIGxldCBAZj1AZgorCSAgIFwuIlwiIGkgOiB0b2dnbGUgc2l6ZS9kYXRlIGxpc3RpbmdcbiIKKwkgICBcLiJcIiBzIDogc2VsZWN0IHNvcnQgZmllbGQgICAgciA6IHJldmVyc2Ugc29ydFxuIgorCSAgIFwuIlwiIC0gOiBnbyB1cCBvbmUgbGV2ZWwgICAgICBjIDogY2QgdG8gdGhpcyBkaXJcbiIKKwkgICBcLiJcIiBSIDogcmVuYW1lIGZpbGUgICAgICAgICAgRCA6IGRlbGV0ZSBmaWxlXG4iCisJICAgXC4iXCIgOmhlbHAgZmlsZS1leHBsb3JlciBmb3IgZGV0YWlsZWQgaGVscFxuIgorICAgIGVsc2UKKyAgICAgIGxldCBAZj0iXCIgUHJlc3MgPyBmb3Iga2V5Ym9hcmQgc2hvcnRjdXRzXG4iCisgICAgZW5kaWYKKyAgICBsZXQgQGY9QGYuIlwiIFNvcnRlZCBieSAiLnc6c29ydGRpcmxhYmVsLnc6c29ydHR5cGUuYjpzdWZmaXhlc2xhc3QuYjpmaWx0ZXJpbmcuIlxuIgorICAgIGxldCBAZj1AZi4iXCI9ICIuYjpjb21wbGV0ZVBhdGguIlxuIgorICAgIHB1dCEgZgorICAgIGxldCBAZj1zYXZlX2YKK2VuZGZ1bmN0aW9uCisKKworIi0tLQorIiBTaG93IHRoZSBzaXplIGFuZCBkYXRlIGZvciBlYWNoIGZpbGUKKyIKK2Z1bmN0aW9uISBzOkFkZEZpbGVJbmZvKCkKKyAgbGV0IHNhdmVfc2MgPSAmc2MKKyAgc2V0IG5vc2MKKworICAiIE1hcmsgb3VyIHN0YXJ0aW5nIHBvaW50CisgIG5vcm1hbCEgbXQKKworICBjYWxsIHM6UmVtb3ZlU2VwYXJhdG9ycygpCisKKyAgIiBSZW1vdmUgYWxsIGluZm8KKyAgMAorICAvXiI9LysxLCRnL14vY2FsbCBzZXRsaW5lKGxpbmUoIi4iKSxzOkdldEZpbGVOYW1lKCkpCisKKyAgIiBBZGQgaW5mbyBpZiByZXF1ZXN0ZWQKKyAgaWYgdzpsb25nbGlzdD09MQorICAgICIgQWRkIGZpbGUgc2l6ZSBhbmQgY2FsY3VsYXRlIG1heGltdW0gbGVuZ3RoIG9mIGZpbGUgc2l6ZSBmaWVsZAorICAgIGxldCBiOm1heEZpbGVTaXplTGVuID0gMAorICAgIDAKKyAgICAvXiI9LysxLCRnL14vbGV0IGZuPXM6R2V0RnVsbEZpbGVOYW1lKCkgfAorCQkgICBcbGV0IGZpbGVTaXplPWdldGZzaXplKGZuKSB8CisJCSAgIFxsZXQgZmlsZVNpemVMZW49c3RybGVuKGZpbGVTaXplKSB8CisJCSAgIFxpZiBmaWxlU2l6ZUxlbiA+IGI6bWF4RmlsZVNpemVMZW4gfAorCQkgICBcICBsZXQgYjptYXhGaWxlU2l6ZUxlbiA9IGZpbGVTaXplTGVuIHwKKwkJICAgXGVuZGlmIHwKKwkJICAgXGV4ZWMgIm5vcm1hbCEgIi4oYjptYXhGaWxlTGVuLXN0cmxlbihnZXRsaW5lKCIuIikpKzIpLiJBIFw8ZXNjPiIgfAorCQkgICBcZXhlYyAncy8kLycuZmlsZVNpemUuJy8nCisKKyAgICAiIFJpZ2h0IGp1c3RpZnkgdGhlIGZpbGUgc2l6ZXMgYW5kCisgICAgIiBhZGQgZmlsZSBtb2RpZmljYXRpb24gZGF0ZQorICAgIDAKKyAgICAvXiI9LysxLCRnL14vbGV0IGZuPXM6R2V0RnVsbEZpbGVOYW1lKCkgfAorCQkgICBcZXhlYyAibm9ybWFsISBBIFw8ZXNjPiRiIi4oYjptYXhGaWxlTGVuK2I6bWF4RmlsZVNpemVMZW4tc3RybGVuKGdldGxpbmUoIi4iKSkrMykuImkgXDxlc2M+XCJfeCIgfAorCQkgICBcZXhlYyAncy8kLyAnLmVzY2FwZShzOkZpbGVNb2REYXRlKGZuKSwgJy8nKS4nLycKKyAgICBzZXRsb2NhbCBub21vZGlmaWVkCisgIGVuZGlmCisKKyAgY2FsbCBzOkFkZFNlcGFyYXRvcnMoKQorCisgICIgcmV0dXJuIHRvIHN0YXJ0CisgIG5vcm1hbCEgYHQKKworICBsZXQgJnNjID0gc2F2ZV9zYworZW5kZnVuY3Rpb24KKworCisiLS0tLQorIiBHZXQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGZvciBhIGZpbGUKKyIKK2Z1bmN0aW9uISBzOkZpbGVNb2REYXRlKG5hbWUpCisgIGxldCBmaWxldGltZT1nZXRmdGltZShhOm5hbWUpCisgIGlmIGZpbGV0aW1lID4gMAorICAgIHJldHVybiBzdHJmdGltZShnOmV4cGxEYXRlRm9ybWF0LGZpbGV0aW1lKSAuICIgq6siIC4gZmlsZXRpbWUKKyAgZWxzZQorICAgIHJldHVybiAiIgorICBlbmRpZgorZW5kZnVuY3Rpb24KKworIi0tLQorIiBEZWxldGUgYSBmaWxlIG9yIGZpbGVzCisiCitmdW5jdGlvbiEgczpEZWxldGVGaWxlKCkgcmFuZ2UKKyAgbGV0IG9sZFJlcCA9ICZyZXBvcnQKKyAgbGV0ICZyZXBvcnQgPSAxMDAwCisKKyAgbGV0IGZpbGVzRGVsZXRlZCA9IDAKKyAgbGV0IHN0b3BEZWwgPSAwCisgIGxldCBkZWxBbGwgPSAwCisgIGxldCBjdXJyTGluZSA9IGE6Zmlyc3RsaW5lCisgIGxldCBsYXN0TGluZSA9IGE6bGFzdGxpbmUKKyAgc2V0bG9jYWwgbm9yZWFkb25seSBtb2RpZmlhYmxlCisKKyAgd2hpbGUgKChjdXJyTGluZSA8PSBsYXN0TGluZSkgJiYgKHN0b3BEZWw9PTApKQorICAgIGV4ZWMoY3VyckxpbmUpCisgICAgbGV0IGZpbGVOYW1lPXM6R2V0RnVsbEZpbGVOYW1lKCkKKyAgICBpZiBpc2RpcmVjdG9yeShmaWxlTmFtZSkKKyAgICAgIGVjaG8gZmlsZU5hbWUuIiA6IERpcmVjdG9yeSBkZWxldGlvbiBub3Qgc3VwcG9ydGVkIHlldCIKKyAgICAgIGxldCBjdXJyTGluZSA9IGN1cnJMaW5lICsgMQorICAgIGVsc2UKKyAgICAgIGlmIGRlbEFsbCA9PSAwCisJbGV0IHN1cmU9aW5wdXQoIkRlbGV0ZSAiLmZpbGVOYW1lLiIgKHkvbi9hL3EpPyAiKQorCWlmIHN1cmU9PSJhIgorCSAgbGV0IGRlbEFsbCA9IDEKKwllbmRpZgorICAgICAgZW5kaWYKKyAgICAgIGlmIChzdXJlPT0ieSIpIHx8IChzdXJlPT0iYSIpCisJbGV0IHN1Y2Nlc3M9ZGVsZXRlKGZpbGVOYW1lKQorCWlmIHN1Y2Nlc3MhPTAKKwkgIGV4ZWMgKCIgIikKKwkgIGVjaG8gIlxuQ2Fubm90IGRlbGV0ZSAiLmZpbGVOYW1lCisJICBsZXQgY3VyckxpbmUgPSBjdXJyTGluZSArIDEKKwllbHNlCisJICBkIF8KKwkgIGxldCBmaWxlc0RlbGV0ZWQgPSBmaWxlc0RlbGV0ZWQgKyAxCisJICBsZXQgbGFzdExpbmUgPSBsYXN0TGluZSAtIDEKKwllbmRpZgorICAgICAgZWxzZWlmIHN1cmU9PSJxIgorCWxldCBzdG9wRGVsID0gMQorICAgICAgZWxzZWlmIHN1cmU9PSJuIgorCWxldCBjdXJyTGluZSA9IGN1cnJMaW5lICsgMQorICAgICAgZW5kaWYKKyAgICBlbmRpZgorICBlbmR3aGlsZQorICBlY2hvICJcbiIuZmlsZXNEZWxldGVkLiIgZmlsZXMgZGVsZXRlZCIKKyAgbGV0ICZyZXBvcnQgPSBvbGRSZXAKKyAgc2V0bG9jYWwgbm9tb2RpZmllZAorICBzZXRsb2NhbCByZWFkb25seSBub21vZGlmaWFibGUKK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgUmVuYW1lIGEgZmlsZQorIgorZnVuY3Rpb24hIHM6UmVuYW1lRmlsZSgpCisgIGxldCBmaWxlTmFtZT1zOkdldEZ1bGxGaWxlTmFtZSgpCisgIHNldGxvY2FsIG5vcmVhZG9ubHkgbW9kaWZpYWJsZQorICBpZiBpc2RpcmVjdG9yeShmaWxlTmFtZSkKKyAgICBlY2hvICJEaXJlY3RvcnkgcmVuYW1pbmcgbm90IHN1cHBvcnRlZCB5ZXQiCisgIGVsc2VpZiBmaWxlcmVhZGFibGUoZmlsZU5hbWUpCisgICAgbGV0IGFsdE5hbWU9aW5wdXQoIlJlbmFtZSAiLmZpbGVOYW1lLiIgdG8gOiAiKQorICAgIGVjaG8gIiAiCisgICAgaWYgYWx0TmFtZT09IiIKKyAgICAgIHNldGxvY2FsIHJlYWRvbmx5IG5vbW9kaWZpYWJsZQorICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgICBsZXQgc3VjY2Vzcz1yZW5hbWUoZmlsZU5hbWUsIGI6Y29tcGxldGVQYXRoLmFsdE5hbWUpCisgICAgaWYgc3VjY2VzcyE9MAorICAgICAgZWNobyAiQ2Fubm90IHJlbmFtZSAiLmZpbGVOYW1lLiAiIHRvICIuYWx0TmFtZQorICAgIGVsc2UKKyAgICAgIGVjaG8gIlJlbmFtZWQgIi5maWxlTmFtZS4iIHRvICIuYWx0TmFtZQorICAgICAgbGV0IG9sZFJlcD0mcmVwb3J0CisgICAgICBzZXQgcmVwb3J0PTEwMDAKKyAgICAgIGUhCisgICAgICBsZXQgJnJlcG9ydD1vbGRSZXAKKyAgICBlbmRpZgorICBlbmRpZgorICBzZXRsb2NhbCBub21vZGlmaWVkCisgIHNldGxvY2FsIHJlYWRvbmx5IG5vbW9kaWZpYWJsZQorZW5kZnVuY3Rpb24KKworIi0tLQorIiBUb2dnbGUgYmV0d2VlbiBzaG9ydCBhbmQgbG9uZyBoZWxwCisiCitmdW5jdGlvbiEgczpUb2dnbGVIZWxwKCkKKyAgaWYgZXhpc3RzKCJ3OmxvbmdoZWxwIikgJiYgdzpsb25naGVscD09MAorICAgIGxldCB3OmxvbmdoZWxwPTEKKyAgICBsZXQgczpsb25naGVscD0xCisgIGVsc2UKKyAgICBsZXQgdzpsb25naGVscD0wCisgICAgbGV0IHM6bG9uZ2hlbHA9MAorICBlbmRpZgorICAiIEFsbG93IG1vZGlmaWNhdGlvbgorICBzZXRsb2NhbCBub3JlYWRvbmx5IG1vZGlmaWFibGUKKyAgY2FsbCBzOlVwZGF0ZUhlYWRlcigpCisgICIgRGlzYWxsb3cgbW9kaWZpY2F0aW9uCisgIHNldGxvY2FsIHJlYWRvbmx5IG5vbW9kaWZpYWJsZQorZW5kZnVuY3Rpb24KKworIi0tLQorIiBVcGRhdGUgdGhlIGhlYWRlcgorIgorZnVuY3Rpb24hIHM6VXBkYXRlSGVhZGVyKCkKKyAgbGV0IG9sZFJlcD0mcmVwb3J0CisgIHNldCByZXBvcnQ9MTAwMDAKKyAgIiBTYXZlIHBvc2l0aW9uCisgIG5vcm1hbCEgbXQKKyAgIiBSZW1vdmUgb2xkIGhlYWRlcgorICAwCisgIDEsL14iPS8gZCBfCisgICIgQWRkIG5ldyBoZWFkZXIKKyAgY2FsbCBzOkFkZEhlYWRlcigpCisgICIgR28gYmFjayB3aGVyZSB3ZSBjYW1lIGZyb20gaWYgcG9zc2libGUKKyAgMAorICBpZiBsaW5lKCIndCIpICE9IDAKKyAgICBub3JtYWwhIGB0CisgIGVuZGlmCisKKyAgbGV0ICZyZXBvcnQ9b2xkUmVwCisgIHNldGxvY2FsIG5vbW9kaWZpZWQKK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgVG9nZ2xlIGxvbmcgdnMuIHNob3J0IGxpc3RpbmcKKyIKK2Z1bmN0aW9uISBzOlRvZ2dsZUxvbmdMaXN0KCkKKyAgc2V0bG9jYWwgbm9yZWFkb25seSBtb2RpZmlhYmxlCisgIGlmIGV4aXN0cygidzpsb25nbGlzdCIpICYmIHc6bG9uZ2xpc3Q9PTEKKyAgICBsZXQgdzpsb25nbGlzdD0wCisgICAgbGV0IHM6bG9uZ2xpc3Q9MAorICBlbHNlCisgICAgbGV0IHc6bG9uZ2xpc3Q9MQorICAgIGxldCBzOmxvbmdsaXN0PTEKKyAgZW5kaWYKKyAgY2FsbCBzOkFkZEZpbGVJbmZvKCkKKyAgc2V0bG9jYWwgcmVhZG9ubHkgbm9tb2RpZmlhYmxlCitlbmRmdW5jdGlvbgorCisiLS0tCisiIFNob3cgYWxsIGZpbGVzIC0gcmVtb3ZlIGZpbHRlcmluZworIgorZnVuY3Rpb24hIHM6U2hvd0FsbEZpbGVzKCkKKyAgc2V0bG9jYWwgbm9yZWFkb25seSBtb2RpZmlhYmxlCisgIGxldCBiOmZpbHRlckZvcm11bGE9IiIKKyAgbGV0IGI6ZmlsdGVyaW5nPSIiCisgIGNhbGwgczpTaG93RGlyZWN0b3J5KCkKKyAgc2V0bG9jYWwgcmVhZG9ubHkgbm9tb2RpZmlhYmxlCitlbmRmdW5jdGlvbgorCisiLS0tCisiIEZpZ3VyZSBvdXQgd2hhdCBzZWN0aW9uIHdlIGFyZSBpbgorIgorZnVuY3Rpb24hIHM6R2V0U2VjdGlvbigpCisgIGxldCBmbj1zOkdldEZpbGVOYW1lKCkKKyAgbGV0IHNlY3Rpb249ImZpbGUiCisgIGlmIGZuID1+ICcvJCcKKyAgICBsZXQgc2VjdGlvbj0iZGlyZWN0b3J5IgorICBlbHNlaWYgZm4gPX4gYjpzdWZmaXhlc1JlZ2V4cAorICAgIGxldCBzZWN0aW9uPSJzdWZmaXhlcyIKKyAgZW5kaWYKKyAgcmV0dXJuIHNlY3Rpb24KK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgUmVtb3ZlIHNlY3Rpb24gc2VwYXJhdG9ycworIgorZnVuY3Rpb24hIHM6UmVtb3ZlU2VwYXJhdG9ycygpCisgIGlmICFnOmV4cGxVc2VTZXBhcmF0b3JzCisgICAgcmV0dXJuCisgIGVuZGlmCisgIDAKKyAgc2lsZW50ISBleGVjICcvXiI9LysxLCRnL14nIC4gczpzZXBhcmF0b3IgLiAiL2QgXyIKK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgQWRkIHNlY3Rpb24gc2VwYXJhdG9ycworIiAgIGJldHdlZW4gZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGlmIHRoZXkgYXJlIHNlcGFyYXRlZAorIiAgIGJldHdlZW4gZmlsZXMgYW5kICdzdWZmaXhlcycgZmlsZXMgaWYgdGhleSBhcmUgc2VwYXJhdGVkCitmdW5jdGlvbiEgczpBZGRTZXBhcmF0b3JzKCkKKyAgaWYgIWc6ZXhwbFVzZVNlcGFyYXRvcnMKKyAgICByZXR1cm4KKyAgZW5kaWYKKyAgMAorICAvXiI9LysxCisgIGxldCBsYXN0c2VjPXM6R2V0U2VjdGlvbigpCisgICsxCisgIC4sJGcvXi9sZXQgc2VjPXM6R2V0U2VjdGlvbigpIHwKKwkgICAgICAgXGlmIGc6ZXhwbERpcnNGaXJzdCAhPSAwICYmIHNlYyAhPSBsYXN0c2VjICYmCisJICAgICAgIFwgICAobGFzdHNlYyA9PSAiZGlyZWN0b3J5IiB8fCBzZWMgPT0gImRpcmVjdG9yeSIpIHwKKwkgICAgICAgXCAgZXhlYyAibm9ybWFsISBJIiAuIHM6c2VwYXJhdG9yIC4gIlxuXDxlc2M+IiB8CisJICAgICAgIFxlbHNlaWYgZzpleHBsU3VmZml4ZXNMYXN0ICE9IDAgJiYgc2VjICE9IGxhc3RzZWMgJiYKKwkgICAgICAgXCAgIChsYXN0c2VjID09ICJzdWZmaXhlcyIgfHwgc2VjID09ICJzdWZmaXhlcyIpIHwKKwkgICAgICAgXCAgZXhlYyAibm9ybWFsISBJIiAuIHM6c2VwYXJhdG9yIC4gIlxuXDxlc2M+IiB8CisJICAgICAgIFxlbmRpZiB8CisJICAgICAgIFxsZXQgbGFzdHNlYz1zZWMKK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgR2VuZXJhbCBzdHJpbmcgY29tcGFyaXNvbiBmdW5jdGlvbgorIgorZnVuY3Rpb24hIHM6U3RyQ21wKGxpbmUxLCBsaW5lMiwgZGlyZWN0aW9uKQorICBpZiBhOmxpbmUxIDwgYTpsaW5lMgorICAgIHJldHVybiAtYTpkaXJlY3Rpb24KKyAgZWxzZWlmIGE6bGluZTEgPiBhOmxpbmUyCisgICAgcmV0dXJuIGE6ZGlyZWN0aW9uCisgIGVsc2UKKyAgICByZXR1cm4gMAorICBlbmRpZgorZW5kZnVuY3Rpb24KKworIi0tLQorIiBGdW5jdGlvbiBmb3IgdXNlIHdpdGggU29ydCgpLCB0byBjb21wYXJlIHRoZSBmaWxlIG5hbWVzCisiIERlZmF1bHQgc29ydCBpcyB0byBwdXQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBidXQgd2l0aCBhbGwgZGlyZWN0b3J5CisiIG5hbWVzIGJlZm9yZSBhbGwgZmlsZSBuYW1lcworIgorZnVuY3Rpb24hIHM6RmlsZU5hbWVDbXAobGluZTEsIGxpbmUyLCBkaXJlY3Rpb24pCisgIGxldCBmMT1zOkV4dHJhY3RGaWxlTmFtZShhOmxpbmUxKQorICBsZXQgZjI9czpFeHRyYWN0RmlsZU5hbWUoYTpsaW5lMikKKworICAiIFB1dCBkaXJlY3RvcnkgbmFtZXMgYmVmb3JlIGZpbGUgbmFtZXMKKyAgaWYgKGc6ZXhwbERpcnNGaXJzdCAhPSAwKSAmJiAoZjEgPX4gJ1wvJCcpICYmIChmMiAhfiAnXC8kJykKKyAgICByZXR1cm4gLWc6ZXhwbERpcnNGaXJzdAorICBlbHNlaWYgKGc6ZXhwbERpcnNGaXJzdCAhPSAwKSAmJiAoZjEgIX4gJ1wvJCcpICYmIChmMiA9fiAnXC8kJykKKyAgICByZXR1cm4gZzpleHBsRGlyc0ZpcnN0CisgIGVsc2VpZiAoZzpleHBsU3VmZml4ZXNMYXN0ICE9IDApICYmIChmMSA9fiBiOnN1ZmZpeGVzUmVnZXhwKSAmJiAoZjIgIX4gYjpzdWZmaXhlc1JlZ2V4cCkKKyAgICByZXR1cm4gZzpleHBsU3VmZml4ZXNMYXN0CisgIGVsc2VpZiAoZzpleHBsU3VmZml4ZXNMYXN0ICE9IDApICYmIChmMSAhfiBiOnN1ZmZpeGVzUmVnZXhwKSAmJiAoZjIgPX4gYjpzdWZmaXhlc1JlZ2V4cCkKKyAgICByZXR1cm4gLWc6ZXhwbFN1ZmZpeGVzTGFzdAorICBlbHNlCisgICAgcmV0dXJuIHM6U3RyQ21wKHN1YnN0aXR1dGUoZjEsICIvJCIsICIiLCAiIiksIHN1YnN0aXR1dGUoZjIsICIvJCIsICIiLCAiIiksIGE6ZGlyZWN0aW9uKQorICBlbmRpZgorCitlbmRmdW5jdGlvbgorCisiLS0tCisiIEZ1bmN0aW9uIGZvciB1c2Ugd2l0aCBTb3J0KCksIHRvIGNvbXBhcmUgdGhlIGZpbGUgbW9kaWZpY2F0aW9uIGRhdGVzCisiIERlZmF1bHQgc29ydCBpcyB0byBwdXQgTkVXRVNUIGZpbGVzIGZpcnN0LiAgUmV2ZXJzZSB3aWxsIHB1dCBvbGRlc3QKKyIgZmlsZXMgZmlyc3QKKyIKK2Z1bmN0aW9uISBzOkZpbGVEYXRlQ21wKGxpbmUxLCBsaW5lMiwgZGlyZWN0aW9uKQorICBsZXQgZjE9czpFeHRyYWN0RmlsZU5hbWUoYTpsaW5lMSkKKyAgbGV0IGYyPXM6RXh0cmFjdEZpbGVOYW1lKGE6bGluZTIpCisgIGxldCB0MT1zOkV4dHJhY3RGaWxlRGF0ZShhOmxpbmUxKQorICBsZXQgdDI9czpFeHRyYWN0RmlsZURhdGUoYTpsaW5lMikKKworICAiIFB1dCBkaXJlY3RvcnkgbmFtZXMgYmVmb3JlIGZpbGUgbmFtZXMKKyAgaWYgKGc6ZXhwbERpcnNGaXJzdCAhPSAwKSAmJiAoZjEgPX4gJ1wvJCcpICYmIChmMiAhfiAnXC8kJykKKyAgICByZXR1cm4gLWc6ZXhwbERpcnNGaXJzdAorICBlbHNlaWYgKGc6ZXhwbERpcnNGaXJzdCAhPSAwKSAmJiAoZjEgIX4gJ1wvJCcpICYmIChmMiA9fiAnXC8kJykKKyAgICByZXR1cm4gZzpleHBsRGlyc0ZpcnN0CisgIGVsc2VpZiAoZzpleHBsU3VmZml4ZXNMYXN0ICE9IDApICYmIChmMSA9fiBiOnN1ZmZpeGVzUmVnZXhwKSAmJiAoZjIgIX4gYjpzdWZmaXhlc1JlZ2V4cCkKKyAgICByZXR1cm4gZzpleHBsU3VmZml4ZXNMYXN0CisgIGVsc2VpZiAoZzpleHBsU3VmZml4ZXNMYXN0ICE9IDApICYmIChmMSAhfiBiOnN1ZmZpeGVzUmVnZXhwKSAmJiAoZjIgPX4gYjpzdWZmaXhlc1JlZ2V4cCkKKyAgICByZXR1cm4gLWc6ZXhwbFN1ZmZpeGVzTGFzdAorICBlbHNlaWYgdDEgPiB0MgorICAgIHJldHVybiAtYTpkaXJlY3Rpb24KKyAgZWxzZWlmIHQxIDwgdDIKKyAgICByZXR1cm4gYTpkaXJlY3Rpb24KKyAgZWxzZQorICAgIHJldHVybiBzOlN0ckNtcChzdWJzdGl0dXRlKGYxLCAiLyQiLCAiIiwgIiIpLCBzdWJzdGl0dXRlKGYyLCAiLyQiLCAiIiwgIiIpLCAxKQorICBlbmRpZgorZW5kZnVuY3Rpb24KKworIi0tLQorIiBGdW5jdGlvbiBmb3IgdXNlIHdpdGggU29ydCgpLCB0byBjb21wYXJlIHRoZSBmaWxlIHNpemVzCisiIERlZmF1bHQgc29ydCBpcyB0byBwdXQgbGFyZ2VzdCBmaWxlcyBmaXJzdC4gIFJldmVyc2Ugd2lsbCBwdXQKKyIgc21hbGxlc3QgZmlsZXMgZmlyc3QKKyIKK2Z1bmN0aW9uISBzOkZpbGVTaXplQ21wKGxpbmUxLCBsaW5lMiwgZGlyZWN0aW9uKQorICBsZXQgZjE9czpFeHRyYWN0RmlsZU5hbWUoYTpsaW5lMSkKKyAgbGV0IGYyPXM6RXh0cmFjdEZpbGVOYW1lKGE6bGluZTIpCisgIGxldCBzMT1zOkV4dHJhY3RGaWxlU2l6ZShhOmxpbmUxKQorICBsZXQgczI9czpFeHRyYWN0RmlsZVNpemUoYTpsaW5lMikKKworICBpZiAoZzpleHBsRGlyc0ZpcnN0ICE9IDApICYmIChmMSA9fiAnXC8kJykgJiYgKGYyICF+ICdcLyQnKQorICAgIHJldHVybiAtZzpleHBsRGlyc0ZpcnN0CisgIGVsc2VpZiAoZzpleHBsRGlyc0ZpcnN0ICE9IDApICYmIChmMSAhfiAnXC8kJykgJiYgKGYyID1+ICdcLyQnKQorICAgIHJldHVybiBnOmV4cGxEaXJzRmlyc3QKKyAgZWxzZWlmIChnOmV4cGxTdWZmaXhlc0xhc3QgIT0gMCkgJiYgKGYxID1+IGI6c3VmZml4ZXNSZWdleHApICYmIChmMiAhfiBiOnN1ZmZpeGVzUmVnZXhwKQorICAgIHJldHVybiBnOmV4cGxTdWZmaXhlc0xhc3QKKyAgZWxzZWlmIChnOmV4cGxTdWZmaXhlc0xhc3QgIT0gMCkgJiYgKGYxICF+IGI6c3VmZml4ZXNSZWdleHApICYmIChmMiA9fiBiOnN1ZmZpeGVzUmVnZXhwKQorICAgIHJldHVybiAtZzpleHBsU3VmZml4ZXNMYXN0CisgIGVsc2VpZiBzMSA+IHMyCisgICAgcmV0dXJuIC1hOmRpcmVjdGlvbgorICBlbHNlaWYgczEgPCBzMgorICAgIHJldHVybiBhOmRpcmVjdGlvbgorICBlbHNlCisgICAgcmV0dXJuIHM6U3RyQ21wKHN1YnN0aXR1dGUoZjEsICIvJCIsICIiLCAiIiksIHN1YnN0aXR1dGUoZjIsICIvJCIsICIiLCAiIiksIDEpCisgIGVuZGlmCitlbmRmdW5jdGlvbgorCisiLS0tCisiIFNvcnQgbGluZXMuICBTb3J0UigpIGlzIGNhbGxlZCByZWN1cnNpdmVseS4KKyIKK2Z1bmN0aW9uISBzOlNvcnRSKHN0YXJ0LCBlbmQsIGNtcCwgZGlyZWN0aW9uKQorCisgICIgQm90dG9tIG9mIHRoZSByZWN1cnNpb24gaWYgc3RhcnQgcmVhY2hlcyBlbmQKKyAgaWYgYTpzdGFydCA+PSBhOmVuZAorICAgIHJldHVybgorICBlbmRpZgorICAiCisgIGxldCBwYXJ0aXRpb24gPSBhOnN0YXJ0IC0gMQorICBsZXQgbWlkZGxlID0gcGFydGl0aW9uCisgIGxldCBwYXJ0U3RyID0gZ2V0bGluZSgoYTpzdGFydCArIGE6ZW5kKSAvIDIpCisgIGxldCBpID0gYTpzdGFydAorICB3aGlsZSAoaSA8PSBhOmVuZCkKKyAgICBsZXQgc3RyID0gZ2V0bGluZShpKQorICAgIGV4ZWMgImxldCByZXN1bHQgPSAiIC4gYTpjbXAgLiAiKHN0ciwgcGFydFN0ciwgIiAuIGE6ZGlyZWN0aW9uIC4gIikiCisgICAgaWYgcmVzdWx0IDw9IDAKKyAgICAgICIgTmVlZCB0byBwdXQgaXQgYmVmb3JlIHRoZSBwYXJ0aXRpb24uICBTd2FwIGxpbmVzIGkgYW5kIHBhcnRpdGlvbi4KKyAgICAgIGxldCBwYXJ0aXRpb24gPSBwYXJ0aXRpb24gKyAxCisgICAgICBpZiByZXN1bHQgPT0gMAorCWxldCBtaWRkbGUgPSBwYXJ0aXRpb24KKyAgICAgIGVuZGlmCisgICAgICBpZiBpICE9IHBhcnRpdGlvbgorCWxldCBzdHIyID0gZ2V0bGluZShwYXJ0aXRpb24pCisJY2FsbCBzZXRsaW5lKGksIHN0cjIpCisJY2FsbCBzZXRsaW5lKHBhcnRpdGlvbiwgc3RyKQorICAgICAgZW5kaWYKKyAgICBlbmRpZgorICAgIGxldCBpID0gaSArIDEKKyAgZW5kd2hpbGUKKworICAiIE5vdyB3ZSBoYXZlIGEgcG9pbnRlciB0byB0aGUgIm1pZGRsZSIgZWxlbWVudCwgYXMgZmFyIGFzIHBhcnRpdGlvbmluZworICAiIGdvZXMsIHdoaWNoIGNvdWxkIGJlIGFueXdoZXJlIGJlZm9yZSB0aGUgcGFydGl0aW9uLiAgTWFrZSBzdXJlIGl0IGlzIGF0CisgICIgdGhlIGVuZCBvZiB0aGUgcGFydGl0aW9uLgorICBpZiBtaWRkbGUgIT0gcGFydGl0aW9uCisgICAgbGV0IHN0ciA9IGdldGxpbmUobWlkZGxlKQorICAgIGxldCBzdHIyID0gZ2V0bGluZShwYXJ0aXRpb24pCisgICAgY2FsbCBzZXRsaW5lKG1pZGRsZSwgc3RyMikKKyAgICBjYWxsIHNldGxpbmUocGFydGl0aW9uLCBzdHIpCisgIGVuZGlmCisgIGNhbGwgczpTb3J0UihhOnN0YXJ0LCBwYXJ0aXRpb24gLSAxLCBhOmNtcCxhOmRpcmVjdGlvbikKKyAgY2FsbCBzOlNvcnRSKHBhcnRpdGlvbiArIDEsIGE6ZW5kLCBhOmNtcCxhOmRpcmVjdGlvbikKK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgVG8gU29ydCBhIHJhbmdlIG9mIGxpbmVzLCBwYXNzIHRoZSByYW5nZSB0byBTb3J0KCkgYWxvbmcgd2l0aCB0aGUgbmFtZSBvZiBhCisiIGZ1bmN0aW9uIHRoYXQgd2lsbCBjb21wYXJlIHR3byBsaW5lcy4KKyIKK2Z1bmN0aW9uISBzOlNvcnQoY21wLGRpcmVjdGlvbikgcmFuZ2UKKyAgY2FsbCBzOlNvcnRSKGE6Zmlyc3RsaW5lLCBhOmxhc3RsaW5lLCBhOmNtcCwgYTpkaXJlY3Rpb24pCitlbmRmdW5jdGlvbgorCisiLS0tCisiIFJldmVyc2UgdGhlIGN1cnJlbnQgc29ydCBvcmRlcgorIgorZnVuY3Rpb24hIHM6U29ydFJldmVyc2UoKQorICBpZiBleGlzdHMoInc6c29ydGRpcmVjdGlvbiIpICYmIHc6c29ydGRpcmVjdGlvbiA9PSAtMQorICAgIGxldCB3OnNvcnRkaXJlY3Rpb24gPSAxCisgICAgbGV0IHc6c29ydGRpcmxhYmVsICA9ICIiCisgIGVsc2UKKyAgICBsZXQgdzpzb3J0ZGlyZWN0aW9uID0gLTEKKyAgICBsZXQgdzpzb3J0ZGlybGFiZWwgID0gInJldmVyc2UgIgorICBlbmRpZgorICBsZXQgczpzb3J0Ynk9dzpzb3J0ZGlybGFiZWwgLiB3OnNvcnR0eXBlCisgIGNhbGwgczpTb3J0TGlzdGluZygiIikKK2VuZGZ1bmN0aW9uCisKKyItLS0KKyIgVG9nZ2xlIHRocm91Z2ggdGhlIGRpZmZlcmVudCBzb3J0IG9yZGVycworIgorZnVuY3Rpb24hIHM6U29ydFNlbGVjdCgpCisgICIgU2VsZWN0IHRoZSBuZXh0IHNvcnQgb3B0aW9uCisgIGlmICFleGlzdHMoInc6c29ydHR5cGUiKQorICAgIGxldCB3OnNvcnR0eXBlPSJuYW1lIgorICBlbHNlaWYgdzpzb3J0dHlwZSA9PSAibmFtZSIKKyAgICBsZXQgdzpzb3J0dHlwZT0ic2l6ZSIKKyAgZWxzZWlmIHc6c29ydHR5cGUgPT0gInNpemUiCisgICAgbGV0IHc6c29ydHR5cGU9ImRhdGUiCisgIGVsc2UKKyAgICBsZXQgdzpzb3J0dHlwZT0ibmFtZSIKKyAgZW5kaWYKKyAgbGV0IHM6c29ydGJ5PXc6c29ydGRpcmxhYmVsIC4gdzpzb3J0dHlwZQorICBjYWxsIHM6U29ydExpc3RpbmcoIiIpCitlbmRmdW5jdGlvbgorCisiLS0tCisiIFNvcnQgdGhlIGZpbGUgbGlzdGluZworIgorZnVuY3Rpb24hIHM6U29ydExpc3RpbmcobXNnKQorICAgICIgU2F2ZSB0aGUgbGluZSB3ZSBzdGFydCBvbiBzbyB3ZSBjYW4gZ28gYmFjayB0aGVyZSB3aGVuIGRvbmUKKyAgICAiIHNvcnRpbmcKKyAgICBsZXQgc3RhcnRsaW5lID0gZ2V0bGluZSgiLiIpCisgICAgbGV0IGNvbD1jb2woIi4iKQorICAgIGxldCBsaW49bGluZSgiLiIpCisKKyAgICAiIEFsbG93IG1vZGlmaWNhdGlvbgorICAgIHNldGxvY2FsIG5vcmVhZG9ubHkgbW9kaWZpYWJsZQorCisgICAgIiBTZW5kIGEgbWVzc2FnZSBhYm91dCB3aGF0IHdlJ3JlIGRvaW5nCisgICAgIiBEb24ndCByZWFsbHkgbmVlZCB0aGlzIC0gaXQgY2FuIGNhdXNlIGhpdCByZXR1cm4gcHJvbXB0cworIiAgIGVjaG8gYTptc2cgLiAiU29ydGluZyBieSIgLiB3OnNvcnRkaXJsYWJlbCAuIHc6c29ydHR5cGUKKworICAgICIgQ3JlYXRlIGEgcmVndWxhciBleHByZXNzaW9uIG91dCBvZiB0aGUgc3VmZml4ZXMgb3B0aW9uIGluIGNhc2UKKyAgICAiIHdlIG5lZWQgaXQuCisgICAgY2FsbCBzOlNldFN1ZmZpeGVzTGFzdCgpCisKKyAgICAiIFJlbW92ZSBzZWN0aW9uIHNlcGFyYXRvcnMKKyAgICBjYWxsIHM6UmVtb3ZlU2VwYXJhdG9ycygpCisKKyAgICAiIERvIHRoZSBzb3J0CisgICAgMAorICAgIGlmIHc6c29ydHR5cGUgPT0gInNpemUiCisgICAgICAvXiI9LysxLCRjYWxsIHM6U29ydCgiczpGaWxlU2l6ZUNtcCIsdzpzb3J0ZGlyZWN0aW9uKQorICAgIGVsc2VpZiB3OnNvcnR0eXBlID09ICJkYXRlIgorICAgICAgL14iPS8rMSwkY2FsbCBzOlNvcnQoInM6RmlsZURhdGVDbXAiLHc6c29ydGRpcmVjdGlvbikKKyAgICBlbHNlCisgICAgICAvXiI9LysxLCRjYWxsIHM6U29ydCgiczpGaWxlTmFtZUNtcCIsdzpzb3J0ZGlyZWN0aW9uKQorICAgIGVuZGlmCisKKyAgICAiIFJlcGxhY2UgdGhlIGhlYWRlciB3aXRoIHVwZGF0ZWQgaW5mb3JtYXRpb24KKyAgICBjYWxsIHM6VXBkYXRlSGVhZGVyKCkKKworICAgICIgUmVzdG9yZSBzZWN0aW9uIHNlcGFyYXRvcnMKKyAgICBjYWxsIHM6QWRkU2VwYXJhdG9ycygpCisKKyAgICAiIFJldHVybiB0byB0aGUgcG9zaXRpb24gd2Ugc3RhcnRlZCBvbgorICAgIDAKKyAgICBpZiBzZWFyY2goJ1xtXicuZXNjYXBlKHN0YXJ0bGluZSxzOmVzY3JlZ2V4cCksJ1cnKSA8PSAwCisgICAgICBleGVjdXRlIGxpbgorICAgIGVuZGlmCisgICAgZXhlY3V0ZSAibm9ybWFsISIgY29sIC4gInwiCisKKyAgICAiIERpc2FsbG93IG1vZGlmaWNhdGlvbgorICAgIHNldGxvY2FsIG5vbW9kaWZpZWQKKyAgICBzZXRsb2NhbCByZWFkb25seSBub21vZGlmaWFibGUKKworZW5kZnVuY3Rpb24KKworIi0tLQorIiBTZXR1cCBmb3IgZWRpdGluZyBkaXJlY3RvcmllcyBhZnRlciBzdGFydGluZyB1cCBieSBnb2luZyB0byBlYWNoIHdpbmRvdy4KKyIgUmVxdWlyZWQgZm9yICJ2aW0gLW8gZmlsZW5hbWUgZGlybmFtZSIKKyIKK2Z1bmN0aW9uISBzOkVkaXRBbGwoKQorICBpZiB3aW5idWZucigyKSA9PSAtMQorICAgIHJldHVybgorICBlbmRpZgorICBsZXQgY21kID0gd2lucmVzdGNtZCgpCisgIGxldCBjdXJ3aW4gPSB3aW5ucigpCisgIHdoaWxlIDEKKyAgICB3aW5jbWQgdworICAgIGlmIHdpbm5yKCkgPT0gY3Vyd2luCisgICAgICBicmVhaworICAgIGVuZGlmCisgICAgY2FsbCBzOkVkaXREaXIoKQorICBlbmR3aGlsZQorICBleGUgY21kCitlbmRmdW5jdGlvbgorCisiLS0tCisiIFNldCB1cCB0aGUgYXV0b2NvbW1hbmQgdG8gYWxsb3cgZGlyZWN0b3JpZXMgdG8gYmUgZWRpdGVkCisiCithdWdyb3VwIGZpbGVFeHBsb3JlcgorICBhdSEKKyAgIiBGaWxsIHRoZSB3aW5kb3cgd2hlbiBlbnRlcmluZyB0aGUgYnVmZmVyOyAiOmVkaXQgZGlyIi4KKyAgYXUgQnVmRW50ZXIgKiBjYWxsIHM6RWRpdERpcigpCisgICIgU2V0IHRoZSB3aW5kb3cgdmFyaWFibGVzIGFmdGVyIGEgc3BsaXQ7ICI6c3BsaXQiLgorICBhdSBXaW5FbnRlciAqIGlmICFleGlzdHMoInc6c29ydGRpcmVjdGlvbiIpIHwgY2FsbCBzOkVkaXREaXIoKSB8IGVuZGlmCisgICIgRmlsbCB0aGUgd2luZG93cyBhZnRlciBWaW0gaGFzIHN0YXJ0ZWQgdXAuCisgIGF1IFZpbUVudGVyICogY2FsbCBzOkVkaXRBbGwoKQorYXVncm91cCBlbmQKKworIiByZXN0b3JlICdjcG8nCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcGx1Z2luL2d6aXAudmltIGIvcnVudGltZS9wbHVnaW4vZ3ppcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliMGNiYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcGx1Z2luL2d6aXAudmltCkBAIC0wLDAgKzEsMTU3IEBACisiIFZpbSBwbHVnaW4gZm9yIGVkaXRpbmcgY29tcHJlc3NlZCBmaWxlcy4KKyIgTWFpbnRhaW5lcjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6IDIwMDQgSmFuIDEyCisKKyIgRXhpdCBxdWlja2x5IHdoZW46CisiIC0gdGhpcyBwbHVnaW4gd2FzIGFscmVhZHkgbG9hZGVkCisiIC0gd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0CisiIC0gc29tZSBhdXRvY29tbWFuZHMgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgY29tcHJlc3NlZCBmaWxlcworaWYgZXhpc3RzKCJsb2FkZWRfZ3ppcCIpIHx8ICZjcCB8fCBleGlzdHMoIiNCdWZSZWFkUHJlIyouZ3oiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgbG9hZGVkX2d6aXAgPSAxCisKK2F1Z3JvdXAgZ3ppcAorICAiIFJlbW92ZSBhbGwgZ3ppcCBhdXRvY29tbWFuZHMKKyAgYXUhCisKKyAgIiBFbmFibGUgZWRpdGluZyBvZiBnemlwcGVkIGZpbGVzCisgICIgc2V0IGJpbmFyeSBtb2RlIGJlZm9yZSByZWFkaW5nIHRoZSBmaWxlCisgICIgdXNlICJnemlwIC1kIiwgZ3VuemlwIGlzbid0IGFsd2F5cyBhdmFpbGFibGUKKyAgYXV0b2NtZCBCdWZSZWFkUHJlLEZpbGVSZWFkUHJlCSouZ3osKi5iejIsKi5aIHNldGxvY2FsIGJpbgorICBhdXRvY21kIEJ1ZlJlYWRQb3N0LEZpbGVSZWFkUG9zdAkqLmd6ICBjYWxsIHM6cmVhZCgiZ3ppcCAtZG4iKQorICBhdXRvY21kIEJ1ZlJlYWRQb3N0LEZpbGVSZWFkUG9zdAkqLmJ6MiBjYWxsIHM6cmVhZCgiYnppcDIgLWQiKQorICBhdXRvY21kIEJ1ZlJlYWRQb3N0LEZpbGVSZWFkUG9zdAkqLlogICBjYWxsIHM6cmVhZCgidW5jb21wcmVzcyIpCisgIGF1dG9jbWQgQnVmV3JpdGVQb3N0LEZpbGVXcml0ZVBvc3QJKi5neiAgY2FsbCBzOndyaXRlKCJnemlwIikKKyAgYXV0b2NtZCBCdWZXcml0ZVBvc3QsRmlsZVdyaXRlUG9zdAkqLmJ6MiBjYWxsIHM6d3JpdGUoImJ6aXAyIikKKyAgYXV0b2NtZCBCdWZXcml0ZVBvc3QsRmlsZVdyaXRlUG9zdAkqLlogICBjYWxsIHM6d3JpdGUoImNvbXByZXNzIC1mIikKKyAgYXV0b2NtZCBGaWxlQXBwZW5kUHJlCQkJKi5neiAgY2FsbCBzOmFwcHJlKCJnemlwIC1kbiIpCisgIGF1dG9jbWQgRmlsZUFwcGVuZFByZQkJCSouYnoyIGNhbGwgczphcHByZSgiYnppcDIgLWQiKQorICBhdXRvY21kIEZpbGVBcHBlbmRQcmUJCQkqLlogICBjYWxsIHM6YXBwcmUoInVuY29tcHJlc3MiKQorICBhdXRvY21kIEZpbGVBcHBlbmRQb3N0CQkqLmd6ICBjYWxsIHM6d3JpdGUoImd6aXAiKQorICBhdXRvY21kIEZpbGVBcHBlbmRQb3N0CQkqLmJ6MiBjYWxsIHM6d3JpdGUoImJ6aXAyIikKKyAgYXV0b2NtZCBGaWxlQXBwZW5kUG9zdAkJKi5aICAgY2FsbCBzOndyaXRlKCJjb21wcmVzcyAtZiIpCithdWdyb3VwIEVORAorCisiIEZ1bmN0aW9uIHRvIGNoZWNrIHRoYXQgZXhlY3V0aW5nICJjbWQgWy1mXSIgd29ya3MuCisiIFRoZSByZXN1bHQgaXMgY2FjaGVkIGluIHM6aGF2ZV8iY21kIiBmb3Igc3BlZWQuCitmdW4gczpjaGVjayhjbWQpCisgIGxldCBuYW1lID0gc3Vic3RpdHV0ZShhOmNtZCwgJ1woXFMqXCkuKicsICdcMScsICcnKQorICBpZiAhZXhpc3RzKCJzOmhhdmVfIiAuIG5hbWUpCisgICAgbGV0IGUgPSBleGVjdXRhYmxlKG5hbWUpCisgICAgaWYgZSA8IDAKKyAgICAgIGxldCByID0gc3lzdGVtKG5hbWUgLiAiIC0tdmVyc2lvbiIpCisgICAgICBsZXQgZSA9IChyICF+ICJub3QgZm91bmQiICYmIHIgIT0gIiIpCisgICAgZW5kaWYKKyAgICBleGUgImxldCBzOmhhdmVfIiAuIG5hbWUgLiAiPSIgLiBlCisgIGVuZGlmCisgIGV4ZSAicmV0dXJuIHM6aGF2ZV8iIC4gbmFtZQorZW5kZnVuCisKKyIgQWZ0ZXIgcmVhZGluZyBjb21wcmVzc2VkIGZpbGU6IFVuY29tcHJlc3MgdGV4dCBpbiBidWZmZXIgd2l0aCAiY21kIgorZnVuIHM6cmVhZChjbWQpCisgICIgZG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGNtZCBpcyBub3Qgc3VwcG9ydGVkCisgIGlmICFzOmNoZWNrKGE6Y21kKQorICAgIHJldHVybgorICBlbmRpZgorICAiIG1ha2UgJ3BhdGNobW9kZScgZW1wdHksIHdlIGRvbid0IHdhbnQgYSBjb3B5IG9mIHRoZSB3cml0dGVuIGZpbGUKKyAgbGV0IHBtX3NhdmUgPSAmcG0KKyAgc2V0IHBtPQorICAiIHJlbW92ZSAnYScgYW5kICdBJyBmcm9tICdjcG8nIHRvIGF2b2lkIHRoZSBhbHRlcm5hdGUgZmlsZSBjaGFuZ2VzCisgIGxldCBjcG9fc2F2ZSA9ICZjcG8KKyAgc2V0IGNwby09YSBjcG8tPUEKKyAgIiBzZXQgJ21vZGlmaWFibGUnCisgIGxldCBtYV9zYXZlID0gJm1hCisgIHNldGxvY2FsIG1hCisgICIgd2hlbiBmaWx0ZXJpbmcgdGhlIHdob2xlIGJ1ZmZlciwgaXQgd2lsbCBiZWNvbWUgZW1wdHkKKyAgbGV0IGVtcHR5ID0gbGluZSgiJ1siKSA9PSAxICYmIGxpbmUoIiddIikgPT0gbGluZSgiJCIpCisgIGxldCB0bXAgPSB0ZW1wbmFtZSgpCisgIGxldCB0bXBlID0gdG1wIC4gIi4iIC4gZXhwYW5kKCI8YWZpbGU+OmUiKQorICAiIHdyaXRlIHRoZSBqdXN0IHJlYWQgbGluZXMgdG8gYSB0ZW1wIGZpbGUgIidbLCdddyB0bXAuZ3oiCisgIGV4ZWN1dGUgInNpbGVudCAnWywnXXcgIiAuIHRtcGUKKyAgIiB1bmNvbXByZXNzIHRoZSB0ZW1wIGZpbGU6IGNhbGwgc3lzdGVtKCJnemlwIC1kbiB0bXAuZ3oiKQorICBjYWxsIHN5c3RlbShhOmNtZCAuICIgIiAuIHRtcGUpCisgICIgZGVsZXRlIHRoZSBjb21wcmVzc2VkIGxpbmVzOyByZW1lbWJlciB0aGUgbGluZSBudW1iZXIKKyAgbGV0IGwgPSBsaW5lKCInWyIpIC0gMQorICBpZiBleGlzdHMoIjpsb2NrbWFya3MiKQorICAgIGxvY2ttYXJrcyAnWywnXWQgXworICBlbHNlCisgICAgJ1ssJ11kIF8KKyAgZW5kaWYKKyAgIiByZWFkIGluIHRoZSB1bmNvbXByZXNzZWQgbGluZXMgIidbLTFyIHRtcCIKKyAgc2V0bG9jYWwgbm9iaW4KKyAgaWYgZXhpc3RzKCI6bG9ja21hcmtzIikKKyAgICBleGVjdXRlICJzaWxlbnQgbG9ja21hcmtzICIgLiBsIC4gInIgIiAuIHRtcAorICBlbHNlCisgICAgZXhlY3V0ZSAic2lsZW50ICIgLiBsIC4gInIgIiAuIHRtcAorICBlbmRpZgorCisgICIgaWYgYnVmZmVyIGJlY2FtZSBlbXB0eSwgZGVsZXRlIHRyYWlsaW5nIGJsYW5rIGxpbmUKKyAgaWYgZW1wdHkKKyAgICBzaWxlbnQgJGRlbGV0ZSBfCisgICAgMQorICBlbmRpZgorICAiIGRlbGV0ZSB0aGUgdGVtcCBmaWxlIGFuZCB0aGUgdXNlZCBidWZmZXJzCisgIGNhbGwgZGVsZXRlKHRtcCkKKyAgc2lsZW50ISBleGUgImJ3aXBlICIgLiB0bXAKKyAgc2lsZW50ISBleGUgImJ3aXBlICIgLiB0bXBlCisgIGxldCAmcG0gPSBwbV9zYXZlCisgIGxldCAmY3BvID0gY3BvX3NhdmUKKyAgbGV0ICZsOm1hID0gbWFfc2F2ZQorICAiIFdoZW4gdW5jb21wcmVzc2VkIHRoZSB3aG9sZSBidWZmZXIsIGRvIGF1dG9jb21tYW5kcworICBpZiBlbXB0eQorICAgIGlmICZ2ZXJib3NlID49IDgKKyAgICAgIGV4ZWN1dGUgImRvYXUgQnVmUmVhZFBvc3QgIiAuIGV4cGFuZCgiJTpyIikKKyAgICBlbHNlCisgICAgICBleGVjdXRlICJzaWxlbnQhIGRvYXUgQnVmUmVhZFBvc3QgIiAuIGV4cGFuZCgiJTpyIikKKyAgICBlbmRpZgorICBlbmRpZgorZW5kZnVuCisKKyIgQWZ0ZXIgd3JpdGluZyBjb21wcmVzc2VkIGZpbGU6IENvbXByZXNzIHdyaXR0ZW4gZmlsZSB3aXRoICJjbWQiCitmdW4gczp3cml0ZShjbWQpCisgICIgZG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGNtZCBpcyBub3Qgc3VwcG9ydGVkCisgIGlmIHM6Y2hlY2soYTpjbWQpCisgICAgIiBSZW5hbWUgdGhlIGZpbGUgYmVmb3JlIGNvbXByZXNzaW5nIGl0LgorICAgIGxldCBubSA9IGV4cGFuZCgiPGFmaWxlPiIpCisgICAgbGV0IG5tdCA9IHM6dGVtcG5hbWUobm0pCisgICAgaWYgcmVuYW1lKG5tLCBubXQpID09IDAKKyAgICAgIGNhbGwgc3lzdGVtKGE6Y21kIC4gIiAiIC4gbm10KQorICAgICAgY2FsbCByZW5hbWUobm10IC4gIi4iIC4gZXhwYW5kKCI8YWZpbGU+OmUiKSwgbm0pCisgICAgZW5kaWYKKyAgZW5kaWYKK2VuZGZ1bgorCisiIEJlZm9yZSBhcHBlbmRpbmcgdG8gY29tcHJlc3NlZCBmaWxlOiBVbmNvbXByZXNzIGZpbGUgd2l0aCAiY21kIgorZnVuIHM6YXBwcmUoY21kKQorICAiIGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBjbWQgaXMgbm90IHN1cHBvcnRlZAorICBpZiBzOmNoZWNrKGE6Y21kKQorICAgICIgUmVuYW1lIHRvIGEgd2VpcmQgbmFtZSB0byBhdm9pZCB0aGUgcmlzayBvZiBvdmVyd3JpdGluZyBhbm90aGVyIGZpbGUKKyAgICBsZXQgbm0gPSBleHBhbmQoIjxhZmlsZT4iKQorICAgIGxldCBubXQgPSBleHBhbmQoIjxhZmlsZT46cDpoIikgLiAiL1h+PUBsOXE1IgorICAgIGxldCBubXRlID0gbm10IC4gIi4iIC4gZXhwYW5kKCI8YWZpbGU+OmUiKQorICAgIGlmIHJlbmFtZShubSwgbm10ZSkgPT0gMAorICAgICAgaWYgJnBhdGNobW9kZSAhPSAiIiAmJiBnZXRmc2l6ZShubSAuICZwYXRjaG1vZGUpID09IC0xCisJIiBDcmVhdGUgcGF0Y2htb2RlIGZpbGUgYnkgY3JlYXRpbmcgdGhlIGRlY29tcHJlc3NlZCBmaWxlIG5ldworCWNhbGwgc3lzdGVtKGE6Y21kIC4gIiAtYyAiIC4gbm10ZSAuICIgPiAiIC4gbm10KQorCWNhbGwgcmVuYW1lKG5tdGUsIG5tIC4gJnBhdGNobW9kZSkKKyAgICAgIGVsc2UKKwljYWxsIHN5c3RlbShhOmNtZCAuICIgIiAuIG5tdGUpCisgICAgICBlbmRpZgorICAgICAgY2FsbCByZW5hbWUobm10LCBubSkKKyAgICBlbmRpZgorICBlbmRpZgorZW5kZnVuCisKKyIgZmluZCBhIGZpbGUgbmFtZSBmb3IgdGhlIGZpbGUgdG8gYmUgY29tcHJlc3NlZC4gIFVzZSAibmFtZSIgd2l0aG91dCBhbgorIiBleHRlbnNpb24gaWYgcG9zc2libGUuICBPdGhlcndpc2UgdXNlIGEgd2VpcmQgbmFtZSB0byBhdm9pZCBvdmVyd3JpdGluZyBhbgorIiBleGlzdGluZyBmaWxlLgorZnVuIHM6dGVtcG5hbWUobmFtZSkKKyAgbGV0IGZuID0gZm5hbWVtb2RpZnkoYTpuYW1lLCAiOnIiKQorICBpZiAhZmlsZXJlYWRhYmxlKGZuKSAmJiAhaXNkaXJlY3RvcnkoZm4pCisgICAgcmV0dXJuIGZuCisgIGVuZGlmCisgIHJldHVybiBmbmFtZW1vZGlmeShhOm5hbWUsICI6cDpoIikgLiAiL1h+PUBsOXE1IgorZW5kZnVuCisKKyIgdmltOiBzZXQgc3c9MiA6CmRpZmYgLS1naXQgYS9ydW50aW1lL3BsdWdpbi9uZXRydy52aW0gYi9ydW50aW1lL3BsdWdpbi9uZXRydy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwNThjNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcGx1Z2luL25ldHJ3LnZpbQpAQCAtMCwwICsxLDExNjAgQEAKKyIgbmV0cncudmltOiAoZ2xvYmFsIHBsdWdpbikgSGFuZGxlcyBmaWxlIHRyYW5zZmVyIGFjcm9zcyBhIG5ldHdvcmsKKyIgTGFzdCBDaGFuZ2U6CUp1biAwNCwgMjAwNAorIiBNYWludGFpbmVyOglDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gUGhEICAgPGRyY2hpcE5PU1BBTSBhdCBjYW1wYmVsbGZhbWlseS5iaXo+CisiIFZlcnNpb246CTQ0CisiIExpY2Vuc2U6CVZpbSBMaWNlbnNlICAoc2VlIHZpbSdzIDpoZWxwIGxpY2Vuc2UpCisiCisiICBCdXQgYmUgZG9lcnMgb2YgdGhlIHdvcmQsIGFuZCBub3Qgb25seSBoZWFyZXJzLCBkZWx1ZGluZyB5b3VyIG93biBzZWx2ZXMKKyIgIChKYW1lcyAxOjIyIFJTVikKKyIgPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCisKKyIgRXhpdCBxdWlja2x5IHdoZW4gYWxyZWFkeSBsb2FkZWQgb3Igd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgoraWYgZXhpc3RzKCJsb2FkZWRfbmV0cnciKSB8fCAmY3AKKyAgZmluaXNoCitlbmRpZgorbGV0IGxvYWRlZF9uZXRydyA9ICJ2NDQiCitsZXQgczpzYXZlX2NwbyAgID0gJmNwbworc2V0IGNwbyZ2aW0KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgRGVmYXVsdCB2YWx1ZXMgZm9yIGdsb2JhbCBuZXRydyB2YXJpYWJsZXMge3t7MQoraWYgIWV4aXN0cygiZzpuZXRyd19mdHBtb2RlIikKKyBsZXQgZzpuZXRyd19mdHBtb2RlPSAiYmluYXJ5IgorZW5kaWYKK2lmICFleGlzdHMoImc6bmV0cndfd2luOTVmdHAiKQorIGxldCBnOm5ldHJ3X3dpbjk1ZnRwPSAxCitlbmRpZgoraWYgIWV4aXN0cygiZzpuZXRyd19jeWd3aW4iKQorIGlmIGhhcygid2luMzIiKQorICBsZXQgZzpuZXRyd19jeWd3aW49IDEKKyBlbHNlCisgIGxldCBnOm5ldHJ3X2N5Z3dpbj0gMAorIGVuZGlmCitlbmRpZgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBEZWZhdWx0IHZhbHVlcyBmb3IgZ2xvYmFsIHByb3RvY29sIHZhcmlhYmxlcyB7e3sxCitpZiAhZXhpc3RzKCJnOm5ldHJ3X3JjcF9jbWQiKQorICBsZXQgZzpuZXRyd19yY3BfY21kCT0gInJjcCIKK2VuZGlmCitpZiAhZXhpc3RzKCJnOm5ldHJ3X2Z0cF9jbWQiKQorICBsZXQgZzpuZXRyd19mdHBfY21kCT0gImZ0cCIKK2VuZGlmCitpZiAhZXhpc3RzKCJnOm5ldHJ3X3NjcF9jbWQiKQorICBsZXQgZzpuZXRyd19zY3BfY21kCT0gInNjcCAtcSIKK2VuZGlmCitpZiAhZXhpc3RzKCJnOm5ldHJ3X3NmdHBfY21kIikKKyAgbGV0IGc6bmV0cndfc2Z0cF9jbWQJPSAic2Z0cCIKK2VuZGlmCitpZiAhZXhpc3RzKCJnOm5ldHJ3X2h0dHBfY21kIikKKyBpZiBleGVjdXRhYmxlKCJ3Z2V0IikKKyAgbGV0IGc6bmV0cndfaHR0cF9jbWQJPSAid2dldCAtcSAtTyIKKyBlbHNlaWYgZXhlY3V0YWJsZSgiZmV0Y2giKQorICBsZXQgZzpuZXRyd19odHRwX2NtZAk9ICJmZXRjaCAtbyIKKyBlbHNlCisgIGxldCBnOm5ldHJ3X2h0dHBfY21kCT0gIiIKKyBlbmRpZgorZW5kaWYKK2lmICFleGlzdHMoImc6bmV0cndfZGF2X2NtZCIpCisgIGxldCBnOm5ldHJ3X2Rhdl9jbWQJPSAiY2FkYXZlciIKK2VuZGlmCitpZiAhZXhpc3RzKCJnOm5ldHJ3X3JzeW5jX2NtZCIpCisgIGxldCBnOm5ldHJ3X3JzeW5jX2NtZAk9ICJyc3luYyIKK2VuZGlmCitpZiAhZXhpc3RzKCJnOm5ldHJ3X2ZldGNoX2NtZCIpCisgaWYgZXhlY3V0YWJsZSgiZmV0Y2giKQorICBsZXQgZzpuZXRyd19mZXRjaF9jbWQJPSAiZmV0Y2ggLW8iCisgZWxzZQorICBsZXQgZzpuZXRyd19mZXRjaF9jbWQJPSAiIgorIGVuZGlmCitlbmRpZgorCitpZiBoYXMoIndpbjMyIikKKyAgXCAmJiBleGlzdHMoImc6bmV0cndfdXNlX250X3JjcCIpCisgIFwgJiYgZzpuZXRyd191c2VfbnRfcmNwCisgIFwgJiYgZXhlY3V0YWJsZSggJFN5c3RlbVJvb3QgLicvc3lzdGVtMzIvcmNwLmV4ZScpCisgbGV0IHM6bmV0cndfaGFzX250X3JjcCA9IDEKKyBsZXQgczpuZXRyd19yY3Btb2RlICAgID0gJy1iJworIGVsc2UKKyBsZXQgczpuZXRyd19oYXNfbnRfcmNwID0gMAorIGxldCBzOm5ldHJ3X3JjcG1vZGUgICAgPSAnJworZW5kaWYKKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVHJhbnNwYXJlbmN5IFN1cHBvcnQ6IHt7ezEKKyIgQXV0by1kZXRlY3Rpb24gZm9yIGZ0cDovLyosIHJjcDovLyosIHNjcDovLyosIHNmdHA6Ly8qLCBodHRwOi8vKiwgZGF2Oi8vKiwKKyIgYW5kIHJzeW5jOi8vKgorIiBTaG91bGQgbWFrZSBmaWxlIHRyYW5zZmVycyBhY3Jvc3MgbmV0d29ya3MgdHJhbnNwYXJlbnQuICBDdXJyZW50bHkgSSBoYXZlbid0CisiIHN1cHBvcnRlZCBhcHBlbmRzLiAgSGV5LCBnb3R0YSBsZWF2ZSBzb21ldGhpbmcgZm9yIGEgZnV0dXJlIDxuZXRydy52aW0+IQoraWYgdmVyc2lvbiA+PSA2MDAKKyBhdWdyb3VwIE5ldHdvcmsKKyAgYXUhCisgIGlmIGhhcygid2luMzIiKQorICAgYXUgQnVmUmVhZENtZCAgZmlsZTovLyoJCWV4ZSAiZG9hdSBCdWZSZWFkUHJlICIuZXhwYW5kKCI8YWZpbGU+Iil8ZXhlICdlICcuc3Vic3RpdHV0ZShleHBhbmQoIjxhZmlsZT4iKSwiZmlsZTovKiIsIiIsIiIpfGV4ZSAiZG9hdSBCdWZSZWFkUG9zdCAiLmV4cGFuZCgiPGFmaWxlPiIpCisgIGVsc2UKKyAgIGF1IEJ1ZlJlYWRDbWQgIGZpbGU6Ly8vKgkJZXhlICJkb2F1IEJ1ZlJlYWRQcmUgIi5leHBhbmQoIjxhZmlsZT4iKXxleGUgJ2UgLycuc3Vic3RpdHV0ZShleHBhbmQoIjxhZmlsZT4iKSwiZmlsZTovKiIsIiIsIiIpfGV4ZSAiZG9hdSBCdWZSZWFkUG9zdCAiLmV4cGFuZCgiPGFmaWxlPiIpCisgICBhdSBCdWZSZWFkQ21kICBmaWxlOi8vbG9jYWxob3N0LyoJZXhlICJkb2F1IEJ1ZlJlYWRQcmUgIi5leHBhbmQoIjxhZmlsZT4iKXxleGUgJ2UgLycuc3Vic3RpdHV0ZShleHBhbmQoIjxhZmlsZT4iKSwiZmlsZTovKiIsIiIsIiIpfGV4ZSAiZG9hdSBCdWZSZWFkUG9zdCAiLmV4cGFuZCgiPGFmaWxlPiIpCisgIGVuZGlmCisgIGF1IEJ1ZlJlYWRDbWQgIGZ0cDovLyoscmNwOi8vKixzY3A6Ly8qLGh0dHA6Ly8qLGRhdjovLyoscnN5bmM6Ly8qLHNmdHA6Ly8qCWV4ZSAiZG9hdSBCdWZSZWFkUHJlICIuZXhwYW5kKCI8YWZpbGU+Iil8ZXhlICJOcmVhZCAwciAiLmV4cGFuZCgiPGFmaWxlPiIpfGV4ZSAiZG9hdSBCdWZSZWFkUG9zdCAiLmV4cGFuZCgiPGFmaWxlPiIpCisgIGF1IEZpbGVSZWFkQ21kIGZ0cDovLyoscmNwOi8vKixzY3A6Ly8qLGh0dHA6Ly8qLGRhdjovLyoscnN5bmM6Ly8qLHNmdHA6Ly8qCWV4ZSAiZG9hdSBCdWZSZWFkUHJlICIuZXhwYW5kKCI8YWZpbGU+Iil8ZXhlICJOcmVhZCAiICAgLmV4cGFuZCgiPGFmaWxlPiIpfGV4ZSAiZG9hdSBCdWZSZWFkUG9zdCAiLmV4cGFuZCgiPGFmaWxlPiIpCisgIGF1IEJ1ZldyaXRlQ21kIGZ0cDovLyoscmNwOi8vKixzY3A6Ly8qLGRhdjovLyoscnN5bmM6Ly8qLHNmdHA6Ly8qCQlleGUgIk53cml0ZSAiICAuZXhwYW5kKCI8YWZpbGU+Iil8Y2FsbCA8U0lEPk5ldFJlc3RvcmVQb3NuKCkKKyBhdWdyb3VwIEVORAorZW5kaWYKKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgQ29tbWFuZHM6IDpOcmVhZCwgOk53cml0ZSwgYW5kIDpOZXRVc2VyUGFzcyB7e3sxCitjb20hIC1uYXJncz0qCQlOcmVhZAkJY2FsbCA8U0lEPk5ldFNhdmVQb3NuKCk8YmFyPmNhbGwgPFNJRD5OZXRSZWFkKDxmLWFyZ3M+KTxiYXI+Y2FsbCA8U0lEPk5ldFJlc3RvcmVQb3NuKCkKK2NvbSEgLXJhbmdlPSUgLW5hcmdzPSoJTndyaXRlCQljYWxsIDxTSUQ+TmV0U2F2ZVBvc24oKTxiYXI+PGxpbmUxPiw8bGluZTI+Y2FsbCA8U0lEPk5ldFdyaXRlKDxmLWFyZ3M+KTxiYXI+Y2FsbCA8U0lEPk5ldFJlc3RvcmVQb3NuKCkKK2NvbSEgLW5hcmdzPSoJCU5ldFVzZXJQYXNzCWNhbGwgTmV0VXNlclBhc3MoPGYtYXJncz4pCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIE5ldFNhdmVQb3NuOiBzYXZlcyBwb3NpdGlvbiBvZiBjdXJzb3Igb24gc2NyZWVuIHt7ezEKK2Z1biEgczpOZXRTYXZlUG9zbigpCisiICBjYWxsIERmdW5jKCJOZXRTYXZlUG9zbigpIikKKyAgIiBTYXZlIGN1cnJlbnQgbGluZSBhbmQgY29sdW1uCisgIGxldCBzOm5ldHJ3X3dpbm5yPSB3aW5ucigpCisgIGxldCBzOm5ldHJ3X2xpbmUgPSBsaW5lKCIuIikKKyAgbGV0IHM6bmV0cndfY29sICA9IHZpcnRjb2woIi4iKQorCisgICIgU2F2ZSB0b3Atb2Ytc2NyZWVuIGxpbmUKKyAgbm9ybSEgSDAKKyAgbGV0IHM6bmV0cndfaGxpbmU9IGxpbmUoIi4iKQorCisgIGNhbGwgczpOZXRSZXN0b3JlUG9zbigpCisiICBjYWxsIERyZXQoIk5ldFNhdmVQb3NuIDogd2lubnI9Ii5zOm5ldHJ3X3dpbm5yLiIgbGluZT0iLnM6bmV0cndfbGluZS4iIGNvbD0iLnM6bmV0cndfY29sLiIgaGxpbmU9Ii5zOm5ldHJ3X2hsaW5lKQorZW5kZnVuCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIE5ldFJlc3RvcmVQb3NuOiByZXN0b3JlcyB0aGUgY3Vyc29yIGFuZCBmaWxlIHBvc2l0aW9uIGFzIHNhdmVkIGJ5IE5ldFNhdmVQb3NuKCkge3t7MQorZnVuISA8U0lEPk5ldFJlc3RvcmVQb3NuKCkKKyIgIGNhbGwgRGZ1bmMoIk5ldFJlc3RvcmVQb3NuKCkgd2lubnI9Ii5zOm5ldHJ3X3dpbm5yLiIgbGluZT0iLnM6bmV0cndfbGluZS4iIGNvbD0iLnM6bmV0cndfY29sLiIgaGxpbmU9Ii5zOm5ldHJ3X2hsaW5lKQorCisgIGV4ZSAic2lsZW50ISAiLnM6bmV0cndfd2lubnIuIndpbmNtZCB3IgorICBpZiB2OnNoZWxsX2Vycm9yID09IDAKKyAgICIgYXMgc3VnZ2VzdGVkIGJ5IEJyYW0gTTogcmVkcmF3IG9uIG5vIGVycm9yCisgICAiIGFsbG93cyBwcm90b2NvbCBlcnJvciBtZXNzYWdlcyB0byByZW1haW4gdmlzaWJsZQorICAgcmVkcmF3IQorICBlbmRpZgorICAiIHJlc3RvcmUgdG9wLW9mLXNjcmVlbiBsaW5lCisgIGV4ZSAibm9ybSEgIi5zOm5ldHJ3X2hsaW5lLiJHMHpcPENSPiIKKyAgIiByZXN0b3JlIHBvc2l0aW9uCisgIGV4ZSAibm9ybSEgIi5zOm5ldHJ3X2xpbmUuIkcwIi5zOm5ldHJ3X2NvbC4iXDxiYXI+IgorCisiICBjYWxsIERyZXQoIk5ldFJlc3RvcmVQb3NuIikKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBOZXRSZWFkOiByZXNwb25zaWJsZSBmb3IgcmVhZGluZyBhIGZpbGUgb3ZlciB0aGUgbmV0IHt7ezEKK2Z1biEgczpOZXRSZWFkKC4uLikKKyIgY2FsbCBEZnVuYygiTmV0UmVhZChhOjE8Ii5hOjEuIj4pIikKKworICIgc2F2ZSBvcHRpb25zCisgY2FsbCBzOk5ldE9wdGlvblNhdmUoKQorCisgIiBnZXQgbmFtZSBvZiBhIHRlbXBvcmFyeSBmaWxlCisgbGV0IHRtcGZpbGU9IHRlbXBuYW1lKCkKKworICIgU3BlY2lhbCBFeGNlcHRpb246IGlmIGEgZmlsZSBpcyBuYW1lZCAiMHIiLCB0aGVuCisgIgkJICAgICAgIjByIiB3aWxsIGJlIHVzZWQgdG8gcmVhZCB0aGUKKyAiCQkgICAgICBmb2xsb3dpbmcgZmlsZXMgaW5zdGVhZCBvZiAiciIKKyBpZglhOjAgPT0gMAorICBsZXQgcmVhZGNtZD0gInIiCisgIGxldCBpY2hvaWNlPSAwCisgZWxzZWlmIGE6MSA9PSAiMHIiCisgIGxldCByZWFkY21kID0gIjByIgorICBsZXQgaWNob2ljZSA9IDIKKyBlbHNlCisgIGxldCByZWFkY21kID0gInIiCisgIGxldCBpY2hvaWNlID0gMQorIGVuZGlmCisKKyB3aGlsZSBpY2hvaWNlIDw9IGE6MAorCisgICIgYXR0ZW1wdCB0byByZXBlYXQgd2l0aCBwcmV2aW91cyBob3N0LWZpbGUtZXRjCisgIGlmIGV4aXN0cygiYjpuZXRyd19sYXN0ZmlsZSIpICYmIGE6MCA9PSAwCisiICAgY2FsbCBEZWNobygidXNpbmcgYjpuZXRyd19sYXN0ZmlsZTwiIC4gYjpuZXRyd19sYXN0ZmlsZSAuICI+IikKKyAgIGxldCBjaG9pY2UgPSBiOm5ldHJ3X2xhc3RmaWxlCisgICBsZXQgaWNob2ljZT0gaWNob2ljZSArIDEKKworICBlbHNlCisgICBleGUgImxldCBjaG9pY2U9IGE6IiAuIGljaG9pY2UKKyIgICBjYWxsIERlY2hvKCJOZXRSZWFkMTogY2hvaWNlPCIgLiBjaG9pY2UgLiAiPiIpCisKKyAgICIgUmVjb25zdHJ1Y3QgQ2hvaWNlIGlmIGNob2ljZSBzdGFydHMgd2l0aCAnIicKKyAgIGlmIG1hdGNoKGNob2ljZSwiPyIpID09IDAKKyAgICBlY2hvICdOZXRSZWFkIFVzYWdlOicKKyAgICBlY2hvICc6TnJlYWQgbWFjaGluZTpwYXRoICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgcmNwJworICAgIGVjaG8gJzpOcmVhZCAibWFjaGluZSBwYXRoIiAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBmdHAgICB3aXRoIDwubmV0cmM+JworICAgIGVjaG8gJzpOcmVhZCAibWFjaGluZSBpZCBwYXNzd29yZCBwYXRoIiAgICAgICAgICAgdXNlcyBmdHAnCisgICAgZWNobyAnOk5yZWFkIGRhdjovL21hY2hpbmVbOnBvcnRdL3BhdGggICAgICAgICAgICB1c2VzIGNhZGF2ZXInCisgICAgZWNobyAnOk5yZWFkIGZldGNoOi8vbWFjaGluZS9wYXRoICAgICAgICAgICAgICAgICB1c2VzIGZldGNoJworICAgIGVjaG8gJzpOcmVhZCBmdHA6Ly9bdXNlckBdbWFjaGluZVs6cG9ydF0vcGF0aCAgICAgdXNlcyBmdHAgICBhdXRvZGV0ZWN0cyA8Lm5ldHJjPicKKyAgICBlY2hvICc6TnJlYWQgaHR0cDovL1t1c2VyQF1tYWNoaW5lL3BhdGggICAgICAgICAgIHVzZXMgaHR0cCAgd2dldCcKKyAgICBlY2hvICc6TnJlYWQgcmNwOi8vW3VzZXJAXW1hY2hpbmUvcGF0aCAgICAgICAgICAgIHVzZXMgcmNwJworICAgIGVjaG8gJzpOcmVhZCByc3luYzovL21hY2hpbmVbOnBvcnRdL3BhdGggICAgICAgICAgdXNlcyByc3luYycKKyAgICBlY2hvICc6TnJlYWQgc2NwOi8vW3VzZXJAXW1hY2hpbmVbWzojXXBvcnRdL3BhdGggIHVzZXMgc2NwJworICAgIGVjaG8gJzpOcmVhZCBzZnRwOi8vW3VzZXJAXW1hY2hpbmVbWzojXXBvcnRdL3BhdGggdXNlcyBzZnRwJworICAgIGJyZWFrCisgICBlbHNlaWYgbWF0Y2goY2hvaWNlLCJeXCIiKSAhPSAtMQorIiAgICBjYWxsIERlY2hvKCJyZWNvbnN0cnVjdGluZyBjaG9pY2UiKQorICAgIGlmIG1hdGNoKGNob2ljZSwiXCIkIikgIT0gLTEKKyAgICAgIiBjYXNlICIuLi4iCisgICAgIGxldCBjaG9pY2U9c3RycGFydChjaG9pY2UsMSxzdHJsZW4oY2hvaWNlKS0yKQorICAgIGVsc2UKKyAgICAgICIgIGNhc2UgIi4uLiAuLi4gLi4uIgorICAgICBsZXQgY2hvaWNlICAgICAgPSBzdHJwYXJ0KGNob2ljZSwxLHN0cmxlbihjaG9pY2UpLTEpCisgICAgIGxldCB3aG9sZWNob2ljZSA9ICIiCisKKyAgICAgd2hpbGUgbWF0Y2goY2hvaWNlLCJcIiQiKSA9PSAtMQorICAgICAgbGV0IHdob2xlY2hvaWNlID0gd2hvbGVjaG9pY2UgLiAiICIgLiBjaG9pY2UKKyAgICAgIGxldCBpY2hvaWNlICAgICA9IGljaG9pY2UgKyAxCisgICAgICBpZiBpY2hvaWNlID4gYTowCisgICAgICAgZWNob2VyciAiVW5iYWxhbmNlZCBzdHJpbmcgaW4gZmlsZW5hbWUgJyIuIHdob2xlY2hvaWNlIC4iJyIKKyIgICAgICAgY2FsbCBEcmV0KCJOZXRSZWFkIikKKyAgICAgICByZXR1cm4KKyAgICAgIGVuZGlmCisgICAgICBsZXQgY2hvaWNlPSBhOntpY2hvaWNlfQorICAgICBlbmR3aGlsZQorICAgICBsZXQgY2hvaWNlPSBzdHJwYXJ0KHdob2xlY2hvaWNlLDEsc3RybGVuKHdob2xlY2hvaWNlKS0xKSAuICIgIiAuIHN0cnBhcnQoY2hvaWNlLDAsc3RybGVuKGNob2ljZSktMSkKKyAgICBlbmRpZgorICAgZW5kaWYKKyAgZW5kaWYKKyIgIGNhbGwgRGVjaG8oIk5ldFJlYWQyOiBjaG9pY2U8IiAuIGNob2ljZSAuICI+IikKKyAgbGV0IGljaG9pY2U9IGljaG9pY2UgKyAxCisKKyAgIiBmaXggdXAgd2luZG93cyB1cmxzCisgIGlmIGhhcygid2luMzIiKQorICAgbGV0IGNob2ljZSA9IHN1YnN0aXR1dGUoY2hvaWNlLCdcXCcsJy8nLCdnZScpCisiICAgY2FsbCBEZWNobygiZml4aW5nIHVwIHdpbmRvd3MgdXJsIHRvIDwiLmNob2ljZS4iPiIpCisgICBleGUgJ2xjZCAnIC4gZm5hbWVtb2RpZnkodG1wZmlsZSwnOmgnKQorICAgbGV0IHRtcGZpbGUgPSBmbmFtZW1vZGlmeSh0bXBmaWxlLCc6dCcpCisgIGVuZGlmCisKKyAgIiBEZXRlcm1pbmUgbWV0aG9kIG9mIHJlYWQgKGZ0cCwgcmNwLCBldGMpCisgIGNhbGwgczpOZXRNZXRob2QoY2hvaWNlKQorCisgICIgPT09PT09PT09PT09CisgICIgUGVyZm9ybSBSZWFkCisgICIgPT09PT09PT09PT09CisKKyAgIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICIgcmNwOiAgTWV0aG9kICMxCisgIGlmICBiOm5ldHJ3X21ldGhvZCA9PSAxICIgcmVhZCB3aXRoIHJjcAorIiAgIGNhbGwgRGVjaG8oInJlYWQgdmlhIHJjcCAobWV0aG9kICMxKSIpCisgICIgRVI6IG5vdGluZyBkb25lIHdpdGggZzpuZXRyd191aWQgeWV0PworICAiIEVSOiBvbiBXaW4ySyIgcmNwIG1hY2hpbmVbLnVzZXJdOmZpbGUgdG1wZmlsZQorICAiIEVSOiBpZiBtYWNoaW5lIGNvbnRhaW5zICcuJyBhZGRpbmcgLnVzZXIgaXMgcmVxdWlyZWQgKHVzZSAkVVNFUk5BTUUpCisgICIgRVI6IHRoZSB0bXBmaWxlIGlzIGZ1bGwgcGF0aDogcmNwIHNlZXMgQzpcLi4uIGFzIGhvc3QgQworICBpZiBzOm5ldHJ3X2hhc19udF9yY3AgPT0gMQorICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3VpZCIpICYmCSggZzpuZXRyd191aWQgIT0gIiIgKQorICAgIGxldCB1aWRfbWFjaGluZSA9IGc6bmV0cndfbWFjaGluZSAuJy4nLiBnOm5ldHJ3X3VpZAorICAgZWxzZQorICAgICIgQW55IHdheSBuZWVkZWQgaXQgbWFjaGluZSBjb250YWlucyBhICcuJworICAgIGxldCB1aWRfbWFjaGluZSA9IGc6bmV0cndfbWFjaGluZSAuJy4nLiAkVVNFUk5BTUUKKyAgIGVuZGlmCisgIGVsc2UKKyAgIGlmIGV4aXN0cygiZzpuZXRyd191aWQiKSAmJgkoIGc6bmV0cndfdWlkICE9ICIiICkKKyAgICBsZXQgdWlkX21hY2hpbmUgPSBnOm5ldHJ3X3VpZCAuJ0AnLiBnOm5ldHJ3X21hY2hpbmUKKyAgIGVsc2UKKyAgICBsZXQgdWlkX21hY2hpbmUgPSBnOm5ldHJ3X21hY2hpbmUKKyAgIGVuZGlmCisgIGVuZGlmCisiICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfcmNwX2NtZC4iICIuczpuZXRyd19yY3Btb2RlLiIgIi51aWRfbWFjaGluZS4iOiIuZXNjYXBlKGI6bmV0cndfZm5hbWUsJyA/JicpLiIgIi50bXBmaWxlKQorICBleGUgIiEiLmc6bmV0cndfcmNwX2NtZC4iICIuczpuZXRyd19yY3Btb2RlLiIgIi51aWRfbWFjaGluZS4iOiIuZXNjYXBlKGI6bmV0cndfZm5hbWUsJyA/JicpLiIgIi50bXBmaWxlCisgIGxldCByZXN1bHQJCT0gczpOZXRHZXRGaWxlKHJlYWRjbWQsIHRtcGZpbGUsIGI6bmV0cndfbWV0aG9kKQorICBsZXQgYjpuZXRyd19sYXN0ZmlsZSA9IGNob2ljZQorCisgICIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAiIGZ0cCArIDwubmV0cmM+OiAgTWV0aG9kICMyCisgIGVsc2VpZiBiOm5ldHJ3X21ldGhvZCAgPT0gMgkJIiByZWFkIHdpdGggZnRwICsgPC5uZXRyYz4KKyIgICBjYWxsIERlY2hvKCJyZWFkIHZpYSBmdHArLm5ldHJjIChtZXRob2QgIzIpIikKKyAgICBsZXQgbmV0cndfZm5hbWU9IGI6bmV0cndfZm5hbWUKKyAgICBuZXcKKyAgICBzZXQgZmY9dW5peAorICAgIGV4ZSAicHV0ID0nIi5nOm5ldHJ3X2Z0cG1vZGUuIiciCisgICAgZXhlICJwdXQgPSdnZXQgIi5uZXRyd19mbmFtZS4iICIudG1wZmlsZS4iJyIKKyAgICBpZiBleGlzdHMoImc6bmV0cndfcG9ydCIpICYmIGc6bmV0cndfcG9ydCAhPSAiIgorIiAgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgIi5nOm5ldHJ3X21hY2hpbmUuIiAiLmc6bmV0cndfcG9ydCkKKyAgICAgZXhlICIlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgIi5nOm5ldHJ3X21hY2hpbmUuIiAiLmc6bmV0cndfcG9ydAorICAgIGVsc2UKKyIgICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLmc6bmV0cndfZnRwX2NtZC4iIC1pICIuZzpuZXRyd19tYWNoaW5lKQorICAgICBleGUgIiUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLmc6bmV0cndfbWFjaGluZQorICAgIGVuZGlmCisgICAgIiBJZiB0aGUgcmVzdWx0IG9mIHRoZSBmdHAgb3BlcmF0aW9uIGlzbid0IGJsYW5rLCBzaG93IGFuIGVycm9yIG1lc3NhZ2UgKHRueCB0byBEb3VnIENsYWFyKQorICAgIGlmIGdldGxpbmUoMSkgIX4gIl4kIgorICAgICBlY2hvZXJyIGdldGxpbmUoMSkKKyAgICBlbmRpZgorICAgIGJkIQorICAgIGxldCByZXN1bHQgPSBzOk5ldEdldEZpbGUocmVhZGNtZCwgdG1wZmlsZSwgYjpuZXRyd19tZXRob2QpCisgICAgbGV0IGI6bmV0cndfbGFzdGZpbGUgPSBjaG9pY2UKKworICAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgIiBmdHAgKyBtYWNoaW5lLGlkLHBhc3N3ZCxmaWxlbmFtZTogIE1ldGhvZCAjMworICBlbHNlaWYgYjpuZXRyd19tZXRob2QgPT0gMwkJIiByZWFkIHdpdGggZnRwICsgbWFjaGluZSwgaWQsIHBhc3N3ZCwgYW5kIGZuYW1lCisgICAiIENvbnN0cnVjdCBleGVjdXRpb24gc3RyaW5nIChmb3VyIGxpbmVzKSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIGZpbHRlcgorIiAgY2FsbCBEZWNobygicmVhZCB2aWEgZnRwK21pcGYgKG1ldGhvZCAjMykiKQorICAgbGV0IG5ldHJ3X2ZuYW1lPSBiOm5ldHJ3X2ZuYW1lCisgICBuZXcKKyAgIHNldCBmZj11bml4CisgICBpZiBleGlzdHMoImc6bmV0cndfcG9ydCIpICYmIGc6bmV0cndfcG9ydCAhPSAiIgorICAgIHB1dCA9J29wZW4gJy5nOm5ldHJ3X21hY2hpbmUuJyAnLmc6bmV0cndfcG9ydAorICAgZWxzZQorICAgIHB1dCA9J29wZW4gJy5nOm5ldHJ3X21hY2hpbmUKKyAgIGVuZGlmCisKKyAgIGlmIGV4aXN0cygiZzpuZXRyd19mdHAiKSAmJiBnOm5ldHJ3X2Z0cCA9PSAxCisgICAgcHV0ID1nOm5ldHJ3X3VpZAorICAgIHB1dCA9ZzpuZXRyd19wYXNzd2QKKyAgIGVsc2UKKyAgICBwdXQgPSd1c2VyICcuZzpuZXRyd191aWQuJyAnLmc6bmV0cndfcGFzc3dkCisgICBlbmRpZgorCisgICBpZiBleGlzdHMoImc6bmV0cndfZnRwbW9kZSIpICYmIGc6bmV0cndfZnRwbW9kZSAhPSAiIgorICAgIHB1dCA9ZzpuZXRyd19mdHBtb2RlCisgICBlbmRpZgorICAgcHV0ID0nZ2V0ICcubmV0cndfZm5hbWUuJyAnLnRtcGZpbGUKKworICAgIiBwZXJmb3JtIGZ0cDoKKyAgICIgLWkgICAgICAgOiB0dXJucyBvZmYgaW50ZXJhY3RpdmUgcHJvbXB0aW5nIGZyb20gZnRwCisgICAiIC1uICB1bml4IDogRE9OJ1QgdXNlIDwubmV0cmM+LCBldmVuIHRob3VnaCBpdCBleGlzdHMKKyAgICIgLW4gIHdpbjMyOiBxdWl0IGJlaW5nIG9ibm94aW91cyBhYm91dCBwYXNzd29yZAorIiAgIGNhbGwgRGVjaG8oJ3BlcmZvcm1pbmcgZnRwIC1pIC1uJykKKyAgIG5vcm0gMUdkZAorIiAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLmc6bmV0cndfZnRwX2NtZC4iIC1pIC1uIikKKyAgIGV4ZSAiJSEiLmc6bmV0cndfZnRwX2NtZC4iIC1pIC1uIgorICAgIiBJZiB0aGUgcmVzdWx0IG9mIHRoZSBmdHAgb3BlcmF0aW9uIGlzbid0IGJsYW5rLCBzaG93IGFuIGVycm9yIG1lc3NhZ2UgKHRueCB0byBEb3VnIENsYWFyKQorICAgaWYgZ2V0bGluZSgxKSAhfiAiXiQiCisgICAgZWNob2VyciBnZXRsaW5lKDEpCisgICBlbmRpZgorICAgYmQhCisgICBsZXQgcmVzdWx0CQk9IHM6TmV0R2V0RmlsZShyZWFkY21kLCB0bXBmaWxlLCBiOm5ldHJ3X21ldGhvZCkKKyAgIGxldCBiOm5ldHJ3X2xhc3RmaWxlID0gY2hvaWNlCisKKyAgIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICIgc2NwOiBNZXRob2QgIzQKKyAgZWxzZWlmICAgICBiOm5ldHJ3X21ldGhvZCAgPT0gNAkiIHJlYWQgd2l0aCBzY3AKKyIgICBjYWxsIERlY2hvKCJyZWFkIHZpYSBzY3AgKG1ldGhvZCAjNCkiKQorICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3BvcnQiKSAmJiBnOm5ldHJ3X3BvcnQgIT0gIiIKKyAgICBsZXQgdXNlcG9ydD0gIiAtUCAiLmc6bmV0cndfcG9ydAorICAgZWxzZQorICAgIGxldCB1c2Vwb3J0PSAiIgorICAgZW5kaWYKKyAgIGlmIGc6bmV0cndfY3lnd2luID09IDEKKyAgICBsZXQgY3lndG1wZmlsZT1zdWJzdGl0dXRlKHRtcGZpbGUsJ15cKFxhXCk6JywnL2N5Z2RyaXZlL1wxLycsJ2UnKQorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfc2NwX2NtZC51c2Vwb3J0LiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKS4iICIuY3lndG1wZmlsZSkKKyAgICBleGUgIiEiLmc6bmV0cndfc2NwX2NtZC51c2Vwb3J0LiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKS4iICIuY3lndG1wZmlsZQorICAgZWxzZQorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfc2NwX2NtZC51c2Vwb3J0LiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKS4iICIudG1wZmlsZSkKKyAgICBleGUgIiEiLmc6bmV0cndfc2NwX2NtZC51c2Vwb3J0LiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKS4iICIudG1wZmlsZQorICAgZW5kaWYKKyAgIGxldCByZXN1bHQJCT0gczpOZXRHZXRGaWxlKHJlYWRjbWQsIHRtcGZpbGUsIGI6bmV0cndfbWV0aG9kKQorICAgbGV0IGI6bmV0cndfbGFzdGZpbGUgPSBjaG9pY2UKKworICAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgZWxzZWlmICAgICBiOm5ldHJ3X21ldGhvZCAgPT0gNQkiIHJlYWQgd2l0aCBodHRwICh3Z2V0KQorIiAgIGNhbGwgRGVjaG8oInJlYWQgdmlhIGh0dHAgKG1ldGhvZCAjNSkiKQorICAgaWYgZzpuZXRyd19odHRwX2NtZCA9PSAiIgorICAgIGVjaG9lcnIgIm5laXRoZXIgd2dldCBub3IgZmV0Y2ggY29tbWFuZCBpcyBhdmFpbGFibGUiCisgICAgZXhpdAorICAgZW5kaWYKKworICAgaWYgbWF0Y2goYjpuZXRyd19mbmFtZSwiIyIpID09IC0xCisgICAgIiBzaW1wbGUgd2dldAorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfaHR0cF9jbWQuIiAiLnRtcGZpbGUuIiBodHRwOi8vIi5nOm5ldHJ3X21hY2hpbmUuZXNjYXBlKGI6bmV0cndfZm5hbWUsJyA/JicpKQorICAgIGV4ZSAiISIuZzpuZXRyd19odHRwX2NtZC4iICIudG1wZmlsZS4iIGh0dHA6Ly8iLmc6bmV0cndfbWFjaGluZS5lc2NhcGUoYjpuZXRyd19mbmFtZSwnID8mJykKKyAgICBsZXQgcmVzdWx0ID0gczpOZXRHZXRGaWxlKHJlYWRjbWQsIHRtcGZpbGUsIGI6bmV0cndfbWV0aG9kKQorCisgICBlbHNlCisgICAgIiB3Z2V0IHBsdXMgYSBqdW1wIHRvIGFuIGluLXBhZ2UgbWFya2VyIChpZS4gaHR0cDovL2FiYy9kZWYuaHRtbCNhTWFya2VyKQorICAgIGxldCBuZXRyd19odG1sPSBzdWJzdGl0dXRlKGI6bmV0cndfZm5hbWUsIiMuKiQiLCIiLCIiKQorICAgIGxldCBuZXRyd190YWcgPSBzdWJzdGl0dXRlKGI6bmV0cndfZm5hbWUsIl4uKiMiLCIiLCIiKQorIgljYWxsIERlY2hvKCJuZXRyd19odG1sPCIubmV0cndfaHRtbC4iPiIpCisiCWNhbGwgRGVjaG8oIm5ldHJ3X3RhZyA8Ii5uZXRyd190YWcuIj4iKQorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfaHR0cF9jbWQuIiAiLnRtcGZpbGUuIiBodHRwOi8vIi5nOm5ldHJ3X21hY2hpbmUubmV0cndfaHRtbCkKKyAgICBleGUgIiEiLmc6bmV0cndfaHR0cF9jbWQuIiAiLnRtcGZpbGUuIiBodHRwOi8vIi5nOm5ldHJ3X21hY2hpbmUubmV0cndfaHRtbAorICAgIGxldCByZXN1bHQgPSBzOk5ldEdldEZpbGUocmVhZGNtZCwgdG1wZmlsZSwgYjpuZXRyd19tZXRob2QpCisiICAgIGNhbGwgRGVjaG8oJzxccyphXHMqbmFtZT1ccyoiJy5uZXRyd190YWcuJyIvJykKKyAgICBleGUgJ25vcm0hIDFHLzxccyphXHMqbmFtZT1ccyoiJy5uZXRyd190YWcuJyIvJy4iXDxDUj4iCisgICBlbmRpZgorICAgbGV0IGI6bmV0cndfbGFzdGZpbGUgPSBjaG9pY2UKKworICAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgIiBjYWRhdmVyOiBNZXRob2QgIzYKKyAgZWxzZWlmICAgICBiOm5ldHJ3X21ldGhvZCAgPT0gNgkiIHJlYWQgd2l0aCBjYWRhdmVyCisiICAgY2FsbCBEZWNobygicmVhZCB2aWEgY2FkYXZlciAobWV0aG9kICM2KSIpCisKKyAgICIgQ29uc3RydWN0IGV4ZWN1dGlvbiBzdHJpbmcgKGZvdXIgbGluZXMpIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggZmlsdGVyCisgICBsZXQgbmV0cndfZm5hbWU9IGI6bmV0cndfZm5hbWUKKyAgIG5ldworICAgc2V0IGZmPXVuaXgKKyAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCisgICAgcHV0ID0nb3BlbiAnLmc6bmV0cndfbWFjaGluZS4nICcuZzpuZXRyd19wb3J0CisgICBlbHNlCisgICAgcHV0ID0nb3BlbiAnLmc6bmV0cndfbWFjaGluZQorICAgZW5kaWYKKyAgIHB1dCA9J3VzZXIgJy5nOm5ldHJ3X3VpZC4nICcuZzpuZXRyd19wYXNzd2QKKworICAgaWYgZzpuZXRyd19jeWd3aW4gPT0gMQorICAgIGxldCBjeWd0bXBmaWxlPXN1YnN0aXR1dGUodG1wZmlsZSwnXlwoXGFcKTonLCcvY3lnZHJpdmUvXDEvJywnZScpCisgICAgcHV0ID0nZ2V0ICcubmV0cndfZm5hbWUuJyAnLmN5Z3RtcGZpbGUKKyAgIGVsc2UKKyAgICBwdXQgPSdnZXQgJy5uZXRyd19mbmFtZS4nICcudG1wZmlsZQorICAgZW5kaWYKKworICAgIiBwZXJmb3JtIGNhZGF2ZXIgb3BlcmF0aW9uOgorICAgbm9ybSAxR2RkCisiICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuZzpuZXRyd19kYXZfY21kKQorICAgZXhlICIlISIuZzpuZXRyd19kYXZfY21kCisgICBiZCEKKyAgIGxldCByZXN1bHQJCT0gczpOZXRHZXRGaWxlKHJlYWRjbWQsIHRtcGZpbGUsIGI6bmV0cndfbWV0aG9kKQorICAgbGV0IGI6bmV0cndfbGFzdGZpbGUgPSBjaG9pY2UKKworICAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgIiByc3luYzogTWV0aG9kICM3CisgIGVsc2VpZiAgICAgYjpuZXRyd19tZXRob2QgID09IDcJIiByZWFkIHdpdGggcnN5bmMKKyIgICBjYWxsIERlY2hvKCJyZWFkIHZpYSByc3luYyAobWV0aG9kICM3KSIpCisgICBpZiBnOm5ldHJ3X2N5Z3dpbiA9PSAxCisgICAgbGV0IGN5Z3RtcGZpbGU9c3Vic3RpdHV0ZSh0bXBmaWxlLCdeXChcYVwpOicsJy9jeWdkcml2ZS9cMS8nLCdlJykKKyIgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAhIi5nOm5ldHJ3X3JzeW5jX2NtZC4iICIuZzpuZXRyd19tYWNoaW5lLiI6Ii5lc2NhcGUoYjpuZXRyd19mbmFtZSwnID8mJykuIiAiLmN5Z3RtcGZpbGUpCisgICAgZXhlICIhIi5nOm5ldHJ3X3JzeW5jX2NtZC4iICIuZzpuZXRyd19tYWNoaW5lLiI6Ii5lc2NhcGUoYjpuZXRyd19mbmFtZSwnID8mJykuIiAiLmN5Z3RtcGZpbGUKKyAgIGVsc2UKKyIgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAhIi5nOm5ldHJ3X3JzeW5jX2NtZC4iICIuZzpuZXRyd19tYWNoaW5lLiI6Ii5lc2NhcGUoYjpuZXRyd19mbmFtZSwnID8mJykuIiAiLnRtcGZpbGUpCisgICAgZXhlICIhIi5nOm5ldHJ3X3JzeW5jX2NtZC4iICIuZzpuZXRyd19tYWNoaW5lLiI6Ii5lc2NhcGUoYjpuZXRyd19mbmFtZSwnID8mJykuIiAiLnRtcGZpbGUKKyAgIGVuZGlmCisgICBsZXQgcmVzdWx0CQk9IHM6TmV0R2V0RmlsZShyZWFkY21kLHRtcGZpbGUsIGI6bmV0cndfbWV0aG9kKQorICAgbGV0IGI6bmV0cndfbGFzdGZpbGUgPSBjaG9pY2UKKworICAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgIiBmZXRjaDogTWV0aG9kICM4CisgICIgICAgZmV0Y2g6Ly9bdXNlckBdaG9zdFs6aHR0cF0vcGF0aAorICBlbHNlaWYgICAgIGI6bmV0cndfbWV0aG9kICA9PSA4CSIgcmVhZCB3aXRoIGZldGNoCisgICBpZiBnOm5ldHJ3X2ZldGNoX2NtZCA9PSAiIgorICAgIGVjaG9lcnIgImZldGNoIGNvbW1hbmQgbm90IGF2YWlsYWJsZSIKKyAgICBleGl0CisgICBlbmRpZgorICAgaWYgZXhpc3RzKCJnOm5ldHJ3X29wdGlvbiIpICYmIGc6bmV0cndfb3B0aW9uID09ICI6aHR0cCIKKyAgICBsZXQgbmV0cndfb3B0aW9uPSAiaHR0cCIKKyAgIGVsc2UKKyAgICBsZXQgbmV0cndfb3B0aW9uPSAiZnRwIgorICAgZW5kaWYKKyIgICBjYWxsIERlY2hvKCJyZWFkIHZpYSBmZXRjaCBmb3IgIi5uZXRyd19vcHRpb24pCisKKyAgIGlmIGV4aXN0cygiZzpuZXRyd191aWQiKSAmJiBnOm5ldHJ3X3VpZCAhPSAiIiAmJiBleGlzdHMoImc6bmV0cndfcGFzc3dkIikgJiYgZzpuZXRyd19wYXNzd2QgIT0gIiIKKyIgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAhIi5nOm5ldHJ3X2ZldGNoX2NtZC4iICIudG1wZmlsZS4iICIubmV0cndfb3B0aW9uLiI6Ly8iLmc6bmV0cndfdWlkLic6Jy5nOm5ldHJ3X3Bhc3N3ZC4nQCcuZzpuZXRyd19tYWNoaW5lLiIvIi5lc2NhcGUoYjpuZXRyd19mbmFtZSwnID8mJykpCisgICAgZXhlICIhIi5nOm5ldHJ3X2ZldGNoX2NtZC4iICIudG1wZmlsZS4iICIubmV0cndfb3B0aW9uLiI6Ly8iLmc6bmV0cndfdWlkLic6Jy5nOm5ldHJ3X3Bhc3N3ZC4nQCcuZzpuZXRyd19tYWNoaW5lLiIvIi5lc2NhcGUoYjpuZXRyd19mbmFtZSwnID8mJykKKyAgIGVsc2UKKyIgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAhIi5nOm5ldHJ3X2ZldGNoX2NtZC4iICIudG1wZmlsZS4iICIubmV0cndfb3B0aW9uLiI6Ly8iLmc6bmV0cndfbWFjaGluZS4iLyIuZXNjYXBlKGI6bmV0cndfZm5hbWUsJyA/JicpKQorICAgIGV4ZSAiISIuZzpuZXRyd19mZXRjaF9jbWQuIiAiLnRtcGZpbGUuIiAiLm5ldHJ3X29wdGlvbi4iOi8vIi5nOm5ldHJ3X21hY2hpbmUuIi8iLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKQorICAgZW5kaWYKKworICAgbGV0IHJlc3VsdAkJPSBzOk5ldEdldEZpbGUocmVhZGNtZCx0bXBmaWxlLCBiOm5ldHJ3X21ldGhvZCkKKyAgIGxldCBiOm5ldHJ3X2xhc3RmaWxlID0gY2hvaWNlCisKKyAgIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICIgc2Z0cDogTWV0aG9kICM5CisgIGVsc2VpZiAgICAgYjpuZXRyd19tZXRob2QgID09IDkJIiByZWFkIHdpdGggc2Z0cAorIiAgIGNhbGwgRGVjaG8oInJlYWQgdmlhIHNmdHAgKG1ldGhvZCAjNCkiKQorICAgaWYgZzpuZXRyd19jeWd3aW4gPT0gMQorICAgIGxldCBjeWd0bXBmaWxlPXN1YnN0aXR1dGUodG1wZmlsZSwnXlwoXGFcKTonLCcvY3lnZHJpdmUvXDEvJywnZScpCisiICAgIGNhbGwgRGVjaG8oIiEiLmc6bmV0cndfc2Z0cF9jbWQuIiAiLmc6bmV0cndfbWFjaGluZS4iOiIuZXNjYXBlKGI6bmV0cndfZm5hbWUsJyA/JicpLiIgIi5jeWd0bXBmaWxlKQorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfc2Z0cF9jbWQuIiAiLmc6bmV0cndfbWFjaGluZS4iOiIuZXNjYXBlKGI6bmV0cndfZm5hbWUsJyA/JicpLiIgIi5jeWd0bXBmaWxlKQorICAgIGV4ZSAiISIuZzpuZXRyd19zZnRwX2NtZC4iICIuZzpuZXRyd19tYWNoaW5lLiI6Ii5lc2NhcGUoYjpuZXRyd19mbmFtZSwnID8mJykuIiAiLmN5Z3RtcGZpbGUKKyAgIGVsc2UKKyIgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAhIi5nOm5ldHJ3X3NmdHBfY21kLiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKS4iICIudG1wZmlsZSkKKyAgICBleGUgIiEiLmc6bmV0cndfc2Z0cF9jbWQuIiAiLmc6bmV0cndfbWFjaGluZS4iOiIuZXNjYXBlKGI6bmV0cndfZm5hbWUsJyA/JicpLiIgIi50bXBmaWxlCisgICBlbmRpZgorICAgbGV0IHJlc3VsdAkJPSBzOk5ldEdldEZpbGUocmVhZGNtZCwgdG1wZmlsZSwgYjpuZXRyd19tZXRob2QpCisgICBsZXQgYjpuZXRyd19sYXN0ZmlsZSA9IGNob2ljZQorCisgICIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICBlbHNlICIgQ29tcGxhaW4KKyAgIGVjaG8gIioqKndhcm5pbmcqKiogdW5hYmxlIHRvIGNvbXBseSB3aXRoIHlvdXIgcmVxdWVzdDwiIC4gY2hvaWNlIC4gIj4iCisgIGVuZGlmCisgZW5kd2hpbGUKKworICIgY2xlYW51cAorIiBjYWxsIERlY2hvKCJjbGVhbnVwIikKKyBpZiBleGlzdHMoImI6bmV0cndfbWV0aG9kIikKKyAgdW5sZXQgYjpuZXRyd19tZXRob2QKKyAgdW5sZXQgZzpuZXRyd19tYWNoaW5lCisgIHVubGV0IGI6bmV0cndfZm5hbWUKKyBlbmRpZgorIGNhbGwgczpOZXRPcHRpb25SZXN0b3JlKCkKKworIiBjYWxsIERyZXQoIk5ldFJlYWQiKQorZW5kZnVuCisiIGVuZCBvZiBOZXRSZWFkCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIE5ldEdldEZpbGU6IEZ1bmN0aW9uIHRvIHJlYWQgZmlsZSAiZm5hbWUiIHdpdGggY29tbWFuZCAicmVhZGNtZCIuIHt7ezEKK2Z1biEgczpOZXRHZXRGaWxlKHJlYWRjbWQsIGZuYW1lLCBtZXRob2QpCisiICBjYWxsIERmdW5jKCJOZXRHZXRGaWxlKHJlYWRjbWQ8Ii5hOnJlYWRjbWQuIj4sZm5hbWU8Ii5hOmZuYW1lLiI+IG1ldGhvZDwiLmE6bWV0aG9kLiI+KSIpCisKKyBpZiBleGlzdHMoIipOZXRSZWFkRml4dXAiKQorICAiIGZvciB0aGUgdXNlIG9mIE5ldFJlYWRGaXh1cCAobm90IG90aGVyd2lzZSB1c2VkIGludGVybmFsbHkpCisgIGxldCBsaW5lMj0gbGluZSgiJCIpCisgZW5kaWYKKworICIgdHJhbnNmb3JtIHBhdGhzIGZyb20gLyB0byBcIGZvciBXaW5kb3dzLCB1bmxlc3MgdGhlIHNoZWxsIGlzIGJhc2gKKyBpZiAmdGVybSA9PSAid2luMzIiCisgIGlmICZzaGVsbCA9PSAiYmFzaCIKKyAgIGxldCBmbmFtZT1hOmZuYW1lCisiICBjYWxsIERlY2hvKCIod2luMzIgJiYgYmFzaCkgZm5hbWU8Ii5mbmFtZS4iPiIpCisgIGVsc2UKKyAgIGxldCBmbmFtZT1zdWJzdGl0dXRlKGE6Zm5hbWUsJy8nLCdcXFxcJywnZ2UnKQorIiAgY2FsbCBEZWNobygiKHdpbjMyICYmICFiYXNoKSBmbmFtZTwiLmZuYW1lLiI+IikKKyAgZW5kaWYKKyBlbHNlCisgIGxldCBmbmFtZT0gYTpmbmFtZQorIiAgY2FsbCBEZWNobygiKGNvcGllZCkgZm5hbWU8Ii5mbmFtZS4iPiIpCisgZW5kaWYKKworICIgZ2V0IHRoZSBmaWxlLCBidXQgZGlzYWJsZSB1bmRvIHdoZW4gcmVhZGluZyBhIG5ldyBidWZmZXIKKyBpZiBhOnJlYWRjbWRbMF0gPT0gJzAnCisgIGxldCB1c2VfZV9jbWQgPSAwCQkiIDEgd2hlbiB1c2luZyAnOmVkaXQnCisgIGxldCBkZWxsaW5lICAgPSAwCQkiIDEgd2hlbiBoYXZlIHRvIGRlbGV0ZSBlbXB0eSBsYXN0IGxpbmUKKyAgaWYgbGluZSgiJCIpID09IDEgJiYgZ2V0bGluZSgxKSA9PSAiIgorICAgIiBOb3cgYmVpbmcgYXNrZWQgdG8gMHIgYSBmaWxlIGludG8gYW4gZW1wdHkgZmlsZS4KKyAgICIgU2FmZSB0byA6ZSBpdCBpbnN0ZWFkLCB1bmxlc3MgdGhlcmUgaXMgYW5vdGhlciB3aW5kb3cgb24gdGhlIHNhbWUgYnVmZmVyLgorICAgbGV0IGN1cmJ1Zm5yICA9IGJ1Zm5yKCIlIikKKyAgIGxldCB1c2VfZV9jbWQgPSAxCisgICBsZXQgZGVsbGluZSAgID0gMQorICAgIiBMb29wIG92ZXIgYWxsIHdpbmRvd3MsCisgICAiIHJlc2V0IHVzZV9lX2NtZCB3aGVuIGFub3RoZXIgb25lIGlzIGVkaXRpbmcgdGhlIGN1cnJlbnQgYnVmZmVyLgorICAgbGV0IGkgPSAxCisgICB3aGlsZSAxCisgICAgIGlmIGkgIT0gd2lubnIoKSAmJiB3aW5idWZucihpKSA9PSBjdXJidWZucgorICAgICAgIGxldCB1c2VfZV9jbWQgPSAwCisgICAgICAgYnJlYWsKKyAgICAgZW5kaWYKKyAgICAgbGV0IGkgPSBpICsgMQorICAgICBpZiB3aW5idWZucihpKSA8IDAKKyAgICAgICBicmVhaworICAgICBlbmRpZgorICAgZW5kd2hpbGUKKyAgZW5kaWYKKworICBpZiB1c2VfZV9jbWQgPiAwCisgICAiICc6ZWRpdCcgdGhlIHRlbXAgZmlsZSwgd2lwZSBvdXQgdGhlIG9sZCBidWZmZXIgYW5kIHJlbmFtZSB0aGUgYnVmZmVyCisgICBsZXQgY3VyZmlsZW5hbWUgPSBleHBhbmQoIiUiKQorCisgICBsZXQgYmlubG9jYWwgPSAmbDpiaW4KKyAgIGxldCBiaW5nbG9iYWwgPSAmZzpiaW4KKyAgIGlmIGJpbmxvY2FsCisgICAgIHNldGdsb2JhbCBiaW4JCSIgTmVlZCB0byBzZXQgJ2JpbicgZ2xvYmFsbHkgZm9yICI6ZSIgY29tbWFuZC4KKyAgIGVuZGlmCisgICBzaWxlbnQgZXhlICJlISAiLnY6Y21kYXJnLiIgIi5mbmFtZQorICAgaWYgYmlubG9jYWwgJiYgIWJpbmdsb2JhbAorICAgICBzZXRnbG9iYWwgbm9iaW4KKyAgICAgc2V0bG9jYWwgYmluCisgICBlbmRpZgorCisgICBleGUgY3VyYnVmbnIgLiAiYndpcGUhIgorICAgZXhlICJmICIuY3VyZmlsZW5hbWUKKyAgICIgdGhlICI6ZiBuZXduYW1lIiBhcHBhcmVudGx5IGxlYXZlcyB0aGUgdGVtcG9yYXJ5IGZpbGUgYXMgdGhlIGFsdGVybmF0ZQorICAgIiBmaWxlIGluIHRoZSBidWZmZXIgbGlzdCAoc2VlIDpscyEpLiAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHdpcGVzIGl0IG91dC4KKyAgIGV4ZSBidWZucigiIyIpLiJid2lwZSEiCisgIGVsc2UKKyAgIGxldCBvbGR1bD0gJnVsCisgICBzZXQgdWw9LTEKKyAgIGV4ZSBhOnJlYWRjbWQuIiAiLnY6Y21kYXJnLiIgIi5mbmFtZQorICAgaWYgZGVsbGluZSA+IDAKKyAgICAiIHdpcGUgb3V0IGxhc3QgbGluZSwgd2hpY2ggc2hvdWxkIGJlIGEgYmxhbmsgbGluZSBhbnl3YXkKKyAgICAkZGVsCisgICBlbmRpZgorICAgbGV0ICZ1bD0gb2xkdWwKKyAgZW5kaWYKKyBlbHNlCisgIGV4ZSBhOnJlYWRjbWQuIiAiLnY6Y21kYXJnLiIgIi5mbmFtZQorIGVuZGlmCisKKyAiIFVzZXItcHJvdmlkZWQgKGllLiBvcHRpb25hbCkgZml4LWl0LXVwIGNvbW1hbmQKKyBpZiBleGlzdHMoIipOZXRSZWFkRml4dXAiKQorICBsZXQgbGluZTE9IGxpbmUoIi4iKQorICBpZiBhOnJlYWRjbWQgPT0gInIiCisgICBsZXQgbGluZTI9IGxpbmUoIiQiKSAtIGxpbmUyICsgbGluZTEKKyAgZWxzZQorICAgbGV0IGxpbmUyPSBsaW5lKCIkIikgLSBsaW5lMgorICBlbmRpZgorIiAgY2FsbCBEZWNobygiY2FsbGluZyBOZXRSZWFkRml4dXAobWV0aG9kPCIuYTptZXRob2QuIj4gbGluZTE9Ii5saW5lMS4iIGxpbmUyPSIubGluZTIuIikiKQorICBjYWxsIE5ldFJlYWRGaXh1cChhOm1ldGhvZCwgbGluZTEsIGxpbmUyKQorIGVuZGlmCisiIGNhbGwgRGVjaG8oInJlYWRjbWQ8Ii5hOnJlYWRjbWQuIj4gY21kYXJnPCIudjpjbWRhcmcuIj4gZm5hbWU8Ii5hOmZuYW1lLiI+IHJlYWRhYmxlPSIuZmlsZXJlYWRhYmxlKGE6Zm5hbWUpKQorCisiIGluc3VyZSB0aGF0IHdlIGhhdmUgdGhlIHJpZ2h0IGZpbGV0eXBlIGFuZCB0aGF0IGl0cyBiZWluZyBkaXNwbGF5ZWQKKyBmaWxldHlwZSBkZXRlY3QKKyByZWRyYXchCisiIGNhbGwgRHJldCgiTmV0R2V0RmlsZSIpCitlbmRmdW4KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgTmV0V3JpdGU6IHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGEgZmlsZSBvdmVyIHRoZSBuZXQge3t7MQorZnVuISBzOk5ldFdyaXRlKC4uLikgcmFuZ2UKKyIgY2FsbCBEZnVuYygiTmV0V3JpdGUoYTowPSIuYTowLiIpIikKKworICIgb3B0aW9uIGhhbmRsaW5nCisgbGV0IG1vZD0gMAorIGNhbGwgczpOZXRPcHRpb25TYXZlKCkKKworICIgR2V0IFRlbXBvcmFyeSBGaWxlbmFtZQorIGxldCB0bXBmaWxlPSB0ZW1wbmFtZSgpCisKKyBpZiBhOjAgPT0gMAorICBsZXQgaWNob2ljZSA9IDAKKyBlbHNlCisgIGxldCBpY2hvaWNlID0gMQorIGVuZGlmCisKKyAiIHdyaXRlIChzZWxlY3RlZCBwb3J0aW9uIG9mKSBmaWxlIHRvIHRlbXBvcmFyeQorIHNpbGVudCBleGUgYTpmaXJzdGxpbmUuIiwiIC4gYTpsYXN0bGluZSAuICJ3ISAiLnY6Y21kYXJnLiIgIi50bXBmaWxlCisKKyB3aGlsZSBpY2hvaWNlIDw9IGE6MAorCisgICIgYXR0ZW1wdCB0byByZXBlYXQgd2l0aCBwcmV2aW91cyBob3N0LWZpbGUtZXRjCisgIGlmIGV4aXN0cygiYjpuZXRyd19sYXN0ZmlsZSIpICYmIGE6MCA9PSAwCisiICAgY2FsbCBEZWNobygidXNpbmcgYjpuZXRyd19sYXN0ZmlsZTwiIC4gYjpuZXRyd19sYXN0ZmlsZSAuICI+IikKKyAgIGxldCBjaG9pY2UgPSBiOm5ldHJ3X2xhc3RmaWxlCisgICBsZXQgaWNob2ljZT0gaWNob2ljZSArIDEKKyAgZWxzZQorICAgZXhlICJsZXQgY2hvaWNlPSBhOiIgLiBpY2hvaWNlCisKKyAgICIgUmVjb25zdHJ1Y3QgQ2hvaWNlIGlmIGNob2ljZSBzdGFydHMgd2l0aCAnIicKKyAgIGlmIG1hdGNoKGNob2ljZSwiPyIpID09IDAKKyAgICBlY2hvICdOZXRXcml0ZSBVc2FnZToiJworICAgIGVjaG8gJzpOd3JpdGUgbWFjaGluZTpwYXRoICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyByY3AnCisgICAgZWNobyAnOk53cml0ZSAibWFjaGluZSBwYXRoIiAgICAgICAgICAgICAgICAgICAgICB1c2VzIGZ0cCB3aXRoIDwubmV0cmM+JworICAgIGVjaG8gJzpOd3JpdGUgIm1hY2hpbmUgaWQgcGFzc3dvcmQgcGF0aCIgICAgICAgICAgdXNlcyBmdHAnCisgICAgZWNobyAnOk53cml0ZSBkYXY6Ly9bdXNlckBdbWFjaGluZS9wYXRoICAgICAgICAgICB1c2VzIGNhZGF2ZXInCisgICAgZWNobyAnOk53cml0ZSBmZXRjaDovL1t1c2VyQF1tYWNoaW5lL3BhdGggICAgICAgICB1c2VzIGZldGNoJworICAgIGVjaG8gJzpOd3JpdGUgZnRwOi8vbWFjaGluZVsjcG9ydF0vcGF0aCAgICAgICAgICAgdXNlcyBmdHAgIChhdXRvZGV0ZWN0cyA8Lm5ldHJjPiknCisgICAgZWNobyAnOk53cml0ZSByY3A6Ly9tYWNoaW5lL3BhdGggICAgICAgICAgICAgICAgICB1c2VzIHJjcCcKKyAgICBlY2hvICc6TndyaXRlIHJzeW5jOi8vW3VzZXJAXW1hY2hpbmUvcGF0aCAgICAgICAgIHVzZXMgcnN5bmMnCisgICAgZWNobyAnOk53cml0ZSBzY3A6Ly9bdXNlckBdbWFjaGluZVtbOiNdcG9ydF0vcGF0aCB1c2VzIHNjcCcKKyAgICBlY2hvICc6TndyaXRlIHNmdHA6Ly9bdXNlckBdbWFjaGluZS9wYXRoICAgICAgICAgIHVzZXMgc2Z0cCcKKyAgICBicmVhaworCisgICBlbHNlaWYgbWF0Y2goY2hvaWNlLCJeXCIiKSAhPSAtMQorICAgIGlmIG1hdGNoKGNob2ljZSwiXCIkIikgIT0gLTEKKyAgICAgICIgY2FzZSAiLi4uIgorICAgICBsZXQgY2hvaWNlPXN0cnBhcnQoY2hvaWNlLDEsc3RybGVuKGNob2ljZSktMikKKyAgICBlbHNlCisgICAgICIgIGNhc2UgIi4uLiAuLi4gLi4uIgorICAgICBsZXQgY2hvaWNlICAgICAgPSBzdHJwYXJ0KGNob2ljZSwxLHN0cmxlbihjaG9pY2UpLTEpCisgICAgIGxldCB3aG9sZWNob2ljZSA9ICIiCisKKyAgICAgd2hpbGUgbWF0Y2goY2hvaWNlLCJcIiQiKSA9PSAtMQorICAgICAgbGV0IHdob2xlY2hvaWNlPSB3aG9sZWNob2ljZSAuICIgIiAuIGNob2ljZQorICAgICAgbGV0IGljaG9pY2UgICAgPSBpY2hvaWNlICsgMQorICAgICAgaWYgY2hvaWNlID4gYTowCisgICAgICAgZWNob2VyciAiVW5iYWxhbmNlZCBzdHJpbmcgaW4gZmlsZW5hbWUgJyIuIHdob2xlY2hvaWNlIC4iJyIKKyIgICAgICAgY2FsbCBEcmV0KCJOZXRXcml0ZSIpCisgICAgICAgcmV0dXJuCisgICAgICBlbmRpZgorICAgICAgbGV0IGNob2ljZT0gYTp7aWNob2ljZX0KKyAgICAgZW5kd2hpbGUKKyAgICAgbGV0IGNob2ljZT0gc3RycGFydCh3aG9sZWNob2ljZSwxLHN0cmxlbih3aG9sZWNob2ljZSktMSkgLiAiICIgLiBzdHJwYXJ0KGNob2ljZSwwLHN0cmxlbihjaG9pY2UpLTEpCisgICAgZW5kaWYKKyAgIGVuZGlmCisgIGVuZGlmCisiICBjYWxsIERlY2hvKCJjaG9pY2U8IiAuIGNob2ljZSAuICI+IikKKyAgbGV0IGljaG9pY2U9IGljaG9pY2UgKyAxCisKKyAgIiBmaXggdXAgd2luZG93cyB1cmxzCisgIGlmIGhhcygid2luMzIiKQorICAgbGV0IGNob2ljZT0gc3Vic3RpdHV0ZShjaG9pY2UsJ1xcJywnLycsJ2dlJykKKyAgICJFUjogc2VlIE5ldFJlYWQoKQorICAgZXhlICdsY2QgJyAuIGZuYW1lbW9kaWZ5KHRtcGZpbGUsJzpoJykKKyAgIGxldCB0bXBmaWxlID0gZm5hbWVtb2RpZnkodG1wZmlsZSwnOnQnKQorICBlbmRpZgorCisgICIgRGV0ZXJtaW5lIG1ldGhvZCBvZiByZWFkIChmdHAsIHJjcCwgZXRjKQorICBjYWxsIHM6TmV0TWV0aG9kKGNob2ljZSkKKworICAiID09PT09PT09PT09PT0KKyAgIiBQZXJmb3JtIFdyaXRlCisgICIgPT09PT09PT09PT09PQorCisgICIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAiIHJjcDogTWV0aG9kICMxCisgIGlmICBiOm5ldHJ3X21ldGhvZCA9PSAxCSIgd3JpdGUgd2l0aCByY3AKKyIJRGVjaG8gIndyaXRlIHZpYSByY3AgKG1ldGhvZCAjMSkiCisgICBpZiBzOm5ldHJ3X2hhc19udF9yY3AgPT0gMQorICAgIGlmIGV4aXN0cygiZzpuZXRyd191aWQiKSAmJiAgKCBnOm5ldHJ3X3VpZCAhPSAiIiApCisgICAgIGxldCB1aWRfbWFjaGluZSA9IGc6bmV0cndfbWFjaGluZSAuJy4nLiBnOm5ldHJ3X3VpZAorICAgIGVsc2UKKyAgICAgbGV0IHVpZF9tYWNoaW5lID0gZzpuZXRyd19tYWNoaW5lIC4nLicuICRVU0VSTkFNRQorICAgIGVuZGlmCisgICBlbHNlCisgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3VpZCIpICYmICAoIGc6bmV0cndfdWlkICE9ICIiICkKKyAgICAgbGV0IHVpZF9tYWNoaW5lID0gZzpuZXRyd191aWQgLidAJy4gZzpuZXRyd19tYWNoaW5lCisgICAgZWxzZQorICAgICBsZXQgdWlkX21hY2hpbmUgPSBnOm5ldHJ3X21hY2hpbmUKKyAgICBlbmRpZgorICAgZW5kaWYKKyIgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfcmNwX2NtZC4iICIuczpuZXRyd19yY3Btb2RlLiIgIi50bXBmaWxlLiIgIi51aWRfbWFjaGluZS4iOiIuZXNjYXBlKGI6bmV0cndfZm5hbWUsJyA/JicpKQorICAgZXhlICIhIi5nOm5ldHJ3X3JjcF9jbWQuIiAiLnM6bmV0cndfcmNwbW9kZS4iICIudG1wZmlsZS4iICIudWlkX21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKQorICAgbGV0IGI6bmV0cndfbGFzdGZpbGUgPSBjaG9pY2UKKworICAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgIiBmdHAgKyA8Lm5ldHJjPjogTWV0aG9kICMyCisgIGVsc2VpZiBiOm5ldHJ3X21ldGhvZCA9PSAyCSIgd3JpdGUgd2l0aCBmdHAgKyA8Lm5ldHJjPgorICAgbGV0IG5ldHJ3X2ZuYW1lID0gYjpuZXRyd19mbmFtZQorICAgbmV3CisgICBzZXQgZmY9dW5peAorICAgZXhlICJwdXQgPSciLmc6bmV0cndfZnRwbW9kZS4iJyIKKyIgICBjYWxsIERlY2hvKCIgTmV0V3JpdGU6IHB1dCA9JyIuZzpuZXRyd19mdHBtb2RlLiInIikKKyAgIGV4ZSAicHV0ID0ncHV0ICIudG1wZmlsZS4iICIubmV0cndfZm5hbWUuIiciCisiICAgY2FsbCBEZWNobygicHV0ID0ncHV0ICIudG1wZmlsZS4iICIubmV0cndfZm5hbWUuIiciKQorICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3BvcnQiKSAmJiBnOm5ldHJ3X3BvcnQgIT0gIiIKKyIgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgIi5nOm5ldHJ3X21hY2hpbmUuIiAiLmc6bmV0cndfcG9ydCkKKyAgICBleGUgIiUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLmc6bmV0cndfbWFjaGluZS4iICIuZzpuZXRyd19wb3J0CisgICBlbHNlCisiICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLmc6bmV0cndfZnRwX2NtZC4iIC1pICIuZzpuZXRyd19tYWNoaW5lKQorICAgIGV4ZSAiJSEiLmc6bmV0cndfZnRwX2NtZC4iIC1pICIuZzpuZXRyd19tYWNoaW5lCisgICBlbmRpZgorICAgIiBJZiB0aGUgcmVzdWx0IG9mIHRoZSBmdHAgb3BlcmF0aW9uIGlzbid0IGJsYW5rLCBzaG93IGFuIGVycm9yIG1lc3NhZ2UgKHRueCB0byBEb3VnIENsYWFyKQorICAgaWYgZ2V0bGluZSgxKSAhfiAiXiQiCisgICAgZWNob2VyciBnZXRsaW5lKDEpCisgICAgbGV0IG1vZD0xCisgICBlbmRpZgorICAgYmQhCisgICBsZXQgYjpuZXRyd19sYXN0ZmlsZSA9IGNob2ljZQorCisgICIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAiIGZ0cCArIG1hY2hpbmUsIGlkLCBwYXNzd2QsIGZpbGVuYW1lOiBNZXRob2QgIzMKKyAgZWxzZWlmIGI6bmV0cndfbWV0aG9kID09IDMJIiB3cml0ZSB3aXRoIGZ0cCArIG1hY2hpbmUsIGlkLCBwYXNzd2QsIGFuZCBmbmFtZQorICAgbGV0IG5ldHJ3X2ZuYW1lPSBiOm5ldHJ3X2ZuYW1lCisgICBuZXcKKyAgIHNldCBmZj11bml4CisgICBpZiBleGlzdHMoImc6bmV0cndfcG9ydCIpICYmIGc6bmV0cndfcG9ydCAhPSAiIgorICAgIHB1dCA9J29wZW4gJy5nOm5ldHJ3X21hY2hpbmUuJyAnLmc6bmV0cndfcG9ydAorICAgZWxzZQorICAgIHB1dCA9J29wZW4gJy5nOm5ldHJ3X21hY2hpbmUKKyAgIGVuZGlmCisgICBpZiBleGlzdHMoImc6bmV0cndfZnRwIikgJiYgZzpuZXRyd19mdHAgPT0gMQorICAgIHB1dCA9ZzpuZXRyd191aWQKKyAgICBwdXQgPWc6bmV0cndfcGFzc3dkCisgICBlbHNlCisgICAgcHV0ID0ndXNlciAnLmc6bmV0cndfdWlkLicgJy5nOm5ldHJ3X3Bhc3N3ZAorICAgZW5kaWYKKyAgIHB1dCA9J3B1dCAnLnRtcGZpbGUuJyAnLm5ldHJ3X2ZuYW1lCisgICAiIHNhdmUgY2hvaWNlL2lkL3Bhc3N3b3JkIGZvciBmdXR1cmUgdXNlCisgICBsZXQgYjpuZXRyd19sYXN0ZmlsZSA9IGNob2ljZQorCisgICAiIHBlcmZvcm0gZnRwOgorICAgIiAtaSAgICAgICA6IHR1cm5zIG9mZiBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgZnJvbSBmdHAKKyAgICIgLW4gIHVuaXggOiBET04nVCB1c2UgPC5uZXRyYz4sIGV2ZW4gdGhvdWdoIGl0IGV4aXN0cworICAgIiAtbiAgd2luMzI6IHF1aXQgYmVpbmcgb2Jub3hpb3VzIGFib3V0IHBhc3N3b3JkCisiICAgY2FsbCBEZWNobygncGVyZm9ybWluZyBmdHAgLWkgLW4nKQorICAgbm9ybSAxR2RkCisiICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgLW4iKQorICAgZXhlICIlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgLW4iCisgICAiIElmIHRoZSByZXN1bHQgb2YgdGhlIGZ0cCBvcGVyYXRpb24gaXNuJ3QgYmxhbmssIHNob3cgYW4gZXJyb3IgbWVzc2FnZSAodG54IHRvIERvdWcgQ2xhYXIpCisgICBpZiBnZXRsaW5lKDEpICF+ICJeJCIKKyAgICBlY2hvZXJyIGdldGxpbmUoMSkKKyAgICBsZXQgbW9kPTEKKyAgIGVuZGlmCisgICBiZCEKKworICAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgIiBzY3A6IE1ldGhvZCAjNAorICBlbHNlaWYgICAgIGI6bmV0cndfbWV0aG9kID09IDQJIiB3cml0ZSB3aXRoIHNjcAorICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3BvcnQiKSAmJiBnOm5ldHJ3X3BvcnQgIT0gIiIKKyAgICBsZXQgdXNlcG9ydD0gIiAtUCAiLmc6bmV0cndfcG9ydAorICAgZWxzZQorICAgIGxldCB1c2Vwb3J0PSAiIgorICAgZW5kaWYKKyAgIGlmIGc6bmV0cndfY3lnd2luID09IDEKKyAgICBsZXQgY3lndG1wZmlsZT1zdWJzdGl0dXRlKHRtcGZpbGUsJ15cKFxhXCk6JywnL2N5Z2RyaXZlL1wxLycsJ2UnKQorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfc2NwX2NtZC51c2Vwb3J0LiIgIi5jeWd0bXBmaWxlLiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKSkKKyAgICBleGUgIiEiLmc6bmV0cndfc2NwX2NtZC51c2Vwb3J0LiIgIi5jeWd0bXBmaWxlLiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKQorICAgZWxzZQorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfc2NwX2NtZC51c2Vwb3J0LiIgIi50bXBmaWxlLiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKSkKKyAgICBleGUgIiEiLmc6bmV0cndfc2NwX2NtZC51c2Vwb3J0LiIgIi50bXBmaWxlLiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKQorICAgZW5kaWYKKyAgIGxldCBiOm5ldHJ3X2xhc3RmaWxlID0gY2hvaWNlCisKKyAgIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICIgaHR0cDogTWV0aG9kICM1CisgIGVsc2VpZiAgICAgYjpuZXRyd19tZXRob2QgPT0gNQorICAgZWNob2VyciAiKioqd2FybmluZyoqKiBjdXJyZW50bHkgPG5ldHJ3LnZpbT4gZG9lcyBub3Qgc3VwcG9ydCB3cml0aW5nIHVzaW5nIGh0dHA6IgorCisgICIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAiIGRhdjogTWV0aG9kICM2CisgIGVsc2VpZiAgICAgYjpuZXRyd19tZXRob2QgPT0gNgkiIHdyaXRlIHdpdGggY2FkYXZlcgorIiAgIGNhbGwgRGVjaG8oIndyaXRlIHZpYSBjYWRhdmVyIChtZXRob2QgIzYpIikKKworICAgIiBDb25zdHJ1Y3QgZXhlY3V0aW9uIHN0cmluZyAoZm91ciBsaW5lcykgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCBmaWx0ZXIKKyAgIGxldCBuZXRyd19mbmFtZT0gYjpuZXRyd19mbmFtZQorICAgbmV3CisgICBzZXQgZmY9dW5peAorICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3BvcnQiKSAmJiBnOm5ldHJ3X3BvcnQgIT0gIiIKKyAgICBwdXQgPSdvcGVuICcuZzpuZXRyd19tYWNoaW5lLicgJy5nOm5ldHJ3X3BvcnQKKyAgIGVsc2UKKyAgICBwdXQgPSdvcGVuICcuZzpuZXRyd19tYWNoaW5lCisgICBlbmRpZgorICAgcHV0ID0ndXNlciAnLmc6bmV0cndfdWlkLicgJy5nOm5ldHJ3X3Bhc3N3ZAorCisgICBpZiBnOm5ldHJ3X2N5Z3dpbiA9PSAxCisgICAgbGV0IGN5Z3RtcGZpbGU9c3Vic3RpdHV0ZSh0bXBmaWxlLCdeXChcYVwpOicsJy9jeWdkcml2ZS9cMS8nLCdlJykKKyAgICBwdXQgPSdwdXQgJy5jeWd0bXBmaWxlLicgJy5uZXRyd19mbmFtZQorICAgZWxzZQorICAgIHB1dCA9J3B1dCAnLnRtcGZpbGUuJyAnLm5ldHJ3X2ZuYW1lCisgICBlbmRpZgorCisgICAiIHBlcmZvcm0gY2FkYXZlciBvcGVyYXRpb246CisgICBub3JtIDFHZGQKKyIgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5nOm5ldHJ3X2Rhdl9jbWQpCisgICBleGUgIiUhIi5nOm5ldHJ3X2Rhdl9jbWQKKyAgIGJkIQorICAgbGV0IGI6bmV0cndfbGFzdGZpbGUgPSBjaG9pY2UKKworICAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgIiByc3luYzogTWV0aG9kICM3CisgIGVsc2VpZiAgICAgYjpuZXRyd19tZXRob2QgPT0gNwkiIHdyaXRlIHdpdGggcnN5bmMKKyAgIGlmIGc6bmV0cndfY3lnd2luID09IDEKKyAgICBsZXQgY3lndG1wZmlsZT1zdWJzdGl0dXRlKHRtcGZpbGUsJ15cKFxhXCk6JywnL2N5Z2RyaXZlL1wxLycsJ2UnKQorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfcnN5bmNfY21kLiIgIi5jeWd0bXBmaWxlLiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKSkKKyAgICBleGUgIiEiLmc6bmV0cndfcnN5bmNfY21kLiIgIi5jeWd0bXBmaWxlLiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKQorICAgZWxzZQorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICEiLmc6bmV0cndfcnN5bmNfY21kLiIgIi50bXBmaWxlLiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKSkKKyAgICBleGUgIiEiLmc6bmV0cndfcnN5bmNfY21kLiIgIi50bXBmaWxlLiIgIi5nOm5ldHJ3X21hY2hpbmUuIjoiLmVzY2FwZShiOm5ldHJ3X2ZuYW1lLCcgPyYnKQorICAgZW5kaWYKKyAgIGxldCBiOm5ldHJ3X2xhc3RmaWxlID0gY2hvaWNlCisKKyAgIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICIgc2NwOiBNZXRob2QgIzkKKyAgZWxzZWlmICAgICBiOm5ldHJ3X21ldGhvZCA9PSA5CSIgd3JpdGUgd2l0aCBzZnRwCisgICBsZXQgbmV0cndfZm5hbWU9IGI6bmV0cndfZm5hbWUKKyAgIGlmIGV4aXN0cygiZzpuZXRyd191aWQiKSAmJiAgKCBnOm5ldHJ3X3VpZCAhPSAiIiApCisgICAgbGV0IHVpZF9tYWNoaW5lID0gZzpuZXRyd191aWQgLidAJy4gZzpuZXRyd19tYWNoaW5lCisgICBlbHNlCisgICAgbGV0IHVpZF9tYWNoaW5lID0gZzpuZXRyd19tYWNoaW5lCisgICBlbmRpZgorICAgbmV3CisgICBzZXQgZmY9dW5peAorICAgcHV0ID0ncHV0ICcudG1wZmlsZS4nICcubmV0cndfZm5hbWUKKyAgIG5vcm0gMUdkZAorIiAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLmc6bmV0cndfc2Z0cF9jbWQuJyAnLnVpZF9tYWNoaW5lKQorICAgZXhlICIlISIuZzpuZXRyd19zZnRwX2NtZC4nICcudWlkX21hY2hpbmUKKyAgIGJkIQorICAgbGV0IGI6bmV0cndfbGFzdGZpbGU9IGNob2ljZQorCisgICIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICBlbHNlICIgQ29tcGxhaW4KKyAgIGVjaG8gIioqKndhcm5pbmcqKiogdW5hYmxlIHRvIGNvbXBseSB3aXRoIHlvdXIgcmVxdWVzdDwiIC4gY2hvaWNlIC4gIj4iCisgIGVuZGlmCisgZW5kd2hpbGUKKworICIgY2xlYW51cAorIiBjYWxsIERlY2hvKCJjbGVhbnVwIikKKyBsZXQgcmVzdWx0PWRlbGV0ZSh0bXBmaWxlKQorIGNhbGwgczpOZXRPcHRpb25SZXN0b3JlKCkKKworIGlmIGE6Zmlyc3RsaW5lID09IDEgJiYgYTpsYXN0bGluZSA9PSBsaW5lKCIkIikKKyAgbGV0ICZtb2Q9IG1vZAkiIHVzdWFsbHkgZXF1aXZhbGVudCB0byBzZXQgbm9tb2QKKyBlbmRpZgorCisiIGNhbGwgRHJldCgiTmV0V3JpdGUiKQorZW5kZnVuCisiIGVuZCBvZiBOZXRXcml0ZQorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBOZXRNZXRob2Q6ICBkZXRlcm1pbmUgbWV0aG9kIG9mIHRyYW5zZmVyIHt7ezEKKyIgIG1ldGhvZCA9PSAxOiByY3AKKyIJICAgICAyOiBmdHAgKyA8Lm5ldHJjPgorIgkgICAgIDM6IGZ0cCArIG1hY2hpbmUsIGlkLCBwYXNzd29yZCwgYW5kIFtwYXRoXWZpbGVuYW1lCisiCSAgICAgNDogc2NwCisiCSAgICAgNTogaHR0cCAod2dldCkKKyIJICAgICA2OiBjYWRhdmVyCisiCSAgICAgNzogcnN5bmMKKyIJICAgICA4OiBmZXRjaAorIgkgICAgIDk6IHNmdHAKK2Z1biEgczpOZXRNZXRob2QoY2hvaWNlKSAgIiBnbG9iYWxzOiBtZXRob2QgbWFjaGluZSBpZCBwYXNzd2QgZm5hbWUKKyIgY2FsbCBEZnVuYygiTmV0TWV0aG9kKGE6Y2hvaWNlPCIuYTpjaG9pY2UuIj4pIikKKworICIgaW5pdGlhbGl6YXRpb24KKyBsZXQgYjpuZXRyd19tZXRob2QgID0gMAorIGxldCBnOm5ldHJ3X21hY2hpbmUgPSAiIgorIGxldCBiOm5ldHJ3X2ZuYW1lICAgPSAiIgorIGxldCBnOm5ldHJ3X3BvcnQgICAgPSAiIgorCisgIiBQYXR0ZXJuczoKKyAiIG1pcGYgICAgIDogYTptYWNoaW5lIGE6aWQgcGFzc3dvcmQgZmlsZW5hbWUJICAgIFVzZSBmdHAKKyAiIG1mCSAgICA6IGE6bWFjaGluZSBmaWxlbmFtZQkJICAgIFVzZSBmdHAgKyA8Lm5ldHJjPiBvciBnOm5ldHJ3X3VpZCBnOm5ldHJ3X3Bhc3N3ZAorICIgZnRwdXJtICAgOiBmdHA6Ly9bdXNlckBdaG9zdFtbIzpdcG9ydF0vZmlsZW5hbWUgIFVzZSBmdHAgKyA8Lm5ldHJjPiBvciBnOm5ldHJ3X3VpZCBnOm5ldHJ3X3Bhc3N3ZAorICIgcmNwdXJtICAgOiByY3A6Ly9bdXNlckBdaG9zdC9maWxlbmFtZQkgICAgVXNlIHJjcAorICIgcmNwaGYgICAgOiBbdXNlckBdaG9zdDpmaWxlbmFtZQkJICAgIFVzZSByY3AKKyAiIHNjcHVybSAgIDogc2NwOi8vW3VzZXJAXWhvc3RbWyM6XXBvcnRdL2ZpbGVuYW1lICBVc2Ugc2NwCisgIiBodHRwdXJtICA6IGh0dHA6Ly9bdXNlckBdaG9zdC9maWxlbmFtZQkgICAgVXNlIHdnZXQKKyAiIGRhdnVybSAgIDogZGF2Oi8vaG9zdFs6cG9ydF0vcGF0aCAgICAgICAgICAgICAgICBVc2UgY2FkYXZlcgorICIgcnN5bmN1cm0gOiByc3luYzovL2hvc3RbOnBvcnRdL3BhdGggICAgICAgICAgICAgIFVzZSByc3luYworICIgZmV0Y2h1cm0gOiBmZXRjaDovL1t1c2VyQF1ob3N0WzpodHRwXS9maWxlbmFtZSAgIFVzZSBmZXRjaCAoZGVmYXVsdHMgdG8gZnRwLCBvdmVycmlkZSBmb3IgaHR0cCkKKyAiIHNmdHB1cm0gIDogc2Z0cDovL1t1c2VyQF1ob3N0L2ZpbGVuYW1lICBVc2Ugc2NwCisgbGV0IG1pcGYgICAgID0gJ1woXFNcK1wpXHNcK1woXFNcK1wpXHNcK1woXFNcK1wpXHNcK1woXFNcK1wpJworIGxldCBtZiAgICAgICA9ICdcKFxTXCtcKVxzXCtcKFxTXCtcKScKKyBsZXQgZnRwdXJtICAgPSAnZnRwOi8vXChcKFteL0BdXHstfVwpQFwpXD1cKFteLyM6XVx7LX1cKVwoWyM6XVxkXCtcKVw9L1woLipcKSQnCisgbGV0IHJjcHVybSAgID0gJ3JjcDovL1woXChbXi9AXVx7LX1cKUBcKVw9XChbXi9dXHstfVwpL1woLipcKSQnCisgbGV0IHJjcGhmICAgID0gJ1woXChbXkBdXHstfVwpQFwpXD1cKFxJXGkqXCk6XChcU1wrXCknCisgbGV0IHNjcHVybSAgID0gJ3NjcDovL1woW14vXVx7LX1cKVwoWyM6XVxkXCtcKVw9L1woLipcKSQnCisgbGV0IGh0dHB1cm0gID0gJ2h0dHA6Ly9cKFteL11cey19XClcKC8uKlwpXD0kJworIGxldCBkYXZ1cm0gICA9ICdkYXY6Ly9cKFteL11cey19XCkvXCguKlwpXD0kJworIGxldCByc3luY3VybSA9ICdyc3luYzovL1woW14vXVx7LX1cKS9cKC4qXClcPSQnCisgbGV0IGZldGNodXJtID0gJ2ZldGNoOi8vXChcKFteL0BdXHstfVwpQFwpXD1cKFteLyM6XVx7LX1cKVwoOmh0dHBcKVw9L1woLipcKSQnCisgbGV0IHNmdHB1cm0gID0gJ3NmdHA6Ly9cKFteL11cey19XCkvXCguKlwpXD0kJworCisiIGNhbGwgRGVjaG8oImRldGVybWluZSBtZXRob2Q6IikKKyAiIERldGVybWluZSBNZXRob2QKKyAiIHJjcDovL3VzZXJAaG9zdG5hbWUvLi4ucGF0aC10by1maWxlCisgaWYgbWF0Y2goYTpjaG9pY2UscmNwdXJtKSA9PSAwCisiICBjYWxsIERlY2hvKCJyY3A6Ly8uLi4iKQorICBsZXQgYjpuZXRyd19tZXRob2QgPSAxCisgIGxldCB1c2VyaWQJICAgICA9IHN1YnN0aXR1dGUoYTpjaG9pY2UscmNwdXJtLCdcMicsIiIpCisgIGxldCBnOm5ldHJ3X21hY2hpbmU9IHN1YnN0aXR1dGUoYTpjaG9pY2UscmNwdXJtLCdcMycsIiIpCisgIGxldCBiOm5ldHJ3X2ZuYW1lICA9IHN1YnN0aXR1dGUoYTpjaG9pY2UscmNwdXJtLCdcNCcsIiIpCisgIGlmIHVzZXJpZCAhPSAiIgorICAgbGV0IGc6bmV0cndfdWlkPSB1c2VyaWQKKyAgZW5kaWYKKworICIgc2NwOi8vdXNlckBob3N0bmFtZS8uLi5wYXRoLXRvLWZpbGUKKyBlbHNlaWYgbWF0Y2goYTpjaG9pY2Usc2NwdXJtKSA9PSAwCisiICBjYWxsIERlY2hvKCJzY3A6Ly8uLi4iKQorICBsZXQgYjpuZXRyd19tZXRob2QgPSA0CisgIGxldCBnOm5ldHJ3X21hY2hpbmU9IHN1YnN0aXR1dGUoYTpjaG9pY2Usc2NwdXJtLCdcMScsIiIpCisgIGxldCBiOm5ldHJ3X3BvcnQgICA9IHN1YnN0aXR1dGUoYTpjaG9pY2Usc2NwdXJtLCdcMicsIiIpCisgIGxldCBiOm5ldHJ3X2ZuYW1lICA9IHN1YnN0aXR1dGUoYTpjaG9pY2Usc2NwdXJtLCdcMycsIiIpCisKKyAiIGh0dHA6Ly91c2VyQGhvc3RuYW1lLy4uLnBhdGgtdG8tZmlsZQorIGVsc2VpZiBtYXRjaChhOmNob2ljZSxodHRwdXJtKSA9PSAwCisiICBjYWxsIERlY2hvKCJodHRwOi8vLi4uIikKKyAgbGV0IGI6bmV0cndfbWV0aG9kID0gNQorICBsZXQgZzpuZXRyd19tYWNoaW5lPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLGh0dHB1cm0sJ1wxJywiIikKKyAgbGV0IGI6bmV0cndfZm5hbWUgID0gc3Vic3RpdHV0ZShhOmNob2ljZSxodHRwdXJtLCdcMicsIiIpCisKKyAiIGRhdjovL2hvc3RuYW1lWzpwb3J0XS8uLnBhdGgtdG8tZmlsZS4uCisgZWxzZWlmIG1hdGNoKGE6Y2hvaWNlLGRhdnVybSkgPT0gMAorIiAgY2FsbCBEZWNobygiZGF2Oi8vLi4uIikKKyAgbGV0IGI6bmV0cndfbWV0aG9kPSA2CisgIGxldCBnOm5ldHJ3X21hY2hpbmU9IHN1YnN0aXR1dGUoYTpjaG9pY2UsZGF2dXJtLCdcMScsIiIpCisgIGxldCBiOm5ldHJ3X2ZuYW1lICA9IHN1YnN0aXR1dGUoYTpjaG9pY2UsZGF2dXJtLCdcMicsIiIpCisKKyAiIHJzeW5jOi8vdXNlckBob3N0bmFtZS8uLi5wYXRoLXRvLWZpbGUKKyBlbHNlaWYgbWF0Y2goYTpjaG9pY2UscnN5bmN1cm0pID09IDAKKyIgIGNhbGwgRGVjaG8oInJzeW5jOi8vLi4uIikKKyAgbGV0IGI6bmV0cndfbWV0aG9kID0gNworICBsZXQgZzpuZXRyd19tYWNoaW5lPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLHJzeW5jdXJtLCdcMScsIiIpCisgIGxldCBiOm5ldHJ3X2ZuYW1lICA9IHN1YnN0aXR1dGUoYTpjaG9pY2UscnN5bmN1cm0sJ1wyJywiIikKKworICIgZnRwOi8vW3VzZXJAXWhvc3RuYW1lW1s6I11wb3J0XS8uLi5wYXRoLXRvLWZpbGUKKyBlbHNlaWYgbWF0Y2goYTpjaG9pY2UsZnRwdXJtKSA9PSAwCisiICBjYWxsIERlY2hvKCJmdHA6Ly8uLi4iKQorICBsZXQgdXNlcmlkCSAgICAgPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLGZ0cHVybSwnXDInLCIiKQorICBsZXQgZzpuZXRyd19tYWNoaW5lPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLGZ0cHVybSwnXDMnLCIiKQorICBsZXQgZzpuZXRyd19wb3J0ICAgPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLGZ0cHVybSwnXDQnLCIiKQorICBsZXQgYjpuZXRyd19mbmFtZSAgPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLGZ0cHVybSwnXDUnLCIiKQorICBpZiBnOm5ldHJ3X3BvcnQgIT0gIiIKKyAgICBsZXQgZzpuZXRyd19wb3J0ID0gc3Vic3RpdHV0ZShnOm5ldHJ3X3BvcnQsIlsjOl0iLCIiLCIiKQorICBlbmRpZgorICBpZiB1c2VyaWQgIT0gIiIKKyAgIGxldCBnOm5ldHJ3X3VpZD0gdXNlcmlkCisgIGVuZGlmCisgIGlmIGV4aXN0cygiZzpuZXRyd191aWQiKSAmJiBleGlzdHMoImc6bmV0cndfcGFzc3dkIikKKyAgIGxldCBiOm5ldHJ3X21ldGhvZCA9IDMKKyAgZWxzZQorICAgaWYgZmlsZXJlYWRhYmxlKGV4cGFuZCgiJEhPTUUvLm5ldHJjIikpICYmICFleGlzdHMoImc6bmV0cndfaWdub3JlbmV0cmMiKQorICAgIGxldCBiOm5ldHJ3X21ldGhvZD0gMgorICAgZWxzZQorICAgIGlmICFleGlzdHMoImc6bmV0cndfdWlkIikgfHwgZzpuZXRyd191aWQgPT0gIiIKKyAgICAgY2FsbCBOZXRVc2VyUGFzcygpCisgICAgZWxzZWlmICFleGlzdHMoImc6bmV0cndfcGFzc3dkIikgfHwgZzpuZXRyd19wYXNzd2QgPT0gIiIKKyAgICAgY2FsbCBOZXRVc2VyUGFzcyhnOm5ldHJ3X3VpZCkKKyAgICIgZWxzZSBqdXN0IHVzZSBjdXJyZW50IGc6bmV0cndfdWlkIGFuZCBnOm5ldHJ3X3Bhc3N3ZAorICAgIGVuZGlmCisgICAgbGV0IGI6bmV0cndfbWV0aG9kPSAzCisgICBlbmRpZgorICBlbmRpZgorCisgZWxzZWlmIG1hdGNoKGE6Y2hvaWNlLGZldGNodXJtKSA9PSAwCisiICBjYWxsIERlY2hvKCJmZXRjaDovLy4uLiIpCisgIGxldCBiOm5ldHJ3X21ldGhvZCA9IDgKKyAgbGV0IGc6bmV0cndfdXNlcmlkID0gc3Vic3RpdHV0ZShhOmNob2ljZSxmZXRjaHVybSwnXDInLCIiKQorICBsZXQgZzpuZXRyd19tYWNoaW5lPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLGZldGNodXJtLCdcMycsIiIpCisgIGxldCBiOm5ldHJ3X29wdGlvbiA9IHN1YnN0aXR1dGUoYTpjaG9pY2UsZmV0Y2h1cm0sJ1w0JywiIikKKyAgbGV0IGI6bmV0cndfZm5hbWUgID0gc3Vic3RpdHV0ZShhOmNob2ljZSxmZXRjaHVybSwnXDUnLCIiKQorCisgIiBJc3N1ZSBhbiBmdHAgOiAibWFjaGluZSBpZCBwYXNzd29yZCBbcGF0aC9dZmlsZW5hbWUiCisgZWxzZWlmIG1hdGNoKGE6Y2hvaWNlLG1pcGYpID09IDAKKyIgIGNhbGwgRGVjaG8oIihmdHApIGhvc3QgaWQgcGFzcyBmaWxlIikKKyAgbGV0IGI6bmV0cndfbWV0aG9kICA9IDMKKyAgbGV0IGc6bmV0cndfbWFjaGluZSA9IHN1YnN0aXR1dGUoYTpjaG9pY2UsbWlwZiwnXDEnLCIiKQorICBsZXQgZzpuZXRyd191aWQgICAgID0gc3Vic3RpdHV0ZShhOmNob2ljZSxtaXBmLCdcMicsIiIpCisgIGxldCBnOm5ldHJ3X3Bhc3N3ZCAgPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLG1pcGYsJ1wzJywiIikKKyAgbGV0IGI6bmV0cndfZm5hbWUgICA9IHN1YnN0aXR1dGUoYTpjaG9pY2UsbWlwZiwnXDQnLCIiKQorCisgIiBJc3N1ZSBhbiBmdHA6ICJob3N0bmFtZSBbcGF0aC9dZmlsZW5hbWUiCisgZWxzZWlmIG1hdGNoKGE6Y2hvaWNlLG1mKSA9PSAwCisiICBjYWxsIERlY2hvKCIoZnRwKSBob3N0IGZpbGUiKQorICBpZiBleGlzdHMoImc6bmV0cndfdWlkIikgJiYgZXhpc3RzKCJnOm5ldHJ3X3Bhc3N3ZCIpCisgICBsZXQgYjpuZXRyd19tZXRob2QgID0gMworICAgbGV0IGc6bmV0cndfbWFjaGluZSA9IHN1YnN0aXR1dGUoYTpjaG9pY2UsbWYsJ1wxJywiIikKKyAgIGxldCBiOm5ldHJ3X2ZuYW1lICAgPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLG1mLCdcMicsIiIpCisKKyAgZWxzZWlmIGZpbGVyZWFkYWJsZShleHBhbmQoIiRIT01FLy5uZXRyYyIpKQorICAgbGV0IGI6bmV0cndfbWV0aG9kICA9IDIKKyAgIGxldCBnOm5ldHJ3X21hY2hpbmUgPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLG1mLCdcMScsIiIpCisgICBsZXQgYjpuZXRyd19mbmFtZSAgID0gc3Vic3RpdHV0ZShhOmNob2ljZSxtZiwnXDInLCIiKQorICBlbmRpZgorCisgIiBzZnRwOi8vdXNlckBob3N0bmFtZS8uLi5wYXRoLXRvLWZpbGUKKyBlbHNlaWYgbWF0Y2goYTpjaG9pY2Usc2Z0cHVybSkgPT0gMAorIiAgY2FsbCBEZWNobygic2Z0cDovLy4uLiIpCisgIGxldCBiOm5ldHJ3X21ldGhvZCA9IDkKKyAgbGV0IGc6bmV0cndfbWFjaGluZT0gc3Vic3RpdHV0ZShhOmNob2ljZSxzZnRwdXJtLCdcMScsIiIpCisgIGxldCBiOm5ldHJ3X2ZuYW1lICA9IHN1YnN0aXR1dGUoYTpjaG9pY2Usc2Z0cHVybSwnXDInLCIiKQorCisgIiBJc3N1ZSBhbiByY3A6IGhvc3RuYW1lOmZpbGVuYW1lIiAgKHRoaXMgb25lIHNob3VsZCBiZSBsYXN0KQorIGVsc2VpZiBtYXRjaChhOmNob2ljZSxyY3BoZikgPT0gMAorIiAgY2FsbCBEZWNobygiKHJjcCkgaG9zdDpmaWxlKSIpCisgIGxldCBiOm5ldHJ3X21ldGhvZCA9IDEKKyAgbGV0IHVzZXJpZAkgICAgID0gc3Vic3RpdHV0ZShhOmNob2ljZSxyY3BoZiwnXDInLCIiKQorICBsZXQgZzpuZXRyd19tYWNoaW5lPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLHJjcGhmLCdcMycsIiIpCisgIGxldCBiOm5ldHJ3X2ZuYW1lICA9IHN1YnN0aXR1dGUoYTpjaG9pY2UscmNwaGYsJ1w0JywiIikKKyAgaWYgdXNlcmlkICE9ICIiCisgICBsZXQgZzpuZXRyd191aWQ9IHVzZXJpZAorICBlbmRpZgorICBpZiBoYXMoIndpbjMyIikKKyAgICIgZG9uJ3QgbGV0IFBDcyB0cnkgPC5uZXRyYz4KKyAgIGxldCBiOm5ldHJ3X21ldGhvZCA9IDMKKyAgZW5kaWYKKworIGVsc2UKKyAgZWNob2VyciAiKioqZXJyb3IqKiogY2Fubm90IGRldGVybWluZSBtZXRob2QiCisgIGxldCBiOm5ldHJ3X21ldGhvZCAgPSAtMQorIGVuZGlmCisKKyIgY2FsbCBEZWNobygiYTpjaG9pY2UgICAgICAgPCIuYTpjaG9pY2UuIj4iKQorIiBjYWxsIERlY2hvKCJiOm5ldHJ3X21ldGhvZCA8Ii5iOm5ldHJ3X21ldGhvZC4iPiIpCisiIGNhbGwgRGVjaG8oImc6bmV0cndfbWFjaGluZTwiLmc6bmV0cndfbWFjaGluZS4iPiIpCisiIGNhbGwgRGVjaG8oImc6bmV0cndfcG9ydCAgIDwiLmc6bmV0cndfcG9ydC4iPiIpCisiIGlmIGV4aXN0cygiZzpuZXRyd191aWQiKQkJIkRlY2hvCisiICBjYWxsIERlY2hvKCJnOm5ldHJ3X3VpZCAgICA8Ii5nOm5ldHJ3X3VpZC4iPiIpCisiIGVuZGlmCQkJCQkiRGVjaG8KKyIgaWYgZXhpc3RzKCJnOm5ldHJ3X3Bhc3N3ZCIpCQkiRGVjaG8KKyIgIGNhbGwgRGVjaG8oImc6bmV0cndfcGFzc3dkIDwiLmc6bmV0cndfcGFzc3dkLiI+IikKKyIgZW5kaWYJCQkJCSJEZWNobworIiBjYWxsIERlY2hvKCJiOm5ldHJ3X2ZuYW1lICA8Ii5iOm5ldHJ3X2ZuYW1lLiI+IikKKyIgY2FsbCBEcmV0KCJOZXRNZXRob2QiKQorZW5kZnVuCisiIGVuZCBvZiBOZXRNZXRob2QKKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgTmV0VXNlclBhc3M6IHNldCB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZm9yIHN1YnNlcXVlbnQgZnRwIHRyYW5zZmVyIHt7ezEKKyIgICBVc2FnZTogIDpjYWxsIE5ldFVzZXJQYXNzKCkJCQktLSB3aWxsIHByb21wdCBmb3IgdXNlcmlkIGFuZCBwYXNzd29yZAorIgkgICAgOmNhbGwgTmV0VXNlclBhc3MoInVpZCIpCQktLSB3aWxsIHByb21wdCBmb3IgcGFzc3dvcmQKKyIJICAgIDpjYWxsIE5ldFVzZXJQYXNzKCJ1aWQiLCJwYXNzd29yZCIpIC0tIHNldHMgZ2xvYmFsIHVzZXJpZCBhbmQgcGFzc3dvcmQKK2Z1biEgTmV0VXNlclBhc3MoLi4uKQorCisgIiBnZXQvc2V0IHVzZXJpZAorIGlmIGE6MCA9PSAwCisiICBjYWxsIERmdW5jKCJOZXRVc2VyUGFzcyhhOjA8Ii5hOjAuIj4pIikKKyAgaWYgIWV4aXN0cygiZzpuZXRyd191aWQiKSB8fCBnOm5ldHJ3X3VpZCA9PSAiIgorICAgIiB2aWEgcHJvbXB0CisgICBsZXQgZzpuZXRyd191aWQ9IGlucHV0KCdFbnRlciB1c2VybmFtZTogJykKKyAgZW5kaWYKKyBlbHNlCSIgZnJvbSBjb21tYW5kIGxpbmUKKyIgIGNhbGwgRGZ1bmMoIk5ldFVzZXJQYXNzKGE6MTwiLmE6MS4iPikgeyIpCisgIGxldCBnOm5ldHJ3X3VpZD0gYToxCisgZW5kaWYKKworICIgZ2V0IHBhc3N3b3JkCisgaWYgYTowIDw9IDEgIiB2aWEgcHJvbXB0CisiICBjYWxsIERlY2hvKCJhOjA9Ii5hOjAuIiBjYXNlIDw9MToiKQorICBsZXQgZzpuZXRyd19wYXNzd2Q9IGlucHV0c2VjcmV0KCJFbnRlciBQYXNzd29yZDogIikKKyBlbHNlICIgZnJvbSBjb21tYW5kIGxpbmUKKyIgIGNhbGwgRGVjaG8oImE6MD0iLmE6MC4iIGNhc2UgPjE6IGE6MjwiLmE6Mi4iPiIpCisgIGxldCBnOm5ldHJ3X3Bhc3N3ZD1hOjIKKyBlbmRpZgorIiAgY2FsbCBEcmV0KCJOZXRVc2VyUGFzcyIpCitlbmRmdW4KKyIgZW5kIE5ldFVzZXJQYXNzCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIE5ldE9wdGlvblNhdmU6IHNhdmUgb3B0aW9ucyBhbmQgc2V0IHRvICJzdGFuZGFyZCIgZm9ybSB7e3sxCitmdW4hczpOZXRPcHRpb25TYXZlKCkKKyIgY2FsbCBEZnVuYygiTmV0T3B0aW9uU2F2ZSgpIikKKworICIgR2V0IFRlbXBvcmFyeSBGaWxlbmFtZQorIGxldCBzOmFpa2VlcAk9ICZhaQorIGxldCBzOmNpbmtlZXAJPSAmY2luCisgbGV0IHM6Y2lub2tlZXAgPSAmY2lubworIGxldCBzOmNvbWtlZXAJPSAmY29tCisgbGV0IHM6Y3Bva2VlcAk9ICZjcG8KKyBsZXQgczpkaXJrZWVwCT0gZ2V0Y3dkKCkKKyBsZXQgczpnZGtlZXAJPSAmZ2QKKyBsZXQgczp0d2tlZXAJPSAmdHcKKyBzZXQgY2lubyA9Cisgc2V0IGNvbSAgPQorIHNldCBjcG8gLT1hQQorIHNldCBub2NpbiBub2FpCisgc2V0IHR3ICAgPTAKKyBpZiBoYXMoIndpbjMyIikgJiYgIWhhcygid2luOTUiKQorICBsZXQgczpzd2ZrZWVwPSAmc3dmCisgIHNldCBub3N3ZgorIiAgY2FsbCBEZWNobygic2V0dGluZyBzOnN3ZmtlZXAgdG8gPCIuJnN3Zi4iPiIpCisgZW5kaWYKKworIiBjYWxsIERyZXQoIk5ldE9wdGlvblNhdmUiKQorZW5kZnVuCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIE5ldE9wdGlvblJlc3RvcmU6IHJlc3RvcmUgb3B0aW9ucyB7e3sxCitmdW4hIHM6TmV0T3B0aW9uUmVzdG9yZSgpCisiIGNhbGwgRGZ1bmMoIk5ldE9wdGlvblJlc3RvcmUoKSIpCisKKyBsZXQgJmFpCT0gczphaWtlZXAKKyBsZXQgJmNpbgk9IHM6Y2lua2VlcAorIGxldCAmY2lubwk9IHM6Y2lub2tlZXAKKyBsZXQgJmNvbQk9IHM6Y29ta2VlcAorIGxldCAmY3BvCT0gczpjcG9rZWVwCisgZXhlICJsY2QgIi5zOmRpcmtlZXAKKyBsZXQgJmdkCT0gczpnZGtlZXAKKyBsZXQgJnR3CT0gczp0d2tlZXAKKyBpZiBleGlzdHMoInM6c3dma2VlcCIpCisgIGxldCAmc3dmPSBzOnN3ZmtlZXAKKyAgdW5sZXQgczpzd2ZrZWVwCisgZW5kaWYKKyB1bmxldCBzOmFpa2VlcAorIHVubGV0IHM6Y2lua2VlcAorIHVubGV0IHM6Y2lub2tlZXAKKyB1bmxldCBzOmNvbWtlZXAKKyB1bmxldCBzOmNwb2tlZXAKKyB1bmxldCBzOmdka2VlcAorIHVubGV0IHM6dHdrZWVwCisgdW5sZXQgczpkaXJrZWVwCisKKyIgY2FsbCBEcmV0KCJOZXRPcHRpb25SZXN0b3JlIikKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBOZXRSZWFkRml4dXA6IHRoaXMgc29ydCBvZiBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgd3JpdHRlbiBieSB0aGUgdXNlciB7e3sxCisiCQl0byBoYW5kbGUgZXh0cmEganVuayB0aGF0IHRoZWlyIHN5c3RlbSdzIGZ0cCBkdW1wcworIgkJaW50byB0aGUgdHJhbnNmZXIuICBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGFzIGFuCisiCQlleGFtcGxlIGFuZCBhcyBhIGZpeCBmb3IgYSBXaW5kb3dzIDk1IHByb2JsZW06IGluIG15CisiCQlleHBlcmllbmNlLCB3aW45NSdzIGZ0cCBhbHdheXMgZHVtcGVkIGZvdXIgYmxhbmsgbGluZXMKKyIJCWF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyLgoraWYgaGFzKCJ3aW45NSIpICYmIGc6bmV0cndfd2luOTVmdHAKKyBmdW4hIE5ldFJlYWRGaXh1cChtZXRob2QsIGxpbmUxLCBsaW5lMikKKyIgICBjYWxsIERmdW5jKCJOZXRSZWFkRml4dXAobWV0aG9kPCIuYTptZXRob2QuIj4gbGluZTE9Ii5hOmxpbmUxLiIgbGluZTI9Ii5hOmxpbmUyLiIpIikKKyAgIGlmIG1ldGhvZCA9PSAzICAgIiBmdHAgKG5vIDwubmV0cmM+KQorICAgIGxldCBmb3VyYmxhbmtsaW5lcz0gbGluZTIgLSAzCisgICAgc2lsZW50IGZvdXJibGFua2xpbmVzLiIsIi5saW5lMi4iZy9eXHMqL2QiCisgICBlbmRpZgorIiAgIGNhbGwgRHJldCgiTmV0UmVhZEZpeHVwIikKKyBlbmRmdW4KK2VuZGlmCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFJlc3RvcmUge3t7MQorbGV0ICZjcG89IHM6c2F2ZV9jcG8KK3VubGV0IHM6c2F2ZV9jcG8KKyIgdmltOnRzPTggZmRtPW1hcmtlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wbHVnaW4vcnJoZWxwZXIudmltIGIvcnVudGltZS9wbHVnaW4vcnJoZWxwZXIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDkwYjUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3BsdWdpbi9ycmhlbHBlci52aW0KQEAgLTAsMCArMSw0NyBAQAorIiBWaW0gcGx1Z2luIHdpdGggaGVscGVyIGZ1bmN0aW9uKHMpIGZvciAtLXJlbW90ZS13YWl0CisiIE1haW50YWluZXI6IEZsZW1taW5nIE1hZHNlbiA8Zm1hQGNjaS5kaz4KKyIgTGFzdCBDaGFuZ2U6IDIwMDQgTWF5IDMwCisKKyIgSGFzIHRoaXMgYWxyZWFkeSBiZWVuIGxvYWRlZD8KK2lmIGV4aXN0cygibG9hZGVkX3JyaGVscGVyIikKKyAgZmluaXNoCitlbmRpZgorbGV0IGxvYWRlZF9ycmhlbHBlciA9IDEKKworIiBTZXR1cCBhbnN3ZXJzIGZvciBhIC0tcmVtb3RlLXdhaXQgY2xpZW50IHdobyB3aWxsIGFzc3VtZQorIiBhIFNldHVwUmVtb3RlUmVwbGllcygpIGZ1bmN0aW9uIGluIHRoZSBjb21tYW5kIHNlcnZlcgorCitpZiBoYXMoImNsaWVudHNlcnZlciIpCisgIGZ1bmN0aW9uIFNldHVwUmVtb3RlUmVwbGllcygpCisgICAgbGV0IGNudCA9IDAKKyAgICBsZXQgbWF4ID0gYXJnYygpCisKKyAgICBsZXQgaWQgPSBleHBhbmQoIjxjbGllbnQ+IikKKyAgICBpZiBpZCA9PSAwCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIHdoaWxlIGNudCA8IG1heAorICAgICAgIiBIYW5kbGUgc2FtZSBmaWxlIGZyb20gbW9yZSBjbGllbnRzIGFuZCBmaWxlIGJlaW5nIG1vcmUgdGhhbiBvbmNlCisgICAgICAiIG9uIHRoZSBjb21tYW5kIGxpbmUgYnkgZW5jb2RpbmcgdGhpcyBzdHVmZiBpbiB0aGUgZ3JvdXAgbmFtZQorICAgICAgbGV0IHVuaXF1ZUdyb3VwID0gIlJlbW90ZVJlcGx5XyIuaWQuIl8iLmNudAorCisgICAgICAiIFBhdGggc2VwYXJhdG9ycyBhcmUgYWx3YXlzIGZvcndhcmQgc2xhc2hlcyBmb3IgdGhlIGF1dG9jb21tYW5kIHBhdHRlcm4uCisgICAgICAiIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgd2l0aCBhIGJhY2tzbGFzaC4KKyAgICAgIGxldCBmID0gZXNjYXBlKHN1YnN0aXR1dGUoYXJndihjbnQpLCAnXFwnLCAnLycsICJnIiksICcgKiw/W3snKQorICAgICAgZXhlY3V0ZSAiYXVncm91cCAiLnVuaXF1ZUdyb3VwCisgICAgICBleGVjdXRlICJhdXRvY21kICIudW5pcXVlR3JvdXAuIiBCdWZVbmxvYWQgIi4gZiAuIiAgY2FsbCBEb1JlbW90ZVJlcGx5KCciLmlkLiInLCAnIi5jbnQuIicsICciLnVuaXF1ZUdyb3VwLiInLCAnIi4gZiAuIicpIgorICAgICAgbGV0IGNudCA9IGNudCArIDEKKyAgICBlbmR3aGlsZQorICAgIGF1Z3JvdXAgRU5ECisgIGVuZGZ1bmMKKworICBmdW5jdGlvbiBEb1JlbW90ZVJlcGx5KGlkLCBjbnQsIGdyb3VwLCBmaWxlKQorICAgIGNhbGwgc2VydmVyMmNsaWVudChhOmlkLCBhOmNudCkKKyAgICBleGVjdXRlICdhdXRvY21kISAnLmE6Z3JvdXAuJyBCdWZVbmxvYWQgJy5hOmZpbGUKKyAgICBleGVjdXRlICdhdWdyb3VwISAnLmE6Z3JvdXAKKyAgZW5kZnVuYworCitlbmRpZgorCisKKyIgdmltOiBzZXQgc3c9MiBzdHM9MiA6CmRpZmYgLS1naXQgYS9ydW50aW1lL3BsdWdpbi90b2h0bWwudmltIGIvcnVudGltZS9wbHVnaW4vdG9odG1sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTE0YmVkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9wbHVnaW4vdG9odG1sLnZpbQpAQCAtMCwwICsxLDI3IEBACisiIFZpbSBwbHVnaW4gZm9yIGNvbnZlcnRpbmcgYSBzeW50YXggaGlnaGxpZ2h0ZWQgZmlsZSB0byBIVE1MLgorIiBNYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZTogMjAwMyBBcHIgMDYKKworIiBEb24ndCBkbyB0aGlzIHdoZW46CisiIC0gd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0CisiIC0gdGhpcyBwbHVnaW4gd2FzIGFscmVhZHkgbG9hZGVkCisiIC0gdXNlciBjb21tYW5kcyBhcmUgbm90IGF2YWlsYWJsZS4KK2lmICEmY3AgJiYgIWV4aXN0cygiOlRPaHRtbCIpICYmIGhhcygidXNlcl9jb21tYW5kcyIpCisgIGNvbW1hbmQgLXJhbmdlPSUgVE9odG1sIDpjYWxsIENvbnZlcnQySFRNTCg8bGluZTE+LCA8bGluZTI+KQorCisgIGZ1bmMgQ29udmVydDJIVE1MKGxpbmUxLCBsaW5lMikKKyAgICBpZiBhOmxpbmUyID49IGE6bGluZTEKKyAgICAgIGxldCBnOmh0bWxfc3RhcnRfbGluZSA9IGE6bGluZTEKKyAgICAgIGxldCBnOmh0bWxfZW5kX2xpbmUgPSBhOmxpbmUyCisgICAgZWxzZQorICAgICAgbGV0IGc6aHRtbF9zdGFydF9saW5lID0gYTpsaW5lMgorICAgICAgbGV0IGc6aHRtbF9lbmRfbGluZSA9IGE6bGluZTEKKyAgICBlbmRpZgorCisgICAgcnVudGltZSBzeW50YXgvMmh0bWwudmltCisKKyAgICB1bmxldCBnOmh0bWxfc3RhcnRfbGluZQorICAgIHVubGV0IGc6aHRtbF9lbmRfbGluZQorICBlbmRmdW5jCisKK2VuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL3ByaW50L2NwMTI1MC5wcyBiL3J1bnRpbWUvcHJpbnQvY3AxMjUwLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNzMzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2NwMTI1MC5wcwpAQCAtMCwwICsxLDQwIEBACislIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1FbmNvZGluZworJSVUaXRsZTogVklNLWNwMTI1MAorJSVWZXJzaW9uOiAxLjAgMAorJSVFbmRDb21tZW50cworL1ZJTS1jcDEyNTBbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL3RpbGRlIC8ubm90ZGVmCisvRXVybyAvLm5vdGRlZiAvcXVvdGVzaW5nbGJhc2UgLy5ub3RkZWYgL3F1b3RlZGJsYmFzZSAvZWxsaXBzaXMgL2RhZ2dlciAvZGFnZ2VyZGJsCisvLm5vdGRlZiAvcGVydGhvdXNhbmQgL1NjYXJvbiAvZ3VpbHNpbmdsbGVmdCAvU2FjdXRlIC9UY2Fyb24gL1pjYXJvbiAvWmFjdXRlCisvLm5vdGRlZiAvcXVvdGVsZWZ0IC9xdW90ZXJpZ2h0IC9xdW90ZWRibGxlZnQgL3F1b3RlZGJscmlnaHQgL2J1bGxldCAvZW5kYXNoIC9lbWRhc2gKKy8ubm90ZGVmIC90cmFkZW1hcmsgL3NjYXJvbiAvZ3VpbHNpbmdscmlnaHQgL3NhY3V0ZSAvdGNhcm9uIC96Y2Fyb24gL3phY3V0ZQorL3NwYWNlIC9jYXJvbiAvYnJldmUgL0xzbGFzaCAvY3VycmVuY3kgL0FvZ29uZWsgL2Jyb2tlbmJhciAvc2VjdGlvbgorL2RpZXJlc2lzIC9jb3B5cmlnaHQgL1NjZWRpbGxhIC9ndWlsbGVtb3RsZWZ0IC9sb2dpY2Fsbm90IC9oeXBoZW4gL3JlZ2lzdGVyZWQgL1pkb3RhY2NlbnQKKy9kZWdyZWUgL3BsdXNtaW51cyAvb2dvbmVrIC9sc2xhc2ggL2FjdXRlIC9tdSAvcGFyYWdyYXBoIC9wZXJpb2RjZW50ZXJlZAorL2NlZGlsbGEgL2FvZ29uZWsgL3NjZWRpbGxhIC9ndWlsbGVtb3RyaWdodCAvTGNhcm9uIC9odW5nYXJ1bWxhdXQgL2xjYXJvbiAvemRvdGFjY2VudAorL1JhY3V0ZSAvQWFjdXRlIC9BY2lyY3VtZmxleCAvQWJyZXZlIC9BZGllcmVzaXMgL0xhY3V0ZSAvQ2FjdXRlIC9DY2VkaWxsYQorL0NjYXJvbiAvRWFjdXRlIC9Fb2dvbmVrIC9FZGllcmVzaXMgL0VjYXJvbiAvSWFjdXRlIC9JY2lyY3VtZmxleCAvRGNhcm9uCisvRGNyb2F0IC9OYWN1dGUgL05jYXJvbiAvT2FjdXRlIC9PY2lyY3VtZmxleCAvT2h1bmdhcnVtbGF1dCAvT2RpZXJlc2lzIC9tdWx0aXBseQorL1JjYXJvbiAvVXJpbmcgL1VhY3V0ZSAvVWh1bmdhcnVtbGF1dCAvVWRpZXJlc2lzIC9ZYWN1dGUgL1RjZWRpbGxhIC9nZXJtYW5kYmxzCisvcmFjdXRlIC9hYWN1dGUgL2FjaXJjdW1mbGV4IC9hYnJldmUgL2FkaWVyZXNpcyAvbGFjdXRlIC9jYWN1dGUgL2NjZWRpbGxhCisvY2Nhcm9uIC9lYWN1dGUgL2VvZ29uZWsgL2VkaWVyZXNpcyAvZWNhcm9uIC9pYWN1dGUgL2ljaXJjdW1mbGV4IC9kY2Fyb24KKy9kY3JvYXQgL25hY3V0ZSAvbmNhcm9uIC9vYWN1dGUgL29jaXJjdW1mbGV4IC9vaHVuZ2FydW1sYXV0IC9vZGllcmVzaXMgL2RpdmlkZQorL3JjYXJvbiAvdXJpbmcgL3VhY3V0ZSAvdWh1bmdhcnVtbGF1dCAvdWRpZXJlc2lzIC95YWN1dGUgL3RjZWRpbGxhIC9kb3RhY2NlbnRdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvY3AxMjUxLnBzIGIvcnVudGltZS9wcmludC9jcDEyNTEucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzNzUwNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcHJpbnQvY3AxMjUxLnBzCkBAIC0wLDAgKzEsNDAgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0tY3AxMjUxCislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWNwMTI1MVsKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2V4Y2xhbSAvcXVvdGVkYmwgL251bWJlcnNpZ24gL2RvbGxhciAvcGVyY2VudCAvYW1wZXJzYW5kIC9xdW90ZXNpbmdsZQorL3BhcmVubGVmdCAvcGFyZW5yaWdodCAvYXN0ZXJpc2sgL3BsdXMgL2NvbW1hIC9taW51cyAvcGVyaW9kIC9zbGFzaAorL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorL2VpZ2h0IC9uaW5lIC9jb2xvbiAvc2VtaWNvbG9uIC9sZXNzIC9lcXVhbCAvZ3JlYXRlciAvcXVlc3Rpb24KKy9hdCAvQSAvQiAvQyAvRCAvRSAvRiAvRworL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKy9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisvWCAvWSAvWiAvYnJhY2tldGxlZnQgL2JhY2tzbGFzaCAvYnJhY2tldHJpZ2h0IC9hc2NpaWNpcmN1bSAvdW5kZXJzY29yZQorL2dyYXZlIC9hIC9iIC9jIC9kIC9lIC9mIC9nCisvaCAvaSAvaiAvayAvbCAvbSAvbiAvbworL3AgL3EgL3IgL3MgL3QgL3UgL3YgL3cKKy94IC95IC96IC9icmFjZWxlZnQgL2JhciAvYnJhY2VyaWdodCAvYXNjaWl0aWxkZSAvLm5vdGRlZgorL2FmaWkxMDA1MSAvYWZpaTEwMDUyIC9xdW90ZXNpbmdsYmFzZSAvYWZpaTEwMTAwIC9xdW90ZWRibGJhc2UgL2VsbGlwc2lzIC9kYWdnZXIgL2RhZ2dlcmRibAorL0V1cm8gL3BlcnRob3VzYW5kIC9hZmlpMTAwNTggL2d1aWxzaW5nbGxlZnQgL2FmaWkxMDA1OSAvYWZpaTEwMDYxIC9hZmlpMTAwNjAgL2FmaWkxMDE0NQorL2FmaWkxMDA5OSAvcXVvdGVsZWZ0IC9xdW90ZXJpZ2h0IC9xdW90ZWRibGxlZnQgL3F1b3RlZGJscmlnaHQgL2J1bGxldCAvZW5kYXNoIC9lbWRhc2gKKy8ubm90ZGVmIC90cmFkZW1hcmsgL2FmaWkxMDEwNiAvZ3VpbHNpbmdscmlnaHQgL2FmaWkxMDEwNyAvYWZpaTEwMTA5IC9hZmlpMTAxMDggL2FmaWkxMDE5MworL3NwYWNlIC9hZmlpMTAwNjIgL2FmaWkxMDExMCAvYWZpaTEwMDU3IC9jdXJyZW5jeSAvYWZpaTEwMDUwIC9icm9rZW5iYXIgL3NlY3Rpb24KKy9hZmlpMTAwMjMgL2NvcHlyaWdodCAvYWZpaTEwMDUzIC9ndWlsbGVtb3RsZWZ0IC9sb2dpY2Fsbm90IC9oeXBoZW4gL3JlZ2lzdGVyZWQgL2FmaWkxMDA1NgorL2RlZ3JlZSAvcGx1c21pbnVzIC9hZmlpMTAwNTUgL2FmaWkxMDEwMyAvYWZpaTEwMDk4IC9tdSAvcGFyYWdyYXBoIC9wZXJpb2RjZW50ZXJlZAorL2FmaWkxMDA3MSAvYWZpaTYxMzUyIC9hZmlpMTAxMDEgL2d1aWxsZW1vdHJpZ2h0IC9hZmlpMTAxMDUgL2FmaWkxMDA1NCAvYWZpaTEwMTAyIC9hZmlpMTAxMDQKKy9hZmlpMTAwMTcgL2FmaWkxMDAxOCAvYWZpaTEwMDE5IC9hZmlpMTAwMjAgL2FmaWkxMDAyMSAvYWZpaTEwMDIyIC9hZmlpMTAwMjQgL2FmaWkxMDAyNQorL2FmaWkxMDAyNiAvYWZpaTEwMDI3IC9hZmlpMTAwMjggL2FmaWkxMDAyOSAvYWZpaTEwMDMwIC9hZmlpMTAwMzEgL2FmaWkxMDAzMiAvYWZpaTEwMDMzCisvYWZpaTEwMDM0IC9hZmlpMTAwMzUgL2FmaWkxMDAzNiAvYWZpaTEwMDM3IC9hZmlpMTAwMzggL2FmaWkxMDAzOSAvYWZpaTEwMDQwIC9hZmlpMTAwNDEKKy9hZmlpMTAwNDIgL2FmaWkxMDA0MyAvYWZpaTEwMDQ0IC9hZmlpMTAwNDUgL2FmaWkxMDA0NiAvYWZpaTEwMDQ3IC9hZmlpMTAwNDggL2FmaWkxMDA0OQorL2FmaWkxMDA2NSAvYWZpaTEwMDY2IC9hZmlpMTAwNjcgL2FmaWkxMDA2OCAvYWZpaTEwMDY5IC9hZmlpMTAwNzAgL2FmaWkxMDA3MiAvYWZpaTEwMDczCisvYWZpaTEwMDc0IC9hZmlpMTAwNzUgL2FmaWkxMDA3NiAvYWZpaTEwMDc3IC9hZmlpMTAwNzggL2FmaWkxMDA3OSAvYWZpaTEwMDgwIC9hZmlpMTAwODEKKy9hZmlpMTAwODIgL2FmaWkxMDA4MyAvYWZpaTEwMDg0IC9hZmlpMTAwODUgL2FmaWkxMDA4NiAvYWZpaTEwMDg3IC9hZmlpMTAwODggL2FmaWkxMDA4OQorL2FmaWkxMDA5MCAvYWZpaTEwMDkxIC9hZmlpMTAwOTIgL2FmaWkxMDA5MyAvYWZpaTEwMDk0IC9hZmlpMTAwOTUgL2FmaWkxMDA5NiAvYWZpaTEwMDk3XQorL0VuY29kaW5nIGRlZmluZXJlc291cmNlIHBvcAorJSB2aW06ZmY9dW5peDoKKyUlRU9GCmRpZmYgLS1naXQgYS9ydW50aW1lL3ByaW50L2NwMTI1Mi5wcyBiL3J1bnRpbWUvcHJpbnQvY3AxMjUyLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZGQ3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2NwMTI1Mi5wcwpAQCAtMCwwICsxLDQwIEBACislIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1FbmNvZGluZworJSVUaXRsZTogVklNLWNwMTI1MgorJSVWZXJzaW9uOiAxLjAgMAorJSVFbmRDb21tZW50cworL1ZJTS1jcDEyNTJbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy9FdXJvIC8ubm90ZGVmIC9xdW90ZXNpbmdsYmFzZSAvZmxvcmluIC9xdW90ZWRibGJhc2UgL2VsbGlwc2lzIC9kYWdnZXIgL2RhZ2dlcmRibAorL2NpcmN1bWZsZXggL3BlcnRob3VzYW5kIC9TY2Fyb24gL2d1aWxzaW5nbGxlZnQgL09FIC8ubm90ZGVmIC9aY2Fyb24gLy5ub3RkZWYKKy8ubm90ZGVmIC9xdW90ZWxlZnQgL3F1b3RlcmlnaHQgL3F1b3RlZGJsbGVmdCAvcXVvdGVkYmxyaWdodCAvYnVsbGV0IC9lbmRhc2ggL2VtZGFzaAorL3RpbGRlIC90cmFkZW1hcmsgL3NjYXJvbiAvZ3VpbHNpbmdscmlnaHQgL29lIC8ubm90ZGVmIC96Y2Fyb24gL1lkaWVyZXNpcworL3NwYWNlIC9leGNsYW1kb3duIC9jZW50IC9zdGVybGluZyAvY3VycmVuY3kgL3llbiAvYnJva2VuYmFyIC9zZWN0aW9uCisvZGllcmVzaXMgL2NvcHlyaWdodCAvb3JkZmVtaW5pbmUgL2d1aWxsZW1vdGxlZnQgL2xvZ2ljYWxub3QgL2h5cGhlbiAvcmVnaXN0ZXJlZCAvbWFjcm9uCisvZGVncmVlIC9wbHVzbWludXMgL3R3b3N1cGVyaW9yIC90aHJlZXN1cGVyaW9yIC9hY3V0ZSAvbXUgL3BhcmFncmFwaCAvcGVyaW9kY2VudGVyZWQKKy9jZWRpbGxhIC9vbmVzdXBlcmlvciAvb3JkbWFzY3VsaW5lIC9ndWlsbGVtb3RyaWdodCAvb25lcXVhcnRlciAvb25laGFsZiAvdGhyZWVxdWFydGVycyAvcXVlc3Rpb25kb3duCisvQWdyYXZlIC9BYWN1dGUgL0FjaXJjdW1mbGV4IC9BdGlsZGUgL0FkaWVyZXNpcyAvQXJpbmcgL0FFIC9DY2VkaWxsYQorL0VncmF2ZSAvRWFjdXRlIC9FY2lyY3VtZmxleCAvRWRpZXJlc2lzIC9JZ3JhdmUgL0lhY3V0ZSAvSWNpcmN1bWZsZXggL0lkaWVyZXNpcworL0V0aCAvTnRpbGRlIC9PZ3JhdmUgL09hY3V0ZSAvT2NpcmN1bWZsZXggL090aWxkZSAvT2RpZXJlc2lzIC9tdWx0aXBseQorL09zbGFzaCAvVWdyYXZlIC9VYWN1dGUgL1VjaXJjdW1mbGV4IC9VZGllcmVzaXMgL1lhY3V0ZSAvVGhvcm4gL2dlcm1hbmRibHMKKy9hZ3JhdmUgL2FhY3V0ZSAvYWNpcmN1bWZsZXggL2F0aWxkZSAvYWRpZXJlc2lzIC9hcmluZyAvYWUgL2NjZWRpbGxhCisvZWdyYXZlIC9lYWN1dGUgL2VjaXJjdW1mbGV4IC9lZGllcmVzaXMgL2lncmF2ZSAvaWFjdXRlIC9pY2lyY3VtZmxleCAvaWRpZXJlc2lzCisvZXRoIC9udGlsZGUgL29ncmF2ZSAvb2FjdXRlIC9vY2lyY3VtZmxleCAvb3RpbGRlIC9vZGllcmVzaXMgL2RpdmlkZQorL29zbGFzaCAvdWdyYXZlIC91YWN1dGUgL3VjaXJjdW1mbGV4IC91ZGllcmVzaXMgL3lhY3V0ZSAvdGhvcm4gL3lkaWVyZXNpc10KKy9FbmNvZGluZyBkZWZpbmVyZXNvdXJjZSBwb3AKKyUgdmltOmZmPXVuaXg6CislJUVPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9jcDEyNTMucHMgYi9ydW50aW1lL3ByaW50L2NwMTI1My5wcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDgyMjMyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9wcmludC9jcDEyNTMucHMKQEAgLTAsMCArMSw0MCBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1jcDEyNTMKKyUlVmVyc2lvbjogMS4wIDAKKyUlRW5kQ29tbWVudHMKKy9WSU0tY3AxMjUzWworLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy9zcGFjZSAvZXhjbGFtIC9xdW90ZWRibCAvbnVtYmVyc2lnbiAvZG9sbGFyIC9wZXJjZW50IC9hbXBlcnNhbmQgL3F1b3Rlc2luZ2xlCisvcGFyZW5sZWZ0IC9wYXJlbnJpZ2h0IC9hc3RlcmlzayAvcGx1cyAvY29tbWEgL21pbnVzIC9wZXJpb2QgL3NsYXNoCisvemVybyAvb25lIC90d28gL3RocmVlIC9mb3VyIC9maXZlIC9zaXggL3NldmVuCisvZWlnaHQgL25pbmUgL2NvbG9uIC9zZW1pY29sb24gL2xlc3MgL2VxdWFsIC9ncmVhdGVyIC9xdWVzdGlvbgorL2F0IC9BIC9CIC9DIC9EIC9FIC9GIC9HCisvSCAvSSAvSiAvSyAvTCAvTSAvTiAvTworL1AgL1EgL1IgL1MgL1QgL1UgL1YgL1cKKy9YIC9ZIC9aIC9icmFja2V0bGVmdCAvYmFja3NsYXNoIC9icmFja2V0cmlnaHQgL2FzY2lpY2lyY3VtIC91bmRlcnNjb3JlCisvZ3JhdmUgL2EgL2IgL2MgL2QgL2UgL2YgL2cKKy9oIC9pIC9qIC9rIC9sIC9tIC9uIC9vCisvcCAvcSAvciAvcyAvdCAvdSAvdiAvdworL3ggL3kgL3ogL2JyYWNlbGVmdCAvYmFyIC9icmFjZXJpZ2h0IC9hc2NpaXRpbGRlIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvcXVvdGVzaW5nbGJhc2UgL2Zsb3JpbiAvcXVvdGVkYmxiYXNlIC9lbGxpcHNpcyAvZGFnZ2VyIC9kYWdnZXJkYmwKKy8ubm90ZGVmIC9wZXJ0aG91c2FuZCAvLm5vdGRlZiAvZ3VpbHNpbmdsbGVmdCAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgL3F1b3RlbGVmdCAvcXVvdGVyaWdodCAvcXVvdGVkYmxsZWZ0IC9xdW90ZWRibHJpZ2h0IC9idWxsZXQgL2VuZGFzaCAvZW1kYXNoCisvLm5vdGRlZiAvdHJhZGVtYXJrIC8ubm90ZGVmIC9ndWlsc2luZ2xyaWdodCAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9kaWVyZXNpc3Rvbm9zIC9BbHBoYXRvbm9zIC9zdGVybGluZyAvY3VycmVuY3kgL3llbiAvYnJva2VuYmFyIC9zZWN0aW9uCisvZGllcmVzaXMgL2NvcHlyaWdodCAvb3JkZmVtaW5pbmUgL2d1aWxsZW1vdGxlZnQgL2xvZ2ljYWxub3QgL2h5cGhlbiAvcmVnaXN0ZXJlZCAvZW1kYXNoCisvZGVncmVlIC9wbHVzbWludXMgL3R3b3N1cGVyaW9yIC90aHJlZXN1cGVyaW9yIC90b25vcyAvbXUgL3BhcmFncmFwaCAvcGVyaW9kY2VudGVyZWQKKy9FcHNpbG9udG9ub3MgL0V0YXRvbm9zIC9Jb3RhdG9ub3MgL2d1aWxsZW1vdHJpZ2h0IC9PbWljcm9udG9ub3MgL29uZWhhbGYgL1Vwc2lsb250b25vcyAvT21lZ2F0b25vcworL2lvdGFkaWVyZXNpc3Rvbm9zIC9BbHBoYSAvQmV0YSAvR2FtbWEgL0RlbHRhIC9FcHNpbG9uIC9aZXRhIC9FdGEKKy9UaGV0YSAvSW90YSAvS2FwcGEgL0xhbWJkYSAvTXUgL051IC9YaSAvT21pY3JvbgorL1BpIC9SaG8gLy5ub3RkZWYgL1NpZ21hIC9UYXUgL1Vwc2lsb24gL1BoaSAvQ2hpCisvUHNpIC9PbWVnYSAvSW90YWRpZXJlc2lzIC9VcHNpbG9uZGllcmVzaXMgL2FscGhhdG9ub3MgL2Vwc2lsb250b25vcyAvZXRhdG9ub3MgL2lvdGF0b25vcworL3Vwc2lsb25kaWVyZXNpc3Rvbm9zIC9hbHBoYSAvYmV0YSAvZ2FtbWEgL2RlbHRhIC9lcHNpbG9uIC96ZXRhIC9ldGEKKy90aGV0YSAvaW90YSAva2FwcGEgL2xhbWJkYSAvbXUgL251IC94aSAvb21pY3JvbgorL3BpIC9yaG8gL3NpZ21hMSAvc2lnbWEgL3RhdSAvdXBzaWxvbiAvcGhpIC9jaGkKKy9wc2kgL29tZWdhIC9pb3RhZGllcmVzaXMgL3Vwc2lsb25kaWVyZXNpcyAvb21pY3JvbnRvbm9zIC91cHNpbG9udG9ub3MgL29tZWdhdG9ub3MgLy5ub3RkZWZdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvY3AxMjU0LnBzIGIvcnVudGltZS9wcmludC9jcDEyNTQucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlN2U0NwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcHJpbnQvY3AxMjU0LnBzCkBAIC0wLDAgKzEsNDAgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0tY3AxMjU0CislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWNwMTI1NFsKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2V4Y2xhbSAvcXVvdGVkYmwgL251bWJlcnNpZ24gL2RvbGxhciAvcGVyY2VudCAvYW1wZXJzYW5kIC9xdW90ZXNpbmdsZQorL3BhcmVubGVmdCAvcGFyZW5yaWdodCAvYXN0ZXJpc2sgL3BsdXMgL2NvbW1hIC9taW51cyAvcGVyaW9kIC9zbGFzaAorL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorL2VpZ2h0IC9uaW5lIC9jb2xvbiAvc2VtaWNvbG9uIC9sZXNzIC9lcXVhbCAvZ3JlYXRlciAvcXVlc3Rpb24KKy9hdCAvQSAvQiAvQyAvRCAvRSAvRiAvRworL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKy9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisvWCAvWSAvWiAvYnJhY2tldGxlZnQgL2JhY2tzbGFzaCAvYnJhY2tldHJpZ2h0IC9hc2NpaWNpcmN1bSAvdW5kZXJzY29yZQorL2dyYXZlIC9hIC9iIC9jIC9kIC9lIC9mIC9nCisvaCAvaSAvaiAvayAvbCAvbSAvbiAvbworL3AgL3EgL3IgL3MgL3QgL3UgL3YgL3cKKy94IC95IC96IC9icmFjZWxlZnQgL2JhciAvYnJhY2VyaWdodCAvYXNjaWl0aWxkZSAvLm5vdGRlZgorL0V1cm8gLy5ub3RkZWYgL3F1b3Rlc2luZ2xiYXNlIC9mbG9yaW4gL3F1b3RlZGJsYmFzZSAvZWxsaXBzaXMgL2RhZ2dlciAvZGFnZ2VyZGJsCisvY2lyY3VtZmxleCAvcGVydGhvdXNhbmQgL1NjYXJvbiAvZ3VpbHNpbmdsbGVmdCAvT0UgLy5ub3RkZWYgL1pjYXJvbiAvLm5vdGRlZgorLy5ub3RkZWYgL3F1b3RlbGVmdCAvcXVvdGVyaWdodCAvcXVvdGVkYmxsZWZ0IC9xdW90ZWRibHJpZ2h0IC9idWxsZXQgL2VuZGFzaCAvZW1kYXNoCisvdGlsZGUgL3RyYWRlbWFyayAvc2Nhcm9uIC9ndWlsc2luZ2xyaWdodCAvb2UgLy5ub3RkZWYgL3pjYXJvbiAvWWRpZXJlc2lzCisvc3BhY2UgL2V4Y2xhbWRvd24gL2NlbnQgL3N0ZXJsaW5nIC9jdXJyZW5jeSAveWVuIC9icm9rZW5iYXIgL3NlY3Rpb24KKy9kaWVyZXNpcyAvY29weXJpZ2h0IC9vcmRmZW1pbmluZSAvZ3VpbGxlbW90bGVmdCAvbG9naWNhbG5vdCAvaHlwaGVuIC9yZWdpc3RlcmVkIC9tYWNyb24KKy9kZWdyZWUgL3BsdXNtaW51cyAvdHdvc3VwZXJpb3IgL3RocmVlc3VwZXJpb3IgL2FjdXRlIC9tdSAvcGFyYWdyYXBoIC9wZXJpb2RjZW50ZXJlZAorL2NlZGlsbGEgL29uZXN1cGVyaW9yIC9vcmRtYXNjdWxpbmUgL2d1aWxsZW1vdHJpZ2h0IC9vbmVxdWFydGVyIC9vbmVoYWxmIC90aHJlZXF1YXJ0ZXJzIC9xdWVzdGlvbmRvd24KKy9BZ3JhdmUgL0FhY3V0ZSAvQWNpcmN1bWZsZXggL0F0aWxkZSAvQWRpZXJlc2lzIC9BcmluZyAvQUUgL0NjZWRpbGxhCisvRWdyYXZlIC9FYWN1dGUgL0VjaXJjdW1mbGV4IC9FZGllcmVzaXMgL0lncmF2ZSAvSWFjdXRlIC9JY2lyY3VtZmxleCAvSWRpZXJlc2lzCisvR2JyZXZlIC9OdGlsZGUgL09ncmF2ZSAvT2FjdXRlIC9PY2lyY3VtZmxleCAvT3RpbGRlIC9PZGllcmVzaXMgL211bHRpcGx5CisvT3NsYXNoIC9VZ3JhdmUgL1VhY3V0ZSAvVWNpcmN1bWZsZXggL1VkaWVyZXNpcyAvSWRvdGFjY2VudCAvU2NlZGlsbGEgL2dlcm1hbmRibHMKKy9hZ3JhdmUgL2FhY3V0ZSAvYWNpcmN1bWZsZXggL2F0aWxkZSAvYWRpZXJlc2lzIC9hcmluZyAvYWUgL2NjZWRpbGxhCisvZWdyYXZlIC9lYWN1dGUgL2VjaXJjdW1mbGV4IC9lZGllcmVzaXMgL2lncmF2ZSAvaWFjdXRlIC9pY2lyY3VtZmxleCAvaWRpZXJlc2lzCisvZ2JyZXZlIC9udGlsZGUgL29ncmF2ZSAvb2FjdXRlIC9vY2lyY3VtZmxleCAvb3RpbGRlIC9vZGllcmVzaXMgL2RpdmlkZQorL29zbGFzaCAvdWdyYXZlIC91YWN1dGUgL3VjaXJjdW1mbGV4IC91ZGllcmVzaXMgL2RvdGxlc3NpIC9zY2VkaWxsYSAveWRpZXJlc2lzXQorL0VuY29kaW5nIGRlZmluZXJlc291cmNlIHBvcAorJSB2aW06ZmY9dW5peDoKKyUlRU9GCmRpZmYgLS1naXQgYS9ydW50aW1lL3ByaW50L2NwMTI1NS5wcyBiL3J1bnRpbWUvcHJpbnQvY3AxMjU1LnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkODJmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2NwMTI1NS5wcwpAQCAtMCwwICsxLDQwIEBACislIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1FbmNvZGluZworJSVUaXRsZTogVklNLWNwMTI1NQorJSVWZXJzaW9uOiAxLjAgMAorJSVFbmRDb21tZW50cworL1ZJTS1jcDEyNTVbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC9xdW90ZXNpbmdsYmFzZSAvZmxvcmluIC9xdW90ZWRibGJhc2UgL2VsbGlwc2lzIC9kYWdnZXIgL2RhZ2dlcmRibAorL2NpcmN1bWZsZXggL3BlcnRob3VzYW5kIC8ubm90ZGVmIC9ndWlsc2luZ2xsZWZ0IC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvcXVvdGVsZWZ0IC9xdW90ZXJpZ2h0IC9xdW90ZWRibGxlZnQgL3F1b3RlZGJscmlnaHQgL2J1bGxldCAvZW5kYXNoIC9lbWRhc2gKKy90aWxkZSAvdHJhZGVtYXJrIC8ubm90ZGVmIC9ndWlsc2luZ2xyaWdodCAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC8ubm90ZGVmIC9jZW50IC9zdGVybGluZyAvbmV3c2hlcWVsc2lnbiAveWVuIC9icm9rZW5iYXIgL3NlY3Rpb24KKy9kaWVyZXNpcyAvY29weXJpZ2h0IC8ubm90ZGVmIC9ndWlsbGVtb3RsZWZ0IC9sb2dpY2Fsbm90IC9oeXBoZW4gL3JlZ2lzdGVyZWQgL21hY3JvbgorL2RlZ3JlZSAvcGx1c21pbnVzIC90d29zdXBlcmlvciAvdGhyZWVzdXBlcmlvciAvYWN1dGUgL211IC9wYXJhZ3JhcGggL3BlcmlvZGNlbnRlcmVkCisvLm5vdGRlZiAvb25lc3VwZXJpb3IgLy5ub3RkZWYgL2d1aWxsZW1vdHJpZ2h0IC9vbmVxdWFydGVyIC9vbmVoYWxmIC90aHJlZXF1YXJ0ZXJzIC8ubm90ZGVmCisvc2hldmEgL2hhdGFmc2Vnb2wgL2hhdGFmcGF0YWggL2hhdGFmcWFtYXRzIC9oaXJpcSAvdHNlcmUgL3NlZ29sIC9wYXRhaAorL3FhbWF0cyAvaG9sYW0gLy5ub3RkZWYgL3F1YnV0cyAvZGFnZXNoIC9tZXRlZyAvbWFxYWYgL3JhZmUKKy9wYXNlcSAvc2hpbmRvdCAvc2luZG90IC9zb2ZwYXN1cSAvZG91YmxldmF2IC92YXZ5b2QgL2RvdWJsZXlvZCAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy9hbGVmIC9iZXQgL2dpbWVsIC9kYWxldCAvaGUgL3ZhdiAvemF5aW4gL2hldAorL3RldCAveW9kIC9maW5hbGthZiAva2FmIC9sYW1lZCAvZmluYWxtZW0gL21lbSAvZmluYWxudW4KKy9udW4gL3NhbWVraCAvYXlpbiAvZmluYWxwZSAvcGUgL2ZpbmFsdHNhZGkgL3RzYWRpIC9xb2YKKy9yZXNoIC9zaGluIC90YXYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWZdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvY3AxMjU3LnBzIGIvcnVudGltZS9wcmludC9jcDEyNTcucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1ZDdhNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcHJpbnQvY3AxMjU3LnBzCkBAIC0wLDAgKzEsNDAgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0tY3AxMjU3CislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWNwMTI1N1sKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2V4Y2xhbSAvcXVvdGVkYmwgL251bWJlcnNpZ24gL2RvbGxhciAvcGVyY2VudCAvYW1wZXJzYW5kIC9xdW90ZXNpbmdsZQorL3BhcmVubGVmdCAvcGFyZW5yaWdodCAvYXN0ZXJpc2sgL3BsdXMgL2NvbW1hIC9taW51cyAvcGVyaW9kIC9zbGFzaAorL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorL2VpZ2h0IC9uaW5lIC9jb2xvbiAvc2VtaWNvbG9uIC9sZXNzIC9lcXVhbCAvZ3JlYXRlciAvcXVlc3Rpb24KKy9hdCAvQSAvQiAvQyAvRCAvRSAvRiAvRworL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKy9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisvWCAvWSAvWiAvYnJhY2tldGxlZnQgL2JhY2tzbGFzaCAvYnJhY2tldHJpZ2h0IC9hc2NpaWNpcmN1bSAvdW5kZXJzY29yZQorL2dyYXZlIC9hIC9iIC9jIC9kIC9lIC9mIC9nCisvaCAvaSAvaiAvayAvbCAvbSAvbiAvbworL3AgL3EgL3IgL3MgL3QgL3UgL3YgL3cKKy94IC95IC96IC9icmFjZWxlZnQgL2JhciAvYnJhY2VyaWdodCAvYXNjaWl0aWxkZSAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgL3F1b3Rlc2luZ2xiYXNlIC8ubm90ZGVmIC9xdW90ZWRibGJhc2UgL2VsbGlwc2lzIC9kYWdnZXIgL2RhZ2dlcmRibAorLy5ub3RkZWYgL3BlcnRob3VzYW5kIC8ubm90ZGVmIC9ndWlsc2luZ2xsZWZ0IC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvcXVvdGVsZWZ0IC9xdW90ZXJpZ2h0IC9xdW90ZWRibGxlZnQgL3F1b3RlZGJscmlnaHQgL2J1bGxldCAvZW5kYXNoIC9lbWRhc2gKKy8ubm90ZGVmIC90cmFkZW1hcmsgLy5ub3RkZWYgL2d1aWxzaW5nbHJpZ2h0IC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2Nhcm9uIC9icmV2ZSAvc3RlcmxpbmcgL2N1cnJlbmN5IC8ubm90ZGVmIC9icm9rZW5iYXIgL3NlY3Rpb24KKy9kaWVyZXNpcyAvY29weXJpZ2h0IC9SY2VkaWxsYSAvZ3VpbGxlbW90bGVmdCAvbG9naWNhbG5vdCAvaHlwaGVuIC9yZWdpc3RlcmVkIC9BRQorL2RlZ3JlZSAvcGx1c21pbnVzIC9vZ29uZWsgL3RocmVlc3VwZXJpb3IgL2FjdXRlIC9tdSAvcGFyYWdyYXBoIC9wZXJpb2RjZW50ZXJlZAorL2NlZGlsbGEgL29uZXN1cGVyaW9yIC9yY2VkaWxsYSAvZ3VpbGxlbW90cmlnaHQgL29uZXF1YXJ0ZXIgL29uZWhhbGYgL3RocmVlcXVhcnRlcnMgL2FlCisvQW9nb25layAvSW9nb25layAvQW1hY3JvbiAvQ2FjdXRlIC9BZGllcmVzaXMgL0FyaW5nIC9Fb2dvbmVrIC9FbWFjcm9uCisvQ2Nhcm9uIC9FYWN1dGUgL1phY3V0ZSAvRWRvdCAvR2NlZGlsbGEgL0tjZWRpbGxhIC9JbWFjcm9uIC9MY2VkaWxsYQorL1NjYXJvbiAvTmFjdXRlIC9OY2VkaWxsYSAvT2FjdXRlIC9PbWFjcm9uIC9PdGlsZGUgL09kaWVyZXNpcyAvbXVsdGlwbHkKKy9Vb2dvbmVrIC9Mc2xhc2ggL1NhY3V0ZSAvVW1hY3JvbiAvVWRpZXJlc2lzIC9aZG90YWNjZW50IC9aY2Fyb24gL2dlcm1hbmRibHMKKy9hb2dvbmVrIC9pb2dvbmVrIC9hbWFjcm9uIC9jYWN1dGUgL2FkaWVyZXNpcyAvYXJpbmcgL2VvZ29uZWsgL2VtYWNyb24KKy9jY2Fyb24gL2VhY3V0ZSAvemFjdXRlIC9lZG90IC9nY2VkaWxsYSAva2NlZGlsbGEgL2ltYWNyb24gL2xjZWRpbGxhCisvc2Nhcm9uIC9uYWN1dGUgL25jZWRpbGxhIC9vYWN1dGUgL29tYWNyb24gL290aWxkZSAvb2RpZXJlc2lzIC9kaXZpZGUKKy91b2dvbmVrIC9sc2xhc2ggL3NhY3V0ZSAvdW1hY3JvbiAvdWRpZXJlc2lzIC96ZG90YWNjZW50IC96Y2Fyb24gL2RvdGFjY2VudF0KKy9FbmNvZGluZyBkZWZpbmVyZXNvdXJjZSBwb3AKKyUgdmltOmZmPXVuaXg6CislJUVPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9kZWMtbWNzLnBzIGIvcnVudGltZS9wcmludC9kZWMtbWNzLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NzAyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2RlYy1tY3MucHMKQEAgLTAsMCArMSw0MCBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1kZWMtbWNzCislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWRlYy1tY3NbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvZXhjbGFtZG93biAvY2VudCAvc3RlcmxpbmcgLy5ub3RkZWYgL3llbiAvLm5vdGRlZiAvc2VjdGlvbgorL2N1cnJlbmN5IC9jb3B5cmlnaHQgL29yZGZlbWluaW5lIC9ndWlsbGVtb3RsZWZ0IC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvZGVncmVlIC9wbHVzbWludXMgL3R3b3N1cGVyaW9yIC90aHJlZXN1cGVyaW9yIC8ubm90ZGVmIC9tdSAvcGFyYWdyYXBoIC9wZXJpb2RjZW50ZXJlZAorLy5ub3RkZWYgL29uZXN1cGVyaW9yIC9vcmRtYXNjdWxpbmUgL2d1aWxsZW1vdHJpZ2h0IC9vbmVxdWFydGVyIC9vbmVoYWxmIC8ubm90ZGVmIC9xdWVzdGlvbmRvd24KKy9BZ3JhdmUgL0FhY3V0ZSAvQWNpcmN1bWZsZXggL0F0aWxkZSAvQWRpZXJlc2lzIC9BcmluZyAvQUUgL0NjZWRpbGxhCisvRWdyYXZlIC9FYWN1dGUgL0VjaXJjdW1mbGV4IC9FZGllcmVzaXMgL0lncmF2ZSAvSWFjdXRlIC9JY2lyY3VtZmxleCAvSWRpZXJlc2lzCisvLm5vdGRlZiAvTnRpbGRlIC9PZ3JhdmUgL09hY3V0ZSAvT2NpcmN1bWZsZXggL090aWxkZSAvT2RpZXJlc2lzIC9PRQorL09zbGFzaCAvVWdyYXZlIC9VYWN1dGUgL1VjaXJjdW1mbGV4IC9VZGllcmVzaXMgL1lkaWVyZXNpcyAvLm5vdGRlZiAvZ2VybWFuZGJscworL2FncmF2ZSAvYWFjdXRlIC9hY2lyY3VtZmxleCAvYXRpbGRlIC9hZGllcmVzaXMgL2FyaW5nIC9hZSAvY2NlZGlsbGEKKy9lZ3JhdmUgL2VhY3V0ZSAvZWNpcmN1bWZsZXggL2VkaWVyZXNpcyAvaWdyYXZlIC9pYWN1dGUgL2ljaXJjdW1mbGV4IC9pZGllcmVzaXMKKy8ubm90ZGVmIC9udGlsZGUgL29ncmF2ZSAvb2FjdXRlIC9vY2lyY3VtZmxleCAvb3RpbGRlIC9vZGllcmVzaXMgL29lCisvb3NsYXNoIC91Z3JhdmUgL3VhY3V0ZSAvdWNpcmN1bWZsZXggL3VkaWVyZXNpcyAveWRpZXJlc2lzIC8ubm90ZGVmIC8ubm90ZGVmXQorL0VuY29kaW5nIGRlZmluZXJlc291cmNlIHBvcAorJSB2aW06ZmY9dW5peDoKKyUlRU9GCmRpZmYgLS1naXQgYS9ydW50aW1lL3ByaW50L2ViY2RpYy11ay5wcyBiL3J1bnRpbWUvcHJpbnQvZWJjZGljLXVrLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNzAwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2ViY2RpYy11ay5wcwpAQCAtMCwwICsxLDQwIEBACislIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1FbmNvZGluZworJSVUaXRsZTogVklNLWViY2RpYy11aworJSVWZXJzaW9uOiAxLjAgMAorJSVFbmRDb21tZW50cworL1ZJTS1lYmNkaWMtdWtbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy9zcGFjZSAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgL2RvbGxhciAvcGVyaW9kIC9sZXNzIC9wYXJlbmxlZnQgL3BsdXMgL2JhcgorL2FtcGVyc2FuZCAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgL2V4Y2xhbSAvc3RlcmxpbmcgL2FzdGVyaXNrIC9wYXJlbnJpZ2h0IC9zZW1pY29sb24gL2xvZ2ljYWxub3QKKy9taW51cyAvc2xhc2ggLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC9icm9rZW5iYXIgL2NvbW1hIC9wZXJjZW50IC91bmRlcnNjb3JlIC9ncmVhdGVyIC9xdWVzdGlvbgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC9xdW90ZXJldmVyc2VkIC9jb2xvbiAvbnVtYmVyc2lnbiAvYXQgL3F1b3RlcmlnaHQgL2VxdWFsIC9xdW90ZWRibAorLy5ub3RkZWYgL2EgL2IgL2MgL2QgL2UgL2YgL2cKKy9oIC9pIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvaiAvayAvbCAvbSAvbiAvbyAvcAorL3EgL3IgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC9tYWNyb24gL3MgL3QgL3UgL3YgL3cgL3gKKy95IC96IC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy9icmFjZWxlZnQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvYnJhY2VyaWdodCAvSiAvSyAvTCAvTSAvTiAvTyAvUAorL1EgL1IgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy9iYWNrc2xhc2ggLy5ub3RkZWYgL1MgL1QgL1UgL1YgL1cgL1gKKy9ZIC9aIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvemVybyAvb25lIC90d28gL3RocmVlIC9mb3VyIC9maXZlIC9zaXggL3NldmVuCisvZWlnaHQgL25pbmUgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWZdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvaHAtcm9tYW44LnBzIGIvcnVudGltZS9wcmludC9ocC1yb21hbjgucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxYjg3NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcHJpbnQvaHAtcm9tYW44LnBzCkBAIC0wLDAgKzEsNDAgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0taHAtcm9tYW44CislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWhwLXJvbWFuOFsKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2V4Y2xhbSAvcXVvdGVkYmwgL251bWJlcnNpZ24gL2RvbGxhciAvcGVyY2VudCAvYW1wZXJzYW5kIC9xdW90ZXNpbmdsZQorL3BhcmVubGVmdCAvcGFyZW5yaWdodCAvYXN0ZXJpc2sgL3BsdXMgL2NvbW1hIC9taW51cyAvcGVyaW9kIC9zbGFzaAorL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorL2VpZ2h0IC9uaW5lIC9jb2xvbiAvc2VtaWNvbG9uIC9sZXNzIC9lcXVhbCAvZ3JlYXRlciAvcXVlc3Rpb24KKy9hdCAvQSAvQiAvQyAvRCAvRSAvRiAvRworL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKy9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisvWCAvWSAvWiAvYnJhY2tldGxlZnQgL2JhY2tzbGFzaCAvYnJhY2tldHJpZ2h0IC9hc2NpaWNpcmN1bSAvdW5kZXJzY29yZQorL2dyYXZlIC9hIC9iIC9jIC9kIC9lIC9mIC9nCisvaCAvaSAvaiAvayAvbCAvbSAvbiAvbworL3AgL3EgL3IgL3MgL3QgL3UgL3YgL3cKKy94IC95IC96IC9icmFjZWxlZnQgL2JhciAvYnJhY2VyaWdodCAvYXNjaWl0aWxkZSAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy9zcGFjZSAvQWdyYXZlIC9BY2lyY3VtZmxleCAvRWdyYXZlIC9FY2lyY3VtZmxleCAvRWRpZXJlc2lzIC9JY2lyY3VtZmxleCAvSWRpZXJlc2lzCisvYWN1dGUgL2dyYXZlIC9jaXJjdW1mbGV4IC9kaWVyZXNpcyAvdGlsZGUgL1VncmF2ZSAvVWNpcmN1bWZsZXggL2xpcmEKKy9tYWNyb24gL1lhY3V0ZSAveWFjdXRlIC9kZWdyZWUgL0NjZWRpbGxhIC9jY2VkaWxsYSAvTnRpbGRlIC9udGlsZGUKKy9leGNsYW1kb3duIC9xdWVzdGlvbmRvd24gL2N1cnJlbmN5IC9zdGVybGluZyAveWVuIC9zZWN0aW9uIC9mbG9yaW4gL2NlbnQKKy9hY2lyY3VtZmxleCAvZWNpcmN1bWZsZXggL29jaXJjdW1mbGV4IC91Y2lyY3VtZmxleCAvYWFjdXRlIC9lYWN1dGUgL29hY3V0ZSAvdWFjdXRlCisvYWdyYXZlIC9lZ3JhdmUgL29ncmF2ZSAvdWdyYXZlIC9hZGllcmVzaXMgL2VkaWVyZXNpcyAvb2RpZXJlc2lzIC91ZGllcmVzaXMKKy9BcmluZyAvaWNpcmN1bWZsZXggL09zbGFzaCAvQUUgL2FyaW5nIC9pYWN1dGUgL29zbGFzaCAvYWUKKy9BZGllcmVzaXMgL2lncmF2ZSAvT2RpZXJlc2lzIC9VZGllcmVzaXMgL0VhY3V0ZSAvaWRpZXJlc2lzIC9nZXJtYW5kYmxzIC9PY2lyY3VtZmxleAorL0FhY3V0ZSAvQXRpbGRlIC9hdGlsZGUgL0V0aCAvZXRoIC9JYWN1dGUgL0lncmF2ZSAvT2FjdXRlCisvT2dyYXZlIC9PdGlsZGUgL290aWxkZSAvU2Nhcm9uIC9zY2Fyb24gL1VhY3V0ZSAvWWRpZXJlc2lzIC95ZGllcmVzaXMKKy9UaG9ybiAvdGhvcm4gL3BlcmlvZGNlbnRlcmVkIC9tdSAvcGFyYWdyYXBoIC90aHJlZXF1YXJ0ZXJzIC9oeXBoZW4gL29uZXF1YXJ0ZXIKKy9vbmVoYWxmIC9vcmRmZW1pbmluZSAvb3JkbWFzY3VsaW5lIC9ndWlsbGVtb3RsZWZ0IC9maWxsZWRib3ggL2d1aWxsZW1vdHJpZ2h0IC9wbHVzbWludXMgLy5ub3RkZWZdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvaXNvLTg4NTktMTAucHMgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTEwLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOGUyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTEwLnBzCkBAIC0wLDAgKzEsNDAgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0taXNvLTg4NTktMTAKKyUlVmVyc2lvbjogMS4wIDAKKyUlRW5kQ29tbWVudHMKKy9WSU0taXNvLTg4NTktMTBbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvaHlwaGVuIC9wZXJpb2QgL3NsYXNoCisvemVybyAvb25lIC90d28gL3RocmVlIC9mb3VyIC9maXZlIC9zaXggL3NldmVuCisvZWlnaHQgL25pbmUgL2NvbG9uIC9zZW1pY29sb24gL2xlc3MgL2VxdWFsIC9ncmVhdGVyIC9xdWVzdGlvbgorL2F0IC9BIC9CIC9DIC9EIC9FIC9GIC9HCisvSCAvSSAvSiAvSyAvTCAvTSAvTiAvTworL1AgL1EgL1IgL1MgL1QgL1UgL1YgL1cKKy9YIC9ZIC9aIC9icmFja2V0bGVmdCAvYmFja3NsYXNoIC9icmFja2V0cmlnaHQgL2FzY2lpY2lyY3VtIC91bmRlcnNjb3JlCisvZ3JhdmUgL2EgL2IgL2MgL2QgL2UgL2YgL2cKKy9oIC9pIC9qIC9rIC9sIC9tIC9uIC9vCisvcCAvcSAvciAvcyAvdCAvdSAvdiAvdworL3ggL3kgL3ogL2JyYWNlbGVmdCAvYmFyIC9icmFjZXJpZ2h0IC9hc2NpaXRpbGRlIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9Bb2dvbmVrIC9FbWFjcm9uIC9HY2VkaWxsYSAvSW1hY3JvbiAvSXRpbGRlIC9LY2VkaWxsYSAvc2VjdGlvbgorL0xjZWRpbGxhIC9EY3JvYXQgL1NjYXJvbiAvVGJhciAvWmNhcm9uIC9lbmRhc2ggL1VtYWNyb24gL0VuZworL2RlZ3JlZSAvYW9nb25layAvZW1hY3JvbiAvZ2NlZGlsbGEgL2ltYWNyb24gL2l0aWxkZSAva2NlZGlsbGEgL3BlcmlvZGNlbnRlcmVkCisvbGNlZGlsbGEgL2Rjcm9hdCAvc2Nhcm9uIC90YmFyIC96Y2Fyb24gL2VtZGFzaCAvdW1hY3JvbiAvZW5nCisvQW1hY3JvbiAvQWFjdXRlIC9BY2lyY3VtZmxleCAvQXRpbGRlIC9BZGllcmVzaXMgL0FyaW5nIC9BRSAvSW9nb25laworL0NjYXJvbiAvRWFjdXRlIC9Fb2dvbmVrIC9FZGllcmVzaXMgL0Vkb3QgL0lhY3V0ZSAvSWNpcmN1bWZsZXggL0lkaWVyZXNpcworL0V0aCAvTmNlZGlsbGEgL09tYWNyb24gL09hY3V0ZSAvT2NpcmN1bWZsZXggL090aWxkZSAvT2RpZXJlc2lzIC9VdGlsZGUKKy9Pc2xhc2ggL1VvZ29uZWsgL1VhY3V0ZSAvVWNpcmN1bWZsZXggL1VkaWVyZXNpcyAvWWFjdXRlIC9UaG9ybiAvZ2VybWFuZGJscworL2FtYWNyb24gL2FhY3V0ZSAvYWNpcmN1bWZsZXggL2F0aWxkZSAvYWRpZXJlc2lzIC9hcmluZyAvYWUgL2lvZ29uZWsKKy9jY2Fyb24gL2VhY3V0ZSAvZW9nb25layAvZWRpZXJlc2lzIC9lZG90IC9pYWN1dGUgL2ljaXJjdW1mbGV4IC9pZGllcmVzaXMKKy9ldGggL25jZWRpbGxhIC9vbWFjcm9uIC9vYWN1dGUgL29jaXJjdW1mbGV4IC9vdGlsZGUgL29kaWVyZXNpcyAvdXRpbGRlCisvb3NsYXNoIC91b2dvbmVrIC91YWN1dGUgL3VjaXJjdW1mbGV4IC91ZGllcmVzaXMgL3lhY3V0ZSAvdGhvcm4gL2tncmVlbmxhbmRpY10KKy9FbmNvZGluZyBkZWZpbmVyZXNvdXJjZSBwb3AKKyUgdmltOmZmPXVuaXg6CislJUVPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9pc28tODg1OS0xMS5wcyBiL3J1bnRpbWUvcHJpbnQvaXNvLTg4NTktMTEucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhmNzc1YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcHJpbnQvaXNvLTg4NTktMTEucHMKQEAgLTAsMCArMSw0MCBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1pc28tODg1OS0xMQorJSVWZXJzaW9uOiAxLjAgMAorJSVFbmRDb21tZW50cworL1ZJTS1pc28tODg1OS0xMVsKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2V4Y2xhbSAvcXVvdGVkYmwgL251bWJlcnNpZ24gL2RvbGxhciAvcGVyY2VudCAvYW1wZXJzYW5kIC9xdW90ZXNpbmdsZQorL3BhcmVubGVmdCAvcGFyZW5yaWdodCAvYXN0ZXJpc2sgL3BsdXMgL2NvbW1hIC9taW51cyAvcGVyaW9kIC9zbGFzaAorL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorL2VpZ2h0IC9uaW5lIC9jb2xvbiAvc2VtaWNvbG9uIC9sZXNzIC9lcXVhbCAvZ3JlYXRlciAvcXVlc3Rpb24KKy9hdCAvQSAvQiAvQyAvRCAvRSAvRiAvRworL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKy9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisvWCAvWSAvWiAvYnJhY2tldGxlZnQgL2JhY2tzbGFzaCAvYnJhY2tldHJpZ2h0IC9hc2NpaWNpcmN1bSAvdW5kZXJzY29yZQorL2dyYXZlIC9hIC9iIC9jIC9kIC9lIC9mIC9nCisvaCAvaSAvaiAvayAvbCAvbSAvbiAvbworL3AgL3EgL3IgL3MgL3QgL3UgL3YgL3cKKy94IC95IC96IC9icmFjZWxlZnQgL2JhciAvYnJhY2VyaWdodCAvYXNjaWl0aWxkZSAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy9zcGFjZSAvdW5pMEUwMSAvdW5pMEUwMiAvdW5pMEUwMyAvdW5pMEUwNCAvdW5pMEUwNSAvdW5pMEUwNiAvdW5pMEUwNworL3VuaTBFMDggL3VuaTBFMDkgL3VuaTBFMEEgL3VuaTBFMEIgL3VuaTBFMEMgL3VuaTBFMEQgL3VuaTBFMEUgL3VuaTBFMEYKKy91bmkwRTEwIC91bmkwRTExIC91bmkwRTEyIC91bmkwRTEzIC91bmkwRTE0IC91bmkwRTE1IC91bmkwRTE2IC91bmkwRTE3CisvdW5pMEUxOCAvdW5pMEUxOSAvdW5pMEUxQSAvdW5pMEUxQiAvdW5pMEUxQyAvdW5pMEUxRCAvdW5pMEUxRSAvdW5pMEUxRgorL3VuaTBFMjAgL3VuaTBFMjEgL3VuaTBFMjIgL3VuaTBFMjMgL3VuaTBFMjQgL3VuaTBFMjUgL3VuaTBFMjYgL3VuaTBFMjcKKy91bmkwRTI4IC91bmkwRTI5IC91bmkwRTJBIC91bmkwRTJCIC91bmkwRTJDIC91bmkwRTJEIC91bmkwRTJFIC91bmkwRTJGCisvdW5pMEUzMCAvdW5pMEUzMSAvdW5pMEUzMiAvdW5pMEUzMyAvdW5pMEUzNCAvdW5pMEUzNSAvdW5pMEUzNiAvdW5pMEUzNworL3VuaTBFMzggL3VuaTBFMzkgL3VuaTBFM0EgLy5ub3RkZWYgL3NwYWNlIC8ubm90ZGVmIC8ubm90ZGVmIC91bmkwRTNGCisvdW5pMEU0MCAvdW5pMEU0MSAvdW5pMEU0MiAvdW5pMEU0MyAvdW5pMEU0NCAvdW5pMEU0NSAvdW5pMEU0NiAvdW5pMEU0NworL3VuaTBFNDggL3VuaTBFNDkgL3VuaTBFNEEgL3VuaTBFNEIgL3VuaTBFNEMgL3VuaTBFNEQgL3VuaTBFNEUgL3VuaTBFNEYKKy91bmkwRTUwIC91bmkwRTUxIC91bmkwRTUyIC91bmkwRTUzIC91bmkwRTU0IC91bmkwRTU1IC91bmkwRTU2IC91bmkwRTU3CisgL3VuaTBFNTggL3VuaTBFNTkgL3VuaTBFNUEgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWZdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvaXNvLTg4NTktMTMucHMgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTEzLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzQ4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTEzLnBzCkBAIC0wLDAgKzEsNDAgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0taXNvLTg4NTktMTMKKyUlVmVyc2lvbjogMS4wIDAKKyUlRW5kQ29tbWVudHMKKy9WSU0taXNvLTg4NTktMTNbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL3F1b3RlZGJscmlnaHQgL2NlbnQgL3N0ZXJsaW5nIC9jdXJyZW5jeSAvcXVvdGVkYmxiYXNlIC9icm9rZW5iYXIgL3NlY3Rpb24KKy9Pc2xhc2ggL2NvcHlyaWdodCAvUmNlZGlsbGEgL2d1aWxsZW1vdGxlZnQgL2xvZ2ljYWxub3QgL2h5cGhlbiAvcmVnaXN0ZXJlZCAvQUUKKy9kZWdyZWUgL3BsdXNtaW51cyAvdHdvc3VwZXJpb3IgL3RocmVlc3VwZXJpb3IgL3F1b3RlZGJsbGVmdCAvbXUgL3BhcmFncmFwaCAvcGVyaW9kY2VudGVyZWQKKy9vc2xhc2ggL29uZXN1cGVyaW9yIC9yY2VkaWxsYSAvZ3VpbGxlbW90cmlnaHQgL29uZXF1YXJ0ZXIgL29uZWhhbGYgL3RocmVlcXVhcnRlcnMgL2FlCisvQW9nb25layAvSW9nb25layAvQW1hY3JvbiAvQ2FjdXRlIC9BZGllcmVzaXMgL0FyaW5nIC9Fb2dvbmVrIC9FbWFjcm9uCisvQ2Nhcm9uIC9FYWN1dGUgL1phY3V0ZSAvRWRvdCAvR2NlZGlsbGEgL0tjZWRpbGxhIC9JbWFjcm9uIC9MY2VkaWxsYQorL1NjYXJvbiAvTmFjdXRlIC9OY2VkaWxsYSAvT2FjdXRlIC9PbWFjcm9uIC9PdGlsZGUgL09kaWVyZXNpcyAvbXVsdGlwbHkKKy9Vb2dvbmVrIC9Mc2xhc2ggL1NhY3V0ZSAvVW1hY3JvbiAvVWRpZXJlc2lzIC9aZG90YWNjZW50IC9aY2Fyb24gL2dlcm1hbmRibHMKKy9hb2dvbmVrIC9pb2dvbmVrIC9hbWFjcm9uIC9jYWN1dGUgL2FkaWVyZXNpcyAvYXJpbmcgL2VvZ29uZWsgL2VtYWNyb24KKy9jY2Fyb24gL2VhY3V0ZSAvemFjdXRlIC9lZG90IC9nY2VkaWxsYSAva2NlZGlsbGEgL2ltYWNyb24gL2xjZWRpbGxhCisvc2Nhcm9uIC9uYWN1dGUgL25jZWRpbGxhIC9vYWN1dGUgL29tYWNyb24gL290aWxkZSAvb2RpZXJlc2lzIC9kaXZpZGUKKy91b2dvbmVrIC9sc2xhc2ggL3NhY3V0ZSAvdW1hY3JvbiAvdWRpZXJlc2lzIC96ZG90YWNjZW50IC96Y2Fyb24gL3F1b3RlcmlnaHRdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvaXNvLTg4NTktMTQucHMgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTE0LnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZmUwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTE0LnBzCkBAIC0wLDAgKzEsNDAgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0taXNvLTg4NTktMTQKKyUlVmVyc2lvbjogMS4wIDAKKyUlRW5kQ29tbWVudHMKKy9WSU0taXNvLTg4NTktMTRbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL3VuaTFFMDIgL3VuaTFFMDMgL3N0ZXJsaW5nIC9DZG90YWNjZW50IC9jZG90YWNjZW50IC91bmkxRTBBIC9zZWN0aW9uCisvV2dyYXZlIC9jb3B5cmlnaHQgL1dhY3V0ZSAvdW5pMUUwQiAvWWdyYXZlIC9oeXBoZW4gL3JlZ2lzdGVyZWQgL1lkaWVyZXNpcworL3VuaTFFMUUgL3VuaTFFMUYgL0dkb3RhY2NlbnQgL2dkb3RhY2NlbnQgL3VuaTFFNDAgL3VuaTFFNDEgL3BhcmFncmFwaCAvdW5pMUU1NgorL3dncmF2ZSAvdW5pMUU1NyAvd2FjdXRlIC91bmkxRTYwIC95Z3JhdmUgL1dkaWVyZXNpcyAvd2RpZXJlc2lzIC91bmkxRTYxCisvQWdyYXZlIC9BYWN1dGUgL0FjaXJjdW1mbGV4IC9BdGlsZGUgL0FkaWVyZXNpcyAvQXJpbmcgL0FFIC9DY2VkaWxsYQorL0VncmF2ZSAvRWFjdXRlIC9FY2lyY3VtZmxleCAvRWRpZXJlc2lzIC9JZ3JhdmUgL0lhY3V0ZSAvSWNpcmN1bWZsZXggL0lkaWVyZXNpcworL1djaXJjdW1mbGV4IC9OdGlsZGUgL09ncmF2ZSAvT2FjdXRlIC9PY2lyY3VtZmxleCAvT3RpbGRlIC9PZGllcmVzaXMgL3VuaTFFNkEKKy9Pc2xhc2ggL1VncmF2ZSAvVWFjdXRlIC9VY2lyY3VtZmxleCAvVWRpZXJlc2lzIC9ZYWN1dGUgL1ljaXJjdW1mbGV4IC9nZXJtYW5kYmxzCisvYWdyYXZlIC9hYWN1dGUgL2FjaXJjdW1mbGV4IC9hdGlsZGUgL2FkaWVyZXNpcyAvYXJpbmcgL2FlIC9jY2VkaWxsYQorL2VncmF2ZSAvZWFjdXRlIC9lY2lyY3VtZmxleCAvZWRpZXJlc2lzIC9pZ3JhdmUgL2lhY3V0ZSAvaWNpcmN1bWZsZXggL2lkaWVyZXNpcworL3djaXJjdW1mbGV4IC9udGlsZGUgL29ncmF2ZSAvb2FjdXRlIC9vY2lyY3VtZmxleCAvb3RpbGRlIC9vZGllcmVzaXMgL3VuaTFFNkIKKy9vc2xhc2ggL3VncmF2ZSAvdWFjdXRlIC91Y2lyY3VtZmxleCAvdWRpZXJlc2lzIC95YWN1dGUgL3ljaXJjdW1mbGV4IC95ZGllcmVzaXNdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvaXNvLTg4NTktMTUucHMgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTE1LnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZWE2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTE1LnBzCkBAIC0wLDAgKzEsNDAgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0taXNvLTg4NTktMTUKKyUlVmVyc2lvbjogMS4wIDAKKyUlRW5kQ29tbWVudHMKKy9WSU0taXNvLTg4NTktMTVbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2V4Y2xhbWRvd24gL2NlbnQgL3N0ZXJsaW5nIC9FdXJvIC95ZW4gL1NjYXJvbiAvc2VjdGlvbgorL3NjYXJvbiAvY29weXJpZ2h0IC9vcmRmZW1pbmluZSAvZ3VpbGxlbW90bGVmdCAvbG9naWNhbG5vdCAvaHlwaGVuIC9yZWdpc3RlcmVkIC9tYWNyb24KKy9kZWdyZWUgL3BsdXNtaW51cyAvdHdvc3VwZXJpb3IgL3RocmVlc3VwZXJpb3IgL1pjYXJvbiAvbXUgL3BhcmFncmFwaCAvcGVyaW9kY2VudGVyZWQKKy96Y2Fyb24gL29uZXN1cGVyaW9yIC9vcmRtYXNjdWxpbmUgL2d1aWxsZW1vdHJpZ2h0IC9PRSAvb2UgL1lkaWVyZXNpcyAvcXVlc3Rpb25kb3duCisvQWdyYXZlIC9BYWN1dGUgL0FjaXJjdW1mbGV4IC9BdGlsZGUgL0FkaWVyZXNpcyAvQXJpbmcgL0FFIC9DY2VkaWxsYQorL0VncmF2ZSAvRWFjdXRlIC9FY2lyY3VtZmxleCAvRWRpZXJlc2lzIC9JZ3JhdmUgL0lhY3V0ZSAvSWNpcmN1bWZsZXggL0lkaWVyZXNpcworL0V0aCAvTnRpbGRlIC9PZ3JhdmUgL09hY3V0ZSAvT2NpcmN1bWZsZXggL090aWxkZSAvT2RpZXJlc2lzIC9tdWx0aXBseQorL09zbGFzaCAvVWdyYXZlIC9VYWN1dGUgL1VjaXJjdW1mbGV4IC9VZGllcmVzaXMgL1lhY3V0ZSAvVGhvcm4gL2dlcm1hbmRibHMKKy9hZ3JhdmUgL2FhY3V0ZSAvYWNpcmN1bWZsZXggL2F0aWxkZSAvYWRpZXJlc2lzIC9hcmluZyAvYWUgL2NjZWRpbGxhCisvZWdyYXZlIC9lYWN1dGUgL2VjaXJjdW1mbGV4IC9lZGllcmVzaXMgL2lncmF2ZSAvaWFjdXRlIC9pY2lyY3VtZmxleCAvaWRpZXJlc2lzCisvZXRoIC9udGlsZGUgL29ncmF2ZSAvb2FjdXRlIC9vY2lyY3VtZmxleCAvb3RpbGRlIC9vZGllcmVzaXMgL2RpdmlkZQorL29zbGFzaCAvdWdyYXZlIC91YWN1dGUgL3VjaXJjdW1mbGV4IC91ZGllcmVzaXMgL3lhY3V0ZSAvdGhvcm4gL3lkaWVyZXNpc10KKy9FbmNvZGluZyBkZWZpbmVyZXNvdXJjZSBwb3AKKyUgdmltOmZmPXVuaXg6CislJUVPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9pc28tODg1OS0yLnBzIGIvcnVudGltZS9wcmludC9pc28tODg1OS0yLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZTE5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTIucHMKQEAgLTAsMCArMSw0MCBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1pc28tODg1OS0yCislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWlzby04ODU5LTJbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL0FvZ29uZWsgL2JyZXZlIC9Mc2xhc2ggL2N1cnJlbmN5IC9MY2Fyb24gL1NhY3V0ZSAvc2VjdGlvbgorL2RpZXJlc2lzIC9TY2Fyb24gL1NjZWRpbGxhIC9UY2Fyb24gL1phY3V0ZSAvaHlwaGVuIC9aY2Fyb24gL1pkb3RhY2NlbnQKKy9kZWdyZWUgL2FvZ29uZWsgL29nb25layAvbHNsYXNoIC9hY3V0ZSAvbGNhcm9uIC9zYWN1dGUgL2Nhcm9uCisvY2VkaWxsYSAvc2Nhcm9uIC9zY2VkaWxsYSAvdGNhcm9uIC96YWN1dGUgL2h1bmdhcnVtbGF1dCAvemNhcm9uIC96ZG90YWNjZW50CisvUmFjdXRlIC9BYWN1dGUgL0FjaXJjdW1mbGV4IC9BYnJldmUgL0FkaWVyZXNpcyAvTGFjdXRlIC9DYWN1dGUgL0NjZWRpbGxhCisvQ2Nhcm9uIC9FYWN1dGUgL0VvZ29uZWsgL0VkaWVyZXNpcyAvRWNhcm9uIC9JYWN1dGUgL0ljaXJjdW1mbGV4IC9EY2Fyb24KKy9EY3JvYXQgL05hY3V0ZSAvTmNhcm9uIC9PYWN1dGUgL09jaXJjdW1mbGV4IC9PaHVuZ2FydW1sYXV0IC9PZGllcmVzaXMgL211bHRpcGx5CisvUmNhcm9uIC9VcmluZyAvVWFjdXRlIC9VaHVuZ2FydW1sYXV0IC9VZGllcmVzaXMgL1lhY3V0ZSAvVGNlZGlsbGEgL2dlcm1hbmRibHMKKy9yYWN1dGUgL2FhY3V0ZSAvYWNpcmN1bWZsZXggL2FicmV2ZSAvYWRpZXJlc2lzIC9sYWN1dGUgL2NhY3V0ZSAvY2NlZGlsbGEKKy9jY2Fyb24gL2VhY3V0ZSAvZW9nb25layAvZWRpZXJlc2lzIC9lY2Fyb24gL2lhY3V0ZSAvaWNpcmN1bWZsZXggL2RjYXJvbgorL2Rjcm9hdCAvbmFjdXRlIC9uY2Fyb24gL29hY3V0ZSAvb2NpcmN1bWZsZXggL29odW5nYXJ1bWxhdXQgL29kaWVyZXNpcyAvZGl2aWRlCisvcmNhcm9uIC91cmluZyAvdWFjdXRlIC91aHVuZ2FydW1sYXV0IC91ZGllcmVzaXMgL3lhY3V0ZSAvdGNlZGlsbGEgL2RvdGFjY2VudF0KKy9FbmNvZGluZyBkZWZpbmVyZXNvdXJjZSBwb3AKKyUgdmltOmZmPXVuaXg6CislJUVPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9pc28tODg1OS0zLnBzIGIvcnVudGltZS9wcmludC9pc28tODg1OS0zLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTM0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTMucHMKQEAgLTAsMCArMSw0MCBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1pc28tODg1OS0zCislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWlzby04ODU5LTNbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL0hiYXIgL2JyZXZlIC9zdGVybGluZyAvY3VycmVuY3kgLy5ub3RkZWYgL0hjaXJjdW1mbGV4IC9zZWN0aW9uCisvZGllcmVzaXMgL0lkb3QgL1NjZWRpbGxhIC9HYnJldmUgL0pjaXJjdW1mbGV4IC9oeXBoZW4gLy5ub3RkZWYgL1pkb3RhY2NlbnQKKy9kZWdyZWUgL2hiYXIgL3R3b3N1cGVyaW9yIC90aHJlZXN1cGVyaW9yIC9hY3V0ZSAvbXUgL2hjaXJjdW1mbGV4IC9wZXJpb2RjZW50ZXJlZAorL2NlZGlsbGEgL2RvdGxlc3NpIC9zY2VkaWxsYSAvZ2JyZXZlIC9qY2lyY3VtZmxleCAvb25laGFsZiAvLm5vdGRlZiAvemRvdGFjY2VudAorL0FncmF2ZSAvQWFjdXRlIC9BY2lyY3VtZmxleCAvLm5vdGRlZiAvQWRpZXJlc2lzIC9DZG90YWNjZW50IC9DY2lyY3VtZmxleCAvQ2NlZGlsbGEKKy9FZ3JhdmUgL0VhY3V0ZSAvRWNpcmN1bWZsZXggL0VkaWVyZXNpcyAvSWdyYXZlIC9JYWN1dGUgL0ljaXJjdW1mbGV4IC9JZGllcmVzaXMKKy8ubm90ZGVmIC9OdGlsZGUgL09ncmF2ZSAvT2FjdXRlIC9PY2lyY3VtZmxleCAvR2RvdGFjY2VudCAvT2RpZXJlc2lzIC9tdWx0aXBseQorL0djaXJjdW1mbGV4IC9VZ3JhdmUgL1VhY3V0ZSAvVWNpcmN1bWZsZXggL1VkaWVyZXNpcyAvVWJyZXZlIC9TY2lyY3VtZmxleCAvZ2VybWFuZGJscworL2FncmF2ZSAvYWFjdXRlIC9hY2lyY3VtZmxleCAvLm5vdGRlZiAvYWRpZXJlc2lzIC9jZG90YWNjZW50IC9jY2lyY3VtZmxleCAvY2NlZGlsbGEKKy9lZ3JhdmUgL2VhY3V0ZSAvZWNpcmN1bWZsZXggL2VkaWVyZXNpcyAvaWdyYXZlIC9pYWN1dGUgL2ljaXJjdW1mbGV4IC9pZGllcmVzaXMKKy8ubm90ZGVmIC9udGlsZGUgL29ncmF2ZSAvb2FjdXRlIC9vY2lyY3VtZmxleCAvZ2RvdGFjY2VudCAvb2RpZXJlc2lzIC9kaXZpZGUKKy9nY2lyY3VtZmxleCAvdWdyYXZlIC91YWN1dGUgL3VjaXJjdW1mbGV4IC91ZGllcmVzaXMgL3VicmV2ZSAvc2NpcmN1bWZsZXggL2RvdGFjY2VudF0KKy9FbmNvZGluZyBkZWZpbmVyZXNvdXJjZSBwb3AKKyUgdmltOmZmPXVuaXg6CislJUVPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9pc28tODg1OS00LnBzIGIvcnVudGltZS9wcmludC9pc28tODg1OS00LnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MTdkMWYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTQucHMKQEAgLTAsMCArMSw0MCBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1pc28tODg1OS00CislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWlzby04ODU5LTRbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL0FvZ29uZWsgL2tncmVlbmxhbmRpYyAvUmNlZGlsbGEgL2N1cnJlbmN5IC9JdGlsZGUgL0xjZWRpbGxhIC9zZWN0aW9uCisvZGllcmVzaXMgL1NjYXJvbiAvRW1hY3JvbiAvR2NlZGlsbGEgL1RiYXIgLy5ub3RkZWYgL1pjYXJvbiAvbWFjcm9uCisvZGVncmVlIC9hb2dvbmVrIC9vZ29uZWsgL3JjZWRpbGxhIC9hY3V0ZSAvaXRpbGRlIC9sY2VkaWxsYSAvY2Fyb24KKy9jZWRpbGxhIC9zY2Fyb24gL2VtYWNyb24gL2djZWRpbGxhIC90YmFyIC9FbmcgL3pjYXJvbiAvZW5nCisvQW1hY3JvbiAvQWFjdXRlIC9BY2lyY3VtZmxleCAvQXRpbGRlIC9BZGllcmVzaXMgL0FyaW5nIC9BRSAvSW9nb25laworL0NjYXJvbiAvRWFjdXRlIC9Fb2dvbmVrIC9FZGllcmVzaXMgL0Vkb3QgL0lhY3V0ZSAvSWNpcmN1bWZsZXggL0ltYWNyb24KKy9EY3JvYXQgL05jZWRpbGxhIC9PbWFjcm9uIC9LY2VkaWxsYSAvT2NpcmN1bWZsZXggL090aWxkZSAvT2RpZXJlc2lzIC9tdWx0aXBseQorL09zbGFzaCAvVW9nb25layAvVWFjdXRlIC9VY2lyY3VtZmxleCAvVWRpZXJlc2lzIC9VdGlsZGUgL1VtYWNyb24gL2dlcm1hbmRibHMKKy9hbWFjcm9uIC9hYWN1dGUgL2FjaXJjdW1mbGV4IC9hdGlsZGUgL2FkaWVyZXNpcyAvYXJpbmcgL2FlIC9pb2dvbmVrCisvY2Nhcm9uIC9lYWN1dGUgL2VvZ29uZWsgL2VkaWVyZXNpcyAvZWRvdCAvaWFjdXRlIC9pY2lyY3VtZmxleCAvaW1hY3JvbgorL2Rjcm9hdCAvbmNlZGlsbGEgL29tYWNyb24gL2tjZWRpbGxhIC9vY2lyY3VtZmxleCAvb3RpbGRlIC9vZGllcmVzaXMgL2RpdmlkZQorL29zbGFzaCAvdW9nb25layAvdWFjdXRlIC91Y2lyY3VtZmxleCAvdWRpZXJlc2lzIC91dGlsZGUgL3VtYWNyb24gL2RvdGFjY2VudF0KKy9FbmNvZGluZyBkZWZpbmVyZXNvdXJjZSBwb3AKKyUgdmltOmZmPXVuaXg6CislJUVPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9pc28tODg1OS01LnBzIGIvcnVudGltZS9wcmludC9pc28tODg1OS01LnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZTk2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTUucHMKQEAgLTAsMCArMSw0MCBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1pc28tODg1OS01CislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWlzby04ODU5LTVbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2FmaWkxMDAyMyAvYWZpaTEwMDUxIC9hZmlpMTAwNTIgL2FmaWkxMDA1MyAvYWZpaTEwMDU0IC9hZmlpMTAwNTUgL2FmaWkxMDA1NgorL2FmaWkxMDA1NyAvYWZpaTEwMDU4IC9hZmlpMTAwNTkgL2FmaWkxMDA2MCAvYWZpaTEwMDYxIC8ubm90ZGVmIC9hZmlpMTAwNjIgL2FmaWkxMDE0NQorL2FmaWkxMDAxNyAvYWZpaTEwMDE4IC9hZmlpMTAwMTkgL2FmaWkxMDAyMCAvYWZpaTEwMDIxIC9hZmlpMTAwMjIgL2FmaWkxMDAyNCAvYWZpaTEwMDI1CisvYWZpaTEwMDI2IC9hZmlpMTAwMjcgL2FmaWkxMDAyOCAvYWZpaTEwMDI5IC9hZmlpMTAwMzAgL2FmaWkxMDAzMSAvYWZpaTEwMDMyIC9hZmlpMTAwMzMKKy9hZmlpMTAwMzQgL2FmaWkxMDAzNSAvYWZpaTEwMDM2IC9hZmlpMTAwMzcgL2FmaWkxMDAzOCAvYWZpaTEwMDM5IC9hZmlpMTAwNDAgL2FmaWkxMDA0MQorL2FmaWkxMDA0MiAvYWZpaTEwMDQzIC9hZmlpMTAwNDQgL2FmaWkxMDA0NSAvYWZpaTEwMDQ2IC9hZmlpMTAwNDcgL2FmaWkxMDA0OCAvYWZpaTEwMDQ5CisvYWZpaTEwMDY1IC9hZmlpMTAwNjYgL2FmaWkxMDA2NyAvYWZpaTEwMDY4IC9hZmlpMTAwNjkgL2FmaWkxMDA3MCAvYWZpaTEwMDcyIC9hZmlpMTAwNzMKKy9hZmlpMTAwNzQgL2FmaWkxMDA3NSAvYWZpaTEwMDc2IC9hZmlpMTAwNzcgL2FmaWkxMDA3OCAvYWZpaTEwMDc5IC9hZmlpMTAwODAgL2FmaWkxMDA4MQorL2FmaWkxMDA4MiAvYWZpaTEwMDgzIC9hZmlpMTAwODQgL2FmaWkxMDA4NSAvYWZpaTEwMDg2IC9hZmlpMTAwODcgL2FmaWkxMDA4OCAvYWZpaTEwMDg5CisvYWZpaTEwMDkwIC9hZmlpMTAwOTEgL2FmaWkxMDA5MiAvYWZpaTEwMDkzIC9hZmlpMTAwOTQgL2FmaWkxMDA5NSAvYWZpaTEwMDk2IC9hZmlpMTAwOTcKKy9hZmlpNjEzNTIgL2FmaWkxMDA3MSAvYWZpaTEwMDk5IC9hZmlpMTAxMDAgL2FmaWkxMDEwMSAvYWZpaTEwMTAyIC9hZmlpMTAxMDMgL2FmaWkxMDEwNAorL2FmaWkxMDEwNSAvYWZpaTEwMTA2IC9hZmlpMTAxMDcgL2FmaWkxMDEwOCAvYWZpaTEwMTA5IC9zZWN0aW9uIC9hZmlpMTAxMTAgL2FmaWkxMDE5M10KKy9FbmNvZGluZyBkZWZpbmVyZXNvdXJjZSBwb3AKKyUgdmltOmZmPXVuaXg6CislJUVPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9pc28tODg1OS03LnBzIGIvcnVudGltZS9wcmludC9pc28tODg1OS03LnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTZiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTcucHMKQEAgLTAsMCArMSw0MCBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1pc28tODg1OS03CislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWlzby04ODU5LTdbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL3F1b3RlcmV2ZXJzZWQgL3F1b3RlcmlnaHQgL3N0ZXJsaW5nIC8ubm90ZGVmIC8ubm90ZGVmIC9icm9rZW5iYXIgL3NlY3Rpb24KKy9kaWVyZXNpcyAvY29weXJpZ2h0IC8ubm90ZGVmIC9ndWlsbGVtb3RsZWZ0IC9sb2dpY2Fsbm90IC8ubm90ZGVmIC8ubm90ZGVmIC9lbWRhc2gKKy9kZWdyZWUgL3BsdXNtaW51cyAvdHdvc3VwZXJpb3IgL3RocmVlc3VwZXJpb3IgL3Rvbm9zIC9kaWVyZXNpc3Rvbm9zIC9BbHBoYXRvbm9zIC9wZXJpb2RjZW50ZXJlZAorL0Vwc2lsb250b25vcyAvRXRhdG9ub3MgL0lvdGF0b25vcyAvZ3VpbGxlbW90cmlnaHQgL09taWNyb250b25vcyAvb25laGFsZiAvVXBzaWxvbnRvbm9zIC9PbWVnYXRvbm9zCisvaW90YWRpZXJlc2lzdG9ub3MgL0FscGhhIC9CZXRhIC9HYW1tYSAvRGVsdGEgL0Vwc2lsb24gL1pldGEgL0V0YQorL1RoZXRhIC9Jb3RhIC9LYXBwYSAvTGFtYmRhIC9NdSAvTnUgL1hpIC9PbWljcm9uCisvUGkgL1JobyAvLm5vdGRlZiAvU2lnbWEgL1RhdSAvVXBzaWxvbiAvUGhpIC9DaGkKKy9Qc2kgL09tZWdhIC9Jb3RhZGllcmVzaXMgL1Vwc2lsb25kaWVyZXNpcyAvYWxwaGF0b25vcyAvZXBzaWxvbnRvbm9zIC9ldGF0b25vcyAvaW90YXRvbm9zCisvdXBzaWxvbmRpZXJlc2lzdG9ub3MgL2FscGhhIC9iZXRhIC9nYW1tYSAvZGVsdGEgL2Vwc2lsb24gL3pldGEgL2V0YQorL3RoZXRhIC9pb3RhIC9rYXBwYSAvbGFtYmRhIC9tdSAvbnUgL3hpIC9vbWljcm9uCisvcGkgL3JobyAvc2lnbWExIC9zaWdtYSAvdGF1IC91cHNpbG9uIC9waGkgL2NoaQorL3BzaSAvb21lZ2EgL2lvdGFkaWVyZXNpcyAvdXBzaWxvbmRpZXJlc2lzIC9vbWljcm9udG9ub3MgL3Vwc2lsb250b25vcyAvb21lZ2F0b25vcyAvLm5vdGRlZl0KKy9FbmNvZGluZyBkZWZpbmVyZXNvdXJjZSBwb3AKKyUgdmltOmZmPXVuaXg6CislJUVPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9pc28tODg1OS04LnBzIGIvcnVudGltZS9wcmludC9pc28tODg1OS04LnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MTkzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTgucHMKQEAgLTAsMCArMSw0MCBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1pc28tODg1OS04CislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWlzby04ODU5LThbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgLy5ub3RkZWYgL2NlbnQgL3N0ZXJsaW5nIC9jdXJyZW5jeSAveWVuIC9icm9rZW5iYXIgL3NlY3Rpb24KKy9kaWVyZXNpcyAvY29weXJpZ2h0IC9tdWx0aXBseSAvZ3VpbGxlbW90bGVmdCAvbG9naWNhbG5vdCAvaHlwaGVuIC9yZWdpc3RlcmVkIC9tYWNyb24KKy9kZWdyZWUgL3BsdXNtaW51cyAvdHdvc3VwZXJpb3IgL3RocmVlc3VwZXJpb3IgL2FjdXRlIC9tdSAvcGFyYWdyYXBoIC9wZXJpb2RjZW50ZXJlZAorL2NlZGlsbGEgL29uZXN1cGVyaW9yIC9kaXZpZGUgL2d1aWxsZW1vdHJpZ2h0IC9vbmVxdWFydGVyIC9vbmVoYWxmIC90aHJlZXF1YXJ0ZXJzIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvdW5kZXJzY29yZWRibAorL2FsZWYgL2JldCAvZ2ltZWwgL2RhbGV0IC9oZSAvdmF2IC96YXlpbiAvaGV0CisvdGV0IC95b2QgL2ZpbmFsa2FmIC9rYWYgL2xhbWVkIC9maW5hbG1lbSAvbWVtIC9maW5hbG51bgorL251biAvc2FtZWtoIC9heWluIC9maW5hbHBlIC9wZSAvZmluYWx0c2FkaSAvdHNhZGkgL3FvZgorL3Jlc2ggL3NoaW4gL3RhdiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZl0KKy9FbmNvZGluZyBkZWZpbmVyZXNvdXJjZSBwb3AKKyUgdmltOmZmPXVuaXg6CislJUVPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS9wcmludC9pc28tODg1OS05LnBzIGIvcnVudGltZS9wcmludC9pc28tODg1OS05LnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MGY2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2lzby04ODU5LTkucHMKQEAgLTAsMCArMSw0MCBAQAorJSFQUy1BZG9iZS0zLjAgUmVzb3VyY2UtRW5jb2RpbmcKKyUlVGl0bGU6IFZJTS1pc28tODg1OS05CislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWlzby04ODU5LTlbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2V4Y2xhbWRvd24gL2NlbnQgL3N0ZXJsaW5nIC9jdXJyZW5jeSAveWVuIC9icm9rZW5iYXIgL3NlY3Rpb24KKy9kaWVyZXNpcyAvY29weXJpZ2h0IC9vcmRmZW1pbmluZSAvZ3VpbGxlbW90bGVmdCAvbG9naWNhbG5vdCAvaHlwaGVuIC9yZWdpc3RlcmVkIC9tYWNyb24KKy9kZWdyZWUgL3BsdXNtaW51cyAvdHdvc3VwZXJpb3IgL3RocmVlc3VwZXJpb3IgL2FjdXRlIC9tdSAvcGFyYWdyYXBoIC9wZXJpb2RjZW50ZXJlZAorL2NlZGlsbGEgL29uZXN1cGVyaW9yIC9vcmRtYXNjdWxpbmUgL2d1aWxsZW1vdHJpZ2h0IC9vbmVxdWFydGVyIC9vbmVoYWxmIC90aHJlZXF1YXJ0ZXJzIC9xdWVzdGlvbmRvd24KKy9BZ3JhdmUgL0FhY3V0ZSAvQWNpcmN1bWZsZXggL0F0aWxkZSAvQWRpZXJlc2lzIC9BcmluZyAvQUUgL0NjZWRpbGxhCisvRWdyYXZlIC9FYWN1dGUgL0VjaXJjdW1mbGV4IC9FZGllcmVzaXMgL0lncmF2ZSAvSWFjdXRlIC9JY2lyY3VtZmxleCAvSWRpZXJlc2lzCisvR2JyZXZlIC9OdGlsZGUgL09ncmF2ZSAvT2FjdXRlIC9PY2lyY3VtZmxleCAvT3RpbGRlIC9PZGllcmVzaXMgL211bHRpcGx5CisvT3NsYXNoIC9VZ3JhdmUgL1VhY3V0ZSAvVWNpcmN1bWZsZXggL1VkaWVyZXNpcyAvSWRvdGFjY2VudCAvU2NlZGlsbGEgL2dlcm1hbmRibHMKKy9hZ3JhdmUgL2FhY3V0ZSAvYWNpcmN1bWZsZXggL2F0aWxkZSAvYWRpZXJlc2lzIC9hcmluZyAvYWUgL2NjZWRpbGxhCisvZWdyYXZlIC9lYWN1dGUgL2VjaXJjdW1mbGV4IC9lZGllcmVzaXMgL2lncmF2ZSAvaWFjdXRlIC9pY2lyY3VtZmxleCAvaWRpZXJlc2lzCisvZ2JyZXZlIC9udGlsZGUgL29ncmF2ZSAvb2FjdXRlIC9vY2lyY3VtZmxleCAvb3RpbGRlIC9vZGllcmVzaXMgL2RpdmlkZQorL29zbGFzaCAvdWdyYXZlIC91YWN1dGUgL3VjaXJjdW1mbGV4IC91ZGllcmVzaXMgL2RvdGxlc3NpIC9zY2VkaWxsYSAveWRpZXJlc2lzXQorL0VuY29kaW5nIGRlZmluZXJlc291cmNlIHBvcAorJSB2aW06ZmY9dW5peDoKKyUlRU9GCmRpZmYgLS1naXQgYS9ydW50aW1lL3ByaW50L2tvaTgtci5wcyBiL3J1bnRpbWUvcHJpbnQva29pOC1yLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MmRhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2tvaTgtci5wcwpAQCAtMCwwICsxLDQwIEBACislIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1FbmNvZGluZworJSVUaXRsZTogVklNLWtvaTgtcgorJSVWZXJzaW9uOiAxLjAgMAorJSVFbmRDb21tZW50cworL1ZJTS1rb2k4LXJbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy9TRjEwMDAwMCAvU0YxMTAwMDAgL1NGMDEwMDAwIC9TRjAzMDAwMCAvU0YwMjAwMDAgL1NGMDQwMDAwIC9TRjA4MDAwMCAvU0YwOTAwMDAKKy9TRjA2MDAwMCAvU0YwNzAwMDAgL1NGMDUwMDAwIC91cGJsb2NrIC9kbmJsb2NrIC9ibG9jayAvbGZibG9jayAvcnRibG9jaworL2x0c2hhZGUgL3NoYWRlIC9ka3NoYWRlIC9pbnRlZ3JhbHRwIC9maWxsZWRib3ggL2J1bGxldCAvcmFkaWNhbCAvYXBwcm94ZXF1YWwKKy9sZXNzZXF1YWwgL2dyZWF0ZXJlcXVhbCAvc3BhY2UgL2ludGVncmFsYnQgL2RlZ3JlZSAvdHdvc3VwZXJpb3IgL3BlcmlvZGNlbnRlcmVkIC9kaXZpZGUKKy9TRjQzMDAwMCAvU0YyNDAwMDAgL1NGNTEwMDAwIC9hZmlpMTAwNzEgL1NGNTIwMDAwIC9TRjM5MDAwMCAvU0YyMjAwMDAgL1NGMjEwMDAwCisvU0YyNTAwMDAgL1NGNTAwMDAwIC9TRjQ5MDAwMCAvU0YzODAwMDAgL1NGMjgwMDAwIC9TRjI3MDAwMCAvU0YyNjAwMDAgL1NGMzYwMDAwCisvU0YzNzAwMDAgL1NGNDIwMDAwIC9TRjE5MDAwMCAvYWZpaTEwMDIzIC9TRjIwMDAwMCAvU0YyMzAwMDAgL1NGNDcwMDAwIC9TRjQ4MDAwMAorL1NGNDEwMDAwIC9TRjQ1MDAwMCAvU0Y0NjAwMDAgL1NGNDAwMDAwIC9TRjU0MDAwMCAvU0Y1MzAwMDAgL1NGNDQwMDAwIC9jb3B5cmlnaHQKKy9hZmlpMTAwOTYgL2FmaWkxMDA2NSAvYWZpaTEwMDY2IC9hZmlpMTAwODggL2FmaWkxMDA2OSAvYWZpaTEwMDcwIC9hZmlpMTAwODYgL2FmaWkxMDA2OAorL2FmaWkxMDA4NyAvYWZpaTEwMDc0IC9hZmlpMTAwNzUgL2FmaWkxMDA3NiAvYWZpaTEwMDc3IC9hZmlpMTAwNzggL2FmaWkxMDA3OSAvYWZpaTEwMDgwCisvYWZpaTEwMDgxIC9hZmlpMTAwOTcgL2FmaWkxMDA4MiAvYWZpaTEwMDgzIC9hZmlpMTAwODQgL2FmaWkxMDA4NSAvYWZpaTEwMDcyIC9hZmlpMTAwNjcKKy9hZmlpMTAwOTQgL2FmaWkxMDA5MyAvYWZpaTEwMDczIC9hZmlpMTAwOTAgL2FmaWkxMDA5NSAvYWZpaTEwMDkxIC9hZmlpMTAwODkgL2FmaWkxMDA5MgorL2FmaWkxMDA0OCAvYWZpaTEwMDE3IC9hZmlpMTAwMTggL2FmaWkxMDA0MCAvYWZpaTEwMDIxIC9hZmlpMTAwMjIgL2FmaWkxMDAzOCAvYWZpaTEwMDIwCisvYWZpaTEwMDM5IC9hZmlpMTAwMjYgL2FmaWkxMDAyNyAvYWZpaTEwMDI4IC9hZmlpMTAwMjkgL2FmaWkxMDAzMCAvYWZpaTEwMDMxIC9hZmlpMTAwMzIKKy9hZmlpMTAwMzMgL2FmaWkxMDA0OSAvYWZpaTEwMDM0IC9hZmlpMTAwMzUgL2FmaWkxMDAzNiAvYWZpaTEwMDM3IC9hZmlpMTAwMjQgL2FmaWkxMDAxOQorL2FmaWkxMDA0NiAvYWZpaTEwMDQ1IC9hZmlpMTAwMjUgL2FmaWkxMDA0MiAvYWZpaTEwMDQ3IC9hZmlpMTAwNDMgL2FmaWkxMDA0MSAvYWZpaTEwMDQ0XQorL0VuY29kaW5nIGRlZmluZXJlc291cmNlIHBvcAorJSB2aW06ZmY9dW5peDoKKyUlRU9GCmRpZmYgLS1naXQgYS9ydW50aW1lL3ByaW50L2tvaTgtdS5wcyBiL3J1bnRpbWUvcHJpbnQva29pOC11LnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjMxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L2tvaTgtdS5wcwpAQCAtMCwwICsxLDQwIEBACislIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1FbmNvZGluZworJSVUaXRsZTogVklNLWtvaTgtdQorJSVWZXJzaW9uOiAxLjAgMAorJSVFbmRDb21tZW50cworL1ZJTS1rb2k4LXVbCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorL3NwYWNlIC9leGNsYW0gL3F1b3RlZGJsIC9udW1iZXJzaWduIC9kb2xsYXIgL3BlcmNlbnQgL2FtcGVyc2FuZCAvcXVvdGVzaW5nbGUKKy9wYXJlbmxlZnQgL3BhcmVucmlnaHQgL2FzdGVyaXNrIC9wbHVzIC9jb21tYSAvbWludXMgL3BlcmlvZCAvc2xhc2gKKy96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4KKy9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCisvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cKKy9IIC9JIC9KIC9LIC9MIC9NIC9OIC9PCisvUCAvUSAvUiAvUyAvVCAvVSAvViAvVworL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKy9ncmF2ZSAvYSAvYiAvYyAvZCAvZSAvZiAvZworL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKy9wIC9xIC9yIC9zIC90IC91IC92IC93CisveCAveSAveiAvYnJhY2VsZWZ0IC9iYXIgL2JyYWNlcmlnaHQgL2FzY2lpdGlsZGUgLy5ub3RkZWYKKy9TRjEwMDAwMCAvU0YxMTAwMDAgL1NGMDEwMDAwIC9TRjAzMDAwMCAvU0YwMjAwMDAgL1NGMDQwMDAwIC9TRjA4MDAwMCAvU0YwOTAwMDAKKy9TRjA2MDAwMCAvU0YwNzAwMDAgL1NGMDUwMDAwIC91cGJsb2NrIC9kbmJsb2NrIC9ibG9jayAvbGZibG9jayAvcnRibG9jaworL2x0c2hhZGUgL3NoYWRlIC9ka3NoYWRlIC9pbnRlZ3JhbHRwIC9maWxsZWRib3ggL2J1bGxldCAvcmFkaWNhbCAvYXBwcm94ZXF1YWwKKy9sZXNzZXF1YWwgL2dyZWF0ZXJlcXVhbCAvc3BhY2UgL2ludGVncmFsYnQgL2RlZ3JlZSAvdHdvc3VwZXJpb3IgL3BlcmlvZGNlbnRlcmVkIC9kaXZpZGUKKy9TRjQzMDAwMCAvU0YyNDAwMDAgL1NGNTEwMDAwIC9hZmlpMTAwNzEgL2FmaWkxMDEwMSAvU0YzOTAwMDAgL2FmaWkxMDEwMyAvYWZpaTEwMTA0CisvU0YyNTAwMDAgL1NGNTAwMDAwIC9TRjQ5MDAwMCAvU0YzODAwMDAgL1NGMjgwMDAwIC9hZmlpMTAwOTggL1NGMjYwMDAwIC9TRjM2MDAwMAorL1NGMzcwMDAwIC9TRjQyMDAwMCAvU0YxOTAwMDAgL2FmaWkxMDAyMyAvYWZpaTEwMDUzIC9TRjIzMDAwMCAvYWZpaTEwMDU1IC9hZmlpMTAwNTYKKy9TRjQxMDAwMCAvU0Y0NTAwMDAgL1NGNDYwMDAwIC9TRjQwMDAwMCAvU0Y1NDAwMDAgL2FmaWkxMDA1MCAvU0Y0NDAwMDAgL2NvcHlyaWdodAorL2FmaWkxMDA5NiAvYWZpaTEwMDY1IC9hZmlpMTAwNjYgL2FmaWkxMDA4OCAvYWZpaTEwMDY5IC9hZmlpMTAwNzAgL2FmaWkxMDA4NiAvYWZpaTEwMDY4CisvYWZpaTEwMDg3IC9hZmlpMTAwNzQgL2FmaWkxMDA3NSAvYWZpaTEwMDc2IC9hZmlpMTAwNzcgL2FmaWkxMDA3OCAvYWZpaTEwMDc5IC9hZmlpMTAwODAKKy9hZmlpMTAwODEgL2FmaWkxMDA5NyAvYWZpaTEwMDgyIC9hZmlpMTAwODMgL2FmaWkxMDA4NCAvYWZpaTEwMDg1IC9hZmlpMTAwNzIgL2FmaWkxMDA2NworL2FmaWkxMDA5NCAvYWZpaTEwMDkzIC9hZmlpMTAwNzMgL2FmaWkxMDA5MCAvYWZpaTEwMDk1IC9hZmlpMTAwOTEgL2FmaWkxMDA4OSAvYWZpaTEwMDkyCisvYWZpaTEwMDQ4IC9hZmlpMTAwMTcgL2FmaWkxMDAxOCAvYWZpaTEwMDQwIC9hZmlpMTAwMjEgL2FmaWkxMDAyMiAvYWZpaTEwMDM4IC9hZmlpMTAwMjAKKy9hZmlpMTAwMzkgL2FmaWkxMDAyNiAvYWZpaTEwMDI3IC9hZmlpMTAwMjggL2FmaWkxMDAyOSAvYWZpaTEwMDMwIC9hZmlpMTAwMzEgL2FmaWkxMDAzMgorL2FmaWkxMDAzMyAvYWZpaTEwMDQ5IC9hZmlpMTAwMzQgL2FmaWkxMDAzNSAvYWZpaTEwMDM2IC9hZmlpMTAwMzcgL2FmaWkxMDAyNCAvYWZpaTEwMDE5CisvYWZpaTEwMDQ2IC9hZmlpMTAwNDUgL2FmaWkxMDAyNSAvYWZpaTEwMDQyIC9hZmlpMTAwNDcgL2FmaWkxMDA0MyAvYWZpaTEwMDQxIC9hZmlpMTAwNDRdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvbGF0aW4xLnBzIGIvcnVudGltZS9wcmludC9sYXRpbjEucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY5ZGI5YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcHJpbnQvbGF0aW4xLnBzCkBAIC0wLDAgKzEsNDAgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0tbGF0aW4xCislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLWxhdGluMVsKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2V4Y2xhbSAvcXVvdGVkYmwgL251bWJlcnNpZ24gL2RvbGxhciAvcGVyY2VudCAvYW1wZXJzYW5kIC9xdW90ZXNpbmdsZQorL3BhcmVubGVmdCAvcGFyZW5yaWdodCAvYXN0ZXJpc2sgL3BsdXMgL2NvbW1hIC9taW51cyAvcGVyaW9kIC9zbGFzaAorL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorL2VpZ2h0IC9uaW5lIC9jb2xvbiAvc2VtaWNvbG9uIC9sZXNzIC9lcXVhbCAvZ3JlYXRlciAvcXVlc3Rpb24KKy9hdCAvQSAvQiAvQyAvRCAvRSAvRiAvRworL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKy9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisvWCAvWSAvWiAvYnJhY2tldGxlZnQgL2JhY2tzbGFzaCAvYnJhY2tldHJpZ2h0IC9hc2NpaWNpcmN1bSAvdW5kZXJzY29yZQorL2dyYXZlIC9hIC9iIC9jIC9kIC9lIC9mIC9nCisvaCAvaSAvaiAvayAvbCAvbSAvbiAvbworL3AgL3EgL3IgL3MgL3QgL3UgL3YgL3cKKy94IC95IC96IC9icmFjZWxlZnQgL2JhciAvYnJhY2VyaWdodCAvYXNjaWl0aWxkZSAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy9zcGFjZSAvZXhjbGFtZG93biAvY2VudCAvc3RlcmxpbmcgL2N1cnJlbmN5IC95ZW4gL2Jyb2tlbmJhciAvc2VjdGlvbgorL2RpZXJlc2lzIC9jb3B5cmlnaHQgL29yZGZlbWluaW5lIC9ndWlsbGVtb3RsZWZ0IC9sb2dpY2Fsbm90IC9oeXBoZW4gL3JlZ2lzdGVyZWQgL21hY3JvbgorL2RlZ3JlZSAvcGx1c21pbnVzIC90d29zdXBlcmlvciAvdGhyZWVzdXBlcmlvciAvYWN1dGUgL211IC9wYXJhZ3JhcGggL3BlcmlvZGNlbnRlcmVkCisvY2VkaWxsYSAvb25lc3VwZXJpb3IgL29yZG1hc2N1bGluZSAvZ3VpbGxlbW90cmlnaHQgL29uZXF1YXJ0ZXIgL29uZWhhbGYgL3RocmVlcXVhcnRlcnMgL3F1ZXN0aW9uZG93bgorL0FncmF2ZSAvQWFjdXRlIC9BY2lyY3VtZmxleCAvQXRpbGRlIC9BZGllcmVzaXMgL0FyaW5nIC9BRSAvQ2NlZGlsbGEKKy9FZ3JhdmUgL0VhY3V0ZSAvRWNpcmN1bWZsZXggL0VkaWVyZXNpcyAvSWdyYXZlIC9JYWN1dGUgL0ljaXJjdW1mbGV4IC9JZGllcmVzaXMKKy9FdGggL050aWxkZSAvT2dyYXZlIC9PYWN1dGUgL09jaXJjdW1mbGV4IC9PdGlsZGUgL09kaWVyZXNpcyAvbXVsdGlwbHkKKy9Pc2xhc2ggL1VncmF2ZSAvVWFjdXRlIC9VY2lyY3VtZmxleCAvVWRpZXJlc2lzIC9ZYWN1dGUgL1Rob3JuIC9nZXJtYW5kYmxzCisvYWdyYXZlIC9hYWN1dGUgL2FjaXJjdW1mbGV4IC9hdGlsZGUgL2FkaWVyZXNpcyAvYXJpbmcgL2FlIC9jY2VkaWxsYQorL2VncmF2ZSAvZWFjdXRlIC9lY2lyY3VtZmxleCAvZWRpZXJlc2lzIC9pZ3JhdmUgL2lhY3V0ZSAvaWNpcmN1bWZsZXggL2lkaWVyZXNpcworL2V0aCAvbnRpbGRlIC9vZ3JhdmUgL29hY3V0ZSAvb2NpcmN1bWZsZXggL290aWxkZSAvb2RpZXJlc2lzIC9kaXZpZGUKKy9vc2xhc2ggL3VncmF2ZSAvdWFjdXRlIC91Y2lyY3VtZmxleCAvdWRpZXJlc2lzIC95YWN1dGUgL3Rob3JuIC95ZGllcmVzaXNdCisvRW5jb2RpbmcgZGVmaW5lcmVzb3VyY2UgcG9wCislIHZpbTpmZj11bml4OgorJSVFT0YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcHJpbnQvbWFjLXJvbWFuLnBzIGIvcnVudGltZS9wcmludC9tYWMtcm9tYW4ucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5NDFiZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcHJpbnQvbWFjLXJvbWFuLnBzCkBAIC0wLDAgKzEsNDAgQEAKKyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUVuY29kaW5nCislJVRpdGxlOiBWSU0tbWFjLXJvbWFuCislJVZlcnNpb246IDEuMCAwCislJUVuZENvbW1lbnRzCisvVklNLW1hYy1yb21hblsKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKy8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisvc3BhY2UgL2V4Y2xhbSAvcXVvdGVkYmwgL251bWJlcnNpZ24gL2RvbGxhciAvcGVyY2VudCAvYW1wZXJzYW5kIC9xdW90ZXNpbmdsZQorL3BhcmVubGVmdCAvcGFyZW5yaWdodCAvYXN0ZXJpc2sgL3BsdXMgL2NvbW1hIC9taW51cyAvcGVyaW9kIC9zbGFzaAorL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorL2VpZ2h0IC9uaW5lIC9jb2xvbiAvc2VtaWNvbG9uIC9sZXNzIC9lcXVhbCAvZ3JlYXRlciAvcXVlc3Rpb24KKy9hdCAvQSAvQiAvQyAvRCAvRSAvRiAvRworL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKy9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisvWCAvWSAvWiAvYnJhY2tldGxlZnQgL2JhY2tzbGFzaCAvYnJhY2tldHJpZ2h0IC9hc2NpaWNpcmN1bSAvdW5kZXJzY29yZQorL2dyYXZlIC9hIC9iIC9jIC9kIC9lIC9mIC9nCisvaCAvaSAvaiAvayAvbCAvbSAvbiAvbworL3AgL3EgL3IgL3MgL3QgL3UgL3YgL3cKKy94IC95IC96IC9icmFjZWxlZnQgL2JhciAvYnJhY2VyaWdodCAvYXNjaWl0aWxkZSAvLm5vdGRlZgorL0FkaWVyZXNpcyAvQXJpbmcgL0NjZWRpbGxhIC9FYWN1dGUgL050aWxkZSAvT2RpZXJlc2lzIC9VZGllcmVzaXMgL2FhY3V0ZQorL2FncmF2ZSAvYWNpcmN1bWZsZXggL2FkaWVyZXNpcyAvYXRpbGRlIC9hcmluZyAvY2NlZGlsbGEgL2VhY3V0ZSAvZWdyYXZlCisvZWNpcmN1bWZsZXggL2VkaWVyZXNpcyAvaWFjdXRlIC9pZ3JhdmUgL2ljaXJjdW1mbGV4IC9pZGllcmVzaXMgL250aWxkZSAvb2FjdXRlCisvb2dyYXZlIC9vY2lyY3VtZmxleCAvb2RpZXJlc2lzIC9vdGlsZGUgL3VhY3V0ZSAvdWdyYXZlIC91Y2lyY3VtZmxleCAvdWRpZXJlc2lzCisvZGFnZ2VyIC9kZWdyZWUgL2NlbnQgL3N0ZXJsaW5nIC9zZWN0aW9uIC9idWxsZXQgL3BhcmFncmFwaCAvZ2VybWFuZGJscworL3JlZ2lzdGVyZWQgL2NvcHlyaWdodCAvdHJhZGVtYXJrIC9hY3V0ZSAvZGllcmVzaXMgL25vdGVxdWFsIC9BRSAvT3NsYXNoCisvaW5maW5pdHkgL3BsdXNtaW51cyAvbGVzc2VxdWFsIC9ncmVhdGVyZXF1YWwgL3llbiAvbXUgL3BhcnRpYWxkaWZmIC9zdW1tYXRpb24KKy9QaSAvcGkgL2ludGVncmFsIC9vcmRmZW1pbmluZSAvb3JkbWFzY3VsaW5lIC9PbWVnYSAvYWUgL29zbGFzaAorL3F1ZXN0aW9uZG93biAvZXhjbGFtZG93biAvbG9naWNhbG5vdCAvcmFkaWNhbCAvZmxvcmluIC9hcHByb3hlcXVhbCAvZGVsdGEgL2d1aWxsZW1vdGxlZnQKKy9ndWlsbGVtb3RyaWdodCAvZWxsaXBzaXMgL3NwYWNlIC9BZ3JhdmUgL0F0aWxkZSAvT3RpbGRlIC9PRSAvb2UKKy9lbmRhc2ggL2VtZGFzaCAvcXVvdGVkYmxsZWZ0IC9xdW90ZWRibHJpZ2h0IC9xdW90ZWxlZnQgL3F1b3RlcmlnaHQgL2RpdmlkZSAvbG96ZW5nZQorL3lkaWVyZXNpcyAvWWRpZXJlc2lzIC9mcmFjdGlvbiAvY3VycmVuY3kgL2d1aWxzaW5nbGxlZnQgL2d1aWxzaW5nbHJpZ2h0IC9maSAvZmwKKy9kYWdnZXJkYmwgL3BlcmlvZGNlbnRlcmVkIC9xdW90ZXNpbmdsYmFzZSAvcXVvdGVkYmxiYXNlIC9wZXJ0aG91c2FuZCAvQWNpcmN1bWZsZXggL0VjaXJjdW1mbGV4IC9BYWN1dGUKKy9FZGllcmVzaXMgL0VncmF2ZSAvSWFjdXRlIC9JY2lyY3VtZmxleCAvSWRpZXJlc2lzIC9JZ3JhdmUgL09hY3V0ZSAvT2NpcmN1bWZsZXgKKy9oZWFydCAvT2dyYXZlIC9VYWN1dGUgL1VjaXJjdW1mbGV4IC9VZ3JhdmUgL2RvdGxlc3NpIC9jaXJjdW1mbGV4IC90aWxkZQorL21hY3JvbiAvYnJldmUgL2RvdGFjY2VudCAvcmluZyAvY2VkaWxsYSAvaHVuZ2FydW1sYXV0IC9vZ29uZWsgL2Nhcm9uXQorL0VuY29kaW5nIGRlZmluZXJlc291cmNlIHBvcAorJSB2aW06ZmY9dW5peDoKKyUlRU9GCmRpZmYgLS1naXQgYS9ydW50aW1lL3ByaW50L3Byb2xvZy5wcyBiL3J1bnRpbWUvcHJpbnQvcHJvbG9nLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMzA5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ByaW50L3Byb2xvZy5wcwpAQCAtMCwwICsxLDQwIEBACislIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1Qcm9jU2V0CislJVRpdGxlOiBWSU0tUHJvbG9nCislJVZlcnNpb246IDEuMyAxCislJUVuZENvbW1lbnRzCislIEVkaXRpbmcgb2YgdGhpcyBmaWxlIGlzIE5PVCBSRUNPTU1FTkRFRC4gIFlvdSBydW4gYSB2ZXJ5IGdvb2QgcmlzayBvZiBjYXVzaW5nCislIGFsbCBQb3N0U2NyaXB0IHByaW50aW5nIGZyb20gVklNIGZhaWxpbmcgaWYgeW91IGRvLiAgUG9zdFNjcmlwdCBpcyBub3QgY2FsbGVkCislIGEgd3JpdGUtb25seSBsYW5ndWFnZSBmb3Igbm90aGluZyEKKy9iZHtiaW5kIGRlZn1iaW5kIGRlZi9sZHtsb2FkIGRlZn1iZC9lZHtleGNoIGRlZn1iZC9kL2RlZiBsZAorL2Rie2RpY3QgYmVnaW59YmQvY2Rle2N1cnJlbnRkaWN0IGVuZH1iZAorL1QgdHJ1ZSBkL0YgZmFsc2UgZAorL1NPIG51bGwgZC9zdnsvU08gc2F2ZSBkfWJkL3Jle1NPIHJlc3RvcmV9YmQKKy9MMiBzeXN0ZW1kaWN0L2xhbmd1YWdlbGV2ZWwgMiBjb3B5IGtub3due2dldCBleGVjfXtwb3AgcG9wIDF9aWZlbHNlIDIgZ2UgZAorL217bW92ZXRvfWJkL3N7c2hvd31iZC9tc3ttIHN9YmQvZ3tzZXRncmF5fWJkL3J7c2V0cmdiY29sb3J9YmQvc3B7c2hvd3BhZ2V9YmQKKy9nc3tnc2F2ZX1iZC9ncntncmVzdG9yZX1iZC9jcHtjdXJyZW50cG9pbnR9YmQKKy91bHtncyBVVyBzZXRsaW5ld2lkdGggY3AgVU8gYWRkIDIgY29weSBuZXdwYXRoIG0gMyAxIHJvbGwgYWRkIGV4Y2ggbGluZXRvCitzdHJva2UgZ3J9YmQKKy9iZ3tncyByIGNwIEJPIGFkZCA0IC0yIHJvbGwgcmVjdGZpbGwgZ3J9YmQKKy9zbHs5MCByb3RhdGUgMCBleGNoIHRyYW5zbGF0ZX1iZAorTDJ7Cisvc3NwZHttYXJrIGV4Y2h7c2V0cGFnZWRldmljZX1zdG9wcGVkIGNsZWFydG9tYXJrfWJkCisvbmN7MSBkYi9OdW1Db3BpZXMgZWQgY2RlIHNzcGR9YmQKKy9zcHN7MyBkYi9PcmllbnRhdGlvbiBlZFszIDEgcm9sbF0vUGFnZVNpemUgZWQvSW1hZ2luZ0JCb3ggbnVsbCBkIGNkZSBzc3BkfWJkCisvZHR7MiBkYi9UdW1ibGUgZWQvRHVwbGV4IGVkIGNkZSBzc3BkfWJkCisvY3sxIGRiL0NvbGxhdGUgZWQgY2RlIHNzcGR9YmQKK317CisvbmN7LyNjb3BpZXMgZWR9YmQKKy9zcHN7c3RhdHVzZGljdC9zZXRwYWdlIGdldCBleGVjfWJkCisvZHR7c3RhdHVzZGljdC9zZXR0dW1ibGUgMiBjb3B5IGtub3due2dldCBleGVjfXtwb3AgcG9wIHBvcH1pZmVsc2UKK3N0YXR1c2RpY3Qvc2V0ZHVwbGV4bW9kZSAyIGNvcHkga25vd257Z2V0IGV4ZWN9e3BvcCBwb3AgcG9wfWlmZWxzZX1iZAorL2N7cG9wfWJkCit9aWZlbHNlCisvZmZze2ZpbmRmb250IGV4Y2ggc2NhbGVmb250IGR9YmQvc2Z7c2V0Zm9udH1iZAorL3JlZnsxIGRiIGZpbmRmb250IGR1cCBtYXhsZW5ndGggZGljdC9ORkQgZWR7ZXhjaCBkdXAvRklEIG5le2V4Y2ggTkZEIDMgMSByb2xsCitwdXR9e3BvcCBwb3B9aWZlbHNlfWZvcmFsbC9FbmNvZGluZyBmaW5kcmVzb3VyY2UgZHVwIGxlbmd0aCAyNTYgZXF7TkZEL0VuY29kaW5nCiszIC0xIHJvbGwgcHV0fXtwb3B9aWZlbHNlIE5GRCBkdXAvRm9udFR5cGUgZ2V0IDMgbmV7L0NoYXJTdHJpbmdzfXsvQ2hhclByb2NzfQoraWZlbHNlIDIgY29weSBrbm93bnsyIGNvcHkgZ2V0IGR1cCBtYXhsZW5ndGggZGljdCBjb3B5Wy9xdWVzdGlvbmRvd24vc3BhY2VdezIKK2NvcHkga25vd257MiBjb3B5IGdldCAyIGluZGV4Ly5ub3RkZWYgMyAtMSByb2xsIHB1dCBwb3AgZXhpdH1pZiBwb3B9Zm9yYWxsIHB1dAorfXtwb3AgcG9wfWlmZWxzZSBkdXAgTkZEL0ZvbnROYW1lIDMgLTEgcm9sbCBwdXQgTkZEIGRlZmluZWZvbnQgcG9wIGVuZH1iZAorJSB2aW06ZmY9dW5peDoKKyUlRU9GCmRpZmYgLS1naXQgYS9ydW50aW1lL3JnYi50eHQgYi9ydW50aW1lL3JnYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjMmJhYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvcmdiLnR4dApAQCAtMCwwICsxLDc1MyBAQAorISAkWENvbnNvcnRpdW06IHJnYi50eHQsdiAxMC40MSA5NC8wMi8yMCAxODozOTozNiByd3MgRXhwICQKKzI1NSAyNTAgMjUwCQlzbm93CisyNDggMjQ4IDI1NQkJZ2hvc3Qgd2hpdGUKKzI0OCAyNDggMjU1CQlHaG9zdFdoaXRlCisyNDUgMjQ1IDI0NQkJd2hpdGUgc21va2UKKzI0NSAyNDUgMjQ1CQlXaGl0ZVNtb2tlCisyMjAgMjIwIDIyMAkJZ2FpbnNib3JvCisyNTUgMjUwIDI0MAkJZmxvcmFsIHdoaXRlCisyNTUgMjUwIDI0MAkJRmxvcmFsV2hpdGUKKzI1MyAyNDUgMjMwCQlvbGQgbGFjZQorMjUzIDI0NSAyMzAJCU9sZExhY2UKKzI1MCAyNDAgMjMwCQlsaW5lbgorMjUwIDIzNSAyMTUJCWFudGlxdWUgd2hpdGUKKzI1MCAyMzUgMjE1CQlBbnRpcXVlV2hpdGUKKzI1NSAyMzkgMjEzCQlwYXBheWEgd2hpcAorMjU1IDIzOSAyMTMJCVBhcGF5YVdoaXAKKzI1NSAyMzUgMjA1CQlibGFuY2hlZCBhbG1vbmQKKzI1NSAyMzUgMjA1CQlCbGFuY2hlZEFsbW9uZAorMjU1IDIyOCAxOTYJCWJpc3F1ZQorMjU1IDIxOCAxODUJCXBlYWNoIHB1ZmYKKzI1NSAyMTggMTg1CQlQZWFjaFB1ZmYKKzI1NSAyMjIgMTczCQluYXZham8gd2hpdGUKKzI1NSAyMjIgMTczCQlOYXZham9XaGl0ZQorMjU1IDIyOCAxODEJCW1vY2Nhc2luCisyNTUgMjQ4IDIyMAkJY29ybnNpbGsKKzI1NSAyNTUgMjQwCQlpdm9yeQorMjU1IDI1MCAyMDUJCWxlbW9uIGNoaWZmb24KKzI1NSAyNTAgMjA1CQlMZW1vbkNoaWZmb24KKzI1NSAyNDUgMjM4CQlzZWFzaGVsbAorMjQwIDI1NSAyNDAJCWhvbmV5ZGV3CisyNDUgMjU1IDI1MAkJbWludCBjcmVhbQorMjQ1IDI1NSAyNTAJCU1pbnRDcmVhbQorMjQwIDI1NSAyNTUJCWF6dXJlCisyNDAgMjQ4IDI1NQkJYWxpY2UgYmx1ZQorMjQwIDI0OCAyNTUJCUFsaWNlQmx1ZQorMjMwIDIzMCAyNTAJCWxhdmVuZGVyCisyNTUgMjQwIDI0NQkJbGF2ZW5kZXIgYmx1c2gKKzI1NSAyNDAgMjQ1CQlMYXZlbmRlckJsdXNoCisyNTUgMjI4IDIyNQkJbWlzdHkgcm9zZQorMjU1IDIyOCAyMjUJCU1pc3R5Um9zZQorMjU1IDI1NSAyNTUJCXdoaXRlCisgIDAgICAwICAgMAkJYmxhY2sKKyA0NyAgNzkgIDc5CQlkYXJrIHNsYXRlIGdyYXkKKyA0NyAgNzkgIDc5CQlEYXJrU2xhdGVHcmF5CisgNDcgIDc5ICA3OQkJZGFyayBzbGF0ZSBncmV5CisgNDcgIDc5ICA3OQkJRGFya1NsYXRlR3JleQorMTA1IDEwNSAxMDUJCWRpbSBncmF5CisxMDUgMTA1IDEwNQkJRGltR3JheQorMTA1IDEwNSAxMDUJCWRpbSBncmV5CisxMDUgMTA1IDEwNQkJRGltR3JleQorMTEyIDEyOCAxNDQJCXNsYXRlIGdyYXkKKzExMiAxMjggMTQ0CQlTbGF0ZUdyYXkKKzExMiAxMjggMTQ0CQlzbGF0ZSBncmV5CisxMTIgMTI4IDE0NAkJU2xhdGVHcmV5CisxMTkgMTM2IDE1MwkJbGlnaHQgc2xhdGUgZ3JheQorMTE5IDEzNiAxNTMJCUxpZ2h0U2xhdGVHcmF5CisxMTkgMTM2IDE1MwkJbGlnaHQgc2xhdGUgZ3JleQorMTE5IDEzNiAxNTMJCUxpZ2h0U2xhdGVHcmV5CisxOTAgMTkwIDE5MAkJZ3JheQorMTkwIDE5MCAxOTAJCWdyZXkKKzIxMSAyMTEgMjExCQlsaWdodCBncmV5CisyMTEgMjExIDIxMQkJTGlnaHRHcmV5CisyMTEgMjExIDIxMQkJbGlnaHQgZ3JheQorMjExIDIxMSAyMTEJCUxpZ2h0R3JheQorIDI1ICAyNSAxMTIJCW1pZG5pZ2h0IGJsdWUKKyAyNSAgMjUgMTEyCQlNaWRuaWdodEJsdWUKKyAgMCAgIDAgMTI4CQluYXZ5CisgIDAgICAwIDEyOAkJbmF2eSBibHVlCisgIDAgICAwIDEyOAkJTmF2eUJsdWUKKzEwMCAxNDkgMjM3CQljb3JuZmxvd2VyIGJsdWUKKzEwMCAxNDkgMjM3CQlDb3JuZmxvd2VyQmx1ZQorIDcyICA2MSAxMzkJCWRhcmsgc2xhdGUgYmx1ZQorIDcyICA2MSAxMzkJCURhcmtTbGF0ZUJsdWUKKzEwNiAgOTAgMjA1CQlzbGF0ZSBibHVlCisxMDYgIDkwIDIwNQkJU2xhdGVCbHVlCisxMjMgMTA0IDIzOAkJbWVkaXVtIHNsYXRlIGJsdWUKKzEyMyAxMDQgMjM4CQlNZWRpdW1TbGF0ZUJsdWUKKzEzMiAxMTIgMjU1CQlsaWdodCBzbGF0ZSBibHVlCisxMzIgMTEyIDI1NQkJTGlnaHRTbGF0ZUJsdWUKKyAgMCAgIDAgMjA1CQltZWRpdW0gYmx1ZQorICAwICAgMCAyMDUJCU1lZGl1bUJsdWUKKyA2NSAxMDUgMjI1CQlyb3lhbCBibHVlCisgNjUgMTA1IDIyNQkJUm95YWxCbHVlCisgIDAgICAwIDI1NQkJYmx1ZQorIDMwIDE0NCAyNTUJCWRvZGdlciBibHVlCisgMzAgMTQ0IDI1NQkJRG9kZ2VyQmx1ZQorICAwIDE5MSAyNTUJCWRlZXAgc2t5IGJsdWUKKyAgMCAxOTEgMjU1CQlEZWVwU2t5Qmx1ZQorMTM1IDIwNiAyMzUJCXNreSBibHVlCisxMzUgMjA2IDIzNQkJU2t5Qmx1ZQorMTM1IDIwNiAyNTAJCWxpZ2h0IHNreSBibHVlCisxMzUgMjA2IDI1MAkJTGlnaHRTa3lCbHVlCisgNzAgMTMwIDE4MAkJc3RlZWwgYmx1ZQorIDcwIDEzMCAxODAJCVN0ZWVsQmx1ZQorMTc2IDE5NiAyMjIJCWxpZ2h0IHN0ZWVsIGJsdWUKKzE3NiAxOTYgMjIyCQlMaWdodFN0ZWVsQmx1ZQorMTczIDIxNiAyMzAJCWxpZ2h0IGJsdWUKKzE3MyAyMTYgMjMwCQlMaWdodEJsdWUKKzE3NiAyMjQgMjMwCQlwb3dkZXIgYmx1ZQorMTc2IDIyNCAyMzAJCVBvd2RlckJsdWUKKzE3NSAyMzggMjM4CQlwYWxlIHR1cnF1b2lzZQorMTc1IDIzOCAyMzgJCVBhbGVUdXJxdW9pc2UKKyAgMCAyMDYgMjA5CQlkYXJrIHR1cnF1b2lzZQorICAwIDIwNiAyMDkJCURhcmtUdXJxdW9pc2UKKyA3MiAyMDkgMjA0CQltZWRpdW0gdHVycXVvaXNlCisgNzIgMjA5IDIwNAkJTWVkaXVtVHVycXVvaXNlCisgNjQgMjI0IDIwOAkJdHVycXVvaXNlCisgIDAgMjU1IDI1NQkJY3lhbgorMjI0IDI1NSAyNTUJCWxpZ2h0IGN5YW4KKzIyNCAyNTUgMjU1CQlMaWdodEN5YW4KKyA5NSAxNTggMTYwCQljYWRldCBibHVlCisgOTUgMTU4IDE2MAkJQ2FkZXRCbHVlCisxMDIgMjA1IDE3MAkJbWVkaXVtIGFxdWFtYXJpbmUKKzEwMiAyMDUgMTcwCQlNZWRpdW1BcXVhbWFyaW5lCisxMjcgMjU1IDIxMgkJYXF1YW1hcmluZQorICAwIDEwMCAgIDAJCWRhcmsgZ3JlZW4KKyAgMCAxMDAgICAwCQlEYXJrR3JlZW4KKyA4NSAxMDcgIDQ3CQlkYXJrIG9saXZlIGdyZWVuCisgODUgMTA3ICA0NwkJRGFya09saXZlR3JlZW4KKzE0MyAxODggMTQzCQlkYXJrIHNlYSBncmVlbgorMTQzIDE4OCAxNDMJCURhcmtTZWFHcmVlbgorIDQ2IDEzOSAgODcJCXNlYSBncmVlbgorIDQ2IDEzOSAgODcJCVNlYUdyZWVuCisgNjAgMTc5IDExMwkJbWVkaXVtIHNlYSBncmVlbgorIDYwIDE3OSAxMTMJCU1lZGl1bVNlYUdyZWVuCisgMzIgMTc4IDE3MAkJbGlnaHQgc2VhIGdyZWVuCisgMzIgMTc4IDE3MAkJTGlnaHRTZWFHcmVlbgorMTUyIDI1MSAxNTIJCXBhbGUgZ3JlZW4KKzE1MiAyNTEgMTUyCQlQYWxlR3JlZW4KKyAgMCAyNTUgMTI3CQlzcHJpbmcgZ3JlZW4KKyAgMCAyNTUgMTI3CQlTcHJpbmdHcmVlbgorMTI0IDI1MiAgIDAJCWxhd24gZ3JlZW4KKzEyNCAyNTIgICAwCQlMYXduR3JlZW4KKyAgMCAyNTUgICAwCQlncmVlbgorMTI3IDI1NSAgIDAJCWNoYXJ0cmV1c2UKKyAgMCAyNTAgMTU0CQltZWRpdW0gc3ByaW5nIGdyZWVuCisgIDAgMjUwIDE1NAkJTWVkaXVtU3ByaW5nR3JlZW4KKzE3MyAyNTUgIDQ3CQlncmVlbiB5ZWxsb3cKKzE3MyAyNTUgIDQ3CQlHcmVlblllbGxvdworIDUwIDIwNSAgNTAJCWxpbWUgZ3JlZW4KKyA1MCAyMDUgIDUwCQlMaW1lR3JlZW4KKzE1NCAyMDUgIDUwCQl5ZWxsb3cgZ3JlZW4KKzE1NCAyMDUgIDUwCQlZZWxsb3dHcmVlbgorIDM0IDEzOSAgMzQJCWZvcmVzdCBncmVlbgorIDM0IDEzOSAgMzQJCUZvcmVzdEdyZWVuCisxMDcgMTQyICAzNQkJb2xpdmUgZHJhYgorMTA3IDE0MiAgMzUJCU9saXZlRHJhYgorMTg5IDE4MyAxMDcJCWRhcmsga2hha2kKKzE4OSAxODMgMTA3CQlEYXJrS2hha2kKKzI0MCAyMzAgMTQwCQlraGFraQorMjM4IDIzMiAxNzAJCXBhbGUgZ29sZGVucm9kCisyMzggMjMyIDE3MAkJUGFsZUdvbGRlbnJvZAorMjUwIDI1MCAyMTAJCWxpZ2h0IGdvbGRlbnJvZCB5ZWxsb3cKKzI1MCAyNTAgMjEwCQlMaWdodEdvbGRlbnJvZFllbGxvdworMjU1IDI1NSAyMjQJCWxpZ2h0IHllbGxvdworMjU1IDI1NSAyMjQJCUxpZ2h0WWVsbG93CisyNTUgMjU1ICAgMAkJeWVsbG93CisyNTUgMjE1ICAgMAkJZ29sZAorMjM4IDIyMSAxMzAJCWxpZ2h0IGdvbGRlbnJvZAorMjM4IDIyMSAxMzAJCUxpZ2h0R29sZGVucm9kCisyMTggMTY1ICAzMgkJZ29sZGVucm9kCisxODQgMTM0ICAxMQkJZGFyayBnb2xkZW5yb2QKKzE4NCAxMzQgIDExCQlEYXJrR29sZGVucm9kCisxODggMTQzIDE0MwkJcm9zeSBicm93bgorMTg4IDE0MyAxNDMJCVJvc3lCcm93bgorMjA1ICA5MiAgOTIJCWluZGlhbiByZWQKKzIwNSAgOTIgIDkyCQlJbmRpYW5SZWQKKzEzOSAgNjkgIDE5CQlzYWRkbGUgYnJvd24KKzEzOSAgNjkgIDE5CQlTYWRkbGVCcm93bgorMTYwICA4MiAgNDUJCXNpZW5uYQorMjA1IDEzMyAgNjMJCXBlcnUKKzIyMiAxODQgMTM1CQlidXJseXdvb2QKKzI0NSAyNDUgMjIwCQliZWlnZQorMjQ1IDIyMiAxNzkJCXdoZWF0CisyNDQgMTY0ICA5NgkJc2FuZHkgYnJvd24KKzI0NCAxNjQgIDk2CQlTYW5keUJyb3duCisyMTAgMTgwIDE0MAkJdGFuCisyMTAgMTA1ICAzMAkJY2hvY29sYXRlCisxNzggIDM0ICAzNAkJZmlyZWJyaWNrCisxNjUgIDQyICA0MgkJYnJvd24KKzIzMyAxNTAgMTIyCQlkYXJrIHNhbG1vbgorMjMzIDE1MCAxMjIJCURhcmtTYWxtb24KKzI1MCAxMjggMTE0CQlzYWxtb24KKzI1NSAxNjAgMTIyCQlsaWdodCBzYWxtb24KKzI1NSAxNjAgMTIyCQlMaWdodFNhbG1vbgorMjU1IDE2NSAgIDAJCW9yYW5nZQorMjU1IDE0MCAgIDAJCWRhcmsgb3JhbmdlCisyNTUgMTQwICAgMAkJRGFya09yYW5nZQorMjU1IDEyNyAgODAJCWNvcmFsCisyNDAgMTI4IDEyOAkJbGlnaHQgY29yYWwKKzI0MCAxMjggMTI4CQlMaWdodENvcmFsCisyNTUgIDk5ICA3MQkJdG9tYXRvCisyNTUgIDY5ICAgMAkJb3JhbmdlIHJlZAorMjU1ICA2OSAgIDAJCU9yYW5nZVJlZAorMjU1ICAgMCAgIDAJCXJlZAorMjU1IDEwNSAxODAJCWhvdCBwaW5rCisyNTUgMTA1IDE4MAkJSG90UGluaworMjU1ICAyMCAxNDcJCWRlZXAgcGluaworMjU1ICAyMCAxNDcJCURlZXBQaW5rCisyNTUgMTkyIDIwMwkJcGluaworMjU1IDE4MiAxOTMJCWxpZ2h0IHBpbmsKKzI1NSAxODIgMTkzCQlMaWdodFBpbmsKKzIxOSAxMTIgMTQ3CQlwYWxlIHZpb2xldCByZWQKKzIxOSAxMTIgMTQ3CQlQYWxlVmlvbGV0UmVkCisxNzYgIDQ4ICA5NgkJbWFyb29uCisxOTkgIDIxIDEzMwkJbWVkaXVtIHZpb2xldCByZWQKKzE5OSAgMjEgMTMzCQlNZWRpdW1WaW9sZXRSZWQKKzIwOCAgMzIgMTQ0CQl2aW9sZXQgcmVkCisyMDggIDMyIDE0NAkJVmlvbGV0UmVkCisyNTUgICAwIDI1NQkJbWFnZW50YQorMjM4IDEzMCAyMzgJCXZpb2xldAorMjIxIDE2MCAyMjEJCXBsdW0KKzIxOCAxMTIgMjE0CQlvcmNoaWQKKzE4NiAgODUgMjExCQltZWRpdW0gb3JjaGlkCisxODYgIDg1IDIxMQkJTWVkaXVtT3JjaGlkCisxNTMgIDUwIDIwNAkJZGFyayBvcmNoaWQKKzE1MyAgNTAgMjA0CQlEYXJrT3JjaGlkCisxNDggICAwIDIxMQkJZGFyayB2aW9sZXQKKzE0OCAgIDAgMjExCQlEYXJrVmlvbGV0CisxMzggIDQzIDIyNgkJYmx1ZSB2aW9sZXQKKzEzOCAgNDMgMjI2CQlCbHVlVmlvbGV0CisxNjAgIDMyIDI0MAkJcHVycGxlCisxNDcgMTEyIDIxOQkJbWVkaXVtIHB1cnBsZQorMTQ3IDExMiAyMTkJCU1lZGl1bVB1cnBsZQorMjE2IDE5MSAyMTYJCXRoaXN0bGUKKzI1NSAyNTAgMjUwCQlzbm93MQorMjM4IDIzMyAyMzMJCXNub3cyCisyMDUgMjAxIDIwMQkJc25vdzMKKzEzOSAxMzcgMTM3CQlzbm93NAorMjU1IDI0NSAyMzgJCXNlYXNoZWxsMQorMjM4IDIyOSAyMjIJCXNlYXNoZWxsMgorMjA1IDE5NyAxOTEJCXNlYXNoZWxsMworMTM5IDEzNCAxMzAJCXNlYXNoZWxsNAorMjU1IDIzOSAyMTkJCUFudGlxdWVXaGl0ZTEKKzIzOCAyMjMgMjA0CQlBbnRpcXVlV2hpdGUyCisyMDUgMTkyIDE3NgkJQW50aXF1ZVdoaXRlMworMTM5IDEzMSAxMjAJCUFudGlxdWVXaGl0ZTQKKzI1NSAyMjggMTk2CQliaXNxdWUxCisyMzggMjEzIDE4MwkJYmlzcXVlMgorMjA1IDE4MyAxNTgJCWJpc3F1ZTMKKzEzOSAxMjUgMTA3CQliaXNxdWU0CisyNTUgMjE4IDE4NQkJUGVhY2hQdWZmMQorMjM4IDIwMyAxNzMJCVBlYWNoUHVmZjIKKzIwNSAxNzUgMTQ5CQlQZWFjaFB1ZmYzCisxMzkgMTE5IDEwMQkJUGVhY2hQdWZmNAorMjU1IDIyMiAxNzMJCU5hdmFqb1doaXRlMQorMjM4IDIwNyAxNjEJCU5hdmFqb1doaXRlMgorMjA1IDE3OSAxMzkJCU5hdmFqb1doaXRlMworMTM5IDEyMQkgOTQJCU5hdmFqb1doaXRlNAorMjU1IDI1MCAyMDUJCUxlbW9uQ2hpZmZvbjEKKzIzOCAyMzMgMTkxCQlMZW1vbkNoaWZmb24yCisyMDUgMjAxIDE2NQkJTGVtb25DaGlmZm9uMworMTM5IDEzNyAxMTIJCUxlbW9uQ2hpZmZvbjQKKzI1NSAyNDggMjIwCQljb3Juc2lsazEKKzIzOCAyMzIgMjA1CQljb3Juc2lsazIKKzIwNSAyMDAgMTc3CQljb3Juc2lsazMKKzEzOSAxMzYgMTIwCQljb3Juc2lsazQKKzI1NSAyNTUgMjQwCQlpdm9yeTEKKzIzOCAyMzggMjI0CQlpdm9yeTIKKzIwNSAyMDUgMTkzCQlpdm9yeTMKKzEzOSAxMzkgMTMxCQlpdm9yeTQKKzI0MCAyNTUgMjQwCQlob25leWRldzEKKzIyNCAyMzggMjI0CQlob25leWRldzIKKzE5MyAyMDUgMTkzCQlob25leWRldzMKKzEzMSAxMzkgMTMxCQlob25leWRldzQKKzI1NSAyNDAgMjQ1CQlMYXZlbmRlckJsdXNoMQorMjM4IDIyNCAyMjkJCUxhdmVuZGVyQmx1c2gyCisyMDUgMTkzIDE5NwkJTGF2ZW5kZXJCbHVzaDMKKzEzOSAxMzEgMTM0CQlMYXZlbmRlckJsdXNoNAorMjU1IDIyOCAyMjUJCU1pc3R5Um9zZTEKKzIzOCAyMTMgMjEwCQlNaXN0eVJvc2UyCisyMDUgMTgzIDE4MQkJTWlzdHlSb3NlMworMTM5IDEyNSAxMjMJCU1pc3R5Um9zZTQKKzI0MCAyNTUgMjU1CQlhenVyZTEKKzIyNCAyMzggMjM4CQlhenVyZTIKKzE5MyAyMDUgMjA1CQlhenVyZTMKKzEzMSAxMzkgMTM5CQlhenVyZTQKKzEzMSAxMTEgMjU1CQlTbGF0ZUJsdWUxCisxMjIgMTAzIDIzOAkJU2xhdGVCbHVlMgorMTA1ICA4OSAyMDUJCVNsYXRlQmx1ZTMKKyA3MSAgNjAgMTM5CQlTbGF0ZUJsdWU0CisgNzIgMTE4IDI1NQkJUm95YWxCbHVlMQorIDY3IDExMCAyMzgJCVJveWFsQmx1ZTIKKyA1OCAgOTUgMjA1CQlSb3lhbEJsdWUzCisgMzkgIDY0IDEzOQkJUm95YWxCbHVlNAorICAwICAgMCAyNTUJCWJsdWUxCisgIDAgICAwIDIzOAkJYmx1ZTIKKyAgMCAgIDAgMjA1CQlibHVlMworICAwICAgMCAxMzkJCWJsdWU0CisgMzAgMTQ0IDI1NQkJRG9kZ2VyQmx1ZTEKKyAyOCAxMzQgMjM4CQlEb2RnZXJCbHVlMgorIDI0IDExNiAyMDUJCURvZGdlckJsdWUzCisgMTYgIDc4IDEzOQkJRG9kZ2VyQmx1ZTQKKyA5OSAxODQgMjU1CQlTdGVlbEJsdWUxCisgOTIgMTcyIDIzOAkJU3RlZWxCbHVlMgorIDc5IDE0OCAyMDUJCVN0ZWVsQmx1ZTMKKyA1NCAxMDAgMTM5CQlTdGVlbEJsdWU0CisgIDAgMTkxIDI1NQkJRGVlcFNreUJsdWUxCisgIDAgMTc4IDIzOAkJRGVlcFNreUJsdWUyCisgIDAgMTU0IDIwNQkJRGVlcFNreUJsdWUzCisgIDAgMTA0IDEzOQkJRGVlcFNreUJsdWU0CisxMzUgMjA2IDI1NQkJU2t5Qmx1ZTEKKzEyNiAxOTIgMjM4CQlTa3lCbHVlMgorMTA4IDE2NiAyMDUJCVNreUJsdWUzCisgNzQgMTEyIDEzOQkJU2t5Qmx1ZTQKKzE3NiAyMjYgMjU1CQlMaWdodFNreUJsdWUxCisxNjQgMjExIDIzOAkJTGlnaHRTa3lCbHVlMgorMTQxIDE4MiAyMDUJCUxpZ2h0U2t5Qmx1ZTMKKyA5NiAxMjMgMTM5CQlMaWdodFNreUJsdWU0CisxOTggMjI2IDI1NQkJU2xhdGVHcmF5MQorMTg1IDIxMSAyMzgJCVNsYXRlR3JheTIKKzE1OSAxODIgMjA1CQlTbGF0ZUdyYXkzCisxMDggMTIzIDEzOQkJU2xhdGVHcmF5NAorMjAyIDIyNSAyNTUJCUxpZ2h0U3RlZWxCbHVlMQorMTg4IDIxMCAyMzgJCUxpZ2h0U3RlZWxCbHVlMgorMTYyIDE4MSAyMDUJCUxpZ2h0U3RlZWxCbHVlMworMTEwIDEyMyAxMzkJCUxpZ2h0U3RlZWxCbHVlNAorMTkxIDIzOSAyNTUJCUxpZ2h0Qmx1ZTEKKzE3OCAyMjMgMjM4CQlMaWdodEJsdWUyCisxNTQgMTkyIDIwNQkJTGlnaHRCbHVlMworMTA0IDEzMSAxMzkJCUxpZ2h0Qmx1ZTQKKzIyNCAyNTUgMjU1CQlMaWdodEN5YW4xCisyMDkgMjM4IDIzOAkJTGlnaHRDeWFuMgorMTgwIDIwNSAyMDUJCUxpZ2h0Q3lhbjMKKzEyMiAxMzkgMTM5CQlMaWdodEN5YW40CisxODcgMjU1IDI1NQkJUGFsZVR1cnF1b2lzZTEKKzE3NCAyMzggMjM4CQlQYWxlVHVycXVvaXNlMgorMTUwIDIwNSAyMDUJCVBhbGVUdXJxdW9pc2UzCisxMDIgMTM5IDEzOQkJUGFsZVR1cnF1b2lzZTQKKzE1MiAyNDUgMjU1CQlDYWRldEJsdWUxCisxNDIgMjI5IDIzOAkJQ2FkZXRCbHVlMgorMTIyIDE5NyAyMDUJCUNhZGV0Qmx1ZTMKKyA4MyAxMzQgMTM5CQlDYWRldEJsdWU0CisgIDAgMjQ1IDI1NQkJdHVycXVvaXNlMQorICAwIDIyOSAyMzgJCXR1cnF1b2lzZTIKKyAgMCAxOTcgMjA1CQl0dXJxdW9pc2UzCisgIDAgMTM0IDEzOQkJdHVycXVvaXNlNAorICAwIDI1NSAyNTUJCWN5YW4xCisgIDAgMjM4IDIzOAkJY3lhbjIKKyAgMCAyMDUgMjA1CQljeWFuMworICAwIDEzOSAxMzkJCWN5YW40CisxNTEgMjU1IDI1NQkJRGFya1NsYXRlR3JheTEKKzE0MSAyMzggMjM4CQlEYXJrU2xhdGVHcmF5MgorMTIxIDIwNSAyMDUJCURhcmtTbGF0ZUdyYXkzCisgODIgMTM5IDEzOQkJRGFya1NsYXRlR3JheTQKKzEyNyAyNTUgMjEyCQlhcXVhbWFyaW5lMQorMTE4IDIzOCAxOTgJCWFxdWFtYXJpbmUyCisxMDIgMjA1IDE3MAkJYXF1YW1hcmluZTMKKyA2OSAxMzkgMTE2CQlhcXVhbWFyaW5lNAorMTkzIDI1NSAxOTMJCURhcmtTZWFHcmVlbjEKKzE4MCAyMzggMTgwCQlEYXJrU2VhR3JlZW4yCisxNTUgMjA1IDE1NQkJRGFya1NlYUdyZWVuMworMTA1IDEzOSAxMDUJCURhcmtTZWFHcmVlbjQKKyA4NCAyNTUgMTU5CQlTZWFHcmVlbjEKKyA3OCAyMzggMTQ4CQlTZWFHcmVlbjIKKyA2NyAyMDUgMTI4CQlTZWFHcmVlbjMKKyA0NiAxMzkJIDg3CQlTZWFHcmVlbjQKKzE1NCAyNTUgMTU0CQlQYWxlR3JlZW4xCisxNDQgMjM4IDE0NAkJUGFsZUdyZWVuMgorMTI0IDIwNSAxMjQJCVBhbGVHcmVlbjMKKyA4NCAxMzkJIDg0CQlQYWxlR3JlZW40CisgIDAgMjU1IDEyNwkJU3ByaW5nR3JlZW4xCisgIDAgMjM4IDExOAkJU3ByaW5nR3JlZW4yCisgIDAgMjA1IDEwMgkJU3ByaW5nR3JlZW4zCisgIDAgMTM5CSA2OQkJU3ByaW5nR3JlZW40CisgIDAgMjU1CSAgMAkJZ3JlZW4xCisgIDAgMjM4CSAgMAkJZ3JlZW4yCisgIDAgMjA1CSAgMAkJZ3JlZW4zCisgIDAgMTM5CSAgMAkJZ3JlZW40CisxMjcgMjU1CSAgMAkJY2hhcnRyZXVzZTEKKzExOCAyMzgJICAwCQljaGFydHJldXNlMgorMTAyIDIwNQkgIDAJCWNoYXJ0cmV1c2UzCisgNjkgMTM5CSAgMAkJY2hhcnRyZXVzZTQKKzE5MiAyNTUJIDYyCQlPbGl2ZURyYWIxCisxNzkgMjM4CSA1OAkJT2xpdmVEcmFiMgorMTU0IDIwNQkgNTAJCU9saXZlRHJhYjMKKzEwNSAxMzkJIDM0CQlPbGl2ZURyYWI0CisyMDIgMjU1IDExMgkJRGFya09saXZlR3JlZW4xCisxODggMjM4IDEwNAkJRGFya09saXZlR3JlZW4yCisxNjIgMjA1CSA5MAkJRGFya09saXZlR3JlZW4zCisxMTAgMTM5CSA2MQkJRGFya09saXZlR3JlZW40CisyNTUgMjQ2IDE0MwkJa2hha2kxCisyMzggMjMwIDEzMwkJa2hha2kyCisyMDUgMTk4IDExNQkJa2hha2kzCisxMzkgMTM0CSA3OAkJa2hha2k0CisyNTUgMjM2IDEzOQkJTGlnaHRHb2xkZW5yb2QxCisyMzggMjIwIDEzMAkJTGlnaHRHb2xkZW5yb2QyCisyMDUgMTkwIDExMgkJTGlnaHRHb2xkZW5yb2QzCisxMzkgMTI5CSA3NgkJTGlnaHRHb2xkZW5yb2Q0CisyNTUgMjU1IDIyNAkJTGlnaHRZZWxsb3cxCisyMzggMjM4IDIwOQkJTGlnaHRZZWxsb3cyCisyMDUgMjA1IDE4MAkJTGlnaHRZZWxsb3czCisxMzkgMTM5IDEyMgkJTGlnaHRZZWxsb3c0CisyNTUgMjU1CSAgMAkJeWVsbG93MQorMjM4IDIzOAkgIDAJCXllbGxvdzIKKzIwNSAyMDUJICAwCQl5ZWxsb3czCisxMzkgMTM5CSAgMAkJeWVsbG93NAorMjU1IDIxNQkgIDAJCWdvbGQxCisyMzggMjAxCSAgMAkJZ29sZDIKKzIwNSAxNzMJICAwCQlnb2xkMworMTM5IDExNwkgIDAJCWdvbGQ0CisyNTUgMTkzCSAzNwkJZ29sZGVucm9kMQorMjM4IDE4MAkgMzQJCWdvbGRlbnJvZDIKKzIwNSAxNTUJIDI5CQlnb2xkZW5yb2QzCisxMzkgMTA1CSAyMAkJZ29sZGVucm9kNAorMjU1IDE4NQkgMTUJCURhcmtHb2xkZW5yb2QxCisyMzggMTczCSAxNAkJRGFya0dvbGRlbnJvZDIKKzIwNSAxNDkJIDEyCQlEYXJrR29sZGVucm9kMworMTM5IDEwMQkgIDgJCURhcmtHb2xkZW5yb2Q0CisyNTUgMTkzIDE5MwkJUm9zeUJyb3duMQorMjM4IDE4MCAxODAJCVJvc3lCcm93bjIKKzIwNSAxNTUgMTU1CQlSb3N5QnJvd24zCisxMzkgMTA1IDEwNQkJUm9zeUJyb3duNAorMjU1IDEwNiAxMDYJCUluZGlhblJlZDEKKzIzOCAgOTkJIDk5CQlJbmRpYW5SZWQyCisyMDUgIDg1CSA4NQkJSW5kaWFuUmVkMworMTM5ICA1OAkgNTgJCUluZGlhblJlZDQKKzI1NSAxMzAJIDcxCQlzaWVubmExCisyMzggMTIxCSA2NgkJc2llbm5hMgorMjA1IDEwNAkgNTcJCXNpZW5uYTMKKzEzOSAgNzEJIDM4CQlzaWVubmE0CisyNTUgMjExIDE1NQkJYnVybHl3b29kMQorMjM4IDE5NyAxNDUJCWJ1cmx5d29vZDIKKzIwNSAxNzAgMTI1CQlidXJseXdvb2QzCisxMzkgMTE1CSA4NQkJYnVybHl3b29kNAorMjU1IDIzMSAxODYJCXdoZWF0MQorMjM4IDIxNiAxNzQJCXdoZWF0MgorMjA1IDE4NiAxNTAJCXdoZWF0MworMTM5IDEyNiAxMDIJCXdoZWF0NAorMjU1IDE2NQkgNzkJCXRhbjEKKzIzOCAxNTQJIDczCQl0YW4yCisyMDUgMTMzCSA2MwkJdGFuMworMTM5ICA5MAkgNDMJCXRhbjQKKzI1NSAxMjcJIDM2CQljaG9jb2xhdGUxCisyMzggMTE4CSAzMwkJY2hvY29sYXRlMgorMjA1IDEwMgkgMjkJCWNob2NvbGF0ZTMKKzEzOSAgNjkJIDE5CQljaG9jb2xhdGU0CisyNTUgIDQ4CSA0OAkJZmlyZWJyaWNrMQorMjM4ICA0NAkgNDQJCWZpcmVicmljazIKKzIwNSAgMzgJIDM4CQlmaXJlYnJpY2szCisxMzkgIDI2CSAyNgkJZmlyZWJyaWNrNAorMjU1ICA2NAkgNjQJCWJyb3duMQorMjM4ICA1OQkgNTkJCWJyb3duMgorMjA1ICA1MQkgNTEJCWJyb3duMworMTM5ICAzNQkgMzUJCWJyb3duNAorMjU1IDE0MCAxMDUJCXNhbG1vbjEKKzIzOCAxMzAJIDk4CQlzYWxtb24yCisyMDUgMTEyCSA4NAkJc2FsbW9uMworMTM5ICA3NgkgNTcJCXNhbG1vbjQKKzI1NSAxNjAgMTIyCQlMaWdodFNhbG1vbjEKKzIzOCAxNDkgMTE0CQlMaWdodFNhbG1vbjIKKzIwNSAxMjkJIDk4CQlMaWdodFNhbG1vbjMKKzEzOSAgODcJIDY2CQlMaWdodFNhbG1vbjQKKzI1NSAxNjUJICAwCQlvcmFuZ2UxCisyMzggMTU0CSAgMAkJb3JhbmdlMgorMjA1IDEzMwkgIDAJCW9yYW5nZTMKKzEzOSAgOTAJICAwCQlvcmFuZ2U0CisyNTUgMTI3CSAgMAkJRGFya09yYW5nZTEKKzIzOCAxMTgJICAwCQlEYXJrT3JhbmdlMgorMjA1IDEwMgkgIDAJCURhcmtPcmFuZ2UzCisxMzkgIDY5CSAgMAkJRGFya09yYW5nZTQKKzI1NSAxMTQJIDg2CQljb3JhbDEKKzIzOCAxMDYJIDgwCQljb3JhbDIKKzIwNSAgOTEJIDY5CQljb3JhbDMKKzEzOSAgNjIJIDQ3CQljb3JhbDQKKzI1NSAgOTkJIDcxCQl0b21hdG8xCisyMzggIDkyCSA2NgkJdG9tYXRvMgorMjA1ICA3OQkgNTcJCXRvbWF0bzMKKzEzOSAgNTQJIDM4CQl0b21hdG80CisyNTUgIDY5CSAgMAkJT3JhbmdlUmVkMQorMjM4ICA2NAkgIDAJCU9yYW5nZVJlZDIKKzIwNSAgNTUJICAwCQlPcmFuZ2VSZWQzCisxMzkgIDM3CSAgMAkJT3JhbmdlUmVkNAorMjU1ICAgMAkgIDAJCXJlZDEKKzIzOCAgIDAJICAwCQlyZWQyCisyMDUgICAwCSAgMAkJcmVkMworMTM5ICAgMAkgIDAJCXJlZDQKKzI1NSAgMjAgMTQ3CQlEZWVwUGluazEKKzIzOCAgMTggMTM3CQlEZWVwUGluazIKKzIwNSAgMTYgMTE4CQlEZWVwUGluazMKKzEzOSAgMTAJIDgwCQlEZWVwUGluazQKKzI1NSAxMTAgMTgwCQlIb3RQaW5rMQorMjM4IDEwNiAxNjcJCUhvdFBpbmsyCisyMDUgIDk2IDE0NAkJSG90UGluazMKKzEzOSAgNTggIDk4CQlIb3RQaW5rNAorMjU1IDE4MSAxOTcJCXBpbmsxCisyMzggMTY5IDE4NAkJcGluazIKKzIwNSAxNDUgMTU4CQlwaW5rMworMTM5ICA5OSAxMDgJCXBpbms0CisyNTUgMTc0IDE4NQkJTGlnaHRQaW5rMQorMjM4IDE2MiAxNzMJCUxpZ2h0UGluazIKKzIwNSAxNDAgMTQ5CQlMaWdodFBpbmszCisxMzkgIDk1IDEwMQkJTGlnaHRQaW5rNAorMjU1IDEzMCAxNzEJCVBhbGVWaW9sZXRSZWQxCisyMzggMTIxIDE1OQkJUGFsZVZpb2xldFJlZDIKKzIwNSAxMDQgMTM3CQlQYWxlVmlvbGV0UmVkMworMTM5ICA3MQkgOTMJCVBhbGVWaW9sZXRSZWQ0CisyNTUgIDUyIDE3OQkJbWFyb29uMQorMjM4ICA0OCAxNjcJCW1hcm9vbjIKKzIwNSAgNDEgMTQ0CQltYXJvb24zCisxMzkgIDI4CSA5OAkJbWFyb29uNAorMjU1ICA2MiAxNTAJCVZpb2xldFJlZDEKKzIzOCAgNTggMTQwCQlWaW9sZXRSZWQyCisyMDUgIDUwIDEyMAkJVmlvbGV0UmVkMworMTM5ICAzNAkgODIJCVZpb2xldFJlZDQKKzI1NSAgIDAgMjU1CQltYWdlbnRhMQorMjM4ICAgMCAyMzgJCW1hZ2VudGEyCisyMDUgICAwIDIwNQkJbWFnZW50YTMKKzEzOSAgIDAgMTM5CQltYWdlbnRhNAorMjU1IDEzMSAyNTAJCW9yY2hpZDEKKzIzOCAxMjIgMjMzCQlvcmNoaWQyCisyMDUgMTA1IDIwMQkJb3JjaGlkMworMTM5ICA3MSAxMzcJCW9yY2hpZDQKKzI1NSAxODcgMjU1CQlwbHVtMQorMjM4IDE3NCAyMzgJCXBsdW0yCisyMDUgMTUwIDIwNQkJcGx1bTMKKzEzOSAxMDIgMTM5CQlwbHVtNAorMjI0IDEwMiAyNTUJCU1lZGl1bU9yY2hpZDEKKzIwOSAgOTUgMjM4CQlNZWRpdW1PcmNoaWQyCisxODAgIDgyIDIwNQkJTWVkaXVtT3JjaGlkMworMTIyICA1NSAxMzkJCU1lZGl1bU9yY2hpZDQKKzE5MSAgNjIgMjU1CQlEYXJrT3JjaGlkMQorMTc4ICA1OCAyMzgJCURhcmtPcmNoaWQyCisxNTQgIDUwIDIwNQkJRGFya09yY2hpZDMKKzEwNCAgMzQgMTM5CQlEYXJrT3JjaGlkNAorMTU1ICA0OCAyNTUJCXB1cnBsZTEKKzE0NSAgNDQgMjM4CQlwdXJwbGUyCisxMjUgIDM4IDIwNQkJcHVycGxlMworIDg1ICAyNiAxMzkJCXB1cnBsZTQKKzE3MSAxMzAgMjU1CQlNZWRpdW1QdXJwbGUxCisxNTkgMTIxIDIzOAkJTWVkaXVtUHVycGxlMgorMTM3IDEwNCAyMDUJCU1lZGl1bVB1cnBsZTMKKyA5MyAgNzEgMTM5CQlNZWRpdW1QdXJwbGU0CisyNTUgMjI1IDI1NQkJdGhpc3RsZTEKKzIzOCAyMTAgMjM4CQl0aGlzdGxlMgorMjA1IDE4MSAyMDUJCXRoaXN0bGUzCisxMzkgMTIzIDEzOQkJdGhpc3RsZTQKKyAgMCAgIDAgICAwCQlncmF5MAorICAwICAgMCAgIDAJCWdyZXkwCisgIDMgICAzICAgMwkJZ3JheTEKKyAgMyAgIDMgICAzCQlncmV5MQorICA1ICAgNSAgIDUJCWdyYXkyCisgIDUgICA1ICAgNQkJZ3JleTIKKyAgOCAgIDggICA4CQlncmF5MworICA4ICAgOCAgIDgJCWdyZXkzCisgMTAgIDEwICAxMAkJZ3JheTQKKyAxMCAgMTAgIDEwCQlncmV5NAorIDEzICAxMyAgMTMJCWdyYXk1CisgMTMgIDEzICAxMwkJZ3JleTUKKyAxNSAgMTUgIDE1CQlncmF5NgorIDE1ICAxNSAgMTUJCWdyZXk2CisgMTggIDE4ICAxOAkJZ3JheTcKKyAxOCAgMTggIDE4CQlncmV5NworIDIwICAyMCAgMjAJCWdyYXk4CisgMjAgIDIwICAyMAkJZ3JleTgKKyAyMyAgMjMgIDIzCQlncmF5OQorIDIzICAyMyAgMjMJCWdyZXk5CisgMjYgIDI2ICAyNgkJZ3JheTEwCisgMjYgIDI2ICAyNgkJZ3JleTEwCisgMjggIDI4ICAyOAkJZ3JheTExCisgMjggIDI4ICAyOAkJZ3JleTExCisgMzEgIDMxICAzMQkJZ3JheTEyCisgMzEgIDMxICAzMQkJZ3JleTEyCisgMzMgIDMzICAzMwkJZ3JheTEzCisgMzMgIDMzICAzMwkJZ3JleTEzCisgMzYgIDM2ICAzNgkJZ3JheTE0CisgMzYgIDM2ICAzNgkJZ3JleTE0CisgMzggIDM4ICAzOAkJZ3JheTE1CisgMzggIDM4ICAzOAkJZ3JleTE1CisgNDEgIDQxICA0MQkJZ3JheTE2CisgNDEgIDQxICA0MQkJZ3JleTE2CisgNDMgIDQzICA0MwkJZ3JheTE3CisgNDMgIDQzICA0MwkJZ3JleTE3CisgNDYgIDQ2ICA0NgkJZ3JheTE4CisgNDYgIDQ2ICA0NgkJZ3JleTE4CisgNDggIDQ4ICA0OAkJZ3JheTE5CisgNDggIDQ4ICA0OAkJZ3JleTE5CisgNTEgIDUxICA1MQkJZ3JheTIwCisgNTEgIDUxICA1MQkJZ3JleTIwCisgNTQgIDU0ICA1NAkJZ3JheTIxCisgNTQgIDU0ICA1NAkJZ3JleTIxCisgNTYgIDU2ICA1NgkJZ3JheTIyCisgNTYgIDU2ICA1NgkJZ3JleTIyCisgNTkgIDU5ICA1OQkJZ3JheTIzCisgNTkgIDU5ICA1OQkJZ3JleTIzCisgNjEgIDYxICA2MQkJZ3JheTI0CisgNjEgIDYxICA2MQkJZ3JleTI0CisgNjQgIDY0ICA2NAkJZ3JheTI1CisgNjQgIDY0ICA2NAkJZ3JleTI1CisgNjYgIDY2ICA2NgkJZ3JheTI2CisgNjYgIDY2ICA2NgkJZ3JleTI2CisgNjkgIDY5ICA2OQkJZ3JheTI3CisgNjkgIDY5ICA2OQkJZ3JleTI3CisgNzEgIDcxICA3MQkJZ3JheTI4CisgNzEgIDcxICA3MQkJZ3JleTI4CisgNzQgIDc0ICA3NAkJZ3JheTI5CisgNzQgIDc0ICA3NAkJZ3JleTI5CisgNzcgIDc3ICA3NwkJZ3JheTMwCisgNzcgIDc3ICA3NwkJZ3JleTMwCisgNzkgIDc5ICA3OQkJZ3JheTMxCisgNzkgIDc5ICA3OQkJZ3JleTMxCisgODIgIDgyICA4MgkJZ3JheTMyCisgODIgIDgyICA4MgkJZ3JleTMyCisgODQgIDg0ICA4NAkJZ3JheTMzCisgODQgIDg0ICA4NAkJZ3JleTMzCisgODcgIDg3ICA4NwkJZ3JheTM0CisgODcgIDg3ICA4NwkJZ3JleTM0CisgODkgIDg5ICA4OQkJZ3JheTM1CisgODkgIDg5ICA4OQkJZ3JleTM1CisgOTIgIDkyICA5MgkJZ3JheTM2CisgOTIgIDkyICA5MgkJZ3JleTM2CisgOTQgIDk0ICA5NAkJZ3JheTM3CisgOTQgIDk0ICA5NAkJZ3JleTM3CisgOTcgIDk3ICA5NwkJZ3JheTM4CisgOTcgIDk3ICA5NwkJZ3JleTM4CisgOTkgIDk5ICA5OQkJZ3JheTM5CisgOTkgIDk5ICA5OQkJZ3JleTM5CisxMDIgMTAyIDEwMgkJZ3JheTQwCisxMDIgMTAyIDEwMgkJZ3JleTQwCisxMDUgMTA1IDEwNQkJZ3JheTQxCisxMDUgMTA1IDEwNQkJZ3JleTQxCisxMDcgMTA3IDEwNwkJZ3JheTQyCisxMDcgMTA3IDEwNwkJZ3JleTQyCisxMTAgMTEwIDExMAkJZ3JheTQzCisxMTAgMTEwIDExMAkJZ3JleTQzCisxMTIgMTEyIDExMgkJZ3JheTQ0CisxMTIgMTEyIDExMgkJZ3JleTQ0CisxMTUgMTE1IDExNQkJZ3JheTQ1CisxMTUgMTE1IDExNQkJZ3JleTQ1CisxMTcgMTE3IDExNwkJZ3JheTQ2CisxMTcgMTE3IDExNwkJZ3JleTQ2CisxMjAgMTIwIDEyMAkJZ3JheTQ3CisxMjAgMTIwIDEyMAkJZ3JleTQ3CisxMjIgMTIyIDEyMgkJZ3JheTQ4CisxMjIgMTIyIDEyMgkJZ3JleTQ4CisxMjUgMTI1IDEyNQkJZ3JheTQ5CisxMjUgMTI1IDEyNQkJZ3JleTQ5CisxMjcgMTI3IDEyNwkJZ3JheTUwCisxMjcgMTI3IDEyNwkJZ3JleTUwCisxMzAgMTMwIDEzMAkJZ3JheTUxCisxMzAgMTMwIDEzMAkJZ3JleTUxCisxMzMgMTMzIDEzMwkJZ3JheTUyCisxMzMgMTMzIDEzMwkJZ3JleTUyCisxMzUgMTM1IDEzNQkJZ3JheTUzCisxMzUgMTM1IDEzNQkJZ3JleTUzCisxMzggMTM4IDEzOAkJZ3JheTU0CisxMzggMTM4IDEzOAkJZ3JleTU0CisxNDAgMTQwIDE0MAkJZ3JheTU1CisxNDAgMTQwIDE0MAkJZ3JleTU1CisxNDMgMTQzIDE0MwkJZ3JheTU2CisxNDMgMTQzIDE0MwkJZ3JleTU2CisxNDUgMTQ1IDE0NQkJZ3JheTU3CisxNDUgMTQ1IDE0NQkJZ3JleTU3CisxNDggMTQ4IDE0OAkJZ3JheTU4CisxNDggMTQ4IDE0OAkJZ3JleTU4CisxNTAgMTUwIDE1MAkJZ3JheTU5CisxNTAgMTUwIDE1MAkJZ3JleTU5CisxNTMgMTUzIDE1MwkJZ3JheTYwCisxNTMgMTUzIDE1MwkJZ3JleTYwCisxNTYgMTU2IDE1NgkJZ3JheTYxCisxNTYgMTU2IDE1NgkJZ3JleTYxCisxNTggMTU4IDE1OAkJZ3JheTYyCisxNTggMTU4IDE1OAkJZ3JleTYyCisxNjEgMTYxIDE2MQkJZ3JheTYzCisxNjEgMTYxIDE2MQkJZ3JleTYzCisxNjMgMTYzIDE2MwkJZ3JheTY0CisxNjMgMTYzIDE2MwkJZ3JleTY0CisxNjYgMTY2IDE2NgkJZ3JheTY1CisxNjYgMTY2IDE2NgkJZ3JleTY1CisxNjggMTY4IDE2OAkJZ3JheTY2CisxNjggMTY4IDE2OAkJZ3JleTY2CisxNzEgMTcxIDE3MQkJZ3JheTY3CisxNzEgMTcxIDE3MQkJZ3JleTY3CisxNzMgMTczIDE3MwkJZ3JheTY4CisxNzMgMTczIDE3MwkJZ3JleTY4CisxNzYgMTc2IDE3NgkJZ3JheTY5CisxNzYgMTc2IDE3NgkJZ3JleTY5CisxNzkgMTc5IDE3OQkJZ3JheTcwCisxNzkgMTc5IDE3OQkJZ3JleTcwCisxODEgMTgxIDE4MQkJZ3JheTcxCisxODEgMTgxIDE4MQkJZ3JleTcxCisxODQgMTg0IDE4NAkJZ3JheTcyCisxODQgMTg0IDE4NAkJZ3JleTcyCisxODYgMTg2IDE4NgkJZ3JheTczCisxODYgMTg2IDE4NgkJZ3JleTczCisxODkgMTg5IDE4OQkJZ3JheTc0CisxODkgMTg5IDE4OQkJZ3JleTc0CisxOTEgMTkxIDE5MQkJZ3JheTc1CisxOTEgMTkxIDE5MQkJZ3JleTc1CisxOTQgMTk0IDE5NAkJZ3JheTc2CisxOTQgMTk0IDE5NAkJZ3JleTc2CisxOTYgMTk2IDE5NgkJZ3JheTc3CisxOTYgMTk2IDE5NgkJZ3JleTc3CisxOTkgMTk5IDE5OQkJZ3JheTc4CisxOTkgMTk5IDE5OQkJZ3JleTc4CisyMDEgMjAxIDIwMQkJZ3JheTc5CisyMDEgMjAxIDIwMQkJZ3JleTc5CisyMDQgMjA0IDIwNAkJZ3JheTgwCisyMDQgMjA0IDIwNAkJZ3JleTgwCisyMDcgMjA3IDIwNwkJZ3JheTgxCisyMDcgMjA3IDIwNwkJZ3JleTgxCisyMDkgMjA5IDIwOQkJZ3JheTgyCisyMDkgMjA5IDIwOQkJZ3JleTgyCisyMTIgMjEyIDIxMgkJZ3JheTgzCisyMTIgMjEyIDIxMgkJZ3JleTgzCisyMTQgMjE0IDIxNAkJZ3JheTg0CisyMTQgMjE0IDIxNAkJZ3JleTg0CisyMTcgMjE3IDIxNwkJZ3JheTg1CisyMTcgMjE3IDIxNwkJZ3JleTg1CisyMTkgMjE5IDIxOQkJZ3JheTg2CisyMTkgMjE5IDIxOQkJZ3JleTg2CisyMjIgMjIyIDIyMgkJZ3JheTg3CisyMjIgMjIyIDIyMgkJZ3JleTg3CisyMjQgMjI0IDIyNAkJZ3JheTg4CisyMjQgMjI0IDIyNAkJZ3JleTg4CisyMjcgMjI3IDIyNwkJZ3JheTg5CisyMjcgMjI3IDIyNwkJZ3JleTg5CisyMjkgMjI5IDIyOQkJZ3JheTkwCisyMjkgMjI5IDIyOQkJZ3JleTkwCisyMzIgMjMyIDIzMgkJZ3JheTkxCisyMzIgMjMyIDIzMgkJZ3JleTkxCisyMzUgMjM1IDIzNQkJZ3JheTkyCisyMzUgMjM1IDIzNQkJZ3JleTkyCisyMzcgMjM3IDIzNwkJZ3JheTkzCisyMzcgMjM3IDIzNwkJZ3JleTkzCisyNDAgMjQwIDI0MAkJZ3JheTk0CisyNDAgMjQwIDI0MAkJZ3JleTk0CisyNDIgMjQyIDI0MgkJZ3JheTk1CisyNDIgMjQyIDI0MgkJZ3JleTk1CisyNDUgMjQ1IDI0NQkJZ3JheTk2CisyNDUgMjQ1IDI0NQkJZ3JleTk2CisyNDcgMjQ3IDI0NwkJZ3JheTk3CisyNDcgMjQ3IDI0NwkJZ3JleTk3CisyNTAgMjUwIDI1MAkJZ3JheTk4CisyNTAgMjUwIDI1MAkJZ3JleTk4CisyNTIgMjUyIDI1MgkJZ3JheTk5CisyNTIgMjUyIDI1MgkJZ3JleTk5CisyNTUgMjU1IDI1NQkJZ3JheTEwMAorMjU1IDI1NSAyNTUJCWdyZXkxMDAKKzE2OSAxNjkgMTY5CQlkYXJrIGdyZXkKKzE2OSAxNjkgMTY5CQlEYXJrR3JleQorMTY5IDE2OSAxNjkJCWRhcmsgZ3JheQorMTY5IDE2OSAxNjkJCURhcmtHcmF5CiswICAgICAwIDEzOQkJZGFyayBibHVlCiswICAgICAwIDEzOQkJRGFya0JsdWUKKzAgICAxMzkgMTM5CQlkYXJrIGN5YW4KKzAgICAxMzkgMTM5CQlEYXJrQ3lhbgorMTM5ICAgMCAxMzkJCWRhcmsgbWFnZW50YQorMTM5ICAgMCAxMzkJCURhcmtNYWdlbnRhCisxMzkgICAwICAgMAkJZGFyayByZWQKKzEzOSAgIDAgICAwCQlEYXJrUmVkCisxNDQgMjM4IDE0NAkJbGlnaHQgZ3JlZW4KKzE0NCAyMzggMTQ0CQlMaWdodEdyZWVuCmRpZmYgLS1naXQgYS9ydW50aW1lL3NjcmlwdHMudmltIGIvcnVudGltZS9zY3JpcHRzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjUwNmIzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zY3JpcHRzLnZpbQpAQCAtMCwwICsxLDMxNiBAQAorIiBWaW0gc3VwcG9ydCBmaWxlIHRvIGRldGVjdCBmaWxlIHR5cGVzIGluIHNjcmlwdHMKKyIKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBjaGFuZ2U6CTIwMDQgQXByIDE4CisKKyIgVGhpcyBmaWxlIGlzIGNhbGxlZCBieSBhbiBhdXRvY29tbWFuZCBmb3IgZXZlcnkgZmlsZSB0aGF0IGhhcyBqdXN0IGJlZW4KKyIgbG9hZGVkIGludG8gYSBidWZmZXIuICBJdCBjaGVja3MgaWYgdGhlIHR5cGUgb2YgZmlsZSBjYW4gYmUgcmVjb2duaXplZCBieQorIiB0aGUgZmlsZSBjb250ZW50cy4gIFRoZSBhdXRvY29tbWFuZCBpcyBpbiAkVklNUlVOVElNRS9maWxldHlwZS52aW0uCisKKworIiBPbmx5IGRvIHRoZSByZXN0IHdoZW4gdGhlIEZpbGVUeXBlIGF1dG9jb21tYW5kIGhhcyBub3QgYmVlbiB0cmlnZ2VyZWQgeWV0LgoraWYgZGlkX2ZpbGV0eXBlKCkKKyAgZmluaXNoCitlbmRpZgorCisiIExvYWQgdGhlIHVzZXIgZGVmaW5lZCBzY3JpcHRzIGZpbGUgZmlyc3QKKyIgT25seSBkbyB0aGlzIHdoZW4gdGhlIEZpbGVUeXBlIGF1dG9jb21tYW5kIGhhcyBub3QgYmVlbiB0cmlnZ2VyZWQgeWV0CitpZiBleGlzdHMoIm15c2NyaXB0c2ZpbGUiKSAmJiBmaWxlX3JlYWRhYmxlKGV4cGFuZChteXNjcmlwdHNmaWxlKSkKKyAgZXhlY3V0ZSAic291cmNlICIgLiBteXNjcmlwdHNmaWxlCisgIGlmIGRpZF9maWxldHlwZSgpCisgICAgZmluaXNoCisgIGVuZGlmCitlbmRpZgorCisiIExpbmUgY29udGludWF0aW9uIGlzIHVzZWQgaGVyZSwgcmVtb3ZlICdDJyBmcm9tICdjcG9wdGlvbnMnCitsZXQgczpjcG9fc2F2ZSA9ICZjcG8KK3NldCBjcG8mdmltCisKK2xldCBzOmxpbmUxID0gZ2V0bGluZSgxKQorCitpZiBzOmxpbmUxID1+ICJeIyEiCisgICIgQSBzY3JpcHQgdGhhdCBzdGFydHMgd2l0aCAiIyEiLgorCisgICIgQ2hlY2sgZm9yIGEgbGluZSBsaWtlICIjIS91c3IvYmluL2VudiBWQVI9dmFsIGJhc2giLiAgVHVybiBpdCBpbnRvCisgICIgIiMhL3Vzci9iaW4vYmFzaCIgdG8gbWFrZSBtYXRjaGluZyBlYXNpZXIuCisgIGlmIHM6bGluZTEgPX4gJ14jIVxzKlxTKlw8ZW52XHMnCisgICAgbGV0IHM6bGluZTEgPSBzdWJzdGl0dXRlKHM6bGluZTEsICdcU1wrPVxTXCsnLCAnJywgJ2cnKQorICAgIGxldCBzOmxpbmUxID0gc3Vic3RpdHV0ZShzOmxpbmUxLCAnXDxlbnZcc1wrJywgJycsICcnKQorICBlbmRpZgorCisgICIgR2V0IHRoZSBwcm9ncmFtIG5hbWUuCisgICIgT25seSBhY2NlcHQgc3BhY2VzIGluIFBDIHN0eWxlIHBhdGhzOiAiIyFjOi9wcm9ncmFtIGZpbGVzL3BlcmwgW2FyZ3NdIi4KKyAgIiBJZiB0aGVyZSBpcyBubyBwYXRoIHVzZSB0aGUgZmlyc3Qgd29yZDogIiMhcGVybCBbcGF0aC9hcmdzXSIuCisgICIgT3RoZXJ3aXNlIGdldCB0aGUgbGFzdCB3b3JkIGFmdGVyIGEgc2xhc2g6ICIjIS91c3IvYmluL3BlcmwgW3BhdGgvYXJnc10iLgorICBpZiBzOmxpbmUxID1+ICdeIyFccypcYTpbL1xcXScKKyAgICBsZXQgczpuYW1lID0gc3Vic3RpdHV0ZShzOmxpbmUxLCAnXiMhLipbL1xcXVwoXGlcK1wpLionLCAnXDEnLCAnJykKKyAgZWxzZWlmIHM6bGluZTEgPX4gJ14jIVxzKlteL1xcIF0qXD5cKFteL1xcXVx8JFwpJworICAgIGxldCBzOm5hbWUgPSBzdWJzdGl0dXRlKHM6bGluZTEsICdeIyFccypcKFteL1xcIF0qXD5cKS4qJywgJ1wxJywgJycpCisgIGVsc2UKKyAgICBsZXQgczpuYW1lID0gc3Vic3RpdHV0ZShzOmxpbmUxLCAnXiMhXHMqXFMqWy9cXF1cKFxpXCtcKS4qJywgJ1wxJywgJycpCisgIGVuZGlmCisKKyAgIiBCb3VybmUtbGlrZSBzaGVsbCBzY3JpcHRzOiBzaCBrc2ggYmFzaCBiYXNoMgorICBpZiBzOm5hbWUgPX4gJ15cKGJhc2hcfGJhc2gyXHxrc2hcfHNoXClcPicKKyAgICBjYWxsIFNldEZpbGVUeXBlU0goczpsaW5lMSkJIiBkZWZpbmVkIGluIGZpbGV0eXBlLnZpbQorCisgICAgIiBjc2ggc2NyaXB0cworICBlbHNlaWYgczpuYW1lID1+ICdeY3NoXD4nCisgICAgaWYgZXhpc3RzKCJnOmZpbGV0eXBlX2NzaCIpCisgICAgICBsZXQgJmZ0ID0gZzpmaWxldHlwZV9jc2gKKyAgICBlbHNlCisgICAgICBzZXQgZnQ9Y3NoCisgICAgZW5kaWYKKworICAgICIgdGNzaCBzY3JpcHRzCisgIGVsc2VpZiBzOm5hbWUgPX4gJ150Y3NoXD4nCisgICAgc2V0IGZ0PXRjc2gKKworICAgICIgWiBzaGVsbCBzY3JpcHRzCisgIGVsc2VpZiBzOm5hbWUgPX4gJ156c2hcPicKKyAgICBzZXQgZnQ9enNoCisKKyAgICAiIFRDTCBzY3JpcHRzCisgIGVsc2VpZiBzOm5hbWUgPX4gJ15cKHRjbHNoXHx3aXNoXHxleHBlY3RrXHxpdGNsc2hcfGl0a3dpc2hcKVw+JworICAgIHNldCBmdD10Y2wKKworICAgICIgRXhwZWN0IHNjcmlwdHMKKyAgZWxzZWlmIHM6bmFtZSA9fiAnXmV4cGVjdFw+JworICAgIHNldCBmdD1leHBlY3QKKworICAgICIgR251cGxvdCBzY3JpcHRzCisgIGVsc2VpZiBzOm5hbWUgPX4gJ15nbnVwbG90XD4nCisgICAgc2V0IGZ0PWdudXBsb3QKKworICAgICIgTWFrZWZpbGVzCisgIGVsc2VpZiBzOm5hbWUgPX4gJ21ha2VcPicKKyAgICBzZXQgZnQ9bWFrZQorCisgICAgIiBQZXJsCisgIGVsc2VpZiBzOm5hbWUgPX4gJ3BlcmwnCisgICAgc2V0IGZ0PXBlcmwKKworICAgICIgUEhQCisgIGVsc2VpZiBzOm5hbWUgPX4gJ3BocCcKKyAgICBzZXQgZnQ9cGhwCisKKyAgICAiIFB5dGhvbgorICBlbHNlaWYgczpuYW1lID1+ICdweXRob24nCisgICAgc2V0IGZ0PXB5dGhvbgorCisgICAgIiBHcm9vdnkKKyAgZWxzZWlmIHM6bmFtZSA9fiAnXmdyb292eVw+JworICAgIHNldCBmdD1ncm9vdnkKKworICAgICIgUnVieQorICBlbHNlaWYgczpuYW1lID1+ICdydWJ5JworICAgIHNldCBmdD1ydWJ5CisKKyAgICAiIEJDIGNhbGN1bGF0b3IKKyAgZWxzZWlmIHM6bmFtZSA9fiAnXmJjXD4nCisgICAgc2V0IGZ0PWJjCisKKyAgICAiIHNlZAorICBlbHNlaWYgczpuYW1lID1+ICdzZWRcPicKKyAgICBzZXQgZnQ9c2VkCisKKyAgICAiIE9DYW1sLXNjcmlwdHMKKyAgZWxzZWlmIHM6bmFtZSA9fiAnb2NhbWwnCisgICAgc2V0IGZ0PW9jYW1sCisKKyAgICAiIEF3ayBzY3JpcHRzCisgIGVsc2VpZiBzOm5hbWUgPX4gJ2F3a1w+JworICAgIHNldCBmdD1hd2sKKworICAgICIgV2Vic2l0ZSBNZXRhTGFuZ3VhZ2UKKyAgZWxzZWlmIHM6bmFtZSA9fiAnd21sJworICAgIHNldCBmdD13bWwKKworICAgICIgU2NoZW1lIHNjcmlwdHMKKyAgZWxzZWlmIHM6bmFtZSA9fiAnc2NoZW1lJworICAgIHNldCBmdD1zY2hlbWUKKworICBlbmRpZgorICB1bmxldCBzOm5hbWUKKworZWxzZQorICAiIEZpbGUgZG9lcyBub3Qgc3RhcnQgd2l0aCAiIyEiLgorCisgIGxldCBzOmxpbmUyID0gZ2V0bGluZSgyKQorICBsZXQgczpsaW5lMyA9IGdldGxpbmUoMykKKyAgbGV0IHM6bGluZTQgPSBnZXRsaW5lKDQpCisgIGxldCBzOmxpbmU1ID0gZ2V0bGluZSg1KQorCisgICIgQm91cm5lLWxpa2Ugc2hlbGwgc2NyaXB0czogc2gga3NoIGJhc2ggYmFzaDIKKyAgaWYgczpsaW5lMSA9fiAnXjokJworICAgIGNhbGwgU2V0RmlsZVR5cGVTSChzOmxpbmUxKQkiIGRlZmluZWQgaW4gZmlsZXR5cGUudmltCisKKyAgICAiIFogc2hlbGwgc2NyaXB0cworICBlbHNlaWYgczpsaW5lMSA9fiAnXiNjb21wZGVmXD4nIHx8IHM6bGluZTEgPX4gJ14jYXV0b2xvYWRcPicKKyAgICBzZXQgZnQ9enNoCisKKyAgIiBFTE0gTWFpbCBmaWxlcworICBlbHNlaWYgczpsaW5lMSA9fiAnXkZyb20gW2EtekEtWl1bYS16QS1aXzAtOVwuPS1dKlwoQFteIF0qXClcPSAuKlsxMl1bMDldXGRcZCQnCisgICAgc2V0IGZ0PW1haWwKKworICAgICIgTWFzb24KKyAgZWxzZWlmIHM6bGluZTEgPX4gJ148WyUmXS4qPicKKyAgICBzZXQgZnQ9bWFzb24KKworICAgICIgVmltIHNjcmlwdHMgKG11c3QgaGF2ZSAnIiB2aW0nIGFzIHRoZSBmaXJzdCBsaW5lIHRvIHRyaWdnZXIgdGhpcykKKyAgZWxzZWlmIHM6bGluZTEgPX4gJ14iICpbdlZdaW0kJworICAgIHNldCBmdD12aW0KKworICAgICIgTU9PCisgIGVsc2VpZiBzOmxpbmUxID1+ICdeXCpcKiBMYW1iZGFNT08gRGF0YWJhc2UsIEZvcm1hdCBWZXJzaW9uIFwlKFsxLTNdXD5cKVxAIVxkXCsgXCpcKiQnCisgICAgc2V0IGZ0PW1vbworCisgICAgIiBEaWZmIGZpbGU6CisgICAgIiAtICJkaWZmIiBpbiBmaXJzdCBsaW5lIChjb250ZXh0IGRpZmYpCisgICAgIiAtICJPbmx5IGluICIgaW4gZmlyc3QgbGluZQorICAgICIgLSAiLS0tICIgaW4gZmlyc3QgbGluZSBhbmQgIisrKyAiIGluIHNlY29uZCBsaW5lICh1bmlmaWVkIGRpZmYpLgorICAgICIgLSAiKioqICIgaW4gZmlyc3QgbGluZSBhbmQgIi0tLSAiIGluIHNlY29uZCBsaW5lIChjb250ZXh0IGRpZmYpLgorICAgICIgLSAiIyBJdCB3YXMgZ2VuZXJhdGVkIGJ5IG1ha2VwYXRjaCAiIGluIHRoZSBzZWNvbmQgbGluZSAobWFrZXBhdGNoIGRpZmYpLgorICAgICIgLSAiSW5kZXg6IDxmaWxlbmFtZT4iIGluIHRoZSBmaXJzdCBsaW5lIChDVlMgZmlsZSkKKyAgZWxzZWlmIHM6bGluZTEgPX4gJ15cKGRpZmZcPlx8T25seSBpbiBcfFxkXCtcKCxcZFwrXClcPVtjZGFdXGRcK1w+XHwjIEl0IHdhcyBnZW5lcmF0ZWQgYnkgbWFrZXBhdGNoIFx8SW5kZXg6XHNcK1xmXCskXHw9PT09PSBcZlwrIFxkXCtcLlxkXCsgdnMgZWRpdGVkXHw9PT09IC8vXGZcKyNcZFwrXCknCisJXCB8fCAoczpsaW5lMSA9fiAnXi0tLSAnICYmIHM6bGluZTIgPX4gJ14rKysgJykKKwlcIHx8IChzOmxpbmUxID1+ICdeXCpcKlwqICcgJiYgczpsaW5lMiA9fiAnXi0tLSAnKQorICAgIHNldCBmdD1kaWZmCisKKyAgICAiIFBvc3RTY3JpcHQgRmlsZXMgKG11c3QgaGF2ZSAlIVBTIGFzIHRoZSBmaXJzdCBsaW5lLCBsaWtlIGEycHMgb3V0cHV0KQorICBlbHNlaWYgczpsaW5lMSA9fiAnXiUhWyBcdF0qUFMnCisgICAgc2V0IGZ0PXBvc3RzY3IKKworICAgICIgTTQgc2NyaXB0czogR3Vlc3MgdGhlcmUgaXMgYSBsaW5lIHRoYXQgc3RhcnRzIHdpdGggImRubCIuCisgIGVsc2VpZiBzOmxpbmUxID1+ICdeXHMqZG5sXD4nCisJXCB8fCBzOmxpbmUyID1+ICdeXHMqZG5sXD4nCisJXCB8fCBzOmxpbmUzID1+ICdeXHMqZG5sXD4nCisJXCB8fCBzOmxpbmU0ID1+ICdeXHMqZG5sXD4nCisJXCB8fCBzOmxpbmU1ID1+ICdeXHMqZG5sXD4nCisgICAgc2V0IGZ0PW00CisKKyAgICAiIEFtaWdhRG9zIHNjcmlwdHMKKyAgZWxzZWlmICRURVJNID09ICJhbWlnYSIKKwlcICYmIChzOmxpbmUxID1+ICJeOyIgfHwgczpsaW5lMSA9fiAnXlwuW2JCXVtyUl1bYUFdJykKKyAgICBzZXQgZnQ9YW1pZ2EKKworICAgICIgU2lDQUQgc2NyaXB0cyAobXVzdCBoYXZlIHByb2NuIG9yIHByb2NkIGFzIHRoZSBmaXJzdCBsaW5lIHRvIHRyaWdnZXIgdGhpcykKKyAgZWxzZWlmIHM6bGluZTEgPX4/ICdeICpwcm9jW25kXSAqJCcKKyAgICBzZXQgZnQ9c2ljYWQKKworICAgICIgUHVyaWZ5IGxvZyBmaWxlcyBzdGFydCB3aXRoICIqKioqICBQdXJpZnkiCisgIGVsc2VpZiBzOmxpbmUxID1+ICdeXCpcKlwqXCogIFB1cmlmeScKKyAgICBzZXQgZnQ9cHVyaWZ5bG9nCisKKyAgICAiIFhNTAorICBlbHNlaWYgczpsaW5lMSA9fiAnPD9ccyp4bWwuKj8+JworICAgIHNldCBmdD14bWwKKworICAgICIgWEhUTUwgKGUuZy46IFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKQorICBlbHNlaWYgczpsaW5lMSA9fiAnXDxEVERcc1wrWEhUTUxccycKKyAgICBzZXQgZnQ9eGh0bWwKKworICAgICIgWFhEIG91dHB1dAorICBlbHNlaWYgczpsaW5lMSA9fiAnXlx4XHs3fTogXHhcezJ9IFw9XHhcezJ9IFw9XHhcezJ9IFw9XHhcezJ9ICcKKyAgICBzZXQgZnQ9eHhkCisKKyAgICAiIFJDUy9DVlMgbG9nIG91dHB1dAorICBlbHNlaWYgczpsaW5lMSA9fiAnXlJDUyBmaWxlOicgfHwgczpsaW5lMiA9fiAnXlJDUyBmaWxlOicKKyAgICBzZXQgZnQ9cmNzbG9nCisKKyAgICAiIENWUyBjb21taXQKKyAgZWxzZWlmIHM6bGluZTIgPX4gJ15DVlM6JworICAgIHNldCBmdD1jdnMKKworICAgICIgU2VuZC1wcgorICBlbHNlaWYgczpsaW5lMSA9fiAnXlNFTkQtUFI6JworICAgIHNldCBmdD1zZW5kcHIKKworICAgICIgU05OUyBmaWxlcworICBlbHNlaWYgczpsaW5lMSA9fiAnXlNOTlMgbmV0d29yayBkZWZpbml0aW9uIGZpbGUnCisgICAgc2V0IGZ0PXNubnNuZXQKKyAgZWxzZWlmIHM6bGluZTEgPX4gJ15TTk5TIHBhdHRlcm4gZGVmaW5pdGlvbiBmaWxlJworICAgIHNldCBmdD1zbm5zcGF0CisgIGVsc2VpZiBzOmxpbmUxID1+ICdeU05OUyByZXN1bHQgZmlsZScKKyAgICBzZXQgZnQ9c25uc3JlcworCisgICAgIiBWaXJhdGEKKyAgZWxzZWlmIHM6bGluZTEgPX4gJ14lLlx7LX1bVnZdaXJhdGEnCisJXCB8fCBzOmxpbmUyID1+ICdeJS5cey19W1Z2XWlyYXRhJworCVwgfHwgczpsaW5lMyA9fiAnXiUuXHstfVtWdl1pcmF0YScKKwlcIHx8IHM6bGluZTQgPX4gJ14lLlx7LX1bVnZdaXJhdGEnCisJXCB8fCBzOmxpbmU1ID1+ICdeJS5cey19W1Z2XWlyYXRhJworICAgIHNldCBmdD12aXJhdGEKKworICAgICIgU3RyYWNlCisgIGVsc2VpZiBzOmxpbmUxID1+ICdeWzAtOV0qICpleGVjdmUoJworICAgIHNldCBmdD1zdHJhY2UKKworICAgICIgVlNFIEpDTAorICBlbHNlaWYgczpsaW5lMSA9fiAnXlwqICQkIEpPQlw+JyB8fCBzOmxpbmUxID1+ICdeLy8gKkpPQlw+JworICAgIHNldCBmdD12c2VqY2wKKworICAgICIgVEFLIGFuZCBTSU5EQQorICBlbHNlaWYgczpsaW5lNCA9fiAnSyAmIEsgIEFzc29jaWF0ZXMnIHx8IHM6bGluZTIgPX4gJ1RBSyAyMDAwJworICAgIHNldCBmdD10YWtvdXQKKyAgZWxzZWlmIHM6bGluZTMgPX4gJ1MgWSBTIFQgRSBNIFMgICBJIE0gUCBSIE8gViBFIEQgJworICAgIHNldCBmdD1zaW5kYW91dAorICBlbHNlaWYgZ2V0bGluZSg2KSA9fiAnUnVuIERhdGU6ICcKKyAgICBzZXQgZnQ9dGFrY21wCisgIGVsc2VpZiBnZXRsaW5lKDkpID1+ICdOb2RlICAgIEZpbGUgIDEnCisgICAgc2V0IGZ0PXNpbmRhY21wCisKKyAgICAiIEROUyB6b25lIGZpbGVzCisgIGVsc2VpZiBzOmxpbmUxLnM6bGluZTIgPX4gJyRPUklHSU5cfCRUVExcfElOXHMqU09BJworCVwgfHwgczpsaW5lMS5zOmxpbmUyLnM6bGluZTMuczpsaW5lNCA9fiAnQklORC4qbmFtZWQnCisgICAgc2V0IGZ0PWRucworCisgICAgIiBCQUFOCisgIGVsc2VpZiBzOmxpbmUxID1+ICd8XCpcezEsODB9JyAmJiBzOmxpbmUyID1+ICdWUkMgJworCVwgfHwgczpsaW5lMiA9fiAnfFwqXHsxLDgwfScgJiYgczpsaW5lMyA9fiAnVlJDICcKKyAgICBzZXQgZnQ9YmFhbgorCisgICIgVmFsZ3JpbmQKKyAgZWxzZWlmIHM6bGluZTEgPX4gJ149PVxkXCs9PSB2YWxncmluZCcKKyAgICBzZXQgZnQ9dmFsZ3JpbmQKKworICAiIFJlbmRlcm1hbiBJbnRlcmZhY2UgQnl0ZXN0cmVhbQorICBlbHNlaWYgczpsaW5lMSA9fiAnXiMjUmVuZGVyTWFuJworICAgIHNldCBmdD1yaWIKKworICAiIFNjaGVtZSBzY3JpcHRzCisgIGVsc2VpZiBzOmxpbmUxID1+ICdleGVjXHNcK1xTKnNjaGVtZScgfHwgczpsaW5lMiA9fiAnZXhlY1xzXCtcUypzY2hlbWUnCisgICAgc2V0IGZ0PXNjaGVtZQorCisgICIgQ1ZTIGRpZmYKKyAgZWxzZQorICAgIGxldCBsbnVtID0gMQorICAgIHdoaWxlIGdldGxpbmUobG51bSkgPX4gIl4/ICIgJiYgbG51bSA8IGxpbmUoIiQiKQorICAgICAgbGV0IGxudW0gPSBsbnVtICsgMQorICAgIGVuZHdoaWxlCisgICAgaWYgZ2V0bGluZShsbnVtKSA9fiAnXkluZGV4OlxzXCtcZlwrJCcKKyAgICAgIHNldCBmdD1kaWZmCisKKyAgICAgICIgbG9jYWxlIGlucHV0IGZpbGVzOiBGb3JtYWwgRGVmaW5pdGlvbnMgb2YgQ3VsdHVyYWwgQ29udmVudGlvbnMKKyAgICAgICIgZmlsZW5hbWUgbXVzdCBiZSBsaWtlIGVuX1VTLCBmcl9GUkBldXJvIG9yIGVuX1VTLlVURi04CisgICAgZWxzZWlmIGV4cGFuZCgiJSIpID1+ICdcYVxhX1xhXGFcKCRcfFsuQF1cKVx8aTE4biRcfFBPU0lYJFx8dHJhbnNsaXRfJworICAgICAgbGV0IGxudW0gPSAxCisgICAgICB3aGlsZSBsbnVtIDwgMTAwICYmIGxudW0gPCBsaW5lKCIkIikKKwlpZiBnZXRsaW5lKGxudW0pID1+ICdeTENfXChJREVOVElGSUNBVElPTlx8Q1RZUEVcfENPTExBVEVcfE1PTkVUQVJZXHxOVU1FUklDXHxUSU1FXHxNRVNTQUdFU1x8UEFQRVJcfFRFTEVQSE9ORVx8TUVBU1VSRU1FTlRcfE5BTUVcfEFERFJFU1NcKSQnCisJICBzZXRmIGZkY2MKKwkgIGJyZWFrCisJZW5kaWYKKwlsZXQgbG51bSA9IGxudW0gKyAxCisgICAgICBlbmR3aGlsZQorICAgIGVuZGlmCisKKyAgZW5kaWYKKworICB1bmxldCBzOmxpbmUyIHM6bGluZTMgczpsaW5lNCBzOmxpbmU1CisKK2VuZGlmCisKKyIgUmVzdG9yZSAnY3BvcHRpb25zJworbGV0ICZjcG8gPSBzOmNwb19zYXZlCisKK3VubGV0IHM6Y3BvX3NhdmUgczpsaW5lMQpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW5tZW51LnZpbSBiL3J1bnRpbWUvc3lubWVudS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlNTgyMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3lubWVudS52aW0KQEAgLTAsMCArMSw0NTAgQEAKKyIgVmltIHN1cHBvcnQgZmlsZSB0byBkZWZpbmUgdGhlIHN5bnRheCBzZWxlY3Rpb24gbWVudQorIiBUaGlzIGZpbGUgaXMgbm9ybWFsbHkgc291cmNlZCBmcm9tIG1lbnUudmltLgorIgorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMyBKdW4gMjIKKworIiBEZWZpbmUgdGhlIFNldFN5biBmdW5jdGlvbiwgdXNlZCBmb3IgdGhlIFN5bnRheCBtZW51IGVudHJpZXMuCisiIFNldCAnZmlsZXR5cGUnIGFuZCBhbHNvICdzeW50YXgnIGlmIGl0IGlzIG1hbnVhbGx5IHNlbGVjdGVkLgorZnVuISBTZXRTeW4obmFtZSkKKyAgaWYgYTpuYW1lID09ICJmdndtMSIKKyAgICBsZXQgdXNlX2Z2d21fMSA9IDEKKyAgICBsZXQgdXNlX2Z2d21fMiA9IDAKKyAgICBsZXQgbmFtZSA9ICJmdndtIgorICBlbHNlaWYgYTpuYW1lID09ICJmdndtMiIKKyAgICBsZXQgdXNlX2Z2d21fMiA9IDEKKyAgICBsZXQgdXNlX2Z2d21fMSA9IDAKKyAgICBsZXQgbmFtZSA9ICJmdndtIgorICBlbHNlCisgICAgbGV0IG5hbWUgPSBhOm5hbWUKKyAgZW5kaWYKKyAgaWYgIWV4aXN0cygiczpzeW50YXhfbWVudV9zeW5vbmx5IikKKyAgICBleGUgInNldCBmdD0iIC4gbmFtZQorICAgIGlmIGV4aXN0cygiZzpzeW50YXhfbWFudWFsIikKKyAgICAgIGV4ZSAic2V0IHN5bj0iIC4gbmFtZQorICAgIGVuZGlmCisgIGVsc2UKKyAgICBleGUgInNldCBzeW49IiAuIG5hbWUKKyAgZW5kaWYKK2VuZGZ1bgorCisiIFRoZSBmb2xsb3dpbmcgbWVudSBpdGVtcyBhcmUgZ2VuZXJhdGVkIGJ5IG1ha2VtZW51LnZpbS4KKyIgVGhlIFN0YXJ0IE9mIFRoZSBTeW50YXggTWVudQorCithbiA1MC4xMC4xMDAgJlN5bnRheC5BQi5BYXAgOmNhbCBTZXRTeW4oImFhcCIpPENSPgorYW4gNTAuMTAuMTEwICZTeW50YXguQUIuQWJhcXVzIDpjYWwgU2V0U3luKCJhYmFxdXMiKTxDUj4KK2FuIDUwLjEwLjEyMCAmU3ludGF4LkFCLkFCQ1wgbXVzaWNcIG5vdGF0aW9uIDpjYWwgU2V0U3luKCJhYmMiKTxDUj4KK2FuIDUwLjEwLjEzMCAmU3ludGF4LkFCLkFCRUwgOmNhbCBTZXRTeW4oImFiZWwiKTxDUj4KK2FuIDUwLjEwLjE0MCAmU3ludGF4LkFCLkFjZURCXCBtb2RlbCA6Y2FsIFNldFN5bigiYWNlZGIiKTxDUj4KK2FuIDUwLjEwLjE1MCAmU3ludGF4LkFCLkFkYSA6Y2FsIFNldFN5bigiYWRhIik8Q1I+CithbiA1MC4xMC4xNjAgJlN5bnRheC5BQi5BZkxleCA6Y2FsIFNldFN5bigiYWZsZXgiKTxDUj4KK2FuIDUwLjEwLjE3MCAmU3ludGF4LkFCLkFsdGVyYVwgQUhETCA6Y2FsIFNldFN5bigiYWhkbCIpPENSPgorYW4gNTAuMTAuMTgwICZTeW50YXguQUIuQW1pZ2FcIERPUyA6Y2FsIFNldFN5bigiYW1pZ2EiKTxDUj4KK2FuIDUwLjEwLjE5MCAmU3ludGF4LkFCLkFNUEwgOmNhbCBTZXRTeW4oImFtcGwiKTxDUj4KK2FuIDUwLjEwLjIwMCAmU3ludGF4LkFCLkFudFwgYnVpbGRcIGZpbGUgOmNhbCBTZXRTeW4oImFudCIpPENSPgorYW4gNTAuMTAuMjEwICZTeW50YXguQUIuQU5UTFIgOmNhbCBTZXRTeW4oImFudGxyIik8Q1I+CithbiA1MC4xMC4yMjAgJlN5bnRheC5BQi5BcGFjaGVcIGNvbmZpZyA6Y2FsIFNldFN5bigiYXBhY2hlIik8Q1I+CithbiA1MC4xMC4yMzAgJlN5bnRheC5BQi5BcGFjaGUtc3R5bGVcIGNvbmZpZyA6Y2FsIFNldFN5bigiYXBhY2hlc3R5bGUiKTxDUj4KK2FuIDUwLjEwLjI0MCAmU3ludGF4LkFCLkFwcGxpeFwgRUxGIDpjYWwgU2V0U3luKCJlbGYiKTxDUj4KK2FuIDUwLjEwLjI1MCAmU3ludGF4LkFCLkFyY1wgTWFjcm9cIExhbmd1YWdlIDpjYWwgU2V0U3luKCJhbWwiKTxDUj4KK2FuIDUwLjEwLjI2MCAmU3ludGF4LkFCLkFyY2hcIGludmVudG9yeSA6Y2FsIFNldFN5bigiYXJjaCIpPENSPgorYW4gNTAuMTAuMjcwICZTeW50YXguQUIuQVJUIDpjYWwgU2V0U3luKCJhcnQiKTxDUj4KK2FuIDUwLjEwLjI4MCAmU3ludGF4LkFCLkFTUFwgd2l0aFwgVkJTY3JpcHQgOmNhbCBTZXRTeW4oImFzcHZicyIpPENSPgorYW4gNTAuMTAuMjkwICZTeW50YXguQUIuQVNQXCB3aXRoXCBQZXJsIDpjYWwgU2V0U3luKCJhc3BwZXJsIik8Q1I+CithbiA1MC4xMC4zMDAgJlN5bnRheC5BQi5Bc3NlbWJseS42ODB4MCA6Y2FsIFNldFN5bigiYXNtNjhrIik8Q1I+CithbiA1MC4xMC4zMTAgJlN5bnRheC5BQi5Bc3NlbWJseS5GbGF0IDpjYWwgU2V0U3luKCJmYXNtIik8Q1I+CithbiA1MC4xMC4zMjAgJlN5bnRheC5BQi5Bc3NlbWJseS5HTlUgOmNhbCBTZXRTeW4oImFzbSIpPENSPgorYW4gNTAuMTAuMzMwICZTeW50YXguQUIuQXNzZW1ibHkuR05VXCBILTgzMDAgOmNhbCBTZXRTeW4oImFzbWg4MzAwIik8Q1I+CithbiA1MC4xMC4zNDAgJlN5bnRheC5BQi5Bc3NlbWJseS5JbnRlbFwgSUEtNjQgOmNhbCBTZXRTeW4oImlhNjQiKTxDUj4KK2FuIDUwLjEwLjM1MCAmU3ludGF4LkFCLkFzc2VtYmx5Lk1pY3Jvc29mdCA6Y2FsIFNldFN5bigibWFzbSIpPENSPgorYW4gNTAuMTAuMzYwICZTeW50YXguQUIuQXNzZW1ibHkuTmV0d2lkZSA6Y2FsIFNldFN5bigibmFzbSIpPENSPgorYW4gNTAuMTAuMzcwICZTeW50YXguQUIuQXNzZW1ibHkuUElDIDpjYWwgU2V0U3luKCJwaWMiKTxDUj4KK2FuIDUwLjEwLjM4MCAmU3ludGF4LkFCLkFzc2VtYmx5LlR1cmJvIDpjYWwgU2V0U3luKCJ0YXNtIik8Q1I+CithbiA1MC4xMC4zOTAgJlN5bnRheC5BQi5Bc3NlbWJseS5WQVhcIE1hY3JvXCBBc3NlbWJseSA6Y2FsIFNldFN5bigidm1hc20iKTxDUj4KK2FuIDUwLjEwLjQwMCAmU3ludGF4LkFCLkFzc2VtYmx5LlotODAgOmNhbCBTZXRTeW4oIno4YSIpPENSPgorYW4gNTAuMTAuNDEwICZTeW50YXguQUIuQXNzZW1ibHkueGFcIDY1MDJcIGNyb3NzXCBhc3NlbWJlciA6Y2FsIFNldFN5bigiYTY1Iik8Q1I+CithbiA1MC4xMC40MjAgJlN5bnRheC5BQi5BU05cLjEgOmNhbCBTZXRTeW4oImFzbiIpPENSPgorYW4gNTAuMTAuNDMwICZTeW50YXguQUIuQXRsYXMgOmNhbCBTZXRTeW4oImF0bGFzIik8Q1I+CithbiA1MC4xMC40NDAgJlN5bnRheC5BQi5BdXRvbWFrZSA6Y2FsIFNldFN5bigiYXV0b21ha2UiKTxDUj4KK2FuIDUwLjEwLjQ1MCAmU3ludGF4LkFCLkF2ZW51ZSA6Y2FsIFNldFN5bigiYXZlIik8Q1I+CithbiA1MC4xMC40NjAgJlN5bnRheC5BQi5Bd2sgOmNhbCBTZXRTeW4oImF3ayIpPENSPgorYW4gNTAuMTAuNDcwICZTeW50YXguQUIuQVlhY2MgOmNhbCBTZXRTeW4oImF5YWNjIik8Q1I+CithbiA1MC4xMC40OTAgJlN5bnRheC5BQi5CIDpjYWwgU2V0U3luKCJiIik8Q1I+CithbiA1MC4xMC41MDAgJlN5bnRheC5BQi5CYWFuIDpjYWwgU2V0U3luKCJiYWFuIik8Q1I+CithbiA1MC4xMC41MTAgJlN5bnRheC5BQi5CQVNJQyA6Y2FsIFNldFN5bigiYmFzaWMiKTxDUj4KK2FuIDUwLjEwLjUyMCAmU3ludGF4LkFCLkJDXCBjYWxjdWxhdG9yIDpjYWwgU2V0U3luKCJiYyIpPENSPgorYW4gNTAuMTAuNTMwICZTeW50YXguQUIuQkRGXCBmb250IDpjYWwgU2V0U3luKCJiZGYiKTxDUj4KK2FuIDUwLjEwLjU0MCAmU3ludGF4LkFCLkJpYlRlWCA6Y2FsIFNldFN5bigiYmliIik8Q1I+CithbiA1MC4xMC41NTAgJlN5bnRheC5BQi5CSU5ELkJJTkRcIGNvbmZpZyA6Y2FsIFNldFN5bigibmFtZWQiKTxDUj4KK2FuIDUwLjEwLjU2MCAmU3ludGF4LkFCLkJJTkQuQklORFwgem9uZSA6Y2FsIFNldFN5bigiYmluZHpvbmUiKTxDUj4KK2FuIDUwLjEwLjU3MCAmU3ludGF4LkFCLkJsYW5rIDpjYWwgU2V0U3luKCJibGFuayIpPENSPgorYW4gNTAuMjAuMTAwICZTeW50YXguQy5DIDpjYWwgU2V0U3luKCJjIik8Q1I+CithbiA1MC4yMC4xMTAgJlN5bnRheC5DLkMrKyA6Y2FsIFNldFN5bigiY3BwIik8Q1I+CithbiA1MC4yMC4xMjAgJlN5bnRheC5DLkMjIDpjYWwgU2V0U3luKCJjcyIpPENSPgorYW4gNTAuMjAuMTMwICZTeW50YXguQy5DYWxlbmRhciA6Y2FsIFNldFN5bigiY2FsZW5kYXIiKTxDUj4KK2FuIDUwLjIwLjE0MCAmU3ludGF4LkMuQ0RMIDpjYWwgU2V0U3luKCJjZGwiKTxDUj4KK2FuIDUwLjIwLjE1MCAmU3ludGF4LkMuQ3JvbnRhYiA6Y2FsIFNldFN5bigiY3JvbnRhYiIpPENSPgorYW4gNTAuMjAuMTYwICZTeW50YXguQy5DeW4rKyA6Y2FsIFNldFN5bigiY3lucHAiKTxDUj4KK2FuIDUwLjIwLjE3MCAmU3ludGF4LkMuQ3lubGliIDpjYWwgU2V0U3luKCJjeW5saWIiKTxDUj4KK2FuIDUwLjIwLjE4MCAmU3ludGF4LkMuQ2FzY2FkaW5nXCBTdHlsZVwgU2hlZXRzIDpjYWwgU2V0U3luKCJjc3MiKTxDUj4KK2FuIDUwLjIwLjE5MCAmU3ludGF4LkMuQ2VudHVyeVwgVGVybSA6Y2FsIFNldFN5bigiY3Rlcm0iKTxDUj4KK2FuIDUwLjIwLjIwMCAmU3ludGF4LkMuQ0hcIHNjcmlwdCA6Y2FsIFNldFN5bigiY2giKTxDUj4KK2FuIDUwLjIwLjIxMCAmU3ludGF4LkMuQ2hhbmdlTG9nIDpjYWwgU2V0U3luKCJjaGFuZ2Vsb2ciKTxDUj4KK2FuIDUwLjIwLjIyMCAmU3ludGF4LkMuQ2hlZXRhaFwgdGVtcGxhdGUgOmNhbCBTZXRTeW4oImNoZWV0YWgiKTxDUj4KK2FuIDUwLjIwLjIzMCAmU3ludGF4LkMuQ0hJTEwgOmNhbCBTZXRTeW4oImNoaWxsIik8Q1I+CithbiA1MC4yMC4yNDAgJlN5bnRheC5DLkNsZWFuIDpjYWwgU2V0U3luKCJjbGVhbiIpPENSPgorYW4gNTAuMjAuMjUwICZTeW50YXguQy5DbGV2ZXIgOmNhbCBTZXRTeW4oImNsIik8Q1I+CithbiA1MC4yMC4yNjAgJlN5bnRheC5DLkNsaXBwZXIgOmNhbCBTZXRTeW4oImNsaXBwZXIiKTxDUj4KK2FuIDUwLjIwLjI3MCAmU3ludGF4LkMuQ29sZFwgRnVzaW9uIDpjYWwgU2V0U3luKCJjZiIpPENSPgorYW4gNTAuMjAuMjgwICZTeW50YXguQy5Db25maWcuQ2ZnXCBDb25maWdcIGZpbGUgOmNhbCBTZXRTeW4oImNmZyIpPENSPgorYW4gNTAuMjAuMjkwICZTeW50YXguQy5Db25maWcuR2VuZXJpY1wgQ29uZmlnXCBmaWxlIDpjYWwgU2V0U3luKCJjb25mIik8Q1I+CithbiA1MC4yMC4zMDAgJlN5bnRheC5DLkNvbmZpZy5Db25maWd1cmVcLmluIDpjYWwgU2V0U3luKCJjb25maWciKTxDUj4KK2FuIDUwLjIwLjMxMCAmU3ludGF4LkMuQ1JNMTE0IDpjYWwgU2V0U3luKCJjcm0iKTxDUj4KK2FuIDUwLjIwLjMyMCAmU3ludGF4LkMuQ3RybC1IIDpjYWwgU2V0U3luKCJjdHJsaCIpPENSPgorYW4gNTAuMjAuMzMwICZTeW50YXguQy5Db2JvbCA6Y2FsIFNldFN5bigiY29ib2wiKTxDUj4KK2FuIDUwLjIwLjM0MCAmU3ludGF4LkMuQ1NQIDpjYWwgU2V0U3luKCJjc3AiKTxDUj4KK2FuIDUwLjIwLjM1MCAmU3ludGF4LkMuQ1VQTC5DVVBMIDpjYWwgU2V0U3luKCJjdXBsIik8Q1I+CithbiA1MC4yMC4zNjAgJlN5bnRheC5DLkNVUEwuU2ltdWxhdGlvbiA6Y2FsIFNldFN5bigiY3VwbHNpbSIpPENSPgorYW4gNTAuMjAuMzcwICZTeW50YXguQy5DVlMuY29tbWl0XCBmaWxlIDpjYWwgU2V0U3luKCJjdnMiKTxDUj4KK2FuIDUwLjIwLjM4MCAmU3ludGF4LkMuQ1ZTLmN2c3JjIDpjYWwgU2V0U3luKCJjdnNyYyIpPENSPgorYW4gNTAuMzAuMTAwICZTeW50YXguREUuRCA6Y2FsIFNldFN5bigiZCIpPENSPgorYW4gNTAuMzAuMTEwICZTeW50YXguREUuRGViaWFuLkRlYmlhblwgQ2hhbmdlTG9nIDpjYWwgU2V0U3luKCJkZWJjaGFuZ2Vsb2ciKTxDUj4KK2FuIDUwLjMwLjEyMCAmU3ludGF4LkRFLkRlYmlhbi5EZWJpYW5cIENvbnRyb2wgOmNhbCBTZXRTeW4oImRlYmNvbnRyb2wiKTxDUj4KK2FuIDUwLjMwLjEzMCAmU3ludGF4LkRFLkRlc2t0b3AgOmNhbCBTZXRTeW4oImRlc2t0b3AiKTxDUj4KK2FuIDUwLjMwLjE0MCAmU3ludGF4LkRFLkRpZmYgOmNhbCBTZXRTeW4oImRpZmYiKTxDUj4KK2FuIDUwLjMwLjE1MCAmU3ludGF4LkRFLkRpZ2l0YWxcIENvbW1hbmRcIExhbmcgOmNhbCBTZXRTeW4oImRjbCIpPENSPgorYW4gNTAuMzAuMTYwICZTeW50YXguREUuRGlyY29sb3JzIDpjYWwgU2V0U3luKCJkaXJjb2xvcnMiKTxDUj4KK2FuIDUwLjMwLjE3MCAmU3ludGF4LkRFLkROUy9CSU5EXCB6b25lIDpjYWwgU2V0U3luKCJkbnMiKTxDUj4KK2FuIDUwLjMwLjE4MCAmU3ludGF4LkRFLkRvY0Jvb2suYXV0by1kZXRlY3QgOmNhbCBTZXRTeW4oImRvY2JrIik8Q1I+CithbiA1MC4zMC4xOTAgJlN5bnRheC5ERS5Eb2NCb29rLlNHTUwgOmNhbCBTZXRTeW4oImRvY2Jrc2dtbCIpPENSPgorYW4gNTAuMzAuMjAwICZTeW50YXguREUuRG9jQm9vay5YTUwgOmNhbCBTZXRTeW4oImRvY2JreG1sIik8Q1I+CithbiA1MC4zMC4yMTAgJlN5bnRheC5ERS5Eb3QgOmNhbCBTZXRTeW4oImRvdCIpPENSPgorYW4gNTAuMzAuMjIwICZTeW50YXguREUuRHJhY3VsYSA6Y2FsIFNldFN5bigiZHJhY3VsYSIpPENSPgorYW4gNTAuMzAuMjMwICZTeW50YXguREUuRFNTU0wgOmNhbCBTZXRTeW4oImRzbCIpPENSPgorYW4gNTAuMzAuMjQwICZTeW50YXguREUuRFREIDpjYWwgU2V0U3luKCJkdGQiKTxDUj4KK2FuIDUwLjMwLjI1MCAmU3ludGF4LkRFLkRUTUxcIChab3BlKSA6Y2FsIFNldFN5bigiZHRtbCIpPENSPgorYW4gNTAuMzAuMjYwICZTeW50YXguREUuRHlsYW4uRHlsYW4gOmNhbCBTZXRTeW4oImR5bGFuIik8Q1I+CithbiA1MC4zMC4yNzAgJlN5bnRheC5ERS5EeWxhbi5EeWxhblwgaW50ZXJmYWNlIDpjYWwgU2V0U3luKCJkeWxhbmludHIiKTxDUj4KK2FuIDUwLjMwLjI4MCAmU3ludGF4LkRFLkR5bGFuLkR5bGFuXCBsaWQgOmNhbCBTZXRTeW4oImR5bGFubGlkIik8Q1I+CithbiA1MC4zMC4zMDAgJlN5bnRheC5ERS5FRElGIDpjYWwgU2V0U3luKCJlZGlmIik8Q1I+CithbiA1MC4zMC4zMTAgJlN5bnRheC5ERS5FaWZmZWwgOmNhbCBTZXRTeW4oImVpZmZlbCIpPENSPgorYW4gNTAuMzAuMzIwICZTeW50YXguREUuRWxpbmtzXCBjb25maWcgOmNhbCBTZXRTeW4oImVsaW5rcyIpPENSPgorYW4gNTAuMzAuMzMwICZTeW50YXguREUuRWxtXCBmaWx0ZXJcIHJ1bGVzIDpjYWwgU2V0U3luKCJlbG1maWx0Iik8Q1I+CithbiA1MC4zMC4zNDAgJlN5bnRheC5ERS5FbWJlZGl4XCBDb21wb25lbnRcIERlc2NyaXB0aW9uIDpjYWwgU2V0U3luKCJlY2QiKTxDUj4KK2FuIDUwLjMwLjM1MCAmU3ludGF4LkRFLkVSaWNzc29uXCBMQU5HdWFnZSA6Y2FsIFNldFN5bigiZXJsYW5nIik8Q1I+CithbiA1MC4zMC4zNjAgJlN5bnRheC5ERS5FU1FMLUMgOmNhbCBTZXRTeW4oImVzcWxjIik8Q1I+CithbiA1MC4zMC4zNzAgJlN5bnRheC5ERS5Fc3NiYXNlXCBzY3JpcHQgOmNhbCBTZXRTeW4oImNzYyIpPENSPgorYW4gNTAuMzAuMzgwICZTeW50YXguREUuRXRlcm1cIGNvbmZpZyA6Y2FsIFNldFN5bigiZXRlcm0iKTxDUj4KK2FuIDUwLjMwLjM5MCAmU3ludGF4LkRFLkV4aW1cIGNvbmYgOmNhbCBTZXRTeW4oImV4aW0iKTxDUj4KK2FuIDUwLjMwLjQwMCAmU3ludGF4LkRFLkV4cGVjdCA6Y2FsIFNldFN5bigiZXhwZWN0Iik8Q1I+CithbiA1MC4zMC40MTAgJlN5bnRheC5ERS5FeHBvcnRzIDpjYWwgU2V0U3luKCJleHBvcnRzIik8Q1I+CithbiA1MC40MC4xMDAgJlN5bnRheC5GRy5GZXRjaG1haWwgOmNhbCBTZXRTeW4oImZldGNobWFpbCIpPENSPgorYW4gNTAuNDAuMTEwICZTeW50YXguRkcuRm9jdXNcIEV4ZWN1dGFibGUgOmNhbCBTZXRTeW4oImZvY2V4ZWMiKTxDUj4KK2FuIDUwLjQwLjEyMCAmU3ludGF4LkZHLkZvY3VzXCBNYXN0ZXIgOmNhbCBTZXRTeW4oIm1hc3RlciIpPENSPgorYW4gNTAuNDAuMTMwICZTeW50YXguRkcuRk9STSA6Y2FsIFNldFN5bigiZm9ybSIpPENSPgorYW4gNTAuNDAuMTQwICZTeW50YXguRkcuRm9ydGggOmNhbCBTZXRTeW4oImZvcnRoIik8Q1I+CithbiA1MC40MC4xNTAgJlN5bnRheC5GRy5Gb3J0cmFuIDpjYWwgU2V0U3luKCJmb3J0cmFuIik8Q1I+CithbiA1MC40MC4xNjAgJlN5bnRheC5GRy5Gb3hQcm8gOmNhbCBTZXRTeW4oImZveHBybyIpPENSPgorYW4gNTAuNDAuMTcwICZTeW50YXguRkcuRnN0YWIgOmNhbCBTZXRTeW4oImZzdGFiIik8Q1I+CithbiA1MC40MC4xODAgJlN5bnRheC5GRy5GdndtLkZ2d21cIGNvbmZpZ3VyYXRpb24gOmNhbCBTZXRTeW4oImZ2d20xIik8Q1I+CithbiA1MC40MC4xOTAgJlN5bnRheC5GRy5GdndtLkZ2d20yXCBjb25maWd1cmF0aW9uIDpjYWwgU2V0U3luKCJmdndtMiIpPENSPgorYW4gNTAuNDAuMjAwICZTeW50YXguRkcuRnZ3bS5GdndtMlwgY29uZmlndXJhdGlvblwgd2l0aFwgTTQgOmNhbCBTZXRTeW4oImZ2d20ybTQiKTxDUj4KK2FuIDUwLjQwLjIyMCAmU3ludGF4LkZHLkdEQlwgY29tbWFuZFwgZmlsZSA6Y2FsIFNldFN5bigiZ2RiIik8Q1I+CithbiA1MC40MC4yMzAgJlN5bnRheC5GRy5HRE1PIDpjYWwgU2V0U3luKCJnZG1vIik8Q1I+CithbiA1MC40MC4yNDAgJlN5bnRheC5GRy5HZWRjb20gOmNhbCBTZXRTeW4oImdlZGNvbSIpPENSPgorYW4gNTAuNDAuMjUwICZTeW50YXguRkcuR2tyZWxsbXJjIDpjYWwgU2V0U3luKCJna3JlbGxtcmMiKTxDUj4KK2FuIDUwLjQwLjI2MCAmU3ludGF4LkZHLkdQIDpjYWwgU2V0U3luKCJncCIpPENSPgorYW4gNTAuNDAuMjcwICZTeW50YXguRkcuR1BHIDpjYWwgU2V0U3luKCJncGciKTxDUj4KK2FuIDUwLjQwLjI4MCAmU3ludGF4LkZHLkdydWIgOmNhbCBTZXRTeW4oImdydWIiKTxDUj4KK2FuIDUwLjQwLjI5MCAmU3ludGF4LkZHLkdOVVwgU2VydmVyXCBQYWdlcyA6Y2FsIFNldFN5bigiZ3NwIik8Q1I+CithbiA1MC40MC4zMDAgJlN5bnRheC5GRy5HTlVwbG90IDpjYWwgU2V0U3luKCJnbnVwbG90Iik8Q1I+CithbiA1MC40MC4zMTAgJlN5bnRheC5GRy5HckFEU1wgc2NyaXB0cyA6Y2FsIFNldFN5bigiZ3JhZHMiKTxDUj4KK2FuIDUwLjQwLjMyMCAmU3ludGF4LkZHLkdyb2ZmIDpjYWwgU2V0U3luKCJncm9mZiIpPENSPgorYW4gNTAuNDAuMzMwICZTeW50YXguRkcuR1RLcmMgOmNhbCBTZXRTeW4oImd0a3JjIik8Q1I+CithbiA1MC41MC4xMDAgJlN5bnRheC5ISUpLLkhhc2tlbGwuSGFza2VsbCA6Y2FsIFNldFN5bigiaGFza2VsbCIpPENSPgorYW4gNTAuNTAuMTEwICZTeW50YXguSElKSy5IYXNrZWxsLkhhc2tlbGwtYzJocyA6Y2FsIFNldFN5bigiY2hhc2tlbGwiKTxDUj4KK2FuIDUwLjUwLjEyMCAmU3ludGF4LkhJSksuSGFza2VsbC5IYXNrZWxsLWxpdGVyYXRlIDpjYWwgU2V0U3luKCJsaGFza2VsbCIpPENSPgorYW4gNTAuNTAuMTMwICZTeW50YXguSElKSy5IZXJjdWxlcyA6Y2FsIFNldFN5bigiaGVyY3VsZXMiKTxDUj4KK2FuIDUwLjUwLjE0MCAmU3ludGF4LkhJSksuSGV4XCBkdW1wLlhYRCA6Y2FsIFNldFN5bigieHhkIik8Q1I+CithbiA1MC41MC4xNTAgJlN5bnRheC5ISUpLLkhleFwgZHVtcC5JbnRlbFwgTUNTNTEgOmNhbCBTZXRTeW4oImhleCIpPENSPgorYW4gNTAuNTAuMTYwICZTeW50YXguSElKSy5IVE1MLkhUTUwgOmNhbCBTZXRTeW4oImh0bWwiKTxDUj4KK2FuIDUwLjUwLjE3MCAmU3ludGF4LkhJSksuSFRNTC5IVE1MXCB3aXRoXCBNNCA6Y2FsIFNldFN5bigiaHRtbG00Iik8Q1I+CithbiA1MC41MC4xODAgJlN5bnRheC5ISUpLLkhUTUwuQ2hlZXRhaFwgSFRNTFwgdGVtcGxhdGUgOmNhbCBTZXRTeW4oImh0bWxjaGVldGFoIik8Q1I+CithbiA1MC41MC4xOTAgJlN5bnRheC5ISUpLLkhUTUwuSFRNTC9PUyA6Y2FsIFNldFN5bigiaHRtbG9zIik8Q1I+CithbiA1MC41MC4yMDAgJlN5bnRheC5ISUpLLkhUTUwuWEhUTUwgOmNhbCBTZXRTeW4oInhodG1sIik8Q1I+CithbiA1MC41MC4yMTAgJlN5bnRheC5ISUpLLkh5cGVyXCBCdWlsZGVyIDpjYWwgU2V0U3luKCJoYiIpPENSPgorYW4gNTAuNTAuMjMwICZTeW50YXguSElKSy5JY2V3bVwgbWVudSA6Y2FsIFNldFN5bigiaWNlbWVudSIpPENSPgorYW4gNTAuNTAuMjQwICZTeW50YXguSElKSy5JY29uIDpjYWwgU2V0U3luKCJpY29uIik8Q1I+CithbiA1MC41MC4yNTAgJlN5bnRheC5ISUpLLklETFxHZW5lcmljXCBJREwgOmNhbCBTZXRTeW4oImlkbCIpPENSPgorYW4gNTAuNTAuMjYwICZTeW50YXguSElKSy5JRExcTWljcm9zb2Z0XCBJREwgOmNhbCBTZXRTeW4oIm1zaWRsIik8Q1I+CithbiA1MC41MC4yNzAgJlN5bnRheC5ISUpLLkluZGVudFwgcHJvZmlsZSA6Y2FsIFNldFN5bigiaW5kZW50Iik8Q1I+CithbiA1MC41MC4yODAgJlN5bnRheC5ISUpLLkluZm9ybSA6Y2FsIFNldFN5bigiaW5mb3JtIik8Q1I+CithbiA1MC41MC4yOTAgJlN5bnRheC5ISUpLLkluZm9ybWl4XCA0R0wgOmNhbCBTZXRTeW4oImZnbCIpPENSPgorYW4gNTAuNTAuMzAwICZTeW50YXguSElKSy5Jbml0dGFiIDpjYWwgU2V0U3luKCJpbml0dGFiIik8Q1I+CithbiA1MC41MC4zMTAgJlN5bnRheC5ISUpLLklubm9cIHNldHVwIDpjYWwgU2V0U3luKCJpc3MiKTxDUj4KK2FuIDUwLjUwLjMyMCAmU3ludGF4LkhJSksuSW5zdGFsbFNoaWVsZFwgc2NyaXB0IDpjYWwgU2V0U3luKCJpc2hkIik8Q1I+CithbiA1MC41MC4zMzAgJlN5bnRheC5ISUpLLkludGVyYWN0aXZlXCBEYXRhXCBMYW5nIDpjYWwgU2V0U3luKCJpZGxhbmciKTxDUj4KK2FuIDUwLjUwLjM0MCAmU3ludGF4LkhJSksuSVBmaWx0ZXIgOmNhbCBTZXRTeW4oImlwZmlsdGVyIik8Q1I+CithbiA1MC41MC4zNjAgJlN5bnRheC5ISUpLLkpBTCA6Y2FsIFNldFN5bigiamFsIik8Q1I+CithbiA1MC41MC4zNzAgJlN5bnRheC5ISUpLLkpBTSA6Y2FsIFNldFN5bigiamFtIik8Q1I+CithbiA1MC41MC4zODAgJlN5bnRheC5ISUpLLkphcmdvbiA6Y2FsIFNldFN5bigiamFyZ29uIik8Q1I+CithbiA1MC41MC4zOTAgJlN5bnRheC5ISUpLLkphdmEuSmF2YSA6Y2FsIFNldFN5bigiamF2YSIpPENSPgorYW4gNTAuNTAuNDAwICZTeW50YXguSElKSy5KYXZhLkphdmFDQyA6Y2FsIFNldFN5bigiamF2YWNjIik8Q1I+CithbiA1MC41MC40MTAgJlN5bnRheC5ISUpLLkphdmEuSmF2YVwgU2VydmVyXCBQYWdlcyA6Y2FsIFNldFN5bigianNwIik8Q1I+CithbiA1MC41MC40MjAgJlN5bnRheC5ISUpLLkphdmEuSmF2YVwgUHJvcGVydGllcyA6Y2FsIFNldFN5bigianByb3BlcnRpZXMiKTxDUj4KK2FuIDUwLjUwLjQzMCAmU3ludGF4LkhJSksuSmF2YVNjcmlwdCA6Y2FsIFNldFN5bigiamF2YXNjcmlwdCIpPENSPgorYW4gNTAuNTAuNDQwICZTeW50YXguSElKSy5KZXNzIDpjYWwgU2V0U3luKCJqZXNzIik8Q1I+CithbiA1MC41MC40NTAgJlN5bnRheC5ISUpLLkpncmFwaCA6Y2FsIFNldFN5bigiamdyYXBoIik8Q1I+CithbiA1MC41MC40NzAgJlN5bnRheC5ISUpLLktERVwgc2NyaXB0IDpjYWwgU2V0U3luKCJrc2NyaXB0Iik8Q1I+CithbiA1MC41MC40ODAgJlN5bnRheC5ISUpLLktpbXdpdHUrKyA6Y2FsIFNldFN5bigia3d0Iik8Q1I+CithbiA1MC41MC40OTAgJlN5bnRheC5ISUpLLktpeFRhcnQgOmNhbCBTZXRTeW4oImtpeCIpPENSPgorYW4gNTAuNjAuMTAwICZTeW50YXguTC1NYS5MYWNlIDpjYWwgU2V0U3luKCJsYWNlIik8Q1I+CithbiA1MC42MC4xMTAgJlN5bnRheC5MLU1hLkxhbWRhUHJvbG9nIDpjYWwgU2V0U3luKCJscHJvbG9nIik8Q1I+CithbiA1MC42MC4xMjAgJlN5bnRheC5MLU1hLkxhdHRlIDpjYWwgU2V0U3luKCJsYXR0ZSIpPENSPgorYW4gNTAuNjAuMTMwICZTeW50YXguTC1NYS5MREFQXCBMRElGIDpjYWwgU2V0U3luKCJsZGlmIik8Q1I+CithbiA1MC42MC4xNDAgJlN5bnRheC5MLU1hLkxleCA6Y2FsIFNldFN5bigibGV4Iik8Q1I+CithbiA1MC42MC4xNTAgJlN5bnRheC5MLU1hLkxGVFBcIGNvbmZpZyA6Y2FsIFNldFN5bigibGZ0cCIpPENSPgorYW4gNTAuNjAuMTYwICZTeW50YXguTC1NYS5MaWJhbyA6Y2FsIFNldFN5bigibGliYW8iKTxDUj4KK2FuIDUwLjYwLjE3MCAmU3ludGF4LkwtTWEuTGlmZUxpbmVzXCBzY3JpcHQgOmNhbCBTZXRTeW4oImxpZmVsaW5lcyIpPENSPgorYW4gNTAuNjAuMTgwICZTeW50YXguTC1NYS5MaWxvIDpjYWwgU2V0U3luKCJsaWxvIik8Q1I+CithbiA1MC42MC4xOTAgJlN5bnRheC5MLU1hLkxpc3AgOmNhbCBTZXRTeW4oImxpc3AiKTxDUj4KK2FuIDUwLjYwLjIwMCAmU3ludGF4LkwtTWEuTGl0ZSA6Y2FsIFNldFN5bigibGl0ZSIpPENSPgorYW4gNTAuNjAuMjEwICZTeW50YXguTC1NYS5Mb2NhbGVcIElucHV0IDpjYWwgU2V0U3luKCJmZGNjIik8Q1I+CithbiA1MC42MC4yMjAgJlN5bnRheC5MLU1hLkxvZ3RhbGsgOmNhbCBTZXRTeW4oImxvZ3RhbGsiKTxDUj4KK2FuIDUwLjYwLjIzMCAmU3ludGF4LkwtTWEuTE9UT1MgOmNhbCBTZXRTeW4oImxvdG9zIik8Q1I+CithbiA1MC42MC4yNDAgJlN5bnRheC5MLU1hLkxvdHVzU2NyaXB0IDpjYWwgU2V0U3luKCJsc2NyaXB0Iik8Q1I+CithbiA1MC42MC4yNTAgJlN5bnRheC5MLU1hLkxvdXQgOmNhbCBTZXRTeW4oImxvdXQiKTxDUj4KK2FuIDUwLjYwLjI2MCAmU3ludGF4LkwtTWEuTFBDIDpjYWwgU2V0U3luKCJscGMiKTxDUj4KK2FuIDUwLjYwLjI3MCAmU3ludGF4LkwtTWEuTHVhIDpjYWwgU2V0U3luKCJsdWEiKTxDUj4KK2FuIDUwLjYwLjI4MCAmU3ludGF4LkwtTWEuTHlueFwgU3R5bGUgOmNhbCBTZXRTeW4oImxzcyIpPENSPgorYW4gNTAuNjAuMjkwICZTeW50YXguTC1NYS5MeW54XCBjb25maWcgOmNhbCBTZXRTeW4oImx5bngiKTxDUj4KK2FuIDUwLjYwLjMxMCAmU3ludGF4LkwtTWEuTTQgOmNhbCBTZXRTeW4oIm00Iik8Q1I+CithbiA1MC42MC4zMjAgJlN5bnRheC5MLU1hLk1hR2ljXCBQb2ludCA6Y2FsIFNldFN5bigibWdwIik8Q1I+CithbiA1MC42MC4zMzAgJlN5bnRheC5MLU1hLk1haWwgOmNhbCBTZXRTeW4oIm1haWwiKTxDUj4KK2FuIDUwLjYwLjM0MCAmU3ludGF4LkwtTWEuTWFpbGNhcCA6Y2FsIFNldFN5bigibWFpbGNhcCIpPENSPgorYW4gNTAuNjAuMzUwICZTeW50YXguTC1NYS5NYWtlZmlsZSA6Y2FsIFNldFN5bigibWFrZSIpPENSPgorYW4gNTAuNjAuMzYwICZTeW50YXguTC1NYS5NYWtlSW5kZXggOmNhbCBTZXRTeW4oImlzdCIpPENSPgorYW4gNTAuNjAuMzcwICZTeW50YXguTC1NYS5NYW5cIHBhZ2UgOmNhbCBTZXRTeW4oIm1hbiIpPENSPgorYW4gNTAuNjAuMzgwICZTeW50YXguTC1NYS5NYXBsZVwgViA6Y2FsIFNldFN5bigibWFwbGUiKTxDUj4KK2FuIDUwLjYwLjM5MCAmU3ludGF4LkwtTWEuTWFzb24gOmNhbCBTZXRTeW4oIm1hc29uIik8Q1I+CithbiA1MC42MC40MDAgJlN5bnRheC5MLU1hLk1hdGhlbWF0aWNhIDpjYWwgU2V0U3luKCJtbWEiKTxDUj4KK2FuIDUwLjYwLjQxMCAmU3ludGF4LkwtTWEuTWF0bGFiIDpjYWwgU2V0U3luKCJtYXRsYWIiKTxDUj4KK2FuIDUwLjcwLjEwMCAmU3ludGF4Lk1lLU5PLk1FTFwgKGZvclwgTWF5YSkgOmNhbCBTZXRTeW4oIm1lbCIpPENSPgorYW4gNTAuNzAuMTEwICZTeW50YXguTWUtTk8uTWV0YWZvbnQgOmNhbCBTZXRTeW4oIm1mIik8Q1I+CithbiA1MC43MC4xMjAgJlN5bnRheC5NZS1OTy5NZXRhUG9zdCA6Y2FsIFNldFN5bigibXAiKTxDUj4KK2FuIDUwLjcwLjEzMCAmU3ludGF4Lk1lLU5PLk1NSVggOmNhbCBTZXRTeW4oIm1taXgiKTxDUj4KK2FuIDUwLjcwLjE0MCAmU3ludGF4Lk1lLU5PLk1vZGNvbmYgOmNhbCBTZXRTeW4oIm1vZGNvbmYiKTxDUj4KK2FuIDUwLjcwLjE1MCAmU3ludGF4Lk1lLU5PLk1vZGVsIDpjYWwgU2V0U3luKCJtb2RlbCIpPENSPgorYW4gNTAuNzAuMTYwICZTeW50YXguTWUtTk8uTW9kc2ltXCBJSUkgOmNhbCBTZXRTeW4oIm1vZHNpbTMiKTxDUj4KK2FuIDUwLjcwLjE3MCAmU3ludGF4Lk1lLU5PLk1vZHVsYVwgMiA6Y2FsIFNldFN5bigibW9kdWxhMiIpPENSPgorYW4gNTAuNzAuMTgwICZTeW50YXguTWUtTk8uTW9kdWxhXCAzIDpjYWwgU2V0U3luKCJtb2R1bGEzIik8Q1I+CithbiA1MC43MC4xOTAgJlN5bnRheC5NZS1OTy5Nb25rIDpjYWwgU2V0U3luKCJtb25rIik8Q1I+CithbiA1MC43MC4yMDAgJlN5bnRheC5NZS1OTy5NcGxheWVyXCBjb25maWcgOmNhbCBTZXRTeW4oIm1wbGF5ZXJjb25mIik8Q1I+CithbiA1MC43MC4yMTAgJlN5bnRheC5NZS1OTy5NT08gOmNhbCBTZXRTeW4oIm1vbyIpPENSPgorYW4gNTAuNzAuMjIwICZTeW50YXguTWUtTk8uTVMtRE9TL1dpbmRvd3MuNERPU1wgXC5iYXRcIGZpbGUgOmNhbCBTZXRTeW4oImJ0bSIpPENSPgorYW4gNTAuNzAuMjMwICZTeW50YXguTWUtTk8uTVMtRE9TL1dpbmRvd3MuXC5iYXRcL1wuY21kXCBmaWxlIDpjYWwgU2V0U3luKCJkb3NiYXRjaCIpPENSPgorYW4gNTAuNzAuMjQwICZTeW50YXguTWUtTk8uTVMtRE9TL1dpbmRvd3MuXC5pbmlcIGZpbGUgOmNhbCBTZXRTeW4oImRvc2luaSIpPENSPgorYW4gNTAuNzAuMjUwICZTeW50YXguTWUtTk8uTVMtRE9TL1dpbmRvd3MuTW9kdWxlXCBEZWZpbml0aW9uIDpjYWwgU2V0U3luKCJkZWYiKTxDUj4KK2FuIDUwLjcwLjI2MCAmU3ludGF4Lk1lLU5PLk1TLURPUy9XaW5kb3dzLlJlZ2lzdHJ5IDpjYWwgU2V0U3luKCJyZWdpc3RyeSIpPENSPgorYW4gNTAuNzAuMjcwICZTeW50YXguTWUtTk8uTVMtRE9TL1dpbmRvd3MuUmVzb3VyY2VcIGZpbGUgOmNhbCBTZXRTeW4oInJjIik8Q1I+CithbiA1MC43MC4yODAgJlN5bnRheC5NZS1OTy5Nc3FsIDpjYWwgU2V0U3luKCJtc3FsIik8Q1I+CithbiA1MC43MC4yOTAgJlN5bnRheC5NZS1OTy5NVVNIY29kZSA6Y2FsIFNldFN5bigibXVzaCIpPENSPgorYW4gNTAuNzAuMzAwICZTeW50YXguTWUtTk8uTXV0dHJjIDpjYWwgU2V0U3luKCJtdXR0cmMiKTxDUj4KK2FuIDUwLjcwLjMyMCAmU3ludGF4Lk1lLU5PLk5hc3RyYW5cIGlucHV0L0RNQVAgOmNhbCBTZXRTeW4oIm5hc3RyYW4iKTxDUj4KK2FuIDUwLjcwLjMzMCAmU3ludGF4Lk1lLU5PLk5hdHVyYWwgOmNhbCBTZXRTeW4oIm5hdHVyYWwiKTxDUj4KK2FuIDUwLjcwLjM0MCAmU3ludGF4Lk1lLU5PLk5vdmVsbFwgTkNGXCBiYXRjaCA6Y2FsIFNldFN5bigibmNmIik8Q1I+CithbiA1MC43MC4zNTAgJlN5bnRheC5NZS1OTy5Ob3RcIFF1aXRlXCBDXCAoTEVHTykgOmNhbCBTZXRTeW4oIm5xYyIpPENSPgorYW4gNTAuNzAuMzYwICZTeW50YXguTWUtTk8uTnJvZmYgOmNhbCBTZXRTeW4oIm5yb2ZmIik8Q1I+CithbiA1MC43MC4zNzAgJlN5bnRheC5NZS1OTy5OU0lTXCBzY3JpcHQgOmNhbCBTZXRTeW4oIm5zaXMiKTxDUj4KK2FuIDUwLjcwLjM5MCAmU3ludGF4Lk1lLU5PLk9iamVjdGl2ZVwgQyA6Y2FsIFNldFN5bigib2JqYyIpPENSPgorYW4gNTAuNzAuNDAwICZTeW50YXguTWUtTk8uT2JqZWN0aXZlXCBDKysgOmNhbCBTZXRTeW4oIm9iamNwcCIpPENSPgorYW4gNTAuNzAuNDEwICZTeW50YXguTWUtTk8uT0NBTUwgOmNhbCBTZXRTeW4oIm9jYW1sIik8Q1I+CithbiA1MC43MC40MjAgJlN5bnRheC5NZS1OTy5PY2NhbSA6Y2FsIFNldFN5bigib2NjYW0iKTxDUj4KK2FuIDUwLjcwLjQzMCAmU3ludGF4Lk1lLU5PLk9tbmltYXJrIDpjYWwgU2V0U3luKCJvbW5pbWFyayIpPENSPgorYW4gNTAuNzAuNDQwICZTeW50YXguTWUtTk8uT3BlblJPQUQgOmNhbCBTZXRTeW4oIm9wZW5yb2FkIik8Q1I+CithbiA1MC43MC40NTAgJlN5bnRheC5NZS1OTy5PcGVuXCBQc2lvblwgTGFuZyA6Y2FsIFNldFN5bigib3BsIik8Q1I+CithbiA1MC43MC40NjAgJlN5bnRheC5NZS1OTy5PcmFjbGVcIGNvbmZpZyA6Y2FsIFNldFN5bigib3JhIik8Q1I+CithbiA1MC44MC4xMDAgJlN5bnRheC5QUS5QYWxtXCByZXNvdXJjZVwgY29tcGlsZXIgOmNhbCBTZXRTeW4oInBpbHJjIik8Q1I+CithbiA1MC44MC4xMTAgJlN5bnRheC5QUS5QYWNrZXRcIGZpbHRlclwgY29uZiA6Y2FsIFNldFN5bigicGYiKTxDUj4KK2FuIDUwLjgwLjEyMCAmU3ludGF4LlBRLlBBcHAgOmNhbCBTZXRTeW4oInBhcHAiKTxDUj4KK2FuIDUwLjgwLjEzMCAmU3ludGF4LlBRLlBhc2NhbCA6Y2FsIFNldFN5bigicGFzY2FsIik8Q1I+CithbiA1MC44MC4xNDAgJlN5bnRheC5QUS5QQ0NUUyA6Y2FsIFNldFN5bigicGNjdHMiKTxDUj4KK2FuIDUwLjgwLjE1MCAmU3ludGF4LlBRLlBQV2l6YXJkIDpjYWwgU2V0U3luKCJwcHdpeiIpPENSPgorYW4gNTAuODAuMTYwICZTeW50YXguUFEuUGVybC5QZXJsIDpjYWwgU2V0U3luKCJwZXJsIik8Q1I+CithbiA1MC44MC4xNzAgJlN5bnRheC5QUS5QZXJsLlBlcmxcIFBPRCA6Y2FsIFNldFN5bigicG9kIik8Q1I+CithbiA1MC44MC4xODAgJlN5bnRheC5QUS5QZXJsLlBlcmxcIFhTIDpjYWwgU2V0U3luKCJ4cyIpPENSPgorYW4gNTAuODAuMTkwICZTeW50YXguUFEuUEhQLlBIUFwgMy00IDpjYWwgU2V0U3luKCJwaHAiKTxDUj4KK2FuIDUwLjgwLjIwMCAmU3ludGF4LlBRLlBIUC5QaHRtbFwgKFBIUFwgMikgOmNhbCBTZXRTeW4oInBodG1sIik8Q1I+CithbiA1MC44MC4yMTAgJlN5bnRheC5QUS5QaWtlIDpjYWwgU2V0U3luKCJwaWtlIik8Q1I+CithbiA1MC44MC4yMjAgJlN5bnRheC5QUS5QaW5lXCBSQyA6Y2FsIFNldFN5bigicGluZSIpPENSPgorYW4gNTAuODAuMjMwICZTeW50YXguUFEuUGluZm9cIFJDIDpjYWwgU2V0U3luKCJwaW5mbyIpPENSPgorYW4gNTAuODAuMjQwICZTeW50YXguUFEuUEwvTSA6Y2FsIFNldFN5bigicGxtIik8Q1I+CithbiA1MC44MC4yNTAgJlN5bnRheC5QUS5QTC9TUUwgOmNhbCBTZXRTeW4oInBsc3FsIik8Q1I+CithbiA1MC44MC4yNjAgJlN5bnRheC5QUS5QTFAgOmNhbCBTZXRTeW4oInBscCIpPENSPgorYW4gNTAuODAuMjcwICZTeW50YXguUFEuUE9cIChHTlVcIGdldHRleHQpIDpjYWwgU2V0U3luKCJwbyIpPENSPgorYW4gNTAuODAuMjgwICZTeW50YXguUFEuUG9zdGZpeFwgbWFpblwgY29uZmlnIDpjYWwgU2V0U3luKCJwZm1haW4iKTxDUj4KK2FuIDUwLjgwLjI5MCAmU3ludGF4LlBRLlBvc3RTY3JpcHQuUG9zdFNjcmlwdCA6Y2FsIFNldFN5bigicG9zdHNjciIpPENSPgorYW4gNTAuODAuMzAwICZTeW50YXguUFEuUG9zdFNjcmlwdC5Qb3N0U2NyaXB0XCBQcmludGVyXCBEZXNjcmlwdGlvbiA6Y2FsIFNldFN5bigicHBkIik8Q1I+CithbiA1MC44MC4zMTAgJlN5bnRheC5QUS5Qb3ZyYXkuUG92cmF5XCBzY2VuZVwgZGVzY3IgOmNhbCBTZXRTeW4oInBvdiIpPENSPgorYW4gNTAuODAuMzIwICZTeW50YXguUFEuUG92cmF5LlBvdnJheVwgY29uZmlndXJhdGlvbiA6Y2FsIFNldFN5bigicG92aW5pIik8Q1I+CithbiA1MC44MC4zMzAgJlN5bnRheC5QUS5QcmludGNhcCA6Y2FsIFNldFN5bigicGNhcCIpPENSPgorYW4gNTAuODAuMzQwICZTeW50YXguUFEuUHJvY21haWwgOmNhbCBTZXRTeW4oInByb2NtYWlsIik8Q1I+CithbiA1MC44MC4zNTAgJlN5bnRheC5QUS5Qcm9kdWN0XCBTcGVjXCBGaWxlIDpjYWwgU2V0U3luKCJwc2YiKTxDUj4KK2FuIDUwLjgwLjM2MCAmU3ludGF4LlBRLlByb2dyZXNzIDpjYWwgU2V0U3luKCJwcm9ncmVzcyIpPENSPgorYW4gNTAuODAuMzcwICZTeW50YXguUFEuUHJvbG9nIDpjYWwgU2V0U3luKCJwcm9sb2ciKTxDUj4KK2FuIDUwLjgwLjM4MCAmU3ludGF4LlBRLlB1cmlmeVwgbG9nIDpjYWwgU2V0U3luKCJwdXJpZnlsb2ciKTxDUj4KK2FuIDUwLjgwLjM5MCAmU3ludGF4LlBRLlB5cmV4IDpjYWwgU2V0U3luKCJweXJleCIpPENSPgorYW4gNTAuODAuNDAwICZTeW50YXguUFEuUHl0aG9uIDpjYWwgU2V0U3luKCJweXRob24iKTxDUj4KK2FuIDUwLjgwLjQyMCAmU3ludGF4LlBRLlF1YWtlIDpjYWwgU2V0U3luKCJxdWFrZSIpPENSPgorYW4gNTAuODAuNDMwICZTeW50YXguUFEuUXVpY2tmaXhcIHdpbmRvdyA6Y2FsIFNldFN5bigicWYiKTxDUj4KK2FuIDUwLjkwLjEwMCAmU3ludGF4LlItU2cuUiA6Y2FsIFNldFN5bigiciIpPENSPgorYW4gNTAuOTAuMTEwICZTeW50YXguUi1TZy5SYWRpYW5jZSA6Y2FsIFNldFN5bigicmFkaWFuY2UiKTxDUj4KK2FuIDUwLjkwLjEyMCAmU3ludGF4LlItU2cuUmF0cG9pc29uIDpjYWwgU2V0U3luKCJyYXRwb2lzb24iKTxDUj4KK2FuIDUwLjkwLjEzMCAmU3ludGF4LlItU2cuUkNTLlJDU1wgbG9nXCBvdXRwdXQgOmNhbCBTZXRTeW4oInJjc2xvZyIpPENSPgorYW4gNTAuOTAuMTQwICZTeW50YXguUi1TZy5SQ1MuUkNTXCBmaWxlIDpjYWwgU2V0U3luKCJyY3MiKTxDUj4KK2FuIDUwLjkwLjE1MCAmU3ludGF4LlItU2cuUmVhZGxpbmVcIGNvbmZpZyA6Y2FsIFNldFN5bigicmVhZGxpbmUiKTxDUj4KK2FuIDUwLjkwLjE2MCAmU3ludGF4LlItU2cuUmVib2wgOmNhbCBTZXRTeW4oInJlYm9sIik8Q1I+CithbiA1MC45MC4xNzAgJlN5bnRheC5SLVNnLlJlbWluZCA6Y2FsIFNldFN5bigicmVtaW5kIik8Q1I+CithbiA1MC45MC4xODAgJlN5bnRheC5SLVNnLlJlbGF4XCBOR1wgY29tcGFjdCA6Y2FsIFNldFN5bigicm5jIik8Q1I+CithbiA1MC45MC4xOTAgJlN5bnRheC5SLVNnLlJlbmRlcm1hbi5SZW5kZXJtYW5cIFNoYWRlclwgTGFuZyA6Y2FsIFNldFN5bigic2wiKTxDUj4KK2FuIDUwLjkwLjIwMCAmU3ludGF4LlItU2cuUmVuZGVybWFuLlJlbmRlcm1hblwgSW50ZXJmYWNlXCBCeXRlc3RyZWFtIDpjYWwgU2V0U3luKCJyaWIiKTxDUj4KK2FuIDUwLjkwLjIxMCAmU3ludGF4LlItU2cuUmVzb2x2XC5jb25mIDpjYWwgU2V0U3luKCJyZXNvbHYiKTxDUj4KK2FuIDUwLjkwLjIyMCAmU3ludGF4LlItU2cuUmV4eCA6Y2FsIFNldFN5bigicmV4eCIpPENSPgorYW4gNTAuOTAuMjMwICZTeW50YXguUi1TZy5Sb2JvdHNcLnR4dCA6Y2FsIFNldFN5bigicm9ib3RzIik8Q1I+CithbiA1MC45MC4yNDAgJlN5bnRheC5SLVNnLlJvY2tMaW51eFwgcGFja2FnZVwgZGVzY1wuIDpjYWwgU2V0U3luKCJkZXNjIik8Q1I+CithbiA1MC45MC4yNTAgJlN5bnRheC5SLVNnLlJwY2dlbiA6Y2FsIFNldFN5bigicnBjZ2VuIik8Q1I+CithbiA1MC45MC4yNjAgJlN5bnRheC5SLVNnLlJQTC8yIDpjYWwgU2V0U3luKCJycGwiKTxDUj4KK2FuIDUwLjkwLjI3MCAmU3ludGF4LlItU2cuUmVTdHJ1Y3R1cmVkVGV4dCA6Y2FsIFNldFN5bigicnN0Iik8Q1I+CithbiA1MC45MC4yODAgJlN5bnRheC5SLVNnLlJURiA6Y2FsIFNldFN5bigicnRmIik8Q1I+CithbiA1MC45MC4yOTAgJlN5bnRheC5SLVNnLlJ1YnkgOmNhbCBTZXRTeW4oInJ1YnkiKTxDUj4KK2FuIDUwLjkwLjMxMCAmU3ludGF4LlItU2cuUy1MYW5nIDpjYWwgU2V0U3luKCJzbGFuZyIpPENSPgorYW4gNTAuOTAuMzIwICZTeW50YXguUi1TZy5TYW1iYVwgY29uZmlnIDpjYWwgU2V0U3luKCJzYW1iYSIpPENSPgorYW4gNTAuOTAuMzMwICZTeW50YXguUi1TZy5TQVMgOmNhbCBTZXRTeW4oInNhcyIpPENSPgorYW4gNTAuOTAuMzQwICZTeW50YXguUi1TZy5TYXRoZXIgOmNhbCBTZXRTeW4oInNhdGhlciIpPENSPgorYW4gNTAuOTAuMzUwICZTeW50YXguUi1TZy5TY2hlbWUgOmNhbCBTZXRTeW4oInNjaGVtZSIpPENSPgorYW4gNTAuOTAuMzYwICZTeW50YXguUi1TZy5TY2lsYWIgOmNhbCBTZXRTeW4oInNjaWxhYiIpPENSPgorYW4gNTAuOTAuMzcwICZTeW50YXguUi1TZy5TY3JlZW5cIFJDIDpjYWwgU2V0U3luKCJzY3JlZW4iKTxDUj4KK2FuIDUwLjkwLjM4MCAmU3ludGF4LlItU2cuU0RMIDpjYWwgU2V0U3luKCJzZGwiKTxDUj4KK2FuIDUwLjkwLjM5MCAmU3ludGF4LlItU2cuU2VkIDpjYWwgU2V0U3luKCJzZWQiKTxDUj4KK2FuIDUwLjkwLjQwMCAmU3ludGF4LlItU2cuU2VuZG1haWxcLmNmIDpjYWwgU2V0U3luKCJzbSIpPENSPgorYW4gNTAuOTAuNDEwICZTeW50YXguUi1TZy5TZW5kLXByIDpjYWwgU2V0U3luKCJzZW5kcHIiKTxDUj4KK2FuIDUwLjkwLjQyMCAmU3ludGF4LlItU2cuU0dNTC5TR01MXCBjYXRhbG9nIDpjYWwgU2V0U3luKCJjYXRhbG9nIik8Q1I+CithbiA1MC45MC40MzAgJlN5bnRheC5SLVNnLlNHTUwuU0dNTFwgRFREIDpjYWwgU2V0U3luKCJzZ21sIik8Q1I+CithbiA1MC45MC40NDAgJlN5bnRheC5SLVNnLlNHTUwuU0dNTFwgRGVjbGFyYXRpb24gOmNhbCBTZXRTeW4oInNnbWxkZWNsIik8Q1I+CithbiA1MC45MC40NTAgJlN5bnRheC5SLVNnLlNHTUwuU0dNTC1saW51eGRvYyA6Y2FsIFNldFN5bigic2dtbGxueCIpPENSPgorYW4gNTAuMTAwLjEwMCAmU3ludGF4LlNoLVMuU2hlbGxcIHNjcmlwdC5zaFwgYW5kXCBrc2ggOmNhbCBTZXRTeW4oInNoIik8Q1I+CithbiA1MC4xMDAuMTEwICZTeW50YXguU2gtUy5TaGVsbFwgc2NyaXB0LmNzaCA6Y2FsIFNldFN5bigiY3NoIik8Q1I+CithbiA1MC4xMDAuMTIwICZTeW50YXguU2gtUy5TaGVsbFwgc2NyaXB0LnRjc2ggOmNhbCBTZXRTeW4oInRjc2giKTxDUj4KK2FuIDUwLjEwMC4xMzAgJlN5bnRheC5TaC1TLlNoZWxsXCBzY3JpcHQuenNoIDpjYWwgU2V0U3luKCJ6c2giKTxDUj4KK2FuIDUwLjEwMC4xNDAgJlN5bnRheC5TaC1TLlNpQ0FEIDpjYWwgU2V0U3luKCJzaWNhZCIpPENSPgorYW4gNTAuMTAwLjE1MCAmU3ludGF4LlNoLVMuU2ltdWxhIDpjYWwgU2V0U3luKCJzaW11bGEiKTxDUj4KK2FuIDUwLjEwMC4xNjAgJlN5bnRheC5TaC1TLlNpbmRhLlNpbmRhXCBjb21wYXJlIDpjYWwgU2V0U3luKCJzaW5kYWNtcCIpPENSPgorYW4gNTAuMTAwLjE3MCAmU3ludGF4LlNoLVMuU2luZGEuU2luZGFcIGlucHV0IDpjYWwgU2V0U3luKCJzaW5kYSIpPENSPgorYW4gNTAuMTAwLjE4MCAmU3ludGF4LlNoLVMuU2luZGEuU2luZGFcIG91dHB1dCA6Y2FsIFNldFN5bigic2luZGFvdXQiKTxDUj4KK2FuIDUwLjEwMC4xOTAgJlN5bnRheC5TaC1TLlNLSUxMLlNLSUxMIDpjYWwgU2V0U3luKCJza2lsbCIpPENSPgorYW4gNTAuMTAwLjIwMCAmU3ludGF4LlNoLVMuU0tJTEwuU0tJTExcIGZvclwgRGl2YSA6Y2FsIFNldFN5bigiZGl2YSIpPENSPgorYW4gNTAuMTAwLjIxMCAmU3ludGF4LlNoLVMuU2xpY2UgOmNhbCBTZXRTeW4oInNsaWNlIik8Q1I+CithbiA1MC4xMDAuMjIwICZTeW50YXguU2gtUy5TTFJOLlNscm5cIHJjIDpjYWwgU2V0U3luKCJzbHJucmMiKTxDUj4KK2FuIDUwLjEwMC4yMzAgJlN5bnRheC5TaC1TLlNMUk4uU2xyblwgc2NvcmUgOmNhbCBTZXRTeW4oInNscm5zYyIpPENSPgorYW4gNTAuMTAwLjI0MCAmU3ludGF4LlNoLVMuU21hbGxUYWxrIDpjYWwgU2V0U3luKCJzdCIpPENSPgorYW4gNTAuMTAwLjI1MCAmU3ludGF4LlNoLVMuU21hcnR5XCBUZW1wbGF0ZXMgOmNhbCBTZXRTeW4oInNtYXJ0eSIpPENSPgorYW4gNTAuMTAwLjI2MCAmU3ludGF4LlNoLVMuU01JTCA6Y2FsIFNldFN5bigic21pbCIpPENSPgorYW4gNTAuMTAwLjI3MCAmU3ludGF4LlNoLVMuU01JVEggOmNhbCBTZXRTeW4oInNtaXRoIik8Q1I+CithbiA1MC4xMDAuMjgwICZTeW50YXguU2gtUy5TTk1QXCBNSUIgOmNhbCBTZXRTeW4oIm1pYiIpPENSPgorYW4gNTAuMTAwLjI5MCAmU3ludGF4LlNoLVMuU05OUy5TTk5TXCBuZXR3b3JrIDpjYWwgU2V0U3luKCJzbm5zbmV0Iik8Q1I+CithbiA1MC4xMDAuMzAwICZTeW50YXguU2gtUy5TTk5TLlNOTlNcIHBhdHRlcm4gOmNhbCBTZXRTeW4oInNubnNwYXQiKTxDUj4KK2FuIDUwLjEwMC4zMTAgJlN5bnRheC5TaC1TLlNOTlMuU05OU1wgcmVzdWx0IDpjYWwgU2V0U3luKCJzbm5zcmVzIik8Q1I+CithbiA1MC4xMDAuMzIwICZTeW50YXguU2gtUy5Tbm9ib2w0IDpjYWwgU2V0U3luKCJzbm9ib2w0Iik8Q1I+CithbiA1MC4xMDAuMzMwICZTeW50YXguU2gtUy5Tbm9ydFwgQ29uZmlndXJhdGlvbiA6Y2FsIFNldFN5bigiaG9nIik8Q1I+CithbiA1MC4xMDAuMzQwICZTeW50YXguU2gtUy5TUEVDXCAoTGludXhcIFJQTSkgOmNhbCBTZXRTeW4oInNwZWMiKTxDUj4KK2FuIDUwLjEwMC4zNTAgJlN5bnRheC5TaC1TLlNwZWNtYW4gOmNhbCBTZXRTeW4oInNwZWNtYW4iKTxDUj4KK2FuIDUwLjEwMC4zNjAgJlN5bnRheC5TaC1TLlNwaWNlIDpjYWwgU2V0U3luKCJzcGljZSIpPENSPgorYW4gNTAuMTAwLjM3MCAmU3ludGF4LlNoLVMuU3B5Y2UgOmNhbCBTZXRTeW4oInNweWNlIik8Q1I+CithbiA1MC4xMDAuMzgwICZTeW50YXguU2gtUy5TcGVlZHVwIDpjYWwgU2V0U3luKCJzcHVwIik8Q1I+CithbiA1MC4xMDAuMzkwICZTeW50YXguU2gtUy5TcGxpbnQgOmNhbCBTZXRTeW4oInNwbGludCIpPENSPgorYW4gNTAuMTAwLjQwMCAmU3ludGF4LlNoLVMuU3F1aWRcIGNvbmZpZyA6Y2FsIFNldFN5bigic3F1aWQiKTxDUj4KK2FuIDUwLjEwMC40MTAgJlN5bnRheC5TaC1TLlNRTC5NeVNRTCA6Y2FsIFNldFN5bigibXlzcWwiKTxDUj4KK2FuIDUwLjEwMC40MjAgJlN5bnRheC5TaC1TLlNRTC5TUUwgOmNhbCBTZXRTeW4oInNxbCIpPENSPgorYW4gNTAuMTAwLjQzMCAmU3ludGF4LlNoLVMuU1FMLlNRTFwgRm9ybXMgOmNhbCBTZXRTeW4oInNxbGZvcm1zIik8Q1I+CithbiA1MC4xMDAuNDQwICZTeW50YXguU2gtUy5TUUwuU1FMSiA6Y2FsIFNldFN5bigic3FsaiIpPENSPgorYW4gNTAuMTAwLjQ1MCAmU3ludGF4LlNoLVMuU1FSIDpjYWwgU2V0U3luKCJzcXIiKTxDUj4KK2FuIDUwLjEwMC40NjAgJlN5bnRheC5TaC1TLlNzaC5zc2hfY29uZmlnIDpjYWwgU2V0U3luKCJzc2hjb25maWciKTxDUj4KK2FuIDUwLjEwMC40NzAgJlN5bnRheC5TaC1TLlNzaC5zc2hkX2NvbmZpZyA6Y2FsIFNldFN5bigic3NoZGNvbmZpZyIpPENSPgorYW4gNTAuMTAwLjQ4MCAmU3ludGF4LlNoLVMuU3RhbmRhcmRcIE1MIDpjYWwgU2V0U3luKCJzbWwiKTxDUj4KK2FuIDUwLjEwMC40OTAgJlN5bnRheC5TaC1TLlN0b3JlZFwgUHJvY2VkdXJlcyA6Y2FsIFNldFN5bigic3RwIik8Q1I+CithbiA1MC4xMDAuNTAwICZTeW50YXguU2gtUy5TdHJhY2UgOmNhbCBTZXRTeW4oInN0cmFjZSIpPENSPgorYW4gNTAuMTAwLjUxMCAmU3ludGF4LlNoLVMuU3VidmVyc2lvblwgY29tbWl0IDpjYWwgU2V0U3luKCJzdm4iKTxDUj4KK2FuIDUwLjExMC4xMDAgJlN5bnRheC5UVVYuVEFEUyA6Y2FsIFNldFN5bigidGFkcyIpPENSPgorYW4gNTAuMTEwLjExMCAmU3ludGF4LlRVVi5UYWdzIDpjYWwgU2V0U3luKCJ0YWdzIik8Q1I+CithbiA1MC4xMTAuMTIwICZTeW50YXguVFVWLlRBSy5UQUtcIGNvbXBhcmUgOmNhbCBTZXRTeW4oInRha2NtcCIpPENSPgorYW4gNTAuMTEwLjEzMCAmU3ludGF4LlRVVi5UQUsuVEFLXCBpbnB1dCA6Y2FsIFNldFN5bigidGFrIik8Q1I+CithbiA1MC4xMTAuMTQwICZTeW50YXguVFVWLlRBSy5UQUtcIG91dHB1dCA6Y2FsIFNldFN5bigidGFrb3V0Iik8Q1I+CithbiA1MC4xMTAuMTUwICZTeW50YXguVFVWLlRjbC9UayA6Y2FsIFNldFN5bigidGNsIik8Q1I+CithbiA1MC4xMTAuMTYwICZTeW50YXguVFVWLlRlYWxJbmZvIDpjYWwgU2V0U3luKCJ0bGkiKTxDUj4KK2FuIDUwLjExMC4xNzAgJlN5bnRheC5UVVYuVGVsaXhcIFNhbHQgOmNhbCBTZXRTeW4oInRzYWx0Iik8Q1I+CithbiA1MC4xMTAuMTgwICZTeW50YXguVFVWLlRlcm1jYXAvUHJpbnRjYXAgOmNhbCBTZXRTeW4oInB0Y2FwIik8Q1I+CithbiA1MC4xMTAuMTkwICZTeW50YXguVFVWLlRlcm1pbmZvIDpjYWwgU2V0U3luKCJ0ZXJtaW5mbyIpPENSPgorYW4gNTAuMTEwLjIwMCAmU3ludGF4LlRVVi5UZVguVGVYIDpjYWwgU2V0U3luKCJ0ZXgiKTxDUj4KK2FuIDUwLjExMC4yMTAgJlN5bnRheC5UVVYuVGVYLlRlWFwgY29uZmlndXJhdGlvbiA6Y2FsIFNldFN5bigidGV4bWYiKTxDUj4KK2FuIDUwLjExMC4yMjAgJlN5bnRheC5UVVYuVGVYLlRleGluZm8gOmNhbCBTZXRTeW4oInRleGluZm8iKTxDUj4KK2FuIDUwLjExMC4yMzAgJlN5bnRheC5UVVYuVEZcIG11ZFwgY2xpZW50IDpjYWwgU2V0U3luKCJ0ZiIpPENSPgorYW4gNTAuMTEwLjI0MCAmU3ludGF4LlRVVi5UaWR5XCBjb25maWd1cmF0aW9uIDpjYWwgU2V0U3luKCJ0aWR5Iik8Q1I+CithbiA1MC4xMTAuMjUwICZTeW50YXguVFVWLlRpbGRlIDpjYWwgU2V0U3luKCJ0aWxkZSIpPENSPgorYW4gNTAuMTEwLjI2MCAmU3ludGF4LlRVVi5UcmFzeXNcIGlucHV0IDpjYWwgU2V0U3luKCJ0cmFzeXMiKTxDUj4KK2FuIDUwLjExMC4yNzAgJlN5bnRheC5UVVYuVFNTLkNvbW1hbmRcIExpbmUgOmNhbCBTZXRTeW4oInRzc2NsIik8Q1I+CithbiA1MC4xMTAuMjgwICZTeW50YXguVFVWLlRTUy5HZW9tZXRyeSA6Y2FsIFNldFN5bigidHNzZ20iKTxDUj4KK2FuIDUwLjExMC4yOTAgJlN5bnRheC5UVVYuVFNTLk9wdGljcyA6Y2FsIFNldFN5bigidHNzb3AiKTxDUj4KK2FuIDUwLjExMC4zMTAgJlN5bnRheC5UVVYuVUlUL1VJTCA6Y2FsIFNldFN5bigidWlsIik8Q1I+CithbiA1MC4xMTAuMzIwICZTeW50YXguVFVWLlVucmVhbFNjcmlwdCA6Y2FsIFNldFN5bigidWMiKTxDUj4KK2FuIDUwLjExMC4zNDAgJlN5bnRheC5UVVYuVmFsZ3JpbmQgOmNhbCBTZXRTeW4oInZhbGdyaW5kIik8Q1I+CithbiA1MC4xMTAuMzUwICZTeW50YXguVFVWLlZlcmlsb2dcIEhETCA6Y2FsIFNldFN5bigidmVyaWxvZyIpPENSPgorYW4gNTAuMTEwLjM2MCAmU3ludGF4LlRVVi5WZ3JpbmRlZnMgOmNhbCBTZXRTeW4oInZncmluZGVmcyIpPENSPgorYW4gNTAuMTEwLjM3MCAmU3ludGF4LlRVVi5WSERMIDpjYWwgU2V0U3luKCJ2aGRsIik8Q1I+CithbiA1MC4xMTAuMzgwICZTeW50YXguVFVWLlZpbS5WaW1cIGhlbHBcIGZpbGUgOmNhbCBTZXRTeW4oImhlbHAiKTxDUj4KK2FuIDUwLjExMC4zOTAgJlN5bnRheC5UVVYuVmltLlZpbVwgc2NyaXB0IDpjYWwgU2V0U3luKCJ2aW0iKTxDUj4KK2FuIDUwLjExMC40MDAgJlN5bnRheC5UVVYuVmltLlZpbWluZm9cIGZpbGUgOmNhbCBTZXRTeW4oInZpbWluZm8iKTxDUj4KK2FuIDUwLjExMC40MTAgJlN5bnRheC5UVVYuVmlyYXRhXCBjb25maWcgOmNhbCBTZXRTeW4oInZpcmF0YSIpPENSPgorYW4gNTAuMTEwLjQyMCAmU3ludGF4LlRVVi5WaXN1YWxcIEJhc2ljIDpjYWwgU2V0U3luKCJ2YiIpPENSPgorYW4gNTAuMTEwLjQzMCAmU3ludGF4LlRVVi5WUk1MIDpjYWwgU2V0U3luKCJ2cm1sIik8Q1I+CithbiA1MC4xMTAuNDQwICZTeW50YXguVFVWLlZTRVwgSkNMIDpjYWwgU2V0U3luKCJ2c2VqY2wiKTxDUj4KK2FuIDUwLjEyMC4xMDAgJlN5bnRheC5XWFlaLldFQi5DV0VCIDpjYWwgU2V0U3luKCJjd2ViIik8Q1I+CithbiA1MC4xMjAuMTEwICZTeW50YXguV1hZWi5XRUIuV0VCIDpjYWwgU2V0U3luKCJ3ZWIiKTxDUj4KK2FuIDUwLjEyMC4xMjAgJlN5bnRheC5XWFlaLldFQi5XRUJcIENoYW5nZXMgOmNhbCBTZXRTeW4oImNoYW5nZSIpPENSPgorYW4gNTAuMTIwLjEzMCAmU3ludGF4LldYWVouV2VibWFjcm8gOmNhbCBTZXRTeW4oIndlYm1hY3JvIik8Q1I+CithbiA1MC4xMjAuMTQwICZTeW50YXguV1hZWi5XZWJzaXRlXCBNZXRhTGFuZ3VhZ2UgOmNhbCBTZXRTeW4oIndtbCIpPENSPgorYW4gNTAuMTIwLjE2MCAmU3ludGF4LldYWVoud0RpZmYgOmNhbCBTZXRTeW4oIndkaWZmIik8Q1I+CithbiA1MC4xMjAuMTgwICZTeW50YXguV1hZWi5XZ2V0XCBjb25maWcgOmNhbCBTZXRTeW4oIndnZXQiKTxDUj4KK2FuIDUwLjEyMC4xOTAgJlN5bnRheC5XWFlaLldoaXRlc3BhY2VcIChhZGQpIDpjYWwgU2V0U3luKCJ3aGl0ZXNwYWNlIik8Q1I+CithbiA1MC4xMjAuMjAwICZTeW50YXguV1hZWi5XaWxkUGFja2V0c1wgRXRoZXJQZWVrXCBEZWNvZGVyIDpjYWwgU2V0U3luKCJkY2QiKTxDUj4KK2FuIDUwLjEyMC4yMTAgJlN5bnRheC5XWFlaLldpbkJhdGNoL1dlYmJhdGNoIDpjYWwgU2V0U3luKCJ3aW5iYXRjaCIpPENSPgorYW4gNTAuMTIwLjIyMCAmU3ludGF4LldYWVouV2luZG93c1wgU2NyaXB0aW5nXCBIb3N0IDpjYWwgU2V0U3luKCJ3c2giKTxDUj4KK2FuIDUwLjEyMC4yMzAgJlN5bnRheC5XWFlaLld2RGlhbCA6Y2FsIFNldFN5bigid3ZkaWFsIik8Q1I+CithbiA1MC4xMjAuMjUwICZTeW50YXguV1hZWi5YXCBLZXlib2FyZFwgRXh0ZW5zaW9uIDpjYWwgU2V0U3luKCJ4a2IiKTxDUj4KK2FuIDUwLjEyMC4yNjAgJlN5bnRheC5XWFlaLlhcIFBpeG1hcCA6Y2FsIFNldFN5bigieHBtIik8Q1I+CithbiA1MC4xMjAuMjcwICZTeW50YXguV1hZWi5YXCBQaXhtYXBcICgyKSA6Y2FsIFNldFN5bigieHBtMiIpPENSPgorYW4gNTAuMTIwLjI4MCAmU3ludGF4LldYWVouWFwgcmVzb3VyY2VzIDpjYWwgU2V0U3luKCJ4ZGVmYXVsdHMiKTxDUj4KK2FuIDUwLjEyMC4yOTAgJlN5bnRheC5XWFlaLlhtb2RtYXAgOmNhbCBTZXRTeW4oInhtb2RtYXAiKTxDUj4KK2FuIDUwLjEyMC4zMDAgJlN5bnRheC5XWFlaLlhtYXRoIDpjYWwgU2V0U3luKCJ4bWF0aCIpPENSPgorYW4gNTAuMTIwLjMxMCAmU3ludGF4LldYWVouWE1MIDpjYWwgU2V0U3luKCJ4bWwiKTxDUj4KK2FuIDUwLjEyMC4zMjAgJlN5bnRheC5XWFlaLlhNTFwgU2NoZW1hXCAoWFNEKSA6Y2FsIFNldFN5bigieHNkIik8Q1I+CithbiA1MC4xMjAuMzMwICZTeW50YXguV1hZWi5Yc2x0IDpjYWwgU2V0U3luKCJ4c2x0Iik8Q1I+CithbiA1MC4xMjAuMzQwICZTeW50YXguV1hZWi5YRnJlZTg2XCBDb25maWcgOmNhbCBTZXRTeW4oInhmODZjb25mIik8Q1I+CithbiA1MC4xMjAuMzYwICZTeW50YXguV1hZWi5ZQU1MIDpjYWwgU2V0U3luKCJ5YW1sIik8Q1I+CithbiA1MC4xMjAuMzcwICZTeW50YXguV1hZWi5ZYWNjIDpjYWwgU2V0U3luKCJ5YWNjIik8Q1I+CisKKyIgVGhlIEVuZCBPZiBUaGUgU3ludGF4IE1lbnUKKworCithbiA1MC4xOTUgJlN5bnRheC4tU0VQMS0JCQk8Tm9wPgorCithbiA8c2lsZW50PiA1MC4yMDAgJlN5bnRheC5TZXRcICcmc3ludGF4J1wgb25seSA6Y2FsbCA8U0lEPlNldHN5bm9ubHkoKTxDUj4KK2Z1biEgczpTZXRzeW5vbmx5KCkKKyAgbGV0IHM6c3ludGF4X21lbnVfc3lub25seSA9IDEKK2VuZGZ1bgorYW4gPHNpbGVudD4gNTAuMjAyICZTeW50YXguU2V0XCAnJmZpbGV0eXBlJ1wgdG9vIDpjYWxsIDxTSUQ+Tm9zeW5vbmx5KCk8Q1I+CitmdW4hIHM6Tm9zeW5vbmx5KCkKKyAgaWYgZXhpc3RzKCJzOnN5bnRheF9tZW51X3N5bm9ubHkiKQorICAgIHVubGV0IHM6c3ludGF4X21lbnVfc3lub25seQorICBlbmRpZgorZW5kZnVuCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4LzJodG1sLnZpbSBiL3J1bnRpbWUvc3ludGF4LzJodG1sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWZjMDlmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvMmh0bWwudmltCkBAIC0wLDAgKzEsNDExIEBACisiIFZpbSBzeW50YXggc3VwcG9ydCBmaWxlCisiIE1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOiAyMDA0IE1heSAzMQorIgkgICAgICAgKG1vZGlmaWVkIGJ5IERhdmlkIE5lXHZ7Y31hcyAoWWV0aSkgPHlldGlAcGh5c2ljcy5tdW5pLmN6PikKKyIJICAgICAgIChYSFRNTCBzdXBwb3J0IGJ5IFBhbmFnaW90aXMgSXNzYXJpcyA8dGFraXNAbHVtdW1iYS5sdWMuYWMuYmU+KQorCisiIFRyYW5zZm9ybSBhIGZpbGUgaW50byBIVE1MLCB1c2luZyB0aGUgY3VycmVudCBzeW50YXggaGlnaGxpZ2h0aW5nLgorCisiIE51bWJlciBsaW5lcyB3aGVuIGV4cGxpY2l0ZWx5IHJlcXVlc3RlZCBvciB3aGVuIGBudW1iZXInIGlzIHNldAoraWYgZXhpc3RzKCJodG1sX251bWJlcl9saW5lcyIpCisgIGxldCBzOm51bWJsaW5lcyA9IGh0bWxfbnVtYmVyX2xpbmVzCitlbHNlCisgIGxldCBzOm51bWJsaW5lcyA9ICZudW1iZXIKK2VuZGlmCisKKyIgV2hlbiBub3QgaW4gZ3VpIHdlIGNhbiBvbmx5IGd1ZXNzIHRoZSBjb2xvcnMuCitpZiBoYXMoImd1aV9ydW5uaW5nIikKKyAgbGV0IHM6d2hhdHRlcm0gPSAiZ3VpIgorZWxzZQorICBsZXQgczp3aGF0dGVybSA9ICJjdGVybSIKKyAgaWYgJnRfQ28gPT0gOAorICAgIGxldCBzOmN0ZXJtX2NvbG9yMCAgPSAiIzgwODA4MCIKKyAgICBsZXQgczpjdGVybV9jb2xvcjEgID0gIiNmZjYwNjAiCisgICAgbGV0IHM6Y3Rlcm1fY29sb3IyICA9ICIjMDBmZjAwIgorICAgIGxldCBzOmN0ZXJtX2NvbG9yMyAgPSAiI2ZmZmYwMCIKKyAgICBsZXQgczpjdGVybV9jb2xvcjQgID0gIiM4MDgwZmYiCisgICAgbGV0IHM6Y3Rlcm1fY29sb3I1ICA9ICIjZmY0MGZmIgorICAgIGxldCBzOmN0ZXJtX2NvbG9yNiAgPSAiIzAwZmZmZiIKKyAgICBsZXQgczpjdGVybV9jb2xvcjcgID0gIiNmZmZmZmYiCisgIGVsc2UKKyAgICBsZXQgczpjdGVybV9jb2xvcjAgID0gIiMwMDAwMDAiCisgICAgbGV0IHM6Y3Rlcm1fY29sb3IxICA9ICIjYzAwMDAwIgorICAgIGxldCBzOmN0ZXJtX2NvbG9yMiAgPSAiIzAwODAwMCIKKyAgICBsZXQgczpjdGVybV9jb2xvcjMgID0gIiM4MDQwMDAiCisgICAgbGV0IHM6Y3Rlcm1fY29sb3I0ICA9ICIjMDAwMGMwIgorICAgIGxldCBzOmN0ZXJtX2NvbG9yNSAgPSAiI2MwMDBjMCIKKyAgICBsZXQgczpjdGVybV9jb2xvcjYgID0gIiMwMDgwODAiCisgICAgbGV0IHM6Y3Rlcm1fY29sb3I3ICA9ICIjYzBjMGMwIgorICAgIGxldCBzOmN0ZXJtX2NvbG9yOCAgPSAiIzgwODA4MCIKKyAgICBsZXQgczpjdGVybV9jb2xvcjkgID0gIiNmZjYwNjAiCisgICAgbGV0IHM6Y3Rlcm1fY29sb3IxMCA9ICIjMDBmZjAwIgorICAgIGxldCBzOmN0ZXJtX2NvbG9yMTEgPSAiI2ZmZmYwMCIKKyAgICBsZXQgczpjdGVybV9jb2xvcjEyID0gIiM4MDgwZmYiCisgICAgbGV0IHM6Y3Rlcm1fY29sb3IxMyA9ICIjZmY0MGZmIgorICAgIGxldCBzOmN0ZXJtX2NvbG9yMTQgPSAiIzAwZmZmZiIKKyAgICBsZXQgczpjdGVybV9jb2xvcjE1ID0gIiNmZmZmZmYiCisgIGVuZGlmCitlbmRpZgorCisiIFJldHVybiBnb29kIGNvbG9yIHNwZWNpZmljYXRpb246IGluIEdVSSBubyB0cmFuc2Zvcm1hdGlvbiBpcyBkb25lLCBpbgorIiB0ZXJtaW5hbCByZXR1cm4gUkdCIHZhbHVlcyBvZiBrbm93biBjb2xvcnMgYW5kIGVtcHR5IHN0cmluZyBvbiB1bmtub3duCitpZiBzOndoYXR0ZXJtID09ICJndWkiCisgIGZ1bmN0aW9uISBzOkh0bWxDb2xvcihjb2xvcikKKyAgICByZXR1cm4gYTpjb2xvcgorICBlbmRmdW4KK2Vsc2UKKyAgZnVuY3Rpb24hIHM6SHRtbENvbG9yKGNvbG9yKQorICAgIGlmIGV4aXN0cygiczpjdGVybV9jb2xvciIgLiBhOmNvbG9yKQorICAgICAgZXhlY3V0ZSAicmV0dXJuIHM6Y3Rlcm1fY29sb3IiIC4gYTpjb2xvcgorICAgIGVsc2UKKyAgICAgIHJldHVybiAiIgorICAgIGVuZGlmCisgIGVuZGZ1bgorZW5kaWYKKworaWYgIWV4aXN0cygiaHRtbF91c2VfY3NzIikKKyAgIiBSZXR1cm4gb3BlbmluZyBIVE1MIHRhZyBmb3IgZ2l2ZW4gaGlnaGxpZ2h0IGlkCisgIGZ1bmN0aW9uISBzOkh0bWxPcGVuaW5nKGlkKQorICAgIGxldCBhID0gIiIKKyAgICBpZiBzeW5JRGF0dHIoYTppZCwgImludmVyc2UiKQorICAgICAgIiBGb3IgaW52ZXJzZSwgd2UgYWx3YXlzIG11c3Qgc2V0IGJvdGggY29sb3JzIChhbmQgZXhjaGFuZ2UgdGhlbSkKKyAgICAgIGxldCB4ID0gczpIdG1sQ29sb3Ioc3luSURhdHRyKGE6aWQsICJmZyMiLCBzOndoYXR0ZXJtKSkKKyAgICAgIGxldCBhID0gYSAuICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogJyAuICggeCAhPSAiIiA/IHggOiBzOmZnYyApIC4gJyI+JworICAgICAgbGV0IHggPSBzOkh0bWxDb2xvcihzeW5JRGF0dHIoYTppZCwgImJnIyIsIHM6d2hhdHRlcm0pKQorICAgICAgbGV0IGEgPSBhIC4gJzxmb250IGNvbG9yPSInIC4gKCB4ICE9ICIiID8geCA6IHM6YmdjICkgLiAnIj4nCisgICAgZWxzZQorICAgICAgbGV0IHggPSBzOkh0bWxDb2xvcihzeW5JRGF0dHIoYTppZCwgImJnIyIsIHM6d2hhdHRlcm0pKQorICAgICAgaWYgeCAhPSAiIiB8IGxldCBhID0gYSAuICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogJyAuIHggLiAnIj4nIHwgZW5kaWYKKyAgICAgIGxldCB4ID0gczpIdG1sQ29sb3Ioc3luSURhdHRyKGE6aWQsICJmZyMiLCBzOndoYXR0ZXJtKSkKKyAgICAgIGlmIHggIT0gIiIgfCBsZXQgYSA9IGEgLiAnPGZvbnQgY29sb3I9IicgLiB4IC4gJyI+JyB8IGVuZGlmCisgICAgZW5kaWYKKyAgICBpZiBzeW5JRGF0dHIoYTppZCwgImJvbGQiKSB8IGxldCBhID0gYSAuICI8Yj4iIHwgZW5kaWYKKyAgICBpZiBzeW5JRGF0dHIoYTppZCwgIml0YWxpYyIpIHwgbGV0IGEgPSBhIC4gIjxpPiIgfCBlbmRpZgorICAgIGlmIHN5bklEYXR0cihhOmlkLCAidW5kZXJsaW5lIikgfCBsZXQgYSA9IGEgLiAiPHU+IiB8IGVuZGlmCisgICAgcmV0dXJuIGEKKyAgZW5kZnVuCisKKyAgIiBSZXR1cm4gY2xvc2luZyBIVE1MIHRhZyBmb3IgZ2l2ZW4gaGlnaGxpZ2h0IGlkCisgIGZ1bmN0aW9uIHM6SHRtbENsb3NpbmcoaWQpCisgICAgbGV0IGEgPSAiIgorICAgIGlmIHN5bklEYXR0cihhOmlkLCAidW5kZXJsaW5lIikgfCBsZXQgYSA9IGEgLiAiPC91PiIgfCBlbmRpZgorICAgIGlmIHN5bklEYXR0cihhOmlkLCAiaXRhbGljIikgfCBsZXQgYSA9IGEgLiAiPC9pPiIgfCBlbmRpZgorICAgIGlmIHN5bklEYXR0cihhOmlkLCAiYm9sZCIpIHwgbGV0IGEgPSBhIC4gIjwvYj4iIHwgZW5kaWYKKyAgICBpZiBzeW5JRGF0dHIoYTppZCwgImludmVyc2UiKQorICAgICAgbGV0IGEgPSBhIC4gJzwvZm9udD48L3NwYW4+JworICAgIGVsc2UKKyAgICAgIGxldCB4ID0gczpIdG1sQ29sb3Ioc3luSURhdHRyKGE6aWQsICJmZyMiLCBzOndoYXR0ZXJtKSkKKyAgICAgIGlmIHggIT0gIiIgfCBsZXQgYSA9IGEgLiAnPC9mb250PicgfCBlbmRpZgorICAgICAgbGV0IHggPSBzOkh0bWxDb2xvcihzeW5JRGF0dHIoYTppZCwgImJnIyIsIHM6d2hhdHRlcm0pKQorICAgICAgaWYgeCAhPSAiIiB8IGxldCBhID0gYSAuICc8L3NwYW4+JyB8IGVuZGlmCisgICAgZW5kaWYKKyAgICByZXR1cm4gYQorICBlbmRmdW4KK2VuZGlmCisKKyIgUmV0dXJuIENTUyBzdHlsZSBkZXNjcmliaW5nIGdpdmVuIGhpZ2hsaWdodCBpZCAoY2FuIGJlIGVtcHR5KQorZnVuY3Rpb24hIHM6Q1NTMShpZCkKKyAgbGV0IGEgPSAiIgorICBpZiBzeW5JRGF0dHIoYTppZCwgImludmVyc2UiKQorICAgICIgRm9yIGludmVyc2UsIHdlIGFsd2F5cyBtdXN0IHNldCBib3RoIGNvbG9ycyAoYW5kIGV4Y2hhbmdlIHRoZW0pCisgICAgbGV0IHggPSBzOkh0bWxDb2xvcihzeW5JRGF0dHIoYTppZCwgImJnIyIsIHM6d2hhdHRlcm0pKQorICAgIGxldCBhID0gYSAuICJjb2xvcjogIiAuICggeCAhPSAiIiA/IHggOiBzOmJnYyApIC4gIjsgIgorICAgIGxldCB4ID0gczpIdG1sQ29sb3Ioc3luSURhdHRyKGE6aWQsICJmZyMiLCBzOndoYXR0ZXJtKSkKKyAgICBsZXQgYSA9IGEgLiAiYmFja2dyb3VuZC1jb2xvcjogIiAuICggeCAhPSAiIiA/IHggOiBzOmZnYyApIC4gIjsgIgorICBlbHNlCisgICAgbGV0IHggPSBzOkh0bWxDb2xvcihzeW5JRGF0dHIoYTppZCwgImZnIyIsIHM6d2hhdHRlcm0pKQorICAgIGlmIHggIT0gIiIgfCBsZXQgYSA9IGEgLiAiY29sb3I6ICIgLiB4IC4gIjsgIiB8IGVuZGlmCisgICAgbGV0IHggPSBzOkh0bWxDb2xvcihzeW5JRGF0dHIoYTppZCwgImJnIyIsIHM6d2hhdHRlcm0pKQorICAgIGlmIHggIT0gIiIgfCBsZXQgYSA9IGEgLiAiYmFja2dyb3VuZC1jb2xvcjogIiAuIHggLiAiOyAiIHwgZW5kaWYKKyAgZW5kaWYKKyAgaWYgc3luSURhdHRyKGE6aWQsICJib2xkIikgfCBsZXQgYSA9IGEgLiAiZm9udC13ZWlnaHQ6IGJvbGQ7ICIgfCBlbmRpZgorICBpZiBzeW5JRGF0dHIoYTppZCwgIml0YWxpYyIpIHwgbGV0IGEgPSBhIC4gImZvbnQtc3R5bGU6IGl0YWxpYzsgIiB8IGVuZGlmCisgIGlmIHN5bklEYXR0cihhOmlkLCAidW5kZXJsaW5lIikgfCBsZXQgYSA9IGEgLiAidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7ICIgfCBlbmRpZgorICByZXR1cm4gYQorZW5kZnVuCisKKyIgRmlndXJlIG91dCBwcm9wZXIgTUlNRSBjaGFyc2V0IGZyb20gdGhlICdlbmNvZGluZycgb3B0aW9uLgoraWYgZXhpc3RzKCJodG1sX3VzZV9lbmNvZGluZyIpCisgIGxldCBzOmh0bWxfZW5jb2RpbmcgPSBodG1sX3VzZV9lbmNvZGluZworZWxzZQorICBsZXQgczp2aW1fZW5jb2RpbmcgPSAmZW5jb2RpbmcKKyAgaWYgczp2aW1fZW5jb2RpbmcgPX4gJ144Yml0XHxeMmJ5dGUnCisgICAgbGV0IHM6dmltX2VuY29kaW5nID0gc3Vic3RpdHV0ZShzOnZpbV9lbmNvZGluZywgJ144Yml0LVx8XjJieXRlLScsICcnLCAnJykKKyAgZW5kaWYKKyAgaWYgczp2aW1fZW5jb2RpbmcgPT0gJ2xhdGluMScKKyAgICBsZXQgczpodG1sX2VuY29kaW5nID0gJ2lzby04ODU5LTEnCisgIGVsc2VpZiBzOnZpbV9lbmNvZGluZyA9fiAiXmNwMTIiCisgICAgbGV0IHM6aHRtbF9lbmNvZGluZyA9IHN1YnN0aXR1dGUoczp2aW1fZW5jb2RpbmcsICdjcCcsICd3aW5kb3dzLScsICcnKQorICBlbHNlaWYgczp2aW1fZW5jb2RpbmcgPT0gJ3NqaXMnCisgICAgbGV0IHM6aHRtbF9lbmNvZGluZyA9ICdTaGlmdF9KSVMnCisgIGVsc2VpZiBzOnZpbV9lbmNvZGluZyA9PSAnZXVjLWNuJworICAgIGxldCBzOmh0bWxfZW5jb2RpbmcgPSAnR0JfMjMxMi04MCcKKyAgZWxzZWlmIHM6dmltX2VuY29kaW5nID09ICdldWMtdHcnCisgICAgbGV0IHM6aHRtbF9lbmNvZGluZyA9ICIiCisgIGVsc2VpZiBzOnZpbV9lbmNvZGluZyA9fiAnXmV1Y1x8Xmlzb1x8XmtvaScKKyAgICBsZXQgczpodG1sX2VuY29kaW5nID0gc3Vic3RpdHV0ZShzOnZpbV9lbmNvZGluZywgJy4qJywgJ1xVXDAnLCAnJykKKyAgZWxzZWlmIHM6dmltX2VuY29kaW5nID09ICdjcDk0OScKKyAgICBsZXQgczpodG1sX2VuY29kaW5nID0gJ0tTX0NfNTYwMS0xOTg3JworICBlbHNlaWYgczp2aW1fZW5jb2RpbmcgPT0gJ2NwOTM2JworICAgIGxldCBzOmh0bWxfZW5jb2RpbmcgPSAnR0JLJworICBlbHNlaWYgczp2aW1fZW5jb2RpbmcgPX4gJ151Y3NcfF51dGYnCisgICAgbGV0IHM6aHRtbF9lbmNvZGluZyA9ICdVVEYtOCcKKyAgZWxzZQorICAgIGxldCBzOmh0bWxfZW5jb2RpbmcgPSAiIgorICBlbmRpZgorZW5kaWYKKworCisiIFNldCBzb21lIG9wdGlvbnMgdG8gbWFrZSBpdCB3b3JrIGZhc3Rlci4KKyIgRXhwYW5kIHRhYnMgaW4gb3JpZ2luYWwgYnVmZmVyIHRvIGdldCAndGFic3RvcCcgY29ycmVjdGx5IHVzZWQuCisiIERvbid0IHJlcG9ydCBjaGFuZ2VzIGZvciA6c3Vic3RpdHV0ZSwgdGhlcmUgd2lsbCBiZSBtYW55IG9mIHRoZW0uCitsZXQgczpvbGRfdGl0bGUgPSAmdGl0bGUKK2xldCBzOm9sZF9pY29uID0gJmljb24KK2xldCBzOm9sZF9ldCA9ICZsOmV0CitsZXQgczpvbGRfcmVwb3J0ID0gJnJlcG9ydAorbGV0IHM6b2xkX3NlYXJjaCA9IEAvCitzZXQgbm90aXRsZSBub2ljb24KK3NldGxvY2FsIGV0CitzZXQgcmVwb3J0PTEwMDAwMDAKKworIiBTcGxpdCB3aW5kb3cgdG8gY3JlYXRlIGEgYnVmZmVyIHdpdGggdGhlIEhUTUwgZmlsZS4KK2xldCBzOm9yZ2J1Zm5yID0gd2luYnVmbnIoMCkKK2lmIGV4cGFuZCgiJSIpID09ICIiCisgIG5ldyBVbnRpdGxlZC5odG1sCitlbHNlCisgIG5ldyAlLmh0bWwKK2VuZGlmCitsZXQgczpuZXd3aW4gPSB3aW5ucigpCitsZXQgczpvcmd3aW4gPSBidWZ3aW5ucihzOm9yZ2J1Zm5yKQorCitzZXQgbW9kaWZpYWJsZQorJWQKK2xldCBzOm9sZF9wYXN0ZSA9ICZwYXN0ZQorc2V0IHBhc3RlCitsZXQgczpvbGRfbWFnaWMgPSAmbWFnaWMKK3NldCBtYWdpYworCitpZiBleGlzdHMoInVzZV94aHRtbCIpCisgIGV4ZSAibm9ybWFsISBhPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cblxlIgorICBsZXQgdGFnX2Nsb3NlID0gJy8+JworZWxzZQorICBsZXQgdGFnX2Nsb3NlID0gJz4nCitlbmRpZgorCisiIEhUTUwgaGVhZGVyLCB3aXRoIHRoZSB0aXRsZSBhbmQgZ2VuZXJhdG9yIDstKS4gTGVmdCBmcmVlIHNwYWNlIGZvciB0aGUgQ1NTLAorIiB0byBiZSBmaWxsZWQgYXQgdGhlIGVuZC4KK2V4ZSAibm9ybWFsISBhPGh0bWw+XG48aGVhZD5cbjx0aXRsZT5cZSIKK2V4ZSAibm9ybWFsISBhIiAuIGV4cGFuZCgiJTpwOn4iKSAuICI8L3RpdGxlPlxuXGUiCitleGUgIm5vcm1hbCEgYTxtZXRhIG5hbWU9XCJHZW5lcmF0b3JcIiBjb250ZW50PVwiVmltLyIgLiB2OnZlcnNpb24vMTAwIC4gIi4iIC4gdjp2ZXJzaW9uICUxMDAgLiAnIicgLiB0YWdfY2xvc2UgLiAiXG5cZSIKK2lmIHM6aHRtbF9lbmNvZGluZyAhPSAiIgorICBleGUgIm5vcm1hbCEgYTxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PSIgLiBzOmh0bWxfZW5jb2RpbmcgLiAnIicgLiB0YWdfY2xvc2UgLiAiXG5cZSIKK2VuZGlmCitpZiBleGlzdHMoImh0bWxfdXNlX2NzcyIpCisgIGV4ZSAibm9ybWFsISBhPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuPCEtLVxuLS0+XG48L3N0eWxlPlxuXGUiCitlbmRpZgoraWYgZXhpc3RzKCJodG1sX25vX3ByZSIpCisgIGV4ZSAibm9ybWFsISBhPC9oZWFkPlxuPGJvZHk+XG5cZSIKK2Vsc2UKKyAgZXhlICJub3JtYWwhIGE8L2hlYWQ+XG48Ym9keT5cbjxwcmU+XG5cZSIKK2VuZGlmCisKK2V4ZSBzOm9yZ3dpbiAuICJ3aW5jbWQgdyIKKworIiBMaXN0IG9mIGFsbCBpZCdzCitsZXQgczppZGxpc3QgPSAiLCIKKworbGV0IHM6ZXhwYW5kZWR0YWIgPSAnICcKK3doaWxlIHN0cmxlbihzOmV4cGFuZGVkdGFiKSA8ICZ0cworICBsZXQgczpleHBhbmRlZHRhYiA9IHM6ZXhwYW5kZWR0YWIgLiAnICcKK2VuZHdoaWxlCisKKyIgTG9vcCBvdmVyIGFsbCBsaW5lcyBpbiB0aGUgb3JpZ2luYWwgdGV4dC4KKyIgVXNlIGh0bWxfc3RhcnRfbGluZSBhbmQgaHRtbF9lbmRfbGluZSBpZiB0aGV5IGFyZSBzZXQuCitpZiBleGlzdHMoImh0bWxfc3RhcnRfbGluZSIpCisgIGxldCBzOmxudW0gPSBodG1sX3N0YXJ0X2xpbmUKKyAgaWYgczpsbnVtIDwgMSB8fCBzOmxudW0gPiBsaW5lKCIkIikKKyAgICBsZXQgczpsbnVtID0gMQorICBlbmRpZgorZWxzZQorICBsZXQgczpsbnVtID0gMQorZW5kaWYKK2lmIGV4aXN0cygiaHRtbF9lbmRfbGluZSIpCisgIGxldCBzOmVuZCA9IGh0bWxfZW5kX2xpbmUKKyAgaWYgczplbmQgPCBzOmxudW0gfHwgczplbmQgPiBsaW5lKCIkIikKKyAgICBsZXQgczplbmQgPSBsaW5lKCIkIikKKyAgZW5kaWYKK2Vsc2UKKyAgbGV0IHM6ZW5kID0gbGluZSgiJCIpCitlbmRpZgorCit3aGlsZSBzOmxudW0gPD0gczplbmQKKworICAiIEdldCB0aGUgY3VycmVudCBsaW5lCisgIGxldCBzOmxpbmUgPSBnZXRsaW5lKHM6bG51bSkKKyAgbGV0IHM6bGVuID0gc3RybGVuKHM6bGluZSkKKyAgbGV0IHM6bmV3ID0gIiIKKworICBpZiBzOm51bWJsaW5lcworICAgIGxldCBzOm5ldyA9ICc8c3BhbiBjbGFzcz0ibG5yIj4nIC4gc3RycGFydCgnICAgICAgICAnLCAwLCBzdHJsZW4obGluZSgiJCIpKSAtIHN0cmxlbihzOmxudW0pKSAuIHM6bG51bSAuICc8L3NwYW4+ICAnCisgIGVuZGlmCisKKyAgIiBMb29wIG92ZXIgZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUKKyAgbGV0IHM6Y29sID0gMQorICB3aGlsZSBzOmNvbCA8PSBzOmxlbgorICAgIGxldCBzOnN0YXJ0Y29sID0gczpjb2wgIiBUaGUgc3RhcnQgY29sdW1uIGZvciBwcm9jZXNzaW5nIHRleHQKKyAgICBsZXQgczppZCA9IHN5bklEKHM6bG51bSwgczpjb2wsIDEpCisgICAgbGV0IHM6Y29sID0gczpjb2wgKyAxCisgICAgIiBTcGVlZCBsb29wIChpdCdzIHNtYWxsIC0gdGhhdCdzIHRoZSB0cmljaykKKyAgICAiIEdvIGFsb25nIHRpbGwgd2UgZmluZCBhIGNoYW5nZSBpbiBzeW5JRAorICAgIHdoaWxlIHM6Y29sIDw9IHM6bGVuICYmIHM6aWQgPT0gc3luSUQoczpsbnVtLCBzOmNvbCwgMSkgfCBsZXQgczpjb2wgPSBzOmNvbCArIDEgfCBlbmR3aGlsZQorCisgICAgIiBPdXRwdXQgdGhlIHRleHQgd2l0aCB0aGUgc2FtZSBzeW5JRCwgd2l0aCBjbGFzcyBzZXQgdG8ge3M6aWRfbmFtZX0KKyAgICBsZXQgczppZCA9IHN5bklEdHJhbnMoczppZCkKKyAgICBsZXQgczppZF9uYW1lID0gc3luSURhdHRyKHM6aWQsICJuYW1lIiwgczp3aGF0dGVybSkKKyAgICBsZXQgczpuZXcgPSBzOm5ldyAuICc8c3BhbiBjbGFzcz0iJyAuIHM6aWRfbmFtZSAuICciPicgLiBzdWJzdGl0dXRlKHN1YnN0aXR1dGUoc3Vic3RpdHV0ZShzdWJzdGl0dXRlKHN1YnN0aXR1dGUoc3RycGFydChzOmxpbmUsIHM6c3RhcnRjb2wgLSAxLCBzOmNvbCAtIHM6c3RhcnRjb2wpLCAnJicsICdcJmFtcDsnLCAnZycpLCAnPCcsICdcJmx0OycsICdnJyksICc+JywgJ1wmZ3Q7JywgJ2cnKSwgJyInLCAnXCZxdW90OycsICdnJyksICJceDBjIiwgJzxociBjbGFzcz0iUEFHRS1CUkVBSyI+JywgJ2cnKSAuICc8L3NwYW4+JworICAgICIgQWRkIHRoZSBjbGFzcyB0byBjbGFzcyBsaXN0IGlmIGl0J3Mgbm90IHRoZXJlIHlldAorICAgIGlmIHN0cmlkeChzOmlkbGlzdCwgIiwiIC4gczppZCAuICIsIikgPT0gLTEKKyAgICAgIGxldCBzOmlkbGlzdCA9IHM6aWRsaXN0IC4gczppZCAuICIsIgorICAgIGVuZGlmCisKKyAgICBpZiBzOmNvbCA+IHM6bGVuCisgICAgICBicmVhaworICAgIGVuZGlmCisgIGVuZHdoaWxlCisKKyAgIiBFeHBhbmQgdGFicworICBsZXQgczpwYWQ9MAorICBsZXQgczpzdGFydCA9IDAKKyAgbGV0IHM6aWR4ID0gc3RyaWR4KHM6bGluZSwgIlx0IikKKyAgd2hpbGUgczppZHggPj0gMAorICAgIGxldCBzOmkgPSAmdHMgLSAoKHM6c3RhcnQgKyBzOnBhZCArIHM6aWR4KSAlICZ0cykKKyAgICBsZXQgczpuZXcgPSBzdWJzdGl0dXRlKHM6bmV3LCAnXHQnLCBzdHJwYXJ0KHM6ZXhwYW5kZWR0YWIsIDAsIHM6aSksICcnKQorICAgIGxldCBzOnBhZCA9IHM6cGFkICsgczppIC0gMQorICAgIGxldCBzOnN0YXJ0ID0gczpzdGFydCArIHM6aWR4ICsgMQorICAgIGxldCBzOmlkeCA9IHN0cmlkeChzdHJwYXJ0KHM6bGluZSwgczpzdGFydCksICJcdCIpCisgIGVuZHdoaWxlCisKKyAgaWYgZXhpc3RzKCJodG1sX25vX3ByZSIpCisgICAgaWYgZXhpc3RzKCJ1c2VfeGh0bWwiKQorICAgICAgbGV0IHM6bmV3ID0gc3Vic3RpdHV0ZShzOm5ldywgJyAgJywgJ1wmI3gyMDtcJiN4MjA7JywgJ2cnKSAuICc8YnIvPicKKyAgICBlbHNlCisgICAgICBsZXQgczpuZXcgPSBzdWJzdGl0dXRlKHM6bmV3LCAnICAnLCAnXCZuYnNwO1wmbmJzcDsnLCAnZycpIC4gJzxicj4nCisgICAgZW5kaWYKKyAgZW5kaWYKKyAgZXhlIHM6bmV3d2luIC4gIndpbmNtZCB3IgorICBleGUgIm5vcm1hbCEgYSIgLiBzdHJ0cmFucyhzOm5ldykgLiAiXG5cZSIKKyAgZXhlIHM6b3Jnd2luIC4gIndpbmNtZCB3IgorICBsZXQgczpsbnVtID0gczpsbnVtICsgMQorICArCitlbmR3aGlsZQorIiBGaW5pc2ggd2l0aCB0aGUgbGFzdCBsaW5lCitleGUgczpuZXd3aW4gLiAid2luY21kIHciCitpZiBleGlzdHMoImh0bWxfbm9fcHJlIikKKyAgZXhlICJub3JtYWwhIGFcbjwvYm9keT5cbjwvaHRtbD5cZSIKK2Vsc2UKKyAgZXhlICJub3JtYWwhIGE8L3ByZT5cbjwvYm9keT5cbjwvaHRtbD5cZSIKK2VuZGlmCisKKworIiBOb3csIHdoZW4gd2UgZmluYWxseSBrbm93IHdoaWNoLCB3ZSBkZWZpbmUgdGhlIGNvbG9ycyBhbmQgc3R5bGVzCitpZiBleGlzdHMoImh0bWxfdXNlX2NzcyIpCisgIDE7LzxzdHlsZSB0eXBlPSJ0ZXh0LysxCitlbmRpZgorCisiIEZpbmQgb3V0IHRoZSBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIGNvbG9yLgorbGV0IHM6ZmdjID0gczpIdG1sQ29sb3Ioc3luSURhdHRyKGhsSUQoIk5vcm1hbCIpLCAiZmcjIiwgczp3aGF0dGVybSkpCitsZXQgczpiZ2MgPSBzOkh0bWxDb2xvcihzeW5JRGF0dHIoaGxJRCgiTm9ybWFsIiksICJiZyMiLCBzOndoYXR0ZXJtKSkKK2lmIHM6ZmdjID09ICIiCisgIGxldCBzOmZnYyA9ICggJmJhY2tncm91bmQgPT0gImRhcmsiID8gIiNmZmZmZmYiIDogIiMwMDAwMDAiICkKK2VuZGlmCitpZiBzOmJnYyA9PSAiIgorICBsZXQgczpiZ2MgPSAoICZiYWNrZ3JvdW5kID09ICJkYXJrIiA/ICIjMDAwMDAwIiA6ICIjZmZmZmZmIiApCitlbmRpZgorCisiIE5vcm1hbC9nbG9iYWwgYXR0cmlidXRlcworIiBGb3IgTmV0c2NhcGUgNCwgc2V0IDxib2R5PiBhdHRyaWJ1dGVzIHRvbywgdGhvdWdoLCBzdHJpY3RseSBzcGVha2luZywgaXQncworIiBpbmNvcnJlY3QuCitpZiBleGlzdHMoImh0bWxfdXNlX2NzcyIpCisgIGlmIGV4aXN0cygiaHRtbF9ub19wcmUiKQorICAgIGV4ZWN1dGUgIm5vcm1hbCEgQVxuYm9keSB7IGNvbG9yOiAiIC4gczpmZ2MgLiAiOyBiYWNrZ3JvdW5kLWNvbG9yOiAiIC4gczpiZ2MgLiAiOyBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOyB9XGUiCisgIGVsc2UKKyAgICBleGVjdXRlICJub3JtYWwhIEFcbnByZSB7IGNvbG9yOiAiIC4gczpmZ2MgLiAiOyBiYWNrZ3JvdW5kLWNvbG9yOiAiIC4gczpiZ2MgLiAiOyB9XGUiCisgICAgeWFuaworICAgIHB1dAorICAgIGV4ZWN1dGUgIm5vcm1hbCEgXmN3Ym9keVxlIgorICBlbmRpZgorZWxzZQorICBpZiBleGlzdHMoImh0bWxfbm9fcHJlIikKKyAgICBleGVjdXRlICclczo8Ym9keT46PGJvZHkgJyAuICdiZ2NvbG9yPSInIC4gczpiZ2MgLiAnIiB0ZXh0PSInIC4gczpmZ2MgLiAnIiBzdHlsZT0iZm9udC1mYW1pbHlcOiBDb3VyaWVyLCBtb25vc3BhY2U7Ij4nCisgIGVsc2UKKyAgICBleGVjdXRlICclczo8Ym9keT46PGJvZHkgJyAuICdiZ2NvbG9yPSInIC4gczpiZ2MgLiAnIiB0ZXh0PSInIC4gczpmZ2MgLiAnIj4nCisgIGVuZGlmCitlbmRpZgorCisiIExpbmUgbnVtYmVyaW5nIGF0dHJpYnV0ZXMKK2lmIHM6bnVtYmxpbmVzCisgIGlmIGV4aXN0cygiaHRtbF91c2VfY3NzIikKKyAgICBleGVjdXRlICJub3JtYWwhIEFcbi5sbnIgeyAiIC4gczpDU1MxKGhsSUQoIkxpbmVOciIpKSAuICJ9XGUiCisgIGVsc2UKKyAgICBleGVjdXRlICclcys8c3BhbiBjbGFzcz0ibG5yIj5cKFtePF0qXCk8L3NwYW4+KycgLiBzOkh0bWxPcGVuaW5nKGhsSUQoIkxpbmVOciIpKSAuICdcMScgLiBzOkh0bWxDbG9zaW5nKGhsSUQoIkxpbmVOciIpKSAuICcrZycKKyAgZW5kaWYKK2VuZGlmCisKKyIgR2F0aGVyIGF0dHJpYnV0ZXMgZm9yIGFsbCBvdGhlciBjbGFzc2VzCitsZXQgczppZGxpc3QgPSBzdHJwYXJ0KHM6aWRsaXN0LCAxKQord2hpbGUgczppZGxpc3QgIT0gIiIKKyAgbGV0IHM6YXR0ciA9ICIiCisgIGxldCBzOmNvbCA9IHN0cmlkeChzOmlkbGlzdCwgIiwiKQorICBsZXQgczppZCA9IHN0cnBhcnQoczppZGxpc3QsIDAsIHM6Y29sKQorICBsZXQgczppZGxpc3QgPSBzdHJwYXJ0KHM6aWRsaXN0LCBzOmNvbCArIDEpCisgIGxldCBzOmF0dHIgPSBzOkNTUzEoczppZCkKKyAgbGV0IHM6aWRfbmFtZSA9IHN5bklEYXR0cihzOmlkLCAibmFtZSIsIHM6d2hhdHRlcm0pCisgICIgSWYgdGhlIGNsYXNzIGhhcyBzb21lIGF0dHJpYnV0ZXMsIGV4cG9ydCB0aGUgc3R5bGUsIG90aGVyd2lzZSBERUxFVEUgYWxsCisgICIgaXRzIG9jY3VyZW5jZXMgdG8gbWFrZSB0aGUgSFRNTCBzaG9ydGVyCisgIGlmIHM6YXR0ciAhPSAiIgorICAgIGlmIGV4aXN0cygiaHRtbF91c2VfY3NzIikKKyAgICAgIGV4ZWN1dGUgIm5vcm1hbCEgQVxuLiIgLiBzOmlkX25hbWUgLiAiIHsgIiAuIHM6YXR0ciAuICJ9IgorICAgIGVsc2UKKyAgICAgIGV4ZWN1dGUgJyVzKzxzcGFuIGNsYXNzPSInIC4gczppZF9uYW1lIC4gJyI+XChbXjxdKlwpPC9zcGFuPisnIC4gczpIdG1sT3BlbmluZyhzOmlkKSAuICdcMScgLiBzOkh0bWxDbG9zaW5nKHM6aWQpIC4gJytnJworICAgIGVuZGlmCisgIGVsc2UKKyAgICBleGVjdXRlICclcys8c3BhbiBjbGFzcz0iJyAuIHM6aWRfbmFtZSAuICciPlwoW148XSpcKTwvc3Bhbj4rXDErZycKKyAgICBpZiBleGlzdHMoImh0bWxfdXNlX2NzcyIpCisgICAgICAxOy88c3R5bGUgdHlwZT0idGV4dC8rMQorICAgIGVuZGlmCisgIGVuZGlmCitlbmR3aGlsZQorCisiIEFkZCBoeXBlcmxpbmtzCislcytcKGh0dHA6Ly9cU1x7LX1cKVwoXChbLiw7On1dXD1cKFxzXHwkXClcKVx8W1xcIic8Pl1cfCZndDtcfCZsdDtcKSs8QSBIUkVGPSJcMSI+XDE8L0E+XDIrZ2UKKworIiBUaGUgRFRECitpZiBleGlzdHMoImh0bWxfdXNlX2NzcyIpCisgIGV4ZSAibm9ybWFsISBnZzBpPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTlwiIFwiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZFwiPlxuXGUiCitlbmRpZgorCisiIENsZWFudXAKKyVzOlxzXCskOjplCisKKyIgUmVzdG9yZSBvbGQgc2V0dGluZ3MKK2xldCAmcmVwb3J0ID0gczpvbGRfcmVwb3J0CitsZXQgJnRpdGxlID0gczpvbGRfdGl0bGUKK2xldCAmaWNvbiA9IHM6b2xkX2ljb24KK2xldCAmcGFzdGUgPSBzOm9sZF9wYXN0ZQorbGV0ICZtYWdpYyA9IHM6b2xkX21hZ2ljCitsZXQgQC8gPSBzOm9sZF9zZWFyY2gKK2V4ZSBzOm9yZ3dpbiAuICJ3aW5jbWQgdyIKK2xldCAmbDpldCA9IHM6b2xkX2V0CitleGUgczpuZXd3aW4gLiAid2luY21kIHciCisKKyIgU2F2ZSBhIGxpdHRsZSBiaXQgb2YgbWVtb3J5ICh3b3J0aCBkb2luZz8pCit1bmxldCBzOm9sZF9ldCBzOm9sZF9wYXN0ZSBzOm9sZF9pY29uIHM6b2xkX3JlcG9ydCBzOm9sZF90aXRsZSBzOm9sZF9zZWFyY2gKK3VubGV0IHM6d2hhdHRlcm0gczppZGxpc3QgczpsbnVtIHM6ZW5kIHM6ZmdjIHM6YmdjIHM6b2xkX21hZ2ljCit1bmxldCEgczpjb2wgczppZCBzOmF0dHIgczpsZW4gczpsaW5lIHM6bmV3IHM6ZGlkX3JldGFiIHM6bnVtYmxpbmVzCit1bmxldCBzOm9yZ3dpbiBzOm5ld3dpbiBzOm9yZ2J1Zm5yCitkZWxmdW5jIHM6SHRtbENvbG9yCitkZWxmdW5jIHM6Q1NTMQoraWYgIWV4aXN0cygiaHRtbF91c2VfY3NzIikKKyAgZGVsZnVuYyBzOkh0bWxPcGVuaW5nCisgIGRlbGZ1bmMgczpIdG1sQ2xvc2luZworZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L1JFQURNRS50eHQgYi9ydW50aW1lL3N5bnRheC9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OGJkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9SRUFETUUudHh0CkBAIC0wLDAgKzEsMzggQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIFZpbSBzY3JpcHRzIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nLgorCitUaGVzZSBzY3JpcHRzIGFyZSBub3QgZm9yIGEgbGFuZ3VhZ2UsIGJ1dCBhcmUgdXNlZCBieSBWaW0gaXRzZWxmOgorCitzeW50YXgudmltCVVzZWQgZm9yIHRoZSAiOnN5bnRheCBvbiIgY29tbWFuZC4gIFVzZXMgc3lubG9hZC52aW0uCisKK21hbnVhbC52aW0JVXNlZCBmb3IgdGhlICI6c3ludGF4IG1hbnVhbCIgY29tbWFuZC4gIFVzZXMgc3lubG9hZC52aW0uCisKK3N5bmxvYWQudmltCUNvbnRhaW5zIGF1dG9jb21tYW5kcyB0byBsb2FkIGEgbGFuZ3VhZ2UgZmlsZSB3aGVuIGEgY2VydGFpbgorCQlmaWxlIG5hbWUgKGV4dGVuc2lvbikgaXMgdXNlZC4gIEFuZCBzZXRzIHVwIHRoZSBTeW50YXggbWVudQorCQlmb3IgdGhlIEdVSS4KKworbm9zeW50YXgudmltCVVzZWQgZm9yIHRoZSAiOnN5bnRheCBvZmYiIGNvbW1hbmQuICBVbmRvIHRoZSBsb2FkaW5nIG9mCisJCXN5bmxvYWQudmltLgorCisKK0EgZmV3IHNwZWNpYWwgZmlsZXM6CisKKzJodG1sLnZpbQlDb252ZXJ0cyBhbnkgaGlnaGxpZ2h0ZWQgZmlsZSB0byBIVE1MIChHVUkgb25seSkuCitjb2xvcnRlc3QudmltCUNoZWNrIGZvciBjb2xvciBuYW1lcyBhbmQgYWN0dWFsIGNvbG9yIG9uIHNjcmVlbi4KK2hpdGVzdC52aW0JVmlldyB0aGUgY3VycmVudCBoaWdobGlnaHQgc2V0dGluZ3MuCit3aGl0ZXNwYWNlLnZpbSAgVmlldyBUYWJzIGFuZCBTcGFjZXMuCisKKworSWYgeW91IHdhbnQgdG8gd3JpdGUgYSBzeW50YXggZmlsZSwgcmVhZCB0aGUgZG9jcyBhdCAiOmhlbHAgdXNyXzQ0LnR4dCIuCisKK0lmIHlvdSBtYWtlIGEgbmV3IHN5bnRheCBmaWxlIHdoaWNoIHdvdWxkIGJlIHVzZWZ1bCBmb3Igb3RoZXJzLCBwbGVhc2Ugc2VuZCBpdAordG8gQnJhbUB2aW0ub3JnLiAgSW5jbHVkZSBpbnN0cnVjdGlvbnMgZm9yIGRldGVjdGluZyB0aGUgZmlsZSB0eXBlIGZvciB0aGlzCitsYW5ndWFnZSwgYnkgZmlsZSBuYW1lIGV4dGVuc2lvbiBvciBieSBjaGVja2luZyBhIGZldyBsaW5lcyBpbiB0aGUgZmlsZS4KK0FuZCBwbGVhc2Ugd3JpdGUgdGhlIGZpbGUgaW4gYSBwb3J0YWJsZSB3YXksIHNlZSAiOmhlbHAgNDQuMTIiLgorCitJZiB5b3UgaGF2ZSByZW1hcmtzIGFib3V0IGFuIGV4aXN0aW5nIGZpbGUsIHNlbmQgdGhlbSB0byB0aGUgbWFpbnRhaW5lciBvZgordGhhdCBmaWxlLiAgT25seSB3aGVuIHlvdSBnZXQgbm8gcmVzcG9uc2Ugc2VuZCBhIG1lc3NhZ2UgdG8gQnJhbUB2aW0ub3JnLgorCitJZiB5b3UgYXJlIHRoZSBtYWludGFpbmVyIG9mIGEgc3ludGF4IGZpbGUgYW5kIG1ha2UgaW1wcm92ZW1lbnRzLCBzZW5kIHRoZSBuZXcKK3ZlcnNpb24gdG8gQnJhbUB2aW0ub3JnLgorCitGb3IgZnVydGhlciBpbmZvIHNlZSAiOmhlbHAgc3ludGF4IiBpbiBWaW0uCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hNjUudmltIGIvcnVudGltZS9zeW50YXgvYTY1LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmYxY2RiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYTY1LnZpbQpAQCAtMCwwICsxLDE2NiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CXhhIDY1MDIgY3Jvc3MgYXNzZW1ibGVyCisiIE1haW50YWluZXI6CUNsZW1lbnMgS2lyY2hnYXR0ZXJlciA8Y2xlbWVuc0B0aGYuYXRoLmN4PgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMDMKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBPcGNvZGVzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFBIUFwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8UExBXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxQTFhcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFBMWVwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8U0VDXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxDTERcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFNFRFwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8Q0xJXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxCVkNcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPEJWU1woJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8QkNTXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxCQ0NcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPERFWVwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8REVDXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxDTVBcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPENQWFwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8QklUXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxST0xcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFJPUlwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8QVNMXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxUWEFcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFRZQVwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8VFNYXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxUWFNcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPExEQVwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8TERYXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxMRFlcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFNUQVwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8UExQXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxCUktcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFJUSVwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8Tk9QXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxTRUlcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPENMVlwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8UEhBXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxQSFhcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPEJSQVwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8Sk1QXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxKU1JcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFJUU1woJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8Q1BZXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxCTkVcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPEJFUVwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8Qk1JXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxMU1JcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPElOWFwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8SU5ZXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxJTkNcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPEFEQ1woJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8U0JDXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxBTkRcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPE9SQVwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8U1RYXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxTVFlcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFNUWlwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8RU9SXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxERVhcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPEJQTFwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8Q0xDXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxQSFlcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFRSQlwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8QkJSXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxCQlNcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFJNQlwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKK3N5biBtYXRjaCBhNjVPcGNvZGUJIlw8U01CXCgkXHxcc1wpIiBuZXh0Z3JvdXA9YTY1QWRkcmVzcworc3luIG1hdGNoIGE2NU9wY29kZQkiXDxUQVlcKCRcfFxzXCkiIG5leHRncm91cD1hNjVBZGRyZXNzCitzeW4gbWF0Y2ggYTY1T3Bjb2RlCSJcPFRBWFwoJFx8XHNcKSIgbmV4dGdyb3VwPWE2NUFkZHJlc3MKKworIiBBZGRyZXNzZXMKK3N5biBtYXRjaCBhNjVBZGRyZXNzCSJccyohXD0kWzAtOUEtRl1cezJ9XCgkXHxcc1wpIgorc3luIG1hdGNoIGE2NUFkZHJlc3MJIlxzKiFcPSRbMC05QS1GXVx7NH1cKCRcfFxzXCkiCitzeW4gbWF0Y2ggYTY1QWRkcmVzcwkiXHMqIVw9JFswLTlBLUZdXHsyfSxYXCgkXHxcc1wpIgorc3luIG1hdGNoIGE2NUFkZHJlc3MJIlxzKiFcPSRbMC05QS1GXVx7NH0sWFwoJFx8XHNcKSIKK3N5biBtYXRjaCBhNjVBZGRyZXNzCSJccyohXD0kWzAtOUEtRl1cezJ9LFlcKCRcfFxzXCkiCitzeW4gbWF0Y2ggYTY1QWRkcmVzcwkiXHMqIVw9JFswLTlBLUZdXHs0fSxZXCgkXHxcc1wpIgorc3luIG1hdGNoIGE2NUFkZHJlc3MJIlxzKigkWzAtOUEtRl1cezJ9KVwoJFx8XHNcKSIKK3N5biBtYXRjaCBhNjVBZGRyZXNzCSJccyooJFswLTlBLUZdXHs0fSlcKCRcfFxzXCkiCitzeW4gbWF0Y2ggYTY1QWRkcmVzcwkiXHMqKCRbMC05QS1GXVx7Mn0sWClcKCRcfFxzXCkiCitzeW4gbWF0Y2ggYTY1QWRkcmVzcwkiXHMqKCRbMC05QS1GXVx7Mn0pLFlcKCRcfFxzXCkiCisKKyIgTnVtYmVycworc3luIG1hdGNoIGE2NU51bWJlcgkiI1w9WzAtOV0qXD4iCitzeW4gbWF0Y2ggYTY1TnVtYmVyCSIjXD0kWzAtOUEtRl0qXD4iCitzeW4gbWF0Y2ggYTY1TnVtYmVyCSIjXD0mWzAtN10qXD4iCitzeW4gbWF0Y2ggYTY1TnVtYmVyCSIjXD0lWzAxXSpcPiIKKworc3luIGNhc2UgbWF0Y2gKKworIiBUeXBlcworc3luIG1hdGNoIGE2NVR5cGUJIlwoXlx8XHNcKVwuYnl0XCgkXHxcc1wpIgorc3luIG1hdGNoIGE2NVR5cGUJIlwoXlx8XHNcKVwud29yZFwoJFx8XHNcKSIKK3N5biBtYXRjaCBhNjVUeXBlCSJcKF5cfFxzXClcLmFzY1woJFx8XHNcKSIKK3N5biBtYXRjaCBhNjVUeXBlCSJcKF5cfFxzXClcLmRzYlwoJFx8XHNcKSIKK3N5biBtYXRjaCBhNjVUeXBlCSJcKF5cfFxzXClcLmZvcHRcKCRcfFxzXCkiCitzeW4gbWF0Y2ggYTY1VHlwZQkiXCheXHxcc1wpXC50ZXh0XCgkXHxcc1wpIgorc3luIG1hdGNoIGE2NVR5cGUJIlwoXlx8XHNcKVwuZGF0YVwoJFx8XHNcKSIKK3N5biBtYXRjaCBhNjVUeXBlCSJcKF5cfFxzXClcLmJzc1woJFx8XHNcKSIKK3N5biBtYXRjaCBhNjVUeXBlCSJcKF5cfFxzXClcLnplcm9cKCRcfFxzXCkiCitzeW4gbWF0Y2ggYTY1VHlwZQkiXCheXHxcc1wpXC5hbGlnblwoJFx8XHNcKSIKKworIiBCbG9ja3MKK3N5biBtYXRjaCBhNjVTZWN0aW9uCSJcKF5cfFxzXClcLihcKCRcfFxzXCkiCitzeW4gbWF0Y2ggYTY1U2VjdGlvbgkiXCheXHxcc1wpXC4pXCgkXHxcc1wpIgorCisiIFN0cmluZ3MKK3N5biBtYXRjaCBhNjVTdHJpbmcJIlwiLipcIiIKKworIiBQcm9ncmFtbSBDb3VudGVyCitzeW4gcmVnaW9uIGE2NVBDCXN0YXJ0PSJcKj0iIGVuZD0iXD4iIGtlZXBlbmQKKworIiBISS9MTyBCeXRlCitzeW4gcmVnaW9uIGE2NUhpTG8Jc3RhcnQ9IiNbPD5dIiBlbmQ9IiRcfFxzIiBjb250YWlucz1hNjVDb21tZW50IGtlZXBlbmQKKworIiBDb21tZW50cworc3luIGtleXdvcmQgYTY1VG9kbwlUT0RPIFhYWCBGSVhNRSBCVUcgY29udGFpbmVkCitzeW4gbWF0Y2ggICBhNjVDb21tZW50CSI7LioiaHM9cysxIGNvbnRhaW5zPWE2NVRvZG8KK3N5biByZWdpb24gIGE2NUNvbW1lbnQJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPWE2NVRvZG8sYTY1Q29tbWVudAorCisiIFByZXByb2Nlc3Nvcgorc3luIHJlZ2lvbiBhNjVQcmVQcm9jCXN0YXJ0PSJeIyIgZW5kPSIkIiBjb250YWlucz1hNjVDb21tZW50LGE2NUNvbnRpbnVlCitzeW4gbWF0Y2ggIGE2NUVuZAkJCWV4Y2x1ZGVubCAvZW5kJC8gY29udGFpbmVkCitzeW4gbWF0Y2ggIGE2NUNvbnRpbnVlCSJcXCQiIGNvbnRhaW5lZAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9hNjVfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfYTY1X3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGE2NVNlY3Rpb24JU3BlY2lhbAorICBIaUxpbmsgYTY1QWRkcmVzcwlTcGVjaWFsCisgIEhpTGluayBhNjVDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIGE2NVByZVByb2MJUHJlUHJvYworICBIaUxpbmsgYTY1TnVtYmVyCU51bWJlcgorICBIaUxpbmsgYTY1U3RyaW5nCVN0cmluZworICBIaUxpbmsgYTY1VHlwZQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGE2NU9wY29kZQlUeXBlCisgIEhpTGluayBhNjVQQwkJRXJyb3IKKyAgSGlMaW5rIGE2NVRvZG8JVG9kbworICBIaUxpbmsgYTY1SGlMbwlOdW1iZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYTY1IgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYWFwLnZpbSBiL3J1bnRpbWUvc3ludGF4L2FhcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5OWE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2FhcC52aW0KQEAgLTAsMCArMSwxNTggQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglBLUEtUCByZWNpcGUKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgSnVuIDEzCisKKyIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorZW5kaWYKKworbGV0IHM6Y3BvX3NhdmUgPSAmY3BvCitzZXQgY3BvJnZpbQorCitzeW4gaW5jbHVkZSBAYWFwUHl0aG9uU2NyaXB0IHN5bnRheC9weXRob24udmltCisKK3N5biBtYXRjaCAgICAgICBhYXBWYXJpYWJsZSAvJFstKz8qPSInXFwhXSpbYS16QS1aMC05Xy5dKi8KK3N5biBtYXRjaCAgICAgICBhYXBWYXJpYWJsZSAvJFstKz8qPSInXFwhXSooW2EtekEtWjAtOV8uXSopLworc3luIGtleXdvcmQJYWFwVG9kbyBjb250YWluZWQgVE9ETyBUb2RvCitzeW4gbWF0Y2gJYWFwU3RyaW5nICsnW14nXVx7LX0nKworc3luIG1hdGNoCWFhcFN0cmluZyArIlteIl1cey19IisKKworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6YWN0aW9uXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjphZGRcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmFkZGFsbFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6YXNyb290XD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjphc3NlcnRwa2dcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmF0dHJcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmF0dHJpYnV0ZVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6YXV0b2RlcGVuZFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6YnVpbGRjaGVja1w+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6Y2RcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmNoZGlyXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpjaGVja2luXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpjaGVja291dFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6Y2hpbGRcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmNobW9kXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpjb21taXRcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmNvbW1pdGFsbFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6Y29uZlw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6Y29weVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6ZGVsXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpkZWxkaXJcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmRlbGV0ZVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6ZGVscnVsZVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6ZGxsXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpkb1w+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6ZXJyb3JcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmV4ZWN1dGVcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmV4aXRcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmV4cG9ydFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6ZmV0Y2hcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmZldGNoYWxsXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpmaWxldHlwZVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6ZmluaXNoXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpnbG9iYWxcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmltcG9ydFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6aW5jbHVkZVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6aW5zdGFsbHBrZ1w+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6bGliXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpsb2NhbFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6bG9nXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpsdGxpYlw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6bWtkaXJcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOm1rZG93bmxvYWRcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOm1vdmVcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOnBhc3NcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOnBvcGRpclw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6cHJvZHVjZVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6cHJvZ3JhbVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6cHJvZ3NlYXJjaFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6cHVibGlzaFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6cHVibGlzaGFsbFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6cHVzaGRpclw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6cXVpdFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6cmVjaXBlXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpyZWZyZXNoXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpyZW1vdmVcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOnJlbW92ZWFsbFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6cmVxdWlyZVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6cmV2aXNlXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpyZXZpc2VhbGxcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOnJvdXRlXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpydWxlXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpzdGFydFw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6c3ltbGlua1w+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6c3lzXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpzeXNkZXBlbmRcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOnN5c3BhdGhcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOnN5c3RlbVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6dGFnXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjp0YWdhbGxcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOnRvb2xzZWFyY2hcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOnRvdHlwZVw+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6dG91Y2hcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOnRyZWVcPicKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOnVubG9ja1w+Jworc3luIG1hdGNoCWFhcENvbW1hbmQgJ15ccyo6dXBkYXRlXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjp1c2V0b29sXD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjp2YXJpYW50XD4nCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjp2ZXJzY29udFw+JworCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpwcmludFw+JyBuZXh0Z3JvdXA9YWFwUGlwZUVuZAorc3luIG1hdGNoCWFhcFBpcGVDbWQgJ1xzKjpwcmludFw+JyBuZXh0Z3JvdXA9YWFwUGlwZUVuZCBjb250YWluZWQKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmNhdFw+JyBuZXh0Z3JvdXA9YWFwUGlwZUVuZAorc3luIG1hdGNoCWFhcFBpcGVDbWQgJ1xzKjpjYXRcPicgbmV4dGdyb3VwPWFhcFBpcGVFbmQgY29udGFpbmVkCitzeW4gbWF0Y2gJYWFwQ29tbWFuZCAnXlxzKjpzeXNldmFsXD4nIG5leHRncm91cD1hYXBQaXBlRW5kCitzeW4gbWF0Y2gJYWFwUGlwZUNtZCAnXHMqOnN5c2V2YWxcPicgbmV4dGdyb3VwPWFhcFBpcGVFbmQgY29udGFpbmVkCitzeW4gbWF0Y2gJYWFwUGlwZUNtZCAnXHMqOmFzc2lnblw+JyBjb250YWluZWQKK3N5biBtYXRjaAlhYXBDb21tYW5kICdeXHMqOmV2YWxcPicgbmV4dGdyb3VwPWFhcFBpcGVFbmQKK3N5biBtYXRjaAlhYXBQaXBlQ21kICdccyo6ZXZhbFw+JyBuZXh0Z3JvdXA9YWFwUGlwZUVuZFB5IGNvbnRhaW5lZAorc3luIG1hdGNoCWFhcFBpcGVDbWQgJ1xzKjp0ZWVcPicgbmV4dGdyb3VwPWFhcFBpcGVFbmQgY29udGFpbmVkCitzeW4gbWF0Y2gJYWFwUGlwZUNtZCAnXHMqOmxvZ1w+JyBuZXh0Z3JvdXA9YWFwUGlwZUVuZCBjb250YWluZWQKK3N5biBtYXRjaAlhYXBQaXBlRW5kICdbXnxdKnwnIG5leHRncm91cD1hYXBQaXBlQ21kIGNvbnRhaW5lZCBza2lwbmwKK3N5biBtYXRjaAlhYXBQaXBlRW5kUHkgJ1tefF0qfCcgbmV4dGdyb3VwPWFhcFBpcGVDbWQgY29udGFpbmVkIHNraXBubCBjb250YWlucz1AYWFwUHl0aG9uU2NyaXB0CitzeW4gbWF0Y2gJYWFwUGlwZVN0YXJ0ICdeXHMqfCcgbmV4dGdyb3VwPWFhcFBpcGVDbWQKKworIgorIiBBIFB5dGhvbiBsaW5lIHN0YXJ0cyB3aXRoIEAuICBDYW4gYmUgY29udGludWVkIHdpdGggYSB0cmFpbGluZyBiYWNrc2xhc2guCitzeW4gcmVnaW9uIGFhcFB5dGhvblJlZ2lvbiBzdGFydD0iXHMqQCIgc2tpcD0nXFwkJyBlbmQ9KyQrIGNvbnRhaW5zPUBhYXBQeXRob25TY3JpcHQga2VlcGVuZAorIgorIiBBIFB5dGhvbiBibG9jayBzdGFydHMgd2l0aCAiOnB5dGhvbiIgYW5kIGNvbnRpbnVlcyBzbyBsb25nIGFzIHRoZSBpbmRlbnQgaXMKKyIgYmlnZ2VyLgorc3luIHJlZ2lvbiBhYXBQeXRob25SZWdpb24gbWF0Y2hncm91cD1hYXBDb21tYW5kIHN0YXJ0PSJceihccypcKTpweXRob24iIHNraXA9J1xuXHoxXHNcfFxuXHMqXG4nIGVuZD0rJCsgY29udGFpbnM9QGFhcFB5dGhvblNjcmlwdAorCisiIEEgUHl0aG9uIGV4cHJlc3Npb24gaXMgZW5jbG9zZWQgaW4gYmFja3RpY2tzLgorc3luIHJlZ2lvbiBhYXBQeXRob25SZWdpb24gc3RhcnQ9ImAiIHNraXA9ImBgIiBlbmQ9ImAiIGNvbnRhaW5zPUBhYXBQeXRob25TY3JpcHQKKworIiBUT0RPOiBUaGVyZSBpcyBzb21ldGhpbmcgd3Jvbmcgd2l0aCBsaW5lIGNvbnRpbnVhdGlvbi4KK3N5biBtYXRjaAlhYXBDb21tZW50ICcjLionIGNvbnRhaW5zPWFhcFRvZG8KK3N5biBtYXRjaAlhYXBDb21tZW50ICcjLipcKFxcXG4uKlwpJyBjb250YWlucz1hYXBUb2RvCisKK3N5biBtYXRjaAlhYXBTcGVjaWFsICckIycKK3N5biBtYXRjaAlhYXBTcGVjaWFsICckXCQnCitzeW4gbWF0Y2gJYWFwU3BlY2lhbCAnJCguKScKKworIiBBIGhlcmVkb2MgYXNzaWdubWVudC4KK3N5biByZWdpb24gYWFwSGVyZWRvYyBzdGFydD0iXlxzKlxrXCtccyokXD0rXD0/XD08PFxzKlx6KFxTKlwpImhzPWUrMSBlbmQ9Il5ccypcejFccyokImhlPXMtMQorCisiIFN5bmNpbmcgaXMgbmVlZGVkIGZvciAiOnB5dGhvbiIgYW5kICJWQVIgPDwgRU9GIi4gIERvbid0IHVzZSBQeXRob24gc3luY2luZworc3luIHN5bmMgY2xlYXIKK3N5biBzeW5jIGZyb21zdGFydAorCisiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KK2hpIGRlZiBsaW5rIGFhcFRvZG8JCVRvZG8KK2hpIGRlZiBsaW5rIGFhcFN0cmluZwkJU3RyaW5nCitoaSBkZWYgbGluayBhYXBDb21tZW50CQlDb21tZW50CitoaSBkZWYgbGluayBhYXBTcGVjaWFsCQlTcGVjaWFsCitoaSBkZWYgbGluayBhYXBWYXJpYWJsZQkJSWRlbnRpZmllcgoraGkgZGVmIGxpbmsgYWFwUGlwZUNtZAkJYWFwQ29tbWFuZAoraGkgZGVmIGxpbmsgYWFwQ29tbWFuZAkJU3RhdGVtZW50CitoaSBkZWYgbGluayBhYXBIZXJlZG9jCQlDb25zdGFudAorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJhYXAiCisKK2xldCAmY3BvID0gczpjcG9fc2F2ZQordW5sZXQgczpjcG9fc2F2ZQorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYWJhcXVzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2FiYXF1cy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0YjA4MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2FiYXF1cy52aW0KQEAgLTAsMCArMSw0OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUFiYXF1cyBmaW5pdGUgZWxlbWVudCBpbnB1dCBmaWxlICh3d3cuaGtzLmNvbSkKKyIgTWFpbnRhaW5lcjoJQ2FybCBPc3Rlcndpc2NoIDxvc3Rlcndpc2NoY0Bhc21lLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDIgRmViIDI0CisiIFJlbWFyazoJSHVnZSBpbXByb3ZlbWVudCBpbiBmb2xkaW5nIHBlcmZvcm1hbmNlLS1zZWUgZmlsZXR5cGUgcGx1Z2luCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBBYmFxdXMgY29tbWVudCBsaW5lcworc3luIG1hdGNoIGFiYXF1c0NvbW1lbnQJIl5cKlwqLiokIgorCisiIEFiYXF1cyBrZXl3b3JkIGxpbmVzCitzeW4gbWF0Y2ggYWJhcXVzS2V5d29yZExpbmUgIl5cKlxoLioiIGNvbnRhaW5zPWFiYXF1c0tleXdvcmQsYWJhcXVzUGFyYW1ldGVyLGFiYXF1c1ZhbHVlIGRpc3BsYXkKK3N5biBtYXRjaCBhYmFxdXNLZXl3b3JkICJeXCpcaFteLF0qIiBjb250YWluZWQgZGlzcGxheQorc3luIG1hdGNoIGFiYXF1c1BhcmFtZXRlciAiLFteLD1dXCsibGM9MSBjb250YWluZWQgZGlzcGxheQorc3luIG1hdGNoIGFiYXF1c1ZhbHVlCSI9XHMqW14sXSoibGM9MSBjb250YWluZWQgZGlzcGxheQorCisiIElsbGVnYWwgc3ludGF4CitzeW4gbWF0Y2ggYWJhcXVzQmFkTGluZQkiXlxzXCtcKi4qIiBkaXNwbGF5CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2FiYXF1c19zeW5faW5pdHMiKQorCWlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9hYmFxdXNfc3luX2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCSIgVGhlIGRlZmF1bHQgbWV0aG9kcyBmb3IgaGlnaGxpZ2h0aW5nLiAgQ2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIKKwlIaUxpbmsgYWJhcXVzQ29tbWVudAlDb21tZW50CisJSGlMaW5rIGFiYXF1c0tleXdvcmQJU3RhdGVtZW50CisJSGlMaW5rIGFiYXF1c1BhcmFtZXRlcglJZGVudGlmaWVyCisJSGlMaW5rIGFiYXF1c1ZhbHVlCUNvbnN0YW50CisJSGlMaW5rIGFiYXF1c0JhZExpbmUgICAgRXJyb3IKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJhYmFxdXMiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hYmMudmltIGIvcnVudGltZS9zeW50YXgvYWJjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGMwOThlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYWJjLnZpbQpAQCAtMCwwICsxLDY0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJYWJjIG11c2ljIG5vdGF0aW9uIGxhbmd1YWdlCisiIE1haW50YWluZXI6CUphbWVzIEFsbHdyaWdodCA8Si5SLkFsbHdyaWdodEB3ZXN0bWluc3Rlci5hYy51az4KKyIgVVJMOgkJaHR0cDovL3BlcnVuLmhzY3Mud21pbi5hYy51ay9+anJhL3ZpbS9zeW50YXgvYWJjLnZpbQorIiBMYXN0IENoYW5nZToJMjd0aCBBcHJpbCAyMDAxCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiB0YWdzCitzeW4gcmVnaW9uIGFiY0d1aXRhckNob3JkIHN0YXJ0PSsiW0EtR10rIGVuZD0rIisgY29udGFpbmVkCitzeW4gbWF0Y2ggYWJjTm90ZSAielsxLTldKlswLTldKiIgY29udGFpbmVkCitzeW4gbWF0Y2ggYWJjTm90ZSAielsxLTldKlswLTldKi9bMjQ4XVw9IiBjb250YWluZWQKK3N5biBtYXRjaCBhYmNOb3RlICJbPV9cXl1ceywyfVtBLUddLCpbMS05XSpbMC05XSoiIGNvbnRhaW5lZAorc3luIG1hdGNoIGFiY05vdGUgIls9X1xeXVx7LDJ9W0EtR10sKlsxLTldKlswLTldKi9bMjQ4XVw9IiBjb250YWluZWQKK3N5biBtYXRjaCBhYmNOb3RlICJbPV9cXl1ceywyfVthLWddJypbMS05XSpbMC05XSoiICBjb250YWluZWQKK3N5biBtYXRjaCBhYmNOb3RlICJbPV9cXl1ceywyfVthLWddJypbMS05XSpbMC05XSovWzI0OF1cPSIgIGNvbnRhaW5lZAorc3luIG1hdGNoIGFiY0JhciAifCIgIGNvbnRhaW5lZAorc3luIG1hdGNoIGFiY0JhciAiWzp8XVs6fF0iICBjb250YWluZWQKK3N5biBtYXRjaCBhYmNCYXIgIjp8MiIgIGNvbnRhaW5lZAorc3luIG1hdGNoIGFiY0JhciAifDEiICBjb250YWluZWQKK3N5biBtYXRjaCBhYmNCYXIgIlxbWzEyXSIgIGNvbnRhaW5lZAorc3luIG1hdGNoIGFiY1R1cGxlICIoWzEtOV1cKzpcPVswLTldKjpcPVswLTldKiIgY29udGFpbmVkCitzeW4gbWF0Y2ggYWJjQnJva2VuICI8XHw8PFx8PDw8XHw+XHw+Plx8Pj4+IiBjb250YWluZWQKK3N5biBtYXRjaCBhYmNUaWUgICAgIi0iCitzeW4gbWF0Y2ggYWJjSGVhZEZpZWxkICJeW0EtRUdISUstVFZXWFpdOi4qJCIgY29udGFpbmVkCitzeW4gbWF0Y2ggYWJjQm9keUZpZWxkICJeW0tMTVBRV1Z3XTouKiQiIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBhYmNIZWFkZXIgc3RhcnQ9Il5YOiIgZW5kPSJeSzouKiQiIGNvbnRhaW5lZCBjb250YWlucz1hYmNIZWFkRmllbGQsYWJjQ29tbWVudCBrZWVwZW5kCitzeW4gcmVnaW9uIGFiY1R1bmUgc3RhcnQ9Il5YOiIgZW5kPSJeICokIiBjb250YWlucz1hYmNIZWFkZXIsYWJjQ29tbWVudCxhYmNCYXIsYWJjTm90ZSxhYmNCb2R5RmllbGQsYWJjR3VpdGFyQ2hvcmQsYWJjVHVwbGUsYWJjQnJva2VuLGFiY1RpZQorc3luIG1hdGNoIGFiY0NvbW1lbnQgIiUuKiQiCisKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYWJjX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2FiY19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBhYmNDb21tZW50CQlDb21tZW50CisgIEhpTGluayBhYmNIZWFkRmllbGQJCVR5cGUKKyAgSGlMaW5rIGFiY0JvZHlGaWVsZAkJU3BlY2lhbAorICBIaUxpbmsgYWJjQmFyCQkJU3RhdGVtZW50CisgIEhpTGluayBhYmNUdXBsZQkJCVN0YXRlbWVudAorICBIaUxpbmsgYWJjQnJva2VuCQkJU3RhdGVtZW50CisgIEhpTGluayBhYmNUaWUJCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGFiY0d1aXRhckNob3JkCUlkZW50aWZpZXIKKyAgSGlMaW5rIGFiY05vdGUJCQlDb25zdGFudAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJhYmMiCisKKyIgdmltOiB0cz00CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hYmVsLnZpbSBiL3J1bnRpbWUvc3ludGF4L2FiZWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTliZTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9hYmVsLnZpbQpAQCAtMCwwICsxLDE2NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUFCRUwKKyIgTWFpbnRhaW5lcjoJSm9obiBDb29rIDxqb2huLmNvb2tAa2xhLXRlbmNvci5jb20+CisiIExhc3QgQ2hhbmdlOgkyMDAxIFNlcCAyCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiB0aGlzIGxhbmd1YWdlIGlzIG9ibGl2aW91cyB0byBjYXNlCitzeW4gY2FzZSBpZ25vcmUKKworIiBBIGJ1bmNoIG9mIGtleXdvcmRzCitzeW4ga2V5d29yZCBhYmVsSGVhZGVyCQltb2R1bGUgdGl0bGUgZGV2aWNlIG9wdGlvbnMKK3N5biBrZXl3b3JkIGFiZWxTZWN0aW9uCQlkZWNsYXJhdGlvbnMgZXF1YXRpb25zIHRlc3RfdmVjdG9ycyBlbmQKK3N5biBrZXl3b3JkIGFiZWxEZWNsYXJhdGlvbglzdGF0ZSB0cnV0aF90YWJsZSBzdGF0ZV9kaWFncmFtIHByb3BlcnR5CitzeW4ga2V5d29yZCBhYmVsVHlwZQkJcGluIG5vZGUgYXR0cmlidXRlIGNvbnN0YW50IG1hY3JvIGxpYnJhcnkKKworc3luIGtleXdvcmQgYWJlbFR5cGVJZAkJY29tIHJlZyBuZWcgcG9zIGJ1ZmZlciBkYyByZWdfZCByZWdfdCBjb250YWluZWQKK3N5biBrZXl3b3JkIGFiZWxUeXBlSWQJCXJlZ19zciByZWdfamsgcmVnX2cgcmV0YWluIHhvciBpbnZlcnQgY29udGFpbmVkCisKK3N5biBrZXl3b3JkIGFiZWxTdGF0ZW1lbnQJd2hlbiB0aGVuIGVsc2UgaWYgd2l0aCBlbmR3aXRoIGNhc2UgZW5kY2FzZQorc3luIGtleXdvcmQgYWJlbFN0YXRlbWVudAlmdXNlcyBleHByIHRyYWNlCisKKyIgb3B0aW9uIHRvIG9taXQgb2Jzb2xldGUgc3RhdGVtZW50cworaWYgZXhpc3RzKCJhYmVsX29ic29sZXRlX29rIikKKyAgc3luIGtleXdvcmQgYWJlbFN0YXRlbWVudCBlbmFibGUgZmxhZyBpbgorZWxzZQorICBzeW4ga2V5d29yZCBhYmVsRXJyb3IgZW5hYmxlIGZsYWcgaW4KK2VuZGlmCisKKyIgZGlyZWN0aXZlcworc3luIG1hdGNoIGFiZWxEaXJlY3RpdmUgIkBhbHRlcm5hdGUiCitzeW4gbWF0Y2ggYWJlbERpcmVjdGl2ZSAiQHN0YW5kYXJkIgorc3luIG1hdGNoIGFiZWxEaXJlY3RpdmUgIkBjb25zdCIKK3N5biBtYXRjaCBhYmVsRGlyZWN0aXZlICJAZGNzZXQiCitzeW4gbWF0Y2ggYWJlbERpcmVjdGl2ZSAiQGluY2x1ZGUiCitzeW4gbWF0Y2ggYWJlbERpcmVjdGl2ZSAiQHBhZ2UiCitzeW4gbWF0Y2ggYWJlbERpcmVjdGl2ZSAiQHJhZGl4Igorc3luIG1hdGNoIGFiZWxEaXJlY3RpdmUgIkByZXBlYXQiCitzeW4gbWF0Y2ggYWJlbERpcmVjdGl2ZSAiQGlycCIKK3N5biBtYXRjaCBhYmVsRGlyZWN0aXZlICJAZXhwciIKK3N5biBtYXRjaCBhYmVsRGlyZWN0aXZlICJAaWYiCitzeW4gbWF0Y2ggYWJlbERpcmVjdGl2ZSAiQGlmYiIKK3N5biBtYXRjaCBhYmVsRGlyZWN0aXZlICJAaWZuYiIKK3N5biBtYXRjaCBhYmVsRGlyZWN0aXZlICJAaWZkZWYiCitzeW4gbWF0Y2ggYWJlbERpcmVjdGl2ZSAiQGlmbmRlZiIKK3N5biBtYXRjaCBhYmVsRGlyZWN0aXZlICJAaWZpZGVuIgorc3luIG1hdGNoIGFiZWxEaXJlY3RpdmUgIkBpZm5pZGVuIgorCitzeW4ga2V5d29yZCBhYmVsVG9kbyBjb250YWluZWQgVE9ETyBYWFggRklYTUUKKworIiB3cmFwIHVwIHR5cGUgaWRlbnRpZmllcnMgdG8gZGlmZmVyZW50aWF0ZSB0aGVtIGZyb20gbm9ybWFsIHN0cmluZ3MKK3N5biByZWdpb24gYWJlbFNwZWNpZmllciBzdGFydD0naXN0eXBlJyBlbmQ9JzsnIGNvbnRhaW5zPWFiZWxUeXBlSWRDaGFyLGFiZWxUeXBlSWQsYWJlbFR5cGVJZEVuZCBrZWVwZW5kCitzeW4gbWF0Y2ggIGFiZWxUeXBlSWRDaGFyICJbLCddIiBjb250YWluZWQKK3N5biBtYXRjaCAgYWJlbFR5cGVJZEVuZCAgIjsiIGNvbnRhaW5lZAorCisiIHN0cmluZyBjb250c3RhbnRzIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgd2l0aGluIHRoZW0KK3N5biBtYXRjaCAgYWJlbFNwZWNpYWwgY29udGFpbmVkICJcXFsnXFxdIgorc3luIHJlZ2lvbiBhYmVsU3RyaW5nIHN0YXJ0PSsnKyBza2lwPStcXCIrIGVuZD0rJysgY29udGFpbnM9YWJlbFNwZWNpYWwKKworIiB2YWxpZCBpbnRlZ2VyIG51bWJlciBmb3JtYXRzIChkZWNpbWFsLCBiaW5hcnksIG9jdGFsLCBoZXgpCitzeW4gbWF0Y2ggYWJlbE51bWJlciAiXDxbLStdXD1bMC05XVwrXD4iCitzeW4gbWF0Y2ggYWJlbE51bWJlciAiXF5kWzAtOV1cK1w+Igorc3luIG1hdGNoIGFiZWxOdW1iZXIgIlxeYlswMV1cK1w+Igorc3luIG1hdGNoIGFiZWxOdW1iZXIgIlxeb1swLTddXCtcPiIKK3N5biBtYXRjaCBhYmVsTnVtYmVyICJcXmhbMC05YS1mXVwrXD4iCisKKyIgc3BlY2lhbCBjaGFyYWN0ZXJzCisiIChkZWZpbmUgdGhlc2UgYWZ0ZXIgYWJlbE9wZXJhdG9yIHNvID89IG92ZXJyaWRlcyA/KQorc3luIG1hdGNoIGFiZWxTcGVjaWFsQ2hhciAiW1xbXF0oKXt9LDs6P10iCisKKyIgb3BlcmF0b3JzCitzeW4gbWF0Y2ggYWJlbExvZ2ljYWxPcGVyYXRvciAiWyEjJiRdIgorc3luIG1hdGNoIGFiZWxSYW5nZU9wZXJhdG9yICJcLlwuIgorc3luIG1hdGNoIGFiZWxBbHRlcm5hdGVPcGVyYXRvciAiWy8qK10iCitzeW4gbWF0Y2ggYWJlbEFsdGVybmF0ZU9wZXJhdG9yICI6WysqXToiCitzeW4gbWF0Y2ggYWJlbEFyaXRobWV0aWNPcGVyYXRvciAiWy0lXSIKK3N5biBtYXRjaCBhYmVsQXJpdGhtZXRpY09wZXJhdG9yICI8PCIKK3N5biBtYXRjaCBhYmVsQXJpdGhtZXRpY09wZXJhdG9yICI+PiIKK3N5biBtYXRjaCBhYmVsUmVsYXRpb25hbE9wZXJhdG9yICJbPD4hPV09Igorc3luIG1hdGNoIGFiZWxSZWxhdGlvbmFsT3BlcmF0b3IgIls8Pl0iCitzeW4gbWF0Y2ggYWJlbEFzc2lnbm1lbnRPcGVyYXRvciAiWzo/XVw9PSIKK3N5biBtYXRjaCBhYmVsQXNzaWdubWVudE9wZXJhdG9yICI/Oj0iCitzeW4gbWF0Y2ggYWJlbFRydXRoVGFibGVPcGVyYXRvciAiLT4iCisKKyIgc2lnbmFsIGV4dGVuc2lvbnMKK3N5biBtYXRjaCBhYmVsRXh0ZW5zaW9uICJcLmFjbHJcPiIKK3N5biBtYXRjaCBhYmVsRXh0ZW5zaW9uICJcLmFzZXRcPiIKK3N5biBtYXRjaCBhYmVsRXh0ZW5zaW9uICJcLmNsa1w+Igorc3luIG1hdGNoIGFiZWxFeHRlbnNpb24gIlwuY2xyXD4iCitzeW4gbWF0Y2ggYWJlbEV4dGVuc2lvbiAiXC5jb21cPiIKK3N5biBtYXRjaCBhYmVsRXh0ZW5zaW9uICJcLmZiXD4iCitzeW4gbWF0Y2ggYWJlbEV4dGVuc2lvbiAiXC5bY29dZVw+Igorc3luIG1hdGNoIGFiZWxFeHRlbnNpb24gIlwubFtlaF1cPiIKK3N5biBtYXRjaCBhYmVsRXh0ZW5zaW9uICJcLmZjXD4iCitzeW4gbWF0Y2ggYWJlbEV4dGVuc2lvbiAiXC5waW5cPiIKK3N5biBtYXRjaCBhYmVsRXh0ZW5zaW9uICJcLnNldFw+Igorc3luIG1hdGNoIGFiZWxFeHRlbnNpb24gIlwuW2Rqa3NydHFdXD4iCitzeW4gbWF0Y2ggYWJlbEV4dGVuc2lvbiAiXC5wclw+Igorc3luIG1hdGNoIGFiZWxFeHRlbnNpb24gIlwucmVcPiIKK3N5biBtYXRjaCBhYmVsRXh0ZW5zaW9uICJcLmFbcHJdXD4iCitzeW4gbWF0Y2ggYWJlbEV4dGVuc2lvbiAiXC5zW3ByXVw+IgorCisiIHNwZWNpYWwgY29uc3RhbnRzCitzeW4gbWF0Y2ggYWJlbENvbnN0YW50ICJcLltja3VkZnB4el1cLiIKK3N5biBtYXRjaCBhYmVsQ29uc3RhbnQgIlwuc3ZbMi05XVwuIgorCisiIG9uZS1saW5lIGNvbW1lbnRzCitzeW4gcmVnaW9uIGFiZWxDb21tZW50IHN0YXJ0PSsiKyBlbmQ9KyJcfCQrIGNvbnRhaW5zPWFiZWxOdW1iZXIsYWJlbFRvZG8KKyIgb3B0aW9uIHRvIHByZXZlbnQgQysrIHN0eWxlIGNvbW1lbnRzCitpZiAhZXhpc3RzKCJhYmVsX2NwcF9jb21tZW50c19pbGxlZ2FsIikKKyAgc3luIHJlZ2lvbiBhYmVsQ29tbWVudCBzdGFydD0rLy8rIGVuZD0rJCsgY29udGFpbnM9YWJlbE51bWJlcixhYmVsVG9kbworZW5kaWYKKworc3luIHN5bmMgbWlubGluZXM9MQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9hYmVsX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2FiZWxfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyAgSGlMaW5rIGFiZWxIZWFkZXIJCWFiZWxTdGF0ZW1lbnQKKyAgSGlMaW5rIGFiZWxTZWN0aW9uCQlhYmVsU3RhdGVtZW50CisgIEhpTGluayBhYmVsRGVjbGFyYXRpb24JYWJlbFN0YXRlbWVudAorICBIaUxpbmsgYWJlbExvZ2ljYWxPcGVyYXRvcglhYmVsT3BlcmF0b3IKKyAgSGlMaW5rIGFiZWxSYW5nZU9wZXJhdG9yCWFiZWxPcGVyYXRvcgorICBIaUxpbmsgYWJlbEFsdGVybmF0ZU9wZXJhdG9yCWFiZWxPcGVyYXRvcgorICBIaUxpbmsgYWJlbEFyaXRobWV0aWNPcGVyYXRvcglhYmVsT3BlcmF0b3IKKyAgSGlMaW5rIGFiZWxSZWxhdGlvbmFsT3BlcmF0b3IJYWJlbE9wZXJhdG9yCisgIEhpTGluayBhYmVsQXNzaWdubWVudE9wZXJhdG9yCWFiZWxPcGVyYXRvcgorICBIaUxpbmsgYWJlbFRydXRoVGFibGVPcGVyYXRvcglhYmVsT3BlcmF0b3IKKyAgSGlMaW5rIGFiZWxTcGVjaWZpZXIJCWFiZWxTdGF0ZW1lbnQKKyAgSGlMaW5rIGFiZWxPcGVyYXRvcgkJYWJlbFN0YXRlbWVudAorICBIaUxpbmsgYWJlbFN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBhYmVsSWRlbnRpZmllcgkJSWRlbnRpZmllcgorICBIaUxpbmsgYWJlbFR5cGVJZAkJYWJlbFR5cGUKKyAgSGlMaW5rIGFiZWxUeXBlSWRDaGFyCQlhYmVsVHlwZQorICBIaUxpbmsgYWJlbFR5cGUJCVR5cGUKKyAgSGlMaW5rIGFiZWxOdW1iZXIJCWFiZWxTdHJpbmcKKyAgSGlMaW5rIGFiZWxTdHJpbmcJCVN0cmluZworICBIaUxpbmsgYWJlbENvbnN0YW50CQlDb25zdGFudAorICBIaUxpbmsgYWJlbENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGFiZWxFeHRlbnNpb24JCWFiZWxTcGVjaWFsCisgIEhpTGluayBhYmVsU3BlY2lhbENoYXIJYWJlbFNwZWNpYWwKKyAgSGlMaW5rIGFiZWxUeXBlSWRFbmQJCWFiZWxTcGVjaWFsCisgIEhpTGluayBhYmVsU3BlY2lhbAkJU3BlY2lhbAorICBIaUxpbmsgYWJlbERpcmVjdGl2ZQkJUHJlUHJvYworICBIaUxpbmsgYWJlbFRvZG8JCVRvZG8KKyAgSGlMaW5rIGFiZWxFcnJvcgkJRXJyb3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYWJlbCIKKyIgdmltOnRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2FjZWRiLnZpbSBiL3J1bnRpbWUvc3ludGF4L2FjZWRiLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTRlNGFiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYWNlZGIudmltCkBAIC0wLDAgKzEsMTIzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJQWNlREIgbW9kZWwgZmlsZXMKKyIgTWFpbnRhaW5lcjoJU3Rld2FydCBNb3JyaXMgKFN0ZXdhcnQuTW9ycmlzQGVkLmFjLnVrKQorIiBMYXN0IGNoYW5nZToJVGh1IEFwciAyNiAxMDozODowMSBCU1QgMjAwMQorIiBVUkw6CQlodHRwOi8vd3d3LmVkLmFjLnVrL35zd21vcnJpcy92aW0vYWNlZGIudmltCisKKyIgU3ludGF4IGZpbGUgdG8gaGFuZGxlIGFsbCAkQUNFREIvd3NwZWMvKi53cm0gZmlsZXMsIHByaW1hcmlseSBtb2RlbHMud3JtCisiIEFjZURCIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuYWNlZGIub3JnCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGtleXdvcmQJYWNlZGJYcmVmCVhSRUYKK3N5biBrZXl3b3JkCWFjZWRiTW9kaWZpZXIJVU5JUVVFIFJFUEVBVAorCitzeW4gY2FzZSBpZ25vcmUKK3N5biBrZXl3b3JkCWFjZWRiTW9kaWZpZXIJQ29uc3RyYWludHMKK3N5biBrZXl3b3JkCWFjZWRiVHlwZQlEYXRlVHlwZSBJbnQgVGV4dCBGbG9hdAorCisiIE1hZ2ljIHRhZ3MgZnJvbTogaHR0cDovL2dlbm9tZS5jb3JuZWxsLmVkdS9hY2Vkb2NzL21hZ2ljL3N1bW1hcnkuaHRtbAorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlwaWNrX21lX3RvX2NhbGwgTm9fY2FjaGUgTm9uX2dyYXBoaWMgVGl0bGUKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJRmxpcHBlZCBDZW50cmUgRXh0ZW50IFZpZXcgRGVmYXVsdF92aWV3CitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCUZyb21fbWFwIE1pbmltYWxfdmlldyBNYWluX01hcmtlciBNYXAgSW5jbHVkZXMKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJTWFwcGluZ19kYXRhIE1vcmVfZGF0YSBQb3NpdGlvbiBFbmRzIExlZnQgUmlnaHQKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJTXVsdGlfUG9zaXRpb24gTXVsdGlfRW5kcyBXaXRoIEVycm9yIFJlbGF0aXZlCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCU1pbiBBbmNob3IgR21hcCBHcmlkX21hcCBHcmlkIFN1Ym1lbnVzIENhbWJyaWRnZQorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlOb19idXR0b25zIENvbHVtbnMgQ29sb3VyIFN1cnJvdW5kX2NvbG91ciBUYWcKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJU2NhbGVfdW5pdCBDdXJzb3IgQ3Vyc29yX29uIEN1cnNvcl91bml0CitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCUxvY2F0b3IgTWFnbmlmaWNhdGlvbiBQcm9qZWN0aW9uX2xpbmVzX29uCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCU1hcmtlcl9wb2ludHMgTWFya2VyX2ludGVydmFscyBDb250aWdzCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCVBoeXNpY2FsX2dlbmVzIFR3b19wb2ludCBNdWx0aV9wb2ludCBMaWtlbGlob29kCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCVBvaW50X3F1ZXJ5IFBvaW50X3llbGxvdyBQb2ludF93aWR0aAorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlQb2ludF9wbmUgUG9pbnRfcGUgUG9pbnRfbm5lIFBvaW50X25lCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCURlcml2ZWRfdGFncyBEVF9xdWVyeSBEVF93aWR0aCBEVF9ub19kdXBsaWNhdGVzCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCVJIX2RhdGEgUkhfcXVlcnkgUkhfc3BhY2luZyBSSF9zaG93X2FsbAorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlOYW1lc19vbiBXaWR0aCBTeW1ib2wgQ29sb3VycyBQbmUgUGUgTm5lIHBNYXAKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJU2VxdWVuY2UgR3JpZGRlZCBGaW5nZXJQcmludCBJbl9TaXR1IENvc21pZF9ncmlkCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCUxheW91dCBMaW5lc19hdCBTcGFjZV9hdCBOb19zdGFnZ2VyIEExX2xhYmVsbGluZworc3luIGtleXdvcmQJYWNlZGJNYWdpYwlETkEgU3RydWN0dXJlIEZyb20gU291cmNlIFNvdXJjZV9FeG9ucworc3luIGtleXdvcmQJYWNlZGJNYWdpYwlDb2RpbmcgQ0RTIFRyYW5zY3JpcHQgQXNzZW1ibHlfdGFncyBBbGxlbGUKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJRGlzcGxheSBDb2xvdXIgRnJhbWVfc2Vuc2l0aXZlIFN0cmFuZF9zZW5zaXRpdmUKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJU2NvcmVfYm91bmRzIFBlcmNlbnQgQnVtcGFibGUgV2lkdGggU3ltYm9sCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCUJsaXhlbV9OIEFkZHJlc3MgRV9tYWlsIFBhcGVyIFJlZmVyZW5jZSBUaXRsZQorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlQb2ludF8xIFBvaW50XzIgQ2FsY3VsYXRpb24gRnVsbCBPbmVfcmVjb21iaW5hbnQKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJVGVzdGVkIFNlbGVjdGVkX3RyYW5zIEJhY2tjcm9zcyBCYWNrX29uZQorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlEb21fc2VtaSBEb21fbGV0IERpcmVjdCBDb21wbGV4X21peGVkIENhbGMKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJQ2FsY191cHBlcl9jb25mIEl0ZW1fMSBJdGVtXzIgUmVzdWx0cyBBX25vbl9CCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCVNjb3JlIFNjb3JlX2J5X29mZnNldCBTY29yZV9ieV93aWR0aAorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlSaWdodF9wcmlvcml0eSBCbGFzdG4gQmxpeGVtIEJsaXhlbV9YCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCUpvdXJuYWwgWWVhciBWb2x1bWUgUGFnZSBBdXRob3IKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJU2VsZWN0ZWQgT25lX2FsbCBSZWNzX2FsbCBPbmVfbGV0CitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCVNleF9mdWxsIFNleF9vbmUgU2V4X2NpcyBEb21fb25lIERvbV9zZWxlY3RlZAorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlDYWxjX2Rpc3RhbmNlIENhbGNfbG93ZXJfY29uZiBDYW5vbl9mb3JfY29zbWlkCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCVJldmVyc2VkX3BoeXNpY2FsIFBvaW50cyBQb3NpdGl2ZSBOZWdhdGl2ZQorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlQb2ludF9lcnJvcl9zY2FsZSBQb2ludF9zZWdyZWdhdGVfb3JkZXJlZAorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlQb2ludF9zeW1ib2wgSW50ZXJ2YWxfSlRNIEludGVydmFsX1JECitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCUVNQkxfZmVhdHVyZSBIb21vbCBGZWF0dXJlCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCURUX3RhZyBTcGFjZXIgU3BhY2VyX2NvbG91ciBTcGFjZXJfd2lkdGgKK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJUkhfcG9zaXRpdmUgUkhfbmVnYXRpdmUgUkhfY29udHJhZGljdG9yeSBRdWVyeQorc3luIGtleXdvcmQJYWNlZGJNYWdpYwlDbG9uZSBZX3JlbWFyayBQQ1JfcmVtYXJrIEh5YnJpZGl6ZXNfdG8KK3N5biBrZXl3b3JkCWFjZWRiTWFnaWMJUm93IFZpcnR1YWxfcm93IE1peGVkIEluX3Bvb2wgU3VicG9vbCBCX25vbl9BCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCUludGVydmFsX1NSSyBQb2ludF9zaG93X21hcmdpbmFsIFN1YnNlcXVlbmNlCitzeW4ga2V5d29yZAlhY2VkYk1hZ2ljCVZpc2libGUgUHJvcGVydGllcyBUcmFuc3Bvc29uCisKK3N5biBtYXRjaAlhY2VkYkNsYXNzCSJeP1x3XCtcfF4jXHdcKyIKK3N5biBtYXRjaAlhY2VkYkNvbW1lbnQJIi8vLioiCitzeW4gcmVnaW9uCWFjZWRiQ29tbWVudAlzdGFydD0iL1wqIiBlbmQ9IlwqLyIKK3N5biBtYXRjaAlhY2VkYkNvbW1lbnQJIl4jXFcuKiIKK3N5biBtYXRjaAlhY2VkYkhlbHAJIl5cKlwqXHdcKyQiCitzeW4gbWF0Y2gJYWNlZGJUYWcJIlteXl0/XHdcK1x8W15eXSNcd1wrIgorc3luIG1hdGNoCWFjZWRiQmxvY2sJIi8vIy5cKyMkIgorc3luIG1hdGNoCWFjZWRiT3B0aW9uCSJeX1tEVkhdXFNcKyIKK3N5biBtYXRjaAlhY2VkYkZsYWcJIlxzXCstXGhcKyIKK3N5biBtYXRjaAlhY2VkYlN1YmNsYXNzCSJeQ2xhc3MiCitzeW4gbWF0Y2gJYWNlZGJTdWJ0YWcJIl5WaXNpYmxlXHxeSXNfYV9zdWJjbGFzc19vZlx8XkZpbHRlclx8XkhpZGRlbiIKK3N5biBtYXRjaAlhY2VkYk51bWJlcgkiXDxcZFwrXD4iCitzeW4gbWF0Y2gJYWNlZGJOdW1iZXIJIlw8XGRcK1wuXGRcK1w+Igorc3luIG1hdGNoCWFjZWRiSHliCSJcPFBvc2l0aXZlX1x3XCtcPlx8XDxOZWdhdGl2ZVx3XCtcPiIKK3N5biByZWdpb24JYWNlZGJTdHJpbmcJc3RhcnQ9LyIvIGVuZD0vIi8gc2tpcD0vXFwiLyBvbmVsaW5lCisKKyIgUmVzdCBvZiBzeW50YXggaGlnaGxpZ2h0aW5nIHJ1bGVzIHN0YXJ0IGhlcmUKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYWNlZGJfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfYWNlZGJfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgYWNlZGJNYWdpYwlTcGVjaWFsCisgIEhpTGluayBhY2VkYkh5YglTcGVjaWFsCisgIEhpTGluayBhY2VkYlR5cGUJVHlwZQorICBIaUxpbmsgYWNlZGJPcHRpb24JVHlwZQorICBIaUxpbmsgYWNlZGJTdWJjbGFzcwlUeXBlCisgIEhpTGluayBhY2VkYlN1YnRhZwlJbmNsdWRlCisgIEhpTGluayBhY2VkYkZsYWcJSW5jbHVkZQorICBIaUxpbmsgYWNlZGJUYWcJSW5jbHVkZQorICBIaUxpbmsgYWNlZGJDbGFzcwlUb2RvCisgIEhpTGluayBhY2VkYkhlbHAJVG9kbworICBIaUxpbmsgYWNlZGJYcmVmCUlkZW50aWZpZXIKKyAgSGlMaW5rIGFjZWRiTW9kaWZpZXIJTGFiZWwKKyAgSGlMaW5rIGFjZWRiQ29tbWVudAlDb21tZW50CisgIEhpTGluayBhY2VkYkJsb2NrCU1vZGVNc2cKKyAgSGlMaW5rIGFjZWRiTnVtYmVyCU51bWJlcgorICBIaUxpbmsgYWNlZGJTdHJpbmcJU3RyaW5nCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImFjZWRiIgorCisiIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1vZGVsLndybSBmaWxlIGlzIHNlbnNpdGl2ZSB0byBtaXhlZCB0YWIgYW5kIHNwYWNlCisiIGluZGVudGF0aW9uIGFuZCBhc3N1bWVzIHRhYnMgYXJlIDggc28uLi4KK3NlIHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2FkYS52aW0gYi9ydW50aW1lL3N5bnRheC9hZGEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhN2IyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9hZGEudmltCkBAIC0wLDAgKzEsMjg3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJQWRhICg5NSkKKyIgTWFpbnRhaW5lcjoJRGF2aWQgQS4gV2hlZWxlciA8ZHdoZWVsZXJAZHdoZWVsZXIuY29tPgorIiBVUkw6IGh0dHA6Ly93d3cuZHdoZWVsZXIuY29tL3ZpbQorIiBMYXN0IENoYW5nZToJMjAwMS0xMS0wMgorCisiIEZvcm1lciBNYWludGFpbmVyOglTaW1vbiBCcmFkbGV5IDxzaW1vbi5icmFkbGV5QHBpdGVjaG5vbG9neS5jb20+CisiCQkJKHdhcyA8c2liOTNAYWJlci5hYy51az4pCisiIE90aGVyIGNvbnRyaWJ1dG9yczogUHJlYmVuIFJhbmRob2wuCisiIFRoZSBmb3JtYWwgc3BlYyBvZiBBZGE5NSAoQVJNKSBpcyB0aGUgIkFkYTk1IFJlZmVyZW5jZSBNYW51YWwiLgorIiBGb3IgbW9yZSBBZGE5NSBpbmZvLCBzZWUgaHR0cDovL3d3dy5nbnVhZGEub3JnIGFuZCBodHRwOi8vd3d3LmFkYXBvd2VyLmNvbS4KKworIiBUaGlzIHZpbSBzeW50YXggZmlsZSB3b3JrcyBvbiB2aW0gNS42LCA1LjcsIDUuOCBhbmQgNi54LgorIiBJdCBpbXBsZW1lbnRzIEJyYW0gTW9vbGVuYWFyJ3MgQXByaWwgMjUsIDIwMDEgcmVjb21tZW5kYXRpb25zIHRvIG1ha2UKKyIgdGhlIHN5bnRheCBmaWxlIG1heGltYWxseSBwb3J0YWJsZSBhY3Jvc3MgZGlmZmVyZW50IHZlcnNpb25zIG9mIHZpbS4KKyIgSWYgdmltIDYuMCsgaXMgYXZhaWxhYmxlLAorIiB0aGlzIHN5bnRheCBmaWxlIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgdmltIDYuMCBhZHZhbmNlZCBwYXR0ZXJuLW1hdGNoaW5nCisiIGZ1bmN0aW9ucyB0byBhdm9pZCBoaWdobGlnaHRpbmcgdW5pbnRlcmVzdGluZyBsZWFkaW5nIHNwYWNlcyBpbgorIiBzb21lIGV4cHJlc3Npb25zIGNvbnRhaW5pbmcgIndpdGgiIGFuZCAidXNlIi4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorIGZpbmlzaAorZW5kaWYKKworIiBBZGEgaXMgZW50aXJlbHkgY2FzZS1pbnNlbnNpdGl2ZS4KK3N5biBjYXNlIGlnbm9yZQorCisiIFdlIGRvbid0IG5lZWQgdG8gbG9vayBiYWNrd2FyZHMgdG8gaGlnaGxpZ2h0IGNvcnJlY3RseTsKKyIgdGhpcyBzcGVlZHMgdGhpbmdzIHVwIGdyZWF0bHkuCitzeW4gc3luYyBtaW5saW5lcz0xIG1heGxpbmVzPTEKKworIiBIaWdobGlnaHRpbmcgY29tbWFuZHMuICBUaGVyZSBhcmUgNjkgcmVzZXJ2ZWQgd29yZHMgaW4gdG90YWwgaW4gQWRhOTUuCisiIFNvbWUga2V5d29yZHMgYXJlIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSB3YXkuIEZvciBleGFtcGxlOgorIiAxLiAiZW5kIiBpcyBhIGdlbmVyYWwga2V5d29yZCwgYnV0ICJlbmQgaWYiIGVuZHMgYSBDb25kaXRpb25hbC4KKyIgMi4gInRoZW4iIGlzIGEgY29uZGl0aW9uYWwsIGJ1dCAiYW5kIHRoZW4iIGlzIGFuIG9wZXJhdG9yLgorCisKKyIgU3RhbmRhcmQgRXhjZXB0aW9ucyAoaW5jbHVkaW5nIEkvTykuCisiIFdlJ2xsIGhpZ2hsaWdodCB0aGUgc3RhbmRhcmQgZXhjZXB0aW9ucywgc2ltaWxhciB0byB2aW0ncyBQeXRob24gbW9kZS4KKyIgSXQncyBwb3NzaWJsZSB0byByZWRlZmluZSB0aGUgc3RhbmRhcmQgZXhjZXB0aW9ucyBhcyBzb21ldGhpbmcgZWxzZSwKKyIgYnV0IGRvaW5nIHNvIGlzIHZlcnkgYmFkIHByYWN0aWNlLCBzbyBzaW1wbHkgaGlnaGxpZ2h0aW5nIHRoZW0gbWFrZXMgc2Vuc2UuCitzeW4ga2V5d29yZCBhZGFFeGNlcHRpb24gQ29uc3RyYWludF9FcnJvciBQcm9ncmFtX0Vycm9yIFN0b3JhZ2VfRXJyb3IKK3N5biBrZXl3b3JkIGFkYUV4Y2VwdGlvbiBUYXNraW5nX0Vycm9yCitzeW4ga2V5d29yZCBhZGFFeGNlcHRpb24gU3RhdHVzX0Vycm9yIE1vZGVfRXJyb3IgTmFtZV9FcnJvciBVc2VfRXJyb3IKK3N5biBrZXl3b3JkIGFkYUV4Y2VwdGlvbiBEZXZpY2VfRXJyb3IgRW5kX0Vycm9yIERhdGFfRXJyb3IgTGF5b3V0X0Vycm9yCitzeW4ga2V5d29yZCBhZGFFeGNlcHRpb24gTGVuZ3RoX0Vycm9yIFBhdHRlcm5fRXJyb3IgSW5kZXhfRXJyb3IKK3N5biBrZXl3b3JkIGFkYUV4Y2VwdGlvbiBUcmFuc2xhdGlvbl9FcnJvcgorc3luIGtleXdvcmQgYWRhRXhjZXB0aW9uIFRpbWVfRXJyb3IgQXJndW1lbnRfRXJyb3IKK3N5biBrZXl3b3JkIGFkYUV4Y2VwdGlvbiBUYWdfRXJyb3IKK3N5biBrZXl3b3JkIGFkYUV4Y2VwdGlvbiBQaWN0dXJlX0Vycm9yCisiIEludGVyZmFjZXMKK3N5biBrZXl3b3JkIGFkYUV4Y2VwdGlvbiBUZXJtaW5hdG9yX0Vycm9yIENvbnZlcnNpb25fRXJyb3IKK3N5biBrZXl3b3JkIGFkYUV4Y2VwdGlvbiBQb2ludGVyX0Vycm9yIERlcmVmZXJlbmNlX0Vycm9yIFVwZGF0ZV9FcnJvcgorIiBUaGlzIGlzbid0IGluIHRoZSBBZGEgc3BlYywgYnV0IGEgR05BVCBleHRlbnNpb24uCitzeW4ga2V5d29yZCBhZGFFeGNlcHRpb24gQXNzZXJ0X0ZhaWx1cmUKKyIgV2UgZG9uJ3QgbGlzdCBBTEwgZXhjZXB0aW9ucyBkZWZpbmVkIGluIHBhcnRpY3VsYXIgY29tcGlsZXJzIChlLmcuLCBHTkFUKSwKKyIgYmVjYXVzZSBpdCdzIHF1aXRlIHJlYXNvbmFibGUgdG8gZGVmaW5lIHRob3NlIHBocmFzZXMgYXMgbm9uLWV4Y2VwdGlvbnMuCisKKworIiBXZSBkb24ndCBub3JtYWxseSBoaWdobGlnaHQgdHlwZXMgaW4gcGFja2FnZSBTdGFuZGFyZAorIiAoSW50ZWdlciwgQ2hhcmFjdGVyLCBGbG9hdCwgZXRjLikuICBJIGRvbid0IHRoaW5rIGl0IGxvb2tzIGdvb2QKKyIgd2l0aCB0aGUgb3RoZXIgdHlwZSBrZXl3b3JkcywgYW5kIG1hbnkgQWRhIHByb2dyYW1zIGRlZmluZQorIiBzbyBtYW55IG9mIHRoZWlyIG93biB0eXBlcyB0aGF0IGl0IGxvb2tzIGluY29uc2lzdGVudC4KKyIgSG93ZXZlciwgaWYgeW91IHdhbnQgdGhpcyBoaWdobGlnaHRpbmcsIHR1cm4gb24gImFkYV9zdGFuZGFyZF90eXBlcyIuCisiIEZvciBwYWNrYWdlIFN0YW5kYXJkJ3MgZGVmaW5pdGlvbiwgc2VlIEFSTSBzZWN0aW9uIEEuMS4KKworaWYgZXhpc3RzKCJhZGFfc3RhbmRhcmRfdHlwZXMiKQorICBzeW4ga2V5d29yZCBhZGFCdWlsdGluVHlwZQlCb29sZWFuIEludGVnZXIgTmF0dXJhbCBQb3NpdGl2ZSBGbG9hdAorICBzeW4ga2V5d29yZCBhZGFCdWlsdGluVHlwZQlDaGFyYWN0ZXIgV2lkZV9DaGFyYWN0ZXIKKyAgc3luIGtleXdvcmQgYWRhQnVpbHRpblR5cGUJU3RyaW5nIFdpZGVfU3RyaW5nCisgIHN5biBrZXl3b3JkIGFkYUJ1aWx0aW5UeXBlCUR1cmF0aW9uCisgICIgVGhlc2UgYXJlbid0IGxpc3RlZCBpbiBBUk0gc2VjdGlvbiBBLjEncyBjb2RlLCBidXQgdGhleSdyZSBub3RlZCBhcworICAiIG9wdGlvbnMgaW4gQVJNIHNlY3Rpb25zIDMuNS40IGFuZCAzLjUuNzoKKyAgc3luIGtleXdvcmQgYWRhQnVpbHRpblR5cGUJU2hvcnRfSW50ZWdlciBTaG9ydF9TaG9ydF9JbnRlZ2VyCisgIHN5biBrZXl3b3JkIGFkYUJ1aWx0aW5UeXBlCUxvbmdfSW50ZWdlciBMb25nX0xvbmdfSW50ZWdlcgorICBzeW4ga2V5d29yZCBhZGFCdWlsdGluVHlwZQlTaG9ydF9GbG9hdCBTaG9ydF9TaG9ydF9GbG9hdAorICBzeW4ga2V5d29yZCBhZGFCdWlsdGluVHlwZQlMb25nX0Zsb2F0IExvbmdfTG9uZ19GbG9hdAorZW5kaWYKKworIiBUaGVyZSBhcmUgTUFOWSBvdGhlciBwcmVkZWZpbmVkIHR5cGVzOyB0aGV5J3ZlIG5vdCBiZWVuIGFkZGVkLCBiZWNhdXNlCisiIGRldGVybWluaW5nIHdoZW4gdGhleSdyZSBhIHR5cGUgcmVxdWlyZXMgY29udGV4dCBpbiBnZW5lcmFsLgorIiBPbmUgcG90ZW50aWFsIGFkZGl0aW9uIHdvdWxkIGJlIFVuYm91bmRlZF9TdHJpbmcuCisKKworc3luIGtleXdvcmQgYWRhTGFiZWwJCW90aGVycworCitzeW4ga2V5d29yZCBhZGFPcGVyYXRvcgkJYWJzIG1vZCBub3QgcmVtIHhvcgorc3luIG1hdGNoIGFkYU9wZXJhdG9yCQkiXDxhbmRcPiIKK3N5biBtYXRjaCBhZGFPcGVyYXRvcgkJIlw8YW5kXHNcK3RoZW5cPiIKK3N5biBtYXRjaCBhZGFPcGVyYXRvcgkJIlw8b3JcPiIKK3N5biBtYXRjaCBhZGFPcGVyYXRvcgkJIlw8b3Jcc1wrZWxzZVw+Igorc3luIG1hdGNoIGFkYU9wZXJhdG9yCQkiWy0rKi88PiZdIgorc3luIGtleXdvcmQgYWRhT3BlcmF0b3IJCSoqCitzeW4gbWF0Y2ggYWRhT3BlcmF0b3IJCSJbLzw+XT0iCitzeW4ga2V5d29yZCBhZGFPcGVyYXRvcgkJPT4KK3N5biBtYXRjaCBhZGFPcGVyYXRvcgkJIlwuXC4iCitzeW4gbWF0Y2ggYWRhT3BlcmF0b3IJCSI9IgorCisiIFdlIHdvbid0IG1hcCAiYWRhQXNzaWdubWVudCIgYnkgZGVmYXVsdCwgYnV0IHdlIG5lZWQgdG8gbWFwICI6PSIgdG8KKyIgc29tZXRoaW5nIG9yIHRoZSAiPSIgaW5zaWRlIGl0IHdpbGwgYmUgbWlzbGFiZWxsZWQgYXMgYW4gb3BlcmF0b3IuCisiIE5vdGUgdGhhdCBpbiBBZGEsIGFzc2lnbm1lbnQgKDo9KSBpcyBub3QgY29uc2lkZXJlZCBhbiBvcGVyYXRvci4KK3N5biBtYXRjaCBhZGFBc3NpZ25tZW50CQkiOj0iCisKKyIgSGFuZGxlIHRoZSBib3gsIDw+LCBzcGVjaWFsbHk6CitzeW4ga2V5d29yZCBhZGFTcGVjaWFsCTw+CisKKyIgTnVtYmVycywgaW5jbHVkaW5nIGZsb2F0aW5nIHBvaW50LCBleHBvbmVudHMsIGFuZCBhbHRlcm5hdGUgYmFzZXMuCitzeW4gbWF0Y2ggICBhZGFOdW1iZXIJCSJcPFxkWzAtOV9dKlwoXC5cZFswLTlfXSpcKVw9XChbRWVdWystXVw9XGRbMC05X10qXClcPVw+Igorc3luIG1hdGNoICAgYWRhTnVtYmVyCQkiXDxcZFxkXD0jXHhbMC05QS1GYS1mX10qXChcLlx4WzAtOUEtRmEtZl9dKlwpXD0jXChbRWVdWystXVw9XGRbMC05X10qXClcPSIKKworIiBJZGVudGlmeSBsZWFkaW5nIG51bWVyaWMgc2lnbnMuIEluICJBLTUiIHRoZSAiLSIgaXMgYW4gb3BlcmF0b3IsCisiIGJ1dCBpbiAiQTo9LTUiIHRoZSAiLSIgaXMgYSBzaWduLiBUaGlzIGhhbmRsZXMgIkEzKy01IiAoZXRjLikgY29ycmVjdGx5LgorIiBUaGlzIGFzc3VtZXMgdGhhdCBpZiB5b3UgcHV0IGEgZG9uJ3QgcHV0IGEgc3BhY2UgYWZ0ZXIgKy8tIHdoZW4gaXQncyB1c2VkCisiIGFzIGFuIG9wZXJhdG9yLCB5b3Ugd29uJ3QgcHV0IGEgc3BhY2UgYmVmb3JlIGl0IGVpdGhlciAtLSB3aGljaCBpcyB0cnVlCisiIGluIGNvZGUgSSd2ZSBzZWVuLgorc3luIG1hdGNoIGFkYVNpZ24gIltbOnNwYWNlOl08Pj0oLHw6OyYqLystXVsrLV1cZCJsYz0xLGhzPXMrMSxoZT1lLTEsbWU9ZS0xCisKKyIgTGFiZWxzIGZvciB0aGUgZ290byBzdGF0ZW1lbnQuCitzeW4gcmVnaW9uICBhZGFMYWJlbAkJc3RhcnQ9Ijw8IiAgZW5kPSI+PiIKKworIiBCb29sZWFuIENvbnN0YW50cy4KK3N5biBrZXl3b3JkIGFkYUJvb2xlYW4JdHJ1ZSBmYWxzZQorCisiIFdhcm4gcGVvcGxlIHdobyB0cnkgdG8gdXNlIEMvQysrIG5vdGF0aW9uIGVycm9uZW91c2x5Ogorc3luIG1hdGNoIGFkYUVycm9yICIvLyIKK3N5biBtYXRjaCBhZGFFcnJvciAiL1wqIgorc3luIG1hdGNoIGFkYUVycm9yICI9PSIKKworCitpZiBleGlzdHMoImFkYV9zcGFjZV9lcnJvcnMiKQorICBpZiAhZXhpc3RzKCJhZGFfbm9fdHJhaWxfc3BhY2VfZXJyb3IiKQorICAgIHN5biBtYXRjaCAgIGFkYVNwYWNlRXJyb3IgICAgIGV4Y2x1ZGVubCAiXHNcKyQiCisgIGVuZGlmCisgIGlmICFleGlzdHMoImFkYV9ub190YWJfc3BhY2VfZXJyb3IiKQorICAgIHN5biBtYXRjaCAgIGFkYVNwYWNlRXJyb3IgICAgICIgXCtcdCJtZT1lLTEKKyAgZW5kaWYKK2VuZGlmCisKKyIgVW5sZXNzIHNwZWNpYWwgKCJlbmQgbG9vcCIsICJlbmQgaWYiLCBldGMuKSwgImVuZCIgbWFya3MgdGhlIGVuZCBvZiBhCisiIGJlZ2luLCBwYWNrYWdlLCB0YXNrIGV0Yy4gQXNzaWdpbmcgaXQgdG8gYWRhRW5kLgorc3luIG1hdGNoIGFkYUVuZAkJIlw8ZW5kXD4iCisKK3N5biBrZXl3b3JkIGFkYVByZXByb2MJCXByYWdtYQorCitzeW4ga2V5d29yZCBhZGFSZXBlYXQJCWV4aXQgZm9yIGxvb3AgcmV2ZXJzZSB3aGlsZQorc3luIG1hdGNoIGFkYVJlcGVhdAkJIlw8ZW5kXHNcK2xvb3BcPiIKKworc3luIGtleXdvcmQgYWRhU3RhdGVtZW50CWFjY2VwdCBkZWxheSBnb3RvIHJhaXNlIHJlcXVldWUgcmV0dXJuCitzeW4ga2V5d29yZCBhZGFTdGF0ZW1lbnQJdGVybWluYXRlCitzeW4gbWF0Y2ggYWRhU3RhdGVtZW50CSJcPGFib3J0XD4iCisKKyIgSGFuZGxlIEFkYSdzIHJlY29yZCBrZXl3b3Jkcy4KKyIgJ3JlY29yZCcgdXN1YWxseSBzdGFydHMgYSBzdHJ1Y3R1cmUsIGJ1dCAid2l0aCBudWxsIHJlY29yZDsiIGRvZXMgbm90LAorIiBhbmQgJ2VuZCByZWNvcmQ7JyBlbmRzIGEgc3RydWN0dXJlLiAgVGhlIG9yZGVyaW5nIGhlcmUgaXMgY3JpdGljYWwgLQorIiAncmVjb3JkOycgbWF0Y2hlcyBhICJ3aXRoIG51bGwgcmVjb3JkIiwgc28gbWFrZSBpdCBhIGtleXdvcmQgKHRoaXMgY2FuCisiIG1hdGNoIHdoZW4gdGhlICd3aXRoJyBvciAnbnVsbCcgaXMgb24gYSBwcmV2aW91cyBsaW5lKS4KKyIgV2Ugc2VlIHRoZSAiZW5kIiBpbiAiZW5kIHJlY29yZCIgYmVmb3JlIHRoZSB3b3JkIHJlY29yZCwgc28gd2UgbWF0Y2ggdGhhdAorIiBwYXR0ZXJuIGFzIGFkYVN0cnVjdHVyZSAoYW5kIGl0IHdvbid0IG1hdGNoIHRoZSAicmVjb3JkOyIgcGF0dGVybikuCitzeW4gbWF0Y2ggYWRhU3RydWN0dXJlCSJcPHJlY29yZFw+Igorc3luIG1hdGNoIGFkYVN0cnVjdHVyZQkiXDxlbmRcc1wrcmVjb3JkXD4iCitzeW4gbWF0Y2ggYWRhS2V5d29yZAkiXDxyZWNvcmQ7Im1lPWUtMQorCitzeW4ga2V5d29yZCBhZGFTdG9yYWdlQ2xhc3MJYWJzdHJhY3QgYWNjZXNzIGFsaWFzZWQgYXJyYXkgYXQgY29uc3RhbnQgZGVsdGEKK3N5biBrZXl3b3JkIGFkYVN0b3JhZ2VDbGFzcwlkaWdpdHMgbGltaXRlZCBvZiBwcml2YXRlIHJhbmdlIHRhZ2dlZAorc3luIGtleXdvcmQgYWRhVHlwZWRlZgkJc3VidHlwZSB0eXBlCisKKyIgQ29uZGl0aW9uYWxzLiAiYWJvcnQiIGFmdGVyICJ0aGVuIiBpcyBhIGNvbmRpdGlvbmFsIG9mIGl0cyBvd24uCitzeW4gbWF0Y2ggYWRhQ29uZGl0aW9uYWwJIlw8dGhlblw+Igorc3luIG1hdGNoIGFkYUNvbmRpdGlvbmFsCSJcPHRoZW5cc1wrYWJvcnRcPiIKK3N5biBtYXRjaCBhZGFDb25kaXRpb25hbAkiXDxlbHNlXD4iCitzeW4gbWF0Y2ggYWRhQ29uZGl0aW9uYWwJIlw8ZW5kXHNcK2lmXD4iCitzeW4gbWF0Y2ggYWRhQ29uZGl0aW9uYWwJIlw8ZW5kXHNcK2Nhc2VcPiIKK3N5biBtYXRjaCBhZGFDb25kaXRpb25hbAkiXDxlbmRcc1wrc2VsZWN0XD4iCitzeW4ga2V5d29yZCBhZGFDb25kaXRpb25hbAlpZiBjYXNlIHNlbGVjdAorc3luIGtleXdvcmQgYWRhQ29uZGl0aW9uYWwJZWxzaWYgd2hlbgorCitzeW4ga2V5d29yZCBhZGFLZXl3b3JkCQlhbGwgZG8gZXhjZXB0aW9uIGluIGlzIG5ldyBudWxsIG91dAorc3luIGtleXdvcmQgYWRhS2V5d29yZAkJc2VwYXJhdGUgdW50aWwKKworIiBUaGVzZSBrZXl3b3JkcyBiZWdpbiB2YXJpb3VzIGNvbnN0cnVjdHMsIGFuZCB5b3UgX21pZ2h0XyB3YW50IHRvCisiIGhpZ2hsaWdodCB0aGVtIGRpZmZlcmVudGx5Lgorc3luIGtleXdvcmQgYWRhQmVnaW4JCWJlZ2luIGJvZHkgZGVjbGFyZSBlbnRyeSBmdW5jdGlvbiBnZW5lcmljCitzeW4ga2V5d29yZCBhZGFCZWdpbgkJcGFja2FnZSBwcm9jZWR1cmUgcHJvdGVjdGVkIHJlbmFtZXMgdGFzaworCisKK2lmIGV4aXN0cygiYWRhX3dpdGh1c2Vfb3JkaW5hcnkiKQorIiBEb24ndCBiZSBmYW5jeS4gRGlzcGxheSAid2l0aCIgYW5kICJ1c2UiIGFzIG9yZGluYXJ5IGtleXdvcmRzIGluIGFsbCBjYXNlcy4KKyBzeW4ga2V5d29yZCBhZGFLZXl3b3JkCQl3aXRoIHVzZQorZWxzZQorICIgSGlnaGxpZ2h0ICJ3aXRoIiBhbmQgInVzZSIgY2xhdXNlcyBsaWtlIEMncyAiI2luY2x1ZGUiIHdoZW4gdGhleSdyZSB1c2VkCisgIiB0byByZWZlcmVuY2Ugb3RoZXIgY29tcGlsYXRpb24gdW5pdHM7IG90aGVyd2lzZSB0aGV5J3JlIG9yZGluYXJ5IGtleXdvcmRzLgorICIgSWYgd2UgaGF2ZSB2aW0gNi4wIG9yIGxhdGVyLCB3ZSdsbCB1c2UgaXRzIGFkdmFuY2VkIHBhdHRlcm4tbWF0Y2hpbmcKKyAiIGNhcGFiaWxpdGllcyBzbyB0aGF0IHdlIHdvbid0IG1hdGNoIGxlYWRpbmcgc3BhY2VzLgorIHN5biBtYXRjaCBhZGFLZXl3b3JkCSJcPHdpdGhcPiIKKyBzeW4gbWF0Y2ggYWRhS2V5d29yZAkiXDx1c2VcPiIKKyBpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBtYXRjaCBhZGFCZWdpbldpdGggIl5ccypcKFwod2l0aFwoXHNcK3R5cGVcKVw9XClcfFwodXNlXClcKVw+IiBjb250YWlucz1hZGFJbmMKKyAgc3luIG1hdGNoIGFkYVNlbWlXaXRoCSI7XHMqXChcKHdpdGhcKFxzXCt0eXBlXClcPVwpXHxcKHVzZVwpXClcPiJsYz0xIGNvbnRhaW5zPWFkYUluYworIGVsc2UKKyAgc3luIG1hdGNoIGFkYUJlZ2luV2l0aCAiXlxzKlx6c1woXCh3aXRoXChcc1wrdHlwZVwpXD1cKVx8XCh1c2VcKVwpXD4iIGNvbnRhaW5zPWFkYUluYworICBzeW4gbWF0Y2ggYWRhU2VtaVdpdGgJIjtccypcenNcKFwod2l0aFwoXHNcK3R5cGVcKVw9XClcfFwodXNlXClcKVw+IiBjb250YWlucz1hZGFJbmMKKyBlbmRpZgorIHN5biBtYXRjaCBhZGFJbmMJIlw8d2l0aFw+IiBjb250YWluZWQgY29udGFpbnM9Tk9ORQorIHN5biBtYXRjaCBhZGFJbmMJIlw8d2l0aFxzXCt0eXBlXD4iIGNvbnRhaW5lZCBjb250YWlucz1OT05FCisgc3luIG1hdGNoIGFkYUluYwkiXDx1c2VcPiIgY29udGFpbmVkIGNvbnRhaW5zPU5PTkUKKyAiIFJlY29nbml6ZSAid2l0aCBudWxsIHJlY29yZCIgYXMgYSBrZXl3b3JkIChldmVuIHRoZSAicmVjb3JkIikuCisgc3luIG1hdGNoIGFkYUtleXdvcmQJIlw8d2l0aFxzXCtudWxsXHNcK3JlY29yZFw+IgorICIgQ29uc2lkZXIgZ2VuZXJpYyBmb3JtYWwgcGFyYW1ldGVycyBvZiBzdWJwcm9ncmFtcyBhbmQgcGFja2FnZXMgYXMga2V5d29yZHMuCisgaWYgdmVyc2lvbiA8IDYwMAorICBzeW4gbWF0Y2ggYWRhS2V5d29yZAkiO1xzKndpdGhcc1wrXChmdW5jdGlvblx8cHJvY2VkdXJlXHxwYWNrYWdlXClcPiIKKyAgc3luIG1hdGNoIGFkYUtleXdvcmQJIl5ccyp3aXRoXHNcK1woZnVuY3Rpb25cfHByb2NlZHVyZVx8cGFja2FnZVwpXD4iCisgZWxzZQorICBzeW4gbWF0Y2ggYWRhS2V5d29yZAkiO1xzKlx6c3dpdGhcc1wrXChmdW5jdGlvblx8cHJvY2VkdXJlXHxwYWNrYWdlXClcPiIKKyAgc3luIG1hdGNoIGFkYUtleXdvcmQJIl5ccypcenN3aXRoXHNcK1woZnVuY3Rpb25cfHByb2NlZHVyZVx8cGFja2FnZVwpXD4iCisgZW5kaWYKK2VuZGlmCisKKworIiBTdHJpbmcgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuCitzeW4gcmVnaW9uICBhZGFTdHJpbmcJCXN0YXJ0PSsiKyAgc2tpcD0rIiIrICBlbmQ9KyIrCitzeW4gbWF0Y2ggICBhZGFDaGFyYWN0ZXIJIicuJyIKKworIiBUb2RvIChvbmx5IGhpZ2hsaWdodGVkIGluIGNvbW1lbnRzKQorc3luIGtleXdvcmQgYWRhVG9kbyBjb250YWluZWQJVE9ETyBGSVhNRSBYWFgKKworIiBDb21tZW50cy4KK3N5biByZWdpb24gIGFkYUNvbW1lbnQJb25lbGluZSBjb250YWlucz1hZGFUb2RvIHN0YXJ0PSItLSIgIGVuZD0iJCIKKworCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2FkYV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9hZGFfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFRoZSBkZWZhdWx0IG1ldGhvZHMgZm9yIGhpZ2hsaWdodGluZy4gQ2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIuCisgIEhpTGluayBhZGFDaGFyYWN0ZXIJQ2hhcmFjdGVyCisgIEhpTGluayBhZGFDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIGFkYUNvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluayBhZGFLZXl3b3JkCUtleXdvcmQKKyAgSGlMaW5rIGFkYUxhYmVsCUxhYmVsCisgIEhpTGluayBhZGFOdW1iZXIJTnVtYmVyCisgIEhpTGluayBhZGFTaWduCU51bWJlcgorICBIaUxpbmsgYWRhT3BlcmF0b3IJT3BlcmF0b3IKKyAgSGlMaW5rIGFkYVByZXByb2MJUHJlUHJvYworICBIaUxpbmsgYWRhUmVwZWF0CVJlcGVhdAorICBIaUxpbmsgYWRhU3BlY2lhbAlTcGVjaWFsCisgIEhpTGluayBhZGFTdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluayBhZGFTdHJpbmcJU3RyaW5nCisgIEhpTGluayBhZGFTdHJ1Y3R1cmUJU3RydWN0dXJlCisgIEhpTGluayBhZGFUb2RvCVRvZG8KKyAgSGlMaW5rIGFkYVR5cGUJVHlwZQorICBIaUxpbmsgYWRhVHlwZWRlZglUeXBlZGVmCisgIEhpTGluayBhZGFTdG9yYWdlQ2xhc3MJU3RvcmFnZUNsYXNzCisgIEhpTGluayBhZGFCb29sZWFuCUJvb2xlYW4KKyAgSGlMaW5rIGFkYUV4Y2VwdGlvbglFeGNlcHRpb24KKyAgSGlMaW5rIGFkYUluYwlJbmNsdWRlCisgIEhpTGluayBhZGFFcnJvcglFcnJvcgorICBIaUxpbmsgYWRhU3BhY2VFcnJvcglFcnJvcgorICBIaUxpbmsgYWRhQnVpbHRpblR5cGUgVHlwZQorCisgIGlmIGV4aXN0cygiYWRhX2JlZ2luX3ByZXByb2MiKQorICAgIiBUaGlzIGlzIHRoZSBvbGQgZGVmYXVsdCBkaXNwbGF5OgorICAgSGlMaW5rIGFkYUJlZ2luCVByZVByb2MKKyAgIEhpTGluayBhZGFFbmQJUHJlUHJvYworICBlbHNlCisgICAiIFRoaXMgaXMgdGhlIG5ldyBkZWZhdWx0IGRpc3BsYXk6CisgICBIaUxpbmsgYWRhQmVnaW4JS2V5d29yZAorICAgSGlMaW5rIGFkYUVuZAlLZXl3b3JkCisgIGVuZGlmCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImFkYSIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2FmbGV4LnZpbSBiL3J1bnRpbWUvc3ludGF4L2FmbGV4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJjOThlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYWZsZXgudmltCkBAIC0wLDAgKzEsMTAwIEBACisKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglBZkxleCAoZnJvbSBMZXggc3ludGF4IGZpbGUpCisiIE1haW50YWluZXI6CU1hdGhpZXUgQ2xhYmF1dCA8bWF0aGlldS5jbGFiYXV0QGZyZWUuZnI+CisiIExhc3RDaGFuZ2U6CTAyIE1heSAyMDAxCisiIE9yaWdpbmFsOglMZXgsIG1haW50YWluZWQgYnkgRHIuIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLgorIiBDb21tZW50OglSZXBsYWNlZCBzb3VyY2luZyBjLnZpbSBmaWxlIGJ5IGFkYS52aW0gYW5kIHJlbmFtZSBsZXgqCisiCQlpbiBhZmxleCoKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgICBmaW5pc2gKK2VuZGlmCisKKyIgUmVhZCB0aGUgQWRhIHN5bnRheCB0byBzdGFydCB3aXRoCitpZiB2ZXJzaW9uIDwgNjAwCisgICBzbyA8c2ZpbGU+OnA6aC9hZGEudmltCitlbHNlCisgICBydW50aW1lISBzeW50YXgvYWRhLnZpbQorICAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworCisiIC0tLSBBZkxleCBzdHVmZiAtLS0KKworIkknZCBwcmVmZXIgdG8gdXNlIGFmbGV4LiogLCBidXQgaXQgZG9lc24ndCBoYW5kbGUgZm9yd2FyZCBkZWZpbml0aW9ucyB5ZXQKK3N5biBjbHVzdGVyIGFmbGV4TGlzdEdyb3VwCQljb250YWlucz1hZmxleEFiYnJ2QmxvY2ssYWZsZXhBYmJydixhZmxleEFiYnJ2LGFmbGV4QWJicnZSZWdFeHAsYWZsZXhJbmNsdWRlLGFmbGV4UGF0QmxvY2ssYWZsZXhQYXQsYWZsZXhCcmFjZSxhZmxleFBhdFN0cmluZyxhZmxleFBhdFRhZyxhZmxleFBhdFRhZyxhZmxleFBhdENvbW1lbnQsYWZsZXhQYXRDb2RlTGluZSxhZmxleE1vcmVQYXQsYWZsZXhQYXRTZXAsYWZsZXhTbGFzaFF1b3RlLGFmbGV4UGF0Q29kZSxjSW5QYXJlbixjVXNlckxhYmVsLGNPY3RhbFplcm8sY0NwcFNraXAsY0VyckluQnJhY2tldCxjRXJySW5QYXJlbixjT2N0YWxFcnJvcixjQ3BwT3V0Mgorc3luIGNsdXN0ZXIgYWZsZXhMaXN0UGF0Q29kZUdyb3VwCWNvbnRhaW5zPWFmbGV4QWJicnZCbG9jayxhZmxleEFiYnJ2LGFmbGV4QWJicnYsYWZsZXhBYmJydlJlZ0V4cCxhZmxleEluY2x1ZGUsYWZsZXhQYXRCbG9jayxhZmxleFBhdCxhZmxleEJyYWNlLGFmbGV4UGF0VGFnLGFmbGV4UGF0VGFnLGFmbGV4UGF0Q29tbWVudCxhZmxleFBhdENvZGVMaW5lLGFmbGV4TW9yZVBhdCxhZmxleFBhdFNlcCxhZmxleFNsYXNoUXVvdGUsY0luUGFyZW4sY1VzZXJMYWJlbCxjT2N0YWxaZXJvLGNDcHBTa2lwLGNFcnJJbkJyYWNrZXQsY0VyckluUGFyZW4sY09jdGFsRXJyb3IsY0NwcE91dDIKKworIiBBYmJyZXZpYXRpb25zIFNlY3Rpb24KK3N5biByZWdpb24gYWZsZXhBYmJydkJsb2NrCXN0YXJ0PSJeXChbYS16QS1aX11cK1x0XHwle1wpIiBlbmQ9Il4lJSQibWU9ZS0yCXNraXBubAluZXh0Z3JvdXA9YWZsZXhQYXRCbG9jayBjb250YWlucz1hZmxleEFiYnJ2LGFmbGV4SW5jbHVkZSxhZmxleEFiYnJ2Q29tbWVudAorc3luIG1hdGNoICBhZmxleEFiYnJ2CQkiXlxJXGkqXHMibWU9ZS0xCQkJc2tpcHdoaXRlCWNvbnRhaW5lZCBuZXh0Z3JvdXA9YWZsZXhBYmJydlJlZ0V4cAorc3luIG1hdGNoICBhZmxleEFiYnJ2CQkiXiVbc3hdIgkJCQkJY29udGFpbmVkCitzeW4gbWF0Y2ggIGFmbGV4QWJicnZSZWdFeHAJIlxzXFMuKiQibGM9MQkJCQljb250YWluZWQgbmV4dGdyb3VwPWFmbGV4QWJicnYsYWZsZXhJbmNsdWRlCitzeW4gcmVnaW9uIGFmbGV4SW5jbHVkZQltYXRjaGdyb3VwPWFmbGV4U2VwCXN0YXJ0PSJeJXsiIGVuZD0iJX0iCWNvbnRhaW5lZAljb250YWlucz1BTExCVVQsQGFmbGV4TGlzdEdyb3VwCitzeW4gcmVnaW9uIGFmbGV4QWJicnZDb21tZW50CXN0YXJ0PSJeXHNcKy9cKiIJZW5kPSJcKi8iCisKKyIlJSA6IFBhdHRlcm5zIHtBY3Rpb25zfQorc3luIHJlZ2lvbiBhZmxleFBhdEJsb2NrCW1hdGNoZ3JvdXA9VG9kbwlzdGFydD0iXiUlJCIgbWF0Y2hncm91cD1Ub2RvIGVuZD0iXiUlJCIJc2tpcG5sIHNraXB3aGl0ZSBjb250YWlucz1hZmxleFBhdCxhZmxleFBhdFRhZyxhZmxleFBhdENvbW1lbnQKK3N5biByZWdpb24gYWZsZXhQYXQJCXN0YXJ0PStcUysgc2tpcD0iXFxcXFx8XFwuIgllbmQ9IlxzIm1lPWUtMQljb250YWluZWQgbmV4dGdyb3VwPWFmbGV4TW9yZVBhdCxhZmxleFBhdFNlcCBjb250YWlucz1hZmxleFBhdFN0cmluZyxhZmxleFNsYXNoUXVvdGUsYWZsZXhCcmFjZQorc3luIHJlZ2lvbiBhZmxleEJyYWNlCXN0YXJ0PSJcWyIgc2tpcD0rXFxcXFx8XFwrCQllbmQ9Il0iCQljb250YWluZWQKK3N5biByZWdpb24gYWZsZXhQYXRTdHJpbmcJbWF0Y2hncm91cD1TdHJpbmcgc3RhcnQ9KyIrCXNraXA9K1xcXFxcfFxcIisJbWF0Y2hncm91cD1TdHJpbmcgZW5kPSsiKwljb250YWluZWQKK3N5biBtYXRjaCAgYWZsZXhQYXRUYWcJIl48XElcaSpcKCxcSVxpKlwpKj4qIgkJCWNvbnRhaW5lZCBuZXh0Z3JvdXA9YWZsZXhQYXQsYWZsZXhQYXRUYWcsYWZsZXhNb3JlUGF0LGFmbGV4UGF0U2VwCitzeW4gbWF0Y2ggIGFmbGV4UGF0VGFnCStePFxJXGkqXCgsXElcaSpcKSo+KlwoXFxcXFwpKlxcIisJCWNvbnRhaW5lZCBuZXh0Z3JvdXA9YWZsZXhQYXQsYWZsZXhQYXRUYWcsYWZsZXhNb3JlUGF0LGFmbGV4UGF0U2VwCitzeW4gcmVnaW9uIGFmbGV4UGF0Q29tbWVudAlzdGFydD0iXlxzKi9cKiIgZW5kPSJcKi8iCQlza2lwbmwJY29udGFpbmVkIGNvbnRhaW5zPWNUb2RvIG5leHRncm91cD1hZmxleFBhdENvbW1lbnQsYWZsZXhQYXQsYWZsZXhQYXRTdHJpbmcsYWZsZXhQYXRUYWcKK3N5biBtYXRjaCAgYWZsZXhQYXRDb2RlTGluZQkiLiokIgkJCQkJY29udGFpbmVkIGNvbnRhaW5zPUFMTEJVVCxAYWZsZXhMaXN0R3JvdXAKK3N5biBtYXRjaCAgYWZsZXhNb3JlUGF0CSJccyp8XHMqJCIJCQlza2lwbmwJY29udGFpbmVkIG5leHRncm91cD1hZmxleFBhdCxhZmxleFBhdFRhZyxhZmxleFBhdENvbW1lbnQKK3N5biBtYXRjaCAgYWZsZXhQYXRTZXAJIlxzXCsiCQkJCQljb250YWluZWQgbmV4dGdyb3VwPWFmbGV4TW9yZVBhdCxhZmxleFBhdENvZGUsYWZsZXhQYXRDb2RlTGluZQorc3luIG1hdGNoICBhZmxleFNsYXNoUXVvdGUJK1woXFxcXFwpKlxcIisJCQkJY29udGFpbmVkCitzeW4gcmVnaW9uIGFmbGV4UGF0Q29kZSBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0ieyIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSJ9Iglza2lwbmwgY29udGFpbmVkIGNvbnRhaW5zPUFMTEJVVCxAYWZsZXhMaXN0UGF0Q29kZUdyb3VwCisKK3N5biBrZXl3b3JkIGFmbGV4Q0Z1bmN0aW9ucwlCRUdJTglpbnB1dAl1bnB1dAl3b3V0cHV0CXl5bGVuZwl5eWxvb2sJeXl0ZXh0CitzeW4ga2V5d29yZCBhZmxleENGdW5jdGlvbnMJRUNITwlvdXRwdXQJd2lucHV0CXd1bnB1dAl5eWxlc3MJeXltb3JlCXl5d3JhcAorCisiIDxjLnZpbT4gaW5jbHVkZXMgc2V2ZXJhbCBBTExCVVRzOyB0aGVzZSBoYXZlIHRvIGJlIHRyZWF0ZWQgc28gYXMgdG8gZXhjbHVkZSBhZmxleCogZ3JvdXBzCitzeW4gY2x1c3RlciBjUGFyZW5Hcm91cAlhZGQ9YWZsZXguKgorc3luIGNsdXN0ZXIgY0RlZmluZUdyb3VwCWFkZD1hZmxleC4qCitzeW4gY2x1c3RlciBjUHJlUHJvY0dyb3VwCWFkZD1hZmxleC4qCitzeW4gY2x1c3RlciBjTXVsdGlHcm91cAlhZGQ9YWZsZXguKgorCisiIFN5bmNocm9uaXphdGlvbgorc3luIHN5bmMgY2xlYXIKK3N5biBzeW5jIG1pbmxpbmVzPTMwMAorc3luIHN5bmMgbWF0Y2ggYWZsZXhTeW5jUGF0CWdyb3VwaGVyZSAgYWZsZXhQYXRCbG9jawkiXiVbYS16QS1aXSIKK3N5biBzeW5jIG1hdGNoIGFmbGV4U3luY1BhdAlncm91cHRoZXJlIGFmbGV4UGF0QmxvY2sJIl48JCIKK3N5biBzeW5jIG1hdGNoIGFmbGV4U3luY1BhdAlncm91cHRoZXJlIGFmbGV4UGF0QmxvY2sJIl4lJSQiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAorCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYWZsZXhfc3ludGF4X2luaXRzIikKKyAgIGlmIHZlcnNpb24gPCA1MDgKKyAgICAgIGxldCBkaWRfYWZsZXhfc3ludGF4X2luaXRzID0gMQorICAgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgIGVsc2UKKyAgICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgZW5kaWYKKyAgSGlMaW5rCWFmbGV4U2xhc2hRdW90ZQlhZmxleFBhdAorICBIaUxpbmsJYWZsZXhCcmFjZQkJYWZsZXhQYXQKKyAgSGlMaW5rIGFmbGV4QWJicnZDb21tZW50CWFmbGV4UGF0Q29tbWVudAorCisgIEhpTGluawlhZmxleEFiYnJ2CQlTcGVjaWFsQ2hhcgorICBIaUxpbmsJYWZsZXhBYmJydlJlZ0V4cAlNYWNybworICBIaUxpbmsJYWZsZXhDRnVuY3Rpb25zCUZ1bmN0aW9uCisgIEhpTGluawlhZmxleE1vcmVQYXQJU3BlY2lhbENoYXIKKyAgSGlMaW5rCWFmbGV4UGF0CQlGdW5jdGlvbgorICBIaUxpbmsJYWZsZXhQYXRDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rCWFmbGV4UGF0U3RyaW5nCUZ1bmN0aW9uCisgIEhpTGluawlhZmxleFBhdFRhZwkJU3BlY2lhbAorICBIaUxpbmsJYWZsZXhTZXAJCURlbGltaXRlcgorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYWZsZXgiCisKKyIgdmltOnRzPTEwCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9haGRsLnZpbSBiL3J1bnRpbWUvc3ludGF4L2FoZGwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDE3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9haGRsLnZpbQpAQCAtMCwwICsxLDk0IEBACisiIFZpbSBzeW4gZmlsZQorIiBMYW5ndWFnZToJQWx0ZXJhIEFIREwKKyIgTWFpbnRhaW5lcjoJSm9obiBDb29rIDxqb2huLmNvb2tAa2xhLXRlbmNvci5jb20+CisiIExhc3QgQ2hhbmdlOgkyMDAxIEFwciAyNQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyJ0aGlzIGxhbmd1YWdlIGlzIG9ibGl2aW91cyB0byBjYXNlLgorc3luIGNhc2UgaWdub3JlCisKKyIgYSBidW5jaCBvZiBrZXl3b3Jkcworc3luIGtleXdvcmQgYWhkbEtleXdvcmQgYXNzZXJ0IGJlZ2luIGJpZGlyIGJpdHMgYnVyaWVkIGNhc2UgY2xpcXVlCitzeW4ga2V5d29yZCBhaGRsS2V5d29yZCBjb25uZWN0ZWRfcGlucyBjb25zdGFudCBkZWZhdWx0cyBkZWZpbmUgZGVzaWduCitzeW4ga2V5d29yZCBhaGRsS2V5d29yZCBkZXZpY2UgZWxzZSBlbHNpZiBlbmQgZm9yIGZ1bmN0aW9uIGdlbmVyYXRlCitzeW4ga2V5d29yZCBhaGRsS2V5d29yZCBnbmQgaGVscF9pZCBpZiBpbiBpbmNsdWRlIGlucHV0IGlzIG1hY2hpbmUKK3N5biBrZXl3b3JkIGFoZGxLZXl3b3JkIG5vZGUgb2Ygb3B0aW9ucyBvdGhlcnMgb3V0cHV0IHBhcmFtZXRlcnMKK3N5biBrZXl3b3JkIGFoZGxLZXl3b3JkIHJldHVybnMgc3RhdGVzIHN1YmRlc2lnbiB0YWJsZSB0aGVuIHRpdGxlIHRvCitzeW4ga2V5d29yZCBhaGRsS2V5d29yZCB0cmlfc3RhdGVfbm9kZSB2YXJpYWJsZSB2Y2Mgd2hlbiB3aXRoCisKKyIgYSBidW5jaCBvZiB0eXBlcworc3luIGtleXdvcmQgYWhkbElkZW50aWZpZXIgY2FycnkgY2FzY2FkZSBkZmZlIGRmZiBleHAgZ2xvYmFsCitzeW4ga2V5d29yZCBhaGRsSWRlbnRpZmllciBqa2ZmZSBqa2ZmIGxhdGNoIGxjZWxsIG1jZWxsIG1lbW9yeSBvcGVuZHJuCitzeW4ga2V5d29yZCBhaGRsSWRlbnRpZmllciBzb2Z0IHNyZmZlIHNyZmYgdGZmZSB0ZmYgdHJpIHdpcmUgeAorCitzeW4ga2V5d29yZCBhaGRsTWVnYWZ1bmN0aW9uIGxwbV9hbmQgbHBtX2J1c3RyaSBscG1fY2xzaGlmdCBscG1fY29uc3RhbnQKK3N5biBrZXl3b3JkIGFoZGxNZWdhZnVuY3Rpb24gbHBtX2RlY29kZSBscG1faW52IGxwbV9tdXggbHBtX29yIGxwbV94b3IKK3N5biBrZXl3b3JkIGFoZGxNZWdhZnVuY3Rpb24gYnVzbXV4IG11eAorCitzeW4ga2V5d29yZCBhaGRsTWVnYWZ1bmN0aW9uIGRpdmlkZSBscG1fYWJzIGxwbV9hZGRfc3ViIGxwbV9jb21wYXJlCitzeW4ga2V5d29yZCBhaGRsTWVnYWZ1bmN0aW9uIGxwbV9jb3VudGVyIGxwbV9tdWx0CisKK3N5biBrZXl3b3JkIGFoZGxNZWdhZnVuY3Rpb24gYWx0ZHByYW0gY3NmaWZvIGRjZmlmbyBzY2ZpZm8gY3NkcHJhbSBscG1fZmYKK3N5biBrZXl3b3JkIGFoZGxNZWdhZnVuY3Rpb24gbHBtX2xhdGNoIGxwbV9zaGlmdHJlZyBscG1fcmFtX2RxIGxwbV9yYW1faW8KK3N5biBrZXl3b3JkIGFoZGxNZWdhZnVuY3Rpb24gbHBtX3JvbSBscG1fZGZmIGxwbV90ZmYgY2xrbG9jayBwbGwgbnRzYworCitzeW4ga2V5d29yZCBhaGRsVG9kbyBjb250YWluZWQgVE9ETworCisiIFN0cmluZyBjb250c3RhbnRzCitzeW4gcmVnaW9uIGFoZGxTdHJpbmcgc3RhcnQ9KyIrICBza2lwPStcXCIrICBlbmQ9KyIrCisKKyIgdmFsaWQgaW50ZWdlciBudW1iZXIgZm9ybWF0cyAoZGVjaW1hbCwgYmluYXJ5LCBvY3RhbCwgaGV4KQorc3luIG1hdGNoIGFoZGxOdW1iZXIgJ1w8XGRcK1w+Jworc3luIG1hdGNoIGFoZGxOdW1iZXIgJ1w8YiJcKDBcfDFcfHhcKVwrIicKK3N5biBtYXRjaCBhaGRsTnVtYmVyICdcPFwob1x8cVwpIlxvXCsiJworc3luIG1hdGNoIGFoZGxOdW1iZXIgJ1w8XChoXHx4XCkiXHhcKyInCisKKyIgb3BlcmF0b3JzCitzeW4gbWF0Y2ggICBhaGRsT3BlcmF0b3IgIlshJiMkK1wtPD49PzpcXl0iCitzeW4ga2V5d29yZCBhaGRsT3BlcmF0b3Igbm90IGFuZCBuYW5kIG9yIG5vciB4b3IgeG5vcgorc3luIGtleXdvcmQgYWhkbE9wZXJhdG9yIG1vZCBkaXYgbG9nMiB1c2VkIGNlaWwgZmxvb3IKKworIiBvbmUgbGluZSBhbmQgbXVsdGktbGluZSBjb21tZW50cworIiAoZGVmaW5lIHRoZXNlIGFmdGVyIGFoZGxPcGVyYXRvciBzbyAtLSBvdmVycmlkZXMgLSkKK3N5biBtYXRjaCAgYWhkbENvbW1lbnQgIi0tLioiIGNvbnRhaW5zPWFoZGxOdW1iZXIsYWhkbFRvZG8KK3N5biByZWdpb24gYWhkbENvbW1lbnQgc3RhcnQ9IiUiIGVuZD0iJSIgY29udGFpbnM9YWhkbE51bWJlcixhaGRsVG9kbworCisiIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycworc3luIG1hdGNoICAgYWhkbFNwZWNpYWxDaGFyICJbXFtcXSgpLiw7XSIKKworc3luIHN5bmMgbWlubGluZXM9MQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9haGRsX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2FoZGxfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyAgSGlMaW5rIGFoZGxOdW1iZXIJCWFoZGxTdHJpbmcKKyAgSGlMaW5rIGFoZGxNZWdhZnVuY3Rpb24JYWhkbElkZW50aWZpZXIKKyAgSGlMaW5rIGFoZGxTcGVjaWFsQ2hhcglTcGVjaWFsQ2hhcgorICBIaUxpbmsgYWhkbEtleXdvcmQJCVN0YXRlbWVudAorICBIaUxpbmsgYWhkbFN0cmluZwkJU3RyaW5nCisgIEhpTGluayBhaGRsQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgYWhkbElkZW50aWZpZXIJCUlkZW50aWZpZXIKKyAgSGlMaW5rIGFoZGxPcGVyYXRvcgkJT3BlcmF0b3IKKyAgSGlMaW5rIGFoZGxUb2RvCQlUb2RvCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImFoZGwiCisiIHZpbTp0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hbWlnYS52aW0gYi9ydW50aW1lL3N5bnRheC9hbWlnYS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlODhhZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2FtaWdhLnZpbQpAQCAtMCwwICsxLDEwMSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUFtaWdhRG9zCisiIE1haW50YWluZXI6CURyLiBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gPE5kck9jaGlwU0BQY2FtcGJlbGxBZmFtaWx5Lk1iaXo+CisiIExhc3QgQ2hhbmdlOglTZXAgMDIsIDIwMDMKKyIgVmVyc2lvbjogICAgIDQKKyIgVVJMOglodHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL2luZGV4Lmh0bWwjdmltbGlua3Nfc3ludGF4CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyIgQW1pZ2EgRGV2aWNlcworc3luIG1hdGNoIGFtaURldiAiXChwYXJcfHNlclx8cHJ0XHxjb25cfG5pbFwpOiIKKworIiBBbWlnYSBhbGlhc2VzIGFuZCBwYXRocworc3luIG1hdGNoIGFtaUFsaWFzCSJcPFthLXpBLVpdW2EtekEtWjAtOV1cKzoiCitzeW4gbWF0Y2ggYW1pQWxpYXMJIlw8W2EtekEtWl1bYS16QS1aMC05XVwrOlthLXpBLVowLTkvXSovIgorCisiIHN0cmluZ3MKK3N5biByZWdpb24gYW1pU3RyaW5nCXN0YXJ0PSsiKyBlbmQ9KyIrIG9uZWxpbmUKKworIiBudW1iZXJzCitzeW4gbWF0Y2ggYW1pTnVtYmVyCSJcPFxkXCtcPiIKKworIiBMb2dpYyBmbG93CitzeW4gcmVnaW9uCWFtaUZsb3cJbWF0Y2hncm91cD1TdGF0ZW1lbnQgc3RhcnQ9ImlmIgltYXRjaGdyb3VwPVN0YXRlbWVudCBlbmQ9ImVuZGlmIgljb250YWlucz1BTEwKK3N5biBrZXl3b3JkCWFtaUZsb3cJc2tpcCBlbmRza2lwCitzeW4gbWF0Y2gJYW1pRXJyb3IJImVsc2VcfGVuZGlmIgorc3luIGtleXdvcmQJYW1pRWxzZSBjb250YWluZWQJZWxzZQorCitzeW4ga2V5d29yZAlhbWlUZXN0IGNvbnRhaW5lZAlub3Qgd2FybiBlcnJvciBmYWlsIGVxIGd0IGdlIHZhbCBleGlzdHMKKworIiBlY2hvIGV4Y2VwdGlvbgorc3luIHJlZ2lvbglhbWlFY2hvCW1hdGNoZ3JvdXA9U3RhdGVtZW50IHN0YXJ0PSJcPGVjaG9cPiIgZW5kPSIkIiBvbmVsaW5lIGNvbnRhaW5zPWFtaUNvbW1lbnQKK3N5biByZWdpb24JYW1pRWNobwltYXRjaGdyb3VwPVN0YXRlbWVudCBzdGFydD0iXlwuW2JCXVtyUl1bYUFdIiBlbmQ9IiQiIG9uZWxpbmUKK3N5biByZWdpb24JYW1pRWNobwltYXRjaGdyb3VwPVN0YXRlbWVudCBzdGFydD0iXlwuW2tLXVtlRV1bdFRdIiBlbmQ9IiQiIG9uZWxpbmUKKworIiBjb21tYW5kcworc3luIGtleXdvcmQJYW1pS2V5CWFkZGJ1ZmZlcnMJY29weQlmYXVsdAlqb2luCXBvaW50ZXIJc2V0ZGF0ZQorc3luIGtleXdvcmQJYW1pS2V5CWFkZG1vbml0b3IJY3B1CWZpbGVub3RlCWtleXNob3cJcHJpbnRlcglzZXRlbnYKK3N5biBrZXl3b3JkCWFtaUtleQlhbGlhcwlkYXRlCWZpeGZvbnRzCWxhYglwcmludGVyZ2Z4CXNldGZvbnQKK3N5biBrZXl3b3JkCWFtaUtleQlhc2sJZGVsZXRlCWZrZXkJbGlzdAlwcmludGZpbGVzCXNldG1hcAorc3luIGtleXdvcmQJYW1pS2V5CWFzc2lnbglkaXIJZm9udAlsb2Fkd2IJcHJvbXB0CXNldHBhdGNoCitzeW4ga2V5d29yZAlhbWlLZXkJYXV0b3BvaW50CWRpc2tjaGFuZ2UJZm9ybWF0CWxvY2sJcHJvdGVjdAlzb3J0CitzeW4ga2V5d29yZAlhbWlLZXkJYXZhaWwJZGlza2NvcHkJZ2V0CW1hZ3RhcGUJcXVpdAlzdGFjaworc3luIGtleXdvcmQJYW1pS2V5CWJpbmRkcml2ZXJzCWRpc2tkb2N0b3IJZ2V0ZW52CW1ha2VkaXIJcmVsYWJlbAlzdGF0dXMKK3N5biBrZXl3b3JkCWFtaUtleQliaW5kbW9uaXRvcglkaXNwbGF5CWdyYXBoaWNkdW1wCW1ha2VsaW5rCXJlbXJhZAl0aW1lCitzeW4ga2V5d29yZAlhbWlLZXkJYmxhbmtlcgkJaWNvbmVkaXQJbW9yZQlyZW5hbWUJdHlwZQorc3luIGtleXdvcmQJYW1pS2V5CWJyZWFrCWVkCWljb250cm9sCW1vdW50CXJlc2lkZW50CXVuYWxpYXMKK3N5biBrZXl3b3JkCWFtaUtleQljYWxjdWxhdG9yCWVkaXQJaWNvbngJbmV3Y2xpCXJ1bgl1bnNldAorc3luIGtleXdvcmQJYW1pS2V5CWNkCWVuZGNsaQlpaGVscAluZXdzaGVsbAlzYXkJdW5zZXRlbnYKK3N5biBrZXl3b3JkCWFtaUtleQljaGFuZ2V0YXNrcHJpCWVuZHNoZWxsCWluZm8Jbm9jYXBzbG9jawlzY3JlZW5tb2RlCXZlcnNpb24KK3N5biBrZXl3b3JkCWFtaUtleQljbG9jawlldmFsCWluaXRwcmludGVyCW5vZmFzdG1lbQlzZWFyY2gJd2FpdAorc3luIGtleXdvcmQJYW1pS2V5CWNtZAlleGNoYW5nZQlpbnB1dAlvdmVyc2NhbglzZXJpYWwJd2JwYXR0ZXJuCitzeW4ga2V5d29yZAlhbWlLZXkJY29sb3JzCWV4ZWN1dGUJaW5zdGFsbAlwYWxldHRlCXNldAl3aGljaAorc3luIGtleXdvcmQJYW1pS2V5CWNvbmNsaXAJZmFpbGF0CWlwcmVmcwlwYXRoCXNldGNsb2NrCXdoeQorCisiIGNvbW1lbnRzCitzeW4gY2x1c3RlcglhbWlDb21tZW50R3JvdXAgY29udGFpbnM9YW1pVG9kbyxAU3BlbGwKK3N5biBjYXNlIGlnbm9yZQorc3luIGtleXdvcmQJYW1pVG9kbwljb250YWluZWQJdG9kbworc3luIGNhc2UgbWF0Y2gKK3N5biBtYXRjaAlhbWlDb21tZW50CSI7LiokIiBjb250YWlucz1hbWlDb21tZW50R3JvdXAKKworIiBzeW5jCitzeW4gc3luYyBsaW5lcz01MAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9hbWlnYV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9hbWlnYV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBhbWlBbGlhcwlUeXBlCisgIEhpTGluayBhbWlDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIGFtaURldglUeXBlCisgIEhpTGluayBhbWlFY2hvCVN0cmluZworICBIaUxpbmsgYW1pRWxzZQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGFtaUVycm9yCUVycm9yCisgIEhpTGluayBhbWlLZXkJU3RhdGVtZW50CisgIEhpTGluayBhbWlOdW1iZXIJTnVtYmVyCisgIEhpTGluayBhbWlTdHJpbmcJU3RyaW5nCisgIEhpTGluayBhbWlUZXN0CVNwZWNpYWwKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYW1pZ2EiCisKKyIgdmltOnRzPTE1CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hbWwudmltIGIvcnVudGltZS9zeW50YXgvYW1sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2IxNmYxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYW1sLnZpbQpAQCAtMCwwICsxLDE1NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUFNTCAoQVJDL0lORk8gQXJjIE1hY3JvIExhbmd1YWdlKQorIiBXcml0dGVuIEJ5OglOaWtraSBLbnVpdCA8Tmlra2kuS251aXRAZ2VtczMuZ292LmJjLmNhPgorIiBNYWludGFpbmVyOglUb2RkIEdsb3ZlciA8dG9kZC5nbG92ZXJAZ2VtczkuZ292LmJjLmNhPgorIiBMYXN0IENoYW5nZToJMjAwMSBNYXkgMTAKKworIiBGVVRVUkUgQ09ESU5HOiAgQm9sZCBhcHBsaWNhdGlvbiBjb21tYW5kcyBhZnRlciAmc3lzLCAmdHR5CisiCQkgIE9ubHkgaGlnaGxpZ2h0IGFtbCBGdW5jdGlvbnMgYXQgdGhlIGJlZ2lubmluZworIgkJICAgIG9mIFtdLCBpbiBvcmRlciB0byBhdm9pZCAtcmVhZCBoaWdobGlnaHRlZCwKKyIJCSAgICBvciBbcXVvdGVdIHN0cmluZ3MgaGlnaGxpZ2h0ZWQKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBBUkMsIEFSQ0VESVQsIEFSQ1BMT1QsIExJQlJBUklBTiwgR1JJRCwgU0NIRU1BRURJVCByZXNlcnZlZCB3b3JkcywKKyIgZGVmaW5lZCBhcyBrZXl3b3Jkcy4KKworc3luIGtleXdvcmQgYW1sQXJjQ21kIGNvbnRhaW5lZCAgMmJ1dHRvbiBhYmIgYWJiW3JldmlhdGlvbnNdIGFicyBhYyBhY29zIGFjb3NoIGFkZCBhZGRjW29nb2F0dF0gYWRkY29nb2F0dCBhZGRmW2VhdHVyZWNsYXNzXSBhZGRoW2lzdG9yeV0gYWRkaSBhZGRpbVthZ2VdIGFkZGluZGV4YXR0IGFkZGl0W2VtXSBhZGRpdGVtIGFkZHJlc3NiW3VpbGRdIGFkZHJlc3NjW3JlYXRlXSBhZGRyZXNzZVtycm9yc10gYWRkcmVzc2VkaXQgYWRkcmVzc21bYXRjaF0gYWRkcmVzc3BbYXJzZV0gYWRkcmVzc3RbZXN0XSBhZGRyb1t1dGVtZWFzdXJlXSBhZGRyb3V0ZW1lYXN1cmUgYWRkdGVbeHRdIGFkZHRvW3N0YWNrXSBhZGR3W29ya3RhYmxlXSBhZGR4W3ldIGFkalt1c3RdIGFkbVtpbmxpY2Vuc2VdIGFkcltnZ3JpZF0gYWRzIGFkc2FbcmNdIGFlIGFmIGFnW2dyZWdhdGVdIGFpIGFpW3JlcXVlc3RdIGFpcmVxdWVzdCBhbCBhbGlhW3NdIGFsaWdbbl0gYWx0W2VyYXJjaGl2ZV0gYW1bc2FyY10gYW5kIGFubm9hW2xpZ25tZW50XSBhbm5vYWRkIGFubm9jYXB0dXJlIGFubm9jbFtpcF0gYW5ub2NvW3ZlcmFnZV0gYW5ub2N1cnZlIGFubm9lW2RpdF0gYW5ub2VkaXQgYW5ub2YgYW5ub2ZlYXR1cmUgYW5ub2ZpdCBhbm5vaXRlbSBhbm5vbGFbeWVyXSBhbm5vbGVbdmVsXSBhbm5vbGV2ZWwgYW5ub2xpbmUgYW5ub29mZnNldCBhbm5vcFtvc2l0aW9uXSBhbm5vcGxhY2UgYW5ub3NbaXplXSBhbm5vc2VsZWN0ZmVhdHVyIGFubm9zZXQgYW5ub3N1bSBhbm5vc3ltYm9sIGFubm90IGFubm90W2V4dF0gYW5ub3RleHQgYW5ub3R5cGUgYW8gYXAgYXBtW29kZV0gYXBwW2VuZF0gYXJjIGFyY2FkW3NdIGFyY2FyW3Jvd3NdIGFyY2Nbb2dvXSBhcmNkZlthZF0gYXJjZGlbbWVdIGFyY2RsW2ddIGFyY2R4W2ZdIGFyY2VkW2l0XSBhcmNlZGl0IGFyY2VuW2R0ZXh0XSBhcmNmW29udF0gYXJjaWdkW3NdIGFyY2lnZVtzXSBhcmNsYVtiZWxdIGFyY2xpW25lc10gYXJjbWFbcmtlcnNdIGFyY21vW3NzXQorc3luIGtleXdvcmQgYW1sQXJjQ21kIGNvbnRhaW5lZCAgYXJjcGxbb3RdIGFyY3Bsb3QgYXJjcG9baW50XSBhcmNyW291dGVdIGFyY3MgYXJjc2NbaXRleF0gYXJjc2VbY3Rpb25dIGFyY3NoW2FwZV0gYXJjc2xbZl0gYXJjc25bYXBdIGFyY3NwW290XSBhcmN0ZVt4dF0gYXJjdGlnW2VyXSBhcmN0aW4gYXJjdG9bb2xzXSBhcmN0b29scyBhcmN0eVtwZV0gYXJlYSBhcmVhcVt1ZXJ5XSBhcm0gYXJyb3cgYXJyb3dzW2l6ZV0gYXJyb3d0W3lwZV0gYXMgYXNjIGFzY2lpZ1tyaWRdIGFzY2lpaFtlbHBdIGFzY2lpaGVscCBhc2NvW25uZWN0XSBhc2Nvbm5lY3QgYXNkIGFzZGFbdGFiYXNlXSBhc2RpW3Njb25uZWN0XSBhc2Rpc2Nvbm5lY3QgYXNlbFtlY3RdIGFzZXhbZWN1dGVdIGFzZiBhc2luIGFzaW5oIGFzcFtlY3RdIGFzcltlYWRsb2Nrc10gYXN0W3JhY2VdIGF0IGF0YW4gYXRhbjIgYXRhbmggYXR1c2FnZSBhdWRbaXR0cmFpbF0gYXV0b2lbbmNyZW1lbnRdIGF1dG9sW2lua10gYXhpcyBheGlzaFthdGNoXSBheGlzbFthYmVsc10gYXhpc3JbdWxlcl0gYXhpc3RbZXh0XSBiYWNba2xvY2tzeW1ib2xdIGJhY2tjb3ZlcmFnZSBiYWNrZW52aXJvbm1lbnQgYmFja25vZGVhbmdsZWl0ZSBiYWNrc3ltYm9saXRlbSBiYWNrdGV4dGl0ZW0gYmFzZVtzZWxlY3RdIGJhc2lbbl0gYmF0W2NoXSBiYyBiZSBiZVtsbHNdIGJsYWNrb3V0IGJsb2NrbWFqW29yaXR5XSBibG9ja21heCBibG9ja21lYVtuXSBibG9ja21lZFtpYW5dIGJsb2NrbWluIGJsb2NrbWlub1tyaXR5XSBibG9ja3JbYW5nZV0gYmxvY2tzdFtkXSBibG9ja3N1W21dIGJsb2NrdlthcmlldHldIGJuYWkgYm91W25kYXJ5Y2xlYW5dIGJveCBicltpZWZdIGJzaSBidGkgYnVmW2Zlcl0gYnVnW2Zvcm1dIGJ1Z2Zvcm0gYnVpbGQgYnVpbGRzW3RhXSBidWlsZHZbYXRdIGNhbGNvW21wXSBjYWxjb21wIGNhbGN1W2xhdGVdIGNhbGlbYnJhdGVyb3V0ZXNdIGNhbGlicmF0ZXJvdXRlcyBjYW5bZF0gY2FydHJbZWFkXSBjYXJ0cmVhZAorc3luIGtleXdvcmQgYW1sQXJjQ21kIGNvbnRhaW5lZCAgY2FydHdbcml0ZV0gY2FydHdyaXRlIGNlaVtsXSBjZWxbbHZhbHVlXSBjZW5bdHJvaWRsYWJlbHNdIGNnbSBjZ21lW3NjYXBlXSBjaGFbbmdlXSBjaGVja2luIGNoZWNraW5yZWwgY2hlY2tvdXQgY2hlY2tvdXRyZWwgY2htW29kXSBjaG93biBjaG93bnRbcmFuc2FjdGlvbl0gY2hvd250cmFuIGNob3dudHJhbnNhY3Rpb24gY2kgY2lbcmNsZV0gY2lyIGNsYXNzIGNsYXNzcFtyb2JdIGNsYXNzc1tpZ10gY2xhc3NzYW1wbGUgY2xlYW4gY2xlYXIgY2xlYXJzW2VsZWN0XSBjbGlwIGNsaXBnW3JhcGhleHRlbnRdIGNsaXBtW2FwZXh0ZW50XSBjbG9bc2VkYXRhYmFzZV0gY250dnJ0IGNvIGNvZFtlZmluZF0gY29nW29pbnZlcnNlXSBjb2dvY29tIGNvZ29lbnYgY29nb21lbnUgY29sbFtvY2F0ZV0gY29sb3IgY29sb3IyYltsdWVdIGNvbG9yMmdbcmVlbl0gY29sb3IyaFt1ZV0gY29sb3IycltlZF0gY29sb3Iyc1thdF0gY29sb3IydlthbF0gY29sb3JjaGFydCBjb2xvcmVkaXQgY29sb3JoW2Nic10gY29sb3JoY2JzIGNvbHVbbW5zXSBjb21iW2luZV0gY29tbVthbmRzXSBjb21tYW5kcyBjb24gY29ubmVjdCBjb25uZWN0dVtzZXJdIGNvbnNbaXN0XSBjb250b1t1cl0gY29udHJbb2xwb2ludHNdIGNvbnZlcnRkW29jXSBjb252ZXJ0ZG9jIGNvbnZlcnRpW21hZ2VdIGNvbnZlcnRsYVt5ZXJdIGNvbnZlcnRsaVticmFyeV0gY29udmVydHJbZW1hcF0gY29udmVydHdbb3Jrc3BhY2VdIGNvb1tyZGluYXRlXSBjb29yZGluYXRlIGNvb3JkaW5hdGVzIGNvcHkgY29weWZbZWF0dXJlc10gY29weWlbbmZvXSBjb3B5bFtheWVyXSBjb3B5byBjb3B5b1t1dF0gY29weW91dCBjb3B5c1t0YWNrXSBjb3B5d1tvcmtzcGFjZV0gY29weXdvcmtzcGFjZSBjb3IgY29ycltpZG9yXSBjb3JyZWxhdGlvbiBjb3MgY29zaCBjb3N0YVtsbG9jYXRpb25dIGNvc3RiW2Fja2xpbmtdIGNvc3RkW2lzdGFuY2VdIGNvc3RwW2F0aF0gY291W250dmVydGljZXNdCitzeW4ga2V5d29yZCBhbWxBcmNDbWQgY29udGFpbmVkICBjb3VudHZlcnRpY2VzIGNwdyBjciBjcmVhdGUgY3JlYXRlMltkaW5kZXhdIGNyZWF0ZWFbdHRyaWJ1dGVzXSBjcmVhdGVjYVt0YWxvZ10gY3JlYXRlY29bZ29dIGNyZWF0ZWNvZ28gY3JlYXRlZltlYXR1cmVdIGNyZWF0ZWluZFtleF0gY3JlYXRlaW5mW290YWJsZV0gY3JlYXRlbGFiW2Vsc10gY3JlYXRlbGF5W2VyXSBjcmVhdGVsaVticmFyeV0gY3JlYXRlbltldGluZGV4XSBjcmVhdGVyW2VtYXBdIGNyZWF0ZXNbeXN0YWJsZXNdIGNyZWF0ZXRhW2JsZXNwYWNlXSBjcmVhdGV0aVtuXSBjcmVhdGV3W29ya3NwYWNlXSBjcmVhdGV3b3Jrc3BhY2UgY3MgY3VsZGVzYWMgY3Vyc1tvcl0gY3VydlthdHVyZV0gY3VydmUzcHQgY3V0W2ZpbGxdIGN1dG9mZiBjdyBjeFtvcl0gZGEgZGFyW2N5Zmxvd10gZGF0W2FzZXRdIGRiYVtzZWluZm9dIGRibXNjIGRibXNjW3Vyc29yXSBkYm1zY3Vyc29yIGRibXNlW3hlY3V0ZV0gZGJtc2lbbmZvXSBkYm1zc1tldF0gZGUgZGVsZXRlIGRlbGV0ZWFbcnJvd3NdIGRlbGV0ZXRbaWNdIGRlbGV0ZXdbb3Jrc3BhY2VdIGRlbGV0ZXdvcmtzcGFjZSBkZW1nW3JpZF0gZGVtbFthdHRpY2VdIGRlbmRbcm9ncmFtXSBkZW5zaWZ5IGRlbnNpZnlhW3JjXSBkZXNjcmliZSBkZXNjcmliZWFbcmNoaXZlXSBkZXNjcmliZWxbYXR0aWNlXSBkZXNjcmliZXRpW25dIGRlc2NyaWJldHJbYW5zXSBkZXNjcmliZXRyYW5zIGRldiBkZlthZGFyY10gZGcgZGlmW2ZdIGRpZ2lbdGl6ZXJdIGRpZ3RbZXN0XSBkaW1bZWFyY10gZGlyIGRpcltlY3RvcnldIGRpcmVjdG9yeSBkaXNhW2JsZXBhbnpvb21dIGRpc2Nvbm5lY3QgZGlzY29ubmVjdHVbc2VyXSBkaXNwIGRpc3BbbGF5XSBkaXNwbGF5IGRpc3NvbHZlIGRpc3NvbHZlZVt2ZW50c10gZGlzc29sdmVldmVudHMgZGlzdGFbbmNlXSBkaXN0cltpYnV0ZWJ1aWxkXSBkaXYgZGxbZ2FyY10gZG8gZG9jZVtsbF0gZG9jdVttZW50XSBkb2N1bWVudCBkb2dyb3VwIGRyYWcKK3N5biBrZXl3b3JkIGFtbEFyY0NtZCBjb250YWluZWQgIGRyYXcgZHJhd2Vudmlyb25tZW50IGRyYXdvcmRlciBkcmF3c1tpZ10gZHJhd3NlbGVjdCBkcmF3dFtyYXZlcnNlc10gZHJhd3pbb25lc2hhcGVdIGRyb3AyW2RpbmRleF0gZHJvcGFbcmNoaXZlXSBkcm9wZmVhdHVyZWNbbGFzc10gZHJvcGZlYXR1cmVzIGRyb3BmcltvbXN0YWNrXSBkcm9wZ3JvdXAgZHJvcGhbaXN0b3J5XSBkcm9waW5kW2V4XSBkcm9waW5mW290YWJsZV0gZHJvcGl0W2VtXSBkcm9wbGFbeWVyXSBkcm9wbGliW3JhcnldIGRyb3BsaW5bZV0gZHJvcGxpbmUgZHJvcG5bZXRpbmRleF0gZHJvcHRbYWJsZXNwYWNlXSBkcm9wd1tvcmt0YWJsZV0gZHMgZHRbZWRncmlkXSBkdHJhbnMgZHVbcGxpY2F0ZV0gZHVwbGljYXRlYXJjcyBkdyBkeGYgZHhmYVtyY10gZHhmaVtuZm9dIGR5bmFtaWNwYW4gZHlucGFuIGViZSBlYyBlZCBlZGdbZXNuYXBdIGVkZ2VtYXRjaCBlZGl0Ym91bmRhcnllcnJvIGVkaXRbY292ZXJhZ2VdICBlZGl0ZGlzdGFuY2UgZWRpdGYgZWRpdGZlYXR1cmUgZWRpdHBbbG90XSBlZGl0cGxvdCBlZGl0c1tpZ10gZWRpdHN5bWJvbCBlZiBlbFtpbWluYXRlXSBlbVtmXSBlbltkXSBlbnZyc3QgZW52c2F2IGVwW3NdIGVxIGVxdVthbHRvXSBlclthc2VdIGVzIGV0IGV0W2FrYXJjXSBldWNhW2xsb2NhdGlvbl0gZXVjZGlyW2VjdGlvbl0gZXVjZGlzW3RhbmNlXSBldmFsIGV2ZW50YVtyY10gZXZlbnRlW25kc10gZXZlbnRoW2F0Y2hdIGV2ZW50aVtuZm9dIGV2ZW50bGluZWVbbmR0ZXh0XSBldmVudGxpbmVzIGV2ZW50bGluZXRbZXh0XSBldmVudGxpc1t0XSBldmVudG1hW3JrZXJzXSBldmVudG1lW251XSBldmVudG1lbnUgZXZlbnRwb2ludCBldmVudHBvaW50dFtleHRdIGV2ZW50c2VbY3Rpb25dIGV2ZW50c29bdXJjZV0gZXZlbnR0W3JhbnNmb3JtXSBldmVudHRyYW5zZm9ybSBleGlbdF0gZXhwIGV4cDFbMF0gZXhwMiBleHBhW25kXSBleHBvW3J0XSBleHRlbltkXSBleHRlcm5hbCBleHRlcm5hbGFbbGxdCitzeW4ga2V5d29yZCBhbWxBcmNDbWQgY29udGFpbmVkICBmZFtjb252ZXJ0XSBmZWF0dXJlZ3JvdXAgZmcgZmllW2xkZGF0YV0gZmlsZSBmaWxsIGZpbHRbZXJdIGZpeFtvd25lcnNoaXBdIGZsaXAgZmxpcGFbbmdsZV0gZmxvYXQgZmxvYXRnW3JpZF0gZmxvb1tyXSBmbG93YVtjY3VtdWxhdGlvbl0gZmxvd2RbaXJlY3Rpb25dIGZsb3dsW2VuZ3RoXSBmbVtvZF0gZm9jYWxmW2xvd10gZm9jYWxtYWpbb3JpdHldIGZvY2FsbWF4IGZvY2FsbWVhW25dIGZvY2FsbWVkW2lhbl0gZm9jYWxtaW4gZm9jYWxtaW5vW3JpdHldIGZvY2FsclthbmdlXSBmb2NhbHN0W2RdIGZvY2Fsc3VbbV0gZm9jYWx2W2FyaWV0eV0gZm9udGFbcmNdIGZvbnRjb1tweV0gZm9udGNyW2VhdGVdIGZvbnRkW2VsZXRlXSBmb250ZHVtcCBmb250bFtvYWRdIGZvbnRsb2FkIGZvcmNbZV0gZm9ybVtlZGl0XSBmb3JtZWRpdCBmb3JtcyBmcltlcXVlbmN5XSBnZSBnZWFyeSBnZW5lcmFsW2l6ZV0gZ2VuZXJhdFtlXSBnZXJiZXJhW3JjXSBnZXJiZXJyW2VhZF0gZ2VyYmVycmVhZCBnZXJiZXJ3W3JpdGVdIGdlcmJlcndyaXRlIGdldCBnZXR6W2ZhY3Rvcl0gZ2kgZ2lbcmFzYXJjXSBnbmRzIGdyYWlbbl0gZ3JhcGhiW2FyXSBncmFwaGVbeHRlbnRdIGdyYXBoaVtjc10gZ3JhcGhpY2ltYWdlIGdyYXBoaWN2aWV3IGdyYXBobGltW2l0c10gZ3JhcGhsaW5bZV0gZ3JhcGhwW29pbnRdIGdyYXBoc1toYWRlXSBncmF5W3NoYWRlXSBncmVbYXRlcnRoYW5dIGdyaWQgZ3JpZGFbc2NpaV0gZ3JpZGNsW2lwXSBncmlkY2xpcCBncmlkY29bbXBvc2l0ZV0gZ3JpZGRlc2tbZXddIGdyaWRkZXNwW2Vja2xlXSBncmlkZGlbcmVjdGlvbl0gZ3JpZGVbZGl0XSBncmlkZmxpW3BdIGdyaWRmbG9bYXRdIGdyaWRpbVthZ2VdIGdyaWRpbltzZXJ0XSBncmlkbFtpbmVdIGdyaWRtYVtqb3JpdHldIGdyaWRtaVtycm9yXSBncmlkbW9bc3NdIGdyaWRuW2V0XSBncmlkbm9kYXRhc3ltYm9sIGdyaWRwYVtpbnRdIGdyaWRwb2lbbnRdIGdyaWRwb2xbeV0KK3N5biBrZXl3b3JkIGFtbEFyY0NtZCBjb250YWluZWQgIGdyaWRxW3VlcnldIGdyaWRyW290YXRlXSBncmlkc2hhZFtlc10gZ3JpZHNoYXBbZV0gZ3JpZHNoaVtmdF0gZ3JpZHdbYXJwXSBncm91cCBncm91cGJbeV0gZ3QgZ3YgZ3ZbdG9sZXJhbmNlXSBoYVtyZGNvcHldIGhlW2xwXSBoZWxwIGhpZFtkZW5zeW1ib2xdIGhpZ1tobG93XSBoaWxbbHNoYWRlXSBoaXNbdG9ncmFtXSBoaXN0b3JpY2FsdmlldyBob1tsZGFkanVzdF0gaHBnbCBocGdsMiBoc3YyYltsdWVdIGhzdjJnW3JlZW5dIGhzdjJyW2VkXSBodFttbF0gaHZpZXcgaWEgaWRlZFtpdF0gaWRlbnRpZlt5XSBpZGVudGl0W3ldIGlkdyBpZiBpZ2RzYVtyY10gaWdkc2lbbmZvXSBpZ2Vbc2FyY10gaWxbbHVzdHJhdG9yXSBpbGx1c3RyYXRvciBpbWFnZSBpbWFnZWdbcmlkXSBpbWFnZXBbbG90XSBpbWFnZXBsb3QgaW1hZ2V2aWV3IGltcFtvcnRdIGluIGluZGV4IGluZGV4aVt0ZW1dIGluZm8gaW5mb2RiYVtzZV0gaW5mb2RibVtzXSBpbmZvZltpbGVdIGluaXQ5MFswMF0gaW5pdDkxMDAgaW5pdDkxMDBiIGluaXQ5MVswMF0gaW5pdDk1WzAwXSBpbnQgaW50ZXJzZWN0IGludGVyc2VjdGFyY3MgaW50ZXJzZWN0ZVtycl0gaXNuW3VsbF0gaXNvW2NsdXN0ZXJdIGl0W2Vtc10gaXZpZXcgaltvaW5pdGVtXSBqb2luIGtlZXBzIGtlZXBzZWxlY3Qga2V5YW5bZ2xlXSBrZXlhcltlYV0ga2V5YltveF0ga2V5Zltvcm1zXSBrZXlsW2luZV0ga2V5bSBrZXltW2Fya2VyXSBrZXltYXAga2V5cFtvc2l0aW9uXSBrZXlzZVtwYXJhdGlvbl0ga2V5c2hbYWRlXSBrZXlzcG90IGtpbGwga2lsbG1bYXBdIGtyW2lnaW5nXSBsYSBsYWJlbGFbbmdsZV0gbGFiZWxlW3Jyb3JzXSBsYWJlbG1bYXJrZXJzXSBsYWJlbHMgbGFiZWxzY1thbGVdIGxhYmVsc3Bbb3RdIGxhYmVsdFtleHRdIGxhbCBsYXR0aWNlY2xbaXBdIGxhdHRpY2Vjb1tudG91cl0gbGF0dGljZWRbZW1dIGxhdHRpY2VtW2VyZ2VdIGxhdHRpY2VtYXJrZXJzIGxhdHRpY2VvW3BlcmF0ZV0KK3N5biBrZXl3b3JkIGFtbEFyY0NtZCBjb250YWluZWQgIGxhdHRpY2VwW29seV0gbGF0dGljZXJlcFtsYWNlXSBsYXR0aWNlcmVzW2FtcGxlXSBsYXR0aWNlc1twb3RdIGxhdHRpY2V0W2luXSBsYXR0aWNldGV4dCBsYXllciBsYXllcmFbbm5vXSBsYXllcmNhW2xjdWxhdGVdIGxheWVyY29bbHVtbnNdIGxheWVyZGVbbGV0ZV0gbGF5ZXJkb1t0c10gbGF5ZXJkclthd10gbGF5ZXJlW3hwb3J0XSBsYXllcmZbaWx0ZXJdIGxheWVyaWRbZW50aWZ5XSBsYXllcmltW3BvcnRdIGxheWVyaW9bbW9kZV0gbGF5ZXJsaVtzdF0gbGF5ZXJsb2Nba10gbGF5ZXJsb2dbZmlsZV0gbGF5ZXJxW3VlcnldIGxheWVyc2VbYXJjaF0gbGF5ZXJzcFtvdF0gbGF5ZXJ0W2V4dF0gbGMgbGRibXN0IGxlIGxlYWRlcmFbcnJvd3NdIGxlYWRlcnMgbGVhZGVyc3lbbWJvbF0gbGVhZGVydFtvbGVyYW5jZV0gbGVuW2d0aF0gbGVzW3N0aGFuXSBsZiBsZyBsaCBsaSBsaWIgbGlicmFyaVthbl0gbGlicmFyeSBsaW1pdGFkanVzdCBsaW1pdGF1dG9saW5rIGxpbmUgbGluZTJwdCBsaW5lYVtkanVzdG1lbnRdIGxpbmVjbFtvc3VyZWFuZ2xlXSBsaW5lY29sb3IgbGluZWNvbG9yclthbXBdIGxpbmVjb3B5IGxpbmVjb3B5bFtheWVyXSBsaW5lZGVsZXRlIGxpbmVkZWxldGVsW2F5ZXJdIGxpbmVkZW5bc2l0eV0gbGluZWRpcltlY3Rpb25dIGxpbmVkaXNbdF0gbGluZWVkaXQgbGluZWdbcmlkXSBsaW5laFtvbGxvd10gbGluZWluZltvXSBsaW5laW50W2VydmFsXSBsaW5lbFtheWVyXSBsaW5lbGlzdCBsaW5lbVtpdGVyYW5nbGVdIGxpbmVvW2Zmc2V0XSBsaW5lcGFbdHRlcm5dIGxpbmVwZVtuXSBsaW5lcHVbdF0gbGluZXNhW3ZlXSBsaW5lc2NbYWxlXSBsaW5lc2VbdF0gbGluZXNpW3plXSBsaW5lc3RbYXRzXSBsaW5lc3lbbWJvbF0gbGluZXRlW21wbGF0ZV0KK3N5biBrZXl3b3JkIGFtbEFyY0NtZCBjb250YWluZWQgIGxpbmV0eVtwZV0gbGlua1tzXSBsaW5rZmVhdHVyZXMgbGlzdCBsaXN0YXJjaGl2ZXMgbGlzdGF0dCBsaXN0Y1tvdmVyYWdlc10gbGlzdGNvdmVyYWdlcyBsaXN0ZGJtc3RhYmxlcyBsaXN0Z1tyaWRzXSBsaXN0Z3JpZHMgbGlzdGhpc3RvcnkgbGlzdGlbbWFnZXNdIGxpc3RpbWFnZXMgbGlzdGluZm90YWJsZXMgbGlzdGxheWVycyBsaXN0bGlicmFyaWVzIGxpc3RvW3V0cHV0XSBsaXN0c2VbbGVjdF0gbGlzdHN0W2Fja3NdIGxpc3RzdGFja3MgbGlzdHRhYmxlc3BhY2VzIGxpc3R0aVtuc10gbGlzdHRpbnMgbGlzdHRyW2F2ZXJzZXNdIGxpc3R0cmFuIGxpc3R0cmFuc2FjdGlvbnMgbGlzdHdbb3Jrc3BhY2VzXSBsaXN0d29ya3NwYWNlcyBsaXQgbGwgbGxbc2ZpdF0gbGxhIGxtIGxuIGxvYWQgbG9hZGFbZGphY2VudF0gbG9hZGNvbG9ybWFwIGxvY2tvW25seV0gbG9ja3NbeW1ib2xdIGxvZyBsb2cxWzBdIGxvZzIgbG9nZltpbGVdIGxvZ2dbaW5nXSBsb29ba3VwXSBsb3RbYXJlYV0gbHBbb3NdIGxzdGsgbHQgbHRzIGx3IG1hZGRpdGVtIG1ham9yaXR5IG1ham9yaXR5ZltpbHRlcl0gbWFrZXJlW2dpb25dIG1ha2Vyb1t1dGVdIG1ha2VzZVtjdGlvbl0gbWFrZXN0W2Fja10gbWFsW2lnbl0gbWFwIG1hcGFbbmdsZV0gbWFwZVt4dGVudF0gbWFwZXh0ZW50IG1hcGlbbmZvXSBtYXBqW29pbl0gbWFwbFtpbWl0c10gbWFwcG9bc2l0aW9uXSBtYXBwcltvamVjdGlvbl0gbWFwc2NbYWxlXSBtYXBzaFtpZnRdIG1hcHVbbml0c10gbWFwd1thcnBdIG1hcHpbb29tXSBtYXJrZXIgbWFya2VyYVtuZ2xlXSBtYXJrZXJjb2xvciBtYXJrZXJjb2xvcnJbYW1wXSBtYXJrZXJjb3B5IG1hcmtlcmNvcHlsW2F5ZXJdIG1hcmtlcmRlbGV0ZSBtYXJrZXJkZWxldGVsW2F5ZV0gbWFya2VyZWRpdCBtYXJrZXJmW29udF0gbWFya2VyaVtuZm9dIG1hcmtlcmxbYXllcl0gbWFya2VybGlzdCBtYXJrZXJtW2Fza10gbWFya2Vyb1tmZnNldF0KK3N5biBrZXl3b3JkIGFtbEFyY0NtZCBjb250YWluZWQgIG1hcmtlcnBhW3R0ZXJuXSBtYXJrZXJwZVtuXSBtYXJrZXJwdVt0XSBtYXJrZXJzYVt2ZV0gbWFya2Vyc2NbYWxlXSBtYXJrZXJzZVt0XSBtYXJrZXJzaVt6ZV0gbWFya2Vyc3lbbWJvbF0gbWFzW2VsZWN0XSBtYXRjaGNbb3Zlcl0gbWF0Y2huW29kZV0gbWF4IG1iW2VnaW5dIG1jW29weV0gbWRbZWxldGVdIG1lIG1lYW4gbWVhc3VyZSBtZWFzdXJlcltvdXRlXSBtZWFzdXJlcm91dGUgbWVkIG1lbmQgbWVudVtjb3Zlcl0gbWVudWVkaXQgbWVudltpcm9ubWVudF0gbWVyZ2UgbWVyZ2VoW2lzdG9yeV0gbWVyZ2V2W2F0XSBtZmlbdF0gbWZyW2VzaF0gbWdbcm91cF0gbWlhZHNhW3JjXSBtaWFkc3JbZWFkXSBtaWFkc3JlYWQgbWluIG1pbmZbb10gbWlub1tyaXR5XSBtaXJbcm9yXSBtaXRlbXMgbWpvaW4gbWxbY2xhc3NpZnldIG1tYVtza10gbW1vW3ZlXSBtbltzZWxlY3RdIG1vZCBtb3JbZGVyXSBtb3JhbiBtb3NhW2ljXSBtb3NzYVtyY10gbW9zc2dbcmlkXSBtb3ZlIG1vdmVlW25kXSBtb3ZlaVt0ZW1dIG1wW29zaXRpb25dIG1yIG1yW290YXRlXSBtc2NbYWxlXSBtc2VbbGVjdF0gbXNlbGVjdCBtdFtvbGVyYW5jZV0gbXVbbnNlbGVjdF0gbXVsdGN1cnZlIG11bHRpbnYgbXVsdGlwbGVhZGRpdGVtIG11bHRpcGxlaXRlbXMgbXVsdGlwbGVqb2luIG11bHRpcGxlc2VsZWN0IG11bHRwcm9wIG13W2hvXSBuYWkgbmUgbmVhciBuZWF0bGluZSBuZWF0bGluZWdbcmlkXSBuZWF0bGluZWhbYXRjaF0gbmVhdGxpbmVsW2FiZWxzXSBuZWF0bGluZXRbaWNzXSBuZXcgbmV4dCBuaVtiYmxlXSBub2RlYW5nbGVpdGVtIG5vZGVjW29sb3JdIG5vZGVlW3Jyb3JzXSBub2RlbVthcmtlcnNdIG5vZGVwW29pbnRdIG5vZGVzIG5vZGVzaVt6ZV0gbm9kZXNuW2FwXSBub2Rlc3Bbb3RdIG5vZGV0W2V4dF0gbm9yW21hbF0gbm90IG5zW2VsZWN0XSBvZSBvZ3JpZCBvZ3JpZHRbb29sXSBvbGR3aW5kb3cgb29bcHNdIG9wW2VuZGF0YWJhc2VdIG9yCitzeW4ga2V5d29yZCBhbWxBcmNDbWQgY29udGFpbmVkICBvc3ltYm9sIG92ZXIgb3ZlcmZsb3cgb3ZlcmZsb3dhW3JlYV0gb3ZlcmZsb3dwW29zaXRpb25dIG92ZXJmbG93c1tlcGFyYXRpXSBvdmVybFtheWV2ZW50c10gb3ZlcmxhcHN5bWJvbCBvdmVybGF5ZXZlbnRzIG92ZXJwW29zdF0gcGFnZWVbeHRlbnRdIHBhZ2VzW2l6ZV0gcGFnZXVbbml0c10gcGFsW2luZm9dIHBhbiBwYW52aWV3IHBhclt0aWNsZXRyYWNrXSBwYXRjW2hdIHBhdGhbZGlzdGFuY2VdIHBlW25zaXplXSBwaVtja10gcGxpW3N0XSBwbG90IHBsb3Rjb3B5IHBsb3RnW2VyYmVyXSBwbG90aVtjb25dIHBsb3RtYW55IHBsb3RwYW5lbCBwbG90c2NbaXRleF0gcGxvdHNpW2ZdIHBvaW50ZGVbbnNpdHldIHBvaW50ZGlzdCBwb2ludGRpc3RhW25jZV0gcG9pbnRkb1t0c10gcG9pbnRnW3JpZF0gcG9pbnRpW250ZXJwXSBwb2ludG1bYXJrZXJzXSBwb2ludG5bb2RlXSBwb2ludHMgcG9pbnRzcFtvdF0gcG9pbnRzdFthdHNdIHBvaW50dFtleHRdIHBvbHlnb25iW29yZGVydGV4XSBwb2x5Z29uZFtvdHNdIHBvbHlnb25lW3ZlbnRzXSBwb2x5Z29uZXZlbnRzIHBvbHlnb25sW2luZXNdIHBvbHlnb25zIHBvbHlnb25zaFthZGVzXSBwb2x5Z29uc2lbemVsaW1pdF0gcG9seWdvbnNwW290XSBwb2x5Z29udFtleHRdIHBvbHlncltpZF0gcG9seXJbZWdpb25dIHBvcFt1bGFyaXR5XSBwb3Jbb3VzcHVmZl0gcG9zIHBvc1t0c2NyaXB0XSBwb3NpdGlvbnMgcG9zdHNjcmlwdCBwb3cgcHJlY1tpc2lvbl0gcHJlcFthcmVdIHByaW5jW29tcF0gcHJpbnQgcHJvZHVjdCBwcm9kdWN0aVtuZm9dIHByb2plY3QgcHJvamVjdGNvbVtwYXJlXSBwcm9qZWN0Y29wW3ldIHByb2plY3RkW2VmaW5lXSBwdWxbbGl0ZW1zXSBwdXJbZ2VoaXN0b3J5XSBwdXQgcHYgcSBxW3VpdF0gcXVpdCByYW5kIHJhbmdbZV0gcmFuayByYiByYyByZSByZWFkZ1tyYXBoaWNdIHJlYWRzW2VsZWN0XSByZWJbb3hdIHJlY2xbYXNzXSByZWNvdmVyZGIgcmVjdFtpZnldCitzeW4ga2V5d29yZCBhbWxBcmNDbWQgY29udGFpbmVkICByZWRbb10gcmVmcmVzaHZpZXcgcmVnaW9uYlt1ZmZlcl0gcmVnaW9uY2xhW3NzXSByZWdpb25jbGVbYW5dIHJlZ2lvbmRpW3Nzb2x2ZV0gcmVnaW9uZG9bdHNdIHJlZ2lvbmVbcnJvcnNdIHJlZ2lvbmdbcm91cF0gcmVnaW9ualtvaW5dIHJlZ2lvbmxbaW5lc10gcmVnaW9ucG9seSByZWdpb25wb2x5Y1tvdW50XSByZWdpb25wb2x5Y291bnQgcmVnaW9ucG9seWxbaXN0XSByZWdpb25wb2x5bGlzdCByZWdpb25xW3VlcnldIHJlZ2lvbnMgcmVnaW9uc2VbbGVjdF0gcmVnaW9uc2hbYWRlc10gcmVnaW9uc3Bbb3RdIHJlZ2lvbnRbZXh0XSByZWdpb254YVtyZWFdIHJlZ2lvbnhhcmVhIHJlZ2lvbnh0W2FiXSByZWdpb254dGFiIHJlZ2lzdGVyIHJlZ2lzdGVyZFtibXNdIHJlZ3JbZXNzaW9uXSByZWluZGV4IHJlaltlY3RzXSByZWxhW3RlXSByZWxlW2FzZV0gcmVtIHJlbWFwZ3JpZCByZW1lW2FzdXJlXSByZW1vW3Zlc2NhbGFyXSByZW1vdmUgcmVtb3ZlYmFjayByZW1vdmVjb3ZlciByZW1vdmVlZGl0IHJlbW92ZXNuYXAgcmVtb3ZldHJhbnNmZXIgcmVuYW1lIHJlbmFtZXdbb3Jrc3BhY2VdIHJlbmFtZXdvcmtzcGFjZSByZW5vW2RlXSByZXBbbGFjZV0gcmVwb3NpdGlvbiByZXNhW21wbGVdIHJlc2VsW2VjdF0gcmVzZXQgcmVzaFthcGVdIHJlc3RvcmUgcmVzdG9yZWFyY2VbZGl0XSByZXN0b3JlYXJjaFtpdmVdIHJlc3VbbWVdIHJnYjJoW3VlXSByZ2Iyc1thdF0gcmdiMnZbYWxdIHJvdGF0ZSByb3RhdGVwW2xvdF0gcm91dGVhW3JjXSByb3V0ZWVuZHMgcm91dGVlbmR0W2V4dF0gcm91dGVlcltyb3JzXSByb3V0ZWV2W2VudHNwb3RdIHJvdXRlaFthdGNoXSByb3V0ZWxbaW5lc10gcm91dGVzIHJvdXRlc3Bbb3RdIHJvdXRlc3RbYXRzXSByb3V0ZXRbZXh0XSBycCBycyBydCBydFtsXSBydGwgcnYgcncgc2Egc2FpIHNhbXBsZSBzYW1wbGVzW2lnXSBzYXZbZV0gc2F2ZWNvbG9ybWFwIHNjIHNjYWxbYXJdIHNjYXRbdGVyZ3JhbV0KK3N5biBrZXl3b3JkIGFtbEFyY0NtZCBjb250YWluZWQgIHNjZW5lZm9nIHNjZW5lZm9ybWF0IHNjZW5laGF6ZSBzY2VuZW92ZXJzYW1wbGUgc2NlbmVyb2xsIHNjZW5lc2F2ZSBzY2VuZXNpemUgc2NlbmVza3kgc2NpdGV4bFtpbmVdIHNjaXRleHBvaVtudF0gc2NpdGV4cG9sW3ldIHNjaXRleHJbZWFkXSBzY2l0ZXhyZWFkIHNjaXRleHdbcml0ZV0gc2NpdGV4d3JpdGUgc2NvIHNjcmVlbnJbZXN0b3JlXSBzY3JlZW5zW2F2ZV0gc2Qgc2RzIHNkdHNlW3hwb3J0XSBzZHRzaW1bcG9ydF0gc2R0c2luW2ZvXSBzZHRzbFtpc3RdIHNlIHNlYVtyY2h0b2xlcmFuY2VdIHNlY3Rpb25hW3JjXSBzZWN0aW9uZW5kcyBzZWN0aW9uZW5kdFtleHRdIHNlY3Rpb25oW2F0Y2hdIHNlY3Rpb25sW2luZXNdIHNlY3Rpb25zIHNlY3Rpb25zblthcF0gc2VjdGlvbnNwW290XSBzZWN0aW9udFtleHRdIHNlbCBzZWxlY3Qgc2VsZWN0YltveF0gc2VsZWN0Y1tpcmNsZV0gc2VsZWN0Z1tldF0gc2VsZWN0bVthc2tdIHNlbGVjdG1vZGUgc2VsZWN0cG9pW250XSBzZWxlY3Rwb2xbeWdvbl0gc2VsZWN0cHVbdF0gc2VsZWN0dFt5cGVdIHNlbGVjdHdbaXRoaW5dIHNlbWl2YXJpb2dyYW0gc2VwW2FyYXRvcl0gc2VwYXJhdG9yIHNlclt2ZXJzdGF0dXNdIHNldGFuW2dsZV0gc2V0YXJbcm93XSBzZXRjZVtsbF0gc2V0Y29hW2xlc2NlXSBzZXRjb25bbmVjdGluZm9dIHNldGRbYm1zY2hlY2tpbl0gc2V0ZHJhd3N5bWJvbCBzZXRlW2RpdG1vZGVdIHNldGluY3JlbWVudCBzZXRtW2Fza10gc2V0blt1bGxdIHNldG9vbHMgc2V0cmVmZXJlbmNlIHNldHN5bWJvbCBzZXR0dXJuIHNldHdbaW5kb3ddIHNleHQgc2Ygc2ZtdCBzZm8gc2hhIHNoYWRlIHNoYWRlYVtuZ2xlXSBzaGFkZWJbYWNrY29sb3JdIHNoYWRlY29sb3Igc2hhZGVjb2xvcnJbYW1wXSBzaGFkZWNvcHkgc2hhZGVjb3B5bFtheWVyXSBzaGFkZWRlbGV0ZSBzaGFkZWRlbGV0ZWxbYXllcl0gc2hhZGVlZGl0IHNoYWRlZ3JpZCBzaGFkZWlbbmZvXSBzaGFkZWxhW3llcl0KK3N5biBrZXl3b3JkIGFtbEFyY0NtZCBjb250YWluZWQgIHNoYWRlbGlbbmVwYXR0ZXJuXSBzaGFkZWxpc3Qgc2hhZGVvW2Zmc2V0XSBzaGFkZXBhW3R0ZXJuXSBzaGFkZXBlW25dIHNoYWRlcHVbdF0gc2hhZGVzYVt2ZV0gc2hhZGVzY1thbGVdIHNoYWRlc2VwW2FyYXRpb25dIHNoYWRlc2V0IHNoYWRlc2lbemVdIHNoYWRlc3lbbWJvbF0gc2hhZGV0W3lwZV0gc2hhcGVhW3JjXSBzaGFwZWZbaWxlXSBzaGFwZWdbcmlkXSBzaGlbZnRdIHNob3cgc2hvd2NvbnN0YW50cyBzaG93ZVtkaXRtb2RlXSBzaHJbaW5rXSBzaSBzaW4gc2luZm8gc2luZ1tsZXVzZXJdIHNpbmggc2luayBzaXRbZV0gc2wgc2xmW2FyY10gc2xpW2NlXSBzbG9bcGVdIHNtIHNtYXJ0YW5ubyBzbmFwIHNuYXBjW292ZXJdIHNuYXBjb3ZlciBzbmFwY292ZXJhZ2Ugc25hcGVudmlyb25tZW50IHNuYXBmZWF0dXJlcyBzbmFwaXRlbXMgc25hcG9bcmRlcl0gc25hcHBpW25nXSBzbmFwcG9bdXJdIHNvW3J0XSBzb2JzIHNvcyBzcGlbZGVyXSBzcGlyYWx0cmFucyBzcGxpbmUgc3BsaW5lbVtldGhvZF0gc3BsaXQgc3BvdCBzcG90b1tmZnNldF0gc3BvdHNbaXplXSBzcHJvaiBzcXIgc3FydCBzcmEgc3JlIHNybCBzcyBzc2Mgc3NoIHNzaSBzc2t5IHNzeiBzdGEgc3RhY2toW2lzdG9ncmFtXSBzdGFja3Byb2ZpbGUgc3RhY2tzY1thdHRlcmdyYW1dIHN0YWNrc2hhZGUgc3RhY2tzdFthdHNdIHN0YXRpW3N0aWNzXSBzdGF0dVtzXSBzdGF0dXNjb2dvIHN0ZCBzdHJhW2lnaHRlbl0gc3RyZWFtbGluZSBzdHJlYW1saW5rIHN0cmVhbW9bcmRlcl0gc3RyaVtwbWFwXSBzdWJtW2l0XSBzdWJzW2VsZWN0XSBzdW0gc3VyZmFjZSBzdXJmYWNlYWJicmV2IHN1cmZhY2Vjb250b3VycyBzdXJmYWNlZGVmYXVsdHMgc3VyZmFjZWRyYXBlIHN1cmZhY2VleHRlbnQgc3VyZmFjZWluZm8gc3VyZmFjZWxbZW5ndGhdIHN1cmZhY2VsaW1pdHMgc3VyZmFjZW1hcmtlciBzdXJmYWNlbWVudSBzdXJmYWNlb2JzZXJ2ZXIgc3VyZmFjZXByb2ZpbGUKK3N5biBrZXl3b3JkIGFtbEFyY0NtZCBjb250YWluZWQgIHN1cmZhY2Vwcm9qZWN0aW8gc3VyZmFjZXJhbmdlIHN1cmZhY2VyZXNvbHV0aW8gc3VyZmFjZXNhdmUgc3VyZmFjZXNjZW5lIHN1cmZhY2VzaGFkZSBzdXJmYWNlc2lnaHRpbmcgc3VyZmFjZXRhcmdldCBzdXJmYWNldmFsdWUgc3VyZmFjZXZpZXdmaWVsZCBzdXJmYWNldmlld3NoZWQgc3VyZmFjZXZpc2liaWxpdHkgc3VyZmFjZXhzZWN0aW9uIHN1cmZhY2V6b29tIHN1cmZhY2V6c2NhbGUgc3Ygc3ZmZCBzdnMgc3hzIHN5bWJvbGR1bXAgc3ltYm9saVt0ZW1dIHN5bWJvbHNhW3ZlXSBzeW1ib2xzY1thbGVdIHN5bWJvbHNlW3RdIHN5bWJvbHNldCBzeiB0YWJbbGVzXSB0YWxbbHldIHRhbiB0YW5oIHRjIHRlIHRlc1t0XSB0ZXh0IHRleHRhbFtpZ25tZW50XSB0ZXh0YW5bZ2xlXSB0ZXh0Y29sb3IgdGV4dGNvbG9yclthbXBdIHRleHRjb3BbeV0gdGV4dGRlW2xldGVdIHRleHRkaVtyZWN0aW9uXSB0ZXh0ZWRpdCB0ZXh0ZmlsW2VdIHRleHRmaXQgdGV4dGZvW250XSB0ZXh0aW5bZm9dIHRleHRpdFtlbV0gdGV4dGpbdXN0aWZpY2F0aW9dIHRleHRsaXN0IHRleHRtW2Fza10gdGV4dG9bZmZzZXRdIHRleHRwZVtuXSB0ZXh0cHJbZWNpc2lvbl0gdGV4dHB1W3RdIHRleHRxW3VhbGl0eV0gdGV4dHNhW3ZlXSB0ZXh0c2NbYWxlXSB0ZXh0c2VbdF0gdGV4dHNldCB0ZXh0c2lbemVdIHRleHRzbFthbnRdIHRleHRzcGFbY2luZ10gdGV4dHNwbFtpbmVdIHRleHRzdFt5bGVdIHRleHRzeVttYm9sXSB0ZiB0aCB0aGllW3NzZW5dIHRoaW4gdGkgdGljcyB0aWN0W2V4dF0gdGlnZXJhW3JjXSB0aWdlcnRbb29sXSB0aWdlcnRvb2wgdGlsW2VzXSB0aW1wZWQgdGluIHRpbmFbcmNdIHRpbmNbb250b3VyXSB0aW5lcnJvcnMgdGluaHVsbCB0aW5sW2F0dGljZV0gdGlubGluZXMgdGlubWFya2VycyB0aW5zW3BvdF0gdGluc2hhZGVzIHRpbnRleHQgdGludltybWxdIHRsIHRtIHRvbFtlcmFuY2VdIHRvcFtvZ3JpZF0gdG9wb2dyaWR0b29sCitzeW4ga2V5d29yZCBhbWxBcmNDbWQgY29udGFpbmVkICB0cmFuc2FbY3Rpb25dIHRyYW5zZmVbcl0gdHJhbnNmZXJjb3ZlcmFnZSB0cmFuc2ZlcmZlYXR1cmUgdHJhbnNmZXJpdGVtcyB0cmFuc2ZlcnN5bWJvbCB0cmFuc2ZvW3JtXSB0cmF2cnN0IHRyYXZzYXYgdHJlW25kXSB0cyB0c3kgdHQgdHVyW250YWJsZV0gdHVybmltcGVkYW5jZSB0dXRbb3JpYWxdIHVuYVtyeV0gdW5kZVtsZXRlXSB1bmRvIHVuZ2VuZXJhdGUgdW5nZW5lcmF0ZXRbaW5dIHVuaW9bbl0gdW5pdFtzXSB1bnJbZWdpc3RlcmRibXNdIHVuc2VbbGVjdF0gdW5zcFtsaXRdIHVwZGF0ZSB1cGRhdGVpW25mb3NjaGVtYV0gdXBkYXRlbFthYmVsc10gdXBvW3NdIHVzW2FnZV0gdiB2YVtyaWV0eV0gdmNnbCB2Y2dsMiB2ZXJpW2Z5XSB2ZXJzW2lvbl0gdmVydGV4IHZpZXdyc3Qgdmlld3NhdiB2aXAgdmlzZFtlY29kZV0gdmlzZGVjb2RlIHZpc2VbbmNvZGVdIHZpc2VuY29kZSB2aXNpW2JpbGl0eV0gdm9bbHVtZV0gdnBmZVt4cG9ydF0gdnBmaVttcG9ydF0gdnBmbFtpc3RdIHZwZnRbaWxlXSB3IHdhcltwXSB3YXRbZXJzaGVkXSB3ZWVkZFtyYXddIHdlZWRvW3BlcmF0b3JdIHdlZWR0W29sZXJhbmNlXSB3ZWVkdG9sZXJhbmNlIHdoZVtyZV0gd2hpW2xlXSB3aG8gd2lbbmRvd3NdIHdtW2ZdIHdvW3Jrc3BhY2VdIHdvcmtzcGFjZSB3cml0ZWNbYW5kaWRhdGVzXSB3cml0ZWdbcmFwaGljXSB3cml0ZXNbZWxlY3RdIHd0IHhbb3JdIHplW3RhXSB6ZXRhIHppIHpvIHpvbmFsYVtyZWFdIHpvbmFsY1tlbnRyb2lkXSB6b25hbGZbaWxsXSB6b25hbGdbZW9tZXRyeV0gem9uYWxtYWpbb3JpdHldIHpvbmFsbWF4IHpvbmFsbWVhW25dIHpvbmFsbWVkW2lhbl0gem9uYWxtaW4gem9uYWxtaW5vW3JpdHldIHpvbmFscFtlcmltZXRlcl0gem9uYWxyW2FuZ2VdIHpvbmFsc3RhW3RzXSB6b25hbHN0ZCB6b25hbHN1W21dIHpvbmFsdFtoaWNrbmVzc10gem9uYWx2W2FyaWV0eV0gem9vbXZpZXcgenYKKworIiBGT1JNRURJVCByZXNlcnZlZCB3b3JkcywgZGVmaW5lZCBhcyBrZXl3b3Jkcy4KKworc3luIGtleXdvcmQgYW1sRm9ybWVkQ21kIGNvbnRhaW5lZCAgYnV0dG9uIGNob2ljZSBkaXNwbGF5IGhlbHAgaW5wdXQgc2xpZGVyIHRleHQKKworIiBUQUJMRVMgcmVzZXJ2ZWQgd29yZHMsIGRlZmluZWQgYXMga2V5d29yZHMuCisKK3N5biBrZXl3b3JkIGFtbFRhYkNtZCBjb250YWluZWQgIGFkZCBhZGRpdGVtIGFsdGVyIGFzY2lpaGVscCBhc2VsZWN0IGF0IGNhbGMgY2FsY3VsYXRlIGNoYW5nZSBjb21tYW5kcyBjb21taXQgY29weSBkZWZpbmUgZGlyZWN0b3J5IGRyb3BpbmRleCBkcm9waXRlbSBlcmFzZSBleHRlcm5hbCBnZXQgaGVscCBpbmRleGl0ZW0gaXRlbXMga2lsbCBsaXN0IG1vdmUgbnNlbGVjdCBwdXJnZSBxdWl0IHJlZGVmaW5lIHJlbmFtZSByZXNlbGVjdCByb2xsYmFjayBzYXZlIHNlbGVjdCBzaG93IHNvcnQgc3RhdGlzdGljcyB1bmxvYWQgdXBkYXRlIHVzYWdlY29udGFpbmVkCisKKyIgSU5GTyByZXNlcnZlZCB3b3JkcywgZGVmaW5lZCBhcyBrZXl3b3Jkcy4KKworc3luIGtleXdvcmQgYW1sSW5mb0NtZCBjb250YWluZWQgIGFjY2VwdCBhZGQgYWRpciBhbHRlciBkaWFsb2cgYWx0ZXIgYWx0IGRpcmVjdG9yeSBhcmV0IGFyaXRobWV0aWMgZXhwcmVzc2lvbnMgYXNlbGVjdCBhdXRvbWF0aWMgcmV0dXJuIGNhbGN1bGF0ZSBjY2hyIGNoYW5nZSBvcHRpb25zIGNoYW5nZSBjb21pIGNvbWlucHV0IGNvbW1hbmRzIGxpc3QgY29tbyBjb21vdXRwdXQgY29tcGlsZSBjb25jYXRlbmF0ZSBjb250cm9sbGluZyBkZWZhdWx0cyBjb3B5IGN1cnNvciBkYXRhIGRlbGV0ZSBkYXRhIGVudHJ5IGRhdGEgbWFuaXB1bGF0ZSBkYXRhIHJldHJpZXZhbCBkYXRhIHVwZGF0ZSBkYXRlIGZvcm1hdCBkYXRhZmlsZSBjcmVhdGUgZGF0YWZpbGUgbWFuYWdlbWVudCBkZWNvZGUgZGVmaW5lIGRlbGltaXRlciBkZm10IGRpcmVjdG9yeSBtYW5hZ2VtZW50IGRpcmVjdG9yeSBkaXNwbGF5IGRvIGRvZW5kIGRvY3VtZW50YXRpb24gZG9uZSBlbmQgZW52aXJvbm1lbnQgZXJhc2UgZXhlY3V0ZSBleGl0aW5nIGV4cGFuZCBleHBvcnQgZXh0ZXJuYWwgZmMgZmlsZXMgZmlyc3QgZm9ybWF0IGZvcm1zIGNvbnRyb2wgZ2V0IGdvdG8gaGVscCBpbXBvcnQgaW5wdXQgZm9ybSBpcGYgaW50ZXJuYWwgaXRlbSB0eXBlcyBpdGVtcyBsYWJlbCBsY2hhciBsaXN0IGxvZ2ljYWwgZXhwcmVzc2lvbnMgbG9nIG1lcmdlIG1vZGlmeSBvcHRpb25zIG1vZGlmeSBtb3ZlIG5leHQgbnNlbGVjdCBvdXRwdXQgcGFzc3dvcmQgcHJpZiBwcmludCBwcm9ncmFtbWluZyBwcm9ncmFtIHByb3RlY3QgcHVyZ2UgcXVlcnkgcXVpdCByZWNhc2UgcmVkZWZpbmUgcmVsYXRlIHJlbGF0ZSByZWxlYXNlIG5vdGVzIHJlbWFyayByZW5hbWUgcmVwb3J0IG9wdGlvbnMgcmVwb3J0aW5nIHJlcG9ydCByZXNlbGVjdCByZXNlcnZlZCB3b3JkcyByZXN0cmljdGlvbnMgcnVuIHNhdmUgc2VjdXJpdHkgc2VsZWN0IHNldCBzbGVlcCBzb3J0IHNwZWNpYWwgZm9ybSBzcG9vbCBzdG9wIGl0ZW1zIHN5c3RlbSB2YXJpYWJsZXMgdGFrZSB0ZXJtaW5hbCB0eXBlcyB0ZXJtaW5hbCB0aW1lIHRvcGljcyBsaXN0IHR5cGUgdXBkYXRlIHVwZgorCisiIFZUUkFDRSByZXNlcnZlZCB3b3JkcywgZGVmaW5lZCBhcyBrZXl3b3Jkcy4KKworc3luIGtleXdvcmQgYW1sVnRyQ21kIGNvbnRhaW5lZCAgYWRkIGFsIGFyY3NjYW4gYXJyb3dsZW5ndGggYXJyb3d3aWR0aCBhcyBhdyBiYWNrdHJhY2sgYnJhbmNoIGJ0IGNqIGNsZWFyanVuY3Rpb24gY29tbWFuZHMgY3MgZGFzaCBlbmRvZmxpbmUgZW5kb2ZzZXNzaW9uIGVvbCBlb3MgZmFuIGZnIGZvcmVncm91bmQgZ2FwIGdlbmVyYWxpemV0b2xlcmFuY2UgZ3RvbCBoZWxwIGhvbGUganMganVuY3Rpb25zZW5zaXRpdml0eSBsaW5lc3ltYm9sIGxpbmV2YXJpYXRpb24gbGluZXdpZHRoIGxzIGx2IGx3IG1hcmtlcnN5bWJvbCBtb2RlIG1zIHJhc3RlciByZWdpb25vZmludGVyZXN0IHJlc2V0IHJlc3RvcmUgcmV0cmFjZSByb2kgc2F2ZSBzZWFyY2hyYWRpdXMgc2tpcCBzciBzdGEgc3RhdHVzIHN0YyBzdGQgc3RyIHN0cmFpZ2h0ZW5hbmdsZSBzdHJhaWdodGVuY29ybmVyIHN0cmFpZ2h0ZW5kaXN0YW5jZSBzdHJhaWdodGVucmFuZ2UgdnQgdnRyYWNlCisKKyIgVGhlIEFNTCByZXNlcnZlZCB3b3JkcywgZGVmaW5lZCBhcyBrZXl3b3Jkcy4KKworc3luIGtleXdvcmQgYW1sRnVuY3Rpb24gY29udGFpbmVkICBhYnMgYWNjZXNzIGFjb3MgYWZ0ZXIgYW5ncmFkIGFzaW4gYXRhbiBiZWZvcmUgY2FsYyBjbG9zZSBjb3B5IGNvcyBjb3ZlciBjb3ZlcmFnZSBjdnRkaXN0YW5jZSBkYXRlIGRlbGV0ZSBkaWdudW0gZGlyIGRpcmVjdG9yeSBlbnRyeW5hbWUgZXhpc3Rbc10gZXhwIGV4dHJhY3QgZmlsZSBmaWxlbGlzdCBmb3JtYXQgZm9ybWF0ZGF0ZSBmdWxsIGdldGNoYXIgZ2V0Y2hvaWNlIGdldGNvdmVyIGdldGRhdGFiYXNlIGdldGRlZmxheWVycyBnZXRmaWxlIGdldGdyaWQgZ2V0aW1hZ2UgZ2V0aXRlbSBnZXRsYXllcmNvbHMgZ2V0bGlicmFyeSBnZXRzdGFjayBnZXRzeW1ib2wgZ2V0dGluIGdldHVuaXF1ZSBpYWNjbG9zZSBpYWNjb25uZWN0IGlhY2Rpc2Nvbm5lY3QgaWFjb3BlbiBpYWNyZXF1ZXN0IGluZGV4IGluZGV4ZWQgaW5mbyBpbnZhbmdsZSBpbnZkaXN0YW5jZSBpdGVtaW5mbyBqb2luZmlsZSBrZXl3b3JkIGxlbmd0aCBsaXN0ZmlsZSBsaXN0aXRlbSBsaXN0dW5pcXVlIGxvY2FzZSBsb2cgbWF4IG1lbnUgbWluIG1vZCBub2VjaG8gbnVsbCBva2FuZ2xlIG9rZGlzdGFuY2Ugb3BlbiBwYXRobmFtZSBwcmVmaXggcXVlcnkgcXVvdGUgcXVvdGVleGlzdHMgciByYWRhbmcgcmFuZG9tIHJlYWQgcmVuYW1lIHJlc3BvbnNlIHJvdW5kIHNjcmF0Y2huYW1lIHNlYXJjaCBzaG93IHNpbiBzb3J0IHNxcnQgc3Vic3Qgc3Vic3RyIHN1ZmZpeCB0YW4gdGFzayB0b2tlbiB0cmFuc2xhdGUgdHJpbSB0cnVuY2F0ZSB0eXBlIHVucXVvdGUgdXBjYXNlIHVzZXJuYW1lIHZhbHVlIHZhcmlhYmxlIHZlcmlmeSB3cml0ZQorCitzeW4ga2V5d29yZCBhbWxEaXIgY29udGFpbmVkICBhYmJyZXZpYXRpb25zIGFib3ZlIGFsbCBhbWwgYW1scGF0aCBhcHBlbmQgYXJjIGFyZ3MgYXRvb2wgYnJpZWYgYnkgY2FsbCBjYW52YXMgY2MgY2VudGVyIGNsIGNvZGVwYWdlIGNvbW1hbmRzIGNvbnZfd2F0Y2hfdG9fYW1sIGNvb3JkaW5hdGVzIGNyIGNyZWF0ZSBjdXJyZW50IGN1cnNvciBjd3RhIGRhbGluZXMgZGF0YSBkYXRlX2Zvcm1hdCBkZWxldGUgZGVsdmFyIGRlc2NyaWJlIGRmbXQgZGlnaXRpemVyIGRpc3BsYXkgZG8gZG9lbmQgZHYgZWNobyBlbHNlIGVuYWJsZSBlbmNvZGUgZW5jcnlwdCBlbmQgZXJyb3IgZXhwYW5zaW9uIGZhaWwgZmlsZSBmbHVzaHBvaW50cyBmb3JjZSBmb3JtIGZvcm1hdCBmcmFtZSBmdWxsc2NyZWVuIGZ1bmN0aW9uIGdldGxhc3Rwb2ludCBnZXRwb2ludCBnb3RvIGlhY3JldHVybiBpZiBpZ25vcmUgaW5mbyBpbmZvcm0ga2V5IGtleXBhZCBsYWJlbCBsYyBsZWZ0IGxmIGxnIGxpc3QgbGlzdGNoYXIgbGlzdGZpbGVzIGxpc3RnbG9iYWwgbGlzdGhlYWRlciBsaXN0bG9jYWwgbGlzdHByb2dyYW0gbGlzdHZhciBsbCBscCBsciBsdiBtYXAgbWF0cml4IG1lbnUgbWVudXBhdGggbWVudXR5cGUgbWVzcyBtZXNzYWdlW3NdIG1vZGFsIG1vdXNlIG5vcGFnaW5nIG9mZiBvbiBvdGhlcnMgcGFnZSBwYXVzZSBwaW5hY3Rpb24gcG9wdXAgcG9zaXRpb24gcHQgcHVsbGRvd24gcHVzaCBwdXNocG9pbnQgciByZXBlYXQgcmV0dXJuIHJpZ2h0IHJvdXRpbmUgcnVuIHJ1bndhdGNoIHJ3IHNjcmVlbiBzZWNvbmRzIHNlbGVjdCBzZWxmIHNldGNoYXIgc2V2ZXJpdHkgc2hvdyBzaWRlYmFyIHNpbmdsZSBzaXplIHN0YWdnZXJlZCBzdGF0aW9uIHN0b3Agc3RyaXBlIHN5cyBzeXN0ZW0gdGFibGV0IHRiIHRlcm1pbmFsIHRlc3QgdGhlbiB0aHJlYWQgdG8gdG9wIHRyYW5zbGF0ZSB0dHkgdHkgdHlwZSB1YyB1bCB1bnRpbCB1ciB1c2FnZSB3IHdhcm5pbmcgd2F0Y2ggd2hlbiB3aGlsZSB3aW5kb3cgd29ya3NwYWNlCisKK3N5biBrZXl3b3JkIGFtbERpcjIgY29udGFpbmVkICBkZWx2YXIgZHYgcyBzZXQgc2V0dmFyIHN2CisKK3N5biBrZXl3b3JkIGFtbE91dHB1dCBjb250YWluZWQgIGluZm9ybSB3YXJuaW5nIGVycm9yIHBhdXNlIHN0b3AgdHR5IHR5IHR5cGUKKworCisiIEFNTCBEaXJlY3RpdmVzOgorc3luIG1hdGNoIGFtbERpclN5bSAiJiIKK3N5biBtYXRjaCBhbWxEaXJlY3RpdmUgIiZbYS16QS1aXSoiIGNvbnRhaW5zPWFtbERpcixhbWxEaXIyLGFtbERpclN5bQorCisiIEFNTCBGdW5jdGlvbnMKK3N5biByZWdpb24gYW1sRnVuYyBzdGFydD0iXFsgKlthLXpBLVpdKiIgZW5kPSJcXSIgY29udGFpbnM9YW1sRnVuY3Rpb24sYW1sVmFyCitzeW4gbWF0Y2ggYW1sRnVuYzIgIlxbLipcWy4qXF0uKlxdIiBjb250YWlucz1hbWxGdW5jdGlvbixhbWxWYXIKKworIiBOdW1iZXJzOgorInN5biBtYXRjaCBhbWxOdW1iZXIJCSItXD1cPFswLTldKlwuXD1bMC05X11cPiIKKworIiBRdW90ZWQgU3RyaW5nczoKK3N5biByZWdpb24gYW1sUXVvdGUgc3RhcnQ9KyIrIHNraXA9K1xcIisgZW5kPSsiKyBjb250YWlucz1hbWxWYXIKK3N5biByZWdpb24gYW1sUXVvdGUgc3RhcnQ9KycrIHNraXA9K1xcJysgZW5kPSsnKworCisiIEFSQyBBcHBsaWNhdGlvbiBDb21tYW5kcyBvbmx5IHNlbGVjdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUsCisiIG9yIGFmdGVyIGEgb25lIGxpbmUgJmlmICZ0aGVuIHN0YXRlbWVudAorc3luIG1hdGNoIGFtbEFwcENtZCAiXiAqW2EtekEtWl0qIiBjb250YWlucz1hbWxBcmNDbWQsYW1sSW5mb0NtZCxhbWxUYWJDbWQsYW1sVnRyQ21kLGFtbEZvcm1lZENtZAorc3luIHJlZ2lvbiBhbWxBcHBDbWQgc3RhcnQ9IiZ0aGVuIiBlbmQ9IiQiIGNvbnRhaW5zPWFtbEFyY0NtZCxhbWxGb3JtZWRDbWQsYW1sSW5mb0NtZCxhbWxUYWJDbWQsYW1sVnRyQ21kLGFtbEZ1bmN0aW9uLGFtbERpcmVjdGl2ZSxhbWxWYXIyLGFtbFNraXAsYW1sVmFyLGFtbENvbW1lbnQKKworIiBWYXJpYWJsZXMKK3N5biByZWdpb24gYW1sVmFyIHN0YXJ0PSIlIiBlbmQ9IiUiCitzeW4gcmVnaW9uIGFtbFZhciBzdGFydD0iJSIgZW5kPSIlIiBjb250YWluZWQKK3N5biBtYXRjaCBhbWxWYXIyICImcyBbYS16QS1aXy4wLTldKiIgY29udGFpbnM9YW1sRGlyMixhbWxEaXJTeW0KK3N5biBtYXRjaCBhbWxWYXIyICImc3YgW2EtekEtWl8uMC05XSoiIGNvbnRhaW5zPWFtbERpcjIsYW1sRGlyU3ltCitzeW4gbWF0Y2ggYW1sVmFyMiAiJnNldCBbYS16QS1aXy4wLTldKiIgY29udGFpbnM9YW1sRGlyMixhbWxEaXJTeW0KK3N5biBtYXRjaCBhbWxWYXIyICImc2V0dmFyIFthLXpBLVpfLjAtOV0qIiBjb250YWlucz1hbWxEaXIyLGFtbERpclN5bQorc3luIG1hdGNoIGFtbFZhcjIgIiZkdiBbYS16QS1aXy4wLTldKiIgY29udGFpbnM9YW1sRGlyMixhbWxEaXJTeW0KK3N5biBtYXRjaCBhbWxWYXIyICImZGVsdmFyIFthLXpBLVpfLjAtOV0qIiBjb250YWlucz1hbWxEaXIyLGFtbERpclN5bQorCisiIEZvcm1lZGl0IDIgd29yZCBjb21tYW5kcworc3luIG1hdGNoIGFtbEZvcm1lZCAiXiAqY2hlY2sgYm94Igorc3luIG1hdGNoIGFtbEZvcm1lZCAiXiAqZGF0YSBsaXN0Igorc3luIG1hdGNoIGFtbEZvcm1lZCAiXiAqc3ltYm9sIGxpc3QiCisKKyIgVGFibGVzIDIgd29yZCBjb21tYW5kcworc3luIG1hdGNoIGFtbFRhYiAiXiAqcSBzdG9wIgorc3luIG1hdGNoIGFtbFRhYiAiXiAqcXVpdCBzdG9wIgorCisiIENvbW1lbnRzOgorc3luIG1hdGNoIGFtbENvbW1lbnQgIi9cKi4qIgorCisiIFJlZ2lvbnMgZm9yIHNraXBwaW5nIG92ZXIgKG5vdCBoaWdobGlnaHRpbmcpIHByb2dyYW0gb3V0cHV0IHN0cmluZ3M6CitzeW4gcmVnaW9uIGFtbFNraXAgbWF0Y2hncm91cD1hbWxPdXRwdXQgc3RhcnQ9IiZjYWxsIiBlbmQ9IiQiIGNvbnRhaW5zPWFtbFZhcgorc3luIHJlZ2lvbiBhbWxTa2lwIG1hdGNoZ3JvdXA9YW1sT3V0cHV0IHN0YXJ0PSImcm91dGluZSIgZW5kPSIkIiBjb250YWlucz1hbWxWYXIKK3N5biByZWdpb24gYW1sU2tpcCBtYXRjaGdyb3VwPWFtbE91dHB1dCBzdGFydD0iJmluZm9ybSIgZW5kPSIkIiBjb250YWlucz1hbWxWYXIKK3N5biByZWdpb24gYW1sU2tpcCBtYXRjaGdyb3VwPWFtbE91dHB1dCBzdGFydD0iJnJldHVybiAmaW5mb3JtIiBlbmQ9IiQiIGNvbnRhaW5zPWFtbFZhcgorc3luIHJlZ2lvbiBhbWxTa2lwIG1hdGNoZ3JvdXA9YW1sT3V0cHV0IHN0YXJ0PSImcmV0dXJuICZ3YXJuaW5nIiBlbmQ9IiQiIGNvbnRhaW5zPWFtbFZhcgorc3luIHJlZ2lvbiBhbWxTa2lwIG1hdGNoZ3JvdXA9YW1sT3V0cHV0IHN0YXJ0PSImcmV0dXJuICZlcnJvciIgZW5kPSIkIiBjb250YWlucz1hbWxWYXIKK3N5biByZWdpb24gYW1sU2tpcCBtYXRjaGdyb3VwPWFtbE91dHB1dCBzdGFydD0iJnBhdXNlIiBlbmQ9IiQiIGNvbnRhaW5zPWFtbFZhcgorc3luIHJlZ2lvbiBhbWxTa2lwIG1hdGNoZ3JvdXA9YW1sT3V0cHV0IHN0YXJ0PSImc3RvcCIgZW5kPSIkIiBjb250YWlucz1hbWxWYXIKK3N5biByZWdpb24gYW1sU2tpcCBtYXRjaGdyb3VwPWFtbE91dHB1dCBzdGFydD0iJnR0eSIgZW5kPSIkIiBjb250YWlucz1hbWxWYXIKK3N5biByZWdpb24gYW1sU2tpcCBtYXRjaGdyb3VwPWFtbE91dHB1dCBzdGFydD0iJnR5IiBlbmQ9IiQiIGNvbnRhaW5zPWFtbFZhcgorc3luIHJlZ2lvbiBhbWxTa2lwIG1hdGNoZ3JvdXA9YW1sT3V0cHV0IHN0YXJ0PSImdHlwIiBlbmQ9IiQiIGNvbnRhaW5zPWFtbFZhcgorc3luIHJlZ2lvbiBhbWxTa2lwIG1hdGNoZ3JvdXA9YW1sT3V0cHV0IHN0YXJ0PSImdHlwZSIgZW5kPSIkIiBjb250YWlucz1hbWxWYXIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYW1sX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2FtbF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBhbWxDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIGFtbE51bWJlcglOdW1iZXIKKyAgSGlMaW5rIGFtbFF1b3RlCVN0cmluZworICBIaUxpbmsgYW1sVmFyCUlkZW50aWZpZXIKKyAgSGlMaW5rIGFtbFZhcjIJSWRlbnRpZmllcgorICBIaUxpbmsgYW1sRnVuY3Rpb24JUHJlUHJvYworICBIaUxpbmsgYW1sRGlyCVN0YXRlbWVudAorICBIaUxpbmsgYW1sRGlyMglTdGF0ZW1lbnQKKyAgSGlMaW5rIGFtbERpclN5bQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGFtbE91dHB1dAlTdGF0ZW1lbnQKKyAgSGlMaW5rIGFtbEFyY0NtZAlNb2RlTXNnCisgIEhpTGluayBhbWxGb3JtZWRDbWQJYW1sQXJjQ21kCisgIEhpTGluayBhbWxUYWJDbWQJYW1sQXJjQ21kCisgIEhpTGluayBhbWxJbmZvQ21kCWFtbEFyY0NtZAorICBIaUxpbmsgYW1sVnRyQ21kCWFtbEFyY0NtZAorICBIaUxpbmsgYW1sRm9ybWVkCWFtbEFyY0NtZAorICBIaUxpbmsgYW1sVGFiCWFtbEFyY0NtZAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJhbWwiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hbXBsLnZpbSBiL3J1bnRpbWUvc3ludGF4L2FtcGwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNGRmYTkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9hbXBsLnZpbQpAQCAtMCwwICsxLDE1MCBAQAorIiBMYW5ndWFnZTogICAgIGFtcGwgKEEgTWF0aGVtYXRpY2FsIFByb2dyYW1taW5nIExhbmd1YWdlKQorIiBNYWludGFpbmVyOiAgIEtyaWVmIERhdmlkIDxkYXZpZC5rcmllZkBldHUuZW5zZWVpaHQuZnI+IG9yIDxkYXZpZF9rcmllZkBob3RtYWlsLmNvbT4KKyIgTGFzdCBDaGFuZ2U6ICAyMDAzIE1heSAxMQorCisKK2lmIHZlcnNpb24gPCA2MDAKKyBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorIGZpbmlzaAorZW5kaWYKKworCisKKworIi0tCitzeW4gbWF0Y2ggICBhbXBsRW50aXR5S2V5d29yZCAgICAgIlwoc3ViamVjdCB0b1wpXHxcKHN1YmogdG9cKVx8XChzXC50XC5cKSIKK3N5biBrZXl3b3JkIGFtcGxFbnRpdHlLZXl3b3JkCSAgbWluaW1pemUgICBtYXhpbWl6ZSAgb2JqZWN0aXZlCisKK3N5biBrZXl3b3JkIGFtcGxFbnRpdHlLZXl3b3JkCSAgY29lZmYgICAgICBjb2VmICAgICAgY292ZXIJICAgIG9iaiAgICAgICBkZWZhdWx0CitzeW4ga2V5d29yZCBhbXBsRW50aXR5S2V5d29yZAkgIGZyb20JICAgICB0byAgICAgICAgdG9fY29tZQkgICAgbmV0X2luICAgIG5ldF9vdXQKK3N5biBrZXl3b3JkIGFtcGxFbnRpdHlLZXl3b3JkCSAgZGltZW4gICAgICBkaW1lbnNpb24KKworCisKKyItLQorc3luIGtleXdvcmQgYW1wbFR5cGUJCSAgaW50ZWdlciAgICBiaW5hcnkgICAgc2V0CSAgICBwYXJhbSAgICAgdmFyCitzeW4ga2V5d29yZCBhbXBsVHlwZQkJICBub2RlCSAgICAgb3JkZXJlZCAgIGNpcmN1bGFyICAgICByZXZlcnNlZCAgc3ltYm9saWMKK3N5biBrZXl3b3JkIGFtcGxUeXBlCQkgIGFyYworCisKKworIi0tCitzeW4ga2V5d29yZCBhbXBsU3RhdGVtZW50CSAgY2hlY2sgICAgICBjbG9zZSAgICAgXGRpc3BsYXkgICAgIGRyb3AgICAgICBpbmNsdWRlCitzeW4ga2V5d29yZCBhbXBsU3RhdGVtZW50CSAgcHJpbnQgICAgICBwcmludGYgICAgcXVpdAkgICAgcmVzZXQgICAgIHJlc3RvcmUKK3N5biBrZXl3b3JkIGFtcGxTdGF0ZW1lbnQJICBzb2x2ZSAgICAgIHVwZGF0ZSAgICB3cml0ZQkgICAgc2hlbGwgICAgIG1vZGVsCitzeW4ga2V5d29yZCBhbXBsU3RhdGVtZW50CSAgZGF0YQkgICAgIG9wdGlvbiAgICBsZXQJICAgIHNvbHV0aW9uICBmaXgKK3N5biBrZXl3b3JkIGFtcGxTdGF0ZW1lbnQJICB1bmZpeCAgICAgIGVuZCAgICAgICBmdW5jdGlvbiAgICAgcGlwZSAgICAgIGZvcm1hdAorCisKKworIi0tCitzeW4ga2V5d29yZCBhbXBsQ29uZGl0aW9uYWwJICBpZgkgICAgIHRoZW4gICAgICBlbHNlCSAgICBhbmQgICAgICAgb3IKK3N5biBrZXl3b3JkIGFtcGxDb25kaXRpb25hbAkgIGV4aXN0cyAgICAgZm9yYWxsICAgIGluCSAgICBub3QgICAgICAgd2l0aGluCisKKworCisiLS0KK3N5biBrZXl3b3JkIGFtcGxSZXBlYXQJCSAgd2hpbGUgICAgICByZXBlYXQgICAgZm9yCisKKworCisiLS0KK3N5biBrZXl3b3JkIGFtcGxPcGVyYXRvcnMJICB1bmlvbiAgICAgIGRpZmYgICAgICBkaWZmZXJlbmNlICAgc3ltZGlmZiAgIHN1bQorc3luIGtleXdvcmQgYW1wbE9wZXJhdG9ycwkgIGludGVyICAgICAgaW50ZXJzZWN0IGludGVyc2VjdGlvbiBjcm9zcyAgICAgc2V0b2YKK3N5biBrZXl3b3JkIGFtcGxPcGVyYXRvcnMJICBieQkgICAgIGxlc3MgICAgICBtb2QJICAgIGRpdiAgICAgICBwcm9kdWN0Cisic3luIGtleXdvcmQgYW1wbE9wZXJhdG9ycwkgICBtaW4JICAgICAgbWF4CisiY29uZmxpY3QgYmV0d2VlbiBmdW5jdGlvbnMgbWF4LCBtaW4gYW5kIG9wZXJhdG9ycyBtYXgsIG1pbgorCitzeW4gbWF0Y2ggICBhbXBsQmFzaWNPcGVyYXRvcnMgICAgInx8XHw8PVx8PT1cfFxeXHw8XHw9XHwhXHwtXHxcLlwuXHw6PSIKK3N5biBtYXRjaCAgIGFtcGxCYXNpY09wZXJhdG9ycyAgICAiJiZcfD49XHwhPVx8XCpcfD5cfDpcfC9cfCtcfFwqXCoiCisKKworCisKKyItLQorc3luIG1hdGNoICAgYW1wbENvbW1lbnQJCSJcIy4qIgorc3luIHJlZ2lvbiAgYW1wbENvbW1lbnQJCXN0YXJ0PStcL1wqKwkJICBlbmQ9K1wqXC8rCisKK3N5biByZWdpb24gIGFtcGxTdHJpbmdzCQlzdGFydD0rXCcrICAgIHNraXA9K1xcJysgIGVuZD0rXCcrCitzeW4gcmVnaW9uICBhbXBsU3RyaW5ncwkJc3RhcnQ9K1wiKyAgICBza2lwPStcXCIrICBlbmQ9K1wiKworCitzeW4gbWF0Y2ggICBhbXBsTnVtZXJpY3MJIlsrLV1cPVw8XGRcK1woXC5cZFwrXClcPVwoW2REZUVdWy0rXVw9XGRcK1wpXD1cPiIKK3N5biBtYXRjaCAgIGFtcGxOdW1lcmljcwkiWystXVw9SW5maW5pdHkiCisKKworIi0tCitzeW4ga2V5d29yZCBhbXBsU2V0RnVuY3Rpb24JICBjYXJkCSAgICAgbmV4dCAgICAgbmV4dHcJICBwcmV2CSAgICBwcmV2dworc3luIGtleXdvcmQgYW1wbFNldEZ1bmN0aW9uCSAgZmlyc3QgICAgICBsYXN0ICAgICBtZW1iZXIJICBvcmQJICAgIG9yZDAKKworc3luIGtleXdvcmQgYW1wbEJ1aWx0SW5GdW5jdGlvbiAgIGFicwkgICAgIGFjb3MgICAgIGFjb3NoCSAgYWxpYXMgICAgIGFzaW4KK3N5biBrZXl3b3JkIGFtcGxCdWlsdEluRnVuY3Rpb24gICBhc2luaCAgICAgIGF0YW4gICAgIGF0YW4yCSAgYXRhbmggICAgIGNlaWwKK3N5biBrZXl3b3JkIGFtcGxCdWlsdEluRnVuY3Rpb24gICBjb3MJICAgICBleHAgICAgICBmbG9vcgkgIGxvZwkgICAgbG9nMTAKK3N5biBrZXl3b3JkIGFtcGxCdWlsdEluRnVuY3Rpb24gICBtYXgJICAgICBtaW4gICAgICBwcmVjaXNpb24gICByb3VuZCAgICAgc2luCitzeW4ga2V5d29yZCBhbXBsQnVpbHRJbkZ1bmN0aW9uICAgc2luaAkgICAgIHNxcnQgICAgIHRhbgkgIHRhbmgJICAgIHRydW5jCisKK3N5biBrZXl3b3JkIGFtcGxSYW5kb21HZW5lcmF0b3IgICBCZXRhCSAgICAgQ2F1Y2h5ICAgRXhwb25lbnRpYWwgR2FtbWEgICAgIElyYW5kMjI0CitzeW4ga2V5d29yZCBhbXBsUmFuZG9tR2VuZXJhdG9yICAgTm9ybWFsICAgICBQb2lzc29uICBVbmlmb3JtCSAgVW5pZm9ybTAxCisKKworCisiLS0gdG8gaGlnaGxpZ2h0IHRoZSAnZG90LXN1ZmZpeGVzJworc3luIG1hdGNoICAgYW1wbERvdFN1ZmZpeAkiXGhcdypcLlwobGJcfHViXCkiaHM9ZS0yCitzeW4gbWF0Y2ggICBhbXBsRG90U3VmZml4CSJcaFx3KlwuXChsYjBcfGxiMVx8bGIyXHxscmNcfHViMFwpImhzPWUtMworc3luIG1hdGNoICAgYW1wbERvdFN1ZmZpeAkiXGhcdypcLlwodWIxXHx1YjJcfHVyY1x8dmFsXHxsYnNcfHVic1wpImhzPWUtMworc3luIG1hdGNoICAgYW1wbERvdFN1ZmZpeAkiXGhcdypcLlwoaW5pdFx8Ym9keVx8ZGluaXRcfGR1YWxcKSJocz1lLTQKK3N5biBtYXRjaCAgIGFtcGxEb3RTdWZmaXgJIlxoXHcqXC5cKGluaXQwXHxsZHVhbFx8c2xhY2tcfHVkdWFsXCkiaHM9ZS01CitzeW4gbWF0Y2ggICBhbXBsRG90U3VmZml4CSJcaFx3KlwuXChsc2xhY2tcfHVzbGFja1x8ZGluaXQwXCkiaHM9ZS02CisKKworCisiLS0KK3N5biBtYXRjaCAgIGFtcGxQaWVjZXdpc2UJIjw8XHw+PiIKKworCisKKyItLSBUb2RvLgorc3luIGtleXdvcmQgYW1wbFRvZG8gY29udGFpbmVkCSBUT0RPIEZJWE1FIFhYWAorCisKKworCisKKworCisKKworCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYW1wbF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9hbXBsX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuIENhbiBiZSBvdmVycmlkZGVuIGxhdGVyLgorICBIaUxpbmsgYW1wbEVudGl0eUtleXdvcmQJS2V5d29yZAorICBIaUxpbmsgYW1wbFR5cGUJCVR5cGUKKyAgSGlMaW5rIGFtcGxTdGF0ZW1lbnQJCVN0YXRlbWVudAorICBIaUxpbmsgYW1wbE9wZXJhdG9ycwkJT3BlcmF0b3IKKyAgSGlMaW5rIGFtcGxCYXNpY09wZXJhdG9ycwlPcGVyYXRvcgorICBIaUxpbmsgYW1wbENvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluayBhbXBsUmVwZWF0CQlSZXBlYXQKKyAgSGlMaW5rIGFtcGxTdHJpbmdzCQlTdHJpbmcKKyAgSGlMaW5rIGFtcGxOdW1lcmljcwkJTnVtYmVyCisgIEhpTGluayBhbXBsU2V0RnVuY3Rpb24JRnVuY3Rpb24KKyAgSGlMaW5rIGFtcGxCdWlsdEluRnVuY3Rpb24JRnVuY3Rpb24KKyAgSGlMaW5rIGFtcGxSYW5kb21HZW5lcmF0b3IJRnVuY3Rpb24KKyAgSGlMaW5rIGFtcGxDb21tZW50CQlDb21tZW50CisgIEhpTGluayBhbXBsRG90U3VmZml4CQlTcGVjaWFsCisgIEhpTGluayBhbXBsUGllY2V3aXNlCQlTcGVjaWFsCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImFtcGwiCisKKyIgdmltOiB0cz04CisKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYW50LnZpbSBiL3J1bnRpbWUvc3ludGF4L2FudC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0NmVjNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2FudC52aW0KQEAgLTAsMCArMSw5NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUFOVCBidWlsZCBmaWxlICh4bWwpCisiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgorIiBMYXN0IENoYW5nZToJVHVlIEFwciAyNyAxMzowNTo1OSBDRVNUIDIwMDQKKyIgRmlsZW5hbWVzOglidWlsZC54bWwKKyIgJElkJAorCisiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK2xldCBzOmFudF9jcG9fc2F2ZSA9ICZjcG8KK3NldCBjcG8mdmltCisKK3J1bnRpbWUhIHN5bnRheC94bWwudmltCisKK3N5biBjYXNlIGlnbm9yZQorCitpZiAhZXhpc3RzKCcqQW50U3ludGF4U2NyaXB0JykKKyAgICBmdW4gQW50U3ludGF4U2NyaXB0KHRhZ25hbWUsIHN5bmZpbGVuYW1lKQorCXVubGV0IGI6Y3VycmVudF9zeW50YXgKKwlsZXQgczppbmNsdWRlID0gZXhwYW5kKCI8c2ZpbGU+OnA6aCIpLicvJy5hOnN5bmZpbGVuYW1lCisJaWYgZmlsZXJlYWRhYmxlKHM6aW5jbHVkZSkKKwkgICAgZXhlICdzeW4gaW5jbHVkZSBAYW50Jy5hOnRhZ25hbWUuJyAnLnM6aW5jbHVkZQorCWVsc2UKKwkgICAgZXhlICdzeW4gaW5jbHVkZSBAYW50Jy5hOnRhZ25hbWUuIiAkVklNUlVOVElNRS9zeW50YXgvIi5hOnN5bmZpbGVuYW1lCisJZW5kaWYKKworCWV4ZSAnc3luIHJlZ2lvbiBhbnQnLmE6dGFnbmFtZQorCQkgICAgXC4iIHN0YXJ0PSM8c2NyaXB0W14+XVxcey19bGFuZ3VhZ2VcXHMqPVxccypbJ1wiXSIuYTp0YWduYW1lLiJbJ1wiXVxcKD5cXHxbXj5dKlteLz5dPlxcKSMiCisJCSAgICBcLicgZW5kPSM8L3NjcmlwdD4jJworCQkgICAgXC4nIGZvbGQnCisJCSAgICBcLicgY29udGFpbnM9QGFudCcuYTp0YWduYW1lLicseG1sQ2RhdGFTdGFydCx4bWxDZGF0YUVuZCx4bWxUYWcseG1sRW5kVGFnJworCQkgICAgXC4nIGtlZXBlbmQnCisJZXhlICdzeW4gY2x1c3RlciB4bWxSZWdpb25Ib29rIGFkZD1hbnQnLmE6dGFnbmFtZQorICAgIGVuZGZ1bgorZW5kaWYKKworIiBUT0RPOiBhZGQgbW9yZSBzY3JpcHQgbGFuZ3VhZ2VzIGhlcmUgPworY2FsbCBBbnRTeW50YXhTY3JpcHQoJ2phdmFzY3JpcHQnLCAnamF2YXNjcmlwdC52aW0nKQorY2FsbCBBbnRTeW50YXhTY3JpcHQoJ2pweXRob24nLCAncHl0aG9uLnZpbScpCisKKworc3luIGNsdXN0ZXIgeG1sVGFnSG9vayBhZGQ9YW50RWxlbWVudAorCitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgV3NkbFRvRG90bmV0IGFkZGZpbGVzIGFuZCBhbnQgYW50Y2FsbCBhbnRzdHJ1Y3R1cmUgYXBwbHkgYXJjaGl2ZXMgYXJnIGFyZ3VtZW50CitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgYXNzZXJ0aW9ucyBhdHRyaWIgYXR0cmlidXRlIGF2YWlsYWJsZSBiYXNlbmFtZSBiY2MgYmxnZW5jbGllbnQgYm9vdGNsYXNzcGF0aAorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IGJvcmxhbmQgYm90dG9tIGJ1aWxkbnVtYmVyIGJ1aWxkcGF0aCBidWlsZHBhdGhlbGVtZW50IGJ1bnppcDIgYnppcDIgY2FiCitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgY2F0YWxvZ3BhdGggY2MgY2NjaGVja2luIGNjY2hlY2tvdXQgY2Nsb2NrIGNjbWNoZWNraW4gY2NtY2hlY2tpbnRhc2sgY2NtY2hlY2tvdXQKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSBjY21jcmVhdGV0YXNrIGNjbWthdHRyIGNjbWtibCBjY21rZGlyIGNjbWtlbGVtIGNjbWtsYWJlbCBjY21rbGJ0eXBlCitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgY2NtcmVjb25maWd1cmUgY2NybXR5cGUgY2N1bmNoZWNrb3V0IGNjdW5sb2NrIGNjdXBkYXRlIGNoZWNrc3VtIGNoZ3JwIGNobW9kCitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgY2hvd24gY2xhc3Njb25zdGFudHMgY2xhc3NlcyBjbGFzc2ZpbGVzZXQgY2xhc3NwYXRoIGNvbW1hbmRsaW5lIGNvbW1lbnQKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSBjb21waWxlcmFyZyBjb21waWxlcmNsYXNzcGF0aCBjb25jYXQgY29uY2F0ZmlsdGVyIGNvbmRpdGlvbiBjb3B5IGNvcHlkaXIKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSBjb3B5ZmlsZSBjb3ZlcmFnZXBhdGggY3NjIGN1c3RvbSBjdnMgY3ZzY2hhbmdlbG9nIGN2c3Bhc3MgY3ZzdGFnZGlmZiBjdnN2ZXJzaW9uCitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgZGFlbW9ucyBkYXRlIGRlZmF1bHRleGNsdWRlcyBkZWZpbmUgZGVsZXRlIGRlbGV0ZWNoYXJhY3RlcnMgZGVsdHJlZSBkZXBlbmQKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSBkZXBlbmRzIGRlcGVuZHNldCBkZXB0aCBkZXNjcmlwdGlvbiBkaWZmZXJlbnQgZGlybmFtZSBkaXJzZXQgZGlzYWJsZSBkbmFtZQorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IGRvY2xldCBkb2N0aXRsZSBkdGQgZWFyIGVjaG8gZWNob3Byb3BlcnRpZXMgZWpiamFyIGVsZW1lbnQgZW5hYmxlIGVudGl0eSBlbnRyeQorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IGVudiBlcXVhbHMgZXNjYXBldW5pY29kZSBleGNsdWRlIGV4Y2x1ZGVwYWNrYWdlIGV4Y2x1ZGVzZmlsZSBleGVjIGV4ZWNvbgorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IGV4aXN0aW5nIGV4cGFuZHByb3BlcnRpZXMgZXh0ZGlycyBleHRlbnNpb24gZXh0ZW5zaW9uU2V0IGV4dGVuc2lvbnNldCBmYWN0b3J5CitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgZmFpbCBmaWxlbGlzdCBmaWxlbmFtZSBmaWxlcGF0aCBmaWxlc2V0IGZpbGVzbWF0Y2ggZmlsZXRva2VuaXplciBmaWx0ZXIKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSBmaWx0ZXJjaGFpbiBmaWx0ZXJyZWFkZXIgZmlsdGVycyBmaWx0ZXJzZXQgZmlsdGVyc2ZpbGUgZml4Y3JsZiBmb290ZXIgZm9ybWF0CitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgZnJvbSBmdHAgZ2VuZXJpYyBnZW5rZXkgZ2V0IGdqZG9jIGdyYW50IGdyb3VwIGd1bnppcCBnemlwIGhlYWRlciBoZWFkZmlsdGVyIGh0dHAKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSBpZ25vcmVibGFuayBpbGFzbSBpbGRhc20gaW1wb3J0IGltcG9ydHR5cGVsaWIgaW5jbHVkZSBpbmNsdWRlc2ZpbGUgaW5wdXQgaXBsYW5ldAorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IGlwbGFuZXQtZWpiYyBpc2ZhbHNlIGlzcmVmZXJlbmNlIGlzc2V0IGlzdHJ1ZSBqYXIgamFybGliLWF2YWlsYWJsZQorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IGphcmxpYi1tYW5pZmVzdCBqYXJsaWItcmVzb2x2ZSBqYXZhIGphdmFjIGphdmFjYyBqYXZhZG9jIGphdmFkb2MyIGpib3NzIGpkZXBlbmQKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSBqamRvYyBqanRyZWUgamxpbmsgam9uYXMganBjb3ZlcmFnZSBqcGNvdm1lcmdlIGpwY292cmVwb3J0IGpzaGFycGMganNwYworc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IGp1bml0cmVwb3J0IGp2bWFyZyBsaWIgbGliZmlsZXNldCBsaW5ldG9rZW5pemVyIGxpbmsgbG9hZGZpbGUgbG9hZHByb3BlcnRpZXMKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSBsb2NhdGlvbiBtYWNyb2RlZiBtYWlsIG1ham9yaXR5IG1hbmlmZXN0IG1hcCBtYXBwZXIgbWFya2VyIG1lcmdlZmlsZXMgbWVzc2FnZQorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IG1ldGFpbmYgbWV0aG9kIG1pbWVtYWlsIG1rZGlyIG1tZXRyaWNzIG1vZGlmaWVkIG1vdmUgbXBhcnNlIG5vbmUgbm90IG9wdGlvbnMgb3IKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSBvcyBvdXRwdXRwcm9wZXJ0eSBwYWNrYWdlIHBhY2thZ2VzZXQgcGFyYWxsZWwgcGFyYW0gcGF0Y2ggcGF0aCBwYXRoY29udmVydAorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IHBhdGhlbGVtZW50IHBhdHRlcm5zZXQgcGVybWlzc2lvbnMgcHJlZml4bGluZXMgcHJlc2VudCBwcmVzZXRkZWYgcHJvamVjdAorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IHByb3BlcnR5IHByb3BlcnR5ZmlsZSBwcm9wZXJ0eXJlZiBwcm9wZXJ0eXNldCBwdmNzIHB2Y3Nwcm9qZWN0IHJlY29yZCByZWZlcmVuY2UKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSByZWdleHAgcmVuYW1lIHJlbmFtZWV4dCByZXBsYWNlIHJlcGxhY2VmaWx0ZXIgcmVwbGFjZXJlZ2V4IHJlcGxhY2VyZWdleHAKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSByZXBsYWNlc3RyaW5nIHJlcGxhY2V0b2tlbiByZXBsYWNldG9rZW5zIHJlcGxhY2V2YWx1ZSByZXBseXRvIHJlcG9ydCByZXNvdXJjZQorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IHJldm9rZSBybWljIHJvb3Qgcm9vdGZpbGVzZXQgcnBtIHNjcCBzZWN0aW9uIHNlbGVjdG9yIHNlcXVlbnRpYWwgc2VydmVyZGVwbG95CitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgc2V0cHJveHkgc2lnbmphciBzaXplIHNsZWVwIHNvY2tldCBzb3NjaGVja2luIHNvc2NoZWNrb3V0IHNvc2dldCBzb3NsYWJlbCBzb3VyY2UKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSBzb3VyY2VwYXRoIHNxbCBzcmMgc3JjZmlsZSBzcmNmaWxlbGlzdCBzcmNmaWxlcyBzcmNmaWxlc2V0IHNzaGV4ZWMgc3RjaGVja2luCitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgc3RjaGVja291dCBzdGxhYmVsIHN0bGlzdCBzdHJpbmd0b2tlbml6ZXIgc3RyaXBqYXZhY29tbWVudHMgc3RyaXBsaW5lYnJlYWtzCitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgc3RyaXBsaW5lY29tbWVudHMgc3R5bGUgc3ViYW50IHN1YnN0aXR1dGlvbiBzdXBwb3J0IHN5bWxpbmsgc3luYyBzeXNwcm9wZXJ0eQorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IHN5c3Byb3BlcnR5c2V0IHRhYnN0b3NwYWNlcyB0YWcgdGFnbGV0IHRhaWxmaWx0ZXIgdGFyIHRhcmZpbGVzZXQgdGFyZ2V0CitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgdGFyZ2V0ZmlsZSB0YXJnZXRmaWxlbGlzdCB0YXJnZXRmaWxlc2V0IHRhc2tkZWYgdGVtcGZpbGUgdGVzdCB0ZXN0bGV0IHRleHQgdGl0bGUKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSB0byB0b2tlbiB0b2tlbmZpbHRlciB0b3VjaCB0cmFuc2FjdGlvbiB0cmFuc2xhdGUgdHJpZ2dlcnMgdHJpbSB0c3RhbXAgdHlwZQorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IHR5cGVkZWYgdW5qYXIgdW50YXIgdW53YXIgdW56aXAgdXB0b2RhdGUgdXJsIHVzZXIgdmJjIHZzc2FkZCB2c3NjaGVja2luCitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgdnNzY2hlY2tvdXQgdnNzY3AgdnNzY3JlYXRlIHZzc2dldCB2c3NoaXN0b3J5IHZzc2xhYmVsIHdhaXRmb3Igd2FyIHdhc2NsYXNzcGF0aAorc3luIGtleXdvcmQgYW50RWxlbWVudCBkaXNwbGF5IHdlYmFwcCB3ZWJpbmYgd2VibG9naWMgd2VibG9naWN0b3BsaW5rIHdlYnNwaGVyZSB3aGljaHJlc291cmNlIHdsY2xhc3NwYXRoCitzeW4ga2V5d29yZCBhbnRFbGVtZW50IGRpc3BsYXkgd2xqc3BjIHdzZGx0b2RvdG5ldCB4bWxjYXRhbG9nIHhtbHByb3BlcnR5IHhtbHZhbGlkYXRlIHhzbHQgemlwIHppcGZpbGVzZXQKK3N5biBrZXl3b3JkIGFudEVsZW1lbnQgZGlzcGxheSB6aXBncm91cGZpbGVzZXQKKworaGkgZGVmIGxpbmsgYW50RWxlbWVudCBTdGF0ZW1lbnQKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYW50IgorCitsZXQgJmNwbyA9IHM6YW50X2Nwb19zYXZlCit1bmxldCBzOmFudF9jcG9fc2F2ZQorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYW50bHIudmltIGIvcnVudGltZS9zeW50YXgvYW50bHIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MDAwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9hbnRsci52aW0KQEAgLTAsMCArMSw3MCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgQW50bHI6CUFOVExSLCBBbm90aGVyIFRvb2wgRm9yIExhbmd1YWdlIFJlY29nbml0aW9uIDx3d3cuYW50bHIub3JnPgorIiBNYWludGFpbmVyOglNYXRoaWV1IENsYWJhdXQgPG1hdGhpZXUuY2xhYmF1dEBmcmVlLmZyPgorIiBMYXN0Q2hhbmdlOgkwMiBNYXkgMjAwMQorIiBPcmlnaW5hbDoJQ29tZXMgZnJvbSBKYXZhQ0MudmltCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgZmluaXNoCitlbmRpZgorCisiIFRoaXMgc3ludGFjIGZpbGUgaXMgYSBmaXJzdCBhdHRlbXB0LiBJdCBpcyBmYXIgZnJvbSBwZXJmZWN0Li4uCisKKyIgVXNlcyBqYXZhLnZpbSwgYW5kIGFkZHMgYSBmZXcgc3BlY2lhbCB0aGluZ3MgZm9yIEphdmFDQyBQYXJzZXIgZmlsZXMuCisiIFRob3NlIGZpbGVzIHVzdWFsbHkgaGF2ZSB0aGUgZXh0ZW5zaW9uICAqLmpqCisKKyIgc291cmNlIHRoZSBqYXZhLnZpbSBmaWxlCitpZiB2ZXJzaW9uIDwgNjAwCisgICBzbyA8c2ZpbGU+OnA6aC9qYXZhLnZpbQorZWxzZQorICAgcnVudGltZSEgc3ludGF4L2phdmEudmltCisgICB1bmxldCBiOmN1cnJlbnRfc3ludGF4CitlbmRpZgorCisicmVtb3ZlIGNhdGNoaW5nIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMgKGRvZXMgbm90IHdvcmsgaW4gYW50bHIKKyJmaWxlcykgKGZpcnN0IGRlZmluZSB0aGVtIGluIGNhc2UgdGhleSBoYXZlIG5vdCBiZWVuIGRlZmluZWQgaW4gamF2YSkKK3N5biBtYXRjaAlqYXZhUGFyZW4gIi0tIgorc3luIG1hdGNoCWphdmFQYXJlbkVycm9yICItLSIKK3N5biBtYXRjaAlqYXZhSW5QYXJlbiAiLS0iCitzeW4gbWF0Y2gJamF2YUVycm9yMiAiLS0iCitzeW4gY2xlYXIJamF2YVBhcmVuCitzeW4gY2xlYXIJamF2YVBhcmVuRXJyb3IKK3N5biBjbGVhcglqYXZhSW5QYXJlbgorc3luIGNsZWFyCWphdmFFcnJvcjIKKworIiByZW1vdmUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKHRoZXkgbG9vayBkaWZmZXJlbnQpIChmaXJzdCBkZWZpbmUgaW4KKyIgaW4gY2FzZSBpdCB3YXMgbm90IGRlZmluZWQgaW4gamF2YS52aW0pCisic3luIG1hdGNoIGphdmFGdW5jRGVmICItLSIKKyJzeW4gY2xlYXIgamF2YUZ1bmNEZWYKKyJzeW4gbWF0Y2ggamF2YUZ1bmNEZWYgIlthLXpBLVpdW2EtekEtWjAtOV8uIFxbXF1dKihbXi0rKi8oKV0qKVsgXHRdKjoiIGNvbnRhaW5zPWphdmFUeXBlCisiIHN5biByZWdpb24gamF2YUZ1bmNEZWYgc3RhcnQ9K3RbYS16QS1aXVthLXpBLVowLTlfLiBcW1xdXSooW14tKyovKCldKixbIAldKisgZW5kPSspWyBcdF0qOisKKworc3luIGtleXdvcmQgYW50bHJQYWNrYWdlcyBvcHRpb25zIGxhbmd1YWdlIGJ1aWxkQVNUCitzeW4gbWF0Y2ggYW50bHJQYWNrYWdlcyAiUEFSU0VSX0VORChbXildKikiCitzeW4gbWF0Y2ggYW50bHJQYWNrYWdlcyAiUEFSU0VSX0JFR0lOKFteKV0qKSIKK3N5biBtYXRjaCBhbnRsclNwZWNUb2tlbiAiPEVPRj4iCisiIHRoZSBkb3QgaXMgbmVjZXNzYXJ5IGFzIG90aGVyd2lzZSBpdCB3aWxsIGJlIG1hdGNoZWQgYXMgYSBrZXl3b3JkLgorc3luIG1hdGNoIGFudGxyU3BlY1Rva2VuICIuTE9PS0FIRUFEKCJtcz1zKzEsbWU9ZS0xCitzeW4gbWF0Y2ggYW50bHJTZXAgIlt8Ol1cfFwuXC4iCitzeW4ga2V5d29yZCBhbnRsckFjdGlvblRva2VuIFRPS0VOIFNLSVAgTU9SRSBTUEVDSUFMX1RPS0VOCitzeW4ga2V5d29yZCBhbnRsckVycm9yIERFQlVHIElHTk9SRV9JTl9CTkYKKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2FudGxyX3N5bnRheF9pbml0cyIpCisgICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgICBsZXQgZGlkX2FudGxyX3N5bnRheF9pbml0cyA9IDEKKyAgICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgICBlbHNlCisgICAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgIGVuZGlmCisgICBIaUxpbmsgYW50bHJTZXAgU3RhdGVtZW50CisgICBIaUxpbmsgYW50bHJQYWNrYWdlcyBTdGF0ZW1lbnQKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImFudGxyIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYXBhY2hlLnZpbSBiL3J1bnRpbWUvc3ludGF4L2FwYWNoZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlOWU4ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2FwYWNoZS52aW0KQEAgLTAsMCArMSwyNzUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIFRoaXMgaXMgYSBHRU5FUkFURUQgRklMRS4gUGxlYXNlIGFsd2F5cyByZWZlciB0byBzb3VyY2UgZmlsZSBhdCB0aGUgVVJJIGJlbG93LgorIiBMYW5ndWFnZTogQXBhY2hlIGNvbmZpZ3VyYXRpb24gKGh0dHBkLmNvbmYsIHNybS5jb25mLCBhY2Nlc3MuY29uZiwgLmh0YWNjZXNzKQorIiBNYWludGFpbmVyOiBEYXZpZCBOZVx2e2N9YXMgKFlldGkpIDx5ZXRpQHBoeXNpY3MubXVuaS5jej4KKyIgTGFzdCBDaGFuZ2U6IDIwMDItMTAtMTUKKyIgVVJMOiBodHRwOi8vdHJpZmljLmF0aC5jeC9GdHAvdmltL3N5bnRheC9hcGFjaGUudmltCisiIE5vdGU6IGRlZmluZSBhcGFjaGVfdmVyc2lvbiB0byB5b3VyIEFwYWNoZSB2ZXJzaW9uLCBlLmcuICIxLjMiLCAiMiIsICIyLjAuMzkiCisKKyIgU2V0dXAKK2lmIHZlcnNpb24gPj0gNjAwCisJaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKwkJZmluaXNoCisJZW5kaWYKK2Vsc2UKKwlzeW50YXggY2xlYXIKK2VuZGlmCisKK2lmIGV4aXN0cygiYXBhY2hlX3ZlcnNpb24iKQorCWxldCBzOmF2ID0gYXBhY2hlX3ZlcnNpb24KK2Vsc2UKKwlsZXQgczphdiA9ICIxLjMiCitlbmRpZgorbGV0IHM6YXYgPSBzdWJzdGl0dXRlKHM6YXYsICJbXi4wLTldIiwgIiIsICJnIikKK2xldCBzOmF2ID0gc3Vic3RpdHV0ZShzOmF2LCAiXlxcZFxcKyQiLCAiXFwwLjk5OSIsICIiKQorbGV0IHM6YXYgPSBzdWJzdGl0dXRlKHM6YXYsICJeXFxkXFwrXFwuXFxkXFwrJCIsICJcXDAuOTk5IiwgIiIpCitsZXQgczphdiA9IHN1YnN0aXR1dGUoczphdiwgIlxcPFxcZFxcPiIsICIwXFwwIiwgImciKQorbGV0IHM6YXYgPSBzdWJzdGl0dXRlKHM6YXYsICJcXDxcXGRcXGRcXD4iLCAiMFxcMCIsICJnIikKK2xldCBzOmF2ID0gc3Vic3RpdHV0ZShzOmF2LCAiWy5dIiwgIiIsICJnIikKKworc3luIGNhc2UgaWdub3JlCisKKyIgQmFzZSBjb25zdHJ1Y3RzCitzeW4gbWF0Y2ggYXBhY2hlQ29tbWVudCAiXlxzKiMuKiQiIGNvbnRhaW5zPWFwYWNoZUZpeG1lCitpZiBzOmF2ID49ICIwMDIwMDAwMDAiCisJc3luIG1hdGNoIGFwYWNoZVVzZXJJRCAiIy1cP1xkXCtcPiIKK2VuZGlmCitzeW4gY2FzZSBtYXRjaAorc3luIGtleXdvcmQgYXBhY2hlRml4bWUgRklYTUUgVE9ETyBYWFggTk9UCitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCBhcGFjaGVBbnl0aGluZyAiXHNbXj5dKiIgY29udGFpbmVkCitzeW4gbWF0Y2ggYXBhY2hlRXJyb3IgIlx3XCsiIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBhcGFjaGVTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisgc2tpcD0rXFxcXFx8XFxcIisKKworIiBDb3JlIGFuZCBtcG0KK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEFjY2Vzc0ZpbGVOYW1lIEFkZERlZmF1bHRDaGFyc2V0IEFsbG93T3ZlcnJpZGUgQXV0aE5hbWUgQXV0aFR5cGUgQ29udGVudERpZ2VzdCBEZWZhdWx0VHlwZSBEb2N1bWVudFJvb3QgRXJyb3JEb2N1bWVudCBFcnJvckxvZyBIb3N0TmFtZUxvb2t1cHMgSWRlbnRpdHlDaGVjayBJbmNsdWRlIEtlZXBBbGl2ZSBLZWVwQWxpdmVUaW1lb3V0IExpbWl0UmVxdWVzdEJvZHkgTGltaXRSZXF1ZXN0RmllbGRzIExpbWl0UmVxdWVzdEZpZWxkc2l6ZSBMaW1pdFJlcXVlc3RMaW5lIExvZ0xldmVsIE1heEtlZXBBbGl2ZVJlcXVlc3RzIE5hbWVWaXJ0dWFsSG9zdCBPcHRpb25zIFJlcXVpcmUgUkxpbWl0Q1BVIFJMaW1pdE1FTSBSTGltaXROUFJPQyBTYXRpc2Z5IFNjcmlwdEludGVycHJldGVyU291cmNlIFNlcnZlckFkbWluIFNlcnZlckFsaWFzIFNlcnZlck5hbWUgU2VydmVyUGF0aCBTZXJ2ZXJSb290IFNlcnZlclNpZ25hdHVyZSBTZXJ2ZXJUb2tlbnMgVGltZU91dCBVc2VDYW5vbmljYWxOYW1lCitpZiBzOmF2IDwgIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBBY2Nlc3NDb25maWcgQWRkTW9kdWxlIEJpbmRBZGRyZXNzIEJTMjAwMEFjY291bnQgQ2xlYXJNb2R1bGVMaXN0IENvcmVEdW1wRGlyZWN0b3J5IEdyb3VwIExpc3RlbiBMaXN0ZW5CYWNrbG9nIExvY2tGaWxlIE1heENsaWVudHMgTWF4UmVxdWVzdHNQZXJDaGlsZCBNYXhTcGFyZVNlcnZlcnMgTWluU3BhcmVTZXJ2ZXJzIFBpZEZpbGUgUG9ydCBSZXNvdXJjZUNvbmZpZyBTY29yZUJvYXJkRmlsZSBTZW5kQnVmZmVyU2l6ZSBTZXJ2ZXJUeXBlIFN0YXJ0U2VydmVycyBUaHJlYWRzUGVyQ2hpbGQgVGhyZWFkU3RhY2tTaXplIFVzZXIKK2VuZGlmCitpZiBzOmF2ID49ICIwMDIwMDAwMDAiCisJc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gQWNjZXB0UGF0aEluZm8gQ0dJTWFwRXh0ZW5zaW9uIEVuYWJsZU1NQVAgRmlsZUVUYWcgRm9yY2VUeXBlIExpbWl0WE1MUmVxdWVzdEJvZHkgU2V0SGFuZGxlciBTZXRJbnB1dEZpbHRlciBTZXRPdXRwdXRGaWx0ZXIKKwlzeW4ga2V5d29yZCBhcGFjaGVPcHRpb24gSU5vZGUgTVRpbWUgU2l6ZQorZW5kaWYKK3N5biBrZXl3b3JkIGFwYWNoZU9wdGlvbiBBbnkgQWxsIE9uIE9mZiBEb3VibGUgRU1haWwgRE5TIE1pbiBNaW5pbWFsIE9TIFByb2QgUHJvZHVjdE9ubHkgRnVsbAorc3luIGtleXdvcmQgYXBhY2hlT3B0aW9uIGVtZXJnIGFsZXJ0IGNyaXQgZXJyb3Igd2FybiBub3RpY2UgaW5mbyBkZWJ1Zworc3luIGtleXdvcmQgYXBhY2hlT3B0aW9uIHJlZ2lzdHJ5IHNjcmlwdCBpbmV0ZCBzdGFuZGFsb25lCitzeW4gbWF0Y2ggYXBhY2hlT3B0aW9uT3B0aW9uICJbKy1dXD9cPFwoRXhlY0NHSVx8Rm9sbG93U3ltTGlua3NcfEluY2x1ZGVzXHxJbmNsdWRlc05vRXhlY1x8SW5kZXhlc1x8TXVsdGlWaWV3c1x8U3ltTGlua3NJZk93bmVyTWF0Y2hcKVw+Igorc3luIGtleXdvcmQgYXBhY2hlT3B0aW9uIHVzZXIgZ3JvdXAgdmFsaWQtdXNlcgorc3luIGNhc2UgbWF0Y2gKK3N5biBrZXl3b3JkIGFwYWNoZU1ldGhvZE9wdGlvbiBHRVQgUE9TVCBQVVQgREVMRVRFIENPTk5FQ1QgT1BUSU9OUyBUUkFDRSBQQVRDSCBQUk9QRklORCBQUk9QUEFUQ0ggTUtDT0wgQ09QWSBNT1ZFIExPQ0sgVU5MT0NLIGNvbnRhaW5lZAorc3luIGNhc2UgaWdub3JlCitzeW4gbWF0Y2ggYXBhY2hlU2VjdGlvbiAiPFwvXD1cKERpcmVjdG9yeVx8RGlyZWN0b3J5TWF0Y2hcfEZpbGVzXHxGaWxlc01hdGNoXHxJZk1vZHVsZVx8SWZEZWZpbmVcfExvY2F0aW9uXHxMb2NhdGlvbk1hdGNoXHxWaXJ0dWFsSG9zdFwpXCsuKj4iIGNvbnRhaW5zPWFwYWNoZUFueXRoaW5nCitzeW4gbWF0Y2ggYXBhY2hlTGltaXRTZWN0aW9uICI8XC9cPVwoTGltaXRcfExpbWl0RXhjZXB0XClcKy4qPiIgY29udGFpbnM9YXBhY2hlTGltaXRTZWN0aW9uS2V5d29yZCxhcGFjaGVNZXRob2RPcHRpb24sYXBhY2hlRXJyb3IKK3N5biBrZXl3b3JkIGFwYWNoZUxpbWl0U2VjdGlvbktleXdvcmQgTGltaXQgTGltaXRFeGNlcHQgY29udGFpbmVkCitzeW4gbWF0Y2ggYXBhY2hlQXV0aFR5cGUgIkF1dGhUeXBlXHMuKiQiIGNvbnRhaW5zPWFwYWNoZUF1dGhUeXBlVmFsdWUKK3N5biBrZXl3b3JkIGFwYWNoZUF1dGhUeXBlVmFsdWUgQmFzaWMgRGlnZXN0CitzeW4gbWF0Y2ggYXBhY2hlQWxsb3dPdmVycmlkZSAiQWxsb3dPdmVycmlkZVxzLiokIiBjb250YWlucz1hcGFjaGVBbGxvd092ZXJyaWRlVmFsdWUsYXBhY2hlQ29tbWVudAorc3luIGtleXdvcmQgYXBhY2hlQWxsb3dPdmVycmlkZVZhbHVlIEF1dGhDb25maWcgRmlsZUluZm8gSW5kZXhlcyBMaW1pdCBPcHRpb25zIGNvbnRhaW5lZAoraWYgczphdiA+PSAiMDAyMDAwMDAwIgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIENvcmVEdW1wRGlyZWN0b3J5IEdyb3VwIExpc3RlbiBMaXN0ZW5CYWNrbG9nIExvY2tGaWxlIE1heENsaWVudHMgTWF4TWVtRnJlZSBNYXhSZXF1ZXN0c1BlckNoaWxkIE1heFNwYXJlVGhyZWFkcyBNYXhTcGFyZVRocmVhZHNQZXJDaGlsZCBNaW5TcGFyZVRocmVhZHMgTnVtU2VydmVycyBQaWRGaWxlIFNjb3JlQm9hcmRGaWxlIFNlbmRCdWZmZXJTaXplIFNlcnZlckxpbWl0IFN0YXJ0U2VydmVycyBTdGFydFRocmVhZHMgVGhyZWFkTGltaXQgVGhyZWFkc1BlckNoaWxkIFVzZXIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBNYXhUaHJlYWRzIFRocmVhZFN0YWNrU2l6ZQorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEFzc2lnblVzZXJJZCBDaGlsZFBlclVzZXJJZAorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEFjY2VwdE11dGV4IE1heFNwYXJlU2VydmVycyBNaW5TcGFyZVNlcnZlcnMKKwlzeW4ga2V5d29yZCBhcGFjaGVPcHRpb24gZmxvY2sgZmNudGwgc3lzdnNlbSBwdGhyZWFkCitlbmRpZgorCisiIE1vZHVsZXMKK3N5biBtYXRjaCBhcGFjaGVBbGxvd0RlbnkgIkFsbG93XHNcK2Zyb20uKiQiIGNvbnRhaW5zPWFwYWNoZUFsbG93RGVueVZhbHVlLGFwYWNoZUNvbW1lbnQKK3N5biBtYXRjaCBhcGFjaGVBbGxvd0RlbnkgIkRlbnlcc1wrZnJvbS4qJCIgY29udGFpbnM9YXBhY2hlQWxsb3dEZW55VmFsdWUsYXBhY2hlQ29tbWVudAorc3luIGtleXdvcmQgYXBhY2hlQWxsb3dEZW55VmFsdWUgQWxsIE5vbmUgY29udGFpbmVkCitzeW4gbWF0Y2ggYXBhY2hlT3JkZXIgIl5ccypPcmRlclxzLiokIiBjb250YWlucz1hcGFjaGVPcmRlclZhbHVlLGFwYWNoZUNvbW1lbnQKK3N5biBrZXl3b3JkIGFwYWNoZU9yZGVyVmFsdWUgRGVueSBBbGxvdyBjb250YWluZWQKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEFjdGlvbiBTY3JpcHQKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEFsaWFzIEFsaWFzTWF0Y2ggUmVkaXJlY3QgUmVkaXJlY3RNYXRjaCBSZWRpcmVjdFRlbXAgUmVkaXJlY3RQZXJtYW5lbnQgU2NyaXB0QWxpYXMgU2NyaXB0QWxpYXNNYXRjaAorc3luIGtleXdvcmQgYXBhY2hlT3B0aW9uIHBlcm1hbmVudCB0ZW1wIHNlZW90aGVyIGdvbmUKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEF1dGhBdXRob3JpdGF0aXZlIEF1dGhHcm91cEZpbGUgQXV0aFVzZXJGaWxlCitzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBBbm9ueW1vdXMgQW5vbnltb3VzX0F1dGhvcml0YXRpdmUgQW5vbnltb3VzX0xvZ0VtYWlsIEFub255bW91c19NdXN0R2l2ZUVtYWlsIEFub255bW91c19Ob1VzZXJJRCBBbm9ueW1vdXNfVmVyaWZ5RW1haWwKK2lmIHM6YXYgPCAiMDAyMDAwMDAwIgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEF1dGhEQkdyb3VwRmlsZSBBdXRoREJVc2VyRmlsZSBBdXRoREJBdXRob3JpdGF0aXZlCitlbmRpZgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gQXV0aERCTUdyb3VwRmlsZSBBdXRoREJNVXNlckZpbGUgQXV0aERCTUF1dGhvcml0YXRpdmUKK2lmIHM6YXYgPj0gIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBBdXRoREJNVHlwZQorCXN5biBrZXl3b3JkIGFwYWNoZU9wdGlvbiBkZWZhdWx0IFNEQk0gR0RCTSBOREJNIERCCitlbmRpZgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gQXV0aERpZ2VzdEFsZ29yaXRobSBBdXRoRGlnZXN0RG9tYWluIEF1dGhEaWdlc3RGaWxlIEF1dGhEaWdlc3RHcm91cEZpbGUgQXV0aERpZ2VzdE5jQ2hlY2sgQXV0aERpZ2VzdE5vbmNlRm9ybWF0IEF1dGhEaWdlc3ROb25jZUxpZmV0aW1lIEF1dGhEaWdlc3RRb3AKK3N5biBrZXl3b3JkIGFwYWNoZU9wdGlvbiBub25lIGF1dGggYXV0aC1pbnQgTUQ1IE1ENS1zZXNzCitpZiBzOmF2ID49ICIwMDIwMDAwMDAiCisJc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gQXV0aExEQVBBdXRob3JpdGF0aXZlIEF1dGhMREFQQmluZE9OIEF1dGhMREFQQmluZFBhc3N3b3JkIEF1dGhMREFQQ29tcGFyZUROT25TZXJ2ZXIgQXV0aExEQVBEZXJlZmVyZW5jZUFsaWFzZXMgQXV0aExEQVBFbmFibGVkIEF1dGhMREFQRnJvbnRQYWdlSGFjayBBdXRoTERBUEdyb3VwQXR0cmlidXRlIEF1dGhMREFQR3JvdXBBdHRyaWJ1dGVJc0ROIEF1dGhMREFQUmVtb3RlVXNlcklzRE4gQXV0aExEQVBTdGFydFRMUyBBdXRoTERBUFVybAorCXN5biBrZXl3b3JkIGFwYWNoZU9wdGlvbiBhbHdheXMgbmV2ZXIgc2VhcmNoaW5nIGZpbmRpbmcKK2VuZGlmCitpZiBzOmF2IDwgIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBGYW5jeUluZGV4aW5nCitlbmRpZgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gQWRkQWx0IEFkZEFsdEJ5RW5jb2RpbmcgQWRkQWx0QnlUeXBlIEFkZERlc2NyaXB0aW9uIEFkZEljb24gQWRkSWNvbkJ5RW5jb2RpbmcgQWRkSWNvbkJ5VHlwZSBEZWZhdWx0SWNvbiBIZWFkZXJOYW1lIEluZGV4SWdub3JlIEluZGV4T3B0aW9ucyBJbmRleE9yZGVyRGVmYXVsdCBSZWFkbWVOYW1lCitzeW4ga2V5d29yZCBhcGFjaGVPcHRpb24gRGVzY3JpcHRpb25XaWR0aCBGYW5jeUluZGV4aW5nIEZvbGRlcnNGaXJzdCBJY29uSGVpZ2h0IEljb25zQXJlTGlua3MgSWNvbldpZHRoIE5hbWVXaWR0aCBTY2FuSFRNTFRpdGxlcyBTdXBwcmVzc0NvbHVtblNvcnRpbmcgU3VwcHJlc3NEZXNjcmlwdGlvbiBTdXBwcmVzc0hUTUxQcmVhbWJsZSBTdXBwcmVzc0xhc3RNb2RpZmllZCBTdXBwcmVzc1NpemUgVHJhY2tNb2RpZmllZAorc3luIGtleXdvcmQgYXBhY2hlT3B0aW9uIEFzY2VuZGluZyBEZXNjZW5kaW5nIE5hbWUgRGF0ZSBTaXplIERlc2NyaXB0aW9uCitpZiBzOmF2ID49ICIwMDIwMDAwMDAiCisJc3luIGtleXdvcmQgYXBhY2hlT3B0aW9uIEhUTUxUYWJsZSBTdXByZXNzSWNvbiBTdXByZXNzUnVsZXMgVmVyc2lvblNvcnQKK2VuZGlmCitpZiBzOmF2IDwgIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBCcm93c2VyTWF0Y2ggQnJvd3Nlck1hdGNoTm9DYXNlCitlbmRpZgoraWYgczphdiA+PSAiMDAyMDAwMDAwIgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIENhY2hlRGVmYXVsdEV4cGlyZSBDYWNoZUVuYWJsZSBDYWNoZUZvcmNlQ29tcGxldGlvbiBDYWNoZUlnbm9yZUNhY2hlQ29udHJvbCBDYWNoZUlnbm9yZU5vTGFzdE1vZCBDYWNoZUxhc3RNb2RpZmllZEZhY3RvciBDYWNoZU1heEV4cGlyZSBDYWNoZU1heFN0cmVhbWluZ0J1ZmZlcgorZW5kaWYKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIE1ldGFGaWxlcyBNZXRhRGlyIE1ldGFTdWZmaXgKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIFNjcmlwdExvZyBTY3JpcHRMb2dMZW5ndGggU2NyaXB0TG9nQnVmZmVyCitpZiBzOmF2ID49ICIwMDIwMDAwMDAiCisJc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gU2NyaXB0U3RvY2sKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBDaGFyc2V0RGVmYXVsdCBDaGFyc2V0T3B0aW9ucyBDaGFyc2V0U291cmNlRW5jCisJc3luIGtleXdvcmQgYXBhY2hlT3B0aW9uIERlYnVnTGV2ZWwgSW1wbGljaXRBZGQgTm9JbXBsaWNpdEFkZAorZW5kaWYKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIERhdiBEYXZEZXB0aEluZmluaXR5IERhdkxvY2tEQiBEYXZNaW5UaW1lb3V0CitpZiBzOmF2IDwgIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBEZWZpbmUKK2VuZAoraWYgczphdiA+PSAiMDAyMDAwMDAwIgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIERlZmxhdGVCdWZmZXJTaXplIERlZmxhdGVGaWx0ZXJOb3RlIERlZmxhdGVNZW1MZXZlbCBEZWZsYXRlV2luZG93U2l6ZQorZW5kaWYKK2lmIHM6YXYgPCAiMDAyMDAwMDAwIgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEF1dGhEaWdlc3RGaWxlCitlbmRpZgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gRGlyZWN0b3J5SW5kZXgKK2lmIHM6YXYgPj0gIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBQcm90b2NvbEVjaG8KK2VuZGlmCitzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBQYXNzRW52IFNldEVudiBVbnNldEVudgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gRXhhbXBsZQorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gRXhwaXJlc0FjdGl2ZSBFeHBpcmVzQnlUeXBlIEV4cGlyZXNEZWZhdWx0CitpZiBzOmF2ID49ICIwMDIwMDAwMDAiCisJc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gRXh0RmlsdGVyRGVmaW5lIEV4dEZpbHRlck9wdGlvbnMKKwlzeW4ga2V5d29yZCBhcGFjaGVPcHRpb24gUHJlc2VydmVzQ29udGVudExlbmd0aCBEZWJ1Z0xldmVsIExvZ1N0ZGVyciBOb0xvZ1N0ZGVycgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIENhY2hlRmlsZSBNTWFwRmlsZQorZW5kaWYKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEhlYWRlcgoraWYgczphdiA+PSAiMDAyMDAwMDAwIgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIFJlcXVlc3RIZWFkZXIKK2VuZGlmCitzeW4ga2V5d29yZCBhcGFjaGVPcHRpb24gc2V0IHVuc2V0IGFwcGVuZCBhZGQKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEltYXBNZW51IEltYXBEZWZhdWx0IEltYXBCYXNlCitzeW4ga2V5d29yZCBhcGFjaGVPcHRpb24gbm9uZSBmb3JtYXR0ZWQgc2VtaWZvcm1hdHRlZCB1bmZvcm1hdHRlZAorc3luIGtleXdvcmQgYXBhY2hlT3B0aW9uIG5vY29udGVudCByZWZlcmVyIGVycm9yIG1hcAorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gWEJpdEhhY2sKK2lmIHM6YXYgPj0gIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBTU0lFbmRUYWcgU1NJRXJyb3JNc2cgU1NJU3RhcnRUYWcgU1NJVGltZUZvcm1hdCBTU0lVbmRlZmluZWRFY2hvCitlbmRpZgorc3luIGtleXdvcmQgYXBhY2hlT3B0aW9uIG9uIG9mZiBmdWxsCitzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBBZGRNb2R1bGVJbmZvCitzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBJU0FQSVJlYWRBaGVhZEJ1ZmZlciBJU0FQSUxvZ05vdFN1cHBvcnRlZCBJU0FQSUFwcGVuZExvZ1RvRXJyb3JzIElTQVBJQXBwZW5kTG9nVG9RdWVyeQoraWYgczphdiA+PSAiMDAyMDAwMDAwIgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIElTQVBJQ2FjaGVGaWxlIElTQUlQRmFrZUFzeW5jCisJc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gTERBUENhY2hlRW50cmllcyBMREFQQ2FjaGVUVEwgTERBUENlcnREQlBhdGggTERBUE9wQ2FjaGVFbnRyaWVzIExEQVBPcENhY2hlVFRMIExEQVBTaGFyZWRDYWNoZVNpemUKK2VuZGlmCitpZiBzOmF2IDwgIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBBZ2VudExvZworZW5kaWYKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIENvb2tpZUxvZyBDdXN0b21Mb2cgTG9nRm9ybWF0IFRyYW5zZmVyTG9nCitpZiBzOmF2IDwgIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBSZWZlcmVySWdub3JlIFJlZmVyZXJMb2cKK2VuZGlmCitpZiBzOmF2ID49ICIwMDIwMDAwMDAiCitlbmRpZgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gQWRkQ2hhcnNldCBBZGRFbmNvZGluZyBBZGRIYW5kbGVyIEFkZExhbmd1YWdlIEFkZFR5cGUgRGVmYXVsdExhbmd1YWdlIFJlbW92ZUVuY29kaW5nIFJlbW92ZUhhbmRsZXIgUmVtb3ZlVHlwZSBUeXBlc0NvbmZpZworaWYgczphdiA8ICIwMDIwMDAwMDAiCisJc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gRm9yY2VUeXBlIFNldEhhbmRsZXIKK2VuZGlmCitpZiBzOmF2ID49ICIwMDIwMDAwMDAiCisJc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gQWRkSW5wdXRGaWx0ZXIgQWRkT3V0cHV0RmlsdGVyIE1vZE1pbWVVc2VQYXRoSW5mbyBNdWx0aXZpZXdzTWF0Y2ggUmVtb3ZlSW5wdXRGaWx0ZXIgUmVtb3ZlT3V0cHV0RmlsdGVyCitlbmRpZgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gTWltZU1hZ2ljRmlsZQorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gTU1hcEZpbGUKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIENhY2hlTmVnb3RpYXRlZERvY3MgTGFuZ3VhZ2VQcmlvcml0eQoraWYgczphdiA+PSAiMDAyMDAwMDAwIgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIEZvcmNlTGFuZ3VhZ2VQcmlvcml0eQorZW5kaWYKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIFBlcmxNb2R1bGUgUGVybFJlcXVpcmUgUGVybFRhaW50Q2hlY2sgUGVybFdhcm4KK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIFBlcmxTZXRWYXIgUGVybFNldEVudiBQZXJsUGFzc0VudiBQZXJsU2V0dXBFbnYKK3N5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIFBlcmxJbml0SGFuZGxlciBQZXJsUG9zdFJlYWRSZXF1ZXN0SGFuZGxlciBQZXJsSGVhZGVyUGFyc2VySGFuZGxlcgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gUGVybFRyYW5zSGFuZGxlciBQZXJsQWNjZXNzSGFuZGxlciBQZXJsQXV0aGVuSGFuZGxlciBQZXJsQXV0aHpIYW5kbGVyCitzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBQZXJsVHlwZUhhbmRsZXIgUGVybEZpeHVwSGFuZGxlciBQZXJsSGFuZGxlciBQZXJsTG9nSGFuZGxlcgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gUGVybENsZWFudXBIYW5kbGVyIFBlcmxDaGlsZEluaXRIYW5kbGVyIFBlcmxDaGlsZEV4aXRIYW5kbGVyCitzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBQZXJsUmVzdGFydEhhbmRsZXIgUGVybERpc3BhdGNoSGFuZGxlcgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gUGVybEZyZXNoUmVzdGFydCBQZXJsU2VuZEhlYWRlcgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gcGhwX3ZhbHVlIHBocF9mbGFnIHBocF9hZG1pbl92YWx1ZSBwaHBfYWRtaW5fZmxhZworc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gQWxsb3dDT05ORUNUIE5vUHJveHkgUHJveHlCbG9jayBQcm94eURvbWFpbiBQcm94eVBhc3MgUHJveHlQYXNzUmV2ZXJzZSBQcm94eVJlY2VpdmVCdWZmZXJTaXplIFByb3h5UmVtb3RlIFByb3h5UmVxdWVzdHMgUHJveHlWaWEKK2lmIHM6YXYgPCAiMDAyMDAwMDAwIgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIENhY2hlUm9vdCBDYWNoZVNpemUgQ2FjaGVNYXhFeHBpcmUgQ2FjaGVEZWZhdWx0RXhwaXJlIENhY2hlTGFzdE1vZGlmaWVkRmFjdG9yIENhY2hlR2NJbnRlcnZhbCBDYWNoZURpckxldmVscyBDYWNoZURpckxlbmd0aCBDYWNoZUZvcmNlQ29tcGxldGlvbiBOb0NhY2hlCisJc3luIGtleXdvcmQgYXBhY2hlT3B0aW9uIGJsb2NrCitlbmRpZgoraWYgczphdiA+PSAiMDAyMDAwMDAwIgorCXN5biBtYXRjaCBhcGFjaGVTZWN0aW9uICI8XC9cPVwoUHJveHlcfFByb3h5TWF0Y2hcKVwrLio+IiBjb250YWlucz1hcGFjaGVBbnl0aGluZworCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIFByb3h5RXJyb3JPdmVycmlkZSBQcm94eUlPQnVmZmVyU2l6ZSBQcm94eU1heEZvcndhcmRzIFByb3h5UHJlc2VydmVIb3N0IFByb3h5UmVtb3RlTWF0Y2ggUHJveHlUaW1lb3V0CitlbmRpZgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gUmV3cml0ZUVuZ2luZSBSZXdyaXRlT3B0aW9ucyBSZXdyaXRlTG9nIFJld3JpdGVMb2dMZXZlbCBSZXdyaXRlTG9jayBSZXdyaXRlTWFwIFJld3JpdGVCYXNlIFJld3JpdGVDb25kIFJld3JpdGVSdWxlCitzeW4ga2V5d29yZCBhcGFjaGVPcHRpb24gaW5oZXJpdAoraWYgczphdiA8ICIwMDIwMDAwMDAiCisJc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gUm9hbWluZ0FsaWFzCitlbmRpZgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gQnJvd3Nlck1hdGNoIEJyb3dzZXJNYXRjaE5vQ2FzZSBTZXRFbnZJZiBTZXRFbnZJZk5vQ2FzZQorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gTG9hZEZpbGUgTG9hZE1vZHVsZQorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gQ2hlY2tTcGVsbGluZworc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gU1NMQ0FDZXJ0aWZpY2F0ZUZpbGUgU1NMQ0FDZXJ0aWZpY2F0ZVBhdGggU1NMQ0FSZXZvY2F0aW9uRmlsZSBTU0xDQVJldm9jYXRpb25QYXRoIFNTTENlcnRpZmljYXRlQ2hhaW5GaWxlIFNTTENlcnRpZmljYXRlRmlsZSBTU0xDZXJ0aWZpY2F0ZUtleUZpbGUgU1NMQ2lwaGVyU3VpdGUgU1NMRW5naW5lIFNTTE11dGV4IFNTTE9wdGlvbnMgU1NMUGFzc1BocmFzZURpYWxvZyBTU0xQcm90b2NvbCBTU0xSYW5kb21TZWVkIFNTTFJlcXVpcmUgU1NMUmVxdWlyZVNTTCBTU0xTZXNzaW9uQ2FjaGUgU1NMU2Vzc2lvbkNhY2hlVGltZW91dCBTU0xWZXJpZnlDbGllbnQgU1NMVmVyaWZ5RGVwdGgKK2lmIHM6YXYgPCAiMDAyMDAwMDAwIgorCXN5biBrZXl3b3JkIGFwYWNoZURlY2xhcmF0aW9uIFNTTExvZyBTU0xMb2dMZXZlbAorZW5kaWYKK2lmIHM6YXYgPj0gIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBTU0xQcm94eUNBQ2VydGlmaWNhdGVGaWxlIFNTTFByb3h5Q0FDZXJ0aWZpY2F0ZVBhdGggU1NMUHJveHlDQVJldm9jYXRpb25GaWxlIFNTTFByb3h5Q0FSZXZvY2F0aW9uUGF0aCBTU0xQcm94eUNpcGhlclN1aXRlIFNTTFByb3h5RW5naW5lIFNTTFByb3h5TWFjaGluZUNlcnRpZmljYXRlRmlsZSBTU0xQcm94eU1hY2hpbmVDZXJ0aWZpY2F0ZVBhdGggU1NMUHJveHlQcm90b2NvbCBTU0xQcm94eVZlcmlmeSBTU0xQcm94eVZlcmlmeURlcHRoCitlbmRpZgorc3luIG1hdGNoIGFwYWNoZU9wdGlvbiAiWystXVw/XDxcKFN0ZEVudlZhcnNcfENvbXBhdEVudlZhcnNcfEV4cG9ydENlcnREYXRhXHxGYWtlQmFzaWNBdXRoXHxTdHJpY3RSZXF1aXJlXHxPcHRSZW5lZ290aWF0ZVwpXD4iCitzeW4ga2V5d29yZCBhcGFjaGVPcHRpb24gYnVpbHRpbiBzZW0KK3N5biBtYXRjaCBhcGFjaGVPcHRpb24gIlwoZmlsZVx8ZXhlY1x8ZWdkXHxkYm1cfHNobVwpOiIKK2lmIHM6YXYgPCAiMDAyMDAwMDAwIgorCXN5biBtYXRjaCBhcGFjaGVPcHRpb24gIlsrLV1cP1w8XChTU0x2Mlx8U1NMdjNcfFRMU3YxXClcPiIKK2VuZGlmCitpZiBzOmF2ID49ICIwMDIwMDAwMDAiCisJc3luIG1hdGNoIGFwYWNoZU9wdGlvbiAiWystXVw/XDxcKFNTTHYyXHxTU0x2M1x8VExTdjFcfGtSU0FcfGtIRHJcfGtESGRcfGtFREhcfGFOVUxMXHxhUlNBXHxhRFNTXHxhUkhcfGVOVUxMXHxERVNcfDNERVNcfFJDMlx8UkM0XHxJREVBXHxNRDVcfFNIQTFcfFNIQVx8RVhQXHxFWFBPUlQ0MFx8RVhQT1JUNTZcfExPV1x8TUVESVVNXHxISUdIXHxSU0FcfERIXHxFREhcfEFESFx8RFNTXHxOVUxMXClcPiIKK2VuZGlmCitzeW4ga2V5d29yZCBhcGFjaGVPcHRpb24gb3B0aW9uYWwgcmVxdWlyZSBvcHRpb25hbF9ub19jYQorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gRXh0ZW5kZWRTdGF0dXMKK2lmIHM6YXYgPj0gIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBTdWV4ZWNVc2VyR3JvdXAKK2VuZGlmCitzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBVc2VyRGlyCitzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBDb29raWVFeHBpcmVzIENvb2tpZU5hbWUgQ29va2llVHJhY2tpbmcKK2lmIHM6YXYgPj0gIjAwMjAwMDAwMCIKKwlzeW4ga2V5d29yZCBhcGFjaGVEZWNsYXJhdGlvbiBDb29raWVEb21haW4gQ29va2llU3R5bGUKKwlzeW4ga2V5d29yZCBhcGFjaGVPcHRpb24gTmV0c2NhcGUgQ29va2llIENvb2tpZTIgUkZDMjEwOSBSRkMyOTY1CitlbmRpZgorc3luIGtleXdvcmQgYXBhY2hlRGVjbGFyYXRpb24gVmlydHVhbERvY3VtZW50Um9vdCBWaXJ0dWFsRG9jdW1lbnRSb290SVAgVmlydHVhbFNjcmlwdEFsaWFzIFZpcnR1YWxTY3JpcHRBbGlhc0lQCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2FwYWNoZV9zeW50YXhfaW5pdHMiKQorCWlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9hcGFjaGVfc3ludGF4X2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluayBhcGFjaGVBbGxvd092ZXJyaWRlIGFwYWNoZURlY2xhcmF0aW9uCisJSGlMaW5rIGFwYWNoZUFsbG93T3ZlcnJpZGVWYWx1ZSBhcGFjaGVPcHRpb24KKwlIaUxpbmsgYXBhY2hlQXV0aFR5cGUgYXBhY2hlRGVjbGFyYXRpb24KKwlIaUxpbmsgYXBhY2hlQXV0aFR5cGVWYWx1ZSBhcGFjaGVPcHRpb24KKwlIaUxpbmsgYXBhY2hlT3B0aW9uT3B0aW9uIGFwYWNoZU9wdGlvbgorCUhpTGluayBhcGFjaGVEZWNsYXJhdGlvbiBGdW5jdGlvbgorCUhpTGluayBhcGFjaGVBbnl0aGluZyBhcGFjaGVPcHRpb24KKwlIaUxpbmsgYXBhY2hlT3B0aW9uIE51bWJlcgorCUhpTGluayBhcGFjaGVDb21tZW50IENvbW1lbnQKKwlIaUxpbmsgYXBhY2hlRml4bWUgVG9kbworCUhpTGluayBhcGFjaGVMaW1pdFNlY3Rpb25LZXl3b3JkIGFwYWNoZUxpbWl0U2VjdGlvbgorCUhpTGluayBhcGFjaGVMaW1pdFNlY3Rpb24gYXBhY2hlU2VjdGlvbgorCUhpTGluayBhcGFjaGVTZWN0aW9uIExhYmVsCisJSGlMaW5rIGFwYWNoZU1ldGhvZE9wdGlvbiBUeXBlCisJSGlMaW5rIGFwYWNoZUFsbG93RGVueSBJbmNsdWRlCisJSGlMaW5rIGFwYWNoZUFsbG93RGVueVZhbHVlIElkZW50aWZpZXIKKwlIaUxpbmsgYXBhY2hlT3JkZXIgU3BlY2lhbAorCUhpTGluayBhcGFjaGVPcmRlclZhbHVlIFN0cmluZworCUhpTGluayBhcGFjaGVTdHJpbmcgU3RyaW5nCisJSGlMaW5rIGFwYWNoZUVycm9yIEVycm9yCisJSGlMaW5rIGFwYWNoZVVzZXJJRCBOdW1iZXIKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJhcGFjaGUiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hcGFjaGVzdHlsZS52aW0gYi9ydW50aW1lL3N5bnRheC9hcGFjaGVzdHlsZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1ZmM3MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2FwYWNoZXN0eWxlLnZpbQpAQCAtMCwwICsxLDY1IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJQXBhY2hlLVN0eWxlIGNvbmZpZ3VyYXRpb24gZmlsZXMgKHByb2Z0cGQuY29uZi9hcGFjaGUuY29uZi8uLikKKyIgTWFpbnRhaW5lcjoJQ2hyaXN0aWFuIEhhbW1lcnMgPGNoQHdlc3RlbmQuY29tPgorIiBVUkw6CQlub25lCisiIENoYW5nZUxvZzoKKyIJMjAwMS0wNS0wNCxjaAorIgkJYWRvcHRlZCBWaW0gNi4wIHN5bnRheCBzdHlsZQorIgkxOTk5LTEwLTI4LGNoCisiCQlpbml0aWFsIHJlbGVhc2UKKworIiBUaGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHJlY29nbmlzZWQ6CisiIEFwYWNoZS1zdHlsZSAuY29uZgorIgkjIENvbW1lbnQKKyIJT3B0aW9uCXZhbHVlCisiCU9wdGlvbgl2YWx1ZTEgdmFsdWUyCisiCU9wdGlvbiA9IHZhbHVlMSB2YWx1ZTIgI25vdCBhcGFjaGUgYnV0IGFsc28gYWxsb3dlZAorIgk8U2VjdGlvbiBOYW1lPz4KKyIJCU9wdGlvbgl2YWx1ZQorIgkJPFN1YlNlY3Rpb24gTmFtZT8+CisiCQk8L1N1YlNlY3Rpb24+CisiCTwvU2VjdGlvbj4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworc3luIG1hdGNoICBhcENvbW1lbnQJL15ccyojLiokLworc3luIG1hdGNoICBhcE9wdGlvbgkvXlxzKlteIFx0Izw9XSovCisic3luIG1hdGNoICBhcExhc3RWYWx1ZQkvW14gXHQ8PSNdKiQvIGNvbnRhaW5zPWFwQ29tbWVudAl1Z2x5CisKKyIgdGFncworc3luIHJlZ2lvbiBhcFRhZwlzdGFydD0vPC8gZW5kPS8+LyBjb250YWlucz1hcFRhZ09wdGlvbixhcFRhZ0Vycm9yCisiIHRoZSBmb2xsb3dpbmcgc2hvdWxkIG9yaWdpbmFsbHkgYmUgIiBbXjw+XSsiIGJ1dCB0aGlzIGRpZG4ndCB3b3JrIDooCitzeW4gbWF0Y2ggIGFwVGFnT3B0aW9uCWNvbnRhaW5lZCAvIFstXC9fXC46KmEtekEtWjAtOV1cKy9tcz1zKzEKK3N5biBtYXRjaCAgYXBUYWdFcnJvcgljb250YWluZWQgL1tePl08L21zPXMrMQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9hcGFjaGVzdHlsZV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9hcGFjaGVzdHlsZV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBhcENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgYXBPcHRpb24JS2V5d29yZAorICAiSGlMaW5rIGFwTGFzdFZhbHVlCUlkZW50aWZpZXIJCXVnbHk/CisgIEhpTGluayBhcFRhZwkJU3BlY2lhbAorICBIaUxpbmsgYXBUYWdPcHRpb24JSWRlbnRpZmllcgorICBIaUxpbmsgYXBUYWdFcnJvcglFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJhcGFjaGVzdHlsZSIKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hcmNoLnZpbSBiL3J1bnRpbWUvc3ludGF4L2FyY2gudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTkzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9hcmNoLnZpbQpAQCAtMCwwICsxLDYwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIEdOVSBBcmNoIGludmVudG9yeSBmaWxlLgorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vc3ludGF4L3BjcC9hcmNoLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTIyCisiIGFyY2gtdGFnOgkgICAgNTI5ZDYwYzQtNTNkOC00ZDNhLTgwZDYtNTRhZGE4NmQ5OTMyCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFNldCBpc2tleXdvcmQgc2luY2Ugd2UgbmVlZCBgLScgKGFuZCBwb3RlbnRpYWxseSBvdGhlcnMpIGluIGtleXdvcmRzLgorIiBGb3IgdmVyc2lvbiA1Lng6IFNldCBpdCBnbG9iYWxseQorIiBGb3IgdmVyc2lvbiA2Lng6IFNldCBpdCBsb2NhbGx5CitpZiB2ZXJzaW9uID49IDYwMAorICBjb21tYW5kIC1uYXJncz0xIFNldElzayBzZXRsb2NhbCBpc2tleXdvcmQ9PGFyZ3M+CitlbHNlCisgIGNvbW1hbmQgLW5hcmdzPTEgU2V0SXNrIHNldCBpc2tleXdvcmQ9PGFyZ3M+CitlbmRpZgorU2V0SXNrIEAsNDgtNTcsXywtCitkZWxjb21tYW5kIFNldElzaworCisiIFRvZG8KK3N5biBrZXl3b3JkIGFyY2hUb2RvCSAgVE9ETyBGSVhNRSBYWFggTk9URQorCisiIENvbW1lbnQKK3N5biByZWdpb24gIGFyY2hDb21tZW50ICBtYXRjaGdyb3VwPWFyY2hDb21tZW50IHN0YXJ0PSdeXCUoI1x8XHNcKScgZW5kPSckJyBjb250YWlucz1hcmNoVG9kbworCisiIEtleXdvcmRzCitzeW4ga2V5d29yZCBhcmNoS2V5d29yZCAgaW1wbGljaXQgdGFnbGluZSBleHBsaWNpdCBuYW1lcworc3luIGtleXdvcmQgYXJjaEtleXdvcmQgIHVudGFnZ2VkLXNvdXJjZQorc3luIGtleXdvcmQgYXJjaEtleXdvcmQgIGV4Y2x1ZGUganVuayBiYWNrdXAgcHJlY2lvdXMgdW5yZWNvZ25pemVkIHNvdXJjZSBza2lwd2hpdGUgbmV4dGdyb3VwPWFyY2hSZWdleAorCisiIFJlZ2V4ZXMKK3N5biBtYXRjaCAgIGFyY2hSZWdleCAgICBjb250YWluZWQgJ1xzKlx6cy4qJworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9hcmNoX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2FyY2hfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgYXJjaFRvZG8gICAgIFRvZG8KKyAgSGlMaW5rIGFyY2hDb21tZW50ICBDb21tZW50CisgIEhpTGluayBhcmNoS2V5d29yZCAgS2V5d29yZAorICBIaUxpbmsgYXJjaFJlZ2V4ICAgIFN0cmluZworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJhcmNoIgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hcnQudmltIGIvcnVudGltZS9zeW50YXgvYXJ0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWZhZGRiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYXJ0LnZpbQpAQCAtMCwwICsxLDQ0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgICBBUlQtSU0gYW5kIEFSVCpFbnRlcnByaXNlCisiIE1haW50YWluZXI6ICAgIERvcmFpIFNpdGFyYW0gPGRzMjZAZ3RlLmNvbT4KKyIgVVJMOgkJIGh0dHA6Ly93d3cuY2NzLm5ldS5lZHUvfmRvcmFpL3ZpbXBsdWdpbnMvdmltcGx1Z2lucy5odG1sCisiIExhc3QgQ2hhbmdlOiAgIE5vdiA2LCAyMDAyCisKK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKK3N5biBrZXl3b3JkIGFydHNwZm9ybSA9PiBhbmQgYXNzZXJ0IGJpbmQKK3N5biBrZXl3b3JkIGFydHNwZm9ybSBkZWNsYXJlIGRlZi1hcnQtZnVuIGRlZmZhY3RzIGRlZmdsb2JhbCBkZWZydWxlIGRlZnNjaGVtYSBkbworc3luIGtleXdvcmQgYXJ0c3Bmb3JtIGVsc2UgZm9yIGlmIGluJCBub3Qgb3IKK3N5biBrZXl3b3JkIGFydHNwZm9ybSBwcm9nbiByZXRyYWN0IHNhbGllbmNlIHNjaGVtYSB0ZXN0IHRoZW4gd2hpbGUKKworc3luIG1hdGNoIGFydHZhcmlhYmxlICI/W14gXHQiOygpfCZ+XVwrIgorCitzeW4gbWF0Y2ggYXJ0Z2xvYmFsdmFyICI/XCpbXiBcdCI7KCl8Jn5dXCtcKiIKKworc3luIG1hdGNoIGFydGluc3RhbmNlICIhW14gXHQiOygpfCZ+XVwrIgorCitzeW4gbWF0Y2ggZGVsaW1pdGVyICJbKCl8Jn5dIgorCitzeW4gcmVnaW9uIHN0cmluZyBzdGFydD0vIi8gc2tpcD0vXFxbXFwiXS8gZW5kPS8iLworCitzeW4gbWF0Y2ggbnVtYmVyICJcPFstK11cPVwoWzAtOV1cK1woXC5bMC05XSpcKVw9XHxcLlswLTldXCtcKVw+IgorCitzeW4gbWF0Y2ggY29tbWVudCAiOy4qJCIKKworc3luIG1hdGNoIGNvbW1lbnQgIiMrOlw9aWdub3JlIiBuZXh0Z3JvdXA9YXJ0aWdub3JlIHNraXB3aGl0ZSBza2lwbmwKKworc3luIHJlZ2lvbiBhcnRpZ25vcmUgc3RhcnQ9IigiIGVuZD0iKSIgY29udGFpbmVkIGNvbnRhaW5zPWFydGlnbm9yZSxjb21tZW50CisKK3N5biByZWdpb24gYXJ0aWdub3JlIHN0YXJ0PS8iLyBza2lwPS9cXFtcXCJdLyBlbmQ9LyIvIGNvbnRhaW5lZAorCitoaSBkZWYgbGluayBhcnRpbnN0YW5jZSB0eXBlCitoaSBkZWYgbGluayBhcnRnbG9iYWx2YXIgcHJlcHJvYworaGkgZGVmIGxpbmsgYXJ0aWdub3JlIGNvbW1lbnQKK2hpIGRlZiBsaW5rIGFydHNwZm9ybSBzdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIGFydHZhcmlhYmxlIGZ1bmN0aW9uCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImFydCIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2FzbS52aW0gYi9ydW50aW1lL3N5bnRheC9hc20udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YmZlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9hc20udmltCkBAIC0wLDAgKzEsMTAzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJR05VIEFzc2VtYmxlcgorIiBNYWludGFpbmVyOglLZXZpbiBEYWhsaGF1c2VuIDxrZGFobGhhdXNAeWFob28uY29tPgorIiBMYXN0IENoYW5nZToJMjAwMiBTZXAgMTkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworCisiIHN0b3JhZ2UgdHlwZXMKK3N5biBtYXRjaCBhc21UeXBlICJcLmxvbmciCitzeW4gbWF0Y2ggYXNtVHlwZSAiXC5hc2NpaSIKK3N5biBtYXRjaCBhc21UeXBlICJcLmFzY2l6Igorc3luIG1hdGNoIGFzbVR5cGUgIlwuYnl0ZSIKK3N5biBtYXRjaCBhc21UeXBlICJcLmRvdWJsZSIKK3N5biBtYXRjaCBhc21UeXBlICJcLmZsb2F0Igorc3luIG1hdGNoIGFzbVR5cGUgIlwuaHdvcmQiCitzeW4gbWF0Y2ggYXNtVHlwZSAiXC5pbnQiCitzeW4gbWF0Y2ggYXNtVHlwZSAiXC5vY3RhIgorc3luIG1hdGNoIGFzbVR5cGUgIlwucXVhZCIKK3N5biBtYXRjaCBhc21UeXBlICJcLnNob3J0Igorc3luIG1hdGNoIGFzbVR5cGUgIlwuc2luZ2xlIgorc3luIG1hdGNoIGFzbVR5cGUgIlwuc3BhY2UiCitzeW4gbWF0Y2ggYXNtVHlwZSAiXC5zdHJpbmciCitzeW4gbWF0Y2ggYXNtVHlwZSAiXC53b3JkIgorCitzeW4gbWF0Y2ggYXNtTGFiZWwJCSJbYS16X11bYS16MC05X10qOiJoZT1lLTEKK3N5biBtYXRjaCBhc21JZGVudGlmaWVyCQkiW2Etel9dW2EtejAtOV9dKiIKKworIiBWYXJpb3VzICMncyBhcyBkZWZpbmVkIGJ5IEdBUyByZWYgbWFudWFsIHNlYyAzLjYuMi4xCisiIFRlY2huaWNhbGx5LCB0aGUgZmlyc3QgZGVjTnVtYmVyIGRlZiBpcyBhY3R1YWxseSBvY3RhbCwKKyIgc2luY2UgdGhlIHZhbHVlIG9mIDAtNyBvY3RhbCBpcyB0aGUgc2FtZSBhcyAwLTcgZGVjaW1hbCwKKyIgSSBwcmVmZXIgdG8gbWFwIGl0IGFzIGRlY2ltYWw6CitzeW4gbWF0Y2ggZGVjTnVtYmVyCQkiMFwrWzEtN11cPVtcdFxuJCw7IF0iCitzeW4gbWF0Y2ggZGVjTnVtYmVyCQkiWzEtOV1cZCoiCitzeW4gbWF0Y2ggb2N0TnVtYmVyCQkiMFswLTddWzAtN11cKyIKK3N5biBtYXRjaCBoZXhOdW1iZXIJCSIwW3hYXVswLTlhLWZBLUZdXCsiCitzeW4gbWF0Y2ggYmluTnVtYmVyCQkiMFtiQl1bMC0xXSoiCisKKworc3luIG1hdGNoIGFzbVNwZWNpYWxDb21tZW50CSI7XCpcKlwqLioiCitzeW4gbWF0Y2ggYXNtQ29tbWVudAkJIjsuKiJocz1zKzEKKworc3luIG1hdGNoIGFzbUluY2x1ZGUJCSJcLmluY2x1ZGUiCitzeW4gbWF0Y2ggYXNtQ29uZAkJIlwuaWYiCitzeW4gbWF0Y2ggYXNtQ29uZAkJIlwuZWxzZSIKK3N5biBtYXRjaCBhc21Db25kCQkiXC5lbmRpZiIKK3N5biBtYXRjaCBhc21NYWNybwkJIlwubWFjcm8iCitzeW4gbWF0Y2ggYXNtTWFjcm8JCSJcLmVuZG0iCisKK3N5biBtYXRjaCBhc21EaXJlY3RpdmUJCSJcLlthLXpdW2Etel1cKyIKKworCitzeW4gY2FzZSBtYXRjaAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9hc21fc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfYXNtX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICBIaUxpbmsgYXNtU2VjdGlvbglTcGVjaWFsCisgIEhpTGluayBhc21MYWJlbAlMYWJlbAorICBIaUxpbmsgYXNtQ29tbWVudAlDb21tZW50CisgIEhpTGluayBhc21EaXJlY3RpdmUJU3RhdGVtZW50CisKKyAgSGlMaW5rIGFzbUluY2x1ZGUJSW5jbHVkZQorICBIaUxpbmsgYXNtQ29uZAlQcmVDb25kaXQKKyAgSGlMaW5rIGFzbU1hY3JvCU1hY3JvCisKKyAgSGlMaW5rIGhleE51bWJlcglOdW1iZXIKKyAgSGlMaW5rIGRlY051bWJlcglOdW1iZXIKKyAgSGlMaW5rIG9jdE51bWJlcglOdW1iZXIKKyAgSGlMaW5rIGJpbk51bWJlcglOdW1iZXIKKworICBIaUxpbmsgYXNtU3BlY2lhbENvbW1lbnQgQ29tbWVudAorICBIaUxpbmsgYXNtSWRlbnRpZmllciBJZGVudGlmaWVyCisgIEhpTGluayBhc21UeXBlCVR5cGUKKworICAiIE15IGRlZmF1bHQgY29sb3Igb3ZlcnJpZGVzOgorICAiIGhpIGFzbVNwZWNpYWxDb21tZW50IGN0ZXJtZmc9cmVkCisgICIgaGkgYXNtSWRlbnRpZmllciBjdGVybWZnPWxpZ2h0Y3lhbgorICAiIGhpIGFzbVR5cGUgY3Rlcm1iZz1ibGFjayBjdGVybWZnPWJyb3duCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImFzbSIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2FzbTY4ay52aW0gYi9ydW50aW1lL3N5bnRheC9hc202OGsudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NjNlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9hc202OGsudmltCkBAIC0wLDAgKzEsMzkxIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJTW90b3JvbGEgNjgwMDAgQXNzZW1ibGVyCisiIE1haW50YWluZXI6CVN0ZXZlIFdhbGwKKyIgTGFzdCBjaGFuZ2U6CTIwMDEgTWF5IDAxCisiCisiIFRoaXMgaXMgaW5jb21wbGV0ZS4gIEluIHBhcnRpY3VsYXIsIHN1cHBvcnQgZm9yIDY4MDIwIGFuZAorIiB1cCBhbmQgNjg4NTEvNjg4ODEgY28tcHJvY2Vzc29ycyBpcyBwYXJ0aWFsIG9yIG5vbi1leGlzdGFudC4KKyIgRmVlbCBmcmVlIHRvIGNvbnRyaWJ1dGUuLi4KKyIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBQYXJ0aWFsIGxpc3Qgb2YgcmVnaXN0ZXIgc3ltYm9scworc3luIGtleXdvcmQgYXNtNjhrUmVnCWEwIGExIGEyIGEzIGE0IGE1IGE2IGE3IGQwIGQxIGQyIGQzIGQ0IGQ1IGQ2IGQ3CitzeW4ga2V5d29yZCBhc202OGtSZWcJcGMgc3IgY2NyIHNwIHVzcCBzc3AKKworIiBNQzY4MDEwCitzeW4ga2V5d29yZCBhc202OGtSZWcJdmJyIHNmYyBzZmNyIGRmYyBkZmNyCisKKyIgTUM2ODAyMAorc3luIGtleXdvcmQgYXNtNjhrUmVnCW1zcCBpc3AgenBjIGNhY3IgY2Fhcgorc3luIGtleXdvcmQgYXNtNjhrUmVnCXphMCB6YTEgemEyIHphMyB6YTQgemE1IHphNiB6YTcKK3N5biBrZXl3b3JkIGFzbTY4a1JlZwl6ZDAgemQxIHpkMiB6ZDMgemQ0IHpkNSB6ZDYgemQ3CisKKyIgTUM2ODAzMAorc3luIGtleXdvcmQgYXNtNjhrUmVnCWNycCBzcnAgdGMgYWMwIGFjMSBhY3VzciB0dDAgdHQxIG1tdXNyCisKKyIgTUM2ODA0MAorc3luIGtleXdvcmQgYXNtNjhrUmVnCWR0dDAgZHR0MSBpdHQwIGl0dDEgdXJwCisKKyIgTUM2ODg1MSByZWdpc3RlcnMKK3N5biBrZXl3b3JkIGFzbTY4a1JlZwljYWwgdmFsIHNjYyBjcnAgc3JwIGRycCB0YyBhYyBwc3IgcGNzcgorc3luIGtleXdvcmQgYXNtNjhrUmVnCWJhYzAgYmFjMSBiYWMyIGJhYzMgYmFjNCBiYWM1IGJhYzYgYmFjNworc3luIGtleXdvcmQgYXNtNjhrUmVnCWJhZDAgYmFkMSBiYWQyIGJhZDMgYmFkNCBiYWQ1IGJhZDYgYmFkNworCisiIE1DNjg4ODEvODIgcmVnaXN0ZXJzCitzeW4ga2V5d29yZCBhc202OGtSZWcJZnAwIGZwMSBmcDIgZnAzIGZwNCBmcDUgZnA2IGZwNworc3luIGtleXdvcmQgYXNtNjhrUmVnCWNvbnRyb2wgc3RhdHVzIGlhZGRyIGZwY3IgZnBzciBmcGlhcgorCisiIE02ODAwMCBvcGNvZGVzIC0gb3JkZXIgaXMgaW1wb3J0YW50IQorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxhYmNkXChcLmJcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGFkZGFcKFwuW3dsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YWRkaVwoXC5bYndsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YWRkcVwoXC5bYndsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YWRkeFwoXC5bYndsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YWRkXChcLltid2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxhbmRpXChcLltid2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxhbmRcKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGFzW2xyXVwoXC5bYndsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8Ylt2Y11bY3NdXChcLltid2xzXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YmVxXChcLltid2xzXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YmdbZXRdXChcLltid2xzXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YltobV1pXChcLltid2xzXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YmxbZXN0XVwoXC5bYndsc11cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGJuZVwoXC5bYndsc11cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGJwbFwoXC5bYndsc11cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGJjaGdcKFwuW2JsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YmNsclwoXC5bYmxdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxiZmNoZ1xzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxiZmNsclxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxiZmV4dHNccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YmZleHR1XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGJmZmZvXHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGJmaW5zXHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGJmc2V0XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGJmdHN0XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGJrcHRccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YnJhXChcLltid2xzXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8YnNldFwoXC5bYmxdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxic3JcKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGJ0c3RcKFwuW2JsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8Y2FsbG1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8Y2FzMlwoXC5bd2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxjYXNcKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGNoazJcKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGNoa1woXC5bd2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxjbHJcKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGNtcGFcKFwuW3dsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8Y21waVwoXC5bYndsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8Y21wbVwoXC5bYndsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8Y21wMlwoXC5bYndsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8Y21wXChcLltid2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxkYltjdl1bY3NdXChcLndcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGRiZXFcKFwud1wpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8ZGJbZnRdXChcLndcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGRiZ1tldF1cKFwud1wpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8ZGJbaG1daVwoXC53XClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxkYmxbZXN0XVwoXC53XClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxkYm5lXChcLndcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGRicGxcKFwud1wpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8ZGJyYVwoXC53XClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxkaXZbc3VdXChcLlt3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGRpdltzdV1sXChcLmxcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGVvcmlcKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGVvclwoXC5bYndsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8ZXhnXChcLmxcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGV4dGJcKFwubFwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8ZXh0XChcLlt3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGlsbGVnYWxcPiIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8am1wXChcLltsc11cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPGpzclwoXC5bbHNdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxsZWFcKFwubFwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8bGlua1woXC5bd2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxsc1tscl1cKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPG1vdmVhXChcLlt3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPG1vdmVjXChcLmxcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPG1vdmVtXChcLlt3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPG1vdmVwXChcLlt3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPG1vdmVxXChcLmxcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPG1vdmVzXChcLltid2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxtb3ZlXChcLltid2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxtdWxbc3VdXChcLlt3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPG5iY2RcKFwuYlwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8bmVneFwoXC5bYndsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8bmVnXChcLltid2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxub3BcPiIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8bm90XChcLltid2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxvcmlcKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPG9yXChcLltid2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxwYWNrXHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHBlYVwoXC5sXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxyZXNldFw+Igorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxyb1tscl1cKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHJveFtscl1cKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHJ0W2RtXVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxydFtlcnNdXD4iCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHNiY2RcKFwuYlwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8c1tjdl1bY3NdXChcLmJcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHNlcVwoXC5iXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxzW2Z0XVwoXC5iXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxzZ1tldF1cKFwuYlwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8c1tobV1pXChcLmJcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHNsW2VzdF1cKFwuYlwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8c25lXChcLmJcKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHNwbFwoXC5iXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDxzdWJhXChcLlt3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHN1YmlcKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHN1YnFcKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHN1YnhcKFwuW2J3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHN1YlwoXC5bYndsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8c3dhcFwoXC53XClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDx0YXNcKFwuYlwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8dGRpdltzdV1cKFwubFwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8dFwocmFwXClcPVtjdl1bY3NdXChcLlt3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHRcKHJhcFwpXD1lcVwoXC5bd2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDx0XChyYXBcKVw9W2Z0XVwoXC5bd2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDx0XChyYXBcKVw9Z1tldF1cKFwuW3dsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8dFwocmFwXClcPVtobV1pXChcLlt3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHRcKHJhcFwpXD1sW2VzdF1cKFwuW3dsXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8dFwocmFwXClcPW5lXChcLlt3bF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHRcKHJhcFwpXD1wbFwoXC5bd2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDx0XChyYXBcKVw9dlw+Igorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDx0XChyYXBcKVw9W2N2XVtjc11cPiIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8dFwocmFwXClcPWVxXD4iCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHRcKHJhcFwpXD1bZnRdXD4iCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHRcKHJhcFwpXD1nW2V0XVw+Igorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDx0XChyYXBcKVw9W2htXWlcPiIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8dFwocmFwXClcPWxbZXN0XVw+Igorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDx0XChyYXBcKVw9bmVcPiIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8dFwocmFwXClcPXBsXD4iCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHRyYXBccyIKK3N5biBtYXRjaCBhc202OGtPcGNvZGUgIlw8dHN0XChcLltid2xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a09wY29kZSAiXDx1bmxrXHMiCitzeW4gbWF0Y2ggYXNtNjhrT3Bjb2RlICJcPHVucGtccyIKKworIiBWYWxpZCBsYWJlbHMKK3N5biBtYXRjaCBhc202OGtMYWJlbAkJIl5bYS16Xz8uXVthLXowLTlfPy4kXSokIgorc3luIG1hdGNoIGFzbTY4a0xhYmVsCQkiXlthLXpfPy5dW2EtejAtOV8/LiRdKlxzImhlPWUtMQorc3luIG1hdGNoIGFzbTY4a0xhYmVsCQkiXlxzKlthLXpfPy5dW2EtejAtOV8/LiRdKjoiaGU9ZS0xCisKKyIgVmFyaW91cyBudW1iZXIgZm9ybWF0cworc3luIG1hdGNoIGhleE51bWJlcgkJIlwkWzAtOWEtZkEtRl1cK1w+Igorc3luIG1hdGNoIGhleE51bWJlcgkJIlw8WzAtOV1bMC05YS1mQS1GXSpIXD4iCitzeW4gbWF0Y2ggb2N0TnVtYmVyCQkiQFswLTddXCtcPiIKK3N5biBtYXRjaCBvY3ROdW1iZXIJCSJcPFswLTddXCtbUU9dXD4iCitzeW4gbWF0Y2ggYmluTnVtYmVyCQkiJVswMV1cK1w+Igorc3luIG1hdGNoIGJpbk51bWJlcgkJIlw8WzAxXVwrQlw+Igorc3luIG1hdGNoIGRlY051bWJlcgkJIlw8WzAtOV1cK0RcPVw+Igorc3luIG1hdGNoIGZsb2F0RQkJIl8qRV8qIiBjb250YWluZWQKK3N5biBtYXRjaCBmbG9hdEV4cG9uZW50CQkiXypFXypbLStdXD1bMC05XVwrIiBjb250YWluZWQgY29udGFpbnM9ZmxvYXRFCitzeW4gbWF0Y2ggZmxvYXROdW1iZXIJCSJbLStdXD1bMC05XVwrXypFXypbLStdXD1bMC05XVwrIiBjb250YWlucz1mbG9hdEV4cG9uZW50CitzeW4gbWF0Y2ggZmxvYXROdW1iZXIJCSJbLStdXD1bMC05XVwrXC5bMC05XVwrXChFWy0rXVw9WzAtOV1cK1wpXD0iIGNvbnRhaW5zPWZsb2F0RXhwb25lbnQKK3N5biBtYXRjaCBmbG9hdE51bWJlcgkJIjpcKFswLTlhLWZdXCtfKlwpXCsiCisKKyIgQ2hhcmFjdGVyIHN0cmluZyBjb25zdGFudHMKK3N5biBtYXRjaCBhc202OGtTdHJpbmdFcnJvcgkiJ1sgLX5dKiciCitzeW4gbWF0Y2ggYXNtNjhrU3RyaW5nRXJyb3IJIidbIC1+XSokIgorc3luIHJlZ2lvbiBhc202OGtTdHJpbmcJCXN0YXJ0PSInIiBza2lwPSInJyIgZW5kPSInIiBvbmVsaW5lIGNvbnRhaW5zPWFzbTY4a0NoYXJFcnJvcgorc3luIG1hdGNoIGFzbTY4a0NoYXJFcnJvcgkiW14gLX5dIiBjb250YWluZWQKKworIiBJbW1lZGlhdGUgZGF0YQorc3luIG1hdGNoIGFzbTY4a0ltbWVkaWF0ZQkiI1wkWzAtOWEtZkEtRl1cKyIgY29udGFpbnM9aGV4TnVtYmVyCitzeW4gbWF0Y2ggYXNtNjhrSW1tZWRpYXRlCSIjWzAtOV1bMC05YS1mQS1GXSpIIiBjb250YWlucz1oZXhOdW1iZXIKK3N5biBtYXRjaCBhc202OGtJbW1lZGlhdGUJIiNAWzAtN11cKyIgY29udGFpbnM9b2N0TnVtYmVyCitzeW4gbWF0Y2ggYXNtNjhrSW1tZWRpYXRlCSIjWzAtN11cK1tRT10iIGNvbnRhaW5zPW9jdE51bWJlcgorc3luIG1hdGNoIGFzbTY4a0ltbWVkaWF0ZQkiIyVbMDFdXCsiIGNvbnRhaW5zPWJpbk51bWJlcgorc3luIG1hdGNoIGFzbTY4a0ltbWVkaWF0ZQkiI1swMV1cK0IiIGNvbnRhaW5zPWJpbk51bWJlcgorc3luIG1hdGNoIGFzbTY4a0ltbWVkaWF0ZQkiI1swLTldXCtEXD0iIGNvbnRhaW5zPWRlY051bWJlcgorc3luIG1hdGNoIGFzbTY4a1N5bWJvbAkJIlthLXpfPy5dW2EtejAtOV8/LiRdKiIgY29udGFpbmVkCitzeW4gbWF0Y2ggYXNtNjhrSW1tZWRpYXRlCSIjW2Etel8/Ll1bYS16MC05Xz8uXSoiIGNvbnRhaW5zPWFzbTY4a1N5bWJvbAorCisiIFNwZWNpYWwgaXRlbXMgZm9yIGNvbW1lbnRzCitzeW4ga2V5d29yZCBhc202OGtUb2RvCQljb250YWluZWQgVE9ETworCisiIE9wZXJhdG9ycworc3luIG1hdGNoIGFzbTY4a09wZXJhdG9yCSJbLSsqL10iCSIgTXVzdCBvY2N1ciBiZWZvcmUgQ29tbWVudHMKK3N5biBtYXRjaCBhc202OGtPcGVyYXRvcgkiXC5TSVpFT0ZcLiIKK3N5biBtYXRjaCBhc202OGtPcGVyYXRvcgkiXC5TVEFSVE9GXC4iCitzeW4gbWF0Y2ggYXNtNjhrT3BlcmF0b3IJIjw8IgkJIiBzaGlmdCBsZWZ0CitzeW4gbWF0Y2ggYXNtNjhrT3BlcmF0b3IJIj4+IgkJIiBzaGlmdCByaWdodAorc3luIG1hdGNoIGFzbTY4a09wZXJhdG9yCSImIgkJIiBiaXQtd2lzZSBsb2dpY2FsIGFuZAorc3luIG1hdGNoIGFzbTY4a09wZXJhdG9yCSIhIgkJIiBiaXQtd2lzZSBsb2dpY2FsIG9yCitzeW4gbWF0Y2ggYXNtNjhrT3BlcmF0b3IJIiEhIgkJIiBleGNsdXNpdmUgb3IKK3N5biBtYXRjaCBhc202OGtPcGVyYXRvcgkiPD4iCQkiIGluZXF1YWxpdHkKK3N5biBtYXRjaCBhc202OGtPcGVyYXRvcgkiPSIJCSIgbXVzdCBiZSBiZWZvcmUgb3RoZXIgb3BzIGNvbnRhaW5pbmcgJz0nCitzeW4gbWF0Y2ggYXNtNjhrT3BlcmF0b3IJIj49Igorc3luIG1hdGNoIGFzbTY4a09wZXJhdG9yCSI8PSIKK3N5biBtYXRjaCBhc202OGtPcGVyYXRvcgkiPT0iCQkiIG9wZXJhbmQgZXhpc3RhbmNlIC0gdXNlZCBpbiBtYWNybyBkZWZpbml0aW9ucworCisiIENvbmRpdGlvbiBjb2RlIHN0eWxlIG9wZXJhdG9ycworc3luIG1hdGNoIGFzbTY4a09wZXJhdG9yCSI8W0NWXVtDU10+Igorc3luIG1hdGNoIGFzbTY4a09wZXJhdG9yCSI8RVE+Igorc3luIG1hdGNoIGFzbTY4a09wZXJhdG9yCSI8R1tURV0+Igorc3luIG1hdGNoIGFzbTY4a09wZXJhdG9yCSI8W0hNXUk+Igorc3luIG1hdGNoIGFzbTY4a09wZXJhdG9yCSI8TFtTRVRdPiIKK3N5biBtYXRjaCBhc202OGtPcGVyYXRvcgkiPE5FPiIKK3N5biBtYXRjaCBhc202OGtPcGVyYXRvcgkiPFBMPiIKKworIiBDb21tZW50cworc3luIG1hdGNoIGFzbTY4a0NvbW1lbnQJCSI7LioiIGNvbnRhaW5zPWFzbTY4a1RvZG8KK3N5biBtYXRjaCBhc202OGtDb21tZW50CQkiXHMhLioibXM9cysxIGNvbnRhaW5zPWFzbTY4a1RvZG8KK3N5biBtYXRjaCBhc202OGtDb21tZW50CQkiXlxzKlsqIV0uKiIgY29udGFpbnM9YXNtNjhrVG9kbworCisiIEluY2x1ZGUKK3N5biBtYXRjaCBhc202OGtJbmNsdWRlCQkiXDxJTkNMVURFXHMiCisKKyIgU3RhbmRhcmQgbWFjcm9zCitzeW4gbWF0Y2ggYXNtNjhrQ29uZAkJIlw8SUZcKFwuW0JXTF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrQ29uZAkJIlw8VEhFTlwoXC5bU0xdXClcPVw+Igorc3luIG1hdGNoIGFzbTY4a0NvbmQJCSJcPEVMU0VcKFwuW1NMXVwpXD1cPiIKK3N5biBtYXRjaCBhc202OGtDb25kCQkiXDxFTkRJXD4iCitzeW4gbWF0Y2ggYXNtNjhrQ29uZAkJIlw8QlJFQUtcKFwuW1NMXVwpXD1cPiIKK3N5biBtYXRjaCBhc202OGtSZXBlYXQJCSJcPEZPUlwoXC5bQldMXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtSZXBlYXQJCSJcPERPV05UT1xzIgorc3luIG1hdGNoIGFzbTY4a1JlcGVhdAkJIlw8VE9ccyIKK3N5biBtYXRjaCBhc202OGtSZXBlYXQJCSJcPEJZXHMiCitzeW4gbWF0Y2ggYXNtNjhrUmVwZWF0CQkiXDxET1woXC5bU0xdXClcPVw+Igorc3luIG1hdGNoIGFzbTY4a1JlcGVhdAkJIlw8RU5ERlw+Igorc3luIG1hdGNoIGFzbTY4a1JlcGVhdAkJIlw8TkVYVFwoXC5bU0xdXClcPVw+Igorc3luIG1hdGNoIGFzbTY4a1JlcGVhdAkJIlw8UkVQRUFUXD4iCitzeW4gbWF0Y2ggYXNtNjhrUmVwZWF0CQkiXDxVTlRJTFwoXC5bQldMXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtSZXBlYXQJCSJcPFdISUxFXChcLltCV0xdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a1JlcGVhdAkJIlw8RU5EV1w+IgorCisiIE1hY3JvIGRlZmluaXRpb24KK3N5biBtYXRjaCBhc202OGtNYWNybwkJIlw8TUFDUk9cPiIKK3N5biBtYXRjaCBhc202OGtNYWNybwkJIlw8TE9DQUxccyIKK3N5biBtYXRjaCBhc202OGtNYWNybwkJIlw8TUVYSVRcPiIKK3N5biBtYXRjaCBhc202OGtNYWNybwkJIlw8RU5ETVw+Igorc3luIG1hdGNoIGFzbTY4a01hY3JvUGFyYW0JIlxcWzAtOV0iCisKKyIgQ29uZGl0aW9uYWwgYXNzZW1ibHkKK3N5biBtYXRjaCBhc202OGtQcmVDb25kCQkiXDxJRkNccyIKK3N5biBtYXRjaCBhc202OGtQcmVDb25kCQkiXDxJRkRFRlxzIgorc3luIG1hdGNoIGFzbTY4a1ByZUNvbmQJCSJcPElGRVFccyIKK3N5biBtYXRjaCBhc202OGtQcmVDb25kCQkiXDxJRkdFXHMiCitzeW4gbWF0Y2ggYXNtNjhrUHJlQ29uZAkJIlw8SUZHVFxzIgorc3luIG1hdGNoIGFzbTY4a1ByZUNvbmQJCSJcPElGTEVccyIKK3N5biBtYXRjaCBhc202OGtQcmVDb25kCQkiXDxJRkxUXHMiCitzeW4gbWF0Y2ggYXNtNjhrUHJlQ29uZAkJIlw8SUZOQ1w+Igorc3luIG1hdGNoIGFzbTY4a1ByZUNvbmQJCSJcPElGTkRFRlxzIgorc3luIG1hdGNoIGFzbTY4a1ByZUNvbmQJCSJcPElGTkVccyIKK3N5biBtYXRjaCBhc202OGtQcmVDb25kCQkiXDxFTFNFQ1w+Igorc3luIG1hdGNoIGFzbTY4a1ByZUNvbmQJCSJcPEVORENcPiIKKworIiBMb29wIGNvbnRyb2wKK3N5biBtYXRjaCBhc202OGtQcmVDb25kCQkiXDxSRVBUXHMiCitzeW4gbWF0Y2ggYXNtNjhrUHJlQ29uZAkJIlw8SVJQXHMiCitzeW4gbWF0Y2ggYXNtNjhrUHJlQ29uZAkJIlw8SVJQQ1xzIgorc3luIG1hdGNoIGFzbTY4a1ByZUNvbmQJCSJcPEVORFJcPiIKKworIiBEaXJlY3RpdmVzCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPEFMSUdOXHMiCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPENISVBccyIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8Q09NTElORVxzIgorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxDT01NT05cKFwuU1wpXD1ccyIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8RENcKFwuW0JXTFNEWFBdXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxEQ1wuXFxbMC05XVxzIm1lPWUtMwkiIFNwZWNpYWwgdXNlIGluIGEgbWFjcm8gZGVmCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPERDQlwoXC5bQldMU0RYUF1cKVw9XHMiCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPERTXChcLltCV0xTRFhQXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8RU5EXD4iCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPEVRVVxzIgorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxGRVFVXChcLltTRFhQXVwpXD1ccyIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8RkFJTFw+Igorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxGT1BUXHMiCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPFwoTk9cKVw9Rk9STUFUXD4iCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPElETlRcPiIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8XChOT1wpXD1MSVNUXD4iCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPExMRU5ccyIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8TUFTSzJcPiIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8TkFNRVxzIgorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxOT09CSlw+Igorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxPRkZTRVRccyIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8T1BUXD4iCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPE9SR1woXC5bU0xdXClcPVw+Igorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxcKE5PXClcPVBBR0VcPiIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8UExFTlxzIgorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxSRUdccyIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8UkVTVE9SRVw+Igorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxTQVZFXD4iCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPFNFQ1RcKFwuU1wpXD1ccyIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8U0VDVElPTlwoXC5TXClcPVxzIgorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxTRVRccyIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8U1BDXHMiCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPFRUTFxzIgorc3luIG1hdGNoIGFzbTY4a0RpcmVjdGl2ZQkiXDxYQ09NXHMiCitzeW4gbWF0Y2ggYXNtNjhrRGlyZWN0aXZlCSJcPFhERUZccyIKK3N5biBtYXRjaCBhc202OGtEaXJlY3RpdmUJIlw8WFJFRlwoXC5TXClcPVxzIgorCitzeW4gY2FzZSBtYXRjaAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9hc202OGtfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfYXNtNjhrX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICAiIENvbW1lbnQgQ29uc3RhbnQgRXJyb3IgSWRlbnRpZmllciBQcmVQcm9jIFNwZWNpYWwgU3RhdGVtZW50IFRvZG8gVHlwZQorICAiCisgICIgQ29uc3RhbnQJCUJvb2xlYW4gQ2hhcmFjdGVyIE51bWJlciBTdHJpbmcKKyAgIiBJZGVudGlmaWVyCQlGdW5jdGlvbgorICAiIFByZVByb2MJCURlZmluZSBJbmNsdWRlIE1hY3JvIFByZUNvbmRpdAorICAiIFNwZWNpYWwJCURlYnVnIERlbGltaXRlciBTcGVjaWFsQ2hhciBTcGVjaWFsQ29tbWVudCBUYWcKKyAgIiBTdGF0ZW1lbnQJCUNvbmRpdGlvbmFsIEV4Y2VwdGlvbiBLZXl3b3JkIExhYmVsIE9wZXJhdG9yIFJlcGVhdAorICAiIFR5cGUJCVN0b3JhZ2VDbGFzcyBTdHJ1Y3R1cmUgVHlwZWRlZgorCisgIEhpTGluayBhc202OGtDb21tZW50CQlDb21tZW50CisgIEhpTGluayBhc202OGtUb2RvCQlUb2RvCisKKyAgSGlMaW5rIGhleE51bWJlcgkJTnVtYmVyCQkiIENvbnN0YW50CisgIEhpTGluayBvY3ROdW1iZXIJCU51bWJlcgkJIiBDb25zdGFudAorICBIaUxpbmsgYmluTnVtYmVyCQlOdW1iZXIJCSIgQ29uc3RhbnQKKyAgSGlMaW5rIGRlY051bWJlcgkJTnVtYmVyCQkiIENvbnN0YW50CisgIEhpTGluayBmbG9hdE51bWJlcgkJTnVtYmVyCQkiIENvbnN0YW50CisgIEhpTGluayBmbG9hdEV4cG9uZW50CQlOdW1iZXIJCSIgQ29uc3RhbnQKKyAgSGlMaW5rIGZsb2F0RQkJCVNwZWNpYWxDaGFyCSIgU3RhdGVtZW50CisgICJIaUxpbmsgZmxvYXRFCQlOdW1iZXIJCSIgQ29uc3RhbnQKKworICBIaUxpbmsgYXNtNjhrSW1tZWRpYXRlCVNwZWNpYWxDaGFyCSIgU3RhdGVtZW50CisgICJIaUxpbmsgYXNtNjhrU3ltYm9sCQlDb25zdGFudAorCisgIEhpTGluayBhc202OGtTdHJpbmcJCVN0cmluZwkJIiBDb25zdGFudAorICBIaUxpbmsgYXNtNjhrQ2hhckVycm9yCUVycm9yCisgIEhpTGluayBhc202OGtTdHJpbmdFcnJvcglFcnJvcgorCisgIEhpTGluayBhc202OGtSZWcJCUlkZW50aWZpZXIKKyAgSGlMaW5rIGFzbTY4a09wZXJhdG9yCQlJZGVudGlmaWVyCisKKyAgSGlMaW5rIGFzbTY4a0luY2x1ZGUJCUluY2x1ZGUJCSIgUHJlUHJvYworICBIaUxpbmsgYXNtNjhrTWFjcm8JCU1hY3JvCQkiIFByZVByb2MKKyAgSGlMaW5rIGFzbTY4a01hY3JvUGFyYW0JS2V5d29yZAkJIiBTdGF0ZW1lbnQKKworICBIaUxpbmsgYXNtNjhrRGlyZWN0aXZlCVNwZWNpYWwKKyAgSGlMaW5rIGFzbTY4a1ByZUNvbmQJCVNwZWNpYWwKKworCisgIEhpTGluayBhc202OGtPcGNvZGUJCVN0YXRlbWVudAorICBIaUxpbmsgYXNtNjhrQ29uZAkJQ29uZGl0aW9uYWwJIiBTdGF0ZW1lbnQKKyAgSGlMaW5rIGFzbTY4a1JlcGVhdAkJUmVwZWF0CQkiIFN0YXRlbWVudAorCisgIEhpTGluayBhc202OGtMYWJlbAkJVHlwZQorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYXNtNjhrIgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hc21oODMwMC52aW0gYi9ydW50aW1lL3N5bnRheC9hc21oODMwMC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2OTlkOAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2FzbWg4MzAwLnZpbQpAQCAtMCwwICsxLDg1IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJSGl0YWNoaSBILTgzMDBoIHNwZWNpZmljIHN5bnRheCBmb3IgR05VIEFzc2VtYmxlcgorIiBNYWludGFpbmVyOglLZXZpbiBEYWhsaGF1c2VuIDxrZGFobGhhdXNAeWFob28uY29tPgorIiBMYXN0IENoYW5nZToJMjAwMiBTZXAgMTkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworc3luIG1hdGNoIGFzbURpcmVjdGl2ZSAiXC5oODMwMFtoXSoiCisKKyJoODMwMFtoXSByZWdpc3RlcnMKK3N5biBtYXRjaCBhc21SZWcJImVcPXJbMC03XVtsaF1cPSIKKworImg4MzAwW2hdIG9wY29kZXMgLSBvcmRlciBpcyBpbXBvcnRhbnQhCitzeW4gbWF0Y2ggYXNtT3Bjb2RlICJhZGRcLltsYnddIgorc3luIG1hdGNoIGFzbU9wY29kZSAiYWRkW3N4IDpdIgorc3luIG1hdGNoIGFzbU9wY29kZSAiYW5kXC5bbGJ3XSIKK3N5biBtYXRjaCBhc21PcGNvZGUgImJsW2Rlb3RzXSIKK3N5biBtYXRjaCBhc21PcGNvZGUgImNtcFwuW2xid10iCitzeW4gbWF0Y2ggYXNtT3Bjb2RlICJkZWNcLltsYnddIgorc3luIG1hdGNoIGFzbU9wY29kZSAiZGl2eFt1c10uW2J3XSIKK3N5biBtYXRjaCBhc21PcGNvZGUgImV4dFtzdV1cLltsd10iCitzeW4gbWF0Y2ggYXNtT3Bjb2RlICJpbmNcLltsd10iCitzeW4gbWF0Y2ggYXNtT3Bjb2RlICJtb3ZcLltsYnddIgorc3luIG1hdGNoIGFzbU9wY29kZSAibXVseFtzdV1cLltid10iCitzeW4gbWF0Y2ggYXNtT3Bjb2RlICJuZWdcLltsYnddIgorc3luIG1hdGNoIGFzbU9wY29kZSAibm90XC5bbGJ3XSIKK3N5biBtYXRjaCBhc21PcGNvZGUgIm9yXC5bbGJ3XSIKK3N5biBtYXRjaCBhc21PcGNvZGUgInBvcFwuW3dsXSIKK3N5biBtYXRjaCBhc21PcGNvZGUgInB1c2hcLlt3bF0iCitzeW4gbWF0Y2ggYXNtT3Bjb2RlICJyb3R4XD1bbHJdXC5bbGJ3XSIKK3N5biBtYXRjaCBhc21PcGNvZGUgInNoYVtscl1cLltsYnddIgorc3luIG1hdGNoIGFzbU9wY29kZSAic2hsW2xyXVwuW2xid10iCitzeW4gbWF0Y2ggYXNtT3Bjb2RlICJzdWJcLltsYnddIgorc3luIG1hdGNoIGFzbU9wY29kZSAieG9yXC5bbGJ3XSIKK3N5biBrZXl3b3JkIGFzbU9wY29kZSAiYW5kYyIgImJhbmQiICJiY2MiICJiY2xyIiAiYmNzIiAiYmVxIiAiYmYiICJiZ2UiICJiZ3QiCitzeW4ga2V5d29yZCBhc21PcGNvZGUgImJoaSIgImJocyIgImJpYW5kIiAiYmlsZCIgImJpb3IiICJiaXN0IiAiYml4b3IiICJibWkiCitzeW4ga2V5d29yZCBhc21PcGNvZGUgImJuZSIgImJub3QiICJibnAiICJib3IiICJicGwiICJicHQiICJicmEiICJicm4iICJic2V0Igorc3luIGtleXdvcmQgYXNtT3Bjb2RlICJic3IiICJidHN0IiAiYnN0IiAiYnQiICJidmMiICJidnMiICJieG9yIiAiY21wIiAiZGFhIgorc3luIGtleXdvcmQgYXNtT3Bjb2RlICJkYXMiICJlZXBtb3YiICJlZXBtb3Z3IiAiaW5jIiAiam1wIiAianNyIiAibGRjIiAibW92ZnBlIgorc3luIGtleXdvcmQgYXNtT3Bjb2RlICJtb3Z0cGUiICJtb3YiICJub3AiICJvcmMiICJydGUiICJydHMiICJzbGVlcCIgInN0YyIKK3N5biBrZXl3b3JkIGFzbU9wY29kZSAic3ViIiAidHJhcGEiICJ4b3JjIgorCitzeW4gY2FzZSBtYXRjaAorCisKKyIgUmVhZCB0aGUgZ2VuZXJhbCBhc20gc3ludGF4CitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9hc20udmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9hc20udmltCitlbmRpZgorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2hpdGFjaGlfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfaGl0YWNoaV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBhc21PcGNvZGUgIFN0YXRlbWVudAorICBIaUxpbmsgYXNtUmVnaXN0ZXIgIElkZW50aWZpZXIKKworICAiIE15IGRlZmF1bHQtY29sb3Igb3ZlcnJpZGVzOgorICAiaGkgYXNtT3Bjb2RlIGN0ZXJtZmc9eWVsbG93CisgICJoaSBhc21SZWcJY3Rlcm1mZz1saWdodG1hZ2VudGEKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYXNtaDgzMDAiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hc24udmltIGIvcnVudGltZS9zeW50YXgvYXNuLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmMzZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYXNuLnZpbQpAQCAtMCwwICsxLDgxIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJQVNOLjEKKyIgTWFpbnRhaW5lcjoJQ2xhdWRpbyBGbGVpbmVyIDxjbGF1ZGlvQGZsZWluZXIuY29tPgorIiBVUkw6CQlodHRwOi8vd3d3LmZsZWluZXIuY29tL3ZpbS9zeW50YXgvYXNuLnZpbQorIiBMYXN0IENoYW5nZToJMjAwMSBBcHIgMjYKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGtleXdvcmQgZGVmaW5pdGlvbnMKK3N5biBrZXl3b3JkIGFzbkV4dGVybmFsCQlERUZJTklUSU9OUyBCRUdJTiBFTkQgSU1QT1JUUyBFWFBPUlRTIEZST00KK3N5biBtYXRjaCAgIGFzbkV4dGVybmFsCQkiXDxJTVBMSUNJVFxzXCtUQUdTXD4iCitzeW4gbWF0Y2ggICBhc25FeHRlcm5hbAkJIlw8RVhQTElDSVRcc1wrVEFHU1w+Igorc3luIGtleXdvcmQgYXNuRmllbGRPcHRpb24JREVGQVVMVCBPUFRJT05BTAorc3luIGtleXdvcmQgYXNuVGFnTW9kaWZpZXIJSU1QTElDSVQgRVhQTElDSVQKK3N5biBrZXl3b3JkIGFzblR5cGVJbmZvCQlBQlNFTlQgUFJFU0VOVCBTSVpFIFVOSVZFUlNBTCBBUFBMSUNBVElPTiBQUklWQVRFCitzeW4ga2V5d29yZCBhc25Cb29sVmFsdWUJVFJVRSBGQUxTRQorc3luIGtleXdvcmQgYXNuTnVtYmVyCQlNSU4gTUFYCitzeW4gbWF0Y2ggICBhc25OdW1iZXIJCSJcPFBMVVMtSU5GSU5JVFlcPiIKK3N5biBtYXRjaCAgIGFzbk51bWJlcgkJIlw8TUlOVVMtSU5GSU5JVFlcPiIKK3N5biBrZXl3b3JkIGFzblR5cGUJCUlOVEVHRVIgUkVBTCBTVFJJTkcgQklUIEJPT0xFQU4gT0NURVQgTlVMTCBFTUJFRERFRCBQRFYKK3N5biBrZXl3b3JkIGFzblR5cGUJCUJNUFN0cmluZyBJQTVTdHJpbmcgVGVsZXRleFN0cmluZyBHZW5lcmFsU3RyaW5nIEdyYXBoaWNTdHJpbmcgSVNPNjQ2U3RyaW5nIE51bWVyaWNTdHJpbmcgUHJpbnRhYmxlU3RyaW5nIFQ2MVN0cmluZyBVbml2ZXJzYWxTdHJpbmcgVmlkZW90ZXhTdHJpbmcgVmlzaWJsZVN0cmluZworc3luIGtleXdvcmQgYXNuVHlwZQkJQU5ZIERFRklORUQKK3N5biBtYXRjaCAgIGFzblR5cGUJCSJcLlwuXC4iCitzeW4gbWF0Y2ggICBhc25UeXBlCQkiT0JKRUNUXHNcK0lERU5USUZJRVIiCitzeW4gbWF0Y2ggICBhc25UeXBlCQkiVFlQRS1JREVOVElGSUVSIgorc3luIGtleXdvcmQgYXNuVHlwZQkJVVRGOFN0cmluZworc3luIGtleXdvcmQgYXNuU3RydWN0dXJlCUNIT0lDRSBTRVFVRU5DRSBTRVQgT0YgRU5VTUVSQVRFRCBDT05TVFJBSU5FRCBCWSBXSVRIIENPTVBPTkVOVFMgQ0xBU1MKKworIiBTdHJpbmdzIGFuZCBjb25zdGFudHMKK3N5biBtYXRjaCAgIGFzblNwZWNpYWwJCWNvbnRhaW5lZCAiXFxcZFxkXGRcfFxcLiIKK3N5biByZWdpb24gIGFzblN0cmluZwkJc3RhcnQ9KyIrICBza2lwPStcXFxcXHxcXCIrICBlbmQ9KyIrICBjb250YWlucz1hc25TcGVjaWFsCitzeW4gbWF0Y2ggICBhc25DaGFyYWN0ZXIJIidbXlxcXSciCitzeW4gbWF0Y2ggICBhc25TcGVjaWFsQ2hhcmFjdGVyICInXFwuJyIKK3N5biBtYXRjaCAgIGFzbk51bWJlcgkJIi1cPVw8XGRcK0xcPVw+XHwwW3hYXVswLTlhLWZBLUZdXCtcPiIKK3N5biBtYXRjaCAgIGFzbkxpbmVDb21tZW50CSItLS4qIgorc3luIG1hdGNoICAgYXNuTGluZUNvbW1lbnQJIi0tLiotLSIKKworc3luIG1hdGNoIGFzbkRlZmluaXRpb24gIl5ccypbYS16QS1aXVstYS16QS1aMC05Xy5cW1xdIFx0e31dKiAqOjo9Im1lPWUtMyBjb250YWlucz1hc25UeXBlCitzeW4gbWF0Y2ggYXNuQnJhY2VzICAgICAiW3t9XSIKKworc3luIHN5bmMgY2NvbW1lbnQgYXNuQ29tbWVudAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9hc25fc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfYXNuX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisgIEhpTGluayBhc25EZWZpbml0aW9uCUZ1bmN0aW9uCisgIEhpTGluayBhc25CcmFjZXMJCUZ1bmN0aW9uCisgIEhpTGluayBhc25TdHJ1Y3R1cmUJU3RhdGVtZW50CisgIEhpTGluayBhc25Cb29sVmFsdWUJQm9vbGVhbgorICBIaUxpbmsgYXNuU3BlY2lhbAkJU3BlY2lhbAorICBIaUxpbmsgYXNuU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIGFzbkNoYXJhY3RlcglDaGFyYWN0ZXIKKyAgSGlMaW5rIGFzblNwZWNpYWxDaGFyYWN0ZXIJYXNuU3BlY2lhbAorICBIaUxpbmsgYXNuTnVtYmVyCQlhc25WYWx1ZQorICBIaUxpbmsgYXNuQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgYXNuTGluZUNvbW1lbnQJYXNuQ29tbWVudAorICBIaUxpbmsgYXNuVHlwZQkJVHlwZQorICBIaUxpbmsgYXNuVHlwZUluZm8JCVByZVByb2MKKyAgSGlMaW5rIGFzblZhbHVlCQlOdW1iZXIKKyAgSGlMaW5rIGFzbkV4dGVybmFsCQlJbmNsdWRlCisgIEhpTGluayBhc25UYWdNb2RpZmllcglGdW5jdGlvbgorICBIaUxpbmsgYXNuRmllbGRPcHRpb24JVHlwZQorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYXNuIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYXNwcGVybC52aW0gYi9ydW50aW1lL3N5bnRheC9hc3BwZXJsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjdlZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYXNwcGVybC52aW0KQEAgLTAsMCArMSwzMyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUFjdGl2ZSBTdGF0ZSdzIFBlcmxTY3JpcHQgKEFTUCkKKyIgTWFpbnRhaW5lcjoJQWFyb24gSG9wZSA8ZWRoQGJyaW9mb3JnZS5jb20+CisiIFVSTDoJCWh0dHA6Ly9uaW0uZGhzLm9yZy9+ZWRoL2FzcHBlcmwudmltCisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmICFleGlzdHMoIm1haW5fc3ludGF4IikKKyAgbGV0IG1haW5fc3ludGF4ID0gJ3BlcmxzY3JpcHQnCitlbmRpZgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvIDxzZmlsZT46cDpoL2h0bWwudmltCisgIHN5biBpbmNsdWRlIEBBc3BQZXJsU2NyaXB0IDxzZmlsZT46cDpoL3BlcmwudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9odG1sLnZpbQorICB1bmxldCBiOmN1cnJlbnRfc3ludGF4CisgIHN5biBpbmNsdWRlIEBBc3BQZXJsU2NyaXB0IHN5bnRheC9wZXJsLnZpbQorZW5kaWYKKworc3luIGNsdXN0ZXIgaHRtbFByZXByb2MgYWRkPUFzcFBlcmxTY3JpcHRJbnNpZGVIdG1sVGFncworCitzeW4gcmVnaW9uICBBc3BQZXJsU2NyaXB0SW5zaWRlSHRtbFRhZ3Mga2VlcGVuZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0rPCU9XD0rIHNraXA9KyIuKiU+LioiKyBlbmQ9KyU+KyBjb250YWlucz1AQXNwUGVybFNjcmlwdAorc3luIHJlZ2lvbiAgQXNwUGVybFNjcmlwdEluc2lkZUh0bWxUYWdzIGtlZXBlbmQgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9KzxzY3JpcHRcc1wrbGFuZ3VhZ2U9Ilw9cGVybHNjcmlwdCJcPVtePl0qPisgZW5kPSs8L3NjcmlwdD4rIGNvbnRhaW5zPUBBc3BQZXJsU2NyaXB0CisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImFzcHBlcmwiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hc3B2YnMudmltIGIvcnVudGltZS9zeW50YXgvYXNwdmJzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDI3OTFjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYXNwdmJzLnZpbQpAQCAtMCwwICsxLDE5NiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU1pY3Jvc29mdCBWQlNjcmlwdCBXZWIgQ29udGVudCAoQVNQKQorIiBNYWludGFpbmVyOglEZXZpbiBXZWF2ZXIgPGt0b2hnQHRyaXRhcmdldC5jb20+CisiIFVSTDoJCWh0dHA6Ly90cml0YXJnZXQuY29tL3B1Yi92aW0vc3ludGF4L2FzcHZicy52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgQXByIDI1CisiIFZlcnNpb246CSRSZXZpc2lvbiQKKyIgVGhhbmtzIHRvIEpheS1KYXkgPHZpbUBqYXktamF5Lm5ldD4gZm9yIGEgc3ludGF4IHN5bmMgaGFjaywgaHVuZ2FyaWFuCisiIG5vdGF0aW9uLCBhbmQgZXh0cmEgaGlnaGxpZ2h0aW5nLgorIiBUaGFua3MgdG8gcGF0cmljayBkZWhuZSA8cGF0cmlja0BzdGVpZGxlLm5ldD4gZm9yIHRoZSBmb2xkaW5nIGNvZGUuCisiIFRoYW5rcyB0byBEZWFuIEhhbGwgPGhhbGxAYXB0Ny5jb20+IGZvciB0ZXN0aW5nIHRoZSB1c2Ugb2YgY2xhc3NlcyBpbgorIiBWQlNjcmlwdHMgd2hpY2ggSSd2ZSBiZWVuIHRvbyBzY2FyZWQgdG8gZG8uCisKKyIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBsZXQgbWFpbl9zeW50YXggPSAnYXNwdmJzJworZW5kaWYKKworaWYgdmVyc2lvbiA8IDYwMAorICBzb3VyY2UgPHNmaWxlPjpwOmgvaHRtbC52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2h0bWwudmltCitlbmRpZgordW5sZXQgYjpjdXJyZW50X3N5bnRheAorCitzeW4gY2x1c3RlciBodG1sUHJlUHJvYyBhZGQ9QXNwVkJTY3JpcHRJbnNpZGVIdG1sVGFncworCisKKyIgQ29sb3JlZCB2YXJpYWJsZSBuYW1lcywgaWYgd3JpdHRlbiBpbiBodW5nYXJpYW4gbm90YXRpb24KK2hpIGRlZiBBc3BWQlNWYXJpYWJsZVNpbXBsZSAgIHRlcm09c3RhbmRvdXQgIGN0ZXJtZmc9MyAgZ3VpZmc9Izk5ZWU5OQoraGkgZGVmIEFzcFZCU1ZhcmlhYmxlQ29tcGxleCAgdGVybT1zdGFuZG91dCAgY3Rlcm1mZz0zICBndWlmZz0jZWU5OTAwCitzeW4gbWF0Y2ggQXNwVkJTVmFyaWFibGVTaW1wbGUgIGNvbnRhaW5lZCAiXDxcKGJsblx8Ynl0XHxkdG1cPVx8ZGJsXHxpbnRcfHN0clwpXHVcdyoiCitzeW4gbWF0Y2ggQXNwVkJTVmFyaWFibGVDb21wbGV4IGNvbnRhaW5lZCAiXDxcKGFyclx8b2JqXClcdVx3KiIKKworCisiIEZ1bmN0aW9ucyBhbmQgbWV0aG9kcyB0aGF0IGFyZSBpbiBWQiBidXQgd2lsbCBjYXVzZSBlcnJvcnMgaW4gYW4gQVNQIHBhZ2UKKyIgVGhpcyBpcyBoZWxwZnVsbCBpZiB5b3VyIHBvcnRpbmcgVkIgY29kZSB0byBBU1AKKyIgSSByZW1vdmVkIChDb3VudCwgSXRlbSkgYmVjYXVzZSB0aGVzZSBhcmUgY29tbW9uIHZhcmlhYmxlIG5hbWVzIGluIEFzcFZCU2NyaXB0CitzeW4ga2V5d29yZCBBc3BWQlNFcnJvciBjb250YWluZWQgVmFsIFN0ciBDVmFyIENWRGF0ZSBEb0V2ZW50cyBHb1N1YiBSZXR1cm4gR29Ubworc3luIGtleXdvcmQgQXNwVkJTRXJyb3IgY29udGFpbmVkIFN0b3AgTGlua0V4ZWN1dGUgQWRkIFR5cGUgTGlua1Bva2UKK3N5biBrZXl3b3JkIEFzcFZCU0Vycm9yIGNvbnRhaW5lZCBMaW5rUmVxdWVzdCBMaW5rU2VuZCBEZWNsYXJlIE9wdGlvbmFsIFNsZWVwCitzeW4ga2V5d29yZCBBc3BWQlNFcnJvciBjb250YWluZWQgUGFyYW1BcnJheSBTdGF0aWMgRXJsIFR5cGVPZiBMaWtlIExTZXQgUlNldCBNaWQgU3RyQ29udgorIiBJdCBtYXkgc2VlbSB0aGF0IG1vc3Qgb2YgdGhlc2UgY2FuIGZpdCBpbnRvIGEga2V5d29yZCBjbGF1c2UgYnV0IGtleXdvcmQgdGFrZXMKKyIgcHJpb3JpdHkgb3ZlciBhbGwgc28gSSBjYW4ndCBnZXQgdGhlIG11bHRpLXdvcmQgbWF0Y2hlcworc3luIG1hdGNoIEFzcFZCU0Vycm9yIGNvbnRhaW5lZCAiXDxEZWZbYS16QS1aMC05X11cK1w+Igorc3luIG1hdGNoIEFzcFZCU0Vycm9yIGNvbnRhaW5lZCAiXlxzKk9wZW5cc1wrIgorc3luIG1hdGNoIEFzcFZCU0Vycm9yIGNvbnRhaW5lZCAiRGVidWdcLlthLXpBLVowLTlfXSoiCitzeW4gbWF0Y2ggQXNwVkJTRXJyb3IgY29udGFpbmVkICJeXHMqW2EtekEtWjAtOV9dXCs6Igorc3luIG1hdGNoIEFzcFZCU0Vycm9yIGNvbnRhaW5lZCAiW2EtekEtWjAtOV9dXCshW2EtekEtWjAtOV9dXCsiCitzeW4gbWF0Y2ggQXNwVkJTRXJyb3IgY29udGFpbmVkICJeXHMqIy4qJCIKK3N5biBtYXRjaCBBc3BWQlNFcnJvciBjb250YWluZWQgIlw8QXNcc1wrW2EtekEtWjAtOV9dKiIKK3N5biBtYXRjaCBBc3BWQlNFcnJvciBjb250YWluZWQgIlw8RW5kXD5cfFw8RXhpdFw+Igorc3luIG1hdGNoIEFzcFZCU0Vycm9yIGNvbnRhaW5lZCAiXDxPblxzXCtFcnJvclw+XHxcPE9uXD5cfFw8RXJyb3JcPlx8XDxSZXN1bWVcc1wrTmV4dFw+XHxcPFJlc3VtZVw+Igorc3luIG1hdGNoIEFzcFZCU0Vycm9yIGNvbnRhaW5lZCAiXDxPcHRpb25cc1wrXChCYXNlXHxDb21wYXJlXHxQcml2YXRlXHNcK01vZHVsZVwpXD4iCisiIFRoaXMgb25lIEkgd2FudCAnY2F1c2UgSSBhbHdheXMgc2VlbSB0byBtaXMtc3BlbGwgaXQuCitzeW4gbWF0Y2ggQXNwVkJTRXJyb3IgY29udGFpbmVkICJSZXNwb25cP2NlXC5cUyoiCitzeW4gbWF0Y2ggQXNwVkJTRXJyb3IgY29udGFpbmVkICJSZXNwb3NlXC5cUyoiCisiIFdoZW4gSSBsb29rZWQgdXAgdGhlIFZCU2NyaXB0IHN5bnRheCBpdCBtZW50aW9uZWQgdGhhdCBQcm9wZXJ0eSBHZXQvU2V0L0xldAorIiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsLCBob3dldmVyLCBJIGhhdmUgcmVjaXZlZCByZXBvcnRzIHRoYXQgdGhleSBkbyB3b3JrLgorIiBTbyBJIGNvbW1lbnRlZCBpdCBvdXQgZm9yIG5vdy4KKyIgc3luIG1hdGNoIEFzcFZCU0Vycm9yIGNvbnRhaW5lZCAiXDxQcm9wZXJ0eVxzXCtcKEdldFx8TGV0XHxTZXRcKVw+IgorCisiIEFzcFZCU2NyaXB0IFJlc2VydmVkIFdvcmRzLgorc3luIG1hdGNoIEFzcFZCU1N0YXRlbWVudCBjb250YWluZWQgIlw8T25cc1wrRXJyb3Jcc1wrXChSZXN1bWVcc1wrTmV4dFx8Z290b1xzXCswXClcPlx8XDxOZXh0XD4iCitzeW4gbWF0Y2ggQXNwVkJTU3RhdGVtZW50IGNvbnRhaW5lZCAiXDxFbmRcc1wrXChJZlx8Rm9yXHxTZWxlY3RcfENsYXNzXHxGdW5jdGlvblx8U3ViXHxXaXRoXClcPiIKK3N5biBtYXRjaCBBc3BWQlNTdGF0ZW1lbnQgY29udGFpbmVkICJcPEV4aXRcc1wrXChEb1x8Rm9yXHxTdWJcfEZ1bmN0aW9uXClcPiIKK3N5biBtYXRjaCBBc3BWQlNTdGF0ZW1lbnQgY29udGFpbmVkICJcPE9wdGlvblxzXCtFeHBsaWNpdFw+Igorc3luIG1hdGNoIEFzcFZCU1N0YXRlbWVudCBjb250YWluZWQgIlw8Rm9yXHNcK0VhY2hcPlx8XDxGb3JcPiIKK3N5biBtYXRjaCBBc3BWQlNTdGF0ZW1lbnQgY29udGFpbmVkICJcPFNldFw+Igorc3luIGtleXdvcmQgQXNwVkJTU3RhdGVtZW50IGNvbnRhaW5lZCBDYWxsIENsYXNzIENvbnN0IERlZmF1bHQgRGltIERvIExvb3AgRXJhc2UgQW5kCitzeW4ga2V5d29yZCBBc3BWQlNTdGF0ZW1lbnQgY29udGFpbmVkIEZ1bmN0aW9uIElmIFRoZW4gRWxzZSBFbHNlSWYgT3IKK3N5biBrZXl3b3JkIEFzcFZCU1N0YXRlbWVudCBjb250YWluZWQgUHJpdmF0ZSBQdWJsaWMgUmFuZG9taXplIFJlRGltCitzeW4ga2V5d29yZCBBc3BWQlNTdGF0ZW1lbnQgY29udGFpbmVkIFNlbGVjdCBDYXNlIFN1YiBXaGlsZSBXaXRoIFdlbmQgTm90CisKKyIgQXNwVkJTY3JpcHQgRnVuY3Rpb25zCitzeW4ga2V5d29yZCBBc3BWQlNGdW5jdGlvbiBjb250YWluZWQgQWJzIEFycmF5IEFzYyBBdG4gQ0Jvb2wgQ0J5dGUgQ0N1ciBDRGF0ZSBDRGJsCitzeW4ga2V5d29yZCBBc3BWQlNGdW5jdGlvbiBjb250YWluZWQgQ2hyIENJbnQgQ0xuZyBDb3MgQ3JlYXRlT2JqZWN0IENTbmcgQ1N0ciBEYXRlCitzeW4ga2V5d29yZCBBc3BWQlNGdW5jdGlvbiBjb250YWluZWQgRGF0ZUFkZCBEYXRlRGlmZiBEYXRlUGFydCBEYXRlU2VyaWFsIERhdGVWYWx1ZQorc3luIGtleXdvcmQgQXNwVkJTRnVuY3Rpb24gY29udGFpbmVkIERhdGUgRGF5IEV4cCBGaWx0ZXIgRml4IEZvcm1hdEN1cnJlbmN5CitzeW4ga2V5d29yZCBBc3BWQlNGdW5jdGlvbiBjb250YWluZWQgRm9ybWF0RGF0ZVRpbWUgRm9ybWF0TnVtYmVyIEZvcm1hdFBlcmNlbnQKK3N5biBrZXl3b3JkIEFzcFZCU0Z1bmN0aW9uIGNvbnRhaW5lZCBHZXRPYmplY3QgSGV4IEhvdXIgSW5wdXRCb3ggSW5TdHIgSW5TdHJSZXYgSW50CitzeW4ga2V5d29yZCBBc3BWQlNGdW5jdGlvbiBjb250YWluZWQgSXNBcnJheSBJc0RhdGUgSXNFbXB0eSBJc051bGwgSXNOdW1lcmljCitzeW4ga2V5d29yZCBBc3BWQlNGdW5jdGlvbiBjb250YWluZWQgSXNPYmplY3QgSm9pbiBMQm91bmQgTENhc2UgTGVmdCBMZW4gTG9hZFBpY3R1cmUKK3N5biBrZXl3b3JkIEFzcFZCU0Z1bmN0aW9uIGNvbnRhaW5lZCBMb2cgTFRyaW0gTWlkIE1pbnV0ZSBNb250aCBNb250aE5hbWUgTXNnQm94IE5vdworc3luIGtleXdvcmQgQXNwVkJTRnVuY3Rpb24gY29udGFpbmVkIE9jdCBSZXBsYWNlIFJHQiBSaWdodCBSbmQgUm91bmQgUlRyaW0KK3N5biBrZXl3b3JkIEFzcFZCU0Z1bmN0aW9uIGNvbnRhaW5lZCBTY3JpcHRFbmdpbmUgU2NyaXB0RW5naW5lQnVpbGRWZXJzaW9uCitzeW4ga2V5d29yZCBBc3BWQlNGdW5jdGlvbiBjb250YWluZWQgU2NyaXB0RW5naW5lTWFqb3JWZXJzaW9uCitzeW4ga2V5d29yZCBBc3BWQlNGdW5jdGlvbiBjb250YWluZWQgU2NyaXB0RW5naW5lTWlub3JWZXJzaW9uIFNlY29uZCBTZ24gU2luIFNwYWNlCitzeW4ga2V5d29yZCBBc3BWQlNGdW5jdGlvbiBjb250YWluZWQgU3BsaXQgU3FyIFN0ckNvbXAgU3RyUmV2ZXJzZSBTdHJpbmcgVGFuIFRpbWUgVGltZXIKK3N5biBrZXl3b3JkIEFzcFZCU0Z1bmN0aW9uIGNvbnRhaW5lZCBUaW1lU2VyaWFsIFRpbWVWYWx1ZSBUcmltIFR5cGVOYW1lIFVCb3VuZCBVQ2FzZQorc3luIGtleXdvcmQgQXNwVkJTRnVuY3Rpb24gY29udGFpbmVkIFZhclR5cGUgV2Vla2RheSBXZWVrZGF5TmFtZSBZZWFyCisKKyIgQXNwVkJTY3JpcHQgTWV0aG9kcworc3luIGtleXdvcmQgQXNwVkJTTWV0aG9kcyBjb250YWluZWQgQWRkIEFkZEZvbGRlcnMgQnVpbGRQYXRoIENsZWFyIENsb3NlIENvcHkKK3N5biBrZXl3b3JkIEFzcFZCU01ldGhvZHMgY29udGFpbmVkIENvcHlGaWxlIENvcHlGb2xkZXIgQ3JlYXRlRm9sZGVyIENyZWF0ZVRleHRGaWxlCitzeW4ga2V5d29yZCBBc3BWQlNNZXRob2RzIGNvbnRhaW5lZCBEZWxldGUgRGVsZXRlRmlsZSBEZWxldGVGb2xkZXIgRHJpdmVFeGlzdHMKK3N5biBrZXl3b3JkIEFzcFZCU01ldGhvZHMgY29udGFpbmVkIEV4aXN0cyBGaWxlRXhpc3RzIEZvbGRlckV4aXN0cworc3luIGtleXdvcmQgQXNwVkJTTWV0aG9kcyBjb250YWluZWQgR2V0QWJzb2x1dGVQYXRoTmFtZSBHZXRCYXNlTmFtZSBHZXREcml2ZQorc3luIGtleXdvcmQgQXNwVkJTTWV0aG9kcyBjb250YWluZWQgR2V0RHJpdmVOYW1lIEdldEV4dGVuc2lvbk5hbWUgR2V0RmlsZQorc3luIGtleXdvcmQgQXNwVkJTTWV0aG9kcyBjb250YWluZWQgR2V0RmlsZU5hbWUgR2V0Rm9sZGVyIEdldFBhcmVudEZvbGRlck5hbWUKK3N5biBrZXl3b3JkIEFzcFZCU01ldGhvZHMgY29udGFpbmVkIEdldFNwZWNpYWxGb2xkZXIgR2V0VGVtcE5hbWUgSXRlbXMgS2V5cyBNb3ZlCitzeW4ga2V5d29yZCBBc3BWQlNNZXRob2RzIGNvbnRhaW5lZCBNb3ZlRmlsZSBNb3ZlRm9sZGVyIE9wZW5Bc1RleHRTdHJlYW0KK3N5biBrZXl3b3JkIEFzcFZCU01ldGhvZHMgY29udGFpbmVkIE9wZW5UZXh0RmlsZSBSYWlzZSBSZWFkIFJlYWRBbGwgUmVhZExpbmUgUmVtb3ZlCitzeW4ga2V5d29yZCBBc3BWQlNNZXRob2RzIGNvbnRhaW5lZCBSZW1vdmVBbGwgU2tpcCBTa2lwTGluZSBXcml0ZSBXcml0ZUJsYW5rTGluZXMKK3N5biBrZXl3b3JkIEFzcFZCU01ldGhvZHMgY29udGFpbmVkIFdyaXRlTGluZQorc3luIG1hdGNoIEFzcFZCU01ldGhvZHMgY29udGFpbmVkICJSZXNwb25zZVwuXFMqIgorIiBDb2xvcml6ZSBib29sZWFuIGNvbnN0YW50czoKK3N5biBrZXl3b3JkIEFzcFZCU01ldGhvZHMgY29udGFpbmVkIHRydWUgZmFsc2UKKworIiBBc3BWQlNjcmlwdCBOdW1iZXIgQ29udHN0YW50cworIiBJbnRlZ2VyIG51bWJlciwgb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdpdGhvdXQgYSBkb3QuCitzeW4gbWF0Y2ggIEFzcFZCU051bWJlcgljb250YWluZWQJIlw8XGRcK1w+IgorIiBGbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90CitzeW4gbWF0Y2ggIEFzcFZCU051bWJlcgljb250YWluZWQJIlw8XGRcK1wuXGQqXD4iCisiIEZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdAorc3luIG1hdGNoICBBc3BWQlNOdW1iZXIJY29udGFpbmVkCSJcLlxkXCtcPiIKKworIiBTdHJpbmcgYW5kIENoYXJhY3RlciBDb250c3RhbnRzCisiIHJlbW92ZWQgKHNraXA9K1xcXFxcfFxcIispIGJlY2F1c2UgVkIgZG9lc24ndCBoYXZlIGJhY2tzbGFzaCBlc2NhcGluZyBpbgorIiBzdHJpbmdzIChvciBkb2VzIGl0PykKK3N5biByZWdpb24gIEFzcFZCU1N0cmluZwljb250YWluZWQJICBzdGFydD0rIisgIGVuZD0rIisga2VlcGVuZAorCisiIEFzcFZCU2NyaXB0IENvbW1lbnRzCitzeW4gcmVnaW9uICBBc3BWQlNDb21tZW50CWNvbnRhaW5lZCBzdGFydD0iXlJFTVxzXHxcc1JFTVxzIiBlbmQ9IiQiIGNvbnRhaW5zPUFzcFZCU1RvZG8ga2VlcGVuZAorc3luIHJlZ2lvbiAgQXNwVkJTQ29tbWVudCAgIGNvbnRhaW5lZCBzdGFydD0iXidcfFxzJyIgICBlbmQ9IiQiIGNvbnRhaW5zPUFzcFZCU1RvZG8ga2VlcGVuZAorIiBtaXNjLiBDb21tZW50aW5nIFN0dWZmCitzeW4ga2V5d29yZCBBc3BWQlNUb2RvIGNvbnRhaW5lZAlUT0RPIEZJWE1FCisKKyIgQ29zbWV0aWMgc3ludGF4IGVycm9ycyBjb21tYW5seSBmb3VuZCBpbiBWQiBidXQgbm90IGluIEFzcFZCU2NyaXB0CisiIEFzcFZCU2NyaXB0IGRvZXNuJ3QgdXNlIGxpbmUgbnVtYmVycworc3luIHJlZ2lvbiAgQXNwVkJTRXJyb3IJY29udGFpbmVkIHN0YXJ0PSJeXGQiIGVuZD0iXHMiIGtlZXBlbmQKKyIgQXNwVkJTY3JpcHQgYWxzbyBkb2Vzbid0IGhhdmUgdHlwZSBkZWZpbmluZyB2YXJpYWJsZXMKK3N5biBtYXRjaCAgIEFzcFZCU0Vycm9yICBjb250YWluZWQgIlthLXpBLVowLTlfXVtcJCYhI10ibXM9cysxCisiIFNpbmNlICdhJScgaXMgYSBWQiB2YXJpYWJsZSB3aXRoIGEgdHlwZSBhbmQgaW4gQXNwVkJTY3JpcHQgeW91IGNhbiBoYXZlICdhJT4nCisiIEkgaGF2ZSB0byBtYWtlIGEgc3BlY2lhbCBjYXNlIHNvICdhJT4nIHdvbid0IHNob3cgYXMgYW4gZXJyb3IuCitzeW4gbWF0Y2ggICBBc3BWQlNFcnJvciAgY29udGFpbmVkICJbYS16QS1aMC05X10lXCgkXHxbXj5dXCkibXM9cysxCisKKyIgVG9wIENsdXN0ZXIKK3N5biBjbHVzdGVyIEFzcFZCU2NyaXB0VG9wIGNvbnRhaW5zPUFzcFZCU1N0YXRlbWVudCxBc3BWQlNGdW5jdGlvbixBc3BWQlNNZXRob2RzLEFzcFZCU051bWJlcixBc3BWQlNTdHJpbmcsQXNwVkJTQ29tbWVudCxBc3BWQlNFcnJvcixBc3BWQlNWYXJpYWJsZVNpbXBsZSxBc3BWQlNWYXJpYWJsZUNvbXBsZXgKKworIiBGb2xkaW5nCitzeW4gcmVnaW9uIEFzcFZCU0ZvbGQgc3RhcnQ9Il5ccypcKGNsYXNzXClcc1wrLiokIiBlbmQ9Il5ccyplbmRcc1wrXChjbGFzc1wpXD4uKiQiIGZvbGQgY29udGFpbmVkIHRyYW5zcGFyZW50IGtlZXBlbmQKK3N5biByZWdpb24gQXNwVkJTRm9sZCBzdGFydD0iXlxzKlwocHJpdmF0ZVx8cHVibGljXClcPVwoXHNcK2RlZmF1bHRcKVw9XHNcK1woc3ViXHxmdW5jdGlvblwpXHNcKy4qJCIgZW5kPSJeXHMqZW5kXHNcK1woZnVuY3Rpb25cfHN1YlwpXD4uKiQiIGZvbGQgY29udGFpbmVkIHRyYW5zcGFyZW50IGtlZXBlbmQKKworIiBEZWZpbmUgQXNwVkJTY3JpcHQgZGVsaW1ldGVycworIiA8JT0gZnVuYygic3RyaW5nX3dpdGhfJT5faW5faXQiKSAlPiBUaGlzIGlzIGlsbGVnYWwgaW4gQVNQIHN5bnRheC4KK3N5biByZWdpb24gIEFzcFZCU2NyaXB0SW5zaWRlSHRtbFRhZ3Mga2VlcGVuZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0rPCU9XD0rIGVuZD0rJT4rIGNvbnRhaW5zPUBBc3BWQlNjcmlwdFRvcCwgQXNwVkJTRm9sZAorc3luIHJlZ2lvbiAgQXNwVkJTY3JpcHRJbnNpZGVIdG1sVGFncyBrZWVwZW5kIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSs8c2NyaXB0XHNcK2xhbmd1YWdlPSJcPXZic2NyaXB0Ilw9W14+XSpcc1wrcnVuYXRzZXJ2ZXJbXj5dKj4rIGVuZD0rPC9zY3JpcHQ+KyBjb250YWlucz1AQXNwVkJTY3JpcHRUb3AKKworCisiIFN5bmNocm9uaXphdGlvbgorIiBzeW4gc3luYyBtYXRjaCBBc3BWQlNTeW5jR3JvdXAgZ3JvdXBoZXJlIEFzcFZCU2NyaXB0SW5zaWRlSHRtbFRhZ3MgIjwlIgorIiBUaGlzIGlzIGEga2x1ZGdlIHNvIHRoZSBIVE1MIHdpbGwgc3luYyBwcm9wZXJseQorc3luIHN5bmMgbWF0Y2ggaHRtbEhpZ2hsaWdodCBncm91cGhlcmUgaHRtbFRhZyAiJT4iCisKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9hc3B2YnNfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfYXNwdmJzX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIkhpTGluayBBc3BWQlNjcmlwdAkJU3BlY2lhbAorICBIaUxpbmsgQXNwVkJTTGluZU51bWJlcglDb21tZW50CisgIEhpTGluayBBc3BWQlNOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgQXNwVkJTRXJyb3IJCUVycm9yCisgIEhpTGluayBBc3BWQlNTdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluayBBc3BWQlNTdHJpbmcJCVN0cmluZworICBIaUxpbmsgQXNwVkJTQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgQXNwVkJTVG9kbwkJVG9kbworICBIaUxpbmsgQXNwVkJTRnVuY3Rpb24JCUlkZW50aWZpZXIKKyAgSGlMaW5rIEFzcFZCU01ldGhvZHMJCVByZVByb2MKKyAgSGlMaW5rIEFzcFZCU0V2ZW50cwkJU3BlY2lhbAorICBIaUxpbmsgQXNwVkJTVHlwZVNwZWNpZmllcglUeXBlCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImFzcHZicyIKKworaWYgbWFpbl9zeW50YXggPT0gJ2FzcHZicycKKyAgdW5sZXQgbWFpbl9zeW50YXgKK2VuZGlmCisKKyIgdmltOiB0cz04OnN3PTI6c3RzPTA6bm9ldApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYXRsYXMudmltIGIvcnVudGltZS9zeW50YXgvYXRsYXMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZmU0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9hdGxhcy52aW0KQEAgLTAsMCArMSw5OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUFUTEFTCisiIE1haW50YWluZXI6CUluYWtpIFNhZXogPGppc2FlekBzZmUuaW5kcmEuZXM+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCitzeW4ga2V5d29yZCBhdGxhc1N0YXRlbWVudAliZWdpbiB0ZXJtaW5hdGUKK3N5biBrZXl3b3JkIGF0bGFzU3RhdGVtZW50CWZpbGwgY2FsY3VsYXRlIGNvbXBhcmUKK3N5biBrZXl3b3JkIGF0bGFzU3RhdGVtZW50CXNldHVwIGNvbm5lY3QgY2xvc2Ugb3BlbiBkaXNjb25uZWN0IHJlc2V0CitzeW4ga2V5d29yZCBhdGxhc1N0YXRlbWVudAlpbml0aWF0ZSByZWFkIGZldGNoCitzeW4ga2V5d29yZCBhdGxhc1N0YXRlbWVudAlhcHBseSBtZWFzdXJlIHZlcmlmeSByZW1vdmUKK3N5biBrZXl3b3JkIGF0bGFzU3RhdGVtZW50CXBlcmZvcm0gbGVhdmUgZmluaXNoIG91dHB1dCBkZWxheQorc3luIGtleXdvcmQgYXRsYXNTdGF0ZW1lbnQJcHJlcGFyZSBleGVjdXRlCitzeW4ga2V5d29yZCBhdGxhc1N0YXRlbWVudAlkbworc3luIG1hdGNoIGF0bGFzU3RhdGVtZW50CSJcPGdvWwkgXVwrdG9cPiIKK3N5biBtYXRjaCBhdGxhc1N0YXRlbWVudAkiXDx3YWl0WwkgXVwrZm9yXD4iCisKK3N5biBrZXl3b3JkIGF0bGFzSW5jbHVkZQlpbmNsdWRlCitzeW4ga2V5d29yZCBhdGxhc0RlZmluZQkJZGVmaW5lIHJlcXVpcmUgZGVjbGFyZSBpZGVudGlmeQorCisic3luIGtleXdvcmQgYXRsYXNSZXNlcnZlZAl0cnVlIGZhbHNlIGdvIG5vZ28gaGkgbG8gdmlhCitzeW4ga2V5d29yZCBhdGxhc1Jlc2VydmVkCXRydWUgZmFsc2UKKworc3luIGtleXdvcmQgYXRsYXNTdG9yYWdlQ2xhc3MJZXh0ZXJuYWwgZ2xvYmFsCisKK3N5biBrZXl3b3JkIGF0bGFzQ29uZGl0aW9uYWwJaWYgdGhlbiBlbHNlIGVuZAorc3luIGtleXdvcmQgYXRsYXNSZXBlYXQJCXdoaWxlIGZvciB0aHJ1CisKKyIgRmxhZ3MgQkVGIGFuZCBzdGF0ZW1lbnQgbnVtYmVyCitzeW4gbWF0Y2ggYXRsYXNTcGVjaWFsCQkiXltCRSBdWyAwLTldXHssNn1cPiIKKworIiBOdW1iZXIgZm9ybWF0cworc3luIG1hdGNoIGF0bGFzSGV4TnVtYmVyCSJcPFgnWzAtOUEtRl1cKyciCitzeW4gbWF0Y2ggYXRsYXNPY3RhbE51bWJlcgkiXDxPJ1swLTddXCsnIgorc3luIG1hdGNoIGF0bGFzQmluTnVtYmVyCSJcPEInWzAxXVwrJyIKK3N5biBtYXRjaCBhdGxhc051bWJlcgkJIlw8XGRcK1w+IgorIkZsb2F0aW5nIHBvaW50IG51bWJlciBwYXJ0IG9ubHkKK3N5biBtYXRjaCBhdGxhc0RlY2ltYWxOdW1iZXIJIlwuXGRcK1woW2VFXVstK11cPVxkXClcPVw+IgorCitzeW4gcmVnaW9uIGF0bGFzRm9ybWF0U3RyaW5nCXN0YXJ0PSsoKCsJZW5kPStcKCkpXClcfFwoKVsJIF0qXCRcKSttZT1lLTEKK3N5biByZWdpb24gYXRsYXNTdHJpbmcJCXN0YXJ0PStcPEMnKwllbmQ9KycrICAgb25lbGluZQorCitzeW4gcmVnaW9uIGF0bGFzQ29tbWVudAkJc3RhcnQ9K15DKwllbmQ9K1wkKworc3luIHJlZ2lvbiBhdGxhc0NvbW1lbnQyCXN0YXJ0PStcJC5cKyttcz1zKzEJZW5kPSskKyBvbmVsaW5lCisKK3N5biBtYXRjaCAgYXRsYXNJZGVudGlmaWVyCSInW0EtWmEtejAtOSAuXy1dXCsnIgorCisiU3luY2hyb25pemF0aW9uIHdpdGggU3RhdGVtZW50IHRlcm1pbmF0b3IgJAorc3luIHN5bmMgbWF0Y2ggYXRsYXNUZXJtaW5hdG9yCWdyb3VwaGVyZSBhdGxhc0NvbW1lbnQgIl5DIgorc3luIHN5bmMgbWF0Y2ggYXRsYXNUZXJtaW5hdG9yCWdyb3VwdGhlcmUgTk9ORSAiXCQiCitzeW4gc3luYyBtYXhsaW5lcz0xMDAKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9hdGxhc19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9hdGxhc19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBhdGxhc0NvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluayBhdGxhc1JlcGVhdAkJUmVwZWF0CisgIEhpTGluayBhdGxhc1N0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIGF0bGFzTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIGF0bGFzSGV4TnVtYmVyCU51bWJlcgorICBIaUxpbmsgYXRsYXNPY3RhbE51bWJlcglOdW1iZXIKKyAgSGlMaW5rIGF0bGFzQmluTnVtYmVyCU51bWJlcgorICBIaUxpbmsgYXRsYXNEZWNpbWFsTnVtYmVyCUZsb2F0CisgIEhpTGluayBhdGxhc0Zvcm1hdFN0cmluZwlTdHJpbmcKKyAgSGlMaW5rIGF0bGFzU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIGF0bGFzQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgYXRsYXNDb21tZW50MgkJQ29tbWVudAorICBIaUxpbmsgYXRsYXNJbmNsdWRlCQlJbmNsdWRlCisgIEhpTGluayBhdGxhc0RlZmluZQkJTWFjcm8KKyAgSGlMaW5rIGF0bGFzUmVzZXJ2ZWQJCVByZUNvbmRpdAorICBIaUxpbmsgYXRsYXNTdG9yYWdlQ2xhc3MJU3RvcmFnZUNsYXNzCisgIEhpTGluayBhdGxhc0lkZW50aWZpZXIJTk9ORQorICBIaUxpbmsgYXRsYXNTcGVjaWFsCQlTcGVjaWFsCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImF0bGFzIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYXV0b21ha2UudmltIGIvcnVudGltZS9zeW50YXgvYXV0b21ha2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMDk5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9hdXRvbWFrZS52aW0KQEAgLTAsMCArMSw3OSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CWF1dG9tYWtlIE1ha2VmaWxlLmFtCisiIE1haW50YWluZXI6CUpvaG4gV2lsbGlhbXMgPGpyd0Bwb2JveC5jb20+CisiIExhc3QgY2hhbmdlOgkyMDAxIE1heSAwOQorCisKKyIgVGhpcyBzY3JpcHQgYWRkcyBzdXBwb3J0IGZvciBhdXRvbWFrZSdzIE1ha2VmaWxlLmFtIGZvcm1hdC4gSXQgaGlnaGxpZ2h0cworIiBNYWtlZmlsZSB2YXJpYWJsZXMgc2lnbmlmaWNhbnQgdG8gYXV0b21ha2UgYXMgd2VsbCBhcyBoaWdobGlnaHRpbmcKKyIgYXV0b2NvbmYtc3R5bGUgQHZhcmlhYmxlQCBzdWJzdGl0dXRpb25zIC4gU3Vic2l0dXRpb25zIGFyZSBtYXJrZWQgYXMgZXJyb3JzCisiIHdoZW4gdGhleSBhcmUgdXNlZCBpbiBhbiBpbmFwcHJvcHJpYXRlIHBsYWNlLCBzdWNoIGFzIGluIGRlZmluaW5nCisiIEVYVFJBX1NPVVJDRVMuCisKKworIiBSZWFkIHRoZSBNYWtlZmlsZSBzeW50YXggdG8gc3RhcnQgd2l0aAoraWYgdmVyc2lvbiA8IDYwMAorICBzb3VyY2UgPHNmaWxlPjpwOmgvbWFrZS52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L21ha2UudmltCitlbmRpZgorCitzeW4gbWF0Y2ggYXV0b21ha2VQcmltYXJ5ICJeW0EtWmEtejAtOV9dXCtcKF9QUk9HUkFNU1x8TElCUkFSSUVTXHxfTElTVFx8X1NDUklQVFNcfF9EQVRBXHxfSEVBREVSU1x8X01BTlNcfF9URVhJTkZPU1x8X0pBVkFcfF9MVExJQlJBUklFU1wpXHMqPSJtZT1lLTEKK3N5biBtYXRjaCBhdXRvbWFrZVByaW1hcnkgIl5URVNUU1xzKj0ibWU9ZS0xCitzeW4gbWF0Y2ggYXV0b21ha2VTZWNvbmRhcnkgIl5bQS1aYS16MC05X11cK1woX1NPVVJDRVNcfF9MREFERFx8X0xJQkFERFx8X0xERkxBR1NcfF9ERVBFTkRFTkNJRVNcKVxzKj0ibWU9ZS0xCitzeW4gbWF0Y2ggYXV0b21ha2VTZWNvbmRhcnkgIl5PTUlUX0RFUEVOREVOQ0lFU1xzKj0ibWU9ZS0xCitzeW4gbWF0Y2ggYXV0b21ha2VFeHRyYSAiXkVYVFJBX1tBLVphLXowLTlfXVwrXHMqPSJtZT1lLTEKK3N5biBtYXRjaCBhdXRvbWFrZU9wdGlvbnMgIl5cKEFVVE9NQUtFX09QVElPTlNcfEVUQUdTX0FSR1NcfFRBR1NfREVQRU5ERU5DSUVTXClccyo9Im1lPWUtMQorc3luIG1hdGNoIGF1dG9tYWtlQ2xlYW4gIl5cKE1PU1RMWVx8RElTVFx8TUFJTlRBSU5FUlwpXD1DTEVBTkZJTEVTXHMqPSJtZT1lLTEKK3N5biBtYXRjaCBhdXRvbWFrZVN1YmRpcnMgIl5cKERJU1RfXClcPVNVQkRJUlNccyo9Im1lPWUtMQorc3luIG1hdGNoIGF1dG9tYWtlQ29uZGl0aW9uYWwgIl5cKGlmXHMqW2EtekEtWjAtOV9dXCtcfGVsc2VcfGVuZGlmXClccyokIgorCitzeW4gbWF0Y2ggYXV0b21ha2VTdWJzdCAgICAgIkBbYS16QS1aMC05X11cK0AiCitzeW4gbWF0Y2ggYXV0b21ha2VTdWJzdCAgICAgIl5ccypAW2EtekEtWjAtOV9dXCtAIgorc3luIG1hdGNoIGF1dG9tYWtlQ29tbWVudDEgIiMuKiQiIGNvbnRhaW5zPWF1dG9tYWtlU3Vic3QKK3N5biBtYXRjaCBhdXRvbWFrZUNvbW1lbnQyICIjIy4qJCIKKworc3luIG1hdGNoIGF1dG9tYWtlTWFrZUVycm9yICIkW3soXVtefSldKlteYS16QS1aMC05X30pXVtefSldKlt9KV0iICIgR05VIG1ha2UgZnVuY3Rpb24gY2FsbAorCitzeW4gcmVnaW9uIGF1dG9tYWtlTm9TdWJzdCBzdGFydD0iXkVYVFJBX1thLXpBLVowLTlfXSpccyo9IiBlbmQ9IiQiIGNvbnRhaW5zPUFMTEJVVCxhdXRvbWFrZU5vU3Vic3QgdHJhbnNwYXJlbnQKK3N5biByZWdpb24gYXV0b21ha2VOb1N1YnN0IHN0YXJ0PSJeRElTVF9TVUJESVJTXHMqPSIgZW5kPSIkIiBjb250YWlucz1BTExCVVQsYXV0b21ha2VOb1N1YnN0IHRyYW5zcGFyZW50CitzeW4gcmVnaW9uIGF1dG9tYWtlTm9TdWJzdCBzdGFydD0iXlthLXpBLVowLTlfXSpfU09VUkNFU1xzKj0iIGVuZD0iJCIgY29udGFpbnM9QUxMQlVULGF1dG9tYWtlTm9TdWJzdCB0cmFuc3BhcmVudAorc3luIG1hdGNoIGF1dG9tYWtlQmFkU3Vic3QgICJAXChbYS16QS1aMC05X10qQFw9XClcPSIgY29udGFpbmVkCisKK3N5biByZWdpb24gIGF1dG9tYWtlTWFrZURTdHJpbmcgc3RhcnQ9KyIrICBza2lwPStcXCIrICBlbmQ9KyIrICBjb250YWlucz1tYWtlSWRlbnQsYXV0b21ha2VTdWJzdGl0dXRpb24KK3N5biByZWdpb24gIGF1dG9tYWtlTWFrZVNTdHJpbmcgc3RhcnQ9KycrICBza2lwPStcXCcrICBlbmQ9KycrICBjb250YWlucz1tYWtlSWRlbnQsYXV0b21ha2VTdWJzdGl0dXRpb24KK3N5biByZWdpb24gIGF1dG9tYWtlTWFrZUJTdHJpbmcgc3RhcnQ9K2ArICBza2lwPStcXGArICBlbmQ9K2ArICBjb250YWlucz1tYWtlSWRlbnQsbWFrZVNTdHJpbmcsbWFrZURTdHJpbmcsbWFrZU5leHRMaW5lLGF1dG9tYWtlU3Vic3RpdHV0aW9uCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2F1dG9tYWtlX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2F1dG9tYWtlX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGF1dG9tYWtlUHJpbWFyeSAgICAgU3RhdGVtZW50CisgIEhpTGluayBhdXRvbWFrZVNlY29uZGFyeSAgIFR5cGUKKyAgSGlMaW5rIGF1dG9tYWtlRXh0cmEgICAgICAgU3BlY2lhbAorICBIaUxpbmsgYXV0b21ha2VPcHRpb25zICAgICBTcGVjaWFsCisgIEhpTGluayBhdXRvbWFrZUNsZWFuICAgICAgIFNwZWNpYWwKKyAgSGlMaW5rIGF1dG9tYWtlU3ViZGlycyAgICAgU3RhdGVtZW50CisgIEhpTGluayBhdXRvbWFrZUNvbmRpdGlvbmFsIFByZVByb2MKKyAgSGlMaW5rIGF1dG9tYWtlU3Vic3QgICAgICAgUHJlUHJvYworICBIaUxpbmsgYXV0b21ha2VDb21tZW50MSAgICBtYWtlQ29tbWVudAorICBIaUxpbmsgYXV0b21ha2VDb21tZW50MiAgICBtYWtlQ29tbWVudAorICBIaUxpbmsgYXV0b21ha2VNYWtlRXJyb3IgICBtYWtlRXJyb3IKKyAgSGlMaW5rIGF1dG9tYWtlQmFkU3Vic3QgICAgbWFrZUVycm9yCisgIEhpTGluayBhdXRvbWFrZU1ha2VEU3RyaW5nIG1ha2VEU3RyaW5nCisgIEhpTGluayBhdXRvbWFrZU1ha2VTU3RyaW5nIG1ha2VTU3RyaW5nCisgIEhpTGluayBhdXRvbWFrZU1ha2VCU3RyaW5nIG1ha2VCU3RyaW5nCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImF1dG9tYWtlIgorCisiIHZpOiB0cz04IHN3PTQgc3RzPTQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2F2ZS52aW0gYi9ydW50aW1lL3N5bnRheC9hdmUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMGE5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9hdmUudmltCkBAIC0wLDAgKzEsOTIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIENvcHlyaWdodCBieSBKYW4tT2xpdmVyIFdhZ25lcgorIiBMYW5ndWFnZToJYXZlbnVlCisiIE1haW50YWluZXI6CUphbi1PbGl2ZXIgV2FnbmVyIDxKYW4tT2xpdmVyLldhZ25lckBpbnRldmF0aW9uLmRlPgorIiBMYXN0IGNoYW5nZToJMjAwMSBNYXkgMTAKKworIiBBdmVudWUgaXMgdGhlIEFyY1ZpZXcgYnVpbHQtaW4gbGFuZ3VhZ2UuIEFyY1ZpZXcgaXMKKyIgYSBkZXNrdG9wIEdJUyBieSBFU1JJLiBUaG91Z2ggaXQgaXMgYSBidWlsdC1pbiBsYW5ndWFnZQorIiBhbmQgYSBidWlsdC1pbiBlZGl0b3IgaXMgcHJvdmlkZWQsIHRoZSB1c2Ugb2YgVklNIGluY3JlYXNlcworIiBkZXZlbG9wbWVudCBzcGVlZC4KKyIgSSB1c2Ugc29tZSB0ZWNobm9sb2dpZXMgdG8gYXV0b21hdGljYWxseSBsb2FkIGF2ZW51ZSBzY3JpcHRzCisiIGludG8gQXJjVmlldy4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEF2ZW51ZSBpcyBlbnRpcmVseSBjYXNlLWluc2Vuc2l0aXZlLgorc3luIGNhc2UgaWdub3JlCisKKyIgVGhlIGtleXdvcmRzCisKK3N5biBrZXl3b3JkIGF2ZVN0YXRlbWVudAlpZiB0aGVuIGVsc2VpZiBlbHNlIGVuZCBicmVhayBleGl0IHJldHVybgorc3luIGtleXdvcmQgYXZlU3RhdGVtZW50CWZvciBlYWNoIGluIGNvbnRpbnVlIHdoaWxlCisKKyIgU3RyaW5nCisKK3N5biByZWdpb24gYXZlU3RyaW5nCQlzdGFydD0rIisgZW5kPSsiKworCisiIEludGVnZXIgbnVtYmVyCitzeW4gbWF0Y2ggIGF2ZU51bWJlcgkJIlsrLV1cPVw8WzAtOV1cK1w+IgorCisiIE9wZXJhdG9yCisKK3N5biBrZXl3b3JkIGF2ZU9wZXJhdG9yCQlvciBhbmQgbWF4IG1pbiB4b3IgbW9kIGJ5CisiICdub3QnIGlzIGEga2luZCBvZiBhIHByb2JsZW06IEl0cyBhbiBPcGVyYXRvciBhcyB3ZWxsIGFzIGEgbWV0aG9kCisiICdub3QnIGlzIG9ubHkgbWFya2VkIGFzIGFuIE9wZXJhdG9yIGlmIG5vdCBhcHBsaWVkIGFzIG1ldGhvZAorc3luIG1hdGNoIGF2ZU9wZXJhdG9yCQkiW15cLl1ub3RbXmEtekEtWl0iCisKKyIgVmFyaWFibGVzCisKK3N5biBrZXl3b3JkIGF2ZUZpeFZhcmlhYmxlcwlhdiBuaWwgc2VsZiBmYWxzZSB0cnVlIG5sIHRhYiBjciB0YWIKK3N5biBtYXRjaCBnbG9iYWxWYXJpYWJsZXMJIl9bYS16QS1aXVthLXpBLVowLTldKiIKK3N5biBtYXRjaCBhdmVWYXJpYWJsZXMJCSJbYS16QS1aXVthLXpBLVowLTlfXSoiCitzeW4gbWF0Y2ggYXZlQ29uc3QJCSIjW0EtWl1bQS1aX10rIgorCisiIENvbW1lbnRzCisKK3N5biBtYXRjaCBhdmVDb21tZW50CSInLioiCisKKyIgVHlwaWNhbCBUeXBvcworCisiIGZvciBDIHByb2dyYW1tZXJzOgorc3luIG1hdGNoIGF2ZVR5cG9zCSI9PSIKK3N5biBtYXRjaCBhdmVUeXBvcwkiIT0iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nK3lldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2F2ZV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisJbGV0IGRpZF9hdmVfc3luX2luaXRzID0gMQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKwljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgYXZlU3RhdGVtZW50CQlTdGF0ZW1lbnQKKworICBIaUxpbmsgYXZlU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIGF2ZU51bWJlcgkJTnVtYmVyCisKKyAgSGlMaW5rIGF2ZUZpeFZhcmlhYmxlcwlTcGVjaWFsCisgIEhpTGluayBhdmVWYXJpYWJsZXMJCUlkZW50aWZpZXIKKyAgSGlMaW5rIGdsb2JhbFZhcmlhYmxlcwlTcGVjaWFsCisgIEhpTGluayBhdmVDb25zdAkJU3BlY2lhbAorCisgIEhpTGluayBhdmVDbGFzc01ldGhvZHMJRnVuY3Rpb24KKworICBIaUxpbmsgYXZlT3BlcmF0b3IJCU9wZXJhdG9yCisgIEhpTGluayBhdmVDb21tZW50CQlDb21tZW50CisKKyAgSGlMaW5rIGF2ZVR5cG9zCQlFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJhdmUiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9hd2sudmltIGIvcnVudGltZS9zeW50YXgvYXdrLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGE2ODlkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYXdrLnZpbQpAQCAtMCwwICsxLDIxNiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CWF3aywgbmF3aywgZ2F3aywgbWF3aworIiBNYWludGFpbmVyOglBbnRvbmlvIENvbG9tYm8gPGFudG9uaW8uY29sb21ib0BqcmMuaXQ+CisiIExhc3QgQ2hhbmdlOgkyMDAyIEp1biAyMworCisiIEFXSyAgcmVmLiAgaXM6IEFsZnJlZCBWLiBBaG8sIEJyaWFuIFcuIEtlcm5pZ2hhbiwgUGV0ZXIgSi4gV2VpbmJlcmdlcgorIiBUaGUgQVdLIFByb2dyYW1taW5nIExhbmd1YWdlLCBBZGRpc29uLVdlc2xleSwgMTk4OAorCisiIEdBV0sgcmVmLiBpczogQXJub2xkIEQuIFJvYmJpbnMKKyIgRWZmZWN0aXZlIEFXSyBQcm9ncmFtbWluZywgVGhpcmQgRWRpdGlvbiwgTydSZWlsbHksIDIwMDEKKworIiBNQVdLIGlzIGEgIm5ldyBhd2siIG1lYW5pbmcgaXQgaW1wbGVtZW50cyBBV0sgcmVmLgorIiBtYXdrIGNvbmZvcm1zIHRvIHRoZSBQb3NpeCAxMDAzLjIgKGRyYWZ0IDExLjMpCisiIGRlZmluaXRpb24gb2YgdGhlIEFXSyBsYW5ndWFnZSB3aGljaCBjb250YWlucyBhIGZldyBmZWF0dXJlcworIiBub3QgZGVzY3JpYmVkIGluIHRoZSBBV0sgYm9vaywgYW5kIG1hd2sgcHJvdmlkZXMgYSBzbWFsbCBudW1iZXIgb2YgZXh0ZW5zaW9ucy4KKworIiBUT0RPOgorIiBEaWcgaW50byB0aGUgY29tbWVudGVkIG91dCBzeW50YXggZXhwcmVzc2lvbnMgYmVsb3cuCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBBIGJ1bmNoIG9mIHVzZWZ1bCBBd2sga2V5d29yZHMKKyIgQVdLICByZWYuIHAuIDE4OAorc3luIGtleXdvcmQgYXdrU3RhdGVtZW50CWJyZWFrIGNvbnRpbnVlIGRlbGV0ZSBleGl0CitzeW4ga2V5d29yZCBhd2tTdGF0ZW1lbnQJZnVuY3Rpb24gZ2V0bGluZSBuZXh0CitzeW4ga2V5d29yZCBhd2tTdGF0ZW1lbnQJcHJpbnQgcHJpbnRmIHJldHVybgorIiBHQVdLIHJlZi4gcC4gMTE3CitzeW4ga2V5d29yZCBhd2tTdGF0ZW1lbnQJbmV4dGZpbGUKKyIgQVdLICByZWYuIHAuIDQyLCBHQVdLIHJlZi4gcC4gMTQyLTE2Ngorc3luIGtleXdvcmQgYXdrRnVuY3Rpb24JYXRhbjIgY2xvc2UgY29zIGV4cCBmZmx1c2ggaW50IGxvZyByYW5kIHNpbiBzcXJ0IHNyYW5kCitzeW4ga2V5d29yZCBhd2tGdW5jdGlvbglnc3ViIGluZGV4IGxlbmd0aCBtYXRjaCBzcGxpdCBzcHJpbnRmIHN1Ygorc3luIGtleXdvcmQgYXdrRnVuY3Rpb24Jc3Vic3RyIHN5c3RlbQorIiBHQVdLIHJlZi4gcC4gMTQyLTE2Ngorc3luIGtleXdvcmQgYXdrRnVuY3Rpb24JYXNvcnQgZ2Vuc3ViIG1rdGltZSBzdHJmdGltZSBzdHJ0b251bSBzeXN0aW1lCitzeW4ga2V5d29yZCBhd2tGdW5jdGlvbgl0b2xvd2VyIHRvdXBwZXIKK3N5biBrZXl3b3JkIGF3a0Z1bmN0aW9uCWFuZCBvciB4b3IgY29tcGwgbHNoaWZ0IHJzaGlmdAorc3luIGtleXdvcmQgYXdrRnVuY3Rpb24JZGNnZXR0ZXh0IGJpbmR0ZXh0ZG9tYWluCisKK3N5biBrZXl3b3JkIGF3a0NvbmRpdGlvbmFsCWlmIGVsc2UKK3N5biBrZXl3b3JkIGF3a1JlcGVhdAl3aGlsZSBmb3IKKworc3luIGtleXdvcmQgYXdrVG9kbwkJY29udGFpbmVkIFRPRE8KKworc3luIGtleXdvcmQgYXdrUGF0dGVybnMJQkVHSU4gRU5ECisiIEFXSyAgcmVmLiBwLiAzNgorc3luIGtleXdvcmQgYXdrVmFyaWFibGVzCUFSR0MgQVJHViBGSUxFTkFNRSBGTlIgRlMgTkYgTlIKK3N5biBrZXl3b3JkIGF3a1ZhcmlhYmxlcwlPRk1UIE9GUyBPUlMgUkxFTkdUSCBSUyBSU1RBUlQgU1VCU0VQCisiIEdBV0sgcmVmLiBwLiAxMjAtMTI2CitzeW4ga2V5d29yZCBhd2tWYXJpYWJsZXMJQVJHSU5EIEJJTk1PREUgQ09OVkZNVCBFTlZJUk9OIEVSUk5PCitzeW4ga2V5d29yZCBhd2tWYXJpYWJsZXMJRklFTERXSURUSFMgSUdOT1JFQ0FTRSBMSU5UIFBST0NJTkZPCitzeW4ga2V5d29yZCBhd2tWYXJpYWJsZXMJUlQgUkxFTkdUSCBURVhURE9NQUlOCisKK3N5biBrZXl3b3JkIGF3a1JlcGVhdAlkbworCisiIE9jdGFsIGZvcm1hdCBjaGFyYWN0ZXIuCitzeW4gbWF0Y2ggICBhd2tTcGVjaWFsQ2hhcmFjdGVyIGRpc3BsYXkgY29udGFpbmVkICJcXFswLTddXHsxLDNcfSIKK3N5biBrZXl3b3JkIGF3a1N0YXRlbWVudAlmdW5jIG5leHRmaWxlCisiIEhleCAgIGZvcm1hdCBjaGFyYWN0ZXIuCitzeW4gbWF0Y2ggICBhd2tTcGVjaWFsQ2hhcmFjdGVyIGRpc3BsYXkgY29udGFpbmVkICJcXHhbMC05QS1GYS1mXVwrIgorCitzeW4gbWF0Y2ggICBhd2tGaWVsZFZhcnMJIlwkXGRcKyIKKworImNhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMKK3N5biByZWdpb24JYXdrUGFyZW4JdHJhbnNwYXJlbnQgc3RhcnQ9IigiIGVuZD0iKSIgY29udGFpbnM9QUxMQlVULGF3a1BhcmVuRXJyb3IsYXdrU3BlY2lhbENoYXJhY3Rlcixhd2tBcnJheUVsZW1lbnQsYXdrQXJyYXlBcnJheSxhd2tUb2RvLGF3a1JlZ0V4cCxhd2tCcmt0UmVnRXhwLGF3a0JyYWNrZXRzLGF3a0NoYXJDbGFzcworc3luIG1hdGNoCWF3a1BhcmVuRXJyb3IJZGlzcGxheSAiKSIKK3N5biBtYXRjaAlhd2tJblBhcmVuCWRpc3BsYXkgY29udGFpbmVkICJbe31dIgorCisiIDY0IGxpbmVzIGZvciBjb21wbGV4ICYmJ3MsIGFuZCB8fCdzIGluIGEgYmlnICJpZiIKK3N5biBzeW5jIGNjb21tZW50IGF3a1BhcmVuIG1heGxpbmVzPTY0CisKKyIgU2VhcmNoIHN0cmluZ3MgJiBSZWd1bGFyIEV4cHJlc3Npb25zIHRoZXJlaW4uCitzeW4gcmVnaW9uICBhd2tTZWFyY2gJb25lbGluZSBzdGFydD0iXlsgXHRdKi8ibXM9ZSBzdGFydD0iXCgsXHwhXD1cflwpWyBcdF0qLyJtcz1lIHNraXA9IlxcXFxcfFxcLyIgZW5kPSIvIiBjb250YWlucz1hd2tCcmFja2V0cyxhd2tSZWdFeHAsYXdrU3BlY2lhbENoYXJhY3Rlcgorc3luIHJlZ2lvbiAgYXdrQnJhY2tldHMJY29udGFpbmVkIHN0YXJ0PSJcW1xeXF1cPSJtcz1zKzIgc3RhcnQ9IlxbW15cXl0ibXM9cysxIGVuZD0iXF0ibWU9ZS0xIGNvbnRhaW5zPWF3a0Jya3RSZWdFeHAsYXdrQ2hhckNsYXNzCitzeW4gcmVnaW9uICBhd2tTZWFyY2gJb25lbGluZSBzdGFydD0iWyBcdF0qLyJocz1lIHNraXA9IlxcXFxcfFxcLyIgZW5kPSIvIiBjb250YWlucz1hd2tCcmFja2V0cyxhd2tSZWdFeHAsYXdrU3BlY2lhbENoYXJhY3RlcgorCitzeW4gbWF0Y2ggICBhd2tDaGFyQ2xhc3MJY29udGFpbmVkICJcWzpbXjpcXV0qOlxdIgorc3luIG1hdGNoICAgYXdrQnJrdFJlZ0V4cAljb250YWluZWQgIlxcLlx8LlwtW15dXSIKK3N5biBtYXRjaCAgIGF3a1JlZ0V4cAljb250YWluZWQgIi9cXiJtcz1zKzEKK3N5biBtYXRjaCAgIGF3a1JlZ0V4cAljb250YWluZWQgIlwkLyJtZT1lLTEKK3N5biBtYXRjaCAgIGF3a1JlZ0V4cAljb250YWluZWQgIls/Lip7fXwrXSIKKworIiBTdHJpbmcgYW5kIENoYXJhY3RlciBjb25zdGFudHMKKyIgSGlnaGxpZ2h0IHNwZWNpYWwgY2hhcmFjdGVycyAodGhvc2Ugd2hpY2ggaGF2ZSBhIGJhY2tzbGFzaCkgZGlmZmVyZW50bHkKK3N5biByZWdpb24gIGF3a1N0cmluZwlzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisgIGNvbnRhaW5zPWF3a1NwZWNpYWxDaGFyYWN0ZXIsYXdrU3BlY2lhbFByaW50Zgorc3luIG1hdGNoICAgYXdrU3BlY2lhbENoYXJhY3RlciBjb250YWluZWQgIlxcLiIKKworIiBTb21lIG9mIHRoZXNlIGNvbWJpbmF0aW9ucyBtYXkgc2VlbSB3ZWlyZCwgYnV0IHRoZXkgd29yay4KK3N5biBtYXRjaCAgIGF3a1NwZWNpYWxQcmludGYJY29udGFpbmVkICIlWy0rICNdKlxkKlwuXD1cZCpbY2RlZmdpb3N1eEVHWCVdIgorCisiIE51bWJlcnMsIGFsbG93aW5nIHNpZ25zIChib3RoIC0sIGFuZCArKQorIiBJbnRlZ2VyIG51bWJlci4KK3N5biBtYXRjaCAgYXdrTnVtYmVyCQlkaXNwbGF5ICJbKy1dXD1cPFxkXCtcPiIKKyIgRmxvYXRpbmcgcG9pbnQgbnVtYmVyLgorc3luIG1hdGNoICBhd2tGbG9hdAkJZGlzcGxheSAiWystXVw9XDxcZFwrXC5cZCtcPiIKKyIgRmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90Lgorc3luIG1hdGNoICBhd2tGbG9hdAkJZGlzcGxheSAiWystXVw9XDwuXGQrXD4iCitzeW4gY2FzZSBpZ25vcmUKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoICBhd2tGbG9hdAlkaXNwbGF5ICJcPFxkXCtcLlxkKlwoZVstK11cPVxkXCtcKVw9XD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoICBhd2tGbG9hdAlkaXNwbGF5ICJcLlxkXCtcKGVbLStdXD1cZFwrXClcPVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aG91dCBkb3QsIHdpdGggZXhwb25lbnQKK3N5biBtYXRjaCAgYXdrRmxvYXQJZGlzcGxheSAiXDxcZFwrZVstK11cPVxkXCtcPiIKK3N5biBjYXNlIG1hdGNoCisKKyJzeW4gbWF0Y2ggIGF3a0lkZW50aWZpZXIJIlw8W2EtekEtWl9dW2EtekEtWjAtOV9dKlw+IgorCisiIEFyaXRobWV0aWMgb3BlcmF0b3JzOiArLCBhbmQgLSB0YWtlIGNhcmUgb2YgKyssIGFuZCAtLQorInN5biBtYXRjaCAgIGF3a09wZXJhdG9yCSIrXHwtXHxcKlx8L1x8JVx8PSIKKyJzeW4gbWF0Y2ggICBhd2tPcGVyYXRvcgkiKz1cfC09XHxcKj1cfC89XHwlPSIKKyJzeW4gbWF0Y2ggICBhd2tPcGVyYXRvcgkiXlx8Xj0iCisKKyIgQ29tcGFyaXNvbiBleHByZXNzaW9ucy4KKyJzeW4gbWF0Y2ggICBhd2tFeHByZXNzaW9uCSI9PVx8Pj1cfD0+XHw8PVx8PTxcfFwhPSIKKyJzeW4gbWF0Y2ggICBhd2tFeHByZXNzaW9uCSJcflx8XCFcfiIKKyJzeW4gbWF0Y2ggICBhd2tFeHByZXNzaW9uCSI/XHw6IgorInN5biBrZXl3b3JkIGF3a0V4cHJlc3Npb24JaW4KKworIiBCb29sZWFuIExvZ2ljIChPUiwgQU5ELCBOT1QpCisic3luIG1hdGNoICBhd2tCb29sTG9naWMJInx8XHwmJlx8XCEiCisKKyIgVGhpcyBpcyBvdmVycmlkZGVuIGJ5IGxlc3MtdGhhbiAmIGdyZWF0ZXItdGhhbi4KKyIgUHV0IHRoaXMgYWJvdmUgdGhvc2UgdG8gb3ZlcnJpZGUgdGhlbS4KKyIgUHV0IHRoaXMgaW4gYSAnbWF0Y2ggIlw8cHJpbnRmXD1cPi4qO1w9IicgdG8gbWFrZSBpdCBub3Qgb3ZlcnJpZGUKKyIgbGVzcy9ncmVhdGVyIHRoYW4gKG1vc3Qgb2YgdGhlIHRpbWUpLCBidXQgaXQgd29uJ3Qgd29yayB5ZXQgYmVjYXVzZQorIiBrZXl3b3JkcyBhbGx3YXlzIGhhdmUgcHJlY2VkZW5jZSBvdmVyIG1hdGNoICYgcmVnaW9uLgorIiBGaWxlIEkvTzogKHByaW50IGZvbywgYmFyID4gImZpbGVuYW1lIikgJiBmb3IgbmF3ayAoZ2V0bGluZSA8ICJmaWxlbmFtZSIpCisic3luIG1hdGNoICBhd2tGaWxlSU8JCWNvbnRhaW5lZCAiPiIKKyJzeW4gbWF0Y2ggIGF3a0ZpbGVJTwkJY29udGFpbmVkICI8IgorCisiIEV4cHJlc3Npb24gc2VwYXJhdG9yczogJzsnIGFuZCAnLCcKK3N5biBtYXRjaCAgYXdrU2VtaWNvbG9uCSI7Igorc3luIG1hdGNoICBhd2tDb21tYQkJIiwiCisKK3N5biBtYXRjaCAgYXdrQ29tbWVudAkiIy4qIiBjb250YWlucz1hd2tUb2RvCisKK3N5biBtYXRjaCAgYXdrTGluZVNraXAJIlxcJCIKKworIiBIaWdobGlnaHQgYXJyYXkgZWxlbWVudCdzIChyZWN1cnNpdmUgYXJyYXlzIGFsbG93ZWQpLgorIiBLZWVwcyBuZXN0ZWQgYXJyYXkgbmFtZXMnIHNlcGFyYXRlIGZyb20gbm9ybWFsIGFycmF5IGVsZW1lbnRzLgorIiBLZWVwcyBudW1iZXJzIHNlcGFyYXRlIGZyb20gbm9ybWFsIGFycmF5IGVsZW1lbnRzICh2YXJpYWJsZXMpLgorc3luIG1hdGNoICBhd2tBcnJheUFycmF5CWNvbnRhaW5lZCAiW15dWywgXHRdXCtcWyJtZT1lLTEKK3N5biBtYXRjaCAgYXdrQXJyYXlFbGVtZW50ICAgICAgY29udGFpbmVkICJbXl1bLCBcdF1cKyIKK3N5biByZWdpb24gYXdrQXJyYXkJCXRyYW5zcGFyZW50IHN0YXJ0PSJcWyIgZW5kPSJcXSIgY29udGFpbnM9YXdrQXJyYXksYXdrQXJyYXlFbGVtZW50LGF3a0FycmF5QXJyYXksYXdrTnVtYmVyLGF3a0Zsb2F0CisKKyIgMTAgc2hvdWxkIGJlIGVub3VnaC4KKyIgKGZvciB0aGUgZmV3IGluc3RhbmNlcyB3aGVyZSBpdCB3b3VsZCBiZSBtb3JlIHRoYW4gIm9uZWxpbmUiKQorc3luIHN5bmMgY2NvbW1lbnQgYXdrQXJyYXkgbWF4bGluZXM9MTAKKworIiBkZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGxpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYXdrX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2F3a19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBhd2tDb25kaXRpb25hbAkJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGF3a0Z1bmN0aW9uCQlGdW5jdGlvbgorICBIaUxpbmsgYXdrUmVwZWF0CQlSZXBlYXQKKyAgSGlMaW5rIGF3a1N0YXRlbWVudAkJU3RhdGVtZW50CisKKyAgSGlMaW5rIGF3a1N0cmluZwkJU3RyaW5nCisgIEhpTGluayBhd2tTcGVjaWFsUHJpbnRmCVNwZWNpYWwKKyAgSGlMaW5rIGF3a1NwZWNpYWxDaGFyYWN0ZXIJU3BlY2lhbAorCisgIEhpTGluayBhd2tTZWFyY2gJCVN0cmluZworICBIaUxpbmsgYXdrQnJhY2tldHMJCWF3a1JlZ0V4cAorICBIaUxpbmsgYXdrQnJrdFJlZ0V4cAkJYXdrTmVzdFJlZ0V4cAorICBIaUxpbmsgYXdrQ2hhckNsYXNzCQlhd2tOZXN0UmVnRXhwCisgIEhpTGluayBhd2tOZXN0UmVnRXhwCQlLZXl3b3JkCisgIEhpTGluayBhd2tSZWdFeHAJCVNwZWNpYWwKKworICBIaUxpbmsgYXdrTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIGF3a0Zsb2F0CQlGbG9hdAorCisgIEhpTGluayBhd2tGaWxlSU8JCVNwZWNpYWwKKyAgIkhpTGluayBhd2tPcGVyYXRvcgkJU3BlY2lhbAorICAiSGlMaW5rIGF3a0V4cHJlc3Npb24JCVNwZWNpYWwKKyAgSGlMaW5rIGF3a0Jvb2xMb2dpYwkJU3BlY2lhbAorCisgIEhpTGluayBhd2tQYXR0ZXJucwkJU3BlY2lhbAorICBIaUxpbmsgYXdrVmFyaWFibGVzCQlTcGVjaWFsCisgIEhpTGluayBhd2tGaWVsZFZhcnMJCVNwZWNpYWwKKworICBIaUxpbmsgYXdrTGluZVNraXAJCVNwZWNpYWwKKyAgSGlMaW5rIGF3a1NlbWljb2xvbgkJU3BlY2lhbAorICBIaUxpbmsgYXdrQ29tbWEJCVNwZWNpYWwKKyAgIkhpTGluayBhd2tJZGVudGlmaWVyCQlJZGVudGlmaWVyCisKKyAgSGlMaW5rIGF3a0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGF3a1RvZG8JCVRvZG8KKworICAiIENoYW5nZSB0aGlzIGlmIHlvdSB3YW50IG5lc3RlZCBhcnJheSBuYW1lcyB0byBiZSBoaWdobGlnaHRlZC4KKyAgSGlMaW5rIGF3a0FycmF5QXJyYXkJCWF3a0FycmF5CisgIEhpTGluayBhd2tBcnJheUVsZW1lbnQJU3BlY2lhbAorCisgIEhpTGluayBhd2tQYXJlbkVycm9yCQlhd2tFcnJvcgorICBIaUxpbmsgYXdrSW5QYXJlbgkJYXdrRXJyb3IKKyAgSGlMaW5rIGF3a0Vycm9yCQlFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJhd2siCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9heWFjYy52aW0gYi9ydW50aW1lL3N5bnRheC9heWFjYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU5MWUyZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2F5YWNjLnZpbQpAQCAtMCwwICsxLDg2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJQVlhY2MKKyIgTWFpbnRhaW5lcjoJTWF0aGlldSBDbGFiYXV0IDxtYXRoaWV1LmNsYWJhdXRAZnJlZS5mcj4KKyIgTGFzdENoYW5nZToJMDIgTWF5IDIwMDEKKyIgT3JpZ2luYWw6CVlhY2MsIG1haW50YWluZWQgYnkgRHIuIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLgorIiBDb21tZW50OgkgICAgIFJlcGxhY2VkIHNvdXJjaW5nIGMudmltIGZpbGUgYnkgYWRhLnZpbSBhbmQgcmVuYW1lIHlhY2MqCisiCQlpbiBheWFjYyoKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgICBmaW5pc2gKK2VuZGlmCisKKyIgUmVhZCB0aGUgQWRhIHN5bnRheCB0byBzdGFydCB3aXRoCitpZiB2ZXJzaW9uIDwgNjAwCisgICBzbyA8c2ZpbGU+OnA6aC9hZGEudmltCitlbHNlCisgICBydW50aW1lISBzeW50YXgvYWRhLnZpbQorICAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworIiBDbHVzdGVycworc3luIGNsdXN0ZXIJYXlhY2NBY3Rpb25Hcm91cAljb250YWlucz1heWFjY0RlbGltLGNJblBhcmVuLGNUb2RvLGNJbmNsdWRlZCxheWFjY0RlbGltLGF5YWNjQ3VybHlFcnJvcixheWFjY1VuaW9uQ3VybHksYXlhY2NVbmlvbixjVXNlckxhYmVsLGNPY3RhbFplcm8sY0NwcE91dDIsY0NwcFNraXAsY0VyckluQnJhY2tldCxjRXJySW5QYXJlbixjT2N0YWxFcnJvcgorc3luIGNsdXN0ZXIJYXlhY2NVbmlvbkdyb3VwCWNvbnRhaW5zPWF5YWNjS2V5LGNDb21tZW50LGF5YWNjQ3VybHksY1R5cGUsY1N0cnVjdHVyZSxjU3RvcmFnZUNsYXNzLGF5YWNjVW5pb25DdXJseQorCisiIFlhY2Mgc3R1ZmYKK3N5biBtYXRjaAlheWFjY0RlbGltCSJeWyBcdF0qWzp8O10iCitzeW4gbWF0Y2gJYXlhY2NPcGVyCSJAXGRcKyIKKworc3luIG1hdGNoCWF5YWNjS2V5CSJeWyBcdF0qJVwodG9rZW5cfHR5cGVcfGxlZnRcfHJpZ2h0XHxzdGFydFx8aWRlbnRcKVw+Igorc3luIG1hdGNoCWF5YWNjS2V5CSJbIFx0XSVcKHByZWNcfGV4cGVjdFx8bm9uYXNzb2NcKVw+Igorc3luIG1hdGNoCWF5YWNjS2V5CSJcJFwoPFthLXpBLVpfXVthLXpBLVpfMC05XSo+XClcPVtcJDAtOV1cKyIKK3N5biBrZXl3b3JkCWF5YWNjS2V5QWN0bgl5eWVycm9rIHl5Y2xlYXJpbgorCitzeW4gbWF0Y2gJYXlhY2NVbmlvblN0YXJ0CSJeJXVuaW9uIglza2lwd2hpdGUgc2tpcG5sIG5leHRncm91cD1heWFjY1VuaW9uCitzeW4gcmVnaW9uCWF5YWNjVW5pb24JY29udGFpbmVkIG1hdGNoZ3JvdXA9YXlhY2NDdXJseSBzdGFydD0ieyIgbWF0Y2hncm91cD1heWFjY0N1cmx5IGVuZD0ifSIJY29udGFpbnM9QGF5YWNjVW5pb25Hcm91cAorc3luIHJlZ2lvbglheWFjY1VuaW9uQ3VybHkJY29udGFpbmVkIG1hdGNoZ3JvdXA9YXlhY2NDdXJseSBzdGFydD0ieyIgbWF0Y2hncm91cD1heWFjY0N1cmx5IGVuZD0ifSIgY29udGFpbnM9QGF5YWNjVW5pb25Hcm91cAorc3luIG1hdGNoCWF5YWNjQnJrdAljb250YWluZWQgIls8Pl0iCitzeW4gbWF0Y2gJYXlhY2NUeXBlCSI8W2EtekEtWl9dW2EtekEtWjAtOV9dKj4iCWNvbnRhaW5zPWF5YWNjQnJrdAorc3luIG1hdGNoCWF5YWNjRGVmaW5pdGlvbgkiXltBLVphLXpdW0EtWmEtejAtOV9dKlsgXHRdKjoiCisKKyIgc3BlY2lhbCBZYWNjIHNlcGFyYXRvcnMKK3N5biBtYXRjaAlheWFjY1NlY3Rpb25TZXAJIl5bIFx0XSolJSIKK3N5biBtYXRjaAlheWFjY1NlcAkiXlsgXHRdKiV7Igorc3luIG1hdGNoCWF5YWNjU2VwCSJeWyBcdF0qJX0iCisKKyIgSSdkIHJlYWxseSBsaWtlIHRvIGhpZ2hsaWdodCBqdXN0IHRoZSBvdXRlciB7fS4gIEFueSBzdWdnZXN0aW9ucz8/Pworc3luIG1hdGNoCWF5YWNjQ3VybHlFcnJvcgkiW3t9XSIKK3N5biByZWdpb24JYXlhY2NBY3Rpb24JbWF0Y2hncm91cD1heWFjY0N1cmx5IHN0YXJ0PSJ7IiBlbmQ9In0iIGNvbnRhaW5zPUFMTEJVVCxAYXlhY2NBY3Rpb25Hcm91cAorCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYXlhY2Nfc3ludGF4X2luaXRzIikKKyAgIGlmIHZlcnNpb24gPCA1MDgKKyAgICAgIGxldCBkaWRfYXlhY2Nfc3ludGF4X2luaXRzID0gMQorICAgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgIGVsc2UKKyAgICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgZW5kaWYKKworICAiIEludGVybmFsIGF5YWNjIGhpZ2hsaWdodGluZyBsaW5rcworICBIaUxpbmsgYXlhY2NCcmt0CWF5YWNjU3RtdAorICBIaUxpbmsgYXlhY2NLZXkJYXlhY2NTdG10CisgIEhpTGluayBheWFjY09wZXIJYXlhY2NTdG10CisgIEhpTGluayBheWFjY1VuaW9uU3RhcnQJYXlhY2NLZXkKKworICAiIEV4dGVybmFsIGF5YWNjIGhpZ2hsaWdodGluZyBsaW5rcworICBIaUxpbmsgYXlhY2NDdXJseQlEZWxpbWl0ZXIKKyAgSGlMaW5rIGF5YWNjQ3VybHlFcnJvcglFcnJvcgorICBIaUxpbmsgYXlhY2NEZWZpbml0aW9uCUZ1bmN0aW9uCisgIEhpTGluayBheWFjY0RlbGltCUZ1bmN0aW9uCisgIEhpTGluayBheWFjY0tleUFjdG4JU3BlY2lhbAorICBIaUxpbmsgYXlhY2NTZWN0aW9uU2VwCVRvZG8KKyAgSGlMaW5rIGF5YWNjU2VwCURlbGltaXRlcgorICBIaUxpbmsgYXlhY2NTdG10CVN0YXRlbWVudAorICBIaUxpbmsgYXlhY2NUeXBlCVR5cGUKKworICAiIHNpbmNlIEJyYW0gZG9lc24ndCBsaWtlIG15IERlbGltaXRlciA6fAorICBIaUxpbmsgRGVsaW1pdGVyCVR5cGUKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImF5YWNjIgorCisiIHZpbTogdHM9MTUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2IudmltIGIvcnVudGltZS9zeW50YXgvYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk3NjY5MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2IudmltCkBAIC0wLDAgKzEsMTQyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJQiAoQSBGb3JtYWwgTWV0aG9kIHdpdGggcmVmaW5lbWVudCBhbmQgbWF0aGVtYXRpY2FsIHByb29mKQorIiBNYWludGFpbmVyOglNYXRoaWV1IENsYWJhdXQgPG1hdGhpZXUuY2xhYmF1dEBmcmVlLmZyPgorIiBMYXN0Q2hhbmdlOgkyNSBBcHIgMjAwMQorCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgZmluaXNoCitlbmRpZgorCisKKyIgQSBidW5jaCBvZiB1c2VmdWwgQiBrZXl3b3Jkcworc3luIGtleXdvcmQgYlN0YXRlbWVudAlNQUNISU5FIFNFRVMgT1BFUkFUSU9OUyBJTkNMVURFUyBERUZJTklUSU9OUyBDT05TVFJBSU5UUyBDT05TVEFOVFMgVkFSSUFCTEVTIENPTkNSRVRFX0NPTlNUQU5UUyBDT05DUkVURV9WQVJJQUJMRVMgQUJTVFJBQ1RfQ09OU1RBTlRTIEFCU1RSQUNUX1ZBUklBQkxFUyBISURERU5fQ09OU1RBTlRTIEhJRERFTl9WQVJJQUJMRVMgQVNTRVJUIEFTU0VSVElPTlMgIEVYVEVORFMgSU1QTEVNRU5UQVRJT04gUkVGSU5FTUVOVCBJTVBPUlRTIFVTRVMgSU5JVElBTElTQVRJT04gSU5WQVJJQU5UIFBST01PVEVTIFBST1BFUlRJRVMgUkVGSU5FUyBTRVRTIFZBTFVFUyBWQVJJQU5UIFZJU0lCTEVfQ09OU1RBTlRTIFZJU0lCTEVfVkFSSUFCTEVTIFRIRU9SWQorc3luIGtleXdvcmQgYkxhYmVsCQlDQVNFIElOIEVJVEhFUiBPUiBDSE9JQ0UgRE8gT0YKK3N5biBrZXl3b3JkIGJDb25kaXRpb25hbAlJRiBFTFNFIFNFTEVDVCBFTFNJRiBUSEVOIFdIRU4KK3N5biBrZXl3b3JkIGJSZXBlYXQJCVdISUxFIEZPUgorc3luIGtleXdvcmQgYk9wcwkJYm9vbCBjYXJkIGNvbmMgY2xvc3VyZSBjbG9zdXJlMSBkb20gZmlyc3QgZm5jIGZyb250IG5vdCBvciBpZCBpbnRlciBpc2VxIGlzZXExIGl0ZXJhdGUgbGFzdCBtYXggbWluIG1vZCBwZXJtIHByZWQgcHJqMSBwcmoyIHJhbiByZWwgcmV2IHNlcSBzZXExIHNpemUgc2tpcCBzdWNjIHRhaWwgdW5pb24KK3N5biBrZXl3b3JkIGJLZXl3b3JkcwkJTEVUIFZBUiBCRSBJTiBCRUdJTiBFTkQgIFBPVyBQT1cxIEZJTiBGSU4xICBQUkUgIFNJR01BIFNUUklORyBVTklPTiBJUyBBTlkgV0hFUkUKK3N5biBtYXRjaCBiS2V5d29yZHMJInx8IgorCitzeW4ga2V5d29yZCBiQm9vbGVhbglUUlVFIEZBTFNFIGJmYWxzZSBidHJ1ZQorc3luIGtleXdvcmQgYkNvbnN0YW50CVBJIE1BWElOVCBNSU5JTlQgVXNlcl9QYXNzIFBhdGNoUHJvdmVyIFBhdGNoUHJvdmVySDAgUGF0Y2hQcm92ZXJCMCBGTEFUIEFSSSBERUQgU1VCIFJFUworc3luIGtleXdvcmQgYkd1YXJkIGJpbmh5cCBiYW5kIGJub3QgYmd1YXJkIGJzZWFyY2ggYmZsYXQgYmZyZXNoIGJndWFyZGkgYmdldCBiZ2V0aHlwIGJhcml0aCBiZ2V0cmVzdWx0IGJyZXN1bHQgYmdvYWwgYm1hdGNoIGJtb2RyIGJuZXd2ICBibnVtIGJ0ZXN0IGJwYXR0ZXJuIGJwcmludGYgYndyaXRlZiBic3ViZnJtICBidnJiIGJsdmFyIGJjYWxsIGJhcHBlbmQgYmNsb3NlCisKK3N5biBrZXl3b3JkIGJMb2dpYwlvciBub3QKK3N5biBtYXRjaCBiTG9naWMJIlwmXHw9Plx8PD0+IgorCitzeW4ga2V5d29yZCBjVG9kbyBjb250YWluZWQJVE9ETyBGSVhNRSBYWFgKKworIiBTdHJpbmcgYW5kIENoYXJhY3RlciBjb25zdGFudHMKKyIgSGlnaGxpZ2h0IHNwZWNpYWwgY2hhcmFjdGVycyAodGhvc2Ugd2hpY2ggaGF2ZSBhIGJhY2tzbGFzaCkgZGlmZmVyZW50bHkKK3N5biBtYXRjaCBiU3BlY2lhbCBjb250YWluZWQJIlxcWzAtN11bMC03XVswLTddXD1cfFxcLiIKK3N5biByZWdpb24gYlN0cmluZwkJc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWlucz1iU3BlY2lhbAorc3luIG1hdGNoIGJDaGFyYWN0ZXIJCSInW15cXF0nIgorc3luIG1hdGNoIGJTcGVjaWFsQ2hhcmFjdGVyCSInXFwuJyIKK3N5biBtYXRjaCBiU3BlY2lhbENoYXJhY3RlcgkiJ1xcWzAtN11bMC03XSciCitzeW4gbWF0Y2ggYlNwZWNpYWxDaGFyYWN0ZXIJIidcXFswLTddWzAtN11bMC03XSciCisKKyJjYXRjaCBlcnJvcnMgY2F1c2VkIGJ5IHdyb25nIHBhcmVudGhlc2lzCitzeW4gcmVnaW9uIGJQYXJlbgkJdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULGJQYXJlbkVycm9yLGJJbmNsdWRlZCxiU3BlY2lhbCxiVG9kbyxiVXNlckxhYmVsLGJCaXRGaWVsZAorc3luIG1hdGNoIGJQYXJlbkVycm9yCQkiKSIKK3N5biBtYXRjaCBiSW5QYXJlbiBjb250YWluZWQJIlt7fV0iCisKKyJpbnRlZ2VyIG51bWJlciwgb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdpdGhvdXQgYSBkb3QgYW5kIHdpdGggImYiLgorc3luIGNhc2UgaWdub3JlCitzeW4gbWF0Y2ggYk51bWJlcgkJIlw8WzAtOV1cK1w+IgorInN5biBtYXRjaCBiSWRlbnRpZmllcgkiXDxbYS16X11bYS16MC05X10qXD4iCitzeW4gY2FzZSBtYXRjaAorCitpZiBleGlzdHMoImJfY29tbWVudF9zdHJpbmdzIikKKyAgIiBBIGNvbW1lbnQgY2FuIGNvbnRhaW4gYlN0cmluZywgYkNoYXJhY3RlciBhbmQgYk51bWJlci4KKyAgIiBCdXQgYSAiKi8iIGluc2lkZSBhIGJTdHJpbmcgaW4gYSBiQ29tbWVudCBET0VTIGVuZCB0aGUgY29tbWVudCEgIFNvIHdlCisgICIgbmVlZCB0byB1c2UgYSBzcGVjaWFsIHR5cGUgb2YgYlN0cmluZzogYkNvbW1lbnRTdHJpbmcsIHdoaWNoIGFsc28gZW5kcyBvbgorICAiICIqLyIsIGFuZCBzZWVzIGEgIioiIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBhcyBjb21tZW50IGFnYWluLgorICAiIFVuZm9ydHVuYXRlbHkgdGhpcyBkb2Vzbid0IHZlcnkgd2VsbCB3b3JrIGZvciAvLyB0eXBlIG9mIGNvbW1lbnRzIDotKAorICBzeW50YXggbWF0Y2ggYkNvbW1lbnRTa2lwCWNvbnRhaW5lZCAiXlxzKlwqXCgkXHxcc1wrXCkiCisgIHN5bnRheCByZWdpb24gYkNvbW1lbnRTdHJpbmcJY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgZW5kPStcKi8rbWU9cy0xIGNvbnRhaW5zPWJTcGVjaWFsLGJDb21tZW50U2tpcAorICBzeW50YXggcmVnaW9uIGJDb21tZW50MlN0cmluZwljb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBlbmQ9IiQiIGNvbnRhaW5zPWJTcGVjaWFsCisgIHN5bnRheCByZWdpb24gYkNvbW1lbnQJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPWJUb2RvLGJDb21tZW50U3RyaW5nLGJDaGFyYWN0ZXIsYk51bWJlcixiRmxvYXQKKyAgc3ludGF4IHJlZ2lvbiBiQ29tbWVudAlzdGFydD0iL1w/XCoiIGVuZD0iXCpcPy8iIGNvbnRhaW5zPWJUb2RvLGJDb21tZW50U3RyaW5nLGJDaGFyYWN0ZXIsYk51bWJlcixiRmxvYXQKKyAgc3ludGF4IG1hdGNoICBiQ29tbWVudAkiLy8uKiIgY29udGFpbnM9YlRvZG8sYkNvbW1lbnQyU3RyaW5nLGJDaGFyYWN0ZXIsYk51bWJlcgorZWxzZQorICBzeW4gcmVnaW9uIGJDb21tZW50CQlzdGFydD0iL1wqIiBlbmQ9IlwqLyIgY29udGFpbnM9YlRvZG8KKyAgc3luIHJlZ2lvbiBiQ29tbWVudAkJc3RhcnQ9Ii9cP1wqIiBlbmQ9IlwqXD8vIiBjb250YWlucz1iVG9kbworICBzeW4gbWF0Y2ggYkNvbW1lbnQJCSIvLy4qIiBjb250YWlucz1iVG9kbworZW5kaWYKK3N5bnRheCBtYXRjaCBiQ29tbWVudEVycm9yCSJcKi8iCisKK3N5biBrZXl3b3JkIGJUeXBlCQlJTlQgSU5URUdFUiBCT09MIE5BVCBOQVRVUkFMIE5BVDEgTkFUVVJBTDEKKworc3luIHJlZ2lvbiBiUHJlQ29uZGl0CXN0YXJ0PSJeXHMqI1xzKlwoaWZcPlx8aWZkZWZcPlx8aWZuZGVmXD5cfGVsaWZcPlx8ZWxzZVw+XHxlbmRpZlw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1iQ29tbWVudCxiU3RyaW5nLGJDaGFyYWN0ZXIsYk51bWJlcixiQ29tbWVudEVycm9yCitzeW4gcmVnaW9uIGJJbmNsdWRlZCBjb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKworc3luIG1hdGNoIGJJbmNsdWRlZCBjb250YWluZWQgIjxbXj5dKj4iCitzeW4gbWF0Y2ggYkluY2x1ZGUJCSJeXHMqI1xzKmluY2x1ZGVcPlxzKlsiPF0iIGNvbnRhaW5zPWJJbmNsdWRlZAorCitzeW4gcmVnaW9uIGJEZWZpbmUJCXN0YXJ0PSJeXHMqI1xzKlwoZGVmaW5lXD5cfHVuZGVmXD5cKSIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPUFMTEJVVCxiUHJlQ29uZGl0LGJJbmNsdWRlZCxiSW5jbHVkZSxiRGVmaW5lLGJJblBhcmVuCitzeW4gcmVnaW9uIGJQcmVQcm9jCQlzdGFydD0iXlxzKiNccypcKHByYWdtYVw+XHxsaW5lXD5cfHdhcm5pbmdcPlx8d2Fyblw+XHxlcnJvclw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1BTExCVVQsYlByZUNvbmRpdCxiSW5jbHVkZWQsYkluY2x1ZGUsYkRlZmluZSxiSW5QYXJlbgorCisKK3N5biBzeW5jIGNjb21tZW50IGJDb21tZW50IG1pbmxpbmVzPTEwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAorCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYl9zeW50YXhfaW5pdHMiKQorICAgaWYgdmVyc2lvbiA8IDUwOAorICAgICAgbGV0IGRpZF9iX3N5bnRheF9pbml0cyA9IDEKKyAgICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgICBlbHNlCisgICAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICBIaUxpbmsgYkxhYmVsCUxhYmVsCisgIEhpTGluayBiVXNlckxhYmVsCUxhYmVsCisgIEhpTGluayBiQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGJSZXBlYXQJUmVwZWF0CisgIEhpTGluayBiTG9naWMJU3BlY2lhbAorICBIaUxpbmsgYkNoYXJhY3RlcglDaGFyYWN0ZXIKKyAgSGlMaW5rIGJTcGVjaWFsQ2hhcmFjdGVyIGJTcGVjaWFsCisgIEhpTGluayBiTnVtYmVyCU51bWJlcgorICBIaUxpbmsgYkZsb2F0CUZsb2F0CisgIEhpTGluayBiT2N0YWxFcnJvcgliRXJyb3IKKyAgSGlMaW5rIGJQYXJlbkVycm9yCWJFcnJvcgorIiBIaUxpbmsgYkluUGFyZW4JYkVycm9yCisgIEhpTGluayBiQ29tbWVudEVycm9yCWJFcnJvcgorICBIaUxpbmsgYkJvb2xlYW4JSWRlbnRpZmllcgorICBIaUxpbmsgYkNvbnN0YW50CUlkZW50aWZpZXIKKyAgSGlMaW5rIGJHdWFyZAlJZGVudGlmaWVyCisgIEhpTGluayBiT3BlcmF0b3IJT3BlcmF0b3IKKyAgSGlMaW5rIGJLZXl3b3JkcwlPcGVyYXRvcgorICBIaUxpbmsgYk9wcwkJSWRlbnRpZmllcgorICBIaUxpbmsgYlN0cnVjdHVyZQlTdHJ1Y3R1cmUKKyAgSGlMaW5rIGJTdG9yYWdlQ2xhc3MJU3RvcmFnZUNsYXNzCisgIEhpTGluayBiSW5jbHVkZQlJbmNsdWRlCisgIEhpTGluayBiUHJlUHJvYwlQcmVQcm9jCisgIEhpTGluayBiRGVmaW5lCU1hY3JvCisgIEhpTGluayBiSW5jbHVkZWQJYlN0cmluZworICBIaUxpbmsgYkVycm9yCUVycm9yCisgIEhpTGluayBiU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgYlByZUNvbmRpdAlQcmVDb25kaXQKKyAgSGlMaW5rIGJUeXBlCQlUeXBlCisgIEhpTGluayBiQ29tbWVudEVycm9yCWJFcnJvcgorICBIaUxpbmsgYkNvbW1lbnRTdHJpbmcgYlN0cmluZworICBIaUxpbmsgYkNvbW1lbnQyU3RyaW5nIGJTdHJpbmcKKyAgSGlMaW5rIGJDb21tZW50U2tpcAliQ29tbWVudAorICBIaUxpbmsgYlN0cmluZwlTdHJpbmcKKyAgSGlMaW5rIGJDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIGJTcGVjaWFsCVNwZWNpYWxDaGFyCisgIEhpTGluayBiVG9kbwkJVG9kbworICAiaGkgbGluayBiSWRlbnRpZmllcglJZGVudGlmaWVyCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgY3VycmVudF9zeW50YXggPSAiYiIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2JhYW4udmltIGIvcnVudGltZS9zeW50YXgvYmFhbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmYThkZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2JhYW4udmltCkBAIC0wLDAgKzEsMjQ3IEBACisiIFZpbSBzeW50YXggZmlsZSIKKyIgTGFuZ3VhZ2U6CUJhYW4KKyIgTWFpbnRhaW5lcjoJRXJ3aW4gU21pdCAvIEhlciB2YW4gZGUgVmxpZXJ0CisiIExhc3QgY2hhbmdlOgkzMC0xMC0yMDAxIgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIDNHTCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiCitzeW4gbWF0Y2ggYmFhbjNnbCAiI2lkZW50Igorc3luIG1hdGNoIGJhYW4zZ2wgIiNpbmNsdWRlIgorc3luIG1hdGNoIGJhYW4zZ2wgIiNkZWZpbmUiCitzeW4gbWF0Y2ggYmFhbjNnbCAiI3VuZGVmIgorc3luIG1hdGNoIGJhYW4zZ2wgIiNwcmFnbWEiCitzeW4ga2V5d29yZCBiYWFuQ29uZGl0aW9uYWwgaWYgdGhlbiBlbHNlIGNhc2UgZW5kaWYgd2hpbGUgZW5kd2hpbGUgZW5kZm9yIGVuZGNhc2UKK3N5biBrZXl3b3JkIGJhYW4zZ2wgYXQgYmFzZWQgYnJlYWsgYnNldCBjYWxsIGNvbW1vbiBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRvdWJsZQorc3luIGtleXdvcmQgYmFhbjNnbCBlbXB0eSBleHRlcm4gZml4ZWQgZnVuY3Rpb24gZ2UgZ2xvYmFsIGdvdG8gZ3QgbGUgbHQgbWIKK3N5biBrZXl3b3JkIGJhYW4zZ2wgbXVsdGlieXRlIG5lIG9mciBwcm9tcHQgcmVmIHJlcGVhdCBzdGF0aWMgc3RlcCBzdG9wIHN0cmluZworc3luIGtleXdvcmQgYmFhbjNnbCB0cnVlIGZhbHNlIHVudGlsIHZvaWQgd2hlcmViaW5kCitzeW4ga2V5d29yZCBiYWFuM2dsIGFuZCBvciB0byBub3QgaW4KK3N5biBrZXl3b3JkIGJhYW4zZ2wgZG9tYWluIHRhYmxlIGVxIGlucHV0IGVuZCBsb25nIGRpbSByZXR1cm4gYXQgYmFzZSBwcmludAorc3luIG1hdGNoIGJhYW4zZ2wgIlw8Zm9yXD4iIGNvbnRhaW5zPWJhYW5zcWwKK3N5biBtYXRjaCBiYWFuM2dsICJvbiBjYXNlIgorc3luIG1hdGNoIGJhYW4zZ2wgImVcPW5cPWRcPWRsbHVzYWdlIgorCisiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTUUwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgorc3luIGtleXdvcmQgYmFhbnNxbGggd2hlcmUgcmVmZXJlbmNlIHNlbGVjdGVycm9yIHNlbGVjdGJpbmQgc2VsZWN0ZG8gc2VsZWN0ZW1wdHkKK3N5biBrZXl3b3JkIGJhYW5zcWxoIHNlbGVjdGVvcyB3aGVyZXVzZWQgZW5kc2VsZWN0IHVucmVmIHNldHVucmVmIGNsZWFydW5yZWYKK3N5biBrZXl3b3JkIGJhYW5zcWxoIGZyb20gc2VsZWN0IGNsZWFyIHNraXAgcm93cworc3luIGtleXdvcmQgYmFhbnNxbCBiZXR3ZWVuIGlucmFuZ2UgaGF2aW5nCitzeW4gbWF0Y2ggYmFhbnNxbCAiYXMgc2V0IHdpdGggXGRcKyByb3dzIgorc3luIG1hdGNoIGJhYW5zcWwgImFzIHByZXBhcmVkIHNldCIKK3N5biBtYXRjaCBiYWFuc3FsICJhcyBwcmVwYXJlZCBzZXQgd2l0aCBcZFwrIHJvd3MiCitzeW4gbWF0Y2ggYmFhbnNxbCAicmVmZXJzIHRvIgorc3luIG1hdGNoIGJhYW5zcWwgIndpdGggcmV0cnkiCitzeW4gbWF0Y2ggYmFhbnNxbCAid2l0aCByZXRyeSByZXBlYXQgbGFzdCByb3ciCitzeW4gbWF0Y2ggYmFhbnNxbCAiZm9yIHVwZGF0ZSIKK3N5biBtYXRjaCBiYWFuc3FsICJvcmRlciBieSIKK3N5biBtYXRjaCBiYWFuc3FsICJncm91cCBieSIKK3N5biBtYXRjaCBiYWFuc3FsICJjb21taXRcLnRyYW5zYWN0aW9uKCkiCitzeW4gbWF0Y2ggYmFhbnNxbCAiYWJvcnRcLnRyYW5zYWN0aW9uKCkiCitzeW4gbWF0Y2ggYmFhbnNxbCAiZGJcLmNvbHVtbnNcLnRvXC5yZWNvcmQiCitzeW4gbWF0Y2ggYmFhbnNxbCAiZGJcLnJlY29yZFwudG9cLmNvbHVtbnMiCitzeW4gbWF0Y2ggYmFhbnNxbCAiZGJcLmJpbmQiCitzeW4gbWF0Y2ggYmFhbnNxbCAiZGJcLmNoYW5nZVwub3JkZXIiCitzeW4gbWF0Y2ggYmFhbnNxbCAiXDxkYlwuZXEiCitzeW4gbWF0Y2ggYmFhbnNxbCAiXDxkYlwuZmlyc3QiCitzeW4gbWF0Y2ggYmFhbnNxbCAiXDxkYlwuZ3QiCitzeW4gbWF0Y2ggYmFhbnNxbCAiXDxkYlwuZ2UiCitzeW4gbWF0Y2ggYmFhbnNxbCAiXDxkYlwubGUiCitzeW4gbWF0Y2ggYmFhbnNxbCAiXDxkYlwubmV4dCIKK3N5biBtYXRjaCBiYWFuc3FsICJcPGRiXC5wcmV2Igorc3luIG1hdGNoIGJhYW5zcWwgIlw8ZGJcLmluc2VydCIKK3N5biBtYXRjaCBiYWFuc3FsICJcPGRiXC5kZWxldGUiCitzeW4gbWF0Y2ggYmFhbnNxbCAiXDxkYlwudXBkYXRlIgorc3luIG1hdGNoIGJhYW5zcWwgIlw8ZGJcLmNyZWF0ZVwudGFibGUiCitzeW4gbWF0Y2ggYmFhbnNxbCAiZGJcLnNldFwudG9cLmRlZmF1bHQiCitzeW4gbWF0Y2ggYmFhbnNxbCAiZGJcLnJldHJ5Igorc3luIG1hdGNoIGJhYW5zcWwgIkRCXC5SRVRSWSIKK3N5biBtYXRjaCBiYWFuc3FsICJkYlwuZGVsYXllZFwubG9jayIKK3N5biBtYXRjaCBiYWFuc3FsICJkYlwucmV0cnlcLnBvaW50KCkiCitzeW4gbWF0Y2ggYmFhbnNxbCAiZGJcLnJldHJ5XC5oaXQoKSIKK3N5biBtYXRjaCBiYWFuc3FsICJkYlwucmV0dXJuXC5kdXBsIgorc3luIG1hdGNoIGJhYW5zcWwgImRiXC5za2lwXC5kdXBsIgorc3luIG1hdGNoIGJhYW5zcWwgImRiXC5yb3dcLmxlbmd0aCIKKworIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogNEdMICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIKKyIgUHJvZ3JhbSBzZWN0aW9uCitzeW4gbWF0Y2ggYmFhbjRnbGggImRlY2xhcmF0aW9uOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiZnVuY3Rpb25zOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiYmVmb3JlXC5wcm9ncmFtOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAib25cLmVycm9yOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiYWZ0ZXJcLnByb2dyYW06Igorc3luIG1hdGNoIGJhYW40Z2xoICJhZnRlclwudXBkYXRlLmRiLmNvbW1pdDoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImJlZm9yZVwuZGlzcGxheVwub2JqZWN0OiIKKworIiBGb3JtIHNlY3Rpb24KK3N5biBtYXRjaCBiYWFuNGdsaCAiZm9ybVwuXGRcKzoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImZvcm1cLmFsbDoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImZvcm1cLm90aGVyOiIKK3N5biBtYXRjaCBiYWFuNGdsICJpbml0XC5mb3JtOiIKK3N5biBtYXRjaCBiYWFuNGdsICJiZWZvcmVcLmZvcm06Igorc3luIG1hdGNoIGJhYW40Z2wgImFmdGVyXC5mb3JtOiIKKworIiBDaG9pY2Ugc2VjdGlvbgorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLnN0YXJ0XC5zZXQ6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmZpcnN0XC52aWV3OiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5uZXh0XC52aWV3OiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5wcmV2XC52aWV3OiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5sYXN0XC52aWV3OiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5kZWZcLmZpbmQ6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmZpbmRcLmRhdGE6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmZpcnN0XC5zZXQ6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLm5leHRcLnNldDoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwuZGlzcGxheVwuc2V0OiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5wcmV2XC5zZXQ6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLnJvdGF0ZVwuY3VycjoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwubGFzdFwuc2V0OiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5hZGRcLnNldDoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwudXBkYXRlXC5kYjoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwuZHVwbFwub2NjdXI6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLnJlY292ZXJcLnNldDoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwubWFya1wuZGVsZXRlOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5tYXJrXC5vY2N1cjoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwuY2hhbmdlXC5vcmRlcjoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwubW9kaWZ5XC5zZXQ6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLnJlc3RhcnRcLmlucHV0OiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5wcmludFwuZGF0YToiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwuY3JlYXRlXC5qb2I6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmZvcm1cLnRhYlwuY2hhbmdlOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5maXJzdFwuZnJtOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5uZXh0XC5mcm06Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLnByZXZcLmZybToiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwubGFzdFwuZnJtOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5yZXNpemVcLmZybToiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwuY21kXC5vcHRpb25zOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC56b29tOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5pbnRlcnJ1cHQ6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmVuZFwucHJvZ3JhbToiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwuYWJvcnRcLnByb2dyYW06Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmNvbnRcLnByb2Nlc3M6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLnRleHRcLm1hbmFnZXI6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLnJ1blwuam9iOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5nbG9iYWxcLmRlbGV0ZToiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwuZ2xvYmFsXC5jb3B5OiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5zYXZlXC5kZWZhdWx0cyIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5nZXRcLmRlZmF1bHRzOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5zdGFydFwuY2hhcnQ6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLnN0YXJ0XC5xdWVyeToiCitzeW4gbWF0Y2ggYmFhbjRnbGggImNob2ljZVwudXNlclwuXGQ6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmFza1wuaGVscGluZm86Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmNhbGN1bGF0b3I6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmNhbGVuZGFyOiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiY2hvaWNlXC5ibXM6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmNtZFwud2hhdHNcLnRoaXM6Igorc3luIG1hdGNoIGJhYW40Z2xoICJjaG9pY2VcLmhlbHBcLmluZGV4OiIKK3N5biBtYXRjaCBiYWFuNGdsICJiZWZvcmVcLmNob2ljZToiCitzeW4gbWF0Y2ggYmFhbjRnbCAib25cLmNob2ljZToiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYWZ0ZXJcLmNob2ljZToiCisKKyIgRmllbGQgc2VjdGlvbgorc3luIG1hdGNoIGJhYW40Z2xoICJmaWVsZFwuXGxcezV9XGRcezN9XC5cbFx7NH1cLlw9Y1w9OiIKK3N5biBtYXRjaCBiYWFuNGdsaCAiZmllbGRcLmVcLi5cKzoiCitzeW4gbWF0Y2ggYmFhbjRnbGggImZpZWxkXC5hbGw6Igorc3luIG1hdGNoIGJhYW40Z2xoICJmaWVsZFwub3RoZXI6Igorc3luIG1hdGNoIGJhYW40Z2wgImluaXRcLmZpZWxkOiIKK3N5biBtYXRjaCBiYWFuNGdsICJiZWZvcmVcLmZpZWxkOiIKK3N5biBtYXRjaCBiYWFuNGdsICJiZWZvcmVcLmlucHV0OiIKK3N5biBtYXRjaCBiYWFuNGdsICJiZWZvcmVcLmRpc3BsYXk6Igorc3luIG1hdGNoIGJhYW40Z2wgImJlZm9yZVwuem9vbToiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYmVmb3JlXC5jaGVja3M6Igorc3luIG1hdGNoIGJhYW40Z2wgImRvbWFpblwuZXJyb3I6Igorc3luIG1hdGNoIGJhYW40Z2wgInJlZlwuaW5wdXQ6Igorc3luIG1hdGNoIGJhYW40Z2wgInJlZlwuZGlzcGxheToiCitzeW4gbWF0Y2ggYmFhbjRnbCAiY2hlY2tcLmlucHV0OiIKK3N5biBtYXRjaCBiYWFuNGdsICJvblwuaW5wdXQ6Igorc3luIG1hdGNoIGJhYW40Z2wgIndoZW5cLmZpZWxkXC5jaGFuZ2VzOiIKK3N5biBtYXRjaCBiYWFuNGdsICJhZnRlclwuem9vbToiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYWZ0ZXJcLmlucHV0OiIKK3N5biBtYXRjaCBiYWFuNGdsICJhZnRlclwuZGlzcGxheToiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYWZ0ZXJcLmZpZWxkOiIKKworIiBHcm91cCBzZWN0aW9uCitzeW4gbWF0Y2ggYmFhbjRnbGggImdyb3VwXC5cZFwrOiIKK3N5biBtYXRjaCBiYWFuNGdsICJpbml0XC5ncm91cDoiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYmVmb3JlXC5ncm91cDoiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYWZ0ZXJcLmdyb3VwOiIKKworIiBab29tIHNlY3Rpb24KK3N5biBtYXRjaCBiYWFuNGdsaCAiem9vbVwuZnJvbVwuLlwrOiIKK3N5biBtYXRjaCBiYWFuNGdsICJvblwuZW50cnk6Igorc3luIG1hdGNoIGJhYW40Z2wgIm9uXC5leGl0OiIKKyIgTWFpbiB0YWJsZSBzZWN0aW9uCitzeW4gbWF0Y2ggYmFhbjRnbGggIm1haW5cLnRhYmxlXC5pbzoiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYmVmb3JlXC5yZWFkOiIKK3N5biBtYXRjaCBiYWFuNGdsICJhZnRlclwucmVhZDoiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYmVmb3JlXC53cml0ZToiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYWZ0ZXJcLndyaXRlOiIKK3N5biBtYXRjaCBiYWFuNGdsICJhZnRlclwuc2tpcFwud3JpdGU6Igorc3luIG1hdGNoIGJhYW40Z2wgImJlZm9yZVwucmV3cml0ZToiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYWZ0ZXJcLnJld3JpdGU6Igorc3luIG1hdGNoIGJhYW40Z2wgImFmdGVyXC5za2lwXC5yZXdyaXRlOiIKK3N5biBtYXRjaCBiYWFuNGdsICJiZWZvcmVcLmRlbGV0ZToiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYWZ0ZXJcLmRlbGV0ZToiCitzeW4gbWF0Y2ggYmFhbjRnbCAiYWZ0ZXJcLnNraXBcLmRlbGV0ZToiCitzeW4gbWF0Y2ggYmFhbjRnbCAicmVhZFwudmlldzoiCisKKyJudW1iZXIgd2l0aG91dCBhIGRvdC4iCitzeW4gbWF0Y2ggIGJhYW5OdW1iZXIJCSJcPFwtXD1cZFwrXD4iCisibnVtYmVyIHdpdGggZG90Igorc3luIG1hdGNoICBiYWFuTnVtYmVyCQkiXDxcLVw9XGRcK1wuXGQqXD4iCisibnVtYmVyIHN0YXJ0aW5nIHdpdGggYSBkb3QiCitzeW4gbWF0Y2ggIGJhYW5OdW1iZXIJCSJcPFwtXD1cLlxkXCtcPiIKKworIiBTdHJpbmciCitzeW4gcmVnaW9uICBiYWFuU3RyaW5nCXN0YXJ0PSsiKyAgc2tpcD0rIiIrICBlbmQ9KyIrCisiIENvbW1lbnQiCitzeW4gbWF0Y2ggICBiYWFuQ29tbWVudCAifCQiCitzeW4gbWF0Y2ggICBiYWFuQ29tbWVudCAifC4kIgorc3luIG1hdGNoICAgYmFhbkNvbW1lbnQgInxbXiBdIgorc3luIG1hdGNoICAgYmFhbkNvbW1lbnQJInxbXiNdLipbXiBdIgorc3luIG1hdGNoICAgYmFhbkNvbW1lbnRoICJefCNscmEuKiQiCitzeW4gbWF0Y2ggICBiYWFuQ29tbWVudGggIl58I21kbS4qJCIKK3N5biBtYXRjaCAgIGJhYW5Db21tZW50aCAiXnwjWzAtOV1bMC05XVswLTldWzAtOV1bMC05XS4qJCIKK3N5biBtYXRjaCAgIGJhYW5Db21tZW50aCAiXnwjTlw9b1w9SW5jbHVkZS4qJCIKK3N5biByZWdpb24gIGJhYW5Db21tZW50IHN0YXJ0PSJkbGx1c2FnZSIgZW5kPSJlbmRkbGx1c2FnZSIKKyIgT2xkY29kZSIKK3N5biBtYXRjaCAgIGJhYW5VbmNvbW1lbnRlZAkiXnxbXiojXS4qW14gXSIKKyIgU3BhY2VFcnJvciIKK3N5biBtYXRjaCAgQmFhblNwYWNlcwkiICIKK3N5biBtYXRjaCAgYmFhblNwYWNlRXJyb3IJIlxzKiQiCitzeW4gbWF0Y2ggIGJhYW5TcGFjZUVycm9yCSIgICAgICAgICIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYmFhbl9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGJhYW5Db25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgYmFhbjNnbAkJU3RhdGVtZW50CisgIEhpTGluayBiYWFuNGdsCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGJhYW40Z2xoCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGJhYW5zcWwJCVN0YXRlbWVudAorICBIaUxpbmsgYmFhbnNxbGgJCVN0YXRlbWVudAorICBIaUxpbmsgYmFhbk51bWJlcgkJTnVtYmVyCisgIEhpTGluayBiYWFuU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIGJhYW5Db21tZW50CQlDb21tZW50CisgIEhpTGluayBiYWFuQ29tbWVudGgJCUNvbW1lbnQKKyAgSGlMaW5rIGJhYW5VbmNvbW1lbnRlZAlDb21tZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImJhYW4iCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9iYXNpYy52aW0gYi9ydW50aW1lL3N5bnRheC9iYXNpYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1MDAxNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2Jhc2ljLnZpbQpAQCAtMCwwICsxLDE3NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUJBU0lDCisiIE1haW50YWluZXI6CUFsbGFuIEtlbGx5IDxhbGxhbkBmcnVpdGxvYWYuY28udWs+CisiIExhc3QgQ2hhbmdlOglUdWUgU2VwIDE0IDE0OjI0OjIzIEJTVCAxOTk5CisKKyIgRmlyc3QgdmVyc2lvbiBiYXNlZCBvbiBNaWNybyRzb2Z0IFFCQVNJQyBjaXJjYSAxOTg5LCBhcyBkb2N1bWVudGVkIGluCisiICdMZWFybiBCQVNJQyBOb3cnIGJ5IEhhbHZvcnNvbiZSeWdteXIuIE1pY3Jvc29mdCBQcmVzcyAxOTg5LgorIiBUaGlzIHN5bnRheCBmaWxlIG5vdCBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIHlldC4gIFNlbmQgc3VnZ2VzdGlvbnMgdG8gdGhlCisiIG1haW50YWluZXIuCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBBIGJ1bmNoIG9mIHVzZWZ1bCBCQVNJQyBrZXl3b3Jkcworc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJQkVFUCBiZWVwIEJlZXAgQkxPQUQgYmxvYWQgQmxvYWQgQlNBVkUgYnNhdmUgQnNhdmUKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CUNBTEwgY2FsbCBDYWxsIEFCU09MVVRFIGFic29sdXRlIEFic29sdXRlCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlDSEFJTiBjaGFpbiBDaGFpbiBDSERJUiBjaGRpciBDaGRpcgorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJQ0lSQ0xFIGNpcmNsZSBDaXJjbGUgQ0xFQVIgY2xlYXIgQ2xlYXIKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CUNMT1NFIGNsb3NlIENsb3NlIENMUyBjbHMgQ2xzIENPTE9SIGNvbG9yIENvbG9yCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlDT00gY29tIENvbSBDT01NT04gY29tbW9uIENvbW1vbgorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJQ09OU1QgY29uc3QgQ29uc3QgREFUQSBkYXRhIERhdGEKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CURFQ0xBUkUgZGVjbGFyZSBEZWNsYXJlIERFRiBkZWYgRGVmCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlERUZEQkwgZGVmZGJsIERlZmRibCBERUZJTlQgZGVmaW50IERlZmludAorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJREVGTE5HIGRlZmxuZyBEZWZsbmcgREVGU05HIGRlZnNuZyBEZWZzbmcKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CURFRlNUUiBkZWZzdHIgRGVmc3RyIERJTSBkaW0gRGltCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlETyBkbyBEbyBMT09QIGxvb3AgTG9vcAorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJRFJBVyBkcmF3IERyYXcgRU5EIGVuZCBFbmQKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CUVOVklST04gZW52aXJvbiBFbnZpcm9uIEVSQVNFIGVyYXNlIEVyYXNlCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlFUlJPUiBlcnJvciBFcnJvciBFWElUIGV4aXQgRXhpdAorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJRklFTEQgZmllbGQgRmllbGQgRklMRVMgZmlsZXMgRmlsZXMKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CUZPUiBmb3IgRm9yIE5FWFQgbmV4dCBOZXh0CitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlGVU5DVElPTiBmdW5jdGlvbiBGdW5jdGlvbiBHRVQgZ2V0IEdldAorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJR09TVUIgZ29zdWIgR29zdWIgR09UTyBnb3RvIEdvdG8KK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CUlGIGlmIElmIFRIRU4gdGhlbiBUaGVuIEVMU0UgZWxzZSBFbHNlCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlJTlBVVCBpbnB1dCBJbnB1dCBJTlBVVCMgaW5wdXQjIElucHV0Iworc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJSU9DVEwgaW9jdGwgSW9jdGwgS0VZIGtleSBLZXkKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CUtJTEwga2lsbCBLaWxsIExFVCBsZXQgTGV0CitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlMSU5FIGxpbmUgTGluZSBMT0NBVEUgbG9jYXRlIExvY2F0ZQorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJTE9DSyBsb2NrIExvY2sgVU5MT0NLIHVubG9jayBVbmxvY2sKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CUxQUklOVCBscHJpbnQgTHByaW50IFVTSU5HIHVzaW5nIFVzaW5nCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlMU0VUIGxzZXQgTHNldCBNS0RJUiBta2RpciBNa2Rpcgorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJTkFNRSBuYW1lIE5hbWUgT04gb24gT24KK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CUVSUk9SIGVycm9yIEVycm9yIE9QRU4gb3BlbiBPcGVuCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlPUFRJT04gb3B0aW9uIE9wdGlvbiBCQVNFIGJhc2UgQmFzZQorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJT1VUIG91dCBPdXQgUEFJTlQgcGFpbnQgUGFpbnQKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CVBBTEVUVEUgcGFsZXR0ZSBQYWxldHRlIFBDT1BZIHBjb3B5IFBjb3B5CitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlQRU4gcGVuIFBlbiBQTEFZIHBsYXkgUGxheQorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJUE1BUCBwbWFwIFBtYXAgUE9LRSBwb2tlIFBva2UKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CVBSRVNFVCBwcmVzZXQgUHJlc2V0IFBSSU5UIHByaW50IFByaW50CitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlQUklOVCMgcHJpbnQjIFByaW50IyBVU0lORyB1c2luZyBVc2luZworc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJUFNFVCBwc2V0IFBzZXQgUFVUIHB1dCBQdXQKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CVJBTkRPTUlaRSByYW5kb21pemUgUmFuZG9taXplIFJFQUQgcmVhZCBSZWFkCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlSRURJTSByZWRpbSBSZWRpbSBSRVNFVCByZXNldCBSZXNldAorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJUkVTVE9SRSByZXN0b3JlIFJlc3RvcmUgUkVTVU1FIHJlc3VtZSBSZXN1bWUKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CVJFVFVSTiByZXR1cm4gUmV0dXJuIFJNRElSIHJtZGlyIFJtZGlyCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlSU0VUIHJzZXQgUnNldCBSVU4gcnVuIFJ1bgorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJU0VFSyBzZWVrIFNlZWsgU0VMRUNUIHNlbGVjdCBTZWxlY3QKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CUNBU0UgY2FzZSBDYXNlIFNIQVJFRCBzaGFyZWQgU2hhcmVkCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlTSEVMTCBzaGVsbCBTaGVsbCBTTEVFUCBzbGVlcCBTbGVlcAorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJU09VTkQgc291bmQgU291bmQgU1RBVElDIHN0YXRpYyBTdGF0aWMKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CVNUT1Agc3RvcCBTdG9wIFNUUklHIHN0cmlnIFN0cmlnCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlTVUIgc3ViIFN1YiBTV0FQIHN3YXAgU3dhcAorc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJU1lTVEVNIHN5c3RlbSBTeXN0ZW0gVElNRVIgdGltZXIgVGltZXIKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CVRST0ZGIHRyb2ZmIFRyb2ZmIFRST04gdHJvbiBUcm9uCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlUWVBFIHR5cGUgVHlwZSBVTkxPQ0sgdW5sb2NrIFVubG9jaworc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJVklFVyB2aWV3IFZpZXcgV0FJVCB3YWl0IFdhaXQKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CVdISUxFIHdoaWxlIFdoaWxlIFdFTkQgd2VuZCBXZW5kCitzeW4ga2V5d29yZCBiYXNpY1N0YXRlbWVudAlXSURUSCB3aWR0aCBXaWR0aCBXSU5ET1cgd2luZG93IFdpbmRvdworc3luIGtleXdvcmQgYmFzaWNTdGF0ZW1lbnQJV1JJVEUgd3JpdGUgV3JpdGUgREFURSQgZGF0ZSQgRGF0ZSQKK3N5biBrZXl3b3JkIGJhc2ljU3RhdGVtZW50CU1JRCQgbWlkJCBNaWQkIFRJTUUkIHRpbWUkIFRpbWUkCisKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JQUJTIGFicyBBYnMgQVNDIGFzYyBBc2MKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JQVROIGF0biBBdG4gQ0RCTCBjZGJsIENkYmwKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JQ0lOVCBjaW50IENpbnQgQ0xORyBjbG5nIENsbmcKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JQ09TIGNvcyBDb3MgQ1NORyBjc25nIENzbmcKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JQ1NSTElOIGNzcmxpbiBDc3JsaW4gQ1ZEIGN2ZCBDdmQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JQ1ZETUJGIGN2ZG1iZiBDdmRtYmYgQ1ZJIGN2aSBDdmkKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JQ1ZMIGN2bCBDdmwgQ1ZTIGN2cyBDdnMKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JQ1ZTTUJGIGN2c21iZiBDdnNtYmYgRU9GIGVvZiBFb2YKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JRVJERVYgZXJkZXYgRXJkZXYgRVJMIGVybCBFcmwKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JRVJSIGVyciBFcnIgRVhQIGV4cCBFeHAKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JRklMRUFUVFIgZmlsZWF0dHIgRmlsZWF0dHIgRklYIGZpeCBGaXgKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JRlJFIGZyZSBGcmUgRlJFRUZJTEUgZnJlZWZpbGUgRnJlZWZpbGUKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JSU5QIGlucCBJbnAgSU5TVFIgaW5zdHIgSW5zdHIKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JSU5UIGludCBJbnQgTEJPVU5EIGxib3VuZCBMYm91bmQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JTEVOIGxlbiBMZW4gTE9DIGxvYyBMb2MKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JTE9GIGxvZiBMb2YgTE9HIGxvZyBMb2cKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JTFBPUyBscG9zIExwb3MgUEVFSyBwZWVrIFBlZWsKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JUEVOIHBlbiBQZW4gUE9JTlQgcG9pbnQgUG9pbnQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JUE9TIHBvcyBQb3MgUk5EIHJuZCBSbmQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JU0FERCBzYWRkIFNhZGQgU0NSRUVOIHNjcmVlbiBTY3JlZW4KK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JU0VFSyBzZWVrIFNlZWsgU0VUTUVNIHNldG1lbSBTZXRtZW0KK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JU0dOIHNnbiBTZ24gU0lOIHNpbiBTaW4KK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JU1BDIHNwYyBTcGMgU1FSIHNxciBTcXIKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JU1RJQ0sgc3RpY2sgU3RpY2sgU1RSSUcgc3RyaWcgU3RyaWcKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JVEFCIHRhYiBUYWIgVEFOIHRhbiBUYW4KK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JVUJPVU5EIHVib3VuZCBVYm91bmQgVkFMIHZhbCBWYWwKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JVkFMUFRSIHZhbHB0ciBWYWxwdHIgVkFMU0VHIHZhbHNlZyBWYWxzZWcKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JVkFSUFRSIHZhcnB0ciBWYXJwdHIgVkFSU0VHIHZhcnNlZyBWYXJzZWcKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JQ0hSJCBDaHIkIGNociQgQ09NTUFORCQgY29tbWFuZCQgQ29tbWFuZCQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JREFURSQgZGF0ZSQgRGF0ZSQgRU5WSVJPTiQgZW52aXJvbiQgRW52aXJvbiQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JRVJERVYkIGVyZGV2JCBFcmRldiQgSEVYJCBoZXgkIEhleCQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JSU5LRVkkIGlua2V5JCBJbmtleSQgSU5QVVQkIGlucHV0JCBJbnB1dCQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JSU9DVEwkIGlvY3RsJCBJb2N0bCQgTENBU0VTJCBsY2FzZXMkIExjYXNlcyQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JTEFGVCQgbGFmdCQgTGFmdCQgTFRSSU0kIGx0cmltJCBMdHJpbSQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JTUlEJCBtaWQkIE1pZCQgTUtETUJGJCBta2RtYmYkIE1rZG1iZiQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JTUtEJCBta2QkIE1rZCQgTUtJJCBta2kkIE1raSQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JTUtMJCBta2wkIE1rbCQgTUtTTUJGJCBta3NtYmYkIE1rc21iZiQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JTUtTJCBta3MkIE1rcyQgT0NUJCBvY3QkIE9jdCQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JUklHSFQkIHJpZ2h0JCBSaWdodCQgUlRSSU0kIHJ0cmltJCBSdHJpbSQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JU1BBQ0UkIHNwYWNlJCBTcGFjZSQgU1RSJCBzdHIkIFN0ciQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JU1RSSU5HJCBzdHJpbmckIFN0cmluZyQgVElNRSQgdGltZSQgVGltZSQKK3N5biBrZXl3b3JkIGJhc2ljRnVuY3Rpb24JVUNBU0UkIHVjYXNlJCBVY2FzZSQgVkFSUFRSJCB2YXJwdHIkIFZhcnB0ciQKK3N5biBrZXl3b3JkIGJhc2ljVG9kbyBjb250YWluZWQJVE9ETworCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90Lgorc3luIG1hdGNoICBiYXNpY051bWJlcgkJIlw8XGRcK1w+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QKK3N5biBtYXRjaCAgYmFzaWNOdW1iZXIJCSJcPFxkXCtcLlxkKlw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdAorc3luIG1hdGNoICBiYXNpY051bWJlcgkJIlwuXGRcK1w+IgorCisiIFN0cmluZyBhbmQgQ2hhcmFjdGVyIGNvbnRzdGFudHMKK3N5biBtYXRjaCAgIGJhc2ljU3BlY2lhbCBjb250YWluZWQgIlxcXGRcZFxkXHxcXC4iCitzeW4gcmVnaW9uICBiYXNpY1N0cmluZwkJICBzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisgIGNvbnRhaW5zPWJhc2ljU3BlY2lhbAorCitzeW4gcmVnaW9uICBiYXNpY0NvbW1lbnQJc3RhcnQ9IlJFTSIgZW5kPSIkIiBjb250YWlucz1iYXNpY1RvZG8KK3N5biByZWdpb24gIGJhc2ljQ29tbWVudAlzdGFydD0iXlsgXHRdKiciIGVuZD0iJCIgY29udGFpbnM9YmFzaWNUb2RvCitzeW4gcmVnaW9uICBiYXNpY0xpbmVOdW1iZXIJc3RhcnQ9Il5cZCIgZW5kPSJccyIKK3N5biBtYXRjaCAgIGJhc2ljVHlwZVNwZWNpZmllciAgIlthLXpBLVowLTldW1wkJSYhI10ibXM9cysxCisiIFVzZWQgd2l0aCBPUEVOIHN0YXRlbWVudAorc3luIG1hdGNoICAgYmFzaWNGaWxlbnVtYmVyICAiI1xkXCsiCisic3luIHN5bmMgY2NvbW1lbnQgYmFzaWNDb21tZW50CisiIHN5biBtYXRjaCAgIGJhc2ljTWF0aHNPcGVyYXRvciAiWzw+K1wqXi9cXD0tXSIKK3N5biBtYXRjaCAgIGJhc2ljTWF0aHNPcGVyYXRvciAgICItXHw9XHxbOjw+K1wqXi9cXF1cfEFORFx8T1IiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2Jhc2ljX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2Jhc2ljX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGJhc2ljTGFiZWwJCUxhYmVsCisgIEhpTGluayBiYXNpY0NvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluayBiYXNpY1JlcGVhdAkJUmVwZWF0CisgIEhpTGluayBiYXNpY0xpbmVOdW1iZXIJQ29tbWVudAorICBIaUxpbmsgYmFzaWNOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgYmFzaWNFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIGJhc2ljU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgYmFzaWNTdHJpbmcJCVN0cmluZworICBIaUxpbmsgYmFzaWNDb21tZW50CQlDb21tZW50CisgIEhpTGluayBiYXNpY1NwZWNpYWwJCVNwZWNpYWwKKyAgSGlMaW5rIGJhc2ljVG9kbwkJVG9kbworICBIaUxpbmsgYmFzaWNGdW5jdGlvbgkJSWRlbnRpZmllcgorICBIaUxpbmsgYmFzaWNUeXBlU3BlY2lmaWVyIFR5cGUKKyAgSGlMaW5rIGJhc2ljRmlsZW51bWJlciBiYXNpY1R5cGVTcGVjaWZpZXIKKyAgImhpIGJhc2ljTWF0aHNPcGVyYXRvciB0ZXJtPWJvbGQgY3Rlcm09Ym9sZCBndWk9Ym9sZAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJiYXNpYyIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2JjLnZpbSBiL3J1bnRpbWUvc3ludGF4L2JjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZhZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYmMudmltCkBAIC0wLDAgKzEsNzggQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgliYyAtIEFuIGFyYml0cmFyeSBwcmVjaXNpb24gY2FsY3VsYXRvciBsYW5ndWFnZQorIiBNYWludGFpbmVyOglWbGFkaW1pciBTY2hvbHR6IDx2bGFkb0Bnamguc2s+CisiIExhc3QgY2hhbmdlOgkyMDAxIFNlcCAwMgorIiBBdmFpbGFibGUgb246CXd3dy5namguc2svfnZsYWRvL2JjLnZpbQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCisiIEtleXdvcmRzCitzeW4ga2V5d29yZCBiY0tleXdvcmQgaWYgZWxzZSB3aGlsZSBmb3IgYnJlYWsgY29udGludWUgcmV0dXJuIGxpbWl0cyBoYWx0IHF1aXQKK3N5biBrZXl3b3JkIGJjS2V5d29yZCBkZWZpbmUKK3N5biBrZXl3b3JkIGJjS2V5d29yZCBsZW5ndGggcmVhZCBzcXJ0IHByaW50CisKKyIgVmFyaWFibGUKK3N5biBrZXl3b3JkIGJjVHlwZSBhdXRvCisKKyIgQ29uc3RhbnQKK3N5biBrZXl3b3JkIGJjQ29uc3RhbnQgc2NhbGUgaWJhc2Ugb2Jhc2UgbGFzdAorc3luIGtleXdvcmQgYmNDb25zdGFudCBCQ19CQVNFX01BWCBCQ19ESU1fTUFYIEJDX1NDQUxFX01BWCBCQ19TVFJJTkdfTUFYCitzeW4ga2V5d29yZCBiY0NvbnN0YW50IEJDX0VOVl9BUkdTIEJDX0xJTkVfTEVOR1RICisKKyIgQW55IG90aGVyIHN0dWZmCitzeW4gbWF0Y2ggYmNJZGVudGlmaWVyCQkiW2Etel9dW2EtejAtOV9dKiIKKworIiBTdHJpbmcKKyBzeW4gbWF0Y2ggYmNTdHJpbmcJCSJcIlteIl0qXCIiCisKKyIgTnVtYmVyCitzeW4gbWF0Y2ggYmNOdW1iZXIJCSJbMC05XVwrIgorCisiIENvbW1lbnQKK3N5biBtYXRjaCBiY0NvbW1lbnQJCSJcIy4qIgorc3luIHJlZ2lvbiBiY0NvbW1lbnQJCXN0YXJ0PSIvXCoiIGVuZD0iXCovIgorCisiIFBhcmVudCAoKQorc3luIGNsdXN0ZXIgYmNBbGwgY29udGFpbnM9YmNMaXN0LGJjSWRlbnRpZmllcixiY051bWJlcixiY0tleXdvcmQsYmNUeXBlLGJjQ29uc3RhbnQsYmNTdHJpbmcsYmNQYXJlbnRFcnJvcgorc3luIHJlZ2lvbiBiY0xpc3QJCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIoIiBza2lwPSJ8Llx7LX18IiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIGNvbnRhaW5zPUBiY0FsbAorc3luIHJlZ2lvbiBiY0xpc3QJCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcWyIgc2tpcD0ifC5cey19fCIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSJcXSIgY29udGFpbnM9QGJjQWxsCitzeW4gbWF0Y2ggYmNQYXJlbkVycm9yCQkJIl0iCitzeW4gbWF0Y2ggYmNQYXJlbkVycm9yCQkJIikiCisKKworCitzeW4gY2FzZSBtYXRjaAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9iY19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9iY19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBiY0tleXdvcmQJCVN0YXRlbWVudAorICBIaUxpbmsgYmNUeXBlCQlUeXBlCisgIEhpTGluayBiY0NvbnN0YW50CQlDb25zdGFudAorICBIaUxpbmsgYmNOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgYmNDb21tZW50CQlDb21tZW50CisgIEhpTGluayBiY1N0cmluZwkJU3RyaW5nCisgIEhpTGluayBiY1NwZWNpYWxDaGFyCQlTcGVjaWFsQ2hhcgorICBIaUxpbmsgYmNQYXJlbkVycm9yCQlFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJiYyIKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9iZGYudmltIGIvcnVudGltZS9zeW50YXgvYmRmLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmM0MDRhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYmRmLnZpbQpAQCAtMCwwICsxLDg2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIEJERiBGb250IGRlZmluaXRpb24KKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL3N5bnRheC9wY3AvYmRmLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTA2CisiIGFyY2gtdGFnOgkgICAgYjY5NmI2YmEtYWYyNC00MWJhLWI0ZWItZDI0ODQ5NWVjYTY4CisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIG51bWJlcnMKK3N5biBtYXRjaCAgIGJkZk51bWJlcgkgICAgZGlzcGxheSAiXDxcKFx4XCtcfFxkXCtcLlxkXCtcKVw+IgorCisiIGNvbW1lbnRzCitzeW4gcmVnaW9uICBiZGZDb21tZW50CSAgICBzdGFydD0iXkNPTU1FTlRcPiIgZW5kPSIkIiBjb250YWlucz1iZGZUb2RvCisKKyIgdG9kbworc3luIGtleXdvcmQgYmRmVG9kbwkgICAgY29udGFpbmVkIFRPRE8gRklYTUUgWFhYIE5PVEUKKworIiBzdHJpbmdzCitzeW4gcmVnaW9uICBiZGZTdHJpbmcJICAgIHN0YXJ0PSsiKyBza2lwPSsiIisgZW5kPSsiKworCisiIHByb3BlcnRpZXMKK3N5biBrZXl3b3JkIGJkZlByb3BlcnRpZXMgICBjb250YWluZWQgRk9OVCBTSVpFIEZPTlRCT1VORElOR0JPWCBDSEFSUworCisiIFgxMSBwcm9wZXJ0aWVzCitzeW4ga2V5d29yZCBiZGZYUHJvcGVydGllcyAgY29udGFpbmVkIEZPTlRfQVNDRU5UIEZPTlRfREVTQ0VOVCBERUZBVUxUX0NIQVIKK3N5biBrZXl3b3JkIGJkZlhQcm9wZXJ0aWVzICBjb250YWluZWQgRk9OVE5BTUVfUkVHSVNUUlkgRk9VTkRSWSBGQU1JTFlfTkFNRQorc3luIGtleXdvcmQgYmRmWFByb3BlcnRpZXMgIGNvbnRhaW5lZCBXRUlHSFRfTkFNRSBTTEFOVCBTRVRXSURUSF9OQU1FIFBJWEVMX1NJWkUKK3N5biBrZXl3b3JkIGJkZlhQcm9wZXJ0aWVzICBjb250YWluZWQgUE9JTlRfU0laRSBSRVNPTFVUSU9OX1ggUkVTT0xVVElPTl9ZIFNQQUNJTkcKK3N5biBrZXl3b3JkIGJkZlhQcm9wZXJ0aWVzICBjb250YWluZWQgQ0hBUlNFVF9SRUdJU1RSWSBDSEFSU0VUX0VOQ09ESU5HIENPUFlSSUdIVAorc3luIGtleXdvcmQgYmRmWFByb3BlcnRpZXMgIGNvbnRhaW5lZCBBRERfU1RZTEVfTkFNRSBXRUlHSFQgUkVTT0xVVElPTiBYX0hFSUdIVAorc3luIGtleXdvcmQgYmRmWFByb3BlcnRpZXMgIGNvbnRhaW5lZCBRVUFEX1dJRFRIIEZPTlQgQVZFUkFHRV9XSURUSAorCitzeW4gcmVnaW9uICBiZGZEZWZpbml0aW9uICAgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1iZGZEZWxpbSBzdGFydD0iXlNUQVJUUFJPUEVSVElFU1w+IiBlbmQ9Il5FTkRQUk9QRVJUSUVTXD4iIGNvbnRhaW5zPWJkZlhQcm9wZXJ0aWVzLGJkZk51bWJlcixiZGZTdHJpbmcKKworIiBjaGFyYWN0ZXJzCitzeW4ga2V5d29yZCBiZGZDaGFyUHJvcGVydGllcyBjb250YWluZWQgRU5DT0RJTkcgU1dJRFRIIERXSURUSCBCQlggQVRUUklCVVRFUyBCSVRNQVAKKworc3luIG1hdGNoICAgYmRmQ2hhck5hbWUJICAgIGNvbnRhaW5lZCBkaXNwbGF5ICJcPFswLTlhLXpBLVpdXHsxLDE0fVw+Igorc3luIG1hdGNoICAgYmRmQ2hhck5hbWVFcnJvciBjb250YWluZWQgZGlzcGxheSAiXDxbMC05YS16QS1aXVx7MTUsfVw+IgorCitzeW4gcmVnaW9uICBiZGZTdGFydENoYXIgICAgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1iZGZEZWxpbSBzdGFydD0iXDxTVEFSVENIQVJcPiIgZW5kPSIkIiBjb250YWlucz1iZGZDaGFyTmFtZSxiZGZDaGFyTmFtZUVycm9yCisKK3N5biByZWdpb24gIGJkZkNoYXJEZWZpbml0aW9uIHRyYW5zcGFyZW50IHN0YXJ0PSJeU1RBUlRDSEFSXD4iIG1hdGNoZ3JvdXA9YmRmRGVsaW0gZW5kPSJeRU5EQ0hBUlw+IiBjb250YWlucz1iZGZDaGFyUHJvcGVydGllcyxiZGZOdW1iZXIsYmRmU3RhcnRDaGFyCisKKyIgZm9udAorc3luIHJlZ2lvbiAgYmRmRm9udERlZmluaXRpb24gdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1iZGZEZWxpbSBzdGFydD0iXlNUQVJURk9OVFw+IiBlbmQ9Il5FTkRGT05UXD4iIGNvbnRhaW5zPWJkZlByb3BlcnRpZXMsYmRmRGVmaW5pdGlvbixiZGZDaGFyRGVmaW5pdGlvbixiZGZOdW1iZXIsYmRmQ29tbWVudAorCitpZiBleGlzdHMoImJkZl9taW5saW5lcyIpCisgIGxldCBiOmJkZl9taW5saW5lcyA9IGJkZl9taW5saW5lcworZWxzZQorICBsZXQgYjpiZGZfbWlubGluZXMgPSA1MAorZW5kaWYKK2V4ZWMgInN5biBzeW5jIG1pbmxpbmVzPSIgLiBiOmJkZl9taW5saW5lcworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9iZGZfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfYmRmX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGJkZkNvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGJkZlRvZG8JCVRvZG8KKyAgSGlMaW5rIGJkZk51bWJlcgkJTnVtYmVyCisgIEhpTGluayBiZGZTdHJpbmcJCVN0cmluZworICBIaUxpbmsgYmRmUHJvcGVydGllcwlLZXl3b3JkCisgIEhpTGluayBiZGZYUHJvcGVydGllcwlLZXl3b3JkCisgIEhpTGluayBiZGZDaGFyUHJvcGVydGllcwlTdHJ1Y3R1cmUKKyAgSGlMaW5rIGJkZkRlbGltCQlEZWxpbWl0ZXIKKyAgSGlMaW5rIGJkZkNoYXJOYW1lCQlTdHJpbmcKKyAgSGlMaW5rIGJkZkNoYXJOYW1lRXJyb3IJRXJyb3IKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImJkZiIKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYmliLnZpbSBiL3J1bnRpbWUvc3ludGF4L2JpYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4ZjI4MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2JpYi52aW0KQEAgLTAsMCArMSw5MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUJpYlRlWCAoYmlibGlvZ3JhcGhpYyBkYXRhYmFzZSBmb3JtYXQgZm9yIChMYSlUZVgpCisiIE1haW50YWluZXI6CUJlcm5kIEZlaWdlIDxCZXJuZC5GZWlnZUBnbXgubmV0PgorIiBGaWxlbmFtZXM6CSouYmliCisiIExhc3QgQ2hhbmdlOglBcHIgMjYsIDIwMDEKKyIgVVJMOgkJaHR0cDovL2hvbWUudC1vbmxpbmUuZGUvaG9tZS9CZXJuZC5GZWlnZS9iaWIudmltCisKKyIgVGhhbmtzIHRvIHRob3NlIHdobyBwb2ludGVkIG91dCBwcm9ibGVtcyB3aXRoIHRoaXMgZmlsZSBvciBzdXBwbGllZCBmaXhlcyEKKworIiBJbml0aWFsaXphdGlvbgorIiA9PT09PT09PT09PT09PQorIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIElnbm9yZSBjYXNlCitzeW4gY2FzZSBpZ25vcmUKKworIiBLZXl3b3JkcworIiA9PT09PT09PQorc3luIGtleXdvcmQgYmliVHlwZSBjb250YWluZWQJYXJ0aWNsZSBib29rIGJvb2tsZXQgY29uZmVyZW5jZSBpbmJvb2sKK3N5biBrZXl3b3JkIGJpYlR5cGUgY29udGFpbmVkCWluY29sbGVjdGlvbiBpbnByb2NlZWRpbmdzIG1hbnVhbAorc3luIGtleXdvcmQgYmliVHlwZSBjb250YWluZWQJbWFzdGVyc3RoZXNpcyBtaXNjIHBoZHRoZXNpcworc3luIGtleXdvcmQgYmliVHlwZSBjb250YWluZWQJcHJvY2VlZGluZ3MgdGVjaHJlcG9ydCB1bnB1Ymxpc2hlZAorc3luIGtleXdvcmQgYmliVHlwZSBjb250YWluZWQJc3RyaW5nCisKK3N5biBrZXl3b3JkIGJpYkVudHJ5S3cgY29udGFpbmVkCWFkZHJlc3MgYW5ub3RlIGF1dGhvciBib29rdGl0bGUgY2hhcHRlcgorc3luIGtleXdvcmQgYmliRW50cnlLdyBjb250YWluZWQJY3Jvc3NyZWYgZWRpdGlvbiBlZGl0b3IgaG93cHVibGlzaGVkCitzeW4ga2V5d29yZCBiaWJFbnRyeUt3IGNvbnRhaW5lZAlpbnN0aXR1dGlvbiBqb3VybmFsIGtleSBtb250aCBub3RlCitzeW4ga2V5d29yZCBiaWJFbnRyeUt3IGNvbnRhaW5lZAludW1iZXIgb3JnYW5pemF0aW9uIHBhZ2VzIHB1Ymxpc2hlcgorc3luIGtleXdvcmQgYmliRW50cnlLdyBjb250YWluZWQJc2Nob29sIHNlcmllcyB0aXRsZSB0eXBlIHZvbHVtZSB5ZWFyCisiIE5vbi1zdGFuZGFyZDoKK3N5biBrZXl3b3JkIGJpYk5TRW50cnlLdyBjb250YWluZWQJYWJzdHJhY3QgaXNibiBpc3NuIGtleXdvcmRzIHVybAorCisiIENsdXN0ZXJzCisiID09PT09PT09CitzeW4gY2x1c3RlciBiaWJWYXJDb250ZW50cwljb250YWlucz1iaWJVbmVzY2FwZWRTcGVjaWFsLGJpYkJyYWNlLGJpYlBhcmVuCisiIFRoaXMgY2x1c3RlciBpcyBlbXB0eSBidXQgdGhpbmdzIGNhbiBiZSBhZGRlZCBleHRlcm5hbGx5OgorInN5biBjbHVzdGVyIGJpYkNvbW1lbnRDb250ZW50cworCisiIE1hdGNoZXMKKyIgPT09PT09PQorc3luIG1hdGNoIGJpYlVuZXNjYXBlZFNwZWNpYWwgY29udGFpbmVkIC9bXlxcXVslJl0vaHM9cysxCitzeW4gbWF0Y2ggYmliS2V5IGNvbnRhaW5lZCAvXHMqW14gXHR9PSJdXCssL2hzPXMsaGU9ZS0xIG5leHRncm91cD1iaWJGaWVsZAorc3luIG1hdGNoIGJpYlZhcmlhYmxlIGNvbnRhaW5lZCAvW157fSwiIFx0PV0vCitzeW4gcmVnaW9uIGJpYkNvbW1lbnQgc3RhcnQ9L14vIGVuZD0vXlxzKkAvbWU9ZS0xIGNvbnRhaW5zPUBiaWJDb21tZW50Q29udGVudHMgbmV4dGdyb3VwPWJpYkVudHJ5CitzeW4gcmVnaW9uIGJpYlF1b3RlIGNvbnRhaW5lZCBzdGFydD0vIi8gZW5kPS8iLyBza2lwPS9cKFxcIlwpLyBjb250YWlucz1AYmliVmFyQ29udGVudHMKK3N5biByZWdpb24gYmliQnJhY2UgY29udGFpbmVkIHN0YXJ0PS97LyBlbmQ9L30vIHNraXA9L1woXFxbe31dXCkvIGNvbnRhaW5zPUBiaWJWYXJDb250ZW50cworc3luIHJlZ2lvbiBiaWJQYXJlbiBjb250YWluZWQgc3RhcnQ9LygvIGVuZD0vKS8gc2tpcD0vXChcXFsoKV1cKS8gY29udGFpbnM9QGJpYlZhckNvbnRlbnRzCitzeW4gcmVnaW9uIGJpYkZpZWxkIGNvbnRhaW5lZCBzdGFydD0iXFNcK1xzKj1ccyoiIGVuZD0vW30pLF0vbWU9ZS0xIGNvbnRhaW5zPWJpYkVudHJ5S3csYmliTlNFbnRyeUt3LGJpYkJyYWNlLGJpYlBhcmVuLGJpYlF1b3RlLGJpYlZhcmlhYmxlCitzeW4gcmVnaW9uIGJpYkVudHJ5RGF0YSBjb250YWluZWQgc3RhcnQ9L1t7KF0vbXM9ZSsxIGVuZD0vW30pXS9tZT1lLTEgY29udGFpbnM9YmliS2V5LGJpYkZpZWxkCisiIEFjdHVhbGx5LCA1LjggPD0gVmltIDwgNi4wIHdvdWxkIGlnbm9yZSB0aGUgYGZvbGQnIGtleXdvcmQgYW55d2F5LCBidXQgVmltPDUuOCB3b3VsZCBwcm9kdWNlCisiIGFuIGVycm9yLCBzbyB3ZSBleHBsaWNpdGx5IGRpc3Rpbmd1aXNoIHZlcnNpb25zIHdpdGggYW5kIHdpdGhvdXQgZm9sZGluZyBmdW5jdGlvbmFsaXR5OgoraWYgdmVyc2lvbiA8IDYwMAorICBzeW4gcmVnaW9uIGJpYkVudHJ5IHN0YXJ0PS9AXFNcK1t7KF0vIGVuZD0vXlxzKlt9KV0vIHRyYW5zcGFyZW50IGNvbnRhaW5zPWJpYlR5cGUsYmliRW50cnlEYXRhIG5leHRncm91cD1iaWJDb21tZW50CitlbHNlCisgIHN5biByZWdpb24gYmliRW50cnkgc3RhcnQ9L0BcU1wrW3soXS8gZW5kPS9eXHMqW30pXS8gdHJhbnNwYXJlbnQgZm9sZCBjb250YWlucz1iaWJUeXBlLGJpYkVudHJ5RGF0YSBuZXh0Z3JvdXA9YmliQ29tbWVudAorZW5kaWYKKworIiBTeW5jaHJvbml6YXRpb24KKyIgPT09PT09PT09PT09PT09CitzeW4gc3luYyBtYXRjaCBBbGwgZ3JvdXBoZXJlIGJpYkVudHJ5IC9eXHMqQC8KK3N5biBzeW5jIG1heGxpbmVzPTIwMAorc3luIHN5bmMgbWlubGluZXM9NTAKKworIiBIaWdobGlnaHRpbmcgZGVmYXVsdHMKKyIgPT09PT09PT09PT09PT09PT09PT09CisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9iaWJfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfYmliX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisgIEhpTGluayBiaWJUeXBlCUlkZW50aWZpZXIKKyAgSGlMaW5rIGJpYkVudHJ5S3cJU3RhdGVtZW50CisgIEhpTGluayBiaWJOU0VudHJ5S3cJUHJlUHJvYworICBIaUxpbmsgYmliS2V5CQlTcGVjaWFsCisgIEhpTGluayBiaWJWYXJpYWJsZQlDb25zdGFudAorICBIaUxpbmsgYmliVW5lc2NhcGVkU3BlY2lhbAlFcnJvcgorICBIaUxpbmsgYmliQ29tbWVudAlDb21tZW50CisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJiaWIiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9iaW5kem9uZS52aW0gYi9ydW50aW1lL3N5bnRheC9iaW5kem9uZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyM2UyMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2JpbmR6b25lLnZpbQpAQCAtMCwwICsxLDk4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJQklORCA4Lnggem9uZSBmaWxlcyAoUkZDMTAzNSkKKyIgTWFpbnRhaW5lcjoJZ2xvcnkgaHVtcCA8cm5kQHdlYi1kcml2ZS5ydT4KKyIgTGFzdCBjaGFuZ2U6CVRodSBBcHIgMjYgMDI6MTY6MTggU0FNU1QgMjAwMQorIiBGaWxlbmFtZXM6CS92YXIvbmFtZWQvKgorIiBVUkw6CWh0dHA6Ly9ybmQud2ViLWRyaXZlLnJ1L3ZpbS9zeW50YXgvYmluZHpvbmUudmltCisiICRJZCQKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBtYXRjaAorCitpZiB2ZXJzaW9uID49IDYwMAorICBzZXRsb2NhbCBpc2tleXdvcmQ9LiwtLDQ4LTU4LEEtWixhLXosXworZWxzZQorICBzZXQgaXNrZXl3b3JkPS4sLSw0OC01OCxBLVosYS16LF8KK2VuZGlmCisKKworIiBNYXN0ZXIgRmlsZSBGb3JtYXQgKHJmYyAxMDM1KQorCisiIGRpcmVjdGl2ZXMKK3N5biByZWdpb24Jem9uZVJSZWNvcmQJc3RhcnQ9K14rIGVuZD0rJCsgY29udGFpbnM9em9uZUxIU0RvbWFpbix6b25lTEhTSVAsem9uZUlsbGVnYWxEb20sem9uZVdoaXRlc3BhY2Usem9uZUNvbW1lbnQsem9uZVBhcmVuLHpvbmVTcGVjaWFsCitzeW4gbWF0Y2gJem9uZURpcmVjdGl2ZQkvXCRPUklHSU5cc1wrLyBuZXh0Z3JvdXA9em9uZURvbWFpbix6b25lSWxsZWdhbERvbQorc3luIG1hdGNoCXpvbmVEaXJlY3RpdmUJL1wkVFRMXHNcKy8gbmV4dGdyb3VwPXpvbmVUVEwKK3N5biBtYXRjaAl6b25lRGlyZWN0aXZlCS9cJElOQ0xVREVcc1wrLworc3luIG1hdGNoCXpvbmVEaXJlY3RpdmUJL1wkR0VORVJBVEVccy8KKworc3luIG1hdGNoCXpvbmVXaGl0ZXNwYWNlCWNvbnRhaW5lZCAvXlxzXCsvIG5leHRncm91cD16b25lVFRMLHpvbmVDbGFzcyx6b25lUlJUeXBlCitzeW4gbWF0Y2gJem9uZUVycm9yCSJcc1wrJCIKK3N5biBtYXRjaAl6b25lU3BlY2lhbAljb250YWluZWQgL15bQC5dXHNcKy8gbmV4dGdyb3VwPXpvbmVUVEwsem9uZUNsYXNzLHpvbmVSUlR5cGUKK3N5biBtYXRjaAl6b25lU3BlY2lhbAljb250YWluZWQgL0AkLworCisiIGRvbWFpbnMgYW5kIElQcworc3luIG1hdGNoCXpvbmVMSFNEb21haW4JY29udGFpbmVkIC9eWy0wLTlBLVphLXouXVwrXHNcKy8gbmV4dGdyb3VwPXpvbmVUVEwsem9uZUNsYXNzLHpvbmVSUlR5cGUKK3N5biBtYXRjaAl6b25lTEhTSVAJY29udGFpbmVkIC9eWzAtOV1cezEsM31cKFwuWzAtOV1cezEsM31cKVx7LDN9XHNcKy8gbmV4dGdyb3VwPXpvbmVUVEwsem9uZUNsYXNzLHpvbmVSUlR5cGUKK3N5biBtYXRjaAl6b25lSVBhZGRyCWNvbnRhaW5lZCAvXDxbMC05XVx7MSwzfVwoXC5bMC05XVx7MSwzfVwpXHssM31cPi8KK3N5biBtYXRjaAl6b25lRG9tYWluCWNvbnRhaW5lZCAvXDxbMC05QS1aYS16XVstMC05QS1aYS16Ll1cK1w+LworCitzeW4gbWF0Y2gJem9uZUlsbGVnYWxEb20JY29udGFpbmVkIC9cUypbXi1BLVphLXowLTkuWzpzcGFjZTpdXVxTKlw+LworInN5biBtYXRjaAl6b25lSWxsZWdhbERvbQljb250YWluZWQgL1swLTldXFMqWy1BLVphLXpdXFMqLworCisiIGtleXdvcmRzCitzeW4ga2V5d29yZAl6b25lQ2xhc3MJSU4gQ0hBT1MgbmV4dGdyb3VwPXpvbmVSUlR5cGUKKworc3luIG1hdGNoCXpvbmVUVEwJY29udGFpbmVkIC9cPFswLTlIaFd3RGRdXCtcc1wrLyBuZXh0Z3JvdXA9em9uZUNsYXNzLHpvbmVSUlR5cGUKK3N5biBtYXRjaAl6b25lUlJUeXBlCWNvbnRhaW5lZCAvXHMqXDxcKE5TXHxISU5GT1wpXHNcKy8gbmV4dGdyb3VwPXpvbmVTcGVjaWFsLHpvbmVEb21haW4KK3N5biBtYXRjaAl6b25lUlJUeXBlCWNvbnRhaW5lZCAvXHMqXDxDTkFNRVxzXCsvIG5leHRncm91cD16b25lRG9tYWluLHpvbmVTcGVjaWFsCitzeW4gbWF0Y2gJem9uZVJSVHlwZQljb250YWluZWQgL1xzKlw8U09BXHNcKy8gbmV4dGdyb3VwPXpvbmVEb21haW4sem9uZUlsbGVnYWxEb20KK3N5biBtYXRjaAl6b25lUlJUeXBlCWNvbnRhaW5lZCAvXHMqXDxQVFJcc1wrLyBuZXh0Z3JvdXA9em9uZURvbWFpbix6b25lSWxsZWdhbERvbQorc3luIG1hdGNoCXpvbmVSUlR5cGUJY29udGFpbmVkIC9ccypcPE1YXHNcKy8gbmV4dGdyb3VwPXpvbmVNYWlsUHJpbworc3luIG1hdGNoCXpvbmVSUlR5cGUJY29udGFpbmVkIC9ccypcPEFcc1wrLyBuZXh0Z3JvdXA9em9uZUlQYWRkcix6b25lSWxsZWdhbERvbQorCisiIEZJWE1FOiBjYXRjaHVwIHNlcmlhbCBudW1iZXIKK3N5biBtYXRjaAl6b25lU2VyaWFsCWNvbnRhaW5lZCAvXDxbMC05XVx7OX1cPi8KKworc3luIG1hdGNoCXpvbmVNYWlsUHJpbwljb250YWluZWQgL1w8WzAtOV1cK1xzKi8gbmV4dGdyb3VwPXpvbmVEb21haW4sem9uZUlsbGVnYWxEb20KK3N5biBtYXRjaAl6b25lRXJyUGFyZW4JLykvCitzeW4gcmVnaW9uCXpvbmVQYXJlbgljb250YWluZWQgc3RhcnQ9KygrIGVuZD0rKSsgY29udGFpbnM9em9uZVNlcmlhbCx6b25lVFRMLHpvbmVDb21tZW50CitzeW4gbWF0Y2gJem9uZUNvbW1lbnQJIjsuKiIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYmluZF96b25lX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2JpbmRfem9uZV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB6b25lQ29tbWVudAlDb21tZW50CisgIEhpTGluayB6b25lRGlyZWN0aXZlCU1hY3JvCisgIEhpTGluayB6b25lTEhTRG9tYWluCVN0YXRlbWVudAorICBIaUxpbmsgem9uZUxIU0lQCVN0YXRlbWVudAorICBIaUxpbmsgem9uZUNsYXNzCUluY2x1ZGUKKyAgSGlMaW5rIHpvbmVTcGVjaWFsCVNwZWNpYWwKKyAgSGlMaW5rIHpvbmVSUlR5cGUJVHlwZQorICBIaUxpbmsgem9uZUVycm9yCUVycm9yCisgIEhpTGluayB6b25lRXJyUGFyZW4JRXJyb3IKKyAgSGlMaW5rIHpvbmVJbGxlZ2FsRG9tCUVycm9yCisgIEhpTGluayB6b25lU2VyaWFsCVRvZG8KKyAgSGlMaW5rIHpvbmVJUGFkZHIJTnVtYmVyCisgIEhpTGluayB6b25lRG9tYWluCUlkZW50aWZpZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYmluZHpvbmUiCisKKyIgdmltOiB0cz0xNwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYmxhbmsudmltIGIvcnVudGltZS9zeW50YXgvYmxhbmsudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NTQzMzkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9ibGFuay52aW0KQEAgLTAsMCArMSw0NiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBCbGFuayAxLjQuMQorIiBNYWludGFpbmVyOiAgIFJhZmFsIE0uIFN1bGVqbWFuIDx1bmVmdW5nZUBmcmlrbzIub25ldC5wbD4KKyIgTGFzdCBjaGFuZ2U6ICAyMSBKdWwgMjAwMAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCisiIEJsYW5rIGluc3RydWN0aW9ucworc3luIG1hdGNoIGJsYW5rSW5zdHJ1Y3Rpb24gIntbOjssXC4rXC0qJCNAL1xcYCciIVx8Pjx7fVxbXF0oKT94c3BvXF4mXH49XyVdfSIKKworIiBDb21tb24gc3RyaW5ncworc3luIG1hdGNoIGJsYW5rU3RyaW5nICJcfltefV0iCisKKyIgTnVtYmVycworc3luIG1hdGNoIGJsYW5rTnVtYmVyICJcW1swLTldXCtcXSIKKworc3luIGNhc2UgbWF0Y2gKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYmxhbmtfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfYmxhbmtfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgYmxhbmtJbnN0cnVjdGlvbiAgICAgIFN0YXRlbWVudAorICBIaUxpbmsgYmxhbmtOdW1iZXIJICAgICAgIE51bWJlcgorICBIaUxpbmsgYmxhbmtTdHJpbmcJICAgICAgIFN0cmluZworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJibGFuayIKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9idG0udmltIGIvcnVudGltZS9zeW50YXgvYnRtLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQ1YjJkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvYnRtLnZpbQpAQCAtMCwwICsxLDIyOSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CTREb3MgYmF0Y2ggZmlsZQorIiBNYWludGFpbmVyOglKb2huIExlbyBTcGV0eiA8amxzMTFAcG8uY3dydS5lZHU+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorCisiLy9Jc3N1ZXMgdG8gcmVzb2x2ZToKKyIvLy0gQm9vbGVhbiBvcGVyYXRvcnMgc3Vycm91bmRlZCBieSBwZXJpb2QgYXJlIHJlY29nbml6ZWQgYnV0IHRoZQorIi8vICBwZXJpb2RzIGFyZSBub3QgaGlnaGxpZ2h0ZWQuICBUaGUgb25seSB3YXkgdG8gZG8gdGhhdCB3b3VsZAorIi8vICBiZSBzZXBhcmF0ZSBzeW5tYXRjaGVzIGZvciBlYWNoIHBvc3NpYmlsaXR5IG90aGVyd2lzZSBhIG1vcmUKKyIvLyAgZ2VuZXJhbCBcLlxpXCtcLiB3aWxsIGhpZ2hsaWdodCBhbnl0aGluZyBkZWxpbWl0ZWQgYnkgZG90cy4KKyIvLy0gQWZ0ZXIgdW5hcnkgb3BlcmF0b3JzIGxpa2UgImRlZmluZWQiIGNhbiBhc3N1bWUgdG9rZW4gdHlwZS4KKyIvLyAgU2hvdWxkIHRoZXJlIGJlIG1vcmUgb2YgdGhlc2U/CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKK3N5biBrZXl3b3JkIGJ0bVN0YXRlbWVudAljYWxsIG9mZgorc3luIGtleXdvcmQgYnRtQ29uZGl0aW9uYWwJaWYgaWZmIGVuZGlmZiB0aGVuIGVsc2UgZWxzZWlmZiBub3QgZXJyb3JsZXZlbAorc3luIGtleXdvcmQgYnRtQ29uZGl0aW9uYWwJZ3QgbHQgZXEgbmUgZ2UgbGUKK3N5biBtYXRjaCBidG1Db25kaXRpb25hbCB0cmFuc3BhcmVudCAgICAiXC5caVwrXC4iIGNvbnRhaW5zPWJ0bURvdEJvb2xPcAorc3luIGtleXdvcmQgYnRtRG90Qm9vbE9wIGNvbnRhaW5lZCAgICAgIGFuZCBvciB4b3IKK3N5biBtYXRjaCBidG1Db25kaXRpb25hbAkiPT0iCitzeW4gbWF0Y2ggYnRtQ29uZGl0aW9uYWwJIiE9Igorc3luIGtleXdvcmQgYnRtQ29uZGl0aW9uYWwJZGVmaW5lZCBlcnJvcmxldmVsIGV4aXN0IGlzYWxpYXMKK3N5biBrZXl3b3JkIGJ0bUNvbmRpdGlvbmFsCWlzZGlyIGRpcmV4aXN0IGlzaW50ZXJuYWwgaXNsYWJlbAorc3luIGtleXdvcmQgYnRtUmVwZWF0CQlmb3IgaW4gZG8gZW5kZG8KKworc3luIGtleXdvcmQgYnRtVG9kbyBjb250YWluZWQJVE9ETworCisiIFN0cmluZworc3luIGNsdXN0ZXIgYnRtVmFycyBjb250YWlucz1idG1WYXJpYWJsZSxidG1Bcmd1bWVudCxidG1CSUZNYXRjaAorc3luIHJlZ2lvbiAgYnRtU3RyaW5nCXN0YXJ0PSsiKyAgZW5kPSsiKyBjb250YWlucz1AYnRtVmFycworc3luIG1hdGNoIGJ0bU51bWJlciAgICAgIlw8XGRcK1w+IgorCisic3luIG1hdGNoICBidG1JZGVudGlmaWVyCSJcPFxoXHcqXD4iCisKKyIgSWYgeW91IGRvbid0IGxpa2UgdGFicworInN5biBtYXRjaCBidG1TaG93VGFiICJcdCIKKyJzeW4gbWF0Y2ggYnRtU2hvd1RhYmMgIlx0IgorInN5biBtYXRjaCAgYnRtQ29tbWVudAkJIl5cICpyZW0uKiQiIGNvbnRhaW5zPWJ0bVRvZG8sYnRtU2hvd1RhYmMKKworIiBTb21lIHBlb3BsZSB1c2UgdGhpcyBhcyBhIGNvbW1lbnQgbGluZQorIiBJbiBmYWN0IHRoaXMgaXMgYSBMYWJlbAorInN5biBtYXRjaCBidG1Db21tZW50CQkiXlwgKjpcIFwrLiokIiBjb250YWlucz1idG1Ub2RvCisKK3N5biBtYXRjaCBidG1Db21tZW50CQkiXlwgKnJlbS4qJCIgY29udGFpbnM9YnRtVG9kbworc3luIG1hdGNoIGJ0bUNvbW1lbnQJCSJeXCAqOjouKiQiIGNvbnRhaW5zPWJ0bVRvZG8KKworc3luIG1hdGNoIGJ0bUxhYmVsTWFyawkJIl5cICo6WzAtOWEtekEtWl9cLV1cK1w+Igorc3luIG1hdGNoIGJ0bUxhYmVsTWFyawkJImdvdG8gWzAtOWEtekEtWl9cLV1cK1w+ImxjPTUKK3N5biBtYXRjaCBidG1MYWJlbE1hcmsJCSJnb3N1YiBbMC05YS16QS1aX1wtXVwrXD4ibGM9NgorCisiIHN5biBtYXRjaCBidG1DbWREaXZpZGVyICI+Wz4mXVs+Jl1cPSIKK3N5biBtYXRjaCBidG1DbWREaXZpZGVyICI+Wz4mXSoiCitzeW4gbWF0Y2ggYnRtQ21kRGl2aWRlciAiPj4mPiIKK3N5biBtYXRjaCBidG1DbWREaXZpZGVyICJ8Jlw9Igorc3luIG1hdGNoIGJ0bUNtZERpdmlkZXIgIiUrIgorc3luIG1hdGNoIGJ0bUNtZERpdmlkZXIgIlxeIgorCitzeW4gcmVnaW9uIGJ0bUVjaG8gc3RhcnQ9ImVjaG8iIHNraXA9ImVjaG8iIG1hdGNoZ3JvdXA9YnRtQ21kRGl2aWRlciBlbmQ9IiUrIiBlbmQ9IiQiIGVuZD0ifCZcPSIgZW5kPSJcXiIgZW5kPSI+Wz4mXSoiIGNvbnRhaW5zPUBidG1FY2hvcyBvbmVsaW5lCitzeW4gY2x1c3RlciBidG1FY2hvcyBjb250YWlucz1AYnRtVmFycyxidG1FY2hvQ29tbWFuZCxidG1FY2hvUGFyYW0KK3N5biBrZXl3b3JkIGJ0bUVjaG9Db21tYW5kIGNvbnRhaW5lZAllY2hvIGVjaG9lcnIgZWNob3MgZWNob3NlcnIKK3N5biBrZXl3b3JkIGJ0bUVjaG9QYXJhbSBjb250YWluZWQJb24gb2ZmCisKKyIgdGhpcyBpcyBhbHNvIGEgdmFsaWQgTGFiZWwuIEkgZG9uJ3QgdXNlIGl0LgorInN5biBtYXRjaCBidG1MYWJlbE1hcmsJCSJeXCAqOlwgXCtbMC05YS16QS1aX1wtXVwrXD4iCisKKyIgLy9FbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgZXhwYW5kZWQgdXNpbmcgbm90YXRpb24gJXZhciBpbiA0RE9TCitzeW4gbWF0Y2ggYnRtVmFyaWFibGUJCSIlWzAtOWEtel9cLV1cKyIgY29udGFpbnM9QGJ0bVNwZWNpYWxWYXJzCisiIC8vRW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIGV4cGFuZGVkIHVzaW5nIG5vdGF0aW9uICV2YXIlCitzeW4gbWF0Y2ggYnRtVmFyaWFibGUJCSIlWzAtOWEtel9cLV0qJSIgY29udGFpbnM9QGJ0bVNwZWNpYWxWYXJzCisiIC8vVGhlIGZvbGxvd2luZyBhcmUgc3BlY2lhbCB2YXJpYWJsZSBpbiA0RE9TCitzeW4gbWF0Y2ggYnRtVmFyaWFibGUJCSIlWz0jXSIgY29udGFpbnM9QGJ0bVNwZWNpYWxWYXJzCitzeW4gbWF0Y2ggYnRtVmFyaWFibGUJCSIlPz9cPSIgY29udGFpbnM9QGJ0bVNwZWNpYWxWYXJzCisiIC8vRW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIGV4cGFuZGVkIHVzaW5nIG5vdGF0aW9uICVbdmFyXSBpbiA0RE9TCitzeW4gbWF0Y2ggYnRtVmFyaWFibGUJCSIlXFtbMC05YS16X1wtXSpcXSIKKyIgLy9BZnRlciBzb21lIGtleXdvcmRzIG5leHQgd29yZCBzaG91bGQgYmUgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKK3N5biBtYXRjaCBidG1WYXJpYWJsZQkJImRlZmluZWRcc1xpXCsibGM9OAorc3luIG1hdGNoIGJ0bVZhcmlhYmxlCQkic2V0XHNcaVwrImxjPTQKKyIgLy9QYXJhbWV0ZXJzIHRvIGJhdGNoZmlsZXMgdGFrZSB0aGUgZm9ybWF0ICU8ZGlnaXQ+CitzeW4gbWF0Y2ggYnRtQXJndW1lbnQJCSIlXGRcPiIKKyIgLy80RE9TIGFsbG93cyBmb3JtYXQgJTxkaWdpdD4mIG1lYW5pbmcgYmF0Y2hmaWxlIHBhcmFtZXRlcnMgZGlnaXQgYW5kIHVwCitzeW4gbWF0Y2ggYnRtQXJndW1lbnQJCSIlXGRcPiYiCisiIC8vVmFyaWFibGUgdXNlZCBieSBGT1IgbG9vcHMgc29tZXRpbWVzIHVzZSAlJTxsZXR0ZXI+IGluIGJhdGNoZmlsZXMKK3N5biBtYXRjaCBidG1Bcmd1bWVudAkJIiUlXGFcPiIKKworIiAvL1Nob3cgNERPUyBidWlsdC1pbiBmdW5jdGlvbnMgc3BlY2lhbGx5CitzeW4gbWF0Y2ggYnRtQklGTWF0Y2ggIiVAXHdcK1xbImhlPWUtMSBjb250YWlucz1idG1CdWlsdEluRnVuYworc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCWFsaWFzIGFzY2lpIGF0dHJpYiBjZHJvbQorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCWNoYXIgY2xpcCBjb21tYSBjb252ZXJ0CitzeW4ga2V5d29yZCBidG1CdWlsdEluRnVuYyBjb250YWluZWQJZGF0ZSBkYXkgZGVjIGRlc2NyaXB0CitzeW4ga2V5d29yZCBidG1CdWlsdEluRnVuYyBjb250YWluZWQJZGV2aWNlIGRpc2tmcmVlIGRpc2t0b3RhbAorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCWRpc2t1c2VkIGRvc21lbSBkb3cgZG93aQorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCWRveSBlbXMgZXZhbCBleGVjIGV4ZWNzdHIKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5GdW5jIGNvbnRhaW5lZAlleHBhbmQgZXh0IGV4dGVuZGVkCitzeW4ga2V5d29yZCBidG1CdWlsdEluRnVuYyBjb250YWluZWQJZmlsZWFnZSBmaWxlY2xvc2UgZmlsZWRhdGUKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5GdW5jIGNvbnRhaW5lZAlmaWxlbmFtZSBmaWxlb3BlbiBmaWxlcmVhZAorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCWZpbGVzIGZpbGVzZWVrIGZpbGVzZWVrbAorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCWZpbGVzaXplIGZpbGV0aW1lIGZpbGV3cml0ZQorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCWZpbGV3cml0ZWIgZmluZGNsb3NlCitzeW4ga2V5d29yZCBidG1CdWlsdEluRnVuYyBjb250YWluZWQJZmluZGZpcnN0IGZpbmRuZXh0IGZvcm1hdAorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCWZ1bGwgaWYgaW5jIGluZGV4IGluc2VydAorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCWluc3RyIGludCBsYWJlbCBsZWZ0IGxlbgorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCWxmbiBsaW5lIGxpbmVzIGxvd2VyIGxwdAorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCW1ha2VhZ2UgbWFrZWRhdGUgbWFrZXRpbWUKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5GdW5jIGNvbnRhaW5lZAltYXN0ZXIgbW9udGggbmFtZSBudW1lcmljCitzeW4ga2V5d29yZCBidG1CdWlsdEluRnVuYyBjb250YWluZWQJcGF0aCByYW5kb20gcmVhZHNjciByZWFkeQorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCXJlbW90ZSByZW1vdmFibGUgcmVwZWF0CitzeW4ga2V5d29yZCBidG1CdWlsdEluRnVuYyBjb250YWluZWQJcmVwbGFjZSByaWdodCBzZWFyY2gKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5GdW5jIGNvbnRhaW5lZAlzZWxlY3Qgc2ZuIHN0cmlwIHN1YnN0cgorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCXRpbWUgdGltZXIgdHJpbSB0cnVlbmFtZQorc3luIGtleXdvcmQgYnRtQnVpbHRJbkZ1bmMgY29udGFpbmVkCXVuaXF1ZSB1cHBlciB3aWxkIHdvcmQKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5GdW5jIGNvbnRhaW5lZAl3b3JkcyB4bXMgeWVhcgorCitzeW4gY2x1c3RlciBidG1TcGVjaWFsVmFycyBjb250YWlucz1idG1CdWlsdEluVmFyLGJ0bVNwZWNpYWxWYXIKKworIiAvL1Nob3cgc3BlY2lhbGl6ZWQgdmFyaWFibGVzIHNwZWNpYWxseQorIiBzeW4gbWF0Y2ggYnRtU3BlY2lhbFZhciBjb250YWluZWQJIisiCitzeW4gbWF0Y2ggYnRtU3BlY2lhbFZhciBjb250YWluZWQJIj0iCitzeW4gbWF0Y2ggYnRtU3BlY2lhbFZhciBjb250YWluZWQJIiMiCitzeW4gbWF0Y2ggYnRtU3BlY2lhbFZhciBjb250YWluZWQJIj8/XD0iCitzeW4ga2V5d29yZCBidG1TcGVjaWFsVmFyIGNvbnRhaW5lZAljbWRsaW5lIGNvbG9yZGlyIGNvbXNwZWMKK3N5biBrZXl3b3JkIGJ0bVNwZWNpYWxWYXIgY29udGFpbmVkCWNvcHljbWQgZGlyY21kIHRlbXAgdGVtcDRkb3MKK3N5biBrZXl3b3JkIGJ0bVNwZWNpYWxWYXIgY29udGFpbmVkCWZpbGVjb21wbGV0aW9uIHBhdGggcHJvbXB0CisKKyIgLy9TaG93IDRET1MgYnVpbHQtaW4gdmFyaWFibGVzIHNwZWNpYWxseSBzcGVjaWFsbHkKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5WYXIgY29udGFpbmVkCV80dmVyIF9hbGlhcyBfYW5zaQorc3luIGtleXdvcmQgYnRtQnVpbHRJblZhciBjb250YWluZWQJX2FwYmF0dCBfYXBsaWZlIF9hcG1hYyBfYmF0Y2gKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5WYXIgY29udGFpbmVkCV9iYXRjaGxpbmUgX2JhdGNobmFtZSBfYmcKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5WYXIgY29udGFpbmVkCV9ib290IF9jaSBfY21kcHJvYyBfY28KK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5WYXIgY29udGFpbmVkCV9jb2RlcGFnZSBfY29sdW1uIF9jb2x1bW5zCitzeW4ga2V5d29yZCBidG1CdWlsdEluVmFyIGNvbnRhaW5lZAlfY291bnRyeSBfY3B1IF9jd2QgX2N3ZHMgX2N3cAorc3luIGtleXdvcmQgYnRtQnVpbHRJblZhciBjb250YWluZWQJX2N3cHMgX2RhdGUgX2RheSBfZGlzayBfZG5hbWUKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5WYXIgY29udGFpbmVkCV9kb3MgX2Rvc3ZlciBfZG93IF9kb3dpIF9kb3kKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5WYXIgY29udGFpbmVkCV9kcG1pIF9kdiBfZW52IF9mZyBfaGxvZ2ZpbGUKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5WYXIgY29udGFpbmVkCV9ob3VyIF9rYmhpdCBfa3N0YWNrIF9sYXN0ZGlzaworc3luIGtleXdvcmQgYnRtQnVpbHRJblZhciBjb250YWluZWQJX2xvZ2ZpbGUgX21pbnV0ZSBfbW9uaXRvcgorc3luIGtleXdvcmQgYnRtQnVpbHRJblZhciBjb250YWluZWQJX21vbnRoIF9tb3VzZSBfbmRwIF9yb3cgX3Jvd3MKK3N5biBrZXl3b3JkIGJ0bUJ1aWx0SW5WYXIgY29udGFpbmVkCV9zZWNvbmQgX3NoZWxsIF9zd2FwcGluZworc3luIGtleXdvcmQgYnRtQnVpbHRJblZhciBjb250YWluZWQJX3N5c2VyciBfdGltZSBfdHJhbnNpZW50CitzeW4ga2V5d29yZCBidG1CdWlsdEluVmFyIGNvbnRhaW5lZAlfdmlkZW8gX3dpbiBfd2ludGl0bGUgX3llYXIKKworIiAvL0NvbW1hbmRzIGluIDRET1MgYW5kL29yIERPUworc3luIG1hdGNoIGJ0bUNvbW1hbmQJIlxzPyIKK3N5biBtYXRjaCBidG1Db21tYW5kCSJePyIKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJYWxpYXMgYXBwZW5kIGFzc2lnbiBhdHRyaWIKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJYmFja3VwIGJlZXAgYnJlYWsgY2FuY2VsIGNhc2UKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJY2QgY2RkIGNkcGF0aCBjaGNwIGNoZGlyCitzeW4ga2V5d29yZCBidG1Db21tYW5kCWNoa2RzayBjbHMgY29sb3IgY29tcCBjb3B5CitzeW4ga2V5d29yZCBidG1Db21tYW5kCWN0dHkgZGF0ZSBkZWJ1ZyBkZWZhdWx0IGRlZnJhZworc3luIGtleXdvcmQgYnRtQ29tbWFuZAlkZWwgZGVsYXkgZGVzY3JpYmUgZGlyCitzeW4ga2V5d29yZCBidG1Db21tYW5kCWRpcmhpc3RvcnkgZGlycyBkaXNrY29tcAorc3luIGtleXdvcmQgYnRtQ29tbWFuZAlkaXNrY29weSBkb3NrZXkgZG9zc2hlbGwKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJZHJhd2JveCBkcmF3aGxpbmUgZHJhd3ZsaW5lCisic3luIGtleXdvcmQgYnRtQ29tbWFuZAllY2hvIGVjaG9lcnIgZWNob3MgZWNob3NlcnIKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJZWRpdCBlZGxpbiBlbW0zODYgZW5kbG9jYWwKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJZW5kc3dpdGNoIGVyYXNlIGVzZXQgZXhjZXB0CitzeW4ga2V5d29yZCBidG1Db21tYW5kCWV4ZTJiaW4gZXhpdCBleHBhbmQgZmFzdG9wZW4KK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJZmMgZmRpc2sgZmZpbmQgZmluZCBmb3JtYXQKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJZnJlZSBnbG9iYWwgZ29zdWIgZ290bworc3luIGtleXdvcmQgYnRtQ29tbWFuZAlncmFmdGFibCBncmFwaGljcyBoZWxwIGhpc3RvcnkKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJaW5rZXkgaW5wdXQgam9pbiBrZXliIGtleWJkCitzeW4ga2V5d29yZCBidG1Db21tYW5kCWtleXN0YWNrIGxhYmVsIGxoIGxpc3QgbG9hZGJ0bQorc3luIGtleXdvcmQgYnRtQ29tbWFuZAlsb2FkaGlnaCBsb2NrIGxvZyBtZCBtZW0KK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJbWVtb3J5IG1pcnJvciBta2RpciBtb2RlIG1vcmUKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJbW92ZSBubHNmdW5jIG9uIG9wdGlvbiBwYXRoCitzeW4ga2V5d29yZCBidG1Db21tYW5kCXBhdXNlIHBvcGQgcHJpbnQgcHJvbXB0IHB1c2hkCitzeW4ga2V5d29yZCBidG1Db21tYW5kCXF1aXQgcmQgcmVib290IHJlY292ZXIgcmVuCitzeW4ga2V5d29yZCBidG1Db21tYW5kCXJlbmFtZSByZXBsYWNlIHJlc3RvcmUgcmV0dXJuCitzeW4ga2V5d29yZCBidG1Db21tYW5kCXJtZGlyIHNjYW5kaXNrIHNjcmVlbiBzY3JwdXQKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJc2VsZWN0IHNldCBzZXRkb3Mgc2V0bG9jYWwKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJc2V0dmVyIHNoYXJlIHNoaWZ0IHNvcnQgc3Vic3QKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJc3dhcHBpbmcgc3dpdGNoIHN5cyB0ZWUgdGV4dAorc3luIGtleXdvcmQgYnRtQ29tbWFuZAl0aW1lIHRpbWVyIHRvdWNoIHRyZWUgdHJ1ZW5hbWUKK3N5biBrZXl3b3JkIGJ0bUNvbW1hbmQJdHlwZSB1bmFsaWFzIHVuZGVsZXRlIHVuZm9ybWF0CitzeW4ga2V5d29yZCBidG1Db21tYW5kCXVubG9jayB1bnNldCB2ZXIgdmVyaWZ5IHZvbAorc3luIGtleXdvcmQgYnRtQ29tbWFuZAl2c2NycHV0IHkKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfYnRtX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2J0bV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBidG1MYWJlbAkJU3BlY2lhbAorICBIaUxpbmsgYnRtTGFiZWxNYXJrCQlTcGVjaWFsCisgIEhpTGluayBidG1DbWREaXZpZGVyCQlTcGVjaWFsCisgIEhpTGluayBidG1Db25kaXRpb25hbAkJYnRtU3RhdGVtZW50CisgIEhpTGluayBidG1Eb3RCb29sT3AJCWJ0bVN0YXRlbWVudAorICBIaUxpbmsgYnRtUmVwZWF0CQlidG1TdGF0ZW1lbnQKKyAgSGlMaW5rIGJ0bUVjaG9Db21tYW5kCWJ0bVN0YXRlbWVudAorICBIaUxpbmsgYnRtRWNob1BhcmFtCQlidG1TdGF0ZW1lbnQKKyAgSGlMaW5rIGJ0bVN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBidG1Ub2RvCQlUb2RvCisgIEhpTGluayBidG1TdHJpbmcJCVN0cmluZworICBIaUxpbmsgYnRtTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIGJ0bUNvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGJ0bUFyZ3VtZW50CQlJZGVudGlmaWVyCisgIEhpTGluayBidG1WYXJpYWJsZQkJSWRlbnRpZmllcgorICBIaUxpbmsgYnRtRWNobwkJU3RyaW5nCisgIEhpTGluayBidG1CSUZNYXRjaAkJYnRtU3RhdGVtZW50CisgIEhpTGluayBidG1CdWlsdEluRnVuYwkJYnRtU3RhdGVtZW50CisgIEhpTGluayBidG1CdWlsdEluVmFyCQlidG1TdGF0ZW1lbnQKKyAgSGlMaW5rIGJ0bVNwZWNpYWxWYXIJCWJ0bVN0YXRlbWVudAorICBIaUxpbmsgYnRtQ29tbWFuZAkJYnRtU3RhdGVtZW50CisKKyAgIm9wdGlvbmFsIGhpZ2hsaWdodGluZworICAiSGlMaW5rIGJ0bVNob3dUYWIJCUVycm9yCisgICJIaUxpbmsgYnRtU2hvd1RhYmMJCUVycm9yCisgICJoaUxpbmsgYnRtSWRlbnRpZmllcgkJSWRlbnRpZmllcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJidG0iCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jLnZpbSBiL3J1bnRpbWUvc3ludGF4L2MudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OWJlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jLnZpbQpAQCAtMCwwICsxLDM0NSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUMKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgRmViIDA0CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBBIGJ1bmNoIG9mIHVzZWZ1bCBDIGtleXdvcmRzCitzeW4ga2V5d29yZAljU3RhdGVtZW50CWdvdG8gYnJlYWsgcmV0dXJuIGNvbnRpbnVlIGFzbQorc3luIGtleXdvcmQJY0xhYmVsCQljYXNlIGRlZmF1bHQKK3N5biBrZXl3b3JkCWNDb25kaXRpb25hbAlpZiBlbHNlIHN3aXRjaAorc3luIGtleXdvcmQJY1JlcGVhdAkJd2hpbGUgZm9yIGRvCisKK3N5biBrZXl3b3JkCWNUb2RvCQljb250YWluZWQgVE9ETyBGSVhNRSBYWFgKKworIiBjQ29tbWVudEdyb3VwIGFsbG93cyBhZGRpbmcgbWF0Y2hlcyBmb3Igc3BlY2lhbCB0aGluZ3MgaW4gY29tbWVudHMKK3N5biBjbHVzdGVyCWNDb21tZW50R3JvdXAJY29udGFpbnM9Y1RvZG8KKworIiBTdHJpbmcgYW5kIENoYXJhY3RlciBjb25zdGFudHMKKyIgSGlnaGxpZ2h0IHNwZWNpYWwgY2hhcmFjdGVycyAodGhvc2Ugd2hpY2ggaGF2ZSBhIGJhY2tzbGFzaCkgZGlmZmVyZW50bHkKK3N5biBtYXRjaAljU3BlY2lhbAlkaXNwbGF5IGNvbnRhaW5lZCAiXFxcKHhceFwrXHxcb1x7MSwzfVx8Llx8JFwpIgoraWYgIWV4aXN0cygiY19ub191dGYiKQorICBzeW4gbWF0Y2gJY1NwZWNpYWwJZGlzcGxheSBjb250YWluZWQgIlxcXCh1XHhcezR9XHxVXHhcezh9XCkiCitlbmRpZgoraWYgZXhpc3RzKCJjX25vX2Nmb3JtYXQiKQorICBzeW4gcmVnaW9uCWNTdHJpbmcJCXN0YXJ0PStMXD0iKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9Y1NwZWNpYWwsQFNwZWxsCisgICIgY0NwcFN0cmluZzogc2FtZSBhcyBjU3RyaW5nLCBidXQgZW5kcyBhdCBlbmQgb2YgbGluZQorICBzeW4gcmVnaW9uCWNDcHBTdHJpbmcJc3RhcnQ9K0xcPSIrIHNraXA9K1xcXFxcfFxcIlx8XFwkKyBleGNsdWRlbmwgZW5kPSsiKyBlbmQ9JyQnIGNvbnRhaW5zPWNTcGVjaWFsLEBTcGVsbAorZWxzZQorICBzeW4gbWF0Y2gJY0Zvcm1hdAkJZGlzcGxheSAiJVwoXGRcK1wkXClcPVstKycgIzAqXSpcKFxkKlx8XCpcfFwqXGRcK1wkXClcKFwuXChcZCpcfFwqXHxcKlxkXCtcJFwpXClcPVwoW2hsTF1cfGxsXClcPVwoW2JkaXVveFhET1VmZUVnR2NDc1Nwbl1cfFxbXF5cPS5bXl1dKlxdXCkiIGNvbnRhaW5lZAorICBzeW4gbWF0Y2gJY0Zvcm1hdAkJZGlzcGxheSAiJSUiIGNvbnRhaW5lZAorICBzeW4gcmVnaW9uCWNTdHJpbmcJCXN0YXJ0PStMXD0iKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9Y1NwZWNpYWwsY0Zvcm1hdCxAU3BlbGwKKyAgIiBjQ3BwU3RyaW5nOiBzYW1lIGFzIGNTdHJpbmcsIGJ1dCBlbmRzIGF0IGVuZCBvZiBsaW5lCisgIHN5biByZWdpb24JY0NwcFN0cmluZwlzdGFydD0rTFw9Iisgc2tpcD0rXFxcXFx8XFwiXHxcXCQrIGV4Y2x1ZGVubCBlbmQ9KyIrIGVuZD0nJCcgY29udGFpbnM9Y1NwZWNpYWwsY0Zvcm1hdCxAU3BlbGwKK2VuZGlmCisKK3N5biBtYXRjaAljQ2hhcmFjdGVyCSJMXD0nW15cXF0nIgorc3luIG1hdGNoCWNDaGFyYWN0ZXIJIkwnW14nXSonIiBjb250YWlucz1jU3BlY2lhbAoraWYgZXhpc3RzKCJjX2dudSIpCisgIHN5biBtYXRjaAljU3BlY2lhbEVycm9yCSJMXD0nXFxbXidcIj9cXGFiZWZucnR2XSciCisgIHN5biBtYXRjaAljU3BlY2lhbENoYXJhY3RlciAiTFw9J1xcWydcIj9cXGFiZWZucnR2XSciCitlbHNlCisgIHN5biBtYXRjaAljU3BlY2lhbEVycm9yCSJMXD0nXFxbXidcIj9cXGFiZm5ydHZdJyIKKyAgc3luIG1hdGNoCWNTcGVjaWFsQ2hhcmFjdGVyICJMXD0nXFxbJ1wiP1xcYWJmbnJ0dl0nIgorZW5kaWYKK3N5biBtYXRjaAljU3BlY2lhbENoYXJhY3RlciBkaXNwbGF5ICJMXD0nXFxcb1x7MSwzfSciCitzeW4gbWF0Y2gJY1NwZWNpYWxDaGFyYWN0ZXIgZGlzcGxheSAiJ1xceFx4XHsxLDJ9JyIKK3N5biBtYXRjaAljU3BlY2lhbENoYXJhY3RlciBkaXNwbGF5ICJMJ1xceFx4XCsnIgorCisid2hlbiB3YW50ZWQsIGhpZ2hsaWdodCB0cmFpbGluZyB3aGl0ZSBzcGFjZQoraWYgZXhpc3RzKCJjX3NwYWNlX2Vycm9ycyIpCisgIGlmICFleGlzdHMoImNfbm9fdHJhaWxfc3BhY2VfZXJyb3IiKQorICAgIHN5biBtYXRjaAljU3BhY2VFcnJvcglkaXNwbGF5IGV4Y2x1ZGVubCAiXHNcKyQiCisgIGVuZGlmCisgIGlmICFleGlzdHMoImNfbm9fdGFiX3NwYWNlX2Vycm9yIikKKyAgICBzeW4gbWF0Y2gJY1NwYWNlRXJyb3IJZGlzcGxheSAiIFwrXHQibWU9ZS0xCisgIGVuZGlmCitlbmRpZgorCisiY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcyBhbmQgYnJhY2tldHMKKyIgYWxzbyBhY2NlcHQgPCUgZm9yIHssICU+IGZvciB9LCA8OiBmb3IgWyBhbmQgOj4gZm9yIF0gKEM5OSkKKyIgQnV0IGF2b2lkIG1hdGNoaW5nIDw6Oi4KK3N5biBjbHVzdGVyCWNQYXJlbkdyb3VwCWNvbnRhaW5zPWNQYXJlbkVycm9yLGNJbmNsdWRlZCxjU3BlY2lhbCxjQ29tbWVudFNraXAsY0NvbW1lbnRTdHJpbmcsY0NvbW1lbnQyU3RyaW5nLEBjQ29tbWVudEdyb3VwLGNDb21tZW50U3RhcnRFcnJvcixjVXNlckNvbnQsY1VzZXJMYWJlbCxjQml0RmllbGQsY0NvbW1lbnRTa2lwLGNPY3RhbFplcm8sY0NwcE91dCxjQ3BwT3V0MixjQ3BwU2tpcCxjRm9ybWF0LGNOdW1iZXIsY0Zsb2F0LGNPY3RhbCxjT2N0YWxFcnJvcixjTnVtYmVyc0NvbQoraWYgZXhpc3RzKCJjX25vX2JyYWNrZXRfZXJyb3IiKQorICBzeW4gcmVnaW9uCWNQYXJlbgkJdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULEBjUGFyZW5Hcm91cCxjQ3BwUGFyZW4sY0NwcFN0cmluZyxAU3BlbGwKKyAgIiBjQ3BwUGFyZW46IHNhbWUgYXMgY1BhcmVuIGJ1dCBlbmRzIGF0IGVuZC1vZi1saW5lOyB1c2VkIGluIGNEZWZpbmUKKyAgc3luIHJlZ2lvbgljQ3BwUGFyZW4JdHJhbnNwYXJlbnQgc3RhcnQ9JygnIHNraXA9J1xcJCcgZXhjbHVkZW5sIGVuZD0nKScgZW5kPSckJyBjb250YWluZWQgY29udGFpbnM9QUxMQlVULEBjUGFyZW5Hcm91cCxjUGFyZW4sY1N0cmluZyxAU3BlbGwKKyAgc3luIG1hdGNoCWNQYXJlbkVycm9yCWRpc3BsYXkgIikiCisgIHN5biBtYXRjaAljRXJySW5QYXJlbglkaXNwbGF5IGNvbnRhaW5lZCAiW3t9XVx8PCVcfCU+IgorZWxzZQorICBzeW4gcmVnaW9uCWNQYXJlbgkJdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULEBjUGFyZW5Hcm91cCxjQ3BwUGFyZW4sY0VyckluQnJhY2tldCxjQ3BwQnJhY2tldCxjQ3BwU3RyaW5nLEBTcGVsbAorICAiIGNDcHBQYXJlbjogc2FtZSBhcyBjUGFyZW4gYnV0IGVuZHMgYXQgZW5kLW9mLWxpbmU7IHVzZWQgaW4gY0RlZmluZQorICBzeW4gcmVnaW9uCWNDcHBQYXJlbgl0cmFuc3BhcmVudCBzdGFydD0nKCcgc2tpcD0nXFwkJyBleGNsdWRlbmwgZW5kPScpJyBlbmQ9JyQnIGNvbnRhaW5lZCBjb250YWlucz1BTExCVVQsQGNQYXJlbkdyb3VwLGNFcnJJbkJyYWNrZXQsY1BhcmVuLGNCcmFja2V0LGNTdHJpbmcsQFNwZWxsCisgIHN5biBtYXRjaAljUGFyZW5FcnJvcglkaXNwbGF5ICJbXF0pXSIKKyAgc3luIG1hdGNoCWNFcnJJblBhcmVuCWRpc3BsYXkgY29udGFpbmVkICJbXF17fV1cfDwlXHwlPiIKKyAgc3luIHJlZ2lvbgljQnJhY2tldAl0cmFuc3BhcmVudCBzdGFydD0nXFtcfDw6OlxAIScgZW5kPSddXHw6PicgY29udGFpbnM9QUxMQlVULEBjUGFyZW5Hcm91cCxjRXJySW5QYXJlbixjQ3BwUGFyZW4sY0NwcEJyYWNrZXQsY0NwcFN0cmluZyxAU3BlbGwKKyAgIiBjQ3BwQnJhY2tldDogc2FtZSBhcyBjUGFyZW4gYnV0IGVuZHMgYXQgZW5kLW9mLWxpbmU7IHVzZWQgaW4gY0RlZmluZQorICBzeW4gcmVnaW9uCWNDcHBCcmFja2V0CXRyYW5zcGFyZW50IHN0YXJ0PSdcW1x8PDo6XEAhJyBza2lwPSdcXCQnIGV4Y2x1ZGVubCBlbmQ9J11cfDo+JyBlbmQ9JyQnIGNvbnRhaW5lZCBjb250YWlucz1BTExCVVQsQGNQYXJlbkdyb3VwLGNFcnJJblBhcmVuLGNQYXJlbixjQnJhY2tldCxjU3RyaW5nLEBTcGVsbAorICBzeW4gbWF0Y2gJY0VyckluQnJhY2tldAlkaXNwbGF5IGNvbnRhaW5lZCAiWyk7e31dXHw8JVx8JT4iCitlbmRpZgorCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90IGFuZCB3aXRoICJmIi4KK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoCWNOdW1iZXJzCWRpc3BsYXkgdHJhbnNwYXJlbnQgIlw8XGRcfFwuXGQiIGNvbnRhaW5zPWNOdW1iZXIsY0Zsb2F0LGNPY3RhbEVycm9yLGNPY3RhbAorIiBTYW1lLCBidXQgd2l0aG91dCBvY3RhbCBlcnJvciAoZm9yIGNvbW1lbnRzKQorc3luIG1hdGNoCWNOdW1iZXJzQ29tCWRpc3BsYXkgY29udGFpbmVkIHRyYW5zcGFyZW50ICJcPFxkXHxcLlxkIiBjb250YWlucz1jTnVtYmVyLGNGbG9hdCxjT2N0YWwKK3N5biBtYXRjaAljTnVtYmVyCQlkaXNwbGF5IGNvbnRhaW5lZCAiXGRcK1wodVw9bFx7MCwyfVx8bGxcPXVcKVw+IgorImhleCBudW1iZXIKK3N5biBtYXRjaAljTnVtYmVyCQlkaXNwbGF5IGNvbnRhaW5lZCAiMHhceFwrXCh1XD1sXHswLDJ9XHxsbFw9dVwpXD4iCisiIEZsYWcgdGhlIGZpcnN0IHplcm8gb2YgYW4gb2N0YWwgbnVtYmVyIGFzIHNvbWV0aGluZyBzcGVjaWFsCitzeW4gbWF0Y2gJY09jdGFsCQlkaXNwbGF5IGNvbnRhaW5lZCAiMFxvXCtcKHVcPWxcezAsMn1cfGxsXD11XClcPiIgY29udGFpbnM9Y09jdGFsWmVybworc3luIG1hdGNoCWNPY3RhbFplcm8JZGlzcGxheSBjb250YWluZWQgIlw8MCIKK3N5biBtYXRjaAljRmxvYXQJCWRpc3BsYXkgY29udGFpbmVkICJcZFwrZiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoCWNGbG9hdAkJZGlzcGxheSBjb250YWluZWQgIlxkXCtcLlxkKlwoZVstK11cPVxkXCtcKVw9W2ZsXVw9IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaAljRmxvYXQJCWRpc3BsYXkgY29udGFpbmVkICJcLlxkXCtcKGVbLStdXD1cZFwrXClcPVtmbF1cPVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aG91dCBkb3QsIHdpdGggZXhwb25lbnQKK3N5biBtYXRjaAljRmxvYXQJCWRpc3BsYXkgY29udGFpbmVkICJcZFwrZVstK11cPVxkXCtbZmxdXD1cPiIKK2lmICFleGlzdHMoImNfbm9fYzk5IikKKyAgImhleGFkZWNpbWFsIGZsb2F0aW5nIHBvaW50IG51bWJlciwgb3B0aW9uYWwgbGVhZGluZyBkaWdpdHMsIHdpdGggZG90LCB3aXRoIGV4cG9uZW50CisgIHN5biBtYXRjaAljRmxvYXQJCWRpc3BsYXkgY29udGFpbmVkICIweFx4KlwuXHhcK3BbLStdXD1cZFwrW2ZsXVw9XD4iCisgICJoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggbGVhZGluZyBkaWdpdHMsIG9wdGlvbmFsIGRvdCwgd2l0aCBleHBvbmVudAorICBzeW4gbWF0Y2gJY0Zsb2F0CQlkaXNwbGF5IGNvbnRhaW5lZCAiMHhceFwrXC5cPXBbLStdXD1cZFwrW2ZsXVw9XD4iCitlbmRpZgorCisiIGZsYWcgYW4gb2N0YWwgbnVtYmVyIHdpdGggd3JvbmcgZGlnaXRzCitzeW4gbWF0Y2gJY09jdGFsRXJyb3IJZGlzcGxheSBjb250YWluZWQgIjBcbypbODldXGQqIgorc3luIGNhc2UgbWF0Y2gKKworaWYgZXhpc3RzKCJjX2NvbW1lbnRfc3RyaW5ncyIpCisgICIgQSBjb21tZW50IGNhbiBjb250YWluIGNTdHJpbmcsIGNDaGFyYWN0ZXIgYW5kIGNOdW1iZXIuCisgICIgQnV0IGEgIiovIiBpbnNpZGUgYSBjU3RyaW5nIGluIGEgY0NvbW1lbnQgRE9FUyBlbmQgdGhlIGNvbW1lbnQhICBTbyB3ZQorICAiIG5lZWQgdG8gdXNlIGEgc3BlY2lhbCB0eXBlIG9mIGNTdHJpbmc6IGNDb21tZW50U3RyaW5nLCB3aGljaCBhbHNvIGVuZHMgb24KKyAgIiAiKi8iLCBhbmQgc2VlcyBhICIqIiBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgYXMgY29tbWVudCBhZ2Fpbi4KKyAgIiBVbmZvcnR1bmF0ZWx5IHRoaXMgZG9lc24ndCB2ZXJ5IHdlbGwgd29yayBmb3IgLy8gdHlwZSBvZiBjb21tZW50cyA6LSgKKyAgc3ludGF4IG1hdGNoCWNDb21tZW50U2tpcAljb250YWluZWQgIl5ccypcKlwoJFx8XHNcK1wpIgorICBzeW50YXggcmVnaW9uIGNDb21tZW50U3RyaW5nCWNvbnRhaW5lZCBzdGFydD0rTFw9XFxcQDwhIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGVuZD0rXCovK21lPXMtMSBjb250YWlucz1jU3BlY2lhbCxjQ29tbWVudFNraXAKKyAgc3ludGF4IHJlZ2lvbiBjQ29tbWVudDJTdHJpbmcJY29udGFpbmVkIHN0YXJ0PStMXD1cXFxAPCEiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgZW5kPSIkIiBjb250YWlucz1jU3BlY2lhbAorICBzeW50YXggcmVnaW9uICBjQ29tbWVudEwJc3RhcnQ9Ii8vIiBza2lwPSJcXCQiIGVuZD0iJCIga2VlcGVuZCBjb250YWlucz1AY0NvbW1lbnRHcm91cCxjQ29tbWVudDJTdHJpbmcsY0NoYXJhY3RlcixjTnVtYmVyc0NvbSxjU3BhY2VFcnJvcixAU3BlbGwKKyAgc3ludGF4IHJlZ2lvbiBjQ29tbWVudAltYXRjaGdyb3VwPWNDb21tZW50U3RhcnQgc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPUBjQ29tbWVudEdyb3VwLGNDb21tZW50U3RhcnRFcnJvcixjQ29tbWVudFN0cmluZyxjQ2hhcmFjdGVyLGNOdW1iZXJzQ29tLGNTcGFjZUVycm9yLEBTcGVsbAorZWxzZQorICBzeW4gcmVnaW9uCWNDb21tZW50TAlzdGFydD0iLy8iIHNraXA9IlxcJCIgZW5kPSIkIiBrZWVwZW5kIGNvbnRhaW5zPUBjQ29tbWVudEdyb3VwLGNTcGFjZUVycm9yLEBTcGVsbAorICBzeW4gcmVnaW9uCWNDb21tZW50CW1hdGNoZ3JvdXA9Y0NvbW1lbnRTdGFydCBzdGFydD0iL1wqIiBlbmQ9IlwqLyIgY29udGFpbnM9QGNDb21tZW50R3JvdXAsY0NvbW1lbnRTdGFydEVycm9yLGNTcGFjZUVycm9yLEBTcGVsbAorZW5kaWYKKyIga2VlcCBhIC8vIGNvbW1lbnQgc2VwYXJhdGVseSwgaXQgdGVybWluYXRlcyBhIHByZXByb2MuIGNvbmRpdGlvbmFsCitzeW50YXggbWF0Y2gJY0NvbW1lbnRFcnJvcglkaXNwbGF5ICJcKi8iCitzeW50YXggbWF0Y2gJY0NvbW1lbnRTdGFydEVycm9yIGRpc3BsYXkgIi9cKiJtZT1lLTEgY29udGFpbmVkCisKK3N5biBrZXl3b3JkCWNPcGVyYXRvcglzaXplb2YKK2lmIGV4aXN0cygiY19nbnUiKQorICBzeW4ga2V5d29yZAljU3RhdGVtZW50CV9fYXNtX18KKyAgc3luIGtleXdvcmQJY09wZXJhdG9yCXR5cGVvZiBfX3JlYWxfXyBfX2ltYWdfXworZW5kaWYKK3N5biBrZXl3b3JkCWNUeXBlCQlpbnQgbG9uZyBzaG9ydCBjaGFyIHZvaWQKK3N5biBrZXl3b3JkCWNUeXBlCQlzaWduZWQgdW5zaWduZWQgZmxvYXQgZG91YmxlCitpZiAhZXhpc3RzKCJjX25vX2Fuc2kiKSB8fCBleGlzdHMoImNfYW5zaV90eXBlZGVmcyIpCisgIHN5biBrZXl3b3JkICAgY1R5cGUJCXNpemVfdCBzc2l6ZV90IHdjaGFyX3QgcHRyZGlmZl90IHNpZ19hdG9taWNfdCBmcG9zX3QKKyAgc3luIGtleXdvcmQgICBjVHlwZQkJY2xvY2tfdCB0aW1lX3QgdmFfbGlzdCBqbXBfYnVmIEZJTEUgRElSIGRpdl90IGxkaXZfdAorICBzeW4ga2V5d29yZCAgIGNUeXBlCQltYnN0YXRlX3Qgd2N0cmFuc190IHdpbnRfdCB3Y3R5cGVfdAorZW5kaWYKK2lmICFleGlzdHMoImNfbm9fYzk5IikgIiBJU08gQzk5CisgIHN5biBrZXl3b3JkCWNUeXBlCQlib29sIGNvbXBsZXgKKyAgc3luIGtleXdvcmQJY1R5cGUJCWludDhfdCBpbnQxNl90IGludDMyX3QgaW50NjRfdAorICBzeW4ga2V5d29yZAljVHlwZQkJdWludDhfdCB1aW50MTZfdCB1aW50MzJfdCB1aW50NjRfdAorICBzeW4ga2V5d29yZAljVHlwZQkJaW50X2xlYXN0OF90IGludF9sZWFzdDE2X3QgaW50X2xlYXN0MzJfdCBpbnRfbGVhc3Q2NF90CisgIHN5biBrZXl3b3JkCWNUeXBlCQl1aW50X2xlYXN0OF90IHVpbnRfbGVhc3QxNl90IHVpbnRfbGVhc3QzMl90IHVpbnRfbGVhc3Q2NF90CisgIHN5biBrZXl3b3JkCWNUeXBlCQlpbnRfZmFzdDhfdCBpbnRfZmFzdDE2X3QgaW50X2Zhc3QzMl90IGludF9mYXN0NjRfdAorICBzeW4ga2V5d29yZAljVHlwZQkJdWludF9mYXN0OF90IHVpbnRfZmFzdDE2X3QgdWludF9mYXN0MzJfdCB1aW50X2Zhc3Q2NF90CisgIHN5biBrZXl3b3JkCWNUeXBlCQlpbnRwdHJfdCB1aW50cHRyX3QKKyAgc3luIGtleXdvcmQJY1R5cGUJCWludG1heF90IHVpbnRtYXhfdAorZW5kaWYKK2lmIGV4aXN0cygiY19nbnUiKQorICBzeW4ga2V5d29yZAljVHlwZQkJX19sYWJlbF9fIF9fY29tcGxleF9fIF9fdm9sYXRpbGVfXworZW5kaWYKKworc3luIGtleXdvcmQJY1N0cnVjdHVyZQlzdHJ1Y3QgdW5pb24gZW51bSB0eXBlZGVmCitzeW4ga2V5d29yZAljU3RvcmFnZUNsYXNzCXN0YXRpYyByZWdpc3RlciBhdXRvIHZvbGF0aWxlIGV4dGVybiBjb25zdAoraWYgZXhpc3RzKCJjX2dudSIpCisgIHN5biBrZXl3b3JkCWNTdG9yYWdlQ2xhc3MJaW5saW5lIF9fYXR0cmlidXRlX18KK2VuZGlmCitpZiAhZXhpc3RzKCJjX25vX2M5OSIpCisgIHN5biBrZXl3b3JkCWNTdG9yYWdlQ2xhc3MJaW5saW5lIHJlc3RyaWN0CitlbmRpZgorCitpZiAhZXhpc3RzKCJjX25vX2Fuc2kiKSB8fCBleGlzdHMoImNfYW5zaV9jb25zdGFudHMiKSB8fCBleGlzdHMoImNfZ251IikKKyAgaWYgZXhpc3RzKCJjX2dudSIpCisgICAgc3luIGtleXdvcmQgY0NvbnN0YW50IF9fR05VQ19fIF9fRlVOQ1RJT05fXyBfX1BSRVRUWV9GVU5DVElPTl9fCisgIGVuZGlmCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBfX0xJTkVfXyBfX0ZJTEVfXyBfX0RBVEVfXyBfX1RJTUVfXyBfX1NURENfXworICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgX19TVERDX1ZFUlNJT05fXworICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgQ0hBUl9CSVQgTUJfTEVOX01BWCBNQl9DVVJfTUFYCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBVQ0hBUl9NQVggVUlOVF9NQVggVUxPTkdfTUFYIFVTSFJUX01BWAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgQ0hBUl9NSU4gSU5UX01JTiBMT05HX01JTiBTSFJUX01JTgorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgQ0hBUl9NQVggSU5UX01BWCBMT05HX01BWCBTSFJUX01BWAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgU0NIQVJfTUlOIFNJTlRfTUlOIFNMT05HX01JTiBTU0hSVF9NSU4KKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IFNDSEFSX01BWCBTSU5UX01BWCBTTE9OR19NQVggU1NIUlRfTUFYCisgIGlmICFleGlzdHMoImNfbm9fYzk5IikKKyAgICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgTExPTkdfTUFYIFVMTE9OR19NQVgKKyAgICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgSU5UOF9NSU4gSU5UMTZfTUlOIElOVDMyX01JTiBJTlQ2NF9NSU4KKyAgICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgSU5UOF9NQVggSU5UMTZfTUFYIElOVDMyX01BWCBJTlQ2NF9NQVgKKyAgICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgVUlOVDhfTUFYIFVJTlQxNl9NQVggVUlOVDMyX01BWCBVSU5UNjRfTUFYCisgICAgc3luIGtleXdvcmQgY0NvbnN0YW50IElOVF9MRUFTVDhfTUlOIElOVF9MRUFTVDE2X01JTiBJTlRfTEVBU1QzMl9NSU4gSU5UX0xFQVNUNjRfTUlOCisgICAgc3luIGtleXdvcmQgY0NvbnN0YW50IElOVF9MRUFTVDhfTUFYIElOVF9MRUFTVDE2X01BWCBJTlRfTEVBU1QzMl9NQVggSU5UX0xFQVNUNjRfTUFYCisgICAgc3luIGtleXdvcmQgY0NvbnN0YW50IFVJTlRfTEVBU1Q4X01BWCBVSU5UX0xFQVNUMTZfTUFYIFVJTlRfTEVBU1QzMl9NQVggVUlOVF9MRUFTVDY0X01BWAorICAgIHN5biBrZXl3b3JkIGNDb25zdGFudCBJTlRfRkFTVDhfTUlOIElOVF9GQVNUMTZfTUlOIElOVF9GQVNUMzJfTUlOIElOVF9GQVNUNjRfTUlOCisgICAgc3luIGtleXdvcmQgY0NvbnN0YW50IElOVF9GQVNUOF9NQVggSU5UX0ZBU1QxNl9NQVggSU5UX0ZBU1QzMl9NQVggSU5UX0ZBU1Q2NF9NQVgKKyAgICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgVUlOVF9GQVNUOF9NQVggVUlOVF9GQVNUMTZfTUFYIFVJTlRfRkFTVDMyX01BWCBVSU5UX0ZBU1Q2NF9NQVgKKyAgICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgSU5UUFRSX01JTiBJTlRQVFJfTUFYIFVJTlRQVFJfTUFYCisgICAgc3luIGtleXdvcmQgY0NvbnN0YW50IElOVE1BWF9NSU4gSU5UTUFYX01BWCBVSU5UTUFYX01BWAorICAgIHN5biBrZXl3b3JkIGNDb25zdGFudCBQVFJESUZGX01JTiBQVFJESUZGX01BWCBTSUdfQVRPTUlDX01JTiBTSUdfQVRPTUlDX01BWAorICAgIHN5biBrZXl3b3JkIGNDb25zdGFudCBTSVpFX01BWCBXQ0hBUl9NSU4gV0NIQVJfTUFYIFdJTlRfTUlOIFdJTlRfTUFYCisgIGVuZGlmCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBGTFRfUkFESVggRkxUX1JPVU5EUworICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgRkxUX0RJRyBGTFRfTUFOVF9ESUcgRkxUX0VQU0lMT04KKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IERCTF9ESUcgREJMX01BTlRfRElHIERCTF9FUFNJTE9OCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBMREJMX0RJRyBMREJMX01BTlRfRElHIExEQkxfRVBTSUxPTgorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgRkxUX01JTiBGTFRfTUFYIEZMVF9NSU5fRVhQIEZMVF9NQVhfRVhQCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBGTFRfTUlOXzEwX0VYUCBGTFRfTUFYXzEwX0VYUAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgREJMX01JTiBEQkxfTUFYIERCTF9NSU5fRVhQIERCTF9NQVhfRVhQCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBEQkxfTUlOXzEwX0VYUCBEQkxfTUFYXzEwX0VYUAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgTERCTF9NSU4gTERCTF9NQVggTERCTF9NSU5fRVhQIExEQkxfTUFYX0VYUAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgTERCTF9NSU5fMTBfRVhQIExEQkxfTUFYXzEwX0VYUAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgSFVHRV9WQUwgQ0xPQ0tTX1BFUl9TRUMgTlVMTAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfTU9ORVRBUlkKKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IExDX05VTUVSSUMgTENfVElNRQorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgU0lHX0RGTCBTSUdfRVJSIFNJR19JR04KKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IFNJR0FCUlQgU0lHRlBFIFNJR0lMTCBTSUdIVVAgU0lHSU5UIFNJR1NFR1YgU0lHVEVSTQorICAiIEFkZCBQT1NJWCBzaWduYWxzIGFzIHdlbGwuLi4KKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IFNJR0FCUlQgU0lHQUxSTSBTSUdDSExEIFNJR0NPTlQgU0lHRlBFIFNJR0hVUAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgU0lHSUxMIFNJR0lOVCBTSUdLSUxMIFNJR1BJUEUgU0lHUVVJVCBTSUdTRUdWCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBTSUdTVE9QIFNJR1RFUk0gU0lHVFJBUCBTSUdUU1RQIFNJR1RUSU4gU0lHVFRPVQorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgU0lHVVNSMSBTSUdVU1IyCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBfSU9GQkYgX0lPTEJGIF9JT05CRiBCVUZTSVogRU9GIFdFT0YKKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IEZPUEVOX01BWCBGSUxFTkFNRV9NQVggTF90bXBuYW0KKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IFNFRUtfQ1VSIFNFRUtfRU5EIFNFRUtfU0VUCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBUTVBfTUFYIHN0ZGVyciBzdGRpbiBzdGRvdXQKKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IEVYSVRfRkFJTFVSRSBFWElUX1NVQ0NFU1MgUkFORF9NQVgKKyAgIiBBZGQgUE9TSVggZXJyb3JzIGFzIHdlbGwKKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IEUyQklHIEVBQ0NFUyBFQUdBSU4gRUJBREYgRUJBRE1TRyBFQlVTWQorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgRUNBTkNFTEVEIEVDSElMRCBFREVBRExLIEVET00gRUVYSVNUIEVGQVVMVAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgRUZCSUcgRUlMU0VRIEVJTlBST0dSRVNTIEVJTlRSIEVJTlZBTCBFSU8gRUlTRElSCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBFTUZJTEUgRU1MSU5LIEVNU0dTSVpFIEVOQU1FVE9PTE9ORyBFTkZJTEUgRU5PREVWCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBFTk9FTlQgRU5PRVhFQyBFTk9MQ0sgRU5PTUVNIEVOT1NQQyBFTk9TWVMKKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IEVOT1RESVIgRU5PVEVNUFRZIEVOT1RTVVAgRU5PVFRZIEVOWElPIEVQRVJNCisgIHN5biBrZXl3b3JkIGNDb25zdGFudCBFUElQRSBFUkFOR0UgRVJPRlMgRVNQSVBFIEVTUkNIIEVUSU1FRE9VVCBFWERFVgorICAiIG1hdGguaAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgTV9FIE1fTE9HMkUgTV9MT0cxMEUgTV9MTjIgTV9MTjEwIE1fUEkgTV9QSV8yIE1fUElfNAorICBzeW4ga2V5d29yZCBjQ29uc3RhbnQgTV8xX1BJIE1fMl9QSSBNXzJfU1FSVFBJIE1fU1FSVDIgTV9TUVJUMV8yCitlbmRpZgoraWYgIWV4aXN0cygiY19ub19jOTkiKSAiIElTTyBDOTkKKyAgc3luIGtleXdvcmQgY0NvbnN0YW50IHRydWUgZmFsc2UKK2VuZGlmCisKKyIgQWNjZXB0ICU6IGZvciAjIChDOTkpCitzeW4gcmVnaW9uCWNQcmVDb25kaXQJc3RhcnQ9Il5ccypcKCU6XHwjXClccypcKGlmXHxpZmRlZlx8aWZuZGVmXHxlbGlmXClcPiIgc2tpcD0iXFwkIiBlbmQ9IiQiIGVuZD0iLy8ibWU9cy0xIGNvbnRhaW5zPWNDb21tZW50LGNDcHBTdHJpbmcsY0NoYXJhY3RlcixjQ3BwUGFyZW4sY1BhcmVuRXJyb3IsY051bWJlcnMsY0NvbW1lbnRFcnJvcixjU3BhY2VFcnJvcgorc3luIG1hdGNoCWNQcmVDb25kaXQJZGlzcGxheSAiXlxzKlwoJTpcfCNcKVxzKlwoZWxzZVx8ZW5kaWZcKVw+IgoraWYgIWV4aXN0cygiY19ub19pZjAiKQorICBzeW4gcmVnaW9uCWNDcHBPdXQJCXN0YXJ0PSJeXHMqXCglOlx8I1wpXHMqaWZcc1wrMFwrXD4iIGVuZD0iLlxAPVx8JCIgY29udGFpbnM9Y0NwcE91dDIKKyAgc3luIHJlZ2lvbgljQ3BwT3V0Mgljb250YWluZWQgc3RhcnQ9IjAiIGVuZD0iXlxzKlwoJTpcfCNcKVxzKlwoZW5kaWZcPlx8ZWxzZVw+XHxlbGlmXD5cKSIgY29udGFpbnM9Y1NwYWNlRXJyb3IsY0NwcFNraXAKKyAgc3luIHJlZ2lvbgljQ3BwU2tpcAljb250YWluZWQgc3RhcnQ9Il5ccypcKCU6XHwjXClccypcKGlmXD5cfGlmZGVmXD5cfGlmbmRlZlw+XCkiIHNraXA9IlxcJCIgZW5kPSJeXHMqXCglOlx8I1wpXHMqZW5kaWZcPiIgY29udGFpbnM9Y1NwYWNlRXJyb3IsY0NwcFNraXAKK2VuZGlmCitzeW4gcmVnaW9uCWNJbmNsdWRlZAlkaXNwbGF5IGNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCitzeW4gbWF0Y2gJY0luY2x1ZGVkCWRpc3BsYXkgY29udGFpbmVkICI8W14+XSo+Igorc3luIG1hdGNoCWNJbmNsdWRlCWRpc3BsYXkgIl5ccypcKCU6XHwjXClccyppbmNsdWRlXD5ccypbIjxdIiBjb250YWlucz1jSW5jbHVkZWQKKyJzeW4gbWF0Y2ggY0xpbmVTa2lwCSJcXCQiCitzeW4gY2x1c3RlcgljUHJlUHJvY0dyb3VwCWNvbnRhaW5zPWNQcmVDb25kaXQsY0luY2x1ZGVkLGNJbmNsdWRlLGNEZWZpbmUsY0VyckluUGFyZW4sY0VyckluQnJhY2tldCxjVXNlckxhYmVsLGNTcGVjaWFsLGNPY3RhbFplcm8sY0NwcE91dCxjQ3BwT3V0MixjQ3BwU2tpcCxjRm9ybWF0LGNOdW1iZXIsY0Zsb2F0LGNPY3RhbCxjT2N0YWxFcnJvcixjTnVtYmVyc0NvbSxjU3RyaW5nLGNDb21tZW50U2tpcCxjQ29tbWVudFN0cmluZyxjQ29tbWVudDJTdHJpbmcsQGNDb21tZW50R3JvdXAsY0NvbW1lbnRTdGFydEVycm9yLGNQYXJlbixjQnJhY2tldCxjTXVsdGkKK3N5biByZWdpb24JY0RlZmluZQkJc3RhcnQ9Il5ccypcKCU6XHwjXClccypcKGRlZmluZVx8dW5kZWZcKVw+IiBza2lwPSJcXCQiIGVuZD0iJCIgZW5kPSIvLyJtZT1zLTEgY29udGFpbnM9QUxMQlVULEBjUHJlUHJvY0dyb3VwLEBTcGVsbAorc3luIHJlZ2lvbgljUHJlUHJvYwlzdGFydD0iXlxzKlwoJTpcfCNcKVxzKlwocHJhZ21hXD5cfGxpbmVcPlx8d2FybmluZ1w+XHx3YXJuXD5cfGVycm9yXD5cKSIgc2tpcD0iXFwkIiBlbmQ9IiQiIGtlZXBlbmQgY29udGFpbnM9QUxMQlVULEBjUHJlUHJvY0dyb3VwLEBTcGVsbAorCisiIEhpZ2hsaWdodCBVc2VyIExhYmVscworc3luIGNsdXN0ZXIJY011bHRpR3JvdXAJY29udGFpbnM9Y0luY2x1ZGVkLGNTcGVjaWFsLGNDb21tZW50U2tpcCxjQ29tbWVudFN0cmluZyxjQ29tbWVudDJTdHJpbmcsQGNDb21tZW50R3JvdXAsY0NvbW1lbnRTdGFydEVycm9yLGNVc2VyQ29udCxjVXNlckxhYmVsLGNCaXRGaWVsZCxjT2N0YWxaZXJvLGNDcHBPdXQsY0NwcE91dDIsY0NwcFNraXAsY0Zvcm1hdCxjTnVtYmVyLGNGbG9hdCxjT2N0YWwsY09jdGFsRXJyb3IsY051bWJlcnNDb20sY0NwcFBhcmVuLGNDcHBCcmFja2V0LGNDcHBTdHJpbmcKK3N5biByZWdpb24JY011bHRpCQl0cmFuc3BhcmVudCBzdGFydD0nPycgc2tpcD0nOjonIGVuZD0nOicgY29udGFpbnM9QUxMQlVULEBjTXVsdGlHcm91cCxAU3BlbGwKKyIgQXZvaWQgbWF0Y2hpbmcgZm9vOjpiYXIoKSBpbiBDKysgYnkgcmVxdWlyaW5nIHRoYXQgdGhlIG5leHQgY2hhciBpcyBub3QgJzonCitzeW4gY2x1c3RlcgljTGFiZWxHcm91cAljb250YWlucz1jVXNlckxhYmVsCitzeW4gbWF0Y2gJY1VzZXJDb250CWRpc3BsYXkgIl5ccypcSVxpKlxzKjokIiBjb250YWlucz1AY0xhYmVsR3JvdXAKK3N5biBtYXRjaAljVXNlckNvbnQJZGlzcGxheSAiO1xzKlxJXGkqXHMqOiQiIGNvbnRhaW5zPUBjTGFiZWxHcm91cAorc3luIG1hdGNoCWNVc2VyQ29udAlkaXNwbGF5ICJeXHMqXElcaSpccyo6W146XSJtZT1lLTEgY29udGFpbnM9QGNMYWJlbEdyb3VwCitzeW4gbWF0Y2gJY1VzZXJDb250CWRpc3BsYXkgIjtccypcSVxpKlxzKjpbXjpdIm1lPWUtMSBjb250YWlucz1AY0xhYmVsR3JvdXAKKworc3luIG1hdGNoCWNVc2VyTGFiZWwJZGlzcGxheSAiXElcaSoiIGNvbnRhaW5lZAorCisiIEF2b2lkIHJlY29nbml6aW5nIG1vc3QgYml0ZmllbGRzIGFzIGxhYmVscworc3luIG1hdGNoCWNCaXRGaWVsZAlkaXNwbGF5ICJeXHMqXElcaSpccyo6XHMqWzEtOV0ibWU9ZS0xCitzeW4gbWF0Y2gJY0JpdEZpZWxkCWRpc3BsYXkgIjtccypcSVxpKlxzKjpccypbMS05XSJtZT1lLTEKKworaWYgZXhpc3RzKCJjX21pbmxpbmVzIikKKyAgbGV0IGI6Y19taW5saW5lcyA9IGNfbWlubGluZXMKK2Vsc2UKKyAgaWYgIWV4aXN0cygiY19ub19pZjAiKQorICAgIGxldCBiOmNfbWlubGluZXMgPSA1MAkiICNpZiAwIGNvbnN0cnVjdHMgY2FuIGJlIGxvbmcKKyAgZWxzZQorICAgIGxldCBiOmNfbWlubGluZXMgPSAxNQkiIG1vc3RseSBmb3IgKCkgY29uc3RydWN0cworICBlbmRpZgorZW5kaWYKK2V4ZWMgInN5biBzeW5jIGNjb21tZW50IGNDb21tZW50IG1pbmxpbmVzPSIgLiBiOmNfbWlubGluZXMKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY19zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGNGb3JtYXQJCWNTcGVjaWFsCisgIEhpTGluayBjQ3BwU3RyaW5nCQljU3RyaW5nCisgIEhpTGluayBjQ29tbWVudEwJCWNDb21tZW50CisgIEhpTGluayBjQ29tbWVudFN0YXJ0CQljQ29tbWVudAorICBIaUxpbmsgY0xhYmVsCQkJTGFiZWwKKyAgSGlMaW5rIGNVc2VyTGFiZWwJCUxhYmVsCisgIEhpTGluayBjQ29uZGl0aW9uYWwJCUNvbmRpdGlvbmFsCisgIEhpTGluayBjUmVwZWF0CQlSZXBlYXQKKyAgSGlMaW5rIGNDaGFyYWN0ZXIJCUNoYXJhY3RlcgorICBIaUxpbmsgY1NwZWNpYWxDaGFyYWN0ZXIJY1NwZWNpYWwKKyAgSGlMaW5rIGNOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgY09jdGFsCQkJTnVtYmVyCisgIEhpTGluayBjT2N0YWxaZXJvCQlQcmVQcm9jCSAiIGxpbmsgdGhpcyB0byBFcnJvciBpZiB5b3Ugd2FudAorICBIaUxpbmsgY0Zsb2F0CQkJRmxvYXQKKyAgSGlMaW5rIGNPY3RhbEVycm9yCQljRXJyb3IKKyAgSGlMaW5rIGNQYXJlbkVycm9yCQljRXJyb3IKKyAgSGlMaW5rIGNFcnJJblBhcmVuCQljRXJyb3IKKyAgSGlMaW5rIGNFcnJJbkJyYWNrZXQJCWNFcnJvcgorICBIaUxpbmsgY0NvbW1lbnRFcnJvcgkJY0Vycm9yCisgIEhpTGluayBjQ29tbWVudFN0YXJ0RXJyb3IJY0Vycm9yCisgIEhpTGluayBjU3BhY2VFcnJvcgkJY0Vycm9yCisgIEhpTGluayBjU3BlY2lhbEVycm9yCQljRXJyb3IKKyAgSGlMaW5rIGNPcGVyYXRvcgkJT3BlcmF0b3IKKyAgSGlMaW5rIGNTdHJ1Y3R1cmUJCVN0cnVjdHVyZQorICBIaUxpbmsgY1N0b3JhZ2VDbGFzcwkJU3RvcmFnZUNsYXNzCisgIEhpTGluayBjSW5jbHVkZQkJSW5jbHVkZQorICBIaUxpbmsgY1ByZVByb2MJCVByZVByb2MKKyAgSGlMaW5rIGNEZWZpbmUJCU1hY3JvCisgIEhpTGluayBjSW5jbHVkZWQJCWNTdHJpbmcKKyAgSGlMaW5rIGNFcnJvcgkJCUVycm9yCisgIEhpTGluayBjU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGNQcmVDb25kaXQJCVByZUNvbmRpdAorICBIaUxpbmsgY1R5cGUJCQlUeXBlCisgIEhpTGluayBjQ29uc3RhbnQJCUNvbnN0YW50CisgIEhpTGluayBjQ29tbWVudFN0cmluZwkJY1N0cmluZworICBIaUxpbmsgY0NvbW1lbnQyU3RyaW5nCWNTdHJpbmcKKyAgSGlMaW5rIGNDb21tZW50U2tpcAkJY0NvbW1lbnQKKyAgSGlMaW5rIGNTdHJpbmcJCVN0cmluZworICBIaUxpbmsgY0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGNTcGVjaWFsCQlTcGVjaWFsQ2hhcgorICBIaUxpbmsgY1RvZG8JCQlUb2RvCisgIEhpTGluayBjQ3BwU2tpcAkJY0NwcE91dAorICBIaUxpbmsgY0NwcE91dDIJCWNDcHBPdXQKKyAgSGlMaW5rIGNDcHBPdXQJCUNvbW1lbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYyIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2NhbGVuZGFyLnZpbSBiL3J1bnRpbWUvc3ludGF4L2NhbGVuZGFyLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODM0MjY3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY2FsZW5kYXIudmltCkBAIC0wLDAgKzEsMTA0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIGNhbGVuZGFyKDEpIGZpbGUuCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9zeW50YXgvcGNwL2NhbGVuZGFyLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTA2CisiIGFyY2gtdGFnOgkgICAgZDcxNDEyN2QtNDY5ZC00M2JkLTljNzktYzJhNDZlYzU0NTM1CisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFRvZG8KK3N5biBrZXl3b3JkIGNhbGVuZGFyVG9kbwljb250YWluZWQgVE9ETyBGSVhNRSBYWFggTk9URQorCisiIENvbW1lbnRzCitzeW4gcmVnaW9uICBjYWxlbmRhckNvbW1lbnQJbWF0Y2hncm91cD1jYWxlbmRhckNvbW1lbnQgc3RhcnQ9Jy9cKicgZW5kPSdcKi8nIGNvbnRhaW5zPWNhbGVuZGFyVG9kbworCisiIFN0cmluZ3MKK3N5biByZWdpb24gIGNhbGVuZGFyQ3BwU3RyaW5nCXN0YXJ0PStMXD0iKyBza2lwPStcXFxcXHxcXCJcfFxcJCsgZXhjbHVkZW5sIGVuZD0rIisgZW5kPSckJyBjb250YWlucz1jYWxlbmRhclNwZWNpYWwKK3N5biBtYXRjaCAgIGNhbGVuZGFyU3BlY2lhbAlkaXNwbGF5IGNvbnRhaW5lZCAnXFxcJSh4XHhcK1x8XG9cezEsM31cfC5cfCRcKScKK3N5biBtYXRjaCAgIGNhbGVuZGFyU3BlY2lhbAlkaXNwbGF5IGNvbnRhaW5lZCAiXFxcKHVceFx7NH1cfFVceFx7OH1cKSIKKworIiBjcHAoMSkgUHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgKGFkYXB0ZWQgZnJvbSBzeW50YXgvYy52aW0pCisKK3N5biByZWdpb24gIGNhbGVuZGFyUHJlQ29uZGl0CXN0YXJ0PSdeXHMqI1xzKlwlKGlmXHxpZmRlZlx8aWZuZGVmXHxlbGlmXClcPicgc2tpcD0nXFwkJyBlbmQ9JyQnIGNvbnRhaW5zPWNhbGVuZGFyQ29tbWVudCxjYWxlbmRhckNwcFN0cmluZworc3luIG1hdGNoICAgY2FsZW5kYXJQcmVDb25kaXQJZGlzcGxheSAnXlxzKiNccypcJShlbHNlXHxlbmRpZlwpXD4nCitzeW4gcmVnaW9uICBjYWxlbmRhckNwcE91dAlzdGFydD0nXlxzKiNccyppZlxzXCswXCsnIGVuZD0nLlxAPVx8JCcgY29udGFpbnM9Y2FsZW5kYXJDcHBPdXQyCitzeW4gcmVnaW9uICBjYWxlbmRhckNwcE91dDIJY29udGFpbmVkIHN0YXJ0PScwJyBlbmQ9J15ccyojXHMqXCUoZW5kaWZcfGVsc2VcfGVsaWZcKVw+JyBjb250YWlucz1jYWxlbmRhclNwYWNlRXJyb3IsY2FsZW5kYXJDcHBTa2lwCitzeW4gcmVnaW9uICBjYWxlbmRhckNwcFNraXAJY29udGFpbmVkIHN0YXJ0PSdeXHMqI1xzKlwlKGlmXHxpZmRlZlx8aWZuZGVmXClcPicgc2tpcD0nXFwkJyBlbmQ9J15ccyojXHMqZW5kaWZcPicgY29udGFpbnM9Y2FsZW5kYXJTcGFjZUVycm9yLGNhbGVuZGFyQ3BwU2tpcAorc3luIHJlZ2lvbiAgY2FsZW5kYXJJbmNsdWRlZAlkaXNwbGF5IGNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCitzeW4gbWF0Y2ggICBjYWxlbmRhckluY2x1ZGVkCWRpc3BsYXkgY29udGFpbmVkICc8W14+XSo+Jworc3luIG1hdGNoICAgY2FsZW5kYXJJbmNsdWRlCWRpc3BsYXkgJ15ccyojXHMqaW5jbHVkZVw+XHMqWyI8XScgY29udGFpbnM9Y2FsZW5kYXJJbmNsdWRlZAorc3luIGNsdXN0ZXIgY2FsZW5kYXJQcmVQcm9jR3JvdXAgICAgY29udGFpbnM9Y2FsZW5kYXJQcmVDb25kaXQsY2FsZW5kYXJJbmNsdWRlZCxjYWxlbmRhckluY2x1ZGUsY2FsZW5kYXJEZWZpbmUsY2FsZW5kYXJDcHBPdXQsY2FsZW5kYXJDcHBPdXQyLGNhbGVuZGFyQ3BwU2tpcCxjYWxlbmRhclN0cmluZyxjYWxlbmRhclNwZWNpYWwsY2FsZW5kYXJUb2RvCitzeW4gcmVnaW9uICBjYWxlbmRhckRlZmluZQlzdGFydD0nXlxzKiNccypcJShkZWZpbmVcfHVuZGVmXClcPicgc2tpcD0nXFwkJyBlbmQ9JyQnIGNvbnRhaW5zPUFMTEJVVCxAY2FsZW5kYXJQcmVQcm9jR3JvdXAKK3N5biByZWdpb24gIGNhbGVuZGFyUHJlUHJvYwlzdGFydD0nXlxzKiNccypcJShwcmFnbWFcfGxpbmVcfHdhcm5pbmdcfHdhcm5cfGVycm9yXClcPicgc2tpcD0nXFwkJyBlbmQ9JyQnIGtlZXBlbmQgY29udGFpbnM9QUxMQlVULEBjYWxlbmRhclByZVByb2NHcm91cAorCisiIEtleXdvcmRzCitzeW4ga2V5d29yZCBjYWxlbmRhcktleXdvcmQJQ0hBUlNFVCBCT0RVTiBMQU5HCitzeW4gY2FzZSBpZ25vcmUKK3N5biBrZXl3b3JkIGNhbGVuZGFyS2V5d29yZAlFYXN0ZXIgUGFzaGthCitzeW4gY2FzZSBtYXRjaAorCisiIERhdGVzCitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCAgIGNhbGVuZGFyTnVtYmVyCSdcPFxkXCtcPicKK3N5biBrZXl3b3JkIGNhbGVuZGFyTW9udGgJSmFuW3VhcnldIEZlYltydWFyeV0gTWFyW2NoXSBBcHJbaWxdIE1heSBKdW5bZV0KK3N5biBrZXl3b3JkIGNhbGVuZGFyTW9udGgJSnVsW3ldIEF1Z1t1c3RdIFNlcFt0ZW1iZXJdIE9jdFtvYmVyXQorc3luIGtleXdvcmQgY2FsZW5kYXJNb250aAlOb3ZbZW1iZXJdIERlY1tlbWJlcl0KK3N5biBtYXRjaCAgIGNhbGVuZGFyTW9udGgJJ1w8XCUoSmFuXHxGZWJcfE1hclx8QXByXHxNYXlcfEp1blx8SnVsXHxBdWdcfFNlcFx8T2N0XHxOb3ZcfERlY1wpXC4nCitzeW4ga2V5d29yZCBjYWxlbmRhcldlZWtkYXkJTW9uW2RheV0gVHVlW3NkYXldIFdlZFtuZXNkYXldIFRodVtyc2RheV0KK3N5biBrZXl3b3JkIGNhbGVuZGFyV2Vla2RheQlGcmlbZGF5XSBTYXRbdXJkYXldIFN1bltkYXldCitzeW4gbWF0Y2ggICBjYWxlbmRhcldlZWtkYXkJJ1w8XCUoTW9uXHxUdWVcfFdlZFx8VGh1XHxGcmlcfFNhdFx8U3VuXClcLicgbmV4dGdyb3VwPWNhbGVuZGFyV2Vla2RheU1vZAorc3luIG1hdGNoICAgY2FsZW5kYXJXZWVrZGF5TW9kCSdbKy1dXGRcK1w+Jworc3luIGNhc2UgbWF0Y2gKKworIiBUaW1lcworc3luIG1hdGNoICAgY2FsZW5kYXJUaW1lCSdcPFwlKFswMV1cPVxkXHwyWzAtM11cKTpbMC01XVxkXCUoOlswLTVdXGRcKVw9Jworc3luIG1hdGNoICAgY2FsZW5kYXJUaW1lCSdcPFwlKDBcPVsxLTldXHwxWzAtMl1cKTpbMC01XVxkXCUoOlswLTVdXGRcKVw9XHMqW0FhUHBdW01tXScKKworIiBWYXJpYWJsZXMKK3N5biBtYXRjaCBjYWxlbmRhclZhcmlhYmxlCSdcKicKKworbGV0IGI6Y19taW5saW5lcyA9IDUwCQkiICNpZiAwIGNvbnN0cnVjdHMgY2FuIGJlIGxvbmcKK2V4ZWMgInN5biBzeW5jIGNjb21tZW50IGNhbGVuZGFyQ29tbWVudCBtaW5saW5lcz0iIC4gYjpjX21pbmxpbmVzCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2NhbGVuZGFyX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2NhbGVuZGFyX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGNhbGVuZGFyVG9kbwkJVG9kbworICBIaUxpbmsgY2FsZW5kYXJDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIGNhbGVuZGFyQ3BwU3RyaW5nCVN0cmluZworICBIaUxpbmsgY2FsZW5kYXJTcGVjaWFsCVNwZWNpYWxDaGFyCisgIEhpTGluayBjYWxlbmRhclByZUNvbmRpdAlQcmVDb25kaXQKKyAgSGlMaW5rIGNhbGVuZGFyQ3BwT3V0CUNvbW1lbnQKKyAgSGlMaW5rIGNhbGVuZGFyQ3BwT3V0MgljYWxlbmRhckNwcE91dAorICBIaUxpbmsgY2FsZW5kYXJDcHBTa2lwCWNhbGVuZGFyQ3BwT3V0CisgIEhpTGluayBjYWxlbmRhckluY2x1ZGVkCVN0cmluZworICBIaUxpbmsgY2FsZW5kYXJJbmNsdWRlCUluY2x1ZGUKKyAgSGlMaW5rIGNhbGVuZGFyRGVmaW5lCU1hY3JvCisgIEhpTGluayBjYWxlbmRhclByZVByb2MJUHJlUHJvYworICBIaUxpbmsgY2FsZW5kYXJLZXl3b3JkCUtleXdvcmQKKyAgSGlMaW5rIGNhbGVuZGFyTnVtYmVyCU51bWJlcgorICBIaUxpbmsgY2FsZW5kYXJNb250aAlTdHJpbmcKKyAgSGlMaW5rIGNhbGVuZGFyV2Vla2RheQlTdHJpbmcKKyAgSGlMaW5rIGNhbGVuZGFyV2Vla2RheU1vZAlTcGVjaWFsCisgIEhpTGluayBjYWxlbmRhclRpbWUJCU51bWJlcgorICBIaUxpbmsgY2FsZW5kYXJWYXJpYWJsZQlJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImNhbGVuZGFyIgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jYXRhbG9nLnZpbSBiL3J1bnRpbWUvc3ludGF4L2NhdGFsb2cudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOGUzODgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jYXRhbG9nLnZpbQpAQCAtMCwwICsxLDMwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJc2dtbCBjYXRhbG9nIGZpbGUKKyIgTWFpbnRhaW5lcjoJSm9oYW5uZXMgWmVsbG5lciA8am9oYW5uZXNAemVsbG5lci5vcmc+CisiIExhc3QgQ2hhbmdlOglUdWUsIDI3IEFwciAyMDA0IDE0OjU0OjU5IENFU1QKKyIgRmlsZW5hbWVzOgkvZXRjL3NnbWwuY2F0YWxvZworIiAkSWQkCisKKyIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCisiIHN0cmluZ3MKK3N5biByZWdpb24gIGNhdGFsb2dTdHJpbmcgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBrZWVwZW5kCitzeW4gcmVnaW9uICBjYXRhbG9nU3RyaW5nIHN0YXJ0PSsnKyBza2lwPStcXFxcXHxcXCcrIGVuZD0rJysga2VlcGVuZAorCitzeW4gcmVnaW9uICBjYXRhbG9nQ29tbWVudCAgICAgIHN0YXJ0PSstLSsgICBlbmQ9Ky0tKyBjb250YWlucz1jYXRhbG9nVG9kbworc3luIGtleXdvcmQgY2F0YWxvZ1RvZG8JCVRPRE8gRklYTUUgWFhYIGNvbnRhaW5lZCBkaXNwbGF5CitzeW4ga2V5d29yZCBjYXRhbG9nS2V5d29yZAlET0NUWVBFIE9WRVJSSURFIFBVQkxJQyBEVERERUNMIEVOVElUWSBkaXNwbGF5CisKKworIiBUaGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCitoaSBkZWYgbGluayBjYXRhbG9nU3RyaW5nCQkgICAgIFN0cmluZworaGkgZGVmIGxpbmsgY2F0YWxvZ0NvbW1lbnQJCSAgICAgQ29tbWVudAoraGkgZGVmIGxpbmsgY2F0YWxvZ1RvZG8JCQkgICAgIFRvZG8KK2hpIGRlZiBsaW5rIGNhdGFsb2dLZXl3b3JkCQkgICAgIFN0YXRlbWVudAorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjYXRhbG9nIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY2RsLnZpbSBiL3J1bnRpbWUvc3ludGF4L2NkbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmMTI0YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2NkbC52aW0KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY2YudmltIGIvcnVudGltZS9zeW50YXgvY2YudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjExMWQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jZi52aW0KQEAgLTAsMCArMSwxNTEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiICAgIExhbmd1YWdlOiBDb2xkIEZ1c2lvbgorIiAgTWFpbnRhaW5lcjogSmVmZiBMYW56YXJvdHRhIChqZWZmbGFuemFyb3R0YUB5YWhvby5jb20pCisiCSAgVVJMOiBodHRwOi8vbGFuemFyb3R0YS50cmlwb2QuY29tL3ZpbS9zeW50YXgvY2YudmltLnppcAorIiBMYXN0IENoYW5nZTogT2N0b2JlciAxNSwgMjAwMQorIglVc2FnZTogU2luY2UgQ29sZCBGdXNpb24gaGFzIGl0cyBvd24gdmVyc2lvbiBvZiBodG1sIGNvbW1lbnRzLAorIgkgICAgICAgbWFrZSBzdXJlIHRoYXQgeW91IHB1dAorIgkgICAgICAgJ2xldCBodG1sX3dyb25nX2NvbW1lbnRzPTEnIGluIHlvdXIgX3ZpbXJjIGZpbGUuCisKKyIgRm9yIHZlcnNpb24gNS54LCBjbGVhciBhbGwgc3ludGF4IGl0ZW1zLgorIiBGb3IgdmVyc2lvbiA2LngsIHF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZC4KK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFVzZSBhbGwgdGhlIHN0dWZmIGZyb20gdGhlIG9yaWdpbmFsIGh0bWwgc3ludGF4IGZpbGUuCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9odG1sLnZpbQorZWxzZQorICBydW50aW1lISBzeW50YXgvaHRtbC52aW0KK2VuZGlmCisKKyIgVGFnIG5hbWVzLgorc3luIGtleXdvcmQgY2ZUYWdOYW1lIGNvbnRhaW5lZCBjZmFib3J0IGNmYXBwbGV0IGNmYXBwbGljYXRpb24gY2Zhc3NvY2lhdGUKK3N5biBrZXl3b3JkIGNmVGFnTmFtZSBjb250YWluZWQgY2ZhdXRoZW50aWNhdGUgY2ZicmVhayBjZmNhY2hlIGNmY29sCitzeW4ga2V5d29yZCBjZlRhZ05hbWUgY29udGFpbmVkIGNmY29sbGVjdGlvbiBjZmNvbnRlbnQgY2Zjb29raWUgY2ZkaXJlY3RvcnkKK3N5biBrZXl3b3JkIGNmVGFnTmFtZSBjb250YWluZWQgY2ZlcnJvciBjZmV4aXQgY2ZmaWxlIGNmZm9ybSBjZmZ0cCBjZmdyaWQKK3N5biBrZXl3b3JkIGNmVGFnTmFtZSBjb250YWluZWQgY2ZncmlkY29sdW1uIGNmZ3JpZHJvdyBjZmdyaWR1cGRhdGUgY2ZoZWFkZXIKK3N5biBrZXl3b3JkIGNmVGFnTmFtZSBjb250YWluZWQgY2ZodG1saGVhZCBjZmh0dHAgY2ZodHRwcGFyYW0KK3N5biBrZXl3b3JkIGNmVGFnTmFtZSBjb250YWluZWQgY2ZpZiBjZmVsc2VpZiBjZmVsc2UKK3N5biBrZXl3b3JkIGNmVGFnTmFtZSBjb250YWluZWQgY2ZpbmNsdWRlIGNmaW5kZXggY2ZpbnB1dCBjZmluc2VydAorc3luIGtleXdvcmQgY2ZUYWdOYW1lIGNvbnRhaW5lZCBjZmxkYXAgY2Zsb2NhdGlvbiBjZmxvY2sgY2Zsb29wIGNmbWFpbAorc3luIGtleXdvcmQgY2ZUYWdOYW1lIGNvbnRhaW5lZCBjZm1vZHVsZSBjZm9iamVjdCBjZm91dHB1dCBjZnBhcmFtIGNmcG9wCitzeW4ga2V5d29yZCBjZlRhZ05hbWUgY29udGFpbmVkIGNmcHJvY3BhcmFtIGNmcHJvY3Jlc3VsdCBjZnF1ZXJ5IGNmcmVnaXN0cnkKK3N5biBrZXl3b3JkIGNmVGFnTmFtZSBjb250YWluZWQgY2ZyZXBvcnQgY2ZzY2hlZHVsZSBjZnNjcmlwdCBjZnNlYXJjaCBjZnNlbGVjdAorc3luIGtleXdvcmQgY2ZUYWdOYW1lIGNvbnRhaW5lZCBjZnNldCBjZnNldHRpbmcgY2ZzbGlkZXIgY2ZzdG9yZWRwcm9jCitzeW4ga2V5d29yZCBjZlRhZ05hbWUgY29udGFpbmVkIGNmc3dpdGNoIGNmY2FzZSBjZmRlZmF1bHRjYXNlCitzeW4ga2V5d29yZCBjZlRhZ05hbWUgY29udGFpbmVkIGNmdGFibGUgY2Z0ZXh0aW5wdXQgY2Z0aHJvdyBjZnRyYW5zYWN0aW9uCitzeW4ga2V5d29yZCBjZlRhZ05hbWUgY29udGFpbmVkIGNmdHJlZSBjZnRyZWVpdGVtCitzeW4ga2V5d29yZCBjZlRhZ05hbWUgY29udGFpbmVkIGNmdHJ5IGNmY2F0Y2gKK3N5biBrZXl3b3JkIGNmVGFnTmFtZSBjb250YWluZWQgY2Z1cGRhdGUgY2Z3ZGR4CisKKyIgTGVnYWwgYXJndW1lbnRzLgorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIGFjY2VwdCBhY3Rpb24gYWRkbmV3bGluZSBhZGR0b2tlbiBhZ2VudG5hbWUgYWxpZ24KK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBhcHBlbmRrZXkgYXBwbGljYXRpb250aW1lb3V0IGF0dGFjaG1lbnRwYXRoCitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgYXR0cmlidXRlY29sbGVjdGlvbiBhdHRyaWJ1dGVzIGJhc2V0YWcgYmdjb2xvcgorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIGJsb2NrZmFjdG9yIGJvZHkgYm9sZCBib3JkZXIgYnJhbmNoIGNhY2hlZGFmdGVyCitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgY2FjaGVkd2l0aGluIGNjIGNmc3FsdHlwZSBjaGVja2VkIGNsYXNzIGNsaWVudG1hbmFnZW1lbnQKK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBjbGllbnRzdG9yYWdlIGNvbGhlYWRlcmFsaWduIGNvbGhlYWRlcmJvbGQgY29saGVhZGVyZm9udAorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIGNvbGhlYWRlcmZvbnRzaXplIGNvbGhlYWRlcml0YWxpYyBjb2xoZWFkZXJzIGNvbGxlY3Rpb24KK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBjb2xzcGFjaW5nIGNvbHVtbnMgY29tcGxldGVwYXRoIGNvbm5lY3Rpb24gY29udGV4dAorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIGNyaXRlcmlhIGN1c3RvbTEgY3VzdG9tMiBkYXRhIGRhdGFhbGlnbiBkYXRhY29sbGVjdGlvbgorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIGRhdGFzb3VyY2UgZGJuYW1lIGRic2VydmVyIGRidHlwZSBkYnZhcm5hbWUgZGVidWcgZGVmYXVsdAorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIGRlbGV0ZSBkZWxldGVidXR0b24gZGVsZXRlZmlsZSBkZWxpbWl0ZXIgZGVzdGluYXRpb24gZGV0YWlsCitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgZGlyZWN0b3J5IGRpc3BsYXkgZG4gZG9tYWluIGVuYWJsZWNhYiBlbmFibGVjZm91dHB1dG9ubHkKK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBlbmN0eXBlIGVuZGRhdGUgZW5kdGltZSBlbnRyeSBlcnJvcmNvZGUgZXhwYW5kIGV4cGlyZXMKK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBleHBpcmV1cmwgZXhwcmVzc2lvbiBleHRlbmRlZGluZm8gZXh0ZW5zaW9ucyBleHRlcm5hbAorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIGZpbGUgZmlsZWZpZWxkIGZpbHRlciBmb250IGZvbnRzaXplIGZvcm1maWVsZHMgZm9ybXVsYQorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIGZyb20gZ3JpZCBncmlkZGF0YWFsaWduIGdyaWRsaW5lcyBncm9vdmVjb2xvciBncm91cCBoZWFkZXIKK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBoZWFkZXJhbGlnbiBoZWFkZXJib2xkIGhlYWRlcmZvbnQgaGVhZGVyZm9udHNpemUgaGVhZGVyaXRhbGljCitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgaGVhZGVybGluZXMgaGVpZ2h0IGhpZ2hsaWdodGhyZWYgaHJlZiBocmVma2V5IGhzY3JvbGwgaHNwYWNlCitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgaHRtbHRhYmxlIGltZyBpbWdvcGVuIGltZ3N0eWxlIGluZGV4IGlucHV0IGluc2VydCBpbnNlcnRidXR0b24KK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBpbnRlcnZhbCBpc29sYXRpb24gaXRhbGljIGtleSBrZXlvbmx5IGxhYmVsIGxhbmd1YWdlIG1haWxlcmlkCitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgbWFpbHRvIG1heGxlbmd0aCBtYXhyb3dzIG1lc3NhZ2UgbWVzc2FnZW51bWJlciBtZXRob2QKK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBtaW1lYXR0YWNoIG1vZGUgbXVsdGlwbGUgbmFtZSBuYW1lY29tcGxpY3QgbmV3ZGlyZWN0b3J5CitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgbm90c3VwcG9ydGVkIG51bGwgbnVtYmVyZm9ybWF0IG9uZXJyb3Igb25zdWJtaXQgb252YWxpZGF0ZQorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIG9wZXJhdGlvbiBvcmRlcmJ5IG91dHB1dCBwYXJyZW50IHBhc3N0aHJvdWdoIHBhc3N3b3JkIHBhdGgKK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBwaWN0dXJlYmFyIHBvcnQgcHJvY2VkdXJlIHByb3RvY29sIHByb3ZpZGVyIHByb3ZpZGVyZHNuCitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgcHJveHlieXBhc3MgcHJveHlzZXJ2ZXIgcHVibGlzaCBxdWVyeSBxdWVyeWFzcm9vdCByYW5nZQorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIHJlY3Vyc2UgcmVmcmVzaGxhYmVsIHJlcG9ydCByZXF1ZXN0dGltZW91dCByZXF1aXJlZCByZXNldAorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIHJlc29sZXVybCByZXN1bHRzZXQgcmV0cnljb3VudCByZXR1cm5jb2RlIHJvd2hlYWRlcmFsaWduCitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgcm93aGVhZGVyYm9sZCByb3doZWFkZXJmb250IHJvd2hlYWRlcmZvbnRzaXplIHJvd2hlYWRlcml0YWxpYworc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIHJvd2hlYWRlcnMgcm93aGVhZGVyd2lkdGggcm93aGVpZ2h0IHNjYWxlIHNjb3BlIHNlY3VyZQorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIHNlY3VyaXR5Y29udGV4dCBzZWxlY3Qgc2VsZWN0Y29sb3Igc2VsZWN0ZWQgc2VsZWN0bW9kZSBzZXJ2ZXIKK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBzZXNzaW9ubWFuYWdlbWVudCBzZXNzaW9udGltZW91dCBzZXRjbGllbnRjb29raWVzIHNldGNvb2tpZQorc3luIGtleXdvcmQgY2ZBcmcgY29udGFpbmVkIHNob3dkZWJ1Z291dHB1dCBzaG93ZXJyb3Igc2l6ZSBzb3J0IHNvcnRhc2NlbmRpbmdidXR0b24KK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBzb3J0ZGVzY2VuZGluZ2J1dHRvbiBzb3VyY2Ugc3FsIHN0YXJ0IHN0YXJ0ZGF0ZSBzdGFydHJvdyBzdGFydHRpbWUKK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCBzdGVwIHN0b3BvbmVycm9yIHN1YmplY3QgdGFibGVuYW1lIHRhYmxlb3duZXIgdGFibGVxdWFsaWZpZXIKK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCB0YXJnZXQgdGFzayB0ZW1wbGF0ZSB0ZXh0IHRleHRjb2xvciB0ZXh0cXVhbGlmaWVyCitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgdGhyb3dvbmZhaWx1cmUgdGhyb3dvbnRpbWVvdXQgdGltZW91dCB0aXRsZSB0byB0b3BsZXZlbHZhcmlhYmxlCitzeW4ga2V5d29yZCBjZkFyZyBjb250YWluZWQgdHlwZSB1cmwgdXJscGF0aCB1c2VybmFtZSB1c2V0aW1lem9uZWluZm8gdmFsaWRhdGUgdmFsdWUKK3N5biBrZXl3b3JkIGNmQXJnIGNvbnRhaW5lZCB2YXJpYWJsZSB2c2Nyb2xsIHZzcGFjZSB3aWR0aAorCisiIENvbGQgRnVzaW9uIEZ1bmN0aW9ucy4KK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBBYnMgQXJyYXlBcHBlbmQgQXJyYXlBdmcgQXJyYXlDbGVhciBBcnJheURlbGV0ZUF0CitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgQXJyYXlJbnNlcnRBdCBBcnJheUlzRW1wdHkgQXJyYXlMZW4gQXJyYXlNYXgKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBBcnJheU1pbiBBcnJheU5ldyBBcnJheVByZXBlbmQgQXJyYXlSZXNpemUgQXJyYXlTZXQKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBBcnJheVNvcnQgQXJyYXlTdW0gQXJyYXlTd2FwIEFycmF5VG9MaXN0IEFzYyBBdG4KK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBCaXRBbmQgQml0TWFza0NsZWFyIEJpdE1hc2tSZWFkIEJpdE1hc2tTZXQgQml0Tm90CitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgQml0T3IgQml0U0hMTiBCaXRTSFJOIEJpdFhvciBDSnVzdGlmeSBDZWlsaW5nIENocgorc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIENvbXBhcmUgQ29tcGFyZU5vQ2FzZSBDb3MgQ3JlYXRlRGF0ZSBDcmVhdGVEYXRlVGltZQorc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIENyZWF0ZU9EQkNEYXRlIENyZWF0ZU9EQkNEYXRlVGltZSBDcmVhdGVPREJDVGltZQorc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIENyZWF0ZVRpbWUgQ3JlYXRlVGltZVNwYW4gREUgRGF0ZUFkZCBEYXRlQ29tcGFyZSBEYXRlRGlmZgorc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIERhdGVGb3JtYXQgRGF0ZVBhcnQgRGF5IERheU9mV2VlayBEYXlPZldlZWtBc1N0cmluZworc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIERheU9mWWVhciBEYXlzSW5Nb250aCBEYXlzSW5ZZWFyIERlY2ltYWxGb3JtYXQgRGVjcmVtZW50VmFsdWUKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBEZWNyeXB0IERlbGV0ZUNsaWVudFZhcmlhYmxlIERpcmVjdG9yeUV4aXN0cyBEb2xsYXJGb3JtYXQKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBFbmNyeXB0IEV2YWx1YXRlIEV4cCBFeHBhbmRQYXRoIEZpbGVFeGlzdHMgRmluZCBGaW5kTm9DYXNlCitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgRmluZE9uZU9mIEZpcnN0RGF5T2ZNb250aCBGaXggRm9ybWF0QmFzZU4gR2V0QmFzZVRhZ0RhdGEKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBHZXRCYXNlVGFnTGlzdCBHZXRDbGllbnRWYXJpYWJsZXNMaXN0IEdldERpcmVjdG9yeUZyb21QYXRoCitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgR2V0RmlsZUZyb21QYXRoIEdldExvY2FsZSBHZXRUZW1wRGlyZWN0b3J5IEdldFRlbXBGaWxlCitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgR2V0VGVtcGxhdGVQYXRoIEdldFRpY2tDb3VudCBHZXRUb2tlbiBIVE1MQ29kZUZvcm1hdAorc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIEhUTUxFZGl0Rm9ybWF0IEhvdXIgSUlmIEluY3JlbWVudFZhbHVlIElucHV0QmFzZU4gSW5zZXJ0CitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgSW50IElzQXJyYXkgSXNBdXRoZW50aWNhdGVkIElzQXV0aG9yaXplZCBJc0Jvb2xlYW4gSXNEYXRlCitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgSXNEZWJ1Z01vZGUgSXNEZWZpbmVkIElzTGVhcFllYXIgSXNOdW1lcmljIElzTnVtZXJpY0RhdGUKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBJc1F1ZXJ5IElzU2ltcGxlVmFsdWUgSXNTdHJ1Y3QgTENhc2UgTEp1c3RpZnkgTFNDdXJyZW5jeUZvcm1hdAorc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIExTRGF0ZUZvcm1hdCBMU0lzQ3VycmVuY3kgTFNJc0RhdGUgTFNJc051bWVyaWMgTFNOdW1iZXJGb3JtYXQKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBMU1BhcnNlQ3VycmVuY3kgTFNQYXJzZURhdGVUaW1lIExTUGFyc2VOdW1iZXIgTFNUaW1lRm9ybWF0CitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgTFRyaW0gTGVmdCBMZW4gTGlzdEFwcGVuZCBMaXN0Q2hhbmdlRGVsaW1zIExpc3RDb250YWlucworc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIExpc3RDb250YWluc05vQ2FzZSBMaXN0RGVsZXRlQXQgTGlzdEZpbmQgTGlzdEZpbmROb0Nhc2UgTGlzdEZpcnN0CitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgTGlzdEdldEF0IExpc3RJbnNlcnRBdCBMaXN0TGFzdCBMaXN0TGVuIExpc3RQcmVwZW5kIExpc3RSZXN0CitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgTGlzdFNldEF0IExpc3RUb0FycmF5IExvZyBMb2cxMCBNYXggTWlkIE1pbiBNaW51dGUgTW9udGgKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBNb250aEFzU3RyaW5nIE5vdyBOdW1iZXJGb3JtYXQgUGFyYWdyYXBoRm9ybWF0IFBhcmFtZXRlckV4aXN0cworc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIFBhcnNlRGF0ZVRpbWUgUGkgUHJlc2VydmVTaW5nbGVRdW90ZXMgUXVhcnRlciBRdWVyeUFkZFJvdworc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIFF1ZXJ5TmV3IFF1ZXJ5U2V0Q2VsbCBRdW90ZWRWYWx1ZUxpc3QgUkVGaW5kIFJFRmluZE5vQ2FzZQorc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIFJFUmVwbGFjZSBSRVJlcGxhY2VOb0Nhc2UgUkp1c3RpZnkgUlRyaW0gUmFuZCBSYW5kUmFuZ2UKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBSYW5kb21pemUgUmVtb3ZlQ2hhcnMgUmVwZWF0U3RyaW5nIFJlcGxhY2UgUmVwbGFjZUxpc3QKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBSZXBsYWNlTm9DYXNlIFJldmVyc2UgUmlnaHQgUm91bmQgU2Vjb25kIFNldExvY2FsZSBTZXRWYXJpYWJsZQorc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIFNnbiBTaW4gU3BhbkV4Y2x1ZGluZyBTcGFuSW5jbHVkaW5nIFNxciBTdHJpcENSIFN0cnVjdENsZWFyCitzeW4ga2V5d29yZCBjZkZ1bmN0aW9uTmFtZSBjb250YWluZWQgU3RydWN0Q29weSBTdHJ1Y3RDb3VudCBTdHJ1Y3REZWxldGUgU3RydWN0RmluZCBTdHJ1Y3RJbnNlcnQKK3N5biBrZXl3b3JkIGNmRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBTdHJ1Y3RJc0VtcHR5IFN0cnVjdEtleUV4aXN0cyBTdHJ1Y3ROZXcgU3RydWN0VXBkYXRlIFRhbgorc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIFRpbWVGb3JtYXQgVHJpbSBVQ2FzZSBVUkxFbmNvZGVkRm9ybWF0IFZhbCBWYWx1ZUxpc3QgV2Vlaworc3luIGtleXdvcmQgY2ZGdW5jdGlvbk5hbWUgY29udGFpbmVkIFdyaXRlT3V0cHV0IFllYXIgWWVzTm9Gb3JtYXQKKworc3luIGNsdXN0ZXIgaHRtbFRhZ05hbWVDbHVzdGVyIGFkZD1jZlRhZ05hbWUKK3N5biBjbHVzdGVyIGh0bWxBcmdDbHVzdGVyIGFkZD1jZkFyZyxjZkZ1bmN0aW9uTmFtZQorCitzeW4gcmVnaW9uIGNmRnVuY3Rpb25SZWdpb24gc3RhcnQ9JyMnIGVuZD0nIycgY29udGFpbnM9Y2ZGdW5jdGlvbk5hbWUKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LnggYW5kIGVhcmxpZXIsIG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5LgorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyLCBvbmx5IHdoZW4gYW5kIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQuCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY2Zfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfY2Zfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgY2ZUYWdOYW1lIFN0YXRlbWVudAorICBIaUxpbmsgY2ZBcmcgVHlwZQorICBIaUxpbmsgY2ZGdW5jdGlvbk5hbWUgRnVuY3Rpb24KKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiY2YiCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2NmZy52aW0gYi9ydW50aW1lL3N5bnRheC9jZmcudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZThiMjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jZmcudmltCkBAIC0wLDAgKzEsNjAgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglHb29kIG9sZCBDRkcgZmlsZXMKKyIgTWFpbnRhaW5lcjoJSWdvciBOLiBQcmlzY2hlcG9mZiAoaWdvckB0eXVtYml0LnJ1LCBwcmlfaWdvckBtYWlsLnJ1KQorIiBMYXN0IGNoYW5nZToJMjAwMSBTZXAgMDIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMgKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKKyIgY2FzZSBvZmYKK3N5biBjYXNlIGlnbm9yZQorc3luIGtleXdvcmQgQ2ZnT25PZmYgIE9OIE9GRiBZRVMgTk8gVFJVRSBGQUxTRSAgY29udGFpbmVkCitzeW4gbWF0Y2ggVW5jUGF0aCAiXFxcXFxwKiIgY29udGFpbmVkCisiRG9zIERyaXZlOlxQYXRoCitzeW4gbWF0Y2ggQ2ZnRGlyZWN0b3J5ICJbYS16QS1aXTpcXFxwKiIgY29udGFpbmVkCisiUGFyYW1ldGVycworc3luIG1hdGNoICAgQ2ZnUGFyYW1zICAgICIuKj0ibWU9ZS0xIGNvbnRhaW5zPUNmZ0NvbW1lbnQKKyIuLi4gYW5kIHRoZWlyIHZhbHVlcyAoZG9uJ3Qgd2FudCB0byBoaWdobGlnaHQgJz0nIHNpZ24pCitzeW4gbWF0Y2ggICBDZmdWYWx1ZXMgICAgIj0uKiJocz1zKzEgY29udGFpbnM9Q2ZnRGlyZWN0b3J5LFVuY1BhdGgsQ2ZnQ29tbWVudCxDZmdTdHJpbmcsQ2ZnT25PZmYKKworIiBTZWN0aW9ucworc3luIG1hdGNoIENmZ1NlY3Rpb24JICAgICJcWy4qXF0iCitzeW4gbWF0Y2ggQ2ZnU2VjdGlvbgkgICAgInsuKn0iCisKKyIgU3RyaW5nCitzeW4gbWF0Y2ggIENmZ1N0cmluZwkiXCIuKlwiIiBjb250YWluZWQKK3N5biBtYXRjaCAgQ2ZnU3RyaW5nICAgICInLionIiAgIGNvbnRhaW5lZAorCisiIENvbW1lbnRzIChFdmVyeXRoaW5nIGJlZm9yZSAnIycgb3IgJy8vJyBvciAnOycpCitzeW4gbWF0Y2ggIENmZ0NvbW1lbnQJIiMuKiIKK3N5biBtYXRjaCAgQ2ZnQ29tbWVudAkiOy4qIgorc3luIG1hdGNoICBDZmdDb21tZW50CSJcL1wvLioiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2h0bGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jZmdfc3luX2luaXRzIikKKyAgICBpZiB2ZXJzaW9uIDwgNTA4CisJbGV0IGRpZF9jZmdfc3luX2luaXRzID0gMQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgICAgZWxzZQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgIGVuZGlmCisgICAgSGlMaW5rIENmZ09uT2ZmICAgICBMYWJlbAorICAgIEhpTGluayBDZmdDb21tZW50CUNvbW1lbnQKKyAgICBIaUxpbmsgQ2ZnU2VjdGlvbglUeXBlCisgICAgSGlMaW5rIENmZ1N0cmluZwlTdHJpbmcKKyAgICBIaUxpbmsgQ2ZnUGFyYW1zICAgIEtleXdvcmQKKyAgICBIaUxpbmsgQ2ZnVmFsdWVzICAgIENvbnN0YW50CisgICAgSGlMaW5rIENmZ0RpcmVjdG9yeSBEaXJlY3RvcnkKKyAgICBIaUxpbmsgVW5jUGF0aCAgICAgIERpcmVjdG9yeQorCisgICAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjZmciCisiIHZpbTp0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jaC52aW0gYi9ydW50aW1lL3N5bnRheC9jaC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3ODdjOAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2NoLnZpbQpAQCAtMCwwICsxLDUzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIENoCisiIE1haW50YWluZXI6ICAgU29mdEludGVncmF0aW9uLCBJbmMuIDxpbmZvQHNvZnRpbnRlZ3JhdGlvbi5jb20+CisiIFVSTDoJCWh0dHA6Ly93d3cuc29mdGludGVncmF0aW9uLmNvbS9kb3dubG9hZC92aW0vc3ludGF4L2NoLnZpbQorIiBMYXN0IGNoYW5nZToJMjAwNCBNYXkgMTYKKyIJCUNyZWF0ZWQgYmFzZWQgb24gY3BwLnZpbQorIgorIiBDaCBpcyBhIEMvQysrIGludGVycHJldGVyIHdpdGggbWFueSBoaWdoIGxldmVsIGV4dGVuc2lvbnMKKyIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFJlYWQgdGhlIEMgc3ludGF4IHRvIHN0YXJ0IHdpdGgKK2lmIHZlcnNpb24gPCA2MDAKKyAgc28gPHNmaWxlPjpwOmgvYy52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2MudmltCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKK2VuZGlmCisKKyIgQ2ggZXh0ZW50aW9ucworCitzeW4ga2V5d29yZAljaFN0YXRlbWVudAluZXcgZGVsZXRlIHRoaXMKK3N5biBrZXl3b3JkCWNoQWNjZXNzCXB1YmxpYyBwcml2YXRlCitzeW4ga2V5d29yZAljaFN0b3JhZ2VDbGFzcwlfX2RlY2xzcGVjKGdsb2JhbCkgX19kZWNsc3BlYyhsb2NhbCkKK3N5biBrZXl3b3JkCWNoU3RydWN0dXJlCWNsYXNzCitzeW4ga2V5d29yZAljaFR5cGUJCXN0cmluZ190IGFycmF5CisKKyIgRGVmYXVsdCBoaWdobGlnaHRpbmcKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jaF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jaF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorICBIaUxpbmsgY2hBY2Nlc3MJCWNoU3RhdGVtZW50CisgIEhpTGluayBjaEV4Y2VwdGlvbnMJCUV4Y2VwdGlvbgorICBIaUxpbmsgY2hTdGF0ZW1lbnQJCVN0YXRlbWVudAorICBIaUxpbmsgY2hUeXBlCQkJVHlwZQorICBIaUxpbmsgY2hTdHJ1Y3R1cmUJCVN0cnVjdHVyZQorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiY2giCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jaGFuZ2UudmltIGIvcnVudGltZS9zeW50YXgvY2hhbmdlLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJmODhiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY2hhbmdlLnZpbQpAQCAtMCwwICsxLDQyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJV0VCIENoYW5nZXMKKyIgTWFpbnRhaW5lcjoJQW5kcmVhcyBTY2hlcmVyIDxhbmRyZWFzLnNjaGVyZXJAcG9ib3guY29tPgorIiBMYXN0IENoYW5nZToJQXByaWwgMjUsIDIwMDEKKworIiBEZXRhaWxzIG9mIHRoZSBjaGFuZ2UgbWVjaGFuaXNtIG9mIHRoZSBXRUIgYW5kIENXRUIgbGFuZ3VhZ2VzIGNhbiBiZSBmb3VuZAorIiBpbiB0aGUgYXJ0aWNsZXMgYnkgRG9uYWxkIEUuIEtudXRoIGFuZCBTaWx2aW8gTGV2eSBjaXRlZCBpbiAid2ViLnZpbSIgYW5kCisiICJjd2ViLnZpbSIgcmVzcGVjdGl2ZWx5LgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW4gY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgV2UgZGlzdGluZ3Vpc2ggdHdvIGdyb3VwcyBvZiBtYXRlcmlhbCwgKGEpIHN0dWZmIGJldHdlZW4gQHguLkB5LCBhbmQKKyIgKGIpIHN0dWZmIGJldHdlZW4gQHkuLkB6LiBXRUIvQ1dFQiBpZ25vcmUgZXZlcnl0aGluZyBlbHNlIGluIGEgY2hhbmdlIGZpbGUuCitzeW4gcmVnaW9uIGNoYW5nZUZyb21NYXRlcmlhbCBzdGFydD0iXkB4LiokIm1zPWUrMSBlbmQ9Il5AeS4qJCJtZT1zLTEKK3N5biByZWdpb24gY2hhbmdlVG9NYXRlcmlhbCBzdGFydD0iXkB5LiokIm1zPWUrMSBlbmQ9Il5Aei4qJCJtZT1zLTEKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY2hhbmdlX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2NoYW5nZV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBjaGFuZ2VGcm9tTWF0ZXJpYWwgU3RyaW5nCisgIEhpTGluayBjaGFuZ2VUb01hdGVyaWFsIFN0YXRlbWVudAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjaGFuZ2UiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jaGFuZ2Vsb2cudmltIGIvcnVudGltZS9zeW50YXgvY2hhbmdlbG9nLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2VkZGRhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY2hhbmdlbG9nLnZpbQpAQCAtMCwwICsxLDc4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJZ2VuZXJpYyBDaGFuZ2VMb2cgZmlsZQorIiBXcml0dGVuIEJ5OglHZWRpbWluYXMgUGF1bGF1c2thcyA8bWVuZXNpc0BkZWxmaS5sdD4KKyIgTWFpbnRhaW5lcjoJQ29yaW5uYSBWaW5zY2hlbiA8dmluc2NoZW5AcmVkaGF0LmNvbT4KKyIgTGFzdCBDaGFuZ2U6CUp1bmUgMSwgMjAwMworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCitpZiBleGlzdHMoJ2I6Y2hhbmdlbG9nX3NwYWNpbmdfZXJyb3JzJykKKyAgbGV0IHM6c3BhY2luZ19lcnJvcnMgPSBiOmNoYW5nZWxvZ19zcGFjaW5nX2Vycm9ycworZWxzZWlmIGV4aXN0cygnZzpjaGFuZ2Vsb2dfc3BhY2luZ19lcnJvcnMnKQorICBsZXQgczpzcGFjaW5nX2Vycm9ycyA9IGc6Y2hhbmdlbG9nX3NwYWNpbmdfZXJyb3JzCitlbHNlCisgIGxldCBzOnNwYWNpbmdfZXJyb3JzID0gMQorZW5kaWYKKworaWYgczpzcGFjaW5nX2Vycm9ycworICBzeW4gbWF0Y2gJY2hhbmdlbG9nRXJyb3IgIl4gXCsiCitlbmRpZgorCitzeW4gbWF0Y2gJY2hhbmdlbG9nVGV4dAkiXlxzLiokIiBjb250YWlucz1jaGFuZ2Vsb2dNYWlsLGNoYW5nZWxvZ051bWJlcixjaGFuZ2Vsb2dNb250aCxjaGFuZ2Vsb2dEYXksY2hhbmdlbG9nRXJyb3IKK3N5biBtYXRjaAljaGFuZ2Vsb2dIZWFkZXIJIl5cUy4qJCIgY29udGFpbnM9Y2hhbmdlbG9nTnVtYmVyLGNoYW5nZWxvZ01vbnRoLGNoYW5nZWxvZ0RheSxjaGFuZ2Vsb2dNYWlsCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biByZWdpb24JY2hhbmdlbG9nRmlsZXMJc3RhcnQ9Il5cc1wrWysqXVxzIiBlbmQ9IjpccyIgZW5kPSJeJCIgY29udGFpbnM9Y2hhbmdlbG9nQnVsbGV0LGNoYW5nZWxvZ0NvbG9uLGNoYW5nZWxvZ0Vycm9yIGtlZXBlbmQKKyAgc3luIHJlZ2lvbgljaGFuZ2Vsb2dGaWxlcwlzdGFydD0iXlxzXCtbKFtdIiBlbmQ9IjpccyIgZW5kPSJeJCIgY29udGFpbnM9Y2hhbmdlbG9nQnVsbGV0LGNoYW5nZWxvZ0NvbG9uLGNoYW5nZWxvZ0Vycm9yIGtlZXBlbmQKKyAgc3luIG1hdGNoCWNoYW5nZWxvZ0NvbG9uCWNvbnRhaW5lZCAiOlxzIgorZWxzZQorICBzeW4gcmVnaW9uCWNoYW5nZWxvZ0ZpbGVzCXN0YXJ0PSJeXHNcK1srKl1ccyIgZW5kPSI6IiBlbmQ9Il4kIiBjb250YWlucz1jaGFuZ2Vsb2dCdWxsZXQsY2hhbmdlbG9nQ29sb24sY2hhbmdlTG9nRnVuY3MsY2hhbmdlbG9nRXJyb3Iga2VlcGVuZAorICBzeW4gcmVnaW9uCWNoYW5nZWxvZ0ZpbGVzCXN0YXJ0PSJeXHNcK1soW10iIGVuZD0iOiIgZW5kPSJeJCIgY29udGFpbnM9Y2hhbmdlbG9nQnVsbGV0LGNoYW5nZWxvZ0NvbG9uLGNoYW5nZUxvZ0Z1bmNzLGNoYW5nZWxvZ0Vycm9yIGtlZXBlbmQKKyAgc3luIG1hdGNoCWNoYW5nZUxvZ0Z1bmNzICBjb250YWluZWQgIiguXHstfSkiIGV4dGVuZAorICBzeW4gbWF0Y2gJY2hhbmdlTG9nRnVuY3MgIGNvbnRhaW5lZCAiXFsuXHstfV0iIGV4dGVuZAorICBzeW4gbWF0Y2gJY2hhbmdlbG9nQ29sb24JY29udGFpbmVkICI6IgorZW5kaWYKK3N5biBtYXRjaAljaGFuZ2Vsb2dCdWxsZXQJY29udGFpbmVkICJeXHNcK1srKl1ccyIgY29udGFpbnM9Y2hhbmdlbG9nRXJyb3IKK3N5biBtYXRjaAljaGFuZ2Vsb2dNYWlsCWNvbnRhaW5lZCAiPFtBLVphLXowLTlcLl86Ky1dXCtAW0EtWmEtejAtOVwuXy1dXCs+Igorc3luIGtleXdvcmQJY2hhbmdlbG9nTW9udGgJY29udGFpbmVkIGphbiBmZWIgbWFyIGFwciBtYXkganVuIGp1bCBhdWcgc2VwIG9jdCBub3YgZGVjCitzeW4ga2V5d29yZAljaGFuZ2Vsb2dEYXkJY29udGFpbmVkIG1vbiB0dWUgd2VkIHRodSBmcmkgc2F0IHN1bgorc3luIG1hdGNoCWNoYW5nZWxvZ051bWJlcgljb250YWluZWQgIlsuLV0qWzAtOV1cKyIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY2hhbmdlbG9nX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2NoYW5nZWxvZ19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBjaGFuZ2Vsb2dUZXh0CQlOb3JtYWwKKyAgSGlMaW5rIGNoYW5nZWxvZ0J1bGxldAlUeXBlCisgIEhpTGluayBjaGFuZ2Vsb2dDb2xvbgkJVHlwZQorICBIaUxpbmsgY2hhbmdlbG9nRmlsZXMJCUNvbW1lbnQKKyAgaWYgdmVyc2lvbiA+PSA2MDAKKyAgICBIaUxpbmsgY2hhbmdlbG9nRnVuY3MJQ29tbWVudAorICBlbmRpZgorICBIaUxpbmsgY2hhbmdlbG9nSGVhZGVyCVN0YXRlbWVudAorICBIaUxpbmsgY2hhbmdlbG9nTWFpbAkJU3BlY2lhbAorICBIaUxpbmsgY2hhbmdlbG9nTnVtYmVyCU51bWJlcgorICBIaUxpbmsgY2hhbmdlbG9nTW9udGgJCU51bWJlcgorICBIaUxpbmsgY2hhbmdlbG9nRGF5CQlOdW1iZXIKKyAgSGlMaW5rIGNoYW5nZWxvZ0Vycm9yCQlGb2xkZWQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiY2hhbmdlbG9nIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY2hhc2tlbGwudmltIGIvcnVudGltZS9zeW50YXgvY2hhc2tlbGwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNzY0ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jaGFza2VsbC52aW0KQEAgLTAsMCArMSwxOCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUhhc2tlbGwgc3VwcG9ydGluZyBjMmhzIGJpbmRpbmcgaG9va3MKKyIgTWFpbnRhaW5lcjoJQXJtaW4gU2FuZGVyIDxhcm1pbkBtaW5kd2Fsa2VyLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTm92ZW1iZXIgMQorIgorIiAyMDAxIE5vdmVtYmVyIDE6IENoYW5nZWQgY29tbWFuZHMgZm9yIHNvdXJjaW5nIGhhc2tlbGwudmltCisKKyIgRW5hYmxlIGJpbmRpbmcgaG9va3MKK2xldCBiOmhzX2Nocz0xCisKKyIgSW5jbHVkZSBzdGFuZGFyZCBIYXNrZWxsIGhpZ2hsaWdodGluZworaWYgdmVyc2lvbiA8IDYwMAorICBzb3VyY2UgPHNmaWxlPjpwOmgvaGFza2VsbC52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2hhc2tlbGwudmltCitlbmRpZgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY2hlZXRhaC52aW0gYi9ydW50aW1lL3N5bnRheC9jaGVldGFoLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWIxNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY2hlZXRhaC52aW0KQEAgLTAsMCArMSw2MCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUNoZWV0YWggdGVtcGxhdGUgZW5naW5lCisiIE1haW50YWluZXI6CU1heCBJc2NoZW5rbyA8bWZpQHVrci5uZXQ+CisiIExhc3QgQ2hhbmdlOiAyMDAzLTA1LTExCisiCisiIE1pc3NpbmcgZmVhdHVyZXM6CisiICBtYXRjaCBpbnZhbGlkIHN5bnRheCwgbGlrZSBiYWQgdmFyaWFibGUgcmVmLiBvciB1bm1hdGNoZWQgY2xvc2luZyB0YWcKKyIgIFBTUC1zdHlsZSB0YWdzOiA8JSAuLiAlPiAob2Jzb2xldGVkIGZlYXR1cmUpCisiICBkb2Mtc3RyaW5ncyBhbmQgaGVhZGVyIGNvbW1lbnRzIChyYXJlbHkgdXNlZCBmZWF0dXJlKQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorCXN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisJZmluaXNoCitlbmRpZgorCitzeW50YXggY2FzZSBtYXRjaAorCitzeW4ga2V5d29yZCBjaGVldGFoS2V5d29yZCBjb250YWluZWQgaWYgZWxzZSB1bmxlc3MgZWxpZiBmb3IgaW4gbm90CitzeW4ga2V5d29yZCBjaGVldGFoS2V5d29yZCBjb250YWluZWQgd2hpbGUgcmVwZWF0IGJyZWFrIGNvbnRpbnVlIHBhc3MgZW5kCitzeW4ga2V5d29yZCBjaGVldGFoS2V5d29yZCBjb250YWluZWQgc2V0IGRlbCBhdHRyIGRlZiBnbG9iYWwgaW5jbHVkZSByYXcgZWNobworc3luIGtleXdvcmQgY2hlZXRhaEtleXdvcmQgY29udGFpbmVkIGltcG9ydCBmcm9tIGV4dGVuZHMgaW1wbGVtZW50cworc3luIGtleXdvcmQgY2hlZXRhaEtleXdvcmQgY29udGFpbmVkIGFzc2VydCByYWlzZSB0cnkgY2F0Y2ggZmluYWxseQorc3luIGtleXdvcmQgY2hlZXRhaEtleXdvcmQgY29udGFpbmVkIGVycm9yQ2F0Y2hlciBicmVha3BvaW50IHNpbGVudCBjYWNoZSBmaWx0ZXIKK3N5biBtYXRjaCAgIGNoZWV0YWhLZXl3b3JkIGNvbnRhaW5lZCAiXDxjb21waWxlci1zZXR0aW5nc1w+IgorCisiIE1hdGNoZXMgY2FjaGVkIHBsYWNlaG9sZGVycworc3luIG1hdGNoICAgY2hlZXRhaFBsYWNlSG9sZGVyICIkXChcKlswLTkuXVwrW3dkaG1zXVw/XCpcfFwqXClcP1xoXHcqXChcLlxoXHcqXCkqIiBkaXNwbGF5CitzeW4gbWF0Y2ggICBjaGVldGFoUGxhY2VIb2xkZXIgIiRcKFwqWzAtOS5dXCtbd2RobXNdXD9cKlx8XCpcKVw/e1xoXHcqXChcLlxoXHcqXCkqfSIgZGlzcGxheQorc3luIG1hdGNoICAgY2hlZXRhaERpcmVjdGl2ZSAiXlxzKiNbXiNdLiokIiAgY29udGFpbnM9Y2hlZXRhaFBsYWNlSG9sZGVyLGNoZWV0YWhLZXl3b3JkLGNoZWV0YWhDb21tZW50IGRpc3BsYXkKKworc3luIG1hdGNoICAgY2hlZXRhaENvbnRpbnVhdGlvbiAiXFwkIgorc3luIG1hdGNoICAgY2hlZXRhaENvbW1lbnQgIiMjLiokIiBkaXNwbGF5CitzeW4gcmVnaW9uICBjaGVldGFoTXVsdGlMaW5lQ29tbWVudCBzdGFydD0iI1wqIiBlbmQ9IlwqIyIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY2hlZXRhaF9zeW5faW5pdHMiKQorCWlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9jaGVldGFoX3N5bl9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWVuZGlmCisKKwlIaUxpbmsgY2hlZXRhaFBsYWNlSG9sZGVyIElkZW50aWZpZXIKKwlIaUxpbmsgY2hlZXRhaERpcmVjdGl2ZSBQcmVDb25kaXQKKwlIaUxpbmsgY2hlZXRhaEtleXdvcmQgRGVmaW5lCisJSGlMaW5rIGNoZWV0YWhDb250aW51YXRpb24gU3BlY2lhbAorCUhpTGluayBjaGVldGFoQ29tbWVudCBDb21tZW50CisJSGlMaW5rIGNoZWV0YWhNdWx0aUxpbmVDb21tZW50IENvbW1lbnQKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjaGVldGFoIgorCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jaGlsbC52aW0gYi9ydW50aW1lL3N5bnRheC9jaGlsbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwMGNkOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2NoaWxsLnZpbQpAQCAtMCwwICsxLDE5MSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUNISUxMCisiIE1haW50YWluZXI6CVlvdW5nU2FuZyBZb29uIDxpbWFnZUBsZ2ljLmNvLmtyPgorIiBMYXN0IGNoYW5nZToJMjAwNCBKYW4gMjEKKyIKKworIiBmaXJzdCBjcmVhdGVkIGJ5IGltYWdlQGxnaWMuY28ua3IgJiBtb2RpZmllZCBieSBwYXJpc0BsZ2ljLmNvLmtyCisKKyIgQ0hJTEwgKENDSVRUIEhpZ2ggTGV2ZWwgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UpIGlzIHVzZWQgZm9yCisiIGRldmVsb3Bpbmcgc29mdHdhcmUgb2YgQVRNIHN3aXRjaCBhdCBMR0lDIChMRyBJbmZvcm1hdGlvbgorIiAmIENvbW11bmljYXRpb25zIExUZC4pCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEEgYnVuY2ggb2YgdXNlZnVsIENISUxMIGtleXdvcmRzCitzeW4ga2V5d29yZAljaGlsbFN0YXRlbWVudAlnb3RvIEdPVE8gcmV0dXJuIFJFVFVSTiByZXR1cm5zIFJFVFVSTlMKK3N5biBrZXl3b3JkCWNoaWxsTGFiZWwJCUNBU0UgY2FzZSBFU0FDIGVzYWMKK3N5biBrZXl3b3JkCWNoaWxsQ29uZGl0aW9uYWwJaWYgSUYgZWxzZSBFTFNFIGVsc2lmIEVMU0lGIHN3aXRjaCBTV0lUQ0ggVEhFTiB0aGVuIEZJIGZpCitzeW4ga2V5d29yZAljaGlsbExvZ2ljYWwJTk9UIG5vdAorc3luIGtleXdvcmQJY2hpbGxSZXBlYXQJd2hpbGUgV0hJTEUgZm9yIEZPUiBkbyBETyBvZCBPRCBUTyB0bworc3luIGtleXdvcmQJY2hpbGxQcm9jZXNzCVNUQVJUIHN0YXJ0IFNUQUNLU0laRSBzdGFja3NpemUgUFJJT1JJVFkgcHJpb3JpdHkgVEhJUyB0aGlzIFNUT1Agc3RvcAorc3luIGtleXdvcmQJY2hpbGxCbG9jawkJUFJPQyBwcm9jIFBST0NFU1MgcHJvY2Vzcworc3luIGtleXdvcmQJY2hpbGxTaWduYWwJUkVDRUlWRSByZWNlaXZlIFNFTkQgc2VuZCBOT05QRVJTSVNURU5UIG5vbnBlcnNpc3RlbnQgUEVSU0lTVEVOVCBwZXJpc3RlbnQgU0VUIHNldCBFVkVSIGV2ZXIKKworc3luIGtleXdvcmQJY2hpbGxUb2RvCQljb250YWluZWQgVE9ETyBGSVhNRSBYWFgKKworIiBTdHJpbmcgYW5kIENoYXJhY3RlciBjb25zdGFudHMKKyIgSGlnaGxpZ2h0IHNwZWNpYWwgY2hhcmFjdGVycyAodGhvc2Ugd2hpY2ggaGF2ZSBhIGJhY2tzbGFzaCkgZGlmZmVyZW50bHkKK3N5biBtYXRjaAljaGlsbFNwZWNpYWwJY29udGFpbmVkICJcXHhceFwrXHxcXFxvXHsxLDNcfVx8XFwuXHxcXCQiCitzeW4gcmVnaW9uCWNoaWxsU3RyaW5nCXN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9Y2hpbGxTcGVjaWFsCitzeW4gbWF0Y2gJY2hpbGxDaGFyYWN0ZXIJIidbXlxcXSciCitzeW4gbWF0Y2gJY2hpbGxTcGVjaWFsQ2hhcmFjdGVyICInXFwuJyIKK3N5biBtYXRjaAljaGlsbFNwZWNpYWxDaGFyYWN0ZXIgIidcXFxvXHsxLDNcfSciCisKKyJ3aGVuIHdhbnRlZCwgaGlnaGxpZ2h0IHRyYWlsaW5nIHdoaXRlIHNwYWNlCitpZiBleGlzdHMoImNoaWxsX3NwYWNlX2Vycm9ycyIpCisgIHN5biBtYXRjaAljaGlsbFNwYWNlRXJyb3IJIlxzKiQiCisgIHN5biBtYXRjaAljaGlsbFNwYWNlRXJyb3IJIiBcK1x0Im1lPWUtMQorZW5kaWYKKworImNhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMKK3N5biBjbHVzdGVyCWNoaWxsUGFyZW5Hcm91cAljb250YWlucz1jaGlsbFBhcmVuRXJyb3IsY2hpbGxJbmNsdWRlZCxjaGlsbFNwZWNpYWwsY2hpbGxUb2RvLGNoaWxsVXNlckNvbnQsY2hpbGxVc2VyTGFiZWwsY2hpbGxCaXRGaWVsZAorc3luIHJlZ2lvbgljaGlsbFBhcmVuCQl0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsQGNoaWxsUGFyZW5Hcm91cAorc3luIG1hdGNoCWNoaWxsUGFyZW5FcnJvcgkiKSIKK3N5biBtYXRjaAljaGlsbEluUGFyZW4JY29udGFpbmVkICJbe31dIgorCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90IGFuZCB3aXRoICJmIi4KK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoCWNoaWxsTnVtYmVyCQkiXDxcZFwrXCh1XD1sXD1cfGx1XHxmXClcPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoCWNoaWxsRmxvYXQJCSJcPFxkXCtcLlxkKlwoZVstK11cPVxkXCtcKVw9W2ZsXVw9XD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoCWNoaWxsRmxvYXQJCSJcLlxkXCtcKGVbLStdXD1cZFwrXClcPVtmbF1cPVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aG91dCBkb3QsIHdpdGggZXhwb25lbnQKK3N5biBtYXRjaAljaGlsbEZsb2F0CQkiXDxcZFwrZVstK11cPVxkXCtbZmxdXD1cPiIKKyJoZXggbnVtYmVyCitzeW4gbWF0Y2gJY2hpbGxOdW1iZXIJCSJcPDB4XHhcK1wodVw9bFw9XHxsdVwpXD4iCisic3luIG1hdGNoIGNoaWxsSWRlbnRpZmllcgkiXDxbYS16X11bYS16MC05X10qXD4iCitzeW4gY2FzZSBtYXRjaAorIiBmbGFnIGFuIG9jdGFsIG51bWJlciB3aXRoIHdyb25nIGRpZ2l0cworc3luIG1hdGNoCWNoaWxsT2N0YWxFcnJvcgkiXDwwXG8qWzg5XSIKKworaWYgZXhpc3RzKCJjaGlsbF9jb21tZW50X3N0cmluZ3MiKQorICAiIEEgY29tbWVudCBjYW4gY29udGFpbiBjaGlsbFN0cmluZywgY2hpbGxDaGFyYWN0ZXIgYW5kIGNoaWxsTnVtYmVyLgorICAiIEJ1dCBhICIqLyIgaW5zaWRlIGEgY2hpbGxTdHJpbmcgaW4gYSBjaGlsbENvbW1lbnQgRE9FUyBlbmQgdGhlIGNvbW1lbnQhICBTbyB3ZQorICAiIG5lZWQgdG8gdXNlIGEgc3BlY2lhbCB0eXBlIG9mIGNoaWxsU3RyaW5nOiBjaGlsbENvbW1lbnRTdHJpbmcsIHdoaWNoIGFsc28gZW5kcyBvbgorICAiICIqLyIsIGFuZCBzZWVzIGEgIioiIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBhcyBjb21tZW50IGFnYWluLgorICAiIFVuZm9ydHVuYXRlbHkgdGhpcyBkb2Vzbid0IHZlcnkgd2VsbCB3b3JrIGZvciAvLyB0eXBlIG9mIGNvbW1lbnRzIDotKAorICBzeW50YXggbWF0Y2gJY2hpbGxDb21tZW50U2tpcAljb250YWluZWQgIl5ccypcKlwoJFx8XHNcK1wpIgorICBzeW50YXggcmVnaW9uIGNoaWxsQ29tbWVudFN0cmluZwljb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBlbmQ9K1wqLyttZT1zLTEgY29udGFpbnM9Y2hpbGxTcGVjaWFsLGNoaWxsQ29tbWVudFNraXAKKyAgc3ludGF4IHJlZ2lvbiBjaGlsbENvbW1lbnQyU3RyaW5nCWNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGVuZD0iJCIgY29udGFpbnM9Y2hpbGxTcGVjaWFsCisgIHN5bnRheCByZWdpb24gY2hpbGxDb21tZW50CXN0YXJ0PSIvXCoiIGVuZD0iXCovIiBjb250YWlucz1jaGlsbFRvZG8sY2hpbGxDb21tZW50U3RyaW5nLGNoaWxsQ2hhcmFjdGVyLGNoaWxsTnVtYmVyLGNoaWxsRmxvYXQsY2hpbGxTcGFjZUVycm9yCisgIHN5bnRheCBtYXRjaCAgY2hpbGxDb21tZW50CSIvLy4qIiBjb250YWlucz1jaGlsbFRvZG8sY2hpbGxDb21tZW50MlN0cmluZyxjaGlsbENoYXJhY3RlcixjaGlsbE51bWJlcixjaGlsbFNwYWNlRXJyb3IKK2Vsc2UKKyAgc3luIHJlZ2lvbgljaGlsbENvbW1lbnQJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPWNoaWxsVG9kbyxjaGlsbFNwYWNlRXJyb3IKKyAgc3luIG1hdGNoCWNoaWxsQ29tbWVudAkiLy8uKiIgY29udGFpbnM9Y2hpbGxUb2RvLGNoaWxsU3BhY2VFcnJvcgorZW5kaWYKK3N5bnRheCBtYXRjaAljaGlsbENvbW1lbnRFcnJvcgkiXCovIgorCitzeW4ga2V5d29yZAljaGlsbE9wZXJhdG9yCVNJWkUgc2l6ZQorc3luIGtleXdvcmQJY2hpbGxUeXBlCQlkY2wgRENMIGludCBJTlQgY2hhciBDSEFSIGJvb2wgQk9PTCBSRUYgcmVmIExPQyBsb2MgSU5TVEFOQ0UgaW5zdGFuY2UKK3N5biBrZXl3b3JkCWNoaWxsU3RydWN0dXJlCXN0cnVjdCBTVFJVQ1QgZW51bSBFTlVNIG5ld21vZGUgTkVXTU9ERSBzeW5tb2RlIFNZTk1PREUKKyJzeW4ga2V5d29yZAljaGlsbFN0b3JhZ2VDbGFzcworc3luIGtleXdvcmQJY2hpbGxCbG9jawkJUFJPQyBwcm9jIEVORCBlbmQKK3N5biBrZXl3b3JkCWNoaWxsU2NvcGUJCUdSQU5UIGdyYW50IFNFSVpFIHNlaXplCitzeW4ga2V5d29yZAljaGlsbEVETUwJCXNlbGVjdCBTRUxFQ1QgZGVsZXRlIERFTEVURSB1cGRhdGUgVVBEQVRFIGluIElOIHNlcSBTRVEgV0hFUkUgd2hlcmUgSU5TRVJUIGluc2VydCBpbmNsdWRlIElOQ0xVREUgZXhjbHVkZSBFWENMVURFCitzeW4ga2V5d29yZAljaGlsbEJvb2xDb25zdAl0cnVlIFRSVUUgZmFsc2UgRkFMU0UKKworc3luIHJlZ2lvbgljaGlsbFByZUNvbmRpdAlzdGFydD0iXlxzKiNccypcKGlmXD5cfGlmZGVmXD5cfGlmbmRlZlw+XHxlbGlmXD5cfGVsc2VcPlx8ZW5kaWZcPlwpIiBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9Y2hpbGxDb21tZW50LGNoaWxsU3RyaW5nLGNoaWxsQ2hhcmFjdGVyLGNoaWxsTnVtYmVyLGNoaWxsQ29tbWVudEVycm9yLGNoaWxsU3BhY2VFcnJvcgorc3luIHJlZ2lvbgljaGlsbEluY2x1ZGVkCWNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCitzeW4gbWF0Y2gJY2hpbGxJbmNsdWRlZAljb250YWluZWQgIjxbXj5dKj4iCitzeW4gbWF0Y2gJY2hpbGxJbmNsdWRlCSJeXHMqI1xzKmluY2x1ZGVcPlxzKlsiPF0iIGNvbnRhaW5zPWNoaWxsSW5jbHVkZWQKKyJzeW4gbWF0Y2ggY2hpbGxMaW5lU2tpcAkiXFwkIgorc3luIGNsdXN0ZXIJY2hpbGxQcmVQcm9jR3JvdXAJY29udGFpbnM9Y2hpbGxQcmVDb25kaXQsY2hpbGxJbmNsdWRlZCxjaGlsbEluY2x1ZGUsY2hpbGxEZWZpbmUsY2hpbGxJblBhcmVuLGNoaWxsVXNlckxhYmVsCitzeW4gcmVnaW9uCWNoaWxsRGVmaW5lCQlzdGFydD0iXlxzKiNccypcKGRlZmluZVw+XHx1bmRlZlw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1BTExCVVQsQGNoaWxsUHJlUHJvY0dyb3VwCitzeW4gcmVnaW9uCWNoaWxsUHJlUHJvYwlzdGFydD0iXlxzKiNccypcKHByYWdtYVw+XHxsaW5lXD5cfHdhcm5pbmdcPlx8d2Fyblw+XHxlcnJvclw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1BTExCVVQsQGNoaWxsUHJlUHJvY0dyb3VwCisKKyIgSGlnaGxpZ2h0IFVzZXIgTGFiZWxzCitzeW4gY2x1c3RlcgljaGlsbE11bHRpR3JvdXAJY29udGFpbnM9Y2hpbGxJbmNsdWRlZCxjaGlsbFNwZWNpYWwsY2hpbGxUb2RvLGNoaWxsVXNlckNvbnQsY2hpbGxVc2VyTGFiZWwsY2hpbGxCaXRGaWVsZAorc3luIHJlZ2lvbgljaGlsbE11bHRpCQl0cmFuc3BhcmVudCBzdGFydD0nPycgZW5kPSc6JyBjb250YWlucz1BTExCVVQsQGNoaWxsTXVsdGlHcm91cAorIiBBdm9pZCBtYXRjaGluZyBmb286OmJhcigpIGluIEMrKyBieSByZXF1aXJpbmcgdGhhdCB0aGUgbmV4dCBjaGFyIGlzIG5vdCAnOicKK3N5biBtYXRjaAljaGlsbFVzZXJDb250CSJeXHMqXElcaSpccyo6JCIgY29udGFpbnM9Y2hpbGxVc2VyTGFiZWwKK3N5biBtYXRjaAljaGlsbFVzZXJDb250CSI7XHMqXElcaSpccyo6JCIgY29udGFpbnM9Y2hpbGxVc2VyTGFiZWwKK3N5biBtYXRjaAljaGlsbFVzZXJDb250CSJeXHMqXElcaSpccyo6W146XSJtZT1lLTEgY29udGFpbnM9Y2hpbGxVc2VyTGFiZWwKK3N5biBtYXRjaAljaGlsbFVzZXJDb250CSI7XHMqXElcaSpccyo6W146XSJtZT1lLTEgY29udGFpbnM9Y2hpbGxVc2VyTGFiZWwKKworc3luIG1hdGNoCWNoaWxsVXNlckxhYmVsCSJcSVxpKiIgY29udGFpbmVkCisKKyIgQXZvaWQgcmVjb2duaXppbmcgbW9zdCBiaXRmaWVsZHMgYXMgbGFiZWxzCitzeW4gbWF0Y2gJY2hpbGxCaXRGaWVsZAkiXlxzKlxJXGkqXHMqOlxzKlsxLTldIm1lPWUtMQorc3luIG1hdGNoCWNoaWxsQml0RmllbGQJIjtccypcSVxpKlxzKjpccypbMS05XSJtZT1lLTEKKworc3luIG1hdGNoCWNoaWxsQnJhY2tldAljb250YWluZWQgIls8Pl0iCitpZiAhZXhpc3RzKCJjaGlsbF9taW5saW5lcyIpCisgIGxldCBjaGlsbF9taW5saW5lcyA9IDE1CitlbmRpZgorZXhlYyAic3luIHN5bmMgY2NvbW1lbnQgY2hpbGxDb21tZW50IG1pbmxpbmVzPSIgLiBjaGlsbF9taW5saW5lcworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jaF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jaF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBjaGlsbExhYmVsCUxhYmVsCisgIEhpTGluayBjaGlsbFVzZXJMYWJlbAlMYWJlbAorICBIaUxpbmsgY2hpbGxDb25kaXRpb25hbAlDb25kaXRpb25hbAorICAiIGhpIGNoaWxsQ29uZGl0aW9uYWwJdGVybT1ib2xkIGN0ZXJtZmc9cmVkIGd1aWZnPXJlZCBndWk9Ym9sZAorCisgIEhpTGluayBjaGlsbFJlcGVhdAlSZXBlYXQKKyAgSGlMaW5rIGNoaWxsUHJvY2VzcwlSZXBlYXQKKyAgSGlMaW5rIGNoaWxsU2lnbmFsCVJlcGVhdAorICBIaUxpbmsgY2hpbGxDaGFyYWN0ZXIJQ2hhcmFjdGVyCisgIEhpTGluayBjaGlsbFNwZWNpYWxDaGFyYWN0ZXIgY2hpbGxTcGVjaWFsCisgIEhpTGluayBjaGlsbE51bWJlcglOdW1iZXIKKyAgSGlMaW5rIGNoaWxsRmxvYXQJRmxvYXQKKyAgSGlMaW5rIGNoaWxsT2N0YWxFcnJvcgljaGlsbEVycm9yCisgIEhpTGluayBjaGlsbFBhcmVuRXJyb3IJY2hpbGxFcnJvcgorICBIaUxpbmsgY2hpbGxJblBhcmVuCWNoaWxsRXJyb3IKKyAgSGlMaW5rIGNoaWxsQ29tbWVudEVycm9yCWNoaWxsRXJyb3IKKyAgSGlMaW5rIGNoaWxsU3BhY2VFcnJvcgljaGlsbEVycm9yCisgIEhpTGluayBjaGlsbE9wZXJhdG9yCU9wZXJhdG9yCisgIEhpTGluayBjaGlsbFN0cnVjdHVyZQlTdHJ1Y3R1cmUKKyAgSGlMaW5rIGNoaWxsQmxvY2sJT3BlcmF0b3IKKyAgSGlMaW5rIGNoaWxsU2NvcGUJT3BlcmF0b3IKKyAgImhpIGNoaWxsRURNTCAgICAgdGVybT11bmRlcmxpbmUgY3Rlcm1mZz1EYXJrUmVkIGd1aWZnPVJlZAorICBIaUxpbmsgY2hpbGxFRE1MCVByZVByb2MKKyAgImhpIGNoaWxsQm9vbENvbnN0CXRlcm09Ym9sZCBjdGVybWZnPWJyb3duIGd1aWZnPWJyb3duCisgIEhpTGluayBjaGlsbEJvb2xDb25zdAlDb25zdGFudAorICAiaGkgY2hpbGxMb2dpY2FsCXRlcm09Ym9sZCBjdGVybWZnPWJyb3duIGd1aWZnPWJyb3duCisgIEhpTGluayBjaGlsbExvZ2ljYWwJQ29uc3RhbnQKKyAgSGlMaW5rIGNoaWxsU3RvcmFnZUNsYXNzCVN0b3JhZ2VDbGFzcworICBIaUxpbmsgY2hpbGxJbmNsdWRlCUluY2x1ZGUKKyAgSGlMaW5rIGNoaWxsUHJlUHJvYwlQcmVQcm9jCisgIEhpTGluayBjaGlsbERlZmluZQlNYWNybworICBIaUxpbmsgY2hpbGxJbmNsdWRlZAljaGlsbFN0cmluZworICBIaUxpbmsgY2hpbGxFcnJvcglFcnJvcgorICBIaUxpbmsgY2hpbGxTdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluayBjaGlsbFByZUNvbmRpdAlQcmVDb25kaXQKKyAgSGlMaW5rIGNoaWxsVHlwZQlUeXBlCisgIEhpTGluayBjaGlsbENvbW1lbnRFcnJvcgljaGlsbEVycm9yCisgIEhpTGluayBjaGlsbENvbW1lbnRTdHJpbmcgY2hpbGxTdHJpbmcKKyAgSGlMaW5rIGNoaWxsQ29tbWVudDJTdHJpbmcgY2hpbGxTdHJpbmcKKyAgSGlMaW5rIGNoaWxsQ29tbWVudFNraXAJY2hpbGxDb21tZW50CisgIEhpTGluayBjaGlsbFN0cmluZwlTdHJpbmcKKyAgSGlMaW5rIGNoaWxsQ29tbWVudAlDb21tZW50CisgICIgaGkgY2hpbGxDb21tZW50CXRlcm09Tm9uZSBjdGVybWZnPWxpZ2h0Ymx1ZSBndWlmZz1saWdodGJsdWUKKyAgSGlMaW5rIGNoaWxsU3BlY2lhbAlTcGVjaWFsQ2hhcgorICBIaUxpbmsgY2hpbGxUb2RvCVRvZG8KKyAgSGlMaW5rIGNoaWxsQmxvY2sJU3RhdGVtZW50CisgICJIaUxpbmsgY2hpbGxJZGVudGlmaWVyCUlkZW50aWZpZXIKKyAgSGlMaW5rIGNoaWxsQnJhY2tldAlEZWxpbWl0ZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiY2hpbGwiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jbC52aW0gYi9ydW50aW1lL3N5bnRheC9jbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M2ZjQxYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2NsLnZpbQpAQCAtMCwwICsxLDEwNSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CWNsICgiQ2xldmVyIExhbmd1YWdlIiBieSBNdWx0aWJhc2UsIGh0dHA6Ly93d3cubWJhc2UuY29tLmF1KQorIiBGaWxlbmFtZSBleHRlbnNpb25zOiAqLmVudCwgKi5lbmkKKyIgTWFpbnRhaW5lcjoJUGhpbGlwIFVyZW4gPHBoaWx1QHN5c3RlbTc3LmNvbT4KKyIgTGFzdCB1cGRhdGU6CVdlZCBNYXkgIDIgMTA6MzA6MzAgRVNUIDIwMDEKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworaWYgdmVyc2lvbiA+PSA2MDAKKwlzZXRsb2NhbCBpc2tleXdvcmQ9QCw0OC01NyxfLC0sCitlbHNlCisJc2V0IGlza2V5d29yZD1ALDQ4LTU3LF8sLSwKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCitzeW4gc3luYyBsaW5lcz0zMDAKKworIklmL2Vsc2UvZWxzaWYvZW5kaWYgYW5kIHdoaWxlL3dlbmQgbWlzbWF0Y2ggZXJyb3JzCitzeW4gbWF0Y2ggICBjbGlmRXJyb3IJCSJcPHdlbmRcPiIKK3N5biBtYXRjaCAgIGNsaWZFcnJvcgkJIlw8ZWxzaWZcPiIKK3N5biBtYXRjaCAgIGNsaWZFcnJvcgkJIlw8ZWxzZVw+Igorc3luIG1hdGNoICAgY2xpZkVycm9yCQkiXDxlbmRpZlw+IgorCisiIElmIGFuZCB3aGlsZSByZWdpb25zCitzeW4gcmVnaW9uIGNsTG9vcAl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWNsV2hpbGUgc3RhcnQ9Ilw8d2hpbGVcPiIgbWF0Y2hncm91cD1jbFdoaWxlIGVuZD0iXDx3ZW5kXD4iIGNvbnRhaW5zPUFMTEJVVCxjbEJyZWFrLGNsUHJvY2VkdXJlCitzeW4gcmVnaW9uIGNsSWYJCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9Y2xDb25kaXRpb25hbCBzdGFydD0iXDxpZlw+IiBtYXRjaGdyb3VwPWNsQ29uZGl0aW9uYWwgZW5kPSJcPGVuZGlmXD4iICAgY29udGFpbnM9QUxMQlVULGNsQnJlYWssY2xQcm9jZWR1cmUKKworIiBNYWtlIHRob3NlIFRPRE8gbm90ZXMgYW5kIGRlYnVnZ2luZyBzdGFuZCBvdXQhCitzeW4ga2V5d29yZAljbFRvZG8JCQljb250YWluZWQJVE9ETyBCVUcgREVCVUcgRklYCitzeW4ga2V5d29yZCBjbERlYnVnCQkJY29udGFpbmVkCWRlYnVnCisKK3N5biBtYXRjaAljbENvbW1lbnQJCSIjLiokIgkJY29udGFpbnM9Y2xUb2RvLGNsTmVlZHNXb3JrCitzeW4gcmVnaW9uCWNsUHJvY2VkdXJlCQlvbmVsaW5lCQlzdGFydD0iXlxzKlt7fV0iIGVuZD0iJCIKK3N5biBtYXRjaAljbEluY2x1ZGUJCQkJCSJeXHMqaW5jbHVkZVxzLioiCisKKyIgV2UgZG9uJ3QgcHV0ICJkZWJ1ZyIgaW4gdGhlIGNsU2V0T3B0aW9uczsKKyIgd2UgY29udGFpbiBpdCBpbiBjbFNldCBzbyB3ZSBjYW4gbWFrZSBpdCBzdGFuZCBvdXQuCitzeW4ga2V5d29yZCBjbFNldE9wdGlvbnMJdHJhbnNwYXJlbnQgYWF1dG8gYWJvcnQgYWxpZ24gY29udmVydCBFIGZpbGwgZm51bSBnb2JhY2sgaGFuZ3VwIGp1c3RpZnkgbnVsbF9leGl0IG91dHB1dCByYXV0byByYXdwcmludCByYXdkaXNwbGF5IHJlcGVhdCBza2lwIHRhYiB0cmltCitzeW4gbWF0Y2gJY2xTZXQJCQkiXlxzKnNldFxzLioiIGNvbnRhaW5zPWNsU2V0T3B0aW9ucyxjbERlYnVnCisKK3N5biBtYXRjaCBjbFByZVByb2MJCQkiXlxzKiNQLioiCisKK3N5biBrZXl3b3JkIGNsQ29uZGl0aW9uYWwJZWxzZSBlbHNpZgorc3luIGtleXdvcmQgY2xXaGlsZQkJCWNvbnRpbnVlIGVuZGxvb3AKKyIgJ2JyZWFrJyBuZWVkcyB0byBiZSBhIHJlZ2lvbiBzbyB3ZSBjYW4gc3luYyBvbiBpdCBhYm92ZS4KK3N5biByZWdpb24gY2xCcmVhawkJCW9uZWxpbmUgc3RhcnQ9Il5ccypicmVhayIgZW5kPSIkIgorCitzeW4gbWF0Y2ggY2xPcGVyYXRvcgkJIlshO3wpKDouPjwrKj0tXSIKKworc3luIG1hdGNoIGNsTnVtYmVyCQkJIlw8XGRcK1wodVw9bFw9XHxsdVx8ZlwpXD4iCisKK3N5biByZWdpb24gY2xTdHJpbmcJbWF0Y2hncm91cD1jbFF1b3RlCXN0YXJ0PSsiKyBlbmQ9KyIrCXNraXA9K1xcIisKK3N5biByZWdpb24gY2xTdHJpbmcgbWF0Y2hncm91cD1jbFF1b3RlCXN0YXJ0PSsnKyBlbmQ9KycrCXNraXA9K1xcJysKKworc3luIGtleXdvcmQgY2xSZXNlcnZlZAkJRVJST1IgRVhJVCBJTlRFUlJVUFQgTE9DS0VEIExSRVBMWSBNT0RFIE1DT0wgTUxJTkUgTVJFUExZIE5VTEwgUkVQTFkgVjEgVjIgVjMgVjQgVjUgVjYgVjcgVjggVjkgWkVSTyBCWVBBU1MgR09JTkdfQkFDSyBBQVVUTyBBQk9SVCBBQk9SVCBBTElHTiBCSUdFIENPTlZFUlQgRk5VTSBHT0JBQ0sgSEFOR1VQIEpVU1RJRlkgTkVYSVQgT1VUUFVUIFJBVVRPIFJBV0RJU1BMQVkgUkFXUFJJTlQgUkVQRUFUIFNLSVAgVEFCIFRSSU0gTENPVU5UIFBDT1VOVCBQTElORVMgU0xJTkVTIFNDT0xTIE1BVENIIExNQVRDSAorCitzeW4ga2V5d29yZCBjbEZ1bmN0aW9uCQlhc2MgYXNpemUgY2hyIG5hbWUgcmFuZG9tIHNsZW4gc3JhbmRvbSBkYXkgZ2V0YXJnIGdldGNnaSBnZXRlbnYgbGNhc2Ugc2NhdCBzY29udiBzZGVsIHNrZXkgc211bHQgc3JlcCBzdWJzdHIgc3dvcmQgdHJpbSB1Y2FzZSBtYXRjaAorCitzeW4ga2V5d29yZCBjbFN0YXRlbWVudAkJY2xlYXIgY2xlYXJfZW9sIGNsZWFyX2VvcyBjbG9zZSBjb3B5IGNyZWF0ZSB1bmlxdWUgd2l0aCB3aGVyZSBlbXB0eSBkZWZpbmUgZGVmaW5lIGxkZWZpbmUgZGVsYXlfZm9ybSBkZWxldGUgZXNjYXBlIGV4aXRfYmxvY2sgZXhpdF9kbyBleGl0X3Byb2Nlc3MgZmllbGQgZm9yayBmb3JtYXQgZ2V0IGdldGZpbGUgZ2V0bmV4dCBnZXRwcmV2IGdvdG8gaGVhZCBqb2luIG1haW50YWluIG1lc3NhZ2Ugbm9fam9pbiBvbl9lb3Agb25fa2V5IG9uX2V4aXQgb25fZGVsZXRlIG9wZW5pbiBvcGVub3V0IG9wZW5hcHAgcGF1c2UgcG9wZW5pbiBwb3Blbm91dCBwb3BlbmlvIHByaW50IHB1dCByYW5nZSByZWFkIHJlZGlzcGxheSByZWZyZXNoIHJlc3RhcnRfYmxvY2sgc2NyZWVuIHNlbGVjdCBzbGVlcCB0ZXh0IHVubG9jayB3cml0ZSBhbmQgbm90IG9yIGRvCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYJdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2NsX3N5bnRheF9pbml0cyIpCisJaWYJdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX2NsX3N5bnRheF9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWVuZGlmCisKKwlIaUxpbmsgY2xpZkVycm9yCQkJRXJyb3IKKwlIaUxpbmsgY2xXaGlsZQkJCQlSZXBlYXQKKwlIaUxpbmsgY2xDb25kaXRpb25hbAkJQ29uZGl0aW9uYWwKKwlIaUxpbmsgY2xEZWJ1ZwkJCQlEZWJ1ZworCUhpTGluayBjbE5lZWRzV29yawkJCVRvZG8KKwlIaUxpbmsgY2xUb2RvCQkJCVRvZG8KKwlIaUxpbmsgY2xDb21tZW50CQkJQ29tbWVudAorCUhpTGluayBjbFByb2NlZHVyZQkJCVByb2NlZHVyZQorCUhpTGluayBjbEJyZWFrCQkJCVByb2NlZHVyZQorCUhpTGluayBjbEluY2x1ZGUJCQlJbmNsdWRlCisJSGlMaW5rIGNsU2V0T3B0aW9uCQkJU3RhdGVtZW50CisJSGlMaW5rIGNsU2V0CQkJCUlkZW50aWZpZXIKKwlIaUxpbmsgY2xQcmVQcm9jCQkJUHJlUHJvYworCUhpTGluayBjbE9wZXJhdG9yCQkJT3BlcmF0b3IKKwlIaUxpbmsgY2xOdW1iZXIJCQkJTnVtYmVyCisJSGlMaW5rIGNsU3RyaW5nCQkJCVN0cmluZworCUhpTGluayBjbFF1b3RlCQkJCURlbGltaXRlcgorCUhpTGluayBjbFJlc2VydmVkCQkJSWRlbnRpZmllcgorCUhpTGluayBjbEZ1bmN0aW9uCQkJRnVuY3Rpb24KKwlIaUxpbmsgY2xTdGF0ZW1lbnQJCQlTdGF0ZW1lbnQKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjbCIKKworIiB2aW06IHRzPTQgc3c9NApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY2xlYW4udmltIGIvcnVudGltZS9zeW50YXgvY2xlYW4udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2VjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jbGVhbi52aW0KQEAgLTAsMCArMSw5NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CQlDbGVhbgorIiBBdXRob3I6CQlQaWV0ZXIgdmFuIEVuZ2VsZW4gPHBpZXRlcmVAc2NpLmt1bi5ubD4KKyIgQ28tQXV0aG9yOglBcnRodXIgdmFuIExlZXV3ZW4gPGFydGh1cnZsQHNjaS5rdW4ubmw+CisiIExhc3QgQ2hhbmdlOglGcmkgU2VwIDI5IDExOjM1OjM0IENFU1QgMjAwMAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgU29tZSBDbGVhbi1rZXl3b3Jkcworc3luIGtleXdvcmQgY2xlYW5Db25kaXRpb25hbCBpZiBjYXNlCitzeW4ga2V5d29yZCBjbGVhbkxhYmVsIGxldCEgd2l0aCB3aGVyZSBpbiBvZgorc3luIGtleXdvcmQgY2xlYW5JbmNsdWRlIGZyb20gaW1wb3J0CitzeW4ga2V5d29yZCBjbGVhblNwZWNpYWwgU3RhcnQKK3N5biBrZXl3b3JkIGNsZWFuS2V5d29yZCBpbmZpeGwgaW5maXhyIGluZml4CitzeW4ga2V5d29yZCBjbGVhbkJhc2ljVHlwZSBJbnQgUmVhbCBDaGFyIEJvb2wgU3RyaW5nCitzeW4ga2V5d29yZCBjbGVhblNwZWNpYWxUeXBlIFdvcmxkIFByb2NJZCBWb2lkIEZpbGVzIEZpbGUKK3N5biBrZXl3b3JkIGNsZWFuTW9kdWxlU3lzdGVtIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiBkZWZpbml0aW9uIHN5c3RlbQorc3luIGtleXdvcmQgY2xlYW5UeXBlQ2xhc3MgY2xhc3MgaW5zdGFuY2UgZXhwb3J0CisKKyIgVG8gZG8gc29tZSBEZW5vdGF0aW9uIEhpZ2hsaWdodGluZworc3luIGtleXdvcmQgY2xlYW5Cb29sRGVub3QgVHJ1ZSBGYWxzZQorc3luIHJlZ2lvbiAgY2xlYW5TdHJpbmdEZW5vdCBzdGFydD0rIisgZW5kPSsiKworc3luIG1hdGNoIGNsZWFuQ2hhckRlbm90ICInLiciCitzeW4gbWF0Y2ggY2xlYW5DaGFyc0Rlbm90ICInW14nXFxdKlwoXFwuW14nXFxdXCkqJyIgY29udGFpbmVkCitzeW4gbWF0Y2ggY2xlYW5JbnRlZ2VyRGVub3QgIlsrLX5dXD1cPFwoXGRcK1x8MFswLTddXCtcfDB4WzAtOUEtRmEtZl1cK1wpXD4iCitzeW4gbWF0Y2ggY2xlYW5SZWFsRGVub3QgIlsrLX5dXD1cPFxkXCtcLlxkK1woRVsrLX5dXD1cZCtcKVw9IgorCisiIFRvIGhpZ2hsaWdodCB0aGUgdXNlIG9mIGxpc3RzLCB0dXBsZXMgYW5kIGFycmF5cworc3luIHJlZ2lvbiBjbGVhbkxpc3Qgc3RhcnQ9IlxbIiBlbmQ9IlxdIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gY2xlYW5SZWNvcmQgc3RhcnQ9InsiIGVuZD0ifSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIGNsZWFuQXJyYXkgc3RhcnQ9Ins6IiBlbmQ9Ijp9IiBjb250YWlucz1BTEwKK3N5biBtYXRjaCBjbGVhblR1cGxlICIoW149XSosW149XSopIiBjb250YWlucz1BTEwKKworIiBUbyBkbyBzb21lIENvbW1lbnQgSGlnaGxpZ2h0aW5nCitzeW4gcmVnaW9uIGNsZWFuQ29tbWVudCBzdGFydD0iL1wqIiAgZW5kPSJcKi8iIGNvbnRhaW5zPWNsZWFuQ29tbWVudAorc3luIG1hdGNoIGNsZWFuQ29tbWVudCAiLy8uKiIKKworIiBOb3cgZm9yIHNvbWUgdXNlZnVsIHR5cGVkZWZpbml0aW9ucmVjb2duaXRpb24KK3N5biBtYXRjaCBjbGVhbkZ1bmNUeXBlRGVmICJcKFthLXpBLVpdLipcfChcPVstfkAjJCVePyErKjw+XC98Jj06XVwrKVw9XClbIFx0XSpcKGluZml4W2xyXVw9XClcPVsgXHRdKlxkXD1bIFx0XSo6Oi4qLT4uKiIgY29udGFpbnM9Y2xlYW5TcGVjaWFsCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2NsZWFuX3N5bnRheF9pbml0IikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfY2xlYW5fc3ludGF4X2luaXQgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgICAiIENvbW1lbnRzCisgICBIaUxpbmsgY2xlYW5Db21tZW50ICAgICAgQ29tbWVudAorICAgIiBDb25zdGFudHMgYW5kIGRlbm90YXRpb25zCisgICBIaUxpbmsgY2xlYW5DaGFyc0Rlbm90ICAgU3RyaW5nCisgICBIaUxpbmsgY2xlYW5TdHJpbmdEZW5vdCAgU3RyaW5nCisgICBIaUxpbmsgY2xlYW5DaGFyRGVub3QgICAgQ2hhcmFjdGVyCisgICBIaUxpbmsgY2xlYW5JbnRlZ2VyRGVub3QgTnVtYmVyCisgICBIaUxpbmsgY2xlYW5Cb29sRGVub3QgICAgQm9vbGVhbgorICAgSGlMaW5rIGNsZWFuUmVhbERlbm90ICAgIEZsb2F0CisgICAiIElkZW50aWZpZXJzCisgICAiIFN0YXRlbWVudHMKKyAgIEhpTGluayBjbGVhblR5cGVDbGFzcyAgICBLZXl3b3JkCisgICBIaUxpbmsgY2xlYW5Db25kaXRpb25hbCAgQ29uZGl0aW9uYWwKKyAgIEhpTGluayBjbGVhbkxhYmVsCQlMYWJlbAorICAgSGlMaW5rIGNsZWFuS2V5d29yZCAgICAgIEtleXdvcmQKKyAgICIgR2VuZXJpYyBQcmVwcm9jZXNzaW5nCisgICBIaUxpbmsgY2xlYW5JbmNsdWRlICAgICAgSW5jbHVkZQorICAgSGlMaW5rIGNsZWFuTW9kdWxlU3lzdGVtIFByZVByb2MKKyAgICIgVHlwZQorICAgSGlMaW5rIGNsZWFuQmFzaWNUeXBlICAgIFR5cGUKKyAgIEhpTGluayBjbGVhblNwZWNpYWxUeXBlICBUeXBlCisgICBIaUxpbmsgY2xlYW5GdW5jVHlwZURlZiAgVHlwZWRlZgorICAgIiBTcGVjaWFsCisgICBIaUxpbmsgY2xlYW5TcGVjaWFsICAgICAgU3BlY2lhbAorICAgSGlMaW5rIGNsZWFuTGlzdAkJCVNwZWNpYWwKKyAgIEhpTGluayBjbGVhbkFycmF5CQlTcGVjaWFsCisgICBIaUxpbmsgY2xlYW5SZWNvcmQJCVNwZWNpYWwKKyAgIEhpTGluayBjbGVhblR1cGxlCQlTcGVjaWFsCisgICAiIEVycm9yCisgICAiIFRvZG8KKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiY2xlYW4iCisKKyIgdmltOiB0cz00CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jbGlwcGVyLnZpbSBiL3J1bnRpbWUvc3ludGF4L2NsaXBwZXIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OWIyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jbGlwcGVyLnZpbQpAQCAtMCwwICsxLDE0MyBAQAorIiBWaW0gc3ludGF4IGZpbGU6CisiIExhbmd1YWdlOglDbGlwcGVyIDUuMiAmIEZsYWdTaGlwCisiIE1haW50YWluZXI6CUMgUiBaYW1hbmEgPHphbWFuYUB6aXAubmV0PgorIiBTb21lIHRoaW5ncyBiYXNlZCBvbiBjLnZpbSBieSBCcmFtIE1vb2xlbmFhciBhbmQgcGFzY2FsLnZpbSBieSBNYXJpbyBFdXNlYmlvCisiIExhc3QgQ2hhbmdlOglTYXQgU2VwIDA5IDIwMDAKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEV4Y2VwdGlvbnMgZm9yIG15ICJWZXJ5IE93biIgKFRNKSB1c2VyIHZhcmlhYmxlcyBuYW1pbmcgc3R5bGUuCisiIElmIHlvdSBkb24ndCBsaWtlIHRoaXMsIGNvbW1lbnQgaXQKK3N5biBtYXRjaCAgY2xpcHBlclVzZXJWYXJpYWJsZQkiXDxbYSxiLGMsZCxsLG4sbyx1LHhdW0EtWl1bQS1aYS16MC05X10qXD4iCitzeW4gbWF0Y2ggIGNsaXBwZXJVc2VyVmFyaWFibGUJIlw8W2Etel1cPiIKKworIiBDbGlwcGVyIGlzIGNhc2UgaW5zZW5zaXRpdmUgKCBzZWUgImV4Y2VwdGlvbiIgYWJvdmUgKQorc3luIGNhc2UgaWdub3JlCisKKyIgQ2xpcHBlciBrZXl3b3JkcyAoIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIgKQorc3luIGtleXdvcmQgY2xpcHBlclN0YXRlbWVudAlBQ0NFUFQgQVBQRU5EIEJMQU5LIEZST00gQVZFUkFHRSBDQUxMIENBTkNFTAorc3luIGtleXdvcmQgY2xpcHBlclN0YXRlbWVudAlDTEVBUiBBTEwgR0VUUyBNRU1PUlkgVFlQRUFIRUFEIENMT1NFCitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CUNPTU1JVCBDT05USU5VRSBTSEFSRUQgTkVXIFBJQ1QKK3N5biBrZXl3b3JkIGNsaXBwZXJTdGF0ZW1lbnQJQ09QWSBGSUxFIFNUUlVDVFVSRSBTVFJVIEVYVEUgVE8gQ09VTlQKK3N5biBrZXl3b3JkIGNsaXBwZXJTdGF0ZW1lbnQJQ1JFQVRFIEZST00gTklMCitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CURFTEVURSBGSUxFIERJUiBESVNQTEFZIEVKRUNUIEVSQVNFIEZJTkQgR08KK3N5biBrZXl3b3JkIGNsaXBwZXJTdGF0ZW1lbnQJSU5ERVggSU5QVVQgVkFMSUQgV0hFTgorc3luIGtleXdvcmQgY2xpcHBlclN0YXRlbWVudAlKT0lOIEtFWUJPQVJEIExBQkVMIEZPUk0gTElTVCBMT0NBVEUgTUVOVSBUTworc3luIGtleXdvcmQgY2xpcHBlclN0YXRlbWVudAlOT1RFIFBBQ0sgUVVJVCBSRUFECitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CVJFQ0FMTCBSRUlOREVYIFJFTEVBU0UgUkVOQU1FIFJFUExBQ0UgUkVQT1JUCitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CVJFVFVSTiBGT1JNIFJFU1RPUkUKK3N5biBrZXl3b3JkIGNsaXBwZXJTdGF0ZW1lbnQJUlVOIFNBVkUgU0VFSyBTRUxFQ1QKK3N5biBrZXl3b3JkIGNsaXBwZXJTdGF0ZW1lbnQJU0tJUCBTT1JUIFNUT1JFIFNVTSBURVhUIFRPVEFMIFRZUEUgVU5MT0NLCitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CVVQREFURSBVU0UgV0FJVCBaQVAKK3N5biBrZXl3b3JkIGNsaXBwZXJTdGF0ZW1lbnQJQkVHSU4gU0VRVUVOQ0UKK3N5biBrZXl3b3JkIGNsaXBwZXJTdGF0ZW1lbnQJU0VUIEFMVEVSTkFURSBCRUxMIENFTlRVUlkgQ09MT1IgQ09ORklSTSBDT05TT0xFCitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CUNVUlNPUiBEQVRFIERFQ0lNQUxTIERFRkFVTFQgREVMRVRFRCBERUxJTUlURVJTCitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CURFVklDRSBFUE9DSCBFU0NBUEUgRVhBQ1QgRVhDTFVTSVZFIEZJTFRFUiBGSVhFRAorc3luIGtleXdvcmQgY2xpcHBlclN0YXRlbWVudAlGT1JNQVQgRlVOQ1RJT04gSU5URU5TSVRZIEtFWSBNQVJHSU4gTUVTU0FHRQorc3luIGtleXdvcmQgY2xpcHBlclN0YXRlbWVudAlPUkRFUiBQQVRIIFBSSU5URVIgUFJPQ0VEVVJFIFJFTEFUSU9OIFNDT1JFQk9BUkQKK3N5biBrZXl3b3JkIGNsaXBwZXJTdGF0ZW1lbnQJU09GVFNFRUsgVFlQRUFIRUFEIFVOSVFVRSBXUkFQCitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CUJPWCBDTEVBUiBHRVQgUFJPTVBUIFNBWSA/ID8/CitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CURFTEVURSBUQUcgR08gUlRMSU5LQ01EIFRNUCBEQkxPQ0tJTkZPCitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CURCRVZBTElORk8gREJGSUVMRElORk8gREJGSUxURVJJTkZPIERCRlVOQ1RBQkxFCitzeW4ga2V5d29yZCBjbGlwcGVyU3RhdGVtZW50CURCT1BFTklORk8gREJPUkRFUkNPTkRJTkZPIERCT1JERVJDUkVBVEVJTkYKK3N5biBrZXl3b3JkIGNsaXBwZXJTdGF0ZW1lbnQJREJPUkRFUklORk8gREJSRUxJTkZPIERCU0NPUEVJTkZPIERCU09SVElORk8KK3N5biBrZXl3b3JkIGNsaXBwZXJTdGF0ZW1lbnQJREJTT1JUSVRFTSBEQlRSQU5TSU5GTyBEQlRSQU5TSVRFTSBXT1JLQVJFQQorCisiIENvbmRpdGlvbmFscworc3luIGtleXdvcmQgY2xpcHBlckNvbmRpdGlvbmFsCUNBU0UgT1RIRVJXSVNFIEVORENBU0UKK3N5biBrZXl3b3JkIGNsaXBwZXJDb25kaXRpb25hbAlJRiBFTFNFIEVORElGIElJRiBJRkRFRiBJRk5ERUYKKworIiBMb29wcworc3luIGtleXdvcmQgY2xpcHBlclJlcGVhdAlETyBXSElMRSBFTkRETworc3luIGtleXdvcmQgY2xpcHBlclJlcGVhdAlGT1IgVE8gTkVYVCBTVEVQCisKKyIgVmlzaWJpbGl0eQorc3luIGtleXdvcmQgY2xpcHBlclN0b3JhZ2VDbGFzcwlBTk5PVU5DRSBTVEFUSUMKK3N5biBrZXl3b3JkIGNsaXBwZXJTdG9yYWdlQ2xhc3MgREVDTEFSRSBFWFRFUk5BTCBMT0NBTCBNRU1WQVIgUEFSQU1FVEVSUworc3luIGtleXdvcmQgY2xpcHBlclN0b3JhZ2VDbGFzcyBQUklWQVRFIFBST0NFRFVSRSBQVUJMSUMgUkVRVUVTVCBTVEFUSUMKK3N5biBrZXl3b3JkIGNsaXBwZXJTdG9yYWdlQ2xhc3MgRklFTEQgRlVOQ1RJT04KK3N5biBrZXl3b3JkIGNsaXBwZXJTdG9yYWdlQ2xhc3MgRVhJVCBQUk9DRURVUkUgSU5JVCBQUk9DRURVUkUKKworIiBPcGVyYXRvcnMKK3N5biBtYXRjaCAgIGNsaXBwZXJPcGVyYXRvcgkiJFx8JVx8Jlx8K1x8LVx8LT5cfCEiCitzeW4gbWF0Y2ggICBjbGlwcGVyT3BlcmF0b3IJIlwuQU5EXC5cfFwuTk9UXC5cfFwuT1JcLiIKK3N5biBtYXRjaCAgIGNsaXBwZXJPcGVyYXRvcgkiOj1cfDxcfDw9XHw8Plx8IT1cfCNcfD1cfD09XHw+XHw+PVx8QCIKK3N5biBtYXRjaCAgIGNsaXBwZXJPcGVyYXRvciAgICAgIioiCisKKyIgTnVtYmVycworc3luIG1hdGNoICAgY2xpcHBlck51bWJlcgkiXDxcZFwrXCh1XD1sXD1cfGx1XHxmXClcPiIKKworIiBJbmNsdWRlcworc3luIHJlZ2lvbiBjbGlwcGVySW5jbHVkZWQJY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisKK3N5biBtYXRjaCAgY2xpcHBlckluY2x1ZGVkCWNvbnRhaW5lZCAiPFtePl0qPiIKK3N5biBtYXRjaCAgY2xpcHBlckluY2x1ZGUJIl5ccyojXHMqaW5jbHVkZVw+XHMqWyI8XSIgY29udGFpbnM9Y2xpcHBlckluY2x1ZGVkCisKKyIgU3RyaW5nIGFuZCBDaGFyYWN0ZXIgY29uc3RhbnRzCitzeW4gcmVnaW9uIGNsaXBwZXJTdHJpbmcJc3RhcnQ9KyIrIGVuZD0rIisKK3N5biByZWdpb24gY2xpcHBlclN0cmluZwlzdGFydD0rJysgZW5kPSsnKworCisiIERlbGltaXRlcnMKK3N5biBtYXRjaCAgQ2xpcHBlckRlbGltaXRlcnMJIlsoKV1cfFtcW1xdXVx8W3t9XVx8W3x8XSIKKworIiBTcGVjaWFsCitzeW4gbWF0Y2ggY2xpcHBlckxpbmVDb250aW51YXRpb24JIjsiCisKKyIgVGhpcyBpcyBmcm9tIEJyYW0gTW9vbGVuYWFyOgoraWYgZXhpc3RzKCJjX2NvbW1lbnRfc3RyaW5ncyIpCisgICIgQSBjb21tZW50IGNhbiBjb250YWluIGNTdHJpbmcsIGNDaGFyYWN0ZXIgYW5kIGNOdW1iZXIuCisgICIgQnV0IGEgIiovIiBpbnNpZGUgYSBjU3RyaW5nIGluIGEgY2xpcHBlckNvbW1lbnQgRE9FUyBlbmQgdGhlIGNvbW1lbnQhCisgICIgU28gd2UgbmVlZCB0byB1c2UgYSBzcGVjaWFsIHR5cGUgb2YgY1N0cmluZzogY2xpcHBlckNvbW1lbnRTdHJpbmcsIHdoaWNoCisgICIgYWxzbyBlbmRzIG9uICIqLyIsIGFuZCBzZWVzIGEgIioiIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBhcyBjb21tZW50CisgICIgYWdhaW4uIFVuZm9ydHVuYXRlbHkgdGhpcyBkb2Vzbid0IHZlcnkgd2VsbCB3b3JrIGZvciAvLyB0eXBlIG9mIGNvbW1lbnRzIDotKAorICBzeW50YXggbWF0Y2ggY2xpcHBlckNvbW1lbnRTa2lwCWNvbnRhaW5lZCAiXlxzKlwqXCgkXHxcc1wrXCkiCisgIHN5bnRheCByZWdpb24gY2xpcHBlckNvbW1lbnRTdHJpbmcJY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgZW5kPStcKi8rbWU9cy0xIGNvbnRhaW5zPWNsaXBwZXJDb21tZW50U2tpcAorICBzeW50YXggcmVnaW9uIGNsaXBwZXJDb21tZW50MlN0cmluZwljb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBlbmQ9IiQiCisgIHN5bnRheCByZWdpb24gY2xpcHBlckNvbW1lbnQJCXN0YXJ0PSIvXCoiIGVuZD0iXCovIiBjb250YWlucz1jbGlwcGVyQ29tbWVudFN0cmluZyxjbGlwcGVyQ2hhcmFjdGVyLGNsaXBwZXJOdW1iZXIsY2xpcHBlclN0cmluZworICBzeW50YXggbWF0Y2ggIGNsaXBwZXJDb21tZW50CQkiLy8uKiIgY29udGFpbnM9Y2xpcHBlckNvbW1lbnQyU3RyaW5nLGNsaXBwZXJDaGFyYWN0ZXIsY2xpcHBlck51bWJlcgorZWxzZQorICBzeW4gcmVnaW9uIGNsaXBwZXJDb21tZW50CQlzdGFydD0iL1wqIiBlbmQ9IlwqLyIKKyAgc3luIG1hdGNoIGNsaXBwZXJDb21tZW50CQkiLy8uKiIKK2VuZGlmCitzeW50YXggbWF0Y2ggY2xpcHBlckNvbW1lbnRFcnJvcgkiXCovIgorCisiIExpbmVzIGJlZ2dpbmluZyB3aXRoIGFuICIqIiBhcmUgY29tbWVudHMgdG9vCitzeW50YXggbWF0Y2ggY2xpcHBlckNvbW1lbnQJCSJeXCouKiIKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jbGlwcGVyX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2NsaXBwZXJfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgY2xpcHBlckNvbmRpdGlvbmFsCQlDb25kaXRpb25hbAorICBIaUxpbmsgY2xpcHBlclJlcGVhdAkJCVJlcGVhdAorICBIaUxpbmsgY2xpcHBlck51bWJlcgkJCU51bWJlcgorICBIaUxpbmsgY2xpcHBlckluY2x1ZGUJCUluY2x1ZGUKKyAgSGlMaW5rIGNsaXBwZXJDb21tZW50CQlDb21tZW50CisgIEhpTGluayBjbGlwcGVyT3BlcmF0b3IJCU9wZXJhdG9yCisgIEhpTGluayBjbGlwcGVyU3RvcmFnZUNsYXNzCQlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGNsaXBwZXJTdGF0ZW1lbnQJCVN0YXRlbWVudAorICBIaUxpbmsgY2xpcHBlclN0cmluZwkJCVN0cmluZworICBIaUxpbmsgY2xpcHBlckZ1bmN0aW9uCQlGdW5jdGlvbgorICBIaUxpbmsgY2xpcHBlckxpbmVDb250aW51YXRpb24JU3BlY2lhbAorICBIaUxpbmsgY2xpcHBlckRlbGltaXRlcnMJCURlbGltaXRlcgorICBIaUxpbmsgY2xpcHBlclVzZXJWYXJpYWJsZQkJSWRlbnRpZmllcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjbGlwcGVyIgorCisiIHZpbTogdHM9NApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY29ib2wudmltIGIvcnVudGltZS9zeW50YXgvY29ib2wudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNTlmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jb2JvbC52aW0KQEAgLTAsMCArMSwxNzcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiBDT0JPTAorIiBNYWludGFpbmVyczogIERhdnlkIE9uZHJlamtvIDx2b25kcmFjb0Bjb2x1bWJ1cy5yci5jb20+CisiICAgICAoZm9ybWVybHkgU2l0YXJhbSBDaGFtYXJ0eSA8c2l0YXJhbUBkaWFjLmNvbT4gYW5kCisiCQkgICAgSmFtZXMgTWl0Y2hlbGwgPGphbWVzX21pdGNoZWxsQGFjbS5vcmc+KQorIiBMYXN0IGNoYW5nZTogIDIwMDEgU2VwIDAyCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBNT1NUIGltcG9ydGFudCAtIGVsc2UgbW9zdCBvZiB0aGUga2V5d29yZHMgd29udCB3b3JrIQoraWYgdmVyc2lvbiA8IDYwMAorICBzZXQgaXNrPUAsNDgtNTcsLQorZWxzZQorICBzZXRsb2NhbCBpc2s9QCw0OC01NywtCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworc3luIG1hdGNoIGNvYm9sS2V5cyAiXlxhXHsxLDZcfSIgY29udGFpbnM9Y29ib2xSZXNlcnZlZAorc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgQUNDRVBUIEFDQ0VTUyBBREQgQUREUkVTUyBBRFZBTkNJTkcgQUZURVIgQUxQSEFCRVQgQUxQSEFCRVRJQworc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgQUxQSEFCRVRJQy1MT1dFUiBBTFBIQUJFVElDLVVQUEVSIEFMUEhBTlVNRVJJQyBBTFBIQU5VTUVSSUMtRURJVEVEIEFMUworc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgQUxURVJOQVRFIEFORCBBTlkgQVJFIEFSRUEgQVJFQVMgQVNDRU5ESU5HIEFTU0lHTiBBVCBBVVRIT1IgQkVGT1JFIEJJTkFSWQorc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgQkxBTksgQkxPQ0sgQk9UVE9NIEJZIENBTkNFTCBDQkxMIENEIENGIENIIENIQVJBQ1RFUiBDSEFSQUNURVJTIENMQVNTCitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBDTE9DSy1VTklUUyBDTE9TRSBDT0JPTCBDT0RFIENPREUtU0VUIENPTExBVElORyBDT0xVTU4gQ09NTUEgQ09NTU9OCitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBDT01NVU5JQ0FUSU9OUyBDT01QVVRBVElPTkFMIENPTVBVVEUgQ09ORklHVVJBVElPTiBDT05URU5UIENPTlRJTlVFCitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBDT05UUk9MIENPTlZFUlRJTkcgQ09SUiBDT1JSRVNQT05ESU5HIENPVU5UIENVUlJFTkNZIERBVEEgREFURSBEQVRFLUNPTVBJTEVECitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBEQVRFLVdSSVRURU4gREFZIERBWS1PRi1XRUVLIERFIERFQlVHLUNPTlRFTlRTIERFQlVHLUlURU0gREVCVUctTElORQorc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgREVCVUctTkFNRSBERUJVRy1TVUItMSBERUJVRy1TVUItMiBERUJVRy1TVUItMyBERUJVR0dJTkcgREVDSU1BTC1QT0lOVAorc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgREVMQVJBVElWRVMgREVMRVRFIERFTElNSVRFRCBERUxJTUlURVIgREVQRU5ESU5HIERFU0NFTkRJTkcgREVTVElOQVRJT04KK3N5biBrZXl3b3JkIGNvYm9sUmVzZXJ2ZWQgY29udGFpbmVkIERFVEFJTCBESVNBQkxFIERJU1BMQVkgRElWSURFIERJVklTSU9OIERPV04gRFVQTElDQVRFUyBEWU5BTUlDIEVHSSBFTFNFIEVNSQorc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgRU5BQkxFIEVORC1BREQgRU5ELUNPTVBVVEUgRU5ELURFTEVURSBFTkQtRElWSURFIEVORC1FVkFMVUFURSBFTkQtSUYKK3N5biBrZXl3b3JkIGNvYm9sUmVzZXJ2ZWQgY29udGFpbmVkIEVORC1NVUxUSVBMWSBFTkQtT0YtUEFHRSBFTkQtUEVSRk9STSBFTkQtUkVBRCBFTkQtUkVDRUlWRSBFTkQtUkVUVVJOCitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBFTkQtUkVXUklURSBFTkQtU0VBUkNIIEVORC1TVEFSVCBFTkQtU1RSSU5HIEVORC1TVUJUUkFDVCBFTkQtVU5TVFJJTkcKK3N5biBrZXl3b3JkIGNvYm9sUmVzZXJ2ZWQgY29udGFpbmVkIEVORC1XUklURSBFTlZJUk9OTUVOVCBFUVVBTCBFUlJPUiBFU0kgRVZBTFVBVEUgRVZFUlkgRVhDRVBUSU9OIEVYSVQKK3N5biBrZXl3b3JkIGNvYm9sUmVzZXJ2ZWQgY29udGFpbmVkIEVYVEVORCBFWFRFUk5BTCBGQUxTRSBGRCBGSUxFIEZJTEUtQ09OVFJPTCBGSUxMRVIgRklOQUwgRklSU1QgRk9PVElORyBGT1IgRlJPTQorc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgR0VORVJBVEUgR0lWSU5HIEdMT0JBTCBHUkVBVEVSIEdST1VQIEhFQURJTkcgSElHSC1WQUxVRSBISUdILVZBTFVFUyBJLU8KK3N5biBrZXl3b3JkIGNvYm9sUmVzZXJ2ZWQgY29udGFpbmVkIEktTy1DT05UUk9MIElERU5USUZJQ0FUSU9OIElOIElOREVYIElOREVYRUQgSU5ESUNBVEUgSU5JVElBTCBJTklUSUFMSVpFCitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBJTklUSUFURSBJTlBVVCBJTlBVVC1PVVRQVVQgSU5TUEVDVCBJTlNUQUxMQVRJT04gSU5UTyBJUyBKVVNUCitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBKVVNUSUZJRUQgS0VZIExBQkVMIExBU1QgTEVBRElORyBMRUZUIExFTkdUSCBMT0NLIE1FTU9SWQorc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgTUVSR0UgTUVTU0FHRSBNT0RFIE1PRFVMRVMgTU9WRSBNVUxUSVBMRSBNVUxUSVBMWSBOQVRJVkUgTkVHQVRJVkUgTkVYVCBOTyBOT1QKK3N5biBrZXl3b3JkIGNvYm9sUmVzZXJ2ZWQgY29udGFpbmVkIE5VTUJFUiBOVU1FUklDIE5VTUVSSUMtRURJVEVEIE9CSkVDVC1DT01QVVRFUiBPQ0NVUlMgT0YgT0ZGIE9NSVRURUQgT04gT1BFTgorc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgT1BUSU9OQUwgT1IgT1JERVIgT1JHQU5JWkFUSU9OIE9USEVSIE9VVFBVVCBPVkVSRkxPVyBQQUNLRUQtREVDSU1BTCBQQURESU5HCitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBQQUdFIFBBR0UtQ09VTlRFUiBQRVJGT1JNIFBGIFBIIFBJQyBQSUNUVVJFIFBMVVMgUE9JTlRFUiBQT1NJVElPTiBQT1NJVElWRQorc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgUFJJTlRJTkcgUFJPQ0VEVVJFIFBST0NFRFVSRVMgUFJPQ0VERCBQUk9HUkFNIFBST0dSQU0tSUQgUFVSR0UgUVVFVUUgUVVPVEVTCitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBSQU5ET00gUkQgUkVBRCBSRUNFSVZFIFJFQ09SRCBSRUNPUkRTIFJFREVGSU5FUyBSRUVMIFJFRkVSRU5DRSBSRUZFUkVOQ0VTCitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBSRUxBVElWRSBSRUxFQVNFIFJFTUFJTkRFUiBSRU1PVkFMIFJFUExBQ0UgUkVQTEFDSU5HIFJFUE9SVCBSRVBPUlRJTkcKK3N5biBrZXl3b3JkIGNvYm9sUmVzZXJ2ZWQgY29udGFpbmVkIFJFUE9SVFMgUkVSVU4gUkVTRVJWRSBSRVNFVCBSRVRVUk4gUkVUVVJOSU5HIFJFVkVSU0VEIFJFV0lORCBSRVdSSVRFIFJGIFJICitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBSSUdIVCBST1VOREVEIFJVTiBTQU1FIFNEIFNFQVJDSCBTRUNUSU9OIFNFQ1VSSVRZIFNFR01FTlQgU0VHTUVOVC1MSU1JVEVECitzeW4ga2V5d29yZCBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCBTRUxFQ1QgU0VORCBTRU5URU5DRSBTRVBBUkFURSBTRVFVRU5DRSBTRVFVRU5USUFMIFNFVCBTSUdOIFNJWkUgU09SVAorc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgU09SVC1NRVJHRSBTT1VSQ0UgU09VUkNFLUNPTVBVVEVSIFNQRUNJQUwtTkFNRVMgU1RBTkRBUkQKK3N5biBrZXl3b3JkIGNvYm9sUmVzZXJ2ZWQgY29udGFpbmVkIFNUQU5EQVJELTEgU1RBTkRBUkQtMiBTVEFSVCBTVEFUVVMgU1RPUCBTVFJJTkcgU1VCLVFVRVVFLTEgU1VCLVFVRVVFLTIKK3N5biBrZXl3b3JkIGNvYm9sUmVzZXJ2ZWQgY29udGFpbmVkIFNVQi1RVUVVRS0zIFNVQlRSQUNUIFNVTSBTVVBQUkVTUyBTWU1CT0xJQyBTWU5DIFNZTkNIUk9OSVpFRCBUQUJMRSBUQUxMWUlORworc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgVEFQRSBURVJNSU5BTCBURVJNSU5BVEUgVEVTVCBURVhUIFRIQU4gVEhFTiBUSFJPVUdIIFRIUlUgVElNRSBUSU1FUyBUTyBUT1AKK3N5biBrZXl3b3JkIGNvYm9sUmVzZXJ2ZWQgY29udGFpbmVkIFRSQUlMSU5HIFRSVUUgVFlQRSBVTklUIFVOU1RSSU5HIFVOVElMIFVQIFVQT04gVVNBR0UgVVNFIFVTSU5HIFZBTFVFIFZBTFVFUworc3luIGtleXdvcmQgY29ib2xSZXNlcnZlZCBjb250YWluZWQgVkFSWUlORyBXSEVOIFdJVEggV09SRFMgV09SS0lORy1TVE9SQUdFIFdSSVRFCitzeW4gbWF0Y2ggICBjb2JvbFJlc2VydmVkIGNvbnRhaW5lZCAiXDxDT05UQUlOU1w+Igorc3luIG1hdGNoICAgY29ib2xSZXNlcnZlZCBjb250YWluZWQgIlw8XChJRlx8SU5WQUxJRFx8RU5EXHxFT1BcKVw+Igorc3luIG1hdGNoICAgY29ib2xSZXNlcnZlZCBjb250YWluZWQgIlw8QUxMXD4iCisKK3N5biBrZXl3b3JkIGNvYm9sQ29uc3RhbnQgU1BBQ0UgU1BBQ0VTIE5VTEwgWkVSTyBaRVJPRVMgWkVST1MgTE9XLVZBTFVFIExPVy1WQUxVRVMKKworc3luIG1hdGNoICAgY29ib2xNYXJrZXIgICAgICAgIl4uXHs2XH0iCitzeW4gbWF0Y2ggICBjb2JvbEJhZExpbmUgICAgICAiXi5cezZcfVteIERcLSokL10uKiJocz1zKzYKKworIiBJZiBjb21tZW50IG1hcmsgc29tZWhvdyBnZXRzIGludG8gY29sdW1uIHBhc3QgQ29sdW1uIDcuCitzeW4gbWF0Y2ggICBjb2JvbEJhZExpbmUgICAgICAiXi5cezZcfVxzXCtcKi4qIgorCitzeW4gbWF0Y2ggICBjb2JvbE51bWJlciAgICAgICAiXDwtXD1cZCpcLlw9XGRcK1w+IiBjb250YWlucz1jb2JvbE1hcmtlcixjb2JvbENvbW1lbnQKK3N5biBtYXRjaCAgIGNvYm9sUGljCQkiXDxTKjlcK1w+IiBjb250YWlucz1jb2JvbE1hcmtlcixjb2JvbENvbW1lbnQKK3N5biBtYXRjaCAgIGNvYm9sUGljCQkiXDwkKlwuXD05XCtcPiIgY29udGFpbnM9Y29ib2xNYXJrZXIsY29ib2xDb21tZW50CitzeW4gbWF0Y2ggICBjb2JvbFBpYwkJIlw8WipcLlw9OVwrXD4iIGNvbnRhaW5zPWNvYm9sTWFya2VyLGNvYm9sQ29tbWVudAorc3luIG1hdGNoICAgY29ib2xQaWMJCSJcPFY5XCtcPiIgY29udGFpbnM9Y29ib2xNYXJrZXIsY29ib2xDb21tZW50CitzeW4gbWF0Y2ggICBjb2JvbFBpYwkJIlw8OVwrVlw+IiBjb250YWlucz1jb2JvbE1hcmtlcixjb2JvbENvbW1lbnQKK3N5biBtYXRjaCAgIGNvYm9sUGljCQkiXDwtXCtbWjldXCtcPiIgY29udGFpbnM9Y29ib2xNYXJrZXIsY29ib2xDb21tZW50CitzeW4gbWF0Y2ggICBjb2JvbFRvZG8JCSJ0b2RvIiBjb250YWluZWQKK3N5biBtYXRjaCAgIGNvYm9sQ29tbWVudCAgICAgICJeLlx7Nlx9XCouKiJocz1zKzYgY29udGFpbnM9Y29ib2xUb2RvLGNvYm9sTWFya2VyCitzeW4gbWF0Y2ggICBjb2JvbENvbW1lbnQgICAgICAiXi5cezZcfS8uKiJocz1zKzYgY29udGFpbnM9Y29ib2xUb2RvLGNvYm9sTWFya2VyCitzeW4gbWF0Y2ggICBjb2JvbENvbW1lbnQgICAgICAiXi5cezZcfUMuKiJocz1zKzYgY29udGFpbnM9Y29ib2xUb2RvLGNvYm9sTWFya2VyCitzeW4gbWF0Y2ggICBjb2JvbENvbXBpbGVyICAgICAiXi5cezZcfSQuKiJocz1zKzYKKworIiBGb3IgTWljcm9Gb2N1cyBvciBvdGhlciBpbmxpbmUgY29tbWVudHMsIGluY2x1ZGUgdGhpcyBsaW5lLgorIiBzeW4gcmVnaW9uICBjb2JvbENvbW1lbnQgICAgICBzdGFydD0iKj4iIGVuZD0iJCIgY29udGFpbnM9Y29ib2xUb2RvLGNvYm9sTWFya2VyCisKK3N5biBrZXl3b3JkIGNvYm9sR29UbwkJR08gR09UTworc3luIGtleXdvcmQgY29ib2xDb3B5CQlDT1BZCisKKyIgY29ib2xCQUQ6IHRoaW5ncyB0aGF0IGFyZSBCQUQgTkVXUyEKK3N5biBrZXl3b3JkIGNvYm9sQkFECQlBTFRFUiBFTlRFUiBSRU5BTUVTCisKKyIgY29ib2xXYXRjaDogdGhpbmdzIHRoYXQgYXJlIGltcG9ydGFudCB3aGVuIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcHJvZ3JhbQorc3luIGtleXdvcmQgY29ib2xXYXRjaAkJT0NDVVJTIERFUEVORElORyBWQVJZSU5HIEJJTkFSWSBDT01QIFJFREVGSU5FUworc3luIGtleXdvcmQgY29ib2xXYXRjaAkJUkVQTEFDSU5HIFJVTgorc3luIG1hdGNoICAgY29ib2xXYXRjaAkJIkNPTVAtWzEyMzQ1NlhOXSIKKworc3luIGtleXdvcmQgY29ib2xFWEVDcwkJRVhFQyBFTkQtRVhFQworCisKK3N5biBtYXRjaCAgIGNvYm9sRGVjbAkJIl4uXHs2fSBcezEsNH1cKDBcPTFcfDc3XHw3OFwpICJocz1zKzcsaGU9ZS0xIGNvbnRhaW5zPWNvYm9sTWFya2VyCitzeW4gbWF0Y2ggICBjb2JvbERlY2wJCSJeLlx7Nn0gXCtbMS00XVxkICJocz1zKzcsaGU9ZS0xIGNvbnRhaW5zPWNvYm9sTWFya2VyCitzeW4gbWF0Y2ggICBjb2JvbERlY2wJCSJeLlx7Nn0gXCswXD1bMi05XSAiaHM9cys3LGhlPWUtMSBjb250YWlucz1jb2JvbE1hcmtlcgorc3luIG1hdGNoICAgY29ib2xEZWNsCQkiXi5cezZ9IFwrNjYgImhzPXMrNyxoZT1lLTEgY29udGFpbnM9Y29ib2xNYXJrZXIKKworc3luIG1hdGNoICAgY29ib2xXYXRjaAkJIl4uXHs2fSBcKzg4ICJocz1zKzcsaGU9ZS0xIGNvbnRhaW5zPWNvYm9sTWFya2VyCisKK3N5biBtYXRjaCAgIGNvYm9sQmFkSUQJCSJca1wrLVwoJFx8W14tQS1aMC05XVwpIgorCitzeW4ga2V5d29yZCBjb2JvbENBTExzCQlDQUxMIENBTkNFTCBHT0JBQ0sgUEVSRk9STSBJTlZPS0UKK3N5biBtYXRjaCAgIGNvYm9sQ0FMTHMJCSJFWElUIFwrUFJPR1JBTSIKK3N5biBtYXRjaCAgIGNvYm9sRXh0cmFzICAgICAgIC9cPFZBTFVFIFwrXGRcK1wuL2hzPXMrNixoZT1lLTEKKworc3luIG1hdGNoICAgY29ib2xTdHJpbmcgICAgICAgLyJbXiJdKlwoIlx8JFwpLworc3luIG1hdGNoICAgY29ib2xTdHJpbmcgICAgICAgLydbXiddKlwoJ1x8JFwpLworCitzeW4gcmVnaW9uICBjb2JvbExpbmUgICAgICAgc3RhcnQ9Il4uXHs2fSAiIGVuZD0iJCIgY29udGFpbnM9QUxMCisKK2lmIGV4aXN0cygiY29ib2xfbGVnYWN5X2NvZGUiKQorc3luIHJlZ2lvbiAgY29ib2xDb25kRmxvdyAgICAgY29udGFpbnM9QUxMQlVULGNvYm9sTGluZSBzdGFydD0iXDxcKElGXHxJTlZBTElEXHxFTkRcfEVPUFwpXD4iIHNraXA9L1woJ1x8IlwpW14iXVx7LX1cKCJcfCdcfCRcKS8gZW5kPSJcLiIga2VlcGVuZAorZW5kaWYKKworaWYgISBleGlzdHMoImNvYm9sX2xlZ2FjeV9jb2RlIikKKyAgICAiIGNhdGNoIGp1bmsgaW4gY29sdW1ucyAxLTYgZm9yIG1vZGVybiBjb2RlCisgICAgc3luIG1hdGNoIGNvYm9sQkFEICAgICAgIl4gXHswLDVcfVteIF0uKiIKK2VuZGlmCisKKyIgbWFueSBsZWdhY3kgc291cmNlcyBoYXZlIGp1bmsgaW4gY29sdW1ucyAxLTY6IG11c3QgYmUgYmVmb3JlIG90aGVycworIiBTdHVmZiBhZnRlciBjb2x1bW4gNzIgaXMgaW4gZXJyb3IgLSBtdXN0IGJlIGFmdGVyIGFsbCBvdGhlciAibWF0Y2giIGVudHJpZXMKK2lmIGV4aXN0cygiY29ib2xfbGVnYWN5X2NvZGUiKQorICAgIHN5biBtYXRjaCAgIGNvYm9sQmFkTGluZSAgICAgICJeLlx7Nn1bXiovXS5cezY2LFx9IgorZWxzZQorICAgIHN5biBtYXRjaCAgIGNvYm9sQmFkTGluZSAgICAgICJeLlx7Nn0uXHs2NyxcfSIKK2VuZGlmCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2NvYm9sX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2NvYm9sX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGNvYm9sQkFEICAgICAgRXJyb3IKKyAgSGlMaW5rIGNvYm9sQmFkSUQgICAgRXJyb3IKKyAgSGlMaW5rIGNvYm9sQmFkTGluZSAgRXJyb3IKKyAgSGlMaW5rIGNvYm9sTWFya2VyICAgQ29tbWVudAorICBIaUxpbmsgY29ib2xDQUxMcyAgICBGdW5jdGlvbgorICBIaUxpbmsgY29ib2xDb21tZW50ICBDb21tZW50CisgIEhpTGluayBjb2JvbEtleXMgICAgIENvbW1lbnQKKyAgSGlMaW5rIGNvYm9sQXJlYUIgICAgU3BlY2lhbAorICBIaUxpbmsgY29ib2xDb21waWxlciBQcmVQcm9jCisgIEhpTGluayBjb2JvbENvbmRGbG93IFNwZWNpYWwKKyAgSGlMaW5rIGNvYm9sQ29weSAgICAgUHJlUHJvYworICBIaUxpbmsgY29ib2xEZWNsICAgICBUeXBlCisgIEhpTGluayBjb2JvbEV4dHJhcyAgIFNwZWNpYWwKKyAgSGlMaW5rIGNvYm9sR29UbyAgICAgU3BlY2lhbAorICBIaUxpbmsgY29ib2xDb25zdGFudCBDb25zdGFudAorICBIaUxpbmsgY29ib2xOdW1iZXIgICBDb25zdGFudAorICBIaUxpbmsgY29ib2xQaWMgICAgICBDb25zdGFudAorICBIaUxpbmsgY29ib2xSZXNlcnZlZCBTdGF0ZW1lbnQKKyAgSGlMaW5rIGNvYm9sU3RyaW5nICAgQ29uc3RhbnQKKyAgSGlMaW5rIGNvYm9sVG9kbyAgICAgVG9kbworICBIaUxpbmsgY29ib2xXYXRjaCAgICBTcGVjaWFsCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImNvYm9sIgorCisiIHZpbTogdHM9NiBub3dyYXAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2NvbG9ydGVzdC52aW0gYi9ydW50aW1lL3N5bnRheC9jb2xvcnRlc3QudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOGIyMWYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jb2xvcnRlc3QudmltCkBAIC0wLDAgKzEsNjUgQEAKKyIgVmltIHNjcmlwdCBmb3IgdGVzdGluZyBjb2xvcnMKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgQ29udHJpYnV0b3JzOglSYWZhZWwgR2FyY2lhLVN1YXJleiwgQ2hhcmxlcyBDYW1wYmVsbAorIiBMYXN0IENoYW5nZToJMjAwMSBKdWwgMjgKKworIiBlZGl0IHRoaXMgZmlsZSwgdGhlbiBkbyAiOnNvdXJjZSAlIiwgYW5kIGNoZWNrIGlmIHRoZSBjb2xvcnMgbWF0Y2gKKworIiBibGFjawkJYmxhY2tfb25fd2hpdGUJCQkJd2hpdGVfb25fYmxhY2sKKyIJCQkJYmxhY2tfb25fYmxhY2sJCWJsYWNrX29uX2JsYWNrCisiIGRhcmtyZWQJZGFya3JlZF9vbl93aGl0ZQkJCXdoaXRlX29uX2RhcmtyZWQKKyIJCQkJZGFya3JlZF9vbl9ibGFjawlibGFja19vbl9kYXJrcmVkCisiIGRhcmtncmVlbglkYXJrZ3JlZW5fb25fd2hpdGUJCQl3aGl0ZV9vbl9kYXJrZ3JlZW4KKyIJCQkJZGFya2dyZWVuX29uX2JsYWNrCWJsYWNrX29uX2RhcmtncmVlbgorIiBicm93bgkJYnJvd25fb25fd2hpdGUJCQkJd2hpdGVfb25fYnJvd24KKyIJCQkJYnJvd25fb25fYmxhY2sJCWJsYWNrX29uX2Jyb3duCisiIGRhcmtibHVlCWRhcmtibHVlX29uX3doaXRlCQkJd2hpdGVfb25fZGFya2JsdWUKKyIJCQkJZGFya2JsdWVfb25fYmxhY2sJYmxhY2tfb25fZGFya2JsdWUKKyIgZGFya21hZ2VudGEJZGFya21hZ2VudGFfb25fd2hpdGUJCQl3aGl0ZV9vbl9kYXJrbWFnZW50YQorIgkJCQlkYXJrbWFnZW50YV9vbl9ibGFjawlibGFja19vbl9kYXJrbWFnZW50YQorIiBkYXJrY3lhbglkYXJrY3lhbl9vbl93aGl0ZQkJCXdoaXRlX29uX2RhcmtjeWFuCisiCQkJCWRhcmtjeWFuX29uX2JsYWNrCWJsYWNrX29uX2RhcmtjeWFuCisiIGxpZ2h0Z3JheQlsaWdodGdyYXlfb25fd2hpdGUJCQl3aGl0ZV9vbl9saWdodGdyYXkKKyIJCQkJbGlnaHRncmF5X29uX2JsYWNrCWJsYWNrX29uX2xpZ2h0Z3JheQorIiBkYXJrZ3JheQlkYXJrZ3JheV9vbl93aGl0ZQkJCXdoaXRlX29uX2RhcmtncmF5CisiCQkJCWRhcmtncmF5X29uX2JsYWNrCWJsYWNrX29uX2RhcmtncmF5CisiIHJlZAkJcmVkX29uX3doaXRlCQkJCXdoaXRlX29uX3JlZAorIgkJCQlyZWRfb25fYmxhY2sJCWJsYWNrX29uX3JlZAorIiBncmVlbgkJZ3JlZW5fb25fd2hpdGUJCQkJd2hpdGVfb25fZ3JlZW4KKyIJCQkJZ3JlZW5fb25fYmxhY2sJCWJsYWNrX29uX2dyZWVuCisiIHllbGxvdwl5ZWxsb3dfb25fd2hpdGUJCQkJd2hpdGVfb25feWVsbG93CisiCQkJCXllbGxvd19vbl9ibGFjawkJYmxhY2tfb25feWVsbG93CisiIGJsdWUJCWJsdWVfb25fd2hpdGUJCQkJd2hpdGVfb25fYmx1ZQorIgkJCQlibHVlX29uX2JsYWNrCQlibGFja19vbl9ibHVlCisiIG1hZ2VudGEJbWFnZW50YV9vbl93aGl0ZQkJCXdoaXRlX29uX21hZ2VudGEKKyIJCQkJbWFnZW50YV9vbl9ibGFjawlibGFja19vbl9tYWdlbnRhCisiIGN5YW4JCWN5YW5fb25fd2hpdGUJCQkJd2hpdGVfb25fY3lhbgorIgkJCQljeWFuX29uX2JsYWNrCQlibGFja19vbl9jeWFuCisiIHdoaXRlCQl3aGl0ZV9vbl93aGl0ZQkJCQl3aGl0ZV9vbl93aGl0ZQorIgkJCQl3aGl0ZV9vbl9ibGFjawkJYmxhY2tfb25fd2hpdGUKKyIgZ3JleQkJZ3JleV9vbl93aGl0ZQkJCQl3aGl0ZV9vbl9ncmV5CisiCQkJCWdyZXlfb25fYmxhY2sJCWJsYWNrX29uX2dyZXkKKyIgbGlnaHRyZWQJbGlnaHRyZWRfb25fd2hpdGUJCQl3aGl0ZV9vbl9saWdodHJlZAorIgkJCQlsaWdodHJlZF9vbl9ibGFjawlibGFja19vbl9saWdodHJlZAorIiBsaWdodGdyZWVuCWxpZ2h0Z3JlZW5fb25fd2hpdGUJCQl3aGl0ZV9vbl9saWdodGdyZWVuCisiCQkJCWxpZ2h0Z3JlZW5fb25fYmxhY2sJYmxhY2tfb25fbGlnaHRncmVlbgorIiBsaWdodHllbGxvdwlsaWdodHllbGxvd19vbl93aGl0ZQkJCXdoaXRlX29uX2xpZ2h0eWVsbG93CisiCQkJCWxpZ2h0eWVsbG93X29uX2JsYWNrCWJsYWNrX29uX2xpZ2h0eWVsbG93CisiIGxpZ2h0Ymx1ZQlsaWdodGJsdWVfb25fd2hpdGUJCQl3aGl0ZV9vbl9saWdodGJsdWUKKyIJCQkJbGlnaHRibHVlX29uX2JsYWNrCWJsYWNrX29uX2xpZ2h0Ymx1ZQorIiBsaWdodG1hZ2VudGEJbGlnaHRtYWdlbnRhX29uX3doaXRlCQkJd2hpdGVfb25fbGlnaHRtYWdlbnRhCisiCQkJCWxpZ2h0bWFnZW50YV9vbl9ibGFjawlibGFja19vbl9saWdodG1hZ2VudGEKKyIgbGlnaHRjeWFuCWxpZ2h0Y3lhbl9vbl93aGl0ZQkJCXdoaXRlX29uX2xpZ2h0Y3lhbgorIgkJCQlsaWdodGN5YW5fb25fYmxhY2sJYmxhY2tfb25fbGlnaHRjeWFuCisKK3N5biBjbGVhcgorOAord2hpbGUgc2VhcmNoKCJfb25fIiwgIlciKSA8IDU1CisgIGxldCBjb2wxID0gc3Vic3RpdHV0ZShleHBhbmQoIjxjd29yZD4iKSwgJ1woXGFcK1wpX29uX1xhXCsnLCAnXDEnLCAiIikKKyAgbGV0IGNvbDIgPSBzdWJzdGl0dXRlKGV4cGFuZCgiPGN3b3JkPiIpLCAnXGFcK19vbl9cKFxhXCtcKScsICdcMScsICIiKQorICBleGVjICdoaSBjb2xfJy5jb2wxLidfJy5jb2wyLicgY3Rlcm1mZz0nLmNvbDEuJyBndWlmZz0nLmNvbDEuJyBjdGVybWJnPScuY29sMi4nIGd1aWJnPScuY29sMgorICBleGVjICdzeW4ga2V5d29yZCBjb2xfJy5jb2wxLidfJy5jb2wyLicgJy5jb2wxLidfb25fJy5jb2wyCitlbmR3aGlsZQorOCw1NWcvXiIgXGEvZXhlYyAnaGkgY29sXycuZXhwYW5kKCI8Y3dvcmQ+IikuJyBjdGVybWZnPScuZXhwYW5kKCI8Y3dvcmQ+IikuJyBndWlmZz0nLmV4cGFuZCgiPGN3b3JkPiIpfAorCVwgZXhlYyAnc3luIGtleXdvcmQgY29sXycuZXhwYW5kKCI8Y3dvcmQ+IikuIiAiLmV4cGFuZCgiPGN3b3JkPiIpCitub2hsc2VhcmNoCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jb25mLnZpbSBiL3J1bnRpbWUvc3ludGF4L2NvbmYudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOGRlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jb25mLnZpbQpAQCAtMCwwICsxLDQxIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJZ2VuZXJpYyBjb25maWd1cmUgZmlsZQorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMSBBcHIgMjUKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4ga2V5d29yZAljb25mVG9kbwljb250YWluZWQgVE9ETyBGSVhNRSBYWFgKKyIgQXZvaWQgbWF0Y2hpbmcgInRleHQjdGV4dCIsIHVzZWQgaW4gL2V0Yy9kaXNrdGFiIGFuZCAvZXRjL2dldHR5dGFiCitzeW4gbWF0Y2gJY29uZkNvbW1lbnQJIl4jLioiIGNvbnRhaW5zPWNvbmZUb2RvCitzeW4gbWF0Y2gJY29uZkNvbW1lbnQJIlxzIy4qIm1zPXMrMSBjb250YWlucz1jb25mVG9kbworc3luIHJlZ2lvbgljb25mU3RyaW5nCXN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgb25lbGluZQorc3luIHJlZ2lvbgljb25mU3RyaW5nCXN0YXJ0PSsnKyBza2lwPStcXFxcXHxcXCcrIGVuZD0rJysgb25lbGluZQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jb25mX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2NvbmZfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgY29uZkNvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgY29uZlRvZG8JVG9kbworICBIaUxpbmsgY29uZlN0cmluZwlTdHJpbmcKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiY29uZiIKKworIiB2aW06IHRzPTggc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY29uZmlnLnZpbSBiL3J1bnRpbWUvc3ludGF4L2NvbmZpZy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyNzk5ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2NvbmZpZy52aW0KQEAgLTAsMCArMSw1NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CQljb25maWd1cmUuaW4gc2NyaXB0OiBNNCB3aXRoIHNoCisiIE1haW50YWluZXI6CUNocmlzdGlhbiBIYW1tZXNyIDxjaEBsYXRoc3BlbGwud2VzdGVuZC5jb20+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorCisiIFdlbGwsIEkgYWN0dWFsbHkgZXZlbiBkbyBub3Qga25vdyBtdWNoIGFib3V0IG00LiBUaGlzIGV4cGxhaW5zIHdoeSB0aGVyZQorIiBpcyBwcm9iYWJseSB2ZXJ5IG11Y2ggbWlzc2luZyBoZXJlLCB5ZXQgIQorIiBCdXQgSSBtaXNzZWQgYSBnb29kIGhpbGlnaHRpbmcgd2hlbiBlZGl0aW5nIG15IEdOVSBhdXRvY29uZi9hdXRvbWFrZQorIiBzY3JpcHQsIHNvIEkgd3JvdGUgdGhpcyBxdWljayBhbmQgZGlydHkgcGF0Y2guCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGRlZmluZSB0aGUgY29uZmlnIHN5bnRheAorc3luIG1hdGNoICAgY29uZmlnZGVsaW1pdGVyICJbKClcW1xdOyxdIgorc3luIG1hdGNoICAgY29uZmlnb3BlcmF0b3IgICJbPXwmXCpcK1w8XD5dIgorc3luIG1hdGNoICAgY29uZmlnY29tbWVudCAgICJcKGRubC4qXClcfFwoIy4qXCkiCitzeW4gbWF0Y2ggICBjb25maWdmdW5jdGlvbiAgIlw8W0EtWl9dW0EtWjAtOV9dKlw+Igorc3luIG1hdGNoICAgY29uZmlnbnVtYmVyICAgICJbLStdXD1cPFxkXCtcKFwuXGQqXClcPVw+Igorc3luIGtleXdvcmQgY29uZmlna2V5d29yZCAgIGlmIHRoZW4gZWxzZSBmaSB0ZXN0IGZvciBpbiBkbyBkb25lCitzeW4ga2V5d29yZCBjb25maWdzcGVjaWFsICAgY2F0IHJtIGV2YWwKK3N5biByZWdpb24gIGNvbmZpZ3N0cmluZyAgICBzdGFydD0rIisgc2tpcD0rXFwiKyBlbmQ9KyIrCitzeW4gcmVnaW9uICBjb25maWdzdHJpbmcgICAgc3RhcnQ9K2ArIHNraXA9K1xcJysgZW5kPSsnKworc3luIHJlZ2lvbiAgY29uZmlnc3RyaW5nICAgIHN0YXJ0PStgKyBza2lwPStcXCcrIGVuZD0rYCsKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY29uZmlnX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2NvbmZpZ19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBjb25maWdkZWxpbWl0ZXIgRGVsaW1pdGVyCisgIEhpTGluayBjb25maWdvcGVyYXRvciAgT3BlcmF0b3IKKyAgSGlMaW5rIGNvbmZpZ2NvbW1lbnQgICBDb21tZW50CisgIEhpTGluayBjb25maWdmdW5jdGlvbiAgRnVuY3Rpb24KKyAgSGlMaW5rIGNvbmZpZ251bWJlciAgICBOdW1iZXIKKyAgSGlMaW5rIGNvbmZpZ2tleXdvcmQgICBLZXl3b3JkCisgIEhpTGluayBjb25maWdzcGVjaWFsICAgU3BlY2lhbAorICBIaUxpbmsgY29uZmlnc3RyaW5nICAgIFN0cmluZworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjb25maWciCisKKyIgdmltOiB0cz00CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jcHAudmltIGIvcnVudGltZS9zeW50YXgvY3BwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWI4OWVlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY3BwLnZpbQpAQCAtMCwwICsxLDYyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJQysrCisiIE1haW50YWluZXI6CUtlbiBTaGFuIDxjY3NoYW5AcG9zdC5oYXJ2YXJkLmVkdT4KKyIgTGFzdCBDaGFuZ2U6CTIwMDIgSnVsIDE1CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBSZWFkIHRoZSBDIHN5bnRheCB0byBzdGFydCB3aXRoCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvIDxzZmlsZT46cDpoL2MudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9jLnZpbQorICB1bmxldCBiOmN1cnJlbnRfc3ludGF4CitlbmRpZgorCisiIEMrKyBleHRlbnRpb25zCitzeW4ga2V5d29yZCBjcHBTdGF0ZW1lbnQJbmV3IGRlbGV0ZSB0aGlzIGZyaWVuZCB1c2luZworc3luIGtleXdvcmQgY3BwQWNjZXNzCQlwdWJsaWMgcHJvdGVjdGVkIHByaXZhdGUKK3N5biBrZXl3b3JkIGNwcFR5cGUJCWlubGluZSB2aXJ0dWFsIGV4cGxpY2l0IGV4cG9ydCBib29sIHdjaGFyX3QKK3N5biBrZXl3b3JkIGNwcEV4Y2VwdGlvbnMJdGhyb3cgdHJ5IGNhdGNoCitzeW4ga2V5d29yZCBjcHBPcGVyYXRvcgkJb3BlcmF0b3IgdHlwZWlkCitzeW4ga2V5d29yZCBjcHBPcGVyYXRvcgkJYW5kIGJpdG9yIG9yIHhvciBjb21wbCBiaXRhbmQgYW5kX2VxIG9yX2VxIHhvcl9lcSBub3Qgbm90X2VxCitzeW4gbWF0Y2ggY3BwQ2FzdAkJIlw8XChjb25zdFx8c3RhdGljXHxkeW5hbWljXHxyZWludGVycHJldFwpX2Nhc3Rccyo8Im1lPWUtMQorc3luIG1hdGNoIGNwcENhc3QJCSJcPFwoY29uc3RcfHN0YXRpY1x8ZHluYW1pY1x8cmVpbnRlcnByZXRcKV9jYXN0XHMqJCIKK3N5biBrZXl3b3JkIGNwcFN0b3JhZ2VDbGFzcwltdXRhYmxlCitzeW4ga2V5d29yZCBjcHBTdHJ1Y3R1cmUJY2xhc3MgdHlwZW5hbWUgdGVtcGxhdGUgbmFtZXNwYWNlCitzeW4ga2V5d29yZCBjcHBOdW1iZXIJCU5QT1MKK3N5biBrZXl3b3JkIGNwcEJvb2xlYW4JCXRydWUgZmFsc2UKKworIiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBvcGVyYXRvcnMgaW4gR05VIEMrKworc3luIG1hdGNoIGNwcE1pbk1heCAiWzw+XT8iCisKKyIgRGVmYXVsdCBoaWdobGlnaHRpbmcKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jcHBfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfY3BwX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisgIEhpTGluayBjcHBBY2Nlc3MJCWNwcFN0YXRlbWVudAorICBIaUxpbmsgY3BwQ2FzdAkJY3BwU3RhdGVtZW50CisgIEhpTGluayBjcHBFeGNlcHRpb25zCQlFeGNlcHRpb24KKyAgSGlMaW5rIGNwcE9wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgY3BwU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGNwcFR5cGUJCVR5cGUKKyAgSGlMaW5rIGNwcFN0b3JhZ2VDbGFzcwlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGNwcFN0cnVjdHVyZQkJU3RydWN0dXJlCisgIEhpTGluayBjcHBOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgY3BwQm9vbGVhbgkJQm9vbGVhbgorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiY3BwIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY3JtLnZpbSBiL3J1bnRpbWUvc3ludGF4L2NybS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExZTNiYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2NybS52aW0KQEAgLTAsMCArMSw2MSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBDUk0xMTQKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL3N5bnRheC9wY3AvY3JtLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTIyCisiIGFyY2gtdGFnOgkgICAgYTNkM2VhYWYtNDcwMC00NGZmLWIzMzItZjZjNDJjMDM2ODgzCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFRvZG8KK3N5biBrZXl3b3JkIGNybVRvZG8JICAgIGNvbnRhaW5lZCBUT0RPIEZJWE1FIFhYWCBOT1RFCisKKyIgQ29tbWVudHMKK3N5biByZWdpb24gIGNybUNvbW1lbnQJICAgIG1hdGNoZ3JvdXA9Y3JtQ29tbWVudCBzdGFydD0nIycgZW5kPSckJyBlbmQ9J1xcIycgY29udGFpbnM9Y3JtVG9kbworCisiIFZhcmlhYmxlcworc3luIG1hdGNoICAgY3JtVmFyaWFibGUgICAgJzpbKiNAXTpbXjpdXHstMSx9OicKKworIiBTcGVjaWFsIENoYXJhY3RlcnMKK3N5biBtYXRjaCAgIGNybVNwZWNpYWwJICAgICdcXFwlKHhceFx4XHxvXG9cb1xvXHxbXW5ydGFidmYwPil9Oy9cXF1cKScKKworIiBTdGF0ZW1lbnRzCitzeW4ga2V5d29yZCBjcm1TdGF0ZW1lbnQgICAgaW5zZXJ0IG5vb3AgYWNjZXB0IGFsaXVzIGFsdGVyIGNsYXNzaWZ5IGV2YWwgZXhpdAorc3luIGtleXdvcmQgY3JtU3RhdGVtZW50ICAgIGZhaWwgZmF1bHQgZ290byBoYXNoIGludGVyc2VjdCBpc29sYXRlIGlucHV0IGxlYXJuCitzeW4ga2V5d29yZCBjcm1TdGF0ZW1lbnQgICAgbGlhZiBtYXRjaCBvdXRwdXQgc3lzY2FsbCB0cmFwIHVuaW9uIHdpbmRvdworCisiIFJlZ2V4ZXMKK3N5biByZWdpb24gICBjcm1SZWdleAkgICAgbWF0Y2hncm91cD1jcm1SZWdleCBzdGFydD0nLycgc2tpcD0nXFwvJyBlbmQ9Jy8nIGNvbnRhaW5zPWNybVZhcmlhYmxlCisKKyIgTGFiZWxzCitzeW4gbWF0Y2ggICBjcm1MYWJlbAkgICAgJ15ccyo6W1s6Z3JhcGg6XV1cKzonCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2NybV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jcm1fc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgY3JtVG9kbwlUb2RvCisgIEhpTGluayBjcm1Db21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIGNybVZhcmlhYmxlCUlkZW50aWZpZXIKKyAgSGlMaW5rIGNybVNwZWNpYWwJU3BlY2lhbENoYXIKKyAgSGlMaW5rIGNybVN0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIGNybVJlZ2V4CVN0cmluZworICBIaUxpbmsgY3JtTGFiZWwJTGFiZWwKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiY3JtIgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jcm9udGFiLnZpbSBiL3J1bnRpbWUvc3ludGF4L2Nyb250YWIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YjhlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jcm9udGFiLnZpbQpAQCAtMCwwICsxLDY5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJY3JvbnRhYiAyLjMuMworIiBNYWludGFpbmVyOglKb2huIEhvZWx6ZWwgam9obmg1MUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKKyIgTGFzdCBjaGFuZ2U6CU1vbiBKdW4gIDkgMjAwMworIiBGaWxlbmFtZXM6ICAgIC90bXAvY3JvbnRhYi4qIHVzZWQgYnkgImNyb250YWIgLWUiCisiIFVSTDoJCWh0dHA6Ly9qb2huaDUxLmdldC50by92aW0vc3ludGF4L2Nyb250YWIudmltCisiCisiIGNyb250YWIgbGluZSBmb3JtYXQ6CisiIE1pbnV0ZXMgICBIb3VycyAgIERheXMgICBNb250aHMgICBEYXlzX29mX1dlZWsgICBDb21tYW5kcyAjIGNvbW1lbnRzCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3ludGF4IG1hdGNoICBjcm9udGFiTWluICAgICAiXF9eWzAtOVwtXC9cLFwuXVx7fVw+XHxcKiIgIG5leHRncm91cD1jcm9udGFiSHIgICBza2lwd2hpdGUKK3N5bnRheCBtYXRjaCAgY3JvbnRhYkhyICAgICAgICJcPFswLTlcLVwvXCxcLl1ce31cPlx8XCoiICBuZXh0Z3JvdXA9Y3JvbnRhYkRheSAgc2tpcHdoaXRlIGNvbnRhaW5lZAorc3ludGF4IG1hdGNoICBjcm9udGFiRGF5ICAgICAgIlw8WzAtOVwtXC9cLFwuXVx7fVw+XHxcKiIgIG5leHRncm91cD1jcm9udGFiTW50aCBza2lwd2hpdGUgY29udGFpbmVkCisKK3N5bnRheCBtYXRjaCAgY3JvbnRhYk1udGggICJcPFthLXowLTlcLVwvXCxcLl1ce31cPlx8XCoiICBuZXh0Z3JvdXA9Y3JvbnRhYkRvdyAgc2tpcHdoaXRlIGNvbnRhaW5lZAorc3ludGF4IGtleXdvcmQgY3JvbnRhYk1udGgxMiBjb250YWluZWQgICBqYW4gZmViIG1hciBhcHIgbWF5IGp1biBqdWwgYXVnIHNlcCBvY3Qgbm92IGRlYworCitzeW50YXggbWF0Y2ggIGNyb250YWJEb3cgICAiXDxbYS16MC05XC1cL1wsXC5dXHt9XD5cfFwqIiAgbmV4dGdyb3VwPWNyb250YWJDbWQgIHNraXB3aGl0ZSBjb250YWluZWQKK3N5bnRheCBrZXl3b3JkIGNyb250YWJEb3c3ICAgY29udGFpbmVkICAgIHN1biBtb24gdHVlIHdlZCB0aHUgZnJpIHNhdAorCisiICBzeW50YXggcmVnaW9uIGNyb250YWJDbWQgIHN0YXJ0PSJcPFthLXowLTlcL1woXSIgZW5kPSIkIiBuZXh0Z3JvdXA9Y3JvbnRhYkNtbnQgc2tpcHdoaXRlIGNvbnRhaW5lZCBjb250YWlucz1jcm9udGFiQ21udCBrZWVwZW5kCisKK3N5bnRheCByZWdpb24gY3JvbnRhYkNtZCAgc3RhcnQ9IlxTIiBlbmQ9IiQiIG5leHRncm91cD1jcm9udGFiQ21udCBza2lwd2hpdGUgY29udGFpbmVkIGNvbnRhaW5zPWNyb250YWJDbW50IGtlZXBlbmQKK3N5bnRheCBtYXRjaCAgY3JvbnRhYkNtbnQgLyMuKi8KKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY3JvbnRhYl9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jcm9udGFiX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGNyb250YWJNaW4JCU51bWJlcgorICBIaUxpbmsgY3JvbnRhYkhyCQlQcmVQcm9jCisgIEhpTGluayBjcm9udGFiRGF5CQlUeXBlCisKKyAgSGlMaW5rIGNyb250YWJNbnRoCQlOdW1iZXIKKyAgSGlMaW5rIGNyb250YWJNbnRoMTIJCU51bWJlcgorICBIaUxpbmsgY3JvbnRhYk1udGhTCQlOdW1iZXIKKyAgSGlMaW5rIGNyb250YWJNbnRoTgkJTnVtYmVyCisKKyAgSGlMaW5rIGNyb250YWJEb3cJCVByZVByb2MKKyAgSGlMaW5rIGNyb250YWJEb3c3CQlQcmVQcm9jCisgIEhpTGluayBjcm9udGFiRG93UwkJUHJlUHJvYworICBIaUxpbmsgY3JvbnRhYkRvd04JCVByZVByb2MKKworIiBjb21tZW50IG91dCBuZXh0IGxpbmUgZm9yIHRvIHN1cHByZXNzIHVuaXggY29tbWFuZHMgY29sb3JpbmcuCisgIEhpTGluayBjcm9udGFiQ21kCQlUeXBlCisKKyAgSGlMaW5rIGNyb250YWJDbW50CQlDb21tZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImNyb250YWIiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jcy52aW0gYi9ydW50aW1lL3N5bnRheC9jcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4NDRiOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2NzLnZpbQpAQCAtMCwwICsxLDE0NSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUMjCisiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgorIiBMYXN0IENoYW5nZToJVHVlLCAwOSBNYXIgMjAwNCAxNDozMjoxMyBDRVQKKyIgRmlsZW5hbWVzOgkqLmNzCisiICRJZCQKKyIKKyIgUkVGRVJFTkNFUzoKKyIgWzFdIEVDTUEgVEMzOTogQyMgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiAoV0QxM09jdDAxLmRvYykKKworaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK2xldCBzOmNzX2Nwb19zYXZlID0gJmNwbworc2V0IGNwbyZ2aW0KKworCisiIHR5cGUKK3N5biBrZXl3b3JkIGNzVHlwZQkJCWJvb2wgYnl0ZSBjaGFyIGRlY2ltYWwgZG91YmxlIGZsb2F0IGludCBsb25nIG9iamVjdCBzYnl0ZSBzaG9ydCBzdHJpbmcgdWludCB1bG9uZyB1c2hvcnQgdm9pZAorIiBzdG9yYWdlCitzeW4ga2V5d29yZCBjc1N0b3JhZ2UJCQljbGFzcyBkZWxlZ2F0ZSBlbnVtIGludGVyZmFjZSBuYW1lc3BhY2Ugc3RydWN0CisiIHJlcGVhdGUgLyBjb25kaXRpb24gLyBsYWJlbAorc3luIGtleXdvcmQgY3NSZXBlYXQJCQlicmVhayBjb250aW51ZSBkbyBmb3IgZm9yZWFjaCBnb3RvIHJldHVybiB3aGlsZQorc3luIGtleXdvcmQgY3NDb25kaXRpb25hbAkJZWxzZSBpZiBzd2l0Y2gKK3N5biBrZXl3b3JkIGNzTGFiZWwJCQljYXNlIGRlZmF1bHQKKyIgdGhlcmUncyBubyA6OiBvcGVyYXRvciBpbiBDIworc3luIG1hdGNoIGNzT3BlcmF0b3JFcnJvcgkJZGlzcGxheSArOjorCisiIHVzZXIgbGFiZWxzIChzZWUgWzFdIDguNiBTdGF0ZW1lbnRzKQorc3luIG1hdGNoICAgY3NMYWJlbAkJCWRpc3BsYXkgK15ccypcSVxpKlxzKjpcKFteOl1cKVxAPSsKKyIgbW9kaWZpZXIKK3N5biBrZXl3b3JkIGNzTW9kaWZpZXIJCQlhYnN0cmFjdCBjb25zdCBleHRlcm4gaW50ZXJuYWwgb3ZlcnJpZGUgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJlYWRvbmx5IHNlYWxlZCBzdGF0aWMgdmlydHVhbCB2b2xhdGlsZQorIiBjb25zdGFudAorc3luIGtleXdvcmQgY3NDb25zdGFudAkJCWZhbHNlIG51bGwgdHJ1ZQorIiBleGNlcHRpb24KK3N5biBrZXl3b3JkIGNzRXhjZXB0aW9uCQkJdHJ5IGNhdGNoIGZpbmFsbHkgdGhyb3cKKworIiBUT0RPOgorc3luIGtleXdvcmQgY3NVbnNwZWNpZmllZFN0YXRlbWVudAlhcyBiYXNlIGNoZWNrZWQgZXZlbnQgZml4ZWQgaW4gaXMgbG9jayBuZXcgb3BlcmF0b3Igb3V0IHBhcmFtcyByZWYgc2l6ZW9mIHN0YWNrYWxsb2MgdGhpcyB0eXBlb2YgdW5jaGVja2VkIHVuc2FmZSB1c2luZworIiBUT0RPOgorc3luIGtleXdvcmQgY3NVbnN1cHBvcnRlZFN0YXRlbWVudAlnZXQgc2V0IGFkZCByZW1vdmUgdmFsdWUKKyIgVE9ETzoKK3N5biBrZXl3b3JkIGNzVW5zcGVjaWZpZWRLZXl3b3JkCWV4cGxpY2l0IGltcGxpY2l0CisKKworCisiIENvbW1lbnRzCisiCisiIFBST1ZJREVTOiBAY3NDb21tZW50SG9vaworIgorIiBUT0RPOiBpbmNsdWRlIHN0cmluZ3MgPworIgorc3luIGtleXdvcmQgY3NUb2RvCQljb250YWluZWQgVE9ETyBGSVhNRSBYWFggTk9URQorc3luIHJlZ2lvbiAgY3NDb21tZW50CQlzdGFydD0iL1wqIiAgZW5kPSJcKi8iIGNvbnRhaW5zPUBjc0NvbW1lbnRIb29rLGNzVG9kbworc3luIG1hdGNoICAgY3NDb21tZW50CQkiLy8uKiQiIGNvbnRhaW5zPUBjc0NvbW1lbnRIb29rLGNzVG9kbworCisiIHhtbCBtYXJrdXAgaW5zaWRlICcvLy8nIGNvbW1lbnRzCitzeW4gY2x1c3RlciB4bWxSZWdpb25Ib29rCWFkZD1jc1htbENvbW1lbnRMZWFkZXIKK3N5biBjbHVzdGVyIHhtbENkYXRhSG9vawlhZGQ9Y3NYbWxDb21tZW50TGVhZGVyCitzeW4gY2x1c3RlciB4bWxTdGFydFRhZ0hvb2sJYWRkPWNzWG1sQ29tbWVudExlYWRlcgorc3luIGtleXdvcmQgY3NYbWxUYWcJCWNvbnRhaW5lZCBMaWJyYXJpZXMgUGFja2FnZXMgVHlwZXMgRXhjbHVkZWQgRXhjbHVkZWRUeXBlTmFtZSBFeGNsdWRlZExpYnJhcnlOYW1lCitzeW4ga2V5d29yZCBjc1htbFRhZwkJY29udGFpbmVkIEV4Y2x1ZGVkQnVja2V0TmFtZSBUeXBlRXhjbHVkZWQgVHlwZSBUeXBlS2luZCBUeXBlU2lnbmF0dXJlIEFzc2VtYmx5SW5mbworc3luIGtleXdvcmQgY3NYbWxUYWcJCWNvbnRhaW5lZCBBc3NlbWJseU5hbWUgQXNzZW1ibHlQdWJsaWNLZXkgQXNzZW1ibHlWZXJzaW9uIEFzc2VtYmx5Q3VsdHVyZSBCYXNlCitzeW4ga2V5d29yZCBjc1htbFRhZwkJY29udGFpbmVkIEJhc2VUeXBlTmFtZSBJbnRlcmZhY2VzIEludGVyZmFjZSBJbnRlcmZhY2VOYW1lIEF0dHJpYnV0ZXMgQXR0cmlidXRlCitzeW4ga2V5d29yZCBjc1htbFRhZwkJY29udGFpbmVkIEF0dHJpYnV0ZU5hbWUgTWVtYmVycyBNZW1iZXIgTWVtYmVyU2lnbmF0dXJlIE1lbWJlclR5cGUgTWVtYmVyVmFsdWUKK3N5biBrZXl3b3JkIGNzWG1sVGFnCQljb250YWluZWQgUmV0dXJuVmFsdWUgUmV0dXJuVHlwZSBQYXJhbWV0ZXJzIFBhcmFtZXRlciBNZW1iZXJPZlBhY2thZ2UKK3N5biBrZXl3b3JkIGNzWG1sVGFnCQljb250YWluZWQgVGhyZWFkaW5nU2FmZXR5U3RhdGVtZW50IERvY3MgZGV2ZG9jIGV4YW1wbGUgb3ZlcmxvYWQgcmVtYXJrcyByZXR1cm5zIHN1bW1hcnkKK3N5biBrZXl3b3JkIGNzWG1sVGFnCQljb250YWluZWQgdGhyZWFkc2FmZSB2YWx1ZSBpbnRlcm5hbG9ubHkgbm9kb2MgZXhjZXB0aW9uIHBhcmFtIHBlcm1pc3Npb24gcGxhdG5vdGUKK3N5biBrZXl3b3JkIGNzWG1sVGFnCQljb250YWluZWQgc2VlYWxzbyBiIGMgaSBwcmUgc3ViIHN1cCBibG9jayBjb2RlIG5vdGUgcGFyYW1yZWYgc2VlIHN1YnNjcmlwdCBzdXBlcnNjcmlwdAorc3luIGtleXdvcmQgY3NYbWxUYWcJCWNvbnRhaW5lZCBsaXN0IGxpc3RoZWFkZXIgaXRlbSB0ZXJtIGRlc2NyaXB0aW9uIGFsdGNvbXBsaWFudCBhbHRtZW1iZXIKKworc3luIGNsdXN0ZXIgeG1sVGFnSG9vayBhZGQ9Y3NYbWxUYWcKKworc3luIG1hdGNoICAgY3NYbWxDb21tZW50TGVhZGVyCStcL1wvXC8rICAgIGNvbnRhaW5lZAorc3luIG1hdGNoICAgY3NYbWxDb21tZW50CStcL1wvXC8uKiQrIGNvbnRhaW5zPWNzWG1sQ29tbWVudExlYWRlcixAY3NYbWwKK3N5bnRheCBpbmNsdWRlIEBjc1htbCA8c2ZpbGU+OnA6aC94bWwudmltCitoaSBkZWYgbGluayB4bWxSZWdpb24gQ29tbWVudAorCisKKyIgWzFdIDkuNSBQcmUtcHJvY2Vzc2luZyBkaXJlY3RpdmVzCitzeW4gcmVnaW9uCWNzUHJlQ29uZGl0CisgICAgXCBzdGFydD0iXlxzKiNccypcKGRlZmluZVx8dW5kZWZcfGlmXHxlbGlmXHxlbHNlXHxlbmRpZlx8bGluZVx8ZXJyb3JcfHdhcm5pbmdcfHJlZ2lvblx8ZW5kcmVnaW9uXCkiCisgICAgXCBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9Y3NDb21tZW50IGtlZXBlbmQKKworCisKKyIgU3RyaW5ncyBhbmQgY29uc3RhbnRzCitzeW4gbWF0Y2ggICBjc1NwZWNpYWxFcnJvcgljb250YWluZWQgIlxcLiIKK3N5biBtYXRjaCAgIGNzU3BlY2lhbENoYXJFcnJvcgljb250YWluZWQgIlteJ10iCisiIFsxXSA5LjQuNC40IENoYXJhY3RlciBsaXRlcmFscworc3luIG1hdGNoICAgY3NTcGVjaWFsQ2hhcgljb250YWluZWQgK1xcWyJcXCcwYWJmbnJ0dnhdKworIiB1bmljb2RlIGNoYXJhY3RlcnMKK3N5biBtYXRjaCAgIGNzVW5pY29kZU51bWJlcgkrXFxcKHVceFx7NH1cfFVceFx7OH1cKSsgY29udGFpbmVkIGNvbnRhaW5zPWNzVW5pY29kZVNwZWNpZmllcgorc3luIG1hdGNoICAgY3NVbmljb2RlU3BlY2lmaWVyCStcXFt1VV0rIGNvbnRhaW5lZAorc3luIHJlZ2lvbiAgY3NWZXJiYXRpbVN0cmluZwlzdGFydD0rQCIrIGVuZD0rIisgZW5kPSskKyBjb250YWlucz1jc1ZlcmJhdGltU3BlYworc3luIG1hdGNoICAgY3NWZXJiYXRpbVNwZWMJK0AiK2hlPXMrMSBjb250YWluZWQKK3N5biByZWdpb24gIGNzU3RyaW5nCQlzdGFydD0rIisgIGVuZD0rIisgZW5kPSskKyBjb250YWlucz1jc1NwZWNpYWxDaGFyLGNzU3BlY2lhbEVycm9yLGNzVW5pY29kZU51bWJlcgorc3luIG1hdGNoICAgY3NDaGFyYWN0ZXIJCSInW14nXSonIiBjb250YWlucz1jc1NwZWNpYWxDaGFyLGNzU3BlY2lhbENoYXJFcnJvcgorc3luIG1hdGNoICAgY3NDaGFyYWN0ZXIJCSInXFwnJyIgY29udGFpbnM9Y3NTcGVjaWFsQ2hhcgorc3luIG1hdGNoICAgY3NDaGFyYWN0ZXIJCSInW15cXF0nIgorc3luIG1hdGNoICAgY3NOdW1iZXIJCSJcPFwoMFswLTddKlx8MFt4WF1ceFwrXHxcZFwrXClbbExdXD1cPiIKK3N5biBtYXRjaCAgIGNzTnVtYmVyCQkiXChcPFxkXCtcLlxkKlx8XC5cZFwrXClcKFtlRV1bLStdXD1cZFwrXClcPVtmRmREXVw9Igorc3luIG1hdGNoICAgY3NOdW1iZXIJCSJcPFxkXCtbZUVdWy0rXVw9XGRcK1tmRmREXVw9XD4iCitzeW4gbWF0Y2ggICBjc051bWJlcgkJIlw8XGRcK1woW2VFXVstK11cPVxkXCtcKVw9W2ZGZERdXD4iCisKKyIgVGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgoraGkgZGVmIGxpbmsgY3NUeXBlCQkJVHlwZQoraGkgZGVmIGxpbmsgY3NTdG9yYWdlCQkJU3RvcmFnZUNsYXNzCitoaSBkZWYgbGluayBjc1JlcGVhdAkJCVJlcGVhdAoraGkgZGVmIGxpbmsgY3NDb25kaXRpb25hbAkJQ29uZGl0aW9uYWwKK2hpIGRlZiBsaW5rIGNzTGFiZWwJCQlMYWJlbAoraGkgZGVmIGxpbmsgY3NNb2RpZmllcgkJCVN0b3JhZ2VDbGFzcworaGkgZGVmIGxpbmsgY3NDb25zdGFudAkJCUNvbnN0YW50CitoaSBkZWYgbGluayBjc0V4Y2VwdGlvbgkJCUV4Y2VwdGlvbgoraGkgZGVmIGxpbmsgY3NVbnNwZWNpZmllZFN0YXRlbWVudAlTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIGNzVW5zdXBwb3J0ZWRTdGF0ZW1lbnQJU3RhdGVtZW50CitoaSBkZWYgbGluayBjc1Vuc3BlY2lmaWVkS2V5d29yZAlLZXl3b3JkCitoaSBkZWYgbGluayBjc09wZXJhdG9yRXJyb3IJCUVycm9yCisKK2hpIGRlZiBsaW5rIGNzVG9kbwkJCVRvZG8KK2hpIGRlZiBsaW5rIGNzQ29tbWVudAkJCUNvbW1lbnQKKworaGkgZGVmIGxpbmsgY3NTcGVjaWFsRXJyb3IJCUVycm9yCitoaSBkZWYgbGluayBjc1NwZWNpYWxDaGFyRXJyb3IJCUVycm9yCitoaSBkZWYgbGluayBjc1N0cmluZwkJCVN0cmluZworaGkgZGVmIGxpbmsgY3NWZXJiYXRpbVN0cmluZwkJU3RyaW5nCitoaSBkZWYgbGluayBjc1ZlcmJhdGltU3BlYwkJU3BlY2lhbENoYXIKK2hpIGRlZiBsaW5rIGNzUHJlQ29uZGl0CQkJUHJlQ29uZGl0CitoaSBkZWYgbGluayBjc0NoYXJhY3RlcgkJCUNoYXJhY3RlcgoraGkgZGVmIGxpbmsgY3NTcGVjaWFsQ2hhcgkJU3BlY2lhbENoYXIKK2hpIGRlZiBsaW5rIGNzTnVtYmVyCQkJTnVtYmVyCitoaSBkZWYgbGluayBjc1VuaWNvZGVOdW1iZXIJCVNwZWNpYWxDaGFyCitoaSBkZWYgbGluayBjc1VuaWNvZGVTcGVjaWZpZXIJCVNwZWNpYWxDaGFyCisKKyIgeG1sIG1hcmt1cAoraGkgZGVmIGxpbmsgY3NYbWxDb21tZW50TGVhZGVyCQlDb21tZW50CitoaSBkZWYgbGluayBjc1htbENvbW1lbnQJCUNvbW1lbnQKK2hpIGRlZiBsaW5rIGNzWG1sVGFnCQkJU3RhdGVtZW50CisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImNzIgorCitsZXQgJmNwbyA9IHM6Y3NfY3BvX3NhdmUKK3VubGV0IHM6Y3NfY3BvX3NhdmUKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2NzYy52aW0gYi9ydW50aW1lL3N5bnRheC9jc2MudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjczMzQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jc2MudmltCkBAIC0wLDAgKzEsMTk5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogRXNzYmFzZSBzY3JpcHQKKyIgTWFpbnRhaW5lcjoJUmF1bCBTZWd1cmEgQWNldmVkbyA8cmF1bHNlZ3VyYWFjZXZlZEBuZXRzY2FwZS5uZXQ+CisiIExhc3QgY2hhbmdlOgkyMDAxIFNlcCAyNQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorCXN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisJZmluaXNoCitlbmRpZgorCisiIGZvbGRzOiBmaXgvZW5kZml4IGFuZCBjb21tZW50cworc3kJcmVnaW9uCUVzc0ZvbGQgc3RhcnQ9Ilw8Rml4IiBlbmQ9IkVuZEZpeCIgdHJhbnNwYXJlbnQgZm9sZAorCitzeQlrZXl3b3JkCWNzY1RvZG8gY29udGFpbmVkIFRPRE8gRklYTUUgWFhYCisKKyIgY3NjQ29tbWVudEdyb3VwIGFsbG93cyBhZGRpbmcgbWF0Y2hlcyBmb3Igc3BlY2lhbCB0aGluZ3MgaW4gY29tbWVudHMKK3N5CWNsdXN0ZXIgY3NjQ29tbWVudEdyb3VwIGNvbnRhaW5zPWNzY1RvZG8KKworIiBTdHJpbmdzIGluIHF1b3Rlcworc3kJbWF0Y2gJY3NjRXJyb3IJJyInCitzeQltYXRjaAljc2NTdHJpbmcJJyJbXiJdKiInCisKKyJ3aGVuIHdhbnRlZCwgaGlnaGxpZ2h0IHRyYWlsaW5nIHdoaXRlIHNwYWNlCitpZiBleGlzdHMoImNzY19zcGFjZV9lcnJvcnMiKQorCWlmICFleGlzdHMoImNzY19ub190cmFpbF9zcGFjZV9lcnJvciIpCisJCXN5CW1hdGNoCWNzY1NwYWNlRQkiXHNcKyQiCisJZW5kaWYKKwlpZiAhZXhpc3RzKCJjc2Nfbm9fdGFiX3NwYWNlX2Vycm9yIikKKwkJc3kJbWF0Y2gJY3NjU3BhY2VFCSIgXCtcdCJtZT1lLTEKKwllbmRpZgorZW5kaWYKKworImNhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMgYW5kIGJyYWNrZXRzCitzeQljbHVzdGVyCWNzY1BhcmVuR3JvdXAJY29udGFpbnM9Y3NjUGFyZW5FLEBjc2NDb21tZW50R3JvdXAsY3NjVXNlckNvbnQsY3NjQml0RmllbGQsY3NjRm9ybWF0LGNzY051bWJlcixjc2NGbG9hdCxjc2NPY3RhbCxjc2NOdW1iZXJzLGNzY0lmRXJyb3IsY3NjQ29tVyxjc2NDb20sY3NjRm9ybXVsYSxjc2NCUE1hY3JvCitzeQlyZWdpb24JY3NjUGFyZW4JdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULEBjc2NQYXJlbkdyb3VwCitzeQltYXRjaAljc2NQYXJlbkUJIikiCisKKyJpbnRlZ2VyIG51bWJlciwgb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdpdGhvdXQgYSBkb3QgYW5kIHdpdGggImYiLgorc3kJY2FzZQlpZ25vcmUKK3N5CW1hdGNoCWNzY051bWJlcnMJdHJhbnNwYXJlbnQgIlw8XGRcfFwuXGQiIGNvbnRhaW5zPWNzY051bWJlcixjc2NGbG9hdCxjc2NPY3RhbAorc3kJbWF0Y2gJY3NjTnVtYmVyCWNvbnRhaW5lZCAiXGRcK1wodVw9bFx7MCwyfVx8bGxcPXVcKVw+IgorImhleCBudW1iZXIKK3N5CW1hdGNoCWNzY051bWJlcgljb250YWluZWQgIjB4XHhcK1wodVw9bFx7MCwyfVx8bGxcPXVcKVw+IgorIiBGbGFnIHRoZSBmaXJzdCB6ZXJvIG9mIGFuIG9jdGFsIG51bWJlciBhcyBzb21ldGhpbmcgc3BlY2lhbAorc3kJbWF0Y2gJY3NjT2N0YWwJY29udGFpbmVkICIwXG9cK1wodVw9bFx7MCwyfVx8bGxcPXVcKVw+Igorc3kJbWF0Y2gJY3NjRmxvYXQJY29udGFpbmVkICJcZFwrZiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90LCBvcHRpb25hbCBleHBvbmVudAorc3kJbWF0Y2gJY3NjRmxvYXQJY29udGFpbmVkICJcZFwrXC5cZCpcKGVbLStdXD1cZFwrXClcPVtmbF1cPSIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeQltYXRjaAljc2NGbG9hdAljb250YWluZWQgIlwuXGRcK1woZVstK11cPVxkXCtcKVw9W2ZsXVw9XD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRob3V0IGRvdCwgd2l0aCBleHBvbmVudAorc3kJbWF0Y2gJY3NjRmxvYXQJY29udGFpbmVkICJcZFwrZVstK11cPVxkXCtbZmxdXD1cPiIKKworc3kJcmVnaW9uCWNzY0NvbW1lbnQJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPUBjc2NDb21tZW50R3JvdXAsY3NjU3BhY2VFIGZvbGQKK3N5CW1hdGNoCWNzY0NvbW1lbnRFCSJcKi8iCisKK3N5CWtleXdvcmQJY3NjSWZFcnJvcglJRiBFTFNFIEVORElGIEVMU0VJRgorc3kJa2V5d29yZAljc2NDb25kaXRpb24JY29udGFpbmVkIElGIEVMU0UgRU5ESUYgRUxTRUlGCitzeQlrZXl3b3JkCWNzY0Z1bmN0aW9uCWNvbnRhaW5lZCBWQVJQRVIgVkFSIFVEQSBUUlVOQ0FURSBTWUQgU1VNUkFOR0UgU1VNCitzeQlrZXl3b3JkCWNzY0Z1bmN0aW9uCWNvbnRhaW5lZCBTVERERVZSQU5HRSBTVERERVYgU1BBUkVOVFZBTCBTTE4gU0lCTElOR1MgU0hJRlQKK3N5CWtleXdvcmQJY3NjRnVuY3Rpb24JY29udGFpbmVkIFNBTkNFU1RWQUwgUlNJQkxJTkdTIFJPVU5EIFJFTUFJTkRFUiBSRUxBVElWRSBQVEQKK3N5CWtleXdvcmQJY3NjRnVuY3Rpb24JY29udGFpbmVkIFBSSU9SIFBPV0VSIFBBUkVOVFZBTCBOUFYgTkVYVCBNT0QgTUlOUkFOR0UgTUlOCitzeQlrZXl3b3JkCWNzY0Z1bmN0aW9uCWNvbnRhaW5lZCBNRFNISUZUIE1EUEFSRU5UVkFMIE1EQU5DRVNUVkFMIE1BWFJBTkdFIE1BWCBNQVRDSAorc3kJa2V5d29yZAljc2NGdW5jdGlvbgljb250YWluZWQgTFNJQkxJTkdTIExFVk1CUlMgTEVWCitzeQlrZXl3b3JkCWNzY0Z1bmN0aW9uCWNvbnRhaW5lZCBJU1VEQSBJU1NJQkxJTkcgSVNTQU1FTEVWIElTU0FNRUdFTiBJU1BBUkVOVCBJU01CUgorc3kJa2V5d29yZAljc2NGdW5jdGlvbgljb250YWluZWQgSVNMRVYgSVNJU0lCTElORyBJU0lQQVJFTlQgSVNJREVTQyBJU0lDSElMRCBJU0lCTElOR1MKK3N5CWtleXdvcmQJY3NjRnVuY3Rpb24JY29udGFpbmVkIElTSUFOQ0VTVCBJU0dFTiBJU0RFU0MgSVNDSElMRCBJU0FOQ0VTVCBJU0FDQ1RZUEUKK3N5CWtleXdvcmQJY3NjRnVuY3Rpb24JY29udGFpbmVkIElSU0lCTElOR1MgSVJSIElOVEVSRVNUIElOVCBJTFNJQkxJTkdTIElERVNDRU5EQU5UUworc3kJa2V5d29yZAljc2NGdW5jdGlvbgljb250YWluZWQgSUNISUxEUkVOIElBTkNFU1RPUlMgSUFMTEFOQ0VTVE9SUworc3kJa2V5d29yZAljc2NGdW5jdGlvbgljb250YWluZWQgR1JPV1RIIEdFTk1CUlMgR0VOIEZBQ1RPUklBTCBESVNDT1VOVCBERVNDRU5EQU5UUworc3kJa2V5d29yZAljc2NGdW5jdGlvbgljb250YWluZWQgREVDTElORSBDSElMRFJFTiBDVVJSTUJSUkFOR0UgQ1VSTEVWIENVUkdFTgorc3kJa2V5d29yZAljc2NGdW5jdGlvbgljb250YWluZWQgQ09NUE9VTkRHUk9XVEggQ09NUE9VTkQgQVZHUkFOR0UgQVZHIEFOQ0VTVFZBTAorc3kJa2V5d29yZAljc2NGdW5jdGlvbgljb250YWluZWQgQU5DRVNUT1JTIEFMTEFOQ0VTVE9SUyBBQ0NVTSBBQlMKK3N5CWtleXdvcmQJY3NjRnVuY3Rpb24JY29udGFpbmVkIEBWQVJQRVIgQFZBUiBAVURBIEBUUlVOQ0FURSBAU1lEIEBTVU1SQU5HRSBAU1VNCitzeQlrZXl3b3JkCWNzY0Z1bmN0aW9uCWNvbnRhaW5lZCBAU1REREVWUkFOR0UgQFNURERFViBAU1BBUkVOVFZBTCBAU0xOIEBTSUJMSU5HUyBAU0hJRlQKK3N5CWtleXdvcmQJY3NjRnVuY3Rpb24JY29udGFpbmVkIEBTQU5DRVNUVkFMIEBSU0lCTElOR1MgQFJPVU5EIEBSRU1BSU5ERVIgQFJFTEFUSVZFIEBQVEQKK3N5CWtleXdvcmQJY3NjRnVuY3Rpb24JY29udGFpbmVkIEBQUklPUiBAUE9XRVIgQFBBUkVOVFZBTCBATlBWIEBORVhUIEBNT0QgQE1JTlJBTkdFIEBNSU4KK3N5CWtleXdvcmQJY3NjRnVuY3Rpb24JY29udGFpbmVkIEBNRFNISUZUIEBNRFBBUkVOVFZBTCBATURBTkNFU1RWQUwgQE1BWFJBTkdFIEBNQVggQE1BVENICitzeQlrZXl3b3JkCWNzY0Z1bmN0aW9uCWNvbnRhaW5lZCBATFNJQkxJTkdTIEBMRVZNQlJTIEBMRVYKK3N5CWtleXdvcmQJY3NjRnVuY3Rpb24JY29udGFpbmVkIEBJU1VEQSBASVNTSUJMSU5HIEBJU1NBTUVMRVYgQElTU0FNRUdFTiBASVNQQVJFTlQgQElTTUJSCitzeQlrZXl3b3JkCWNzY0Z1bmN0aW9uCWNvbnRhaW5lZCBASVNMRVYgQElTSVNJQkxJTkcgQElTSVBBUkVOVCBASVNJREVTQyBASVNJQ0hJTEQgQElTSUJMSU5HUworc3kJa2V5d29yZAljc2NGdW5jdGlvbgljb250YWluZWQgQElTSUFOQ0VTVCBASVNHRU4gQElTREVTQyBASVNDSElMRCBASVNBTkNFU1QgQElTQUNDVFlQRQorc3kJa2V5d29yZAljc2NGdW5jdGlvbgljb250YWluZWQgQElSU0lCTElOR1MgQElSUiBASU5URVJFU1QgQElOVCBASUxTSUJMSU5HUyBASURFU0NFTkRBTlRTCitzeQlrZXl3b3JkCWNzY0Z1bmN0aW9uCWNvbnRhaW5lZCBASUNISUxEUkVOIEBJQU5DRVNUT1JTIEBJQUxMQU5DRVNUT1JTCitzeQlrZXl3b3JkCWNzY0Z1bmN0aW9uCWNvbnRhaW5lZCBAR1JPV1RIIEBHRU5NQlJTIEBHRU4gQEZBQ1RPUklBTCBARElTQ09VTlQgQERFU0NFTkRBTlRTCitzeQlrZXl3b3JkCWNzY0Z1bmN0aW9uCWNvbnRhaW5lZCBAREVDTElORSBAQ0hJTERSRU4gQENVUlJNQlJSQU5HRSBAQ1VSTEVWIEBDVVJHRU4KK3N5CWtleXdvcmQJY3NjRnVuY3Rpb24JY29udGFpbmVkIEBDT01QT1VOREdST1dUSCBAQ09NUE9VTkQgQEFWR1JBTkdFIEBBVkcgQEFOQ0VTVFZBTAorc3kJa2V5d29yZAljc2NGdW5jdGlvbgljb250YWluZWQgQEFOQ0VTVE9SUyBAQUxMQU5DRVNUT1JTIEBBQ0NVTSBAQUJTCitzeQltYXRjaAljc2NGdW5jdGlvbgljb250YWluZWQgIkAiCitzeQltYXRjaAljc2NFcnJvcgkiQFxzKlxhKiIgY29udGFpbnM9Y3NjRnVuY3Rpb24KKworc3kJbWF0Y2gJY3NjU3RhdGVtZW50CSImIgorc3kJa2V5d29yZAljc2NTdGF0ZW1lbnQJQUdHIEFSUkFZIFZBUiBDQ09OViBDTEVBUkRBVEEgREFUQUNPUFkKKworc3kJbWF0Y2gJY3NjQ29tRQljb250YWluZWQgIl5ccypDQUxDLioiCitzeQltYXRjaAljc2NDb21FCWNvbnRhaW5lZCAiXlxzKkNMRUFSQkxPQ0suKiIKK3N5CW1hdGNoCWNzY0NvbUUJY29udGFpbmVkICJeXHMqU0VULioiCitzeQltYXRjaAljc2NDb21FCWNvbnRhaW5lZCAiXlxzKkZJWCIKK3N5CW1hdGNoCWNzY0NvbUUJY29udGFpbmVkICJeXHMqRU5ERklYIgorc3kJbWF0Y2gJY3NjQ29tRQljb250YWluZWQgIl5ccypFTkRMT09QIgorc3kJbWF0Y2gJY3NjQ29tRQljb250YWluZWQgIl5ccypMT09QIgorIiBzeQlrZXl3b3JkCWNzY0NvbQlGSVggRU5ERklYIExPT1AgRU5ETE9PUAorCitzeQltYXRjaAljc2NDb21XCSJeXHMqQ0FMQy4qIgorc3kJbWF0Y2gJY3NjQ29tCSJeXHMqQ0FMQ1xzKkFMTCIKK3N5CW1hdGNoCWNzY0NvbQkiXlxzKkNBTENccypBVkVSQUdFIgorc3kJbWF0Y2gJY3NjQ29tCSJeXHMqQ0FMQ1xzKkRJTSIKK3N5CW1hdGNoCWNzY0NvbQkiXlxzKkNBTENccypGSVJTVCIKK3N5CW1hdGNoCWNzY0NvbQkiXlxzKkNBTENccypMQVNUIgorc3kJbWF0Y2gJY3NjQ29tCSJeXHMqQ0FMQ1xzKlRXT1BBU1MiCisKK3N5CW1hdGNoCWNzY0NvbVcJIl5ccypDTEVBUkJMT0NLLioiCitzeQltYXRjaAljc2NDb20JIl5ccypDTEVBUkJMT0NLXHNcK0FMTCIKK3N5CW1hdGNoCWNzY0NvbQkiXlxzKkNMRUFSQkxPQ0tcc1wrVVBQRVIiCitzeQltYXRjaAljc2NDb20JIl5ccypDTEVBUkJMT0NLXHNcK05PTklOUFVUIgorCitzeQltYXRjaAljc2NDb21XCSJeXHMqXDxTRVQuKiIKK3N5CW1hdGNoCWNzY0NvbQkiXlxzKlw8U0VUXHNcK0NvbW1hbmRzIgorc3kJbWF0Y2gJY3NjQ29tCSJeXHMqXDxTRVRcc1wrQUdHTUlTU0ciCitzeQltYXRjaAljc2NDb20JIl5ccypcPFNFVFxzXCtDQUNIRSIKK3N5CW1hdGNoCWNzY0NvbQkiXlxzKlw8U0VUXHNcK0NBTENIQVNIVEJMIgorc3kJbWF0Y2gJY3NjQ29tCSJeXHMqXDxTRVRcc1wrQ0xFQVJVUERBVEVTVEFUVVMiCitzeQltYXRjaAljc2NDb20JIl5ccypcPFNFVFxzXCtGUk1MQk9UVE9NVVAiCitzeQltYXRjaAljc2NDb20JIl5ccypcPFNFVFxzXCtMT0NLQkxPQ0siCitzeQltYXRjaAljc2NDb20JIl5ccypcPFNFVFxzXCtNU0ciCitzeQltYXRjaAljc2NDb20JIl5ccypcPFNFVFxzXCtOT1RJQ0UiCitzeQltYXRjaAljc2NDb20JIl5ccypcPFNFVFxzXCtVUERBVEVDQUxDIgorc3kJbWF0Y2gJY3NjQ29tCSJeXHMqXDxTRVRcc1wrVVBUT0xPQ0FMIgorCitzeQlrZXl3b3JkCWNzY0JQTWFjcm8JY29udGFpbmVkICFMb29wT25BbGwgIUxvb3BPbkxldmVsICFMb29wT25TZWxlY3RlZAorc3kJa2V5d29yZAljc2NCUE1hY3JvCWNvbnRhaW5lZCAhQ3VycmVudE1lbWJlciAhTG9vcE9uRGltZW5zaW9ucyAhQ3VycmVudERpbWVuc2lvbgorc3kJa2V5d29yZAljc2NCUE1hY3JvCWNvbnRhaW5lZCAhQ3VycmVudE90aGVyTG9vcERpbWVuc2lvbiAhTG9vcE9uT3RoZXJMb29wRGltZW5zaW9ucworc3kJa2V5d29yZAljc2NCUE1hY3JvCWNvbnRhaW5lZCAhRW5kTG9vcCAhQWxsTWVtYmVycyAhU2VsZWN0ZWRNZW1iZXJzICFJZiAhRWxzZSAhRW5kSWYKK3N5CWtleXdvcmQJY3NjQlBNYWNybwljb250YWluZWQgTG9vcE9uQWxsIExvb3BPbkxldmVsIExvb3BPblNlbGVjdGVkCitzeQlrZXl3b3JkCWNzY0JQTWFjcm8JY29udGFpbmVkIEN1cnJlbnRNZW1iZXIgTG9vcE9uRGltZW5zaW9ucyBDdXJyZW50RGltZW5zaW9uCitzeQlrZXl3b3JkCWNzY0JQTWFjcm8JY29udGFpbmVkIEN1cnJlbnRPdGhlckxvb3BEaW1lbnNpb24gTG9vcE9uT3RoZXJMb29wRGltZW5zaW9ucworc3kJa2V5d29yZAljc2NCUE1hY3JvCWNvbnRhaW5lZCBFbmRMb29wIEFsbE1lbWJlcnMgU2VsZWN0ZWRNZW1iZXJzIElmIEVsc2UgRW5kSWYKK3N5CW1hdGNoCWNzY0JQTWFjcm8JY29udGFpbmVkCSIhIgorc3kJbWF0Y2gJY3NjQlBXCSIhXHMqXGEqIgljb250YWlucz1jc2NCUG1hY3JvCisKKyIgd2hlbiB3YW50ZWQsIGhpZ2hsaWdodGluZyBsaHMgbWVtYmVycyBvciBlcnJvcyBpbiBhc2lnbm1lbnRzIChtYXkgbGFnIHRoZSBlZGl0aW5nKQoraWYgdmVyc2lvbiA+PSA2MDAgJiYgZXhpc3RzKCJjc2NfYXNpZ25tZW50IikKKwlzeQltYXRjaAljc2NFcUVycm9yCSdcKCJbXiJdKiJccypcfFteXVtcdCAhJSgpKissLS0vOjs8PT57fX5dXCtccypcfC0+XHMqXCkqPVwoW149XVxAPVx8JFwpJworCXN5CXJlZ2lvbgljc2NGb3JtdWxhCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9Y3NjVmFyTmFtZSBzdGFydD0nXCgiW14iXSoiXHxbXl1bXHQgISUoKSorLC0tLzo7PD0+e31+XVwrXClccyo9XChbXj1dXEA9XHxcblwpJyBza2lwPSciW14iXSoiJyBlbmQ9JzsnIGNvbnRhaW5zPUFMTEJVVCxjc2NGb3JtdWxhLGNzY0Zvcm11bGFJbixjc2NCUE1hY3JvLGNzY0NvbmRpdGlvbgorCXN5CXJlZ2lvbgljc2NGb3JtdWxhSW4JbWF0Y2hncm91cD1jc2NWYXJOYW1lIHRyYW5zcGFyZW50IHN0YXJ0PSdcKCJbXiJdKiJcfFteXVtcdCAhJSgpKissLS0vOjs8PT57fX5dXCtcKVwoLT5cKCJbXiJdKiJcfFteXVtcdCAhJSgpKissLS0vOjs8PT57fX5dXCtcKVwpKlxzKj1cKFtePV1cQD1cfCRcKScgc2tpcD0nIlteIl0qIicgZW5kPSc7JyBjb250YWlucz1BTExCVVQsY3NjRm9ybXVsYSxjc2NGb3JtdWxhSW4sY3NjQlBNYWNybyxjc2NDb25kaXRpb24gY29udGFpbmVkCisJc3kJbWF0Y2gJY3NjRXEJIj09IgorZW5kaWYKKworaWYgIWV4aXN0cygiY3NjX21pbmxpbmVzIikKKwlsZXQgY3NjX21pbmxpbmVzID0gNTAJIiBtb3N0bHkgZm9yICgpIGNvbnN0cnVjdHMKK2VuZGlmCitleGVjICJzeSBzeW5jIGNjb21tZW50IGNzY0NvbW1lbnQgbWlubGluZXM9IiAuIGNzY19taW5saW5lcworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jc2Nfc3ludGF4X2luaXRzIikKKwlpZiB2ZXJzaW9uIDwgNTA4CisJCWxldCBkaWRfY3NjX3N5bnRheF9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWVuZGlmCisKKwloaSBjc2NWYXJOYW1lIHRlcm09Ym9sZCBjdGVybWZnPTkgZ3VpPWJvbGQgZ3VpZmc9Ymx1ZQorCisJSGlMaW5rCWNzY051bWJlcglOdW1iZXIKKwlIaUxpbmsJY3NjT2N0YWwJTnVtYmVyCisJSGlMaW5rCWNzY0Zsb2F0CUZsb2F0CisJSGlMaW5rCWNzY1BhcmVuRQlFcnJvcgorCUhpTGluawljc2NDb21tZW50RQlFcnJvcgorCUhpTGluawljc2NTcGFjZUUJRXJyb3IKKwlIaUxpbmsJY3NjRXJyb3IJRXJyb3IKKwlIaUxpbmsJY3NjU3RyaW5nCVN0cmluZworCUhpTGluawljc2NDb21tZW50CUNvbW1lbnQKKwlIaUxpbmsJY3NjVG9kbwkJVG9kbworCUhpTGluawljc2NTdGF0ZW1lbnQJU3RhdGVtZW50CisJSGlMaW5rCWNzY0lmRXJyb3IJRXJyb3IKKwlIaUxpbmsJY3NjRXFFcnJvcglFcnJvcgorCUhpTGluawljc2NGdW5jdGlvbglTdGF0ZW1lbnQKKwlIaUxpbmsJY3NjQ29uZGl0aW9uCVN0YXRlbWVudAorCUhpTGluawljc2NXYXJuCQlXYXJuaW5nTXNnCisKKwlIaUxpbmsJY3NjQ29tRQlFcnJvcgorCUhpTGluawljc2NDb20JU3RhdGVtZW50CisJSGlMaW5rCWNzY0NvbVcJV2FybmluZ01zZworCisJSGlMaW5rCWNzY0JQTWFjcm8JSWRlbnRpZmllcgorCUhpTGluawljc2NCUFcJCVdhcm5pbmdNc2cKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjc2MiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jc2gudmltIGIvcnVudGltZS9zeW50YXgvY3NoLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTNkM2UyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY3NoLnZpbQpAQCAtMCwwICsxLDE2MCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUMtc2hlbGwgKGNzaCkKKyIgTWFpbnRhaW5lcjoJRHIuIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiA8TmRyT2NoaXBTQFBjYW1wYmVsbEFmYW1pbHkuTWJpej4KKyIgVmVyc2lvbjoJOAorIiBMYXN0IENoYW5nZToJU2VwIDAyLCAyMDAzCisiIFVSTDoJaHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI3ZpbWxpbmtzX3N5bnRheAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgY2x1c3RlcnM6CitzeW4gY2x1c3RlciBjc2hRdW90ZUxpc3QJY29udGFpbnM9Y3NoRGJsUXVvdGUsY3NoU25nbFF1b3RlLGNzaEJja1F1b3RlCitzeW4gY2x1c3RlciBjc2hWYXJMaXN0CWNvbnRhaW5zPWNzaEV4dFZhcixjc2hTZWxlY3Rvcixjc2hRdHlXb3JkLGNzaEFyZ3YsY3NoU3Vic3QKKworIiBWYXJpYWJsZXMgd2hpY2ggYWZmZWN0IHRoZSBjc2ggaXRzZWxmCitzeW4gbWF0Y2ggY3NoU2V0VmFyaWFibGVzCWNvbnRhaW5lZCAiYXJndlx8aGlzdGNoYXJzXHxpZ25vcmVlb2ZcfG5vZ2xvYlx8cHJvbXB0XHxzdGF0dXMiCitzeW4gbWF0Y2ggY3NoU2V0VmFyaWFibGVzCWNvbnRhaW5lZCAiY2RwYXRoXHxoaXN0b3J5XHxtYWlsXHxub25vbWF0Y2hcfHNhdmVoaXN0XHx0aW1lIgorc3luIG1hdGNoIGNzaFNldFZhcmlhYmxlcwljb250YWluZWQgImN3ZFx8aG9tZVx8bm9jbG9iYmVyXHxwYXRoXHxzaGVsbFx8dmVyYm9zZSIKK3N5biBtYXRjaCBjc2hTZXRWYXJpYWJsZXMJY29udGFpbmVkICJlY2hvIgorCitzeW4gY2FzZSBpZ25vcmUKK3N5biBrZXl3b3JkIGNzaFRvZG8JY29udGFpbmVkIHRvZG8KK3N5biBjYXNlIG1hdGNoCisKKyIgVmFyaWFibGUgTmFtZSBFeHBhbnNpb24gTW9kaWZpZXJzCitzeW4gbWF0Y2ggY3NoTW9kaWZpZXIJY29udGFpbmVkICI6XChoXHx0XHxyXHxxXHx4XHxnaFx8Z3RcfGdyXCkiCisKKyIgU3RyaW5ncyBhbmQgQ29tbWVudHMKK3N5biBtYXRjaCAgIGNzaE5vRW5kbGluZURRCWNvbnRhaW5lZCAiW15cIl1cKFxcXFxcKSokIgorc3luIG1hdGNoICAgY3NoTm9FbmRsaW5lU1EJY29udGFpbmVkICJbXlwnXVwoXFxcXFwpKiQiCitzeW4gbWF0Y2ggICBjc2hOb0VuZGxpbmVCUQljb250YWluZWQgIlteXGBdXChcXFxcXCkqJCIKKworc3luIHJlZ2lvbiAgY3NoRGJsUXVvdGUJc3RhcnQ9K1teXFxdIitsYz0xIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKwljb250YWlucz1jc2hTcGVjaWFsLGNzaFNoZWxsVmFyaWFibGVzLGNzaEV4dFZhcixjc2hTZWxlY3Rvcixjc2hRdHlXb3JkLGNzaEFyZ3YsY3NoU3Vic3QsY3NoTm9FbmRsaW5lRFEsY3NoQmNrUXVvdGUKK3N5biByZWdpb24gIGNzaFNuZ2xRdW90ZQlzdGFydD0rW15cXF0nK2xjPTEgc2tpcD0rXFxcXFx8XFwnKyBlbmQ9KycrCWNvbnRhaW5zPWNzaE5vRW5kbGluZVNRCitzeW4gcmVnaW9uICBjc2hCY2tRdW90ZQlzdGFydD0rW15cXF1gK2xjPTEgc2tpcD0rXFxcXFx8XFxgKyBlbmQ9K2ArCWNvbnRhaW5zPWNzaE5vRW5kbGluZUJRCitzeW4gcmVnaW9uICBjc2hEYmxRdW90ZQlzdGFydD0rXiIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKwkJY29udGFpbnM9Y3NoU3BlY2lhbCxjc2hFeHRWYXIsY3NoU2VsZWN0b3IsY3NoUXR5V29yZCxjc2hBcmd2LGNzaFN1YnN0LGNzaE5vRW5kbGluZURRCitzeW4gcmVnaW9uICBjc2hTbmdsUXVvdGUJc3RhcnQ9K14nKyBza2lwPStcXFxcXHxcXCcrIGVuZD0rJysJCWNvbnRhaW5zPWNzaE5vRW5kbGluZVNRCitzeW4gcmVnaW9uICBjc2hCY2tRdW90ZQlzdGFydD0rXmArIHNraXA9K1xcXFxcfFxcYCsgZW5kPStgKwkJY29udGFpbnM9Y3NoTm9FbmRsaW5lQlEKK3N5biBjbHVzdGVyIGNzaENvbW1lbnRHcm91cAljb250YWlucz1jc2hUb2RvLEBTcGVsbAorc3luIG1hdGNoICAgY3NoQ29tbWVudAkiIy4qJCIgY29udGFpbnM9QGNzaENvbW1lbnRHcm91cAorCisiIEEgYnVuY2ggb2YgdXNlZnVsIGNzaCBrZXl3b3Jkcworc3luIGtleXdvcmQgY3NoU3RhdGVtZW50CWFsaWFzCWVuZAloaXN0b3J5CW9uaW50cglzZXRlbnYJdW5hbGlhcworc3luIGtleXdvcmQgY3NoU3RhdGVtZW50CWNkCWV2YWwJa2lsbAlwb3BkCXNoaWZ0CXVuaGFzaAorc3luIGtleXdvcmQgY3NoU3RhdGVtZW50CWNoZGlyCWV4ZWMJbG9naW4JcHVzaGQJc291cmNlCitzeW4ga2V5d29yZCBjc2hTdGF0ZW1lbnQJY29udGludWUJZXhpdAlsb2dvdXQJcmVoYXNoCXRpbWUJdW5zZXRlbnYKK3N5biBrZXl3b3JkIGNzaFN0YXRlbWVudAlkaXJzCWdsb2IJbmljZQlyZXBlYXQJdW1hc2sJd2FpdAorc3luIGtleXdvcmQgY3NoU3RhdGVtZW50CWVjaG8JZ290bwlub2h1cAorCitzeW4ga2V5d29yZCBjc2hDb25kaXRpb25hbAlicmVhawljYXNlCWVsc2UJZW5kc3cJc3dpdGNoCitzeW4ga2V5d29yZCBjc2hDb25kaXRpb25hbAlicmVha3N3CWRlZmF1bHQJZW5kaWYKK3N5biBrZXl3b3JkIGNzaFJlcGVhdAlmb3JlYWNoCisKKyIgU3BlY2lhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK3N5biBrZXl3b3JkIGNzaFNoZWxsVmFyaWFibGVzCUhPTUUJTE9HTkFNRQlQQVRICVRFUk0JVVNFUgorCisiIE1vZGlmaWFibGUgVmFyaWFibGVzIHdpdGhvdXQge30KK3N5biBtYXRjaCBjc2hFeHRWYXIJIlwkW2EtekEtWl9dW2EtekEtWjAtOV9dKlwoOmhcfDp0XHw6clx8OnFcfDp4XHw6Z2hcfDpndFx8OmdyXClcPSIJCWNvbnRhaW5zPWNzaE1vZGlmaWVyCitzeW4gbWF0Y2ggY3NoU2VsZWN0b3IJIlwkW2EtekEtWl9dW2EtekEtWjAtOV9dKlxbW2EtekEtWl9dXCtcXVwoOmhcfDp0XHw6clx8OnFcfDp4XHw6Z2hcfDpndFx8OmdyXClcPSIJY29udGFpbnM9Y3NoTW9kaWZpZXIKK3N5biBtYXRjaCBjc2hRdHlXb3JkCSJcJCNbYS16QS1aX11bYS16QS1aMC05X10qXCg6aFx8OnRcfDpyXHw6cVx8OnhcfDpnaFx8Omd0XHw6Z3JcKVw9IgkJY29udGFpbnM9Y3NoTW9kaWZpZXIKK3N5biBtYXRjaCBjc2hBcmd2CQkiXCRcZFwrXCg6aFx8OnRcfDpyXHw6cVx8OnhcfDpnaFx8Omd0XHw6Z3JcKVw9IgkJCWNvbnRhaW5zPWNzaE1vZGlmaWVyCitzeW4gbWF0Y2ggY3NoQXJndgkJIlwkXCpcKDpoXHw6dFx8OnJcfDpxXHw6eFx8OmdoXHw6Z3RcfDpnclwpXD0iCQkJY29udGFpbnM9Y3NoTW9kaWZpZXIKKworIiBNb2RpZmlhYmxlIFZhcmlhYmxlcyB3aXRoIHt9CitzeW4gbWF0Y2ggY3NoRXh0VmFyCSJcJHtbYS16QS1aX11bYS16QS1aMC05X10qXCg6aFx8OnRcfDpyXHw6cVx8OnhcfDpnaFx8Omd0XHw6Z3JcKVw9fSIJCWNvbnRhaW5zPWNzaE1vZGlmaWVyCitzeW4gbWF0Y2ggY3NoU2VsZWN0b3IJIlwke1thLXpBLVpfXVthLXpBLVowLTlfXSpcW1thLXpBLVpfXVwrXF1cKDpoXHw6dFx8OnJcfDpxXHw6eFx8OmdoXHw6Z3RcfDpnclwpXD19Igljb250YWlucz1jc2hNb2RpZmllcgorc3luIG1hdGNoIGNzaFF0eVdvcmQJIlwkeyNbYS16QS1aX11bYS16QS1aMC05X10qXCg6aFx8OnRcfDpyXHw6cVx8OnhcfDpnaFx8Omd0XHw6Z3JcKVw9fSIJCWNvbnRhaW5zPWNzaE1vZGlmaWVyCitzeW4gbWF0Y2ggY3NoQXJndgkJIlwke1xkXCtcKDpoXHw6dFx8OnJcfDpxXHw6eFx8OmdoXHw6Z3RcfDpnclwpXD19IgkJCWNvbnRhaW5zPWNzaE1vZGlmaWVyCisKKyIgVW5Nb2RpZmlhYmxlIFN1YnN0aXR1dGlvbnMKK3N5biBtYXRjaCBjc2hTdWJzdEVycm9yCSJcJD9bYS16QS1aX11bYS16QS1aMC05X10qOlwoaFx8dFx8clx8cVx8eFx8Z2hcfGd0XHxnclwpIgorc3luIG1hdGNoIGNzaFN1YnN0RXJyb3IJIlwkez9bYS16QS1aX11bYS16QS1aMC05X10qOlwoaFx8dFx8clx8cVx8eFx8Z2hcfGd0XHxnclwpfSIKK3N5biBtYXRjaCBjc2hTdWJzdEVycm9yCSJcJD9bMCQ8XTpcKGhcfHRcfHJcfHFcfHhcfGdoXHxndFx8Z3JcKSIKK3N5biBtYXRjaCBjc2hTdWJzdAkiXCQ/W2EtekEtWl9dW2EtekEtWjAtOV9dKiIKK3N5biBtYXRjaCBjc2hTdWJzdAkiXCR7P1thLXpBLVpfXVthLXpBLVowLTlfXSp9Igorc3luIG1hdGNoIGNzaFN1YnN0CSJcJD9bMCQ8XSIKKworIiBJL08gcmVkaXJlY3Rpb24KK3N5biBtYXRjaCBjc2hSZWRpcgkiPj4mIVx8PiYhXHw+PiZcfD4+IVx8PiZcfD4hXHw+Plx8PDxcfD5cfDwiCisKKyIgSGFuZGxlIHNldCBleHByZXNzaW9ucworc3luIHJlZ2lvbiAgY3NoU2V0RXhwcgltYXRjaGdyb3VwPWNzaFNldFN0bXQgc3RhcnQ9Ilw8c2V0XD5cfFw8dW5zZXRcPiIgZW5kPSIkXHw7IiBjb250YWlucz1jc2hDb21tZW50LGNzaFNldFN0bXQsY3NoU2V0VmFyaWFibGVzLEBjc2hRdW90ZUxpc3QKKworIiBPcGVyYXRvcnMgYW5kIEV4cHJlc3Npb24tVXNpbmcgY29uc3RydWN0cworInN5biBtYXRjaCAgIGNzaE9wZXJhdG9yCWNvbnRhaW5lZCAiJiZcfCFcflx8IT1cfDw8XHw8PVx8PT1cfD1cflx8Pj1cfD4+XHxcKlx8XF5cfFx+XHx8fFx8IVx8XHwlXHwmXHwrXHwtXHwvXHw8XHw+XHx8Igorc3luIG1hdGNoICAgY3NoT3BlcmF0b3IJY29udGFpbmVkICImJlx8IVx+XHwhPVx8PDxcfDw9XHw9PVx8PVx+XHw+PVx8Pj5cfFwqXHxcXlx8XH5cfHx8XHwhXHwlXHwmXHwrXHwtXHwvXHw8XHw+XHx8Igorc3luIG1hdGNoICAgY3NoT3BlcmF0b3IJY29udGFpbmVkICJbKCl7fV0iCitzeW4gcmVnaW9uICBjc2hUZXN0CW1hdGNoZ3JvdXA9Y3NoU3RhdGVtZW50IHN0YXJ0PSJcPGlmXD5cfFw8d2hpbGVcPiIgc2tpcD0iXFwkIiBtYXRjaGdyb3VwPWNzaFN0YXRlbWVudCBlbmQ9Ilw8dGhlblw+XHwkIiBjb250YWlucz1jc2hDb21tZW50LGNzaE9wZXJhdG9yLEBjc2hRdW90ZUxpc3QsQGNzaFZhckxJc3QKKworIiBIaWdobGlnaHQgc3BlY2lhbCBjaGFyYWN0ZXJzICh0aG9zZSB3aGljaCBoYXZlIGEgYmFja3NsYXNoKSBkaWZmZXJlbnRseQorc3luIG1hdGNoIGNzaFNwZWNpYWwJY29udGFpbmVkICJcXFxkXGRcZFx8XFxbYWJjZm5ydHZcXF0iCitzeW4gbWF0Y2ggY3NoTnVtYmVyCSItXD1cPFxkXCtcPiIKKworIiBBbGwgb3RoZXIgaWRlbnRpZmllcnMKKyJzeW4gbWF0Y2ggY3NoSWRlbnRpZmllcgkiXDxbYS16QS1aLl9dW2EtekEtWjAtOS5fXSpcPiIKKworIiBTaGVsbCBJbnB1dCBSZWRpcmVjdGlvbiAoSGVyZSBEb2N1bWVudHMpCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biByZWdpb24gY3NoSGVyZURvYyBtYXRjaGdyb3VwPWNzaFJlZGlyIHN0YXJ0PSI8PC1cPVxzKlwqKkVORFthLXpBLVpfMC05XSpcKioiIG1hdGNoZ3JvdXA9Y3NoUmVkaXIgZW5kPSJeRU5EW2EtekEtWl8wLTldKiQiCisgIHN5biByZWdpb24gY3NoSGVyZURvYyBtYXRjaGdyb3VwPWNzaFJlZGlyIHN0YXJ0PSI8PC1cPVxzKlwqKkVPRlwqKiIgbWF0Y2hncm91cD1jc2hSZWRpciBlbmQ9Il5FT0YkIgorZWxzZQorICBzeW4gcmVnaW9uIGNzaEhlcmVEb2MgbWF0Y2hncm91cD1jc2hSZWRpciBzdGFydD0iPDwtXD1ccypcKipceihcaFx3KlwpXCoqIiBtYXRjaGdyb3VwPWNzaFJlZGlyIGVuZD0iXlx6MSQiCitlbmRpZgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jc2hfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfY3NoX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGNzaEFyZ3YJCWNzaFZhcmlhYmxlcworICBIaUxpbmsgY3NoQmNrUXVvdGUJY3NoQ29tbWFuZAorICBIaUxpbmsgY3NoRGJsUXVvdGUJY3NoU3RyaW5nCisgIEhpTGluayBjc2hFeHRWYXIJY3NoVmFyaWFibGVzCisgIEhpTGluayBjc2hIZXJlRG9jCWNzaFN0cmluZworICBIaUxpbmsgY3NoTm9FbmRsaW5lQlEJY3NoTm9FbmRsaW5lCisgIEhpTGluayBjc2hOb0VuZGxpbmVEUQljc2hOb0VuZGxpbmUKKyAgSGlMaW5rIGNzaE5vRW5kbGluZVNRCWNzaE5vRW5kbGluZQorICBIaUxpbmsgY3NoUXR5V29yZAljc2hWYXJpYWJsZXMKKyAgSGlMaW5rIGNzaFJlZGlyCQljc2hPcGVyYXRvcgorICBIaUxpbmsgY3NoU2VsZWN0b3IJY3NoVmFyaWFibGVzCisgIEhpTGluayBjc2hTZXRTdG10CWNzaFN0YXRlbWVudAorICBIaUxpbmsgY3NoU2V0VmFyaWFibGVzCWNzaFZhcmlhYmxlcworICBIaUxpbmsgY3NoU25nbFF1b3RlCWNzaFN0cmluZworICBIaUxpbmsgY3NoU3Vic3QJCWNzaFZhcmlhYmxlcworCisgIEhpTGluayBjc2hDb21tYW5kCVN0YXRlbWVudAorICBIaUxpbmsgY3NoQ29tbWVudAlDb21tZW50CisgIEhpTGluayBjc2hDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgY3NoSWRlbnRpZmllcglFcnJvcgorICBIaUxpbmsgY3NoTW9kaWZpZXIJU3BlY2lhbAorICBIaUxpbmsgY3NoTm9FbmRsaW5lCUVycm9yCisgIEhpTGluayBjc2hOdW1iZXIJTnVtYmVyCisgIEhpTGluayBjc2hPcGVyYXRvcglPcGVyYXRvcgorICBIaUxpbmsgY3NoUmVkaXIJCVN0YXRlbWVudAorICBIaUxpbmsgY3NoUmVwZWF0CVJlcGVhdAorICBIaUxpbmsgY3NoU2hlbGxWYXJpYWJsZXMJU3BlY2lhbAorICBIaUxpbmsgY3NoU3BlY2lhbAlTcGVjaWFsCisgIEhpTGluayBjc2hTdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluayBjc2hTdHJpbmcJU3RyaW5nCisgIEhpTGluayBjc2hTdWJzdEVycm9yCUVycm9yCisgIEhpTGluayBjc2hUb2RvCQlUb2RvCisgIEhpTGluayBjc2hWYXJpYWJsZXMJVHlwZQorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjc2giCisKKyIgdmltOiB0cz0xOApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY3NwLnZpbSBiL3J1bnRpbWUvc3ludGF4L2NzcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ2MjEzZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2NzcC52aW0KQEAgLTAsMCArMSwxOTUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglDU1AgKENvbW11bmljYXRpb24gU2VxdWVudGlhbCBQcm9jZXNzZXMsIHVzaW5nIEZEUiBpbnB1dCBzeW50YXgpCisiIE1haW50YWluZXI6CUphbiBCcmVkZXJla2UgPGJyZWRlcmVrQHR6aS5kZT4KKyIgVmVyc2lvbjoJMC42LjAKKyIgTGFzdCBjaGFuZ2U6CU1vbiBNYXIgMjUsIDIwMDIKKyIgVVJMOgkJaHR0cDovL3d3dy50emkuZGUvfmJyZWRlcmVrL3ZpbS8KKyIgQ29weWluZzoJWW91IG1heSBkaXN0cmlidXRlIGFuZCB1c2UgdGhpcyBmaWxlIGZyZWVseSwgaW4gdGhlIHNhbWUKKyIJCXdheSBhcyB0aGUgdmltIGVkaXRvciBpdHNlbGYuCisiCisiIFRvIERvOgktIFByb2JhYmx5IEkgbWlzc2VkIHNvbWUga2V5d29yZHMgb3Igb3BlcmF0b3JzLCBwbGVhc2UKKyIJCSAgZml4IHRoZW0gYW5kIG5vdGlmeSBtZSwgdGhlIG1haW50YWluZXIuCisiCQktIEN1cnJlbnRseSwgd2UgZG8gbGV4aWNhbCBoaWdobGlnaHRpbmcgb25seS4gSXQgd291bGQgYmUKKyIJCSAgbmljZSB0byBoYXZlIG1vcmUgYWN0dWFsIHN5bnRheCBjaGVja3MsIGluY2x1ZGluZworIgkJICBoaWdobGlnaHRpbmcgb2Ygd3Jvbmcgc3ludGF4LgorIgkJLSBUaGUgYWRkaXRpb25hbCBzeW50YXggZm9yIHRoZSBSVC1UZXN0ZXIgKHBzZXVkby1jb21tZW50cykKKyIJCSAgc2hvdWxkIGJlIG9wdGlvbmFsLgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgY2FzZSBpcyBzaWduaWZpY2FudCB0byBGRFI6CitzeW4gY2FzZSBtYXRjaAorCisiIEJsb2NrIGNvbW1lbnRzIGluIENTUCBhcmUgYmV0d2VlbiB7LSBhbmQgLX0KK3N5biByZWdpb24gY3NwQ29tbWVudAlzdGFydD0iey0iICBlbmQ9Ii19IiBjb250YWlucz1jc3BUb2RvCisiIFNpbmdsZS1saW5lIGNvbW1lbnRzIHN0YXJ0IHdpdGggLS0KK3N5biByZWdpb24gY3NwQ29tbWVudAlzdGFydD0iLS0iICBlbmQ9IiQiIGNvbnRhaW5zPWNzcFRvZG8sY3NwT2xkUnR0Q29tbWVudCxjc3BTZGxSdHRDb21tZW50IGtlZXBlbmQKKworIiBOdW1iZXJzOgorc3luIG1hdGNoICBjc3BOdW1iZXIgIlw8XGRcK1w+IgorCisiIENvbmRpdGlvbmFsczoKK3N5biBrZXl3b3JkICBjc3BDb25kaXRpb25hbCBpZiB0aGVuIGVsc2UKKworIiBPcGVyYXRvcnMgb24gcHJvY2Vzc2VzOgorIiAtPiA/IDogISAnIDsgL1wgXCBbXSB8fnwgWz4gJiBbWy4uPC0uLl1dIHx8fCBbfC4ufF0gfHwgWy4uPC0+Li5dIDsgOiBAIHx8fAorc3luIG1hdGNoICBjc3BPcGVyYXRvciAiLT4iCitzeW4gbWF0Y2ggIGNzcE9wZXJhdG9yICIvXFwiCitzeW4gbWF0Y2ggIGNzcE9wZXJhdG9yICJbXi9dXFwibGM9MQorc3luIG1hdGNoICBjc3BPcGVyYXRvciAiXFtcXSIKK3N5biBtYXRjaCAgY3NwT3BlcmF0b3IgInxcfnwiCitzeW4gbWF0Y2ggIGNzcE9wZXJhdG9yICJcWz4iCitzeW4gbWF0Y2ggIGNzcE9wZXJhdG9yICJcW1xbIgorc3luIG1hdGNoICBjc3BPcGVyYXRvciAiXF1cXSIKK3N5biBtYXRjaCAgY3NwT3BlcmF0b3IgIjwtIgorc3luIG1hdGNoICBjc3BPcGVyYXRvciAifHx8Igorc3luIG1hdGNoICBjc3BPcGVyYXRvciAiW158XXx8W158XSJsYz0xLG1lPWUtMQorc3luIG1hdGNoICBjc3BPcGVyYXRvciAiW158e1x+XXxbXnx9XH5dImxjPTEsbWU9ZS0xCitzeW4gbWF0Y2ggIGNzcE9wZXJhdG9yICJcW3wiCitzeW4gbWF0Y2ggIGNzcE9wZXJhdG9yICJ8XF0iCitzeW4gbWF0Y2ggIGNzcE9wZXJhdG9yICJcW1tePl0ibWU9ZS0xCitzeW4gbWF0Y2ggIGNzcE9wZXJhdG9yICJcXSIKK3N5biBtYXRjaCAgY3NwT3BlcmF0b3IgIjwtPiIKK3N5biBtYXRjaCAgY3NwT3BlcmF0b3IgIls/OiEnO0BdIgorc3luIG1hdGNoICBjc3BPcGVyYXRvciAiJiIKK3N5biBtYXRjaCAgY3NwT3BlcmF0b3IgIlwuIgorCisiIChub3Qgb24gcHJvY2Vzc2VzOikKKyIgc3luIG1hdGNoICBjc3BEZWxpbWl0ZXIJInt8IgorIiBzeW4gbWF0Y2ggIGNzcERlbGltaXRlcgkifH0iCisiIHN5biBtYXRjaCAgY3NwRGVsaW1pdGVyCSJ7W14tfF0ibWU9ZS0xCisiIHN5biBtYXRjaCAgY3NwRGVsaW1pdGVyCSJbXi18XX0ibGM9MQorCisiIEtleXdvcmRzOgorc3luIGtleXdvcmQgY3NwS2V5d29yZAkJbGVuZ3RoIG51bGwgaGVhZCB0YWlsIGNvbmNhdCBlbGVtCitzeW4ga2V5d29yZCBjc3BLZXl3b3JkCQl1bmlvbiBpbnRlciBkaWZmIFVuaW9uIEludGVyIG1lbWJlciBjYXJkCitzeW4ga2V5d29yZCBjc3BLZXl3b3JkCQllbXB0eSBzZXQgU2V0IFNlcQorc3luIGtleXdvcmQgY3NwS2V5d29yZAkJdHJ1ZSBmYWxzZSBhbmQgb3Igbm90IHdpdGhpbiBsZXQKK3N5biBrZXl3b3JkIGNzcEtleXdvcmQJCW5hbWV0eXBlIGRhdGF0eXBlIGRpYW1vbmQgbm9ybWFsCitzeW4ga2V5d29yZCBjc3BLZXl3b3JkCQlzYmlzaW0gdGF1X2xvb3BfZmFjdG9yIG1vZGVsX2NvbXByZXNzCitzeW4ga2V5d29yZCBjc3BLZXl3b3JkCQlleHBsaWNhdGUKK3N5biBtYXRjaCBjc3BLZXl3b3JkCQkidHJhbnNwYXJlbnQiCitzeW4ga2V5d29yZCBjc3BLZXl3b3JkCQlleHRlcm5hbCBjaGFzZSBwcmlvcml0aXplCitzeW4ga2V5d29yZCBjc3BLZXl3b3JkCQljaGFubmVsIEV2ZW50cworc3luIGtleXdvcmQgY3NwS2V5d29yZAkJZXh0ZW5zaW9ucyBwcm9kdWN0aW9ucworc3luIGtleXdvcmQgY3NwS2V5d29yZAkJQm9vbCBJbnQKKworIiBSZXNlcnZlZCBrZXl3b3JkczoKK3N5biBrZXl3b3JkIGNzcFJlc2VydmVkCQlhdHRyaWJ1dGUgZW1iZWQgbW9kdWxlIHN1YnR5cGUKKworIiBJbmNsdWRlOgorc3luIHJlZ2lvbiBjc3BJbmNsdWRlIG1hdGNoZ3JvdXA9Y3NwSW5jbHVkZUtleXdvcmQgc3RhcnQ9Il5pbmNsdWRlIiBlbmQ9IiQiIGtlZXBlbmQgY29udGFpbnM9Y3NwSW5jbHVkZUFyZworc3luIHJlZ2lvbiBjc3BJbmNsdWRlQXJnIHN0YXJ0PSdcc1wrXCInIGVuZD0gJ1wiXHMqJyBjb250YWluZWQKKworIiBBc3NlcnRpb25zOgorc3luIGtleXdvcmQgY3NwQXNzZXJ0CQlhc3NlcnQgZGV0ZXJtaW5pc3RpYyBkaXZlcmdlbmNlIGZyZWUgZGVhZGxvY2sKK3N5biBrZXl3b3JkIGNzcEFzc2VydAkJbGl2ZWxvY2sKK3N5biBtYXRjaCBjc3BBc3NlcnQJCSJcW1Q9Igorc3luIG1hdGNoIGNzcEFzc2VydAkJIlxbRj0iCitzeW4gbWF0Y2ggY3NwQXNzZXJ0CQkiXFtGRD0iCitzeW4gbWF0Y2ggY3NwQXNzZXJ0CQkiXFtGRFxdIgorc3luIG1hdGNoIGNzcEFzc2VydAkJIlxbRlxdIgorCisiIFR5cGVzIGFuZCBTZXRzCisiIChmaXJzdCBjaGFyIGEgY2FwaXRhbCwgbGF0ZXIgYXQgbGVhc3Qgb25lIGxvd2VyIGNhc2UsIG5vIHRyYWlsaW5nIHVuZGVyc2NvcmUpOgorc3luIG1hdGNoIGNzcFR5cGUgICAgICJcPF8qW0EtWl1bQS1aXzAtOV0qW2Etel1cKFx8W0EtWmEtel8wLTldKltBLVphLXowLTldXClcPiIKKworIiBQcm9jZXNzZXMgKGFsbCB1cHBlciBjYXNlLCBubyB0cmFpbGluZyB1bmRlcnNjb3JlKToKKyIgKEZvciBpZGVudGlmaWVycyB0aGF0IGNvdWxkIGJlIHR5cGVzIG9yIHNldHMsIHRvbywgdGhpcyBzZWNvbmQgcnVsZSBzZXQKKyIgd2lucy4pCitzeW4gbWF0Y2ggY3NwUHJvY2VzcwkJIlw8W0EtWl9dW0EtWl8wLTldKltBLVowLTldXD4iCitzeW4gbWF0Y2ggY3NwUHJvY2VzcwkJIlw8W0EtWl9dXD4iCisKKyIgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgZm9yIHRvb2wgb3V0cHV0IChlbmRpbmcgaW4gdW5kZXJzY29yZSk6CitzeW4gbWF0Y2ggY3NwUmVzZXJ2ZWRJZGVudGlmaWVyCSJcPFtBLVphLXpfXVtBLVphLXpfMC05XSpfXD4iCisKKyIgVG9EbyBtYXJrZXJzOgorc3luIG1hdGNoIGNzcFRvZG8JCSJGSVhNRSIJY29udGFpbmVkCitzeW4gbWF0Y2ggY3NwVG9kbwkJIlRPRE8iCWNvbnRhaW5lZAorc3luIG1hdGNoIGNzcFRvZG8JCSIhISEiCWNvbnRhaW5lZAorCisiIFJULVRlc3RlciBwc2V1ZG8gY29tbWVudHM6CisiIChUaGUgbm93IG9ic29sZXRlIHN5bnRheDopCitzeW4gbWF0Y2ggY3NwT2xkUnR0Q29tbWVudAkiXi0tXCRcJEFNX1VOREVGImxjPTIJCWNvbnRhaW5lZAorc3luIG1hdGNoIGNzcE9sZFJ0dENvbW1lbnQJIl4tLVwkXCRBTV9FUlJPUiJsYz0yCQljb250YWluZWQKK3N5biBtYXRjaCBjc3BPbGRSdHRDb21tZW50CSJeLS1cJFwkQU1fV0FSTklORyJsYz0yCQljb250YWluZWQKK3N5biBtYXRjaCBjc3BPbGRSdHRDb21tZW50CSJeLS1cJFwkQU1fU0VUX1RJTUVSImxjPTIJY29udGFpbmVkCitzeW4gbWF0Y2ggY3NwT2xkUnR0Q29tbWVudAkiXi0tXCRcJEFNX1JFU0VUX1RJTUVSImxjPTIJY29udGFpbmVkCitzeW4gbWF0Y2ggY3NwT2xkUnR0Q29tbWVudAkiXi0tXCRcJEFNX0VMQVBTRURfVElNRVIibGM9Mgljb250YWluZWQKK3N5biBtYXRjaCBjc3BPbGRSdHRDb21tZW50CSJeLS1cJFwkQU1fT1VUUFVUImxjPTIJCWNvbnRhaW5lZAorc3luIG1hdGNoIGNzcE9sZFJ0dENvbW1lbnQJIl4tLVwkXCRBTV9JTlBVVCJsYz0yCQljb250YWluZWQKKyIgKFRoZSBjdXJyZW50IHN5bnRheDopCitzeW4gcmVnaW9uIGNzcFJ0dFByYWdtYSBtYXRjaGdyb3VwPWNzcFJ0dFByYWdtYUtleXdvcmQgc3RhcnQ9Il5wcmFnbWFcc1wrIiBlbmQ9IlxzKiQiIG9uZWxpbmUga2VlcGVuZCBjb250YWlucz1jc3BSdHRQcmFnbWFBcmcsY3NwUnR0UHJhZ21hU2RsCitzeW4ga2V5d29yZCBjc3BSdHRQcmFnbWFBcmcJQU1fRVJST1IgQU1fV0FSTklORyBBTV9TRVRfVElNRVIgY29udGFpbmVkCitzeW4ga2V5d29yZCBjc3BSdHRQcmFnbWFBcmcJQU1fUkVTRVRfVElNRVIgQU1fRUxBUFNFRF9USU1FUiAgY29udGFpbmVkCitzeW4ga2V5d29yZCBjc3BSdHRQcmFnbWFBcmcJQU1fT1VUUFVUIEFNX0lOUFVUIEFNX0lOVEVSTkFMICAgY29udGFpbmVkCisiIHRoZSAiU0RMX01BVENIIiBleHRlbnNpb246CitzeW4gcmVnaW9uIGNzcFJ0dFByYWdtYVNkbAltYXRjaGdyb3VwPWNzcFJ0dFByYWdtYUtleXdvcmQgc3RhcnQ9IlNETF9NQVRDSFxzXCsiIGVuZD0iXHMqJCIgY29udGFpbnM9Y3NwUnR0UHJhZ21hU2RsQXJnIGNvbnRhaW5lZAorc3luIGtleXdvcmQgY3NwUnR0UHJhZ21hU2RsQXJnCVRSQU5TTEFURSBuZXh0Z3JvdXA9Y3NwUnR0UHJhZ21hU2RsVHJhbnNOYW1lIGNvbnRhaW5lZAorc3luIGtleXdvcmQgY3NwUnR0UHJhZ21hU2RsQXJnCVBBUkFNIFNLSVAgT1BUSU9OQUwgQ0hPSUNFIEFSUkFZIG5leHRncm91cD1jc3BSdHRQcmFnbWFTZGxOYW1lIGNvbnRhaW5lZAorc3luIG1hdGNoIGNzcFJ0dFByYWdtYVNkbE5hbWUJIlxzKlxTXCtccyoiIG5leHRncm91cD1jc3BSdHRQcmFnbWFTZGxUYWlsIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBjc3BSdHRQcmFnbWFTZGxUYWlsICBzdGFydD0iIiBlbmQ9IlxzKiQiIGNvbnRhaW5zPWNzcFJ0dFByYWdtYVNkbFRhaWxBcmcgY29udGFpbmVkCitzeW4ga2V5d29yZCBjc3BSdHRQcmFnbWFTZGxUYWlsQXJnCVNVQlNFVF9VU0VEIERFRkFVTFRfVkFMVUUgUHJlc2VudCBjb250YWluZWQKK3N5biBtYXRjaCBjc3BSdHRQcmFnbWFTZGxUcmFuc05hbWUJIlxzKlx3XCtccyoiIG5leHRncm91cD1jc3BSdHRQcmFnbWFTZGxUcmFuc1RhaWwgY29udGFpbmVkCitzeW4gcmVnaW9uIGNzcFJ0dFByYWdtYVNkbFRyYW5zVGFpbCAgc3RhcnQ9IiIgZW5kPSJccyokIiBjb250YWlucz1jc3BSdHRQcmFnbWFTZGxUcmFuc1RhaWxBcmcgY29udGFpbmVkCitzeW4ga2V5d29yZCBjc3BSdHRQcmFnbWFTZGxUcmFuc1RhaWxBcmcJc2l6ZW9mIGNvbnRhaW5lZAorc3luIG1hdGNoIGNzcFJ0dFByYWdtYVNkbFRyYW5zVGFpbEFyZwkiXCoiIGNvbnRhaW5lZAorc3luIG1hdGNoIGNzcFJ0dFByYWdtYVNkbFRyYW5zVGFpbEFyZwkiKCIgY29udGFpbmVkCitzeW4gbWF0Y2ggY3NwUnR0UHJhZ21hU2RsVHJhbnNUYWlsQXJnCSIpIiBjb250YWluZWQKKworIiB0ZW1wb3Jhcnkgc3ludGF4IGV4dGVuc2lvbiBmb3IgY29tbWVudGVkLW91dCAicHJhZ21hIFNETF9NQVRDSCI6CitzeW4gbWF0Y2ggY3NwU2RsUnR0Q29tbWVudAkicHJhZ21hXHNcK1NETF9NQVRDSFxzXCsiIG5leHRncm91cD1jc3BSdHRQcmFnbWFTZGxBcmcgY29udGFpbmVkCisKK3N5biBzeW5jIGxpbmVzPTI1MAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jc3Bfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfY3NwX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICAiIChGb3IgdmltIHZlcnNpb24gPD01LjcsIHRoZSBjb21tYW5kIGdyb3VwcyBhcmUgZGVmaW5lZCBpbgorICAiICRWSU1SVU5USU1FL3N5bnRheC9zeW5sb2FkLnZpbSApCisgIEhpTGluayBjc3BDb21tZW50CQkJQ29tbWVudAorICBIaUxpbmsgY3NwTnVtYmVyCQkJTnVtYmVyCisgIEhpTGluayBjc3BDb25kaXRpb25hbAkJCUNvbmRpdGlvbmFsCisgIEhpTGluayBjc3BPcGVyYXRvcgkJCURlbGltaXRlcgorICBIaUxpbmsgY3NwS2V5d29yZAkJCUtleXdvcmQKKyAgSGlMaW5rIGNzcFJlc2VydmVkCQkJU3BlY2lhbENoYXIKKyAgSGlMaW5rIGNzcEluY2x1ZGUJCQlFcnJvcgorICBIaUxpbmsgY3NwSW5jbHVkZUtleXdvcmQJCUluY2x1ZGUKKyAgSGlMaW5rIGNzcEluY2x1ZGVBcmcJCQlJbmNsdWRlCisgIEhpTGluayBjc3BBc3NlcnQJCQlQcmVDb25kaXQKKyAgSGlMaW5rIGNzcFR5cGUJCQlUeXBlCisgIEhpTGluayBjc3BQcm9jZXNzCQkJRnVuY3Rpb24KKyAgSGlMaW5rIGNzcFRvZG8JCQlUb2RvCisgIEhpTGluayBjc3BPbGRSdHRDb21tZW50CQlEZWZpbmUKKyAgSGlMaW5rIGNzcFJ0dFByYWdtYUtleXdvcmQJCURlZmluZQorICBIaUxpbmsgY3NwU2RsUnR0Q29tbWVudAkJRGVmaW5lCisgIEhpTGluayBjc3BSdHRQcmFnbWFBcmcJCURlZmluZQorICBIaUxpbmsgY3NwUnR0UHJhZ21hU2RsQXJnCQlEZWZpbmUKKyAgSGlMaW5rIGNzcFJ0dFByYWdtYVNkbE5hbWUJCURlZmF1bHQKKyAgSGlMaW5rIGNzcFJ0dFByYWdtYVNkbFRhaWxBcmcJCURlZmluZQorICBIaUxpbmsgY3NwUnR0UHJhZ21hU2RsVHJhbnNOYW1lCURlZmF1bHQKKyAgSGlMaW5rIGNzcFJ0dFByYWdtYVNkbFRyYW5zVGFpbEFyZwlEZWZpbmUKKyAgSGlMaW5rIGNzcFJlc2VydmVkSWRlbnRpZmllcglFcnJvcgorICAiIChDdXJyZW50bHkgdW51c2VkIHZpbSBtZXRob2Q6IERlYnVnKQorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjc3AiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jc3MudmltIGIvcnVudGltZS9zeW50YXgvY3NzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTNmMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY3NzLnZpbQpAQCAtMCwwICsxLDI3NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUNhc2NhZGluZyBTdHlsZSBTaGVldHMKKyIgTWFpbnRhaW5lcjoJQ2xhdWRpbyBGbGVpbmVyIDxjbGF1ZGlvQGZsZWluZXIuY29tPgorIiBVUkw6CQlodHRwOi8vd3d3LmZsZWluZXIuY29tL3ZpbS9zeW50YXgvY3NzLnZpbQorIiBMYXN0IENoYW5nZToJMjAwMiBPY3QgMTkKKyIgQ1NTMiBieSBOaWtvbGFpIFdlaWJ1bGwKKyIgRnVsbCBDU1MyLCBIVE1MNCBzdXBwb3J0IGJ5IFlldGkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmICFleGlzdHMoIm1haW5fc3ludGF4IikKKyAgaWYgdmVyc2lvbiA8IDYwMAorICAgIHN5bnRheCBjbGVhcgorICBlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorICBsZXQgbWFpbl9zeW50YXggPSAnY3NzJworZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKK3N5biBrZXl3b3JkIGNzc1RhZ05hbWUgYWJiciBhY3JvbnltIGFkZHJlc3MgYXBwbGV0IGFyZWEgYSBiIGJhc2UKK3N5biBrZXl3b3JkIGNzc1RhZ05hbWUgYmFzZWZvbnQgYmRvIGJpZyBibG9ja3F1b3RlIGJvZHkgYnIgYnV0dG9uCitzeW4ga2V5d29yZCBjc3NUYWdOYW1lIGNhcHRpb24gY2VudGVyIGNpdGUgY29kZSBjb2wgY29sZ3JvdXAgZGQgZGVsCitzeW4ga2V5d29yZCBjc3NUYWdOYW1lIGRmbiBkaXIgZGl2IGRsIGR0IGVtIGZpZWxkc2V0IGZvbnQgZm9ybSBmcmFtZQorc3luIGtleXdvcmQgY3NzVGFnTmFtZSBmcmFtZXNldCBoMSBoMiBoMyBoNCBoNSBoNiBoZWFkIGhyIGh0bWwgaW1nIGkKK3N5biBrZXl3b3JkIGNzc1RhZ05hbWUgaWZyYW1lIGltZyBpbnB1dCBpbnMgaXNpbmRleCBrYmQgbGFiZWwgbGVnZW5kIGxpCitzeW4ga2V5d29yZCBjc3NUYWdOYW1lIGxpbmsgbWFwIG1lbnUgbWV0YSBub2ZyYW1lcyBub3NjcmlwdCBvbCBvcHRncm91cAorc3luIGtleXdvcmQgY3NzVGFnTmFtZSBvcHRpb24gcCBwYXJhbSBwcmUgcSBzIHNhbXAgc2NyaXB0IHNlbGVjdCBzbWFsbAorc3luIGtleXdvcmQgY3NzVGFnTmFtZSBzcGFuIHN0cmlrZSBzdHJvbmcgc3R5bGUgc3ViIHN1cCB0Ym9keSB0ZAorc3luIGtleXdvcmQgY3NzVGFnTmFtZSB0ZXh0YXJlYSB0Zm9vdCB0aCB0aGVhZCB0aXRsZSB0ciB0dCB1bCB1IHZhcgorc3luIG1hdGNoIGNzc1RhZ05hbWUgIlw8dGFibGVcPiIKK3N5biBtYXRjaCBjc3NUYWdOYW1lICJcKiIKKworc3luIG1hdGNoIGNzc1RhZ05hbWUgIkBwYWdlXD4iIG5leHRncm91cD1jc3NEZWZpbml0aW9uCisKK3N5biBtYXRjaCBjc3NTZWxlY3Rvck9wICJbKz4uXSIKK3N5biBtYXRjaCBjc3NTZWxlY3Rvck9wMiAiW358XVw/PSIgY29udGFpbmVkCitzeW4gcmVnaW9uIGNzc0F0dHJpYnV0ZVNlbGVjdG9yIG1hdGNoZ3JvdXA9Y3NzU2VsZWN0b3JPcCBzdGFydD0iXFsiIGVuZD0iXSIgdHJhbnNwYXJlbnQgY29udGFpbnM9Y3NzVW5pY29kZUVzY2FwZSxjc3NTZWxlY3Rvck9wMixjc3NTdHJpbmdRLGNzc1N0cmluZ1FRCisKK3N5biBtYXRjaCBjc3NJZGVudGlmaWVyICIjXGlcKyIKKworc3luIG1hdGNoIGNzc01lZGlhICJAbWVkaWFcPiIgbmV4dGdyb3VwPWNzc01lZGlhVHlwZSBza2lwd2hpdGUgc2tpcG5sCitzeW4ga2V5d29yZCBjc3NNZWRpYVR5cGUgY29udGFpbmVkIHNjcmVlbiBwcmludCBhdXJhbCBicmFpbGUgZW1ib3NlZCBoYW5kaGVsZCBwcm9qZWN0aW9uIHR5IHR2IGFsbCBuZXh0Z3JvdXA9Y3NzTWVkaWFDb21tYSxjc3NNZWRpYUJsb2NrIHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCBjc3NNZWRpYUNvbW1hICIsIiBuZXh0Z3JvdXA9Y3NzTWVkaWFUeXBlIHNraXB3aGl0ZSBza2lwbmwKK3N5biByZWdpb24gY3NzTWVkaWFCbG9jayB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWNzc0JyYWNlcyBzdGFydD0neycgZW5kPSd9JyBjb250YWlucz1jc3NUYWdOYW1lLGNzc0Vycm9yLGNzc0NvbW1lbnQsY3NzRGVmaW5pdGlvbixjc3NVUkwsY3NzVW5pY29kZUVzY2FwZSxjc3NJZGVudGlmaWVyCisKK3N5biBtYXRjaCBjc3NWYWx1ZUludGVnZXIgY29udGFpbmVkICJbLStdXD1cZFwrIgorc3luIG1hdGNoIGNzc1ZhbHVlTnVtYmVyIGNvbnRhaW5lZCAiWy0rXVw9XGRcK1woXC5cZCpcKVw9Igorc3luIG1hdGNoIGNzc1ZhbHVlTGVuZ3RoIGNvbnRhaW5lZCAiWy0rXVw9XGRcK1woXC5cZCpcKVw9XCglXHxtbVx8Y21cfGluXHxwdFx8cGNcfGVtXHxleFx8cHhcKSIKK3N5biBtYXRjaCBjc3NWYWx1ZUFuZ2xlIGNvbnRhaW5lZCAiWy0rXVw9XGRcK1woXC5cZCpcKVw9XChkZWdcfGdyYWRcfHJhZFwpIgorc3luIG1hdGNoIGNzc1ZhbHVlVGltZSBjb250YWluZWQgIitcPVxkXCtcKFwuXGQqXClcPVwobXNcfHNcKSIKK3N5biBtYXRjaCBjc3NWYWx1ZUZyZXF1ZW5jeSBjb250YWluZWQgIitcPVxkXCtcKFwuXGQqXClcPVwoSHpcfGtIelwpIgorCitzeW4gbWF0Y2ggY3NzRm9udERlc2NyaXB0b3IgIkBmb250LWZhY2VcPiIgbmV4dGdyb3VwPWNzc0ZvbnREZXNjcmlwdG9yQmxvY2sgc2tpcHdoaXRlIHNraXBubAorc3luIHJlZ2lvbiBjc3NGb250RGVzY3JpcHRvckJsb2NrIGNvbnRhaW5lZCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWNzc0JyYWNlcyBzdGFydD0ieyIgZW5kPSJ9IiBjb250YWlucz1jc3NDb21tZW50LGNzc0Vycm9yLGNzc1VuaWNvZGVFc2NhcGUsY3NzRm9udFByb3AsY3NzRm9udEF0dHIsY3NzQ29tbW9uQXR0cixjc3NTdHJpbmdRLGNzc1N0cmluZ1FRLGNzc0ZvbnREZXNjcmlwdG9yUHJvcCxjc3NWYWx1ZS4qLGNzc0ZvbnREZXNjcmlwdG9yRnVuY3Rpb24sY3NzVW5pY29kZVJhbmdlLGNzc0ZvbnREZXNjcmlwdG9yQXR0cgorc3luIG1hdGNoIGNzc0ZvbnREZXNjcmlwdG9yUHJvcCBjb250YWluZWQgIlw8XCh1bmljb2RlLXJhbmdlXHx1bml0LXBlci1lbVx8cGFub3NlLTFcfGNhcC1oZWlnaHRcfHgtaGVpZ2h0XHxkZWZpbml0aW9uLXNyY1wpXD4iCitzeW4ga2V5d29yZCBjc3NGb250RGVzY3JpcHRvclByb3AgY29udGFpbmVkIHNyYyBzdGVtdiBzdGVtaCBzbG9wZSBhc2NlbnQgZGVzY2VudCB3aWR0aHMgYmJveCBiYXNlbGluZSBjZW50ZXJsaW5lIG1hdGhsaW5lIHRvcGxpbmUKK3N5biBrZXl3b3JkIGNzc0ZvbnREZXNjcmlwdG9yQXR0ciBjb250YWluZWQgYWxsCitzeW4gcmVnaW9uIGNzc0ZvbnREZXNjcmlwdG9yRnVuY3Rpb24gY29udGFpbmVkIG1hdGNoZ3JvdXA9Y3NzRnVuY3Rpb25OYW1lIHN0YXJ0PSJcPFwodXJpXHx1cmxcfGxvY2FsXHxmb3JtYXRcKVxzKigiIGVuZD0iKSIgY29udGFpbnM9Y3NzU3RyaW5nUSxjc3NTdHJpbmdRUSBvbmVsaW5lIGtlZXBlbmQKK3N5biBtYXRjaCBjc3NVbmljb2RlUmFuZ2UgY29udGFpbmVkICJVK1swLTlBLUZhLWY/XVwrIgorc3luIG1hdGNoIGNzc1VuaWNvZGVSYW5nZSBjb250YWluZWQgIlUrXHhcKy1ceFwrIgorCitzeW4ga2V5d29yZCBjc3NDb2xvciBjb250YWluZWQgYXF1YSBibGFjayBibHVlIGZ1Y2hzaWEgZ3JheSBncmVlbiBsaW1lIG1hcm9vbiBuYXZ5IG9saXZlIHB1cnBsZSByZWQgc2lsdmVyIHRlYWwgeWVsbG93CisiIEZJWE1FOiBUaGVzZSBhcmUgYWN0dWFsbHkgY2FzZS1pbnNlbnRpdmllIHRvbywgYnV0IChhKSBzcGVjcyByZWNvbW1lbmQgdXNpbmcKKyIgbWl4ZWQtY2FzZSAoYikgaXQncyBoYXJkIHRvIGhpZ2hsaWdodCB0aGUgd29yZCBgQmFja2dyb3VuZCcgY29ycmVjdGx5IGluCisiIGFsbCBzaXR1YXRpb25zCitzeW4gY2FzZSBtYXRjaAorc3luIGtleXdvcmQgY3NzQ29sb3IgY29udGFpbmVkIEFjdGl2ZUJvcmRlciBBY3RpdmVDYXB0aW9uIEFwcFdvcmtzcGFjZSBCdXR0b25GYWNlIEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3cgQnV0dG9uVGV4dCBDYXB0aW9uVGV4dCBHcmF5VGV4dCBIaWdobGlnaHQgSGlnaGxpZ2h0VGV4dCBJbmFjdGl2ZUJvcmRlciBJbmFjdGl2ZUNhcHRpb24gSW5hY3RpdmVDYXB0aW9uVGV4dCBJbmZvQmFja2dyb3VuZCBJbmZvVGV4dCBNZW51IE1lbnVUZXh0IFNjcm9sbGJhciBUaHJlZUREYXJrU2hhZG93IFRocmVlREZhY2UgVGhyZWVESGlnaGxpZ2h0IFRocmVlRExpZ2h0U2hhZG93IFRocmVlRFNoYWRvdyBXaW5kb3cgV2luZG93RnJhbWUgV2luZG93VGV4dCBCYWNrZ3JvdW5kCitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCBjc3NDb2xvciBjb250YWluZWQgIlw8dHJhbnNwYXJlbnRcPiIKK3N5biBtYXRjaCBjc3NDb2xvciBjb250YWluZWQgIlw8d2hpdGVcPiIKK3N5biBtYXRjaCBjc3NDb2xvciBjb250YWluZWQgIiNbMC05QS1GYS1mXVx7M1x9XD4iCitzeW4gbWF0Y2ggY3NzQ29sb3IgY29udGFpbmVkICIjWzAtOUEtRmEtZl1cezZcfVw+IgorInN5biBtYXRjaCBjc3NDb2xvciBjb250YWluZWQgIlw8cmdiXHMqKFxzKlxkXCtcKFwuXGQqXClcPSVcPVxzKixccypcZFwrXChcLlxkKlwpXD0lXD1ccyosXHMqXGRcK1woXC5cZCpcKVw9JVw9XHMqKSIKK3N5biByZWdpb24gY3NzVVJMIGNvbnRhaW5lZCBtYXRjaGdyb3VwPWNzc0Z1bmN0aW9uTmFtZSBzdGFydD0iXDx1cmxccyooIiBlbmQ9IikiIG9uZWxpbmUga2VlcGVuZAorc3luIHJlZ2lvbiBjc3NGdW5jdGlvbiBjb250YWluZWQgbWF0Y2hncm91cD1jc3NGdW5jdGlvbk5hbWUgc3RhcnQ9Ilw8XChyZ2JcfGNsaXBcfGF0dHJcfGNvdW50ZXJcfHJlY3RcKVxzKigiIGVuZD0iKSIgb25lbGluZSBrZWVwZW5kCisKK3N5biBtYXRjaCBjc3NJbXBvcnRhbnQgY29udGFpbmVkICIhXHMqaW1wb3J0YW50XD4iCisKK3N5biBrZXl3b3JkIGNzc0NvbW1vbkF0dHIgY29udGFpbmVkIGF1dG8gbm9uZSBpbmhlcml0CitzeW4ga2V5d29yZCBjc3NDb21tb25BdHRyIGNvbnRhaW5lZCB0b3AgYm90dG9tCitzeW4ga2V5d29yZCBjc3NDb21tb25BdHRyIGNvbnRhaW5lZCBtZWRpdW0gbm9ybWFsCisKK3N5biBtYXRjaCBjc3NGb250UHJvcCBjb250YWluZWQgIlw8Zm9udFw+XCgtXChmYW1pbHlcfHN0eWxlXHx2YXJpYW50XHx3ZWlnaHRcfHNpemVcKC1hZGp1c3RcKVw9XHxzdHJldGNoXClcPlwpXD0iCitzeW4gbWF0Y2ggY3NzRm9udEF0dHIgY29udGFpbmVkICJcPFwoc2Fucy1cKVw9XDxzZXJpZlw+Igorc3luIG1hdGNoIGNzc0ZvbnRBdHRyIGNvbnRhaW5lZCAiXDxzbWFsbFw+XCgtXChjYXBzXHxjYXB0aW9uXClcPlwpXD0iCitzeW4gbWF0Y2ggY3NzRm9udEF0dHIgY29udGFpbmVkICJcPHhcezEsMlx9LVwobGFyZ2VcfHNtYWxsXClcPiIKK3N5biBtYXRjaCBjc3NGb250QXR0ciBjb250YWluZWQgIlw8bWVzc2FnZS1ib3hcPiIKK3N5biBtYXRjaCBjc3NGb250QXR0ciBjb250YWluZWQgIlw8c3RhdHVzLWJhclw+Igorc3luIG1hdGNoIGNzc0ZvbnRBdHRyIGNvbnRhaW5lZCAiXDxcKFwodWx0cmFcfGV4dHJhXHxzZW1pXHxzdGF0dXMtYmFyXCktXClcPVwoY29uZGVuc2VkXHxleHBhbmRlZFwpXD4iCitzeW4ga2V5d29yZCBjc3NGb250QXR0ciBjb250YWluZWQgY3Vyc2l2ZSBmYW50YXN5IG1vbm9zcGFjZSBpdGFsaWMgb2JsaXF1ZQorc3luIGtleXdvcmQgY3NzRm9udEF0dHIgY29udGFpbmVkIGJvbGQgYm9sZGVyIGxpZ2h0ZXIgbGFyZ2VyIHNtYWxsZXIKK3N5biBrZXl3b3JkIGNzc0ZvbnRBdHRyIGNvbnRhaW5lZCBpY29uIG1lbnUKK3N5biBtYXRjaCBjc3NGb250QXR0ciBjb250YWluZWQgIlw8Y2FwdGlvblw+Igorc3luIGtleXdvcmQgY3NzRm9udEF0dHIgY29udGFpbmVkIGxhcmdlIHNtYWxsZXIgbGFyZ2VyCitzeW4ga2V5d29yZCBjc3NGb250QXR0ciBjb250YWluZWQgbmFycm93ZXIgd2lkZXIKKworc3luIGtleXdvcmQgY3NzQ29sb3JQcm9wIGNvbnRhaW5lZCBjb2xvcgorc3luIG1hdGNoIGNzc0NvbG9yUHJvcCBjb250YWluZWQgIlw8YmFja2dyb3VuZFwoLVwoY29sb3JcfGltYWdlXHxhdHRhY2htZW50XHxwb3NpdGlvblwpXClcPSIKK3N5biBrZXl3b3JkIGNzc0NvbG9yQXR0ciBjb250YWluZWQgY2VudGVyIHNjcm9sbCBmaXhlZAorc3luIG1hdGNoIGNzc0NvbG9yQXR0ciBjb250YWluZWQgIlw8cmVwZWF0XCgtW3h5XVwpXD1cPiIKK3N5biBtYXRjaCBjc3NDb2xvckF0dHIgY29udGFpbmVkICJcPG5vLXJlcGVhdFw+IgorCitzeW4gbWF0Y2ggY3NzVGV4dFByb3AgIlw8XChcKHdvcmRcfGxldHRlclwpLXNwYWNpbmdcfHRleHRcKC1cKGRlY29yYXRpb25cfHRyYW5zZm9ybVx8YWxpZ25cfGluZGV4XHxzaGFkb3dcKVwpXD1cfHZlcnRpY2FsLWFsaWduXHx1bmljb2RlLWJpZGlcfGxpbmUtaGVpZ2h0XClcPiIKK3N5biBtYXRjaCBjc3NUZXh0QXR0ciBjb250YWluZWQgIlw8bGluZS10aHJvdWdoXD4iCitzeW4gbWF0Y2ggY3NzVGV4dEF0dHIgY29udGFpbmVkICJcPHRleHQtaW5kZW50XD4iCitzeW4gbWF0Y2ggY3NzVGV4dEF0dHIgY29udGFpbmVkICJcPFwodGV4dC1cKVw9XCh0b3BcfGJvdHRvbVwpXD4iCitzeW4ga2V5d29yZCBjc3NUZXh0QXR0ciBjb250YWluZWQgdW5kZXJsaW5lIG92ZXJsaW5lIGJsaW5rIHN1YiBzdXBlciBtaWRkbGUKK3N5biBrZXl3b3JkIGNzc1RleHRBdHRyIGNvbnRhaW5lZCBjYXBpdGFsaXplIHVwcGVyY2FzZSBsb3dlcmNhc2UgY2VudGVyIGp1c3RpZnkgYmFzZWxpbmUgc3ViIHN1cGVyCisKK3N5biBtYXRjaCBjc3NCb3hQcm9wIGNvbnRhaW5lZCAiXDxcKG1hcmdpblx8cGFkZGluZ1x8Ym9yZGVyXClcKC1cKHRvcFx8cmlnaHRcfGJvdHRvbVx8bGVmdFwpXClcPVw+Igorc3luIG1hdGNoIGNzc0JveFByb3AgY29udGFpbmVkICJcPGJvcmRlci1cKFwoXCh0b3BcfHJpZ2h0XHxib3R0b21cfGxlZnRcKS1cKVw9XCh3aWR0aFx8Y29sb3JcfHN0eWxlXClcKVw9XD4iCitzeW4gbWF0Y2ggY3NzQm94UHJvcCBjb250YWluZWQgIlw8XCh3aWR0aFx8ei1pbmRleFwpXD4iCitzeW4gbWF0Y2ggY3NzQm94UHJvcCBjb250YWluZWQgIlw8XChtaW5cfG1heFwpLVwod2lkdGhcfGhlaWdodFwpXD4iCitzeW4ga2V5d29yZCBjc3NCb3hQcm9wIGNvbnRhaW5lZCB3aWR0aCBoZWlnaHQgZmxvYXQgY2xlYXIgb3ZlcmZsb3cgY2xpcCB2aXNpYmlsaXR5CitzeW4ga2V5d29yZCBjc3NCb3hBdHRyIGNvbnRhaW5lZCB0aGluIHRoaWNrIGJvdGgKK3N5biBrZXl3b3JkIGNzc0JveEF0dHIgY29udGFpbmVkIGRvdHRlZCBkYXNoZWQgc29saWQgZG91YmxlIGdyb292ZSByaWRnZSBpbnNldCBvdXRzZXQKK3N5biBrZXl3b3JkIGNzc0JveEF0dHIgY29udGFpbmVkIGhpZGRlbiB2aXNpYmxlIHNjcm9sbCBjb2xsYXBzZQorCitzeW4ga2V5d29yZCBjc3NHZW5lcmF0ZWRDb250ZW50UHJvcCBjb250YWluZWQgY29udGVudCBxdW90ZXMKK3N5biBtYXRjaCBjc3NHZW5lcmF0ZWRDb250ZW50UHJvcCBjb250YWluZWQgIlw8Y291bnRlci1cKHJlc2V0XHxpbmNyZW1lbnRcKVw+Igorc3luIG1hdGNoIGNzc0dlbmVyYXRlZENvbnRlbnRQcm9wIGNvbnRhaW5lZCAiXDxsaXN0LXN0eWxlXCgtXCh0eXBlXHxwb3NpdGlvblx8aW1hZ2VcKVwpXD1cPiIKK3N5biBtYXRjaCBjc3NHZW5lcmF0ZWRDb250ZW50QXR0ciBjb250YWluZWQgIlw8XChuby1cKVw9XChvcGVuXHxjbG9zZVwpLXF1b3RlXD4iCitzeW4gbWF0Y2ggY3NzQXVyYWxBdHRyIGNvbnRhaW5lZCAiXDxsb3dlclw+Igorc3luIG1hdGNoIGNzc0dlbmVyYXRlZENvbnRlbnRBdHRyIGNvbnRhaW5lZCAiXDxcKGxvd2VyXHx1cHBlclwpLVwocm9tYW5cfGFscGhhXHxncmVla1x8bGF0aW5cKVw+Igorc3luIG1hdGNoIGNzc0dlbmVyYXRlZENvbnRlbnRBdHRyIGNvbnRhaW5lZCAiXDxcKGhpcmFnYW5hXHxrYXRha2FuYVwpXCgtaXJvaGFcKVw9XD4iCitzeW4gbWF0Y2ggY3NzR2VuZXJhdGVkQ29udGVudEF0dHIgY29udGFpbmVkICJcPFwoZGVjaW1hbFwoLWxlYWRpbmctemVyb1wpXD1cfGNqay1pZGVvZ3JhcGhpY1wpXD4iCitzeW4ga2V5d29yZCBjc3NHZW5lcmF0ZWRDb250ZW50QXR0ciBjb250YWluZWQgZGlzYyBjaXJjbGUgc3F1YXJlIGhlYnJldyBhcm1lbmlhbiBnZW9yZ2lhbgorc3luIGtleXdvcmQgY3NzR2VuZXJhdGVkQ29udGVudEF0dHIgY29udGFpbmVkIGluc2lkZSBvdXRzaWRlCisKK3N5biBtYXRjaCBjc3NQYWdpbmdQcm9wIGNvbnRhaW5lZCAiXDxwYWdlXCgtYnJlYWstXChiZWZvcmVcfGFmdGVyXHxpbnNpZGVcKVwpXD1cPiIKK3N5biBrZXl3b3JkIGNzc1BhZ2luZ1Byb3AgY29udGFpbmVkIHNpemUgbWFya3MgaW5zaWRlIG9ycGhhbnMgd2lkb3dzCitzeW4ga2V5d29yZCBjc3NQYWdpbmdBdHRyIGNvbnRhaW5lZCBsYW5kc2NhcGUgcG9ydHJhaXQgY3JvcCBjcm9zcyBhbHdheXMgYXZvaWQKKworc3luIGtleXdvcmQgY3NzVUlQcm9wIGNvbnRhaW5lZCBjdXJzb3IKK3N5biBtYXRjaCBjc3NVSVByb3AgY29udGFpbmVkICJcPG91dGxpbmVcKC1cKHdpZHRoXHxzdHlsZVx8Y29sb3JcKVwpXD1cPiIKK3N5biBtYXRjaCBjc3NVSUF0dHIgY29udGFpbmVkICJcPFtuc11cPVtld11cPS1yZXNpemVcPiIKK3N5biBrZXl3b3JkIGNzc1VJQXR0ciBjb250YWluZWQgZGVmYXVsdCBjcm9zc2hhaXIgcG9pbnRlciBtb3ZlIHdhaXQgaGVscAorc3luIGtleXdvcmQgY3NzVUlBdHRyIGNvbnRhaW5lZCB0aGluIHRoaWNrCitzeW4ga2V5d29yZCBjc3NVSUF0dHIgY29udGFpbmVkIGRvdHRlZCBkYXNoZWQgc29saWQgZG91YmxlIGdyb292ZSByaWRnZSBpbnNldCBvdXRzZXQKK3N5biBrZXl3b3JkIGNzc1VJQXR0ciBjb250YWluZWQgaW52ZXJ0CisKK3N5biBtYXRjaCBjc3NSZW5kZXJBdHRyIGNvbnRhaW5lZCAiXDxtYXJrZXJcPiIKK3N5biBtYXRjaCBjc3NSZW5kZXJQcm9wIGNvbnRhaW5lZCAiXDxcKGRpc3BsYXlcfG1hcmtlci1vZmZzZXRcfHVuaWNvZGUtYmlkaVx8d2hpdGUtc3BhY2VcfGxpc3QtaXRlbVx8cnVuLWluXHxpbmxpbmUtdGFibGVcKVw+Igorc3luIGtleXdvcmQgY3NzUmVuZGVyUHJvcCBjb250YWluZWQgcG9zaXRpb24gdG9wIGJvdHRvbSBkaXJlY3Rpb24KK3N5biBtYXRjaCBjc3NSZW5kZXJQcm9wIGNvbnRhaW5lZCAiXDxcKGxlZnRcfHJpZ2h0XClcPiIKK3N5biBrZXl3b3JkIGNzc1JlbmRlckF0dHIgY29udGFpbmVkIGJsb2NrIGlubGluZSBjb21wYWN0CitzeW4gbWF0Y2ggY3NzUmVuZGVyQXR0ciBjb250YWluZWQgIlw8dGFibGVcKC1cKHJvdy1nb3J1cFx8XChoZWFkZXJcfGZvb3RlclwpLWdyb3VwXHxyb3dcfGNvbHVtblwoLWdyb3VwXClcPVx8Y2VsbFx8Y2FwdGlvblwpXClcPVw+Igorc3luIGtleXdvcmQgY3NzUmVuZGVyQXR0ciBjb250YWluZWQgc3RhdGljIHJlbGF0aXZlIGFic29sdXRlIGZpeGVkCitzeW4ga2V5d29yZCBjc3NSZW5kZXJBdHRyIGNvbnRhaW5lZCBsdHIgcnRsIGVtYmVkIGJpZGktb3ZlcnJpZGUgcHJlIG5vd3JhcAorc3luIG1hdGNoIGNzc1JlbmRlckF0dHIgY29udGFpbmVkICJcPGJpZGktb3ZlcnJpZGVcPiIKKworCitzeW4gbWF0Y2ggY3NzQXVyYWxQcm9wIGNvbnRhaW5lZCAiXDxcKHBhdXNlXHxjdWVcKVwoLVwoYmVmb3JlXHxhZnRlclwpXClcPVw+Igorc3luIG1hdGNoIGNzc0F1cmFsUHJvcCBjb250YWluZWQgIlw8XChwbGF5LWR1cmluZ1x8c3BlZWNoLXJhdGVcfHZvaWNlLWZhbWlseVx8cGl0Y2hcKC1yYW5nZVwpXD1cfHNwZWFrXCgtXChwdW5jdHVhdGlvblx8bnVtZXJhbHNcKVwpXD1cKVw+Igorc3luIGtleXdvcmQgY3NzQXVyYWxQcm9wIGNvbnRhaW5lZCB2b2x1bWUgZHVyaW5nIGF6aW11dGggZWxldmF0aW9uIHN0cmVzcyByaWNobmVzcworc3luIG1hdGNoIGNzc0F1cmFsQXR0ciBjb250YWluZWQgIlw8XCh4LVwpXD1cKHNvZnRcfGxvdWRcKVw+Igorc3luIGtleXdvcmQgY3NzQXVyYWxBdHRyIGNvbnRhaW5lZCBzaWxlbnQKK3N5biBtYXRjaCBjc3NBdXJhbEF0dHIgY29udGFpbmVkICJcPHNwZWxsLW91dFw+Igorc3luIGtleXdvcmQgY3NzQXVyYWxBdHRyIGNvbnRhaW5lZCBub24gbWl4CitzeW4gbWF0Y2ggY3NzQXVyYWxBdHRyIGNvbnRhaW5lZCAiXDxcKGxlZnRcfHJpZ2h0XCktc2lkZVw+Igorc3luIG1hdGNoIGNzc0F1cmFsQXR0ciBjb250YWluZWQgIlw8XChmYXJcfGNlbnRlclwpLVwobGVmdFx8Y2VudGVyXHxyaWdodFwpXD4iCitzeW4ga2V5d29yZCBjc3NBdXJhbEF0dHIgY29udGFpbmVkIGxlZnR3YXJkcyByaWdodHdhcmRzIGJlaGluZAorc3luIGtleXdvcmQgY3NzQXVyYWxBdHRyIGNvbnRhaW5lZCBiZWxvdyBsZXZlbCBhYm92ZSBoaWdoZXIKK3N5biBtYXRjaCBjc3NBdXJhbEF0dHIgY29udGFpbmVkICJcPFwoeC1cKVw9XChzbG93XHxmYXN0XClcPiIKK3N5biBrZXl3b3JkIGNzc0F1cmFsQXR0ciBjb250YWluZWQgZmFzdGVyIHNsb3dlcgorc3luIGtleXdvcmQgY3NzQXVyYWxBdHRyIGNvbnRhaW5lZCBtYWxlIGZlbWFsZSBjaGlsZCBjb2RlIGRpZ2l0cyBjb250aW51b3VzCisKK3N5biBtYXRjaCBjc3NUYWJsZVByb3AgY29udGFpbmVkICJcPFwoY2FwdGlvbi1zaWRlXHx0YWJsZS1sYXlvdXRcfGJvcmRlci1jb2xsYXBzZVx8Ym9yZGVyLXNwYWNpbmdcfGVtcHR5LWNlbGxzXHxzcGVhay1oZWFkZXJcKVw+Igorc3luIGtleXdvcmQgY3NzVGFibGVBdHRyIGNvbnRhaW5lZCBmaXhlZCBjb2xsYXBzZSBzZXBhcmF0ZSBzaG93IGhpZGUgb25jZSBhbHdheXMKKworIiBGSVhNRTogVGhpcyBhbGxvd3MgY3NzTWVkaWFCbG9jayBiZWZvcmUgdGhlIHNlbWljb2xvbiwgd2hpY2ggaXMgd3JvbmcuCitzeW4gcmVnaW9uIGNzc0luY2x1ZGUgc3RhcnQ9IkBpbXBvcnQiIGVuZD0iOyIgY29udGFpbnM9Y3NzQ29tbWVudCxjc3NVUkwsY3NzVW5pY29kZUVzY2FwZSxjc3NNZWRpYVR5cGUKK3N5biBtYXRjaCBjc3NCcmFjZXMgY29udGFpbmVkICJbe31dIgorc3luIG1hdGNoIGNzc0Vycm9yIGNvbnRhaW5lZCAie0A8PiIKK3N5biByZWdpb24gY3NzRGVmaW5pdGlvbiB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWNzc0JyYWNlcyBzdGFydD0neycgZW5kPSd9JyBjb250YWlucz1jc3MuKkF0dHIsY3NzLipQcm9wLGNzc0NvbW1lbnQsY3NzVmFsdWUuKixjc3NDb2xvcixjc3NVUkwsY3NzSW1wb3J0YW50LGNzc0Vycm9yLGNzc1N0cmluZ1EsY3NzU3RyaW5nUVEsY3NzRnVuY3Rpb24sY3NzVW5pY29kZUVzY2FwZQorc3luIG1hdGNoIGNzc0JyYWNlRXJyb3IgIn0iCisKK3N5biBtYXRjaCBjc3NQc2V1ZG9DbGFzcyAiOlxTKiIgY29udGFpbnM9Y3NzUHNldWRvQ2xhc3NJZCxjc3NVbmljb2RlRXNjYXBlCitzeW4ga2V5d29yZCBjc3NQc2V1ZG9DbGFzc0lkIGNvbnRhaW5lZCBsaW5rIHZpc2l0ZWQgYWN0aXZlIGhvdmVyIGZvY3VzIGJlZm9yZSBhZnRlciBsZWZ0IHJpZ2h0CitzeW4gbWF0Y2ggY3NzUHNldWRvQ2xhc3NJZCBjb250YWluZWQgIlw8Zmlyc3RcKC1cKGxpbmVcfGxldHRlclx8Y2hpbGRcKVwpXD1cPiIKK3N5biByZWdpb24gY3NzUHNldWRvQ2xhc3NMYW5nIG1hdGNoZ3JvdXA9Y3NzUHNldWRvQ2xhc3NJZCBzdGFydD0iOmxhbmcoIiBlbmQ9IikiIG9uZWxpbmUKKworc3luIHJlZ2lvbiBjc3NDb21tZW50IHN0YXJ0PSIvXCoiIGVuZD0iXCovIgorCitzeW4gbWF0Y2ggY3NzVW5pY29kZUVzY2FwZSAiXFxceFx7MSw2fVxzXD8iCitzeW4gbWF0Y2ggY3NzU3BlY2lhbENoYXJRUSArXFwiKyBjb250YWluZWQKK3N5biBtYXRjaCBjc3NTcGVjaWFsQ2hhclEgK1xcJysgY29udGFpbmVkCitzeW4gcmVnaW9uIGNzc1N0cmluZ1FRIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9Y3NzVW5pY29kZUVzY2FwZSxjc3NTcGVjaWFsQ2hhclFRCitzeW4gcmVnaW9uIGNzc1N0cmluZ1Egc3RhcnQ9KycrIHNraXA9K1xcXFxcfFxcJysgZW5kPSsnKyBjb250YWlucz1jc3NVbmljb2RlRXNjYXBlLGNzc1NwZWNpYWxDaGFyUQorCitpZiBtYWluX3N5bnRheCA9PSAiY3NzIgorICBzeW4gc3luYyBtaW5saW5lcz0xMAorZW5kaWYKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY3NzX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2Nzc19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBjc3NDb21tZW50IENvbW1lbnQKKyAgSGlMaW5rIGNzc1RhZ05hbWUgU3RhdGVtZW50CisgIEhpTGluayBjc3NTZWxlY3Rvck9wIFNwZWNpYWwKKyAgSGlMaW5rIGNzc1NlbGVjdG9yT3AyIFNwZWNpYWwKKyAgSGlMaW5rIGNzc0ZvbnRQcm9wIFN0b3JhZ2VDbGFzcworICBIaUxpbmsgY3NzQ29sb3JQcm9wIFN0b3JhZ2VDbGFzcworICBIaUxpbmsgY3NzVGV4dFByb3AgU3RvcmFnZUNsYXNzCisgIEhpTGluayBjc3NCb3hQcm9wIFN0b3JhZ2VDbGFzcworICBIaUxpbmsgY3NzUmVuZGVyUHJvcCBTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGNzc0F1cmFsUHJvcCBTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGNzc1JlbmRlclByb3AgU3RvcmFnZUNsYXNzCisgIEhpTGluayBjc3NHZW5lcmF0ZWRDb250ZW50UHJvcCBTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGNzc1BhZ2luZ1Byb3AgU3RvcmFnZUNsYXNzCisgIEhpTGluayBjc3NUYWJsZVByb3AgU3RvcmFnZUNsYXNzCisgIEhpTGluayBjc3NVSVByb3AgU3RvcmFnZUNsYXNzCisgIEhpTGluayBjc3NGb250QXR0ciBUeXBlCisgIEhpTGluayBjc3NDb2xvckF0dHIgVHlwZQorICBIaUxpbmsgY3NzVGV4dEF0dHIgVHlwZQorICBIaUxpbmsgY3NzQm94QXR0ciBUeXBlCisgIEhpTGluayBjc3NSZW5kZXJBdHRyIFR5cGUKKyAgSGlMaW5rIGNzc0F1cmFsQXR0ciBUeXBlCisgIEhpTGluayBjc3NHZW5lcmF0ZWRDb250ZW50QXR0ciBUeXBlCisgIEhpTGluayBjc3NQYWdpbmdBdHRyIFR5cGUKKyAgSGlMaW5rIGNzc1RhYmxlQXR0ciBUeXBlCisgIEhpTGluayBjc3NVSUF0dHIgVHlwZQorICBIaUxpbmsgY3NzQ29tbW9uQXR0ciBUeXBlCisgIEhpTGluayBjc3NQc2V1ZG9DbGFzc0lkIFByZVByb2MKKyAgSGlMaW5rIGNzc1BzZXVkb0NsYXNzTGFuZyBDb25zdGFudAorICBIaUxpbmsgY3NzVmFsdWVMZW5ndGggTnVtYmVyCisgIEhpTGluayBjc3NWYWx1ZUludGVnZXIgTnVtYmVyCisgIEhpTGluayBjc3NWYWx1ZU51bWJlciBOdW1iZXIKKyAgSGlMaW5rIGNzc1ZhbHVlQW5nbGUgTnVtYmVyCisgIEhpTGluayBjc3NWYWx1ZVRpbWUgTnVtYmVyCisgIEhpTGluayBjc3NWYWx1ZUZyZXF1ZW5jeSBOdW1iZXIKKyAgSGlMaW5rIGNzc0Z1bmN0aW9uIENvbnN0YW50CisgIEhpTGluayBjc3NVUkwgU3RyaW5nCisgIEhpTGluayBjc3NGdW5jdGlvbk5hbWUgRnVuY3Rpb24KKyAgSGlMaW5rIGNzc0NvbG9yIENvbnN0YW50CisgIEhpTGluayBjc3NJZGVudGlmaWVyIEZ1bmN0aW9uCisgIEhpTGluayBjc3NJbmNsdWRlIEluY2x1ZGUKKyAgSGlMaW5rIGNzc0ltcG9ydGFudCBTcGVjaWFsCisgIEhpTGluayBjc3NCcmFjZXMgRnVuY3Rpb24KKyAgSGlMaW5rIGNzc0JyYWNlRXJyb3IgRXJyb3IKKyAgSGlMaW5rIGNzc0Vycm9yIEVycm9yCisgIEhpTGluayBjc3NJbmNsdWRlIEluY2x1ZGUKKyAgSGlMaW5rIGNzc1VuaWNvZGVFc2NhcGUgU3BlY2lhbAorICBIaUxpbmsgY3NzU3RyaW5nUVEgU3RyaW5nCisgIEhpTGluayBjc3NTdHJpbmdRIFN0cmluZworICBIaUxpbmsgY3NzTWVkaWEgU3BlY2lhbAorICBIaUxpbmsgY3NzTWVkaWFUeXBlIFNwZWNpYWwKKyAgSGlMaW5rIGNzc01lZGlhQ29tbWEgTm9ybWFsCisgIEhpTGluayBjc3NGb250RGVzY3JpcHRvciBTcGVjaWFsCisgIEhpTGluayBjc3NGb250RGVzY3JpcHRvckZ1bmN0aW9uIENvbnN0YW50CisgIEhpTGluayBjc3NGb250RGVzY3JpcHRvclByb3AgU3RvcmFnZUNsYXNzCisgIEhpTGluayBjc3NGb250RGVzY3JpcHRvckF0dHIgVHlwZQorICBIaUxpbmsgY3NzVW5pY29kZVJhbmdlIENvbnN0YW50CisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjc3MiCisKK2lmIG1haW5fc3ludGF4ID09ICdjc3MnCisgIHVubGV0IG1haW5fc3ludGF4CitlbmRpZgorCisiIHZpbTogdHM9OAorCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jdGVybS52aW0gYi9ydW50aW1lL3N5bnRheC9jdGVybS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5YTBkNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2N0ZXJtLnZpbQpAQCAtMCwwICsxLDE5MCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUNlbnR1cnkgVGVybSBDb21tYW5kIFNjcmlwdAorIiBNYWludGFpbmVyOglTZWFuIE0uIE1jS2VlIDxtY2tlZUBtaXNzbGluay5uZXQ+CisiIExhc3QgQ2hhbmdlOgkyMDAyIEFwciAxMworIiBWZXJzaW9uIEluZm86IEAoIyljdGVybS52aW0JMS43CTk3LzEyLzE1IDA5OjIzOjE0CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyJGVU5DVElPTlMKK3N5biBrZXl3b3JkIGN0ZXJtRnVuY3Rpb24JYWJvcnQgYWRkY3IgYWRkbGYgYW5zd2VyIGF0IGF0dHIgYmF0Y2ggYmF1ZAorc3luIGtleXdvcmQgY3Rlcm1GdW5jdGlvbglicmVhayBjYWxsIGNhcHR1cmUgY2QgY2RlbGF5IGNoYXJzZXQgY2xzIGNvbG9yCitzeW4ga2V5d29yZCBjdGVybUZ1bmN0aW9uCWNvbWJhc2UgY29uZmlnIGNvbW1lY3QgY29weSBjcmVhZAorc3luIGtleXdvcmQgY3Rlcm1GdW5jdGlvbgljcmVhZGludCBkZXZwcmVmaXggZGlhbGVyIGRpYWxvZyBkaW1pbnQKK3N5biBrZXl3b3JkIGN0ZXJtRnVuY3Rpb24JZGltbG9nIGRpbXN0ciBkaXNwbGF5IGR0aW1lb3V0IGR3YWl0IGVkaXQKK3N5biBrZXl3b3JkIGN0ZXJtRnVuY3Rpb24JZWRpdG9yIGVtdWxhdGUgZXJhc2UgZXNjbG9vcCBmY3JlYXRlCitzeW4ga2V5d29yZCBjdGVybUZ1bmN0aW9uCWZmbHVzaCBmaWxsY2hhciBmbGFncyBmbHVzaCBmb3BlbiBmcmVhZAorc3luIGtleXdvcmQgY3Rlcm1GdW5jdGlvbglmcmVhZGxuIGZzZWVrIGZ3cml0ZSBmd3JpdGVsbiBnZXQgaGFuZ3VwCitzeW4ga2V5d29yZCBjdGVybUZ1bmN0aW9uCWhlbHAgaGl3YWl0IGh0aW1lIGlnbm9yZSBpbml0IGl0aW1lCitzeW4ga2V5d29yZCBjdGVybUZ1bmN0aW9uCWtleWJvYXJkIGxjaGFyIGxkZWxheSBsZWFybiBsb2NrZmlsZQorc3luIGtleXdvcmQgY3Rlcm1GdW5jdGlvbglsb2NrdGltZSBsb2cgbG9naW4gbG9nb3V0IGxvd2FpdAorc3luIGtleXdvcmQgY3Rlcm1GdW5jdGlvbglsc2VuZCBsdGltZSBtZW1saXN0IG1lbnUgbWtkaXIgbW9kZQorc3luIGtleXdvcmQgY3Rlcm1GdW5jdGlvbgltb2RlbSBuZXRkaWFsb2cgbmV0cG9ydCBub2Vycm9yIHBhZ2VzIHBhcml0eQorc3luIGtleXdvcmQgY3Rlcm1GdW5jdGlvbglwYXVzZSBwb3J0bGlzdCBwcmludGVyIHByb3RvY29sIHF1aXQgcmN2CitzeW4ga2V5d29yZCBjdGVybUZ1bmN0aW9uCXJlYWQgcmVhZGludCByZWFkbiByZWRpYWwgcmVsZWFzZQorc3luIGtleXdvcmQgY3Rlcm1GdW5jdGlvbglyZW1vdGUgcmVuYW1lIHJlc3RhcnQgcmV0cmllcyByZXR1cm4KK3N5biBrZXl3b3JkIGN0ZXJtRnVuY3Rpb24Jcm1kaXIgcnRpbWUgcnVuIHJ1bnggc2Nyb2xsYmFjayBzZW5kCitzeW4ga2V5d29yZCBjdGVybUZ1bmN0aW9uCXNlc3Npb24gc2V0IHNldGNhcCBzZXRjb2xvciBzZXRrZXkKK3N5biBrZXl3b3JkIGN0ZXJtRnVuY3Rpb24Jc2V0c3ltIHNldHZhciBzdGFydHNlcnZlciBzdGF0dXMKK3N5biBrZXl3b3JkIGN0ZXJtRnVuY3Rpb24Jc3RpbWUgc3RvcGJpdHMgc3RvcHNlcnZlciB0ZGVsYXkKK3N5biBrZXl3b3JkIGN0ZXJtRnVuY3Rpb24JdGVybWluYWwgdGltZSB0cmFucyB0eXBlIHVzZW5kIHZlcnNpb24KK3N5biBrZXl3b3JkIGN0ZXJtRnVuY3Rpb24JdmkgdmlkYmxpbmsgdmlkY2FyZCB2aWRvdXQgdmlkdW5kZXIgd2FpdAorc3luIGtleXdvcmQgY3Rlcm1GdW5jdGlvbgl3aWxkc2l6ZSB3Y2xvc2Ugd29wZW4gd29yZGxlbiB3cnUgd3J1Y2hhcgorc3luIGtleXdvcmQgY3Rlcm1GdW5jdGlvbgl4ZmVyIHhtaXQgeHByb3QKK3N5biBtYXRjaCBjdGVybUZ1bmN0aW9uCQkiPyIKKyJzeW4ga2V5d29yZCBjdGVybUZ1bmN0aW9uCWNvbW1lbnQgcmVtYXJrCisKKyJFTkQgRlVOQ1RJT05TCisiSU5URUdFUiBGVU5DVElPTlMKK3N5biBrZXl3b3JkIGN0ZXJtSW50RnVuY3Rpb24JYXNjIGF0b2QgZXZhbCBmaWxlZGF0ZSBmaWxlbW9kZSBmaWxlc2l6ZSBmdGVsbAorc3luIGtleXdvcmQgY3Rlcm1JbnRGdW5jdGlvbglsZW4gdGVybWJpdHMgb3BzeXMgcG9zIHN1bSB0aW1lIHZhbCBtZG1zdGF0CisiRU5EIElOVEVHRVIgRlVOQ1RJT05TCisKKyJTVFJJTkcgRlVOQ1RJT05TCitzeW4ga2V5d29yZCBjdGVybVN0ckZ1bmN0aW9uCWNkYXRlIGN0aW1lIGNociBjaHJkeSBjaHJpbiBjb21pbiBnZXRlbnYKK3N5biBrZXl3b3JkIGN0ZXJtU3RyRnVuY3Rpb24JZ2V0aG9tZWRpciBsZWZ0IG1pZHN0ciByaWdodCBzdHIgdG9sb3dlcgorc3luIGtleXdvcmQgY3Rlcm1TdHJGdW5jdGlvbgl0b3VwcGVyIHVuaXEgY29tc3QgZXhpc3RzIGZlb2YgaGFzY29sb3IKKworIkVORCBTVFJJTkcgRlVOQ1RJT05TCisKKyJQUkVERUZJTkVEIFRFUk0gVkFSSUFCTEVTIFIvVworc3luIGtleXdvcmQgY3Rlcm1QcmVWYXJSVwlmIF9lc2Nsb29wIF9maWxlbmFtZSBfa2VybWl0ZW9sIF9vYnVmc2l6CitzeW4ga2V5d29yZCBjdGVybVByZVZhclJXCV9wb3J0IF9yY3ZzeW5jIF9jYmF1ZCBfcmV2YWwgX3R1cm5jaGFyCitzeW4ga2V5d29yZCBjdGVybVByZVZhclJXCV90eGJsa3NpeiBfdHh3aW5kb3cgX3ZtaW4gX3Z0aW1lIF9jcGFyaXR5CitzeW4ga2V5d29yZCBjdGVybVByZVZhclJXCV9jbnVtYmVyIGZhbHNlIHQgdHJ1ZSBfY3dvcmRsZW4gX2NzdG9wYml0cworc3luIGtleXdvcmQgY3Rlcm1QcmVWYXJSVwlfY21vZGUgX2NlbXVsYXRlIF9jeHByb3QgX2Nsb2dpbiBfY2xvZ291dAorc3luIGtleXdvcmQgY3Rlcm1QcmVWYXJSVwlfY3N0YXJ0c3J2IF9jc3RvcHNydiBfY2NtZGZpbGUgX2N3cnUKK3N5biBrZXl3b3JkIGN0ZXJtUHJlVmFyUlcJX2Nwcm90b2NvbCBfY2FwdGZpbGUgX2NyZW1hcmsgX2NvbWJ1ZnNpegorc3luIGtleXdvcmQgY3Rlcm1QcmVWYXJSVwlsb2dmaWxlCisiRU5EIFBSRURFRklORUQgVEVSTSBWQVJJQUJMRVMgUi9XCisKKyJQUkVERUZJTkVEIFRFUk0gVkFSSUFCTEVTIFIvTworc3luIGtleXdvcmQgY3Rlcm1QcmVWYXJSTwlfMSBfMiBfMyBfNCBfNSBfNiBfNyBfOCBfOSBfY3Vyc2Vzcworc3luIGtleXdvcmQgY3Rlcm1QcmVWYXJSTwlfbG9ja2ZpbGUgX2JhdWQgX2Vycm5vIF9yZXR2YWwgX3Nlcm51bQorc3luIGtleXdvcmQgY3Rlcm1QcmVWYXJSTwlfdGltZW91dCBfcm93IF9jb2wgX3ZlcnNpb24KKyJFTkQgUFJFREVGSU5FRCBURVJNIFZBUklBQkxFUyBSL08KKworc3luIGtleXdvcmQgY3Rlcm1PcGVyYXRvciBub3QgbW9kIGVxIG5lIGd0IGxlIGx0IGdlIHhvciBhbmQgb3Igc2hyIG5vdCBzaGwKKworIlNZTUJPTFMKK3N5biBtYXRjaCAgIEN0ZXJtU3ltYm9scwkgInwiCisic3luIGtleXdvcmQgY3Rlcm1PcGVyYXRvcnMgKyAtICogLyAlID0gIT0gPiA8ID49IDw9ICYgfCBeICEgPDwgPj4KKyJFTkQgU1lNQk9MUworCisiU1RBVEVNRU5UCitzeW4ga2V5d29yZCBjdGVybVN0YXRlbWVudAlvZmYKK3N5biBrZXl3b3JkIGN0ZXJtU3RhdGVtZW50CWRpc2sgb3ZlcndyaXRlIGFwcGVuZCBzcG9vbCBub25lCitzeW4ga2V5d29yZCBjdGVybVN0YXRlbWVudAllY2hvIHZpZXcgd3JhcAorIkVORCBTVEFURU1FTlQKKworIlRZUEUKKyJzeW4ga2V5d29yZCBjdGVybVR5cGUKKyJFTkQgVFlQRQorCisiVVNFUkxJQiBGVU5DVElPTlMKKyJzeW4ga2V5d29yZCBjdGVybUxpYkZ1bmMKKyJFTkQgVVNFUkxJQiBGVU5DVElPTlMKKworIkxBQkVMCitzeW4ga2V5d29yZCBjdGVybUxhYmVsICAgIGNhc2UgZGVmYXVsdAorIkVORCBMQUJFTAorCisiQ09ORElUSU9OQUwKK3N5biBrZXl3b3JkIGN0ZXJtQ29uZGl0aW9uYWwgb24gZW5kb24KK3N5biBrZXl3b3JkIGN0ZXJtQ29uZGl0aW9uYWwgcHJvYyBlbmRwcm9jCitzeW4ga2V5d29yZCBjdGVybUNvbmRpdGlvbmFsIGZvciBpbiBkbyBlbmRmb3IKK3N5biBrZXl3b3JkIGN0ZXJtQ29uZGl0aW9uYWwgaWYgZWxzZSBlbHNlaWYgZW5kaWYgaWZlcnJvcgorc3luIGtleXdvcmQgY3Rlcm1Db25kaXRpb25hbCBzd2l0Y2ggZW5kc3dpdGNoCitzeW4ga2V5d29yZCBjdGVybUNvbmRpdGlvbmFsIHJlcGVhdCB1bnRpbAorIkVORCBDT05ESVRJT05BTAorCisiUkVQRUFUCitzeW4ga2V5d29yZCBjdGVybVJlcGVhdCAgICB3aGlsZQorIkVORCBSRVBFQVQKKworIiBGdW5jdGlvbiBhcmd1bWVudHMgKGVnICQxICQyICQzKQorc3luIG1hdGNoICBjdGVybUZ1bmNBcmcJIlwkWzEtOV0iCisKK3N5biBrZXl3b3JkIGN0ZXJtVG9kbyBjb250YWluZWQgVE9ETworCitzeW4gbWF0Y2ggIGN0ZXJtTnVtYmVyCQkiXDxcZFwrXCh1XD1sXD1cfGx1XHxmXClcPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoICBjdGVybU51bWJlcgkJIlw8XGRcK1wuXGQqXChlWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggIGN0ZXJtTnVtYmVyCQkiXC5cZFwrXChlWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGhvdXQgZG90LCB3aXRoIGV4cG9uZW50CitzeW4gbWF0Y2ggIGN0ZXJtTnVtYmVyCQkiXDxcZFwrZVstK11cPVxkXCtbZmxdXD1cPiIKKyJoZXggbnVtYmVyCitzeW4gbWF0Y2ggIGN0ZXJtTnVtYmVyCQkiMHhbMC05YS1mXVwrXCh1XD1sXD1cfGx1XClcPiIKKworc3luIG1hdGNoICBjdGVybUNvbW1lbnQJCSIhW149XS4qJCIgY29udGFpbnM9Y3Rlcm1Ub2RvCitzeW4gbWF0Y2ggIGN0ZXJtQ29tbWVudAkJIiEkIgorc3luIG1hdGNoICBjdGVybUNvbW1lbnQJCSJcKi4qJCIgY29udGFpbnM9Y3Rlcm1Ub2RvCitzeW4gcmVnaW9uICBjdGVybUNvbW1lbnQJc3RhcnQ9ImNvbW1lbnQiIGVuZD0iJCIgY29udGFpbnM9Y3Rlcm1Ub2RvCitzeW4gcmVnaW9uICBjdGVybUNvbW1lbnQJc3RhcnQ9InJlbWFyayIgZW5kPSIkIiBjb250YWlucz1jdGVybVRvZG8KKworc3luIHJlZ2lvbiBjdGVybVZhcgkJc3RhcnQ9IlwkKCIgIGVuZD0iKSIKKworIiBTdHJpbmcgYW5kIENoYXJhY3RlciBjb250c3RhbnRzCisiIEhpZ2hsaWdodCBzcGVjaWFsIGNoYXJhY3RlcnMgKHRob3NlIHdoaWNoIGhhdmUgYSBiYWNrc2xhc2gpIGRpZmZlcmVudGx5CitzeW4gbWF0Y2ggICBjdGVybVNwZWNpYWwJCWNvbnRhaW5lZCAiXFxcZFxkXGRcfFxcLiIKK3N5biBtYXRjaCAgIGN0ZXJtU3BlY2lhbAkJY29udGFpbmVkICJcXi4iCitzeW4gcmVnaW9uICBjdGVybVN0cmluZwkJCXN0YXJ0PSsiKyAgc2tpcD0rXFxcXFx8XFwiKyAgZW5kPSsiKyAgY29udGFpbnM9Y3Rlcm1TcGVjaWFsLGN0ZXJtVmFyLGN0ZXJtU3ltYm9scworc3luIG1hdGNoICAgY3Rlcm1DaGFyYWN0ZXIJCSInW15cXF0nIgorc3luIG1hdGNoICAgY3Rlcm1TcGVjaWFsQ2hhcmFjdGVyCSInXFwuJyIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY3Rlcm1fc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfY3Rlcm1fc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworCUhpTGluayBjdGVybVN0YXRlbWVudAkJU3RhdGVtZW50CisJSGlMaW5rIGN0ZXJtRnVuY3Rpb24JCVN0YXRlbWVudAorCUhpTGluayBjdGVybVN0ckZ1bmN0aW9uCVN0YXRlbWVudAorCUhpTGluayBjdGVybUludEZ1bmN0aW9uCVN0YXRlbWVudAorCUhpTGluayBjdGVybUxhYmVsCQlTdGF0ZW1lbnQKKwlIaUxpbmsgY3Rlcm1Db25kaXRpb25hbAlTdGF0ZW1lbnQKKwlIaUxpbmsgY3Rlcm1SZXBlYXQJCVN0YXRlbWVudAorCUhpTGluayBjdGVybUxpYkZ1bmMJCVVzZXJEZWZGdW5jCisJSGlMaW5rIGN0ZXJtVHlwZQkJVHlwZQorCUhpTGluayBjdGVybUZ1bmNBcmcJCVByZUNvbmRpdAorCisJSGlMaW5rIGN0ZXJtUHJlVmFyUk8JCVByZUNvbmRpdAorCUhpTGluayBjdGVybVByZVZhclJXCQlQcmVDb25kaXRCb2xkCisJSGlMaW5rIGN0ZXJtVmFyCQlUeXBlCisKKwlIaUxpbmsgY3Rlcm1Db21tZW50CQlDb21tZW50CisKKwlIaUxpbmsgY3Rlcm1DaGFyYWN0ZXIJCVNwZWNpYWxDaGFyCisJSGlMaW5rIGN0ZXJtU3BlY2lhbAkJU3BlY2lhbAorCUhpTGluayBjdGVybVNwZWNpYWxDaGFyYWN0ZXIJU3BlY2lhbENoYXIKKwlIaUxpbmsgY3Rlcm1TeW1ib2xzCQlTcGVjaWFsCisJSGlMaW5rIGN0ZXJtU3RyaW5nCQlTdHJpbmcKKwlIaUxpbmsgY3Rlcm1Ub2RvCQlUb2RvCisJSGlMaW5rIGN0ZXJtT3BlcmF0b3IJCVN0YXRlbWVudAorCUhpTGluayBjdGVybU51bWJlcgkJTnVtYmVyCisKKwkiIHJlZGVmaW5lIHRoZSBjb2xvcnMKKwkiaGkgUHJlQ29uZGl0Qm9sZAl0ZXJtPWJvbGQgY3Rlcm1mZz0xIGN0ZXJtPWJvbGQgZ3VpZmc9UHVycGxlIGd1aT1ib2xkCisJImhpIFNwZWNpYWwJdGVybT1ib2xkIGN0ZXJtZmc9NiBndWlmZz1TbGF0ZUJsdWUgZ3VpPXVuZGVybGluZQorCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImN0ZXJtIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY3RybGgudmltIGIvcnVudGltZS9zeW50YXgvY3RybGgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNWMyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9jdHJsaC52aW0KQEAgLTAsMCArMSwzMyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUNUUkwtSCAoZS5nLiwgQVNDSUkgbWFucGFnZXMpCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAxIEFwciAyNQorCisiIEV4aXN0aW5nIHN5bnRheCBpcyBrZXB0LCB0aGlzIGZpbGUgY2FuIGJlIHVzZWQgYXMgYW4gYWRkaXRpb24KKworIiBSZWNvZ25pemUgdW5kZXJsaW5lZCB0ZXh0OiBfXkh4CitzeW50YXggbWF0Y2ggQ3RybEhVbmRlcmxpbmUgL19cYi4vICBjb250YWlucz1DdHJsSEhpZGUKKworIiBSZWNvZ25pemUgYm9sZCB0ZXh0OiB4Xkh4CitzeW50YXggbWF0Y2ggQ3RybEhCb2xkIC9cKC5cKVxiXDEvICBjb250YWlucz1DdHJsSEhpZGUKKworIiBIaWRlIHRoZSBDVFJMLUggKGJhY2tzcGFjZSkKK3N5bnRheCBtYXRjaCBDdHJsSEhpZGUgLy5cYi8gIGNvbnRhaW5lZAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jdHJsaF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jdHJsaF9zeW50YXhfaW5pdHMgPSAxCisgICAgaGkgbGluayBDdHJsSEhpZGUgSWdub3JlCisgICAgaGkgQ3RybEhVbmRlcmxpbmUgdGVybT11bmRlcmxpbmUgY3Rlcm09dW5kZXJsaW5lIGd1aT11bmRlcmxpbmUKKyAgICBoaSBDdHJsSEJvbGQgdGVybT1ib2xkIGN0ZXJtPWJvbGQgZ3VpPWJvbGQKKyAgZWxzZQorICAgIGhpIGRlZiBsaW5rIEN0cmxISGlkZSBJZ25vcmUKKyAgICBoaSBkZWYgQ3RybEhVbmRlcmxpbmUgdGVybT11bmRlcmxpbmUgY3Rlcm09dW5kZXJsaW5lIGd1aT11bmRlcmxpbmUKKyAgICBoaSBkZWYgQ3RybEhCb2xkIHRlcm09Ym9sZCBjdGVybT1ib2xkIGd1aT1ib2xkCisgIGVuZGlmCitlbmRpZgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY3VwbC52aW0gYi9ydW50aW1lL3N5bnRheC9jdXBsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjgwNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY3VwbC52aW0KQEAgLTAsMCArMSwxMzAgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglDVVBMCisiIE1haW50YWluZXI6CUpvaG4gQ29vayA8am9obi5jb29rQGtsYS10ZW5jb3IuY29tPgorIiBMYXN0IENoYW5nZToJMjAwMSBBcHIgMjUKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIHRoaXMgbGFuZ3VhZ2UgaXMgb2JsaXZpb3VzIHRvIGNhc2UuCitzeW4gY2FzZSBpZ25vcmUKKworIiBBIGJ1bmNoIG9mIGtleXdvcmRzCitzeW4ga2V5d29yZCBjdXBsSGVhZGVyIG5hbWUgcGFydG5vIGRhdGUgcmV2aXNpb24gcmV2IGRlc2lnbmVyIGNvbXBhbnkgbmV4dGdyb3VwPWN1cGxIZWFkZXJDb250ZW50cworc3luIGtleXdvcmQgY3VwbEhlYWRlciBhc3NlbWJseSBhc3N5IGxvY2F0aW9uIGRldmljZSBuZXh0Z3JvdXA9Y3VwbEhlYWRlckNvbnRlbnRzCisKK3N5biBrZXl3b3JkIGN1cGxUb2RvIGNvbnRhaW5lZCBUT0RPIFhYWCBGSVhNRQorCisiIGN1cGxIZWFkZXJDb250ZW50cyB1c2VzIGRlZmF1bHQgaGlnaGxpZ2h0aW5nIGV4Y2VwdCBmb3IgbnVtYmVycworc3luIG1hdGNoIGN1cGxIZWFkZXJDb250ZW50cyAiLlwrOyJtZT1lLTEgY29udGFpbnM9Y3VwbE51bWJlciBjb250YWluZWQKKworIiBTdHJpbmcgY29udHN0YW50cworc3luIHJlZ2lvbiBjdXBsU3RyaW5nIHN0YXJ0PSsnKyBlbmQ9KycrCitzeW4gcmVnaW9uIGN1cGxTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisKKworc3luIGtleXdvcmQgY3VwbFN0YXRlbWVudCBhcHBlbmQgY29uZGl0aW9uCitzeW4ga2V5d29yZCBjdXBsU3RhdGVtZW50IGRlZmF1bHQgZWxzZQorc3luIGtleXdvcmQgY3VwbFN0YXRlbWVudCBmaWVsZCBmbGQgZm9ybWF0IGZ1bmN0aW9uIGZ1c2UKK3N5biBrZXl3b3JkIGN1cGxTdGF0ZW1lbnQgZ3JvdXAgaWYganVtcCBsb2MKK3N5biBrZXl3b3JkIGN1cGxTdGF0ZW1lbnQgbWFjcm8gbWluIG5vZGUgb3V0CitzeW4ga2V5d29yZCBjdXBsU3RhdGVtZW50IHBpbiBwaW5ub2RlIHByZXNlbnQgdGFibGUKK3N5biBrZXl3b3JkIGN1cGxTdGF0ZW1lbnQgc2VxdWVuY2Ugc2VxdWVuY2VkIHNlcXVlbmNlamsgc2VxdWVuY2VycyBzZXF1ZW5jZXQKKworc3luIGtleXdvcmQgY3VwbEZ1bmN0aW9uIGxvZzIgbG9nOCBsb2cxNiBsb2cKKworIiBWYWxpZCBpbnRlZ2VyIG51bWJlciBmb3JtYXRzIChkZWNpbWFsLCBiaW5hcnksIG9jdGFsLCBoZXgpCitzeW4gbWF0Y2ggY3VwbE51bWJlciAiXDxbLStdXD1bMC05XVwrXD4iCitzeW4gbWF0Y2ggY3VwbE51bWJlciAiJ2QnWzAtOV1cK1w+Igorc3luIG1hdGNoIGN1cGxOdW1iZXIgIidiJ1swMXhdXCtcPiIKK3N5biBtYXRjaCBjdXBsTnVtYmVyICInbydbMC03eF1cK1w+Igorc3luIG1hdGNoIGN1cGxOdW1iZXIgIidoJ1swLTlhLWZ4XVwrXD4iCisKKyIgb3BlcmF0b3JzCitzeW4gbWF0Y2ggY3VwbExvZ2ljYWxPcGVyYXRvciAiWyEjJiRdIgorc3luIG1hdGNoIGN1cGxBcml0aG1ldGljT3BlcmF0b3IgIlstKyovJV0iCitzeW4gbWF0Y2ggY3VwbEFyaXRobWV0aWNPcGVyYXRvciAiXCpcKiIKK3N5biBtYXRjaCBjdXBsQXNzaWdubWVudE9wZXJhdG9yICI6XD09Igorc3luIG1hdGNoIGN1cGxFcXVhbGl0eU9wZXJhdG9yICI6Igorc3luIG1hdGNoIGN1cGxUcnV0aFRhYmxlT3BlcmF0b3IgIj0+IgorCisiIFNpZ25hbCBleHRlbnNpb25zCitzeW4gbWF0Y2ggY3VwbEV4dGVuc2lvbiAiXC5bYXNdW3ByXVw+Igorc3luIG1hdGNoIGN1cGxFeHRlbnNpb24gIlwub2VcPiIKK3N5biBtYXRjaCBjdXBsRXh0ZW5zaW9uICJcLm9lbXV4XD4iCitzeW4gbWF0Y2ggY3VwbEV4dGVuc2lvbiAiXC5bZGxzcmprXVw+Igorc3luIG1hdGNoIGN1cGxFeHRlbnNpb24gIlwuY2tcPiIKK3N5biBtYXRjaCBjdXBsRXh0ZW5zaW9uICJcLmRxXD4iCitzeW4gbWF0Y2ggY3VwbEV4dGVuc2lvbiAiXC5ja211eFw+Igorc3luIG1hdGNoIGN1cGxFeHRlbnNpb24gIlwudGVjXD4iCitzeW4gbWF0Y2ggY3VwbEV4dGVuc2lvbiAiXC5jbnRcPiIKKworc3luIG1hdGNoIGN1cGxSYW5nZU9wZXJhdG9yICJcLlwuIiBjb250YWluZWQKKworIiBtYXRjaCByYW5nZXMgbGlrZSBtZW1hZHI6WzAwMDAuLjFGRkZdCisiIGFuZCBoaWdobGlnaHQgYm90aCB0aGUgbnVtYmVycyBhbmQgdGhlIC4uIG9wZXJhdG9yCitzeW4gbWF0Y2ggY3VwbE51bWJlclJhbmdlICJcPFx4XCtcLlwuXHhcK1w+IiBjb250YWlucz1jdXBsUmFuZ2VPcGVyYXRvcgorCisiIG1hdGNoIHZlY3RvcnMgb2YgdHlwZSBbbmFtZTMuLjBdIChkZWNpbWFsIG51bWJlcnMgb25seSkKKyIgYnV0IGFzc2lnbiB0aGVtIG5vIHNwZWNpYWwgaGlnaGxpZ2h0aW5nIGV4Y2VwdCBmb3IgdGhlIC4uIG9wZXJhdG9yCitzeW4gbWF0Y2ggY3VwbEJpdFZlY3RvciAiXDxcYVwrXGRcK1wuXC5cZFwrXD4iIGNvbnRhaW5zPWN1cGxSYW5nZU9wZXJhdG9yCisKKyIgb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzCitzeW4gbWF0Y2ggY3VwbFNwZWNpYWxDaGFyICJbXFtcXSgpe30sO10iCisKKyIgZGlyZWN0aXZlcworIiAoZGVmaW5lIHRoZXNlIGFmdGVyIGN1cGxPcGVyYXRvciBzbyAkeHh4IG92ZXJyaWRlcyAkKQorc3luIG1hdGNoIGN1cGxEaXJlY3RpdmUgIlwkbXNnIgorc3luIG1hdGNoIGN1cGxEaXJlY3RpdmUgIlwkbWFjcm8iCitzeW4gbWF0Y2ggY3VwbERpcmVjdGl2ZSAiXCRtZW5kIgorc3luIG1hdGNoIGN1cGxEaXJlY3RpdmUgIlwkcmVwZWF0Igorc3luIG1hdGNoIGN1cGxEaXJlY3RpdmUgIlwkcmVwZW5kIgorc3luIG1hdGNoIGN1cGxEaXJlY3RpdmUgIlwkZGVmaW5lIgorc3luIG1hdGNoIGN1cGxEaXJlY3RpdmUgIlwkaW5jbHVkZSIKKworIiBtdWx0aS1saW5lIGNvbW1lbnRzCitzeW4gcmVnaW9uIGN1cGxDb21tZW50IHN0YXJ0PSsvXCorIGVuZD0rXCovKyBjb250YWlucz1jdXBsTnVtYmVyLGN1cGxUb2RvCisKK3N5biBzeW5jIG1pbmxpbmVzPTEKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY3VwbF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jdXBsX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisgIEhpTGluayBjdXBsSGVhZGVyCWN1cGxTdGF0ZW1lbnQKKyAgSGlMaW5rIGN1cGxMb2dpY2FsT3BlcmF0b3IJIGN1cGxPcGVyYXRvcgorICBIaUxpbmsgY3VwbFJhbmdlT3BlcmF0b3IJIGN1cGxPcGVyYXRvcgorICBIaUxpbmsgY3VwbEFyaXRobWV0aWNPcGVyYXRvciBjdXBsT3BlcmF0b3IKKyAgSGlMaW5rIGN1cGxBc3NpZ25tZW50T3BlcmF0b3IgY3VwbE9wZXJhdG9yCisgIEhpTGluayBjdXBsRXF1YWxpdHlPcGVyYXRvcgkgY3VwbE9wZXJhdG9yCisgIEhpTGluayBjdXBsVHJ1dGhUYWJsZU9wZXJhdG9yIGN1cGxPcGVyYXRvcgorICBIaUxpbmsgY3VwbE9wZXJhdG9yCWN1cGxTdGF0ZW1lbnQKKyAgSGlMaW5rIGN1cGxGdW5jdGlvbgljdXBsU3RhdGVtZW50CisgIEhpTGluayBjdXBsU3RhdGVtZW50IFN0YXRlbWVudAorICBIaUxpbmsgY3VwbE51bWJlclJhbmdlIGN1cGxOdW1iZXIKKyAgSGlMaW5rIGN1cGxOdW1iZXIJICBjdXBsU3RyaW5nCisgIEhpTGluayBjdXBsU3RyaW5nCVN0cmluZworICBIaUxpbmsgY3VwbENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgY3VwbEV4dGVuc2lvbiAgIGN1cGxTcGVjaWFsCisgIEhpTGluayBjdXBsU3BlY2lhbENoYXIgY3VwbFNwZWNpYWwKKyAgSGlMaW5rIGN1cGxTcGVjaWFsCVNwZWNpYWwKKyAgSGlMaW5rIGN1cGxEaXJlY3RpdmUgUHJlUHJvYworICBIaUxpbmsgY3VwbFRvZG8JVG9kbworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjdXBsIgorIiB2aW06dHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY3VwbHNpbS52aW0gYi9ydW50aW1lL3N5bnRheC9jdXBsc2ltLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGEzMGNlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY3VwbHNpbS52aW0KQEAgLTAsMCArMSw4MCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUNVUEwgc2ltdWxhdGlvbgorIiBNYWludGFpbmVyOglKb2huIENvb2sgPGpvaG4uY29va0BrbGEtdGVuY29yLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgQXByIDI1CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBSZWFkIHRoZSBDVVBMIHN5bnRheCB0byBzdGFydCB3aXRoCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9jdXBsLnZpbQorZWxzZQorICBydW50aW1lISBzeW50YXgvY3VwbC52aW0KKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworIiBvbWl0IGRlZmluaXRpb24tc3BlY2lmaWMgc3R1ZmYKK3N5biBjbGVhciBjdXBsU3RhdGVtZW50CitzeW4gY2xlYXIgY3VwbEZ1bmN0aW9uCitzeW4gY2xlYXIgY3VwbExvZ2ljYWxPcGVyYXRvcgorc3luIGNsZWFyIGN1cGxBcml0aG1ldGljT3BlcmF0b3IKK3N5biBjbGVhciBjdXBsQXNzaWdubWVudE9wZXJhdG9yCitzeW4gY2xlYXIgY3VwbEVxdWFsaXR5T3BlcmF0b3IKK3N5biBjbGVhciBjdXBsVHJ1dGhUYWJsZU9wZXJhdG9yCitzeW4gY2xlYXIgY3VwbEV4dGVuc2lvbgorCisiIHNpbXVsYXRpb24gb3JkZXIgc3RhdGVtZW50CitzeW4gbWF0Y2ggIGN1cGxzaW1PcmRlciAib3JkZXI6IiBuZXh0Z3JvdXA9Y3VwbHNpbU9yZGVyU3BlYyBza2lwZW1wdHkKK3N5biByZWdpb24gY3VwbHNpbU9yZGVyU3BlYyBzdGFydD0iLiIgZW5kPSI7Im1lPWUtMSBjb250YWlucz1jdXBsQ29tbWVudCxjdXBsc2ltT3JkZXJGb3JtYXQsY3VwbEJpdFZlY3RvcixjdXBsU3BlY2lhbENoYXIsY3VwbExvZ2ljYWxPcGVyYXRvcixjdXBsQ29tbWFPcGVyYXRvciBjb250YWluZWQKKworIiBzaW11bGF0aW9uIGJhc2Ugc3RhdGVtZW50CitzeW4gbWF0Y2ggICBjdXBsc2ltQmFzZSAiYmFzZToiIG5leHRncm91cD1jdXBsc2ltQmFzZVNwZWMgc2tpcGVtcHR5CitzeW4gcmVnaW9uICBjdXBsc2ltQmFzZVNwZWMgc3RhcnQ9Ii4iIGVuZD0iOyJtZT1lLTEgY29udGFpbnM9Y3VwbENvbW1lbnQsY3VwbHNpbUJhc2VUeXBlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgY3VwbHNpbUJhc2VUeXBlIG9jdGFsIGRlY2ltYWwgaGV4IGNvbnRhaW5lZAorCisiIHNpbXVsYXRpb24gdmVjdG9ycyBzdGF0ZW1lbnQKK3N5biBtYXRjaCBjdXBsc2ltVmVjdG9ycyAidmVjdG9yczoiCisKKyIgc2ltdWxhdG9yIGZvcm1hdCBjb250cm9sCitzeW4gbWF0Y2ggY3VwbHNpbU9yZGVyRm9ybWF0ICIlXGRcK1w+IiBjb250YWluZWQKKworIiBzaW11bGF0b3IgY29udHJvbAorc3luIG1hdGNoIGN1cGxzaW1TdGltdWx1cyAiWzEwY2tweF1cKyIKK3N5biBtYXRjaCBjdXBsc2ltU3RpbXVsdXMgKydcKFx4XHx4XClcKycrCitzeW4gbWF0Y2ggY3VwbHNpbU91dHB1dCAiW2xoem54Kl1cKyIKK3N5biBtYXRjaCBjdXBsc2ltT3V0cHV0ICsiXHhcKyIrCisKK3N5biBzeW5jIG1pbmxpbmVzPTEKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY3VwbHNpbV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jdXBsc2ltX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBhcHBlbmQgdG8gdGhlIGhpZ2hsaWdodGluZyBsaW5rcyBpbiBjdXBsLnZpbQorICAiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyAgSGlMaW5rIGN1cGxzaW1PcmRlcgkJY3VwbFN0YXRlbWVudAorICBIaUxpbmsgY3VwbHNpbUJhc2UJCWN1cGxTdGF0ZW1lbnQKKyAgSGlMaW5rIGN1cGxzaW1CYXNlVHlwZQljdXBsU3RhdGVtZW50CisgIEhpTGluayBjdXBsc2ltVmVjdG9ycwkJY3VwbFN0YXRlbWVudAorICBIaUxpbmsgY3VwbHNpbVN0aW11bHVzCWN1cGxOdW1iZXIKKyAgSGlMaW5rIGN1cGxzaW1PdXRwdXQJCWN1cGxOdW1iZXIKKyAgSGlMaW5rIGN1cGxzaW1PcmRlckZvcm1hdAljdXBsTnVtYmVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImN1cGxzaW0iCisiIHZpbTp0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jdnMudmltIGIvcnVudGltZS9zeW50YXgvY3ZzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGIyYTgwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY3ZzLnZpbQpAQCAtMCwwICsxLDQzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJQ1ZTIGNvbW1pdCBmaWxlCisiIE1haW50YWluZXI6CU1hdHQgRHVuZm9yZCAoem9vdEB6b3Rpa29zLmNvbSkKKyIgVVJMOgkJaHR0cDovL3d3dy56b3Rpa29zLmNvbS9kb3dubG9hZHMvY3ZzLnZpbQorIiBMYXN0IENoYW5nZToJU2F0IE5vdiAyNCAyMzoyNToxMSBDRVQgMjAwMQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorCXN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisJZmluaXNoCitlbmRpZgorCitzeW4gcmVnaW9uIGN2c0xpbmUgc3RhcnQ9Il5DVlM6ICIgZW5kPSIkIiBjb250YWlucz1jdnNGaWxlLGN2c0NvbSxjdnNGaWxlcyxjdnNUYWcKK3N5biBtYXRjaCBjdnNGaWxlICBjb250YWluZWQgIiBcdFwoXChcU1wrXCkgXClcKyIKK3N5biBtYXRjaCBjdnNUYWcgICBjb250YWluZWQgIiBUYWc6Igorc3luIG1hdGNoIGN2c0ZpbGVzIGNvbnRhaW5lZCAiXChBZGRlZFx8TW9kaWZpZWRcfFJlbW92ZWRcKSBGaWxlczoiCitzeW4gcmVnaW9uIGN2c0NvbSBzdGFydD0iQ29tbWl0dGluZyBpbiIgZW5kPSIkIiBjb250YWlucz1jdnNEaXIgY29udGFpbmVkIGV4dGVuZCBrZWVwZW5kCitzeW4gbWF0Y2ggY3ZzRGlyICAgY29udGFpbmVkICJcU1wrJCIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY3ZzX3N5bl9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX2N2c19zeW5faW5pdHMgPSAxCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisJZWxzZQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKwllbmRpZgorCisJSGlMaW5rIGN2c0xpbmUJCUNvbW1lbnQKKwlIaUxpbmsgY3ZzRGlyCQljdnNGaWxlCisJSGlMaW5rIGN2c0ZpbGUJCUNvbnN0YW50CisJSGlMaW5rIGN2c0ZpbGVzCQljdnNDb20KKwlIaUxpbmsgY3ZzVGFnCQljdnNDb20KKwlIaUxpbmsgY3ZzQ29tCQlTdGF0ZW1lbnQKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjdnMiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jdnNyYy52aW0gYi9ydW50aW1lL3N5bnRheC9jdnNyYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1MTk3OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2N2c3JjLnZpbQpAQCAtMCwwICsxLDQ5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIENWUyBSQyBGaWxlCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3N5bnRheC9wY3AvY3ZzcmMvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDUtMDYKKyIgYXJjaC10YWc6CSAgICAxOTEwZjJhOC02NmY0LTRkZGUtOWQxYS0yOTc1NjY5MzQ1MzUKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgc3RyaW5ncworc3luIHJlZ2lvbiAgY3ZzcmNTdHJpbmcJICAgIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXFxcIisgZW5kPSsiXHwkKworc3luIHJlZ2lvbiAgY3ZzcmNTdHJpbmcJICAgIHN0YXJ0PSsnKyBza2lwPStcXFxcXHxcXFxcJysgZW5kPSsnXHwkKworCisiIG51bWJlcnMKK3N5biBtYXRjaCAgIGN2c3JjTnVtYmVyCSAgICAiXDxcZFwrXD4iCisKKyIgY29tbWFuZHMKK3N5biBtYXRjaCAgIGN2c3JjQmVnaW4JICAgICJeIiBuZXh0Z3JvdXA9Y3ZzcmNDb21tYW5kIHNraXB3aGl0ZQorCitzeW4gcmVnaW9uICBjdnNyY0NvbW1hbmQgICAgY29udGFpbmVkIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9Y3ZzcmNDb21tYW5kIHN0YXJ0PSJhZGRcfGFkbWluXHxjaGVja291dFx8Y29tbWl0XHxjdnNcfGRpZmZcfGV4cG9ydFx8aGlzdG9yeVx8aW1wb3J0XHxpbml0XHxsb2dcfHJkaWZmXHxyZWxlYXNlXHxyZW1vdmVcfHJ0YWdcfHN0YXR1c1x8dGFnXHx1cGRhdGUiIGVuZD0iJCIgY29udGFpbnM9Y3ZzcmNPcHRpb24sY3ZzcmNTdHJpbmcsY3ZzcmNOdW1iZXIga2VlcGVuZAorCisiIG9wdGlvbnMKK3N5biBtYXRjaCAgIGN2c3JjT3B0aW9uCSAgICAiLVxhXCsiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2N2c3JjX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2N2c3JjX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGN2c3JjU3RyaW5nCVN0cmluZworICBIaUxpbmsgY3ZzcmNOdW1iZXIJTnVtYmVyCisgIEhpTGluayBjdnNyY0NvbW1hbmQJS2V5d29yZAorICBIaUxpbmsgY3ZzcmNPcHRpb24JSWRlbnRpZmllcgorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiY3ZzcmMiCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2N3ZWIudmltIGIvcnVudGltZS9zeW50YXgvY3dlYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA2MmIwYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2N3ZWIudmltCkBAIC0wLDAgKzEsODAgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglDV0VCCisiIE1haW50YWluZXI6CUFuZHJlYXMgU2NoZXJlciA8YW5kcmVhcy5zY2hlcmVyQHBvYm94LmNvbT4KKyIgTGFzdCBDaGFuZ2U6CUFwcmlsIDMwLCAyMDAxCisKKyIgRGV0YWlscyBvZiB0aGUgQ1dFQiBsYW5ndWFnZSBjYW4gYmUgZm91bmQgaW4gdGhlIGFydGljbGUgYnkgRG9uYWxkIEUuIEtudXRoCisiIGFuZCBTaWx2aW8gTGV2eSwgIlRoZSBDV0VCIFN5c3RlbSBvZiBTdHJ1Y3R1cmVkIERvY3VtZW50YXRpb24iLCBpbmNsdWRlZCBhcworIiBmaWxlICJjd2VibWFuLnRleCIgaW4gdGhlIHN0YW5kYXJkIENXRUIgZGlzdHJpYnV0aW9uLCBhdmFpbGFibGUgZm9yCisiIGFub255bW91cyBmdHAgYXQgZnRwOi8vbGFicmVhLnN0YW5mb3JkLmVkdS9wdWIvY3dlYi8uCisKKyIgVE9ETzogU2VjdGlvbiBuYW1lcyBhbmQgQy9DKysgY29tbWVudHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgVGVYIG1hdGVyaWFsLgorIiBUT0RPOiBUaGUgY3VycmVudCB2ZXJzaW9uIHN3aXRjaGVzIHN5bnRheCBoaWdobGlnaHRpbmcgb2ZmIGZvciBzZWN0aW9uCisiIFRPRE86IG5hbWVzLCBhbmQgbGVhdmVzIEMvQysrIGNvbW1lbnRzIGFzIHN1Y2guIChPbiB0aGUgb3RoZXIgaGFuZCwKKyIgVE9ETzogc3dpdGNoaW5nIHRvIFRlWCBtb2RlIGluIEMvQysrIGNvbW1lbnRzIG1pZ2h0IGJlIGNvbG91ciBvdmVya2lsbC4pCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBGb3Igc3RhcnRlcnMsIHJlYWQgdGhlIFRlWCBzeW50YXg7IFRlWCBzeW50YXggaXRlbXMgYXJlIGFsbG93ZWQgYXQgdGhlIHRvcAorIiBsZXZlbCBpbiB0aGUgQ1dFQiBzeW50YXgsIGUuZy4sIGluIHRoZSBwcmVhbWJsZS4gIEluIGdlbmVyYWwsIGEgQ1dFQiBzb3VyY2UKKyIgY29kZSBjYW4gYmUgc2VlbiBhcyBhIG5vcm1hbCBUZVggZG9jdW1lbnQgd2l0aCBzb21lIEMvQysrIG1hdGVyaWFsCisiIGludGVyc3BlcnNlZCBpbiBjZXJ0YWluIGRlZmluZWQgcmVnaW9ucy4KK2lmIHZlcnNpb24gPCA2MDAKKyAgc291cmNlIDxzZmlsZT46cDpoL3RleC52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L3RleC52aW0KKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworIiBSZWFkIHRoZSBDL0MrKyBzeW50YXggdG9vOyBDL0MrKyBzeW50YXggaXRlbXMgYXJlIHRyZWF0ZWQgYXMgc3VjaCBpbiB0aGUKKyIgQy9DKysgc2VjdGlvbiBvZiBhIENXRUIgY2h1bmsgb3IgaW4gaW5uZXIgQy9DKysgY29udGV4dCBpbiAifC4uLnwiIGdyb3Vwcy4KK3N5bnRheCBpbmNsdWRlIEB3ZWJJbmNsdWRlZEMgPHNmaWxlPjpwOmgvY3BwLnZpbQorCisiIElubmVyIEMvQysrIGNvbnRleHQgKElDQykgc2hvdWxkIGJlIHF1aXRlIHNpbXBsZSBhcyBpdCdzIGNvbXByaXNlZCBvZgorIiBtYXRlcmlhbCBpbiAifC4uLnwiOyBob3dldmVyIHRoZSBuYWl2ZSBkZWZpbml0aW9uIGZvciB0aGlzIHJlZ2lvbiB3b3VsZAorIiBoaWNrdXAgYXQgdGhlIGlubm9jaW91cyAiXHwiIFRlWCBtYWNyby4gIE5vdGU6IEZvciB0aGUgdGltZSBiZWluZyB3ZSBleHBlY3QKKyIgdGhhdCBhbiBJQ0MgYmVnaW5zIGVpdGhlciBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIG9yIGFmdGVyIHNvbWUgd2hpdGUgc3BhY2UuCitzeW50YXggcmVnaW9uIHdlYklubmVyQ2NvbnRleHQgc3RhcnQ9IlwoXlx8WyBcdFx+YChdXCl8IiBlbmQ9InwiIGNvbnRhaW5zPUB3ZWJJbmNsdWRlZEMsd2ViU2VjdGlvbk5hbWUsd2ViUmVzdHJpY3RlZFRlWCx3ZWJJZ25vcmVkU3R1ZmYKKworIiBHZW51aW5lIEMvQysrIG1hdGVyaWFsLiAgVGhpcyBzeW50YWN0aWMgcmVnaW9uIGNvdmVycyBib3RoIHRoZSBkZWZpbml0aW9uCisiIHBhcnQgYW5kIHRoZSBDL0MrKyBwYXJ0IG9mIGEgQ1dFQiBzZWN0aW9uOyBpdCBpcyBlbmRlZCBieSB0aGUgVGVYIHBhcnQgb2YKKyIgdGhlIG5leHQgc2VjdGlvbi4KK3N5bnRheCByZWdpb24gd2ViQ3BhcnQgc3RhcnQ9IkBbZGZzY3A8KF0iIGVuZD0iQFsgXCpdIiBjb250YWlucz1Ad2ViSW5jbHVkZWRDLHdlYlNlY3Rpb25OYW1lLHdlYlJlc3RyaWN0ZWRUZVgsd2ViSWdub3JlZFN0dWZmCisKKyIgU2VjdGlvbiBuYW1lcyBjb250YWluIEMvQysrIG1hdGVyaWFsIG9ubHkgaW4gaW5uZXIgY29udGV4dC4KK3N5bnRheCByZWdpb24gd2ViU2VjdGlvbk5hbWUgc3RhcnQ9IkBbPChdIiBlbmQ9IkA+IiBjb250YWlucz13ZWJJbm5lckNjb250ZXh0IGNvbnRhaW5lZAorCisiIFRoZSBjb250ZW50cyBvZiAiY29udHJvbCB0ZXh0cyIgaXMgbm90IHRyZWF0ZWQgYXMgVGVYIG1hdGVyaWFsLCBiZWNhdXNlIGluCisiIG5vbi10cml2aWFsIGNhc2VzIHRoaXMgY29tcGxldGVseSBjbG9iYmVycyB0aGUgc3ludGF4IHJlY29nbml0aW9uLiAgSW5zdGVhZCwKKyIgd2UgaGlnaGxpZ2h0IHRoZXNlIGVsZW1lbnRzIGFzICJzdHJpbmdzIi4KK3N5bnRheCByZWdpb24gd2ViUmVzdHJpY3RlZFRlWCBzdGFydD0iQFtcXlwuOnQ9cV0iIGVuZD0iQD4iIG9uZWxpbmUKKworIiBEb3VibGUtQCBtZWFucyBzaW5nbGUtQCwgYW55d2hlcmUgaW4gdGhlIENXRUIgc291cmNlLiAgKFRoaXMgYWxsb3dzIGUtbWFpbAorIiBhZGRyZXNzIDxzb21lb25lQEBmc2Yub3JnPiB3aXRob3V0IGdvaW5nIGludG8gQy9DKysgbW9kZS4pCitzeW50YXggbWF0Y2ggd2ViSWdub3JlZFN0dWZmICJAQCIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY3dlYl9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jd2ViX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHdlYlJlc3RyaWN0ZWRUZVggU3RyaW5nCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImN3ZWIiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jeW5saWIudmltIGIvcnVudGltZS9zeW50YXgvY3lubGliLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk4NTA3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvY3lubGliLnZpbQpAQCAtMCwwICsxLDkxIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIEN5bmxpYihDKyspCisiIE1haW50YWluZXI6ICAgUGhpbCBEZXJyaWNrIDxwaGlsZEBmb3J0ZWRzLmNvbT4KKyIgTGFzdCBjaGFuZ2U6ICAyMDAxIFNlcCAwMgorIiBVUkwgaHR0cDovL3d3dy5kZXJyaWNrcC5mcmVlc2VydmUuY28udWsvdmltL3N5bnRheC9jeW5saWIudmltCisiCisiIExhbmd1YWdlIEluZm9ybWF0aW9uCisiCisiCQlDeW5saWIgaXMgYSBsaWJyYXJ5IG9mIEMrKyBjbGFzc2VzIHRvIGFsbG93IGhhcmR3YXJlCisiCQltb2RlbGxpbmcgaW4gQysrLiBDb21iaW5lZCB3aXRoIGEgc2ltdWxhdGlvbiBrZXJuZWwsCisiCQl0aGUgY29tcGlsZWQgYW5kIGxpbmtlZCBleGVjdXRhYmxlIGZvcm1zIGEgaGFyZHdhcmUKKyIJCXNpbXVsYXRpb24gb2YgdGhlIGRlc2NyaWJlZCBkZXNpZ24uCisiCisiCQlGdXJ0aGVyIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBmcm9tIHd3dy5mb3J0ZWRzLmNvbQorCisKKyIgUmVtb3ZlIGFueSBvbGQgc3ludGF4IHN0dWZmIGhhbmdpbmcgYXJvdW5kCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKworCisiIFJlYWQgdGhlIEMrKyBzeW50YXggdG8gc3RhcnQgd2l0aCAtIHRoaXMgaW5jbHVkZXMgdGhlIEMgc3ludGF4CitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9jcHAudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9jcHAudmltCitlbmRpZgordW5sZXQgYjpjdXJyZW50X3N5bnRheAorCisiIEN5bmxpYiBleHRlbnNpb25zCisKK3N5biBrZXl3b3JkCWN5bmxpYk1hY3JvCSAgIERlZmF1bHQgQ1lOU0NPTgorc3luIGtleXdvcmQJY3lubGliTWFjcm8JICAgQ2FzZSBDYXNlWCBFbmRDYXNlWAorc3luIGtleXdvcmQJY3lubGliVHlwZQkgICBDeW5EYXRhIEN5blNpZ25lZERhdGEgQ3luVGltZQorc3luIGtleXdvcmQJY3lubGliVHlwZQkgICBJbiBPdXQgSW5TVCBPdXRTVAorc3luIGtleXdvcmQJY3lubGliVHlwZQkgICBTdHJ1Y3QKK3N5biBrZXl3b3JkCWN5bmxpYlR5cGUJICAgSW50IFVpbnQgQ29uc3QKK3N5biBrZXl3b3JkCWN5bmxpYlR5cGUJICAgTG9uZyBVbG9uZworc3luIGtleXdvcmQJY3lubGliVHlwZQkgICBPbmVIb3QKK3N5biBrZXl3b3JkCWN5bmxpYlR5cGUJICAgQ3luQ2xvY2sgQ3luY2xvY2swCitzeW4ga2V5d29yZCAgICAgY3lubGliRnVuY3Rpb24gICAgIHRpbWUgY29uZmlndXJlIG15X25hbWUKK3N5biBrZXl3b3JkICAgICBjeW5saWJGdW5jdGlvbiAgICAgQ3luTW9kdWxlIGVwaWxvZyBleGVjdXRlX29uCitzeW4ga2V5d29yZCAgICAgY3lubGliRnVuY3Rpb24gICAgIG15X25hbWUKK3N5biBrZXl3b3JkICAgICBjeW5saWJGdW5jdGlvbiAgICAgQ3luQmluZCBiaW5kCitzeW4ga2V5d29yZCAgICAgY3lubGliRnVuY3Rpb24gICAgIEN5bldhaXQgQ3luRXZlbnQKK3N5biBrZXl3b3JkICAgICBjeW5saWJGdW5jdGlvbiAgICAgQ3luU2V0TmFtZQorc3luIGtleXdvcmQgICAgIGN5bmxpYkZ1bmN0aW9uICAgICBDeW5UaWNrIEN5blJ1bgorc3luIGtleXdvcmQgICAgIGN5bmxpYkZ1bmN0aW9uICAgICBDeW5GaW5pc2gKK3N5biBrZXl3b3JkICAgICBjeW5saWJGdW5jdGlvbiAgICAgQ3lucHJpbnRmIEN5blNpbVRpbWUKK3N5biBrZXl3b3JkICAgICBjeW5saWJGdW5jdGlvbiAgICAgQ3luVmNkRmlsZQorc3luIGtleXdvcmQgICAgIGN5bmxpYkZ1bmN0aW9uICAgICBDeW5WY2RBZGQgQ3luVmNkUmVtb3ZlCitzeW4ga2V5d29yZCAgICAgY3lubGliRnVuY3Rpb24gICAgIEN5blZjZE9uIEN5blZjZE9mZgorc3luIGtleXdvcmQgICAgIGN5bmxpYkZ1bmN0aW9uICAgICBDeW5WY2RTY2FsZQorc3luIGtleXdvcmQgICAgIGN5bmxpYkZ1bmN0aW9uICAgICBDeW5CZ25OYW1lIEN5bkVuZE5hbWUKK3N5biBrZXl3b3JkICAgICBjeW5saWJGdW5jdGlvbiAgICAgQ3luQ2xvY2sgY29uZmlndXJlIHRpbWUKK3N5biBrZXl3b3JkICAgICBjeW5saWJGdW5jdGlvbiAgICAgQ3luUmVkQW5kIEN5blJlZE5hbmQKK3N5biBrZXl3b3JkICAgICBjeW5saWJGdW5jdGlvbiAgICAgQ3luUmVkT3IgQ3luUmVkTm9yCitzeW4ga2V5d29yZCAgICAgY3lubGliRnVuY3Rpb24gICAgIEN5blJlZFhvciBDeW5SZWRYbm9yCitzeW4ga2V5d29yZCAgICAgY3lubGliRnVuY3Rpb24gICAgIEN5blZlcmlmeQorCisKK3N5biBtYXRjaCAgICAgICBjeW5saWJPcGVyYXRvciAgICAgIjw8PSIKK3N5biBrZXl3b3JkCWN5bmxpYlR5cGUJICAgSW4gT3V0IEluU1QgT3V0U1QgSW50IFVpbnQgQ29uc3QgQ3luY2xvY2sKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY3lubGliX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2N5bmxpYl9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBjeW5saWJPcGVyYXRvciAgIE9wZXJhdG9yCisgIEhpTGluayBjeW5saWJNYWNybyAgICAgIFN0YXRlbWVudAorICBIaUxpbmsgY3lubGliRnVuY3Rpb24gICBTdGF0ZW1lbnQKKyAgSGlMaW5rIGN5bmxpYnBwTWFjcm8gICAgICBTdGF0ZW1lbnQKKyAgSGlMaW5rIGN5bmxpYlR5cGUgICAgICAgVHlwZQorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjeW5saWIiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jeW5wcC52aW0gYi9ydW50aW1lL3N5bnRheC9jeW5wcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4NGJhYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2N5bnBwLnZpbQpAQCAtMCwwICsxLDY4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIEN5bisrCisiIE1haW50YWluZXI6ICAgUGhpbCBEZXJyaWNrIDxwaGlsZEBmb3J0ZWRzLmNvbT4KKyIgTGFzdCBjaGFuZ2U6ICAyMDAxIFNlcCAwMgorIgorIiBMYW5ndWFnZSBJbmZvcm1hdGlvbgorIgorIgkJQ3lucHAgKEN5bisrKSBpcyBhIG1hY3JvIGxhbmd1YWdlIHRvIGVhc2UgY29kaW5nIGluIEN5bmxpYi4KKyIJCUN5bmxpYiBpcyBhIGxpYnJhcnkgb2YgQysrIGNsYXNzZXMgdG8gYWxsb3cgaGFyZHdhcmUKKyIJCW1vZGVsbGluZyBpbiBDKysuIENvbWJpbmVkIHdpdGggYSBzaW11bGF0aW9uIGtlcm5lbCwKKyIJCXRoZSBjb21waWxlZCBhbmQgbGlua2VkIGV4ZWN1dGFibGUgZm9ybXMgYSBoYXJkd2FyZQorIgkJc2ltdWxhdGlvbiBvZiB0aGUgZGVzY3JpYmVkIGRlc2lnbi4KKyIKKyIJCUN5bisrIGlzIGRlc2lnbmVkIHRvIGJlIEhETC1saWtlLgorIgorIgkJRnVydGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgZnJvbSB3d3cuZm9ydGVkcy5jb20KKworCisKKworCisiIFJlbW92ZSBhbnkgb2xkIHN5bnRheCBzdHVmZiBoYW5naW5nIGFyb3VuZAorIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFJlYWQgdGhlIEN5bmxpYiBzeW50YXggdG8gc3RhcnQgd2l0aCAtIHRoaXMgaW5jbHVkZXMgdGhlIEMrKyBzeW50YXgKK2lmIHZlcnNpb24gPCA2MDAKKyAgc291cmNlIDxzZmlsZT46cDpoL2N5bmxpYi52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2N5bmxpYi52aW0KK2VuZGlmCit1bmxldCBiOmN1cnJlbnRfc3ludGF4CisKKworCisiIEN5bisrIGV4dGVuc2lvbnMKKworc3luIGtleXdvcmQgICAgIGN5bnBwTWFjcm8gICAgICBBbHdheXMgRW5kQWx3YXlzCitzeW4ga2V5d29yZCAgICAgY3lucHBNYWNybyAgICAgIE1vZHVsZSBFbmRNb2R1bGUKK3N5biBrZXl3b3JkICAgICBjeW5wcE1hY3JvICAgICAgSW5pdGlhbCBFbmRJbml0aWFsCitzeW4ga2V5d29yZCAgICAgY3lucHBNYWNybyAgICAgIFBvc2VkZ2UgTmVnZWRnZSBDaGFuZ2VkCitzeW4ga2V5d29yZCAgICAgY3lucHBNYWNybyAgICAgIEF0CitzeW4ga2V5d29yZCAgICAgY3lucHBNYWNybyAgICAgIFRocmVhZCBFbmRUaHJlYWQKK3N5biBrZXl3b3JkICAgICBjeW5wcE1hY3JvICAgICAgSW5zdGFudGlhdGUKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY3lucHBfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfY3lucHBfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgY0xhYmVsCQlMYWJlbAorICBIaUxpbmsgY3lucHBNYWNybyAgU3RhdGVtZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImN5bnBwIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZC52aW0gYi9ydW50aW1lL3N5bnRheC9kLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWVjYzQzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZC52aW0KQEAgLTAsMCArMSwyMTkgQEAKKyIgVmltIHN5bnRheCBmaWxlIGZvciB0aGUgRCBwcm9ncmFtbWluZyBsYW5ndWFnZSAodmVyc2lvbiAwLjkwKS4KKyIKKyIgTGFuZ3VhZ2U6ICAgICBECisiIE1haW50YWluZXI6ICAgSmFzb24gTWlsbHM8am1pbGxzQGNzLm11bi5jYT4KKyIgVVJMOgorIiBMYXN0IENoYW5nZTogIDIwMDQgTWF5IDIxCisiIFZlcnNpb246ICAgICAgMC44CisiCisiIE9wdGlvbnM6CisiICAgZF9jb21tZW50X3N0cmluZ3MgLSBzZXQgdG8gaGlnaGxpZ2h0IHN0cmluZ3MgYW5kIG51bWJlcnMgaW4gY29tbWVudHMKKyIKKyIgICBkX2hsX29wZXJhdG9yX292ZXJsb2FkIC0gc2V0IHRvIGhpZ2hsaWdodCBEJ3Mgc3BlY2lhbGx5IG5hbWVkIGZ1bmN0aW9ucworIiAgIHRoYXQgd2hlbiBvdmVybG9hZGVkIGltcGxlbWVudCB1bmFyeSBhbmQgYmluYXJ5IG9wZXJhdG9ycyAoZS5nLiBjbXApLgorIgorIiBUb2RvOgorIiAgIC0gQWxsb3cgdXNlciB0byBzZXQgc3luYyBtaW5saW5lcworIgorIiAgIC0gU2V2ZXJhbCBrZXl3b3JkcyAobmFtZWx5LCBpbiBhbmQgb3V0KSBhcmUgYm90aCBzdG9yYWdlIGNsYXNzIGFuZAorIiAgIHN0YXRlbWVudHMsIGRlcGVuZGluZyBvbiB0aGVpciBjb250ZXh0LiBNdXN0IHVzZSBzb21lIG1hdGNoaW5nIHRvIGZpZ3VyZQorIiAgIG91dCB3aGljaCBhbmQgaGlnaGxpZ2h0IGFwcHJvcHJpYXRlbHkuIEZvciBub3cgSSBoYXZlIG1hZGUgc3VjaCBrZXl3b3JkcworIiAgIHN0YXRlbWVudHMuCisiCisiICAgLSBNYXJrIGNvbnRlbnRzIG9mIHRoZSBhc20gc3RhdGVtZW50IGJvZHkgYXMgc3BlY2lhbAorIgorCisiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEtleXdvcmQgZGVmaW5pdGlvbnMKKyIKK3N5biBrZXl3b3JkIGRFeHRlcm5hbAkgICAgIGltcG9ydCBtb2R1bGUgZXh0ZXJuCitzeW4ga2V5d29yZCBkQ29uZGl0aW9uYWwgICAgIGlmIGVsc2Ugc3dpdGNoCitzeW4ga2V5d29yZCBkQnJhbmNoCSAgICAgZ290byBicmVhayBjb250aW51ZQorc3luIGtleXdvcmQgZFJlcGVhdAkgICAgIHdoaWxlIGZvciBkbyBmb3JlYWNoCitzeW4ga2V5d29yZCBkQm9vbGVhbgkgICAgIHRydWUgZmFsc2UKK3N5biBrZXl3b3JkIGRDb25zdGFudAkgICAgIG51bGwKK3N5biBrZXl3b3JkIGRUeXBlZGVmCSAgICAgYWxpYXMgdHlwZWRlZgorc3luIGtleXdvcmQgZFN0cnVjdHVyZQkgICAgIHRlbXBsYXRlIGludGVyZmFjZSBjbGFzcyBlbnVtIHN0cnVjdCB1bmlvbgorc3luIGtleXdvcmQgZE9wZXJhdG9yCSAgICAgbmV3IGRlbGV0ZSB0eXBlb2YgY2FzdCBhbGlnbiBpcworc3luIGtleXdvcmQgZE9wZXJhdG9yCSAgICAgdGhpcyBzdXBlcgoraWYgZXhpc3RzKCJkX2hsX29wZXJhdG9yX292ZXJsb2FkIikKKyAgc3luIGtleXdvcmQgZE9wT3ZlcmxvYWQgIG9wTmVnIG9wQ29tIG9wUG9zdEluYyBvcFBvc3REZWMgb3BBZGQgb3BTdWIgb3BTdWJfcgorICBzeW4ga2V5d29yZCBkT3BPdmVybG9hZCAgb3BNdWwgb3BEaXYgb3BEaXZfciBvcE1vZCBvcE1vZF9yIG9wQW5kIG9wT3Igb3BYb3IKKyAgc3luIGtleXdvcmQgZE9wT3ZlcmxvYWQgIG9wU2hsIG9wU2hsX3Igb3BTaHIgb3BTaHJfciBvcFVTaHIgb3BVU2hyX3Igb3BDYXQKKyAgc3luIGtleXdvcmQgZE9wT3ZlcmxvYWQgIG9wQ2F0X3Igb3BFcXVhbHMgb3BFcXVhbHMgb3BDbXAgb3BDbXAgb3BDbXAgb3BDbXAKKyAgc3luIGtleXdvcmQgZE9wT3ZlcmxvYWQgIG9wQWRkQXNzaWduIG9wU3ViQXNzaWduIG9wTXVsQXNzaWduIG9wRGl2QXNzaWduCisgIHN5biBrZXl3b3JkIGRPcE92ZXJsb2FkICBvcE1vZEFzc2lnbiBvcEFuZEFzc2lnbiBvcE9yQXNzaWduIG9wWG9yQXNzaWduCisgIHN5biBrZXl3b3JkIGRPcE92ZXJsb2FkICBvcFNobEFzc2lnbiBvcFNockFzc2lnbiBvcFVTaHJBc3NpZ24gb3BDYXRBc3NpZ24KKyAgc3luIGtleXdvcmQgZE9wT3ZlcmxvYWQgIG9wSW5kZXggb3BDYWxsIG9wU2xpY2UKK2VuZGlmCitzeW4ga2V5d29yZCBkVHlwZQkgICAgIHVzaG9ydCBpbnQgdWludCBsb25nIHVsb25nIGZsb2F0CitzeW4ga2V5d29yZCBkVHlwZQkgICAgIHZvaWQgYnl0ZSB1Ynl0ZSBkb3VibGUgYml0IGNoYXIgd2NoYXIgdWNlbnQgY2VudAorc3luIGtleXdvcmQgZFR5cGUJICAgICBzaG9ydCBib29sIGRjaGFyCitzeW4ga2V5d29yZCBkVHlwZQkgICAgIHJlYWwgaXJlYWwgaWZsb2F0IGlkb3VibGUgY3JlYWwgY2Zsb2F0IGNkb3VibGUKK3N5biBrZXl3b3JkIGREZWJ1ZwkgICAgIGRlcHJlY2F0ZWQgdW5pdHRlc3QKK3N5biBrZXl3b3JkIGRFeGNlcHRpb25zICAgICAgdGhyb3cgdHJ5IGNhdGNoIGZpbmFsbHkKK3N5biBrZXl3b3JkIGRTY29wZURlY2wgICAgICAgcHVibGljIHByb3RlY3RlZCBwcml2YXRlIGV4cG9ydAorc3luIGtleXdvcmQgZFN0YXRlbWVudCAgICAgICB2ZXJzaW9uIGRlYnVnIHJldHVybiB3aXRoIGludmFyaWFudCBib2R5CitzeW4ga2V5d29yZCBkU3RhdGVtZW50ICAgICAgIGluIG91dCBpbm91dCBhc20gbWl4aW4KK3N5biBrZXl3b3JkIGRTdGF0ZW1lbnQgICAgICAgZnVuY3Rpb24gZGVsZWdhdGUKK3N5biBrZXl3b3JkIGRTdG9yYWdlQ2xhc3MgICAgYXV0byBzdGF0aWMgb3ZlcnJpZGUgZmluYWwgY29uc3QgYWJzdHJhY3Qgdm9sYXRpbGUKK3N5biBrZXl3b3JkIGRTdG9yYWdlQ2xhc3MgICAgc3luY2hyb25pemVkCitzeW4ga2V5d29yZCBkUHJhZ21hCSAgICAgcHJhZ21hCisKKworIiBBc3NlcnQgaXMgYSBzdGF0ZW1lbnQgYW5kIGEgbW9kdWxlIG5hbWUuCitzeW4gbWF0Y2ggZEFzc2VydCAiXmFzc2VydFw+Igorc3luIG1hdGNoIGRBc3NlcnQgIlteLl1ccypcPGFzc2VydFw+Im1zPXMrMQorCisiIE1hcmtzIGNvbnRlbnRzIG9mIHRoZSBhc20gc3RhdG1lbnQgYm9keSBhcyBzcGVjaWFsCisiCisiIFRPRE8KKyJzeW4gbWF0Y2ggZEFzbVN0YXRlbWVudCAiXDxhc21cPiIKKyJzeW4gcmVnaW9uIGRBc21Cb2R5IHN0YXJ0PSJhc21bXG5dKlxzKnsiaHM9ZSsxIGVuZD0ifSJoZT1lLTEgY29udGFpbnM9ZEFzbVN0YXRlbWVudAorIgorImhpIGRlZiBsaW5rIGRBc21Cb2R5IGRVbmljb2RlCisiaGkgZGVmIGxpbmsgZEFzbVN0YXRlbWVudCBkU3RhdGVtZW50CisKKyIgTGFiZWxzCisiCisiIFdlIGNvbnRhaW4gZFNjb3BlRGVjbCBzbyBwdWJsaWM6IHByaXZhdGU6IGV0Yy4gYXJlIG5vdCBoaWdobGlnaHRlZCBsaWtlIGxhYmVscworc3luIG1hdGNoICAgZFVzZXJMYWJlbCAgICAgICAiXlxzKltfJGEtekEtWl1bXyRhLXpBLVowLTlfXSpccyo6ImhlPWUtMSBjb250YWlucz1kTGFiZWwsZFNjb3BlRGVjbAorc3luIGtleXdvcmQgZExhYmVsCSAgICAgY2FzZSBkZWZhdWx0CisKKyIgQ29tbWVudHMKKyIKK3N5biBrZXl3b3JkIGRUb2RvCSAgICAgIGNvbnRhaW5lZCBUT0RPIEZJWE1FIFRFTVAgWFhYCitzeW4gbWF0Y2ggICBkQ29tbWVudFN0YXIgICAgICBjb250YWluZWQgIl5ccypcKlteL10ibWU9ZS0xCitzeW4gbWF0Y2ggICBkQ29tbWVudFN0YXIgICAgICBjb250YWluZWQgIl5ccypcKiQiCitzeW4gbWF0Y2ggICBkQ29tbWVudFBsdXMgICAgICBjb250YWluZWQgIl5ccyorW14vXSJtZT1lLTEKK3N5biBtYXRjaCAgIGRDb21tZW50UGx1cyAgICAgIGNvbnRhaW5lZCAiXlxzKiskIgoraWYgZXhpc3RzKCJkX2NvbW1lbnRfc3RyaW5ncyIpCisgIHN5biByZWdpb24gIGRCbG9ja0NvbW1lbnRTdHJpbmcgICBjb250YWluZWQgIHN0YXJ0PSsiKyBlbmQ9KyIrIGVuZD0rXCovK21lPXMtMSxoZT1zLTEgY29udGFpbnM9ZENvbW1lbnRTdGFyLGRVbmljb2RlLGRFc2NTZXF1ZW5jZSxAU3BlbGwKKyAgc3luIHJlZ2lvbiAgZE5lc3RlZENvbW1lbnRTdHJpbmcgIGNvbnRhaW5lZCAgc3RhcnQ9KyIrIGVuZD0rIisgZW5kPSIrIm1lPXMtMSxoZT1zLTEgY29udGFpbnM9ZENvbW1lbnRQbHVzLGRVbmljb2RlLGRFc2NTZXF1ZW5jZSxAU3BlbGwKKyAgc3luIHJlZ2lvbiAgZExpbmVDb21tZW50U3RyaW5nICAgIGNvbnRhaW5lZCBzdGFydD0rIisgIGVuZD0rJFx8IisgY29udGFpbnM9ZFVuaWNvZGUsZEVzY1NlcXVlbmNlLEBTcGVsbAorICBzeW4gcmVnaW9uICBkQmxvY2tDb21tZW50ICAgICBzdGFydD0iL1wqIiAgZW5kPSJcKi8iIGNvbnRhaW5zPWRCbG9ja0NvbW1lbnRTdHJpbmcsZFRvZG8sQFNwZWxsCisgIHN5biByZWdpb24gIGROZXN0ZWRDb21tZW50ICAgIHN0YXJ0PSIvKyIgIGVuZD0iKy8iIGNvbnRhaW5zPWROZXN0ZWRDb21tZW50LGROZXN0ZWRDb21tZW50U3RyaW5nLGRUb2RvLEBTcGVsbAorICBzeW4gbWF0Y2ggICBkTGluZUNvbW1lbnQgICAgICAiLy8uKiIgY29udGFpbnM9ZExpbmVDb21tZW50U3RyaW5nLGRUb2RvLEBTcGVsbAorZWxzZQorICBzeW4gcmVnaW9uICBkQmxvY2tDb21tZW50ICAgICBzdGFydD0iL1wqIiAgZW5kPSJcKi8iIGNvbnRhaW5zPWRCbG9ja0NvbW1lbnRTdHJpbmcsZFRvZG8sQFNwZWxsCisgIHN5biByZWdpb24gIGROZXN0ZWRDb21tZW50ICAgIHN0YXJ0PSIvKyIgIGVuZD0iKy8iIGNvbnRhaW5zPWROZXN0ZWRDb21tZW50LGROZXN0ZWRDb21tZW50U3RyaW5nLGRUb2RvLEBTcGVsbAorICBzeW4gbWF0Y2ggICBkTGluZUNvbW1lbnQgICAgICAiLy8uKiIgY29udGFpbnM9ZExpbmVDb21tZW50U3RyaW5nLGRUb2RvLEBTcGVsbAorZW5kaWYKKworaGkgbGluayBkTGluZUNvbW1lbnRTdHJpbmcgZEJsb2NrQ29tbWVudFN0cmluZworaGkgbGluayBkQmxvY2tDb21tZW50U3RyaW5nIGRTdHJpbmcKK2hpIGxpbmsgZE5lc3RlZENvbW1lbnRTdHJpbmcgZFN0cmluZworaGkgbGluayBkQ29tbWVudFN0YXIgIGRCbG9ja0NvbW1lbnQKK2hpIGxpbmsgZENvbW1lbnRQbHVzICBkTmVzdGVkQ29tbWVudAorCitzeW4gc3luYyBtaW5saW5lcz0yNQorCisiIENoYXJhY3RlcnMKKyIKK3N5biBtYXRjaCBkU3BlY2lhbENoYXJFcnJvciBjb250YWluZWQgIlteJ10iCisKKyIgRXNjYXBlIHNlcXVlbmNlcyAob2N0LHNwZWNhbCBjaGFyLGhleCx3Y2hhcikuIFRoZXNlIGFyZSBub3QgY29udGFpbmVkCisiIGJlY2F1c2UgdGhleSBhcmUgY29uc2lkZXJlZCBzdHJpbmcgbGl0dGVyYWxzCitzeW4gbWF0Y2ggZEVzY1NlcXVlbmNlICJcXFwoXG9cezEsM31cfFtcIlxcJ1xcP250YnJmdmFdXHx1XHhcezR9XHxVXHhcezh9XHx4XHhceFwpIgorc3luIG1hdGNoIGRDaGFyYWN0ZXIgICInW14nXSonIiBjb250YWlucz1kRXNjU2VxdWVuY2UsZFNwZWNpYWxDaGFyRXJyb3IKK3N5biBtYXRjaCBkQ2hhcmFjdGVyICAiJ1xcJyciIGNvbnRhaW5zPWRFc2NTZXF1ZW5jZQorc3luIG1hdGNoIGRDaGFyYWN0ZXIgICInW15cXF0nIgorCisiIFVuaWNvZGUgY2hhcmFjdGVycworIgorc3luIG1hdGNoICAgZFVuaWNvZGUgIlxcdVxkXHs0XH0iCisKKyIgU3RyaW5nLgorIgorc3luIHJlZ2lvbiAgZFN0cmluZyBzdGFydD0rIisgZW5kPSsiKyBjb250YWlucz1kRXNjU2VxdWVuY2UsQFNwZWxsCitzeW4gcmVnaW9uICBkUmF3U3RyaW5nIHN0YXJ0PStgKyBza2lwPStcXGArIGVuZD0rYCsgY29udGFpbnM9QFNwZWxsCitzeW4gcmVnaW9uICBkUmF3U3RyaW5nIHN0YXJ0PStyIisgc2tpcD0rXFwiKyBlbmQ9KyIrIGNvbnRhaW5zPUBTcGVsbAorc3luIHJlZ2lvbiAgZEhleFN0cmluZyBzdGFydD0reCIrIHNraXA9K1xcIisgZW5kPSsiKworCisiIE51bWJlcnMKKyIKK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoIGRJbnQgICAgICAgIGRpc3BsYXkgIlw8XGRbMC05X10qXCh1XD1sXD1cfGxcPXVcPVwpXD4iCisiIEhleCBudW1iZXIKK3N5biBtYXRjaCBkSGV4ICAgICAgICBkaXNwbGF5ICJcPDB4WzAtOWEtZl9dXCtcKHVcPWxcPVx8bFw9dVw9XClcPiIKK3N5biBtYXRjaCBkSGV4ICAgICAgICBkaXNwbGF5ICJcPFx4WzAtOWEtZl9dKmhcKHVcPWxcPVx8bFw9dVw9XClcPiIKKyIgRmxhZyB0aGUgZmlyc3QgemVybyBvZiBhbiBvY3RhbCBudW1iZXIgYXMgc29tZXRoaW5nIHNwZWNpYWwKK3N5biBtYXRjaCBkT2N0YWwgICAgICBkaXNwbGF5ICJcPDBbMC03X11cK1wodVw9bFw9XHxsXD11XD1cKVw+IiBjb250YWlucz1jT2N0YWxaZXJvCitzeW4gbWF0Y2ggZE9jdGFsWmVybyAgZGlzcGxheSBjb250YWluZWQgIlw8MCIKKworImZsb2F0aW5nIHBvaW50IHdpdGhvdXQgdGhlIGRvdAorc3luIG1hdGNoIGRGbG9hdCAgICAgIGRpc3BsYXkgIlw8XGRbMC05X10qXChmaVw9XHxsXD1pXClcPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoIGRGbG9hdCAgICAgIGRpc3BsYXkgIlw8XGRbMC05X10qXC5bMC05X10qXChlWy0rXVw9WzAtOV9dXCtcKVw9W2ZsXVw9aVw9IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCBkRmxvYXQgICAgICBkaXNwbGF5ICJcKFwuWzAtOV9dXCtcKVwoZVstK11cPVswLTlfXVwrXClcPVtmbF1cPWlcPVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aG91dCBkb3QsIHdpdGggZXhwb25lbnQKKyJzeW4gbWF0Y2ggZEZsb2F0ICAgICAgZGlzcGxheSAiXDxcZFwrZVstK11cPVxkXCtbZmxdXD1cPiIKK3N5biBtYXRjaCBkRmxvYXQgICAgICBkaXNwbGF5ICJcPFxkWzAtOV9dKmVbLStdXD1bMC05X11cK1tmbF1cPVw+IgorCisiZmxvYXRpbmcgcG9pbnQgd2l0aG91dCB0aGUgZG90CitzeW4gbWF0Y2ggZEhleEZsb2F0ICAgICAgZGlzcGxheSAiXDwweFx4XCtcKGZpXD1cfGxcPWlcKVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggZEhleEZsb2F0ICAgICAgZGlzcGxheSAiXDwweFx4XCtcLlx4KlwocFstK11cPVx4XCtcKVw9W2ZsXVw9aVw9IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aG91dCBkb3QsIHdpdGggZXhwb25lbnQKK3N5biBtYXRjaCBkSGV4RmxvYXQgICAgICBkaXNwbGF5ICJcPDB4XHhcK3BbLStdXD1ceFwrW2ZsXVw9XD4iCisKKyIgYmluYXJ5IG51bWJlcnMKK3N5biBtYXRjaCBkQmluYXJ5ICAgICBkaXNwbGF5ICJcPDBiWzAxX11cK1w+IgorIiBmbGFnIGFuIG9jdGFsIG51bWJlciB3aXRoIHdyb25nIGRpZ2l0cworc3luIG1hdGNoIGRPY3RhbEVycm9yIGRpc3BsYXkgIjBcbypbODldXGQqIgorc3luIGNhc2UgbWF0Y2gKKworIiBQcmFnbWEgKHByZXByb2Nlc3Nvcikgc3VwcG9ydAorIiBUT0RPOiBIaWdobGlnaHQgZm9sbG93aW5nIEludGVnZXIgYW5kIG9wdGlvbmFsIEZpbGVzcGVjLgorc3luIHJlZ2lvbiAgZFByYWdtYSBzdGFydD0iI1xzKlwobGluZVw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIgorCisKKyIgVGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIgoraGkgZGVmIGxpbmsgZEJpbmFyeQkJTnVtYmVyCitoaSBkZWYgbGluayBkSW50CQlOdW1iZXIKK2hpIGRlZiBsaW5rIGRIZXgJCU51bWJlcgoraGkgZGVmIGxpbmsgZE9jdGFsCQlOdW1iZXIKK2hpIGRlZiBsaW5rIGRGbG9hdAkJRmxvYXQKK2hpIGRlZiBsaW5rIGRIZXhGbG9hdAkJRmxvYXQKK2hpIGRlZiBsaW5rIGREZWJ1ZwkJRGVidWcKK2hpIGRlZiBsaW5rIGRCcmFuY2gJCUNvbmRpdGlvbmFsCitoaSBkZWYgbGluayBkQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKK2hpIGRlZiBsaW5rIGRMYWJlbAkJTGFiZWwKK2hpIGRlZiBsaW5rIGRVc2VyTGFiZWwJCUxhYmVsCitoaSBkZWYgbGluayBkUmVwZWF0CQlSZXBlYXQKK2hpIGRlZiBsaW5rIGRFeGNlcHRpb25zCQlFeGNlcHRpb24KK2hpIGRlZiBsaW5rIGRBc3NlcnQJCVN0YXRlbWVudAoraGkgZGVmIGxpbmsgZFN0YXRlbWVudAkJU3RhdGVtZW50CitoaSBkZWYgbGluayBkU2NvcGVEZWNsCQlkU3RvcmFnZUNsYXNzCitoaSBkZWYgbGluayBkU3RvcmFnZUNsYXNzCVN0b3JhZ2VDbGFzcworaGkgZGVmIGxpbmsgZEJvb2xlYW4JCUJvb2xlYW4KK2hpIGRlZiBsaW5rIGRVbmljb2RlCQlTcGVjaWFsCitoaSBkZWYgbGluayBkUmF3U3RyaW5nCQlTdHJpbmcKK2hpIGRlZiBsaW5rIGRTdHJpbmcJCVN0cmluZworaGkgZGVmIGxpbmsgZEhleFN0cmluZwkJU3RyaW5nCitoaSBkZWYgbGluayBkQ2hhcmFjdGVyCQlDaGFyYWN0ZXIKK2hpIGRlZiBsaW5rIGRFc2NTZXF1ZW5jZQlTcGVjaWFsQ2hhcgoraGkgZGVmIGxpbmsgZFNwZWNpYWxDaGFyRXJyb3IJRXJyb3IKK2hpIGRlZiBsaW5rIGRPY3RhbEVycm9yCQlFcnJvcgoraGkgZGVmIGxpbmsgZE9wZXJhdG9yCQlPcGVyYXRvcgoraGkgZGVmIGxpbmsgZE9wT3ZlcmxvYWQJCU9wZXJhdG9yCitoaSBkZWYgbGluayBkQ29uc3RhbnQJCUNvbnN0YW50CitoaSBkZWYgbGluayBkVHlwZWRlZgkJVHlwZWRlZgoraGkgZGVmIGxpbmsgZFN0cnVjdHVyZQkJU3RydWN0dXJlCitoaSBkZWYgbGluayBkVG9kbwkJVG9kbworaGkgZGVmIGxpbmsgZFR5cGUJCVR5cGUKK2hpIGRlZiBsaW5rIGRMaW5lQ29tbWVudAlDb21tZW50CitoaSBkZWYgbGluayBkQmxvY2tDb21tZW50CUNvbW1lbnQKK2hpIGRlZiBsaW5rIGROZXN0ZWRDb21tZW50CUNvbW1lbnQKK2hpIGRlZiBsaW5rIGRFeHRlcm5hbAkJSW5jbHVkZQoraGkgZGVmIGxpbmsgZFByYWdtYQkJUHJlUHJvYworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJkIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZGNkLnZpbSBiL3J1bnRpbWUvc3ludGF4L2RjZC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2Njc0NQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2RjZC52aW0KQEAgLTAsMCArMSw2NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVdpbGRQYWNrZXRzIEV0aGVyUGVlayBEZWNvZGVyICguZGNkKSBmaWxlCisiIE1haW50YWluZXI6CUNocmlzdG9waGVyIFNoaW5uIDxjaHJpc3RvcGhlckBsdWNlbnQuY29tPgorIiBMYXN0IENoYW5nZToJMjAwMyBBcHIgMjUKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEtleXdvcmRzCitzeW4ga2V5d29yZCBkY2RGdW5jdGlvbgkJRENvZCBUUlRTIFROWFQgQ1JMRgorc3luIG1hdGNoICAgZGNkRnVuY3Rpb24JCWRpc3BsYXkgIlwoU1RSXClcIyIKK3N5biBrZXl3b3JkIGRjZExhYmVsCQlMQUJMCitzeW4gcmVnaW9uICBkY2RMYWJlbAkJc3RhcnQ9IltBLVpdIiBlbmQ9IjsiCitzeW4ga2V5d29yZCBkY2RDb25kaXRpb25hbAlDRVFVIENORVEgQ0dURSBDTFRFIENCSVQgQ0xTRQorc3luIGtleXdvcmQgZGNkQ29uZGl0aW9uYWwJTFNUUyBMU1RFIExTVFoKK3N5biBrZXl3b3JkIGRjZENvbmRpdGlvbmFsCVRZUEUgVFRTVCBURVFVIFRORVEgVEdURSBUTFRFIFRCSVQgVExTRSBUU1VCIFNLSVAKK3N5biBrZXl3b3JkIGRjZENvbmRpdGlvbmFsCU1BUksgV0hPQQorc3luIGtleXdvcmQgZGNkQ29uZGl0aW9uYWwJU0VRVSBTTkVRIFNHVEUgU0xURSBTQklUCitzeW4gbWF0Y2ggICBkY2RDb25kaXRpb25hbAlkaXNwbGF5ICJcKENTVFwpXCMiICJcKFRTVFwpXCMiCitzeW4ga2V5d29yZCBkY2REaXNwbGF5CQlIQklUIERCSVQgQkJJVAorc3luIGtleXdvcmQgZGNkRGlzcGxheQkJSEJZVCBEQllUIEJCWVQKK3N5biBrZXl3b3JkIGRjZERpc3BsYXkJCUhXUkQgRFdSRCBCV1JECitzeW4ga2V5d29yZCBkY2REaXNwbGF5CQlITE5HIERMTkcgQkxORworc3luIGtleXdvcmQgZGNkRGlzcGxheQkJRDY0Qgorc3luIG1hdGNoICAgZGNkRGlzcGxheQkJZGlzcGxheSAiXChIRVhcKVwjIiAiXChDSFJcKVwjIiAiXChFQkNcKVwjIgorc3luIGtleXdvcmQgZGNkRGlzcGxheQkJSEdMQiBER0xCIEJHTEIKK3N5biBrZXl3b3JkIGRjZERpc3BsYXkJCURVTVAKK3N5biBrZXl3b3JkIGRjZFN0YXRlbWVudAlJUExHIElQVjYgQVRMRyBBVDAzIEFUMDEgRVRIUiBUUk5HIFBSVE8gUE9SVAorc3luIGtleXdvcmQgZGNkU3RhdGVtZW50CVRJTUUgT1NUUCBQU1RSIENTVFIgTkJOTSBETVBFIEZUUEwgQ0tTTSBGQ1NDCitzeW4ga2V5d29yZCBkY2RTdGF0ZW1lbnQJR0JJVCBHQllUIEdXUkQgR0xORworc3luIGtleXdvcmQgZGNkU3RhdGVtZW50CU1PVkUgQU5ERyBPUlJHIE5PVEcgQURERyBTVUJHIE1VTEcgRElWRyBNT0RHIElOQ1IgREVDUgorc3luIGtleXdvcmQgZGNkU3BlY2lhbAkJUFJWMSBQUlYyIFBSVjMgUFJWNCBQUlY1IFBSVjYgUFJWNyBQUlY4CisKKyIgQ29tbWVudAorc3luIHJlZ2lvbiAgZGNkQ29tbWVudAkJc3RhcnQ9IlwqIiBlbmQ9Ilw7IgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9kY2Rfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZGNkX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGRjZEZ1bmN0aW9uCQlJZGVudGlmaWVyCisgIEhpTGluayBkY2RMYWJlbAkJQ29uc3RhbnQKKyAgSGlMaW5rIGRjZENvbmRpdGlvbmFsCQlDb25kaXRpb25hbAorICBIaUxpbmsgZGNkRGlzcGxheQkJVHlwZQorICBIaUxpbmsgZGNkU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGRjZFNwZWNpYWwJCVNwZWNpYWwKKyAgSGlMaW5rIGRjZENvbW1lbnQJCUNvbW1lbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZGNkIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZGNsLnZpbSBiL3J1bnRpbWUvc3ludGF4L2RjbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ2N2E3MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2RjbC52aW0KQEAgLTAsMCArMSwxNjQgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglEQ0wgKERpZ2l0YWwgQ29tbWFuZCBMYW5ndWFnZSAtIHZtcykKKyIgTWFpbnRhaW5lcjoJRHIuIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiA8TmRyT2NoaXBTQFBjYW1wYmVsbEFmYW1pbHkuTWJpej4KKyIgTGFzdCBDaGFuZ2U6CVNlcCAwMiwgMjAwMworIiBWZXJzaW9uOgkzCisiIFVSTDoJaHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI3ZpbWxpbmtzX3N5bnRheAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc2V0IGlza2V5d29yZD0kLEAsNDgtNTcsXworZWxzZQorICBzZXRsb2NhbCBpc2tleXdvcmQ9JCxALDQ4LTU3LF8KK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorc3luIGtleXdvcmQgZGNsSW5zdHIJYWNjb3VudGluZwlkZWxbZXRlXQlnZW5bY2F0XQltb3VbbnRdCXJ1bgorc3luIGtleXdvcmQgZGNsSW5zdHIJYWxsW29jYXRlXQlkZXBbb3NpdF0JZ2VuW2VyYWxdCW5jcAlydW5bb2ZmXQorc3luIGtleXdvcmQgZGNsSW5zdHIJYW5hW2x5emVdCWRpYVtnbm9zZV0JZ29zW3ViXQluY3MJc2NhCitzeW4ga2V5d29yZCBkY2xJbnN0cglhcHBbZW5kXQlkaWZbZmVyZW5jZXNdCWdvdFtvXQlvbglzZWFbcmNoXQorc3luIGtleXdvcmQgZGNsSW5zdHIJYXNzW2lnbl0JZGlyW2VjdG9yeV0JaGVsW3BdCW9wZVtuXQlzZXQKK3N5biBrZXl3b3JkIGRjbEluc3RyCWF0dFthY2hdCWRpc1thYmxlXQlpY29bbnZdCXBhc1tjYWxdCXNob1t3XQorc3luIGtleXdvcmQgZGNsSW5zdHIJYXV0W2hvcml6ZV0JZGlzW2Nvbm5lY3RdCWlmCXBhc1tzd29yZF0Jc29yW3RdCitzeW4ga2V5d29yZCBkY2xJbnN0cglhdXRbb2dlbl0JZGlzW21vdW50XQlpbmlbdGlhbGl6ZV0JcGF0W2NoXQlzcGFbd25dCitzeW4ga2V5d29yZCBkY2xJbnN0cgliYWNba3VwXQlkcG1bbF0JaW5xW3VpcmVdCXBjYQlzdGFbcnRdCitzeW4ga2V5d29yZCBkY2xJbnN0cgljYWxbbF0JZHFzCWluc1t0YWxsXQlwaG9bbmVdCXN0b1twXQorc3luIGtleXdvcmQgZGNsSW5zdHIJY2FuW2NlbF0JZHNyCWpvYglwcmlbbnRdCXN1YlttaXRdCitzeW4ga2V5d29yZCBkY2xJbnN0cgljYwlkc3RbZ3JhcGhdCWxhdFtjcF0JcHJvW2R1Y3RdCXN1Yltyb3V0aW5lXQorc3luIGtleXdvcmQgZGNsSW5zdHIJY2xvW3NlXQlkdG0JbGliW3JhcnldCXBzd1tyYXBdCXN3eFtjcl0KK3N5biBrZXl3b3JkIGRjbEluc3RyCWNtcwlkdW1bcF0JbGljW2Vuc2VdCXB1cltnZV0Jc3luW2Nocm9uaXplXQorc3luIGtleXdvcmQgZGNsSW5zdHIJY29uW25lY3RdCWVkaVt0XQlsaW5ba10JcWRlW2xldGVdCXN5c1tnZW5dCitzeW4ga2V5d29yZCBkY2xJbnN0cgljb25bdGludWVdCWVuYVtibGVdCWxtY1twXQlxc2VbdF0Jc3lzW21hbl0KK3N5biBrZXl3b3JkIGRjbEluc3RyCWNvblt2ZXJ0XQllbmRbc3Vicm91dGluZV0JbG9jW2FsZV0JcXNoW293XQl0ZmYKK3N5biBrZXl3b3JkIGRjbEluc3RyCWNvcFt5XQllb2QJbG9nW2luXQlyZWFbZF0JdGhlbgorc3luIGtleXdvcmQgZGNsSW5zdHIJY3JlW2F0ZV0JZW9qCWxvZ1tvdXRdCXJlY1thbGxdCXR5cFtlXQorc3luIGtleXdvcmQgZGNsSW5zdHIJY3h4CWV4YVttaW5lXQlsc2VbZGl0XQlyZWNbb3Zlcl0JdWlsCitzeW4ga2V5d29yZCBkY2xJbnN0cgljeHhbbF9oZWxwXQlleGNbaGFuZ2VdCW1hY1tyb10JcmVuW2FtZV0JdW5sW29ja10KK3N5biBrZXl3b3JkIGRjbEluc3RyCWRlYVtsbG9jYXRlXQlleGlbdF0JbWFpW2xdCXJlcFtseV0JdmVzW3RdCitzeW4ga2V5d29yZCBkY2xJbnN0cglkZWFbc3NpZ25dCWZkbAltZXJbZ2VdCXJlcVt1ZXN0XQl2aWVbd10KK3N5biBrZXl3b3JkIGRjbEluc3RyCWRlYlt1Z10JZmxvW3dncmFwaF0JbWVzW3NhZ2VdCXJldFt1cm5dCXdhaVt0XQorc3luIGtleXdvcmQgZGNsSW5zdHIJZGVjW2tdCWZvblt0XQltbXMJcm1zCXdyaVt0ZV0KK3N5biBrZXl3b3JkIGRjbEluc3RyCWRlZltpbmVdCWZvclt0cmFuXQorCitzeW4ga2V5d29yZCBkY2xMZXhpY2FsCWYkY29udGV4dAlmJGVkaXQJICBmJGdldGpwaQlmJG1lc3NhZ2UJZiRzZXRwcnYKK3N5biBrZXl3b3JkIGRjbExleGljYWwJZiRjc2lkCWYkZWxlbWVudAkgIGYkZ2V0cXVpCWYkbW9kZQlmJHN0cmluZworc3luIGtleXdvcmQgZGNsTGV4aWNhbAlmJGN2c2kJZiRlbnZpcm9ubWVudAkgIGYkZ2V0c3lpCWYkcGFyc2UJZiR0aW1lCitzeW4ga2V5d29yZCBkY2xMZXhpY2FsCWYkY3Z0aW1lCWYkZXh0cmFjdAkgIGYkaWRlbnRpZmllcglmJHBpZAlmJHRybmxubQorc3luIGtleXdvcmQgZGNsTGV4aWNhbAlmJGN2dWkJZiRmYW8JICBmJGludGVnZXIJZiRwcml2aWxlZ2UJZiR0eXBlCitzeW4ga2V5d29yZCBkY2xMZXhpY2FsCWYkZGV2aWNlCWYkZmlsZV9hdHRyaWJ1dGVzIGYkbGVuZ3RoCWYkcHJvY2VzcwlmJHVzZXIKK3N5biBrZXl3b3JkIGRjbExleGljYWwJZiRkaXJlY3RvcnkJZiRnZXRkdmkJICBmJGxvY2F0ZQlmJHNlYXJjaAlmJHZlcmlmeQorCitzeW4gbWF0Y2ggICBkY2xNZGZ5CSIvXElcaSoiCW5leHRncm91cD1kY2xNZGZ5U2V0LGRjbE1kZnlTZXRTdHJpbmcKK3N5biBtYXRjaCAgIGRjbE1kZnlTZXQJIj1bXiBcdCJdKiIJY29udGFpbmVkCitzeW4gcmVnaW9uICBkY2xNZGZ5U2V0CW1hdGNoZ3JvdXA9ZGNsTWRmeUJya3Qgc3RhcnQ9Ij1cWyIgbWF0Y2hncm91cD1kY2xNZGZ5QnJrdCBlbmQ9Il0iCWNvbnRhaW5zPWRjbE1kZnlTZXAKK3N5biByZWdpb24gIGRjbE1kZnlTZXRTdHJpbmcJc3RhcnQ9Jz0iJwlza2lwPSciIicJZW5kPSciJwljb250YWluZWQKK3N5biBtYXRjaCAgIGRjbE1kZnlTZXAJIls6LF0iCWNvbnRhaW5lZAorCisiIE51bWJlcnMKK3N5biBtYXRjaCAgIGRjbE51bWJlcgkiXGRcKyIKKworIiBWYXJuYW1lIChtYWlubHkgdG8gcHJldmVudCBkY2xOdW1iZXJzIGZyb20gYmVpbmcgcmVjb2duaXplZCB3aGVuIHBhcnQgb2YgYSBkY2xWYXJuYW1lKQorc3luIG1hdGNoICAgZGNsVmFybmFtZQkiXElcaSoiCisKKyIgRmlsZW5hbWVzIChkZXZpY2VzLCBwYXRocykKK3N5biBtYXRjaCAgIGRjbERldmljZQkiXElcaSpcKFwkXElcaSpcKVw9OltePV0ibWU9ZS0xCQluZXh0Z3JvdXA9ZGNsRGlyUGF0aCxkY2xGaWxlbmFtZQorc3luIG1hdGNoICAgZGNsRGlyUGF0aAkiXFtcKFxJXGkqXC5cKSpcSVxpKlxdIgkJY29udGFpbnM9ZGNsRGlyU2VwCW5leHRncm91cD1kY2xGaWxlbmFtZQorc3luIG1hdGNoICAgZGNsRmlsZW5hbWUJIlxJXGkqXCRcKFxJXGkqXClcPVwuXChcSVxpKlwpKlwoO1xkXCtcKVw9Igljb250YWlucz1kY2xEaXJTZXAKK3N5biBtYXRjaCAgIGRjbEZpbGVuYW1lCSJcSVxpKlwuXChcSVxpKlwpXD1cKDtcZFwrXClcPSIJY29udGFpbnM9ZGNsRGlyU2VwCWNvbnRhaW5lZAorc3luIG1hdGNoICAgZGNsRGlyU2VwCSJbW1xdLjtdIgorCisiIFN0cmluZ3MKK3N5biByZWdpb24gIGRjbFN0cmluZwlzdGFydD0nIicJc2tpcD0nIiInCWVuZD0nIicKKworIiAkIHN0dWZmIGFuZCBjb21tZW50cworc3luIGNsdXN0ZXIgZGNsQ29tbWVudEdyb3VwCWNvbnRhaW5zPWRjbFN0YXJ0LGRjbFRvZG8sQFNwZWxsCitzeW4gbWF0Y2ggICBkY2xTdGFydAkiXlwkIglza2lwd2hpdGUgbmV4dGdyb3VwPWRjbEV4ZQorc3luIG1hdGNoICAgZGNsQ29udGludWUJIi0kIgorc3luIG1hdGNoICAgZGNsQ29tbWVudAkiXlwkIS4qJCIJY29udGFpbnM9QGRjbENvbW1lbnRHcm91cAorc3luIG1hdGNoICAgZGNsRXhlCSJcSVxpKiIJY29udGFpbmVkCitzeW4gbWF0Y2ggICBkY2xUb2RvCSJERUJVR1x8VE9ETyIJY29udGFpbmVkCisKKyIgQXNzaWdubWVudHMgYW5kIE9wZXJhdG9ycworc3luIG1hdGNoICAgZGNsQXNzaWduCSI6PT1cPSIKK3N5biBtYXRjaCAgIGRjbEFzc2lnbgkiPSIKK3N5biBtYXRjaCAgIGRjbE9wZXIJIi0tXHwrXHxcKlx8LyIKK3N5biBtYXRjaCAgIGRjbExvZ09wZXIJIlwuW2EtekEtWl1bYS16QS1aXVthLXpBLVpdXD1cLiIgY29udGFpbnM9ZGNsTG9naWNhbCxkY2xMb2dTZXAKK3N5biBrZXl3b3JkIGRjbExvZ2ljYWwgY29udGFpbmVkCWFuZAlnZQlndHMJbHQJbmVzCitzeW4ga2V5d29yZCBkY2xMb2dpY2FsIGNvbnRhaW5lZAllcQlnZXMJbGUJbHRzCW5vdAorc3luIGtleXdvcmQgZGNsTG9naWNhbCBjb250YWluZWQJZXFzCWd0CWxlcwluZQlvcgorc3luIG1hdGNoICAgZGNsTG9nU2VwCSJcLiIJCWNvbnRhaW5lZAorCisiIEBjb21tYW5kIHByb2NlZHVyZXMKK3N5biBtYXRjaCAgIGRjbENtZFByb2NTdGFydAkiQCIJCQluZXh0Z3JvdXA9ZGNsQ21kUHJvYworc3luIG1hdGNoICAgZGNsQ21kUHJvYwkiXElcaSpcKFwuXElcaSpcKVw9Igljb250YWluZWQKK3N5biBtYXRjaCAgIGRjbENtZFByb2MJIlxJXGkqOiIJCWNvbnRhaW5lZAluZXh0Z3JvdXA9ZGNsQ21kRGlyUGF0aCxkY2xDbWRQcm9jCitzeW4gbWF0Y2ggICBkY2xDbWREaXJQYXRoCSJcW1woXElcaSpcLlwpKlxJXGkqXF0iCWNvbnRhaW5lZAluZXh0Z3JvdXA9ZGVsQ21kUHJvYworCisiIGxhYmVscworc3luIG1hdGNoICAgZGNsR290b0xhYmVsCSJeXCRccypcSVxpKjpccyokIgljb250YWlucz1kY2xTdGFydAorCisiIHBhcmFtZXRlcnMKK3N5biBtYXRjaCAgIGRjbFBhcmFtCSInXElbYS16QS1aMC05XyRdKidcPSIKKworIiAoKSBtYXRjaGluZyAodGhlIGNsdXN0ZXJzIGFyZSBjb21tZW50ZWQgb3V0IHVudGlsIGEgdmltL3ZtcyBjb21lcyBvdXQgZm9yIHY1LjIrKQorInN5biBjbHVzdGVyIGRjbE5leHRHcm91cHMJY29udGFpbnM9ZGNsQ21kRGlyUGF0aCxkY2xDbWRQcm9jLGRjbENtZFByb2MsZGNsRGlyUGF0aCxkY2xGaWxlbmFtZSxkY2xGaWxlbmFtZSxkY2xNZGZ5U2V0LGRjbE1kZnlTZXRTdHJpbmcsZGVsQ21kUHJvYyxkY2xFeGUsZGNsVG9kbworInN5biByZWdpb24gIGRjbEZ1bmNMaXN0CW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIoIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxAZGNsTmV4dEdyb3Vwcworc3luIHJlZ2lvbiAgZGNsRnVuY0xpc3QJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IigiIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iKSIgY29udGFpbnM9QUxMQlVULGRjbENtZERpclBhdGgsZGNsQ21kUHJvYyxkY2xDbWRQcm9jLGRjbERpclBhdGgsZGNsRmlsZW5hbWUsZGNsRmlsZW5hbWUsZGNsTWRmeVNldCxkY2xNZGZ5U2V0U3RyaW5nLGRlbENtZFByb2MsZGNsRXhlLGRjbFRvZG8KK3N5biBtYXRjaCAgIGRjbEVycm9yCSIpIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9kY2xfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZGNsX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyBIaUxpbmsgZGNsTG9nT3BlcglkY2xFcnJvcgorIEhpTGluayBkY2xMb2dpY2FsCWRjbE9wZXIKKyBIaUxpbmsgZGNsTG9nU2VwCWRjbFNlcAorCisgSGlMaW5rIGRjbEFzc2lnbglPcGVyYXRvcgorIEhpTGluayBkY2xDbWRQcm9jCVNwZWNpYWwKKyBIaUxpbmsgZGNsQ21kUHJvY1N0YXJ0CU9wZXJhdG9yCisgSGlMaW5rIGRjbENvbW1lbnQJQ29tbWVudAorIEhpTGluayBkY2xDb250aW51ZQlTdGF0ZW1lbnQKKyBIaUxpbmsgZGNsRGV2aWNlCUlkZW50aWZpZXIKKyBIaUxpbmsgZGNsRGlyUGF0aAlJZGVudGlmaWVyCisgSGlMaW5rIGRjbERpclBhdGgJSWRlbnRpZmllcgorIEhpTGluayBkY2xEaXJTZXAJRGVsaW1pdGVyCisgSGlMaW5rIGRjbEVycm9yCUVycm9yCisgSGlMaW5rIGRjbEV4ZQkJU3RhdGVtZW50CisgSGlMaW5rIGRjbEZpbGVuYW1lCU5PTkUKKyBIaUxpbmsgZGNsR290b0xhYmVsCUxhYmVsCisgSGlMaW5rIGRjbEluc3RyCVN0YXRlbWVudAorIEhpTGluayBkY2xMZXhpY2FsCUZ1bmN0aW9uCisgSGlMaW5rIGRjbE1kZnkJVHlwZQorIEhpTGluayBkY2xNZGZ5QnJrdAlEZWxpbWl0ZXIKKyBIaUxpbmsgZGNsTWRmeVNlcAlEZWxpbWl0ZXIKKyBIaUxpbmsgZGNsTWRmeVNldAlUeXBlCisgSGlMaW5rIGRjbE1kZnlTZXRTdHJpbmcJU3RyaW5nCisgSGlMaW5rIGRjbE51bWJlcglOdW1iZXIKKyBIaUxpbmsgZGNsT3BlcglPcGVyYXRvcgorIEhpTGluayBkY2xQYXJhbQlTcGVjaWFsCisgSGlMaW5rIGRjbFNlcAkJRGVsaW1pdGVyCisgSGlMaW5rIGRjbFN0YXJ0CURlbGltaXRlcgorIEhpTGluayBkY2xTdHJpbmcJU3RyaW5nCisgSGlMaW5rIGRjbFRvZG8JVG9kbworCisgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImRjbCIKKworIiB2aW06IHRzPTE2CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9kZWJjaGFuZ2Vsb2cudmltIGIvcnVudGltZS9zeW50YXgvZGViY2hhbmdlbG9nLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzdiNDhkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZGViY2hhbmdlbG9nLnZpbQpAQCAtMCwwICsxLDU0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJRGViaWFuIGNoYW5nZWxvZyBmaWxlcworIiBNYWludGFpbmVyOglXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgorIiBMYXN0IENoYW5nZToJMzAgQXByaWwgMjAwMQorCisiIFN0YW5kYXJkIHN5bnRheCBpbml0aWFsaXphdGlvbgoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgQ2FzZSBkb2Vzbid0IG1hdHRlciBmb3IgdXMKK3N5biBjYXNlIGlnbm9yZQorCisiIERlZmluZSBzb21lIGNvbW1vbiBleHByZXNzaW9ucyB3ZSBjYW4gdXNlIGxhdGVyIG9uCitzeW4gbWF0Y2ggZGViY2hhbmdlbG9nTmFtZQljb250YWluZWQgIl5bWzphbHBoYTpdXVtbOmFsbnVtOl0uKy1dXCsgIgorc3luIG1hdGNoIGRlYmNoYW5nZWxvZ1VyZ2VuY3kJY29udGFpbmVkICI7IHVyZ2VuY3k9XChsb3dcfG1lZGl1bVx8aGlnaFx8Y3JpdGljYWxcKSIKK3N5biBtYXRjaCBkZWJjaGFuZ2Vsb2dUYXJnZXQJY29udGFpbmVkICJcKCBzdGFibGVcfCBmcm96ZW5cfCB1bnN0YWJsZVx8IGV4cGVyaW1lbnRhbFwpXCsiCitzeW4gbWF0Y2ggZGViY2hhbmdlbG9nVmVyc2lvbgljb250YWluZWQgIiguXHstfSkiCitzeW4gbWF0Y2ggZGViY2hhbmdlbG9nQ2xvc2VzCWNvbnRhaW5lZCAiY2xvc2VzOlxzKlwoYnVnXClcPSNcc1w9XGRcK1woLFxzKlwoYnVnXClcPSNcc1w9XGRcK1wpKiIKK3N5biBtYXRjaCBkZWJjaGFuZ2Vsb2dFbWFpbAljb250YWluZWQgIltfPVs6YWxudW06XS4rLV1cK0BbWzphbG51bTpdLi9cLV1cKyIKK3N5biBtYXRjaCBkZWJjaGFuZ2Vsb2dFbWFpbAljb250YWluZWQgIjwuXHstfT4iCisKKyIgRGVmaW5lIHRoZSBlbnRyaWVzIHRoYXQgbWFrZSB1cCB0aGUgY2hhbmdlbG9nCitzeW4gcmVnaW9uIGRlYmNoYW5nZWxvZ0hlYWRlciBzdGFydD0iXlteIF0iIGVuZD0iJCIgY29udGFpbnM9ZGViY2hhbmdlbG9nTmFtZSxkZWJjaGFuZ2Vsb2dVcmdlbmN5LGRlYmNoYW5nZWxvZ1RhcmdldCxkZWJjaGFuZ2Vsb2dWZXJzaW9uIG9uZWxpbmUKK3N5biByZWdpb24gZGViY2hhbmdlbG9nRm9vdGVyIHN0YXJ0PSJeIFteIF0iIGVuZD0iJCIgY29udGFpbnM9ZGViY2hhbmdlbG9nRW1haWwgb25lbGluZQorc3luIHJlZ2lvbiBkZWJjaGFuZ2Vsb2dFbnRyeSBzdGFydD0iXiAgIiBlbmQ9IiQiIGNvbnRhaW5zPWRlYmNoYW5nZWxvZ0Nsb3NlcyBvbmVsaW5lCisKKyIgQXNzb2NpYXRlIG91ciBtYXRjaGVzIGFuZCByZWdpb25zIHdpdGggcHJldHR5IGNvbG91cnMKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9kZWJjaGFuZ2Vsb2dfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZGViY2hhbmdlbG9nX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGRlYmNoYW5nZWxvZ0hlYWRlcgkJRXJyb3IKKyAgSGlMaW5rIGRlYmNoYW5nZWxvZ0Zvb3RlcgkJSWRlbnRpZmllcgorICBIaUxpbmsgZGViY2hhbmdlbG9nRW50cnkJCU5vcm1hbAorICBIaUxpbmsgZGViY2hhbmdlbG9nQ2xvc2VzCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGRlYmNoYW5nZWxvZ1VyZ2VuY3kJCUlkZW50aWZpZXIKKyAgSGlMaW5rIGRlYmNoYW5nZWxvZ05hbWUJCUNvbW1lbnQKKyAgSGlMaW5rIGRlYmNoYW5nZWxvZ1ZlcnNpb24JCUlkZW50aWZpZXIKKyAgSGlMaW5rIGRlYmNoYW5nZWxvZ1RhcmdldAkJSWRlbnRpZmllcgorICBIaUxpbmsgZGViY2hhbmdlbG9nRW1haWwJCVNwZWNpYWwKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZGViY2hhbmdlbG9nIgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9kZWJjb250cm9sLnZpbSBiL3J1bnRpbWUvc3ludGF4L2RlYmNvbnRyb2wudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODBmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9kZWJjb250cm9sLnZpbQpAQCAtMCwwICsxLDcwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJRGViaWFuIGNvbnRyb2wgZmlsZXMKKyIgTWFpbnRhaW5lcjoJV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CU9jdG9iZXIgMjgsIDIwMDEKKworIiBTdGFuZGFyZCBzeW50YXggaW5pdGlhbGl6YXRpb24KK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEV2ZXJ5dGhpbmcgdGhhdCBpcyBub3QgZXhwbGljaXRseSBtYXRjaGVkIGJ5IHRoZSBydWxlcyBiZWxvdworc3luIG1hdGNoIGRlYmNvbnRyb2xFbHNlICJeLiokIgorCisiIENvbW1vbiBzZXBlcmF0b3JzCitzeW4gbWF0Y2ggZGViQ29udHJvbENvbW1hICIsICoiCitzeW4gbWF0Y2ggZGViQ29udHJvbFNwYWNlICIgIgorCisiIERlZmluZSBzb21lIGNvbW1vbiBleHByZXNzaW9ucyB3ZSBjYW4gdXNlIGxhdGVyIG9uCitzeW4gbWF0Y2ggZGViY29udHJvbEFyY2hpdGVjdHVyZSBjb250YWluZWQgIlwoYWxsXHxhbnlcfGFscGhhXHxhcm1cfGhwcGFcfGlhNjRcfGkzODZcfG02OGtcfG1pcHNlbFx8bWlwc1x8cG93ZXJwY1x8c2hcfHNoZWJcfHNwYXJjXHxodXJkLWkzODZcKSIKK3N5biBtYXRjaCBkZWJjb250cm9sTmFtZSBjb250YWluZWQgIlthLXpdW2EtejAtOSstXSoiCitzeW4gbWF0Y2ggZGViY29udHJvbFByaW9yaXR5IGNvbnRhaW5lZCAiXChleHRyYVx8aW1wb3J0YW50XHxvcHRpb25hbFx8cmVxdWlyZWRcfHN0YW5kYXJkXCkiCitzeW4gbWF0Y2ggZGViY29udHJvbFNlY3Rpb24gY29udGFpbmVkICJcKFwoY29udHJpYlx8bm9uLWZyZWVcfG5vbi1VUy9tYWluXHxub24tVVMvY29udHJpYlx8bm9uLVVTL25vbi1mcmVlXCkvXClcPVwoYWRtaW5cfGJhc2VcfGNvbW1cfGRldmVsXHxkb2NcfGVkaXRvcnNcfGVsZWN0cm9uaWNzXHxnYW1lc1x8Z3JhcGhpY3NcfGhhbXJhZGlvXHxpbnRlcnByZXRlcnNcfGxpYnNcfG1haWxcfG1hdGhcfG1pc2NcfG5ldFx8bmV3c1x8b2xkbGlic1x8b3RoZXJvc2ZzXHxzY2llbmNlXHxzaGVsbHNcfHNvdW5kXHx0ZXh0XHx0ZXhcfHV0aWxzXHx3ZWJcfHgxMVx8ZGViaWFuLWluc3RhbGxlclwpIgorc3luIG1hdGNoIGRlYmNvbnRyb2xWYXJpYWJsZSBjb250YWluZWQgIlwkey5cey19fSIKKworIiBBbiBlbWFpbCBhZGRyZXNzCitzeW4gbWF0Y2gJZGViY29udHJvbEVtYWlsCSJbXz1bOmFsbnVtOl1cListXVwrQFtbOmFsbnVtOl1cLi9cLV1cKyIKK3N5biBtYXRjaAlkZWJjb250cm9sRW1haWwJIjwuXHstfT4iCisKKyIgTGlzdCBvZiBhbGwgbGVnYWwga2V5cworc3luIG1hdGNoIGRlYmNvbnRyb2xLZXkgY29udGFpbmVkICJeXChTb3VyY2VcfFBhY2thZ2VcfFNlY3Rpb25cfFByaW9yaXR5XHxNYWludGFpbmVyXHxVcGxvYWRlcnNcfEJ1aWxkLURlcGVuZHNcfEJ1aWxkLUNvbmZsaWN0c1x8QnVpbGQtRGVwZW5kcy1JbmRlcFx8QnVpbGQtQ29uZmxpY3RzLUluZGVwXHxTdGFuZGFyZHMtVmVyc2lvblx8UHJlLURlcGVuZHNcfERlcGVuZHNcfFJlY29tbWVuZHNcfFN1Z2dlc3RzXHxQcm92aWRlc1x8UmVwbGFjZXNcfENvbmZsaWN0c1x8RXNzZW50aWFsXHxBcmNoaXRlY3R1cmVcfERlc2NyaXB0aW9uXHxCdWdzXHxPcmlnaW5cKTogKiIKKworIiBGaWVsZHMgZm9yIHdoaWNoIHdlIGRvIHN0cmljdCBzeW50YXggY2hlY2tpbmcKK3N5biByZWdpb24gZGViY29udHJvbFN0cmljdEZpZWxkIHN0YXJ0PSJeQXJjaGl0ZWN0dXJlIiBlbmQ9IiQiIGNvbnRhaW5zPWRlYmNvbnRyb2xLZXksZGViY29udHJvbEFyY2hpdGVjdHVyZSxkZWJjb250cm9sU3BhY2Ugb25lbGluZQorc3luIHJlZ2lvbiBkZWJjb250cm9sU3RyaWN0RmllbGQgc3RhcnQ9Il5cKFBhY2thZ2VcfFNvdXJjZVwpIiBlbmQ9IiQiIGNvbnRhaW5zPWRlYmNvbnRyb2xLZXksZGViY29udHJvbE5hbWUgb25lbGluZQorc3luIHJlZ2lvbiBkZWJjb250cm9sU3RyaWN0RmllbGQgc3RhcnQ9Il5Qcmlvcml0eSIgZW5kPSIkIiBjb250YWlucz1kZWJjb250cm9sS2V5LGRlYmNvbnRyb2xQcmlvcml0eSBvbmVsaW5lCitzeW4gcmVnaW9uIGRlYmNvbnRyb2xTdHJpY3RGaWVsZCBzdGFydD0iXlNlY3Rpb24iIGVuZD0iJCIgY29udGFpbnM9ZGViY29udHJvbEtleSxkZWJjb250cm9sU2VjdGlvbiBvbmVsaW5lCisKKyIgQ2F0Y2gtYWxsIGZvciB0aGUgb3RoZXIgbGVnYWwgZmllbGRzCitzeW4gcmVnaW9uIGRlYmNvbnRyb2xGaWVsZCBzdGFydD0iXlwoTWFpbnRhaW5lclx8QnVpbGQtRGVwZW5kc1x8QnVpbGQtQ29uZmxpY3RzXHxCdWlsZC1EZXBlbmRzLUluZGVwXHxCdWlsZC1Db25mbGljdHMtSW5kZXBcfFN0YW5kYXJkcy1WZXJzaW9uXHxQcmUtRGVwZW5kc1x8RGVwZW5kc1x8UmVjb21tZW5kc1x8U3VnZ2VzdHNcfFByb3ZpZGVzXHxSZXBsYWNlc1x8Q29uZmxpY3RzXHxFc3NlbnRpYWxcfEJ1Z3NcfE9yaWdpblwpOiIgZW5kPSIkIiBjb250YWlucz1kZWJjb250cm9sS2V5LGRlYmNvbnRyb2xWYXJpYWJsZSxkZWJjb250cm9sRW1haWwgb25lbGluZQorc3luIHJlZ2lvbiBkZWJjb250cm9sTXVsdGlGaWVsZCBzdGFydD0iXlwoVXBsb2FkZXJzXHxEZXNjcmlwdGlvblwpOiIgc2tpcD0iXiAiIGVuZD0iXiQibWU9cy0xIGVuZD0iXlteIF0ibWU9cy0xIGNvbnRhaW5zPWRlYmNvbnRyb2xLZXksZGViY29udHJvbEVtYWlsLGRlYmNvbnRyb2xWYXJpYWJsZQorCisiIEFzc29jaWF0ZSBvdXIgbWF0Y2hlcyBhbmQgcmVnaW9ucyB3aXRoIHByZXR0eSBjb2xvdXJzCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZGViY29udHJvbF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9kZWJjb250cm9sX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGRlYmNvbnRyb2xLZXkJCUtleXdvcmQKKyAgSGlMaW5rIGRlYmNvbnRyb2xGaWVsZAlOb3JtYWwKKyAgSGlMaW5rIGRlYmNvbnRyb2xTdHJpY3RGaWVsZAlFcnJvcgorICBIaUxpbmsgZGViY29udHJvbE11bHRpRmllbGQJTm9ybWFsCisgIEhpTGluayBkZWJjb250cm9sQXJjaGl0ZWN0dXJlCU5vcm1hbAorICBIaUxpbmsgZGViY29udHJvbE5hbWUJCU5vcm1hbAorICBIaUxpbmsgZGViY29udHJvbFByaW9yaXR5CU5vcm1hbAorICBIaUxpbmsgZGViY29udHJvbFNlY3Rpb24JTm9ybWFsCisgIEhpTGluayBkZWJjb250cm9sVmFyaWFibGUJSWRlbnRpZmllcgorICBIaUxpbmsgZGViY29udHJvbEVtYWlsCUlkZW50aWZpZXIKKyAgSGlMaW5rIGRlYmNvbnRyb2xFbHNlCQlTcGVjaWFsCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImRlYmNvbnRyb2wiCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2RlZi52aW0gYi9ydW50aW1lL3N5bnRheC9kZWYudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNjAwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9kZWYudmltCkBAIC0wLDAgKzEsNTcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglNaWNyb3NvZnQgTW9kdWxlLURlZmluaXRpb24gKC5kZWYpIEZpbGUKKyIgTWFpbnRhaW5lcjoJUm9iIEJyYWR5IDxyb2JiQGRhdGF0b25lLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CSREYXRlJAorIiBVUkw6IGh0dHA6Ly93d3cuZGF0YXRvbmUuY29tL35yb2JiL3ZpbS9zeW50YXgvZGVmLnZpbQorIiAkUmV2aXNpb24kCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKK3N5biBtYXRjaCBkZWZDb21tZW50CSI7LioiCisKK3N5biBrZXl3b3JkIGRlZktleXdvcmQJTElCUkFSWSBTVFVCIEVYRVRZUEUgREVTQ1JJUFRJT04gQ09ERSBXSU5ET1dTIERPUworc3luIGtleXdvcmQgZGVmS2V5d29yZAlSRVNJREVOVE5BTUUgUFJJVkFURSBFWFBPUlRTIElNUE9SVFMgU0VHTUVOVFMKK3N5biBrZXl3b3JkIGRlZktleXdvcmQJSEVBUFNJWkUgREFUQQorc3luIGtleXdvcmQgZGVmU3RvcmFnZQlMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIFNJTkdMRQorc3luIGtleXdvcmQgZGVmU3RvcmFnZQlGSVhFRCBQUkVMT0FECisKK3N5biBtYXRjaCAgIGRlZk9yZGluYWwJIkBcZFwrIgorCitzeW4gcmVnaW9uICBkZWZTdHJpbmcJc3RhcnQ9KycrIGVuZD0rJysKKworc3luIG1hdGNoICAgZGVmTnVtYmVyCSJcZCsiCitzeW4gbWF0Y2ggICBkZWZOdW1iZXIJIjB4XHhcKyIKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9kZWZfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZGVmX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGRlZkNvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgZGVmS2V5d29yZAlLZXl3b3JkCisgIEhpTGluayBkZWZTdG9yYWdlCVN0b3JhZ2VDbGFzcworICBIaUxpbmsgZGVmU3RyaW5nCVN0cmluZworICBIaUxpbmsgZGVmTnVtYmVyCU51bWJlcgorICBIaUxpbmsgZGVmT3JkaW5hbAlPcGVyYXRvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJkZWYiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9kZXNjLnZpbSBiL3J1bnRpbWUvc3ludGF4L2Rlc2MudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGRiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9kZXNjLnZpbQpAQCAtMCwwICsxLDEwMCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVJPQ0tMaW51eCAuZGVzYworIiBNYWludGFpbmVyOglQaW90ciBFc2Rlbi1UZW1wc2tpIDxlc2RlbkByb2NrbGludXgub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMiBBcHIgMjMKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIHN5bnRheCBkZWZpbml0aW9ucworCitzZXRsIGlza2V5d29yZCs9LQorc3luIGtleXdvcmQgZGVzY0ZsYWcgRElFVExJQkMgY29udGFpbmVkCitzeW4ga2V5d29yZCBkZXNjTGljZW5zZSBVbmtub3duIEdQTCBMR1BMIEZETCBNSVQgQlNEIE9wZW5Tb3VyY2UgRnJlZS10by11c2UgQ29tbWVyY2lhbCBjb250YWluZWQKKworIiB0YWdzCitzeW4gbWF0Y2ggZGVzY1RhZyAvXlxbXChJXHxUSVRMRVwpXF0vCitzeW4gbWF0Y2ggZGVzY1RhZyAvXlxbXChUXHxURVhUXClcXS8gY29udGFpbmVkCitzeW4gbWF0Y2ggZGVzY1RhZyAvXlxbXChVXHxVUkxcKVxdLworc3luIG1hdGNoIGRlc2NUYWcgL15cW1woQVx8QVVUSE9SXClcXS8KK3N5biBtYXRjaCBkZXNjVGFnIC9eXFtcKE1cfE1BSU5UQUlORVJcKVxdLworc3luIG1hdGNoIGRlc2NUYWcgL15cW1woQ1x8Q0FURUdPUllcKVxdLyBjb250YWluZWQKK3N5biBtYXRjaCBkZXNjVGFnIC9eXFtcKEZcfEZMQUdcKVxdLyBjb250YWluZWQKK3N5biBtYXRjaCBkZXNjVGFnIC9eXFtcKEVcfERFUFx8REVQRU5ERU5DWVwpXF0vCitzeW4gbWF0Y2ggZGVzY1RhZyAvXlxbXChSXHxBUkNIXHxBUkNISVRFQ1RVUkVcKVxdLworc3luIG1hdGNoIGRlc2NUYWcgL15cW1woTFx8TElDRU5TRVwpXF0vIGNvbnRhaW5lZAorc3luIG1hdGNoIGRlc2NUYWcgL15cW1woU1x8U1RBVFVTXClcXS8KK3N5biBtYXRjaCBkZXNjVGFnIC9eXFtcKFZcfFZFUlx8VkVSU0lPTlwpXF0vCitzeW4gbWF0Y2ggZGVzY1RhZyAvXlxbXChQXHxQUklcfFBSSU9SSVRZXClcXS8gbmV4dGdyb3VwPWRlc2NJbnN0YWxsIHNraXB3aGl0ZQorc3luIG1hdGNoIGRlc2NUYWcgL15cW1woRFx8RE9XTlx8RE9XTkxPQURcKVxdLyBuZXh0Z3JvdXA9ZGVzY1N1bSBza2lwd2hpdGUKKworIiBtaXNjCitzeW4gbWF0Y2ggZGVzY1VybCAvXHdcKzpcL1wvXFNcKy8KK3N5biBtYXRjaCBkZXNjQ2F0ZWdvcnkgL1x3XCtcL1x3XCsvIGNvbnRhaW5lZAorc3luIG1hdGNoIGRlc2NFbWFpbCAvPFx3XCtAW1wuQS1aYS16MC05XVwrPi8KKworIiBwcmlvcml0eSB0YWcKK3N5biBtYXRjaCBkZXNjSW5zdGFsbFggL1gvIGNvbnRhaW5lZAorc3luIG1hdGNoIGRlc2NJbnN0YWxsTyAvTy8gY29udGFpbmVkCitzeW4gbWF0Y2ggZGVzY0luc3RhbGwgL1tPWF0vIGNvbnRhaW5lZCBjb250YWlucz1kZXNjSW5zdGFsbFgsZGVzY0luc3RhbGxPIG5leHRncm91cD1kZXNjU3RhZ2Ugc2tpcHdoaXRlCitzeW4gbWF0Y2ggZGVzY0Rhc2ggLy0vIGNvbnRhaW5lZAorc3luIG1hdGNoIGRlc2NEaWdpdCAvXGQvIGNvbnRhaW5lZAorc3luIG1hdGNoIGRlc2NTdGFnZSAvW1wtMF1bXC0xXVtcLTJdW1wtM11bXC00XVtcLTVdW1wtNl1bXC03XVtcLThdW1wtOV0vIGNvbnRhaW5lZCBjb250YWlucz1kZXNjRGFzaCxkZXNjRGlnaXQgbmV4dGdyb3VwPWRlc2NDb21waWxlUHJpb3JpdHkgc2tpcHdoaXRlCitzeW4gbWF0Y2ggZGVzY0NvbXBpbGVQcmlvcml0eSAvXGRcezN9XC5cZFx7M30vIGNvbnRhaW5lZAorCisiIGRvd25sb2FkIHRhZworc3luIG1hdGNoIGRlc2NTdW0gL1xkXCsvIGNvbnRhaW5lZCBuZXh0Z3JvdXA9ZGVzY1RhcmJhbGwgc2tpcHdoaXRlCitzeW4gbWF0Y2ggZGVzY1RhcmJhbGwgL1xTXCsvIGNvbnRhaW5lZCBuZXh0Z3JvdXA9ZGVzY1VybCBza2lwd2hpdGUKKworCisiIHRhZyByZWdpb25zCitzeW4gcmVnaW9uIGRlc2NUZXh0IHN0YXJ0PS9eXFtcKFRcfFRFWFRcKVxdLyBlbmQ9LyQvIGNvbnRhaW5zPWRlc2NUYWcsZGVzY1VybCxkZXNjRW1haWwKKworc3luIHJlZ2lvbiBkZXNjVGFnUmVnaW9uIHN0YXJ0PS9eXFtcKENcfENBVEVHT1JZXClcXS8gZW5kPS8kLyBjb250YWlucz1kZXNjVGFnLGRlc2NDYXRlZ29yeQorCitzeW4gcmVnaW9uIGRlc2NUYWdSZWdpb24gc3RhcnQ9L15cW1woRlx8RkxBR1wpXF0vIGVuZD0vJC8gY29udGFpbnM9ZGVzY1RhZyxkZXNjRmxhZworCitzeW4gcmVnaW9uIGRlc2NUYWdSZWdpb24gc3RhcnQ9L15cW1woTFx8TElDRU5TRVwpXF0vIGVuZD0vJC8gY29udGFpbnM9ZGVzY1RhZyxkZXNjTGljZW5zZQorCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9kZXNjX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2Rlc2Nfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgZGVzY0ZsYWcJCUlkZW50aWZpZXIKKyAgSGlMaW5rIGRlc2NMaWNlbnNlCQlJZGVudGlmaWVyCisgIEhpTGluayBkZXNjQ2F0ZWdvcnkJCUlkZW50aWZpZXIKKworICBIaUxpbmsgZGVzY1RhZwkJVHlwZQorICBIaUxpbmsgZGVzY1VybAkJVW5kZXJsaW5lZAorICBIaUxpbmsgZGVzY0VtYWlsCQlVbmRlcmxpbmVkCisKKyAgIiBwcmlvcml0eSB0YWcgY29sb3JzCisgIEhpTGluayBkZXNjSW5zdGFsbFgJCUJvb2xlYW4KKyAgSGlMaW5rIGRlc2NJbnN0YWxsTwkJVHlwZQorICBIaUxpbmsgZGVzY0Rhc2gJCU9wZXJhdG9yCisgIEhpTGluayBkZXNjRGlnaXQJCU51bWJlcgorICBIaUxpbmsgZGVzY0NvbXBpbGVQcmlvcml0eQlOdW1iZXIKKworICAiIGRvd25sb2FkIHRhZyBjb2xvcnMKKyAgSGlMaW5rIGRlc2NTdW0JCU51bWJlcgorICBIaUxpbmsgZGVzY1RhcmJhbGwJCVVuZGVybGluZWQKKworICAiIHRhZyByZWdpb24gY29sb3JzCisgIEhpTGluayBkZXNjVGV4dAkJQ29tbWVudAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJkZXNjIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZGVza3RvcC52aW0gYi9ydW50aW1lL3N5bnRheC9kZXNrdG9wLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjcxZTUxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZGVza3RvcC52aW0KQEAgLTAsMCArMSwxMTkgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkuZGVza3RvcCwgLmRpcmVjdG9yeSBmaWxlcworIgkJYWNjb3JkaW5nIHRvIGZyZWVkZXNrdG9wLm9yZyBzcGVjaWZpY2F0aW9uIDAuOS40CisiIGh0dHA6Ly9wZHguZnJlZWRlc2t0b3Aub3JnL1N0YW5kYXJkcy9kZXNrdG9wLWVudHJ5LXNwZWMvZGVza3RvcC1lbnRyeS1zcGVjLTAuOS40Lmh0bWwKKyIgTWFpbnRhaW5lcjoJTWlrb2xhaiBNYWNob3dza2kgKCBtaWttYWNoIEFUIHdwIERPVCBwbCApCisiIExhc3QgQ2hhbmdlOgkyMDA0IE1heSAxNgorIiBWZXJzaW9uIEluZm86IGRlc2t0b3AudmltIDAuOS40LTEuMgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorCXN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgICAgZmluaXNoCitlbmRpZgorCisiIFRoaXMgc3ludGF4IGZpbGUgY2FuIGJlIHVzZWQgdG8gYWxsICpuaXggY29uZmlndXJhdGlvbiBmaWxlcyBzaW1pbGFyIHRvIGRvcworIiBpbmkgZm9ybWF0IChlZy4gLnhhd3R2LCAucmFkaW8sIGtkZSByYyBmaWxlcykgLSB0aGlzIGlzIGRlZmF1bHQgbW9kZS4gQnV0CisiIHlvdSBjYW4gYWxzbyBlbmZvcmNlIHN0cmljdCBmb2xsb3dpbmcgb2YgZnJlZWRlc2t0b3Aub3JnIHN0YW5kYXJkIGZvcgorIiAuZGVza3RvcCBhbmQgLmRpcmVjdG9yeSBmaWxlcyAuIFNldCAoZWcuIGluIHZpbXJjKQorIiBsZXQgZW5mb3JjZV9mcmVlZGVza3RvcF9zdGFuZGFyZCA9IDEKKyIgYW5kIG5vbnN0YW5kYXJkIGV4dGVuc2lvbnMgbm90IGZvbGxvd2luZyBYLSBub3RhdGlvbiB3aWxsIG5vdCBiZSBoaWdobGlnaHRlZC4KK2lmIGV4aXN0cygiZW5mb3JjZV9mcmVlZGVza3RvcF9zdGFuZGFyZCIpCisJbGV0IGI6ZW5mb3JjZV9mcmVlZGVza3RvcF9zdGFuZGFyZCA9IDEKK2Vsc2UKKwlsZXQgYjplbmZvcmNlX2ZyZWVkZXNrdG9wX3N0YW5kYXJkID0gMAorZW5kaWYKKworIiBjYXNlIG9uCitzeW4gY2FzZSBtYXRjaAorCisiIEdlbmVyYWwKK2lmIGI6ZW5mb3JjZV9mcmVlZGVza3RvcF9zdGFuZGFyZCA9PSAwCisJc3luIG1hdGNoICBkdE5vdFN0TGFiZWwJIl4uXHstfT1cQD0iIG5leHRncm91cD1kdERlbGltCitlbmRpZgorCitzeW4gbWF0Y2ggIGR0R3JvdXAJL15ccypcWy4qXF0vCitzeW4gbWF0Y2ggIGR0Q29tbWVudAkvXlxzKiMuKiQvCitzeW4gbWF0Y2ggIGR0RGVsaW0JLz0vIGNvbnRhaW5lZAorCisiIExvY2FsZQorc3luIG1hdGNoICAgZHRMb2NhbGUgL15ccypcPFwoTmFtZVx8R2VuZXJpY05hbWVcfENvbW1lbnRcfFN3YWxsb3dUaXRsZVx8SWNvblx8VW5tb3VudEljb25cKVw+LiovIGNvbnRhaW5zPWR0TG9jYWxlS2V5LGR0TG9jYWxlTmFtZSxkdERlbGltIHRyYW5zcGFyZW50CitzeW4ga2V5d29yZCBkdExvY2FsZUtleSBOYW1lIEdlbmVyaWNOYW1lIENvbW1lbnQgU3dhbGxvd1RpdGxlIEljb24gVW5tb3VudEljb24gbmV4dGdyb3VwPWR0TG9jYWxlTmFtZSBjb250YWluZWRpbj1kdExvY2FsZQorc3luIG1hdGNoICAgZHRMb2NhbGVOYW1lIC9cKFxbLlx7LX1cXVxzKj1cQD1cfFwpLyBuZXh0Z3JvdXA9ZHREZWxpbSBjb250YWluZWRpbj1kdExvY2FsZSBjb250YWluZWQKKworIiBOdW1lcmljCitzeW4gbWF0Y2ggICBkdE51bWVyaWMgL15ccypcPFZlcnNpb25cPi8gY29udGFpbnM9ZHROdW1lcmljS2V5LGR0RGVsaW0KK3N5biBrZXl3b3JkIGR0TnVtZXJpY0tleSBWZXJzaW9uIG5leHRncm91cD1kdERlbGltIGNvbnRhaW5lZGluPWR0TnVtZXJpYyBjb250YWluZWQKKworIiBCb29sZWFuCitzeW4gbWF0Y2ggICBkdEJvb2xlYW4gL15ccypcPFwoU3RhcnR1cE5vdGlmeVx8UmVhZE9ubHlcfFRlcm1pbmFsXHxIaWRkZW5cfE5vRGlzcGxheVwpXD4uKi8gY29udGFpbnM9ZHRCb29sZWFuS2V5LGR0RGVsaW0sZHRCb29sZWFuVmFsdWUgdHJhbnNwYXJlbnQKK3N5biBrZXl3b3JkIGR0Qm9vbGVhbktleSBTdGFydHVwTm90aWZ5IFJlYWRPbmx5IFRlcm1pbmFsIEhpZGRlbiBOb0Rpc3BsYXkgbmV4dGdyb3VwPWR0RGVsaW0gY29udGFpbmVkaW49ZHRCb29sZWFuIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRCb29sZWFuVmFsdWUgdHJ1ZSBmYWxzZSBjb250YWluZWRpbj1kdEJvb2xlYW4gY29udGFpbmVkCisKKyIgU3RyaW5nCitzeW4gbWF0Y2ggICBkdFN0cmluZyAvXlxzKlw8XChFbmNvZGluZ1x8SWNvblx8UGF0aFx8QWN0aW9uc1x8RlNUeXBlXHxNb3VudFBvaW50XHxVbm1vdW50SWNvblx8VVJMXHxDYXRlZ29yaWVzXHxPbmx5U2hvd0luXHxOb3RTaG93SW5cfFN0YXJ0dXBXTUNsYXNzXHxGaWxlUGF0dGVyblx8TWltZVR5cGVcKVw+LiovIGNvbnRhaW5zPWR0U3RyaW5nS2V5LGR0RGVsaW0gdHJhbnNwYXJlbnQKK3N5biBrZXl3b3JkIGR0U3RyaW5nS2V5IFR5cGUgRW5jb2RpbmcgVHJ5RXhlYyBFeGVjIFBhdGggQWN0aW9ucyBGU1R5cGUgTW91bnRQb2ludCBVUkwgQ2F0ZWdvcmllcyBPbmx5U2hvd0luIE5vdFNob3dJbiBTdGFydHVwV01DbGFzcyBGaWxlUGF0dGVybiBNaW1lVHlwZSBuZXh0Z3JvdXA9ZHREZWxpbSBjb250YWluZWRpbj1kdFN0cmluZyBjb250YWluZWQKKworIiBFeGVjCitzeW4gbWF0Y2ggICBkdEV4ZWMgL15ccypcPFwoRXhlY1x8VHJ5RXhlY1x8U3dhbGxvd0V4ZWNcKVw+LiovIGNvbnRhaW5zPWR0RXhlY0tleSxkdERlbGltLGR0RXhlY1BhcmFtIHRyYW5zcGFyZW50CitzeW4ga2V5d29yZCBkdEV4ZWNLZXkgRXhlYyBUcnlFeGVjIFN3YWxsb3dFeGVjIG5leHRncm91cD1kdERlbGltIGNvbnRhaW5lZGluPWR0RXhlYyBjb250YWluZWQKK3N5biBtYXRjaCAgIGR0RXhlY1BhcmFtICAvJVtmRnVVbk5kRGlja3ZdLyBjb250YWluZWRpbj1kdEV4ZWMgY29udGFpbmVkCisKKyIgVHlwZQorc3luIG1hdGNoICAgZHRUeXBlIC9eXHMqXDxUeXBlXD4uKi8gY29udGFpbnM9ZHRUeXBlS2V5LGR0RGVsaW0sZHRUeXBlVmFsdWUgdHJhbnNwYXJlbnQKK3N5biBrZXl3b3JkIGR0VHlwZUtleSBUeXBlIG5leHRncm91cD1kdERlbGltIGNvbnRhaW5lZGluPWR0VHlwZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0VHlwZVZhbHVlIEFwcGxpY2F0aW9uIExpbmsgRlNEZXZpY2UgRGlyZWN0b3J5IGNvbnRhaW5lZGluPWR0VHlwZSBjb250YWluZWQKKworIiBYLUFkZGl0aW9uCitzeW4gbWF0Y2ggICBkdFhBZGQgICAgL15ccypYLS4qLyBjb250YWlucz1kdFhBZGRLZXksZHREZWxpbSB0cmFuc3BhcmVudAorc3luIG1hdGNoICAgZHRYQWRkS2V5IC9eXHMqWC0uXHstfVxzKj1cQD0vIG5leHRncm91cD1kdERlbGltIGNvbnRhaW5lZGluPWR0WEFkZCBjb250YWlucz1kdFhMb2NhbGUgY29udGFpbmVkCisKKyIgTG9jYWxlIGZvciBYLUFkZGl0aW9uCitzeW4gbWF0Y2ggICBkdFhMb2NhbGUgL1xbLlx7LX1cXVxzKj1cQD0vIGNvbnRhaW5lZGluPWR0WEFkZEtleSBjb250YWluZWQKKworIiBMb2NhbGUgZm9yIGFsbAorc3luIG1hdGNoICAgZHRBTG9jYWxlIC9cWy5cey19XF1ccyo9XEA9LyBjb250YWluZWRpbj1BTEwKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9kZXNrdG9wX3N5bnRheF9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX2Rvc2luaV9zeW50YXhfaW5pdHMgPSAxCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisJZWxzZQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKwllbmRpZgorCisJSGlMaW5rIGR0R3JvdXAJCSBTcGVjaWFsCisJSGlMaW5rIGR0Q29tbWVudAkgQ29tbWVudAorCUhpTGluayBkdERlbGltCQkgU3RyaW5nCisKKwlIaUxpbmsgZHRMb2NhbGVLZXkJIFR5cGUKKwlIaUxpbmsgZHRMb2NhbGVOYW1lCSBJZGVudGlmaWVyCisJSGlMaW5rIGR0WExvY2FsZQkgSWRlbnRpZmllcgorCUhpTGluayBkdEFMb2NhbGUJIElkZW50aWZpZXIKKworCUhpTGluayBkdE51bWVyaWNLZXkJIFR5cGUKKworCUhpTGluayBkdEJvb2xlYW5LZXkJIFR5cGUKKwlIaUxpbmsgZHRCb29sZWFuVmFsdWUJIENvbnN0YW50CisKKwlIaUxpbmsgZHRTdHJpbmdLZXkJIFR5cGUKKworCUhpTGluayBkdEV4ZWNLZXkJIFR5cGUKKwlIaUxpbmsgZHRFeGVjUGFyYW0JIFNwZWNpYWwKKwlIaUxpbmsgZHRUeXBlS2V5CSBUeXBlCisJSGlMaW5rIGR0VHlwZVZhbHVlCSBDb25zdGFudAorCUhpTGluayBkdE5vdFN0TGFiZWwJIFR5cGUKKwlIaUxpbmsgZHRYQWRkS2V5CSBUeXBlCisKKwlkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZGVza3RvcCIKKworIiB2aW06dHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZGlmZi52aW0gYi9ydW50aW1lL3N5bnRheC9kaWZmLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDYxYWJlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZGlmZi52aW0KQEAgLTAsMCArMSw3OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CURpZmYgKGNvbnRleHQgb3IgdW5pZmllZCkKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgQXByIDAyCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIG1hdGNoIGRpZmZPbmx5CSJeT25seSBpbiAuKiIKK3N5biBtYXRjaCBkaWZmSWRlbnRpY2FsCSJeRmlsZXMgLiogYW5kIC4qIGFyZSBpZGVudGljYWwkIgorc3luIG1hdGNoIGRpZmZEaWZmZXIJIl5GaWxlcyAuKiBhbmQgLiogZGlmZmVyJCIKK3N5biBtYXRjaCBkaWZmQkRpZmZlcgkiXkJpbmFyeSBmaWxlcyAuKiBhbmQgLiogZGlmZmVyJCIKK3N5biBtYXRjaCBkaWZmSXNBCSJeRmlsZSAuKiBpcyBhIC4qIHdoaWxlIGZpbGUgLiogaXMgYSAuKiIKK3N5biBtYXRjaCBkaWZmTm9FT0wJIl5ObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlIC4qIgorc3luIG1hdGNoIGRpZmZDb21tb24JIl5Db21tb24gc3ViZGlyZWN0b3JpZXM6IC4qIgorCitzeW4gbWF0Y2ggZGlmZlJlbW92ZWQJIl4tLioiCitzeW4gbWF0Y2ggZGlmZlJlbW92ZWQJIl48LioiCitzeW4gbWF0Y2ggZGlmZkFkZGVkCSJeKy4qIgorc3luIG1hdGNoIGRpZmZBZGRlZAkiXj4uKiIKK3N5biBtYXRjaCBkaWZmQ2hhbmdlZAkiXiEgLioiCisKK3N5biBtYXRjaCBkaWZmU3VibmFtZQkiIEBALi4qIm1zPXMrMyBjb250YWluZWQKK3N5biBtYXRjaCBkaWZmTGluZQkiXkAuKiIgY29udGFpbnM9ZGlmZlN1Ym5hbWUKK3N5biBtYXRjaCBkaWZmTGluZQkiXlw8XGRcK1w+LioiCitzeW4gbWF0Y2ggZGlmZkxpbmUJIl5cKlwqXCpcKi4qIgorCisiU29tZSB2ZXJzaW9ucyBvZiBkaWZmIGhhdmUgbGluZXMgbGlrZSAiI2MjIiBhbmQgIiNkIyIgKHdoZXJlICMgaXMgYSBudW1iZXIpCitzeW4gbWF0Y2ggZGlmZkxpbmUJIl5cZFwrXCgsXGRcK1wpXD1bY2RhXVxkXCtcPi4qIgorCitzeW4gbWF0Y2ggZGlmZkZpbGUJIl5kaWZmLioiCitzeW4gbWF0Y2ggZGlmZkZpbGUJIl4rKysgLioiCitzeW4gbWF0Y2ggZGlmZkZpbGUJIl5JbmRleDogLiokIgorc3luIG1hdGNoIGRpZmZGaWxlCSJePT09PSAuKiQiCitzeW4gbWF0Y2ggZGlmZk9sZEZpbGUJIl5cKlwqXCogLioiCitzeW4gbWF0Y2ggZGlmZk5ld0ZpbGUJIl4tLS0gLioiCisKK3N5biBtYXRjaCBkaWZmQ29tbWVudAkiXiMuKiIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZGlmZl9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9kaWZmX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGRpZmZPbGRGaWxlCWRpZmZGaWxlCisgIEhpTGluayBkaWZmTmV3RmlsZQlkaWZmRmlsZQorICBIaUxpbmsgZGlmZkZpbGUJVHlwZQorICBIaUxpbmsgZGlmZk9ubHkJQ29uc3RhbnQKKyAgSGlMaW5rIGRpZmZJZGVudGljYWwJQ29uc3RhbnQKKyAgSGlMaW5rIGRpZmZEaWZmZXIJQ29uc3RhbnQKKyAgSGlMaW5rIGRpZmZCRGlmZmVyCUNvbnN0YW50CisgIEhpTGluayBkaWZmSXNBCUNvbnN0YW50CisgIEhpTGluayBkaWZmTm9FT0wJQ29uc3RhbnQKKyAgSGlMaW5rIGRpZmZDb21tb24JQ29uc3RhbnQKKyAgSGlMaW5rIGRpZmZSZW1vdmVkCVNwZWNpYWwKKyAgSGlMaW5rIGRpZmZDaGFuZ2VkCVByZVByb2MKKyAgSGlMaW5rIGRpZmZBZGRlZAlJZGVudGlmaWVyCisgIEhpTGluayBkaWZmTGluZQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGRpZmZTdWJuYW1lCVByZVByb2MKKyAgSGlMaW5rIGRpZmZDb21tZW50CUNvbW1lbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZGlmZiIKKworIiB2aW06IHRzPTggc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZGlyY29sb3JzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2RpcmNvbG9ycy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlNTJmYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2RpcmNvbG9ycy52aW0KQEAgLTAsMCArMSwxMDYgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkgICAgZGlyY29sb3JzKDEpIGlucHV0IGZpbGUKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL3N5bnRheC9wY3AvZGlyY29sb3JzLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTIyCisiIGFyY2gtdGFnOgkgICAgOTk1ZTI5ODMtMmE3YS00ZjFlLWIwMGQtM2ZkZjhlMDc2YjQwCisiIENvbG9yIGRlZmluaXRpb24gY29sb3JpbmcgaW1wbGVtZW50ZWQgbXkgTWlrb2xhaiBNYWNob3dza2kgPG1pa21hY2hAd3AucGw+CisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIHRvZG8KK3N5biBrZXl3b3JkIGRpcmNvbG9yc1RvZG8JY29udGFpbmVkIEZJWE1FIFRPRE8gWFhYIE5PVEUKKworIiBjb21tZW50cworc3luIHJlZ2lvbiAgZGlyY29sb3JzQ29tbWVudAlzdGFydD0iIyIgZW5kPSIkIiBjb250YWlucz1kaXJjb2xvcnNUb2RvCisKKyIgbnVtYmVycworc3luIG1hdGNoICAgZGlyY29sb3JzTnVtYmVyCSJcPFxkXCtcPiIKKworIiBrZXl3b3Jkcworc3luIGtleXdvcmQgZGlyY29sb3JzS2V5d29yZAlURVJNIE5PUk1BTCBOT1JNIEZJTEUgRElSIExOSyBMSU5LIFNZTUxJTksKK3N5biBrZXl3b3JkIGRpcmNvbG9yc0tleXdvcmQJT1JQSEFOIE1JU1NJTkcgRklGTyBQSVBFIFNPQ0sgQkxLIEJMT0NLIENIUgorc3luIGtleXdvcmQgZGlyY29sb3JzS2V5d29yZAlDSEFSIERPT1IgRVhFQyBMRUZUIExFRlRDT0RFIFJJR0hUIFJJR0hUQ09ERQorc3luIGtleXdvcmQgZGlyY29sb3JzS2V5d29yZAlFTkQgRU5EQ09ERQoraWYgZXhpc3RzKCJkaXJjb2xvcnNfaXNfc2xhY2t3YXJlIikKKyAgc3luIGtleXdvcmQJZGlyY29sb3JzS2V5d29yZCAgICBDT0xPUiBPUFRJT05TIEVJR0hUQklUCitlbmRpZgorCisiIGV4dGVuc2lvbnMKK3N5biBtYXRjaCAgIGRpcmNvbG9yc0V4dGVuc2lvbgkiXlxzKlx6c1suKl1cU1wrIgorCisiIGNvbG9ycworc3luIG1hdGNoIGRpcmNvbG9yczAxICJcPDAxXD4iCitzeW4gbWF0Y2ggZGlyY29sb3JzMDQgIlw8MDRcPiIKK3N5biBtYXRjaCBkaXJjb2xvcnMwNSAiXDwwNVw+Igorc3luIG1hdGNoIGRpcmNvbG9yczA3ICJcPDA3XD4iCitzeW4gbWF0Y2ggZGlyY29sb3JzMDggIlw8MDhcPiIKK3N5biBtYXRjaCBkaXJjb2xvcnMzMCAiXDwzMFw+Igorc3luIG1hdGNoIGRpcmNvbG9yczMxICJcPDMxXD4iCitzeW4gbWF0Y2ggZGlyY29sb3JzMzIgIlw8MzJcPiIKK3N5biBtYXRjaCBkaXJjb2xvcnMzMyAiXDwzM1w+Igorc3luIG1hdGNoIGRpcmNvbG9yczM0ICJcPDM0XD4iCitzeW4gbWF0Y2ggZGlyY29sb3JzMzUgIlw8MzVcPiIKK3N5biBtYXRjaCBkaXJjb2xvcnMzNiAiXDwzNlw+Igorc3luIG1hdGNoIGRpcmNvbG9yczM3ICJcPDM3XD4iCitzeW4gbWF0Y2ggZGlyY29sb3JzNDAgIlw8NDBcPiIKK3N5biBtYXRjaCBkaXJjb2xvcnM0MSAiXDw0MVw+Igorc3luIG1hdGNoIGRpcmNvbG9yczQyICJcPDQyXD4iCitzeW4gbWF0Y2ggZGlyY29sb3JzNDMgIlw8NDNcPiIKK3N5biBtYXRjaCBkaXJjb2xvcnM0NCAiXDw0NFw+Igorc3luIG1hdGNoIGRpcmNvbG9yczQ1ICJcPDQ1XD4iCitzeW4gbWF0Y2ggZGlyY29sb3JzNDYgIlw8NDZcPiIKK3N5biBtYXRjaCBkaXJjb2xvcnM0NyAiXDw0N1w+IgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9kaXJjb2xvcnNfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZGlyY29sb3JzX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlEZWYgaGkgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgICBjb21tYW5kIC1uYXJncz0rIEhpRGVmIGhpIGRlZiA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgZGlyY29sb3JzVG9kbwlUb2RvCisgIEhpTGluayBkaXJjb2xvcnNDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIGRpcmNvbG9yc051bWJlcglOdW1iZXIKKyAgSGlMaW5rIGRpcmNvbG9yc0tleXdvcmQJS2V5d29yZAorICBIaUxpbmsgZGlyY29sb3JzRXh0ZW5zaW9uCUtleXdvcmQKKworICBIaURlZiBkaXJjb2xvcnMwMQkJdGVybT1ib2xkIGN0ZXJtPWJvbGQgZ3VpPWJvbGQKKyAgSGlEZWYgZGlyY29sb3JzMDQJCXRlcm09dW5kZXJsaW5lIGN0ZXJtPXVuZGVybGluZSBndWk9dW5kZXJsaW5lCisgICIgICAgSGlEZWYgZGlyY29sb3JzMDUKKyAgSGlEZWYgZGlyY29sb3JzMDcJCXRlcm09cmV2ZXJzZSBjdGVybT1yZXZlcnNlIGd1aT1yZXZlcnNlCisgIEhpTGluayBkaXJjb2xvcnMwOAkJSWdub3JlCisgIEhpRGVmIGRpcmNvbG9yczMwCQljdGVybWZnPUJsYWNrIGd1aWZnPUJsYWNrCisgIEhpRGVmIGRpcmNvbG9yczMxCQljdGVybWZnPVJlZCBndWlmZz1SZWQKKyAgSGlEZWYgZGlyY29sb3JzMzIJCWN0ZXJtZmc9R3JlZW4gZ3VpZmc9R3JlZW4KKyAgSGlEZWYgZGlyY29sb3JzMzMJCWN0ZXJtZmc9WWVsbG93IGd1aWZnPVllbGxvdworICBIaURlZiBkaXJjb2xvcnMzNAkJY3Rlcm1mZz1CbHVlIGd1aWZnPUJsdWUKKyAgSGlEZWYgZGlyY29sb3JzMzUJCWN0ZXJtZmc9TWFnZW50YSBndWlmZz1NYWdlbnRhCisgIEhpRGVmIGRpcmNvbG9yczM2CQljdGVybWZnPUN5YW4gZ3VpZmc9Q3lhbgorICBIaURlZiBkaXJjb2xvcnMzNwkJY3Rlcm1mZz1XaGl0ZSBndWlmZz1XaGl0ZQorICBIaURlZiBkaXJjb2xvcnM0MAkJY3Rlcm1iZz1CbGFjayBjdGVybWZnPVdoaXRlIGd1aWJnPUJsYWNrIGd1aWZnPVdoaXRlCisgIEhpRGVmIGRpcmNvbG9yczQxCQljdGVybWJnPURhcmtSZWQgZ3VpYmc9RGFya1JlZAorICBIaURlZiBkaXJjb2xvcnM0MgkJY3Rlcm1iZz1EYXJrR3JlZW4gZ3VpYmc9RGFya0dyZWVuCisgIEhpRGVmIGRpcmNvbG9yczQzCQljdGVybWJnPURhcmtZZWxsb3cgZ3VpYmc9RGFya1llbGxvdworICBIaURlZiBkaXJjb2xvcnM0NAkJY3Rlcm1iZz1EYXJrQmx1ZSBndWliZz1EYXJrQmx1ZQorICBIaURlZiBkaXJjb2xvcnM0NQkJY3Rlcm1iZz1EYXJrTWFnZW50YSBndWliZz1EYXJrTWFnZW50YQorICBIaURlZiBkaXJjb2xvcnM0NgkJY3Rlcm1iZz1EYXJrQ3lhbiBndWliZz1EYXJrQ3lhbgorICBIaURlZiBkaXJjb2xvcnM0NwkJY3Rlcm1iZz1XaGl0ZSBjdGVybWZnPUJsYWNrIGd1aWJnPVdoaXRlIGd1aWZnPUJsYWNrCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKKyAgZGVsY29tbWFuZCBIaURlZgorZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZGlyY29sb3JzIgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9kaXZhLnZpbSBiL3J1bnRpbWUvc3ludGF4L2RpdmEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NjY4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9kaXZhLnZpbQpAQCAtMCwwICsxLDExMCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CQlTS0lMTCBmb3IgRGl2YQorIiBNYWludGFpbmVyOglUb2J5IFNjaGFmZmVyIDxqdHNjaGFmZkBlb3MubmNzdS5lZHU+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorIiBDb21tZW50czoJCVNLSUxMIGlzIGEgTGlzcC1saWtlIHByb2dyYW1taW5nIGxhbmd1YWdlIGZvciB1c2UgaW4gRURBCisiCQkJCXRvb2xzIGZyb20gQ2FkZW5jZSBEZXNpZ24gU3lzdGVtcy4gSXQgYWxsb3dzIHlvdSB0byBoYXZlCisiCQkJCWEgcHJvZ3JhbW1pbmcgZW52aXJvbm1lbnQgd2l0aGluIHRoZSBDYWRlbmNlIGVudmlyb25tZW50CisiCQkJCXRoYXQgZ2l2ZXMgeW91IGFjY2VzcyB0byB0aGUgY29tcGxldGUgdG9vbCBzZXQgYW5kIGRlc2lnbgorIgkJCQlkYXRhYmFzZS4gVGhlc2UgaXRlbXMgYXJlIGZvciBEaXZhIHZlcmlmaWNhdGlvbiBydWxlcyBkZWNrcy4KKworIiBEb24ndCByZW1vdmUgYW55IG9sZCBzeW50YXggc3R1ZmYgaGFuZ2luZyBhcm91bmQhIFdlIG5lZWQgc3R1ZmYKKyIgZnJvbSBza2lsbC52aW0uCitpZiAhZXhpc3RzKCJkaWRfc2tpbGxfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDYwMAorCXNvIDxzZmlsZT46cDpoL3NraWxsLnZpbQorICBlbHNlCisgICAgcnVudGltZSEgc3ludGF4L3NraWxsLnZpbQorICBlbmRpZgorZW5kaWYKKworc3luIGtleXdvcmQgZGl2YURSQ0tleXdvcmRzCQlhcmVhIGVuYyBub3RjaCBvdmxwIHNlcCB3aWR0aAorc3luIGtleXdvcmQgZGl2YURSQ0tleXdvcmRzCQlhcHAgZGlmZk5ldCBsZW5ndGggbGVuZ3RoYSBsZW5ndGhiCitzeW4ga2V5d29yZCBkaXZhRFJDS2V5d29yZHMJCW5vdFBhcmFsbGVsIG9ubHlfcGVycCBvcHBvc2l0ZSBwYXJhbGxlbAorc3luIGtleXdvcmQgZGl2YURSQ0tleXdvcmRzCQlzYW1lTmV0IHNoaWVsZGVkIHdpdGhfcGVycAorc3luIGtleXdvcmQgZGl2YURSQ0tleXdvcmRzCQllZGdlIGVkZ2VhIGVkZ2ViIGZpZyBmaWdhIGZpZ2IKK3N5biBrZXl3b3JkIGRpdmFEUkNLZXl3b3JkcwkJbm9ybWFsR3JvdyBzcXVhcmVHcm93IG1lc3NhZ2UgcmF3CitzeW4ga2V5d29yZCBkaXZhTWVhc0tleXdvcmRzCXBlcmltZXRlciBsZW5ndGggYmVuZHNfYWxsIGJlbmRzX2Z1bGwKK3N5biBrZXl3b3JkIGRpdmFNZWFzS2V5d29yZHMJYmVuZHNfcGFydCBjb3JuZXJzX2FsbCBjb3JuZXJzX2Z1bGwKK3N5biBrZXl3b3JkIGRpdmFNZWFzS2V5d29yZHMJY29ybmVyc19wYXJ0IGFuZ2xlc19hbGwgYW5nbGVzX2Z1bGwKK3N5biBrZXl3b3JkIGRpdmFNZWFzS2V5d29yZHMJYW5nbGVzX3BhcnQgZmlnX2NvdW50IGJ1dHRpbmcgY29pbmNpZGVudAorc3luIGtleXdvcmQgZGl2YU1lYXNLZXl3b3JkcwlvdmVyIG5vdF9vdmVyIG91dHNpZGUgaW5zaWRlIGVuY2xvc2luZworc3luIGtleXdvcmQgZGl2YU1lYXNLZXl3b3JkcwlmaWd1cmUgb25lX25ldCB0d29fbmV0IHRocmVlX25ldCBncm91bmRlZAorc3luIGtleXdvcmQgZGl2YU1lYXNLZXl3b3Jkcwlwb2xhcml6ZWQgbGltaXQga2VlcCBpZ25vcmUKK3N5biBtYXRjaCBkaXZhQ3RybEZ1bmN0aW9ucwkJIihpdklmXD4iaHM9cysxCitzeW4gbWF0Y2ggZGl2YUN0cmxGdW5jdGlvbnMJCSJcPGl2SWYoImhlPWUtMQorc3luIG1hdGNoIGRpdmFDdHJsRnVuY3Rpb25zCQkiKHN3aXRjaFw+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFDdHJsRnVuY3Rpb25zCQkiXDxzd2l0Y2goImhlPWUtMQorc3luIG1hdGNoIGRpdmFDdHJsRnVuY3Rpb25zCQkiKGFuZFw+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFDdHJsRnVuY3Rpb25zCQkiXDxhbmQoImhlPWUtMQorc3luIG1hdGNoIGRpdmFDdHJsRnVuY3Rpb25zCQkiKG9yXD4iaHM9cysxCitzeW4gbWF0Y2ggZGl2YUN0cmxGdW5jdGlvbnMJCSJcPG9yKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhQ3RybEZ1bmN0aW9ucwkJIihudWxsXD4iaHM9cysxCitzeW4gbWF0Y2ggZGl2YUN0cmxGdW5jdGlvbnMJCSJcPG51bGwoImhlPWUtMQorc3luIG1hdGNoIGRpdmFFeHRGdW5jdGlvbnMJCSIoc2F2ZVwoSW50ZXJjb25uZWN0XHxQcm9wZXJ0eVx8UGFyYW1ldGVyXHxSZWNvZ25pdGlvblwpXD4iaHM9cysxCitzeW4gbWF0Y2ggZGl2YUV4dEZ1bmN0aW9ucwkJIlw8c2F2ZVwoSW50ZXJjb25uZWN0XHxQcm9wZXJ0eVx8UGFyYW1ldGVyXHxSZWNvZ25pdGlvblwpKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhRXh0RnVuY3Rpb25zCQkiKFwoc2F2ZVx8bWVhc3VyZVx8YXR0YWNoXHxtdWx0aUxldmVsXHxjYWxjdWxhdGVcKVBhcmFzaXRpY1w+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFFeHRGdW5jdGlvbnMJCSJcPFwoc2F2ZVx8bWVhc3VyZVx8YXR0YWNoXHxtdWx0aUxldmVsXHxjYWxjdWxhdGVcKVBhcmFzaXRpYygiaGU9ZS0xCitzeW4gbWF0Y2ggZGl2YUV4dEZ1bmN0aW9ucwkJIihcKGNhbGN1bGF0ZVx8bWVhc3VyZVwpUGFyYW1ldGVyXD4iaHM9cysxCitzeW4gbWF0Y2ggZGl2YUV4dEZ1bmN0aW9ucwkJIlw8XChjYWxjdWxhdGVcfG1lYXN1cmVcKVBhcmFtZXRlcigiaGU9ZS0xCitzeW4gbWF0Y2ggZGl2YUV4dEZ1bmN0aW9ucwkJIihtZWFzdXJlXChSZXNpc3RhbmNlXHxGcmluZ2VcKVw+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFFeHRGdW5jdGlvbnMJCSJcPG1lYXN1cmVcKFJlc2lzdGFuY2VcfEZyaW5nZVwpKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhRXh0RnVuY3Rpb25zCQkiKGV4dHJhY3RcKERldmljZVx8TU9TXClcPiJocz1zKzEKK3N5biBtYXRjaCBkaXZhRXh0RnVuY3Rpb25zCQkiXDxleHRyYWN0XChEZXZpY2VcfE1PU1wpKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhRFJDRnVuY3Rpb25zCQkiKGNoZWNrQWxsTGF5ZXJzXD4iaHM9cysxCitzeW4gbWF0Y2ggZGl2YURSQ0Z1bmN0aW9ucwkJIlw8Y2hlY2tBbGxMYXllcnMoImhlPWUtMQorc3luIG1hdGNoIGRpdmFEUkNGdW5jdGlvbnMJCSIoY2hlY2tMYXllclw+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFEUkNGdW5jdGlvbnMJCSJcPGNoZWNrTGF5ZXIoImhlPWUtMQorc3luIG1hdGNoIGRpdmFEUkNGdW5jdGlvbnMJCSIoZHJjXD4iaHM9cysxCitzeW4gbWF0Y2ggZGl2YURSQ0Z1bmN0aW9ucwkJIlw8ZHJjKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhRFJDRnVuY3Rpb25zCQkiKGRyY0FudGVubmFcPiJocz1zKzEKK3N5biBtYXRjaCBkaXZhRFJDRnVuY3Rpb25zCQkiXDxkcmNBbnRlbm5hKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhRnVuY3Rpb25zCQkJIihcKGRyY0V4dHJhY3RcfGx2c1wpUnVsZXNcPiJocz1zKzEKK3N5biBtYXRjaCBkaXZhRnVuY3Rpb25zCQkJIlw8XChkcmNFeHRyYWN0XHxsdnNcKVJ1bGVzKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhTGF5ZXJGdW5jdGlvbnMJIihzYXZlRGVyaXZlZFw+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFMYXllckZ1bmN0aW9ucwkiXDxzYXZlRGVyaXZlZCgiaGU9ZS0xCitzeW4gbWF0Y2ggZGl2YUxheWVyRnVuY3Rpb25zCSIoY29weUdyYXBoaWNzXD4iaHM9cysxCitzeW4gbWF0Y2ggZGl2YUxheWVyRnVuY3Rpb25zCSJcPGNvcHlHcmFwaGljcygiaGU9ZS0xCitzeW4gbWF0Y2ggZGl2YUNoa0Z1bmN0aW9ucwkJIihkdWJpb3VzRGF0YVw+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFDaGtGdW5jdGlvbnMJCSJcPGR1YmlvdXNEYXRhKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhQ2hrRnVuY3Rpb25zCQkiKG9mZkdyaWRcPiJocz1zKzEKK3N5biBtYXRjaCBkaXZhQ2hrRnVuY3Rpb25zCQkiXDxvZmZHcmlkKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhTFZTRnVuY3Rpb25zCQkiKGNvbXBhcmVEZXZpY2VQcm9wZXJ0eVw+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFMVlNGdW5jdGlvbnMJCSJcPGNvbXBhcmVEZXZpY2VQcm9wZXJ0eSgiaGU9ZS0xCitzeW4gbWF0Y2ggZGl2YUxWU0Z1bmN0aW9ucwkJIihpZ25vcmVUZXJtaW5hbFw+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFMVlNGdW5jdGlvbnMJCSJcPGlnbm9yZVRlcm1pbmFsKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhTFZTRnVuY3Rpb25zCQkiKHBhcmFtZXRlck1hdGNoVHlwZVw+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFMVlNGdW5jdGlvbnMJCSJcPHBhcmFtZXRlck1hdGNoVHlwZSgiaGU9ZS0xCitzeW4gbWF0Y2ggZGl2YUxWU0Z1bmN0aW9ucwkJIihcKHBlcm11dGVcfHBydW5lXHxyZW1vdmVcKURldmljZVw+ImhzPXMrMQorc3luIG1hdGNoIGRpdmFMVlNGdW5jdGlvbnMJCSJcPFwocGVybXV0ZVx8cHJ1bmVcfHJlbW92ZVwpRGV2aWNlKCJoZT1lLTEKK3N5biBtYXRjaCBkaXZhR2VvbUZ1bmN0aW9ucwkJIihnZW9tXHVcYVwrXCg0NVx8OTBcKVw9XD4iaHM9cysxCitzeW4gbWF0Y2ggZGl2YUdlb21GdW5jdGlvbnMJCSJcPGdlb21cdVxhXCtcKDQ1XHw5MFwpXD0oImhlPWUtMQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9kaXZhX3N5bnRheF9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX2RpdmFfc3ludGF4X2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluayBkaXZhRFJDS2V5d29yZHMJCVN0YXRlbWVudAorCUhpTGluayBkaXZhTWVhc0tleXdvcmRzCQlTdGF0ZW1lbnQKKwlIaUxpbmsgZGl2YUN0cmxGdW5jdGlvbnMJQ29uZGl0aW9uYWwKKwlIaUxpbmsgZGl2YUV4dEZ1bmN0aW9ucwkJRnVuY3Rpb24KKwlIaUxpbmsgZGl2YURSQ0Z1bmN0aW9ucwkJRnVuY3Rpb24KKwlIaUxpbmsgZGl2YUZ1bmN0aW9ucwkJRnVuY3Rpb24KKwlIaUxpbmsgZGl2YUxheWVyRnVuY3Rpb25zCUZ1bmN0aW9uCisJSGlMaW5rIGRpdmFDaGtGdW5jdGlvbnMJCUZ1bmN0aW9uCisJSGlMaW5rIGRpdmFMVlNGdW5jdGlvbnMJCUZ1bmN0aW9uCisJSGlMaW5rIGRpdmFHZW9tRnVuY3Rpb25zCUZ1bmN0aW9uCisKKwlkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZGl2YSIKKworIiB2aW06dHM9NApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZG5zLnZpbSBiL3J1bnRpbWUvc3ludGF4L2Rucy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0Yjk2ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2Rucy52aW0KQEAgLTAsMCArMSw0NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBETlMvQklORCBab25lIEZpbGUKKyIgTWFpbnRhaW5lcjogICBqZWhzb21AamVoc29tLmNvbQorIiBVUkw6CQlodHRwOi8vc2NyaXB0cy5qZWhzb20uY29tCisiIExhc3QgQ2hhbmdlOiAgMjAwMSBTZXAgMDIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorZW5kaWYKKworIiBMYXN0IG1hdGNoIGlzIHRha2VuIQorc3luIG1hdGNoCWRuc0tleXdvcmQJIlw8XChJTlx8QVx8U09BXHxOU1x8Q05BTUVcfE1YXHxQVFJcfFNPQVx8TUJcfE1HXHxNUlx8TlVMTFx8V0tTXHxISU5GT1x8VFhUXHxDU1x8Q0hcfENQVVx8T1NcKVw+Igorc3luIG1hdGNoICAgZG5zUmVjb3JkTmFtZSAgICAgICAiXlteIAldKiIKK3N5biBtYXRjaCAgIGRuc1ByZVByb2MJCSJeXCRbXiBdKiIKK3N5biBtYXRjaCAgIGRuc0NvbW1lbnQJCSI7LiokIgorc3luIG1hdGNoICAgZG5zRGF0YUZRRE4JCSJcPFteIAldKlwuWyAJXSokIgorc3luIG1hdGNoICAgZG5zQ29uc3RhbnQJCQkiXDxcKFswLTldWzAtOS5dKlx8WzAtOS5dKlswLTldXClcPiIKK3N5biBtYXRjaCAgIGRuc0lQYWRkcgkJIlw8XChcKFswLTJdXClcezAsMX1cKFswLTldXClcezEsMn1cLlwpXHszfVwoWzAtMl1cKVx7MCwxfVwoWzAtOV1cKVx7MSwyfVw+WyAJXSokIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQuCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZG5zX3N5bnRheF9pbml0cyIpCisgICAgaWYgdmVyc2lvbiA8IDUwOAorCWxldCBkaWRfZG5zX3N5bnRheF9pbml0cyA9IDEKKwljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICAgIGVsc2UKKwljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgICBlbmRpZgorCisgICAgSGlMaW5rIGRuc0NvbW1lbnQgICAgIENvbW1lbnQKKyAgICBIaUxpbmsgZG5zRGF0YUZRRE4gICAgSWRlbnRpZmllcgorICAgIEhpTGluayBkbnNQcmVQcm9jICAgICBQcmVQcm9jCisgICAgSGlMaW5rIGRuc0tleXdvcmQgICAgIEtleXdvcmQKKyAgICBIaUxpbmsgZG5zUmVjb3JkTmFtZSAgVHlwZQorICAgIEhpTGluayBkbnNJUGFkZHIgICAgICBUeXBlCisgICAgSGlMaW5rIGRuc0lQZXJyICAgICAgIEVycm9yCisgICAgSGlMaW5rIGRuc0NvbnN0YW50CSAgQ29uc3RhbnQKKworICAgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJkbnMiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9kb2Niay52aW0gYi9ydW50aW1lL3N5bnRheC9kb2Niay52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5MWVjMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2RvY2JrLnZpbQpAQCAtMCwwICsxLDE1MCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CURvY0Jvb2sKKyIgTWFpbnRhaW5lcjoJRGV2aW4gV2VhdmVyIDx2aW1AdHJpdGFyZ2V0LmNvbT4KKyIgVVJMOgkJaHR0cDovL3RyaXRhcmdldC5jb20vcHViL3ZpbS9zeW50YXgvZG9jYmsudmltCisiIExhc3QgQ2hhbmdlOgkyMDAyIFNlcCAwNAorIiBWZXJzaW9uOgkkUmV2aXNpb24kCisiIFRoYW5rcyB0byBKb2hhbm5lcyBaZWxsbmVyIDxqb2hhbm5lc0B6ZWxsbmVyLm9yZz4gZm9yIHRoZSBkZWZhdWx0IHRvIFhNTAorIiBzdWdnZXN0aW9uLgorCisiIFJFRkVSRU5DRVM6CisiICAgaHR0cDovL2RvY2Jvb2sub3JnLworIiAgIGh0dHA6Ly93d3cub3Blbi1vYXNpcy5vcmcvZG9jYm9vay8KKyIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEF1dG8gZGV0ZWN0IGFkZGVkIGJ5IEJyYW0gTW9vbGVuYWFyCitpZiAhZXhpc3RzKCdiOmRvY2JrX3R5cGUnKQorICBpZiBleHBhbmQoJyU6ZScpID09ICJzZ21sIgorICAgIGxldCBiOmRvY2JrX3R5cGUgPSAnc2dtbCcKKyAgZWxzZQorICAgIGxldCBiOmRvY2JrX3R5cGUgPSAneG1sJworICBlbmRpZgorZW5kaWYKK2lmICd4bWwnID09IGI6ZG9jYmtfdHlwZQorICAgIGRvYXUgRmlsZVR5cGUgeG1sCisgICAgc3luIGNsdXN0ZXIgeG1sVGFnSG9vayBhZGQ9ZG9jYmtLZXl3b3JkCisgICAgc3luIGNsdXN0ZXIgeG1sUmVnaW9uSG9vayBhZGQ9ZG9jYmtSZWdpb24sZG9jYmtUaXRsZSxkb2Nia1JlbWFyayxkb2Nia0NpdGUKKyAgICBzeW4gY2FzZSBtYXRjaAorZWxzZWlmICdzZ21sJyA9PSBiOmRvY2JrX3R5cGUKKyAgICBkb2F1IEZpbGVUeXBlIHNnbWwKKyAgICBzeW4gY2x1c3RlciBzZ21sVGFnSG9vayBhZGQ9ZG9jYmtLZXl3b3JkCisgICAgc3luIGNsdXN0ZXIgc2dtbFJlZ2lvbkhvb2sgYWRkPWRvY2JrUmVnaW9uLGRvY2JrVGl0bGUsZG9jYmtSZW1hcmssZG9jYmtDaXRlCisgICAgc3luIGNhc2UgaWdub3JlCitlbmRpZgorCisiIDxjb21tZW50PiBoYXMgYmVlbiByZW1vdmVkIGFuZCByZXBsYWNlIHdpdGggPHJlbWFyaz4gaW4gRG9jQm9vayA0LjAKKyIgPGNvbW1lbnQ+IGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5Lgorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGFiYnJldiBhYnN0cmFjdCBhY2NlbCBhY2tubyBhY3JvbnltIGFjdGlvbiBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBhZGRyZXNzIGFmZmlsaWF0aW9uIGFsdCBhbmNob3IgYW5zd2VyIGFwcGVuZGl4IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGFwcGxpY2F0aW9uIGFyZWEgYXJlYXNldCBhcmVhc3BlYyBhcmcgYXJ0aGVhZGVyIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGFydGljbGUgYXJ0aWNsZWluZm8gYXJ0cGFnZW51bXMgYXR0cmlidXRpb24gYXVkaW9kYXRhIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGF1ZGlvb2JqZWN0IGF1dGhvciBhdXRob3JibHVyYiBhdXRob3Jncm91cCBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBhdXRob3Jpbml0aWFscyBiZWdpbnBhZ2UgYmlibGlvZGl2IGJpYmxpb2VudHJ5IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGJpYmxpb2dyYXBoeSBiaWJsaW9taXNjIGJpYmxpb21peGVkIGJpYmxpb21zZXQgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgYmlibGlvc2V0IGJsb2NrcXVvdGUgYm9vayBib29rYmlibGlvIGJvb2tpbmZvIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGJyaWRnZWhlYWQgY2FsbG91dCBjYWxsb3V0bGlzdCBjYXB0aW9uIGNhdXRpb24gY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgY2hhcHRlciBjaXRhdGlvbiBjaXRlcmVmZW50cnkgY2l0ZXRpdGxlIGNpdHkgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgY2xhc3NuYW1lIGNtZHN5bm9wc2lzIGNvIGNvbGxhYiBjb2xsYWJuYW1lIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGNvbG9waG9uIGNvbHNwZWMgY29tbWFuZCBjb21tZW50IGNvbXB1dGVyb3V0cHV0IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGNvbmZkYXRlcyBjb25mZ3JvdXAgY29uZm51bSBjb25mc3BvbnNvciBjb25mdGl0bGUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgY29uc3RhbnQgY29udHJhY3RudW0gY29udHJhY3RzcG9uc29yIGNvbnRyaWIgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgY29weXJpZ2h0IGNvcnBhdXRob3IgY29ycG5hbWUgY291bnRyeSBkYXRhYmFzZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBkYXRlIGRlZGljYXRpb24gZG9jaW5mbyBlZGl0aW9uIGVkaXRvciBlbWFpbCBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBlbXBoYXNpcyBlbnRyeSBlbnRyeXRibCBlbnZhciBlcGlncmFwaCBlcXVhdGlvbiBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBlcnJvcmNvZGUgZXJyb3JuYW1lIGVycm9ydHlwZSBleGFtcGxlIGZheCBmaWd1cmUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgZmlsZW5hbWUgZmlyc3RuYW1lIGZpcnN0dGVybSBmb290bm90ZSBmb290bm90ZXJlZiBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBmb3JlaWducGhyYXNlIGZvcm1hbHBhcmEgZnVuY2RlZiBmdW5jcGFyYW1zIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGZ1bmNwcm90b3R5cGUgZnVuY3N5bm9wc2lzIGZ1bmNzeW5vcHNpc2luZm8gY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgZnVuY3Rpb24gZ2xvc3NhcnkgZ2xvc3NkZWYgZ2xvc3NkaXYgZ2xvc3NlbnRyeSBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBnbG9zc2xpc3QgZ2xvc3NzZWUgZ2xvc3NzZWVhbHNvIGdsb3NzdGVybSBncmFwaGljIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGdyYXBoaWNjbyBncm91cCBndWlidXR0b24gZ3VpaWNvbiBndWlsYWJlbCBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBndWltZW51IGd1aW1lbnVpdGVtIGd1aXN1Ym1lbnUgaGFyZHdhcmUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgaGlnaGxpZ2h0cyBob2xkZXIgaG9ub3JpZmljIGltYWdlZGF0YSBpbWFnZW9iamVjdCBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBpbWFnZW9iamVjdGNvIGltcG9ydGFudCBpbmRleCBpbmRleGRpdiBpbmRleGVudHJ5IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGluZGV4dGVybSBpbmZvcm1hbGVxdWF0aW9uIGluZm9ybWFsZXhhbXBsZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBpbmZvcm1hbGZpZ3VyZSBpbmZvcm1hbHRhYmxlIGlubGluZWVxdWF0aW9uIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGlubGluZWdyYXBoaWMgaW5saW5lbWVkaWFvYmplY3QgaW50ZXJmYWNlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGludGVyZmFjZWRlZmluaXRpb24gaW52cGFydG51bWJlciBpc2JuIGlzc24gY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgaXNzdWVudW0gaXRlbWl6ZWRsaXN0IGl0ZXJtc2V0IGpvYnRpdGxlIGtleWNhcCBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBrZXljb2RlIGtleWNvbWJvIGtleXN5bSBrZXl3b3JkIGtleXdvcmRzZXQgbGFiZWwgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgbGVnYWxub3RpY2UgbGluZWFnZSBsaW5lYW5ub3RhdGlvbiBsaW5rIGxpc3RpdGVtIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIGxpdGVyYWwgbGl0ZXJhbGxheW91dCBsb3QgbG90ZW50cnkgbWFudm9sbnVtIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIG1hcmt1cCBtZWRpYWxhYmVsIG1lZGlhb2JqZWN0IG1lZGlhb2JqZWN0Y28gY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgbWVtYmVyIG1lbnVjaG9pY2UgbW9kZXNwZWMgbW91c2VidXR0b24gbXNnIG1zZ2F1ZCBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBtc2dlbnRyeSBtc2dleHBsYW4gbXNnaW5mbyBtc2dsZXZlbCBtc2dtYWluIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIG1zZ29yaWcgbXNncmVsIG1zZ3NldCBtc2dzdWIgbXNndGV4dCBub3RlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIG9iamVjdGluZm8gb2xpbmsgb3B0aW9uIG9wdGlvbmFsIG9yZGVyZWRsaXN0IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIG9yZ2RpdiBvcmduYW1lIG90aGVyYWRkciBvdGhlcmNyZWRpdCBvdGhlcm5hbWUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgcGFnZW51bXMgcGFyYSBwYXJhbWRlZiBwYXJhbWV0ZXIgcGFydCBwYXJ0aW50cm8gY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgcGhvbmUgcGhyYXNlIHBvYiBwb3N0Y29kZSBwcmVmYWNlIHByaW1hcnkgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgcHJpbWFyeWllIHByaW50aGlzdG9yeSBwcm9jZWR1cmUgcHJvZHVjdG5hbWUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgcHJvZHVjdG51bWJlciBwcm9ncmFtbGlzdGluZyBwcm9ncmFtbGlzdGluZ2NvIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIHByb21wdCBwcm9wZXJ0eSBwdWJkYXRlIHB1Ymxpc2hlciBwdWJsaXNoZXJuYW1lIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIHB1YnNudW1iZXIgcWFuZGFkaXYgcWFuZGFlbnRyeSBxYW5kYXNldCBxdWVzdGlvbiBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBxdW90ZSByZWZjbGFzcyByZWZkZXNjcmlwdG9yIHJlZmVudHJ5IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIHJlZmVudHJ5dGl0bGUgcmVmZXJlbmNlIHJlZm1ldGEgcmVmbWlzY2luZm8gY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgcmVmbmFtZSByZWZuYW1lZGl2IHJlZnB1cnBvc2UgcmVmc2VjdDEgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgcmVmc2VjdDFpbmZvIHJlZnNlY3QyIHJlZnNlY3QyaW5mbyByZWZzZWN0MyBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCByZWZzZWN0M2luZm8gcmVmc3lub3BzaXNkaXYgcmVmc3lub3BzaXNkaXZpbmZvIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIHJlbGVhc2VpbmZvIHJlbWFyayByZXBsYWNlYWJsZSByZXR1cm52YWx1ZSByZXZoaXN0b3J5IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIHJldmlzaW9uIHJldm51bWJlciByZXZyZW1hcmsgcm93IHNiciBzY3JlZW4gY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgc2NyZWVuY28gc2NyZWVuaW5mbyBzY3JlZW5zaG90IHNlY29uZGFyeSBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBzZWNvbmRhcnlpZSBzZWN0MSBzZWN0MWluZm8gc2VjdDIgc2VjdDJpbmZvIHNlY3QzIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIHNlY3QzaW5mbyBzZWN0NCBzZWN0NGluZm8gc2VjdDUgc2VjdDVpbmZvIHNlY3Rpb24gY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgc2VjdGlvbmluZm8gc2VlIHNlZWFsc28gc2VlYWxzb2llIHNlZWllIHNlZyBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBzZWdsaXN0aXRlbSBzZWdtZW50ZWRsaXN0IHNlZ3RpdGxlIHNlcmllc2luZm8gY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgc2VyaWVzdm9sbnVtcyBzZXQgc2V0aW5kZXggc2V0aW5mbyBzZ21sdGFnIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIHNob3J0YWZmaWwgc2hvcnRjdXQgc2lkZWJhciBzaW1wYXJhIHNpbXBsZWxpc3QgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgc2ltcGxlc2VjdCBzcGFuc3BlYyBzdGF0ZSBzdGVwIHN0cmVldCBzdHJ1Y3RmaWVsZCBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBzdHJ1Y3RuYW1lIHN1YmplY3Qgc3ViamVjdHNldCBzdWJqZWN0dGVybSBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBzdWJzY3JpcHQgc3Vic3RlcHMgc3VidGl0bGUgc3VwZXJzY3JpcHQgc3VybmFtZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCBzeW1ib2wgc3lub3BmcmFnbWVudCBzeW5vcGZyYWdtZW50cmVmIHN5bm9wc2lzIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIHN5c3RlbWl0ZW0gdGFibGUgdGJvZHkgdGVybSB0ZXJ0aWFyeSB0ZXJ0aWFyeWllIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIHRleHRvYmplY3QgdGZvb3QgdGdyb3VwIHRoZWFkIHRpcCB0aXRsZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGRvY2JrS2V5d29yZCB0aXRsZWFiYnJldiB0b2MgdG9jYmFjayB0b2NjaGFwIHRvY2VudHJ5IHRvY2Zyb250IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZG9jYmtLZXl3b3JkIHRvY2xldmVsMSB0b2NsZXZlbDIgdG9jbGV2ZWwzIHRvY2xldmVsNCB0b2NsZXZlbDUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgdG9jcGFydCB0b2tlbiB0cmFkZW1hcmsgdHlwZSB1bGluayB1c2VyaW5wdXQgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgdmFyYXJncyB2YXJpYWJsZWxpc3QgdmFybGlzdGVudHJ5IHZhcm5hbWUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgdmlkZW9kYXRhIHZpZGVvb2JqZWN0IHZvaWQgdm9sdW1lbnVtIHdhcm5pbmcgY29udGFpbmVkCitzeW4ga2V5d29yZCBkb2Nia0tleXdvcmQgd29yZGFzd29yZCB4cmVmIHllYXIgY29udGFpbmVkCisKKyIgQWRkIHNwZWNpYWwgZW1waGFzaXMgb24gc29tZSByZWdpb25zLiBUaGFua3MgdG8gUm9yeSBIdW50ZXIgPHJvcnloQGRjcy5lZC5hYy51az4gZm9yIHRoZXNlIGlkZWFzLgorc3luIHJlZ2lvbiBkb2Nia1JlZ2lvbiBzdGFydD0iPGVtcGhhc2lzPiJsYz0xMCBlbmQ9IjwvZW1waGFzaXM+Im1lPWUtMTEgY29udGFpbnM9eG1sUmVnaW9uLHhtbEVudGl0eSxzZ21sUmVnaW9uLHNnbWxFbnRpdHkga2VlcGVuZAorc3luIHJlZ2lvbiBkb2Nia1RpdGxlICBzdGFydD0iPHRpdGxlPiJsYz03ICAgICBlbmQ9IjwvdGl0bGU+Im1lPWUtOAljb250YWlucz14bWxSZWdpb24seG1sRW50aXR5LHNnbWxSZWdpb24sc2dtbEVudGl0eSBrZWVwZW5kCitzeW4gcmVnaW9uIGRvY2JrUmVtYXJrIHN0YXJ0PSI8cmVtYXJrPiJsYz04ICAgIGVuZD0iPC9yZW1hcms+Im1lPWUtOQljb250YWlucz14bWxSZWdpb24seG1sRW50aXR5LHNnbWxSZWdpb24sc2dtbEVudGl0eSBrZWVwZW5kCitzeW4gcmVnaW9uIGRvY2JrUmVtYXJrIHN0YXJ0PSI8Y29tbWVudD4ibGM9OSAgZW5kPSI8L2NvbW1lbnQ+Im1lPWUtMTAJY29udGFpbnM9eG1sUmVnaW9uLHhtbEVudGl0eSxzZ21sUmVnaW9uLHNnbWxFbnRpdHkga2VlcGVuZAorc3luIHJlZ2lvbiBkb2Nia0NpdGUgICBzdGFydD0iPGNpdGF0aW9uPiJsYz0xMCBlbmQ9IjwvY2l0YXRpb24+Im1lPWUtMTEgY29udGFpbnM9eG1sUmVnaW9uLHhtbEVudGl0eSxzZ21sUmVnaW9uLHNnbWxFbnRpdHkga2VlcGVuZAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9kb2Nia19zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9kb2Nia19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgICBoaSBEb2Nia0JvbGQgdGVybT1ib2xkIGN0ZXJtPWJvbGQgZ3VpPWJvbGQKKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgIGhpIGRlZiBEb2Nia0JvbGQgdGVybT1ib2xkIGN0ZXJtPWJvbGQgZ3VpPWJvbGQKKyAgZW5kaWYKKworICBIaUxpbmsgZG9jYmtLZXl3b3JkCVN0YXRlbWVudAorICBIaUxpbmsgZG9jYmtSZWdpb24JRG9jYmtCb2xkCisgIEhpTGluayBkb2Nia1RpdGxlCVRpdGxlCisgIEhpTGluayBkb2Nia1JlbWFyawlDb21tZW50CisgIEhpTGluayBkb2Nia0NpdGUJQ29uc3RhbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZG9jYmsiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9kb2Nia3NnbWwudmltIGIvcnVudGltZS9zeW50YXgvZG9jYmtzZ21sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDRmM2QyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZG9jYmtzZ21sLnZpbQpAQCAtMCwwICsxLDcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglEb2NCb29rIFNHTUwKKyIgTWFpbnRhaW5lcjoJSm9oYW5uZXMgWmVsbG5lciA8am9oYW5uZXNAemVsbG5lci5vcmc+CisiIExhc3QgQ2hhbmdlOglTYW0sIDA3IFNlcCAyMDAyIDE3OjIwOjQ2IENFU1QKKworbGV0IGI6ZG9jYmtfdHlwZT0ic2dtbCIKK3J1bnRpbWUgc3ludGF4L2RvY2JrLnZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZG9jYmt4bWwudmltIGIvcnVudGltZS9zeW50YXgvZG9jYmt4bWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MWFmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9kb2Nia3htbC52aW0KQEAgLTAsMCArMSw3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJRG9jQm9vayBYTUwKKyIgTWFpbnRhaW5lcjoJSm9oYW5uZXMgWmVsbG5lciA8am9oYW5uZXNAemVsbG5lci5vcmc+CisiIExhc3QgQ2hhbmdlOglTYW0sIDA3IFNlcCAyMDAyIDE3OjIwOjEyIENFU1QKKworbGV0IGI6ZG9jYmtfdHlwZT0ieG1sIgorcnVudGltZSBzeW50YXgvZG9jYmsudmltCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9kb3NiYXRjaC52aW0gYi9ydW50aW1lL3N5bnRheC9kb3NiYXRjaC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3MzEwYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2Rvc2JhdGNoLnZpbQpAQCAtMCwwICsxLDE1OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU1TRE9TIGJhdGNoIGZpbGUgKHdpdGggTlQgY29tbWFuZCBleHRlbnNpb25zKQorIiBNYWludGFpbmVyOglNaWtlIFdpbGxpYW1zIDxtcndAZWFuZGVtLmNvLnVrPgorIiBGaWxlbmFtZXM6ICAgICouYmF0CisiIExhc3QgQ2hhbmdlOgkxNnRoIE1hcmNoIDIwMDQKKyIgV2ViIFBhZ2U6ICAgICBodHRwOi8vd3d3LmVhbmRlbS5jby51ay9tcncvdmltCisiCisiIE9wdGlvbnMgRmxhZ3M6CisiIGRvc2JhdGNoX2NtZGV4dHZlcnNpb24JLSAxID0gV2luZG93cyBOVCwgMiA9IFdpbmRvd3MgMjAwMCBbZGVmYXVsdF0KKyIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFNldCBkZWZhdWx0IGhpZ2hsaWdodGluZyB0byBXaW4yaworaWYgIWV4aXN0cygiZG9zYmF0Y2hfY21kZXh0dmVyc2lvbiIpCisgIGxldCBkb3NiYXRjaF9jbWRleHR2ZXJzaW9uID0gMgorZW5kaWYKKworIiBET1MgYmF0IGZpbGVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBjYXNlIHByZXNlcnZpbmchCitzeW4gY2FzZSBpZ25vcmUKKworc3luIGtleXdvcmQgZG9zYmF0Y2hUb2RvIGNvbnRhaW5lZAlUT0RPCisKKyIgRG9zYmF0IGtleXdvcmRzCitzeW4ga2V5d29yZCBkb3NiYXRjaFN0YXRlbWVudAlnb3RvIGNhbGwgZXhpdAorc3luIGtleXdvcmQgZG9zYmF0Y2hDb25kaXRpb25hbAlpZiBlbHNlCitzeW4ga2V5d29yZCBkb3NiYXRjaFJlcGVhdAlmb3IKKworIiBTb21lIG9wZXJhdG9ycyAtIGZpcnN0IGxvdCBhcmUgY2FzZSBzZW5zaXRpdmUhCitzeW4gY2FzZSBtYXRjaAorc3luIGtleXdvcmQgZG9zYmF0Y2hPcGVyYXRvciAgICBFUVUgTkVRIExTUyBMRVEgR1RSIEdFUQorc3luIGNhc2UgaWdub3JlCitzeW4gbWF0Y2ggZG9zYmF0Y2hPcGVyYXRvciAgICAgICJcc1stK1wqLyVdXHMiCitzeW4gbWF0Y2ggZG9zYmF0Y2hPcGVyYXRvciAgICAgICI9Igorc3luIG1hdGNoIGRvc2JhdGNoT3BlcmF0b3IgICAgICAiWy0rXCovJV09Igorc3luIG1hdGNoIGRvc2JhdGNoT3BlcmF0b3IgICAgICAiXHNcKCZcfHxcfF5cfDw8XHw+PlwpPVw9XHMiCitzeW4gbWF0Y2ggZG9zYmF0Y2hJZk9wZXJhdG9yICAgICJpZlxzXCtcKFwobm90XClcPVxzXCtcKVw9XChleGlzdFx8ZGVmaW5lZFx8ZXJyb3JsZXZlbFx8Y21kZXh0dmVyc2lvblwpXD0ibGM9MgorCisiIFN0cmluZyAtIHVzaW5nICIncyBpcyBhIGNvbnZlbmllbmNlIHJhdGhlciB0aGFuIGEgcmVxdWlyZW1lbnQgb3V0c2lkZSBvZiBGT1IKK3N5biBtYXRjaCBkb3NiYXRjaFN0cmluZwkiXCJbXiJdKlwiIiBjb250YWlucz1kb3NiYXRjaFZhcmlhYmxlLGRvc0JhdGNoQXJndW1lbnQsQGRvc2JhdGNoTnVtYmVyCitzeW4gbWF0Y2ggZG9zYmF0Y2hTdHJpbmcJIlw8ZWNob1teKT58XSoibGM9NCBjb250YWlucz1kb3NiYXRjaFZhcmlhYmxlLGRvc2JhdGNoQXJndW1lbnQsQGRvc2JhdGNoTnVtYmVyCitzeW4gbWF0Y2ggZG9zYmF0Y2hFY2hvT3BlcmF0b3IgICJcPGVjaG9cc1wrXChvblx8b2ZmXClccyokImxjPTQKKworIiBGb3IgZW1iZWRkZWQgY29tbWFuZHMKK3N5biBtYXRjaCBkb3NiYXRjaENtZAkJIihccyonW14nXSonImxjPTEgY29udGFpbnM9ZG9zYmF0Y2hTdHJpbmcsZG9zYmF0Y2hWYXJpYWJsZSxkb3NCYXRjaEFyZ3VtZW50LEBkb3NiYXRjaE51bWJlcixkb3NiYXRjaEltcGxpY2l0LGRvc2JhdGNoU3RhdGVtZW50LGRvc2JhdGNoQ29uZGl0aW9uYWwsZG9zYmF0Y2hSZXBlYXQsZG9zYmF0Y2hPcGVyYXRvcgorCisiIE51bWJlcnMgLSBzdXJyb3VuZCB3aXRoIHdzIHRvIG5vdCBpbmNsdWRlIGluIGRpciBhbmQgZmlsZW5hbWVzCitzeW4gbWF0Y2ggZG9zYmF0Y2hJbnRlZ2VyICAgICAgICJbWzpzcGFjZTpdPSgvOl1cZFwrImxjPTEKK3N5biBtYXRjaCBkb3NiYXRjaEhleAkJIltbOnNwYWNlOl09KC86XTB4XHhcKyJsYz0xCitzeW4gbWF0Y2ggZG9zYmF0Y2hCaW5hcnkJIltbOnNwYWNlOl09KC86XTBiWzAxXVwrImxjPTEKK3N5biBtYXRjaCBkb3NiYXRjaE9jdGFsCQkiW1s6c3BhY2U6XT0oLzpdMFxvXCsibGM9MQorc3luIGNsdXN0ZXIgZG9zYmF0Y2hOdW1iZXIgICAgICBjb250YWlucz1kb3NiYXRjaEludGVnZXIsZG9zYmF0Y2hIZXgsZG9zYmF0Y2hCaW5hcnksZG9zYmF0Y2hPY3RhbAorCisiIENvbW1hbmQgbGluZSBzd2l0Y2hlcworc3luIG1hdGNoIGRvc2JhdGNoU3dpdGNoCSIvXChcYVwrXHw/XCkiCisKKyIgVmFyaW91cyBzcGVjaWFsIGVzY2FwZWQgY2hhciBmb3JtYXRzCitzeW4gbWF0Y2ggZG9zYmF0Y2hTcGVjaWFsQ2hhciAgICJcXlsmfCgpPD5eXSIKK3N5biBtYXRjaCBkb3NiYXRjaFNwZWNpYWxDaGFyICAgIlwkW2EtaGwtbnBxc3R2XyQrXSIKK3N5biBtYXRjaCBkb3NiYXRjaFNwZWNpYWxDaGFyICAgIiUlIgorCisiIEVudmlyb25tZW50IHZhcmlhYmxlcworc3luIG1hdGNoIGRvc2JhdGNoSWRlbnRpZmllciAgICBjb250YWluZWQgIlxzXGhcdypcPiIKK3N5biBtYXRjaCBkb3NiYXRjaFZhcmlhYmxlCSIlXGhcdyolIgorc3luIG1hdGNoIGRvc2JhdGNoVmFyaWFibGUJIiVcaFx3KjpcKlw9W149XSo9W14lXSolIgorc3luIG1hdGNoIGRvc2JhdGNoVmFyaWFibGUJIiVcaFx3KjpcflxkXCssXGRcKyUiIGNvbnRhaW5zPWRvc2JhdGNoSW50ZWdlcgorc3luIG1hdGNoIGRvc2JhdGNoVmFyaWFibGUJIiFcaFx3KiEiCitzeW4gbWF0Y2ggZG9zYmF0Y2hWYXJpYWJsZQkiIVxoXHcqOlwqXD1bXj1dKj1bXiVdKiEiCitzeW4gbWF0Y2ggZG9zYmF0Y2hWYXJpYWJsZQkiIVxoXHcqOlx+XGRcKyxcZFwrISIgY29udGFpbnM9ZG9zYmF0Y2hJbnRlZ2VyCitzeW4gbWF0Y2ggZG9zYmF0Y2hTZXQJCSJcc1xoXHcqWystXVw9PVx7LTF9IiBjb250YWlucz1kb3NiYXRjaElkZW50aWZpZXIsZG9zYmF0Y2hPcGVyYXRvcgorCisiIEFyZ3MgdG8gYmF0IGZpbGVzIGFuZCBmb3IgbG9vcHMsIGV0Yworc3luIG1hdGNoIGRvc2JhdGNoQXJndW1lbnQJIiVcKFxkXHxcKlwpIgorc3luIG1hdGNoIGRvc2JhdGNoQXJndW1lbnQJIiUlW2Etel1cPiIKK2lmIGRvc2JhdGNoX2NtZGV4dHZlcnNpb24gPT0gMQorICBzeW4gbWF0Y2ggZG9zYmF0Y2hBcmd1bWVudAkiJVx+W2ZkcG54c11cK1woXCgkUEFUSDpcKVw9W2Etel1cfFxkXClcPiIKK2Vsc2UKKyAgc3luIG1hdGNoIGRvc2JhdGNoQXJndW1lbnQJIiVcfltmZHBueHNhdHpdXCtcKFwoJFBBVEg6XClcPVthLXpdXHxcZFwpXD4iCitlbmRpZgorCisiIExpbmUgbGFiZWxzCitzeW4gbWF0Y2ggZG9zYmF0Y2hMYWJlbAkJIl5ccyo6XHMqXGhcdypcPiIKK3N5biBtYXRjaCBkb3NiYXRjaExhYmVsCQkiXDxcKGdvdG9cfGNhbGxcKVxzXCs6XGhcdypcPiJsYz00CitzeW4gbWF0Y2ggZG9zYmF0Y2hMYWJlbAkJIlw8Z290b1xzXCtcaFx3Klw+ImxjPTQKK3N5biBtYXRjaCBkb3NiYXRjaExhYmVsCQkiOlxoXHcqXD4iCisKKyIgQ29tbWVudHMgLSB1c3VhbCByZW0gYnV0IGFsc28gdHdvIGNvbG9ucyBhcyBmaXJzdCBub24tc3BhY2UgaXMgYW4gaWRpb20KK3N5biBtYXRjaCBkb3NiYXRjaENvbW1lbnQJIl5yZW1cKCRcfFxzLiokXCkibGM9MyBjb250YWlucz1kb3NiYXRjaFRvZG8sQGRvc2JhdGNoTnVtYmVyLGRvc2JhdGNoVmFyaWFibGUsZG9zYmF0Y2hBcmd1bWVudAorc3luIG1hdGNoIGRvc2JhdGNoQ29tbWVudAkiXHNyZW1cKCRcfFxzLiokXCkibGM9NCBjb250YWlucz1kb3NiYXRjaFRvZG8sQGRvc2JhdGNoTnVtYmVyLGRvc2JhdGNoVmFyaWFibGUsZG9zYmF0Y2hBcmd1bWVudAorc3luIG1hdGNoIGRvc2JhdGNoQ29tbWVudAkiXHMqOlxzKjouKiQiIGNvbnRhaW5zPWRvc2JhdGNoVG9kbyxAZG9zYmF0Y2hOdW1iZXIsZG9zYmF0Y2hWYXJpYWJsZSxkb3NiYXRjaEFyZ3VtZW50CisKKyIgQ29tbWVudHMgaW4gKCkncyAtIHN0aWxsIHRvIGhhbmRsZSBzcGFjZXMgYmVmb3JlIHJlbQorc3luIG1hdGNoIGRvc2JhdGNoQ29tbWVudAkiKHJlbVteKV0qImxjPTQgY29udGFpbnM9ZG9zYmF0Y2hUb2RvLEBkb3NiYXRjaE51bWJlcixkb3NiYXRjaFZhcmlhYmxlLGRvc2JhdGNoQXJndW1lbnQKKworc3luIGtleXdvcmQgZG9zYmF0Y2hJbXBsaWNpdCAgICBhcHBlbmQgYXNzb2MgYXQgYXR0cmliIGJyZWFrIGNhY2xzIGNkIGNoY3AgY2hkaXIKK3N5biBrZXl3b3JkIGRvc2JhdGNoSW1wbGljaXQgICAgY2hrZHNrIGNoa250ZnMgY2xzIGNtZCBjb2xvciBjb21wIGNvbXBhY3QgY29udmVydCBjb3B5CitzeW4ga2V5d29yZCBkb3NiYXRjaEltcGxpY2l0ICAgIGRhdGUgZGVsIGRpciBkaXNrY29tcCBkaXNrY29weSBkb3NrZXkgZWNobyBlbmRsb2NhbAorc3luIGtleXdvcmQgZG9zYmF0Y2hJbXBsaWNpdCAgICBlcmFzZSBmYyBmaW5kIGZpbmRzdHIgZm9ybWF0IGZ0eXBlCitzeW4ga2V5d29yZCBkb3NiYXRjaEltcGxpY2l0ICAgIGdyYWZ0YWJsIGhlbHAga2V5YiBsYWJlbCBtZCBta2RpciBtb2RlIG1vcmUgbW92ZQorc3luIGtleXdvcmQgZG9zYmF0Y2hJbXBsaWNpdCAgICBwYXRoIHBhdXNlIHBvcGQgcHJpbnQgcHJvbXB0IHB1c2hkIHJkIHJlY292ZXIgcmVtCitzeW4ga2V5d29yZCBkb3NiYXRjaEltcGxpY2l0ICAgIHJlbiByZW5hbWUgcmVwbGFjZSByZXN0b3JlIHJtZGlyIHNldCBzZXRsb2NhbCBzaGlmdAorc3luIGtleXdvcmQgZG9zYmF0Y2hJbXBsaWNpdCAgICBzb3J0IHN0YXJ0IHN1YnN0IHRpbWUgdGl0bGUgdHJlZSB0eXBlIHZlciB2ZXJpZnkKK3N5biBrZXl3b3JkIGRvc2JhdGNoSW1wbGljaXQgICAgdm9sIHhjb3B5CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2Rvc2JhdGNoX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2Rvc2JhdGNoX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGRvc2JhdGNoVG9kbwkJVG9kbworCisgIEhpTGluayBkb3NiYXRjaFN0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIGRvc2JhdGNoQ29tbWFuZHMJZG9zYmF0Y2hTdGF0ZW1lbnQKKyAgSGlMaW5rIGRvc2JhdGNoTGFiZWwJCUxhYmVsCisgIEhpTGluayBkb3NiYXRjaENvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluayBkb3NiYXRjaFJlcGVhdAkJUmVwZWF0CisKKyAgSGlMaW5rIGRvc2JhdGNoT3BlcmF0b3IJT3BlcmF0b3IKKyAgSGlMaW5rIGRvc2JhdGNoRWNob09wZXJhdG9yCWRvc2JhdGNoT3BlcmF0b3IKKyAgSGlMaW5rIGRvc2JhdGNoSWZPcGVyYXRvcglkb3NiYXRjaE9wZXJhdG9yCisKKyAgSGlMaW5rIGRvc2JhdGNoQXJndW1lbnQJSWRlbnRpZmllcgorICBIaUxpbmsgZG9zYmF0Y2hJZGVudGlmaWVyCUlkZW50aWZpZXIKKyAgSGlMaW5rIGRvc2JhdGNoVmFyaWFibGUJZG9zYmF0Y2hJZGVudGlmaWVyCisKKyAgSGlMaW5rIGRvc2JhdGNoU3BlY2lhbENoYXIJU3BlY2lhbENoYXIKKyAgSGlMaW5rIGRvc2JhdGNoU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIGRvc2JhdGNoTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIGRvc2JhdGNoSW50ZWdlcglkb3NiYXRjaE51bWJlcgorICBIaUxpbmsgZG9zYmF0Y2hIZXgJCWRvc2JhdGNoTnVtYmVyCisgIEhpTGluayBkb3NiYXRjaEJpbmFyeQkJZG9zYmF0Y2hOdW1iZXIKKyAgSGlMaW5rIGRvc2JhdGNoT2N0YWwJCWRvc2JhdGNoTnVtYmVyCisKKyAgSGlMaW5rIGRvc2JhdGNoQ29tbWVudAlDb21tZW50CisgIEhpTGluayBkb3NiYXRjaEltcGxpY2l0CUZ1bmN0aW9uCisKKyAgSGlMaW5rIGRvc2JhdGNoU3dpdGNoCQlTcGVjaWFsCisKKyAgSGlMaW5rIGRvc2JhdGNoQ21kCQlQcmVQcm9jCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImRvc2JhdGNoIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZG9zaW5pLnZpbSBiL3J1bnRpbWUvc3ludGF4L2Rvc2luaS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3NDQxOAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2Rvc2luaS52aW0KQEAgLTAsMCArMSw0MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUNvbmZpZ3VyYXRpb24gRmlsZSAoaW5pIGZpbGUpIGZvciBNU0RPUy9NUyBXaW5kb3dzCisiIE1haW50YWluZXI6CVNlYW4gTS4gTWNLZWUgPG1ja2VlQG1pc3NsaW5rLm5ldD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWF5IDA5CisiIFZlcnNpb24gSW5mbzogQCgjKWRvc2luaS52aW0JMS42CTk3LzEyLzE1IDA4OjU0OjEyCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBzaHV0IGNhc2Ugb2ZmCitzeW4gY2FzZSBpZ25vcmUKKworc3luIG1hdGNoICBkb3NpbmlMYWJlbAkJIl4uXHstfT0iCitzeW4gcmVnaW9uIGRvc2luaUhlYWRlcgkJc3RhcnQ9IlxbIiBlbmQ9IlxdIgorc3luIG1hdGNoICBkb3NpbmlDb21tZW50CSJeOy4qJCIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZG9zaW5pX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2Rvc2luaV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisJSGlMaW5rIGRvc2luaUhlYWRlcglTcGVjaWFsCisJSGlMaW5rIGRvc2luaUNvbW1lbnQJQ29tbWVudAorCUhpTGluayBkb3NpbmlMYWJlbAlUeXBlCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImRvc2luaSIKKworIiB2aW06dHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZG90LnZpbSBiL3J1bnRpbWUvc3ludGF4L2RvdC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5NDdhYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2RvdC52aW0KQEAgLTAsMCArMSwxMTAgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgRG90CisiIEZpbGVuYW1lczogICAgKi5kb3QKKyIgTWFpbnRhaW5lcjogICBNYXJrdXMgTW90dGwgIDxtYXJrdXNAb2VmYWkuYXQ+CisiIFVSTDoJCWh0dHA6Ly93d3cuYWkudW5pdmllLmFjLmF0L35tYXJrdXMvdmltL3N5bnRheC9kb3QudmltCisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAxMQorIgkJMjAwMSBNYXkgMDQgLSBpbml0aWFsIHZlcnNpb24KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEVycm9ycworc3luIG1hdGNoICAgIGRvdFBhckVyciAgICAgIikiCitzeW4gbWF0Y2ggICAgZG90QnJhY2tFcnIgICAiXSIKK3N5biBtYXRjaCAgICBkb3RCcmFjZUVyciAgICJ9IgorCisiIEVuY2xvc2luZyBkZWxpbWl0ZXJzCitzeW4gcmVnaW9uICAgZG90RW5jbCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWRvdFBhckVuY2wgc3RhcnQ9IigiIG1hdGNoZ3JvdXA9ZG90UGFyRW5jbCBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxkb3RQYXJFcnIKK3N5biByZWdpb24gICBkb3RFbmNsIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9ZG90QnJhY2tFbmNsIHN0YXJ0PSJcWyIgbWF0Y2hncm91cD1kb3RCcmFja0VuY2wgZW5kPSJcXSIgY29udGFpbnM9QUxMQlVULGRvdEJyYWNrRXJyCitzeW4gcmVnaW9uICAgZG90RW5jbCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWRvdEJyYWNlRW5jbCBzdGFydD0ieyIgbWF0Y2hncm91cD1kb3RCcmFjZUVuY2wgZW5kPSJ9IiBjb250YWlucz1BTExCVVQsZG90QnJhY2VFcnIKKworIiBDb21tZW50cworc3luIHJlZ2lvbiAgIGRvdENvbW1lbnQgc3RhcnQ9Ii8vIiBlbmQ9IiQiIGNvbnRhaW5zPWRvdENvbW1lbnQsZG90VG9kbworc3luIHJlZ2lvbiAgIGRvdENvbW1lbnQgc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPWRvdENvbW1lbnQsZG90VG9kbworc3luIGtleXdvcmQgIGRvdFRvZG8gY29udGFpbmVkIFRPRE8gRklYTUUgWFhYCisKKyIgU3RyaW5ncworc3luIHJlZ2lvbiAgIGRvdFN0cmluZyAgICBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCisKKyIgR2VuZXJhbCBrZXl3b3Jkcworc3luIGtleXdvcmQgIGRvdEtleXdvcmQgIGRpZ3JhcGggbm9kZSBlZGdlIHN1YmdyYXBoCisKKyIgR3JhcGggYXR0cmlidXRlcworc3luIGtleXdvcmQgIGRvdFR5cGUgY2VudGVyIGxheWVycyBtYXJnaW4gbWNsaW1pdCBuYW1lIG5vZGVzZXAgbnNsaW1pdAorc3luIGtleXdvcmQgIGRvdFR5cGUgb3JkZXJpbmcgcGFnZSBwYWdlZGlyIHJhbmsgcmFua2RpciByYW5rc2VwIHJhdGlvCitzeW4ga2V5d29yZCAgZG90VHlwZSByb3RhdGUgc2l6ZQorCisiIE5vZGUgYXR0cmlidXRlcworc3luIGtleXdvcmQgIGRvdFR5cGUgZGlzdG9ydGlvbiBmaWxsY29sb3IgZm9udGNvbG9yIGZvbnRuYW1lIGZvbnRzaXplCitzeW4ga2V5d29yZCAgZG90VHlwZSBoZWlnaHQgbGF5ZXIgb3JpZW50YXRpb24gcGVyaXBoZXJpZXMgcmVndWxhcgorc3luIGtleXdvcmQgIGRvdFR5cGUgc2hhcGUgc2hhcGVmaWxlIHNpZGVzIHNrZXcgd2lkdGgKKworIiBFZGdlIGF0dHJpYnV0ZXMKK3N5biBrZXl3b3JkICBkb3RUeXBlIGFycm93aGVhZCBhcnJvd3NpemUgYXJyb3d0YWlsIGNvbnN0cmFpbnQgZGVjb3JhdGVQCitzeW4ga2V5d29yZCAgZG90VHlwZSBkaXIgaGVhZGNsaXAgaGVhZGxhYmVsIGxhYmVsYW5nbGUgbGFiZWxkaXN0YW5jZQorc3luIGtleXdvcmQgIGRvdFR5cGUgbGFiZWxmb250Y29sb3IgbGFiZWxmb250bmFtZSBsYWJlbGZvbnRzaXplCitzeW4ga2V5d29yZCAgZG90VHlwZSBtaW5sZW4gcG9ydF9sYWJlbF9kaXN0YW5jZSBzYW1laGVhZCBzYW1ldGFpbAorc3luIGtleXdvcmQgIGRvdFR5cGUgdGFpbGNsaXAgdGFpbGxhYmVsIHdlaWdodAorCisiIFNoYXJlZCBhdHRyaWJ1dGVzIChncmFwaHMsIG5vZGVzLCBlZGdlcykKK3N5biBrZXl3b3JkICBkb3RUeXBlIGNvbG9yCisKKyIgU2hhcmVkIGF0dHJpYnV0ZXMgKGdyYXBocyBhbmQgZWRnZXMpCitzeW4ga2V5d29yZCAgZG90VHlwZSBiZ2NvbG9yIGxhYmVsIFVSTAorCisiIFNoYXJlZCBhdHRyaWJ1dGVzIChub2RlcyBhbmQgZWRnZXMpCitzeW4ga2V5d29yZCAgZG90VHlwZSBmb250Y29sb3IgZm9udG5hbWUgZm9udHNpemUgbGF5ZXIgc3R5bGUKKworIiBTcGVjaWFsIGNoYXJzCitzeW4gbWF0Y2ggICAgZG90S2V5Q2hhciAgIj0iCitzeW4gbWF0Y2ggICAgZG90S2V5Q2hhciAgIjsiCitzeW4gbWF0Y2ggICAgZG90S2V5Q2hhciAgIi0+IgorCisiIElkZW50aWZpZXIKK3N5biBtYXRjaCAgICBkb3RJZGVudGlmaWVyIC9cPFx3XCtcPi8KKworIiBTeW5jaHJvbml6YXRpb24KK3N5biBzeW5jIG1pbmxpbmVzPTUwCitzeW4gc3luYyBtYXhsaW5lcz01MDAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZG90X3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2RvdF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBkb3RQYXJFcnIJIEVycm9yCisgIEhpTGluayBkb3RCcmFjZUVycgkgRXJyb3IKKyAgSGlMaW5rIGRvdEJyYWNrRXJyCSBFcnJvcgorCisgIEhpTGluayBkb3RDb21tZW50CSBDb21tZW50CisgIEhpTGluayBkb3RUb2RvCSBUb2RvCisKKyAgSGlMaW5rIGRvdFBhckVuY2wJIEtleXdvcmQKKyAgSGlMaW5rIGRvdEJyYWNrRW5jbAkgS2V5d29yZAorICBIaUxpbmsgZG90QnJhY2VFbmNsCSBLZXl3b3JkCisKKyAgSGlMaW5rIGRvdEtleXdvcmQJIEtleXdvcmQKKyAgSGlMaW5rIGRvdFR5cGUJIFR5cGUKKyAgSGlMaW5rIGRvdEtleUNoYXIJIEtleXdvcmQKKworICBIaUxpbmsgZG90U3RyaW5nCSBTdHJpbmcKKyAgSGlMaW5rIGRvdElkZW50aWZpZXIJIElkZW50aWZpZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZG90IgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZHJhY3VsYS52aW0gYi9ydW50aW1lL3N5bnRheC9kcmFjdWxhLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTM4MDYwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZHJhY3VsYS52aW0KQEAgLTAsMCArMSw4NSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CURyYWN1bGEKKyIgTWFpbnRhaW5lcjoJU2NvdHQgQm9yZGVsb24gPHNsYkBhcnRpc2FuLmNvbT4KKyIgTGFzdCBjaGFuZ2U6ICBXZWQgQXByIDI1IDE4OjUwOjAxIFBEVCAyMDAxCisiIEV4dGVuc2lvbnM6ICAgZHJhYy4qLCouZHJhYywqLmRyYywqLmx2cywqLmxwZQorIiBDb21tZW50OiAgICAgIERyYWN1bGEgaXMgYW4gaW5kdXN0cnktc3RhbmRhcmQgbGFuZ3VhZ2UgY3JlYXRlZCBieSBDQURFTkNFIChhCisiCQljb21wYW55IHNwZWNpYWxpemluZyBpbiBFbGVjdHJvbmljcyBEZXNpZ24gQXV0b21hdGlvbiksIGZvcgorIgkJdGhlIHB1cnBvc2VzIG9mIERlc2lnbiBSdWxlIENoZWNraW5nLCBMYXlvdXQgdnMuIFNjaGVtYXRpYworIgkJdmVyaWZpY2F0aW9uLCBhbmQgTGF5b3V0IFBhcmFtZXRlciBFeHRyYWN0aW9uLgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgSWdub3JlIGNhc2UKK3N5biBjYXNlIGlnbm9yZQorCisiIEEgYnVuY2ggb2YgdXNlZnVsIERyYWN1bGEga2V5d29yZHMKKworInN5biBtYXRjaCAgIGRyYWN1bGFJZGVudGlmaWVyCisKK3N5biBrZXl3b3JkIGRyYWN1bGFTdGF0ZW1lbnQgICBpbmRpc2sgcHJpbWFyeSBvdXRkaXNrIHByaW50ZmlsZSBzeXN0ZW0KK3N5biBrZXl3b3JkIGRyYWN1bGFTdGF0ZW1lbnQgICBtb2RlIHNjYWxlIHJlc29sdXRpb24gbGlzdGVycm9yIGtlZXBkYXRhCitzeW4ga2V5d29yZCBkcmFjdWxhU3RhdGVtZW50ICAgZGF0YXR5cGUgYnkgbHQgZ3Qgb3V0cHV0IGxhYmVsIHJhbmdlIHRvdWNoCitzeW4ga2V5d29yZCBkcmFjdWxhU3RhdGVtZW50ICAgaW5zaWRlIG91dHNpZGUgd2l0aGluIG92ZXJsYXAgb3V0bGliCitzeW4ga2V5d29yZCBkcmFjdWxhU3RhdGVtZW50ICAgc2NoZW1hdGljIG1vZGVsIHVuaXQgcGFyc2V0CitzeW4gbWF0Y2ggICBkcmFjdWxhU3RhdGVtZW50ICAgImZsYWctXChub240NVx8YWN1dGVhbmdsZVx8b2ZmZ3JpZFwpIgorc3luIG1hdGNoICAgZHJhY3VsYVN0YXRlbWVudCAgICJ0ZXh0LXByaS1vbmx5Igorc3luIG1hdGNoICAgZHJhY3VsYVN0YXRlbWVudCAgICJbPSZdIgorc3luIG1hdGNoICAgZHJhY3VsYVN0YXRlbWVudCAgICJcW1teLF0qXF0iCitzeW4gbWF0Y2ggICBkcmFjdWxhc3RhdGVtZW50ICAgIl4gKlwoc2VsXHx3aWR0aFx8ZXh0XHxlbmNcfGFyZWFcfHNocmlua1x8Z3Jvd1x8bGVuZ3RoXCkiCitzeW4gbWF0Y2ggICBkcmFjdWxhc3RhdGVtZW50ICAgIl4gKlwob3JcfG5vdFx8YW5kXHxzZWxlY3RcfHNpemVcfGNvbm5lY3RcfHNjb25uZWN0XHxpbnRcKSIKK3N5biBtYXRjaCAgIGRyYWN1bGFzdGF0ZW1lbnQgICAiXiAqXChzb2Z0Y2hrXHxzdGFtcFx8ZWxlbWVudFx8cGFyYXNpdGljIGNhcFx8YXR0cmlidXRlIGNhcFwpIgorc3luIG1hdGNoICAgZHJhY3VsYXN0YXRlbWVudCAgICJeICpcKGZsYWdub240NVx8bGV4dHJhY3RcfGVxdWF0aW9uXHxscGVzZWxlY3RcfGxwZWNoa1x8YXR0YWNoXCkiCitzeW4gbWF0Y2ggICBkcmFjdWxhU3RhdGVtZW50ICAgIlwodGVtcG9yYXJ5XHxjb25uZWN0XCktbGF5ZXIiCitzeW4gbWF0Y2ggICBkcmFjdWxhU3RhdGVtZW50ICAgInByb2dyYW0tZGlyIgorc3luIG1hdGNoICAgZHJhY3VsYVN0YXRlbWVudCAgICJzdGF0dXMtY29tbWFuZCIKK3N5biBtYXRjaCAgIGRyYWN1bGFTdGF0ZW1lbnQgICAiYmF0Y2gtcXVldWUiCitzeW4gbWF0Y2ggICBkcmFjdWxhU3RhdGVtZW50ICAgImNuYW1lcy1jc2VuIgorc3luIG1hdGNoICAgZHJhY3VsYVN0YXRlbWVudCAgICJmaWx0ZXItbGF5LW9wdCIKK3N5biBtYXRjaCAgIGRyYWN1bGFTdGF0ZW1lbnQgICAiZmlsdGVyLXNjaC1vcHQiCitzeW4gbWF0Y2ggICBkcmFjdWxhU3RhdGVtZW50ICAgInBvd2VyLW5vZGUiCitzeW4gbWF0Y2ggICBkcmFjdWxhU3RhdGVtZW50ICAgImdyb3VuZC1ub2RlIgorc3luIG1hdGNoICAgZHJhY3VsYVN0YXRlbWVudCAgICJzdWJja3QtbmFtZSIKKworc3luIG1hdGNoICAgZHJhY3VsYVR5cGUJCSJcKmRlc2NyaXB0aW9uIgorc3luIG1hdGNoICAgZHJhY3VsYVR5cGUJCSJcKmlucHV0LWxheWVyIgorc3luIG1hdGNoICAgZHJhY3VsYVR5cGUJCSJcKm9wZXJhdGlvbiIKK3N5biBtYXRjaCAgIGRyYWN1bGFUeXBlCQkiXCplbmQiCisKK3N5biBtYXRjaCAgIGRyYWN1bGFDb21tZW50ICI7LioiCisKK3N5biBtYXRjaCAgIGRyYWN1bGFQcmVQcm9jICJeIy4qIgorCisiTW9kaWZ5IHRoZSBmb2xsb3dpbmcgYXMgbmVlZGVkLiAgVGhlIHRyYWRlLW9mZiBpcyBwZXJmb3JtYW5jZSB2ZXJzdXMKKyJmdW5jdGlvbmFsaXR5Lgorc3luIHN5bmMgbGluZXM9NTAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZHJhY3VsYV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9kcmFjdWxhX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGRyYWN1bGFJZGVudGlmaWVyIElkZW50aWZpZXIKKyAgSGlMaW5rIGRyYWN1bGFTdGF0ZW1lbnQgIFN0YXRlbWVudAorICBIaUxpbmsgZHJhY3VsYVR5cGUgICAgICAgVHlwZQorICBIaUxpbmsgZHJhY3VsYUNvbW1lbnQgICAgQ29tbWVudAorICBIaUxpbmsgZHJhY3VsYVByZVByb2MgICAgUHJlUHJvYworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJkcmFjdWxhIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZHNsLnZpbSBiL3J1bnRpbWUvc3ludGF4L2RzbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzY2I1NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2RzbC52aW0KQEAgLTAsMCArMSwzOCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CURTU1NMCisiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgorIiBMYXN0IENoYW5nZToJVHVlLCAyNyBBcHIgMjAwNCAxNDo1NDo1OSBDRVNUCisiIEZpbGVuYW1lczoJKi5kc2wKKyIgJElkJAorCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKSB8IGZpbmlzaCB8IGVuZGlmCisKK3J1bnRpbWUgc3ludGF4L3htbC52aW0KK3N5biBjbHVzdGVyIHhtbFJlZ2lvbkhvb2sgYWRkPWRzbFJlZ2lvbixkc2xDb21tZW50CitzeW4gY2x1c3RlciB4bWxDb21tZW50SG9vayBhZGQ9ZHNsQ29uZAorCisiIEVYQU1QTEU6CisiICAgPCFbICVvdXRwdXQuaHRtbDsgWworIiAgICAgPCEtLSBzb21lIGNvbW1lbnQgLS0+CisiICAgICAoZGVmaW5lIGh0bWwtbWFuaWZlc3QgI2YpCisiICAgXV0+CisiCisiIE5PVEU6ICdjb250YWlucycgdGhlIHNhbWUgYXMgeG1sUmVnaW9uLCBleGNlcHQgeG1sVGFnIC8geG1sRW5kVGFnCitzeW4gcmVnaW9uICBkc2xDb25kIG1hdGNoZ3JvdXA9ZHNsQ29uZERlbGltIHN0YXJ0PSJcW1xfW15bXVwrXFsiIGVuZD0iXV0iIGNvbnRhaW5zPXhtbENkYXRhLEB4bWxSZWdpb25DbHVzdGVyLHhtbENvbW1lbnQseG1sRW50aXR5LHhtbFByb2Nlc3NpbmcsQHhtbFJlZ2lvbkhvb2sKKworIiBOT1RFLCB0aGF0IGRzbFJlZ2lvbiBhbmQgZHNsQ29tbWVudCBkbyBib3RoIE5PVCBoYXZlIGEgJ2NvbnRhaW5lZCcKKyIgYXJndW1lbnQsIHNvIHRoaXMgd2lsbCBhbHNvIHdvcmsgaW4gcGxhaW4gZHNzc2wgZG9jdW1lbnRzLgorCitzeW4gcmVnaW9uIGRzbFJlZ2lvbiBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0rKCsgZW5kPSspKyBjb250YWlucz1kc2xSZWdpb24sZHNsU3RyaW5nLGRzbENvbW1lbnQKK3N5biBtYXRjaCBkc2xTdHJpbmcgKyJcX1teIl0qIisgY29udGFpbmVkCitzeW4gbWF0Y2ggZHNsQ29tbWVudCArOy4qJCsgY29udGFpbnM9ZHNsVG9kbworc3luIGtleXdvcmQgZHNsVG9kbyBjb250YWluZWQgVE9ETyBGSVhNRSBYWFggZGlzcGxheQorCisiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KK2hpIGRlZiBsaW5rIGRzbFRvZG8JCVRvZG8KK2hpIGRlZiBsaW5rIGRzbFN0cmluZwkJU3RyaW5nCitoaSBkZWYgbGluayBkc2xDb21tZW50CQlDb21tZW50CisiIGNvbXBhcmUgdGhlIGZvbGxvd2luZyB3aXRoIHhtbENkYXRhU3RhcnQgLyB4bWxDZGF0YUVuZAoraGkgZGVmIGxpbmsgZHNsQ29uZERlbGltCVR5cGUKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZHNsIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZHRkLnZpbSBiL3J1bnRpbWUvc3ludGF4L2R0ZC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4MGUxOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2R0ZC52aW0KQEAgLTAsMCArMSwxODEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglEVEQgKERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbiBmb3IgWE1MKQorIiBNYWludGFpbmVyOglKb2hhbm5lcyBaZWxsbmVyIDxqb2hhbm5lc0B6ZWxsbmVyLm9yZz4KKyIJCUF1dGhvciBhbmQgcHJldmlvdXMgbWFpbnRhaW5lcjoKKyIJCURhbmllbCBBbXlvdCA8ZGFteW90QHNpdGUudW90dGF3YS5jYT4KKyIgTGFzdCBDaGFuZ2U6CVR1ZSwgMjcgQXByIDIwMDQgMTQ6NTQ6NTkgQ0VTVAorIiBGaWxlbmFtZXM6CSouZHRkCisiCisiIFJFRkVSRU5DRVM6CisiICAgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwLworIiAgIGh0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtaHRtbC05NzA0MjEKKyIKKyIgVE9ETzoKKyIgICAtIGltcHJvdmUgc3luY2hyb25pemluZy4KKworaWYgdmVyc2lvbiA8IDYwMAorICAgIHN5bnRheCBjbGVhcgorICAgIGxldCBfX2R0ZF9jcG9fc2F2ZV9fID0gJmNwbworICAgIHNldCBjcG8mCitlbHNlCisgICAgaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKwlmaW5pc2gKKyAgICBlbmRpZgorICAgIGxldCBzOmR0ZF9jcG9fc2F2ZSA9ICZjcG8KKyAgICBzZXQgY3BvJnZpbQorZW5kaWYKKworaWYgIWV4aXN0cygiZHRkX2lnbm9yZV9jYXNlIikKKyAgICAiIEkgcHJlZmVyIGhhdmluZyB0aGUgY2FzZSB0YWtlcyBpbnRvIGNvbnNpZGVyYXRpb24uCisgICAgc3luIGNhc2UgbWF0Y2gKK2Vsc2UKKyAgICBzeW4gY2FzZSBpZ25vcmUKK2VuZGlmCisKKworIiB0aGUgZm9sbG93aW5nIGxpbmUgbWFrZXMgdGhlIG9wZW5pbmcgPCEgYW5kCisiIGNsb3NpbmcgPiBoaWdobGlnaHRlZCB1c2luZyAnZHRkRnVuY3Rpb24nLgorIgorIiBQUk9WSURFUzogQGR0ZFRhZ0hvb2sKKyIKK3N5biByZWdpb24gZHRkVGFnIG1hdGNoZ3JvdXA9ZHRkRnVuY3Rpb24KKyAgICBcIHN0YXJ0PSs8ISsgZW5kPSs+KyBtYXRjaGdyb3VwPU5PTkUKKyAgICBcIGNvbnRhaW5zPWR0ZFRhZyxkdGRUYWdOYW1lLGR0ZEVycm9yLGR0ZENvbW1lbnQsZHRkU3RyaW5nLGR0ZEF0dHJUeXBlLGR0ZEF0dHJEZWYsZHRkRW51bSxkdGRQYXJhbUVudGl0eUluc3QsZHRkUGFyYW1FbnRpdHlEZWNsLGR0ZENhcmQsQGR0ZFRhZ0hvb2sKKworaWYgIWV4aXN0cygiZHRkX25vX3RhZ19lcnJvcnMiKQorICAgICIgbWFyayBldmVyeXRoaW5nIGFzIGFuIGVycm9yIHdoaWNoIHN0YXJ0cyB3aXRoIGEgPCEKKyAgICAiIGFuZCBpcyBub3Qgb3ZlcnJpZGRlbiBsYXRlci4gSWYgdGhpcyBpcyBhbm5veWluZywKKyAgICAiIGl0IGNhbiBiZSBzd2l0Y2hlZCBvZmYgYnkgc2V0dGluZyB0aGUgdmFyaWFibGUKKyAgICAiIGR0ZF9ub190YWdfZXJyb3JzLgorICAgIHN5biByZWdpb24gZHRkRXJyb3IgY29udGFpbmVkIHN0YXJ0PSs8IStsYz0yIGVuZD0rPisKK2VuZGlmCisKKyIgaWYgdGhpcyBpcyBhIGh0bWwgbGlrZSBjb21tZW50IGhpZ2h0bGlnaHQgYWxzbworIiB0aGUgb3BlbmluZyA8ISBhbmQgdGhlIGNsb3NpbmcgPiBhcyBDb21tZW50Lgorc3luIHJlZ2lvbiBkdGRDb21tZW50CQlzdGFydD0rPCFbIFx0XSotLSsgZW5kPSstLT4rIGNvbnRhaW5zPWR0ZFRvZG8KKworCisiIHByb3BlciBEVEQgY29tbWVudAorc3luIHJlZ2lvbiBkdGRDb21tZW50IGNvbnRhaW5lZCBzdGFydD0rLS0rIGVuZD0rLS0rIGNvbnRhaW5zPWR0ZFRvZG8KKworCisiIFN0YXJ0IHRhZ3MgKGtleXdvcmRzKS4gVGhpcyBpcyBjb250YWluZWQgaW4gZHRkRnVuY3Rpb24uCisiIE5vdGUgdGhhdCBldmVyeXRoaW5nIG5vdCBjb250YWluZWQgaGVyZSB3aWxsIGJlIG1hcmtlZAorIiBhcyBlcnJvci4KK3N5biBtYXRjaCBkdGRUYWdOYW1lIGNvbnRhaW5lZCArPCFcKEFUVExJU1RcfERPQ1RZUEVcfEVMRU1FTlRcfEVOVElUWVx8Tk9UQVRJT05cfFNIT1JUUkVGXHxVU0VNQVBcfFxbXCkrbGM9Mixocz1zKzIKKworCisiIHdpbGRjYXJkcyBhbmQgb3BlcmF0b3JzCitzeW4gbWF0Y2ggIGR0ZENhcmQgY29udGFpbmVkICJ8Igorc3luIG1hdGNoICBkdGRDYXJkIGNvbnRhaW5lZCAiLCIKKyIgZXZlbnV0YWxseSBvdmVycmlkZGVuIGJ5IGR0ZEVudGl0eQorc3luIG1hdGNoICBkdGRDYXJkIGNvbnRhaW5lZCAiJiIKK3N5biBtYXRjaCAgZHRkQ2FyZCBjb250YWluZWQgIj8iCitzeW4gbWF0Y2ggIGR0ZENhcmQgY29udGFpbmVkICJcKiIKK3N5biBtYXRjaCAgZHRkQ2FyZCBjb250YWluZWQgIisiCisKKyIgLi4uYW5kIGZpbmFsbHksIHNwZWNpYWwgY2FzZXMuCitzeW4gbWF0Y2ggIGR0ZENhcmQgICAgICAiQU5ZIgorc3luIG1hdGNoICBkdGRDYXJkICAgICAgIkVNUFRZIgorCitpZiAhZXhpc3RzKCJkdGRfbm9fcGFyYW1fZW50aXRpZXMiKQorCisgICAgIiBoaWdobGlnaHQgcGFyYW1ldGVyIGVudGl0eSBkZWNsYXJhdGlvbnMKKyAgICAiIGFuZCBpbnN0YW5jZXMuIE5vdGUgdGhhdCB0aGUgY2xvc2luZyBgOycKKyAgICAiIGlzIG9wdGlvbmFsLgorCisgICAgIiBpbnN0YW5jZXMKKyAgICBzeW4gcmVnaW9uIGR0ZFBhcmFtRW50aXR5SW5zdCBvbmVsaW5lIG1hdGNoZ3JvdXA9ZHRkUGFyYW1FbnRpdHlQdW5jdAorCVwgc3RhcnQ9IiVbLV9hLXpBLVowLTkuXVwrImhlPXMrMSxycz1zKzEKKwlcIHNraXA9K1stX2EtekEtWjAtOS5dKworCVwgZW5kPSI7XHxcPiIKKwlcIG1hdGNoZ3JvdXA9Tk9ORSBjb250YWlucz1kdGRQYXJhbUVudGl0eVB1bmN0CisgICAgc3luIG1hdGNoICBkdGRQYXJhbUVudGl0eVB1bmN0IGNvbnRhaW5lZCAiXC4iCisKKyAgICAiIGRlY2xhcmF0aW9ucworICAgICIgc3luIHJlZ2lvbiBkdGRQYXJhbUVudGl0eURlY2wgb25lbGluZSBtYXRjaGdyb3VwPWR0ZFBhcmFtRW50aXR5RFB1bmN0IHN0YXJ0PSs8IUVOVElUWSAlICtsYz04IHNraXA9K1stX2EtekEtWjAtOS5dKyBtYXRjaGdyb3VwPU5PTkUgZW5kPSJcPiIgY29udGFpbnM9ZHRkUGFyYW1FbnRpdHlEUHVuY3QKKyAgICBzeW4gbWF0Y2ggZHRkUGFyYW1FbnRpdHlEZWNsICs8IUVOVElUWSAlIFstX2EtekEtWjAtOS5dKitsYz04IGNvbnRhaW5zPWR0ZFBhcmFtRW50aXR5RFB1bmN0CisgICAgc3luIG1hdGNoICBkdGRQYXJhbUVudGl0eURQdW5jdCBjb250YWluZWQgIiVcfFwuIgorCitlbmRpZgorCisiICZlbnRpdGllczsgY29tcGFyZSB3aXRoIHhtbAorc3luIG1hdGNoICAgZHRkRW50aXR5CQkgICAgICAiJlteOyBcdF0qOyIgY29udGFpbnM9ZHRkRW50aXR5UHVuY3QKK3N5biBtYXRjaCAgIGR0ZEVudGl0eVB1bmN0ICBjb250YWluZWQgIlsmLjtdIgorCisiIFN0cmluZ3MgYXJlIGJldHdlZW4gcXVvdGVzCitzeW4gcmVnaW9uIGR0ZFN0cmluZyAgICBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyAgZW5kPSsiKyBjb250YWlucz1kdGRBdHRyRGVmLGR0ZEF0dHJUeXBlLGR0ZEVudW0sZHRkUGFyYW1FbnRpdHlJbnN0LGR0ZEVudGl0eSxkdGRDYXJkCitzeW4gcmVnaW9uIGR0ZFN0cmluZyAgICBzdGFydD0rJysgc2tpcD0rXFxcXFx8XFwnKyAgZW5kPSsnKyBjb250YWlucz1kdGRBdHRyRGVmLGR0ZEF0dHJUeXBlLGR0ZEVudW0sZHRkUGFyYW1FbnRpdHlJbnN0LGR0ZEVudGl0eSxkdGRDYXJkCisKKyIgRW51bWVyYXRpb24gb2YgZWxlbWVudHMgb3IgZGF0YSBiZXR3ZWVuIHBhcmVudGhlc2lzCisiCisiIFBST1ZJREVTOiBAZHRkRW51bUhvb2sKKyIKK3N5biByZWdpb24gZHRkRW51bSBtYXRjaGdyb3VwPWR0ZFR5cGUgc3RhcnQ9IigiIGVuZD0iKSIgbWF0Y2hncm91cD1OT05FIGNvbnRhaW5zPWR0ZEVudW0sZHRkUGFyYW1FbnRpdHlJbnN0LGR0ZENhcmQsQGR0ZEVudW1Ib29rCisKKyJBdHRyaWJ1dGUgdHlwZXMKK3N5biBrZXl3b3JkIGR0ZEF0dHJUeXBlIE5NVE9LRU4gIEVOVElUSUVTICBOTVRPS0VOUyAgSUQgIENEQVRBCitzeW4ga2V5d29yZCBkdGRBdHRyVHlwZSBJRFJFRiAgSURSRUZTCisiIEVOVElUWSBoYXMgdG8gdHJlYXRlZCBzcGVjaWFsIGZvciBub3Qgb3ZlcnJpZGluZyA8IUVOVElUWQorc3luIG1hdGNoICAgZHRkQXR0clR5cGUgK1teIV1cPEVOVElUWSsKKworIkF0dHJpYnV0ZSBEZWZpbml0aW9ucworc3luIG1hdGNoICBkdGRBdHRyRGVmICAgIiNSRVFVSVJFRCIKK3N5biBtYXRjaCAgZHRkQXR0ckRlZiAgICIjSU1QTElFRCIKK3N5biBtYXRjaCAgZHRkQXR0ckRlZiAgICIjRklYRUQiCisKK3N5biBjYXNlIG1hdGNoCisiIGRlZmluZSBzb21lIGNvbW1vbiBrZXl3b3JkcyB0byBtYXJrIFRPRE8KKyIgYW5kIGltcG9ydGFudCBzZWN0aW9ucyBpbnNpZGUgY29tbWVudHMuCitzeW4ga2V5d29yZCBkdGRUb2RvIGNvbnRhaW5lZCBUT0RPIEZJWE1FIFhYWAorCitzeW4gc3luYyBsaW5lcz0yNTAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZHRkX3N5bl9pbml0cyIpCisgICAgaWYgdmVyc2lvbiA8IDUwOAorCWxldCBkaWRfZHRkX3N5bl9pbml0cyA9IDEKKwljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICAgIGVsc2UKKwljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgICBlbmRpZgorCisgICAgIiBUaGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisgICAgSGlMaW5rIGR0ZEZ1bmN0aW9uCQlGdW5jdGlvbgorICAgIEhpTGluayBkdGRUYWcJCU5vcm1hbAorICAgIEhpTGluayBkdGRUeXBlCQlUeXBlCisgICAgSGlMaW5rIGR0ZEF0dHJUeXBlCQlkdGRUeXBlCisgICAgSGlMaW5rIGR0ZEF0dHJEZWYJCWR0ZFR5cGUKKyAgICBIaUxpbmsgZHRkQ29uc3RhbnQJCUNvbnN0YW50CisgICAgSGlMaW5rIGR0ZFN0cmluZwkJZHRkQ29uc3RhbnQKKyAgICBIaUxpbmsgZHRkRW51bQkJZHRkQ29uc3RhbnQKKyAgICBIaUxpbmsgZHRkQ2FyZAkJZHRkRnVuY3Rpb24KKworICAgIEhpTGluayBkdGRFbnRpdHkJCVN0YXRlbWVudAorICAgIEhpTGluayBkdGRFbnRpdHlQdW5jdAlkdGRUeXBlCisgICAgSGlMaW5rIGR0ZFBhcmFtRW50aXR5SW5zdAlkdGRDb25zdGFudAorICAgIEhpTGluayBkdGRQYXJhbUVudGl0eVB1bmN0CWR0ZFR5cGUKKyAgICBIaUxpbmsgZHRkUGFyYW1FbnRpdHlEZWNsCWR0ZFR5cGUKKyAgICBIaUxpbmsgZHRkUGFyYW1FbnRpdHlEUHVuY3QgZHRkQ29tbWVudAorCisgICAgSGlMaW5rIGR0ZENvbW1lbnQJCUNvbW1lbnQKKyAgICBIaUxpbmsgZHRkVGFnTmFtZQkJU3RhdGVtZW50CisgICAgSGlMaW5rIGR0ZEVycm9yCQlFcnJvcgorICAgIEhpTGluayBkdGRUb2RvCQlUb2RvCisKKyAgICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworaWYgdmVyc2lvbiA8IDYwMAorICAgIGxldCAmY3BvID0gX19kdGRfY3BvX3NhdmVfXworICAgIHVubGV0IF9fZHRkX2Nwb19zYXZlX18KK2Vsc2UKKyAgICBsZXQgJmNwbyA9IHM6ZHRkX2Nwb19zYXZlCisgICAgdW5sZXQgczpkdGRfY3BvX3NhdmUKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImR0ZCIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2R0bWwudmltIGIvcnVudGltZS9zeW50YXgvZHRtbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlNzIyYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2R0bWwudmltCkBAIC0wLDAgKzEsMjI1IEBACisiIERUTUwgc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CQkJWm9wZSdzIER5bmFtaWMgVGVtcGxhdGUgTWFya3VwIExhbmd1YWdlCisiIE1haW50YWluZXI6CSAgICBKZWFuIEpvcmRhYW4gPGplYW5AdXBmcm9udHN5c3RlbXMuY28uemE+IChuamopCisiIExhc3QgY2hhbmdlOgkgICAgMjAwMSBTZXAgMDIKKworIiBUaGVzZSBhcmUgdXNlZCB3aXRoIENsYXVkaW8gRmxlaW5lcidzIGh0bWwudmltIGluIHRoZSBzdGFuZGFyZCBkaXN0cmlidXRpb24uCisiCisiIFN0aWxsIHZlcnkgaGFja2lzaC4gVGhlICdkdG1sIGF0dHJpYnV0ZXMnIGFuZCAnZHRtbCBtZXRob2RzJyBoYXZlIGJlZW4KKyIgaGFja2VkIG91dCBvZiB0aGUgWm9wZSBRdWljayBSZWZlcmVuY2UgaW4gY2FzZSBzb21lb25lIGZpbmRzIHNvbWV0aGluZworIiBzZW5zaWJsZSB0byBkbyB3aXRoIHRoZW0uIEkgY2VydGFpbmx5IGhhdmVuJ3QuCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBGaXJzdCBsb2FkIHRoZSBIVE1MIHN5bnRheAoraWYgdmVyc2lvbiA8IDYwMAorICBzb3VyY2UgPHNmaWxlPjpwOmgvaHRtbC52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2h0bWwudmltCitlbmRpZgorCitzeW4gY2FzZSBtYXRjaAorCisiIFRoaXMgZG9lc24ndCBoYXZlIGFueSBlZmZlY3QuICBEb2VzIGl0IG5lZWQgdG8gYmUgbW92ZWQgdG8gYWJvdmUvCisiIGlmICFleGlzdHMoIm1haW5fc3ludGF4IikKKyIgICBsZXQgbWFpbl9zeW50YXggPSAnZHRtbCcKKyIgZW5kaWYKKworIiBkdG1sIGF0dHJpYnV0ZXMKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgYWNfaW5oZXJpdGVkX3Blcm1pc3Npb25zIGFjY2Vzc19kZWJ1Z19pbmZvIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBhY3F1aXJlZFJvbGVzQXJlVXNlZEJ5IGFsbF9tZXRhX3R5cGVzIGFzc3VtZV9jaGlsZHJlbiBBVVRIX1RZUEUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIEFVVEhFTlRJQ0FURURfVVNFUiBBVVRIRU5USUNBVElPTl9QQVRIIEJBU0UwIGJhdGNoLWVuZC1pbmRleCBiYXRjaC1zaXplIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBiYXRjaC1zdGFydC1pbmRleCBib2JvYmFzZV9tb2RpZmljYXRpb25fdGltZSBib3VuZGFyeSBicmFuY2hlcyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgYnJhbmNoZXNfZXhwciBjYXBpdGFsaXplIGNiX2RhdGFJdGVtcyBjYl9kYXRhVmFsaWQgY2JfaXNDb3B5YWJsZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgY2JfaXNNb3ZlYWJsZSBjaGFuZ2VDbGFzc0lkIGNsYXNzRGVmaW5lZEFuZEluaGVyaXRlZFBlcm1pc3Npb25zIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBjbGFzc0RlZmluZWRQZXJtaXNzaW9ucyBjbGFzc0luaGVyaXRlZFBlcm1pc3Npb25zIGNvbGxhcHNlLWFsbCBjb2x1bW4gY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIGNvbm5lY3RlZCBjb25uZWN0aW9uSXNWYWxpZCBDT05URU5UX0xFTkdUSCBDT05URU5UX1RZUEUgY29vayBjb29raWVzIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBDT1BZIGNvdW50LSBjcmVhdGVJbk9iamVjdE1hbmFnZXIgZGFfaGFzX3NpbmdsZV9hcmd1bWVudCBkYXZfX2FsbHByb3AgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIGRhdl9faW5pdCBkYXZfX3Byb3BuYW1lcyBkYXZfX3Byb3BzdGF0IGRhdl9fdmFsaWRhdGUgZGVmYXVsdCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgZGVsQ2xhc3NBdHRyIERFTEVURSBEZXN0aW5hdGlvbiBEZXN0aW5hdGlvblVSTCBkaWdpdHMgZGlzY2FyZCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgZGlzcG9zaXRpb24gZG9jdW1lbnRfc3JjIGUgZW5jb2RlIGVudGVyIGV0YyBleHBhbmQtYWxsIGV4cHIgRmlsZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgZmlsdGVyZWRfbWFuYWdlX29wdGlvbnMgZmlsdGVyZWRfbWV0YV90eXBlcyBmaXJzdC0gZm10IGZvb3RlciBmb3JtIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBHQVRFV0FZX0lOVEVSRkFDRSBnZXRfbG9jYWxfcm9sZXMgZ2V0X2xvY2FsX3JvbGVzX2Zvcl91c2VyaWQgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIGdldF9yZXF1ZXN0X3Zhcl9vcl9hdHRyIGdldF9zaXplIGdldF9zaXplIGdldF92YWxpZF91c2VyaWRzIGdldEF0dHJpYnV0ZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgZ2V0QXR0cmlidXRlTm9kZSBnZXRBdHRyaWJ1dGVzIGdldENoaWxkTm9kZXMgZ2V0Q2xhc3NBdHRyIGdldENvbnRlbnRUeXBlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBnZXREYXRhIGdldERvY1R5cGUgZ2V0RG9jdW1lbnRFbGVtZW50IGdldEVsZW1lbnRzQnlUYWdOYW1lIGdldEZpcnN0Q2hpbGQgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIGdldEltcGxlbWVudGF0aW9uIGdldExhc3RDaGlsZCBnZXRMZW5ndGggZ2V0TmFtZSBnZXROZXh0U2libGluZyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgZ2V0Tm9kZU5hbWUgZ2V0Tm9kZVR5cGUgZ2V0Tm9kZVZhbHVlIGdldE93bmVyRG9jdW1lbnQgZ2V0UGFyZW50Tm9kZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgZ2V0UHJldmlvdXNTaWJsaW5nIGdldFByb3BlcnR5IGdldFByb3BlcnR5VHlwZSBnZXRTaXplIGdldFNpemUgZ2V0U2l6ZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgZ2V0X3NpemUgZ2V0VGFnTmFtZSBnZXRVc2VyIGdldFVzZXJOYW1lIGdldFVzZXJOYW1lcyBnZXRVc2VycyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgaGFzX2xvY2FsX3JvbGVzIGhhc0NoaWxkTm9kZXMgaGFzUHJvcGVydHkgSEVBRCBoZWFkZXIgaGV4ZGlnaXRzIEhUTUwgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIGh0bWxfcXVvdGUgSFRNTEZpbGUgaWQgaW5kZXhfaHRtbCBpbmRleF9vYmplY3RzIGluZGV4ZXMgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIGluaGVyaXRlZEF0dHJpYnV0ZSBpdGVtcyBsYXN0LSBsZWF2ZSBsZWF2ZV9hbm90aGVyIGxlYXZlcyBsZXR0ZXJzIExPQ0sgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIGxvY2tlZF9pbl92ZXJzaW9uIGxvd2VyIGxvd2VyY2FzZSBtYWlsZnJvbSBtYWlsaG9zdCBtYWlsaG9zdF9saXN0IG1haWx0byBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgbWFuYWdlIG1hbmFnZV8gbWV0aG9kcyBtYW5hZ2VfYWNjZXNzIG1hbmFnZV9hY3F1aXJlZFBlcm1pc3Npb25zIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBtYW5hZ2VfYWRkQ29uZmVyYVRvcGljIG1hbmFnZV9hZGREb2N1bWVudCBtYW5hZ2VfYWRkRFRNTERvY3VtZW50IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBtYW5hZ2VfYWRkRFRNTE1ldGhvZCBtYW5hZ2VfYWRkRmlsZSBtYW5hZ2VfYWRkRm9sZGVyIG1hbmFnZV9hZGRJbWFnZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgbWFuYWdlX2FkZExvY2FsUm9sZXMgbWFuYWdlX2FkZE1haWxIb3N0IG1hbmFnZV9hZGRQZXJtaXNzaW9uIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBtYW5hZ2VfYWRkUHJpbmNpcGlhRmFjdG9yeSBtYW5hZ2VfYWRkUHJvZHVjdCBtYW5hZ2VfYWRkUHJvcGVydHkgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIG1hbmFnZV9hZGRVc2VyRm9sZGVyIG1hbmFnZV9hZGRaQ2xhc3MgbWFuYWdlX2FkZFpHYWRmbHlDb25uZWN0aW9uIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBtYW5hZ2VfYWRkWkdhZGZseUNvbm5lY3Rpb25Gb3JtIG1hbmFnZV9hZHZhbmNlZCBtYW5hZ2VfYWZ0ZXJBZGQgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIG1hbmFnZV9hZnRlckNsb25lIG1hbmFnZV9iZWZvcmVEZWxldGUgbWFuYWdlX2NoYW5nZVBlcm1pc3Npb25zIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBtYW5hZ2VfY2hhbmdlUHJvcGVydGllcyBtYW5hZ2VfY2xvbmUgbWFuYWdlX0NvcHlDb250YWluZXJGaXJzdEl0ZW0gY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIG1hbmFnZV9jb3B5T2JqZWN0cyBtYW5hZ2VfY3V0T2JqZWN0cyBtYW5hZ2VfZGVmaW5lZF9yb2xlcyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgbWFuYWdlX2RlbExvY2FsUm9sZXMgbWFuYWdlX2RlbE9iamVjdHMgbWFuYWdlX2RlbFByb3BlcnRpZXMgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIG1hbmFnZV9kaXN0cmlidXRlIG1hbmFnZV9lZGl0IG1hbmFnZV9lZGl0ZWREaWFsb2cgbWFuYWdlX2VkaXRQcm9wZXJ0aWVzIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBtYW5hZ2VfZWRpdFJvbGVzIG1hbmFnZV9leHBvcnRPYmplY3QgbWFuYWdlX0ZUUGdldCBtYW5hZ2VfRlRQbGlzdCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgbWFuYWdlX0ZUUHN0YXQgbWFuYWdlX2dldF9wcm9kdWN0X3JlYWRtZV9fIG1hbmFnZV9nZXRQZXJtaXNzaW9uTWFwcGluZyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgbWFuYWdlX2hhdmVQcm94eSBtYW5hZ2VfaGVscCBtYW5hZ2VfaW1wb3J0T2JqZWN0IG1hbmFnZV9saXN0TG9jYWxSb2xlcyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgbWFuYWdlX29wdGlvbnMgbWFuYWdlX3Bhc3RlT2JqZWN0cyBtYW5hZ2VfcGVybWlzc2lvbiBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgbWFuYWdlX3Byb3BlcnRpZXNGb3JtIG1hbmFnZV9wcm94eSBtYW5hZ2VfcmVuYW1lT2JqZWN0IG1hbmFnZV9yb2xlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBtYW5hZ2Vfc2V0TG9jYWxSb2xlcyBtYW5hZ2Vfc2V0UGVybWlzc2lvbk1hcHBpbmcgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIG1hbmFnZV9zdWJjbGFzc2FibGVDbGFzc05hbWVzIG1hbmFnZV90ZXN0IG1hbmFnZV90ZXN0Rm9ybSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgbWFuYWdlX3VuZG9fdHJhbnNhY3Rpb25zIG1hbmFnZV91cGxvYWQgbWFuYWdlX3VzZXJzIG1hbmFnZV93b3Jrc3BhY2UgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIG1hbmFnZW1lbnRfaW50ZXJmYWNlIG1hcHBpbmcgbWF0aCBtYXgtIG1lYW4tIG1lZGlhbi0gbWV0YV90eXBlIG1pbi0gY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIE1LQ09MIG1vZGlmaWVkX2luX3ZlcnNpb24gTU9WRSBtdWx0aXBsZSBuYW1lIG5hdmlnYXRlX2ZpbHRlciBuZXdfdmVyc2lvbiBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgbmV3bGluZV90b19iciBuZXh0IG5leHQtYmF0Y2hlcyBuZXh0LXNlcXVlbmNlIG5leHQtc2VxdWVuY2UtZW5kLWluZGV4IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBuZXh0LXNlcXVlbmNlLXNpemUgbmV4dC1zZXF1ZW5jZS1zdGFydC1pbmRleCBubyBtYW5hZ2VfYWNjZXNzIE5vbmUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIG5vbmVtcHR5IG5vcm1hbGl6ZSBub3dyYXAgbnVsbCBPYmplY3QgTWFuYWdlciBvYmplY3RJZHMgb2JqZWN0SXRlbXMgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIG9iamVjdE1hcCBvYmplY3RWYWx1ZXMgb2N0ZGlnaXRzIG9ubHkgb3B0aW9uYWwgT1BUSU9OUyBvcnBoYW4gb3ZlcmxhcCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgUEFSRU5UUyBQQVRIX0lORk8gUEFUSF9UUkFOU0xBVEVEIHBlcm1pc3Npb25fc2V0dGluZ3MgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIHBlcm1pc3Npb25NYXBwaW5nUG9zc2libGVWYWx1ZXMgcGVybWlzc2lvbnNPZlJvbGUgcGkgcG9ydCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgcG9zc2libGVfcGVybWlzc2lvbnMgcHJldmlvdXMgcHJldmlvdXMtYmF0Y2hlcyBwcmV2aW91cy1zZXF1ZW5jZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgcHJldmlvdXMtc2VxdWVuY2UtZW5kLWluZGV4IHByZXZpb3VzLXNlcXVlbmNlLXNpemUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIHByZXZpb3VzLXNlcXVlbmNlLXN0YXJ0LWluZGV4IFByaW5jaXBpYUZpbmQgUHJpbmNpcGlhU2VhcmNoU291cmNlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBwcm9wZGljdCBwcm9wZXJ0eUlkcyBwcm9wZXJ0eUl0ZW1zIHByb3BlcnR5TGFiZWwgcHJvcGVydHlNYXAgcHJvcGVydHlNYXAgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIHByb3BlcnR5VmFsdWVzIFBST1BGSU5EIFBST1BQQVRDSCBQVVQgcXVlcnlfZGF5IHF1ZXJ5X21vbnRoIFFVRVJZX1NUUklORyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgcXVlcnlfeWVhciBxdW90ZWRfaW5wdXQgcXVvdGVkX3JlcG9ydCByYWlzZV9zdGFuZGFyZEVycm9yTWVzc2FnZSByYW5kb20gY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIHJlYWQgcmVhZF9yYXcgUkVNT1RFX0FERFIgUkVNT1RFX0hPU1QgUkVNT1RFX0lERU5UIFJFTU9URV9VU0VSIFJFUVVFU1QgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIFJFUVVFU1RFRF9NRVRIT0QgcmVxdWlyZWQgUkVTUE9OU0UgcmV2ZXJzZSByb2xlc09mUGVybWlzc2lvbiBzYXZlIHNjaGVtYSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgU0NSSVBUX05BTUUgc2VxdWVuY2UtZW5kIHNlcXVlbmNlLWV2ZW4gc2VxdWVuY2UtaW5kZXggY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIHNlcXVlbmNlLWluZGV4LXZhci0gc2VxdWVuY2UtaXRlbSBzZXF1ZW5jZS1rZXkgc2VxdWVuY2UtTGV0dGVyIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBzZXF1ZW5jZS1sZXR0ZXIgc2VxdWVuY2UtbnVtYmVyIHNlcXVlbmNlLW9kZCBzZXF1ZW5jZS1xdWVyeSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgc2VxdWVuY2Utcm9tYW4gc2VxdWVuY2UtUm9tYW4gc2VxdWVuY2Utc3RhcnQgc2VxdWVuY2Utc3RlcC1lbmQtaW5kZXggY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIHNlcXVlbmNlLXN0ZXAtc2l6ZSBzZXF1ZW5jZS1zdGVwLXN0YXJ0LWluZGV4IHNlcXVlbmNlLXZhci0gU0VSVkVSX05BTUUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIFNFUlZFUl9QT1JUIFNFUlZFUl9QUk9UT0NPTCBTRVJWRVJfU09GVFdBUkUgc2V0Q2xhc3NBdHRyIHNldE5hbWUgc2luZ2xlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBzaXplIHNraXBfdW5hdXRob3JpemVkIHNtdHBob3N0IHNvcnQgc3BhY2lmeSBzcWxfcXVvdGUgU1FMQ29ubmVjdGlvbklEcyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgc3RhbmRhcmQtZGV2aWF0aW9uLSBzdGFuZGFyZC1kZXZpYXRpb24tbi0gc3RhbmRhcmRfaHRtbF9mb290ZXIgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIHN0YW5kYXJkX2h0bWxfaGVhZGVyIHN0YXJ0IFN0cmluZyBzdHJpbmcgc3ViamVjdCBTdWJUZW1wbGF0ZSBzdXBlclZhbHVlcyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgdGFic19wYXRoX2luZm8gdGFnIHRlc3RfdXJsXyB0ZXh0X2NvbnRlbnQgdGhpcyB0aG91c2FuZHNfY29tbWFzIHRpdGxlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSB0aXRsZV9hbmRfaWQgdGl0bGVfb3JfaWQgdG90YWwtIHRwVVJMIHRwVmFsdWVzIFRSQUNFIHRyYW5zbGF0ZSB0cmVlLWMgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIHRyZWUtY29sc3BhbiB0cmVlLWUgdHJlZS1pdGVtLWV4cGFuZGVkIHRyZWUtaXRlbS11cmwgdHJlZS1sZXZlbCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgdHJlZS1yb290LXVybCB0cmVlLXMgdHJlZS1zdGF0ZSB0eXBlIHVuZG9hYmxlX3RyYW5zYWN0aW9ucyBVTkxPQ0sgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIHVwZGF0ZV9kYXRhIHVwcGVyIHVwcGVyY2FzZSB1cmwgdXJsX3F1b3RlIFVSTG4gdXNlcl9uYW1lcyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgdXNlcmRlZmluZWRfcm9sZXMgdmFsaWRfcHJvcGVydHlfaWQgdmFsaWRfcm9sZXMgdmFsaWRhdGVfcm9sZXMgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sQXR0cmlidXRlIHZhbGlkQ2xpcERhdGEgdmFsaWRSb2xlcyB2YWx1ZXMgdmFyaWFuY2UtIHZhcmlhbmNlLW4tIHZpZXdfaW1hZ2Vfb3JfZmlsZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxBdHRyaWJ1dGUgd2hlcmUgd2hpdGVzcGFjZSB3aHJhbmRvbSB4bWxfbmFtZXNwYWNlIHpjbGFzc19jYW5kaWRhdGVfdmlld19hY3Rpb25zIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbEF0dHJpYnV0ZSBaQ2xhc3NCYXNlQ2xhc3NOYW1lcyB6aWNvbkltYWdlIFpvcGVGaW5kIFpRdWVyeUlkcyBjb250YWluZWQKKworc3luIGtleXdvcmQgZHRtbE1ldGhvZCBhYnMgYWJzb2x1dGVfdXJsIGFjX2luaGVyaXRlZF9wZXJtaXNzaW9ucyBhQ29tbW9uIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBhQ29tbW9uWiBhY29zIGFjcXVpcmVkUm9sZXNBcmVVc2VkQnkgYURheSBhZGRQcm9wZXJ0eVNoZWV0IGFNb250aCBBTVBNIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBhbXBtIEFNUE1NaW51dGVzIGFwcGVuZENoaWxkIGFwcGVuZERhdGEgYXBwZW5kSGVhZGVyIGFzaW4gYXRhbiBhdGFuMiBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgYXRvZiBhdG9pIGJldGF2YXJpYXRlIGNhcGF0aWxpemUgY2Fwd29yZHMgY2F0YWxvZ19vYmplY3QgY2VpbCBjZW50ZXIgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIGNob2ljZSBjaHIgY2xvbmVOb2RlIENPUFkgY29zIGNvc2ggY291bnQgY3JlYXRlSW5PYmplY3RNYW5hZ2VyIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBjcmVhdGVTUUxJbnB1dCBjdW5pZnZhcmlhdGUgRGF0ZSBEYXRlVGltZSBEYXkgZGF5IGRheU9mWWVhciBkZCBkZWZhdWx0IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBERUxFVEUgZGVsZXRlRGF0YSBkZWxQcm9wZXJ0eVNoZWV0IGRpdm1vZCBkb2N1bWVudF9pZCBkb2N1bWVudF90aXRsZSBkb3cgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIGVhcmxpZXN0VGltZSBlbnRlciBlcXVhbFRvIGV4cCBleHBpcmVDb29raWUgZXhwb3ZhcmlhdGUgZmFicyBmQ29tbW9uIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBmQ29tbW9uWiBmaWx0ZXJlZF9tYW5hZ2Vfb3B0aW9ucyBmaWx0ZXJlZF9tZXRhX3R5cGVzIGZpbmQgZmxvYXQgZmxvb3IgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIGZtb2QgZnJleHAgZ2FtbWEgZ2F1c3MgZ2V0IGdldF9sb2NhbF9yb2xlc19mb3JfdXNlcmlkIGdldF9zaXplIGdldGF0dHIgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIGdldEF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGVOb2RlIGdldENsYXNzQXR0ciBnZXREb21haW5zIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBnZXRFbGVtZW50c0J5VGFnTmFtZSBnZXRIZWFkZXIgZ2V0aXRlbSBnZXROYW1lZEl0ZW0gZ2V0b2JqZWN0IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBnZXRPYmplY3RzSW5mbyBnZXRwYXRoIGdldFByb3BlcnR5IGdldFJvbGVzIGdldFN0YXR1cyBnZXRVc2VyIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBnZXRVc2VyTmFtZSBncmVhdGVyVGhhbiBncmVhdGVyVGhhbkVxdWFsVG8gaF8xMiBoXzI0IGhhc19rZXkgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIGhhc19wZXJtaXNzaW9uIGhhc19yb2xlIGhhc2F0dHIgaGFzRmVhdHVyZSBoYXNoIGhhc1Byb3BlcnR5IEhFQUQgaGV4IGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBob3VyIGh5cG90IGluZGV4IGluZGV4X2h0bWwgaW5oZXJpdGVkQXR0cmlidXRlIGluc2VydEJlZm9yZSBpbnNlcnREYXRhIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBpbnQgaXNDdXJyZW50RGF5IGlzQ3VycmVudEhvdXIgaXNDdXJyZW50TWludXRlIGlzQ3VycmVudE1vbnRoIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBpc0N1cnJlbnRZZWFyIGlzRnV0dXJlIGlzTGVhZFllYXIgaXNQYXN0IGl0ZW0gam9pbiBsYXRlc3RUaW1lIGxkZXhwIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBsZWF2ZSBsZWF2ZV9hbm90aGVyIGxlbiBsZXNzVGhhbiBsZXNzVGhhbkVxdWFsVG8gbGp1c3QgbG9nIGxvZzEwIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBsb2dub3JtdmFyaWF0ZSBsb3dlciBsc3RyaXAgbWFrZXRyYW5zIG1hbmFnZSBtYW5hZ2VfYWNjZXNzIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBtYW5hZ2VfYWNxdWlyZWRQZXJtaXNzaW9ucyBtYW5hZ2VfYWRkQ29sdW1uIG1hbmFnZV9hZGREb2N1bWVudCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgbWFuYWdlX2FkZERUTUxEb2N1bWVudCBtYW5hZ2VfYWRkRFRNTE1ldGhvZCBtYW5hZ2VfYWRkRmlsZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgbWFuYWdlX2FkZEZvbGRlciBtYW5hZ2VfYWRkSW1hZ2UgbWFuYWdlX2FkZEluZGV4IG1hbmFnZV9hZGRMb2NhbFJvbGVzIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBtYW5hZ2VfYWRkTWFpbEhvc3QgbWFuYWdlX2FkZFBlcm1pc3Npb24gbWFuYWdlX2FkZFByaW5jaXBpYUZhY3RvcnkgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIG1hbmFnZV9hZGRQcm9kdWN0IG1hbmFnZV9hZGRQcm9wZXJ0eSBtYW5hZ2VfYWRkUHJvcGVydHlTaGVldCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgbWFuYWdlX2FkZFVzZXJGb2xkZXIgbWFuYWdlX2FkZFpDYXRhbG9nIG1hbmFnZV9hZGRaQ2xhc3MgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIG1hbmFnZV9hZGRaR2FkZmx5Q29ubmVjdGlvbiBtYW5hZ2VfYWRkWkdhZGZseUNvbm5lY3Rpb25Gb3JtIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBtYW5hZ2VfYWR2YW5jZWQgbWFuYWdlX2NhdGFsb2dDbGVhciBtYW5hZ2VfY2F0YWxvZ0ZvdW5kSXRlbXMgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIG1hbmFnZV9jYXRhbG9nT2JqZWN0IG1hbmFnZV9jYXRhbG9nUmVpbmRleCBtYW5hZ2VfY2hhbmdlUGVybWlzc2lvbnMgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIG1hbmFnZV9jaGFuZ2VQcm9wZXJ0aWVzIG1hbmFnZV9jbG9uZSBtYW5hZ2VfQ29weUNvbnRhaW5lckZpcnN0SXRlbSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgbWFuYWdlX2NvcHlPYmplY3RzIG1hbmFnZV9jcmVhdGVFZGl0b3IgbWFuYWdlX2NyZWF0ZVZpZXcgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIG1hbmFnZV9jdXRPYmplY3RzIG1hbmFnZV9kZWZpbmVkX3JvbGVzIG1hbmFnZV9kZWxDb2x1bW5zIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBtYW5hZ2VfZGVsSW5kZXhlcyBtYW5hZ2VfZGVsTG9jYWxSb2xlcyBtYW5hZ2VfZGVsT2JqZWN0cyBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgbWFuYWdlX2RlbFByb3BlcnRpZXMgbWFuYWdlX0Rpc2NhcmRfX2RyYWZ0X18gbWFuYWdlX2Rpc3RyaWJ1dGUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIG1hbmFnZV9lZGl0IG1hbmFnZV9lZGl0IG1hbmFnZV9lZGl0ZWREaWFsb2cgbWFuYWdlX2VkaXRQcm9wZXJ0aWVzIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBtYW5hZ2VfZWRpdFJvbGVzIG1hbmFnZV9leHBvcnRPYmplY3QgbWFuYWdlX2ltcG9ydE9iamVjdCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgbWFuYWdlX21ha2VDaGFuZ2VzIG1hbmFnZV9wYXN0ZU9iamVjdHMgbWFuYWdlX3Blcm1pc3Npb24gY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIG1hbmFnZV9wcm9wZXJ0aWVzRm9ybSBtYW5hZ2VfcHJveHkgbWFuYWdlX3JlbmFtZU9iamVjdCBtYW5hZ2Vfcm9sZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgbWFuYWdlX1NhdmVfX2RyYWZ0X18gbWFuYWdlX3NldExvY2FsUm9sZXMgbWFuYWdlX3NldFBlcm1pc3Npb25NYXBwaW5nIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBtYW5hZ2VfdGVzdCBtYW5hZ2VfdGVzdEZvcm0gbWFuYWdlX3VuY2F0YWxvZ09iamVjdCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgbWFuYWdlX3VuZG9fdHJhbnNhY3Rpb25zIG1hbmFnZV91cGxvYWQgbWFuYWdlX3VzZXJzIG1hbmFnZV93b3Jrc3BhY2UgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIG1hbmdlX2NyZWF0ZVdpemFyZCBtYXggbWluIG1pbnV0ZSBNS0NPTCBtbSBtb2RmIG1vbnRoIE1vbnRoIE1PVkUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIG5hbWVzcGFjZSBuZXdfdmVyc2lvbiBuZXh0T2JqZWN0IG5vcm1hbHZhcmlhdGUgbm90RXF1YWxUbyBvYmplY3RJZHMgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIG9iamVjdEl0ZW1zIG9iamVjdFZhbHVlcyBvY3QgT1BUSU9OUyBvcmQgcGFyZXRvdmFyaWF0ZSBwYXJ0cyBwQ29tbW9uIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBwQ29tbW9uWiBwRGF5IHBlcm1pc3Npb25zT2ZSb2xlIHBNb250aCBwb3cgUHJlY2lzZUFNUE0gUHJlY2lzZVRpbWUgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIHByZXZpb3VzT2JqZWN0IHByb3BlcnR5SW5mbyBwcm9wZXJ0eUxhYmVsIFBST1BGSU5EIFBST1BQQVRDSCBQVVQgcXVpdCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgcmFpc2Vfc3RhbmRhcmRFcnJvck1lc3NhZ2UgcmFuZGludCByYW5kb20gcmVhZCByZWFkX3JhdyByZWRpcmVjdCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgcmVtb3ZlQXR0cmlidXRlIHJlbW92ZUF0dHJpYnV0ZU5vZGUgcmVtb3ZlQ2hpbGQgcmVwbGFjZSByZXBsYWNlQ2hpbGQgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIHJlcGxhY2VEYXRhIHJmYzgyMiByZmluZCByaW5kZXggcmp1c3Qgcm9sZXNPZlBlcm1pc3Npb24gcm91bmQgcnN0cmlwIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBzYXZlIHNlYXJjaFJlc3VsdHMgc2Vjb25kIHNlZWQgc2V0IHNldEF0dHJpYnV0ZSBzZXRBdHRyaWJ1dGVOb2RlIHNldEJhc2UgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIHNldENvb2tpZSBzZXRIZWFkZXIgc2V0U3RhdHVzIHNpbiBzaW5oIHNwbGl0IHNwbGl0VGV4dCBzcXJ0IHN0ciBzdHJpcCBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2Qgc3Vic3RyaW5nRGF0YSBzdXBlclZhbHVlcyBzd2FwY2FzZSB0YWJzX3BhdGhfaW5mbyB0YW4gdGFuaCBUaW1lIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCBUaW1lTWludXRlcyB0aW1lVGltZSB0aW1lem9uZSB0aXRsZSB0aXRsZV9hbmRfaWQgdGl0bGVfb3JfaWQgdG9YTUwgY29udGFpbmVkCitzeW4ga2V5d29yZCBkdG1sTWV0aG9kIHRvWm9uZSB1bmNhdGFsb2dfb2JqZWN0IHVuZG9hYmxlX3RyYW5zYWN0aW9ucyB1bmlmb3JtIHVuaXF1ZVZhbHVlc0ZvciBjb250YWluZWQKK3N5biBrZXl3b3JkIGR0bWxNZXRob2QgdXBkYXRlX2RhdGEgdXBwZXIgdmFsaWRfcHJvcGVydHlfaWQgdmFsaWRhdGVfcm9sZXMgdm9ubWlzZXN2YXJpYXRlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZHRtbE1ldGhvZCB3ZWlidWxsdmFyaWF0ZSB5ZWFyIHl5IHpmaWxsIFpvcGVGaW5kIGNvbnRhaW5lZAorCisiIERUTUwgdGFncworc3luIGtleXdvcmQgZHRtbFRhZ05hbWUgdmFyIGlmIGVsaWYgZWxzZSB1bmxlc3MgaW4gd2l0aCBsZXQgY2FsbCByYWlzZSB0cnkgZXhjZXB0IHRhZyBjb21tZW50IHRyZWUgc3FsdmFyIHNxbHRlc3Qgc3FsZ3JvdXAgc2VuZG1haWwgbWltZSB0cmFuc3BhcmVudCBjb250YWluZWQKKworc3luIGtleXdvcmQgZHRtbEVuZFRhZ05hbWUgaWYgdW5sZXNzIGluIHdpdGggbGV0IHJhaXNlIHRyeSB0cmVlIHNlbmRtYWlsIHRyYW5zcGFyZW50IGNvbnRhaW5lZAorCisiIE93biBhZGRpdGlvbnMKK3N5biBrZXl3b3JkIGR0bWxUT0RPICAgIFRPRE8gRklYTUUJCWNvbnRhaW5lZAorCitzeW4gcmVnaW9uIGR0bWxDb21tZW50IHN0YXJ0PSs8ZHRtbC1jb21tZW50PisgZW5kPSs8L2R0bWwtY29tbWVudD4rIGNvbnRhaW5zPWR0bWxUT0RPCisKKyIgQWxsIGR0bWxUYWdOYW1lcyBhcmUgY29udGFpbmVkIGJ5IGR0bWxJc1RhZy4KK3N5biBtYXRjaCBkdG1sSXNUYWcJICAgICJkdG1sLVtBLVphLXpdXCsiICAgIGNvbnRhaW5zPWR0bWxUYWdOYW1lCisKKyIgJ3ZhcicgdGFnIGVudGl0eSBzeW50YXg6ICZkdG1sLXZhcmlhYmxlTmFtZTsKKyIgICAgICAgLSB3aXRoIGF0dHJpYnV0ZXM6ICZkdG1sLmF0dHJpYnV0ZTFbLmF0dHJpYnV0ZTJdLi4uLXZhcmlhYmxlTmFtZTsKK3N5biBtYXRjaCBkdG1sU3BlY2lhbENoYXIgIiZkdG1sWy4wLTlBLVphLXpfXVx7LX0tWzAtOUEtWmEtel8uXVwrOyIKKworIiBSZWRlZmluZSB0byBhbGxvdyBpbmNsdXNpb24gb2YgRFRNTCB3aXRoaW4gSFRNTCBzdHJpbmdzLgorc3luIGNsdXN0ZXIgaHRtbFRvcCBjb250YWlucz1AU3BlbGwsaHRtbFRhZyxodG1sRW5kVGFnLGR0bWxTcGVjaWFsQ2hhcixodG1sU3BlY2lhbENoYXIsaHRtbFByZVByb2MsaHRtbENvbW1lbnQsaHRtbExpbmssamF2YVNjcmlwdCxAaHRtbFByZXByb2MKK3N5biByZWdpb24gaHRtbExpbmsgc3RhcnQ9IjxhXD5bXj5dKmhyZWZcPiIgZW5kPSI8L2E+Im1lPWUtNCBjb250YWlucz1AU3BlbGwsaHRtbFRhZyxodG1sRW5kVGFnLGR0bWxTcGVjaWFsQ2hhcixodG1sU3BlY2lhbENoYXIsaHRtbFByZVByb2MsaHRtbENvbW1lbnQsamF2YVNjcmlwdCxAaHRtbFByZXByb2MKK3N5biByZWdpb24gaHRtbEhlYWQgc3RhcnQ9IjxoZWFkXD4iIGVuZD0iPC9oZWFkPiJtZT1lLTcgZW5kPSI8Ym9keVw+Im1lPWUtNSBlbmQ9IjxoWzEtNl1cPiJtZT1lLTMgY29udGFpbnM9aHRtbFRhZyxodG1sRW5kVGFnLGR0bWxTcGVjaWFsQ2hhcixodG1sU3BlY2lhbENoYXIsaHRtbFByZVByb2MsaHRtbENvbW1lbnQsaHRtbExpbmssaHRtbFRpdGxlLGphdmFTY3JpcHQsY3NzU3R5bGUsQGh0bWxQcmVwcm9jCitzeW4gcmVnaW9uIGh0bWxUaXRsZSBzdGFydD0iPHRpdGxlXD4iIGVuZD0iPC90aXRsZT4ibWU9ZS04IGNvbnRhaW5zPWh0bWxUYWcsaHRtbEVuZFRhZyxkdG1sU3BlY2lhbENoYXIsaHRtbFNwZWNpYWxDaGFyLGh0bWxQcmVQcm9jLGh0bWxDb21tZW50LGphdmFTY3JpcHQsQGh0bWxQcmVwcm9jCitzeW4gcmVnaW9uICBodG1sU3RyaW5nICAgY29udGFpbmVkIHN0YXJ0PSsiKyBlbmQ9KyIrIGNvbnRhaW5zPWR0bWxTcGVjaWFsQ2hhcixodG1sU3BlY2lhbENoYXIsamF2YVNjcmlwdEV4cHJlc3Npb24sZHRtbElzVGFnLGR0bWxBdHRyaWJ1dGUsZHRtbE1ldGhvZCxAaHRtbFByZXByb2MKK3N5biBtYXRjaCAgIGh0bWxUYWdOICAgICBjb250YWluZWQgKzxccypbLWEtekEtWjAtOV1cKytocz1zKzEgY29udGFpbnM9aHRtbFRhZ05hbWUsaHRtbFNwZWNpYWxUYWdOYW1lLGR0bWxJc1RhZyxkdG1sQXR0cmlidXRlLGR0bWxNZXRob2QsQGh0bWxUYWdOYW1lQ2x1c3Rlcgorc3luIG1hdGNoICAgaHRtbFRhZ04gICAgIGNvbnRhaW5lZCArPC9ccypbLWEtekEtWjAtOV1cKytocz1zKzIgY29udGFpbnM9aHRtbFRhZ05hbWUsaHRtbFNwZWNpYWxUYWdOYW1lLGR0bWxJc1RhZyxkdG1sQXR0cmlidXRlLGR0bWxNZXRob2QsQGh0bWxUYWdOYW1lQ2x1c3RlcgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9kdG1sX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2R0bWxfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgZHRtbElzVGFnCQkJUHJlUHJvYworICBIaUxpbmsgZHRtbEF0dHJpYnV0ZQkJSWRlbnRpZmllcgorICBIaUxpbmsgZHRtbE1ldGhvZAkJCUZ1bmN0aW9uCisgIEhpTGluayBkdG1sQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgZHRtbFRPRE8JCQlUb2RvCisgIEhpTGluayBkdG1sU3BlY2lhbENoYXIgICAgU3BlY2lhbAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJkdG1sIgorCisiIGlmIG1haW5fc3ludGF4ID09ICdkdG1sJworIiAgIHVubGV0IG1haW5fc3ludGF4CisiIGVuZGlmCisKKyIgdmltOiB0cz00CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9keWxhbi52aW0gYi9ydW50aW1lL3N5bnRheC9keWxhbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyNjJkNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2R5bGFuLnZpbQpAQCAtMCwwICsxLDEwOSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUR5bGFuCisiIEF1dGhvcnM6CUp1c3R1cyBQZW5kbGV0b24gPGp1c3R1c0BhY20ub3JnPgorIgkJQnJlbnQgQS4gRnVsZ2hhbSA8YmZ1bGdoYW1AZGViaWFuLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CUZyaSBTZXAgMjkgMTM6NDU6NTUgUERUIDIwMDAKKyIKKyIgVGhpcyBzeW50YXggZmlsZSBpcyBiYXNlZCBvbiB0aGUgSGFza2VsbCwgUGVybCwgU2NoZW1lLCBhbmQgQworIiBzeW50YXggZmlsZXMuCisKKyIgUGFydCAxOiAgU3ludGF4IGRlZmluaXRpb24KKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc2V0IGxpc3AKK2Vsc2UKKyAgc2V0bG9jYWwgbGlzcAorZW5kaWYKKworIiBIaWdobGlnaHQgc3BlY2lhbCBjaGFyYWN0ZXJzICh0aG9zZSB0aGF0IGhhdmUgYmFja3NsYXNoZXMpIGRpZmZlcmVudGx5CitzeW4gbWF0Y2gJZHlsYW5TcGVjaWFsCQlkaXNwbGF5IGNvbnRhaW5lZCAiXFxcKHhceFwrXHxcb1x7MSwzfVx8Llx8JFwpIgorCisiIEtleXdvcmRzCitzeW4ga2V5d29yZAlkeWxhbkJsb2NrCQlhZnRlcndhcmRzIGJlZ2luIGJsb2NrIGNsZWFudXAgZW5kCitzeW4ga2V5d29yZAlkeWxhbkNsYXNzTW9kcwkJYWJzdHJhY3QgY29uY3JldGUgcHJpbWFyeSBpbmhlcml0ZWQgdmlydHVhbAorc3luIGtleXdvcmQJZHlsYW5FeGNlcHRpb24JCWV4Y2VwdGlvbiBoYW5kbGVyIHNpZ25hbAorc3luIGtleXdvcmQJZHlsYW5QYXJhbURlZnMJCW1ldGhvZCBjbGFzcyBmdW5jdGlvbiBsaWJyYXJ5IG1hY3JvIGludGVyZmFjZQorc3luIGtleXdvcmQJZHlsYW5TaW1wbGVEZWZzCQljb25zdGFudCB2YXJpYWJsZSBnZW5lcmljIHByaW1hcnkKK3N5biBrZXl3b3JkCWR5bGFuT3RoZXIJCWFib3ZlIGJlbG93IGZyb20gYnkgaW4gaW5zdGFuY2UgbG9jYWwgc2xvdCBzdWJjbGFzcyB0aGVuIHRvCitzeW4ga2V5d29yZAlkeWxhbkNvbmRpdGlvbmFsCWlmIHdoZW4gc2VsZWN0IGNhc2UgZWxzZSBlbHNlaWYgdW5sZXNzIGZpbmFsbHkgb3RoZXJ3aXNlIHRoZW4KK3N5biBrZXl3b3JkCWR5bGFuUmVwZWF0CQliZWdpbiBmb3IgdW50aWwgd2hpbGUgZnJvbSB0bworc3luIGtleXdvcmQJZHlsYW5TdGF0ZW1lbnQJCWRlZmluZSBsZXQKK3N5biBrZXl3b3JkCWR5bGFuSW1wb3J0CQl1c2UgaW1wb3J0IGV4cG9ydCBleGNsdWRlIHJlbmFtZSBjcmVhdGUKK3N5biBrZXl3b3JkCWR5bGFuTWlzY01vZHMJCW9wZW4gc2VhbGVkIGRvbWFpbiBzaW5nbGV0b24gc2lkZXdheXMgaW5saW5lIGZ1bmN0aW9uYWwKKworIiBNYXRjaGluZyBydWxlcyBmb3Igc3BlY2lhbCBmb3Jtcworc3luIG1hdGNoCWR5bGFuT3BlcmF0b3IJCSJcc1stISUmXCpcKy89XD9AXFxefH46XVwrWy0jIT4lJjpcKlwrLz1cP0BcXF58fl0qIgorc3luIG1hdGNoCWR5bGFuT3BlcmF0b3IJCSJcKFw8W0EtWl1bYS16QS1aMC05XyddKlwuXClcPTpbLSEjJCUmXCpcKy4vPVw/QFxcXnx+Ol0qIgorIiBOdW1iZXJzCitzeW4gbWF0Y2gJZHlsYW5OdW1iZXIJCSJcPFswLTldXCtcPlx8XDwwW3hYXVswLTlhLWZBLUZdXCtcPlx8XDwwW29PXVswLTddXCtcPiIKK3N5biBtYXRjaAlkeWxhbk51bWJlcgkJIlw8WzAtOV1cK1wuWzAtOV1cK1woW2VFXVstK11cPVswLTldXCtcKVw9XD4iCisiIEJvb2xlYW5zCitzeW4gbWF0Y2gJZHlsYW5Cb29sZWFuCQkiI3RcfCNmIgorIiBDb21tZW50cworc3luIG1hdGNoCWR5bGFuQ29tbWVudAkJIi8vLioiCitzeW4gcmVnaW9uCWR5bGFuQ29tbWVudAkJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iCisiIFN0cmluZ3MKK3N5biByZWdpb24JZHlsYW5TdHJpbmcJCXN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9ZHlTcGVjaWFsCitzeW4gbWF0Y2gJZHlsYW5DaGFyYWN0ZXIJCSInW15cXF0nIgorIiBDb25zdGFudHMsIGNsYXNzZXMsIGFuZCB2YXJpYWJsZXMKK3N5biBtYXRjaAlkeWxhbkNvbnN0YW50CQkiJFw8W2EtekEtWjAtOVwtXVwrXD4iCitzeW4gbWF0Y2gJZHlsYW5DbGFzcwkJIjxcPFthLXpBLVowLTlcLV1cK1w+PiIKK3N5biBtYXRjaAlkeWxhblZhcmlhYmxlCQkiXCpcPFthLXpBLVowLTlcLV1cK1w+XCoiCisiIFByZWNvbmRpdGlvbnMKK3N5biByZWdpb24JZHlsYW5QcmVjb25kaXQJCXN0YXJ0PSJeXHMqI1xzKlwoaWZcPlx8ZWxzZVw+XHxlbmRpZlw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIgorCisiIFRoZXNlIGFwcGVhciBhdCB0aGUgdG9wIG9mIGZpbGVzICh1c3VhbGx5KS4gIEkgbGlrZSB0byBoaWdobGlnaHQgdGhlIHdob2xlIGxpbmUKKyIgc28gdGhhdCB0aGUgZGVmaW5pdGlvbiBzdGFuZHMgb3V0LiAgVGhleSBzaG91bGQgcHJvYmFibHkgcmVhbGx5IGJlIGtleXdvcmRzLCBidXQgdGhleQorIiBkb24ndCBnZW5lcmFsbHkgYXBwZWFyIGluIHRoZSBtaWRkbGUgb2YgYSBsaW5lIG9mIGNvZGUuCitzeW4gcmVnaW9uCWR5bGFuSGVhZGVyCXN0YXJ0PSJeW01tXW9kdWxlOiIgZW5kPSJeJCIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZHlsYW5fc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZHlsYW5fc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgZHlsYW5CbG9jawkJUHJlUHJvYworICBIaUxpbmsgZHlsYW5Cb29sZWFuCQlCb29sZWFuCisgIEhpTGluayBkeWxhbkNoYXJhY3RlcgkJQ2hhcmFjdGVyCisgIEhpTGluayBkeWxhbkNsYXNzCQlTdHJ1Y3R1cmUKKyAgSGlMaW5rIGR5bGFuQ2xhc3NNb2RzCQlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGR5bGFuQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgZHlsYW5Db25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgZHlsYW5Db25zdGFudAkJQ29uc3RhbnQKKyAgSGlMaW5rIGR5bGFuRXhjZXB0aW9uCQlFeGNlcHRpb24KKyAgSGlMaW5rIGR5bGFuSGVhZGVyCQlNYWNybworICBIaUxpbmsgZHlsYW5JbXBvcnQJCUluY2x1ZGUKKyAgSGlMaW5rIGR5bGFuTGFiZWwJCUxhYmVsCisgIEhpTGluayBkeWxhbk1pc2NNb2RzCQlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGR5bGFuTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIGR5bGFuT3RoZXIJCUtleXdvcmQKKyAgSGlMaW5rIGR5bGFuT3BlcmF0b3IJCU9wZXJhdG9yCisgIEhpTGluayBkeWxhblBhcmFtRGVmcwkJS2V5d29yZAorICBIaUxpbmsgZHlsYW5QcmVjb25kaXQJCVByZUNvbmRpdAorICBIaUxpbmsgZHlsYW5SZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgZHlsYW5TaW1wbGVEZWZzCUtleXdvcmQKKyAgSGlMaW5rIGR5bGFuU3RhdGVtZW50CQlNYWNybworICBIaUxpbmsgZHlsYW5TdHJpbmcJCVN0cmluZworICBIaUxpbmsgZHlsYW5WYXJpYWJsZQkJSWRlbnRpZmllcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJkeWxhbiIKKworIiB2aW06dHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZHlsYW5pbnRyLnZpbSBiL3J1bnRpbWUvc3ludGF4L2R5bGFuaW50ci52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlZjgxNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2R5bGFuaW50ci52aW0KQEAgLTAsMCArMSw1MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUR5bGFuCisiIEF1dGhvcnM6CUp1c3R1cyBQZW5kbGV0b24gPGp1c3R1c0BhY20ub3JnPgorIiBMYXN0IENoYW5nZToJRnJpIFNlcCAyOSAxMzo1MzoyNyBQRFQgMjAwMAorIgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCitzeW4gcmVnaW9uCWR5bGFuaW50ckluZm8JCW1hdGNoZ3JvdXA9U3RhdGVtZW50IHN0YXJ0PSJeIiBlbmQ9IjoiIG9uZWxpbmUKK3N5biBtYXRjaAlkeWxhbmludHJJbnRlcmZhY2UJImRlZmluZSBpbnRlcmZhY2UiCitzeW4gbWF0Y2gJZHlsYW5pbnRyQ2xhc3MJCSI8Lio+Igorc3luIHJlZ2lvbglkeWxhbmludHJUeXBlCQlzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCisKK3N5biByZWdpb24JZHlsYW5pbnRySW5jbHVkZWQJY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisKK3N5biBtYXRjaAlkeWxhbmludHJJbmNsdWRlZAljb250YWluZWQgIjxbXj5dKj4iCitzeW4gbWF0Y2gJZHlsYW5pbnRySW5jbHVkZQkiXlxzKiNccyppbmNsdWRlXD5ccypbIjxdIiBjb250YWlucz1pbnRySW5jbHVkZWQKKworInN5biBrZXl3b3JkIGludHJNb2RzIHBvaW50ZXIgc3RydWN0CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2R5bGFuX2ludHJfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZHlsYW5faW50cl9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBkeWxhbmludHJJbmZvCQlTcGVjaWFsCisgIEhpTGluayBkeWxhbmludHJJbnRlcmZhY2UJT3BlcmF0b3IKKyAgSGlMaW5rIGR5bGFuaW50ck1vZHMJCVR5cGUKKyAgSGlMaW5rIGR5bGFuaW50ckNsYXNzCQlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGR5bGFuaW50clR5cGUJCVR5cGUKKyAgSGlMaW5rIGR5bGFuaW50ckluY2x1ZGVkCVN0cmluZworICBIaUxpbmsgZHlsYW5pbnRySW5jbHVkZQlJbmNsdWRlCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImR5bGFuaW50ciIKKworIiB2aW06dHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZHlsYW5saWQudmltIGIvcnVudGltZS9zeW50YXgvZHlsYW5saWQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjN2I0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9keWxhbmxpZC52aW0KQEAgLTAsMCArMSw0MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUR5bGFuIExpYnJhcnkgSW50ZXJmYWNlIEZpbGVzCisiIEF1dGhvcnM6CUp1c3R1cyBQZW5kbGV0b24gPGp1c3R1c0BhY20ub3JnPgorIgkJQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1AZGViaWFuLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CUZyaSBTZXAgMjkgMTM6NTA6MjAgUERUIDIwMDAKKyIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworc3luIHJlZ2lvbglkeWxhbmxpZEluZm8JCW1hdGNoZ3JvdXA9U3RhdGVtZW50IHN0YXJ0PSJeIiBlbmQ9IjoiIG9uZWxpbmUKK3N5biByZWdpb24JZHlsYW5saWRFbnRyeQkJbWF0Y2hncm91cD1TdGF0ZW1lbnQgc3RhcnQ9IjolIiBlbmQ9IiQiIG9uZWxpbmUKKworc3luIHN5bmMJbGluZXM9NTAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZHlsYW5fbGlkX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2R5bGFuX2xpZF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBkeWxhbmxpZEluZm8JCVR5cGUKKyAgSGlMaW5rIGR5bGFubGlkRW50cnkJCVN0cmluZworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJkeWxhbmxpZCIKKworIiB2aW06dHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZWNkLnZpbSBiL3J1bnRpbWUvc3ludGF4L2VjZC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZmN2E0YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2VjZC52aW0KQEAgLTAsMCArMSw1NiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CWVjZCAoRW1iZWRpeCBDb21wb25lbnQgRGVzY3JpcHRpb24pIGZpbGVzCisiIE1haW50YWluZXI6CUpvaG4gQmVwcHUgPGJlcHB1QG9wZW5zb3VyY2UubGluZW8uY29tPgorIiBVUkw6CQlodHRwOi8vb3BlbnNvdXJjZS5saW5lby5jb20vfmJlcHB1L3Byb3NlL2VjZF92aW0uaHRtbAorIiBMYXN0IENoYW5nZToJMjAwMSBTZXAgMjcKKworIiBBbiBFQ0QgZmlsZSBjb250YWlucyBtZXRhLWRhdGEgZm9yIHBhY2thZ2VzIGluIHRoZSBFbWJlZGl4IExpbnV4IGRpc3Ryby4KKyIgVGhpcyBzeW50YXggZmlsZSB3YXMgZGVyaXZlZCBmcm9tIGFwYWNoZXN0eWxlLnZpbQorIiBieSBDaHJpc3RpYW4gSGFtbWVycyA8Y2hAd2VzdGVuZC5jb20+CisKKyIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyIgc3BlY2lhbHMKK3N5biBtYXRjaCAgZWNkQ29tbWVudAkiXlxzKiMuKiIKKworIiBvcHRpb25zIGFuZCB2YWx1ZXMKK3N5biBtYXRjaCAgZWNkQXR0cgkiXlxzKlthLXpBLVpdXFMqXHMqWz1dLiokIiBjb250YWlucz1lY2RBdHRyTixlY2RBdHRyVgorc3luIG1hdGNoICBlY2RBdHRyTgljb250YWluZWQgIl4uKj0ibWU9ZS0xCitzeW4gbWF0Y2ggIGVjZEF0dHJWCWNvbnRhaW5lZCAiPS4qJCJtcz1zKzEKKworIiB0YWdzCitzeW4gcmVnaW9uIGVjZFRhZwlzdGFydD0rPCsgZW5kPSs+KyBjb250YWlucz1lY2RUYWdOLGVjZFRhZ0Vycm9yCitzeW4gbWF0Y2ggIGVjZFRhZ04JY29udGFpbmVkICs8Wy9cc10qWy1hLXpBLVowLTlfXVwrK21zPXMrMQorc3luIG1hdGNoICBlY2RUYWdFcnJvcgljb250YWluZWQgIltePl08Im1zPXMrMQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9lY2Rfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZWNkX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGVjZENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgZWNkQXR0cglUeXBlCisgIEhpTGluayBlY2RBdHRyTglTdGF0ZW1lbnQKKyAgSGlMaW5rIGVjZEF0dHJWCVZhbHVlCisgIEhpTGluayBlY2RUYWcJCUZ1bmN0aW9uCisgIEhpTGluayBlY2RUYWdOCVN0YXRlbWVudAorICBIaUxpbmsgZWNkVGFnRXJyb3IJRXJyb3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZWNkIgorIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2VkaWYudmltIGIvcnVudGltZS9zeW50YXgvZWRpZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxNzgzNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2VkaWYudmltCkBAIC0wLDAgKzEsNjQgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgRURJRiAoRWxlY3Ryb25pYyBEZXNpZ24gSW50ZXJjaGFuZ2UgRm9ybWF0KQorIiBNYWludGFpbmVyOiAgIEFydGVtIFphbmtvdmljaCA8el9hcnRlbUBob3Rib3gucnU+CisiIExhc3QgQ2hhbmdlOiAgT2N0IDE0LCAyMDAyCisiCisiIFN1cHBvcnRlZCBzdGFuZGFydHMgYXJlOgorIiAgIEFOU0kvRUlBIFN0YW5kYXJkIDU0OC0xOTg4IChFRElGIFZlcnNpb24gMiAwIDApCisiICAgSUVDIDYxNjkwLTEgKEVESUYgVmVyc2lvbiAzIDAgMCkKKyIgICBJRUMgNjE2OTAtMiAoRURJRiBWZXJzaW9uIDQgMCAwKQorCisiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmIHZlcnNpb24gPj0gNjAwCisgc2V0bG9jYWwgaXNrZXl3b3JkPTQ4LTU3LC0sKyxBLVosYS16LF8sJgorZWxzZQorIHNldCBpc2tleXdvcmQ9QS1aLGEteixfLCYKK2VuZGlmCisKK3N5biByZWdpb24JZWRpZkxpc3QJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IigiIGVuZD0iKSIgY29udGFpbnM9ZWRpZkxpc3QsZWRpZktleXdvcmQsZWRpZlN0cmluZyxlZGlmTnVtYmVyCisKKyIgU3RyaW5ncworc3luIG1hdGNoICAgICAgIGVkaWZJblN0cmluZ0Vycm9yICAgIC8lLyBjb250YWluZWQKK3N5biBtYXRjaCAgICAgICBlZGlmSW5TdHJpbmcgICAgLyVccypcZFwrXHMqJS8gY29udGFpbmVkCitzeW4gcmVnaW9uICAgICAgZWRpZlN0cmluZyAgICAgIHN0YXJ0PS8iLyBlbmQ9LyIvIGNvbnRhaW5zPWVkaWZJblN0cmluZyxlZGlmSW5TdHJpbmdFcnJvciBjb250YWluZWQKKworIiBOdW1iZXJzCitzeW4gbWF0Y2ggICAgICAgZWRpZk51bWJlciAgICAgICJcPFstK11cPVswLTldXCtcPiIKKworIiBLZXl3b3Jkcworc3luIG1hdGNoICAgICAgIGVkaWZLZXl3b3JkICAgICAiKFxAPD1ccypbYS16QS1aJl1bYS16QS1aXzAtOV0qXD4iIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggICAgICAgZWRpZkVycm9yICAgICAgICIpIgorCisiIHN5bmNocm9uaXphdGlvbgoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggc3luYyBtYXhsaW5lcz0yNTAKK2Vsc2UKKyAgc3ludGF4IHN5bmMgZnJvbXN0YXJ0CitlbmRpZgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZWRpZl9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9lZGlmX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGVkaWZJblN0cmluZwkJU3BlY2lhbENoYXIKKyAgSGlMaW5rIGVkaWZLZXl3b3JkCQlLZXl3b3JkCisgIEhpTGluayBlZGlmTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIGVkaWZJblN0cmluZ0Vycm9yCWVkaWZFcnJvcgorICBIaUxpbmsgZWRpZkVycm9yCQlFcnJvcgorICBIaUxpbmsgZWRpZlN0cmluZwkJU3RyaW5nCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJlZGlmIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZWlmZmVsLnZpbSBiL3J1bnRpbWUvc3ludGF4L2VpZmZlbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2ZWVlOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2VpZmZlbC52aW0KQEAgLTAsMCArMSwxOTYgQEAKKyIgRWlmZmVsIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglFaWZmZWwKKyIgTWFpbnRhaW5lcjoJUmVpbWVyIEJlaHJlbmRzIDxiZWhyZW5kc0Bjc2UubXN1LmVkdT4KKyIJCVdpdGggbXVjaCBpbnB1dCBmcm9tIEpvY2VseW4gRmlhdCA8ZmlhdEBlaWZmZWwuY29tPgorIiBTZWUgaHR0cDovL3d3dy5jc2UubXN1LmVkdS9+YmVocmVuZHMvdmltLyBmb3IgdGhlIG1vc3QgY3VycmVudCB2ZXJzaW9uLgorIiBMYXN0IENoYW5nZToJMjAwMSBNYXkgMDkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIE9wdGlvbiBoYW5kbGluZworCitpZiBleGlzdHMoImVpZmZlbF9pZ25vcmVfY2FzZSIpCisgIHN5biBjYXNlIGlnbm9yZQorZWxzZQorICBzeW4gY2FzZSBtYXRjaAorICBpZiBleGlzdHMoImVpZmZlbF9wZWRhbnRpYyIpIHx8IGV4aXN0cygiZWlmZmVsX3N0cmljdCIpCisgICAgc3luIGtleXdvcmQgZWlmZmVsRXJyb3IJY3VycmVudCB2b2lkIHJlc3VsdCBwcmVjdXJzb3Igbm9uZQorICAgIHN5biBrZXl3b3JkIGVpZmZlbEVycm9yCUNVUlJFTlQgVk9JRCBSRVNVTFQgUFJFQ1VSU09SIE5vbmUKKyAgICBzeW4ga2V5d29yZCBlaWZmZWxFcnJvcglUUlVFIEZBTFNFCisgIGVuZGlmCisgIGlmIGV4aXN0cygiZWlmZmVsX3BlZGFudGljIikKKyAgICBzeW4ga2V5d29yZCBlaWZmZWxFcnJvcgl0cnVlIGZhbHNlCisgICAgc3luIG1hdGNoIGVpZmZlbEVycm9yCSJcPFthLXpfXVwrW0EtWl1bYS16QV9aX10qXD4iCisgICAgc3luIG1hdGNoIGVpZmZlbEVycm9yCSJcPFtBLVpdW2Etel9dKltBLVpdW2EtekEtWl9dKlw+IgorICBlbmRpZgorICBpZiBleGlzdHMoImVpZmZlbF9sb3dlcl9jYXNlX3ByZWRlZiIpCisgICAgc3luIGtleXdvcmQgZWlmZmVsUHJlZGVmaW5lZCBjdXJyZW50IHZvaWQgcmVzdWx0IHByZWN1cnNvcgorICBlbmRpZgorZW5kaWYKKworaWYgZXhpc3RzKCJlaWZmZWxfaGV4X2NvbnN0YW50cyIpCisgIHN5biBtYXRjaCAgZWlmZmVsTnVtYmVyCSJcZFswLTlhLWZBLUZdKlt4WF0iCitlbmRpZgorCisiIEtleXdvcmQgZGVmaW5pdGlvbnMKKworc3luIGtleXdvcmQgZWlmZmVsVG9wU3RydWN0CWluZGV4aW5nIGZlYXR1cmUgY3JlYXRpb24gaW5oZXJpdAorc3luIG1hdGNoICAgZWlmZmVsVG9wU3RydWN0CSJcPGNsYXNzXD4iCitzeW4gbWF0Y2ggICBlaWZmZWxLZXl3b3JkCSJcPGVuZFw+Igorc3luIG1hdGNoICAgZWlmZmVsVG9wU3RydWN0CSJeZW5kXD5cKFxzKi0tXHNcK2NsYXNzXHNcK1w8W0EtWl1bQS1aMC05X10qXD5cKVw9IiBjb250YWlucz1laWZmZWxDbGFzc05hbWUKK3N5biBtYXRjaCAgIGVpZmZlbEJyYWNrZXRzCSJbW1xdXSIKK3N5biBtYXRjaCBlaWZmZWxCcmFja2V0RXJyb3IJIlxdIgorc3luIHJlZ2lvbiBlaWZmZWxHZW5lcmljCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9ZWlmZmVsQnJhY2tldHMgc3RhcnQ9IlxbIiBlbmQ9IlxdIiBjb250YWlucz1BTExCVVQsZWlmZmVsQnJhY2tldEVycm9yLGVpZmZlbEdlbmVyaWNEZWNsLGVpZmZlbFN0cmluZ0Vycm9yLGVpZmZlbFN0cmluZ0VzY2FwZSxlaWZmZWxHZW5lcmljQ3JlYXRlLGVpZmZlbFRvcFN0cnVjdAoraWYgZXhpc3RzKCJlaWZmZWxfaXNlIikKKyAgc3luIG1hdGNoICAgZWlmZmVsQ3JlYXRlCSJcPGNyZWF0ZVw+IgorICBzeW4gbWF0Y2ggICBlaWZmZWxUb3BTdHJ1Y3QJY29udGFpbmVkICJcPGNyZWF0ZVw+IgorICBzeW4gbWF0Y2ggICBlaWZmZWxHZW5lcmljQ3JlYXRlICBjb250YWluZWQgIlw8Y3JlYXRlXD4iCisgIHN5biBtYXRjaCAgIGVpZmZlbFRvcFN0cnVjdAkiXmNyZWF0ZVw+IgorICBzeW4gcmVnaW9uICBlaWZmZWxHZW5lcmljRGVjbAl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWVpZmZlbEJyYWNrZXRzIGNvbnRhaW5lZCBzdGFydD0iXFsiIGVuZD0iXF0iIGNvbnRhaW5zPUFMTEJVVCxlaWZmZWxDcmVhdGUsZWlmZmVsVG9wU3RydWN0LGVpZmZlbEdlbmVyaWMsZWlmZmVsQnJhY2tldEVycm9yLGVpZmZlbFN0cmluZ0VzY2FwZSxlaWZmZWxTdHJpbmdFcnJvcixlaWZmZWxCcmFja2V0cworICBzeW4gcmVnaW9uICBlaWZmZWxDbGFzc0hlYWRlcglzdGFydD0iXmNsYXNzXD4iIGVuZD0iJCIgY29udGFpbnM9QUxMQlVULGVpZmZlbENyZWF0ZSxlaWZmZWxHZW5lcmljQ3JlYXRlLGVpZmZlbEdlbmVyaWMsZWlmZmVsU3RyaW5nRXNjYXBlLGVpZmZlbFN0cmluZ0Vycm9yLGVpZmZlbEJyYWNrZXRzCitlbmRpZgorc3luIGtleXdvcmQgZWlmZmVsRGVjbGFyYXRpb24JaXMgZG8gb25jZSBkZWZlcnJlZCB1bmlxdWUgbG9jYWwKK3N5biBrZXl3b3JkIGVpZmZlbERlY2xhcmF0aW9uCVVuaXF1ZQorc3luIGtleXdvcmQgZWlmZmVsUHJvcGVydHkJZXhwYW5kZWQgb2Jzb2xldGUgc2VwYXJhdGUgZnJvemVuCitzeW4ga2V5d29yZCBlaWZmZWxQcm9wZXJ0eQlwcmVmaXggaW5maXgKK3N5biBrZXl3b3JkIGVpZmZlbEluaGVyaXRDbGF1c2UJcmVuYW1lIHJlZGVmaW5lIHVuZGVmaW5lIHNlbGVjdCBleHBvcnQgYXMKK3N5biBrZXl3b3JkIGVpZmZlbEFsbAkJYWxsCitzeW4ga2V5d29yZCBlaWZmZWxLZXl3b3JkCWV4dGVybmFsIGFsaWFzCitzeW4ga2V5d29yZCBlaWZmZWxTdGF0ZW1lbnQJaWYgZWxzZSBlbHNlaWYgaW5zcGVjdAorc3luIGtleXdvcmQgZWlmZmVsU3RhdGVtZW50CXdoZW4gdGhlbgorc3luIG1hdGNoICAgZWlmZmVsQXNzZXJ0aW9uCSJcPHJlcXVpcmVcKFxzXCtlbHNlXClcPVw+Igorc3luIG1hdGNoICAgZWlmZmVsQXNzZXJ0aW9uCSJcPGVuc3VyZVwoXHNcK3RoZW5cKVw9XD4iCitzeW4ga2V5d29yZCBlaWZmZWxBc3NlcnRpb24JY2hlY2sKK3N5biBrZXl3b3JkIGVpZmZlbERlYnVnCQlkZWJ1Zworc3luIGtleXdvcmQgZWlmZmVsU3RhdGVtZW50CWZyb20gdW50aWwgbG9vcAorc3luIGtleXdvcmQgZWlmZmVsQXNzZXJ0aW9uCXZhcmlhbnQKK3N5biBtYXRjaCAgIGVpZmZlbEFzc2VydGlvbgkiXDxpbnZhcmlhbnRcPiIKK3N5biBtYXRjaCAgIGVpZmZlbFRvcFN0cnVjdAkiXmludmFyaWFudFw+Igorc3luIGtleXdvcmQgZWlmZmVsRXhjZXB0aW9uCXJlc2N1ZSByZXRyeQorCitzeW4ga2V5d29yZCBlaWZmZWxQcmVkZWZpbmVkCUN1cnJlbnQgVm9pZCBSZXN1bHQgUHJlY3Vyc29yCisKKyIgT3BlcmF0b3JzCitzeW4gbWF0Y2ggICBlaWZmZWxPcGVyYXRvcgkiXDxhbmRcKFxzXCt0aGVuXClcPVw+Igorc3luIG1hdGNoICAgZWlmZmVsT3BlcmF0b3IJIlw8b3JcKFxzXCtlbHNlXClcPVw+Igorc3luIGtleXdvcmQgZWlmZmVsT3BlcmF0b3IJeG9yIGltcGxpZXMgbm90CitzeW4ga2V5d29yZCBlaWZmZWxPcGVyYXRvcglzdHJpcCBvbGQKK3N5biBrZXl3b3JkIGVpZmZlbE9wZXJhdG9yCVN0cmlwCitzeW4gbWF0Y2ggICBlaWZmZWxPcGVyYXRvcgkiXCQiCitzeW4gbWF0Y2ggICBlaWZmZWxDcmVhdGlvbgkiISIKK3N5biBtYXRjaCAgIGVpZmZlbEV4cG9ydAkiW3t9XSIKK3N5biBtYXRjaCAgIGVpZmZlbEFycmF5CQkiPDwiCitzeW4gbWF0Y2ggICBlaWZmZWxBcnJheQkJIj4+Igorc3luIG1hdGNoICAgZWlmZmVsQ29uc3RyYWludAkiLT4iCitzeW4gbWF0Y2ggICBlaWZmZWxPcGVyYXRvcgkiW0AjfCZdW14gXGVcdFxiJV0qIgorCisiIFNwZWNpYWwgY2xhc3Nlcworc3luIGtleXdvcmQgZWlmZmVsQW5jaG9yZWQJbGlrZQorc3luIGtleXdvcmQgZWlmZmVsQml0VHlwZQlCSVQKKworIiBDb25zdGFudHMKK2lmICFleGlzdHMoImVpZmZlbF9wZWRhbnRpYyIpCisgIHN5biBrZXl3b3JkIGVpZmZlbEJvb2wJdHJ1ZSBmYWxzZQorZW5kaWYKK3N5biBrZXl3b3JkIGVpZmZlbEJvb2wJCVRydWUgRmFsc2UKK3N5biByZWdpb24gIGVpZmZlbFN0cmluZwlzdGFydD0rIisgc2tpcD0rJSIrIGVuZD0rIisgY29udGFpbnM9ZWlmZmVsU3RyaW5nRXNjYXBlLGVpZmZlbFN0cmluZ0Vycm9yCitzeW4gbWF0Y2ggICBlaWZmZWxTdHJpbmdFc2NhcGUJY29udGFpbmVkICIlW14vXSIKK3N5biBtYXRjaCAgIGVpZmZlbFN0cmluZ0VzY2FwZQljb250YWluZWQgIiUvXGRcKy8iCitzeW4gbWF0Y2ggICBlaWZmZWxTdHJpbmdFc2NhcGUJY29udGFpbmVkICJeWyBcdF0qJSIKK3N5biBtYXRjaCAgIGVpZmZlbFN0cmluZ0VzY2FwZQljb250YWluZWQgIiVbIFx0XSokIgorc3luIG1hdGNoICAgZWlmZmVsU3RyaW5nRXJyb3IJY29udGFpbmVkICIlL1teMC05XSIKK3N5biBtYXRjaCAgIGVpZmZlbFN0cmluZ0Vycm9yCWNvbnRhaW5lZCAiJS9cZFwrW14wLTkvXSIKK3N5biBtYXRjaCAgIGVpZmZlbEJhZENvbnN0YW50CSInXCglW14vXVx8JS9cZFwrL1x8W14nJV1cKVwrJyIKK3N5biBtYXRjaCAgIGVpZmZlbEJhZENvbnN0YW50CSInJyIKK3N5biBtYXRjaCAgIGVpZmZlbENoYXJhY3RlcgkiJ1woJVteL11cfCUvXGRcKy9cfFteJyVdXCknIiBjb250YWlucz1laWZmZWxTdHJpbmdFc2NhcGUKK3N5biBtYXRjaCAgIGVpZmZlbE51bWJlcgkiLVw9XDxcZFwrXChfXGRcK1wpKlw+Igorc3luIG1hdGNoICAgZWlmZmVsTnVtYmVyCSJcPFswMV1cK1tiQl1cPiIKK3N5biBtYXRjaCAgIGVpZmZlbE51bWJlcgkiLVw9XDxcZFwrXChfXGRcK1wpKlwuXChcZFwrXChfXGRcK1wpKlwpXD1cKFtlRV1bLStdXD1cZFwrXChfXGRcK1wpKlwpXD0iCitzeW4gbWF0Y2ggICBlaWZmZWxOdW1iZXIJIi1cPVwuXGRcK1woX1xkXCtcKSpcKFtlRV1bLStdXD1cZFwrXChfXGRcK1wpKlwpXD0iCitzeW4gbWF0Y2ggICBlaWZmZWxDb21tZW50CSItLS4qIiBjb250YWlucz1laWZmZWxUb2RvCisKK3N5biBjYXNlIG1hdGNoCisKKyIgQ2FzZSBzZW5zaXRpdmUgc3R1ZmYKKworc3luIGtleXdvcmQgZWlmZmVsVG9kbwkJY29udGFpbmVkIFRPRE8gWFhYIEZJWE1FCitzeW4gbWF0Y2ggICBlaWZmZWxDbGFzc05hbWUJIlw8W0EtWl1bQS1aMC05X10qXD4iCisKKyIgQ2F0Y2ggbWlzbWF0Y2hlZCBwYXJlbnRoZXNlcworc3luIG1hdGNoIGVpZmZlbFBhcmVuRXJyb3IJIikiCitzeW4gcmVnaW9uIGVpZmZlbFBhcmVuCQl0cmFuc3BhcmVudCBzdGFydD0iKCIgZW5kPSIpIiBjb250YWlucz1BTExCVVQsZWlmZmVsUGFyZW5FcnJvcixlaWZmZWxTdHJpbmdFcnJvcixlaWZmZWxTdHJpbmdFc2NhcGUKKworIiBTaG91bGQgc3VmZmljZSBmb3IgZXZlbiB2ZXJ5IGxvbmcgc3RyaW5ncyBhbmQgZXhwcmVzc2lvbnMKK3N5biBzeW5jIGxpbmVzPTQwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2VpZmZlbF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9laWZmZWxfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgZWlmZmVsS2V5d29yZAkJU3RhdGVtZW50CisgIEhpTGluayBlaWZmZWxQcm9wZXJ0eQkJU3RhdGVtZW50CisgIEhpTGluayBlaWZmZWxJbmhlcml0Q2xhdXNlCVN0YXRlbWVudAorICBIaUxpbmsgZWlmZmVsU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgZWlmZmVsRGVjbGFyYXRpb24JU3RhdGVtZW50CisgIEhpTGluayBlaWZmZWxBc3NlcnRpb24JU3RhdGVtZW50CisgIEhpTGluayBlaWZmZWxEZWJ1ZwkJU3RhdGVtZW50CisgIEhpTGluayBlaWZmZWxFeGNlcHRpb24JU3RhdGVtZW50CisgIEhpTGluayBlaWZmZWxHZW5lcmljQ3JlYXRlCVN0YXRlbWVudAorCisKKyAgSGlMaW5rIGVpZmZlbFRvcFN0cnVjdAlQcmVQcm9jCisKKyAgSGlMaW5rIGVpZmZlbEFsbAkJU3BlY2lhbAorICBIaUxpbmsgZWlmZmVsQW5jaG9yZWQJCVNwZWNpYWwKKyAgSGlMaW5rIGVpZmZlbEJpdFR5cGUJCVNwZWNpYWwKKworCisgIEhpTGluayBlaWZmZWxCb29sCQlCb29sZWFuCisgIEhpTGluayBlaWZmZWxTdHJpbmcJCVN0cmluZworICBIaUxpbmsgZWlmZmVsQ2hhcmFjdGVyCUNoYXJhY3RlcgorICBIaUxpbmsgZWlmZmVsQ2xhc3NOYW1lCVR5cGUKKyAgSGlMaW5rIGVpZmZlbE51bWJlcgkJTnVtYmVyCisKKyAgSGlMaW5rIGVpZmZlbFN0cmluZ0VzY2FwZQlTcGVjaWFsCisKKyAgSGlMaW5rIGVpZmZlbE9wZXJhdG9yCQlTcGVjaWFsCisgIEhpTGluayBlaWZmZWxBcnJheQkJU3BlY2lhbAorICBIaUxpbmsgZWlmZmVsRXhwb3J0CQlTcGVjaWFsCisgIEhpTGluayBlaWZmZWxDcmVhdGlvbgkJU3BlY2lhbAorICBIaUxpbmsgZWlmZmVsQnJhY2tldHMJCVNwZWNpYWwKKyAgSGlMaW5rIGVpZmZlbEdlbmVyaWMJCVNwZWNpYWwKKyAgSGlMaW5rIGVpZmZlbEdlbmVyaWNEZWNsCVNwZWNpYWwKKyAgSGlMaW5rIGVpZmZlbENvbnN0cmFpbnQJU3BlY2lhbAorICBIaUxpbmsgZWlmZmVsQ3JlYXRlCQlTcGVjaWFsCisKKyAgSGlMaW5rIGVpZmZlbFByZWRlZmluZWQJQ29uc3RhbnQKKworICBIaUxpbmsgZWlmZmVsQ29tbWVudAkJQ29tbWVudAorCisgIEhpTGluayBlaWZmZWxFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIGVpZmZlbEJhZENvbnN0YW50CUVycm9yCisgIEhpTGluayBlaWZmZWxTdHJpbmdFcnJvcglFcnJvcgorICBIaUxpbmsgZWlmZmVsUGFyZW5FcnJvcglFcnJvcgorICBIaUxpbmsgZWlmZmVsQnJhY2tldEVycm9yCUVycm9yCisKKyAgSGlMaW5rIGVpZmZlbFRvZG8JCVRvZG8KKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZWlmZmVsIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZWxmLnZpbSBiL3J1bnRpbWUvc3ludGF4L2VsZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4MDQ4OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2VsZi52aW0KQEAgLTAsMCArMSw5NSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgIEVMRgorIiBNYWludGFpbmVyOiAgQ2hyaXN0aWFuIFYuIEouIEJy/HNzb3cgPGN2amJAY3ZqYi5kZT4KKyIgTGFzdCBDaGFuZ2U6IFNvbiAyMiBKdW4gMjAwMyAyMDo0MzoxNCBDRVNUCisiIEZpbGVuYW1lczogICAqLmFiLCouYW0KKyIgVVJMOgkgICAgICAgaHR0cDovL3d3dy5jdmpiLmRlL2NvbXAvdmltL2VsZi52aW0KKyIgJElkJAorIgorIiBFTEY6IEV4dGVuc2libGUgTGFuZ3VhZ2UgRmFjaWxpdHkKKyIgICAgICBUaGlzIGlzIHRoZSBBcHBsaXggSW5jLiwgTWFjcm8gYW5kIEJ1aWxkZXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCisiICAgICAgSXQgaGFzIG5vdGhpbmcgaW4gY29tbW9uIHdpdGggdGhlIGJpbmFyeSBmb3JtYXQgY2FsbGVkIEVMRi4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworIiBDYXNlIGRvZXMgbm90IG1hdHRlcgorc3luIGNhc2UgaWdub3JlCisKKyIgRW52aXJvbm1lbnRzCitzeW4gcmVnaW9uIGVsZkVudmlyb25tZW50IHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9U3BlY2lhbCBzdGFydD0ieyIgbWF0Y2hncm91cD1TcGVjaWFsIGVuZD0ifSIgY29udGFpbnM9QUxMQlVULGVsZkJyYWNlRXJyb3IKKworIiBVbm1hdGNoZWQgYnJhY2VzCitzeW4gbWF0Y2ggZWxmQnJhY2VFcnJvciAifSIKKworIiBBbGwgbWFjcm9zIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgZGVmaW5pdGlvbnMKK3N5biBrZXl3b3JkIGVsZlNwZWNpYWwgZW5kbWFjcm8KK3N5biByZWdpb24gZWxmU3BlY2lhbCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPVNwZWNpYWwgc3RhcnQ9Il5cKFwobWFjcm9cKVx8XChzZXRcKVwpIFxTXCskIiBtYXRjaGdyb3VwPVNwZWNpYWwgZW5kPSJeXChcKGVuZG1hY3JvXClcfFwoZW5kc2V0XClcKSQiIGNvbnRhaW5zPUFMTEJVVCxlbGZCcmFjZUVycm9yCisKKyIgUHJlcHJvY2Vzc29yIENvbW1hbmRzCitzeW4ga2V5d29yZCBlbGZQUENvbSBkZWZpbmUgaW5jbHVkZQorCisiIFNvbWUga2V5d29yZHMKK3N5biBrZXl3b3JkIGVsZktleXdvcmQgIGZhbHNlIHRydWUgbnVsbAorc3luIGtleXdvcmQgZWxmS2V5d29yZAl2YXIgZm9ybWF0IG9iamVjdCBmdW5jdGlvbiBlbmRmdW5jdGlvbgorCisiIENvbmRpdGlvbmFscyBhbmQgbG9vcHMKK3N5biBrZXl3b3JkIGVsZkNvbmRpdGlvbmFsIGlmIGVsc2UgY2FzZSBvZiBlbmRjYXNlIGZvciB0byBuZXh0IHdoaWxlIHVudGlsIHJldHVybiBnb3RvCisKKyIgQWxsIGJ1aWx0LWluIGVsZiBtYWNyb3MgZW5kIHdpdGggYW4gJ0AnCitzeW4gbWF0Y2ggZWxmTWFjcm8gIlswLTlfQS1aYS16XVwrQCIKKworIiBTdHJpbmdzIGFuZCBjaGFyYWN0ZXJzCitzeW4gcmVnaW9uIGVsZlN0cmluZyBzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisKKworIiBOdW1iZXJzCitzeW4gbWF0Y2ggZWxmTnVtYmVyICItXD1cPFswLTldKlwuXD1bMC05X11cPiIKKworIiBDb21tZW50cworc3luIHJlZ2lvbiBlbGZDb21tZW50IHN0YXJ0PSIvXCoiICBlbmQ9IlwqLyIKK3N5biBtYXRjaCBlbGZDb21tZW50ICAiXCcuKiQiCisKK3N5biBzeW5jIGNjb21tZW50IGVsZkNvbW1lbnQKKworIiBQYXJlbnRoZXNpcworc3luIG1hdGNoIGVsZlBhcmVucyAiW1xbXF0oKV0iCisKKyIgUHVuY3R1YXRpb24KK3N5biBtYXRjaCBlbGZQdW5jdCAiWyw7XSIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZWxmX3N5bl9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX2VsZl9zeW5faW5pdHMgPSAxCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisJZWxzZQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuIENhbiBiZSBvdmVycmlkZGVuIGxhdGVyLgorICBIaUxpbmsgZWxmQ29tbWVudCBDb21tZW50CisgIEhpTGluayBlbGZQUENvbSBJbmNsdWRlCisgIEhpTGluayBlbGZLZXl3b3JkIEtleXdvcmQKKyAgSGlMaW5rIGVsZlNwZWNpYWwgU3BlY2lhbAorICBIaUxpbmsgZWxmRW52aXJvbm1lbnQgU3BlY2lhbAorICBIaUxpbmsgZWxmQnJhY2VFcnJvciBFcnJvcgorICBIaUxpbmsgZWxmQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGVsZk1hY3JvIEZ1bmN0aW9uCisgIEhpTGluayBlbGZOdW1iZXIgTnVtYmVyCisgIEhpTGluayBlbGZTdHJpbmcgU3RyaW5nCisgIEhpTGluayBlbGZQYXJlbnMgRGVsaW1pdGVyCisgIEhpTGluayBlbGZQdW5jdCBEZWxpbWl0ZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZWxmIgorCisiIHZpbTp0cz04OnN3PTQ6bm9jaW5kZW50OnNtYXJ0aW5kZW50OgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZWxpbmtzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2VsaW5rcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5MmMwOAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2VsaW5rcy52aW0KQEAgLTAsMCArMSwyMDcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkgICAgZWxpbmtzKDEpIGNvbmZpZ3VyYXRpb24gZmlsZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNS0yMgorIiBhcmNoLXRhZzoJICAgIDc0ZWFmZjU1LWNkYjUtNGQzMS04MDViLTk2MjdlYjY1MzVmMQorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBTZXQgaXNrZXl3b3JkIHNpbmNlIHdlIG5lZWQgYC0nIChhbmQgcG90ZW50aWFsbHkgb3RoZXJzKSBpbiBrZXl3b3Jkcy4KKyIgRm9yIHZlcnNpb24gNS54OiBTZXQgaXQgZ2xvYmFsbHkKKyIgRm9yIHZlcnNpb24gNi54OiBTZXQgaXQgbG9jYWxseQoraWYgdmVyc2lvbiA+PSA2MDAKKyAgY29tbWFuZCAtbmFyZ3M9MSBTZXRJc2sgc2V0bG9jYWwgaXNrZXl3b3JkPTxhcmdzPgorZWxzZQorICBjb21tYW5kIC1uYXJncz0xIFNldElzayBzZXQgaXNrZXl3b3JkPTxhcmdzPgorZW5kaWYKK1NldElzayBALDQ4LTU3LF8sLQorZGVsY29tbWFuZCBTZXRJc2sKKworIiBUb2RvCitzeW4ga2V5d29yZCBlbGlua3NUb2RvCSAgICBjb250YWluZWQgVE9ETyBGSVhNRSBYWFggTk9URQorCisiIENvbW1lbnRzCitzeW4gcmVnaW9uICBlbGlua3NDb21tZW50ICAgbWF0Y2hncm91cD1lbGlua3NDb21tZW50IHN0YXJ0PScjJyBlbmQ9JyQnIGNvbnRhaW5zPWVsaW5rc1RvZG8KKworIiBOdW1iZXJzCitzeW4gbWF0Y2ggICBlbGlua3NOdW1iZXIgICAgJ1w8XGRcK1w+JworCisiIFN0cmluZ3MKK3N5biByZWdpb24gIGVsaW5rc1N0cmluZyAgICBtYXRjaGdyb3VwPWVsaW5rc1N0cmluZyBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPUBlbGlua3NDb2xvcgorCisiIEtleXdvcmRzCitzeW4ga2V5d29yZCBlbGlua3NLZXl3b3JkICAgc2V0IGJpbmQKKworIiBPcHRpb25zCitzeW4ga2V5d29yZCBlbGlua3NQcmVmaXggICAgYm9va21hcmtzCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgZmlsZV9mb3JtYXQKKworc3luIGtleXdvcmQgZWxpbmtzUHJlZml4ICAgIGNvbmZpZworc3luIGtleXdvcmQgZWxpbmtzT3B0aW9ucyAgIGNvbW1lbnRzIGluZGVudGF0aW9uIHNhdmluZ19zdHlsZSBpMThuCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgc2F2aW5nX3N0eWxlX3cgc2hvd190ZW1wbGF0ZQorCitzeW4ga2V5d29yZCBlbGlua3NQcmVmaXggICAgY29ubmVjdGlvbiBzc2wgY2xpZW50X2NlcnQKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBlbmFibGUgZmlsZSBjZXJ0X3ZlcmlmeSBhc3luY19kbnMgbWF4X2Nvbm5lY3Rpb25zCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgbWF4X2Nvbm5lY3Rpb25zX3RvX2hvc3QgcmVjZWl2ZV90aW1lb3V0IHJldHJpZXMKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICB1bnJlc3RhcnRhYmxlX3JlY2VpdmVfdGltZW91dAorCitzeW4ga2V5d29yZCBlbGlua3NQcmVmaXggICAgY29va2llcworc3luIGtleXdvcmQgZWxpbmtzT3B0aW9ucyAgIGFjY2VwdF9wb2xpY3kgbWF4X2FnZSBwYXJhbm9pZF9zZWN1cml0eSBzYXZlIHJlc2F2ZQorCitzeW4ga2V5d29yZCBlbGlua3NQcmVmaXggICAgZG9jdW1lbnQgYnJvd3NlIGFjY2Vzc2tleSBmb3JtcyBpbWFnZXMgbGlua3MKK3N5biBrZXl3b3JkIGVsaW5rc1ByZWZpeCAgICBhY3RpdmVfbGluayBjb2xvcnMgc2VhcmNoIGNhY2hlIGNvZGVwYWdlIGNvbG9ycworc3luIGtleXdvcmQgZWxpbmtzUHJlZml4ICAgIGZvcm1hdCBtZW1vcnkgZG93bmxvYWQgZHVtcCBoaXN0b3J5IGdsb2JhbCBodG1sCitzeW4ga2V5d29yZCBlbGlua3NQcmVmaXggICAgcGxhaW4KK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBhdXRvX2ZvbGxvdyBwcmlvcml0eSBhdXRvX3N1Ym1pdCBjb25maXJtX3N1Ym1pdAorc3luIGtleXdvcmQgZWxpbmtzT3B0aW9ucyAgIGlucHV0X3NpemUgc2hvd19mb3JtaGlzdCBmaWxlX3RhZ3MKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBpbWFnZV9saW5rX3RhZ2dpbmcgaW1hZ2VfbGlua19wcmVmaXgKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBpbWFnZV9saW5rX3N1ZmZpeCBzaG93X2FzX2xpbmtzIHNob3dfYW55X2FzX2xpbmtzCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgYmFja2dyb3VuZCB0ZXh0IGVuYWJsZV9jb2xvciBib2xkIGludmVydCB1bmRlcmxpbmUKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBjb2xvcl9kaXJzIG51bWJlcmluZyB1c2VfdGFiaW5kZXgKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBudW1iZXJfa2V5c19zZWxlY3RfbGluayB3cmFwYXJvdW5kIGNhc2UgcmVnZXgKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBzaG93X2hpdF90b3BfYm90dG9tIHdyYXBhcm91bmQgc2hvd19ub3RfZm91bmQKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBtYXJnaW5fd2lkdGggcmVmcmVzaCBtaW5pbXVtX3JlZnJlc2hfdGltZQorc3luIGtleXdvcmQgZWxpbmtzT3B0aW9ucyAgIHNjcm9sbF9tYXJnaW4gc2Nyb2xsX3N0ZXAgdGFibGVfbW92ZV9vcmRlciBzaXplCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgc2l6ZSBjYWNoZV9yZWRpcmVjdHMgaWdub3JlX2NhY2hlX2NvbnRyb2wgYXNzdW1lCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgZm9yY2VfYXNzdW1lZCB0ZXh0IGJhY2tncm91bmQgbGluayB2bGluayBkaXJzCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgYWxsb3dfZGFya19vbl9ibGFjayBlbnN1cmVfY29udHJhc3QKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICB1c2VfZG9jdW1lbnRfY29sb3JzIGRpcmVjdG9yeSBzZXRfb3JpZ2luYWxfdGltZQorc3luIGtleXdvcmQgZWxpbmtzT3B0aW9ucyAgIG92ZXJ3cml0ZSBub3RpZnlfYmVsbCBjb2RlcGFnZSB3aWR0aCBlbmFibGUKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBtYXhfaXRlbXMgZGlzcGxheV90eXBlIHdyaXRlX2ludGVydmFsCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAga2VlcF91bmhpc3RvcnkgZGlzcGxheV9mcmFtZXMgZGlzcGxheV90YWJsZXMKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBleHBhbmRfdGFibGVfY29sdW1ucyBkaXNwbGF5X3N1YnMgZGlzcGxheV9zdXBzCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgbGlua19kaXNwbGF5IHVuZGVybGluZV9saW5rcyB3cmFwX25ic3AKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBkaXNwbGF5X2xpbmtzIGNvbXByZXNzX2VtcHR5X2xpbmVzCisKK3N5biBrZXl3b3JkIGVsaW5rc1ByZWZpeCAgICBtaW1lIGV4dGVuc2lvbiBoYW5kbGVyIG1haWxjYXAgbWltZXR5cGVzIHR5cGUKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBhc2sgYmxvY2sgcHJvZ3JhbSBlbmFibGUgcGF0aCBhc2sgZGVzY3JpcHRpb24KK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBwcmlvcml0aXplIGVuYWJsZSBwYXRoIGRlZmF1bHRfdHlwZQorCitzeW4ga2V5d29yZCBlbGlua3NQcmVmaXggICAgcHJvdG9jb2wgZmlsZSBjZ2kgZnRwIHByb3h5IGh0dHAgYnVncyBwcm94eQorc3luIGtleXdvcmQgZWxpbmtzUHJlZml4ICAgIHJlZmVyZXIgaHR0cHMgcHJveHkgcmV3cml0ZSBkdW1iIHNtYXJ0CitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgcGF0aCBwb2xpY3kgYWxsb3dfc3BlY2lhbF9maWxlcyBzaG93X2hpZGRlbl9maWxlcworc3luIGtleXdvcmQgZWxpbmtzT3B0aW9ucyAgIHRyeV9lbmNvZGluZ19leHRlbnNpb25zIGhvc3QgYW5vbl9wYXNzd2QgdXNlX3Bhc3YKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICB1c2VfZXBzdiBhY2NlcHRfY2hhcnNldCBhbGxvd19ibGFja2xpc3QKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBicm9rZW5fMzAyX3JlZGlyZWN0IHBvc3Rfbm9fa2VlcGFsaXZlIGh0dHAxMCBob3N0CitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgdXNlciBwYXNzd2QgcG9saWN5IGZha2UgYWNjZXB0X2xhbmd1YWdlCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgYWNjZXB0X3VpX2xhbmd1YWdlIHRyYWNlIHVzZXJfYWdlbnQgaG9zdAorc3luIGtleXdvcmQgZWxpbmtzT3B0aW9ucyAgIGVuYWJsZS1kdW1iIGVuYWJsZS1zbWFydAorCitzeW4ga2V5d29yZCBlbGlua3NQcmVmaXggICAgdGVybWluYWwKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICB0eXBlIG0xMV9oYWNrIHV0Zl84X2lvIHJlc3RyaWN0Xzg1MiBibG9ja19jdXJzb3IKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBjb2xvcnMgdHJhbnNwYXJlbmN5IHVuZGVybGluZSBjaGFyc2V0CisKK3N5biBrZXl3b3JkIGVsaW5rc1ByZWZpeCAgICB1aSBjb2xvcnMgY29sb3IgbWFpbm1lbnUgbm9ybWFsIHNlbGVjdGVkIGhvdGtleQorc3luIGtleXdvcmQgZWxpbmtzUHJlZml4ICAgIG1lbnUgbWFya2VkIGhvdGtleSBmcmFtZSBkaWFsb2cgZ2VuZXJpYyBmcmFtZQorc3luIGtleXdvcmQgZWxpbmtzUHJlZml4ICAgIHNjcm9sbGJhciBzY3JvbGxiYXItc2VsZWN0ZWQgdGl0bGUgdGV4dCBjaGVja2JveAorc3luIGtleXdvcmQgZWxpbmtzUHJlZml4ICAgIGNoZWNrYm94LWxhYmVsIGJ1dHRvbiBidXR0b24tc2VsZWN0ZWQgZmllbGQKK3N5biBrZXl3b3JkIGVsaW5rc1ByZWZpeCAgICBmaWVsZC10ZXh0IG1ldGVyIHNoYWRvdyB0aXRsZSB0aXRsZS1iYXIgdGl0bGUtdGV4dAorc3luIGtleXdvcmQgZWxpbmtzUHJlZml4ICAgIHN0YXR1cyBzdGF0dXMtYmFyIHN0YXR1cy10ZXh0IHRhYnMgdW52aXNpdGVkIG5vcm1hbAorc3luIGtleXdvcmQgZWxpbmtzUHJlZml4ICAgIGxvYWRpbmcgc2VwYXJhdG9yIHNlYXJjaGVkIG1vbm8KK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICB0ZXh0IGJhY2tncm91bmQKKworc3luIGtleXdvcmQgZWxpbmtzUHJlZml4ICAgIHVpIGRpYWxvZ3MgbGVkcyBzZXNzaW9ucyB0YWJzIHRpbWVyCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgbGlzdGJveF9taW5faGVpZ2h0IHNoYWRvd3MgdW5kZXJsaW5lX2hvdGtleXMgZW5hYmxlCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgYXV0b19zYXZlIGF1dG9fcmVzdG9yZSBhdXRvX3NhdmVfZm9sZGVybmFtZQorc3luIGtleXdvcmQgZWxpbmtzT3B0aW9ucyAgIGhvbWVwYWdlIHNob3dfYmFyIHdyYXBhcm91bmQgY29uZmlybV9jbG9zZSBlbmFibGUKK3N5biBrZXl3b3JkIGVsaW5rc09wdGlvbnMgICBkdXJhdGlvbiBhY3Rpb24gbGFuZ3VhZ2Ugc2hvd19zdGF0dXNfYmFyCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgc2hvd190aXRsZV9iYXIgc3RhcnR1cF9nb3RvX2RpYWxvZyBzdWNjZXNzX21zZ2JveAorc3luIGtleXdvcmQgZWxpbmtzT3B0aW9ucyAgIHdpbmRvd190aXRsZQorCitzeW4ga2V5d29yZCBlbGlua3NPcHRpb25zICAgc2VjdXJlX2ZpbGVfc2F2aW5nCisKKyIgQ29sb3JzCitzeW4gY2x1c3RlciBlbGlua3NDb2xvciBjb250YWlucz1lbGlua3NDb2xvckJsYWNrLGVsaW5rc0NvbG9yRGFya1JlZCxlbGlua3NDb2xvckRhcmtHcmVlbixlbGlua3NDb2xvckRhcmtZZWxsb3csZWxpbmtzQ29sb3JEYXJrQmx1ZSxlbGlua3NDb2xvckRhcmtNYWdlbnRhLGVsaW5rc0NvbG9yRGFya0N5YW4sZWxpbmtzQ29sb3JHcmF5LGVsaW5rc0NvbG9yRGFya0dyYXksZWxpbmtzQ29sb3JSZWQsZWxpbmtzQ29sb3JHcmVlbixlbGlua3NDb2xvclllbGxvdyxlbGlua3NDb2xvckJsdWUsZWxpbmtzQ29sb3JNYWdlbnRhLGVsaW5rc0NvbG9yQ3lhbixlbGlua3NDb2xvcldoaXRlCisKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yQmxhY2sJICAgIGJsYWNrIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZWxpbmtzQ29sb3JEYXJrUmVkCSAgICBkYXJrcmVkIHNhbmR5YnJvd24gbWFyb29uIGNyaW1zb24gZmlyZWJyaWNrIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZWxpbmtzQ29sb3JEYXJrR3JlZW4gICAgZGFya2dyZWVuIGRhcmtvbGl2ZWdyZWVuIGRhcmtzZWFncmVlbiBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yRGFya0dyZWVuICAgIGZvcmVzdGdyZWVuIG1lZGl1bXNwcmluZ2dyZWVuIHNlYWdyZWVuIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZWxpbmtzQ29sb3JEYXJrWWVsbG93ICAgYnJvd24gYmxhbmNoZWRhbG1vbmQgY2hvY29sYXRlIGRhcmtvcmFuZ2UgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckRhcmtZZWxsb3cgICBkYXJrZ29sZGVucm9kIG9yYW5nZSByb3N5YnJvd24gc2FkZGxlYnJvd24gY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckRhcmtZZWxsb3cgICBwZXJ1IG9saXZlIG9saXZlZHJhYiBzaWVubmEgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckRhcmtCbHVlCSAgICBkYXJrYmx1ZSBjYWRldGJsdWUgY29ybmZsb3dlcmJsdWUgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckRhcmtCbHVlCSAgICBkYXJrc2xhdGVibHVlIGRlZXBza3libHVlIG1pZG5pZ2h0Ymx1ZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yRGFya0JsdWUJICAgIHJveWFsYmx1ZSBzdGVlbGJsdWUgbmF2eSBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yRGFya01hZ2VudGEgIGRhcmttYWdlbnRhIG1lZGl1bW9yY2hpZCBtZWRpdW1wdXJwbGUgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckRhcmtNYWdlbnRhICBtZWRpdW1zbGF0ZWJsdWUgc2xhdGVibHVlIGRlZXBwaW5rIGhvdHBpbmsgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckRhcmtNYWdlbnRhICBkYXJrb3JjaGlkIG9yY2hpZCBwdXJwbGUgaW5kaWdvIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZWxpbmtzQ29sb3JEYXJrQ3lhbgkgICAgZGFya2N5YW4gbWVkaXVtYXF1YW1hcmluZSBtZWRpdW10dXJxdW9pc2UgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckRhcmtDeWFuCSAgICBkYXJrdHVycXVvaXNlIHRlYWwgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckdyYXkJICAgIHNpbHZlciBkaW1ncmF5IGxpZ2h0c2xhdGVncmF5IHNsYXRlZ3JheSBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yR3JheQkgICAgbGlnaHRncmV5IGJ1cmx5d29vZCBwbHVtIHRhbiB0aGlzdGxlIGNvbnRhaW5lZAorCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckRhcmtHcmF5CSAgICBncmF5IGRhcmtncmF5IGRhcmtzbGF0ZWdyYXkgZGFya3NhbG1vbiBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yUmVkCSAgICByZWQgaW5kaWFucmVkIG9yYW5nZXJlZCB0b21hdG8gbGlnaHRzYWxtb24gY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvclJlZAkgICAgc2FsbW9uIGNvcmFsIGxpZ2h0Y29yYWwgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckdyZWVuCSAgICBncmVlbiBncmVlbnllbGxvdyBsYXduZ3JlZW4gbGlnaHRncmVlbiBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yR3JlZW4JICAgIGxpZ2h0c2VhZ3JlZW4gbGltZWdyZWVuIG1lZGl1bXNlYWdyZWVuIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZWxpbmtzQ29sb3JHcmVlbgkgICAgc3ByaW5nZ3JlZW4geWVsbG93Z3JlZW4gcGFsZWdyZWVuIGxpbWUgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckdyZWVuCSAgICBjaGFydHJldXNlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZWxpbmtzQ29sb3JZZWxsb3cJICAgIHllbGxvdyBiZWlnZSBkYXJra2hha2kgbGlnaHRnb2xkZW5yb2R5ZWxsb3cgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvclllbGxvdwkgICAgcGFsZWdvbGRlbnJvZCBnb2xkIGdvbGRlbnJvZCBraGFraSBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yWWVsbG93CSAgICBsaWdodHllbGxvdyBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yQmx1ZQkgICAgYmx1ZSBhbGljZWJsdWUgYXF1YSBhcXVhbWFyaW5lIGF6dXJlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZWxpbmtzQ29sb3JCbHVlCSAgICBkb2RnZXJibHVlIGxpZ2h0Ymx1ZSBsaWdodHNreWJsdWUgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckJsdWUJICAgIGxpZ2h0c3RlZWxibHVlIG1lZGl1bWJsdWUgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvck1hZ2VudGEJICAgIG1hZ2VudGEgZGFya3Zpb2xldCBibHVldmlvbGV0IGxpZ2h0cGluayBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yTWFnZW50YQkgICAgbWVkaXVtdmlvbGV0cmVkIHBhbGV2aW9sZXRyZWQgdmlvbGV0IHBpbmsgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvck1hZ2VudGEJICAgIGZ1Y2hzaWEgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckN5YW4JICAgIGN5YW4gbGlnaHRjeWFuIHBvd2RlcmJsdWUgc2t5Ymx1ZSB0dXJxdW9pc2UgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvckN5YW4JICAgIHBhbGV0dXJxdW9pc2UgY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvcldoaXRlCSAgICB3aGl0ZSBhbnRpcXVld2hpdGUgZmxvcmFsd2hpdGUgZ2hvc3R3aGl0ZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yV2hpdGUJICAgIG5hdmFqb3doaXRlIHdoaXRlc21va2UgbGluZW4gbGVtb25jaGlmZm9uIGNvbnRhaW5lZAorc3luIGtleXdvcmQgZWxpbmtzQ29sb3JXaGl0ZQkgICAgY29ybnNpbGsgbGF2ZW5kZXIgbGF2ZW5kZXJibHVzaCBzZWFzaGVsbCBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yV2hpdGUJICAgIG1pc3R5cm9zZSBpdm9yeSBwYXBheWF3aGlwIGJpc3F1ZSBnYWluc2Jvcm8gY29udGFpbmVkCitzeW4ga2V5d29yZCBlbGlua3NDb2xvcldoaXRlCSAgICBob25leWRldyBtaW50Y3JlYW0gbW9jY2FzaW4gb2xkbGFjZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGVsaW5rc0NvbG9yV2hpdGUJICAgIHBlYWNocHVmZiBzbm93IHdoZWF0IGNvbnRhaW5lZAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9lbGlua3Nfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZWxpbmtzX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlEZWYgaGkgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgICBjb21tYW5kIC1uYXJncz0rIEhpRGVmIGhpIGRlZiA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgZWxpbmtzVG9kbwkJVG9kbworICBIaUxpbmsgZWxpbmtzQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgZWxpbmtzTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIGVsaW5rc1N0cmluZwkJU3RyaW5nCisgIEhpTGluayBlbGlua3NLZXl3b3JkCQlLZXl3b3JkCisgIEhpTGluayBlbGlua3NQcmVmaXgJCUlkZW50aWZpZXIKKyAgSGlMaW5rIGVsaW5rc09wdGlvbnMJCUlkZW50aWZpZXIKKyAgSGlEZWYgIGVsaW5rc0NvbG9yQmxhY2sJY3Rlcm1mZz1CbGFjawkgICAgZ3VpZmc9QmxhY2sKKyAgSGlEZWYgIGVsaW5rc0NvbG9yRGFya1JlZAljdGVybWZnPURhcmtSZWQJICAgIGd1aWZnPURhcmtSZWQKKyAgSGlEZWYgIGVsaW5rc0NvbG9yRGFya0dyZWVuCWN0ZXJtZmc9RGFya0dyZWVuICAgZ3VpZmc9RGFya0dyZWVuCisgIEhpRGVmICBlbGlua3NDb2xvckRhcmtZZWxsb3cJY3Rlcm1mZz1EYXJrWWVsbG93ICBndWlmZz1EYXJrWWVsbG93CisgIEhpRGVmICBlbGlua3NDb2xvckRhcmtCbHVlCWN0ZXJtZmc9RGFya0JsdWUgICAgZ3VpZmc9RGFya0JsdWUKKyAgSGlEZWYgIGVsaW5rc0NvbG9yRGFya01hZ2VudGEJY3Rlcm1mZz1EYXJrTWFnZW50YSBndWlmZz1EYXJrTWFnZW50YQorICBIaURlZiAgZWxpbmtzQ29sb3JEYXJrQ3lhbgljdGVybWZnPURhcmtDeWFuICAgIGd1aWZnPURhcmtDeWFuCisgIEhpRGVmICBlbGlua3NDb2xvckdyYXkJY3Rlcm1mZz1HcmF5CSAgICBndWlmZz1HcmF5CisgIEhpRGVmICBlbGlua3NDb2xvckRhcmtHcmF5CWN0ZXJtZmc9RGFya0dyYXkgICAgZ3VpZmc9RGFya0dyYXkKKyAgSGlEZWYgIGVsaW5rc0NvbG9yUmVkCQljdGVybWZnPVJlZAkgICAgZ3VpZmc9UmVkCisgIEhpRGVmICBlbGlua3NDb2xvckdyZWVuCWN0ZXJtZmc9R3JlZW4JICAgIGd1aWZnPUdyZWVuCisgIEhpRGVmICBlbGlua3NDb2xvclllbGxvdwljdGVybWZnPVllbGxvdwkgICAgZ3VpZmc9WWVsbG93CisgIEhpRGVmICBlbGlua3NDb2xvckJsdWUJY3Rlcm1mZz1CbHVlCSAgICBndWlmZz1CbHVlCisgIEhpRGVmICBlbGlua3NDb2xvck1hZ2VudGEJY3Rlcm1mZz1NYWdlbnRhCSAgICBndWlmZz1NYWdlbnRhCisgIEhpRGVmICBlbGlua3NDb2xvckN5YW4JY3Rlcm1mZz1DeWFuCSAgICBndWlmZz1DeWFuCisgIEhpRGVmICBlbGlua3NDb2xvcldoaXRlCWN0ZXJtZmc9V2hpdGUJICAgIGd1aWZnPVdoaXRlCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKKyAgZGVsY29tbWFuZCBIaURlZgorZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZWxpbmtzIgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9lbG1maWx0LnZpbSBiL3J1bnRpbWUvc3ludGF4L2VsbWZpbHQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZjIyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9lbG1maWx0LnZpbQpAQCAtMCwwICsxLDcwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJRWxtIEZpbHRlciBydWxlcworIiBNYWludGFpbmVyOglEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxOZHJPY2hpcFNAUGNhbXBiZWxsQWZhbWlseS5NYml6PgorIiBMYXN0IENoYW5nZToJU2VwIDAyLCAyMDAzCisiIFZlcnNpb246CTMKKyIgVVJMOglodHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL2luZGV4Lmh0bWwjdmltbGlua3Nfc3ludGF4CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNsdXN0ZXIgZWxtZmlsdElmR3JvdXAJY29udGFpbnM9ZWxtZmlsdENvbmQsZWxtZmlsdE9wZXIsZWxtZmlsdE9wZXJLZXksLGVsbWZpbHROdW1iZXIsZWxtZmlsdE9wZXJLZXkKKworc3luIG1hdGNoCWVsbWZpbHRQYXJlbkVycm9yCSJbKCldIgorc3luIG1hdGNoCWVsbWZpbHRNYXRjaEVycm9yCSIvIgorc3luIHJlZ2lvbgllbG1maWx0SWYJc3RhcnQ9Ilw8aWZcPiIgZW5kPSJcPHRoZW5cPiIJY29udGFpbnM9ZWxtZmlsdFBhcmVuLGVsbWZpbHRQYXJlbkVycm9yIHNraXBubCBza2lwd2hpdGUgbmV4dGdyb3VwPWVsbWZpbHRBY3Rpb24KK3N5biByZWdpb24JZWxtZmlsdFBhcmVuCWNvbnRhaW5lZAltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iKCIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSIpIgljb250YWlucz1lbG1maWx0UGFyZW4sQGVsbWZpbHRJZkdyb3VwLGVsbWZpbHRUaGVuRXJyb3IKK3N5biByZWdpb24JZWxtZmlsdE1hdGNoCWNvbnRhaW5lZAltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iLyIgc2tpcD0iXFwvIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9Ii8iCXNraXBubCBza2lwd2hpdGUgbmV4dGdyb3VwPWVsbWZpbHRPcGVyLGVsbWZpbHRPcGVyS2V5CitzeW4gbWF0Y2gJZWxtZmlsdFRoZW5FcnJvcgkiXDx0aGVuLiokIgorc3luIG1hdGNoCWVsbWZpbHRDb21tZW50CSJeIy4qJCIJCWNvbnRhaW5zPUBTcGVsbAorCitzeW4ga2V5d29yZAllbG1maWx0QWN0aW9uCWNvbnRhaW5lZAlkZWxldGUgZXhlY3V0ZSBleGVjdXRlYyBmb3J3YXJkIGZvcndhcmRjIGxlYXZlIHNhdmUgc2F2ZWNvcHkgc2tpcG5sIHNraXB3aGl0ZSBuZXh0Z3JvdXA9ZWxtZmlsdFN0cmluZworc3luIG1hdGNoCWVsbWZpbHRBcmcJY29udGFpbmVkCSJbXlxcXSVbJjAtOWREaG1yc1N0eSZdImxjPTEKKworc3luIG1hdGNoCWVsbWZpbHRPcGVyS2V5CWNvbnRhaW5lZAkiXDxjb250YWluc1w+IgkJCXNraXBubCBza2lwd2hpdGUgbmV4dGdyb3VwPWVsbWZpbHRTdHJpbmcKK3N5biBtYXRjaAllbG1maWx0T3BlcktleQljb250YWluZWQJIlw8bWF0Y2hlc1xzIgkJCW5leHRncm91cD1lbG1maWx0TWF0Y2gsZWxtZmlsdFNwYWNlRXJyb3IKK3N5biBrZXl3b3JkCWVsbWZpbHRDb25kCWNvbnRhaW5lZAljYyBiY2MgbGluZXMgYWx3YXlzIHN1YmplY3Qgc2VuZGVyIGZyb20gdG8gbGluZXMgcmVjZWl2ZWQJc2tpcG5sIHNraXB3aGl0ZSBuZXh0Z3JvdXA9ZWxtZmlsdFN0cmluZworc3luIG1hdGNoCWVsbWZpbHROdW1iZXIJY29udGFpbmVkCSJcZFwrIgorc3luIGtleXdvcmQJZWxtZmlsdE9wZXJLZXkJY29udGFpbmVkCWFuZCBub3QJCQkJc2tpcG5sIHNraXB3aGl0ZSBuZXh0Z3JvdXA9ZWxtZmlsdE9wZXIsZWxtZmlsdE9wZXJLZXksZWxtZmlsdFN0cmluZworc3luIG1hdGNoCWVsbWZpbHRPcGVyCWNvbnRhaW5lZAkiXH4iCQkJCXNraXBubCBza2lwd2hpdGUgbmV4dGdyb3VwPWVsbWZpbHRNYXRjaAorc3luIG1hdGNoCWVsbWZpbHRPcGVyCWNvbnRhaW5lZAkiPD1cfD49XHwhPVx8PFx8PFx8PSIJCXNraXBubCBza2lwd2hpdGUgbmV4dGdyb3VwPWVsbWZpbHRTdHJpbmcsZWxtZmlsdENvbmQsZWxtZmlsdE9wZXJLZXkKK3N5biByZWdpb24JZWxtZmlsdFN0cmluZwljb250YWluZWQJc3RhcnQ9JyInIHNraXA9JyJcKFxcXFxcKSpcXFsiJV0nIGVuZD0nIicJY29udGFpbnM9ZWxtZmlsdEFyZyBza2lwbmwgc2tpcHdoaXRlIG5leHRncm91cD1lbG1maWx0T3BlcixlbG1maWx0T3BlcktleQorc3luIHJlZ2lvbgllbG1maWx0U3RyaW5nCWNvbnRhaW5lZAlzdGFydD0iJyIgc2tpcD0iJ1woXFxcXFwpKlxcWyclXSIgZW5kPSInIgljb250YWlucz1lbG1maWx0QXJnIHNraXBubCBza2lwd2hpdGUgbmV4dGdyb3VwPWVsbWZpbHRPcGVyLGVsbWZpbHRPcGVyS2V5CitzeW4gbWF0Y2gJZWxtZmlsdFNwYWNlRXJyb3IJY29udGFpbmVkCSJccy4qJCIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZWxtZmlsdF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9lbG1maWx0X3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGVsbWZpbHRBY3Rpb24JU3RhdGVtZW50CisgIEhpTGluayBlbG1maWx0QXJnCVNwZWNpYWwKKyAgSGlMaW5rIGVsbWZpbHRDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIGVsbWZpbHRDb25kCVN0YXRlbWVudAorICBIaUxpbmsgZWxtZmlsdElmCVN0YXRlbWVudAorICBIaUxpbmsgZWxtZmlsdE1hdGNoCVNwZWNpYWwKKyAgSGlMaW5rIGVsbWZpbHRNYXRjaEVycm9yCUVycm9yCisgIEhpTGluayBlbG1maWx0TnVtYmVyCU51bWJlcgorICBIaUxpbmsgZWxtZmlsdE9wZXIJT3BlcmF0b3IKKyAgSGlMaW5rIGVsbWZpbHRPcGVyS2V5CVR5cGUKKyAgSGlMaW5rIGVsbWZpbHRQYXJlbkVycm9yCUVycm9yCisgIEhpTGluayBlbG1maWx0U3BhY2VFcnJvcglFcnJvcgorICBIaUxpbmsgZWxtZmlsdFN0cmluZwlTdHJpbmcKKyAgSGlMaW5rIGVsbWZpbHRUaGVuRXJyb3IJRXJyb3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZWxtZmlsdCIKKyIgdmltOiB0cz05CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9lcmxhbmcudmltIGIvcnVudGltZS9zeW50YXgvZXJsYW5nLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGZmYjM5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZXJsYW5nLnZpbQpAQCAtMCwwICsxLDIyNCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgIGVybGFuZyAoRVJpY3Nzb24gTEFOR3VhZ2UpCisiCSAgICAgICBodHRwOi8vd3d3LmVybGFuZy5zZQorIgkgICAgICAgaHR0cDovL3d3dy5lcmxhbmcub3JnCisiIE1haW50YWluZXI6ICBLcmW5aW1pciBNYXK+aeYgKEtyZXNpbWlyIE1hcnppYykgPGttYXJ6aWNAZmx5LnNyay5mZXIuaHI+CisiIExhc3QgdXBkYXRlOiBGcmksIDE1LUZlYi0yMDAyCisiIEZpbGVuYW1lczogICAuZXJsCisiIFVSTDoJICAgICAgIGh0dHA6Ly93d3cuc3JrLmZlci5oci9+a21hcnppYy92aW0vc3ludGF4L2VybGFuZy52aW0KKworCisiIFRoZXJlIGFyZSB0aHJlZSBzZXRzIG9mIGhpZ2hsaWdodGluZyBpbiBoZXJlOgorIiBPbmUgaXMgImVybGFuZ19jaGFyYWN0ZXJzIiwgc2Vjb25kIGlzICJlcmxhbmdfZnVuY3Rpb25zIiBhbmQgdGhpcmQKKyIgaXMgImVybGFuZ19rZXl3b3JkcyIuCisiIElmIHlvdSB3YW50IHRvIGRpc2FibGUga2V5d29yZHMgaGlnaGxpZ2h0aW5nLCBwdXQgaW4geW91ciAudmltcmM6CisiICAgICAgIGxldCBlcmxhbmdfa2V5d29yZHM9MQorIiBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGVybGFuZyBCSUYgaGlnaGxpZ2h0aW5nLCBwdXQgaW4geW91ciAudmltcmMKKyIgdGhpczoKKyIgICAgICAgbGV0IGVybGFuZ19mdW5jdGlvbnM9MQorIiBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIHNwZWNpYWwgY2hhcmFjdGVycyBoaWdobGlnaHRpbmcsIHB1dCBpbgorIiB5b3VyIC52aW1yYzoKKyIgICAgICAgbGV0IGVybGFuZ19jaGFyYWN0ZXJzPTEKKworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorCXN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cyAoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworCisiIENhc2Ugc2Vuc2l0aXZlCitzeW4gY2FzZSBtYXRjaAorCisKK2lmICEgZXhpc3RzICgiZXJsYW5nX2NoYXJhY3RlcnMiKQorCSIgQmFzaWMgZWxlbWVudHMKKwlzeW4gbWF0Y2ggICBlcmxhbmdDb21tZW50CSAgICslLiokKworCXN5biBtYXRjaCAgIGVybGFuZ01vZGlmaWVyCSAgICJcflxhXHxcXFxhIiBjb250YWluZWQKKwlzeW4gbWF0Y2ggICBlcmxhbmdTcGVjaWFsQ2hhcmFjdGVyICI6XHxfXHxAXHxcXFx8XCJcfFwuIgorCXN5biBtYXRjaCAgIGVybGFuZ1NlcGFyYXRvcgkgICAiKFx8KVx8e1x8fVx8XFtcfF1cfHxcfHx8XHw7XHwsXHw/XHwtPlx8IyIgY29udGFpbmVkCisJc3luIHJlZ2lvbiAgZXJsYW5nU3RyaW5nCSAgIHN0YXJ0PSsiKyBza2lwPStcXCIrIGVuZD0rIisgY29udGFpbnM9ZXJsYW5nTW9kaWZpZXIKKwlzeW4gcmVnaW9uICBlcmxhbmdBdG9tCQkgICBzdGFydD0rJysgc2tpcD0rXFwnKyBlbmQ9KycrCisKKwkiIE9wZXJhdG9ycworCXN5biBtYXRjaCAgIGVybGFuZ09wZXJhdG9yCSAgICIrXHwtXHxcKlx8XC8iCisJc3luIGtleXdvcmQgZXJsYW5nT3BlcmF0b3IJICAgZGl2IHJlbSBvciB4b3IgYm9yIGJ4b3IgYnNsIGJzcgorCXN5biBrZXl3b3JkIGVybGFuZ09wZXJhdG9yCSAgIGFuZCBiYW5kIG5vdCBibm90CisJc3luIG1hdGNoICAgZXJsYW5nT3BlcmF0b3IJICAgIj09XHwvPVx8PTo9XHw9Lz1cfDxcfD08XHw+XHw+PSIKKwlzeW4gbWF0Y2ggICBlcmxhbmdPcGVyYXRvcgkgICAiKytcfC0tXHw9XHwhXHw8LSIKKworCSIgTnVtYmVycworCXN5biBtYXRjaCAgIGVybGFuZ051bWJlckludGVnZXIgICAgIlsrLV1cPVxkXCsiIGNvbnRhaW5zPWVybGFuZ1NlcGFyYXRvcgorCXN5biBtYXRjaCAgIGVybGFuZ051bWJlckZsb2F0MQkgICAiWystXVw9XGRcKy5cZFwrIiBjb250YWlucz1lcmxhbmdTZXBhcmF0b3IKKwlzeW4gbWF0Y2ggICBlcmxhbmdOdW1iZXJGbG9hdDIJICAgIlsrLV1cPVxkXCtcKC5cZFwrXClcPVtlRV1bKy1dXD1cZFwrXCguXGRcK1wpXD0iIGNvbnRhaW5zPWVybGFuZ1NlcGFyYXRvcgorCXN5biBtYXRjaCAgIGVybGFuZ051bWJlckZsb2F0MwkgICAiWystXVw9XGRcK1sjXVx4XCsiIGNvbnRhaW5zPWVybGFuZ1NlcGFyYXRvcgorCXN5biBtYXRjaCAgIGVybGFuZ051bWJlckZsb2F0NAkgICAiWystXVw9W2VFXVsrLV1cPVxkXCsiIGNvbnRhaW5zPWVybGFuZ1NlcGFyYXRvcgorCXN5biBtYXRjaCAgIGVybGFuZ051bWJlckhleAkgICAiJFx4XCsiIGNvbnRhaW5zPWVybGFuZ1NlcGFyYXRvcgorCisJIiBJZ25vcmUgJ18nIGFuZCAnLScgaW4gd29yZHMKKwlzeW4gbWF0Y2ggICBlcmxhbmdXb3JkCQkgICAiXHdcK1tfLV1cK1x3XCsiCisKKwkiIElnbm9yZSBudW1iZXJzIGluIHdvcmRzCisJc3luIG1hdGNoICAgZXJsYW5nV29yZAkJICAgIlx3XCtcZFwrXChcKC5cZFwrXClcPVwoXHdcK1wpXD1cKVw9IgorZW5kaWYKKworaWYgISBleGlzdHMgKCJlcmxhbmdfZnVuY3Rpb25zIikKKwkiIEZ1bmN0aW9ucyBjYWxsCisJc3luIG1hdGNoICAgZXJsYW5nRkNhbGwgICAgICAiXHdcK1woXHNcK1wpXD1bOkBdXChcc1wrXClcPVx3XCsiIGNvbnRhaW5zPUFMTEJVVCxlcmxhbmdGdW5jdGlvbixlcmxhbmdCSUYsZXJsYW5nV29yZAorCisJIiBidWlsZC1pbi1mdW5jdGlvbnMgKEJJRnMpCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgYWJzIGFsaXZlIGFwcGx5IGF0b21fdG9fbGlzdAorCXN5biBrZXl3b3JkIGVybGFuZ0JJRgkgICAgIGJpbmFyeV90b19saXN0IGJpbmFyeV90b190ZXJtCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgY29uY2F0X2JpbmFyeQorCXN5biBrZXl3b3JkIGVybGFuZ0JJRgkgICAgIGRhdGUgZGlzY29ubmVjdF9ub2RlCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgZWxlbWVudCBlcmFzZSBleGl0CisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgZmxvYXQgZmxvYXRfdG9fbGlzdAorCXN5biBrZXl3b3JkIGVybGFuZ0JJRgkgICAgIGdldCBnZXRfa2V5cyBncm91cF9sZWFkZXIKKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICBoYWx0IGhkCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgaW50ZWdlcl90b19saXN0IGlzX2FsaXZlCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgbGVuZ3RoIGxpbmsgbGlzdF90b19hdG9tIGxpc3RfdG9fYmluYXJ5CisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgbGlzdF90b19mbG9hdCBsaXN0X3RvX2ludGVnZXIgbGlzdF90b19waWQKKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICBsaXN0X3RvX3R1cGxlIGxvYWRfbW9kdWxlCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgbWFrZV9yZWYgbW9uaXRvcl9ub2RlCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgbm9kZSBub2RlcyBub3cKKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICBvcGVuX3BvcnQKKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICBwaWRfdG9fbGlzdCBwcm9jZXNzX2ZsYWcKKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICBwcm9jZXNzX2luZm8gcHJvY2VzcyBwdXQKKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICByZWdpc3RlciByZWdpc3RlcmVkIHJvdW5kCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgc2VsZiBzZXRlbGVtZW50IHNpemUgc3Bhd24KKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICBzcGF3bl9saW5rIHNwbGl0X2JpbmFyeSBzdGF0aXN0aWNzCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgdGVybV90b19iaW5hcnkgdGhyb3cgdGltZSB0bCB0cnVuYworCXN5biBrZXl3b3JkIGVybGFuZ0JJRgkgICAgIHR1cGxlX3RvX2xpc3QKKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICB1bmxpbmsgdW5yZWdpc3RlcgorCXN5biBrZXl3b3JkIGVybGFuZ0JJRgkgICAgIHdoZXJlaXMKKworCSIgT3RoZXIgQklGcworCXN5biBrZXl3b3JkIGVybGFuZ0JJRgkgICAgIGF0b20gYmluYXJ5IGNvbnN0YW50IGZ1bmN0aW9uIGludGVnZXIKKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICBsaXN0IG51bWJlciBwaWQgcG9ydHMgcG9ydF9jbG9zZSBwb3J0X2luZm8KKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICByZWZlcmVuY2UgcmVjb3JkCisKKwkiIGVybGFuZzpCSUZzCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgY2hlY2tfcHJvY2Vzc19jb2RlIGRlbGV0ZV9tb2R1bGUKKwlzeW4ga2V5d29yZCBlcmxhbmdCSUYJICAgICBnZXRfY29va2llIGhhc2ggbWF0aCBtb2R1bGVfbG9hZGVkCisJc3luIGtleXdvcmQgZXJsYW5nQklGCSAgICAgcHJlbG9hZGVkIHByb2Nlc3NlcyBwdXJnZV9tb2R1bGUgc2V0X2Nvb2tpZQorCXN5biBrZXl3b3JkIGVybGFuZ0JJRgkgICAgIHNldF9ub2RlCisKKwkiIGZ1bmN0aW9ucyBvZiBtYXRoIGxpYnJhcnkKKwlzeW4ga2V5d29yZCBlcmxhbmdGdW5jdGlvbiAgIGFjb3MgYXNpbiBhdGFuIGF0YW4yIGNvcyBjb3NoIGV4cAorCXN5biBrZXl3b3JkIGVybGFuZ0Z1bmN0aW9uICAgbG9nIGxvZzEwIHBpIHBvdyBwb3dlciBzaW4gc2luaCBzcXJ0CisJc3luIGtleXdvcmQgZXJsYW5nRnVuY3Rpb24gICB0YW4gdGFuaAorCisJIiBPdGhlciBmdW5jdGlvbnMKKwlzeW4ga2V5d29yZCBlcmxhbmdGdW5jdGlvbiAgIGNhbGwgbW9kdWxlX2luZm8gcGFyc2VfdHJhbnNmb3JtCisJc3luIGtleXdvcmQgZXJsYW5nRnVuY3Rpb24gICB1bmRlZmluZWRfZnVuY3Rpb24KKworCSIgTW9kdWxlcworCXN5biBrZXl3b3JkIGVybGFuZ01vZHVsZSAgICAgZXJyb3JfaGFuZGxlcgorZW5kaWYKKworaWYgISBleGlzdHMgKCJlcmxhbmdfa2V5d29yZHMiKQorCSIgQ29uc3RhbnRzIGFuZCBEaXJlY3RpdmVzCisJc3luIG1hdGNoICAgZXJsYW5nRGlyZWN0aXZlICAiLWNvbXBpbGVcfC1kZWZpbmVcfC1lbHNlXHwtZW5kaWZcfC1leHBvcnRcfC1maWxlIgorCXN5biBtYXRjaCAgIGVybGFuZ0RpcmVjdGl2ZSAgIi1pZmRlZlx8LWlmbmRlZlx8LWltcG9ydFx8LWluY2x1ZGVcfC1pbmNsdWRlX2xpYiIKKwlzeW4gbWF0Y2ggICBlcmxhbmdEaXJlY3RpdmUgICItbW9kdWxlXHwtcmVjb3JkXHwtdW5kZWYiCisKKwlzeW4gbWF0Y2ggICBlcmxhbmdDb25zdGFudCAgICItYXV0aG9yXHwtY29weXJpZ2h0XHwtZG9jIgorCisJIiBLZXl3b3JkcworCXN5biBrZXl3b3JkIGVybGFuZ0tleXdvcmQgICAgYWZ0ZXIgYmVnaW4gY2FzZSBjYXRjaAorCXN5biBrZXl3b3JkIGVybGFuZ0tleXdvcmQgICAgY29uZCBlbmQgZnVuIGlmCisJc3luIGtleXdvcmQgZXJsYW5nS2V5d29yZCAgICBsZXQgb2YgcXVlcnkgcmVjZWl2ZQorCXN5biBrZXl3b3JkIGVybGFuZ0tleXdvcmQgICAgd2hlbgorCisJIiBQcm9jZXNzZXMKKwlzeW4ga2V5d29yZCBlcmxhbmdQcm9jZXNzICAgIGNyZWF0aW9uIGN1cnJlbnRfZnVuY3Rpb24gZGljdGlvbmFyeQorCXN5biBrZXl3b3JkIGVybGFuZ1Byb2Nlc3MgICAgZ3JvdXBfbGVhZGVyIGhlYXBfc2l6ZSBoaWdoIGluaXRpYWxfY2FsbAorCXN5biBrZXl3b3JkIGVybGFuZ1Byb2Nlc3MgICAgbGlua2VkIGxvdyBtZW1vcnlfaW5fdXNlIG1lc3NhZ2VfcXVldWUKKwlzeW4ga2V5d29yZCBlcmxhbmdQcm9jZXNzICAgIG5ldF9rZXJuZWwgbm9kZSBub3JtYWwgcHJpb3JpdHkKKwlzeW4ga2V5d29yZCBlcmxhbmdQcm9jZXNzICAgIHJlZHVjdGlvbnMgcmVnaXN0ZXJlZF9uYW1lIHJ1bm5hYmxlCisJc3luIGtleXdvcmQgZXJsYW5nUHJvY2VzcyAgICBydW5uaW5nIHN0YWNrX3RyYWNlIHN0YXR1cyB0aW1lcgorCXN5biBrZXl3b3JkIGVybGFuZ1Byb2Nlc3MgICAgdHJhcF9leGl0IHdhaXRpbmcKKworCSIgUG9ydHMKKwlzeW4ga2V5d29yZCBlcmxhbmdQb3J0ICAgICAgIGNvbW1hbmQgY291bnRfaW4gY291bnRfb3V0IGNyZWF0aW9uIGluCisJc3luIGtleXdvcmQgZXJsYW5nUG9ydCAgICAgICBpbl9mb3JtYXQgbGlua2VkIG5vZGUgb3V0IG93bmVyIHBhY2tldGluZworCisJIiBOb2RlcworCXN5biBrZXl3b3JkIGVybGFuZ05vZGUgICAgICAgYXRvbV90YWJsZXMgY29tbXVuaWNhdGluZyBjcmVhdGlvbgorCXN5biBrZXl3b3JkIGVybGFuZ05vZGUgICAgICAgY3VycmVudF9nYyBjdXJyZW50X3JlZHVjdGlvbnMgY3VycmVudF9ydW50aW1lCisJc3luIGtleXdvcmQgZXJsYW5nTm9kZSAgICAgICBjdXJyZW50X3dhbGxfY2xvY2sgZGlzdHJpYnV0aW9uX3BvcnQKKwlzeW4ga2V5d29yZCBlcmxhbmdOb2RlICAgICAgIGVudHJ5X3BvaW50cyBlcnJvcl9oYW5kbGVyIGZyaWVuZHMKKwlzeW4ga2V5d29yZCBlcmxhbmdOb2RlICAgICAgIGdhcmJhZ2VfY29sbGVjdGlvbiBtYWdpY19jb29raWUgbWFnaWNfY29va2llcworCXN5biBrZXl3b3JkIGVybGFuZ05vZGUgICAgICAgbW9kdWxlX3RhYmxlIG1vbml0b3JlZF9ub2RlcyBuYW1lIG5leHRfcmVmCisJc3luIGtleXdvcmQgZXJsYW5nTm9kZSAgICAgICBwb3J0cyBwcmVsb2FkZWQgcHJvY2Vzc2VzIHJlZHVjdGlvbnMKKwlzeW4ga2V5d29yZCBlcmxhbmdOb2RlICAgICAgIHJlZl9zdGF0ZSByZWdpc3RyeSBydW50aW1lIHdhbGxfY2xvY2sKKworCSIgUmVzZXJ2ZWQKKwlzeW4ga2V5d29yZCBlcmxhbmdSZXNlcnZlZCAgIGFwcGx5X2xhbWJkYSBtb2R1bGVfaW5mbyBtb2R1bGVfbGFtYmRhcworCXN5biBrZXl3b3JkIGVybGFuZ1Jlc2VydmVkICAgcmVjb3JkIHJlY29yZF9pbmRleCByZWNvcmRfaW5mbworCisJIiBFeHRyYXMKKwlzeW4ga2V5d29yZCBlcmxhbmdFeHRyYSAgICAgIGJhZGFyZyBub2Nvb2tpZSBmYWxzZSBmdW4gdHJ1ZQorCisJIiBTaWduYWxzCisJc3luIGtleXdvcmQgZXJsYW5nU2lnbmFsICAgICBiYWRzaWcga2lsbCBraWxsZWQgZXhpdCBub3JtYWwKK2VuZGlmCisKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMgKCJkaWRfZXJsYW5nX2luaXRzIikKKwlpZiB2ZXJzaW9uIDwgNTA4CisJCWxldCBkaWRfZXJsYW5nX2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCSIgZXJsYW5nX2NoYXJhY3RlcnMKKwlIaUxpbmsgZXJsYW5nQ29tbWVudCBDb21tZW50CisJSGlMaW5rIGVybGFuZ1NwZWNpYWxDaGFyYWN0ZXIgU3BlY2lhbAorCUhpTGluayBlcmxhbmdTZXBhcmF0b3IgTm9ybWFsCisJSGlMaW5rIGVybGFuZ01vZGlmaWVyIFNwZWNpYWwKKwlIaUxpbmsgZXJsYW5nT3BlcmF0b3IgT3BlcmF0b3IKKwlIaUxpbmsgZXJsYW5nU3RyaW5nIFN0cmluZworCUhpTGluayBlcmxhbmdBdG9tIFR5cGUKKworCUhpTGluayBlcmxhbmdOdW1iZXJJbnRlZ2VyIE51bWJlcgorCUhpTGluayBlcmxhbmdOdW1iZXJGbG9hdDEgRmxvYXQKKwlIaUxpbmsgZXJsYW5nTnVtYmVyRmxvYXQyIEZsb2F0CisJSGlMaW5rIGVybGFuZ051bWJlckZsb2F0MyBGbG9hdAorCUhpTGluayBlcmxhbmdOdW1iZXJGbG9hdDQgRmxvYXQKKwlIaUxpbmsgZXJsYW5nTnVtYmVySGV4IE51bWJlcgorCisJSGlMaW5rIGVybGFuZ1dvcmQgTm9ybWFsCisKKwkiIGVybGFuZ19mdW5jdGlvbnMKKwlIaUxpbmsgZXJsYW5nRkNhbGwgRnVuY3Rpb24KKwlIaUxpbmsgZXJsYW5nQklGIEZ1bmN0aW9uCisJSGlMaW5rIGVybGFuZ0Z1bmN0aW9uIEZ1bmN0aW9uCisJSGlMaW5rIGVybGFuZ01vZHVsZUZ1bmN0aW9uIEZ1bmN0aW9uCisKKwkiIGVybGFuZ19rZXl3b3JkcworCUhpTGluayBlcmxhbmdEaXJlY3RpdmUgVHlwZQorCUhpTGluayBlcmxhbmdDb25zdGFudCBUeXBlCisJSGlMaW5rIGVybGFuZ0tleXdvcmQgS2V5d29yZAorCUhpTGluayBlcmxhbmdQcm9jZXNzIFNwZWNpYWwKKwlIaUxpbmsgZXJsYW5nUG9ydCBTcGVjaWFsCisJSGlMaW5rIGVybGFuZ05vZGUgU3BlY2lhbAorCUhpTGluayBlcmxhbmdSZXNlcnZlZCBTdGF0ZW1lbnQKKwlIaUxpbmsgZXJsYW5nRXh0cmEgU3RhdGVtZW50CisJSGlMaW5rIGVybGFuZ1NpZ25hbCBTdGF0ZW1lbnQKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImVybGFuZyIKKworIiBlb2YKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2VzcWxjLnZpbSBiL3J1bnRpbWUvc3ludGF4L2VzcWxjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWQxNjdhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZXNxbGMudmltCkBAIC0wLDAgKzEsNzUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglFU1FMLUMKKyIgTWFpbnRhaW5lcjoJSm9uYXRoYW4gQS4gR2VvcmdlIDxqYWdlb3JnZUB0ZWwuZ3RlLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWF5IDA5CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBSZWFkIHRoZSBDKysgc3ludGF4IHRvIHN0YXJ0IHdpdGgKK2lmIHZlcnNpb24gPCA2MDAKKyAgc291cmNlIDxzZmlsZT46cDpoL2NwcC52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2NwcC52aW0KK2VuZGlmCisKKyIgRVNRTC1DIGV4dGVudGlvbnMKKworc3ludGF4IGtleXdvcmQgZXNxbGNQcmVQcm9jCUVYRUMgU1FMIElOQ0xVREUKKworc3ludGF4IGNhc2UgaWdub3JlCisKK3N5bnRheCBrZXl3b3JkIGVzcWxjUHJlUHJvYwliZWdpbiBlbmQgZGVjbGFyZSBzZWN0aW9uIGRhdGFiYXNlIG9wZW4gZXhlY3V0ZQorc3ludGF4IGtleXdvcmQgZXNxbGNQcmVQcm9jCXByZXBhcmUgZmV0Y2ggZ290byBjb250aW51ZSBmb3VuZCBzcWxlcnJvciB3b3JrCisKK3N5bnRheCBrZXl3b3JkIGVzcWxjS2V5d29yZAlhY2Nlc3MgYWRkIGFzIGFzYyBieSBjaGVjayBjbHVzdGVyIGNvbHVtbgorc3ludGF4IGtleXdvcmQgZXNxbGNLZXl3b3JkCWNvbXByZXNzIGNvbm5lY3QgY3VycmVudCBkZWNpbWFsCitzeW50YXgga2V5d29yZCBlc3FsY0tleXdvcmQJZGVzYyBleGNsdXNpdmUgZmlsZSBmcm9tIGdyb3VwCitzeW50YXgga2V5d29yZCBlc3FsY0tleXdvcmQJaGF2aW5nIGlkZW50aWZpZWQgaW1tZWRpYXRlIGluY3JlbWVudCBpbmRleAorc3ludGF4IGtleXdvcmQgZXNxbGNLZXl3b3JkCWluaXRpYWwgaW50byBpcyBsZXZlbCBtYXhleHRlbnRzIG1vZGUgbW9kaWZ5CitzeW50YXgga2V5d29yZCBlc3FsY0tleXdvcmQJbm9jb21wcmVzcyBub3dhaXQgb2Ygb2ZmbGluZSBvbiBvbmxpbmUgc3RhcnQKK3N5bnRheCBrZXl3b3JkIGVzcWxjS2V5d29yZAlzdWNjZXNzZnVsIHN5bm9ueW0gdGFibGUgdGhlbiB0byB0cmlnZ2VyIHVpZAorc3ludGF4IGtleXdvcmQgZXNxbGNLZXl3b3JkCXVuaXF1ZSB1c2VyIHZhbGlkYXRlIHZhbHVlcyB2aWV3IHdoZW5ldmVyCitzeW50YXgga2V5d29yZCBlc3FsY0tleXdvcmQJd2hlcmUgd2l0aCBvcHRpb24gb3JkZXIgcGN0ZnJlZSBwcml2aWxlZ2VzCitzeW50YXgga2V5d29yZCBlc3FsY0tleXdvcmQJcHVibGljIHJlc291cmNlIHJvdyByb3dsYWJlbCByb3dudW0gcm93cworc3ludGF4IGtleXdvcmQgZXNxbGNLZXl3b3JkCXNlc3Npb24gc2hhcmUgc2l6ZSBzbWFsbGludAorCitzeW50YXgga2V5d29yZCBlc3FsY09wZXJhdG9yCW5vdCBhbmQgb3IKK3N5bnRheCBrZXl3b3JkIGVzcWxjT3BlcmF0b3IJaW4gYW55IHNvbWUgYWxsIGJldHdlZW4gZXhpc3RzCitzeW50YXgga2V5d29yZCBlc3FsY09wZXJhdG9yCWxpa2UgZXNjYXBlCitzeW50YXgga2V5d29yZCBlc3FsY09wZXJhdG9yCWludGVyc2VjdCBtaW51cworc3ludGF4IGtleXdvcmQgZXNxbGNPcGVyYXRvcglwcmlvciBkaXN0aW5jdAorc3ludGF4IGtleXdvcmQgZXNxbGNPcGVyYXRvcglzeXNkYXRlCisKK3N5bnRheCBrZXl3b3JkIGVzcWxjU3RhdGVtZW50CWFsdGVyIGFuYWx5emUgYXVkaXQgY29tbWVudCBjb21taXQgY3JlYXRlCitzeW50YXgga2V5d29yZCBlc3FsY1N0YXRlbWVudAlkZWxldGUgZHJvcCBleHBsYWluIGdyYW50IGluc2VydCBsb2NrIG5vYXVkaXQKK3N5bnRheCBrZXl3b3JkIGVzcWxjU3RhdGVtZW50CXJlbmFtZSByZXZva2Ugcm9sbGJhY2sgc2F2ZXBvaW50IHNlbGVjdCBzZXQKK3N5bnRheCBrZXl3b3JkIGVzcWxjU3RhdGVtZW50CXRydW5jYXRlIHVwZGF0ZQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9lc3FsY19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9lc3FsY19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBlc3FsY09wZXJhdG9yCU9wZXJhdG9yCisgIEhpTGluayBlc3FsY1N0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIGVzcWxjS2V5d29yZAllc3FsY1NwZWNpYWwKKyAgSGlMaW5rIGVzcWxjU3BlY2lhbAlTcGVjaWFsCisgIEhpTGluayBlc3FsY1ByZVByb2MJUHJlUHJvYworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJlc3FsYyIKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZXRlcm0udmltIGIvcnVudGltZS9zeW50YXgvZXRlcm0udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjM4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9ldGVybS52aW0KQEAgLTAsMCArMSwyMDAgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkgICAgRXRlcm0gY29uZmlndXJhdGlvbiBmaWxlCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9zeW50YXgvcGNwL2V0ZXJtLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTA2CisiIGFyY2gtdGFnOgkgICAgZjRjNThjYWYtMmI5MS00ZmM0LTk2YWYtZTNjYWQ3YzcwZTZiCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIG1hZ2ljIG51bWJlcgorc3luIG1hdGNoICAgZXRlcm1NYWdpYwkJZGlzcGxheSAiXjxFdGVybS1bMC05Ll1cKz4kIgorCisiIGNvbW1lbnRzCitzeW4gcmVnaW9uICBldGVybUNvbW1lbnQJbWF0Y2hncm91cD1ldGVybUNvbW1lbnQgc3RhcnQ9Il4jIiBlbmQ9IiQiIGNvbnRhaW5zPWV0ZXJtVG9kbworCisiIHRvZG8KK3N5biBrZXl3b3JkIGV0ZXJtVG9kbwkJY29udGFpbmVkIFRPRE8gRklYTUUgWFhYIE5PVEUKKworIiBudW1iZXJzCitzeW4gbWF0Y2ggICBldGVybU51bWJlcgkJY29udGFpbmVkIGRpc3BsYXkgIlw8XChcZFwrXHwweFx4XHsxLDJ9XClcPiIKKworIiBzdHJpbmdzCitzeW4gcmVnaW9uICBldGVybVN0cmluZwkJY29udGFpbmVkIGRpc3BsYXkgb25lbGluZSBzdGFydD0rIisgc2tpcD0rXFwiKyBlbmQ9KyIrCisKKyIgYm9vbGVhbnMKK3N5biBrZXl3b3JkIGV0ZXJtQm9vbGVhbgljb250YWluZWQgb24gb2ZmIHRydWUgZmFsc2UgeWVzIG5vCisKKyIgY29sb3JzIChub3QgcHJldHR5LCBidXQgY2FuJ3QgZmlndXJlIG91dCBiZXR0ZXIgd2F5Li4uKQorc3luIG1hdGNoICAgZXRlcm1Db2xvcgkJY29udGFpbmVkIGRpc3BsYXkgIlxzXCsjXHhcezZ9XD4iCitzeW4ga2V5d29yZCBldGVybUNvbG9yCQljb250YWluZWQgd2hpdGUgYmxhY2sKKworIiBwcmVwcm9jCitzeW4gbWF0Y2ggICBldGVybVByZVByb2MJY29udGFpbmVkICIlXChhcHBuYW1lXHxleGVjXHxnZXRcfHB1dFx8cmFuZG9tXHx2ZXJzaW9uXHxpbmNsdWRlXHxwcmVwcm9jXCkoImhlPWUtMQorCisiIGZ1bmN0aW9ucworc3luIG1hdGNoICAgZXRlcm1GdW5jdGlvbnMJY29udGFpbmVkICJcPFwoY29weVx8ZXhpdFx8a2lsbFx8bm9wXHxwYXN0ZVx8c2F2ZVx8c2Nyb2xsXHxzZWFyY2hcfHNwYXduXCkoIgorCisiIGFuZCBtYWtlIGl0IGVhc3kgdG8gcmVmZXIgdG8gdGhlIGFib3ZlLi4uCitzeW4gY2x1c3RlciBldGVybUdlbmVyYWwJY29udGFpbnM9ZXRlcm1Db21tZW50LGV0ZXJtTnVtYmVyLGV0ZXJtU3RyaW5nLGV0ZXJtQm9vbGVhbixldGVybUNvbG9yLGV0ZXJtRnVuY3Rpb24sZXRlcm1QcmVQcm9jCisKKyIga2V5IG1vZGlmaWVycworc3luIGtleXdvcmQgZXRlcm1LZXlNb2QJCWNvbnRhaW5lZCBjdHJsIHNoaWZ0IGxvY2sgbW9kMSBtb2QyIG1vZDMgbW9kNCBtb2Q1IGFsdCBtZXRhIGFueW1vZAorc3luIGtleXdvcmQgZXRlcm1LZXlNb2QJCWNvbnRhaW5lZCBidXR0b24xIGJ1dHRvbjIgYnV0dG9uMyBidXR0b240IGJ1dHRvbjUKKworIiBjb2xvciBjb250ZXh0CitzeW4gcmVnaW9uICBldGVybUNvbG9yT3B0aW9ucwljb250YWluZWQgb25lbGluZSBtYXRjaGdyb3VwPWV0ZXJtT3B0aW9uIHN0YXJ0PSJeXHMqdmlkZW9cPiIgbWF0Y2hncm91cD1ldGVybVR5cGUgZW5kPSJcPFwobm9ybWFsXHxyZXZlcnNlXClcPiIKK3N5biByZWdpb24gIGV0ZXJtQ29sb3JPcHRpb25zCWNvbnRhaW5lZCBvbmVsaW5lIG1hdGNoZ3JvdXA9ZXRlcm1PcHRpb24gc3RhcnQ9Il5ccypjb2xvclw+IiBtYXRjaGdyb3VwPWV0ZXJtVHlwZSBlbmQ9Ilw8XChiZFx8dWxcfFswLTldXHwxWzAtNV1cKVw+Igorc3luIGtleXdvcmQgZXRlcm1Db2xvck9wdGlvbnMJY29udGFpbmVkIGZvcmVncm91bmQgYmFja2dyb3VuZCBjdXJzb3IgY3Vyc29yX3RleHQgcG9pbnRlcgorCitzeW4gcmVnaW9uICBldGVybUNvbG9yQ29udGV4dAlmb2xkIHRyYW5zcGFyZW50ICBtYXRjaGdyb3VwPWV0ZXJtQ29udGV4dCBzdGFydD0iXlxzKmJlZ2luXHNcK2NvbG9yXHMqJCIgZW5kPSJeXHMqZW5kXD5cKFxzXCsuXHstMCx9XClcPSQiIGNvbnRhaW5zPUBldGVybUdlbmVyYWwsZXRlcm1Db2xvck9wdGlvbnMKKworIiBhdHRyaWJ1dGVzIGNvbnRleHQKK3N5biByZWdpb24gIGV0ZXJtQXR0ck9wdGlvbnMJY29udGFpbmVkIG9uZWxpbmUgbWF0Y2hncm91cD1ldGVybU9wdGlvbiBzdGFydD0iXlxzKmdlb21ldHJ5XD4iIG1hdGNoZ3JvdXA9ZXRlcm1UeXBlIGVuZD0iXDxcZFwreFxkXCsrXGRcKytcZFwrXD4iCitzeW4gcmVnaW9uICBldGVybUF0dHJPcHRpb25zCWNvbnRhaW5lZCBvbmVsaW5lIG1hdGNoZ3JvdXA9ZXRlcm1PcHRpb24gc3RhcnQ9Il5ccypzY3JvbGxiYXJfdHlwZVw+IiBtYXRjaGdyb3VwPWV0ZXJtVHlwZSBlbmQ9Ilw8XChtb3RpZlx8eHRlcm1cfG5leHRcKVw+Igorc3luIHJlZ2lvbiAgZXRlcm1BdHRyT3B0aW9ucwljb250YWluZWQgb25lbGluZSBtYXRjaGdyb3VwPWV0ZXJtT3B0aW9uIHN0YXJ0PSJeXHMqZm9udFw+IiBtYXRjaGdyb3VwPWV0ZXJtVHlwZSBlbmQ9Ilw8XChib2xkXHxkZWZhdWx0XHxwcm9wb3J0aW9uYWxcfGZ4XHxbMC01XVwpXD4iCitzeW4ga2V5d29yZCBldGVybUF0dHJPcHRpb25zCWNvbnRhaW5lZCB0aXRsZSBuYW1lIGljb25uYW1lIGRlc2t0b3Agc2Nyb2xsYmFyX3dpZHRoCisKK3N5biByZWdpb24gIGV0ZXJtQXR0ckNvbnRleHQJZm9sZCB0cmFuc3BhcmVudCAgbWF0Y2hncm91cD1ldGVybUNvbnRleHQgc3RhcnQ9Il5ccypiZWdpblxzXCthdHRyaWJ1dGVzXHMqJCIgZW5kPSJeXHMqZW5kXD5cKFxzXCsuXHstMCx9XClcPSQiIGNvbnRhaW5zPUBldGVybUdlbmVyYWwsZXRlcm1BdHRyT3B0aW9ucworCisiIGltYWdlIGNvbnRleHQKKyIgaW1hZ2UgdHlwZXMKK3N5biBrZXl3b3JkIGV0ZXJtSW1hZ2VUeXBlcwljb250YWluZWQgYmFja2dyb3VuZCB0cm91Z2ggYW5jaG9yIHVwX2Fycm93CitzeW4ga2V5d29yZCBldGVybUltYWdlVHlwZXMJY29udGFpbmVkIGxlZnRfYXJyb3cgcmlnaHRfYXJyb3cgbWVudSBtZW51aXRlbQorc3luIGtleXdvcmQgZXRlcm1JbWFnZVR5cGVzCWNvbnRhaW5lZCBzdWJtZW51IGJ1dHRvbiBidXR0b25iYXIgZG93bl9hcnJvdworc3luIHJlZ2lvbiAgZXRlcm1JbWFnZU9wdGlvbnMJY29udGFpbmVkIHRyYW5zcGFyZW50IG9uZWxpbmUgbWF0Y2hncm91cD1ldGVybU9wdGlvbiBzdGFydD0iXlxzKnR5cGVcPiIgZW5kPSIkIiBjb250YWlucz1ldGVybUltYWdlVHlwZXMKKyIgaW1hZ2UgbW9kZXMKK3N5biBrZXl3b3JkIGV0ZXJtSW1hZ2VNb2Rlcwljb250YWluZWQgaW1hZ2UgdHJhbnMgdmlld3BvcnQgYXV0byBzb2xpZAorc3luIGtleXdvcmQgZXRlcm1JbWFnZU1vZGVzQWxsb3cgY29udGFpbmVkIGFsbG93CitzeW4gcmVnaW9uICBldGVybUltYWdlT3B0aW9ucwljb250YWluZWQgdHJhbnNwYXJlbnQgb25lbGluZSBtYXRjaGdyb3VwPWV0ZXJtT3B0aW9uIHN0YXJ0PSJeXHMqbW9kZVw+IiBlbmQ9IiQiIGNvbnRhaW5zPWV0ZXJtSW1hZ2VNb2RlcyxldGVybUltYWdlTW9kZXNBbGxvdworIiBpbWFnZSBzdGF0ZXMKK3N5biByZWdpb24gIGV0ZXJtSW1hZ2VPcHRpb25zCWNvbnRhaW5lZCB0cmFuc3BhcmVudCBvbmVsaW5lIG1hdGNoZ3JvdXA9ZXRlcm1PcHRpb24gc3RhcnQ9Il5ccypzdGF0ZVw+IiBtYXRjaGdyb3VwPWV0ZXJtVHlwZSBlbmQ9Ilw8XChub3JtYWxcfHNlbGVjdGVkXHxjbGlja2VkXHxkaXNhYmxlZFwpXD4iCisiIGltYWdlIGdlb21ldHJ5CitzeW4gcmVnaW9uICBldGVybUltYWdlT3B0aW9ucwljb250YWluZWQgdHJhbnNwYXJlbnQgb25lbGluZSBtYXRjaGdyb3VwPWV0ZXJtT3B0aW9uIHN0YXJ0PSJeXHMqZ2VvbVw+IiBtYXRjaGdyb3VwPWV0ZXJtVHlwZSBlbmQ9IlxzXCtcKFxkXCt4XGRcKytcZFwrK1xkXCtcKVw9OlwoXCh0aWxlXHxzY2FsZVx8aHNjYWxlXHx2c2NhbGVcfHByb3BzY2FsZVwpZFw9XClcPSIKKyIgaW1hZ2UgY29sb3IgbW9kaWZpY2F0aW9uCitzeW4gcmVnaW9uICBldGVybUltYWdlT3B0aW9ucwljb250YWluZWQgdHJhbnNwYXJlbnQgb25lbGluZSBtYXRjaGdyb3VwPWV0ZXJtT3B0aW9uIHN0YXJ0PSJeXHMqXChjbW9kXHxjb2xvcm1vZFwpXD4iIG1hdGNoZ3JvdXA9ZXRlcm1UeXBlIGVuZD0iXDxcKGltYWdlXHxyZWRcfGdyZWVuXHxibHVlXClcPiIKKyIgb3RoZXIga2V5d29yZHMKK3N5biBrZXl3b3JkIGV0ZXJtSW1hZ2VPcHRpb25zCWNvbnRhaW5lZCBmaWxlIHBhZGRpbmcgYm9yZGVyIGJldmVsIGNvbG9yCisKK3N5biByZWdpb24gIGV0ZXJtSW1hZ2VDb250ZXh0CWNvbnRhaW5lZCB0cmFuc3BhcmVudCBmb2xkIG1hdGNoZ3JvdXA9ZXRlcm1Db250ZXh0IHN0YXJ0PSJeXHMqYmVnaW5cc1wraW1hZ2VccyokIiBlbmQ9Il5ccyplbmRcPlwoXHNcKy5cey0wLH1cKVw9JCIgY29udGFpbnM9QGV0ZXJtR2VuZXJhbCxldGVybUltYWdlT3B0aW9ucworCisiIGltYWdlY2xhc3NlcyBjb250ZXh0CitzeW4ga2V5d29yZCBldGVybUlDbGFzc09wdGlvbnMJY29udGFpbmVkIGljb24gY2FjaGUgcGF0aCBhbmltCisKK3N5biByZWdpb24gIGV0ZXJtSUNsYXNzQ29udGV4dAlmb2xkIHRyYW5zcGFyZW50ICBtYXRjaGdyb3VwPWV0ZXJtQ29udGV4dCBzdGFydD0iXlxzKmJlZ2luXHNcK2ltYWdlY2xhc3Nlc1xzKiQiIGVuZD0iXlxzKmVuZFw+XChcc1wrLlx7LTAsfVwpXD0kIiBjb250YWlucz1AZXRlcm1HZW5lcmFsLGV0ZXJtSW1hZ2VDb250ZXh0LGV0ZXJtSUNsYXNzT3B0aW9ucworCisiIG1lbnVpdGVtIGNvbnRleHQKK3N5biByZWdpb24gIGV0ZXJtTWVudUl0ZW1PcHRpb25zIGNvbnRhaW5lZCB0cmFuc3BhcmVudCBvbmVsaW5lIG1hdGNoZ3JvdXA9ZXRlcm1PcHRpb24gc3RhcnQ9Il5ccyphY3Rpb25cPiIgbWF0Y2hncm91cD1ldGVybVR5cGUgZW5kPSJcPHN0cmluZ1x8ZWNob1x8c3VibWVudVx8c2NyaXB0XHxzZXBhcmF0b3JcPiIKK3N5biBrZXl3b3JkIGV0ZXJtTWVudUl0ZW1PcHRpb25zIGNvbnRhaW5lZCB0ZXh0IHJ0ZXh0CisKK3N5biByZWdpb24gIGV0ZXJtTWVudUl0ZW1Db250ZXh0IGZvbGQgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1ldGVybUNvbnRleHQgc3RhcnQ9Il5ccypiZWdpblxzXCttZW51aXRlbVxzKiQiIGVuZD0iXlxzKmVuZFw+XChcc1wrLlx7LTAsfVwpXD0kIiBjb250YWlucz1AZXRlcm1HZW5lcmFsLGV0ZXJtTWVudUl0ZW1PcHRpb25zCisKKyIgbWVudSBjb250ZXh0IChzaG91bGQgY29udGFpbiAtIGFzIHdlbGwsIGJ1dCBuby4uLikKK3N5biBrZXl3b3JkIGV0ZXJtTWVudU9wdGlvbnMgICAgY29udGFpbmVkIHRpdGxlIGZvbnRfbmFtZSBzZXAKKworc3luIHJlZ2lvbiAgZXRlcm1NZW51Q29udGV4dCAgICBmb2xkIHRyYW5zcGFyZW50ICBtYXRjaGdyb3VwPWV0ZXJtQ29udGV4dCBzdGFydD0iXlxzKmJlZ2luXHNcK21lbnVccyokIiBlbmQ9Il5ccyplbmRcPlwoXHNcKy5cey0wLH1cKVw9JCIgY29udGFpbnM9QGV0ZXJtR2VuZXJhbCxldGVybU1lbnVPcHRpb25zLGV0ZXJtTWVudUl0ZW1Db250ZXh0CisKKyIgYWN0aW9uIGNvbnRleHQKK3N5biBtYXRjaCAgIGV0ZXJtQWN0aW9uRGVmCWNvbnRhaW5lZCAiXDxcKHRvXHxzdHJpbmdcfGVjaG9cfG1lbnVcfHNjcmlwdFwpXD4iCitzeW4gcmVnaW9uICBldGVybUFjdGlvbnNPcHRpb25zCWNvbnRhaW5lZCB0cmFuc3BhcmVudCBvbmVsaW5lIG1hdGNoZ3JvdXA9ZXRlcm1PcHRpb24gc3RhcnQ9Il5ccypiaW5kXD4iIGVuZD0iJCIgY29udGFpbnM9ZXRlcm1BY3Rpb25EZWYsZXRlcm1LZXlNb2QKKworc3luIHJlZ2lvbiAgZXRlcm1BY3Rpb25zQ29udGV4dAlmb2xkIHRyYW5zcGFyZW50ICBtYXRjaGdyb3VwPWV0ZXJtQ29udGV4dCBzdGFydD0iXlxzKmJlZ2luXHNcK2FjdGlvbnNccyokIiBlbmQ9Il5ccyplbmRcPlwoXHNcKy5cey0wLH1cKVw9JCIgY29udGFpbnM9QGV0ZXJtR2VuZXJhbCxldGVybUFjdGlvbnNPcHRpb25zCisKKyIgYnV0dG9uIGJhciBjb250ZXh0CitzeW4gbWF0Y2ggICBldGVybUJ1dHRvbkRlZgljb250YWluZWQgIlw8XChhY3Rpb25cfHN0cmluZ1x8ZWNob1x8bWVudVx8c2NydXB0XClcPiIKK3N5biByZWdpb24gIGV0ZXJtQnV0dG9uT3B0aW9ucwljb250YWluZWQgdHJhbnNwYXJlbnQgb25lbGluZSBtYXRjaGdyb3VwPWV0ZXJtT3B0aW9uIHN0YXJ0PSJeXHMqYnV0dG9uXD4iIGVuZD0iJCIgY29udGFpbnM9ZXRlcm1CdXR0b25EZWYKK3N5biBrZXl3b3JkIGV0ZXJtQnV0dG9uT3B0aW9ucwljb250YWluZWQgZm9udCB2aXNpYmxlIGRvY2sKKworc3luIHJlZ2lvbiAgZXRlcm1CdXR0b25Db250ZXh0CWZvbGQgdHJhbnNwYXJlbnQgIG1hdGNoZ3JvdXA9ZXRlcm1Db250ZXh0IHN0YXJ0PSJeXHMqYmVnaW5cc1wrYnV0dG9uX2JhclxzKiQiIGVuZD0iXlxzKmVuZFw+XChcc1wrLlx7LTAsfVwpXD0kIiBjb250YWlucz1AZXRlcm1HZW5lcmFsLGV0ZXJtQnV0dG9uT3B0aW9ucworCisiIG11bHRpY2hhciBjb250ZXh0CitzeW4ga2V5d29yZCBldGVybU11bHRpT3B0aW9ucwljb250YWluZWQgZW5jb2RpbmcgZm9udAorCitzeW4gcmVnaW9uICBldGVybU11bHRpQ29udGV4dAlmb2xkIHRyYW5zcGFyZW50ICBtYXRjaGdyb3VwPWV0ZXJtQ29udGV4dCBzdGFydD0iXlxzKmJlZ2luXHNcK211bHRpY2hhclxzKiQiIGVuZD0iXlxzKmVuZFw+XChcc1wrLlx7LTAsfVwpXD0kIiBjb250YWlucz1AZXRlcm1HZW5lcmFsLGV0ZXJtTXVsdGlPcHRpb25zCisKKyIgeGltIGNvbnRleHQKK3N5biBrZXl3b3JkIGV0ZXJtWGltT3B0aW9ucyAgICAgY29udGFpbmVkIGlucHV0X21ldGhvZCBwcmVlZGl0X3R5cGUKKworc3luIHJlZ2lvbiAgZXRlcm1YaW1Db250ZXh0CWZvbGQgdHJhbnNwYXJlbnQgIG1hdGNoZ3JvdXA9ZXRlcm1Db250ZXh0IHN0YXJ0PSJeXHMqYmVnaW5cc1wreGltXHMqJCIgZW5kPSJeXHMqZW5kXD5cKFxzXCsuXHstMCx9XClcPSQiIGNvbnRhaW5zPUBldGVybUdlbmVyYWwsZXRlcm1YaW1PcHRpb25zCisKKyIgdG9nZ2xlcyBjb250ZXh0CitzeW4ga2V5d29yZCBldGVybVRvZ09wdGlvbnMJY29udGFpbmVkIG1hcF9hbGVydCB2aXN1YWxfYmVsbCBsb2dpbl9zaGVsbCBzY3JvbGxiYXIgdXRtcF9sb2dnaW5nIG1ldGE4IGljb25pYyBub19pbnB1dAorc3luIGtleXdvcmQgZXRlcm1Ub2dPcHRpb25zCWNvbnRhaW5lZCBob21lX29uX291dHB1dCBob21lX29uX2lucHV0IHNjcm9sbGJhcl9mbG9hdGluZyBzY3JvbGxiYXJfcmlnaHQgc2Nyb2xsYmFyX3BvcHVwCitzeW4ga2V5d29yZCBldGVybVRvZ09wdGlvbnMJY29udGFpbmVkIGJvcmRlcmxlc3MgZG91YmxlX2J1ZmZlciBub19jdXJzb3IgcGF1c2UgeHRlcm1fc2VsZWN0IHNlbGVjdF9saW5lCitzeW4ga2V5d29yZCBldGVybVRvZ09wdGlvbnMJY29udGFpbmVkIHNlbGVjdF90cmFpbGluZ19zcGFjZXMgcmVwb3J0X2FzX2tleXN5bXMgaXRyYW5zIGltbW90aWxlX3RyYW5zIGJ1dHRvbmJhcgorc3luIGtleXdvcmQgZXRlcm1Ub2dPcHRpb25zCWNvbnRhaW5lZCByZXNpemVfZ3Jhdml0eQorCitzeW4gcmVnaW9uICBldGVybVRvZ0NvbnRleHQJZm9sZCB0cmFuc3BhcmVudCAgbWF0Y2hncm91cD1ldGVybUNvbnRleHQgc3RhcnQ9Il5ccypiZWdpblxzXCt0b2dnbGVzXHMqJCIgZW5kPSJeXHMqZW5kXD5cKFxzXCsuXHstMCx9XClcPSQiIGNvbnRhaW5zPUBldGVybUdlbmVyYWwsZXRlcm1Ub2dPcHRpb25zCisKKyIga2V5Ym9hcmQgY29udGV4dAorc3luIGtleXdvcmQgZXRlcm1LZXlib2FyZE9wdGlvbnMgY29udGFpbmVkIHNtYWxsZm9udF9rZXkgYmlnZm9udF9rZXkga2V5c3ltIG1ldGFfbW9kIGFsdF9tb2QKK3N5biBrZXl3b3JkIGV0ZXJtS2V5Ym9hcmRPcHRpb25zIGNvbnRhaW5lZCBncmVlayBudW1sb2NrX21vZCBhcHBfa2V5cGFkIGFwcF9jdXJzb3IKKworc3luIHJlZ2lvbiAgZXRlcm1LZXlib2FyZENvbnRleHQgZm9sZCB0cmFuc3BhcmVudCAgbWF0Y2hncm91cD1ldGVybUNvbnRleHQgc3RhcnQ9Il5ccypiZWdpblxzXCtrZXlib2FyZFxzKiQiIGVuZD0iXlxzKmVuZFw+XChcc1wrLlx7LTAsfVwpXD0kIiBjb250YWlucz1AZXRlcm1HZW5lcmFsLGV0ZXJtS2V5Ym9hcmRPcHRpb25zCisKKyIgbWlzYyBjb250ZXh0CitzeW4ga2V5d29yZCBldGVybU1pc2NPcHRpb25zCWNvbnRhaW5lZCBwcmludF9waXBlIHNhdmVfbGluZXMgY3V0X2NoYXJzIG1pbl9hbmNob3Jfc2l6ZQorc3luIGtleXdvcmQgZXRlcm1NaXNjT3B0aW9ucwljb250YWluZWQgYm9yZGVyX3dpZHRoIGxpbmVfc3BhY2UgZmluaXNoZWRfdGl0bGUgdGVybV9uYW1lCitzeW4ga2V5d29yZCBldGVybU1pc2NPcHRpb25zCWNvbnRhaW5lZCBmaW5pc2hlZF90ZXh0IGV4ZWMKKworc3luIHJlZ2lvbiAgZXRlcm1NaXNjQ29udGV4dAlmb2xkIHRyYW5zcGFyZW50ICBtYXRjaGdyb3VwPWV0ZXJtQ29udGV4dCBzdGFydD0iXlxzKmJlZ2luXHNcK21pc2NccyokIiBlbmQ9Il5ccyplbmRcPlwoXHNcKy5cey0wLH1cKVw9JCIgY29udGFpbnM9QGV0ZXJtR2VuZXJhbCxldGVybU1pc2NPcHRpb25zCisKK2lmIGV4aXN0cygiZXRlcm1fbWlubGluZXMiKQorICBsZXQgYjpldGVybV9taW5saW5lcyA9IGV0ZXJtX21pbmxpbmVzCitlbHNlCisgIGxldCBiOmV0ZXJtX21pbmxpbmVzID0gMzAKK2VuZGlmCitleGVjICJzeW4gc3luYyBtaW5saW5lcz0iIC4gYjpldGVybV9taW5saW5lcworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9ldGVybV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9ldGVybV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBldGVybU1hZ2ljCQlTcGVjaWFsCisgIEhpTGluayBldGVybUNvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGV0ZXJtVG9kbwkJVG9kbworICBIaUxpbmsgZXRlcm1OdW1iZXIJCU51bWJlcgorICBIaUxpbmsgZXRlcm1TdHJpbmcJCVN0cmluZworICBIaUxpbmsgZXRlcm1Cb29sZWFuCQlCb29sZWFuCisgIEhpTGluayBldGVybUNvbG9yCQlOdW1iZXIKKyAgSGlMaW5rIGV0ZXJtUHJlUHJvYwkJUHJlUHJvYworICBIaUxpbmsgZXRlcm1GdW5jdGlvbnMgICAgCUZ1bmN0aW9uCisgIEhpTGluayBldGVybUtleU1vZAkJU3BlY2lhbAorICBIaUxpbmsgZXRlcm1Db250ZXh0CQlLZXl3b3JkCisgIEhpTGluayBldGVybU9wdGlvbgkJS2V5d29yZAorICBIaUxpbmsgZXRlcm1UeXBlCQlUeXBlCisgIEhpTGluayBldGVybUNvbG9yT3B0aW9ucwlLZXl3b3JkCisgIEhpTGluayBldGVybUF0dHJPcHRpb25zCUtleXdvcmQKKyAgSGlMaW5rIGV0ZXJtSUNsYXNzT3B0aW9ucwlLZXl3b3JkCisgIEhpTGluayBldGVybUltYWdlVHlwZXMJVHlwZQorICBIaUxpbmsgZXRlcm1JbWFnZU1vZGVzCVR5cGUKKyAgSGlMaW5rIGV0ZXJtSW1hZ2VNb2Rlc0FsbG93CUtleXdvcmQKKyAgSGlMaW5rIGV0ZXJtSW1hZ2VPcHRpb25zCUtleXdvcmQKKyAgSGlMaW5rIGV0ZXJtTWVudU9wdGlvbnMJS2V5d29yZAorICBIaUxpbmsgZXRlcm1NZW51SXRlbU9wdGlvbnMJS2V5d29yZAorICBIaUxpbmsgZXRlcm1BY3Rpb25EZWYJVHlwZQorICBIaUxpbmsgZXRlcm1BY3Rpb25zT3B0aW9ucwlLZXl3b3JkCisgIEhpTGluayBldGVybUJ1dHRvbkRlZglUeXBlCisgIEhpTGluayBldGVybUJ1dHRvbk9wdGlvbnMJS2V5d29yZAorICBIaUxpbmsgZXRlcm1NdWx0aU9wdGlvbnMJS2V5d29yZAorICBIaUxpbmsgZXRlcm1YaW1PcHRpb25zCUtleXdvcmQKKyAgSGlMaW5rIGV0ZXJtVG9nT3B0aW9ucwlLZXl3b3JkCisgIEhpTGluayBldGVybUtleWJvYXJkT3B0aW9ucwlLZXl3b3JkCisgIEhpTGluayBldGVybU1pc2NPcHRpb25zCUtleXdvcmQKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImV0ZXJtIgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9leGltLnZpbSBiL3J1bnRpbWUvc3ludGF4L2V4aW0udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODA2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9leGltLnZpbQpAQCAtMCwwICsxLDExNyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgVGhpcyBpcyBhIEdFTkVSQVRFRCBGSUxFLiBQbGVhc2UgYWx3YXlzIHJlZmVyIHRvIHNvdXJjZSBmaWxlIGF0IHRoZSBVUkkgYmVsb3cuCisiIExhbmd1YWdlOiBFeGltIGNvbmZpZ3VyYXRpb24gZmlsZSBleGltLmNvbmYKKyIgTWFpbnRhaW5lcjogRGF2aWQgTmVcdntjfWFzIChZZXRpKSA8eWV0aUBwaHlzaWNzLm11bmkuY3o+CisiIExhc3QgQ2hhbmdlOiAyMDAyLTEwLTE1CisiIFVSTDogaHR0cDovL3RyaWZpYy5hdGguY3gvRnRwL3ZpbS9zeW50YXgvZXhpbS52aW0KKworIiBTZXR1cAoraWYgdmVyc2lvbiA+PSA2MDAKKwlpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCQlmaW5pc2gKKwllbmRpZgorZWxzZQorCXN5bnRheCBjbGVhcgorZW5kaWYKKworc3luIGNhc2UgbWF0Y2gKKworIiBCYXNlIGNvbnN0cnVjdHMKK3N5biBtYXRjaCBleGltQ29tbWVudCAiXlxzKiMuKiQiIGNvbnRhaW5zPWV4aW1GaXhtZQorc3luIG1hdGNoIGV4aW1Db21tZW50ICJccyMuKiQiIGNvbnRhaW5zPWV4aW1GaXhtZQorc3luIGtleXdvcmQgZXhpbUZpeG1lIEZJWE1FIFRPRE8gWFhYIE5PVCBjb250YWluZWQKK3N5biBrZXl3b3JkIGV4aW1Db25zdGFudCB0cnVlIGZhbHNlIHllcyBubworc3luIG1hdGNoIGV4aW1OdW1iZXIgIlw8XGRcK1tLTV1cP1w+Igorc3luIG1hdGNoIGV4aW1OdW1iZXIgIlw8MFt4WF1ceFwrXD4iCitzeW4gbWF0Y2ggZXhpbU51bWJlciAiXDxcZFwrXChcLlxkXHssM31cKVw/XD4iCitzeW4gbWF0Y2ggZXhpbVRpbWUgIlw8XChcZFwrW3dkaG1zXVwpXCtcPiIKK3N5biBtYXRjaCBleGltU3BlY2lhbENoYXIgIlxcW1xcbnJ0XVx8XFxcb1x7MSwzfVx8XFx4XHhcezEsMn0iCitzeW4gcmVnaW9uIGV4aW1NYWNyb0RlZmluaXRpb24gbWF0Y2hncm91cD1leGltTWFjcm9OYW1lIHN0YXJ0PSJeW0EtWl1caSpccyo9IiBlbmQ9IiQiIHNraXA9IlxcXHMqJCIgdHJhbnNwYXJlbnQKKworc3luIG1hdGNoIGV4aW1Ecml2ZXJOYW1lICJcPFwoYWxpYXNmaWxlXHxhcHBlbmRmaWxlXHxhdXRvcmVwbHlcfGRvbWFpbmxpc3RcfGZvcndhcmRmaWxlXHxpcGxpdGVyYWxcfGlwbG9va3VwXHxsbXRwXHxsb2NhbHVzZXJcfGxvb2t1cGhvc3RcfHBpcGVcfHF1ZXJ5cHJvZ3JhbVx8c21hcnR1c2VyXHxzbXRwXClcPiIKK3N5biBtYXRjaCBleGltVHJhbnNwb3J0ICJeXHMqXGlcKzoiCisKKyIgT3B0aW9ucworc3luIGtleXdvcmQgZXhpbUVuZCBlbmQKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIGFjY2VwdF84Yml0bWltZSBhY2NlcHRfdGltZW91dCBhZG1pbl9ncm91cHMgYWxsb3dfbXhfdG9faXAgYWx3YXlzX2JjYyBhdXRoX2Fsd2F5c19hZHZlcnRpc2UgYXV0aF9ob3N0cyBhdXRoX292ZXJfdGxzX2hvc3RzIGF1dG9fdGhhdyBiaV9jb21tYW5kIGNoZWNrX2xvZ19pbm9kZXMgY2hlY2tfbG9nX3NwYWNlIGNoZWNrX3Nwb29sX2lub2RlcyBjaGVja19zcG9vbF9zcGFjZSBjb2xsYXBzZV9zb3VyY2Vfcm91dGVzIGRhZW1vbl9zbXRwX3BvcnQgZGFlbW9uX3NtdHBfc2VydmljZSBkZWJ1Z19sZXZlbCBkZWxheV93YXJuaW5nIGRlbGF5X3dhcm5pbmdfY29uZGl0aW9uIGRlbGl2ZXJfbG9hZF9tYXggZGVsaXZlcl9xdWV1ZV9sb2FkX21heCBkZWxpdmVyeV9kYXRlX3JlbW92ZSBkbnNfYWdhaW5fbWVhbnNfbm9uZXhpc3QgZG5zX2NoZWNrX25hbWVzIGRuc19jaGVja19uYW1lc19wYXR0ZXJuIGRuc19yZXRyYW5zIGRuc19pcHY0X2xvb2t1cCBkbnNfcmV0cnkgZW52ZWxvcGVfdG9fcmVtb3ZlIGVycm1zZ190ZXh0IGVycm1zZ19maWxlIGVycm9yc19hZGRyZXNzIGVycm9yc19jb3B5IGVycm9yc19yZXBseV90byBleGltX2dyb3VwIGV4aW1fcGF0aCBleGltX3VzZXIgZXh0cmFjdF9hZGRyZXNzZXNfcmVtb3ZlX2FyZ3VtZW50cyBmaW5kdXNlcl9yZXRyaWVzIGZvcmJpZF9kb21haW5fbGl0ZXJhbHMgZnJlZXplX3RlbGxfbWFpbG1hc3RlciBnZWNvc19uYW1lIGdlY29zX3BhdHRlcm4gaGVhZGVyc19jaGVja19zeW50YXggaGVhZGVyc19jaGVja3NfZmFpbCBoZWFkZXJzX3NlbmRlcl92ZXJpZnkgaGVhZGVyc19zZW5kZXJfdmVyaWZ5X2Vycm1zZyBoZWxvX2FjY2VwdF9qdW5rX2hvc3RzIGhlbG9fc3RyaWN0X3N5bnRheCBoZWxvX3ZlcmlmeSBob2xkX2RvbWFpbnMgaG9zdF9hY2NlcHRfcmVsYXkgaG9zdF9hdXRoX2FjY2VwdF9yZWxheSBob3N0X2xvb2t1cCBob3N0X3JlamVjdCBob3N0X3JlamVjdF9yZWNpcGllbnRzIGhvc3RzX3RyZWF0X2FzX2xvY2FsIGlnbm9yZV9lcnJtc2dfZXJyb3JzIGlnbm9yZV9lcnJtc2dfZXJyb3JzX2FmdGVyIGlnbm9yZV9mcm9tbGluZV9ob3N0cyBpZ25vcmVfZnJvbWxpbmVfbG9jYWwga2VlcF9tYWxmb3JtZWQga2lsbF9pcF9vcHRpb25zIGxkYXBfZGVmYXVsdF9zZXJ2ZXJzIGxvY2FsX2RvbWFpbnMgbG9jYWxfZG9tYWluc19pbmNsdWRlX2hvc3QgbG9jYWxfZG9tYWluc19pbmNsdWRlX2hvc3RfbGl0ZXJhbHMgbG9jYWxfZnJvbV9jaGVjayBsb2NhbF9mcm9tX3ByZWZpeCBsb2NhbF9mcm9tX3N1ZmZpeCBsb2NhbF9pbnRlcmZhY2VzIGxvY2FsaG9zdF9udW1iZXIgbG9jYWxseV9jYXNlbGVzcyBsb2dfYWxsX3BhcmVudHMgbG9nX2FyZ3VtZW50cyBsb2dfZmlsZV9wYXRoIGxvZ19pbmNvbWluZ19wb3J0IGxvZ19pcF9vcHRpb25zIGxvZ19sZXZlbCBsb2dfcXVldWVfcnVuX2xldmVsIGxvZ19yZWNlaXZlZF9yZWNpcGllbnRzIGxvZ19yZWNlaXZlZF9zZW5kZXIgbG9nX3JlZnVzZWRfcmVjaXBpZW50cyBsb2dfcmV3cml0ZXMgbG9nX3NlbmRlcl9vbl9kZWxpdmVyeSBsb2dfc210cF9jb25maXJtYXRpb24gbG9nX3NtdHBfY29ubmVjdGlvbnMgbG9nX3NtdHBfc3ludGF4X2Vycm9ycyBsb2dfc3ViamVjdCBsb29rdXBfb3Blbl9tYXggbWF4X3VzZXJuYW1lX2xlbmd0aCBtZXNzYWdlX2JvZHlfdmlzaWJsZSBtZXNzYWdlX2ZpbHRlciBtZXNzYWdlX2ZpbHRlcl9kaXJlY3RvcnlfdHJhbnNwb3J0IG1lc3NhZ2VfZmlsdGVyX2RpcmVjdG9yeTJfdHJhbnNwb3J0IG1lc3NhZ2VfZmlsdGVyX2ZpbGVfdHJhbnNwb3J0IG1lc3NhZ2VfZmlsdGVyX2dyb3VwIG1lc3NhZ2VfZmlsdGVyX3BpcGVfdHJhbnNwb3J0IG1lc3NhZ2VfZmlsdGVyX3JlcGx5X3RyYW5zcG9ydCBtZXNzYWdlX2ZpbHRlcl91c2VyIG1lc3NhZ2VfaWRfaGVhZGVyX3RleHQgbWVzc2FnZV9zaXplX2xpbWl0IG1lc3NhZ2Vfc2l6ZV9saW1pdF9jb3VudF9yZWNpcGllbnRzIG1vdmVfZnJvemVuX21lc3NhZ2VzIG15c3FsX3NlcnZlcnMgbmV2ZXJfdXNlcnMgbm9ib2R5X2dyb3VwIG5vYm9keV91c2VyIHBlcmNlbnRfaGFja19kb21haW5zIHBlcmxfYXRfc3RhcnQgcGVybF9zdGFydHVwIHBnc3FsX3NlcnZlcnMgcGlkX2ZpbGVfcGF0aCBwcmVzZXJ2ZV9tZXNzYWdlX2xvZ3MgcHJpbWFyeV9ob3N0bmFtZSBwcmludF90b3BiaXRjaGFycyBwcm9kX3JlcXVpcmVzX2FkbWluIHByb2hpYml0aW9uX21lc3NhZ2UgcXVhbGlmeV9kb21haW4gcXVhbGlmeV9yZWNpcGllbnQgcXVldWVfbGlzdF9yZXF1aXJlc19hZG1pbiBxdWV1ZV9vbmx5IHF1ZXVlX29ubHlfZmlsZSBxdWV1ZV9vbmx5X2xvYWQgcXVldWVfcmVtb3RlX2RvbWFpbnMgcXVldWVfcnVuX2luX29yZGVyIHF1ZXVlX3J1bl9tYXggcXVldWVfc210cF9kb21haW5zIHJibF9kb21haW5zIHJibF9ob3N0cyByYmxfbG9nX2hlYWRlcnMgcmJsX2xvZ19yY3B0X2NvdW50IHJibF9yZWplY3RfcmVjaXBpZW50cyByYmxfd2Fybl9oZWFkZXIgcmVjZWl2ZWRfaGVhZGVyX3RleHQgcmVjZWl2ZWRfaGVhZGVyc19tYXggcmVjZWl2ZXJfdHJ5X3ZlcmlmeSByZWNlaXZlcl91bnF1YWxpZmllZF9ob3N0cyByZWNlaXZlcl92ZXJpZnkgcmVjZWl2ZXJfdmVyaWZ5X2FkZHJlc3NlcyByZWNlaXZlcl92ZXJpZnlfaG9zdHMgcmVjZWl2ZXJfdmVyaWZ5X3NlbmRlcnMgcmVjaXBpZW50c19tYXggcmVjaXBpZW50c19tYXhfcmVqZWN0IHJlY2lwaWVudHNfcmVqZWN0X2V4Y2VwdCByZWNpcGllbnRzX3JlamVjdF9leGNlcHRfc2VuZGVycyByZWZ1c2VfaXBfb3B0aW9ucyByZWxheV9kb21haW5zIHJlbGF5X2RvbWFpbnNfaW5jbHVkZV9sb2NhbF9teCByZWxheV9tYXRjaF9ob3N0X29yX3NlbmRlciByZW1vdGVfbWF4X3BhcmFsbGVsIHJlbW90ZV9zb3J0IHJldHJ5X2RhdGFfZXhwaXJlIHJldHJ5X2ludGVydmFsX21heCByZXR1cm5fcGF0aF9yZW1vdmUgcmV0dXJuX3NpemVfbGltaXQgcmZjMTQxM19ob3N0cyByZmMxNDEzX3F1ZXJ5X3RpbWVvdXQgc2VjdXJpdHkgc2VuZGVyX2FkZHJlc3NfcmVsYXkgc2VuZGVyX2FkZHJlc3NfcmVsYXlfaG9zdHMgc2VuZGVyX3JlamVjdCBzZW5kZXJfcmVqZWN0X3JlY2lwaWVudHMgc2VuZGVyX3RyeV92ZXJpZnkgc2VuZGVyX3VucXVhbGlmaWVkX2hvc3RzIHNlbmRlcl92ZXJpZnkgc2VuZGVyX3ZlcmlmeV9iYXRjaCBzZW5kZXJfdmVyaWZ5X2NhbGxiYWNrX2RvbWFpbnMgc2VuZGVyX3ZlcmlmeV9jYWxsYmFja190aW1lb3V0IHNlbmRlcl92ZXJpZnlfZml4dXAgc2VuZGVyX3ZlcmlmeV9ob3N0cyBzZW5kZXJfdmVyaWZ5X2hvc3RzX2NhbGxiYWNrIHNlbmRlcl92ZXJpZnlfbWF4X3JldHJ5X3JhdGUgc2VuZGVyX3ZlcmlmeV9yZWplY3Qgc210cF9hY2NlcHRfa2VlcGFsaXZlIHNtdHBfYWNjZXB0X21heCBzbXRwX2FjY2VwdF9tYXhfcGVyX2hvc3Qgc210cF9hY2NlcHRfcXVldWUgc210cF9hY2NlcHRfcXVldWVfcGVyX2Nvbm5lY3Rpb24gc210cF9hY2NlcHRfcmVzZXJ2ZSBzbXRwX2Jhbm5lciBzbXRwX2NoZWNrX3Nwb29sX3NwYWNlIHNtdHBfY29ubmVjdF9iYWNrbG9nIHNtdHBfZXRybl9jb21tYW5kIHNtdHBfZXRybl9ob3N0cyBzbXRwX2V0cm5fc2VyaWFsaXplIHNtdHBfZXhwbl9ob3N0cyBzbXRwX2xvYWRfcmVzZXJ2ZSBzbXRwX3JlY2VpdmVfdGltZW91dCBzbXRwX3Jlc2VydmVfaG9zdHMgc210cF92ZXJpZnkgc3BsaXRfc3Bvb2xfZGlyZWN0b3J5IHNwb29sX2RpcmVjdG9yeSBzdHJpcF9leGNlc3NfYW5nbGVfYnJhY2tldHMgc3RyaXBfdHJhaWxpbmdfZG90IHN5c2xvZ190aW1lc3RhbXAgdGltZW91dF9mcm96ZW5fYWZ0ZXIgdGltZXN0YW1wc191dGMgdGltZXpvbmUgdGxzX2FkdmVydGlzZV9ob3N0cyB0bHNfY2VydGlmaWNhdGUgdGxzX2RocGFyYW0gdGxzX2hvc3RfYWNjZXB0X3JlbGF5IHRsc19ob3N0cyB0bHNfbG9nX2NpcGhlciB0bHNfbG9nX3BlZXJkbiB0bHNfcHJpdmF0ZWtleSB0bHNfdmVyaWZ5X2NlcnRpZmljYXRlcyB0bHNfdmVyaWZ5X2NpcGhlcnMgdGxzX3ZlcmlmeV9ob3N0cyB0cnVzdGVkX2dyb3VwcyB0cnVzdGVkX3VzZXJzIHVua25vd25fbG9naW4gdW5rbm93bl91c2VybmFtZSB1bnRydXN0ZWRfc2V0X3NlbmRlciB1dWNwX2Zyb21fcGF0dGVybiB1dWNwX2Zyb21fc2VuZGVyIHdhcm5tc2dfZmlsZQorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm9fYWNjZXB0XzhiaXRtaW1lIG5vX2FsbG93X214X3RvX2lwIG5vX2Fsd2F5c19iY2Mgbm9fYXV0aF9hbHdheXNfYWR2ZXJ0aXNlIG5vX2NvbGxhcHNlX3NvdXJjZV9yb3V0ZXMgbm9fZGVsaXZlcnlfZGF0ZV9yZW1vdmUgbm9fZG5zX2NoZWNrX25hbWVzIG5vX2VudmVsb3BlX3RvX3JlbW92ZSBub19leHRyYWN0X2FkZHJlc3Nlc19yZW1vdmVfYXJndW1lbnRzIG5vX2ZvcmJpZF9kb21haW5fbGl0ZXJhbHMgbm9fZnJlZXplX3RlbGxfbWFpbG1hc3RlciBub19oZWFkZXJzX2NoZWNrX3N5bnRheCBub19oZWFkZXJzX2NoZWNrc19mYWlsIG5vX2hlYWRlcnNfc2VuZGVyX3ZlcmlmeSBub19oZWFkZXJzX3NlbmRlcl92ZXJpZnlfZXJybXNnIG5vX2hlbG9fc3RyaWN0X3N5bnRheCBub19pZ25vcmVfZXJybXNnX2Vycm9ycyBub19pZ25vcmVfZnJvbWxpbmVfbG9jYWwgbm9fa2lsbF9pcF9vcHRpb25zIG5vX2xvY2FsX2RvbWFpbnNfaW5jbHVkZV9ob3N0IG5vX2xvY2FsX2RvbWFpbnNfaW5jbHVkZV9ob3N0X2xpdGVyYWxzIG5vX2xvY2FsX2Zyb21fY2hlY2sgbm9fbG9jYWxseV9jYXNlbGVzcyBub19sb2dfYWxsX3BhcmVudHMgbm9fbG9nX2FyZ3VtZW50cyBub19sb2dfaW5jb21pbmdfcG9ydCBub19sb2dfaXBfb3B0aW9ucyBub19sb2dfcmVjZWl2ZWRfcmVjaXBpZW50cyBub19sb2dfcmVjZWl2ZWRfc2VuZGVyIG5vX2xvZ19yZWZ1c2VkX3JlY2lwaWVudHMgbm9fbG9nX3Jld3JpdGVzIG5vX2xvZ19zZW5kZXJfb25fZGVsaXZlcnkgbm9fbG9nX3NtdHBfY29uZmlybWF0aW9uIG5vX2xvZ19zbXRwX2Nvbm5lY3Rpb25zIG5vX2xvZ19zbXRwX3N5bnRheF9lcnJvcnMgbm9fbG9nX3N1YmplY3Qgbm9fbWVzc2FnZV9zaXplX2xpbWl0X2NvdW50X3JlY2lwaWVudHMgbm9fbW92ZV9mcm96ZW5fbWVzc2FnZXMgbm9fcHJlc2VydmVfbWVzc2FnZV9sb2dzIG5vX3ByaW50X3RvcGJpdGNoYXJzIG5vX3Byb2RfcmVxdWlyZXNfYWRtaW4gbm9fcXVldWVfbGlzdF9yZXF1aXJlc19hZG1pbiBub19xdWV1ZV9vbmx5IG5vX3JibF9sb2dfaGVhZGVycyBub19yYmxfbG9nX3JjcHRfY291bnQgbm9fcmJsX3JlamVjdF9yZWNpcGllbnRzIG5vX3JlY2VpdmVyX3RyeV92ZXJpZnkgbm9fcmVjZWl2ZXJfdmVyaWZ5IG5vX3JlY2lwaWVudHNfbWF4X3JlamVjdCBub19yZWZ1c2VfaXBfb3B0aW9ucyBub19yZWxheV9kb21haW5zX2luY2x1ZGVfbG9jYWxfbXggbm9fcmVsYXlfbWF0Y2hfaG9zdF9vcl9zZW5kZXIgbm9fcmV0dXJuX3BhdGhfcmVtb3ZlIG5vX3NlbmRlcl90cnlfdmVyaWZ5IG5vX3NlbmRlcl92ZXJpZnkgbm9fc2VuZGVyX3ZlcmlmeV9iYXRjaCBub19zZW5kZXJfdmVyaWZ5X2ZpeHVwIG5vX3NlbmRlcl92ZXJpZnlfcmVqZWN0IG5vX3NtdHBfYWNjZXB0X2tlZXBhbGl2ZSBub19zbXRwX2NoZWNrX3Nwb29sX3NwYWNlIG5vX3NtdHBfZXRybl9zZXJpYWxpemUgbm9fc210cF92ZXJpZnkgbm9fc3BsaXRfc3Bvb2xfZGlyZWN0b3J5IG5vX3N0cmlwX2V4Y2Vzc19hbmdsZV9icmFja2V0cyBub19zdHJpcF90cmFpbGluZ19kb3Qgbm9fc3lzbG9nX3RpbWVzdGFtcCBub190aW1lc3RhbXBzX3V0YyBub190bHNfbG9nX2NpcGhlciBub190bHNfbG9nX3BlZXJkbiBub191bnRydXN0ZWRfc2V0X3NlbmRlcgorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm90X2FjY2VwdF84Yml0bWltZSBub3RfYWxsb3dfbXhfdG9faXAgbm90X2Fsd2F5c19iY2Mgbm90X2F1dGhfYWx3YXlzX2FkdmVydGlzZSBub3RfY29sbGFwc2Vfc291cmNlX3JvdXRlcyBub3RfZGVsaXZlcnlfZGF0ZV9yZW1vdmUgbm90X2Ruc19jaGVja19uYW1lcyBub3RfZW52ZWxvcGVfdG9fcmVtb3ZlIG5vdF9leHRyYWN0X2FkZHJlc3Nlc19yZW1vdmVfYXJndW1lbnRzIG5vdF9mb3JiaWRfZG9tYWluX2xpdGVyYWxzIG5vdF9mcmVlemVfdGVsbF9tYWlsbWFzdGVyIG5vdF9oZWFkZXJzX2NoZWNrX3N5bnRheCBub3RfaGVhZGVyc19jaGVja3NfZmFpbCBub3RfaGVhZGVyc19zZW5kZXJfdmVyaWZ5IG5vdF9oZWFkZXJzX3NlbmRlcl92ZXJpZnlfZXJybXNnIG5vdF9oZWxvX3N0cmljdF9zeW50YXggbm90X2lnbm9yZV9lcnJtc2dfZXJyb3JzIG5vdF9pZ25vcmVfZnJvbWxpbmVfbG9jYWwgbm90X2tpbGxfaXBfb3B0aW9ucyBub3RfbG9jYWxfZG9tYWluc19pbmNsdWRlX2hvc3Qgbm90X2xvY2FsX2RvbWFpbnNfaW5jbHVkZV9ob3N0X2xpdGVyYWxzIG5vdF9sb2NhbF9mcm9tX2NoZWNrIG5vdF9sb2NhbGx5X2Nhc2VsZXNzIG5vdF9sb2dfYWxsX3BhcmVudHMgbm90X2xvZ19hcmd1bWVudHMgbm90X2xvZ19pbmNvbWluZ19wb3J0IG5vdF9sb2dfaXBfb3B0aW9ucyBub3RfbG9nX3JlY2VpdmVkX3JlY2lwaWVudHMgbm90X2xvZ19yZWNlaXZlZF9zZW5kZXIgbm90X2xvZ19yZWZ1c2VkX3JlY2lwaWVudHMgbm90X2xvZ19yZXdyaXRlcyBub3RfbG9nX3NlbmRlcl9vbl9kZWxpdmVyeSBub3RfbG9nX3NtdHBfY29uZmlybWF0aW9uIG5vdF9sb2dfc210cF9jb25uZWN0aW9ucyBub3RfbG9nX3NtdHBfc3ludGF4X2Vycm9ycyBub3RfbG9nX3N1YmplY3Qgbm90X21lc3NhZ2Vfc2l6ZV9saW1pdF9jb3VudF9yZWNpcGllbnRzIG5vdF9tb3ZlX2Zyb3plbl9tZXNzYWdlcyBub3RfcHJlc2VydmVfbWVzc2FnZV9sb2dzIG5vdF9wcmludF90b3BiaXRjaGFycyBub3RfcHJvZF9yZXF1aXJlc19hZG1pbiBub3RfcXVldWVfbGlzdF9yZXF1aXJlc19hZG1pbiBub3RfcXVldWVfb25seSBub3RfcmJsX2xvZ19oZWFkZXJzIG5vdF9yYmxfbG9nX3JjcHRfY291bnQgbm90X3JibF9yZWplY3RfcmVjaXBpZW50cyBub3RfcmVjZWl2ZXJfdHJ5X3ZlcmlmeSBub3RfcmVjZWl2ZXJfdmVyaWZ5IG5vdF9yZWNpcGllbnRzX21heF9yZWplY3Qgbm90X3JlZnVzZV9pcF9vcHRpb25zIG5vdF9yZWxheV9kb21haW5zX2luY2x1ZGVfbG9jYWxfbXggbm90X3JlbGF5X21hdGNoX2hvc3Rfb3Jfc2VuZGVyIG5vdF9yZXR1cm5fcGF0aF9yZW1vdmUgbm90X3NlbmRlcl90cnlfdmVyaWZ5IG5vdF9zZW5kZXJfdmVyaWZ5IG5vdF9zZW5kZXJfdmVyaWZ5X2JhdGNoIG5vdF9zZW5kZXJfdmVyaWZ5X2ZpeHVwIG5vdF9zZW5kZXJfdmVyaWZ5X3JlamVjdCBub3Rfc210cF9hY2NlcHRfa2VlcGFsaXZlIG5vdF9zbXRwX2NoZWNrX3Nwb29sX3NwYWNlIG5vdF9zbXRwX2V0cm5fc2VyaWFsaXplIG5vdF9zbXRwX3ZlcmlmeSBub3Rfc3BsaXRfc3Bvb2xfZGlyZWN0b3J5IG5vdF9zdHJpcF9leGNlc3NfYW5nbGVfYnJhY2tldHMgbm90X3N0cmlwX3RyYWlsaW5nX2RvdCBub3Rfc3lzbG9nX3RpbWVzdGFtcCBub3RfdGltZXN0YW1wc191dGMgbm90X3Rsc19sb2dfY2lwaGVyIG5vdF90bHNfbG9nX3BlZXJkbiBub3RfdW50cnVzdGVkX3NldF9zZW5kZXIKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIGJvZHlfb25seSBkZWJ1Z19wcmludCBkZWxpdmVyeV9kYXRlX2FkZCBkcml2ZXIgZW52ZWxvcGVfdG9fYWRkIGhlYWRlcnNfYWRkIGhlYWRlcnNfb25seSBoZWFkZXJzX3JlbW92ZSBoZWFkZXJzX3Jld3JpdGUgbWVzc2FnZV9zaXplX2xpbWl0IHJldHVybl9wYXRoIHJldHVybl9wYXRoX2FkZCBzaGFkb3dfY29uZGl0aW9uIHNoYWRvd190cmFuc3BvcnQgdHJhbnNwb3J0X2ZpbHRlcgorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm9fYm9keV9vbmx5IG5vX2RlbGl2ZXJ5X2RhdGVfYWRkIG5vX2VudmVsb3BlX3RvX2FkZCBub19oZWFkZXJzX29ubHkgbm9fcmV0dXJuX3BhdGhfYWRkCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBub3RfYm9keV9vbmx5IG5vdF9kZWxpdmVyeV9kYXRlX2FkZCBub3RfZW52ZWxvcGVfdG9fYWRkIG5vdF9oZWFkZXJzX29ubHkgbm90X3JldHVybl9wYXRoX2FkZAorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgYWxsb3dfZmlmbyBhbGxvd19zeW1saW5rIGJhdGNoIGJhdGNoX21heCBic210cCBic210cF9oZWxvIGNoZWNrX2dyb3VwIGNoZWNrX293bmVyIGNoZWNrX3N0cmluZyBjcmVhdGVfZGlyZWN0b3J5IGNyZWF0ZV9maWxlIGN1cnJlbnRfZGlyZWN0b3J5IGRpcmVjdG9yeSBkaXJlY3RvcnlfbW9kZSBlc2NhcGVfc3RyaW5nIGZpbGUgZmlsZV9mb3JtYXQgZmlsZV9tdXN0X2V4aXN0IGZyb21faGFjayBncm91cCBsb2NrX2ZjbnRsX3RpbWVvdXQgbG9ja19pbnRlcnZhbCBsb2NrX3JldHJpZXMgbG9ja2ZpbGVfbW9kZSBsb2NrZmlsZV90aW1lb3V0IG1haWxkaXJfZm9ybWF0IG1haWxkaXJfcmV0cmllcyBtYWlsZGlyX3RhZyBtYWlsc3RvcmVfZm9ybWF0IG1haWxzdG9yZV9wcmVmaXggbWFpbHN0b3JlX3N1ZmZpeCBtYnhfZm9ybWF0IG1vZGUgbW9kZV9mYWlsX25hcnJvd2VyIG5vdGlmeV9jb21zYXQgcHJlZml4IHF1b3RhIHF1b3RhX2ZpbGVjb3VudCBxdW90YV9pc19pbmNsdXNpdmUgcXVvdGFfc2l6ZV9yZWdleCBxdW90YV93YXJuX21lc3NhZ2UgcXVvdGFfd2Fybl90aHJlc2hvbGQgcmVxdWlyZV9sb2NrZmlsZSByZXRyeV91c2VfbG9jYWxfcGFydCBzdWZmaXggdXNlX2NybGYgdXNlX2ZjbnRsX2xvY2sgdXNlX2xvY2tmaWxlIHVzZV9tYnhfbG9jayB1c2VyCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBub19hbGxvd19maWZvIG5vX2FsbG93X3N5bWxpbmsgbm9fYnNtdHBfaGVsbyBub19jaGVja19ncm91cCBub19jaGVja19vd25lciBub19jcmVhdGVfZGlyZWN0b3J5IG5vX2ZpbGVfbXVzdF9leGlzdCBub19mcm9tX2hhY2sgbm9fbWFpbGRpcl9mb3JtYXQgbm9fbWFpbHN0b3JlX2Zvcm1hdCBub19tYnhfZm9ybWF0IG5vX21vZGVfZmFpbF9uYXJyb3dlciBub19ub3RpZnlfY29tc2F0IG5vX3F1b3RhX2lzX2luY2x1c2l2ZSBub19yZXF1aXJlX2xvY2tmaWxlIG5vX3JldHJ5X3VzZV9sb2NhbF9wYXJ0IG5vX3VzZV9jcmxmIG5vX3VzZV9mY250bF9sb2NrIG5vX3VzZV9sb2NrZmlsZSBub191c2VfbWJ4X2xvY2sKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vdF9hbGxvd19maWZvIG5vdF9hbGxvd19zeW1saW5rIG5vdF9ic210cF9oZWxvIG5vdF9jaGVja19ncm91cCBub3RfY2hlY2tfb3duZXIgbm90X2NyZWF0ZV9kaXJlY3Rvcnkgbm90X2ZpbGVfbXVzdF9leGlzdCBub3RfZnJvbV9oYWNrIG5vdF9tYWlsZGlyX2Zvcm1hdCBub3RfbWFpbHN0b3JlX2Zvcm1hdCBub3RfbWJ4X2Zvcm1hdCBub3RfbW9kZV9mYWlsX25hcnJvd2VyIG5vdF9ub3RpZnlfY29tc2F0IG5vdF9xdW90YV9pc19pbmNsdXNpdmUgbm90X3JlcXVpcmVfbG9ja2ZpbGUgbm90X3JldHJ5X3VzZV9sb2NhbF9wYXJ0IG5vdF91c2VfY3JsZiBub3RfdXNlX2ZjbnRsX2xvY2sgbm90X3VzZV9sb2NrZmlsZSBub3RfdXNlX21ieF9sb2NrCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBiY2MgY2MgZmlsZSBmaWxlX2V4cGFuZCBmaWxlX29wdGlvbmFsIGZyb20gZ3JvdXAgaGVhZGVycyBpbml0Z3JvdXBzIGxvZyBtb2RlIG9uY2Ugb25jZV9maWxlX3NpemUgb25jZV9yZXBlYXQgcmVwbHlfdG8gcmV0dXJuX21lc3NhZ2Ugc3ViamVjdCB0ZXh0IHRvIHVzZXIKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vX2ZpbGVfZXhwYW5kIG5vX2ZpbGVfb3B0aW9uYWwgbm9faW5pdGdyb3VwcyBub19yZXR1cm5fbWVzc2FnZQorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm90X2ZpbGVfZXhwYW5kIG5vdF9maWxlX29wdGlvbmFsIG5vdF9pbml0Z3JvdXBzIG5vdF9yZXR1cm5fbWVzc2FnZQorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgYmF0Y2ggYmF0Y2hfbWF4IGNvbW1hbmQgZ3JvdXAgaW5pdGdyb3VwcyByZXRyeV91c2VfbG9jYWxfcGFydCB0aW1lb3V0IHVzZXIKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vX2luaXRncm91cHMKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vdF9pbml0Z3JvdXBzCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBhbGxvd19jb21tYW5kcyBiYXRjaCBiYXRjaF9tYXggYnNtdHAgYnNtdHBfaGVsbyBjaGVja19zdHJpbmcgY29tbWFuZCBjdXJyZW50X2RpcmVjdG9yeSBlbnZpcm9ubWVudCBlc2NhcGVfc3RyaW5nIGZyZWV6ZV9leGVjX2ZhaWwgZnJvbV9oYWNrIGdyb3VwIGhvbWVfZGlyZWN0b3J5IGlnbm9yZV9zdGF0dXMgaW5pdGdyb3VwcyBsb2dfZGVmZXJfb3V0cHV0IGxvZ19mYWlsX291dHB1dCBsb2dfb3V0cHV0IG1heF9vdXRwdXQgcGF0aCBwaXBlX2FzX2NyZWF0b3IgcHJlZml4IHJlc3RyaWN0X3RvX3BhdGggcmV0cnlfdXNlX2xvY2FsX3BhcnQgcmV0dXJuX2ZhaWxfb3V0cHV0IHJldHVybl9vdXRwdXQgc3VmZml4IHRlbXBfZXJyb3JzIHRpbWVvdXQgdW1hc2sgdXNlX2NybGYgdXNlX3NoZWxsIHVzZXIKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vX2JzbXRwX2hlbG8gbm9fZnJlZXplX2V4ZWNfZmFpbCBub19mcm9tX2hhY2sgbm9faWdub3JlX3N0YXR1cyBub19sb2dfZGVmZXJfb3V0cHV0IG5vX2xvZ19mYWlsX291dHB1dCBub19sb2dfb3V0cHV0IG5vX3BpcGVfYXNfY3JlYXRvciBub19yZXN0cmljdF90b19wYXRoIG5vX3JldHVybl9mYWlsX291dHB1dCBub19yZXR1cm5fb3V0cHV0IG5vX3VzZV9jcmxmIG5vX3VzZV9zaGVsbAorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm90X2JzbXRwX2hlbG8gbm90X2ZyZWV6ZV9leGVjX2ZhaWwgbm90X2Zyb21faGFjayBub3RfaWdub3JlX3N0YXR1cyBub3RfbG9nX2RlZmVyX291dHB1dCBub3RfbG9nX2ZhaWxfb3V0cHV0IG5vdF9sb2dfb3V0cHV0IG5vdF9waXBlX2FzX2NyZWF0b3Igbm90X3Jlc3RyaWN0X3RvX3BhdGggbm90X3JldHVybl9mYWlsX291dHB1dCBub3RfcmV0dXJuX291dHB1dCBub3RfdXNlX2NybGYgbm90X3VzZV9zaGVsbAorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgYWxsb3dfbG9jYWxob3N0IGF1dGhlbnRpY2F0ZV9ob3N0cyBiYXRjaF9tYXggY29tbWFuZF90aW1lb3V0IGNvbm5lY3RfdGltZW91dCBkYXRhX3RpbWVvdXQgZGVsYXlfYWZ0ZXJfY3V0b2ZmIGRuc19xdWFsaWZ5X3NpbmdsZSBkbnNfc2VhcmNoX3BhcmVudHMgZmFsbGJhY2tfaG9zdHMgZmluYWxfdGltZW91dCBnZXRob3N0YnluYW1lIGhlbG9fZGF0YSBob3N0cyBob3N0c19hdm9pZF90bHMgaG9zdHNfcmVxdWlyZV90bHMgaG9zdHNfb3ZlcnJpZGUgaG9zdHNfbWF4X3RyeSBob3N0c19yYW5kb21pemUgaW50ZXJmYWNlIGtlZXBhbGl2ZSBtYXhfcmNwdCBtdWx0aV9kb21haW4gbXhfZG9tYWlucyBwb3J0IHByb3RvY29sIHJldHJ5X2luY2x1ZGVfaXBfYWRkcmVzcyBzZXJpYWxpemVfaG9zdHMgc2VydmljZSBzaXplX2FkZGl0aW9uIHRsc19jZXJ0aWZpY2F0ZSB0bHNfcHJpdmF0ZWtleSB0bHNfdmVyaWZ5X2NlcnRpZmljYXRlcyB0bHNfdmVyaWZ5X2NpcGhlcnMKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vX2FsbG93X2xvY2FsaG9zdCBub19kZWxheV9hZnRlcl9jdXRvZmYgbm9fZG5zX3F1YWxpZnlfc2luZ2xlIG5vX2Ruc19zZWFyY2hfcGFyZW50cyBub19nZXRob3N0YnluYW1lIG5vX2hvc3RzX292ZXJyaWRlIG5vX2hvc3RzX3JhbmRvbWl6ZSBub19rZWVwYWxpdmUgbm9fbXVsdGlfZG9tYWluIG5vX3JldHJ5X2luY2x1ZGVfaXBfYWRkcmVzcworc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm90X2FsbG93X2xvY2FsaG9zdCBub3RfZGVsYXlfYWZ0ZXJfY3V0b2ZmIG5vdF9kbnNfcXVhbGlmeV9zaW5nbGUgbm90X2Ruc19zZWFyY2hfcGFyZW50cyBub3RfZ2V0aG9zdGJ5bmFtZSBub3RfaG9zdHNfb3ZlcnJpZGUgbm90X2hvc3RzX3JhbmRvbWl6ZSBub3Rfa2VlcGFsaXZlIG5vdF9tdWx0aV9kb21haW4gbm90X3JldHJ5X2luY2x1ZGVfaXBfYWRkcmVzcworc3luIGtleXdvcmQgZXhpbUtleXdvcmQgY29uZGl0aW9uIGRlYnVnX3ByaW50IGRvbWFpbnMgZHJpdmVyIGVycm9yc190byBmYWlsX3ZlcmlmeSBmYWlsX3ZlcmlmeV9yZWNpcGllbnQgZmFpbF92ZXJpZnlfc2VuZGVyIGZhbGxiYWNrX2hvc3RzIGdyb3VwIGhlYWRlcnNfYWRkIGhlYWRlcnNfcmVtb3ZlIGluaXRncm91cHMgbG9jYWxfcGFydHMgbW9yZSByZXF1aXJlX2ZpbGVzIHNlbmRlcnMgdHJhbnNwb3J0IHVuc2VlbiB1c2VyIHZlcmlmeSB2ZXJpZnlfb25seSB2ZXJpZnlfcmVjaXBpZW50IHZlcmlmeV9zZW5kZXIKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vX2ZhaWxfdmVyaWZ5IG5vX2ZhaWxfdmVyaWZ5X3JlY2lwaWVudCBub19mYWlsX3ZlcmlmeV9zZW5kZXIgbm9faW5pdGdyb3VwcyBub19tb3JlIG5vX3Vuc2VlbiBub192ZXJpZnkgbm9fdmVyaWZ5X29ubHkgbm9fdmVyaWZ5X3JlY2lwaWVudCBub192ZXJpZnlfc2VuZGVyCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBub3RfZmFpbF92ZXJpZnkgbm90X2ZhaWxfdmVyaWZ5X3JlY2lwaWVudCBub3RfZmFpbF92ZXJpZnlfc2VuZGVyIG5vdF9pbml0Z3JvdXBzIG5vdF9tb3JlIG5vdF91bnNlZW4gbm90X3ZlcmlmeSBub3RfdmVyaWZ5X29ubHkgbm90X3ZlcmlmeV9yZWNpcGllbnQgbm90X3ZlcmlmeV9zZW5kZXIKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIGN1cnJlbnRfZGlyZWN0b3J5IGV4cG4gaG9tZV9kaXJlY3RvcnkgbmV3X2RpcmVjdG9yIHByZWZpeCBwcmVmaXhfb3B0aW9uYWwgc3VmZml4IHN1ZmZpeF9vcHRpb25hbAorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm9fZXhwbiBub19wcmVmaXhfb3B0aW9uYWwgbm9fc3VmZml4X29wdGlvbmFsCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBub3RfZXhwbiBub3RfcHJlZml4X29wdGlvbmFsIG5vdF9zdWZmaXhfb3B0aW9uYWwKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIGNoZWNrX2FuY2VzdG9yIGRpcmVjdG9yeV90cmFuc3BvcnQgZGlyZWN0b3J5Ml90cmFuc3BvcnQgZmlsZV90cmFuc3BvcnQgZm9yYmlkX2ZpbGUgZm9yYmlkX2luY2x1ZGUgZm9yYmlkX3BpcGUgZnJlZXplX21pc3NpbmdfaW5jbHVkZSBoaWRlX2NoaWxkX2luX2Vycm1zZyBtb2RlbWFzayBvbmVfdGltZSBvd25lcnMgb3duZ3JvdXBzIHBpcGVfdHJhbnNwb3J0IHF1YWxpZnlfcHJlc2VydmVfZG9tYWluIHJld3JpdGUgc2tpcF9zeW50YXhfZXJyb3JzIHN5bnRheF9lcnJvcnNfdGV4dCBzeW50YXhfZXJyb3JzX3RvCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBub19jaGVja19hbmNlc3RvciBub19mb3JiaWRfZmlsZSBub19mb3JiaWRfaW5jbHVkZSBub19mb3JiaWRfcGlwZSBub19mcmVlemVfbWlzc2luZ19pbmNsdWRlIG5vX2hpZGVfY2hpbGRfaW5fZXJybXNnIG5vX29uZV90aW1lIG5vX3F1YWxpZnlfcHJlc2VydmVfZG9tYWluIG5vX3Jld3JpdGUgbm9fc2tpcF9zeW50YXhfZXJyb3JzCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBub3RfY2hlY2tfYW5jZXN0b3Igbm90X2ZvcmJpZF9maWxlIG5vdF9mb3JiaWRfaW5jbHVkZSBub3RfZm9yYmlkX3BpcGUgbm90X2ZyZWV6ZV9taXNzaW5nX2luY2x1ZGUgbm90X2hpZGVfY2hpbGRfaW5fZXJybXNnIG5vdF9vbmVfdGltZSBub3RfcXVhbGlmeV9wcmVzZXJ2ZV9kb21haW4gbm90X3Jld3JpdGUgbm90X3NraXBfc3ludGF4X2Vycm9ycworc3luIGtleXdvcmQgZXhpbUtleXdvcmQgZXhwYW5kIGZpbGUgZm9yYmlkX3NwZWNpYWwgaW5jbHVkZV9kb21haW4gb3B0aW9uYWwgcXVlcmllcyBxdWVyeSBzZWFyY2hfdHlwZQorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm9fZXhwYW5kIG5vX2ZvcmJpZF9zcGVjaWFsIG5vX2luY2x1ZGVfZG9tYWluIG5vX29wdGlvbmFsCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBub3RfZXhwYW5kIG5vdF9mb3JiaWRfc3BlY2lhbCBub3RfaW5jbHVkZV9kb21haW4gbm90X29wdGlvbmFsCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBhbGxvd19zeXN0ZW1fYWN0aW9ucyBjaGVja19ncm91cCBjaGVja19sb2NhbF91c2VyIGRhdGEgZmlsZSBmaWxlX2RpcmVjdG9yeSBmaWx0ZXIgZm9yYmlkX2ZpbHRlcl9leGlzdHN0ZXN0IGZvcmJpZF9maWx0ZXJfbG9nd3JpdGUgZm9yYmlkX2ZpbHRlcl9sb29rdXAgZm9yYmlkX2ZpbHRlcl9wZXJsIGZvcmJpZF9maWx0ZXJfcmVwbHkgaWdub3JlX2VhY2NlcyBpZ25vcmVfZW5vdGRpciBtYXRjaF9kaXJlY3RvcnkgcmVwbHlfdHJhbnNwb3J0IHNldGV1aWQKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vX2FsbG93X3N5c3RlbV9hY3Rpb25zIG5vX2NoZWNrX2xvY2FsX3VzZXIgbm9fZm9yYmlkX2ZpbHRlcl9yZXBseSBub19mb3JiaWRfZmlsdGVyX2V4aXN0c3Rlc3Qgbm9fZm9yYmlkX2ZpbHRlcl9sb2d3cml0ZSBub19mb3JiaWRfZmlsdGVyX2xvb2t1cCBub19mb3JiaWRfZmlsdGVyX3Blcmwgbm9fZm9yYmlkX2ZpbHRlcl9yZXBseSBub19pZ25vcmVfZWFjY2VzIG5vX2lnbm9yZV9lbm90ZGlyIG5vX3NldGV1aWQKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vdF9hbGxvd19zeXN0ZW1fYWN0aW9ucyBub3RfY2hlY2tfbG9jYWxfdXNlciBub3RfZm9yYmlkX2ZpbHRlcl9yZXBseSBub3RfZm9yYmlkX2ZpbHRlcl9leGlzdHN0ZXN0IG5vdF9mb3JiaWRfZmlsdGVyX2xvZ3dyaXRlIG5vdF9mb3JiaWRfZmlsdGVyX2xvb2t1cCBub3RfZm9yYmlkX2ZpbHRlcl9wZXJsIG5vdF9mb3JiaWRfZmlsdGVyX3JlcGx5IG5vdF9pZ25vcmVfZWFjY2VzIG5vdF9pZ25vcmVfZW5vdGRpciBub3Rfc2V0ZXVpZAorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbWF0Y2hfZGlyZWN0b3J5CitzeW4ga2V5d29yZCBleGltS2V5d29yZCBkaXJlY3RvcnlfdHJhbnNwb3J0IGRpcmVjdG9yeTJfdHJhbnNwb3J0IGZpbGVfdHJhbnNwb3J0IGZvcmJpZF9maWxlIGZvcmJpZF9waXBlIGhpZGVfY2hpbGRfaW5fZXJybXNnIG5ld19hZGRyZXNzIHBhbmljX2V4cGFuc2lvbl9mYWlsIHBpcGVfdHJhbnNwb3J0IHF1YWxpZnlfcHJlc2VydmVfZG9tYWluIHJld3JpdGUKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vX2ZvcmJpZF9maWxlIG5vX2ZvcmJpZF9waXBlIG5vX2hpZGVfY2hpbGRfaW5fZXJybXNnIG5vX3BhbmljX2V4cGFuc2lvbl9mYWlsIG5vX3F1YWxpZnlfcHJlc2VydmVfZG9tYWluIG5vX3Jld3JpdGUKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vdF9mb3JiaWRfZmlsZSBub3RfZm9yYmlkX3BpcGUgbm90X2hpZGVfY2hpbGRfaW5fZXJybXNnIG5vdF9wYW5pY19leHBhbnNpb25fZmFpbCBub3RfcXVhbGlmeV9wcmVzZXJ2ZV9kb21haW4gbm90X3Jld3JpdGUKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIGlnbm9yZV90YXJnZXRfaG9zdHMgcGFzc19vbl90aW1lb3V0IHNlbGYgdHJhbnNsYXRlX2lwX2FkZHJlc3MKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vX3Bhc3Nfb25fdGltZW91dAorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm90X3Bhc3Nfb25fdGltZW91dAorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgaG9zdF9maW5kX2ZhaWxlZCBob3N0c19yYW5kb21pemUgbW9kZW1hc2sgb3duZXJzIG93bmdyb3VwcyBxdWFsaWZ5X3NpbmdsZSByb3V0ZV9maWxlIHJvdXRlX2xpc3Qgcm91dGVfcXVlcmllcyByb3V0ZV9xdWVyeSBzZWFyY2hfcGFyZW50cyBzZWFyY2hfdHlwZQorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm9faG9zdHNfcmFuZG9taXplIG5vX3F1YWxpZnlfc2luZ2xlIG5vX3NlYXJjaF9wYXJlbnRzCitzeW4ga2V5d29yZCBleGltS2V5d29yZCBub3RfaG9zdHNfcmFuZG9taXplIG5vdF9xdWFsaWZ5X3NpbmdsZSBub3Rfc2VhcmNoX3BhcmVudHMKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIGhvc3RzIG9wdGlvbmFsIHBvcnQgcHJvdG9jb2wgcXVlcnkgcmVyb3V0ZSByZXNwb25zZV9wYXR0ZXJuIHNlcnZpY2UgdGltZW91dAorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm9fb3B0aW9uYWwKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vdF9vcHRpb25hbAorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgY2hlY2tfc2Vjb25kYXJ5X214IGdldGhvc3RieW5hbWUgbXhfZG9tYWlucyBxdWFsaWZ5X3NpbmdsZSByZXdyaXRlX2hlYWRlcnMgc2VhcmNoX3BhcmVudHMgd2lkZW5fZG9tYWlucworc3luIGtleXdvcmQgZXhpbUtleXdvcmQgbm9fY2hlY2tfc2Vjb25kYXJ5X214IG5vX2dldGhvc3RieW5hbWUgbm9fcXVhbGlmeV9zaW5nbGUgbm9fc2VhcmNoX3BhcmVudHMKK3N5biBrZXl3b3JkIGV4aW1LZXl3b3JkIG5vdF9jaGVja19zZWNvbmRhcnlfbXggbm90X2dldGhvc3RieW5hbWUgbm90X3F1YWxpZnlfc2luZ2xlIG5vdF9zZWFyY2hfcGFyZW50cworc3luIGtleXdvcmQgZXhpbUtleXdvcmQgY29tbWFuZCBjb21tYW5kX2dyb3VwIGNvbW1hbmRfdXNlciBjdXJyZW50X2RpcmVjdG9yeSB0aW1lb3V0CitzeW4ga2V5d29yZCBleGltS2V5d29yZCBkcml2ZXIgcHVibGljX25hbWUgc2VydmVyX3NldF9pZCBzZXJ2ZXJfbWFpbF9hdXRoX2NvbmRpdGlvbgorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgc2VydmVyX3Byb21wdHMgc2VydmVyX2NvbmRpdGlvbiBjbGllbnRfc2VuZAorc3luIGtleXdvcmQgZXhpbUtleXdvcmQgc2VydmVyX3NlY3JldCBjbGllbnRfbmFtZSBjbGllbnRfc2VjcmV0CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2V4aW1fc3ludGF4X2luaXRzIikKKwlpZiB2ZXJzaW9uIDwgNTA4CisJCWxldCBkaWRfZXhpbV9zeW50YXhfaW5pdHMgPSAxCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisJZWxzZQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKwllbmRpZgorCisJSGlMaW5rIGV4aW1Db21tZW50IENvbW1lbnQKKwlIaUxpbmsgZXhpbUZpeG1lIFRvZG8KKwlIaUxpbmsgZXhpbUVuZCBLZXl3b3JkCisJSGlMaW5rIGV4aW1OdW1iZXIgTnVtYmVyCisJSGlMaW5rIGV4aW1Ecml2ZXJOYW1lIENvbnN0YW50CisJSGlMaW5rIGV4aW1Db25zdGFudCBDb25zdGFudAorCUhpTGluayBleGltVGltZSBDb25zdGFudAorCUhpTGluayBleGltS2V5d29yZCBUeXBlCisJSGlMaW5rIGV4aW1TcGVjaWFsQ2hhciBTcGVjaWFsCisJSGlMaW5rIGV4aW1NYWNyb05hbWUgUHJlcHJvYworCUhpTGluayBleGltVHJhbnNwb3J0IElkZW50aWZpZXIKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJleGltIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZXhwZWN0LnZpbSBiL3J1bnRpbWUvc3ludGF4L2V4cGVjdC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4NmUyYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2V4cGVjdC52aW0KQEAgLTAsMCArMSwxMTMgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglFeHBlY3QKKyIgTWFpbnRhaW5lcjoJUmFscGggSmVubmluZ3MgPGtub3didWR5QG9yby5uZXQ+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgUmVzZXJ2ZWQgRXhwZWN0IHZhcmlhYmxlIHByZWZpeGVzLgorc3luIG1hdGNoICAgZXhwZWN0VmFyaWFibGVzICJcJGV4cFthLXpBLVowLTlfXSpcfFwkaW50ZXJbYS16QS1aMC05X10qIgorc3luIG1hdGNoICAgZXhwZWN0VmFyaWFibGVzICJcJHNwYXduW2EtekEtWjAtOV9dKlx8XCR0aW1lb3V0W2EtekEtWjAtOV9dKiIKKworIiBOb3JtYWwgRXhwZWN0IHZhcmlhYmxlcy4KK3N5biBtYXRjaCAgIGV4cGVjdFZhcmlhYmxlcyAiXCRlbnYoW14pXSopIgorc3luIG1hdGNoICAgZXhwZWN0VmFyaWFibGVzICJcJGFueV9zcGF3bl9pZFx8XCRhcmdjXHxcJGFyZ3ZcZCoiCitzeW4gbWF0Y2ggICBleHBlY3RWYXJpYWJsZXMgIlwkdXNlcl9zcGF3bl9pZFx8XCRzcGF3bl9pZFx8XCR0aW1lb3V0IgorCisiIEV4cGVjdCB2YXJpYWJsZSBhcnJheXMuCitzeW4gbWF0Y2ggICBleHBlY3RWYXJpYWJsZXMgIlwkXChleHBlY3RcfGludGVyYWN0XClfb3V0KFteKV0qKSIJCQljb250YWlucz1leHBlY3RPdXRWYXIKKworIiBVc2VyIGRlZmluZWQgdmFyaWFibGVzLgorc3luIG1hdGNoICAgZXhwZWN0VmFyaWFibGVzICJcJFthLXpBLVpfXVthLXpBLVowLTlfXSoiCisKKyIgUmVzZXJ2ZWQgRXhwZWN0IGNvbW1hbmQgcHJlZml4ZXMuCitzeW4gbWF0Y2ggICBleHBlY3RDb21tYW5kICAgICJleHBfW2EtekEtWjAtOV9dKiIKKworIiBOb3JtYWwgRXhwZWN0IGNvbW1hbmRzLgorc3luIGtleXdvcmQgZXhwZWN0U3RhdGVtZW50CWNsb3NlIGRlYnVnIGRpc2Nvbm5lY3QKK3N5biBrZXl3b3JkIGV4cGVjdFN0YXRlbWVudAlleGl0IGV4cF9jb250aW51ZSBleHBfaW50ZXJuYWwgZXhwX29wZW4KK3N5biBrZXl3b3JkIGV4cGVjdFN0YXRlbWVudAlleHBfcGlkIGV4cF92ZXJzaW9uCitzeW4ga2V5d29yZCBleHBlY3RTdGF0ZW1lbnQJZm9yayBpbnRlcl9yZXR1cm4gaW50ZXJwcmV0ZXIKK3N5biBrZXl3b3JkIGV4cGVjdFN0YXRlbWVudAlsb2dfZmlsZSBsb2dfdXNlciBtYXRjaF9tYXggb3ZlcmxheQorc3luIGtleXdvcmQgZXhwZWN0U3RhdGVtZW50CXBhcml0eSByZW1vdmVfbnVsbHMgcmV0dXJuCitzeW4ga2V5d29yZCBleHBlY3RTdGF0ZW1lbnQJc2VuZCBzZW5kX2Vycm9yIHNlbmRfbG9nIHNlbmRfdXNlcgorc3luIGtleXdvcmQgZXhwZWN0U3RhdGVtZW50CXNsZWVwIHNwYXduIHN0cmFjZSBzdHR5IHN5c3RlbQorc3luIGtleXdvcmQgZXhwZWN0U3RhdGVtZW50CXRpbWVzdGFtcCB0cmFjZSB0cmFwIHdhaXQKKworIiBUY2wgY29tbWFuZHMgcmVjb2duaXplZCBhbmQgdXNlZCBieSBFeHBlY3QuCitzeW4ga2V5d29yZCBleHBlY3RDb21tYW5kCQlwcm9jCitzeW4ga2V5d29yZCBleHBlY3RDb25kaXRpb25hbAlpZiBlbHNlCitzeW4ga2V5d29yZCBleHBlY3RSZXBlYXQJCXdoaWxlIGZvciBmb3JlYWNoCisKKyIgRXhwZWN0IGNvbW1hbmRzIHdpdGggc3BlY2lhbCBhcmd1bWVudHMuCitzeW4ga2V5d29yZCBleHBlY3RTdGF0ZW1lbnQJZXhwZWN0IGV4cGVjdF9hZnRlciBleHBlY3RfYmFja2dyb3VuZAkJCW5leHRncm91cD1leHBlY3RFeHBlY3RPcHRzCitzeW4ga2V5d29yZCBleHBlY3RTdGF0ZW1lbnQJZXhwZWN0X2JlZm9yZSBleHBlY3RfdXNlciBpbnRlcmFjdAkJCW5leHRncm91cD1leHBlY3RFeHBlY3RPcHRzCisKK3N5biBtYXRjaCAgIGV4cGVjdFNwZWNpYWwgY29udGFpbmVkICAiXFwuIgorCisiIE9wdGlvbnMgZm9yICJleHBlY3QiLCAiZXhwZWN0X2FmdGVyIiwgImV4cGVjdF9iYWNrZ3JvdW5kIiwKKyIgImV4cGVjdF9iZWZvcmUiLCAiZXhwZWN0X3VzZXIiLCBhbmQgImludGVyYWN0Ii4KK3N5biBrZXl3b3JkIGV4cGVjdEV4cGVjdE9wdHMJZGVmYXVsdCBlb2YgZnVsbF9idWZmZXIgbnVsbCByZXR1cm4gdGltZW91dAorCitzeW4ga2V5d29yZCBleHBlY3RPdXRWYXIgIGNvbnRhaW5lZCAgc3Bhd25faWQgc2Vjb25kcyBzZWNvbmRzX3RvdGFsCitzeW4ga2V5d29yZCBleHBlY3RPdXRWYXIgIGNvbnRhaW5lZCAgc3RyaW5nIHN0YXJ0IGVuZCBidWZmZXIKKworIiBOdW1iZXJzIChUY2wgc3R5bGUpLgorc3luIGNhc2UgaWdub3JlCisgIHN5biBtYXRjaCAgZXhwZWN0TnVtYmVyCSJcPFxkXCtcKHVcPWxcPVx8bHVcfGZcKVw+IgorICAiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRoIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKKyAgc3luIG1hdGNoICBleHBlY3ROdW1iZXIJIlw8XGRcK1wuXGQqXChlWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKyAgImZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKKyAgc3luIG1hdGNoICBleHBlY3ROdW1iZXIJIlwuXGRcK1woZVstK11cPVxkXCtcKVw9W2ZsXVw9XD4iCisgICJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGhvdXQgZG90LCB3aXRoIGV4cG9uZW50CisgIHN5biBtYXRjaCAgZXhwZWN0TnVtYmVyCSJcPFxkXCtlWy0rXVw9XGRcK1tmbF1cPVw+IgorICAiaGV4IG51bWJlcgorICBzeW4gbWF0Y2ggIGV4cGVjdE51bWJlcgkiMHhbMC05YS1mXVwrXCh1XD1sXD1cfGx1XClcPiIKKyAgInN5biBtYXRjaCAgZXhwZWN0SWRlbnRpZmllcgkiXDxbYS16X11bYS16MC05X10qXD4iCitzeW4gY2FzZSBtYXRjaAorCitzeW4gcmVnaW9uICBleHBlY3RTdHJpbmcJc3RhcnQ9KyIrICBlbmQ9KyIrICBjb250YWlucz1leHBlY3RWYXJpYWJsZXMsZXhwZWN0U3BlY2lhbAorCisiIEFyZSB0aGVzZSByZWFsbHkgY29tbWVudHMgaW4gRXhwZWN0PyAoSSBuZXZlciB1c2UgaXQsIHNvIEknbSBqdXN0IGd1ZXNzaW5nKS4KK3N5biBrZXl3b3JkIGV4cGVjdFRvZG8JCWNvbnRhaW5lZCBUT0RPCitzeW4gbWF0Y2ggICBleHBlY3RDb21tZW50CQkiIy4qJCIgY29udGFpbnM9ZXhwZWN0VG9kbworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9leHBlY3Rfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZXhwZWN0X3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGV4cGVjdFZhcmlhYmxlcwlTcGVjaWFsCisgIEhpTGluayBleHBlY3RDb21tYW5kCQlGdW5jdGlvbgorICBIaUxpbmsgZXhwZWN0U3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgZXhwZWN0Q29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGV4cGVjdFJlcGVhdAkJUmVwZWF0CisgIEhpTGluayBleHBlY3RFeHBlY3RPcHRzCUtleXdvcmQKKyAgSGlMaW5rIGV4cGVjdE91dFZhcgkJU3BlY2lhbAorICBIaUxpbmsgZXhwZWN0U3BlY2lhbAkJU3BlY2lhbAorICBIaUxpbmsgZXhwZWN0TnVtYmVyCQlOdW1iZXIKKworICBIaUxpbmsgZXhwZWN0U3RyaW5nCQlTdHJpbmcKKworICBIaUxpbmsgZXhwZWN0Q29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgZXhwZWN0VG9kbwkJVG9kbworICAiSGlMaW5rIGV4cGVjdElkZW50aWZpZXIJSWRlbnRpZmllcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJleHBlY3QiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9leHBvcnRzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2V4cG9ydHMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NGNjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9leHBvcnRzLnZpbQpAQCAtMCwwICsxLDcwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJZXhwb3J0cworIiBNYWludGFpbmVyOglEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxOZHJPY2hpcFNAUGNhbXBiZWxsQWZhbWlseS5NYml6PgorIiBMYXN0IENoYW5nZToJU2VwIDAyLCAyMDAzCisiIFZlcnNpb246CTMKKyIgTm90ZXM6CQlUaGlzIGZpbGUgaW5jbHVkZXMgYm90aCBTeXNWIGFuZCBCU0QgJ2lzbXMKKyIgVVJMOglodHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL2luZGV4Lmh0bWwjdmltbGlua3Nfc3ludGF4CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBPcHRpb25zOiAtd29yZAorc3luIGtleXdvcmQgZXhwb3J0c0tleU9wdGlvbnMgY29udGFpbmVkCWFsbGRpcnMJbm9oaWRlCXJvCXdzeW5jCitzeW4ga2V5d29yZCBleHBvcnRzS2V5T3B0aW9ucyBjb250YWluZWQJa2VyYglvCXJ3CitzeW4gbWF0Y2ggZXhwb3J0c09wdEVycm9yIGNvbnRhaW5lZAkiW2Etel1cKyIKKworIiBTZXR0aW5nczogd29yZD0KK3N5biBrZXl3b3JkIGV4cG9ydHNLZXlTZXR0aW5ncyBjb250YWluZWQJYWNjZXNzCWFub24Jcm9vdAlydworc3luIG1hdGNoIGV4cG9ydHNTZXRFcnJvciBjb250YWluZWQJIlthLXpdXCsiCisKKyIgT3B0U2V0OiAtd29yZD0KK3N5biBrZXl3b3JkIGV4cG9ydHNLZXlPcHRTZXQgY29udGFpbmVkCW1hcGFsbAltYXByb290CW1hc2sJbmV0d29yaworc3luIG1hdGNoIGV4cG9ydHNPcHRTZXRFcnJvciBjb250YWluZWQJIlthLXpdXCsiCisKKyIgb3B0aW9ucyBhbmQgc2V0dGluZ3MKK3N5biBtYXRjaCBleHBvcnRzU2V0dGluZ3MJIlthLXpdXCs9IiAgY29udGFpbnM9ZXhwb3J0c0tleVNldHRpbmdzLGV4cG9ydHNTZXRFcnJvcgorc3luIG1hdGNoIGV4cG9ydHNPcHRpb25zCSItW2Etel1cKyIgIGNvbnRhaW5zPWV4cG9ydHNLZXlPcHRpb25zLGV4cG9ydHNPcHRFcnJvcgorc3luIG1hdGNoIGV4cG9ydHNPcHRTZXQJIi1bYS16XVwrPSIgY29udGFpbnM9ZXhwb3J0c0tleU9wdFNldCxleHBvcnRzT3B0U2V0RXJyb3IKKworIiBTZXBhcmF0b3JzCitzeW4gbWF0Y2ggZXhwb3J0c1NlcGFyYXRvcgkiWyw6XSIKKworIiBjb21tZW50cworc3luIG1hdGNoIGV4cG9ydHNDb21tZW50CSJeXHMqIy4qJCIJY29udGFpbnM9QFNwZWxsCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2V4cG9ydHNfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZXhwb3J0c19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBleHBvcnRzS2V5T3B0U2V0CWV4cG9ydHNLZXlTZXR0aW5ncworICBIaUxpbmsgZXhwb3J0c09wdFNldAlleHBvcnRzU2V0dGluZ3MKKworICBIaUxpbmsgZXhwb3J0c0NvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgZXhwb3J0c0tleU9wdGlvbnMJVHlwZQorICBIaUxpbmsgZXhwb3J0c0tleVNldHRpbmdzCUtleXdvcmQKKyAgSGlMaW5rIGV4cG9ydHNPcHRpb25zCUNvbnN0YW50CisgIEhpTGluayBleHBvcnRzU2VwYXJhdG9yCUNvbnN0YW50CisgIEhpTGluayBleHBvcnRzU2V0dGluZ3MJQ29uc3RhbnQKKworICBIaUxpbmsgZXhwb3J0c09wdEVycm9yCUVycm9yCisgIEhpTGluayBleHBvcnRzT3B0U2V0RXJyb3IJRXJyb3IKKyAgSGlMaW5rIGV4cG9ydHNTZXRFcnJvcglFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJleHBvcnRzIgorIiB2aW06IHRzPTEwCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9mYXNtLnZpbSBiL3J1bnRpbWUvc3ludGF4L2Zhc20udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYmRjODMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9mYXNtLnZpbQpAQCAtMCwwICsxLDE0NSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUZsYXQgQXNzZW1ibGVyIChGQVNNKQorIiBNYWludGFpbmVyOglSb24gQWFyb24gPHJvbkByb253YXJlLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDE2CisiIFZpbSBVUkw6CWh0dHA6Ly93d3cudmltLm9yZy9sYW5nLmh0bWwKKyIgRkFTTSBIb21lOglodHRwOi8vZmxhdGFzc2VtYmxlci5uZXQvCisiIEZBU00gVmVyc2lvbjogMS41MgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc2V0bG9jYWwgaXNrZXl3b3JkPWEteixBLVosNDgtNTcsLixfCitzZXRsb2NhbCBpc2lkZW50PWEteixBLVosNDgtNTcsLixfCitzeW4gY2FzZSBpZ25vcmUKKworc3luIGtleXdvcmQgZmFzbVJlZ2lzdGVyCWFoIGFsIGF4IGJoIGJsIGJwIGJ4IGNoIGNsIGNyMCBjcjEgY3IyIGNyMyBjcjQgY3I1IGNyNgorc3luIGtleXdvcmQgZmFzbVJlZ2lzdGVyCWNyNyBjcyBjeCBkaCBkaSBkbCBkcjAgZHIxIGRyMiBkcjMgZHI0IGRyNSBkcjYgZHI3IGRzIGR4CitzeW4ga2V5d29yZCBmYXNtUmVnaXN0ZXIJZWF4IGVicCBlYnggZWN4IGVkaSBlZHggZXMgZXNpIGVzcCBmcyBncyBtbTAgbW0xIG1tMiBtbTMKK3N5biBrZXl3b3JkIGZhc21SZWdpc3RlcgltbTQgbW01IG1tNiBtbTcgc2kgc3Agc3Mgc3Qgc3QwIHN0MSBzdDIgc3QzIHN0NCBzdDUgc3Q2CitzeW4ga2V5d29yZCBmYXNtUmVnaXN0ZXIJc3Q3IHRyMCB0cjEgdHIyIHRyMyB0cjQgdHI1IHRyNiB0cjcgeG1tMCB4bW0xIHhtbTIgeG1tMworc3luIGtleXdvcmQgZmFzbVJlZ2lzdGVyCXhtbTQgeG1tNSB4bW02IHhtbTcKK3N5biBrZXl3b3JkIGZhc21BZGRyZXNzU2l6ZXMgCWJ5dGUgZHF3b3JkIGR3b3JkIGZ3b3JkIHB3b3JkIHF3b3JkIHR3b3JkIHdvcmQKK3N5biBrZXl3b3JkIGZhc21EYXRhRGlyZWN0aXZlcyAJZGIgZGQgZGYgZHAgZHEgZHQgZHUgZHcgZmlsZSByYiByZCByZiBycCBycSBydCBydworc3luIGtleXdvcmQgZmFzbUluc3RyIAlhYWEgYWFkIGFhbSBhYXMgYWRjIGFkZCBhZGRwZCBhZGRwcyBhZGRzZCBhZGRzcyBhZGRzdWJwZAorc3luIGtleXdvcmQgZmFzbUluc3RyCWFkZHN1YnBzIGFuZCBhbmRucGQgYW5kbnBzIGFuZHBkIGFuZHBzIGFycGwgYm91bmQgYnNmIGJzcgorc3luIGtleXdvcmQgZmFzbUluc3RyCWJzd2FwIGJ0IGJ0YyBidHIgYnRzIGNhbGwgY2J3IGNkcSBjbGMgY2xkIGNsZmx1c2ggY2xpIGNsdHMKK3N5biBrZXl3b3JkIGZhc21JbnN0cgljbWMgY21vdmEgY21vdmFlIGNtb3ZiIGNtb3ZiZSBjbW92YyBjbW92ZSBjbW92ZyBjbW92Z2UgY21vdmwKK3N5biBrZXl3b3JkIGZhc21JbnN0cgljbW92bGUgY21vdm5hIGNtb3ZuYWUgY21vdm5iIGNtb3ZuYmUgY21vdm5jIGNtb3ZuZSBjbW92bmcKK3N5biBrZXl3b3JkIGZhc21JbnN0cgljbW92bmdlIGNtb3ZubCBjbW92bmxlIGNtb3ZubyBjbW92bnAgY21vdm5zIGNtb3ZueiBjbW92byBjbW92cAorc3luIGtleXdvcmQgZmFzbUluc3RyCWNtb3ZwZSBjbW92cG8gY21vdnMgY21vdnogY21wIGNtcGVxcGQgY21wZXFwcyBjbXBlcXNkIGNtcGVxc3MKK3N5biBrZXl3b3JkIGZhc21JbnN0cgljbXBsZXBkIGNtcGxlcHMgY21wbGVzZCBjbXBsZXNzIGNtcGx0cGQgY21wbHRwcyBjbXBsdHNkIGNtcGx0c3MKK3N5biBrZXl3b3JkIGZhc21JbnN0cgljbXBuZXFwZCBjbXBuZXFwcyBjbXBuZXFzZCBjbXBuZXFzcyBjbXBubGVwZCBjbXBubGVwcyBjbXBubGVzZAorc3luIGtleXdvcmQgZmFzbUluc3RyCWNtcG5sZXNzIGNtcG5sdHBkIGNtcG5sdHBzIGNtcG5sdHNkIGNtcG5sdHNzIGNtcG9yZHBkIGNtcG9yZHBzCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJY21wb3Jkc2QgY21wb3Jkc3MgY21wcGQgY21wcHMgY21wcyBjbXBzYiBjbXBzZCBjbXBzcyBjbXBzdworc3luIGtleXdvcmQgZmFzbUluc3RyCWNtcHVub3JkcGQgY21wdW5vcmRwcyBjbXB1bm9yZHNkIGNtcHVub3Jkc3MgY21weGNoZyBjbXB4Y2hnOGIKK3N5biBrZXl3b3JkIGZhc21JbnN0cgljb21pc2QgY29taXNzIGNwdWlkIGN2dGRxMnBkIGN2dGRxMnBzIGN2dHBkMmRxIGN2dHBkMnBpIGN2dHBkMnBzCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJY3Z0cGkycGQgY3Z0cGkycHMgY3Z0cHMyZHEgY3Z0cHMycGQgY3Z0cHMycGkgY3Z0c2Qyc2kgY3Z0c2Qyc3MKK3N5biBrZXl3b3JkIGZhc21JbnN0cgljdnRzaTJzZCBjdnRzaTJzcyBjdnRzczJzZCBjdnRzczJzaSBjdnR0cGQyZHEgY3Z0dHBkMnBpIGN2dHRwczJkcQorc3luIGtleXdvcmQgZmFzbUluc3RyCWN2dHRwczJwaSBjdnR0c2Qyc2kgY3Z0dHNzMnNpIGN3ZCBjd2RlIGRhYSBkYXMgZGF0YSBkZWMgZGl2CitzeW4ga2V5d29yZCBmYXNtSW5zdHIJZGl2cGQgZGl2cHMgZGl2c2QgZGl2c3MgZWxzZSBlbW1zIGVuZCBlbnRlciBleHRybiBmMnhtMSBmYWJzCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJZmFkZCBmYWRkcCBmYmxkIGZic3RwIGZjaHMgZmNsZXggZmNtb3ZiIGZjbW92YmUgZmNtb3ZlIGZjbW92bmIKK3N5biBrZXl3b3JkIGZhc21JbnN0cglmY21vdm5iZSBmY21vdm5lIGZjbW92bnUgZmNtb3Z1IGZjb20gZmNvbWkgZmNvbWlwIGZjb21wIGZjb21wcAorc3luIGtleXdvcmQgZmFzbUluc3RyCWZjb3MgZmRlY3N0cCBmZGlzaSBmZGl2IGZkaXZwIGZkaXZyIGZkaXZycCBmZW1tcyBmZW5pIGZmcmVlCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJZmZyZWVwIGZpYWRkIGZpY29tIGZpY29tcCBmaWRpdiBmaWRpdnIgZmlsZCBmaW11bCBmaW5jc3RwCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJZmluaXQgZmlzdCBmaXN0cCBmaXN0dHAgZmlzdWIgZmlzdWJyIGZsZCBmbGQxIGZsZGN3IGZsZGVudgorc3luIGtleXdvcmQgZmFzbUluc3RyCWZsZGwyZSBmbGRsMnQgZmxkbGcyIGZsZGxuMiBmbGRwaSBmbGR6IGZtdWwgZm11bHAgZm5jbGV4IGZuZGlzaQorc3luIGtleXdvcmQgZmFzbUluc3RyCWZuZW5pIGZuaW5pdCBmbm9wIGZuc2F2ZSBmbnN0Y3cgZm5zdGVudiBmbnN0c3cgZnBhdGFuIGZwcmVtCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJZnByZW0xIGZwdGFuIGZybmRpbnQgZnJzdG9yIGZyc3RwbSBmc2F2ZSBmc2NhbGUgZnNldHBtIGZzaW4KK3N5biBrZXl3b3JkIGZhc21JbnN0cglmc2luY29zIGZzcXJ0IGZzdCBmc3RjdyBmc3RlbnYgZnN0cCBmc3RzdyBmc3ViIGZzdWJwIGZzdWJyCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJZnN1YnJwIGZ0c3QgZnVjb20gZnVjb21pIGZ1Y29taXAgZnVjb21wIGZ1Y29tcHAgZndhaXQgZnhhbQorc3luIGtleXdvcmQgZmFzbUluc3RyCWZ4Y2ggZnhyc3RvciBmeHNhdmUgZnh0cmFjdCBmeWwyeCBmeWwyeHAxIGhhZGRwZCBoYWRkcHMgaGVhcAorc3luIGtleXdvcmQgZmFzbUluc3RyCWhsdCBoc3VicGQgaHN1YnBzIGlkaXYgaWYgaW11bCBpbiBpbmMgaW5zIGluc2IgaW5zZCBpbnN3IGludAorc3luIGtleXdvcmQgZmFzbUluc3RyCWludDMgaW50byBpbnZkIGludmxwZyBpcmV0IGlyZXRkIGlyZXR3IGphIGphZSBqYiBqYmUgamMgamN4egorc3luIGtleXdvcmQgZmFzbUluc3RyCWplIGplY3h6IGpnIGpnZSBqbCBqbGUgam1wIGpuYSBqbmFlIGpuYiBqbmJlIGpuYyBqbmUgam5nIGpuZ2UKK3N5biBrZXl3b3JkIGZhc21JbnN0cglqbmwgam5sZSBqbm8gam5wIGpucyBqbnogam8ganAganBlIGpwbyBqcyBqeiBsYWhmIGxhciBsZGRxdQorc3luIGtleXdvcmQgZmFzbUluc3RyCWxkbXhjc3IgbGRzIGxlYSBsZWF2ZSBsZXMgbGZlbmNlIGxmcyBsZ2R0IGxncyBsaWR0IGxsZHQgbG1zdworc3luIGtleXdvcmQgZmFzbUluc3RyCWxvYWQgbG9hZGFsbDI4NiBsb2FkYWxsMzg2IGxvY2sgbG9kcyBsb2RzYiBsb2RzZCBsb2RzdyBsb29wCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJbG9vcGQgbG9vcGUgbG9vcGVkIGxvb3BldyBsb29wbmUgbG9vcG5lZCBsb29wbmV3IGxvb3BueiBsb29wbnpkCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJbG9vcG56dyBsb29wdyBsb29weiBsb29wemQgbG9vcHp3IGxzbCBsc3MgbHRyIG1hc2ttb3ZkcXUgbWFza21vdnEKK3N5biBrZXl3b3JkIGZhc21JbnN0cgltYXhwZCBtYXhwcyBtYXhzZCBtYXhzcyBtZmVuY2UgbWlucGQgbWlucHMgbWluc2QgbWluc3MgbW9uaXRvcgorc3luIGtleXdvcmQgZmFzbUluc3RyCW1vdiBtb3ZhcGQgbW92YXBzIG1vdmQgbW92ZGR1cCBtb3ZkcTJxIG1vdmRxYSBtb3ZkcXUgbW92aGxwcworc3luIGtleXdvcmQgZmFzbUluc3RyCW1vdmhwZCBtb3ZocHMgbW92bGhwcyBtb3ZscGQgbW92bHBzIG1vdm1za3BkIG1vdm1za3BzIG1vdm50ZHEKK3N5biBrZXl3b3JkIGZhc21JbnN0cgltb3ZudGkgbW92bnRwZCBtb3ZudHBzIG1vdm50cSBtb3ZxIG1vdnEyZHEgbW92cyBtb3ZzYiBtb3ZzZAorc3luIGtleXdvcmQgZmFzbUluc3RyCW1vdnNoZHVwIG1vdnNsZHVwIG1vdnNzIG1vdnN3IG1vdnN4IG1vdnVwZCBtb3Z1cHMgbW92enggbXVsCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJbXVscGQgbXVscHMgbXVsc2QgbXVsc3MgbXdhaXQgbmVnIG5vcCBub3Qgb3Igb3JnIG9ycGQgb3Jwcworc3luIGtleXdvcmQgZmFzbUluc3RyCW91dCBvdXRzIG91dHNiIG91dHNkIG91dHN3IHBhY2tzc2R3IHBhY2tzc3diIHBhY2t1c3diIHBhZGRiCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJcGFkZGQgcGFkZHEgcGFkZHNiIHBhZGRzdyBwYWRkdXNiIHBhZGR1c3cgcGFkZHcgcGFuZCBwYW5kbgorc3luIGtleXdvcmQgZmFzbUluc3RyCXBhdXNlIHBhdmdiIHBhdmd1c2IgcGF2Z3cgcGNtcGVxYiBwY21wZXFkIHBjbXBlcXcgcGNtcGd0Ygorc3luIGtleXdvcmQgZmFzbUluc3RyCXBjbXBndGQgcGNtcGd0dyBwZXh0cncgcGYyaWQgcGYyaXcgcGZhY2MgcGZhZGQgcGZjbXBlcSBwZmNtcGdlCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJcGZjbXBndCBwZm1heCBwZm1pbiBwZm11bCBwZm5hY2MgcGZwbmFjYyBwZnJjcCBwZnJjcGl0MSBwZnJjcGl0Mgorc3luIGtleXdvcmQgZmFzbUluc3RyCXBmcnNxaXQxIHBmcnNxcnQgcGZzdWIgcGZzdWJyIHBpMmZkIHBpMmZ3IHBpbnNydyBwbWFkZHdkIHBtYXhzdworc3luIGtleXdvcmQgZmFzbUluc3RyCXBtYXh1YiBwbWluc3cgcG1pbnViIHBtb3Ztc2tiIHBtdWxocncgcG11bGh1dyBwbXVsaHcgcG11bGx3CitzeW4ga2V5d29yZCBmYXNtSW5zdHIJcG11bHVkcSBwb3AgcG9wYSBwb3BhZCBwb3BhdyBwb3BkIHBvcGYgcG9wZmQgcG9wZncgcG9wdyBwb3IKK3N5biBrZXl3b3JkIGZhc21JbnN0cglwcmVmZXRjaCBwcmVmZXRjaG50YSBwcmVmZXRjaHQwIHByZWZldGNodDEgcHJlZmV0Y2h0MiBwcmVmZXRjaHcKK3N5biBrZXl3b3JkIGZhc21JbnN0cglwc2FkYncgcHNodWZkIHBzaHVmaHcgcHNodWZsdyBwc2h1ZncgcHNsbGQgcHNsbGRxIHBzbGxxIHBzbGx3CitzeW4ga2V5d29yZCBmYXNtSW5zdHIJcHNyYWQgcHNyYXcgcHNybGQgcHNybGRxIHBzcmxxIHBzcmx3IHBzdWJiIHBzdWJkIHBzdWJxIHBzdWJzYgorc3luIGtleXdvcmQgZmFzbUluc3RyCXBzdWJzdyBwc3VidXNiIHBzdWJ1c3cgcHN1YncgcHN3YXBkIHB1bnBja2hidyBwdW5wY2toZHEgcHVucGNraHFkcQorc3luIGtleXdvcmQgZmFzbUluc3RyCXB1bnBja2h3ZCBwdW5wY2tsYncgcHVucGNrbGRxIHB1bnBja2xxZHEgcHVucGNrbHdkIHB1c2ggcHVzaGEKK3N5biBrZXl3b3JkIGZhc21JbnN0cglwdXNoYWQgcHVzaGF3IHB1c2hkIHB1c2hmIHB1c2hmZCBwdXNoZncgcHVzaHcgcHhvciByY2wgcmNwcHMKK3N5biBrZXl3b3JkIGZhc21JbnN0cglyY3BzcyByY3IgcmRtc3IgcmRwbWMgcmR0c2MgcmVwIHJlcGUgcmVwbmUgcmVwbnogcmVweiByZXQKK3N5biBrZXl3b3JkIGZhc21JbnN0cglyZXRkIHJldGYgcmV0ZmQgcmV0ZncgcmV0biByZXRuZCByZXRudyByZXR3IHJvbCByb3IgcnNtIHJzcXJ0cHMKK3N5biBrZXl3b3JkIGZhc21JbnN0cglyc3FydHNzIHNhaGYgc2FsIHNhbGMgc2FyIHNiYiBzY2FzIHNjYXNiIHNjYXNkIHNjYXN3IHNldGEKK3N5biBrZXl3b3JkIGZhc21JbnN0cglzZXRhZSBzZXRhbGMgc2V0YiBzZXRiZSBzZXRjIHNldGUgc2V0ZyBzZXRnZSBzZXRsIHNldGxlIHNldG5hCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJc2V0bmFlIHNldG5iIHNldG5iZSBzZXRuYyBzZXRuZSBzZXRuZyBzZXRuZ2Ugc2V0bmwgc2V0bmxlCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJc2V0bm8gc2V0bnAgc2V0bnMgc2V0bnogc2V0byBzZXRwIHNldHBlIHNldHBvIHNldHMgc2V0eiBzZmVuY2UKK3N5biBrZXl3b3JkIGZhc21JbnN0cglzZ2R0IHNobCBzaGxkIHNociBzaHJkIHNodWZwZCBzaHVmcHMgc2lkdCBzbGR0IHNtc3cgc3FydHBkCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJc3FydHBzIHNxcnRzZCBzcXJ0c3Mgc3RjIHN0ZCBzdGkgc3RteGNzciBzdG9yZSBzdG9zIHN0b3NiCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJc3Rvc2Qgc3Rvc3cgc3RyIHN1YiBzdWJwZCBzdWJwcyBzdWJzZCBzdWJzcyBzeXNlbnRlciBzeXNleGl0CitzeW4ga2V5d29yZCBmYXNtSW5zdHIJdGVzdCB1Y29taXNkIHVjb21pc3MgdWQyIHVucGNraHBkIHVucGNraHBzIHVucGNrbHBkIHVucGNrbHBzCitzeW4ga2V5d29yZCBmYXNtSW5zdHIJdmVyciB2ZXJ3IHdhaXQgd2JpbnZkIHdybXNyIHhhZGQgeGNoZyB4bGF0IHhsYXRiIHhvciB4b3JwZAorc3luIGtleXdvcmQgZmFzbVByZXByb2Nlc3MgCWNvbW1vbiBlcXUgZml4IGZvcndhcmQgaW5jbHVkZSBsb2NhbCBtYWNybyBwdXJnZSByZXN0b3JlCitzeW4ga2V5d29yZCBmYXNtUHJlcHJvY2VzcwlyZXZlcnNlIHN0cnVjCitzeW4ga2V5d29yZCBmYXNtRGlyZWN0aXZlIAlhbGlnbiBiaW5hcnkgY29kZSBjb2ZmIGNvbnNvbGUgZGlzY2FyZGFibGUgZGlzcGxheSBkbGwKK3N5biBrZXl3b3JkIGZhc21EaXJlY3RpdmUJZWxmIGVudHJ5IGV4ZWN1dGFibGUgZXhwb3J0IGV4dGVybiBmYXIgZml4dXBzIGZvcm1hdCBndWkKK3N5biBrZXl3b3JkIGZhc21EaXJlY3RpdmUJaW1wb3J0IGxhYmVsIG1zIG16IG5hdGl2ZSBuZWFyIG5vdHBhZ2VhYmxlIHBlIHB1YmxpYyByZWFkYWJsZQorc3luIGtleXdvcmQgZmFzbURpcmVjdGl2ZQlyZXBlYXQgcmVzb3VyY2Ugc2VjdGlvbiBzZWdtZW50IHNoYXJlYWJsZSBzdGFjayB0aW1lcworc3luIGtleXdvcmQgZmFzbURpcmVjdGl2ZQl1c2UxNiB1c2UzMiB2aXJ0dWFsIHdkbSB3cml0ZWFibGUKK3N5biBrZXl3b3JkIGZhc21PcGVyYXRvciAJYXMgYXQgZGVmaW5lZCBlcSBlcXR5cGUgZnJvbSBtb2Qgb24gcHRyIHJ2YSB1c2VkCisKK3N5biBtYXRjaAlmYXNtTnVtZXJpY09wZXJhdG9yCSJbKy0vKl0iCitzeW4gbWF0Y2gJZmFzbUxvZ2ljYWxPcGVyYXRvcgkiWz18Jn48Pl1cfDw9XHw+PVx8PD4iCisiIG51bWJlcnMKK3N5biBtYXRjaAlmYXNtQmluYXJ5TnVtYmVyCSJcPFswMV1cK2JcPiIKK3N5biBtYXRjaAlmYXNtSGV4TnVtYmVyCQkiXDxcZFx4KmhcPiIKK3N5biBtYXRjaAlmYXNtSGV4TnVtYmVyCQkiXDxcKDB4XHwkXClceCpcPiIKK3N5biBtYXRjaAlmYXNtRlBVTnVtYmVyCQkiXDxcZFwrXChcLlxkKlwpXD1cKGVbLStdXD1cZCpcKVw9XD4iCitzeW4gbWF0Y2gJZmFzbU9jdGFsTnVtYmVyCQkiXDxcKDBcb1wrb1w9XHxcb1wrb1wpXD4iCitzeW4gbWF0Y2gJZmFzbURlY2ltYWxOdW1iZXIJIlw8XCgwXHxbMS05XVxkKlwpXD4iCitzeW4gcmVnaW9uCWZhc21Db21tZW50CQlzdGFydD0iOyIgZW5kPSIkIgorc3luIHJlZ2lvbglmYXNtU3RyaW5nCQlzdGFydD0iXCIiIGVuZD0iXCJcfCQiCitzeW4gcmVnaW9uCWZhc21TdHJpbmcJCXN0YXJ0PSInIiBlbmQ9IidcfCQiCitzeW4gbWF0Y2gJZmFzbVN5bWJvbAkJIlsoKXxcW1xdOl0iCitzeW4gbWF0Y2gJZmFzbVNwZWNpYWwJCSJbIz8lJCxdIgorc3luIG1hdGNoCWZhc21MYWJlbAkJIl5ccypbXjsgXHRdXCs6IgorCitoaSBkZWYgbGluawlmYXNtQWRkcmVzc1NpemVzCXR5cGUKK2hpIGRlZiBsaW5rCWZhc21OdW1lcmljT3BlcmF0b3IJZmFzbU9wZXJhdG9yCitoaSBkZWYgbGluawlmYXNtTG9naWNhbE9wZXJhdG9yCWZhc21PcGVyYXRvcgorCitoaSBkZWYgbGluawlmYXNtQmluYXJ5TnVtYmVyCWZhc21OdW1iZXIKK2hpIGRlZiBsaW5rCWZhc21IZXhOdW1iZXIJCWZhc21OdW1iZXIKK2hpIGRlZiBsaW5rCWZhc21GUFVOdW1iZXIJCWZhc21OdW1iZXIKK2hpIGRlZiBsaW5rCWZhc21PY3RhbE51bWJlcgkJZmFzbU51bWJlcgoraGkgZGVmIGxpbmsJZmFzbURlY2ltYWxOdW1iZXIJZmFzbU51bWJlcgorCitoaSBkZWYgbGluawlmYXNtU3ltYm9scwkJZmFzbVJlZ2lzdGVyCitoaSBkZWYgbGluawlmYXNtUHJlcHJvY2VzcwkJZmFzbURpcmVjdGl2ZQorCisiICBsaW5rIHRvIHN0YW5kYXJkIHN5biBncm91cHMgc28gdGhlICdjb2xvcnNjaGVtZXMnIHdvcms6CitoaSBkZWYgbGluawlmYXNtT3BlcmF0b3Igb3BlcmF0b3IKK2hpIGRlZiBsaW5rCWZhc21Db21tZW50ICBjb21tZW50CitoaSBkZWYgbGluawlmYXNtRGlyZWN0aXZlCXByZXByb2MKK2hpIGRlZiBsaW5rCWZhc21SZWdpc3RlciAgdHlwZQoraGkgZGVmIGxpbmsJZmFzbU51bWJlciAgIGNvbnN0YW50CitoaSBkZWYgbGluawlmYXNtU3ltYm9sIHN0cnVjdHVyZQoraGkgZGVmIGxpbmsJZmFzbVN0cmluZyAgU3RyaW5nCitoaSBkZWYgbGluawlmYXNtU3BlY2lhbAlzcGVjaWFsCitoaSBkZWYgbGluawlmYXNtSW5zdHIga2V5d29yZAoraGkgZGVmIGxpbmsJZmFzbUxhYmVsIGxhYmVsCitoaSBkZWYgbGluawlmYXNtUHJlZml4IHByZXByb2MKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImZhc20iCisiIHZpbTogdHM9OCBzdz04IDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2ZkY2MudmltIGIvcnVudGltZS9zeW50YXgvZmRjYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3MTdlYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2ZkY2MudmltCkBAIC0wLDAgKzEsMTE0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJZmRjYyBvciBsb2NhbGUgZmlsZXMKKyIgTWFpbnRhaW5lcjoJRHdheW5lIEJhaWxleSA8ZHdheW5lQHRyYW5zbGF0ZS5vcmcuemE+CisiIExhc3QgQ2hhbmdlOgkyMDA0IE1heSAxNgorIiBSZW1hcmtzOiAgICAgIEZEQ0MgKEZvcm1hbCBEZWZpbml0aW9ucyBvZiBDdWx0dXJhbCBDb252ZW50aW9ucykgc2VlIElTTyBUUiAxNDY1MgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBzeW5jIG1pbmxpbmVzPTE1MAorc2V0bG9jYWwgaXNrZXl3b3JkKz0tCisKKyIgTnVtYmVycworc3luIG1hdGNoIGZkY2NOdW1iZXIgL1swLTldKi8gY29udGFpbmVkCisKKyIgVW5pY29kZSBjb2RpbmdzIGFuZCBzdHJpbmdzCitzeW4gbWF0Y2ggZmRjY1VuaWNvZGVJblZhbGlkIC88W148XSo+LyBjb250YWluZWQKK3N5biBtYXRjaCBmZGNjVW5pY29kZVZhbGlkIC88VVswLTlBLUZdWzAtOUEtRl1bMC05QS1GXVswLTlBLUZdPi8gY29udGFpbmVkCitzeW4gcmVnaW9uIGZkY2NTdHJpbmcgc3RhcnQ9LyIvIGVuZD0vIi8gY29udGFpbnM9ZmRjY1VuaWNvZGVJblZhbGlkLGZkY2NVbmljb2RlVmFsaWQKKworIiBWYWxpZCBMQ18gS2V5d29yZHMKK3N5biBrZXl3b3JkIGZkY2NLZXl3b3JkIGVzY2FwZV9jaGFyIGNvbW1lbnRfY2hhcgorc3luIGtleXdvcmQgZmRjY0tleXdvcmRJZGVudGlmaWNhdGlvbiB0aXRsZSBzb3VyY2UgYWRkcmVzcyBjb250YWN0IGVtYWlsIHRlbCBmYXggbGFuZ3VhZ2UgdGVycml0b3J5IHJldmlzaW9uIGRhdGUgY2F0ZWdvcnkKK3N5biBrZXl3b3JkIGZkY2NLZXl3b3JkQ3R5cGUgY29weSBzcGFjZSB0cmFuc2xpdF9zdGFydCBpbmNsdWRlIHRyYW5zbGl0X2VuZCBvdXRkaWdpdCBjbGFzcworc3luIGtleXdvcmQgZmRjY0tleXdvcmRDb2xsYXRlIGNvcHkgc2NyaXB0IG9yZGVyX3N0YXJ0IG9yZGVyX2VuZCBjb2xsYXRpbmctc3ltYm9sIHJlb3JkZXItYWZ0ZXIgcmVvcmRlci1lbmQgY29sbGF0aW5nLWVsZW1lbnQgc3ltYm9sLWVxdWl2YWxlbmNlCitzeW4ga2V5d29yZCBmZGNjS2V5d29yZE1vbmV0YXJ5IGNvcHkgaW50X2N1cnJfc3ltYm9sIGN1cnJlbmN5X3N5bWJvbCBtb25fZGVjaW1hbF9wb2ludCBtb25fdGhvdXNhbmRzX3NlcCBtb25fZ3JvdXBpbmcgcG9zaXRpdmVfc2lnbiBuZWdhdGl2ZV9zaWduIGludF9mcmFjX2RpZ2l0cyBmcmFjX2RpZ2l0cyBwX2NzX3ByZWNlZGVzIHBfc2VwX2J5X3NwYWNlIG5fY3NfcHJlY2VkZXMgbl9zZXBfYnlfc3BhY2UgcF9zaWduX3Bvc24gbl9zaWduX3Bvc24gaW50X3BfY3NfcHJlY2VkZXMgaW50X3Bfc2VwX2J5X3NwYWNlIGludF9uX2NzX3ByZWNlZGVzIGludF9uX3NlcF9ieV9zcGFjZSAgaW50X3Bfc2lnbl9wb3NuIGludF9uX3NpZ25fcG9zbgorc3luIGtleXdvcmQgZmRjY0tleXdvcmROdW1lcmljIGNvcHkgZGVjaW1hbF9wb2ludCB0aG91c2FuZHNfc2VwIGdyb3VwaW5nCitzeW4ga2V5d29yZCBmZGNjS2V5d29yZFRpbWUgY29weSBhYmRheSBkYXkgYWJtb24gbW9uIGRfdF9mbXQgZF9mbXQgdF9mbXQgYW1fcG0gdF9mbXRfYW1wbSBkYXRlX2ZtdCBlcmFfZF9mbXQgZmlyc3Rfd2Vla2RheSBmaXJzdF93b3JrZGF5IHdlZWsgY2FsX2RpcmVjdGlvbiB0aW1lX3pvbmUgZXJhIGFsdF9kaWdpdHMgZXJhX2RfdF9mbXQKK3N5biBrZXl3b3JkIGZkY2NLZXl3b3JkTWVzc2FnZXMgY29weSB5ZXNleHByIG5vZXhwciB5ZXNzdHIgbm9zdHIKK3N5biBrZXl3b3JkIGZkY2NLZXl3b3JkUGFwZXIgY29weSBoZWlnaHQgd2lkdGgKK3N5biBrZXl3b3JkIGZkY2NLZXl3b3JkVGVsZXBob25lIGNvcHkgdGVsX2ludF9mbXQgaW50X3ByZWZpeCB0ZWxfZG9tX2ZtdCBpbnRfc2VsZWN0CitzeW4ga2V5d29yZCBmZGNjS2V5d29yZE1lYXN1cmVtZW50IGNvcHkgbWVhc3VyZW1lbnQKK3N5biBrZXl3b3JkIGZkY2NLZXl3b3JkTmFtZSBjb3B5IG5hbWVfZm10IG5hbWVfZ2VuIG5hbWVfbXIgbmFtZV9tcnMgbmFtZV9taXNzIG5hbWVfbXMKK3N5biBrZXl3b3JkIGZkY2NLZXl3b3JkQWRkcmVzcyBjb3B5IHBvc3RhbF9mbXQgY291bnRyeV9uYW1lIGNvdW50cnlfcG9zdCBjb3VudHJ5X2FiMiBjb3VudHJ5X2FiMyAgY291bnRyeV9udW0gY291bnRyeV9jYXIgIGNvdW50cnlfaXNibiBsYW5nX25hbWUgbGFuZ19hYiBsYW5nX3Rlcm0gbGFuZ19saWIKKworIiBDb21tZW50cworc3luIGtleXdvcmQgZmRjY1RvZG8gVE9ETyBGSVhNRSBjb250YWluZWQKK3N5biBtYXRjaCBmZGNjVmFyaWFibGUgLyVbYS16QS1aXS8gY29udGFpbmVkCitzeW4gbWF0Y2ggZmRjY0NvbW1lbnQgL1sjJV0uKi8gY29udGFpbnM9ZmRjY1RvZG8sZmRjY1ZhcmlhYmxlCisKKyIgTENfIEdyb3Vwcworc3luIHJlZ2lvbiBmZGNjQmxhbmsgbWF0Y2hncm91cD1mZGNjTENJZGVudGlmaWNhdGlvbiBzdGFydD0vXkxDX0lERU5USUZJQ0FUSU9OJC8gZW5kPS9eRU5EIExDX0lERU5USUZJQ0FUSU9OJC8gY29udGFpbnM9ZmRjY0tleXdvcmRJZGVudGlmaWNhdGlvbixmZGNjU3RyaW5nLGZkY2NDb21tZW50CitzeW4gcmVnaW9uIGZkY2NCbGFuayBtYXRjaGdyb3VwPWZkY2NMQ0N0eXBlIHN0YXJ0PS9eTENfQ1RZUEUkLyBlbmQ9L15FTkQgTENfQ1RZUEUkLyBjb250YWlucz1mZGNjS2V5d29yZEN0eXBlLGZkY2NTdHJpbmcsZmRjY0NvbW1lbnQsZmRjY1VuaWNvZGVJblZhbGlkLGZkY2NVbmljb2RlVmFsaWQKK3N5biByZWdpb24gZmRjY0JsYW5rIG1hdGNoZ3JvdXA9ZmRjY0xDQ29sbGF0ZSBzdGFydD0vXkxDX0NPTExBVEUkLyBlbmQ9L15FTkQgTENfQ09MTEFURSQvIGNvbnRhaW5zPWZkY2NLZXl3b3JkQ29sbGF0ZSxmZGNjU3RyaW5nLGZkY2NDb21tZW50LGZkY2NVbmljb2RlSW5WYWxpZCxmZGNjVW5pY29kZVZhbGlkCitzeW4gcmVnaW9uIGZkY2NCbGFuayBtYXRjaGdyb3VwPWZkY2NMQ01vbmV0YXJ5IHN0YXJ0PS9eTENfTU9ORVRBUlkkLyBlbmQ9L15FTkQgTENfTU9ORVRBUlkkLyBjb250YWlucz1mZGNjS2V5d29yZE1vbmV0YXJ5LGZkY2NTdHJpbmcsZmRjY0NvbW1lbnQsZmRjY051bWJlcgorc3luIHJlZ2lvbiBmZGNjQmxhbmsgbWF0Y2hncm91cD1mZGNjTENOdW1lcmljIHN0YXJ0PS9eTENfTlVNRVJJQyQvIGVuZD0vXkVORCBMQ19OVU1FUklDJC8gY29udGFpbnM9ZmRjY0tleXdvcmROdW1lcmljLGZkY2NTdHJpbmcsZmRjY0NvbW1lbnQsZmRjY051bWJlcgorc3luIHJlZ2lvbiBmZGNjQmxhbmsgbWF0Y2hncm91cD1mZGNjTENUaW1lIHN0YXJ0PS9eTENfVElNRSQvIGVuZD0vXkVORCBMQ19USU1FJC8gY29udGFpbnM9ZmRjY0tleXdvcmRUaW1lLGZkY2NTdHJpbmcsZmRjY0NvbW1lbnQsZmRjY051bWJlcgorc3luIHJlZ2lvbiBmZGNjQmxhbmsgbWF0Y2hncm91cD1mZGNjTENNZXNzYWdlcyBzdGFydD0vXkxDX01FU1NBR0VTJC8gZW5kPS9eRU5EIExDX01FU1NBR0VTJC8gY29udGFpbnM9ZmRjY0tleXdvcmRNZXNzYWdlcyxmZGNjU3RyaW5nLGZkY2NDb21tZW50CitzeW4gcmVnaW9uIGZkY2NCbGFuayBtYXRjaGdyb3VwPWZkY2NMQ1BhcGVyIHN0YXJ0PS9eTENfUEFQRVIkLyBlbmQ9L15FTkQgTENfUEFQRVIkLyBjb250YWlucz1mZGNjS2V5d29yZFBhcGVyLGZkY2NTdHJpbmcsZmRjY0NvbW1lbnQsZmRjY051bWJlcgorc3luIHJlZ2lvbiBmZGNjQmxhbmsgbWF0Y2hncm91cD1mZGNjTENUZWxlcGhvbmUgc3RhcnQ9L15MQ19URUxFUEhPTkUkLyBlbmQ9L15FTkQgTENfVEVMRVBIT05FJC8gY29udGFpbnM9ZmRjY0tleXdvcmRUZWxlcGhvbmUsZmRjY1N0cmluZyxmZGNjQ29tbWVudAorc3luIHJlZ2lvbiBmZGNjQmxhbmsgbWF0Y2hncm91cD1mZGNjTENNZWFzdXJlbWVudCBzdGFydD0vXkxDX01FQVNVUkVNRU5UJC8gZW5kPS9eRU5EIExDX01FQVNVUkVNRU5UJC8gY29udGFpbnM9ZmRjY0tleXdvcmRNZWFzdXJlbWVudCxmZGNjU3RyaW5nLGZkY2NDb21tZW50LGZkY2NOdW1iZXIKK3N5biByZWdpb24gZmRjY0JsYW5rIG1hdGNoZ3JvdXA9ZmRjY0xDTmFtZSBzdGFydD0vXkxDX05BTUUkLyBlbmQ9L15FTkQgTENfTkFNRSQvIGNvbnRhaW5zPWZkY2NLZXl3b3JkTmFtZSxmZGNjU3RyaW5nLGZkY2NDb21tZW50CitzeW4gcmVnaW9uIGZkY2NCbGFuayBtYXRjaGdyb3VwPWZkY2NMQ0FkZHJlc3Mgc3RhcnQ9L15MQ19BRERSRVNTJC8gZW5kPS9eRU5EIExDX0FERFJFU1MkLyBjb250YWlucz1mZGNjS2V5d29yZEFkZHJlc3MsZmRjY1N0cmluZyxmZGNjQ29tbWVudCxmZGNjTnVtYmVyCisKKworIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZmRjY19zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9mZGNjX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGZkY2NCbGFuawkJIEJsYW5rCisKKyAgSGlMaW5rIGZkY2NUb2RvCQkgVG9kbworICBIaUxpbmsgZmRjY0NvbW1lbnQJCSBDb21tZW50CisgIEhpTGluayBmZGNjVmFyaWFibGUJCSBUeXBlCisKKyAgSGlMaW5rIGZkY2NMQ0lkZW50aWZpY2F0aW9uCSBTdGF0ZW1lbnQKKyAgSGlMaW5rIGZkY2NMQ0N0eXBlCQkgU3RhdGVtZW50CisgIEhpTGluayBmZGNjTENDb2xsYXRlCQkgU3RhdGVtZW50CisgIEhpTGluayBmZGNjTENNb25ldGFyeQkJIFN0YXRlbWVudAorICBIaUxpbmsgZmRjY0xDTnVtZXJpYwkJIFN0YXRlbWVudAorICBIaUxpbmsgZmRjY0xDVGltZQkJIFN0YXRlbWVudAorICBIaUxpbmsgZmRjY0xDTWVzc2FnZXMJCSBTdGF0ZW1lbnQKKyAgSGlMaW5rIGZkY2NMQ1BhcGVyCQkgU3RhdGVtZW50CisgIEhpTGluayBmZGNjTENUZWxlcGhvbmUJIFN0YXRlbWVudAorICBIaUxpbmsgZmRjY0xDTWVhc3VyZW1lbnQJIFN0YXRlbWVudAorICBIaUxpbmsgZmRjY0xDTmFtZQkJIFN0YXRlbWVudAorICBIaUxpbmsgZmRjY0xDQWRkcmVzcwkJIFN0YXRlbWVudAorCisgIEhpTGluayBmZGNjVW5pY29kZUluVmFsaWQJIEVycm9yCisgIEhpTGluayBmZGNjVW5pY29kZVZhbGlkCSBTdHJpbmcKKyAgSGlMaW5rIGZkY2NTdHJpbmcJCSBTdHJpbmcKKyAgSGlMaW5rIGZkY2NOdW1iZXIJCSBCbGFuaworCisgIEhpTGluayBmZGNjS2V5d29yZElkZW50aWZpY2F0aW9uIGZkY2NLZXl3b3JkCisgIEhpTGluayBmZGNjS2V5d29yZEN0eXBlCSAgIGZkY2NLZXl3b3JkCisgIEhpTGluayBmZGNjS2V5d29yZENvbGxhdGUJICAgZmRjY0tleXdvcmQKKyAgSGlMaW5rIGZkY2NLZXl3b3JkTW9uZXRhcnkJICAgZmRjY0tleXdvcmQKKyAgSGlMaW5rIGZkY2NLZXl3b3JkTnVtZXJpYwkgICBmZGNjS2V5d29yZAorICBIaUxpbmsgZmRjY0tleXdvcmRUaW1lCSAgIGZkY2NLZXl3b3JkCisgIEhpTGluayBmZGNjS2V5d29yZE1lc3NhZ2VzCSAgIGZkY2NLZXl3b3JkCisgIEhpTGluayBmZGNjS2V5d29yZFBhcGVyCSAgIGZkY2NLZXl3b3JkCisgIEhpTGluayBmZGNjS2V5d29yZFRlbGVwaG9uZQkgICBmZGNjS2V5d29yZAorICBIaUxpbmsgZmRjY0tleXdvcmRNZWFzdXJlbWVudCAgICBmZGNjS2V5d29yZAorICBIaUxpbmsgZmRjY0tleXdvcmROYW1lCSAgIGZkY2NLZXl3b3JkCisgIEhpTGluayBmZGNjS2V5d29yZEFkZHJlc3MJICAgZmRjY0tleXdvcmQKKyAgSGlMaW5rIGZkY2NLZXl3b3JkCQkgICBJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImZkY2MiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9mZXRjaG1haWwudmltIGIvcnVudGltZS9zeW50YXgvZmV0Y2htYWlsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTg2ZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZmV0Y2htYWlsLnZpbQpAQCAtMCwwICsxLDg4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIGZldGNobWFpbCgxKSBSQyBGaWxlCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9zeW50YXgvcGNwL2ZldGNobWFpbC8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNS0wNgorIiBhcmNoLXRhZzoJICAgIDU5ZDhhZGFjLTZlNTktNDVmNi04OGNiLWY5YmExZTAwOWMxZgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiB0b2RvCitzeW4ga2V5d29yZCBmZXRjaG1haWxUb2RvCWNvbnRhaW5lZCBGSVhNRSBUT0RPIFhYWCBOT1RFCisKKyIgY29tbWVudHMKK3N5biByZWdpb24gIGZldGNobWFpbENvbW1lbnQJc3RhcnQ9IiMiIGVuZD0iJCIgY29udGFpbnM9ZmV0Y2htYWlsVG9kbworCisiIG51bWJlcnMKK3N5biBtYXRjaCAgIGZldGNobWFpbE51bWJlcgkiXDxcZFwrXD4iCisKKyIgc3RyaW5ncworc3luIHJlZ2lvbiAgZmV0Y2htYWlsU3RyaW5nCXN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9ZmV0Y2htYWlsU3RyaW5nRXNjCitzeW4gcmVnaW9uICBmZXRjaG1haWxTdHJpbmcJc3RhcnQ9KycrIHNraXA9K1xcXFxcfFxcJysgZW5kPSsnKyBjb250YWlucz1mZXRjaG1haWxTdHJpbmdFc2MKKworIiBlc2NhcGUgY2hhcmFjdGVycyBpbiBzdHJpbmdzCitzeW4gbWF0Y2ggICBmZXRjaG1haWxTdHJpbmdFc2MJIlxcXChbbnRiXVx8MFxkKlx8eFx4XCtcKSIKKworIiBzZXJ2ZXIgZW50cmllcworc3luIHJlZ2lvbiAgZmV0Y2htYWlsS2V5d29yZAl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWZldGNobWFpbEtleXdvcmQgc3RhcnQ9Ilw8cG9sbFx8c2tpcFx8ZGVmYXVsdHNcPiIgZW5kPSJcPHBvbGxcfHNraXBcfGRlZmF1bHRzXD4iIGNvbnRhaW5zPUFMTEJVVCxmZXRjaG1haWxPcHRpb25zLGZldGNobWFpbFNldAorCisiIHNlcnZlciBvcHRpb25zCitzeW4ga2V5d29yZCBmZXRjaG1haWxTZXJ2ZXJPcHRzCWNvbnRhaW5lZCB2aWEgcHJvdG9bY29sXSBsb2NhbFtkb21haW5zXSBwb3J0IGF1dGhbZW50aWNhdGVdCitzeW4ga2V5d29yZCBmZXRjaG1haWxTZXJ2ZXJPcHRzCWNvbnRhaW5lZCB0aW1lb3V0IGVudmVsb3BlIHF2aXJ0dWFsIGFrYSBpbnRlcmZhY2UgbW9uaXRvcgorc3luIGtleXdvcmQgZmV0Y2htYWlsU2VydmVyT3B0cwljb250YWluZWQgcGx1Z2luIHBsdWdvdXQgZG5zIGNoZWNrYWxpYXMgdWlkbCBpbnRlcnZhbCBuZXRzZWMKK3N5biBrZXl3b3JkIGZldGNobWFpbFNlcnZlck9wdHMJY29udGFpbmVkIHByaW5jaXBhbCBlc210cG5hbWUgZXNtdHBwYXNzd29yZAorc3luIG1hdGNoICAgZmV0Y2htYWlsU2VydmVyT3B0cwljb250YWluZWQgIlw8bm9cX3NcK1woZW52ZWxvcGVcfGRuc1x8Y2hlY2thbGlhc1x8dWlkbFwpIgorCisiIHVzZXIgb3B0aW9ucworc3luIGtleXdvcmQgZmV0Y2htYWlsVXNlck9wdHMJY29udGFpbmVkIHVzZXJbbmFtZV0gaXMgdG8gcGFzc1t3b3JkXSBzc2wgc3NsY2VydCBzc2xrZXkgc3NscHJvdG8gZm9sZGVyCitzeW4ga2V5d29yZCBmZXRjaG1haWxVc2VyT3B0cwljb250YWluZWQgc210cGhvc3QgZmV0Y2hkb21haW5zIHNtdHBhZGRyZXNzIHNtdHBuYW1lIGFudGlzcGFtIG1kYSBic210cAorc3luIGtleXdvcmQgZmV0Y2htYWlsVXNlck9wdHMJY29udGFpbmVkIHByZWNvbm5lY3QgcG9zdGNvbm5lY3Qga2VlcCBmbHVzaCBmZXRjaGFsbCByZXdyaXRlIHN0cmlwY3IKK3N5biBrZXl3b3JkIGZldGNobWFpbFVzZXJPcHRzCWNvbnRhaW5lZCBmb3JjZWNyIHBhc3M4Yml0cyBkcm9wc3RhdHVzIGRyb3BkZWxpdmVyZWQgbWltZWRlY29kZSBpZGxlCitzeW4ga2V5d29yZCBmZXRjaG1haWxVc2VyT3B0cwljb250YWluZWQgbGltaXQgd2FybmluZ3MgYmF0Y2hsaW1pdCBmZXRjaGxpbWl0IGV4cHVuZ2UgdHJhY2Vwb2xscyBwcm9wZXJ0aWVzCitzeW4gbWF0Y2ggICBmZXRjaG1haWxVc2VyT3B0cwljb250YWluZWQgIlw8bm9cX3NcK1woa2VlcFx8Zmx1c2hcfGZldGNoYWxsXHxyZXdyaXRlXHxzdHJpcGNyXHxmb3JjZWNyXHxwYXNzOGJpdHNcfGRyb3BzdGF0dXNcfGRyb3BkZWxpdmVyZWRcfG1pbWVkZWNvZGVcfG5vaWRsZVwpIgorCitzeW4ga2V5d29yZCBmZXRjaG1haWxTcGVjaWFsCWNvbnRhaW5lZCBoZXJlIHRoZXJlCisKKworIiBub2lzZSBrZXl3b3Jkcworc3luIGtleXdvcmQgZmV0Y2htYWlsTm9pc2UJYW5kIHdpdGggaGFzIHdhbnRzIG9wdGlvbnMKK3N5biBtYXRjaCAgIGZldGNobWFpbE5vaXNlCSJbOjssXSIKKworIiBvcHRpb25zCitzeW4ga2V5d29yZCBmZXRjaG1haWxTZXQJbmV4dGdyb3VwPWZldGNobWFpbE9wdGlvbnMgc2tpcHdoaXRlIHNraXBubCBzZXQKKworc3luIGtleXdvcmQgZmV0Y2htYWlsT3B0aW9ucwlkYWVtb24gcG9zdG1hc3RlciBib3VuY2VtYWlsIHNwYW1ib3VuY2UgbG9nZmlsZSBpZGZpbGUgc3lzbG9nIG5vc3lzbG9nIHByb3BlcnRpZXMKK3N5biBtYXRjaCAgIGZldGNobWFpbE9wdGlvbnMJIlw8bm9cX3NcK1woYm91bmNlbWFpbFx8c3BhbWJvdW5jZVwpIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9mZXRjaG1haWxfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZmV0Y2htYWlsX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGZldGNobWFpbENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgZmV0Y2htYWlsVG9kbwlUb2RvCisgIEhpTGluayBmZXRjaG1haWxOdW1iZXIJTnVtYmVyCisgIEhpTGluayBmZXRjaG1haWxTdHJpbmcJU3RyaW5nCisgIEhpTGluayBmZXRjaG1haWxTdHJpbmdFc2MJU3BlY2lhbENoYXIKKyAgSGlMaW5rIGZldGNobWFpbEtleXdvcmQJS2V5d29yZAorICBIaUxpbmsgZmV0Y2htYWlsU2VydmVyT3B0cwlJZGVudGlmaWVyCisgIEhpTGluayBmZXRjaG1haWxVc2VyT3B0cwlJZGVudGlmaWVyCisgIEhpTGluayBmZXRjaG1haWxTcGVjaWFsCVNwZWNpYWwKKyAgSGlMaW5rIGZldGNobWFpbFNldAkJS2V5d29yZAorICBIaUxpbmsgZmV0Y2htYWlsT3B0aW9ucwlJZGVudGlmaWVyCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJmZXRjaG1haWwiCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2ZnbC52aW0gYi9ydW50aW1lL3N5bnRheC9mZ2wudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmZlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9mZ2wudmltCkBAIC0wLDAgKzEsMTQ3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJSW5mb3JtaXggNEdMCisiIE1haW50YWluZXI6CVJhZmFsIE0uIFN1bGVqbWFuIDxybXNAcG9jenRhLm9uZXQucGw+CisiIFVwZGF0ZToJMjYgU2VwIDIwMDIKKyIgQ2hhbmdlczoKKyIgLSBEeW5hbWljIDRHTC9Gb3VySnMvNEdMIDcuMzAgcHNldWRvIGNvbW1lbnQgZGlyZWN0aXZlcyAoSnVsaWFuIEJyaWRsZSkKKyIgLSBDb25kaXRpb25hbGx5IGFsbG93IGNhc2UgaW5zZW5zaXRpdmUga2V5d29yZHMgKEp1bGlhbiBCcmlkbGUpCisiCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgZXhpc3RzKCJmZ2xfaWdub3JlX2Nhc2UiKQorICBzeW50YXggY2FzZSBpZ25vcmUKK2Vsc2UKKyAgc3ludGF4IGNhc2UgbWF0Y2gKK2VuZGlmCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIEFCT1JUIEFCUyBBQlNPTFVURSBBQ0NFUFQgQUNDRVNTIEFDT1MgQUREIEFGVEVSIEFMTAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBBTExPQ0FURSBBTFRFUiBBTkQgQU5TSSBBTlkgQVBQRU5EIEFSR19WQUwgQVJSQVkgQVJSX0NPVU5UCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIEFSUl9DVVJSIEFTIEFTQyBBU0NFTkRJTkcgQVNDSUkgQVNJTiBBVCBBVEFOIEFUQU4yIEFUVEFDSAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBBVFRSSUJVVEUgQVRUUklCVVRFUyBBVURJVCBBVVRIT1JJWkFUSU9OIEFVVE8gQVVUT05FWFQgQVZFUkFHRSBBVkcKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgQkVGT1JFIEJFR0lOIEJFVFdFRU4gQkxBQ0sgQkxJTksgQkxVRSBCT0xEIEJPUkRFUiBCT1RIIEJPVFRPTQorc3luIGtleXdvcmQgZmdsS2V5d29yZCBCUkVBSyBCVUZGRVJFRCBCWSBCWVRFCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIENBTEwgQ0FTQ0FERSBDQVNFIENIQVIgQ0hBUkFDVEVSIENIQVJBQ1RFUl9MRU5HVEggQ0hBUl9MRU5HVEgKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgQ0hFQ0sgQ0xBU1NfT1JJR0lOIENMRUFSIENMSVBQRUQgQ0xPU0UgQ0xVU1RFUiBDT0xPUgorc3luIGtleXdvcmQgZmdsS2V5d29yZCBDT0xVTU4gQ09MVU1OUyBDT01NQU5EIENPTU1FTlQgQ09NTUVOVFMgQ09NTUlUIENPTU1JVFRFRAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBDT01QT1NJVEVTIENPTVBSRVNTIENPTkNVUlJFTlQgQ09OTkVDVCBDT05ORUNUSU9OCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIENPTk5FQ1RJT05fQUxJQVMgQ09OU1RSQUlORUQgQ09OU1RSQUlOVCBDT05TVFJBSU5UUyBDT05TVFJVQ1QKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgQ09OVElOVUUgQ09OVFJPTCBDT1MgQ09VTlQgQ1JFQVRFIENVUlJFTlQgQ1VSU09SIENZQU4KK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgREFUQSBEQVRBQkFTRSBEQVRBU0tJUCBEQVRFIERBVEVUSU1FIERBWSBEQkEgREJJTkZPIERCU0VSVkVSTkFNRQorc3luIGtleXdvcmQgZmdsS2V5d29yZCBERUFMTE9DQVRFIERFQlVHIERFQyBERUNJTUFMIERFQ0xBUkUgREVGQVVMVCBERUZBVUxUUyBERUZFUgorc3luIGtleXdvcmQgZmdsS2V5d29yZCBERUZFUlJFRCBERUZJTkUgREVMRVRFIERFTElNSVRFUiBERUxJTUlURVJTIERFU0MgREVTQ0VORElORworc3luIGtleXdvcmQgZmdsS2V5d29yZCBERVNDUklCRSBERVNDUklQVE9SIERFVEFDSCBESUFHTk9TVElDUyBESU0gRElSVFkgRElTQUJMRUQKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgRElTQ09OTkVDVCBESVNQTEFZIERJU1RJTkNUIERJU1RSSUJVVElPTlMgRE8gRE9STUFOVCBET1VCTEUKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgRE9XTiBET1dOU0hJRlQgRFJPUAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBFQUNIIEVMSUYgRUxTRSBFTkFCTEVEIEVORCBFTlRSWSBFUlJPUiBFUlJPUkxPRyBFUlJfR0VUCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIEVSUl9QUklOVCBFUlJfUVVJVCBFU0MgRVNDQVBFIEVWRVJZIEVYQ0VQVElPTiBFWENMVVNJVkUKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgRVhFQyBFWEVDVVRFIEVYSVNUUyBFWElUIEVYUCBFWFBMQUlOIEVYUFJFU1NJT04gRVhURU5EIEVYVEVOVAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBFWFRFUk4gRVhURVJOQUwKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgRjEgRjEwIEYxMSBGMTIgRjEzIEYxNCBGMTUgRjE2IEYxNyBGMTggRjE5IEYyIEYyMCBGMjEgRjIyIEYyMworc3luIGtleXdvcmQgZmdsS2V5d29yZCBGMjQgRjI1IEYyNiBGMjcgRjI4IEYyOSBGMyBGMzAgRjMxIEYzMiBGMzMgRjM0IEYzNSBGMzYgRjM3IEYzOAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBGMzkgRjQgRjQwIEY0MSBGNDIgRjQzIEY0NCBGNDUgRjQ2IEY0NyBGNDggRjQ5IEY1IEY1MCBGNTEgRjUyCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIEY1MyBGNTQgRjU1IEY1NiBGNTcgRjU4IEY1OSBGNiBGNjAgRjYxIEY2MiBGNjMgRjY0IEY3IEY4IEY5CitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIEZBTFNFIEZFVENIIEZHTF9HRVRFTlYgRkdMX0tFWVZBTCBGR0xfTEFTVEtFWSBGSUVMRCBGSUVMRF9UT1VDSEVECitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIEZJTEUgRklMTEZBQ1RPUiBGSUxURVJJTkcgRklOSVNIIEZJUlNUIEZMT0FUIEZMVVNIIEZPUgorc3luIGtleXdvcmQgZmdsS2V5d29yZCBGT1JFQUNIIEZPUkVJR04gRk9STSBGT1JNQVQgRk9STU9OTFkgRk9SVFJBTiBGT1VORCBGUkFDVElPTgorc3luIGtleXdvcmQgZmdsS2V5d29yZCBGUkFHTUVOVCBGUkVFIEZST00gRlVOQ1RJT04gR0VUX0ZMREJVRiBHTE9CQUwgR0xPQkFMUyBHTyBHT1RPCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIEdSQU5UIEdSRUVOIEdST1VQIEhBVklORyBIRUFERVIgSEVMUCBIRVggSElERSBISUdIIEhPTEQgSE9VUgorc3luIGtleXdvcmQgZmdsS2V5d29yZCBJREFUQSBJRiBJTEVOR1RIIElNTUVESUFURSBJTiBJTkNMVURFIElOREVYIElOREVYRVMgSU5ESUNBVE9SCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIElORklFTEQgSU5JVCBJTklUSUFMSVpFIElOUFVUIElOU0VSVCBJTlNUUlVDVElPTlMgSU5UIElOVEVHRVIKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgSU5URVJSVVBUIElOVEVSVkFMIElOVE8gSU5UX0ZMQUcgSU5WSVNJQkxFIElTIElTQU0gSVNPTEFUSU9OCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIElUWVBFCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIEtFWSBMQUJFTAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBMQU5HVUFHRSBMQVNUIExFQURJTkcgTEVGVCBMRU5HVEggTEVUIExJS0UgTElORQorc3luIGtleXdvcmQgZmdsS2V5d29yZCBMSU5FTk8gTElORVMgTE9BRCBMT0NBVEUgTE9DSyBMT0cgTE9HMTAgTE9HTiBMT05HIExPVworc3luIGtleXdvcmQgZmdsS2V5d29yZCBNQUdFTlRBIE1BSU4gTUFSR0lOIE1BVENIRVMgTUFYIE1EWSBNRURJVU0gTUVNT1JZIE1FTlUgTUVTU0FHRQorc3luIGtleXdvcmQgZmdsS2V5d29yZCBNRVNTQUdFX0xFTkdUSCBNRVNTQUdFX1RFWFQgTUlOIE1JTlVURSBNT0QgTU9ERSBNT0RJRlkgTU9EVUxFCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIE1PTkVZIE1PTlRIIE1PUkUKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgTkFNRSBOQ0hBUiBORUVEIE5FVyBORVhUIE5FWFRQQUdFIE5PIE5PQ1IgTk9FTlRSWSBOT05FIE5PUk1BTAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBOT1QgTk9URk9VTkQgTlVMTCBOVUxMQUJMRSBOVU1CRVIgTlVNRVJJQyBOVU1fQVJHUyBOVkFSQ0hBUgorc3luIGtleXdvcmQgZmdsS2V5d29yZCBPQ1RFVF9MRU5HVEggT0YgT0ZGIE9MRCBPTiBPTkxZIE9QRU4gT1BUSU1JWkFUSU9OIE9QVElPTiBPUFRJT05TCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIE9SIE9SREVSIE9USEVSV0lTRSBPVVRFUiBPVVRQVVQKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgUEFHRSBQQUdFTk8gUEFVU0UgUERRUFJJT1JJVFkgUEVSQ0VOVCBQSUNUVVJFIFBJUEUgUE9XIFBSRUNJU0lPTgorc3luIGtleXdvcmQgZmdsS2V5d29yZCBQUkVQQVJFIFBSRVZJT1VTIFBSRVZQQUdFIFBSSU1BUlkgUFJJTlQgUFJJTlRFUiBQUklPUiBQUklWQVRFCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFBSSVZJTEVHRVMgUFJPQ0VEVVJFIFBST0dSQU0gUFJPTVBUIFBVQkxJQyBQVVQKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgUVVJVCBRVUlUX0ZMQUcKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgUkFJU0UgUkFOR0UgUkVBRCBSRUFET05MWSBSRUFMIFJFQ09SRCBSRUNPVkVSIFJFRCBSRUZFUkVOQ0VTCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFJFRkVSRU5DSU5HIFJFR0lTVEVSIFJFTEFUSVZFIFJFTUFJTkRFUiBSRU1PVkUgUkVOQU1FIFJFT1BUSU1JWkFUSU9OCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFJFUEVBVEFCTEUgUkVQT1JUIFJFUVVJUkVEIFJFU09MVVRJT04gUkVTT1VSQ0UgUkVTVFJJQ1QKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgUkVTVU1FIFJFVFVSTiBSRVRVUk5FRF9TUUxTVEFURSBSRVRVUk5JTkcgUkVWRVJTRSBSRVZPS0UgUklHSFQKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgUk9CSU4gUk9MRSBST0xMQkFDSyBST0xMRk9SV0FSRCBST09UIFJPVU5EIFJPVyBST1dJRCBST1dJRFMKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgUk9XUyBST1dfQ09VTlQgUlVOCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFNDQUxFIFNDSEVNQSBTQ1JFRU4gU0NST0xMIFNDUl9MSU5FIFNFQ09ORCBTRUNUSU9OIFNFTEVDVAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBTRVJJQUwgU0VSSUFMSVpBQkxFIFNFUlZFUl9OQU1FIFNFU1NJT04gU0VUIFNFVF9DT1VOVCBTSEFSRQorc3luIGtleXdvcmQgZmdsS2V5d29yZCBTSE9SVCBTSE9XIFNJVEVOQU1FIFNJWkUgU0laRU9GIFNLSVAgU0xFRVAgU01BTExGTE9BVCBTTUFMTElOVAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBTT01FIFNQQUNFIFNQQUNFUyBTUUwgU1FMQVdBUk4gU1FMQ0EgU1FMQ09ERSBTUUxFUlJEIFNRTEVSUk0KK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgU1FMRVJST1IgU1FMRVJSUCBTUUxTVEFURSBTUUxXQVJOSU5HIFNRUlQgU1RBQklMSVRZIFNUQVJUCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFNUQVJUTE9HIFNUQVRJQyBTVEFUSVNUSUNTIFNUQVRVUyBTVERFViBTVEVQIFNUT1AgU1RSSU5HIFNUUlVDVAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBTVUJDTEFTU19PUklHSU4gU1VNIFNXSVRDSCBTWU5PTllNIFNZU1RFTQorc3luIGtleXdvcmQgZmdsS2V5d29yZCBTeXNCbG9icyBTeXNDaGVja3MgU3lzQ29sQXV0aCBTeXNDb2xEZXBlbmQgU3lzQ29sdW1ucworc3luIGtleXdvcmQgZmdsS2V5d29yZCBTeXNDb25zdHJhaW50cyBTeXNEZWZhdWx0cyBTeXNEZXBlbmQgU3lzRGlzdHJpYiBTeXNGcmFnQXV0aAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBTeXNGcmFnbWVudHMgU3lzSW5kZXhlcyBTeXNPYmpTdGF0ZSBTeXNPcENsc3RyIFN5c1Byb2NBdXRoCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFN5c1Byb2NCb2R5IFN5c1Byb2NQbGFuIFN5c1Byb2NlZHVyZXMgU3lzUmVmZXJlbmNlcyBTeXNSb2xlQXV0aAorc3luIGtleXdvcmQgZmdsS2V5d29yZCBTeXNTeW5UYWJsZSBTeXNTeW5vbnltcyBTeXNUYWJBdXRoIFN5c1RhYmxlcyBTeXNUcmlnQm9keQorc3luIGtleXdvcmQgZmdsS2V5d29yZCBTeXNUcmlnZ2VycyBTeXNVc2VycyBTeXNWaWV3cyBTeXNWaW9sYXRpb25zCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFRBQiBUQUJMRSBUQUJMRVMgVEFOIFRFTVAgVEVYVCBUSEVOIFRIUk9VR0ggVEhSVSBUSU1FIFRPCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFRPREFZIFRPUCBUT1RBTCBUUkFDRSBUUkFJTEVSIFRSQUlMSU5HIFRSQU5TQUNUSU9OIFRSSUdHRVIKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgVFJJR0dFUlMgVFJJTSBUUlVFIFRSVU5DIFRZUEUgVFlQRURFRgorc3luIGtleXdvcmQgZmdsS2V5d29yZCBVTkNPTU1JVFRFRCBVTkNPTlNUUkFJTkVEIFVOREVSTElORSBVTklPTiBVTklRVUUgVU5JVFMgVU5MT0FECitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFVOTE9DSyBVTlNJR05FRCBVUCBVUERBVEUgVVBTSElGVCBVU0VSIFVTSU5HCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFZBTElEQVRFIFZBTFVFIFZBTFVFUyBWQVJDSEFSIFZBUklBQkxFUyBWQVJJQU5DRSBWQVJZSU5HCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFZFUklGWSBWSUVXIFZJT0xBVElPTlMKK3N5biBrZXl3b3JkIGZnbEtleXdvcmQgV0FJVCBXQUlUSU5HIFdBUk5JTkcgV0VFS0RBWSBXSEVOIFdIRU5FVkVSIFdIRVJFIFdISUxFIFdISVRFCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFdJTkRPVyBXSVRIIFdJVEhPVVQgV09SRFdSQVAgV09SSyBXUkFQIFdSSVRFCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFlFQVIgWUVMTE9XCitzeW4ga2V5d29yZCBmZ2xLZXl3b3JkIFpFUk9GSUxMCisKKyIgU3RyaW5ncyBhbmQgY2hhcmFjdGVyczoKK3N5biByZWdpb24gZmdsU3RyaW5nCQlzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisKK3N5biByZWdpb24gZmdsU3RyaW5nCQlzdGFydD0rJysgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rJysKKworIiBOdW1iZXJzOgorc3luIG1hdGNoIGZnbE51bWJlcgkJIi1cPVw8WzAtOV0qXC5cPVswLTlfXVw+IgorCisiIENvbW1lbnRzOgorc3luIHJlZ2lvbiBmZ2xDb21tZW50ICAgIHN0YXJ0PSJ7IiAgZW5kPSJ9Igorc3luIG1hdGNoIGZnbENvbW1lbnQJIi0tLioiCitzeW4gbWF0Y2ggZmdsQ29tbWVudAkiIy4qIgorCisiIE5vdCBhIGNvbW1lbnQgZXZlbiB0aG91Z2ggaXQgbG9va3MgbGlrZSBvbmUgKER5bmFtaWMgNEdML0ZvdXJKcyBkaXJlY3RpdmUpCitzeW4gbWF0Y2ggZmdsU3BlY2lhbAkiLS0jIgorc3luIG1hdGNoIGZnbFNwZWNpYWwJIi0tQCIKKworc3luIHN5bmMgY2NvbW1lbnQgZmdsQ29tbWVudAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9mZ2xfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZmdsX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGZnbENvbW1lbnQJQ29tbWVudAorICAiSGlMaW5rIGZnbEtleXdvcmQJZmdsU3BlY2lhbAorICBIaUxpbmsgZmdsS2V5d29yZAlmZ2xTdGF0ZW1lbnQKKyAgSGlMaW5rIGZnbE51bWJlcglOdW1iZXIKKyAgSGlMaW5rIGZnbE9wZXJhdG9yCWZnbFN0YXRlbWVudAorICBIaUxpbmsgZmdsU3BlY2lhbAlTcGVjaWFsCisgIEhpTGluayBmZ2xTdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluayBmZ2xTdHJpbmcJU3RyaW5nCisgIEhpTGluayBmZ2xUeXBlCVR5cGUKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZmdsIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZm9jZXhlYy52aW0gYi9ydW50aW1lL3N5bnRheC9mb2NleGVjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRjMzdlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZm9jZXhlYy52aW0KQEAgLTAsMCArMSwxMDEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglGb2N1cyBFeGVjdXRhYmxlCisiIE1haW50YWluZXI6CVJvYiBCcmFkeSA8cm9iYkBkYXRhdG9uZS5jb20+CisiIExhc3QgQ2hhbmdlOgkkRGF0ZSQKKyIgVVJMOgkJaHR0cDovL3d3dy5kYXRhdG9uZS5jb20vfnJvYmIvdmltL3N5bnRheC9mb2NleGVjLnZpbQorIiAkUmV2aXNpb24kCisKKyIgdGhpcyBpcyBhIHZlcnkgc2ltcGxlIHN5bnRheCBmaWxlIC0gSSB3aWxsIGJlIGltcHJvdmluZyBpdAorIiBvbmUgdGhpbmcgaXMgaG93IHRvIGRvIGNvbXB1dGVzCisiIEkgZG9uJ3QgbGlrZSB0aGF0ICZ2YXJzIGFuZCBGVVNFKCkgZnVuY3Rpb25zIGhpZ2hsaWdodCB0byB0aGUgc2FtZSBjb2xvcgorIiBJIHRoaW5rIHNvbWUgb2YgdGhlc2UgdGhpbmdzIHNob3VsZCBnZXQgZGlmZmVyZW50IGhpbGlnaHRzIC0KKyIgIHNob3VsZCBNT0RJRlkgY29tbWFuZHMgbG9vayBkaWZmZXJlbnQgdGhhbiBUQUJMRT8KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBtYXRjaAorCisiIEEgYnVuY2ggb2YgdXNlZnVsIGtleXdvcmRzCitzeW4ga2V5d29yZCBmb2NleGVjVGFibGUJVEFCTEUgU1VNIEJZIEFDUk9TUyBFTkQgUFJJTlQgSE9MRCBMSVNUIE5PUFJJTlQKK3N5biBrZXl3b3JkIGZvY2V4ZWNUYWJsZQlTVUJGT09UIFNVQkhFQUQgSEVBRElORyBGT09USU5HIFBBR0UtQlJFQUsgQVMKK3N5biBrZXl3b3JkIGZvY2V4ZWNUYWJsZQlXSEVSRSBBTkQgT1IgTk9TUExJVCBGT1JNQVQKK3N5biBrZXl3b3JkIGZvY2V4ZWNNb2RpZnkJTU9ESUZZIERBVEEgT04gRklYRk9STSBQUk9NUFQgTUFUQ0ggQ09NUFVURQorc3luIGtleXdvcmQgZm9jZXhlY01vZGlmeQlHT1RPIENBU0UgRU5EQ0FTRSBUWVBFIE5PTUFUQ0ggUkVKRUNUIElOQ0xVREUKK3N5biBrZXl3b3JkIGZvY2V4ZWNNb2RpZnkJQ09OVElOVUUgRlJPTQorc3luIGtleXdvcmQgZm9jZXhlY05vcm1hbAlDSEVDSyBGSUxFIENSRUFURSBFWCBTRVQgSUYgRklMRURFRiBERUZJTkUKK3N5biBrZXl3b3JkIGZvY2V4ZWNOb3JtYWwJUkVCVUlMRCBJRiBSRUNPUkRMSU1JVCBGSSBFUSBKT0lOCitzeW4ga2V5d29yZCBmb2NleGVjSm9pbgkJSU4gVE8KK3N5biBrZXl3b3JkIGZvY2V4ZWNGaWxlRGVmCURJU0sKK3N5biBrZXl3b3JkIGZvY2V4ZWNTZXQJCU1TRyBBTEwKK3N5biBtYXRjaCAgIGZvY2V4ZWNEYXNoCQkiLVJVTiIKK3N5biBtYXRjaCAgIGZvY2V4ZWNEYXNoCQkiLVBST01QVCIKK3N5biBtYXRjaCAgIGZvY2V4ZWNEYXNoCQkiLVdJTkZPUk0iCisKKyIgU3RyaW5nIGFuZCBDaGFyYWN0ZXIgY29uc3RhbnRzCitzeW4gcmVnaW9uICBmb2NleGVjU3RyaW5nMQlzdGFydD0rIisgZW5kPSsiKworc3luIHJlZ2lvbiAgZm9jZXhlY1N0cmluZzIJc3RhcnQ9KycrIGVuZD0rJysKKworImFtcGVyIHZhcmlhYmxlcworc3luIG1hdGNoICAgZm9jZXhlY0FtcGVyVmFyCSImJlw9W0EtWl9dXCsiCisKKyJmdXNlIGZ1bmN0aW9ucworc3luIGtleXdvcmQgZm9jZXhlY0Z1c2UgR0VUVVNFUiBHRVRVU1IgV0hPQU1JIEZFWEVSUiBBU0lTIEdFVFRPSyBVUENBU0UgTE9DQVNFCitzeW4ga2V5d29yZCBmb2NleGVjRnVzZSBTVUJTVFIgVE9EQVkgVE9EQVlJIFBPU0lUIEhITU1TUyBCWVRWQUwgRURBVVQxIEJJVFZBTAorc3luIGtleXdvcmQgZm9jZXhlY0Z1c2UgQklUU09OIEZHRVRFTlYgRlBVVEVOViBIRVhCWVQgU1BBV04gWU0gWU1JIEpVTERBVAorc3luIGtleXdvcmQgZm9jZXhlY0Z1c2UgSlVMREFUSSBET1dLIERPV0tJIERPV0tMSSBDSEdEQVQgQ0hHREFUSSBGVE9BIEFUT0RCTAorc3luIGtleXdvcmQgZm9jZXhlY0Z1c2UgU09VTkRFWCBSSlVTVCBSRVZFUlNFIFBBUkFHIE9WUkxBWSBMSlVTVCBDVFJGTEQgQ1RSQU4KK3N5biBrZXl3b3JkIGZvY2V4ZWNGdXNlIENIS0ZNVCBBUkdMRU4gR1JFR0RUIEdSRUdEVEkgRFRZTUQgRFRZTURJIERURE1ZIERURE1ZSQorc3luIGtleXdvcmQgZm9jZXhlY0Z1c2UgRFRZRE0gRFRZRE1JIERUTVlEIERUTVlESSBEVERZTSBEVERZTUkgREFZTUQgREFZTURJCitzeW4ga2V5d29yZCBmb2NleGVjRnVzZSBEQU1EWSBEQU1EWUkgREFETVkgREFETVlJIEFZTSBBWU1JIEFZTUQgQVlNREkgQ0hLUENLCitzeW4ga2V5d29yZCBmb2NleGVjRnVzZSBJTU9EIEZNT0QgRE1PRCBQQ0tPVVQgRVhQIEJBUiBTUEVMTE5NIFNQRUxMTlVNIFJUQ0lWUAorc3luIGtleXdvcmQgZm9jZXhlY0Z1c2UgUFJEVU5JIFBSRE5PUiBSRE5PUk0gUkRVTklGIExDV09SRCBJVE9aIFJMUEhMRCBJQklQUk8KK3N5biBrZXl3b3JkIGZvY2V4ZWNGdXNlIElCSVBSVyBJQklQUkMgSUJJUFJVIElCSVJDUCBQVEhEQVQgSVRPUEFDSyBJVE9OVU0KK3N5biBrZXl3b3JkIGZvY2V4ZWNGdXNlIERTTUVYRUMgRFNNRVZBTCBEU01FUlJDIE1TTUVYRUMgTVNNRVZBTCBNU01FUlJDIEVYVERYSQorc3luIGtleXdvcmQgZm9jZXhlY0Z1c2UgQkFBTkhBU0ggRURBWVNJIERUT0cgR1RPRCBIU0VUUFQgSFBBUlQgSFRJTUUgSE5BTUUKK3N5biBrZXl3b3JkIGZvY2V4ZWNGdXNlIEhBREQgSERJRkYgSERBVEUgSEdFVEMgSENOVlJUIEhEVFRNIEhNSUROVCBURU1QUEFUSAorc3luIGtleXdvcmQgZm9jZXhlY0Z1c2UgREFURUFERCBEQVRFRElGIERBVEVNT1YgREFURUNWVCBFVVJITEQgRVVSWENIIEZJTkRGT0MKK3N5biBrZXl3b3JkIGZvY2V4ZWNGdXNlIEZFUlJNRVMgQ05DVFVTUiBDVVJSUEFUSCBVU0VSUEFUSCBTWVNURU0gQVNLWU4KK3N5biBrZXl3b3JkIGZvY2V4ZWNGdXNlIEZVU0VNRU5VIFBPUEVESVQgUE9QRklMRQorCitzeW4gbWF0Y2ggICBmb2NleGVjTnVtYmVyCSJcPFxkXCtcPiIKK3N5biBtYXRjaCAgIGZvY2V4ZWNOdW1iZXIJIlw8XGRcK1wuXGQqXD4iCisKK3N5biBtYXRjaCAgIGZvY2V4ZWNDb21tZW50CSItXCouKiIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZm9jZXhlY19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9mb2NleGVjX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGZvY2V4ZWNTdHJpbmcxCQlTdHJpbmcKKyAgSGlMaW5rIGZvY2V4ZWNTdHJpbmcyCQlTdHJpbmcKKyAgSGlMaW5rIGZvY2V4ZWNOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgZm9jZXhlY0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGZvY2V4ZWNUYWJsZQkJS2V5d29yZAorICBIaUxpbmsgZm9jZXhlY01vZGlmeQkJS2V5d29yZAorICBIaUxpbmsgZm9jZXhlY05vcm1hbAkJS2V5d29yZAorICBIaUxpbmsgZm9jZXhlY1NldAkJS2V5d29yZAorICBIaUxpbmsgZm9jZXhlY0Rhc2gJCUtleXdvcmQKKyAgSGlMaW5rIGZvY2V4ZWNGaWxlRGVmCQlLZXl3b3JkCisgIEhpTGluayBmb2NleGVjSm9pbgkJS2V5d29yZAorICBIaUxpbmsgZm9jZXhlY0FtcGVyVmFyCUlkZW50aWZpZXIKKyAgSGlMaW5rIGZvY2V4ZWNGdXNlCQlGdW5jdGlvbgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJmb2NleGVjIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZm9ybS52aW0gYi9ydW50aW1lL3N5bnRheC9mb3JtLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjZiZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZm9ybS52aW0KQEAgLTAsMCArMSwxMDEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglGT1JNCisiIE1haW50YWluZXI6CU1pY2hhZWwgTS4gVHVuZyA8bWljaGFlbC50dW5nQHVuaS1tYWluei5kZT4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWF5IDEwCisKKyIgRmlyc3QgcHVibGljIHJlbGVhc2UgYmFzZWQgb24gJ1N5bWJvbGljIE1hbmlwdWxhdGlvbiB3aXRoIEZPUk0nCisiIGJ5IEouQS5NLiBWZXJtYXNlcmVuLCBDQU4sIE5ldGhlcmxhbmRzLCAxOTkxLgorIiBUaGlzIHN5bnRheCBmaWxlIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LiBQbGVhc2Ugc2VuZCBzdWdnZXN0aW9ucworIiB0byB0aGUgbWFpbnRhaW5lci4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBBIGJ1bmNoIG9mIHVzZWZ1bCBGT1JNIGtleXdvcmRzCitzeW4ga2V5d29yZCBmb3JtVHlwZQkJZ2xvYmFsIGxvY2FsCitzeW4ga2V5d29yZCBmb3JtSGVhZGVyU3RhdGVtZW50CXN5bWJvbCBzeW1ib2xzIGNmdW5jdGlvbiBjZnVuY3Rpb25zCitzeW4ga2V5d29yZCBmb3JtSGVhZGVyU3RhdGVtZW50CWZ1bmN0aW9uIGZ1bmN0aW9ucyB2ZWN0b3IgdmVjdG9ycworc3luIGtleXdvcmQgZm9ybUhlYWRlclN0YXRlbWVudAlzZXQgc2V0cyBpbmRleCBpbmRpY2VzCitzeW4ga2V5d29yZCBmb3JtSGVhZGVyU3RhdGVtZW50CWRpbWVuc2lvbiBkaW1lbnNpb25zIHVuaXR0cmFjZQorc3luIGtleXdvcmQgZm9ybVN0YXRlbWVudAlpZCBpZGVudGlmeSBkcm9wIHNraXAKK3N5biBrZXl3b3JkIGZvcm1TdGF0ZW1lbnQJd3JpdGUgbndyaXRlCitzeW4ga2V5d29yZCBmb3JtU3RhdGVtZW50CWZvcm1hdCBwcmludCBucHJpbnQgbG9hZCBzYXZlCitzeW4ga2V5d29yZCBmb3JtU3RhdGVtZW50CWJyYWNrZXQgYnJhY2tldHMKK3N5biBrZXl3b3JkIGZvcm1TdGF0ZW1lbnQJbXVsdGlwbHkgY291bnQgbWF0Y2ggb25seSBkaXNjYXJkCitzeW4ga2V5d29yZCBmb3JtU3RhdGVtZW50CXRyYWNlNCB0cmFjZU4gY29udHJhY3Qgc3ltbWV0cml6ZSBhbnRpc3ltbWV0cml6ZQorc3luIGtleXdvcmQgZm9ybUNvbmRpdGlvbmFsCWlmIGVsc2UgZW5kaWYgd2hpbGUKK3N5biBrZXl3b3JkIGZvcm1Db25kaXRpb25hbAlyZXBlYXQgZW5kcmVwZWF0IGxhYmVsIGdvdG8KKworIiBzb21lIHNwZWNpYWwgZnVuY3Rpb25zCitzeW4ga2V5d29yZCBmb3JtU3RhdGVtZW50CWdfIGdpXyBnNV8gZzZfIGc3XyA1XyA2XyA3Xworc3luIGtleXdvcmQgZm9ybVN0YXRlbWVudAllXyBkXyBkZWx0YV8gdGhldGFfIHN1bV8gc3VtcF8KKworIiBwYXR0ZXJuIG1hdGNoaW5nIGZvciBrZXl3b3Jkcworc3luIG1hdGNoICAgZm9ybUNvbW1lbnQJCSJeXCAqXCouKiQiCitzeW4gbWF0Y2ggICBmb3JtQ29tbWVudAkJIlw7XCAqXCouKiQiCitzeW4gcmVnaW9uICBmb3JtU3RyaW5nCQlzdGFydD0rIisgIGVuZD0rIisKK3N5biByZWdpb24gIGZvcm1TdHJpbmcJCXN0YXJ0PSsnKyAgZW5kPSsnKworc3luIG1hdGNoICAgZm9ybVByZVByb2MJCSJeXD1cI1thLXpBLXpdW2EtekEtWjAtOV0qXD4iCitzeW4gbWF0Y2ggICBmb3JtTnVtYmVyCQkiXDxcZFwrXD4iCitzeW4gbWF0Y2ggICBmb3JtTnVtYmVyCQkiXDxcZFwrXC5cZCpcPiIKK3N5biBtYXRjaCAgIGZvcm1OdW1iZXIJCSJcLlxkXCtcPiIKK3N5biBtYXRjaCAgIGZvcm1OdW1iZXIJCSItXGQiIGNvbnRhaW5zPU51bWJlcgorc3luIG1hdGNoICAgZm9ybU51bWJlcgkJIi1cLlxkIiBjb250YWlucz1OdW1iZXIKK3N5biBtYXRjaCAgIGZvcm1OdW1iZXIJCSJpX1wrXD4iCitzeW4gbWF0Y2ggICBmb3JtTnVtYmVyCQkiZmFjX1wrXD4iCitzeW4gbWF0Y2ggICBmb3JtRGlyZWN0aXZlCSJeXD1cLlthLXpBLXpdW2EtekEtWjAtOV0qXD4iCisKKyIgaGkgVXNlciBMYWJlbHMKK3N5biBzeW5jIGNjb21tZW50IGZvcm1Db21tZW50IG1pbmxpbmVzPTEwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2Zvcm1fc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZm9ybV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBmb3JtQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGZvcm1OdW1iZXIJCU51bWJlcgorICBIaUxpbmsgZm9ybVN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBmb3JtQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgZm9ybVByZVByb2MJCVByZVByb2MKKyAgSGlMaW5rIGZvcm1EaXJlY3RpdmUJCVByZVByb2MKKyAgSGlMaW5rIGZvcm1UeXBlCQlUeXBlCisgIEhpTGluayBmb3JtU3RyaW5nCQlTdHJpbmcKKworICBpZiAhZXhpc3RzKCJmb3JtX2VuaGFuY2VkX2NvbG9yIikKKyAgICBIaUxpbmsgZm9ybUhlYWRlclN0YXRlbWVudAlTdGF0ZW1lbnQKKyAgZWxzZQorICAiIGVuaGFuY2VkIGNvbG9yIG1vZGUKKyAgICBIaUxpbmsgZm9ybUhlYWRlclN0YXRlbWVudAlIZWFkZXJTdGF0ZW1lbnQKKyAgICAiIGRhcmsgYW5kIGEgbGlnaHQgYmFja2dyb3VuZCBmb3IgbG9jYWwgdHlwZXMKKyAgICBpZiAmYmFja2dyb3VuZCA9PSAiZGFyayIKKyAgICAgIGhpIEhlYWRlclN0YXRlbWVudCB0ZXJtPXVuZGVybGluZSBjdGVybWZnPUxpZ2h0R3JlZW4gZ3VpZmc9TGlnaHRHcmVlbiBndWk9Ym9sZAorICAgIGVsc2UKKyAgICAgIGhpIEhlYWRlclN0YXRlbWVudCB0ZXJtPXVuZGVybGluZSBjdGVybWZnPURhcmtHcmVlbiBndWlmZz1TZWFHcmVlbiBndWk9Ym9sZAorICAgIGVuZGlmCisgICAgIiBjaGFuZ2Ugc2xpZ2h0bHkgdGhlIGRlZmF1bHQgZm9yIGRhcmsgZ3ZpbQorICAgIGlmIGhhcygiZ3VpX3J1bm5pbmciKSAmJiAmYmFja2dyb3VuZCA9PSAiZGFyayIKKyAgICAgIGhpIENvbmRpdGlvbmFsIGd1aWZnPUxpZ2h0Qmx1ZSBndWk9Ym9sZAorICAgICAgaGkgU3RhdGVtZW50IGd1aWZnPUxpZ2h0WWVsbG93CisgICAgZW5kaWYKKyAgZW5kaWYKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworICBsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJmb3JtIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZm9ydGgudmltIGIvcnVudGltZS9zeW50YXgvZm9ydGgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzM3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9mb3J0aC52aW0KQEAgLTAsMCArMSwyMzUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICBGT1JUSAorIiBNYWludGFpbmVyOiAgQ2hyaXN0aWFuIFYuIEouIEJy/HNzb3cgPGN2amJAY3ZqYi5kZT4KKyIgTGFzdCBDaGFuZ2U6IFNvbiAyMiBKdW4gMjAwMyAyMDo0Mjo1NSBDRVNUCisiIEZpbGVuYW1lczogICAqLmZzLCouZnQKKyIgVVJMOgkgICAgICAgaHR0cDovL3d3dy5jdmpiLmRlL2NvbXAvdmltL2ZvcnRoLnZpbQorCisiICRJZCQKKworIiBUaGUgbGlzdCBvZiBrZXl3b3JkcyBpcyBpbmNvbXBsZXRlLCBjb21wYXJlZCB3aXRoIHRoZSBvZmZpY2FsIEFOUworIiB3b3JkbGlzdC4gSWYgeW91IHVzZSB0aGlzIGxhbmd1YWdlLCBwbGVhc2UgaW1wcm92ZSBpdCwgYW5kIHNlbmQgbWUKKyIgdGhlIHBhdGNoZXMuCisKKyIgTWFueSBUaGFua3MgdG8uLi4KKyIKKyIgMjAwMy0wNS0xMDoKKyIgQW5kcmV3IEdhdWwgPGFuZHJldyBhdCBnYXVsLm9yZz4gc2VuZCBtZSBhIHBhdGNoIGZvcgorIiBmb3J0aE9wZXJhdG9ycy4KKyIKKyIgMjAwMy0wNC0wMzoKKyIgUm9uIEFhcm9uIDxyb24gYXQgcm9ud2FyZS5vcmc+IG1hZGUgdXBkYXRlcyBmb3IgYW4KKyIgaW1wcm92ZWQgV2luMzJGb3J0aCBzdXBwb3J0LgorIgorIiAyMDAyLTA0LTIyOgorIiBDaGFybGVzIFNoYXR0dWNrIDxjaGFybGV5IGF0IGZvcnRoLm9yZz4gaGVscGVkIG1lIHRvIHNldHRsZSB1cCB3aXRoIHRoZQorIiBiaW5hcnkgYW5kIGhleCBudW1iZXIgaGlnaGxpZ2h0aW5nLgorIgorIiAyMDAyLTA0LTIwOgorIiBDaGFybGVzIFNoYXR0dWNrIDxjaGFybGV5IGF0IGZvcnRoLm9yZz4gc2VuZCBtZSBzb21lIGNvZGUgZm9yIGNvcnJlY3RseQorIiBoaWdobGlnaHRpbmcgY2hhciBhbmQgW2NoYXJdIGZvbGxvd2VkIGJ5IGFuIG9wZW5pbmcgcGFyZW4uIEhlIGFsc28gYWRkZWQKKyIgc29tZSB3b3JkcyBmb3Igb3BlcmF0b3JzLCBjb25kaXRpb25hbHMsIGFuZCBkZWZpbml0aW9uczsgYW5kIGFkZGVkIHRoZQorIiBoaWdobGlnaHRpbmcgZm9yIHMiIGFuZCBjIi4KKyIKKyIgMjAwMC0wMy0yODoKKyIgSm9obiBQcm92aWRlbnphIDxqb2huIGF0IHByb2JvLmNvbT4gbWFkZSBpbXByb3ZlbWVudHMgZm9yIHRoZQorIiBoaWdobGlnaHRpbmcgb2Ygc3RyaW5ncywgYW5kIGFkZGVkIHRoZSBjb2RlIGZvciBoaWdobGlnaHRpbmcgaGV4IG51bWJlcnMuCisiCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorZW5kaWYKKworIiBTeW5jaHJvbml6YXRpb24gbWV0aG9kCitzeW4gc3luYyBjY29tbWVudCBtYXhsaW5lcz0yMDAKKworIiBJIHVzZSBnZm9ydGgsIHNvIEkgc2V0IHRoaXMgdG8gY2FzZSBpZ25vcmUKK3N5biBjYXNlIGlnbm9yZQorCisiIFNvbWUgc3BlY2lhbCwgbm9uLUZPUlRIIGtleXdvcmRzCitzeW4ga2V5d29yZCBmb3J0aFRvZG8gY29udGFpbmVkIFRPRE8gRklYTUUgWFhYCitzeW4gbWF0Y2ggZm9ydGhUb2RvIGNvbnRhaW5lZCAnQ29weXJpZ2h0XChccyhbQ2NdKVwpXD1cKFxzWzAtOV1cezIsNH1cKVw9JworCisiIENoYXJhY3RlcnMgYWxsb3dlZCBpbiBrZXl3b3JkcworIiBJIGRvbid0IGtub3cgaWYgMTI4LTI1NSBhcmUgYWxsb3dlZCBpbiBBTlMtRk9SSFQKK2lmIHZlcnNpb24gPj0gNjAwCisgICAgc2V0bG9jYWwgaXNrZXl3b3JkPSEsQCwzMy0zNSwlLCQsMzgtNjQsQS1aLDkxLTk2LGEteiwxMjMtMTI2LDEyOC0yNTUKK2Vsc2UKKyAgICBzZXQgaXNrZXl3b3JkPSEsQCwzMy0zNSwlLCQsMzgtNjQsQS1aLDkxLTk2LGEteiwxMjMtMTI2LDEyOC0yNTUKK2VuZGlmCisKKworIiBLZXl3b3JkcworCisiIGJhc2ljIG1hdGhlbWF0aWNhbCBhbmQgbG9naWNhbCBvcGVyYXRvcnMKK3N5biBrZXl3b3JkIGZvcnRoT3BlcmF0b3JzICsgLSAqIC8gTU9EIC9NT0QgTkVHQVRFIEFCUyBNSU4gTUFYCitzeW4ga2V5d29yZCBmb3J0aE9wZXJhdG9ycyBBTkQgT1IgWE9SIE5PVCBJTlZFUlQgMiogMi8gMSsgMS0gMisgMi0gOCoKK3N5biBrZXl3b3JkIGZvcnRoT3BlcmF0b3JzIE0rICovICovTU9EIE0qIFVNKiBNKi8gVU0vTU9EIEZNL01PRCBTTS9SRU0KK3N5biBrZXl3b3JkIGZvcnRoT3BlcmF0b3JzIEQrIEQtIERORUdBVEUgREFCUyBETUlOIERNQVgKK3N5biBrZXl3b3JkIGZvcnRoT3BlcmF0b3JzIEYrIEYtIEYqIEYvIEZORUdBVEUgRkFCUyBGTUFYIEZNSU4gRkxPT1IgRlJPVU5ECitzeW4ga2V5d29yZCBmb3J0aE9wZXJhdG9ycyBGKiogRlNRUlQgRkVYUCBGRVhQTTEgRkxOIEZMTlAxIEZMT0cgRkFMT0cgRlNJTgorc3luIGtleXdvcmQgZm9ydGhPcGVyYXRvcnMgRkNPUyBGU0lOQ09TIEZUQU4gRkFTSU4gRkFDT1MgRkFUQU4gRkFUQU4yIEZTSU5ICitzeW4ga2V5d29yZCBmb3J0aE9wZXJhdG9ycyBGQ09TSCBGVEFOSCBGQVNJTkggRkFDT1NIIEZBVEFOSAorc3luIGtleXdvcmQgZm9ydGhPcGVyYXRvcnMgMDwgMDw9IDA8PiAwPSAwPiAwPj0gPCA8PSA8PiA9ID4gPj0KK3N5biBrZXl3b3JkIGZvcnRoT3BlcmF0b3JzID9ORUdBVEUgP0RORUdBVEUKKworIiBzdGFjayBtYW5pcHVsYXRpb25zCitzeW4ga2V5d29yZCBmb3J0aFN0YWNrIERST1AgTklQIERVUCBPVkVSIFRVQ0sgU1dBUCBST1QgLVJPVCA/RFVQIFBJQ0sgUk9MTAorc3luIGtleXdvcmQgZm9ydGhTdGFjayAyRFJPUCAyTklQIDJEVVAgMk9WRVIgMlRVQ0sgMlNXQVAgMlJPVAorc3luIGtleXdvcmQgZm9ydGhTdGFjayAzRFVQIDREVVAKK3N5biBrZXl3b3JkIGZvcnRoUlN0YWNrID5SIFI+IFJAIFJEUk9QIDI+UiAyUj4gMlJAIDJSRFJPUAorc3luIGtleXdvcmQgZm9ydGhGU3RhY2sgRkRST1AgRk5JUCBGRFVQIEZPVkVSIEZUVUNLIEZTV0FQIEZST1QKKworIiBzdGFjayBwb2ludGVyIG1hbmlwdWxhdGlvbnMKK3N5biBrZXl3b3JkIGZvcnRoU1AgU1BAIFNQISBGUEAgRlAhIFJQQCBSUCEgTFBAIExQIQorCisiIGFkZHJlc3Mgb3BlcmF0aW9ucworc3luIGtleXdvcmQgZm9ydGhNZW1vcnkgQCAhICshIENAIEMhIDJAIDIhIEZAIEYhIFNGQCBTRiEgREZAIERGIQorc3luIGtleXdvcmQgZm9ydGhBZHJBcml0aCBDSEFSUyBDSEFSKyBDRUxMUyBDRUxMKyBDRUxMIEFMSUdOIEFMSUdORUQgRkxPQVRTCitzeW4ga2V5d29yZCBmb3J0aEFkckFyaXRoIEZMT0FUKyBGTE9BVCBGQUxJR04gRkFMSUdORUQgU0ZMT0FUUyBTRkxPQVQrCitzeW4ga2V5d29yZCBmb3J0aEFkckFyaXRoIFNGQUxJR04gU0ZBTElHTkVEIERGTE9BVFMgREZMT0FUKyBERkFMSUdOIERGQUxJR05FRAorc3luIGtleXdvcmQgZm9ydGhBZHJBcml0aCBNQVhBTElHTiBNQVhBTElHTkVEIENGQUxJR04gQ0ZBTElHTkVECitzeW4ga2V5d29yZCBmb3J0aEFkckFyaXRoIEFERFJFU1MtVU5JVC1CSVRTIEFMTE9UIEFMTE9DQVRFIEhFUkUKK3N5biBrZXl3b3JkIGZvcnRoTWVtQmxrcyBNT1ZFIEVSQVNFIENNT1ZFIENNT1ZFPiBGSUxMIEJMQU5LCisKKyIgY29uZGl0aW9uYWxzCitzeW4ga2V5d29yZCBmb3J0aENvbmQgSUYgRUxTRSBFTkRJRiBUSEVOIENBU0UgT0YgRU5ET0YgRU5EQ0FTRSA/RFVQLUlGCitzeW4ga2V5d29yZCBmb3J0aENvbmQgP0RVUC0wPS1JRiBBSEVBRCBDUy1QSUNLIENTLVJPTEwgQ0FUQ0ggVEhST1cgV0lUSElOCisKKyIgaXRlcmF0aW9ucworc3luIGtleXdvcmQgZm9ydGhMb29wIEJFR0lOIFdISUxFIFJFUEVBVCBVTlRJTCBBR0FJTgorc3luIGtleXdvcmQgZm9ydGhMb29wID9ETyBMT09QIEkgSiBLICtETyBVK0RPIC1ETyBVLURPIERPICtMT09QIC1MT09QCitzeW4ga2V5d29yZCBmb3J0aExvb3AgVU5MT09QIExFQVZFID9MRUFWRSBFWElUIERPTkUgRk9SIE5FWFQKKworIiBuZXcgd29yZHMKK3N5biBtYXRjaCBmb3J0aENvbG9uRGVmICdcPDptXD9ccypbXiBcdF1cK1w+Jworc3luIGtleXdvcmQgZm9ydGhFbmRPZkNvbG9uRGVmIDsgO00gO20KK3N5biBrZXl3b3JkIGZvcnRoRGVmaW5lIENPTlNUQU5UIDJDT05TVEFOVCBGQ09OU1RBTlQgVkFSSUFCTEUgMlZBUklBQkxFIENSRUFURQorc3luIGtleXdvcmQgZm9ydGhEZWZpbmUgVVNFUiBWQUxVRSBUTyBERUZFUiBJUyBET0VTPiBJTU1FRElBVEUgQ09NUElMRS1PTkxZCitzeW4ga2V5d29yZCBmb3J0aERlZmluZSBDT01QSUxFIFJFU1RSSUNUIElOVEVSUFJFVCBQT1NUUE9ORSBFWEVDVVRFIExJVEVSQUwKK3N5biBrZXl3b3JkIGZvcnRoRGVmaW5lIENSRUFURS1JTlRFUlBSRVQvQ09NUElMRSBJTlRFUlBSRVRBVElPTj4gPElOVEVSUFJFVEFUSU9OCitzeW4ga2V5d29yZCBmb3J0aERlZmluZSBDT01QSUxBVElPTj4gPENPTVBJTEFUSU9OIF0gTEFTVFhUIENPTVAnIFBPU1RQT05FLAorc3luIGtleXdvcmQgZm9ydGhEZWZpbmUgRklORC1OQU1FIE5BTUU+SU5UIE5BTUU/SU5UIE5BTUU+Q09NUCBOQU1FPlNUUklORyBTVEFURQorc3luIGtleXdvcmQgZm9ydGhEZWZpbmUgQzsgQ1ZBUklBQkxFCitzeW4gbWF0Y2ggZm9ydGhEZWZpbmUgIlxbQ09NUCddIgorc3luIG1hdGNoIGZvcnRoRGVmaW5lICInIgorc3luIG1hdGNoIGZvcnRoRGVmaW5lICdcPFxbXD4nCitzeW4gbWF0Y2ggZm9ydGhEZWZpbmUgIlxbJ10iCitzeW4gbWF0Y2ggZm9ydGhEZWZpbmUgJ1xbQ09NUElMRV0nCitzeW4gbWF0Y2ggZm9ydGhDbGFzc0RlZiAnXDw6Y2xhc3NccypbXiBcdF1cK1w+Jworc3luIG1hdGNoIGZvcnRoT2JqZWN0RGVmICdcPDpvYmplY3RccypbXiBcdF1cK1w+Jworc3luIGtleXdvcmQgZm9ydGhFbmRPZkNsYXNzRGVmICc7Y2xhc3MnCitzeW4ga2V5d29yZCBmb3J0aEVuZE9mT2JqZWN0RGVmICc7b2JqZWN0JworCisiIGRlYnVnZ2luZworc3luIGtleXdvcmQgZm9ydGhEZWJ1ZyBQUklOVERFQlVHREFUQSBQUklOVERFQlVHTElORQorc3luIG1hdGNoIGZvcnRoRGVidWcgIlw8XH5cflw+IgorCisiIEFzc2VtYmxlcgorc3luIGtleXdvcmQgZm9ydGhBc3NlbWJsZXIgQVNTRU1CTEVSIENPREUgRU5ELUNPREUgO0NPREUgRkxVU0gtSUNBQ0hFIEMsCisKKyIgYmFzaWMgY2hhcmFjdGVyIG9wZXJhdGlvbnMKK3N5biBrZXl3b3JkIGZvcnRoQ2hhck9wcyAoLikgQ0hBUiBFWFBFQ1QgRklORCBXT1JEIFRZUEUgLVRSQUlMSU5HIEVNSVQgS0VZCitzeW4ga2V5d29yZCBmb3J0aENoYXJPcHMgS0VZPyBUSUIgQ1IKKyIgcmVjb2duaXplICdjaGFyICgnIG9yICdbY2hhcl0gKCcgY29ycmVjdGx5LCBzbyBpdCBkb2Vzbid0CisiIGhpZ2hsaWdodCBldmVyeXRoaW5nIGFmdGVyIHRoZSBwYXJlbiBhcyBhIGNvbW1lbnQgdGlsbCBhIGNsb3NpbmcgJyknCitzeW4gbWF0Y2ggZm9ydGhDaGFyT3BzICdcPGNoYXJcc1xTXHMnCitzeW4gbWF0Y2ggZm9ydGhDaGFyT3BzICdcPFxbY2hhclxdXHNcU1xzJworc3luIHJlZ2lvbiBmb3J0aENoYXJPcHMgc3RhcnQ9Ky4iXHMrIHNraXA9K1xcIisgZW5kPSsiKworCisiIGNoYXItbnVtYmVyIGNvbnZlcnNpb24KK3N5biBrZXl3b3JkIGZvcnRoQ29udmVyc2lvbiA8IyAjICM+ICNTIChOVU1CRVIpIChOVU1CRVI/KSBDT05WRVJUIEQ+RiBEPlMgRElHSVQKK3N5biBrZXl3b3JkIGZvcnRoQ29udmVyc2lvbiBEUEwgRj5EIEhMRCBIT0xEIE5VTUJFUiBTPkQgU0lHTiA+TlVNQkVSCisKKyIgaW50ZXJwdHJldGVyLCB3b3JkYm9vaywgY29tcGlsZXIKK3N5biBrZXl3b3JkIGZvcnRoRm9ydGggKExPQ0FMKSBCWUUgQ09MRCBBQk9SVCA+Qk9EWSA+TkVYVCA+TElOSyBDRkEgPlZJRVcgSEVSRQorc3luIGtleXdvcmQgZm9ydGhGb3J0aCBQQUQgV09SRFMgVklFVyBWSUVXPiBOPkxJTksgTkFNRT4gTElOSz4gTD5OQU1FIEZPUkdFVAorc3luIGtleXdvcmQgZm9ydGhGb3J0aCBCT0RZPgorc3luIHJlZ2lvbiBmb3J0aEZvcnRoIHN0YXJ0PStBQk9SVCJccysgc2tpcD0rXFwiKyBlbmQ9KyIrCisKKyIgdm9jYWJ1bGFyaWVzCitzeW4ga2V5d29yZCBmb3J0aFZvY3MgT05MWSBGT1JUSCBBTFNPIFJPT1QgU0VBTCBWT0NTIE9SREVSIENPTlRFWFQgI1ZPQ1MKK3N5biBrZXl3b3JkIGZvcnRoVm9jcyBWT0NBQlVMQVJZIERFRklOSVRJT05TCisKKyIgbnVtYmVycworc3luIGtleXdvcmQgZm9ydGhNYXRoIERFQ0lNQUwgSEVYIEJBU0UKK3N5biBtYXRjaCBmb3J0aEludGVnZXIgJ1w8LVw9WzAtOS5dKlswLTkuXVwrXD4nCisiIHJlY29nbml6ZSBoZXggYW5kIGJpbmFyeSBudW1iZXJzLCB0aGUgJyQnIGFuZCAnJScgbm90YXRpb24gaXMgZm9yIGdmb3J0aAorc3luIG1hdGNoIGZvcnRoSW50ZWdlciAnXDxcJFx4Klx4XCtcPicgIiAqMSogLS0tIGRvbnQndCBtZXNzCitzeW4gbWF0Y2ggZm9ydGhJbnRlZ2VyICdcPFx4KlxkXHgqXD4nICAiICoyKiAtLS0gdGhpcyBvcmRlciEKK3N5biBtYXRjaCBmb3J0aEludGVnZXIgJ1w8JVswLTFdKlswLTFdXCtcPicKK3N5biBtYXRjaCBmb3J0aEZsb2F0ICdcPC1cPVxkKlsuXVw9XGRcK1tFZV1cZFwrXD4nCisKKyIgU3RyaW5ncworc3luIHJlZ2lvbiBmb3J0aFN0cmluZyBzdGFydD0rXC4qXCIrIGVuZD0rIisgZW5kPSskKworIiBYWFgKK3N5biByZWdpb24gZm9ydGhTdHJpbmcgc3RhcnQ9K3NcIisgZW5kPSsiKyBlbmQ9KyQrCitzeW4gcmVnaW9uIGZvcnRoU3RyaW5nIHN0YXJ0PStjXCIrIGVuZD0rIisgZW5kPSskKworCisiIENvbW1lbnRzCitzeW4gbWF0Y2ggZm9ydGhDb21tZW50ICdcXFxzLiokJyBjb250YWlucz1mb3J0aFRvZG8KK3N5biByZWdpb24gZm9ydGhDb21tZW50IHN0YXJ0PSdcXFNccycgZW5kPScuKicgY29udGFpbnM9Zm9ydGhUb2RvCitzeW4gbWF0Y2ggZm9ydGhDb21tZW50ICdcLihcc1teKV0qKScgY29udGFpbnM9Zm9ydGhUb2RvCitzeW4gcmVnaW9uIGZvcnRoQ29tbWVudCBzdGFydD0nKFxzJyBza2lwPSdcXCknIGVuZD0nKScgY29udGFpbnM9Zm9ydGhUb2RvCitzeW4gcmVnaW9uIGZvcnRoQ29tbWVudCBzdGFydD0nL1wqJyBlbmQ9J1wqLycgY29udGFpbnM9Zm9ydGhUb2RvCisic3luIG1hdGNoIGZvcnRoQ29tbWVudCAnKFxzW15cLV0qXC1cLVteXC1dKiknIGNvbnRhaW5zPWZvcnRoVG9kbworCisiIEluY2x1ZGUgZmlsZXMKK3N5biBtYXRjaCBmb3J0aEluY2x1ZGUgJ15JTkNMVURFXHNcK1xrXCsnCitzeW4gbWF0Y2ggZm9ydGhJbmNsdWRlICdeZmxvYWRcc1wrJworc3luIG1hdGNoIGZvcnRoSW5jbHVkZSAnXm5lZWRzXHNcKycKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZm9ydGhfc3luX2luaXRzIikKKyAgICBpZiB2ZXJzaW9uIDwgNTA4CisJbGV0IGRpZF9mb3J0aF9zeW5faW5pdHMgPSAxCisJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgICBlbHNlCisJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgICAgZW5kaWYKKworICAgICIgVGhlIGRlZmF1bHQgbWV0aG9kcyBmb3IgaGlnaGxpZ2h0aW5nLiBDYW4gYmUgb3ZlcnJpZGVuIGxhdGVyLgorICAgIEhpTGluayBmb3J0aFRvZG8gVG9kbworICAgIEhpTGluayBmb3J0aE9wZXJhdG9ycyBPcGVyYXRvcgorICAgIEhpTGluayBmb3J0aE1hdGggTnVtYmVyCisgICAgSGlMaW5rIGZvcnRoSW50ZWdlciBOdW1iZXIKKyAgICBIaUxpbmsgZm9ydGhGbG9hdCBGbG9hdAorICAgIEhpTGluayBmb3J0aFN0YWNrIFNwZWNpYWwKKyAgICBIaUxpbmsgZm9ydGhSc3RhY2sgU3BlY2lhbAorICAgIEhpTGluayBmb3J0aEZTdGFjayBTcGVjaWFsCisgICAgSGlMaW5rIGZvcnRoU1AgU3BlY2lhbAorICAgIEhpTGluayBmb3J0aE1lbW9yeSBGdW5jdGlvbgorICAgIEhpTGluayBmb3J0aEFkckFyaXRoIEZ1bmN0aW9uCisgICAgSGlMaW5rIGZvcnRoTWVtQmxrcyBGdW5jdGlvbgorICAgIEhpTGluayBmb3J0aENvbmQgQ29uZGl0aW9uYWwKKyAgICBIaUxpbmsgZm9ydGhMb29wIFJlcGVhdAorICAgIEhpTGluayBmb3J0aENvbG9uRGVmIERlZmluZQorICAgIEhpTGluayBmb3J0aEVuZE9mQ29sb25EZWYgRGVmaW5lCisgICAgSGlMaW5rIGZvcnRoRGVmaW5lIERlZmluZQorICAgIEhpTGluayBmb3J0aERlYnVnIERlYnVnCisgICAgSGlMaW5rIGZvcnRoQXNzZW1ibGVyIEluY2x1ZGUKKyAgICBIaUxpbmsgZm9ydGhDaGFyT3BzIENoYXJhY3RlcgorICAgIEhpTGluayBmb3J0aENvbnZlcnNpb24gU3RyaW5nCisgICAgSGlMaW5rIGZvcnRoRm9ydGggU3RhdGVtZW50CisgICAgSGlMaW5rIGZvcnRoVm9jcyBTdGF0ZW1lbnQKKyAgICBIaUxpbmsgZm9ydGhTdHJpbmcgU3RyaW5nCisgICAgSGlMaW5rIGZvcnRoQ29tbWVudCBDb21tZW50CisgICAgSGlMaW5rIGZvcnRoQ2xhc3NEZWYgRGVmaW5lCisgICAgSGlMaW5rIGZvcnRoRW5kT2ZDbGFzc0RlZiBEZWZpbmUKKyAgICBIaUxpbmsgZm9ydGhPYmplY3REZWYgRGVmaW5lCisgICAgSGlMaW5rIGZvcnRoRW5kT2ZPYmplY3REZWYgRGVmaW5lCisgICAgSGlMaW5rIGZvcnRoSW5jbHVkZSBJbmNsdWRlCisKKyAgICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZm9ydGgiCisKKyIgdmltOnRzPTg6c3c9NDpub2NpbmRlbnQ6c21hcnRpbmRlbnQ6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9mb3J0cmFuLnZpbSBiL3J1bnRpbWUvc3ludGF4L2ZvcnRyYW4udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMWZhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9mb3J0cmFuLnZpbQpAQCAtMCwwICsxLDUyNiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUZvcnRyYW45NSAoYW5kIEZvcnRyYW45MCwgRm9ydHJhbjc3LCBGIGFuZCBlbGY5MCkKKyIgVmVyc2lvbjoJMC44NgorIiBVUkw6CQlodHRwOi8vd3d3LnVuYi5jYS9jaGVtL2FqaXQvc3ludGF4L2ZvcnRyYW4udmltCisiIExhc3QgQ2hhbmdlOgkyMDAzIE1hci4gMTIKKyIgTWFpbnRhaW5lcjoJQWppdCBKLiBUaGFra2FyIChhaml0IEFUIHVuYi5jYSk7IDxodHRwOi8vd3d3LnVuYi5jYS9jaGVtL2FqaXQvPgorIiBVc2FnZToJRG8gOmhlbHAgZm9ydHJhbi1zeW50YXggZnJvbSBWaW0KKyIgQ3JlZGl0czoKKyIgIFZlcnNpb24gMC4xIHdhcyBiYXNlZCBvbiB0aGUgZm9ydHJhbiA3NyBzeW50YXggZmlsZSBieSBNYXJpbyBFdXNlYmlvIGFuZAorIiAgUHJlYmVuIEd1bGRiZXJnLiBVc2VmdWwgc3VnZ2VzdGlvbnMgd2VyZSBtYWRlIGJ5OiBBbmRyZWogUGFuamtvdiwKKyIgIEJyYW0gTW9vbGVuYWFyLCBUaG9tYXMgT2xzZW4sIE1pY2hhZWwgU3Rlcm5iZXJnLCBDaHJpc3RpYW4gUmVpbGUsCisiICBXYWx0ZXIgRGlldWRvbm7pLCBBbGV4YW5kZXIgV2FnbmVyLCBSb21hbiBCZXJ0bGUsIENoYXJsZXMgUmVuZGxlbWFuLAorIiAgYW5kIEFuZHJldyBHcmlmZml0aHMuIEZvciBpbnN0cnVjdGlvbnMgb24gdXNlLCBkbyA6aGVscCBmb3J0cmFuIGZyb20gdmltCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCBpZiBhIHN5bnRheCBmaWxlIGlzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSBmb3J0cmFuX2RpYWxlY3QgaWYgc2V0IGNvcnJlY3RseSBieSB1c2VyCitpZiBleGlzdHMoImZvcnRyYW5fZGlhbGVjdCIpCisgIGlmIGZvcnRyYW5fZGlhbGVjdCA9fiAnXDxcKGZcKDlbMDVdXHw3N1wpXHxlbGZcfEZcKVw+JworICAgIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9IG1hdGNoc3RyKGZvcnRyYW5fZGlhbGVjdCwnXDxcKGZcKDlbMDVdXHw3N1wpXHxlbGZcfEZcKVw+JykKKyAgZWxzZQorICAgIGVjaG9obCBXYXJuaW5nTXNnIHwgZWNobyAiVW5rbm93biB2YWx1ZSBvZiBmb3J0cmFuX2RpYWxlY3QiIHwgZWNob2hsIE5vbmUKKyAgICBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSAidW5rbm93biIKKyAgZW5kaWYKK2Vsc2UKKyAgbGV0IGI6Zm9ydHJhbl9kaWFsZWN0ID0gInVua25vd24iCitlbmRpZgorCisiIGZvcnRyYW5fZGlhbGVjdCBub3Qgc2V0IG9yIHNldCBpbmNvcnJlY3RseSBieSB1c2VyLAoraWYgYjpmb3J0cmFuX2RpYWxlY3QgPT0gInVua25vd24iCisgICIgc2V0IGI6Zm9ydHJhbl9kaWFsZWN0IGZyb20gZGlyZWN0aXZlIGluIGZpcnN0IHRocmVlIGxpbmVzIG9mIGZpbGUKKyAgbGV0IGI6Zm9ydHJhbl9yZXR5cGUgPSBnZXRsaW5lKDEpLiIgIi5nZXRsaW5lKDIpLiIgIi5nZXRsaW5lKDMpCisgIGlmIGI6Zm9ydHJhbl9yZXR5cGUgPX4gJ1w8Zm9ydHJhbl9kaWFsZWN0XHMqPVxzKkZcPicKKyAgICBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSAiRiIKKyAgZWxzZWlmIGI6Zm9ydHJhbl9yZXR5cGUgPX4gJ1w8Zm9ydHJhbl9kaWFsZWN0XHMqPVxzKmVsZlw+JworICAgIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9ICJlbGYiCisgIGVsc2VpZiBiOmZvcnRyYW5fcmV0eXBlID1+ICdcPGZvcnRyYW5fZGlhbGVjdFxzKj1ccypmOTBcPicKKyAgICBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSAiZjkwIgorICBlbHNlaWYgYjpmb3J0cmFuX3JldHlwZSA9fiAnXDxmb3J0cmFuX2RpYWxlY3Rccyo9XHMqZjk1XD4nCisgICAgbGV0IGI6Zm9ydHJhbl9kaWFsZWN0ID0gImY5NSIKKyAgZWxzZWlmIGI6Zm9ydHJhbl9yZXR5cGUgPX4gJ1w8Zm9ydHJhbl9kaWFsZWN0XHMqPVxzKmY3N1w+JworICAgIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9ICJmNzciCisgIGVsc2UKKyAgICAiIG5vIGRpcmVjdGl2ZSBmb3VuZCwgc28gYXNzdW1lIGY5NQorICAgIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9ICJmOTUiCisgIGVuZGlmCisgIHVubGV0IGI6Zm9ydHJhbl9yZXR5cGUKK2VuZGlmCisKKyIgQ2hvb3NlIGJldHdlZW4gZml4ZWQgYW5kIGZyZWUgc291cmNlIGZvcm0gaWYgdGhpcyBoYXNuJ3QgYmVlbiBkb25lIHlldAoraWYgIWV4aXN0cygiYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSIpCisgIGlmIGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJlbGYiIHx8IGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJGIgorICAgICIgZWxmIGFuZCBGIHJlcXVpcmUgZnJlZSBzb3VyY2UgZm9ybQorICAgIGxldCBiOmZvcnRyYW5fZml4ZWRfc291cmNlID0gMAorICBlbHNlaWYgYjpmb3J0cmFuX2RpYWxlY3QgPT0gImY3NyIKKyAgICAiIGY3NyByZXF1aXJlcyBmaXhlZCBzb3VyY2UgZm9ybQorICAgIGxldCBiOmZvcnRyYW5fZml4ZWRfc291cmNlID0gMQorICBlbHNlaWYgZXhpc3RzKCJmb3J0cmFuX2ZyZWVfc291cmNlIikKKyAgICAiIFVzZXIgZ3VhcmFudGVlcyBmcmVlIHNvdXJjZSBmb3JtIGZvciBhbGwgZjkwIGFuZCBmOTUgZmlsZXMKKyAgICBsZXQgYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9IDAKKyAgZWxzZWlmIGV4aXN0cygiZm9ydHJhbl9maXhlZF9zb3VyY2UiKQorICAgICIgVXNlciBndWFyYW50ZWVzIGZpeGVkIHNvdXJjZSBmb3JtIGZvciBhbGwgZjkwIGFuZCBmOTUgZmlsZXMKKyAgICBsZXQgYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9IDEKKyAgZWxzZQorICAgICIgZjkwIGFuZCBmOTUgYWxsb3cgYm90aCBmaXhlZCBhbmQgZnJlZSBzb3VyY2UgZm9ybS4KKyAgICAiIEFzc3VtZSBmaXhlZCBzb3VyY2UgZm9ybSB1bmxlc3Mgc2lnbnMgb2YgZnJlZSBzb3VyY2UgZm9ybQorICAgICIgYXJlIGRldGVjdGVkIGluIHRoZSBmaXJzdCBmaXZlIGNvbHVtbnMgb2YgdGhlIGZpcnN0IGI6bG1heCBsaW5lcy4KKyAgICAiIERldGVjdGlvbiBiZWNvbWVzIG1vcmUgYWNjdXJhdGUgYW5kIHRpbWUtY29uc3VtaW5nIGlmIG1vcmUgbGluZXMKKyAgICAiIGFyZSBjaGVja2VkLiBJbmNyZWFzZSB0aGUgbGltaXQgYmVsb3cgaWYgeW91IGtlZXAgbG90cyBvZiBjb21tZW50cyBhdAorICAgICIgdGhlIHZlcnkgdG9wIG9mIGVhY2ggZmlsZSBhbmQgeW91IGhhdmUgYSBmYXN0IGNvbXB1dGVyLgorICAgIGxldCBiOmxtYXggPSAyNQorICAgIGlmICggYjpsbWF4ID4gbGluZSgiJCIpICkKKyAgICAgIGxldCBiOmxtYXggPSBsaW5lKCIkIikKKyAgICBlbmRpZgorICAgIGxldCBiOmZvcnRyYW5fZml4ZWRfc291cmNlID0gMQorICAgIGxldCBiOmxuPTEKKyAgICB3aGlsZSBiOmxuIDw9IGI6bG1heAorICAgICAgbGV0IGI6dGVzdCA9IHN0cnBhcnQoZ2V0bGluZShiOmxuKSwwLDUpCisgICAgICBpZiBiOnRlc3RbMF0gIX4gJ1tDYyohI10nICYmIGI6dGVzdCAhfiAnXiBcK1shI10nICYmIGI6dGVzdCA9fiAnW14gMC05XHRdJworCWxldCBiOmZvcnRyYW5fZml4ZWRfc291cmNlID0gMAorCWJyZWFrCisgICAgICBlbmRpZgorICAgICAgbGV0IGI6bG4gPSBiOmxuICsgMQorICAgIGVuZHdoaWxlCisgICAgdW5sZXQgYjpsbWF4IGI6bG4gYjp0ZXN0CisgIGVuZGlmCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworaWYgYjpmb3J0cmFuX2RpYWxlY3QgPT0gImY3NyIKKyAgc3luIG1hdGNoIGZvcnRyYW5JZGVudGlmaWVyCQkiXDxcYVwoXGFcfFxkXCkqXD4iIGNvbnRhaW5zPWZvcnRyYW5TZXJpYWxOdW1iZXIKK2Vsc2UKKyAgc3luIG1hdGNoIGZvcnRyYW45MElkZW50aWZpZXIJCSJcPFxhXHcqXD4iIGNvbnRhaW5zPWZvcnRyYW5TZXJpYWxOdW1iZXIKKyAgaWYgdmVyc2lvbiA+PSA2MDAKKyAgICBpZiBiOmZvcnRyYW5fZml4ZWRfc291cmNlID09IDEKKyAgICAgIHN5biBtYXRjaCBmb3J0cmFuQ29uc3RydWN0TmFtZQkiXlxzXHs2LH1cenNcYVx3Klx6ZVxzKjoiCisgICAgZWxzZQorICAgICAgc3luIG1hdGNoIGZvcnRyYW5Db25zdHJ1Y3ROYW1lCSJeXHMqXHpzXGFcdypcemVccyo6IgorICAgIGVuZGlmCisgICAgaWYgZXhpc3RzKCJmb3J0cmFuX21vcmVfcHJlY2lzZSIpCisgICAgICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnN0cnVjdE5hbWUgIlwoXDxlbmRccypkb1xzXCtcKVxAPD1cYVx3KiIKKyAgICAgIHN5biBtYXRjaCBmb3J0cmFuQ29uc3RydWN0TmFtZSAiXChcPGVuZFxzKmlmXHNcK1wpXEA8PVxhXHcqIgorICAgICAgc3luIG1hdGNoIGZvcnRyYW5Db25zdHJ1Y3ROYW1lICJcKFw8ZW5kXHMqc2VsZWN0XHNcK1wpXEA8PVxhXHcqIgorICAgIGVuZGlmCisgIGVsc2UKKyAgICBpZiBiOmZvcnRyYW5fZml4ZWRfc291cmNlID09IDEKKyAgICAgIHN5biBtYXRjaCBmb3J0cmFuQ29uc3RydWN0TmFtZQkiXlxzXHs2LH1cYVx3KlxzKjoiCisgICAgZWxzZQorICAgICAgc3luIG1hdGNoIGZvcnRyYW5Db25zdHJ1Y3ROYW1lCSJeXHMqXGFcdypccyo6IgorICAgIGVuZGlmCisgIGVuZGlmCitlbmRpZgorCitzeW4gbWF0Y2ggICBmb3J0cmFuVW5pdEhlYWRlcgkiXDxlbmRcPiIKKworc3luIGtleXdvcmQgZm9ydHJhblR5cGUJCWNoYXJhY3RlciBjb21wbGV4IGludGVnZXIKK3N5biBrZXl3b3JkIGZvcnRyYW5UeXBlCQlpbnRyaW5zaWMKK3N5biBtYXRjaCBmb3J0cmFuVHlwZQkJIlw8aW1wbGljaXRcPiIKK3N5biBrZXl3b3JkIGZvcnRyYW5TdHJ1Y3R1cmUJZGltZW5zaW9uCitzeW4ga2V5d29yZCBmb3J0cmFuU3RvcmFnZUNsYXNzCXBhcmFtZXRlciBzYXZlCitzeW4gbWF0Y2ggZm9ydHJhblVuaXRIZWFkZXIJIlw8c3Vicm91dGluZVw+Igorc3luIGtleXdvcmQgZm9ydHJhbkNhbGwJCWNhbGwKK3N5biBtYXRjaCBmb3J0cmFuVW5pdEhlYWRlcgkiXDxmdW5jdGlvblw+Igorc3luIG1hdGNoIGZvcnRyYW5Vbml0SGVhZGVyCSJcPHByb2dyYW1cPiIKK3N5biBrZXl3b3JkIGZvcnRyYW5TdGF0ZW1lbnQJcmV0dXJuIHN0b3AKK3N5biBrZXl3b3JkIGZvcnRyYW5Db25kaXRpb25hbAllbHNlIHRoZW4KK3N5biBtYXRjaCBmb3J0cmFuQ29uZGl0aW9uYWwJIlw8aWZcPiIKK3N5biBtYXRjaCBmb3J0cmFuUmVwZWF0CQkiXDxkb1w+IgorCitzeW4ga2V5d29yZCBmb3J0cmFuVG9kbwkJY29udGFpbmVkIHRvZG8gZml4bWUKKworIkNhdGNoIGVycm9ycyBjYXVzZWQgYnkgdG9vIG1hbnkgcmlnaHQgcGFyZW50aGVzZXMKK3N5biByZWdpb24gZm9ydHJhblBhcmVuIHRyYW5zcGFyZW50IHN0YXJ0PSIoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUGFyZW5FcnJvcixAZm9ydHJhbkNvbW1lbnRHcm91cCxjSW5jbHVkZWQKK3N5biBtYXRjaCAgZm9ydHJhblBhcmVuRXJyb3IgICAiKSIKKworc3luIG1hdGNoIGZvcnRyYW5PcGVyYXRvcgkiXC5ccypuXD1lcXZccypcLiIKK3N5biBtYXRjaCBmb3J0cmFuT3BlcmF0b3IJIlwuXHMqXChhbmRcfG9yXHxub3RcKVxzKlwuIgorc3luIG1hdGNoIGZvcnRyYW5PcGVyYXRvcgkiXCgrXHwtXHwvXHxcKlwpIgorCitzeW4gbWF0Y2ggZm9ydHJhbkJvb2xlYW4JIlwuXHMqXCh0cnVlXHxmYWxzZVwpXHMqXC4iCisKK3N5biBrZXl3b3JkIGZvcnRyYW5SZWFkV3JpdGUJYmFja3NwYWNlIGNsb3NlIGlucXVpcmUgb3BlbiByZXdpbmQgZW5kZmlsZQorc3luIGtleXdvcmQgZm9ydHJhblJlYWRXcml0ZQlyZWFkIHdyaXRlIHByaW50CisKKyJJZiB0YWJzIGFyZSBhbGxvd2VkIHRoZW4gdGhlIGxlZnQgbWFyZ2luIGNoZWNrcyBkbyBub3Qgd29yaworaWYgZXhpc3RzKCJmb3J0cmFuX2hhdmVfdGFicyIpCisgIHN5biBtYXRjaCBmb3J0cmFuVGFiCQkiXHQiICB0cmFuc3BhcmVudAorZWxzZQorICBzeW4gbWF0Y2ggZm9ydHJhblRhYgkJIlx0IgorZW5kaWYKKworc3luIGtleXdvcmQgZm9ydHJhbklPCQl1bml0IGZpbGUgaW9zdGF0IGFjY2VzcyBibGFuayBmbXQgZm9ybQorc3luIGtleXdvcmQgZm9ydHJhbklPCQlyZWNsIHN0YXR1cyBleGlzdCBvcGVuZWQgbnVtYmVyIG5hbWVkIG5hbWUKK3N5biBrZXl3b3JkIGZvcnRyYW5JTwkJc2VxdWVudGlhbCBkaXJlY3QgcmVjCitzeW4ga2V5d29yZCBmb3J0cmFuSU8JCWZvcm1hdHRlZCB1bmZvcm1hdHRlZCBuZXh0cmVjCisKK3N5biBrZXl3b3JkIGZvcnRyYW42NkludHJpbnNpYwkJY2FicyBjY29zIGNleHAgY2xvZyBjc2luIGNzcXJ0CitzeW4ga2V5d29yZCBmb3J0cmFuNjZJbnRyaW5zaWMJCWRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoCitzeW4ga2V5d29yZCBmb3J0cmFuNjZJbnRyaW5zaWMJCWRkaW0gZGV4cCBkaW50IGRsb2cgZGxvZzEwIGRtb2QgZGFicworc3luIGtleXdvcmQgZm9ydHJhbjY2SW50cmluc2ljCQlkbmludCBkc2lnbiBkc2luIGRzaW5oIGRzcXJ0IGR0YW4KK3N5biBrZXl3b3JkIGZvcnRyYW42NkludHJpbnNpYwkJZHRhbmggaWFicyBpZGltIGlkbmludCBpc2lnbiBpZGludCBpZml4CitzeW4ga2V5d29yZCBmb3J0cmFuNjZJbnRyaW5zaWMJCWFtYXgwIGFtYXgxIGRtYXgxIG1heDAgbWF4MQorc3luIGtleXdvcmQgZm9ydHJhbjY2SW50cmluc2ljCQlhbWluMCBhbWluMSBkbWluMSBtaW4wIG1pbjEKK3N5biBrZXl3b3JkIGZvcnRyYW42NkludHJpbnNpYwkJYW1vZCBmbG9hdCBzbmdsIGFsb2cgYWxvZzEwCisKKyIgSW50cmluc2ljcyBwcm92aWRlZCBieSBzb21lIHZlbmRvcnMKK3N5biBrZXl3b3JkIGZvcnRyYW5FeHRyYUludHJpbnNpYwljZGFicyBjZGNvcyBjZGV4cCBjZGxvZyBjZHNpbiBjZHNxcnQKK3N5biBrZXl3b3JkIGZvcnRyYW5FeHRyYUludHJpbnNpYwljcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQKK3N5biBrZXl3b3JkIGZvcnRyYW5FeHRyYUludHJpbnNpYwlxYWNvcyBxYXNpbiBxYXRhbiBxYXRhbjIgcWNvcyBxY29zaAorc3luIGtleXdvcmQgZm9ydHJhbkV4dHJhSW50cmluc2ljCXFkaW0gcWV4cCBpcWludCBxbG9nIHFsb2cxMCBxbW9kIHFhYnMKK3N5biBrZXl3b3JkIGZvcnRyYW5FeHRyYUludHJpbnNpYwlxbmludCBxc2lnbiBxc2luIHFzaW5oIHFzcXJ0IHF0YW4KK3N5biBrZXl3b3JkIGZvcnRyYW5FeHRyYUludHJpbnNpYwlxdGFuaCBxbWF4MSBxbWluMQorc3luIGtleXdvcmQgZm9ydHJhbkV4dHJhSW50cmluc2ljCWRpbWFnIHFpbWFnIGRjbXBseCBxY21wbHggZGNvbmpnIHFjb25qZworc3luIGtleXdvcmQgZm9ydHJhbkV4dHJhSW50cmluc2ljCWdhbW1hIGRnYW1tYSBxZ2FtbWEgYWxnYW1hIGRsZ2FtYSBxbGdhbWEKK3N5biBrZXl3b3JkIGZvcnRyYW5FeHRyYUludHJpbnNpYwllcmYgZGVyZiBxZXJmIGVyZmMgZGVyZmMgcWVyZmMKK3N5biBrZXl3b3JkIGZvcnRyYW5FeHRyYUludHJpbnNpYwlkZmxvYXQKKworc3luIGtleXdvcmQgZm9ydHJhbjc3SW50cmluc2ljCWFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yCitzeW4ga2V5d29yZCBmb3J0cmFuNzdJbnRyaW5zaWMJY29zIHNpbiB0YW4gc2luaCBjb3NoIHRhbmggZXhwIGxvZyBsb2cxMAorc3luIGtleXdvcmQgZm9ydHJhbjc3SW50cmluc2ljCXNpZ24gc3FydCBpbnQgY21wbHggbmludCBtaW4gbWF4IGNvbmpnCitzeW4ga2V5d29yZCBmb3J0cmFuNzdJbnRyaW5zaWMJY2hhciBpY2hhciBpbmRleAorc3luIG1hdGNoIGZvcnRyYW43N0ludHJpbnNpYwkiXDxsZW5ccypbKCxdIm1lPXMrMworc3luIG1hdGNoIGZvcnRyYW43N0ludHJpbnNpYwkiXDxyZWFsXHMqKCJtZT1zKzQKK3N5biBtYXRjaCBmb3J0cmFuVHlwZQkJIlw8aW1wbGljaXRcc1wrcmVhbCIKK3N5biBtYXRjaCBmb3J0cmFuVHlwZQkJIl5ccypyZWFsXD4iCitzeW4gbWF0Y2ggZm9ydHJhbjkwSW50cmluc2ljCSJcPGxvZ2ljYWxccyooIm1lPXMrNworc3luIG1hdGNoIGZvcnRyYW5UeXBlCQkiXDxpbXBsaWNpdFxzXCtsb2dpY2FsIgorc3luIG1hdGNoIGZvcnRyYW5UeXBlCQkiXlxzKmxvZ2ljYWxcPiIKKworIk51bWJlcnMgb2YgdmFyaW91cyBzb3J0cworIiBJbnRlZ2Vycworc3luIG1hdGNoIGZvcnRyYW5OdW1iZXIJZGlzcGxheSAiXDxcZFwrXChfXGFcdypcKVw9XD4iCisiIGZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aG91dCBhIGRlY2ltYWwgcG9pbnQKK3N5biBtYXRjaCBmb3J0cmFuRmxvYXROb0RlYwlkaXNwbGF5CSJcPFxkXCtbZGVxXVstK11cPVxkXCtcKF9cYVx3KlwpXD1cPiIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZGVjaW1hbCBwb2ludAorc3luIG1hdGNoIGZvcnRyYW5GbG9hdEluaURlYwlkaXNwbGF5CSJcLlxkXCtcKFtkZXFdWy0rXVw9XGRcK1wpXD1cKF9cYVx3KlwpXD1cPiIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBubyBkaWdpdHMgYWZ0ZXIgZGVjaW1hbAorc3luIG1hdGNoIGZvcnRyYW5GbG9hdEVuZERlYwlkaXNwbGF5CSJcPFxkXCtcLlwoW2RlcV1bLStdXD1cZFwrXClcPVwoX1xhXHcqXClcPVw+IgorIiBmbG9hdGluZyBwb2ludCBudW1iZXIsIEQgb3IgUSBleHBvbmVudHMKK3N5biBtYXRjaCBmb3J0cmFuRmxvYXRERXhwCWRpc3BsYXkJIlw8XGRcK1wuXGRcK1woW2RxXVstK11cPVxkXCtcKVw9XChfXGFcdypcKVw9XD4iCisiIGZsb2F0aW5nIHBvaW50IG51bWJlcgorc3luIG1hdGNoIGZvcnRyYW5GbG9hdAlkaXNwbGF5CSJcPFxkXCtcLlxkXCtcKGVbLStdXD1cZFwrXClcPVwoX1xhXHcqXClcPVw+IgorIiBOdW1iZXJzIGluIGZvcm1hdHMKK3N5biBtYXRjaCBmb3J0cmFuRm9ybWF0U3BlYwlkaXNwbGF5CSJcZCpmXGRcK1wuXGRcKyIKK3N5biBtYXRjaCBmb3J0cmFuRm9ybWF0U3BlYwlkaXNwbGF5CSJcZCplW3NuXVw9XGRcK1wuXGRcK1woZVxkK1w+XClcPSIKK3N5biBtYXRjaCBmb3J0cmFuRm9ybWF0U3BlYwlkaXNwbGF5CSJcZCpcKGRcfHFcfGdcKVxkXCtcLlxkXCtcKGVcZCtcKVw9Igorc3luIG1hdGNoIGZvcnRyYW5Gb3JtYXRTcGVjCWRpc3BsYXkJIlxkXCt4XD4iCisiIFRoZSBuZXh0IG1hdGNoIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgd291bGQgcGljayB1cCBpZGVudGlmaWVycyBhcyB3ZWxsCisiIHN5biBtYXRjaCBmb3J0cmFuRm9ybWF0U3BlYwlkaXNwbGF5CSJcPFwoYVx8aVwpXGRcKyIKKworIiBOdW1iZXJzIGFzIGxhYmVscworc3luIG1hdGNoIGZvcnRyYW5MYWJlbE51bWJlcglkaXNwbGF5CSJeXGRcezEsNX1ccyJtZT1lLTEKK3N5biBtYXRjaCBmb3J0cmFuTGFiZWxOdW1iZXIJZGlzcGxheQkiXiBcZFx7MSw0fVxzIm1zPXMrMSxtZT1lLTEKK3N5biBtYXRjaCBmb3J0cmFuTGFiZWxOdW1iZXIJZGlzcGxheQkiXiAgXGRcezEsM31ccyJtcz1zKzIsbWU9ZS0xCitzeW4gbWF0Y2ggZm9ydHJhbkxhYmVsTnVtYmVyCWRpc3BsYXkJIl4gICBcZFxkXD1ccyJtcz1zKzMsbWU9ZS0xCitzeW4gbWF0Y2ggZm9ydHJhbkxhYmVsTnVtYmVyCWRpc3BsYXkJIl4gICAgXGRccyJtcz1zKzQsbWU9ZS0xCisKK2lmIHZlcnNpb24gPj0gNjAwICYmIGV4aXN0cygiZm9ydHJhbl9tb3JlX3ByZWNpc2UiKQorICAiIE51bWJlcnMgYXMgdGFyZ2V0cworICBzeW4gbWF0Y2ggZm9ydHJhblRhcmdldAlkaXNwbGF5CSJcKFw8aWZccyooLlwrKVxzKlwpXEA8PVwoXGRcK1xzKixccypcKVx7Mn1cZFwrXD4iCisgIHN5biBtYXRjaCBmb3J0cmFuVGFyZ2V0CWRpc3BsYXkJIlwoXDxkb1xzXCtcKVxAPD1cZFwrXD4iCisgIHN5biBtYXRjaCBmb3J0cmFuVGFyZ2V0CWRpc3BsYXkJIlwoXDxnb1xzKnRvXHMqKFw9XClcQDw9XChcZFwrXHMqLFxzKlwpKlxkXCtcPiIKK2VuZGlmCisKK3N5biBrZXl3b3JkIGZvcnRyYW5UeXBlRXgJZXh0ZXJuYWwKK3N5biBrZXl3b3JkIGZvcnRyYW5JT0V4CQlmb3JtYXQKK3N5biBrZXl3b3JkIGZvcnRyYW5TdGF0ZW1lbnRFeAljb250aW51ZQorc3luIG1hdGNoIGZvcnRyYW5TdGF0ZW1lbnRFeAkiXDxnb1xzKnRvXD4iCitzeW4gcmVnaW9uIGZvcnRyYW5TdHJpbmdFeAlzdGFydD0rJysgZW5kPSsnKyBjb250YWlucz1mb3J0cmFuQ29udGludWVNYXJrLGZvcnRyYW5MZWZ0TWFyZ2luLGZvcnRyYW5TZXJpYWxOdW1iZXIKK3N5biBrZXl3b3JkIGZvcnRyYW43N0ludHJpbnNpY0V4CWRpbSBsZ2UgbGd0IGxsZSBsbHQgbW9kCitzeW4ga2V5d29yZCBmb3J0cmFuU3RhdGVtZW50T2IJYXNzaWduIHBhdXNlIHRvCisKK2lmIGI6Zm9ydHJhbl9kaWFsZWN0ICE9ICJmNzciCisKKyAgc3luIGtleXdvcmQgZm9ydHJhblR5cGUJdHlwZSBub25lCisKKyAgc3luIGtleXdvcmQgZm9ydHJhblN0cnVjdHVyZQlwcml2YXRlIHB1YmxpYyBpbnRlbnQgb3B0aW9uYWwKKyAgc3luIGtleXdvcmQgZm9ydHJhblN0cnVjdHVyZQlwb2ludGVyIHRhcmdldCBhbGxvY2F0YWJsZQorICBzeW4ga2V5d29yZCBmb3J0cmFuU3RvcmFnZUNsYXNzCWluIG91dAorICBzeW4gbWF0Y2ggZm9ydHJhblN0b3JhZ2VDbGFzcwkiXDxraW5kXHMqPSJtZT1zKzQKKyAgc3luIG1hdGNoIGZvcnRyYW5TdG9yYWdlQ2xhc3MJIlw8bGVuXHMqPSJtZT1zKzMKKworICBzeW4gbWF0Y2ggZm9ydHJhblVuaXRIZWFkZXIJIlw8bW9kdWxlXD4iCisgIHN5biBrZXl3b3JkIGZvcnRyYW5Vbml0SGVhZGVyCXVzZSBvbmx5IGNvbnRhaW5zCisgIHN5biBrZXl3b3JkIGZvcnRyYW5Vbml0SGVhZGVyCXJlc3VsdCBvcGVyYXRvciBhc3NpZ25tZW50CisgIHN5biBtYXRjaCBmb3J0cmFuVW5pdEhlYWRlcgkiXDxpbnRlcmZhY2VcPiIKKyAgc3luIG1hdGNoIGZvcnRyYW5Vbml0SGVhZGVyCSJcPHJlY3Vyc2l2ZVw+IgorICBzeW4ga2V5d29yZCBmb3J0cmFuU3RhdGVtZW50CWFsbG9jYXRlIGRlYWxsb2NhdGUgbnVsbGlmeSBjeWNsZSBleGl0CisgIHN5biBtYXRjaCBmb3J0cmFuQ29uZGl0aW9uYWwJIlw8c2VsZWN0XD4iCisgIHN5biBrZXl3b3JkIGZvcnRyYW5Db25kaXRpb25hbAljYXNlIGRlZmF1bHQgd2hlcmUgZWxzZXdoZXJlCisKKyAgc3luIG1hdGNoIGZvcnRyYW5PcGVyYXRvcgkiXChcKD5cfDxcKT1cPVx8PT1cfC89XHw9XCkiCisgIHN5biBtYXRjaCBmb3J0cmFuT3BlcmF0b3IJIj0+IgorCisgIHN5biByZWdpb24gZm9ydHJhblN0cmluZwlzdGFydD0rIisgZW5kPSsiKwljb250YWlucz1mb3J0cmFuTGVmdE1hcmdpbixmb3J0cmFuQ29udGludWVNYXJrLGZvcnRyYW5TZXJpYWxOdW1iZXIKKyAgc3luIGtleXdvcmQgZm9ydHJhbklPCQlwYWQgcG9zaXRpb24gYWN0aW9uIGRlbGltIHJlYWR3cml0ZQorICBzeW4ga2V5d29yZCBmb3J0cmFuSU8JCWVvciBhZHZhbmNlIG5tbAorCisgIHN5biBrZXl3b3JkIGZvcnRyYW45MEludHJpbnNpYwlhZGp1c3RsIGFkanVzdHIgYWxsIGFsbG9jYXRlZCBhbnkKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCWFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZworICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJY291bnQgY3NoaWZ0IGRhdGVfYW5kX3RpbWUKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCWRpZ2l0cyBkb3RfcHJvZHVjdCBlb3NoaWZ0IGVwc2lsb24gZXhwb25lbnQKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCWZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yCisgIHN5biBrZXl3b3JkIGZvcnRyYW45MEludHJpbnNpYwlpb3IgaXNoZnQgaXNoZnRjIGxib3VuZCBsZW5fdHJpbQorICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJbWF0bXVsIG1heGV4cG9uZW50IG1heGxvYyBtYXh2YWwgbWVyZ2UKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCW1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0CisgIHN5biBrZXl3b3JkIGZvcnRyYW45MEludHJpbnNpYwlwYWNrIHByZXNlbnQgcHJvZHVjdCByYWRpeCByYW5kb21fbnVtYmVyCisgIHN5biBtYXRjaCBmb3J0cmFuOTBJbnRyaW5zaWMJCSJcPG5vdFw+XChccypcLlwpXEAhIm1lPXMrMworICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlCisgIHN5biBrZXl3b3JkIGZvcnRyYW45MEludHJpbnNpYwlzZWxlY3RlZF9pbnRfa2luZCBzZWxlY3RlZF9yZWFsX2tpbmQgc2NhbgorICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJc2hhcGUgc2l6ZSBzcGFjaW5nIHNwcmVhZCBzZXRfZXhwb25lbnQKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCXRpbnkgdHJhbnNwb3NlIHRyaW0gdWJvdW5kIHVucGFjayB2ZXJpZnkKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCXByZWNpc2lvbiBzdW0gc3lzdGVtX2Nsb2NrCisgIHN5biBtYXRjaCBmb3J0cmFuOTBJbnRyaW5zaWMJIlw8a2luZFw+XHMqWygsXSJtZT1zKzQKKworICBzeW4gbWF0Y2ggIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGVuZFxzKmZ1bmN0aW9uIgorICBzeW4gbWF0Y2ggIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGVuZFxzKmludGVyZmFjZSIKKyAgc3luIG1hdGNoICBmb3J0cmFuVW5pdEhlYWRlcgkiXDxlbmRccyptb2R1bGUiCisgIHN5biBtYXRjaCAgZm9ydHJhblVuaXRIZWFkZXIJIlw8ZW5kXHMqcHJvZ3JhbSIKKyAgc3luIG1hdGNoICBmb3J0cmFuVW5pdEhlYWRlcgkiXDxlbmRccypzdWJyb3V0aW5lIgorICBzeW4gbWF0Y2ggIGZvcnRyYW5SZXBlYXQJIlw8ZW5kXHMqZG8iCisgIHN5biBtYXRjaCAgZm9ydHJhbkNvbmRpdGlvbmFsCSJcPGVuZFxzKndoZXJlIgorICBzeW4gbWF0Y2ggIGZvcnRyYW5Db25kaXRpb25hbAkiXDxzZWxlY3RccypjYXNlIgorICBzeW4gbWF0Y2ggIGZvcnRyYW5Db25kaXRpb25hbAkiXDxlbmRccypzZWxlY3QiCisgIHN5biBtYXRjaCAgZm9ydHJhblR5cGUJIlw8ZW5kXHMqdHlwZSIKKyAgc3luIG1hdGNoICBmb3J0cmFuVHlwZQkiXDxpblxzKm91dCIKKworICBzeW4ga2V5d29yZCBmb3J0cmFuVW5pdEhlYWRlckV4CXByb2NlZHVyZQorICBzeW4ga2V5d29yZCBmb3J0cmFuSU9FeAkJbmFtZWxpc3QKKyAgc3luIGtleXdvcmQgZm9ydHJhbkNvbmRpdGlvbmFsRXgJd2hpbGUKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljRXgJYWNoYXIgaWFjaGFyIHRyYW5zZmVyCisKKyAgc3luIGtleXdvcmQgZm9ydHJhbkluY2x1ZGUJCWluY2x1ZGUKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwU3RvcmFnZUNsYXNzUglzZXF1ZW5jZQorZW5kaWYKKworc3luIG1hdGNoICAgZm9ydHJhbkNvbmRpdGlvbmFsCSJcPGVuZFxzKmlmIgorc3luIG1hdGNoICAgZm9ydHJhbklPCQljb250YWlucz1mb3J0cmFuT3BlcmF0b3IgIlw8ZVwobmRcfHJyXClccyo9XHMqXGRcKyIKK3N5biBtYXRjaCAgIGZvcnRyYW5Db25kaXRpb25hbAkiXDxlbHNlXHMqaWYiCisKK3N5biBrZXl3b3JkIGZvcnRyYW5Vbml0SGVhZGVyUgllbnRyeQorc3luIG1hdGNoIGZvcnRyYW5UeXBlUgkJZGlzcGxheSAiZG91YmxlXHNcK3ByZWNpc2lvbiIKK3N5biBtYXRjaCBmb3J0cmFuVHlwZVIJCWRpc3BsYXkgImRvdWJsZVxzXCtjb21wbGV4Igorc3luIG1hdGNoIGZvcnRyYW5Vbml0SGVhZGVyUglkaXNwbGF5ICJibG9ja1xzXCtkYXRhIgorc3luIGtleXdvcmQgZm9ydHJhblN0b3JhZ2VDbGFzc1IJY29tbW9uIGVxdWl2YWxlbmNlIGRhdGEKK3N5biBrZXl3b3JkIGZvcnRyYW43N0ludHJpbnNpY1IJZGJsZSBkcHJvZAorc3luIG1hdGNoICAgZm9ydHJhbjc3T3BlcmF0b3JSCSJcLlxzKltnbF1bZXRdXHMqXC4iCitzeW4gbWF0Y2ggICBmb3J0cmFuNzdPcGVyYXRvclIJIlwuXHMqXChlcVx8bmVcKVxzKlwuIgorCitpZiBiOmZvcnRyYW5fZGlhbGVjdCA9PSAiZjk1IgorICBzeW4ga2V5d29yZCBmb3J0cmFuUmVwZWF0CQlmb3JhbGwKKyAgc3luIG1hdGNoIGZvcnRyYW5SZXBlYXQJCSJcPGVuZFxzKmZvcmFsbCIKKyAgc3luIGtleXdvcmQgZm9ydHJhbjk1SW50cmluc2ljCW51bGwgY3B1X3RpbWUKKyAgc3luIG1hdGNoIGZvcnRyYW5UeXBlCQkJIlw8ZWxlbWVudGFsXD4iCisgIHN5biBtYXRjaCBmb3J0cmFuVHlwZQkJCSJcPHB1cmVcPiIKKyAgaWYgZXhpc3RzKCJmb3J0cmFuX21vcmVfcHJlY2lzZSIpCisgICAgc3luIG1hdGNoIGZvcnRyYW5Db25zdHJ1Y3ROYW1lICJcKFw8ZW5kXHMqZm9yYWxsXHNcK1wpXEA8PVxhXHcqXD4iCisgIGVuZGlmCitlbmRpZgorCitzeW4gY2x1c3RlciBmb3J0cmFuQ29tbWVudEdyb3VwIGNvbnRhaW5zPWZvcnRyYW5Ub2RvCisKK2lmIChiOmZvcnRyYW5fZml4ZWRfc291cmNlID09IDEpCisgIGlmICFleGlzdHMoImZvcnRyYW5faGF2ZV90YWJzIikKKyAgICAiRmxhZyBpdGVtcyBiZXlvbmQgY29sdW1uIDcyCisgICAgc3luIG1hdGNoIGZvcnRyYW5TZXJpYWxOdW1iZXIJZXhjbHVkZW5sICJeLlx7NzMsfSQibGM9NzIKKyAgICAiRmxhZyBsZWZ0IG1hcmdpbiBlcnJvcnMKKyAgICBzeW4gbWF0Y2ggZm9ydHJhbkxhYmVsRXJyb3IJIl4uXHstLDR9W14wLTkgXSIgY29udGFpbnM9Zm9ydHJhblRhYgorICAgIHN5biBtYXRjaCBmb3J0cmFuTGFiZWxFcnJvcgkiXi5cezR9XGRcUyIKKyAgZW5kaWYKKyAgc3luIG1hdGNoIGZvcnRyYW5Db21tZW50CQlleGNsdWRlbmwgIl5bIWMqXS4qJCIgY29udGFpbnM9QGZvcnRyYW5Db21tZW50R3JvdXAKKyAgc3luIG1hdGNoIGZvcnRyYW5MZWZ0TWFyZ2luCQl0cmFuc3BhcmVudCAiXiBcezV9IgorICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnRpbnVlTWFyawkJZGlzcGxheSAiXi5cezV9XFMibGM9NQorZWxzZQorICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnRpbnVlTWFyawkJZGlzcGxheSAiJiIKK2VuZGlmCisKK2lmIGI6Zm9ydHJhbl9kaWFsZWN0ICE9ICJmNzciCisgIHN5biBtYXRjaCBmb3J0cmFuQ29tbWVudAlleGNsdWRlbmwgIiEuKiQiIGNvbnRhaW5zPUBmb3J0cmFuQ29tbWVudEdyb3VwCitlbmRpZgorCisiY3BwIGlzIG9mdGVuIHVzZWQgd2l0aCBGb3J0cmFuCitzeW4gbWF0Y2gJY1ByZVByb2MJCSJeXHMqI1xzKlwoZGVmaW5lXHxpZmRlZlwpXD4uKiIKK3N5biBtYXRjaAljUHJlUHJvYwkJIl5ccyojXHMqXChlbGlmXHxpZlwpXD4uKiIKK3N5biBtYXRjaAljUHJlUHJvYwkJIl5ccyojXHMqXChpZm5kZWZcfHVuZGVmXClcPi4qIgorc3luIG1hdGNoCWNQcmVDb25kaXQJCSJeXHMqI1xzKlwoZWxzZVx8ZW5kaWZcKVw+LioiCitzeW4gcmVnaW9uCWNJbmNsdWRlZAljb250YWluZWQgc3RhcnQ9KyJbXihdKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9Zm9ydHJhbkxlZnRNYXJnaW4sZm9ydHJhbkNvbnRpbnVlTWFyayxmb3J0cmFuU2VyaWFsTnVtYmVyCitzeW4gbWF0Y2gJY0luY2x1ZGVkCQljb250YWluZWQgIjxbXj5dKj4iCitzeW4gbWF0Y2gJY0luY2x1ZGUJCSJeXHMqI1xzKmluY2x1ZGVcPlxzKlsiPF0iIGNvbnRhaW5zPWNJbmNsdWRlZAorCisiU3luY2hyb25pc2luZyBsaW1pdHMgYXNzdW1lIHRoYXQgY29tbWVudCBhbmQgY29udGludWF0aW9uIGxpbmVzIGFyZSBub3QgbWl4ZWQKK2lmIChiOmZvcnRyYW5fZml4ZWRfc291cmNlID09IDApCisgIHN5biBzeW5jIGxpbmVjb250ICImIiBtYXhsaW5lcz00MAorZWxzZQorICBzeW4gc3luYyBtaW5saW5lcz0yMAorZW5kaWYKKworaWYgdmVyc2lvbiA+PSA2MDAgJiYgZXhpc3RzKCJmb3J0cmFuX2ZvbGQiKQorCisgIHN5biBzeW5jIGZyb21zdGFydAorICBpZiAoYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9PSAxKQorICAgIHN5biByZWdpb24gZm9ydHJhblByb2dyYW0gdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIHN0YXJ0PSJeXHMqcHJvZ3JhbVxzXCtceihcYVx3KlwpIiBza2lwPSJeXChbIWMqXVx8XHMqI1wpLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKlwocHJvZ3JhbVwoXHNcK1x6MVw+XClcPVx8JFwpIiBjb250YWlucz1BTExCVVQsZm9ydHJhbk1vZHVsZQorICAgIHN5biByZWdpb24gZm9ydHJhbk1vZHVsZSB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgc3RhcnQ9Il5ccyptb2R1bGVcc1wrXChwcm9jZWR1cmVcKVxAIVx6KFxhXHcqXCkiIHNraXA9Il5cKFshYypdXHxccyojXCkuKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqXChtb2R1bGVcKFxzXCtcejFcPlwpXD1cfCRcKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtCisgICAgc3luIHJlZ2lvbiBmb3J0cmFuRnVuY3Rpb24gdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXlxzKlwoZWxlbWVudGFsIFx8cHVyZSBcfHJlY3Vyc2l2ZSBcKVw9XHMqZnVuY3Rpb25cc1wrXHooXGFcdypcKSIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKCRcfGZ1bmN0aW9uXChcc1wrXHoxXD5cKVw9XCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlCisgICAgc3luIHJlZ2lvbiBmb3J0cmFuU3Vicm91dGluZSB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgZXh0ZW5kIHN0YXJ0PSJeXHMqXChlbGVtZW50YWwgXHxwdXJlIFx8cmVjdXJzaXZlIFwpXD1ccypzdWJyb3V0aW5lXHNcK1x6KFxhXHcqXCkiIHNraXA9Il5cKFshYypdXHxccyojXCkuKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqXCgkXHxzdWJyb3V0aW5lXChcc1wrXHoxXD5cKVw9XCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlCisgICAgc3luIHJlZ2lvbiBmb3J0cmFuQmxvY2tEYXRhIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBzdGFydD0iXDxibG9ja1xzKmRhdGFcc1wrXHooXGFcdypcKSIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKCRcfGJsb2NrXHMqZGF0YVwoXHNcK1x6MVw+XClcPVwpIiBjb250YWlucz1BTExCVVQsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuU3Vicm91dGluZSxmb3J0cmFuRnVuY3Rpb24sZm9ydHJhbjc3TG9vcCxmb3J0cmFuQ2FzZSxmb3J0cmFuOTBMb29wLGZvcnRyYW5JZkJsb2NrCisgICAgc3luIHJlZ2lvbiBmb3J0cmFuSW50ZXJmYWNlIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Il5ccyppbnRlcmZhY2VcPiIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccyppbnRlcmZhY2VcPiIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhbjc3TG9vcCxmb3J0cmFuQ2FzZSxmb3J0cmFuOTBMb29wLGZvcnRyYW5JZkJsb2NrCisgIGVsc2UKKyAgICBzeW4gcmVnaW9uIGZvcnRyYW5Qcm9ncmFtIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBzdGFydD0iXlxzKnByb2dyYW1cc1wrXHooXGFcdypcKSIgc2tpcD0iXlxzKlshI10uKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqXChwcm9ncmFtXChcc1wrXHoxXD5cKVw9XHwkXCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuTW9kdWxlCisgICAgc3luIHJlZ2lvbiBmb3J0cmFuTW9kdWxlIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBzdGFydD0iXlxzKm1vZHVsZVxzXCtcKHByb2NlZHVyZVwpXEAhXHooXGFcdypcKSIgc2tpcD0iXlxzKlshI10uKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqXChtb2R1bGVcKFxzXCtcejFcPlwpXD1cfCRcKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtCisgICAgc3luIHJlZ2lvbiBmb3J0cmFuRnVuY3Rpb24gdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXlxzKlwoZWxlbWVudGFsIFx8cHVyZSBcfHJlY3Vyc2l2ZSBcKVw9XHMqZnVuY3Rpb25cc1wrXHooXGFcdypcKSIgc2tpcD0iXlxzKlshI10uKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqXCgkXHxmdW5jdGlvblwoXHNcK1x6MVw+XClcPVwpIiBjb250YWlucz1BTExCVVQsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZQorICAgIHN5biByZWdpb24gZm9ydHJhblN1YnJvdXRpbmUgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXlxzKlwoZWxlbWVudGFsIFx8cHVyZSBcfHJlY3Vyc2l2ZSBcKVw9XHMqc3Vicm91dGluZVxzXCtceihcYVx3KlwpIiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKCRcfHN1YnJvdXRpbmVcKFxzXCtcejFcPlwpXD1cKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUKKyAgICBzeW4gcmVnaW9uIGZvcnRyYW5CbG9ja0RhdGEgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIHN0YXJ0PSJcPGJsb2NrXHMqZGF0YVxzXCtceihcYVx3KlwpIiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKCRcfGJsb2NrXHMqZGF0YVwoXHNcK1x6MVw+XClcPVwpIiBjb250YWlucz1BTExCVVQsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuU3Vicm91dGluZSxmb3J0cmFuRnVuY3Rpb24sZm9ydHJhbjc3TG9vcCxmb3J0cmFuQ2FzZSxmb3J0cmFuOTBMb29wLGZvcnRyYW5JZkJsb2NrCisgICAgc3luIHJlZ2lvbiBmb3J0cmFuSW50ZXJmYWNlIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Il5ccyppbnRlcmZhY2VcPiIgc2tpcD0iXlxzKlshI10uKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqaW50ZXJmYWNlXD4iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlLGZvcnRyYW43N0xvb3AsZm9ydHJhbkNhc2UsZm9ydHJhbjkwTG9vcCxmb3J0cmFuSWZCbG9jaworICBlbmRpZgorCisgIGlmIGV4aXN0cygiZm9ydHJhbl9mb2xkX2NvbmRpdGlvbmFscyIpCisgICAgaWYgKGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMSkKKyAgICAgIHN5biByZWdpb24gZm9ydHJhbjc3TG9vcCB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgc3RhcnQ9Ilw8ZG9cc1wrXHooXGRcK1wpIiBlbmQ9Il5ccypcejFcPiIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Vbml0SGVhZGVyLGZvcnRyYW5TdHJ1Y3R1cmUsZm9ydHJhblN0b3JhZ2VDbGFzcyxmb3J0cmFuVHlwZSxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlLGZvcnRyYW5TdWJyb3V0aW5lLGZvcnRyYW5GdW5jdGlvbixmb3J0cmFuQmxvY2tEYXRhCisgICAgICBzeW4gcmVnaW9uIGZvcnRyYW45MExvb3AgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXChcPGVuZFxzXCtcKVxAPCFcPGRvXChcc1wrXGFcfFxzKiRcKSIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypkb1w+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKKyAgICAgIHN5biByZWdpb24gZm9ydHJhbklmQmxvY2sgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXChcPGVcKG5kXHxsc2VcKVxzXCtcKVxAPCFcPGlmXHMqKC5cKylccyp0aGVuXD4iIHNraXA9Il5cKFshYypdXHxccyojXCkuKiQiIGVuZD0iXDxlbmRccyppZlw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKKyAgICAgIHN5biByZWdpb24gZm9ydHJhbkNhc2UgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXDxzZWxlY3RccypjYXNlXD4iIHNraXA9Il5cKFshYypdXHxccyojXCkuKiQiIGVuZD0iXDxlbmRccypzZWxlY3RcPiIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Vbml0SGVhZGVyLGZvcnRyYW5TdHJ1Y3R1cmUsZm9ydHJhblN0b3JhZ2VDbGFzcyxmb3J0cmFuVHlwZSxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlLGZvcnRyYW5TdWJyb3V0aW5lLGZvcnRyYW5GdW5jdGlvbixmb3J0cmFuQmxvY2tEYXRhCisgICAgZWxzZQorICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuNzdMb29wIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBzdGFydD0iXDxkb1xzXCtceihcZFwrXCkiIGVuZD0iXlxzKlx6MVw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKKyAgICAgIHN5biByZWdpb24gZm9ydHJhbjkwTG9vcCB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgZXh0ZW5kIHN0YXJ0PSJcKFw8ZW5kXHNcK1wpXEA8IVw8ZG9cKFxzXCtcYVx8XHMqJFwpIiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypkb1w+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKKyAgICAgIHN5biByZWdpb24gZm9ydHJhbklmQmxvY2sgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXChcPGVcKG5kXHxsc2VcKVxzXCtcKVxAPCFcPGlmXHMqKC5cKylccyp0aGVuXD4iIHNraXA9Il5ccypbISNdLiokIiBlbmQ9Ilw8ZW5kXHMqaWZcPiIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Vbml0SGVhZGVyLGZvcnRyYW5TdHJ1Y3R1cmUsZm9ydHJhblN0b3JhZ2VDbGFzcyxmb3J0cmFuVHlwZSxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlLGZvcnRyYW5TdWJyb3V0aW5lLGZvcnRyYW5GdW5jdGlvbixmb3J0cmFuQmxvY2tEYXRhCisgICAgICBzeW4gcmVnaW9uIGZvcnRyYW5DYXNlIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Ilw8c2VsZWN0XHMqY2FzZVw+IiBza2lwPSJeXHMqWyEjXS4qJCIgZW5kPSJcPGVuZFxzKnNlbGVjdFw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKKyAgICBlbmRpZgorICBlbmRpZgorCisgIGlmIGV4aXN0cygiZm9ydHJhbl9mb2xkX211bHRpbGluZWNvbW1lbnRzIikKKyAgICBpZiAoYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9PSAxKQorICAgICAgc3luIG1hdGNoIGZvcnRyYW5NdWx0aUxpbmVDb21tZW50cyB0cmFuc3BhcmVudCBmb2xkICJcKF5bIWMqXS4qXChcblx8XCUkXClcKVx7NCx9IiBjb250YWlucz1BTExCVVQsZm9ydHJhbk11bHRpQ29tbWVudExpbmVzCisgICAgZWxzZQorICAgICAgc3luIG1hdGNoIGZvcnRyYW5NdWx0aUxpbmVDb21tZW50cyB0cmFuc3BhcmVudCBmb2xkICJcKF5ccyohLipcKFxuXHxcJSRcKVwpXHs0LH0iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuTXVsdGlDb21tZW50TGluZXMKKyAgICBlbmRpZgorICBlbmRpZgorZW5kaWYKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZm9ydHJhbl9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9mb3J0cmFuX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBoaWdobGlnaHRpbmcgZGlmZmVycyBmb3IgZWFjaCBkaWFsZWN0LgorICAiIFRyYW5zcGFyZW50IGdyb3VwczoKKyAgIiBmb3J0cmFuUGFyZW4sIGZvcnRyYW5MZWZ0TWFyZ2luCisgICIgZm9ydHJhblByb2dyYW0sIGZvcnRyYW5Nb2R1bGUsIGZvcnRyYW5TdWJyb3V0aW5lLCBmb3J0cmFuRnVuY3Rpb24sCisgICIgZm9ydHJhbkJsb2NrRGF0YQorICAiIGZvcnRyYW43N0xvb3AsIGZvcnRyYW45MExvb3AsIGZvcnRyYW5JZkJsb2NrLCBmb3J0cmFuQ2FzZQorICAiIGZvcnRyYW5NdWx0aUNvbW1lbnRMaW5lcworICBIaUxpbmsgZm9ydHJhblN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBmb3J0cmFuQ29uc3RydWN0TmFtZQlTcGVjaWFsCisgIEhpTGluayBmb3J0cmFuQ29uZGl0aW9uYWwJCUNvbmRpdGlvbmFsCisgIEhpTGluayBmb3J0cmFuUmVwZWF0CQlSZXBlYXQKKyAgSGlMaW5rIGZvcnRyYW5Ub2RvCQkJVG9kbworICBIaUxpbmsgZm9ydHJhbkNvbnRpbnVlTWFyawkJVG9kbworICBIaUxpbmsgZm9ydHJhblN0cmluZwkJU3RyaW5nCisgIEhpTGluayBmb3J0cmFuTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIGZvcnRyYW5PcGVyYXRvcgkJT3BlcmF0b3IKKyAgSGlMaW5rIGZvcnRyYW5Cb29sZWFuCQlCb29sZWFuCisgIEhpTGluayBmb3J0cmFuTGFiZWxFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIGZvcnRyYW5PYnNvbGV0ZQkJVG9kbworICBIaUxpbmsgZm9ydHJhblR5cGUJCQlUeXBlCisgIEhpTGluayBmb3J0cmFuU3RydWN0dXJlCQlUeXBlCisgIEhpTGluayBmb3J0cmFuU3RvcmFnZUNsYXNzCQlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGZvcnRyYW5DYWxsCQkJZm9ydHJhblVuaXRIZWFkZXIKKyAgSGlMaW5rIGZvcnRyYW5Vbml0SGVhZGVyCQlmb3J0cmFuUHJlQ29uZGl0CisgIEhpTGluayBmb3J0cmFuUmVhZFdyaXRlCQlmb3J0cmFuOTBJbnRyaW5zaWMKKyAgSGlMaW5rIGZvcnRyYW5JTwkJCWZvcnRyYW45MEludHJpbnNpYworICBIaUxpbmsgZm9ydHJhbjk1SW50cmluc2ljCQlmb3J0cmFuOTBJbnRyaW5zaWMKKyAgSGlMaW5rIGZvcnRyYW43N0ludHJpbnNpYwkJZm9ydHJhbjkwSW50cmluc2ljCisgIEhpTGluayBmb3J0cmFuOTBJbnRyaW5zaWMJCVNwZWNpYWwKKworICBpZiAoIGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJlbGYiIHx8IGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJGIiApCisgICAgSGlMaW5rIGZvcnRyYW5TdGF0ZW1lbnRPYglmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhbjY2SW50cmluc2ljCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuNzdJbnRyaW5zaWNSCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuVW5pdEhlYWRlclIJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5UeXBlUgkJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5TdG9yYWdlQ2xhc3NSCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuOTBTdG9yYWdlQ2xhc3NSCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuNzdPcGVyYXRvclIJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5JbmNsdWRlCQlmb3J0cmFuT2Jzb2xldGUKKyAgZWxzZQorICAgIEhpTGluayBmb3J0cmFuU3RhdGVtZW50T2IJU3RhdGVtZW50CisgICAgSGlMaW5rIGZvcnRyYW42NkludHJpbnNpYwlmb3J0cmFuOTBJbnRyaW5zaWMKKyAgICBIaUxpbmsgZm9ydHJhbjc3SW50cmluc2ljUglmb3J0cmFuOTBJbnRyaW5zaWMKKyAgICBIaUxpbmsgZm9ydHJhblVuaXRIZWFkZXJSCWZvcnRyYW5QcmVDb25kaXQKKyAgICBIaUxpbmsgZm9ydHJhblR5cGVSCQlmb3J0cmFuVHlwZQorICAgIEhpTGluayBmb3J0cmFuU3RvcmFnZUNsYXNzUglmb3J0cmFuU3RvcmFnZUNsYXNzCisgICAgSGlMaW5rIGZvcnRyYW43N09wZXJhdG9yUglmb3J0cmFuT3BlcmF0b3IKKyAgICBIaUxpbmsgZm9ydHJhbkluY2x1ZGUJCUluY2x1ZGUKKyAgICBIaUxpbmsgZm9ydHJhbjkwU3RvcmFnZUNsYXNzUglmb3J0cmFuU3RvcmFnZUNsYXNzCisgIGVuZGlmCisKKyAgaWYgKCBiOmZvcnRyYW5fZGlhbGVjdCA9PSAiRiIgKQorICAgIEhpTGluayBmb3J0cmFuTGFiZWxOdW1iZXIJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5UYXJnZXQJCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuRm9ybWF0U3BlYwkJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5GbG9hdERFeHAJCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuRmxvYXROb0RlYwkJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5GbG9hdEluaURlYwlmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhbkZsb2F0RW5kRGVjCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuVHlwZUV4CQlmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhbklPRXgJCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuU3RhdGVtZW50RXgJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5TdHJpbmdFeAkJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW43N0ludHJpbnNpY0V4CWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuVW5pdEhlYWRlckV4CWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuQ29uZGl0aW9uYWxFeAlmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhbjkwSW50cmluc2ljRXgJZm9ydHJhbk9ic29sZXRlCisgIGVsc2UKKyAgICBIaUxpbmsgZm9ydHJhbkxhYmVsTnVtYmVyCVNwZWNpYWwKKyAgICBIaUxpbmsgZm9ydHJhblRhcmdldAkJU3BlY2lhbAorICAgIEhpTGluayBmb3J0cmFuRm9ybWF0U3BlYwkJSWRlbnRpZmllcgorICAgIEhpTGluayBmb3J0cmFuRmxvYXRERXhwCQlmb3J0cmFuRmxvYXQKKyAgICBIaUxpbmsgZm9ydHJhbkZsb2F0Tm9EZWMJCWZvcnRyYW5GbG9hdAorICAgIEhpTGluayBmb3J0cmFuRmxvYXRJbmlEZWMJZm9ydHJhbkZsb2F0CisgICAgSGlMaW5rIGZvcnRyYW5GbG9hdEVuZERlYwlmb3J0cmFuRmxvYXQKKyAgICBIaUxpbmsgZm9ydHJhblR5cGVFeAkJZm9ydHJhblR5cGUKKyAgICBIaUxpbmsgZm9ydHJhbklPRXgJCWZvcnRyYW5JTworICAgIEhpTGluayBmb3J0cmFuU3RhdGVtZW50RXgJZm9ydHJhblN0YXRlbWVudAorICAgIEhpTGluayBmb3J0cmFuU3RyaW5nRXgJCWZvcnRyYW5TdHJpbmcKKyAgICBIaUxpbmsgZm9ydHJhbjc3SW50cmluc2ljRXgJZm9ydHJhbjkwSW50cmluc2ljCisgICAgSGlMaW5rIGZvcnRyYW5Vbml0SGVhZGVyRXgJZm9ydHJhblVuaXRIZWFkZXIKKyAgICBIaUxpbmsgZm9ydHJhbkNvbmRpdGlvbmFsRXgJZm9ydHJhbkNvbmRpdGlvbmFsCisgICAgSGlMaW5rIGZvcnRyYW45MEludHJpbnNpY0V4CWZvcnRyYW45MEludHJpbnNpYworICBlbmRpZgorCisgIEhpTGluayBmb3J0cmFuRmxvYXQJCUZsb2F0CisgIEhpTGluayBmb3J0cmFuOTBJZGVudGlmaWVyCQlmb3J0cmFuSWRlbnRpZmllcgorICAiVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgaWYgeW91IHdhbnQgYWxsIGZvcnRyYW4gdmFyaWFibGVzIHRvIGJlIGhpZ2hsaWdodGVkCisgICJIaUxpbmsgZm9ydHJhbklkZW50aWZpZXIJCUlkZW50aWZpZXIKKyAgSGlMaW5rIGZvcnRyYW5QcmVDb25kaXQJCVByZUNvbmRpdAorICBIaUxpbmsgZm9ydHJhbkluY2x1ZGUJCUluY2x1ZGUKKyAgSGlMaW5rIGNJbmNsdWRlZAkJCWZvcnRyYW5TdHJpbmcKKyAgSGlMaW5rIGNJbmNsdWRlCQkJSW5jbHVkZQorICBIaUxpbmsgY1ByZVByb2MJCQlQcmVQcm9jCisgIEhpTGluayBjUHJlQ29uZGl0CQkJUHJlQ29uZGl0CisgIEhpTGluayBmb3J0cmFuUGFyZW5FcnJvcgkJRXJyb3IKKyAgSGlMaW5rIGZvcnRyYW5Db21tZW50CQlDb21tZW50CisgIEhpTGluayBmb3J0cmFuU2VyaWFsTnVtYmVyCQlUb2RvCisgIEhpTGluayBmb3J0cmFuVGFiCQkJRXJyb3IKKyAgIiBWZW5kb3IgZXh0ZW5zaW9ucworICBIaUxpbmsgZm9ydHJhbkV4dHJhSW50cmluc2ljCVNwZWNpYWwKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZm9ydHJhbiIKKworIiB2aW06IHRzPTggdHc9MTMyCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9mb3hwcm8udmltIGIvcnVudGltZS9zeW50YXgvZm94cHJvLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmFiZDIzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZm94cHJvLnZpbQpAQCAtMCwwICsxLDY5MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBGb3hQcm8gZm9yIERPUyB2Mi54CisiIE1haW50YWluZXI6ICAgUG93aW5nIFRzZSA8cG93aW5nQGhrZW0uY29tPgorIiBMYXN0IENoYW5nZTogIDA2IFNlcHRlbWJlciAyMDAxCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK3N5bnRheCBjYXNlIGlnbm9yZQorCisiIEhpZ2hsaWdodCBzcGVjaWFsIGNoYXJhY3RlcnMKK3N5biBtYXRjaCBmb3hwcm9TcGVjaWFsICJeXHMqISIKK3N5biBtYXRjaCBmb3hwcm9TcGVjaWFsICImIgorc3luIG1hdGNoIGZveHByb1NwZWNpYWwgIjtccyokIgorc3luIG1hdGNoIGZveHByb1NwZWNpYWwgIl5ccyo9Igorc3luIG1hdGNoIGZveHByb1NwZWNpYWwgIl5ccypcXCIKK3N5biBtYXRjaCBmb3hwcm9TcGVjaWFsICJeXHMqXFxcXCIKK3N5biBtYXRjaCBmb3hwcm9TcGVjaWFsICJeXHMqPyIKK3N5biBtYXRjaCBmb3hwcm9TcGVjaWFsICJeXHMqPz8iCitzeW4gbWF0Y2ggZm94cHJvU3BlY2lhbCAiXlxzKj8/PyIKK3N5biBtYXRjaCBmb3hwcm9TcGVjaWFsICJcPG1cPlwuIgorCisiIEAgU3RhdGVtZW50cworc3luIG1hdGNoIGZveHByb0F0U3ltYm9sIGNvbnRhaW5lZCAiXlxzKkAiCitzeW4gbWF0Y2ggZm94cHJvQXRDbWQgICAgY29udGFpbmVkICJcPHNheVw+XHxcPGdldFw+XHxcPGVkaXRcPlx8XDxib3hcPlx8XDxjbGVhXCVbcl1cPlx8XDxmaWxsXD5cfFw8bWVudVw+XHxcPHByb21cJVtwdF1cPlx8XDxzY3JvXCVbbGxdXD5cfFw8dG9cPiIKK3N5biBtYXRjaCBmb3hwcm9BdFN0YXJ0ICB0cmFuc3BhcmVudCAiXlxzKkAuKiIgY29udGFpbnM9QUxMCisKKyIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMKK3N5biBtYXRjaCBmb3hwcm9QcmVQcm9jICJeXHMqI1xzKlwoXDxpZlw+XHxcPGVsaWZcPlx8XDxlbHNlXD5cfFw8ZW5kaVwlW2ZdXD5cKSIKK3N5biBtYXRjaCBmb3hwcm9QcmVQcm9jICJeXHMqI1xzKlwoXDxkZWZpXCVbbmVdXD5cfFw8dW5kZVwlW2ZdXD5cKSIKK3N5biBtYXRjaCBmb3hwcm9QcmVQcm9jICJeXHMqI1xzKlw8cmVnaVwlW29uXVw+IgorCisiIEZ1bmN0aW9ucworc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8YWJzXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8YWNvcFwlW3ldXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8YWNvc1w+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGFkZWxcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxhZGlyXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8YWVsZVwlW21lbnRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8YWZpZVwlW2xkc11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxhZm9uXCVbdF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxhaW5zXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8YWxlblw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGFsaWFcJVtzXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGFsbHRcJVtyaW1dXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8YW5zaVwlW3Rvb2VtXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGFzY1w+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGFzY2FcJVtuXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGFzaW5cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxhc29yXCVbdF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxhc3ViXCVbc2NyaXB0XVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGF0XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8YXRhblw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGF0Y1w+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGF0Y2xcJVtpbmVdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8YXRsaVwlW25lXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGF0bjJcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxiYXJcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxiYXJjXCVbb3VudF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxiYXJwXCVbcm9tcHRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8YmV0d1wlW2Vlbl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxib2ZcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxjYXBzXCVbbG9ja11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxjZG93XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8Y2R4XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8Y2VpbFwlW2luZ11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxjaHJcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxjaHJzXCVbYXddXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8Y2hydFwlW3Jhbl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxjbW9uXCVbdGhdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8Y250YlwlW2FyXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGNudHBcJVthZF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxjb2xcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxjb3NcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxjcGNvXCVbbnZlcnRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8Y3BjdVwlW3JyZW50XVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGNwZGJcJVtmXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGN0b2RcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxjdXJkXCVbaXJdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZGF0ZVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGRheVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGRiZlw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGRkZWFcJVtib3J0dHJhbnNdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZGRlYVwlW2R2aXNlXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGRkZWVcJVtuYWJsZWRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZGRlZVwlW3hlY3V0ZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxkZGVpXCVbbml0aWF0ZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxkZGVsXCVbYXN0ZXJyb3JdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZGRlcFwlW29rZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxkZGVyXCVbZXF1ZXN0XVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGRkZXNcJVtldG9wdGlvbl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxkZGVzXCVbZXRzZXJ2aWNlXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGRkZXNcJVtldHRvcGljXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGRkZXRcJVtlcm1pbmF0ZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxkZWxlXCVbdGVkXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGRlc2NcJVtlbmRpbmddXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZGlmZlwlW2VyZW5jZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxkaXNrXCVbc3BhY2VdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZG15XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZG93XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZHRvY1w+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGR0b3JcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxkdG9zXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZW1wdFwlW3ldXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZW9mXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZXJyb1wlW3JdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZXZhbFwlW3VhdGVdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZXhwXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZmNoc1wlW2l6ZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmY2xvXCVbc2VdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZmNvdVwlW250XVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGZjcmVcJVthdGVdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZmRhdFwlW2VdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZmVvZlw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGZlcnJcJVtvcl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmZmx1XCVbc2hdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZmdldFwlW3NdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZmllbFwlW2RdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZmlsZVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGZpbHRcJVtlcl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxma2xhXCVbYmVsXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGZrbWFcJVt4XVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGZsZGxcJVtpc3RdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8ZmxvY1wlW2tdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8Zmxvb1wlW3JdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8Zm9udFwlW21ldHJpY11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmb3BlXCVbbl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmb3JcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmb3VuXCVbZF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmcHV0XCVbc11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmcmVhXCVbZF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmc2VlXCVba11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmc2l6XCVbZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmdGltXCVbZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmdWxsXCVbcGF0aF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxmdlw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGZ3cmlcJVt0ZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxnZXRiXCVbYXJdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8Z2V0ZFwlW2lyXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGdldGVcJVtudl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxnZXRmXCVbaWxlXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGdldGZcJVtvbnRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8Z2V0cFwlW2FkXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGdvbW9cJVtudGhdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8aGVhZFwlW2VyXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGhvbWVcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxpZHhjXCVbb2xsYXRlXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGlpZlw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGlua2VcJVt5XVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGlubGlcJVtzdF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxpbnNtXCVbb2RlXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGludFw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGlzYWxcJVtwaGFdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8aXNibFwlW2Fua11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxpc2NvXCVbbG9yXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGlzZGlcJVtnaXRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8aXNsb1wlW3dlcl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxpc3JlXCVbYWRvbmx5XVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGlzdXBcJVtwZXJdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8a2V5XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8a2V5bVwlW2F0Y2hdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bGFzdFwlW2tleV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxsZWZ0XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bGVuXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bGlrZVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGxpbmVcJVtub11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxsb2NmXCVbaWxlXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPGxvY2tcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxsb2dcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxsb2cxXCVbMF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxsb29rXCVbdXBdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bG93ZVwlW3JdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bHRyaVwlW21dXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bHVwZFwlW2F0ZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxtYXhcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxtY29sXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bWRvd1wlW25dXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bWR4XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bWR5XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bWVtbFwlW2luZXNdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bWVtb1wlW3J5XVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPG1lbnVcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxtZXNzXCVbYWdlXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPG1pblw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPG1saW5cJVtlXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPG1vZFw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPG1vbnRcJVtoXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPG1ya2JcJVthcl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxtcmtwXCVbYWRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bXJvd1w+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPG13aW5cJVtkb3ddXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bmR4XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8bm9ybVwlW2FsaXplXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPG51bWxcJVtvY2tdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8b2JqblwlW3VtXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPG9ianZcJVthcl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxvY2N1XCVbcnNdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8b2VtdFwlW29hbnNpXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPG9uXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8b3JkZVwlW3JdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8b3NcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxwYWRcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxwYWRjXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cGFkbFw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHBhZHJcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxwYXJhXCVbbWV0ZXJzXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHBheW1cJVtlbnRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cGNvbFw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHBpXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cG9wdVwlW3BdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cHJpblwlW3RzdGF0dXNdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cHJtYlwlW2FyXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHBybXBcJVthZF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxwcm9nXCVbcmFtXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHByb21cJVtwdF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxwcm9wXCVbZXJdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cHJvd1w+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHBydGlcJVtuZm9dXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cHV0ZlwlW2lsZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxwdlw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHJhbmRcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxyYXRcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxyYXRsXCVbaW5lXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHJkbGVcJVt2ZWxdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cmVhZFwlW2tleV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxyZWNjXCVbb3VudF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxyZWNuXCVbb11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxyZWNzXCVbaXplXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHJlbGFcJVt0aW9uXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHJlcGxcJVtpY2F0ZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxyZ2JzXCVbY2hlbWVdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cmlnaFwlW3RdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cmxvY1wlW2tdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cm91blwlW2RdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cm93XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8cnRvZFw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHJ0cmlcJVttXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHNjaGVcJVttZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxzY29sXCVbc11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxzZWNvXCVbbmRzXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHNlZWtcPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxzZWxlXCVbY3RdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8c2V0XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8c2lnblw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHNpblw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHNrcGJcJVthcl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxza3BwXCVbYWRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8c291blwlW2RleF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxzcGFjXCVbZV1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxzcXJ0XD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8c3Jvd1wlW3NdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8c3RyXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8c3RydFwlW3Jhbl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxzdHVmXCVbZl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDxzdWJzXCVbdHJdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8c3lzbVwlW2V0cmljXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHN5c1w+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHRhZ1w+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHRhZ2NcJVtvdW50XVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHRhZ25cJVtvXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHRhblw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHRhcmdcJVtldF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDx0aW1lXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8dHJhblwlW3Nmb3JtXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHRyaW1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDx0eHR3XCVbaWR0aF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDx0eXBlXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8dW5pcVwlW3VlXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHVwZGFcJVt0ZWRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8dXBwZVwlW3JdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8dXNlZFw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHZhbFw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHZhcnJcJVtlYWRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8dmVyc1wlW2lvbl1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDx3Ym9yXCVbZGVyXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHdjaGlcJVtsZF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDx3Y29sXCVbc11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDx3ZXhpXCVbc3RdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8d2ZvblwlW3RdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8d2xhc1wlW3RdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8d2xjb1wlW2xdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8d2xyb1wlW3ddXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8d21heFwlW2ltdW1dXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8d21pblwlW2ltdW1dXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8d29udFwlW29wXVw+XHMqKCJtZT1lLTEKK3N5biBtYXRjaCBmb3hwcm9GdW5jICJcPHdvdXRcJVtwdXRdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8d3BhclwlW2VudF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDx3cmVhXCVbZF1cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDx3cm93XCVbc11cPlxzKigibWU9ZS0xCitzeW4gbWF0Y2ggZm94cHJvRnVuYyAiXDx3dGl0XCVbbGVdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8d3Zpc1wlW2libGVdXD5ccyooIm1lPWUtMQorc3luIG1hdGNoIGZveHByb0Z1bmMgIlw8eWVhclw+XHMqKCJtZT1lLTEKKworIiBDb21tYW5kcworc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8YWNjZVwlW3B0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8YWN0aVwlW3ZhdGVdXD5ccypcPG1lbnVcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGFjdGlcJVt2YXRlXVw+XHMqXDxwb3B1XCVbcF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGFjdGlcJVt2YXRlXVw+XHMqXDxzY3JlXCVbZW5dXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxhY3RpXCVbdmF0ZV1cPlxzKlw8d2luZFwlW293XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8YXBwZVwlW25kXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8YXBwZVwlW25kXVw+XHMqXDxmcm9tXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxhcHBlXCVbbmRdXD5ccypcPGZyb21cPlxzKlw8YXJyYVwlW3ldXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxhcHBlXCVbbmRdXD5ccypcPGdlbmVcJVtyYWxdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxhcHBlXCVbbmRdXD5ccypcPG1lbW9cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGFzc2lcJVtzdF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGF2ZXJcJVthZ2VdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxibGFuXCVba11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGJyb3dcJVtzZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGJ1aWxcJVtkXVw+XHMqXDxhcHBcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGJ1aWxcJVtkXVw+XHMqXDxleGVcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGJ1aWxcJVtkXVw+XHMqXDxwcm9qXCVbZWN0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y2FsY1wlW3VsYXRlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y2FsbFw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y2FuY1wlW2VsXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y2hhblwlW2dlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y2xlYVwlW3JdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxjbG9zXCVbZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGNsb3NcJVtlXVw+XHMqXDxtZW1vXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxjb21wXCVbaWxlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y29udFwlW2ludWVdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxjb3B5XD5ccypcPGZpbGVcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGNvcHlcPlxzKlw8aW5kZVwlW3hlc11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGNvcHlcPlxzKlw8bWVtb1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y29weVw+XHMqXDxzdHJ1XCVbY3R1cmVdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxjb3B5XD5ccypcPHN0cnVcJVtjdHVyZV1cPlxzKlw8ZXh0ZVwlW25kZWRdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxjb3B5XD5ccypcPHRhZ1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y29weVw+XHMqXDx0b1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y29weVw+XHMqXDx0b1w+XHMqXDxhcnJhXCVbeV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGNvdW5cJVt0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y3JlYVwlW3RlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y3JlYVwlW3RlXVw+XHMqXDxjb2xvXCVbcl1cPlxzKlw8c2V0XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxjcmVhXCVbdGVdXD5ccypcPGN1cnNcJVtvcl1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGNyZWFcJVt0ZV1cPlxzKlw8ZnJvbVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y3JlYVwlW3RlXVw+XHMqXDxsYWJlXCVbbF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGNyZWFcJVt0ZV1cPlxzKlw8bWVudVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y3JlYVwlW3RlXVw+XHMqXDxwcm9qXCVbZWN0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y3JlYVwlW3RlXVw+XHMqXDxxdWVyXCVbeV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGNyZWFcJVt0ZV1cPlxzKlw8cmVwb1wlW3J0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y3JlYVwlW3RlXVw+XHMqXDxzY3JlXCVbZW5dXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxjcmVhXCVbdGVdXD5ccypcPHRhYmxcJVtlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Y3JlYVwlW3RlXVw+XHMqXDx2aWV3XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxkZGVcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGRlYWNcJVt0aXZhdGVdXD5ccypcPG1lbnVcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGRlYWNcJVt0aXZhdGVdXD5ccypcPHBvcHVcJVtwXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGVhY1wlW3RpdmF0ZV1cPlxzKlw8d2luZFwlW293XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGVjbFwlW2FyZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGRlZmlcJVtuZV1cPlxzKlw8YmFyXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxkZWZpXCVbbmVdXD5ccypcPGJveFw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGVmaVwlW25lXVw+XHMqXDxtZW51XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxkZWZpXCVbbmVdXD5ccypcPHBhZFw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGVmaVwlW25lXVw+XHMqXDxwb3B1XCVbcF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGRlZmlcJVtuZV1cPlxzKlw8d2luZFwlW293XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGVsZVwlW3RlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGVsZVwlW3RlXVw+XHMqXDxmaWxlXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxkZWxlXCVbdGVdXD5ccypcPHRhZ1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGltZVwlW25zaW9uXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGlyZVwlW2N0b3J5XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGlzcFwlW2xheV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGRpc3BcJVtsYXldXD5ccypcPGZpbGVcJVtzXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGlzcFwlW2xheV1cPlxzKlw8bWVtb1wlW3J5XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGlzcFwlW2xheV1cPlxzKlw8c3RhdFwlW3VzXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZGlzcFwlW2xheV1cPlxzKlw8c3RydVwlW2N0dXJlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZG9cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGVkaXRcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGVqZWNcJVt0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZWplY1wlW3RdXD5ccypcPHBhZ2VcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGVyYXNcJVtlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZXhpdFw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZXhwb1wlW3J0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZXh0ZVwlW3JuYWxdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxmaWxlXCVbcl1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGZpbmRcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGZsdXNcJVtoXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8ZnVuY1wlW3Rpb25dXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxnYXRoXCVbZXJdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxnZXRlXCVbeHByXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8Z29cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGdvdG9cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGhlbHBcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGhpZGVcPlxzKlw8bWVudVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8aGlkZVw+XHMqXDxwb3B1XCVbcF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGhpZGVcPlxzKlw8d2luZFwlW293XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8aW1wb1wlW3J0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8aW5kZVwlW3hdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxpbnB1XCVbdF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGluc2VcJVtydF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGpvaW5cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPGtleWJcJVtvYXJkXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8bGFiZVwlW2xdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxsaXN0XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxsb2FkXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxsb2NhXCVbdGVdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxsb29wXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxtZW51XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxtZW51XD5ccypcPHRvXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxtb2RpXCVbZnldXD5ccypcPGNvbW1cJVthbmRdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxtb2RpXCVbZnldXD5ccypcPGZpbGVcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG1vZGlcJVtmeV1cPlxzKlw8Z2VuZVwlW3JhbF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG1vZGlcJVtmeV1cPlxzKlw8bGFiZVwlW2xdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxtb2RpXCVbZnldXD5ccypcPG1lbW9cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG1vZGlcJVtmeV1cPlxzKlw8bWVudVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8bW9kaVwlW2Z5XVw+XHMqXDxwcm9qXCVbZWN0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8bW9kaVwlW2Z5XVw+XHMqXDxxdWVyXCVbeV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG1vZGlcJVtmeV1cPlxzKlw8cmVwb1wlW3J0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8bW9kaVwlW2Z5XVw+XHMqXDxzY3JlXCVbZW5dXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxtb2RpXCVbZnldXD5ccypcPHN0cnVcJVtjdHVyZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG1vZGlcJVtmeV1cPlxzKlw8d2luZFwlW293XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8bW92ZVw+XHMqXDxwb3B1XCVbcF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG1vdmVcPlxzKlw8d2luZFwlW293XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8bm90ZVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8b25cPlxzKlw8YXBsYVwlW2JvdXRdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxvblw+XHMqXDxiYXJcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG9uXD5ccypcPGVycm9cJVtyXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8b25cPlxzKlw8ZXNjYVwlW3BlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8b25cPlxzKlw8ZXhpdFw+XHMqXDxiYXJcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG9uXD5ccypcPGV4aXRcPlxzKlw8bWVudVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8b25cPlxzKlw8ZXhpdFw+XHMqXDxwYWRcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG9uXD5ccypcPGV4aXRcPlxzKlw8cG9wdVwlW3BdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxvblw+XHMqXDxrZXlcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG9uXD5ccypcPGtleVw+XHMqXDw9XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxvblw+XHMqXDxrZXlcPlxzKlw8bGFiZVwlW2xdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxvblw+XHMqXDxtYWNoXCVbZWxwXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8b25cPlxzKlw8cGFkXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxvblw+XHMqXDxwYWdlXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxvblw+XHMqXDxyZWFkXCVbZXJyb3JdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxvblw+XHMqXDxzZWxlXCVbY3Rpb25dXD5ccypcPGJhclw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8b25cPlxzKlw8c2VsZVwlW2N0aW9uXVw+XHMqXDxtZW51XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxvblw+XHMqXDxzZWxlXCVbY3Rpb25dXD5ccypcPHBhZFw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8b25cPlxzKlw8c2VsZVwlW2N0aW9uXVw+XHMqXDxwb3B1XCVbcF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPG9uXD5ccypcPHNodXRcJVtkb3duXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8cGFja1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8cGFyYVwlW21ldGVyc11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHBsYXlcPlxzKlw8bWFjclwlW29dXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxwb3BcPlxzKlw8a2V5XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxwb3BcPlxzKlw8bWVudVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8cG9wXD5ccypcPHBvcHVcJVtwXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8cHJpdlwlW2F0ZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHByb2NcJVtlZHVyZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHB1YmxcJVtpY11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHB1c2hcPlxzKlw8a2V5XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxwdXNoXD5ccypcPG1lbnVcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHB1c2hcPlxzKlw8cG9wdVwlW3BdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxxdWl0XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxyZWFkXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxyZWFkXD5ccypcPG1lbnVcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHJlY2FcJVtsbF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHJlaW5cJVtkZXhdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxyZWxlXCVbYXNlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8cmVsZVwlW2FzZV1cPlxzKlw8bW9kdVwlW2xlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8cmVuYVwlW21lXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8cmVwbFwlW2FjZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHJlcGxcJVthY2VdXD5ccypcPGZyb21cPlxzKlw8YXJyYVwlW3ldXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxyZXBvXCVbcnRdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxyZXN0XCVbb3JlXVw+XHMqXDxmcm9tXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxyZXN0XCVbb3JlXVw+XHMqXDxtYWNyXCVbb3NdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxyZXN0XCVbb3JlXVw+XHMqXDxzY3JlXCVbZW5dXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxyZXN0XCVbb3JlXVw+XHMqXDx3aW5kXCVbb3ddXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxyZXN1XCVbbWVdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxyZXRyXCVbeV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHJldHVcJVtybl1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHJ1blw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8cnVuXD5ccypcL24iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxydW5zXCVbY3JpcHRdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzYXZlXD5ccypcPG1hY3JcJVtvc11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNhdmVcPlxzKlw8c2NyZVwlW2VuXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2F2ZVw+XHMqXDx0b1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2F2ZVw+XHMqXDx3aW5kXCVbb3dzXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2NhdFwlW3Rlcl1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNjcm9cJVtsbF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNlZWtcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNlbGVcJVtjdF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGFsdGVcJVtybmF0ZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxhbnNpXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8YXBsYVwlW2JvdXRdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8YXV0b1wlW3NhdmVdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8YmVsbFw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGJsaW5cJVtrXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGJsb2NcJVtrc2l6ZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxib3JkXCVbZXJdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8YnJzdFwlW2F0dXNdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8Y2FyclwlW3ldXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8Y2VudFwlW3VyeV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxjbGVhXCVbcl1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxjbG9jXCVba11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxjb2xsXCVbYXRlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGNvbG9cJVtyXVw+XHMqXDxvZlw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGNvbG9cJVtyXVw+XHMqXDxvZlw+XHMqXDxzY2hlXCVbbWVdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8Y29sb1wlW3JdXD5ccypcPHNldFw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGNvbG9cJVtyXVw+XHMqXDx0b1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGNvbXBcJVthdGlibGVdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8Y29uZlwlW2lybV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxjb25zXCVbb2xlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGN1cnJcJVtlbmN5XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGN1cnNcJVtvcl1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxkYXRlXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8ZGVidVwlW2ddXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8ZGVjaVwlW21hbHNdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8ZGVmYVwlW3VsdF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxkZWxlXCVbdGVkXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGRlbGlcJVttaXRlcnNdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8ZGV2ZVwlW2xvcG1lbnRdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8ZGV2aVwlW2NlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGRpc3BcJVtsYXldXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8ZG9oaVwlW3N0b3J5XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGVjaG9cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxlc2NhXCVbcGVdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8ZXhhY1wlW3RdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8ZXhjbFwlW3VzaXZlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGZpZWxcJVtkc11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxmaWx0XCVbZXJdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8Zml4ZVwlW2RdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8Zm9ybVwlW2F0XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGZ1bGxcJVtwYXRoXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGZ1bmNcJVt0aW9uXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGhlYWRcJVtpbmdzXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGhlbHBcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxoZWxwXCVbZmlsdGVyXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGhvdXJcJVtzXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGluZGVcJVt4XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGludGVcJVtuc2l0eV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxrZXlcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxrZXljXCVbb21wXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGxpYnJcJVthcnldXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8bG9ja1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPGxvZ2VcJVtycm9yc11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxtYWNkXCVbZXNrdG9wXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPG1hY2hcJVtlbHBdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8bWFja1wlW2V5XVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPG1hcmdcJVtpbl1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxtYXJrXD5ccypcPG9mXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8bWFya1w+XHMqXDx0b1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPG1lbW9cJVt3aWR0aF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxtZXNzXCVbYWdlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPG1vdXNcJVtlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPG11bHRcJVtpbG9ja3NdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8bmVhclw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPG5vY3BcJVt0cmFuc11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxub3RpXCVbZnldXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8b2RvbVwlW2V0ZXJdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8b3B0aVwlW21pemVdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8b3JkZVwlW3JdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8cGFsZVwlW3R0ZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxwYXRoXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8cGRzZVwlW3R1cF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxwb2luXCVbdF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxwcmluXCVbdGVyXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHByb2NcJVtlZHVyZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxyZWFkXCVbYm9yZGVyXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHJlZnJcJVtlc2hdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8cmVsYVwlW3Rpb25dXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8cmVsYVwlW3Rpb25dXD5ccypcPG9mZlw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHJlcHJcJVtvY2Vzc11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxyZXNvXCVbdXJjZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxzYWZlXCVbdHldXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8c2NvclwlW2Vib2FyZF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxzZXBhXCVbcmF0b3JdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8c2hhZFwlW293c11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxza2lwXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8c2tpcFw+XHMqXDxvZlw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHNwYWNcJVtlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHN0YXRcJVt1c11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxzdGF0XCVbdXNdXD5ccypcPGJhclw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHN0ZXBcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDxzdGljXCVba3ldXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8c3lzbVwlW2VudV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDx0YWxrXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8dGV4dFwlW21lcmdlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHRleHRcJVttZXJnZV1cPlxzKlw8ZGVsaVwlW21pdGVyc11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDx0b3BpXCVbY11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDx0cmJlXCVbdHdlZW5dXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8dHlwZVwlW2FoZWFkXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHVkZnBcJVthcm1zXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHVuaXFcJVt1ZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNldFw+XHMqXDx2aWV3XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzZXRcPlxzKlw8dm9sdVwlW21lXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHdpbmRcJVtvd11cPlxzKlw8b2ZcPlxzKlw8bWVtb1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2V0XD5ccypcPHhjbWRcJVtmaWxlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2hvd1w+XHMqXDxnZXRcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNob3dcPlxzKlw8Z2V0c1w+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c2hvd1w+XHMqXDxtZW51XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzaG93XD5ccypcPG9iamVcJVtjdF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNob3dcPlxzKlw8cG9wdVwlW3BdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzaG93XD5ccypcPHdpbmRcJVtvd11cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHNpemVcPlxzKlw8cG9wdVwlW3BdXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxza2lwXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzb3J0XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDxzdG9yXCVbZV1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHN1bVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8c3VzcFwlW2VuZF1cPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHRvdGFcJVtsXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8dHlwZVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8dW5sb1wlW2NrXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8dXBkYVwlW3RlXVw+Igorc3luIG1hdGNoIGZveHByb0NtZCAiXlxzKlw8dXNlXD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDx3YWl0XD4iCitzeW4gbWF0Y2ggZm94cHJvQ21kICJeXHMqXDx6YXBcPiIKK3N5biBtYXRjaCBmb3hwcm9DbWQgIl5ccypcPHpvb21cPlxzKlw8d2luZFwlW293XVw+IgorCisiIEVuY2xvc2VkIEJsb2NrCitzeW4gbWF0Y2ggZm94cHJvRW5CbGsgIl5ccypcPGRvXD5ccypcPGNhc2VcPiIKK3N5biBtYXRjaCBmb3hwcm9FbkJsayAiXlxzKlw8Y2FzZVw+Igorc3luIG1hdGNoIGZveHByb0VuQmxrICJeXHMqXDxvdGhlXCVbcndpc2VdXD4iCitzeW4gbWF0Y2ggZm94cHJvRW5CbGsgIl5ccypcPGVuZGNcJVthc2VdXD4iCitzeW4gbWF0Y2ggZm94cHJvRW5CbGsgIl5ccypcPGRvXD5ccypcPHdoaWxcJVtlXVw+Igorc3luIG1hdGNoIGZveHByb0VuQmxrICJeXHMqXDxlbmRkXCVbb11cPiIKK3N5biBtYXRjaCBmb3hwcm9FbkJsayAiXlxzKlw8Zm9yXD4iCitzeW4gbWF0Y2ggZm94cHJvRW5CbGsgIl5ccypcPGVuZGZcJVtvcl1cPiIKK3N5biBtYXRjaCBmb3hwcm9FbkJsayAiXlxzKlw8bmV4dFw+Igorc3luIG1hdGNoIGZveHByb0VuQmxrICJeXHMqXDxpZlw+Igorc3luIG1hdGNoIGZveHByb0VuQmxrICJeXHMqXDxlbHNlXD4iCitzeW4gbWF0Y2ggZm94cHJvRW5CbGsgIl5ccypcPGVuZGlcJVtmXVw+Igorc3luIG1hdGNoIGZveHByb0VuQmxrICJeXHMqXDxwcmluXCVbdGpvYl1cPiIKK3N5biBtYXRjaCBmb3hwcm9FbkJsayAiXlxzKlw8ZW5kcFwlW3JpbnRqb2JdXD4iCitzeW4gbWF0Y2ggZm94cHJvRW5CbGsgIl5ccypcPHNjYW5cPiIKK3N5biBtYXRjaCBmb3hwcm9FbkJsayAiXlxzKlw8ZW5kc1wlW2Nhbl1cPiIKK3N5biBtYXRjaCBmb3hwcm9FbkJsayAiXlxzKlw8dGV4dFw+Igorc3luIG1hdGNoIGZveHByb0VuQmxrICJeXHMqXDxlbmR0XCVbZXh0XVw+IgorCisiIFN5c3RlbSBWYXJpYWJsZXMKK3N5biBrZXl3b3JkIGZveHByb1N5c1ZhciBfYWxpZ25tZW50IF9hc3Npc3QgX2JlYXV0aWZ5IF9ib3ggX2NhbGNtZW0gX2NhbGN2YWx1ZQorc3luIGtleXdvcmQgZm94cHJvU3lzVmFyIF9jbGlwdGV4dCBfY3Vyb2JqIF9kYmxjbGljayBfZGlhcnlkYXRlIF9kb3MgX2ZveGRvYworc3luIGtleXdvcmQgZm94cHJvU3lzVmFyIF9mb3hncmFwaCBfZ2VuZ3JhcGggX2dlbm1lbnUgX2dlbnBkIF9nZW5zY3JuIF9nZW54dGFiCitzeW4ga2V5d29yZCBmb3hwcm9TeXNWYXIgX2luZGVudCBfbG1hcmdpbiBfbWFjIF9tbGluZSBfcGFkdmFuY2UgX3BhZ2VubyBfcGJwYWdlCitzeW4ga2V5d29yZCBmb3hwcm9TeXNWYXIgX3Bjb2xubyBfcGNvcGllcyBfcGRyaXZlciBfcGRzZXR1cCBfcGVjb2RlIF9wZWplY3QgX3BlcGFnZQorc3luIGtleXdvcmQgZm94cHJvU3lzVmFyIF9wbGVuZ3RoIF9wbGluZW5vIF9wbG9mZnNldCBfcHBpdGNoIF9wcXVhbGl0eSBfcHJldGV4dAorc3luIGtleXdvcmQgZm94cHJvU3lzVmFyIF9wc2NvZGUgX3BzcGFjaW5nIF9wd2FpdCBfcm1hcmdpbiBfc2hlbGwgX3NwZWxsY2hrCitzeW4ga2V5d29yZCBmb3hwcm9TeXNWYXIgX3N0YXJ0dXAgX3RhYnMgX3RhbGx5IF90ZXh0IF90aHJvdHRsZSBfdHJhbnNwb3J0IF91bml4CitzeW4ga2V5d29yZCBmb3hwcm9TeXNWYXIgX3dpbmRvd3MgX3dyYXAKKworIiBTdHJpbmdzCitzeW4gcmVnaW9uIGZveHByb1N0cmluZyBzdGFydD0rIisgZW5kPSsiKyBvbmVsaW5lCitzeW4gcmVnaW9uIGZveHByb1N0cmluZyBzdGFydD0rJysgZW5kPSsnKyBvbmVsaW5lCitzeW4gcmVnaW9uIGZveHByb1N0cmluZyBzdGFydD0rXFsrIGVuZD0rXF0rIG9uZWxpbmUKKworIiBDb25zdGFudHMKK3N5biBtYXRjaCBmb3hwcm9Db25zdCAiXC50XC4iCitzeW4gbWF0Y2ggZm94cHJvQ29uc3QgIlwuZlwuIgorCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90IGFuZCB3aXRoICJmIi4KK3N5biBtYXRjaCBmb3hwcm9OdW1iZXIgIlw8WzAtOV1cK1w+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggZm94cHJvRmxvYXQgICJcPFswLTldXCtcLlswLTldKlwoZVstK11cPVswLTldXCtcKVw9XD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoIGZveHByb0Zsb2F0ICAiXC5bMC05XVwrXChlWy0rXVw9WzAtOV1cK1wpXD1cPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGhvdXQgZG90LCB3aXRoIGV4cG9uZW50CitzeW4gbWF0Y2ggZm94cHJvRmxvYXQgICJcPFswLTldXCtlWy0rXVw9WzAtOV1cK1w+IgorCitzeW4gbWF0Y2ggZm94cHJvQ29tbWVudCAiXlxzKlwqLioiCitzeW4gbWF0Y2ggZm94cHJvQ29tbWVudCAiJiYuKiIKKworImNhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMKK3N5biByZWdpb24gZm94cHJvUGFyZW4gdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULGZveHByb1BhcmVuRXJyCitzeW4gbWF0Y2ggZm94cHJvUGFyZW5FcnIgIikiCisKK3N5biBzeW5jIG1pbmxpbmVzPTEgbWF4bGluZXM9MworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9mb3hwcm9fc3luX2luaXRzIikKKyAgICBpZiB2ZXJzaW9uIDwgNTA4CisJbGV0IGRpZF9mb3hwcm9fc3luX2luaXRzID0gMQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgICAgZWxzZQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgIGVuZGlmCisKKyAgICBIaUxpbmsgZm94cHJvU3BlY2lhbCAgU3BlY2lhbAorICAgIEhpTGluayBmb3hwcm9BdFN5bWJvbCBTcGVjaWFsCisgICAgSGlMaW5rIGZveHByb0F0Q21kICAgIFN0YXRlbWVudAorICAgIEhpTGluayBmb3hwcm9QcmVQcm9jICBQcmVQcm9jCisgICAgSGlMaW5rIGZveHByb0Z1bmMgICAgIElkZW50aWZpZXIKKyAgICBIaUxpbmsgZm94cHJvQ21kICAgICAgU3RhdGVtZW50CisgICAgSGlMaW5rIGZveHByb0VuQmxrICAgIFR5cGUKKyAgICBIaUxpbmsgZm94cHJvU3lzVmFyICAgU3RyaW5nCisgICAgSGlMaW5rIGZveHByb1N0cmluZyAgIFN0cmluZworICAgIEhpTGluayBmb3hwcm9Db25zdCAgICBDb25zdGFudAorICAgIEhpTGluayBmb3hwcm9OdW1iZXIgICBOdW1iZXIKKyAgICBIaUxpbmsgZm94cHJvRmxvYXQgICAgRmxvYXQKKyAgICBIaUxpbmsgZm94cHJvQ29tbWVudCAgQ29tbWVudAorICAgIEhpTGluayBmb3hwcm9QYXJlbkVyciBFcnJvcgorCisgICAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImZveHBybyIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2ZzdGFiLnZpbSBiL3J1bnRpbWUvc3ludGF4L2ZzdGFiLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzY1ZjMzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZnN0YWIudmltCkBAIC0wLDAgKzEsMjA4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJZnN0YWIgZmlsZQorIiBNYWludGFuZXI6CVJhZHUgRGluZWl1IDxsaXR0bGVkcmFnb25AYWx0ZXJuLm9yZz4KKyIgVVJMOgkJaHR0cDovL2xkLnlpLm9yZy92aW0vZnN0YWIudmltCisiIENoYW5nZUxvZzoJaHR0cDovL2xkLnlpLm9yZy92aW0vZnN0YWIuQ2hhbmdlTG9nCisiIExhc3QgQ2hhbmdlOgkyMDAzIEFwciAzMAorIiBWZXJzaW9uOgkwLjYxCisKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworIiBHZW5lcmFsCitzeW4gY2x1c3RlciBmc0dlbmVyYWxDbHVzdGVyIGNvbnRhaW5zPWZzQ29tbWVudAorc3luIG1hdGNoIGZzQ29tbWVudCAvXHMqIy4qLworc3luIG1hdGNoIGZzT3BlcmF0b3IgL1ssPV0vCisKKyIgRGV2aWNlCitzeW4gY2x1c3RlciBmc0RldmljZUNsdXN0ZXIgY29udGFpbnM9ZnNPcGVyYXRvcixmc0RldmljZUtleXdvcmQsZnNEZXZpY2VFcnJvcgorc3luIG1hdGNoIGZzRGV2aWNlRXJyb3IgL1wlKFteYS16QS1aMC05X1wvI0BdXHxeXHdcey19XHplXFdcKS8gY29udGFpbmVkCitzeW4ga2V5d29yZCBmc0RldmljZUtleXdvcmQgY29udGFpbmVkIG5vbmUgcHJvYyBsaW5wcm9jIHRtcGZzCitzeW4ga2V5d29yZCBmc0RldmljZUtleXdvcmQgY29udGFpbmVkIExBQkVMIG5leHRncm91cD1mc0RldmljZUxhYmVsCitzeW4gbWF0Y2ggZnNEZXZpY2VMYWJlbCBjb250YWluZWQgLz1bXiBcdF1cKy9ocz1zKzEgY29udGFpbnM9ZnNPcGVyYXRvcgorCisiIE1vdW50IFBvaW50CitzeW4gY2x1c3RlciBmc01vdW50UG9pbnRDbHVzdGVyIGNvbnRhaW5zPWZzTW91bnRQb2ludEtleXdvcmQsZnNNb3VudFBvaW50RXJyb3IKK3N5biBtYXRjaCBmc01vdW50UG9pbnRFcnJvciAvXCUoW14gXHRhLXpBLVowLTlfXC8jQF1cfFxzXCtcenNcd1x7LX1cemVcc1wpLyBjb250YWluZWQKK3N5biBrZXl3b3JkIGZzTW91bnRQb2ludEtleXdvcmQgY29udGFpbmVkIG5vbmUgc3dhcAorCisiIFR5cGUKK3N5biBjbHVzdGVyIGZzVHlwZUNsdXN0ZXIgY29udGFpbnM9ZnNUeXBlS2V5d29yZCxmc1R5cGVFcnJvcgorc3luIG1hdGNoIGZzVHlwZUVycm9yIC9cc1wrXHpzXHdcKy8gY29udGFpbmVkCitzeW4ga2V5d29yZCBmc1R5cGVLZXl3b3JkIGNvbnRhaW5lZCBhZGZzIGFmZnMgYXV0byBhdXRvZnMgY2Q5NjYwIGNvZGEgY3JhbWZzIGRldmZzIGRldnB0cyBlZnMgZXh0MiBleHQzIGZkZXNjIGhmcyBocGZzIGlzbzk2NjAga2VybmZzIGxpbnByb2NmcyBtZnMgbWluaXggbXNkb3MgbmNwZnMgbmZzIG50ZnMgbndmcyBudWxsIHBvcnRhbCBwcm9jIHByb2NmcyBxbng0IHJlaXNlcmZzIHJvbWZzIHNtYmZzIHN0ZCBzeXN2IHN3YXAgdG1wZnMgdWRmIHVmcyB1bWFwIHVtc2RvcyB1bmlvbiB2ZmF0IHhmcworCisiIE9wdGlvbnMKKyIgLS0tLS0tLQorIiBPcHRpb25zOiBHZW5lcmFsCitzeW4gY2x1c3RlciBmc09wdGlvbnNDbHVzdGVyIGNvbnRhaW5zPWZzT3BlcmF0b3IsZnNPcHRpb25zR2VuZXJhbCxmc09wdGlvbnNLZXl3b3Jkcyxmc1R5cGVFcnJvcgorc3luIG1hdGNoIGZzT3B0aW9uc051bWJlciAvXGRcKy8KK3N5biBtYXRjaCBmc09wdGlvbnNOdW1iZXJPY3RhbCAvWzAtOF1cKy8KK3N5biBtYXRjaCBmc09wdGlvbnNTdHJpbmcgL1thLXpBLVowLTlfLV1cKy8KK3N5biBrZXl3b3JkIGZzT3B0aW9uc1llc05vIHllcyBubworc3luIGNsdXN0ZXIgZnNPcHRpb25zQ2hlY2tDbHVzdGVyIGNvbnRhaW5zPWZzT3B0aW9uc0V4dDJDaGVjayxmc09wdGlvbnNGYXRDaGVjaworc3luIGtleXdvcmQgZnNPcHRpb25zU2l6ZSA1MTIgMTAyNCAyMDQ4CitzeW4ga2V5d29yZCBmc09wdGlvbnNHZW5lcmFsIGFzeW5jIGF0aW1lIGF1dG8gY3VycmVudCBkZWZhdWx0cyBkZXYgZXhlYyBmb3JjZSBmc3RhYiBub2F0aW1lIG5vYXV0byBub2NsdXN0ZXJyIG5vY2x1c3Rlcncgbm9kZXYgbm9leGVjIG5vc3VpZCBub3N5bWZvbGxvdyBub3VzZXIgb3duZXIgcm8gcmRvbmx5IHJ3IHJxIHN3IHh4IHN1aWQgc3VpZGRpciBzeW5jIGt1ZHp1IHVuaW9uIHVwZGF0ZSB1c2VyIHN1cGVybW91bnQKK3N5biBtYXRjaCBmc09wdGlvbnNHZW5lcmFsIC9fbmV0ZGV2LworCisiIE9wdGlvbnM6IGFkZnMKK3N5biBtYXRjaCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgL1wlKFt1Z11pZFx8b1wlKHduXHx0aFwpbWFza1wpPS8gbmV4dGdyb3VwPWZzT3B0aW9uc051bWJlcgorCisiIE9wdGlvbnM6IGFmZnMKK3N5biBtYXRjaCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgL1wlKHNldFt1Z11pZFx8bW9kZVx8cmVzZXJ2ZWRcKT0vIG5leHRncm91cD1mc09wdGlvbnNOdW1iZXIKK3N5biBtYXRjaCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgL1wlKHByZWZpeFx8dm9sdW1lXHxyb290XCk9LyBuZXh0Z3JvdXA9ZnNPcHRpb25zU3RyaW5nCitzeW4gbWF0Y2ggZnNPcHRpb25zS2V5d29yZHMgY29udGFpbmVkIC9icz0vIG5leHRncm91cD1mc09wdGlvbnNTaXplCitzeW4ga2V5d29yZCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgcHJvdGVjdCB1c2VtcCB2ZXJib3NlCisKKyIgT3B0aW9uczogY2Q5NjYwCitzeW4ga2V5d29yZCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgZXh0YXR0IGdlbnMgbm9ycmlwIG5vc3RyaWN0am9pbGV0CisKKyIgT3B0aW9uczogZGV2cHRzCisiIC0tIGV2ZXJ5dGhpbmcgYWxyZWFkeSBkZWZpbmVkCisKKyIgT3B0aW9uczogZXh0Mgorc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvY2hlY2s9Ki8gbmV4dGdyb3VwPUBmc09wdGlvbnNDaGVja0NsdXN0ZXIKK3N5biBtYXRjaCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgL2Vycm9ycz0vIG5leHRncm91cD1mc09wdGlvbnNFeHQyRXJyb3JzCitzeW4gbWF0Y2ggZnNPcHRpb25zS2V5d29yZHMgY29udGFpbmVkIC9cJShyZXNbZ3VdaWRcfHNiXCk9LyBuZXh0Z3JvdXA9ZnNPcHRpb25zTnVtYmVyCitzeW4ga2V5d29yZCBmc09wdGlvbnNFeHQyQ2hlY2sgY29udGFpbmVkIG5vbmUgbm9ybWFsIHN0cmljdAorc3luIGtleXdvcmQgZnNPcHRpb25zRXh0MkVycm9ycyBjb250YWluZWQgY29udGludWUgcGFuaWMKK3N5biBtYXRjaCBmc09wdGlvbnNFeHQyRXJyb3JzIGNvbnRhaW5lZCAvcmVtb3VudC1yby8KK3N5biBrZXl3b3JkIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCBic2RkZiBtaW5peGRmIGRlYnVnIGdycGlkIGJzZGdyb3VwcyBub2NoZWNrIG5vZ3JwaWQgc3lzdmdyb3VwcyBub3VpZDMyCisKKyIgT3B0aW9uczogZXh0Mworc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvam91cm5hbD0vIG5leHRncm91cD1mc09wdGlvbnNFeHQzSm91cm5hbAorc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvZGF0YT0vIG5leHRncm91cD1mc09wdGlvbnNFeHQzRGF0YQorc3luIGtleXdvcmQgZnNPcHRpb25zRXh0M0pvdXJuYWwgY29udGFpbmVkIHVwZGF0ZSBpbnVtCitzeW4ga2V5d29yZCBmc09wdGlvbnNFeHQzRGF0YSBjb250YWluZWQgam91cm5hbCBvcmRlcmVkIHdyaXRlYmFjaworc3luIGtleXdvcmQgZnNPcHRpb25zS2V5d29yZHMgY29udGFpbmVkIG5vbG9hZAorCisiIE9wdGlvbnM6IGZhdAorc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvYmxvY2tzaXplPS8gbmV4dGdyb3VwPWZzT3B0aW9uc1NpemUKK3N5biBtYXRjaCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgL1wlKFtkZnVdbWFza1x8Y29kZXBhZ2VcKT0vIG5leHRncm91cD1mc09wdGlvbnNOdW1iZXJPY3RhbAorc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvXCUoY3ZmX1wlKGZvcm1hdFx8b3B0aW9uXClcfGlvY2hhcnNldFwpPS8gbmV4dGdyb3VwPWZzT3B0aW9uc1N0cmluZworc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvY2hlY2s9LyBuZXh0Z3JvdXA9QGZzT3B0aW9uc0NoZWNrQ2x1c3Rlcgorc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvY29udj0qLyBuZXh0Z3JvdXA9ZnNPcHRpb25zQ29udgorc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvZmF0PS8gbmV4dGdyb3VwPWZzT3B0aW9uc0ZhdFR5cGUKK3N5biBtYXRjaCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgL2RvdHNPSz0vIG5leHRncm91cD1mc09wdGlvbnNZZXNObworc3luIGtleXdvcmQgZnNPcHRpb25zRmF0Q2hlY2sgY29udGFpbmVkIHIgbiBzIHJlbGF4ZWQgbm9ybWFsIHN0cmljdAorc3luIGtleXdvcmQgZnNPcHRpb25zQ29udiBjb250YWluZWQgYiB0IGEgYmluYXJ5IHRleHQgYXV0bworc3luIGtleXdvcmQgZnNPcHRpb25zRmF0VHlwZSBjb250YWluZWQgMTIgMTYgMzIKK3N5biBrZXl3b3JkIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCBxdWlldCBzeXNfaW1tdXRhYmxlIHNob3dleGVjIGRvdHMgbm9kb3RzCisKKyIgT3B0aW9uczogaHBmcworc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvY2FzZT0vIG5leHRncm91cD1mc09wdGlvbnNIcGZzQ2FzZQorc3luIGtleXdvcmQgZnNPcHRpb25zSHBmc0Nhc2UgY29udGFpbmVkIGxvd2VyIGFzaXMKKworIiBPcHRpb25zOiBpc285NjYwCitzeW4gbWF0Y2ggZnNPcHRpb25zS2V5d29yZHMgY29udGFpbmVkIC9tYXA9LyBuZXh0Z3JvdXA9ZnNPcHRpb25zSXNvTWFwCitzeW4gbWF0Y2ggZnNPcHRpb25zS2V5d29yZHMgY29udGFpbmVkIC9ibG9jaz0vIG5leHRncm91cD1mc09wdGlvbnNTaXplCitzeW4gbWF0Y2ggZnNPcHRpb25zS2V5d29yZHMgY29udGFpbmVkIC9cJShzZXNzaW9uXHxzYnNlY3RvclwpPS8gbmV4dGdyb3VwPWZzT3B0aW9uc051bWJlcgorc3luIGtleXdvcmQgZnNPcHRpb25zSXNvTWFwIGNvbnRhaW5lZCBuIG8gYSBub3JtYWwgb2ZmIGFjb3JuCitzeW4ga2V5d29yZCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgbm9yb2NrIG5vam9pbGV0IHVuaGlkZSBjcnVmdAorc3luIGtleXdvcmQgZnNPcHRpb25zQ29udiBjb250YWluZWQgbSBtdGV4dAorCisiIE9wdGlvbnM6IG5mcworc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvXCUocnNpemVcfHdzaXplXHx0aW1lb1x8cmV0cmFuc1x8YWNyZWdtaW5cfGFjcmVnbWF4XHxhY2Rpcm1pblx8YWNkaXJtYXhcfGFjdGltZW9cfHJldHJ5XHxwb3J0XHxtb3VudHBvcnRcfG1vdW50aG9zdFx8bW91bnRwcm9nXHxtb3VudHZlcnNcfG5mc3Byb2dcfG5mc3ZlcnNcfG5hbWVsZW5cKT0vIG5leHRncm91cD1mc09wdGlvbnNTdHJpbmcKK3N5biBrZXl3b3JkIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCBiZyBmZyBzb2Z0IGhhcmQgaW50ciBjdG8gYWMgdGNwIHVkcCBsb2NrIG5vYmcgbm9mZyBub3NvZnQgbm9oYXJkIG5vaW50ciBub3Bvc2l4IG5vY3RvIG5vYWMgbm90Y3Agbm91ZHAgbm9sb2NrCisKKyIgT3B0aW9uczogbnRmcworc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvXCUocG9zaXg9Klx8dW5pX3hsYXRlPVwpLyBuZXh0Z3JvdXA9ZnNPcHRpb25zTnVtYmVyCitzeW4ga2V5d29yZCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgdXRmOAorCisiIE9wdGlvbnM6IHByb2MKKyIgLS0gZXZlcnl0aGluZyBhbHJlYWR5IGRlZmluZWQKKworIiBPcHRpb25zOiByZWlzZXJmcworc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvaGFzaD0vIG5leHRncm91cD1mc09wdGlvbnNSZWlzZXJIYXNoCitzeW4gbWF0Y2ggZnNPcHRpb25zS2V5d29yZHMgY29udGFpbmVkIC9yZXNpemU9LyBuZXh0Z3JvdXA9ZnNPcHRpb25zTnVtYmVyCitzeW4ga2V5d29yZCBmc09wdGlvbnNSZWlzZXJIYXNoIGNvbnRhaW5lZCBydXBhc292IHRlYSByNSBkZXRlY3QKK3N5biBrZXl3b3JkIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCBoYXNoZWRfcmVsb2NhdGlvbiBub2JvcmRlciBub2xvZyBub3RhaWwgbm9fdW5oYXNoZWRfcmVsb2NhdGlvbiByZXBsYXlvbmx5CisKKyIgT3B0aW9uczogdWRmCitzeW4gbWF0Y2ggZnNPcHRpb25zS2V5d29yZHMgY29udGFpbmVkIC9cJShhbmNob3JcfHBhcnRpdGlvblx8bGFzdGJsb2NrXHxmaWxlc2V0XHxyb290ZGlyXCk9LyBuZXh0Z3JvdXA9ZnNPcHRpb25zU3RyaW5nCitzeW4ga2V5d29yZCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgdW5oaWRlIHVuZGVsZXRlIHN0cmljdCBub3ZycworCisiIE9wdGlvbnM6IHVmcworc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvdWZzdHlwZT0vIG5leHRncm91cD1mc09wdGlvbnNVZnNUeXBlCitzeW4gbWF0Y2ggZnNPcHRpb25zS2V5d29yZHMgY29udGFpbmVkIC9vbmVycm9yPS8gbmV4dGdyb3VwPWZzT3B0aW9uc1Vmc0Vycm9yCitzeW4ga2V5d29yZCBmc09wdGlvbnNVZnNUeXBlIGNvbnRhaW5lZCBvbGQgNDRic2Qgc3VuIHN1bng4NiBuZXh0c3RlcCBvcGVuc3RlcAorc3luIG1hdGNoIGZzT3B0aW9uc1Vmc1R5cGUgY29udGFpbmVkIC9uZXh0c3RlcC1jZC8KK3N5biBrZXl3b3JkIGZzT3B0aW9uc1Vmc0Vycm9yIGNvbnRhaW5lZCBwYW5pYyBsb2NrIHVtb3VudCByZXBhaXIKKworIiBPcHRpb25zOiB2ZmF0CitzeW4ga2V5d29yZCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgbm9udW10YWlsIHBvc2l4IHV0ZjgKK3N5biBtYXRjaCBmc09wdGlvbnNLZXl3b3JkcyBjb250YWluZWQgL3Nob3J0bmFtZT0vIG5leHRncm91cD1mc09wdGlvbnNWZmF0U2hvcnRuYW1lCitzeW4ga2V5d29yZCBmc09wdGlvbnNWZmF0U2hvcnRuYW1lIGNvbnRhaW5lZCBsb3dlciB3aW45NSB3aW5udCBtaXhlZAorCisiIE9wdGlvbnM6IHhmcworc3luIG1hdGNoIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCAvXCUoYmlvc2l6ZVx8bG9nYnVmc1x8bG9nYnNpemVcfGxvZ2Rldlx8cnRkZXZcfHN1bml0XHxzd2lkdGhcKT0vIG5leHRncm91cD1mc09wdGlvbnNTdHJpbmcKK3N5biBrZXl3b3JkIGZzT3B0aW9uc0tleXdvcmRzIGNvbnRhaW5lZCBkbWFwaSB4ZHNtIG5vYWxpZ24gbm9hdGltZSBub3JlY292ZXJ5IG9zeW5jaXNkc3luYyBxdW90YSB1c3JxdW90YSB1cXVvZW5mb3JjZSBncnBxdW90YSBncXVvZW5mb3JjZQorCisiIEZyZXF1ZW5jeSAvIFBhc3MgTm8uCitzeW4gY2x1c3RlciBmc0ZyZXFQYXNzQ2x1c3RlciBjb250YWlucz1mc0ZyZXFQYXNzTnVtYmVyLGZzRnJlcVBhc3NFcnJvcgorc3luIG1hdGNoIGZzRnJlcVBhc3NFcnJvciAvXHNcK1x6c1wlKFxELipcfFxTLipcfFxkXCtcc1wrW14wMTJdXClcemUvIGNvbnRhaW5lZAorc3luIG1hdGNoIGZzRnJlcVBhc3NOdW1iZXIgL1xkXCtcc1wrWzAxMl1ccyovIGNvbnRhaW5lZAorCisiIEdyb3Vwcworc3luIG1hdGNoIGZzRGV2aWNlIC9eXHMqXHpzLlx7LTEsfVxzL21lPWUtMSBuZXh0Z3JvdXA9ZnNNb3VudFBvaW50IGNvbnRhaW5zPUBmc0RldmljZUNsdXN0ZXIsQGZzR2VuZXJhbENsdXN0ZXIKK3N5biBtYXRjaCBmc01vdW50UG9pbnQgL1xzXCsuXHstfVxzL21lPWUtMSBuZXh0Z3JvdXA9ZnNUeXBlIGNvbnRhaW5zPUBmc01vdW50UG9pbnRDbHVzdGVyLEBmc0dlbmVyYWxDbHVzdGVyIGNvbnRhaW5lZAorc3luIG1hdGNoIGZzVHlwZSAvXHNcKy5cey19XHMvbWU9ZS0xIG5leHRncm91cD1mc09wdGlvbnMgY29udGFpbnM9QGZzVHlwZUNsdXN0ZXIsQGZzR2VuZXJhbENsdXN0ZXIgY29udGFpbmVkCitzeW4gbWF0Y2ggZnNPcHRpb25zIC9cc1wrLlx7LX1ccy9tZT1lLTEgbmV4dGdyb3VwPWZzRnJlcVBhc3MgY29udGFpbnM9QGZzT3B0aW9uc0NsdXN0ZXIsQGZzR2VuZXJhbENsdXN0ZXIgY29udGFpbmVkCitzeW4gbWF0Y2ggZnNGcmVxUGFzcyAvXHNcKy5cey19JC8gY29udGFpbnM9QGZzRnJlcVBhc3NDbHVzdGVyLEBmc0dlbmVyYWxDbHVzdGVyIGNvbnRhaW5lZAorCisiIFdob2xlIGxpbmUgY29tbWVudHMKK3N5biBtYXRjaCBmc0NvbW1lbnRMaW5lIC9eIy4qJC8KKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2NvbmZpZ19zeW50YXhfaW5pdHMiKQorCWlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9jb25maWdfc3ludGF4X2luaXRzID0gMQorCQljb21tYW5kISAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQhIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKwllbmRpZgorCisJSGlMaW5rIGZzT3BlcmF0b3IgT3BlcmF0b3IKKwlIaUxpbmsgZnNDb21tZW50IENvbW1lbnQKKwlIaUxpbmsgZnNDb21tZW50TGluZSBDb21tZW50CisKKwlIaUxpbmsgZnNUeXBlS2V5d29yZCBUeXBlCisJSGlMaW5rIGZzRGV2aWNlS2V5d29yZCBJZGVudGlmaWVyCisJSGlMaW5rIGZzRGV2aWNlTGFiZWwgU3RyaW5nCisJSGlMaW5rIGZzRnJlcVBhc3NOdW1iZXIgTnVtYmVyCisKKwlIaUxpbmsgZnNUeXBlRXJyb3IgRXJyb3IKKwlIaUxpbmsgZnNEZXZpY2VFcnJvciBFcnJvcgorCUhpTGluayBmc01vdW50UG9pbnRFcnJvciBFcnJvcgorCUhpTGluayBmc01vdW50UG9pbnRLZXl3b3JkIEtleXdvcmQKKwlIaUxpbmsgZnNGcmVxUGFzc0Vycm9yIEVycm9yCisKKwlIaUxpbmsgZnNPcHRpb25zR2VuZXJhbCBUeXBlCisJSGlMaW5rIGZzT3B0aW9uc0tleXdvcmRzIEtleXdvcmQKKwlIaUxpbmsgZnNPcHRpb25zTnVtYmVyIE51bWJlcgorCUhpTGluayBmc09wdGlvbnNOdW1iZXJPY3RhbCBOdW1iZXIKKwlIaUxpbmsgZnNPcHRpb25zU3RyaW5nIFN0cmluZworCUhpTGluayBmc09wdGlvbnNTaXplIE51bWJlcgorCUhpTGluayBmc09wdGlvbnNFeHQyQ2hlY2sgU3RyaW5nCisJSGlMaW5rIGZzT3B0aW9uc0V4dDJFcnJvcnMgU3RyaW5nCisJSGlMaW5rIGZzT3B0aW9uc0V4dDNKb3VybmFsIFN0cmluZworCUhpTGluayBmc09wdGlvbnNFeHQzRGF0YSBTdHJpbmcKKwlIaUxpbmsgZnNPcHRpb25zRmF0Q2hlY2sgU3RyaW5nCisJSGlMaW5rIGZzT3B0aW9uc0NvbnYgU3RyaW5nCisJSGlMaW5rIGZzT3B0aW9uc0ZhdFR5cGUgTnVtYmVyCisJSGlMaW5rIGZzT3B0aW9uc1llc05vIFN0cmluZworCUhpTGluayBmc09wdGlvbnNIcGZzQ2FzZSBTdHJpbmcKKwlIaUxpbmsgZnNPcHRpb25zSXNvTWFwIFN0cmluZworCUhpTGluayBmc09wdGlvbnNSZWlzZXJIYXNoIFN0cmluZworCUhpTGluayBmc09wdGlvbnNVZnNUeXBlIFN0cmluZworCUhpTGluayBmc09wdGlvbnNVZnNFcnJvciBTdHJpbmcKKworCUhpTGluayBmc09wdGlvbnNWZmF0U2hvcnRuYW1lIFN0cmluZworCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImZzdGFiIgorCisiIHZpbTogdHM9OCBmdD12aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2Z2d20udmltIGIvcnVudGltZS9zeW50YXgvZnZ3bS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYxYjc4MwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2Z2d20udmltCkBAIC0wLDAgKzEsMzQ5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJRnZ3bXsxLDJ9IGNvbmZpZ3VyYXRpb24gZmlsZQorIiBNYWludGFpbmVyOglIYWFrb24gUmlpc2VyIDxoYWtvbnJrQGZ5cy51aW8ubm8+CisiIExhc3QgQ2hhbmdlOgkyMDAyIEp1biAyCisiCisiIFRoYW5rcyB0byBEYXZpZCBOZWNhcyAoWWV0aSkgZm9yIGFkZGluZyBGdndtIDIuNCBzdXBwb3J0LgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICAgIHN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgICAgZmluaXNoCitlbmRpZgorCisiIEZ2d20gY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZQorc3luIGNhc2UgaWdub3JlCisKKyIgSWRlbnRpZmllcnMgaW4gRnZ3bSBjYW4gY29udGFpbiBtb3N0IGNoYXJhY3RlcnMsIHNvIHdlIG9ubHkKKyIgaW5jbHVkZSB0aGUgbW9zdCBjb21tb24gb25lcyBoZXJlLgoraWYgdmVyc2lvbiA+PSA2MDAKKyAgICBzZXRsb2NhbCBpc2tleXdvcmQ9XywtLCssLixhLXosQS1aLDQ4LTU3CitlbHNlCisgICAgc2V0IGlza2V5d29yZD1fLC0sKywuLGEteixBLVosNDgtNTcKK2VuZGlmCisKKyIgUmVhZCBzeXN0ZW0gY29sb3JzIGZyb20gdGhlIGNvbG9yIGRhdGFiYXNlIChyZ2IudHh0KQoraWYgZXhpc3RzKCJyZ2JfZmlsZSIpCisgICAgIiBXZSBkb24ndCB3YW50IGFueSBoaXQtcmV0dXJuIHByb21wdHMsIHNvIHdlIG1ha2Ugc3VyZSB0aGF0CisgICAgIiAmc2hvcnRtZXNzIGlzIHNldCB0byBgTycKKyAgICBsZXQgX19mdndtX29sZHNobSA9ICZzaG9ydG1lc3MKKyAgICBzZXQgc2hvcnRtZXNzPU8KKworICAgICIgQW5kIHdlIHNldCAmcmVwb3J0IHRvIGEgaHVnZSBudW1iZXIsIHNvIHRoYXQgbm8gaGl0LXJldHVybiBwcm9tcHRzCisgICAgIiB3aWxsIGJlIGdpdmVuCisgICAgbGV0IF9fZnZ3bV9vbGRyZXBvcnQgPSAmcmVwb3J0CisgICAgc2V0IHJlcG9ydD0xMDAwMAorCisgICAgIiBBcHBlbmQgdGhlIGNvbG9yIGRhdGFiYXNlIHRvIHRoZSBmdndtIGNvbmZpZ3VyYXRpb24sIGFuZCByZWFkIHRoZQorICAgICIgY29sb3JzIGZyb20gdGhpcyBidWZmZXIKKyAgICBsZXQgX19mdndtX2kgPSBsaW5lKCIkIikgKyAxCisgICAgZXhlICIkciIgcmdiX2ZpbGUKKyAgICBsZXQgX19mdndtX2xhc3RsaW5lID0gbGluZSgiJCIpCisgICAgd2hpbGUgX19mdndtX2kgPD0gX19mdndtX2xhc3RsaW5lCisJbGV0IF9fZnZ3bV9zID0gbWF0Y2hzdHIoZ2V0bGluZShfX2Z2d21faSksICdeXHMqXGRcK1xzXCtcZFwrXHNcK1xkXCtcc1wrXGguKiQnKQorCWlmIF9fZnZ3bV9zICE9ICIiCisJICAgIGV4ZSAic3luIGtleXdvcmQgZnZ3bUNvbG9ycyAiLnN1YnN0aXR1dGUoX19mdndtX3MsICdeXHMqXGRcK1xzXCtcZFwrXHNcK1xkXCtcc1wrXChcaC4qXCkkJywgJ1wxJywgIiIpCisJZW5kaWYKKwlsZXQgX19mdndtX2kgPSBfX2Z2d21faSArIDEKKyAgICBlbmR3aGlsZQorCisgICAgIiBSZW1vdmUgdGhlIGFwcGVuZGVkIGRhdGEKKyAgICB1bmRvCisKKyAgICAiIEdvdG8gZmlyc3QgbGluZSBhZ2FpbgorICAgIDEKKworICAgICIgYW5kIHJlc3RvcmUgdGhlIG9sZCB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcworICAgIGxldCAmc2hvcnRtZXNzID0gX19mdndtX29sZHNobQorICAgIGxldCAmcmVwb3J0ID0gX19mdndtX29sZHJlcG9ydAorICAgIHVubGV0IF9fZnZ3bV9pIF9fZnZ3bV9zIF9fZnZ3bV9sYXN0bGluZSBfX2Z2d21fb2xkc2htIF9fZnZ3bV9vbGRyZXBvcnQKK2VuZGlmCisiIGRvbmUgcmVhZGluZyBjb2xvcnMKKworc3luIG1hdGNoICAgZnZ3bVdoaXRlc3BhY2UJIlxzXCsiIGNvbnRhaW5lZAorc3luIG1hdGNoICAgZnZ3bUVudlZhcgkJIlwkXHdcKyIKK3N5biBtYXRjaCAgIGZ2d21Nb2RDb25mCQkiXlxzKlwqXGFcKyIgY29udGFpbnM9ZnZ3bVdoaXRlc3BhY2UKK3N5biBtYXRjaCAgIGZ2d21TdHJpbmcJCSciLlx7LX0iJworc3luIG1hdGNoICAgZnZ3bVJHQlZhbHVlCSIjXHhcezN9Igorc3luIG1hdGNoICAgZnZ3bVJHQlZhbHVlCSIjXHhcezZ9Igorc3luIG1hdGNoICAgZnZ3bVJHQlZhbHVlCSIjXHhcezl9Igorc3luIG1hdGNoICAgZnZ3bVJHQlZhbHVlCSIjXHhcezEyfSIKK3N5biBtYXRjaCAgIGZ2d21SR0JWYWx1ZQkicmdiOlx4XHsxLDR9L1x4XHsxLDR9L1x4XHsxLDR9Igorc3luIG1hdGNoICAgZnZ3bVBhdGgJCSJcPEljb25QYXRoXHMuKiQibGM9OCBjb250YWlucz1mdndtRW52VmFyCitzeW4gbWF0Y2ggICBmdndtUGF0aAkJIlw8TW9kdWxlUGF0aFxzLiokImxjPTEwIGNvbnRhaW5zPWZ2d21FbnZWYXIKK3N5biBtYXRjaCAgIGZ2d21QYXRoCQkiXDxQaXhtYXBQYXRoXHMuKiQibGM9MTAgY29udGFpbnM9ZnZ3bUVudlZhcgorc3luIG1hdGNoICAgZnZ3bU1vZHVsZQkJIlw8TW9kdWxlXHNcK1x3XCsiaGU9cys2CitzeW4gbWF0Y2ggICBmdndtS2V5CQkiXDxLZXlcc1wrXHdcKyJoZT1zKzMKK3N5biBrZXl3b3JkIGZ2d21FeGVjCQlFeGVjCitzeW4gbWF0Y2ggICBmdndtQ29tbWVudAkJIl4jLiokIgorCitpZiAoZXhpc3RzKCJiOmZ2d21fdmVyc2lvbiIpICYmIGI6ZnZ3bV92ZXJzaW9uID09IDEpIHx8IChleGlzdHMoInVzZV9mdndtXzEiKSAmJiB1c2VfZnZ3bV8xKQorICAgIHN5biBtYXRjaCAgZnZ3bUVudlZhcgkiXCQoXHdcKykiCisgICAgc3luIHJlZ2lvbiBmdndtU3R5bGUJbWF0Y2hncm91cD1mdndtRnVuY3Rpb24gc3RhcnQ9Il5ccypTdHlsZVw+ImhzPWUtNSBlbmQ9IiQiIG9uZWxpbmUga2VlcGVuZCBjb250YWlucz1mdndtU3RyaW5nLGZ2d21LZXl3b3JkLGZ2d21XaGl0ZVNwYWNlCisKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JQXBwc0JhY2tpbmdTdG9yZSBBdXRvUmFpc2UgQmFja2luZ1N0b3JlCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCUJlZXAgQm91bmRhcnlXaWR0aCBCdXR0b25TdHlsZQorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglDZW50ZXJPbkNpcmN1bGF0ZSBDaXJjdWxhdGVEb3duCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCUNpcmN1bGF0ZUhpdCBDaXJjdWxhdGVTa2lwCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCUNpcmN1bGF0ZVNraXBJY29ucyBDaXJjdWxhdGVVcAorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglDbGlja1RpbWUgQ2xpY2tUb0ZvY3VzIENsb3NlIEN1cnNvcgorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglDdXJzb3JNb3ZlIERlY29yYXRlVHJhbnNpZW50cyBEZWxldGUKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JRGVzayBEZXNrVG9wU2NhbGUgRGVza1RvcFNpemUgRGVzdHJveQorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglEb250TW92ZU9mZiBFZGdlUmVzaXN0YW5jZSBFZGdlU2Nyb2xsCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCUVuZEZ1bmN0aW9uIEVuZE1lbnUgRW5kUG9wdXAgRm9jdXMKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JRm9udCBGdW5jdGlvbiBHb3RvUGFnZSBIaUJhY2tDb2xvcgorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglIaUZvcmVDb2xvciBJY29uIEljb25Cb3ggSWNvbkZvbnQKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JSWNvbmlmeSBJY29uUGF0aCBLZXkgTGVuaWVuY2UgTG93ZXIKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JTWF4aW1pemUgTWVudUJhY2tDb2xvciBNZW51Rm9yZUNvbG9yCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCU1lbnVTdGlwcGxlQ29sb3IgTW9kdWxlIE1vZHVsZVBhdGggTW91c2UKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JTW92ZSBNV01Cb3JkZXJzIE1XTUJ1dHRvbnMgTVdNRGVjb3JIaW50cworICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglNV01GdW5jdGlvbkhpbnRzIE1XTUhpbnRPdmVycmlkZSBNV01NZW51cworICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglOb0JvcmRlciBOb0JvdW5kYXJ5V2lkdGggTm9wIE5vUFBvc2l0aW9uCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCU5vVGl0bGUgT3BhcXVlTW92ZSBPcGFxdWVSZXNpemUgUGFnZXIKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JUGFnZXJCYWNrQ29sb3IgUGFnZXJGb250IFBhZ2VyRm9yZUNvbG9yCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCVBhZ2luZ0RlZmF1bHQgUGl4bWFwUGF0aCBQb3B1cCBRdWl0IFJhaXNlCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCVJhaXNlTG93ZXIgUmFuZG9tUGxhY2VtZW50IFJlZnJlc2ggUmVzaXplCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCVJlc3RhcnQgU2F2ZVVuZGVycyBTY3JvbGwgU2xvcHB5Rm9jdXMKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JU21hcnRQbGFjZW1lbnQgU3RhcnRzT25EZXNrIFN0YXlzT25Ub3AKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JU3RkQmFja0NvbG9yIFN0ZEZvcmVDb2xvciBTdGljayBTdGlja3kKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JU3RpY2t5QmFja0NvbG9yIFN0aWNreUZvcmVDb2xvcgorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglTdGlja3lJY29ucyBTdHViYm9ybkljb25QbGFjZW1lbnQKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JU3R1YmJvcm5JY29ucyBTdHViYm9yblBsYWNlbWVudAorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglTdXBwcmVzc0ljb25zIFRpdGxlIFRvZ2dsZVBhZ2UgV2FpdCBXYXJwCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCVdpbmRvd0ZvbnQgV2luZG93TGlzdCBXaW5kb3dMaXN0U2tpcAorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglXaW5kb3dzRGVzayBXaW5kb3dTaGFkZSBYT1J2YWx1ZQorCisgICAgIiBUaGVzZSBrZXl3b3JkcyBhcmUgb25seSB1c2VkIGFmdGVyIHRoZSAiU3R5bGUiIGNvbW1hbmQuICBUbyBhdm9pZAorICAgICIgbmFtZSBjb2xsaXNpb24gd2l0aCBzZXZlcmFsIGNvbW1hbmRzLCB0aGV5IGFyZSBjb250YWluZWQuCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQmFja0NvbG9yIEJvcmRlcldpZHRoIEJvdW5kYXJ5V2lkdGggY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQnV0dG9uIENpcmN1bGF0ZUhpdCBDaXJjdWxhdGVTa2lwIENvbG9yIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCURvdWJsZUNsaWNrIEZvcmVDb2xvciBIYW5kbGVzIEhhbmRsZVdpZHRoIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUljb24gSWNvblRpdGxlIE5vQm9yZGVyIE5vQm91bmRhcnlXaWR0aCBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlOb0J1dHRvbiBOb0hhbmRsZXMgTm9JY29uIE5vSWNvblRpdGxlIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCU5vVGl0bGUgU2xpcHBlcnkgU3RhcnRJY29uaWMgU3RhcnROb3JtYWwgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJU3RhcnRzQW55V2hlcmUgU3RhcnRzT25EZXNrIFN0YXlzT25Ub3AgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJU3RheXNQdXQgU3RpY2t5IFRpdGxlIFdpbmRvd0xpc3RIaXQgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJV2luZG93TGlzdFNraXAgY29udGFpbmVkCitlbHNlaWYgKGV4aXN0cygiYjpmdndtX3ZlcnNpb24iKSAmJiBiOmZ2d21fdmVyc2lvbiA9PSAyKSB8fCAoZXhpc3RzKCJ1c2VfZnZ3bV8yIikgJiYgdXNlX2Z2d21fMikKKyAgICBzeW4gbWF0Y2ggICBmdndtRW52VmFyCSJcJHtcd1wrfSIKKyAgICBzeW4gbWF0Y2ggICBmdndtRW52VmFyCSJcJFxbW15dXVwrXF0iCisgICAgc3luIG1hdGNoICAgZnZ3bUVudlZhcgkiXCRbJDAtOSpdIgorICAgIHN5biBtYXRjaCAgIGZ2d21EZWYJCSdeXHMqK1xzKiIuXHstfSInIGNvbnRhaW5zPWZ2d21NZW51U3RyaW5nLGZ2d21XaGl0ZXNwYWNlCisgICAgc3luIG1hdGNoICAgZnZ3bUljb24JJyUuXHstfSUnIGNvbnRhaW5lZAorICAgIHN5biBtYXRjaCAgIGZ2d21JY29uCSdcKi5cey19XConIGNvbnRhaW5lZAorICAgIHN5biBtYXRjaCAgIGZ2d21NZW51U3RyaW5nCSciLlx7LX0iJyBjb250YWlucz1mdndtSWNvbixmdndtU2hvcnRjdXRLZXkgY29udGFpbmVkCisgICAgc3luIG1hdGNoICAgZnZ3bVNob3J0Y3V0S2V5CSImLiIgY29udGFpbmVkCisgICAgc3luIG1hdGNoICAgZnZ3bU1vZHVsZQkiXDxLaWxsTW9kdWxlXHNcK1x3XCsiaGU9cysxMCBjb250YWlucz1mdndtTW9kdWxlTmFtZQorICAgIHN5biBtYXRjaCAgIGZ2d21Nb2R1bGUJIlw8U2VuZFRvTW9kdWxlXHNcK1x3XCsiaGU9cysxMiBjb250YWlucz1mdndtTW9kdWxlTmFtZQorICAgIHN5biBtYXRjaCAgIGZ2d21Nb2R1bGUJIlw8RGVzdHJveU1vZHVsZUNvbmZpZ1xzXCtcd1wrImhlPXMrMTkgY29udGFpbnM9ZnZ3bU1vZHVsZU5hbWUKKworICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglBZGRCdXR0b25TdHlsZSBBZGRUaXRsZVN0eWxlIEFkZFRvRGVjb3IgQWRkVG9GdW5jCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCUFkZFRvTWVudSBBbmltYXRlZE1vdmUgQmVlcCBCb3JkZXJTdHlsZSBCdWdPcHRzCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCUJ1c3lDdXJzb3IgQnV0dG9uU3RhdGUgQnV0dG9uU3R5bGUgQ2hhbmdlRGVjb3IKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JQ2hhbmdlTWVudVN0eWxlIENsaWNrVGltZSBDbG9zZSBDb2xvckxpbWl0CisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCUNvbG9ybWFwRm9jdXMgQ29weU1lbnVTdHlsZSBDdXJyZW50IEN1cnNvck1vdmUKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JQ3Vyc29yU3R5bGUgRGVmYXVsdENvbG9ycyBEZWZhdWx0Q29sb3JzZXQKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JRGVmYXVsdEZvbnQgRGVmYXVsdEljb24gRGVmYXVsdExheWVycyBEZWxldGUgRGVzaworICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglEZXNrVG9wU2l6ZSBEZXN0cm95IERlc3Ryb3lEZWNvciBEZXN0cm95RnVuYworICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglEZXN0cm95TWVudSBEZXN0cm95TWVudVN0eWxlIERpcmVjdGlvbiBFY2hvCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCUVkZ2VSZXNpc3RhbmNlIEVkZ2VTY3JvbGwgRWRnZVRoaWNrbmVzcyBFbXVsYXRlCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCUVzY2FwZUZ1bmMgRXhlYyBFeGVjVXNlU2hlbGwgRXhpdEZ1bmN0aW9uCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCUZha2VDbGljayBGbGlwRm9jdXMgRm9jdXMgRnVuY3Rpb24gR2xvYmFsT3B0cworICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglHbm9tZUJ1dHRvbiBHb3RvRGVzayBHb3RvRGVza0FuZFBhZ2UgR290b1BhZ2UKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JSGlkZUdlb21ldHJ5V2luZG93IEhpbGlnaHRDb2xvciBIaWxpZ2h0Q29sb3JzZXQKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JSWNvbkZvbnQgSWNvblBhdGggSWNvbmlmeSBJZ25vcmVNb2RpZmllcnMKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JSW1hZ2VQYXRoIEtleSBMYXllciBMb3dlciBNYXhpbWl6ZSBNZW51IE1lbnVTdHlsZQorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglNb2R1bGVQYXRoIE1vZHVsZVN5bmNocm9ub3VzIE1vZHVsZVRpbWVvdXQKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JTW91c2UgTW92ZSBNb3ZlVGhyZXNob2xkIE1vdmVUb0Rlc2sgTW92ZVRvUGFnZQorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglNb3ZlVG9TY3JlZW4gTmV4dCBOb25lIE5vcCBPcGFxdWVNb3ZlU2l6ZQorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglQaXBlUmVhZCBQaXhtYXBQYXRoIFBsYWNlQWdhaW4gUG9pbnRlcktleQorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglQb3B1cCBQcmV2IFF1aXQgUXVpdFNjcmVlbiBRdWl0U2Vzc2lvbiBSYWlzZQorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglSYWlzZUxvd2VyIFJlYWQgUmVjYXB0dXJlIFJlY2FwdHVyZVdpbmRvdworICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglSZWZyZXNoIFJlZnJlc2hXaW5kb3cgUmVzaXplIFJlc2l6ZU1vdmUKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JUmVzdGFydCBTYXZlUXVpdFNlc3Npb24gU2F2ZVNlc3Npb24gU2Nyb2xsCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCVNldEFuaW1hdGlvbiBTZXRFbnYgU2V0TWVudURlbGF5IFNldE1lbnVTdHlsZQorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglTaWxlbnQgU25hcEF0dHJhY3Rpb24gU25hcEdyaWQgU3RpY2sgU3Ryb2tlCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCVN0cm9rZUZ1bmMgU3R5bGUgVGl0bGUgVGl0bGVTdHlsZSBVbnNldEVudgorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglVcGRhdGVEZWNvciBVcGRhdGVTdHlsZXMgV2FpdCBXYXJwVG9XaW5kb3cKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb24JV2luZG93Rm9udCBXaW5kb3dJZCBXaW5kb3dMaXN0IFdpbmRvd1NoYWRlCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCVdpbmRvd1NoYWRlQW5pbWF0ZSBXaW5kb3dzRGVzayBYaW5lcmFtYQorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbglYaW5lcmFtYVByaW1hcnlTY3JlZW4gWGluZXJhbWFTbHMgWGluZXJhbWFTbHNTaXplCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uCVhvclBpeG1hcCBYb3JWYWx1ZQorCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQWN0aXZlIEFjdGl2ZUNvbG9yc2V0IEFjdGl2ZURvd24KKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlBY3RpdmVGb3JlIEFjdGl2ZUZvcmVPZmYgQWN0aXZlUGxhY2VtZW50CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQWN0aXZlUGxhY2VtZW50SG9ub3JzU3RhcnRzT25QYWdlCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQWN0aXZlUGxhY2VtZW50SWdub3Jlc1N0YXJ0c09uUGFnZSBBY3RpdmVVcCBBbGwKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlBbGxvd1Jlc3RhY2sgQWxwaGFiZXRpYyBBbmltIEFuaW1hdGVkIEFuaW1hdGlvbgorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUFuaW1hdGlvbk9mZiBBdXRvbWF0aWNIb3RrZXlzIEF1dG9tYXRpY0hvdGtleXNPZmYKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlCR3JhZGllbnQgQmFja0NvbG9yIEJhY2tncm91bmQgQmFja2luZ1N0b3JlCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQmFja2luZ1N0b3JlT2ZmIEJvcmRlckNvbG9yc2V0IEJvcmRlcldpZHRoCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQm90dG9tIEJ1dHRvbiBCdXR0b24wIEJ1dHRvbjEgQnV0dG9uMiBCdXR0b24zCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQnV0dG9uNCBCdXR0b241IEJ1dHRvbjYgQnV0dG9uNyBCdXR0b244CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQnV0dG9uOSBDR3JhZGllbnQgQ2FwdHVyZUhvbm9yc1N0YXJ0c09uUGFnZQorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUNhcHR1cmVJZ25vcmVzU3RhcnRzT25QYWdlIENhc2NhZGVQbGFjZW1lbnQKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlDZW50ZXJlZCBDaXJjdWxhdGVIaXQgQ2lyY3VsYXRlSGl0SWNvbgorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUNpcmN1bGF0ZUhpdFNoYWRlZCBDaXJjdWxhdGVTa2lwCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQ2lyY3VsYXRlU2tpcEljb24gQ2lyY3VsYXRlU2tpcFNoYWRlZCBDbGVhcgorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUNsaWNrVG9Gb2N1cyBDbGlja1RvRm9jdXNEb2VzbnRQYXNzQ2xpY2sKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlDbGlja1RvRm9jdXNEb2VzbnRSYWlzZSBDbGlja1RvRm9jdXNQYXNzZXNDbGljaworICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUNsaWNrVG9Gb2N1c1Bhc3Nlc0NsaWNrT2ZmIENsaWNrVG9Gb2N1c1JhaXNlcworICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUNsaWNrVG9Gb2N1c1JhaXNlc09mZiBDb2xvciBDb2xvcnNldCBDb250ZXh0CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJQ3VycmVudERlc2sgQ3VycmVudFBhZ2UgQ3VycmVudFBhZ2VBbnlEZXNrCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJREdyYWRpZW50IERlY29yYXRlVHJhbnNpZW50IERlZmF1bHQKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlEZXByZXNzYWJsZUJvcmRlciBEZXNrIERvbnRMb3dlclRyYW5zaWVudAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCURvbnRSYWlzZVRyYW5zaWVudCBEb250U3RhY2tUcmFuc2llbnRQYXJlbnQKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlEb3VibGVDbGlja1RpbWUgRG93biBEdW1iUGxhY2VtZW50IER5bmFtaWNNZW51CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJRHluYW1pY1BvcERvd25BY3Rpb24gRHluYW1pY1BvcFVwQWN0aW9uCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJRWFzdCBFeHBlY3QgRlZXTSBGaXJtQm9yZGVyIEZpeGVkCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJRml4ZWRQb3NpdGlvbiBGbGF0IEZsaWNrZXJpbmdNb3ZlV29ya2Fyb3VuZAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUZsaWNrZXJpbmdRdERpYWxvZ3NXb3JrYXJvdW5kIEZvY3VzRm9sbG93c01vdXNlCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJRm9sbG93c0ZvY3VzIEZvbGxvd3NNb3VzZSBGb250IEZvcmVDb2xvcgorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUZvcmVncm91bmQgRnVuY3Rpb24gRnZ3bSBGdndtQm9yZGVyCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJRnZ3bUJ1dHRvbnMgR05PTUVJZ25vcmVIaW50cyBHTk9NRVVzZUhpbnRzCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJR3JhYkZvY3VzIEdyYWJGb2N1c09mZiBHcmFiRm9jdXNUcmFuc2llbnQKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlHcmFiRm9jdXNUcmFuc2llbnRPZmYgR3JleWVkIEdyZXllZENvbG9yc2V0CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJSEdyYWRpZW50IEhhbmRsZVdpZHRoIEhhbmRsZXMgSGVpZ2h0CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJSGlkZGVuSGFuZGxlcyBIaWxpZ2h0M0RPZmYgSGlsaWdodDNEVGhpY2sKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlIaWxpZ2h0M0RUaGlja25lc3MgSGlsaWdodDNEVGhpbiBIaWxpZ2h0QmFjaworICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUhpbGlnaHRCYWNrT2ZmIEhpbGlnaHRCb3JkZXJDb2xvcnNldAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUhpbGlnaHRDb2xvcnNldCBIaWxpZ2h0Rm9yZSBIaW50T3ZlcnJpZGUKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlIb2xkU3VibWVudXMgSWNvbiBJY29uQm94IEljb25GaWxsIEljb25Gb250CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJSWNvbkdyaWQgSWNvbk92ZXJyaWRlIEljb25UaXRsZSBJY29uaWMKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlJY29uaWZ5V2luZG93R3JvdXBzIEljb25pZnlXaW5kb3dHcm91cHNPZmYKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlJY29ucyBJZ25vcmVSZXN0YWNrIEluYWN0aXZlIEludGVyaW9yIEl0ZW0KKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlJdGVtRm9ybWF0IEtlZXBXaW5kb3dHcm91cHNPbkRlc2sgTGF5ZXIgTGVmdAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCUxlZnRKdXN0aWZpZWQgTGVuaWVuY2UgTG93ZXJUcmFuc2llbnQgTVdNCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJTVdNQm9yZGVyIE1XTUJ1dHRvbnMgTVdNRGVjb3IgTVdNRGVjb3JNYXgKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlNV01EZWNvck1lbnUgTVdNRGVjb3JNaW4gTVdNRnVuY3Rpb25zCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJTWFudWFsUGxhY2VtZW50IE1hbnVhbFBsYWNlbWVudEhvbm9yc1N0YXJ0c09uUGFnZQorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCU1hbnVhbFBsYWNlbWVudElnbm9yZXNTdGFydHNPblBhZ2UgTWF4V2luZG93U2l6ZQorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCU1heGltaXplZCBNZW51IE1lbnVDb2xvcnNldCBNZW51RmFjZQorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCU1pbk92ZXJsYXBQZXJjZW50UGxhY2VtZW50IE1pbk92ZXJsYXBQbGFjZW1lbnQKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlNaW5pSWNvbiBNaXhlZFZpc3VhbFdvcmthcm91bmQgTW9kYWxpdHlJc0V2aWwKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlNb2R1bGVTeW5jaHJvbm91cyBNb3VzZSBNb3VzZUZvY3VzCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJTW91c2VGb2N1c0NsaWNrRG9lc250UmFpc2UgTW91c2VGb2N1c0NsaWNrUmFpc2VzCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJTW91c2VGb2N1c0NsaWNrUmFpc2VzT2ZmIE1vdmUgTXdtIE13bUJvcmRlcgorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCU13bUJ1dHRvbnMgTXdtRGVjb3IgTXdtRnVuY3Rpb25zIE5ha2VkVHJhbnNpZW50CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJTmV2ZXIgTmV2ZXJGb2N1cyBOb0FjdGl2ZUljb25PdmVycmlkZSBOb0J1dHRvbgorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCU5vRGVjb3JIaW50IE5vRGVza1NvcnQgTm9GdW5jSGludCBOb0dlb21ldHJ5CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJTm9HZW9tZXRyeVdpdGhJbmZvIE5vSGFuZGxlcyBOb0hvdGtleXMgTm9JY29uCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJTm9JY29uT3ZlcnJpZGUgTm9JY29uUG9zaXRpb24gTm9JY29uVGl0bGUKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlOb0ljb25zIE5vSW5zZXQgTm9MZW5pZW5jZSBOb05vcm1hbAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCU5vT0xEZWNvciBOb09uQm90dG9tIE5vT25Ub3AgTm9PdmVycmlkZQorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCU5vUFBvc2l0aW9uIE5vUmVzaXplT3ZlcnJpZGUgTm9TdGlja3kKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlOb1N0aXBsZWRUaXRsZXMgTm9UaXRsZSBOb1RyYW5zaWVudFBQb3NpdGlvbgorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCU5vVHJhbnNpZW50VVNQb3NpdGlvbiBOb1VTUG9zaXRpb24KKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlOb1dhcnAgTm9ybWFsIE5vcnRoIE5vcnRoZWFzdCBOb3J0aHdlc3QKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlOb3RBbHBoYWJldGljIE9MRGVjb3IgT25Cb3R0b20gT25Ub3AgT25jZQorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCU9ubHlJY29ucyBPbmx5TGlzdFNraXAgT25seU5vcm1hbCBPbmx5T25Cb3R0b20KKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlPbmx5T25Ub3AgT25seVN0aWNreSBPcGFjaXR5IFBhcmVudGFsUmVsYXRpdml0eQorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVBpeG1hcCBQb3Bkb3duRGVsYXllZCBQb3Bkb3duRGVsYXkgUG9wdXBEZWxheQorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVBvcHVwQXNSb290TWVudSBQb3B1cEFzU3VibWVudSBQb3Bkb3duSW1tZWRpYXRlbHkKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlQb3B1cERlbGF5ZWQgUG9wdXBJbW1lZGlhdGVseSBQb3B1cE9mZnNldAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVF1aWV0IFJHcmFkaWVudCBSYWlzZU92ZXJOYXRpdmVXaW5kb3dzCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJUmFpc2VPdmVyVW5tYW5hZ2VkIFJhaXNlVHJhbnNpZW50CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJUmFpc2VkIFJlYWQgUmVjYXB0dXJlSG9ub3JzU3RhcnRzT25QYWdlCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJUmVjYXB0dXJlSWdub3Jlc1N0YXJ0c09uUGFnZSBSZWN0YW5nbGUKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlSZW1vdmVTdWJtZW51cyBSZXNldCBSZXNpemUgUmVzaXplSGludE92ZXJyaWRlCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJUmVzaXplT3BhcXVlIFJlc2l6ZU91dGxpbmUgUmV2ZXJzZU9yZGVyCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJUmlnaHQgUmlnaHRKdXN0aWZpZWQgUm9vdCBTR3JhZGllbnQgU2FtZVR5cGUKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlTYXZlVW5kZXIgU2F2ZVVuZGVyT2ZmIFNjYXR0ZXJXaW5kb3dHcm91cHMKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlTY3JlZW4gU2VsZWN0SW5QbGFjZSBTZWxlY3RPblJlbGVhc2UKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlTZWxlY3RXYXJwIFNlcGFyYXRvcnNMb25nIFNlcGFyYXRvcnNTaG9ydAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVNob3dNYXBwaW5nIFNpZGVDb2xvciBTaWRlUGljIFNpbXBsZQorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVNraXBNYXBwaW5nIFNsaXBwZXJ5IFNsaXBwZXJ5SWNvbiBTbG9wcHlGb2N1cworICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVNtYXJ0UGxhY2VtZW50IFNtYXJ0UGxhY2VtZW50SXNOb3JtYWwKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlTbWFydFBsYWNlbWVudElzUmVhbGx5U21hcnQgU29saWQgU291dGgKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlTb3V0aGVhc3QgU291dGh3ZXN0IFN0YWNrVHJhbnNpZW50UGFyZW50CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJU3RhcnRJY29uaWMgU3RhcnROb3JtYWwgU3RhcnRzQW55V2hlcmUKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlTdGFydHNMb3dlcmVkIFN0YXJ0c09uRGVzayBTdGFydHNPblBhZ2UKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlTdGFydHNPblBhZ2VJZ25vcmVzVHJhbnNpZW50cworICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVN0YXJ0c09uUGFnZUluY2x1ZGVzVHJhbnNpZW50cyBTdGFydHNPblNjcmVlbgorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVN0YXJ0c1JhaXNlZCBTdGF5c09uQm90dG9tIFN0YXlzT25Ub3AgU3RheXNQdXQKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlTdGlja3kgU3RpY2t5SWNvbiBTdGlwbGVkVGl0bGVzIFN0aXBwbGVkVGl0bGUKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlTdGlwcGxlZFRpdGxlT2ZmIFN1Ym1lbnVzTGVmdCBTdWJtZW51c1JpZ2h0IFN1bmsKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlUaGlzIFRpbGVDYXNjYWRlUGxhY2VtZW50IFRpbGVNYW51YWxQbGFjZW1lbnQKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlUaWxlZFBpeG1hcCBUaW1lb3V0IFRpdGxlIFRpdGxlQXRCb3R0b20KKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlUaXRsZUF0VG9wIFRpdGxlVW5kZXJsaW5lczAgVGl0bGVVbmRlcmxpbmVzMQorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVRpdGxlVW5kZXJsaW5lczIgVGl0bGVXYXJwIFRpdGxlV2FycE9mZiBUb3AKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlUcmFuc2llbnQgVHJpYW5nbGVzUmVsaWVmIFRyaWFuZ2xlc1NvbGlkCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJVXAgVXNlQm9yZGVyU3R5bGUgVXNlRGVjb3IgVXNlSWNvbk5hbWUKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlVc2VJY29uUG9zaXRpb24gVXNlTGlzdFNraXAgVXNlUFBvc2l0aW9uCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJVXNlU3R5bGUgVXNlVGl0bGVTdHlsZSBVc2VUcmFuc2llbnRQUG9zaXRpb24KKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlVc2VUcmFuc2llbnRVU1Bvc2l0aW9uIFVzZVVTUG9zaXRpb24gVkdyYWRpZW50CisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJVmFyaWFibGVQb3NpdGlvbiBWZWN0b3IgVmVydGljYWxJdGVtU3BhY2luZworICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVZlcnRpY2FsVGl0bGVTcGFjaW5nIFdJTiBXYWl0IFdhcnAgV2FycFRpdGxlCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJV2VzdCBXaW4gV2luZG93IFdpbmRvd0xpc3RIaXQgV2luZG93TGlzdFNraXAKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlXaW5kb3dTaGFkZVNjcm9sbHMgV2luZG93U2hhZGVTaHJpbmtzCisgICAgc3luIGtleXdvcmQgZnZ3bUtleXdvcmQJV2luZG93U2hhZGVTdGVwcyBXaW5kb3dzIFhpbmVyYW1hUm9vdCBZR3JhZGllbnQKKyAgICBzeW4ga2V5d29yZCBmdndtS2V5d29yZAlib3R0b21yaWdodCBkZWZhdWx0IHBvaW50ZXIgcHJldiBxdWlldAorICAgIHN5biBrZXl3b3JkIGZ2d21LZXl3b3JkCVRydWUgRmFsc2UgVG9nZ2xlCisKKyAgICBzeW4ga2V5d29yZCBmdndtQ29uZGl0aW9uTmFtZQlBY2NlcHRzRm9jdXMgQ3VycmVudERlc2sgQ3VycmVudEdsb2JhbFBhZ2UKKyAgICBzeW4ga2V5d29yZCBmdndtQ29uZGl0aW9uTmFtZQlDdXJyZW50R2xvYmFsUGFnZUFueURlc2sgQ3VycmVudFBhZ2UKKyAgICBzeW4ga2V5d29yZCBmdndtQ29uZGl0aW9uTmFtZQlDdXJyZW50UGFnZUFueURlc2sgQ3VycmVudFNjcmVlbiBJY29uaWMgTGF5ZXIKKyAgICBzeW4ga2V5d29yZCBmdndtQ29uZGl0aW9uTmFtZQlNYXhpbWl6ZWQgUGxhY2VkQnlCdXR0b24zIFBsYWNlZEJ5RnZ3bSBSYWlzZWQKKyAgICBzeW4ga2V5d29yZCBmdndtQ29uZGl0aW9uTmFtZQlTaGFkZWQgU3RpY2t5IFRyYW5zaWVudCBWaXNpYmxlCisKKyAgICBzeW4ga2V5d29yZCBmdndtQ29udGV4dE5hbWUJQk9UVE9NIEJPVFRPTV9FREdFIEJPVFRPTV9MRUZUIEJPVFRPTV9SSUdIVAorICAgIHN5biBrZXl3b3JkIGZ2d21Db250ZXh0TmFtZQlERUZBVUxUIERFU1RST1kgTEVGVCBMRUZUX0VER0UgTUVOVSBNT1ZFCisgICAgc3luIGtleXdvcmQgZnZ3bUNvbnRleHROYW1lCVJFU0laRSBSSUdIVCBSSUdIVF9FREdFIFJPT1QgU0VMRUNUIFNUUk9LRSBTWVMKKyAgICBzeW4ga2V5d29yZCBmdndtQ29udGV4dE5hbWUJVElUTEUgVE9QIFRPUF9FREdFIFRPUF9MRUZUIFRPUF9SSUdIVCBXQUlUCisgICAgc3luIGtleXdvcmQgZnZ3bUNvbnRleHROYW1lCVBPU0lUSU9OCisKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb25OYW1lCWNvbnRhaW5lZCBGdndtQW5pbWF0ZSBGdndtQXVkaW8gRnZ3bUF1dG8KKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb25OYW1lCWNvbnRhaW5lZCBGdndtQmFja2VyIEZ2d21CYW5uZXIgRnZ3bUJ1dHRvbnMKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb25OYW1lCWNvbnRhaW5lZCBGdndtQ2FzY2FkZSBGdndtQ29tbWFuZFMKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb25OYW1lCWNvbnRhaW5lZCBGdndtQ29uc29sZSBGdndtQ29uc29sZUMgRnZ3bUNwcAorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbk5hbWUJY29udGFpbmVkIEZ2d21EZWJ1ZyBGdndtRHJhZ1dlbGwgRnZ3bUV2ZW50CisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uTmFtZQljb250YWluZWQgRnZ3bUZvcm0gRnZ3bUd0ayBGdndtSWNvbkJveAorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbk5hbWUJY29udGFpbmVkIEZ2d21JY29uTWFuIEZ2d21JZGVudCBGdndtTTQKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb25OYW1lCWNvbnRhaW5lZCBGdndtUGFnZXIgRnZ3bVJlYXJyYW5nZSBGdndtU2F2ZQorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbk5hbWUJY29udGFpbmVkIEZ2d21TYXZlRGVzayBGdndtU2NyaXB0IEZ2d21TY3JvbGwKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb25OYW1lCWNvbnRhaW5lZCBGdndtVGFsayBGdndtVGFza0JhciBGdndtVGhlbWUKKyAgICBzeW4ga2V5d29yZCBmdndtRnVuY3Rpb25OYW1lCWNvbnRhaW5lZCBGdndtVGlsZSBGdndtV2hhcmYgRnZ3bVdpbkxpc3QKKworICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbk5hbWUJU3RhcnRGdW5jdGlvbiBJbml0RnVuY3Rpb24gUmVzdGFydEZ1bmN0aW9uCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uTmFtZQlFeGl0RnVuY3Rpb24gU2Vzc2lvbkluaXRGdW5jdGlvbgorICAgIHN5biBrZXl3b3JkIGZ2d21GdW5jdGlvbk5hbWUJU2Vzc2lvblJlc3RhcnRGdW5jdGlvbiBTZXNzaW9uRXhpdEZ1bmN0aW9uCisgICAgc3luIGtleXdvcmQgZnZ3bUZ1bmN0aW9uTmFtZQlNaXNzaW5nU3VibWVudUZ1bmN0aW9uCitlbmRpZgorCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZnZ3bV9zeW50YXhfaW5pdHMiKQorICAgIGlmIHZlcnNpb24gPCA1MDgKKwlsZXQgZGlkX2Z2d21fc3ludGF4X2luaXRzID0gMQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgICAgZWxzZQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgIGVuZGlmCisKKyAgICBIaUxpbmsgZnZ3bUNvbW1lbnQJCUNvbW1lbnQKKyAgICBIaUxpbmsgZnZ3bUVudlZhcgkJTWFjcm8KKyAgICBIaUxpbmsgZnZ3bUV4ZWMJCUZ1bmN0aW9uCisgICAgSGlMaW5rIGZ2d21GdW5jdGlvbgkJRnVuY3Rpb24KKyAgICBIaUxpbmsgZnZ3bUZ1bmN0aW9uTmFtZQlTcGVjaWFsCisgICAgSGlMaW5rIGZ2d21Db250ZXh0TmFtZQlGdW5jdGlvbgorICAgIEhpTGluayBmdndtQ29uZGl0aW9uTmFtZQlGdW5jdGlvbgorICAgIEhpTGluayBmdndtSWNvbgkJQ29tbWVudAorICAgIEhpTGluayBmdndtS2V5CQlGdW5jdGlvbgorICAgIEhpTGluayBmdndtS2V5d29yZAkJS2V5d29yZAorICAgIEhpTGluayBmdndtTWVudVN0cmluZwlTdHJpbmcKKyAgICBIaUxpbmsgZnZ3bU1vZENvbmYJCU1hY3JvCisgICAgSGlMaW5rIGZ2d21Nb2R1bGUJCUZ1bmN0aW9uCisgICAgSGlMaW5rIGZ2d21Nb2R1bGVOYW1lCVNwZWNpYWwKKyAgICBIaUxpbmsgZnZ3bVJHQlZhbHVlCQlUeXBlCisgICAgSGlMaW5rIGZ2d21TaG9ydGN1dEtleQlTcGVjaWFsQ2hhcgorICAgIEhpTGluayBmdndtU3RyaW5nCQlTdHJpbmcKKworICAgIGlmIGV4aXN0cygicmdiX2ZpbGUiKQorCUhpTGluayBmdndtQ29sb3JzCVR5cGUKKyAgICBlbmRpZgorCisgICAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImZ2d20iCisiIHZpbTogc3RzPTQgc3c9NCB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9mdndtMm00LnZpbSBiL3J1bnRpbWUvc3ludGF4L2Z2d20ybTQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0M2RhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9mdndtMm00LnZpbQpAQCAtMCwwICsxLDQzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogRnZ3bU00IHByZXByb2Nlc3NlZCBGdndtMiBjb25maWd1cmF0aW9uIGZpbGVzCisiIE1haW50YWluZXI6IERhdmlkIE5lXHZ7Y31hcyAoWWV0aSkgPHlldGlAcGh5c2ljcy5tdW5pLmN6PgorIiBMYXN0IENoYW5nZTogMjAwMi0wNi0wMgorIiBVUkk6IGh0dHA6Ly9waHlzaWNzLm11bmkuY3ovfnlldGkvZG93bmxvYWQvc3ludGF4L2Z2d21tNC52aW0KKworIiBTZXR1cAoraWYgdmVyc2lvbiA+PSA2MDAKKyAgaWYgZXhpc3RzKCdiOmN1cnJlbnRfc3ludGF4JykKKyAgICBmaW5pc2gKKyAgZW5kaWYKK2Vsc2UKKyAgc3ludGF4IGNsZWFyCitlbmRpZgorCisiIExldCBpbmNsdWRlZCBmaWxlcyBrbm93IHRoZXkgYXJlIGluY2x1ZGVkCitpZiAhZXhpc3RzKCdtYWluX3N5bnRheCcpCisgIGxldCBtYWluX3N5bnRheCA9ICdmdndtMm00JworZW5kaWYKKworIiBJbmNsdWRlIE00IHN5bnRheAoraWYgdmVyc2lvbiA+PSA2MDAKKyAgcnVudGltZSEgc3ludGF4L200LnZpbQorZWxzZQorICBzbyA8c2ZpbGU+OnA6aC9tNC52aW0KK2VuZGlmCit1bmxldCBiOmN1cnJlbnRfc3ludGF4CisKKyIgSW5jbHVkZSBGdndtMiBzeW50YXggKEZ2d20xIGRvZXNuJ3QgaGF2ZSBNNCBwcmVwcm9jZXNzb3IpCitpZiB2ZXJzaW9uID49IDYwMAorICBydW50aW1lISBzeW50YXgvZnZ3bS52aW0KK2Vsc2UKKyAgc28gPHNmaWxlPjpwOmgvZnZ3bS52aW0KK2VuZGlmCit1bmxldCBiOmN1cnJlbnRfc3ludGF4CisKKyIgVGhhdCdzIGFsbCEKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gJ2Z2d20ybTQnCisKK2lmIG1haW5fc3ludGF4ID09ICdmdndtMm00JworICB1bmxldCBtYWluX3N5bnRheAorZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZ2RiLnZpbSBiL3J1bnRpbWUvc3ludGF4L2dkYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3NGEwNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2dkYi52aW0KQEAgLTAsMCArMSwxMTEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglHREIgY29tbWFuZCBmaWxlcworIiBNYWludGFpbmVyOglDbGF1ZGlvIEZsZWluZXIgPGNsYXVkaW9AZmxlaW5lci5jb20+CisiIFVSTDoJCWh0dHA6Ly93d3cuZmxlaW5lci5jb20vdmltL3N5bnRheC9nZGIudmltCisiIExhc3QgQ2hhbmdlOgkyMDAzIEphbiAwNAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBrZXl3b3JkIGdkYkluZm8gY29udGFpbmVkIGFkZHJlc3MgYXJjaGl0ZWN0dXJlIGFyZ3MgYnJlYWtwb2ludHMgY2F0Y2ggY29tbW9uIGNvcHlpbmcgZGNhY2hlCitzeW4ga2V5d29yZCBnZGJJbmZvIGNvbnRhaW5lZCBkaXNwbGF5IGZpbGVzIGZsb2F0IGZyYW1lIGZ1bmN0aW9ucyBoYW5kbGUgbGluZQorc3luIGtleXdvcmQgZ2RiSW5mbyBjb250YWluZWQgbG9jYWxzIHByb2dyYW0gcmVnaXN0ZXJzIHNjb3BlIHNldCBzaGFyZWRsaWJyYXJ5IHNpZ25hbHMKK3N5biBrZXl3b3JkIGdkYkluZm8gY29udGFpbmVkIHNvdXJjZSBzb3VyY2VzIHN0YWNrIHN5bWJvbCB0YXJnZXQgdGVybWluYWwgdGhyZWFkcworc3luIGtleXdvcmQgZ2RiSW5mbyBjb250YWluZWQgc3luIGtleXdvcmQgdHJhY2Vwb2ludHMgdHlwZXMgdWRvdCB2YXJpYWJsZXMgd2FycmFudHkgd2F0Y2hwb2ludHMKK3N5biBtYXRjaCBnZGJJbmZvIGNvbnRhaW5lZCAiYWxsLXJlZ2lzdGVycyIKKworCitzeW4ga2V5d29yZCBnZGJTdGF0ZW1lbnQgY29udGFpbmVkIGFjdGlvbnMgYXBwbHkgYXR0YWNoIGF3YXRjaCBiYWNrdHJhY2UgYnJlYWsgYnQgY2FsbCBjYXRjaCBjZCBjbGVhciBjb2xsZWN0IGNvbW1hbmRzCitzeW4ga2V5d29yZCBnZGJTdGF0ZW1lbnQgY29udGFpbmVkIGNvbXBsZXRlIGNvbmRpdGlvbiBjb250aW51ZSBkZWxldGUgZGV0YWNoIGRpcmVjdG9yeSBkaXNhYmxlIGRpc2Fzc2VtYmxlIGRpc3BsYXkgZG93bgorc3luIGtleXdvcmQgZ2RiU3RhdGVtZW50IGNvbnRhaW5lZCBlY2hvIGVsc2UgZW5hYmxlIGVuZCBmaWxlIGZpbmlzaCBmcmFtZSBoYW5kbGUgaGJyZWFrIGhlbHAgaWYgaWdub3JlCitzeW4ga2V5d29yZCBnZGJTdGF0ZW1lbnQgY29udGFpbmVkIGluc3BlY3QganVtcCBraWxsIGxpc3QgbG9hZCBtYWludGVuYW5jZSBtYWtlIG5leHQgbmV4dGkgbmkgb3V0cHV0IG92ZXJsYXkKK3N5biBrZXl3b3JkIGdkYlN0YXRlbWVudCBjb250YWluZWQgcGFzc2NvdW50IHBhdGggcHJpbnQgcHJpbnRmIHB0eXBlIHB3ZCBxdWl0IHJicmVhayByZW1vdGUgcmV0dXJuIHJ1biByd2F0Y2gKK3N5biBrZXl3b3JkIGdkYlN0YXRlbWVudCBjb250YWluZWQgc2VhcmNoIHNlY3Rpb24gc2V0IHNoYXJlZGxpYnJhcnkgc2hlbGwgc2hvdyBzaSBzaWduYWwgc291cmNlIHN0ZXAgc3RlcGkgc3RlcHBpbmcKK3N5biBrZXl3b3JkIGdkYlN0YXRlbWVudCBjb250YWluZWQgc3RvcCB0YXJnZXQgdGJyZWFrIHRkdW1wIHRmaW5kIHRoYnJlYWsgdGhyZWFkIHRwIHRyYWNlIHRzdGFydCB0c3RhdHVzIHRzdG9wCitzeW4ga2V5d29yZCBnZGJTdGF0ZW1lbnQgY29udGFpbmVkIHR0eSB1bmRpc3BsYXkgdW5zZXQgdW50aWwgdXAgd2F0Y2ggd2hhdGlzIHdoZXJlIHdoaWxlIHdzIHgKK3N5biBtYXRjaCBnZGJGdW5jRGVmICJcPGRlZmluZVw+LioiCitzeW4gbWF0Y2ggZ2RiU3RhdG1lbnRDb250YWluZXIgIl5ccypcU1wrIiBjb250YWlucz1nZGJTdGF0ZW1lbnQsZ2RiRnVuY0RlZgorc3luIG1hdGNoIGdkYlN0YXRlbWVudCAiXlxzKmluZm8iIG5leHRncm91cD1nZGJJbmZvIHNraXB3aGl0ZSBza2lwZW1wdHkKKworIiBzb21lIGNvbW1vbmx5IHVzZWQgYWJyZXZpYXRpb25zCitzeW4ga2V5d29yZCBnZGJTdGF0ZW1lbnQgYyBkaXNwIHVuZGlzcCBkaXNhcyBwCisKK3N5biByZWdpb24gZ2RiRG9jdW1lbnQgbWF0Y2hncm91cD1nZGJGdW5jRGVmIHN0YXJ0PSJcPGRvY3VtZW50XD4uKiQiIG1hdGNoZ3JvdXA9Z2RiRnVuY0RlZiBlbmQ9Il5lbmQkIgorCitzeW4gbWF0Y2ggZ2RiU3RhdGVtZW50ICJcPGFkZC1zaGFyZWQtc3ltYm9sLWZpbGVzXD4iCitzeW4gbWF0Y2ggZ2RiU3RhdGVtZW50ICJcPGFkZC1zeW1ib2wtZmlsZVw+Igorc3luIG1hdGNoIGdkYlN0YXRlbWVudCAiXDxjb3JlLWZpbGVcPiIKK3N5biBtYXRjaCBnZGJTdGF0ZW1lbnQgIlw8ZG9udC1yZXBlYXRcPiIKK3N5biBtYXRjaCBnZGJTdGF0ZW1lbnQgIlw8ZG93bi1zaWxlbnRseVw+Igorc3luIG1hdGNoIGdkYlN0YXRlbWVudCAiXDxleGVjLWZpbGVcPiIKK3N5biBtYXRjaCBnZGJTdGF0ZW1lbnQgIlw8Zm9yd2FyZC1zZWFyY2hcPiIKK3N5biBtYXRjaCBnZGJTdGF0ZW1lbnQgIlw8cmV2ZXJzZS1zZWFyY2hcPiIKK3N5biBtYXRjaCBnZGJTdGF0ZW1lbnQgIlw8c2F2ZS10cmFjZXBvaW50c1w+Igorc3luIG1hdGNoIGdkYlN0YXRlbWVudCAiXDxzZWxlY3QtZnJhbWVcPiIKK3N5biBtYXRjaCBnZGJTdGF0ZW1lbnQgIlw8c3ltYm9sLWZpbGVcPiIKK3N5biBtYXRjaCBnZGJTdGF0ZW1lbnQgIlw8dXAtc2lsZW50bHlcPiIKK3N5biBtYXRjaCBnZGJTdGF0ZW1lbnQgIlw8d2hpbGUtc3RlcHBpbmdcPiIKKworc3luIGtleXdvcmQgZ2RiU2V0IGFubm90YXRlIGFyY2hpdGVjdHVyZSBhcmdzIGNoZWNrIGNvbXBsYWludHMgY29uZmlybSBlZGl0aW5nIGVuZGlhbgorc3luIGtleXdvcmQgZ2RiU2V0IGVudmlyb25tZW50IGdudXRhcmdldCBoZWlnaHQgaGlzdG9yeSBsYW5ndWFnZSBsaXN0c2l6ZSBwcmludCBwcm9tcHQKK3N5biBrZXl3b3JkIGdkYlNldCByYWRpeCByZW1vdGViYXVkIHJlbW90ZWJyZWFrIHJlbW90ZWNhY2hlIHJlbW90ZWRlYnVnIHJlbW90ZWRldmljZSByZW1vdGVsb2diYXNlCitzeW4ga2V5d29yZCBnZGJTZXQgcmVtb3RlbG9nZmlsZSByZW1vdGV0aW1lb3V0IHJlbW90ZXdyaXRlc2l6ZSB0YXJnZXRkZWJ1ZyB2YXJpYWJsZSB2ZXJib3NlCitzeW4ga2V5d29yZCBnZGJTZXQgd2F0Y2hkb2cgd2lkdGggd3JpdGUKK3N5biBtYXRjaCBnZGJTZXQgIlw8YXV0by1zb2xpYi1hZGRcPiIKK3N5biBtYXRjaCBnZGJTZXQgIlw8c29saWItYWJzb2x1dGUtcHJlZml4XD4iCitzeW4gbWF0Y2ggZ2RiU2V0ICJcPHNvbGliLXNlYXJjaC1wYXRoXD4iCitzeW4gbWF0Y2ggZ2RiU2V0ICJcPHN0b3Atb24tc29saWItZXZlbnRzXD4iCitzeW4gbWF0Y2ggZ2RiU2V0ICJcPHN5bWJvbC1yZWxvYWRpbmdcPiIKK3N5biBtYXRjaCBnZGJTZXQgIlw8aW5wdXQtcmFkaXhcPiIKK3N5biBtYXRjaCBnZGJTZXQgIlw8ZGVtYW5nbGUtc3R5bGVcPiIKK3N5biBtYXRjaCBnZGJTZXQgIlw8b3V0cHV0LXJhZGl4XD4iCisKK3N5biBtYXRjaCBnZGJDb21tZW50ICJeXHMqIy4qIgorCitzeW4gbWF0Y2ggZ2RiVmFyaWFibGUgIlwkXEtcayoiCisKKyIgU3RyaW5ncyBhbmQgY29uc3RhbnRzCitzeW4gcmVnaW9uICBnZGJTdHJpbmcJCXN0YXJ0PSsiKyAgc2tpcD0rXFxcXFx8XFwiKyAgZW5kPSsiKworc3luIG1hdGNoICAgZ2RiQ2hhcmFjdGVyCSInW14nXSonIiBjb250YWlucz1nZGJTcGVjaWFsQ2hhcixnZGJTcGVjaWFsQ2hhckVycm9yCitzeW4gbWF0Y2ggICBnZGJDaGFyYWN0ZXIJIidcXCcnIiBjb250YWlucz1nZGJTcGVjaWFsQ2hhcgorc3luIG1hdGNoICAgZ2RiQ2hhcmFjdGVyCSInW15cXF0nIgorc3luIG1hdGNoICAgZ2RiTnVtYmVyCQkiXDxbMC05X11cK1w+Igorc3luIG1hdGNoICAgZ2RiTnVtYmVyCQkiXDwweFswLTlhLWZBLUZfXVwrXD4iCisKKworaWYgIWV4aXN0cygiZ2RiX21pbmxpbmVzIikKKyAgbGV0IGdkYl9taW5saW5lcyA9IDEwCitlbmRpZgorZXhlYyAic3luIHN5bmMgY2NvbW1lbnQgZ2RiQ29tbWVudCBtaW5saW5lcz0iIC4gZ2RiX21pbmxpbmVzCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2dkYl9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9nZGJfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKyAgSGlMaW5rIGdkYkZ1bmNEZWYJRnVuY3Rpb24KKyAgSGlMaW5rIGdkYkNvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgZ2RiU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgZ2RiU3RyaW5nCVN0cmluZworICBIaUxpbmsgZ2RiQ2hhcmFjdGVyCUNoYXJhY3RlcgorICBIaUxpbmsgZ2RiVmFyaWFibGUJSWRlbnRpZmllcgorICBIaUxpbmsgZ2RiU2V0CQlDb25zdGFudAorICBIaUxpbmsgZ2RiSW5mbwlUeXBlCisgIEhpTGluayBnZGJEb2N1bWVudAlTcGVjaWFsCisgIEhpTGluayBnZGJOdW1iZXIJTnVtYmVyCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJnZGIiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9nZG1vLnZpbSBiL3J1bnRpbWUvc3ludGF4L2dkbW8udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YTZiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9nZG1vLnZpbQpAQCAtMCwwICsxLDk2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJR0RNTworIgkJKElTTy0xMDE2NS00OyBHdWlkZWxpbmVzIGZvciB0aGUgRGVmaW5pdGlvbiBvZiBNYW5hZ2VkIE9iamVjdCkKKyIgTWFpbnRhaW5lcjoJR3l1bWFuIEtpbSA8dmlvbGlub0Bkb29seS5tb2RhY29tLmNvLmtyPgorIiBVUkw6CQlodHRwOi8vZG9vbHkubW9kYWNvbS5jby5rci9nZG1vLnZpbQorIiBMYXN0IGNoYW5nZToJMjAwMSBTZXAgMDIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGtleXdvcmQgZGVmaW5pdGlvbnMKK3N5biBtYXRjaCAgIGdkbW9DYXRlZ29yeSAgICAgICJNQU5BR0VEXHNcK09CSkVDVFxzXCtDTEFTUyIKK3N5biBrZXl3b3JkIGdkbW9DYXRlZ29yeSAgICAgIE5PVElGSUNBVElPTiBBVFRSSUJVVEUgQkVIQVZJT1VSIFBBQ0tBR0UgQUNUSU9OCitzeW4gbWF0Y2ggICBnZG1vQ2F0ZWdvcnkgICAgICAiTkFNRVxzXCtCSU5ESU5HIgorc3luIG1hdGNoICAgZ2Rtb1JlbGF0aW9uc2hpcCAgIkRFUklWRURcc1wrRlJPTSIKK3N5biBtYXRjaCAgIGdkbW9SZWxhdGlvbnNoaXAgICJTVVBFUklPUlxzXCtPQkpFQ1Rcc1wrQ0xBU1MiCitzeW4gbWF0Y2ggICBnZG1vUmVsYXRpb25zaGlwICAiU1VCT1JESU5BVEVcc1wrT0JKRUNUXHNcK0NMQVNTIgorc3luIG1hdGNoICAgZ2Rtb0V4dGVuc2lvbiAgICAgIkFORFxzXCtTVUJDTEFTU0VTIgorc3luIG1hdGNoICAgZ2Rtb0RlZmluaXRpb24gICAgIkRFRklORURcc1wrQVMiCitzeW4gbWF0Y2ggICBnZG1vRGVmaW5pdGlvbiAgICAiUkVHSVNURVJFRFxzXCtBUyIKK3N5biBtYXRjaCAgIGdkbW9FeHRlbnNpb24gICAgICJPUkRFUlxzXCtCWSIKK3N5biBtYXRjaCAgIGdkbW9SZWZlcmVuY2UgICAgICJXSVRIXHNcK0FUVFJJQlVURSIKK3N5biBtYXRjaCAgIGdkbW9SZWZlcmVuY2UgICAgICJXSVRIXHNcK0lORk9STUFUSU9OXHNcK1NZTlRBWCIKK3N5biBtYXRjaCAgIGdkbW9SZWZlcmVuY2UgICAgICJXSVRIXHNcK1JFUExZXHNcK1NZTlRBWCIKK3N5biBtYXRjaCAgIGdkbW9SZWZlcmVuY2UgICAgICJXSVRIXHNcK0FUVFJJQlVURVxzXCtTWU5UQVgiCitzeW4gbWF0Y2ggICBnZG1vRXh0ZW5zaW9uICAgICAiQU5EXHNcK0FUVFJJQlVURVxzXCtJRFMiCitzeW4gbWF0Y2ggICBnZG1vRXh0ZW5zaW9uICAgICAiTUFUQ0hFU1xzXCtGT1IiCitzeW4gbWF0Y2ggICBnZG1vUmVmZXJlbmNlICAgICAiQ0hBUkFDVEVSSVpFRFxzXCtCWSIKK3N5biBtYXRjaCAgIGdkbW9SZWZlcmVuY2UgICAgICJDT05ESVRJT05BTFxzXCtQQUNLQUdFUyIKK3N5biBtYXRjaCAgIGdkbW9FeHRlbnNpb24gICAgICJQUkVTRU5UXHNcK0lGIgorc3luIG1hdGNoICAgZ2Rtb0V4dGVuc2lvbiAgICAgIkRFRkFVTFRcc1wrVkFMVUUiCitzeW4gbWF0Y2ggICBnZG1vRXh0ZW5zaW9uICAgICAiUEVSTUlUVEVEXHNcK1ZBTFVFUyIKK3N5biBtYXRjaCAgIGdkbW9FeHRlbnNpb24gICAgICJSRVFVSVJFRFxzXCtWQUxVRVMiCitzeW4gbWF0Y2ggICBnZG1vRXh0ZW5zaW9uICAgICAiTkFNRURcc1wrQlkiCitzeW4ga2V5d29yZCBnZG1vUmVmZXJlbmNlICAgICBBVFRSSUJVVEVTIE5PVElGSUNBVElPTlMgQUNUSU9OUworc3luIGtleXdvcmQgZ2Rtb0V4dGVuc2lvbiAgICAgREVMRVRFIENSRUFURQorc3luIGtleXdvcmQgZ2Rtb0V4dGVuc2lvbiAgICAgRVFVQUxJVFkgU1VCU1RSSU5HUyBPUkRFUklORworc3luIG1hdGNoICAgZ2Rtb0V4dGVuc2lvbiAgICAgIlJFUExBQ0UtV0lUSC1ERUZBVUxUIgorc3luIG1hdGNoICAgZ2Rtb0V4dGVuc2lvbiAgICAgIkdFVCIKK3N5biBtYXRjaCAgIGdkbW9FeHRlbnNpb24gICAgICJHRVQtUkVQTEFDRSIKK3N5biBtYXRjaCAgIGdkbW9FeHRlbnNpb24gICAgICJBREQtUkVNT1ZFIgorc3luIG1hdGNoICAgZ2Rtb0V4dGVuc2lvbiAgICAgIldJVEgtUkVGRVJFTkNFLU9CSkVDVCIKK3N5biBtYXRjaCAgIGdkbW9FeHRlbnNpb24gICAgICJXSVRILUFVVE9NQVRJQy1JTlNUQU5DRS1OQU1JTkciCitzeW4gbWF0Y2ggICBnZG1vRXh0ZW5zaW9uICAgICAiT05MWS1JRi1OTy1DT05UQUlORUQtT0JKRUNUUyIKKworCisiIFN0cmluZ3MgYW5kIGNvbnN0YW50cworc3luIG1hdGNoICAgZ2Rtb1NwZWNpYWwJCWNvbnRhaW5lZCAiXFxcZFxkXGRcfFxcLiIKK3N5biByZWdpb24gIGdkbW9TdHJpbmcJCXN0YXJ0PSsiKyAgc2tpcD0rXFxcXFx8XFwiKyAgZW5kPSsiKyAgY29udGFpbnM9Z2Rtb1NwZWNpYWwKK3N5biBtYXRjaCAgIGdkbW9DaGFyYWN0ZXIJICAiJ1teXFxdJyIKK3N5biBtYXRjaCAgIGdkbW9TcGVjaWFsQ2hhcmFjdGVyICAiJ1xcLiciCitzeW4gbWF0Y2ggICBnZG1vTnVtYmVyCQkgICIwW3hYXVswLTlhLWZBLUZdXCtcPiIKK3N5biBtYXRjaCAgIGdkbW9MaW5lQ29tbWVudCAgICAgICAiLS0uKiIKK3N5biBtYXRjaCAgIGdkbW9MaW5lQ29tbWVudCAgICAgICAiLS0uKi0tIgorCitzeW4gbWF0Y2ggZ2Rtb0RlZmluaXRpb24gIl5ccypbYS16QS1aXVstYS16QS1aMC05Xy5cW1xdIFx0e31dKiAqOjo9Im1lPWUtMworc3luIG1hdGNoIGdkbW9CcmFjZXMgICAgICJbe31dIgorCitzeW4gc3luYyBjY29tbWVudCBnZG1vQ29tbWVudAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9nZG1vX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2dkbW9fc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgZ2Rtb0NhdGVnb3J5CSAgICAgIFN0cnVjdHVyZQorICBIaUxpbmsgZ2Rtb1JlbGF0aW9uc2hpcCAgICAgTWFjcm8KKyAgSGlMaW5rIGdkbW9EZWZpbml0aW9uICAgICAgIFN0YXRlbWVudAorICBIaUxpbmsgZ2Rtb1JlZmVyZW5jZQkgICAgICBUeXBlCisgIEhpTGluayBnZG1vRXh0ZW5zaW9uCSAgICAgIE9wZXJhdG9yCisgIEhpTGluayBnZG1vQnJhY2VzCSAgICAgIEZ1bmN0aW9uCisgIEhpTGluayBnZG1vU3BlY2lhbAkgICAgICBTcGVjaWFsCisgIEhpTGluayBnZG1vU3RyaW5nCSAgICAgIFN0cmluZworICBIaUxpbmsgZ2Rtb0NoYXJhY3RlcgkgICAgICBDaGFyYWN0ZXIKKyAgSGlMaW5rIGdkbW9TcGVjaWFsQ2hhcmFjdGVyIGdkbW9TcGVjaWFsCisgIEhpTGluayBnZG1vQ29tbWVudAkgICAgICBDb21tZW50CisgIEhpTGluayBnZG1vTGluZUNvbW1lbnQgICAgICBnZG1vQ29tbWVudAorICBIaUxpbmsgZ2Rtb1R5cGUJICAgICAgVHlwZQorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJnZG1vIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZ2VkY29tLnZpbSBiL3J1bnRpbWUvc3ludGF4L2dlZGNvbS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4NTFjYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2dlZGNvbS52aW0KQEAgLTAsMCArMSw2NiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUdlZGNvbQorIiBNYWludGFpbmVyOglQYXVsIEpvaG5zb24gKHBqY2pAdHJhbnNlZGEuY29tKQorIiBWZXJzaW9uIDEuMDU5IC0gMjNyZCBEZWNlbWJlciAxOTk5CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3ludGF4IGNhc2UgbWF0Y2gKKworc3ludGF4IGtleXdvcmQgZ2VkY29tX3JlY29yZCBBQkJSIEFERFIgQURPUCBBRFIxIEFEUjIgQUZOIEFHRSBBR05DIEFMSUEgQU5DRQorc3ludGF4IGtleXdvcmQgZ2VkY29tX3JlY29yZCBBTkNJIEFOVUwgQVNTTyBBVVRIIEJBUEwgQkFQTSBCQVJNIEJBU00gQklSVCBCTEVTCitzeW50YXgga2V5d29yZCBnZWRjb21fcmVjb3JkIEJMT0IgQlVSSSBDQUxOIENBU1QgQ0FVUyBDRU5TIENIQU4gQ0hBUiBDSElMIENIUgorc3ludGF4IGtleXdvcmQgZ2VkY29tX3JlY29yZCBDSFJBIENJVFkgQ09OQyBDT05GIENPTkwgQ09OVCBDT1BSIENPUlAgQ1JFTSBDVFJZCitzeW50YXgga2V5d29yZCBnZWRjb21fcmVjb3JkIERBVEEgREVBVCBERVNDIERFU0kgREVTVCBESVYgRElWRiBEU0NSIEVEVUMgRU1JRworc3ludGF4IGtleXdvcmQgZ2VkY29tX3JlY29yZCBFTkRMIEVOR0EgRVZFTiBGQU0gRkFNQyBGQU1GIEZBTVMgRkNPTSBGSUxFIEZPUk0KK3N5bnRheCBrZXl3b3JkIGdlZGNvbV9yZWNvcmQgR0VEQyBHSVZOIEdSQUQgSEVBRCBIVVNCIElETk8gSU1NSSBJTkRJIExBTkcgTUFSQgorc3ludGF4IGtleXdvcmQgZ2VkY29tX3JlY29yZCBNQVJDIE1BUkwgTUFSUiBNQVJTIE1FREkgTkFUSSBOQVRVIE5DSEkgTklDSyBOTVIKK3N5bnRheCBrZXl3b3JkIGdlZGNvbV9yZWNvcmQgTk9URSBOUEZYIE5TRlggT0JKRSBPQ0NVIE9SREkgT1JETiBQQUdFIFBFREkgUEhPTgorc3ludGF4IGtleXdvcmQgZ2VkY29tX3JlY29yZCBQTEFDIFBPU1QgUFJPQiBQUk9QIFBVQkwgUVVBWSBSRUZOIFJFTEEgUkVMSSBSRVBPCitzeW50YXgga2V5d29yZCBnZWRjb21fcmVjb3JkIFJFU0kgUkVTTiBSRVRJIFJGTiBSSU4gUk9MRSBTRVggU0xHQyBTTEdTIFNPVVIKK3N5bnRheCBrZXl3b3JkIGdlZGNvbV9yZWNvcmQgU1BGWCBTU04gU1RBRSBTVEFUIFNVQk0gU1VCTiBTVVJOIFRFTVAgVEVYVCBUSU1FCitzeW50YXgga2V5d29yZCBnZWRjb21fcmVjb3JkIFRJVEwgVFJMUiBUWVBFIFZFUlMgV0lGRSBXSUxMCitzeW50YXgga2V5d29yZCBnZWRjb21fcmVjb3JkIERBVEUgbmV4dGdyb3VwPWdlZGNvbV9kYXRlCitzeW50YXgga2V5d29yZCBnZWRjb21fcmVjb3JkIE5BTUUgbmV4dGdyb3VwPWdlZGNvbV9uYW1lCisKK3N5bnRheCBjYXNlIGlnbm9yZQorCitzeW50YXggcmVnaW9uIGdlZGNvbV9pZCBzdGFydD0iQCIgZW5kPSJAIiBvbmVsaW5lIGNvbnRhaW5zPWdlZGNvbV9paSwgZ2VkY29tX2luCitzeW50YXggbWF0Y2ggZ2VkY29tX2lpICJcSVwrIiBjb250YWluZWQgbmV4dGdyb3VwPWdlZGNvbV9pbgorc3ludGF4IG1hdGNoIGdlZGNvbV9pbiAiXGRcKyIgY29udGFpbmVkCitzeW50YXggcmVnaW9uIGdlZGNvbV9uYW1lIHN0YXJ0PSIiIGVuZD0iJCIgc2tpcHdoaXRlIG9uZWxpbmUgY29udGFpbnM9Z2VkY29tX2NuYW1lLCBnZWRjb21fc3VybmFtZSBjb250YWluZWQKK3N5bnRheCBtYXRjaCBnZWRjb21fY25hbWUgIlxpXCsiIGNvbnRhaW5lZAorc3ludGF4IG1hdGNoIGdlZGNvbV9zdXJuYW1lICIvXChcaVx8XHNcKSovIiBjb250YWluZWQKK3N5bnRheCBtYXRjaCBnZWRjb21fZGF0ZSAiXGRcezEsMn1cc1wrXChqYW5cfGZlYlx8bWFyXHxhcHJcfG1heVx8anVuXHxqdWxcfGF1Z1x8c2VwXHxvY3RcfG5vdlx8ZGVjXClcc1wrXGRcKyIKK3N5bnRheCBtYXRjaCBnZWRjb21fZGF0ZSAiLioiIGNvbnRhaW5lZAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9nZWRjb21fc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZ2VkY29tX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGdlZGNvbV9yZWNvcmQgU3RhdGVtZW50CisgIEhpTGluayBnZWRjb21faWQgQ29tbWVudAorICBIaUxpbmsgZ2VkY29tX2lpIFByZVByb2MKKyAgSGlMaW5rIGdlZGNvbV9pbiBUeXBlCisgIEhpTGluayBnZWRjb21fbmFtZSBQcmVQcm9jCisgIEhpTGluayBnZWRjb21fY25hbWUgVHlwZQorICBIaUxpbmsgZ2VkY29tX3N1cm5hbWUgSWRlbnRpZmllcgorICBIaUxpbmsgZ2VkY29tX2RhdGUgQ29uc3RhbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZ2VkY29tIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZ2tyZWxsbXJjLnZpbSBiL3J1bnRpbWUvc3ludGF4L2drcmVsbG1yYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlMTIzOAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2drcmVsbG1yYy52aW0KQEAgLTAsMCArMSw5MSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgVGhpcyBpcyBhIEdFTkVSQVRFRCBGSUxFLiBQbGVhc2UgYWx3YXlzIHJlZmVyIHRvIHNvdXJjZSBmaWxlIGF0IHRoZSBVUkkgYmVsb3cuCisiIExhbmd1YWdlOiBna3JlbGxtIHRoZW1lIGZpbGVzIGBna3JlbGxtcmMnCisiIE1haW50YWluZXI6IERhdmlkIE5lXHZ7Y31hcyAoWWV0aSkgPHlldGlAcGh5c2ljcy5tdW5pLmN6PgorIiBMYXN0IENoYW5nZTogMjAwMy0wNC0zMAorIiBVUkw6IGh0dHA6Ly90cmlmaWMuYXRoLmN4L0Z0cC92aW0vc3ludGF4L2drcmVsbG1yYy52aW0KKworIiBTZXR1cAoraWYgdmVyc2lvbiA+PSA2MDAKKwlpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCQlmaW5pc2gKKwllbmRpZgorZWxzZQorCXN5bnRheCBjbGVhcgorZW5kaWYKKworaWYgdmVyc2lvbiA+PSA2MDAKKwlzZXRsb2NhbCBpc2tleXdvcmQ9XywtLGEteixBLVosNDgtNTcKK2Vsc2UKKwlzZXQgaXNrZXl3b3JkPV8sLSxhLXosQS1aLDQ4LTU3CitlbmRpZgorCitzeW4gY2FzZSBtYXRjaAorCisiIEJhc2UgY29uc3RydWN0cworc3luIG1hdGNoIGdrcmVsbG1yY0NvbW1lbnQgIiMuKiQiIGNvbnRhaW5zPWdrcmVsbG1yY0ZpeG1lCitzeW4ga2V5d29yZCBna3JlbGxtcmNGaXhtZSBGSVhNRSBUT0RPIFhYWCBOT1QgY29udGFpbmVkCitzeW4gcmVnaW9uIGdrcmVsbG1yY1N0cmluZyBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIG9uZWxpbmUKK3N5biBtYXRjaCBna3JlbGxtcmNOdW1iZXIgIl4tXD1cKFxkXCtcKVw9XC5cPVxkXCsiCitzeW4gbWF0Y2ggZ2tyZWxsbXJjTnVtYmVyICJcVy1cPVwoXGRcK1wpXD1cLlw9XGRcKyJsYz0xCitzeW4ga2V5d29yZCBna3JlbGxtcmNDb25zdGFudCBub25lCitzeW4gbWF0Y2ggZ2tyZWxsbXJjUkdCQ29sb3IgIiNcKFx4XHsxMn1cfFx4XHs5fVx8XHhcezZ9XHxceFx7M31cKVw+IgorCisiIEtleXdvcmRzCitzeW4ga2V5d29yZCBna3JlbGxtcmNCdWlsdGluRXh0IGNwdV9uaWNlX2NvbG9yIGNwdV9uaWNlX2dyaWRfY29sb3Iga3JlbGxfZGVwdGgga3JlbGxfZXhwYW5kIGtyZWxsX2xlZnRfbWFyZ2luIGtyZWxsX3JpZ2h0X21hcmdpbiBrcmVsbF94X2hvdCBrcmVsbF95b2ZmIG1lbV9rcmVsbF9idWZmZXJzX2RlcHRoIG1lbV9rcmVsbF9idWZmZXJzX2V4cGFuZCBtZW1fa3JlbGxfYnVmZmVyc194X2hvdCBtZW1fa3JlbGxfYnVmZmVyc195b2ZmIG1lbV9rcmVsbF9jYWNoZV9kZXB0aCBtZW1fa3JlbGxfY2FjaGVfZXhwYW5kIG1lbV9rcmVsbF9jYWNoZV94X2hvdCBtZW1fa3JlbGxfY2FjaGVfeW9mZiBzZW5zb3JzX2JnX3ZvbHQgdGltZXJfYmdfdGltZXIKK3N5biBrZXl3b3JkIGdrcmVsbG1yY0dsb2JhbCBhbGxvd19zY2FsaW5nIGF1dGhvciBjaGFydF93aWR0aF9yZWYgdGhlbWVfYWx0ZXJuYXRpdmVzCitzeW4ga2V5d29yZCBna3JlbGxtcmNTZXRDbWQgc2V0X2ltYWdlX2JvcmRlciBzZXRfaW50ZWdlciBzZXRfc3RyaW5nCitzeW4ga2V5d29yZCBna3JlbGxtcmNHbG9iYWwgYmdfc2xpZGVyX21ldGVyX2JvcmRlciBiZ19zbGlkZXJfcGFuZWxfYm9yZGVyCitzeW4ga2V5d29yZCBna3JlbGxtcmNHbG9iYWwgZnJhbWVfYm90dG9tX2hlaWdodCBmcmFtZV9sZWZ0X3dpZHRoIGZyYW1lX3JpZ2h0X3dpZHRoIGZyYW1lX3RvcF9oZWlnaHQgZnJhbWVfbGVmdF9jaGFydF9vdmVybGFwIGZyYW1lX3JpZ2h0X2NoYXJ0X292ZXJsYXAgZnJhbWVfbGVmdF9wYW5lbF9vdmVybGFwIGZyYW1lX3JpZ2h0X3BhbmVsX292ZXJsYXAgZnJhbWVfbGVmdF9zcGFjZXJfb3ZlcmxhcCBmcmFtZV9yaWdodF9zcGFjZXJfb3ZlcmxhcCBzcGFjZXJfb3ZlcmxhcF9vZmYgY2FwX2ltYWdlc19vZmYKK3N5biBrZXl3b3JkIGdrcmVsbG1yY0dsb2JhbCBmcmFtZV9ib3R0b21fYm9yZGVyIGZyYW1lX2xlZnRfYm9yZGVyIGZyYW1lX3JpZ2h0X2JvcmRlciBmcmFtZV90b3BfYm9yZGVyIHNwYWNlcl90b3BfYm9yZGVyIHNwYWNlcl9ib3R0b21fYm9yZGVyIGZyYW1lX2xlZnRfY2hhcnRfYm9yZGVyIGZyYW1lX3JpZ2h0X2NoYXJ0X2JvcmRlciBmcmFtZV9sZWZ0X3BhbmVsX2JvcmRlciBmcmFtZV9yaWdodF9wYW5lbF9ib3JkZXIKK3N5biBrZXl3b3JkIGdrcmVsbG1yY0dsb2JhbCBjaGFydF9pbl9jb2xvciBjaGFydF9pbl9jb2xvcl9ncmlkIGNoYXJ0X291dF9jb2xvciBjaGFydF9vdXRfY29sb3JfZ3JpZAorc3luIGtleXdvcmQgZ2tyZWxsbXJjR2xvYmFsIGJnX3NlcGFyYXRvcl9oZWlnaHQgYmdfZ3JpZF9tb2RlCitzeW4ga2V5d29yZCBna3JlbGxtcmNHbG9iYWwgcnhfbGVkX3ggcnhfbGVkX3kgdHhfbGVkX3ggdHhfbGVkX3kKK3N5biBrZXl3b3JkIGdrcmVsbG1yY0dsb2JhbCBkZWNhbF9tYWlsX2ZyYW1lcyBkZWNhbF9tYWlsX2RlbGF5CitzeW4ga2V5d29yZCBna3JlbGxtcmNHbG9iYWwgZGVjYWxfYWxhcm1fZnJhbWVzIGRlY2FsX3dhcm5fZnJhbWVzCitzeW4ga2V5d29yZCBna3JlbGxtcmNHbG9iYWwga3JlbGxfc2xpZGVyX2RlcHRoIGtyZWxsX3NsaWRlcl9leHBhbmQga3JlbGxfc2xpZGVyX3hfaG90CitzeW4ga2V5d29yZCBna3JlbGxtcmNHbG9iYWwgYnV0dG9uX3BhbmVsX2JvcmRlciBidXR0b25fbWV0ZXJfYm9yZGVyCitzeW4ga2V5d29yZCBna3JlbGxtcmNHbG9iYWwgbGFyZ2VfZm9udCBub3JtYWxfZm9udCBzbWFsbF9mb250CitzeW4ga2V5d29yZCBna3JlbGxtcmNHbG9iYWwgc3BhY2VyX2JvdHRvbV9oZWlnaHQgc3BhY2VyX3RvcF9oZWlnaHQgc3BhY2VyX2JvdHRvbV9oZWlnaHRfY2hhcnQgc3BhY2VyX3RvcF9oZWlnaHRfY2hhcnQgc3BhY2VyX2JvdHRvbV9oZWlnaHRfbWV0ZXIgc3BhY2VyX3RvcF9oZWlnaHRfbWV0ZXIKK3N5biBrZXl3b3JkIGdrcmVsbG1yY0V4cGFuZE1vZGUgbGVmdCByaWdodCBiYXItbW9kZSBsZWZ0LXNjYWxlZCByaWdodC1zY2FsZWQgYmFyLW1vZGUtc2NhbGVkCitzeW4ga2V5d29yZCBna3JlbGxtcmNNZXRlck5hbWUgYXBtIGNhbCBjbG9jayBmcyBob3N0IG1haWwgbWVtIHN3YXAgdGltZXIgc2Vuc29ycyB1cHRpbWUKK3N5biBrZXl3b3JkIGdrcmVsbG1yY0NoYXJ0TmFtZSBjcHUgcHJvYyBkaXNrIGluZXQgYW5kIG5ldAorc3luIG1hdGNoIGdrcmVsbG1yY1NwZWNpYWxDbGFzc05hbWUgIlwqIgorc3luIGtleXdvcmQgZ2tyZWxsbXJjU3R5bGVDbWQgU3R5bGVNZXRlciBTdHlsZUNoYXJ0IFN0eWxlUGFuZWwKK3N5biBrZXl3b3JkIGdrcmVsbG1yY1N0eWxlSXRlbSB0ZXh0Y29sb3IgYWx0X3RleHRjb2xvciBmb250IGFsdF9mb250IHRyYW5zcGFyZW5jeSBib3JkZXIgbGFiZWxfcG9zaXRpb24gbWFyZ2luIG1hcmdpbnMgbGVmdF9tYXJnaW4gcmlnaHRfbWFyZ2luIHRvcF9tYXJnaW4gYm90dG9tX21hcmdpbiBrcmVsbF9kZXB0aCBrcmVsbF95b2ZmIGtyZWxsX3hfaG90IGtyZWxsX2V4cGFuZCBrcmVsbF9sZWZ0X21hcmdpbiBrcmVsbF9yaWdodF9tYXJnaW4KKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZ3RrcmNfc3ludGF4X2luaXRzIikKKwlpZiB2ZXJzaW9uIDwgNTA4CisJCWxldCBkaWRfZ3RrcmNfc3ludGF4X2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluayBna3JlbGxtcmNDb21tZW50IENvbW1lbnQKKwlIaUxpbmsgZ2tyZWxsbXJjRml4bWUgVG9kbworCisJSGlMaW5rIGdrcmVsbG1yY1N0cmluZyBna3JlbGxtcmNDb25zdGFudAorCUhpTGluayBna3JlbGxtcmNOdW1iZXIgZ2tyZWxsbXJjQ29uc3RhbnQKKwlIaUxpbmsgZ2tyZWxsbXJjUkdCQ29sb3IgZ2tyZWxsbXJjQ29uc3RhbnQKKwlIaUxpbmsgZ2tyZWxsbXJjRXhwYW5kTW9kZSBna3JlbGxtcmNDb25zdGFudAorCUhpTGluayBna3JlbGxtcmNDb25zdGFudCBDb25zdGFudAorCisJSGlMaW5rIGdrcmVsbG1yY01ldGVyTmFtZSBna3JlbGxtcmNDbGFzcworCUhpTGluayBna3JlbGxtcmNDaGFydE5hbWUgZ2tyZWxsbXJjQ2xhc3MKKwlIaUxpbmsgZ2tyZWxsbXJjU3BlY2lhbENsYXNzTmFtZSBna3JlbGxtcmNDbGFzcworCUhpTGluayBna3JlbGxtcmNDbGFzcyBUeXBlCisKKwlIaUxpbmsgZ2tyZWxsbXJjR2xvYmFsIGdrcmVsbG1yY0l0ZW0KKwlIaUxpbmsgZ2tyZWxsbXJjQnVpbHRpbkV4dCBna3JlbGxtcmNJdGVtCisJSGlMaW5rIGdrcmVsbG1yY1N0eWxlSXRlbSBna3JlbGxtcmNJdGVtCisJSGlMaW5rIGdrcmVsbG1yY0l0ZW0gRnVuY3Rpb24KKworCUhpTGluayBna3JlbGxtcmNTZXRDbWQgU3BlY2lhbAorCUhpTGluayBna3JlbGxtcmNTdHlsZUNtZCBTdGF0ZW1lbnQKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJna3JlbGxtcmMiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9nbnVwbG90LnZpbSBiL3J1bnRpbWUvc3ludGF4L2dudXBsb3QudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZmE3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9nbnVwbG90LnZpbQpAQCAtMCwwICsxLDE5OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CWdudXBsb3QgMy44aS4wCisiIE1haW50YWluZXI6CUpvaG4gSG9lbHplbCBqb2huaDUxQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAorIiBMYXN0IENoYW5nZToJTW9uIE1heSAyNiAwMjozMzozMyBVVEMgMjAwMworIiBGaWxlbmFtZXM6CSouZ3BpICAqLmdpaCAgIHNjcmlwdHM6ICMhKmdudXBsb3QKKyIgVVJMOgkJaHR0cDovL2pvaG5oNTEuZ2V0LnRvL3ZpbS9zeW50YXgvZ251cGxvdC52aW0KKyIKKworIiB0aGFua3MgdG8gIkRhdmlkIE5lY2FzIChZZXRpKSIgPHlldGlAcGh5c2ljcy5tdW5pLmN6PiBmb3IgaGVhZHMgdXAgLSB3b3JraW5nIG9uIG1vcmUgY2hhbmdlcyAuCisiICouZ3BpICAgICAgPSBHbnVQbG90IElucHV0IC0gd2hhdCBJIHVzZSBiZWNhdXNlIHRoZXJlIGlzIG5vIG90aGVyIGd1aWRlbGluZS4gamVoIDExLzIwMDAKKyIgKi5naWggICAgICA9IG1ha2VzIHVzaW5nIGN1dC9wYXN0aW5nIGZyb20gZ251cGxvdC5naWggZWFzaWVyIC4uLgorIiAjISpnbnVwbG90ID0gZm9yIExpbnV4IGJhc2ggc2hlbGwgc2NyaXB0cyBvZiBnbnVwbG90IGNvbW1hbmRzLgorIgkgICAgICAgZW1hY3MgdXNlZCBhIHN1ZmZpeCBvZiAnPGdwPz4nCisiIGdudXBsb3QgZGVtbyBmaWxlcyBzaG93IG5vIHByZWZlcmVuY2UuCisiIEkgd2lsbCBwb3N0IG1haWwgYW5kIG5ld3Nncm91cCBjb21tZW50cyBvbiBhIHN0YW5kYXJkIHN1ZmZpeCBpbiAnVVJMJyBkaXJlY3RvcnkuCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBzb21lIHNob3J0ZW5lZCBuYW1lcyB0byBtYWtlIGRlbW8gZmlsZXMgbG9vayBjbGVhbi4uLiBqZWguIDExLzIwMDAKKyIgZGVtb3MgLT4gMy44aSAuLi4gamVoLiA1LzIwMDMgLSBhIHdvcmsgaW4gcHJvZ3Jlc3MuLi4KKworIiBjb21tYW5kcworCitzeW4ga2V5d29yZCBnbnVwbG90U3RhdGVtZW50CWNkIGNhbGwgY2xlYXIgZXhpdCBzZXQgdW5zZXQgcGxvdCBzcGxvdCBoZWxwCitzeW4ga2V5d29yZCBnbnVwbG90U3RhdGVtZW50CWxvYWQgcGF1c2UgcXVpdCBmaXQgcmVwW2xvdF0gaWYKK3N5biBrZXl3b3JkIGdudXBsb3RTdGF0ZW1lbnQJRklUX0xJTUlUIEZJVF9NQVhJVEVSIEZJVF9TVEFSVF9MQU1CREEKK3N5biBrZXl3b3JkIGdudXBsb3RTdGF0ZW1lbnQJRklUX0xBTUJEQV9GQUNUT1IgRklUX0xPRyBGSVRfU0NSSVBUCitzeW4ga2V5d29yZCBnbnVwbG90U3RhdGVtZW50CXByaW50IHB3ZCByZXJlYWQgcmVzZXQgc2F2ZSBzaG93IHRlc3QgISBmdW5jdGlvbnMgdmFyCitzeW4ga2V5d29yZCBnbnVwbG90Q29uZGl0aW9uYWwJaWYKKyIgaWYgaXMgY29uZCArIHN0bXQgLSBvaz8KKworIiBudW1iZXJzIGZtIGMudmltCisKKyIJaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90IGFuZCB3aXRoICJmIi4KK3N5biBjYXNlICAgIGlnbm9yZQorc3luIG1hdGNoICAgZ251cGxvdE51bWJlcgkiXDxbMC05XVwrXCh1XD1sXD1cfGx1XHxmXClcPiIKKyIJZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRoIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCAgIGdudXBsb3RGbG9hdAkiXDxbMC05XVwrXC5bMC05XSpcKGVbLStdXD1bMC05XVwrXClcPVtmbF1cPVw+IgorIglmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggICBnbnVwbG90RmxvYXQJIlwuWzAtOV1cK1woZVstK11cPVswLTldXCtcKVw9W2ZsXVw9XD4iCisiCWZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aG91dCBkb3QsIHdpdGggZXhwb25lbnQKK3N5biBtYXRjaCAgIGdudXBsb3RGbG9hdAkiXDxbMC05XVwrZVstK11cPVswLTldXCtbZmxdXD1cPiIKKyIJaGV4IG51bWJlcgorc3luIG1hdGNoICAgZ251cGxvdE51bWJlcgkiXDwweFswLTlhLWZdXCtcKHVcPWxcPVx8bHVcKVw+Igorc3luIGNhc2UgICAgbWF0Y2gKKyIJZmxhZyBhbiBvY3RhbCBudW1iZXIgd2l0aCB3cm9uZyBkaWdpdHMgYnkgbm90IGhpbGlnaHRpbmcKK3N5biBtYXRjaCAgIGdudXBsb3RPY3RhbEVycm9yCSJcPDBbMC03XSpbODldIgorCisiIHBsb3QgYXJncworCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJdVtzaW5nXSB0aXRbbGVdIG5vdGl0W2xlXSB3aVt0aF0gc3RlcHMgZnNbdGVwc10KK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl0aXRsZSBub3RpdGxlIHQKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl3aXRoIHcKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQlsaVtuZXNdIGwKKyIgdCAtIHRvbyBtdWNoPyAgdyAtIHRvbyBtdWNoPyAgbCAtIHRvbyBtdWNoPworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCWxpbmVzcG9pbnRzIHZpYQorCisiIGZ1bmNzCisKK3N5biBrZXl3b3JkIGdudXBsb3RGdW5jCQlhYnMgYWNvcyBhY29zaCBhcmcgYXNpbiBhc2luaCBhdGFuIGF0YW5oIGF0YW4yCitzeW4ga2V5d29yZCBnbnVwbG90RnVuYwkJYmVzajAgYmVzajEgYmVzeTAgYmVzeTEKK3N5biBrZXl3b3JkIGdudXBsb3RGdW5jCQljZWlsIGNvbHVtbiBjb3MgY29zaCBlcmYgZXJmYyBleHAgZmxvb3IgZ2FtbWEKK3N5biBrZXl3b3JkIGdudXBsb3RGdW5jCQlpYmV0YSBpbnZlcmYgaWdhbW1hIGltYWcgaW52bm9ybSBpbnQgbGdhbW1hCitzeW4ga2V5d29yZCBnbnVwbG90RnVuYwkJbG9nIGxvZzEwIG5vcm0gcmFuZCByZWFsIHNnbiBzaW4gc2luaCBzcXJ0IHRhbgorc3luIGtleXdvcmQgZ251cGxvdEZ1bmMJCWxhbWJlcnR3CitzeW4ga2V5d29yZCBnbnVwbG90RnVuYwkJdGFuaCB2YWxpZAorc3luIGtleXdvcmQgZ251cGxvdEZ1bmMJCXRtX2hvdXIgdG1fbWRheSB0bV9taW4gdG1fbW9uIHRtX3NlYworc3luIGtleXdvcmQgZ251cGxvdEZ1bmMJCXRtX3dkYXkgdG1feWRheSB0bV95ZWFyCisKKyIgc2V0IHZhcnMKKworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCXhkYXRhIHRpbWVmbXQgZ3JpZCBub3l0aWNzIHl0aWNzIGZzCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJbG9nc2NhbGUgdGltZSBub3RpbWUgbXh0aWNzIG5vbXh0aWNzIHN0eWxlIG1jYnRpY3MKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQlub2xvZ3NjYWxlCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJYXhlcyB4MXkyIHVuaXF1ZSBhY3NbcGxpbmVzXQorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCXNpemUgb3JpZ2luIG11bHRpcGxvdCB4dGljcyB4clthbmdlXSB5clthbmdlXSBzcXVhcmUgbm9zcXVhcmUgcmF0aW8gbm9yYXRpbworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCWJpbmFyeSBtYXRyaXggaW5kZXggZXZlcnkgdGhydSBzbVtvb3RoXQorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCWFsbCBhbmdsZXMgZGVncmVlcyByYWRpYW5zCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJYXJyb3cgbm9hcnJvdyBhdXRvc2NhbGUgbm9hdXRvc2NhbGUgYXJyb3dzdHlsZQorIiBhdXRvc2NhbGUgYXJncyA9IHggeSB4eSB6IHQgeW1pbiAuLi4gLSB0b28gbXVjaD8KKyIgbmVlZHMgY29kZSB0bzogdXNpbmcgdGl0bGUgdnMgYXV0b3NjYWxlIHQKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl4IHkgeiB6Y2IKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQlsaW5lYXIgIGN1Ymljc3BsaW5lICBic3BsaW5lIG9yZGVyIGxldmVsW3NdCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJYXV0byBkaXNjW3JldGVdIGluY3JbZW1lbnRhbF0gZnJvbSB0byBoZWFkIG5vaGVhZAorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCWdyYXBoIGJhc2UgYm90aCBub3N1cmZhY2UgdGFibGUgb3V0W3B1dF0gZGF0YQorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCWJhciBib3JkZXIgbm9ib3JkZXIgYm94d2lkdGgKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQljbGFiZWwgbm9jbGFiZWwgY2xpcCBub2NsaXAgY250cnBbYXJhbV0KK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQljb250b3VyIG5vY29udG91cgorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCWRncmlkM2Qgbm9kZ3JpZDNkIGR1bW15IGVuY29kaW5nIGZvcm1hdAorIiBzZXQgZW5jb2RpbmcgYXJncyBub3QgaW5jbHVkZWQgLSB5ZXQuCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJZnVuY3Rpb24gZ3JpZCBub2dyaWQgaGlkZGVuWzNkXSBub2hpZGRlblszZF0gaXNvc2FtcGxlW3NdIGtleSBub2tleQorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCWhpc3RvcnlzaXplIG5vaGlzdG9yeXNpemUKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQlkZWZhdWx0cyBvZmZzZXQgbm9vZmZzZXQgdHJpYW5nbGVwYXR0ZXJuIHVuZGVmaW5lZCBub3VuZGVmaW5lZCBhbHRkaWFnb25hbCBiZW50b3ZlciBub2FsdGRpYWdvbmFsIG5vYmVudG92ZXIKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQlsZWZ0IHJpZ2h0IHRvcCBib3R0b20gb3V0c2lkZSBiZWxvdyBzYW1wbGVuIHNwYWNpbmcgd2lkdGggaGVpZ2h0IGJveCBub2JveCBsaW5lc3R5bGUgbHMgbGluZXR5cGUgbHQgbGluZXdpZHRoIGx3CitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJTGVmdCBSaWdodCBhdXRvdGl0bGVzIG5vYXV0b3RpdGxlcyBlbmhhbmNlZCBub2VuaGFuY2VkCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJaXNvc2FtcGxlcworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCWxhYmVsIG5vbGFiZWwgbG9nc2NhbGUgbm9sb2dbc2NhbGVdIG1pc3NpbmcgY2VudGVyIGZvbnQgbG9jYWxlCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJbWFwcGluZyBtYXJnaW4gYm1hcmdpbiBsbWFyZ2luIHJtYXJnaW4gdG1hcmdpbiBzcGhlcmljYWwgY3lsaW5kcmljYWwgY2FydGVzaWFuCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJbGluZXN0eWxlIG5vbGluZXN0eWxlIGxpbmV0eXBlIGx0IGxpbmV3aWR0aCBsdyBwb2ludHR5cGUgcHQgcG9pbnRzaXplIHBzCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJbW91c2Ugbm9tb3VzZQorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCW5vb2Zmc2V0cyBkYXRhIGNhbmRsZXN0aWNrcyBmaW5hbmNlYmFycyBsaW5lc3BvaW50cyBscCB2ZWN0b3Igbm9zdXJmYWNlCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJdGVybVtpbmFsXSBsaW51eCBhZWQ3NjcgYWVkNTEyIGdwaWMKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQlyZWdpcyB0ZWs0MTB4IHRlazQwIHZ0dGVrIGtjLXRlazQweHgKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQlrbS10ZWs0MHh4IHNlbGFuYXIgYml0Z3JhcGggeGxpYiB4MTEgWDExCisiIHgxMSBhcmdzCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJYWlmbSBjZ20gZHVtYiBmaWcgZ2lmIHNtYWxsIGxhcmdlIHNpemUgbm9mb250bGlzdCB3aW53b3JkNiBjb3JlbCBkeGYgZW1mCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJaHBnbAorIiBzeW4ga2V5d29yZCBnbnVwbG90VHlwZQl0cmFuc3BhcmVudCBocDI2MjNhIGhwMjY0OCBocDUwMGMgcGNsNQkJCQkgICAgICB3aHkgamVoCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJaHAyNjIzYSBocDI2NDggaHA1MDBjIHBjbDUKK3N5biBtYXRjaCBnbnVwbG90VHlwZQkJIlw8dHJhbnNwYXJlbnRcPiIKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQlocGxqaWkgaHBkaiBocHBqIGltYWdlbiBtaWYgcGJtIHBuZyBzdmcKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQlwb3N0c2NyaXB0IGVuaGFuY2VkX3Bvc3RzY3JpcHQgcW1zIHRhYmxlCisiIHBvc3RzY3JpcHQgZWRpdGluZyB2YWx1ZXM/CitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJdGdpZiB0a2NhbnZhcyBlcHNvbi0xODBkcGkgZXBzb24tNjBkcGkKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQllcHNvbi1seDgwMCBuZWMtY3A2IG9raWRhdGEgc3RhcmMKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl0YW5keS02MGRwaSBsYXRleCBlbXRleCBwc2xhdGV4IHBzdGV4IGVwc2xhdGV4CitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJZWVwaWMgdHBpYyBwc3RyaWNrcyB0ZXhkcmF3IG1mIG1ldGFmb250IG1wb3N0IG1wCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJdGltZXN0YW1wIG5vdGltZXN0YW1wCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJdmFyaWFibGVzIHZlcnNpb24KK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl4MmRhdGEgeTJkYXRhIHlkYXRhIHpkYXRhCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJcmV2ZXJzZSB3cml0ZWJhY2sgbm9yZXZlcnNlIG5vd3JpdGViYWNrCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJYXhpcyBtaXJyb3IgYXV0b2ZyZXEgbm9taXJyb3Igcm90YXRlIGF1dG9mcmVxIG5vcm90YXRlCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJdXBkYXRlCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJbXVsdGlwbG90IG5vbXVsdGlwbG90IG15dGljcworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCW5vbXl0aWNzIG16dGljcyBub216dGljcyBteDJ0aWNzIG5vbXgydGljcworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCW15MnRpY3Mgbm9teTJ0aWNzIG9mZnNldHMgb3JpZ2luIG91dHB1dAorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCXBhcmFbbWV0cmljXSBub3BhcmFbbWV0cmljXSBwb2ludHNpemUgcG9sYXIgbm9wb2xhcgorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCXpyYW5nZSB4MnJhbmdlIHkycmFuZ2UgcnJhbmdlIGNicmFuZ2UKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl0cmFuZ2UgdXJhbmdlIHZyYW5nZSBzYW1wbGVbc10gc2l6ZQorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCWJlemllciBib3hlcnJvcmJhcnMgYm94ZXMgYmFyZ3JhcGggYmFyW3NdCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJYm94eHlbZXJyb3JiYXJzXSBjc3BsaW5lcyBkb3RzIGZzdGVwcyBoaXN0ZXBzIGltcHVsc2VzCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJbGluZVtzXSBsaW5lc3Bbb2ludHNdIHBvaW50cyBwb2lpbnR0eXBlIHNiZXppZXIgc3BsaW5lcyBzdGVwcworIiB3IGx0IGx3IGxzCSAgICAgID0gb3B0aW9uYWwKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl2ZWN0b3JzIHhlcnJbb3JiYXJzXSB4eWVycltvcmJhcnNdIHllcnJbb3JiYXJzXSBmaW5hbmNlYmFycyBjYW5kbGVzdGlja3MgdmVjdG9yCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJZXJyb3JiW2FycyBzdXJmYWNlCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJZmlsbGVkY3VydmVbc10gcG0zZCAgIHgxIHgyIHkxIHkyIHh5IGNsb3NlZAorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCWF0IHBpIGZyb250CitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJZXJyb3JsaW5lcyB4ZXJyb3JsaW5lcyB5ZXJyb3JsaW5lcyB4eWVycm9ybGluZXMKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl0aWNzIHRpY3NsZXZlbCB0aWNzY2FsZSB0aW1lIHRpbWVmbXQgdmlldworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCXhkYXRhIHhkdGljcyBub3hkdGljcyB5ZHRpY3Mgbm95ZHRpY3MKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl6ZHRpY3Mgbm96ZHRpY3MgeDJkdGljcyBub3gyZHRpY3MgeTJkdGljcyBub3kyZHRpY3MKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl4bGFiW2VsXSB5bGFiW2VsXSB6bGFiW2VsXSBjYmxhYltlbF0geDJsYWJlbCB5MmxhYmVsIHhtdGljcworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCXhtdGljcyBub3htdGljcyB5bXRpY3Mgbm95bXRpY3Mgem10aWNzIG5vem10aWNzCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJeDJtdGljcyBub3gybXRpY3MgeTJtdGljcyBub3kybXRpY3MKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQljYmR0aWNzIG5vY2JkdGljcyBjYm10aWNzIG5vY2JtdGljcyBjYnRpY3Mgbm9jYnRpY3MKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl4dGljcyBub3h0aWNzIHl0aWNzIG5veXRpY3MKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQl6dGljcyBub3p0aWNzIHgydGljcyBub3gydGljcworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCXkydGljcyBub3kydGljcyB6ZXJvIG5vemVybyB6ZXJvYXhpcyBub3plcm9heGlzCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJeHplcm9heGlzIG5veHplcm9heGlzIHl6ZXJvYXhpcyBub3l6ZXJvYXhpcworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCXgyemVyb2F4aXMgbm94Mnplcm9heGlzIHkyemVyb2F4aXMgbm95Mnplcm9heGlzCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJYW5nbGVzIG9uZSB0d28gZmlsbCBlbXB0eSBzb2xpZCBwYXR0ZXJuCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJZGVmYXVsdAorc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCXNjYW5zYXV0b21hdGljIGZsdXNoIGJbZWdpbl0gbm9mdHJpYW5nbGVzIGltcGxpY2l0CisiIGIgdG9vIG11Y2g/IC0gdXNlZCBpbiBkZW1vCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJcGFsZXR0ZSBwb3NpdGl2ZSBuZWdhdGl2ZSBwc19hbGxjRiBub3BzX2FsbGNGIG1heGNvbG9ycworc3luIGtleXdvcmQgZ251cGxvdFR5cGUJCXB1c2ggZm9udGZpbGUgcG9wCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJcmdiZm9ybXVsYWUgZGVmaW5lZCBmaWxlIGNvbG9yIG1vZGVsIGdyYWRpZW50IGNvbG9ybmFtZXMKK3N5biBrZXl3b3JkIGdudXBsb3RUeXBlCQlSR0IgSFNWIENNWSBZSVEgWFlaCitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJY29sb3Jib3ggdmVydGljYWwgaG9yaXpvbnRhbCB1c2VyIGJkZWZhdWx0CitzeW4ga2V5d29yZCBnbnVwbG90VHlwZQkJbG9hZHBhdGggZm9udHBhdGggZGVjaW1hbHNpZ24gaW4gb3V0CisKKyIgY29tbWVudHMgKyBzdHJpbmdzCitzeW4gcmVnaW9uIGdudXBsb3RDb21tZW50CXN0YXJ0PSIjIiBlbmQ9IiQiCitzeW4gcmVnaW9uIGdudXBsb3RDb21tZW50CXN0YXJ0PSsiKyBza2lwPStcXCIrIGVuZD0rIisKK3N5biByZWdpb24gZ251cGxvdENvbW1lbnQJc3RhcnQ9KycrCSAgICAgZW5kPSsnKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9nbnVwbG90X3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2dudXBsb3Rfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgZ251cGxvdFN0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIGdudXBsb3RDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgZ251cGxvdE51bWJlcgkJTnVtYmVyCisgIEhpTGluayBnbnVwbG90RmxvYXQJCUZsb2F0CisgIEhpTGluayBnbnVwbG90T2N0YWxFcnJvcglFcnJvcgorICBIaUxpbmsgZ251cGxvdEZ1bmMJCVR5cGUKKyAgSGlMaW5rIGdudXBsb3RUeXBlCQlUeXBlCisgIEhpTGluayBnbnVwbG90Q29tbWVudAlDb21tZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImdudXBsb3QiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9ncC52aW0gYi9ydW50aW1lL3N5bnRheC9ncC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5OTc0OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2dwLnZpbQpAQCAtMCwwICsxLDc5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJZ3AgKHZlcnNpb24gMi4xKQorIiBNYWludGFpbmVyOglLYXJpbSBCZWxhYmFzIDxLYXJpbS5CZWxhYmFzQG1hdGgudS1wc3VkLmZyPgorIiBMYXN0IGNoYW5nZToJMjAwMSBTZXAgMDIKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgc29tZSBjb250cm9sIHN0YXRlbWVudHMKK3N5bnRheCBrZXl3b3JkIGdwU3RhdGVtZW50CWJyZWFrIHJldHVybiBuZXh0CitzeW50YXgga2V5d29yZCBncENvbmRpdGlvbmFsCWlmCitzeW50YXgga2V5d29yZCBncFJlcGVhdAkJdW50aWwgd2hpbGUgZm9yIGZvcmRpdiBmb3JwcmltZSBmb3JzdGVwIGZvcnZlYworc3ludGF4IGtleXdvcmQgZ3BTY29wZQkJbG9jYWwgZ2xvYmFsCisKK3N5bnRheCBrZXl3b3JkIGdwSW50ZXJmYWNlS2V5CWJ1ZmZlcnNpemUgY29sb3JzIGNvbXBhdGlibGUgZGVidWcgZGVidWdtZW0KK3N5bnRheCBrZXl3b3JkIGdwSW50ZXJmYWNlS2V5CWVjaG8gZm9ybWF0IGhlbHAgaGlzdHNpemUgbG9nIGxvZ2ZpbGUgb3V0cHV0CitzeW50YXgga2V5d29yZCBncEludGVyZmFjZUtleQlwYXJpc2l6ZSBwYXRoIHByaW1lbGltaXQgcHJvbXB0IHBzZmlsZQorc3ludGF4IGtleXdvcmQgZ3BJbnRlcmZhY2VLZXkJcmVhbHByZWNpc2lvbiBzZXJpZXNwcmVjaXNpb24gc2ltcGxpZnkKK3N5bnRheCBrZXl3b3JkIGdwSW50ZXJmYWNlS2V5CXN0cmljdG1hdGNoIHRpbWVyCisKK3N5bnRheCBtYXRjaCAgIGdwSW50ZXJmYWNlCSJeXHMqXFxbYS16XS4qIgorc3ludGF4IGtleXdvcmQgZ3BJbnRlcmZhY2UJZGVmYXVsdAorc3ludGF4IGtleXdvcmQgZ3BJbnB1dAkJcmVhZCBpbnB1dAorCisiIGZ1bmN0aW9ucworc3ludGF4IG1hdGNoIGdwRnVuUmVnaW9uICJeXHMqW2EtekEtWl1bX2EtekEtWjAtOV0qKC4qKVxzKj1ccypbXiBcdD1dIm1lPWUtMSBjb250YWlucz1ncEZ1bmN0aW9uLGdwQXJncworc3ludGF4IG1hdGNoIGdwRnVuUmVnaW9uICJeXHMqW2EtekEtWl1bX2EtekEtWjAtOV0qKC4qKVxzKj1ccyokIiBjb250YWlucz1ncEZ1bmN0aW9uLGdwQXJncworc3ludGF4IG1hdGNoIGdwQXJncyBjb250YWluZWQgIlthLXpBLVpdW19hLXpBLVowLTldKiIKK3N5bnRheCBtYXRjaCBncEZ1bmN0aW9uIGNvbnRhaW5lZCAiXlxzKlthLXpBLVpdW19hLXpBLVowLTldKigibWU9ZS0xCisKKyIgU3RyaW5nIGFuZCBDaGFyYWN0ZXIgY29uc3RhbnRzCisiIEhpZ2hsaWdodCBzcGVjaWFsIChiYWNrc2xhc2gnZWQpIGNoYXJhY3RlcnMgZGlmZmVyZW50bHkKK3N5bnRheCBtYXRjaCAgZ3BTcGVjaWFsIGNvbnRhaW5lZCAiXFxbZW50XFxdIgorc3ludGF4IHJlZ2lvbiBncFN0cmluZyAgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWlucz1ncFNwZWNpYWwKKworImNvbW1lbnRzCitzeW50YXggcmVnaW9uIGdwQ29tbWVudAlzdGFydD0iL1wqIiAgZW5kPSJcKi8iIGNvbnRhaW5zPWdwVG9kbworc3ludGF4IG1hdGNoICBncENvbW1lbnQgIlxcXFwuKiIgY29udGFpbnM9Z3BUb2RvCitzeW50YXgga2V5d29yZCBncFRvZG8gY29udGFpbmVkCVRPRE8KK3N5bnRheCBzeW5jIGNjb21tZW50IGdwQ29tbWVudCBtaW5saW5lcz0xMAorCisiY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcworc3ludGF4IHJlZ2lvbiBncFBhcmVuCQl0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsZ3BQYXJlbkVycm9yLGdwVG9kbyxncEZ1bmN0aW9uLGdwQXJncyxncFNwZWNpYWwKK3N5bnRheCBtYXRjaCBncFBhcmVuRXJyb3IJIikiCitzeW50YXggbWF0Y2ggZ3BJblBhcmVuIGNvbnRhaW5lZCAiW3t9XSIKKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2dwX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2dwX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGdwQ29uZGl0aW9uYWwJCUNvbmRpdGlvbmFsCisgIEhpTGluayBncFJlcGVhdAkJUmVwZWF0CisgIEhpTGluayBncEVycm9yCQlFcnJvcgorICBIaUxpbmsgZ3BQYXJlbkVycm9yCQlncEVycm9yCisgIEhpTGluayBncEluUGFyZW4JCWdwRXJyb3IKKyAgSGlMaW5rIGdwU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGdwU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIGdwQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgZ3BJbnRlcmZhY2UJCVR5cGUKKyAgSGlMaW5rIGdwSW5wdXQJCVR5cGUKKyAgSGlMaW5rIGdwSW50ZXJmYWNlS2V5CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGdwRnVuY3Rpb24JCUZ1bmN0aW9uCisgIEhpTGluayBncFNjb3BlCQlUeXBlCisgICIgY29udGFpbmVkIG9uZXMKKyAgSGlMaW5rIGdwU3BlY2lhbAkJU3BlY2lhbAorICBIaUxpbmsgZ3BUb2RvCQkJVG9kbworICBIaUxpbmsgZ3BBcmdzCQkJVHlwZQorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZ3AiCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZ3BnLnZpbSBiL3J1bnRpbWUvc3ludGF4L2dwZy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0MDE5NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2dwZy52aW0KQEAgLTAsMCArMSw3MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBHbnVQRyBDb25maWd1cmF0aW9uIEZpbGUuCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9zeW50YXgvcGNwL2dwZy8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNS0wNgorIiBhcmNoLXRhZzoJICAgIDYwMjMwNWY3LWQ4YWUtNDhlZi1hNjhmLTRkNTRmMTJhZjcwYQorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBTZXQgaXNrZXl3b3JkIHNpbmNlIHdlIG5lZWQgYC0nIChhbmQgcG90ZW50aWFsbHkgb3RoZXJzKSBpbiBrZXl3b3Jkcy4KKyIgRm9yIHZlcnNpb24gNS54OiBTZXQgaXQgZ2xvYmFsbHkKKyIgRm9yIHZlcnNpb24gNi54OiBTZXQgaXQgbG9jYWxseQoraWYgdmVyc2lvbiA+PSA2MDAKKyAgY29tbWFuZCAtbmFyZ3M9MSBTZXRJc2sgc2V0bG9jYWwgaXNrZXl3b3JkPTxhcmdzPgorZWxzZQorICBjb21tYW5kIC1uYXJncz0xIFNldElzayBzZXQgaXNrZXl3b3JkPTxhcmdzPgorZW5kaWYKK1NldElzayA0OC01Nyw2NS05MCw5Ny0xMjIsLQorZGVsY29tbWFuZCBTZXRJc2sKKworIiBjb21tZW50cworc3luIHJlZ2lvbiAgZ3BnQ29tbWVudAkgICAgY29udGFpbmVkIGRpc3BsYXkgb25lbGluZSBzdGFydD0iIyIgZW5kPSIkIiBjb250YWlucz1ncGdUb2RvLGdwZ0lECisKKyIgdG9kbworc3luIGtleXdvcmQgZ3BnVG9kbwkgICAgY29udGFpbmVkIEZJWE1FIFRPRE8gWFhYIE5PVEUKKworIiBpZHMKK3N5biBtYXRjaCAgIGdwZ0lECSAgICBjb250YWluZWQgZGlzcGxheSAiXDxcKDB4XClcPVx4XHs4LH1cPiIKKworc3luIG1hdGNoICAgZ3BnQmVnaW4JICAgICJeIiBza2lwd2hpdGUgbmV4dGdyb3VwPWdwZ0NvbW1lbnQsZ3BnT3B0aW9uLGdwZ0NvbW1hbmQKKworIiBjb21tYW5kcyB0aGF0IHRha2UgYXJncworc3luIGtleXdvcmQgZ3BnQ29tbWFuZCAgICAgIGNvbnRhaW5lZCBza2lwd2hpdGUgbmV4dGdyb3VwPWdwZ0FyZyBjaGVjay1zaWdzIGRlY3J5cHQgZGVjcnlwdC1maWxlcyBkZWxldGUta2V5IGRlbGV0ZS1zZWNyZXQtYW5kLXB1YmxpYy1rZXkgZGVsZXRlLXNlY3JldC1rZXkgZWRpdC1rZXkgZW5jcnlwdC1maWxlcyBleHBvcnQgZXhwb3J0LWFsbCBleHBvcnQtb3duZXJ0cnVzdCBleHBvcnQtc2VjcmV0LWtleXMgZXhwb3J0LXNlY3JldC1zdWJrZXlzIGZhc3QtaW1wb3J0IGZpbmdlcnByaW50IGdlbi1wcmltZSBnZW4tcmFuZG9tIGltcG9ydCBpbXBvcnQtb3duZXJ0cnVzdCBsaXN0LWtleXMgbGlzdC1wdWJsaWMta2V5cyBsaXN0LXNlY3JldC1rZXlzIGxpc3Qtc2lncyBsc2lnbi1rZXkgbnJzaWduLWtleSBwcmludC1tZCBwcmludC1tZHMgcmVjdi1rZXlzIHNlYXJjaC1rZXlzIHNlbmQta2V5cyBzaWduLWtleSB2ZXJpZnkgdmVyaWZ5LWZpbGVzCisiIGNvbW1hbmRzIHRoYXQgdGFrZSBubyBhcmdzCitzeW4ga2V5d29yZCBncGdDb21tYW5kICAgICAgY29udGFpbmVkIHNraXB3aGl0ZSBuZXh0Z3JvdXA9Z3BnQXJnRXJyb3IgY2hlY2stdHJ1c3RkYiBjbGVhcnNpZ24gZGVzaWctcmV2b2tlIGRldGFjaC1zaWduIGVuY3J5cHQgZ2VuLWtleSBnZW4tcmV2b2tlIGhlbHAgbGlzdC1wYWNrZXRzIHJlYnVpbGQta2V5ZGItY2FjaGVzIHNpZ24gc3RvcmUgc3ltbWV0cmljIHVwZGF0ZS10cnVzdGRiIHZlcnNpb24gd2FycmFudHkKKworIiBvcHRpb25zIHRoYXQgdGFrZSBhcmdzCitzeW4ga2V5d29yZCBncGdPcHRpb24gICAgICAgY29udGFpbmVkIHNraXB3aGl0ZSBuZXh0Z3JvdXA9Z3BnQXJnIGF0dHJpYnV0ZS1mZCBjZXJ0LWRpZ2VzdC1hbGdvIGNoYXJzZXQgY2lwaGVyLWFsZ28gY29tbWFuZC1mZCBjb21tZW50IGNvbXBsZXRlcy1uZWVkZWQgY29tcHJlc3MgY29tcHJlc3MtYWxnbyBkZWJ1ZyBkZWZhdWx0LWNlcnQtY2hlY2stbGV2ZWwgZGVmYXVsdC1rZXkgZGVmYXVsdC1wcmVmZXJlbmNlLWxpc3QgZGVmYXVsdC1yZWNpcGllbnQgZGlnZXN0LWFsZ28gZGlzYWJsZS1jaXBoZXItYWxnbyBkaXNhYmxlLXB1YmtleS1hbGdvIGVuY3J5cHQtdG8gZXhlYy1wYXRoIGV4cG9ydC1vcHRpb25zIGdyb3VwIGhvbWVkaXIgaW1wb3J0LW9wdGlvbnMga2V5cmluZyBrZXlzZXJ2ZXIga2V5c2VydmVyLW9wdGlvbnMgbG9hZC1leHRlbnNpb24gbG9jYWwtdXNlciBsb2dnZXItZmQgbWFyZ2luYWxzLW5lZWRlZCBtYXgtY2VydC1kZXB0aCBub3RhdGlvbi1kYXRhIG9wdGlvbnMgb3V0cHV0IG92ZXJyaWRlLXNlc3Npb24ta2V5IHBhc3NwaHJhc2UtZmQgcGVyc29uYWwtY2lwaGVyLXByZWZlcmVuY2VzIHBlcnNvbmFsLWNvbXByZXNzLXByZWZlcmVuY2VzIHBlcnNvbmFsLWRpZ2VzdC1wcmVmZXJlbmNlcyBwaG90by12aWV3ZXIgcmVjaXBpZW50IHMyay1jaXBoZXItYWxnbyBzMmstZGlnZXN0LWFsZ28gczJrLW1vZGUgc2VjcmV0LWtleXJpbmcgc2V0LWZpbGVuYW1lIHNldC1wb2xpY3ktdXJsIHN0YXR1cy1mZCB0cnVzdGVkLWtleQorIiBvcHRpb25zIHRoYXQgdGFrZSBubyBhcmdzCitzeW4ga2V5d29yZCBncGdPcHRpb24gICAgICAgY29udGFpbmVkIHNraXB3aGl0ZSBuZXh0Z3JvdXA9Z3BnQXJnRXJyb3IgYWxsb3ctZnJlZWZvcm0tdWlkIGFsbG93LW5vbi1zZWxmc2lnbmVkLXVpZCBhbGxvdy1zZWNyZXQta2V5LWltcG9ydCBhbHdheXMtdHJ1c3QgYXJtb3IgYXNrLWNlcnQtZXhwaXJlIGFzay1zaWctZXhwaXJlIGF1dG8tY2hlY2stdHJ1c3RkYiBiYXRjaCBkZWJ1Zy1hbGwgZGVmYXVsdC1jb21tZW50IGRlZmF1bHQtcmVjaXBpZW50LXNlbGYgZHJ5LXJ1biBlbWl0LXZlcnNpb24gZW11bGF0ZS1tZC1lbmNvZGUtYnVnIGVuYWJsZS1zcGVjaWFsLWZpbGVuYW1lcyBlc2NhcGUtZnJvbS1saW5lcyBleHBlcnQgZmFzdC1saXN0LW1vZGUgZml4ZWQtbGlzdC1tb2RlIGZvci15b3VyLWV5ZXMtb25seSBmb3JjZS1tZGMgZm9yY2UtdjMtc2lncyBmb3JjZS12NC1jZXJ0cyBncGctYWdlbnQtaW5mbyBpZ25vcmUtY3JjLWVycm9yIGlnbm9yZS1tZGMtZXJyb3IgaWdub3JlLXRpbWUtY29uZmxpY3QgaWdub3JlLXZhbGlkLWZyb20gaW50ZXJhY3RpdmUgbGlzdC1vbmx5IGxvY2stbXVsdGlwbGUgbG9jay1uZXZlciBsb2NrLW9uY2UgbWVyZ2Utb25seSBubyBuby1hbGxvdy1ub24tc2VsZnNpZ25lZC11aWQgbm8tYXJtb3Igbm8tYXNrLWNlcnQtZXhwaXJlIG5vLWFzay1zaWctZXhwaXJlIG5vLWF1dG8tY2hlY2stdHJ1c3RkYiBuby1iYXRjaCBuby1jb21tZW50IG5vLWRlZmF1bHQta2V5cmluZyBuby1kZWZhdWx0LXJlY2lwaWVudCBuby1lbmNyeXB0LXRvIG5vLWV4cGVuc2l2ZS10cnVzdC1jaGVja3Mgbm8tZXhwZXJ0IG5vLWZvci15b3VyLWV5ZXMtb25seSBuby1mb3JjZS12My1zaWdzIG5vLWZvcmNlLXY0LWNlcnRzIG5vLWdyZWV0aW5nIG5vLWxpdGVyYWwgbm8tbWRjLXdhcm5pbmcgbm8tb3B0aW9ucyBuby1wZXJtaXNzaW9uLXdhcm5pbmcgbm8tcGdwMiBuby1wZ3A2IG5vLXBncDcgbm8tcmFuZG9tLXNlZWQtZmlsZSBuby1zZWNtZW0td2FybmluZyBuby1zaG93LW5vdGF0aW9uIG5vLXNob3ctcGhvdG9zIG5vLXNob3ctcG9saWN5LXVybCBuby1zaWctY2FjaGUgbm8tc2lnLWNyZWF0ZS1jaGVjayBuby1zay1jb21tZW50cyBuby10dHkgbm8tdXRmOC1zdHJpbmdzIG5vLXZlcmJvc2Ugbm8tdmVyc2lvbiBub3QtZGFzaC1lc2NhcGVkIG9wZW5wZ3AgcGdwMiBwZ3A2IHBncDcgcHJlc2VydmUtcGVybWlzc2lvbnMgcXVpZXQgcmZjMTk5MSBzZXQtZmlsZXNpemUgc2hvdy1rZXlyaW5nIHNob3ctbm90YXRpb24gc2hvdy1waG90b3Mgc2hvdy1wb2xpY3ktdXJsIHNob3ctc2Vzc2lvbi1rZXkgc2ltcGxlLXNrLWNoZWNrc3VtIHNrLWNvbW1lbnRzIHNraXAtdmVyaWZ5IHRleHRtb2RlIHRocm93LWtleWlkIHRyeS1hbGwtc2VjcmV0cyB1c2UtYWdlbnQgdXNlLWVtYmVkZGVkLWZpbGVuYW1lIHV0Zjgtc3RyaW5ncyB2ZXJib3NlIHdpdGgtY29sb25zIHdpdGgtZmluZ2VycHJpbnQgd2l0aC1rZXktZGF0YSB5ZXMKKworIiBhcmd1bWVudHMgdG8gY29tbWFuZHMgYW5kIG9wdGlvbnMKK3N5biBtYXRjaCAgIGdwZ0FyZyAgICAgICAgICBjb250YWluZWQgZGlzcGxheSAiXFNcK1woXHNcK1xTXCtcKSoiIGNvbnRhaW5zPWdwZ0lECitzeW4gbWF0Y2ggICBncGdBcmdFcnJvciAgICAgY29udGFpbmVkIGRpc3BsYXkgIlxTXCtcKFxzXCtcU1wrXCkqIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9ncGdfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZ3BnX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGdwZ0NvbW1lbnQgICBDb21tZW50CisgIEhpTGluayBncGdUb2RvICAgICAgVG9kbworICBIaUxpbmsgZ3BnSUQgICAgICAgIE51bWJlcgorICBIaUxpbmsgZ3BnT3B0aW9uICAgIEtleXdvcmQKKyAgSGlMaW5rIGdwZ0NvbW1hbmQgICBFcnJvcgorICBIaUxpbmsgZ3BnQXJnRXJyb3IgIEVycm9yCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJncGciCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2dyYWRzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2dyYWRzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjg4NTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZ3JhZHMudmltCkBAIC0wLDAgKzEsODYgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglncmFkcyAoR3JBRFMgc2NyaXB0cykKKyIgTWFpbnRhaW5lcjoJU3RlZmFuIEZyb256ZWsgKHNmcm9uemVrIGF0IGdteCBkb3QgbmV0KQorIiBMYXN0IGNoYW5nZTogMTMgRmViIDIwMDQKKworIiBHcmlkIEFuYWx5c2lzIGFuZCBEaXNwbGF5IFN5c3RlbSAoR3JBRFMpOyBodHRwOi8vZ3JhZHMuaWdlcy5vcmcvZ3JhZHMKKyIgVGhpcyBzeW50YXggZmlsZSBkZWZpbmVzIGhpZ2hsaWdodGluZyBmb3Igb25seSB2ZXJ5IGZldyBmZWF0dXJlcyBvZgorIiB0aGUgR3JBRFMgc2NyaXB0aW5nIGxhbmd1YWdlLgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgR3JBRFMgaXMgZW50aXJlbHkgY2FzZS1pbnNlbnNpdGl2ZS4KK3N5biBjYXNlIGlnbm9yZQorCisiIFRoZSBrZXl3b3JkcworCitzeW4ga2V5d29yZCBncmFkc1N0YXRlbWVudAlpZiBlbHNlIGVuZGlmIGJyZWFrIGV4aXQgcmV0dXJuCitzeW4ga2V5d29yZCBncmFkc1N0YXRlbWVudAl3aGlsZSBlbmR3aGlsZSBzYXkgcHJvbXB0IHB1bGwgZnVuY3Rpb24KK3N5biBrZXl3b3JkIGdyYWRzU3RhdGVtZW50IHN1YndyZCBzdWJsaW4gc3Vic3RyIHJlYWQgd3JpdGUgY2xvc2UKKyIgU3RyaW5nCisKK3N5biByZWdpb24gZ3JhZHNTdHJpbmcJCXN0YXJ0PSsnKyBlbmQ9KycrCisKKyIgSW50ZWdlciBudW1iZXIKK3N5biBtYXRjaCAgZ3JhZHNOdW1iZXIJCSJbKy1dXD1cPFswLTldXCtcPiIKKworIiBPcGVyYXRvcgorCisic3luIGtleXdvcmQgZ3JhZHNPcGVyYXRvcgl8ICEgJSAmICE9ID49Cisic3luIG1hdGNoIGdyYWRzT3BlcmF0b3IJCSJbXlwuXW5vdFteYS16QS1aXSIKKworIiBWYXJpYWJsZXMKKworc3luIGtleXdvcmQgZ3JhZHNGaXhWYXJpYWJsZXMJbGF0IGxvbiBsZXYgcmVzdWx0IHJlYyByYworc3luIG1hdGNoIGdyYWRzZ2xvYmFsVmFyaWFibGVzCSJfW2EtekEtWl1bYS16QS1aMC05XSoiCitzeW4gbWF0Y2ggZ3JhZHNWYXJpYWJsZXMJCSJbYS16QS1aXVthLXpBLVowLTldKiIKK3N5biBtYXRjaCBncmFkc0NvbnN0CQkiI1tBLVpdW0EtWl9dKyIKKworIiBDb21tZW50cworCitzeW4gbWF0Y2ggZ3JhZHNDb21tZW50CSJcKi4qIgorCisiIFR5cGljYWwgVHlwb3MKKworIiBmb3IgQyBwcm9ncmFtbWVyczoKKyIgc3luIG1hdGNoIGdyYWRzVHlwb3MJIj09IgorIiBzeW4gbWF0Y2ggZ3JhZHNUeXBvcwkiIT0iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhncyBoaWdobGlnaHRpbmcreWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZ3Nfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorCWxldCBkaWRfZ3Nfc3luX2luaXRzID0gMQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKwljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgZ3JhZHNTdGF0ZW1lbnQJCVN0YXRlbWVudAorCisgIEhpTGluayBncmFkc1N0cmluZwkJU3RyaW5nCisgIEhpTGluayBncmFkc051bWJlcgkJTnVtYmVyCisKKyAgSGlMaW5rIGdyYWRzRml4VmFyaWFibGVzCVNwZWNpYWwKKyAgSGlMaW5rIGdyYWRzVmFyaWFibGVzCQlJZGVudGlmaWVyCisgIEhpTGluayBncmFkc2dsb2JhbFZhcmlhYmxlcwlTcGVjaWFsCisgIEhpTGluayBncmFkc0NvbnN0CQlTcGVjaWFsCisKKyAgSGlMaW5rIGdyYWRzQ2xhc3NNZXRob2RzCUZ1bmN0aW9uCisKKyAgSGlMaW5rIGdyYWRzT3BlcmF0b3IJCU9wZXJhdG9yCisgIEhpTGluayBncmFkc0NvbW1lbnQJCUNvbW1lbnQKKworICBIaUxpbmsgZ3JhZHNUeXBvcwkJRXJyb3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZ3JhZHMiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9ncm9mZi52aW0gYi9ydW50aW1lL3N5bnRheC9ncm9mZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkYzBjYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2dyb2ZmLnZpbQpAQCAtMCwwICsxLDEwIEBACisiIFZJTSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJZ3JvZmYKKyIgTWFpbnRhaW5lcjoJQWxlamFuZHJvIEzzcGV6LVZhbGVuY2lhIDxkcmFkdWxAeWFob28uY29tPgorIiBVUkw6CQlodHRwOi8vZHJhZHVsLnRyaXBvZC5jb20vdmltCisiIExhc3QgQ2hhbmdlOgkyMDAzLTA1LTA4LTEyOjQxOjEzIEdNVC01LgorCisiIFRoaXMgdXNlcyB0aGUgbnJvZmYudmltIHN5bnRheCBmaWxlLgorbGV0IGI6bWFpbl9zeW50YXggPSAibnJvZmYiCitsZXQgYjpucm9mZl9pc19ncm9mZiA9IDEKK3J1bnRpbWUhIHN5bnRheC9ucm9mZi52aW0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2dydWIudmltIGIvcnVudGltZS9zeW50YXgvZ3J1Yi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3YThkOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2dydWIudmltCkBAIC0wLDAgKzEsNzcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkgICAgR1JVQiBDb25maWd1cmF0aW9uIEZpbGUKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL3N5bnRheC9wY3AvZ3J1Yi8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNS0wNgorIiBhcmNoLXRhZzoJICAgIDdhNTZkZGQwLWU1NTEtNDRiYy1iOGMwLTIzNWZlZGJkZjNjMAorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBjb21tZW50cworc3luIHJlZ2lvbiAgZ3J1YkNvbW1lbnQJICAgIGRpc3BsYXkgb25lbGluZSBzdGFydD0iXiMiIGVuZD0iJCIgY29udGFpbnM9Z3J1YlRvZG8KKworIiB0b2RvCitzeW4ga2V5d29yZCBncnViVG9kbwkgICAgY29udGFpbmVkIFRPRE8gRklYTUUgWFhYIE5PVEUKKworIiBkZXZpY2VzCitzeW4gbWF0Y2ggICBncnViRGV2aWNlCSAgICBkaXNwbGF5ICIoXChbZmhdZFxkXHxcZFwrXHwweFx4XCtcKVwoLFxkXCtcKVw9XCgsXGxcKVw9KSIKKworIiBibG9jayBsaXN0cworc3luIG1hdGNoICAgZ3J1YkJsb2NrCSAgICBkaXNwbGF5ICJcKFxkXCtcKVw9K1xkXCtcKCxcKFxkXCtcKVw9K1xkXCtcKSoiCisKKyIgbnVtYmVycworc3luIG1hdGNoICAgZ3J1Yk51bWJlcnMJICAgIGRpc3BsYXkgIitcPVw8XGRcK1x8MHhceFwrXD4iCisKK3N5biBtYXRjaCAgZ3J1YkJlZ2luCSAgICBkaXNwbGF5ICJeIiBuZXh0Z3JvdXA9Z3J1YkNvbW1hbmQsZ3J1YkNvbW1lbnQgc2tpcHdoaXRlCisKKyIgbWVudSBjb21tYW5kcworc3luIGtleXdvcmQgZ3J1YkNvbW1hbmQJICAgIGNvbnRhaW5lZCBkZWZhdWx0IGZhbGxiYWNrIGhpZGRlbm1lbnUgdGltZW91dCB0aXRsZQorCisiIGdlbmVyYWwgY29tbWFuZHMKK3N5biBrZXl3b3JkIGdydWJDb21tYW5kCSAgICBjb250YWluZWQgYm9vdHAgY29sb3IgZGV2aWNlIGRoY3AgaGlkZSBpZmNvbmZpZyBwYWdlcgorc3luIGtleXdvcmQgZ3J1YkNvbW1hbmQJICAgIGNvbnRhaW5lZCBwYXJ0bmV3IHBhcnR0eXBlIHBhc3N3b3JkIHJhcnAgc2VyaWFsIHNldGtleQorc3luIGtleXdvcmQgZ3J1YkNvbW1hbmQJICAgIGNvbnRhaW5lZCB0ZXJtaW5hbCB0ZnRwc2VydmVyIHVuaGlkZSBibG9ja2xpc3QgYm9vdCBjYXQKK3N5biBrZXl3b3JkIGdydWJDb21tYW5kCSAgICBjb250YWluZWQgY2hhaW5sb2FkZXIgY21wIGNvbmZpZ2ZpbGUgZGVidWcgZGlzcGxheWFwbQorc3luIGtleXdvcmQgZ3J1YkNvbW1hbmQJICAgIGNvbnRhaW5lZCBkaXNwbGF5bWVtIGVtYmVkIGZpbmQgZnN0ZXN0IGdlb21ldHJ5IGhhbHQgaGVscAorc3luIGtleXdvcmQgZ3J1YkNvbW1hbmQJICAgIGNvbnRhaW5lZCBpbXBzcHJvYmUgaW5pdHJkIGluc3RhbGwgaW9wcm9iZSBrZXJuZWwgbG9jaworc3luIGtleXdvcmQgZ3J1YkNvbW1hbmQJICAgIGNvbnRhaW5lZCBtYWtlYWN0aXZlIG1hcCBtZDVjcnlwdCBtb2R1bGUgbW9kdWxlbm91bnppcCBwYXVzZQorc3luIGtleXdvcmQgZ3J1YkNvbW1hbmQJICAgIGNvbnRhaW5lZCBxdWl0IHJlYm9vdCByZWFkIHJvb3Qgcm9vdG5vdmVyaWZ5IHNhdmVkZWZhdWx0CitzeW4ga2V5d29yZCBncnViQ29tbWFuZAkgICAgY29udGFpbmVkIHNldHVwIHRlc3Rsb2FkIHRlc3R2YmUgdXBwZXJtZW0gdmJlcHJvYmUKKworIiBjb2xvcnMKK3N5biBtYXRjaCAgIGdydWJDb2xvcgkgICAgIlwoYmxpbmstXClcPVwoYmxhY2tcfGJsdWVcfGdyZWVuXHxjeWFuXHxyZWRcfG1hZ2VudGFcfGJyb3duXHx5ZWxsb3dcfHdoaXRlXCkiCitzeW4gbWF0Y2ggICBncnViQ29sb3IJICAgICJcPFwoYmxpbmstXClcPWxpZ2h0LVwoZ3JheVx8Ymx1ZVx8Z3JlZW5cfGN5YW5cfHJlZFx8bWFnZW50YVwpIgorc3luIG1hdGNoICAgZ3J1YkNvbG9yCSAgICAiXDxcKGJsaW5rLVwpXD1kYXJrLWdyYXkiCisKKyIgc3BlY2lhbHMKK3N5biBrZXl3b3JkIGdydWJTcGVjaWFsCSAgICBzYXZlZAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9ncnViX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2dydWJfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgZ3J1YkNvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgZ3J1YlRvZG8JVG9kbworICBIaUxpbmsgZ3J1Yk51bWJlcnMJTnVtYmVyCisgIEhpTGluayBncnViRGV2aWNlCUlkZW50aWZpZXIKKyAgSGlMaW5rIGdydWJCbG9jawlJZGVudGlmaWVyCisgIEhpTGluayBncnViQ29tbWFuZAlLZXl3b3JkCisgIEhpTGluayBncnViQ29sb3IJSWRlbnRpZmllcgorICBIaUxpbmsgZ3J1YlNwZWNpYWwJU3BlY2lhbAorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZ3J1YiIKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZ3NwLnZpbSBiL3J1bnRpbWUvc3ludGF4L2dzcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3NjZjNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2dzcC52aW0KQEAgLTAsMCArMSw1OSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUdTUCAtIEdOVSBTZXJ2ZXIgUGFnZXMgKHYuIDAuODYpCisiIENyZWF0ZWQgQnk6CU5hdGhhbmllbCBIYXJ3YXJkIG5oYXJ3YXJkQHlhaG9vLmNvbQorIiBMYXN0IENoYW5nZWQ6IERlYy4gMTIsIDIwMDAKKyIgRmlsZW5hbWVzOiAgICAqLmdzcAorIiBVUkw6CQlodHRwOi8vd3d3LmNvbnN0cnVjdGljb24uY29tL35uaGFyd2FyZC92aW0vc3ludGF4L2dzcC52aW0KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitpZiAhZXhpc3RzKCJtYWluX3N5bnRheCIpCisgIGxldCBtYWluX3N5bnRheCA9ICdnc3AnCitlbmRpZgorCisiIFNvdXJjZSBIVE1MIHN5bnRheAoraWYgdmVyc2lvbiA8IDYwMAorICBzb3VyY2UgPHNmaWxlPjpwOmgvaHRtbC52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2h0bWwudmltCitlbmRpZgordW5sZXQgYjpjdXJyZW50X3N5bnRheAorCitzeW4gY2FzZSBtYXRjaAorCisiIEluY2x1ZGUgSmF2YSBzeW50YXgKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3luIGluY2x1ZGUgQGdzcEphdmEgPHNmaWxlPjpwOmgvamF2YS52aW0KK2Vsc2UKKyAgc3luIGluY2x1ZGUgQGdzcEphdmEgc3ludGF4L2phdmEudmltCitlbmRpZgorCisiIEFkZCA8amF2YT4gYXMgYW4gSFRNTCB0YWcgbmFtZSBhbG9uZyB3aXRoIGl0cyBhcmdzCitzeW4ga2V5d29yZCBodG1sVGFnTmFtZSBjb250YWluZWQgamF2YQorc3luIGtleXdvcmQgaHRtbEFyZyAgICAgY29udGFpbmVkIHR5cGUgZmlsZSBwYWdlCisKKyIgUmVkZWZpbmUgc29tZSBIVE1MIHRoaW5ncyB0byBpbmNsdWRlIChhbmQgaGlnaGxpZ2h0KSBnc3BJbkxpbmUgY29kZSBpbgorIiBwbGFjZXMgd2hlcmUgaXQncyBsaWtlbHkgdG8gYmUgZm91bmQKK3N5biByZWdpb24gaHRtbFN0cmluZyBjb250YWluZWQgc3RhcnQ9KyIrIGVuZD0rIisgY29udGFpbnM9aHRtbFNwZWNpYWxDaGFyLGphdmFTY3JpcHRFeHByZXNzaW9uLEBodG1sUHJlcHJvYyxnc3BJbkxpbmUKK3N5biByZWdpb24gaHRtbFN0cmluZyBjb250YWluZWQgc3RhcnQ9KycrIGVuZD0rJysgY29udGFpbnM9aHRtbFNwZWNpYWxDaGFyLGphdmFTY3JpcHRFeHByZXNzaW9uLEBodG1sUHJlcHJvYyxnc3BJbkxpbmUKK3N5biBtYXRjaCAgaHRtbFZhbHVlICBjb250YWluZWQgIj1bXHQgXSpbXiciIFx0Pl1bXiBcdD5dKiJocz1zKzEgY29udGFpbnM9amF2YVNjcmlwdEV4cHJlc3Npb24sQGh0bWxQcmVwcm9jLGdzcEluTGluZQorc3luIHJlZ2lvbiBodG1sRW5kVGFnCQlzdGFydD0rPC8rICAgIGVuZD0rPisgY29udGFpbnM9aHRtbFRhZ04saHRtbFRhZ0Vycm9yLGdzcEluTGluZQorc3luIHJlZ2lvbiBodG1sVGFnCQlzdGFydD0rPFteL10rIGVuZD0rPisgY29udGFpbnM9aHRtbFRhZ04saHRtbFN0cmluZyxodG1sQXJnLGh0bWxWYWx1ZSxodG1sVGFnRXJyb3IsaHRtbEV2ZW50LGh0bWxDc3NEZWZpbml0aW9uLEBodG1sUHJlcHJvYyxAaHRtbEFyZ0NsdXN0ZXIsZ3NwSW5MaW5lCitzeW4gbWF0Y2ggIGh0bWxUYWdOICAgY29udGFpbmVkICs8XHMqWy1hLXpBLVowLTldXCsraHM9cysxIGNvbnRhaW5zPWh0bWxUYWdOYW1lLGh0bWxTcGVjaWFsVGFnTmFtZSxAaHRtbFRhZ05hbWVDbHVzdGVyLGdzcEluTGluZQorc3luIG1hdGNoICBodG1sVGFnTiAgIGNvbnRhaW5lZCArPC9ccypbLWEtekEtWjAtOV1cKytocz1zKzIgY29udGFpbnM9aHRtbFRhZ05hbWUsaHRtbFNwZWNpYWxUYWdOYW1lLEBodG1sVGFnTmFtZUNsdXN0ZXIsZ3NwSW5MaW5lCisKKyIgRGVmaW5lIHRoZSBHU1AgamF2YSBjb2RlIGJsb2Nrcworc3luIHJlZ2lvbiAgZ3NwSmF2YUJsb2NrIHN0YXJ0PSI8amF2YVw+W14+XSpcPiIgZW5kPSI8L2phdmE+Im1lPWUtNyBjb250YWlucz1AZ3NwSmF2YSxodG1sVGFnCitzeW4gcmVnaW9uICBnc3BJbkxpbmUgICAgbWF0Y2hncm91cD1odG1sRXJyb3Igc3RhcnQ9ImAiIGVuZD0iYCIgY29udGFpbnM9QGdzcEphdmEKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZ3NwIgorCitpZiBtYWluX3N5bnRheCA9PSAnZ3NwJworICB1bmxldCBtYWluX3N5bnRheAorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2d0a3JjLnZpbSBiL3J1bnRpbWUvc3ludGF4L2d0a3JjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzA1NGEyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvZ3RrcmMudmltCkBAIC0wLDAgKzEsMTQyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBUaGlzIGlzIGEgR0VORVJBVEVEIEZJTEUuIFBsZWFzZSBhbHdheXMgcmVmZXIgdG8gc291cmNlIGZpbGUgYXQgdGhlIFVSSSBiZWxvdy4KKyIgTGFuZ3VhZ2U6IEd0aysgdGhlbWUgZmlsZXMgYGd0a3JjJworIiBNYWludGFpbmVyOiBEYXZpZCBOZVx2e2N9YXMgKFlldGkpIDx5ZXRpQHBoeXNpY3MubXVuaS5jej4KKyIgTGFzdCBDaGFuZ2U6IDIwMDItMTAtMzEKKyIgVVJMOiBodHRwOi8vdHJpZmljLmF0aC5jeC9GdHAvdmltL3N5bnRheC9ndGtyYy52aW0KKworIiBTZXR1cAoraWYgdmVyc2lvbiA+PSA2MDAKKwlpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCQlmaW5pc2gKKwllbmRpZgorZWxzZQorCXN5bnRheCBjbGVhcgorZW5kaWYKKworaWYgdmVyc2lvbiA+PSA2MDAKKwlzZXRsb2NhbCBpc2tleXdvcmQ9XywtLGEteixBLVosNDgtNTcKK2Vsc2UKKwlzZXQgaXNrZXl3b3JkPV8sLSxhLXosQS1aLDQ4LTU3CitlbmRpZgorCitzeW4gY2FzZSBtYXRjaAorCisiIEJhc2UgY29uc3RydWN0cworc3luIG1hdGNoIGd0a3JjQ29tbWVudCAiIy4qJCIgY29udGFpbnM9Z3RrcmNGaXhtZQorc3luIGtleXdvcmQgZ3RrcmNGaXhtZSBGSVhNRSBUT0RPIFhYWCBOT1QgY29udGFpbmVkCitzeW4gcmVnaW9uIGd0a3JjQUNTdHJpbmcgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBvbmVsaW5lIGNvbnRhaW5zPWd0a3JjV1BhdGhTcGVjaWFsLGd0a3JjQ2xhc3NOYW1lLGd0a3JjQ2xhc3NOYW1lR25vbWUgY29udGFpbmVkCitzeW4gcmVnaW9uIGd0a3JjQlN0cmluZyBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIG9uZWxpbmUgY29udGFpbnM9Z3RrcmNLZXlNb2QgY29udGFpbmVkCitzeW4gcmVnaW9uIGd0a3JjU3RyaW5nIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9Z3RrcmNTdG9ja05hbWUsZ3RrcmNQYXRoU3BlY2lhbCxndGtyY1JHQkNvbG9yCitzeW4gbWF0Y2ggZ3RrcmNQYXRoU3BlY2lhbCAiPHBhcmVudD4iIGNvbnRhaW5lZAorc3luIG1hdGNoIGd0a3JjV1BhdGhTcGVjaWFsICJbKj8uXSIgY29udGFpbmVkCitzeW4gbWF0Y2ggZ3RrcmNOdW1iZXIgIl5cKFxkXCtcKVw9XC5cPVxkXCsiCitzeW4gbWF0Y2ggZ3RrcmNOdW1iZXIgIlxXXChcZFwrXClcPVwuXD1cZFwrImxjPTEKK3N5biBtYXRjaCBndGtyY1JHQkNvbG9yICIjXChceFx7MTJ9XHxceFx7OX1cfFx4XHs2fVx8XHhcezN9XCkiIGNvbnRhaW5lZAorc3luIGNsdXN0ZXIgZ3RrcmNQUklWQVRFIGFkZD1ndGtyY0ZpeG1lLGd0a3JjUGF0aFNwZWNpYWwsZ3RrcmNXUGF0aFNwZWNpYWwsZ3RrcmNSR0JDb2xvcixndGtyY0FDU3RyaW5nCisKKyIgS2V5d29yZHMKK3N5biBrZXl3b3JkIGd0a3JjSW5jbHVkZSBpbmNsdWRlCitzeW4ga2V5d29yZCBndGtyY1BhdGhTZXQgbW9kdWxlX3BhdGggcGl4bWFwX3BhdGgKK3N5biBrZXl3b3JkIGd0a3JjVG9wIGJpbmRpbmcgc3R5bGUKK3N5biBrZXl3b3JkIGd0a3JjVG9wIHdpZGdldCB3aWRnZXRfY2xhc3MgbmV4dGdyb3VwPWd0a3JjQUNTdHJpbmcgc2tpcHdoaXRlCitzeW4ga2V5d29yZCBndGtyY1RvcCBjbGFzcyBuZXh0Z3JvdXA9Z3RrcmNBQ1N0cmluZyBza2lwd2hpdGUKK3N5biBrZXl3b3JkIGd0a3JjQmluZCBiaW5kIG5leHRncm91cD1ndGtyY0JTdHJpbmcgc2tpcHdoaXRlCitzeW4ga2V5d29yZCBndGtyY1N0YXRlTmFtZSBOT1JNQUwgSU5TRU5TSVRJVkUgUFJFTElHSFQgQUNUSVZFIFNFTEVDVEVECitzeW4ga2V5d29yZCBndGtyY1ByaW9yaXR5TmFtZSBISUdIRVNUIFJDIEFQUExJQ0FUSU9OIEdUSyBMT1dFU1QKK3N5biBrZXl3b3JkIGd0a3JjUHJpb3JpdHlOYW1lIGhpZ2hlc3QgcmMgYXBwbGljYXRpb24gZ3RrIGxvd2VzdAorc3luIGtleXdvcmQgZ3RrcmNUZXh0RGlyTmFtZSBMVFIgUlRMCitzeW4ga2V5d29yZCBndGtyY1N0eWxlS2V5d29yZCBmZyBiZyBmZ19waXhtYXAgYmdfcGl4bWFwIGJnX3RleHQgYmFzZSBmb250IGZvbnRfbmFtZSBmb250c2V0IHN0b2NrIHRleHQKK3N5biBtYXRjaCBndGtyY0tleU1vZCAiPFwoYWx0XHxjdHJsXHxjb250cm9sXHxtb2RbMS01XVx8cmVsZWFzZVx8c2hmdFx8c2hpZnRcKT4iIGNvbnRhaW5lZAorc3luIGNsdXN0ZXIgZ3RrcmNQUklWQVRFIGFkZD1ndGtyY0tleU1vZAorCisiIEVudW1zIGFuZCBlbmdpbmUgd29yZHMKK3N5biBrZXl3b3JkIGd0a3JjS2V5d29yZCBlbmdpbmUgaW1hZ2UKK3N5biBrZXl3b3JkIGd0a3JjSW1hZ2UgYXJyb3dfZGlyZWN0aW9uIGJvcmRlciBkZXRhaWwgZmlsZSBnYXBfYm9yZGVyIGdhcF9lbmRfYm9yZGVyIGdhcF9lbmRfZmlsZSBnYXBfZmlsZSBnYXBfc2lkZSBnYXBfc2lkZSBnYXBfc3RhcnRfYm9yZGVyIGdhcF9zdGFydF9maWxlIG9yaWVudGF0aW9uIG92ZXJsYXlfYm9yZGVyIG92ZXJsYXlfZmlsZSBvdmVybGF5X3N0cmV0Y2ggcmVjb2xvcmFibGUgc2hhZG93IHN0YXRlIHN0cmV0Y2ggdGhpY2tuZXNzCitzeW4ga2V5d29yZCBndGtyY0NvbnN0YW50IFRSVUUgRkFMU0UgTk9ORSBJTiBPVVQgTEVGVCBSSUdIVCBUT1AgQk9UVE9NIFVQIERPV04gVkVSVElDQUwgSE9SSVpPTlRBTCBFVENIRURfSU4gRVRDSEVEX09VVAorc3luIGtleXdvcmQgZ3RrcmNGdW5jdGlvbiBmdW5jdGlvbiBuZXh0Z3JvdXA9Z3RrcmNGdW5jdGlvbkVxIHNraXB3aGl0ZQorc3luIG1hdGNoIGd0a3JjRnVuY3Rpb25FcSAiPSIgbmV4dGdyb3VwPWd0a3JjRnVuY3Rpb25OYW1lIGNvbnRhaW5lZCBza2lwd2hpdGUKK3N5biBrZXl3b3JkIGd0a3JjRnVuY3Rpb25OYW1lIEFSUk9XIEJPWCBCT1hfR0FQIENIRUNLIENST1NTIERJQU1PTkQgRVhURU5TSU9OIEZMQVRfQk9YIEZPQ1VTIEhBTkRMRSBITElORSBPUFRJT04gT1ZBTCBQT0xZR09OIFJBTVAgU0hBRE9XIFNIQURPV19HQVAgU0xJREVSIFNUUklORyBUQUIgVkxJTkUgY29udGFpbmVkCitzeW4gY2x1c3RlciBndGtyY1BSSVZBVEUgYWRkPWd0a3JjRnVuY3Rpb25OYW1lLGd0a3JjRnVuY3Rpb25FcQorCisiIENsYXNzIG5hbWVzCitzeW4ga2V5d29yZCBndGtyY0NsYXNzTmFtZSBHdGtBY2NlbExhYmVsIEd0a0FkanVzdG1lbnQgR3RrQWxpZ25tZW50IEd0a0Fycm93IEd0a0FzcGVjdEZyYW1lIEd0a0JpbiBHdGtCb3ggR3RrQnV0dG9uIEd0a0J1dHRvbkJveCBHdGtDTGlzdCBHdGtDVHJlZSBHdGtDYWxlbmRhciBHdGtDaGVja0J1dHRvbiBHdGtDaGVja01lbnVJdGVtIEd0a0NvbG9yU2VsZWN0aW9uIEd0a0NvbG9yU2VsZWN0aW9uRGlhbG9nIEd0a0NvbWJvIEd0a0NvbnRhaW5lciBHdGtDdXJ2ZSBHdGtEYXRhIEd0a0RpYWxvZyBHdGtEcmF3aW5nQXJlYSBHdGtFZGl0YWJsZSBHdGtFbnRyeSBHdGtFdmVudEJveCBHdGtGaWxlU2VsZWN0aW9uIEd0a0ZpeGVkIEd0a0ZvbnRTZWxlY3Rpb24gR3RrRm9udFNlbGVjdGlvbkRpYWxvZyBHdGtGcmFtZSBHdGtHYW1tYUN1cnZlIEd0a0hCb3ggR3RrSEJ1dHRvbkJveCBHdGtIUGFuZWQgR3RrSFJ1bGVyIEd0a0hTY2FsZSBHdGtIU2Nyb2xsYmFyIEd0a0hTZXBhcmF0b3IgR3RrSGFuZGxlQm94IEd0a0ltYWdlIEd0a0ltYWdlTWVudUl0ZW0gR3RrSW5wdXREaWFsb2cgR3RrSW52aXNpYmxlIEd0a0l0ZW0gR3RrSXRlbUZhY3RvcnkgR3RrTGFiZWwgR3RrTGF5b3V0IEd0a0xpc3QgR3RrTGlzdEl0ZW0gR3RrTWVudSBHdGtNZW51QmFyIEd0a01lbnVJdGVtIEd0a01lbnVTaGVsbCBHdGtNZXNzYWdlRGlhbG9nIEd0a01pc2MgR3RrTm90ZWJvb2sgR3RrT2JqZWN0IEd0a09wdGlvbk1lbnUgR3RrUGFja2VyIEd0a1BhbmVkIEd0a1BpeG1hcCBHdGtQbHVnIEd0a1ByZXZpZXcgR3RrUHJvZ3Jlc3MgR3RrUHJvZ3Jlc3NCYXIgR3RrUmFkaW9CdXR0b24gR3RrUmFkaW9NZW51SXRlbSBHdGtSYW5nZSBHdGtSdWxlciBHdGtTY2FsZSBHdGtTY3JvbGxiYXIgR3RrU2Nyb2xsZWRXaW5kb3cgR3RrU2VwYXJhdG9yTWVudUl0ZW0gR3RrU29ja2V0IEd0a1NwaW5CdXR0b24gR3RrU3RhdHVzYmFyIEd0a1RhYmxlIEd0a1RlYXJvZmZNZW51SXRlbSBHdGtUZXh0IEd0a1RleHRCdWZmZXIgR3RrVGV4dE1hcmsgR3RrVGV4dFRhZyBHdGtUZXh0VmlldyBHdGtUaXBzUXVlcnkgR3RrVG9nZ2xlQnV0dG9uIEd0a1Rvb2xiYXIgR3RrVG9vbHRpcHMgR3RrVHJlZSBHdGtUcmVlVmlldyBHdGtUcmVlSXRlbSBHdGtWQm94IEd0a1ZCdXR0b25Cb3ggR3RrVlBhbmVkIEd0a1ZSdWxlciBHdGtWU2NhbGUgR3RrVlNjcm9sbGJhciBHdGtWU2VwYXJhdG9yIEd0a1ZpZXdwb3J0IEd0a1dpZGdldCBHdGtXaW5kb3cgR3RrV2luZG93R3JvdXAgY29udGFpbmVkCitzeW4ga2V5d29yZCBndGtyY0NsYXNzTmFtZSBBY2NlbExhYmVsIEFkanVzdG1lbnQgQWxpZ25tZW50IEFycm93IEFzcGVjdEZyYW1lIEJpbiBCb3ggQnV0dG9uIEJ1dHRvbkJveCBDTGlzdCBDVHJlZSBDYWxlbmRhciBDaGVja0J1dHRvbiBDaGVja01lbnVJdGVtIENvbG9yU2VsZWN0aW9uIENvbG9yU2VsZWN0aW9uRGlhbG9nIENvbWJvIENvbnRhaW5lciBDdXJ2ZSBEYXRhIERpYWxvZyBEcmF3aW5nQXJlYSBFZGl0YWJsZSBFbnRyeSBFdmVudEJveCBGaWxlU2VsZWN0aW9uIEZpeGVkIEZvbnRTZWxlY3Rpb24gRm9udFNlbGVjdGlvbkRpYWxvZyBGcmFtZSBHYW1tYUN1cnZlIEhCb3ggSEJ1dHRvbkJveCBIUGFuZWQgSFJ1bGVyIEhTY2FsZSBIU2Nyb2xsYmFyIEhTZXBhcmF0b3IgSGFuZGxlQm94IEltYWdlIEltYWdlTWVudUl0ZW0gSW5wdXREaWFsb2cgSW52aXNpYmxlIEl0ZW0gSXRlbUZhY3RvcnkgTGFiZWwgTGF5b3V0IExpc3QgTGlzdEl0ZW0gTWVudSBNZW51QmFyIE1lbnVJdGVtIE1lbnVTaGVsbCBNZXNzYWdlRGlhbG9nIE1pc2MgTm90ZWJvb2sgT2JqZWN0IE9wdGlvbk1lbnUgUGFja2VyIFBhbmVkIFBpeG1hcCBQbHVnIFByZXZpZXcgUHJvZ3Jlc3MgUHJvZ3Jlc3NCYXIgUmFkaW9CdXR0b24gUmFkaW9NZW51SXRlbSBSYW5nZSBSdWxlciBTY2FsZSBTY3JvbGxiYXIgU2Nyb2xsZWRXaW5kb3cgU2VwYXJhdG9yTWVudUl0ZW0gU29ja2V0IFNwaW5CdXR0b24gU3RhdHVzYmFyIFRhYmxlIFRlYXJvZmZNZW51SXRlbSBUZXh0IFRleHRCdWZmZXIgVGV4dE1hcmsgVGV4dFRhZyBUZXh0VmlldyBUaXBzUXVlcnkgVG9nZ2xlQnV0dG9uIFRvb2xiYXIgVG9vbHRpcHMgVHJlZSBUcmVlVmlldyBUcmVlSXRlbSBWQm94IFZCdXR0b25Cb3ggVlBhbmVkIFZSdWxlciBWU2NhbGUgVlNjcm9sbGJhciBWU2VwYXJhdG9yIFZpZXdwb3J0IFdpZGdldCBXaW5kb3cgV2luZG93R3JvdXAgY29udGFpbmVkCitzeW4ga2V5d29yZCBndGtyY0NsYXNzTmFtZUdub21lIEdub21lQWJvdXQgR25vbWVBbmltYXRvciBHbm9tZUFwcCBHbm9tZUFwcEJhciBHbm9tZUNhbGN1bGF0b3IgR25vbWVDYW52YXMgR25vbWVDYW52YXNFbGxpcHNlIEdub21lQ2FudmFzR3JvdXAgR25vbWVDYW52YXNJbWFnZSBHbm9tZUNhbnZhc0l0ZW0gR25vbWVDYW52YXNMaW5lIEdub21lQ2FudmFzUG9seWdvbiBHbm9tZUNhbnZhc1JFIEdub21lQ2FudmFzUmVjdCBHbm9tZUNhbnZhc1RleHQgR25vbWVDYW52YXNXaWRnZXQgR25vbWVDbGllbnQgR25vbWVDb2xvclBpY2tlciBHbm9tZURFbnRyeUVkaXQgR25vbWVEYXRlRWRpdCBHbm9tZURpYWxvZyBHbm9tZURvY2sgR25vbWVEb2NrQmFuZCBHbm9tZURvY2tJdGVtIEdub21lRG9ja0xheW91dCBHbm9tZURydWlkIEdub21lRHJ1aWRQYWdlIEdub21lRHJ1aWRQYWdlRmluaXNoIEdub21lRHJ1aWRQYWdlU3RhbmRhcmQgR25vbWVEcnVpZFBhZ2VTdGFydCBHbm9tZUVudHJ5IEdub21lRmlsZUVudHJ5IEdub21lRm9udFBpY2tlciBHbm9tZUZvbnRTZWxlY3RvciBHbm9tZUhSZWYgR25vbWVJY29uRW50cnkgR25vbWVJY29uTGlzdCBHbm9tZUljb25TZWxlY3Rpb24gR25vbWVJY29uVGV4dEl0ZW0gR25vbWVMZXNzIEdub21lTURJIEdub21lTURJQ2hpbGQgR25vbWVNRElHZW5lcmljQ2hpbGQgR25vbWVNZXNzYWdlQm94IEdub21lTnVtYmVyRW50cnkgR25vbWVQYXBlclNlbGVjdG9yIEdub21lUGl4bWFwIEdub21lUGl4bWFwRW50cnkgR25vbWVQcm9jQmFyIEdub21lUHJvcGVydHlCb3ggR25vbWVTY29yZXMgR25vbWVTcGVsbCBHbm9tZVN0b2NrIEd0a0Nsb2NrIEd0a0RpYWwgR3RrUGl4bWFwTWVudUl0ZW0gR3RrVGVkIGNvbnRhaW5lZAorc3luIGNsdXN0ZXIgZ3RrcmNQUklWQVRFIGFkZD1ndGtyY0NsYXNzTmFtZSxndGtyY0NsYXNzTmFtZUdub21lCisKKyIgU3RvY2sgaXRlbSBuYW1lcworc3luIGtleXdvcmQgZ3RrcmNTdG9ja05hbWUgZ3RrLWFkZCBndGstYXBwbHkgZ3RrLWJvbGQgZ3RrLWNhbmNlbCBndGstY2Ryb20gZ3RrLWNsZWFyIGd0ay1jbG9zZSBndGstY29udmVydCBndGstY29weSBndGstY3V0IGd0ay1kZWxldGUgZ3RrLWRpYWxvZy1lcnJvciBndGstZGlhbG9nLWluZm8gZ3RrLWRpYWxvZy1xdWVzdGlvbiBndGstZGlhbG9nLXdhcm5pbmcgZ3RrLWRuZCBndGstZG5kLW11bHRpcGxlIGd0ay1leGVjdXRlIGd0ay1maW5kIGd0ay1maW5kLWFuZC1yZXBsYWNlIGd0ay1mbG9wcHkgZ3RrLWdvdG8tYm90dG9tIGd0ay1nb3RvLWZpcnN0IGd0ay1nb3RvLWxhc3QgZ3RrLWdvdG8tdG9wIGd0ay1nby1iYWNrIGd0ay1nby1kb3duIGd0ay1nby1mb3J3YXJkIGd0ay1nby11cCBndGstaGVscCBndGstaG9tZSBndGstaW5kZXggZ3RrLWl0YWxpYyBndGstanVtcC10byBndGstanVzdGlmeS1jZW50ZXIgZ3RrLWp1c3RpZnktZmlsbCBndGstanVzdGlmeS1sZWZ0IGd0ay1qdXN0aWZ5LXJpZ2h0IGd0ay1taXNzaW5nLWltYWdlIGd0ay1uZXcgZ3RrLW5vIGd0ay1vayBndGstb3BlbiBndGstcGFzdGUgZ3RrLXByZWZlcmVuY2VzIGd0ay1wcmludCBndGstcHJpbnQtcHJldmlldyBndGstcHJvcGVydGllcyBndGstcXVpdCBndGstcmVkbyBndGstcmVmcmVzaCBndGstcmVtb3ZlIGd0ay1yZXZlcnQtdG8tc2F2ZWQgZ3RrLXNhdmUgZ3RrLXNhdmUtYXMgZ3RrLXNlbGVjdC1jb2xvciBndGstc2VsZWN0LWZvbnQgZ3RrLXNvcnQtYXNjZW5kaW5nIGd0ay1zb3J0LWRlc2NlbmRpbmcgZ3RrLXNwZWxsLWNoZWNrIGd0ay1zdG9wIGd0ay1zdHJpa2V0aHJvdWdoIGd0ay11bmRlbGV0ZSBndGstdW5kZXJsaW5lIGd0ay11bmRvIGd0ay15ZXMgZ3RrLXpvb20tMTAwIGd0ay16b29tLWZpdCBndGstem9vbS1pbiBndGstem9vbS1vdXQgY29udGFpbmVkCitzeW4gY2x1c3RlciBndGtyY1BSSVZBVEUgYWRkPWd0a3JjU3RvY2tOYW1lCisKKyIgR3RrIFNldHRpbmdzCitzeW4ga2V5d29yZCBndGtyY1NldHRpbmdzTmFtZSBndGstZG91YmxlLWNsaWNrLXRpbWUgZ3RrLWN1cnNvci1ibGluayBndGstY3Vyc29yLWJsaW5rLXRpbWUgZ3RrLXNwbGl0LWN1cnNvciBndGstdGhlbWUtbmFtZSBndGsta2V5LXRoZW1lLW5hbWUgZ3RrLW1lbnUtYmFyLWFjY2VsIGd0ay1kbmQtZHJhZy10aHJlc2hvbGQgZ3RrLWZvbnQtbmFtZSBndGstY29sb3ItcGFsZXR0ZSBndGstZW50cnktc2VsZWN0LW9uLWZvY3VzIGd0ay1jYW4tY2hhbmdlLWFjY2VscyBndGstdG9vbGJhci1zdHlsZSBndGstdG9vbGJhci1pY29uLXNpemUKK3N5biBjbHVzdGVyIGd0a3JjUFJJVkFURSBhZGQ9Z3RrcmNTZXR0aW5nc05hbWUKKworIiBDYXRjaCBlcnJvcnMgY2F1c2VkIGJ5IHdyb25nIHBhcmVudGhlc2l6YXRpb24KK3N5biByZWdpb24gZ3RrcmNQYXJlbiBzdGFydD0nKCcgZW5kPScpJyB0cmFuc3BhcmVudCBjb250YWlucz1BTExCVVQsZ3RrcmNQYXJlbkVycm9yLEBndGtyY1BSSVZBVEUKK3N5biBtYXRjaCBndGtyY1BhcmVuRXJyb3IgIikiCitzeW4gcmVnaW9uIGd0a3JjQnJhY2Ugc3RhcnQ9J3snIGVuZD0nfScgdHJhbnNwYXJlbnQgY29udGFpbnM9QUxMQlVULGd0a3JjQnJhY2VFcnJvcixAZ3RrcmNQUklWQVRFCitzeW4gbWF0Y2ggZ3RrcmNCcmFjZUVycm9yICJ9Igorc3luIHJlZ2lvbiBndGtyY0JyYWNrZXQgc3RhcnQ9J1xbJyBlbmQ9J10nIHRyYW5zcGFyZW50IGNvbnRhaW5zPUFMTEJVVCxndGtyY0JyYWNrZXRFcnJvcixAZ3RrcmNQUklWQVRFCitzeW4gbWF0Y2ggZ3RrcmNCcmFja2V0RXJyb3IgIl0iCisKKyIgU3luY2hyb25pemF0aW9uCitzeW4gc3luYyBtaW5saW5lcz01MAorc3luIHN5bmMgbWF0Y2ggZ3RrcmNTeW5jQ2xhc3MgZ3JvdXB0aGVyZSBOT05FICJeXHMqY2xhc3NcPiIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZ3RrcmNfc3ludGF4X2luaXRzIikKKwlpZiB2ZXJzaW9uIDwgNTA4CisJCWxldCBkaWRfZ3RrcmNfc3ludGF4X2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluayBndGtyY0NvbW1lbnQgQ29tbWVudAorCUhpTGluayBndGtyY0ZpeG1lIFRvZG8KKworCUhpTGluayBndGtyY0luY2x1ZGUgUHJlcHJvYworCisJSGlMaW5rIGd0a3JjQUNTdHJpbmcgZ3RrcmNTdHJpbmcKKwlIaUxpbmsgZ3RrcmNCU3RyaW5nIGd0a3JjU3RyaW5nCisJSGlMaW5rIGd0a3JjU3RyaW5nIFN0cmluZworCUhpTGluayBndGtyY051bWJlciBOdW1iZXIKKwlIaUxpbmsgZ3RrcmNTdGF0ZU5hbWUgZ3RrcmNDb25zdGFudAorCUhpTGluayBndGtyY1ByaW9yaXR5TmFtZSBndGtyY0NvbnN0YW50CisJSGlMaW5rIGd0a3JjVGV4dERpck5hbWUgZ3RrcmNDb25zdGFudAorCUhpTGluayBndGtyY1NldHRpbmdzTmFtZSBGdW5jdGlvbgorCUhpTGluayBndGtyY1N0b2NrTmFtZSBGdW5jdGlvbgorCUhpTGluayBndGtyY0NvbnN0YW50IENvbnN0YW50CisKKwlIaUxpbmsgZ3RrcmNQYXRoU3BlY2lhbCBndGtyY1NwZWNpYWwKKwlIaUxpbmsgZ3RrcmNXUGF0aFNwZWNpYWwgZ3RrcmNTcGVjaWFsCisJSGlMaW5rIGd0a3JjUkdCQ29sb3IgZ3RrcmNTcGVjaWFsCisJSGlMaW5rIGd0a3JjS2V5TW9kIGd0a3JjU3BlY2lhbAorCUhpTGluayBndGtyY1NwZWNpYWwgU3BlY2lhbAorCisJSGlMaW5rIGd0a3JjVG9wIGd0a3JjS2V5d29yZAorCUhpTGluayBndGtyY1BhdGhTZXQgZ3RrcmNLZXl3b3JkCisJSGlMaW5rIGd0a3JjU3R5bGVLZXl3b3JkIGd0a3JjS2V5d29yZAorCUhpTGluayBndGtyY0Z1bmN0aW9uIGd0a3JjS2V5d29yZAorCUhpTGluayBndGtyY0JpbmQgZ3RrcmNLZXl3b3JkCisJSGlMaW5rIGd0a3JjS2V5d29yZCBLZXl3b3JkCisKKwlIaUxpbmsgZ3RrcmNDbGFzc05hbWVHbm9tZSBndGtyY0d0a0NsYXNzCisJSGlMaW5rIGd0a3JjQ2xhc3NOYW1lIGd0a3JjR3RrQ2xhc3MKKwlIaUxpbmsgZ3RrcmNGdW5jdGlvbk5hbWUgZ3RrcmNHdGtDbGFzcworCUhpTGluayBndGtyY0d0a0NsYXNzIFR5cGUKKworCUhpTGluayBndGtyY0ltYWdlIGd0a3JjT3RoZXJ3b3JkCisJSGlMaW5rIGd0a3JjT3RoZXJ3b3JkIEZ1bmN0aW9uCisKKwlIaUxpbmsgZ3RrcmNQYXJlbkVycm9yIGd0a3JjRXJyb3IKKwlIaUxpbmsgZ3RrcmNCcmFjZUVycm9yIGd0a3JjRXJyb3IKKwlIaUxpbmsgZ3RrcmNCcmFja2V0RXJyb3IgZ3RrcmNFcnJvcgorCUhpTGluayBndGtyY0Vycm9yIEVycm9yCisKKwlkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZ3RrcmMiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9oYXNrZWxsLnZpbSBiL3J1bnRpbWUvc3ludGF4L2hhc2tlbGwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmNmODEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9oYXNrZWxsLnZpbQpAQCAtMCwwICsxLDE5MyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CQlIYXNrZWxsCisiIE1haW50YWluZXI6CQlIYXNrZWxsIENhZmUgbWFpbGluZ2xpc3QgPGhhc2tlbGwtY2FmZUBoYXNrZWxsLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CQkyMDA0IEZlYiAyMworIiBPcmlnaW5hbCBBdXRob3I6CUpvaG4gV2lsbGlhbXMgPGpyd0Bwb2JveC5jb20+CisiCisiIFRoYW5rcyB0byBSeWFuIENydW1sZXkgZm9yIHN1Z2dlc3Rpb25zIGFuZCBKb2huIE1lYWNoYW0gZm9yCisiIHBvaW50aW5nIG91dCBidWdzLiBBbHNvIHRoYW5rcyB0byBJYW4gTHluYWdoIGFuZCBEb25hbGQgQnJ1Y2UgU3Rld2FydAorIiBmb3IgcHJvdmlkaW5nIHRoZSBpbnNwaXJhdGlvbiBmb3IgdGhlIGluY2x1c2lvbiBvZiB0aGUgaGFuZGxpbmcKKyIgb2YgQyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgYW5kIGZvciBwb2ludGluZyBvdXQgYSBidWcgaW4gdGhlCisiIGVuZC1vZi1saW5lIGNvbW1lbnQgaGFuZGxpbmcuCisiCisiIE9wdGlvbnMtYXNzaWduIGEgdmFsdWUgdG8gdGhlc2UgdmFyaWFibGVzIHRvIHR1cm4gdGhlIG9wdGlvbiBvbjoKKyIKKyIgaHNfaGlnaGxpZ2h0X2RlbGltaXRlcnMgLSBIaWdobGlnaHQgZGVsaW1pdGVyIGNoYXJhY3RlcnMtLXVzZXJzCisiCQkJICAgIHdpdGggYSBsaWdodC1jb2xvcmVkIGJhY2tncm91bmQgd2lsbAorIgkJCSAgICBwcm9iYWJseSB3YW50IHRvIHR1cm4gdGhpcyBvbi4KKyIgaHNfaGlnaGxpZ2h0X2Jvb2xlYW4gLSBUcmVhdCBUcnVlIGFuZCBGYWxzZSBhcyBrZXl3b3Jkcy4KKyIgaHNfaGlnaGxpZ2h0X3R5cGVzIC0gVHJlYXQgbmFtZXMgb2YgcHJpbWl0aXZlIHR5cGVzIGFzIGtleXdvcmRzLgorIiBoc19oaWdobGlnaHRfbW9yZV90eXBlcyAtIFRyZWF0IG5hbWVzIG9mIG90aGVyIGNvbW1vbiB0eXBlcyBhcyBrZXl3b3Jkcy4KKyIgaHNfaGlnaGxpZ2h0X2RlYnVnIC0gSGlnaGxpZ2h0IG5hbWVzIG9mIGRlYnVnZ2luZyBmdW5jdGlvbnMuCisiIGhzX2FsbG93X2hhc2hfb3BlcmF0b3IgLSBEb24ndCBoaWdobGlnaHQgc2VlbWluZ2x5IGluY29ycmVjdCBDCisiCQkJICAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYnV0IGFzc3VtZSB0aGVtIHRvIGJlCisiCQkJICAgb3BlcmF0b3JzCisiCisiIDIwMDQgRmViIDE5OiBBZGRlZCBDIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaGFuZGxpbmcsIGNvcnJlY3RlZCBlb2wgY29tbWVudHMKKyIJICAgICAgIGNsZWFuZWQgYXdheSBsaXRlcmF0ZSBoYXNrZWxsIHN1cHBvcnQgKHNob3VsZCBiZSBlbnRpcmVseSBpbgorIgkgICAgICAgbGhhc2tlbGwudmltKQorIiAyMDA0IEZlYiAyMDogQ2xlYW5lZCB1cCBDIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaGFuZGxpbmcsIGZpeGVkIHNpbmdsZSBcCisiCSAgICAgICBpbiBlb2wgY29tbWVudCBjaGFyYWN0ZXIgY2xhc3MKKyIgMjAwNCBGZWIgMjM6IE1hZGUgdGhlIGxlYWRpbmcgY29tbWVudHMgc29tZXdoYXQgY2xlYXJlciB3aGVyZSBpdCBjb21lcworIgkgICAgICAgdG8gYXR0cmlidXRpb24gb2Ygd29yay4KKworIiBSZW1vdmUgYW55IG9sZCBzeW50YXggc3R1ZmYgaGFuZ2luZyBhcm91bmQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3luIGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIChRdWFsaWZpZWQpIGlkZW50aWZpZXJzIChubyBkZWZhdWx0IGhpZ2hsaWdodGluZykKK3N5biBtYXRjaCBDb25JZCAiXChcPFtBLVpdW2EtekEtWjAtOV8nXSpcLlwpXD1cPFtBLVpdW2EtekEtWjAtOV8nXSpcPiIKK3N5biBtYXRjaCBWYXJJZCAiXChcPFtBLVpdW2EtekEtWjAtOV8nXSpcLlwpXD1cPFthLXpdW2EtekEtWjAtOV8nXSpcPiIKKworIiBJbmZpeCBvcGVyYXRvcnMtLW1vc3QgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBhbmQgYW55IChxdWFsaWZpZWQpIGlkZW50aWZpZXIKKyIgZW5jbG9zZWQgaW4gYGJhY2txdW90ZXNgLiBBbiBvcGVyYXRvciBzdGFydGluZyB3aXRoIDogaXMgYSBjb25zdHJ1Y3RvciwKKyIgb3RoZXJzIGFyZSB2YXJpYWJsZXMgKGUuZy4gZnVuY3Rpb25zKS4KK3N5biBtYXRjaCBoc1ZhclN5bSAiXChcPFtBLVpdW2EtekEtWjAtOV8nXSpcLlwpXD1bLSEjJCUmXCpcKy88PT5cP0BcXF58fi5dWy0hIyQlJlwqXCsvPD0+XD9AXFxefH46Ll0qIgorc3luIG1hdGNoIGhzQ29uU3ltICJcKFw8W0EtWl1bYS16QS1aMC05XyddKlwuXClcPTpbLSEjJCUmXCpcKy4vPD0+XD9AXFxefH46XSoiCitzeW4gbWF0Y2ggaHNWYXJTeW0gImBcKFw8W0EtWl1bYS16QS1aMC05XyddKlwuXClcPVthLXpdW2EtekEtWjAtOV8nXSpgIgorc3luIG1hdGNoIGhzQ29uU3ltICJgXChcPFtBLVpdW2EtekEtWjAtOV8nXSpcLlwpXD1bQS1aXVthLXpBLVowLTlfJ10qYCIKKworIiBSZXNlcnZlZCBzeW1ib2xzLS1jYW5ub3QgYmUgb3ZlcmxvYWRlZC4KK3N5biBtYXRjaCBoc0RlbGltaXRlciAgIihcfClcfFxbXHxcXVx8LFx8O1x8X1x8e1x8fSIKKworIiBTdHJpbmdzIGFuZCBjb25zdGFudHMKK3N5biBtYXRjaCAgIGhzU3BlY2lhbENoYXIJY29udGFpbmVkICJcXFwoWzAtOV1cK1x8b1swLTddXCtcfHhbMC05YS1mQS1GXVwrXHxbXCJcXCcmXFxhYmZucnR2XVx8XltBLVpeX1xbXFxcXV1cKSIKK3N5biBtYXRjaCAgIGhzU3BlY2lhbENoYXIJY29udGFpbmVkICJcXFwoTlVMXHxTT0hcfFNUWFx8RVRYXHxFT1RcfEVOUVx8QUNLXHxCRUxcfEJTXHxIVFx8TEZcfFZUXHxGRlx8Q1JcfFNPXHxTSVx8RExFXHxEQzFcfERDMlx8REMzXHxEQzRcfE5BS1x8U1lOXHxFVEJcfENBTlx8RU1cfFNVQlx8RVNDXHxGU1x8R1NcfFJTXHxVU1x8U1BcfERFTFwpIgorc3luIG1hdGNoICAgaHNTcGVjaWFsQ2hhckVycm9yCWNvbnRhaW5lZCAiXFwmXHwnJydcKyIKK3N5biByZWdpb24gIGhzU3RyaW5nCQlzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisgIGNvbnRhaW5zPWhzU3BlY2lhbENoYXIKK3N5biBtYXRjaCAgIGhzQ2hhcmFjdGVyCQkiW15hLXpBLVowLTlfJ10nXChbXlxcXVx8XFxbXiddXCtcfFxcJ1wpJyJsYz0xIGNvbnRhaW5zPWhzU3BlY2lhbENoYXIsaHNTcGVjaWFsQ2hhckVycm9yCitzeW4gbWF0Y2ggICBoc0NoYXJhY3RlcgkJIl4nXChbXlxcXVx8XFxbXiddXCtcfFxcJ1wpJyIgY29udGFpbnM9aHNTcGVjaWFsQ2hhcixoc1NwZWNpYWxDaGFyRXJyb3IKK3N5biBtYXRjaCAgIGhzTnVtYmVyCQkiXDxbMC05XVwrXD5cfFw8MFt4WF1bMC05YS1mQS1GXVwrXD5cfFw8MFtvT11bMC03XVwrXD4iCitzeW4gbWF0Y2ggICBoc0Zsb2F0CQkiXDxbMC05XVwrXC5bMC05XVwrXChbZUVdWy0rXVw9WzAtOV1cK1wpXD1cPiIKKworIiBLZXl3b3JkIGRlZmluaXRpb25zLiBUaGVzZSBtdXN0IGJlIHBhdHRlcnMgaW5zdGVhZCBvZiBrZXl3b3JkcworIiBiZWNhdXNlIG90aGVyd2lzZSB0aGV5IHdvdWxkIG1hdGNoIGFzIGtleXdvcmRzIGF0IHRoZSBzdGFydCBvZiBhCisiICJsaXRlcmF0ZSIgY29tbWVudCAoc2VlIGxocy52aW0pLgorc3luIG1hdGNoIGhzTW9kdWxlCQkiXDxtb2R1bGVcPiIKK3N5biBtYXRjaCBoc0ltcG9ydAkJIlw8aW1wb3J0XD4uKiJoZT1zKzYgY29udGFpbnM9aHNJbXBvcnRNb2QKK3N5biBtYXRjaCBoc0ltcG9ydE1vZAkJY29udGFpbmVkICJcPFwoYXNcfHF1YWxpZmllZFx8aGlkaW5nXClcPiIKK3N5biBtYXRjaCBoc0luZml4CQkiXDxcKGluZml4XHxpbmZpeGxcfGluZml4clwpXD4iCitzeW4gbWF0Y2ggaHNTdHJ1Y3R1cmUJCSJcPFwoY2xhc3NcfGRhdGFcfGRlcml2aW5nXHxpbnN0YW5jZVx8ZGVmYXVsdFx8d2hlcmVcKVw+Igorc3luIG1hdGNoIGhzVHlwZWRlZgkJIlw8XCh0eXBlXHxuZXd0eXBlXClcPiIKK3N5biBtYXRjaCBoc1N0YXRlbWVudAkJIlw8XChkb1x8Y2FzZVx8b2ZcfGxldFx8aW5cKVw+Igorc3luIG1hdGNoIGhzQ29uZGl0aW9uYWwJCSJcPFwoaWZcfHRoZW5cfGVsc2VcKVw+IgorCisiIE5vdCByZWFsIGtleXdvcmRzLCBidXQgY2xvc2UuCitpZiBleGlzdHMoImhzX2hpZ2hsaWdodF9ib29sZWFuIikKKyAgIiBCb29sZWFuIGNvbnN0YW50cyBmcm9tIHRoZSBzdGFuZGFyZCBwcmVsdWRlLgorICBzeW4gbWF0Y2ggaHNCb29sZWFuICJcPFwoVHJ1ZVx8RmFsc2VcKVw+IgorZW5kaWYKK2lmIGV4aXN0cygiaHNfaGlnaGxpZ2h0X3R5cGVzIikKKyAgIiBQcmltaXRpdmUgdHlwZXMgZnJvbSB0aGUgc3RhbmRhcmQgcHJlbHVkZSBhbmQgbGlicmFyaWVzLgorICBzeW4gbWF0Y2ggaHNUeXBlICJcPFwoSW50XHxJbnRlZ2VyXHxDaGFyXHxCb29sXHxGbG9hdFx8RG91YmxlXHxJT1x8Vm9pZFx8QWRkclx8QXJyYXlcfFN0cmluZ1wpXD4iCitlbmRpZgoraWYgZXhpc3RzKCJoc19oaWdobGlnaHRfbW9yZV90eXBlcyIpCisgICIgVHlwZXMgZnJvbSB0aGUgc3RhbmRhcmQgcHJlbHVkZSBsaWJyYXJpZXMuCisgIHN5biBtYXRjaCBoc1R5cGUgIlw8XChNYXliZVx8RWl0aGVyXHxSYXRpb1x8Q29tcGxleFx8T3JkZXJpbmdcfElPRXJyb3JcfElPUmVzdWx0XHxFeGl0Q29kZVwpXD4iCisgIHN5biBtYXRjaCBoc01heWJlICAgICJcPE5vdGhpbmdcPiIKKyAgc3luIG1hdGNoIGhzRXhpdENvZGUgIlw8XChFeGl0U3VjY2Vzc1wpXD4iCisgIHN5biBtYXRjaCBoc09yZGVyaW5nICJcPFwoR1RcfExUXHxFUVwpXD4iCitlbmRpZgoraWYgZXhpc3RzKCJoc19oaWdobGlnaHRfZGVidWciKQorICAiIERlYnVnZ2luZyBmdW5jdGlvbnMgZnJvbSB0aGUgc3RhbmRhcmQgcHJlbHVkZS4KKyAgc3luIG1hdGNoIGhzRGVidWcgIlw8XCh1bmRlZmluZWRcfGVycm9yXHx0cmFjZVwpXD4iCitlbmRpZgorCisKKyIgQ29tbWVudHMKK3N5biBtYXRjaCAgIGhzTGluZUNvbW1lbnQgICAgICAiLS0tKlwoW14tISMkJSZcKlwrLi88PT5cP0BcXF58fl0uKlwpXD8kIgorc3luIHJlZ2lvbiAgaHNCbG9ja0NvbW1lbnQgICAgIHN0YXJ0PSJ7LSIgIGVuZD0iLX0iIGNvbnRhaW5zPWhzQmxvY2tDb21tZW50CitzeW4gcmVnaW9uICBoc1ByYWdtYQkgICAgICAgc3RhcnQ9InstIyIgZW5kPSIjLX0iCisKKyIgQyBQcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gU2hhbWVsZXNzbHkgcmlwcGVkIGZyb20gYy52aW0gYW5kIHRyaW1tZWQKKyIgRmlyc3QsIHNlZSB3aGV0aGVyIHRvIGZsYWcgZGlyZWN0aXZlLWxpa2UgbGluZXMgb3Igbm90CitpZiAoIWV4aXN0cygiaHNfYWxsb3dfaGFzaF9vcGVyYXRvciIpKQorICAgIHN5biBtYXRjaAljRXJyb3IJCWRpc3BsYXkgIl5ccypcKCU6XHwjXCkuKiQiCitlbmRpZgorIiBBY2NlcHQgJTogZm9yICMgKEM5OSkKK3N5biByZWdpb24JY1ByZUNvbmRpdAlzdGFydD0iXlxzKlwoJTpcfCNcKVxzKlwoaWZcfGlmZGVmXHxpZm5kZWZcfGVsaWZcKVw+IiBza2lwPSJcXCQiIGVuZD0iJCIgZW5kPSIvLyJtZT1zLTEgY29udGFpbnM9Y0NvbW1lbnQsY0NwcFN0cmluZyxjQ29tbWVudEVycm9yCitzeW4gbWF0Y2gJY1ByZUNvbmRpdAlkaXNwbGF5ICJeXHMqXCglOlx8I1wpXHMqXChlbHNlXHxlbmRpZlwpXD4iCitzeW4gcmVnaW9uCWNDcHBPdXQJCXN0YXJ0PSJeXHMqXCglOlx8I1wpXHMqaWZcc1wrMFwrXD4iIGVuZD0iLlxAPVx8JCIgY29udGFpbnM9Y0NwcE91dDIKK3N5biByZWdpb24JY0NwcE91dDIJY29udGFpbmVkIHN0YXJ0PSIwIiBlbmQ9Il5ccypcKCU6XHwjXClccypcKGVuZGlmXD5cfGVsc2VcPlx8ZWxpZlw+XCkiIGNvbnRhaW5zPWNDcHBTa2lwCitzeW4gcmVnaW9uCWNDcHBTa2lwCWNvbnRhaW5lZCBzdGFydD0iXlxzKlwoJTpcfCNcKVxzKlwoaWZcPlx8aWZkZWZcPlx8aWZuZGVmXD5cKSIgc2tpcD0iXFwkIiBlbmQ9Il5ccypcKCU6XHwjXClccyplbmRpZlw+IiBjb250YWlucz1jQ3BwU2tpcAorc3luIHJlZ2lvbgljSW5jbHVkZWQJZGlzcGxheSBjb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKworc3luIG1hdGNoCWNJbmNsdWRlZAlkaXNwbGF5IGNvbnRhaW5lZCAiPFtePl0qPiIKK3N5biBtYXRjaAljSW5jbHVkZQlkaXNwbGF5ICJeXHMqXCglOlx8I1wpXHMqaW5jbHVkZVw+XHMqWyI8XSIgY29udGFpbnM9Y0luY2x1ZGVkCitzeW4gY2x1c3RlcgljUHJlUHJvY0dyb3VwCWNvbnRhaW5zPWNQcmVDb25kaXQsY0luY2x1ZGVkLGNJbmNsdWRlLGNEZWZpbmUsY0NwcE91dCxjQ3BwT3V0MixjQ3BwU2tpcCxjQ29tbWVudFN0YXJ0RXJyb3IKK3N5biByZWdpb24JY0RlZmluZQkJbWF0Y2hncm91cD1jUHJlQ29uZGl0IHN0YXJ0PSJeXHMqXCglOlx8I1wpXHMqXChkZWZpbmVcfHVuZGVmXClcPiIgc2tpcD0iXFwkIiBlbmQ9IiQiCitzeW4gcmVnaW9uCWNQcmVQcm9jCW1hdGNoZ3JvdXA9Y1ByZUNvbmRpdCBzdGFydD0iXlxzKlwoJTpcfCNcKVxzKlwocHJhZ21hXD5cfGxpbmVcPlx8d2FybmluZ1w+XHx3YXJuXD5cfGVycm9yXD5cKSIgc2tpcD0iXFwkIiBlbmQ9IiQiIGtlZXBlbmQKKworc3luIHJlZ2lvbgljQ29tbWVudAltYXRjaGdyb3VwPWNDb21tZW50U3RhcnQgc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPWNDb21tZW50U3RhcnRFcnJvcixjU3BhY2VFcnJvciBjb250YWluZWQKK3N5bnRheCBtYXRjaAljQ29tbWVudEVycm9yCWRpc3BsYXkgIlwqLyIgY29udGFpbmVkCitzeW50YXggbWF0Y2gJY0NvbW1lbnRTdGFydEVycm9yIGRpc3BsYXkgIi9cKiJtZT1lLTEgY29udGFpbmVkCitzeW4gcmVnaW9uCWNDcHBTdHJpbmcJc3RhcnQ9K0xcPSIrIHNraXA9K1xcXFxcfFxcIlx8XFwkKyBleGNsdWRlbmwgZW5kPSsiKyBlbmQ9JyQnIGNvbnRhaW5zPWNTcGVjaWFsIGNvbnRhaW5lZAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9oc19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9oc19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBoc01vZHVsZQkJCSAgaHNTdHJ1Y3R1cmUKKyAgSGlMaW5rIGhzSW1wb3J0CQkJICBJbmNsdWRlCisgIEhpTGluayBoc0ltcG9ydE1vZAkJCSAgaHNJbXBvcnQKKyAgSGlMaW5rIGhzSW5maXgJCQkgIFByZVByb2MKKyAgSGlMaW5rIGhzU3RydWN0dXJlCQkJICBTdHJ1Y3R1cmUKKyAgSGlMaW5rIGhzU3RhdGVtZW50CQkJICBTdGF0ZW1lbnQKKyAgSGlMaW5rIGhzQ29uZGl0aW9uYWwJCQkgIENvbmRpdGlvbmFsCisgIEhpTGluayBoc1NwZWNpYWxDaGFyCQkJICBTcGVjaWFsQ2hhcgorICBIaUxpbmsgaHNUeXBlZGVmCQkJICBUeXBlZGVmCisgIEhpTGluayBoc1ZhclN5bQkJCSAgaHNPcGVyYXRvcgorICBIaUxpbmsgaHNDb25TeW0JCQkgIGhzT3BlcmF0b3IKKyAgSGlMaW5rIGhzT3BlcmF0b3IJCQkgIE9wZXJhdG9yCisgIGlmIGV4aXN0cygiaHNfaGlnaGxpZ2h0X2RlbGltaXRlcnMiKQorICAgICIgU29tZSBwZW9wbGUgZmluZCB0aGlzIGhpZ2hsaWdodGluZyBkaXN0cmFjdGluZy4KKyAgICBIaUxpbmsgaHNEZWxpbWl0ZXIJCQkgIERlbGltaXRlcgorICBlbmRpZgorICBIaUxpbmsgaHNTcGVjaWFsQ2hhckVycm9yCQkgIEVycm9yCisgIEhpTGluayBoc1N0cmluZwkJCSAgU3RyaW5nCisgIEhpTGluayBoc0NoYXJhY3RlcgkJCSAgQ2hhcmFjdGVyCisgIEhpTGluayBoc051bWJlcgkJCSAgTnVtYmVyCisgIEhpTGluayBoc0Zsb2F0CQkJICBGbG9hdAorICBIaUxpbmsgaHNDb25kaXRpb25hbAkJCSAgQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGhzTGl0ZXJhdGVDb21tZW50CQkgIGhzQ29tbWVudAorICBIaUxpbmsgaHNCbG9ja0NvbW1lbnQJCSAgaHNDb21tZW50CisgIEhpTGluayBoc0xpbmVDb21tZW50CQkJICBoc0NvbW1lbnQKKyAgSGlMaW5rIGhzQ29tbWVudAkJCSAgQ29tbWVudAorICBIaUxpbmsgaHNQcmFnbWEJCQkgIFNwZWNpYWxDb21tZW50CisgIEhpTGluayBoc0Jvb2xlYW4JCQkgIEJvb2xlYW4KKyAgSGlMaW5rIGhzVHlwZQkJCSAgVHlwZQorICBIaUxpbmsgaHNNYXliZQkJCSAgaHNFbnVtQ29uc3QKKyAgSGlMaW5rIGhzT3JkZXJpbmcJCQkgIGhzRW51bUNvbnN0CisgIEhpTGluayBoc0VudW1Db25zdAkJCSAgQ29uc3RhbnQKKyAgSGlMaW5rIGhzRGVidWcJCQkgIERlYnVnCisKKyAgSGlMaW5rIGNDcHBTdHJpbmcJCWhzU3RyaW5nCisgIEhpTGluayBjQ29tbWVudFN0YXJ0CQloc0NvbW1lbnQKKyAgSGlMaW5rIGNDb21tZW50RXJyb3IJCWhzRXJyb3IKKyAgSGlMaW5rIGNDb21tZW50U3RhcnRFcnJvcgloc0Vycm9yCisgIEhpTGluayBjSW5jbHVkZQkJSW5jbHVkZQorICBIaUxpbmsgY1ByZVByb2MJCVByZVByb2MKKyAgSGlMaW5rIGNEZWZpbmUJCU1hY3JvCisgIEhpTGluayBjSW5jbHVkZWQJCWhzU3RyaW5nCisgIEhpTGluayBjRXJyb3IJCQlFcnJvcgorICBIaUxpbmsgY1ByZUNvbmRpdAkJUHJlQ29uZGl0CisgIEhpTGluayBjQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgY0NwcFNraXAJCWNDcHBPdXQKKyAgSGlMaW5rIGNDcHBPdXQyCQljQ3BwT3V0CisgIEhpTGluayBjQ3BwT3V0CQlDb21tZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImhhc2tlbGwiCisKKyIgT3B0aW9ucyBmb3Igdmk6IHRzPTggc3c9MiBzdHM9MiBub3dyYXAgbm9leHBhbmR0YWIgZnQ9dmltCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9oYi52aW0gYi9ydW50aW1lL3N5bnRheC9oYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmMzA1NAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2hiLnZpbQpAQCAtMCwwICsxLDk3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJSHlwZXIgQnVpbGRlcgorIiBNYWludGFpbmVyOglBbGVqYW5kcm8gRm9yZXJvIEN1ZXJ2bworIiBVUkw6CQlodHRwOi8vYmFjaHVlLmNvbS9oYi92aW0vc3ludGF4L2hiLnZpbQorIiBMYXN0IENoYW5nZToJMjAwMSBTZXAgMDIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFJlYWQgdGhlIEhUTUwgc3ludGF4IHRvIHN0YXJ0IHdpdGgKKyJzeW4gaW5jbHVkZSBASFRNTFN0dWZmIDxzZmlsZT46cDpoL2h0bWxoYi52aW0KKworInRoaXMgd291bGQgYmUgbmljZSBidXQgd2UgYXJlIHN1cHBvc2VkIG5vdCB0byBkbyBpdAorInNldCBtcHM9PDo+CisKKyJzeW4gcmVnaW9uICBIQmh0bWxTdHJpbmcgY29udGFpbmVkIHN0YXJ0PSsiKyBlbmQ9KyIrIGNvbnRhaW5zPWh0bWxTcGVjaWFsQ2hhcgorInN5biByZWdpb24gIEhCaHRtbFN0cmluZyBjb250YWluZWQgc3RhcnQ9KycrIGVuZD0rJysgY29udGFpbnM9aHRtbFNwZWNpYWxDaGFyCisKKyJzeW4gbWF0Y2ggICBodG1sVmFsdWUgICAgY29udGFpbmVkICI9W1x0IF0qW14nIiBcdD5dW14gXHQ+XSoiCisKK3N5biBtYXRjaCAgIGh0bWxTcGVjaWFsQ2hhciAiJlteO10qOyIgY29udGFpbmVkCisKK3N5biBtYXRjaCAgIEhCaHRtbFRhZ1NrICBjb250YWluZWQgIltBLVphLXpdKiIKKworc3luIG1hdGNoICAgSEJodG1sVGFnUyAgIGNvbnRhaW5lZCAiPFxzKlwoaGJccypcLlxzKlwoc2VjXHxtaW5cfGhvdXJcfGRheVx8bW9uXHx5ZWFyXHxpbnB1dFx8aHRtbFx8dGltZVx8Z2V0Y29va2llXHxzdHJlcWxcfHVybC1lbmNcKVx8d2FsbFxzKlwuXHMqXChzaG93XHxpbmZvXHxpZFx8bmV3XHxybVx8Y291bnRcKVx8YXV0aFxzKlwuXHMqXChjaGtcfGFkZFx8ZmluZFx8dXNlclwpXHxtYXRoXHMqXC5ccypleHBcKVxzKlwoW14uQS1aYS16MC05XVx8JFwpIiBjb250YWlucz1IQmh0bWxUYWdTayB0cmFuc3BhcmVudAorCitzeW4gbWF0Y2ggICBIQmh0bWxUYWdOICAgY29udGFpbmVkICJbQS1aYS16MC05XC9cLV1cKyIKKworc3luIG1hdGNoICAgSEJodG1sVGFnQiAgIGNvbnRhaW5lZCAiPFxzKltBLVphLXowLTlcL1wtXVwrXChccypcLlxzKltBLVphLXowLTlcL1wtXVwrXCkqIiBjb250YWlucz1IQmh0bWxUYWdTLEhCaHRtbFRhZ04KKworc3luIHJlZ2lvbiAgSEJodG1sVGFnIGNvbnRhaW5lZCBzdGFydD0rPCsgZW5kPSs+KyBjb250YWlucz1IQmh0bWxUYWdCLEhCRGlyZWN0aXZlRXJyb3IKKworc3luIG1hdGNoIEhCRmlsZU5hbWUgIi4qIiBjb250YWluZWQKKworc3luIG1hdGNoIEhCRGlyZWN0aXZlS2V5d29yZAkiOlxzKlwoaW5jbHVkZVx8bGliXHxzZXRcfG91dFwpXHNcKyIgY29udGFpbmVkCisKK3N5biBtYXRjaCBIQkRpcmVjdGl2ZUVycm9yCSJeOi4qJCIgY29udGFpbmVkCisKKyJzeW4gbWF0Y2ggSEJEaXJlY3RpdmVCbG9ja0VuZCAiXjpccyokIiBjb250YWluZWQKKworInN5biBtYXRjaCBIQkRpcmVjdGl2ZU91dEhlYWQgIl46XHMqb3V0XHNcK1xTXCsuKiIgY29udGFpbmVkIGNvbnRhaW5zPUhCRGlyZWN0aXZlS2V5d29yZCxIQkZpbGVOYW1lCisKKyJzeW4gbWF0Y2ggSEJEaXJlY3RpdmVTZXRIZWFkICJeOlxzKnNldFxzXCtcU1wrLioiIGNvbnRhaW5lZCBjb250YWlucz1IQkRpcmVjdGl2ZUtleXdvcmQsSEJGaWxlTmFtZQorCitzeW4gbWF0Y2ggSEJJbnZhbGlkTGluZSAiXi4qJCIKKworc3luIG1hdGNoIEhCRGlyZWN0aXZlSW5jbHVkZSAiXjpccyppbmNsdWRlXHNcK1xTXCsuKiQiIGNvbnRhaW5zPUhCRmlsZU5hbWUsSEJEaXJlY3RpdmVLZXl3b3JkCisKK3N5biBtYXRjaCBIQkRpcmVjdGl2ZUxpYiAiXjpccypsaWJcc1wrXFNcKy4qJCIgY29udGFpbnM9SEJGaWxlTmFtZSxIQkRpcmVjdGl2ZUtleXdvcmQKKworc3luIHJlZ2lvbiBIQlRleHQgbWF0Y2hncm91cD1IQkRpcmVjdGl2ZUtleXdvcmQgc3RhcnQ9L146XChzZXRcfG91dFwpXHMqXFNcKy4qJC8gZW5kPS9eOlxzKiQvIGNvbnRhaW5zPUhCRGlyZWN0aXZlRXJyb3IsaHRtbFNwZWNpYWxDaGFyLEhCaHRtbFRhZyBrZWVwZW5kCisKKyJzeW4gbWF0Y2ggSEJMaW5lICJeOi4qJCIgY29udGFpbnM9SEJEaXJlY3RpdmVJbmNsdWRlLEhCRGlyZWN0aXZlTGliLEhCRGlyZWN0aXZlRXJyb3IsSEJEaXJlY3RpdmVTZXQsSEJEaXJlY3RpdmVPdXQKKworc3luIG1hdGNoIEhCQ29tbWVudCAiXiMuKiQiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2hiX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2hiX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIEhCaHRtbFN0cmluZwkJCSBTdHJpbmcKKyAgSGlMaW5rIEhCaHRtbFRhZ04JCQkgRnVuY3Rpb24KKyAgSGlMaW5rIGh0bWxTcGVjaWFsQ2hhcgkJIFN0cmluZworCisgIEhpTGluayBIQkludmFsaWRMaW5lIEVycm9yCisgIEhpTGluayBIQkZvb2JhciBDb21tZW50CisgIGhpIEhCRmlsZU5hbWUgZ3VpYmc9bGlnaHRncmF5IGd1aWZnPWJsYWNrCisgIEhpTGluayBIQkRpcmVjdGl2ZUVycm9yIEVycm9yCisgIEhpTGluayBIQkRpcmVjdGl2ZUJsb2NrRW5kIEhCRGlyZWN0aXZlS2V5d29yZAorICBoaSBIQkRpcmVjdGl2ZUtleXdvcmQgZ3VpYmc9bGlnaHRncmF5IGd1aWZnPWRhcmtncmVlbgorICBIaUxpbmsgSEJDb21tZW50IENvbW1lbnQKKyAgSGlMaW5rIEhCaHRtbFRhZ1NrIFN0YXRlbWVudAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitzeW4gc3luYyBtYXRjaCBOb3JtYWwgZ3JvdXBoZXJlIE5PTkUgIl46XHMqJCIKK3N5biBzeW5jIG1hdGNoIE5vcm1hbCBncm91cGhlcmUgTk9ORSAiXjpccypsaWJcc1wrW14gXHRdXCskIgorc3luIHN5bmMgbWF0Y2ggTm9ybWFsIGdyb3VwaGVyZSBOT05FICJeOlxzKmluY2x1ZGVcc1wrW14gXHRdXCskIgorInN5biBzeW5jIG1hdGNoIEJsb2NrICBncm91cGhlcmUgSEJEaXJlY3RpdmVTZXQgIl4jOlxzKnNldFxzXCtbXiBcdF1cKyIKKyJzeW4gc3luYyBtYXRjaCBCbG9jayAgZ3JvdXBoZXJlIEhCRGlyZWN0aXZlT3V0ICJeIzpccypvdXRcc1wrW14gXHRdXCsiCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImhiIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaGVscC52aW0gYi9ydW50aW1lL3N5bnRheC9oZWxwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTdhNTUwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvaGVscC52aW0KQEAgLTAsMCArMSwxODcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglWaW0gaGVscCBmaWxlCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIChCcmFtQHZpbS5vcmcpCisiIExhc3QgQ2hhbmdlOgkyMDA0IE1heSAxNworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBtYXRjaCBoZWxwSGVhZGxpbmUJCSJeW0EtWiBdXCtbIF1cK1wqIm1lPWUtMQorc3luIG1hdGNoIGhlbHBTZWN0aW9uRGVsaW0JIl49XHszLH0uKj09PSQiCitzeW4gbWF0Y2ggaGVscFNlY3Rpb25EZWxpbQkiXi1cezMsfS4qLS0kIgorc3luIHJlZ2lvbiBoZWxwRXhhbXBsZQkJbWF0Y2hncm91cD1oZWxwSWdub3JlIHN0YXJ0PSIgPiQiIHN0YXJ0PSJePiQiIGVuZD0iXlteIFx0XSJtZT1lLTEgZW5kPSJePCIKK2lmIGhhcygiZWJjZGljIikKKyAgc3luIG1hdGNoIGhlbHBIeXBlclRleHRKdW1wCSJcXFxAPCF8W14iKnxdXCt8IgorICBzeW4gbWF0Y2ggaGVscEh5cGVyVGV4dEVudHJ5CSJcKlteIip8XVwrXCpccyJoZT1lLTEKKyAgc3luIG1hdGNoIGhlbHBIeXBlclRleHRFbnRyeQkiXCpbXiIqfF1cK1wqJCIKK2Vsc2UKKyAgc3luIG1hdGNoIGhlbHBIeXBlclRleHRKdW1wCSJcXFxAPCF8WyMtKSErLX5dXCt8IgorICBzeW4gbWF0Y2ggaGVscEh5cGVyVGV4dEVudHJ5CSJcKlsjLSkhKy1+XVwrXCpccyJoZT1lLTEKKyAgc3luIG1hdGNoIGhlbHBIeXBlclRleHRFbnRyeQkiXCpbIy0pISstfl1cK1wqJCIKK2VuZGlmCitzeW4gbWF0Y2ggaGVscE5vcm1hbAkJInwuKj09PT0qfCIKK3N5biBtYXRjaCBoZWxwTm9ybWFsCQkiOnx2aW06fCIJIiBmb3IgOmhlbHAgbW9kZWxpbmUKK3N5biBtYXRjaCBoZWxwVmltCQkiVmltIHZlcnNpb24gWzAtOS5hLXpdXCsiCitzeW4gbWF0Y2ggaGVscFZpbQkJIlZJTSBSRUZFUkVOQ0UuKiIKK3N5biBtYXRjaCBoZWxwT3B0aW9uCQkiJ1thLXpdXHsyLFx9JyIKK3N5biBtYXRjaCBoZWxwT3B0aW9uCQkiJ3RfLi4nIgorc3luIG1hdGNoIGhlbHBIZWFkZXIJCSJccypcenMuXHstfVx6ZVxzXD1cfiQiIG5leHRncm91cD1oZWxwSWdub3JlCitzeW4gbWF0Y2ggaGVscElnbm9yZQkJIi4iIGNvbnRhaW5lZAorc3luIGtleXdvcmQgaGVscE5vdGUJCW5vdGUgTm90ZSBOT1RFIG5vdGU6IE5vdGU6IE5PVEU6IE5vdGVzIE5vdGVzOgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiXDxOXD4iCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJcPE5cLiQibWU9ZS0xCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJcPE5cLlxzIm1lPWUtMgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiKE5cPiJtcz1zKzEKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIlxbTl0iCisiIGF2b2lkIGhpZ2hsaWdodGluZyBOICBOIGluIGhlbHAudHh0CitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJOICBOImhlPXMrMQorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiTnRoIm1lPWUtMgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiTi0xIm1lPWUtMgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkie1stYS16QS1aMC05JyI6JSM9W1xdPD4uLF1cK30iCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJ7Wy1hLXpBLVowLTknIiorLzolIz1bXF08Pi4sXVwrfSIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIlxzXFtbLWEtel5BLVowLTlfXVx7Mix9XSJtcz1zKzEKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIjxbLWEtekEtWjAtOV9dXCs+Igorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiPFtTQ01dLS4+Igorc3luIG1hdGNoIGhlbHBOb3JtYWwJCSI8LS0tKj4iCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJcW3JhbmdlXSIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIlxbbGluZV0iCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJcW2NvdW50XSIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIlxbb2Zmc2V0XSIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIlxbY21kXSIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIlxbbnVtXSIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIlxbK251bV0iCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJcWy1udW1dIgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiXFsrY21kXSIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIlxbKytvcHRdIgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiXFthcmddIgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiXFthcmd1bWVudHNdIgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiXFtpZGVudF0iCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJcW2FkZHJdIgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiXFtncm91cF0iCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJDVFJMLS4iCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJDVFJMLUJyZWFrIgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiQ1RSTC1QYWdlVXAiCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJDVFJMLVBhZ2VEb3duIgorc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiQ1RSTC1JbnNlcnQiCitzeW4gbWF0Y2ggaGVscFNwZWNpYWwJCSJDVFJMLURlbCIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIkNUUkwte2NoYXJ9Igorc3luIHJlZ2lvbiBoZWxwTm90VmkJCXN0YXJ0PSJ7VmlbOiBdIiBzdGFydD0ie25vdCIgc3RhcnQ9Intvbmx5IiBlbmQ9In0iIGNvbnRhaW5zPWhlbHBMZWFkQmxhbmssaGVscEh5cGVyVGV4dEp1bXAKK3N5biBtYXRjaCBoZWxwTGVhZEJsYW5rCQkiXlxzXCsiIGNvbnRhaW5lZAorCisiIEhpZ2hsaWdodCBncm91cCBpdGVtcyBpbiB0aGVpciBvd24gY29sb3IuCitzeW4gbWF0Y2ggaGVscENvbW1lbnQJCSJcdFsqIF1Db21tZW50XHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscENvbnN0YW50CQkiXHRbKiBdQ29uc3RhbnRcdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwU3RyaW5nCQkiXHRbKiBdU3RyaW5nXHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscENoYXJhY3RlcgkJIlx0WyogXUNoYXJhY3Rlclx0XCtbYS16XS4qIgorc3luIG1hdGNoIGhlbHBOdW1iZXIJCSJcdFsqIF1OdW1iZXJcdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwQm9vbGVhbgkJIlx0WyogXUJvb2xlYW5cdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwRmxvYXQJCSJcdFsqIF1GbG9hdFx0XCtbYS16XS4qIgorc3luIG1hdGNoIGhlbHBJZGVudGlmaWVyCSJcdFsqIF1JZGVudGlmaWVyXHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscEZ1bmN0aW9uCQkiXHRbKiBdRnVuY3Rpb25cdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwU3RhdGVtZW50CQkiXHRbKiBdU3RhdGVtZW50XHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscENvbmRpdGlvbmFsCSJcdFsqIF1Db25kaXRpb25hbFx0XCtbYS16XS4qIgorc3luIG1hdGNoIGhlbHBSZXBlYXQJCSJcdFsqIF1SZXBlYXRcdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwTGFiZWwJCSJcdFsqIF1MYWJlbFx0XCtbYS16XS4qIgorc3luIG1hdGNoIGhlbHBPcGVyYXRvcgkJIlx0WyogXU9wZXJhdG9yXHRcK1siYS16XS4qIgorc3luIG1hdGNoIGhlbHBLZXl3b3JkCQkiXHRbKiBdS2V5d29yZFx0XCtbYS16XS4qIgorc3luIG1hdGNoIGhlbHBFeGNlcHRpb24JCSJcdFsqIF1FeGNlcHRpb25cdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwUHJlUHJvYwkJIlx0WyogXVByZVByb2NcdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwSW5jbHVkZQkJIlx0WyogXUluY2x1ZGVcdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwRGVmaW5lCQkiXHRbKiBdRGVmaW5lXHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscE1hY3JvCQkiXHRbKiBdTWFjcm9cdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwUHJlQ29uZGl0CQkiXHRbKiBdUHJlQ29uZGl0XHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscFR5cGUJCSJcdFsqIF1UeXBlXHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscFN0b3JhZ2VDbGFzcwkiXHRbKiBdU3RvcmFnZUNsYXNzXHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscFN0cnVjdHVyZQkJIlx0WyogXVN0cnVjdHVyZVx0XCtbYS16XS4qIgorc3luIG1hdGNoIGhlbHBUeXBlZGVmCQkiXHRbKiBdVHlwZWRlZlx0XCtbQWEtel0uKiIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbAkJIlx0WyogXVNwZWNpYWxcdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbENoYXIJIlx0WyogXVNwZWNpYWxDaGFyXHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscFRhZwkJIlx0WyogXVRhZ1x0XCtbYS16XS4qIgorc3luIG1hdGNoIGhlbHBEZWxpbWl0ZXIJCSJcdFsqIF1EZWxpbWl0ZXJcdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwU3BlY2lhbENvbW1lbnQJIlx0WyogXVNwZWNpYWxDb21tZW50XHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscERlYnVnCQkiXHRbKiBdRGVidWdcdFwrW2Etel0uKiIKK3N5biBtYXRjaCBoZWxwVW5kZXJsaW5lZAkiXHRbKiBdVW5kZXJsaW5lZFx0XCtbYS16XS4qIgorc3luIG1hdGNoIGhlbHBFcnJvcgkJIlx0WyogXUVycm9yXHRcK1thLXpdLioiCitzeW4gbWF0Y2ggaGVscFRvZG8JCSJcdFsqIF1Ub2RvXHRcK1thLXpdLioiCisKKworIiBBZGRpdGlvbmFsbHkgbG9hZCBhIGxhbmd1YWdlLXNwZWNpZmljIHN5bnRheCBmaWxlICJoZWxwX2FiLnZpbSIuCitsZXQgaSA9IG1hdGNoKGV4cGFuZCgiJSIpLCAnXC5cYVxheCQnKQoraWYgaSA+IDAKKyAgZXhlICJydW50aW1lIHN5bnRheC9oZWxwXyIgLiBzdHJwYXJ0KGV4cGFuZCgiJSIpLCBpICsgMSwgMikgLiAiLnZpbSIKK2VuZGlmCisKK3N5biBzeW5jIG1pbmxpbmVzPTQwCisKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfaGVscF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9oZWxwX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGhlbHBFeGFtcGxlU3RhcnQJaGVscElnbm9yZQorICBIaUxpbmsgaGVscElnbm9yZQkJSWdub3JlCisgIEhpTGluayBoZWxwSHlwZXJUZXh0SnVtcAlTdWJ0aXRsZQorICBIaUxpbmsgaGVscEh5cGVyVGV4dEVudHJ5CVN0cmluZworICBIaUxpbmsgaGVscEhlYWRsaW5lCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGhlbHBIZWFkZXIJCVByZVByb2MKKyAgSGlMaW5rIGhlbHBTZWN0aW9uRGVsaW0JUHJlUHJvYworICBIaUxpbmsgaGVscFZpbQkJSWRlbnRpZmllcgorICBIaUxpbmsgaGVscEV4YW1wbGUJCUNvbW1lbnQKKyAgSGlMaW5rIGhlbHBPcHRpb24JCVR5cGUKKyAgSGlMaW5rIGhlbHBOb3RWaQkJU3BlY2lhbAorICBIaUxpbmsgaGVscFNwZWNpYWwJCVNwZWNpYWwKKyAgSGlMaW5rIGhlbHBOb3RlCQlUb2RvCisgIEhpTGluayBTdWJ0aXRsZQkJSWRlbnRpZmllcgorCisgIEhpTGluayBoZWxwQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgaGVscENvbnN0YW50CQlDb25zdGFudAorICBIaUxpbmsgaGVscFN0cmluZwkJU3RyaW5nCisgIEhpTGluayBoZWxwQ2hhcmFjdGVyCQlDaGFyYWN0ZXIKKyAgSGlMaW5rIGhlbHBOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgaGVscEJvb2xlYW4JCUJvb2xlYW4KKyAgSGlMaW5rIGhlbHBGbG9hdAkJRmxvYXQKKyAgSGlMaW5rIGhlbHBJZGVudGlmaWVyCQlJZGVudGlmaWVyCisgIEhpTGluayBoZWxwRnVuY3Rpb24JCUZ1bmN0aW9uCisgIEhpTGluayBoZWxwU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGhlbHBDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgaGVscFJlcGVhdAkJUmVwZWF0CisgIEhpTGluayBoZWxwTGFiZWwJCUxhYmVsCisgIEhpTGluayBoZWxwT3BlcmF0b3IJCU9wZXJhdG9yCisgIEhpTGluayBoZWxwS2V5d29yZAkJS2V5d29yZAorICBIaUxpbmsgaGVscEV4Y2VwdGlvbgkJRXhjZXB0aW9uCisgIEhpTGluayBoZWxwUHJlUHJvYwkJUHJlUHJvYworICBIaUxpbmsgaGVscEluY2x1ZGUJCUluY2x1ZGUKKyAgSGlMaW5rIGhlbHBEZWZpbmUJCURlZmluZQorICBIaUxpbmsgaGVscE1hY3JvCQlNYWNybworICBIaUxpbmsgaGVscFByZUNvbmRpdAkJUHJlQ29uZGl0CisgIEhpTGluayBoZWxwVHlwZQkJVHlwZQorICBIaUxpbmsgaGVscFN0b3JhZ2VDbGFzcwlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGhlbHBTdHJ1Y3R1cmUJCVN0cnVjdHVyZQorICBIaUxpbmsgaGVscFR5cGVkZWYJCVR5cGVkZWYKKyAgSGlMaW5rIGhlbHBTcGVjaWFsQ2hhcglTcGVjaWFsQ2hhcgorICBIaUxpbmsgaGVscFRhZwkJVGFnCisgIEhpTGluayBoZWxwRGVsaW1pdGVyCQlEZWxpbWl0ZXIKKyAgSGlMaW5rIGhlbHBTcGVjaWFsQ29tbWVudAlTcGVjaWFsQ29tbWVudAorICBIaUxpbmsgaGVscERlYnVnCQlEZWJ1ZworICBIaUxpbmsgaGVscFVuZGVybGluZWQJCVVuZGVybGluZWQKKyAgSGlMaW5rIGhlbHBFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIGhlbHBUb2RvCQlUb2RvCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImhlbHAiCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2hlcmN1bGVzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2hlcmN1bGVzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmQ4ZTliCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvaGVyY3VsZXMudmltCkBAIC0wLDAgKzEsMTMzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJSGVyY3VsZXMKKyIgTWFpbnRhaW5lcjoJRGFuYSBFZHdhcmRzIDxEYW5hX0Vkd2FyZHNAYXZhbnRpY29ycC5jb20+CisiIEV4dGVuc2lvbnM6ICAgKi52YywqLmV2LCoucnMKKyIgTGFzdCBjaGFuZ2U6ICBOb3YuIDksIDIwMDEKKyIgQ29tbWVudDogICAgICBIZXJjdWxlcyBwaHlzaWNhbCBJQyBkZXNpZ24gdmVyaWZpY2F0aW9uIHNvZnR3YXJlIGVuc3VyZXMKKyIJCXRoYXQgYW4gSUMncyBwaHlzaWNhbCBkZXNpZ24gbWF0Y2hlcyBpdHMgbG9naWNhbCBkZXNpZ24gYW5kCisiCQlzYXRpc2ZpZXMgbWFudWZhY3R1cmluZyBydWxlcy4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIElnbm9yZSBjYXNlCitzeW4gY2FzZSBpZ25vcmUKKworIiBIZXJjdWxlcyBydW5zZXQgc2VjdGlvbnMKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNUeXBlCSAgaGVhZGVyIGFzc2lnbl9wcm9wZXJ0eSBhbGlhcyBhc3NpZ24KK3N5biBrZXl3b3JkICAgaGVyY3VsZXNUeXBlCSAgb3B0aW9ucyBwcmVwcm9jZXNzX29wdGlvbnMKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNUeXBlCSAgZXhwbG9kZV9vcHRpb25zIHRlY2hub2xvZ3lfb3B0aW9ucworc3luIGtleXdvcmQgICBoZXJjdWxlc1R5cGUJICBkcmNfb3B0aW9ucyBkYXRhYmFzZV9vcHRpb25zCitzeW4ga2V5d29yZCAgIGhlcmN1bGVzVHlwZQkgIHRleHRfb3B0aW9ucyBscGVfb3B0aW9ucyBldmFjY2Vzc19vcHRpb25zCitzeW4ga2V5d29yZCAgIGhlcmN1bGVzVHlwZQkgIGNoZWNrX3BvaW50IGNvbXBhcmVfZ3JvdXAgZW52aXJvbm1lbnQKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNUeXBlCSAgZ3JpZF9jaGVjayBpbmNsdWRlIGxheWVyX3N0YXRzIGxvYWRfZ3JvdXAKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNUeXBlCSAgcmVzdGFydCBydW5fb25seSBzZWxmX2ludGVyc2VjdCBzZXQgc25hcAorc3luIGtleXdvcmQgICBoZXJjdWxlc1R5cGUJICBzeXN0ZW0gdmFyaWFibGUgd2FpdmVyCisKKyIgSGVyY3VsZXMgY29tbWFuZHMKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBhdHRhY2hfcHJvcGVydHkgYm9vbGVhbiBjZWxsX2V4dGVudAorc3luIGtleXdvcmQgICBoZXJjdWxlc1N0YXRlbWVudCAgIGNvbW1vbl9oaWVyYXJjaHkgY29ubmVjdGlvbl9wb2ludHMKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBjb3B5IGRhdGFfZmlsdGVyIGFsdGVybmF0ZSBkZWxldGUKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBleHBsb2RlIGV4cGxvZGVfYWxsIGZpbGxfcGF0dGVybiBmaW5kX25ldAorc3luIGtleXdvcmQgICBoZXJjdWxlc1N0YXRlbWVudCAgIGZsYXR0ZW4KK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBsZXZlbCBuZWdhdGUgcG9seWdvbl9mZWF0dXJlcyBwdXNoCitzeW4ga2V5d29yZCAgIGhlcmN1bGVzU3RhdGVtZW50ICAgcmVjdGFuZ2xlcyByZWxvY2F0ZSByZW1vdmVfb3ZlcmxhcCByZXZlcnNlIHNlbGVjdAorc3luIGtleXdvcmQgICBoZXJjdWxlc1N0YXRlbWVudCAgIHNlbGVjdF9jZWxsIHNlbGVjdF9jb250YWlucyBzZWxlY3RfZWRnZSBzZWxlY3RfbmV0IHNpemUKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICB0ZXh0X3BvbHlnb24gdGV4dF9wcm9wZXJ0eSB2ZXJ0ZXggYXJlYSBjdXQKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBkZW5zaXR5IGVuY2xvc2UgZXh0ZXJuYWwgaW5zaWRlX2VkZ2UKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBpbnRlcm5hbCBub3RjaCB2ZWN0b3JpemUgY2VudGVyX3RvX2NlbnRlcgorc3luIGtleXdvcmQgICBoZXJjdWxlc1N0YXRlbWVudCAgIGxlbmd0aCBtYXNrX2FsaWduIG1vc2NoZWNrIHJlc2NoZWNrCitzeW4ga2V5d29yZCAgIGhlcmN1bGVzU3RhdGVtZW50ICAgYW5hbHlzaXMgYnVpbGRzdWIgaW5pdF9scGVfZGIgY2FwYWNpdG9yCitzeW4ga2V5d29yZCAgIGhlcmN1bGVzU3RhdGVtZW50ICAgZGV2aWNlIGdlbmRldiBubW9zIHBtb3MgZGlvZGUgbnBuIHBucAorc3luIGtleXdvcmQgICBoZXJjdWxlc1N0YXRlbWVudCAgIHJlc2lzdG9yIHNldF9wYXJhbSBzYXZlX3Byb3BlcnR5CitzeW4ga2V5d29yZCAgIGhlcmN1bGVzU3RhdGVtZW50ICAgY29ubmVjdCBkaXNjb25uZWN0IHRleHQgIHRleHRfYm9vbGVhbgorc3luIGtleXdvcmQgICBoZXJjdWxlc1N0YXRlbWVudCAgIHJlcGxhY2VfdGV4dCBjcmVhdGVfcG9ydHMgbGFiZWwgZ3JhcGhpY3MKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBzYXZlX25ldGxpc3RfZGF0YWJhc2UgbHBlX3N0YXRzIG5ldGxpc3QKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBzcGljZSBncmFwaGljc19wcm9wZXJ0eSBncmFwaGljc19uZXRsaXN0CitzeW4ga2V5d29yZCAgIGhlcmN1bGVzU3RhdGVtZW50ICAgd3JpdGVfbWlsa3l3YXkgbXVsdGlfcnVsZV9lbmNsb3NlCitzeW4ga2V5d29yZCAgIGhlcmN1bGVzU3RhdGVtZW50ICAgaWYgZXJyb3JfcHJvcGVydHkgZXF1YXRlIGNvbXBhcmUKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBhbnRlbm5hX2ZpeCBjX3RocnUgZGV2X2Nvbm5lY3RfY2hlY2sKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBkZXZfbmV0X2NvdW50IGRldmljZV9jb3VudCBuZXRfZmlsdGVyCitzeW4ga2V5d29yZCAgIGhlcmN1bGVzU3RhdGVtZW50ICAgbmV0X3BhdGhfY2hlY2sgcmF0aW8gcHJvY2Vzc190ZXh0X29wZW5zCisKKyIgSGVyY3VsZXMga2V5d29yZHMKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBibGFja19ib3hfZmlsZSBibG9jayBjb21wYXJlX2RpciBlcXVpdmFsZW5jZQorc3luIGtleXdvcmQgICBoZXJjdWxlc1N0YXRlbWVudCAgIGZvcm1hdCBnZHNpbl9kaXIgZ3JvdXBfZGlyIGdyb3VwX2Rpcl91c2FnZQorc3luIGtleXdvcmQgICBoZXJjdWxlc1N0YXRlbWVudCAgIGlubGliIGxheW91dF9wYXRoIG91dGxpYiBvdXRwdXRfZm9ybWF0CitzeW4ga2V5d29yZCAgIGhlcmN1bGVzU3RhdGVtZW50ICAgb3V0cHV0X2xheW91dF9wYXRoIHNjaGVtYXRpYyBzY2hlbWF0aWNfZm9ybWF0CitzeW4ga2V5d29yZCAgIGhlcmN1bGVzU3RhdGVtZW50ICAgc2NoZW1lX2ZpbGUgb3V0cHV0X2Jsb2NrIGVsc2UKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBhbmQgb3Igbm90IHhvciBhbmRvdmVybGFwIGluc2lkZSBvdXRzaWRlIGJ5IHRvCitzeW4ga2V5d29yZCAgIGhlcmN1bGVzU3RhdGVtZW50ICAgd2l0aCBjb25uZWN0ZWQgY29ubmVjdGVkX2FsbCB0ZXh0ZWRfd2l0aCB0ZXh0ZWQKK3N5biBrZXl3b3JkICAgaGVyY3VsZXNTdGF0ZW1lbnQgICBieV9wcm9wZXJ0eSBjdXR0aW5nIGVkZ2VfdG91Y2ggZW5jbG9zaW5nIGluc2lkZQorc3luIGtleXdvcmQgICBoZXJjdWxlc1N0YXRlbWVudCAgIGluc2lkZV9ob2xlIGludGVyYWN0IHRvdWNoaW5nIHZlcnRleAorCisiIEhlcmN1bGVzIGNvbW1lbnRzCitzeW4gcmVnaW9uICAgIGhlcmN1bGVzQ29tbWVudAkJc3RhcnQ9Ii9cKiIgc2tpcD0iL1wqIiBlbmQ9IlwqLyIgY29udGFpbnM9aGVyY3VsZXNUb2RvCitzeW4gbWF0Y2ggICAgIGhlcmN1bGVzQ29tbWVudAkJIi8vLioiIGNvbnRhaW5zPWhlcmN1bGVzVG9kbworCisiIFByZXByb2Nlc3NvciBkaXJlY3RpdmVzCitzeW4gbWF0Y2ggICAgIGhlcmN1bGVzUHJlUHJvYyAiXiMuKiIKK3N5biBtYXRjaCAgICAgaGVyY3VsZXNQcmVQcm9jICJeQC4qIgorc3luIG1hdGNoICAgICBoZXJjdWxlc1ByZVByb2MgIm1hY3JvcyIKKworIiBIZXJjdWxlcyBDT01NRU5UIG9wdGlvbgorc3luIG1hdGNoICAgICBoZXJjdWxlc0NtZENtbnQgImNvbW1lbnQuKj0uKiIKKworIiBTcGFjaW5ncywgUmVzb2x1dGlvbnMsIFJhbmdlcywgUmF0aW9zLCBldGMuCitzeW4gbWF0Y2ggICAgIGhlcmN1bGVzTnVtYmVyCSAgICAgICItXD1cPFswLTldXCtMXD1cPlx8MFt4WF1bMC05XVwrXD4iCisKKyIgUGFyZW50aGVzaXMgc2FuaXR5IGNoZWNrZXIKK3N5biByZWdpb24gICAgaGVyY3VsZXNab25lICAgICAgIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIoIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIHRyYW5zcGFyZW50IGNvbnRhaW5zPUFMTEJVVCxoZXJjdWxlc0Vycm9yLGhlcmN1bGVzQnJhY2VFcnJvcixoZXJjdWxlc0N1cmx5RXJyb3IKK3N5biByZWdpb24gICAgaGVyY3VsZXNab25lICAgICAgIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJ7IiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9In0iIHRyYW5zcGFyZW50IGNvbnRhaW5zPUFMTEJVVCxoZXJjdWxlc0Vycm9yLGhlcmN1bGVzQnJhY2VFcnJvcixoZXJjdWxlc1BhcmVuRXJyb3IKK3N5biByZWdpb24gICAgaGVyY3VsZXNab25lICAgICAgIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcWyIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSJdIiB0cmFuc3BhcmVudCBjb250YWlucz1BTExCVVQsaGVyY3VsZXNFcnJvcixoZXJjdWxlc0N1cmx5RXJyb3IsaGVyY3VsZXNQYXJlbkVycm9yCitzeW4gbWF0Y2ggICAgIGhlcmN1bGVzRXJyb3IgICAgICAiWylcXX1dIgorc3luIG1hdGNoICAgICBoZXJjdWxlc0JyYWNlRXJyb3IgIlspfV0iICBjb250YWluZWQKK3N5biBtYXRjaCAgICAgaGVyY3VsZXNDdXJseUVycm9yICJbKVxdXSIgY29udGFpbmVkCitzeW4gbWF0Y2ggICAgIGhlcmN1bGVzUGFyZW5FcnJvciAiW1xdfV0iIGNvbnRhaW5lZAorCisiIEhlcmN1bGVzIG91dHB1dCBmb3JtYXQKKyJzeW4gbWF0Y2ggIGhlcmN1bGVzT3V0cHV0ICIoWzAtOV0uKikiCisic3luIG1hdGNoICBoZXJjdWxlc091dHB1dCAiKFswLTldLipcOy4qKSIKK3N5biBtYXRjaCAgICAgaGVyY3VsZXNPdXRwdXQgInBlcm1ccyo9LiooLiopIgorc3luIG1hdGNoICAgICBoZXJjdWxlc091dHB1dCAidGVtcFxzKj1ccyoiCitzeW4gbWF0Y2ggICAgIGhlcmN1bGVzT3V0cHV0ICJlcnJvclxzKj1ccyooLiopIgorCisiTW9kaWZ5IHRoZSBmb2xsb3dpbmcgYXMgbmVlZGVkLiAgVGhlIHRyYWRlLW9mZiBpcyBwZXJmb3JtYW5jZSB2ZXJzdXMgZnVuY3Rpb25hbGl0eS4KK3N5biBzeW5jICAgICAgbGluZXM9MTAwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2hlcmN1bGVzX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2hlcmN1bGVzX3N5bnRheF9pbml0cyA9IDEKKyAgICAiIERlZmF1bHQgbWV0aG9kcyBmb3IgaGlnaGxpZ2h0aW5nLgorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgaGVyY3VsZXNTdGF0ZW1lbnQgIFN0YXRlbWVudAorICBIaUxpbmsgaGVyY3VsZXNUeXBlICAgICAgIFR5cGUKKyAgSGlMaW5rIGhlcmN1bGVzQ29tbWVudCAgICBDb21tZW50CisgIEhpTGluayBoZXJjdWxlc1ByZVByb2MgICAgUHJlUHJvYworICBIaUxpbmsgaGVyY3VsZXNUb2RvICAgICAgIFRvZG8KKyAgSGlMaW5rIGhlcmN1bGVzT3V0cHV0ICAgICBJbmNsdWRlCisgIEhpTGluayBoZXJjdWxlc0NtZENtbnQgICAgSWRlbnRpZmllcgorICBIaUxpbmsgaGVyY3VsZXNOdW1iZXIgICAgIE51bWJlcgorICBIaUxpbmsgaGVyY3VsZXNCcmFjZUVycm9yIGhlcmN1bGVzRXJyb3IKKyAgSGlMaW5rIGhlcmN1bGVzQ3VybHlFcnJvciBoZXJjdWxlc0Vycm9yCisgIEhpTGluayBoZXJjdWxlc1BhcmVuRXJyb3IgaGVyY3VsZXNFcnJvcgorICBIaUxpbmsgaGVyY3VsZXNFcnJvciAgICAgIEVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImhlcmN1bGVzIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaGV4LnZpbSBiL3J1bnRpbWUvc3ludGF4L2hleC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjNjU1MwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2hleC52aW0KQEAgLTAsMCArMSw1NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUludGVsIGhleCBNQ1M1MQorIiBNYWludGFpbmVyOglTYW1zIFJpY2FocmQgPHNhbXNAcGluZy5hdD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgQXByIDI1CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyIgc3RvcmFnZSB0eXBlcworCitzeW4gbWF0Y2ggaGV4Q2hlY2tzdW0JIlswLTlhLWZBLUZdXHsyfSQiCitzeW4gbWF0Y2ggaGV4QWRyZXNzICAiXjpbMC05YS1mQS1GXVx7Nn0iIGNvbnRhaW5zPWhleERhdGFCeXRlQ291bnQKK3N5biBtYXRjaCBoZXhSZWNUeXBlICAiXjpbMC05YS1mQS1GXVx7OH0iIGNvbnRhaW5zPWhleEFkcmVzcworc3luIG1hdGNoIGhleERhdGFCeXRlQ291bnQgIGNvbnRhaW5lZCAiXjpbMC05YS1mQS1GXVx7Mn0iIGNvbnRhaW5zPWhleFN0YXJ0CitzeW4gbWF0Y2ggaGV4U3RhcnQgY29udGFpbmVkICJeOiIKK3N5biBtYXRjaCBoZXhFeHRBZHJSZWMgIl46MDIwMDAwMDJbMC05YS1mQS1GXVx7NH0iIGNvbnRhaW5zPWhleFNwZWNSZWMKK3N5biBtYXRjaCBoZXhFeHRMaW5BZHJSZWMgIl46MDIwMDAwMDRbMC05YS1mQS1GXVx7NH0iIGNvbnRhaW5zPWhleFNwZWNSZWMKK3N5biBtYXRjaCBoZXhTcGVjUmVjIGNvbnRhaW5lZCAiXjowWzAyXTAwMDAwWzEyNF0iIGNvbnRhaW5zPWhleFN0YXJ0CitzeW4gbWF0Y2ggaGV4RU9GICJeOjAwMDAwMDAxIiBjb250YWlucz1oZXhTdGFydAorCitzeW4gY2FzZSBtYXRjaAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9oZXhfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfaGV4X3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICBIaUxpbmsgaGV4U3RhcnQJCVNwZWNpYWxLZXkKKyAgSGlMaW5rIGhleERhdGFCeXRlQ291bnQJQ29uc3RhbnQKKyAgSGlMaW5rIGhleEFkcmVzcwkJQ29tbWVudAorICBIaUxpbmsgaGV4UmVjVHlwZQkJV2FybmluZ01zZworICBIaUxpbmsgaGV4Q2hlY2tzdW0JCVNlYXJjaAorICBIaUxpbmsgaGV4RXh0QWRyUmVjCQloZXhBZHJlc3MKKyAgSGlMaW5rIGhleEVPRgkJCWhleFNwZWNSZWMKKyAgSGlMaW5rIGhleEV4dExpbkFkclJlYwloZXhBZHJlc3MKKyAgSGlMaW5rIGhleFNwZWNSZWMJCURpZmZBZGQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiaGV4IgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaGl0ZXN0LnZpbSBiL3J1bnRpbWUvc3ludGF4L2hpdGVzdC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4OTEwMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2hpdGVzdC52aW0KQEAgLTAsMCArMSwxNDkgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglub25lOyB1c2VkIHRvIHNlZSBoaWdobGlnaHRpbmcKKyIgTWFpbnRhaW5lcjoJUm9uYWxkIFNjaGlsZCA8cnNAc2N1dHVtLmRlPgorIiBMYXN0IENoYW5nZToJMjAwMSBTZXAgMDIKKyIgVmVyc2lvbjoJNS40bi4xCisKKyIgVG8gc2VlIHlvdXIgY3VycmVudCBoaWdobGlnaHQgc2V0dGluZ3MsIGRvCisiICAgIDpzbyAkVklNUlVOVElNRS9zeW50YXgvaGl0ZXN0LnZpbQorCisiIHNhdmUgZ2xvYmFsIG9wdGlvbnMgYW5kIHJlZ2lzdGVycworbGV0IHM6aGlkZGVuICAgICAgPSAmaGlkZGVuCitsZXQgczpsYXp5cmVkcmF3ICA9ICZsYXp5cmVkcmF3CitsZXQgczptb3JlCSAgPSAmbW9yZQorbGV0IHM6cmVwb3J0ICAgICAgPSAmcmVwb3J0CitsZXQgczpzaG9ydG1lc3MgICA9ICZzaG9ydG1lc3MKK2xldCBzOndyYXBzY2FuICAgID0gJndyYXBzY2FuCitsZXQgczpyZWdpc3Rlcl9hICA9IEBhCitsZXQgczpyZWdpc3Rlcl9zZSA9IEAvCisKKyIgc2V0IGdsb2JhbCBvcHRpb25zCitzZXQgaGlkZGVuIGxhenlyZWRyYXcgbm9tb3JlIHJlcG9ydD05OTk5OSBzaG9ydG1lc3M9YW9Pc3RUVyB3cmFwc2NhbgorCisiIHByaW50IGN1cnJlbnQgaGlnaGxpZ2h0IHNldHRpbmdzIGludG8gcmVnaXN0ZXIgYQorcmVkaXIgQGEKK2hpZ2hsaWdodAorcmVkaXIgRU5ECisKKyIgT3BlbiBhIG5ldyB3aW5kb3cgaWYgdGhlIGN1cnJlbnQgb25lIGlzbid0IGVtcHR5CitpZiBsaW5lKCIkIikgIT0gMSB8fCBnZXRsaW5lKDEpICE9ICIiCisgIG5ldworZW5kaWYKKworIiBlZGl0IHRlbXBvcmFyeSBmaWxlCitlZGl0IEhpZ2hsaWdodFwgdGVzdAorCisiIHNldCBsb2NhbCBvcHRpb25zCitzZXRsb2NhbCBhdXRvaW5kZW50IG5vZXhwYW5kdGFiIGZvcm1hdG9wdGlvbnM9dCBzaGlmdHdpZHRoPTE2IG5vc3dhcGZpbGUgdGFic3RvcD0xNgorbGV0ICZ0ZXh0d2lkdGg9JmNvbHVtbnMKKworIiBpbnNlcnQgaGlnaGxpZ2h0IHNldHRpbmdzCislIGRlbGV0ZQorcHV0IGEKKworIiByZW1vdmUgdGhlIGNvbG9yZWQgeHh4IGl0ZW1zCitnL3h4eCAvcy8vL2UKKworIiByZW1vdmUgY29sb3Igc2V0dGluZ3MgKG5vdCBuZWVkZWQgaGVyZSkKK2dsb2JhbCEgL2xpbmtzIHRvLyBzdWJzdGl0dXRlIC9ccy4qJC8vZQorCisiIG1vdmUgbGlua2VkIGdyb3VwcyB0byB0aGUgZW5kIG9mIGZpbGUKK2dsb2JhbCAvbGlua3MgdG8vIG1vdmUgJAorCisiIG1vdmUgbGlua2VkIGdyb3VwIG5hbWVzIHRvIHRoZSBtYXRjaGluZyBwcmVmZXJyZWQgZ3JvdXBzCislIHN1YnN0aXR1dGUgL15cKFx3XCtcKVxzKlwobGlua3MgdG9cKVxzKlwoXHdcK1wpJC9cM1x0XDIgXDEvZQorZ2xvYmFsIC9saW5rcyB0by8gbm9ybWFsIG16M0VsRDAjJHAnemRkCisKKyIgZGVsZXRlIGVtcHR5IGxpbmVzCitnbG9iYWwgL14gKiQvIGRlbGV0ZQorCisiIHByZWNlZGUgc3ludGF4IGNvbW1hbmQKKyUgc3Vic3RpdHV0ZSAvXlteIF0qL3N5biBrZXl3b3JkICZcdCYvCisKKyIgZXhlY3V0ZSBzeW50YXggY29tbWFuZHMKK3N5bnRheCBjbGVhcgorJSB5YW5rIGEKK0BhCisKKyIgcmVtb3ZlIHN5bnRheCBjb21tYW5kcyBhZ2FpbgorJSBzdWJzdGl0dXRlIC9ec3luIGtleXdvcmQgLy8KKworIiBwcmV0dHkgZm9ybWF0dGluZworZ2xvYmFsIC9eLyBleGUgIm5vcm1hbCBXaVw8Q1I+XHRcZUFBXGV4IgorZ2xvYmFsIC9eXFMvIGpvaW4KKworIiBmaW5kIG91dCBmaXJzdCBzeW50YXggaGlnaGxpZ2h0aW5nCitsZXQgYjp2YXJpb3VzID0gJmhpZ2hsaWdodC4nLDpOb3JtYWwsOkN1cnNvciw6LCcKK2xldCBiOmkgPSAxCit3aGlsZSBiOnZhcmlvdXMgPX4gJzonLnN1YnN0aXR1dGUoZ2V0bGluZShiOmkpLCAnXHMuKiQnLCAnLCcsICcnKQorICAgbGV0IGI6aSA9IGI6aSArIDEKKyAgIGlmIGI6aSA+IGxpbmUoIiQiKSB8IGJyZWFrIHwgZW5kaWYKK2VuZHdoaWxlCisKKyIgaW5zZXJ0IGhlYWRsaW5lcworY2FsbCBhcHBlbmQoMCwgIkhpZ2hsaWdodGluZyBncm91cHMgZm9yIHZhcmlvdXMgb2NjYXNpb25zIikKK2NhbGwgYXBwZW5kKDEsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpCisKK2lmIGI6aSA8IGxpbmUoIiQiKS0xCisgICBsZXQgYjpzeW5oZWFkID0gIlN5bnRheCBoaWdobGlnaHRpbmcgZ3JvdXBzIgorICAgaWYgZXhpc3RzKCJoaXRlc3RfZmlsZXR5cGVzIikKKyAgICAgIHJlZGlyIEBhCisgICAgICBsZXQKKyAgICAgIHJlZGlyIEVORAorICAgICAgbGV0IEBhID0gc3Vic3RpdHV0ZShAYSwgJ2RpZF9cKFx3XCtcKV9zeW5cdypfaW5pdHNccyojMScsICcsIFwxJywgJ2cnKQorICAgICAgbGV0IEBhID0gc3Vic3RpdHV0ZShAYSwgIlxuXFx3W15cbl0qIiwgJycsICdnJykKKyAgICAgIGxldCBAYSA9IHN1YnN0aXR1dGUoQGEsICJcbiIsICcnLCAnZycpCisgICAgICBsZXQgQGEgPSBzdWJzdGl0dXRlKEBhLCAnXiwnLCAnJywgJ2cnKQorICAgICAgaWYgQGEgIT0gIiIKKwkgbGV0IGI6c3luaGVhZCA9IGI6c3luaGVhZC4iIC0gZmlsZXR5cGUiCisJIGlmIEBhID1+ICcsJworCSAgICBsZXQgYjpzeW5oZWFkID0gYjpzeW5oZWFkLiJzIgorCSBlbmRpZgorCSBsZXQgYjpzeW5oZWFkID0gYjpzeW5oZWFkLiI6Ii5AYQorICAgICAgZW5kaWYKKyAgIGVuZGlmCisgICBjYWxsIGFwcGVuZChiOmkrMSwgIiIpCisgICBjYWxsIGFwcGVuZChiOmkrMiwgYjpzeW5oZWFkKQorICAgY2FsbCBhcHBlbmQoYjppKzMsIHN1YnN0aXR1dGUoYjpzeW5oZWFkLCAnLicsICctJywgJ2cnKSkKK2VuZGlmCisKKyIgcmVtb3ZlICdobHMnIGhpZ2hsaWdodGluZworbm9obHNlYXJjaAorbm9ybWFsIDAKKworIiBhZGQgYXV0b2NvbW1hbmRzIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZSBmcm9tIGJ1ZmZlciBsaXN0CithdWcgaGlnaGxpZ2h0dGVzdAorICAgYXUhCisgICBhdSBCdWZVbmxvYWQgSGlnaGxpZ2h0XCB0ZXN0IGlmIGV4cGFuZCgiPGFmaWxlPiIpID09ICJIaWdobGlnaHQgdGVzdCIKKyAgIGF1IEJ1ZlVubG9hZCBIaWdobGlnaHRcIHRlc3QgICAgYmRlbGV0ZSEgSGlnaGxpZ2h0XCB0ZXN0CisgICBhdSBCdWZVbmxvYWQgSGlnaGxpZ2h0XCB0ZXN0IGVuZGlmCisgICBhdSBWaW1MZWF2ZVByZSAqIGlmIGJ1ZmV4aXN0cygiSGlnaGxpZ2h0IHRlc3QiKQorICAgYXUgVmltTGVhdmVQcmUgKiAgICBiZGVsZXRlISBIaWdobGlnaHRcIHRlc3QKKyAgIGF1IFZpbUxlYXZlUHJlICogZW5kaWYKK2F1ZyBFTkQKKworIiB3ZSBkb24ndCB3YW50IHRvIHNhdmUgdGhpcyB0ZW1wb3JhcnkgZmlsZQorc2V0IG5vbW9kaWZpZWQKKworIiB0aGUgZm9sbG93aW5nIHRyaWNrIGF2b2lkcyB0aGUgIlByZXNzIFJFVFVSTiAuLi4iIHByb21wdAorMCBhcHBlbmQKKy4KKworIiByZXN0b3JlIGdsb2JhbCBvcHRpb25zIGFuZCByZWdpc3RlcnMKK2xldCAmaGlkZGVuICAgICAgPSBzOmhpZGRlbgorbGV0ICZsYXp5cmVkcmF3ICA9IHM6bGF6eXJlZHJhdworbGV0ICZtb3JlCSA9IHM6bW9yZQorbGV0ICZyZXBvcnQJID0gczpyZXBvcnQKK2xldCAmc2hvcnRtZXNzCSA9IHM6c2hvcnRtZXNzCitsZXQgJndyYXBzY2FuCSA9IHM6d3JhcHNjYW4KK2xldCBAYQkJID0gczpyZWdpc3Rlcl9hCisKKyIgcmVzdG9yZSBsYXN0IHNlYXJjaCBwYXR0ZXJuCitjYWxsIGhpc3RkZWwoInNlYXJjaCIsIC0xKQorbGV0IEAvID0gczpyZWdpc3Rlcl9zZQorCisiIHJlbW92ZSB2YXJpYWJsZXMKK3VubGV0IHM6aGlkZGVuIHM6bGF6eXJlZHJhdyBzOm1vcmUgczpyZXBvcnQgczpzaG9ydG1lc3MKK3VubGV0IHM6d3JhcHNjYW4gczpyZWdpc3Rlcl9hIHM6cmVnaXN0ZXJfc2UKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2hvZy52aW0gYi9ydW50aW1lL3N5bnRheC9ob2cudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOWMxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9ob2cudmltCkBAIC0wLDAgKzEsMzUwIEBACisiIFNub3J0IHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkgIFNub3J0IENvbmZpZ3VyYXRpb24gRmlsZSAoc2VlOiBodHRwOi8vd3d3LnNub3J0Lm9yZykKKyIgTWFpbnRhaW5lcjoJICBQaGlsIFdvb2QsIGNvcm5ldHRAYXJwYS5uZXQKKyIgTGFzdCBDaGFuZ2U6CSAgJERhdGUkCisiIEZpbGVuYW1lczoJICAqLmhvZyAqLnJ1bGVzIHNub3J0LmNvbmYgdmlzaW9uLmNvbmYKKyIgVVJMOgkJICBodHRwOi8vaG9tZS5sYW5sLmdvdi9jcHcvdmltL3N5bnRheC9ob2cudmltCisiIFNub3J0IFZlcnNpb246ICAxLjggQnkgTWFydGluIFJvZXNjaCAocm9lc2NoQGNsYXJrLm5ldCwgd3d3LnNub3J0Lm9yZykKKyIgVE9ETwkJICBpbmNsdWRlIGFsbCAxLjggc3ludGF4CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCitpZiB2ZXJzaW9uIDwgNjAwCisgICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAorICAgZmluaXNoCitlbmRpZgorCitzeW4gbWF0Y2ggIGhvZ0NvbW1lbnQJK1xzXCNbXlwtOi4lIz0qXS4qJCtsYz0xCWNvbnRhaW5zPWhvZ1RvZG8saG9nQ29tbWVudFN0cmluZworc3luIHJlZ2lvbiBob2dDb21tZW50U3RyaW5nIGNvbnRhaW5lZCBvbmVsaW5lIHN0YXJ0PSdcU1xzXCtcIysnbXM9cysxIGVuZD0nXCMnCisKK3N5biBtYXRjaCAgIGhvZ0p1bmsgIlw8XGFcK3xcc1wrJCIKK3N5biBtYXRjaCAgIGhvZ051bWJlciBjb250YWluZWQJIlw8XGRcK1w+Igorc3luIHJlZ2lvbiAgaG9nVGV4dCBjb250YWluZWQgb25lbGluZSBzdGFydD0nXFMnIGVuZD0nLCcgc2tpcHdoaXRlCitzeW4gcmVnaW9uICBob2dUZXh0cyBjb250YWluZWQgb25lbGluZSBzdGFydD0nXFMnIGVuZD0nOycgc2tpcHdoaXRlCisKKyIgRW52aXJvbm1lbnQgVmFyaWFibGVzCisiID09PT09PT09PT09PT09PT09PT09PQorInN5biBtYXRjaCBob2dFbnZ2YXIgY29udGFpbmVkCSJbXCFdXD1cJFxJXGkqIgorInN5biBtYXRjaCBob2dFbnZ2YXIgY29udGFpbmVkCSJbXCFdXD1cJHtcSVxpKn0iCitzeW4gbWF0Y2ggaG9nRW52dmFyIGNvbnRhaW5lZAkiXCRcSVxpKiIKK3N5biBtYXRjaCBob2dFbnZ2YXIgY29udGFpbmVkCSJbXCFdXD1cJHtcSVxpKn0iCisKKworIiBTdHJpbmcgaGFuZGxpbmcgbGlmdGVkIGZyb20gdmltLnZpbSB3cml0dGVuIGJ5IERyLiBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4KKyIgVHJ5IHRvIGNhdGNoIHN0cmluZ3MsIGlmIG5vdGhpbmcgZWxzZSBtYXRjaGVzICh0aGVyZWZvcmUgaXQgbXVzdCBwcmVjZWRlIHRoZSBvdGhlcnMhKQorIiB2bUVzY2FwZUJyYWNlIGhhbmRsZXMgWyJdICBbXSJdIChpZS4gc3RheXMgYXMgc3RyaW5nKQorc3luIHJlZ2lvbiAgICAgICBob2dFc2NhcGVCcmFjZSAgIG9uZWxpbmUgY29udGFpbmVkIHRyYW5zcGFyZW50ICAgICBzdGFydD0iW15cXF1cKFxcXFxcKSpcW1xeXD1cXVw9IiBza2lwPSJcXFxcXHxcXFxdIiBlbmQ9IlxdIm1lPWUtMQorc3luIG1hdGNoCSBob2dQYXRTZXAJICBjb250YWluZWQJICAgIlxcW3woKV0iCitzeW4gbWF0Y2gJIGhvZ05vdFBhdFNlcAkgIGNvbnRhaW5lZAkgICAiXFxcXCIKK3N5biByZWdpb24JIGhvZ1N0cmluZwkgIG9uZWxpbmUJICAgc3RhcnQ9K1teOmEtekEtWlwtPiFcXF0iK2hzPWUrMSBza2lwPStcXFxcXHxcXCIrIGVuZD0rIlxzKjsraGU9cy0xCQkgICAgIGNvbnRhaW5zPWhvZ0VzY2FwZUJyYWNlLGhvZ1BhdFNlcCxob2dOb3RQYXRTZXAgb25lbGluZQorIiJzeW4gcmVnaW9uCSAgIGhvZ1N0cmluZwkgICAgb25lbGluZQkgICAgIHN0YXJ0PStbXjphLXpBLVo+IVxcXScrbGM9MSBza2lwPStcXFxcXHxcXCcrIGVuZD0rJysJCSBjb250YWlucz1ob2dFc2NhcGVCcmFjZSx2aW1QYXRTZXAsaG9nTm90UGF0U2VwCisic3luIHJlZ2lvbgkgIGhvZ1N0cmluZwkgICBvbmVsaW5lCSAgICBzdGFydD0rPSErbGM9MSAgIHNraXA9K1xcXFxcfFxcISsgZW5kPSshKwkJCQljb250YWlucz1ob2dFc2NhcGVCcmFjZSxob2dQYXRTZXAsaG9nTm90UGF0U2VwCisic3luIHJlZ2lvbgkgIGhvZ1N0cmluZwkgICBvbmVsaW5lCSAgICBzdGFydD0iPSsibGM9MSAgIHNraXA9IlxcXFxcfFxcKyIgZW5kPSIrIgkJCQljb250YWlucz1ob2dFc2NhcGVCcmFjZSxob2dQYXRTZXAsaG9nTm90UGF0U2VwCisic3luIHJlZ2lvbgkgIGhvZ1N0cmluZwkgICBvbmVsaW5lCSAgICBzdGFydD0iW15cXF0rXHMqW15hLXpBLVowLTkuXSJsYz0xIHNraXA9IlxcXFxcfFxcKyIgZW5kPSIrIgkJY29udGFpbnM9aG9nRXNjYXBlQnJhY2UsaG9nUGF0U2VwLGhvZ05vdFBhdFNlcAorInN5biByZWdpb24JICBob2dTdHJpbmcJICAgb25lbGluZQkgICAgc3RhcnQ9IlxzL1xzKlxBImxjPTEgc2tpcD0iXFxcXFx8XFwrIiBlbmQ9Ii8iCQkJY29udGFpbnM9aG9nRXNjYXBlQnJhY2UsaG9nUGF0U2VwLGhvZ05vdFBhdFNlcAorInN5biBtYXRjaAkgIGhvZ1N0cmluZwkgICBjb250YWluZWQJICAgICsiW14iXSpcXCQrICAgICAgc2tpcG5sIG5leHRncm91cD1ob2dTdHJpbmdDb250Cisic3luIG1hdGNoCSAgaG9nU3RyaW5nQ29udCAgICBjb250YWluZWQJICAgICtcKFxcXFxcfC5cKVx7LX1bXlxcXSIrCisKKworIiBCZWdpbm5lcnMgLSBQYXR0ZXJucyB0aGF0IGludm9sdmUgXgorIgorc3luIG1hdGNoICBob2dMaW5lQ29tbWVudAkrXlsgXHRdKiMuKiQrCWNvbnRhaW5zPWhvZ1RvZG8saG9nQ29tbWVudFN0cmluZyxob2dDb21tZW50VGl0bGUKK3N5biBtYXRjaCAgaG9nQ29tbWVudFRpdGxlCScjXHMqXHVcYSpcKFxzXCtcdVxhKlwpKjonbXM9cysxIGNvbnRhaW5lZAorc3luIGtleXdvcmQgaG9nVG9kbyBjb250YWluZWQJVE9ETworCisiIFJ1bGUga2V5d29yZHMKK3N5biBtYXRjaCAgIGhvZ0FSUENPcHQgY29udGFpbmVkICJcZFwrLFwqLFwqIgorc3luIG1hdGNoICAgaG9nQVJQQ09wdCBjb250YWluZWQgIlxkXCssXGRcKyxcKiIKK3N5biBtYXRjaCAgIGhvZ0FSUENPcHQgY29udGFpbmVkICJcZFwrLFwqLFxkXCsiCitzeW4gbWF0Y2ggICBob2dBUlBDT3B0IGNvbnRhaW5lZCAiXGRcKyxcZFwrLFxkIgorc3luIG1hdGNoICAgaG9nQVRBR09wdCBjb250YWluZWQgInNlc3Npb24iCitzeW4gbWF0Y2ggICBob2dBVEFHT3B0IGNvbnRhaW5lZCAiaG9zdCIKK3N5biBtYXRjaCAgIGhvZ0FUQUdPcHQgY29udGFpbmVkICJkc3QiCitzeW4gbWF0Y2ggICBob2dBVEFHT3B0IGNvbnRhaW5lZCAic3JjIgorc3luIG1hdGNoICAgaG9nQVRBR09wdCBjb250YWluZWQgInNlY29uZHMiCitzeW4gbWF0Y2ggICBob2dBVEFHT3B0IGNvbnRhaW5lZCAicGFja2V0cyIKK3N5biBtYXRjaCAgIGhvZ0FUQUdPcHQgY29udGFpbmVkICJieXRlcyIKK3N5biBrZXl3b3JkIGhvZ0FSZXNwT3B0IGNvbnRhaW5lZCByc3Rfc25kIHJzdF9yY3YgcnN0X2FsbCBza2lwd2hpdGUKK3N5biBrZXl3b3JkIGhvZ0FSZXNwT3B0IGNvbnRhaW5lZCBpY21wX25ldCBpY21wX2hvc3QgaWNtcF9wb3J0IGljbXBfYWxsIHNraXB3aGl0ZQorc3luIGtleXdvcmQgaG9nQVJlYWN0T3B0IGNvbnRhaW5lZCBibG9jayB3YXJuIG1zZyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIGhvZ0FSZWFjdE9wdCBjb250YWluZWQgInByb3h5XGRcKyIgc2tpcHdoaXRlCitzeW4ga2V5d29yZCBob2dBRk9wdCBjb250YWluZWQgbG9ndG8gY29udGVudF9saXN0IHNraXB3aGl0ZQorc3luIGtleXdvcmQgaG9nQUlQT3B0VmFsIGNvbnRhaW5lZCAgZW9sIG5vcCB0cyBzZWMgbHNyciBsc3JyZSBzYXRpZCBzc3JyIHJyIHNraXB3aGl0ZQorc3luIGtleXdvcmQgaG9nQVJlZkdycHMgY29udGFpbmVkIGFyYWNobmlkcyBza2lwd2hpdGUKK3N5biBrZXl3b3JkIGhvZ0FSZWZHcnBzIGNvbnRhaW5lZCBidWd0cmFxIHNraXB3aGl0ZQorc3luIGtleXdvcmQgaG9nQVJlZkdycHMgY29udGFpbmVkIGN2ZSBza2lwd2hpdGUKK3N5biBrZXl3b3JkIGhvZ1Nlc3Npb25WYWwgY29udGFpbmVkICBwcmludGFibGUgYWxsIHNraXB3aGl0ZQorc3luIG1hdGNoICAgaG9nQUZsYWdPcHQgY29udGFpbmVkICJbMEZTUlBBVWZzcnBhdTIxXVwrIiBza2lwd2hpdGUKK3N5biBtYXRjaCAgIGhvZ0FGcmFnT3B0IGNvbnRhaW5lZCAiW0RSTWRybV1cKyIgc2tpcHdoaXRlCisiCisiIE91dHB1dCBzeXNsb2cgb3B0aW9ucworIiBGYWNpbGl0aWVzCitzeW4ga2V5d29yZCBob2dTeXNGYWMgY29udGFpbmVkIExPR19BVVRIIExPR19BVVRIUFJJViBMT0dfREFFTU9OIExPR19MT0NBTDAKK3N5biBrZXl3b3JkIGhvZ1N5c0ZhYyBjb250YWluZWQgTE9HX0xPQ0FMMSBMT0dfTE9DQUwyIExPR19MT0NBTDMgTE9HX0xPQ0FMNAorc3luIGtleXdvcmQgaG9nU3lzRmFjIGNvbnRhaW5lZCBMT0dfTE9DQUw1IExPR19MT0NBTDYgTE9HX0xPQ0FMNyBMT0dfVVNFUgorIiBQcmlvcml0aWVzCitzeW4ga2V5d29yZCBob2dTeXNQcmkgY29udGFpbmVkIExPR19FTUVSRyBBTEVSVCBMT0dfQ1JJVCBMT0dfRVJSCitzeW4ga2V5d29yZCBob2dTeXNQcmkgY29udGFpbmVkIExPR19XQVJOSU5HIExPR19OT1RJQ0UgTE9HX0lORk8gTE9HX0RFQlVHCisiIE9wdGlvbnMKK3N5biBrZXl3b3JkIGhvZ1N5c09wdCBjb250YWluZWQgTE9HX0NPTlMgTE9HX05ERUxBWSBMT0dfUEVSUk9SCitzeW4ga2V5d29yZCBob2dTeXNPcHQgY29udGFpbmVkIExPR19QSUQKKyIgUnVsZVR5cGVzCitzeW4ga2V5d29yZCBob2dSdWxlVHlwZSBjb250YWluZWQgbG9nIHBhc3MgYWxlcnQgYWN0aXZhdGUgZHluYW1pYworCisiIE91dHB1dCBsb2dfZGF0YWJhc2UgYXJndW1lbnRzIGFuZCBwYXJhbWV0ZXJzCisiIFR5cGUgb2YgZGF0YWJhc2UgZm9sbG93ZWQgYnkgLAorIiBzeW4ga2V5d29yZCBob2dEQlNRTCBjb250YWluZWQgbXlzcWwgcG9zdGdyZXNxbCB1bml4b2RiYworIiBQYXJhbWV0ZXJzIHBhcmFtPWNvbnN0YW50CisiIGFyZSBqdXN0IHZhcmlvdXMgY29uc3RhbnRzIGFzc2lnbmVkIHRvIHBhcmFtZXRlciBuYW1lcworCisiIE91dHB1dCBsb2dfZGF0YWJhc2UgYXJndW1lbnRzIGFuZCBwYXJhbWV0ZXJzCisiIFR5cGUgb2YgZGF0YWJhc2UgZm9sbG93ZWQgYnkgLAorc3luIGtleXdvcmQgaG9nREJUeXBlIGNvbnRhaW5lZCBhbGVydCBsb2cKK3N5biBrZXl3b3JkIGhvZ0RCU1JWIGNvbnRhaW5lZCBteXNxbCBwb3N0Z3Jlc3FsIHVuaXhvZGJjCisiIFBhcmFtZXRlcnMgcGFyYW09Y29uc3RhbnQKKyIgYXJlIGp1c3QgdmFyaW91cyBjb25zdGFudHMgYXNzaWduZWQgdG8gcGFyYW1ldGVyIG5hbWVzCitzeW4ga2V5d29yZCBob2dEQlBhcmFtIGNvbnRhaW5lZCBkYm5hbWUgaG9zdCBwb3J0IHVzZXIgcGFzc3dvcmQgc2Vuc29yX25hbWUKKworIiBPdXRwdXQgeG1sIGFyZ3VtZW50cyBhbmQgcGFyYW1ldGVycworIiB4bWwgYXJncworc3luIGtleXdvcmQgaG9nWE1MQXJnICBjb250YWluZWQgbG9nIGFsZXJ0CitzeW4ga2V5d29yZCBob2dYTUxQYXJhbSBjb250YWluZWQgZmlsZSBwcm90b2NvbCBob3N0IHBvcnQgY2VydCBrZXkgY2Egc2VydmVyIHNhbml0aXplIGVuY29kaW5nIGRldGFpbAorIgorIiBob2cgcnVsZSBoYW5kbGVyICcoLiopJworc3luIHJlZ2lvbiAgaG9nQU9wdCBjb250YWluZWQgb25lbGluZSBzdGFydD0icnBjIiBlbmQ9IjoibWU9ZS0xIG5leHRncm91cD1ob2dBUlBDT3B0R3JwIHNraXB3aGl0ZQorc3luIHJlZ2lvbiAgaG9nQVJQQ09wdEdycCBjb250YWluZWQgb25lbGluZSBzdGFydD0iLiJocz1zKzEgZW5kPSI7Im1lPWUtMSBjb250YWlucz1ob2dBUlBDT3B0IHNraXB3aGl0ZQorCitzeW4gcmVnaW9uICBob2dBT3B0IGNvbnRhaW5lZCBvbmVsaW5lIHN0YXJ0PSJ0YWciIGVuZD0iOiJtZT1lLTEgbmV4dGdyb3VwPWhvZ0FUQUdPcHRHcnAgc2tpcHdoaXRlCitzeW4gcmVnaW9uICBob2dBVEFHT3B0R3JwIGNvbnRhaW5lZCBvbmVsaW5lIHN0YXJ0PSIuImhzPXMrMSBza2lwPSIsIiBlbmQ9IjsibWU9ZS0xIGNvbnRhaW5zPWhvZ0FUQUdPcHQsaG9nTnVtYmVyIHNraXB3aGl0ZQorIgorc3luIHJlZ2lvbiAgaG9nQU9wdCBjb250YWluZWQgb25lbGluZSBzdGFydD0ibm9jYXNlXHxzYW1laXAiIGVuZD0iOyJtZT1lLTEgc2tpcHdoaXRlIG9uZWxpbmUga2VlcGVuZAorIgorc3luIHJlZ2lvbiAgaG9nQU9wdCBjb250YWluZWQgc3RhcnQ9InJlc3AiIGVuZD0iOiJtZT1lLTEgbmV4dGdyb3VwPWhvZ0FSZXNwT3B0cyBza2lwd2hpdGUKK3N5biByZWdpb24gIGhvZ0FSZXNwT3B0cyBjb250YWluZWQgb25lbGluZSBzdGFydD0iLiIgZW5kPSJbLDtdIiBjb250YWlucz1ob2dBUmVzcE9wdCBza2lwd2hpdGUgbmV4dGdyb3VwPWhvZ0FSZXNwT3B0cworIgorc3luIHJlZ2lvbiAgaG9nQU9wdCBjb250YWluZWQgc3RhcnQ9InJlYWN0IiBlbmQ9IjoibWU9ZS0xIG5leHRncm91cD1ob2dBUmVhY3RPcHRzIHNraXB3aGl0ZQorc3luIHJlZ2lvbiAgaG9nQVJlYWN0T3B0cyBjb250YWluZWQgb25lbGluZSBzdGFydD0iLiIgZW5kPSJbLDtdIiBjb250YWlucz1ob2dBUmVhY3RPcHQgc2tpcHdoaXRlIG5leHRncm91cD1ob2dBUmVhY3RPcHRzCisKK3N5biByZWdpb24gIGhvZ0FPcHQgY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9ImRlcHRoXHxzZXFcfHR0bFx8YWNrXHxpY21wX3NlcVx8YWN0aXZhdGVzXHxhY3RpdmF0ZWRfYnlcfGRzaXplXHxpY29kZVx8aWNtcF9pZFx8Y291bnRcfGl0eXBlXHx0b3NcfGlkXHxvZmZzZXQiIGVuZD0iOiJtZT1lLTEgbmV4dGdyb3VwPWhvZ0FOT3B0R3JwIHNraXB3aGl0ZQorc3luIHJlZ2lvbiAgaG9nQU5PcHRHcnAgY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9Ii4iaHM9cysxIGVuZD0iOyJtZT1lLTEgY29udGFpbnM9aG9nTnVtYmVyIHNraXB3aGl0ZSBvbmVsaW5lIGtlZXBlbmQKKworc3luIHJlZ2lvbiAgaG9nQU9wdCBjb250YWluZWQgb25lbGluZSBzdGFydD0iY2xhc3N0eXBlIiBlbmQ9IjoibWU9ZS0xIG5leHRncm91cD1ob2dBRmlsZUdycCBza2lwd2hpdGUKKworc3luIHJlZ2lvbiAgaG9nQU9wdCBjb250YWluZWQgb25lbGluZSBzdGFydD0icmVnZXhcfG1zZ1x8Y29udGVudCIgZW5kPSI6Im1lPWUtMSBuZXh0Z3JvdXA9aG9nQVN0ckdycCBza2lwd2hpdGUKKyJzeW4gcmVnaW9uICBob2dBU3RyR3JwIGNvbnRhaW5lZCBvbmVsaW5lIHN0YXJ0PSs6XHMqIitocz1zKzEgc2tpcD0iXFw7IiBlbmQ9KyJccyo7K2hlPXMtMSBjb250YWlucz1ob2dTdHJpbmcgc2tpcHdoaXRlIG9uZWxpbmUga2VlcGVuZAorc3luIHJlZ2lvbiAgaG9nQVN0ckdycCBjb250YWluZWQgb25lbGluZSBzdGFydD0rOlxzKiJcfDoiK2hzPXMrMSBza2lwPSJcXDsiIGVuZD0rIlxzKjsraGU9cy0xIGNvbnRhaW5zPWhvZ1N0cmluZyBza2lwd2hpdGUgb25lbGluZSBrZWVwZW5kCisKK3N5biByZWdpb24gIGhvZ0FPcHQgY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9ImxvZ3RvXHxjb250ZW50LWxpc3QiIGVuZD0iOiJtZT1lLTEgbmV4dGdyb3VwPWhvZ0FGaWxlR3JwIHNraXB3aGl0ZQorc3luIHJlZ2lvbiAgaG9nQUZpbGVHcnAgY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9Ii4iaHM9cysxIGVuZD0iOyJtZT1lLTEgY29udGFpbnM9aG9nRmlsZU5hbWUgc2tpcHdoaXRlCisKK3N5biByZWdpb24gIGhvZ0FPcHQgY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9InJlZmVyZW5jZSIgZW5kPSI6Im1lPWUtMSBuZXh0Z3JvdXA9aG9nQVJlZkdycCBza2lwd2hpdGUKK3N5biByZWdpb24gIGhvZ0FSZWZHcnAgY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9Ii4iaHM9cysxIGVuZD0iLCJtZT1lLTEgY29udGFpbnM9aG9nQVJlZkdycHMgbmV4dGdyb3VwPWhvZ0FSZWZOYW1lIHNraXB3aGl0ZQorc3luIHJlZ2lvbiAgaG9nQVJlZk5hbWUgY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9Ii4iaHM9cysxIGVuZD0iOyJtZT1lLTEgY29udGFpbnM9aG9nU3RyaW5nLGhvZ0ZpbGVOYW1lLGhvZ051bWJlciBza2lwd2hpdGUKKworc3luIHJlZ2lvbiAgaG9nQU9wdCBjb250YWluZWQgb25lbGluZSBzdGFydD0iZmxhZ3MiIGVuZD0iOiJoZT1zLTEgbmV4dGdyb3VwPWhvZ0FGbGFnT3B0IHNraXB3aGl0ZSBvbmVsaW5lIGtlZXBlbmQKKworc3luIHJlZ2lvbiAgaG9nQU9wdCBjb250YWluZWQgb25lbGluZSBzdGFydD0iZnJhZ2JpdHMiIGVuZD0iOiJoZT1zLTEgbmV4dGdyb3VwPWhvZ0FGbGFnT3B0IHNraXB3aGl0ZSBvbmVsaW5lIGtlZXBlbmQKKworc3luIHJlZ2lvbiAgaG9nQU9wdCBjb250YWluZWQgb25lbGluZSBzdGFydD0iaXBvcHRzIiBlbmQ9IjoiaGU9cy0xIG5leHRncm91cD1ob2dBSVBPcHRWYWwgc2tpcHdoaXRlIG9uZWxpbmUga2VlcGVuZAorCisic3luIHJlZ2lvbiAgaG9nQU9wdCBjb250YWluZWQgb25lbGluZSBzdGFydD0iLiIgZW5kPSI6ImhlPXMtMSBjb250YWlucz1ob2dBRk9wdCBuZXh0Z3JvdXA9aG9nRmlsZU5hbWUgc2tpcHdoaXRlCisKK3N5biByZWdpb24gIGhvZ0FPcHQgY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9InNlc3Npb24iIGVuZD0iOiJoZT1zLTEgbmV4dGdyb3VwPWhvZ1Nlc3Npb25WYWwgc2tpcHdoaXRlCisKK3N5biBtYXRjaCAgIG5vdGhpbmcgICIkIgorc3luIHJlZ2lvbiAgaG9nUnVsZXMgb25lbGluZSAgY29udGFpbnM9bm90aGluZyBzdGFydD0nJCcgZW5kPSIkIgorc3luIHJlZ2lvbiAgaG9nUnVsZXMgb25lbGluZSAgY29udGFpbnM9aG9nUnVsZSBzdGFydD0nKCdtcz1zKzEgZW5kPSIpXHMqJCIgc2tpcHdoaXRlCitzeW4gcmVnaW9uICBob2dSdWxlICBjb250YWluZWQgb25lbGluZSBzdGFydD0iLiIgc2tpcD0iXFw7IiBlbmQ9IjsiaGU9cy0xIGNvbnRhaW5zPWhvZ0FPcHRzLCBza2lwd2hpdGUga2VlcGVuZAorInN5biByZWdpb24gIGhvZ0FPcHRzIGNvbnRhaW5lZCBvbmVsaW5lIHN0YXJ0PSIuIiBlbmQ9Ils7XSJoZT1zLTEgY29udGFpbnM9aG9nQU9wdCBza2lwd2hpdGUKK3N5biByZWdpb24gIGhvZ0FPcHRzIGNvbnRhaW5lZCBvbmVsaW5lIHN0YXJ0PSIuIiBlbmQ9Ils7XSJtZT1lLTEgY29udGFpbnM9aG9nQU9wdCBza2lwd2hpdGUKKworCisiIHJ1bGV0eXBlIGNvbW1hbmQKK3N5biBrZXl3b3JkIGhvZ1JUeXBlU3RhcnQgc2tpcHdoaXRlIHJ1bGV0eXBlIG5leHRncm91cD1ob2dSdWxlTmFtZSBza2lwd2hpdGUKK3N5biByZWdpb24gIGhvZ1J1bGVOYW1lICBjb250YWluZWQgIHN0YXJ0PSIuIiBlbmQ9IlxzIiBjb250YWlucz1ob2dGaWxlTmFtZSAgbmV4dGdyb3VwPWhvZ1JUeXBlUmVnaW9uCisiIHR5cGUgcnVsZXR5cGUgc3ViIHR5cGUKK3N5biByZWdpb24gaG9nUnR5cGVSZWdpb24gY29udGFpbmVkIHN0YXJ0PSJ7IiBlbmQ9In0iIG5leHRncm91cD1ob2dSVHlwZVN0YXJ0CitzeW4ga2V5d29yZCBob2dSVHlwZVN0YXJ0IHNraXB3aGl0ZSB0eXBlIG5leHRncm91cD1ob2dSdWxlVHlwZXMgc2tpcHdoaXRlCitzeW4gcmVnaW9uICBob2dSdWxlVHlwZXMgIGNvbnRhaW5lZCAgc3RhcnQ9Ii4iIGVuZD0iXHMiIGNvbnRhaW5zPWhvZ1J1bGVUeXBlIG5leHRncm91cD1ob2dPdXRTdGFydAorCisKKyIgdmFyIGNvbW1hbmQKK3N5biBrZXl3b3JkIGhvZ1ZhclN0YXJ0IHNraXB3aGl0ZSB2YXIgbmV4dGdyb3VwPWhvZ1ZhcklkZW50IHNraXB3aGl0ZQorc3luIHJlZ2lvbiAgaG9nVmFySWRlbnQgY29udGFpbmVkICBzdGFydD0iLiJocz1lKzEgZW5kPSJcc1wrImhlPXMtMSBjb250YWlucz1ob2dFbnZ2YXIgbmV4dGdyb3VwPWhvZ1ZhclJlZ2lvbiBza2lwd2hpdGUKK3N5biByZWdpb24gIGhvZ1ZhclJlZ2lvbiAgY29udGFpbmVkICBvbmVsaW5lICBzdGFydD0iLiIgY29udGFpbnM9aG9nSVBhZGRyLGhvZ0VudnZhcixob2dOdW1iZXIsaG9nU3RyaW5nLGhvZ0ZpbGVOYW1lIGVuZD0iJCJoZT1zLTEga2VlcGVuZCBza2lwd2hpdGUKKworIiBjb25maWcgY29tbWFuZAorc3luIGtleXdvcmQgaG9nQ29uZmlnU3RhcnQgY29uZmlnIHNraXB3aGl0ZSBuZXh0Z3JvdXA9aG9nQ29uZmlnVHlwZQorc3luIG1hdGNoIGhvZ0NvbmZpZ1R5cGUgY29udGFpbmVkICJcPGNsYXNzaWZpY2F0aW9uXD4iIG5leHRncm91cD1ob2dDb25maWdUeXBlUmVnaW9uIHNraXB3aGl0ZQorc3luIHJlZ2lvbiAgaG9nQ29uZmlnVHlwZVJlZ2lvbiBjb250YWluZWQgb25lbGluZQlzdGFydD0iOiJtcz1zKzEgZW5kPSIkIiBjb250YWlucz1ob2dOdW1iZXIsaG9nVGV4dCBrZWVwZW5kIHNraXB3aGl0ZQorCisKKyIgaW5jbHVkZSBjb21tYW5kCitzeW4ga2V5d29yZCBob2dJbmNTdGFydAlpbmNsdWRlICBza2lwd2hpdGUgbmV4dGdyb3VwPWhvZ0luY1JlZ2lvbgorc3luIHJlZ2lvbiAgaG9nSW5jUmVnaW9uICBjb250YWluZWQgIG9uZWxpbmUgIHN0YXJ0PSJcPiIgY29udGFpbnM9aG9nRmlsZU5hbWUsaG9nRW52dmFyIGVuZD0iJCIga2VlcGVuZAorCisiIHByZXByb2Nlc3NvciBjb21tYW5kCisiIGh0dHBfZGVjb2RlLCBtaW5mcmFnLCBwb3J0c2NhblstaWdub3JlaG9zdHNdCitzeW4ga2V5d29yZCBob2dQUHJTdGFydAlwcmVwcm9jZXNzb3IgIHNraXB3aGl0ZSBuZXh0Z3JvdXA9aG9nUFByCitzeW4gbWF0Y2ggaG9nUFByICAgY29udGFpbmVkICAiXDxzcGFkZVw+IiBuZXh0Z3JvdXA9aG9nUFByUmVnaW9uIHNraXB3aGl0ZQorc3luIG1hdGNoIGhvZ1BQciAgIGNvbnRhaW5lZCAgIlw8c3BhZGUtaG9tZW5ldFw+IiBuZXh0Z3JvdXA9aG9nUFByUmVnaW9uIHNraXB3aGl0ZQorc3luIG1hdGNoIGhvZ1BQciAgIGNvbnRhaW5lZCAgIlw8c3BhZGUtdGhyZXNobGVhcm5cPiIgbmV4dGdyb3VwPWhvZ1BQclJlZ2lvbiBza2lwd2hpdGUKK3N5biBtYXRjaCBob2dQUHIgICBjb250YWluZWQgICJcPHNwYWRlLWFkYXB0XD4iIG5leHRncm91cD1ob2dQUHJSZWdpb24gc2tpcHdoaXRlCitzeW4gbWF0Y2ggaG9nUFByICAgY29udGFpbmVkICAiXDxzcGFkZS1hZGFwdDJcPiIgbmV4dGdyb3VwPWhvZ1BQclJlZ2lvbiBza2lwd2hpdGUKK3N5biBtYXRjaCBob2dQUHIgICBjb250YWluZWQgICJcPHNwYWRlLWFkYXB0M1w+IiBuZXh0Z3JvdXA9aG9nUFByUmVnaW9uIHNraXB3aGl0ZQorc3luIG1hdGNoIGhvZ1BQciAgIGNvbnRhaW5lZCAgIlw8c3BhZGUtc3VydmV5XD4iIG5leHRncm91cD1ob2dQUHJSZWdpb24gc2tpcHdoaXRlCitzeW4gbWF0Y2ggaG9nUFByICAgY29udGFpbmVkICAiXDxkZWZyYWdcPiIgbmV4dGdyb3VwPWhvZ1BQclJlZ2lvbiBza2lwd2hpdGUKK3N5biBtYXRjaCBob2dQUHIgICBjb250YWluZWQgICJcPHRlbG5ldF9kZWNvZGVcPiIgbmV4dGdyb3VwPWhvZ1BQclJlZ2lvbiBza2lwd2hpdGUKK3N5biBtYXRjaCBob2dQUHIgICBjb250YWluZWQgICJcPHJwY19kZWNvZGVcPiIgbmV4dGdyb3VwPWhvZ1BQclJlZ2lvbiBza2lwd2hpdGUKK3N5biBtYXRjaCBob2dQUHIgICBjb250YWluZWQgICJcPGJvXD4iIG5leHRncm91cD1ob2dQUHJSZWdpb24gc2tpcHdoaXRlCitzeW4gbWF0Y2ggaG9nUFByICAgY29udGFpbmVkICAiXDxzdHJlYW1cPiIgbmV4dGdyb3VwPWhvZ1N0cmVhbVJlZ2lvbiBza2lwd2hpdGUKK3N5biBtYXRjaCBob2dQUHIgICBjb250YWluZWQgICJcPHN0cmVhbTJcPiIgbmV4dGdyb3VwPWhvZ1N0cmVhbVJlZ2lvbiBza2lwd2hpdGUKK3N5biBtYXRjaCBob2dQUHIgICBjb250YWluZWQgICJcPHN0cmVhbTNcPiIgbmV4dGdyb3VwPWhvZ1N0cmVhbVJlZ2lvbiBza2lwd2hpdGUKK3N5biBtYXRjaCBob2dQUHIgICBjb250YWluZWQgICJcPGh0dHBfZGVjb2RlXD4iIG5leHRncm91cD1ob2dQUHJSZWdpb24gc2tpcHdoaXRlCitzeW4gbWF0Y2ggaG9nUFByICAgY29udGFpbmVkICAiXDxtaW5mcmFnXD4iIG5leHRncm91cD1ob2dQUHJSZWdpb24gc2tpcHdoaXRlCitzeW4gbWF0Y2ggaG9nUFByICAgICBjb250YWluZWQgIlw8cG9ydHNjYW5bLWlnbm9yZWhvc3RzXSpcPiIgbmV4dGdyb3VwPWhvZ1BQclJlZ2lvbiBza2lwd2hpdGUKK3N5biByZWdpb24gIGhvZ1BQclJlZ2lvbiBjb250YWluZWQgb25lbGluZQlzdGFydD0iJCIgZW5kPSIkIiBrZWVwZW5kCitzeW4gcmVnaW9uICBob2dQUHJSZWdpb24gY29udGFpbmVkIG9uZWxpbmUJc3RhcnQ9IjoiIGVuZD0iJCIgY29udGFpbnM9aG9nTnVtYmVyLGhvZ0lQYWRkcixob2dFbnZ2YXIsaG9nRmlsZU5hbWUga2VlcGVuZAorc3luIGtleXdvcmQgaG9nU3RyZWFtQXJncyBjb250YWluZWQgdGltZW91dCBwb3J0cyBtYXhieXRlcworc3luIHJlZ2lvbiBob2dTdHJlYW1SZWdpb24gY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9IjoiIGVuZD0iJCIgY29udGFpbnM9aG9nU3RyZWFtQXJncyxob2dOdW1iZXIKKworIiBvdXRwdXQgY29tbWFuZAorc3luIGtleXdvcmQgaG9nT3V0U3RhcnQJb3V0cHV0ICBuZXh0Z3JvdXA9aG9nT3V0IHNraXB3aGl0ZQorIgorIiBhbGVydF9zeXNsb2cKK3N5biBtYXRjaCBob2dPdXQgICBjb250YWluZWQgICJcPGFsZXJ0X3N5c2xvZ1w+IiBuZXh0Z3JvdXA9aG9nU3lzbG9nUmVnaW9uIHNraXB3aGl0ZQorc3luIHJlZ2lvbiBob2dTeXNsb2dSZWdpb24gIGNvbnRhaW5lZCBzdGFydD0iOiIgZW5kPSIkIiBjb250YWlucz1ob2dTeXNGYWMsaG9nU3lzUHJpLGhvZ1N5c09wdCxob2dFbnZ2YXIgb25lbGluZSBza2lwd2hpdGUga2VlcGVuZAorIgorIiBhbGVydF9mYXN0IChmdWxsLHNtYix1bml4c29jaywgYW5kIHRjcGR1bXApCitzeW4gbWF0Y2ggaG9nT3V0ICAgY29udGFpbmVkICAiXDxhbGVydF9mYXN0XHxhbGVydF9mdWxsXHxhbGVydF9zbWJcfGFsZXJ0X3VuaXhzb2NrXHxsb2dfdGNwZHVtcFw+IiBuZXh0Z3JvdXA9aG9nTG9nRmlsZVJlZ2lvbiBza2lwd2hpdGUKK3N5biByZWdpb24gaG9nTG9nRmlsZVJlZ2lvbiAgY29udGFpbmVkIHN0YXJ0PSI6IiBlbmQ9IiQiIGNvbnRhaW5zPWhvZ0ZpbGVOYW1lLGhvZ0VudnZhciBvbmVsaW5lIHNraXB3aGl0ZSBrZWVwZW5kCisiCisiIGRhdGFiYXNlCitzeW4gbWF0Y2ggaG9nT3V0ICBjb250YWluZWQgIlw8ZGF0YWJhc2VcPiIgbmV4dGdyb3VwPWhvZ0RCVHlwZXMgc2tpcHdoaXRlCitzeW4gcmVnaW9uIGhvZ0RCVHlwZXMgY29udGFpbmVkIHN0YXJ0PSI6IiBlbmQ9IiwiIGNvbnRhaW5zPWhvZ0RCVHlwZSxob2dFbnZ2YXIgbmV4dGdyb3VwPWhvZ0RCU1JWcyBza2lwd2hpdGUKK3N5biByZWdpb24gaG9nREJTUlZzIGNvbnRhaW5lZCBzdGFydD0iXHNcKyIgZW5kPSIsIiBjb250YWlucz1ob2dEQlNSViBuZXh0Z3JvdXA9aG9nREJQYXJhbXMgc2tpcHdoaXRlCitzeW4gcmVnaW9uIGhvZ0RCUGFyYW1zIGNvbnRhaW5lZCBzdGFydD0iLiIgZW5kPSI9Im1lPWUtMSBjb250YWlucz1ob2dEQlBhcmFtICBuZXh0Z3JvdXA9aG9nREJWYWx1ZXMKK3N5biByZWdpb24gaG9nREJWYWx1ZXMgY29udGFpbmVkIHN0YXJ0PSIuIiBlbmQ9Ilw+IiBjb250YWlucz1ob2dOdW1iZXIsaG9nRW52dmFyLGhvZ0FzY2lpIG5leHRncm91cD1ob2dEQlBhcmFtcyBvbmVsaW5lIHNraXB3aGl0ZQorc3luIG1hdGNoIGhvZ0FzY2lpIGNvbnRhaW5lZCAiXDxcYVwrIgorIgorIiBsb2dfdGNwZHVtcAorc3luIG1hdGNoIGhvZ091dCAgIGNvbnRhaW5lZCAgIlw8bG9nX3RjcGR1bXBcPiIgbmV4dGdyb3VwPWhvZ0xvZ1JlZ2lvbiBza2lwd2hpdGUKK3N5biByZWdpb24gIGhvZ0xvZ1JlZ2lvbiAgb25lbGluZQlzdGFydD0iOiIgc2tpcHdoaXRlIGVuZD0iJCIgY29udGFpbnM9aG9nRW52dmFyLGhvZ0ZpbGVOYW1lIGtlZXBlbmQKKyIKKyIgeG1sCitzeW4ga2V5d29yZCBob2dYTUxUcmFucyBjb250YWluZWQgaHR0cCBodHRwcyB0Y3AgaWFwCitzeW4gbWF0Y2ggaG9nT3V0ICAgICBjb250YWluZWQgIlw8eG1sXD4iIG5leHRncm91cD1ob2dYTUxSZWdpb24gc2tpcHdoaXRlCitzeW4gcmVnaW9uIGhvZ1hNTFJlZ2lvbiBjb250YWluZWQgc3RhcnQ9IjoiIGVuZD0iLCIgY29udGFpbnM9aG9nWE1MQXJnLGhvZ0VudnZhciBuZXh0Z3JvdXA9aG9nWE1MUGFyYW1zIHNraXB3aGl0ZQorInN5biByZWdpb24gaG9nWE1MUGFyYW1zIGNvbnRhaW5lZCBzdGFydD0iLiIgZW5kPSI9Im1lPWUtMSBjb250YWlucz1ob2dYTUxQcm90byBuZXh0Z3JvdXA9aG9nWE1MUHJvdG9zCisic3luIHJlZ2lvbiBob2dYTUxQcm90b3MgY29udGFpbmVkIHN0YXJ0PSIuIiBlbmQ9Ilw+IiBjb250YWlucz1ob2dYTUxUcmFucyBuZXh0Z3JvdXA9aG9nWE1MUGFyYW1zCitzeW4gcmVnaW9uIGhvZ1hNTFBhcmFtcyBjb250YWluZWQgc3RhcnQ9Ii4iIGVuZD0iPSJtZT1lLTEgY29udGFpbnM9aG9nWE1MUGFyYW0gIG5leHRncm91cD1ob2dYTUxWYWx1ZQorc3luIHJlZ2lvbiBob2dYTUxWYWx1ZSBjb250YWluZWQgc3RhcnQ9Ii4iIGVuZD0iXD4iIGNvbnRhaW5zPWhvZ051bWJlcixob2dJUGFkZHIsaG9nRW52dmFyLGhvZ0FzY2lpLGhvZ0ZpbGVOYW1lIG5leHRncm91cD1ob2dYTUxQYXJhbXMgb25lbGluZSBza2lwd2hpdGUga2VlcGVuZAorIgorIiBGaWxlbmFtZQorc3luIG1hdGNoICAgaG9nRmlsZU5hbWUgIGNvbnRhaW5lZCAiWy0uL1s6YWxudW06XV9+XVwrIgorc3luIG1hdGNoICAgaG9nRmlsZU5hbWUgIGNvbnRhaW5lZCAiWy0uL1s6YWxudW06XV9+XVwrIgorIiBJUCBhZGRyZXNzCitzeW4gbWF0Y2ggICBob2dJUGFkZHIgICAiXDxcZFx7MSwzfVwuXGRcezEsM31cLlxkXHsxLDN9XC5cZFx7MSwzfVw+Igorc3luIG1hdGNoICAgaG9nSVBhZGRyICAgIlw8XGRcezEsM31cLlxkXHsxLDN9XC5cZFx7MSwzfVwuXGRcezEsM30vXGRcezEsMn1cPiIKKworc3luIGtleXdvcmQgaG9nUHJvdG8JdGNwIFRDUCBJQ01QIGljbXAgdWRwIFVEUAorCisiIGhvZyBhbGVydCBhZGRyZXNzIHBvcnQgcGFpcnMKKyIgaG9nIElQYWRkcmVzc2VzCitzeW4gbWF0Y2ggICBob2dJUGFkZHJBbmRQb3J0IGNvbnRhaW5lZAkiXDxcZFx7MSwzfVwuXGRcezEsM31cLlxkXHsxLDN9XC5cZFx7MSwzfVw+IiBza2lwd2hpdGUJCQluZXh0Z3JvdXA9aG9nUG9ydAorc3luIG1hdGNoICAgaG9nSVBhZGRyQW5kUG9ydCBjb250YWluZWQJIlw8XGRcezEsM31cLlxkXHsxLDN9XC5cZFx7MSwzfVwuXGRcezEsM30vXGRcezEsMn1cPiIgc2tpcHdoaXRlCQluZXh0Z3JvdXA9aG9nUG9ydAorc3luIG1hdGNoICAgaG9nSVBhZGRyQW5kUG9ydCBjb250YWluZWQgIlw8YW55XD4iIHNraXB3aGl0ZSBuZXh0Z3JvdXA9aG9nUG9ydAorc3luIG1hdGNoIGhvZ0lQYWRkckFuZFBvcnQgY29udGFpbmVkCSAiXCRcSVxpKiIgbmV4dGdyb3VwPWhvZ1BvcnQgc2tpcHdoaXRlCitzeW4gbWF0Y2ggaG9nSVBhZGRyQW5kUG9ydCBjb250YWluZWQgICAgICJcJHtcSVxpKn0iIG5leHRncm91cD1ob2dQb3J0IHNraXB3aGl0ZQorInN5biBtYXRjaCAgIGhvZ1BvcnQgY29udGFpbmVkICJbXCFdXD1bXDpdXD1cZFwrTFw9XD4iIHNraXB3aGl0ZQorc3luIG1hdGNoICAgaG9nUG9ydCBjb250YWluZWQgIltcOl1cPVxkXCtcPiIKK3N5biBtYXRjaCAgIGhvZ1BvcnQgY29udGFpbmVkICJbXCFdXD1cPGFueVw+IiBza2lwd2hpdGUKK3N5biBtYXRjaCAgIGhvZ1BvcnQgY29udGFpbmVkICJbXCFdXD1cZFwrTFw9OlxkXCtMXD1cPiIgc2tpcHdoaXRlCisKKyIgYWN0aW9uIGNvbW1hbmRzCitzeW4ga2V5d29yZCBob2c3RnVuY3Rpb25zIGFjdGl2YXRlIHNraXB3aGl0ZSBuZXh0Z3JvdXA9aG9nQWN0UmVnaW9uCitzeW4ga2V5d29yZCBob2c3RnVuY3Rpb25zIGR5bmFtaWMgc2tpcHdoaXRlIG5leHRncm91cD1ob2dBY3RSZWdpb24KK3N5biBrZXl3b3JkIGhvZ0FjdFN0YXJ0IGFsZXJ0IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aG9nQWN0UmVnaW9uCitzeW4ga2V5d29yZCBob2dBY3RTdGFydCBsb2cgc2tpcHdoaXRlIG5leHRncm91cD1ob2dBY3RSZWdpb24KK3N5biBrZXl3b3JkIGhvZ0FjdFN0YXJ0IHBhc3Mgc2tpcHdoaXRlIG5leHRncm91cD1ob2dBY3RSZWdpb24KKworc3luIHJlZ2lvbiBob2dBY3RSZWdpb24gY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9InRjcFx8VENQXHx1ZHBcfFVEUFx8aWNtcFx8SUNNUCIgZW5kPSJcc1wrIm1lPXMtMSBuZXh0Z3JvdXA9aG9nQWN0U291cmNlIG9uZWxpbmUga2VlcGVuZCBza2lwd2hpdGUKK3N5biByZWdpb24gaG9nQWN0U291cmNlIGNvbnRhaW5lZCBvbmVsaW5lIGNvbnRhaW5zPWhvZ0lQYWRkckFuZFBvcnQgc3RhcnQ9IlxzXCsibXM9ZSsxIGVuZD0iLT5cfDw+Im1lPWUtMiAgb25lbGluZSBrZWVwZW5kIHNraXB3aGl0ZSBuZXh0Z3JvdXA9aG9nQWN0RGVzdAorc3luIHJlZ2lvbiBob2dBY3REZXN0IGNvbnRhaW5lZCBvbmVsaW5lIGNvbnRhaW5zPWhvZ0lQYWRkckFuZFBvcnQgc3RhcnQ9Ii0+XHw8PiIgZW5kPSIkIiAgb25lbGluZSBrZWVwZW5kCitzeW4gcmVnaW9uIGhvZ0FjdERlc3QgY29udGFpbmVkIG9uZWxpbmUgY29udGFpbnM9aG9nSVBhZGRyQW5kUG9ydCBzdGFydD0iLT5cfDw+IiBlbmQ9IigibWU9ZS0xICBvbmVsaW5lIGtlZXBlbmQgc2tpcHdoaXRlIG5leHRncm91cD1ob2dSdWxlcworCisKKyIgPT09PT09PT09PT09PT09PT09PT0KK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9ob2dfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfaG9nX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisiIFRoZSBkZWZhdWx0IG1ldGhvZHMgZm9yIGhpZ2hsaWdodGluZy4gIENhbiBiZSBvdmVycmlkZGVuIGxhdGVyCisgIEhpTGluayBob2dDb21tZW50CQlDb21tZW50CisgIEhpTGluayBob2dMaW5lQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgaG9nQXNjaWkJCUNvbnN0YW50CisgIEhpTGluayBob2dDb21tZW50U3RyaW5nCUNvbnN0YW50CisgIEhpTGluayBob2dGaWxlTmFtZQkJQ29uc3RhbnQKKyAgSGlMaW5rIGhvZ0lQYWRkcgkJQ29uc3RhbnQKKyAgSGlMaW5rIGhvZ05vdFBhdFNlcAkJQ29uc3RhbnQKKyAgSGlMaW5rIGhvZ051bWJlcgkJQ29uc3RhbnQKKyAgSGlMaW5rIGhvZ1RleHQJCUNvbnN0YW50CisgIEhpTGluayBob2dTdHJpbmcJCUNvbnN0YW50CisgIEhpTGluayBob2dTeXNGYWMJCUNvbnN0YW50CisgIEhpTGluayBob2dTeXNPcHQJCUNvbnN0YW50CisgIEhpTGluayBob2dTeXNQcmkJCUNvbnN0YW50CisiICBIaUxpbmsgaG9nQVN0ckdycAkJRXJyb3IKKyAgSGlMaW5rIGhvZ0p1bmsJCUVycm9yCisgIEhpTGluayBob2dFbnZ2YXIJCUlkZW50aWZpZXIKKyAgSGlMaW5rIGhvZ0lQYWRkckFuZFBvcnQJSWRlbnRpZmllcgorICBIaUxpbmsgaG9nVmFySWRlbnQJCUlkZW50aWZpZXIKKyAgSGlMaW5rIGhvZ0FUQUdPcHQJCVByZVByb2MKKyAgSGlMaW5rIGhvZ0FJUE9wdFZhbAkJUHJlUHJvYworICBIaUxpbmsgaG9nQVJlc3BPcHQJCVByZVByb2MKKyAgSGlMaW5rIGhvZ0FSZWFjdE9wdAkJUHJlUHJvYworICBIaUxpbmsgaG9nQUZsYWdPcHQJCVByZVByb2MKKyAgSGlMaW5rIGhvZ0FGcmFnT3B0CQlQcmVQcm9jCisgIEhpTGluayBob2dDb21tZW50VGl0bGUJUHJlUHJvYworICBIaUxpbmsgaG9nREJUeXBlCQlQcmVQcm9jCisgIEhpTGluayBob2dEQlNSVgkJUHJlUHJvYworICBIaUxpbmsgaG9nUG9ydAkJUHJlUHJvYworICBIaUxpbmsgaG9nQVJlZkdycHMJCVByZVByb2MKKyAgSGlMaW5rIGhvZ1Nlc3Npb25WYWwJCVByZVByb2MKKyAgSGlMaW5rIGhvZ1hNTEFyZwkJUHJlUHJvYworICBIaUxpbmsgaG9nQVJQQ09wdAkJUHJlUHJvYworICBIaUxpbmsgaG9nUGF0U2VwCQlTcGVjaWFsCisgIEhpTGluayBob2c3RnVuY3Rpb25zCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGhvZ0FjdFN0YXJ0CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGhvZ0luY1N0YXJ0CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGhvZ0NvbmZpZ1N0YXJ0CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGhvZ091dFN0YXJ0CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGhvZ1BQclN0YXJ0CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGhvZ1ZhclN0YXJ0CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGhvZ1JUeXBlU3RhcnQJCVN0YXRlbWVudAorICBIaUxpbmsgaG9nVG9kbwkJVG9kbworICBIaUxpbmsgaG9nUnVsZVR5cGUJCVR5cGUKKyAgSGlMaW5rIGhvZ0FGT3B0CQlUeXBlCisgIEhpTGluayBob2dBTm9WYWwJCVR5cGUKKyAgSGlMaW5rIGhvZ0FTdHJPcHQJCVR5cGUKKyAgSGlMaW5rIGhvZ0FOT3B0CQlUeXBlCisgIEhpTGluayBob2dBT3B0CQlUeXBlCisgIEhpTGluayBob2dEQlBhcmFtCQlUeXBlCisgIEhpTGluayBob2dTdHJlYW1BcmdzCQlUeXBlCisgIEhpTGluayBob2dPdXQJCQlUeXBlCisgIEhpTGluayBob2dQUHIJCQlUeXBlCisgIEhpTGluayAgaG9nQ29uZmlnVHlwZQkJVHlwZQorICBIaUxpbmsgaG9nQWN0UmVnaW9uCQlUeXBlCisgIEhpTGluayBob2dQcm90bwkJVHlwZQorICBIaUxpbmsgaG9nWE1MUGFyYW0JCVR5cGUKKyAgSGlMaW5rIHJlc3AJCQlUb2RvCisgIEhpTGluayBjTGFiZWwJCQlMYWJlbAorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiaG9nIgorCisiIGhvZzogY3B3PTU5CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9odG1sLnZpbSBiL3J1bnRpbWUvc3ludGF4L2h0bWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MmJhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9odG1sLnZpbQpAQCAtMCwwICsxLDI5MSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUhUTUwKKyIgTWFpbnRhaW5lcjoJQ2xhdWRpbyBGbGVpbmVyIDxjbGF1ZGlvQGZsZWluZXIuY29tPgorIiBVUkw6CQlodHRwOi8vd3d3LmZsZWluZXIuY29tL3ZpbS9zeW50YXgvaHRtbC52aW0KKyIgTGFzdCBDaGFuZ2U6ICAyMDA0IE1heSAxNgorCisiIFBsZWFzZSBjaGVjayA6aGVscCBodG1sLnZpbSBmb3Igc29tZSBjb21tZW50cyBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9ucworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3ludGF4IGNsZWFyCisgIGVsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorICBlbmRpZgorICBsZXQgbWFpbl9zeW50YXggPSAnaHRtbCcKK2VuZGlmCisKKyIgZG9uJ3QgdXNlIHN0YW5kYXJkIEhpTGluaywgaXQgd2lsbCBub3Qgd29yayB3aXRoIGluY2x1ZGVkIHN5bnRheCBmaWxlcworaWYgdmVyc2lvbiA8IDUwOAorICBjb21tYW5kISAtbmFyZ3M9KyBIdG1sSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CitlbHNlCisgIGNvbW1hbmQhIC1uYXJncz0rIEh0bWxIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CitlbmRpZgorCisKK3N5biBjYXNlIGlnbm9yZQorCisiIG1hcmsgaWxsZWdhbCBjaGFyYWN0ZXJzCitzeW4gbWF0Y2ggaHRtbEVycm9yICJbPD4mXSIKKworCisiIHRhZ3MKK3N5biByZWdpb24gIGh0bWxTdHJpbmcgICBjb250YWluZWQgc3RhcnQ9KyIrIGVuZD0rIisgY29udGFpbnM9aHRtbFNwZWNpYWxDaGFyLGphdmFTY3JpcHRFeHByZXNzaW9uLEBodG1sUHJlcHJvYworc3luIHJlZ2lvbiAgaHRtbFN0cmluZyAgIGNvbnRhaW5lZCBzdGFydD0rJysgZW5kPSsnKyBjb250YWlucz1odG1sU3BlY2lhbENoYXIsamF2YVNjcmlwdEV4cHJlc3Npb24sQGh0bWxQcmVwcm9jCitzeW4gbWF0Y2ggICBodG1sVmFsdWUgICAgY29udGFpbmVkICI9W1x0IF0qW14nIiBcdD5dW14gXHQ+XSoiaHM9cysxICAgY29udGFpbnM9amF2YVNjcmlwdEV4cHJlc3Npb24sQGh0bWxQcmVwcm9jCitzeW4gcmVnaW9uICBodG1sRW5kVGFnCQkgICBzdGFydD0rPC8rCSAgIGVuZD0rPisgY29udGFpbnM9aHRtbFRhZ04saHRtbFRhZ0Vycm9yCitzeW4gcmVnaW9uICBodG1sVGFnCQkgICBzdGFydD0rPFteL10rICAgZW5kPSs+KyBjb250YWlucz1odG1sVGFnTixodG1sU3RyaW5nLGh0bWxBcmcsaHRtbFZhbHVlLGh0bWxUYWdFcnJvcixodG1sRXZlbnQsaHRtbENzc0RlZmluaXRpb24sQGh0bWxQcmVwcm9jLEBodG1sQXJnQ2x1c3Rlcgorc3luIG1hdGNoICAgaHRtbFRhZ04gICAgIGNvbnRhaW5lZCArPFxzKlstYS16QS1aMC05XVwrK2hzPXMrMSBjb250YWlucz1odG1sVGFnTmFtZSxodG1sU3BlY2lhbFRhZ05hbWUsQGh0bWxUYWdOYW1lQ2x1c3Rlcgorc3luIG1hdGNoICAgaHRtbFRhZ04gICAgIGNvbnRhaW5lZCArPC9ccypbLWEtekEtWjAtOV1cKytocz1zKzIgY29udGFpbnM9aHRtbFRhZ05hbWUsaHRtbFNwZWNpYWxUYWdOYW1lLEBodG1sVGFnTmFtZUNsdXN0ZXIKK3N5biBtYXRjaCAgIGh0bWxUYWdFcnJvciBjb250YWluZWQgIltePl08Im1zPXMrMQorCisKKyIgdGFnIG5hbWVzCitzeW4ga2V5d29yZCBodG1sVGFnTmFtZSBjb250YWluZWQgYWRkcmVzcyBhcHBsZXQgYXJlYSBhIGJhc2UgYmFzZWZvbnQKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBiaWcgYmxvY2txdW90ZSBiciBjYXB0aW9uIGNlbnRlcgorc3luIGtleXdvcmQgaHRtbFRhZ05hbWUgY29udGFpbmVkIGNpdGUgY29kZSBkZCBkZm4gZGlyIGRpdiBkbCBkdCBmb250CitzeW4ga2V5d29yZCBodG1sVGFnTmFtZSBjb250YWluZWQgZm9ybSBociBodG1sIGltZworc3luIGtleXdvcmQgaHRtbFRhZ05hbWUgY29udGFpbmVkIGlucHV0IGlzaW5kZXgga2JkIGxpIGxpbmsgbWFwIG1lbnUKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBtZXRhIG9sIG9wdGlvbiBwYXJhbSBwcmUgcCBzYW1wIHNwYW4KK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBzZWxlY3Qgc21hbGwgc3RyaWtlIHN1YiBzdXAKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCB0YWJsZSB0ZCB0ZXh0YXJlYSB0aCB0ciB0dCB1bCB2YXIgeG1wCitzeW4gbWF0Y2ggaHRtbFRhZ05hbWUgY29udGFpbmVkICJcPFwoYlx8aVx8dVx8aFsxLTZdXHxlbVx8c3Ryb25nXHxoZWFkXHxib2R5XHx0aXRsZVwpXD4iCisKKyIgbmV3IGh0bWwgNC4wIHRhZ3MKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBhYmJyIGFjcm9ueW0gYmRvIGJ1dHRvbiBjb2wgbGFiZWwKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBjb2xncm91cCBkZWwgZmllbGRzZXQgaWZyYW1lIGlucyBsZWdlbmQKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBvYmplY3Qgb3B0Z3JvdXAgcSBzIHRib2R5IHRmb290IHRoZWFkCisKKyIgbGVnYWwgYXJnIG5hbWVzCitzeW4ga2V5d29yZCBodG1sQXJnIGNvbnRhaW5lZCBhY3Rpb24KK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIGFsaWduIGFsaW5rIGFsdCBhcmNoaXZlIGJhY2tncm91bmQgYmdjb2xvcgorc3luIGtleXdvcmQgaHRtbEFyZyBjb250YWluZWQgYm9yZGVyIGJvcmRlcmNvbG9yIGNlbGxwYWRkaW5nCitzeW4ga2V5d29yZCBodG1sQXJnIGNvbnRhaW5lZCBjZWxsc3BhY2luZyBjaGVja2VkIGNsYXNzIGNsZWFyIGNvZGUgY29kZWJhc2UgY29sb3IKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIGNvbHMgY29sc3BhbiBjb250ZW50IGNvb3JkcyBlbmN0eXBlIGZhY2UKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIGd1dHRlciBoZWlnaHQgaHNwYWNlIGlkCitzeW4ga2V5d29yZCBodG1sQXJnIGNvbnRhaW5lZCBsaW5rIGxvd3NyYyBtYXJnaW5oZWlnaHQKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIG1hcmdpbndpZHRoIG1heGxlbmd0aCBtZXRob2QgbmFtZSBwcm9tcHQKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIHJlbCByZXYgcm93cyByb3dzcGFuIHNjcm9sbGluZyBzZWxlY3RlZCBzaGFwZQorc3luIGtleXdvcmQgaHRtbEFyZyBjb250YWluZWQgc2l6ZSBzcmMgc3RhcnQgdGFyZ2V0IHRleHQgdHlwZSB1cmwKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIHVzZW1hcCBpc21hcCB2YWxpZ24gdmFsdWUgdmxpbmsgdnNwYWNlIHdpZHRoIHdyYXAKK3N5biBtYXRjaCAgIGh0bWxBcmcgY29udGFpbmVkICJcPFwoaHR0cC1lcXVpdlx8aHJlZlx8dGl0bGVcKT0ibWU9ZS0xCisKKyIgTmV0c2NhcGUgZXh0ZW5zaW9ucworc3luIGtleXdvcmQgaHRtbFRhZ05hbWUgY29udGFpbmVkIGZyYW1lIG5vZnJhbWVzIGZyYW1lc2V0IG5vYnIgYmxpbmsKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBsYXllciBpbGF5ZXIgbm9sYXllciBzcGFjZXIKK3N5biBrZXl3b3JkIGh0bWxBcmcgICAgIGNvbnRhaW5lZCBmcmFtZWJvcmRlciBub3Jlc2l6ZSBwYWdleCBwYWdleSBhYm92ZSBiZWxvdworc3luIGtleXdvcmQgaHRtbEFyZyAgICAgY29udGFpbmVkIGxlZnQgdG9wIHZpc2liaWxpdHkgY2xpcCBpZCBub3NoYWRlCitzeW4gbWF0Y2ggICBodG1sQXJnICAgICBjb250YWluZWQgIlw8ei1pbmRleFw+IgorCisiIE1pY3Jvc29mdCBleHRlbnNpb25zCitzeW4ga2V5d29yZCBodG1sVGFnTmFtZSBjb250YWluZWQgbWFycXVlZQorCisiIGh0bWwgNC4wIGFyZyBuYW1lcworc3luIG1hdGNoICAgaHRtbEFyZyBjb250YWluZWQgIlw8XChhY2NlcHQtY2hhcnNldFx8bGFiZWxcKVw+Igorc3luIGtleXdvcmQgaHRtbEFyZyBjb250YWluZWQgYWJiciBhY2NlcHQgYWNjZXNza2V5IGF4aXMgY2hhciBjaGFyb2ZmIGNoYXJzZXQKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIGNpdGUgY2xhc3NpZCBjb2RldHlwZSBjb21wYWN0IGRhdGEgZGF0ZXRpbWUKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIGRlY2xhcmUgZGVmZXIgZGlyIGRpc2FibGVkIGZvciBmcmFtZQorc3luIGtleXdvcmQgaHRtbEFyZyBjb250YWluZWQgaGVhZGVycyBocmVmbGFuZyBsYW5nIGxhbmd1YWdlIGxvbmdkZXNjCitzeW4ga2V5d29yZCBodG1sQXJnIGNvbnRhaW5lZCBtdWx0aXBsZSBub2hyZWYgbm93cmFwIG9iamVjdCBwcm9maWxlIHJlYWRvbmx5CitzeW4ga2V5d29yZCBodG1sQXJnIGNvbnRhaW5lZCBydWxlcyBzY2hlbWUgc2NvcGUgc3BhbiBzdGFuZGJ5IHN0eWxlCitzeW4ga2V5d29yZCBodG1sQXJnIGNvbnRhaW5lZCBzdW1tYXJ5IHRhYmluZGV4IHZhbHVldHlwZSB2ZXJzaW9uCisKKyIgc3BlY2lhbCBjaGFyYWN0ZXJzCitzeW4gbWF0Y2ggaHRtbFNwZWNpYWxDaGFyICImI1w9WzAtOUEtWmEtel1cezEsOH07IgorCisiIENvbW1lbnRzICh0aGUgcmVhbCBvbmVzIG9yIHRoZSBvbGQgbmV0c2NhcGUgb25lcykKK2lmIGV4aXN0cygiaHRtbF93cm9uZ19jb21tZW50cyIpCisgIHN5biByZWdpb24gaHRtbENvbW1lbnQJCXN0YXJ0PSs8IS0tKwllbmQ9Ky0tXHMqPisKK2Vsc2UKKyAgc3luIHJlZ2lvbiBodG1sQ29tbWVudAkJc3RhcnQ9KzwhKwllbmQ9Kz4rICAgY29udGFpbnM9aHRtbENvbW1lbnRQYXJ0LGh0bWxDb21tZW50RXJyb3IKKyAgc3luIG1hdGNoICBodG1sQ29tbWVudEVycm9yIGNvbnRhaW5lZCAiW14+PCFdIgorICBzeW4gcmVnaW9uIGh0bWxDb21tZW50UGFydCAgY29udGFpbmVkIHN0YXJ0PSstLSsgICAgICBlbmQ9Ky0tXHMqKyAgY29udGFpbnM9QGh0bWxQcmVQcm9jCitlbmRpZgorc3luIHJlZ2lvbiBodG1sQ29tbWVudAkJCXN0YXJ0PSs8IURPQ1RZUEUrIGtlZXBlbmQgZW5kPSs+KworCisiIHNlcnZlci1wYXJzZWQgY29tbWFuZHMKK3N5biByZWdpb24gaHRtbFByZVByb2Mgc3RhcnQ9KzwhLS0jKyBlbmQ9Ky0tPisgY29udGFpbnM9aHRtbFByZVN0bXQsaHRtbFByZUVycm9yLGh0bWxQcmVBdHRyCitzeW4gbWF0Y2ggaHRtbFByZVN0bXQgY29udGFpbmVkICI8IS0tI1woY29uZmlnXHxlY2hvXHxleGVjXHxmc2l6ZVx8Zmxhc3Rtb2RcfGluY2x1ZGVcfHByaW50ZW52XHxzZXRcfGlmXHxlbGlmXHxlbHNlXHxlbmRpZlx8Z2VvZ3VpZGVcKVw+Igorc3luIG1hdGNoIGh0bWxQcmVFcnJvciBjb250YWluZWQgIjwhLS0jXFMqIm1zPXMrNAorc3luIG1hdGNoIGh0bWxQcmVBdHRyIGNvbnRhaW5lZCAiXHdcKz1bXiJdXFNcKyIgY29udGFpbnM9aHRtbFByZVByb2NBdHRyRXJyb3IsaHRtbFByZVByb2NBdHRyTmFtZQorc3luIHJlZ2lvbiBodG1sUHJlQXR0ciBjb250YWluZWQgc3RhcnQ9K1x3XCs9Iisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPWh0bWxQcmVQcm9jQXR0ck5hbWUga2VlcGVuZAorc3luIG1hdGNoIGh0bWxQcmVQcm9jQXR0ckVycm9yIGNvbnRhaW5lZCAiXHdcKz0iaGU9ZS0xCitzeW4gbWF0Y2ggaHRtbFByZVByb2NBdHRyTmFtZSBjb250YWluZWQgIlwoZXhwclx8ZXJybXNnXHxzaXplZm10XHx0aW1lZm10XHx2YXJcfGNnaVx8Y21kXHxmaWxlXHx2aXJ0dWFsXHx2YWx1ZVwpPSJoZT1lLTEKKworaWYgIWV4aXN0cygiaHRtbF9ub19yZW5kZXJpbmciKQorICAiIHJlbmRlcmluZworICBzeW4gY2x1c3RlciBodG1sVG9wIGNvbnRhaW5zPUBTcGVsbCxodG1sVGFnLGh0bWxFbmRUYWcsaHRtbFNwZWNpYWxDaGFyLGh0bWxQcmVQcm9jLGh0bWxDb21tZW50LGh0bWxMaW5rLGphdmFTY3JpcHQsQGh0bWxQcmVwcm9jCisKKyAgc3luIHJlZ2lvbiBodG1sQm9sZCBzdGFydD0iPGJcPiIgZW5kPSI8L2I+Im1lPWUtNCBjb250YWlucz1AaHRtbFRvcCxodG1sQm9sZFVuZGVybGluZSxodG1sQm9sZEl0YWxpYworICBzeW4gcmVnaW9uIGh0bWxCb2xkIHN0YXJ0PSI8c3Ryb25nXD4iIGVuZD0iPC9zdHJvbmc+Im1lPWUtOSBjb250YWlucz1AaHRtbFRvcCxodG1sQm9sZFVuZGVybGluZSxodG1sQm9sZEl0YWxpYworICBzeW4gcmVnaW9uIGh0bWxCb2xkVW5kZXJsaW5lIGNvbnRhaW5lZCBzdGFydD0iPHVcPiIgZW5kPSI8L3U+Im1lPWUtNCBjb250YWlucz1AaHRtbFRvcCxodG1sQm9sZFVuZGVybGluZUl0YWxpYworICBzeW4gcmVnaW9uIGh0bWxCb2xkSXRhbGljIGNvbnRhaW5lZCBzdGFydD0iPGlcPiIgZW5kPSI8L2k+Im1lPWUtNCBjb250YWlucz1AaHRtbFRvcCxodG1sQm9sZEl0YWxpY1VuZGVybGluZQorICBzeW4gcmVnaW9uIGh0bWxCb2xkSXRhbGljIGNvbnRhaW5lZCBzdGFydD0iPGVtXD4iIGVuZD0iPC9lbT4ibWU9ZS01IGNvbnRhaW5zPUBodG1sVG9wLGh0bWxCb2xkSXRhbGljVW5kZXJsaW5lCisgIHN5biByZWdpb24gaHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSI8aVw+IiBlbmQ9IjwvaT4ibWU9ZS00IGNvbnRhaW5zPUBodG1sVG9wCisgIHN5biByZWdpb24gaHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSI8ZW1cPiIgZW5kPSI8L2VtPiJtZT1lLTUgY29udGFpbnM9QGh0bWxUb3AKKyAgc3luIHJlZ2lvbiBodG1sQm9sZEl0YWxpY1VuZGVybGluZSBjb250YWluZWQgc3RhcnQ9Ijx1XD4iIGVuZD0iPC91PiJtZT1lLTQgY29udGFpbnM9QGh0bWxUb3AsaHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMKKworICBzeW4gcmVnaW9uIGh0bWxVbmRlcmxpbmUgc3RhcnQ9Ijx1XD4iIGVuZD0iPC91PiJtZT1lLTQgY29udGFpbnM9QGh0bWxUb3AsaHRtbFVuZGVybGluZUJvbGQsaHRtbFVuZGVybGluZUl0YWxpYworICBzeW4gcmVnaW9uIGh0bWxVbmRlcmxpbmVCb2xkIGNvbnRhaW5lZCBzdGFydD0iPGJcPiIgZW5kPSI8L2I+Im1lPWUtNCBjb250YWlucz1AaHRtbFRvcCxodG1sVW5kZXJsaW5lQm9sZEl0YWxpYworICBzeW4gcmVnaW9uIGh0bWxVbmRlcmxpbmVCb2xkIGNvbnRhaW5lZCBzdGFydD0iPHN0cm9uZ1w+IiBlbmQ9Ijwvc3Ryb25nPiJtZT1lLTkgY29udGFpbnM9QGh0bWxUb3AsaHRtbFVuZGVybGluZUJvbGRJdGFsaWMKKyAgc3luIHJlZ2lvbiBodG1sVW5kZXJsaW5lSXRhbGljIGNvbnRhaW5lZCBzdGFydD0iPGlcPiIgZW5kPSI8L2k+Im1lPWUtNCBjb250YWlucz1AaHRtbFRvcCxodG1sVW5kZXJsaW5lSXRhbGljQm9sZAorICBzeW4gcmVnaW9uIGh0bWxVbmRlcmxpbmVJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSI8ZW1cPiIgZW5kPSI8L2VtPiJtZT1lLTUgY29udGFpbnM9QGh0bWxUb3AsaHRtbFVuZGVybGluZUl0YWxpY0JvbGQKKyAgc3luIHJlZ2lvbiBodG1sVW5kZXJsaW5lSXRhbGljQm9sZCBjb250YWluZWQgc3RhcnQ9IjxiXD4iIGVuZD0iPC9iPiJtZT1lLTQgY29udGFpbnM9QGh0bWxUb3AKKyAgc3luIHJlZ2lvbiBodG1sVW5kZXJsaW5lSXRhbGljQm9sZCBjb250YWluZWQgc3RhcnQ9IjxzdHJvbmdcPiIgZW5kPSI8L3N0cm9uZz4ibWU9ZS05IGNvbnRhaW5zPUBodG1sVG9wCisgIHN5biByZWdpb24gaHRtbFVuZGVybGluZUJvbGRJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSI8aVw+IiBlbmQ9IjwvaT4ibWU9ZS00IGNvbnRhaW5zPUBodG1sVG9wCisgIHN5biByZWdpb24gaHRtbFVuZGVybGluZUJvbGRJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSI8ZW1cPiIgZW5kPSI8L2VtPiJtZT1lLTUgY29udGFpbnM9QGh0bWxUb3AKKworICBzeW4gcmVnaW9uIGh0bWxJdGFsaWMgc3RhcnQ9IjxpXD4iIGVuZD0iPC9pPiJtZT1lLTQgY29udGFpbnM9QGh0bWxUb3AsaHRtbEl0YWxpY0JvbGQsaHRtbEl0YWxpY1VuZGVybGluZQorICBzeW4gcmVnaW9uIGh0bWxJdGFsaWMgc3RhcnQ9IjxlbVw+IiBlbmQ9IjwvZW0+Im1lPWUtNSBjb250YWlucz1AaHRtbFRvcAorICBzeW4gcmVnaW9uIGh0bWxJdGFsaWNCb2xkIGNvbnRhaW5lZCBzdGFydD0iPGJcPiIgZW5kPSI8L2I+Im1lPWUtNCBjb250YWlucz1AaHRtbFRvcCxodG1sSXRhbGljQm9sZFVuZGVybGluZQorICBzeW4gcmVnaW9uIGh0bWxJdGFsaWNCb2xkIGNvbnRhaW5lZCBzdGFydD0iPHN0cm9uZ1w+IiBlbmQ9Ijwvc3Ryb25nPiJtZT1lLTkgY29udGFpbnM9QGh0bWxUb3AsaHRtbEl0YWxpY0JvbGRVbmRlcmxpbmUKKyAgc3luIHJlZ2lvbiBodG1sSXRhbGljQm9sZFVuZGVybGluZSBjb250YWluZWQgc3RhcnQ9Ijx1XD4iIGVuZD0iPC91PiJtZT1lLTQgY29udGFpbnM9QGh0bWxUb3AKKyAgc3luIHJlZ2lvbiBodG1sSXRhbGljVW5kZXJsaW5lIGNvbnRhaW5lZCBzdGFydD0iPHVcPiIgZW5kPSI8L3U+Im1lPWUtNCBjb250YWlucz1AaHRtbFRvcCxodG1sSXRhbGljVW5kZXJsaW5lQm9sZAorICBzeW4gcmVnaW9uIGh0bWxJdGFsaWNVbmRlcmxpbmVCb2xkIGNvbnRhaW5lZCBzdGFydD0iPGJcPiIgZW5kPSI8L2I+Im1lPWUtNCBjb250YWlucz1AaHRtbFRvcAorICBzeW4gcmVnaW9uIGh0bWxJdGFsaWNVbmRlcmxpbmVCb2xkIGNvbnRhaW5lZCBzdGFydD0iPHN0cm9uZ1w+IiBlbmQ9Ijwvc3Ryb25nPiJtZT1lLTkgY29udGFpbnM9QGh0bWxUb3AKKworICBzeW4gcmVnaW9uIGh0bWxMaW5rIHN0YXJ0PSI8YVw+XF9bXj5dKlw8aHJlZlw+IiBlbmQ9IjwvYT4ibWU9ZS00IGNvbnRhaW5zPUBTcGVsbCxodG1sVGFnLGh0bWxFbmRUYWcsaHRtbFNwZWNpYWxDaGFyLGh0bWxQcmVQcm9jLGh0bWxDb21tZW50LGphdmFTY3JpcHQsQGh0bWxQcmVwcm9jCisgIHN5biByZWdpb24gaHRtbEgxIHN0YXJ0PSI8aDFcPiIgZW5kPSI8L2gxPiJtZT1lLTUgY29udGFpbnM9QGh0bWxUb3AKKyAgc3luIHJlZ2lvbiBodG1sSDIgc3RhcnQ9IjxoMlw+IiBlbmQ9IjwvaDI+Im1lPWUtNSBjb250YWlucz1AaHRtbFRvcAorICBzeW4gcmVnaW9uIGh0bWxIMyBzdGFydD0iPGgzXD4iIGVuZD0iPC9oMz4ibWU9ZS01IGNvbnRhaW5zPUBodG1sVG9wCisgIHN5biByZWdpb24gaHRtbEg0IHN0YXJ0PSI8aDRcPiIgZW5kPSI8L2g0PiJtZT1lLTUgY29udGFpbnM9QGh0bWxUb3AKKyAgc3luIHJlZ2lvbiBodG1sSDUgc3RhcnQ9IjxoNVw+IiBlbmQ9IjwvaDU+Im1lPWUtNSBjb250YWlucz1AaHRtbFRvcAorICBzeW4gcmVnaW9uIGh0bWxINiBzdGFydD0iPGg2XD4iIGVuZD0iPC9oNj4ibWU9ZS01IGNvbnRhaW5zPUBodG1sVG9wCisgIHN5biByZWdpb24gaHRtbEhlYWQgc3RhcnQ9IjxoZWFkXD4iIGVuZD0iPC9oZWFkPiJtZT1lLTcgZW5kPSI8Ym9keVw+Im1lPWUtNSBlbmQ9IjxoWzEtNl1cPiJtZT1lLTMgY29udGFpbnM9aHRtbFRhZyxodG1sRW5kVGFnLGh0bWxTcGVjaWFsQ2hhcixodG1sUHJlUHJvYyxodG1sQ29tbWVudCxodG1sTGluayxodG1sVGl0bGUsamF2YVNjcmlwdCxjc3NTdHlsZSxAaHRtbFByZXByb2MKKyAgc3luIHJlZ2lvbiBodG1sVGl0bGUgc3RhcnQ9Ijx0aXRsZVw+IiBlbmQ9IjwvdGl0bGU+Im1lPWUtOCBjb250YWlucz1odG1sVGFnLGh0bWxFbmRUYWcsaHRtbFNwZWNpYWxDaGFyLGh0bWxQcmVQcm9jLGh0bWxDb21tZW50LGphdmFTY3JpcHQsQGh0bWxQcmVwcm9jCitlbmRpZgorCitzeW4ga2V5d29yZCBodG1sVGFnTmFtZQkJY29udGFpbmVkIG5vc2NyaXB0CitzeW4ga2V5d29yZCBodG1sU3BlY2lhbFRhZ05hbWUgIGNvbnRhaW5lZCBzY3JpcHQgc3R5bGUKK2lmIG1haW5fc3ludGF4ICE9ICdqYXZhJyB8fCBleGlzdHMoImphdmFfamF2YXNjcmlwdCIpCisgICIgSkFWQSBTQ1JJUFQKKyAgc3luIGluY2x1ZGUgQGh0bWxKYXZhU2NyaXB0IDxzZmlsZT46cDpoL2phdmFzY3JpcHQudmltCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKKyAgc3luIHJlZ2lvbiAgamF2YVNjcmlwdCBzdGFydD0rPHNjcmlwdFtePl0qPisga2VlcGVuZCBlbmQ9Kzwvc2NyaXB0PittZT1zLTEgY29udGFpbnM9QGh0bWxKYXZhU2NyaXB0LGh0bWxDc3NTdHlsZUNvbW1lbnQsaHRtbFNjcmlwdFRhZyxAaHRtbFByZXByb2MKKyAgc3luIHJlZ2lvbiAgaHRtbFNjcmlwdFRhZyAgICAgY29udGFpbmVkIHN0YXJ0PSs8c2NyaXB0KyBlbmQ9Kz4rICAgICAgIGNvbnRhaW5zPWh0bWxUYWdOLGh0bWxTdHJpbmcsaHRtbEFyZyxodG1sVmFsdWUsaHRtbFRhZ0Vycm9yLGh0bWxFdmVudAorICBIdG1sSGlMaW5rIGh0bWxTY3JpcHRUYWcgaHRtbFRhZworCisgICIgaHRtbCBldmVudHMgKGkuZS4gYXJndW1lbnRzIHRoYXQgaW5jbHVkZSBqYXZhc2NyaXB0IGNvbW1hbmRzKQorICBpZiBleGlzdHMoImh0bWxfZXh0ZW5kZWRfZXZlbnRzIikKKyAgICBzeW4gcmVnaW9uIGh0bWxFdmVudAljb250YWluZWQgc3RhcnQ9K1w8b25cYVwrXHMqPVtcdCBdKicrIGVuZD0rJysgY29udGFpbnM9aHRtbEV2ZW50U1EKKyAgICBzeW4gcmVnaW9uIGh0bWxFdmVudAljb250YWluZWQgc3RhcnQ9K1w8b25cYVwrXHMqPVtcdCBdKiIrIGVuZD0rIisgY29udGFpbnM9aHRtbEV2ZW50RFEKKyAgZWxzZQorICAgIHN5biByZWdpb24gaHRtbEV2ZW50CWNvbnRhaW5lZCBzdGFydD0rXDxvblxhXCtccyo9W1x0IF0qJysgZW5kPSsnKyBrZWVwZW5kIGNvbnRhaW5zPWh0bWxFdmVudFNRCisgICAgc3luIHJlZ2lvbiBodG1sRXZlbnQJY29udGFpbmVkIHN0YXJ0PStcPG9uXGFcK1xzKj1bXHQgXSoiKyBlbmQ9KyIrIGtlZXBlbmQgY29udGFpbnM9aHRtbEV2ZW50RFEKKyAgZW5kaWYKKyAgc3luIHJlZ2lvbiBodG1sRXZlbnRTUQljb250YWluZWQgc3RhcnQ9KycrbXM9cysxIGVuZD0rJyttZT1zLTEgY29udGFpbnM9QGh0bWxKYXZhU2NyaXB0CisgIHN5biByZWdpb24gaHRtbEV2ZW50RFEJY29udGFpbmVkIHN0YXJ0PSsiK21zPXMrMSBlbmQ9KyIrbWU9cy0xIGNvbnRhaW5zPUBodG1sSmF2YVNjcmlwdAorICBIdG1sSGlMaW5rIGh0bWxFdmVudFNRIGh0bWxFdmVudAorICBIdG1sSGlMaW5rIGh0bWxFdmVudERRIGh0bWxFdmVudAorCisgICIgYSBqYXZhc2NyaXB0IGV4cHJlc3Npb24gaXMgdXNlZCBhcyBhbiBhcmcgdmFsdWUKKyAgc3luIHJlZ2lvbiAgamF2YVNjcmlwdEV4cHJlc3Npb24gY29udGFpbmVkIHN0YXJ0PSsmeysga2VlcGVuZCBlbmQ9K307KyBjb250YWlucz1AaHRtbEphdmFTY3JpcHQsQGh0bWxQcmVwcm9jCitlbmRpZgorCitpZiBtYWluX3N5bnRheCAhPSAnamF2YScgfHwgZXhpc3RzKCJqYXZhX3ZiIikKKyAgIiBWQiBTQ1JJUFQKKyAgc3luIGluY2x1ZGUgQGh0bWxWYlNjcmlwdCA8c2ZpbGU+OnA6aC92Yi52aW0KKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorICBzeW4gcmVnaW9uICBqYXZhU2NyaXB0IHN0YXJ0PSs8c2NyaXB0IFtePl0qbGFuZ3VhZ2UgKj1bXj5dKnZic2NyaXB0W14+XSo+KyBrZWVwZW5kIGVuZD0rPC9zY3JpcHQ+K21lPXMtMSBjb250YWlucz1AaHRtbFZiU2NyaXB0LGh0bWxDc3NTdHlsZUNvbW1lbnQsaHRtbFNjcmlwdFRhZyxAaHRtbFByZXByb2MKK2VuZGlmCisKK3N5biBjbHVzdGVyIGh0bWxKYXZhU2NyaXB0ICAgICAgYWRkPUBodG1sUHJlcHJvYworCitpZiBtYWluX3N5bnRheCAhPSAnamF2YScgfHwgZXhpc3RzKCJqYXZhX2NzcyIpCisgICIgZW1iZWRkZWQgc3R5bGUgc2hlZXRzCisgIHN5biBrZXl3b3JkIGh0bWxBcmcJCWNvbnRhaW5lZCBtZWRpYQorICBzeW4gaW5jbHVkZSBAaHRtbENzcyA8c2ZpbGU+OnA6aC9jc3MudmltCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKKyAgc3luIHJlZ2lvbiBjc3NTdHlsZSBzdGFydD0rPHN0eWxlKyBrZWVwZW5kIGVuZD0rPC9zdHlsZT4rIGNvbnRhaW5zPUBodG1sQ3NzLGh0bWxUYWcsaHRtbEVuZFRhZyxodG1sQ3NzU3R5bGVDb21tZW50LEBodG1sUHJlcHJvYworICBzeW4gbWF0Y2ggaHRtbENzc1N0eWxlQ29tbWVudCBjb250YWluZWQgIlwoPCEtLVx8LS0+XCkiCisgIHN5biByZWdpb24gaHRtbENzc0RlZmluaXRpb24gbWF0Y2hncm91cD1odG1sQXJnIHN0YXJ0PSdzdHlsZT0iJyBrZWVwZW5kIG1hdGNoZ3JvdXA9aHRtbFN0cmluZyBlbmQ9JyInIGNvbnRhaW5zPWNzcy4qQXR0cixjc3MuKlByb3AsY3NzQ29tbWVudCxjc3NMZW5ndGgsY3NzQ29sb3IsY3NzVVJMLGNzc0ltcG9ydGFudCxjc3NFcnJvcixjc3NTdHJpbmcsQGh0bWxQcmVwcm9jCisgIEh0bWxIaUxpbmsgaHRtbFN0eWxlQXJnIGh0bWxTdHJpbmcKK2VuZGlmCisKK2lmIG1haW5fc3ludGF4ID09ICJodG1sIgorICAiIHN5bmNocm9uaXppbmcgKGRvZXMgbm90IGFsd2F5cyB3b3JrIGlmIGEgY29tbWVudCBpbmNsdWRlcyBsZWdhbAorICAiIGh0bWwgdGFncywgYnV0IGRvaW5nIGl0IHJpZ2h0IHdvdWxkIG1lYW4gdG8gYWx3YXlzIHN0YXJ0CisgICIgYXQgdGhlIGZpcnN0IGxpbmUsIHdoaWNoIGlzIHRvbyBzbG93KQorICBzeW4gc3luYyBtYXRjaCBodG1sSGlnaGxpZ2h0IGdyb3VwdGhlcmUgTk9ORSAiPFsvYS16QS1aXSIKKyAgc3luIHN5bmMgbWF0Y2ggaHRtbEhpZ2hsaWdodCBncm91cHRoZXJlIGphdmFTY3JpcHQgIjxzY3JpcHQiCisgIHN5biBzeW5jIG1hdGNoIGh0bWxIaWdobGlnaHRTa2lwICJeLipbJ1wiXS4qJCIKKyAgc3luIHN5bmMgbWlubGluZXM9MTAKK2VuZGlmCisKKyIgVGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2h0bWxfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfaHRtbF9zeW5faW5pdHMgPSAxCisgIGVuZGlmCisgIEh0bWxIaUxpbmsgaHRtbFRhZwkJCUZ1bmN0aW9uCisgIEh0bWxIaUxpbmsgaHRtbEVuZFRhZwkJCUlkZW50aWZpZXIKKyAgSHRtbEhpTGluayBodG1sQXJnCQkJVHlwZQorICBIdG1sSGlMaW5rIGh0bWxUYWdOYW1lCQlodG1sU3RhdGVtZW50CisgIEh0bWxIaUxpbmsgaHRtbFNwZWNpYWxUYWdOYW1lCQlFeGNlcHRpb24KKyAgSHRtbEhpTGluayBodG1sVmFsdWUJCQlTdHJpbmcKKyAgSHRtbEhpTGluayBodG1sU3BlY2lhbENoYXIJCVNwZWNpYWwKKworICBpZiAhZXhpc3RzKCJodG1sX25vX3JlbmRlcmluZyIpCisgICAgSHRtbEhpTGluayBodG1sSDEJCQkgICBUaXRsZQorICAgIEh0bWxIaUxpbmsgaHRtbEgyCQkJICAgaHRtbEgxCisgICAgSHRtbEhpTGluayBodG1sSDMJCQkgICBodG1sSDIKKyAgICBIdG1sSGlMaW5rIGh0bWxINAkJCSAgIGh0bWxIMworICAgIEh0bWxIaUxpbmsgaHRtbEg1CQkJICAgaHRtbEg0CisgICAgSHRtbEhpTGluayBodG1sSDYJCQkgICBodG1sSDUKKyAgICBIdG1sSGlMaW5rIGh0bWxIZWFkCQkJICAgUHJlUHJvYworICAgIEh0bWxIaUxpbmsgaHRtbFRpdGxlCQkgICBUaXRsZQorICAgIEh0bWxIaUxpbmsgaHRtbEJvbGRJdGFsaWNVbmRlcmxpbmUJICAgaHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMKKyAgICBIdG1sSGlMaW5rIGh0bWxVbmRlcmxpbmVCb2xkCSAgIGh0bWxCb2xkVW5kZXJsaW5lCisgICAgSHRtbEhpTGluayBodG1sVW5kZXJsaW5lSXRhbGljQm9sZAkgICBodG1sQm9sZFVuZGVybGluZUl0YWxpYworICAgIEh0bWxIaUxpbmsgaHRtbFVuZGVybGluZUJvbGRJdGFsaWMJICAgaHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMKKyAgICBIdG1sSGlMaW5rIGh0bWxJdGFsaWNVbmRlcmxpbmUJICAgaHRtbFVuZGVybGluZUl0YWxpYworICAgIEh0bWxIaUxpbmsgaHRtbEl0YWxpY0JvbGQJCSAgIGh0bWxCb2xkSXRhbGljCisgICAgSHRtbEhpTGluayBodG1sSXRhbGljQm9sZFVuZGVybGluZQkgICBodG1sQm9sZFVuZGVybGluZUl0YWxpYworICAgIEh0bWxIaUxpbmsgaHRtbEl0YWxpY1VuZGVybGluZUJvbGQJICAgaHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMKKyAgICBIdG1sSGlMaW5rIGh0bWxMaW5rCQkJICAgVW5kZXJsaW5lZAorICAgIGlmICFleGlzdHMoImh0bWxfbXlfcmVuZGVyaW5nIikKKyAgICAgIGhpIGRlZiBodG1sQm9sZAkJICAgICB0ZXJtPWJvbGQgY3Rlcm09Ym9sZCBndWk9Ym9sZAorICAgICAgaGkgZGVmIGh0bWxCb2xkVW5kZXJsaW5lCSAgICAgdGVybT1ib2xkLHVuZGVybGluZSBjdGVybT1ib2xkLHVuZGVybGluZSBndWk9Ym9sZCx1bmRlcmxpbmUKKyAgICAgIGhpIGRlZiBodG1sQm9sZEl0YWxpYwkgICAgIHRlcm09Ym9sZCxpdGFsaWMgY3Rlcm09Ym9sZCxpdGFsaWMgZ3VpPWJvbGQsaXRhbGljCisgICAgICBoaSBkZWYgaHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMgdGVybT1ib2xkLGl0YWxpYyx1bmRlcmxpbmUgY3Rlcm09Ym9sZCxpdGFsaWMsdW5kZXJsaW5lIGd1aT1ib2xkLGl0YWxpYyx1bmRlcmxpbmUKKyAgICAgIGhpIGRlZiBodG1sVW5kZXJsaW5lCSAgICAgdGVybT11bmRlcmxpbmUgY3Rlcm09dW5kZXJsaW5lIGd1aT11bmRlcmxpbmUKKyAgICAgIGhpIGRlZiBodG1sVW5kZXJsaW5lSXRhbGljICAgICB0ZXJtPWl0YWxpYyx1bmRlcmxpbmUgY3Rlcm09aXRhbGljLHVuZGVybGluZSBndWk9aXRhbGljLHVuZGVybGluZQorICAgICAgaGkgZGVmIGh0bWxJdGFsaWMJCSAgICAgdGVybT1pdGFsaWMgY3Rlcm09aXRhbGljIGd1aT1pdGFsaWMKKyAgICBlbmRpZgorICBlbmRpZgorCisgIEh0bWxIaUxpbmsgaHRtbFByZVN0bXQJICAgIFByZVByb2MKKyAgSHRtbEhpTGluayBodG1sUHJlRXJyb3IJICAgIEVycm9yCisgIEh0bWxIaUxpbmsgaHRtbFByZVByb2MJICAgIFByZVByb2MKKyAgSHRtbEhpTGluayBodG1sUHJlQXR0cgkgICAgU3RyaW5nCisgIEh0bWxIaUxpbmsgaHRtbFByZVByb2NBdHRyTmFtZSAgICBQcmVQcm9jCisgIEh0bWxIaUxpbmsgaHRtbFByZVByb2NBdHRyRXJyb3IgICBFcnJvcgorICBIdG1sSGlMaW5rIGh0bWxTcGVjaWFsCSAgICBTcGVjaWFsCisgIEh0bWxIaUxpbmsgaHRtbFNwZWNpYWxDaGFyCSAgICBTcGVjaWFsCisgIEh0bWxIaUxpbmsgaHRtbFN0cmluZwkJICAgIFN0cmluZworICBIdG1sSGlMaW5rIGh0bWxTdGF0ZW1lbnQJICAgIFN0YXRlbWVudAorICBIdG1sSGlMaW5rIGh0bWxDb21tZW50CSAgICBDb21tZW50CisgIEh0bWxIaUxpbmsgaHRtbENvbW1lbnRQYXJ0CSAgICBDb21tZW50CisgIEh0bWxIaUxpbmsgaHRtbFZhbHVlCQkgICAgU3RyaW5nCisgIEh0bWxIaUxpbmsgaHRtbENvbW1lbnRFcnJvcgkgICAgaHRtbEVycm9yCisgIEh0bWxIaUxpbmsgaHRtbFRhZ0Vycm9yCSAgICBodG1sRXJyb3IKKyAgSHRtbEhpTGluayBodG1sRXZlbnQJCSAgICBqYXZhU2NyaXB0CisgIEh0bWxIaUxpbmsgaHRtbEVycm9yCQkgICAgRXJyb3IKKworICBIdG1sSGlMaW5rIGphdmFTY3JpcHQJCSAgICBTcGVjaWFsCisgIEh0bWxIaUxpbmsgamF2YVNjcmlwdEV4cHJlc3Npb24gICBqYXZhU2NyaXB0CisgIEh0bWxIaUxpbmsgaHRtbENzc1N0eWxlQ29tbWVudCAgICBDb21tZW50CisgIEh0bWxIaUxpbmsgaHRtbENzc0RlZmluaXRpb24JICAgIFNwZWNpYWwKK2VuZGlmCisKK2RlbGNvbW1hbmQgSHRtbEhpTGluaworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJodG1sIgorCitpZiBtYWluX3N5bnRheCA9PSAnaHRtbCcKKyAgdW5sZXQgbWFpbl9zeW50YXgKK2VuZGlmCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9odG1sY2hlZXRhaC52aW0gYi9ydW50aW1lL3N5bnRheC9odG1sY2hlZXRhaC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU3ZGY5MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2h0bWxjaGVldGFoLnZpbQpAQCAtMCwwICsxLDMyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJSFRNTCB3aXRoIENoZWV0YWggdGFncworIiBNYWludGFpbmVyOglNYXggSXNjaGVua28gPG1maUB1a3IubmV0PgorIiBMYXN0IENoYW5nZTogMjAwMy0wNS0xMQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmICFleGlzdHMoIm1haW5fc3ludGF4IikKKyAgbGV0IG1haW5fc3ludGF4ID0gJ2h0bWwnCitlbmRpZgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvIDxzZmlsZT46cDpoL2NoZWV0YWgudmltCisgIHNvIDxzZmlsZT46cDpoL2h0bWwudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9jaGVldGFoLnZpbQorICBydW50aW1lISBzeW50YXgvaHRtbC52aW0KKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworc3ludGF4IGNsdXN0ZXIgaHRtbFByZXByb2MgYWRkPWNoZWV0YWhQbGFjZUhvbGRlcgorc3ludGF4IGNsdXN0ZXIgaHRtbFN0cmluZyBhZGQ9Y2hlZXRhaFBsYWNlSG9sZGVyCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImh0bWxjaGVldGFoIgorCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2h0bWxtNC52aW0gYi9ydW50aW1lL3N5bnRheC9odG1sbTQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMTlkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9odG1sbTQudmltCkBAIC0wLDAgKzEsNDEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglIVE1MIGFuZCBNNAorIiBNYWludGFpbmVyOglDbGF1ZGlvIEZsZWluZXIgPGNsYXVkaW9AZmxlaW5lci5jb20+CisiIFVSTDoJCWh0dHA6Ly93d3cuZmxlaW5lci5jb20vdmltL3N5bnRheC9odG1sbTQudmltCisiIExhc3QgQ2hhbmdlOgkyMDAxIEFwciAzMAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgd2UgZGVmaW5lIGl0IGhlcmUgc28gdGhhdCBpbmNsdWRlZCBmaWxlcyBjYW4gdGVzdCBmb3IgaXQKK2lmICFleGlzdHMoIm1haW5fc3ludGF4IikKKyAgbGV0IG1haW5fc3ludGF4PSdodG1sbTQnCitlbmRpZgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvIDxzZmlsZT46cDpoL2h0bWwudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9odG1sLnZpbQorZW5kaWYKK3VubGV0IGI6Y3VycmVudF9zeW50YXgKK3N5biBjYXNlIG1hdGNoCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc28gPHNmaWxlPjpwOmgvbTQudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9tNC52aW0KK2VuZGlmCit1bmxldCBiOmN1cnJlbnRfc3ludGF4CitzeW4gY2x1c3RlciBodG1sUHJlcHJvYyBhZGQ9QG00VG9wCitzeW4gY2x1c3RlciBtNFN0cmluZ0NvbnRlbnRzIGFkZD1odG1sVGFnLGh0bWxFbmRUYWcKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiaHRtbG00IgorCitpZiBtYWluX3N5bnRheCA9PSAnaHRtbG00JworICB1bmxldCBtYWluX3N5bnRheAorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2h0bWxvcy52aW0gYi9ydW50aW1lL3N5bnRheC9odG1sb3MudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMWI5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9odG1sb3MudmltCkBAIC0wLDAgKzEsMTY2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJSFRNTC9PUyBieSBBZXN0aXZhCisiIE1haW50YWluZXI6CUphc29uIFJ1c3QgPGpydXN0QHdlc3Rtb250LmVkdT4KKyIgVVJMOgkJaHR0cDovL3d3dy5ydXN0eXBhcnRzLmNvbS92aW0vc3ludGF4L2h0bWxvcy52aW0KKyIgSW5mbzoJCWh0dHA6Ly93d3cucnVzdHlwYXJ0cy5jb20vc2NyaXB0cy5waHAKKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisiCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBsZXQgbWFpbl9zeW50YXggPSAnaHRtbG9zJworZW5kaWYKKworaWYgdmVyc2lvbiA8IDYwMAorICBzbyA8c2ZpbGU+OnA6aC9odG1sLnZpbQorZWxzZQorICBydW50aW1lISBzeW50YXgvaHRtbC52aW0KKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworc3luIGNsdXN0ZXIgaHRtbFByZXByb2MgYWRkPWh0bWxvc1JlZ2lvbgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBGdW5jdGlvbiBuYW1lcworc3luIGtleXdvcmQJaHRtbG9zRnVuY3Rpb25zCWV4cGFuZCBzbGVlcCBnZXRsaW5rIHZlcnNpb24gc3lzdGVtIGFzY2lpIGdldGFzY2lpIHN5c2xvY2sgc3lzdW5sb2NrIGNyIGxmIGNsZWFuIHBvc3RwcmVwIGxpc3R0b3JvdyBzcGxpdCBsaXN0dG9jb2wgY29sdG9saXN0IHJvd3RvbGlzdCB0YWJsZXRvbGlzdAljb250YWluZWQKK3N5biBrZXl3b3JkCWh0bWxvc0Z1bmN0aW9ucwljdXQgXGRpc3BsYXkgY3V0YWxsIGN1dHggY3V0YWxseCBsZW5ndGggcmV2ZXJzZSBsb3dlciB1cHBlciBwcm9wZXIgcmVwZWF0IGxlZnQgcmlnaHQgbWlkZGxlIHRyaW0gdHJpbWxlZnQgdHJpbXJpZ2h0IGNvdW50IGNvdW50eCBsb2NhdGUgbG9jYXRleCByZXBsYWNlIHJlcGxhY2V4IHJlcGxhY2VhbGwgcmVwbGFjZWFsbHggcGFzdGUgcGFzdGVsZWZ0IHBhc3RlbGVmdHggcGFzdGVsZWZ0YWxsIHBhc3RlbGVmdGFsbHggcGFzdGVyaWdodCBwYXN0ZXJpZ2h0YWxsIHBhc3RlcmlnaHRhbGx4IGNob3BsZWZ0IGNob3BsZWZ0eCBjaG9wcmlnaHQgY2hvcHJpZ2h0eCBmb3JtYXQgY29uY2F0CWNvbnRhaW5lZAorc3luIGtleXdvcmQJaHRtbG9zRnVuY3Rpb25zCWdvdG8gZXhpdGdvdG8JY29udGFpbmVkCitzeW4ga2V5d29yZAlodG1sb3NGdW5jdGlvbnMJbGF5b3V0IGNvbHMgcm93cyByb3cgaXRlbXMgZ2V0aXRlbSBwdXRpdGVtIHN3aXRjaGl0ZW1zIGdldHRhYmxlIGRlbHJvdyBkZWxyb3dzIGRlbGNvbCBkZWxjb2xzIGFwcGVuZCAgbWVyZ2UgZmlsbGNvbCBmaWxscm93IGZpbGx0YWJsZSBwYXN0ZXRhYmxlIGdldGNvbCBnZXRyb3cgZmlsbGluZGV4Y29sIGluc2luZGV4Y29sIGR1cHMgbm9kdXBzIG1heHRhYmxlIG1pbnRhYmxlIG1heGNvbCBtaW5jb2wgbWF4cm93IG1pbnJvdyBhdmV0YWJsZSBhdmVjb2wgYXZlcm93IG1lZGlhbnRhYmxlIG1lZGlhbmNvbCBtZWRpYW5yb3cgcHJvZHVjdHRhYmxlIHByb2R1Y3Rjb2wgcHJvZHVjdHJvdyBzdW10YWJsZSBzdW1jb2wgc3Vtcm93IHN1bXNxcnRhYmxlIHN1bXNxcmNvbCBzdW1zcXJyb3cgcmV2ZXJzZWNvbHMgcmV2ZXJzZXJvd3Mgc3dpdGNoY29scyBzd2l0Y2hyb3dzIGluc2NvbHMgaW5zcm93cyBpbnNmaWxsY29sIHNvcnRjb2wgcmV2ZXJzZXNvcnRjb2wgc29ydGNvbG4gcmV2ZXJzZXNvcnRjb2xuIHNvcnRyb3cgc29ydHJvd24gcmV2ZXJzZXNvcnRyb3cgcmV2ZXJzZXNvcnRyb3duIGdldGNvbGVxIGdldGNvbGVxbiBnZXRjb2xub3RlcSBnZXRjb2xhbnkgZ2V0Y29sYmVnaW4gZ2V0Y29sbm90YW55IGdldGNvbG5vdGJlZ2luIGdldGNvbGdlIGdldGNvbGd0IGdldGNvbGxlIGdldGNvbGx0IGdldGNvbGdlbiBnZXRjb2xndG4gZ2V0Y29sbGVuIGdldGNvbHRuIGdldGNvbGVuZCBnZXRjb2xub3RlbmQgZ2V0cm93ZW5kIGdldHJvd25vdGVuZCBnZXRjb2xpbiBnZXRjb2xub3RpbiBnZXRjb2xpbmJlZ2luIGdldGNvbG5vdGluYmVnaW4gZ2V0Y29saW5lbmQgZ2V0Y29sbm90aW5lbmQgZ2V0cm93aW4gZ2V0cm93bm90aW4gZ2V0cm93aW5iZWdpbiBnZXRyb3dub3RpbmJlZ2luIGdldHJvd2luZW5kIGdldHJvd25vdGluZW5kCWNvbnRhaW5lZAorc3luIGtleXdvcmQJaHRtbG9zRnVuY3Rpb25zCWRiY3JlYXRlIGRiYWRkIGRiZWRpdCBkYmRlbGV0ZSBkYnNlYXJjaCBkYnNlYXJjaHNvcnQgZGJnZXQgZGJnZXRzb3J0IGRic3RhdHVzIGRiaW5kZXggZGJpbXBvcnQgZGJmaWxsIGRiZXhwb3J0IGRic29ydCBkYmdldHJlYyBkYnJlbW92ZSBkYnB1cmdlIGRiZmluZCBkYmZpbmRzb3J0IGRidW5pcXVlIGRiY29weSBkYm1vdmUgZGJraWxsIGRidHJhbnNmZXIgZGJwb2tlIGRic2VhcmNoeCBkYmdldHgJY29udGFpbmVkCitzeW4ga2V5d29yZAlodG1sb3NGdW5jdGlvbnMJc3lzaHRtbG9zbmFtZSBzeXNzdGFydG5hbWUgc3lzZml4ZmlsZSBmaWxlaW5mbyBmaWxlbGlzdCBmaWxlaW5kZXggZG9tYWlubmFtZSBwYWdlIGJyb3dzZXIgcmVnZG9tYWluIHVzZXJuYW1lIHVzZXJudW0gZ2V0ZW52IGh0dHBoZWFkZXIgY29weSBmaWxlIHRzIHJvdyBzeXNscyBzeXNjcCBzeXNtdiBzeXNtZCBzeXNyZCBmaWxlcHVzaCBmaWxlcHVzaGxpbmsgZGlybmFtZQljb250YWluZWQKK3N5biBrZXl3b3JkCWh0bWxvc0Z1bmN0aW9ucwltYWlsIHRvIGFkZHJlc3Mgc3ViamVjdCBuZXRtYWlsIG5ldG1haWxvcGVuIG5ldG1haWxjbG9zZSBtYWlsZmlsZWxpc3QgbmV0d2ViIG5ldHdlYnJlc3VsdHMgd2VicHVzaCBuZXRzb2Nrb3BlbiBuZXRzb2NrcmVhZCBuZXRzb2Nrd3JpdGUgbmV0c29ja2Nsb3NlCWNvbnRhaW5lZAorc3luIGtleXdvcmQJaHRtbG9zRnVuY3Rpb25zIHRvZGF5IHRpbWUgc3lzdGltZSBub3cgeWVzdGVyZGF5IHRvbW9ycm93IGdldGRheSBnZXRtb250aCBnZXR5ZWFyIGdldG1pbnV0ZSBnZXR3ZWVrZGF5IGdldHdlZWtudW0gZ2V0eWVhcmRheSBnZXRkYXRlIGdldHRpbWUgZ2V0YW1vcnBtIGdldGhvdXIgYWRkaG91cnMgYWRkbWludXRlcyBhZGRkYXlzIHRpbWViZXR3ZWVuIHRpbWV0aWxsIHRpbWVmcm9tIGRhdGV0aWxsIGRhdGVmcm9tIG1peGVkdGltZWJldHdlZW4gbWl4ZWRkYXRldGlsbCBtaXhlZHRpbWV0aWxsIG1peGVkdGltZWZyb20gbWl4ZWRkYXRlZnJvbSBuZXh0ZGF5Ynl3ZWVrZnJvbWRhdGUgbmV4dGRheWJ5d2Vla2Zyb210b2RheSBuZXh0ZGF5Ynltb250aGZyb21kYXRlIG5leHRkYXlieW1vbnRoZnJvbXRvZGF5IG5leHRkYXlieXllYXJmcm9tZGF0ZSBuZXh0ZGF5Ynl5ZWFyZnJvbXRvZGF5IG9mZnNldGRheWJ5d2Vla2Zyb21kYXRlIG9mZnNldGRheWJ5d2Vla2Zyb210b2RheSBvZmZzZXRkYXlieW1vbnRoZnJvbWRhdGUgb2Zmc2V0ZGF5Ynltb250aGZyb210b2RheQljb250YWluZWQKK3N5biBrZXl3b3JkCWh0bWxvc0Z1bmN0aW9ucyBpc3ByaXZhdGUgaXNwdWJsaWMgaXNmaWxlIGlzZGlyIGlzYmxhbmsgaXNlcnJvciBpc2Vycm9yIGlzZXZlbiBpc29kZCBpc3RydWUgaXNmYWxzZSBpc2xvZ2ljYWwgaXN0ZXh0IGlzdGFnIGlzbnVtYmVyIGlzaW50ZWdlciBpc2RhdGUgaXN0YWJsZWVxIGlzdGFibGVlcXggaXN0YWJsZWVxbiBpc2Z1dHVyZSBpc3Bhc3QgaXN0b2RheSBpc3dlZWtkYXkgaXN3ZWVrZW5kIGlzc2FtZWRhdGUgaXNlcSBpc25vdGVxIGlzZ2UgaXNsZSBpc21vZDEwIGlzdmFsaWRzdHJpbmcJY29udGFpbmVkCitzeW4ga2V5d29yZAlodG1sb3NGdW5jdGlvbnMgY2VsdG9mIGNlbHRva2VsIGZ0b2NlbCBmdG9rZWwga2VsdG9jZWwga2VsdG9mIGNtdG9pbiBpbnRvY20gZnR0b20gbXRvZnQgZnR0b21pbGUgbWlsZXRvZnQga210b21pbGUgbWlsZXRva20gbXRveWQgeWR0b20gZ2FsdG9sdHIgbHRydG9nYWwgbHRydG9xdCBxdHRvbHRyIGd0b296IG96dG9nIGtndG9sYiBsYnRva2cgbXR0b3RvbiB0b250b210CWNvbnRhaW5lZAorc3luIGtleXdvcmQJaHRtbG9zRnVuY3Rpb25zIG1heCBtaW4gYWJzIHNpZ24gaW52ZXJzZSBzcXVhcmUgc3FydCBjdWJlIHJvdW5kc2lnIHJvdW5kIGNlaWxpbmcgcm91bmR1cCBmbG9vciByb3VuZGRvd24gcm91bmRldmVuIHJvdW5kZG93bmV2ZW4gcm91bmR1cGV2ZW4gcm91bmRvZGQgcm91bmR1cG9kZCByb3VuZGRvd25vZGQgcmFuZG9tIGZhY3RvcmlhbCBzdW1tYW5kIGZpYm9uYWNjaSByZW1haW5kZXIgbW9kIHJhZGlhbnMgZGVncmVlcyBjb3Mgc2luIHRhbiBjb3RhbiBzZWNhbnQgY29zZWNhbnQgYWNvcyBhc2luIGF0YW4gZXhwIHBvd2VyIHBvd2VyMTAgbG4gbG9nMTAgbG9nIHNpbmggY29zaCB0YW5oCWNvbnRhaW5lZAorc3luIGtleXdvcmQJaHRtbG9zRnVuY3Rpb25zIHhtbGRlbGV0ZSB4bWxkZWxldGV4IHhtbGRlbGV0ZWF0dHIgeG1sZGVsZXRlYXR0cnggeG1sZWRpdCB4bWxlZGl0eCB4bWxlZGl0dmFsdWUgeG1sZWRpdHZhbHVleCB4bWxlZGl0YXR0ciB4bWxlZGl0YXR0cnggeG1saW5zZXJ0YmVmb3JlIHhtbGluc2VydGJlZm9yZXggc21saW5zZXJ0YWZ0ZXIgeG1saW5zZXJ0YWZ0ZXJ4IHhtbGluc2VydGF0dHIgeG1saW5zZXJ0YXR0cnggc21sZ2V0IHhtbGdldHggeG1sZ2V0dmFsdWUgeG1sZ2V0dmFsdWV4IHhtbGdldGF0dHJ2YWx1ZSB4bWxnZXRhdHRydmFsdWV4IHhtbGdldHJlYyB4bWxnZXRyZWN4IHhtbGdldHJlY2F0dHJ2YWx1ZSB4bWxnZXRyZWNhdHRydmFsdWV4IHhtbGNob3BsZWZ0YmVmb3JlIHhtbGNob3BsZWZ0YmVmb3JleCB4bWxjaG9wcmlnaHRiZWZvcmUgeG1sY2hvcHJpZ2h0YmVmb3JleCB4bWxjaG9wbGVmdGFmdGVyIHhtbGNob3BsZWZ0YWZ0ZXJ4IHhtbGNob3ByaWdodGFmdGVyIHhtbGNob3ByaWdodGFmdGVyeCB4bWxsb2NhdGViZWZvcmUgeG1sbG9jYXRlYmVmb3JleCB4bWxsb2NhdGVhZnRlciB4bWxsb2NhdGVhZnRlcngJY29udGFpbmVkCisKKyIgVHlwZQorc3luIGtleXdvcmQJaHRtbG9zVHlwZQlpbnQgc3RyIGRvbCBmbHQgZGF0IGdycAljb250YWluZWQKKworIiBTdG9yYWdlQ2xhc3MKK3N5biBrZXl3b3JkCWh0bWxvc1N0b3JhZ2VDbGFzcwlsb2NhbHMJY29udGFpbmVkCisKKyIgT3BlcmF0b3IKK3N5biBtYXRjaAlodG1sb3NPcGVyYXRvcgkiWy09Ky9cKiFdIgljb250YWluZWQKK3N5biBtYXRjaAlodG1sb3NSZWxhdGlvbgkiW35dIgljb250YWluZWQKK3N5biBtYXRjaAlodG1sb3NSZWxhdGlvbgkiWz1+XVsmIV0iCWNvbnRhaW5lZAorc3luIG1hdGNoCWh0bWxvc1JlbGF0aW9uCSJbIT08Pl09Igljb250YWluZWQKK3N5biBtYXRjaAlodG1sb3NSZWxhdGlvbgkiWzw+XSIJY29udGFpbmVkCisKKyIgQ29tbWVudAorc3luIHJlZ2lvbglodG1sb3NDb21tZW50CXN0YXJ0PSIjIiBlbmQ9Ii8jIgljb250YWluZWQKKworIiBDb25kaXRpb25hbAorc3luIGtleXdvcmQJaHRtbG9zQ29uZGl0aW9uYWwJaWYgdGhlbiAvaWYgdG8gZWxzZSBlbGlmCWNvbnRhaW5lZAorc3luIGtleXdvcmQJaHRtbG9zQ29uZGl0aW9uYWwJYW5kIG9yIG5hbmQgbm9yIHhvciBub3QJY29udGFpbmVkCisiIFJlcGVhdAorc3luIGtleXdvcmQJaHRtbG9zUmVwZWF0CXdoaWxlIGRvIC93aGlsZSBmb3IgL2Zvcgljb250YWluZWQKKworIiBLZXl3b3JkCitzeW4ga2V5d29yZAlodG1sb3NLZXl3b3JkCW5hbWUgdmFsdWUgc3RlcCBkbyByb3duYW1lIGNvbG5hbWUgcm93bnVtCWNvbnRhaW5lZAorCisiIFJlcGVhdAorc3luIGtleXdvcmQJaHRtbG9zTGFiZWwJY2FzZSBtYXRjaGVkIC9jYXNlIHN3aXRjaAljb250YWluZWQKKworIiBTdGF0ZW1lbnQKK3N5biBrZXl3b3JkCWh0bWxvc1N0YXRlbWVudCAgICAgYnJlYWsgZXhpdCByZXR1cm4gY29udGludWUJY29udGFpbmVkCisKKyIgSWRlbnRpZmllcgorc3luIG1hdGNoCWh0bWxvc0lkZW50aWZpZXIJIlxoXHcqW1wuXSpcdyoiCWNvbnRhaW5lZAorCisiIFNwZWNpYWwgaWRlbnRpZmllcgorc3luIG1hdGNoCWh0bWxvc1NwZWNpYWxJZGVudGlmaWVyCSJbXCRAXSIJY29udGFpbmVkCisKKyIgRGVmaW5lCitzeW4ga2V5d29yZAlodG1sb3NEZWZpbmUJZnVuY3Rpb24gb3ZlcmxheQljb250YWluZWQKKworIiBCb29sZWFuCitzeW4ga2V5d29yZAlodG1sb3NCb29sZWFuCXRydWUgZmFsc2UJY29udGFpbmVkCisKKyIgU3RyaW5nCitzeW4gcmVnaW9uCWh0bWxvc1N0cmluZ0RvdWJsZQlrZWVwZW5kIG1hdGNoZ3JvdXA9Tm9uZSBzdGFydD0rIisgZW5kPSsiKyBjb250YWluZWQKK3N5biByZWdpb24JaHRtbG9zU3RyaW5nU2luZ2xlCWtlZXBlbmQgbWF0Y2hncm91cD1Ob25lIHN0YXJ0PSsnKyBlbmQ9KycrIGNvbnRhaW5lZAorCisiIE51bWJlcgorc3luIG1hdGNoIGh0bWxvc051bWJlcgkiLVw9XDxcZFwrXD4iCWNvbnRhaW5lZAorCisiIEZsb2F0CitzeW4gbWF0Y2ggaHRtbG9zRmxvYXQJIlwoLVw9XDxcZCtcfC1cPVwpXC5cZFwrXD4iCWNvbnRhaW5lZAorCisiIEVycm9yCitzeW4gbWF0Y2ggaHRtbG9zRXJyb3IJIkVSUk9SIgljb250YWluZWQKKworIiBQYXJlbnQKK3N5biBtYXRjaCAgICAgaHRtbG9zUGFyZW50ICAgICAgICJbKHtbXF19KV0iICAgICBjb250YWluZWQKKworIiBUb2RvCitzeW4ga2V5d29yZAlodG1sb3NUb2RvIFRPRE8gVG9kbyB0b2RvCWNvbnRhaW5lZAorCitzeW4gY2x1c3RlcglodG1sb3NJbnNpZGUJY29udGFpbnM9aHRtbG9zQ29tbWVudCxodG1sb3NGdW5jdGlvbnMsaHRtbG9zSWRlbnRpZmllcixodG1sb3NTcGVjaWFsSWRlbnRpZmllcixodG1sb3NDb25kaXRpb25hbCxodG1sb3NSZXBlYXQsaHRtbG9zTGFiZWwsaHRtbG9zU3RhdGVtZW50LGh0bWxvc09wZXJhdG9yLGh0bWxvc1JlbGF0aW9uLGh0bWxvc1N0cmluZ1NpbmdsZSxodG1sb3NTdHJpbmdEb3VibGUsaHRtbG9zTnVtYmVyLGh0bWxvc0Zsb2F0LGh0bWxvc0Vycm9yLGh0bWxvc0tleXdvcmQsaHRtbG9zVHlwZSxodG1sb3NCb29sZWFuLGh0bWxvc1BhcmVudAorCitzeW4gY2x1c3RlcglodG1sb3NUb3AJY29udGFpbnM9QGh0bWxvc0luc2lkZSxodG1sb3NEZWZpbmUsaHRtbG9zRXJyb3IsaHRtbG9zU3RvcmFnZUNsYXNzCisKK3N5biByZWdpb24JIGh0bWxvc1JlZ2lvbglrZWVwZW5kIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8PCIgc2tpcD0rIi5cey19Pz4uXHstfSJcfCcuXHstfT8+Llx7LX0nXHwvXCouXHstfT8+Llx7LX1cKi8rIGVuZD0iPj4iIGNvbnRhaW5zPUBodG1sb3NUb3AKK3N5biByZWdpb24JIGh0bWxvc1JlZ2lvbglrZWVwZW5kIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcW1xbIiBza2lwPSsiLlx7LX0/Pi5cey19Ilx8Jy5cey19Pz4uXHstfSdcfC9cKi5cey19Pz4uXHstfVwqLysgZW5kPSJcXVxdIiBjb250YWlucz1AaHRtbG9zVG9wCisKKworIiBzeW5jCitpZiBleGlzdHMoImh0bWxvc19taW5saW5lcyIpCisgIGV4ZWMgInN5biBzeW5jIG1pbmxpbmVzPSIgLiBodG1sb3NfbWlubGluZXMKK2Vsc2UKKyAgc3luIHN5bmMgbWlubGluZXM9MTAwCitlbmRpZgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9odG1sb3Nfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfaHRtbG9zX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICBIaUxpbmsJIGh0bWxvc1NwZWNpYWxJZGVudGlmaWVyCU9wZXJhdG9yCisgIEhpTGluawkgaHRtbG9zSWRlbnRpZmllcglJZGVudGlmaWVyCisgIEhpTGluawkgaHRtbG9zU3RvcmFnZUNsYXNzCVN0b3JhZ2VDbGFzcworICBIaUxpbmsJIGh0bWxvc0NvbW1lbnQJQ29tbWVudAorICBIaUxpbmsJIGh0bWxvc0Jvb2xlYW4JQm9vbGVhbgorICBIaUxpbmsJIGh0bWxvc1N0cmluZ1NpbmdsZQlTdHJpbmcKKyAgSGlMaW5rCSBodG1sb3NTdHJpbmdEb3VibGUJU3RyaW5nCisgIEhpTGluawkgaHRtbG9zTnVtYmVyCU51bWJlcgorICBIaUxpbmsJIGh0bWxvc0Zsb2F0CUZsb2F0CisgIEhpTGluawkgaHRtbG9zRnVuY3Rpb25zCUZ1bmN0aW9uCisgIEhpTGluawkgaHRtbG9zUmVwZWF0CVJlcGVhdAorICBIaUxpbmsJIGh0bWxvc0NvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluawkgaHRtbG9zTGFiZWwJTGFiZWwKKyAgSGlMaW5rCSBodG1sb3NTdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluawkgaHRtbG9zS2V5d29yZAlTdGF0ZW1lbnQKKyAgSGlMaW5rCSBodG1sb3NUeXBlCVR5cGUKKyAgSGlMaW5rCSBodG1sb3NEZWZpbmUJRGVmaW5lCisgIEhpTGluawkgaHRtbG9zUGFyZW50CURlbGltaXRlcgorICBIaUxpbmsJIGh0bWxvc0Vycm9yCUVycm9yCisgIEhpTGluawkgaHRtbG9zVG9kbwlUb2RvCisgIEhpTGluawlodG1sb3NPcGVyYXRvcglPcGVyYXRvcgorICBIaUxpbmsJaHRtbG9zUmVsYXRpb24JT3BlcmF0b3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImh0bWxvcyIKKworaWYgbWFpbl9zeW50YXggPT0gJ2h0bWxvcycKKyAgdW5sZXQgbWFpbl9zeW50YXgKK2VuZGlmCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2lhNjQudmltIGIvcnVudGltZS9zeW50YXgvaWE2NC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyOTJjZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2lhNjQudmltCkBAIC0wLDAgKzEsMzEyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIElBLTY0IChJdGFuaXVtKSBhc3NlbWJseSBsYW5ndWFnZQorIiBNYWludGFpbmVyOiAgIFBhcnRoIE1hbHdhbmthciA8cG1hbHdhbmthckB5YWhvby5jb20+CisiIFVSTDoJCWh0dHA6Ly93d3cuZ2VvY2l0aWVzLmNvbS9wbWFsd2Fua2FyIChIb21lIFBhZ2Ugd2l0aCBsaW5rIHRvIG15IFZpbSBwYWdlKQorIgkJaHR0cDovL3d3dy5nZW9jaXRpZXMuY29tL3BtYWx3YW5rYXIvdmltLmh0bSAoZm9yIFZJTSkKKyIgRmlsZSBWZXJzaW9uOiAwLjcKKyIgTGFzdCBDaGFuZ2U6ICAyMDA0IE1heSAwNAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKworImlnbm9yZSBjYXNlIGZvciBhc3NlbWJseQorc3luIGNhc2UgaWdub3JlCisKKyIgIElkZW50aWZpZXIgS2V5d29yZCBjaGFyYWN0ZXJzIChkZWZpbmVzIFxrKQoraWYgdmVyc2lvbiA+PSA2MDAKKwlzZXRsb2NhbCBpc2tleXdvcmQ9QCw0OC01NywjLCQsLiw6LD8sQC1ALF8sfgorZWxzZQorCXNldCBpc2tleXdvcmQ9QCw0OC01NywjLCQsLiw6LD8sQC1ALF8sfgorZW5kaWYKKworc3luIHN5bmMgbWlubGluZXM9NQorCisiIFJlYWQgdGhlIE1BU00gc3ludGF4IHRvIHN0YXJ0IHdpdGgKKyIgVGhpcyBpcyBuZWVkZWQgYXMgYm90aCBJQS02NCBhcyB3ZWxsIGFzIElBLTMyIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkCitzb3VyY2UgPHNmaWxlPjpwOmgvbWFzbS52aW0KKworc3luIHJlZ2lvbiBpYTY0Q29tbWVudCBzdGFydD0iLy8iIGVuZD0iJCIgY29udGFpbnM9aWE2NFRvZG8KK3N5biByZWdpb24gaWE2NENvbW1lbnQgc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPWlhNjRUb2RvCisKK3N5biBtYXRjaCBpYTY0SWRlbnRpZmllcgkiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qIgorc3luIG1hdGNoIGlhNjREaXJlY3RpdmUJCSJcLlthLXpBLVpfJF1bYS16QS1aXyQuXVwrIgorc3luIG1hdGNoIGlhNjRMYWJlbAkJIlthLXpBLVpfJC5dW2EtekEtWjAtOV8kLl0qXHNcPTpcPiJoZT1lLTEKK3N5biBtYXRjaCBpYTY0TGFiZWwJCSJbYS16QS1aXyQuXVthLXpBLVowLTlfJC5dKlxzXD06Olw+ImhlPWUtMgorc3luIG1hdGNoIGlhNjRMYWJlbAkJIlthLXpBLVpfJC5dW2EtekEtWjAtOV8kLl0qXHNcPSNcPiJoZT1lLTEKK3N5biByZWdpb24gaWE2NHN0cmluZwkJc3RhcnQ9K0xcPSIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKworc3luIG1hdGNoIGlhNjRPY3RhbAkJIjBbMC03X10qXD4iCitzeW4gbWF0Y2ggaWE2NEJpbmFyeQkJIjBbYkJdWzAxX10qXD4iCitzeW4gbWF0Y2ggaWE2NEhleAkJIjBbeFhdWzAtOWEtZkEtRl9dKlw+Igorc3luIG1hdGNoIGlhNjREZWNpbWFsCQkiWzEtOV9dWzAtOV9dKlw+Igorc3luIG1hdGNoIGlhNjRGbG9hdAkJIlswLTlfXSpcLlswLTlfXSpcKFtlRV1bKy1dXD1bMC05X10qXClcPVw+IgorCisic2ltcGxlIGluc3RydWN0aW9ucworc3luIGtleXdvcmQgaWE2NG9wY29kZSBhZGQgYWRkcyBhZGRsIGFkZHA0IGFsbG9jIGFuZCBhbmRjbSBjb3ZlciBlcGMKK3N5biBrZXl3b3JkIGlhNjRvcGNvZGUgZmFicyBmYW5kIGZhbmRjbSBmYyBmbHVzaHJzIGZuZWcgZm5lZ2FicyBmb3IKK3N5biBrZXl3b3JkIGlhNjRvcGNvZGUgZnBhYnMgZnBhY2sgZnBuZWcgZnBuZWdhYnMgZnNlbGVjdCBmYW5kIGZhYmRjbQorc3luIGtleXdvcmQgaWE2NG9wY29kZSBmYyBmd2IgZnhvciBsb2FkcnMgbW92bCBtdXgxIG11eDIgb3IgcGFkZDQKK3N5biBrZXl3b3JkIGlhNjRvcGNvZGUgcGF2Z3N1YjEgcGF2Z3N1YjIgcG9wY250IHBzYWQxIHBzaGwyIHBzaGw0IHBzaGxhZGQyCitzeW4ga2V5d29yZCBpYTY0b3Bjb2RlIHBzaHJhZGQyIHBzdWI0IHJmaSByc20gcnVtIHNobCBzaGxhZGQgc2hsYWRkcDQKK3N5biBrZXl3b3JkIGlhNjRvcGNvZGUgc2hycCBzc20gc3ViIHN1bSBzeW5jLmkgdGFrIHRoYXNoCitzeW4ga2V5d29yZCBpYTY0b3Bjb2RlIHRwYSB0dGFnIHhvcgorCisicHV0IHRvIG92ZXJyaWRlIHRoZXNlIGJlaW5nIHJlY29nbml6ZWQgYXMgZmxvYXRzLiBUaGV5IGFyZSBvcmlnbmFsbHkgZnJvbSBtYXNtLnZpbQorInB1dCBoZXJlIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGZsb2F0CitzeW4gbWF0Y2ggICBpYTY0RGlyZWN0aXZlICAgICAgICJcLjE4NiIKK3N5biBtYXRjaCAgIGlhNjREaXJlY3RpdmUgICAgICAgIlwuMjg2Igorc3luIG1hdGNoICAgaWE2NERpcmVjdGl2ZSAgICAgICAiXC4yODZjIgorc3luIG1hdGNoICAgaWE2NERpcmVjdGl2ZSAgICAgICAiXC4yODZwIgorc3luIG1hdGNoICAgaWE2NERpcmVjdGl2ZSAgICAgICAiXC4yODciCitzeW4gbWF0Y2ggICBpYTY0RGlyZWN0aXZlICAgICAgICJcLjM4NiIKK3N5biBtYXRjaCAgIGlhNjREaXJlY3RpdmUgICAgICAgIlwuMzg2YyIKK3N5biBtYXRjaCAgIGlhNjREaXJlY3RpdmUgICAgICAgIlwuMzg2cCIKK3N5biBtYXRjaCAgIGlhNjREaXJlY3RpdmUgICAgICAgIlwuMzg3Igorc3luIG1hdGNoICAgaWE2NERpcmVjdGl2ZSAgICAgICAiXC40ODYiCitzeW4gbWF0Y2ggICBpYTY0RGlyZWN0aXZlICAgICAgICJcLjQ4NmMiCitzeW4gbWF0Y2ggICBpYTY0RGlyZWN0aXZlICAgICAgICJcLjQ4NnAiCitzeW4gbWF0Y2ggICBpYTY0RGlyZWN0aXZlICAgICAgICJcLjgwODYiCitzeW4gbWF0Y2ggICBpYTY0RGlyZWN0aXZlICAgICAgICJcLjgwODciCisKKworCisiZGVsaW1pdGVycworc3luIG1hdGNoIGlhNjRkZWxpbWl0ZXIgIjs7IgorCisib3BlcmF0b3JzCitzeW4gbWF0Y2ggaWE2NG9wZXJhdG9ycyAiW1xbXF0oKSMsXSIKK3N5biBtYXRjaCBpYTY0b3BlcmF0b3JzICJcKCtcfC1cfD1cKSIKKworIlRPRE8KK3N5biBtYXRjaCBpYTY0VG9kbyAgICAgICJcKFRPRE9cfFhYWFx8RklYTUVcfE5PVEVcKSIKKworIldoYXQgZm9sbG93cyBpcyBhIGxvbmcgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBwYXJzaW5nIHRoZQorImlhNjQgaW5zdHJ1Y3Rpb25zIHRoYXQgdXNlIG1hbnkgY29tcGxldGVycworCisiYnIKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJiclwoXChcLlwoY29uZFx8Y2FsbFx8cmV0XHxpYVx8Y2xvb3BcfGN0b3BcfGNleGl0XHx3dG9wXHx3ZXhpdFwpXClcPVwoXC5cKHNwbnRcfGRwbnRcfHNwdGtcfGRwdGtcKVwpXD1cKFwuZmV3XHxcLm1hbnlcKVw9XChcLmNsclwpXD1cKVw9XD4iCisiYnJlYWsKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJicmVha1woXC5baWJtZnhdXClcPVw+IgorImJycAorc3luIG1hdGNoIGlhNjRvcGNvZGUgImJycFwoXC5cKHNwdGtcfGRwdGtcfGxvb3BcfGV4aXRcKVwpXChcLmltcFwpXD1cPiIKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJicnBcLnJldFwoXC5cKHNwdGtcfGRwdGtcKVwpXHsxfVwoXC5pbXBcKVw9XD4iCisiYnN3CitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiYnN3XC5bMDFdXD4iCisiY2hrCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiY2hrXC5cKHNcKFwuW2ltXVwpXD1cKVw+Igorc3luIG1hdGNoIGlhNjRvcGNvZGUgImNoa1wuYVwuXChjbHJcfG5jXClcPiIKKyJjbHJycmIKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJjbHJycmJcKFwucHJcKVw9XD4iCisiY21wL2NtcDQKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJjbXA0XD1cLlwoZXFcfG5lXHxsW3RlXVx8Z1t0ZV1cfFtsZ110dVx8W2xnXWV1XClcKFwudW5jXClcPVw+Igorc3luIG1hdGNoIGlhNjRvcGNvZGUgImNtcDRcPVwuXChlcVx8W2xnbl1lXHxbbGdddFwpXC5cKFwob3JcKFwuYW5kY21cfGNtXClcPVwpXHxcKGFuZFwoXChcLm9yXClcPWNtXClcPVwpXClcPiIKKyJjbXB4Y2hnCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiY21weGNoZ1sxMjQ4XVwuXChhY3FcfHJlbFwpXChcLm50MVx8XC5udGFcKVw9XD4iCisiY3p4CitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiY3p4WzEyXVwuW2xyXVw+IgorImRlcAorc3luIG1hdGNoIGlhNjRvcGNvZGUgImRlcFwoXC56XClcPVw+IgorImV4dHIKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJleHRyXChcLnVcKVw9XD4iCisiZmFkZAorc3luIG1hdGNoIGlhNjRvcGNvZGUgImZhZGRcKFwuW3NkXVwpXD1cKFwuc1swLTNdXClcPVw+IgorImZhbWF4L2ZhbWluCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiZmFcKG1heFx8bWluXClcKFwuc1swLTNdXClcPVw+IgorImZjaGtmL2ZtYXgvZm1pbgorc3luIG1hdGNoIGlhNjRvcGNvZGUgImZcKGNoa2ZcfG1heFx8bWluXClcKFwuc1swLTNdXClcPVw+IgorImZjbGFzcworc3luIG1hdGNoIGlhNjRvcGNvZGUgImZjbGFzc1woXC5uXD1tXClcKFwudW5jXClcPVw+IgorImZjbHJmL2ZwYW1heAorc3luIG1hdGNoIGlhNjRvcGNvZGUgImZcKGNscmZcfHBhbWF4XHxwYW1pblwpXChcLnNbMC0zXVwpXD1cPiIKKyJmY21wCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiZmNtcFwuXChuXD1bbGddW3RlXVx8blw9ZXFcfFwodW5cKVw9b3JkXClcKFwudW5jXClcPVwoXC5zWzAtM11cKVw9XD4iCisiZmN2dC9mY3Z0LnhmL2ZjdnQueHVmLnBjLnNmCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiZmN2dFwuXChcKGZ4dVw9XChcLnRydW5jXClcPVwoXC5zWzAtM11cKVw9XClcfFwoeGZcfHh1ZlwoXC5bc2RdXClcPVwoXC5zWzAtM11cKVw9XClcKVw+IgorImZldGNoYWRkCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiZmV0Y2hhZGRbNDhdXC5cKGFjcVx8cmVsXClcKFwubnQxXHxcLm50YVwpXD1cPiIKKyJmbWEvZm1weS9mbXMKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJmbVwoW2FzXVx8cHlcKVwoXC5bc2RdXClcPVwoXC5zWzAtM11cKVw9XD4iCisiZm1lcmdlL2ZwbWVyZ2UKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJmcFw9bWVyZ2VcLlwobnNcfHNlXD1cKVw+IgorImZtaXgKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJmbWl4XC5cKGxyXHxbbHJdXClcPiIKKyJmbm1hL2Zub3JtL2ZubXB5CitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiZm5cKG1hXHxtcHlcfG9ybVwpXChcLltzZF1cKVw9XChcLnNbMC0zXVwpXD1cPiIKKyJmcGNtcAorc3luIG1hdGNoIGlhNjRvcGNvZGUgImZwY21wXC5cKG5cPVtsZ11bdGVdXHxuXD1lcVx8XCh1blwpXD1vcmRcKVwoXC5zWzAtM11cKVw9XD4iCisiZnBjdnQKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJmcGN2dFwuZnh1XD1cKFwoXC50cnVuY1wpXD1cKFwuc1swLTNdXClcPVwpXD4iCisiZnBtYS9mcG1heC9mcG1pbi9mcG1weS9mcG1zL2Zwbm1hL2Zwbm1weS9mcHJjcGEvZnBzcXJ0YQorc3luIG1hdGNoIGlhNjRvcGNvZGUgImZwXChtYXhcPVx8bWluXHxuXD1tcHlcfG1zXHxubWFcfHJjcGFcfHNxcnRhXClcKFwuc1swLTNdXClcPVw+IgorImZyY3BhL2Zyc3FydGEKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJmclwoY3BhXHxzcXJ0YVwpXChcLnNbMC0zXVwpXD1cPiIKKyJmc2V0Yy9mYW1pbi9mY2hrZgorc3luIG1hdGNoIGlhNjRvcGNvZGUgImZcKHNldGNcfGFtaW5cfGNoa2ZcKVwoXC5zWzAtM11cKVw9XD4iCisiZnN1Ygorc3luIG1hdGNoIGlhNjRvcGNvZGUgImZzdWJcKFwuW3NkXVwpXD1cKFwuc1swLTNdXClcPVw+IgorImZzd2FwCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiZnN3YXBcKFwubltscl1cPVwpXD1cPiIKKyJmc3h0CitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiZnN4dFwuW2xyXVw+IgorImdldGYKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJnZXRmXC5cKFtzZF1cfGV4cFx8c2lnXClcPiIKKyJpbnZhbGEKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJpbnZhbGFcKFwuW2FlXVwpXD1cPiIKKyJpdGMvaXRyCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAiaXRbY3JdXC5baWRdXD4iCisibGQKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJsZFsxMjQ4XVw+XHxsZFsxMjQ4XVwoXC5cKHNhXD1cfGFcfGNcLlwobmNcfGNsclwoXC5hY3FcKVw9XClcfGFjcVx8Ymlhc1wpXClcPVwoXC5udFsxYV1cKVw9XD4iCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAibGQ4XC5maWxsXChcLm50WzFhXVwpXD1cPiIKKyJsZGYKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJsZGZbc2RlOF1cKFwoXC5cKHNhXD1cfGFcfGNcLlwobmNcfGNsclwpXClcKVw9XChcLm50WzFhXVwpXD1cKVw9XD4iCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAibGRmXC5maWxsXChcLm50WzFhXVwpXD1cPiIKKyJsZGZwCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAibGRmcFtzZDhdXChcKFwuXChzYVw9XHxhXHxjXC5cKG5jXHxjbHJcKVwpXClcPVwoXC5udFsxYV1cKVw9XClcPVw+IgorImxmZXRjaAorc3luIG1hdGNoIGlhNjRvcGNvZGUgImxmZXRjaFwoXC5mYXVsdFwoXC5leGNsXClcPVx8XC5leGNsXClcPVwoXC5udFsxMmFdXClcPVw+IgorIm1mCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAibWZcKFwuYVwpXD1cPiIKKyJtaXgKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJtaXhbMTI0XVwuW2xyXVw+IgorIm1vdgorc3luIG1hdGNoIGlhNjRvcGNvZGUgIm1vdlwoXC5baW1dXClcPVw+Igorc3luIG1hdGNoIGlhNjRvcGNvZGUgIm1vdlwoXC5yZXRcKVw9XChcKFwuc3B0a1x8XC5kcHRrXClcPVwoXC5pbXBcKVw9XClcPVw+IgorIm5vcAorc3luIG1hdGNoIGlhNjRvcGNvZGUgIm5vcFwoXC5baWJtZnhdXClcPVw+IgorInBhY2sKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJwYWNrXCgyXC5bc3Vdc3NcfDRcLnNzc1wpXD4iCisicGFkZCAvL3BhZGQ0IGFkZGVkIHRvIGtleXdvcmRzCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAicGFkZFsxMl1cKFwuXChzc3NcfHV1c1x8dXV1XClcKVw9XD4iCisicGF2Zworc3luIG1hdGNoIGlhNjRvcGNvZGUgInBhdmdbMTJdXChcLnJhelwpXD1cPiIKKyJwY21wCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAicGNtcFsxMjRdXC5cKGVxXHxndFwpXD4iCisicG1heC9wbWluCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAicG1cKGF4XHxpblwpXChcKDFcLnVcKVx8MlwpXD4iCisicG1weQorc3luIG1hdGNoIGlhNjRvcGNvZGUgInBtcHkyXC5bcmxdXD4iCisicG1weXNocgorc3luIG1hdGNoIGlhNjRvcGNvZGUgInBtcHlzaHIyXChcLnVcKVw9XD4iCisicHJvYmUKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJwcm9iZVwuW3J3XVw+Igorc3luIG1hdGNoIGlhNjRvcGNvZGUgInByb2JlXC5cKFwoclx8d1x8cndcKVwuZmF1bHRcKVw+IgorInBzaHIKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJwc2hyWzI0XVwoXC51XClcPVw+IgorInBzdWIKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJwc3ViWzEyXVwoXC5cKHNzc1x8dXVbc3VdXClcKVw9XD4iCisicHRjCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAicHRjXC5cKGxcfGVcfGdhXD1cKVw+IgorInB0cgorc3luIG1hdGNoIGlhNjRvcGNvZGUgInB0clwuXChkXHxpXClcPiIKKyJzZXRmCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAic2V0ZlwuXChzXHxkXHxleHBcfHNpZ1wpXD4iCisic2hyCitzeW4gbWF0Y2ggaWE2NG9wY29kZSAic2hyXChcLnVcKVw9XD4iCisic3Jsegorc3luIG1hdGNoIGlhNjRvcGNvZGUgInNybHpcKFwuW2lkXVwpXD4iCisic3QKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJzdFsxMjQ4XVwoXC5yZWxcKVw9XChcLm50YVwpXD1cPiIKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJzdDhcLnNwaWxsXChcLm50YVwpXD1cPiIKKyJzdGYKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJzdGZbMTI0OF1cKFwubnRhXClcPVw+Igorc3luIG1hdGNoIGlhNjRvcGNvZGUgInN0Zlwuc3BpbGxcKFwubnRhXClcPVw+IgorInN4dAorc3luIG1hdGNoIGlhNjRvcGNvZGUgInN4dFsxMjRdXD4iCisidGJpdC90bmF0CitzeW4gbWF0Y2ggaWE2NG9wY29kZSAidFwoYml0XHxuYXRcKVwoXC5uelx8XC56XClcPVwoXC5cKHVuY1x8b3JcKFwuYW5kY21cfGNtXClcPVx8YW5kXChcLm9yY21cfGNtXClcPVwpXClcPVw+IgorInVucGFjaworc3luIG1hdGNoIGlhNjRvcGNvZGUgInVucGFja1sxMjRdXC5bbGhdXD4iCisieGNocQorc3luIG1hdGNoIGlhNjRvcGNvZGUgInhjaGdbMTI0OF1cKFwubnRbMWFdXClcPVw+IgorInhtYS94bXB5CitzeW4gbWF0Y2ggaWE2NG9wY29kZSAieG1cKGFcfHB5XClcLltsaF11XD1cPiIKKyJ6eHQKK3N5biBtYXRjaCBpYTY0b3Bjb2RlICJ6eHRbMTI0XVw+IgorCisKKyJUaGUgcmVnZXggZm9yIGRpZmZlcmVudCBpYTY0IHJlZ2lzdGVycyBhcmUgZ2l2ZW4gYmVsb3cKKworImxpbWl0cyB0aGUgclhYWCBhbmQgZlhYWCBhbmQgY3Igc3VmZml4IGluIHRoZSByYW5nZSAwLTEyNworc3luIG1hdGNoIGlhNjRyZWdpc3RlcnMgIlwoW2ZyXVx8Y3JcKVwoWzAtOV1cfFsxLTldWzAtOV1cfDFbMC0xXVswLTldXHwxMlswLTddXClcezF9XD4iCisiYnJhbmNoIGlhNjRyZWdpc3RlcnMKK3N5biBtYXRjaCBpYTY0cmVnaXN0ZXJzICJiWzAtN11cPiIKKyJwcmVkaWNhdGUgaWE2NHJlZ2lzdGVycworc3luIG1hdGNoIGlhNjRyZWdpc3RlcnMgInBcKFswLTldXHxbMS01XVswLTldXHw2WzAtM11cKVw+IgorImFwcGxpY2F0aW9uIGlhNjRyZWdpc3RlcnMKK3N5biBtYXRjaCBpYTY0cmVnaXN0ZXJzICJhclwuXChmcHNyXHxtYXRcfHVuYXRcfHJuYXRcfHBmc1x8YnNwXHxic3BzdG9yZVx8cnNjXHxsY1x8ZWNcfGNjdlx8aXRjXHxrWzAtN11cKVw+IgorImlhMzIgQVIncworc3luIG1hdGNoIGlhNjRyZWdpc3RlcnMgImFyXC5cKGVmbGFnXHxmY3JcfGNzZFx8c3NkXHxjZmxnXHxmc3JcfGZpclx8ZmRyXClcPiIKKyJzcC9ncC9wci9wci5yb3QvcnAKK3N5biBrZXl3b3JkIGlhNjRyZWdpc3RlcnMgc3AgZ3AgcHIgcHIucm90IHJwIGlwIHRwCisiaW4vb3V0L2xvY2FsCitzeW4gbWF0Y2ggaWE2NHJlZ2lzdGVycyAiXChpblx8b3V0XHxsb2NcKVwoWzAtOV1cfFsxLThdWzAtOV1cfDlbMC01XVwpXD4iCisiYXJndW1lbnQgaWE2NHJlZ2lzdGVycworc3luIG1hdGNoIGlhNjRyZWdpc3RlcnMgImZhcmdbMC03XVw+IgorInJldHVybiB2YWx1ZSBpYTY0cmVnaXN0ZXJzCitzeW4gbWF0Y2ggaWE2NHJlZ2lzdGVycyAiZnJldFswLTddXD4iCisicHNyCitzeW4gbWF0Y2ggaWE2NHJlZ2lzdGVycyAicHNyXChcLlwobFx8dW1cKVwpXD1cPiIKKyJjcgorc3luIG1hdGNoIGlhNjRyZWdpc3RlcnMgImNyXC5cKGRjclx8aXRtXHxpdmFcfHB0YVx8aXBzclx8aXNyXHxpZmFcfGlpcFx8aXRpclx8aWlwYVx8aWZzXHxpaW1cfGloYVx8bGlkXHxpdnJcfHRwclx8ZW9pXHxpcnJbMC0zXVx8aXR2XHxwbXZcfGxyclswMV1cfGNtY3ZcKVw+IgorIkluZGlyZWN0IHJlZ2lzdGVycworc3luIG1hdGNoIGlhNjRyZWdpc3RlcnMgIlwoY3B1aWRcfGRiclx8aWJyXHxwa3JcfHBtY1x8cG1kXHxyclx8aXRyXHxkdHJcKVw+IgorIk1VWCBwZXJtdXRhdGlvbnMgZm9yIDgtYml0IGVsZW1lbnRzCitzeW4gbWF0Y2ggaWE2NHJlZ2lzdGVycyAiXChAcmV2XHxAbWl4XHxAc2h1Zlx8QGFsdFx8QGJyY3N0XClcPiIKKyJmbG9hdGluZyBwb2ludCBjbGFzc2VzCitzeW4gbWF0Y2ggaWE2NHJlZ2lzdGVycyAiXChAbmF0XHxAcW5hblx8QHNuYW5cfEBwb3NcfEBuZWdcfEB6ZXJvXHxAdW5vcm1cfEBub3JtXHxAaW5mXClcPiIKKyJsaW5rIHJlbG9jYXRpb24gb3BlcmF0b3JzCitzeW4gbWF0Y2ggaWE2NHJlZ2lzdGVycyAiXChAXChcKFwoZ3BcfHNlY1x8c2VnXHxpbWFnZVwpcmVsXClcfGx0b2ZmXHxmcHRyXHxwdGxvZmZcfGx0dlx8c2VjdGlvblwpXClcPiIKKworIkRhdGEgYWxsb2NhdGlvbiBzeW50YXgKK3N5biBtYXRjaCBpYTY0ZGF0YSAiZGF0YVsxMjQ4XVwoXChcKFwudWFcKVw9XChcLm1zYlx8XC5sc2JcKVw9XClcfFwoXChcLm1zYlx8XC5sc2JcKVw9XChcLnVhXClcPVwpXClcPVw+Igorc3luIG1hdGNoIGlhNjRkYXRhICJyZWFsXChbNDhdXHwxWzA2XVwpXChcKFwoXC51YVwpXD1cKFwubXNiXHxcLmxzYlwpXD1cKVx8XChcKFwubXNiXHxcLmxzYlwpXD1cKFwudWFcKVw9XClcKVw9XD4iCitzeW4gbWF0Y2ggaWE2NGRhdGEgInN0cmluZ3pcPVwoXChcKFwudWFcKVw9XChcLm1zYlx8XC5sc2JcKVw9XClcfFwoXChcLm1zYlx8XC5sc2JcKVw9XChcLnVhXClcPVwpXClcPVw+IgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9pYTY0X3N5bl9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX2lhNjRfc3luX2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCSJwdXQgbWFzbSBncm91cHMgd2l0aCBvdXIgZ3JvdXBzCisJSGlMaW5rIG1hc21PcGVyYXRvcglpYTY0b3BlcmF0b3IKKwlIaUxpbmsgbWFzbURpcmVjdGl2ZQlpYTY0RGlyZWN0aXZlCisJSGlMaW5rIG1hc21PcGNvZGUJaWE2NE9wY29kZQorCUhpTGluayBtYXNtSWRlbnRpZmllcglpYTY0SWRlbnRpZmllcgorCUhpTGluayBtYXNtRmxvYXQJaWE2NEZsb2F0CisKKwkiaWE2NCBzcGVjaWZpYyBzdHVmZgorCUhpTGluayBpYTY0TGFiZWwJRGVmaW5lCisJSGlMaW5rIGlhNjRDb21tZW50CUNvbW1lbnQKKwlIaUxpbmsgaWE2NERpcmVjdGl2ZQlUeXBlCisJSGlMaW5rIGlhNjRvcGNvZGUJU3RhdGVtZW50CisJSGlMaW5rIGlhNjRyZWdpc3RlcnMJT3BlcmF0b3IKKwlIaUxpbmsgaWE2NHN0cmluZwlTdHJpbmcKKwlIaUxpbmsgaWE2NEhleAkJTnVtYmVyCisJSGlMaW5rIGlhNjRCaW5hcnkJTnVtYmVyCisJSGlMaW5rIGlhNjRPY3RhbAlOdW1iZXIKKwlIaUxpbmsgaWE2NEZsb2F0CUZsb2F0CisJSGlMaW5rIGlhNjREZWNpbWFsCU51bWJlcgorCUhpTGluayBpYTY0SWRlbnRpZmllcglJZGVudGlmaWVyCisJSGlMaW5rIGlhNjRkYXRhCQlUeXBlCisJSGlMaW5rIGlhNjRkZWxpbWl0ZXIJRGVsaW1pdGVyCisJSGlMaW5rIGlhNjRvcGVyYXRvcglPcGVyYXRvcgorCUhpTGluayBpYTY0VG9kbwkJVG9kbworCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImlhNjQiCisKKyIgdmltOiB0cz04IHN3PTIKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaWNlbWVudS52aW0gYi9ydW50aW1lL3N5bnRheC9pY2VtZW51LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTEwOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvaWNlbWVudS52aW0KQEAgLTAsMCArMSwzNiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUljZXdtIE1lbnUKKyIgTWFpbnRhaW5lcjoJSmFtZXMgTWFobGVyIDxqbWFobGVyQHB1cmR1ZS5lZHU+CisiIExhc3QgQ2hhbmdlOglUdWUgRGVjICA5IDIxOjA4OjIyIEVTVCAyMDAzCisiIEV4dGVuc2lvbnM6CX4vLmljZXdtL21lbnUKKyIgQ29tbWVudDoJSWNld20gaXMgYSBsaWdodHdlaWdodCB3aW5kb3cgbWFuYWdlci4gIFRoaXMgYWRkcyBzeW50YXgKKyIJCWhpZ2hsaWdodGluZyB3aGVuIGVkaXRpbmcgeW91ciB1c2VyJ3MgbWVudSBmaWxlICh+Ly5pY2V3bS9tZW51KS4KKworIiBjbGVhciBleGlzdGluZyBzeW50YXgKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImJMY3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworIiBub3QgY2FzZSBzZW5zaXRpdmUKK3N5bnRheCBjYXNlIGlnbm9yZQorCisiIGljb25zIC54cG0gLnBuZyBhbmQgLmdpZgorc3ludGF4IG1hdGNoIF9pY29uIC8iXD1cLy4qXC54cG0iXD0vCitzeW50YXggbWF0Y2ggX2ljb24gLyJcPVwvLipcLnBuZyJcPS8KK3N5bnRheCBtYXRjaCBfaWNvbiAvIlw9XC8uKlwuZ2lmIlw9Lworc3ludGF4IG1hdGNoIF9pY29uIC8iXC0iLworCisiIHNlcGFyYXRvcgorc3ludGF4IGtleXdvcmQgX3J1bGVzIHNlcGFyYXRvcgorCisiIHByb2cgYW5kIG1lbnUKK3N5bnRheCBrZXl3b3JkIF9pZHMgbWVudSBwcm9nCisKKyIgaGlnaGxpZ2h0cworaGlnaGxpZ2h0IGxpbmsgX3J1bGVzIFVuZGVybGluZWQKK2hpZ2hsaWdodCBsaW5rIF9pZHMgVHlwZQoraGlnaGxpZ2h0IGxpbmsgX2ljb24gU3BlY2lhbAorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJJY2VNZW51IgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaWNvbi52aW0gYi9ydW50aW1lL3N5bnRheC9pY29uLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTczYzQzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvaWNvbi52aW0KQEAgLTAsMCArMSwyMTIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglJY29uCisiIE1haW50YWluZXI6CVdlbmRlbGwgVHVybmVyIDx3ZW5kZWxsQGFkc2ktbTQuY29tPgorIiBVUkw6CQlmdHA6Ly9mdHAuaGFsY3lvbi5jb20vcHViL3VzZXJzL3d0dXJuZXIvaWNvbi52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGtleXdvcmQgIGljb25GdW5jdGlvbiAgIGFicyBhY29zIGFueSBhcmdzIGFzaW4gYXRhbiBiYWwKK3N5biBrZXl3b3JkICBpY29uRnVuY3Rpb24gICBjYWxsb3V0IGNlbnRlciBjaGFyIGNoZGlyIGNsb3NlIGNvbGxlY3QgY29weQorc3luIGtleXdvcmQgIGljb25GdW5jdGlvbiAgIGNvcyBjc2V0IGRlbGF5IGRlbGV0ZSBkZXRhYiBkaXNwbGF5IGR0b3IKK3N5biBrZXl3b3JkICBpY29uRnVuY3Rpb24gICBlbnRhYiBlcnJvcmNsZWFyIGV4aXQgZXhwIGZpbmQgZmx1c2ggZnVuY3Rpb24KK3N5biBrZXl3b3JkICBpY29uRnVuY3Rpb24gICBnZXQgZ2V0Y2ggZ2V0Y2hlIGdldGVudiBpYW5kIGljb20gaW1hZ2UKK3N5biBrZXl3b3JkICBpY29uRnVuY3Rpb24gICBpbnNlcnQgaW50ZWdlciBpb3IgaXNoaWZ0IGl4b3Iga2JoaXQga2V5CitzeW4ga2V5d29yZCAgaWNvbkZ1bmN0aW9uICAgbGVmdCBsaXN0IGxvYWRmdW5jIGxvZyBtYW55IG1hcCBtYXRjaAorc3luIGtleXdvcmQgIGljb25GdW5jdGlvbiAgIG1lbWJlciBtb3ZlIG5hbWUgbnVtZXJpYyBvcGVuIG9yZCBwb3AKK3N5biBrZXl3b3JkICBpY29uRnVuY3Rpb24gICBwb3MgcHJvYyBwdWxsIHB1c2ggcHV0IHJlYWQgcmVhZHMKK3N5biBrZXl3b3JkICBpY29uRnVuY3Rpb24gICByZWFsIHJlbW92ZSByZW5hbWUgcmVwbCByZXZlcnNlIHJpZ2h0IHJ0b2QKK3N5biBrZXl3b3JkICBpY29uRnVuY3Rpb24gICBydW5lcnIgc2F2ZSBzZWVrIHNlcSBzZXQgc2luIHNvcnQKK3N5biBrZXl3b3JkICBpY29uRnVuY3Rpb24gICBzb3J0ZiBzcXJ0IHN0b3Agc3RyaW5nIHN5c3RlbSB0YWIgdGFibGUKK3N5biBrZXl3b3JkICBpY29uRnVuY3Rpb24gICB0YW4gdHJpbSB0eXBlIHVwdG8gdmFyaWFibGUgd2hlcmUgd3JpdGUgd3JpdGVzCisKKyIgS2V5d29yZHMKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmFsbG9jYXRlZCIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmFzY2lpIgorc3luIG1hdGNoIGljb25LZXl3b3JkICImY2xvY2siCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZjb2xsZWN0aW9ucyIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmNzZXQiCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZjdXJyZW50Igorc3luIG1hdGNoIGljb25LZXl3b3JkICImZGF0ZSIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmRhdGVsaW5lIgorc3luIG1hdGNoIGljb25LZXl3b3JkICImZGlnaXRzIgorc3luIG1hdGNoIGljb25LZXl3b3JkICImZHVtcCIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmUiCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZlcnJvciIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmVycm9ybnVtYmVyIgorc3luIG1hdGNoIGljb25LZXl3b3JkICImZXJyb3J0ZXh0Igorc3luIG1hdGNoIGljb25LZXl3b3JkICImZXJyb3J2YWx1ZSIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmVycm91dCIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmZhaWwiCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZmZWF0dXJlcyIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmZpbGUiCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZob3N0Igorc3luIG1hdGNoIGljb25LZXl3b3JkICImaW5wdXQiCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZsY2FzZSIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmxldHRlcnMiCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZsZXZlbCIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJmxpbmUiCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZtYWluIgorc3luIG1hdGNoIGljb25LZXl3b3JkICImbnVsbCIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJm91dHB1dCIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJnBoaSIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJnBpIgorc3luIG1hdGNoIGljb25LZXl3b3JkICImcG9zIgorc3luIG1hdGNoIGljb25LZXl3b3JkICImcHJvZ25hbWUiCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZyYW5kb20iCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZyZWdpb25zIgorc3luIG1hdGNoIGljb25LZXl3b3JkICImc291cmNlIgorc3luIG1hdGNoIGljb25LZXl3b3JkICImc3RvcmFnZSIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJnN1YmplY3QiCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZ0aW1lIgorc3luIG1hdGNoIGljb25LZXl3b3JkICImdHJhY2UiCitzeW4gbWF0Y2ggaWNvbktleXdvcmQgIiZ1Y2FzZSIKK3N5biBtYXRjaCBpY29uS2V5d29yZCAiJnZlcnNpb24iCisKKyIgUmVzZXJ2ZWQgd29yZHMKK3N5biBrZXl3b3JkIGljb25SZXNlcnZlZCBicmVhayBieSBjYXNlIGNyZWF0ZSBkZWZhdWx0IGRvCitzeW4ga2V5d29yZCBpY29uUmVzZXJ2ZWQgZWxzZSBlbmQgZXZlcnkgZmFpbCBpZgorc3luIGtleXdvcmQgaWNvblJlc2VydmVkIGluaXRpYWwgbGluayBuZXh0IG5vdCBvZgorc3luIGtleXdvcmQgaWNvblJlc2VydmVkIHByb2NlZHVyZSByZXBlYXQgcmV0dXJuIHN1c3BlbmQKK3N5biBrZXl3b3JkIGljb25SZXNlcnZlZCB0aGVuIHRvIHVudGlsIHdoaWxlCisKKyIgU3RvcmFnZSBjbGFzcyByZXNlcnZlZCB3b3Jkcworc3luIGtleXdvcmQJaWNvblN0b3JhZ2VDbGFzcwlnbG9iYWwgc3RhdGljIGxvY2FsIHJlY29yZAorCitzeW4ga2V5d29yZAlpY29uVG9kbwljb250YWluZWQgVE9ETyBGSVhNRSBYWFggQlVHCisKKyIgU3RyaW5nIGFuZCBDaGFyYWN0ZXIgY29uc3RhbnRzCisiIEhpZ2hsaWdodCBzcGVjaWFsIGNoYXJhY3RlcnMgKHRob3NlIHdoaWNoIGhhdmUgYSBiYWNrc2xhc2gpIGRpZmZlcmVudGx5CitzeW4gbWF0Y2ggaWNvblNwZWNpYWwgY29udGFpbmVkICJcXHhceFx7Mn1cfFxcXG9cezNcfVx8XFxbYmRlZmxucnR2XCJcJ1xcXVx8XFxeY1thLXpBLVowLTldXHxcXCQiCitzeW4gcmVnaW9uCWljb25TdHJpbmcJc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWlucz1pY29uU3BlY2lhbAorc3luIHJlZ2lvbglpY29uQ3NldAlzdGFydD0rJysgc2tpcD0rXFxcXFx8XFwnKyBlbmQ9KycrIGNvbnRhaW5zPWljb25TcGVjaWFsCitzeW4gbWF0Y2gJaWNvbkNoYXJhY3RlcgkiJ1teXFxdJyIKKworIiBub3Qgc3VyZSBhYm91dCB0aGVzZQorInN5biBtYXRjaAlpY29uU3BlY2lhbENoYXJhY3RlciAiJ1xcW2JkZWZsbnJ0dl0nIgorInN5biBtYXRjaAlpY29uU3BlY2lhbENoYXJhY3RlciAiJ1xcXG9cezNcfSciCisic3luIG1hdGNoCWljb25TcGVjaWFsQ2hhcmFjdGVyICInXFx4XHhcezJ9JyIKKyJzeW4gbWF0Y2gJaWNvblNwZWNpYWxDaGFyYWN0ZXIgIidcXF5jXFthLXpBLVowLTldJyIKKworIndoZW4gd2FudGVkLCBoaWdobGlnaHQgdHJhaWxpbmcgd2hpdGUgc3BhY2UKK2lmIGV4aXN0cygiaWNvbl9zcGFjZV9lcnJvcnMiKQorICBzeW4gbWF0Y2gJaWNvblNwYWNlRXJyb3IJIlxzKiQiCisgIHN5biBtYXRjaAlpY29uU3BhY2VFcnJvcgkiIFwrXHQibWU9ZS0xCitlbmRpZgorCisiY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcworc3luIGNsdXN0ZXIJaWNvblBhcmVuR3JvdXAgY29udGFpbnM9aWNvblBhcmVuRXJyb3IsaWNvbkluY2x1ZGVkLGljb25TcGVjaWFsLGljb25Ub2RvLGljb25Vc2VyQ29udCxpY29uVXNlckxhYmVsLGljb25CaXRGaWVsZAorCitzeW4gcmVnaW9uCWljb25QYXJlbgl0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsQGljb25QYXJlbkdyb3VwCitzeW4gbWF0Y2gJaWNvblBhcmVuRXJyb3IJIikiCitzeW4gbWF0Y2gJaWNvbkluUGFyZW4JY29udGFpbmVkICJbe31dIgorCisKK3N5biBjYXNlIGlnbm9yZQorCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90CitzeW4gbWF0Y2gJaWNvbk51bWJlcgkJIlw8XGRcK1w+IgorCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRoIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaAlpY29uRmxvYXQJCSJcPFxkXCtcLlxkKlwoZVstK11cPVxkXCtcKVw9XD4iCisKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2gJaWNvbkZsb2F0CQkiXC5cZFwrXChlWy0rXVw9XGRcK1wpXD1cPiIKKworImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aG91dCBkb3QsIHdpdGggZXhwb25lbnQKK3N5biBtYXRjaAlpY29uRmxvYXQJCSJcPFxkXCtlWy0rXVw9XGRcK1w+IgorCisicmFkaXggbnVtYmVyCitzeW4gbWF0Y2gJaWNvblJhZGl4CQkiXDxcZFx7MSwyfVtyUl1bYS16QS1aMC05XVwrXD4iCisKKworIiBzeW4gbWF0Y2ggaWNvbklkZW50aWZpZXIJIlw8W2Etel9dW2EtejAtOV9dKlw+IgorCitzeW4gY2FzZSBtYXRjaAorCisiIENvbW1lbnQKK3N5biBtYXRjaAlpY29uQ29tbWVudAkiIy4qIiBjb250YWlucz1pY29uVG9kbyxpY29uU3BhY2VFcnJvcgorCitzeW4gcmVnaW9uCWljb25QcmVDb25kaXQgc3RhcnQ9Il5ccyokXHMqXChpZlw+XHxpZmRlZlw+XHxpZm5kZWZcPlx8ZWxpZlw+XHxlbHNlXD5cfGVuZGlmXD5cKSIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPWljb25Db21tZW50LGljb25TdHJpbmcsaWNvbkNoYXJhY3RlcixpY29uTnVtYmVyLGljb25Db21tZW50RXJyb3IsaWNvblNwYWNlRXJyb3IKKworc3luIHJlZ2lvbglpY29uSW5jbHVkZWQJY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisKK3N5biBtYXRjaAlpY29uSW5jbHVkZWQJY29udGFpbmVkICI8W14+XSo+Igorc3luIG1hdGNoCWljb25JbmNsdWRlCSJeXHMqJFxzKmluY2x1ZGVcPlxzKlsiPF0iIGNvbnRhaW5zPWljb25JbmNsdWRlZAorInN5biBtYXRjaCBpY29uTGluZVNraXAJIlxcJCIKKworc3luIGNsdXN0ZXIJaWNvblByZVByb2NHcm91cCBjb250YWlucz1pY29uUHJlQ29uZGl0LGljb25JbmNsdWRlZCxpY29uSW5jbHVkZSxpY29uRGVmaW5lLGljb25JblBhcmVuLGljb25Vc2VyTGFiZWwKKworc3luIHJlZ2lvbglpY29uRGVmaW5lCXN0YXJ0PSJeXHMqJFxzKlwoZGVmaW5lXD5cfHVuZGVmXD5cKSIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPUFMTEJVVCxAaWNvblByZVByb2NHcm91cAorCisid3Q6c3luIHJlZ2lvbglpY29uUHJlUHJvYyAic3RhcnQ9Il5ccyojXHMqXChwcmFnbWFcPlx8bGluZVw+XHx3YXJuaW5nXD5cfHdhcm5cPlx8ZXJyb3JcPlwpIiBza2lwPSJcXCQiICJlbmQ9IiQiIGNvbnRhaW5zPUFMTEJVVCxAaWNvblByZVByb2NHcm91cAorCisiIEhpZ2hsaWdodCBVc2VyIExhYmVscworCisiIHN5biBjbHVzdGVyCWljb25NdWx0aUdyb3VwIGNvbnRhaW5zPWljb25JbmNsdWRlZCxpY29uU3BlY2lhbCxpY29uVG9kbyxpY29uVXNlckNvbnQsaWNvblVzZXJMYWJlbCxpY29uQml0RmllbGQKKworaWYgIWV4aXN0cygiaWNvbl9taW5saW5lcyIpCisgIGxldCBpY29uX21pbmxpbmVzID0gMTUKK2VuZGlmCitleGVjICJzeW4gc3luYyBjY29tbWVudCBpY29uQ29tbWVudCBtaW5saW5lcz0iIC4gaWNvbl9taW5saW5lcworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisKKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfaWNvbl9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9pY29uX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorCisgICIgSGlMaW5rIGljb25TcGVjaWFsQ2hhcmFjdGVyCWljb25TcGVjaWFsCisKKyAgSGlMaW5rIGljb25PY3RhbEVycm9yCQlpY29uRXJyb3IKKyAgSGlMaW5rIGljb25QYXJlbkVycm9yCQlpY29uRXJyb3IKKyAgSGlMaW5rIGljb25JblBhcmVuCQlpY29uRXJyb3IKKyAgSGlMaW5rIGljb25Db21tZW50RXJyb3IJaWNvbkVycm9yCisgIEhpTGluayBpY29uU3BhY2VFcnJvcgkJaWNvbkVycm9yCisgIEhpTGluayBpY29uQ29tbWVudEVycm9yCWljb25FcnJvcgorICBIaUxpbmsgaWNvbkluY2x1ZGVkCQlpY29uU3RyaW5nCisgIEhpTGluayBpY29uQ29tbWVudFN0cmluZwlpY29uU3RyaW5nCisgIEhpTGluayBpY29uQ29tbWVudDJTdHJpbmcJaWNvblN0cmluZworICBIaUxpbmsgaWNvbkNvbW1lbnRTa2lwCWljb25Db21tZW50CisKKyAgSGlMaW5rIGljb25Vc2VyTGFiZWwJCUxhYmVsCisgIEhpTGluayBpY29uQ2hhcmFjdGVyCQlDaGFyYWN0ZXIKKyAgSGlMaW5rIGljb25OdW1iZXIJCQlOdW1iZXIKKyAgSGlMaW5rIGljb25SYWRpeAkJCU51bWJlcgorICBIaUxpbmsgaWNvbkZsb2F0CQkJRmxvYXQKKyAgSGlMaW5rIGljb25JbmNsdWRlCQlJbmNsdWRlCisgIEhpTGluayBpY29uUHJlUHJvYwkJUHJlUHJvYworICBIaUxpbmsgaWNvbkRlZmluZQkJCU1hY3JvCisgIEhpTGluayBpY29uRXJyb3IJCQlFcnJvcgorICBIaUxpbmsgaWNvblN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBpY29uUHJlQ29uZGl0CQlQcmVDb25kaXQKKyAgSGlMaW5rIGljb25TdHJpbmcJCQlTdHJpbmcKKyAgSGlMaW5rIGljb25Dc2V0CQkJU3RyaW5nCisgIEhpTGluayBpY29uQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgaWNvblNwZWNpYWwJCVNwZWNpYWxDaGFyCisgIEhpTGluayBpY29uVG9kbwkJCVRvZG8KKyAgSGlMaW5rIGljb25TdG9yYWdlQ2xhc3MJU3RvcmFnZUNsYXNzCisgIEhpTGluayBpY29uRnVuY3Rpb24JCVN0YXRlbWVudAorICBIaUxpbmsgaWNvblJlc2VydmVkCQlMYWJlbAorICBIaUxpbmsgaWNvbktleXdvcmQJCU9wZXJhdG9yCisKKyAgIkhpTGluayBpY29uSWRlbnRpZmllcglJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImljb24iCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2lkbC52aW0gYi9ydW50aW1lL3N5bnRheC9pZGwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0Y2YwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9pZGwudmltCkBAIC0wLDAgKzEsMjAzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJSURMIChJbnRlcmZhY2UgRGVzY3JpcHRpb24gTGFuZ3VhZ2UpCisiIE1haW50YWluZXI6CUpvZHkgR29sZGJlcmcgPGpnb2xkYmVyZ0Bob21lLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWF5IDA5CisKKyIgVGhpcyBpcyBhbiBleHBlcmltZW50LiAgSURMJ3Mgc3RydWN0dXJlIGlzIHNpbXBsZSBlbm91Z2ggdG8gcGVybWl0IGEgZnVsbAorIiBncmFtbWFyIGJhc2VkIGFwcHJvYWNoIHRvIHJhdGhlciB0aGFuIHVzaW5nIGEgZmV3IGhldXJpc3RpY3MuICBUaGUgcmVzdWx0CisiIGlzIGxhcmdlIGFuZCBzb21ld2hhdCByZXBldGF0aXZlIGJ1dCBzZWVtcyB0byB3b3JrLgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgTWlzYyBiYXNpYworc3luIG1hdGNoCWlkbElkCQljb250YWluZWQgIlthLXpBLVpdW2EtekEtWjAtOV9dKiIKK3N5biBtYXRjaAlpZGxTZW1pQ29sb24JY29udGFpbmVkICI7Igorc3luIG1hdGNoCWlkbENvbW1hQXJnCWNvbnRhaW5lZCAiLCIJCQlza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxTaW1wRGVjbAorc3luIHJlZ2lvbglpZGxBcnJheVNpemUxCWNvbnRhaW5lZCBzdGFydD06XFs6IGVuZD06XF06CXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbEFycmF5U2l6ZTEsaWRsU2VtaUNvbG9uLGlkbENvbW1hQXJnIGNvbnRhaW5zPWlkbEFycmF5U2l6ZTEsaWRsTGl0ZXJhbAorc3luIG1hdGNoICAgaWRsU2ltcERlY2wJIGNvbnRhaW5lZCAiW2EtekEtWl1bYS16QS1aMC05X10qIglza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxTZW1pQ29sb24saWRsQ29tbWFBcmcsaWRsQXJyYXlTaXplMQorc3luIHJlZ2lvbiAgaWRsU3RpbmcJIGNvbnRhaW5lZCBzdGFydD0rIisgIHNraXA9K1xcXChcXFxcXCkqIisgIGVuZD0rIisKK3N5biBtYXRjaCAgIGlkbExpdGVyYWwJIGNvbnRhaW5lZCAiWzEtOV1cZCpcKFwuXGQqXClcPSIKK3N5biBtYXRjaCAgIGlkbExpdGVyYWwJIGNvbnRhaW5lZCAiXC5cZFwrIgorc3luIGtleXdvcmQgaWRsTGl0ZXJhbAkgY29udGFpbmVkIFRSVUUgRkFMU0UKKworIiBDb21tZW50cworc3luIGtleXdvcmQgaWRsVG9kbyBjb250YWluZWQJVE9ETyBGSVhNRSBYWFgKK3N5biByZWdpb24gaWRsQ29tbWVudAkJc3RhcnQ9Ii9cKiIgIGVuZD0iXCovIiBjb250YWlucz1pZGxUb2RvCitzeW4gbWF0Y2ggIGlkbENvbW1lbnQJCSIvLy4qIiBjb250YWlucz1pZGxUb2RvCitzeW4gbWF0Y2ggIGlkbENvbW1lbnRFcnJvcgkiXCovIgorCisiIEMgc3R5bGUgUHJlcHJvY2Vzc29yCitzeW4gcmVnaW9uIGlkbEluY2x1ZGVkIGNvbnRhaW5lZCBzdGFydD0rIisgIHNraXA9K1xcXChcXFxcXCkqIisgIGVuZD0rIisKK3N5biBtYXRjaCAgaWRsSW5jbHVkZWQgY29udGFpbmVkICI8W14+XSo+Igorc3luIG1hdGNoICBpZGxJbmNsdWRlCQkiXlsgXHRdKiNbIFx0XSppbmNsdWRlXD5bIFx0XSpbIjxdIiBjb250YWlucz1pZGxJbmNsdWRlZCxpZGxTdHJpbmcKK3N5biByZWdpb24gaWRsUHJlQ29uZGl0CXN0YXJ0PSJeWyBcdF0qI1sgXHRdKlwoaWZcPlx8aWZkZWZcPlx8aWZuZGVmXD5cfGVsaWZcPlx8ZWxzZVw+XHxlbmRpZlw+XCkiICBza2lwPSJcXCQiICBlbmQ9IiQiIGNvbnRhaW5zPWlkbENvbW1lbnQsaWRsQ29tbWVudEVycm9yCitzeW4gcmVnaW9uIGlkbERlZmluZQlzdGFydD0iXlsgXHRdKiNbIFx0XSpcKGRlZmluZVw+XHx1bmRlZlw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1pZGxMaXRlcmFsLCBpZGxTdHJpbmcKKworIiBDb25zdGFudHMKK3N5biBrZXl3b3JkIGlkbENvbnN0CWNvbnN0CXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbEJhc2VUeXBlLGlkbEJhc2VUeXBlSW50CisKKyIgQXR0cmlidXRlCitzeW4ga2V5d29yZCBpZGxST0F0dHIJcmVhZG9ubHkJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsQXR0cgorc3luIGtleXdvcmQgaWRsQXR0cglhdHRyaWJ1dGUJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsQmFzZVR5cGVJbnQsaWRsQmFzZVR5cGUKKworIiBUeXBlcworc3luIHJlZ2lvbiAgaWRsRDQJY29udGFpbmVkIHN0YXJ0PSI8IiBlbmQ9Ij4iCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFNpbXBEZWNsCWNvbnRhaW5zPWlkbFNlcVR5cGUsaWRsQmFzZVR5cGVJbnQsaWRsQmFzZVR5cGUsaWRsTGl0ZXJhbAorc3luIGtleXdvcmQgaWRsU2VxVHlwZQljb250YWluZWQgc2VxdWVuY2UJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbEQ0CitzeW4ga2V5d29yZCBpZGxCYXNlVHlwZQkJY29udGFpbmVkCWZsb2F0IGRvdWJsZSBjaGFyIGJvb2xlYW4gb2N0ZXQgYW55CXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFNpbXBEZWNsCitzeW4ga2V5d29yZCBpZGxCYXNlVHlwZUludAljb250YWluZWQJc2hvcnQgbG9uZwkJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsU2ltcERlY2wKK3N5biBrZXl3b3JkIGlkbEJhc2VUeXBlCQljb250YWluZWQJdW5zaWduZWQJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbEJhc2VUeXBlSW50CitzeW4gcmVnaW9uICBpZGxEMQkJY29udGFpbmVkCXN0YXJ0PSI8IiBlbmQ9Ij4iCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFNpbXBEZWNsCWNvbnRhaW5zPWlkbFN0cmluZyxpZGxMaXRlcmFsCitzeW4ga2V5d29yZCBpZGxCYXNlVHlwZQkJY29udGFpbmVkCXN0cmluZwlza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxEMSxpZGxTaW1wRGVjbAorc3luIG1hdGNoICAgaWRsQmFzZVR5cGUJCWNvbnRhaW5lZAkiW2EtekEtWjAtOV9dXCtbIFx0XSpcKDo6WyBcdF0qW2EtekEtWjAtOV9dXCtcKSoiCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFNpbXBEZWNsCisKKyIgTW9kdWxlcworc3luIHJlZ2lvbiAgaWRsTW9kdWxlQ29udGVudCBjb250YWluZWQgc3RhcnQ9InsiIGVuZD0ifSIJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsU2VtaUNvbG9uIGNvbnRhaW5zPWlkbFVuaW9uLGlkbFN0cnVjdCxpZGxFbnVtLGlkbEludGVyZmFjZSxpZGxDb21tZW50LGlkbFR5cGVkZWYsaWRsQ29uc3QsaWRsRXhjZXB0aW9uLGlkbE1vZHVsZQorc3luIG1hdGNoICAgaWRsTW9kdWxlTmFtZSBjb250YWluZWQJIlthLXpBLVowLTlfXVwrIglza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxNb2R1bGVDb250ZW50LGlkbFNlbWlDb2xvbgorc3luIGtleXdvcmQgaWRsTW9kdWxlCQkJbW9kdWxlCQkJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsTW9kdWxlTmFtZQorCisiIEludGVyZmFjZXMKK3N5biByZWdpb24gIGlkbEludGVyZmFjZUNvbnRlbnQgY29udGFpbmVkIHN0YXJ0PSJ7IiBlbmQ9In0iCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFNlbWlDb2xvbiBjb250YWlucz1pZGxVbmlvbixpZGxTdHJ1Y3QsaWRsRW51bSxpZGxDb21tZW50LGlkbFJPQXR0cixpZGxBdHRyLGlkbE9wLGlkbE9uZVdheU9wLGlkbEV4Y2VwdGlvbixpZGxDb25zdCxpZGxUeXBlZGVmCitzeW4gbWF0Y2ggICBpZGxJbmhlcml0RnJvbTIgY29udGFpbmVkICIsIiBza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxJbmhlcml0RnJvbQorc3luIG1hdGNoIGlkbEluaGVyaXRGcm9tIGNvbnRhaW5lZCAiW2EtekEtWjAtOV9dXCtbIFx0XSpcKDo6WyBcdF0qW2EtekEtWjAtOV9dXCtcKSoiIHNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbEluaGVyaXRGcm9tMixpZGxJbnRlcmZhY2VDb250ZW50CitzeW4gbWF0Y2ggaWRsSW5oZXJpdCBjb250YWluZWQJIjoiCQlza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxJbmhlcml0RnJvbQorc3luIG1hdGNoICAgaWRsSW50ZXJmYWNlTmFtZSBjb250YWluZWQJIlthLXpBLVowLTlfXVwrIglza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxJbnRlcmZhY2VDb250ZW50LGlkbEluaGVyaXQsaWRsU2VtaUNvbG9uCitzeW4ga2V5d29yZCBpZGxJbnRlcmZhY2UJCWludGVyZmFjZQkJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsSW50ZXJmYWNlTmFtZQorCisKKyIgUmFpc2VzCitzeW4ga2V5d29yZCBpZGxSYWlzZXMJY29udGFpbmVkIHJhaXNlcwlza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxSYWlzZXMsaWRsQ29udGV4dCxpZGxTZW1pQ29sb24KKworIiBDb250ZXh0CitzeW4ga2V5d29yZCBpZGxDb250ZXh0CWNvbnRhaW5lZCBjb250ZXh0CXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFJhaXNlcyxpZGxDb250ZXh0LGlkbFNlbWlDb2xvbgorCisiIE9wZXJhdGlvbgorc3luIG1hdGNoICAgaWRsUGFybUxpc3QJY29udGFpbmVkICIsIiBza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxPcFBhcm1zCitzeW4gcmVnaW9uICBpZGxBcnJheVNpemUgY29udGFpbmVkIHN0YXJ0PSJcWyIgZW5kPSJcXSIJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsQXJyYXlTaXplLGlkbFBhcm1MaXN0IGNvbnRhaW5zPWlkbEFycmF5U2l6ZSxpZGxMaXRlcmFsCitzeW4gbWF0Y2ggICBpZGxQYXJtTmFtZSBjb250YWluZWQgIlthLXpBLVowLTlfXVwrIglza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxQYXJtTGlzdCxpZGxBcnJheVNpemUKK3N5biBrZXl3b3JkIGlkbFBhcm1JbnQJY29udGFpbmVkIHNob3J0IGxvbmcJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFBhcm1OYW1lCitzeW4ga2V5d29yZCBpZGxQYXJtVHlwZQljb250YWluZWQgdW5zaWduZWQJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFBhcm1JbnQKK3N5biByZWdpb24gIGlkbEQzCWNvbnRhaW5lZCBzdGFydD0iPCIgZW5kPSI+Iglza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxQYXJtTmFtZQljb250YWlucz1pZGxTdHJpbmcsaWRsTGl0ZXJhbAorc3luIGtleXdvcmQgaWRsUGFybVR5cGUJY29udGFpbmVkIHN0cmluZwkJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsRDMsaWRsUGFybU5hbWUKK3N5biBrZXl3b3JkIGlkbFBhcm1UeXBlCWNvbnRhaW5lZCB2b2lkIGZsb2F0IGRvdWJsZSBjaGFyIGJvb2xlYW4gb2N0ZXQgYW55CSAgc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsUGFybU5hbWUKK3N5biBtYXRjaCAgIGlkbFBhcm1UeXBlCWNvbnRhaW5lZCAiW2EtekEtWjAtOV9dXCtbIFx0XSpcKDo6WyBcdF0qW2EtekEtWjAtOV9dXCtcKSoiIHNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFBhcm1OYW1lCitzeW4ga2V5d29yZCBpZGxPcFBhcm1zCWNvbnRhaW5lZCBpbiBvdXQgaW5vdXQJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFBhcm1UeXBlCisKK3N5biByZWdpb24gaWRsT3BDb250ZW50cyBjb250YWluZWQgc3RhcnQ9IigiIGVuZD0iKSIJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsUmFpc2VzLGlkbENvbnRleHQsaWRsU2VtaUNvbG9uIGNvbnRhaW5zPWlkbE9wUGFybXMKK3N5biBtYXRjaCAgIGlkbE9wTmFtZSAgIGNvbnRhaW5lZCAiW2EtekEtWjAtOV9dXCsiCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbE9wQ29udGVudHMKK3N5biBrZXl3b3JkIGlkbE9wSW50CWNvbnRhaW5lZCBzaG9ydCBsb25nCQlza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxPcE5hbWUKK3N5biByZWdpb24gIGlkbEQyCWNvbnRhaW5lZCBzdGFydD0iPCIgZW5kPSI+Iglza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxPcE5hbWUJY29udGFpbnM9aWRsU3RyaW5nLGlkbExpdGVyYWwKK3N5biBrZXl3b3JkIGlkbE9wCWNvbnRhaW5lZCB1bnNpZ25lZAkJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsT3BJbnQKK3N5biBrZXl3b3JkIGlkbE9wCWNvbnRhaW5lZCBzdHJpbmcJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbEQyLGlkbE9wTmFtZQorc3luIGtleXdvcmQgaWRsT3AJY29udGFpbmVkIHZvaWQgZmxvYXQgZG91YmxlIGNoYXIgYm9vbGVhbiBvY3RldCBhbnkJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbE9wTmFtZQorc3luIG1hdGNoICAgaWRsT3AJY29udGFpbmVkICJbYS16QS1aMC05X11cK1sgXHRdKlwoOjpbIFx0XSpbYS16QS1aMC05X11cK1wpKiIJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsT3BOYW1lCitzeW4ga2V5d29yZCBpZGxPcAljb250YWluZWQgdm9pZAkJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbE9wTmFtZQorc3luIGtleXdvcmQgaWRsT25lV2F5T3AJY29udGFpbmVkIG9uZXdheQkJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRPcAorCisiIEVudW0KK3N5biByZWdpb24gIGlkbEVudW1Db250ZW50cyBjb250YWluZWQgc3RhcnQ9InsiIGVuZD0ifSIJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFNlbWlDb2xvbiwgaWRsU2ltcERlY2wgY29udGFpbnM9aWRsSWQsaWRsQ29tbWVudAorc3luIG1hdGNoICAgaWRsRW51bU5hbWUgY29udGFpbmVkCSJbYS16QS1aMC05X11cKyIJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsRW51bUNvbnRlbnRzCitzeW4ga2V5d29yZCBpZGxFbnVtCQkJZW51bQkJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbEVudW1OYW1lCisKKyIgVHlwZWRlZgorc3luIGtleXdvcmQgaWRsVHlwZWRlZgkJCXR5cGVkZWYJCQlza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxCYXNlVHlwZSwgaWRsQmFzZVR5cGVJbnQsIGlkbFNlcVR5cGUKKworIiBTdHJ1Y3QKK3N5biByZWdpb24gIGlkbFN0cnVjdENvbnRlbnQgY29udGFpbmVkIHN0YXJ0PSJ7IiBlbmQ9In0iIHNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFNlbWlDb2xvbiwgaWRsU2ltcERlY2wJY29udGFpbnM9aWRsQmFzZVR5cGUsIGlkbEJhc2VUeXBlSW50LCBpZGxTZXFUeXBlLGlkbENvbW1lbnQsIGlkbEVudW0sIGlkbFVuaW9uCitzeW4gbWF0Y2ggICBpZGxTdHJ1Y3ROYW1lIGNvbnRhaW5lZAkiW2EtekEtWjAtOV9dXCsiIHNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFN0cnVjdENvbnRlbnQKK3N5biBrZXl3b3JkIGlkbFN0cnVjdAkJCXN0cnVjdAkJIHNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFN0cnVjdE5hbWUKKworIiBFeGNlcHRpb24KK3N5biBrZXl3b3JkIGlkbEV4Y2VwdGlvbiBleGNlcHRpb24gc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsU3RydWN0TmFtZQorCisiIFVuaW9uCitzeW4gbWF0Y2ggICBpZGxDb2xvbiBjb250YWluZWQgIjoiCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbENhc2UsaWRsU2VxVHlwZSxpZGxCYXNlVHlwZSxpZGxCYXNlVHlwZUludAorc3luIHJlZ2lvbiAgaWRsQ2FzZUxhYmVsIGNvbnRhaW5lZCBzdGFydD0iIiBza2lwPSI6OiIgZW5kPSI6Im1lPWUtMQlza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxDb2xvbiBjb250YWlucz1pZGxMaXRlcmFsLGlkbFN0cmluZworc3luIGtleXdvcmQgaWRsQ2FzZQkJY29udGFpbmVkIGNhc2UJCQkJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsQ2FzZUxhYmVsCitzeW4ga2V5d29yZCBpZGxDYXNlCQljb250YWluZWQgZGVmYXVsdAkJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbENvbG9uCitzeW4gcmVnaW9uICBpZGxVbmlvbkNvbnRlbnQJY29udGFpbmVkIHN0YXJ0PSJ7IiBlbmQ9In0iCQlza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxTZW1pQ29sb24saWRsU2ltcERlY2wJY29udGFpbnM9aWRsQ2FzZQorc3luIHJlZ2lvbiAgaWRsU3dpdGNoVHlwZQljb250YWluZWQgc3RhcnQ9IigiIGVuZD0iKSIJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFVuaW9uQ29udGVudAorc3luIGtleXdvcmQgaWRsVW5pb25Td2l0Y2gJY29udGFpbmVkIHN3aXRjaAkJCXNraXBlbXB0eSBza2lwd2hpdGUgbmV4dGdyb3VwPWlkbFN3aXRjaFR5cGUKK3N5biBtYXRjaCAgIGlkbFVuaW9uTmFtZQljb250YWluZWQgIlthLXpBLVowLTlfXVwrIgkJc2tpcGVtcHR5IHNraXB3aGl0ZSBuZXh0Z3JvdXA9aWRsVW5pb25Td2l0Y2gKK3N5biBrZXl3b3JkIGlkbFVuaW9uCQl1bmlvbgkJCQlza2lwZW1wdHkgc2tpcHdoaXRlIG5leHRncm91cD1pZGxVbmlvbk5hbWUKKworc3luIHN5bmMgbGluZXM9MjAwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2lkbF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9pZGxfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgaWRsSW5jbHVkZQkJSW5jbHVkZQorICBIaUxpbmsgaWRsUHJlUHJvYwkJUHJlUHJvYworICBIaUxpbmsgaWRsUHJlQ29uZGl0CQlQcmVDb25kaXQKKyAgSGlMaW5rIGlkbERlZmluZQkJTWFjcm8KKyAgSGlMaW5rIGlkbEluY2x1ZGVkCQlTdHJpbmcKKyAgSGlMaW5rIGlkbFN0cmluZwkJU3RyaW5nCisgIEhpTGluayBpZGxDb21tZW50CQlDb21tZW50CisgIEhpTGluayBpZGxUb2RvCQlUb2RvCisgIEhpTGluayBpZGxMaXRlcmFsCQlOdW1iZXIKKworICBIaUxpbmsgaWRsTW9kdWxlCQlLZXl3b3JkCisgIEhpTGluayBpZGxJbnRlcmZhY2UJCUtleXdvcmQKKyAgSGlMaW5rIGlkbEVudW0JCUtleXdvcmQKKyAgSGlMaW5rIGlkbFN0cnVjdAkJS2V5d29yZAorICBIaUxpbmsgaWRsVW5pb24JCUtleXdvcmQKKyAgSGlMaW5rIGlkbFR5cGVkZWYJCUtleXdvcmQKKyAgSGlMaW5rIGlkbEV4Y2VwdGlvbgkJS2V5d29yZAorCisgIEhpTGluayBpZGxNb2R1bGVOYW1lCQlUeXBlZGVmCisgIEhpTGluayBpZGxJbnRlcmZhY2VOYW1lCVR5cGVkZWYKKyAgSGlMaW5rIGlkbEVudW1OYW1lCQlUeXBlZGVmCisgIEhpTGluayBpZGxTdHJ1Y3ROYW1lCQlUeXBlZGVmCisgIEhpTGluayBpZGxVbmlvbk5hbWUJCVR5cGVkZWYKKworICBIaUxpbmsgaWRsQmFzZVR5cGVJbnQJCWlkbFR5cGUKKyAgSGlMaW5rIGlkbEJhc2VUeXBlCQlpZGxUeXBlCisgIEhpTGluayBpZGxTZXFUeXBlCQlpZGxUeXBlCisgIEhpTGluayBpZGxEMQkJCVBhcmVuCisgIEhpTGluayBpZGxEMgkJCVBhcmVuCisgIEhpTGluayBpZGxEMwkJCVBhcmVuCisgIEhpTGluayBpZGxENAkJCVBhcmVuCisgICJIaUxpbmsgaWRsQXJyYXlTaXplCQlQYXJlbgorICAiSGlMaW5rIGlkbEFycmF5U2l6ZTEJCVBhcmVuCisgIEhpTGluayBpZGxNb2R1bGVDb250ZW50CVBhcmVuCisgIEhpTGluayBpZGxVbmlvbkNvbnRlbnQJUGFyZW4KKyAgSGlMaW5rIGlkbFN0cnVjdENvbnRlbnQJUGFyZW4KKyAgSGlMaW5rIGlkbEVudW1Db250ZW50cwlQYXJlbgorICBIaUxpbmsgaWRsSW50ZXJmYWNlQ29udGVudAlQYXJlbgorCisgIEhpTGluayBpZGxTaW1wRGVjbAkJSWRlbnRpZmllcgorICBIaUxpbmsgaWRsUk9BdHRyCQlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIGlkbEF0dHIJCUtleXdvcmQKKyAgSGlMaW5rIGlkbENvbnN0CQlTdG9yYWdlQ2xhc3MKKworICBIaUxpbmsgaWRsT25lV2F5T3AJCVN0b3JhZ2VDbGFzcworICBIaUxpbmsgaWRsT3AJCQlpZGxUeXBlCisgIEhpTGluayBpZGxQYXJtVHlwZQkJaWRsVHlwZQorICBIaUxpbmsgaWRsT3BOYW1lCQlGdW5jdGlvbgorICBIaUxpbmsgaWRsT3BQYXJtcwkJU3RvcmFnZUNsYXNzCisgIEhpTGluayBpZGxQYXJtTmFtZQkJSWRlbnRpZmllcgorICBIaUxpbmsgaWRsSW5oZXJpdEZyb20JCUlkZW50aWZpZXIKKworICBIaUxpbmsgaWRsSWQJCQlDb25zdGFudAorICAiSGlMaW5rIGlkbENhc2UJCUtleXdvcmQKKyAgSGlMaW5rIGlkbENhc2VMYWJlbAkJQ29uc3RhbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiaWRsIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaWRsYW5nLnZpbSBiL3J1bnRpbWUvc3ludGF4L2lkbGFuZy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1NjdlNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2lkbGFuZy52aW0KQEAgLTAsMCArMSwyNTMgQEAKKyIgSW50ZXJhY3RpdmUgRGF0YSBMYW5ndWFnZSBzeW50YXggZmlsZSAoSURMLCB0b28gIFs6LSldCisiIE1haW50YWluZXI6IEFsZWtzYW5kYXIgSmVsZW5hayA8YWplbGVuYWsgQVQgeWFob28uY29tPgorIiBMYXN0IGNoYW5nZTogMjAwMyBBcHIgMjUKKyIgQ3JlYXRlZCBieTogSGVybWFubiBSb2NoaG9seiA8SGVybWFubi5Sb2NoaG9seiBBVCBnbXguZGU+CisKKyIgUmVtb3ZlIGFueSBvbGQgc3ludGF4IHN0dWZmIGhhbmdpbmcgYXJvdW5kCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5bnRheCBjYXNlIGlnbm9yZQorCitzeW4gbWF0Y2ggaWRsYW5nU3RhdGVtZW50ICJeXHMqcHJvXHMiCitzeW4gbWF0Y2ggaWRsYW5nU3RhdGVtZW50ICJeXHMqZnVuY3Rpb25ccyIKK3N5biBrZXl3b3JkIGlkbGFuZ1N0YXRlbWVudCByZXR1cm4gY29udGludWUgbW9kIGRvIGJyZWFrCitzeW4ga2V5d29yZCBpZGxhbmdTdGF0ZW1lbnQgY29tcGlsZV9vcHQgZm9yd2FyZF9mdW5jdGlvbiBnb3RvCitzeW4ga2V5d29yZCBpZGxhbmdTdGF0ZW1lbnQgYmVnaW4gY29tbW9uIGVuZCBvZgorc3luIGtleXdvcmQgaWRsYW5nU3RhdGVtZW50IGluaGVyaXRzIG9uX2lvZXJyb3IgYmVnaW4KKworc3luIGtleXdvcmQgaWRsYW5nQ29uZGl0aW9uYWwgaWYgZWxzZSB0aGVuIGZvciB3aGlsZSBjYXNlIHN3aXRjaAorc3luIGtleXdvcmQgaWRsYW5nQ29uZGl0aW9uYWwgZW5kY2FzZSBlbmRlbHNlIGVuZGZvciBlbmRzd2l0Y2gKK3N5biBrZXl3b3JkIGlkbGFuZ0NvbmRpdGlvbmFsIGVuZGlmIGVuZHJlcCBlbmR3aGlsZSByZXBlYXQgdW50aWwKKworc3luIG1hdGNoIGlkbGFuZ09wZXJhdG9yICJcIGFuZFwgIgorc3luIG1hdGNoIGlkbGFuZ09wZXJhdG9yICJcIGVxXCAiCitzeW4gbWF0Y2ggaWRsYW5nT3BlcmF0b3IgIlwgZ2VcICIKK3N5biBtYXRjaCBpZGxhbmdPcGVyYXRvciAiXCBndFwgIgorc3luIG1hdGNoIGlkbGFuZ09wZXJhdG9yICJcIGxlXCAiCitzeW4gbWF0Y2ggaWRsYW5nT3BlcmF0b3IgIlwgbHRcICIKK3N5biBtYXRjaCBpZGxhbmdPcGVyYXRvciAiXCBuZVwgIgorc3luIG1hdGNoIGlkbGFuZ09wZXJhdG9yIC9cKFwgXHwoXClub3RcIC9ocz1lLTMKK3N5biBtYXRjaCBpZGxhbmdPcGVyYXRvciAiXCBvclwgIgorc3luIG1hdGNoIGlkbGFuZ09wZXJhdG9yICJcIHhvclwgIgorCitzeW4ga2V5d29yZCBpZGxhbmdTdG9wIHN0b3AgcGF1c2UKKworc3luIG1hdGNoIGlkbGFuZ1N0cnVjdmFyICJcaFx3KlwoXC5caFx3KlwpXCsiCitzeW4gbWF0Y2ggaWRsYW5nU3RydWN2YXIgIlspLFxdXVwoXC5caFx3KlwpXCsiaHM9cysxCisKK3N5biBtYXRjaCBpZGxhbmdTeXN0ZW0gIlwhXGFcdypcKFwuXHcqXClcPSIKKworc3luIG1hdGNoIGlkbGFuZ0tleXdvcmQgIlwoWygsXVxzKlwoXCRcX3MqXClcPVwpXEA8PS9caFx3KiIKK3N5biBtYXRjaCBpZGxhbmdLZXl3b3JkICJcKFsoLF1ccypcKFwkXF9zKlwpXD1cKVxAPD1caFx3KlxzKj0iCisKK3N5biBrZXl3b3JkIGlkbGFuZ1RvZG8gY29udGFpbmVkIFRPRE8KKworc3luIHJlZ2lvbiBpZGxhbmdTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisKK3N5biByZWdpb24gaWRsYW5nU3RyaW5nIHN0YXJ0PSsnKyBlbmQ9KycrCisKK3N5biBtYXRjaCBpZGxhbmdQcmVDb25kaXQgIl5ccypAXHcqXChcLlxhXHszfVwpXD0iCisKK3N5biBtYXRjaCBpZGxhbmdSZWFsTnVtYmVyICJcPFxkXCtcKFwuXD1cZCplWystXVw9XGRcK1x8XC5cZCpkXHxcLlxkKlx8ZFwpIgorc3luIG1hdGNoIGlkbGFuZ1JlYWxOdW1iZXIgIlwuXGRcK1woZFx8ZVsrLV1cPVxkXCtcKVw9IgorCitzeW4gbWF0Y2ggaWRsYW5nTnVtYmVyICJcPFwuXEAhXGRcK1wuXEAhXChiXHx1XHx1c1x8c1x8bFx8dWxcfGxsXHx1bGxcKVw9XD4iCisKK3N5biBtYXRjaCAgaWRsYW5nQ29tbWVudCAiW1w7XS4qJCIgY29udGFpbnM9aWRsYW5nVG9kbworCitzeW4gbWF0Y2ggaWRsYW5nQ29udGludWVMaW5lICJcJFxzKlwoJFx8O1wpImhlPXMrMSBjb250YWlucz1pZGxhbmdDb21tZW50CitzeW4gbWF0Y2ggaWRsYW5nQ29udGludWVMaW5lICImXHMqXChcaFx8O1wpImhlPXMrMSBjb250YWlucz1BTEwKKworc3luIG1hdGNoICBpZGxhbmdEYmxDb21tYUVycm9yICJcLFxzKlwsIgorCisiIExpc3Qgb2Ygc3RhbmRhcmQgcm91dGluZXMgYXMgb2YgSURMIHZlcnNpb24gNS40Lgorc3luIG1hdGNoIGlkbGFuZ1JvdXRpbmUgIkVPU19cYSoiCitzeW4gbWF0Y2ggaWRsYW5nUm91dGluZSAiSERGX1xhKiIKK3N5biBtYXRjaCBpZGxhbmdSb3V0aW5lICJDREZfXGEqIgorc3luIG1hdGNoIGlkbGFuZ1JvdXRpbmUgIk5DREZfXGEqIgorc3luIG1hdGNoIGlkbGFuZ1JvdXRpbmUgIlFVRVJZX1xhKiIKK3N5biBtYXRjaCBpZGxhbmdSb3V0aW5lICJcPE1BWFxzKigiaGU9ZS0xCitzeW4gbWF0Y2ggaWRsYW5nUm91dGluZSAiXDxNSU5ccyooImhlPWUtMQorCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIEFfQ09SUkVMQVRFIEFCUyBBQ09TIEFEQVBUX0hJU1RfRVFVQUwgQUxPRyBBTE9HMTAKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgQU1PRUJBIEFOTk9UQVRFIEFSR19QUkVTRU5UIEFSUkFZX0VRVUFMIEFSUk9XCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIEFTQ0lJX1RFTVBMQVRFIEFTSU4gQVNTT0MgQVRBTiBBWElTIEJBUl9QTE9UCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIEJFU0VMSSBCRVNFTEogQkVTRUxLIEJFU0VMWSBCRVRBIEJJTElORUFSIEJJTl9EQVRFCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIEJJTkFSWV9URU1QTEFURSBCSU5ER0VOIEJJTk9NSUFMIEJMQVNfQVhQWSBCTEtfQ09OCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIEJPWF9DVVJTT1IgQlJFQUsgQlJFQUtQT0lOVCBCUk9ZREVOIEJZVEFSUiBCWVRFCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIEJZVEVPUkRFUiBCWVRTQ0wgQ19DT1JSRUxBVEUgQ0FMREFUIENBTEVOREFSCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIENBTExfRVhURVJOQUwgQ0FMTF9GVU5DVElPTiBDQUxMX01FVEhPRAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBDQUxMX1BST0NFRFVSRSBDQVRDSCBDRCBDRUlMIENIRUJZU0hFViBDSEVDS19NQVRICitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIENISVNRUl9DVkYgQ0hJU1FSX1BERiBDSE9MREMgQ0hPTFNPTCBDSU5ER0VOCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIENJUl8zUE5UIENMT1NFIENMVVNUX1dUUyBDTFVTVEVSIENPTE9SX0NPTlZFUlQKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgQ09MT1JfUVVBTiBDT0xPUk1BUF9BUFBMSUNBQkxFIENPTUZJVCBDT01NT04KK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgQ09NUExFWCBDT01QTEVYQVJSIENPTVBMRVhST1VORAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBDT01QVVRFX01FU0hfTk9STUFMUyBDT05EIENPTkdSSUQgQ09OSgorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBDT05TVFJBSU5FRF9NSU4gQ09OVE9VUiBDT05WRVJUX0NPT1JEIENPTlZPTAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBDT09SRDJUTzMgQ09SUkVMQVRFIENPUyBDT1NIIENSQU1FUiBDUkVBVEVfU1RSVUNUCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIENSRUFURV9WSUVXIENST1NTUCBDUlZMRU5HVEggQ1RfTFVNSU5BTkNFIENUSV9URVNUCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIENVUlNPUiBDVVJWRUZJVCBDVl9DT09SRCBDVlRUT0JNIENXX0FOSU1BVEUKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgQ1dfQU5JTUFURV9HRVRQIENXX0FOSU1BVEVfTE9BRCBDV19BTklNQVRFX1JVTgorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBDV19BUkNCQUxMIENXX0JHUk9VUCBDV19DTFJfSU5ERVggQ1dfQ09MT1JTRUwKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgQ1dfREVGUk9JIENXX0ZJRUxEIENXX0ZJTEVTRUwgQ1dfRk9STSBDV19GU0xJREVSCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIENXX0xJR0hUX0VESVRPUiBDV19MSUdIVF9FRElUT1JfR0VUCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIENXX0xJR0hUX0VESVRPUl9TRVQgQ1dfT1JJRU5UIENXX1BBTEVUVEVfRURJVE9SCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIENXX1BBTEVUVEVfRURJVE9SX0dFVCBDV19QQUxFVFRFX0VESVRPUl9TRVQKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgQ1dfUERNRU5VIENXX1JHQlNMSURFUiBDV19UTVBMIENXX1pPT00gREJMQVJSCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIERDSU5ER0VOIERDT01QTEVYIERDT01QTEVYQVJSIERFRklORV9LRVkgREVGUk9JCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIERFRlNZU1YgREVMRVRFX1NZTUJPTCBERUxMT0cgREVMVkFSIERFUklWIERFUklWU0lHCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIERFVEVSTSBERVZJQ0UgREZQTUlOIERJQUxPR19NRVNTQUdFCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIERJQUxPR19QSUNLRklMRSBESUFMT0dfUFJJTlRFUlNFVFVQCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIERJQUxPR19QUklOVEpPQiBESUFMT0dfUkVBRF9JTUFHRQorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBESUFMT0dfV1JJVEVfSU1BR0UgRElHSVRBTF9GSUxURVIgRElMQVRFIERJTkRHRU4KK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgRElTU09MVkUgRElTVCBETE1fTE9BRCBETE1fUkVHSVNURVIKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgRE9fQVBQTEVfU0NSSVBUIERPQ19MSUJSQVJZIERPVUJMRSBEUkFXX1JPSSBFRk9OVAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBFSUdFTlFMIEVJR0VOVkVDIEVMTUhFUyBFTVBUWSBFTkFCTEVfU1lTUlROIEVPRgorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBFUkFTRSBFUk9ERSBFUlJPUkYgRVJSUExPVCBFWEVDVVRFIEVYSVQgRVhQIEVYUEFORAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBFWFBBTkRfUEFUSCBFWFBJTlQgRVhUUkFDIEVYVFJBQ1RfU0xJQ0UgRl9DVkYKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgRl9QREYgRkFDVE9SSUFMIEZGVCBGSUxFX0NITU9EIEZJTEVfREVMRVRFCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIEZJTEVfRVhQQU5EX1BBVEggRklMRV9NS0RJUiBGSUxFX1RFU1QgRklMRV9XSElDSAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBGSUxFUEFUSCBGSU5ERklMRSBGSU5ER0VOIEZJTklURSBGSVggRkxJQ0sgRkxPQVQKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgRkxPT1IgRkxPVzMgRkxUQVJSIEZMVVNIIEZPUiBGT1JNQVRfQVhJU19WQUxVRVMKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgRk9SV0FSRF9GVU5DVElPTiBGUkVFX0xVTiBGU1RBVCBGVUxTVFIgRlVOQ1QKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgRlZfVEVTVCBGWF9ST09UIEZaX1JPT1RTIEdBTU1BIEdBTU1BX0NUCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIEdBVVNTX0NWRiBHQVVTU19QREYgR0FVU1MyREZJVCBHQVVTU0ZJVCBHQVVTU0lOVAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBHRVRfRFJJVkVfTElTVCBHRVRfS0JSRCBHRVRfTFVOIEdFVF9TQ1JFRU5fU0laRQorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBHRVRfU1lNQk9MIEdFVEVOViBHT1RPIEdSSURfVFBTIEdSSUQzIEdTX0lURVIKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgSF9FUV9DVCBIX0VRX0lOVCBIQU5OSU5HIEhFQVBfR0MgSEVMUCBISUxCRVJUCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIEhJU1RfMkQgSElTVF9FUVVBTCBISVNUT0dSQU0gSExTIEhPVUdIIEhRUiBIU1YKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgSUJFVEEgSURFTlRJVFkgSURMX0NvbnRhaW5lciBJRExhblJPSQorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBJRExhblJPSUdyb3VwIElETGZmRElDT00gSURMZmZEWEYgSURMZmZMYW5ndWFnZUNhdAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBJRExmZlNoYXBlIElETGdyQXhpcyBJRExnckJ1ZmZlciBJRExnckNsaXBib2FyZAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBJRExnckNvbG9yYmFyIElETGdyQ29udG91ciBJRExnckZvbnQgSURMZ3JJbWFnZQorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBJRExnckxlZ2VuZCBJRExnckxpZ2h0IElETGdyTW9kZWwgSURMZ3JNUEVHCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIElETGdyUGFsZXR0ZSBJRExnclBhdHRlcm4gSURMZ3JQbG90IElETGdyUG9seWdvbgorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBJRExnclBvbHlsaW5lIElETGdyUHJpbnRlciBJRExnclJPSSBJRExnclJPSUdyb3VwCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIElETGdyU2NlbmUgSURMZ3JTdXJmYWNlIElETGdyU3ltYm9sCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIElETGdyVGVzc2VsbGF0b3IgSURMZ3JUZXh0IElETGdyVmlldworc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBJRExnclZpZXdncm91cCBJRExnclZvbHVtZSBJRExnclZSTUwgSURMZ3JXaW5kb3cKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgSUdBTU1BIElNQUdFX0NPTlQgSU1BR0VfU1RBVElTVElDUyBJTUFHSU5BUlkKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgSU5ER0VOIElOVF8yRCBJTlRfM0QgSU5UX1RBQlVMQVRFRCBJTlRBUlIgSU5URVJQT0wKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgSU5URVJQT0xBVEUgSU5WRVJUIElPQ1RMIElTSEZUIElTT0NPTlRPVVIKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgSVNPU1VSRkFDRSBKT1VSTkFMIEpVTERBWSBLRVlXT1JEX1NFVCBLUklHMkQKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgS1VSVE9TSVMgS1dfVEVTVCBMNjRJTkRHRU4gTEFCRUxfREFURSBMQUJFTF9SRUdJT04KK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgTEFERklUIExBR1VFUlJFIExFRUZJTFQgTEVHRU5EUkUgTElOQkNHIExJTkRHRU4KK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgTElORklUIExJTktJTUFHRSBMSVZFX0NPTlRPVVIgTElWRV9DT05UUk9MCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIExJVkVfREVTVFJPWSBMSVZFX0VYUE9SVCBMSVZFX0lNQUdFIExJVkVfSU5GTworc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBMSVZFX0xJTkUgTElWRV9MT0FEIExJVkVfT1BMT1QgTElWRV9QTE9UCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIExJVkVfUFJJTlQgTElWRV9SRUNUIExJVkVfU1RZTEUgTElWRV9TVVJGQUNFCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIExJVkVfVEVYVCBMSkxDVCBMTF9BUkNfRElTVEFOQ0UgTE1GSVQgTE1HUiBMTkdBTU1BCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIExOUF9URVNUIExPQURDVCBMT0NBTEVfR0VUIExPTjY0QVJSIExPTkFSUiBMT05HCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIExPTkc2NCBMU09ERSBMVV9DT01QTEVYIExVREMgTFVNUFJPVkUgTFVTT0wKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgTV9DT1JSRUxBVEUgTUFDSEFSIE1BS0VfQVJSQVkgTUFLRV9ETEwgTUFQXzJQT0lOVFMKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgTUFQX0NPTlRJTkVOVFMgTUFQX0dSSUQgTUFQX0lNQUdFIE1BUF9QQVRDSAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBNQVBfUFJPSl9JTkZPIE1BUF9TRVQgTUFUUklYX01VTFRJUExZIE1EX1RFU1QgTUVBTgorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBNRUFOQUJTREVWIE1FRElBTiBNRU1PUlkgTUVTSF9DTElQIE1FU0hfREVDSU1BVEUKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgTUVTSF9JU1NPTElEIE1FU0hfTUVSR0UgTUVTSF9OVU1UUklBTkdMRVMgTUVTSF9PQkoKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgTUVTSF9TTU9PVEggTUVTSF9TVVJGQUNFQVJFQSBNRVNIX1ZBTElEQVRFCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIE1FU0hfVk9MVU1FIE1FU1NBR0UgTUlOX0NVUlZFX1NVUkYgTUtfSFRNTF9IRUxQCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIE1PRElGWUNUIE1PTUVOVCBNT1JQSF9DTE9TRSBNT1JQSF9ESVNUQU5DRQorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBNT1JQSF9HUkFESUVOVCBNT1JQSF9ISVRPUk1JU1MgTU9SUEhfT1BFTgorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBNT1JQSF9USElOIE1PUlBIX1RPUEhBVCBNUEVHX0NMT1NFIE1QRUdfT1BFTgorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBNUEVHX1BVVCBNUEVHX1NBVkUgTVNHX0NBVF9DTE9TRSBNU0dfQ0FUX0NPTVBJTEUKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgTVNHX0NBVF9PUEVOIE1VTFRJIE5fRUxFTUVOVFMgTl9QQVJBTVMgTl9UQUdTCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIE5FV1RPTiBOT1JNIE9CSl9DTEFTUyBPQkpfREVTVFJPWSBPQkpfSVNBIE9CSl9ORVcKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgT0JKX1ZBTElEIE9CSkFSUiBPTl9FUlJPUiBPTl9JT0VSUk9SIE9OTElORV9IRUxQCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIE9QRU4gT1BFTlIgT1BFTlcgT1BMT1QgT1BMT1RFUlIgUF9DT1JSRUxBVEUKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgUEFSVElDTEVfVFJBQ0UgUENPTVAgUExPVCBQTE9UXzNEQk9YIFBMT1RfRklFTEQKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgUExPVEVSUiBQTE9UUyBQTlRfTElORSBQT0lOVF9MVU4gUE9MQVJfQ09OVE9VUgorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBQT0xBUl9TVVJGQUNFIFBPTFkgUE9MWV8yRCBQT0xZX0FSRUEgUE9MWV9GSVQKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgUE9MWUZJTEwgUE9MWUZJTExWIFBPTFlTSEFERSBQT0xZV0FSUCBQT1BEIFBPV0VMTAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBQUklNRVMgUFJJTlQgUFJJTlRGIFBSSU5URCBQUk9GSUxFIFBST0ZJTEVSCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFBST0ZJTEVTIFBST0pFQ1RfVk9MIFBTX1NIT1dfRk9OVFMgUFNBRk0gUFNFVURPCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFBUUl9GUkVFIFBUUl9ORVcgUFRSX1ZBTElEIFBUUkFSUiBQVVNIRCBRUk9NQgorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBRUk9NTyBRU0lNUCBSX0NPUlJFTEFURSBSX1RFU1QgUkFET04gUkFORE9NTgorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBSQU5ET01VIFJBTktTIFJEUElYIFJFQUQgUkVBREYgUkVBRF9BU0NJSQorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBSRUFEX0JJTkFSWSBSRUFEX0JNUCBSRUFEX0RJQ09NIFJFQURfSU1BR0UKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgUkVBRF9JTlRFUkZJTEUgUkVBRF9KUEVHIFJFQURfUElDVCBSRUFEX1BORworc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBSRUFEX1BQTSBSRUFEX1NQUiBSRUFEX1NSRiBSRUFEX1NZTEsgUkVBRF9USUZGCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFJFQURfV0FWIFJFQURfV0FWRSBSRUFEX1gxMV9CSVRNQVAgUkVBRF9YV0QgUkVBRFMKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgUkVBRFUgUkVCSU4gUkVDQUxMX0NPTU1BTkRTIFJFQ09OMyBSRURVQ0VfQ09MT1JTCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFJFRk9STSBSRUdSRVNTIFJFUExJQ0FURSBSRVBMSUNBVEVfSU5QTEFDRQorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBSRVNPTFZFX0FMTCBSRVNPTFZFX1JPVVRJTkUgUkVTVE9SRSBSRVRBTEwgUkVUVVJOCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFJFVkVSU0UgUkVXSU5EIFJLNCBST0JFUlRTIFJPVCBST1RBVEUgUk9VTkQKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgUk9VVElORV9JTkZPIFJTX1RFU1QgU19URVNUIFNBVkUgU0FWR09MIFNDQUxFMworc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBTQ0FMRTNEIFNFQVJDSDJEIFNFQVJDSDNEIFNFVF9QTE9UIFNFVF9TSEFESU5HCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFNFVF9TWU1CT0wgU0VURU5WIFNFVExPRyBTRVRVUF9LRVlTIFNGSVQKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgU0hBREVfU1VSRiBTSEFERV9TVVJGX0lSUiBTSEFERV9WT0xVTUUgU0hJRlQgU0hPVzMKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgU0hPV0ZPTlQgU0lOIFNJTkRHRU4gU0lOSCBTSVpFIFNLRVdORVNTIFNLSVBGCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFNMSUNFUjMgU0xJREVfSU1BR0UgU01PT1RIIFNPQkVMIFNPQ0tFVCBTT1JUIFNQQVdOCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFNQSF80UE5UIFNQSF9TQ0FUIFNQSEVSX0hBUk0gU1BMX0lOSVQgU1BMX0lOVEVSUAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBTUExJTkUgU1BMSU5FX1AgU1BSU0FCIFNQUlNBWCBTUFJTSU4gU1BSU1RQIFNRUlQKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgU1RBTkRBUkRJWkUgU1REREVWIFNUT1AgU1RSQVJSIFNUUkNNUCBTVFJDT01QUkVTUworc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBTVFJFQU1MSU5FIFNUUkVHRVggU1RSRVRDSCBTVFJJTkcgU1RSSk9JTiBTVFJMRU4KK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgU1RSTE9XQ0FTRSBTVFJNQVRDSCBTVFJNRVNTQUdFIFNUUk1JRCBTVFJQT1MKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgU1RSUFVUIFNUUlNQTElUIFNUUlRSSU0gU1RSVUNUX0FTU0lHTiBTVFJVQ1RfSElERQorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBTVFJVUENBU0UgU1VSRkFDRSBTVVJGUiBTVkRDIFNWREZJVCBTVlNPTAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBTV0FQX0VORElBTiBTV0lUQ0ggU1lTVElNRSBUX0NWRiBUX1BERiBUM0QKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgVEFHX05BTUVTIFRBTiBUQU5IIFRBUFJEIFRBUFdSVCBURUtfQ09MT1IKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgVEVNUE9SQVJZIFRFVFJBX0NMSVAgVEVUUkFfU1VSRkFDRSBURVRSQV9WT0xVTUUKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgVEhJTiBUSFJFRUQgVElNRV9URVNUMiBUSU1FR0VOIFRNX1RFU1QgVE9UQUwgVFJBQ0UKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgVFJBTlNQT1NFIFRSSV9TVVJGIFRSSUFOR1VMQVRFIFRSSUdSSUQgVFJJUUwKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgVFJJUkVEIFRSSVNPTCBUUk5MT0cgVFNfQ09FRiBUU19ESUZGIFRTX0ZDQVNUCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFRTX1NNT09USCBUViBUVkNSUyBUVkxDVCBUVlJEIFRWU0NMIFVJTkRHRU4gVUlOVAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBVSU5UQVJSIFVMNjRJTkRHRU4gVUxJTkRHRU4gVUxPTjY0QVJSIFVMT05BUlIKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgVUxPTkcgVUxPTkc2NCBVTklRIFVTRVJTWU0gVkFMVUVfTE9DQVRFIFZBUklBTkNFCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFZBWF9GTE9BVCBWRUNUT1JfRklFTEQgVkVMIFZFTE9WRUNUIFZFUlRfVDNEIFZPSUdUCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFZPUk9OT0kgVk9YRUxfUFJPSiBXQUlUIFdBUlBfVFJJIFdBVEVSU0hFRCBXREVMRVRFCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFdFT0YgV0ZfRFJBVyBXSEVSRSBXSURHRVRfQkFTRSBXSURHRVRfQlVUVE9OCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFdJREdFVF9DT05UUk9MIFdJREdFVF9EUkFXIFdJREdFVF9EUk9QTElTVAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBXSURHRVRfRVZFTlQgV0lER0VUX0lORk8gV0lER0VUX0xBQkVMIFdJREdFVF9MSVNUCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFdJREdFVF9TTElERVIgV0lER0VUX1RBQkxFIFdJREdFVF9URVhUIFdJTkRPVworc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBXUklURV9CTVAgV1JJVEVfSU1BR0UgV1JJVEVfSlBFRyBXUklURV9OUklGCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFdSSVRFX1BJQ1QgV1JJVEVfUE5HIFdSSVRFX1BQTSBXUklURV9TUFIgV1JJVEVfU1JGCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFdSSVRFX1NZTEsgV1JJVEVfVElGRiBXUklURV9XQVYgV1JJVEVfV0FWRSBXUklURVUKK3N5biBrZXl3b3JkIGlkbGFuZ1JvdXRpbmUgV1NFVCBXU0hPVyBXVE4gV1ZfQVBQTEVUIFdWX0NXX1dBVkVMRVQgV1ZfQ1dUCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFdWX0RFTk9JU0UgV1ZfRFdUIFdWX0ZOX0NPSUZMRVQgV1ZfRk5fREFVQkVDSElFUworc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBXVl9GTl9HQVVTU0lBTiBXVl9GTl9IQUFSIFdWX0ZOX01PUkxFVCBXVl9GTl9QQVVMCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFdWX0ZOX1NZTUxFVCBXVl9JTVBPUlRfREFUQSBXVl9JTVBPUlRfV0FWRUxFVAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBXVl9QTE9UM0RfV1BTIFdWX1BMT1RfTVVMVElSRVMgV1ZfUFdUCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFdWX1RPT0xfREVOT0lTRSBYQk1fRURJVCBYRElTUExBWUZJTEUgWERYRiBYRk9OVAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBYSU5URVJBTklNQVRFIFhMT0FEQ1QgWE1BTkFHRVIgWE1OR19UTVBMIFhNVE9PTAorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBYT0JKVklFVyBYUEFMRVRURSBYUENPTE9SIFhQTE9UM0QgWFJFR0lTVEVSRUQgWFJPSQorc3luIGtleXdvcmQgaWRsYW5nUm91dGluZSBYU1FfVEVTVCBYU1VSRkFDRSBYVkFSRURJVCBYVk9MVU1FIFhWT0xVTUVfUk9UQVRFCitzeW4ga2V5d29yZCBpZGxhbmdSb3V0aW5lIFhWT0xVTUVfV1JJVEVfSU1BR0UgWFlPVVRTIFpPT00gWk9PTV8yNAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9pZGxhbmdfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfaWRsYW5nX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorZW5kaWYKKworICBIaUxpbmsgaWRsYW5nQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGlkbGFuZ1JvdXRpbmUJVHlwZQorICBIaUxpbmsgaWRsYW5nU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgaWRsYW5nQ29udGludWVMaW5lCVRvZG8KKyAgSGlMaW5rIGlkbGFuZ1JlYWxOdW1iZXIJRmxvYXQKKyAgSGlMaW5rIGlkbGFuZ051bWJlcglOdW1iZXIKKyAgSGlMaW5rIGlkbGFuZ1N0cmluZwlTdHJpbmcKKyAgSGlMaW5rIGlkbGFuZ09wZXJhdG9yCU9wZXJhdG9yCisgIEhpTGluayBpZGxhbmdDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIGlkbGFuZ1RvZG8JVG9kbworICBIaUxpbmsgaWRsYW5nUHJlQ29uZGl0CUlkZW50aWZpZXIKKyAgSGlMaW5rIGlkbGFuZ0RibENvbW1hRXJyb3IJRXJyb3IKKyAgSGlMaW5rIGlkbGFuZ1N0b3AJRXJyb3IKKyAgSGlMaW5rIGlkbGFuZ1N0cnVjdmFyCVByZVByb2MKKyAgSGlMaW5rIGlkbGFuZ1N5c3RlbQlJZGVudGlmaWVyCisgIEhpTGluayBpZGxhbmdLZXl3b3JkCVNwZWNpYWwKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiaWRsYW5nIgorIiB2aW06IHRzPTE4CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9pbmRlbnQudmltIGIvcnVudGltZS9zeW50YXgvaW5kZW50LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWYzYzdlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvaW5kZW50LnZpbQpAQCAtMCwwICsxLDEwMSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBpbmRlbnQgUkMgRmlsZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vc3ludGF4L3BjcC9pbmRlbnQvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDUtMjIKKyIgYXJjaC10YWc6CSAgICAyM2MxMTE5MC03OWZhLTQ0OTMtOWZjNS0zNjQzNTQwMmEyMGQKKyIgVE9ETzogaXMgdGhlIGRlbnktYWxsIChhIGxhIGxpbG8udmltIG5pY2Ugb3Igbm8/KS4uLgorIglpcnJpdGF0aW5nIHRvIGJlIHdyb25nIHRvIHRoZSBsYXN0IGNoYXIuLi4KKyIJd291bGQgYmUgc3dlZXQgaWYgcmlnaHQgdW50aWwgb25lIGNoYXIgZmFpbHMKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgU2V0IGlza2V5d29yZCBzaW5jZSB3ZSBuZWVkIGAtJyAoYW5kIHBvdGVudGlhbGx5IG90aGVycykgaW4ga2V5d29yZHMuCisiIEZvciB2ZXJzaW9uIDUueDogU2V0IGl0IGdsb2JhbGx5CisiIEZvciB2ZXJzaW9uIDYueDogU2V0IGl0IGxvY2FsbHkKK2lmIHZlcnNpb24gPj0gNjAwCisgIGNvbW1hbmQgLW5hcmdzPTEgU2V0SXNrIHNldGxvY2FsIGlza2V5d29yZD08YXJncz4KK2Vsc2UKKyAgY29tbWFuZCAtbmFyZ3M9MSBTZXRJc2sgc2V0IGlza2V5d29yZD08YXJncz4KK2VuZGlmCitTZXRJc2sgNDgtNTcsNjUtOTAsOTctMTIyLC0sXworZGVsY29tbWFuZCBTZXRJc2sKKworIiBlcnJvcnMKK3N5biBtYXRjaCAgIGluZGVudEVycm9yICJcU1wrIgorCisiIHRvZG8KK3N5biBrZXl3b3JkIGluZGVudFRvZG8gY29udGFpbmVkIFRPRE8gRklYTUUgWFhYIE5PVEUKKworIiBjb21tZW50cworc3luIHJlZ2lvbiAgaW5kZW50Q29tbWVudCBtYXRjaGdyb3VwPWluZGVudENvbW1lbnQgc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPWluZGVudFRvZG8KKworIiBrZXl3b3JkcyAoY29tbWFuZC1saW5lIHN3aXRjaGVzKQorc3luIG1hdGNoICAgaW5kZW50T3B0aW9ucyAiXDwtLVwobm8tXClcPWJsYW5rLVwoYmVmb3JlLXNpemVvZlx8QmlsbC1TaGFubm9uXHxsaW5lcy1cKGFmdGVyLVwoY29tbWFzXHxkZWNsYXJhdGlvbnNcfHByb2NlZHVyZXNcKVx8YmVmb3JlLWJsb2NrLWNvbW1lbnRzXClcKVw+Igorc3luIG1hdGNoICAgaW5kZW50T3B0aW9ucyAiXDwtLWJyYWNlLWluZGVudFxzKlxkXCtcPiIKK3N5biBtYXRjaCAgIGluZGVudE9wdGlvbnMgIlw8LS1icmFjZXMtXChhZnRlclx8b25cKS1cKGlmXHxzdHJ1Y3QtZGVjbFwpLWxpbmVcPiIKK3N5biBtYXRjaCAgIGluZGVudE9wdGlvbnMgIlw8LS1icmVhay1cKFwoYWZ0ZXJcfGJlZm9yZVwpLWJvb2xlYW4tb3BlcmF0b3JcfGZ1bmN0aW9uLWRlY2wtYXJnc1wpXD4iCitzeW4gbWF0Y2ggICBpbmRlbnRPcHRpb25zICJcPC0tXChjYXNlXCgtYnJhY2VcKVw9XHxjb21tZW50XHxjb250aW51YXRpb25cfGRlY2xhcmF0aW9uXHxsaW5lLWNvbW1lbnRzXHxwYXJhbWV0ZXJcfHBhcmVuXHxzdHJ1Y3QtYnJhY2VcKS1pbmRlbnRhdGlvblxzKlxkXCtcPiIKK3N5biBtYXRjaCAgIGluZGVudE9wdGlvbnMgIlw8LS1cKG5vLVwpXD1jb21tZW50LWRlbGltaXRlcnMtb24tYmxhbmstbGluZXNcPiIKK3N5biBtYXRjaCAgIGluZGVudE9wdGlvbnMgIlw8LS1cKGRvbnQtXClcPWN1ZGRsZS1cKGRvLXdoaWxlXHxlbHNlXClcPiIKK3N5biBtYXRjaCAgIGluZGVudE9wdGlvbnMgIlw8LS1cKGRlY2xhcmF0aW9uLWNvbW1lbnRcfGVsc2UtZW5kaWZcKS1jb2x1bW5ccypcZFwrXD4iCitzeW4gbWF0Y2ggICBpbmRlbnRPcHRpb25zICJcPC0tZG9udC1icmVhay1cKGZ1bmN0aW9uLWRlY2wtYXJnc1x8cHJvY2VkdXJlLXR5cGVcKVw+Igorc3luIG1hdGNoICAgaW5kZW50T3B0aW9ucyAiXDwtLVwoZG9udC1cKVw9XChmb3JtYXRcKC1maXJzdC1jb2x1bW5cKVw9XHxzdGFyXCktY29tbWVudHNcPiIKK3N5biBtYXRjaCAgIGluZGVudE9wdGlvbnMgIlw8LS1cKGhvbm91clx8aWdub3JlXCktbmV3bGluZXNcPiIKK3N5biBtYXRjaCAgIGluZGVudE9wdGlvbnMgIlw8LS1cKGluZGVudC1sZXZlbFx8XChjb21tZW50LVwpXD1saW5lLWxlbmd0aFwpXHMqXGRcK1w+Igorc3luIG1hdGNoICAgaW5kZW50T3B0aW9ucyAiXDwtLVwobGVhdmVcfHJlbW92ZVwpLXByZXByb2Nlc3Nvci1zcGFjZVw+IgorIm5vdCAxMDAlLCBzaW5jZSBjYXN0c1w9IHNob3VsZCBhbHdheXMgYmUgY2FzdCBpZiBuby0gaXNuJ3QgZ2l2ZW4KK3N5biBtYXRjaCAgIGluZGVudE9wdGlvbnMgIlw8LS1cKG5vLVwpXD1zcGFjZS1hZnRlci1cKHBhcmVudGhlc2VzXHxjYXN0c1w9XHxmb3JcfGlmXHx3aGlsZVwpXD4iCitzeW4gbWF0Y2ggICBpbmRlbnRPcHRpb25zICJcPC0tXChkb250LVwpXD1zcGFjZS1zcGVjaWFsLXNlbWljb2xvblw+Igorc3luIG1hdGNoICAgaW5kZW50T3B0aW9ucyAiXDwtLVwobGVhdmVcfHN3YWxsb3dcKS1vcHRpb25hbC1ibGFuay1saW5lc1w+Igorc3luIG1hdGNoICAgaW5kZW50T3B0aW9ucyAiXDwtLXRhYi1zaXplXHMqXGRcK1w+Igorc3luIG1hdGNoICAgaW5kZW50T3B0aW9ucyAiXDwtLVwobm9cfHVzZVwpLXRhYnNcPiIKK3N5biBrZXl3b3JkIGluZGVudE9wdGlvbnMgLS1nbnUtc3R5bGUgLS1pZ25vcmUtcHJvZmlsZSAtLWstYW5kLXItc3R5bGUgLS1vcmlnaW5hbAorc3luIGtleXdvcmQgaW5kZW50T3B0aW9ucyAtLXByZXNlcnZlLW10aW1lIC0tbm8tdmVyYm9zaXR5IC0tdmVyYm9zZSAtLW91dHB1dC1maWxlCitzeW4ga2V5d29yZCBpbmRlbnRPcHRpb25zIC0tbm8tcGFyYW1ldGVyLWluZGVudGF0aW9uIC0tcHJvY25hbWVzLXN0YXJ0LWxpbmVzCitzeW4ga2V5d29yZCBpbmRlbnRPcHRpb25zIC0tc3RhbmRhcmQtb3V0cHV0IC0tc3RhcnQtbGVmdC1zaWRlLW9mLWNvbW1lbnRzCitzeW4ga2V5d29yZCBpbmRlbnRPcHRpb25zIC0tc3BhY2UtYWZ0ZXItcHJvY2VkdXJlLWNhbGxzCisiIHRoaXMgYWxzbyBoZXJlIHNpbmNlIHRoZSBnbnUgaW5kZW50IGZlbGxhcyBhcmVuJ3QgY29uc2lzdGVudC4gKGV2ZXIgcmVhZAorIiB0aGUgY29kZSB0byBgaW5kZW50Jz8geW91J2xsIGtub3cgd2hhdCBpIG1lYW4gaWYgeW91IGhhdmUpCitzeW4gbWF0Y2ggICBpbmRlbnRPcHRpb25zICJcPC1cKGJsaVx8Y2JpXHxjZFx8Y2lcfGNsaVx8Y1x8Y3BcfGRpXHxkXHxpXHxpcFx8bFx8bGNcfHBpXHxzYmlcfHRzXClccypcZFwrXD4iCitzeW4gbWF0Y2ggICBpbmRlbnRPcHRpb25zICJcPC1UXHNcK1x3XCtcPiIKK3N5biBrZXl3b3JkIGluZGVudE9wdGlvbnMgLS1mb3JtYXQtYWxsLWNvbW1lbnRzIC0tY29udGludWUtYXQtcGFyZW50aGVzZXMgLS1kb250LWxpbmUtdXAtcGFyZW50aGVzZXMKK3N5biBrZXl3b3JkIGluZGVudE9wdGlvbnMgLS1uby1zcGFjZS1hZnRlci1mdW5jdGlvbi1jYWxsLW5hbWVzCitzeW4ga2V5d29yZCBpbmRlbnRPcHRpb25zIC1iYWQgLWJhcCAtYmJiIC1iYm8gLWJjIC1iZmRhIC1ibCAtYnIgLWJzIC1uYnMgLWNkYiAtY2R3IC1jZSAtY3MgLWRjZSAtZmMxIC1mY2EKK3N5biBrZXl3b3JkIGluZGVudE9wdGlvbnMgLWdudSAtaG5sIC1rciAtbHAgLWxwcyAtbmJhZCAtbmJhcCAtbmJiYiAtbmJibyAtbmJjIC1uYmZkYSAtbmNkYiAtbmNkdyAtbnBycworc3luIGtleXdvcmQgaW5kZW50T3B0aW9ucyAtbmNlIC1uY3MgLW5mYzEgLW5mY2EgLW5obmwgLW5pcCAtbmxwIC1ubHBzIC1ucGNzIC1ucG10IC1ucHJvIC1ucHNsIC1uc2FmIC1uc2FpCitzeW4ga2V5d29yZCBpbmRlbnRPcHRpb25zIC1uc2F3IC1uc2MgLW5zb2IgLW5zcyAtbnYgLW8gLW9yaWcgLXBjcyAtcG10IC1wcnMgLXBzbCAtc2FmIC1zYWkgLXNhdyAtc2MKK3N5biBrZXl3b3JkIGluZGVudE9wdGlvbnMgLXNvYiAtc3MgLXN0IC12IC12ZXJzaW9uIC1ibHMgLWJycyAtdXQgLW51dAorCitpZiBleGlzdHMoImluZGVudF9taW5saW5lcyIpCisgICAgbGV0IGI6aW5kZW50X21pbmxpbmVzID0gaW5kZW50X21pbmxpbmVzCitlbHNlCisgICAgbGV0IGI6aW5kZW50X21pbmxpbmVzID0gNTAKK2VuZGlmCitleGVjICJzeW4gc3luYyBtaW5saW5lcz0iIC4gYjppbmRlbnRfbWlubGluZXMKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfaW5kZW50X3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2luZGVudF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBpbmRlbnRFcnJvcglFcnJvcgorICBIaUxpbmsgaW5kZW50Q29tbWVudAlDb21tZW50CisgIEhpTGluayBpbmRlbnRUb2RvCVRvZG8KKyAgSGlMaW5rIGluZGVudE9wdGlvbnMJS2V5d29yZAorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiaW5kZW50IgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9pbmZvcm0udmltIGIvcnVudGltZS9zeW50YXgvaW5mb3JtLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTkwMTYzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvaW5mb3JtLnZpbQpAQCAtMCwwICsxLDQwOCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBJbmZvcm0KKyIgTWFpbnRhaW5lcjogICBTdGVwaGVuIFRob21hcyAoaW5mb3JtdmltQHN0ZXBoZW50aG9tYXMudWtsaW51eC5uZXQpCisiIFVSTDoJCWh0dHA6Ly93d3cuc3RlcGhlbnRob21hcy51a2xpbnV4Lm5ldC9pbmZvcm12aW0KKyIgTGFzdCBDaGFuZ2U6ICAyMDA0IE1heSAxNgorCisiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgQSBidW5jaCBvZiB1c2VmdWwgSW5mb3JtIGtleXdvcmRzLiAgRmlyc3QsIGNhc2UgaW5zZW5zaXRpdmUgc3R1ZmYKKworc3luIGNhc2UgaWdub3JlCisKK3N5biBrZXl3b3JkIGluZm9ybURlZmluZSBDb25zdGFudAorCitzeW4ga2V5d29yZCBpbmZvcm1UeXBlIEFycmF5IEF0dHJpYnV0ZSBDbGFzcyBOZWFyYnkKK3N5biBrZXl3b3JkIGluZm9ybVR5cGUgT2JqZWN0IFByb3BlcnR5IFN0cmluZyBSb3V0aW5lCitzeW4gbWF0Y2ggICBpbmZvcm1UeXBlICJcPEdsb2JhbFw+IgorCitzeW4ga2V5d29yZCBpbmZvcm1JbmNsdWRlIEltcG9ydCBJbmNsdWRlIExpbmsgUmVwbGFjZSBTeXN0ZW1fZmlsZQorCitzeW4ga2V5d29yZCBpbmZvcm1QcmVDb25kaXQgRW5kIEVuZGlmIElmZGVmIElmbmRlZiBJZnRydWUgSWZmYWxzZSBJZnYzIElmdjUKK3N5biBrZXl3b3JkIGluZm9ybVByZUNvbmRpdCBJZm5vdAorCitzeW4ga2V5d29yZCBpbmZvcm1QcmVQcm9jIEFiYnJldmlhdGUgRGVmYXVsdCBGYWtlX2FjdGlvbiBMb3dzdHJpbmcKK3N5biBrZXl3b3JkIGluZm9ybVByZVByb2MgTWVzc2FnZSBSZWxlYXNlIFNlcmlhbCBTdGF0dXNsaW5lIFN0dWIgU3dpdGNoZXMKK3N5biBrZXl3b3JkIGluZm9ybVByZVByb2MgVHJhY2UgWmNoYXJhY3RlcgorCitzeW4gcmVnaW9uICBpbmZvcm1HbG9iYWxSZWdpb24gbWF0Y2hncm91cD1pbmZvcm1UeXBlIHN0YXJ0PSJcPEdsb2JhbFw+IiBtYXRjaGdyb3VwPU5PTkUgc2tpcD0rIS4qJFx8Ii4qIlx8Jy4qJysgZW5kPSI7IiBjb250YWlucz1BTExCVVQsaW5mb3JtR3JhbVByZVByb2MsaW5mb3JtUHJlZGljYXRlLGluZm9ybUdyYW1tYXIsaW5mb3JtQXNtLGluZm9ybUFzbU9ic29sZXRlCisKK3N5biBrZXl3b3JkIGluZm9ybUdyYW1QcmVQcm9jIGNvbnRhaW5lZCBWZXJiIEV4dGVuZAorCitpZiAhZXhpc3RzKCJpbmZvcm1faGlnaGxpZ2h0X3NpbXBsZSIpCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkF0dHJpYiBhYnNlbnQgYW5pbWF0ZSBjbG90aGluZyBjb25jZWFsZWQgY29udGFpbmVyCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkF0dHJpYiBkb29yIGVkaWJsZSBlbnRlcmFibGUgZmVtYWxlIGdlbmVyYWwgbGlnaHQKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQXR0cmliIGxvY2thYmxlIGxvY2tlZCBtYWxlIG1vdmVkIG5ldXRlciBvbiBvcGVuCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkF0dHJpYiBvcGVuYWJsZSBwbHVyYWxuYW1lIHByb3BlciBzY2VuZXJ5IHNjb3JlZAorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJBdHRyaWIgc3RhdGljIHN1cHBvcnRlciBzd2l0Y2hhYmxlIHRhbGthYmxlCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkF0dHJpYiB2aXNpdGVkIHdvcmtmbGFnIHdvcm4KKyAgc3luIG1hdGNoIGluZm9ybUxpYkF0dHJpYiAiXDx0cmFuc3BhcmVudFw+IgorCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlByb3AgZV90byBzZV90byBzX3RvIHN3X3RvIHdfdG8gbndfdG8gbl90byBuZV90bworICBzeW4ga2V5d29yZCBpbmZvcm1MaWJQcm9wIHVfdG8gZF90byBpbl90byBvdXRfdG8gYmVmb3JlIGFmdGVyIGxpZmUKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUHJvcCBkb29yX3RvIHdpdGhfa2V5IGRvb3JfZGlyIGludmVudCBwbHVyYWwKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUHJvcCBhZGRfdG9fc2NvcGUgbGlzdF90b2dldGhlciByZWFjdF9iZWZvcmUKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUHJvcCByZWFjdF9hZnRlciBncmFtbWFyIG9yZGVycyBpbml0aWFsIHdoZW5fb3BlbgorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJQcm9wIHdoZW5fY2xvc2VkIHdoZW5fb24gd2hlbl9vZmYgZGVzY3JpcHRpb24KKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUHJvcCBkZXNjcmliZSBhcnRpY2xlIGNhbnRfZ28gZm91bmRfaW4gdGltZV9sZWZ0CisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlByb3AgbnVtYmVyIHRpbWVfb3V0IGRhZW1vbiBlYWNoX3R1cm4gY2FwYWNpdHkKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUHJvcCBuYW1lIHNob3J0X25hbWUgc2hvcnRfbmFtZV9pbmRlZiBwYXJzZV9uYW1lCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlByb3AgYXJ0aWNsZXMgaW5zaWRlX2Rlc2NyaXB0aW9uCisgIGlmICFleGlzdHMoImluZm9ybV9oaWdobGlnaHRfb2xkIikKKyAgICBzeW4ga2V5d29yZCBpbmZvcm1MaWJQcm9wIGNvbXBhc3NfbG9vayBiZWZvcmVfaW1wbGljaXQKKyAgICBzeW4ga2V5d29yZCBpbmZvcm1MaWJQcm9wIGV4dF9pbml0aWFsaXNlIGV4dF9tZXNzYWdlcworICBlbmRpZgorCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYk9iaiBlX29iaiBzZV9vYmogc19vYmogc3dfb2JqIHdfb2JqIG53X29iaiBuX29iagorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJPYmogbmVfb2JqIHVfb2JqIGRfb2JqIGluX29iaiBvdXRfb2JqIGNvbXBhc3MKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliT2JqIHRoZWRhcmsgc2VsZm9iaiBwbGF5ZXIgbG9jYXRpb24gc2Vjb25kIGFjdG9yCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYk9iaiBub3VuCisgIGlmICFleGlzdHMoImluZm9ybV9oaWdobGlnaHRfb2xkIikKKyAgICBzeW4ga2V5d29yZCBpbmZvcm1MaWJPYmogTGlicmFyeUV4dGVuc2lvbnMKKyAgZW5kaWYKKworICBzeW4ga2V5d29yZCBpbmZvcm1MaWJSb3V0aW5lIEFjaGlldmVkIEFmdGVyUm91dGluZXMgQWRkVG9TY29wZQorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJSb3V0aW5lIEFsbG93UHVzaERpciBCYW5uZXIgQ2hhbmdlRGVmYXVsdAorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJSb3V0aW5lIENoYW5nZVBsYXllciBDb21tb25BbmNlc3RvciBEaWN0aW9uYXJ5TG9va3VwCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgRGlzcGxheVN0YXR1cyBEb01lbnUgRHJhd1N0YXR1c0xpbmUKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSBFbmdsaXNoTnVtYmVyIEhhc0xpZ2h0U291cmNlIEdldEdOQU9mT2JqZWN0CisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgSW5kaXJlY3RseUNvbnRhaW5zIElzU2VlVGhyb3VnaCBMb2NhbGUKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSBMb29wT3ZlclNjb3BlIExUSV9JbnNlcnQgTW92ZUZsb2F0aW5nT2JqZWN0cworICBzeW4ga2V5d29yZCBpbmZvcm1MaWJSb3V0aW5lIE5leHRXb3JkIE5leHRXb3JkU3RvcHBlZCBOb3VuRG9tYWluCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgT2JqZWN0SXNVbnRvdWNoYWJsZSBPZmZlcnNMaWdodCBQYXJzZVRva2VuCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgUGxhY2VJblNjb3BlIFBsYXllclRvIFByaW50U2hvcnROYW1lCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgUHJvbm91bk5vdGljZSBTY29wZVdpdGhpbiBTZXRQcm9ub3VuIFNldFRpbWUKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSBTdGFydERhZW1vbiBTdGFydFRpbWVyIFN0b3BEYWVtb24gU3RvcFRpbWVyCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgVGVzdFNjb3BlIFRyeU51bWJlciBVbnNpZ25lZENvbXBhcmUKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSBXb3JkQWRkcmVzcyBXb3JkSW5Qcm9wZXJ0eSBXb3JkTGVuZ3RoCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgV3JpdGVMaXN0RnJvbSBZZXNPck5vIFpSZWdpb24gUnVuUm91dGluZXMKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSBBZnRlckxpZmUgQWZ0ZXJQcm9tcHQgQW11c2luZyBCZWZvcmVQYXJzaW5nCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgQ2hvb3NlT2JqZWN0cyBEYXJrVG9EYXJrIERlYXRoTWVzc2FnZQorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJSb3V0aW5lIEdhbWVQb3N0Um91dGluZSBHYW1lUHJlUm91dGluZSBJbml0aWFsaXNlCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgSW5TY29wZSBMb29rUm91dGluZSBOZXdSb29tIFBhcnNlTm91bgorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJSb3V0aW5lIFBhcnNlTnVtYmVyIFBhcnNlckVycm9yIFByaW50UmFuayBQcmludFZlcmIKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSBQcmludFRhc2tOYW1lIFRpbWVQYXNzZXMgVW5rbm93blZlcmIKKyAgaWYgZXhpc3RzKCJpbmZvcm1faGlnaGxpZ2h0X2dsdWx4IikKKyAgICAgc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSAgSWRlbnRpZnlHbGtPYmplY3QgSGFuZGxlR2xrRXZlbnQKKyAgICAgc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSAgSW5pdEdsa1dpbmRvdworICBlbmRpZgorICBpZiAhZXhpc3RzKCJpbmZvcm1faGlnaGxpZ2h0X29sZCIpCisgICAgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgIEtleUNoYXJQcmltaXRpdmUgS2V5RGVsYXkgQ2xlYXJTY3JlZW4KKyAgICAgc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSAgTW92ZUN1cnNvciBNYWluV2luZG93IFN0YXR1c0xpbmVIZWlnaHQKKyAgICAgc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSAgU2NyZWVuV2lkdGggU2NyZWVuSGVpZ2h0IFNldENvbG91cgorICAgICBzeW4ga2V5d29yZCBpbmZvcm1MaWJSb3V0aW5lICBEZWNpbWFsTnVtYmVyIFByaW50VG9CdWZmZXIgTGVuZ3RoCisgICAgIHN5biBrZXl3b3JkIGluZm9ybUxpYlJvdXRpbmUgIFVwcGVyQ2FzZSBMb3dlckNhc2UgUHJpbnRDYXBpdGFsaXNlZAorICAgICBzeW4ga2V5d29yZCBpbmZvcm1MaWJSb3V0aW5lICBDYXAgQ2VudHJlCisgICAgIGlmIGV4aXN0cygiaW5mb3JtX2hpZ2hsaWdodF9nbHVseCIpCisJc3luIGtleXdvcmQgaW5mb3JtTGliUm91dGluZSAgUHJpbnRBbnl0aGluZyBQcmludEFueVRvQXJyYXkKKyAgICAgZW5kaWYKKyAgZW5kaWYKKworICBzeW4ga2V5d29yZCBpbmZvcm1MaWJBY3Rpb24gIFF1aXQgUmVzdGFydCBSZXN0b3JlIFZlcmlmeSBTYXZlCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgU2NyaXB0T24gU2NyaXB0T2ZmIFByb25vdW5zIFNjb3JlCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgRnVsbHNjb3JlIExNb2RlMSBMTW9kZTIgTE1vZGUzCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgTm90aWZ5T24gTm90aWZ5T2ZmIFZlcnNpb24gUGxhY2VzCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgT2JqZWN0cyBUcmFjZU9uIFRyYWNlT2ZmIFRyYWNlTGV2ZWwKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBBY3Rpb25zT24gQWN0aW9uc09mZiBSb3V0aW5lc09uCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgUm91dGluZXNPZmYgVGltZXJzT24gVGltZXJzT2ZmCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgQ29tbWFuZHNPbiBDb21tYW5kc09mZiBDb21tYW5kc1JlYWQKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBQcmVkaWN0YWJsZSBYUHVybG9pbiBYQWJzdHJhY3QgWFRyZWUKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBTY29wZSBHb3RvIEdvbmVhciBJbnYgSW52VGFsbCBJbnZXaWRlCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgVGFrZSBEcm9wIFJlbW92ZSBQdXRPbiBJbnNlcnQgVHJhbnNmZXIKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBFbXB0eSBFbnRlciBFeGl0IEdldE9mZiBHbyBHb2luIExvb2sKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBFeGFtaW5lIFNlYXJjaCBHaXZlIFNob3cgVW5sb2NrIExvY2sKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBTd2l0Y2hPbiBTd2l0Y2hPZmYgT3BlbiBDbG9zZSBEaXNyb2JlCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgV2VhciBFYXQgWWVzIE5vIEJ1cm4gUHJheSBXYWtlCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgV2FrZU90aGVyIENvbnN1bHQgS2lzcyBUaGluayBTbWVsbAorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJBY3Rpb24gIExpc3RlbiBUYXN0ZSBUb3VjaCBEaWcgQ3V0IEp1bXAKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBKdW1wT3ZlciBUaWUgRHJpbmsgRmlsbCBTb3JyeSBTdHJvbmcKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBNaWxkIEF0dGFjayBTd2ltIFN3aW5nIEJsb3cgUnViIFNldAorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJBY3Rpb24gIFNldFRvIFdhdmVIYW5kcyBXYXZlIFB1bGwgUHVzaCBQdXNoRGlyCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgVHVybiBTcXVlZXplIExvb2tVbmRlciBUaHJvd0F0IFRlbGwKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBBbnN3ZXIgQnV5IEFzayBBc2tGb3IgU2luZyBDbGltYiBXYWl0CisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgU2xlZXAgTGV0R28gUmVjZWl2ZSBUaHJvd25BdCBPcmRlcgorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJBY3Rpb24gIFRoZVNhbWUgUGx1cmFsRm91bmQgTWlzY2VsbGFueSBQcm9tcHQKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBDaGFuZ2VzT24gQ2hhbmdlc09mZiBTaG93dmVyYiBTaG93b2JqCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkFjdGlvbiAgRW1wdHlUIFZhZ3VlR28KKyAgaWYgZXhpc3RzKCJpbmZvcm1faGlnaGxpZ2h0X2dsdWx4IikKKyAgICAgc3luIGtleXdvcmQgaW5mb3JtTGliQWN0aW9uICBHbGtMaXN0CisgIGVuZGlmCisKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliVmFyaWFibGUga2VlcF9zaWxlbnQgZGVhZGZsYWcgYWN0aW9uIHNwZWNpYWxfbnVtYmVyCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlZhcmlhYmxlIGNvbnN1bHRfZnJvbSBjb25zdWx0X3dvcmRzIGV0eXBlIHZlcmJfbnVtCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlZhcmlhYmxlIHZlcmJfd29yZCB0aGVfdGltZSByZWFsX2xvY2F0aW9uIGNfc3R5bGUKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliVmFyaWFibGUgcGFyc2VyX29uZSBwYXJzZXJfdHdvIGxpc3RpbmdfdG9nZXRoZXIgd24KKyAgc3luIGtleXdvcmQgaW5mb3JtTGliVmFyaWFibGUgcGFyc2VyX2FjdGlvbiBzY29wZV9zdGFnZSBzY29wZV9yZWFzb24KKyAgc3luIGtleXdvcmQgaW5mb3JtTGliVmFyaWFibGUgYWN0aW9uX3RvX2JlIG1lbnVfaXRlbSBpdGVtX25hbWUgaXRlbV93aWR0aAorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJWYXJpYWJsZSBsbV9vIGxtX24gaW52ZW50b3J5X3N0eWxlIHRhc2tfc2NvcmVzCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYlZhcmlhYmxlIGludmVudG9yeV9zdGFnZQorCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkNvbnN0IEFNVVNJTkdfUFJPVklERUQgREVCVUcgSGVhZGxpbmUgTUFYX0NBUlJJRUQKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQ29uc3QgTUFYX1NDT1JFIE1BWF9USU1FUlMgTk9fUExBQ0VTIE5VTUJFUl9UQVNLUworICBzeW4ga2V5d29yZCBpbmZvcm1MaWJDb25zdCBPQkpFQ1RfU0NPUkUgUk9PTV9TQ09SRSBTQUNLX09CSkVDVCBTdG9yeQorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJDb25zdCBUQVNLU19QUk9WSURFRCBXSVRIT1VUX0RJUkVDVElPTlMKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQ29uc3QgTkVXTElORV9CSVQgSU5ERU5UX0JJVCBGVUxMSU5WX0JJVCBFTkdMSVNIX0JJVAorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJDb25zdCBSRUNVUlNFX0JJVCBBTFdBWVNfQklUIFRFUlNFX0JJVCBQQVJUSU5WX0JJVAorICBzeW4ga2V5d29yZCBpbmZvcm1MaWJDb25zdCBERUZBUlRfQklUIFdPUktGTEFHX0JJVCBJU0FSRV9CSVQgQ09OQ0VBTF9CSVQKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQ29uc3QgUEFSU0lOR19SRUFTT04gVEFMS0lOR19SRUFTT04gRUFDSFRVUk5fUkVBU09OCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkNvbnN0IFJFQUNUX0JFRk9SRV9SRUFTT04gUkVBQ1RfQUZURVJfUkVBU09OCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkNvbnN0IFRFU1RTQ09QRV9SRUFTT04gTE9PUE9WRVJTQ09QRV9SRUFTT04KKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQ29uc3QgU1RVQ0tfUEUgVVBUT19QRSBOVU1CRVJfUEUgQ0FOVFNFRV9QRSBUT09MSVRfUEUKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQ29uc3QgTk9USEVMRF9QRSBNVUxUSV9QRSBNTVVMVElfUEUgVkFHVUVfUEUgRVhDRVBUX1BFCisgIHN5biBrZXl3b3JkIGluZm9ybUxpYkNvbnN0IEFOSU1BX1BFIFZFUkJfUEUgU0NFTkVSWV9QRSBJVEdPTkVfUEUKKyAgc3luIGtleXdvcmQgaW5mb3JtTGliQ29uc3QgSlVOS0FGVEVSX1BFIFRPT0ZFV19QRSBOT1RISU5HX1BFIEFTS1NDT1BFX1BFCisgIGlmICFleGlzdHMoImluZm9ybV9oaWdobGlnaHRfb2xkIikKKyAgICAgc3luIGtleXdvcmQgaW5mb3JtTGliQ29uc3QgV09SRFNJWkUgVEFSR0VUX1pDT0RFIFRBUkdFVF9HTFVMWAorICAgICBzeW4ga2V5d29yZCBpbmZvcm1MaWJDb25zdCBMSUJSQVJZX1BBUlNFUiBMSUJSQVJZX1ZFUkJMSUIgTElCUkFSWV9HUkFNTUFSCisgICAgIHN5biBrZXl3b3JkIGluZm9ybUxpYkNvbnN0IExJQlJBUllfRU5HTElTSCBOT19TQ09SRSBTVEFSVF9NT1ZFCisgICAgIHN5biBrZXl3b3JkIGluZm9ybUxpYkNvbnN0IENMUl9ERUZBVUxUIENMUl9CTEFDSyBDTFJfUkVEIENMUl9HUkVFTgorICAgICBzeW4ga2V5d29yZCBpbmZvcm1MaWJDb25zdCBDTFJfWUVMTE9XIENMUl9CTFVFIENMUl9NQUdFTlRBIENMUl9DWUFOCisgICAgIHN5biBrZXl3b3JkIGluZm9ybUxpYkNvbnN0IENMUl9XSElURSBDTFJfUFVSUExFIENMUl9BWlVSRQorICAgICBzeW4ga2V5d29yZCBpbmZvcm1MaWJDb25zdCBXSU5fQUxMIFdJTl9NQUlOIFdJTl9TVEFUVVMKKyAgZW5kaWYKK2VuZGlmCisKKyIgTm93IHRoZSBjYXNlIHNlbnNpdGl2ZSBzdHVmZi4KKworc3ludGF4IGNhc2UgbWF0Y2gKKworc3luIGtleXdvcmQgaW5mb3JtU3lzRnVuYyBjaGlsZCBjaGlsZHJlbiBlbGRlciBpbmRpcmVjdCBwYXJlbnQgcmFuZG9tCitzeW4ga2V5d29yZCBpbmZvcm1TeXNGdW5jIHNpYmxpbmcgeW91bmdlciB5b3VuZ2VzdCBtZXRhY2xhc3MKK2lmIGV4aXN0cygiaW5mb3JtX2hpZ2hsaWdodF9nbHVseCIpCisgIHN5biBrZXl3b3JkIGluZm9ybVN5c0Z1bmMgZ2xrCitlbmRpZgorCitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBhZGplY3RpdmVzX3RhYmxlIGFjdGlvbnNfdGFibGUgY2xhc3Nlc190YWJsZQorc3luIGtleXdvcmQgaW5mb3JtU3lzQ29uc3QgaWRlbnRpZmllcnNfdGFibGUgcHJlYWN0aW9uc190YWJsZSB2ZXJzaW9uX251bWJlcgorc3luIGtleXdvcmQgaW5mb3JtU3lzQ29uc3QgbGFyZ2VzdF9vYmplY3Qgc3RyaW5nc19vZmZzZXQgY29kZV9vZmZzZXQKK3N5biBrZXl3b3JkIGluZm9ybVN5c0NvbnN0IGRpY3RfcGFyMSBkaWN0X3BhcjIgZGljdF9wYXIzCitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBhY3R1YWxfbGFyZ2VzdF9vYmplY3Qgc3RhdGljX21lbW9yeV9vZmZzZXQKK3N5biBrZXl3b3JkIGluZm9ybVN5c0NvbnN0IGFycmF5X25hbWVzX29mZnNldCByZWFkYWJsZV9tZW1vcnlfb2Zmc2V0CitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBjcHZfX3N0YXJ0IGNwdl9fZW5kIGlwdl9fc3RhcnQgaXB2X19lbmQKK3N5biBrZXl3b3JkIGluZm9ybVN5c0NvbnN0IGFycmF5X19zdGFydCBhcnJheV9fZW5kIGxvd2VzdF9hdHRyaWJ1dGVfbnVtYmVyCitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBoaWdoZXN0X2F0dHJpYnV0ZV9udW1iZXIgYXR0cmlidXRlX25hbWVzX2FycmF5CitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBsb3dlc3RfcHJvcGVydHlfbnVtYmVyIGhpZ2hlc3RfcHJvcGVydHlfbnVtYmVyCitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBwcm9wZXJ0eV9uYW1lc19hcnJheSBsb3dlc3RfYWN0aW9uX251bWJlcgorc3luIGtleXdvcmQgaW5mb3JtU3lzQ29uc3QgaGlnaGVzdF9hY3Rpb25fbnVtYmVyIGFjdGlvbl9uYW1lc19hcnJheQorc3luIGtleXdvcmQgaW5mb3JtU3lzQ29uc3QgbG93ZXN0X2Zha2VfYWN0aW9uX251bWJlciBoaWdoZXN0X2Zha2VfYWN0aW9uX251bWJlcgorc3luIGtleXdvcmQgaW5mb3JtU3lzQ29uc3QgZmFrZV9hY3Rpb25fbmFtZXNfYXJyYXkgbG93ZXN0X3JvdXRpbmVfbnVtYmVyCitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBoaWdoZXN0X3JvdXRpbmVfbnVtYmVyIHJvdXRpbmVzX2FycmF5CitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCByb3V0aW5lX25hbWVzX2FycmF5IHJvdXRpbmVfZmxhZ3NfYXJyYXkKK3N5biBrZXl3b3JkIGluZm9ybVN5c0NvbnN0IGxvd2VzdF9nbG9iYWxfbnVtYmVyIGhpZ2hlc3RfZ2xvYmFsX251bWJlciBnbG9iYWxzX2FycmF5CitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBnbG9iYWxfbmFtZXNfYXJyYXkgZ2xvYmFsX2ZsYWdzX2FycmF5CitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBsb3dlc3RfYXJyYXlfbnVtYmVyIGhpZ2hlc3RfYXJyYXlfbnVtYmVyIGFycmF5c19hcnJheQorc3luIGtleXdvcmQgaW5mb3JtU3lzQ29uc3QgYXJyYXlfbmFtZXNfYXJyYXkgYXJyYXlfZmxhZ3NfYXJyYXkgbG93ZXN0X2NvbnN0YW50X251bWJlcgorc3luIGtleXdvcmQgaW5mb3JtU3lzQ29uc3QgaGlnaGVzdF9jb25zdGFudF9udW1iZXIgY29uc3RhbnRzX2FycmF5IGNvbnN0YW50X25hbWVzX2FycmF5CitzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBsb3dlc3RfY2xhc3NfbnVtYmVyIGhpZ2hlc3RfY2xhc3NfbnVtYmVyIGNsYXNzX29iamVjdHNfYXJyYXkKK3N5biBrZXl3b3JkIGluZm9ybVN5c0NvbnN0IGxvd2VzdF9vYmplY3RfbnVtYmVyIGhpZ2hlc3Rfb2JqZWN0X251bWJlcgoraWYgIWV4aXN0cygiaW5mb3JtX2hpZ2hsaWdodF9vbGQiKQorICBzeW4ga2V5d29yZCBpbmZvcm1TeXNDb25zdCBzeXNfc3RhdHVzbGluZV9mbGFnCitlbmRpZgorCitzeW4ga2V5d29yZCBpbmZvcm1Db25kaXRpb25hbCBkZWZhdWx0IGVsc2UgaWYgc3dpdGNoCisKK3N5biBrZXl3b3JkIGluZm9ybVJlcGVhdCBicmVhayBjb250aW51ZSBkbyBmb3Igb2JqZWN0bG9vcCB1bnRpbCB3aGlsZQorCitzeW4ga2V5d29yZCBpbmZvcm1TdGF0ZW1lbnQgYm94IGZvbnQgZ2l2ZSBpbnZlcnNpb24ganVtcCBtb3ZlIG5ld19saW5lCitzeW4ga2V5d29yZCBpbmZvcm1TdGF0ZW1lbnQgcHJpbnQgcHJpbnRfcmV0IHF1aXQgcmVhZCByZW1vdmUgcmVzdG9yZSByZXR1cm4KK3N5biBrZXl3b3JkIGluZm9ybVN0YXRlbWVudCByZmFsc2UgcnRydWUgc2F2ZSBzcGFjZXMgc3RyaW5nIHN0eWxlCisKK3N5biBrZXl3b3JkIGluZm9ybU9wZXJhdG9yIHJvbWFuIHJldmVyc2UgYm9sZCB1bmRlcmxpbmUgZml4ZWQgb24gb2ZmIHRvCitzeW4ga2V5d29yZCBpbmZvcm1PcGVyYXRvciBuZWFyIGZyb20KKworc3luIGtleXdvcmQgaW5mb3JtS2V5d29yZCBkaWN0aW9uYXJ5IHN5bWJvbHMgb2JqZWN0cyB2ZXJicyBhc3NlbWJseQorc3luIGtleXdvcmQgaW5mb3JtS2V5d29yZCBleHByZXNzaW9ucyBsaW5lcyB0b2tlbnMgbGlua2VyIG9uIG9mZiBhbGlhcyBsb25nCitzeW4ga2V5d29yZCBpbmZvcm1LZXl3b3JkIGFkZGl0aXZlIHNjb3JlIHRpbWUgc3RyaW5nIHRhYmxlCitzeW4ga2V5d29yZCBpbmZvcm1LZXl3b3JkIHdpdGggcHJpdmF0ZSBoYXMgY2xhc3MgZXJyb3IgZmF0YWxlcnJvcgorc3luIGtleXdvcmQgaW5mb3JtS2V5d29yZCB3YXJuaW5nIHNlbGYKK2lmICFleGlzdHMoImluZm9ybV9oaWdobGlnaHRfb2xkIikKKyAgc3luIGtleXdvcmQgaW5mb3JtS2V5d29yZCBidWZmZXIKK2VuZGlmCisKK3N5biBrZXl3b3JkIGluZm9ybU1ldGFBdHRyaWIgcmVtYWluaW5nIGNyZWF0ZSBkZXN0cm95IHJlY3JlYXRlIGNvcHkgY2FsbAorc3luIGtleXdvcmQgaW5mb3JtTWV0YUF0dHJpYiBwcmludF90b19hcnJheQorCitzeW4ga2V5d29yZCBpbmZvcm1QcmVkaWNhdGUgaGFzIGhhc250IGluIG5vdGluIG9mY2xhc3Mgb3IKK3N5biBrZXl3b3JkIGluZm9ybVByZWRpY2F0ZSBwcm92aWRlcworCitzeW4ga2V5d29yZCBpbmZvcm1HcmFtbWFyIGNvbnRhaW5lZCBub3VuIGhlbGQgbXVsdGkgbXVsdGloZWxkIG11bHRpZXhjZXB0CitzeW4ga2V5d29yZCBpbmZvcm1HcmFtbWFyIGNvbnRhaW5lZCBtdWx0aWluc2lkZSBjcmVhdHVyZSBzcGVjaWFsIG51bWJlcgorc3luIGtleXdvcmQgaW5mb3JtR3JhbW1hciBjb250YWluZWQgc2NvcGUgdG9waWMgcmV2ZXJzZSBtZXRhIG9ubHkgcmVwbGFjZQorc3luIGtleXdvcmQgaW5mb3JtR3JhbW1hciBjb250YWluZWQgZmlyc3QgbGFzdAorCitzeW4ga2V5d29yZCBpbmZvcm1LZXl3b3JkT2Jzb2xldGUgY29udGFpbmVkIGluaXRpYWwgZGF0YSBpbml0c3RyCisKK3N5biBrZXl3b3JkIGluZm9ybVRvZG8gY29udGFpbmVkIFRPRE8KKworIiBBc3NlbWJseSBsYW5ndWFnZSBtbmVtb25pY3MgbXVzdCBiZSBwcmVjZWRlZCBieSBhICdAJy4KKworc3luIG1hdGNoIGluZm9ybUFzbUNvbnRhaW5lciAiQFxzKlxrKiIgY29udGFpbnM9aW5mb3JtQXNtLGluZm9ybUFzbU9ic29sZXRlCisKK2lmIGV4aXN0cygiaW5mb3JtX2hpZ2hsaWdodF9nbHVseCIpCisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgbm9wIGFkZCBzdWIgbXVsIGRpdiBtb2QgbmVnIGJpdGFuZCBiaXRvcgorICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIGJpdHhvciBiaXRub3Qgc2hpZnRsIHNzaGlmdHIgdXNoaWZ0ciBqdW1wIGp6CisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgam56IGplcSBqbmUgamx0IGpnZSBqZ3QgamxlIGpsdHUgamdldSBqZ3R1CisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgamxldSBjYWxsIHJldHVybiBjYXRjaCB0aHJvdyB0YWlsY2FsbCBjb3B5CisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgY29weXMgY29weWIgc2V4cyBzZXhiIGFsb2FkIGFsb2FkcyBhbG9hZGIKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBhbG9hZGJpdCBhc3RvcmUgYXN0b3JlcyBhc3RvcmViIGFzdG9yZWJpdAorICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIHN0a2NvdW50IHN0a3BlZWsgc3Rrc3dhcCBzdGtyb2xsIHN0a2NvcHkKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBzdHJlYW1jaGFyIHN0cmVhbW51bSBzdHJlYW1zdHIgZ2VzdGFsdAorICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIGRlYnVndHJhcCBnZXRtZW1zaXplIHNldG1lbXNpemUganVtcGFicworICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIHJhbmRvbSBzZXRyYW5kb20gcXVpdCB2ZXJpZnkgcmVzdGFydCBzYXZlCisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgcmVzdG9yZSBzYXZldW5kbyByZXN0b3JldW5kbyBwcm90ZWN0IGdsaworICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIGdldHN0cmluZ3RibCBzZXRzdHJpbmd0YmwgZ2V0aW9zeXMgc2V0aW9zeXMKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBsaW5lYXJzZWFyY2ggYmluYXJ5c2VhcmNoIGxpbmtlZHNlYXJjaAorICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIGNhbGxmIGNhbGxmaSBjYWxsZmlpIGNhbGxmaWlpCitlbHNlCisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgamUgamwgamcgZGVjX2NoayBpbmNfY2hrIGppbiB0ZXN0IG9yIGFuZAorICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIHRlc3RfYXR0ciBzZXRfYXR0ciBjbGVhcl9hdHRyIHN0b3JlCisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgaW5zZXJ0X29iaiBsb2FkdyBsb2FkYiBnZXRfcHJvcAorICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIGdldF9wcm9wX2FkZHIgZ2V0X25leHRfcHJvcCBhZGQgc3ViIG11bCBkaXYKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBtb2QgY2FsbCBzdG9yZXcgc3RvcmViIHB1dF9wcm9wIHNyZWFkCisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgcHJpbnRfbnVtIHJhbmRvbSBwdXNoIHB1bGwKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBzcGxpdF93aW5kb3cgc2V0X3dpbmRvdyBvdXRwdXRfc3RyZWFtCisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgaW5wdXRfc3RyZWFtIHNvdW5kX2VmZmVjdCBqeiBnZXRfc2libGluZworICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIGdldF9jaGlsZCBnZXRfcGFyZW50IGdldF9wcm9wX2xlbiBpbmMgZGVjCisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgcmVtb3ZlX29iaiBwcmludF9vYmogcmV0IGp1bXAKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBsb2FkIG5vdCBydHJ1ZSByZmFsc2UgcHJpbnQKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBwcmludF9yZXQgbm9wIHNhdmUgcmVzdG9yZSByZXN0YXJ0CisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgcmV0X3BvcHBlZCBwb3AgcXVpdCBuZXdfbGluZSBzaG93X3N0YXR1cworICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIHZlcmlmeSBjYWxsXzJzIGNhbGxfdnMgYXJlYWQgY2FsbF92czIKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBlcmFzZV93aW5kb3cgZXJhc2VfbGluZSBzZXRfY3Vyc29yIGdldF9jdXJzb3IKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBzZXRfdGV4dF9zdHlsZSBidWZmZXJfbW9kZSByZWFkX2NoYXIKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBzY2FuX3RhYmxlIGNhbGxfMXMgY2FsbF8ybiBzZXRfY29sb3VyIHRocm93CisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgY2FsbF92biBjYWxsX3ZuMiB0b2tlbmlzZSBlbmNvZGVfdGV4dAorICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIGNvcHlfdGFibGUgcHJpbnRfdGFibGUgY2hlY2tfYXJnX2NvdW50CisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgY2FsbF8xbiBjYXRjaCBwaXJhY3kgbG9nX3NoaWZ0IGFydF9zaGlmdAorICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIHNldF9mb250IHNhdmVfdW5kbyByZXN0b3JlX3VuZG8gZHJhd19waWN0dXJlCisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgcGljdHVyZV9kYXRhIGVyYXNlX3BpY3R1cmUgc2V0X21hcmdpbnMKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBtb3ZlX3dpbmRvdyB3aW5kb3dfc2l6ZSB3aW5kb3dfc3R5bGUKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBnZXRfd2luZF9wcm9wIHNjcm9sbF93aW5kb3cgcG9wX3N0YWNrCisgIHN5biBrZXl3b3JkIGluZm9ybUFzbSBjb250YWluZWQgcmVhZF9tb3VzZSBtb3VzZV93aW5kb3cgcHVzaF9zdGFjaworICBzeW4ga2V5d29yZCBpbmZvcm1Bc20gY29udGFpbmVkIHB1dF93aW5kX3Byb3AgcHJpbnRfZm9ybSBtYWtlX21lbnUKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBwaWN0dXJlX3RhYmxlCisgIGlmICFleGlzdHMoImluZm9ybV9oaWdobGlnaHRfb2xkIikKKyAgICAgc3luIGtleXdvcmQgaW5mb3JtQXNtIGNvbnRhaW5lZCBjaGVja191bmljb2RlIHByaW50X3VuaWNvZGUKKyAgZW5kaWYKKyAgc3luIGtleXdvcmQgaW5mb3JtQXNtT2Jzb2xldGUgY29udGFpbmVkIHByaW50X3BhZGRyIHByaW50X2FkZHIgcHJpbnRfY2hhcgorZW5kaWYKKworIiBIYW5kbGluZyBmb3IgZGlmZmVyZW50IHZlcnNpb25zIG9mIFZJTS4KKworaWYgdmVyc2lvbiA+PSA2MDAKKyAgc2V0bG9jYWwgaXNrZXl3b3JkKz0kCisgIGNvbW1hbmQgLW5hcmdzPSsgU3luRGlzcGxheSBzeW50YXggPGFyZ3M+IGRpc3BsYXkKK2Vsc2UKKyAgc2V0IGlza2V5d29yZCs9JAorICBjb21tYW5kIC1uYXJncz0rIFN5bkRpc3BsYXkgc3ludGF4IDxhcmdzPgorZW5kaWYKKworIiBHcmFtbWFyIHNlY3Rpb25zLgorCitzeW4gcmVnaW9uIGluZm9ybUdyYW1tYXJTZWN0aW9uIG1hdGNoZ3JvdXA9aW5mb3JtR3JhbVByZVByb2Mgc3RhcnQ9Ilw8VmVyYlx8RXh0ZW5kXD4iIHNraXA9KyIuKiIrIGVuZD0iOyJoZT1lLTEgY29udGFpbnM9QUxMQlVULGluZm9ybUFzbQorCisiIFNwZWNpYWwgY2hhcmFjdGVyIGZvcm1zLgorCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybUJhZEFjY2VudCBjb250YWluZWQgIkBbXntbOmRpZ2l0Ol1dXEQiCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybUJhZEFjY2VudCBjb250YWluZWQgIkB7W159XSp9IgorU3luRGlzcGxheSBtYXRjaCBpbmZvcm1BY2NlbnQgY29udGFpbmVkICJAOlthb3VBT1VlaXlFSV0iCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybUFjY2VudCBjb250YWluZWQgIkAnW2FlaW91eUFFSU9VWV0iCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybUFjY2VudCBjb250YWluZWQgIkBgW2FlaW91QUVJT1VdIgorU3luRGlzcGxheSBtYXRjaCBpbmZvcm1BY2NlbnQgY29udGFpbmVkICJAXF5bYWVpb3VBRUlPVV0iCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybUFjY2VudCBjb250YWluZWQgIkBcflthbm9BTk9dIgorU3luRGlzcGxheSBtYXRjaCBpbmZvcm1BY2NlbnQgY29udGFpbmVkICJAL1tvT10iCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybUFjY2VudCBjb250YWluZWQgIkBzc1x8QDw8XHxAPj5cfEBvYVx8QG9BXHxAYWVcfEBBRVx8QGNjXHxAY0MiCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybUFjY2VudCBjb250YWluZWQgIkB0aFx8QGV0XHxAVGhcfEBFdFx8QExMXHxAb2VcfEBPRVx8QCEhXHxAPz8iCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybUFjY2VudCBjb250YWluZWQgIkB7XHhcezEsNH19IgorU3luRGlzcGxheSBtYXRjaCBpbmZvcm1CYWRTdHJVbmljb2RlIGNvbnRhaW5lZCAiQEBcRCIKK1N5bkRpc3BsYXkgbWF0Y2ggaW5mb3JtU3RyaW5nVW5pY29kZSBjb250YWluZWQgIkBAXGRcKyIKK1N5bkRpc3BsYXkgbWF0Y2ggaW5mb3JtU3RyaW5nQ29kZSBjb250YWluZWQgIkBcZFxkIgorCisiIFN0cmluZyBhbmQgQ2hhcmFjdGVyIGNvbnN0YW50cy4gIE9yZGVyaW5nIGlzIGltcG9ydGFudCBoZXJlLgorc3luIHJlZ2lvbiBpbmZvcm1TdHJpbmcgc3RhcnQ9KyIrIHNraXA9K1xcXFwrIGVuZD0rIisgY29udGFpbnM9aW5mb3JtQWNjZW50LGluZm9ybVN0cmluZ1VuaWNvZGUsaW5mb3JtU3RyaW5nQ29kZSxpbmZvcm1CYWRBY2NlbnQsaW5mb3JtQmFkU3RyVW5pY29kZQorc3luIHJlZ2lvbiBpbmZvcm1EaWN0U3RyaW5nIHN0YXJ0PSInIiBlbmQ9IiciIGNvbnRhaW5zPWluZm9ybUFjY2VudCxpbmZvcm1CYWRBY2NlbnQKK1N5bkRpc3BsYXkgbWF0Y2ggaW5mb3JtQmFkRGljdFN0cmluZyAiJyciCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybURpY3RTdHJpbmcgIicnJyIKKworIiBJbnRlZ2VyIG51bWJlcnM6IGRlY2ltYWwsIGhleGFkZWNpbWFsIGFuZCBiaW5hcnkuCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybU51bWJlciAiXDxcZFwrXD4iCitTeW5EaXNwbGF5IG1hdGNoIGluZm9ybU51bWJlciAiXDxcJFx4XCtcPiIKK1N5bkRpc3BsYXkgbWF0Y2ggaW5mb3JtTnVtYmVyICJcPFwkXCRbMDFdXCtcPiIKKworIiBDb21tZW50cworc3luIG1hdGNoIGluZm9ybUNvbW1lbnQgIiEuKiIgY29udGFpbnM9aW5mb3JtVG9kbworCisiIFN5bmNyb25pemF0aW9uCitzeW4gc3luYyBtYXRjaCBpbmZvcm1TeW5jU3RyaW5nRW5kIGdyb3VwaGVyZSBOT05FIC8iWzssXVxzKiQvCitzeW4gc3luYyBtYXRjaCBpbmZvcm1TeW5jUm91dGluZUVuZCBncm91cGhlcmUgTk9ORSAvXVs7LF1ccyokLworc3luIHN5bmMgbWF0Y2ggaW5mb3JtU3luY0NvbW1lbnRFbmQgZ3JvdXBoZXJlIE5PTkUgL15ccyohLiokLworc3luIHN5bmMgbWF0Y2ggaW5mb3JtU3luY1JvdXRpbmUgZ3JvdXB0aGVyZSBpbmZvcm1HcmFtbWFyU2VjdGlvbiAiXDxWZXJiXHxFeHRlbmRcPiIKK3N5biBzeW5jIG1heGxpbmVzPTUwMAorCitkZWxjb21tYW5kIFN5bkRpc3BsYXkKKworIiBUaGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfaW5mb3JtX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2luZm9ybV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBpbmZvcm1EZWZpbmUJCURlZmluZQorICBIaUxpbmsgaW5mb3JtVHlwZQkJVHlwZQorICBIaUxpbmsgaW5mb3JtSW5jbHVkZQkJSW5jbHVkZQorICBIaUxpbmsgaW5mb3JtUHJlQ29uZGl0CVByZUNvbmRpdAorICBIaUxpbmsgaW5mb3JtUHJlUHJvYwkJUHJlUHJvYworICBIaUxpbmsgaW5mb3JtR3JhbVByZVByb2MJUHJlUHJvYworICBIaUxpbmsgaW5mb3JtQXNtCQlTcGVjaWFsCisgIGlmICFleGlzdHMoImluZm9ybV9zdXBwcmVzc19vYnNvbGV0ZSIpCisgICAgSGlMaW5rIGluZm9ybUFzbU9ic29sZXRlCQlpbmZvcm1FcnJvcgorICAgIEhpTGluayBpbmZvcm1LZXl3b3JkT2Jzb2xldGUJaW5mb3JtRXJyb3IKKyAgZWxzZQorICAgIEhpTGluayBpbmZvcm1Bc21PYnNvbGV0ZQkJU3BlY2lhbAorICAgIEhpTGluayBpbmZvcm1LZXl3b3JkT2Jzb2xldGUJS2V5d29yZAorICBlbmRpZgorICBIaUxpbmsgaW5mb3JtUHJlZGljYXRlCU9wZXJhdG9yCisgIEhpTGluayBpbmZvcm1TeXNGdW5jCQlJZGVudGlmaWVyCisgIEhpTGluayBpbmZvcm1TeXNDb25zdAkJSWRlbnRpZmllcgorICBIaUxpbmsgaW5mb3JtQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGluZm9ybVJlcGVhdAkJUmVwZWF0CisgIEhpTGluayBpbmZvcm1TdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluayBpbmZvcm1PcGVyYXRvcgkJT3BlcmF0b3IKKyAgSGlMaW5rIGluZm9ybUtleXdvcmQJCUtleXdvcmQKKyAgSGlMaW5rIGluZm9ybUdyYW1tYXIJCUtleXdvcmQKKyAgSGlMaW5rIGluZm9ybURpY3RTdHJpbmcJU3RyaW5nCisgIEhpTGluayBpbmZvcm1OdW1iZXIJCU51bWJlcgorICBIaUxpbmsgaW5mb3JtRXJyb3IJCUVycm9yCisgIEhpTGluayBpbmZvcm1TdHJpbmcJCVN0cmluZworICBIaUxpbmsgaW5mb3JtQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgaW5mb3JtQWNjZW50CQlTcGVjaWFsCisgIEhpTGluayBpbmZvcm1TdHJpbmdVbmljb2RlCVNwZWNpYWwKKyAgSGlMaW5rIGluZm9ybVN0cmluZ0NvZGUJU3BlY2lhbAorICBIaUxpbmsgaW5mb3JtVG9kbwkJVG9kbworICBpZiAhZXhpc3RzKCJpbmZvcm1faGlnaGxpZ2h0X3NpbXBsZSIpCisgICAgSGlMaW5rIGluZm9ybUxpYkF0dHJpYglJZGVudGlmaWVyCisgICAgSGlMaW5rIGluZm9ybUxpYlByb3AJSWRlbnRpZmllcgorICAgIEhpTGluayBpbmZvcm1MaWJPYmoJCUlkZW50aWZpZXIKKyAgICBIaUxpbmsgaW5mb3JtTGliUm91dGluZQlJZGVudGlmaWVyCisgICAgSGlMaW5rIGluZm9ybUxpYlZhcmlhYmxlCUlkZW50aWZpZXIKKyAgICBIaUxpbmsgaW5mb3JtTGliQ29uc3QJSWRlbnRpZmllcgorICAgIEhpTGluayBpbmZvcm1MaWJBY3Rpb24JSWRlbnRpZmllcgorICBlbmRpZgorICBIaUxpbmsgaW5mb3JtQmFkRGljdFN0cmluZwlpbmZvcm1FcnJvcgorICBIaUxpbmsgaW5mb3JtQmFkQWNjZW50CWluZm9ybUVycm9yCisgIEhpTGluayBpbmZvcm1CYWRTdHJVbmljb2RlCWluZm9ybUVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImluZm9ybSIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2luaXR0YWIudmltIGIvcnVudGltZS9zeW50YXgvaW5pdHRhYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0NzJmOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2luaXR0YWIudmltCkBAIC0wLDAgKzEsNzUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIFRoaXMgaXMgYSBHRU5FUkFURUQgRklMRS4gUGxlYXNlIGFsd2F5cyByZWZlciB0byBzb3VyY2UgZmlsZSBhdCB0aGUgVVJJIGJlbG93LgorIiBMYW5ndWFnZTogU3lzVi1jb21wYXRpYmxlIGluaXQgcHJvY2VzcyBjb250cm9sIGZpbGUgYGluaXR0YWInCisiIE1haW50YWluZXI6IERhdmlkIE5lXHZ7Y31hcyAoWWV0aSkgPHlldGlAcGh5c2ljcy5tdW5pLmN6PgorIiBMYXN0IENoYW5nZTogMjAwMi0wOS0xMworIiBVUkw6IGh0dHA6Ly9waHlzaWNzLm11bmkuY3ovfnlldGkvZG93bmxvYWQvc3ludGF4L2luaXR0YWIudmltCisKKyIgU2V0dXAKK2lmIHZlcnNpb24gPj0gNjAwCisgIGlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgICAgZmluaXNoCisgIGVuZGlmCitlbHNlCisgIHN5bnRheCBjbGVhcgorZW5kaWYKKworc3luIGNhc2UgbWF0Y2gKKworIiBCYXNlIGNvbnN0cnVjdHMKK3N5biBtYXRjaCBpbml0dGFiRXJyb3IgIlteOl1cKzoibWU9ZS0xIGNvbnRhaW5lZAorc3luIG1hdGNoIGluaXR0YWJFcnJvciAiW146XVwrJCIgY29udGFpbmVkCitzeW4gbWF0Y2ggaW5pdHRhYkNvbW1lbnQgIl5bIzpdLiokIiBjb250YWlucz1pbml0dGFiRml4bWUKK3N5biBtYXRjaCBpbml0dGFiQ29tbWVudCAiIy4qJCIgY29udGFpbmVkIGNvbnRhaW5zPWluaXR0YWJGaXhtZQorc3luIGtleXdvcmQgaW5pdHRhYkZpeG1lIEZJWE1FIFRPRE8gWFhYIE5PVAorCisiIFNoZWxsCitzeW4gcmVnaW9uIGluaXR0YWJTaFN0cmluZyBzdGFydD0rIisgZW5kPSsiKyBza2lwPStcXFxcXHxcXFwiKyBjb250YWluZWQKK3N5biByZWdpb24gaW5pdHRhYlNoU3RyaW5nIHN0YXJ0PSsnKyBlbmQ9KycrIGNvbnRhaW5lZAorc3luIG1hdGNoIGluaXR0YWJTaE9wdGlvbiAiXHNbLStdW1s6YWxudW06XV1cKyJtcz1zKzEgY29udGFpbmVkCitzeW4gbWF0Y2ggaW5pdHRhYlNoT3B0aW9uICJccy0tWzphbG51bTpdWy1bOmFsbnVtOl1dKiJtcz1zKzEgY29udGFpbmVkCitzeW4gbWF0Y2ggaW5pdHRhYlNoQ29tbWFuZCAiL1xTXCsiIGNvbnRhaW5lZAorc3luIGNsdXN0ZXIgaW5pdHRhYlNoIGFkZD1pbml0dGFiU2hPcHRpb24saW5pdHRhYlNoU3RyaW5nLGluaXR0YWJTaENvbW1hbmQKKworIiBLZXl3b3Jkcworc3luIGtleXdvcmQgaW5pdHRhYkFjdGlvbk5hbWUgcmVzcGF3biB3YWl0IG9uY2UgYm9vdCBib290d2FpdCBvZmYgb25kZW1hbmQgc3lzaW5pdCBwb3dlcndhaXQgcG93ZXJmYWlsIHBvd2Vyb2t3YWl0IHBvd2VyZmFpbG5vdyBjdHJsYWx0ZGVsIGticmVxdWVzdCBpbml0ZGVmYXVsdCBjb250YWluZWQKKworIiBMaW5lIHBhcnNlcgorc3luIG1hdGNoIGluaXR0YWJJZCAiXltbOmFsbnVtOl1+XVx7MSw0fSIgbmV4dGdyb3VwPWluaXR0YWJDb2xvblJ1bkxldmVscyxpbml0dGFiRXJyb3IKK3N5biBtYXRjaCBpbml0dGFiQ29sb25SdW5MZXZlbHMgIjoiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9aW5pdHRhYlJ1bkxldmVscyxpbml0dGFiQ29sb25BY3Rpb24saW5pdHRhYkVycm9yCitzeW4gbWF0Y2ggaW5pdHRhYlJ1bkxldmVscyAiWzAtNkEtQ2EtY1NzXVwrIiBjb250YWluZWQgbmV4dGdyb3VwPWluaXR0YWJDb2xvbkFjdGlvbixpbml0dGFiRXJyb3IKK3N5biBtYXRjaCBpbml0dGFiQ29sb25BY3Rpb24gIjoiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9aW5pdHRhYkFjdGlvbixpbml0dGFiRXJyb3IKK3N5biBtYXRjaCBpbml0dGFiQWN0aW9uICJcd1wrIiBjb250YWluZWQgbmV4dGdyb3VwPWluaXR0YWJDb2xvblByb2Nlc3MsaW5pdHRhYkVycm9yIGNvbnRhaW5zPWluaXR0YWJBY3Rpb25OYW1lCitzeW4gbWF0Y2ggaW5pdHRhYkNvbG9uUHJvY2VzcyAiOiIgY29udGFpbmVkIG5leHRncm91cD1pbml0dGFiUHJvY2Vzc1BsdXMsaW5pdHRhYlByb2Nlc3MsaW5pdHRhYkVycm9yCitzeW4gbWF0Y2ggaW5pdHRhYlByb2Nlc3NQbHVzICIrIiBjb250YWluZWQgbmV4dGdyb3VwPWluaXR0YWJQcm9jZXNzLGluaXR0YWJFcnJvcgorc3luIHJlZ2lvbiBpbml0dGFiUHJvY2VzcyBzdGFydD0iLyIgZW5kPSIkIiB0cmFuc3BhcmVudCBvbmVsaW5lIGNvbnRhaW5lZCBjb250YWlucz1AaW5pdHRhYlNoLGluaXR0YWJDb21tZW50CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2luaXR0YWJfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfaW5pdHRhYl9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBpbml0dGFiQ29tbWVudCBDb21tZW50CisgIEhpTGluayBpbml0dGFiRml4bWUgVG9kbworICBIaUxpbmsgaW5pdHRhYkFjdGlvbk5hbWUgVHlwZQorICBIaUxpbmsgaW5pdHRhYkVycm9yIEVycm9yCisgIEhpTGluayBpbml0dGFiSWQgSWRlbnRpZmllcgorICBIaUxpbmsgaW5pdHRhYlJ1bkxldmVscyBTcGVjaWFsCisKKyAgSGlMaW5rIGluaXR0YWJDb2xvblByb2Nlc3MgaW5pdHRhYkNvbG9uCisgIEhpTGluayBpbml0dGFiQ29sb25BY3Rpb24gaW5pdHRhYkNvbG9uCisgIEhpTGluayBpbml0dGFiQ29sb25SdW5MZXZlbHMgaW5pdHRhYkNvbG9uCisgIEhpTGluayBpbml0dGFiQ29sb24gUHJlUHJvYworCisgIEhpTGluayBpbml0dGFiU2hTdHJpbmcgU3RyaW5nCisgIEhpTGluayBpbml0dGFiU2hPcHRpb24gU3BlY2lhbAorICBIaUxpbmsgaW5pdHRhYlNoQ29tbWFuZCBTdGF0ZW1lbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiaW5pdHRhYiIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2lwZmlsdGVyLnZpbSBiL3J1bnRpbWUvc3ludGF4L2lwZmlsdGVyLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWU2ZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvaXBmaWx0ZXIudmltCkBAIC0wLDAgKzEsNDMgQEAKKyIgaXBmaWx0ZXIgc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6IGlwZmlsdGVyIGNvbmZpZ3VyYXRpb24gZmlsZQorIiBNYWludGFpbmVyOiBIZW5kcmlrIFNjaG9seiA8aGVuZHJpa0BzY2hvbHoubmV0PgorIiBMYXN0IENoYW5nZTogMjAwMyBNYXkgMTEKKyIKKyIgaHR0cDovL3JhaXNkb3JmLm5ldC9maWxlcy9taXNjL2lwZmlsdGVyLnZpbQorIgorIiBUaGlzIHdpbGwgYWxzbyB3b3JrIGZvciBPcGVuQlNEIHBmIGJ1dCB0aGVyZSBtaWdodCBiZSBzb21lIHRhZ3MgdGhhdCBhcmUKKyIgbm90IGNvcnJlY3RseSBpZGVudGlmaWVkLgorIiBQbGVhc2Ugc2VuZCBjb21tZW50cyB0byBoZW5kcmlrQHNjaG9sei5uZXQKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGNvbW1lbnRzCitzeW4gbWF0Y2ggaXBmQ29tbWVudCAvIy8KKyJzeW4gbWF0Y2ggaXBmQ29tbWVudCAvIy4qLworCitzeW4ga2V5d29yZCBpcGZRdWljayBxdWljayBsb2cgZHVwLXRvCitzeW4ga2V5d29yZCBpcGZBbnkgYWxsIGFueQorIiBydWxlIEFjdGlvbiB0eXBlCitzeW4gcmVnaW9uIGlwZkFjdGlvbkJsb2NrIHN0YXJ0PS9eYmxvY2svIGVuZD0vJC8gY29udGFpbnM9aXBmUXVpY2ssaXBmQW55CitzeW4gcmVnaW9uIGlwZkFjdGlvblBhc3MgIHN0YXJ0PS9ecGFzcy8gZW5kPS8kLyBjb250YWlucz1pcGZRdWljayxpcGZBbnkKK3N5biByZWdpb24gaXBmQWN0aW9uTWlzYyAgc3RhcnQ9L15sb2cvIGVuZD0vJC8gY29udGFpbnM9aXBmUXVpY2ssaXBmQW55CitzeW4gcmVnaW9uIGlwZkFjdGlvbk1pc2MgIHN0YXJ0PS9eY291bnQvIGVuZD0vJC8gY29udGFpbnM9aXBmUXVpY2ssaXBmQW55CitzeW4gcmVnaW9uIGlwZkFjdGlvbk1pc2MgIHN0YXJ0PS9ec2tpcC8gZW5kPS8kLyBjb250YWlucz1pcGZRdWljayxpcGZBbnkKK3N5biByZWdpb24gaXBmQWN0aW9uTWlzYyAgc3RhcnQ9L15hdXRoLyBlbmQ9LyQvIGNvbnRhaW5zPWlwZlF1aWNrLGlwZkFueQorc3luIHJlZ2lvbiBpcGZBY3Rpb25NaXNjICBzdGFydD0vXmNhbGwvIGVuZD0vJC8gY29udGFpbnM9aXBmUXVpY2ssaXBmQW55CisKK2hpIGRlZiBsaW5rIGlwZkNvbW1lbnQJCUNvbW1lbnQKK2hpIGRlZiBsaW5rIGlwZkFjdGlvbkJsb2NrCVN0cmluZworaGkgZGVmIGxpbmsgaXBmQWN0aW9uUGFzcwlUeXBlCitoaSBkZWYgbGluayBpcGZBY3Rpb25NaXNjCUxhYmVsCisiaGkgZGVmIGxpbmsgaXBmUXVpY2sJCUVycm9yCitoaSBkZWYgbGluayBpcGZRdWljawkJU3BlY2lhbAoraGkgZGVmIGxpbmsgaXBmQW55CQlUb2RvCisKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaXNoZC52aW0gYi9ydW50aW1lL3N5bnRheC9pc2hkLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzAxMWYxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvaXNoZC52aW0KQEAgLTAsMCArMSw0MjIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglJbnN0YWxsU2hpZWxkIFNjcmlwdAorIiBNYWludGFpbmVyOglSb2JlcnQgTS4gQ29ydG9wYXNzaSA8Y29ydG9wYXJAbWluZHNwcmluZy5jb20+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBrZXl3b3JkIGlzaGRTdGF0ZW1lbnQgYWJvcnQgYmVnaW4gY2FzZSBkZWZhdWx0IGRvd250byBlbHNlIGVuZAorc3luIGtleXdvcmQgaXNoZFN0YXRlbWVudCBlbmRpZiBlbmRmb3IgZW5kd2hpbGUgZW5kc3dpdGNoIGVuZHByb2dyYW0gZXhpdCBlbHNlaWYKK3N5biBrZXl3b3JkIGlzaGRTdGF0ZW1lbnQgZXJyb3IgZm9yIGZ1bmN0aW9uIGdvdG8gaWYKK3N5biBrZXl3b3JkIGlzaGRTdGF0ZW1lbnQgcHJvZ3JhbSBwcm90b3R5cGUgcmV0dXJuIHJlcGVhdCBzdHJpbmcgc3RlcCBzd2l0Y2gKK3N5biBrZXl3b3JkIGlzaGRTdGF0ZW1lbnQgc3RydWN0IHRoZW4gdG8gdHlwZWRlZiB1bnRpbCB3aGlsZQorCitzeW4ga2V5d29yZCBpc2hkVHlwZSBCT09MIEJZUkVGIENIQVIgR0RJIEhXTkQgSU5UIEtFUk5FTCBMSVNUIExPTkcKK3N5biBrZXl3b3JkIGlzaGRUeXBlIE5VTUJFUiBQT0lOVEVSIFNIT1JUIFNUUklORyBVU0VSCisKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBfTUFYX0xFTkdUSCBfTUFYX1NUUklORworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEFGVEVSIEFMTENPTlRFTlRTIEFMTENPTlRST0xTIEFQUEVORCBBU0tERVNUUEFUSAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEFTS09QVElPTlMgQVNLUEFUSCBBU0tURVhUIEJBVENIX0lOU1RBTEwgQkFDSworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEJBQ0tCVVRUT04gQkFDS0dST1VORCBCQUNLR1JPVU5EQ0FQVElPTiBCQURQQVRICitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQkFEVEFHRklMRSBCQVNFTUVNT1JZIEJFRk9SRSBCSUxMQk9BUkQgQklOQVJZCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQklUTUFQMjU2Q09MT1JTIEJJVE1BUEZBREUgQklUTUFQSUNPTiBCS19CTFVFIEJLX0dSRUVOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQktfTUFHRU5UQSBCS19NQUdFTlRBMSBCS19PUkFOR0UgQktfUElOSyBCS19SRUQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBCS19TTU9PVEggQktfU09MSURCTEFDSyAgQktfU09MSURCTFVFIEJLX1NPTElER1JFRU4KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBCS19TT0xJRE1BR0VOVEEgQktfU09MSURPUkFOR0UgQktfU09MSURQSU5LIEJLX1NPTElEUkVECitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQktfU09MSURXSElURSBCS19TT0xJRFlFTExPVyBCS19ZRUxMT1cgQkxBQ0sgQkxVRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEJPT1RVUERSSVZFIEJVVFRPTl9DSEVDS0VEIEJVVFRPTl9FTlRFUiBCVVRUT05fVU5DSEVDS0VECitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQlVUVE9OX1VOS05PV04gQ01ETElORSBDT01NT05GSUxFUyBDQU5DRUwgQ0FOQ0VMQlVUVE9OCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ0NfRVJSX0ZJTEVGT1JNQVRFUlJPUiBDQ19FUlJfRklMRVJFQURFUlJPUgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENDX0VSUl9OT0NPTVBPTkVOVExJU1QgQ0NfRVJSX09VVE9GTUVNT1JZIENEUk9NCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ0RST01fRFJJVkUgQ0VOVEVSRUQgQ0hBTkdFRElSIENIRUNLQk9YIENIRUNLQk9YOTUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDSEVDS0xJTkUgQ0hFQ0tNQVJLIENNRF9DTE9TRSBDTURfTUFYSU1JWkUgQ01EX01JTklNSVpFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ01EX1BVU0hET1dOIENNRF9SRVNUT1JFIENPTE9STU9ERTI1NiBDT0xPUlMKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01CT0JPWF9FTlRFUiBDT01CT0JPWF9TRUxFQ1QgQ09NTUFORCBDT01NQU5ERVgKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01NT04gQ09NUF9ET05FIENPTVBfRVJSX0NSRUFURURJUgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBfRVJSX0RFU1RDT05GTElDVCBDT01QX0VSUl9GSUxFTk9USU5MSUIKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QX0VSUl9GSUxFU0laRSBDT01QX0VSUl9GSUxFVE9PTEFSR0UKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QX0VSUl9IRUFERVIgQ09NUF9FUlJfSU5DT01QQVRJQkxFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUF9FUlJfSU5UUFVUTk9UQ09NUFJFU1NFRCBDT01QX0VSUl9JTlZBTElETElTVAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBfRVJSX0xBVU5DSFNFUlZFUiBDT01QX0VSUl9NRU1PUlkKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QX0VSUl9OT0RJU0tTUEFDRSBDT01QX0VSUl9PUEVOSU5QVVQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QX0VSUl9PUEVOT1VUUFVUIENPTVBfRVJSX09QVElPTlMKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QX0VSUl9PVVRQVVROT1RDT01QUkVTU0VEIENPTVBfRVJSX1NQTElUCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUF9FUlJfVEFSR0VUIENPTVBfRVJSX1RBUkdFVFJFQURPTkxZIENPTVBfRVJSX1dSSVRFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUF9JTkZPX0FUVFJJQlVURSBDT01QX0lORk9fQ09NUFNJWkUgQ09NUF9JTkZPX0RBVEUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QX0lORk9fSU5WQUxJREFURVBBU1NXT1JEIENPTVBfSU5GT19PUklHU0laRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBfSU5GT19TRVRQQVNTV09SRCBDT01QX0lORk9fVElNRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBfSU5GT19WRVJTSU9OTFMgQ09NUF9JTkZPX1ZFUlNJT05NUyBDT01QX05PUk1BTAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBfVVBEQVRFX0RBVEUgQ09NUF9VUERBVEVfREFURV9ORVdFUgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBfVVBEQVRFX1NBTUUgQ09NUF9VUERBVEVfVkVSU0lPTiBDT01QQUNUCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUEFSRV9EQVRFIENPTVBBUkVfU0laRSBDT01QQVJFX1ZFUlNJT04KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfRklFTERfQ0RST01fRk9MREVSCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX0ZJRUxEX0RFU0NSSVBUSU9OIENPTVBPTkVOVF9GSUVMRF9ERVNUSU5BVElPTgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBPTkVOVF9GSUVMRF9ESVNQTEFZTkFNRSBDT01QT05FTlRfRklFTERfRklMRU5FRUQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfRklFTERfRlRQTE9DQVRJT04KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfRklFTERfSFRUUExPQ0FUSU9OIENPTVBPTkVOVF9GSUVMRF9NSVNDCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX0ZJRUxEX09WRVJXUklURSBDT01QT05FTlRfRklFTERfUEFTU1dPUkQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfRklFTERfU0VMRUNURUQgQ09NUE9ORU5UX0ZJRUxEX1NJWkUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfRklFTERfU1RBVFVTIENPTVBPTkVOVF9GSUVMRF9WSVNJQkxFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX0ZJTEVJTkZPX0NPTVBSRVNTRUQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfRklMRUlORk9fQ09NUFJFU1NFTkdJTkUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfRklMRUlORk9fTEFOR1VBR0VDT01QT05FTlRfRklMRUlORk9fT1MKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfRklMRUlORk9fUE9URU5USUFMTFlMT0NLRUQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfRklMRUlORk9fU0VMRlJFR0lTVEVSSU5HCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX0ZJTEVJTkZPX1NIQVJFRCBDT01QT05FTlRfSU5GT19BVFRSSUJVVEUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfSU5GT19DT01QU0laRSBDT01QT05FTlRfSU5GT19EQVRFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX0lORk9fREFURV9FWF9FWCBDT01QT05FTlRfSU5GT19MQU5HVUFHRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBPTkVOVF9JTkZPX09SSUdTSVpFIENPTVBPTkVOVF9JTkZPX09TCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX0lORk9fVElNRSBDT01QT05FTlRfSU5GT19WRVJTSU9OTFMKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfSU5GT19WRVJTSU9OTVMgQ09NUE9ORU5UX0lORk9fVkVSU0lPTlNUUgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBPTkVOVF9WQUxVRV9BTFdBWVNPVkVSV1JJVEUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfVkFMVUVfQ1JJVElDQUwKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfVkFMVUVfSElHSExZUkVDT01NRU5ERUQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfRklMRUlORk9fTEFOR1VBR0UgQ09NUE9ORU5UX0ZJTEVJTkZPX09TCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX1ZBTFVFX05FVkVST1ZFUldSSVRFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX1ZBTFVFX05FV0VSREFURSBDT01QT05FTlRfVkFMVUVfTkVXRVJWRVJTSU9OCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX1ZBTFVFX09MREVSREFURSBDT01QT05FTlRfVkFMVUVfT0xERVJWRVJTSU9OCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX1ZBTFVFX1NBTUVPUk5FV0RBVEUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfVkFMVUVfU0FNRU9STkVXRVJWRVJTSU9OCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX1ZBTFVFX1NUQU5EQVJEIENPTVBPTkVOVF9WSUVXX0NIQU5HRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBPTkVOVF9JTkZPX0RBVEVfRVggQ09NUE9ORU5UX1ZJRVdfQ0hJTERWSUVXCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX1ZJRVdfQ09NUE9ORU5UIENPTVBPTkVOVF9WSUVXX0RFU0NSSVBUSU9OCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09NUE9ORU5UX1ZJRVdfTUVESUEgQ09NUE9ORU5UX1ZJRVdfUEFSRU5UVklFVworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPTVBPTkVOVF9WSUVXX1NJWkVBVkFJTCBDT01QT05FTlRfVklFV19TSVpFVE9UQUwKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QT05FTlRfVklFV19UQVJHRVRMT0NBVElPTiBDT01QUkVTU0hJR0ggQ09NUFJFU1NMT1cKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBDT01QUkVTU01FRCBDT01QUkVTU05PTkUgQ09OVElHVU9VUyBDT05USU5VRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPUFlfRVJSX0NSRUFURURJUiBDT1BZX0VSUl9OT0RJU0tTUEFDRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IENPUFlfRVJSX09QRU5JTlBVVCBDT1BZX0VSUl9PUEVOT1VUUFVUCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09QWV9FUlJfVEFSR0VUUkVBRE9OTFkgQ09QWV9FUlJfTUVNT1JZCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgQ09SRUNPTVBPTkVOVEhBTkRMSU5HIENQVSBDVVNUT00gREFUQV9DT01QT05FTlQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBEQVRBX0xJU1QgREFUQV9OVU1CRVIgREFUQV9TVFJJTkcgREFURSBERUZBVUxUCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgREVGV0lORE9XTU9ERSBERUxFVEVfRU9GIERJQUxPRyBESUFMT0dDQUNIRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IERJQUxPR1RISU5GT05UIERJUl9XUklURUFCTEUgRElSRUNUT1JZIERJU0FCTEUgRElTSworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IERJU0tfRlJFRVNQQUNFIERJU0tfVE9UQUxTUEFDRSBESVNLSUQgRExHX0FTS19PUFRJT05TCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRExHX0FTS19QQVRIIERMR19BU0tfVEVYVCBETEdfQVNLX1lFU05PIERMR19DQU5DRUwKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBETEdfQ0RJUiBETEdfQ0RJUl9NU0cgRExHX0NFTlRFUkVEIERMR19DTE9TRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IERMR19ESVJfRElSRUNUT1JZIERMR19ESVJfRklMRSBETEdfRU5URVJfRElTSyBETEdfRVJSCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRExHX0VSUl9BTFJFQURZX0VYSVNUUyBETEdfRVJSX0VORERMRyBETEdfSU5GT19BTFRJTUFHRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IERMR19JTkZPX0NIRUNLTUVUSE9EIERMR19JTkZPX0NIRUNLU0VMRUNUSU9OCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRExHX0lORk9fRU5BQkxFSU1BR0UgRExHX0lORk9fS1VOSVRTCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRExHX0lORk9fVVNFREVDSU1BTCBETEdfSU5JVCBETEdfTVNHX0FMTAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IERMR19NU0dfSU5GT1JNQVRJT04gRExHX01TR19OT1RfSEFORCBETEdfTVNHX1NFVkVSRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IERMR19NU0dfU1RBTkRBUkQgRExHX01TR19XQVJOSU5HIERMR19PSyBETEdfU1RBVFVTCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRExHX1VTRVJfQ0FQVElPTiBEUklWRSBEUklWRU9QRU4gRExHX0RJUl9EUklWRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEVESVRCT1hfQ0hBTkdFIEVGRl9CT1hTVFJJUEUgRUZGX0ZBREUgRUZGX0hPUlpSRVZFQUwKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBFRkZfSE9SWlNUUklQRSBFRkZfTk9ORSBFRkZfUkVWRUFMIEVGRl9WRVJUU1RSSVBFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRU5BQkxFIEVORF9PRl9GSUxFIEVORF9PRl9MSVNUIEVOSEFOQ0VEIEVOVEVSRElTSworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEVOVEVSRElTS19FUlJNU0cgRU5URVJESVNLQkVFUCBFTlZTUEFDRSBFUVVBTFMKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBFUlJfQkFEUEFUSCBFUlJfQkFEVEFHRklMRSBFUlJfQk9YX0JBRFBBVEgKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBFUlJfQk9YX0JBRFRBR0ZJTEUgRVJSX0JPWF9ESVNLSUQgRVJSX0JPWF9EUklWRU9QRU4KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBFUlJfQk9YX0VYSVQgRVJSX0JPWF9IRUxQIEVSUl9CT1hfTk9TUEFDRSBFUlJfQk9YX1BBVVNFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRVJSX0JPWF9SRUFET05MWSBFUlJfRElTS0lEIEVSUl9EUklWRU9QRU4KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBFWENMVURFX1NVQkRJUiBFWENMVVNJVkUgRVhJU1RTIEVYSVQgRVhURU5ERURNRU1PUlkKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBFWFRFTlNJT05fT05MWSBFUlJPUkZJTEVOQU1FIEZBREVfSU4gRkFERV9PVVQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBGQUlMSUZFWElTVFMgRkFMU0UgRkRSSVZFX05VTSBGRUVEQkFDSyBGRUVEQkFDS19GVUxMCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRkVFREJBQ0tfT1BFUkFUSU9OIEZFRURCQUNLX1NQQUNFIEZJTEVfQVRUUl9BUkNISVZFRAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEZJTEVfQVRUUl9ESVJFQ1RPUlkgRklMRV9BVFRSX0hJRERFTiBGSUxFX0FUVFJfTk9STUFMCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRklMRV9BVFRSX1JFQURPTkxZIEZJTEVfQVRUUl9TWVNURU0gRklMRV9BVFRSSUJVVEUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBGSUxFX0JJTl9DVVIgRklMRV9CSU5fRU5EIEZJTEVfQklOX1NUQVJUIEZJTEVfREFURQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEZJTEVfRVhJU1RTIEZJTEVfSU5TVEFMTEVEIEZJTEVfSU5WQUxJRCBGSUxFX0lTX0xPQ0tFRAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEZJTEVfTElORV9MRU5HVEggRklMRV9MT0NLRUQgRklMRV9NT0RFX0FQUEVORAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEZJTEVfTU9ERV9CSU5BUlkgRklMRV9NT0RFX0JJTkFSWVJFQURPTkxZCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRklMRV9NT0RFX05PUk1BTCBGSUxFX05PX1ZFUlNJT04gRklMRV9OT1RfRk9VTkQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBGSUxFX1JEX09OTFkgRklMRV9TSVpFIEZJTEVfU1JDX0VRVUFMIEZJTEVfU1JDX09MRAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEZJTEVfVElNRSBGSUxFX1dSSVRFQUJMRSBGSUxFTkFNRSBGSUxFTkFNRV9PTkxZCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRklOSVNIQlVUVE9OIEZJWEVEX0RSSVZFIEZPTlRfVElUTEUgRlJFRUVOVlNQQUNFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRlNfQ1JFQVRFRElSIEZTX0RJU0tPTkVSRVFVSVJFRCBGU19ET05FIEZTX0ZJTEVOT1RJTkxJQgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEZTX0dFTkVSUk9SIEZTX0lOQ09SUkVDVERJU0sgRlNfTEFVTkNIUFJPQ0VTUworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEZTX09QRVJST1IgRlNfT1VUT0ZTUEFDRSBGU19QQUNLQUdJTkcgRlNfUkVTRVRSRVFVSVJFRAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEZTX1RBUkdFVFJFQURPTkxZIEZTX1RPTkVYVERJU0sgRlVMTCBGVUxMU0NSRUVOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgRlVMTFNDUkVFTlNJWkUgRlVMTFdJTkRPV01PREUgRk9MREVSX0RFU0tUT1AKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBGT0xERVJfUFJPR1JBTVMgRk9MREVSX1NUQVJUTUVOVSBGT0xERVJfU1RBUlRVUAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IEdSRUFURVJfVEhBTiBHUkVFTiBIRUxQIEhLRVlfQ0xBU1NFU19ST09UCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSEtFWV9DVVJSRU5UX0NPTkZJRyBIS0VZX0NVUlJFTlRfVVNFUiBIS0VZX0RZTl9EQVRBCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSEtFWV9MT0NBTF9NQUNISU5FIEhLRVlfUEVSRk9STUFOQ0VfREFUQSBIS0VZX1VTRVJTCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSE9VUkdMQVNTIEhXTkRfREVTS1RPUCBIV05EX0lOU1RBTEwgSUdOT1JFX1JFQURPTkxZCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSU5DTFVERV9TVUJESVIgSU5EVkZJTEVTVEFUVVMgSU5GTyBJTkZPX0RFU0NSSVBUSU9OCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSU5GT19JTUFHRSBJTkZPX01JU0MgSU5GT19TSVpFIElORk9fU1VCQ09NUE9ORU5UCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSU5GT19WSVNJQkxFIElORk9STUFUSU9OIElOVkFMSURfTElTVCBJU18xODYgSVNfMjg2CitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNfMzg2IElTXzQ4NiBJU184NTE0QSBJU184NiBJU19BTFBIQSBJU19DRFJPTSBJU19DR0EKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU19ET1MgSVNfRUdBIElTX0ZJWEVEIElTX0ZPTERFUiBJU19JVEVNIElTTEFOR19BTEwKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfQVJBQklDIElTTEFOR19BUkFCSUNfU0FVRElBUkFCSUEKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfQVJBQklDX0lSQVEgSVNMQU5HX0FSQUJJQ19FR1lQVAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19BUkFCSUNfTElCWUEgSVNMQU5HX0FSQUJJQ19BTEdFUklBCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0FSQUJJQ19NT1JPQ0NPIElTTEFOR19BUkFCSUNfVFVOSVNJQQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19BUkFCSUNfT01BTiBJU0xBTkdfQVJBQklDX1lFTUVOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0FSQUJJQ19TWVJJQSBJU0xBTkdfQVJBQklDX0pPUkRBTgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19BUkFCSUNfTEVCQU5PTiBJU0xBTkdfQVJBQklDX0tVV0FJVAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19BUkFCSUNfVUFFIElTTEFOR19BUkFCSUNfQkFIUkFJTgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19BUkFCSUNfUUFUQVIgSVNMQU5HX0FGUklLQUFOUworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19BRlJJS0FBTlNfU1RBTkRBUkQgSVNMQU5HX0FMQkFOSUFOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0VOR0xJU0hfVFJJTklEQUQgSVNMQU5HX0FMQkFOSUFOX1NUQU5EQVJECitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0JBU1FVRSBJU0xBTkdfQkFTUVVFX1NUQU5EQVJEIElTTEFOR19CVUxHQVJJQU4KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfQlVMR0FSSUFOX1NUQU5EQVJEIElTTEFOR19CRUxBUlVTSUFOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0JFTEFSVVNJQU5fU1RBTkRBUkQgSVNMQU5HX0NBVEFMQU4KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfQ0FUQUxBTl9TVEFOREFSRCBJU0xBTkdfQ0hJTkVTRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19DSElORVNFX1RBSVdBTiBJU0xBTkdfQ0hJTkVTRV9QUkMKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfU1BBTklTSF9QVUVSVE9SSUNPIElTTEFOR19DSElORVNFX0hPTkdLT05HCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0NISU5FU0VfU0lOR0FQT1JFIElTTEFOR19DUk9BVElBTgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19DUk9BVElBTl9TVEFOREFSRCBJU0xBTkdfQ1pFQ0gKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfQ1pFQ0hfU1RBTkRBUkQgSVNMQU5HX0RBTklTSAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19EQU5JU0hfU1RBTkRBUkQgSVNMQU5HX0RVVENICitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0RVVENIX1NUQU5EQVJEIElTTEFOR19EVVRDSF9CRUxHSUFOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0VOR0xJU0ggSVNMQU5HX0VOR0xJU0hfQkVMSVpFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0VOR0xJU0hfVU5JVEVEU1RBVEVTCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0VOR0xJU0hfVU5JVEVES0lOR0RPTSBJU0xBTkdfRU5HTElTSF9BVVNUUkFMSUFOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0VOR0xJU0hfQ0FOQURJQU4gSVNMQU5HX0VOR0xJU0hfTkVXWkVBTEFORAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19FTkdMSVNIX0lSRUxBTkQgSVNMQU5HX0VOR0xJU0hfU09VVEhBRlJJQ0EKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfRU5HTElTSF9KQU1BSUNBIElTTEFOR19FTkdMSVNIX0NBUklCQkVBTgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19FU1RPTklBTiBJU0xBTkdfRVNUT05JQU5fU1RBTkRBUkQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfRkFFUk9FU0UgSVNMQU5HX0ZBRVJPRVNFX1NUQU5EQVJEIElTTEFOR19GQVJTSQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19GSU5OSVNIIElTTEFOR19GSU5OSVNIX1NUQU5EQVJEIElTTEFOR19GUkVOQ0gKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfRlJFTkNIX1NUQU5EQVJEIElTTEFOR19GUkVOQ0hfQkVMR0lBTgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19GUkVOQ0hfQ0FOQURJQU4gSVNMQU5HX0ZSRU5DSF9TV0lTUworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19GUkVOQ0hfTFVYRU1CT1VSRyBJU0xBTkdfRkFSU0lfU1RBTkRBUkQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfR0VSTUFOIElTTEFOR19HRVJNQU5fU1RBTkRBUkQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfR0VSTUFOX1NXSVNTIElTTEFOR19HRVJNQU5fQVVTVFJJQU4KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfR0VSTUFOX0xVWEVNQk9VUkcgSVNMQU5HX0dFUk1BTl9MSUVDSFRFTlNURUlOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0dSRUVLIElTTEFOR19HUkVFS19TVEFOREFSRCBJU0xBTkdfSEVCUkVXCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0hFQlJFV19TVEFOREFSRCBJU0xBTkdfSFVOR0FSSUFOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0hVTkdBUklBTl9TVEFOREFSRCBJU0xBTkdfSUNFTEFORElDCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0lDRUxBTkRJQ19TVEFOREFSRCBJU0xBTkdfSU5ET05FU0lBTgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19JTkRPTkVTSUFOX1NUQU5EQVJEIElTTEFOR19JVEFMSUFOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0lUQUxJQU5fU1RBTkRBUkQgSVNMQU5HX0lUQUxJQU5fU1dJU1MKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfSkFQQU5FU0UgSVNMQU5HX0pBUEFORVNFX1NUQU5EQVJEIElTTEFOR19LT1JFQU4KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfS09SRUFOX1NUQU5EQVJEICBJU0xBTkdfS09SRUFOX0pPSEFCCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX0xBVFZJQU4gSVNMQU5HX0xBVFZJQU5fU1RBTkRBUkQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfTElUSFVBTklBTiBJU0xBTkdfTElUSFVBTklBTl9TVEFOREFSRAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19OT1JXRUdJQU4gSVNMQU5HX05PUldFR0lBTl9CT0tNQUwKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfTk9SV0VHSUFOX05ZTk9SU0sgSVNMQU5HX1BPTElTSAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19QT0xJU0hfU1RBTkRBUkQgSVNMQU5HX1BPUlRVR1VFU0UKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU4gSVNMQU5HX1BPUlRVR1VFU0VfU1RBTkRBUkQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfUk9NQU5JQU4gSVNMQU5HX1JPTUFOSUFOX1NUQU5EQVJEIElTTEFOR19SVVNTSUFOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX1JVU1NJQU5fU1RBTkRBUkQgSVNMQU5HX1NMT1ZBSworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19TTE9WQUtfU1RBTkRBUkQgSVNMQU5HX1NMT1ZFTklBTgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19TTE9WRU5JQU5fU1RBTkRBUkQgSVNMQU5HX1NFUkJJQU4KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfU0VSQklBTl9MQVRJTiBJU0xBTkdfU0VSQklBTl9DWVJJTExJQworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19TUEFOSVNIIElTTEFOR19TUEFOSVNIX0FSR0VOVElOQQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19TUEFOSVNIX0JPTElWSUEgSVNMQU5HX1NQQU5JU0hfQ0hJTEUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfU1BBTklTSF9DT0xPTUJJQSBJU0xBTkdfU1BBTklTSF9DT1NUQVJJQ0EKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfU1BBTklTSF9ET01JTklDQU5SRVBVQkxJQyBJU0xBTkdfU1BBTklTSF9FQ1VBRE9SCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX1NQQU5JU0hfRUxTQUxWQURPUiBJU0xBTkdfU1BBTklTSF9HVUFURU1BTEEKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfU1BBTklTSF9IT05EVVJBUyBJU0xBTkdfU1BBTklTSF9NRVhJQ0FOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX1RIQUlfU1RBTkRBUkQgSVNMQU5HX1NQQU5JU0hfTU9ERVJOU09SVAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19TUEFOSVNIX05JQ0FSQUdVQSBJU0xBTkdfU1BBTklTSF9QQU5BTUEKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfU1BBTklTSF9QQVJBR1VBWSBJU0xBTkdfU1BBTklTSF9QRVJVCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSUlTTEFOR19TUEFOSVNIX1BVRVJUT1JJQ08KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfU1BBTklTSF9UUkFESVRJT05BTFNPUlQgSVNMQU5HX1NQQU5JU0hfVkVORVpVRUxBCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX1NQQU5JU0hfVVJVR1VBWSBJU0xBTkdfU1dFRElTSAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19TV0VESVNIX0ZJTkxBTkQgSVNMQU5HX1NXRURJU0hfU1RBTkRBUkQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfVEhBSSBJU0xBTkdfVEhBX1NUQU5EQVJESSBJU0xBTkdfVFVSS0lTSAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTTEFOR19UVVJLSVNIX1NUQU5EQVJEIElTTEFOR19VS1JBSU5JQU4KK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU0xBTkdfVUtSQUlOSUFOX1NUQU5EQVJEIElTTEFOR19WSUVUTkFNRVNFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNMQU5HX1ZJRVROQU1FU0VfU1RBTkRBUkQgSVNfTUlQUyBJU19NT05PIElTX09TMgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTT1NMX0FMTCBJU09TTF9XSU4zMSBJU09TTF9XSU45NSBJU09TTF9OVDM1MQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTT1NMX05UMzUxX0FMUEhBIElTT1NMX05UMzUxX01JUFMgSVNPU0xfTlQzNTFfUFBDCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgSVNPU0xfTlQ0MCBJU09TTF9OVDQwX0FMUEhBIElTT1NMX05UNDBfTUlQUworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTT1NMX05UNDBfUFBDIElTX1BFTlRJVU0gSVNfUE9XRVJQQyBJU19SQU1EUklWRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTX1JFTU9URSBJU19SRU1PVkFCTEUgSVNfU1ZHQSBJU19VTktOT1dOIElTX1VWR0EKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU19WQUxJRF9QQVRIIElTX1ZHQSBJU19XSU4zMlMgSVNfV0lORE9XUyBJU19XSU5ET1dTOTUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBJU19XSU5ET1dTTlQgSVNfV0lOT1MyIElTX1hWR0EgSVNUWVBFIElORk9GSUxFTkFNRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IElTUkVTIElTVVNFUiBJU1ZFUlNJT04gTEFOR1VBR0UgTEFOR1VBR0VfRFJWIExFU1NfVEhBTgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IExJTkVfTlVNQkVSIExJU1RCT1hfRU5URVIgTElTVEJPWF9TRUxFQ1QgTElTVEZJUlNUCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgTElTVExBU1QgTElTVE5FWFQgTElTVFBSRVYgTE9DS0VERklMRSBMT0dHSU5HCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgTE9XRVJfTEVGVCBMT1dFUl9SSUdIVCBMSVNUX05VTEwgTUFHRU5UQSBNQUlOQ0FQVElPTgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IE1BVEhfQ09QUk9DRVNTT1IgTUFYX1NUUklORyBNRU5VIE1FVEFGSUxFIE1NRURJQV9BVkkKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBNTUVESUFfTUlESSBNTUVESUFfUExBWUFTWU5DSCBNTUVESUFfUExBWUNPTlRJTlVPVVMKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBNTUVESUFfUExBWVNZTkNIIE1NRURJQV9TVE9QIE1NRURJQV9XQVZFIE1PVVNFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgTU9VU0VfRFJWIE1FRElBIE1PREUgTkVUV09SSyBORVRXT1JLX0RSViBORVhUCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgTkVYVEJVVFRPTiBOTyBOT19TVUJESVIgTk9fV1JJVEVfQUNDRVNTIE5PTkNPTlRJR1VPVVMKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBOT05FWENMVVNJVkUgTk9STUFMIE5PUk1BTE1PREUgTk9TRVQgTk9URVhJU1RTIE5PVFJFU0VUCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgTk9XQUlUIE5VTEwgTlVNQkVSTElTVCBPRkYgT0sgT04gT05MWURJUiBPUyBPU01BSk9SCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgT1NNSU5PUiBPVEhFUl9GQUlMVVJFIE9VVF9PRl9ESVNLX1NQQUNFIFBBUkFMTEVMCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgUEFSVElBTCBQQVRIIFBBVEhfRVhJU1RTIFBBVVNFIFBFUlNPTkFMIFBST0ZTVFJJTkcKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBQUk9HTUFOIFBST0dSQU1GSUxFUyBSQU1fRFJJVkUgUkVBTCBSRUNPUkRNT0RFIFJFRAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFJFR0RCX0FQUFBBVEggUkVHREJfQVBQUEFUSF9ERUZBVUxUIFJFR0RCX0JJTkFSWQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFJFR0RCX0VSUl9DT05ORUNUSU9ORVhJU1RTIFJFR0RCX0VSUl9DT1JSVVBURURSRUdJU1RSWQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFJFR0RCX0VSUl9GSUxFQ0xPU0UgUkVHREJfRVJSX0ZJTEVOT1RGT1VORAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFJFR0RCX0VSUl9GSUxFT1BFTiBSRUdEQl9FUlJfRklMRVJFQUQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBSRUdEQl9FUlJfSU5JVElBTElaQVRJT04gUkVHREJfRVJSX0lOVkFMSURGT1JNQVQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBSRUdEQl9FUlJfSU5WQUxJREhBTkRMRSBSRUdEQl9FUlJfSU5WQUxJRE5BTUUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBSRUdEQl9FUlJfSU5WQUxJRFBMQVRGT1JNIFJFR0RCX0VSUl9PVVRPRk1FTU9SWQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFJFR0RCX0VSUl9SRUdJU1RSWSBSRUdEQl9LRVlTIFJFR0RCX05BTUVTIFJFR0RCX05VTUJFUgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFJFR0RCX1NUUklORyBSRUdEQl9TVFJJTkdfRVhQQU5EIFJFR0RCX1NUUklOR19NVUxUSQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFJFR0RCX1VOSU5TVEFMTF9OQU1FIFJFR0tFWV9DTEFTU0VTX1JPT1QKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBSRUdLRVlfQ1VSUkVOVF9VU0VSIFJFR0tFWV9MT0NBTF9NQUNISU5FIFJFR0tFWV9VU0VSUworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFJFTU9URV9EUklWRSBSRU1PVkUgUkVNT1ZFQUJMRV9EUklWRSBSRVBMQUNFCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgUkVQTEFDRV9JVEVNIFJFU0VUIFJFU1RBUlQgUk9PVCBST1RBVEUgUlVOX01BWElNSVpFRAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFJVTl9NSU5JTUlaRUQgUlVOX1NFUEFSQVRFTUVNT1JZIFNFTEVDVEZPTERFUgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFNFTEZSRUdJU1RFUiBTRUxGUkVHSVNURVJCQVRDSCBTRUxGUkVHSVNUUkFUSU9OUFJPQ0VTUworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFNFUklBTCBTRVQgU0VUVVBUWVBFIFNFVFVQVFlQRV9JTkZPX0RFU0NSSVBUSU9OCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgU0VUVVBUWVBFX0lORk9fRElTUExBWU5BTUUgU0VWRVJFIFNIQVJFIFNIQVJFREZJTEUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBTSEVMTF9PQkpFQ1RfRk9MREVSIFNJTEVOVE1PREUgU1BMSVRDT01QUkVTUyBTUExJVENPUFkKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBTUkNUQVJHRVRESVIgU1RBTkRBUkQgU1RBVFVTIFNUQVRVUzk1IFNUQVRVU0JBUgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFNUQVRVU0RMRyBTVEFUVVNFWCBTVEFUVVNPTEQgU1RSSU5HTElTVCBTVFlMRV9CT0xECitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgU1RZTEVfSVRBTElDIFNUWUxFX05PUk1BTCBTVFlMRV9TSEFET1cgU1RZTEVfVU5ERVJMSU5FCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgU1dfSElERSBTV19NQVhJTUlaRSBTV19NSU5JTUlaRSBTV19OT1JNQUwgU1dfUkVTVE9SRQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFNXX1NIT1cgU1dfU0hPV01BWElNSVpFRCBTV19TSE9XTUlOSU1JWkVECitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgU1dfU0hPV01JTk5PQUNUSVZFIFNXX1NIT1dOQSBTV19TSE9XTk9BQ1RJVkFURQorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFNXX1NIT1dOT1JNQUwgU1lTX0JPT1RNQUNISU5FIFNZU19CT09UV0lOCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgU1lTX0JPT1RXSU5fSU5TVEFMTCBTWVNfUkVTVEFSVCBTWVNfU0hVVERPV04gU1lTX1RPRE9TCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgU0VMRUNURURfTEFOR1VBR0UgU0hFTExfT0JKRUNUX0xBTkdVQUdFIFNSQ0RJUiBTUkNESVNLCitzeW4ga2V5d29yZCBpc2hkQ29uc3RhbnQgU1VQUE9SVERJUiBURVhUIFRJTEVEIFRJTUUgVFJVRSBUWVBJQ0FMIFRBUkdFVERJUgorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFRBUkdFVERJU0sgVVBQRVJfTEVGVCBVUFBFUl9SSUdIVCBVU0VSX0FETUlOSVNUUkFUT1IKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBVTklOU1QgVkFMSURfUEFUSCBWQVJJQUJMRV9MRUZUIFZBUklBQkxFX1VOREVGSU5FRAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFZFUl9ETExfTk9UX0ZPVU5EIFZFUl9VUERBVEVfQUxXQVlTIFZFUl9VUERBVEVfQ09ORAorc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFZFUlNJT04gVklERU8gVk9MVU1FTEFCRUwgV0FJVCBXQVJOSU5HIFdFTENPTUUgV0hJVEUKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBXSU4zMlNJTlNUQUxMRUQgV0lOMzJTTUFKT1IgV0lOMzJTTUlOT1IgV0lORE9XU19TSEFSRUQKK3N5biBrZXl3b3JkIGlzaGRDb25zdGFudCBXSU5NQUpPUiBXSU5NSU5PUiBXSU5ESVIgV0lORElTSyBXSU5TWVNESVIgV0lOU1lTRElTSworc3luIGtleXdvcmQgaXNoZENvbnN0YW50IFhDT1BZX0RBVEVUSU1FIFlFTExPVyBZRVMKKworc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIEFza0Rlc3RQYXRoIEFza09wdGlvbnMgQXNrUGF0aCBBc2tUZXh0IEFza1llc05vCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gQXBwQ29tbWFuZCBBZGRQcm9mU3RyaW5nIEFkZEZvbGRlckljb24gQmF0Y2hBZGQKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBCYXRjaERlbGV0ZUV4IEJhdGNoRmlsZUxvYWQgQmF0Y2hGaWxlU2F2ZSBCYXRjaEZpbmQKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBCYXRjaEdldEZpbGVOYW1lIEJhdGNoTW92ZUV4IEJhdGNoU2V0RmlsZU5hbWUKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBDb21wb25lbnREaWFsb2cgQ29tcG9uZW50QWRkSXRlbQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIENvbXBvbmVudENvbXBhcmVTaXplUmVxdWlyZWQgQ29tcG9uZW50RGlhbG9nCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gQ29tcG9uZW50RXJyb3IgQ29tcG9uZW50RmlsZUVudW0gQ29tcG9uZW50RmlsZUluZm8KK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBDb21wb25lbnRGaWx0ZXJMYW5ndWFnZSBDb21wb25lbnRGaWx0ZXJPUworc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIENvbXBvbmVudEdldERhdGEgQ29tcG9uZW50R2V0SXRlbVNpemUKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBDb21wb25lbnRJbml0aWFsaXplIENvbXBvbmVudElzSXRlbVNlbGVjdGVkCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gQ29tcG9uZW50TGlzdEl0ZW1zIENvbXBvbmVudE1vdmVEYXRhCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gQ29tcG9uZW50U2VsZWN0SXRlbSBDb21wb25lbnRTZXREYXRhIENvbXBvbmVudFNldFRhcmdldAorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIENvbXBvbmVudFNldHVwVHlwZUVudW0gQ29tcG9uZW50U2V0dXBUeXBlR2V0RGF0YQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIENvbXBvbmVudFNldHVwVHlwZVNldCBDb21wb25lbnRUb3RhbFNpemUKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBDb21wb25lbnRWYWxpZGF0ZSBDb25maWdBZGQgQ29uZmlnRGVsZXRlIENvbmZpZ0ZpbGVMb2FkCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gQ29uZmlnRmlsZVNhdmUgQ29uZmlnRmluZCBDb25maWdHZXRGaWxlTmFtZQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIENvbmZpZ0dldEludCBDb25maWdNb3ZlIENvbmZpZ1NldEZpbGVOYW1lIENvbmZpZ1NldEludAorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIENtZEdldEh3bmREbGcgQ3RybENsZWFyIEN0cmxEaXIgQ3RybEdldEN1clNlbAorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIEN0cmxHZXRNTEVUZXh0IEN0cmxHZXRNdWx0Q3VyU2VsIEN0cmxHZXRTdGF0ZQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIEN0cmxHZXRTdWJDb21tYW5kIEN0cmxHZXRUZXh0IEN0cmxQR3JvdXBzCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gQ3RybFNlbGVjdFRleHQgQ3RybFNldEN1clNlbCBDdHJsU2V0Rm9udCBDdHJsU2V0TGlzdAorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIEN0cmxTZXRNTEVUZXh0IEN0cmxTZXRNdWx0Q3VyU2VsIEN0cmxTZXRTdGF0ZQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIEN0cmxTZXRUZXh0IENhbGxETExGeCBDaGFuZ2VEaXJlY3RvcnkgQ2xvc2VGaWxlCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gQ29weUZpbGUgQ3JlYXRlRGlyIENyZWF0ZUZpbGUgQ3JlYXRlUmVnaXN0cnlTZXQKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBDb21taXRTaGFyZWRGaWxlcyBDcmVhdGVQcm9ncmFtRm9sZGVyCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gQ3JlYXRlU2hlbGxPYmplY3RzIENvcHlCeXRlcyBEZWZpbmVEaWFsb2cgRGVsYXkKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBEZWxldGVEaXIgRGVsZXRlRmlsZSBEbyBEb0luc3RhbGwgRGVpbnN0YWxsU2V0UmVmZXJlbmNlCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gRGVpbnN0YWxsU3RhcnQgRGlhbG9nU2V0SW5mbyBEZWxldGVGb2xkZXJJY29uCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gRGVsZXRlUHJvZ3JhbUZvbGRlciBEaXNhYmxlIEV6QmF0Y2hBZGRQYXRoCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gRXpCYXRjaEFkZFN0cmluZyBFeEJhdGNoUmVwbGFjZSBFbnRlckRpc2sKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBFekNvbmZpZ0FkZERyaXZlciBFekNvbmZpZ0FkZFN0cmluZyBFekNvbmZpZ0dldFZhbHVlCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gRXpDb25maWdTZXRWYWx1ZSBFbmREaWFsb2cgRXpEZWZpbmVEaWFsb2cgRXhpc3RzRGlyCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gRXhpc3RzRGlzayBFeGl0UHJvZ01hbiBFbmFibGUgRXpCYXRjaFJlcGxhY2UKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBGaWxlQ29tcGFyZSBGaWxlRGVsZXRlTGluZSBGaWxlR3JlcCBGaWxlSW5zZXJ0TGluZQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIEZpbmRBbGxEaXJzIEZpbmRBbGxGaWxlcyBGaW5kRmlsZSBGaW5kV2luZG93CitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gR2V0RmlsZUluZm8gR2V0TGluZSBHZXRGb250IEdldERpc2tTcGFjZSBHZXRFbnZWYXIKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBHZXRFeHRlbnRzIEdldE1lbUZyZWUgR2V0TW9kZSBHZXRTeXN0ZW1JbmZvCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gR2V0VmFsaWREcml2ZXNMaXN0IEdldFdpbmRvd0hhbmRsZSBHZXRQcm9mSW50CitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gR2V0UHJvZlN0cmluZyBHZXRGb2xkZXJOYW1lTGlzdCBHZXRHcm91cE5hbWVMaXN0CitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gR2V0SXRlbU5hbWVMaXN0IEdldERpciBHZXREaXNrIEhJV09SRCBIYW5kbGVyIElzCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gSVNDb21wYXJlU2VydmljZVBhY2sgSW5zdGFsbGF0aW9uSW5mbyBMT1dPUkQgTGF1bmNoQXBwCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gTGF1bmNoQXBwQW5kV2FpdCBMaXN0QWRkSXRlbSBMaXN0QWRkU3RyaW5nIExpc3RDb3VudAorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIExpc3RDcmVhdGUgTGlzdEN1cnJlbnRJdGVtIExpc3RDdXJyZW50U3RyaW5nCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gTGlzdERlbGV0ZUl0ZW0gTGlzdERlbGV0ZVN0cmluZyBMaXN0RGVzdHJveQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIExpc3RGaW5kSXRlbSBMaXN0RmluZFN0cmluZyBMaXN0R2V0Rmlyc3RJdGVtCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gTGlzdEdldEZpcnN0U3RyaW5nIExpc3RHZXROZXh0SXRlbSBMaXN0R2V0TmV4dFN0cmluZworc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIExpc3RSZWFkRnJvbUZpbGUgTGlzdFNldEN1cnJlbnRJdGVtCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gTGlzdFNldEN1cnJlbnRTdHJpbmcgTGlzdFNldEluZGV4IExpc3RXcml0ZVRvRmlsZQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIExvbmdQYXRoRnJvbVNob3J0UGF0aCBMb25nUGF0aFRvUXVvdGUKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBMb25nUGF0aFRvU2hvcnRQYXRoIE1lc3NhZ2VCb3ggTWVzc2FnZUJlZXAgTnVtVG9TdHIKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBPcGVuRmlsZSBPcGVuRmlsZU1vZGUgUGF0aEFkZCBQYXRoRGVsZXRlIFBhdGhGaW5kCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gUGF0aEdldCBQYXRoTW92ZSBQYXRoU2V0IFByb2dEZWZHcm91cFR5cGUgUGFyc2VQYXRoCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gUGxhY2VCaXRtYXAgUGxhY2VXaW5kb3cgUGxheU1NZWRpYSBRdWVyeVByb2dHcm91cAorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFF1ZXJ5UHJvZ0l0ZW0gUXVlcnlTaGVsbE1nciBSZWJvb3REaWFsb2cgUmVsZWFzZURpYWxvZworc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFJlYWRCeXRlcyBSZW5hbWVGaWxlIFJlcGxhY2VQcm9mU3RyaW5nIFJlbG9hZFByb2dHcm91cAorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFJlcGxhY2VGb2xkZXJJY29uIFJHQiBSZWdEQkNvbm5lY3RSZWdpc3RyeQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFJlZ0RCQ3JlYXRlS2V5RXggUmVnREJEZWxldGVLZXkgUmVnREJEZWxldGVWYWx1ZQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFJlZ0RCRGlzQ29ubmVjdFJlZ2lzdHJ5IFJlZ0RCR2V0QXBwSW5mbyBSZWdEQkdldEl0ZW0KK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBSZWdEQkdldEtleVZhbHVlRXggUmVnREJLZXlFeGlzdCBSZWdEQlF1ZXJ5S2V5CitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gUmVnREJTZXRBcHBJbmZvIFJlZ0RCU2V0RGVmYXVsdFJvb3QgUmVnREJTZXRJdGVtCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gUmVnREJTZXRLZXlWYWx1ZUV4IFNlZWtCeXRlcyBTZWxlY3REaXIgU2V0RmlsZUluZm8KK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBTZWxlY3REaXIgU2VsZWN0Rm9sZGVyIFNldHVwVHlwZSBTcHJpbnRmQm94IFNkU2V0dXBUeXBlCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gU2RTZXR1cFR5cGVFeCBTZE1ha2VOYW1lIFNpbGVudFJlYWREYXRhIFNpbGVudFdyaXRlRGF0YQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFNlbmRNZXNzYWdlIFNwcmludGYgU3lzdGVtIFNkQXNrRGVzdFBhdGggU2RBc2tPcHRpb25zCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gU2RBc2tPcHRpb25zTGlzdCBTZEJpdG1hcCBTZENvbXBvbmVudERpYWxvZworc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFNkQ29tcG9uZW50RGlhbG9nMiBTZENvbXBvbmVudERpYWxvZ0FkdiBTZENvbXBvbmVudE11bHQKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBTZENvbmZpcm1OZXdEaXIgU2RDb25maXJtUmVnaXN0cmF0aW9uIFNkRGlzcGxheVRvcGljcworc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFNkRmluaXNoIFNkRmluaXNoUmVib290IFNkSW5pdCBTZExpY2Vuc2UgU2RNYWtlTmFtZQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFNkT3B0aW9uc0J1dHRvbnMgU2RQcm9kdWN0TmFtZSBTZFJlZ2lzdGVyVXNlcgorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFNkUmVnaXN0ZXJVc2VyRXggU2RTZWxlY3RGb2xkZXIgU2RTZXR1cFR5cGUKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBTZFNldHVwVHlwZUV4IFNkU2hvd0FueURpYWxvZyBTZFNob3dEbGdFZGl0MQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFNkU2hvd0RsZ0VkaXQyIFNkU2hvd0RsZ0VkaXQzIFNkU2hvd0ZpbGVNb2RzCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gU2RTaG93SW5mb0xpc3QgU2RTaG93TXNnIFNkU3RhcnRDb3B5IFNkV2VsY29tZQorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFNlbGVjdEZvbGRlciBTaG93R3JvdXAgU2hvd1Byb2dhbUZvbGRlciBTZXRDb2xvcgorc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFNldERpYWxvZ1RpdGxlIFNldERpc3BsYXlFZmZlY3QgU2V0RXJyb3JNc2cKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBTZXRFcnJvclRpdGxlIFNldEZvbnQgU2V0U3RhdHVzV2luZG93IFNldFRpdGxlCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gU2l6ZVdpbmRvdyBTdGF0dXNVcGRhdGUgU3RyQ29tcGFyZSBTdHJGaW5kIFN0ckdldFRva2Vucworc3luIGtleXdvcmQgaXNoZEZ1bmN0aW9uIFN0ckxlbmd0aCBTdHJSZW1vdmVMYXN0U2xhc2ggU3RyU3ViIFN0clRvTG93ZXIgU3RyVG9OdW0KK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBTdHJUb1VwcGVyIFNob3dQcm9ncmFtRm9sZGVyIFVuVXNlRExMIFVzZURMTCBWYXJSZXN0b3JlCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gVmFyU2F2ZSBWZXJVcGRhdGVGaWxlIFZlckNvbXBhcmUgVmVyRmluZEZpbGVWZXJzaW9uCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gVmVyR2V0RmlsZVZlcnNpb24gVmVyU2VhcmNoQW5kVXBkYXRlRmlsZSBWZXJVcGRhdGVGaWxlCitzeW4ga2V5d29yZCBpc2hkRnVuY3Rpb24gV2VsY29tZSBXYWl0T25EaWFsb2cgV3JpdGVCeXRlcyBXcml0ZUxpbmUKK3N5biBrZXl3b3JkIGlzaGRGdW5jdGlvbiBXcml0ZVByb2ZTdHJpbmcgWENvcHlGaWxlCisKK3N5biBrZXl3b3JkIGlzaGRUb2RvIGNvbnRhaW5lZCBUT0RPCisKKyJpbnRlZ2VyIG51bWJlciwgb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdpdGhvdXQgYSBkb3QuCitzeW4gbWF0Y2ggIGlzaGROdW1iZXIJCSJcPFxkXCtcPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90CitzeW4gbWF0Y2ggIGlzaGROdW1iZXIJCSJcPFxkXCtcLlxkKlw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdAorc3luIG1hdGNoICBpc2hkTnVtYmVyCQkiXC5cZFwrXD4iCisKKyIgU3RyaW5nIGNvbnN0YW50cworc3luIHJlZ2lvbiAgaXNoZFN0cmluZwlzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisKKworc3luIHJlZ2lvbiAgaXNoZENvbW1lbnQJc3RhcnQ9Ii8vIiBlbmQ9IiQiIGNvbnRhaW5zPWlzaGRUb2RvCitzeW4gcmVnaW9uICBpc2hkQ29tbWVudAlzdGFydD0iL1wqIiAgIGVuZD0iXCovIiBjb250YWlucz1pc2hkVG9kbworCisiIFByZS1wcm9jZXNzb3IgY29tbWFuZHMKK3N5biByZWdpb24JaXNoZFByZUNvbmRpdAlzdGFydD0iXlxzKiNccypcKGlmXD5cfGlmZGVmXD5cfGlmbmRlZlw+XHxlbGlmXD5cfGVsc2VcPlx8ZW5kaWZcPlwpIiBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9aXNoZENvbW1lbnQsaXNoZFN0cmluZworaWYgIWV4aXN0cygiaXNoZF9ub19pZjAiKQorICBzeW4gcmVnaW9uCWlzaGRIYXNoSWYwCXN0YXJ0PSJeXHMqI1xzKmlmXHNcKzBcPiIgZW5kPSIuXHwkIiBjb250YWlucz1pc2hkSGFzaElmMEVuZAorICBzeW4gcmVnaW9uCWlzaGRIYXNoSWYwRW5kCWNvbnRhaW5lZCBzdGFydD0iMCIgZW5kPSJeXHMqI1xzKlwoZW5kaWZcPlx8ZWxzZVw+XHxlbGlmXD5cKSIgY29udGFpbnM9aXNoZEhhc2hJZjBTa2lwCisgIHN5biByZWdpb24JaXNoZEhhc2hJZjBTa2lwCWNvbnRhaW5lZCBzdGFydD0iXlxzKiNccypcKGlmXD5cfGlmZGVmXD5cfGlmbmRlZlw+XCkiIHNraXA9IlxcJCIgZW5kPSJeXHMqI1xzKmVuZGlmXD4iIGNvbnRhaW5zPWlzaGRIYXNoSWYwU2tpcAorZW5kaWYKK3N5biByZWdpb24JaXNoZEluY2x1ZGVkCWNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCitzeW4gbWF0Y2gJaXNoZEluY2x1ZGUJK15ccyojXHMqaW5jbHVkZVw+XHMqIisgY29udGFpbnM9aXNoZEluY2x1ZGVkCitzeW4gY2x1c3Rlcglpc2hkUHJlUHJvY0dyb3VwCWNvbnRhaW5zPWlzaGRQcmVDb25kaXQsaXNoZEluY2x1ZGVkLGlzaGRJbmNsdWRlLGlzaGREZWZpbmUsaXNoZEhhc2hJZjAsaXNoZEhhc2hJZjBFbmQsaXNoZEhhc2hJZjBTa2lwLGlzaGROdW1iZXIKK3N5biByZWdpb24JaXNoZERlZmluZQkJc3RhcnQ9Il5ccyojXHMqXChkZWZpbmVcfHVuZGVmXClcPiIgZW5kPSIkIiBjb250YWlucz1BTExCVVQsQGlzaGRQcmVQcm9jR3JvdXAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfaXNfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfaXNfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgaXNoZE51bWJlcgkgICAgTnVtYmVyCisgIEhpTGluayBpc2hkRXJyb3IJICAgIEVycm9yCisgIEhpTGluayBpc2hkU3RhdGVtZW50CSAgICBTdGF0ZW1lbnQKKyAgSGlMaW5rIGlzaGRTdHJpbmcJICAgIFN0cmluZworICBIaUxpbmsgaXNoZENvbW1lbnQJICAgIENvbW1lbnQKKyAgSGlMaW5rIGlzaGRUb2RvCSAgICBUb2RvCisgIEhpTGluayBpc2hkRnVuY3Rpb24JICAgIElkZW50aWZpZXIKKyAgSGlMaW5rIGlzaGRDb25zdGFudAkgICAgUHJlUHJvYworICBIaUxpbmsgaXNoZFR5cGUJICAgIFR5cGUKKyAgSGlMaW5rIGlzaGRJbmNsdWRlCSAgICBJbmNsdWRlCisgIEhpTGluayBpc2hkRGVmaW5lCSAgICBNYWNybworICBIaUxpbmsgaXNoZEluY2x1ZGVkCSAgICBTdHJpbmcKKyAgSGlMaW5rIGlzaGRQcmVDb25kaXQJICAgIFByZUNvbmRpdAorICBIaUxpbmsgaXNoZEhhc2hJZjBTa2lwICAgaXNoZEhhc2hJZjAKKyAgSGlMaW5rIGlzaGRIYXNoSWYwRW5kICAgIGlzaGRIYXNoSWYwCisgIEhpTGluayBpc2hkSGFzaElmMAkgICAgQ29tbWVudAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJpc2hkIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaXNzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2lzcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4OTAxYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2lzcy52aW0KQEAgLTAsMCArMSwxMjUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglJbm5vIFNldHVwIEZpbGUgKGlzcyBmaWxlKSBhbmQgTXkgSW5ub1NldHVwIGV4dGVuc2lvbgorIiBNYWludGFpbmVyOglEb21pbmlxdWUgU3TpcGhhbiAoZG9taW5pcXVlQG1nZ2VuLmNvbSkKKyIgTGFzdCBjaGFuZ2U6CTIwMDMgTWF5IDExCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBzaHV0IGNhc2Ugb2ZmCitzeW4gY2FzZSBpZ25vcmUKKworIiBTZWN0aW9uCitzeW4gcmVnaW9uIGlzc0hlYWRlcgkJc3RhcnQ9IlxbIiBlbmQ9IlxdIgorCisiIExhYmVsIGluIHRoZSBbU2V0dXBdIFNlY3Rpb24KK3N5biBtYXRjaCAgaXNzTGFiZWwJCSJeW149XVwrPSIKKworIiBVUkwKK3N5biBtYXRjaCAgaXNzVVJMCQkiaHR0cFtzXVw9OlwvXC8uKiQiCisKKyIgc3luIG1hdGNoICBpc3NOYW1lCQkiW146IF1cKzoiCitzeW4gbWF0Y2ggIGlzc05hbWUJCSJOYW1lOiIKK3N5biBtYXRjaCAgaXNzTmFtZQkJIk1pblZlcnNpb246XHxPbmx5QmVsb3dWZXJzaW9uOiIKK3N5biBtYXRjaCAgaXNzTmFtZQkJIlNvdXJjZTpcfERlc3REaXI6XHxEZXN0TmFtZTpcfENvcHlNb2RlOiIKK3N5biBtYXRjaCAgaXNzTmFtZQkJIkF0dHJpYnM6XHxGb250SW5zdGFsbDpcfEZsYWdzOiIKK3N5biBtYXRjaCAgaXNzTmFtZQkJIkZpbGVOYW1lOlx8UGFyYW1ldGVyczpcfFdvcmtpbmdEaXI6XHxDb21tZW50OiIKK3N5biBtYXRjaCAgaXNzTmFtZQkJIkljb25GaWxlbmFtZTpcfEljb25JbmRleDoiCitzeW4gbWF0Y2ggIGlzc05hbWUJCSJTZWN0aW9uOlx8S2V5Olx8U3RyaW5nOiIKK3N5biBtYXRjaCAgaXNzTmFtZQkJIlJvb3Q6XHxTdWJLZXk6XHxWYWx1ZVR5cGU6XHxWYWx1ZU5hbWU6XHxWYWx1ZURhdGE6Igorc3luIG1hdGNoICBpc3NOYW1lCQkiUnVuT25jZUlkOiIKK3N5biBtYXRjaCAgaXNzTmFtZQkJIlR5cGU6Igorc3luIG1hdGNoICBpc3NOYW1lCQkiQ29tcG9uZW50czpcfERlc2NyaXB0aW9uOlx8R3JvdXBEZXNjcmlwdGlvblx8VHlwZXM6IgorCitzeW4gbWF0Y2ggIGlzc0NvbW1lbnQJCSJeOy4qJCIKKworIiBmb2xkZXIgY29uc3RhbnQKK3N5biBtYXRjaCAgaXNzRm9sZGVyCQkie1tee10qfSIKKworIiBzdHJpbmcKK3N5biByZWdpb24gaXNzU3RyaW5nCXN0YXJ0PSsiKyAgZW5kPSsiKyBjb250YWlucz1pc3NGb2xkZXIKKworIiBbRGlyc10KK3N5biBrZXl3b3JkIGlzc0RpcnNGbGFncyBkZWxldGVhZnRlcmluc3RhbGwgdW5pbnNhbHdheXN1bmluc3RhbGwgdW5pbnNuZXZlcnVuaW5zdGFsbAorCisiIFtGaWxlc10KK3N5biBrZXl3b3JkIGlzc0ZpbGVzQ29weU1vZGUgbm9ybWFsIG9ubHlpZmRvZXNudGV4aXN0IGFsd2F5c292ZXJ3cml0ZSBhbHdheXNza2lwaWZzYW1lb3JvbGRlcgorc3luIGtleXdvcmQgaXNzRmlsZXNBdHRyaWJzIHJlYWRvbmx5IGhpZGRlbiBzeXN0ZW0KK3N5biBrZXl3b3JkIGlzc0ZpbGVzRmxhZ3MgY29tcGFyZXRpbWVzdGFtcGFsc28gY29uZmlybW92ZXJ3cml0ZSBkZWxldGVhZnRlcmluc3RhbGwKK3N5biBrZXl3b3JkIGlzc0ZpbGVzRmxhZ3MgZXh0ZXJuYWwgZm9udGlzbnR0cnVldHlwZSBpc3JlYWRtZSBvdmVyd3JpdGVyZWFkb25seQorc3luIGtleXdvcmQgaXNzRmlsZXNGbGFncyByZWdzZXJ2ZXIgcmVndHlwZWxpYiByZXN0YXJ0cmVwbGFjZQorc3luIGtleXdvcmQgaXNzRmlsZXNGbGFncyBzaGFyZWRmaWxlIHNraXBpZnNvdXJjZWRvZXNudGV4aXN0IHVuaW5zbmV2ZXJ1bmluc3RhbGwKKworIiBbSWNvbnNdCitzeW4ga2V5d29yZCBpc3NJY29uc0ZsYWdzIGNyZWF0ZW9ubHlpZmZpbGVleGlzdHMgcnVubWluaW1pemVkIHVuaW5zbmV2ZXJ1bmluc3RhbGwgdXNlYXBwcGF0aHMKKworIiBbSU5JXQorc3luIGtleXdvcmQgaXNzSU5JRmxhZ3MgY3JlYXRla2V5aWZkb2VzbnRleGlzdCB1bmluc2RlbGV0ZWVudHJ5IHVuaW5zZGVsZXRlc2VjdGlvbiB1bmluc2RlbGV0ZXNlY3Rpb25pZmVtcHR5CisKKyIgW1JlZ2lzdHJ5XQorc3luIGtleXdvcmQgaXNzUmVnUm9vdEtleSAgIEhLQ1IgSEtDVSBIS0xNIEhLVSBIS0NDCitzeW4ga2V5d29yZCBpc3NSZWdWYWx1ZVR5cGUgbm9uZSBzdHJpbmcgZXhwYW5kc3ogbXVsdGlzeiBkd29yZCBiaW5hcnkKK3N5biBrZXl3b3JkIGlzc1JlZ0ZsYWdzIGNyZWF0ZXZhbHVlaWZkb2VzbnRleGlzdCBkZWxldGVrZXkgZGVsZXRldmFsdWUgcHJlc2VydmVzdHJpbmd0eXBlCitzeW4ga2V5d29yZCBpc3NSZWdGbGFncyB1bmluc2NsZWFydmFsdWUgdW5pbnNkZWxldGVrZXkgdW5pbnNkZWxldGVrZXlpZmVtcHR5IHVuaW5zZGVsZXRldmFsdWUKKworIiBbUnVuXSBhbmQgW1VuaW5zdGFsbFJ1bl0KK3N5biBrZXl3b3JkIGlzc1J1bkZsYWdzIG5vd2FpdCBzaGVsbGV4ZWMgc2tpcGlmZG9lc250ZXhpc3QgcnVubWluaW1pemVkIHdhaXR1bnRpbGlkbGUKK3N5biBrZXl3b3JkIGlzc1J1bkZsYWdzIHBvc3RpbnN0YWxsIHVuY2hlY2tlZCBzaG93Y2hlY2tib3gKKworIiBbVHlwZXNdCitzeW4ga2V5d29yZCBpc3NUeXBlc0ZsYWdzIGlzY3VzdG9tCisKKyIgW0NvbXBvbmVudHNdCitzeW4ga2V5d29yZCBpc3NDb21wb25lbnRzRmxhZ3MgZml4ZWQgcmVzdGFydCBkaXNhYmxlbm91bmluc3RhbGx3YXJuaW5nCisKKyIgW1VuaW5zdGFsbERlbGV0ZV0gYW5kIFtJbnN0YWxsRGVsZXRlXQorc3luIGtleXdvcmQgaXNzSW5zdGFsbERlbGV0ZVR5cGUgZmlsZXMgZmlsZXNhbmRvcmRpcnMgZGlyaWZlbXB0eQorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2lzc19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9pc3Nfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICAgSGlMaW5rIGlzc0hlYWRlcglTcGVjaWFsCisgICBIaUxpbmsgaXNzQ29tbWVudAlDb21tZW50CisgICBIaUxpbmsgaXNzTGFiZWwJVHlwZQorICAgSGlMaW5rIGlzc05hbWUJVHlwZQorICAgSGlMaW5rIGlzc0ZvbGRlcglTcGVjaWFsCisgICBIaUxpbmsgaXNzU3RyaW5nCVN0cmluZworICAgSGlMaW5rIGlzc1ZhbHVlCVN0cmluZworICAgSGlMaW5rIGlzc1VSTAlJbmNsdWRlCisKKyAgIEhpTGluayBpc3NEaXJzRmxhZ3MJCUtleXdvcmQKKyAgIEhpTGluayBpc3NGaWxlc0NvcHlNb2RlCUtleXdvcmQKKyAgIEhpTGluayBpc3NGaWxlc0F0dHJpYnMJS2V5d29yZAorICAgSGlMaW5rIGlzc0ZpbGVzRmxhZ3MJCUtleXdvcmQKKyAgIEhpTGluayBpc3NJY29uc0ZsYWdzCQlLZXl3b3JkCisgICBIaUxpbmsgaXNzSU5JRmxhZ3MJCUtleXdvcmQKKyAgIEhpTGluayBpc3NSZWdSb290S2V5CQlLZXl3b3JkCisgICBIaUxpbmsgaXNzUmVnVmFsdWVUeXBlCUtleXdvcmQKKyAgIEhpTGluayBpc3NSZWdGbGFncwkJS2V5d29yZAorICAgSGlMaW5rIGlzc1J1bkZsYWdzCQlLZXl3b3JkCisgICBIaUxpbmsgaXNzVHlwZXNGbGFncwkJS2V5d29yZAorICAgSGlMaW5rIGlzc0NvbXBvbmVudHNGbGFncwlLZXl3b3JkCisgICBIaUxpbmsgaXNzSW5zdGFsbERlbGV0ZVR5cGUJS2V5d29yZAorCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImlzcyIKKworIiB2aW06dHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaXN0LnZpbSBiL3J1bnRpbWUvc3ludGF4L2lzdC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwMDA1ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2lzdC52aW0KQEAgLTAsMCArMSw3MCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU1ha2VpbmRleCBzdHlsZSBmaWxlLCAqLmlzdAorIiBNYWludGFpbmVyOglQZXRlciBNZXN6YXJvcyA8cG1lc3phcm9zQGVmZmljZS5odT4KKyIgTGFzdCBDaGFuZ2U6CU1heSA0LCAyMDAxCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgdmVyc2lvbiA+PSA2MDAKKyAgc2V0bG9jYWwgaXNrZXl3b3JkPSQsQCw0OC01NyxfCitlbHNlCisgIHNldCBpc2tleXdvcmQ9JCxALDQ4LTU3LF8KK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorc3luIGtleXdvcmQgSXN0SW5wU3BlYyAgYWN0dWFsICBhcmdfY2xvc2UgYXJnX29wZW4gZW5jYXAgICAgICAgZXNjYXBlCitzeW4ga2V5d29yZCBJc3RJbnBTcGVjICBrZXl3b3JkIGxldmVsICAgICBxdW90ZSAgICByYW5nZV9jbG9zZSByYW5nZV9vcGVuCitzeW4ga2V5d29yZCBJc3RJbnBTcGVjICBwYWdlX2NvbXBvc2l0b3IKKworc3luIGtleXdvcmQgSXN0T3V0U3BlYwlwcmVhbWJsZQkgcG9zdGFtYmxlCSAgc2V0cGFnZV9wcmVmaXggICBzZXRwYWdlX3N1ZmZpeCAgIGdyb3VwX3NraXAKK3N5biBrZXl3b3JkIElzdE91dFNwZWMJaGVhZGluZ3NfZmxhZwkgaGVhZGluZ19wcmVmaXggICBoZWFkaW5nX3N1ZmZpeAorc3luIGtleXdvcmQgSXN0T3V0U3BlYwlsZXRoZWFkX2ZsYWcJIGxldGhlYWRfcHJlZml4ICAgbGV0aGVhZF9zdWZmaXgKK3N5biBrZXl3b3JkIElzdE91dFNwZWMJc3ltaGVhZF9wb3NpdGl2ZSBzeW1oZWFkX25lZ2F0aXZlIG51bWhlYWRfcG9zaXRpdmUgbnVtaGVhZF9uZWdhdGl2ZQorc3luIGtleXdvcmQgSXN0T3V0U3BlYwlpdGVtXzAJCSBpdGVtXzEJCSAgaXRlbV8yCSAgIGl0ZW1fMDEKK3N5biBrZXl3b3JkIElzdE91dFNwZWMJaXRlbV94MQkJIGl0ZW1fMTIJICBpdGVtX3gyCitzeW4ga2V5d29yZCBJc3RPdXRTcGVjCWRlbGltXzAJCSBkZWxpbV8xCSAgZGVsaW1fMgorc3luIGtleXdvcmQgSXN0T3V0U3BlYwlkZWxpbV9uCQkgZGVsaW1fcgkgIGRlbGltX3QKK3N5biBrZXl3b3JkIElzdE91dFNwZWMJZW5jYXBfcHJlZml4CSBlbmNhcF9pbmZpeAkgIGVuY2FwX3N1ZmZpeAorc3luIGtleXdvcmQgSXN0T3V0U3BlYwlsaW5lX21heAkgaW5kZW50X3NwYWNlCSAgaW5kZW50X2xlbmd0aAorc3luIGtleXdvcmQgSXN0T3V0U3BlYwlzdWZmaXhfMnAJIHN1ZmZpeF8zcAkgIHN1ZmZpeF9tcAorCitzeW4gcmVnaW9uICBJc3RTdHJpbmcJICAgbWF0Y2hncm91cD1Jc3REb3VibGVRdW90ZSBzdGFydD0rIisgc2tpcD0rXFwiKyBlbmQ9KyIrIGNvbnRhaW5zPUlzdFNwZWNpYWwKK3N5biBtYXRjaCAgIElzdENoYXJhY3RlciAgICInLiciCitzeW4gbWF0Y2ggICBJc3ROdW1iZXIJICAgIlxkXCsiCitzeW4gbWF0Y2ggICBJc3RDb21tZW50CSAgICJeW1x0IF0qJS4qJCIJIGNvbnRhaW5zPUlzdFRvZG8KK3N5biBtYXRjaCAgIElzdFNwZWNpYWwJICAgIlxcXFxcfHtcfH1cfCNcfFxcbiIgIGNvbnRhaW5lZAorc3luIG1hdGNoICAgSXN0VG9kbwkgICAiREVCVUdcfFRPRE8iCSBjb250YWluZWQKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZHVtbXlfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfZHVtbXlfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgSXN0SW5wU3BlYwlUeXBlCisgIEhpTGluayBJc3RPdXRTcGVjCUlkZW50aWZpZXIKKyAgSGlMaW5rIElzdFN0cmluZwlTdHJpbmcKKyAgSGlMaW5rIElzdE51bWJlcglOdW1iZXIKKyAgSGlMaW5rIElzdENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgSXN0VG9kbwlUb2RvCisgIEhpTGluayBJc3RTcGVjaWFsCVNwZWNpYWwKKyAgSGlMaW5rIElzdERvdWJsZVF1b3RlCUxhYmVsCisgIEhpTGluayBJc3RDaGFyYWN0ZXIJTGFiZWwKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiaXN0IgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9qYWwudmltIGIvcnVudGltZS9zeW50YXgvamFsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGJhNjcyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvamFsLnZpbQpAQCAtMCwwICsxLDI0OSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUpBTAorIiBWZXJzaW9uOiAwLjEKKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisiIE1haW50YWluZXI6ICBNYXJrIEdyb3NzIDxtYXJrQHRoZWduYXIub3JnPgorIiBUaGlzIGlzIGEgc3ludGF4IGRlZmluaXRpb24gZm9yIHRoZSBKQUwgbGFuZ3VhZ2UuCisiIEl0IGlzIGJhc2VkIG9uIHRoZSBTb3VyY2UgRm9yZ2UgY29tcGlsZXIgc291cmNlIGNvZGUuCisiIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2phbC8KKyIKKyIgVE9ETyB0ZXN0LgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorc3luIHN5bmMgbGluZXM9MjUwCisKK3N5biBrZXl3b3JkIHBpY1RvZG8gTk9URSBUT0RPIFhYWCBjb250YWluZWQKKworc3luIG1hdGNoIHBpY0lkZW50aWZpZXIgIlthLXpfJF1bYS16MC05XyRdKiIKK3N5biBtYXRjaCBwaWNMYWJlbCAgICAgICJeW0EtWl8kXVtBLVowLTlfJF0qIgorc3luIG1hdGNoIHBpY0xhYmVsICAgICAgIl5bQS1aXyRdW0EtWjAtOV8kXSo6Im1lPWUtMQorCitzeW4gbWF0Y2ggcGljQVNDSUkgICAgICAiQVw9Jy4nIgorc3luIG1hdGNoIHBpY0JpbmFyeSAgICAgIkInWzAtMV1cKyciCitzeW4gbWF0Y2ggcGljRGVjaW1hbCAgICAiRCdcZFwrJyIKK3N5biBtYXRjaCBwaWNEZWNpbWFsICAgICJcZFwrIgorc3luIG1hdGNoIHBpY0hleGFkZWNpbWFsICIweFx4XCsiCitzeW4gbWF0Y2ggcGljSGV4YWRlY2ltYWwgIkgnXHhcKyciCitzeW4gbWF0Y2ggcGljSGV4YWRlY2ltYWwgIlswLTldXHgqaCIKK3N5biBtYXRjaCBwaWNPY3RhbCAgICAgICJPJ1swLTddXG8qJyIKKworc3luIG1hdGNoIHBpY0NvbW1lbnQgICAgIjsuKiIgY29udGFpbnM9cGljVG9kbworCitzeW4gcmVnaW9uIHBpY1N0cmluZyAgICBzdGFydD0rIisgZW5kPSsiKworCitzeW4ga2V5d29yZCBwaWNSZWdpc3RlciBpbmRmIHRtcjAgcGNsIHN0YXR1cyBmc3IgcG9ydF9hIHBvcnRfYiBwb3J0X2MgcG9ydF9kIHBvcnRfZSB4ODRfZWVkYXRhIHg4NF9lZWFkciBwY2xhdGggaW50Y29uCitzeW4ga2V5d29yZCBwaWNSZWdpc3RlciBmODc3X3RtcjFsICAgZjg3N190bXIxaCAgIGY4NzdfdDFjb24gICBmODc3X3QyY29uICAgZjg3N19jY3ByMWwgIGY4NzdfY2NwcjFoICBmODc3X2NjcDFjb24KK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyIGY4NzdfcGlyMSAgICBmODc3X3BpcjIgICAgZjg3N19waWUxICAgIGY4NzdfYWRjb24xICBmODc3X2FkY29uMCAgZjg3N19wcjIgICAgIGY4NzdfYWRyZXNsICBmODc3X2FkcmVzaAorc3luIGtleXdvcmQgcGljUmVnaXN0ZXIgZjg3N19lZWFkciAgIGY4NzdfZWVkYXRoICBmODc3X2VlYWRyaCAgZjg3N19lZWRhdGEgIGY4NzdfZWVjb24xICBmODc3X2VlY29uMiAgZjYyOF9FRUNPTjIKK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyIGY4NzdfcmNzdGEgICBmODc3X3R4c3RhICAgZjg3N19zcGJyZyAgIGY4NzdfdHhyZWcgICBmODc3X3JjcmVnICAgZjYyOF9FRURBVEEgIGY2MjhfRUVBRFIgICBmNjI4X0VFQ09OMQorCisiIFJlZ2lzdGVyIC0tLSBiaXRzCisiIFNUQVRVUworc3luIGtleXdvcmQgcGljUmVnaXN0ZXJQYXJ0IHN0YXR1c19jIHN0YXR1c19kYyBzdGF0dXNfeiBzdGF0dXNfcGQKK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCBzdGF0dXNfdG8gc3RhdHVzX3JwMCBzdGF0dXNfcnAxIHN0YXR1c19pcnAKKworIiBwaW5zCitzeW4ga2V5d29yZCBwaWNSZWdpc3RlclBhcnQgcGluX2EwIHBpbl9hMSBwaW5fYTIgcGluX2EzIHBpbl9hNCBwaW5fYTUKK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCBwaW5fYjAgcGluX2IxIHBpbl9iMiBwaW5fYjMgcGluX2I0IHBpbl9iNSBwaW5fYjYgcGluX2I3CitzeW4ga2V5d29yZCBwaWNSZWdpc3RlclBhcnQgcGluX2MwIHBpbl9jMSBwaW5fYzIgcGluX2MzIHBpbl9jNCBwaW5fYzUgcGluX2M2IHBpbl9jNworc3luIGtleXdvcmQgcGljUmVnaXN0ZXJQYXJ0IHBpbl9kMCBwaW5fZDEgcGluX2QyIHBpbl9kMyBwaW5fZDQgcGluX2Q1IHBpbl9kNiBwaW5fZDcKK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCBwaW5fZTAgcGluX2UxIHBpbl9lMgorCitzeW4ga2V5d29yZCBwaWNQb3J0RGlyIHBvcnRfYV9kaXJlY3Rpb24gIHBvcnRfYl9kaXJlY3Rpb24gIHBvcnRfY19kaXJlY3Rpb24gIHBvcnRfZF9kaXJlY3Rpb24gIHBvcnRfZV9kaXJlY3Rpb24KKworc3luIG1hdGNoIHBpY1BpbkRpciAicGluX2FbMDEyMzQ1XV9kaXJlY3Rpb24iCitzeW4gbWF0Y2ggcGljUGluRGlyICJwaW5fYlswMTIzNDU2N11fZGlyZWN0aW9uIgorc3luIG1hdGNoIHBpY1BpbkRpciAicGluX2NbMDEyMzQ1NjddX2RpcmVjdGlvbiIKK3N5biBtYXRjaCBwaWNQaW5EaXIgInBpbl9kWzAxMjM0NTY3XV9kaXJlY3Rpb24iCitzeW4gbWF0Y2ggcGljUGluRGlyICJwaW5fZVswMTJdX2RpcmVjdGlvbiIKKworCisiIElOVENPTgorc3luIGtleXdvcmQgcGljUmVnaXN0ZXJQYXJ0IGludGNvbl9naWUgaW50Y29uX2VlaWUgaW50Y29uX3BlaWUgaW50Y29uX3QwaWUgaW50Y29uX2ludGUKK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCBpbnRjb25fcmJpZSBpbnRjb25fdDBpZiBpbnRjb25faW50ZiBpbnRjb25fcmJpZgorCisiIFRJTUVSCitzeW4ga2V5d29yZCBwaWNSZWdpc3RlclBhcnQgdDFja3BzMSB0MWNrcHMwIHQxb3NjZW4gdDFzeW5jIHRtcjFjcyB0bXIxb24gdG1yMWllIHRtcjFpZgorCisiY3BwIGJpdHMKK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCBjY3AxeCBjY3AxeQorCisiIGFkY29uIGJpdHMKK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCBhZGNvbjBfZ28gYWRjb24wX2NoMCBhZGNvbjBfY2gxIGFkY29uMF9jaDIKKworIiBFRUNPTgorc3luIGtleXdvcmQgcGljUmVnaXN0ZXJQYXJ0ICBlZWNvbjFfcmQgZWVjb24xX3dyIGVlY29uMV93cmVuIGVlY29uMV93cmVyciBlZWNvbjFfZWVwZ2QKK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCBmNjI4X2VlY29uMV9yZCBmNjI4X2VlY29uMV93ciBmNjI4X2VlY29uMV93cmVuIGY2MjhfZWVjb24xX3dyZXJyCisKKyIgdXNhcnQKK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCB0eDkgdHhlbiBzeW5jIGJyZ2ggdHg5ZAorc3luIGtleXdvcmQgcGljUmVnaXN0ZXJQYXJ0IHNwZW4gcng5IGNyZW4gZmVyciBvZXJyIHJ4OWQKK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCBUWElGIFJDSUYKKworIiBPcENvZGVzLi4uCitzeW4ga2V5d29yZCBwaWNPcGNvZGUgYWRkbHcgYW5kbHcgY2FsbCBjbHJ3ZHQgZ290byBpb3JsdyBtb3ZsdyBvcHRpb24gcmV0ZmllIHJldGx3IHJldHVybiBzbGVlcCBzdWJsdyB0cmlzCitzeW4ga2V5d29yZCBwaWNPcGNvZGUgeG9ybHcgYWRkd2YgYW5kd2YgY2xyZiBjbHJ3IGNvbWYgZGVjZiBkZWNmc3ogaW5jZiBpbmNmc3ogcmV0aXcgaW9yd2YgbW92ZiBtb3Z3ZiBub3AKK3N5biBrZXl3b3JkIHBpY09wY29kZSBybGYgcnJmIHN1YndmIHN3YXBmIHhvcndmIGJjZiBic2YgYnRmc2MgYnRmc3Mgc2tweiBza3BueiBzZXR6IGNscnogc2twYyBza3BuYyBzZXRjIGNscmMKK3N5biBrZXl3b3JkIHBpY09wY29kZSBza3BkYyBza3BuZGMgc2V0ZGMgY2xyZGMgbW92ZncgdHN0ZiBiYW5rIHBhZ2UgSFBBR0UgbXVsbHcgbXVsd2YgY3Bmc2VxIGNwZnNndCBjcGZzbHQgYmFua2EgYmFua2IKKworCitzeW4ga2V5d29yZCBqYWxCb29sZWFuCQl0cnVlIGZhbHNlCitzeW4ga2V5d29yZCBqYWxCb29sZWFuCQlvZmYgb24KK3N5biBrZXl3b3JkIGphbEJpdAkJaGlnaCBsb3cKK3N5biBrZXl3b3JkIGphbENvbnN0YW50CQlJbnB1dCBPdXRwdXQgYWxsX2lucHV0IGFsbF9vdXRwdXQKK3N5biBrZXl3b3JkIGphbENvbmRpdGlvbmFsCWlmIGVsc2UgdGhlbiBlbHNpZiBlbmQgaWYKK3N5biBrZXl3b3JkIGphbExhYmVsCQlnb3RvCitzeW4ga2V5d29yZCBqYWxSZXBlYXQJCWZvciB3aGlsZSBmb3JldmVyIGxvb3AKK3N5biBrZXl3b3JkIGphbFN0YXRlbWVudAlwcm9jZWR1cmUgZnVuY3Rpb24KK3N5biBrZXl3b3JkIGphbFN0YXRlbWVudAlyZXR1cm4gZW5kIHZvbGF0aWxlIGNvbnN0IHZhcgorc3luIGtleXdvcmQgamFsVHlwZQkJYml0IGJ5dGUKKworc3luIGtleXdvcmQgamFsTW9kaWZpZXIJCWludGVycnVwdCBhc3NlbWJsZXIgYXNtIHB1dCBnZXQKK3N5biBrZXl3b3JkIGphbFN0YXRlbWVudAlvdXQgaW4gaXMgYmVnaW4gYXQKK3N5biBrZXl3b3JkIGphbERpcmVjdGl2ZQlwcmFnbWEganVtcF90YWJsZSB0YXJnZXQgdGFyZ2V0X2Nsb2NrIHRhcmdldF9jaGlwIG5hbWUgZXJyb3IgdGVzdCBhc3NlcnQKK3N5biBrZXl3b3JkIGphbFByZWRlZmluZWQgICAgICAgaHMgeHQgcmMgbHAgaW50ZXJuYWwgMTZjODQgMTZmODQgMTZmODc3IHN4MTggc3gyOCAxMmM1MDlhIDEyYzUwOAorc3luIGtleXdvcmQgamFsUHJlZGVmaW5lZCAgICAgICAxMmNlNjc0IDE2ZjYyOCAxOGYyNTIgMThmMjQyIDE4ZjQ0MiAxOGY0NTIgMTJmNjI5IDEyZjY3NSAxNmY4OAorc3luIGtleXdvcmQgamFsUHJlZGVmaW5lZAkxNmY4NzYgMTZmODczIHN4XzEyIHN4MTggc3gyOCBwaWNfMTIgcGljXzE0IHBpY18xNgorCitzeW4ga2V5d29yZCBqYWxEaXJlY3RpdmUgY2hpcCBvc2MgY2xvY2sgIGZ1c2VzICBjcHUgd2F0Y2hkb2cgcG93ZXJ1cCBwcm90ZWN0aW9uCisKK3N5biBrZXl3b3JkIGphbEZ1bmN0aW9uCQliYW5rXzAgYmFua18xIGJhbmtfMiBiYW5rXzMgYmFua180IGJhbmtfNSBiYW5rXzYgYmFua183IHRyaXNhIHRyaXNiIHRyaXNjIHRyaXNkIHRyaXNlCitzeW4ga2V5d29yZCBqYWxGdW5jdGlvbgkJX3RyaXNhX2ZsdXNoIF90cmlzYl9mbHVzaCBfdHJpc2NfZmx1c2ggX3RyaXNkX2ZsdXNoIF90cmlzZV9mbHVzaAorCitzeW4ga2V5d29yZCBqYWxQSUMJCWxvY2FsIGlkbGVfbG9vcAorCitzeW4gcmVnaW9uICBqYWxBc20JCW1hdGNoZ3JvdXA9amFsQXNtS2V5IHN0YXJ0PSJcPGFzc2VtYmxlclw+IiBlbmQ9Ilw8ZW5kIGFzc2VtYmxlclw+IiBjb250YWlucz1qYWxDb21tZW50LGphbFByZVByb2MsamFsTGFiZWwscGljSWRlbnRpZmllciwgcGljTGFiZWwscGljQVNDSUkscGljRGVjaW1hbCxwaWNIZXhhZGVjaW1hbCxwaWNPY3RhbCxwaWNDb21tZW50LHBpY1N0cmluZyxwaWNSZWdpc3RlcixwaWNSaWdpc3RlclBhcnQscGljT3Bjb2RlLHBpY0RpcmVjdGl2ZSxqYWxQSUMKK3N5biByZWdpb24gIGphbEFzbQkJbWF0Y2hncm91cD1qYWxBc21LZXkgc3RhcnQ9Ilw8YXNtXD4iIGVuZD0vJC8gY29udGFpbnM9amFsQ29tbWVudCxqYWxQcmVQcm9jLGphbExhYmVsLHBpY0lkZW50aWZpZXIsIHBpY0xhYmVsLHBpY0FTQ0lJLHBpY0RlY2ltYWwscGljSGV4YWRlY2ltYWwscGljT2N0YWwscGljQ29tbWVudCxwaWNTdHJpbmcscGljUmVnaXN0ZXIscGljUmlnaXN0ZXJQYXJ0LHBpY09wY29kZSxwaWNEaXJlY3RpdmUsamFsUElDCisKK3N5biByZWdpb24gIGphbFBzdWRvVmFycyBtYXRjaGdyb3VwPWphbFBzdWRvVmFyc0tleSBzdGFydD0iXDwncHV0XD4iIGVuZD0iLzxpcy8+IiAgY29udGFpbnM9amFsQ29tbWVudAorCitzeW4gbWF0Y2ggIGphbFN0cmluZ0VzY2FwZQljb250YWluZWQgIiNbMTJdWzAtOV1cPVswLTldXD0iCitzeW4gbWF0Y2ggICBqYWxJZGVudGlmaWVyCQkiXDxbYS16QS1aX11bYS16QS1aMC05X10qXD4iCitzeW4gbWF0Y2ggICBqYWxTeW1ib2xPcGVyYXRvcgkJIlsrXC0vKj1dIgorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSIhIgorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSI8Igorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSI+Igorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSI8PSIKK3N5biBtYXRjaCAgIGphbFN5bWJvbE9wZXJhdG9yCQkiPj0iCitzeW4gbWF0Y2ggICBqYWxTeW1ib2xPcGVyYXRvcgkJIiE9Igorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSI9PSIKK3N5biBtYXRjaCAgIGphbFN5bWJvbE9wZXJhdG9yCQkiPDwiCitzeW4gbWF0Y2ggICBqYWxTeW1ib2xPcGVyYXRvcgkJIj4+Igorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSJ8Igorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSImIgorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSIlIgorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSI/Igorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSJbKCldIgorc3luIG1hdGNoICAgamFsU3ltYm9sT3BlcmF0b3IJCSJbXF4uXSIKK3N5biBtYXRjaCAgIGphbExhYmVsCQkJIltcXl0qOiIKKworc3luIG1hdGNoICBqYWxOdW1iZXIJCSItXD1cPFxkWzAtOV9dXCtcPiIKK3N5biBtYXRjaCAgamFsSGV4TnVtYmVyCQkiMHhbMC05QS1GYS1mX11cK1w+Igorc3luIG1hdGNoICBqYWxCaW5OdW1iZXIJCSIwYlswMV9dXCtcPiIKKworIiBTdHJpbmcKKyJ3cm9uZyBzdHJpbmdzCitzeW4gcmVnaW9uICBqYWxTdHJpbmdFcnJvciBtYXRjaGdyb3VwPWphbFN0cmluZ0Vycm9yIHN0YXJ0PSsiKyBlbmQ9KyIrIGVuZD0rJCsgY29udGFpbnM9amFsU3RyaW5nRXNjYXBlCisKKyJyaWdodCBzdHJpbmdzCitzeW4gcmVnaW9uICBqYWxTdHJpbmcgbWF0Y2hncm91cD1qYWxTdHJpbmcgc3RhcnQ9KycrIGVuZD0rJysgb25lbGluZSBjb250YWlucz1qYWxTdHJpbmdFc2NhcGUKKyIgVG8gc2VlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHN0cmluZ3M6CitzeW4gcmVnaW9uICBqYWxTdHJpbmcgbWF0Y2hncm91cD1qYWxTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisgb25lbGluZSBjb250YWlucz1qYWxTdHJpbmdFc2NhcGVHUEMKKworc3luIGtleXdvcmQgamFsVG9kbyBjb250YWluZWQJVE9ETworc3luIHJlZ2lvbiBqYWxDb21tZW50CQlzdGFydD0vLS0gLyAgZW5kPS8kLyBvbmVsaW5lIGNvbnRhaW5zPWphbFRvZG8KK3N5biByZWdpb24gamFsQ29tbWVudAkJc3RhcnQ9Ly0tXHQvICBlbmQ9LyQvIG9uZWxpbmUgY29udGFpbnM9amFsVG9kbworc3luIG1hdGNoICBqYWxDb21tZW50CQkvLS1cXyQvCitzeW4gcmVnaW9uIGphbFByZVByb2MJCXN0YXJ0PSJpbmNsdWRlIiAgZW5kPS8kLyBjb250YWlucz1KYWxDb21tZW50LGphbFRvRG8KKworCitpZiBleGlzdHMoImphbF9ub190YWJzIikKKwlzeW4gbWF0Y2ggamFsU2hvd1RhYiAiXHQiCitlbmRpZgorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2phbF9zeW5faW5pdHMiKQoraWYgdmVyc2lvbiA8IDUwOAorICBsZXQgZGlkX2phbF9zeW5faW5pdHMgPSAxCisgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CitlbHNlCisgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorZW5kaWYKKworICBIaUxpbmsgamFsQWNjZXMJCWphbFN0YXRlbWVudAorICBIaUxpbmsgamFsQm9vbGVhbgkJQm9vbGVhbgorICBIaUxpbmsgamFsQml0CQkJQm9vbGVhbgorICBIaUxpbmsgamFsQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgamFsQ29uZGl0aW9uYWwJCUNvbmRpdGlvbmFsCisgIEhpTGluayBqYWxDb25zdGFudAkJQ29uc3RhbnQKKyAgSGlMaW5rIGphbERlbGltaXRlcgkJSWRlbnRpZmllcgorICBIaUxpbmsgamFsRGlyZWN0aXZlCQlQcmVQcm9jCisgIEhpTGluayBqYWxFeGNlcHRpb24JCUV4Y2VwdGlvbgorICBIaUxpbmsgamFsRmxvYXQJCUZsb2F0CisgIEhpTGluayBqYWxGdW5jdGlvbgkJRnVuY3Rpb24KKyAgSGlMaW5rIGphbFBzdWRvVmFyc0tleQlGdW5jdGlvbgorICBIaUxpbmsgamFsTGFiZWwJCUxhYmVsCisgIEhpTGluayBqYWxNYXRyaXhEZWxpbWl0ZXIJSWRlbnRpZmllcgorICBIaUxpbmsgamFsTW9kaWZpZXIJCVR5cGUKKyAgSGlMaW5rIGphbE51bWJlcgkJTnVtYmVyCisgIEhpTGluayBqYWxCaW5OdW1iZXIJCU51bWJlcgorICBIaUxpbmsgamFsSGV4TnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIGphbE9wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgamFsUHJlZGVmaW5lZAkJQ29uc3RhbnQKKyAgSGlMaW5rIGphbFByZVByb2MJCVByZVByb2MKKyAgSGlMaW5rIGphbFJlcGVhdAkJUmVwZWF0CisgIEhpTGluayBqYWxTdGF0ZW1lbnQJCVN0YXRlbWVudAorICBIaUxpbmsgamFsU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIGphbFN0cmluZ0VzY2FwZQlTcGVjaWFsCisgIEhpTGluayBqYWxTdHJpbmdFc2NhcGVHUEMJU3BlY2lhbAorICBIaUxpbmsgamFsU3RyaW5nRXJyb3IJCUVycm9yCisgIEhpTGluayBqYWxTdHJ1Y3QJCWphbFN0YXRlbWVudAorICBIaUxpbmsgamFsU3ltYm9sT3BlcmF0b3IJamFsT3BlcmF0b3IKKyAgSGlMaW5rIGphbFRvZG8JCVRvZG8KKyAgSGlMaW5rIGphbFR5cGUJCVR5cGUKKyAgSGlMaW5rIGphbFVuY2xhc3NpZmllZAlTdGF0ZW1lbnQKKyAgSGlMaW5rIGphbEFzbQkJCUFzc2VtYmxlcgorICBIaUxpbmsgamFsRXJyb3IJCUVycm9yCisgIEhpTGluayBqYWxBc21LZXkJCVN0YXRlbWVudAorICBIaUxpbmsgamFsUElDCQkJU3RhdGVtZW50CisKKyAgSGlMaW5rIGphbFNob3dUYWIJCUVycm9yCisKKyAgSGlMaW5rIHBpY1RvZG8JCVRvZG8KKyAgSGlMaW5rIHBpY0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHBpY0RpcmVjdGl2ZQkJU3RhdGVtZW50CisgIEhpTGluayBwaWNMYWJlbAkJTGFiZWwKKyAgSGlMaW5rIHBpY1N0cmluZwkJU3RyaW5nCisKKyAgSGlMaW5rIHBpY09wY29kZQkJS2V5d29yZAorICBIaUxpbmsgcGljUmVnaXN0ZXIJCVN0cnVjdHVyZQorICBIaUxpbmsgcGljUmVnaXN0ZXJQYXJ0CVNwZWNpYWwKKyAgSGlMaW5rIHBpY1BpbkRpcgkJU1BlY2lhbAorICBIaUxpbmsgcGljUG9ydERpcgkJU1BlY2lhbAorCisgIEhpTGluayBwaWNBU0NJSQkJU3RyaW5nCisgIEhpTGluayBwaWNCaW5hcnkJCU51bWJlcgorICBIaUxpbmsgcGljRGVjaW1hbAkJTnVtYmVyCisgIEhpTGluayBwaWNIZXhhZGVjaW1hbAkJTnVtYmVyCisgIEhpTGluayBwaWNPY3RhbAkJTnVtYmVyCisKKyAgSGlMaW5rIHBpY0lkZW50aWZpZXIJCUlkZW50aWZpZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJqYWwiCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2phbS52aW0gYi9ydW50aW1lL3N5bnRheC9qYW0udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZTY2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9qYW0udmltCkBAIC0wLDAgKzEsMjUyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJSkFNCisiIE1haW50YWluZXI6CVJhbGYgTGVta2UgKHJhbGZsZW1rQHQtb25saW5lLmRlKQorIiBMYXN0IGNoYW5nZToJMDktMTAtMjAwMAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmIHZlcnNpb24gPj0gNjAwCisgIHNldGxvY2FsIGlza2V5d29yZD1ALDQ4LTU3LF8sLQorZWxzZQorICBzZXQgaXNrZXl3b3JkPUAsNDgtNTcsXywtCitlbmRpZgorCisiIEEgYnVuY2ggb2YgdXNlZnVsIGphbSBrZXl3b3Jkcworc3luIGtleXdvcmQJamFtU3RhdGVtZW50CWJyZWFrIGNhbGwgZGJtcyBmbHVzaCBnbG9iYWwgaW5jbHVkZSBtc2cgcGFybXMgcHJvYyBwdWJsaWMgcmVjZWl2ZSByZXR1cm4gc2VuZCB1bmxvYWQgdmFycworc3luIGtleXdvcmQJamFtQ29uZGl0aW9uYWwJaWYgZWxzZQorc3luIGtleXdvcmQJamFtUmVwZWF0CWZvciB3aGlsZSBuZXh0IHN0ZXAKKworc3luIGtleXdvcmQJamFtVG9kbwkJY29udGFpbmVkIFRPRE8gRklYTUUgWFhYCitzeW4ga2V5d29yZAlqYW1EQlN0YXRlMQlhbGlhcyBiaW5hcnkgY2F0cXVlcnkgY2xvc2UgY2xvc2VfYWxsX2Nvbm5lY3Rpb25zIGNvbHVtbl9uYW1lcyBjb25uZWN0aW9uIGNvbnRpbnVlIGNvbnRpbnVlX2JvdHRvbSBjb250aW51ZV9kb3duIGNvbnRpbnVlX3RvcCBjb250aW51ZV91cAorc3luIGtleXdvcmQJamFtREJTdGF0ZTIJICAgICBjdXJzb3IgZGVjbGFyZSBlbmdpbmUgZXhlY3V0ZSBmb3JtYXQgb2NjdXIgb25lbnRyeSBvbmVycm9yIG9uZXhpdCBzcWwgc3RhcnQgc3RvcmUgdW5pcXVlIHdpdGgKK3N5biBrZXl3b3JkCWphbVNRTFN0YXRlMQlhbGwgYWx0ZXIgYW5kIGFueSBhdmcgYmV0d2VlbiBieSBjb3VudCBjcmVhdGUgY3VycmVudCBkYXRhIGRhdGFiYXNlIGRlbGV0ZSBkaXN0aW5jdCBkcm9wIGV4aXN0cyBmZXRjaCBmcm9tIGdyYW50IGdyb3VwCitzeW4ga2V5d29yZAlqYW1TUUxTdGF0ZTIJaGF2aW5nIGluZGV4IGluc2VydCBpbnRvIGxpa2UgbG9hZCBtYXggbWluIG9mIG9wZW4gb3JkZXIgcmV2b2tlIHJvbGxiYWNrIHJ1bnN0YXRzIHNlbGVjdCBzZXQgc2hvdyBzdG9wIHN1bSBzeW5vbnltIHRhYmxlIHRvIHVuaW9uIHVwZGF0ZSB2YWx1ZXMgdmlldyB3aGVyZSBidW5kbGUKKworc3luIGtleXdvcmQgICAgIGphbUxpYkZ1bmMxICAgICBkbV9iaW5fY3JlYXRlX29jY3VyIGRtX2Jpbl9kZWxldGVfb2NjdXIgZG1fYmluX2dldF9kbGVuZ3RoIGRtX2Jpbl9nZXRfb2NjdXIgZG1fYmluX2xlbmd0aCBkbV9iaW5fbWF4X29jY3VyIGRtX2Jpbl9zZXRfZGxlbmd0aCBkbV9jb252ZXJ0X2VtcHR5IGRtX2N1cnNvcl9jb25uZWN0aW9uIGRtX2N1cnNvcl9jb25zaXN0ZW50IGRtX2N1cnNvcl9lbmdpbmUgZG1fZGJpX2luaXQgZG1fZGJtcyBkbV9kYm1zX25vZXhwIGRtX2Rpc2FibGVfc3R5bGVzIGRtX2VuYWJsZV9zdHlsZXMgZG1fZXhlY19zcWwgZG1fZXhwYW5kIGRtX2ZyZWVfc3FsX2luZm8gZG1fZ2VuX2NoYW5nZV9leGVjdXRlX3VzaW5nIGRtX2dlbl9jaGFuZ2Vfc2VsZWN0X2Zyb20gZG1fZ2VuX2NoYW5nZV9zZWxlY3RfZ3JvdXBfYnkgZG1fZ2VuX2NoYW5nZV9zZWxlY3RfaGF2aW5nIGRtX2dlbl9jaGFuZ2Vfc2VsZWN0X2xpc3QgZG1fZ2VuX2NoYW5nZV9zZWxlY3Rfb3JkZXJfYnkgZG1fZ2VuX2NoYW5nZV9zZWxlY3Rfc3VmZml4IGRtX2dlbl9jaGFuZ2Vfc2VsZWN0X3doZXJlIGRtX2dlbl9nZXRfdHZfYWxpYXMgZG1fZ2VuX3NxbF9pbmZvCisKK3N5biBrZXl3b3JkICAgICBqYW1MaWJGdW5jMiAgICAgZG1fZ2V0X2RiX2Nvbm5faGFuZGxlIGRtX2dldF9kYl9jdXJzb3JfaGFuZGxlIGRtX2dldF9kcml2ZXJfb3B0aW9uIGRtX2dldGRiaXRleHQgZG1faW5pdCBkbV9pc19jb25uZWN0aW9uIGRtX2lzX2N1cnNvciBkbV9pc19lbmdpbmUgZG1fb2RiX3ByZXNlcnZlc19jdXJzb3IgZG1fcmVzZXQgZG1fc2V0X2RyaXZlcl9vcHRpb24gZG1fc2V0X21heF9mZXRjaGVzIGRtX3NldF9tYXhfcm93c19wZXJfZmV0Y2ggZG1fc2V0X3RtX2NsZWFyX2Zhc3QgZG1fdmFsX3JlbGF0aXZlIHNtX2FkanVzdF9hcmVhIHNtX2FsbGdldCBzbV9hbXRfZm9ybWF0IHNtX2VfYW10X2Zvcm1hdCBzbV9pX2FtdF9mb3JtYXQgc21fbl9hbXRfZm9ybWF0IHNtX29fYW10X2Zvcm1hdCBzbV9hcHBlbmRfYnVuZGxlX2RhdGEgc21fYXBwZW5kX2J1bmRsZV9kb25lIHNtX2FwcGVuZF9idW5kbGVfaXRlbSBzbV9kX2F0X2N1ciBzbV9sX2F0X2N1ciBzbV9yX2F0X2N1ciBzbV9td19hdHRhY2hfZHJhd2luZ19mdW5jIHNtX213bl9hdHRhY2hfZHJhd2luZ19mdW5jIHNtX213ZV9hdHRhY2hfZHJhd2luZ19mdW5jIHNtX3htX2F0dGFjaF9kcmF3aW5nX2Z1bmMgc21feG1uX2F0dGFjaF9kcmF3aW5nX2Z1bmMgc21feG1lX2F0dGFjaF9kcmF3aW5nX2Z1bmMgc21fYmFja3RhYiBzbV9iZWwgc21fYmlfY29tcGFyZXNtX2JpX2NvcHkgc21fYmlfaW5pdGlhbGl6ZSBzbV9ia3JlY3Qgc21fY19vZmYgc21fY19vbiBzbV9jX3ZpcyBzbV9jYWxjIHNtX2NhbmNlbCBzbV9ja2RpZ2l0IHNtX2NsX2FsbF9tZHRzIHNtX2NsX3VucHJvdCBzbV9jbGVhcl9hcnJheSBzbV9uX2NsZWFyX2FycmF5IHNtXzFjbGVhcl9hcnJheSBzbV9uXzFjbGVhcl9hcnJheSBzbV9jbG9zZV93aW5kb3cgc21fY29tX2xvYWRfcGljdHVyZSBzbV9jb21fUXVlcnlJbnRlcmZhY2Ugc21fY29tX3Jlc3VsdCBzbV9jb21fcmVzdWx0X21zZyBzbV9jb21fc2V0X2hhbmRsZXIgc21fY29weWFycmF5IHNtX25fY29weWFycmF5IHNtX2NyZWF0ZV9idW5kbGUKKworc3luIGtleXdvcmQgICAgIGphbUxpYkZ1bmMzICAgICBzbV9kX21zZ19saW5lIHNtX2RibHZhbCBzbV9lX2RibHZhbCBzbV9pX2RibHZhbCBzbV9uX2RibHZhbCBzbV9vX2RibHZhbCBzbV9kZF9hYmxlIHNtX2RkZV9jbGllbnRfY29ubmVjdF9jb2xkIHNtX2RkZV9jbGllbnRfY29ubmVjdF9ob3Qgc21fZGRlX2NsaWVudF9jb25uZWN0X3dhcm0gc21fZGRlX2NsaWVudF9kaXNjb25uZWN0IHNtX2RkZV9jbGllbnRfb2ZmIHNtX2RkZV9jbGllbnRfb24gc21fZGRlX2NsaWVudF9wYXN0ZV9saW5rX2NvbGQgc21fZGRlX2NsaWVudF9wYXN0ZV9saW5rX2hvdCBzbV9kZGVfY2xpZW50X3Bhc3RlX2xpbmtfd2FybSBzbV9kZGVfY2xpZW50X3JlcXVlc3Qgc21fZGRlX2V4ZWN1dGUgc21fZGRlX2luc3RhbGxfbm90aWZ5IHNtX2RkZV9wb2tlIHNtX2RkZV9zZXJ2ZXJfb2ZmIHNtX2RkZV9zZXJ2ZXJfb24gc21fZGVsYXlfY3Vyc29yIHNtX2Rlc2VsZWN0IHNtX2RpY25hbWUgc21fZGlzcF9vZmYgc21fZGxlbmd0aCBzbV9lX2RsZW5ndGggc21faV9kbGVuZ3RoIHNtX25fZGxlbmd0aCBzbV9vX2RsZW5ndGggc21fZG9fdWluc3RhbGxzIHNtX2lfZG9jY3VyIHNtX29fZG9jY3VyIHNtX2RyYXdpbmdhcmVhIHNtX3htX2RyYXdpbmdhcmVhIHNtX2R0b2ZpZWxkIHNtX2VfZHRvZmllbGQgc21faV9kdG9maWVsZCBzbV9uX2R0b2ZpZWxkIHNtX29fZHRvZmllbGQgc21fZmVtc2cgc21fZmVycl9yZXNldCBzbV9maV9wYXRoIHNtX2ZpbGVfY29weSBzbV9maWxlX2V4aXN0cyBzbV9maWxlX21vdmUgc21fZmlsZV9yZW1vdmUgc21fZmlfb3BlbiBzbV9maV9wYXRoIHNtX2ZpbGVib3ggc21fZmlsZXR5cGVzIHNtX2Zpb19hMmYgc21fZmlvX2Nsb3NlIHNtX2Zpb19lZGl0b3Igc21fZmlvX2Vycm9yIHNtX2Zpb19lcnJvcl9zZXQgc21fZmlvX2YyYSBzbV9maW9fZ2V0YyBzbV9maW9fZ2V0cyBzbV9maW9faGFuZGxlIHNtX2Zpb19vcGVuIHNtX2Zpb19wdXRjIHNtX2Zpb19wdXRzIHNtX2Zpb19yZXdpbmQgc21fZmx1c2ggc21fZF9mb3JtIHNtX2xfZm9ybQorCitzeW4ga2V5d29yZCAgICAgamFtTGliRnVuYzQgICAgIHNtX3JfZm9ybSBzbV9mb3JtbGlzdCBzbV9mcHRyIHNtX2VfZnB0ciBzbV9pX2ZwdHIgc21fbl9mcHRyIHNtX29fZnB0ciBzbV9mcXVpX21zZyBzbV9mcXVpZXRfZXJyIHNtX2ZyZWVfYnVuZGxlIHNtX2Z0b2cgc21fZV9mdG9nIHNtX2lfZnRvZyBzbV9uX2Z0b2cgc21fb19mdG9nIHNtX2Z2YWwgc21fZV9mdmFsIHNtX2lfZnZhbCBzbV9uX2Z2YWwgc21fb19mdmFsIHNtX2lfZ2V0X2JpX2RhdGEgc21fb19nZXRfYmlfZGF0YSBzbV9nZXRfYnVuZGxlX2RhdGEgc21fZ2V0X2J1bmRsZV9pdGVtX2NvdW50IHNtX2dldF9idW5kbGVfb2NjdXJfY291bnQgc21fZ2V0X25leHRfYnVuZGxlX25hbWUgc21faV9nZXRfdHZfYmlfZGF0YSBzbV9vX2dldF90dl9iaV9kYXRhIHNtX2dldGZpZWxkIHNtX2VfZ2V0ZmllbGQgc21faV9nZXRmaWVsZCBzbV9uX2dldGZpZWxkIHNtX29fZ2V0ZmllbGQgc21fZ2V0a2V5IHNtX2dvZmllbGQgc21fZV9nb2ZpZWxkIHNtX2lfZ29maWVsZCBzbV9uX2dvZmllbGQgc21fb19nb2ZpZWxkIHNtX2d0b2Ygc21fZ3ZhbCBzbV9pX2d0b2Ygc21fbl9ndmFsIHNtX2hscF9ieV9uYW1lIHNtX2hvbWUgc21faW5pbXNnIHNtX2luaXRjcnQgc21famluaXRjcnQgc21fanhpbml0Y3J0IHNtX2lucHV0IHNtX2lucXVpcmUgc21faW5zdGFsbCBzbV9pbnR2YWwgc21fZV9pbnR2YWwgc21faV9pbnR2YWwgc21fbl9pbnR2YWwgc21fb19pbnR2YWwgc21faV9pb2NjdXIgc21fb19pb2NjdXIgc21faXNfYnVuZGxlIHNtX2lzX25vIHNtX2VfaXNfbm8gc21faV9pc19ubyBzbV9uX2lzX25vIHNtX29faXNfbm8gc21faXNfeWVzIHNtX2VfaXNfeWVzIHNtX2lfaXNfeWVzIHNtX25faXNfeWVzIHNtX29faXNfeWVzIHNtX2lzYWJvcnQgc21faXNldCBzbV9pc3N2IHNtX2l0b2ZpZWxkIHNtX2VfaXRvZmllbGQgc21faV9pdG9maWVsZCBzbV9uX2l0b2ZpZWxkIHNtX29faXRvZmllbGQgc21famNsb3NlIHNtX2pmaWxlYm94IHNtX2pmb3JtIHNtX2RqcGxjYWxsIHNtX2pwbGNhbGwKKworc3luIGtleXdvcmQgICAgIGphbUxpYkZ1bmM1ICAgICBzbV9zanBsY2FsbCBzbV9qcGxwdWJsaWMgc21fanBsdW5sb2FkIHNtX2p0b3Agc21fandpbmRvdyBzbV9rZXlfaW50ZWdlciBzbV9rZXlmaWx0ZXIgc21fa2V5aGl0IHNtX2tleWluaXQgc21fbl9rZXlpbml0IHNtX2tleWxhYmVsIHNtX2tleW9wdGlvbiBzbV9sX2Nsb3NlIHNtX2xfb3BlbiBzbV9sX29wZW5fc3lzbGliIHNtX2xhc3Qgc21fbGF1bmNoIHNtX2hfbGRiX2ZsZF9nZXQgc21fbl9sZGJfZmxkX2dldCBzbV9oX2xkYl9uX2ZsZF9nZXQgc21fbl9sZGJfbl9mbGRfZ2V0IHNtX2hfbGRiX2ZsZF9zdG9yZSBzbV9uX2xkYl9mbGRfc3RvcmUgc21faF9sZGJfbl9mbGRfc3RvcmUgc21fbl9sZGJfbl9mbGRfc3RvcmUgc21fbGRiX2dldF9hY3RpdmUgc21fbGRiX2dldF9pbmFjdGl2ZSBzbV9sZGJfZ2V0X25leHRfYWN0aXZlIHNtX2xkYl9nZXRfbmV4dF9pbmFjdGl2ZSBzbV9sZGJfZ2V0ZmllbGQgc21faV9sZGJfZ2V0ZmllbGQgc21fbl9sZGJfZ2V0ZmllbGQgc21fb19sZGJfZ2V0ZmllbGQgc21fbGRiX2hfZ2V0ZmllbGQgc21faV9sZGJfaF9nZXRmaWVsZCBzbV9uX2xkYl9oX2dldGZpZWxkIHNtX29fbGRiX2hfZ2V0ZmllbGQgc21fbGRiX2hhbmRsZSBzbV9sZGJfaW5pdCBzbV9sZGJfaXNfbG9hZGVkIHNtX2xkYl9sb2FkIHNtX2xkYl9uYW1lIHNtX2xkYl9uZXh0X2hhbmRsZSBzbV9sZGJfcG9wIHNtX2xkYl9wdXNoIHNtX2xkYl9wdXRmaWVsZCBzbV9pX2xkYl9wdXRmaWVsZCBzbV9uX2xkYl9wdXRmaWVsZCBzbV9vX2xkYl9wdXRmaWVsZCBzbV9sZGJfaF9wdXRmaWVsZCBzbV9pX2xkYl9oX3B1dGZpZWxkIHNtX25fbGRiX2hfcHV0ZmllbGQgc21fb19sZGJfaF9wdXRmaWVsZCBzbV9sZGJfc3RhdGVfZ2V0IHNtX2xkYl9oX3N0YXRlX2dldCBzbV9sZGJfc3RhdGVfc2V0IHNtX2xkYl9oX3N0YXRlX3NldCBzbV9sZGJfdW5sb2FkIHNtX2xkYl9oX3VubG9hZCBzbV9sZWF2ZSBzbV9saXN0X29iamVjdHNfY291bnQgc21fbGlzdF9vYmplY3RzX2VuZCBzbV9saXN0X29iamVjdHNfbmV4dAorCitzeW4ga2V5d29yZCAgICAgamFtTGliRnVuYzYgICAgIHNtX2xpc3Rfb2JqZWN0c19zdGFydCBzbV9sbmd2YWwgc21fZV9sbmd2YWwgc21faV9sbmd2YWwgc21fbl9sbmd2YWwgc21fb19sbmd2YWwgc21fbG9hZF9zY3JlZW4gc21fbG9nIHNtX2xzdG9yZSBzbV9sdG9maWVsZCBzbV9lX2x0b2ZpZWxkIHNtX2lfbHRvZmllbGQgc21fbl9sdG9maWVsZCBzbV9vX2x0b2ZpZWxkIHNtX21fZmx1c2ggc21fbWVudV9iYXJfZXJyb3Igc21fbWVudV9jaGFuZ2Ugc21fbWVudV9jcmVhdGUgc21fbWVudV9kZWxldGUgc21fbWVudV9nZXRfaW50IHNtX21lbnVfZ2V0X3N0ciBzbV9tZW51X2luc3RhbGwgc21fbWVudV9yZW1vdmUgc21fbWVzc2FnZV9ib3ggc21fbW5jcmluaXQ2IHNtX21uaXRlbV9jaGFuZ2Ugc21fbl9tbml0ZW1fY2hhbmdlIHNtX21uaXRlbV9jcmVhdGUgc21fbl9tbml0ZW1fY3JlYXRlIHNtX21uaXRlbV9kZWxldGUgc21fbl9tbml0ZW1fZGVsZXRlIHNtX21uaXRlbV9nZXRfaW50IHNtX25fbW5pdGVtX2dldF9pbnQgc21fbW5pdGVtX2dldF9zdHIgc21fbl9tbml0ZW1fZ2V0X3N0ciBzbV9tbnNjcmlwdF9sb2FkIHNtX21uc2NyaXB0X3VubG9hZCBzbV9tc19pbnF1aXJlIHNtX21zZyBzbV9tc2dfZGVsIHNtX21zZ19nZXQgc21fbXNnX3JlYWQgc21fZF9tc2dfcmVhZCBzbV9uX21zZ19yZWFkIHNtX21zZ2ZpbmQgc21fbXRzX0NyZWF0ZUluc3RhbmNlIHNtX210c19DcmVhdGVQcm9wZXJ0eSBzbV9tdHNfQ3JlYXRlUHJvcGVydHlHcm91cCBzbV9tdHNfRGlzYWJsZUNvbW1pdCBzbV9tdHNfRW5hYmxlQ29tbWl0IHNtX210c19HZXRQcm9wZXJ0eVZhbHVlIHNtX210c19Jc0NhbGxlckluUm9sZSBzbV9tdHNfSXNJblRyYW5zYWN0aW9uIHNtX210c19Jc1NlY3VyaXR5RW5hYmxlZCBzbV9tdHNfUHV0UHJvcGVydHlWYWx1ZSBzbV9tdHNfU2V0QWJvcnQgc21fbXRzX1NldENvbXBsZXRlIHNtX211c190aW1lIHNtX213X2dldF9jbGllbnRfd25kIHNtX213X2dldF9jbWRfc2hvdyBzbV9td19nZXRfZnJhbWVfd25kIHNtX213X2dldF9pbnN0YW5jZQorCitzeW4ga2V5d29yZCAgICAgamFtTGliRnVuYzcgICAgIHNtX213X2dldF9wcmV2X2luc3RhbmNlIHNtX213X1ByaW50U2NyZWVuIHNtX25leHRfc3luYyBzbV9ubCBzbV9udWxsIHNtX2VfbnVsbCBzbV9pX251bGwgc21fbl9udWxsIHNtX29fbnVsbCBzbV9vYmpfY2FsbCBzbV9vYmpfY29weSBzbV9vYmpfY29weV9pZCBzbV9vYmpfY3JlYXRlIHNtX29ial9kZWxldGUgc21fb2JqX2RlbGV0ZV9pZCBzbV9vYmpfZ2V0X3Byb3BlcnR5IHNtX29ial9vbmVycm9yIHNtX29ial9zZXRfcHJvcGVydHkgc21fb2JqX3NvcnQgc21fb2JqX3NvcnRfYXV0byBzbV9vY2N1cl9ubyBzbV9vZmZfZ29maWVsZCBzbV9lX29mZl9nb2ZpZWxkIHNtX2lfb2ZmX2dvZmllbGQgc21fbl9vZmZfZ29maWVsZCBzbV9vX29mZl9nb2ZpZWxkIHNtX29wdGlvbiBzbV9vcHRtbnVfaWQgc21fcGlucXVpcmUgc21fcG9wdXBfYXRfY3VyIHNtX3Byb3BfZXJyb3Igc21fcHJvcF9nZXRfaW50IHNtX3Byb3BfZ2V0X3N0ciBzbV9wcm9wX2dldF9kYmwgc21fcHJvcF9nZXRfeF9pbnQgc21fcHJvcF9nZXRfeF9zdHIgc21fcHJvcF9nZXRfeF9kYmwgc21fcHJvcF9nZXRfbV9pbnQgc21fcHJvcF9nZXRfbV9zdHIgc21fcHJvcF9nZXRfbV9kYmwgc21fcHJvcF9pZCBzbV9wcm9wX25hbWVfdG9faWQgc21fcHJvcF9zZXRfaW50IHNtX3Byb3Bfc2V0X3N0ciBzbV9wcm9wX3NldF9kYmwgc21fcHJvcF9zZXRfeF9pbnQgc21fcHJvcF9zZXRfeF9zdHIgc21fcHJvcF9zZXRfeF9kYmwgc21fcHJvcF9zZXRfbV9pbnQgc21fcHJvcF9zZXRfbV9zdHIgc21fcHJvcF9zZXRfbV9kYmwgc21fcHNldCBzbV9wdXRmaWVsZCBzbV9lX3B1dGZpZWxkIHNtX2lfcHV0ZmllbGQgc21fbl9wdXRmaWVsZCBzbV9vX3B1dGZpZWxkIHNtX3JhaXNlX2V4Y2VwdGlvbiBzbV9yZWNlaXZlIHNtX3JlY2VpdmVfYXJncyBzbV9yZXNjcmVlbiBzbV9yZXNldGNydCBzbV9qcmVzZXRjcnQgc21fanhyZXNldGNydCBzbV9yZXNpemUgc21fcmVzdG9yZV9kYXRhIHNtX3JldHVybiBzbV9yZXR1cm5fYXJncyBzbV9ybWZvcm1saXN0IHNtX3JzX2RhdGEKKworc3luIGtleXdvcmQgICAgIGphbUxpYkZ1bmM4ICAgICBzbV9yd19lcnJvcl9tZXNzYWdlIHNtX3J3X3BsYXlfbWV0YWZpbGUgc21fcndfcnVucmVwb3J0IHNtX3NfdmFsIHNtX3NhdmVfZGF0YSBzbV9zZHRpbWUgc21fc2VsZWN0IHNtX3NlbmQgc21fc2V0X2hlbHAgc21fc2V0YmtzdGF0IHNtX3NldHNpYmxpbmcgc21fc2V0c3RhdHVzIHNtX3NoX29mZiBzbV9zaGVsbCBzbV9zaHJpbmtfdG9fZml0IHNtX3NsaWJfZXJyb3Igc21fc2xpYl9pbnN0YWxsIHNtX3NsaWJfbG9hZCBzbV9zb3B0aW9uIHNtX3N0cmlwX2FtdF9wdHIgc21fZV9zdHJpcF9hbXRfcHRyIHNtX2lfc3RyaXBfYW10X3B0ciBzbV9uX3N0cmlwX2FtdF9wdHIgc21fb19zdHJpcF9hbXRfcHRyIHNtX3N2X2RhdGEgc21fc3ZfZnJlZSBzbV9zdnNjcmVlbiBzbV90YWIgc21fdG1fY2xlYXIgc21fdG1fY2xlYXJfbW9kZWxfZXZlbnRzIHNtX3RtX2NvbW1hbmQgc21fdG1fY29tbWFuZF9lbXNnc2V0IHNtX3RtX2NvbW1hbmRfZXJyc2V0IHNtX3RtX2NvbnRpbnVhdGlvbl92YWxpZGl0eSBzbV90bV9kYmlfY2hlY2tlciBzbV90bV9lcnJvciBzbV90bV9lcnJvcmxvZyBzbV90bV9ldmVudCBzbV90bV9ldmVudF9uYW1lIHNtX3RtX2ZhaWx1cmVfbWVzc2FnZSBzbV90bV9oYW5kbGluZyBzbV90bV9pbnF1aXJlIHNtX3RtX2lzZXQgc21fdG1fbXNnX2NvdW50X2Vycm9yIHNtX3RtX21zZ19lbXNnIHNtX3RtX21zZ19lcnJvciBzbV90bV9vbGRfYmlfY29udGV4dCBzbV90bV9wY29weSBzbV90bV9waW5xdWlyZSBzbV90bV9wb3BfbW9kZWxfZXZlbnQgc21fdG1fcHNldCBzbV90bV9wdXNoX21vZGVsX2V2ZW50IHNtX3RtcG5hbSBzbV90cF9leGVjIHNtX3RwX2ZyZWVfYXJnX2J1ZiBzbV90cF9nZW5faW5zZXJ0IHNtX3RwX2dlbl9zZWxfcmV0dXJuIHNtX3RwX2dlbl9zZWxfd2hlcmUgc21fdHBfZ2VuX3ZhbF9saW5rIHNtX3RwX2dlbl92YWxfcmV0dXJuIHNtX3RwX2dldF9zdmNfYWxpYXMgc21fdHBfZ2V0X3R1eF9jYWxsaWQgc21fdHJhbnNsYXRlY29vcmRzIHNtX3RzdF9hbGxfbWR0cworCitzeW4ga2V5d29yZCAgICAgamFtTGliRnVuYzkgICAgIHNtX3VkdGltZSBzbV91bmdldGtleSBzbV91bmxvYWRfc2NyZWVuIHNtX3Vuc3ZzY3JlZW4gc21fdXBkX3NlbGVjdCBzbV92YWxpZGF0ZSBzbV9uX3ZhbGlkYXRlIHNtX3Zpbml0IHNtX25fdmluaXQgc21fd2NvdW50IHNtX3dkZXNlbGVjdCBzbV93ZWJfZ2V0X2Nvb2tpZSBzbV93ZWJfaW52b2tlX3VybCBzbV93ZWJfbG9nX2Vycm9yIHNtX3dlYl9zYXZlX2dsb2JhbCBzbV93ZWJfc2V0X2Nvb2tpZSBzbV93ZWJfdW5zYXZlX2FsbF9nbG9iYWxzIHNtX3dlYl91bnNhdmVfZ2xvYmFsIHNtX213X3dpZGdldCBzbV9td2Vfd2lkZ2V0IHNtX213bl93aWRnZXQgc21feG1fd2lkZ2V0IHNtX3htZV93aWRnZXQgc21feG1uX3dpZGdldCBzbV93aW5fc2hyaW5rIHNtX2Rfd2luZG93IHNtX2RfYXRfY3VyIHNtX2xfd2luZG93IHNtX2xfYXRfY3VyIHNtX3Jfd2luZG93IHNtX3JfYXRfY3VyIHNtX3dpbnNpemUgc21fd3JvdGF0ZSBzbV93c2VsZWN0IHNtX25fd3NlbGVjdCBzbV93d19sZW5ndGggc21fbl93d19sZW5ndGggc21fd3dfcmVhZCBzbV9uX3d3X3JlYWQgc21fd3dfd3JpdGUgc21fbl93d193cml0ZSBzbV94bGF0ZV90YWJsZSBzbV94bV9nZXRfYmFzZV93aW5kb3cgc21feG1fZ2V0X2Rpc3BsYXkKKworc3luIGtleXdvcmQgICAgIGphbVZhcmlhYmxlMSAgICBTTV9TQ0NTX0lEIFNNX0VOVEVSVEVSTSBTTV9NQUxMT0MgU01fQ0FOQ0VMIFNNX0JBRFRFUk0gU01fRk5VTSBTTV9EWkVSTyBTTV9FWFBPTkVOVCBTTV9JTlZEQVRFIFNNX01BVEhFUlIgU01fRlJNREFUQSBTTV9OT0ZPUk0gU01fRlJNRVJSIFNNX0JBREtFWSBTTV9EVVBLRVkgU01fRVJST1IgU01fU1AxIFNNX1NQMiBTTV9SRU5UUlkgU01fTVVTVEZJTEwgU01fQUZPVlJGTFcgU01fVE9PX0ZFV19ESUdJVFMgIFNNX0NLRElHSVQgU01fSElUQU5ZIFNNX05PSEVMUCBTTV9NQVhIRUxQIFNNX09VVFJBTkdFIFNNX0VOVEVSVEVSTTEgU01fU1lTREFURSBTTV9EQVRGUk0gU01fREFUQ0xSIFNNX0RBVElOViBTTV9LU0RBVEEgU01fS1NFUlIgU01fS1NOT05FIFNNX0tTTU9SRSBTTV9EQVlBMSBTTV9EQVlBMiBTTV9EQVlBMyBTTV9EQVlBNCBTTV9EQVlBNSBTTV9EQVlBNiBTTV9EQVlBNyBTTV9EQVlMMSBTTV9EQVlMMiBTTV9EQVlMMyBTTV9EQVlMNCBTTV9EQVlMNSBTTV9EQVlMNiBTTV9EQVlMNyBTTV9NTlNDUl9MT0FEIFNNX01FTlVfSU5TVEFMTCBTTV9JTlNUREVGU0NSTCBTTV9JTlNUU0NST0xMIFNNX01PUkVEQVRBIFNNX1JFQURZIFNNX1dBSVQgU01fWUVTIFNNX05PIFNNX05PVEVNUCBTTV9GUk1IRUxQIFNNX0ZJTFZFUiBTTV9PTkxZT05FIFNNX1dNU01PVkUgU01fV01TU0laRSBTTV9XTVNPRkYgU01fTFBSSU5UIFNNX0ZNT0RFIFNNX05PRklMRSBTTV9OT1NFQ1ROIFNNX0ZGT1JNQVQgU01fRlJFQUQgU01fUlgxIFNNX1JYMiBTTV9SWDMgU01fVEFCTE9PSyBTTV9NSVNLRVQgU01fSUxMS0VUIFNNX0lMTEJSQSBTTV9NSVNEQkxLRVQgU01fSUxMREJMS0VUIFNNX0lMTERCTEJSQSBTTV9JTExfUklHSFQgU01fSUxMRUxTRSBTTV9OVU1CRVIgU01fRU9UIFNNX0JSRUFLIFNNX05PQVJHUyBTTV9CSUdWQVIgU01fRVhDRVNTIFNNX0VPTCBTTV9GSUxFSU8gU01fRk9SIFNNX1JDVVJMWSBTTV9OT05BTUUgU01fMUpQTF9FUlIgU01fMkpQTF9FUlIgU01fM0pQTF9FUlIKKworc3luIGtleXdvcmQgICAgIGphbVZhcmlhYmxlMiAgICBTTV9KUExBVENIIFNNX0ZPUk1BVCBTTV9ERVNUSU5BVElPTiBTTV9PUkFORCBTTV9PUkFUT1IgU01fSUxMX0xFRlQgU01fTUlTU1BBUkVOUyBTTV9JTExDTE9TRV9DT01NIFNNX0ZVTkNUSU9OIFNNX0VRVUFMUyBTTV9NSVNNQVRDSCBTTV9RVU9URSBTTV9TWU5UQVggU01fTkVYVCBTTV9WRVJCX1VOS05PV04gU01fSlBMRk9STSBTTV9OT1RfTE9BREVEIFNNX0dBX0ZMRyBTTV9HQV9DSEFSIFNNX0dBX0FSRyBTTV9HQV9ESUcgU01fTk9GVU5DIFNNX0JBRFBST1RPIFNNX0pQTFBVQkxJQyBTTV9OT0NPTVBJTEUgU01fTlVMTEVESVQgU01fUlBfTlVMTCBTTV9EQklfTk9UX0lOU1QgU01fTk9USlkgU01fTUFYTElCIFNNX0ZMX0ZMTElCIFNNX1RQSV9OT1RfSU5TVCBTTV9SV19OT1RfSU5TVCBTTV9NT05BMSBTTV9NT05BMiBTTV9NT05BMyBTTV9NT05BNCBTTV9NT05BNSBTTV9NT05BNiBTTV9NT05BNyBTTV9NT05BOCBTTV9NT05BOSBTTV9NT05BMTAgU01fTU9OQTExIFNNX01PTkExMiBTTV9NT05MMSBTTV9NT05MMiBTTV9NT05MMyBTTV9NT05MNCBTTV9NT05MNSBTTV9NT05MNiBTTV9NT05MNyBTTV9NT05MOCBTTV9NT05MOSBTTV9NT05MMTAgU01fTU9OTDExIFNNX01PTkwxMiBTTV9BTSBTTV9QTSBTTV8wREVGX0RUSU1FIFNNXzFERUZfRFRJTUUgU01fMkRFRl9EVElNRSBTTV8zREVGX0RUSU1FIFNNXzRERUZfRFRJTUUgU01fNURFRl9EVElNRSBTTV82REVGX0RUSU1FIFNNXzdERUZfRFRJTUUgU01fOERFRl9EVElNRSBTTV85REVGX0RUSU1FIFNNX0NBTENfREFURSBTTV9CQURfRElHSVQgU01fQkFEX1lOIFNNX0JBRF9BTFBIQSBTTV9CQURfTlVNIFNNX0JBRF9BTFBITlVNIFNNX0RFQ0lNQUwgU01fMVNUQVRTIFNNX1ZFUk5PIFNNX0RJR19FUlIgU01fWU5fRVJSIFNNX0xFVF9FUlIgU01fTlVNX0VSUiBTTV9BTlVNX0VSUiBTTV9SRVhQX0VSUiBTTV9QT1NOX0VSUiBTTV9GQlhfT1BFTiBTTV9GQlhfV0lORE9XIFNNX0ZCWF9TSUJMSU5HIFNNX09QRU5ESVIKKworc3luIGtleXdvcmQgICAgIGphbVZhcmlhYmxlMyAgICBTTV9HRVRGSUxFUyBTTV9DSERJUiBTTV9HRVRDV0QgU01fVU5DTE9TRURfQ09NTSBTTV9NQl9PS0xBQkVMIFNNX01CX0NBTkNFTExBQkVMIFNNX01CX1lFU0xBQkVMIFNNX01CX05PTEFCRUwgU01fTUJfUkVUUllMQUJFTCBTTV9NQl9JR05PUkVMQUJFTCBTTV9NQl9BQk9SVExBQkVMIFNNX01CX0hFTFBMQUJFTCBTTV9NQl9TVE9QIFNNX01CX1FVRVNUSU9OIFNNX01CX1dBUk5JTkcgU01fTUJfSU5GT1JNQVRJT04gU01fTUJfWUVTQUxMTEFCRUwgU01fME1OX0NVUlJERUYgU01fMU1OX0NVUlJERUYgU01fMk1OX0NVUlJERUYgU01fMERFRl9DVVJSIFNNXzFERUZfQ1VSUiBTTV8yREVGX0NVUlIgU01fM0RFRl9DVVJSIFNNXzRERUZfQ1VSUiBTTV81REVGX0NVUlIgU01fNkRFRl9DVVJSIFNNXzdERUZfQ1VSUiBTTV84REVGX0NVUlIgU01fOURFRl9DVVJSIFNNX1NFTkRfU1lOVEFYIFNNX1NFTkRfSVRFTSBTTV9TRU5EX0lOVkFMSURfQlVORExFIFNNX1JFQ0VJVkVfU1lOVEFYIFNNX1JFQ0VJVkVfSVRFTV9OVU1CRVIgU01fUkVDRUlWRV9PVkVSRkxPVyBTTV9SRUNFSVZFX0lURU0gU01fU1lOQ0hfUkVDRUlWRSBTTV9FWEVDX0ZBSUwgU01fRFlOQV9IRUxQX05PVF9BVkFJTCBTTV9ETExfTE9BRF9FUlIgU01fRExMX1VOUkVTT0xWRUQgU01fRExMX1ZFUlNJT05fRVJSIFNNX0RMTF9PUFRJT05fRVJSIFNNX0RFTU9FUlIgU01fTUJfT0tBTExMQUJFTCBTTV9NQl9OT0FMTExBQkVMIFNNX0JBRFBST1AgU01fQkVUV0VFTiBTTV9BVExFQVNUIFNNX0FUTU9TVCBTTV9QUl9FUlJPUiBTTV9QUl9PQkpJRCBTTV9QUl9PQkpFQ1QgU01fUFJfSVRFTSBTTV9QUl9QUk9QIFNNX1BSX1BST1BfSVRFTSBTTV9QUl9QUk9QX1ZBTCBTTV9QUl9DT05WRVJUIFNNX1BSX09CSl9UWVBFIFNNX1BSX1JBTkdFIFNNX1BSX05PX1NFVCBTTV9QUl9CWU5EX1NDUk4gU01fUFJfV1dfU0NST0xMIFNNX1BSX05PX1NZTkMgU01fUFJfVE9PX0JJRyBTTV9QUl9CQURfTUFTSyBTTV9FWEVDX01FTV9FUlIKKworc3luIGtleXdvcmQgICAgIGphbVZhcmlhYmxlNCAgICBTTV9FWEVDX05PX1BST0cgU01fUFJfTk9fS0VZU1RSVUNUIFNNX1JFT1BFTl9BU19TTElCIFNNX1JFT1BFTl9USEVfU0xJQiBTTV9FUlJMSUIgU01fV0FSTkxJQiBTTV9MSUJfRE9XTkdSQURFIFNNX09MREVSIFNNX05FV0VSIFNNX1VQR1JBREUgU01fTElCX1JFQURPTkxZIFNNX0xPUEVOX0VSUiBTTV9MT1BFTl9XQVJOIFNNX01MT1BFTl9DUkVBVCBTTV9NTE9QRU5fSU5JVCBTTV9MSUJfRVJSIFNNX0xJQl9JU09MQVRFIFNNX0xJQl9OT19FUlIgU01fTElCX1JFQ19FUlIgU01fTElCX0ZBVEFMX0VSUiBTTV9MSUJfTEVSUl9GSUxFIFNNX0xJQl9MRVJSX05PVExJQiBTTV9MSUJfTEVSUl9CQURWRVJTIFNNX0xJQl9MRVJSX0ZPUk1BVCBTTV9MSUJfTEVSUl9CQURDTSBTTV9MSUJfTEVSUl9MT0NLIFNNX0xJQl9MRVJSX1JFU0VSVkVEIFNNX0xJQl9MRVJSX1JFQURPTkxZIFNNX0xJQl9MRVJSX05PRU5UUlkgU01fTElCX0xFUlJfQlVTWSBTTV9MSUJfTEVSUl9ST1ZFUlMgU01fTElCX0xFUlJfREVGQVVMVCBTTV9MSUJfQkFEQ00gU01fTElCX0xFUlJfTkVXIFNNX1NUQU5EQUxPTkVfTU9ERSBTTV9GRUFUVVJFX1JFU1RSSUNUIEZNX0NIX0xPU1QgRk1fSlBMX1BST01QVCBGTV9ZUjQgRk1fWVIyIEZNX01PTiBGTV9NT04yIEZNX0RBVEUgRk1fREFURTIgRk1fSE9VUiBGTV9IT1VSMiBGTV9NSU4gRk1fTUlOMiBGTV9TRUMgRk1fU0VDMiBGTV9ZUkRBWSBGTV9BTVBNIEZNX0RBWUEgRk1fREFZTCBGTV9NT05BIEZNX01PTkwgRk1fME1OX0RFRl9EVCBGTV8xTU5fREVGX0RUIEZNXzJNTl9ERUZfRFQgRk1fREFZIEpNX1FURVJNSU5BVEUgSk1fSElUU1BBQ0UgSk1fSElUQUNLIEpNX05PSldJTiBVVF9NRU1FUlIgVVRfUF9PUFQgVVRfVl9PUFQgVVRfRV9CSU5PUFQgVVRfTk9fSU5QVVQgVVRfU0VDTE9ORyBVVF8xRk5BTUUgVVRfU0xJTkUgVVRfRklMRSBVVF9FUlJPUiBVVF9XQVJOSU5HIFVUX01JU1NFUSBVVF9WT1BUIFVUX00yX0RFU0NSCisKK3N5biBrZXl3b3JkICAgICBqYW1WYXJpYWJsZTUgICAgVVRfTTJfUFJPR05BTUUgVVRfTTJfVVNBR0UgVVRfTTJfT19PUFQgVVRfTTJfQ09NIFVUX00yX0JBRFRBRyBVVF9NMl9NU1NRVU9UIFVUX00yX0FGVFJRVU9UIFVUX00yX0RVUFNFQ1QgVVRfTTJfQkFEVUNMU1MgVVRfTTJfVVNFQ1BSRlggVVRfTTJfTVBUWVVTQ1QgVVRfTTJfRFVQTVNHVEcgVVRfTTJfVE9PTE9ORyBVVF9NMl9MT05HIFVUX0syX0RFU0NSIFVUX0syX1BST0dOQU1FIFVUX0syX1VTQUdFIFVUX0syX01ORU0gVVRfSzJfTktFWURFRiBVVF9LMl9EVVBLRVkgVVRfSzJfTk9URk9VTkQgVVRfSzJfMUZOQU1FIFVUX0syX1ZPUFQgVVRfSzJfRVhDSEFSIFVUX1YyX0RFU0NSIFVUX1YyX1BST0dOQU1FIFVUX1YyX1VTQUdFIFVUX1YyX1NMSU5FIFVUX1YyX1NFUVVBTCBVVF9WMl9TVkFSTkFNRSBVVF9WMl9TTkFNRSBVVF9WMl9WT1BUIFVUX1YyXzFSRVEgVVRfQ0JfREVTQ1IgVVRfQ0JfUFJPR05BTUUgVVRfQ0JfVVNBR0UgVVRfQ0JfVk9QVCBVVF9DQl9NSUVYVCBVVF9DQl9BRVhUIFVUX0NCX1VOS05PV04gVVRfQ0JfSVNDSEVNRSBVVF9DQl9CS0ZHUyBVVF9DQl9BQkdTIFVUX0NCX1JFQyBVVF9DQl9HVUkgVVRfQ0JfQ09OVCBVVF9DQl9DT05URkcgVVRfQ0JfQUZJTEUgVVRfQ0JfTEVGVF9RVU9URSBVVF9DQl9OT19FUVVBTCBVVF9DQl9FWFRSQV9FUSBVVF9DQl9CQURfTEhTIFVUX0NCX0JBRF9SSFMgVVRfQ0JfQkFEX1FVT1RFRCBVVF9DQl9GSUxFIFVUX0NCX0ZJTEVfTElORSBVVF9DQl9EVVBfQUxJQVMgVVRfQ0JfTElORV9MT09QIFVUX0NCX0JBRF9TVFlMRSBVVF9DQl9EVVBfU1RZTEUgVVRfQ0JfTk9fU0VDVCBVVF9DQl9EVVBfU0NIRU1FIERNX0VSUk9SIERNX05PREFUQUJBU0UgRE1fTk9UTE9HR0VET04gRE1fQUxSRUFEWV9PTiBETV9BUkdTX05FRURFRCBETV9MT0dPTl9ERU5JRUQgRE1fQkFEX0FSR1MgRE1fQkFEX0NNRCBETV9OT19NT1JFX1JPV1MgRE1fQUJPUlRFRCBETV9OT19DVVJTT1IgRE1fTUFOWV9DVVJTT1JTIERNX0tFWVdPUkQKKworc3luIGtleXdvcmQgICAgIGphbVZhcmlhYmxlNiAgICBETV9JTlZBTElEX0RBVEUgRE1fQ09NTUlUIERNX1JPTExCQUNLIERNX1BBUlNFX0VSUk9SIERNX0JJTkRfQ09VTlQgRE1fQklORF9WQVIgRE1fREVTQ19DT0wgRE1fRkVUQ0ggRE1fTk9fTkFNRSBETV9FTkRfT0ZfUFJPQyBETV9OT0NPTk5FQ1RJT04gRE1fTk9UU1VQUE9SVEVEIERNX1RSQU5fUEVORCBETV9OT19UUkFOU0FDVElPTiBETV9BTFJFQURZX0lOSVQgRE1fSU5JVF9FUlJPUiBETV9NQVhfREVQVEggRE1fTk9fUEFSRU5UIERNX05PX0NISUxEIERNX01PREFMSVRZX05PVF9GT1VORCBETV9OQVRJVkVfTk9fU1VQUE9SVCBETV9OQVRJVkVfQ0FOQ0VMIERNX1RNX0FMUkVBRFkgRE1fVE1fSU5fUFJPR1JFU1MgRE1fVE1fQ0xPU0VfRVJST1IgRE1fVE1fQkFEX01PREUgRE1fVE1fQkFEX0NMT1NFX0FDVElPTiBETV9UTV9JTlRFUk5BTCBETV9UTV9NT0RFTF9JTlRFUk5BTCBETV9UTV9OT19ST09UIERNX1RNX05PX1RSQU5TQUNUSU9OIERNX1RNX0lOSVRJQUxfTU9ERSBETV9UTV9QQVJFTlRfTkFNRSBETV9UTV9CQURfTUVNQkVSIERNX1RNX0ZMRF9OQU1fTEVOIERNX1RNX05PX1BBUkVOVCBETV9UTV9CQURfUkVRVUVTVCBETV9UTV9DQU5OT1RfR0VOX1NRTCBETV9UTV9DQU5OT1RfRVhFQ19TUUwgRE1fVE1fREJJX0VSUk9SIERNX1RNX0RJU0NBUkRfQUxMIERNX1RNX0RJU0NBUkRfTEFURVNUIERNX1RNX0NBTExfRVJST1IgRE1fVE1fQ0FMTF9UWVBFIERNX1RNX0hPT0tfTU9ERUwgRE1fVE1fUk9PVF9OQU1FIERNX1RNX1RWX0lOVkFMSUQgRE1fVE1fQ09MX05PVF9GT1VORCBETV9UTV9CQURfTElOSyBETV9UTV9IT09LX01PREVMX0VSUk9SIERNX1RNX09ORV9ST1cgRE1fVE1fU09NRV9ST1dTIERNX1RNX0dFTkVSQUwgRE1fVE1fTk9fSE9PSyBETV9UTV9OT1NFVCBETV9UTV9UQkxOQU1FIERNX1RNX1BSSU1BUllfS0VZIERNX1RNX0lOQ09NUExFVEVfS0VZIERNX1RNX0NNRF9NT0RFIERNX1RNX05PX1NVQ0hfQ01EIERNX1RNX05PX1NVQ0hfU0NPUEUKKworc3luIGtleXdvcmQgICAgIGphbVZhcmlhYmxlNyAgICBETV9UTV9OT19TVUNIX1RWIERNX1RNX0VWRU5UX0xPT1AgRE1fVE1fVU5TVVBQT1JURUQgRE1fVE1fTk9fTU9ERUwgRE1fVE1fU1lOQ0hfU1YgRE1fVE1fV1JPTkdfRk9STSAgRE1fVE1fVkNfRklFTEQgRE1fVE1fVkNfREFURSBETV9UTV9WQ19UWVBFIERNX1RNX0JBRF9DT05USU5VRSBETV9KREJfT1VUX09GX01FTU9SWSBETV9KREJfRFVQVEFCTEVBTElBUyBETV9KREJfRFVQQ1VSU09STkFNRSBETV9KREJfTk9EQiBETV9KREJfQklORENPVU5UIERNX0pEQl9OT19NT1JFX1JPV1MgRE1fSkRCX0FNQklHVU9VU19DT0xVTU5fUkVGIERNX0pEQl9VTlJFU09MVkVEX0NPTFVNTl9SRUYgRE1fSkRCX1RBQkxFX1JFQURfV1JJVEVfQ09ORkxJQ1QgRE1fSkRCX1NZTlRBWF9FUlJPUiBETV9KREJfRFVQX0NPTFVNTl9BU1NJR05NRU5UIERNX0pEQl9OT19NU0dfRklMRSBETV9KREJfTk9fTVNHIERNX0pEQl9OT1RfSU1QTEVNRU5URUQgRE1fSkRCX0FHR1JFR0FURV9OT1RfQUxMT1dFRCBETV9KREJfVFlQRV9NSVNNQVRDSCBETV9KREJfTk9fQ1VSUkVOVF9ST1cgRE1fSkRCX0RCX0NPUlJVUFQgRE1fSkRCX0JVRl9PVkVSRkxPVyBETV9KREJfRklMRV9JT19FUlIgRE1fSkRCX0JBRF9IQU5ETEUgRE1fSkRCX0RVUF9UTkFNRSBETV9KREJfSU5WQUxJRF9UQUJMRV9PUCBETV9KREJfVEFCTEVfTk9UX0ZPVU5EIERNX0pEQl9DT05WRVJTSU9OX0ZBSUxFRCBETV9KREJfSU5WQUxJRF9DT0xVTU5fTElTVCBETV9KREJfVEFCTEVfT1BFTiBETV9KREJfQkFEX0lOUFVUIERNX0pEQl9EQVRBVFlQRV9PVkVSRkxPVyBETV9KREJfREFUQUJBU0VfRVhJU1RTIERNX0pEQl9EQVRBQkFTRV9PUEVOIERNX0pEQl9EVVBfQ05BTUUgRE1fSkRCX1RNUERBVEFCQVNFX0VSUiBETV9KREJfSU5WQUxJRF9WQUxVRVNfQ09VTlQgRE1fSkRCX0lOVkFMSURfQ09MVU1OX0NPVU5UIERNX0pEQl9NQVhfUkVDTEVOX0VYQ0VFREVEIERNX0pEQl9FTkRfT0ZfR1JPVVAKKworc3luIGtleXdvcmQgICAgIGphbVZhcmlhYmxlOCAgICBUUF9FWENfSU5WQUxJRF9DTElFTlRfQ09NTUFORCAgVFBfRVhDX0lOVkFMSURfQ0xJRU5UX09QVElPTiAgVFBfRVhDX0lOVkFMSURfQ09NTUFORCBUUF9FWENfSU5WQUxJRF9DT01NQU5EX1NZTlRBWCBUUF9FWENfSU5WQUxJRF9DT05ORUNUSU9OIFRQX0VYQ19JTlZBTElEX0NPTlRFWFQgVFBfRVhDX0lOVkFMSURfRk9SV0FSRCBUUF9FWENfSU5WQUxJRF9KQU1fVkFSSUFCTEVfUkVGICBUUF9FWENfSU5WQUxJRF9NT05JVE9SX0NPTU1BTkQgVFBfRVhDX0lOVkFMSURfTU9OSVRPUl9PUFRJT04gVFBfRVhDX0lOVkFMSURfT1BUSU9OIFRQX0VYQ19JTlZBTElEX09QVElPTl9WQUxVRSAgVFBfRVhDX0lOVkFMSURfU0VSVkVSX0NPTU1BTkQgVFBfRVhDX0lOVkFMSURfU0VSVkVSX09QVElPTiBUUF9FWENfSU5WQUxJRF9TRVJWSUNFIFRQX0VYQ19JTlZBTElEX1RSQU5TQUNUSU9OIFRQX0VYQ19KSUZfQUNDRVNTX0ZBSUxFRCBUUF9FWENfSklGX0xPV0VSX1ZFUlNJT04gVFBfRVhDX0xPR0ZJTEVfRVJST1IgVFBfRVhDX01PTklUT1JfRVJST1IgVFBfRVhDX05PX09VVFNJREVfVFJBTlNBQ1RJT04gVFBfRVhDX05PX09VVFNUQU5ESU5HX0NBTExTIFRQX0VYQ19OT19PVVRTVEFORElOR19NRVNTQUdFIFRQX0VYQ19OT19TRVJWSUNFU19BRFZFUlRJU0VEIFRQX0VYQ19OT19TSUdOQUxTIFRQX0VYQ19OT05UUkFOU0FDVElPTkFMX1NFUlZJQ0UgVFBfRVhDX05PTlRSQU5TQUNUSU9OQUxfQUNUSU9OIFRQX0VYQ19PVVRfT0ZfTUVNT1JZIFRQX0VYQ19QT1NUSU5HX0ZBSUxFRCBUUF9FWENfUEVSTUlTU0lPTl9ERU5JRUQgIFRQX0VYQ19SRVFVRVNUX0xJTUlUIFRQX0VYQ19ST0xMQkFDS19DT01NSVRURUQgIFRQX0VYQ19ST0xMQkFDS19GQUlMRUQgVFBfRVhDX1NFUlZJQ0VfRkFJTEVEIFRQX0VYQ19TRVJWSUNFX05PVF9JTl9KSUYgIFRQX0VYQ19TRVJWSUNFX1BST1RPQ09MX0VSUk9SICBUUF9FWENfU1VCU0NSSVBUSU9OX0xJTUlUCisKK3N5biBrZXl3b3JkICAgICBqYW1WYXJpYWJsZTkgICAgVFBfRVhDX1NVQlNDUklQVElPTl9NQVRDSCBUUF9FWENfU1ZDX0FEVkVSVElTRV9MSU1JVCBUUF9FWENfU1ZDX1dPUktfT1VUU1RBTkRJTkcgVFBfRVhDX1NWQ1JPVVRJTkVfTUlTU0lORyBUUF9FWENfU1ZSSU5JVF9XT1JLX09VVFNUQU5ESU5HIFRQX0VYQ19USU1FT1VUIFRQX0VYQ19UUkFOU0FDVElPTl9MSU1JVCBUUF9FWENfVU5MT0FEX0ZBSUxFRCBUUF9FWENfVU5TVVBQT1JURURfQlVGRkVSIFRQX0VYQ19VTlNVUFBPUlRFRF9CVUZfV19TVUJUIFRQX0VYQ19VU0VSX0FCT1JUIFRQX0VYQ19XT1JLX09VVFNUQU5ESU5HIFRQX0VYQ19YQV9DTE9TRV9GQUlMRUQgVFBfRVhDX1hBX09QRU5fRkFJTEVEIFRQX0VYQ19RVUVVRV9CQURfTVNHSUQgVFBfRVhDX1FVRVVFX0JBRF9OQU1FU1BBQ0UgVFBfRVhDX1FVRVVFX0JBRF9RVUVVRSBUUF9FWENfUVVFVUVfQ0FOVF9TVEFSVF9UUkFOIFRQX0VYQ19RVUVVRV9GVUxMIFRQX0VYQ19RVUVVRV9NU0dfSU5fVVNFIFRQX0VYQ19RVUVVRV9OT19NU0cgVFBfRVhDX1FVRVVFX05PVF9JTl9RU1BBQ0UgVFBfRVhDX1FVRVVFX1JTUkNfTk9UX09QRU4gVFBfRVhDX1FVRVVFX1NQQUNFX05PVF9JTl9KSUYgVFBfRVhDX1FVRVVFX1RSQU5fQUJPUlRFRCBUUF9FWENfUVVFVUVfVFJBTl9BQlNFTlQgVFBfRVhDX1FVRVVFX1VORVhQRUNURUQgVFBfRVhDX0RDRV9MT0dJTl9SRVFVSVJFRCBUUF9FWENfRU5DX0NFTExfTkFNRV9SRVFVSVJFRCBUUF9FWENfRU5DX0NPTk5fSU5GT19ESUZGUyBUUF9FWENfRU5DX1NWQ19SRUdJU1RSWV9FUlJPUiBUUF9JTlZBTElEX1NUQVJUX1JPVVRJTkUgVFBfSklGX05PVF9GT1VORCBUUF9KSUZfT1BFTl9FUlJPUiBUUF9OT19KSUYgVFBfTk9fTU9OSVRPUlNfRVJST1IgVFBfTk9fU0VTU0lPTlNfRVJST1IgVFBfTk9fU1RBUlRfUk9VVElORSBUUF9BRFZfU0VSVklDRSBUUF9BRFZfU0VSVklDRV9JTl9HUk9VUCAgVFBfUFJFX1NWQ0hETF9XSU5PUEVOX0ZBSUxFRAorCitzeW4ga2V5d29yZCAgICAgamFtVmFyaWFibGUxMCAgIFBWX1lFUyBQVl9OTyBUUlVFIEZBTFNFIFRNX1RSQU5fTkFNRQorCisiIGphbUNvbW1lbnRHcm91cCBhbGxvd3MgYWRkaW5nIG1hdGNoZXMgZm9yIHNwZWNpYWwgdGhpbmdzIGluIGNvbW1lbnRzCitzeW4gY2x1c3RlcglqYW1Db21tZW50R3JvdXAJY29udGFpbnM9amFtVG9kbworCisiIFN0cmluZyBhbmQgQ2hhcmFjdGVyIGNvbnN0YW50cworIiBIaWdobGlnaHQgc3BlY2lhbCBjaGFyYWN0ZXJzICh0aG9zZSB3aGljaCBoYXZlIGEgYmFja3NsYXNoKSBkaWZmZXJlbnRseQorc3luIG1hdGNoCWphbVNwZWNpYWwJY29udGFpbmVkICJcXFwoeFx4XCtcfFxvXHsxLDN9XHwuXHwkXCkiCitpZiAhZXhpc3RzKCJjX25vX3V0ZiIpCisgIHN5biBtYXRjaAlqYW1TcGVjaWFsCWNvbnRhaW5lZCAiXFxcKHVceFx7NH1cfFVceFx7OH1cKSIKK2VuZGlmCitpZiBleGlzdHMoImNfbm9fY2Zvcm1hdCIpCisgIHN5biByZWdpb24JamFtU3RyaW5nCQlzdGFydD0rTFw9Iisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPWNTcGVjaWFsCitlbHNlCisgIHN5biBtYXRjaAlqYW1Gb3JtYXQJCSIlXChcZFwrXCRcKVw9Wy0rJyAjMCpdKlwoXGQqXHxcKlx8XCpcZFwrXCRcKVwoXC5cKFxkKlx8XCpcfFwqXGRcK1wkXClcKVw9XChbaGxMXVx8bGxcKVw9XChbZGl1b3hYZmVFZ0djQ3NTcG5dXHxcW1xeXD0uW15dXSpcXVwpIiBjb250YWluZWQKKyAgc3luIG1hdGNoCWphbUZvcm1hdAkJIiUlIiBjb250YWluZWQKKyAgc3luIHJlZ2lvbglqYW1TdHJpbmcJCXN0YXJ0PStMXD0iKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9Y1NwZWNpYWwsY0Zvcm1hdAorICBoaSBsaW5rIGphbUZvcm1hdCBqYW1TcGVjaWFsCitlbmRpZgorc3luIG1hdGNoCWphbUNoYXJhY3RlcgkiTFw9J1teXFxdJyIKK3N5biBtYXRjaAlqYW1DaGFyYWN0ZXIJIkwnW14nXSonIiBjb250YWlucz1qYW1TcGVjaWFsCitzeW4gbWF0Y2gJamFtU3BlY2lhbEVycm9yCSJMXD0nXFxbXidcIj9cXGFiZm5ydHZdJyIKK3N5biBtYXRjaAlqYW1TcGVjaWFsQ2hhcmFjdGVyICJMXD0nXFxbJ1wiP1xcYWJmbnJ0dl0nIgorc3luIG1hdGNoCWphbVNwZWNpYWxDaGFyYWN0ZXIgIkxcPSdcXFxvXHsxLDN9JyIKK3N5biBtYXRjaAlqYW1TcGVjaWFsQ2hhcmFjdGVyICInXFx4XHhcezEsMn0nIgorc3luIG1hdGNoCWphbVNwZWNpYWxDaGFyYWN0ZXIgIkwnXFx4XHhcKyciCisKKyJjYXRjaCBlcnJvcnMgY2F1c2VkIGJ5IHdyb25nIHBhcmVudGhlc2lzIGFuZCBicmFja2V0cworc3luIGNsdXN0ZXIJamFtUGFyZW5Hcm91cAljb250YWlucz1qYW1QYXJlbkVycm9yLGphbUluY2x1ZGVkLGphbVNwZWNpYWwsQGphbUNvbW1lbnRHcm91cCxqYW1Vc2VyQ29udCxqYW1Vc2VyTGFiZWwsamFtQml0RmllbGQsamFtQ29tbWVudFNraXAsamFtT2N0YWxaZXJvLGphbUNwcE91dCxqYW1DcHBPdXQyLGphbUNwcFNraXAsamFtRm9ybWF0LGphbU51bWJlcixqYW1GbG9hdCxqYW1PY3RhbCxqYW1PY3RhbEVycm9yLGphbU51bWJlcnNDb20KKworc3luIHJlZ2lvbglqYW1QYXJlbgkJdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULEBqYW1QYXJlbkdyb3VwLGphbUVyckluQnJhY2tldAorc3luIG1hdGNoCWphbVBhcmVuRXJyb3IJIltcXSldIgorc3luIG1hdGNoCWphbUVyckluUGFyZW4JY29udGFpbmVkICJbXF17fV0iCitzeW4gcmVnaW9uCWphbUJyYWNrZXQJdHJhbnNwYXJlbnQgc3RhcnQ9J1xbJyBlbmQ9J10nIGNvbnRhaW5zPUFMTEJVVCxAamFtUGFyZW5Hcm91cCxqYW1FcnJJblBhcmVuCitzeW4gbWF0Y2gJamFtRXJySW5CcmFja2V0CWNvbnRhaW5lZCAiWyk7e31dIgorCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90IGFuZCB3aXRoICJmIi4KK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoCWphbU51bWJlcnMJdHJhbnNwYXJlbnQgIlw8XGRcfFwsXGQiIGNvbnRhaW5zPWphbU51bWJlcixqYW1GbG9hdCxqYW1PY3RhbEVycm9yLGphbU9jdGFsCisiIFNhbWUsIGJ1dCB3aXRob3V0IG9jdGFsIGVycm9yIChmb3IgY29tbWVudHMpCitzeW4gbWF0Y2gJamFtTnVtYmVyc0NvbQljb250YWluZWQgdHJhbnNwYXJlbnQgIlw8XGRcfFwsXGQiIGNvbnRhaW5zPWphbU51bWJlcixqYW1GbG9hdCxqYW1PY3RhbAorc3luIG1hdGNoCWphbU51bWJlcgkJY29udGFpbmVkICJcZFwrXCh1XD1sXHswLDJ9XHxsbFw9dVwpXD4iCisiaGV4IG51bWJlcgorc3luIG1hdGNoCWphbU51bWJlcgkJY29udGFpbmVkICIweFx4XCtcKHVcPWxcezAsMn1cfGxsXD11XClcPiIKKyIgRmxhZyB0aGUgZmlyc3QgemVybyBvZiBhbiBvY3RhbCBudW1iZXIgYXMgc29tZXRoaW5nIHNwZWNpYWwKK3N5biBtYXRjaAlqYW1PY3RhbAkJY29udGFpbmVkICIwXG9cK1wodVw9bFx7MCwyfVx8bGxcPXVcKVw+IiBjb250YWlucz1jT2N0YWxaZXJvCitzeW4gbWF0Y2gJamFtT2N0YWxaZXJvCWNvbnRhaW5lZCAiXDwwIgorc3luIG1hdGNoCWphbUZsb2F0CQljb250YWluZWQgIlxkXCtmIgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2gJamFtRmxvYXQJCWNvbnRhaW5lZCAiXGRcK1wsXGQqXChlWy0rXVw9XGRcK1wpXD1bZmxdXD0iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoCWphbUZsb2F0CQljb250YWluZWQgIlwsXGRcK1woZVstK11cPVxkXCtcKVw9W2ZsXVw9XD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRob3V0IGRvdCwgd2l0aCBleHBvbmVudAorc3luIG1hdGNoCWphbUZsb2F0CQljb250YWluZWQgIlxkXCtlWy0rXVw9XGRcK1tmbF1cPVw+IgorIiBmbGFnIGFuIG9jdGFsIG51bWJlciB3aXRoIHdyb25nIGRpZ2l0cworc3luIG1hdGNoCWphbU9jdGFsRXJyb3IJY29udGFpbmVkICIwXG8qWzg5XVxkKiIKK3N5biBjYXNlIG1hdGNoCisKK3N5bnRheCBtYXRjaAlqYW1PcGVyYXRvcjEJIlwjXCMiCitzeW50YXggbWF0Y2gJamFtT3BlcmF0b3I2CSIvIgorc3ludGF4IG1hdGNoCWphbU9wZXJhdG9yMgkiKyIKK3N5bnRheCBtYXRjaAlqYW1PcGVyYXRvcjMJIioiCitzeW50YXggbWF0Y2gJamFtT3BlcmF0b3I0CSItIgorc3ludGF4IG1hdGNoCWphbU9wZXJhdG9yNQkifCIKK3N5bnRheCBtYXRjaAlqYW1PcGVyYXRvcjYJIi8iCitzeW50YXggbWF0Y2gJamFtT3BlcmF0b3I3CSImIgorc3ludGF4IG1hdGNoCWphbU9wZXJhdG9yOAkiOiIKK3N5bnRheCBtYXRjaAlqYW1PcGVyYXRvcjkJIjwiCitzeW50YXggbWF0Y2gJamFtT3BlcmF0b3IxMAkiPiIKK3N5bnRheCBtYXRjaAlqYW1PcGVyYXRvcjExCSIhIgorc3ludGF4IG1hdGNoCWphbU9wZXJhdG9yMTIJIiUiCitzeW50YXggbWF0Y2gJamFtT3BlcmF0b3IxMwkiXiIKK3N5bnRheCBtYXRjaAlqYW1PcGVyYXRvcjE0CSJAIgorCitzeW50YXggbWF0Y2gJamFtQ29tbWVudEwJIi8vIgorCitpZiBleGlzdHMoImphbV9jb21tZW50X3N0cmluZ3MiKQorICAiIEEgY29tbWVudCBjYW4gY29udGFpbiBqYW1TdHJpbmcsIGphbUNoYXJhY3RlciBhbmQgamFtTnVtYmVyLgorICAiIEJ1dCBhICIqLyIgaW5zaWRlIGEgamFtU3RyaW5nIGluIGEgamFtQ29tbWVudCBET0VTIGVuZCB0aGUgY29tbWVudCEgIFNvIHdlCisgICIgbmVlZCB0byB1c2UgYSBzcGVjaWFsIHR5cGUgb2YgamFtU3RyaW5nOiBqYW1Db21tZW50U3RyaW5nLCB3aGljaCBhbHNvIGVuZHMgb24KKyAgIiAiKi8iLCBhbmQgc2VlcyBhICIqIiBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgYXMgY29tbWVudCBhZ2Fpbi4KKyAgIiBVbmZvcnR1bmF0ZWx5IHRoaXMgZG9lc24ndCB2ZXJ5IHdlbGwgd29yayBmb3IgLy8gdHlwZSBvZiBjb21tZW50cyA6LSgKKyAgc3ludGF4IG1hdGNoCWphbUNvbW1lbnRTa2lwCWNvbnRhaW5lZCAiXlxzKlwqXCgkXHxcc1wrXCkiCisgIHN5bnRheCByZWdpb24gamFtQ29tbWVudFN0cmluZwljb250YWluZWQgc3RhcnQ9K0xcPSIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBlbmQ9K1wqLyttZT1zLTEgY29udGFpbnM9amFtU3BlY2lhbCxqYW1Db21tZW50U2tpcAorICBzeW50YXggcmVnaW9uIGphbUNvbW1lbnQyU3RyaW5nCWNvbnRhaW5lZCBzdGFydD0rTFw9Iisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGVuZD0iJCIgY29udGFpbnM9amFtU3BlY2lhbAorICBzeW50YXggcmVnaW9uICBqYW1Db21tZW50TAlzdGFydD0iLy8iIHNraXA9IlxcJCIgZW5kPSIkIiBrZWVwZW5kIGNvbnRhaW5zPUBqYW1Db21tZW50R3JvdXAsamFtQ29tbWVudDJTdHJpbmcsamFtQ2hhcmFjdGVyLGphbU51bWJlcnNDb20samFtU3BhY2VFcnJvcgorICBzeW50YXggcmVnaW9uICBqYW1Db21tZW50TDIJCSAgc3RhcnQ9Il4jXHxeXHNcK1wjIiBza2lwPSJcXCQiIGVuZD0iJCIga2VlcGVuZCBjb250YWlucz1AamFtQ29tbWVudEdyb3VwLGphbUNvbW1lbnQyU3RyaW5nLGphbUNoYXJhY3RlcixqYW1OdW1iZXJzQ29tLGphbVNwYWNlRXJyb3IKKyAgc3ludGF4IHJlZ2lvbiBqYW1Db21tZW50CXN0YXJ0PSIvXCoiIGVuZD0iXCovIiBjb250YWlucz1AamFtQ29tbWVudEdyb3VwLGphbUNvbW1lbnRTdHJpbmcsamFtQ2hhcmFjdGVyLGphbU51bWJlcnNDb20samFtU3BhY2VFcnJvcgorZWxzZQorICBzeW4gcmVnaW9uCWphbUNvbW1lbnRMCXN0YXJ0PSIvLyIgc2tpcD0iXFwkIiBlbmQ9IiQiIGtlZXBlbmQgY29udGFpbnM9QGphbUNvbW1lbnRHcm91cCxqYW1TcGFjZUVycm9yCisgIHN5biByZWdpb24JamFtQ29tbWVudEwyICAgICAgc3RhcnQ9Il5cI1x8XlxzXCtcIyIgc2tpcD0iXFwkIiBlbmQ9IiQiIGtlZXBlbmQgY29udGFpbnM9QGphbUNvbW1lbnRHcm91cCxqYW1TcGFjZUVycm9yCisgIHN5biByZWdpb24JamFtQ29tbWVudAlzdGFydD0iL1wqIiBlbmQ9IlwqLyIgY29udGFpbnM9QGphbUNvbW1lbnRHcm91cCxqYW1TcGFjZUVycm9yCitlbmRpZgorCisiIGtlZXAgYSAvLyBjb21tZW50IHNlcGFyYXRlbHksIGl0IHRlcm1pbmF0ZXMgYSBwcmVwcm9jLiBjb25kaXRpb25hbAorc3ludGF4IG1hdGNoCWphbUNvbW1lbnRFcnJvcgkiXCovIgorCitzeW50YXggbWF0Y2ggICAgamFtT3BlcmF0b3IzRXJyb3IgICAiKi8iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2phbV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9qYW1fc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAgIEhpTGluayBqYW1Db21tZW50TAkJamFtQ29tbWVudAorICAgIEhpTGluayBqYW1Db21tZW50TDIJCWphbUNvbW1lbnQKKyAgICBIaUxpbmsgamFtT3BlcmF0b3IzRXJyb3IJamFtRXJyb3IKKyAgICBIaUxpbmsgamFtQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgICBIaUxpbmsgamFtUmVwZWF0CQlSZXBlYXQKKyAgICBIaUxpbmsgamFtQ2hhcmFjdGVyCQlDaGFyYWN0ZXIKKyAgICBIaUxpbmsgamFtU3BlY2lhbENoYXJhY3RlcglqYW1TcGVjaWFsCisgICAgSGlMaW5rIGphbU51bWJlcgkJTnVtYmVyCisgICAgSGlMaW5rIGphbVBhcmVuRXJyb3IJamFtRXJyb3IKKyAgICBIaUxpbmsgamFtRXJySW5QYXJlbglqYW1FcnJvcgorICAgIEhpTGluayBqYW1FcnJJbkJyYWNrZXQJamFtRXJyb3IKKyAgICBIaUxpbmsgamFtQ29tbWVudEVycm9yCWphbUVycm9yCisgICAgSGlMaW5rIGphbVNwYWNlRXJyb3IJamFtRXJyb3IKKyAgICBIaUxpbmsgamFtU3BlY2lhbEVycm9yCWphbUVycm9yCisgICAgSGlMaW5rIGphbU9wZXJhdG9yMQkJamFtT3BlcmF0b3IKKyAgICBIaUxpbmsgamFtT3BlcmF0b3IyCQlqYW1PcGVyYXRvcgorICAgIEhpTGluayBqYW1PcGVyYXRvcjMJCWphbU9wZXJhdG9yCisgICAgSGlMaW5rIGphbU9wZXJhdG9yNAkJamFtT3BlcmF0b3IKKyAgICBIaUxpbmsgamFtT3BlcmF0b3I1CQlqYW1PcGVyYXRvcgorICAgIEhpTGluayBqYW1PcGVyYXRvcjYJCWphbU9wZXJhdG9yCisgICAgSGlMaW5rIGphbU9wZXJhdG9yNwkJamFtT3BlcmF0b3IKKyAgICBIaUxpbmsgamFtT3BlcmF0b3I4CQlqYW1PcGVyYXRvcgorICAgIEhpTGluayBqYW1PcGVyYXRvcjkJCWphbU9wZXJhdG9yCisgICAgSGlMaW5rIGphbU9wZXJhdG9yMTAJamFtT3BlcmF0b3IKKyAgICBIaUxpbmsgamFtT3BlcmF0b3IxMQlqYW1PcGVyYXRvcgorICAgIEhpTGluayBqYW1PcGVyYXRvcjEyCWphbU9wZXJhdG9yCisgICAgSGlMaW5rIGphbU9wZXJhdG9yMTMJamFtT3BlcmF0b3IKKyAgICBIaUxpbmsgamFtT3BlcmF0b3IxNAlqYW1PcGVyYXRvcgorICAgIEhpTGluayBqYW1FcnJvcgkJRXJyb3IKKyAgICBIaUxpbmsgamFtU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgICBIaUxpbmsgamFtUHJlQ29uZGl0CQlQcmVDb25kaXQKKyAgICBIaUxpbmsgamFtQ29tbWVudEVycm9yCWphbUVycm9yCisgICAgSGlMaW5rIGphbUNvbW1lbnRTdHJpbmcJamFtU3RyaW5nCisgICAgSGlMaW5rIGphbUNvbW1lbnQyU3RyaW5nCWphbVN0cmluZworICAgIEhpTGluayBqYW1Db21tZW50U2tpcAlqYW1Db21tZW50CisgICAgSGlMaW5rIGphbVN0cmluZwkJU3RyaW5nCisgICAgSGlMaW5rIGphbUNvbW1lbnQJCUNvbW1lbnQKKyAgICBIaUxpbmsgamFtU3BlY2lhbAkJU3BlY2lhbENoYXIKKyAgICBIaUxpbmsgamFtVG9kbwkJVG9kbworICAgIEhpTGluayBqYW1DcHBTa2lwCQlqYW1DcHBPdXQKKyAgICBIaUxpbmsgamFtQ3BwT3V0MgkJamFtQ3BwT3V0CisgICAgSGlMaW5rIGphbUNwcE91dAkJQ29tbWVudAorICAgIEhpTGluayBqYW1EQlN0YXRlMQkJSWRlbnRpZmllcgorICAgIEhpTGluayBqYW1EQlN0YXRlMgkJSWRlbnRpZmllcgorICAgIEhpTGluayBqYW1TUUxTdGF0ZTEJCWphbVNRTAorICAgIEhpTGluayBqYW1TUUxTdGF0ZTIJCWphbVNRTAorICAgIEhpTGluayBqYW1MaWJGdW5jMQkJamFtTGliRnVuYworICAgIEhpTGluayBqYW1MaWJGdW5jMgkJamFtTGliRnVuYworICAgIEhpTGluayBqYW1MaWJGdW5jMwkJamFtTGliRnVuYworICAgIEhpTGluayBqYW1MaWJGdW5jNAkJamFtTGliRnVuYworICAgIEhpTGluayBqYW1MaWJGdW5jNQkJamFtTGliRnVuYworICAgIEhpTGluayBqYW1MaWJGdW5jNgkJamFtTGliRnVuYworICAgIEhpTGluayBqYW1MaWJGdW5jNwkJamFtTGliRnVuYworICAgIEhpTGluayBqYW1MaWJGdW5jOAkJamFtTGliRnVuYworICAgIEhpTGluayBqYW1MaWJGdW5jOQkJamFtTGliRnVuYworICAgIEhpTGluayBqYW1WYXJpYWJsZTEJCWphbVZhcmlhYmxlbgorICAgIEhpTGluayBqYW1WYXJpYWJsZTIJCWphbVZhcmlhYmxlbgorICAgIEhpTGluayBqYW1WYXJpYWJsZTMJCWphbVZhcmlhYmxlbgorICAgIEhpTGluayBqYW1WYXJpYWJsZTQJCWphbVZhcmlhYmxlbgorICAgIEhpTGluayBqYW1WYXJpYWJsZTUJCWphbVZhcmlhYmxlbgorICAgIEhpTGluayBqYW1WYXJpYWJsZTYJCWphbVZhcmlhYmxlbgorICAgIEhpTGluayBqYW1WYXJpYWJsZTcJCWphbVZhcmlhYmxlbgorICAgIEhpTGluayBqYW1WYXJpYWJsZTgJCWphbVZhcmlhYmxlbgorICAgIEhpTGluayBqYW1WYXJpYWJsZTkJCWphbVZhcmlhYmxlbgorICAgIEhpTGluayBqYW1WYXJpYWJsZTEwCWphbVZhcmlhYmxlbgorICAgIEhpTGluayBqYW1WYXJpYWJsZW4JCUNvbnN0YW50CisgICAgSGlMaW5rIGphbVNRTAkJVHlwZQorICAgIEhpTGluayBqYW1MaWJGdW5jCQlQcmVQcm9jCisgICAgSGlMaW5rIGphbU9wZXJhdG9yCQlTcGVjaWFsCisKKyAgICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiamFtIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvamFyZ29uLnZpbSBiL3J1bnRpbWUvc3ludGF4L2phcmdvbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhODhiYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2phcmdvbi52aW0KQEAgLTAsMCArMSwzNiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUphcmdvbiBGaWxlCisiIE1haW50YWluZXI6CTxybXNAcG9jenRhLm9uZXQucGw+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAyNgorIgorIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworc3luIG1hdGNoIGphcmdvbkNoYXB0VGl0bGUJLzpbXjpdKjovCitzeW4gbWF0Y2ggamFyZ29uRW1haWxBZGRyCS9bXjxAIF5JXSpAW14gXkk+XSovCitzeW4gbWF0Y2ggamFyZ29uVXJsCSArXChodHRwXHxmdHBcKTovL1teXHQgKSJdKisKK3N5biBtYXRjaCBqYXJnb25NYXJrCS97W159XSp9LworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9qYXJnb25fc3ludGF4X2luaXRzIikKKwlpZiB2ZXJzaW9uIDwgNTA4CisJCWxldCBkaWRfamFyZ29uX3N5bnRheF9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWVuZGlmCisJSGlMaW5rIGphcmdvbkNoYXB0VGl0bGUJVGl0bGUKKwlIaUxpbmsgamFyZ29uRW1haWxBZGRyCSBDb21tZW50CisJSGlMaW5rIGphcmdvblVybAkgQ29tbWVudAorCUhpTGluayBqYXJnb25NYXJrCUxhYmVsCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImphcmdvbiIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2phdmEudmltIGIvcnVudGltZS9zeW50YXgvamF2YS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3YzE3ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2phdmEudmltCkBAIC0wLDAgKzEsMzM0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIEphdmEKKyIgTWFpbnRhaW5lcjogICBDbGF1ZGlvIEZsZWluZXIgPGNsYXVkaW9AZmxlaW5lci5jb20+CisiIFVSTDoJCWh0dHA6Ly93d3cuZmxlaW5lci5jb20vdmltL3N5bnRheC9qYXZhLnZpbQorIiBMYXN0IENoYW5nZTogIDIwMDQgQXByIDIzCisKKyIgUGxlYXNlIGNoZWNrIDpoZWxwIGphdmEudmltIGZvciBjb21tZW50cyBvbiBzb21lIG9mIHRoZSBvcHRpb25zIGF2YWlsYWJsZS4KKworIiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmICFleGlzdHMoIm1haW5fc3ludGF4IikKKyAgaWYgdmVyc2lvbiA8IDYwMAorICAgIHN5bnRheCBjbGVhcgorICBlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKKyAgZW5kaWYKKyAgIiB3ZSBkZWZpbmUgaXQgaGVyZSBzbyB0aGF0IGluY2x1ZGVkIGZpbGVzIGNhbiB0ZXN0IGZvciBpdAorICBsZXQgbWFpbl9zeW50YXg9J2phdmEnCitlbmRpZgorCisiIGRvbid0IHVzZSBzdGFuZGFyZCBIaUxpbmssIGl0IHdpbGwgbm90IHdvcmsgd2l0aCBpbmNsdWRlZCBzeW50YXggZmlsZXMKK2lmIHZlcnNpb24gPCA1MDgKKyAgY29tbWFuZCEgLW5hcmdzPSsgSmF2YUhpTGluayBoaSBsaW5rIDxhcmdzPgorZWxzZQorICBjb21tYW5kISAtbmFyZ3M9KyBKYXZhSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorZW5kaWYKKworIiBzb21lIGNoYXJhY3RlcnMgdGhhdCBjYW5ub3QgYmUgaW4gYSBqYXZhIHByb2dyYW0gKG91dHNpZGUgYSBzdHJpbmcpCitzeW4gbWF0Y2ggamF2YUVycm9yICJbXFxAYF0iCitzeW4gbWF0Y2ggamF2YUVycm9yICI8PDxcfFwuXC5cfD0+XHw8Plx8fHw9XHwmJj1cfFteLV0tPlx8XCpcLyIKK3N5biBtYXRjaCBqYXZhT0sgIlwuXC5cLiIKKworIiB1c2Ugc2VwYXJhdGUgbmFtZSBzbyB0aGF0IGl0IGNhbiBiZSBkZWxldGVkIGluIGphdmFjYy52aW0KK3N5biBtYXRjaCAgIGphdmFFcnJvcjIgIiNcfD08IgorSmF2YUhpTGluayBqYXZhRXJyb3IyIGphdmFFcnJvcgorCisKKworIiBrZXl3b3JkIGRlZmluaXRpb25zCitzeW4ga2V5d29yZCBqYXZhRXh0ZXJuYWwJbmF0aXZlIHBhY2thZ2UKK3N5biBtYXRjaCBqYXZhRXh0ZXJuYWwJCSJcPGltcG9ydFwoXHNcK3N0YXRpY1w+XClcPyIKK3N5biBrZXl3b3JkIGphdmFFcnJvcgkJZ290byBjb25zdAorc3luIGtleXdvcmQgamF2YUNvbmRpdGlvbmFsCWlmIGVsc2Ugc3dpdGNoCitzeW4ga2V5d29yZCBqYXZhUmVwZWF0CQl3aGlsZSBmb3IgZG8KK3N5biBrZXl3b3JkIGphdmFCb29sZWFuCQl0cnVlIGZhbHNlCitzeW4ga2V5d29yZCBqYXZhQ29uc3RhbnQJbnVsbAorc3luIGtleXdvcmQgamF2YVR5cGVkZWYJCXRoaXMgc3VwZXIKK3N5biBrZXl3b3JkIGphdmFPcGVyYXRvcgluZXcgaW5zdGFuY2VvZgorc3luIGtleXdvcmQgamF2YVR5cGUJCWJvb2xlYW4gY2hhciBieXRlIHNob3J0IGludCBsb25nIGZsb2F0IGRvdWJsZQorc3luIGtleXdvcmQgamF2YVR5cGUJCXZvaWQKK3N5biBrZXl3b3JkIGphdmFTdGF0ZW1lbnQJcmV0dXJuCitzeW4ga2V5d29yZCBqYXZhU3RvcmFnZUNsYXNzCXN0YXRpYyBzeW5jaHJvbml6ZWQgdHJhbnNpZW50IHZvbGF0aWxlIGZpbmFsIHN0cmljdGZwIHNlcmlhbGl6YWJsZQorc3luIGtleXdvcmQgamF2YUV4Y2VwdGlvbnMJdGhyb3cgdHJ5IGNhdGNoIGZpbmFsbHkKK3N5biBrZXl3b3JkIGphdmFBc3NlcnQJCWFzc2VydAorc3luIGtleXdvcmQgamF2YU1ldGhvZERlY2wJc3luY2hyb25pemVkIHRocm93cworc3luIGtleXdvcmQgamF2YUNsYXNzRGVjbAlleHRlbmRzIGltcGxlbWVudHMgaW50ZXJmYWNlCisiIHRvIGRpZmZlcmVudGlhdGUgdGhlIGtleXdvcmQgY2xhc3MgZnJvbSBNeUNsYXNzLmNsYXNzIHdlIHVzZSBhIG1hdGNoIGhlcmUKK3N5biBtYXRjaCAgIGphdmFUeXBlZGVmCQkiXC5ccypcPGNsYXNzXD4ibXM9cysxCitzeW4ga2V5d29yZCBqYXZhQ2xhc3NEZWNsCWVudW0KK3N5biBtYXRjaCAgIGphdmFDbGFzc0RlY2wJIl5jbGFzc1w+Igorc3luIG1hdGNoICAgamF2YUNsYXNzRGVjbAkiW14uXVxzKlw8Y2xhc3NcPiJtcz1zKzEKK3N5biBrZXl3b3JkIGphdmFCcmFuY2gJCWJyZWFrIGNvbnRpbnVlIG5leHRncm91cD1qYXZhVXNlckxhYmVsUmVmIHNraXB3aGl0ZQorc3luIG1hdGNoICAgamF2YVVzZXJMYWJlbFJlZgkiXGtcKyIgY29udGFpbmVkCitzeW4ga2V5d29yZCBqYXZhU2NvcGVEZWNsCXB1YmxpYyBwcm90ZWN0ZWQgcHJpdmF0ZSBhYnN0cmFjdAorCitpZiBleGlzdHMoImphdmFfaGlnaGxpZ2h0X2phdmFfbGFuZ19pZHMiKSB8fCBleGlzdHMoImphdmFfaGlnaGxpZ2h0X2phdmFfbGFuZyIpIHx8IGV4aXN0cygiamF2YV9oaWdobGlnaHRfYWxsIikKKyAgIiBqYXZhLmxhbmcuKgorICBzeW4gbWF0Y2ggamF2YUxhbmdDbGFzcyAiXDxTeXN0ZW1cPiIKKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgQ2xvbmVhYmxlIENvbXBhcmFibGUgUnVubmFibGUgQm9vbGVhbiBCeXRlIENsYXNzCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIENoYXJhY3RlciBDaGFyU2VxdWVuY2UgQ2xhc3NMb2FkZXIgQ29tcGlsZXIgRG91YmxlIEZsb2F0CisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIEludGVnZXIgSW5oZXJpdGFibGVUaHJlYWRMb2NhbCBMb25nIE1hdGggTnVtYmVyIE9iamVjdCBQYWNrYWdlIFByb2Nlc3MKKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgUnVudGltZSBSdW50aW1lUGVybWlzc2lvbiBJbmhlcml0YWJsZVRocmVhZExvY2FsCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIFNlY3VyaXR5TWFuYWdlciBTaG9ydCBTdHJpbmcgU3RyaWN0TWF0aCBTdGFja1RyYWNlRWxlbWVudAorICBzeW4ga2V5d29yZCBqYXZhTGFuZ0NsYXNzICBTdHJpbmdCdWZmZXIgVGhyZWFkIFRocmVhZEdyb3VwCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIFRocmVhZExvY2FsIFRocm93YWJsZSBWb2lkIEFyaXRobWV0aWNFeGNlcHRpb24KKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIEFzc2VydGlvbkVycm9yCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIEFycmF5U3RvcmVFeGNlcHRpb24gQ2xhc3NDYXN0RXhjZXB0aW9uCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIENsYXNzTm90Rm91bmRFeGNlcHRpb24KKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gRXhjZXB0aW9uCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24KKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb24KKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIElsbGVnYWxUaHJlYWRTdGF0ZUV4Y2VwdGlvbgorICBzeW4ga2V5d29yZCBqYXZhTGFuZ0NsYXNzICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIEluc3RhbnRpYXRpb25FeGNlcHRpb24gSW50ZXJydXB0ZWRFeGNlcHRpb24KKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgTmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb24gTm9TdWNoRmllbGRFeGNlcHRpb24KKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgTm9TdWNoTWV0aG9kRXhjZXB0aW9uIE51bGxQb2ludGVyRXhjZXB0aW9uCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBSdW50aW1lRXhjZXB0aW9uCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIFNlY3VyaXR5RXhjZXB0aW9uIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24KKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24KKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgQWJzdHJhY3RNZXRob2RFcnJvciBDbGFzc0NpcmN1bGFyaXR5RXJyb3IKKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgQ2xhc3NGb3JtYXRFcnJvciBFcnJvciBFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3IKKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgSWxsZWdhbEFjY2Vzc0Vycm9yIEluc3RhbnRpYXRpb25FcnJvcgorICBzeW4ga2V5d29yZCBqYXZhTGFuZ0NsYXNzICBJbmNvbXBhdGlibGVDbGFzc0NoYW5nZUVycm9yIEludGVybmFsRXJyb3IKKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgTGlua2FnZUVycm9yIE5vQ2xhc3NEZWZGb3VuZEVycm9yCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIE5vU3VjaEZpZWxkRXJyb3IgTm9TdWNoTWV0aG9kRXJyb3IKKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgT3V0T2ZNZW1vcnlFcnJvciBTdGFja092ZXJmbG93RXJyb3IKKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgVGhyZWFkRGVhdGggVW5rbm93bkVycm9yIFVuc2F0aXNmaWVkTGlua0Vycm9yCisgIHN5biBrZXl3b3JkIGphdmFMYW5nQ2xhc3MgIFVuc3VwcG9ydGVkQ2xhc3NWZXJzaW9uRXJyb3IgVmVyaWZ5RXJyb3IKKyAgc3luIGtleXdvcmQgamF2YUxhbmdDbGFzcyAgVmlydHVhbE1hY2hpbmVFcnJvcgorICBzeW4ga2V5d29yZCBqYXZhTGFuZ09iamVjdCBjbG9uZSBlcXVhbHMgZmluYWxpemUgZ2V0Q2xhc3MgaGFzaENvZGUKKyAgc3luIGtleXdvcmQgamF2YUxhbmdPYmplY3Qgbm90aWZ5IG5vdGlmeUFsbCB0b1N0cmluZyB3YWl0CisgIEphdmFIaUxpbmsgamF2YUxhbmdDbGFzcwkJICAgICBqYXZhQ29uc3RhbnQKKyAgSmF2YUhpTGluayBqYXZhTGFuZ09iamVjdAkJICAgICBqYXZhQ29uc3RhbnQKKyAgc3luIGNsdXN0ZXIgamF2YVRvcCBhZGQ9amF2YUxhbmdPYmplY3QsamF2YUxhbmdDbGFzcworICBzeW4gY2x1c3RlciBqYXZhQ2xhc3NlcyBhZGQ9amF2YUxhbmdDbGFzcworZW5kaWYKKworaWYgZmlsZXJlYWRhYmxlKGV4cGFuZCgiPHNmaWxlPjpwOmgiKS4iL2phdmFpZC52aW0iKQorICBzb3VyY2UgPHNmaWxlPjpwOmgvamF2YWlkLnZpbQorZW5kaWYKKworaWYgZXhpc3RzKCJqYXZhX3NwYWNlX2Vycm9ycyIpCisgIGlmICFleGlzdHMoImphdmFfbm9fdHJhaWxfc3BhY2VfZXJyb3IiKQorICAgIHN5biBtYXRjaCAgIGphdmFTcGFjZUVycm9yICAiXHNcKyQiCisgIGVuZGlmCisgIGlmICFleGlzdHMoImphdmFfbm9fdGFiX3NwYWNlX2Vycm9yIikKKyAgICBzeW4gbWF0Y2ggICBqYXZhU3BhY2VFcnJvciAgIiBcK1x0Im1lPWUtMQorICBlbmRpZgorZW5kaWYKKworc3luIHJlZ2lvbiAgamF2YUxhYmVsUmVnaW9uICAgICB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWphdmFMYWJlbCBzdGFydD0iXDxjYXNlXD4iIG1hdGNoZ3JvdXA9Tk9ORSBlbmQ9IjoiIGNvbnRhaW5zPWphdmFOdW1iZXIsamF2YUNoYXJhY3Rlcgorc3luIG1hdGNoICAgamF2YVVzZXJMYWJlbCAgICAgICAiXlxzKltfJGEtekEtWl1bXyRhLXpBLVowLTlfXSpccyo6ImhlPWUtMSBjb250YWlucz1qYXZhTGFiZWwKK3N5biBrZXl3b3JkIGphdmFMYWJlbAkJZGVmYXVsdAorCitpZiAhZXhpc3RzKCJqYXZhX2FsbG93X2NwcF9rZXl3b3JkcyIpCisgIHN5biBrZXl3b3JkIGphdmFFcnJvciBhdXRvIGRlbGV0ZSBleHRlcm4gZnJpZW5kIGlubGluZSByZWRlY2xhcmVkCisgIHN5biBrZXl3b3JkIGphdmFFcnJvciByZWdpc3RlciBzaWduZWQgc2l6ZW9mIHN0cnVjdCB0ZW1wbGF0ZSB0eXBlZGVmIHVuaW9uCisgIHN5biBrZXl3b3JkIGphdmFFcnJvciB1bnNpZ25lZCBvcGVyYXRvcgorZW5kaWYKKworIiBUaGUgZm9sbG93aW5nIGNsdXN0ZXIgY29udGFpbnMgYWxsIGphdmEgZ3JvdXBzIGV4Y2VwdCB0aGUgY29udGFpbmVkIG9uZXMKK3N5biBjbHVzdGVyIGphdmFUb3AgYWRkPWphdmFFeHRlcm5hbCxqYXZhRXJyb3IsamF2YUVycm9yLGphdmFCcmFuY2gsamF2YUxhYmVsUmVnaW9uLGphdmFMYWJlbCxqYXZhQ29uZGl0aW9uYWwsamF2YVJlcGVhdCxqYXZhQm9vbGVhbixqYXZhQ29uc3RhbnQsamF2YVR5cGVkZWYsamF2YU9wZXJhdG9yLGphdmFUeXBlLGphdmFUeXBlLGphdmFTdGF0ZW1lbnQsamF2YVN0b3JhZ2VDbGFzcyxqYXZhQXNzZXJ0LGphdmFFeGNlcHRpb25zLGphdmFNZXRob2REZWNsLGphdmFDbGFzc0RlY2wsamF2YUNsYXNzRGVjbCxqYXZhQ2xhc3NEZWNsLGphdmFTY29wZURlY2wsamF2YUVycm9yLGphdmFFcnJvcjIsamF2YVVzZXJMYWJlbCxqYXZhTGFuZ09iamVjdAorCisKKyIgQ29tbWVudHMKK3N5biBrZXl3b3JkIGphdmFUb2RvCQkgY29udGFpbmVkIFRPRE8gRklYTUUgWFhYCitpZiBleGlzdHMoImphdmFfY29tbWVudF9zdHJpbmdzIikKKyAgc3luIHJlZ2lvbiAgamF2YUNvbW1lbnRTdHJpbmcgICAgY29udGFpbmVkIHN0YXJ0PSsiKyBlbmQ9KyIrIGVuZD0rJCsgZW5kPStcKi8rbWU9cy0xLGhlPXMtMSBjb250YWlucz1qYXZhU3BlY2lhbCxqYXZhQ29tbWVudFN0YXIsamF2YVNwZWNpYWxDaGFyLEBTcGVsbAorICBzeW4gcmVnaW9uICBqYXZhQ29tbWVudDJTdHJpbmcgICBjb250YWluZWQgc3RhcnQ9KyIrICBlbmQ9KyRcfCIrICBjb250YWlucz1qYXZhU3BlY2lhbCxqYXZhU3BlY2lhbENoYXIsQFNwZWxsCisgIHN5biBtYXRjaCAgIGphdmFDb21tZW50Q2hhcmFjdGVyIGNvbnRhaW5lZCAiJ1xcW14nXVx7MSw2XH0nIiBjb250YWlucz1qYXZhU3BlY2lhbENoYXIKKyAgc3luIG1hdGNoICAgamF2YUNvbW1lbnRDaGFyYWN0ZXIgY29udGFpbmVkICInXFwnJyIgY29udGFpbnM9amF2YVNwZWNpYWxDaGFyCisgIHN5biBtYXRjaCAgIGphdmFDb21tZW50Q2hhcmFjdGVyIGNvbnRhaW5lZCAiJ1teXFxdJyIKKyAgc3luIGNsdXN0ZXIgamF2YUNvbW1lbnRTcGVjaWFsIGFkZD1qYXZhQ29tbWVudFN0cmluZyxqYXZhQ29tbWVudENoYXJhY3RlcixqYXZhTnVtYmVyCisgIHN5biBjbHVzdGVyIGphdmFDb21tZW50U3BlY2lhbDIgYWRkPWphdmFDb21tZW50MlN0cmluZyxqYXZhQ29tbWVudENoYXJhY3RlcixqYXZhTnVtYmVyCitlbmRpZgorc3luIHJlZ2lvbiAgamF2YUNvbW1lbnQJCSBzdGFydD0iL1wqIiAgZW5kPSJcKi8iIGNvbnRhaW5zPUBqYXZhQ29tbWVudFNwZWNpYWwsamF2YVRvZG8sQFNwZWxsCitzeW4gbWF0Y2ggICBqYXZhQ29tbWVudFN0YXIgICAgICBjb250YWluZWQgIl5ccypcKlteL10ibWU9ZS0xCitzeW4gbWF0Y2ggICBqYXZhQ29tbWVudFN0YXIgICAgICBjb250YWluZWQgIl5ccypcKiQiCitzeW4gbWF0Y2ggICBqYXZhTGluZUNvbW1lbnQgICAgICAiLy8uKiIgY29udGFpbnM9QGphdmFDb21tZW50U3BlY2lhbDIsamF2YVRvZG8sQFNwZWxsCitKYXZhSGlMaW5rIGphdmFDb21tZW50U3RyaW5nIGphdmFTdHJpbmcKK0phdmFIaUxpbmsgamF2YUNvbW1lbnQyU3RyaW5nIGphdmFTdHJpbmcKK0phdmFIaUxpbmsgamF2YUNvbW1lbnRDaGFyYWN0ZXIgamF2YUNoYXJhY3RlcgorCitzeW4gY2x1c3RlciBqYXZhVG9wIGFkZD1qYXZhQ29tbWVudCxqYXZhTGluZUNvbW1lbnQKKworaWYgIWV4aXN0cygiamF2YV9pZ25vcmVfamF2YWRvYyIpICYmIG1haW5fc3ludGF4ICE9ICdqc3AnCisgIHN5bnRheCBjYXNlIGlnbm9yZQorICAiIHN5bnRheCBjb2xvcmluZyBmb3IgamF2YWRvYyBjb21tZW50cyAoSFRNTCkKKyAgc3ludGF4IGluY2x1ZGUgQGphdmFIdG1sIDxzZmlsZT46cDpoL2h0bWwudmltCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKKyAgc3luIHJlZ2lvbiAgamF2YURvY0NvbW1lbnQgICAgc3RhcnQ9Ii9cKlwqIiAgZW5kPSJcKi8iIGtlZXBlbmQgY29udGFpbnM9amF2YUNvbW1lbnRUaXRsZSxAamF2YUh0bWwsamF2YURvY1RhZ3MsamF2YVRvZG8sQFNwZWxsCisgIHN5biByZWdpb24gIGphdmFDb21tZW50VGl0bGUgIGNvbnRhaW5lZCBtYXRjaGdyb3VwPWphdmFEb2NDb21tZW50IHN0YXJ0PSIvXCpcKiIgICBtYXRjaGdyb3VwPWphdmFDb21tZW50VGl0bGUga2VlcGVuZCBlbmQ9IlwuJCIgZW5kPSJcLlsgXHRccjwmXSJtZT1lLTEgZW5kPSJbXntdQCJtZT1zLTIsaGU9cy0xIGVuZD0iXCovIm1lPXMtMSxoZT1zLTEgY29udGFpbnM9QGphdmFIdG1sLGphdmFDb21tZW50U3RhcixqYXZhVG9kbyxAU3BlbGwsamF2YURvY1RhZ3MKKworICBzeW4gcmVnaW9uIGphdmFEb2NUYWdzICBjb250YWluZWQgc3RhcnQ9IntAXChsaW5rXHxsaW5rcGxhaW5cfGluaGVyaXRbRGRdb2NcfGRvY1tyUl1vb3RcfHZhbHVlXCkiIGVuZD0ifSIKKyAgc3luIG1hdGNoICBqYXZhRG9jVGFncyAgY29udGFpbmVkICJAXChzZWVcfHBhcmFtXHxleGNlcHRpb25cfHRocm93c1x8c2luY2VcKVxzXCtcU1wrIiBjb250YWlucz1qYXZhRG9jUGFyYW0KKyAgc3luIG1hdGNoICBqYXZhRG9jUGFyYW0gY29udGFpbmVkICJcc1xTXCsiCisgIHN5biBtYXRjaCAgamF2YURvY1RhZ3MgIGNvbnRhaW5lZCAiQFwodmVyc2lvblx8YXV0aG9yXHxyZXR1cm5cfGRlcHJlY2F0ZWRcfHNlcmlhbFx8c2VyaWFsRmllbGRcfHNlcmlhbERhdGFcKVw+IgorICBzeW50YXggY2FzZSBtYXRjaAorZW5kaWYKKworIiBtYXRjaCB0aGUgc3BlY2lhbCBjb21tZW50IC8qKi8KK3N5biBtYXRjaCAgIGphdmFDb21tZW50CQkgIi9cKlwqLyIKKworIiBTdHJpbmdzIGFuZCBjb25zdGFudHMKK3N5biBtYXRjaCAgIGphdmFTcGVjaWFsRXJyb3IgICAgIGNvbnRhaW5lZCAiXFwuIgorc3luIG1hdGNoICAgamF2YVNwZWNpYWxDaGFyRXJyb3IgY29udGFpbmVkICJbXiddIgorc3luIG1hdGNoICAgamF2YVNwZWNpYWxDaGFyICAgICAgY29udGFpbmVkICJcXFwoWzQtOV1cZFx8WzAtM11cZFxkXHxbXCJcXCdudGJyZl1cfHVceFx7NFx9XCkiCitzeW4gcmVnaW9uICBqYXZhU3RyaW5nCQlzdGFydD0rIisgZW5kPSsiKyBlbmQ9KyQrIGNvbnRhaW5zPWphdmFTcGVjaWFsQ2hhcixqYXZhU3BlY2lhbEVycm9yLEBTcGVsbAorIiBuZXh0IGxpbmUgZGlzYWJsZWQsIGl0IGNhbiBjYXVzZSBhIGNyYXNoIGZvciBhIGxvbmcgbGluZQorInN5biBtYXRjaCAgIGphdmFTdHJpbmdFcnJvcgkgICsiXChbXiJcXF1cfFxcLlwpKiQrCitzeW4gbWF0Y2ggICBqYXZhQ2hhcmFjdGVyCSAiJ1teJ10qJyIgY29udGFpbnM9amF2YVNwZWNpYWxDaGFyLGphdmFTcGVjaWFsQ2hhckVycm9yCitzeW4gbWF0Y2ggICBqYXZhQ2hhcmFjdGVyCSAiJ1xcJyciIGNvbnRhaW5zPWphdmFTcGVjaWFsQ2hhcgorc3luIG1hdGNoICAgamF2YUNoYXJhY3RlcgkgIidbXlxcXSciCitzeW4gbWF0Y2ggICBqYXZhTnVtYmVyCQkgIlw8XCgwWzAtN10qXHwwW3hYXVx4XCtcfFxkXCtcKVtsTF1cPVw+Igorc3luIG1hdGNoICAgamF2YU51bWJlcgkJICJcKFw8XGRcK1wuXGQqXHxcLlxkXCtcKVwoW2VFXVstK11cPVxkXCtcKVw9W2ZGZERdXD0iCitzeW4gbWF0Y2ggICBqYXZhTnVtYmVyCQkgIlw8XGRcK1tlRV1bLStdXD1cZFwrW2ZGZERdXD1cPiIKK3N5biBtYXRjaCAgIGphdmFOdW1iZXIJCSAiXDxcZFwrXChbZUVdWy0rXVw9XGRcK1wpXD1bZkZkRF1cPiIKKworIiB1bmljb2RlIGNoYXJhY3RlcnMKK3N5biBtYXRjaCAgIGphdmFTcGVjaWFsICJcXHVcZFx7NFx9IgorCitzeW4gY2x1c3RlciBqYXZhVG9wIGFkZD1qYXZhU3RyaW5nLGphdmFDaGFyYWN0ZXIsamF2YU51bWJlcixqYXZhU3BlY2lhbCxqYXZhU3RyaW5nRXJyb3IKKworaWYgZXhpc3RzKCJqYXZhX2hpZ2hsaWdodF9mdW5jdGlvbnMiKQorICBpZiBqYXZhX2hpZ2hsaWdodF9mdW5jdGlvbnMgPT0gImluZGVudCIKKyAgICBzeW4gbWF0Y2ggIGphdmFGdW5jRGVmICJeXChcdFx8IFx7OFx9XClbXyRhLXpBLVpdW18kYS16QS1aMC05Xy4gXFtcXV0qKFteLSsqLygpXSopIiBjb250YWlucz1qYXZhU2NvcGVEZWNsLGphdmFUeXBlLGphdmFTdG9yYWdlQ2xhc3MsQGphdmFDbGFzc2VzCisgICAgc3luIHJlZ2lvbiBqYXZhRnVuY0RlZiBzdGFydD0rXlwoXHRcfCBcezhcfVwpWyRfYS16QS1aXVskX2EtekEtWjAtOV8uIFxbXF1dKihbXi0rKi8oKV0qLFxzKisgZW5kPSspKyBjb250YWlucz1qYXZhU2NvcGVEZWNsLGphdmFUeXBlLGphdmFTdG9yYWdlQ2xhc3MsQGphdmFDbGFzc2VzCisgICAgc3luIG1hdGNoICBqYXZhRnVuY0RlZiAiXiAgWyRfYS16QS1aXVskX2EtekEtWjAtOV8uIFxbXF1dKihbXi0rKi8oKV0qKSIgY29udGFpbnM9amF2YVNjb3BlRGVjbCxqYXZhVHlwZSxqYXZhU3RvcmFnZUNsYXNzLEBqYXZhQ2xhc3NlcworICAgIHN5biByZWdpb24gamF2YUZ1bmNEZWYgc3RhcnQ9K14gIFskX2EtekEtWl1bJF9hLXpBLVowLTlfLiBcW1xdXSooW14tKyovKCldKixccyorIGVuZD0rKSsgY29udGFpbnM9amF2YVNjb3BlRGVjbCxqYXZhVHlwZSxqYXZhU3RvcmFnZUNsYXNzLEBqYXZhQ2xhc3NlcworICBlbHNlCisgICAgIiBUaGlzIGxpbmUgY2F0Y2hlcyBtZXRob2QgZGVjbGFyYXRpb25zIGF0IGFueSBpbmRlbnRhdGlvbj4wLCBidXQgaXQgYXNzdW1lcworICAgICIgdHdvIHRoaW5nczoKKyAgICAiICAgMS4gY2xhc3MgbmFtZXMgYXJlIGFsd2F5cyBjYXBpdGFsaXplZCAoaWU6IEJ1dHRvbikKKyAgICAiICAgMi4gbWV0aG9kIG5hbWVzIGFyZSBuZXZlciBjYXBpdGFsaXplZCAoZXhjZXB0IGNvbnN0cnVjdG9ycywgb2YgY291cnNlKQorICAgIHN5biByZWdpb24gamF2YUZ1bmNEZWYgc3RhcnQ9K15cc1wrXChcKHB1YmxpY1x8cHJvdGVjdGVkXHxwcml2YXRlXHxzdGF0aWNcfGFic3RyYWN0XHxmaW5hbFx8bmF0aXZlXHxzeW5jaHJvbml6ZWRcKVxzXCtcKSpcKFwodm9pZFx8Ym9vbGVhblx8Y2hhclx8Ynl0ZVx8c2hvcnRcfGludFx8bG9uZ1x8ZmxvYXRcfGRvdWJsZVx8XChbQS1aYS16X11bQS1aYS16MC05XyRdKlwuXCkqW0EtWl1bQS1aYS16MC05XyRdKlwpXCg8W14+XSo+XClcPVwoXFtcXVwpKlxzXCtbYS16XVtBLVphLXowLTlfJF0qXHxbQS1aXVtBLVphLXowLTlfJF0qXClccyooW14wLTldKyBlbmQ9KykrIGNvbnRhaW5zPWphdmFTY29wZURlY2wsamF2YVR5cGUsamF2YVN0b3JhZ2VDbGFzcyxqYXZhQ29tbWVudCxqYXZhTGluZUNvbW1lbnQsQGphdmFDbGFzc2VzCisgIGVuZGlmCisgIHN5biBtYXRjaCAgamF2YUJyYWNlcyAgIlt7fV0iCisgIHN5biBjbHVzdGVyIGphdmFUb3AgYWRkPWphdmFGdW5jRGVmLGphdmFCcmFjZXMKK2VuZGlmCisKK2lmIGV4aXN0cygiamF2YV9oaWdobGlnaHRfZGVidWciKQorCisgICIgU3RyaW5ncyBhbmQgY29uc3RhbnRzCisgIHN5biBtYXRjaCAgIGphdmFEZWJ1Z1NwZWNpYWwJCWNvbnRhaW5lZCAiXFxcZFxkXGRcfFxcLiIKKyAgc3luIHJlZ2lvbiAgamF2YURlYnVnU3RyaW5nCQljb250YWluZWQgc3RhcnQ9KyIrICBlbmQ9KyIrICBjb250YWlucz1qYXZhRGVidWdTcGVjaWFsCisgIHN5biBtYXRjaCAgIGphdmFEZWJ1Z1N0cmluZ0Vycm9yICAgICAgKyJcKFteIlxcXVx8XFwuXCkqJCsKKyAgc3luIG1hdGNoICAgamF2YURlYnVnQ2hhcmFjdGVyCWNvbnRhaW5lZCAiJ1teXFxdJyIKKyAgc3luIG1hdGNoICAgamF2YURlYnVnU3BlY2lhbENoYXJhY3RlciBjb250YWluZWQgIidcXC4nIgorICBzeW4gbWF0Y2ggICBqYXZhRGVidWdTcGVjaWFsQ2hhcmFjdGVyIGNvbnRhaW5lZCAiJ1xcJyciCisgIHN5biBtYXRjaCAgIGphdmFEZWJ1Z051bWJlcgkJY29udGFpbmVkICJcPFwoMFswLTddKlx8MFt4WF1ceFwrXHxcZFwrXClbbExdXD1cPiIKKyAgc3luIG1hdGNoICAgamF2YURlYnVnTnVtYmVyCQljb250YWluZWQgIlwoXDxcZFwrXC5cZCpcfFwuXGRcK1wpXChbZUVdWy0rXVw9XGRcK1wpXD1bZkZkRF1cPSIKKyAgc3luIG1hdGNoICAgamF2YURlYnVnTnVtYmVyCQljb250YWluZWQgIlw8XGRcK1tlRV1bLStdXD1cZFwrW2ZGZERdXD1cPiIKKyAgc3luIG1hdGNoICAgamF2YURlYnVnTnVtYmVyCQljb250YWluZWQgIlw8XGRcK1woW2VFXVstK11cPVxkXCtcKVw9W2ZGZERdXD4iCisgIHN5biBrZXl3b3JkIGphdmFEZWJ1Z0Jvb2xlYW4JCWNvbnRhaW5lZCB0cnVlIGZhbHNlCisgIHN5biBrZXl3b3JkIGphdmFEZWJ1Z1R5cGUJCWNvbnRhaW5lZCBudWxsIHRoaXMgc3VwZXIKKyAgc3luIHJlZ2lvbiBqYXZhRGVidWdQYXJlbiAgc3RhcnQ9KygrIGVuZD0rKSsgY29udGFpbmVkIGNvbnRhaW5zPWphdmFEZWJ1Zy4qLGphdmFEZWJ1Z1BhcmVuCisKKyAgIiB0byBtYWtlIHRoaXMgd29yayB5b3UgbXVzdCBkZWZpbmUgdGhlIGhpZ2hsaWdodGluZyBmb3IgdGhlc2UgZ3JvdXBzCisgIHN5biBtYXRjaCBqYXZhRGVidWcgIlw8U3lzdGVtXC5cKG91dFx8ZXJyXClcLnByaW50XChsblwpKlxzKigibWU9ZS0xIGNvbnRhaW5zPWphdmFEZWJ1Zy4qIG5leHRncm91cD1qYXZhRGVidWdQYXJlbgorICBzeW4gbWF0Y2ggamF2YURlYnVnICJbQS1aYS16XVthLXpBLVowLTlfXSpcLnByaW50U3RhY2tUcmFjZVxzKigibWU9ZS0xIGNvbnRhaW5zPWphdmFEZWJ1Zy4qIG5leHRncm91cD1qYXZhRGVidWdQYXJlbgorICBzeW4gbWF0Y2ggamF2YURlYnVnICJcPHRyYWNlW1NMXVw9XHMqKCJtZT1lLTEgY29udGFpbnM9amF2YURlYnVnLiogbmV4dGdyb3VwPWphdmFEZWJ1Z1BhcmVuCisKKyAgc3luIGNsdXN0ZXIgamF2YVRvcCBhZGQ9amF2YURlYnVnCisKKyAgaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2Nfc3luX2luaXRzIikKKyAgICBKYXZhSGlMaW5rIGphdmFEZWJ1ZwkJIERlYnVnCisgICAgSmF2YUhpTGluayBqYXZhRGVidWdTdHJpbmcJCSBEZWJ1Z1N0cmluZworICAgIEphdmFIaUxpbmsgamF2YURlYnVnU3RyaW5nRXJyb3IJIGphdmFFcnJvcgorICAgIEphdmFIaUxpbmsgamF2YURlYnVnVHlwZQkJIERlYnVnVHlwZQorICAgIEphdmFIaUxpbmsgamF2YURlYnVnQm9vbGVhbgkJIERlYnVnQm9vbGVhbgorICAgIEphdmFIaUxpbmsgamF2YURlYnVnTnVtYmVyCQkgRGVidWcKKyAgICBKYXZhSGlMaW5rIGphdmFEZWJ1Z1NwZWNpYWwJCSBEZWJ1Z1NwZWNpYWwKKyAgICBKYXZhSGlMaW5rIGphdmFEZWJ1Z1NwZWNpYWxDaGFyYWN0ZXIgRGVidWdTcGVjaWFsCisgICAgSmF2YUhpTGluayBqYXZhRGVidWdDaGFyYWN0ZXIJIERlYnVnU3RyaW5nCisgICAgSmF2YUhpTGluayBqYXZhRGVidWdQYXJlbgkJIERlYnVnCisKKyAgICBKYXZhSGlMaW5rIERlYnVnU3RyaW5nCQkgU3RyaW5nCisgICAgSmF2YUhpTGluayBEZWJ1Z1NwZWNpYWwJCSBTcGVjaWFsCisgICAgSmF2YUhpTGluayBEZWJ1Z0Jvb2xlYW4JCSBCb29sZWFuCisgICAgSmF2YUhpTGluayBEZWJ1Z1R5cGUJCSBUeXBlCisgIGVuZGlmCitlbmRpZgorCitpZiBleGlzdHMoImphdmFfbWFya19icmFjZXNfaW5fcGFyZW5zX2FzX2Vycm9ycyIpCisgIHN5biBtYXRjaCBqYXZhSW5QYXJlbgkJIGNvbnRhaW5lZCAiW3t9XSIKKyAgSmF2YUhpTGluayBqYXZhSW5QYXJlbglqYXZhRXJyb3IKKyAgc3luIGNsdXN0ZXIgamF2YVRvcCBhZGQ9amF2YUluUGFyZW4KK2VuZGlmCisKKyIgY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcworc3luIHJlZ2lvbiAgamF2YVBhcmVuVCAgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1qYXZhUGFyZW4gIHN0YXJ0PSIoIiAgZW5kPSIpIiBjb250YWlucz1AamF2YVRvcCxqYXZhUGFyZW5UMQorc3luIHJlZ2lvbiAgamF2YVBhcmVuVDEgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1qYXZhUGFyZW4xIHN0YXJ0PSIoIiBlbmQ9IikiIGNvbnRhaW5zPUBqYXZhVG9wLGphdmFQYXJlblQyIGNvbnRhaW5lZAorc3luIHJlZ2lvbiAgamF2YVBhcmVuVDIgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1qYXZhUGFyZW4yIHN0YXJ0PSIoIiBlbmQ9IikiIGNvbnRhaW5zPUBqYXZhVG9wLGphdmFQYXJlblQgIGNvbnRhaW5lZAorc3luIG1hdGNoICAgamF2YVBhcmVuRXJyb3IgICAgICAgIikiCitKYXZhSGlMaW5rIGphdmFQYXJlbkVycm9yICAgICAgIGphdmFFcnJvcgorCitpZiAhZXhpc3RzKCJqYXZhX21pbmxpbmVzIikKKyAgbGV0IGphdmFfbWlubGluZXMgPSAxMAorZW5kaWYKK2V4ZWMgInN5biBzeW5jIGNjb21tZW50IGphdmFDb21tZW50IG1pbmxpbmVzPSIgLiBqYXZhX21pbmxpbmVzCisKKyIgVGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2phdmFfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfamF2YV9zeW5faW5pdHMgPSAxCisgIGVuZGlmCisgIEphdmFIaUxpbmsgamF2YUZ1bmNEZWYJCUZ1bmN0aW9uCisgIEphdmFIaUxpbmsgamF2YUJyYWNlcwkJCUZ1bmN0aW9uCisgIEphdmFIaUxpbmsgamF2YUJyYW5jaAkJCUNvbmRpdGlvbmFsCisgIEphdmFIaUxpbmsgamF2YVVzZXJMYWJlbFJlZgkJamF2YVVzZXJMYWJlbAorICBKYXZhSGlMaW5rIGphdmFMYWJlbAkJCUxhYmVsCisgIEphdmFIaUxpbmsgamF2YVVzZXJMYWJlbAkJTGFiZWwKKyAgSmF2YUhpTGluayBqYXZhQ29uZGl0aW9uYWwJCUNvbmRpdGlvbmFsCisgIEphdmFIaUxpbmsgamF2YVJlcGVhdAkJCVJlcGVhdAorICBKYXZhSGlMaW5rIGphdmFFeGNlcHRpb25zCQlFeGNlcHRpb24KKyAgSmF2YUhpTGluayBqYXZhQXNzZXJ0CQkJU3RhdGVtZW50CisgIEphdmFIaUxpbmsgamF2YVN0b3JhZ2VDbGFzcwkJU3RvcmFnZUNsYXNzCisgIEphdmFIaUxpbmsgamF2YU1ldGhvZERlY2wJCWphdmFTdG9yYWdlQ2xhc3MKKyAgSmF2YUhpTGluayBqYXZhQ2xhc3NEZWNsCQlqYXZhU3RvcmFnZUNsYXNzCisgIEphdmFIaUxpbmsgamF2YVNjb3BlRGVjbAkJamF2YVN0b3JhZ2VDbGFzcworICBKYXZhSGlMaW5rIGphdmFCb29sZWFuCQlCb29sZWFuCisgIEphdmFIaUxpbmsgamF2YVNwZWNpYWwJCVNwZWNpYWwKKyAgSmF2YUhpTGluayBqYXZhU3BlY2lhbEVycm9yCQlFcnJvcgorICBKYXZhSGlMaW5rIGphdmFTcGVjaWFsQ2hhckVycm9yCUVycm9yCisgIEphdmFIaUxpbmsgamF2YVN0cmluZwkJCVN0cmluZworICBKYXZhSGlMaW5rIGphdmFDaGFyYWN0ZXIJCUNoYXJhY3RlcgorICBKYXZhSGlMaW5rIGphdmFTcGVjaWFsQ2hhcgkJU3BlY2lhbENoYXIKKyAgSmF2YUhpTGluayBqYXZhTnVtYmVyCQkJTnVtYmVyCisgIEphdmFIaUxpbmsgamF2YUVycm9yCQkJRXJyb3IKKyAgSmF2YUhpTGluayBqYXZhU3RyaW5nRXJyb3IJCUVycm9yCisgIEphdmFIaUxpbmsgamF2YVN0YXRlbWVudAkJU3RhdGVtZW50CisgIEphdmFIaUxpbmsgamF2YU9wZXJhdG9yCQlPcGVyYXRvcgorICBKYXZhSGlMaW5rIGphdmFDb21tZW50CQlDb21tZW50CisgIEphdmFIaUxpbmsgamF2YURvY0NvbW1lbnQJCUNvbW1lbnQKKyAgSmF2YUhpTGluayBqYXZhTGluZUNvbW1lbnQJCUNvbW1lbnQKKyAgSmF2YUhpTGluayBqYXZhQ29uc3RhbnQJCUNvbnN0YW50CisgIEphdmFIaUxpbmsgamF2YVR5cGVkZWYJCVR5cGVkZWYKKyAgSmF2YUhpTGluayBqYXZhVG9kbwkJCVRvZG8KKworICBKYXZhSGlMaW5rIGphdmFDb21tZW50VGl0bGUJCVNwZWNpYWxDb21tZW50CisgIEphdmFIaUxpbmsgamF2YURvY1RhZ3MJCVNwZWNpYWwKKyAgSmF2YUhpTGluayBqYXZhRG9jUGFyYW0JCUZ1bmN0aW9uCisgIEphdmFIaUxpbmsgamF2YUNvbW1lbnRTdGFyCQlqYXZhQ29tbWVudAorCisgIEphdmFIaUxpbmsgamF2YVR5cGUJCQlUeXBlCisgIEphdmFIaUxpbmsgamF2YUV4dGVybmFsCQlJbmNsdWRlCisKKyAgSmF2YUhpTGluayBodG1sQ29tbWVudAkJU3BlY2lhbAorICBKYXZhSGlMaW5rIGh0bWxDb21tZW50UGFydAkJU3BlY2lhbAorICBKYXZhSGlMaW5rIGphdmFTcGFjZUVycm9yCQlFcnJvcgorZW5kaWYKKworZGVsY29tbWFuZCBKYXZhSGlMaW5rCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImphdmEiCisKK2lmIG1haW5fc3ludGF4ID09ICdqYXZhJworICB1bmxldCBtYWluX3N5bnRheAorZW5kaWYKKworbGV0IGI6c3BlbGxfb3B0aW9ucz0iY29udGFpbmVkIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvamF2YWNjLnZpbSBiL3J1bnRpbWUvc3ludGF4L2phdmFjYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjNTdiNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2phdmFjYy52aW0KQEAgLTAsMCArMSw3NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUphdmFDQywgYSBKYXZhIENvbXBpbGVyIENvbXBpbGVyIHdyaXR0ZW4gYnkgSmF2YVNvZnQKKyIgTWFpbnRhaW5lcjoJQ2xhdWRpbyBGbGVpbmVyIDxjbGF1ZGlvQGZsZWluZXIuY29tPgorIiBVUkw6CQlodHRwOi8vd3d3LmZsZWluZXIuY29tL3ZpbS9zeW50YXgvamF2YWNjLnZpbQorIiBMYXN0IENoYW5nZToJMjAwMSBKdW4gMjAKKworIiBVc2VzIGphdmEudmltLCBhbmQgYWRkcyBhIGZldyBzcGVjaWFsIHRoaW5ncyBmb3IgSmF2YUNDIFBhcnNlciBmaWxlcy4KKyIgVGhvc2UgZmlsZXMgdXN1YWxseSBoYXZlIHRoZSBleHRlbnNpb24gICouamoKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIHNvdXJjZSB0aGUgamF2YS52aW0gZmlsZQoraWYgdmVyc2lvbiA8IDYwMAorICBzb3VyY2UgPHNmaWxlPjpwOmgvamF2YS52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2phdmEudmltCitlbmRpZgordW5sZXQgYjpjdXJyZW50X3N5bnRheAorCisicmVtb3ZlIGNhdGNoaW5nIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMgKGRvZXMgbm90IHdvcmsgaW4gamF2YWNjCisiZmlsZXMpIChmaXJzdCBkZWZpbmUgdGhlbSBpbiBjYXNlIHRoZXkgaGF2ZSBub3QgYmVlbiBkZWZpbmVkIGluIGphdmEpCitzeW4gbWF0Y2gJamF2YVBhcmVuICItLSIKK3N5biBtYXRjaAlqYXZhUGFyZW5FcnJvciAiLS0iCitzeW4gbWF0Y2gJamF2YUluUGFyZW4gIi0tIgorc3luIG1hdGNoCWphdmFFcnJvcjIgIi0tIgorc3luIGNsZWFyCWphdmFQYXJlbgorc3luIGNsZWFyCWphdmFQYXJlbkVycm9yCitzeW4gY2xlYXIJamF2YUluUGFyZW4KK3N5biBjbGVhcglqYXZhRXJyb3IyCisKKyIgcmVtb3ZlIGZ1bmN0aW9uIGRlZmluaXRpb25zICh0aGV5IGxvb2sgZGlmZmVyZW50KSAoZmlyc3QgZGVmaW5lIGluCisiIGluIGNhc2UgaXQgd2FzIG5vdCBkZWZpbmVkIGluIGphdmEudmltKQorInN5biBtYXRjaCBqYXZhRnVuY0RlZiAiLS0iCitzeW4gY2xlYXIgamF2YUZ1bmNEZWYKK3N5biBtYXRjaCBqYXZhRnVuY0RlZiAiWyRfYS16QS1aXVskX2EtekEtWjAtOV8uIFxbXF1dKihbXi0rKi8oKV0qKVsgXHRdKjoiIGNvbnRhaW5zPWphdmFUeXBlCisKK3N5biBrZXl3b3JkIGphdmFjY1BhY2thZ2VzIG9wdGlvbnMgREVCVUdfUEFSU0VSIERFQlVHX0xPT0tBSEVBRCBERUJVR19UT0tFTl9NQU5BR0VSCitzeW4ga2V5d29yZCBqYXZhY2NQYWNrYWdlcyBDT01NT05fVE9LRU5fQUNUSU9OIElHTk9SRV9DQVNFIENIT0lDRV9BTUJJR1VJVFlfQ0hFQ0sKK3N5biBrZXl3b3JkIGphdmFjY1BhY2thZ2VzIE9USEVSX0FNQklHVUlUWV9DSEVDSyBTVEFUSUMgTE9PS0FIRUFEIEVSUk9SX1JFUE9SVElORworc3luIGtleXdvcmQgamF2YWNjUGFja2FnZXMgVVNFUl9UT0tFTl9NQU5BR0VSICBVU0VSX0NIQVJfU1RSRUFNIEpBVkFfVU5JQ09ERV9FU0NBUEUKK3N5biBrZXl3b3JkIGphdmFjY1BhY2thZ2VzIFVOSUNPREVfSU5QVVQKK3N5biBtYXRjaCBqYXZhY2NQYWNrYWdlcyAiUEFSU0VSX0VORChbXildKikiCitzeW4gbWF0Y2ggamF2YWNjUGFja2FnZXMgIlBBUlNFUl9CRUdJTihbXildKikiCitzeW4gbWF0Y2ggamF2YWNjU3BlY1Rva2VuICI8RU9GPiIKKyIgdGhlIGRvdCBpcyBuZWNlc3NhcnkgYXMgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgbWF0Y2hlZCBhcyBhIGtleXdvcmQuCitzeW4gbWF0Y2ggamF2YWNjU3BlY1Rva2VuICIuTE9PS0FIRUFEKCJtcz1zKzEsbWU9ZS0xCitzeW4gbWF0Y2ggamF2YWNjVG9rZW4gIjxbXj4gXHRdKj4iCitzeW4ga2V5d29yZCBqYXZhY2NBY3Rpb25Ub2tlbiBUT0tFTiBTS0lQIE1PUkUgU1BFQ0lBTF9UT0tFTgorc3luIGtleXdvcmQgamF2YWNjRXJyb3IgREVCVUcgSUdOT1JFX0lOX0JORgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jc3Nfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfY3NzX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisgIEhpTGluayBqYXZhY2NTcGVjVG9rZW4gU3RhdGVtZW50CisgIEhpTGluayBqYXZhY2NBY3Rpb25Ub2tlbiBUeXBlCisgIEhpTGluayBqYXZhY2NQYWNrYWdlcyBqYXZhU2NvcGVEZWNsCisgIEhpTGluayBqYXZhY2NUb2tlbiBTdHJpbmcKKyAgSGlMaW5rIGphdmFjY0Vycm9yIEVycm9yCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJqYXZhY2MiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9qYXZhc2NyaXB0LnZpbSBiL3J1bnRpbWUvc3ludGF4L2phdmFzY3JpcHQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzc0OTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9qYXZhc2NyaXB0LnZpbQpAQCAtMCwwICsxLDExMSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUphdmFTY3JpcHQKKyIgTWFpbnRhaW5lcjoJQ2xhdWRpbyBGbGVpbmVyIDxjbGF1ZGlvQGZsZWluZXIuY29tPgorIiBVUkw6CQlodHRwOi8vd3d3LmZsZWluZXIuY29tL3ZpbS9zeW50YXgvamF2YXNjcmlwdC52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDE2CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCisiIHR1bmluZyBwYXJhbWV0ZXJzOgorIiB1bmxldCBqYXZhU2NyaXB0X2ZvbGQKKworaWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3ludGF4IGNsZWFyCisgIGVsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorICBlbmRpZgorICBsZXQgbWFpbl9zeW50YXggPSAnamF2YXNjcmlwdCcKK2VuZGlmCisKKyIgRHJvcCBmb2xkIGlmIGl0IHNldCBidXQgdmltIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KK2lmIHZlcnNpb24gPCA2MDAgJiYgZXhpc3RzKCJqYXZhU2NyaXB0X2ZvbGQiKQorICB1bmxldCBqYXZhU2NyaXB0X2ZvbGQKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCisKK3N5biBrZXl3b3JkIGphdmFTY3JpcHRDb21tZW50VG9kbyAgICAgIFRPRE8gRklYTUUgWFhYIFRCRCBjb250YWluZWQKK3N5biBtYXRjaCAgIGphdmFTY3JpcHRMaW5lQ29tbWVudCAgICAgICJcL1wvLiokIiBjb250YWlucz1qYXZhU2NyaXB0Q29tbWVudFRvZG8KK3N5biBtYXRjaCAgIGphdmFTY3JpcHRDb21tZW50U2tpcCAgICAgICJeWyBcdF0qXCpcKCRcfFsgXHRdXCtcKSIKK3N5biByZWdpb24gIGphdmFTY3JpcHRDb21tZW50CSAgICAgICBzdGFydD0iL1wqIiAgZW5kPSJcKi8iIGNvbnRhaW5zPWphdmFTY3JpcHRDb21tZW50VG9kbworc3luIG1hdGNoICAgamF2YVNjcmlwdFNwZWNpYWwJICAgICAgICJcXFxkXGRcZFx8XFwuIgorc3luIHJlZ2lvbiAgamF2YVNjcmlwdFN0cmluZ0QJICAgICAgIHN0YXJ0PSsiKyAgc2tpcD0rXFxcXFx8XFwiKyAgZW5kPSsiKyAgY29udGFpbnM9amF2YVNjcmlwdFNwZWNpYWwsQGh0bWxQcmVwcm9jCitzeW4gcmVnaW9uICBqYXZhU2NyaXB0U3RyaW5nUwkgICAgICAgc3RhcnQ9KycrICBza2lwPStcXFxcXHxcXCcrICBlbmQ9KycrICBjb250YWlucz1qYXZhU2NyaXB0U3BlY2lhbCxAaHRtbFByZXByb2MKK3N5biBtYXRjaCAgIGphdmFTY3JpcHRTcGVjaWFsQ2hhcmFjdGVyICInXFwuJyIKK3N5biBtYXRjaCAgIGphdmFTY3JpcHROdW1iZXIJICAgICAgICItXD1cPFxkXCtMXD1cPlx8MFt4WF1bMC05YS1mQS1GXVwrXD4iCitzeW4gcmVnaW9uICBqYXZhU2NyaXB0UmVnZXhwU3RyaW5nICAgICBzdGFydD0rLysgc2tpcD0rXFxcXFx8XFwvKyBlbmQ9Ky9bZ2ldXD9ccyokKyBlbmQ9Ky9bZ2ldXD9ccypbOywpXSttZT1lLTEgY29udGFpbnM9QGh0bWxQcmVwcm9jIG9uZWxpbmUKK3N5biBrZXl3b3JkIGphdmFTY3JpcHRDb25kaXRpb25hbCAgICAgIGlmIGVsc2UKK3N5biBrZXl3b3JkIGphdmFTY3JpcHRSZXBlYXQJICAgICAgIHdoaWxlIGZvcgorc3luIGtleXdvcmQgamF2YVNjcmlwdEJyYW5jaAkgICAgICAgYnJlYWsgY29udGludWUgc3dpdGNoIGNhc2UgZGVmYXVsdAorc3luIGtleXdvcmQgamF2YVNjcmlwdE9wZXJhdG9yCSAgICAgICBuZXcgaW4KK3N5biBrZXl3b3JkIGphdmFTY3JpcHRUeXBlCSAgICAgICB0aGlzIHZhciBjb25zdAorc3luIGtleXdvcmQgamF2YVNjcmlwdFN0YXRlbWVudCAgICAgICAgcmV0dXJuIHdpdGgKK3N5biBrZXl3b3JkIGphdmFTY3JpcHRCb29sZWFuCSAgICAgICB0cnVlIGZhbHNlCisKK2lmIGV4aXN0cygiamF2YVNjcmlwdF9mb2xkIikKKyAgICBzeW4gbWF0Y2gJamF2YVNjcmlwdEZ1bmN0aW9uICAgICAgIlw8ZnVuY3Rpb25cPiIKKyAgICBzeW4gcmVnaW9uCWphdmFTY3JpcHRGdW5jdGlvbkZvbGQJc3RhcnQ9Ilw8ZnVuY3Rpb25cPi4qW159O10kIiBlbmQ9Il5cejF9LiokIiB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQKKworICAgIHN5biBzeW5jIG1hdGNoIGphdmFTY3JpcHRTeW5jCWdyb3VwaGVyZSBqYXZhU2NyaXB0RnVuY3Rpb25Gb2xkICJcPGZ1bmN0aW9uXD4iCisgICAgc3luIHN5bmMgbWF0Y2ggamF2YVNjcmlwdFN5bmMJZ3JvdXBoZXJlIE5PTkUgIl59IgorCisgICAgc2V0bG9jYWwgZm9sZG1ldGhvZD1zeW50YXgKKyAgICBzZXRsb2NhbCBmb2xkdGV4dD1nZXRsaW5lKHY6Zm9sZHN0YXJ0KQorZWxzZQorICAgIHN5biBrZXl3b3JkCWphdmFTY3JpcHRGdW5jdGlvbiAgICAgIGZ1bmN0aW9uCisgICAgc3luIG1hdGNoCWphdmFTY3JpcHRCcmFjZXMJICAgIlt7fV0iCitlbmRpZgorCitzeW4gc3luYyBmcm9tc3RhcnQKK3N5biBzeW5jIG1heGxpbmVzPTEwMAorCisiIGNhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMKK3N5biByZWdpb24gIGphdmFTY3JpcHRQYXJlbiAgICAgICB0cmFuc3BhcmVudCBzdGFydD0iKCIgZW5kPSIpIiBjb250YWlucz1qYXZhU2NyaXB0UGFyZW4samF2YVNjcmlwdENvbW1lbnQsamF2YVNjcmlwdFNwZWNpYWwsamF2YVNjcmlwdFN0cmluZ0QsamF2YVNjcmlwdFN0cmluZ1MsamF2YVNjcmlwdFNwZWNpYWxDaGFyYWN0ZXIsamF2YVNjcmlwdE51bWJlcixqYXZhU2NyaXB0UmVnZXhwU3RyaW5nLGphdmFTY3JpcHRCb29sZWFuLGphdmFTY3JpcHRCcmFjZXMKK3N5biBtYXRjaCAgIGphdmFTY3JQYXJlbkVycm9yICAiKSIKKworaWYgbWFpbl9zeW50YXggPT0gImphdmFzY3JpcHQiCisgIHN5biBzeW5jIGNjb21tZW50IGphdmFTY3JpcHRDb21tZW50CitlbmRpZgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9qYXZhc2NyaXB0X3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2phdmFzY3JpcHRfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKyAgSGlMaW5rIGphdmFTY3JpcHRDb21tZW50CSAgICAgQ29tbWVudAorICBIaUxpbmsgamF2YVNjcmlwdExpbmVDb21tZW50CSAgICAgQ29tbWVudAorICBIaUxpbmsgamF2YVNjcmlwdENvbW1lbnRUb2RvCSAgICAgVG9kbworICBIaUxpbmsgamF2YVNjcmlwdFNwZWNpYWwJICAgICBTcGVjaWFsCisgIEhpTGluayBqYXZhU2NyaXB0U3RyaW5nUwkgICAgIFN0cmluZworICBIaUxpbmsgamF2YVNjcmlwdFN0cmluZ0QJICAgICBTdHJpbmcKKyAgSGlMaW5rIGphdmFTY3JpcHRDaGFyYWN0ZXIJICAgICBDaGFyYWN0ZXIKKyAgSGlMaW5rIGphdmFTY3JpcHRTcGVjaWFsQ2hhcmFjdGVyICBqYXZhU2NyaXB0U3BlY2lhbAorICBIaUxpbmsgamF2YVNjcmlwdE51bWJlcgkgICAgIGphdmFTY3JpcHRWYWx1ZQorICBIaUxpbmsgamF2YVNjcmlwdENvbmRpdGlvbmFsCSAgICAgQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGphdmFTY3JpcHRSZXBlYXQJICAgICBSZXBlYXQKKyAgSGlMaW5rIGphdmFTY3JpcHRCcmFuY2gJICAgICBDb25kaXRpb25hbAorICBIaUxpbmsgamF2YVNjcmlwdE9wZXJhdG9yCSAgICAgT3BlcmF0b3IKKyAgSGlMaW5rIGphdmFTY3JpcHRUeXBlCQkgICAgIFR5cGUKKyAgSGlMaW5rIGphdmFTY3JpcHRTdGF0ZW1lbnQJICAgICBTdGF0ZW1lbnQKKyAgSGlMaW5rIGphdmFTY3JpcHRGdW5jdGlvbgkgICAgIEZ1bmN0aW9uCisgIEhpTGluayBqYXZhU2NyaXB0QnJhY2VzCSAgICAgRnVuY3Rpb24KKyAgSGlMaW5rIGphdmFTY3JpcHRFcnJvcgkgICAgIEVycm9yCisgIEhpTGluayBqYXZhU2NyUGFyZW5FcnJvcgkgICAgIGphdmFTY3JpcHRFcnJvcgorICBIaUxpbmsgamF2YVNjcmlwdEJvb2xlYW4JICAgICBCb29sZWFuCisgIEhpTGluayBqYXZhU2NyaXB0UmVnZXhwU3RyaW5nICAgICAgU3RyaW5nCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJqYXZhc2NyaXB0IgoraWYgbWFpbl9zeW50YXggPT0gJ2phdmFzY3JpcHQnCisgIHVubGV0IG1haW5fc3ludGF4CitlbmRpZgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvamVzcy52aW0gYi9ydW50aW1lL3N5bnRheC9qZXNzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDNiYWIzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvamVzcy52aW0KQEAgLTAsMCArMSwxNjEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglKZXNzCisiIE1haW50YWluZXI6CVBhdWwgQmFsZW1lIDxwYmFsZW1lQG1haWwuY29tPgorIiBMYXN0IGNoYW5nZToJU2VwdGVtYmVyIDE0LCAyMDAwCisiIEJhc2VkIG9uIGxpc3AudmltIGJ5IDogRHIuIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc2V0IGlza2V5d29yZD00Miw0Myw0NSw0Ny01OCw2MC02Miw2NC05MCw5Ny0xMjIsXworZWxzZQorICBzZXRsb2NhbCBpc2tleXdvcmQ9NDIsNDMsNDUsNDctNTgsNjAtNjIsNjQtOTAsOTctMTIyLF8KK2VuZGlmCisKKyIgTGlzdHMKK3N5biBtYXRjaAlqZXNzU3ltYm9sCSFbXigpJ2AsIjsgXHRdXCshCWNvbnRhaW5lZAorc3luIG1hdGNoCWplc3NCYXJTeW1ib2wJIXwuLlx7LX18IQkJY29udGFpbmVkCitzeW4gcmVnaW9uCWplc3NMaXN0IG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIoIiBza2lwPSJ8Llx7LX18IiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIGNvbnRhaW5zPWplc3NBdG9tLGplc3NCUUxpc3QsamVzc0NvbmNhdCxqZXNzRGVjbGFyYXRpb24samVzc0xpc3QsamVzc051bWJlcixqZXNzU3ltYm9sLGplc3NTcGVjaWFsLGplc3NGdW5jLGplc3NLZXksamVzc0F0b21NYXJrLGplc3NTdHJpbmcsamVzc0NvbW1lbnQsamVzc0JhclN5bWJvbCxqZXNzQXRvbUJhclN5bWJvbCxqZXNzVmFyCitzeW4gcmVnaW9uCWplc3NCUUxpc3QJbWF0Y2hncm91cD1QcmVQcm9jICAgc3RhcnQ9ImAoIglza2lwPSJ8Llx7LX18IiBtYXRjaGdyb3VwPVByZVByb2MgICBlbmQ9IikiIGNvbnRhaW5zPWplc3NBdG9tLGplc3NCUUxpc3QsamVzc0NvbmNhdCxqZXNzRGVjbGFyYXRpb24samVzc0xpc3QsamVzc051bWJlcixqZXNzU3BlY2lhbCxqZXNzU3ltYm9sLGplc3NGdW5jLGplc3NLZXksamVzc1ZhcixqZXNzQXRvbU1hcmssamVzc1N0cmluZyxqZXNzQ29tbWVudCxqZXNzQmFyU3ltYm9sLGplc3NBdG9tQmFyU3ltYm9sCisKKyIgQXRvbXMKK3N5biBtYXRjaAlqZXNzQXRvbU1hcmsJIiciCitzeW4gbWF0Y2gJamVzc0F0b20JIicoIm1lPWUtMQljb250YWlucz1qZXNzQXRvbU1hcmsJbmV4dGdyb3VwPWplc3NBdG9tTGlzdAorc3luIG1hdGNoCWplc3NBdG9tCSInW14gXHQoKV1cKyIJY29udGFpbnM9amVzc0F0b21NYXJrCitzeW4gbWF0Y2gJamVzc0F0b21CYXJTeW1ib2wJISd8Li5cey19fCEJY29udGFpbnM9amVzc0F0b21NYXJrCitzeW4gcmVnaW9uCWplc3NBdG9tCXN0YXJ0PSsnIisJc2tpcD0rXFwiKyBlbmQ9KyIrCitzeW4gcmVnaW9uCWplc3NBdG9tTGlzdAltYXRjaGdyb3VwPVNwZWNpYWwgc3RhcnQ9IigiCXNraXA9InwuXHstfXwiIG1hdGNoZ3JvdXA9U3BlY2lhbCBlbmQ9IikiCWNvbnRhaW5lZCBjb250YWlucz1qZXNzQXRvbUxpc3QsamVzc0F0b21ObWJyMCxqZXNzU3RyaW5nLGplc3NDb21tZW50LGplc3NBdG9tQmFyU3ltYm9sCitzeW4gbWF0Y2gJamVzc0F0b21ObWJyCSJcPFswLTldXCsiCQkJY29udGFpbmVkCisKKyIgU3RhbmRhcmQgamVzcyBGdW5jdGlvbnMgYW5kIE1hY3Jvcworc3luIGtleXdvcmQgamVzc0Z1bmMgICAgKiAgICsgICAqKgktICAgLyAgIDwgICA+ICAgPD0gID49ICA8PiAgPQorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgbG9uZwkgICAgbG9uZ3AKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIGFicwkgICAgYWdlbmRhCSAgICAgIGFuZAorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgYXNzZXJ0CSAgICBhc3NlcnQtc3RyaW5nICAgICAgIGJhZworc3luIGtleXdvcmQgamVzc0Z1bmMgICAgYmF0Y2gJICAgIGJpbmQJICAgICAgYml0LWFuZAorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgYml0LW5vdAkgICAgYml0LW9yCSAgICAgIGJsb2FkCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBic2F2ZQkgICAgYnVpbGQJICAgICAgY2FsbAorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgY2xlYXIJICAgIGNsZWFyLXN0b3JhZ2UgICAgICAgY2xvc2UKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIGNvbXBsZW1lbnQkICAgICBjb250ZXh0CSAgICAgIGNvdW50LXF1ZXJ5LXJlc3VsdHMKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIGNyZWF0ZSQKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIGRlbGV0ZSQJICAgIGRpdgorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgZG8tYmFja3dhcmQtY2hhaW5pbmcJICAgICAgZQorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgZW5naW5lCSAgICBlcQkgICAgICBlcSoKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIGV2YWwJICAgIGV2ZW5wCSAgICAgIGV4aXQKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIGV4cAkgICAgZXhwbG9kZSQJICAgICAgZXh0ZXJuYWwtYWRkcmVzc3AKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIGZhY3Qtc2xvdC12YWx1ZSBmYWN0cwkgICAgICBmZXRjaAorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgZmlyc3QkCSAgICBmbG9hdAkgICAgICBmbG9hdHAKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIGZvcmVhY2gJICAgIGZvcm1hdAkgICAgICBnZW5zeW0qCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBnZXQJICAgIGdldC1mYWN0LWR1cGxpY2F0aW9uCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBnZXQtbWVtYmVyCSAgICBnZXQtbXVsdGl0aHJlYWRlZC1pbworc3luIGtleXdvcmQgamVzc0Z1bmMgICAgZ2V0LXJlc2V0LWdsb2JhbHMJICAgICAgZ2V0LXNhbGllbmNlLWV2YWx1YXRpb24KK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIGhhbHQJICAgIGlmCSAgICAgIGltcGxvZGUkCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBpbXBvcnQJICAgIGluc2VydCQJICAgICAgaW50ZWdlcgorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgaW50ZWdlcnAJICAgIGludGVyc2VjdGlvbiQgICAgICAgamVzcy12ZXJzaW9uLW51bWJlcgorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgamVzcy12ZXJzaW9uLXN0cmluZwkgICAgICBsZW5ndGgkCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBsZXhlbWVwCSAgICBsaXN0LWZ1bmN0aW9uJCAgICAgIGxvYWQtZmFjdHMKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIGxvYWQtZnVuY3Rpb24gICBsb2FkLXBhY2thZ2UJICAgICAgbG9nCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBsb2cxMAkgICAgbG93Y2FzZQkgICAgICBtYXRjaGVzCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBtYXgJICAgIG1lbWJlciQJICAgICAgbWluCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBtb2QJICAgIG1vZGlmeQkgICAgICBtdWx0aWZpZWxkcAorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgbmVxCSAgICBuZXcJICAgICAgbm90CitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBudGgkCSAgICBudW1iZXJwCSAgICAgIG9kZHAKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIG9wZW4JICAgIG9yCSAgICAgIHBpCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBwcGRlZmZ1bmN0aW9uICAgcHBkZWZnbG9iYWwJICAgICAgZGRwZWZydWxlCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBwcmludG91dAkgICAgcmFuZG9tCSAgICAgIHJlYWQKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIHJlYWRsaW5lCSAgICByZXBsYWNlJAkgICAgICByZXNldAorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgcmVzdCQJICAgIHJldHJhY3QJICAgICAgcmV0cmFjdC1zdHJpbmcKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIHJldHVybgkgICAgcm91bmQJICAgICAgcnVsZXMKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIHJ1bgkgICAgcnVuLXF1ZXJ5CSAgICAgIHJ1bi11bnRpbC1oYWx0CitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBzYXZlLWZhY3RzCSAgICBzZXQJICAgICAgc2V0LWZhY3QtZHVwbGljYXRpb24KK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIHNldC1mYWN0b3J5ICAgICBzZXQtbWVtYmVyCSAgICAgIHNldC1tdWx0aXRocmVhZGVkLWlvCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBzZXQtbm9kZS1pbmRleC1oYXNoCSAgICAgIHNldC1yZXNldC1nbG9iYWxzCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBzZXQtc2FsaWVuY2UtZXZhbHVhdGlvbgkgICAgICBzZXQtc3RyYXRlZ3kKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIHNldGdlbgkgICAgc2hvdy1kZWZmYWN0cyAgICAgICBzaG93LWRlZnRlbXBsYXRlcworc3luIGtleXdvcmQgamVzc0Z1bmMgICAgc2hvdy1qZXNzLWxpc3RlbmVycwkgICAgICBzb2NrZXQKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIHNxcnQJICAgIHN0b3JlCSAgICAgIHN0ci1jYXQKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIHN0ci1jb21wYXJlICAgICBzdHItaW5kZXgJICAgICAgc3RyLWxlbmd0aAorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgc3RyaW5ncAkgICAgc3ViLXN0cmluZwkgICAgICBzdWJzZXEkCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICBzdWJzZXRwCSAgICBzeW0tY2F0CSAgICAgIHN5bWJvbHAKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIHN5c3RlbQkgICAgdGhyb3cJICAgICAgdGltZQorc3luIGtleXdvcmQgamVzc0Z1bmMgICAgdHJ5CSAgICB1bmRlZmFkdmljZQkgICAgICB1bmRlZmluc3RhbmNlCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICB1bmRlZnJ1bGUJICAgIHVuaW9uJAkgICAgICB1bndhdGNoCitzeW4ga2V5d29yZCBqZXNzRnVuYyAgICB1cGNhc2UJICAgIHZpZXcJICAgICAgd2F0Y2gKK3N5biBrZXl3b3JkIGplc3NGdW5jICAgIHdoaWxlCitzeW4gbWF0Y2ggICBqZXNzRnVuYwkiXDxjW2FkXVwrclw+IgorCisiIGplc3MgS2V5d29yZHMgKG1vZGlmaWVycykKK3N5biBrZXl3b3JkIGplc3NLZXkJICAgIGRlZmdsb2JhbAkgIGRlZmZ1bmN0aW9uCSAgICBkZWZydWxlCitzeW4ga2V5d29yZCBqZXNzS2V5CSAgICBkZWZmYWN0cworc3luIGtleXdvcmQgamVzc0tleQkgICAgZGVmYWR2aWNlCSAgZGVmY2xhc3MJICAgIGRlZmluc3RhbmNlCisKKyIgU3RhbmRhcmQgamVzcyBWYXJpYWJsZXMKK3N5biByZWdpb24JamVzc1ZhcglzdGFydD0iPyIJZW5kPSJbXmEtekEtWjAtOV0ibWU9ZS0xCisKKyIgU3RyaW5ncworc3luIHJlZ2lvbglqZXNzU3RyaW5nCXN0YXJ0PSsiKwlza2lwPStcXCIrIGVuZD0rIisKKworIiBTaGFyZWQgd2l0aCBEZWNsYXJhdGlvbnMsIE1hY3JvcywgRnVuY3Rpb25zCisic3luIGtleXdvcmQJamVzc0RlY2xhcmF0aW9uCisKK3N5biBtYXRjaAlqZXNzTnVtYmVyCSJbMC05XVwrIgorCitzeW4gbWF0Y2gJamVzc1NwZWNpYWwJIlwqW2EtekEtWl9dW2EtekEtWl8wLTktXSpcKiIKK3N5biBtYXRjaAlqZXNzU3BlY2lhbAkhI3xbXigpJ2AsIjsgXHRdXCt8IyEKK3N5biBtYXRjaAlqZXNzU3BlY2lhbAkhI3hbMC05YS1mQS1GXVwrIQorc3luIG1hdGNoCWplc3NTcGVjaWFsCSEjb1swLTddXCshCitzeW4gbWF0Y2gJamVzc1NwZWNpYWwJISNiWzAxXVwrIQorc3luIG1hdGNoCWplc3NTcGVjaWFsCSEjXFxbIC1cfl0hCitzeW4gbWF0Y2gJamVzc1NwZWNpYWwJISNbJzpdW14oKSdgLCI7IFx0XVwrIQorc3luIG1hdGNoCWplc3NTcGVjaWFsCSEjKFteKCknYCwiOyBcdF1cKykhCisKK3N5biBtYXRjaAlqZXNzQ29uY2F0CSJcc1wuXHMiCitzeW50YXggbWF0Y2gJamVzc1BhcmVuRXJyb3IJIikiCisKKyIgQ29tbWVudHMKK3N5biBtYXRjaAlqZXNzQ29tbWVudAkiOy4qJCIKKworIiBzeW5jaHJvbml6YXRpb24KK3N5biBzeW5jIGxpbmVzPTEwMAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9qZXNzX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2plc3Nfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgamVzc0F0b21ObWJyCWplc3NOdW1iZXIKKyAgSGlMaW5rIGplc3NBdG9tTWFyawlqZXNzTWFyaworCisgIEhpTGluayBqZXNzQXRvbQkJSWRlbnRpZmllcgorICBIaUxpbmsgamVzc0F0b21CYXJTeW1ib2wJU3BlY2lhbAorICBIaUxpbmsgamVzc0JhclN5bWJvbAlTcGVjaWFsCisgIEhpTGluayBqZXNzQ29tbWVudAlDb21tZW50CisgIEhpTGluayBqZXNzQ29uY2F0CVN0YXRlbWVudAorICBIaUxpbmsgamVzc0RlY2xhcmF0aW9uCVN0YXRlbWVudAorICBIaUxpbmsgamVzc0Z1bmMJCVN0YXRlbWVudAorICBIaUxpbmsgamVzc0tleQkJVHlwZQorICBIaUxpbmsgamVzc01hcmsJCURlbGltaXRlcgorICBIaUxpbmsgamVzc051bWJlcglOdW1iZXIKKyAgSGlMaW5rIGplc3NQYXJlbkVycm9yCUVycm9yCisgIEhpTGluayBqZXNzU3BlY2lhbAlUeXBlCisgIEhpTGluayBqZXNzU3RyaW5nCVN0cmluZworICBIaUxpbmsgamVzc1ZhcgkJSWRlbnRpZmllcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJqZXNzIgorCisiIHZpbTogdHM9MTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2pncmFwaC52aW0gYi9ydW50aW1lL3N5bnRheC9qZ3JhcGgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlY2Q1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9qZ3JhcGgudmltCkBAIC0wLDAgKzEsNTggQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglqZ3JhcGggKGdyYXBoIHBsb3R0aW5nIHV0aWxpdHkpCisiIE1haW50YWluZXI6CUpvbmFzIE11bnNpbiBqbXVuc2luQGlraS5maQorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMDQKKyIgdGhpcyBzeW50YXggZmlsZSBpcyBub3QgeWV0IGNvbXBsZXRlCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBtYXRjaAorCisiIGNvbW1lbnRzCitzeW4gcmVnaW9uCWpncmFwaENvbW1lbnQJc3RhcnQ9IihcKiAiIGVuZD0iIFwqKSIKKworc3luIGtleXdvcmQJamdyYXBoQ21kCW5ld2N1cnZlIG5ld2dyYXBoIG1hcmt0eXBlCitzeW4ga2V5d29yZAlqZ3JhcGhUeXBlCXhheGlzIHlheGlzCisKK3N5biBrZXl3b3JkCWpncmFwaFR5cGUJY2lyY2xlIGJveCBkaWFtb25kIHRyaWFuZ2xlIHggY3Jvc3MgZWxsaXBzZQorc3luIGtleXdvcmQJamdyYXBoVHlwZQl4YmFyIHliYXIgdGV4dCBwb3N0c2NyaXB0IGVwcyBub25lIGdlbmVyYWwKKworc3luIGtleXdvcmQJamdyYXBoVHlwZQlzb2xpZCBkb3R0ZWQgZGFzaGVkIGxvbmdkYXNoIGRvdGRhc2ggZG9kb3RkYXNoCitzeW4ga2V5d29yZAlqZ3JhcGhUeXBlCWRvdGRvdGRhc2hkYXNoIHB0cworCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90LiAtIG9yIG5vIC0KK3N5biBtYXRjaCAgamdyYXBoTnVtYmVyCQkgIlw8LVw9XGRcK1w+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QgLSBvciBubyAtCitzeW4gbWF0Y2ggIGpncmFwaE51bWJlcgkJICJcPC1cPVxkXCtcLlxkKlw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdCAtIG9yIG5vIC0KK3N5biBtYXRjaCAgamdyYXBoTnVtYmVyCQkgIlwtXD1cLlxkXCtcPiIKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9qZ3JhcGhfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfamdyYXBoX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGpncmFwaENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgamdyYXBoQ21kCUlkZW50aWZpZXIKKyAgSGlMaW5rIGpncmFwaFR5cGUJVHlwZQorICBIaUxpbmsgamdyYXBoTnVtYmVyCU51bWJlcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImpncmFwaCIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2pwcm9wZXJ0aWVzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2pwcm9wZXJ0aWVzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzQzYmQyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvanByb3BlcnRpZXMudmltCkBAIC0wLDAgKzEsMTQ4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJSmF2YSBQcm9wZXJ0aWVzIHJlc291cmNlIGZpbGUgKCoucHJvcGVydGllc1tfKl0pCisiIE1haW50YWluZXI6CVNpbW9uIEJhbGR3aW4gPHNpbW9uYkBzY28uY29tPgorIiBMYXN0IGNoYW5nZToJMjZ0aCBNYXIgMjAwMAorCisiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyIgT3B0aW9uYWwgYW5kIHR1bmluZyB2YXJpYWJsZXM6CisKKyIganByb3BlcnRpZXNfbGluZXMKKyIgLS0tLS0tLS0tLS0tLS0tLS0KKyIgICBTZXQgYSB2YWx1ZSBmb3IgdGhlIHN5bmMgYmxvY2sgdGhhdCB3ZSB1c2UgdG8gZmluZCBsb25nIGNvbnRpbnVhdGlvbiBsaW5lcworIiAgIGluIHByb3BlcnRpZXM7IHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGxhcmdlIC0gaWYgeW91IGhhdmUgbGFyZ2VyIGNvbnRpbnVhdGlvbgorIiAgIHNldHMgeW91IG1heSBuZWVkIHRvIGluY3JlYXNlIGl0IGZ1cnRoZXIgLSBpZiBub3QsIGFuZCB5b3UgZmluZCBlZGl0aW5nIGlzCisiICAgc2xvdywgcmVkdWNlIHRoZSB2YWx1ZSBvZiBqcHJvcGVydGllc19saW5lcy4KK2lmICFleGlzdHMoImpwcm9wZXJ0aWVzX2xpbmVzIikKKwlsZXQganByb3BlcnRpZXNfbGluZXMgPSAyNTYKK2VuZGlmCisKKyIganByb3BlcnRpZXNfc3RyaWN0X3N5bnRheAorIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiICAgTW9zdCBwcm9wZXJ0aWVzIGZpbGVzIGFzc2lnbiB2YWx1ZXMgd2l0aCAiaWQ9dmFsdWUiIG9yICJpZDp2YWx1ZSIuICBCdXQsCisiICAgc3RyaWN0bHksIHRoZSBKYXZhIHByb3BlcnRpZXMgcGFyc2VyIGFsc28gYWxsb3dzICJpZCB2YWx1ZSIsICJpZCIsIGFuZAorIiAgIGV2ZW4gbW9yZSBiaXphcnJlbHkgIj12YWx1ZSIsICI6dmFsdWUiLCAiIHZhbHVlIiwgYW5kIHNvIG9uLiAgVGhlc2UgbGF0dGVyCisiICAgb25lcywgaG93ZXZlciwgYXJlIHJhcmVseSB1c2VkLCBpZiBldmVyLCBhbmQgaGFuZGxpbmcgdGhlbSBpbiB0aGUgaGlnaC0KKyIgICBsaWdodGluZyBjYW4gb2JzY3VyZSBlcnJvcnMgaW4gdGhlIG1vcmUgbm9ybWFsIGZvcm1zLiAgU28sIGluIHByYWN0aWNlCisiICAgd2UgdGFrZSBzcGVjaWFsIGVmZm9ydHMgdG8gcGljayBvdXQgb25seSAiaWQ9dmFsdWUiIGFuZCAiaWQ6dmFsdWUiIGZvcm1zCisiICAgYnkgZGVmYXVsdC4gIElmIHlvdSB3YW50IHN0cmljdCBjb21wbGlhbmNlLCBzZXQganByb3BlcnRpZXNfc3RyaWN0X3N5bnRheAorIiAgIHRvIG5vbi16ZXJvIChhbmQgZ29vZCBsdWNrKS4KK2lmICFleGlzdHMoImpwcm9wZXJ0aWVzX3N0cmljdF9zeW50YXgiKQorCWxldCBqcHJvcGVydGllc19zdHJpY3Rfc3ludGF4ID0gMAorZW5kaWYKKworIiBqcHJvcGVydGllc19zaG93X21lc3NhZ2VzCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgICBJZiB0aGlzIHByb3BlcnRpZXMgZmlsZSBjb250YWlucyBtZXNzYWdlcyBmb3IgdXNlIHdpdGggTWVzc2FnZUZvcm1hdCwKKyIgICBzZXR0aW5nIGEgbm9uLXplcm8gdmFsdWUgd2lsbCBoaWdobGlnaHQgdGhlbS4gIE1lc3NhZ2VzIGFyZSBvZiB0aGUgZm9ybQorIiAgICJ7Li4ufSIuICBIaWdobGlnaHRpbmcgZG9lc24ndCBnbyB0byB0aGUgcGFpbnMgb2YgcGlja2luZyBhcGFydCB3aGF0IGlzCisiICAgaW4gdGhlIGZvcm1hdCBpdHNlbGYgLSBqdXN0IHRoZSBiYXNpY3MgZm9yIG5vdy4KK2lmICFleGlzdHMoImpwcm9wZXJ0aWVzX3Nob3dfbWVzc2FnZXMiKQorCWxldCBqcHJvcGVydGllc19zaG93X21lc3NhZ2VzID0gMAorZW5kaWYKKworIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgc3dpdGNoIGNhc2Ugc2Vuc2l0aXZpdHkgb2ZmCitzeW4gY2FzZSBpZ25vcmUKKworIiBzZXQgdGhlIGJsb2NrCitleGVjICJzeW4gc3luYyBsaW5lcz0iIC4ganByb3BlcnRpZXNfbGluZXMKKworIiBzd2l0Y2ggYmV0d2VlbiAnbm9ybWFsJyBhbmQgJ3N0cmljdCcgc3ludGF4CitpZiBqcHJvcGVydGllc19zdHJpY3Rfc3ludGF4ICE9IDAKKworCSIgYW4gYXNzaWdubWVudCBpcyBwcmV0dHkgbXVjaCBhbnkgbm9uLWVtcHR5IGxpbmUgYXQgdGhpcyBwb2ludCwKKwkiIHRyeWluZyB0byBub3QgdGhpbmsgYWJvdXQgY29udGludWF0aW9uIGxpbmVzCisJc3luIG1hdGNoICAganByb3BlcnRpZXNBc3NpZ25tZW50CSJeXHMqW15bOnNwYWNlOl1dXCsuKiQiIGNvbnRhaW5zPWpwcm9wZXJ0aWVzSWRlbnRpZmllcgorCisJIiBhbiBpZGVudGlmaWVyIGlzIGFueXRoaW5nIG5vdCBhIHNwYWNlIGNoYXJhY3RlciwgcHJldHR5IG11Y2g7IGl0J3MKKwkiIGZvbGxvd2VkIGJ5ID0gb3IgOiwgb3Igc3BhY2Ugb3IgdGFiLiAgT3IgZW5kLW9mLWxpbmUuCisJc3luIG1hdGNoICAganByb3BlcnRpZXNJZGVudGlmaWVyCSJbXj06WzpzcGFjZTpdXSoiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9anByb3BlcnRpZXNEZWxpbWl0ZXIKKworCSIgdHJlYXQgdGhlIGRlbGltaXRlciBzcGVjaWFsbHkgdG8gZ2V0IGNvbG91cnMgcmlnaHQKKwlzeW4gbWF0Y2ggICBqcHJvcGVydGllc0RlbGltaXRlcgkiXHMqWz06WzpzcGFjZTpdXVxzKiIgY29udGFpbmVkIG5leHRncm91cD1qcHJvcGVydGllc1N0cmluZworCisJIiBjYXRjaCB0aGUgYml6YXJyZSBjYXNlIG9mIG5vIGlkZW50aWZpZXI7IGEgc3BlY2lhbCBjYXNlIG9mIGRlbGltaXRlcgorCXN5biBtYXRjaCAgIGpwcm9wZXJ0aWVzRW1wdHlJZGVudGlmaWVyCSJeXHMqWz06XVxzKiIgbmV4dGdyb3VwPWpwcm9wZXJ0aWVzU3RyaW5nCitlbHNlCisKKwkiIGhlcmUgYW4gYXNzaWdubWVudCBpcyBpZD12YWx1ZSBvciBpZDp2YWx1ZSwgYW5kIHdlIGNvbnZlbmllbnRseQorCSIgaWdub3JlIGNvbnRpbnVhdGlvbiBsaW5lcyBmb3IgdGhlIHByZXNlbnQKKwlzeW4gbWF0Y2ggICBqcHJvcGVydGllc0Fzc2lnbm1lbnQJIl5ccypbXj06WzpzcGFjZTpdXVwrXHMqWz06XS4qJCIgY29udGFpbnM9anByb3BlcnRpZXNJZGVudGlmaWVyCisKKwkiIGFuIGlkZW50aWZpZXIgaXMgYW55dGhpbmcgbm90IGEgc3BhY2UgY2hhcmFjdGVyLCBwcmV0dHkgbXVjaDsgaXQncworCSIgYWx3YXlzIGZvbGxvd2VkIGJ5ID0gb3IgOiwgYW5kIHdlIGZpbmQgaXQgaW4gYW4gYXNzaWdubWVudAorCXN5biBtYXRjaCAgIGpwcm9wZXJ0aWVzSWRlbnRpZmllcgkiW149Ols6c3BhY2U6XV1cKyIgY29udGFpbmVkIG5leHRncm91cD1qcHJvcGVydGllc0RlbGltaXRlcgorCisJIiB0cmVhdCB0aGUgZGVsaW1pdGVyIHNwZWNpYWxseSB0byBnZXQgY29sb3VycyByaWdodDsgdGhpcyB0aW1lIHRoZQorCSIgZGVsaW1pdGVyIG11c3QgY29udGFpbiA9IG9yIDoKKwlzeW4gbWF0Y2ggICBqcHJvcGVydGllc0RlbGltaXRlcgkiXHMqWz06XVxzKiIgY29udGFpbmVkIG5leHRncm91cD1qcHJvcGVydGllc1N0cmluZworZW5kaWYKKworIiBhIGRlZmluaXRpb24gaXMgYWxsIHVwIHRvIHRoZSBsYXN0IG5vbi1cLXRlcm1pbmF0ZWQgbGluZTsgc3RyaWN0bHksIEphdmEKKyIgcHJvcGVydGllcyB0ZW5kIHRvIGlnbm9yZSBsZWFkaW5nIHdoaXRlc3BhY2Ugb24gYWxsIGxpbmVzIG9mIGEgbXVsdGktbGluZQorIiBkZWZpbml0aW9uLCBidXQgd2UgZG9uJ3QgbG9vayBmb3IgdGhhdCBoZXJlIChiZWNhdXNlIGl0J3MgYSBtYWpvciBoYXNzbGUpCitzeW4gcmVnaW9uICBqcHJvcGVydGllc1N0cmluZwkJc3RhcnQ9IiIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5lZCBjb250YWlucz1qcHJvcGVydGllc1NwZWNpYWxDaGFyLGpwcm9wZXJ0aWVzRXJyb3IsanByb3BlcnRpZXNTcGVjaWFsCisKKyIgey4uLn0gaXMgYSBKYXZhIE1lc3NhZ2UgZm9ybWF0dGVyIC0gYWRkIGEgbWluaW1hbCByZWNvZ25pdGlvbiBvZiB0aGVzZQorIiBpZiByZXF1aXJlZAoraWYganByb3BlcnRpZXNfc2hvd19tZXNzYWdlcyAhPSAwCisJc3luIG1hdGNoICAganByb3BlcnRpZXNTcGVjaWFsCQkie1tefV0qfVx7LTEsXH0iIGNvbnRhaW5lZAorCXN5biBtYXRjaCAgIGpwcm9wZXJ0aWVzU3BlY2lhbAkJIid7IiBjb250YWluZWQKKwlzeW4gbWF0Y2ggICBqcHJvcGVydGllc1NwZWNpYWwJCSInJyIgY29udGFpbmVkCitlbmRpZgorCisiIFx1QUJDRCBhcmUgdW5pY29kZSBzcGVjaWFsIGNoYXJhY3RlcnMKK3N5biBtYXRjaCAgIGpwcm9wZXJ0aWVzU3BlY2lhbENoYXIJIlxcdVx4XHsxLDR9IiBjb250YWluZWQKKworIiAuLi5hbmQgXHUgbm90IGZvbGxvd2VkIGJ5IGEgaGV4IGRpZ2l0IGlzIGFuIGVycm9yLCB0aG91Z2ggdGhlIHByb3BlcnRpZXMKKyIgZmlsZSBwYXJzZXIgd29uJ3QgaXNzdWUgYW4gZXJyb3Igb24gaXQsIGp1c3Qgc2V0IHNvbWV0aGluZyB3YWNreSBsaWtlIHplcm8KK3N5biBtYXRjaCAgIGpwcm9wZXJ0aWVzRXJyb3IJCSJcXHVcWFx7MSw0fSIgY29udGFpbmVkCitzeW4gbWF0Y2ggICBqcHJvcGVydGllc0Vycm9yCQkiXFx1JCJtZT1lLTEgY29udGFpbmVkCisKKyIgb3RoZXIgdGhpbmdzIG9mIG5vdGUgYXJlIHRoZSBcdCxyLG4sXCwgYW5kIHRoZSBcIHByZWNlZGluZyBsaW5lIGVuZAorc3luIG1hdGNoICAganByb3BlcnRpZXNTcGVjaWFsCQkiXFxbdHJuXFxdIiBjb250YWluZWQKK3N5biBtYXRjaCAgIGpwcm9wZXJ0aWVzU3BlY2lhbAkJIlxcXHMiIGNvbnRhaW5lZAorc3luIG1hdGNoICAganByb3BlcnRpZXNTcGVjaWFsCQkiXFwkIiBjb250YWluZWQKKworIiBjb21tZW50cyBiZWdpbiB3aXRoICMgb3IgISwgYW5kIHBlcnNpc3QgdG8gZW5kIG9mIGxpbmU7IHB1dCBoZXJlIHNpbmNlCisiIHRoZXkgbWF5IGhhdmUgYmVlbiBjYXVnaHQgYnkgcGF0dGVybnMgYWJvdmUgdXMKK3N5biBtYXRjaCAgIGpwcm9wZXJ0aWVzQ29tbWVudAkJIl5ccypbIyFdLiokIiBjb250YWlucz1qcHJvcGVydGllc1RPRE8KK3N5biBrZXl3b3JkIGpwcm9wZXJ0aWVzVG9kbwkJVE9ETyBGSVhNRSBYWFggY29udGFpbmVkCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2pwcm9wZXJ0aWVzX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2pwcm9wZXJ0aWVzX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKwlIaUxpbmsganByb3BlcnRpZXNDb21tZW50CUNvbW1lbnQKKwlIaUxpbmsganByb3BlcnRpZXNUb2RvCQlUb2RvCisJSGlMaW5rIGpwcm9wZXJ0aWVzSWRlbnRpZmllcglJZGVudGlmaWVyCisJSGlMaW5rIGpwcm9wZXJ0aWVzU3RyaW5nCVN0cmluZworCUhpTGluayBqcHJvcGVydGllc0V4dGVuZFN0cmluZwlTdHJpbmcKKwlIaUxpbmsganByb3BlcnRpZXNDaGFyYWN0ZXIJQ2hhcmFjdGVyCisJSGlMaW5rIGpwcm9wZXJ0aWVzU3BlY2lhbAlTcGVjaWFsCisJSGlMaW5rIGpwcm9wZXJ0aWVzU3BlY2lhbENoYXIJU3BlY2lhbENoYXIKKwlIaUxpbmsganByb3BlcnRpZXNFcnJvcglFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJqcHJvcGVydGllcyIKKworIiB2aW06dHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvanNwLnZpbSBiL3J1bnRpbWUvc3ludGF4L2pzcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzYzhlMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2pzcC52aW0KQEAgLTAsMCArMSw4NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUpTUCAoSmF2YSBTZXJ2ZXIgUGFnZXMpCisiIE1haW50YWluZXI6CVJhZmFlbCBHYXJjaWEtU3VhcmV6IDxyZ2FyY2lhc3VhcmV6QGZyZWUuZnI+CisiIFVSTDoJCWh0dHA6Ly9yZ2FyY2lhc3VhcmV6LmZyZWUuZnIvdmltL3N5bnRheC9qc3AudmltCisiIExhc3QgY2hhbmdlOgkyMDA0IEZlYiAwMgorIiBDcmVkaXRzIDogUGF0Y2ggYnkgRGFycmVuIEdyZWF2ZXMgKHJlY29nbml6ZXMgPGpzcDouLi4+IHRhZ3MpCisiCSAgICBQYXRjaCBieSBUaG9tYXMgS2ltcHRvbiAocmVjb2duaXplcyBqc3BFeHByIGluc2lkZSBIVE1MIHRhZ3MpCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBsZXQgbWFpbl9zeW50YXggPSAnanNwJworZW5kaWYKKworIiBTb3VyY2UgSFRNTCBzeW50YXgKK2lmIHZlcnNpb24gPCA2MDAKKyAgc291cmNlIDxzZmlsZT46cDpoL2h0bWwudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9odG1sLnZpbQorZW5kaWYKK3VubGV0IGI6Y3VycmVudF9zeW50YXgKKworIiBOZXh0IHN5bnRheCBpdGVtcyBhcmUgY2FzZS1zZW5zaXRpdmUKK3N5biBjYXNlIG1hdGNoCisKKyIgSW5jbHVkZSBKYXZhIHN5bnRheAorc3luIGluY2x1ZGUgQGpzcEphdmEgPHNmaWxlPjpwOmgvamF2YS52aW0KKworc3luIHJlZ2lvbiBqc3BTY3JpcHRsZXQgbWF0Y2hncm91cD1qc3BUYWcgc3RhcnQ9LzwlLyAga2VlcGVuZCBlbmQ9LyU+LyBjb250YWlucz1AanNwSmF2YQorc3luIHJlZ2lvbiBqc3BDb21tZW50CQkJICBzdGFydD0vPCUtLS8JICAgICAgZW5kPS8tLSU+Lworc3luIHJlZ2lvbiBqc3BEZWNsCW1hdGNoZ3JvdXA9anNwVGFnIHN0YXJ0PS88JSEvIGtlZXBlbmQgZW5kPS8lPi8gY29udGFpbnM9QGpzcEphdmEKK3N5biByZWdpb24ganNwRXhwcgltYXRjaGdyb3VwPWpzcFRhZyBzdGFydD0vPCU9LyBrZWVwZW5kIGVuZD0vJT4vIGNvbnRhaW5zPUBqc3BKYXZhCitzeW4gcmVnaW9uIGpzcERpcmVjdGl2ZQkJCSAgc3RhcnQ9LzwlQC8JICAgICAgZW5kPS8lPi8gY29udGFpbnM9aHRtbFN0cmluZyxqc3BEaXJOYW1lLGpzcERpckFyZworCitzeW4ga2V5d29yZCBqc3BEaXJOYW1lIGNvbnRhaW5lZCBpbmNsdWRlIHBhZ2UgdGFnbGliCitzeW4ga2V5d29yZCBqc3BEaXJBcmcgY29udGFpbmVkIGZpbGUgdXJpIHByZWZpeCBsYW5ndWFnZSBleHRlbmRzIGltcG9ydCBzZXNzaW9uIGJ1ZmZlciBhdXRvRmx1c2gKK3N5biBrZXl3b3JkIGpzcERpckFyZyBjb250YWluZWQgaXNUaHJlYWRTYWZlIGluZm8gZXJyb3JQYWdlIGNvbnRlbnRUeXBlIGlzRXJyb3JQYWdlCitzeW4gcmVnaW9uIGpzcENvbW1hbmQJCQkgIHN0YXJ0PS88anNwOi8gc3RhcnQ9LzxcL2pzcDovIGtlZXBlbmQgZW5kPS8+LyBlbmQ9L1wvPi8gY29udGFpbnM9aHRtbFN0cmluZyxqc3BDb21tYW5kTmFtZSxqc3BDb21tYW5kQXJnCitzeW4ga2V5d29yZCBqc3BDb21tYW5kTmFtZSBjb250YWluZWQgaW5jbHVkZSBmb3J3YXJkIGdldFByb3BlcnR5IHBsdWdpbiBzZXRQcm9wZXJ0eSB1c2VCZWFuIHBhcmFtIHBhcmFtcyBmYWxsYmFjaworc3luIGtleXdvcmQganNwQ29tbWFuZEFyZyBjb250YWluZWQgaWQgc2NvcGUgY2xhc3MgdHlwZSBiZWFuTmFtZSBwYWdlIGZsdXNoIG5hbWUgdmFsdWUgcHJvcGVydHkKK3N5biBrZXl3b3JkIGpzcENvbW1hbmRBcmcgY29udGFpbmVkIGNvZGUgY29kZWJhc2UgbmFtZSBhcmNoaXZlIGFsaWduIGhlaWdodAorc3luIGtleXdvcmQganNwQ29tbWFuZEFyZyBjb250YWluZWQgd2lkdGggaHNwYWNlIHZzcGFjZSBqcmV2ZXJzaW9uIG5zcGx1Z2ludXJsIGllcGx1Z2ludXJsCisKKyIgUmVkZWZpbmUgaHRtbFRhZyBzbyB0aGF0IGl0IGNhbiBjb250YWluIGpzcEV4cHIKK3N5biByZWdpb24gaHRtbFRhZyBzdGFydD0rPFteLyVdKyBlbmQ9Kz4rIGNvbnRhaW5zPWh0bWxUYWdOLGh0bWxTdHJpbmcsaHRtbEFyZyxodG1sVmFsdWUsaHRtbFRhZ0Vycm9yLGh0bWxFdmVudCxodG1sQ3NzRGVmaW5pdGlvbixAaHRtbFByZXByb2MsQGh0bWxBcmdDbHVzdGVyLGpzcEV4cHIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfanNwX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2pzcF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorICAiIGphdmEudmltIGhhcyByZWRlZmluZWQgaHRtbENvbW1lbnQgaGlnaGxpZ2h0aW5nCisgIEhpTGluayBodG1sQ29tbWVudAkgQ29tbWVudAorICBIaUxpbmsgaHRtbENvbW1lbnRQYXJ0IENvbW1lbnQKKyAgIiBCZSBjb25zaXN0ZW50IHdpdGggaHRtbCBoaWdobGlnaHQgc2V0dGluZ3MKKyAgSGlMaW5rIGpzcENvbW1lbnQJIGh0bWxDb21tZW50CisgIEhpTGluayBqc3BUYWcJCSBodG1sVGFnCisgIEhpTGluayBqc3BEaXJlY3RpdmUJIGpzcFRhZworICBIaUxpbmsganNwRGlyTmFtZQkgaHRtbFRhZ05hbWUKKyAgSGlMaW5rIGpzcERpckFyZwkgaHRtbEFyZworICBIaUxpbmsganNwQ29tbWFuZAkganNwVGFnCisgIEhpTGluayBqc3BDb21tYW5kTmFtZSAgaHRtbFRhZ05hbWUKKyAgSGlMaW5rIGpzcENvbW1hbmRBcmcJIGh0bWxBcmcKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2lmIG1haW5fc3ludGF4ID09ICdqc3AnCisgIHVubGV0IG1haW5fc3ludGF4CitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJqc3AiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9raXgudmltIGIvcnVudGltZS9zeW50YXgva2l4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmRjMzI1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgva2l4LnZpbQpAQCAtMCwwICsxLDE4MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUtpeFRhcnQgOTUsIEtpeDIwMDEgV2luZG93cyBzY3JpcHQgbGFuZ3VhZ2UgaHR0cDovL2tpeHRhcnQub3JnLworIiBNYWludGFpbmVyOglSaWNoYXJkIEhvd2FydGggPHJob3dhcnRoQHNnYi5jby51az4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisiIFVSTDoJCWh0dHA6Ly93d3cuaG93c29mdC5kZW1vbi5jby51ay8KKworIiBLaXhUYXJ0IGZpbGVzIGlkZW50aWZpZWQgYnkgKi5raXggZXh0ZW5zaW9uLgorCisiIEFtZW5kbWVudCBIaXN0b3J5OgorIiAyNiBBcHJpbCAyMDAxOiBSTUgKKyIgICAgUmVtb3ZlZCBkZXZlbG9wbWVudCBjb21tZW50cyBmcm9tIGRpc3RybyB2ZXJzaW9uCisiICAgIFJlbmFtZWQgIktpeCoiIHRvICJraXgqIiBmb3IgY29uc2lzdGFuY3kKKyIgICAgQ2hhbmdlcyBtYWRlIGluIHByZXBlcmF0aW9uIGZvciBWSU0gdmVyc2lvbiA1LjgvNi4wMAorCisiIFRPRE86CisiCUhhbmRsZSBhcnJheXMgaGlnaGxpZ2h0aW5nCisiCUhhbmRsZSBvYmplY3QgaGlnaGxpZ2h0aW5nCisiIFRoZSBuZXh0IHR3byBtYXkgbm90IGJlIHBvc3NpYmxlOgorIglXb3JrIG91dCBob3cgdG8gZXJyb3IgdG9vIG1hbnkgIigiLCBpLmUuICgoKSBzaG91bGQgYmUgYW4gZXJyb3IuCisiCVNpbWlsYXJseSwgImlmIiB3aXRob3V0ICJlbmRpZiIgYW5kIHNpbWlsYXIgY29uc3RydWN0cyBzaG91bGQgZXJyb3IuCisKKyIgQ2xlYXIgbGVnYWN5IHN5bnRheCBydWxlcyBmb3IgdmVyc2lvbiA1LngsIGV4aXQgaWYgYWxyZWFkeSBwcm9jZXNzZWQgZm9yIHZlcnNpb24gNisKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW4gY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgbWF0Y2gKK3N5biBrZXl3b3JkIGtpeFRPRE8JCVRPRE8gRklYIFhYWCBjb250YWluZWQKKworIiBDYXNlIGluc2Vuc2l0aXZlIGxhbmd1YWdlLgorc3luIGNhc2UgaWdub3JlCisKKyIgS2l4IHN0YXRlbWVudHMKK3N5biBtYXRjaCAgIGtpeFN0YXRlbWVudAkiPyIKK3N5biBrZXl3b3JkIGtpeFN0YXRlbWVudAliZWVwIGJpZyBicmVhaworc3luIGtleXdvcmQga2l4U3RhdGVtZW50CWNhbGwgY2QgY2xzIGNvbG9yIGNvb2tpZTEgY29weQorc3luIGtleXdvcmQga2l4U3RhdGVtZW50CWRlbCBkaW0gZGlzcGxheQorc3luIGtleXdvcmQga2l4U3RhdGVtZW50CWV4aXQKK3N5biBrZXl3b3JkIGtpeFN0YXRlbWVudAlmbHVzaGtiCitzeW4ga2V5d29yZCBraXhTdGF0ZW1lbnQJZ2V0IGdldHMgZ2xvYmFsIGdvIGdvc3ViIGdvdG8KK3N5biBrZXl3b3JkIGtpeFN0YXRlbWVudAltZAorc3luIGtleXdvcmQga2l4U3RhdGVtZW50CXBhc3N3b3JkIHBsYXkKK3N5biBrZXl3b3JkIGtpeFN0YXRlbWVudAlxdWl0CitzeW4ga2V5d29yZCBraXhTdGF0ZW1lbnQJcmQgcmV0dXJuIHJ1bgorc3luIGtleXdvcmQga2l4U3RhdGVtZW50CXNldCBzZXRsIHNldG0gc2V0dGltZSBzaGVsbCBzbGVlcCBzbWFsbAorc3luIGtleXdvcmQga2l4U3RhdGVtZW50CXVzZQorCisiIEtpeDIwMDEKK3N5biBrZXl3b3JkIGtpeFN0YXRlbWVudAlkZWJ1ZyBmdW5jdGlvbiBlbmRmdW5jdGlvbiByZWRpbQorCisiIFNpbXBsZSB2YXJpYWJsZXMKK3N5biBtYXRjaCAgIGtpeE5vdFZhcgkJIlwkXCRcfEBAXHwlJSIgdHJhbnNwYXJlbnQgY29udGFpbnM9Tk9ORQorc3luIG1hdGNoICAga2l4TG9jYWxWYXIJCSJcJFx3XCsiCitzeW4gbWF0Y2ggICBraXhNYWNybwkJIkBcd1wrIgorc3luIG1hdGNoICAga2l4RW52VmFyCQkiJVx3XCsiCisKKyIgRGVzdGluYXRpb24gbGFiZWxzCitzeW4gbWF0Y2ggICBraXhMYWJlbAkJIjpcd1wrXD4iCisKKyIgSWRlbnRpZnkgc3RyaW5ncywgdHJhcCB1bnRlcm1pbmF0ZWQgc3RyaW5ncworc3luIG1hdGNoICAga2l4U3RyaW5nRXJyb3IgICAgICArIi4qXHwnLiorCitzeW4gcmVnaW9uICBraXhEb3VibGVTdHJpbmcJb25lbGluZSBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPWtpeExvY2FsVmFyLGtpeE1hY3JvLGtpeEVudlZhcixraXhOb3RWYXIKK3N5biByZWdpb24gIGtpeFNpbmdsZVN0cmluZwlvbmVsaW5lIHN0YXJ0PSsnKyBza2lwPStcXFxcXHxcXCcrIGVuZD0rJysgY29udGFpbnM9a2l4TG9jYWxWYXIsa2l4TWFjcm8sa2l4RW52VmFyLGtpeE5vdFZhcgorCisiIE9wZXJhdG9ycworc3luIG1hdGNoICAga2l4T3BlcmF0b3IJCSIrXHwtXHxcKlx8L1x8PVx8Jlx8fCIKK3N5biBrZXl3b3JkIGtpeE9wZXJhdG9yCQlhbmQgb3IKKyIgS2l4MjAwMQorc3luIG1hdGNoICAga2l4T3BlcmF0b3IJCSI9PSIKK3N5biBrZXl3b3JkIGtpeE9wZXJhdG9yCQlub3QKKworIiBOdW1lcmljIGNvbnN0YW50cworc3luIG1hdGNoICAga2l4SW50ZWdlcgkJIi1cPVw8XGRcK1w+IiBjb250YWlucz1OT05FCitzeW4gbWF0Y2ggICBraXhGbG9hdAkJIi1cPVwuXGRcK1w+XHwtXD1cPFxkXCtcLlxkXCtcPiIgY29udGFpbnM9Tk9ORQorCisiIEhleCBudW1lcmljIGNvbnN0YW50cworc3luIG1hdGNoICAga2l4SGV4CQkiXCZceFwrXD4iIGNvbnRhaW5zPU5PTkUKKworIiBPdGhlciBjb250YW50cworIiBLaXgyMDAxCitzeW4ga2V5d29yZCBraXhDb25zdGFudAkJb24gb2ZmCisKKyIgQ29tbWVudHMKK3N5biBtYXRjaCAgIGtpeENvbW1lbnQJCSI7LiokIiBjb250YWlucz1raXhUT0RPCisKKyIgVHJhcCB1bm1hdGNoZWQgcGFyZW50aGVzaXMKK3N5biBtYXRjaCAgIGtpeFBhcmVuQ2xvc2VFcnJvcgkiKSIKK3N5biByZWdpb24gIGtpeFBhcmVuCQlvbmVsaW5lIHRyYW5zcGFyZW50IHN0YXJ0PSIoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxraXhQYXJlbkNsb3NlRXJyb3IKKworIiBGdW5jdGlvbnMgKEJ1aWx0aW4gKyBVREYpCitzeW4gbWF0Y2ggICBraXhGdW5jdGlvbgkJIlx3XCsoImhlPWUtMSxtZT1lLTEgY29udGFpbnM9QUxMCisKKyIgVHJhcCB1bm1hdGNoZWQgYnJhY2tldHMKK3N5biBtYXRjaCAgIGtpeEJyYWNrQ2xvc2VFcnJvcgkiXF0iCitzeW4gcmVnaW9uICBraXhCcmFjawkJdHJhbnNwYXJlbnQgc3RhcnQ9IlxbIiBlbmQ9IlxdIiBjb250YWlucz1BTExCVVQsa2l4QnJhY2tDbG9zZUVycm9yCisKKyIgQ2x1c3RlcnMgZm9yIEFMTEJVVCBzaG9ydGhhbmQKK3N5biBjbHVzdGVyIGtpeElmQnV0CQljb250YWlucz1raXhJZkVycm9yLGtpeFNlbGVjdE9LLGtpeERvT0ssa2l4V2hpbGVPSyxraXhGb3JFYWNoT0ssa2l4Rm9yTmV4dE9LCitzeW4gY2x1c3RlciBraXhTZWxlY3RCdXQJY29udGFpbnM9a2l4U2VsZWN0RXJyb3Isa2l4SWZPSyxraXhEb09LLGtpeFdoaWxlT0ssa2l4Rm9yRWFjaE9LLGtpeEZvck5leHRPSworc3luIGNsdXN0ZXIga2l4RG9CdXQJCWNvbnRhaW5zPWtpeERvRXJyb3Isa2l4U2VsZWN0T0ssa2l4SWZPSyxraXhXaGlsZU9LLGtpeEZvckVhY2hPSyxraXhGb3JOZXh0T0sKK3N5biBjbHVzdGVyIGtpeFdoaWxlQnV0CQljb250YWlucz1raXhXaGlsZUVycm9yLGtpeFNlbGVjdE9LLGtpeElmT0ssa2l4RG9PSyxraXhGb3JFYWNoT0ssa2l4Rm9yTmV4dE9LCitzeW4gY2x1c3RlciBraXhGb3JFYWNoQnV0CWNvbnRhaW5zPWtpeEZvckVhY2hFcnJvcixraXhTZWxlY3RPSyxraXhJZk9LLGtpeERvT0ssa2l4Rm9yTmV4dE9LLGtpeFdoaWxlT0sKK3N5biBjbHVzdGVyIGtpeEZvck5leHRCdXQJY29udGFpbnM9a2l4Rm9yTmV4dEVycm9yLGtpeFNlbGVjdE9LLGtpeElmT0ssa2l4RG9PSyxraXhGb3JFYWNoT0ssa2l4V2hpbGVPSworIiBDb25kdGlvbmFsIGNvbnN0cnVjdCBlcnJvcnMuCitzeW4gbWF0Y2ggICBraXhJZkVycm9yCQkiXDxpZlw+XHxcPGVsc2VcPlx8XDxlbmRpZlw+Igorc3luIG1hdGNoICAga2l4SWZPSwkJY29udGFpbmVkICJcPGlmXD5cfFw8ZWxzZVw+XHxcPGVuZGlmXD4iCitzeW4gcmVnaW9uICBraXhJZgkJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1raXhJZk9LIHN0YXJ0PSJcPGlmXD4iIGVuZD0iXDxlbmRpZlw+IiBjb250YWlucz1BTExCVVQsQGtpeElmQnV0CitzeW4gbWF0Y2ggICBraXhTZWxlY3RFcnJvcgkiXDxzZWxlY3RcPlx8XDxjYXNlXD5cfFw8ZW5kc2VsZWN0XD4iCitzeW4gbWF0Y2ggICBraXhTZWxlY3RPSwkJY29udGFpbmVkICJcPHNlbGVjdFw+XHxcPGNhc2VcPlx8XDxlbmRzZWxlY3RcPiIKK3N5biByZWdpb24gIGtpeFNlbGVjdAkJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1raXhTZWxlY3RPSyBzdGFydD0iXDxzZWxlY3RcPiIgZW5kPSJcPGVuZHNlbGVjdFw+IiBjb250YWlucz1BTExCVVQsQGtpeFNlbGVjdEJ1dAorCisiIFByb2dyYW0gY29udHJvbCBjb25zdHJ1Y3RzLgorc3luIG1hdGNoICAga2l4RG9FcnJvcgkJIlw8ZG9cPlx8XDx1bnRpbFw+Igorc3luIG1hdGNoICAga2l4RG9PSwkJY29udGFpbmVkICJcPGRvXD5cfFw8dW50aWxcPiIKK3N5biByZWdpb24gIGtpeERvCQl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWtpeERvT0sgc3RhcnQ9Ilw8ZG9cPiIgZW5kPSJcPHVudGlsXD4iIGNvbnRhaW5zPUFMTEJVVCxAa2l4RG9CdXQKK3N5biBtYXRjaCAgIGtpeFdoaWxlRXJyb3IJIlw8d2hpbGVcPlx8XDxsb29wXD4iCitzeW4gbWF0Y2ggICBraXhXaGlsZU9LCQljb250YWluZWQgIlw8d2hpbGVcPlx8XDxsb29wXD4iCitzeW4gcmVnaW9uICBraXhXaGlsZQkJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1raXhXaGlsZU9LIHN0YXJ0PSJcPHdoaWxlXD4iIGVuZD0iXDxsb29wXD4iIGNvbnRhaW5zPUFMTEJVVCxAa2l4V2hpbGVCdXQKK3N5biBtYXRjaCAgIGtpeEZvck5leHRFcnJvcgkiXDxmb3JcPlx8XDx0b1w+XHxcPHN0ZXBcPlx8XDxuZXh0XD4iCitzeW4gbWF0Y2ggICBraXhGb3JOZXh0T0sJY29udGFpbmVkICJcPGZvclw+XHxcPHRvXD5cfFw8c3RlcFw+XHxcPG5leHRcPiIKK3N5biByZWdpb24gIGtpeEZvck5leHQJCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9a2l4Rm9yTmV4dE9LIHN0YXJ0PSJcPGZvclw+IiBlbmQ9Ilw8bmV4dFw+IiBjb250YWlucz1BTExCVVQsQGtpeEZvckJ1dAorc3luIG1hdGNoICAga2l4Rm9yRWFjaEVycm9yCSJcPGZvciBlYWNoXD5cfFw8aW5cPlx8XDxuZXh0XD4iCitzeW4gbWF0Y2ggICBraXhGb3JFYWNoT0sJY29udGFpbmVkICJcPGZvciBlYWNoXD5cfFw8aW5cPlx8XDxuZXh0XD4iCitzeW4gcmVnaW9uICBraXhGb3JFYWNoCQl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWtpeEZvckVhY2hPSyBzdGFydD0iXDxmb3IgZWFjaFw+IiBlbmQ9Ilw8bmV4dFw+IiBjb250YWlucz1BTExCVVQsQGtpeEZvckVhY2hCdXQKKworIiBFeHByZXNzaW9ucworc3luIG1hdGNoICAga2l4RXhwcmVzc2lvbgkiPFx8Plx8PD1cfD49XHw8PiIKKworCisiIERlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBWZXJzaW9uIDwgNS44IHNldCBkZWZhdWx0IGhpZ2hsaWdodCBpZiBmaWxlIG5vdCBhbHJlYWR5IHByb2Nlc3NlZC4KKyIgVmVyc2lvbiA+PSA1Ljggc2V0IGRlZmF1bHQgaGlnaGxpZ2h0IG9ubHkgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGhhdmUgYSB2YWx1ZS4KK2lmIHZlcnNpb24gPiA1MDggfHwgIWV4aXN0cygiZGlkX2tpeF9zeW5faW5pdHMiKQorCWlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9raXhfc3luX2luaXRzPTEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWVuZGlmCisKKwlIaUxpbmsga2l4RG91YmxlU3RyaW5nCQlTdHJpbmcKKwlIaUxpbmsga2l4U2luZ2xlU3RyaW5nCQlTdHJpbmcKKwlIaUxpbmsga2l4U3RhdGVtZW50CQlTdGF0ZW1lbnQKKwlIaUxpbmsga2l4UmVwZWF0CQlSZXBlYXQKKwlIaUxpbmsga2l4Q29tbWVudAkJQ29tbWVudAorCUhpTGluayBraXhCdWlsdGluCQlGdW5jdGlvbgorCUhpTGluayBraXhMb2NhbFZhcgkJU3BlY2lhbAorCUhpTGluayBraXhNYWNybwkJCVNwZWNpYWwKKwlIaUxpbmsga2l4RW52VmFyCQlTcGVjaWFsCisJSGlMaW5rIGtpeExhYmVsCQkJVHlwZQorCUhpTGluayBraXhGdW5jdGlvbgkJRnVuY3Rpb24KKwlIaUxpbmsga2l4SW50ZWdlcgkJTnVtYmVyCisJSGlMaW5rIGtpeEhleAkJCU51bWJlcgorCUhpTGluayBraXhGbG9hdAkJCU51bWJlcgorCUhpTGluayBraXhPcGVyYXRvcgkJT3BlcmF0b3IKKwlIaUxpbmsga2l4RXhwcmVzc2lvbgkJT3BlcmF0b3IKKworCUhpTGluayBraXhQYXJlbkNsb3NlRXJyb3IJRXJyb3IKKwlIaUxpbmsga2l4QnJhY2tDbG9zZUVycm9yCUVycm9yCisJSGlMaW5rIGtpeFN0cmluZ0Vycm9yCQlFcnJvcgorCisJSGlMaW5rIGtpeFdoaWxlRXJyb3IJCUVycm9yCisJSGlMaW5rIGtpeFdoaWxlT0sJCUNvbmRpdGlvbmFsCisJSGlMaW5rIGtpeERvRXJyb3IJCUVycm9yCisJSGlMaW5rIGtpeERvT0sJCQlDb25kaXRpb25hbAorCUhpTGluayBraXhJZkVycm9yCQlFcnJvcgorCUhpTGluayBraXhJZk9LCQkJQ29uZGl0aW9uYWwKKwlIaUxpbmsga2l4U2VsZWN0RXJyb3IJCUVycm9yCisJSGlMaW5rIGtpeFNlbGVjdE9LCQlDb25kaXRpb25hbAorCUhpTGluayBraXhGb3JOZXh0RXJyb3IJCUVycm9yCisJSGlMaW5rIGtpeEZvck5leHRPSwkJQ29uZGl0aW9uYWwKKwlIaUxpbmsga2l4Rm9yRWFjaEVycm9yCQlFcnJvcgorCUhpTGluayBraXhGb3JFYWNoT0sJCUNvbmRpdGlvbmFsCisKKwlkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAia2l4IgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9rc2NyaXB0LnZpbSBiL3J1bnRpbWUvc3ludGF4L2tzY3JpcHQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwM2Y4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9rc2NyaXB0LnZpbQpAQCAtMCwwICsxLDcwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJa3NjcmlwdAorIiBNYWludGFpbmVyOglUaG9tYXMgQ2FwcmljZWxsaSA8b3J6ZWxAeWFsYmkuY29tPgorIiBVUkw6CQlodHRwOi8vYXF1aWxhLnJlemVsLmVuc3QuZnIvdGhvbWFzL3ZpbS9rc2NyaXB0LnZpbQorIiBDVlM6CQkkSWQkCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGtleXdvcmQJa3NjcmlwdFByZUNvbmRpdAlpbXBvcnQgZnJvbQorCitzeW4ga2V5d29yZAlrc2NyaXB0SGFyZENvZGVkCXByaW50IHByaW50bG4gY29ubmVjdCBsZW5ndGggYXJnIG1pZCB1cHBlciBsb3dlciBpc0VtcHR5IHRvSW50IHRvRmxvYXQgZmluZEFwcGxpY2F0aW9uCitzeW4ga2V5d29yZAlrc2NyaXB0Q29uZGl0aW9uYWwJaWYgZWxzZSBzd2l0Y2gKK3N5biBrZXl3b3JkCWtzY3JpcHRSZXBlYXQJCXdoaWxlIGZvciBkbyBmb3JlYWNoCitzeW4ga2V5d29yZAlrc2NyaXB0RXhjZXB0aW9ucwllbWl0IGNhdGNoIHJhaXNlIHRyeSBzaWduYWwKK3N5biBrZXl3b3JkCWtzY3JpcHRGdW5jdGlvbgkJY2xhc3Mgc3RydWN0IGVudW0KK3N5biBrZXl3b3JkCWtzY3JpcHRDb25zdAkJRkFMU0UgVFJVRSBmYWxzZSB0cnVlCitzeW4ga2V5d29yZAlrc2NyaXB0U3RhdGVtZW50CXJldHVybiBkZWxldGUKK3N5biBrZXl3b3JkCWtzY3JpcHRMYWJlbAkJY2FzZSBkZWZhdWx0CitzeW4ga2V5d29yZAlrc2NyaXB0U3RvcmFnZUNsYXNzCWNvbnN0CitzeW4ga2V5d29yZAlrc2NyaXB0VHlwZQkJaW4gb3V0IGlub3V0IHZhcgorCitzeW4ga2V5d29yZAlrc2NyaXB0VG9kbwkJY29udGFpbmVkIFRPRE8gRklYTUUgWFhYCisKK3N5biByZWdpb24Ja3NjcmlwdENvbW1lbnQJCXN0YXJ0PSIvXCoiIGVuZD0iXCovIiBjb250YWlucz1rc2NyaXB0VG9kbworc3luIG1hdGNoCWtzY3JpcHRDb21tZW50CQkiLy8uKiIgY29udGFpbnM9a3NjcmlwdFRvZG8KK3N5biBtYXRjaAlrc2NyaXB0Q29tbWVudAkJIiMuKiQiIGNvbnRhaW5zPWtzY3JpcHRUb2RvCisKK3N5biByZWdpb24Ja3NjcmlwdFN0cmluZwkJc3RhcnQ9KycrICBlbmQ9KycrIHNraXA9K1xcXFxcfFxcJysKK3N5biByZWdpb24Ja3NjcmlwdFN0cmluZwkJc3RhcnQ9KyIrICBlbmQ9KyIrIHNraXA9K1xcXFxcfFxcIisKK3N5biByZWdpb24Ja3NjcmlwdFN0cmluZwkJc3RhcnQ9KyIiIisgIGVuZD0rIiIiKworc3luIHJlZ2lvbglrc2NyaXB0U3RyaW5nCQlzdGFydD0rJycnKyAgZW5kPSsnJycrCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2tzY3JpcHRfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfa3NjcmlwdF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBrc2NyaXB0Q29uZGl0aW9uYWwJCUNvbmRpdGlvbmFsCisgIEhpTGluayBrc2NyaXB0UmVwZWF0CQkJUmVwZWF0CisgIEhpTGluayBrc2NyaXB0RXhjZXB0aW9ucwkJU3RhdGVtZW50CisgIEhpTGluayBrc2NyaXB0RnVuY3Rpb24JCUZ1bmN0aW9uCisgIEhpTGluayBrc2NyaXB0Q29uc3QJCQlDb25zdGFudAorICBIaUxpbmsga3NjcmlwdFN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBrc2NyaXB0TGFiZWwJCQlMYWJlbAorICBIaUxpbmsga3NjcmlwdFN0b3JhZ2VDbGFzcwkJU3RvcmFnZUNsYXNzCisgIEhpTGluayBrc2NyaXB0VHlwZQkJCVR5cGUKKyAgSGlMaW5rIGtzY3JpcHRUb2RvCQkJVG9kbworICBIaUxpbmsga3NjcmlwdENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGtzY3JpcHRTdHJpbmcJCQlTdHJpbmcKKyAgSGlMaW5rIGtzY3JpcHRQcmVDb25kaXQJCVByZUNvbmRpdAorICBIaUxpbmsga3NjcmlwdEhhcmRDb2RlZAkJU3RhdGVtZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImtzY3JpcHQiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9rd3QudmltIGIvcnVudGltZS9zeW50YXgva3d0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2JlN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgva3d0LnZpbQpAQCAtMCwwICsxLDg3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJa2ltd2l0dSsrCisiIE1haW50YWluZXI6CU1pY2hhZWwgUGllZmVsIDxwaWVmZWxAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CisiIExhc3QgQ2hhbmdlOgkyIE1heSAyMDAxCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKKyIgUmVhZCB0aGUgQysrIHN5bnRheCB0byBzdGFydCB3aXRoCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9jcHAudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9jcHAudmltCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKK2VuZGlmCisKKyIga2ltd2l0dSsrIGV4dGVudGlvbnMKKworIiBEb24ndCBzdG9wIGF0IGVvbCwgbWVzc2VzIGFyb3VuZCB3aXRoIENQUCBtb2RlLCBidXQgZ2l2ZXMgbGluZSBzcGFubmluZworIiBzdHJpbmdzIGluIHVucGFyc2UgcnVsZXMKK3N5biByZWdpb24gY0NwcFN0cmluZwkJc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWlucz1jU3BlY2lhbCxjRm9ybWF0CitzeW4ga2V5d29yZCBjVHlwZQkJaW50ZWdlciByZWFsIGNhc2VzdHJpbmcgbm9jYXNlc3RyaW5nIHZvaWRwdHIgbGlzdAorc3luIGtleXdvcmQgY1R5cGUJCXV2aWV3IHJ2aWV3IHV2aWV3X2VudW0gcnZpZXdfZW51bQorCisiIGF2b2lkIHVucGFyc2luZyBydWxlIHN0aDp2aWV3IGJlaW5nIHNjYW5uZWQgYXMgbGFiZWwKK3N5biBjbGVhciAgIGNVc2VyQ29udAorc3luIG1hdGNoICAgY1VzZXJDb250CQkiXlxzKlxJXGkqXHMqOiQiIGNvbnRhaW5zPWNVc2VyTGFiZWwgY29udGFpbmVkCitzeW4gbWF0Y2ggICBjVXNlckNvbnQJCSI7XHMqXElcaSpccyo6JCIgY29udGFpbnM9Y1VzZXJMYWJlbCBjb250YWluZWQKK3N5biBtYXRjaCAgIGNVc2VyQ29udAkJIl5ccypcSVxpKlxzKjpbXjpdIm1lPWUtMSBjb250YWlucz1jVXNlckxhYmVsIGNvbnRhaW5lZAorc3luIG1hdGNoICAgY1VzZXJDb250CQkiO1xzKlxJXGkqXHMqOlteOl0ibWU9ZS0xIGNvbnRhaW5zPWNVc2VyTGFiZWwgY29udGFpbmVkCisKKyIgaGlnaGxpZ2h0IHBoeWx1bSBkZWNscworc3luIG1hdGNoICAga3d0UGh5bHVtCQkiXlxJXGkqOiQiCitzeW4gbWF0Y2ggICBrd3RQaHlsdW0JCSJeXElcaSpccyp7XHMqXCghXHxcSVwpXGkqXHMqfVxzKjokIgorCitzeW4ga2V5d29yZCBrd3RTdGF0ZW1lbnQJd2l0aCBmb3JlYWNoIGFmdGVyZm9yZWFjaCBwcm92aWRlZAorc3luIG1hdGNoIGt3dERlY2wJCSIlXCh1dmlld3Zhclx8cnZpZXd2YXJcKSIKK3N5biBtYXRjaCBrd3REZWNsCQkiXiVcKHV2aWV3XHxydmlld1x8Y3Rvclx8ZHRvclx8YmFzZVx8c3RvcmFnZWNsYXNzXHxsaXN0XHxhdHRyXHxtZW1iZXJcfG9wdGlvblwpIgorc3luIG1hdGNoIGt3dE9wdGlvbgkJIm5vLWNzZ2lvXHxuby11bnBhcnNlXHxuby1yZXdyaXRlXHxuby1wcmludGRvdFx8bm8taGFzaHRhYmxlc1x8c21hcnQtcG9pbnRlclx8d2Vhay1wb2ludGVyIgorc3luIG1hdGNoIGt3dFNlcAkJIl4lfSQiCitzeW4gbWF0Y2gga3d0U2VwCQkiXiV7XChcc1wrXElcaSpcKSokIgorc3luIG1hdGNoIGt3dENhc3QJCSJcPHBoeWx1bV9jYXN0XHMqPCJtZT1lLTEKK3N5biBtYXRjaCBrd3RDYXN0CQkiXDxwaHlsdW1fY2FzdFxzKiQiCisKKworIiBtYXRjaCB2aWV3cywgcmVtb3ZlIHBhcmVuIGVycm9yIGluIGJyYWNrZXRzCitzeW4gY2xlYXIgY0VyckluQnJhY2tldAorc3luIG1hdGNoIGNFcnJJbkJyYWNrZXQJCWNvbnRhaW5lZCAiKSIKK3N5biBtYXRjaCBrd3RWaWV3cwkJIlwoXFtcfDxcKVxAPD1bIFs6YWxudW06XV9dXHstfToiCisKKyIgbWF0Y2ggcnVsZSBib2RpZXMKK3N5biByZWdpb24ga3d0VW5wQm9keQkJdHJhbnNwYXJlbnQga2VlcGVuZCBleHRlbmQgZm9sZCBzdGFydD0iLT5ccypcWyIgc3RhcnQ9Il5ccypcWyIgc2tpcD0iXCRcQDwhe1xfLlx7LX1cJFxAPCF9IiBlbmQ9IlxzXVxzXD07XD0kIiBlbmQ9Il5dXHNcPTtcPSQiIGVuZD0ifV1cc1w9O1w9JCIKK3N5biByZWdpb24ga3d0UmV3Qm9keQkJdHJhbnNwYXJlbnQga2VlcGVuZCBleHRlbmQgZm9sZCBzdGFydD0iLT5ccyo8IiBzdGFydD0iXlxzKjwiIGVuZD0iXHM+XHNcPTtcPSQiIGVuZD0iXj5cc1w9O1w9JCIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfa3d0X3N5bl9pbml0cyIpCisgICAgaWYgdmVyc2lvbiA8IDUwOAorCWxldCBkaWRfa3d0X3N5bl9pbml0cyA9IDEKKwljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICAgIGVsc2UKKwljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgICBlbmRpZgorCisgICAgSGlMaW5rIGt3dFN0YXRlbWVudAljcHBTdGF0ZW1lbnQKKyAgICBIaUxpbmsga3d0RGVjbAljcHBTdGF0ZW1lbnQKKyAgICBIaUxpbmsga3d0Q2FzdAljcHBTdGF0ZW1lbnQKKyAgICBIaUxpbmsga3d0U2VwCURlbGltaXRlcgorICAgIEhpTGluayBrd3RWaWV3cwlMYWJlbAorICAgIEhpTGluayBrd3RQaHlsdW0JVHlwZQorICAgIEhpTGluayBrd3RPcHRpb24JUHJlUHJvYworICAgICJIaUxpbmsgY1RleHQJQ29tbWVudAorCisgICAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK3N5biBzeW5jIGxpbmVzPTMwMAorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJrd3QiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9sYWNlLnZpbSBiL3J1bnRpbWUvc3ludGF4L2xhY2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNjRlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9sYWNlLnZpbQpAQCAtMCwwICsxLDEzNSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CQlsYWNlCisiIE1haW50YWluZXI6CUpvY2VseW4gRmlhdCA8dXRpbGl0aWVzQGVpZmZlbC5jb20+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorCisiIENvcHlyaWdodCBJbnRlcmFjdGl2ZSBTb2Z0d2FyZSBFbmdpbmVlcmluZywgMTk5OAorIiBZb3UgYXJlIGZyZWUgdG8gdXNlIHRoaXMgZmlsZSBhcyB5b3UgcGxlYXNlLCBidXQKKyIgaWYgeW91IG1ha2UgYSBjaGFuZ2Ugb3IgaW1wcm92ZW1lbnQgeW91IG11c3Qgc2VuZAorIiBpdCB0byB0aGUgbWFpbnRhaW5lciBhdCA8dXRpbGl0aWVzQGVpZmZlbC5jb20+CisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIExBQ0UgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IHRoZSBzdHlsZSBndWlkZSBsaW5lcyBhcmUgbm90LgorCitpZiAhZXhpc3RzKCJsYWNlX2Nhc2VfaW5zZW5zaXRpdmUiKQorCXN5biBjYXNlIG1hdGNoCitlbHNlCisJc3luIGNhc2UgaWdub3JlCitlbmRpZgorCisiIEEgYnVuY2ggb2YgdXNlZnVsIExBQ0Uga2V5d29yZHMKK3N5biBrZXl3b3JkIGxhY2VUb3BTdHJ1Y3QJCXN5c3RlbSByb290IGRlZmF1bHQgb3B0aW9uIHZpc2libGUgY2x1c3Rlcgorc3luIGtleXdvcmQgbGFjZVRvcFN0cnVjdAkJZXh0ZXJuYWwgZ2VuZXJhdGUgZW5kCitzeW4ga2V5d29yZCBsYWNlT3B0aW9uQ2xhdXNlCWNvbGxlY3QgYXNzZXJ0aW9uIGRlYnVnIG9wdGltaXplIHRyYWNlCitzeW4ga2V5d29yZCBsYWNlT3B0aW9uQ2xhdXNlCXByb2ZpbGUgaW5saW5lIHByZWNvbXBpbGVkIG11bHRpdGhyZWFkZWQKK3N5biBrZXl3b3JkIGxhY2VPcHRpb25DbGF1c2UJZXhjZXB0aW9uX3RyYWNlIGRlYWRfY29kZV9yZW1vdmFsCitzeW4ga2V5d29yZCBsYWNlT3B0aW9uQ2xhdXNlCWFycmF5X29wdGltaXphdGlvbgorc3luIGtleXdvcmQgbGFjZU9wdGlvbkNsYXVzZQlpbmxpbmluZ19zaXplIGlubGluaW5nCitzeW4ga2V5d29yZCBsYWNlT3B0aW9uQ2xhdXNlCWNvbnNvbGVfYXBwbGljYXRpb24gZHluYW1pY19ydW50aW1lCitzeW4ga2V5d29yZCBsYWNlT3B0aW9uQ2xhdXNlCWxpbmVfZ2VuZXJhdGlvbgorc3luIGtleXdvcmQgbGFjZU9wdGlvbk1hcmsJCXllcyBubyBhbGwKK3N5biBrZXl3b3JkIGxhY2VPcHRpb25NYXJrCQlyZXF1aXJlIGVuc3VyZSBpbnZhcmlhbnQgbG9vcCBjaGVjaworc3luIGtleXdvcmQgbGFjZUNsdXN0ZXJQcm9wCQl1c2UgaW5jbHVkZSBleGNsdWRlCitzeW4ga2V5d29yZCBsYWNlQWRhcHRDbGFzc05hbWUJYWRhcHQgaWdub3JlIHJlbmFtZSBhcworc3luIGtleXdvcmQgbGFjZUFkYXB0Q2xhc3NOYW1lCWNyZWF0aW9uIGV4cG9ydCB2aXNpYmxlCitzeW4ga2V5d29yZCBsYWNlRXh0ZXJuYWwJCWluY2x1ZGVfcGF0aCBvYmplY3QgbWFrZWZpbGUKKworIiBPcGVyYXRvcnMKK3N5biBtYXRjaCAgIGxhY2VPcGVyYXRvcgkJIlwkIgorc3luIG1hdGNoICAgbGFjZUJyYWNrZXRzCQkiW1tcXV0iCitzeW4gbWF0Y2ggICBsYWNlRXhwb3J0CQkJIlt7fV0iCisKKyIgQ29uc3RhbnRzCitzeW4ga2V5d29yZCBsYWNlQm9vbAkJdHJ1ZSBmYWxzZQorc3luIGtleXdvcmQgbGFjZUJvb2wJCVRydWUgRmFsc2UKK3N5biByZWdpb24gIGxhY2VTdHJpbmcJCXN0YXJ0PSsiKyBza2lwPSslIisgZW5kPSsiKyBjb250YWlucz1sYWNlRXNjYXBlLGxhY2VTdHJpbmdFcnJvcgorc3luIG1hdGNoICAgbGFjZUVzY2FwZQkJY29udGFpbmVkICIlW14vXSIKK3N5biBtYXRjaCAgIGxhY2VFc2NhcGUJCWNvbnRhaW5lZCAiJS9cZFwrLyIKK3N5biBtYXRjaCAgIGxhY2VFc2NhcGUJCWNvbnRhaW5lZCAiXlsgXHRdKiUiCitzeW4gbWF0Y2ggICBsYWNlRXNjYXBlCQljb250YWluZWQgIiVbIFx0XSokIgorc3luIG1hdGNoICAgbGFjZVN0cmluZ0Vycm9yCWNvbnRhaW5lZCAiJS9bXjAtOV0iCitzeW4gbWF0Y2ggICBsYWNlU3RyaW5nRXJyb3IJY29udGFpbmVkICIlL1xkXCtbXjAtOS9dIgorc3luIG1hdGNoICAgbGFjZVN0cmluZ0Vycm9yCSInXCglW14vXVx8JS9cZFwrL1x8W14nJV1cKVwrJyIKK3N5biBtYXRjaCAgIGxhY2VDaGFyYWN0ZXIJIidcKCVbXi9dXHwlL1xkXCsvXHxbXiclXVwpJyIgY29udGFpbnM9bGFjZUVzY2FwZQorc3luIG1hdGNoICAgbGFjZU51bWJlcgkJIi1cPVw8XGRcK1woX1xkXCtcKSpcPiIKK3N5biBtYXRjaCAgIGxhY2VOdW1iZXIJCSJcPFswMV1cK1tiQl1cPiIKK3N5biBtYXRjaCAgIGxhY2VOdW1iZXIJCSItXD1cPFxkXCtcKF9cZFwrXCkqXC5cKFxkXCtcKF9cZFwrXCkqXClcPVwoW2VFXVstK11cPVxkXCtcKF9cZFwrXCkqXClcPSIKK3N5biBtYXRjaCAgIGxhY2VOdW1iZXIJCSItXD1cLlxkXCtcKF9cZFwrXCkqXChbZUVdWy0rXVw9XGRcK1woX1xkXCtcKSpcKVw9Igorc3luIG1hdGNoICAgbGFjZUNvbW1lbnQJCSItLS4qIiBjb250YWlucz1sYWNlVG9kbworCisKK3N5biBjYXNlIG1hdGNoCisKKyIgQ2FzZSBzZW5zaXRpdmUgc3R1ZmYKKworc3luIGtleXdvcmQgbGFjZVRvZG8JCVRPRE8gWFhYIEZJWE1FCitzeW4gbWF0Y2gJbGFjZUNsYXNzTmFtZQkiXDxbQS1aXVtBLVowLTlfXSpcPiIKK3N5biBtYXRjaAlsYWNlQ2x1c3RlcgkJIlthLXpBLVpdW2EtekEtWjAtOV9dKlxzKjoiCitzeW4gbWF0Y2gJbGFjZUNsdXN0ZXIJCSJbYS16QS1aXVthLXpBLVowLTlfXSpccyooXHMqW2EtekEtWl1bYS16QS1aMC05X10qXHMqKVxzKjoiCisKKyIgQ2F0Y2ggbWlzbWF0Y2hlZCBwYXJlbnRoZXNlcworc3luIG1hdGNoIGxhY2VQYXJlbkVycm9yCSIpIgorc3luIG1hdGNoIGxhY2VCcmFja2V0RXJyb3IJIlxdIgorc3luIHJlZ2lvbiBsYWNlR2VuZXJpYwkJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1sYWNlQnJhY2tldHMgc3RhcnQ9IlxbIiBlbmQ9IlxdIiBjb250YWlucz1BTExCVVQsbGFjZUJyYWNrZXRFcnJvcgorc3luIHJlZ2lvbiBsYWNlUGFyZW4JCXRyYW5zcGFyZW50IHN0YXJ0PSIoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxsYWNlUGFyZW5FcnJvcgorCisiIFNob3VsZCBzdWZmaWNlIGZvciBldmVuIHZlcnkgbG9uZyBzdHJpbmdzIGFuZCBleHByZXNzaW9ucworc3luIHN5bmMgbGluZXM9NDAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbGFjZV9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9sYWNlX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGxhY2VUb3BTdHJ1Y3QJCQlQcmVQcm9jCisKKyAgSGlMaW5rIGxhY2VPcHRpb25DbGF1c2UJCVN0YXRlbWVudAorICBIaUxpbmsgbGFjZU9wdGlvbk1hcmsJCQlDb25zdGFudAorICBIaUxpbmsgbGFjZUNsdXN0ZXJQcm9wCQlMYWJlbAorICBIaUxpbmsgbGFjZUFkYXB0Q2xhc3NOYW1lCQlMYWJlbAorICBIaUxpbmsgbGFjZUV4dGVybmFsCQkJU3RhdGVtZW50CisgIEhpTGluayBsYWNlQ2x1c3RlcgkJCU1vZGVNc2cKKworICBIaUxpbmsgbGFjZUVzY2FwZQkJCQlTcGVjaWFsCisKKyAgSGlMaW5rIGxhY2VCb29sCQkJCUJvb2xlYW4KKyAgSGlMaW5rIGxhY2VTdHJpbmcJCQkJU3RyaW5nCisgIEhpTGluayBsYWNlQ2hhcmFjdGVyCQkJQ2hhcmFjdGVyCisgIEhpTGluayBsYWNlQ2xhc3NOYW1lCQkJVHlwZQorICBIaUxpbmsgbGFjZU51bWJlcgkJCQlOdW1iZXIKKworICBIaUxpbmsgbGFjZU9wZXJhdG9yCQkJU3BlY2lhbAorICBIaUxpbmsgbGFjZUFycmF5CQkJCVNwZWNpYWwKKyAgSGlMaW5rIGxhY2VFeHBvcnQJCQkJU3BlY2lhbAorICBIaUxpbmsgbGFjZUNyZWF0aW9uCQkJU3BlY2lhbAorICBIaUxpbmsgbGFjZUJyYWNrZXRzCQkJU3BlY2lhbAorICBIaUxpbmsgbGFjZUNvbnN0cmFpbnQJCQlTcGVjaWFsCisKKyAgSGlMaW5rIGxhY2VDb21tZW50CQkJQ29tbWVudAorCisgIEhpTGluayBsYWNlRXJyb3IJCQkJRXJyb3IKKyAgSGlMaW5rIGxhY2VTdHJpbmdFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIGxhY2VQYXJlbkVycm9yCQkJRXJyb3IKKyAgSGlMaW5rIGxhY2VCcmFja2V0RXJyb3IJCUVycm9yCisgIEhpTGluayBsYWNlVG9kbwkJCQlUb2RvCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImxhY2UiCisKKyIgdmltOiB0cz00CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9sYXR0ZS52aW0gYi9ydW50aW1lL3N5bnRheC9sYXR0ZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhODcyOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2xhdHRlLnZpbQpAQCAtMCwwICsxLDk4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJTGF0dGUKKyIgTWFpbnRhaW5lcjoJTmljayBNb2ZmaXR0LCA8bmlja0B6b3JrLm5ldD4KKyIgTGFzdCBDaGFuZ2U6CTE0IEp1bmUsIDIwMDAKKyIKKyIgTm90ZXM6CisiIEkgYmFzZWQgdGhpcyBvbiB0aGUgVGVYIGFuZCBTY2hlbWUgc3ludGF4IGZpbGVzIChidXQgbW9zdGx5IHNjaGVtZSkuCisiIFNlZSBodHRwOi8vd3d3LmxhdHRlLm9yZyBmb3IgaW5mbyBvbiB0aGUgbGFuZ3VhZ2UuCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIG1hdGNoIGxhdHRlRXJyb3IgIlt7fVxcXSIKK3N5biBtYXRjaCBsYXR0ZU90aGVyICJcXHsiCitzeW4gbWF0Y2ggbGF0dGVPdGhlciAiXFx9Igorc3luIG1hdGNoIGxhdHRlT3RoZXIgIlxcXFwiCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc2V0IGlza2V5d29yZD0zMyw0Myw0NSw0OC01Nyw2Myw2NS05MCw5NSw5Ny0xMjIsXworZWxzZQorICBzZXRsb2NhbCBpc2tleXdvcmQ9MzMsNDMsNDUsNDgtNTcsNjMsNjUtOTAsOTUsOTctMTIyLF8KK2VuZGlmCisKK3N5biByZWdpb24gbGF0dGVWYXIgbWF0Y2hncm91cD1TcGVjaWFsQ2hhciBzdGFydD0hXFxbQS1aYS16X10hcnM9cysxIGVuZD0hW15BLVphLXowLTk/IStfLV0hbWU9ZS0xIGNvbnRhaW5zPUFMTEJVVCxsYXR0ZU51bWJlcixsYXR0ZU90aGVyCitzeW4gcmVnaW9uIGxhdHRlVmFyIG1hdGNoZ3JvdXA9U3BlY2lhbENoYXIgc3RhcnQ9IVxcWz1cJl1bQS1aYS16X10hcnM9cysyIGVuZD0hW15BLVphLXowLTk/IStfLV0hbWU9ZS0xIGNvbnRhaW5zPUFMTEJVVCxsYXR0ZU51bWJlcixsYXR0ZU90aGVyCitzeW4gcmVnaW9uIGxhdHRlU3RyaW5nCXN0YXJ0PStcXCIrIHNraXA9K1xcXFwiKyBlbmQ9K1xcIisKKworc3luIHJlZ2lvbiBsYXR0ZUdyb3VwCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJ7IiBza2lwPSJcXFt7fV0iIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0ifSIgY29udGFpbnM9QUxMQlVULGxhdHRlU3ludGF4CisKK3N5biByZWdpb24gbGF0dGVVbnF1b3RlIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcXCx7IiBza2lwPSJcXFt7fV0iIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0ifSIgY29udGFpbnM9QUxMQlVULGxhdHRlU3ludGF4CitzeW4gcmVnaW9uIGxhdHRlU3BsaWNlIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcXCxAeyIgc2tpcD0iXFxbe31dIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9In0iIGNvbnRhaW5zPUFMTEJVVCxsYXR0ZVN5bnRheAorc3luIHJlZ2lvbiBsYXR0ZVF1b3RlIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcXCd7IiBza2lwPSJcXFt7fV0iIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0ifSIKK3N5biByZWdpb24gbGF0dGVRdW90ZSBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXFxgeyIgc2tpcD0iXFxbe31dIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9In0iIGNvbnRhaW5zPWxhdHRlVW5xdW90ZSxsYXR0ZVNwbGljZQorCitzeW4gbWF0Y2ggIGxhdHRlT3BlcmF0b3IgICAnXFwvJworc3luIG1hdGNoICBsYXR0ZU9wZXJhdG9yICAgJz0nCisKK3N5biBtYXRjaCAgbGF0dGVDb21tZW50CSJcXDsuKiQiCisKKyIgVGhpcyB3YXMgZ2F0aGVyZWQgYnkgc2x1cnBpbmcgaW4gdGhlIGluZGV4LgorCitzeW4ga2V5d29yZCBsYXR0ZVN5bnRheCBfX0ZJTEVfXyBfX2xhdHRlLXZlcnNpb25fXyBjb250YWluZWQKK3N5biBrZXl3b3JkIGxhdHRlU3ludGF4IF9iYWwtdGFnIF9wcmUgX3RhZyBhZGQgYW5kIGFwcGVuZCBhcHBseSBiYWNrIGNvbnRhaW5lZAorc3luIGtleXdvcmQgbGF0dGVTeW50YXggY2FhciBjYWRyIGNhciBjZGFyIGNkZHIgY2RyIGNlaWwgY29tcG9zZSBjb250YWluZWQKK3N5biBrZXl3b3JkIGxhdHRlU3ludGF4IGNvbmNhdCBjb25zIGRlZiBkZWZtYWNybyBkaXZpZGUgZG93bmNhc2UgY29udGFpbmVkCitzeW4ga2V5d29yZCBsYXR0ZVN5bnRheCBlbXB0eT8gZXF1YWw/IGVycm9yIGV4cGxvZGUgZmlsZS1jb250ZW50cyBjb250YWluZWQKK3N5biBrZXl3b3JkIGxhdHRlU3ludGF4IGZsb29yIGZvcmVhY2ggZnJvbnQgZnVuY2FsbCBnZT8gIGdldGVudiBjb250YWluZWQKK3N5biBrZXl3b3JkIGxhdHRlU3ludGF4IGdyZWF0ZXItZXF1YWw/IGdyZWF0ZXI/IGdyb3VwIGdyb3VwPyBndD8gaHRtbCBjb250YWluZWQKK3N5biBrZXl3b3JkIGxhdHRlU3ludGF4IGlmIGluY2x1ZGUgbGFtYmRhIGxlPyBsZW5ndGggbGVzcy1lcXVhbD8gY29udGFpbmVkCitzeW4ga2V5d29yZCBsYXR0ZVN5bnRheCBsZXNzPyBsZXQgbG1hcCBsb2FkLWZpbGUgbG9hZC1saWJyYXJ5IGx0PyAgbWFjcm8gY29udGFpbmVkCitzeW4ga2V5d29yZCBsYXR0ZVN5bnRheCBtZW1iZXI/ICBtb2R1bG8gbXVsdGlwbHkgbm90IG50aCBvcGVyYXRvcj8gY29udGFpbmVkCitzeW4ga2V5d29yZCBsYXR0ZVN5bnRheCBvciBvcmRpbmFyeSBxdW90ZSBwcm9jZXNzLW91dHB1dCBwdXNoLWJhY2sgY29udGFpbmVkCitzeW4ga2V5d29yZCBsYXR0ZVN5bnRheCBwdXNoLWZyb250IHF1YXNpcXVvdGUgcXVvdGUgcmFuZG9tIHJkYyByZXZlcnNlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgbGF0dGVTeW50YXggc2V0ISAgc25vYyBzcGxpY2luZyB1bnF1b3RlIHN0cmljdC1odG1sNCBjb250YWluZWQKK3N5biBrZXl3b3JkIGxhdHRlU3ludGF4IHN0cmluZy1hcHBlbmQgc3RyaW5nLWdlPyAgc3RyaW5nLWdyZWF0ZXItZXF1YWw/IGNvbnRhaW5lZAorc3luIGtleXdvcmQgbGF0dGVTeW50YXggc3RyaW5nLWdyZWF0ZXI/ICBzdHJpbmctZ3Q/ICBzdHJpbmctbGU/IGNvbnRhaW5lZAorc3luIGtleXdvcmQgbGF0dGVTeW50YXggc3RyaW5nLWxlc3MtZXF1YWw/ICBzdHJpbmctbGVzcz8gIHN0cmluZy1sdD8gY29udGFpbmVkCitzeW4ga2V5d29yZCBsYXR0ZVN5bnRheCBzdHJpbmc/ICBzdWJzZXEgc3Vic3RyIHN1YnRyYWN0ICBjb250YWluZWQKK3N5biBrZXl3b3JkIGxhdHRlU3ludGF4IHVwY2FzZSB1c2VsZXNzIHdhcm4gd2hpbGUgemVybz8gIGNvbnRhaW5lZAorCisKKyIgSWYgaXQncyBnb29kIGVub3VnaCBmb3Igc2NoZW1lLi4uCisKK3N5biBzeW5jIG1hdGNoIG1hdGNoUGxhY2UgZ3JvdXBoZXJlIE5PTkUgIl5bXiBcdF0iCisiIC4uLiBpLmUuIHN5bmNocm9uaXplIG9uIGEgbGluZSB0aGF0IHN0YXJ0cyBhdCB0aGUgbGVmdCBtYXJnaW4KKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbGF0dGVfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbGF0dGVfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbGF0dGVTeW50YXgJCVN0YXRlbWVudAorICBIaUxpbmsgbGF0dGVWYXIJCQlGdW5jdGlvbgorCisgIEhpTGluayBsYXR0ZVN0cmluZwkJU3RyaW5nCisgIEhpTGluayBsYXR0ZVF1b3RlCQkJU3RyaW5nCisKKyAgSGlMaW5rIGxhdHRlRGVsaW1pdGVyCQlEZWxpbWl0ZXIKKyAgSGlMaW5rIGxhdHRlT3BlcmF0b3IJCU9wZXJhdG9yCisKKyAgSGlMaW5rIGxhdHRlQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgbGF0dGVFcnJvcgkJCUVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImxhdHRlIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbGRpZi52aW0gYi9ydW50aW1lL3N5bnRheC9sZGlmLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjY3YjU3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbGRpZi52aW0KQEAgLTAsMCArMSw0MyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUxEQVAgTERJRgorIiBNYWludGFpbmVyOglaYWsgSm9obnNvbiA8emFrakBub3guY3g+CisiIExhc3QgQ2hhbmdlOgkyMDAzLTEyLTMwCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gc3luYyBtaW5saW5lcz0xMCBsaW5lYnJlYWtzPTEKKworc3luIG1hdGNoIGxkaWZBdHRyaWJ1dGUgL15bXiAjXVteOl0qLyBjb250YWlucz1sZGlmT3B0aW9uIGRpc3BsYXkKK3N5biBtYXRjaCBsZGlmT3B0aW9uIC87W146XVwrLyBjb250YWluZWQgY29udGFpbnM9bGRpZlB1bmN0dWF0aW9uIGRpc3BsYXkKK3N5biBtYXRjaCBsZGlmUHVuY3R1YXRpb24gLzsvIGNvbnRhaW5lZCBkaXNwbGF5CisKK3N5biByZWdpb24gbGRpZlN0cmluZ1ZhbHVlIG1hdGNoZ3JvdXA9bGRpZlB1bmN0dWF0aW9uIHN0YXJ0PS86IC8gIGVuZD0vXF8kLyBza2lwPS9cbiAvCitzeW4gcmVnaW9uIGxkaWZCYXNlNjRWYWx1ZSBtYXRjaGdyb3VwPWxkaWZQdW5jdHVhdGlvbiBzdGFydD0vOjogLyBlbmQ9L1xfJC8gc2tpcD0vXG4gLworc3luIHJlZ2lvbiBsZGlmRmlsZVZhbHVlICAgbWF0Y2hncm91cD1sZGlmUHVuY3R1YXRpb24gc3RhcnQ9Lzo8IC8gZW5kPS9cXyQvIHNraXA9L1xuIC8KKworc3luIHJlZ2lvbiBsZGlmQ29tbWVudCBzdGFydD0vXiMvIGVuZD0vXF8kLyBza2lwPS9cbiAvCisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9sZGlmX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2xkaWZfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbGRpZkF0dHJpYnV0ZQkJVHlwZQorICBIaUxpbmsgbGRpZk9wdGlvbgkJSWRlbnRpZmllcgorICBIaUxpbmsgbGRpZlB1bmN0dWF0aW9uCU5vcm1hbAorICBIaUxpbmsgbGRpZlN0cmluZ1ZhbHVlCVN0cmluZworICBIaUxpbmsgbGRpZkJhc2U2NFZhbHVlCVNwZWNpYWwKKyAgSGlMaW5rIGxkaWZGaWxlVmFsdWUJCVNwZWNpYWwKKyAgSGlMaW5rIGxkaWZDb21tZW50CQlDb21tZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImxkaWYiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9sZXgudmltIGIvcnVudGltZS9zeW50YXgvbGV4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWM0MjNlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbGV4LnZpbQpAQCAtMCwwICsxLDk2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJTGV4CisiIE1haW50YWluZXI6CURyLiBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gPE5kck9jaGlwU0BQY2FtcGJlbGxBZmFtaWx5Lk1iaXo+CisiIExhc3QgQ2hhbmdlOglTZXAgMDIsIDIwMDMKKyIgVmVyc2lvbjoJNAorIiBVUkw6CWh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCN2aW1saW5rc19zeW50YXgKKyIKKyIgT3B0aW9uOgorIiAgIGxleF91c2VzX2NwcCA6IGlmIHRoaXMgdmFyaWFibGUgZXhpc3RzLCB0aGVuIEMrKyBpcyBsb2FkZWQgcmF0aGVyIHRoYW4gQworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgUmVhZCB0aGUgQyBzeW50YXggdG8gc3RhcnQgd2l0aAoraWYgdmVyc2lvbiA+PSA2MDAKKyAgaWYgZXhpc3RzKCJsZXhfdXNlc19jcHAiKQorICAgIHJ1bnRpbWUhIHN5bnRheC9jcHAudmltCisgIGVsc2UKKyAgICBydW50aW1lISBzeW50YXgvYy52aW0KKyAgZW5kaWYKKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZWxzZQorICBpZiBleGlzdHMoImxleF91c2VzX2NwcCIpCisgICAgc28gPHNmaWxlPjpwOmgvY3BwLnZpbQorICBlbHNlCisgICAgc28gPHNmaWxlPjpwOmgvYy52aW0KKyAgZW5kaWYKK2VuZGlmCisKKyIgLS0tIExleCBzdHVmZiAtLS0KKworIkknZCBwcmVmZXIgdG8gdXNlIGxleC4qICwgYnV0IGl0IGRvZXNuJ3QgaGFuZGxlIGZvcndhcmQgZGVmaW5pdGlvbnMgeWV0CitzeW4gY2x1c3RlciBsZXhMaXN0R3JvdXAJCWNvbnRhaW5zPWxleEFiYnJ2QmxvY2ssbGV4QWJicnYsbGV4QWJicnYsbGV4QWJicnZSZWdFeHAsbGV4SW5jbHVkZSxsZXhQYXRCbG9jayxsZXhQYXQsbGV4QnJhY2UsbGV4UGF0U3RyaW5nLGxleFBhdFRhZyxsZXhQYXRUYWcsbGV4UGF0Q29tbWVudCxsZXhQYXRDb2RlTGluZSxsZXhNb3JlUGF0LGxleFBhdFNlcCxsZXhTbGFzaFF1b3RlLGxleFBhdENvZGUsY0luUGFyZW4sY1VzZXJMYWJlbCxjT2N0YWxaZXJvLGNDcHBTa2lwLGNFcnJJbkJyYWNrZXQsY0VyckluUGFyZW4sY09jdGFsRXJyb3IsY0NwcE91dDIsY0NvbW1lbnRTdGFydEVycm9yLGNQYXJlbkVycm9yCitzeW4gY2x1c3RlciBsZXhMaXN0UGF0Q29kZUdyb3VwCWNvbnRhaW5zPWxleEFiYnJ2QmxvY2ssbGV4QWJicnYsbGV4QWJicnYsbGV4QWJicnZSZWdFeHAsbGV4SW5jbHVkZSxsZXhQYXRCbG9jayxsZXhQYXQsbGV4QnJhY2UsbGV4UGF0VGFnLGxleFBhdFRhZyxsZXhQYXRDb21tZW50LGxleFBhdENvZGVMaW5lLGxleE1vcmVQYXQsbGV4UGF0U2VwLGxleFNsYXNoUXVvdGUsY0luUGFyZW4sY1VzZXJMYWJlbCxjT2N0YWxaZXJvLGNDcHBTa2lwLGNFcnJJbkJyYWNrZXQsY0VyckluUGFyZW4sY09jdGFsRXJyb3IsY0NwcE91dDIsY0NvbW1lbnRTdGFydEVycm9yLGNQYXJlbkVycm9yCisKKyIgQWJicmV2aWF0aW9ucyBTZWN0aW9uCitzeW4gcmVnaW9uIGxleEFiYnJ2QmxvY2sJc3RhcnQ9Il5cKFthLXpBLVpfXVwrXHRcfCV7XCkiIGVuZD0iXiUlJCJtZT1lLTIJc2tpcG5sCW5leHRncm91cD1sZXhQYXRCbG9jayBjb250YWlucz1sZXhBYmJydixsZXhJbmNsdWRlLGxleEFiYnJ2Q29tbWVudAorc3luIG1hdGNoICBsZXhBYmJydgkJIl5cSVxpKlxzIm1lPWUtMQkJCXNraXB3aGl0ZQljb250YWluZWQgbmV4dGdyb3VwPWxleEFiYnJ2UmVnRXhwCitzeW4gbWF0Y2ggIGxleEFiYnJ2CQkiXiVbc3hdIgkJCQkJY29udGFpbmVkCitzeW4gbWF0Y2ggIGxleEFiYnJ2UmVnRXhwCSJcc1xTLiokImxjPTEJCQkJY29udGFpbmVkIG5leHRncm91cD1sZXhBYmJydixsZXhJbmNsdWRlCitzeW4gcmVnaW9uIGxleEluY2x1ZGUJbWF0Y2hncm91cD1sZXhTZXAJc3RhcnQ9Il4leyIgZW5kPSIlfSIJY29udGFpbmVkCWNvbnRhaW5zPUFMTEJVVCxAbGV4TGlzdEdyb3VwCitzeW4gcmVnaW9uIGxleEFiYnJ2Q29tbWVudAlzdGFydD0iXlxzXCsvXCoiCWVuZD0iXCovIgkJCWNvbnRhaW5zPUBTcGVsbAorCisiJSUgOiBQYXR0ZXJucyB7QWN0aW9uc30KK3N5biByZWdpb24gbGV4UGF0QmxvY2sJbWF0Y2hncm91cD1Ub2RvCXN0YXJ0PSJeJSUkIiBtYXRjaGdyb3VwPVRvZG8gZW5kPSJeJSUkIglza2lwbmwgc2tpcHdoaXRlIGNvbnRhaW5zPWxleFBhdCxsZXhQYXRUYWcsbGV4UGF0Q29tbWVudAorc3luIHJlZ2lvbiBsZXhQYXQJCXN0YXJ0PStcUysgc2tpcD0iXFxcXFx8XFwuIgllbmQ9IlxzIm1lPWUtMQljb250YWluZWQgbmV4dGdyb3VwPWxleE1vcmVQYXQsbGV4UGF0U2VwIGNvbnRhaW5zPWxleFBhdFN0cmluZyxsZXhTbGFzaFF1b3RlLGxleEJyYWNlCitzeW4gcmVnaW9uIGxleEJyYWNlCXN0YXJ0PSJcWyIgc2tpcD0rXFxcXFx8XFwrCQllbmQ9Il0iCQljb250YWluZWQKK3N5biByZWdpb24gbGV4UGF0U3RyaW5nCW1hdGNoZ3JvdXA9U3RyaW5nIHN0YXJ0PSsiKwlza2lwPStcXFxcXHxcXCIrCW1hdGNoZ3JvdXA9U3RyaW5nIGVuZD0rIisJY29udGFpbmVkCitzeW4gbWF0Y2ggIGxleFBhdFRhZwkiXjxcSVxpKlwoLFxJXGkqXCkqPioiCQkJY29udGFpbmVkIG5leHRncm91cD1sZXhQYXQsbGV4UGF0VGFnLGxleE1vcmVQYXQsbGV4UGF0U2VwCitzeW4gbWF0Y2ggIGxleFBhdFRhZwkrXjxcSVxpKlwoLFxJXGkqXCkqPipcKFxcXFxcKSpcXCIrCQljb250YWluZWQgbmV4dGdyb3VwPWxleFBhdCxsZXhQYXRUYWcsbGV4TW9yZVBhdCxsZXhQYXRTZXAKK3N5biByZWdpb24gbGV4UGF0Q29tbWVudAlzdGFydD0iXlxzKi9cKiIgZW5kPSJcKi8iCQlza2lwbmwJY29udGFpbmVkIGNvbnRhaW5zPWNUb2RvIG5leHRncm91cD1sZXhQYXRDb21tZW50LGxleFBhdCxsZXhQYXRTdHJpbmcsbGV4UGF0VGFnLEBTcGVsbAorc3luIG1hdGNoICBsZXhQYXRDb2RlTGluZQkiLiokIgkJCQkJY29udGFpbmVkIGNvbnRhaW5zPUFMTEJVVCxAbGV4TGlzdEdyb3VwCitzeW4gbWF0Y2ggIGxleE1vcmVQYXQJIlxzKnxccyokIgkJCXNraXBubAljb250YWluZWQgbmV4dGdyb3VwPWxleFBhdCxsZXhQYXRUYWcsbGV4UGF0Q29tbWVudAorc3luIG1hdGNoICBsZXhQYXRTZXAJIlxzXCsiCQkJCQljb250YWluZWQgbmV4dGdyb3VwPWxleE1vcmVQYXQsbGV4UGF0Q29kZSxsZXhQYXRDb2RlTGluZQorc3luIG1hdGNoICBsZXhTbGFzaFF1b3RlCStcKFxcXFxcKSpcXCIrCQkJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiBsZXhQYXRDb2RlIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJ7IiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9In0iCXNraXBubCBjb250YWluZWQgY29udGFpbnM9QUxMQlVULEBsZXhMaXN0UGF0Q29kZUdyb3VwCisKK3N5biBrZXl3b3JkIGxleENGdW5jdGlvbnMJQkVHSU4JaW5wdXQJdW5wdXQJd291dHB1dAl5eWxlbmcJeXlsb29rCXl5dGV4dAorc3luIGtleXdvcmQgbGV4Q0Z1bmN0aW9ucwlFQ0hPCW91dHB1dAl3aW5wdXQJd3VucHV0CXl5bGVzcwl5eW1vcmUJeXl3cmFwCisKKyIgPGMudmltPiBpbmNsdWRlcyBzZXZlcmFsIEFMTEJVVHM7IHRoZXNlIGhhdmUgdG8gYmUgdHJlYXRlZCBzbyBhcyB0byBleGNsdWRlIGxleCogZ3JvdXBzCitzeW4gY2x1c3RlciBjUGFyZW5Hcm91cAlhZGQ9bGV4LioKK3N5biBjbHVzdGVyIGNEZWZpbmVHcm91cAlhZGQ9bGV4LioKK3N5biBjbHVzdGVyIGNQcmVQcm9jR3JvdXAJYWRkPWxleC4qCitzeW4gY2x1c3RlciBjTXVsdGlHcm91cAlhZGQ9bGV4LioKKworIiBTeW5jaHJvbml6YXRpb24KK3N5biBzeW5jIGNsZWFyCitzeW4gc3luYyBtaW5saW5lcz0zMDAKK3N5biBzeW5jIG1hdGNoIGxleFN5bmNQYXQJZ3JvdXBoZXJlICBsZXhQYXRCbG9jawkiXiVbYS16QS1aXSIKK3N5biBzeW5jIG1hdGNoIGxleFN5bmNQYXQJZ3JvdXB0aGVyZSBsZXhQYXRCbG9jawkiXjwkIgorc3luIHN5bmMgbWF0Y2ggbGV4U3luY1BhdAlncm91cHRoZXJlIGxleFBhdEJsb2NrCSJeJSUkIgorCisiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KK2hpIGRlZiBsaW5rIGxleFNsYXNoUXVvdGUJbGV4UGF0CitoaSBkZWYgbGluayBsZXhCcmFjZQlsZXhQYXQKK2hpIGRlZiBsaW5rIGxleEFiYnJ2Q29tbWVudAlsZXhQYXRDb21tZW50CisKK2hpIGRlZiBsaW5rIGxleEFiYnJ2CVNwZWNpYWxDaGFyCitoaSBkZWYgbGluayBsZXhBYmJydlJlZ0V4cAlNYWNybworaGkgZGVmIGxpbmsgbGV4Q0Z1bmN0aW9ucwlGdW5jdGlvbgoraGkgZGVmIGxpbmsgbGV4TW9yZVBhdAlTcGVjaWFsQ2hhcgoraGkgZGVmIGxpbmsgbGV4UGF0CQlGdW5jdGlvbgoraGkgZGVmIGxpbmsgbGV4UGF0Q29tbWVudAlDb21tZW50CitoaSBkZWYgbGluayBsZXhQYXRTdHJpbmcJRnVuY3Rpb24KK2hpIGRlZiBsaW5rIGxleFBhdFRhZwlTcGVjaWFsCitoaSBkZWYgbGluayBsZXhTZXAJCURlbGltaXRlcgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJsZXgiCisKKyIgdmltOnRzPTEwCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9sZnRwLnZpbSBiL3J1bnRpbWUvc3ludGF4L2xmdHAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTk1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9sZnRwLnZpbQpAQCAtMCwwICsxLDE4NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBsZnRwKDEpIGNvbmZpZ3VyYXRpb24gZmlsZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vc3ludGF4L3BjcC9sZnRwLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTIyCisiIGFyY2gtdGFnOgkgICAgZjI1MzdjNDktNWQ2NC00MmI4LWJlYjQtMTNhMDlkZDcyM2QyCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFNldCBpc2tleXdvcmQgc2luY2Ugd2UgbmVlZCBgLScgKGFuZCBwb3RlbnRpYWxseSBvdGhlcnMpIGluIGtleXdvcmRzLgorIiBGb3IgdmVyc2lvbiA1Lng6IFNldCBpdCBnbG9iYWxseQorIiBGb3IgdmVyc2lvbiA2Lng6IFNldCBpdCBsb2NhbGx5CitpZiB2ZXJzaW9uID49IDYwMAorICBjb21tYW5kIC1uYXJncz0xIFNldElzayBzZXRsb2NhbCBpc2tleXdvcmQ9PGFyZ3M+CitlbHNlCisgIGNvbW1hbmQgLW5hcmdzPTEgU2V0SXNrIHNldCBpc2tleXdvcmQ9PGFyZ3M+CitlbmRpZgorU2V0SXNrIDQ4LTU3LDk3LTEyMiwtCitkZWxjb21tYW5kIFNldElzaworCisiIGNvbW1lbnRzCitzeW4gcmVnaW9uICBsZnRwQ29tbWVudAkJZGlzcGxheSBvbmVsaW5lIG1hdGNoZ3JvdXA9bGZ0cENvbW1lbnQgc3RhcnQ9IiMiIGVuZD0iJCIgY29udGFpbnM9bGZ0cFRvZG8KKworIiB0b2RvCitzeW4ga2V5d29yZCBsZnRwVG9kbwkJY29udGFpbmVkIFRPRE8gRklYTUUgWFhYIE5PVEUKKworIiBzdHJpbmdzCitzeW4gcmVnaW9uICBsZnRwU3RyaW5nCQljb250YWluZWQgZGlzcGxheSBzdGFydD0rIisgc2tpcD0rXFwkXHxcXCIrIGVuZD0rIisgZW5kPSskKworCisiIG51bWJlcnMKK3N5biBtYXRjaCAgIGxmdHBOdW1iZXIJCWNvbnRhaW5lZCBkaXNwbGF5ICJcPFxkXCtcKFwuXGRcK1wpXD1cPiIKKworIiBib29sZWFucyBhbmQgb3RoZXIgdGhpbmdzCitzeW4ga2V5d29yZCBsZnRwQm9vbGVhbgkJY29udGFpbmVkIHllcyBubyBvbiBvZmYgdHJ1ZSBmYWxzZQorCisiIGludGVydmFscworc3luIGtleXdvcmQgbGZ0cEludGVydmFsCWNvbnRhaW5lZCBpbmZpbml0eSBpbmYgbmV2ZXIgZm9yZXZlcgorc3luIG1hdGNoICAgbGZ0cEludGVydmFsCWNvbnRhaW5lZCAiXDxcKFxkXCtcKFwuXGRcK1wpXD1bZGhtc11cKVwrXD4iCisKKyIgY29tbWFuZHMKK3N5biBrZXl3b3JkIGxmdHBLZXl3b3JkcwlhbGlhcyBhbm9uIGF0IGJvb2ttYXJrIGNhY2hlIGNhdCBjZCBjaG1vZCBjbG9zZQorc3luIGtleXdvcmQgbGZ0cEtleXdvcmRzCWNscyBjb21tYW5kIGRlYnVnIGR1IGVjaG8gZXhpdCBmZyBmaW5kIGdldCBnZXQxCitzeW4ga2V5d29yZCBsZnRwS2V5d29yZHMJZ2xvYiBoZWxwIGhpc3Rvcnkgam9icyBraWxsIGxjZCBsZnRwIGxwd2QgbHMKK3N5biBrZXl3b3JkIGxmdHBLZXl3b3JkcwltZ2V0IG1pcnJvciBta2RpciBtb2R1bGUKK3N5biBrZXl3b3JkIGxmdHBLZXl3b3Jkcwltb3JlIG1wdXQgbXJtIG12IG5saXN0IG9wZW4gcGdldCBwdXQgcHdkIHF1ZXVlCitzeW4ga2V5d29yZCBsZnRwS2V5d29yZHMJcXVvdGUgcmVnZXQgcmVjbHMgcmVscyByZW5saXN0IHJlcGVhdAorc3luIGtleXdvcmQgbGZ0cEtleXdvcmRzCXJlcHV0IHJtIHJtZGlyIHNjYWNoZSBzaXRlIHNvdXJjZSBzdXNwZW5kIHVzZXIKK3N5biBrZXl3b3JkIGxmdHBLZXl3b3Jkcwl2ZXJzaW9uIHdhaXQgemNhdCB6bW9yZQorCisiIHNldHRpbmdzCitzeW4gcmVnaW9uICBsZnRwU2V0CQltYXRjaGdyb3VwPWxmdHBLZXl3b3JkcyBzdGFydD0ic2V0IiBlbmQ9IjsiIGVuZD0iJCIgY29udGFpbnM9bGZ0cFN0cmluZyxsZnRwTnVtYmVyLGxmdHBCb29sZWFuLGxmdHBJbnRlcnZhbCxsZnRwU2V0dGluZ3NQcmVmaXgsbGZ0cFNldHRpbmdzCitzeW4gbWF0Y2ggICBsZnRwU2V0dGluZ3NQcmVmaXgJY29udGFpbmVkICdcPFwlKGJta1x8Y2FjaGVcfGNtZFx8Y29sb3JcfGRuc1wpOicKK3N5biBtYXRjaCAgIGxmdHBTZXR0aW5nc1ByZWZpeAljb250YWluZWQgJ1w8XCUoZmlsZVx8ZmlzaFx8ZnRwXHxoZnRwXCk6Jworc3luIG1hdGNoICAgbGZ0cFNldHRpbmdzUHJlZml4CWNvbnRhaW5lZCAnXDxcJShodHRwXHxodHRwc1x8bWlycm9yXHxtb2R1bGVcKTonCitzeW4gbWF0Y2ggICBsZnRwU2V0dGluZ3NQcmVmaXgJY29udGFpbmVkICdcPFwlKG5ldFx8c2Z0cFx8c3NsXHx4ZmVyXCk6JworIiBibWs6CitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHNhdmUtcFthc3N3b3Jkc10KKyIgY2FjaGU6CitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIGNhY2hlLWVtW3B0eS1saXN0aW5nc10gZW5bYWJsZV0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgZXhwW2lyZV0gc2l6W2VdCisiIGNtZDoKK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgYXRbLWV4aXRdIGNscy1jW29tcGxldGlvbi1kZWZhdWx0XQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBjbHMtZFtlZmF1bHRdIGNzW2gtaGlzdG9yeV0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgZGVmYXVsdC1wW3JvdG9jb2xdIGRlZmF1bHQtdFtpdGxlXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBmYWlbbC1leGl0XSBpblt0ZXJhY3RpdmVdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIGxvW25nLXJ1bm5pbmddIGxzWy1kZWZhdWx0XQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBtb1t2ZS1iYWNrZ3JvdW5kXSBwcm9tW3B0XQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCByZW1bb3RlLWNvbXBsZXRpb25dCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHNhdmUtY1t3ZC1oaXN0b3J5XSBzYXZlLXJbbC1oaXN0b3J5XQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBzZXQtdFtlcm0tc3RhdHVzXSBzdGF0dVtzLWludGVydmFsXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCB0ZVtybS1zdGF0dXNdIHZlcmJbb3NlXSB2ZXJpZnktaFtvc3RdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHZlcmlmeS1wYXRoIHZlcmlmeS1wYXRoWy1jYWNoZWRdCisiIGNvbG9yOgorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBkaXJbLWNvbG9yc10gdXNlLWNbb2xvcl0KKyIgZG5zOgorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBTW1JWLXF1ZXJ5XSBjYWNoZS1lblthYmxlXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBjYWNoZS1leFtwaXJlXSBjYWNoZS1zW2l6ZV0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgZmF0W2FsLXRpbWVvdXRdIG9bcmRlcl0gdXNlLWZvW3JrXQorIiBmaWxlOgorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBjaFthcnNldF0KKyIgZmlzaDoKK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgY29ubmVjdFstcHJvZ3JhbV0gc2hbZWxsXQorIiBmdHA6CitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIGFjY3QgYW5vbi1wW2Fzc10gYW5vbi11W3Nlcl0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgYXVbdG8tc3luYy1tb2RlXSBiW2luZC1kYXRhLXNvY2tldF0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgY2hbYXJzZXRdIGNsaVtlbnRdIGRldltpY2UtcHJlZml4XQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBmaVt4LXBhc3YtYWRkcmVzc10gZnhwLWZbb3JjZV0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgZnhwLXBbYXNzaXZlLXNvdXJjZV0gaFtvbWVdIGxhW25nXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBsaXN0LWVbbXB0eS1va10gbGlzdC1vW3B0aW9uc10KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgbm9wWy1pbnRlcnZhbF0gcGFzW3NpdmUtbW9kZV0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgcG9ydC1pW3B2NF0gcG9ydC1yW2FuZ2VdIHByb3hbeV0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgcmVzdC1sW2lzdF0gcmVzdC1zW3Rvcl0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgcmV0cnktNTMwIHJldHJ5LTUzMFstYW5vbnltb3VzXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBzaXRbZS1ncm91cF0gc2tleS1hW2xsb3ddCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHNrZXktZltvcmNlXSBzc2wtYWxsb3cKK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgc3NsLWFsbG93Wy1hbm9ueW1vdXNdIHNzbC1hdVt0aF0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgc3NsLWZbb3JjZV0gc3NsLXByb3RlY3QtZFthdGFdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHNzbC1wcm90ZWN0LWxbaXN0XSBzdGF0LVtpbnRlcnZhbF0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgc3lbbmMtbW9kZV0gdGltZXpbb25lXSB1c2UtYVtib3JdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHVzZS1mZVthdF0gdXNlLWZ4W3BdIHVzZS1oZlt0cF0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgdXNlLW1kdG0gdXNlLW1kdG1bLW92ZXJsb2FkZWRdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHVzZS1tbFtzZF0gdXNlLXBbcmV0XSB1c2UtcVt1aXRdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHVzZS1zaXRlLWNbaG1vZF0gdXNlLXNpdGUtaVtkbGVdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHVzZS1zaXRlLXVbdGltZV0gdXNlLXNpeltlXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCB1c2Utc3RbYXRdIHVzZS10ZVtsbmV0LWlhY10KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgdmVyaWZ5LWFbZGRyZXNzXSB2ZXJpZnktcFtvcnRdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHdbZWItbW9kZV0KKyIgaGZ0cDoKK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgd1tlYi1tb2RlXSBjYWNoZSBwcm94W3ldCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHVzZS1hdVt0aG9yaXphdGlvbl0gdXNlLWhlW2FkXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCB1c2UtdHlbcGVdCisiIGh0dHA6CitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIGFjY2VwdCBhY2NlcHQtY1toYXJzZXRdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIGFjY2VwdC1sW2FuZ3VhZ2VdIGNhY2hlIGNvb1traWVdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHBvc1t0LWNvbnRlbnQtdHlwZV0gcHJveFt5XQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBwdXQtY1tvbnRlbnQtdHlwZV0gcHV0LW1bZXRob2RdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHJlZltlcmVyXSBzZXQtY1tvb2tpZXNdIHVzZXJbLWFnZW50XQorIiBodHRwczoKK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgcHJveFt5XQorIiBtaXJyb3I6CitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIGV4Y1tsdWRlLXJlZ2V4XSBvW3JkZXJdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHBhcmFsbGVsLWRbaXJlY3Rvcmllc10KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgcGFyYWxsZWwtdFtyYW5zZmVyLWNvdW50XQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCB1c2UtcFtnZXQtbl0KKyIgbW9kdWxlOgorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBwYXRbaF0KKyIgbmV0Ogorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBjb25uZWN0aW9uLWxbaW1pdF0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgY29ubmVjdGlvbi10W2FrZW92ZXJdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIGlkW2xlXSBsaW1pdC1tW2F4XSBsaW1pdC1yW2F0ZV0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgbGltaXQtdG90YWwtbVtheF0gbGltaXQtdG90YWwtclthdGVdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIG1heC1yZXRbcmllc10gbm8tW3Byb3h5XQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBwZVtyc2lzdC1yZXRyaWVzXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCByZWNvbm5lY3QtaW50ZXJ2YWwtYlthc2VdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHJlY29ubmVjdC1pbnRlcnZhbC1tYVt4XQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCByZWNvbm5lY3QtaW50ZXJ2YWwtbXVbbHRpcGxpZXJdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHNvY2tldC1iaW5kLWlwdjQgc29ja2V0LWJpbmQtaXB2Ngorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBzb2NrZXQtYnVbZmZlcl0gc29ja2V0LW1bYXhzZWddCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHRpbWVvW3V0XQorIiBzZnRwOgorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBjb25uZWN0Wy1wcm9ncmFtXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBtYXgtcFthY2tldHMtaW4tZmxpZ2h0XQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBwcm90W29jb2wtdmVyc2lvbl0gc2VyW3Zlci1wcm9ncmFtXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBzaXplLXJbZWFkXSBzaXplLXdbcml0ZV0KKyIgc3NsOgorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBjYS1mW2lsZV0gY2EtcFthdGhdIGNlW3J0LWZpbGVdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIGNybC1mW2lsZV0gY3JsLXBbYXRoXSBrW2V5LWZpbGVdCitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIHZlcmlmeS1jW2VydGlmaWNhdGVdCisiIHhmZXI6CitzeW4ga2V5d29yZCBsZnRwU2V0dGluZ3MJY29udGFpbmVkIGNsb1tiYmVyXSBkaXNbay1mdWxsLWZhdGFsXQorc3luIGtleXdvcmQgbGZ0cFNldHRpbmdzCWNvbnRhaW5lZCBldGEtcFtlcmlvZF0gZXRhLXRbZXJzZV0KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgbWFrW2UtYmFja3VwXSBtYXgtcmVkW2lyZWN0aW9uc10KK3N5biBrZXl3b3JkIGxmdHBTZXR0aW5ncwljb250YWluZWQgcmFbdGUtcGVyaW9kXQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9sZnRwX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2xmdHBfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbGZ0cENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGxmdHBUb2RvCQlUb2RvCisgIEhpTGluayBsZnRwU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIGxmdHBOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgbGZ0cEJvb2xlYW4JCUJvb2xlYW4KKyAgSGlMaW5rIGxmdHBJbnRlcnZhbAkJTnVtYmVyCisgIEhpTGluayBsZnRwS2V5d29yZHMJCUtleXdvcmQKKyAgSGlMaW5rIGxmdHBTZXR0aW5nc1ByZWZpeAlQcmVQcm9jCisgIEhpTGluayBsZnRwU2V0dGluZ3MJCVR5cGUKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImxmdHAiCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2xoYXNrZWxsLnZpbSBiL3J1bnRpbWUvc3ludGF4L2xoYXNrZWxsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTBjY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbGhhc2tlbGwudmltCkBAIC0wLDAgKzEsMTM2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJCUhhc2tlbGwgd2l0aCBsaXRlcmF0ZSBjb21tZW50cywgQmlyZCBzdHlsZSwKKyIJCQlUZVggc3R5bGUgYW5kIHBsYWluIHRleHQgc3Vycm91bmRpbmcKKyIJCQlcYmVnaW57Y29kZX0gXGVuZHtjb2RlfSBibG9ja3MKKyIgTWFpbnRhaW5lcjoJCUhhc2tlbGwgQ2FmZSBtYWlsaW5nbGlzdCA8aGFza2VsbC1jYWZlQGhhc2tlbGwub3JnPgorIiBPcmlnaW5hbCBBdXRob3I6CUFydGh1ciB2YW4gTGVldXdlbiA8YXJ0aHVydmxAY3MudXUubmw+CisiIExhc3QgQ2hhbmdlOgkJMjAwNCBNYXkgMTYKKyIgVmVyc2lvbjoJCTEuMDEKKyIKKyIgVGhhbmtzIHRvIElhbiBMeW5hZ2ggZm9yIHRob3VnaHRmdWwgY29tbWVudHMgb24gaW5pdGlhbCB2ZXJzaW9ucyBhbmQKKyIgZm9yIHRoZSBpbnNwaXJhdGlvbiBmb3Igd3JpdGluZyB0aGlzIGluIHRoZSBmaXJzdCBwbGFjZS4KKyIKKyIgVGhpcyBzdHlsZSBndWVzc2VzIGFzIHRvIHRoZSB0eXBlIG9mIG1hcmt1cCB1c2VkIGluIGEgbGl0ZXJhdGUgaGFza2VsbAorIiBmaWxlIGFuZCB3aWxsIGhpZ2hsaWdodCAoTGEpVGVYIG1hcmt1cCBpZiBpdCBmaW5kcyBhbnkKKyIgVGhpcyBiZWhhdmlvdXIgY2FuIGJlIG92ZXJyaWRkZW4sIGJvdGggZ2xhYmFsbHkgYW5kIGxvY2FsbHkgdXNpbmcKKyIgdGhlIGxoc19tYXJrdXAgdmFyaWFibGUgb3IgYjpsaHNfbWFya3VwIHZhcmlhYmxlIHJlc3BlY3RpdmVseS4KKyIKKyIgbGhzX21hcmt1cAkgICAgbXVzdCBiZSBzZXQgdG8gZWl0aGVyICB0ZXgJb3IgIG5vbmUgIHRvIGluZGljYXRlIHRoYXQKKyIJCSAgICB5b3UgYWx3YXlzIHdhbnQgKExhKVRlWCBoaWdobGlnaHRpbmcgb3Igbm8gaGlnaGxpZ2h0aW5nCisiCQkgICAgbXVzdCBub3QgYmUgc2V0IHRvIGxldCB0aGUgaGlnaGxpZ2h0aW5nIGJlIGd1ZXNzZWQKKyIgYjpsaHNfbWFya3VwCSAgICBtdXN0IGJlIHNldCB0byBlaXRlcmggIHRleAlvciAgbm9uZSAgdG8gaW5kaWNhdGUgdGhhdAorIgkJICAgIHlvdSB3YW50IChMYSlUZVggaGlnaGxpZ2h0aW5nIG9yIG5vIGhpZ2hsaWdodGluZyBmb3IKKyIJCSAgICB0aGlzIHBhcnRpY3VsYXIgYnVmZmVyCisiCQkgICAgbXVzdCBub3QgYmUgc2V0IHRvIGxldCB0aGUgaGlnaGxpZ2h0aW5nIGJlIGd1ZXNzZWQKKyIKKyIKKyIgMjAwNCBGZWJydWFyeSAxODogTmV3IHZlcnNpb24sIGJhc2VkIG9uIElhbiBMeW5hZ2gncyBUZVggZ3Vlc3NpbmcKKyIJCSAgICBsaGFza2VsbC52aW0sIGN3ZWIudmltLCB0ZXgudmltLCBzaC52aW0gYW5kIGZvcnRyYW4udmltCisiIDIwMDQgRmVicnVhcnkgMjA6IENsZWFuZWQgdXAgdGhlIGd1ZXNzaW5nIGFuZCBvdmVycmlkaW5nIGEgYml0CisiIDIwMDQgRmVicnVhcnkgMjM6IENsZWFuZWQgdXAgc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgXGJlZ2lue2NvZGV9IGFuZAorIgkJICAgIFxlbmR7Y29kZX0sIGFkZGVkIHNvbWUgY2xhcmlmaWNhdGlvbiB0byB0aGUgYXR0cmlidXRpb25zCisiCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEZpcnN0IG9mZiwgc2VlIGlmIHdlIGNhbiBpbmhlcml0IGEgdXNlciBwcmVmZXJlbmNlIGZvciBsaHNfbWFya3VwCitpZiAhZXhpc3RzKCJiOmxoc19tYXJrdXAiKQorICAgIGlmIGV4aXN0cygibGhzX21hcmt1cCIpCisJaWYgbGhzX21hcmt1cCA9fiAnXDxcJSh0ZXhcfG5vbmVcKVw+JworCSAgICBsZXQgYjpsaHNfbWFya3VwID0gbWF0Y2hzdHIobGhzX21hcmt1cCwnXDxcJSh0ZXhcfG5vbmVcKVw+JykKKwllbHNlCisJICAgIGVjaG9obCBXYXJuaW5nTXNnIHwgZWNobyAiVW5rbm93biB2YWx1ZSBvZiBsaHNfbWFya3VwIiB8IGVjaG9obCBOb25lCisJICAgIGxldCBiOmxoc19tYXJrdXAgPSAidW5rbm93biIKKwllbmRpZgorICAgIGVsc2UKKwlsZXQgYjpsaHNfbWFya3VwID0gInVua25vd24iCisgICAgZW5kaWYKK2Vsc2UKKyAgICBpZiBiOmxoc19tYXJrdXAgIX4gJ1w8XCUodGV4XHxub25lXClcPicKKwlsZXQgYjpsaHNfbWFya3VwID0gInVua25vd24iCisgICAgZW5kaWYKK2VuZGlmCisKKyIgUmVtZW1iZXIgd2hlcmUgdGhlIGN1cnNvciBpcywgYW5kIGdvIHRvIHVwcGVybGVmdAorbGV0IHM6b2xkbGluZT1saW5lKCIuIikKK2xldCBzOm9sZGNvbHVtbj1jb2woIi4iKQorY2FsbCBjdXJzb3IoMSwxKQorCisiIElmIG5vIHVzZXIgcHJlZmVyZW5jZSwgc2NhbiBidWZmZXIgZm9yIG91ciBndWVzcyBvZiB0aGUgbWFya3VwIHRvCisiIGhpZ2hsaWdodC4gV2Ugb25seSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gVGVYIGFuZCBwbGFpbiBtYXJrdXAsIHdoZXJlCisiIHBsYWluIGlzIG5vdCBoaWdobGlnaHRlZC4gVGhlIGhldXJpc3RpYyBmb3IgZmluZGluZyBUZVggbWFya3VwIGlzIGlmCisiIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9jY3VycyBhbnl3aGVyZSBpbiB0aGUgZmlsZToKKyIgICAtIFxkb2N1bWVudGNsYXNzCisiICAgLSBcYmVnaW57ZW52fSAgICAgICAoZm9yIGVudiAhPSBjb2RlKQorIiAgIC0gXHBhcnQsIFxjaGFwdGVyLCBcc2VjdGlvbiwgXHN1YnNlY3Rpb24sIFxzdWJzdWJzZWN0aW9uLCBldGMKK2lmIGI6bGhzX21hcmt1cCA9PSAidW5rbm93biIKKyAgICBpZiBzZWFyY2goJyVcfFxcZG9jdW1lbnRjbGFzc1x8XFxiZWdpbntcKGNvZGV9XClcQCFcfFxcXChzdWJcKSpzZWN0aW9uXHxcXGNoYXB0ZXJ8XFxwYXJ0JywnVycpICE9IDAKKwlsZXQgYjpsaHNfbWFya3VwID0gInRleCIKKyAgICBlbHNlCisJbGV0IGI6bGhzX21hcmt1cCA9ICJwbGFpbiIKKyAgICBlbmRpZgorZW5kaWYKKworIiBJZiB1c2VyIHdhbnRzIHVzIHRvIGhpZ2hsaWdodCBUZVggc3ludGF4LCByZWFkIGl0LgoraWYgYjpsaHNfbWFya3VwID09ICJ0ZXgiCisgICAgaWYgdmVyc2lvbiA8IDYwMAorCXNvdXJjZSA8c2ZpbGU+OnA6aC90ZXgudmltCisgICAgZWxzZQorCXJ1bnRpbWUhIHN5bnRheC90ZXgudmltCisJdW5sZXQgYjpjdXJyZW50X3N5bnRheAorICAgIGVuZGlmCitlbmRpZgorCisiIExpdGVyYXRlIEhhc2tlbGwgaXMgSGFza2VsbCBpbiBiZXR3ZWVuIHRleHQsIHNvIGF0IGxlYXN0IHJlYWQgSGFza2VsbAorIiBoaWdobGlnaHRpbmcKK2lmIHZlcnNpb24gPCA2MDAKKyAgICBzeW50YXggaW5jbHVkZSBAaGFza2VsbFRvcCA8c2ZpbGU+OnA6aC9oYXNrZWxsLnZpbQorZWxzZQorICAgIHN5bnRheCBpbmNsdWRlIEBoYXNrZWxsVG9wIHN5bnRheC9oYXNrZWxsLnZpbQorZW5kaWYKKworc3ludGF4IHJlZ2lvbiBsaHNIYXNrZWxsQmlyZFRyYWNrIHN0YXJ0PSJePiIgZW5kPSJcJSheW14+XVwpXEA9IiBjb250YWlucz1AaGFza2VsbFRvcCxsaHNCaXJkVHJhY2sKK3N5bnRheCByZWdpb24gbGhzSGFza2VsbEJlZ2luRW5kQmxvY2sgc3RhcnQ9Il5cXGJlZ2lue2NvZGV9XHMqJCIgbWF0Y2hncm91cD1OT05FIGVuZD0iXCUoXlxcZW5ke2NvZGV9LiokXClcQD0iIGNvbnRhaW5zPUBoYXNrZWxsVG9wLEBiZWdpbkNvZGUKKworc3ludGF4IG1hdGNoIGxoc0JpcmRUcmFjayAiXj4iIGNvbnRhaW5lZAorCitzeW50YXggbWF0Y2ggYmVnaW5Db2RlQmVnaW4gIl5cXGJlZ2luIiBuZXh0Z3JvdXA9YmVnaW5Db2RlQ29kZSBjb250YWluZWQKK3N5bnRheCByZWdpb24gYmVnaW5Db2RlQ29kZSAgbWF0Y2hncm91cD10ZXhEZWxpbWl0ZXIgc3RhcnQ9InsiIGVuZD0ifSIKK3N5bnRheCBjbHVzdGVyIGJlZ2luQ29kZSAgICBjb250YWlucz1iZWdpbkNvZGVCZWdpbixiZWdpbkNvZGVDb2RlCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3RleF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF90ZXhfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbGhzQmlyZFRyYWNrIENvbW1lbnQKKworICBIaUxpbmsgYmVnaW5Db2RlQmVnaW4JICAgICAgdGV4Q21kTmFtZQorICBIaUxpbmsgYmVnaW5Db2RlQ29kZQkgICAgICB0ZXhTZWN0aW9uCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKKyIgUmVzdG9yZSBjdXJzb3IgdG8gb3JpZ2luYWwgcG9zaXRpb24sIGFzIGl0IG1heSBoYXZlIGJlZW4gZGlzdHVyYmVkCisiIGJ5IHRoZSBzZWFyY2hlcyBpbiBvdXIgZ3Vlc3NpbmcgY29kZQorY2FsbCBjdXJzb3IgKHM6b2xkbGluZSwgczpvbGRjb2x1bW4pCisKK3VubGV0IHM6b2xkbGluZQordW5sZXQgczpvbGRjb2x1bW4KKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibGhhc2tlbGwiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9saWJhby52aW0gYi9ydW50aW1lL3N5bnRheC9saWJhby52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3NTE1MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2xpYmFvLnZpbQpAQCAtMCwwICsxLDQ2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIGxpYmFvIGNvbmZpZ3VyYXRpb24gZmlsZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vc3ludGF4L3BjcC9saWJhby8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNS0yMgorIiBhcmNoLXRhZzoJICAgIDRkZGVmMGE4LTY4MTctNDU1NS1hNWExLTBiZTgyMDk0MDUzZAorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBUb2RvCitzeW4ga2V5d29yZCBsaWJhb1RvZG8JICAgIGNvbnRhaW5lZCBUT0RPIEZJWE1FIFhYWCBOT1RFCisKKyIgQ29tbWVudHMKK3N5biByZWdpb24gIGxpYmFvQ29tbWVudCAgICBtYXRjaGdyb3VwPWxpYmFvQ29tbWVudCBzdGFydD0nXlxzKiMnIGVuZD0nJCcgY29udGFpbnM9bGliYW9Ub2RvCisKKyIgS2V5d29yZHMKK3N5biBrZXl3b3JkIGxpYmFvS2V5d29yZCAgICBkZWZhdWx0X2RyaXZlcgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9saWJhb19zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9saWJhb19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgICBjb21tYW5kIC1uYXJncz0rIEhpRGVmIGhpIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaURlZiBoaSBkZWYgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGxpYmFvVG9kbwlUb2RvCisgIEhpTGluayBsaWJhb0NvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgbGliYW9LZXl3b3JkCUtleXdvcmQKKworICBkZWxjb21tYW5kIEhpTGluaworICBkZWxjb21tYW5kIEhpRGVmCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJsaWJhbyIKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbGlmZWxpbmVzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2xpZmVsaW5lcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhMmM4ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2xpZmVsaW5lcy52aW0KQEAgLTAsMCArMSwxMTggQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglMaWZlbGluZXMgKHYgMy4wLjcpIGh0dHA6Ly9saWZlbGluZXMuc291cmNlZm9yZ2UubmV0CisiIE1haW50YWluZXI6CVBhdHJpY2sgVGV4aWVyIDxwLnRleGllckBvcnNlbm5lcy5jb20+CisiIExvY2F0aW9uOglmdHA6Ly8yMTYuNzEuNzIuMjM2L2xpZmVsaW5lcy52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDIgTWFyIDAzCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEEgYnVuY2ggb2YgdXNlZnVsIGxpZmVsaW5lcyBrZXl3b3JkcyAzLjAuNworCitzeW4ga2V5d29yZAlsaWZlbGluZXNTdGF0ZW1lbnQJc2V0CitzeW4ga2V5d29yZAlsaWZlbGluZXNVc2VyCQlnZXRpbmRpIGdlaW5kaXNldCBnZXRmYW0gZ2V0aW50IGdldHN0ciBjaG9vc2VjaGlsZAorc3luIGtleXdvcmQJbGlmZWxpbmVzVXNlcgkJY2hvb3NlaW5kaSBjaG9vc2VzcG91c2UgY2hvb3Nlc3Vic2V0IG1lbnVjaG9vc2UKK3N5biBrZXl3b3JkCWxpZmVsaW5lc1VzZXIJCWNob29zZWZhbSBnZXRpbnRtc2cgZ2V0aW5kaW1zZyBnZXRzdHJtc2cKK3N5biBrZXl3b3JkCWxpZmVsaW5lc1Byb2MJCXByb2MgZnVuYyByZXR1cm4gY2FsbAorc3luIGtleXdvcmQJbGlmZWxpbmVzSW5jbHVkZQlpbmNsdWRlCitzeW4ga2V5d29yZAlsaWZlbGluZXNEZWYJCWdsb2JhbAorc3luIGtleXdvcmQJbGlmZWxpbmVzQ29uZGl0aW9uYWwJaWYgZWxzZSBlbHNpZiBzd2l0Y2gKK3N5biBrZXl3b3JkCWxpZmVsaW5lc1JlcGVhdAkJY29udGludWUgYnJlYWsgd2hpbGUKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0xvZ2ljYWwJYW5kIG9yIG5vdCBlcSBuZSBsdCBndCBsZSBnZSBzdHJjbXAgZXFzdHIgbmVzdHIKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0FyaXRobQkJYWRkIHN1YiBtdWwgZGl2IG1vZCBleHAgbmVnIGluY3IgZGVjcgorc3luIGtleXdvcmQJbGlmZWxpbmVzSW5kaQkJbmFtZSBmdWxsbmFtZSBzdXJuYW1lIGdpdmVucyB0cmltbmFtZSBiaXJ0aAorc3luIGtleXdvcmQJbGlmZWxpbmVzSW5kaQkJZGVhdGggYmFwdGlzbSBidXJpYWwKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0luZGkJCWZhdGhlciBtb3RoZXIgbmV4dHNpYiBwcmV2c2liIHNleCBtYWxlIGZlbWFsZQorc3luIGtleXdvcmQJbGlmZWxpbmVzSW5kaQkJcG4gbnNwb3VzZXMgbmZhbWlsaWVzIHBhcmVudHMgdGl0bGUga2V5CitzeW4ga2V5d29yZAlsaWZlbGluZXNJbmRpCQlzb3VuZGV4IGlub2RlIHJvb3QgaW5kaSBmaXJzdGluZGkgbmV4dGluZGkKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0luZGkJCXByZXZpbmRpIHNwb3VzZXMgZmFtaWxpZXMgZm9yaW5kaSBpbmRpc2V0CitzeW4ga2V5d29yZAlsaWZlbGluZXNJbmRpCQlhZGR0b3NldCBkZWxldGVmcm9tc2V0IGxlbmd0aHNldCB1bmlvbiBpbnRlcnNlY3QKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0luZGkJCWRpZmZlcmVuY2UgcGFyZW50c2V0IGNoaWxkc2V0IHNwb3VzZXNldCBzaWJsaW5nc2V0CitzeW4ga2V5d29yZAlsaWZlbGluZXNJbmRpCQlhbmNlc3RvcnNldCBkZXNjZW5kZW50c2V0IGRlc2NlbmRhbnRzZXQgdW5pcXVlc2V0CitzeW4ga2V5d29yZAlsaWZlbGluZXNJbmRpCQluYW1lc29ydCBrZXlzb3J0IHZhbHVlc29ydCBnZW5pbmRpc2V0IGdldGluZGlzZXQKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0luZGkJCWZvcmluZGlzZXQgbGFzdGluZGkgd3JpdGVpbmRpCitzeW4ga2V5d29yZAlsaWZlbGluZXNJbmRpCQlpbnNldAorc3luIGtleXdvcmQJbGlmZWxpbmVzRmFtCQltYXJyaWFnZSBodXNiYW5kIHdpZmUgbmNoaWxkcmVuIGZpcnN0Y2hpbGQKK3N5biBrZXl3b3JkICAgICBsaWZlbGluZXNGYW0JCWxhc3RjaGlsZCBmbm9kZSBmYW0gZmlyc3RmYW0gbmV4dGZhbSBsYXN0ZmFtCitzeW4ga2V5d29yZCAgICAgbGlmZWxpbmVzRmFtCQlwcmV2ZmFtIGNoaWxkcmVuIGZvcmZhbSB3cml0ZWZhbQorc3luIGtleXdvcmQJbGlmZWxpbmVzTGlzdAkJbGlzdCBlbXB0eSBsZW5ndGggZW5xdWV1ZSBkZXF1ZXVlIHJlcXVldWUKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0xpc3QJCXB1c2ggcG9wIHNldGVsIGdldGVsIGZvcmxpc3QgaW5saXN0CitzeW4ga2V5d29yZAlsaWZlbGluZXNUYWJsZQkJdGFibGUgaW5zZXJ0IGxvb2t1cAorc3luIGtleXdvcmQJbGlmZWxpbmVzR2VkY29tCQl4cmVmIHRhZyB2YWx1ZSBwYXJlbnQgY2hpbGQgc2libGluZyBzYXZlbm9kZQorc3luIGtleXdvcmQJbGlmZWxpbmVzR2VkY29tCQlmb3Jub2RlcyB0cmF2ZXJzZSBjcmVhdGVub2RlIGFkZG5vZGUgZGVsZXRlbm9kZQorc3luIGtleXdvcmQJbGlmZWxpbmVzR2VkY29tCQlyZWZlcmVuY2UgZGVyZWZlcmVuY2UgZ2V0cmVjb3JkCitzeW4ga2V5d29yZCAgICAgbGlmZWxpbmVzR2VkY29tCQlnZW5nZWRjb20gZ2VuZ2VkY29tc3Ryb25nIGdlbmdlZGNvbXdlYWsKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0Z1bmN0CQlkYXRlIHBsYWNlIHllYXIgbG9uZyBzaG9ydCBnZXR0b2RheSBkYXlmb3JtYXQKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0Z1bmN0CQltb250aGZvcm1hdCBkYXRlZm9ybWF0IGV4dHJhY3RkYXRlCitzeW4ga2V5d29yZAlsaWZlbGluZXNGdW5jdAkJY29tcGxleGRhdGUKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0Z1bmN0CQlleHRyYWN0bmFtZXMgZXh0cmFjdHBsYWNlcyBleHRyYWN0dG9rZW5zIGxvd2VyCitzeW4ga2V5d29yZCAgICAgbGlmZWxpbmVzRnVuY3QJCXVwcGVyIGNhcGl0YWxpemUgdHJpbSByanVzdGlmeSBzYXZlIHN0cnNhdmUKK3N5biBrZXl3b3JkICAgICBsaWZlbGluZXNGdW5jdAkJY29uY2F0IHN0cmNvbmNhdCBzdHJsZW4gc3Vic3RyaW5nIGluZGV4CitzeW4ga2V5d29yZAlsaWZlbGluZXNGdW5jdAkJZCBjYXJkIG9yZCBhbHBoYSByb21hbiBzdHJzb3VuZGV4IHN0cnRvaW50CitzeW4ga2V5d29yZAlsaWZlbGluZXNGdW5jdAkJYXRvaSBsaW5lbW9kZSBwYWdlbW9kIGNvbCByb3cgcG9zIHBhZ2VvdXQgbmwKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0Z1bmN0CQlzcCBxdCBuZXdmaWxlIG91dGZpbGUgY29weWZpbGUgcHJpbnQgbG9jayB1bmxvY2sKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0Z1bmN0CQlkYXRhYmFzZSB2ZXJzaW9uIHN5c3RlbSBzdGRkYXRlIHByb2dyYW0KK3N5biBrZXl3b3JkCWxpZmVsaW5lc0Z1bmN0CQlwdmFsdWUgcGFnZW1vZGUgbGV2ZWwgZXh0cmFjdGRhdGVzdHIgZGVidWcKK3N5biBrZXl3b3JkCWxpZmVsaW5lc0Z1bmN0CQlmIGZyZWUgZ2V0Y29sIGdldHByb3BlcnR5IGhlYXB1c2VkCisKK3N5biByZWdpb24JbGlmZWxpbmVzU3RyaW5nCQlzdGFydD0rTFw9Iisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPWxpZmVsaW5lc1NwZWNpYWwKKworc3luIHJlZ2lvbglsaWZlbGluZXNDb21tZW50CXN0YXJ0PSIvXCoiICBlbmQ9IlwqLyIgY29udGFpbnM9bGlmZWxpbmVzQ29tbWVudAorCisiIE9ubHkgaW50ZWdlcnMgd2l0aCBsaWZlbGluZXMKKworc3luIG1hdGNoCWxpZmVsaW5lc051bWJlcgkJIlw8XGRcK1w+IgorCisiY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcworImFkYXB0ZWQgZnJvbSBvcmlnaW5hbCBjLnZpbSB3cml0dGVuIGJ5IEJyYW0gTW9vbGVuYWFyCisKK3N5biBjbHVzdGVyCWxpZmVsaW5lc1BhcmVuR3JvdXAJY29udGFpbnM9bGlmZWxpbmVzUGFyZW5FcnJvcgorc3luIHJlZ2lvbglsaWZlbGluZXNQYXJlbgkJdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULEBsaWZlbGluZXNQYXJlbkdyb3VwCitzeW4gbWF0Y2gJbGlmZWxpbmVzUGFyZW5FcnJvcgkiKSIKK3N5biBtYXRjaAlsaWZlbGluZXNFcnJJblBhcmVuCWNvbnRhaW5lZCAiW3t9XSIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9saWZlbGluZXNfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbGlmZWxpbmVzX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGxpZmVsaW5lc0NvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluayBsaWZlbGluZXNBcml0aG0JT3BlcmF0b3IKKyAgSGlMaW5rIGxpZmVsaW5lc0xvZ2ljYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGxpZmVsaW5lc0luY2x1ZGUJSW5jbHVkZQorICBIaUxpbmsgbGlmZWxpbmVzQ29tbWVudAlDb21tZW50CisgIEhpTGluayBsaWZlbGluZXNTdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluayBsaWZlbGluZXNVc2VyCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGxpZmVsaW5lc0Z1bmN0CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGxpZmVsaW5lc1RhYmxlCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGxpZmVsaW5lc0dlZGNvbQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGxpZmVsaW5lc0xpc3QJCVN0YXRlbWVudAorICBIaUxpbmsgbGlmZWxpbmVzUmVwZWF0CVJlcGVhdAorICBIaUxpbmsgbGlmZWxpbmVzRmFtCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGxpZmVsaW5lc0luZGkJCVN0YXRlbWVudAorICBIaUxpbmsgbGlmZWxpbmVzUHJvYwkJU3RhdGVtZW50CisgIEhpTGluayBsaWZlbGluZXNEZWYJCVN0YXRlbWVudAorICBIaUxpbmsgbGlmZWxpbmVzU3RyaW5nCVN0cmluZworICBIaUxpbmsgbGlmZWxpbmVzTnVtYmVyCU51bWJlcgorICBIaUxpbmsgbGlmZWxpbmVzUGFyZW5FcnJvcglFcnJvcgorICBIaUxpbmsgbGlmZWxpbmVzRXJySW5QYXJlbglFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJsaWZlbGluZXMiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9saWxvLnZpbSBiL3J1bnRpbWUvc3ludGF4L2xpbG8udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5N2JiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9saWxvLnZpbQpAQCAtMCwwICsxLDE5NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgVGhpcyBpcyBhIEdFTkVSQVRFRCBGSUxFLiBQbGVhc2UgYWx3YXlzIHJlZmVyIHRvIHNvdXJjZSBmaWxlIGF0IHRoZSBVUkkgYmVsb3cuCisiIExhbmd1YWdlOiBsaWxvIGNvbmZpZ3VyYXRpb24gKGxpbG8uY29uZikKKyIgTWFpbnRhaW5lcjogRGF2aWQgTmVcdntjfWFzIChZZXRpKSA8eWV0aUBwaHlzaWNzLm11bmkuY3o+CisiIExhc3QgQ2hhbmdlOiAyMDAzIE1heSAwNAorIiBVUkw6IGh0dHA6Ly90cmlmaWMuYXRoLmN4L0Z0cC92aW0vc3ludGF4L2xpbG8udmltCisKKyIgU2V0dXAKK2lmIHZlcnNpb24gPj0gNjAwCisJaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKwkJZmluaXNoCisJZW5kaWYKK2Vsc2UKKwlzeW50YXggY2xlYXIKK2VuZGlmCisKK2lmIHZlcnNpb24gPj0gNjAwCisJY29tbWFuZCAtbmFyZ3M9MSBTZXRJc2sgc2V0bG9jYWwgaXNrZXl3b3JkPTxhcmdzPgorZWxzZQorCWNvbW1hbmQgLW5hcmdzPTEgU2V0SXNrIHNldCBpc2tleXdvcmQ9PGFyZ3M+CitlbmRpZgorU2V0SXNrIEAsNDgtNTcsLiwtLF8KK2RlbGNvbW1hbmQgU2V0SXNrCisKK3N5biBjYXNlIGlnbm9yZQorCisiIEJhc2UgY29uc3RydWN0cworc3luIG1hdGNoIGxpbG9FcnJvciAiXFNcKyIKK3N5biBtYXRjaCBsaWxvQ29tbWVudCAiIy4qJCIKK3N5biBtYXRjaCBsaWxvRW52aXJvbiAiXCRcd1wrIiBjb250YWluZWQKK3N5biBtYXRjaCBsaWxvRW52aXJvbiAiXCR7W159XVwrfSIgY29udGFpbmVkCitzeW4gbWF0Y2ggbGlsb0RlY051bWJlciAiXGRcKyIgY29udGFpbmVkCitzeW4gbWF0Y2ggbGlsb0hleE51bWJlciAiMFt4WF1ceFwrIiBjb250YWluZWQKK3N5biBtYXRjaCBsaWxvRGVjTnVtYmVyUCAiXGRcK3BcPSIgY29udGFpbmVkCitzeW4gbWF0Y2ggbGlsb1NwZWNpYWwgY29udGFpbmVkICJcXFwoXCJcfFxcXHwkXCkiCitzeW4gcmVnaW9uIGxpbG9TdHJpbmcgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWluZWQgY29udGFpbnM9bGlsb1NwZWNpYWwsbGlsb0Vudmlyb24KK3N5biBtYXRjaCBsaWxvTGFiZWwgIlxTXCsiIGNvbnRhaW5lZCBjb250YWlucz1saWxvU3BlY2lhbCxsaWxvRW52aXJvbgorc3luIHJlZ2lvbiBsaWxvUGF0aCBzdGFydD0rWyQvXSsgc2tpcD0rXFxcXFx8XFwgXHxcXCQiKyBlbmQ9KyBcfCQrIGNvbnRhaW5lZCBjb250YWlucz1saWxvU3BlY2lhbCxsaWxvRW52aXJvbgorc3luIG1hdGNoIGxpbG9EZWNOdW1iZXJMaXN0ICJcKFxkXHwsXClcKyIgY29udGFpbmVkIGNvbnRhaW5zPWxpbG9EZWNOdW1iZXIKK3N5biBtYXRjaCBsaWxvRGVjTnVtYmVyUExpc3QgIlwoXGRcfFsscF1cKVwrIiBjb250YWluZWQgY29udGFpbnM9bGlsb0RlY051bWJlclAsbGlsb0RlY051bWJlcgorc3luIHJlZ2lvbiBsaWxvQW55dGhpbmcgc3RhcnQ9K1teWzpzcGFjZTpdI10rIHNraXA9K1xcXFxcfFxcIFx8XFwkKyBlbmQ9KyBcfCQrIGNvbnRhaW5lZCBjb250YWlucz1saWxvU3BlY2lhbCxsaWxvRW52aXJvbixsaWxvU3RyaW5nCisKKyIgUGF0aAorc3luIGtleXdvcmQgbGlsb09wdGlvbiBiYWNrdXAgYml0bWFwIGJvb3QgZGlza3RhYiBmb3JjZS1iYWNrdXAgaW5zdGFsbCBrZXl0YWJsZSBtYXAgbWVzc2FnZSBuZXh0Z3JvdXA9bGlsb0VxUGF0aCxsaWxvRXFQYXRoQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIGtleXdvcmQgbGlsb0tlcm5lbE9wdCBpbml0cmQgcm9vdCBuZXh0Z3JvdXA9bGlsb0VxUGF0aCxsaWxvRXFQYXRoQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIGtleXdvcmQgbGlsb0ltYWdlT3B0IHBhdGggbG9hZGVyIHRhYmxlIG5leHRncm91cD1saWxvRXFQYXRoLGxpbG9FcVBhdGhDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4ga2V5d29yZCBsaWxvRGlza09wdCBwYXJ0aXRpb24gbmV4dGdyb3VwPWxpbG9FcVBhdGgsbGlsb0VxUGF0aENvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKKworIiBPdGhlcgorc3luIGtleXdvcmQgbGlsb09wdGlvbiBtZW51LXNjaGVtZSByYWlkLWV4dHJhLWJvb3Qgc2VyaWFsIG5leHRncm91cD1saWxvRXFBbnl0aGluZyxsaWxvRXFBbnl0aGluZ0NvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBrZXl3b3JkIGxpbG9PcHRpb24gZGVmYXVsdCBuZXh0Z3JvdXA9bGlsb0VxTGFiZWwsbGlsb0VxTGFiZWxDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4ga2V5d29yZCBsaWxvS2VybmVsT3B0IHJhbWRpc2sgbmV4dGdyb3VwPWxpbG9FcUFueXRoaW5nLGxpbG9FcUFueXRoaW5nQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIGtleXdvcmQgbGlsb0ltYWdlT3B0IGFsaWFzIGxhYmVsIG5leHRncm91cD1saWxvRXFMYWJlbCxsaWxvRXFMYWJlbENvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBrZXl3b3JkIGxpbG9JbWFnZU9wdCBwYXNzd29yZCByYW5nZSBuZXh0Z3JvdXA9bGlsb0VxQW55dGhpbmcsbGlsb0VxQW55dGhpbmdDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4ga2V5d29yZCBsaWxvRGlza09wdCBzZXQgdHlwZSBuZXh0Z3JvdXA9bGlsb0VxQW55dGhpbmcsbGlsb0VxQW55dGhpbmdDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CisKKyIgU3ltYm9saWMKK3N5biBrZXl3b3JkIGxpbG9LZXJuZWxPcHQgdmdhIG5leHRncm91cD1saWxvRXFWZ2EsbGlsb0VxVmdhQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorCisiIE51bWJlcgorc3luIGtleXdvcmQgbGlsb09wdGlvbiBkZWxheSB0aW1lb3V0IHZlcmJvc2UgbmV4dGdyb3VwPWxpbG9FcURlY051bWJlcixsaWxvRXFEZWNOdW1iZXJDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4ga2V5d29yZCBsaWxvRGlza09wdCBzZWN0b3JzIGhlYWRzIGN5bGluZGVycyBzdGFydCBuZXh0Z3JvdXA9bGlsb0VxRGVjTnVtYmVyLGxpbG9FcURlY051bWJlckNvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKKworIiBTdHJpbmcKK3N5biBrZXl3b3JkIGxpbG9PcHRpb24gbWVudS10aXRsZSBuZXh0Z3JvdXA9bGlsb0VxU3RyaW5nLGxpbG9FcVN0cmluZ0NvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBrZXl3b3JkIGxpbG9LZXJuZWxPcHQgYXBwZW5kIG5leHRncm91cD1saWxvRXFTdHJpbmcsbGlsb0VxU3RyaW5nQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIGtleXdvcmQgbGlsb0ltYWdlT3B0IGZhbGxiYWNrIGxpdGVyYWwgbmV4dGdyb3VwPWxpbG9FcVN0cmluZyxsaWxvRXFTdHJpbmdDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CisKKyIgSGV4IG51bWJlcgorc3luIGtleXdvcmQgbGlsb0ltYWdlT3B0IG1hcC1kcml2ZSB0byBuZXh0Z3JvdXA9bGlsb0VxSGV4TnVtYmVyLGxpbG9FcUhleE51bWJlckNvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBrZXl3b3JkIGxpbG9EaXNrT3B0IGJpb3Mgbm9ybWFsIGhpZGRlbiBuZXh0Z3JvdXA9bGlsb0VxTnVtYmVyLGxpbG9FcU51bWJlckNvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKKworIiBOdW1iZXIgbGlzdAorc3luIGtleXdvcmQgbGlsb09wdGlvbiBibXAtY29sb3JzIGJtcC10aW1lciBuZXh0Z3JvdXA9bGlsb0VxTnVtYmVyTGlzdCxsaWxvRXFOdW1iZXJMaXN0Q29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorCisiIE51bWJlciBsaXN0LCBzb21lIG9mIHRoZSBudW1iZXJzIGZvbGxvd2VkIGJ5IHAKK3N5biBrZXl3b3JkIGxpbG9PcHRpb24gYm1wLXRhYmxlIG5leHRncm91cD1saWxvRXFEZWNOdW1iZXJQTGlzdCxsaWxvRXFEZWNOdW1iZXJQTGlzdENvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKKworIiBGbGFnCitzeW4ga2V5d29yZCBsaWxvT3B0aW9uIGNvbXBhY3QgZml4LXRhYmxlIGdlb21ldHJpYyBpZ25vcmUtdGFibGUgbGJhMzIgbGluZWFyIG1hbmRhdG9yeSBub3dhcm4gcHJvbXB0CitzeW4ga2V5d29yZCBsaWxvS2VybmVsT3B0IHJlYWQtb25seSByZWFkLXdyaXRlCitzeW4ga2V5d29yZCBsaWxvSW1hZ2VPcHQgYnlwYXNzIGxvY2sgbWFuZGF0b3J5IG9wdGlvbmFsIHJlc3RyaWN0ZWQgc2luZ2xlLWtleSB1bnNhZmUKK3N5biBrZXl3b3JkIGxpbG9EaXNrT3B0IGNoYW5nZSBhY3RpdmF0ZSBkZWFjdGl2YXRlIGluYWNjZXNzaWJsZSByZXNldAorCisiIEltYWdlCitzeW4ga2V5d29yZCBsaWxvSW1hZ2UgaW1hZ2Ugb3RoZXIgbmV4dGdyb3VwPWxpbG9FcVBhdGgsbGlsb0VxUGF0aENvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBrZXl3b3JkIGxpbG9EaXNrIGRpc2sgbmV4dGdyb3VwPWxpbG9FcVBhdGgsbGlsb0VxUGF0aENvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBrZXl3b3JkIGxpbG9DaFJ1bGVzIGNoYW5nZS1ydWxlcworCisiIFZnYSBrZXl3b3Jkcworc3luIGtleXdvcmQgbGlsb1ZnYUtleXdvcmQgYXNrIGV4dCBleHRlbmRlZCBub3JtYWwgY29udGFpbmVkCisKKyIgQ29tbWVudCBmb2xsb3dlZCBieSBlcXVhbCBzaWduIGFuZCAuLi4KK3N5biBtYXRjaCBsaWxvRXFQYXRoQ29tbWVudCAiIy4qJCIgY29udGFpbmVkIG5leHRncm91cD1saWxvRXFQYXRoLGxpbG9FcVBhdGhDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4gbWF0Y2ggbGlsb0VxVmdhQ29tbWVudCAiIy4qJCIgY29udGFpbmVkIG5leHRncm91cD1saWxvRXFWZ2EsbGlsb0VxVmdhQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIG1hdGNoIGxpbG9FcU51bWJlckNvbW1lbnQgIiMuKiQiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0VxTnVtYmVyLGxpbG9FcU51bWJlckNvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBtYXRjaCBsaWxvRXFEZWNOdW1iZXJDb21tZW50ICIjLiokIiBjb250YWluZWQgbmV4dGdyb3VwPWxpbG9FcURlY051bWJlcixsaWxvRXFEZWNOdW1iZXJDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4gbWF0Y2ggbGlsb0VxSGV4TnVtYmVyQ29tbWVudCAiIy4qJCIgY29udGFpbmVkIG5leHRncm91cD1saWxvRXFIZXhOdW1iZXIsbGlsb0VxSGV4TnVtYmVyQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIG1hdGNoIGxpbG9FcVN0cmluZ0NvbW1lbnQgIiMuKiQiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0VxU3RyaW5nLGxpbG9FcVN0cmluZ0NvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBtYXRjaCBsaWxvRXFMYWJlbENvbW1lbnQgIiMuKiQiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0VxTGFiZWwsbGlsb0VxTGFiZWxDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4gbWF0Y2ggbGlsb0VxTnVtYmVyTGlzdENvbW1lbnQgIiMuKiQiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0VxTnVtYmVyTGlzdCxsaWxvRXFOdW1iZXJMaXN0Q29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIG1hdGNoIGxpbG9FcURlY051bWJlclBMaXN0Q29tbWVudCAiIy4qJCIgY29udGFpbmVkIG5leHRncm91cD1saWxvRXFEZWNOdW1iZXJQTGlzdCxsaWxvRXFEZWNOdW1iZXJQTGlzdENvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBtYXRjaCBsaWxvRXFBbnl0aGluZ0NvbW1lbnQgIiMuKiQiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0VxQW55dGhpbmcsbGlsb0VxQW55dGhpbmdDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CisKKyIgRXF1YWwgc2lnbiBmb2xsb3dlZCBieSAuLi4KK3N5biBtYXRjaCBsaWxvRXFQYXRoICI9IiBjb250YWluZWQgbmV4dGdyb3VwPWxpbG9QYXRoLGxpbG9QYXRoQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIG1hdGNoIGxpbG9FcVZnYSAiPSIgY29udGFpbmVkIG5leHRncm91cD1saWxvVmdhS2V5d29yZCxsaWxvSGV4TnVtYmVyLGxpbG9EZWNOdW1iZXIsbGlsb1ZnYUNvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBtYXRjaCBsaWxvRXFOdW1iZXIgIj0iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0RlY051bWJlcixsaWxvSGV4TnVtYmVyLGxpbG9OdW1iZXJDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4gbWF0Y2ggbGlsb0VxRGVjTnVtYmVyICI9IiBjb250YWluZWQgbmV4dGdyb3VwPWxpbG9EZWNOdW1iZXIsbGlsb0RlY051bWJlckNvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBtYXRjaCBsaWxvRXFIZXhOdW1iZXIgIj0iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0hleE51bWJlcixsaWxvSGV4TnVtYmVyQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIG1hdGNoIGxpbG9FcVN0cmluZyAiPSIgY29udGFpbmVkIG5leHRncm91cD1saWxvU3RyaW5nLGxpbG9TdHJpbmdDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4gbWF0Y2ggbGlsb0VxTGFiZWwgIj0iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0xhYmVsLGxpbG9MYWJlbENvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBtYXRjaCBsaWxvRXFOdW1iZXJMaXN0ICI9IiBjb250YWluZWQgbmV4dGdyb3VwPWxpbG9EZWNOdW1iZXJMaXN0LGxpbG9EZWNOdW1iZXJMaXN0Q29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIG1hdGNoIGxpbG9FcURlY051bWJlclBMaXN0ICI9IiBjb250YWluZWQgbmV4dGdyb3VwPWxpbG9EZWNOdW1iZXJQTGlzdCxsaWxvRGVjTnVtYmVyUExpc3RDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4gbWF0Y2ggbGlsb0VxQW55dGhpbmcgIj0iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0FueXRoaW5nLGxpbG9Bbnl0aGluZ0NvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKKworIiBDb21tZW50IGZvbGxvd2VkIGJ5IC4uLgorc3luIG1hdGNoIGxpbG9QYXRoQ29tbWVudCAiIy4qJCIgY29udGFpbmVkIG5leHRncm91cD1saWxvUGF0aCxsaWxvUGF0aENvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBtYXRjaCBsaWxvVmdhQ29tbWVudCAiIy4qJCIgY29udGFpbmVkIG5leHRncm91cD1saWxvVmdhS2V5d29yZCxsaWxvSGV4TnVtYmVyLGxpbG9WZ2FDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4gbWF0Y2ggbGlsb051bWJlckNvbW1lbnQgIiMuKiQiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0RlY051bWJlcixsaWxvSGV4TnVtYmVyLGxpbG9OdW1iZXJDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4gbWF0Y2ggbGlsb0RlY051bWJlckNvbW1lbnQgIiMuKiQiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bGlsb0RlY051bWJlcixsaWxvRGVjTnVtYmVyQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIG1hdGNoIGxpbG9IZXhOdW1iZXJDb21tZW50ICIjLiokIiBjb250YWluZWQgbmV4dGdyb3VwPWxpbG9IZXhOdW1iZXIsbGlsb0hleE51bWJlckNvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBtYXRjaCBsaWxvU3RyaW5nQ29tbWVudCAiIy4qJCIgY29udGFpbmVkIG5leHRncm91cD1saWxvU3RyaW5nLGxpbG9TdHJpbmdDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4gbWF0Y2ggbGlsb0xhYmVsQ29tbWVudCAiIy4qJCIgY29udGFpbmVkIG5leHRncm91cD1saWxvTGFiZWwsbGlsb0xhYmVsQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorc3luIG1hdGNoIGxpbG9EZWNOdW1iZXJMaXN0Q29tbWVudCAiIy4qJCIgY29udGFpbmVkIG5leHRncm91cD1saWxvRGVjTnVtYmVyTGlzdCxsaWxvRGVjTnVtYmVyTGlzdENvbW1lbnQsbGlsb0Vycm9yIHNraXB3aGl0ZSBza2lwZW1wdHkKK3N5biBtYXRjaCBsaWxvRGVjTnVtYmVyUExpc3RDb21tZW50ICIjLiokIiBjb250YWluZWQgbmV4dGdyb3VwPWxpbG9EZWNOdW1iZXJQTGlzdCxsaWxvRGVjTnVtYmVyUExpc3RDb21tZW50LGxpbG9FcnJvciBza2lwd2hpdGUgc2tpcGVtcHR5CitzeW4gbWF0Y2ggbGlsb0FueXRoaW5nQ29tbWVudCAiIy4qJCIgY29udGFpbmVkIG5leHRncm91cD1saWxvQW55dGhpbmcsbGlsb0FueXRoaW5nQ29tbWVudCxsaWxvRXJyb3Igc2tpcHdoaXRlIHNraXBlbXB0eQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9saWxvX3N5bnRheF9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX2xpbG9fc3ludGF4X2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluayBsaWxvRXFQYXRoIGxpbG9FcXVhbHMKKwlIaUxpbmsgbGlsb0VxV29yZCBsaWxvRXF1YWxzCisJSGlMaW5rIGxpbG9FcVZnYSBsaWxvRXF1YWxzCisJSGlMaW5rIGxpbG9FcURlY051bWJlciBsaWxvRXF1YWxzCisJSGlMaW5rIGxpbG9FcUhleE51bWJlciBsaWxvRXF1YWxzCisJSGlMaW5rIGxpbG9FcU51bWJlciBsaWxvRXF1YWxzCisJSGlMaW5rIGxpbG9FcVN0cmluZyBsaWxvRXF1YWxzCisJSGlMaW5rIGxpbG9FcUxhYmVsIGxpbG9FcXVhbHMKKwlIaUxpbmsgbGlsb0VxQW55dGhpbmcgbGlsb0VxdWFscworCUhpTGluayBsaWxvRXF1YWxzIFNwZWNpYWwKKworCUhpTGluayBsaWxvRXJyb3IgRXJyb3IKKworCUhpTGluayBsaWxvRXFQYXRoQ29tbWVudCBsaWxvQ29tbWVudAorCUhpTGluayBsaWxvRXFWZ2FDb21tZW50IGxpbG9Db21tZW50CisJSGlMaW5rIGxpbG9FcURlY051bWJlckNvbW1lbnQgbGlsb0NvbW1lbnQKKwlIaUxpbmsgbGlsb0VxSGV4TnVtYmVyQ29tbWVudCBsaWxvQ29tbWVudAorCUhpTGluayBsaWxvRXFTdHJpbmdDb21tZW50IGxpbG9Db21tZW50CisJSGlMaW5rIGxpbG9FcUxhYmVsQ29tbWVudCBsaWxvQ29tbWVudAorCUhpTGluayBsaWxvRXFBbnl0aGluZ0NvbW1lbnQgbGlsb0NvbW1lbnQKKwlIaUxpbmsgbGlsb1BhdGhDb21tZW50IGxpbG9Db21tZW50CisJSGlMaW5rIGxpbG9WZ2FDb21tZW50IGxpbG9Db21tZW50CisJSGlMaW5rIGxpbG9EZWNOdW1iZXJDb21tZW50IGxpbG9Db21tZW50CisJSGlMaW5rIGxpbG9IZXhOdW1iZXJDb21tZW50IGxpbG9Db21tZW50CisJSGlMaW5rIGxpbG9OdW1iZXJDb21tZW50IGxpbG9Db21tZW50CisJSGlMaW5rIGxpbG9TdHJpbmdDb21tZW50IGxpbG9Db21tZW50CisJSGlMaW5rIGxpbG9MYWJlbENvbW1lbnQgbGlsb0NvbW1lbnQKKwlIaUxpbmsgbGlsb0FueXRoaW5nQ29tbWVudCBsaWxvQ29tbWVudAorCUhpTGluayBsaWxvQ29tbWVudCBDb21tZW50CisKKwlIaUxpbmsgbGlsb0Rpc2tPcHQgbGlsb09wdGlvbgorCUhpTGluayBsaWxvS2VybmVsT3B0IGxpbG9PcHRpb24KKwlIaUxpbmsgbGlsb0ltYWdlT3B0IGxpbG9PcHRpb24KKwlIaUxpbmsgbGlsb09wdGlvbiBLZXl3b3JkCisKKwlIaUxpbmsgbGlsb0RlY051bWJlciBsaWxvTnVtYmVyCisJSGlMaW5rIGxpbG9IZXhOdW1iZXIgbGlsb051bWJlcgorCUhpTGluayBsaWxvRGVjTnVtYmVyUCBsaWxvTnVtYmVyCisJSGlMaW5rIGxpbG9OdW1iZXIgTnVtYmVyCisJSGlMaW5rIGxpbG9TdHJpbmcgU3RyaW5nCisJSGlMaW5rIGxpbG9QYXRoIENvbnN0YW50CisKKwlIaUxpbmsgbGlsb1NwZWNpYWwgU3BlY2lhbAorCUhpTGluayBsaWxvTGFiZWwgVGl0bGUKKwlIaUxpbmsgbGlsb0RlY051bWJlckxpc3QgU3BlY2lhbAorCUhpTGluayBsaWxvRGVjTnVtYmVyUExpc3QgU3BlY2lhbAorCUhpTGluayBsaWxvQW55dGhpbmcgTm9ybWFsCisJSGlMaW5rIGxpbG9FbnZpcm9uIElkZW50aWZpZXIKKwlIaUxpbmsgbGlsb1ZnYUtleXdvcmQgSWRlbnRpZmllcgorCUhpTGluayBsaWxvSW1hZ2UgVHlwZQorCUhpTGluayBsaWxvQ2hSdWxlcyBQcmVwcm9jCisJSGlMaW5rIGxpbG9EaXNrIFByZXByb2MKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJsaWxvIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbGlzcC52aW0gYi9ydW50aW1lL3N5bnRheC9saXNwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDkxNGVmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbGlzcC52aW0KQEAgLTAsMCArMSw0OTkgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICBMaXNwCisiIE1haW50YWluZXI6ICBEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxOZHJPY2hpcFNAUGNhbXBiZWxsQWZhbWlseS5NYml6PgorIiBMYXN0IENoYW5nZTogU2VwIDAyLCAyMDAzCisiIFZlcnNpb246ICAgICAxNAorIiBVUkw6CQkJCSBodHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL2luZGV4Lmh0bWwjdmltbGlua3Nfc3ludGF4CisiCisiICBUaGFua3MgdG8gRiBYYXZpZXIgTm9yaWEgZm9yIGEgbGlzdCBvZiA5NzggQ29tbW9uIExpc3Agc3ltYm9scworIiAgdGFrZW4gZnJvbSB0aGUgSHlwZXJTcGVjCisiCisiICBPcHRpb25zOgorIiAgICBsaXNwX2luc3RyaW5nIDogaWYgaXQgZXhpc3RzLCB0aGVuICIoLi4uIikgc3RyaW5ncyBhcmUgaGlnaGxpZ2h0ZWQKKyIJCSAgICAgYXMgaWYgdGhlIGNvbnRlbnRzIHdlcmUgbGlzcC4gIFVzZWZ1bCBmb3IgQXV0b0xpc3AuCisiCQkgICAgIFB1dCAgICBsZXQgbGlzcF9pbnN0cmluZz0xICAgaW50byB5b3VyIDwudmltcmM+IGlmCisiCQkgICAgIHlvdSB3YW50IHRoaXMgb3B0aW9uLgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmIHZlcnNpb24gPj0gNjAwCisgc2V0bG9jYWwgaXNrZXl3b3JkPTQyLDQzLDQ1LDQ3LTU4LDYwLTYyLDY0LTkwLDk3LTEyMixfCitlbHNlCisgc2V0IGlza2V5d29yZD00Miw0Myw0NSw0Ny01OCw2MC02Miw2NC05MCw5Ny0xMjIsXworZW5kaWYKKworIiBDbHVzdGVycworc3luIGNsdXN0ZXIJCQkgbGlzcEF0b21DbHVzdGVyCQkgIGNvbnRhaW5zPWxpc3BBdG9tQmFyU3ltYm9sLGxpc3BBdG9tTGlzdCxsaXNwQXRvbU5tYnIwLGxpc3BDb21tZW50LGxpc3BEZWNsLGxpc3BGdW5jLGxpc3BMZWFkV2hpdGUKK3N5biBjbHVzdGVyCQkJIGxpc3BMaXN0Q2x1c3RlcgkJICBjb250YWlucz1saXNwQXRvbSxsaXNwQXRvbUJhclN5bWJvbCxsaXNwQXRvbU1hcmssbGlzcEJRTGlzdCxsaXNwQmFyU3ltYm9sLGxpc3BDb21tZW50LGxpc3BDb25jYXQsbGlzcERlY2wsbGlzcEZ1bmMsbGlzcEtleSxsaXNwTGlzdCxsaXNwTnVtYmVyLGxpc3BTcGVjaWFsLGxpc3BTeW1ib2wsbGlzcFZhcixsaXNwTGVhZFdoaXRlCisKKyIgTGlzdHMKK3N5biBtYXRjaAkJCSBsaXNwU3ltYm9sCQkJICBjb250YWluZWQJCQkgICAhW14oKSdgLCI7IFx0XVwrIQorc3luIG1hdGNoCQkJIGxpc3BCYXJTeW1ib2wJCQkgIGNvbnRhaW5lZAkJCSAgICF8Li5cey19fCEKK2lmIGV4aXN0cygibGlzcF9pbnN0cmluZyIpCisgc3luIHJlZ2lvbgkJCSBsaXNwTGlzdAkJCSAgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IigiIHNraXA9InwuXHstfXwiCQkJICAgIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iKSIgY29udGFpbnM9QGxpc3BMaXN0Q2x1c3RlcixsaXNwU3RyaW5nLGxpc3BJblN0cmluZyxsaXNwSW5TdHJpbmdTdHJpbmcKKyBzeW4gcmVnaW9uCQkJIGxpc3BCUUxpc3QJCQkgIG1hdGNoZ3JvdXA9UHJlUHJvYyAgIHN0YXJ0PSJgKCIgIHNraXA9InwuXHstfXwiCQkgICAgbWF0Y2hncm91cD1QcmVQcm9jICAgZW5kPSIpIiBjb250YWlucz1AbGlzcExpc3RDbHVzdGVyLGxpc3BTdHJpbmcsbGlzcEluU3RyaW5nLGxpc3BJblN0cmluZ1N0cmluZworZWxzZQorIHN5biByZWdpb24JCQkgbGlzcExpc3QJCQkgIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIoIiBza2lwPSJ8Llx7LX18IgkJCSAgICBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIGNvbnRhaW5zPUBsaXNwTGlzdENsdXN0ZXIsbGlzcFN0cmluZworIHN5biByZWdpb24JCQkgbGlzcEJRTGlzdAkJCSAgbWF0Y2hncm91cD1QcmVQcm9jICAgc3RhcnQ9ImAoIiAgc2tpcD0ifC5cey19fCIJCSAgICBtYXRjaGdyb3VwPVByZVByb2MgICBlbmQ9IikiIGNvbnRhaW5zPUBsaXNwTGlzdENsdXN0ZXIsbGlzcFN0cmluZworZW5kaWYKKyIgQXRvbXMKK3N5biBtYXRjaAkJCSBsaXNwQXRvbU1hcmsJCQkgICInIgorc3luIG1hdGNoCQkJIGxpc3BBdG9tCQkJICAiJygibWU9ZS0xCQkJICAgY29udGFpbnM9bGlzcEF0b21NYXJrCSAgICBuZXh0Z3JvdXA9bGlzcEF0b21MaXN0CitzeW4gbWF0Y2gJCQkgbGlzcEF0b20JCQkgICInW14gXHQoKV1cKyIJCQkgICBjb250YWlucz1saXNwQXRvbU1hcmsKK3N5biBtYXRjaAkJCSBsaXNwQXRvbUJhclN5bWJvbAkJICAhJ3wuLlx7LX18IQkJCSAgIGNvbnRhaW5zPWxpc3BBdG9tTWFyaworc3luIHJlZ2lvbgkJCSBsaXNwQXRvbQkJCSAgc3RhcnQ9KyciKwkJCSAgIHNraXA9K1xcIisgZW5kPSsiKworc3luIHJlZ2lvbgkJCSBsaXNwQXRvbUxpc3QJCQkgIGNvbnRhaW5lZAkJCSAgIG1hdGNoZ3JvdXA9U3BlY2lhbCBzdGFydD0iKCIJICAgIHNraXA9InwuXHstfXwiIG1hdGNoZ3JvdXA9U3BlY2lhbCBlbmQ9IikiCQkJICAgICAgY29udGFpbnM9QGxpc3BBdG9tQ2x1c3RlcixsaXNwU3RyaW5nCitzeW4gbWF0Y2gJCQkgbGlzcEF0b21ObWJyCQkJICBjb250YWluZWQJCQkgICAiXDxcZFwrIgorc3luIG1hdGNoCQkJIGxpc3BMZWFkV2hpdGUJCQkgIGNvbnRhaW5lZAkJCSAgICJeXHNcKyIKKworIiBTdGFuZGFyZCBMaXNwIEZ1bmN0aW9ucyBhbmQgTWFjcm9zCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJICoJCQkJICBmaW5kLW1ldGhvZAkJCSAgIHBwcmludC1pbmRlbnQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgKioJCQkJICBmaW5kLXBhY2thZ2UJCQkgICBwcHJpbnQtbGluZWFyCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJICoqKgkJCQkgIGZpbmQtcmVzdGFydAkJCSAgIHBwcmludC1sb2dpY2FsLWJsb2NrCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJICsJCQkJICBmaW5kLXN5bWJvbAkJCSAgIHBwcmludC1uZXdsaW5lCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJICsrCQkJCSAgZmluaXNoLW91dHB1dAkJCSAgIHBwcmludC1wb3AKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgKysrCQkJCSAgZmlyc3QJCQkJICAgcHByaW50LXRhYgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSAtCQkJCSAgZml4bnVtCQkJICAgcHByaW50LXRhYnVsYXIKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgLwkJCQkgIGZsZXQJCQkJICAgcHJpbjEKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgLy8JCQkJICBmbG9hdAkJCQkgICBwcmluMS10by1zdHJpbmcKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgLy8vCQkJCSAgZmxvYXQtZGlnaXRzCQkJICAgcHJpbmMKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgLz0JCQkJICBmbG9hdC1wcmVjaXNpb24JCSAgIHByaW5jLXRvLXN0cmluZworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSAxKwkJCQkgIGZsb2F0LXJhZGl4CQkJICAgcHJpbnQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgMS0JCQkJICBmbG9hdC1zaWduCQkJICAgcHJpbnQtbm90LXJlYWRhYmxlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIDwJCQkJICBmbG9hdGluZy1wb2ludC1pbmV4YWN0CSAgIHByaW50LW5vdC1yZWFkYWJsZS1vYmplY3QKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgPD0JCQkJICBmbG9hdGluZy1wb2ludC1pbnZhbGlkLW9wZXJhdGlvbiBwcmludC1vYmplY3QKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgPQkJCQkgIGZsb2F0aW5nLXBvaW50LW92ZXJmbG93CSAgIHByaW50LXVucmVhZGFibGUtb2JqZWN0CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJID4JCQkJICBmbG9hdGluZy1wb2ludC11bmRlcmZsb3cJICAgcHJvYmUtZmlsZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSA+PQkJCQkgIGZsb2F0cAkJCSAgIHByb2NsYWltCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFib3J0CQkJCSAgZmxvb3IJCQkJICAgcHJvZworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhYnMJCQkJICBmbWFrdW5ib3VuZAkJCSAgIHByb2cqCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFjY2VzcwkJCQkgIGZvcmNlLW91dHB1dAkJCSAgIHByb2cxCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFjb25zCQkJCSAgZm9ybWF0CQkJICAgcHJvZzIKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYWNvcwkJCQkgIGZvcm1hdHRlcgkJCSAgIHByb2duCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFjb3NoCQkJCSAgZm91cnRoCQkJICAgcHJvZ3JhbS1lcnJvcgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhZGQtbWV0aG9kCQkJICBmcmVzaC1saW5lCQkJICAgcHJvZ3YKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYWRqb2luCQkJCSAgZnJvdW5kCQkJICAgcHJvdmlkZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhZGp1c3QtYXJyYXkJCQkgIGZ0cnVuY2F0ZQkJCSAgIHBzZXRmCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFkanVzdGFibGUtYXJyYXktcAkJICBmdHlwZQkJCQkgICBwc2V0cQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhbGxvY2F0ZS1pbnN0YW5jZQkJICBmdW5jYWxsCQkJICAgcHVzaAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhbHBoYS1jaGFyLXAJCQkgIGZ1bmN0aW9uCQkJICAgcHVzaG5ldworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhbHBoYW51bWVyaWNwCQkJICBmdW5jdGlvbi1rZXl3b3JkcwkJICAgcHV0cHJvcAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhbmQJCQkJICBmdW5jdGlvbi1sYW1iZGEtZXhwcmVzc2lvbgkgICBxdW90ZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhcHBlbmQJCQkJICBmdW5jdGlvbnAJCQkgICByYW5kb20KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYXBwbHkJCQkJICBnYml0cAkJCQkgICByYW5kb20tc3RhdGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYXBwbHlob29rCQkJICBnY2QJCQkJICAgcmFuZG9tLXN0YXRlLXAKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYXByb3BvcwkJCSAgZ2VuZXJpYy1mdW5jdGlvbgkJICAgcmFzc29jCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFwcm9wb3MtbGlzdAkJCSAgZ2Vuc3ltCQkJICAgcmFzc29jLWlmCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFyZWYJCQkJICBnZW50ZW1wCQkJICAgcmFzc29jLWlmLW5vdAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhcml0aG1ldGljLWVycm9yCQkgIGdldAkJCQkgICByYXRpbworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhcml0aG1ldGljLWVycm9yLW9wZXJhbmRzCSAgZ2V0LWRlY29kZWQtdGltZQkJICAgcmF0aW9uYWwKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYXJpdGhtZXRpYy1lcnJvci1vcGVyYXRpb24JICBnZXQtZGlzcGF0Y2gtbWFjcm8tY2hhcmFjdGVyCSAgIHJhdGlvbmFsaXplCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFycmF5CQkJCSAgZ2V0LWludGVybmFsLXJlYWwtdGltZQkgICByYXRpb25hbHAKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYXJyYXktZGltZW5zaW9uCQkgIGdldC1pbnRlcm5hbC1ydW4tdGltZQkJICAgcmVhZAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhcnJheS1kaW1lbnNpb24tbGltaXQJCSAgZ2V0LW1hY3JvLWNoYXJhY3RlcgkJICAgcmVhZC1ieXRlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFycmF5LWRpbWVuc2lvbnMJCSAgZ2V0LW91dHB1dC1zdHJlYW0tc3RyaW5nCSAgIHJlYWQtY2hhcgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhcnJheS1kaXNwbGFjZW1lbnQJCSAgZ2V0LXByb3BlcnRpZXMJCSAgIHJlYWQtY2hhci1uby1oYW5nCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFycmF5LWVsZW1lbnQtdHlwZQkJICBnZXQtc2V0Zi1leHBhbnNpb24JCSAgIHJlYWQtZGVsaW1pdGVkLWxpc3QKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYXJyYXktaGFzLWZpbGwtcG9pbnRlci1wCSAgZ2V0LXNldGYtbWV0aG9kCQkgICByZWFkLWV2YWwtcHJpbnQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYXJyYXktaW4tYm91bmRzLXAJCSAgZ2V0LXVuaXZlcnNhbC10aW1lCQkgICByZWFkLWZyb20tc3RyaW5nCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFycmF5LXJhbmsJCQkgIGdldGYJCQkJICAgcmVhZC1saW5lCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFycmF5LXJhbmstbGltaXQJCSAgZ2V0aGFzaAkJCSAgIHJlYWQtcHJlc2VydmluZy13aGl0ZXNwYWNlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFycmF5LXJvdy1tYWpvci1pbmRleAkJICBnbwkJCQkgICByZWFkLXNlcXVlbmNlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFycmF5LXRvdGFsLXNpemUJCSAgZ3JhcGhpYy1jaGFyLXAJCSAgIHJlYWRlci1lcnJvcgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhcnJheS10b3RhbC1zaXplLWxpbWl0CQkgIGhhbmRsZXItYmluZAkJCSAgIHJlYWR0YWJsZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhcnJheXAJCQkJICBoYW5kbGVyLWNhc2UJCQkgICByZWFkdGFibGUtY2FzZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhc2gJCQkJICBoYXNoLXRhYmxlCQkJICAgcmVhZHRhYmxlcAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhc2luCQkJCSAgaGFzaC10YWJsZS1jb3VudAkJICAgcmVhbAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhc2luaAkJCQkgIGhhc2gtdGFibGUtcAkJCSAgIHJlYWxwCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFzc2VydAkJCQkgIGhhc2gtdGFibGUtcmVoYXNoLXNpemUJICAgcmVhbHBhcnQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYXNzb2MJCQkJICBoYXNoLXRhYmxlLXJlaGFzaC10aHJlc2hvbGQJICAgcmVkdWNlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGFzc29jLWlmCQkJICBoYXNoLXRhYmxlLXNpemUJCSAgIHJlaW5pdGlhbGl6ZS1pbnN0YW5jZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBhc3NvYy1pZi1ub3QJCQkgIGhhc2gtdGFibGUtdGVzdAkJICAgcmVtCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGF0YW4JCQkJICBob3N0LW5hbWVzdHJpbmcJCSAgIHJlbWYKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYXRhbmgJCQkJICBpZGVudGl0eQkJCSAgIHJlbWhhc2gKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYXRvbQkJCQkgIGlmCQkJCSAgIHJlbW92ZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBiYXNlLWNoYXIJCQkgIGlmLWV4aXN0cwkJCSAgIHJlbW92ZS1kdXBsaWNhdGVzCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJhc2Utc3RyaW5nCQkJICBpZ25vcmFibGUJCQkgICByZW1vdmUtaWYKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYmlnbnVtCQkJCSAgaWdub3JlCQkJICAgcmVtb3ZlLWlmLW5vdAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBiaXQJCQkJICBpZ25vcmUtZXJyb3JzCQkJICAgcmVtb3ZlLW1ldGhvZAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBiaXQtYW5kCQkJICBpbWFncGFydAkJCSAgIHJlbXByb3AKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYml0LWFuZGMxCQkJICBpbXBvcnQJCQkgICByZW5hbWUtZmlsZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBiaXQtYW5kYzIJCQkgIGluLXBhY2thZ2UJCQkgICByZW5hbWUtcGFja2FnZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBiaXQtZXF2CQkJICBpbi1wYWNrYWdlCQkJICAgcmVwbGFjZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBiaXQtaW9yCQkJICBpbmNmCQkJCSAgIHJlcXVpcmUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYml0LW5hbmQJCQkgIGluaXRpYWxpemUtaW5zdGFuY2UJCSAgIHJlc3QKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYml0LW5vcgkJCSAgaW5saW5lCQkJICAgcmVzdGFydAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBiaXQtbm90CQkJICBpbnB1dC1zdHJlYW0tcAkJICAgcmVzdGFydC1iaW5kCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJpdC1vcmMxCQkJICBpbnNwZWN0CQkJICAgcmVzdGFydC1jYXNlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJpdC1vcmMyCQkJICBpbnQtY2hhcgkJCSAgIHJlc3RhcnQtbmFtZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBiaXQtdmVjdG9yCQkJICBpbnRlZ2VyCQkJICAgcmV0dXJuCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJpdC12ZWN0b3ItcAkJCSAgaW50ZWdlci1kZWNvZGUtZmxvYXQJCSAgIHJldHVybi1mcm9tCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJpdC14b3IJCQkgIGludGVnZXItbGVuZ3RoCQkgICByZXZhcHBlbmQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYmxvY2sJCQkJICBpbnRlZ2VycAkJCSAgIHJldmVyc2UKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYm9vbGUJCQkJICBpbnRlcmFjdGl2ZS1zdHJlYW0tcAkJICAgcm9vbQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBib29sZS0xCQkJICBpbnRlcm4JCQkgICByb3RhdGVmCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJvb2xlLTIJCQkgIGludGVybmFsLXRpbWUtdW5pdHMtcGVyLXNlY29uZCAgIHJvdW5kCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJvb2xlLWFuZAkJCSAgaW50ZXJzZWN0aW9uCQkJICAgcm93LW1ham9yLWFyZWYKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYm9vbGUtYW5kYzEJCQkgIGludmFsaWQtbWV0aG9kLWVycm9yCQkgICBycGxhY2EKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYm9vbGUtYW5kYzIJCQkgIGludm9rZS1kZWJ1Z2dlcgkJICAgcnBsYWNkCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJvb2xlLWMxCQkJICBpbnZva2UtcmVzdGFydAkJICAgc2FmZXR5CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJvb2xlLWMyCQkJICBpbnZva2UtcmVzdGFydC1pbnRlcmFjdGl2ZWx5CSAgIHNhdGlzZmllcworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBib29sZS1jbHIJCQkgIGlzcXJ0CQkJCSAgIHNiaXQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYm9vbGUtZXF2CQkJICBrZXl3b3JkCQkJICAgc2NhbGUtZmxvYXQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYm9vbGUtaW9yCQkJICBrZXl3b3JkcAkJCSAgIHNjaGFyCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJvb2xlLW5hbmQJCQkgIGxhYmVscwkJCSAgIHNlYXJjaAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBib29sZS1ub3IJCQkgIGxhbWJkYQkJCSAgIHNlY29uZAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBib29sZS1vcmMxCQkJICBsYW1iZGEtbGlzdC1rZXl3b3JkcwkJICAgc2VxdWVuY2UKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYm9vbGUtb3JjMgkJCSAgbGFtYmRhLXBhcmFtZXRlcnMtbGltaXQJICAgc2VyaW91cy1jb25kaXRpb24KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYm9vbGUtc2V0CQkJICBsYXN0CQkJCSAgIHNldAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBib29sZS14b3IJCQkgIGxjbQkJCQkgICBzZXQtY2hhci1iaXQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYm9vbGVhbgkJCSAgbGRiCQkJCSAgIHNldC1kaWZmZXJlbmNlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJvdGgtY2FzZS1wCQkJICBsZGItdGVzdAkJCSAgIHNldC1kaXNwYXRjaC1tYWNyby1jaGFyYWN0ZXIKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYm91bmRwCQkJCSAgbGRpZmYJCQkJICAgc2V0LWV4Y2x1c2l2ZS1vcgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBicmVhawkJCQkgIGxlYXN0LW5lZ2F0aXZlLWRvdWJsZS1mbG9hdAkgICBzZXQtbWFjcm8tY2hhcmFjdGVyCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJyb2FkY2FzdC1zdHJlYW0JCSAgbGVhc3QtbmVnYXRpdmUtbG9uZy1mbG9hdAkgICBzZXQtcHByaW50LWRpc3BhdGNoCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJyb2FkY2FzdC1zdHJlYW0tc3RyZWFtcwkgIGxlYXN0LW5lZ2F0aXZlLW5vcm1hbGl6ZWQtZG91YmxlLWZsb2F0CQkJICAgIHNldC1zeW50YXgtZnJvbS1jaGFyCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGJ1aWx0LWluLWNsYXNzCQkJICBsZWFzdC1uZWdhdGl2ZS1ub3JtYWxpemVkLWxvbmctZmxvYXQJCQkJICAgIHNldGYKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYnV0bGFzdAkJCSAgbGVhc3QtbmVnYXRpdmUtbm9ybWFsaXplZC1zaG9ydC1mbG9hdAkJCQkgICAgc2V0cQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBieXRlCQkJCSAgbGVhc3QtbmVnYXRpdmUtbm9ybWFsaXplZC1zaW5nbGUtZmxvYXQJCQkgICAgc2V2ZW50aAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBieXRlLXBvc2l0aW9uCQkJICBsZWFzdC1uZWdhdGl2ZS1zaG9ydC1mbG9hdAkgICBzaGFkb3cKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgYnl0ZS1zaXplCQkJICBsZWFzdC1uZWdhdGl2ZS1zaW5nbGUtZmxvYXQJICAgc2hhZG93aW5nLWltcG9ydAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjYWxsLWFyZ3VtZW50cy1saW1pdAkJICBsZWFzdC1wb3NpdGl2ZS1kb3VibGUtZmxvYXQJICAgc2hhcmVkLWluaXRpYWxpemUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2FsbC1tZXRob2QJCQkgIGxlYXN0LXBvc2l0aXZlLWxvbmctZmxvYXQJICAgc2hpZnRmCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNhbGwtbmV4dC1tZXRob2QJCSAgbGVhc3QtcG9zaXRpdmUtbm9ybWFsaXplZC1kb3VibGUtZmxvYXQJCQkgICAgc2hvcnQtZmxvYXQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2FwaXRhbGl6ZQkJCSAgbGVhc3QtcG9zaXRpdmUtbm9ybWFsaXplZC1sb25nLWZsb2F0CQkJCSAgICBzaG9ydC1mbG9hdC1lcHNpbG9uCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNhcgkJCQkgIGxlYXN0LXBvc2l0aXZlLW5vcm1hbGl6ZWQtc2hvcnQtZmxvYXQJCQkJICAgIHNob3J0LWZsb2F0LW5lZ2F0aXZlLWVwc2lsb24KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2FzZQkJCQkgIGxlYXN0LXBvc2l0aXZlLW5vcm1hbGl6ZWQtc2luZ2xlLWZsb2F0CQkJICAgIHNob3J0LXNpdGUtbmFtZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjYXRjaAkJCQkgIGxlYXN0LXBvc2l0aXZlLXNob3J0LWZsb2F0CSAgIHNpZ25hbAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjY2FzZQkJCQkgIGxlYXN0LXBvc2l0aXZlLXNpbmdsZS1mbG9hdAkgICBzaWduZWQtYnl0ZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjZHIJCQkJICBsZW5ndGgJCQkgICBzaWdudW0KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2VpbGluZwkJCSAgbGV0CQkJCSAgIHNpbWxlLWNvbmRpdGlvbgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjZWxsLWVycm9yCQkJICBsZXQqCQkJCSAgIHNpbXBsZS1hcnJheQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjZWxsLWVycm9yLW5hbWUJCSAgbGlzcAkJCQkgICBzaW1wbGUtYmFzZS1zdHJpbmcKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2Vycm9yCQkJCSAgbGlzcC1pbXBsZW1lbnRhdGlvbi10eXBlCSAgIHNpbXBsZS1iaXQtdmVjdG9yCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNoYW5nZS1jbGFzcwkJCSAgbGlzcC1pbXBsZW1lbnRhdGlvbi12ZXJzaW9uCSAgIHNpbXBsZS1iaXQtdmVjdG9yLXAKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhcgkJCQkgIGxpc3QJCQkJICAgc2ltcGxlLWNvbmRpdGlvbi1mb3JtYXQtYXJndW1lbnRzCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNoYXItYml0CQkJICBsaXN0KgkJCQkgICBzaW1wbGUtY29uZGl0aW9uLWZvcm1hdC1jb250cm9sCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNoYXItYml0cwkJCSAgbGlzdC1hbGwtcGFja2FnZXMJCSAgIHNpbXBsZS1lcnJvcgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjaGFyLWJpdHMtbGltaXQJCSAgbGlzdC1sZW5ndGgJCQkgICBzaW1wbGUtc3RyaW5nCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNoYXItY29kZQkJCSAgbGlzdGVuCQkJICAgc2ltcGxlLXN0cmluZy1wCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNoYXItY29kZS1saW1pdAkJICBsaXN0cAkJCQkgICBzaW1wbGUtdHlwZS1lcnJvcgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjaGFyLWNvbnRyb2wtYml0CQkgIGxvYWQJCQkJICAgc2ltcGxlLXZlY3Rvcgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjaGFyLWRvd25jYXNlCQkJICBsb2FkLWxvZ2ljYWwtcGF0aG5hbWUtdHJhbnNsYXRpb25zCQkJCSAgICBzaW1wbGUtdmVjdG9yLXAKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhci1lcXVhbAkJCSAgbG9hZC10aW1lLXZhbHVlCQkgICBzaW1wbGUtd2FybmluZworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjaGFyLWZvbnQJCQkgIGxvY2FsbHkJCQkgICBzaW4KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhci1mb250LWxpbWl0CQkgIGxvZwkJCQkgICBzaW5nbGUtZmxhb3QtZXBzaWxvbgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjaGFyLWdyZWF0ZXJwCQkJICBsb2dhbmQJCQkgICBzaW5nbGUtZmxvYXQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhci1oeXBlci1iaXQJCQkgIGxvZ2FuZGMxCQkJICAgc2luZ2xlLWZsb2F0LWVwc2lsb24KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhci1pbnQJCQkgIGxvZ2FuZGMyCQkJICAgc2luZ2xlLWZsb2F0LW5lZ2F0aXZlLWVwc2lsb24KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhci1sZXNzcAkJCSAgbG9nYml0cAkJCSAgIHNpbmgKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhci1tZXRhLWJpdAkJCSAgbG9nY291bnQJCQkgICBzaXh0aAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjaGFyLW5hbWUJCQkgIGxvZ2VxdgkJCSAgIHNsZWVwCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNoYXItbm90LWVxdWFsCQkJICBsb2dpY2FsLXBhdGhuYW1lCQkgICBzbG90LWJvdW5kcAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjaGFyLW5vdC1ncmVhdGVycAkJICBsb2dpY2FsLXBhdGhuYW1lLXRyYW5zbGF0aW9ucwkgICBzbG90LWV4aXN0cy1wCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNoYXItbm90LWxlc3NwCQkJICBsb2dpb3IJCQkgICBzbG90LW1ha3VuYm91bmQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhci1zdXBlci1iaXQJCQkgIGxvZ25hbmQJCQkgICBzbG90LW1pc3NpbmcKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhci11cGNhc2UJCQkgIGxvZ25vcgkJCSAgIHNsb3QtdW5ib3VuZAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjaGFyLz0JCQkJICBsb2dub3QJCQkgICBzbG90LXZhbHVlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNoYXI8CQkJCSAgbG9nb3JjMQkJCSAgIHNvZnR3YXJlLXR5cGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhcjw9CQkJCSAgbG9nb3JjMgkJCSAgIHNvZnR3YXJlLXZlcnNpb24KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhcj0JCQkJICBsb2d0ZXN0CQkJICAgc29tZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjaGFyPgkJCQkgIGxvZ3hvcgkJCSAgIHNvcnQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2hhcj49CQkJCSAgbG9uZy1mbG9hdAkJCSAgIHNwYWNlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNoYXJhY3RlcgkJCSAgbG9uZy1mbG9hdC1lcHNpbG9uCQkgICBzcGVjaWFsCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNoYXJhY3RlcnAJCQkgIGxvbmctZmxvYXQtbmVnYXRpdmUtZXBzaWxvbgkgICBzcGVjaWFsLWZvcm0tcAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjaGVjay10eXBlCQkJICBsb25nLXNpdGUtbmFtZQkJICAgc3BlY2lhbC1vcGVyYXRvci1wCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNpcwkJCQkgIGxvb3AJCQkJICAgc3BlZWQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2xhc3MJCQkJICBsb29wLWZpbmlzaAkJCSAgIHNxcnQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2xhc3MtbmFtZQkJCSAgbG93ZXItY2FzZS1wCQkJICAgc3RhYmxlLXNvcnQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2xhc3Mtb2YJCQkgIG1hY2hpbmUtaW5zdGFuY2UJCSAgIHN0YW5kYXJkCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNsZWFyLWlucHV0CQkJICBtYWNoaW5lLXR5cGUJCQkgICBzdGFuZGFyZC1jaGFyCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNsZWFyLW91dHB1dAkJCSAgbWFjaGluZS12ZXJzaW9uCQkgICBzdGFuZGFyZC1jaGFyLXAKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2xvc2UJCQkJICBtYWNyby1mdW5jdGlvbgkJICAgc3RhbmRhcmQtY2xhc3MKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY2xyaGFzaAkJCSAgbWFjcm9leHBhbmQJCQkgICBzdGFuZGFyZC1nZW5lcmljLWZ1bmN0aW9uCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvZGUtY2hhcgkJCSAgbWFjcm9leHBhbmQtMQkJCSAgIHN0YW5kYXJkLW1ldGhvZAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb2VyY2UJCQkJICBtYWNyb2V4cGFuZC1sCQkJICAgc3RhbmRhcmQtb2JqZWN0CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvbW1vbnAJCQkgIG1hY3JvbGV0CQkJICAgc3RlcAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb21waWxhdGlvbi1zcGVlZAkJICBtYWtlLWFycmF5CQkJICAgc3RvcmFnZS1jb25kaXRpb24KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29tcGlsZQkJCSAgbWFrZS1hcnJheQkJCSAgIHN0b3JlLXZhbHVlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvbXBpbGUtZmlsZQkJCSAgbWFrZS1icm9hZGNhc3Qtc3RyZWFtCQkgICBzdHJlYW0KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29tcGlsZS1maWxlLXBhdGhuYW1lCQkgIG1ha2UtY2hhcgkJCSAgIHN0cmVhbS1lbGVtZW50LXR5cGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29tcGlsZWQtZnVuY3Rpb24JCSAgbWFrZS1jb25jYXRlbmF0ZWQtc3RyZWFtCSAgIHN0cmVhbS1lcnJvcgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb21waWxlZC1mdW5jdGlvbi1wCQkgIG1ha2UtY29uZGl0aW9uCQkgICBzdHJlYW0tZXJyb3Itc3RyZWFtCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvbXBpbGVyLWxldAkJCSAgbWFrZS1kaXNwYXRjaC1tYWNyby1jaGFyYWN0ZXIJICAgc3RyZWFtLWV4dGVybmFsLWZvcm1hdAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb21waWxlci1tYWNybwkJCSAgbWFrZS1lY2hvLXN0cmVhbQkJICAgc3RyZWFtcAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb21waWxlci1tYWNyby1mdW5jdGlvbgkgIG1ha2UtaGFzaC10YWJsZQkJICAgc3RyZWFtdXAKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29tcGxlbWVudAkJCSAgbWFrZS1pbnN0YW5jZQkJCSAgIHN0cmluZworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb21wbGV4CQkJICBtYWtlLWluc3RhbmNlcy1vYnNvbGV0ZQkgICBzdHJpbmctY2FwaXRhbGl6ZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb21wbGV4cAkJCSAgbWFrZS1saXN0CQkJICAgc3RyaW5nLWNoYXIKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29tcHV0ZS1hcHBsaWNhYmxlLW1ldGhvZHMJICBtYWtlLWxvYWQtZm9ybQkJICAgc3RyaW5nLWNoYXItcAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb21wdXRlLXJlc3RhcnRzCQkgIG1ha2UtbG9hZC1mb3JtLXNhdmluZy1zbG90cwkgICBzdHJpbmctZG93bmNhc2UKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29uY2F0ZW5hdGUJCQkgIG1ha2UtbWV0aG9kCQkJICAgc3RyaW5nLWVxdWFsCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvbmNhdGVuYXRlZC1zdHJlYW0JCSAgbWFrZS1wYWNrYWdlCQkJICAgc3RyaW5nLWdyZWF0ZXJwCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvbmNhdGVuYXRlZC1zdHJlYW0tc3RyZWFtcwkgIG1ha2UtcGF0aG5hbWUJCQkgICBzdHJpbmctbGVmdC10cmltCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvbmQJCQkJICBtYWtlLXJhbmRvbS1zdGF0ZQkJICAgc3RyaW5nLWxlc3NwCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvbmRpdGlvbgkJCSAgbWFrZS1zZXF1ZW5jZQkJCSAgIHN0cmluZy1ub3QtZXF1YWwKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29uanVnYXRlCQkJICBtYWtlLXN0cmluZwkJCSAgIHN0cmluZy1ub3QtZ3JlYXRlcnAKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29ucwkJCQkgIG1ha2Utc3RyaW5nLWlucHV0LXN0cmVhbQkgICBzdHJpbmctbm90LWxlc3NwCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvbnNwCQkJCSAgbWFrZS1zdHJpbmctb3V0cHV0LXN0cmVhbQkgICBzdHJpbmctcmlnaHQtc3RyaW0KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29uc3RhbnRseQkJCSAgbWFrZS1zeW1ib2wJCQkgICBzdHJpbmctcmlnaHQtdHJpbQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb25zdGFudHAJCQkgIG1ha2Utc3lub255bS1zdHJlYW0JCSAgIHN0cmluZy1zdHJlYW0KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29udGludWUJCQkgIG1ha2UtdHdvLXdheS1zdHJlYW0JCSAgIHN0cmluZy10cmltCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvbnRyb2wtZXJyb3IJCQkgIG1ha3VuYm91bmQJCQkgICBzdHJpbmctdXBjYXNlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvcHktYWxpc3QJCQkgIG1hcAkJCQkgICBzdHJpbmcvPQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb3B5LWxpc3QJCQkgIG1hcC1pbnRvCQkJICAgc3RyaW5nPAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb3B5LXBwcmludC1kaXNwYXRjaAkJICBtYXBjCQkJCSAgIHN0cmluZzw9CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvcHktcmVhZHRhYmxlCQkJICBtYXBjYW4JCQkgICBzdHJpbmc9CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvcHktc2VxCQkJICBtYXBjYXIJCQkgICBzdHJpbmc+CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvcHktc3RydWN0dXJlCQkJICBtYXBjb24JCQkgICBzdHJpbmc+PQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb3B5LXN5bWJvbAkJCSAgbWFwaGFzaAkJCSAgIHN0cmluZ3AKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY29weS10cmVlCQkJICBtYXBsCQkJCSAgIHN0cnVjdHVyZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb3MJCQkJICBtYXBsaXN0CQkJICAgc3RydWN0dXJlLWNsYXNzCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvc2gJCQkJICBtYXNrLWZpZWxkCQkJICAgc3RydWN0dXJlLW9iamVjdAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBjb3VudAkJCQkgIG1heAkJCQkgICBzdHlsZS13YXJuaW5nCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGNvdW50LWlmCQkJICBtZW1iZXIJCQkgICBzdWJsaW0KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY291bnQtaWYtbm90CQkJICBtZW1iZXItaWYJCQkgICBzdWJsaXMKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgY3R5cGVjYXNlCQkJICBtZW1iZXItaWYtbm90CQkJICAgc3Vic2VxCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlYnVnCQkJCSAgbWVyZ2UJCQkJICAgc3Vic2V0cAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZWNmCQkJCSAgbWVyZ2UtcGF0aG5hbWUJCSAgIHN1YnN0CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlY2xhaW0JCQkgIG1lcmdlLXBhdGhuYW1lcwkJICAgc3Vic3QtaWYKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVjbGFyYXRpb24JCQkgIG1ldGhvZAkJCSAgIHN1YnN0LWlmLW5vdAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZWNsYXJlCQkJICBtZXRob2QtY29tYmluYXRpb24JCSAgIHN1YnN0aXR1dGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVjb2RlLWZsb2F0CQkJICBtZXRob2QtY29tYmluYXRpb24tZXJyb3IJICAgc3Vic3RpdHV0ZS1pZgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZWNvZGUtdW5pdmVyc2FsLXRpbWUJCSAgbWV0aG9kLXF1YWxpZmllcnMJCSAgIHN1YnN0aXR1dGUtaWYtbm90CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlZmNsYXNzCQkJICBtaW4JCQkJICAgc3VidHlwZXAKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVmY29uc3RhbnQJCQkgIG1pbnVzcAkJCSAgIHN2cmVmCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlZmdlbmVyaWMJCQkgIG1pc21hdGNoCQkJICAgc3hoYXNoCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlZmluZS1jb21waWxlci1tYWNybwkJICBtb2QJCQkJICAgc3ltYm9sCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlZmluZS1jb25kaXRpb24JCSAgbW9zdC1uZWdhdGl2ZS1kb3VibGUtZmxvYXQJICAgc3ltYm9sLWZ1bmN0aW9uCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlZmluZS1tZXRob2QtY29tYmluYXRpb24JICBtb3N0LW5lZ2F0aXZlLWZpeG51bQkJICAgc3ltYm9sLW1hY3JvbGV0CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlZmluZS1tb2RpZnktbWFjcm8JCSAgbW9zdC1uZWdhdGl2ZS1sb25nLWZsb2F0CSAgIHN5bWJvbC1uYW1lCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlZmluZS1zZXRmLWV4cGFuZGVyCQkgIG1vc3QtbmVnYXRpdmUtc2hvcnQtZmxvYXQJICAgc3ltYm9sLXBhY2thZ2UKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVmaW5lLXNldGYtbWV0aG9kCQkgIG1vc3QtbmVnYXRpdmUtc2luZ2xlLWZsb2F0CSAgIHN5bWJvbC1wbGlzdAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZWZpbmUtc3ltYm9sLW1hY3JvCQkgIG1vc3QtcG9zaXRpdmUtZG91YmxlLWZsb2F0CSAgIHN5bWJvbC12YWx1ZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZWZtYWNybwkJCSAgbW9zdC1wb3NpdGl2ZS1maXhudW0JCSAgIHN5bWJvbHAKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVmbWV0aG9kCQkJICBtb3N0LXBvc2l0aXZlLWxvbmctZmxvYXQJICAgc3lub255bS1zdHJlYW0KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVmcGFja2FnZQkJCSAgbW9zdC1wb3NpdGl2ZS1zaG9ydC1mbG9hdAkgICBzeW5vbnltLXN0cmVhbS1zeW1ib2wKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVmcGFyYW1ldGVyCQkJICBtb3N0LXBvc2l0aXZlLXNpbmdsZS1mbG9hdAkgICBzeXMKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVmc2V0ZgkJCSAgbXVmZmxlLXdhcm5pbmcJCSAgIHN5c3RlbQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZWZzdHJ1Y3QJCQkgIG11bHRpcGxlLXZhbHVlLWJpbmQJCSAgIHQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVmdHlwZQkJCSAgbXVsdGlwbGUtdmFsdWUtY2FsbAkJICAgdGFnYm9keQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZWZ1bgkJCQkgIG11bHRpcGxlLXZhbHVlLWxpc3QJCSAgIHRhaWxwCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlZnZhcgkJCQkgIG11bHRpcGxlLXZhbHVlLXByb2cxCQkgICB0YW4KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVsZXRlCQkJCSAgbXVsdGlwbGUtdmFsdWUtc2V0ZXEJCSAgIHRhbmgKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVsZXRlLWR1cGxpY2F0ZXMJCSAgbXVsdGlwbGUtdmFsdWUtc2V0cQkJICAgdGVudGgKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVsZXRlLWZpbGUJCQkgIG11bHRpcGxlLXZhbHVlcy1saW1pdAkJICAgdGVycHJpCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlbGV0ZS1pZgkJCSAgbmFtZS1jaGFyCQkJICAgdGhlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRlbGV0ZS1pZi1ub3QJCQkgIG5hbWVzdHJpbmcJCQkgICB0aGlyZAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZWxldGUtcGFja2FnZQkJCSAgbmJ1dGxhc3QJCQkgICB0aHJvdworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZW5vbWluYXRvcgkJCSAgbmNvbmMJCQkJICAgdGltZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZXBvc2l0LWZpZWxkCQkJICBuZXh0LW1ldGhvZC1wCQkJICAgdHJhY2UKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGVzY3JpYmUJCQkgIG5pbAkJCQkgICB0cmFuc2xhdGUtbG9naWNhbC1wYXRobmFtZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZXNjcmliZS1vYmplY3QJCSAgbmludGVyc2VjdGlvbgkJCSAgIHRyYW5zbGF0ZS1wYXRobmFtZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkZXN0cnVjdHVyaW5nLWJpbmQJCSAgbmludGgJCQkJICAgdHJlZS1lcXVhbAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkaWdpdC1jaGFyCQkJICBuby1hcHBsaWNhYmxlLW1ldGhvZAkJICAgdHJ1ZW5hbWUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGlnaXQtY2hhci1wCQkJICBuby1uZXh0LW1ldGhvZAkJICAgdHJ1bmNhc2UKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGlyZWN0b3J5CQkJICBub3QJCQkJICAgdHJ1bmNhdGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGlyZWN0b3J5LW5hbWVzdHJpbmcJCSAgbm90YW55CQkJICAgdHdvLXdheS1zdHJlYW0KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZGlzYXNzZW1ibGUJCQkgIG5vdGV2ZXJ5CQkJICAgdHdvLXdheS1zdHJlYW0taW5wdXQtc3RyZWFtCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRpdmlzaW9uLWJ5LXplcm8JCSAgbm90aW5saW5lCQkJICAgdHdvLXdheS1zdHJlYW0tb3V0cHV0LXN0cmVhbQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkbwkJCQkgIG5yZWNvbmMJCQkgICB0eXBlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRvKgkJCQkgIG5yZXZlcnNlCQkJICAgdHlwZS1lcnJvcgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkby1hbGwtc3ltYm9scwkJCSAgbnNldC1kaWZmZXJlbmNlCQkgICB0eXBlLWVycm9yLWRhdHVtCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRvLWV4ZXRlcm5hbC1zeW1ib2xzCQkgIG5zZXQtZXhjbHVzaXZlLW9yCQkgICB0eXBlLWVycm9yLWV4cGVjdGVkLXR5cGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZG8tZXh0ZXJuYWwtc3ltYm9scwkJICBuc3RyaW5nCQkJICAgdHlwZS1vZgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkby1zeW1ib2xzCQkJICBuc3RyaW5nLWNhcGl0YWxpemUJCSAgIHR5cGVjYXNlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRvY3VtZW50YXRpb24JCQkgIG5zdHJpbmctZG93bmNhc2UJCSAgIHR5cGVwCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRvbGlzdAkJCQkgIG5zdHJpbmctdXBjYXNlCQkgICB1bmJvdW5kLXNsb3QKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZG90aW1lcwkJCSAgbnN1YmxpcwkJCSAgIHVuYm91bmQtc2xvdC1pbnN0YW5jZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBkb3VibGUtZmxvYXQJCQkgIG5zdWJzdAkJCSAgIHVuYm91bmQtdmFyaWFibGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZG91YmxlLWZsb2F0LWVwc2lsb24JCSAgbnN1YnN0LWlmCQkJICAgdW5kZWZpbmVkLWZ1bmN0aW9uCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRvdWJsZS1mbG9hdC1uZWdhdGl2ZS1lcHNpbG9uCSAgbnN1YnN0LWlmLW5vdAkJCSAgIHVuZXhwb3J0CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGRwYgkJCQkgIG5zdWJzdGl0dXRlCQkJICAgdW5pbnRlcm4KK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZHJpYmJsZQkJCSAgbnN1YnN0aXR1dGUtaWYJCSAgIHVuaW9uCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGR5bmFtaWMtZXh0ZW50CQkJICBuc3Vic3RpdHV0ZS1pZi1ub3QJCSAgIHVubGVzcworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBlY2FzZQkJCQkgIG50aAkJCQkgICB1bnJlYWQKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZWNoby1zdHJlYW0JCQkgIG50aC12YWx1ZQkJCSAgIHVucmVhZC1jaGFyCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGVjaG8tc3RyZWFtLWlucHV0LXN0cmVhbQkgIG50aGNkcgkJCSAgIHVuc2lnbmVkLWJ5dGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZWNoby1zdHJlYW0tb3V0cHV0LXN0cmVhbQkgIG51bGwJCQkJICAgdW50cmFjZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBlZAkJCQkgIG51bWJlcgkJCSAgIHVudXNlLXBhY2thZ2UKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZWlnaHRoCQkJCSAgbnVtYmVycAkJCSAgIHVud2luZC1wcm90ZWN0CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGVsdAkJCQkgIG51bWVyYXRvcgkJCSAgIHVwZGF0ZS1pbnN0YW5jZS1mb3ItZGlmZmVyZW50LWNsYXNzCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGVuY29kZS11bml2ZXJzYWwtdGltZQkJICBudW5pb24JCQkgICB1cGRhdGUtaW5zdGFuY2UtZm9yLXJlZGVmaW5lZC1jbGFzcworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBlbmQtb2YtZmlsZQkJCSAgb2RkcAkJCQkgICB1cGdyYWRlZC1hcnJheS1lbGVtZW50LXR5cGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZW5kcAkJCQkgIG9wZW4JCQkJICAgdXBncmFkZWQtY29tcGxleC1wYXJ0LXR5cGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZW5vdWdoLW5hbWVzdHJpbmcJCSAgb3Blbi1zdHJlYW0tcAkJCSAgIHVwcGVyLWNhc2UtcAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBlbnN1cmUtZGlyZWN0b3JpZXMtZXhpc3QJICBvcHRpbWl6ZQkJCSAgIHVzZS1wYWNrYWdlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGVuc3VyZS1nZW5lcmljLWZ1bmN0aW9uCSAgb3IJCQkJICAgdXNlLXZhbHVlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGVxCQkJCSAgb3RoZXJ3aXNlCQkJICAgdXNlcgorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBlcWwJCQkJICBvdXRwdXQtc3RyZWFtLXAJCSAgIHVzZXItaG9tZWRpci1wYXRobmFtZQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBlcXVhbAkJCQkgIHBhY2thZ2UJCQkgICB2YWx1ZXMKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZXF1YWxwCQkJCSAgcGFja2FnZS1lcnJvcgkJCSAgIHZhbHVlcy1saXN0CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGVycm9yCQkJCSAgcGFja2FnZS1lcnJvci1wYWNrYWdlCQkgICB2ZWN0b3IKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZXR5cGVjYXNlCQkJICBwYWNrYWdlLW5hbWUJCQkgICB2ZWN0b3ItcG9wCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGV2YWwJCQkJICBwYWNrYWdlLW5pY2tuYW1lcwkJICAgdmVjdG9yLXB1c2gKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZXZhbC13aGVuCQkJICBwYWNrYWdlLXNoYWRvd2luZy1zeW1ib2xzCSAgIHZlY3Rvci1wdXNoLWV4dGVuZAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBldmFsaG9vawkJCSAgcGFja2FnZS11c2UtbGlzdAkJICAgdmVjdG9ycAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBldmVucAkJCQkgIHBhY2thZ2UtdXNlZC1ieS1saXN0CQkgICB3YXJuCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGV2ZXJ5CQkJCSAgcGFja2FnZXAJCQkgICB3YXJuaW5nCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGV4cAkJCQkgIHBhaXJsaXMJCQkgICB3aGVuCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGV4cG9ydAkJCQkgIHBhcnNlLWVycm9yCQkJICAgd2lsZC1wYXRobmFtZS1wCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGV4cHQJCQkJICBwYXJzZS1pbnRlZ2VyCQkJICAgd2l0aC1hY2Nlc3NvcnMKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZXh0ZW5kZWQtY2hhcgkJCSAgcGFyc2UtbmFtZXN0cmluZwkJICAgd2l0aC1jb21waWxhdGlvbi11bml0CitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGZib3VuZHAJCQkgIHBhdGhuYW1lCQkJICAgd2l0aC1jb25kaXRpb24tcmVzdGFydHMKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZmNlaWxpbmcJCQkgIHBhdGhuYW1lLWRldmljZQkJICAgd2l0aC1oYXNoLXRhYmxlLWl0ZXJhdG9yCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGZkZWZpbml0aW9uCQkJICBwYXRobmFtZS1kaXJlY3RvcnkJCSAgIHdpdGgtaW5wdXQtZnJvbS1zdHJpbmcKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZmZsb29yCQkJCSAgcGF0aG5hbWUtaG9zdAkJCSAgIHdpdGgtb3Blbi1maWxlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGZpZnRoCQkJCSAgcGF0aG5hbWUtbWF0Y2gtcAkJICAgd2l0aC1vcGVuLXN0cmVhbQorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBmaWxlLWF1dGhvcgkJCSAgcGF0aG5hbWUtbmFtZQkJCSAgIHdpdGgtb3V0cHV0LXRvLXN0cmluZworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBmaWxlLWVycm9yCQkJICBwYXRobmFtZS10eXBlCQkJICAgd2l0aC1wYWNrYWdlLWl0ZXJhdG9yCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGZpbGUtZXJyb3ItcGF0aG5hbWUJCSAgcGF0aG5hbWUtdmVyc2lvbgkJICAgd2l0aC1zaW1wbGUtcmVzdGFydAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBmaWxlLWxlbmd0aAkJCSAgcGF0aG5hbWVwCQkJICAgd2l0aC1zbG90cworc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBmaWxlLW5hbWVzdHJpbmcJCSAgcGVlay1jaGFyCQkJICAgd2l0aC1zdGFuZGFyZC1pby1zeW50YXgKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZmlsZS1wb3NpdGlvbgkJCSAgcGhhc2UJCQkJICAgd3JpdGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZmlsZS1zdHJlYW0JCQkgIHBpCQkJCSAgIHdyaXRlLWJ5dGUKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZmlsZS1zdHJpbmctbGVuZ3RoCQkgIHBsdXNwCQkJCSAgIHdyaXRlLWNoYXIKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZmlsZS13cml0ZS1kYXRlCQkgIHBvcAkJCQkgICB3cml0ZS1saW5lCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGZpbGwJCQkJICBwb3NpdGlvbgkJCSAgIHdyaXRlLXNlcXVlbmNlCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGZpbGwtcG9pbnRlcgkJCSAgcG9zaXRpb24taWYJCQkgICB3cml0ZS1zdHJpbmcKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZmluZAkJCQkgIHBvc2l0aW9uLWlmLW5vdAkJICAgd3JpdGUtdG8tc3RyaW5nCitzeW4ga2V5d29yZCBsaXNwRnVuYwkJIGZpbmQtYWxsLXN5bWJvbHMJCSAgcHByaW50CQkJICAgeS1vci1uLXAKK3N5biBrZXl3b3JkIGxpc3BGdW5jCQkgZmluZC1jbGFzcwkJCSAgcHByaW50LWRpc3BhdGNoCQkgICB5ZXMtb3Itbm8tcAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBmaW5kLWlmCQkJICBwcHJpbnQtZXhpdC1pZi1saXN0LWV4aGF1c3RlZAkgICB6ZXJvcAorc3luIGtleXdvcmQgbGlzcEZ1bmMJCSBmaW5kLWlmLW5vdAkJCSAgcHByaW50LWZpbGwKKworc3luIG1hdGNoICAgbGlzcEZ1bmMJCSAiXDxjW2FkXVwrclw+IgorCisKKyIgTGlzcCBLZXl3b3JkcyAobW9kaWZpZXJzKQorc3luIGtleXdvcmQgbGlzcEtleQkJIDphYm9ydAkJCQkgIDpmcm9tLWVuZAkJCSAgIDpvdmVyd3JpdGUKK3N5biBrZXl3b3JkIGxpc3BLZXkJCSA6YWRqdXN0YWJsZQkJCSAgOmdlbnN5bQkJCSAgIDpwcmVkaWNhdGUKK3N5biBrZXl3b3JkIGxpc3BLZXkJCSA6YXBwZW5kCQkJICA6aG9zdAkJCQkgICA6cHJlc2VydmUtd2hpdGVzcGFjZQorc3luIGtleXdvcmQgbGlzcEtleQkJIDphcnJheQkJCQkgIDppZi1kb2VzLW5vdC1leGlzdAkJICAgOnByZXR0eQorc3luIGtleXdvcmQgbGlzcEtleQkJIDpiYXNlCQkJCSAgOmlmLWV4aXN0cwkJCSAgIDpwcmludAorc3luIGtleXdvcmQgbGlzcEtleQkJIDpjYXNlCQkJCSAgOmluY2x1ZGUJCQkgICA6cHJpbnQtZnVuY3Rpb24KK3N5biBrZXl3b3JkIGxpc3BLZXkJCSA6Y2lyY2xlCQkJICA6aW5kZXgJCQkgICA6cHJvYmUKK3N5biBrZXl3b3JkIGxpc3BLZXkJCSA6Y29uYy1uYW1lCQkJICA6aW5oZXJpdGVkCQkJICAgOnJhZGl4CitzeW4ga2V5d29yZCBsaXNwS2V5CQkgOmNvbnN0cnVjdG9yCQkJICA6aW5pdGlhbC1jb250ZW50cwkJICAgOnJlYWQtb25seQorc3luIGtleXdvcmQgbGlzcEtleQkJIDpjb3BpZXIJCQkgIDppbml0aWFsLWVsZW1lbnQJCSAgIDpyZWhhc2gtc2l6ZQorc3luIGtleXdvcmQgbGlzcEtleQkJIDpjb3VudAkJCQkgIDppbml0aWFsLW9mZnNldAkJICAgOnJlaGFzaC10aHJlc2hvbGQKK3N5biBrZXl3b3JkIGxpc3BLZXkJCSA6Y3JlYXRlCQkJICA6aW5pdGlhbC12YWx1ZQkJICAgOnJlbmFtZQorc3luIGtleXdvcmQgbGlzcEtleQkJIDpkZWZhdWx0CQkJICA6aW5wdXQJCQkgICA6cmVuYW1lLWFuZC1kZWxldGUKK3N5biBrZXl3b3JkIGxpc3BLZXkJCSA6ZGVmYXVsdHMJCQkgIDppbnRlcm5hbAkJCSAgIDpzaXplCitzeW4ga2V5d29yZCBsaXNwS2V5CQkgOmRldmljZQkJCSAgOmlvCQkJCSAgIDpzdGFydAorc3luIGtleXdvcmQgbGlzcEtleQkJIDpkaXJlY3Rpb24JCQkgIDpqdW5rLWFsbG93ZWQJCQkgICA6c3RhcnQxCitzeW4ga2V5d29yZCBsaXNwS2V5CQkgOmRpcmVjdG9yeQkJCSAgOmtleQkJCQkgICA6c3RhcnQyCitzeW4ga2V5d29yZCBsaXNwS2V5CQkgOmRpc3BsYWNlZC1pbmRleC1vZmZzZXQJICA6bGVuZ3RoCQkJICAgOnN0cmVhbQorc3luIGtleXdvcmQgbGlzcEtleQkJIDpkaXNwbGFjZWQtdG8JCQkgIDpsZXZlbAkJCSAgIDpzdXBlcnNlZGUKK3N5biBrZXl3b3JkIGxpc3BLZXkJCSA6ZWxlbWVudC10eXBlCQkJICA6bmFtZQkJCQkgICA6dGVzdAorc3luIGtleXdvcmQgbGlzcEtleQkJIDplbmQJCQkJICA6bmFtZWQJCQkgICA6dGVzdC1ub3QKK3N5biBrZXl3b3JkIGxpc3BLZXkJCSA6ZW5kMQkJCQkgIDpuZXctdmVyc2lvbgkJCSAgIDp0eXBlCitzeW4ga2V5d29yZCBsaXNwS2V5CQkgOmVuZDIJCQkJICA6bmlja25hbWVzCQkJICAgOnVzZQorc3luIGtleXdvcmQgbGlzcEtleQkJIDplcnJvcgkJCQkgIDpvdXRwdXQJCQkgICA6dmVyYm9zZQorc3luIGtleXdvcmQgbGlzcEtleQkJIDplc2NhcGUJCQkgIDpvdXRwdXQtZmlsZQkJCSAgIDp2ZXJzaW9uCitzeW4ga2V5d29yZCBsaXNwS2V5CQkgOmV4dGVybmFsCisKKyIgU3RhbmRhcmQgTGlzcCBWYXJpYWJsZXMKK3N5biBrZXl3b3JkIGxpc3BWYXIJCSAqYXBwbHlob29rKgkJCSAgKmxvYWQtcGF0aG5hbWUqCQkgICAqcHJpbnQtcHByaW50LWRpc3BhdGNoKgorc3luIGtleXdvcmQgbGlzcFZhcgkJICpicmVhay1vbi1zaWduYWxzKgkJICAqbG9hZC1wcmludCoJCQkgICAqcHJpbnQtcHByaW50LWRpc3BhdGNoKgorc3luIGtleXdvcmQgbGlzcFZhcgkJICpicmVhay1vbi1zaWduYWxzKgkJICAqbG9hZC10cnVlbmFtZSoJCSAgICpwcmludC1wcmV0dHkqCitzeW4ga2V5d29yZCBsaXNwVmFyCQkgKmJyZWFrLW9uLXdhcm5pbmdzKgkJICAqbG9hZC12ZXJib3NlKgkJICAgKnByaW50LXJhZGl4Kgorc3luIGtleXdvcmQgbGlzcFZhcgkJICpjb21waWxlLWZpbGUtcGF0aG5hbWUqCSAgKm1hY3JvZXhwYW5kLWhvb2sqCQkgICAqcHJpbnQtcmVhZGFibHkqCitzeW4ga2V5d29yZCBsaXNwVmFyCQkgKmNvbXBpbGUtZmlsZS1wYXRobmFtZSoJICAqbW9kdWxlcyoJCQkgICAqcHJpbnQtcmlnaHQtbWFyZ2luKgorc3luIGtleXdvcmQgbGlzcFZhcgkJICpjb21waWxlLWZpbGUtdHJ1ZW5hbWUqCSAgKnBhY2thZ2UqCQkJICAgKnByaW50LXJpZ2h0LW1hcmdpbioKK3N5biBrZXl3b3JkIGxpc3BWYXIJCSAqY29tcGlsZS1maWxlLXRydWVuYW1lKgkgICpwcmludC1hcnJheSoJCQkgICAqcXVlcnktaW8qCitzeW4ga2V5d29yZCBsaXNwVmFyCQkgKmNvbXBpbGUtcHJpbnQqCQkgICpwcmludC1iYXNlKgkJCSAgICpyYW5kb20tc3RhdGUqCitzeW4ga2V5d29yZCBsaXNwVmFyCQkgKmNvbXBpbGUtdmVyYm9zZSoJCSAgKnByaW50LWNhc2UqCQkJICAgKnJlYWQtYmFzZSoKK3N5biBrZXl3b3JkIGxpc3BWYXIJCSAqY29tcGlsZS12ZXJib3NlKgkJICAqcHJpbnQtY2lyY2xlKgkJICAgKnJlYWQtZGVmYXVsdC1mbG9hdC1mb3JtYXQqCitzeW4ga2V5d29yZCBsaXNwVmFyCQkgKmRlYnVnLWlvKgkJCSAgKnByaW50LWVzY2FwZSoJCSAgICpyZWFkLWV2YWwqCitzeW4ga2V5d29yZCBsaXNwVmFyCQkgKmRlYnVnZ2VyLWhvb2sqCQkgICpwcmludC1nZW5zeW0qCQkgICAqcmVhZC1zdXBwcmVzcyoKK3N5biBrZXl3b3JkIGxpc3BWYXIJCSAqZGVmYXVsdC1wYXRobmFtZS1kZWZhdWx0cyoJICAqcHJpbnQtbGVuZ3RoKgkJICAgKnJlYWR0YWJsZSoKK3N5biBrZXl3b3JkIGxpc3BWYXIJCSAqZXJyb3Itb3V0cHV0KgkJCSAgKnByaW50LWxldmVsKgkJCSAgICpzdGFuZGFyZC1pbnB1dCoKK3N5biBrZXl3b3JkIGxpc3BWYXIJCSAqZXZhbGhvb2sqCQkJICAqcHJpbnQtbGluZXMqCQkJICAgKnN0YW5kYXJkLW91dHB1dCoKK3N5biBrZXl3b3JkIGxpc3BWYXIJCSAqZmVhdHVyZXMqCQkJICAqcHJpbnQtbWlzZXItd2lkdGgqCQkgICAqdGVybWluYWwtaW8qCitzeW4ga2V5d29yZCBsaXNwVmFyCQkgKmdlbnN5bS1jb3VudGVyKgkJICAqcHJpbnQtbWlzZXItd2lkdGgqCQkgICAqdHJhY2Utb3V0cHV0KgorCisiIFN0cmluZ3MKK3N5biByZWdpb24JCQkgbGlzcFN0cmluZwkJCSAgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKworaWYgZXhpc3RzKCJsaXNwX2luc3RyaW5nIikKKyBzeW4gcmVnaW9uCQkJIGxpc3BJblN0cmluZwkJCSAga2VlcGVuZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0rIigrcnM9cysxIHNraXA9K3wuXHstfXwrIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0rKSIrIGNvbnRhaW5zPUBsaXNwTGlzdENsdXN0ZXIsbGlzcEluU3RyaW5nU3RyaW5nCisgc3luIHJlZ2lvbgkJCSBsaXNwSW5TdHJpbmdTdHJpbmcJCSAgc3RhcnQ9K1xcIisgc2tpcD0rXFxcXCsgZW5kPStcXCIrIGNvbnRhaW5lZAorZW5kaWYKKworIiBTaGFyZWQgd2l0aCBYbGlzcCwgRGVjbGFyYXRpb25zLCBNYWNyb3MsIEZ1bmN0aW9ucworc3luIGtleXdvcmQgbGlzcERlY2wJCSBkZWZtYWNybwkJCSAgZG8tYWxsLXN5bWJvbHMJCSAgIGxhYmVscworc3luIGtleXdvcmQgbGlzcERlY2wJCSBkZWZzZXRmCQkJICBkby1leHRlcm5hbC1zeW1ib2xzCQkgICBsZXQKK3N5biBrZXl3b3JkIGxpc3BEZWNsCQkgZGVmdHlwZQkJCSAgZG8tc3ltYm9scwkJCSAgIGxvY2FsbHkKK3N5biBrZXl3b3JkIGxpc3BEZWNsCQkgZGVmdW4JCQkJICBkb3RpbWVzCQkJICAgbWFjcm9sZXQKK3N5biBrZXl3b3JkIGxpc3BEZWNsCQkgZG8qCQkJCSAgZmxldAkJCQkgICBtdWx0aXBsZS12YWx1ZS1iaW5kCisKKyIgTnVtYmVyczogc3VwcG9ydGluZyBpbnRlZ2VycyBhbmQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycworc3luIG1hdGNoIGxpc3BOdW1iZXIJCSAiLVw9XChcLlxkXCtcfFxkXCtcKFwuXGQqXClcPVwpXChlWy0rXVw9XGRcK1wpXD0iCisKK3N5biBtYXRjaCBsaXNwU3BlY2lhbAkJICJcKlthLXpBLVpfXVthLXpBLVpfMC05LV0qXCoiCitzeW4gbWF0Y2ggbGlzcFNwZWNpYWwJCSAhI3xbXigpJ2AsIjsgXHRdXCt8IyEKK3N5biBtYXRjaCBsaXNwU3BlY2lhbAkJICEjeFswLTlhLWZBLUZdXCshCitzeW4gbWF0Y2ggbGlzcFNwZWNpYWwJCSAhI29bMC03XVwrIQorc3luIG1hdGNoIGxpc3BTcGVjaWFsCQkgISNiWzAxXVwrIQorc3luIG1hdGNoIGxpc3BTcGVjaWFsCQkgISNcXFsgLVx+XSEKK3N5biBtYXRjaCBsaXNwU3BlY2lhbAkJICEjWyc6XVteKCknYCwiOyBcdF1cKyEKK3N5biBtYXRjaCBsaXNwU3BlY2lhbAkJICEjKFteKCknYCwiOyBcdF1cKykhCisKK3N5biBtYXRjaCBsaXNwQ29uY2F0CQkgIlxzXC5ccyIKK3N5biBtYXRjaCBsaXNwUGFyZW5FcnJvcgkgIikiCisKKyIgQ29tbWVudHMKK3N5biBjbHVzdGVyIGxpc3BDb21tZW50R3JvdXAJIGNvbnRhaW5zPWxpc3BUb2RvLEBTcGVsbAorc3luIG1hdGNoICAgbGlzcENvbW1lbnQJCSAiOy4qJCIJCQkJICBjb250YWlucz1AbGlzcENvbW1lbnRHcm91cAorc3luIHJlZ2lvbiAgbGlzcENvbW1lbnRSZWdpb24JIHN0YXJ0PSIjfCIgZW5kPSJ8IyIJCSAgY29udGFpbnM9bGlzcENvbW1lbnRSZWdpb24sQGxpc3BDb21tZW50R3JvdXAKK3N5biBjYXNlIGlnbm9yZQorc3luIGtleXdvcmQgbGlzcFRvZG8JCSBjb250YWluZWQJCQkgIGNvbWJhawkJCSAgIGNvbWJhazoJCQkgICAgdG9kbwkJCSAgICAgdG9kbzoKK3N5biBjYXNlIG1hdGNoCisKKyIgc3luY2hyb25pemF0aW9uCitzeW4gc3luYyBsaW5lcz0xMDAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbGlzcF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9saXNwX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIGxpc3BDb21tZW50UmVnaW9uCSBsaXNwQ29tbWVudAorICBIaUxpbmsgbGlzcEF0b21ObWJyCQkgbGlzcE51bWJlcgorICBIaUxpbmsgbGlzcEF0b21NYXJrCQkgbGlzcE1hcmsKKyAgSGlMaW5rIGxpc3BJblN0cmluZ1N0cmluZwkgbGlzcFN0cmluZworCisgIEhpTGluayBsaXNwQXRvbQkJIElkZW50aWZpZXIKKyAgSGlMaW5rIGxpc3BBdG9tQmFyU3ltYm9sCSBTcGVjaWFsCisgIEhpTGluayBsaXNwQmFyU3ltYm9sCQkgU3BlY2lhbAorICBIaUxpbmsgbGlzcENvbW1lbnQJCSBDb21tZW50CisgIEhpTGluayBsaXNwQ29uY2F0CQkgU3RhdGVtZW50CisgIEhpTGluayBsaXNwRGVjbAkJIFN0YXRlbWVudAorICBIaUxpbmsgbGlzcEZ1bmMJCSBTdGF0ZW1lbnQKKyAgSGlMaW5rIGxpc3BLZXkJCSBUeXBlCisgIEhpTGluayBsaXNwTWFyawkJIERlbGltaXRlcgorICBIaUxpbmsgbGlzcE51bWJlcgkJIE51bWJlcgorICBIaUxpbmsgbGlzcFBhcmVuRXJyb3IJCSBFcnJvcgorICBIaUxpbmsgbGlzcFNwZWNpYWwJCSBUeXBlCisgIEhpTGluayBsaXNwU3RyaW5nCQkgU3RyaW5nCisgIEhpTGluayBsaXNwVG9kbwkJIFRvZG8KKyAgSGlMaW5rIGxpc3BWYXIJCSBTdGF0ZW1lbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibGlzcCIKKworIiB2aW06IHRzPTggbm93cmFwCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9saXRlLnZpbSBiL3J1bnRpbWUvc3ludGF4L2xpdGUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmM1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9saXRlLnZpbQpAQCAtMCwwICsxLDE4MSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CWxpdGUKKyIgTWFpbnRhaW5lcjoJTHV0eiBFeW1lcnMgPGl4dGFiQHBvbHppbi5jb20+CisiIFVSTDoJCWh0dHA6Ly93d3cuaXNwLmRlL2RhdGEvbGl0ZS52aW0KKyIgRW1haWw6CVN1YmplY3Q6IHNlbmQgc3ludGF4X3ZpbS50Z3oKKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWFpIDAxCisiCisiIE9wdGlvbnMJbGl0ZV9zcWxfcXVlcnkgPSAxIGZvciBTUUwgc3ludGF4IGhpZ2hsaWd0aGluZyBpbnNpZGUgc3RyaW5ncworIgkJbGl0ZV9taW5saW5lcyA9IHggICAgIHRvIHN5bmMgYXQgbGVhc3QgeCBsaW5lcyBiYWNrd2FyZHMKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitpZiAhZXhpc3RzKCJtYWluX3N5bnRheCIpCisgIGxldCBtYWluX3N5bnRheCA9ICdsaXRlJworZW5kaWYKKworaWYgbWFpbl9zeW50YXggPT0gJ2xpdGUnCisgIGlmIGV4aXN0cygibGl0ZV9zcWxfcXVlcnkiKQorICAgIGlmIGxpdGVfc3FsX3F1ZXJ5ID09IDEKKyAgICAgIHN5biBpbmNsdWRlIEBsaXRlU3FsIDxzZmlsZT46cDpoL3NxbC52aW0KKyAgICAgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKKyAgICBlbmRpZgorICBlbmRpZgorZW5kaWYKKworaWYgbWFpbl9zeW50YXggPT0gJ21zcWwnCisgIGlmIGV4aXN0cygibXNxbF9zcWxfcXVlcnkiKQorICAgIGlmIG1zcWxfc3FsX3F1ZXJ5ID09IDEKKyAgICAgIHN5biBpbmNsdWRlIEBsaXRlU3FsIDxzZmlsZT46cDpoL3NxbC52aW0KKyAgICAgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKKyAgICBlbmRpZgorICBlbmRpZgorZW5kaWYKKworc3luIGNsdXN0ZXIgbGl0ZVNxbCByZW1vdmU9c3FsU3RyaW5nLHNxbENvbW1lbnQKKworc3luIGNhc2UgbWF0Y2gKKworIiBJbnRlcm5hbCBWYXJpYWJsZXMKK3N5biBrZXl3b3JkIGxpdGVJbnRWYXIgRVJSTVNHIGNvbnRhaW5lZAorCisiIENvbW1lbnQKK3N5biByZWdpb24gbGl0ZUNvbW1lbnQJCXN0YXJ0PSIvXCoiIGVuZD0iXCovIiBjb250YWlucz1saXRlVG9kbworCisiIEZ1bmN0aW9uIG5hbWVzCitzeW4ga2V5d29yZCBsaXRlRnVuY3Rpb25zICBlY2hvIHByaW50ZiBmcHJpbnRmIG9wZW4gY2xvc2UgcmVhZAorc3luIGtleXdvcmQgbGl0ZUZ1bmN0aW9ucyAgcmVhZGxuIHJlYWR0b2sKK3N5biBrZXl3b3JkIGxpdGVGdW5jdGlvbnMgIHNwbGl0IHN0cnNlZyBjaG9wIHRyIHN1YiBzdWJzdHIKK3N5biBrZXl3b3JkIGxpdGVGdW5jdGlvbnMgIHRlc3QgdW5saW5rIHVtYXNrIGNobW9kIG1rZGlyIGNoZGlyIHJtZGlyCitzeW4ga2V5d29yZCBsaXRlRnVuY3Rpb25zICByZW5hbWUgdHJ1bmNhdGUgbGluayBzeW1saW5rIHN0YXQKK3N5biBrZXl3b3JkIGxpdGVGdW5jdGlvbnMgIHNsZWVwIHN5c3RlbSBnZXRwaWQgZ2V0cHBpZCBraWxsCitzeW4ga2V5d29yZCBsaXRlRnVuY3Rpb25zICB0aW1lIGN0aW1lIHRpbWUydW5peHRpbWUgdW5peHRpbWUyeWVhcgorc3luIGtleXdvcmQgbGl0ZUZ1bmN0aW9ucyAgdW5peHRpbWUyeWVhciB1bml4dGltZTJtb250aCB1bml4dGltZTJkYXkKK3N5biBrZXl3b3JkIGxpdGVGdW5jdGlvbnMgIHVuaXh0aW1lMmhvdXIgdW5peHRpbWUybWluIHVuaXh0aW1lMnNlYworc3luIGtleXdvcmQgbGl0ZUZ1bmN0aW9ucyAgc3RyZnRpbWUKK3N5biBrZXl3b3JkIGxpdGVGdW5jdGlvbnMgIGdldHB3bmFtIGdldHB3dWlkCitzeW4ga2V5d29yZCBsaXRlRnVuY3Rpb25zICBnZXRob3N0YnluYW1lIGdldGhvc3RieWFkZHJlc3MKK3N5biBrZXl3b3JkIGxpdGVGdW5jdGlvbnMgIHVybEVuY29kZSBzZXRDb250ZW50VHlwZSBpbmNsdWRlRmlsZQorc3luIGtleXdvcmQgbGl0ZUZ1bmN0aW9ucyAgbXNxbENvbm5lY3QgbXNxbENsb3NlIG1zcWxTZWxlY3REQgorc3luIGtleXdvcmQgbGl0ZUZ1bmN0aW9ucyAgbXNxbFF1ZXJ5IG1zcWxTdG9yZVJlc3VsdCBtc3FsRnJlZVJlc3VsdAorc3luIGtleXdvcmQgbGl0ZUZ1bmN0aW9ucyAgbXNxbEZldGNoUm93IG1zcWxEYXRhU2VlayBtc3FsTGlzdERCcworc3luIGtleXdvcmQgbGl0ZUZ1bmN0aW9ucyAgbXNxbExpc3RUYWJsZXMgbXNxbEluaXRGaWVsZExpc3QgbXNxbExpc3RGaWVsZAorc3luIGtleXdvcmQgbGl0ZUZ1bmN0aW9ucyAgbXNxbEZpZWxkU2VlayBtc3FsTnVtUm93cyBtc3FsRW5jb2RlCitzeW4ga2V5d29yZCBsaXRlRnVuY3Rpb25zICBleGl0IGZhdGFsIHR5cGVvZgorc3luIGtleXdvcmQgbGl0ZUZ1bmN0aW9ucyAgY3J5cHQgYWRkSHR0cEhlYWRlcgorCisiIENvbmRpdGlvbmFsCitzeW4ga2V5d29yZCBsaXRlQ29uZGl0aW9uYWwgIGlmIGVsc2UKKworIiBSZXBlYXQKK3N5biBrZXl3b3JkIGxpdGVSZXBlYXQgIHdoaWxlCisKKyIgT3BlcmF0b3IKK3N5biBrZXl3b3JkIGxpdGVTdGF0ZW1lbnQgIGJyZWFrIHJldHVybiBjb250aW51ZQorCisiIE9wZXJhdG9yCitzeW4gbWF0Y2ggbGl0ZU9wZXJhdG9yICAiWy0rPSMqXSIKK3N5biBtYXRjaCBsaXRlT3BlcmF0b3IgICIvW14qXSJtZT1lLTEKK3N5biBtYXRjaCBsaXRlT3BlcmF0b3IgICJcJCIKK3N5biBtYXRjaCBsaXRlUmVsYXRpb24gICImJiIKK3N5biBtYXRjaCBsaXRlUmVsYXRpb24gICJ8fCIKK3N5biBtYXRjaCBsaXRlUmVsYXRpb24gICJbIT08Pl09Igorc3luIG1hdGNoIGxpdGVSZWxhdGlvbiAgIls8Pl0iCisKKyIgSWRlbnRpZmllcgorc3luIG1hdGNoICBsaXRlSWRlbnRpZmllciAiJFxoXHcqIiBjb250YWlucz1saXRlSW50VmFyLGxpdGVPcGVyYXRvcgorc3luIG1hdGNoICBsaXRlR2xvYmFsSWRlbnRpZmllciAiQFxoXHcqIiBjb250YWlucz1saXRlSW50VmFyCisKKyIgSW5jbHVkZQorc3luIGtleXdvcmQgbGl0ZUluY2x1ZGUgIGxvYWQKKworIiBEZWZpbmUKK3N5biBrZXl3b3JkIGxpdGVEZWZpbmUgIGZ1bmN0CisKKyIgVHlwZQorc3luIGtleXdvcmQgbGl0ZVR5cGUgIGludCB1aW50IGNoYXIgcmVhbAorCisiIFN0cmluZworc3luIHJlZ2lvbiBsaXRlU3RyaW5nICBrZWVwZW5kIG1hdGNoZ3JvdXA9Tm9uZSBzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisgY29udGFpbnM9bGl0ZUlkZW50aWZpZXIsbGl0ZVNwZWNpYWxDaGFyLEBsaXRlU3FsCisKKyIgTnVtYmVyCitzeW4gbWF0Y2ggbGl0ZU51bWJlciAgIi1cPVw8XGRcK1w+IgorCisiIEZsb2F0CitzeW4gbWF0Y2ggbGl0ZUZsb2F0ICAiXCgtXD1cPFxkK1x8LVw9XClcLlxkXCtcPiIKKworIiBTcGVjaWFsQ2hhcgorc3luIG1hdGNoIGxpdGVTcGVjaWFsQ2hhciAiXFxbYWJjZm5ydHZcXF0iIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggbGl0ZVBhcmVudEVycm9yICJbKX1cXV0iCisKKyIgVG9kbworc3luIGtleXdvcmQgbGl0ZVRvZG8gVE9ETyBUb2RvIHRvZG8gY29udGFpbmVkCisKKyIgZG9udCBzeW4gIyEuLi4KK3N5biBtYXRjaCBsaXRlRXhlYyAiXiMhLiokIgorCisiIFBhcmVudHMKK3N5biBjbHVzdGVyIGxpdGVJbnNpZGUgY29udGFpbnM9bGl0ZUNvbW1lbnQsbGl0ZUZ1bmN0aW9ucyxsaXRlSWRlbnRpZmllcixsaXRlR2xvYmFsSWRlbnRpZmllcixsaXRlQ29uZGl0aW9uYWwsbGl0ZVJlcGVhdCxsaXRlU3RhdGVtZW50LGxpdGVPcGVyYXRvcixsaXRlUmVsYXRpb24sbGl0ZVR5cGUsbGl0ZVN0cmluZyxsaXRlTnVtYmVyLGxpdGVGbG9hdCxsaXRlUGFyZW50CisKK3N5biByZWdpb24gbGl0ZVBhcmVudCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iKCIgZW5kPSIpIiBjb250YWlucz1AbGl0ZUluc2lkZQorc3luIHJlZ2lvbiBsaXRlUGFyZW50IG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJ7IiBlbmQ9In0iIGNvbnRhaW5zPUBsaXRlSW5zaWRlCitzeW4gcmVnaW9uIGxpdGVQYXJlbnQgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IlxbIiBlbmQ9IlxdIiBjb250YWlucz1AbGl0ZUluc2lkZQorCisiIHN5bmMKK2lmIG1haW5fc3ludGF4ID09ICdsaXRlJworICBpZiBleGlzdHMoImxpdGVfbWlubGluZXMiKQorICAgIGV4ZWMgInN5biBzeW5jIG1pbmxpbmVzPSIgLiBsaXRlX21pbmxpbmVzCisgIGVsc2UKKyAgICBzeW4gc3luYyBtaW5saW5lcz0xMDAKKyAgZW5kaWYKK2VuZGlmCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2xpdGVfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbGl0ZV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBsaXRlQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgbGl0ZVN0cmluZwkJU3RyaW5nCisgIEhpTGluayBsaXRlTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIGxpdGVGbG9hdAkJRmxvYXQKKyAgSGlMaW5rIGxpdGVJZGVudGlmaWVyCUlkZW50aWZpZXIKKyAgSGlMaW5rIGxpdGVHbG9iYWxJZGVudGlmaWVyCUlkZW50aWZpZXIKKyAgSGlMaW5rIGxpdGVJbnRWYXIJCUlkZW50aWZpZXIKKyAgSGlMaW5rIGxpdGVGdW5jdGlvbnMJCUZ1bmN0aW9uCisgIEhpTGluayBsaXRlUmVwZWF0CQlSZXBlYXQKKyAgSGlMaW5rIGxpdGVDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgbGl0ZVN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBsaXRlVHlwZQkJVHlwZQorICBIaUxpbmsgbGl0ZUluY2x1ZGUJCUluY2x1ZGUKKyAgSGlMaW5rIGxpdGVEZWZpbmUJCURlZmluZQorICBIaUxpbmsgbGl0ZVNwZWNpYWxDaGFyCVNwZWNpYWxDaGFyCisgIEhpTGluayBsaXRlUGFyZW50RXJyb3IJbGl0ZUVycm9yCisgIEhpTGluayBsaXRlRXJyb3IJCUVycm9yCisgIEhpTGluayBsaXRlVG9kbwkJVG9kbworICBIaUxpbmsgbGl0ZU9wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgbGl0ZVJlbGF0aW9uCQlPcGVyYXRvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJsaXRlIgorCitpZiBtYWluX3N5bnRheCA9PSAnbGl0ZScKKyAgdW5sZXQgbWFpbl9zeW50YXgKK2VuZGlmCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9sb2d0YWxrLnZpbSBiL3J1bnRpbWUvc3ludGF4L2xvZ3RhbGsudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MjE4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9sb2d0YWxrLnZpbQpAQCAtMCwwICsxLDQyOCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIKKyIgTGFuZ3VhZ2U6CUxvZ3RhbGsKKyIgTWFpbnRhaW5lcjoJUGF1bG8gTW91cmEgPHBtb3VyYUBsb2d0YWxrLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDE2CisKKworIiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQ6CisKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworCisiIExvZ3RhbGsgaXMgY2FzZSBzZW5zaXRpdmU6CisKK3N5biBjYXNlIG1hdGNoCisKKworIiBMb2d0YWxrIHZhcmlhYmxlcworCitzeW4gbWF0Y2ggICBsb2d0YWxrVmFyaWFibGUJCSJcPFwoXHVcfF9cKVwoXHdcKSpcPiIKKworCisiIExvZ3RhbGsgY2xhdXNlIGZ1bmN0b3IKKworc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIjotIgorCisKKyIgTG9ndGFsayBxdW90ZWQgYXRvbXMgYW5kIHN0cmluZ3MKKworc3luIHJlZ2lvbglsb2d0YWxrU3RyaW5nCQlzdGFydD0rIisJc2tpcD0rXFwiKwllbmQ9KyIrCitzeW4gcmVnaW9uCWxvZ3RhbGtBdG9tCQlzdGFydD0rJysJc2tpcD0rXFwnKwllbmQ9KycrCisKKworIiBMb2d0YWxrIG1lc3NhZ2Ugc2VuZGluZyBvcGVyYXRvcnMKKworc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIjo6Igorc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIlxeXF4iCisKKworIiBMb2d0YWxrIGV4dGVybmFsIGNhbGwKKworc3luIHJlZ2lvbglsb2d0YWxrRXh0Q2FsbAkJbWF0Y2hncm91cD1sb2d0YWxrRXh0Q2FsbFRhZwkJc3RhcnQ9InsiCQltYXRjaGdyb3VwPWxvZ3RhbGtFeHRDYWxsVGFnCQllbmQ9In0iCQljb250YWlucz1BTEwKKworCisiIExvZ3RhbGsgb3BlbmluZyBlbnRpdHkgZGlyZWN0aXZlcworCitzeW4gcmVnaW9uCWxvZ3RhbGtPcGVuRW50aXR5RGlyCW1hdGNoZ3JvdXA9bG9ndGFsa09wZW5FbnRpdHlEaXJUYWcJc3RhcnQ9IjotIG9iamVjdCgiCW1hdGNoZ3JvdXA9bG9ndGFsa09wZW5FbnRpdHlEaXJUYWcJZW5kPSIpXC4iCWNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbglsb2d0YWxrT3BlbkVudGl0eURpcgltYXRjaGdyb3VwPWxvZ3RhbGtPcGVuRW50aXR5RGlyVGFnCXN0YXJ0PSI6LSBwcm90b2NvbCgiCW1hdGNoZ3JvdXA9bG9ndGFsa09wZW5FbnRpdHlEaXJUYWcJZW5kPSIpXC4iCWNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbglsb2d0YWxrT3BlbkVudGl0eURpcgltYXRjaGdyb3VwPWxvZ3RhbGtPcGVuRW50aXR5RGlyVGFnCXN0YXJ0PSI6LSBjYXRlZ29yeSgiCW1hdGNoZ3JvdXA9bG9ndGFsa09wZW5FbnRpdHlEaXJUYWcJZW5kPSIpXC4iCWNvbnRhaW5zPUFMTAorCisKKyIgTG9ndGFsayBjbG9zaW5nIGVudGl0eSBkaXJlY3RpdmVzCisKK3N5biBtYXRjaAlsb2d0YWxrQ2xvc2VFbnRpdHlEaXIJIjotIGVuZF9vYmplY3RcLiIKK3N5biBtYXRjaAlsb2d0YWxrQ2xvc2VFbnRpdHlEaXIJIjotIGVuZF9wcm90b2NvbFwuIgorc3luIG1hdGNoCWxvZ3RhbGtDbG9zZUVudGl0eURpcgkiOi0gZW5kX2NhdGVnb3J5XC4iCisKKworIiBMb2d0YWxrIGVudGl0eSByZWxhdGlvbnMKKworc3luIHJlZ2lvbglsb2d0YWxrRW50aXR5UmVsCW1hdGNoZ3JvdXA9bG9ndGFsa0VudGl0eVJlbFRhZwlzdGFydD0iaW5zdGFudGlhdGVzKCIJbWF0Y2hncm91cD1sb2d0YWxrRW50aXR5UmVsVGFnCWVuZD0iKSIJCWNvbnRhaW5zPWxvZ3RhbGtFbnRpdHkJCWNvbnRhaW5lZAorc3luIHJlZ2lvbglsb2d0YWxrRW50aXR5UmVsCW1hdGNoZ3JvdXA9bG9ndGFsa0VudGl0eVJlbFRhZwlzdGFydD0ic3BlY2lhbGl6ZXMoIgltYXRjaGdyb3VwPWxvZ3RhbGtFbnRpdHlSZWxUYWcJZW5kPSIpIgkJY29udGFpbnM9bG9ndGFsa0VudGl0eQkJY29udGFpbmVkCitzeW4gcmVnaW9uCWxvZ3RhbGtFbnRpdHlSZWwJbWF0Y2hncm91cD1sb2d0YWxrRW50aXR5UmVsVGFnCXN0YXJ0PSJleHRlbmRzKCIJbWF0Y2hncm91cD1sb2d0YWxrRW50aXR5UmVsVGFnCWVuZD0iKSIJCWNvbnRhaW5zPWxvZ3RhbGtFbnRpdHkJCWNvbnRhaW5lZAorc3luIHJlZ2lvbglsb2d0YWxrRW50aXR5UmVsCW1hdGNoZ3JvdXA9bG9ndGFsa0VudGl0eVJlbFRhZwlzdGFydD0iaW1wb3J0cygiCW1hdGNoZ3JvdXA9bG9ndGFsa0VudGl0eVJlbFRhZwllbmQ9IikiCQljb250YWlucz1sb2d0YWxrRW50aXR5CQljb250YWluZWQKK3N5biByZWdpb24JbG9ndGFsa0VudGl0eVJlbAltYXRjaGdyb3VwPWxvZ3RhbGtFbnRpdHlSZWxUYWcJc3RhcnQ9ImltcGxlbWVudHMoIgltYXRjaGdyb3VwPWxvZ3RhbGtFbnRpdHlSZWxUYWcJZW5kPSIpIgkJY29udGFpbnM9bG9ndGFsa0VudGl0eQkJY29udGFpbmVkCisKKworIiBMb2d0YWxrIGRpcmVjdGl2ZXMKKworc3luIHJlZ2lvbglsb2d0YWxrRGlyCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJc3RhcnQ9IjotIGluaXRpYWxpemF0aW9uKCIJbWF0Y2hncm91cD1sb2d0YWxrRGlyVGFnCWVuZD0iKVwuIgljb250YWlucz1BTEwKK3N5biByZWdpb24JbG9ndGFsa0RpcgkJbWF0Y2hncm91cD1sb2d0YWxrRGlyVGFnCXN0YXJ0PSI6LSBpbmZvKCIJCW1hdGNoZ3JvdXA9bG9ndGFsa0RpclRhZwllbmQ9IilcLiIJY29udGFpbnM9QUxMCitzeW4gcmVnaW9uCWxvZ3RhbGtEaXIJCW1hdGNoZ3JvdXA9bG9ndGFsa0RpclRhZwlzdGFydD0iOi0gbW9kZSgiCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJZW5kPSIpXC4iCWNvbnRhaW5zPWxvZ3RhbGtPcGVyYXRvcixsb2d0YWxrQXRvbQorc3luIHJlZ2lvbglsb2d0YWxrRGlyCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJc3RhcnQ9IjotIGR5bmFtaWMoIgkJbWF0Y2hncm91cD1sb2d0YWxrRGlyVGFnCWVuZD0iKVwuIgljb250YWlucz1BTEwKK3N5biBtYXRjaAlsb2d0YWxrRGlyVGFnCQkiOi0gZHluYW1pY1wuIgorc3luIHJlZ2lvbglsb2d0YWxrRGlyCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJc3RhcnQ9IjotIGRpc2NvbnRpZ3VvdXMoIgltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJZW5kPSIpXC4iCWNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbglsb2d0YWxrRGlyCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJc3RhcnQ9IjotIHB1YmxpYygiCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJZW5kPSIpXC4iCWNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbglsb2d0YWxrRGlyCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJc3RhcnQ9IjotIHByb3RlY3RlZCgiCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJZW5kPSIpXC4iCWNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbglsb2d0YWxrRGlyCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJc3RhcnQ9IjotIHByaXZhdGUoIgkJbWF0Y2hncm91cD1sb2d0YWxrRGlyVGFnCWVuZD0iKVwuIgljb250YWlucz1BTEwKK3N5biByZWdpb24JbG9ndGFsa0RpcgkJbWF0Y2hncm91cD1sb2d0YWxrRGlyVGFnCXN0YXJ0PSI6LSBtZXRhcHJlZGljYXRlKCIJbWF0Y2hncm91cD1sb2d0YWxrRGlyVGFnCWVuZD0iKVwuIgljb250YWlucz1BTEwKK3N5biByZWdpb24JbG9ndGFsa0RpcgkJbWF0Y2hncm91cD1sb2d0YWxrRGlyVGFnCXN0YXJ0PSI6LSBvcCgiCQkJbWF0Y2hncm91cD1sb2d0YWxrRGlyVGFnCWVuZD0iKVwuIgljb250YWlucz1BTEwKK3N5biByZWdpb24JbG9ndGFsa0RpcgkJbWF0Y2hncm91cD1sb2d0YWxrRGlyVGFnCXN0YXJ0PSI6LSBjYWxscygiCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJZW5kPSIpXC4iCWNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbglsb2d0YWxrRGlyCQltYXRjaGdyb3VwPWxvZ3RhbGtEaXJUYWcJc3RhcnQ9IjotIHVzZXMoIgkJbWF0Y2hncm91cD1sb2d0YWxrRGlyVGFnCWVuZD0iKVwuIgljb250YWlucz1BTEwKKworCisiIExvZ3RhbGsgYnVpbHQtaW4gcHJlZGljYXRlcworCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGN1cnJlbnRfb2JqZWN0XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbgkJIlw8Y3VycmVudF9wcm90b2NvbFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGN1cnJlbnRfY2F0ZWdvcnlcemUoIgorCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGNyZWF0ZV9vYmplY3RcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluCQkiXDxjcmVhdGVfcHJvdG9jb2xcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluCQkiXDxjcmVhdGVfY2F0ZWdvcnlcemUoIgorCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPG9iamVjdF9wcm9wZXJ0eVx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPHByb3RvY29sX3Byb3BlcnR5XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbgkJIlw8Y2F0ZWdvcnlfcHJvcGVydHlcemUoIgorCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGFib2xpc2hfb2JqZWN0XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbgkJIlw8YWJvbGlzaF9wcm90b2NvbFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGFib2xpc2hfY2F0ZWdvcnlcemUoIgorCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGV4dGVuZHNfb2JqZWN0XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbgkJIlw8ZXh0ZW5kc19wcm90b2NvbFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGltcGxlbWVudHNfcHJvdG9jb2xcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluCQkiXDxpbnN0YW50aWF0ZXNfY2xhc3NcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluCQkiXDxzcGVjaWFsaXplc19jbGFzc1x6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGltcG9ydHNfY2F0ZWdvcnlcemUoIgorCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGFib2xpc2hfZXZlbnRzXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbgkJIlw8Y3VycmVudF9ldmVudFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGRlZmluZV9ldmVudHNcemUoIgorCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW4JCSJcPGN1cnJlbnRfbG9ndGFsa19mbGFnXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbgkJIlw8c2V0X2xvZ3RhbGtfZmxhZ1x6ZSgiCisKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbgkJIlw8bG9ndGFsa19jb21waWxlXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbgkJIlw8bG9ndGFsa19sb2FkXHplKCIKKworc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluCQkiXDxmb3JhbGxcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluCQkiXDxyZXRyYWN0YWxsXHplKCIKKworCisiIExvZ3RhbGsgYnVpbHQtaW4gbWV0aG9kcworCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW5NZXRob2QJIlw8cGFyYW1ldGVyXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbk1ldGhvZAkiXDxzZWxmXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbk1ldGhvZAkiXDxzZW5kZXJcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluTWV0aG9kCSJcPHRoaXNcemUoIgorCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW5NZXRob2QJIlw8Y3VycmVudF9wcmVkaWNhdGVcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluTWV0aG9kCSJcPHByZWRpY2F0ZV9wcm9wZXJ0eVx6ZSgiCisKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbk1ldGhvZAkiXDxhYm9saXNoXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbk1ldGhvZAkiXDxhc3NlcnRhXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbk1ldGhvZAkiXDxhc3NlcnR6XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbk1ldGhvZAkiXDxjbGF1c2VcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluTWV0aG9kCSJcPHJldHJhY3RcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluTWV0aG9kCSJcPHJldHJhY3RhbGxcemUoIgorCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW5NZXRob2QJIlw8YmFnb2ZcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluTWV0aG9kCSJcPGZpbmRhbGxcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtCdWlsdEluTWV0aG9kCSJcPGZvcmFsbFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW5NZXRob2QJIlw8c2V0b2ZcemUoIgorCitzeW4gbWF0Y2gJbG9ndGFsa0J1aWx0SW5NZXRob2QJIlw8YmVmb3JlXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbk1ldGhvZAkiXDxhZnRlclx6ZSgiCisKK3N5biBtYXRjaAlsb2d0YWxrQnVpbHRJbk1ldGhvZAkiXDxwaHJhc2VcemUoIgorCisKKyIgTW9kZSBvcGVyYXRvcnMKKworc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIj8iCitzeW4gbWF0Y2gJbG9ndGFsa09wZXJhdG9yCQkiQCIKKworCisiIENvbnRyb2wgY29uc3RydWN0cworCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHRydWVcPiIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8ZmFpbFw+Igorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxjYWxsXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSIhIgorc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIiwiCitzeW4gbWF0Y2gJbG9ndGFsa09wZXJhdG9yCQkiOyIKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSItLT4iCitzeW4gbWF0Y2gJbG9ndGFsa09wZXJhdG9yCQkiLT4iCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGNhdGNoXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8dGhyb3dcemUoIgorCisKKyIgVGVybSB1bmlmaWNhdGlvbgorCitzeW4gbWF0Y2gJbG9ndGFsa09wZXJhdG9yCQkiPSIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8dW5pZnlfd2l0aF9vY2N1cnNfY2hlY2tcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIlxcPSIKKworCisiIFRlcm0gdGVzdGluZworCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHZhclx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGF0b21cemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxpbnRlZ2VyXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8ZmxvYXRcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxhdG9taWNcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxjb21wb3VuZFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPG5vbnZhclx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPG51bWJlclx6ZSgiCisKKworIiBUZXJtIGNvbXBhcmlzb24KKworc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIkA9PCIKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSI9PSIKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSJcXD09Igorc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIkA8Igorc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIkA+Igorc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIkA+PSIKKworCisiIFRlcm0gY3JlYXRpb24gYW5kIGRlY29tcG9zaXRpb24KKworc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxmdW5jdG9yXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8YXJnXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSI9XC5cLiIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8Y29weV90ZXJtXHplKCIKKworCisiIEFyaXRoZW10aWMgZXZhbHVhdGlvbgorCitzeW4ga2V5d29yZAlsb2d0YWxrT3BlcmF0b3IJCWlzCisKKworIiBBcml0aGVtdGljIGNvbXBhcmlzb24KKworc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIj06PSIKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSI9XFw9Igorc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIjwiCitzeW4gbWF0Y2gJbG9ndGFsa09wZXJhdG9yCQkiPTwiCitzeW4gbWF0Y2gJbG9ndGFsa09wZXJhdG9yCQkiPiIKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSI+PSIKKworCisiIFN0cmVhbSBzZWxlY3Rpb24gYW5kIGNvbnRyb2wKKworc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxjdXJyZW50X2lucHV0XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8Y3VycmVudF9vdXRwdXRcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxzZXRfaW5wdXRcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxzZXRfb3V0cHV0XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8b3Blblx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGNsb3NlXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8Zmx1c2hfb3V0cHV0XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8Zmx1c2hfb3V0cHV0XD4iCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHN0cmVhbV9wcm9wZXJ0eVx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGF0X2VuZF9vZl9zdHJlYW1cemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxhdF9lbmRfb2Zfc3RyZWFtXD4iCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHNldF9zdHJlYW1fcG9zaXRpb25cemUoIgorCisKKyIgQ2hhcmFjdGVyIGlucHV0L291dHB1dAorCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGdldF9jaGFyXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8Z2V0X2NvZGVcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxwZWVrX2NoYXJcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxwZWVrX2NvZGVcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxwdXRfY2hhclx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHB1dF9jb2RlXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8bmxcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxubFw+IgorCisKKyIgQnl0ZSBpbnB1dC9vdXRwdXQKKworc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxnZXRfYnl0ZVx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHBlZWtfYnl0ZVx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHB1dF9ieXRlXHplKCIKKworCisiIFRlcm0gaW5wdXQvb3V0cHV0CisKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8cmVhZF90ZXJtXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8cmVhZFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHdyaXRlX3Rlcm1cemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDx3cml0ZVx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHdyaXRlcVx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHdyaXRlX2Nhbm9uaWNhbFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPG9wXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8Y3VycmVudF9vcFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGNoYXJfY29udmVyc2lvblx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGN1cnJlbnRfY2hhcl9jb252ZXJzaW9uXHplKCIKKworCisiIExvZ2ljIGFuZCBjb250cm9sCisKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSJcXCsiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPG9uY2VcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxyZXBlYXRcPiIKKworCisiIEF0b21pYyB0ZXJtIHByb2Nlc3NpbmcKKworc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxhdG9tX2xlbmd0aFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGF0b21fY29uY2F0XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8c3ViX2F0b21cemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxhdG9tX2NoYXJzXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8YXRvbV9jb2Rlc1x6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGNoYXJfY29kZVx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPG51bWJlcl9jaGFyc1x6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPG51bWJlcl9jb2Rlc1x6ZSgiCisKKworIiBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGhvb2tzIGZ1bmN0aW9ucworCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHNldF9wcm9sb2dfZmxhZ1x6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGN1cnJlbnRfcHJvbG9nX2ZsYWdcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxoYWx0XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8aGFsdFw+IgorCisKKyIgRXZhbHVhYmxlIGZ1bmN0b3JzCisKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSIrIgorc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIi0iCitzeW4gbWF0Y2gJbG9ndGFsa09wZXJhdG9yCQkiXCoiCitzeW4gbWF0Y2gJbG9ndGFsa09wZXJhdG9yCQkiLy8iCitzeW4gbWF0Y2gJbG9ndGFsa09wZXJhdG9yCQkiLyIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8cmVtKD89WyhdKSIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8cmVtXD4iCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPG1vZFx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPG1vZFw+Igorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxhYnNcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxzaWduXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8ZmxvYXRfaW50ZWdlcl9wYXJ0XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8ZmxvYXRfZnJhY3Rpb25hbF9wYXJ0XHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8ZmxvYXRcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxmbG9vclx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHRydW5jYXRlXHplKCIKK3N5biBtYXRjaAlsb2d0YWxrS2V5d29yZAkJIlw8cm91bmRcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxjZWlsaW5nXHplKCIKKworCisiIE90aGVyIGFyaXRoZW10aWMgZnVuY3RvcnMKKworc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIlwqXCoiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPHNpblx6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGNvc1x6ZSgiCitzeW4gbWF0Y2gJbG9ndGFsa0tleXdvcmQJCSJcPGF0YW5cemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxleHBcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxsb2dcemUoIgorc3luIG1hdGNoCWxvZ3RhbGtLZXl3b3JkCQkiXDxzcXJ0XHplKCIKKworCisiIEJpdHdpc2UgZnVuY3RvcnMKKworc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIj4+Igorc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIjw8Igorc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIi9cXCIKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSJcXC8iCitzeW4gbWF0Y2gJbG9ndGFsa09wZXJhdG9yCQkiXFwiCisKKworIiBMb2d0YWxrIGVuZC1vZi1jbGF1c2UKKworc3luIG1hdGNoCWxvZ3RhbGtPcGVyYXRvcgkJIlwuIgorCisKKyIgTG9ndGFsayBsaXN0IG9wZXJhdG9yCisKK3N5biBtYXRjaAlsb2d0YWxrT3BlcmF0b3IJCSJ8IgorCisKKyIgTG9ndGFsayBjb21tZW50cworCitzeW4gcmVnaW9uCWxvZ3RhbGtCbG9ja0NvbW1lbnQJc3RhcnQ9Ii9cKiIJZW5kPSJcKi8iCitzeW4gbWF0Y2gJbG9ndGFsa0xpbmVDb21tZW50CSIlLioiCisKKworIiBMb2d0YWxrIG51bWJlcnMKKworc3luIG1hdGNoCWxvZ3RhbGtOdW1iZXIJCSJcPFswLTldXCtcPiIKK3N5biBtYXRjaAlsb2d0YWxrTnVtYmVyCQkiXDxbMC05XVwrXC5bMC05XVwrXD4iCitzeW4gbWF0Y2gJbG9ndGFsa051bWJlcgkJIlw8WzAtOV1cK1wuWzAtOV1cK1tlRV1bLStdWzAtOV0rXD4iCitzeW4gbWF0Y2gJbG9ndGFsa051bWJlcgkJIlw8MCdbMC05YS16QS1aXVw+Igorc3luIG1hdGNoCWxvZ3RhbGtOdW1iZXIJCSJcPDBiWzAtMV1cK1w+Igorc3luIG1hdGNoCWxvZ3RhbGtOdW1iZXIJCSJcPDBvWzAtN11cK1w+Igorc3luIG1hdGNoCWxvZ3RhbGtOdW1iZXIJCSJcPDB4WzAtOWEtZkEtRl1cK1w+IgorCisKK3N5biBzeW5jIGNjb21tZW50IG1heGxpbmVzPTUwCisKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9sb2d0YWxrX3N5bl9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX2xvZ3RhbGtfc3luX2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluawlsb2d0YWxrQmxvY2tDb21tZW50CUNvbW1lbnQKKwlIaUxpbmsJbG9ndGFsa0xpbmVDb21tZW50CUNvbW1lbnQKKworCUhpTGluawlsb2d0YWxrT3BlbkVudGl0eURpcglOb3JtYWwKKwlIaUxpbmsJbG9ndGFsa09wZW5FbnRpdHlEaXJUYWcJUHJlUHJvYworCisJSGlMaW5rCWxvZ3RhbGtFbnRpdHkJCU5vcm1hbAorCisJSGlMaW5rCWxvZ3RhbGtFbnRpdHlSZWwJTm9ybWFsCisJSGlMaW5rCWxvZ3RhbGtFbnRpdHlSZWxUYWcJUHJlUHJvYworCisJSGlMaW5rCWxvZ3RhbGtDbG9zZUVudGl0eURpcglQcmVQcm9jCisKKwlIaUxpbmsJbG9ndGFsa0RpcgkJTm9ybWFsCisJSGlMaW5rCWxvZ3RhbGtEaXJUYWcJCVByZVByb2MKKworCUhpTGluawlsb2d0YWxrQXRvbQkJU3RyaW5nCisJSGlMaW5rCWxvZ3RhbGtTdHJpbmcJCVN0cmluZworCisJSGlMaW5rCWxvZ3RhbGtOdW1iZXIJCU51bWJlcgorCisJSGlMaW5rCWxvZ3RhbGtLZXl3b3JkCQlLZXl3b3JkCisKKwlIaUxpbmsJbG9ndGFsa0J1aWx0SW4JCUtleXdvcmQKKwlIaUxpbmsJbG9ndGFsa0J1aWx0SW5NZXRob2QJS2V5d29yZAorCisJSGlMaW5rCWxvZ3RhbGtPcGVyYXRvcgkJT3BlcmF0b3IKKworCUhpTGluawlsb2d0YWxrRXh0Q2FsbAkJTm9ybWFsCisJSGlMaW5rCWxvZ3RhbGtFeHRDYWxsVGFnCU9wZXJhdG9yCisKKwlIaUxpbmsJbG9ndGFsa1ZhcmlhYmxlCQlJZGVudGlmaWVyCisKKwlkZWxjb21tYW5kIEhpTGluaworCitlbmRpZgorCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImxvZ3RhbGsiCisKK3NldGxvY2FsIHRzPTQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2xvdG9zLnZpbSBiL3J1bnRpbWUvc3ludGF4L2xvdG9zLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2Q4M2M0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbG90b3MudmltCkBAIC0wLDAgKzEsODIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglMT1RPUyAoTGFuZ3VhZ2UgT2YgVGVtcG9yYWwgT3JkZXJpbmcgU3BlY2lmaWNhdGlvbnMsIElTODgwNykKKyIgTWFpbnRhaW5lcjoJRGFuaWVsIEFteW90IDxkYW15b3RAY3NpLnVvdHRhd2EuY2E+CisiIExhc3QgQ2hhbmdlOglXZWQgQXVnIDE5IDE5OTgKKyIgVVJMOgkJaHR0cDovL2xvdG9zLmNzaS51b3R0YXdhLmNhL35kYW15b3QvdmltL2xvdG9zLnZpbQorIiBUaGlzIGZpbGUgaXMgYW4gYWRhcHRhdGlvbiBvZiBwYXNjYWwudmltIGJ5IE1hcmlvIEV1c2ViaW8KKyIgSSdtIG5vdCBzdXJlIEkgdW5kZXJzdGFuZCBhbGwgb2YgdGhlIHN5bnRheCBoaWdobGlnaHQgbGFuZ3VhZ2UsCisiIGJ1dCB0aGlzIGZpbGUgc2VlbXMgdG8gZG8gdGhlIGpvYiBmb3Igc3RhbmRhcmQgTE9UT1MuCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyJDb21tZW50cyBpbiBMT1RPUyBhcmUgYmV0d2VlbiAoKiBhbmQgKikKK3N5biByZWdpb24gbG90b3NDb21tZW50CXN0YXJ0PSIoXCoiICBlbmQ9IlwqKSIgY29udGFpbnM9bG90b3NUb2RvCisKKyJPcGVyYXRvcnMgW10sIFsuLi5dLCA+PiwgLT4sIHx8fCwgfFsuLi5dfCwgfHwsIDssICEsID8sIDosID0sICwsIDo9CitzeW4gbWF0Y2ggIGxvdG9zRGVsaW1pdGVyICAgICAgICJbXVtdIgorc3luIG1hdGNoICBsb3Rvc0RlbGltaXRlcgkiPj4iCitzeW4gbWF0Y2ggIGxvdG9zRGVsaW1pdGVyCSItPiIKK3N5biBtYXRjaCAgbG90b3NEZWxpbWl0ZXIJIlxbPiIKK3N5biBtYXRjaCAgbG90b3NEZWxpbWl0ZXIJIlt8OyE/Oj0sXSIKKworIlJlZ3VsYXIga2V5d29yZHMKK3N5biBrZXl3b3JkIGxvdG9zU3RhdGVtZW50CXNwZWNpZmljYXRpb24gZW5kc3BlYyBwcm9jZXNzIGVuZHByb2MKK3N5biBrZXl3b3JkIGxvdG9zU3RhdGVtZW50CXdoZXJlIGJlaGF2aW91ciBiZWhhdmlvcgorc3luIGtleXdvcmQgbG90b3NTdGF0ZW1lbnQgICAgICBhbnkgbGV0IHBhciBhY2NlcHQgY2hvaWNlIGhpZGUgb2YgaW4KK3N5biBrZXl3b3JkIGxvdG9zU3RhdGVtZW50CWkgc3RvcCBleGl0IG5vZXhpdAorCisiT3BlcmF0b3JzIGZyb20gdGhlIEFic3RyYWN0IERhdGEgVHlwZXMgaW4gSVM4ODA3CitzeW4ga2V5d29yZCBsb3Rvc09wZXJhdG9yCWVxIG5lIHN1Y2MgYW5kIG9yIHhvciBpbXBsaWVzIGlmZgorc3luIGtleXdvcmQgbG90b3NPcGVyYXRvcglub3QgdHJ1ZSBmYWxzZQorc3luIGtleXdvcmQgbG90b3NPcGVyYXRvcglJbnNlcnQgUmVtb3ZlIElzSW4gTm90SW4gVW5pb24gSW50cworc3luIGtleXdvcmQgbG90b3NPcGVyYXRvcglNaW51cyBJbmNsdWRlcyBJc1N1YnNldE9mCitzeW4ga2V5d29yZCBsb3Rvc09wZXJhdG9yCWx0IGxlIGdlIGd0IDAKKworIlNvcnRzIGluIElTODgwNworc3luIGtleXdvcmQgbG90b3NTb3J0CQlCb29sZWFuIEJvb2wgRkJvb2xlYW4gRkJvb2wgRWxlbWVudAorc3luIGtleXdvcmQgbG90b3NTb3J0CQlTZXQgU3RyaW5nIE5hdHVyYWxOdW1iZXIgTmF0IEhleFN0cmluZworc3luIGtleXdvcmQgbG90b3NTb3J0CQlIZXhEaWdpdCBEZWNTdHJpbmcgRGVjRGlnaXQKK3N5biBrZXl3b3JkIGxvdG9zU29ydAkJT2N0U3RyaW5nIE9jdERpZ2l0IEJpdFN0cmluZyBCaXQKK3N5biBrZXl3b3JkIGxvdG9zU29ydAkJT2N0ZXQgT2N0ZXRTdHJpbmcKKworIktleXdvcmRzIGZvciBBRFRzCitzeW4ga2V5d29yZCBsb3Rvc1R5cGUJdHlwZSBlbmR0eXBlIGxpYnJhcnkgZW5kbGliIHNvcnRzIGZvcm1hbHNvcnRzCitzeW4ga2V5d29yZCBsb3Rvc1R5cGUJZXFucyBmb3JtYWxlcW5zIG9wbnMgZm9ybWFsb3BucyBmb3JhbGwgb2Zzb3J0IGlzCitzeW4ga2V5d29yZCBsb3Rvc1R5cGUgICBmb3IgcmVuYW1lZGJ5IGFjdHVhbGl6ZWRieSBzb3J0bmFtZXMgb3BubmFtZXMKK3N5biBrZXl3b3JkIGxvdG9zVHlwZSAgIHVzaW5nCisKK3N5biBzeW5jIGxpbmVzPTI1MAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9sb3Rvc19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9sb3Rvc19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBsb3Rvc1N0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBsb3Rvc1Byb2Nlc3MJCUxhYmVsCisgIEhpTGluayBsb3Rvc09wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgbG90b3NTb3J0CQlGdW5jdGlvbgorICBIaUxpbmsgbG90b3NUeXBlCQlUeXBlCisgIEhpTGluayBsb3Rvc0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGxvdG9zRGVsaW1pdGVyCQlTdHJpbmcKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibG90b3MiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9sb3V0LnZpbSBiL3J1bnRpbWUvc3ludGF4L2xvdXQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGNiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9sb3V0LnZpbQpAQCAtMCwwICsxLDEzOSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgIExvdXQKKyIgTWFpbnRhaW5lcjogIENocmlzdGlhbiBWLiBKLiBCcvxzc293IDxjdmpiQGN2amIuZGU+CisiIExhc3QgQ2hhbmdlOiBTb24gMjIgSnVuIDIwMDMgMjA6NDM6MjYgQ0VTVAorIiBGaWxlbmFtZXM6ICAgKi5sb3V0LCoubHQKKyIgVVJMOgkJCWh0dHA6Ly93d3cuY3ZqYi5kZS9jb21wL3ZpbS9sb3V0LnZpbQorIiAkSWQkCisiCisiIExvdXQ6IEJhc3NlciBMb3V0IGRvY3VtZW50IGZvcm1hdHRpbmcgc3lzdGVtLgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorCXN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisJZmluaXNoCitlbmRpZgorCisiIExvdXQgaXMgY2FzZSBzZW5zaXRpdmUKK3N5biBjYXNlIG1hdGNoCisKKyIgU3luY2hyb25pemF0aW9uLCBJIGtub3cgaXQgaXMgYSBodWdlIG51bWJlciwgYnV0IG5vcm1hbCB0ZXh0cyBjYW4gYmUKKyIgX3ZlcnlfIGxvbmcgOy0pCitzeW4gc3luYyBsaW5lcz0xMDAwCisKKyIgQ2hhcmFjdGVycyBhbGxvd2VkIGluIGtleXdvcmRzCisiIEkgZG9uJ3Qga25vdyBpZiAxMjgtMjU1IGFyZSBhbGxvd2VkIGluIEFOUy1GT1JIVAoraWYgdmVyc2lvbiA+PSA2MDAKKwlzZXRsb2NhbCBpc2tleXdvcmQ9QCw0OC01NywuLEAtQCxfLDE5Mi0yNTUKK2Vsc2UKKwlzZXQgaXNrZXl3b3JkPUAsNDgtNTcsLixALUAsXywxOTItMjU1CitlbmRpZgorCisiIFNvbWUgc3BlY2lhbCBrZXl3b3Jkcworc3luIGtleXdvcmQgbG91dFRvZG8gY29udGFpbmVkIFRPRE8gbG91dCBMb3V0IExPVVQKK3N5biBrZXl3b3JkIGxvdXREZWZpbmUgZGVmIG1hY3JvCisKKyIgU29tZSBiaWcgc3RydWN0dXJlcworc3luIGtleXdvcmQgbG91dEtleXdvcmQgQEJlZ2luIEBFbmQgQEZpZ3VyZSBAVGFiCitzeW4ga2V5d29yZCBsb3V0S2V5d29yZCBAQm9vayBARG9jIEBEb2N1bWVudCBAUmVwb3J0CitzeW4ga2V5d29yZCBsb3V0S2V5d29yZCBASW50cm9kdWN0aW9uIEBBYnN0cmFjdCBAQXBwZW5kaXgKK3N5biBrZXl3b3JkIGxvdXRLZXl3b3JkIEBDaGFwdGVyIEBTZWN0aW9uIEBCZWdpblNlY3Rpb25zIEBFbmRTZWN0aW9ucworCisiIEFsbCBraW5kIG9mIExvdXQga2V5d29yZHMKK3N5biBtYXRjaCBsb3V0RnVuY3Rpb24gJ1w8QFteIFx0e31dXCtcPicKKworIiBCcmFjZXMgLS0gRG9uYHQgZWRpdCB0aGVzZSBsaW5lcyEKK3N5biBtYXRjaCBsb3V0TUJyYWNlcyAnW3t9XScKK3N5biBtYXRjaCBsb3V0SUJyYWNlcyAnW3t9XScKK3N5biBtYXRjaCBsb3V0QkJyYWNlICdbe31dJworc3luIG1hdGNoIGxvdXRCSUJyYWNlcyAnW3t9XScKK3N5biBtYXRjaCBsb3V0SGVhZHMgJ1t7fV0nCisKKyIgVW5tYXRjaGVkIGJyYWNlcy4KK3N5biBtYXRjaCBsb3V0QnJhY2VFcnJvciAnfScKKworIiBFbmQgb2YgbXVsdGktbGluZSBkZWZpbml0aW9ucywgbGlrZSBARG9jdW1lbnQsIEBSZXBvcnQgYW5kIEBCb29rLgorc3luIG1hdGNoIGxvdXRFT21sRGVmICdeLy8kJworCisiIEdyb3VwaW5nIG9mIHBhcmFtZXRlcnMgYW5kIG9iamVjdHMuCitzeW4gcmVnaW9uIGxvdXRPYmplY3QgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9J3snIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0nfScgY29udGFpbnM9QUxMQlVULGxvdXRCcmFjZUVycm9yCisKKyIgVGhlIE5VTEwgb2JqZWN0IGhhcyBhIHNwZWNpYWwgbWVhbmluZworc3luIGtleXdvcmQgbG91dE5VTEwge30KKworIiBDb21tZW50cworc3luIHJlZ2lvbiBsb3V0Q29tbWVudCBzdGFydD0nXCMnIGVuZD0nJCcgY29udGFpbnM9bG91dFRvZG8KKworIiBEb3VibGUgcXVvdGVzCitzeW4gcmVnaW9uIGxvdXRTcGVjaWFsIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisKKworIiBJU08tTEFUSU4tMSBjaGFyYWN0ZXJzIGNyZWF0ZWQgd2l0aCBAQ2hhciwgb3IgQWRvYmUgc3ltYm9scworIiBjcmVhdGVkIHdpdGggQFN5bQorc3luIG1hdGNoIGxvdXRTeW1ib2xzICdAXChcKENoYXJcKVx8XChTeW1cKVwpXHNcK1tBLVphLXpdXCsnCisKKyIgSW5jbHVkZSBmaWxlcworc3luIG1hdGNoIGxvdXRJbmNsdWRlICdASW5jbHVkZUdyYXBoaWNcc1wrXGtcKycKK3N5biByZWdpb24gbG91dEluY2x1ZGUgc3RhcnQ9J0BcKFwoU3lzSW5jbHVkZVwpXHxcKEluY2x1ZGVHcmFwaGljXClcfFwoSW5jbHVkZVwpXClccyp7JyBlbmQ9J30nCisKKyIgVGFncworc3luIG1hdGNoIGxvdXRUYWcgJ0BcKFwoVGFnXClcfFwoUGFnZU1hcmtcKVx8XChQYWdlT2ZcKVx8XChOdW1iZXJPZlwpXClcc1wrXGtcKycKK3N5biByZWdpb24gbG91dFRhZyBzdGFydD0nQFRhZ1xzKnsnIGVuZD0nfScKKworIiBFcXVhdGlvbnMKK3N5biBtYXRjaCBsb3V0TWF0aCAnQEVxXHNcK1xrXCsnCitzeW4gcmVnaW9uIGxvdXRNYXRoIG1hdGNoZ3JvdXA9bG91dE1CcmFjZXMgc3RhcnQ9J0BFcVxzKnsnIG1hdGNoZ3JvdXA9bG91dE1CcmFjZXMgZW5kPSd9JyBjb250YWlucz1BTExCVVQsbG91dEJyYWNlRXJyb3IKKyIKKyIgRm9udHMKK3N5biBtYXRjaCBsb3V0SXRhbGljICdASVxzXCtca1wrJworc3luIHJlZ2lvbiBsb3V0SXRhbGljIG1hdGNoZ3JvdXA9bG91dElCcmFjZXMgc3RhcnQ9J0BJXHMqeycgbWF0Y2hncm91cD1sb3V0SUJyYWNlcyBlbmQ9J30nIGNvbnRhaW5zPUFMTEJVVCxsb3V0QnJhY2VFcnJvcgorc3luIG1hdGNoIGxvdXRCb2xkICdAQlxzXCtca1wrJworc3luIHJlZ2lvbiBsb3V0Qm9sZCBtYXRjaGdyb3VwPWxvdXRCQnJhY2VzIHN0YXJ0PSdAQlxzKnsnIG1hdGNoZ3JvdXA9bG91dEJCcmFjZXMgZW5kPSd9JyBjb250YWlucz1BTExCVVQsbG91dEJyYWNlRXJyb3IKK3N5biBtYXRjaCBsb3V0Qm9sZEl0YWxpYyAnQEJJXHNcK1xrXCsnCitzeW4gcmVnaW9uIGxvdXRCb2xkSXRhbGljIG1hdGNoZ3JvdXA9bG91dEJJQnJhY2VzIHN0YXJ0PSdAQklccyp7JyBtYXRjaGdyb3VwPWxvdXRCSUJyYWNlcyBlbmQ9J30nIGNvbnRhaW5zPUFMTEJVVCxsb3V0QnJhY2VFcnJvcgorc3luIHJlZ2lvbiBsb3V0SGVhZGluZ3MgbWF0Y2hncm91cD1sb3V0SGVhZHMgc3RhcnQ9J0BcKFwoVGl0bGVcKVx8XChDYXB0aW9uXClcKVxzKnsnIG1hdGNoZ3JvdXA9bG91dEhlYWRzIGVuZD0nfScgY29udGFpbnM9QUxMQlVULGxvdXRCcmFjZUVycm9yCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2xvdXRfc3luX2luaXRzIikKKwlpZiB2ZXJzaW9uIDwgNTA4CisJCWxldCBkaWRfbG91dF9zeW5faW5pdHMgPSAxCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisJZWxzZQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKwllbmRpZgorCisJIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuIENhbiBiZSBvdmVycnJpZGVuIGxhdGVyLgorCUhpTGluayBsb3V0VG9kbyBUb2RvCisJSGlMaW5rIGxvdXREZWZpbmUgRGVmaW5lCisJSGlMaW5rIGxvdXRFT21sRGVmIERlZmluZQorCUhpTGluayBsb3V0RnVuY3Rpb24gRnVuY3Rpb24KKwlIaUxpbmsgbG91dEJyYWNlRXJyb3IgRXJyb3IKKwlIaUxpbmsgbG91dE5VTEwgU3BlY2lhbAorCUhpTGluayBsb3V0Q29tbWVudCBDb21tZW50CisJSGlMaW5rIGxvdXRTcGVjaWFsIFNwZWNpYWwKKwlIaUxpbmsgbG91dFN5bWJvbHMgQ2hhcmFjdGVyCisJSGlMaW5rIGxvdXRJbmNsdWRlIEluY2x1ZGUKKwlIaUxpbmsgbG91dEtleXdvcmQgS2V5d29yZAorCUhpTGluayBsb3V0VGFnIFRhZworCUhpTGluayBsb3V0TWF0aCBOdW1iZXIKKworCSIgSGlMaW5rIE5vdCByZWFsbHkgbmVlZGVkIGhlcmUsIGJ1dCBJIHRoaW5rIGl0IGlzIG1vcmUgY29uc2lzdGVudC4KKwlIaUxpbmsgbG91dE1CcmFjZXMgbG91dE1hdGgKKwloaSBsb3V0SXRhbGljIHRlcm09aXRhbGljIGN0ZXJtPWl0YWxpYyBndWk9aXRhbGljCisJSGlMaW5rIGxvdXRJQnJhY2VzIGxvdXRJdGFsaWMKKwloaSBsb3V0Qm9sZCB0ZXJtPWJvbGQgY3Rlcm09Ym9sZCBndWk9Ym9sZAorCUhpTGluayBsb3V0QkJyYWNlcyBsb3V0Qm9sZAorCWhpIGxvdXRCb2xkSXRhbGljIHRlcm09Ym9sZCxpdGFsaWMgY3Rlcm09Ym9sZCxpdGFsaWMgZ3VpPWJvbGQsaXRhbGljCisJSGlMaW5rIGxvdXRCSUJyYWNlcyBsb3V0Qm9sZEl0YWxpYworCWhpIGxvdXRIZWFkaW5ncyB0ZXJtPWJvbGQgY3Rlcm09Ym9sZCBndWlmZz1pbmRpYW5yZWQKKwlIaUxpbmsgbG91dEhlYWRzIGxvdXRIZWFkaW5ncworCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImxvdXQiCisKKyIgdmltOnRzPTg6c3c9NDpub2NpbmRlbnQ6c21hcnRpbmRlbnQ6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9scGMudmltIGIvcnVudGltZS9zeW50YXgvbHBjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjY1YzFhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbHBjLnZpbQpAQCAtMCwwICsxLDQ1NSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUxQQworIiBNYWludGFpbmVyOglTaGl6aHUgUGFuIDxwb2V0QG11ZGJ1aWxkZXIubmV0PgorIiBVUkw6CQlodHRwOi8vcG9ldC50b211ZC5jb20vcHViL2xwYy52aW0uYnoyCisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAxMQorIiBDb21tZW50czoJSWYgeW91IGFyZSB1c2luZyBWaW0gNi4yIG9yIGxhdGVyLCBzZWUgOmggbHBjLnZpbSBmb3IKKyIJCWZpbGUgdHlwZSByZWNvZ25pemluZywgaWYgbm90LCB5b3UgaGFkIHRvIHVzZSBtb2RlbGluZS4KKworCisiIE5vZHVsZTogVGhpcyBpcyB0aGUgc3RhcnQgbm9kdWxlLiB7e3sxCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBOb2R1bGU6IEtleXdvcmRzIHt7ezEKKworIiBMUEMga2V5d29yZHMKKyIga2V5d29yZHMgc2hvdWxkIGFsd2F5cyBiZSBoaWdobGlnaHRlZCBzbyAiY29udGFpbmVkIiBpcyBub3QgdXNlZC4KK3N5biBjbHVzdGVyCWxwY0tleXdkR3JwCWNvbnRhaW5zPWxwY0NvbmRpdGlvbmFsLGxwY0xhYmVsLGxwY09wZXJhdG9yLGxwY1JlcGVhdCxscGNTdGF0ZW1lbnQsbHBjTW9kaWZpZXIsbHBjUmVzZXJ2ZWQKKworc3luIGtleXdvcmQJbHBjQ29uZGl0aW9uYWwJaWYgZWxzZSBzd2l0Y2gKK3N5biBrZXl3b3JkCWxwY0xhYmVsCWNhc2UgZGVmYXVsdAorc3luIGtleXdvcmQJbHBjT3BlcmF0b3IJY2F0Y2ggZWZ1biBpbiBpbmhlcml0CitzeW4ga2V5d29yZAlscGNSZXBlYXQJZG8gZm9yIGZvcmVhY2ggd2hpbGUKK3N5biBrZXl3b3JkCWxwY1N0YXRlbWVudAlicmVhayBjb250aW51ZSByZXR1cm4KKworc3luIG1hdGNoCWxwY0VmdW5FcnJvcgkvZWZ1blteOl0vIGRpc3BsYXkKKworIiBJbGxlZ2FsIHRvIHVzZSBrZXl3b3JkIGFzIGZ1bmN0aW9uCisiIEl0J3Mgbm90IHdvcmtpbmcsIG1heWJlIGluIHRoZSBuZXh0IHZlcnNpb24uCitzeW4ga2V5d29yZAlscGNLZXl3ZEVycm9yCWNvbnRhaW5lZCBpZiBmb3IgZm9yZWFjaCByZXR1cm4gc3dpdGNoIHdoaWxlCisKKyIgVGhlc2UgYXJlIGtleXdvcmRzIG9ubHkgYmVjYXVzZSB0aGV5IHRha2UgbHZhbHVlIG9yIHR5cGUgYXMgcGFyYW1ldGVyLAorIiBzbyB0aGVzZSBrZXl3b3JkcyBzaG91bGQgb25seSBiZSB1c2VkIGFzIGZ1bmN0aW9uIGJ1dCBjYW5ub3QgYmUgbmFtZXMgb2YKKyIgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4KK3N5biBrZXl3b3JkCWxwY0tleXdkRnVuYwluZXcgcGFyc2VfY29tbWFuZCBzc2NhbmYgdGltZV9leHByZXNzaW9uCisKKyIgTm9kdWxlOiBUeXBlIGFuZCBtb2RpZmllcnMge3t7MQorCisiIFR5cGUgbmFtZXMgbGlzdC4KKworIiBTcGVjaWFsIHR5cGVzCitzeW4ga2V5d29yZAlscGNUeXBlCQl2b2lkIG1peGVkIHVua25vd24KKyIgU2NhbGFyL1ZhbHVlIHR5cGVzLgorc3luIGtleXdvcmQJbHBjVHlwZQkJaW50IGZsb2F0IHN0cmluZworIiBQb2ludGVyIHR5cGVzLgorc3luIGtleXdvcmQJbHBjVHlwZQkJYXJyYXkgYnVmZmVyIGNsYXNzIGZ1bmN0aW9uIG1hcHBpbmcgb2JqZWN0CisiIE90aGVyIHR5cGVzLgoraWYgZXhpc3RzKCJscGNfY29tcGF0XzMyIikKKyAgICBzeW4ga2V5d29yZCAgICAgbHBjVHlwZQkgICAgY2xvc3VyZSBzdGF0dXMgZnVuY2FsbAorZWxzZQorICAgIHN5biBrZXl3b3JkICAgICBscGNFcnJvcgkgICAgY2xvc3VyZSBzdGF0dXMKKyAgICBzeW4ga2V5d29yZCAgICAgbHBjVHlwZQkgICAgbXVsdGlzZXQKK2VuZGlmCisKKyIgVHlwZSBtb2RpZmllci4KK3N5biBrZXl3b3JkCWxwY01vZGlmaWVyCW5vbWFzayBwcml2YXRlIHB1YmxpYworc3luIGtleXdvcmQJbHBjTW9kaWZpZXIJdmFyYXJncyB2aXJ0dWFsCisKKyIgc2Vuc2libGUgbW9kaWZpZXJzCitpZiBleGlzdHMoImxwY19wcmVfdjIyIikKKyAgICBzeW4ga2V5d29yZAlscGNSZXNlcnZlZAlub3NhdmUgcHJvdGVjdGVkIHJlZgorICAgIHN5biBrZXl3b3JkCWxwY01vZGlmaWVyCXN0YXRpYworZWxzZQorICAgIHN5biBrZXl3b3JkCWxwY0Vycm9yCXN0YXRpYworICAgIHN5biBrZXl3b3JkCWxwY01vZGlmaWVyCW5vc2F2ZSBwcm90ZWN0ZWQgcmVmCitlbmRpZgorCisiIE5vZHVsZTogQXBwbGllcyB7e3sxCisKKyIgTWF0Y2ggYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBvciBmdW5jdGlvbiBwb2ludGVyCitzeW4gbWF0Y2gJbHBjQXBwbHlEZWNsCWV4Y2x1ZGVubCAvLT5caFx3KigvbWU9ZS0xIGNvbnRhaW5zPWxwY0FwcGxpZXMgdHJhbnNwYXJlbnQgZGlzcGxheQorCisiIFdlIHNob3VsZCBub3RlIHRoYXQgaW4gZnVuY19zcGVjLmMgdGhlIGVmdW4gZGVmaW5pdGlvbiBzeW50YXggaXMgc28KKyIgY29tcGxpY2F0ZWQgdGhhdCBJIHVzZSBzdWNoIGEgbG9uZyByZWd1bGFyIGV4cHJlc3Npb24gdG8gZGVzY3JpYmUuCitzeW4gbWF0Y2gJbHBjTG9uZ0RlY2wJZXhjbHVkZW5sIC9cKFxzXHxcKlwpXGhcK1xzXGhcKygvbWU9ZS0xIGNvbnRhaW5zPUBscGNFZnVuR3JvdXAsbHBjVHlwZSxAbHBjS2V5d2RHcnAgdHJhbnNwYXJlbnQgZGlzcGxheQorCisiIHRoaXMgaXMgZm9ybSBmb3IgYWxsIGZ1bmN0aW9ucworIiAtPmZvbygpIGZvcm0gaGFkIGJlZW4gZXhjbHVkZWQKK3N5biBtYXRjaAlscGNGdW5jRGVjbAlleGNsdWRlbmwgL1xoXHcqKC9tZT1lLTEgY29udGFpbnM9bHBjQXBwbGllcyxAbHBjRWZ1bkdyb3VwLGxwY0tleXdkRXJyb3IgdHJhbnNwYXJlbnQgZGlzcGxheQorCisiIFRoZSAoOiA6KSBwYXJlbnRoZXNpcyBvciAkKCkgZm9ybXMgYSBmdW5jdGlvbiBwb2ludGVyCitzeW4gbWF0Y2gJbHBjRnVuY05hbWUJLyg6XHMqXGhcK1xzKjopL21lPWUtMSBjb250YWlucz1scGNBcHBsaWVzLEBscGNFZnVuR3JvdXAgdHJhbnNwYXJlbnQgZGlzcGxheSBjb250YWluZWQKK3N5biBtYXRjaAlscGNGdW5jTmFtZQkvKDpccypcaFwrLC8gY29udGFpbnM9bHBjQXBwbGllcyxAbHBjRWZ1bkdyb3VwIHRyYW5zcGFyZW50IGRpc3BsYXkgY29udGFpbmVkCitzeW4gbWF0Y2gJbHBjRnVuY05hbWUJL1wkKFxoXCspLyBjb250YWlucz1scGNBcHBsaWVzLEBscGNFZnVuR3JvdXAgdHJhbnNwYXJlbnQgZGlzcGxheSBjb250YWluZWQKKworIiBBcHBsaWVzIGxpc3QuCisiICAgICAgIHN5c3RlbSBhcHBsaWVzCitzeW4ga2V5d29yZCAgICAgbHBjQXBwbGllcyAgICAgIGNvbnRhaW5lZCBfX0lOSVQgY2xlYW5fdXAgY3JlYXRlIGRlc3RydWN0b3IgaGVhcnRfYmVhdCBpZCBpbml0IG1vdmVfb3JfZGVzdHJ1Y3QgcmVzZXQKKyIgICAgICAgaW50ZXJhY3RpdmUKK3N5biBrZXl3b3JkICAgICBscGNBcHBsaWVzICAgICAgY29udGFpbmVkIGNhdGNoX3RlbGwgbG9nb24gbmV0X2RlYWQgcHJvY2Vzc19pbnB1dCByZWNlaXZlX21lc3NhZ2UgcmVjZWl2ZV9zbm9vcCB0ZWxuZXRfc3Vib3B0aW9uIHRlcm1pbmFsX3R5cGUgd2luZG93X3NpemUgd3JpdGVfcHJvbXB0CisiICAgICAgIG1hc3RlciBhcHBsaWVzCitzeW4ga2V5d29yZCAgICAgbHBjQXBwbGllcyAgICAgIGNvbnRhaW5lZCBhdXRob3JfZmlsZSBjb21waWxlX29iamVjdCBjb25uZWN0IGNyYXNoIGNyZWF0b3JfZmlsZSBkb21haW5fZmlsZSBlcGlsb2cgZXJyb3JfaGFuZGxlciBmbGFnIGdldF9iYl91aWQgZ2V0X3Jvb3RfdWlkIGdldF9zYXZlX2ZpbGVfbmFtZSBsb2dfZXJyb3IgbWFrZV9wYXRoX2Fic29sdXRlIG9iamVjdF9uYW1lIHByZWxvYWQgcHJpdnNfZmlsZSByZXRyaWV2ZV9lZF9zZXR1cCBzYXZlX2VkX3NldHVwIHNsb3dfc2h1dGRvd24KK3N5biBrZXl3b3JkICAgICBscGNBcHBsaWVzICAgICAgY29udGFpbmVkIHZhbGlkX2FzbSB2YWxpZF9iaW5kIHZhbGlkX2NvbXBpbGVfdG9fYyB2YWxpZF9kYXRhYmFzZSB2YWxpZF9oaWRlIHZhbGlkX2xpbmsgdmFsaWRfb2JqZWN0IHZhbGlkX292ZXJyaWRlIHZhbGlkX3JlYWQgdmFsaWRfc2F2ZV9iaW5hcnkgdmFsaWRfc2V0ZXVpZCB2YWxpZF9zaGFkb3cgdmFsaWRfc29ja2V0IHZhbGlkX3dyaXRlCisiICAgICAgIHBhcnNpbmcKK3N5biBrZXl3b3JkICAgICBscGNBcHBsaWVzICAgICAgY29udGFpbmVkIGludmVudG9yeV9hY2Nlc3NpYmxlIGludmVudG9yeV92aXNpYmxlIGlzX2xpdmluZyBwYXJzZV9jb21tYW5kX2FkamVjdGl2X2lkX2xpc3QgcGFyc2VfY29tbWFuZF9hZGplY3RpdmVfaWRfbGlzdCBwYXJzZV9jb21tYW5kX2FsbF93b3JkIHBhcnNlX2NvbW1hbmRfaWRfbGlzdCBwYXJzZV9jb21tYW5kX3BsdXJhbF9pZF9saXN0IHBhcnNlX2NvbW1hbmRfcHJlcG9zX2xpc3QgcGFyc2VfY29tbWFuZF91c2VycyBwYXJzZV9nZXRfZW52aXJvbm1lbnQgcGFyc2VfZ2V0X2ZpcnN0X2ludmVudG9yeSBwYXJzZV9nZXRfbmV4dF9pbnZlbnRvcnkgcGFyc2VyX2Vycm9yX21lc3NhZ2UKKworCisiIE5vZHVsZTogRWZ1bnMge3t7MQorCitzeW4gY2x1c3RlcglscGNFZnVuR3JvdXAJY29udGFpbnM9bHBjX2VmdW5zLGxwY09sZEVmdW5zLGxwY05ld0VmdW5zLGxwY0tleXdkRnVuYworCisiIENvbXBhdDMyIGVmdW5zCitpZiBleGlzdHMoImxwY19jb21wYXRfMzIiKQorICAgIHN5biBrZXl3b3JkIGxwY19lZnVucwljb250YWluZWQgY2xvc3VyZXAgaGVhcnRfYmVhdF9pbmZvIG1fZGVsZXRlIG1fdmFsdWVzIG1faW5kaWNlcyBxdWVyeV9vbmNlX2ludGVyYWN0aXZlIHN0cnN0cgorZWxzZQorICAgIHN5biBtYXRjaCAgIGxwY0VyckZ1bmMJLyNgXGhcdyovCisgICAgIiBTaGVsbCBjb21wYXRpYmxlIGZpcnN0IGxpbmUgY29tbWVudC4KKyAgICBzeW4gcmVnaW9uCWxwY0NvbW1lbnRGdW5jCXN0YXJ0PS9eIyEvIGVuZD0vJC8KK2VuZGlmCisKKyIgcHJlLXYyMiBlZnVucyB3aGljaCBhcmUgcmVtb3ZlZCBpbiBuZXdlciB2ZXJzaW9ucy4KK3N5biBrZXl3b3JkICAgICBscGNPbGRFZnVucyAgICAgY29udGFpbmVkIHRhaWwgZHVtcF9zb2NrZXRfc3RhdHVzCisKKyIgbmV3IGVmdW5zIGFmdGVyIHYyMiBzaG91bGQgYmUgYWRkZWQgaGVyZSEKK3N5biBrZXl3b3JkICAgICBscGNOZXdFZnVucyAgICAgY29udGFpbmVkIHNvY2tldF9zdGF0dXMKKworIiBMUEMgZWZ1bnMgbGlzdC4KKyIgREVCVUcgZWZ1bnMgTm90IGluY2x1ZGVkLgorIiBOZXcgZWZ1bnMgc2hvdWxkIE5PVCBiZSBhZGRlZCB0byB0aGlzIGxpc3QsIHNlZSB2MjIgZWZ1bnMgYWJvdmUuCisiIEVmdW5zIGxpc3Qge3t7Mgorc3luIGtleXdvcmQgICAgIGxwY19lZnVucyAgICAgICBjb250YWluZWQgYWNvcyBhZGRfYWN0aW9uIGFsbF9pbnZlbnRvcnkgYWxsX3ByZXZpb3VzX29iamVjdHMgYWxsb2NhdGUgYWxsb2NhdGVfYnVmZmVyIGFsbG9jYXRlX21hcHBpbmcgYXBwbHkgYXJyYXlwIGFzaW4gYXRhbiBhdXRob3Jfc3RhdHMKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIGJpbmQgYnJlYWtfc3RyaW5nIGJ1ZmZlcnAKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIGNhY2hlX3N0YXRzIGNhbGxfb3RoZXIgY2FsbF9vdXQgY2FsbF9vdXRfaW5mbyBjYWxsX3N0YWNrIGNhcGl0YWxpemUgY2F0Y2ggY2VpbCBjaGVja19tZW1vcnkgY2hpbGRyZW4gY2xhc3NwIGNsZWFyX2JpdCBjbG9uZV9vYmplY3QgY2xvbmVwIGNvbW1hbmQgY29tbWFuZHMgY29weSBjb3MgY3AgY3JjMzIgY3J5cHQgY3RpbWUKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIGRiX2Nsb3NlIGRiX2NvbW1pdCBkYl9jb25uZWN0IGRiX2V4ZWMgZGJfZmV0Y2ggZGJfcm9sbGJhY2sgZGJfc3RhdHVzIGRlYnVnX2luZm8gZGVidWdtYWxsb2MgZGVidWdfbWVzc2FnZSBkZWVwX2luaGVyaXRfbGlzdCBkZWVwX2ludmVudG9yeSBkZXN0cnVjdCBkaXNhYmxlX2NvbW1hbmRzIGRpc2FibGVfd2l6YXJkIGRvbWFpbl9zdGF0cyBkdW1wYWxsb2JqIGR1bXBfZmlsZV9kZXNjcmlwdG9ycyBkdW1wX3Byb2cKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIGVhY2ggZWQgZWRfY21kIGVkX3N0YXJ0IGVuYWJsZV9jb21tYW5kcyBlbmFibGVfd2l6YXJkIGVudmlyb25tZW50IGVycm9yIGVycm9ycCBldmFsX2Nvc3QgZXZhbHVhdGUgZXhlYyBleHAgZXhwbG9kZSBleHBvcnRfdWlkIGV4dGVybmFsX3N0YXJ0CitzeW4ga2V5d29yZCAgICAgbHBjX2VmdW5zICAgICAgIGNvbnRhaW5lZCBmZXRjaF92YXJpYWJsZSBmaWxlX2xlbmd0aCBmaWxlX25hbWUgZmlsZV9zaXplIGZpbHRlciBmaWx0ZXJfYXJyYXkgZmlsdGVyX21hcHBpbmcgZmluZF9jYWxsX291dCBmaW5kX2xpdmluZyBmaW5kX29iamVjdCBmaW5kX3BsYXllciBmaXJzdF9pbnZlbnRvcnkgZmxvYXRwIGZsb29yIGZsdXNoX21lc3NhZ2VzIGZ1bmN0aW9uX2V4aXN0cyBmdW5jdGlvbl9vd25lciBmdW5jdGlvbl9wcm9maWxlIGZ1bmN0aW9ucCBmdW5jdGlvbnMKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIGdlbmVyYXRlX3NvdXJjZSBnZXRfY2hhciBnZXRfY29uZmlnIGdldF9kaXIgZ2V0ZXVpZCBnZXR1aWQKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIGhlYXJ0X2JlYXRzCitzeW4ga2V5d29yZCAgICAgbHBjX2VmdW5zICAgICAgIGNvbnRhaW5lZCBpZF9tYXRyaXggaW1wbG9kZSBpbl9lZGl0IGluX2lucHV0IGluaGVyaXRfbGlzdCBpbmhlcml0cyBpbnB1dF90byBpbnRlcmFjdGl2ZSBpbnRwCitzeW4ga2V5d29yZCAgICAgbHBjX2VmdW5zICAgICAgIGNvbnRhaW5lZCBrZXlzCitzeW4ga2V5d29yZCAgICAgbHBjX2VmdW5zICAgICAgIGNvbnRhaW5lZCBsaW5rIGxpdmluZyBsaXZpbmdzIGxvYWRfb2JqZWN0IGxvY2FsdGltZSBsb2cgbG9nMTAgbG9va2F0X3JvdGF0ZSBsb3dlcl9jYXNlIGxwY19pbmZvCitzeW4ga2V5d29yZCAgICAgbHBjX2VmdW5zICAgICAgIGNvbnRhaW5lZCBtYWxsb2NfY2hlY2sgbWFsbG9jX2RlYnVnIG1hbGxvY19zdGF0dXMgbWFwIG1hcF9hcnJheSBtYXBfZGVsZXRlIG1hcF9tYXBwaW5nIG1hcHAgbWFzdGVyIG1hdGNoX3BhdGggbWF4X2V2YWxfY29zdCBtZW1iZXJfYXJyYXkgbWVtb3J5X2luZm8gbWVtb3J5X3N1bW1hcnkgbWVzc2FnZSBta2RpciBtb25jb250cm9sIG1vdmVfb2JqZWN0IG11ZF9zdGF0dXMKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIG5hbWVkX2xpdmluZ3MgbmV0d29ya19zdGF0cyBuZXh0X2JpdCBuZXh0X2ludmVudG9yeSBub3RpZnlfZmFpbCBudWxscAorc3luIGtleXdvcmQgICAgIGxwY19lZnVucyAgICAgICBjb250YWluZWQgb2JqZWN0cCBvYmplY3RzIG9sZGNyeXB0IG9wY3Byb2Ygb3JpZ2luCitzeW4ga2V5d29yZCAgICAgbHBjX2VmdW5zICAgICAgIGNvbnRhaW5lZCBwYXJzZV9hZGRfcnVsZSBwYXJzZV9hZGRfc3lub255bSBwYXJzZV9jb21tYW5kIHBhcnNlX2R1bXAgcGFyc2VfaW5pdCBwYXJzZV9teV9ydWxlcyBwYXJzZV9yZWZyZXNoIHBhcnNlX3JlbW92ZSBwYXJzZV9zZW50ZW5jZSBwbHVyYWxpemUgcG9pbnRlcnAgcG93IHByZXNlbnQgcHJldmlvdXNfb2JqZWN0IHByaW50ZiBwcm9jZXNzX3N0cmluZyBwcm9jZXNzX3ZhbHVlIHByb2dyYW1faW5mbworc3luIGtleXdvcmQgICAgIGxwY19lZnVucyAgICAgICBjb250YWluZWQgcXVlcnlfZWRfbW9kZSBxdWVyeV9oZWFydF9iZWF0IHF1ZXJ5X2hvc3RfbmFtZSBxdWVyeV9pZGxlIHF1ZXJ5X2lwX25hbWUgcXVlcnlfaXBfbnVtYmVyIHF1ZXJ5X2lwX3BvcnQgcXVlcnlfbG9hZF9hdmVyYWdlIHF1ZXJ5X25vdGlmeV9mYWlsIHF1ZXJ5X3ByaXZzIHF1ZXJ5X3JlcGxhY2VkX3Byb2dyYW0gcXVlcnlfc2hhZG93aW5nIHF1ZXJ5X3Nub29wIHF1ZXJ5X3Nub29waW5nIHF1ZXJ5X3ZlcmIKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIHJhbmRvbSByZWFkX2J1ZmZlciByZWFkX2J5dGVzIHJlYWRfZmlsZSByZWNlaXZlIHJlY2xhaW1fb2JqZWN0cyByZWZzIHJlZ2V4cCByZWdfYXNzb2MgcmVsb2FkX29iamVjdCByZW1vdmVfYWN0aW9uIHJlbW92ZV9jYWxsX291dCByZW1vdmVfaW50ZXJhY3RpdmUgcmVtb3ZlX3NoYWRvdyByZW5hbWUgcmVwZWF0X3N0cmluZyByZXBsYWNlX3Byb2dyYW0gcmVwbGFjZV9zdHJpbmcgcmVwbGFjZWFibGUgcmVzZXRfZXZhbF9jb3N0IHJlc29sdmUgcmVzdG9yZV9vYmplY3QgcmVzdG9yZV92YXJpYWJsZSBybSBybWRpciByb3RhdGVfeCByb3RhdGVfeSByb3RhdGVfeiBydXNhZ2UKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIHNhdmVfb2JqZWN0IHNhdmVfdmFyaWFibGUgc2F5IHNjYWxlIHNldF9hdXRob3Igc2V0X2JpdCBzZXRfZXZhbF9saW1pdCBzZXRfaGVhcnRfYmVhdCBzZXRfaGlkZSBzZXRfbGlnaHQgc2V0X2xpdmluZ19uYW1lIHNldF9tYWxsb2NfbWFzayBzZXRfcHJpdnMgc2V0X3Jlc2V0IHNldF90aGlzX3BsYXllciBzZXRfdGhpc191c2VyIHNldGV1aWQgc2hhZG93IHNoYWxsb3dfaW5oZXJpdF9saXN0IHNob3V0IHNodXRkb3duIHNpbiBzaXplb2Ygc25vb3Agc29ja2V0X2FjY2VwdCBzb2NrZXRfYWNxdWlyZSBzb2NrZXRfYWRkcmVzcyBzb2NrZXRfYmluZCBzb2NrZXRfY2xvc2Ugc29ja2V0X2Nvbm5lY3Qgc29ja2V0X2NyZWF0ZSBzb2NrZXRfZXJyb3Igc29ja2V0X2xpc3RlbiBzb2NrZXRfcmVsZWFzZSBzb2NrZXRfd3JpdGUgc29ydF9hcnJheSBzcHJpbnRmIHNxcnQgc3RhdCBzdG9yZV92YXJpYWJsZSBzdHJjbXAgc3RyaW5ncCBzdHJsZW4gc3Ryc3JjaAorc3luIGtleXdvcmQgICAgIGxwY19lZnVucyAgICAgICBjb250YWluZWQgdGFuIHRlbGxfb2JqZWN0IHRlbGxfcm9vbSB0ZXJtaW5hbF9jb2xvdXIgdGVzdF9iaXQgdGhpc19pbnRlcmFjdGl2ZSB0aGlzX29iamVjdCB0aGlzX3BsYXllciB0aGlzX3VzZXIgdGhyb3cgdGltZSB0b19mbG9hdCB0b19pbnQgdHJhY2UgdHJhY2VwcmVmaXggdHJhbnNsYXRlIHR5cGVvZgorc3luIGtleXdvcmQgICAgIGxwY19lZnVucyAgICAgICBjb250YWluZWQgdW5kZWZpbmVkcCB1bmlxdWVfYXJyYXkgdW5pcXVlX21hcHBpbmcgdXBwZXJfY2FzZSB1cHRpbWUgdXNlcnAgdXNlcnMKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIHZhbHVlcyB2YXJpYWJsZXMgdmlydHVhbHAKK3N5biBrZXl3b3JkICAgICBscGNfZWZ1bnMgICAgICAgY29udGFpbmVkIHdpemFyZHAgd3JpdGUgd3JpdGVfYnVmZmVyIHdyaXRlX2J5dGVzIHdyaXRlX2ZpbGUKKworIiBOb2R1bGU6IENvbnN0YW50cyB7e3sxCisKKyIgTFBDIENvbnN0YW50cy4KKyIgbGlrZSBrZXl3b3JkcywgY29uc3RhbnRzIGFyZSBhbHdheXMgaGlnaGxpZ2h0ZWQsIGJlIGNhcmVmdWwgdG8gY2hvb3NlIG9ubHkKKyIgdGhlIGNvbnN0YW50cyB3ZSB1c2VkIHRvIGFkZCB0byB0aGlzIGxpc3QuCitzeW4ga2V5d29yZCAgICAgbHBjQ29uc3RhbnQgICAgIF9fQVJDSF9fIF9fQ09NUElMRVJfXyBfX0RJUl9fIF9fRklMRV9fIF9fT1BUSU1JWkFUSU9OX18gX19QT1JUX18gX19WRVJTSU9OX18KKyIgICAgICAgRGVmaW5lcyBpbiBvcHRpb25zLmggYXJlIGFsbCBwcmVkZWZpbmVkIGluIExQQyBzb3VyY2VzIHN1cnJvdW5kaW5nIGJ5CisiICAgICAgIHR3byB1bmRlcnNjb3Jlcy4gRG8gd2UgbmVlZCB0byBpbmNsdWRlIGFsbCBvZiB0aGF0Pworc3luIGtleXdvcmQgICAgIGxwY0NvbnN0YW50ICAgICBfX1NBVkVfRVhURU5TSU9OX18gX19IRUFSVEJFQVRfSU5URVJWQUxfXworIiAgICAgICBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIHdlIGtub3cgdGhhdCB0aGVzZSBjb25zdGFudHMgcmVtYWlucyBvbmx5IGZvcgorIiAgICAgICBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55IG1vcmUuCitzeW4ga2V5d29yZCAgICAgbHBjQ29uc3RhbnQgICAgIEhBU19FRCBIQVNfUFJJTlRGIEhBU19SVVNBR0UgSEFTX0RFQlVHX0xFVkVMCitzeW4ga2V5d29yZCAgICAgbHBjQ29uc3RhbnQgICAgIE1VRF9OQU1FIEZfX1RISVNfT0JKRUNUCisKKyIgTm9kdWxlOiBUb2RvIGZvciB0aGlzIGZpbGUuICB7e3sxCisKKyIgVE9ETyA6IG5lZWQgdG8gY2hlY2sgZm9yIExQQzQgc3ludGF4IGFuZCBvdGhlciBzZXJpZXMgb2YgTFBDIGJlc2lkZXMKKyIgdjIyLCBiMjEgYW5kIGwzMiwgaWYgeW91IGhhZCBhIGdvb2QgaWRlYSwgY29udGFjdCBtZSBhdCBwb2V0QG11ZGJ1aWxkZXIubmV0CisiIGFuZCBJIHdpbGwgYmUgYXBwcmVjaWF0ZWQgYWJvdXQgdGhhdC4KKworIiBOb3RlcyBhYm91dCBzb21lIEZBUToKKyIKKyIgQWJvdXQgdmFyaWFibGVzIDogV2UgYWRvcHRzIHRoZSBzYW1lIGJlaGF2aW9yIGZvciBDIGJlY2F1c2UgYWxtb3N0IGFsbCB0aGUKKyIgTFBDIHByb2dyYW1tZXJzIGFyZSBhbHNvIEMgcHJvZ3JhbW1lcnMsIHNvIHdlIGRvbid0IG5lZWQgc2VwYXJhdGUgc2V0dGluZ3MKKyIgZm9yIEMgYW5kIExQQy4gVGhhdCBpcyB0aGUgcmVhc29uIHdoeSBJIGRvbid0IGNoYW5nZSB2YXJpYWJsZXMgbGlrZQorIiAiY19ub191dGYicyB0byAibHBjX25vX3V0ZiJzLgorIgorIiBDb3B5IDogU29tZSBvZiB0aGUgZm9sbG93aW5nIHNlZW1zIHRvIGJlIGNvcGllZCBmcm9tIGMudmltIGJ1dCBub3QgcXVpdGUKKyIgdGhlIHNhbWUgaW4gZGV0YWlscyBiZWNhdXNlIHRoZSBzeW50YXggZm9yIEMgYW5kIExQQyBpcyBkaWZmZXJlbnQuCisiCisiIENvbG9yIHNjaGVtZSA6IHRoaXMgc3ludGF4IGZpbGUgaGFkIGJlZW4gdGhvdXJvdWdobHkgdGVzdGVkIHRvIHdvcmsgd2VsbAorIiBmb3IgYWxsIG9mIHRoZSBkYXJrLWJhY2tncm91bmRlZCBjb2xvciBzY2hlbWVzIFZpbSBoYXMgcHJvdmlkZWQgb2ZmaWNpYWxseSwKKyIgYW5kIGl0IHNob3VsZCBiZSBxdWl0ZSBPayBmb3IgYWxsIG9mIHRoZSBicmlnaHQtYmFja2dyb3VuZGVkIGNvbG9yIHNjaGVtZXMsCisiIG9mIGNvdXJzZSBpdCB3b3JrcyBiZXN0IGZvciB0aGUgY29sb3Igc2NoZW1lIHRoYXQgSSBhbSB1c2luZywgZG93bmxvYWQgaXQKKyIgZnJvbSBodHRwOi8vcG9ldC50b211ZC5jb20vcHViL3BzX2NvbG9yLnZpbS5iejIgaWYgeW91IHdhbnQgdG8gdHJ5IGl0LgorIgorCisiIE5vZHVsZTogU3RyaW5nIGFuZCBDaGFyYWN0ZXIge3t7MQorCisKKyIgU3RyaW5nIGFuZCBDaGFyYWN0ZXIgY29uc3RhbnRzCisiIEhpZ2hsaWdodCBzcGVjaWFsIGNoYXJhY3RlcnMgKHRob3NlIHdoaWNoIGhhdmUgYSBiYWNrc2xhc2gpIGRpZmZlcmVudGx5CitzeW4gbWF0Y2gJbHBjU3BlY2lhbAlkaXNwbGF5IGNvbnRhaW5lZCAiXFxcKHhceFwrXHxcb1x7MSwzfVx8Llx8JFwpIgoraWYgIWV4aXN0cygiY19ub191dGYiKQorICBzeW4gbWF0Y2gJbHBjU3BlY2lhbAlkaXNwbGF5IGNvbnRhaW5lZCAiXFxcKHVceFx7NH1cfFVceFx7OH1cKSIKK2VuZGlmCisKKyIgTFBDIHZlcnNpb24gb2Ygc3ByaW50ZigpIGZvcm1hdCwKK3N5biBtYXRjaAlscGNGb3JtYXQJZGlzcGxheSAiJVwoXGRcK1wpXD1bLSsgfD0jQDouXSpcKFxkXCtcKVw9XCgnXElcKydcfCdcSSpcXCdcSSonXClcPVtPc2RpY294WGZdIiBjb250YWluZWQKK3N5biBtYXRjaAlscGNGb3JtYXQJZGlzcGxheSAiJSUiIGNvbnRhaW5lZAorc3luIHJlZ2lvbglscGNTdHJpbmcJc3RhcnQ9K0xcPSIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWlucz1scGNTcGVjaWFsLGxwY0Zvcm1hdAorIiBscGNDcHBTdHJpbmc6IHNhbWUgYXMgbHBjU3RyaW5nLCBidXQgZW5kcyBhdCBlbmQgb2YgbGluZQorc3luIHJlZ2lvbglscGNDcHBTdHJpbmcJc3RhcnQ9K0xcPSIrIHNraXA9K1xcXFxcfFxcIlx8XFwkKyBleGNsdWRlbmwgZW5kPSsiKyBlbmQ9JyQnIGNvbnRhaW5zPWxwY1NwZWNpYWwsbHBjRm9ybWF0CisKKyIgTFBDIHByZXByb2Nlc3NvciBmb3IgdGhlIHRleHQgZm9ybWF0dGluZyBzaG9ydCBjdXRzCisiIFRoYW5rcyB0byBEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCA8Y2VjQGdyeXBob24uZ3NmYy5uYXNhLmdvdj4KKyIJaGUgc3VnZ2VzdHMgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMuCitzeW4gcmVnaW9uCWxwY1RleHRTdHJpbmcJc3RhcnQ9L0BceihcaFx3KlwpJC8gZW5kPS9eXHoxLyBjb250YWlucz1scGNTcGVjaWFsCitzeW4gcmVnaW9uCWxwY0FycmF5U3RyaW5nCXN0YXJ0PS9AQFx6KFxoXHcqXCkkLyBlbmQ9L15cejEvIGNvbnRhaW5zPWxwY1NwZWNpYWwKKworIiBDaGFyYWN0ZXIKK3N5biBtYXRjaAlscGNDaGFyYWN0ZXIJIkxcPSdbXlxcXSciCitzeW4gbWF0Y2gJbHBjQ2hhcmFjdGVyCSJMJ1teJ10qJyIgY29udGFpbnM9bHBjU3BlY2lhbAorc3luIG1hdGNoCWxwY1NwZWNpYWxFcnJvcgkiTFw9J1xcW14nXCI/XFxhYmVmbnJ0dl0nIgorc3luIG1hdGNoCWxwY1NwZWNpYWxDaGFyYWN0ZXIgIkxcPSdcXFsnXCI/XFxhYmVmbnJ0dl0nIgorc3luIG1hdGNoCWxwY1NwZWNpYWxDaGFyYWN0ZXIgZGlzcGxheSAiTFw9J1xcXG9cezEsM30nIgorc3luIG1hdGNoCWxwY1NwZWNpYWxDaGFyYWN0ZXIgZGlzcGxheSAiJ1xceFx4XHsxLDJ9JyIKK3N5biBtYXRjaAlscGNTcGVjaWFsQ2hhcmFjdGVyIGRpc3BsYXkgIkwnXFx4XHhcKyciCisKKyIgTm9kdWxlOiBXaGl0ZSBzcGFjZSB7e3sxCisKKyIgd2hlbiB3YW50ZWQsIGhpZ2hsaWdodCB0cmFpbGluZyB3aGl0ZSBzcGFjZQoraWYgZXhpc3RzKCJjX3NwYWNlX2Vycm9ycyIpCisgIGlmICFleGlzdHMoImNfbm9fdHJhaWxfc3BhY2VfZXJyb3IiKQorICAgIHN5biBtYXRjaAlscGNTcGFjZUVycm9yCWRpc3BsYXkgZXhjbHVkZW5sICJcc1wrJCIKKyAgZW5kaWYKKyAgaWYgIWV4aXN0cygiY19ub190YWJfc3BhY2VfZXJyb3IiKQorICAgIHN5biBtYXRjaAlscGNTcGFjZUVycm9yCWRpc3BsYXkgIiBcK1x0Im1lPWUtMQorICBlbmRpZgorZW5kaWYKKworIiBOb2R1bGU6IFBhcmVudGhlc2lzIGFuZCBicmFja2V0cyB7e3sxCisKKyIgY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcyBhbmQgYnJhY2tldHMKK3N5biBjbHVzdGVyCWxwY1BhcmVuR3JvdXAJY29udGFpbnM9bHBjUGFyZW5FcnJvcixscGNJbmNsdWRlZCxscGNTcGVjaWFsLGxwY0NvbW1lbnRTa2lwLGxwY0NvbW1lbnRTdHJpbmcsbHBjQ29tbWVudDJTdHJpbmcsQGxwY0NvbW1lbnRHcm91cCxscGNDb21tZW50U3RhcnRFcnJvcixscGNVc2VyQ29udCxscGNVc2VyTGFiZWwsbHBjQml0RmllbGQsbHBjQ29tbWVudFNraXAsbHBjT2N0YWxaZXJvLGxwY0NwcE91dCxscGNDcHBPdXQyLGxwY0NwcFNraXAsbHBjRm9ybWF0LGxwY051bWJlcixscGNGbG9hdCxscGNPY3RhbCxscGNPY3RhbEVycm9yLGxwY051bWJlcnNDb20KK3N5biByZWdpb24JbHBjUGFyZW4JdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULEBscGNQYXJlbkdyb3VwLGxwY0NwcFBhcmVuLGxwY0VyckluQnJhY2tldCxscGNDcHBCcmFja2V0LGxwY0NwcFN0cmluZyxAbHBjRWZ1bkdyb3VwLGxwY0FwcGxpZXMsbHBjS2V5d2RFcnJvcgorIiBscGNDcHBQYXJlbjogc2FtZSBhcyBscGNQYXJlbiBidXQgZW5kcyBhdCBlbmQtb2YtbGluZTsgdXNlZCBpbiBscGNEZWZpbmUKK3N5biByZWdpb24JbHBjQ3BwUGFyZW4JdHJhbnNwYXJlbnQgc3RhcnQ9JygnIHNraXA9J1xcJCcgZXhjbHVkZW5sIGVuZD0nKScgZW5kPSckJyBjb250YWluZWQgY29udGFpbnM9QUxMQlVULEBscGNQYXJlbkdyb3VwLGxwY0VyckluQnJhY2tldCxscGNQYXJlbixscGNCcmFja2V0LGxwY1N0cmluZyxAbHBjRWZ1bkdyb3VwLGxwY0FwcGxpZXMsbHBjS2V5d2RFcnJvcgorc3luIG1hdGNoCWxwY1BhcmVuRXJyb3IJZGlzcGxheSAiKSIKK3N5biBtYXRjaAlscGNQYXJlbkVycm9yCWRpc3BsYXkgIlxdIgorIiBmb3IgTFBDOgorIiBIZXJlIHdlIHNob3VsZCBjb25zaWRlciB0aGUgYXJyYXkgKHsgfSkgcGFyZW50aGVzaXMgYW5kIG1hcHBpbmcgKFsgXSkKKyIgcGFyZW50aGVzaXMgYW5kIG11bHRpc2V0ICg8ID4pIHBhcmVudGhlc2lzLgorc3luIG1hdGNoCWxwY0VyckluUGFyZW4JZGlzcGxheSBjb250YWluZWQgIlteXl17Im1zPXMrMQorc3luIG1hdGNoCWxwY0VyckluUGFyZW4JZGlzcGxheSBjb250YWluZWQgIlwofVx8XF1cKVteKV0ibWU9ZS0xCitzeW4gcmVnaW9uCWxwY0JyYWNrZXQJdHJhbnNwYXJlbnQgc3RhcnQ9J1xbJyBlbmQ9J10nIGNvbnRhaW5zPUFMTEJVVCxAbHBjUGFyZW5Hcm91cCxscGNFcnJJblBhcmVuLGxwY0NwcFBhcmVuLGxwY0NwcEJyYWNrZXQsbHBjQ3BwU3RyaW5nLEBscGNFZnVuR3JvdXAsbHBjQXBwbGllcyxscGNGdW5jTmFtZSxscGNLZXl3ZEVycm9yCisiIGxwY0NwcEJyYWNrZXQ6IHNhbWUgYXMgbHBjUGFyZW4gYnV0IGVuZHMgYXQgZW5kLW9mLWxpbmU7IHVzZWQgaW4gbHBjRGVmaW5lCitzeW4gcmVnaW9uCWxwY0NwcEJyYWNrZXQJdHJhbnNwYXJlbnQgc3RhcnQ9J1xbJyBza2lwPSdcXCQnIGV4Y2x1ZGVubCBlbmQ9J10nIGVuZD0nJCcgY29udGFpbmVkIGNvbnRhaW5zPUFMTEJVVCxAbHBjUGFyZW5Hcm91cCxscGNFcnJJblBhcmVuLGxwY1BhcmVuLGxwY0JyYWNrZXQsbHBjU3RyaW5nLEBscGNFZnVuR3JvdXAsbHBjQXBwbGllcyxscGNGdW5jTmFtZSxscGNLZXl3ZEVycm9yCitzeW4gbWF0Y2gJbHBjRXJySW5CcmFja2V0CWRpc3BsYXkgY29udGFpbmVkICJbKTt7fV0iCisKKyIgTm9kdWxlOiBOdW1iZXJzIHt7ezEKKworIiBpbnRlZ2VyIG51bWJlciwgb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdpdGhvdXQgYSBkb3QgYW5kIHdpdGggImYiLgorc3luIGNhc2UgaWdub3JlCitzeW4gbWF0Y2gJbHBjTnVtYmVycwlkaXNwbGF5IHRyYW5zcGFyZW50ICJcPFxkXHxcLlxkIiBjb250YWlucz1scGNOdW1iZXIsbHBjRmxvYXQsbHBjT2N0YWxFcnJvcixscGNPY3RhbAorIiBTYW1lLCBidXQgd2l0aG91dCBvY3RhbCBlcnJvciAoZm9yIGNvbW1lbnRzKQorc3luIG1hdGNoCWxwY051bWJlcnNDb20JZGlzcGxheSBjb250YWluZWQgdHJhbnNwYXJlbnQgIlw8XGRcfFwuXGQiIGNvbnRhaW5zPWxwY051bWJlcixscGNGbG9hdCxscGNPY3RhbAorc3luIG1hdGNoCWxwY051bWJlcglkaXNwbGF5IGNvbnRhaW5lZCAiXGRcK1wodVw9bFx7MCwyfVx8bGxcPXVcKVw+IgorIiBoZXggbnVtYmVyCitzeW4gbWF0Y2gJbHBjTnVtYmVyCWRpc3BsYXkgY29udGFpbmVkICIweFx4XCtcKHVcPWxcezAsMn1cfGxsXD11XClcPiIKKyIgRmxhZyB0aGUgZmlyc3QgemVybyBvZiBhbiBvY3RhbCBudW1iZXIgYXMgc29tZXRoaW5nIHNwZWNpYWwKK3N5biBtYXRjaAlscGNPY3RhbAlkaXNwbGF5IGNvbnRhaW5lZCAiMFxvXCtcKHVcPWxcezAsMn1cfGxsXD11XClcPiIgY29udGFpbnM9bHBjT2N0YWxaZXJvCitzeW4gbWF0Y2gJbHBjT2N0YWxaZXJvCWRpc3BsYXkgY29udGFpbmVkICJcPDAiCitzeW4gbWF0Y2gJbHBjRmxvYXQJZGlzcGxheSBjb250YWluZWQgIlxkXCtmIgorIiBmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoCWxwY0Zsb2F0CWRpc3BsYXkgY29udGFpbmVkICJcZFwrXC5cZCpcKGVbLStdXD1cZFwrXClcPVtmbF1cPSIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoCWxwY0Zsb2F0CWRpc3BsYXkgY29udGFpbmVkICJcLlxkXCtcKGVbLStdXD1cZFwrXClcPVtmbF1cPVw+IgorIiBmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGhvdXQgZG90LCB3aXRoIGV4cG9uZW50CitzeW4gbWF0Y2gJbHBjRmxvYXQJZGlzcGxheSBjb250YWluZWQgIlxkXCtlWy0rXVw9XGRcK1tmbF1cPVw+IgorIiBmbGFnIGFuIG9jdGFsIG51bWJlciB3aXRoIHdyb25nIGRpZ2l0cworc3luIG1hdGNoCWxwY09jdGFsRXJyb3IJZGlzcGxheSBjb250YWluZWQgIjBcbypbODldXGQqIgorc3luIGNhc2UgbWF0Y2gKKworIiBOb2R1bGU6IENvbW1lbnQgc3RyaW5nIHt7ezEKKworIiBscGNDb21tZW50R3JvdXAgYWxsb3dzIGFkZGluZyBtYXRjaGVzIGZvciBzcGVjaWFsIHRoaW5ncyBpbiBjb21tZW50cworc3luIGtleXdvcmQJbHBjVG9kbwkJY29udGFpbmVkIFRPRE8gRklYTUUgWFhYCitzeW4gY2x1c3RlcglscGNDb21tZW50R3JvdXAJY29udGFpbnM9bHBjVG9kbworCitpZiBleGlzdHMoImNfY29tbWVudF9zdHJpbmdzIikKKyAgIiBBIGNvbW1lbnQgY2FuIGNvbnRhaW4gbHBjU3RyaW5nLCBscGNDaGFyYWN0ZXIgYW5kIGxwY051bWJlci4KKyAgc3ludGF4IG1hdGNoCWxwY0NvbW1lbnRTa2lwCWNvbnRhaW5lZCAiXlxzKlwqXCgkXHxcc1wrXCkiCisgIHN5bnRheCByZWdpb24gbHBjQ29tbWVudFN0cmluZwljb250YWluZWQgc3RhcnQ9K0xcPVxcXEA8ISIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBlbmQ9K1wqLyttZT1zLTEgY29udGFpbnM9bHBjU3BlY2lhbCxscGNDb21tZW50U2tpcAorICBzeW50YXggcmVnaW9uIGxwY0NvbW1lbnQyU3RyaW5nCWNvbnRhaW5lZCBzdGFydD0rTFw9XFxcQDwhIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGVuZD0iJCIgY29udGFpbnM9bHBjU3BlY2lhbAorICBzeW50YXggcmVnaW9uICBscGNDb21tZW50TAlzdGFydD0iLy8iIHNraXA9IlxcJCIgZW5kPSIkIiBrZWVwZW5kIGNvbnRhaW5zPUBscGNDb21tZW50R3JvdXAsbHBjQ29tbWVudDJTdHJpbmcsbHBjQ2hhcmFjdGVyLGxwY051bWJlcnNDb20sbHBjU3BhY2VFcnJvcgorICBzeW50YXggcmVnaW9uIGxwY0NvbW1lbnQJbWF0Y2hncm91cD1scGNDb21tZW50U3RhcnQgc3RhcnQ9Ii9cKiIgbWF0Y2hncm91cD1OT05FIGVuZD0iXCovIiBjb250YWlucz1AbHBjQ29tbWVudEdyb3VwLGxwY0NvbW1lbnRTdGFydEVycm9yLGxwY0NvbW1lbnRTdHJpbmcsbHBjQ2hhcmFjdGVyLGxwY051bWJlcnNDb20sbHBjU3BhY2VFcnJvcgorZWxzZQorICBzeW4gcmVnaW9uCWxwY0NvbW1lbnRMCXN0YXJ0PSIvLyIgc2tpcD0iXFwkIiBlbmQ9IiQiIGtlZXBlbmQgY29udGFpbnM9QGxwY0NvbW1lbnRHcm91cCxscGNTcGFjZUVycm9yCisgIHN5biByZWdpb24JbHBjQ29tbWVudAltYXRjaGdyb3VwPWxwY0NvbW1lbnRTdGFydCBzdGFydD0iL1wqIiBtYXRjaGdyb3VwPU5PTkUgZW5kPSJcKi8iIGNvbnRhaW5zPUBscGNDb21tZW50R3JvdXAsbHBjQ29tbWVudFN0YXJ0RXJyb3IsbHBjU3BhY2VFcnJvcgorZW5kaWYKKyIga2VlcCBhIC8vIGNvbW1lbnQgc2VwYXJhdGVseSwgaXQgdGVybWluYXRlcyBhIHByZXByb2MuIGNvbmRpdGlvbmFsCitzeW50YXggbWF0Y2gJbHBjQ29tbWVudEVycm9yCWRpc3BsYXkgIlwqLyIKK3N5bnRheCBtYXRjaAlscGNDb21tZW50U3RhcnRFcnJvciBkaXNwbGF5ICIvXCoibWU9ZS0xIGNvbnRhaW5lZAorCisiIE5vZHVsZTogUHJlLXByb2Nlc3NvciB7e3sxCisKK3N5biByZWdpb24JbHBjUHJlQ29uZGl0CXN0YXJ0PSJeXHMqI1xzKlwoaWZcfGlmZGVmXHxpZm5kZWZcfGVsaWZcKVw+IiBza2lwPSJcXCQiIGVuZD0iJCIgZW5kPSIvLyJtZT1zLTEgY29udGFpbnM9bHBjQ29tbWVudCxscGNDcHBTdHJpbmcsbHBjQ2hhcmFjdGVyLGxwY0NwcFBhcmVuLGxwY1BhcmVuRXJyb3IsbHBjTnVtYmVycyxscGNDb21tZW50RXJyb3IsbHBjU3BhY2VFcnJvcgorc3luIG1hdGNoCWxwY1ByZUNvbmRpdAlkaXNwbGF5ICJeXHMqI1xzKlwoZWxzZVx8ZW5kaWZcKVw+IgoraWYgIWV4aXN0cygiY19ub19pZjAiKQorICBzeW4gcmVnaW9uCWxwY0NwcE91dAkJc3RhcnQ9Il5ccyojXHMqaWZcc1wrMFwrXD4iIGVuZD0iLlx8JCIgY29udGFpbnM9bHBjQ3BwT3V0MgorICBzeW4gcmVnaW9uCWxwY0NwcE91dDIJY29udGFpbmVkIHN0YXJ0PSIwIiBlbmQ9Il5ccyojXHMqXChlbmRpZlw+XHxlbHNlXD5cfGVsaWZcPlwpIiBjb250YWlucz1scGNTcGFjZUVycm9yLGxwY0NwcFNraXAKKyAgc3luIHJlZ2lvbglscGNDcHBTa2lwCWNvbnRhaW5lZCBzdGFydD0iXlxzKiNccypcKGlmXD5cfGlmZGVmXD5cfGlmbmRlZlw+XCkiIHNraXA9IlxcJCIgZW5kPSJeXHMqI1xzKmVuZGlmXD4iIGNvbnRhaW5zPWxwY1NwYWNlRXJyb3IsbHBjQ3BwU2tpcAorZW5kaWYKK3N5biByZWdpb24JbHBjSW5jbHVkZWQJZGlzcGxheSBjb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKworc3luIG1hdGNoCWxwY0luY2x1ZGVkCWRpc3BsYXkgY29udGFpbmVkICI8W14+XSo+Igorc3luIG1hdGNoCWxwY0luY2x1ZGUJZGlzcGxheSAiXlxzKiNccyppbmNsdWRlXD5ccypbIjxdIiBjb250YWlucz1scGNJbmNsdWRlZAorc3luIG1hdGNoIGxwY0xpbmVTa2lwCSJcXCQiCitzeW4gY2x1c3RlcglscGNQcmVQcm9jR3JvdXAJY29udGFpbnM9bHBjUHJlQ29uZGl0LGxwY0luY2x1ZGVkLGxwY0luY2x1ZGUsbHBjRGVmaW5lLGxwY0VyckluUGFyZW4sbHBjRXJySW5CcmFja2V0LGxwY1VzZXJMYWJlbCxscGNTcGVjaWFsLGxwY09jdGFsWmVybyxscGNDcHBPdXQsbHBjQ3BwT3V0MixscGNDcHBTa2lwLGxwY0Zvcm1hdCxscGNOdW1iZXIsbHBjRmxvYXQsbHBjT2N0YWwsbHBjT2N0YWxFcnJvcixscGNOdW1iZXJzQ29tLGxwY1N0cmluZyxscGNDb21tZW50U2tpcCxscGNDb21tZW50U3RyaW5nLGxwY0NvbW1lbnQyU3RyaW5nLEBscGNDb21tZW50R3JvdXAsbHBjQ29tbWVudFN0YXJ0RXJyb3IsbHBjUGFyZW4sbHBjQnJhY2tldCxscGNNdWx0aSxscGNLZXl3ZEVycm9yCitzeW4gcmVnaW9uCWxwY0RlZmluZQlzdGFydD0iXlxzKiNccypcKGRlZmluZVx8dW5kZWZcKVw+IiBza2lwPSJcXCQiIGVuZD0iJCIgZW5kPSIvLyJtZT1zLTEgY29udGFpbnM9QUxMQlVULEBscGNQcmVQcm9jR3JvdXAKKworaWYgZXhpc3RzKCJscGNfcHJlX3YyMiIpCisgICAgc3luIHJlZ2lvbglscGNQcmVQcm9jCXN0YXJ0PSJeXHMqI1xzKlwocHJhZ21hXD5cfGVjaG9cPlwpIiBza2lwPSJcXCQiIGVuZD0iJCIga2VlcGVuZCBjb250YWlucz1BTExCVVQsQGxwY1ByZVByb2NHcm91cAorZWxzZQorICAgIHN5biByZWdpb24JbHBjUHJlUHJvYwlzdGFydD0iXlxzKiNccypcKHByYWdtYVw+XHxlY2hvXD5cfHdhcm5cPlx8ZXJyb3JcPlwpIiBza2lwPSJcXCQiIGVuZD0iJCIga2VlcGVuZCBjb250YWlucz1BTExCVVQsQGxwY1ByZVByb2NHcm91cAorZW5kaWYKKworIiBOb2R1bGU6IFVzZXIgbGFiZWxzIHt7ezEKKworIiBIaWdobGlnaHQgTGFiZWxzCisiIFVzZXIgbGFiZWxzIGluIExQQyBpcyBub3QgYWxsb3dlZCwgb25seSAiY2FzZSB4IiBhbmQgImRlZmF1bHQiIGlzIHN1cHBvcnRlZAorc3luIGNsdXN0ZXIJbHBjTXVsdGlHcm91cAljb250YWlucz1scGNJbmNsdWRlZCxscGNTcGVjaWFsLGxwY0NvbW1lbnRTa2lwLGxwY0NvbW1lbnRTdHJpbmcsbHBjQ29tbWVudDJTdHJpbmcsQGxwY0NvbW1lbnRHcm91cCxscGNDb21tZW50U3RhcnRFcnJvcixscGNVc2VyQ29udCxscGNVc2VyTGFiZWwsbHBjQml0RmllbGQsbHBjT2N0YWxaZXJvLGxwY0NwcE91dCxscGNDcHBPdXQyLGxwY0NwcFNraXAsbHBjRm9ybWF0LGxwY051bWJlcixscGNGbG9hdCxscGNPY3RhbCxscGNPY3RhbEVycm9yLGxwY051bWJlcnNDb20sbHBjQ3BwUGFyZW4sbHBjQ3BwQnJhY2tldCxscGNDcHBTdHJpbmcsbHBjS2V5d2RFcnJvcgorc3luIHJlZ2lvbglscGNNdWx0aQkJdHJhbnNwYXJlbnQgc3RhcnQ9J1woY2FzZVx8ZGVmYXVsdFx8cHVibGljXHxwcm90ZWN0ZWRcfHByaXZhdGVcKScgc2tpcD0nOjonIGVuZD0nOicgY29udGFpbnM9QUxMQlVULEBscGNNdWx0aUdyb3VwCisKK3N5biBjbHVzdGVyCWxwY0xhYmVsR3JvdXAJY29udGFpbnM9bHBjVXNlckxhYmVsCitzeW4gbWF0Y2gJbHBjVXNlckNvbnQJZGlzcGxheSAiXlxzKmxwYzokIiBjb250YWlucz1AbHBjTGFiZWxHcm91cAorCisiIERvbid0IHdhbnQgdG8gbWF0Y2ggYW55dGhpbmcKK3N5biBtYXRjaAlscGNVc2VyTGFiZWwJZGlzcGxheSAibHBjIiBjb250YWluZWQKKworIiBOb2R1bGU6IEluaXRpYWxpemF0aW9ucyB7e3sxCisKK2lmIGV4aXN0cygiY19taW5saW5lcyIpCisgIGxldCBiOmNfbWlubGluZXMgPSBjX21pbmxpbmVzCitlbHNlCisgIGlmICFleGlzdHMoImNfbm9faWYwIikKKyAgICBsZXQgYjpjX21pbmxpbmVzID0gNTAJIiAjaWYgMCBjb25zdHJ1Y3RzIGNhbiBiZSBsb25nCisgIGVsc2UKKyAgICBsZXQgYjpjX21pbmxpbmVzID0gMTUJIiBtb3N0bHkgZm9yICgpIGNvbnN0cnVjdHMKKyAgZW5kaWYKK2VuZGlmCitleGVjICJzeW4gc3luYyBjY29tbWVudCBscGNDb21tZW50IG1pbmxpbmVzPSIgLiBiOmNfbWlubGluZXMKKworIiBNYWtlIHN1cmUgdGhlc2Ugb3B0aW9ucyB0YWtlIHBsYWNlIHNpbmNlIHdlIG5vIGxvbmdlciBkZXBlbmQgb24gZmlsZSB0eXBlCisiIHBsdWdpbiBmb3IgQworc2V0bG9jYWwgY2luZGVudAorc2V0bG9jYWwgZm8tPXQgZm8rPWNyb3FsCitzZXRsb2NhbCBjb21tZW50cz1zTzoqXCAtLG1POipcIFwgLGV4TzoqLyxzMTovKixtYjoqLGV4OiovLDovLworc2V0IGNwby09QworCisiIFdpbjMyIGNhbiBmaWx0ZXIgZmlsZXMgaW4gdGhlIGJyb3dzZSBkaWFsb2cKK2lmIGhhcygiZ3VpX3dpbjMyIikgJiYgIWV4aXN0cygiYjpicm93c2VmaWx0ZXIiKQorICAgIGxldCBiOmJyb3dzZWZpbHRlciA9ICJMUEMgU291cmNlIEZpbGVzICgqLmMgKi5kICouaClcdCouYzsqLmQ7Ki5oXG4iIC4KKwlcICJMUEMgRGF0YSBGaWxlcyAoKi5zY3IgKi5vICouZGF0KVx0Ki5zY3I7Ki5vOyouZGF0XG4iIC4KKwlcICJUZXh0IERvY3VtZW50YXRpb24gKCoudHh0KVx0Ki50eHRcbiIgLgorCVwgIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCitlbmRpZgorCisiIE5vZHVsZTogSGlnaGxpZ2h0IGxpbmtzIHt7ezEKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbHBjX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2xwY19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBscGNNb2RpZmllcgkJbHBjU3RvcmFnZUNsYXNzCisKKyAgSGlMaW5rIGxwY1F1b3RlZEZtdAkJbHBjRm9ybWF0CisgIEhpTGluayBscGNGb3JtYXQJCWxwY1NwZWNpYWwKKyAgSGlMaW5rIGxwY0NwcFN0cmluZwkJbHBjU3RyaW5nCSIgQ3BwIG1lYW5zCisJCQkJCQkiIEMgUHJlLVByb2Nlc3NvcgorICBIaUxpbmsgbHBjQ29tbWVudEwJCWxwY0NvbW1lbnQKKyAgSGlMaW5rIGxwY0NvbW1lbnRTdGFydAlscGNDb21tZW50CisgIEhpTGluayBscGNVc2VyTGFiZWwJCWxwY0xhYmVsCisgIEhpTGluayBscGNTcGVjaWFsQ2hhcmFjdGVyCWxwY1NwZWNpYWwKKyAgSGlMaW5rIGxwY09jdGFsCQlscGNQcmVQcm9jCisgIEhpTGluayBscGNPY3RhbFplcm8JCWxwY1NwZWNpYWwgICIgTFBDIHdpbGwgdHJlYXQgb2N0YWwgbnVtYmVycworCQkJCQkgICAgIiBhcyBkZWNpbWFscywgcHJvZ3JhbW1lcnMgc2hvdWxkCisJCQkJCSAgICAiIGJlIGF3YXJlIG9mIHRoYXQuCisgIEhpTGluayBscGNFZnVuRXJyb3IJCWxwY0Vycm9yCisgIEhpTGluayBscGNLZXl3ZEVycm9yCQlscGNFcnJvcgorICBIaUxpbmsgbHBjT2N0YWxFcnJvcgkJbHBjRXJyb3IKKyAgSGlMaW5rIGxwY1BhcmVuRXJyb3IJCWxwY0Vycm9yCisgIEhpTGluayBscGNFcnJJblBhcmVuCQlscGNFcnJvcgorICBIaUxpbmsgbHBjRXJySW5CcmFja2V0CWxwY0Vycm9yCisgIEhpTGluayBscGNDb21tZW50RXJyb3IJbHBjRXJyb3IKKyAgSGlMaW5rIGxwY0NvbW1lbnRTdGFydEVycm9yCWxwY0Vycm9yCisgIEhpTGluayBscGNTcGFjZUVycm9yCQlscGNFcnJvcgorICBIaUxpbmsgbHBjU3BlY2lhbEVycm9yCWxwY0Vycm9yCisgIEhpTGluayBscGNFcnJGdW5jCQlscGNFcnJvcgorCisgIGlmIGV4aXN0cygibHBjX3ByZV92MjIiKQorICAgICAgSGlMaW5rIGxwY09sZEVmdW5zCWxwY19lZnVucworICAgICAgSGlMaW5rIGxwY05ld0VmdW5zCWxwY0Vycm9yCisgIGVsc2UKKyAgICAgIEhpTGluayBscGNPbGRFZnVucwlscGNSZXNlcnZlZAorICAgICAgSGlMaW5rIGxwY05ld0VmdW5zCWxwY19lZnVucworICBlbmRpZgorICBIaUxpbmsgbHBjX2VmdW5zCQlscGNGdW5jdGlvbgorCisgIEhpTGluayBscGNSZXNlcnZlZAkJbHBjUHJlUHJvYworICBIaUxpbmsgbHBjVGV4dFN0cmluZwkJbHBjU3RyaW5nICAgIiBUaGlzIHNob3VsZCBiZSBwcmVwcm9jZXNzb3JzLCBidXQKKyAgSGlMaW5rIGxwY0FycmF5U3RyaW5nCQlscGNQcmVQcm9jICAiIGxldCdzIG1ha2Ugc29tZSBkaWZmZXJlbmNlCisJCQkJCSAgICAiIGJldHdlZW4gdGV4dCBhbmQgYXJyYXkKKworICBIaUxpbmsgbHBjSW5jbHVkZWQJCWxwY1N0cmluZworICBIaUxpbmsgbHBjQ29tbWVudFN0cmluZwlscGNTdHJpbmcKKyAgSGlMaW5rIGxwY0NvbW1lbnQyU3RyaW5nCWxwY1N0cmluZworICBIaUxpbmsgbHBjQ29tbWVudFNraXAJCWxwY0NvbW1lbnQKKyAgSGlMaW5rIGxwY0NvbW1lbnRGdW5jCQlscGNDb21tZW50CisKKyAgSGlMaW5rIGxwY0NwcFNraXAJCWxwY0NwcE91dAorICBIaUxpbmsgbHBjQ3BwT3V0MgkJbHBjQ3BwT3V0CisgIEhpTGluayBscGNDcHBPdXQJCWxwY0NvbW1lbnQKKworICAiIFN0YW5kYXJkIHR5cGUgYmVsb3cKKyAgSGlMaW5rIGxwY0FwcGxpZXMJCVNwZWNpYWwKKyAgSGlMaW5rIGxwY0NoYXJhY3RlcgkJQ2hhcmFjdGVyCisgIEhpTGluayBscGNDb21tZW50CQlDb21tZW50CisgIEhpTGluayBscGNDb25kaXRpb25hbAkJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGxwY0NvbnN0YW50CQlDb25zdGFudAorICBIaUxpbmsgbHBjRGVmaW5lCQlNYWNybworICBIaUxpbmsgbHBjRXJyb3IJCUVycm9yCisgIEhpTGluayBscGNGbG9hdAkJRmxvYXQKKyAgSGlMaW5rIGxwY0Z1bmN0aW9uCQlGdW5jdGlvbgorICBIaUxpbmsgbHBjSWRlbnRpZmllcgkJSWRlbnRpZmllcgorICBIaUxpbmsgbHBjSW5jbHVkZQkJSW5jbHVkZQorICBIaUxpbmsgbHBjTGFiZWwJCUxhYmVsCisgIEhpTGluayBscGNOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgbHBjT3BlcmF0b3IJCU9wZXJhdG9yCisgIEhpTGluayBscGNQcmVDb25kaXQJCVByZUNvbmRpdAorICBIaUxpbmsgbHBjUHJlUHJvYwkJUHJlUHJvYworICBIaUxpbmsgbHBjUmVwZWF0CQlSZXBlYXQKKyAgSGlMaW5rIGxwY1N0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBscGNTdG9yYWdlQ2xhc3MJU3RvcmFnZUNsYXNzCisgIEhpTGluayBscGNTdHJpbmcJCVN0cmluZworICBIaUxpbmsgbHBjU3RydWN0dXJlCQlTdHJ1Y3R1cmUKKyAgSGlMaW5rIGxwY1NwZWNpYWwJCUxpbmVOcgorICBIaUxpbmsgbHBjVG9kbwkJVG9kbworICBIaUxpbmsgbHBjVHlwZQkJVHlwZQorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisiIE5vZHVsZTogVGhpcyBpcyB0aGUgZW5kIG5vZHVsZS4ge3t7MQorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJscGMiCisKKyIgdmltOnRzPTg6bm9zdGE6c3c9MjphaTpzaToKKyIgdmltNjAwOnNldCBmZG09bWFya2VyOiB9fX0xCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9scHJvbG9nLnZpbSBiL3J1bnRpbWUvc3ludGF4L2xwcm9sb2cudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYzQyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9scHJvbG9nLnZpbQpAQCAtMCwwICsxLDEzNyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBMYW1iZGFQcm9sb2cgKFRleWp1cykKKyIgRmlsZW5hbWVzOiAgICAqLm1vZCAqLnNpZworIiBNYWludGFpbmVyOiAgIE1hcmt1cyBNb3R0bCAgPG1hcmt1c0BvZWZhaS5hdD4KKyIgVVJMOgkJaHR0cDovL3d3dy5haS51bml2aWUuYWMuYXQvfm1hcmt1cy92aW0vc3ludGF4L2xwcm9sb2cudmltCisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAxMQorIgkJMjAwMSBBcHIgMjYgLSBVcGdyYWRlZCBmb3IgbmV3IFZpbSB2ZXJzaW9uCisiCQkyMDAwIEp1biAgNSAtIEluaXRpYWwgcmVsZWFzZQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgTGFtYmRhIFByb2xvZyBpcyBjYXNlIHNlbnNpdGl2ZS4KK3N5biBjYXNlIG1hdGNoCisKK3N5biBtYXRjaCAgIGxwcm9sb2dCcmFja0VyciAgICAiXF0iCitzeW4gbWF0Y2ggICBscHJvbG9nUGFyZW5FcnIgICAgIikiCisKK3N5biBjbHVzdGVyIGxwcm9sb2dDb250YWluZWQgY29udGFpbnM9bHByb2xvZ1RvZG8sbHByb2xvZ01vZHVsZU5hbWUsbHByb2xvZ1R5cGVOYW1lcyxscHJvbG9nVHlwZU5hbWUKKworIiBFbmNsb3NpbmcgZGVsaW1pdGVycworc3luIHJlZ2lvbiAgbHByb2xvZ0VuY2wgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1scHJvbG9nS2V5d29yZCBzdGFydD0iKCIgbWF0Y2hncm91cD1scHJvbG9nS2V5d29yZCBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxAbHByb2xvZ0NvbnRhaW5lZCxscHJvbG9nUGFyZW5FcnIKK3N5biByZWdpb24gIGxwcm9sb2dFbmNsIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9bHByb2xvZ0tleXdvcmQgc3RhcnQ9IlxbIiBtYXRjaGdyb3VwPWxwcm9sb2dLZXl3b3JkIGVuZD0iXF0iIGNvbnRhaW5zPUFMTEJVVCxAbHByb2xvZ0NvbnRhaW5lZCxscHJvbG9nQnJhY2tFcnIKKworIiBHZW5lcmFsIGlkZW50aWZpZXJzCitzeW4gbWF0Y2ggICBscHJvbG9nSWRlbnRpZmllciAgIlw8XChcd1x8Wy0rKi9cXF48Pj1gJ34/QCMkJiFfXVwpKlw+Igorc3luIG1hdGNoICAgbHByb2xvZ1ZhcmlhYmxlICAgICJcPFwoXHVcfF9cKVwoXHdcfFstKyovXFxePD49YCd+P0AjJCYhXVwpKlw+IgorCitzeW4gbWF0Y2ggICBscHJvbG9nT3BlcmF0b3IgICIvIgorCisiIENvbW1lbnRzCitzeW4gcmVnaW9uICBscHJvbG9nQ29tbWVudCAgc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPWxwcm9sb2dDb21tZW50LGxwcm9sb2dUb2RvCitzeW4gcmVnaW9uICBscHJvbG9nQ29tbWVudCAgc3RhcnQ9IiUiIGVuZD0iJCIgY29udGFpbnM9bHByb2xvZ1RvZG8KK3N5biBrZXl3b3JkIGxwcm9sb2dUb2RvICBjb250YWluZWQgVE9ETyBGSVhNRSBYWFgKKworc3luIG1hdGNoICAgbHByb2xvZ0ludGVnZXIgICJcPFxkXCtcPiIKK3N5biBtYXRjaCAgIGxwcm9sb2dSZWFsICAgICAiXDxcKFxkXCtcKVw9XC5cZCtcPiIKK3N5biByZWdpb24gIGxwcm9sb2dTdHJpbmcgICBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCisKKyIgQ2xhdXNlIGRlZmluaXRpb25zCitzeW4gcmVnaW9uICBscHJvbG9nQ2xhdXNlIHN0YXJ0PSJeXHdcKyIgZW5kPSI6LVx8XC4iCisKKyIgTW9kdWxlcworc3luIHJlZ2lvbiAgbHByb2xvZ01vZHVsZSBtYXRjaGdyb3VwPWxwcm9sb2dLZXl3b3JkIHN0YXJ0PSJeXDxtb2R1bGVcPiIgbWF0Y2hncm91cD1scHJvbG9nS2V5d29yZCBlbmQ9IlwuIgorCisiIFR5cGVzCitzeW4gbWF0Y2ggICBscHJvbG9nS2V5d29yZCAiXlw8dHlwZVw+IiBza2lwd2hpdGUgbmV4dGdyb3VwPWxwcm9sb2dUeXBlTmFtZXMKK3N5biByZWdpb24gIGxwcm9sb2dUeXBlTmFtZXMgbWF0Y2hncm91cD1scHJvbG9nQnJhY2VFcnIgc3RhcnQ9Ilw8XHdcK1w+IiBtYXRjaGdyb3VwPWxwcm9sb2dLZXl3b3JkIGVuZD0iXC4iIGNvbnRhaW5lZCBjb250YWlucz1scHJvbG9nVHlwZU5hbWUsbHByb2xvZ09wZXJhdG9yCitzeW4gbWF0Y2ggICBscHJvbG9nVHlwZU5hbWUgIlw8XHdcK1w+IiBjb250YWluZWQKKworIiBLZXl3b3Jkcworc3luIGtleXdvcmQgbHByb2xvZ0tleXdvcmQgIGVuZCBpbXBvcnQgYWNjdW11bGF0ZSBhY2N1bV9zaWcKK3N5biBrZXl3b3JkIGxwcm9sb2dLZXl3b3JkICBsb2NhbCBsb2NhbGtpbmQgY2xvc2VkIHNpZworc3luIGtleXdvcmQgbHByb2xvZ0tleXdvcmQgIGtpbmQgZXhwb3J0ZGVmIHVzZW9ubHkKK3N5biBrZXl3b3JkIGxwcm9sb2dLZXl3b3JkICBpbmZpeGwgaW5maXhyIGluZml4IHByZWZpeAorc3luIGtleXdvcmQgbHByb2xvZ0tleXdvcmQgIHByZWZpeHIgcG9zdGZpeCBwb3N0Zml4bAorCitzeW4ga2V5d29yZCBscHJvbG9nU3BlY2lhbCAgcGkgc2lnbWEgaXMgdHJ1ZSBmYWlsIGhhbHQgc3RvcCBub3QKKworIiBPcGVyYXRvcnMKK3N5biBtYXRjaCAgIGxwcm9sb2dTcGVjaWFsICI6LSIKK3N5biBtYXRjaCAgIGxwcm9sb2dTcGVjaWFsICItPiIKK3N5biBtYXRjaCAgIGxwcm9sb2dTcGVjaWFsICI9PiIKK3N5biBtYXRjaCAgIGxwcm9sb2dTcGVjaWFsICJcXCIKK3N5biBtYXRjaCAgIGxwcm9sb2dTcGVjaWFsICIhIgorCitzeW4gbWF0Y2ggICBscHJvbG9nU3BlY2lhbCAiLCIKK3N5biBtYXRjaCAgIGxwcm9sb2dTcGVjaWFsICI7Igorc3luIG1hdGNoICAgbHByb2xvZ1NwZWNpYWwgIiYiCisKK3N5biBtYXRjaCAgIGxwcm9sb2dPcGVyYXRvciAiKyIKK3N5biBtYXRjaCAgIGxwcm9sb2dPcGVyYXRvciAiLSIKK3N5biBtYXRjaCAgIGxwcm9sb2dPcGVyYXRvciAiKiIKK3N5biBtYXRjaCAgIGxwcm9sb2dPcGVyYXRvciAiXH4iCitzeW4gbWF0Y2ggICBscHJvbG9nT3BlcmF0b3IgIlxeIgorc3luIG1hdGNoICAgbHByb2xvZ09wZXJhdG9yICI8Igorc3luIG1hdGNoICAgbHByb2xvZ09wZXJhdG9yICI+Igorc3luIG1hdGNoICAgbHByb2xvZ09wZXJhdG9yICI9PCIKK3N5biBtYXRjaCAgIGxwcm9sb2dPcGVyYXRvciAiPj0iCitzeW4gbWF0Y2ggICBscHJvbG9nT3BlcmF0b3IgIjo6Igorc3luIG1hdGNoICAgbHByb2xvZ09wZXJhdG9yICI9IgorCitzeW4gbWF0Y2ggICBscHJvbG9nT3BlcmF0b3IgIlwuIgorc3luIG1hdGNoICAgbHByb2xvZ09wZXJhdG9yICI6Igorc3luIG1hdGNoICAgbHByb2xvZ09wZXJhdG9yICJ8IgorCitzeW4gbWF0Y2ggICBscHJvbG9nQ29tbWVudEVyciAgIlwqLyIKKworc3luIHN5bmMgbWlubGluZXM9NTAKK3N5biBzeW5jIG1heGxpbmVzPTUwMAorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2xwcm9sb2dfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbHByb2xvZ19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBscHJvbG9nQ29tbWVudCAgICAgQ29tbWVudAorICBIaUxpbmsgbHByb2xvZ1RvZG8JICAgIFRvZG8KKworICBIaUxpbmsgbHByb2xvZ0tleXdvcmQgICAgIEtleXdvcmQKKyAgSGlMaW5rIGxwcm9sb2dTcGVjaWFsICAgICBTcGVjaWFsCisgIEhpTGluayBscHJvbG9nT3BlcmF0b3IgICAgT3BlcmF0b3IKKyAgSGlMaW5rIGxwcm9sb2dJZGVudGlmaWVyICBOb3JtYWwKKworICBIaUxpbmsgbHByb2xvZ0ludGVnZXIgICAgIE51bWJlcgorICBIaUxpbmsgbHByb2xvZ1JlYWwJICAgIE51bWJlcgorICBIaUxpbmsgbHByb2xvZ1N0cmluZwkgICAgU3RyaW5nCisKKyAgSGlMaW5rIGxwcm9sb2dDb21tZW50RXJyICBFcnJvcgorICBIaUxpbmsgbHByb2xvZ0JyYWNrRXJyICAgIEVycm9yCisgIEhpTGluayBscHJvbG9nUGFyZW5FcnIgICAgRXJyb3IKKworICBIaUxpbmsgbHByb2xvZ01vZHVsZU5hbWUgIFNwZWNpYWwKKyAgSGlMaW5rIGxwcm9sb2dUeXBlTmFtZSAgICBJZGVudGlmaWVyCisKKyAgSGlMaW5rIGxwcm9sb2dWYXJpYWJsZSAgICBLZXl3b3JkCisgIEhpTGluayBscHJvbG9nQXRvbQkgICAgTm9ybWFsCisgIEhpTGluayBscHJvbG9nQ2xhdXNlCSAgICBUeXBlCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImxwcm9sb2ciCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9sc2NyaXB0LnZpbSBiL3J1bnRpbWUvc3ludGF4L2xzY3JpcHQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OGEwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9sc2NyaXB0LnZpbQpAQCAtMCwwICsxLDIxMyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUxvdHVzU2NyaXB0CisiIE1haW50YWluZXI6CVRhcnluIEVhc3QgKHRhcnluZWFzdEBob3RtYWlsLmNvbSkKKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisKKyIgVGhpcyBpcyBhIHJvdWdoICBhbWFsZ2FtYXRpb24gb2YgdGhlIHZpc3VhbCBiYXNpYyBzeW50YXggZmlsZSwgYW5kIHRoZSBVbHRyYUVkaXQKKyIgYW5kIFRleHRwYWQgc3ludGF4IGhpZ2hsaWdodGVycy4KKyIgSXQncyBub3QgdG9vIGJyaWxsaWFudCBnaXZlbiB0aGF0IGEpIEkndmUgbmV2ZXIgd3JpdHRlbiBhIHN5bnRheC52aW0gZmlsZSBiZWZvcmUKKyIgYW5kIGIpIEknbSBub3Qgc28gY3Jhc2ggaG90IGF0IExvdHVzU2NyaXB0IGVpdGhlci4gSWYgeW91IHNlZSBhbnkgcHJvYmxlbXMKKyIgZmVlbCBmcmVlIHRvIGVtYWlsIG1lIHdpdGggdGhlbS4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIExvdHVzU2NyaXB0IGlzIGNhc2UgaW5zZW5zaXRpdmUKK3N5biBjYXNlIGlnbm9yZQorCisiIFRoZXNlIGFyZSBOb3RlcyB0aGluZ2llcyB0aGF0IGhhZCBhbiBlcXVpdmFsZW50IGluIHRoZSB2YiBoaWdobGlnaHRlcgorIiBvciBJIHdhcyBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlbQorc3luIGtleXdvcmQgbHNjcmlwdFN0YXRlbWVudCBBY3RpdmF0ZUFwcCBBcyBBbmQgQmFzZSBCZWVwIENhbGwgQ2FzZSBDaERpciBDaERyaXZlIENsYXNzCitzeW4ga2V5d29yZCBsc2NyaXB0U3RhdGVtZW50IENvbnN0IERpbSBEZWNsYXJlIERlZkN1ciBEZWZEYmwgRGVmSW50IERlZkxuZyBEZWZTbmcgRGVmU3RyCitzeW4ga2V5d29yZCBsc2NyaXB0U3RhdGVtZW50IERlZlZhciBEbyBFbHNlICVFbHNlIEVsc2VJZiAlRWxzZUlmIEVuZCAlRW5kIEVyYXNlIEV2ZW50IEV4aXQKK3N5biBrZXl3b3JkIGxzY3JpcHRTdGF0ZW1lbnQgRXhwbGljaXQgRmlsZUNvcHkgRkFMU0UgRm9yIEZvckFsbCBGdW5jdGlvbiBHZXQgR29UbyBHb1N1Ygorc3luIGtleXdvcmQgbHNjcmlwdFN0YXRlbWVudCBJZiAlSWYgSW4gSXMgS2lsbCBMZXQgTGlzdCBMb2NrIExvb3AgTWtEaXIKK3N5biBrZXl3b3JkIGxzY3JpcHRTdGF0ZW1lbnQgTmFtZSBOZXh0IE5ldyBOb0Nhc2UgTm9QaXRjaCBOb3QgTm90aGluZyBOVUxMCitzeW4ga2V5d29yZCBsc2NyaXB0U3RhdGVtZW50IE9uIE9wdGlvbiBPciBQSSBQaXRjaCBQcmVzZXJ2ZSBQcml2YXRlIFB1YmxpYworc3luIGtleXdvcmQgbHNjcmlwdFN0YXRlbWVudCBQcm9wZXJ0eSBQdWJsaWMgUHV0CitzeW4ga2V5d29yZCBsc2NyaXB0U3RhdGVtZW50IFJhbmRvbWl6ZSBSZURpbSBSZXNldCBSZXN1bWUgUmV0dXJuIFJtRGlyCitzeW4ga2V5d29yZCBsc2NyaXB0U3RhdGVtZW50IFNlbGVjdCBTZW5kS2V5cyBTZXRGaWxlQXR0ciBTZXQgU3RhdGljIFN1YiBUaGVuIFRvIFRSVUUKK3N5biBrZXl3b3JkIGxzY3JpcHRTdGF0ZW1lbnQgVHlwZSBVbmxvY2sgVW50aWwgV2hpbGUgV0VuZCBXaXRoIFdyaXRlIFhPcgorCitzeW4ga2V5d29yZCBsc2NyaXB0RGF0YXR5cGUgQXJyYXkgQ3VycmVuY3kgRG91YmxlIEludGVnZXIgTG9uZyBTaW5nbGUgU3RyaW5nIFN0cmluZyQgVmFyaWFudAorCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNUeXBlIEZpZWxkIEJ1dHRvbiBOYXZpZ2F0b3IKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc1R5cGUgTm90ZXNBQ0wgTm90ZXNBQ0xFbnRyeSBOb3Rlc0FnZW50IE5vdGVzRGF0YWJhc2UgTm90ZXNEYXRlUmFuZ2UKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc1R5cGUgTm90ZXNEYXRlVGltZSBOb3Rlc0RiRGlyZWN0b3J5IE5vdGVzRG9jdW1lbnQKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc1R5cGUgTm90ZXNEb2N1bWVudENvbGxlY3Rpb24gTm90ZXNFbWJlZGRlZE9iamVjdCBOb3Rlc0Zvcm0KK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc1R5cGUgTm90ZXNJbnRlcm5hdGlvbmFsIE5vdGVzSXRlbSBOb3Rlc0xvZyBOb3Rlc05hbWUgTm90ZXNOZXdzTGV0dGVyCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNUeXBlIE5vdGVzTUlNRUVudHJ5IE5vdGVzT3V0bGluZSBOb3Rlc091dGxpbmVFbnRyeSBOb3Rlc1JlZ2lzdHJhdGlvbgorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzVHlwZSBOb3Rlc1JlcGxpY2F0aW9uIE5vdGVzUmljaFRleHRJdGVtIE5vdGVzUmljaFRleHRQYXJhZ3JhcGhTdHlsZQorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzVHlwZSBOb3Rlc1JpY2hUZXh0U3R5bGUgTm90ZXNSaWNoVGV4dFRhYgorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzVHlwZSBOb3Rlc1Nlc3Npb24gTm90ZXNUaW1lciBOb3Rlc1ZpZXcgTm90ZXNWaWV3Q29sdW1uIE5vdGVzVmlld0VudHJ5CitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNUeXBlIE5vdGVzVmlld0VudHJ5Q29sbGVjdGlvbiBOb3Rlc1ZpZXdOYXZpZ2F0b3IgTm90ZXNVSURhdGFiYXNlCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNUeXBlIE5vdGVzVUlEb2N1bWVudCBOb3Rlc1VJVmlldyBOb3Rlc1VJV29ya3NwYWNlCisKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IEFDTExFVkVMX0FVVEhPUiBBQ0xMRVZFTF9ERVBPU0lUT1IgQUNMTEVWRUxfREVTSUdORVIKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IEFDTExFVkVMX0VESVRPUiBBQ0xMRVZFTF9NQU5BR0VSIEFDTExFVkVMX05PQUNDRVNTCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBBQ0xMRVZFTF9SRUFERVIgQUNMVFlQRV9NSVhFRF9HUk9VUCBBQ0xUWVBFX1BFUlNPTgorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgQUNMVFlQRV9QRVJTT05fR1JPVVAgQUNMVFlQRV9TRVJWRVIgQUNMVFlQRV9TRVJWRVJfR1JPVVAKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IEFDTFRZUEVfVU5TUEVDSUZJRUQgQUNUSU9OQ0QgQUxJR05fQ0VOVEVSCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBBTElHTl9GVUxMIEFMSUdOX0xFRlQgQUxJR05fTk9XUkFQIEFMSUdOX1JJR0hUCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBBU1NJU1RBTlRJTkZPIEFUVEFDSE1FTlQgQVVUSE9SUyBDT0xPUl9CTEFDSworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgQ09MT1JfQkxVRSBDT0xPUl9DWUFOIENPTE9SX0RBUktfQkxVRSBDT0xPUl9EQVJLX0NZQU4KK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IENPTE9SX0RBUktfR1JFRU4gQ09MT1JfREFSS19NQUdFTlRBIENPTE9SX0RBUktfUkVECitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBDT0xPUl9EQVJLX1lFTExPVyBDT0xPUl9HUkFZIENPTE9SX0dSRUVOIENPTE9SX0xJR0hUX0dSQVkKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IENPTE9SX01BR0VOVEEgQ09MT1JfUkVEIENPTE9SX1dISVRFIENPTE9SX1lFTExPVworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgREFUQUJBU0UgREFURVRJTUVTIERCX1JFUExJQ0FUSU9OX1BSSU9SSVRZX0hJR0gKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IERCX1JFUExJQ0FUSU9OX1BSSU9SSVRZX0xPVyBEQl9SRVBMSUNBVElPTl9QUklPUklUWV9NRUQKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IERCX1JFUExJQ0FUSU9OX1BSSU9SSVRZX05PVFNFVCBFRkZFQ1RTX0VNQk9TUworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgRUZGRUNUU19FWFRSVURFIEVGRkVDVFNfTk9ORSBFRkZFQ1RTX1NIQURPVworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgRUZGRUNUU19TVUJTQ1JJUFQgRUZGRUNUU19TVVBFUlNDUklQVCBFTUJFRF9BVFRBQ0hNRU5UCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBFTUJFRF9PQkpFQ1QgRU1CRURfT0JKRUNUTElOSyBFTUJFRERFRE9CSkVDVCBFUlJPUklURU0KK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IEVWX0FMQVJNIEVWX0NPTU0gRVZfTUFJTCBFVl9NSVNDIEVWX1JFUExJQ0EgRVZfUkVTT1VSQ0UKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IEVWX1NFQ1VSSVRZIEVWX1NFUlZFUiBFVl9VTktOT1dOIEVWX1VQREFURSBGT05UX0NPVVJJRVIKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IEZPTlRfSEVMViBGT05UX1JPTUFOIEZPUk1VTEEgRlRfREFUQUJBU0UgRlRfREFURV9BU0MKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IEZUX0RBVEVfREVTIEZUX0ZJTEVTWVNURU0gRlRfRlVaWlkgRlRfU0NPUkVTIEZUX1NURU1TCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBGVF9USEVTQVVSVVMgSFRNTCBJQ09OIElEX0NFUlRJRklFUiBJRF9GTEFUCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBJRF9ISUVSQVJDSElDQUwgTFNPQkpFQ1QgTUlNRV9QQVJUIE5BTUVTIE5PVEVTTElOS1MKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IE5PVEVSRUZTIE5PVEVTX0RFU0tUT1BfQ0xJRU5UIE5PVEVTX0ZVTExfQ0xJRU5UCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBOT1RFU19MSU1JVEVEX0NMSUVOVCBOVU1CRVJTIE9USEVST0JKRUNUCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBPVVRMSU5FX0NMQVNTX0RBVEFCQVNFIE9VVExJTkVfQ0xBU1NfRE9DVU1FTlQKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IE9VVExJTkVfQ0xBU1NfRk9MREVSIE9VVExJTkVfQ0xBU1NfRk9STQorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgT1VUTElORV9DTEFTU19GUkFNRVNFVCBPVVRMSU5FX0NMQVNTX05BVklHQVRPUgorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgT1VUTElORV9DTEFTU19QQUdFIE9VVExJTkVfQ0xBU1NfVU5LTk9XTgorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgT1VUTElORV9DTEFTU19WSUVXIE9VVExJTkVfT1RIRVJfRk9MREVSU19UWVBFCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBPVVRMSU5FX09USEVSX1VOS05PV05fVFlQRSBPVVRMSU5FX09USEVSX1ZJRVdTX1RZUEUKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IE9VVExJTkVfVFlQRV9BQ1RJT04gT1VUTElORV9UWVBFX05BTUVERUxFTUVOVAorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgT1VUTElORV9UWVBFX05PVEVMSU5LIE9VVExJTkVfVFlQRV9VUkwgUEFHSU5BVEVfQkVGT1JFCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBQQUdJTkFURV9ERUZBVUxUIFBBR0lOQVRFX0tFRVBfVE9HRVRIRVIKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IFBBR0lOQVRFX0tFRVBfV0lUSF9ORVhUIFBJQ0tMSVNUX0NVU1RPTSBQSUNLTElTVF9OQU1FUworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgUElDS0xJU1RfUkVTT1VSQ0VTIFBJQ0tMSVNUX1JPT01TIFBST01QVF9PSyBQUk9NUFRfT0tDQU5DRUxDT01CTworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgUFJPTVBUX09LQ0FOQ0VMRURJVCBQUk9NUFRfT0tDQU5DRUxFRElUQ09NQk8gUFJPTVBUX09LQ0FOQ0VMTElTVAorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgUFJPTVBUX09LQ0FOQ0VMTElTVE1VTFQgUFJPTVBUX1BBU1NXT1JEIFBST01QVF9ZRVNOTworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgUFJPTVBUX1lFU05PQ0FOQ0VMIFFVRVJZQ0QgUkVBREVSUyBSRVBMSUNBX0NBTkRJREFURQorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgUklDSFRFWFQgUlVMRVJfT05FX0NFTlRJTUVURVIgUlVMRVJfT05FX0lOQ0ggU0VWX0ZBSUxVUkUKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IFNFVl9GQVRBTCBTRVZfTk9STUFMIFNFVl9XQVJOSU5HMSBTRVZfV0FSTklORzIKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IFNJR05BVFVSRSBTUEFDSU5HX0RPVUJMRSBTUEFDSU5HX09ORV9QT0lOVF81MAorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgU1BBQ0lOR19TSU5HTEUgU1RZTEVfTk9fQ0hBTkdFIFRBQl9DRU5URVIgVEFCX0RFQ0lNQUwKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IFRBQl9MRUZUIFRBQl9SSUdIVCBUQVJHRVRfQUxMX0RPQ1MgVEFSR0VUX0FMTF9ET0NTX0lOX1ZJRVcKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IFRBUkdFVF9ORVdfRE9DUyBUQVJHRVRfTkVXX09SX01PRElGSUVEX0RPQ1MgVEFSR0VUX05PTkUKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IFRBUkdFVF9SVU5fT05DRSBUQVJHRVRfU0VMRUNURURfRE9DUyBUQVJHRVRfVU5SRUFEX0RPQ1NfSU5fVklFVworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgVEVNUExBVEUgVEVNUExBVEVfQ0FORElEQVRFIFRFWFQgVFJJR0dFUl9BRlRFUl9NQUlMX0RFTElWRVJZCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBUUklHR0VSX0JFRk9SRV9NQUlMX0RFTElWRVJZIFRSSUdHRVJfRE9DX1BBU1RFRAorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgVFJJR0dFUl9ET0NfVVBEQVRFIFRSSUdHRVJfTUFOVUFMIFRSSUdHRVJfTk9ORQorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgVFJJR0dFUl9TQ0hFRFVMRUQgVU5BVkFJTEFCTEUgVU5LTk9XTiBVU0VSREFUQQorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgVVNFUklEIFZDX0FMSUdOX0NFTlRFUiBWQ19BTElHTl9MRUZUIFZDX0FMSUdOX1JJR0hUCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBWQ19BVFRSX1BBUkVOUyBWQ19BVFRSX1BVTkNUVUFURUQgVkNfQVRUUl9QRVJDRU5UCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBWQ19GTVRfQUxXQVlTIFZDX0ZNVF9DVVJSRU5DWSBWQ19GTVRfREFURSBWQ19GTVRfREFURVRJTUUKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IFZDX0ZNVF9GSVhFRCBWQ19GTVRfR0VORVJBTCBWQ19GTVRfSE0gVkNfRk1UX0hNUworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgVkNfRk1UX01EIFZDX0ZNVF9ORVZFUiBWQ19GTVRfU0NJRU5USUZJQworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgVkNfRk1UX1NPTUVUSU1FUyBWQ19GTVRfVElNRSBWQ19GTVRfVE9EQVlUSU1FIFZDX0ZNVF9ZTQorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgVkNfRk1UX1lNRCBWQ19GTVRfWTRNIFZDX0ZPTlRfQk9MRCBWQ19GT05UX0lUQUxJQworc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgVkNfRk9OVF9TVFJJS0VPVVQgVkNfRk9OVF9VTkRFUkxJTkUgVkNfU0VQX0NPTU1BCitzeW4ga2V5d29yZCBsc2NyaXB0Tm90ZXNDb25zdCBWQ19TRVBfTkVXTElORSBWQ19TRVBfU0VNSUNPTE9OIFZDX1NFUF9TUEFDRQorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgVklFV01BUERBVEEgVklFV01BUExBWU9VVCBWV19TUEFDSU5HX0RPVUJMRQorc3luIGtleXdvcmQgbHNjcmlwdE5vdGVzQ29uc3QgVldfU1BBQ0lOR19PTkVfUE9JTlRfMjUgVldfU1BBQ0lOR19PTkVfUE9JTlRfNTAKK3N5biBrZXl3b3JkIGxzY3JpcHROb3Rlc0NvbnN0IFZXX1NQQUNJTkdfT05FX1BPSU5UXzc1IFZXX1NQQUNJTkdfU0lOR0xFCisKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBBYnMgQXNjIEF0biBBdG4yIEFDb3MgQVNpbgorc3luIGtleXdvcmQgbHNjcmlwdEZ1bmN0aW9uIENDdXIgQ0RhdCBDRGJsIENociBDaHIkIENJbnQgQ0xuZyBDb21tYW5kIENvbW1hbmQkCitzeW4ga2V5d29yZCBsc2NyaXB0RnVuY3Rpb24gQ29zIENTbmcgQ1N0cgorc3luIGtleXdvcmQgbHNjcmlwdEZ1bmN0aW9uIEN1ckRpciBDdXJEaXIkIENWYXIgRGF0ZSBEYXRlJCBEYXRlTnVtYmVyIERhdGVTZXJpYWwgRGF0ZVZhbHVlCitzeW4ga2V5d29yZCBsc2NyaXB0RnVuY3Rpb24gRGF5IERpciBEaXIkIEVudmlyb24kIEVudmlyb24gRU9GIEVycm9yIEVycm9yJCBFdmFsdWF0ZSBFeHAKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBGaWxlQXR0ciBGaWxlRGF0ZVRpbWUgRmlsZUxlbiBGaXggRm9ybWF0IEZvcm1hdCQgRnJlZUZpbGUKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBHZXRGaWxlQXR0ciBHZXRUaHJlYWRJbmZvIEhleCBIZXgkIEhvdXIKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBJTUVTZXRNb2RlIElNRVN0YXR1cyBJbnB1dCBJbnB1dCQgSW5wdXRCIElucHV0QiQKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBJbnB1dEJQIElucHV0QlAkIElucHV0Qm94IElucHV0Qm94JCBJblN0ciBJblN0ckIgSW5TdHJCUCBJbnN0ckMKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBJc0EgSXNBcnJheSBJc0RhdGUgSXNFbGVtZW50IElzTGlzdCBJc051bWVyaWMKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBJc09iamVjdCBJc1Jlc3BvbnNlIElzU2NhbGFyIElzVW5rbm93biBMQ2FzZSBMQ2FzZSQKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBMZWZ0IExlZnQkIExlZnRCIExlZnRCJCBMZWZ0Qworc3luIGtleXdvcmQgbHNjcmlwdEZ1bmN0aW9uIExlZnRCUCBMZWZ0QlAkIExlbiBMZW5CIExlbkJQIExlbkMgTG9jIExPRiBMb2cKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBMU2V0IExUcmltIExUcmltJCBNZXNzYWdlQm94IE1pZCBNaWQkIE1pZEIgTWlkQiQgTWlkQworc3luIGtleXdvcmQgbHNjcmlwdEZ1bmN0aW9uIE1pbnV0ZSBNb250aCBOb3cgT2N0IE9jdCQgUmVzcG9uc2VzIFJpZ2h0IFJpZ2h0JAorc3luIGtleXdvcmQgbHNjcmlwdEZ1bmN0aW9uIFJpZ2h0QiBSaWdodEIkIFJpZ2h0QlAgUmlnaHRCUCQgUmlnaHRDIFJvdW5kIFJuZCBSU2V0IFJUcmltIFJUcmltJAorc3luIGtleXdvcmQgbHNjcmlwdEZ1bmN0aW9uIFNlY29uZCBTZWVrIFNnbiBTaGVsbCBTaW4gU2xlZXAgU3BhY2UgU3BhY2UkIFNwYyBTcXIgU3RyIFN0ciQKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBTdHJDb252IFN0ckxlZnQgU3RybGVmdEJhY2sgU3RyUmlnaHQgU3RyUmlnaHRCYWNrCitzeW4ga2V5d29yZCBsc2NyaXB0RnVuY3Rpb24gU3RyQ29tcGFyZSBUYWIgVGFuIFRpbWUgVGltZSQgVGltZU51bWJlciBUaW1lcgorc3luIGtleXdvcmQgbHNjcmlwdEZ1bmN0aW9uIFRpbWVWYWx1ZSBUcmltIFRyaW0kIFRvZGF5IFR5cGVOYW1lIFVDYXNlIFVDYXNlJAorc3luIGtleXdvcmQgbHNjcmlwdEZ1bmN0aW9uIFVuaXZlcnNhbElEIFZhbCBXZWVrZGF5IFllYXIKKworc3luIGtleXdvcmQgbHNjcmlwdE1ldGhvZHMgQXBwZW5kVG9UZXh0TGlzdCBBcnJheUFwcGVuZCBBcnJheVJlcGxhY2UgQXJyYXlHZXRJbmRleAorc3luIGtleXdvcmQgbHNjcmlwdE1ldGhvZHMgQXBwZW5kIEJpbmQgQ2xvc2UKKyJzeW4ga2V5d29yZCBsc2NyaXB0TWV0aG9kcyBDb250YWlucworc3luIGtleXdvcmQgbHNjcmlwdE1ldGhvZHMgQ29weVRvRGF0YWJhc2UgQ29weUFsbEl0ZW1zIENvdW50IEN1cnJlbnREYXRhYmFzZSBEZWxldGUgRXhlY3V0ZQorc3luIGtleXdvcmQgbHNjcmlwdE1ldGhvZHMgR2V0QWxsRG9jdW1lbnRzQnlLZXkgR2V0RGF0YWJhc2UgR2V0RG9jdW1lbnRCeUtleQorc3luIGtleXdvcmQgbHNjcmlwdE1ldGhvZHMgR2V0RG9jdW1lbnRCeVVOSUQgR2V0Rmlyc3REb2N1bWVudCBHZXRGaXJzdEl0ZW0KK3N5biBrZXl3b3JkIGxzY3JpcHRNZXRob2RzIEdldEl0ZW1zIEdldEl0ZW1WYWx1ZSBHZXROdGhEb2N1bWVudCBHZXRWaWV3CitzeW4ga2V5d29yZCBsc2NyaXB0TWV0aG9kcyBJc0VtcHR5IElzTnVsbCAlSW5jbHVkZSBJdGVtcworc3luIGtleXdvcmQgbHNjcmlwdE1ldGhvZHMgTGluZSBMQm91bmQgTG9hZE1zZ1RleHQgT3BlbiBQcmludAorc3luIGtleXdvcmQgbHNjcmlwdE1ldGhvZHMgUmFpc2VFdmVudCBSZXBsYWNlSXRlbVZhbHVlIFJlbW92ZSBSZW1vdmVJdGVtIFJlc3BvbnNlcworc3luIGtleXdvcmQgbHNjcmlwdE1ldGhvZHMgU2F2ZSBTdG9wIFVCb3VuZCBVbnByb2Nlc3NlZERvY3VtZW50cyBXcml0ZQorCitzeW4ga2V5d29yZCBsc2NyaXB0RXZlbnRzIENvbXBhcmUgT25FcnJvcgorCisiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIlRoZXNlIGFyZSBOb3RlcyB0aGluZ2llcyB0aGF0IEknbSBub3Qgc3VyZSBob3cgdG8gY2xhc3NpZnkgYXMgdGhleSBoYWQgbm8gdmIgZXF1aXZhbGVudAorIiBBdCBhIHdpbGQgZ3Vlc3MgSSdkIHB1dCB0aGVtIGFzIEZ1bmN0aW9ucy4uLgorIiBpZiBhbnlvbmUgc2VlcyBzb21ldGhpbmcgcmVhbGx5IG91dCBvZiBwbGFjZS4uLiB0ZWxsIG1lIQorCitzeW4ga2V5d29yZCBsc2NyaXB0RnVuY3Rpb24gQWNjZXNzIEFsaWFzIEFueSBCaW4gQmluJCBCaW5hcnkgQnlWYWwKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBDb2RlTG9jayBDb2RlTG9ja0NoZWNrIENvZGVVbmxvY2sgQ3JlYXRlTG9jaworc3luIGtleXdvcmQgbHNjcmlwdEZ1bmN0aW9uIEN1ckRyaXZlIEN1ckRyaXZlJCBEYXRhVHlwZSBEZXN0cm95TG9jayBFcXYKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBFcmwgRXJyIEZyYWN0aW9uIEZyb20gRnJvbUZ1bmN0aW9uIEZ1bGxUcmltCitzeW4ga2V5d29yZCBsc2NyaXB0RnVuY3Rpb24gSW1wIEludCBMaWIgTGlrZSBMaXN0VGFnIExNQkNTIExTU2VydmVyIE1lCitzeW4ga2V5d29yZCBsc2NyaXB0RnVuY3Rpb24gTW9kIE1zZ0Rlc2NyaXB0aW9uIE1zZ1RleHQgT3V0cHV0IFB1Ymxpc2hlZAorc3luIGtleXdvcmQgbHNjcmlwdEZ1bmN0aW9uIFJhbmRvbSBSZWFkIFNoYXJlZCBTdGVwIFVDaHIgVUNociQgVW5pIFVuaWNvZGUKK3N5biBrZXl3b3JkIGxzY3JpcHRGdW5jdGlvbiBVbnRpbCBVc2UgVXNlTFNYIFVTdHJpbmcgVVN0cmluZyQgV2lkdGggWWllbGQKKworCitzeW4ga2V5d29yZCBsc2NyaXB0VG9kbyBjb250YWluZWQJVE9ETworCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90Lgorc3luIG1hdGNoICBsc2NyaXB0TnVtYmVyCQkiXDxcZFwrXD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRoIGRvdAorc3luIG1hdGNoICBsc2NyaXB0TnVtYmVyCQkiXDxcZFwrXC5cZCpcPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QKK3N5biBtYXRjaCAgbHNjcmlwdE51bWJlcgkJIlwuXGRcK1w+IgorCisiIFN0cmluZyBhbmQgQ2hhcmFjdGVyIGNvbnN0YW50cworc3luIHJlZ2lvbiAgbHNjcmlwdFN0cmluZwkJc3RhcnQ9KyIrICBlbmQ9KyIrCitzeW4gcmVnaW9uICBsc2NyaXB0Q29tbWVudAkJc3RhcnQ9IlJFTSIgZW5kPSIkIiBjb250YWlucz1sc2NyaXB0VG9kbworc3luIHJlZ2lvbiAgbHNjcmlwdENvbW1lbnQJCXN0YXJ0PSInIiAgIGVuZD0iJCIgY29udGFpbnM9bHNjcmlwdFRvZG8KK3N5biByZWdpb24gIGxzY3JpcHRMaW5lTnVtYmVyCXN0YXJ0PSJeXGQiIGVuZD0iXHMiCitzeW4gbWF0Y2ggICBsc2NyaXB0VHlwZVNwZWNpZmllcgkiW2EtekEtWjAtOV1bXCQlJiEjXSJtcz1zKzEKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbHNjcmlwdF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9sc2NyaXB0X3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgaGkgbHNjcmlwdE5vdGVzVHlwZQl0ZXJtPXVuZGVybGluZSBjdGVybWZnPURhcmtHcmVlbiBndWlmZz1TZWFHcmVlbiBndWk9Ym9sZAorCisgIEhpTGluayBsc2NyaXB0Tm90ZXNDb25zdAlsc2NyaXB0Tm90ZXNUeXBlCisgIEhpTGluayBsc2NyaXB0TGluZU51bWJlcglDb21tZW50CisgIEhpTGluayBsc2NyaXB0RGF0YXR5cGUJVHlwZQorICBIaUxpbmsgbHNjcmlwdE51bWJlcgkJTnVtYmVyCisgIEhpTGluayBsc2NyaXB0RXJyb3IJCUVycm9yCisgIEhpTGluayBsc2NyaXB0U3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgbHNjcmlwdFN0cmluZwkJU3RyaW5nCisgIEhpTGluayBsc2NyaXB0Q29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgbHNjcmlwdFRvZG8JCVRvZG8KKyAgSGlMaW5rIGxzY3JpcHRGdW5jdGlvbglJZGVudGlmaWVyCisgIEhpTGluayBsc2NyaXB0TWV0aG9kcwkJUHJlUHJvYworICBIaUxpbmsgbHNjcmlwdEV2ZW50cwkJU3BlY2lhbAorICBIaUxpbmsgbHNjcmlwdFR5cGVTcGVjaWZpZXIJVHlwZQorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJsc2NyaXB0IgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbHNzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2xzcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyMDcwMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2xzcy52aW0KQEAgLTAsMCArMSwxMzMgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglMeW54IDIuNy4xIHN0eWxlIGZpbGUKKyIgTWFpbnRhaW5lcjoJU2NvdHQgQmlnaGFtIDxkc2JAY3MuZHVrZS5lZHU+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgVGhpcyBzZXR1cCBpcyBwcm9iYWJseSBhdHlwaWNhbCBmb3IgYSBzeW50YXggaGlnaGxpZ2h0aW5nIGZpbGUsIGJlY2F1c2UKKyIgbW9zdCBvZiBpdCBpcyBub3QgcmVhbGx5IGludGVuZGVkIHRvIGJlIG92ZXJyaWRlYWJsZS4gIEluc3RlYWQsIHRoZQorIiBoaWdobGlnaHRpbmcgaXMgc3VwcG9zZWQgdG8gY29ycmVzcG9uZCB0byB0aGUgaGlnaGxpZ2h0aW5nIHNwZWNpZmllZCBieQorIiB0aGUgLmxzcyBmaWxlIGVudHJpZXMgdGhlbXNlbHZlczsgaWUuIHRoZSAiYm9sZCIga2V5d29yZCBzaG91bGQgYmUgYm9sZCwKKyIgdGhlICJyZWQiIGtleXdvcmQgc2hvdWxkIGJlIHJlZCwgYW5kIHNvIGZvcnRoLiAgVGhlIGV4Y2VwdGlvbnMgdG8gdGhpcworIiBhcmUgY29tbWVudHMsIG9mIGNvdXJzZSwgYW5kIHRoZSBpbml0aWFsIGtleXdvcmQgaWRlbnRpZnlpbmcgdGhlIGFmZmVjdGVkCisiIGVsZW1lbnQsIHdoaWNoIHdpbGwgaW5oZXJpdCB0aGUgdXN1YWwgSWRlbnRpZmllciBoaWdobGlnaHRpbmcuCisKK3N5biBtYXRjaCBsc3NFbGVtZW50ICJeW146XVwrIiBuZXh0Z3JvdXA9bHNzTW9ubworCitzeW4gbWF0Y2ggbHNzTW9ubyAiOlteOl1cKyIgY29udGFpbmVkIG5leHRncm91cD1sc3NGZ0NvbG9yIGNvbnRhaW5zPWxzc1JldmVyc2UsbHNzVW5kZXJsaW5lLGxzc0JvbGQsbHNzU3RhbmRvdXQKKworc3luIGtleXdvcmQJbHNzQm9sZAkJYm9sZAkJY29udGFpbmVkCitzeW4ga2V5d29yZAlsc3NSZXZlcnNlCXJldmVyc2UJCWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzVW5kZXJsaW5lCXVuZGVybGluZQljb250YWluZWQKK3N5biBrZXl3b3JkCWxzc1N0YW5kb3V0CXN0YW5kb3V0CWNvbnRhaW5lZAorCitzeW4gbWF0Y2ggbHNzRmdDb2xvciAiOlteOl1cKyIgY29udGFpbmVkIG5leHRncm91cD1sc3NCZ0NvbG9yIGNvbnRhaW5zPWxzc1JlZEZnLGxzc0JsdWVGZyxsc3NHcmVlbkZnLGxzc0Jyb3duRmcsbHNzTWFnZW50YUZnLGxzc0N5YW5GZyxsc3NMaWdodGdyYXlGZyxsc3NHcmF5RmcsbHNzQnJpZ2h0cmVkRmcsbHNzQnJpZ2h0Z3JlZW5GZyxsc3NZZWxsb3dGZyxsc3NCcmlnaHRibHVlRmcsbHNzQnJpZ2h0bWFnZW50YUZnLGxzc0JyaWdodGN5YW5GZworCitzeW4gY2FzZSBpZ25vcmUKK3N5biBrZXl3b3JkCWxzc1JlZEZnCQlyZWQJCWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzQmx1ZUZnCQlibHVlCQljb250YWluZWQKK3N5biBrZXl3b3JkCWxzc0dyZWVuRmcJCWdyZWVuCQljb250YWluZWQKK3N5biBrZXl3b3JkCWxzc0Jyb3duRmcJCWJyb3duCQljb250YWluZWQKK3N5biBrZXl3b3JkCWxzc01hZ2VudGFGZwkJbWFnZW50YQkJY29udGFpbmVkCitzeW4ga2V5d29yZAlsc3NDeWFuRmcJCWN5YW4JCWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzTGlnaHRncmF5RmcJCWxpZ2h0Z3JheQljb250YWluZWQKK3N5biBrZXl3b3JkCWxzc0dyYXlGZwkJZ3JheQkJY29udGFpbmVkCitzeW4ga2V5d29yZAlsc3NCcmlnaHRyZWRGZwkJYnJpZ2h0cmVkCWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzQnJpZ2h0Z3JlZW5GZwlicmlnaHRncmVlbgljb250YWluZWQKK3N5biBrZXl3b3JkCWxzc1llbGxvd0ZnCQl5ZWxsb3cJCWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzQnJpZ2h0Ymx1ZUZnCQlicmlnaHRibHVlCWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzQnJpZ2h0bWFnZW50YUZnCWJyaWdodG1hZ2VudGEJY29udGFpbmVkCitzeW4ga2V5d29yZAlsc3NCcmlnaHRjeWFuRmcJCWJyaWdodGN5YW4JY29udGFpbmVkCitzeW4gY2FzZSBtYXRjaAorCitzeW4gbWF0Y2ggbHNzQmdDb2xvciAiOlteOl1cKyIgY29udGFpbmVkIGNvbnRhaW5zPWxzc1JlZEJnLGxzc0JsdWVCZyxsc3NHcmVlbkJnLGxzc0Jyb3duQmcsbHNzTWFnZW50YUJnLGxzc0N5YW5CZyxsc3NMaWdodGdyYXlCZyxsc3NHcmF5QmcsbHNzQnJpZ2h0cmVkQmcsbHNzQnJpZ2h0Z3JlZW5CZyxsc3NZZWxsb3dCZyxsc3NCcmlnaHRibHVlQmcsbHNzQnJpZ2h0bWFnZW50YUJnLGxzc0JyaWdodGN5YW5CZyxsc3NXaGl0ZUJnCisKK3N5biBjYXNlIGlnbm9yZQorc3luIGtleXdvcmQJbHNzUmVkQmcJCXJlZAkJY29udGFpbmVkCitzeW4ga2V5d29yZAlsc3NCbHVlQmcJCWJsdWUJCWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzR3JlZW5CZwkJZ3JlZW4JCWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzQnJvd25CZwkJYnJvd24JCWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzTWFnZW50YUJnCQltYWdlbnRhCQljb250YWluZWQKK3N5biBrZXl3b3JkCWxzc0N5YW5CZwkJY3lhbgkJY29udGFpbmVkCitzeW4ga2V5d29yZAlsc3NMaWdodGdyYXlCZwkJbGlnaHRncmF5CWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzR3JheUJnCQlncmF5CQljb250YWluZWQKK3N5biBrZXl3b3JkCWxzc0JyaWdodHJlZEJnCQlicmlnaHRyZWQJY29udGFpbmVkCitzeW4ga2V5d29yZAlsc3NCcmlnaHRncmVlbkJnCWJyaWdodGdyZWVuCWNvbnRhaW5lZAorc3luIGtleXdvcmQJbHNzWWVsbG93QmcJCXllbGxvdwkJY29udGFpbmVkCitzeW4ga2V5d29yZAlsc3NCcmlnaHRibHVlQmcJCWJyaWdodGJsdWUJY29udGFpbmVkCitzeW4ga2V5d29yZAlsc3NCcmlnaHRtYWdlbnRhQmcJYnJpZ2h0bWFnZW50YQljb250YWluZWQKK3N5biBrZXl3b3JkCWxzc0JyaWdodGN5YW5CZwkJYnJpZ2h0Y3lhbgljb250YWluZWQKK3N5biBrZXl3b3JkCWxzc1doaXRlQmcJCXdoaXRlCQljb250YWluZWQKK3N5biBjYXNlIG1hdGNoCisKK3N5biBtYXRjaCBsc3NDb21tZW50ICIjLiokIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9sc3Nfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbHNzX3N5bnRheF9pbml0cyA9IDEKKyAgZW5kaWYKKworICBoaSBkZWYgbGluayBsc3NDb21tZW50IENvbW1lbnQKKyAgaGkgZGVmIGxpbmsgbHNzRWxlbWVudCBJZGVudGlmaWVyCisKKyAgaGkgZGVmIGxzc0JvbGQJCXRlcm09Ym9sZCBjdGVybT1ib2xkCisgIGhpIGRlZiBsc3NSZXZlcnNlCQl0ZXJtPXJldmVyc2UgY3Rlcm09cmV2ZXJzZQorICBoaSBkZWYgbHNzVW5kZXJsaW5lCQl0ZXJtPXVuZGVybGluZSBjdGVybT11bmRlcmxpbmUKKyAgaGkgZGVmIGxzc1N0YW5kb3V0CQl0ZXJtPXN0YW5kb3V0IGN0ZXJtPXN0YW5kb3V0CisKKyAgaGkgZGVmIGxzc1JlZEZnCQljdGVybWZnPXJlZAorICBoaSBkZWYgbHNzQmx1ZUZnCQljdGVybWZnPWJsdWUKKyAgaGkgZGVmIGxzc0dyZWVuRmcJCWN0ZXJtZmc9Z3JlZW4KKyAgaGkgZGVmIGxzc0Jyb3duRmcJCWN0ZXJtZmc9YnJvd24KKyAgaGkgZGVmIGxzc01hZ2VudGFGZwkJY3Rlcm1mZz1tYWdlbnRhCisgIGhpIGRlZiBsc3NDeWFuRmcJCWN0ZXJtZmc9Y3lhbgorICBoaSBkZWYgbHNzR3JheUZnCQljdGVybWZnPWdyYXkKKyAgaWYgJENPTE9SVEVSTSA9PSAicnh2dCIKKyAgICAiIE9uIHJ4dnQncywgYnJpZ2h0IGNvbG9ycyBhcmUgYWN0aXZhdGVkIGJ5IHNldHRpbmcgdGhlIGJvbGQgYXR0cmlidXRlLgorICAgIGhpIGRlZiBsc3NMaWdodGdyYXlGZwljdGVybWZnPWdyYXkgY3Rlcm09Ym9sZAorICAgIGhpIGRlZiBsc3NCcmlnaHRyZWRGZwljdGVybWZnPXJlZCBjdGVybT1ib2xkCisgICAgaGkgZGVmIGxzc0JyaWdodGdyZWVuRmcJY3Rlcm1mZz1ncmVlbiBjdGVybT1ib2xkCisgICAgaGkgZGVmIGxzc1llbGxvd0ZnCQljdGVybWZnPXllbGxvdyBjdGVybT1ib2xkCisgICAgaGkgZGVmIGxzc0JyaWdodGJsdWVGZwljdGVybWZnPWJsdWUgY3Rlcm09Ym9sZAorICAgIGhpIGRlZiBsc3NCcmlnaHRtYWdlbnRhRmcJY3Rlcm1mZz1tYWdlbnRhIGN0ZXJtPWJvbGQKKyAgICBoaSBkZWYgbHNzQnJpZ2h0Y3lhbkZnCWN0ZXJtZmc9Y3lhbiBjdGVybT1ib2xkCisgIGVsc2UKKyAgICBoaSBkZWYgbHNzTGlnaHRncmF5RmcJY3Rlcm1mZz1saWdodGdyYXkKKyAgICBoaSBkZWYgbHNzQnJpZ2h0cmVkRmcJY3Rlcm1mZz1saWdodHJlZAorICAgIGhpIGRlZiBsc3NCcmlnaHRncmVlbkZnCWN0ZXJtZmc9bGlnaHRncmVlbgorICAgIGhpIGRlZiBsc3NZZWxsb3dGZwkJY3Rlcm1mZz15ZWxsb3cKKyAgICBoaSBkZWYgbHNzQnJpZ2h0Ymx1ZUZnCWN0ZXJtZmc9bGlnaHRibHVlCisgICAgaGkgZGVmIGxzc0JyaWdodG1hZ2VudGFGZwljdGVybWZnPWxpZ2h0bWFnZW50YQorICAgIGhpIGRlZiBsc3NCcmlnaHRjeWFuRmcJY3Rlcm1mZz1saWdodGN5YW4KKyAgZW5kaWYKKworICBoaSBkZWYgbHNzUmVkQmcJCWN0ZXJtYmc9cmVkCisgIGhpIGRlZiBsc3NCbHVlQmcJCWN0ZXJtYmc9Ymx1ZQorICBoaSBkZWYgbHNzR3JlZW5CZwkJY3Rlcm1iZz1ncmVlbgorICBoaSBkZWYgbHNzQnJvd25CZwkJY3Rlcm1iZz1icm93bgorICBoaSBkZWYgbHNzTWFnZW50YUJnCQljdGVybWJnPW1hZ2VudGEKKyAgaGkgZGVmIGxzc0N5YW5CZwkJY3Rlcm1iZz1jeWFuCisgIGhpIGRlZiBsc3NMaWdodGdyYXlCZwkJY3Rlcm1iZz1saWdodGdyYXkKKyAgaGkgZGVmIGxzc0dyYXlCZwkJY3Rlcm1iZz1ncmF5CisgIGhpIGRlZiBsc3NCcmlnaHRyZWRCZwkJY3Rlcm1iZz1saWdodHJlZAorICBoaSBkZWYgbHNzQnJpZ2h0Z3JlZW5CZwljdGVybWJnPWxpZ2h0Z3JlZW4KKyAgaGkgZGVmIGxzc1llbGxvd0JnCQljdGVybWJnPXllbGxvdworICBoaSBkZWYgbHNzQnJpZ2h0Ymx1ZUJnCWN0ZXJtYmc9bGlnaHRibHVlCisgIGhpIGRlZiBsc3NCcmlnaHRtYWdlbnRhQmcJY3Rlcm1iZz1saWdodG1hZ2VudGEKKyAgaGkgZGVmIGxzc0JyaWdodGN5YW5CZwljdGVybWJnPWxpZ2h0Y3lhbgorICBoaSBkZWYgbHNzV2hpdGVCZwkJY3Rlcm1iZz13aGl0ZSBjdGVybWZnPWJsYWNrCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJsc3MiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9sdWEudmltIGIvcnVudGltZS9zeW50YXgvbHVhLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmNkYTYyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbHVhLnZpbQpAQCAtMCwwICsxLDI1NiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUx1YSA0LjAgYW5kIEx1YSA1LjAKKyIgTWFpbnRhaW5lcjoJTWFyY3VzIEF1cmVsaXVzIEZhcmlhcyA8bWFyY3VzY2ZAdmFudC5jb20uYnI+CisiIEZpcnN0IEF1dGhvcjoJQ2FybG9zIEF1Z3VzdG8gVGVpeGVpcmEgTWVuZGVzIDxjbWVuZGVzQGluZi5wdWMtcmlvLmJyPgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMDQKKyIgT3B0aW9uczoJbHVhX3ZlcnNpb24gPSA0IG9yIDUgW2RlZmF1bHRdCisiCisiIFN0aWxsIGhhcyBzb21lIHN5bmNpbmcgcHJvYmxlbXMgKGxvbmcgW1tzdHJpbmdzXV0pLi4uCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgIWV4aXN0cygibHVhX3ZlcnNpb24iKQorICBsZXQgbHVhX3ZlcnNpb24gPSA1CitlbmRpZgorCitzeW4gY2FzZSBtYXRjaAorCisiIENvbW1lbnRzCitzeW4ga2V5d29yZCBsdWFUb2RvCQljb250YWluZWQgVE9ETyBGSVhNRSBYWFgKK3N5biBtYXRjaCAgIGx1YUNvbW1lbnQJCSItLS4qJCIgY29udGFpbnM9bHVhVG9kbworaWYgbHVhX3ZlcnNpb24gPiA0CisgIHN5biByZWdpb24gIGx1YUNvbW1lbnQJbWF0Y2hncm91cD1sdWFDb21tZW50IHN0YXJ0PSItLVxbXFsiIGVuZD0iXF1cXSIgY29udGFpbnM9bHVhVG9kbyxsdWFJbm5lckNvbW1lbnQKKyAgc3luIHJlZ2lvbiAgbHVhSW5uZXJDb21tZW50CWNvbnRhaW5lZCB0cmFuc3BhcmVudCBzdGFydD0iXFtcWyIgZW5kPSJcXVxdIgorZW5kaWYKKyIgRmlyc3QgbGluZSBtYXkgc3RhcnQgd2l0aCAjIQorc3luIG1hdGNoICAgbHVhQ29tbWVudAkJIlwlXiMhLioiCisKKyIgY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcyBhbmQgd3JvbmcgY3VybHkgYnJhY2tldHMgb3IKKyIga2V5d29yZHMgcGxhY2VkIG91dHNpZGUgdGhlaXIgcmVzcGVjdGl2ZSBibG9ja3MKKworc3luIHJlZ2lvbiAgbHVhUGFyZW4JCXRyYW5zcGFyZW50IHN0YXJ0PScoJyBlbmQ9JyknIGNvbnRhaW5zPUFMTEJVVCxsdWFFcnJvcixsdWFUb2RvLGx1YVNwZWNpYWwsbHVhQ29uZCxsdWFDb25kRWxzZWlmLGx1YUNvbmRFbmQsbHVhQ29uZFN0YXJ0LGx1YUJsb2NrLGx1YVJlcGVhdEJsb2NrLGx1YVJlcGVhdCxsdWFTdGF0ZW1lbnQKK3N5biBtYXRjaCAgIGx1YUVycm9yCQkiKSIKK3N5biBtYXRjaCAgIGx1YUVycm9yCQkifSIKK3N5biBtYXRjaCAgIGx1YUVycm9yCQkiXDxcKGVuZFx8ZWxzZVx8ZWxzZWlmXHx0aGVuXHx1bnRpbFx8aW5cKVw+IgorCisKKyIgRnVuY3Rpb24gZGVjbGFyYXRpb24KK3N5biByZWdpb24gIGx1YUZ1bmN0aW9uQmxvY2sgICAgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1sdWFGdW5jdGlvbiBzdGFydD0iXDxmdW5jdGlvblw+IiBlbmQ9Ilw8ZW5kXD4iIGNvbnRhaW5zPUFMTEJVVCxsdWFUb2RvLGx1YVNwZWNpYWwsbHVhQ29uZCxsdWFDb25kRWxzZWlmLGx1YUNvbmRFbmQsbHVhUmVwZWF0CisKKyIgaWYgdGhlbiBlbHNlIGVsc2VpZiBlbmQKK3N5biBrZXl3b3JkIGx1YUNvbmQJCWNvbnRhaW5lZCBlbHNlCisKKyIgdGhlbiAuLi4gZW5kCitzeW4gcmVnaW9uICBsdWFDb25kRW5kCQljb250YWluZWQgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1sdWFDb25kIHN0YXJ0PSJcPHRoZW5cPiIgZW5kPSJcPGVuZFw+IiBjb250YWlucz1BTExCVVQsbHVhVG9kbyxsdWFTcGVjaWFsLGx1YVJlcGVhdAorCisiIGVsc2VpZiAuLi4gdGhlbgorc3luIHJlZ2lvbiAgbHVhQ29uZEVsc2VpZgljb250YWluZWQgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1sdWFDb25kIHN0YXJ0PSJcPGVsc2VpZlw+IiBlbmQ9Ilw8dGhlblw+IiBjb250YWlucz1BTExCVVQsbHVhVG9kbyxsdWFTcGVjaWFsLGx1YUNvbmQsbHVhQ29uZEVsc2VpZixsdWFDb25kRW5kLGx1YVJlcGVhdAorCisiIGlmIC4uLiB0aGVuCitzeW4gcmVnaW9uICBsdWFDb25kU3RhcnQJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1sdWFDb25kIHN0YXJ0PSJcPGlmXD4iIGVuZD0iXDx0aGVuXD4ibWU9ZS00IGNvbnRhaW5zPUFMTEJVVCxsdWFUb2RvLGx1YVNwZWNpYWwsbHVhQ29uZCxsdWFDb25kRWxzZWlmLGx1YUNvbmRFbmQsbHVhUmVwZWF0IG5leHRncm91cD1sdWFDb25kRW5kIHNraXB3aGl0ZSBza2lwZW1wdHkKKworIiBkbyAuLi4gZW5kCitzeW4gcmVnaW9uICBsdWFCbG9jawkJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1sdWFTdGF0ZW1lbnQgc3RhcnQ9Ilw8ZG9cPiIgZW5kPSJcPGVuZFw+IiBjb250YWlucz1BTExCVVQsbHVhVG9kbyxsdWFTcGVjaWFsLGx1YUNvbmQsbHVhQ29uZEVsc2VpZixsdWFDb25kRW5kLGx1YVJlcGVhdAorCisiIHJlcGVhdCAuLi4gdW50aWwKK3N5biByZWdpb24gIGx1YVJlcGVhdEJsb2NrCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9bHVhUmVwZWF0IHN0YXJ0PSJcPHJlcGVhdFw+IiBlbmQ9Ilw8dW50aWxcPiIgY29udGFpbnM9QUxMQlVULGx1YVRvZG8sbHVhU3BlY2lhbCxsdWFDb25kLGx1YUNvbmRFbHNlaWYsbHVhQ29uZEVuZCxsdWFSZXBlYXQKKworIiB3aGlsZSAuLi4gZG8KK3N5biByZWdpb24gIGx1YVJlcGVhdEJsb2NrCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9bHVhUmVwZWF0IHN0YXJ0PSJcPHdoaWxlXD4iIGVuZD0iXDxkb1w+Im1lPWUtMiBjb250YWlucz1BTExCVVQsbHVhVG9kbyxsdWFTcGVjaWFsLGx1YUNvbmQsbHVhQ29uZEVsc2VpZixsdWFDb25kRW5kLGx1YVJlcGVhdCBuZXh0Z3JvdXA9bHVhQmxvY2sgc2tpcHdoaXRlIHNraXBlbXB0eQorCisiIGZvciAuLi4gZG8gYW5kIGZvciAuLi4gaW4gLi4uIGRvCitzeW4gcmVnaW9uIGx1YVJlcGVhdEJsb2NrCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9bHVhUmVwZWF0IHN0YXJ0PSJcPGZvclw+IiBlbmQ9Ilw8ZG9cPiJtZT1lLTIgY29udGFpbnM9QUxMQlVULGx1YVRvZG8sbHVhU3BlY2lhbCxsdWFDb25kLGx1YUNvbmRFbHNlaWYsbHVhQ29uZEVuZCBuZXh0Z3JvdXA9bHVhQmxvY2sgc2tpcHdoaXRlIHNraXBlbXB0eQorCisiIEZvbGxvd2luZyAnZWxzZScgZXhhbXBsZS4gVGhpcyBpcyBhbm90aGVyIGl0ZW0gdG8gdGhvc2UKKyIgY29udGFpbnM9QUxMQlVULC4uLiBiZWNhdXNlIG9ubHkgdGhlICdmb3InIGx1YVJlcGVhdEJsb2NrIGNvbnRhaW5zIGl0Lgorc3luIGtleXdvcmQgbHVhUmVwZWF0CQljb250YWluZWQgaW4KKworIiBvdGhlciBrZXl3b3Jkcworc3luIGtleXdvcmQgbHVhU3RhdGVtZW50CXJldHVybiBsb2NhbCBicmVhaworc3luIGtleXdvcmQgbHVhT3BlcmF0b3IJCWFuZCBvciBub3QKK3N5biBrZXl3b3JkIGx1YUNvbnN0YW50CQluaWwKK2lmIGx1YV92ZXJzaW9uID4gNAorICBzeW4ga2V5d29yZCBsdWFDb25zdGFudAl0cnVlIGZhbHNlCitlbmRpZgorCisiIFByZSBwcm9jZXNzb3IgZG9lc24ndCBleGlzdCBzaW5jZSBMdWEgNC4wCisiIHN5biBtYXRjaCAgIGx1YVByZVByb2MJICAiXlxzKiRcKGRlYnVnXHxub2RlYnVnXHxpZlx8aWZub3RcfGVuZFx8ZWxzZVx8ZW5kaW5wdXRcKVw+IgorCisiIFN0cmluZ3MKK3N5biBtYXRjaCAgIGx1YVNwZWNpYWwJCWNvbnRhaW5lZCAiXFxbXFxhYmZucnR2XCdcIltcXV1cfFxcXGRceywzfSIKK3N5biByZWdpb24gIGx1YVN0cmluZwkJc3RhcnQ9KycrICBlbmQ9KycrIHNraXA9K1xcXFxcfFxcJysgY29udGFpbnM9bHVhU3BlY2lhbAorc3luIHJlZ2lvbiAgbHVhU3RyaW5nCQlzdGFydD0rIisgIGVuZD0rIisgc2tpcD0rXFxcXFx8XFwiKyBjb250YWlucz1sdWFTcGVjaWFsCisiIE5lc3RlZCBzdHJpbmdzCitzeW4gcmVnaW9uICBsdWFTdHJpbmcyCQltYXRjaGdyb3VwPWx1YVN0cmluZyBzdGFydD0rXFtcWysgZW5kPStcXVxdKyBjb250YWlucz1sdWFTdHJpbmcyCisKKyIgaW50ZWdlciBudW1iZXIKK3N5biBtYXRjaCBsdWFOdW1iZXIJCSJcPFswLTldXCtcPiIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRoIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCBsdWFGbG9hdAkJIlw8WzAtOV1cK1wuWzAtOV0qXChlWy0rXVw9WzAtOV1cK1wpXD1cPiIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoIGx1YUZsb2F0CQkiXC5bMC05XVwrXChlWy0rXVw9WzAtOV1cK1wpXD1cPiIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRob3V0IGRvdCwgd2l0aCBleHBvbmVudAorc3luIG1hdGNoIGx1YUZsb2F0CQkiXDxbMC05XVwrZVstK11cPVswLTldXCtcPiIKKworIiB0YWJsZXMKK3N5biByZWdpb24gIGx1YVRhYmxlQmxvY2sgICAgICAgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1sdWFUYWJsZSBzdGFydD0ieyIgZW5kPSJ9IiBjb250YWlucz1BTExCVVQsbHVhVG9kbyxsdWFTcGVjaWFsLGx1YUNvbmQsbHVhQ29uZEVsc2VpZixsdWFDb25kRW5kLGx1YUNvbmRTdGFydCxsdWFCbG9jayxsdWFSZXBlYXRCbG9jayxsdWFSZXBlYXQsbHVhU3RhdGVtZW50CisKK3N5biBrZXl3b3JkIGx1YUZ1bmMJYXNzZXJ0IGNvbGxlY3RnYXJiYWdlIGRvZmlsZSBlcnJvciBnY2luZm8gbmV4dAorc3luIGtleXdvcmQgbHVhRnVuYwlwcmludCByYXdnZXQgcmF3c2V0IHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgX1ZFUlNJT04KKworaWYgbHVhX3ZlcnNpb24gPT0gNAorICBzeW4ga2V5d29yZCBsdWFGdW5jCV9BTEVSVCBfRVJST1JNRVNTQUdFCisgIHN5biBrZXl3b3JkIGx1YUZ1bmMJY2FsbCBjb3B5dGFnbWV0aG9kcyBkb3N0cmluZworICBzeW4ga2V5d29yZCBsdWFGdW5jCWZvcmVhY2ggZm9yZWFjaGkgZ2V0Z2xvYmFsIGdldG4KKyAgc3luIGtleXdvcmQgbHVhRnVuYwlnZXR0YWdtZXRob2QgZ2xvYmFscyBuZXd0YWcKKyAgc3luIGtleXdvcmQgbHVhRnVuYwlzZXRnbG9iYWwgc2V0dGFnIHNldHRhZ21ldGhvZCBzb3J0CisgIHN5biBrZXl3b3JkIGx1YUZ1bmMJdGFnIHRpbnNlcnQgdHJlbW92ZQorICBzeW4ga2V5d29yZCBsdWFGdW5jCV9JTlBVVCBfT1VUUFVUIF9TVERJTiBfU1RET1VUIF9TVERFUlIKKyAgc3luIGtleXdvcmQgbHVhRnVuYwlvcGVuZmlsZSBjbG9zZWZpbGUgZmx1c2ggc2VlaworICBzeW4ga2V5d29yZCBsdWFGdW5jCXNldGxvY2FsZSBleGVjdXRlIHJlbW92ZSByZW5hbWUgdG1wbmFtZQorICBzeW4ga2V5d29yZCBsdWFGdW5jCWdldGVudiBkYXRlIGNsb2NrIGV4aXQKKyAgc3luIGtleXdvcmQgbHVhRnVuYwlyZWFkZnJvbSB3cml0ZXRvIGFwcGVuZHRvIHJlYWQgd3JpdGUKKyAgc3luIGtleXdvcmQgbHVhRnVuYwlQSSBhYnMgc2luIGNvcyB0YW4gYXNpbgorICBzeW4ga2V5d29yZCBsdWFGdW5jCWFjb3MgYXRhbiBhdGFuMiBjZWlsIGZsb29yCisgIHN5biBrZXl3b3JkIGx1YUZ1bmMJbW9kIGZyZXhwIGxkZXhwIHNxcnQgbWluIG1heCBsb2cKKyAgc3luIGtleXdvcmQgbHVhRnVuYwlsb2cxMCBleHAgZGVnIHJhZCByYW5kb20KKyAgc3luIGtleXdvcmQgbHVhRnVuYwlyYW5kb21zZWVkIHN0cmxlbiBzdHJzdWIgc3RybG93ZXIgc3RydXBwZXIKKyAgc3luIGtleXdvcmQgbHVhRnVuYwlzdHJjaGFyIHN0cnJlcCBhc2NpaSBzdHJieXRlCisgIHN5biBrZXl3b3JkIGx1YUZ1bmMJZm9ybWF0IHN0cmZpbmQgZ3N1YgorICBzeW4ga2V5d29yZCBsdWFGdW5jCWdldGluZm8gZ2V0bG9jYWwgc2V0bG9jYWwgc2V0Y2FsbGhvb2sgc2V0bGluZWhvb2sKK2Vsc2UKKyAgc3luIGtleXdvcmQgbHVhRnVuYwlfRyBnZXRmZW52IGdldG1ldGF0YWJsZSBpcGFpcnMgbG9hZGZpbGUKKyAgc3luIGtleXdvcmQgbHVhRnVuYwlsb2FkbGliIGxvYWRzdHJpbmcgcGFpcnMgcGNhbGwgcmF3ZXF1YWwKKyAgc3luIGtleXdvcmQgbHVhRnVuYwlyZXF1aXJlIHNldGZlbnYgc2V0bWV0YXRhYmxlIHVucGFjayB4cGNhbGwKKyAgc3luIGtleXdvcmQgbHVhRnVuYwlMVUFfUEFUSCBfTE9BREVEIF9SRVFVSVJFRE5BTUUKKyIgTm90IHN1cmUgaWYgYWxsIHRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGhpZ2hsaWdodGVkLi4uCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL2Nvcm91dGluZVwuY3JlYXRlLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9jb3JvdXRpbmVcLnJlc3VtZS8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvY29yb3V0aW5lXC5zdGF0dXMvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL2Nvcm91dGluZVwud3JhcC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvY29yb3V0aW5lXC55aWVsZC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvc3RyaW5nXC5ieXRlLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9zdHJpbmdcLmNoYXIvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL3N0cmluZ1wuZHVtcC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvc3RyaW5nXC5maW5kLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9zdHJpbmdcLmxlbi8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvc3RyaW5nXC5sb3dlci8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvc3RyaW5nXC5yZXAvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL3N0cmluZ1wuc3ViLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9zdHJpbmdcLnVwcGVyLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9zdHJpbmdcLmZvcm1hdC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvc3RyaW5nXC5nZmluZC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvc3RyaW5nXC5nc3ViLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS90YWJsZVwuY29uY2F0LworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS90YWJsZVwuZm9yZWFjaC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvdGFibGVcLmZvcmVhY2hpLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS90YWJsZVwuZ2V0bi8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvdGFibGVcLnNvcnQvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL3RhYmxlXC5pbnNlcnQvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL3RhYmxlXC5yZW1vdmUvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL3RhYmxlXC5zZXRuLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9tYXRoXC5hYnMvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL21hdGhcLmFjb3MvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL21hdGhcLmFzaW4vCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL21hdGhcLmF0YW4vCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL21hdGhcLmF0YW4yLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9tYXRoXC5jZWlsLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9tYXRoXC5jb3MvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL21hdGhcLmRlZy8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvbWF0aFwuZXhwLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9tYXRoXC5mbG9vci8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvbWF0aFwubG9nLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9tYXRoXC5sb2cxMC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvbWF0aFwubWF4LworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9tYXRoXC5taW4vCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL21hdGhcLm1vZC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvbWF0aFwucG93LworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9tYXRoXC5yYWQvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL21hdGhcLnNpbi8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvbWF0aFwuc3FydC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvbWF0aFwudGFuLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9tYXRoXC5mcmV4cC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvbWF0aFwubGRleHAvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL21hdGhcLnJhbmRvbS8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvbWF0aFwucmFuZG9tc2VlZC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvbWF0aFwucGkvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL2lvXC5zdGRpbi8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvaW9cLnN0ZG91dC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvaW9cLnN0ZGVyci8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvaW9cLmNsb3NlLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9pb1wuZmx1c2gvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL2lvXC5pbnB1dC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvaW9cLmxpbmVzLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9pb1wub3Blbi8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvaW9cLm91dHB1dC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvaW9cLnBvcGVuLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9pb1wucmVhZC8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvaW9cLnRtcGZpbGUvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL2lvXC50eXBlLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9pb1wud3JpdGUvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL29zXC5jbG9jay8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvb3NcLmRhdGUvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL29zXC5kaWZmdGltZS8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvb3NcLmV4ZWN1dGUvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL29zXC5leGl0LworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9vc1wuZ2V0ZW52LworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9vc1wucmVtb3ZlLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9vc1wucmVuYW1lLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9vc1wuc2V0bG9jYWxlLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9vc1wudGltZS8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvb3NcLnRtcG5hbWUvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL2RlYnVnXC5kZWJ1Zy8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvZGVidWdcLmdldGhvb2svCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL2RlYnVnXC5nZXRpbmZvLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9kZWJ1Z1wuZ2V0bG9jYWwvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL2RlYnVnXC5nZXR1cHZhbHVlLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9kZWJ1Z1wuc2V0bG9jYWwvCisgIHN5biBtYXRjaCAgIGx1YUZ1bmMJL2RlYnVnXC5zZXR1cHZhbHVlLworICBzeW4gbWF0Y2ggICBsdWFGdW5jCS9kZWJ1Z1wuc2V0aG9vay8KKyAgc3luIG1hdGNoICAgbHVhRnVuYwkvZGVidWdcLnRyYWNlYmFjay8KK2VuZGlmCisKKyJzeW5jaW5nIG1ldGhvZAorc3luIHN5bmMgbWlubGluZXM9MTAwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2x1YV9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9sdWFfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbHVhU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGx1YVJlcGVhdAkJUmVwZWF0CisgIEhpTGluayBsdWFTdHJpbmcJCVN0cmluZworICBIaUxpbmsgbHVhU3RyaW5nMgkJU3RyaW5nCisgIEhpTGluayBsdWFOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgbHVhRmxvYXQJCUZsb2F0CisgIEhpTGluayBsdWFPcGVyYXRvcgkJT3BlcmF0b3IKKyAgSGlMaW5rIGx1YUNvbnN0YW50CQlDb25zdGFudAorICBIaUxpbmsgbHVhQ29uZAkJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGx1YUZ1bmN0aW9uCQlGdW5jdGlvbgorICBIaUxpbmsgbHVhQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgbHVhVG9kbwkJVG9kbworICBIaUxpbmsgbHVhVGFibGUJCVN0cnVjdHVyZQorICBIaUxpbmsgbHVhRXJyb3IJCUVycm9yCisgIEhpTGluayBsdWFTcGVjaWFsCQlTcGVjaWFsQ2hhcgorICAiIEhpTGluayBsdWFQcmVQcm9jCQlQcmVQcm9jCisgIEhpTGluayBsdWFGdW5jCQlJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gImx1YSIKKworIiB2aW06IG5vZXQgdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbHlueC52aW0gYi9ydW50aW1lL3N5bnRheC9seW54LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGVlMWVmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbHlueC52aW0KQEAgLTAsMCArMSw5OCBAQAorIiBMeW54IHN5bnRheCBmaWxlCisiIEZpbGVuYW1lOglseW54LnZpbQorIiBMYW5ndWFnZToJTHlueCBjb25maWd1cmF0aW9uIGZpbGUgKCBseW54LmNmZyApCisiIE1haW50YWluZXI6CURvdWcgS2Vhcm5zIDxkamtlYTJAbXVnY2EuaXRzLm1vbmFzaC5lZHUuYXU+CisiIFVSTDoJCWh0dHA6Ly9tdWdjYS5pdHMubW9uYXNoLmVkdS5hdS9+ZGprZWEyL3ZpbS9zeW50YXgvbHlueC52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisKKyIgVE9ETzogbW9yZSBpbnRlbGxpZ2VudCBhbmQgY29tcGxldGUgYXJndW1lbnQgaGlnaGxpZ2h0aW5nCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIG1hdGNoICAgbHlueExlYWRpbmdXUyAgIl5ccyoiIHRyYW5zcGFyZW50IG5leHRncm91cD1seW54T3B0aW9uCisKK3N5biBtYXRjaCAgIGx5bnhDb21tZW50ICAgICJcKF5cfFxzXCtcKSMuKiQiIGNvbnRhaW5zPWx5bnhUb2RvCisKK3N5biBrZXl3b3JkIGx5bnhUb2RvICAgICAgIFRPRE8gTk9URSBGSVhNRSBYWFggY29udGFpbmVkCisKK3N5biBtYXRjaCAgIGx5bnhEZWxpbWl0ZXIgICI6IiBjb250YWluZWQgbmV4dGdyb3VwPWx5bnhCb29sZWFuLGx5bnhOdW1iZXIKKworc3luIGNhc2UgaWdub3JlCitzeW4ga2V5d29yZCBseW54Qm9vbGVhbiAgICBUUlVFIEZBTFNFIGNvbnRhaW5lZAorc3luIGNhc2UgbWF0Y2gKKworc3luIG1hdGNoICAgbHlueE51bWJlciAgICAgIi1cPVw8XGRcK1w+IiBjb250YWluZWQKKworc3luIGNhc2UgaWdub3JlCitzeW4ga2V5d29yZCBseW54T3B0aW9uIEFDQ0VQVF9BTExfQ09PS0lFUyBBTEVSVFNFQ1MgQUxXQVlTX1JFU1VCTUlUX1BPU1RTIEFMV0FZU19UUlVTVEVEX0VYRUMgQVNTVU1FX0NIQVJTRVQgQVNTVU1FRF9DT0xPUiAgY29udGFpbmVkIG5leHRncm91cD1seW54RGVsaW1pdGVyCitzeW4ga2V5d29yZCBseW54T3B0aW9uIEFTU1VNRURfRE9DX0NIQVJTRVRfQ0hPSUNFIEFTU1VNRV9MT0NBTF9DSEFSU0VUIEFTU1VNRV9VTlJFQ19DSEFSU0VUIEFVVE9fVU5DQUNIRV9ESVJMSVNUUwkgICAgY29udGFpbmVkIG5leHRncm91cD1seW54RGVsaW1pdGVyCitzeW4ga2V5d29yZCBseW54T3B0aW9uIEJJQlBfQklCSE9TVCBCSUJQX0dMT0JBTF9TRVJWRVIgQkxPQ0tfTVVMVElfQk9PS01BUktTIEJPTERfSDEgQk9MRF9IRUFERVJTIEJPTERfTkFNRV9BTkNIT1JTCSAgICBjb250YWluZWQgbmV4dGdyb3VwPWx5bnhEZWxpbWl0ZXIKK3N5biBrZXl3b3JkIGx5bnhPcHRpb24gQ0FTRV9TRU5TSVRJVkVfQUxXQVlTX09OIENIQVJBQ1RFUl9TRVQgQ0hBUlNFVFNfRElSRUNUT1JZIENIQVJTRVRfU1dJVENIX1JVTEVTIENIRUNLTUFJTAkJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBDT0xMQVBTRV9CUl9UQUdTIENPTE9SIENPTk5FQ1RfVElNRU9VVCBDT09LSUVfQUNDRVBUX0RPTUFJTlMgQ09PS0lFX0ZJTEUJCQkJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBDT09LSUVfTE9PU0VfSU5WQUxJRF9ET01BSU5TIENPT0tJRV9RVUVSWV9JTlZBTElEX0RPTUFJTlMgQ09PS0lFX1JFSkVDVF9ET01BSU5TIENPT0tJRV9TQVZFX0ZJTEUgICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBDT09LSUVfU1RSSUNUX0lOVkFMSURfRE9NQUlOUyBDU09fUFJPWFkgQ1NXSU5HX1BBVEggREVGQVVMVF9CT09LTUFSS19GSUxFIERFRkFVTFRfQ0FDSEVfU0laRQkgICAgY29udGFpbmVkIG5leHRncm91cD1seW54RGVsaW1pdGVyCitzeW4ga2V5d29yZCBseW54T3B0aW9uIERFRkFVTFRfRURJVE9SIERFRkFVTFRfSU5ERVhfRklMRSBERUZBVUxUX0tFWVBBRF9NT0RFIERFRkFVTFRfS0VZUEFEX01PREVfSVNfTlVNQkVSU19BU19BUlJPV1MJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBERUZBVUxUX1VTRVJfTU9ERSBERUZBVUxUX1ZJUlRVQUxfTUVNT1JZX1NJWkUgRElSRURfTUVOVSBESVNQTEFZX0NIQVJTRVRfQ0hPSUNFIERPV05MT0FERVIJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBFTUFDU19LRVlTX0FMV0FZU19PTiBFTkFCTEVfTFlOWFJDIEVOQUJMRV9TQ1JPTExCQUNLIEVYVEVSTkFMIEZJTkdFUl9QUk9YWSBGT0NVU19XSU5ET1cJCSAgICBjb250YWluZWQgbmV4dGdyb3VwPWx5bnhEZWxpbWl0ZXIKK3N5biBrZXl3b3JkIGx5bnhPcHRpb24gRk9SQ0VfOEJJVF9UT1VQUEVSIEZPUkNFX0VNUFRZX0hSRUZMRVNTX0EgRk9SQ0VfU1NMX0NPT0tJRVNfU0VDVVJFIEZPUk1TX09QVElPTlMgRlRQX1BBU1NJVkUJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBGVFBfUFJPWFkgR0xPQkFMX0VYVEVOU0lPTl9NQVAgR0xPQkFMX01BSUxDQVAgR09QSEVSX1BST1hZIEdPVE9CVUZGRVIgSEVMUEZJTEUgSElEREVOX0xJTktfTUFSS0VSICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBISVNUT1JJQ0FMX0NPTU1FTlRTIEhUTUxTUkNfQVRUUk5BTUVfWEZPUk0gSFRNTFNSQ19UQUdOQU1FX1hGT1JNIEhUVFBfUFJPWFkgSFRUUFNfUFJPWFkgSU5DTFVERQkgICAgY29udGFpbmVkIG5leHRncm91cD1seW54RGVsaW1pdGVyCitzeW4ga2V5d29yZCBseW54T3B0aW9uIElORk9TRUNTIEpVTVBCVUZGRVIgSlVNUEZJTEUgSlVNUF9QUk9NUFQgSlVTVElGWSBKVVNUSUZZX01BWF9WT0lEX1BFUkNFTlQgS0VZQk9BUkRfTEFZT1VUIEtFWU1BUCAgICAgY29udGFpbmVkIG5leHRncm91cD1seW54RGVsaW1pdGVyCitzeW4ga2V5d29yZCBseW54T3B0aW9uIExFRlRBUlJPV19JTl9URVhURklFTERfUFJPTVBUIExJU1RfRk9STUFUIExJU1RfTkVXU19EQVRFUyBMSVNUX05FV1NfTlVNQkVSUyBMT0NBTF9ET01BSU4JCSAgICBjb250YWluZWQgbmV4dGdyb3VwPWx5bnhEZWxpbWl0ZXIKK3N5biBrZXl3b3JkIGx5bnhPcHRpb24gTE9DQUxfRVhFQ1VUSU9OX0xJTktTX0FMV0FZU19PTiBMT0NBTF9FWEVDVVRJT05fTElOS1NfT05fQlVUX05PVF9SRU1PVEUgTE9DQUxIT1NUX0FMSUFTCQkgICAgY29udGFpbmVkIG5leHRncm91cD1seW54RGVsaW1pdGVyCitzeW4ga2V5d29yZCBseW54T3B0aW9uIExZTlhDR0lfRE9DVU1FTlRfUk9PVCBMWU5YQ0dJX0VOVklST05NRU5UIExZTlhfSE9TVF9OQU1FIExZTlhfU0lHX0ZJTEUgTUFJTF9BRFJTCQkJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBNQUlMX1NZU1RFTV9FUlJPUl9MT0dHSU5HIE1BS0VfTElOS1NfRk9SX0FMTF9JTUFHRVMgTUFLRV9QU0VVRE9fQUxUU19GT1JfSU5MSU5FUyBNRVNTQUdFU0VDUwkgICAgY29udGFpbmVkIG5leHRncm91cD1seW54RGVsaW1pdGVyCitzeW4ga2V5d29yZCBseW54T3B0aW9uIE1JTklNQUxfQ09NTUVOVFMgTVVMVElfQk9PS01BUktfU1VQUE9SVCBOQ1JfSU5fQk9PS01BUktTIE5FV1NfQ0hVTktfU0laRSBORVdTX01BWF9DSFVOSwkJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBORVdTX1BPU1RJTkcgTkVXU1BPU1RfUFJPWFkgTkVXU19QUk9YWSBORVdTUkVQTFlfUFJPWFkgTk5UUF9QUk9YWSBOTlRQU0VSVkVSIE5PX0RPVF9GSUxFUwkgICAgY29udGFpbmVkIG5leHRncm91cD1seW54RGVsaW1pdGVyCitzeW4ga2V5d29yZCBseW54T3B0aW9uIE5PX0ZJTEVfUkVGRVJFUiBOT19GT1JDRURfQ09SRV9EVU1QIE5PX0ZST01fSEVBREVSIE5PX0lTTUFQX0lGX1VTRU1BUCBOT05SRVNUQVJUSU5HX1NJR1dJTkNICSAgICBjb250YWluZWQgbmV4dGdyb3VwPWx5bnhEZWxpbWl0ZXIKK3N5biBrZXl3b3JkIGx5bnhPcHRpb24gTk9fUFJPWFkgTk9fUkVGRVJFUl9IRUFERVIgTk9fVEFCTEVfQ0VOVEVSIE9VVEdPSU5HX01BSUxfQ0hBUlNFVCBQQVJUSUFMIFBBUlRJQUxfVEhSRVMJCSAgICBjb250YWluZWQgbmV4dGdyb3VwPWx5bnhEZWxpbWl0ZXIKK3N5biBrZXl3b3JkIGx5bnhPcHRpb24gUEVSU0lTVEVOVF9DT09LSUVTIFBFUlNPTkFMX0VYVEVOU0lPTl9NQVAgUEVSU09OQUxfTUFJTENBUCBQUkVGRVJSRURfQ0hBUlNFVCBQUkVGRVJSRURfTEFOR1VBR0UJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBQUkVQRU5EX0JBU0VfVE9fU09VUkNFIFBSRVBFTkRfQ0hBUlNFVF9UT19TT1VSQ0UgUFJFVFRZU1JDIFBSRVRUWVNSQ19TUEVDCQkJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBQUkVUVFlTUkNfVklFV19OT19BTkNIT1JfTlVNQkVSSU5HIFBSSU5URVIgUVVJVF9ERUZBVUxUX1lFUyBSRUZFUkVSX1dJVEhfUVVFUlkgUkVVU0VfVEVNUEZJTEVTCSAgICBjb250YWluZWQgbmV4dGdyb3VwPWx5bnhEZWxpbWl0ZXIKK3N5biBrZXl3b3JkIGx5bnhPcHRpb24gUlVMRSBSVUxFU0ZJTEUgU0FWRV9TUEFDRSBTQ0FOX0ZPUl9CVVJJRURfTkVXU19SRUZTIFNDUk9MTEJBUiBTQ1JPTExCQVJfQVJST1cgU0VFS19GUkFHX0FSRUFfSU5fQ1VSICBjb250YWluZWQgbmV4dGdyb3VwPWx5bnhEZWxpbWl0ZXIKK3N5biBrZXl3b3JkIGx5bnhPcHRpb24gU0VFS19GUkFHX01BUF9JTl9DVVIgU0VUX0NPT0tJRVMgU0hPV19DVVJTT1IgU0hPV19LQl9SQVRFIFNORVdTUE9TVF9QUk9YWSBTTkVXU19QUk9YWQkJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBTTkVXU1JFUExZX1BST1hZIFNPRlRfRFFVT1RFUyBTT1VSQ0VfQ0FDSEUgU09VUkNFX0NBQ0hFX0ZPUl9BQk9SVEVEIFNUQVJURklMRSBTVFJJUF9ET1RET1RfVVJMUwkgICAgY29udGFpbmVkIG5leHRncm91cD1seW54RGVsaW1pdGVyCitzeW4ga2V5d29yZCBseW54T3B0aW9uIFNVQlNUSVRVVEVfVU5ERVJTQ09SRVMgU1VGRklYIFNVRkZJWF9PUkRFUiBTWVNURU1fRURJVE9SIFNZU1RFTV9NQUlMIFNZU1RFTV9NQUlMX0ZMQUdTIFRBR1NPVVAJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBURVhURklFTERTX05FRURfQUNUSVZBVElPTiBUSU1FT1VUIFRSSU1fSU5QVVRfRklFTERTIFRSVVNURURfRVhFQyBUUlVTVEVEX0xZTlhDR0kgVVBMT0FERVIJICAgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBVUkxfRE9NQUlOX1BSRUZJWEVTIFVSTF9ET01BSU5fU1VGRklYRVMgVVNFX0ZJWEVEX1JFQ09SRFMgVVNFX01PVVNFIFVTRV9TRUxFQ1RfUE9QVVBTIFZFUkJPU0VfSU1BR0VTIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bHlueERlbGltaXRlcgorc3luIGtleXdvcmQgbHlueE9wdGlvbiBWSUVXRVIgVklfS0VZU19BTFdBWVNfT04gV0FJU19QUk9YWSBYTE9BRElNQUdFX0NPTU1BTkQJCQkJCQkgICAgY29udGFpbmVkIG5leHRncm91cD1seW54RGVsaW1pdGVyCitzeW4gY2FzZSBtYXRjaAorCisiIE5PVEU6IHNldCB0aGlzIGlmIHlvdSB3YW50IHRoZSBjZmcyaHRtbC5wbCBmb3JtYXR0aW5nIGRpcmVjdGl2ZXMgdG8gYmUgaGlnaGxpZ2h0ZWQKK2lmIGV4aXN0cygibHlueF9mb3JtYXR0aW5nX2RpcmVjdGl2ZXMiKQorICBzeW4gbWF0Y2ggbHlueEZvcm1hdERpciAgIl5cLlwoaDFcfGgyXClccy4qJCIKKyAgc3luIG1hdGNoIGx5bnhGb3JtYXREaXIgICJeXC5cKGV4XHxuZlwpXChcc1wrXGRcK1wpXD0kIgorICBzeW4gbWF0Y2ggbHlueEZvcm1hdERpciAgIl5cLmZpJCIKK2VuZGlmCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2x5bnhfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbHlueF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBseW54Qm9vbGVhbiAgICBCb29sZWFuCisgIEhpTGluayBseW54Q29tbWVudCAgICBDb21tZW50CisgIEhpTGluayBseW54RGVsaW1pdGVyICBTcGVjaWFsCisgIEhpTGluayBseW54Rm9ybWF0RGlyICBTcGVjaWFsCisgIEhpTGluayBseW54TnVtYmVyICAgICBOdW1iZXIKKyAgSGlMaW5rIGx5bnhPcHRpb24gICAgIElkZW50aWZpZXIKKyAgSGlMaW5rIGx5bnhUb2RvICAgICAgIFRvZG8KKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibHlueCIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L200LnZpbSBiL3J1bnRpbWUvc3ludGF4L200LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjYwYThmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbTQudmltCkBAIC0wLDAgKzEsNzMgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkJTTQKKyIgTWFpbnRhaW5lcjoJQ2xhdWRpbyBGbGVpbmVyCisiIFVSTDoJCQlodHRwOi8vd3d3LmZsZWluZXIuY29tL3ZpbS9zeW50YXgvbTQudmltCisiIExhc3QgQ2hhbmdlOgkyMDAxIEFwciAyNgorCisiIFRoaXMgZmlsZSB3aWxsIGhpZ2hsaWdodCB1c2VyIGZ1bmN0aW9uIGNhbGxzIGlmIHRoZXkgdXNlIG9ubHkKKyIgY2FwaXRhbCBsZXR0ZXJzIGFuZCBoYXZlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoaS5lLiB0aGUgJygnCisiIG11c3QgYmUgdGhlcmUpLiBMZXQgbWUga25vdyBpZiB0aGlzIGlzIGEgcHJvYmxlbS4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmICFleGlzdHMoIm1haW5fc3ludGF4IikKKyAgaWYgdmVyc2lvbiA8IDYwMAorICAgIHN5bnRheCBjbGVhcgorICBlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorIiB3ZSBkZWZpbmUgaXQgaGVyZSBzbyB0aGF0IGluY2x1ZGVkIGZpbGVzIGNhbiB0ZXN0IGZvciBpdAorICBsZXQgbWFpbl9zeW50YXg9J200JworZW5kaWYKKworIiBkZWZpbmUgdGhlIG00IHN5bnRheAorc3luIG1hdGNoICBtNFZhcmlhYmxlIGNvbnRhaW5lZCAiXCRcZFwrIgorc3luIG1hdGNoICBtNFNwZWNpYWwgIGNvbnRhaW5lZCAiJFtAKiNdIgorc3luIG1hdGNoICBtNENvbW1lbnQgICJkbmxcPi4qIiBjb250YWlucz1TcGVsbEVycm9ycworc3luIG1hdGNoICBtNENvbnN0YW50cyAiXChcPG00X1wpXD1fX2ZpbGVfXyIKK3N5biBtYXRjaCAgbTRDb25zdGFudHMgIlwoXDxtNF9cKVw9X19saW5lX18iCitzeW4ga2V5d29yZCBtNENvbnN0YW50cyBkaXZudW0gc3lzdmFsIG00X2Rpdm51bSBtNF9zeXN2YWwKK3N5biByZWdpb24gbTRQYXJlbiAgICBtYXRjaGdyb3VwPW00RGVsaW1pdGVyIHN0YXJ0PSIoIiBlbmQ9IikiIGNvbnRhaW5lZCBjb250YWlucz1AbTRUb3AKK3N5biByZWdpb24gbTRDb21tYW5kICBtYXRjaGdyb3VwPW00RnVuY3Rpb24gIHN0YXJ0PSJcPFwobTRfXClcPVwoZGVmaW5lXHxkZWZuXHxwdXNoZGVmXCkoIiBlbmQ9IikiIGNvbnRhaW5zPUBtNFRvcAorc3luIHJlZ2lvbiBtNENvbW1hbmQgIG1hdGNoZ3JvdXA9bTRQcmVwcm9jICAgc3RhcnQ9Ilw8XChtNF9cKVw9XChpbmNsdWRlXHxzaW5jbHVkZVwpKCJoZT1lLTEgZW5kPSIpIiBjb250YWlucz1AbTRUb3AKK3N5biByZWdpb24gbTRDb21tYW5kICBtYXRjaGdyb3VwPW00U3RhdGVtZW50IHN0YXJ0PSJcPFwobTRfXClcPVwoc3lzY21kXHxlc3lzY21kXHxpZmRlZlx8aWZlbHNlXHxpbmRpclx8YnVpbHRpblx8c2hpZnRcfGVycnByaW50XHxtNGV4aXRcfGNoYW5nZWNvbVx8Y2hhbmdlcXVvdGVcfGNoYW5nZXdvcmRcfG00d3JhcFx8ZGVidWdmaWxlXHxkaXZlcnRcfHVuZGl2ZXJ0XCkoImhlPWUtMSBlbmQ9IikiIGNvbnRhaW5zPUBtNFRvcAorc3luIHJlZ2lvbiBtNENvbW1hbmQgIG1hdGNoZ3JvdXA9bTRidWlsdGluIHN0YXJ0PSJcPFwobTRfXClcPVwobGVuXHxpbmRleFx8cmVnZXhwXHxzdWJzdHJcfHRyYW5zbGl0XHxwYXRzdWJzdFx8Zm9ybWF0XHxpbmNyXHxkZWNyXHxldmFsXHxtYWtldGVtcFwpKCJoZT1lLTEgZW5kPSIpIiBjb250YWlucz1AbTRUb3AKK3N5biBrZXl3b3JkIG00U3RhdGVtZW50IGRpdmVydCB1bmRpdmVydAorc3luIHJlZ2lvbiBtNENvbW1hbmQgIG1hdGNoZ3JvdXA9bTRUeXBlICAgICAgc3RhcnQ9Ilw8XChtNF9cKVw9XCh1bmRlZmluZVx8cG9wZGVmXCkoImhlPWUtMSBlbmQ9IikiIGNvbnRhaW5zPUBtNFRvcAorc3luIHJlZ2lvbiBtNEZ1bmN0aW9uIG1hdGNoZ3JvdXA9bTRUeXBlICAgICAgc3RhcnQ9Ilw8W19BLVpdW19BLVowLTldKigiaGU9ZS0xIGVuZD0iKSIgY29udGFpbnM9QG00VG9wCitzeW4gcmVnaW9uIG00U3RyaW5nICAgc3RhcnQ9ImAiIGVuZD0iJyIgY29udGFpbmVkIGNvbnRhaW5zPUBtNFRvcCxAbTRTdHJpbmdDb250ZW50cyxTcGVsbEVycm9ycworc3luIGNsdXN0ZXIgbTRUb3AgICAgIGNvbnRhaW5zPW00Q29tbWVudCxtNENvbnN0YW50cyxtNFNwZWNpYWwsbTRWYXJpYWJsZSxtNFN0cmluZyxtNFBhcmVuLG00Q29tbWFuZCxtNFN0YXRlbWVudCxtNEZ1bmN0aW9uCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX200X3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX200X3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisgIEhpTGluayBtNERlbGltaXRlciBEZWxpbWl0ZXIKKyAgSGlMaW5rIG00Q29tbWVudCAgIENvbW1lbnQKKyAgSGlMaW5rIG00RnVuY3Rpb24gIEZ1bmN0aW9uCisgIEhpTGluayBtNEtleXdvcmQgICBLZXl3b3JkCisgIEhpTGluayBtNFNwZWNpYWwgICBTcGVjaWFsCisgIEhpTGluayBtNFN0cmluZyAgICBTdHJpbmcKKyAgSGlMaW5rIG00U3RhdGVtZW50IFN0YXRlbWVudAorICBIaUxpbmsgbTRQcmVwcm9jICAgUHJlUHJvYworICBIaUxpbmsgbTRUeXBlICAgICAgVHlwZQorICBIaUxpbmsgbTRTcGVjaWFsICAgU3BlY2lhbAorICBIaUxpbmsgbTRWYXJpYWJsZSAgU3BlY2lhbAorICBIaUxpbmsgbTRDb25zdGFudHMgQ29uc3RhbnQKKyAgSGlMaW5rIG00QnVpbHRpbiAgIFN0YXRlbWVudAorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibTQiCisKK2lmIG1haW5fc3ludGF4ID09ICdtNCcKKyAgdW5sZXQgbWFpbl9zeW50YXgKK2VuZGlmCisKKyIgdmltOiB0cz00CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9tYWlsLnZpbSBiL3J1bnRpbWUvc3ludGF4L21haWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYzBhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9tYWlsLnZpbQpAQCAtMCwwICsxLDkyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJCU1haWwgZmlsZQorIiBQcmV2aW91cyBNYWludGFpbmVyOglGZWxpeCB2b24gTGVpdG5lciA8bGVpdG5lckBtYXRoLmZ1LWJlcmxpbi5kZT4KKyIgTWFpbnRhaW5lcjoJCUdhdXRhbSBJeWVyIDxnYXV0YW1AbWF0aC51Y2hpY2Fnby5lZHU+CisiIExhc3QgQ2hhbmdlOgkJTW9uIDIzIEZlYiAyMDA0IDAyOjI2OjE2IFBNIENTVAorCisiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFRoZSBtYWlsIGhlYWRlciBpcyByZWNvZ25pemVkIHN0YXJ0aW5nIHdpdGggYSAia2V5d29yZDoiIGxpbmUgYW5kIGVuZGluZworIiB3aXRoIGFuIGVtcHR5IGxpbmUgb3Igb3RoZXIgbGluZSB0aGF0IGNhbid0IGJlIGluIHRoZSBoZWFkZXIuIEFsbCBsaW5lcyBvZgorIiB0aGUgaGVhZGVyIGFyZSBoaWdobGlnaHRlZC4gSGVhZGVycyBvZiBxdW90ZWQgbWVzc2FnZXMgKHF1b3RlZCB3aXRoID4pIGFyZQorIiBhbHNvIGhpZ2hsaWdodGVkLgorCisiIFN5bnRheCBjbHVzdGVycworc3luIGNsdXN0ZXIgbWFpbEhlYWRlckZpZWxkcwljb250YWlucz1tYWlsSGVhZGVyS2V5LG1haWxTdWJqZWN0LG1haWxIZWFkZXJFbWFpbCxAbWFpbExpbmtzCitzeW4gY2x1c3RlciBtYWlsTGlua3MJCWNvbnRhaW5zPW1haWxVUkwsbWFpbEVtYWlsCitzeW4gY2x1c3RlciBtYWlsUXVvdGVFeHBzCWNvbnRhaW5zPW1haWxRdW90ZUV4cDEsbWFpbFF1b3RlRXhwMixtYWlsUXVvdGVFeHAzLG1haWxRdW90ZUV4cDQsbWFpbFF1b3RlRXhwNSxtYWlsUXVvdGVFeHA2CisKK3N5biBjYXNlIG1hdGNoCisiIEZvciAiRnJvbSAiIG1hdGNoaW5nIGNhc2UgaXMgcmVxdWlyZWQuIFRoZSAiRnJvbSAiIGlzIG5vdCBtYXRjaGVkIGluIHF1b3RlZAorIiBlbWFpbHMKK3N5biByZWdpb24JbWFpbEhlYWRlcgljb250YWlucz1AbWFpbEhlYWRlckZpZWxkcyBzdGFydD0iXkZyb20gIiBza2lwPSJeXHMiIGVuZD0iXHZeWy1BLVphLXowLTldKihbXi1BLVphLXowLTk6XXwkKSJtZT1zLTEKK3N5biBtYXRjaAltYWlsSGVhZGVyS2V5CWNvbnRhaW5lZCBjb250YWlucz1tYWlsRW1haWwgIl5Gcm9tXHMuKiQiCisKK3N5biBjYXNlIGlnbm9yZQorIiBOb3RoaW5nIGVsc2UgZGVwZW5kcyBvbiBjYXNlLiBIZWFkZXJzIGluIHByb3Blcmx5IHF1b3RlZCAod2l0aCAiPiAiIG9yICI+IikKKyIgZW1haWxzIGFyZSBtYXRjaGVkCitzeW4gcmVnaW9uCW1haWxIZWFkZXIJa2VlcGVuZCBjb250YWlucz1AbWFpbEhlYWRlckZpZWxkcyxAbWFpbFF1b3RlRXhwcyBzdGFydD0iXlx6KFwoPiBcP1wpKlwpXHYobmV3c2dyb3Vwc3xmcm9tfCgoaW4tKT9yZXBseS0pP3RvfGI/Y2N8c3ViamVjdHxyZXR1cm4tcGF0aHxyZWNlaXZlZHxkYXRlfHJlcGxpZWQpOiIgc2tpcD0iXlx6MVxzIiBlbmQ9Ilx2Xlx6MVstYS16MC05XSooW14tYS16MC05Ol18JCkibWU9cy0xIGVuZD0iXHZeXHoxQCEibWU9cy0xIGVuZD0iXHZeXHoxKFw+ID8pKyJtZT1zLTEKKworc3luIHJlZ2lvbgltYWlsSGVhZGVyS2V5CWNvbnRhaW5lZCBjb250YWlucz1tYWlsSGVhZGVyRW1haWwsbWFpbEVtYWlsLEBtYWlsUXVvdGVFeHBzIHN0YXJ0PSJcdiheKFw+ID8pKilAPD0odG98Yj9jYyk6IiBza2lwPSIsJCIgZW5kPSIkIgorc3luIG1hdGNoCW1haWxIZWFkZXJLZXkJY29udGFpbmVkIGNvbnRhaW5zPW1haWxIZWFkZXJFbWFpbCxtYWlsRW1haWwgIlx2KF4oXD4gPykqKUA8PShmcm9tfHJlcGx5LXRvKTouKiQiCitzeW4gbWF0Y2gJbWFpbEhlYWRlcktleQljb250YWluZWQgIlx2KF4oXD4gPykqKUA8PWRhdGU6Igorc3luIG1hdGNoCW1haWxTdWJqZWN0CWNvbnRhaW5lZCAiXHYoXihcPiA/KSopQDw9c3ViamVjdDouKiQiIGNvbnRhaW5zPUBTcGVsbAorCisiIEFueXRoaW5nIGluIHRoZSBoZWFkZXIgYmV0d2VlbiA8IGFuZCA+IGlzIGFuIGVtYWlsIGFkZHJlc3MKK3N5biBtYXRjaAltYWlsSGVhZGVyRW1haWwJY29udGFpbmVkICI8Llx7LX0+IgorCisiIE1haWwgU2lnbmF0dXJlcy4gKEJlZ2luIHdpdGggIi0tIiwgZW5kIHdpdGggY2hhbmdlIGluIHF1b3RlIGxldmVsKQorc3luIHJlZ2lvbgltYWlsU2lnbmF0dXJlCWtlZXBlbmQgY29udGFpbnM9QG1haWxMaW5rcyxAbWFpbFF1b3RlRXhwcyBzdGFydD0iXlx6KFwoPiBcP1wpKlwpLS0gKiQiIGVuZD0iXlx6MSQiIGVuZD0iXlx6MVxAISJtZT1zLTEgZW5kPSJeXHoxXCg+IFw/XClcKyJtZT1zLTEKKworIiBVUkxzIHN0YXJ0IHdpdGggYSBrbm93biBwcm90b2NvbCBvciB3d3csd2ViLHczLgorc3luIG1hdGNoIG1haWxVUkwgYFx2PCgoKGh0dHBzP3xmdHB8Z29waGVyKTovL3wobWFpbHRvfGZpbGV8bmV3cyk6KVteJyAJPD4iXSt8KHd3d3x3ZWJ8dzMpW2EtejAtOV8tXSpcLlthLXowLTkuXy1dK1wuW14nIAk8PiJdKylbYS16MC05L11gCitzeW4gbWF0Y2ggbWFpbEVtYWlsICJcdltfPWEtelwuLyswLTktXStcQFthLXowLTkuXy1dK1xhezJ9IgorCisiIE1ha2Ugc3VyZSBxdW90ZSBtYXJrZXJzIGluIHJlZ2lvbnMgKGhlYWRlciAvIHNpZ25hdHVyZSkgaGF2ZSBjb3JyZWN0IGNvbG9yCitzeW4gbWF0Y2ggbWFpbFF1b3RlRXhwMQljb250YWluZWQgIlx2XihcPiA/KSIKK3N5biBtYXRjaCBtYWlsUXVvdGVFeHAyCWNvbnRhaW5lZCAiXHZeKFw+ID8pezJ9Igorc3luIG1hdGNoIG1haWxRdW90ZUV4cDMJY29udGFpbmVkICJcdl4oXD4gPyl7M30iCitzeW4gbWF0Y2ggbWFpbFF1b3RlRXhwNAljb250YWluZWQgIlx2XihcPiA/KXs0fSIKK3N5biBtYXRjaCBtYWlsUXVvdGVFeHA1CWNvbnRhaW5lZCAiXHZeKFw+ID8pezV9Igorc3luIG1hdGNoIG1haWxRdW90ZUV4cDYJY29udGFpbmVkICJcdl4oXD4gPyl7Nn0iCisKKyIgRXZlbiBhbmQgb2RkIHF1b3RlZCBsaW5lcy4gb3JkZXIgaXMgaW1wb3JhbnQgaGVyZSEKK3N5biBtYXRjaCBtYWlsUXVvdGVkMQljb250YWlucz1tYWlsSGVhZGVyLEBtYWlsTGlua3MsbWFpbFNpZ25hdHVyZSAiXlwoW2Etel1cKz5cfFtdfH0+XVwpLiokIgorc3luIG1hdGNoIG1haWxRdW90ZWQyCWNvbnRhaW5zPW1haWxIZWFkZXIsQG1haWxMaW5rcyxtYWlsU2lnbmF0dXJlICJeXChcKFthLXpdXCs+XHxbXXx9Pl1cKVsgXHRdKlwpXHsyfS4qJCIKK3N5biBtYXRjaCBtYWlsUXVvdGVkMwljb250YWlucz1tYWlsSGVhZGVyLEBtYWlsTGlua3MsbWFpbFNpZ25hdHVyZSAiXlwoXChbYS16XVwrPlx8W118fT5dXClbIFx0XSpcKVx7M30uKiQiCitzeW4gbWF0Y2ggbWFpbFF1b3RlZDQJY29udGFpbnM9bWFpbEhlYWRlcixAbWFpbExpbmtzLG1haWxTaWduYXR1cmUgIl5cKFwoW2Etel1cKz5cfFtdfH0+XVwpWyBcdF0qXClcezR9LiokIgorc3luIG1hdGNoIG1haWxRdW90ZWQ1CWNvbnRhaW5zPW1haWxIZWFkZXIsQG1haWxMaW5rcyxtYWlsU2lnbmF0dXJlICJeXChcKFthLXpdXCs+XHxbXXx9Pl1cKVsgXHRdKlwpXHs1fS4qJCIKK3N5biBtYXRjaCBtYWlsUXVvdGVkNgljb250YWlucz1tYWlsSGVhZGVyLEBtYWlsTGlua3MsbWFpbFNpZ25hdHVyZSAiXlwoXChbYS16XVwrPlx8W118fT5dXClbIFx0XSpcKVx7Nn0uKiQiCisKKyIgTmVlZCB0byBzeW5jIG9uIHRoZSBoZWFkZXIuIEFzc3VtZSB3ZSBjYW4gZG8gdGhhdCB3aXRoaW4gMTAwIGxpbmVzCitpZiBleGlzdHMoIm1haWxfbWlubGluZXMiKQorICAgIGV4ZWMgInN5biBzeW5jIG1pbmxpbmVzPSIgLiBtYWlsX21pbmxpbmVzCitlbHNlCisgICAgc3luIHN5bmMgbWlubGluZXM9MTAwCitlbmRpZgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCitoaSBkZWYgbGluayBtYWlsSGVhZGVyCQlTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIG1haWxIZWFkZXJLZXkJVHlwZQoraGkgZGVmIGxpbmsgbWFpbFNpZ25hdHVyZQlQcmVQcm9jCitoaSBkZWYgbGluayBtYWlsSGVhZGVyRW1haWwJbWFpbEVtYWlsCitoaSBkZWYgbGluayBtYWlsRW1haWwJCVNwZWNpYWwKK2hpIGRlZiBsaW5rIG1haWxVUkwJCVN0cmluZworaGkgZGVmIGxpbmsgbWFpbFN1YmplY3QJCUxpbmVOUgoraGkgZGVmIGxpbmsgbWFpbFF1b3RlZDEJCUNvbW1lbnQKK2hpIGRlZiBsaW5rIG1haWxRdW90ZWQzCQltYWlsUXVvdGVkMQoraGkgZGVmIGxpbmsgbWFpbFF1b3RlZDUJCW1haWxRdW90ZWQxCitoaSBkZWYgbGluayBtYWlsUXVvdGVkMgkJSWRlbnRpZmllcgoraGkgZGVmIGxpbmsgbWFpbFF1b3RlZDQJCW1haWxRdW90ZWQyCitoaSBkZWYgbGluayBtYWlsUXVvdGVkNgkJbWFpbFF1b3RlZDIKK2hpIGRlZiBsaW5rIG1haWxRdW90ZUV4cDEJbWFpbFF1b3RlZDEKK2hpIGRlZiBsaW5rIG1haWxRdW90ZUV4cDIJbWFpbFF1b3RlZDIKK2hpIGRlZiBsaW5rIG1haWxRdW90ZUV4cDMJbWFpbFF1b3RlZDMKK2hpIGRlZiBsaW5rIG1haWxRdW90ZUV4cDQJbWFpbFF1b3RlZDQKK2hpIGRlZiBsaW5rIG1haWxRdW90ZUV4cDUJbWFpbFF1b3RlZDUKK2hpIGRlZiBsaW5rIG1haWxRdW90ZUV4cDYJbWFpbFF1b3RlZDYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibWFpbCIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L21haWxjYXAudmltIGIvcnVudGltZS9zeW50YXgvbWFpbGNhcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2MjcwNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21haWxjYXAudmltCkBAIC0wLDAgKzEsNTQgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglNYWlsY2FwIGNvbmZpZ3VyYXRpb24gZmlsZQorIiBNYWludGFpbmVyOglEb3VnIEtlYXJucworIiBMYXN0IENoYW5nZToJMjAwMiBOb3ZlbWJlciAyNAorIiBVUkw6CQlodHRwOi8vbXVnY2EuaXRzLm1vbmFzaC5lZHUuYXUvfmRqa2VhMi92aW0vc3ludGF4L21haWxjYXAudmltCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIG1hdGNoICBtYWlsY2FwQ29tbWVudAkiXiMuKiIKKworc3luIHJlZ2lvbiBtYWlsY2FwU3RyaW5nCXN0YXJ0PSsiKyBlbmQ9KyIrIGNvbnRhaW5zPW1haWxjYXBTcGVjaWFsIG9uZWxpbmUKKworc3luIG1hdGNoICBtYWlsY2FwRGVsaW1pdGVyCSJcXFxAPCE7IgorCitzeW4gbWF0Y2ggIG1haWxjYXBTcGVjaWFsCSJcXFxAPCElW25zdEZdIgorc3luIG1hdGNoICBtYWlsY2FwU3BlY2lhbAkiXFxcQDwhJXtbXn1dKn0iCisKK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoICBtYWlsY2FwRmxhZwkJIlwoPVxzKlwpXEA8IVw8XChuZWVkc3Rlcm1pbmFsXHxjb3Bpb3Vzb3V0cHV0XHx4LVx3XCtcKVw+Igorc3luIG1hdGNoICBtYWlsY2FwRmllbGRuYW1lCSJcPFwoY29tcG9zZVx8Y29tcG9zZXR5cGVkXHxwcmludFx8ZWRpdFx8dGVzdFx8eDExLWJpdG1hcFx8bmFtZXRlbXBsYXRlXHx0ZXh0dWFsbmV3bGluZXNcfGRlc2NyaXB0aW9uXHx4LVx3K1wpXD5cemVccyo9Igorc3luIG1hdGNoICBtYWlsY2FwVHlwZUZpZWxkCSJeXCh0ZXh0XHxpbWFnZVx8YXVkaW9cfHZpZGVvXHxhcHBsaWNhdGlvblx8bWVzc2FnZVx8bXVsdGlwYXJ0XHxtb2RlbFx8eC1bWzpncmFwaDpdXVwrXClcKC9cKFwqXHxbWzpncmFwaDpdXVwrXClcKVw9XHplXHMqOyIKK3N5biBjYXNlIG1hdGNoCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX21haWxjYXBfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbWFpbGNhcF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBtYWlsY2FwQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgbWFpbGNhcERlbGltaXRlcglEZWxpbWl0ZXIKKyAgSGlMaW5rIG1haWxjYXBGbGFnCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1haWxjYXBGaWVsZG5hbWUJU3RhdGVtZW50CisgIEhpTGluayBtYWlsY2FwU3BlY2lhbAkJSWRlbnRpZmllcgorICBIaUxpbmsgbWFpbGNhcFR5cGVGaWVsZAlUeXBlCisgIEhpTGluayBtYWlsY2FwU3RyaW5nCQlTdHJpbmcKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibWFpbGNhcCIKKworIiB2aW06IHRhYnN0b3A9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbWFrZS52aW0gYi9ydW50aW1lL3N5bnRheC9tYWtlLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWRhOTgwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbWFrZS52aW0KQEAgLTAsMCArMSwxMzcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglNYWtlZmlsZQorIiBNYWludGFpbmVyOglDbGF1ZGlvIEZsZWluZXIgPGNsYXVkaW9AZmxlaW5lci5jb20+CisiIFVSTDoJCWh0dHA6Ly93d3cuZmxlaW5lci5jb20vdmltL3N5bnRheC9tYWtlLnZpbQorIiBMYXN0IENoYW5nZToJMjAwNCBBcHIgMzAKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzCitzeW4gbWF0Y2ggbWFrZVNwZWNpYWwJIl5ccypbQC1dXCsiCitzeW4gbWF0Y2ggbWFrZU5leHRMaW5lCSJcXFxuXHMqIgorCisiIHNvbWUgZGlyZWN0aXZlcworc3luIG1hdGNoIG1ha2VQcmVDb25kaXQJIl5ccypcKGlmZXFcPlx8ZWxzZVw+XHxlbmRpZlw+XHxpZm5lcVw+XHxpZmRlZlw+XHxpZm5kZWZcPlwpIgorc3luIG1hdGNoIG1ha2VJbmNsdWRlCSJeXHMqWy1zXVw9aW5jbHVkZSIKK3N5biBtYXRjaCBtYWtlU3RhdGVtZW50CSJeXHMqdnBhdGgiCitzeW4gbWF0Y2ggbWFrZUV4cG9ydCAgICAiXlxzKlwoZXhwb3J0XHx1bmV4cG9ydFwpXD4iCitzeW4gbWF0Y2ggbWFrZU92ZXJyaWRlCSJeXHMqb3ZlcnJpZGUiCitoaSBsaW5rIG1ha2VPdmVycmlkZSBtYWtlU3RhdGVtZW50CitoaSBsaW5rIG1ha2VFeHBvcnQgbWFrZVN0YXRlbWVudAorCisiIEtvZWhsZXI6IGNhdGNoIHVubWF0Y2hlZCBkZWZpbmUvZW5kZWYga2V5d29yZHMuICBlbmRlZiBvbmx5IG1hdGNoZXMgaXQgaXMgYnkgaXRzZWxmIG9uIGEgbGluZQorc3luIHJlZ2lvbiBtYWtlRGVmaW5lIHN0YXJ0PSJeXHMqZGVmaW5lXHMiIGVuZD0iXlxzKmVuZGVmXHMqJCIgY29udGFpbnM9bWFrZVN0YXRlbWVudCxtYWtlSWRlbnQsbWFrZVByZUNvbmRpdCxtYWtlRGVmaW5lCisKKyIgTWljcm9zb2Z0IE1ha2VmaWxlIHNwZWNpYWxzCitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCBtYWtlSW5jbHVkZQkiXiFccyppbmNsdWRlIgorc3luIG1hdGNoIG1ha2VQcmVDb25kaXQgIiFccypcKGNtZHN3aXRjaGVzXHxlcnJvclx8bWVzc2FnZVx8aW5jbHVkZVx8aWZcfGlmZGVmXHxpZm5kZWZcfGVsc2VcfGVsc2VpZlx8ZWxzZSBpZlx8ZWxzZVxzKmlmZGVmXHxlbHNlXHMqaWZuZGVmXHxlbmRpZlx8dW5kZWZcKVw+Igorc3luIGNhc2UgbWF0Y2gKKworIiBpZGVudGlmaWVycworc3luIHJlZ2lvbiBtYWtlSWRlbnQJc3RhcnQ9IlwkKCIgc2tpcD0iXFwpXHxcXFxcIiBlbmQ9IikiIGNvbnRhaW5zPW1ha2VTdGF0ZW1lbnQsbWFrZUlkZW50LG1ha2VTU3RyaW5nLG1ha2VEU3RyaW5nCitzeW4gcmVnaW9uIG1ha2VJZGVudAlzdGFydD0iXCR7IiBza2lwPSJcXH1cfFxcXFwiIGVuZD0ifSIgY29udGFpbnM9bWFrZVN0YXRlbWVudCxtYWtlSWRlbnQsbWFrZVNTdHJpbmcsbWFrZURTdHJpbmcKK3N5biBtYXRjaCBtYWtlSWRlbnQJIlwkXCRcdyoiCitzeW4gbWF0Y2ggbWFrZUlkZW50CSJcJFteKHtdIgorc3luIG1hdGNoIG1ha2VJZGVudAkiXlxzKlxhXHcqXHMqWzorPyEqXT0ibWU9ZS0yCitzeW4gbWF0Y2ggbWFrZUlkZW50CSJeXHMqXGFcdypccyo9Im1lPWUtMQorc3luIG1hdGNoIG1ha2VJZGVudAkiJSIKKworIiBNYWtlZmlsZS5pbiB2YXJpYWJsZXMKK3N5biBtYXRjaCBtYWtlQ29uZmlnICJAW0EtWmEtejAtOV9dXCtAIgorCisiIG1ha2UgdGFyZ2V0cworIiBzeW4gbWF0Y2ggbWFrZVNwZWNUYXJnZXQJIl5cLlwoU1VGRklYRVNcfFBIT05ZXHxERUZBVUxUXHxQUkVDSU9VU1x8SUdOT1JFXHxTSUxFTlRcfEVYUE9SVF9BTExfVkFSSUFCTEVTXHxLRUVQX1NUQVRFXHxMSUJQQVRURVJOU1x8Tk9UUEFSQUxMRUxcfERFTEVURV9PTl9FUlJPUlx8SU5URVJNRURJQVRFXHxQT1NJWFx8U0VDT05EQVJZXClcPiIKK3N5biBtYXRjaCBtYWtlSW1wbGljaXQJCSJeXC5bQS1aYS16MC05Xy4vXHQgLV1cK1xzKjpbXj1dIm1lPWUtMiBuZXh0Z3JvdXA9bWFrZVNvdXJjZQorc3luIG1hdGNoIG1ha2VJbXBsaWNpdAkJIl5cLltBLVphLXowLTlfLi9cdCAtXVwrXHMqOiQibWU9ZS0xIG5leHRncm91cD1tYWtlU291cmNlCisKK3N5biByZWdpb24gbWFrZVRhcmdldAl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW1ha2VUYXJnZXQgc3RhcnQ9Il5bQS1aYS16MC05Xy4vJCgpJS1dW0EtWmEtejAtOV8uL1x0ICQoKSUtXSo6XHsxLDJ9W146PV0icnM9ZS0xIGVuZD0iOyJyZT1lLTEsbWU9ZS0xIGVuZD0iW15cXF0kIiBrZWVwZW5kIGNvbnRhaW5zPW1ha2VJZGVudCxtYWtlU3BlY1RhcmdldCxtYWtlTmV4dExpbmUgc2tpcG5sIG5leHRHcm91cD1tYWtlQ29tbWFuZHMKK3N5biBtYXRjaCBtYWtlVGFyZ2V0CQkiXltBLVphLXowLTlfLi8kKCklKkAtXVtBLVphLXowLTlfLi9cdCAkKCklKkAtXSo6Olw9XHMqJCIgY29udGFpbnM9bWFrZUlkZW50LG1ha2VTcGVjVGFyZ2V0IHNraXBubCBuZXh0Z3JvdXA9bWFrZUNvbW1hbmRzLG1ha2VDb21tYW5kRXJyb3IKKworc3luIHJlZ2lvbiBtYWtlU3BlY1RhcmdldAl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW1ha2VTcGVjVGFyZ2V0IHN0YXJ0PSJeXC5cKFNVRkZJWEVTXHxQSE9OWVx8REVGQVVMVFx8UFJFQ0lPVVNcfElHTk9SRVx8U0lMRU5UXHxFWFBPUlRfQUxMX1ZBUklBQkxFU1x8S0VFUF9TVEFURVx8TElCUEFUVEVSTlNcfE5PVFBBUkFMTEVMXHxERUxFVEVfT05fRVJST1JcfElOVEVSTUVESUFURVx8UE9TSVhcfFNFQ09OREFSWVwpXD46XHsxLDJ9W146PV0icnM9ZS0xIGVuZD0iW15cXF0kIiBrZWVwZW5kIGNvbnRhaW5zPW1ha2VJZGVudCxtYWtlU3BlY1RhcmdldCxtYWtlTmV4dExpbmUgc2tpcG5sIG5leHRHcm91cD1tYWtlQ29tbWFuZHMKK3N5biBtYXRjaCBtYWtlU3BlY1RhcmdldAkJIl5cLlwoU1VGRklYRVNcfFBIT05ZXHxERUZBVUxUXHxQUkVDSU9VU1x8SUdOT1JFXHxTSUxFTlRcfEVYUE9SVF9BTExfVkFSSUFCTEVTXHxLRUVQX1NUQVRFXHxMSUJQQVRURVJOU1x8Tk9UUEFSQUxMRUxcfERFTEVURV9PTl9FUlJPUlx8SU5URVJNRURJQVRFXHxQT1NJWFx8U0VDT05EQVJZXClcPjo6XD1ccyokIiBjb250YWlucz1tYWtlSWRlbnQgc2tpcG5sIG5leHRncm91cD1tYWtlQ29tbWFuZHMsbWFrZUNvbW1hbmRFcnJvcgorCitzeW4gbWF0Y2ggbWFrZUNvbW1hbmRFcnJvciAiXlxzXCtcUy4qIiBjb250YWluZWQKK3N5biByZWdpb24gbWFrZUNvbW1hbmRzIHN0YXJ0PSI7ImhzPXMrMSBzdGFydD0iXlx0IiBlbmQ9Il5bXlx0I10ibWU9ZS0xLHJlPWUtMSBlbmQ9Il4kIiBjb250YWluZWQgY29udGFpbnM9bWFrZUNtZE5leHRMaW5lLG1ha2VTcGVjaWFsLG1ha2VDb21tZW50LG1ha2VJZGVudCxtYWtlUHJlQ29uZGl0LG1ha2VEZWZpbmUsbWFrZURTdHJpbmcsbWFrZVNTdHJpbmcgbmV4dGdyb3VwPW1ha2VDb21tYW5kRXJyb3IKK3N5biBtYXRjaCBtYWtlQ21kTmV4dExpbmUJIlxcXG4uImhlPWUtMSBjb250YWluZWQKKworCisiIFN0YXRlbWVudHMgLyBGdW5jdGlvbnMgKEdOVSBtYWtlKQorc3luIG1hdGNoIG1ha2VTdGF0ZW1lbnQgY29udGFpbmVkICIoXChzdWJzdFx8YWRkcHJlZml4XHxhZGRzdWZmaXhcfGJhc2VuYW1lXHxjYWxsXHxkaXJcfGVycm9yXHxmaWx0ZXItb3V0XHxmaWx0ZXJcfGZpbmRzdHJpbmdcfGZpcnN0d29yZFx8Zm9yZWFjaFx8aWZcfGpvaW5cfG5vdGRpclx8b3JpZ2luXHxwYXRzdWJzdFx8c2hlbGxcfHNvcnRcfHN0cmlwXHxzdWZmaXhcfHdhcm5pbmdcfHdpbGRjYXJkXHx3b3JkXHx3b3JkbGlzdFx8d29yZHNcKVw+Im1zPXMrMQorCisiIENvbW1lbnQKK2lmIGV4aXN0cygibWFrZV9taWNyb3NvZnQiKQorICAgc3luIG1hdGNoICBtYWtlQ29tbWVudCAiIy4qIiBjb250YWlucz1tYWtlVG9kbworZWxzZQorICAgc3luIHJlZ2lvbiAgbWFrZUNvbW1lbnQJc3RhcnQ9IiMiIGVuZD0iXiQiIGVuZD0iW15cXF0kIiBrZWVwZW5kIGNvbnRhaW5zPW1ha2VUb2RvCisgICBzeW4gbWF0Y2ggICBtYWtlQ29tbWVudAkiIyQiCitlbmRpZgorc3luIGtleXdvcmQgbWFrZVRvZG8gVE9ETyBGSVhNRSBYWFggY29udGFpbmVkCisKKyIgbWF0Y2ggZXNjYXBlZCBxdW90ZXMgYW5kIGFueSBvdGhlciBlc2NhcGVkIGNoYXJhY3RlcgorIiBleGNlcHQgZm9yICQsIGFzIGEgYmFja3NsYXNoIGluIGZyb250IG9mIGEgJCBkb2VzCisiIG5vdCBtYWtlIGl0IGEgc3RhbmRhcmQgY2hhcmFjdGVyLCBidXQgaW5zdGVhZCBpdCB3aWxsCisiIHN0aWxsIGFjdCBhcyB0aGUgYmVnaW5uaW5nIG9mIGEgdmFyaWFibGUKKyIgVGhlIGVzY2FwZWQgY2hhciBpcyBub3QgaGlnaGxpZ2h0ZXQgY3VycmVudGx5CitzeW4gbWF0Y2ggbWFrZUVzY2FwZWRDaGFyCSJcXFteJF0iCisKKworc3luIHJlZ2lvbiAgbWFrZURTdHJpbmcgc3RhcnQ9K1woXFxcKVxAPCEiKyAgc2tpcD0rXFwuKyAgZW5kPSsiKyAgY29udGFpbnM9bWFrZUlkZW50CitzeW4gcmVnaW9uICBtYWtlU1N0cmluZyBzdGFydD0rXChcXFwpXEA8IScrICBza2lwPStcXC4rICBlbmQ9KycrICBjb250YWlucz1tYWtlSWRlbnQKK3N5biByZWdpb24gIG1ha2VCU3RyaW5nIHN0YXJ0PStcKFxcXClcQDwhYCsgIHNraXA9K1xcLisgIGVuZD0rYCsgIGNvbnRhaW5zPW1ha2VJZGVudCxtYWtlU1N0cmluZyxtYWtlRFN0cmluZyxtYWtlTmV4dExpbmUKKworIiBTeW5jaW5nCitzeW4gc3luYyBtaW5saW5lcz0yMCBtYXhsaW5lcz0yMDAKKworIiBTeW5jIG9uIE1ha2UgY29tbWFuZCBibG9jayByZWdpb246IFdoZW4gc2VhcmNoaW5nIGJhY2t3YXJkcyBoaXRzIGEgbGluZSB0aGF0CisiIGNhbid0IGJlIGEgY29tbWFuZCBvciBhIGNvbW1lbnQsIHVzZSBtYWtlQ29tbWFuZHMgaWYgaXQgbG9va3MgbGlrZSBhIHRhcmdldCwKKyIgTk9ORSBvdGhlcndpc2UuCitzeW4gc3luYyBtYXRjaCBtYWtlQ29tbWFuZFN5bmMgZ3JvdXB0aGVyZSBOT05FICJeW15cdCNdIgorc3luIHN5bmMgbWF0Y2ggbWFrZUNvbW1hbmRTeW5jIGdyb3VwdGhlcmUgbWFrZUNvbW1hbmRzICJeW0EtWmEtejAtOV8uLyQoKSUtXVtBLVphLXowLTlfLi9cdCAkKCklLV0qOlx7MSwyfVteOj1dIgorc3luIHN5bmMgbWF0Y2ggbWFrZUNvbW1hbmRTeW5jIGdyb3VwdGhlcmUgbWFrZUNvbW1hbmRzICJeW0EtWmEtejAtOV8uLyQoKSUtXVtBLVphLXowLTlfLi9cdCAkKCklLV0qOlx7MSwyfVxzKiQiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX21ha2Vfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbWFrZV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBtYWtlTmV4dExpbmUJCW1ha2VTcGVjaWFsCisgIEhpTGluayBtYWtlQ21kTmV4dExpbmUJbWFrZVNwZWNpYWwKKyAgSGlMaW5rIG1ha2VTcGVjVGFyZ2V0CQlTdGF0ZW1lbnQKKyAgaWYgIWV4aXN0cygibWFrZV9ub19jb21tYW5kcyIpCisgICAgSGlMaW5rIG1ha2VDb21tYW5kcwkJTnVtYmVyCisgIGVuZGlmCisgIEhpTGluayBtYWtlSW1wbGljaXQJCUZ1bmN0aW9uCisgIEhpTGluayBtYWtlVGFyZ2V0CQlGdW5jdGlvbgorICBIaUxpbmsgbWFrZUluY2x1ZGUJCUluY2x1ZGUKKyAgSGlMaW5rIG1ha2VQcmVDb25kaXQJCVByZUNvbmRpdAorICBIaUxpbmsgbWFrZVN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBtYWtlSWRlbnQJCUlkZW50aWZpZXIKKyAgSGlMaW5rIG1ha2VTcGVjaWFsCQlTcGVjaWFsCisgIEhpTGluayBtYWtlQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgbWFrZURTdHJpbmcJCVN0cmluZworICBIaUxpbmsgbWFrZVNTdHJpbmcJCVN0cmluZworICBIaUxpbmsgbWFrZUJTdHJpbmcJCUZ1bmN0aW9uCisgIEhpTGluayBtYWtlRXJyb3IJCUVycm9yCisgIEhpTGluayBtYWtlVG9kbwkJVG9kbworICBIaUxpbmsgbWFrZURlZmluZQkJRGVmaW5lCisgIEhpTGluayBtYWtlQ29tbWFuZEVycm9yCUVycm9yCisgIEhpTGluayBtYWtlQ29uZmlnCQlQcmVDb25kaXQKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1ha2UiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9tYW4udmltIGIvcnVudGltZS9zeW50YXgvbWFuLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDcxODBjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbWFuLnZpbQpAQCAtMCwwICsxLDY3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJTWFuIHBhZ2UKKyIgTWFpbnRhaW5lcjoJTmFtIFN1bmdIeXVuIDxuYW1zaEBrbGRwLm9yZz4KKyIgUHJldmlvdXMgTWFpbnRhaW5lcjoJR2F1dGFtIEguIE11ZHVudXJpIDxnbXVkdW51ckBpbmZvcm1hdGljYS5jb20+CisiIFZlcnNpb24gSW5mbzoKKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDE2CisKKyIgQWRkaXRpb25hbCBoaWdobGlnaHRpbmcgYnkgSm9oYW5uZXMgVGFuemxlciA8am9oYW5uZXMudGFuemxlckBhb24uYXQ+OgorIgkqIG1hblN1YkhlYWRpbmcKKyIJKiBtYW5TeW5vcHNpcyAob25seSBmb3Igc2VjdGlvbnMgMiBhbmQgMykKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEdldCB0aGUgQ1RSTC1IIHN5bnRheCB0byBoYW5kbGUgYmFja3NwYWNlZCB0ZXh0CitpZiB2ZXJzaW9uID49IDYwMAorICBydW50aW1lISBzeW50YXgvY3RybGgudmltCitlbHNlCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9jdHJsaC52aW0KK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoICBtYW5SZWZlcmVuY2UgICAgICAgIlxmXCsoWzEtOV1bYS16XVw9KSIKK3N5biBtYXRjaCAgbWFuVGl0bGUJICAgICAgIl5cZlwrKFswLTldXCtbYS16XVw9KS4qIgorc3luIG1hdGNoICBtYW5TZWN0aW9uSGVhZGluZyAgIl5bYS16XVthLXogXSpbYS16XSQiCitzeW4gbWF0Y2ggIG1hblN1YkhlYWRpbmcgICAgICAiXlxzXHszXH1bYS16XVthLXogXSpbYS16XSQiCitzeW4gbWF0Y2ggIG1hbk9wdGlvbkRlc2MgICAgICAiXlxzKlsrLV1bYS16MC05XVxTKiIKK3N5biBtYXRjaCAgbWFuTG9uZ09wdGlvbkRlc2MgICJeXHMqLS1bYS16MC05LV1cUyoiCisiIHN5biBtYXRjaCAgbWFuSGlzdG9yeQkJIl5bYS16XS4qbGFzdCBjaGFuZ2UuKiQiCisKK2lmIGdldGxpbmUoMSkgPX4gJ15bYS16QS1aX11cKyhbMjNdKScKKyAgc3ludGF4IGluY2x1ZGUgQGNDb2RlIDxzZmlsZT46cDpoL2MudmltCisgIHN5biBtYXRjaCBtYW5DRnVuY0RlZmluaXRpb24gIGRpc3BsYXkgIlw8XGhcdypcPlxzKigibWU9ZS0xIGNvbnRhaW5lZAorICBzeW4gcmVnaW9uIG1hblN5bm9wc2lzIHN0YXJ0PSJeU1lOT1BTSVMiaHM9cys4IGVuZD0iXlx1XCtccyokImhlPWUtMTIga2VlcGVuZCBjb250YWlucz1tYW5TZWN0aW9uSGVhZGluZyxAY0NvZGUsbWFuQ0Z1bmNEZWZpbml0aW9uCitlbmRpZgorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX21hbl9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9tYW5fc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbWFuVGl0bGUJICAgIFRpdGxlCisgIEhpTGluayBtYW5TZWN0aW9uSGVhZGluZyAgU3RhdGVtZW50CisgIEhpTGluayBtYW5PcHRpb25EZXNjCSAgICBDb25zdGFudAorICBIaUxpbmsgbWFuTG9uZ09wdGlvbkRlc2MgIENvbnN0YW50CisgIEhpTGluayBtYW5SZWZlcmVuY2UJICAgIFByZVByb2MKKyAgSGlMaW5rIG1hblN1YkhlYWRpbmcgICAgICBGdW5jdGlvbgorICBIaUxpbmsgbWFuQ0Z1bmNEZWZpbml0aW9uIEZ1bmN0aW9uCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1hbiIKKworIiB2aW06dHM9OCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbWFudWFsLnZpbSBiL3J1bnRpbWUvc3ludGF4L21hbnVhbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjMDQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21hbnVhbC52aW0KQEAgLTAsMCArMSwyNSBAQAorIiBWaW0gc3ludGF4IHN1cHBvcnQgZmlsZQorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMSBKdW4gMDQKKworIiBUaGlzIGZpbGUgaXMgdXNlZCBmb3IgIjpzeW50YXggbWFudWFsIi4KKyIgSXQgaW5zdGFsbHMgdGhlIFN5bnRheCBhdXRvY29tbWFuZHMsIGJ1dCBubyB0aGUgRmlsZVR5cGUgYXV0b2NvbW1hbmRzLgorCitpZiAhaGFzKCJzeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgTG9hZCB0aGUgU3ludGF4IGF1dG9jb21tYW5kcyBhbmQgc2V0IHRoZSBkZWZhdWx0IG1ldGhvZHMgZm9yIGhpZ2hsaWdodGluZy4KK2lmICFleGlzdHMoInN5bnRheF9vbiIpCisgIHNvIDxzZmlsZT46cDpoL3N5bmxvYWQudmltCitlbmRpZgorCitsZXQgc3ludGF4X21hbnVhbCA9IDEKKworIiBSZW1vdmUgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBGaWxlVHlwZSBhbmQgU3ludGF4IGF1dG9jb21tYW5kcy4KK3NpbGVudCEgYXUhIHN5bnRheHNldCBGaWxlVHlwZQorCisiIElmIHRoZSBHVUkgaXMgYWxyZWFkeSBydW5uaW5nLCBtYXkgc3RpbGwgbmVlZCB0byBpbnN0YWxsIHRoZSBGaWxlVHlwZSBtZW51LgoraWYgaGFzKCJndWlfcnVubmluZyIpICYmICFleGlzdHMoImRpZF9pbnN0YWxsX3N5bnRheF9tZW51IikKKyAgc291cmNlICRWSU1SVU5USU1FL21lbnUudmltCitlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbWFwbGUudmltIGIvcnVudGltZS9zeW50YXgvbWFwbGUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTdjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9tYXBsZS52aW0KQEAgLTAsMCArMSw1ODIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglNYXBsZSBWIChiYXNlZCBvbiByZWxlYXNlIDQpCisiIE1haW50YWluZXI6CURyLiBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gPE5kck9jaGlwU0BQY2FtcGJlbGxBZmFtaWx5Lk1iaXo+CisiIExhc3QgQ2hhbmdlOglNYXIgMTAsIDIwMDQKKyIgVmVyc2lvbjoJNAorIiBVUkw6CWh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCN2aW1saW5rc19zeW50YXgKKyIKKyIgUGFja2FnZSBGdW5jdGlvbiBTZWxlY3Rpb246IHt7ezEKKyIgQmVjYXVzZSB0aGVyZSBhcmUgYSBsb3Qgb2YgcGFja2FnZXMsIGFuZCBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgZm9yIG5hbWVzcGFjZQorIiBjbGFzaGVzLCB0aGlzIHZlcnNpb24gb2YgPG1hcGxlLnZpbT4gbmVlZHMgdGhlIHVzZXIgdG8gc2VsZWN0IHdoaWNoLCBpZiBhbnksCisiIHBhY2thZ2UgZnVuY3Rpb25zIHNob3VsZCBiZSBoaWdobGlnaHRlZC4gIFNlbGVjdCB5b3VyIHBhY2thZ2VzIGFuZCBwdXQgaW50byB5b3VyCisiIDwudmltcmM+IG5vbmUgb3IgbW9yZSBvZiB0aGUgbGluZXMgZm9sbG93aW5nIGxldCAuLi49MSBsaW5lczoKKyIKKyIgICBpZiBleGlzdHMoIm12cGtnX2FsbCIpCisiICAgIC4uLgorIiAgIGVuZGlmCisiCisiICpPUiogbGV0IG12cGtnX2FsbD0xCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIElza2V5d29yZCBFZmZlY3RzOiB7e3sxCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNldCBpc2tleXdvcmQ9JCw0OC01NyxfLGEteixALVoKK2Vsc2UKKyAgc2V0bG9jYWwgaXNrZXl3b3JkPSQsNDgtNTcsXyxhLXosQC1aCitlbmRpZgorCisiIFBhY2thZ2UgU2VsZWN0aW9uOiB7e3sxCisiIGFsbG93IHVzZXIgdG8gc2ltcGx5IHNlbGVjdCBhbGwgcGFja2FnZXMgZm9yIGhpZ2hsaWdodGluZworaWYgZXhpc3RzKCJtdnBrZ19hbGwiKQorICBsZXQgbXZfREV0b29scyAgICA9IDEKKyAgbGV0IG12X0dhbG9pcyAgICAgPSAxCisgIGxldCBtdl9HYXVzc0ludCAgID0gMQorICBsZXQgbXZfTFJFdG9vbHMgICA9IDEKKyAgbGV0IG12X2NvbWJpbmF0ICAgPSAxCisgIGxldCBtdl9jb21ic3RydWN0ID0gMQorICBsZXQgbXZfZGlmZm9ybXMgICA9IDEKKyAgbGV0IG12X2ZpbmFuY2UgICAgPSAxCisgIGxldCBtdl9nZW5mdW5jICAgID0gMQorICBsZXQgbXZfZ2VvbWV0cnkgICA9IDEKKyAgbGV0IG12X2dyb2JuZXIgICAgPSAxCisgIGxldCBtdl9ncm91cCAgICAgID0gMQorICBsZXQgbXZfaW50dHJhbnMgICA9IDEKKyAgbGV0IG12X2xpZXN5bW0gICAgPSAxCisgIGxldCBtdl9saW5hbGcgICAgID0gMQorICBsZXQgbXZfbG9naWMgICAgICA9IDEKKyAgbGV0IG12X25ldHdvcmtzICAgPSAxCisgIGxldCBtdl9udW1hcHByb3ggID0gMQorICBsZXQgbXZfbnVtdGhlb3J5ICA9IDEKKyAgbGV0IG12X29ydGhvcG9seSAgPSAxCisgIGxldCBtdl9wYWRpYyAgICAgID0gMQorICBsZXQgbXZfcGxvdHMgICAgICA9IDEKKyAgbGV0IG12X3Bsb3R0b29scyAgPSAxCisgIGxldCBtdl9wb3dzZXJpZXMgID0gMQorICBsZXQgbXZfcHJvY2VzcyAgICA9IDEKKyAgbGV0IG12X3NpbXBsZXggICAgPSAxCisgIGxldCBtdl9zdGF0cyAgICAgID0gMQorICBsZXQgbXZfc3R1ZGVudCAgICA9IDEKKyAgbGV0IG12X3N1bXRvb2xzICAgPSAxCisgIGxldCBtdl90ZW5zb3IgICAgID0gMQorICBsZXQgbXZfdG90b3JkZXIgICA9IDEKK2VuZGlmCisKKyIgUGFyZW50aGVzaXMvY3VybHkvYnJhY2Ugc2FuaXR5IGNoZWNrZXI6IHt7ezEKK3N5biByZWdpb24gbXZab25lCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIoIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIHRyYW5zcGFyZW50IGNvbnRhaW5zPUFMTEJVVCxtdkVycm9yLG12QnJhY2VFcnJvcixtdkN1cmx5RXJyb3IKK3N5biByZWdpb24gbXZab25lCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJ7IiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9In0iIHRyYW5zcGFyZW50IGNvbnRhaW5zPUFMTEJVVCxtdkVycm9yLG12QnJhY2VFcnJvcixtdlBhcmVuRXJyb3IKK3N5biByZWdpb24gbXZab25lCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcWyIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSJdIiB0cmFuc3BhcmVudCBjb250YWlucz1BTExCVVQsbXZFcnJvcixtdkN1cmx5RXJyb3IsbXZQYXJlbkVycm9yCitzeW4gbWF0Y2ggIG12RXJyb3IJCSJbKVxdfV0iCitzeW4gbWF0Y2ggIG12QnJhY2VFcnJvcgkiWyl9XSIJY29udGFpbmVkCitzeW4gbWF0Y2ggIG12Q3VybHlFcnJvcgkiWylcXV0iCWNvbnRhaW5lZAorc3luIG1hdGNoICBtdlBhcmVuRXJyb3IJIltcXX1dIgljb250YWluZWQKK3N5biBtYXRjaCAgbXZDb21tYQkJIlssOzpdIgorc3luIG1hdGNoICBtdlNlbWlFcnJvcgkiWzs6XSIJY29udGFpbmVkCisKKyIgTWFwbGUgViBQYWNrYWdlcywgY2lyY2EgUmVsZWFzZSA0OiB7e3sxCitzeW4ga2V5d29yZCBtdlBhY2thZ2UJREV0b29scwlkaWZmb3Jtcwlncm91cAluZXR3b3JrcwlwbG90cwlzdGF0cworc3luIGtleXdvcmQgbXZQYWNrYWdlCUdhbG9pcwlmaW5hbmNlCWludHRyYW5zCW51bWFwcHJveAlwbG90dG9vbHMJc3R1ZGVudAorc3luIGtleXdvcmQgbXZQYWNrYWdlCUdhdXNzSW50CWdlbmZ1bmMJbGllc3ltbQludW10aGVvcnkJcG93c2VyaWVzCXN1bXRvb2xzCitzeW4ga2V5d29yZCBtdlBhY2thZ2UJTFJFdG9vbHMJZ2VvbWV0cnkJbGluYWxnCW9ydGhvcG9seQlwcm9jZXNzCXRlbnNvcgorc3luIGtleXdvcmQgbXZQYWNrYWdlCWNvbWJpbmF0CWdyb2JuZXIJbG9naWMJcGFkaWMJc2ltcGxleAl0b3RvcmRlcgorc3luIGtleXdvcmQgbXZQYWNrYWdlCWNvbWJzdHJ1Y3QKKworIiBMYW5ndWFnZSBTdXBwb3J0OiB7e3sxCitzeW4ga2V5d29yZCBtdlRvZG8JY29udGFpbmVkCVRPRE8KK3N5biByZWdpb24gIG12U3RyaW5nCXN0YXJ0PStgKyBza2lwPStgYCsgZW5kPStgKwlrZWVwZW5kCWNvbnRhaW5zPW12VG9kbworc3luIHJlZ2lvbiAgbXZEZWxheUV2YWwJc3RhcnQ9KycrIGVuZD0rJysJa2VlcGVuZCBjb250YWlucz1BTExCVVQsbXZFcnJvcixtdkJyYWNlRXJyb3IsbXZDdXJseUVycm9yLG12UGFyZW5FcnJvcixtdlNlbWlFcnJvcgorc3luIG1hdGNoICAgbXZWYXJBc3NpZ24JIlthLXpBLVpfXVthLXpBLVpfMC05XSpbIFx0XSo6PSIgY29udGFpbnM9bXZBc3NpZ24KK3N5biBtYXRjaCAgIG12QXNzaWduCSI6PSIJY29udGFpbmVkCisKKyIgTG93ZXItUHJpb3JpdHkgT3BlcmF0b3JzOiB7e3sxCitzeW4gbWF0Y2ggbXZPcGVyCSJcLiIKKworIiBOdW1iZXIgaGFuZGxpbmc6IHt7ezEKK3N5biBtYXRjaCBtdk51bWJlcgkiXDxcZFwrIgkJIiBpbnRlZ2VyCisgc3luIG1hdGNoIG12TnVtYmVyCSJbLStdXD1cLlxkXCsiCQkiIC4gaW50ZWdlcgorc3luIG1hdGNoIG12TnVtYmVyCSJcPFxkXCtcLlxkXCsiCQkiIGludGVnZXIgLiBpbnRlZ2VyCitzeW4gbWF0Y2ggbXZOdW1iZXIJIlw8XGRcK1wuIgkJIiBpbnRlZ2VyIC4KK3N5biBtYXRjaCBtdk51bWJlcgkiXDxcZFwrXC5cLiIJY29udGFpbnM9bXZSYW5nZQkiIGludGVnZXIgLi4KKworc3luIG1hdGNoIG12TnVtYmVyCSJcPFxkXCtlWy0rXVw9XGRcKyIJCSIgaW50ZWdlciBlIFstK10gaW50ZWdlcgorc3luIG1hdGNoIG12TnVtYmVyCSJbLStdXD1cLlxkXCtlWy0rXVw9XGRcKyIJIiAuIGludGVnZXIgZSBbLStdIGludGVnZXIKK3N5biBtYXRjaCBtdk51bWJlcgkiXDxcZFwrXC5cZCplWy0rXVw9XGRcKyIJIiBpbnRlZ2VyIC4gW2ludGVnZXJdIGUgWy0rXSBpbnRlZ2VyCisKK3N5biBtYXRjaCBtdk51bWJlcgkiWy0rXVxkXCsiCQkiIGludGVnZXIKK3N5biBtYXRjaCBtdk51bWJlcgkiWy0rXVxkXCtcLlxkXCsiCQkiIGludGVnZXIgLiBpbnRlZ2VyCitzeW4gbWF0Y2ggbXZOdW1iZXIJIlstK11cZFwrXC4iCQkiIGludGVnZXIgLgorc3luIG1hdGNoIG12TnVtYmVyCSJbLStdXGRcK1wuXC4iCWNvbnRhaW5zPW12UmFuZ2UJIiBpbnRlZ2VyIC4uCisKK3N5biBtYXRjaCBtdk51bWJlcgkiWy0rXVxkXCtlWy0rXVw9XGRcKyIJIiBpbnRlZ2VyIGUgWy0rXSBpbnRlZ2VyCitzeW4gbWF0Y2ggbXZOdW1iZXIJIlstK11cZFwrXC5cZCplWy0rXVw9XGRcKyIJIiBpbnRlZ2VyIC4gW2ludGVnZXJdIGUgWy0rXSBpbnRlZ2VyCisKK3N5biBtYXRjaCBtdlJhbmdlCSJcLlwuIgorCisiIE9wZXJhdG9yczoge3t7MQorc3luIGtleXdvcmQgbXZPcGVyCWFuZCBub3Qgb3IKK3N5biBtYXRjaCAgIG12T3BlcgkiPD5cfFs8Pl09XHxbPD5dXHw9Igorc3luIG1hdGNoICAgbXZPcGVyCSImK1x8Ji1cfCZcKlx8JlwvXHwmIgorc3luIG1hdGNoICAgbXZFcnJvcgkiXC5cLlwuIgorCisiIE1hcGxlViBTdGF0ZW1lbnRzOiA/IHN0YXRlbWVudCB7e3sxCisiIFNwbGl0IGludG8gYm9vbGVhbnMsIGNvbmRpdGlvbmFscywgb3BlcmF0b3JzLCByZXBlYXQtbG9naWMsIGV0Yworc3luIGtleXdvcmQgbXZCb29sCXRydWUJZmFsc2UKK3N5biBrZXl3b3JkIG12Q29uZAllbGlmCWVsc2UJZmkJaWYJdGhlbgorCitzeW4ga2V5d29yZCBtdlJlcGVhdAlieQlmb3IJaW4JdG8KK3N5biBrZXl3b3JkIG12UmVwZWF0CWRvCWZyb20Jb2QJd2hpbGUKKworc3luIGtleXdvcmQgbXZTcGVjaWFsCU5VTEwKK3N5biBtYXRjaCAgIG12U3BlY2lhbAkiXFtcXVx8e30iCisKK3N5biBrZXl3b3JkIG12U3RhdGVtZW50CU9yZGVyCWZhaWwJb3B0aW9ucwlyZWFkCXNhdmUKK3N5biBrZXl3b3JkIG12U3RhdGVtZW50CWJyZWFrCWxvY2FsCXBvaW50CXJlbWVtYmVyCXN0b3AKK3N5biBrZXl3b3JkIG12U3RhdGVtZW50CWRvbmUJbW9kCXByb2MJcmVzdGFydAl3aXRoCitzeW4ga2V5d29yZCBtdlN0YXRlbWVudAllbmQJbW9kcwlxdWl0CXJldHVybgorc3luIGtleXdvcmQgbXZTdGF0ZW1lbnQJZXJyb3IJbmV4dAorCisiIEJ1aWx0aW4gQ29uc3RhbnRzOiA/IGNvbnN0YW50cyB7e3sxCitzeW4ga2V5d29yZCBtdkNvbnN0YW50CUNhdGFsYW4JSQlnYW1tYQlpbmZpbml0eQorc3luIGtleXdvcmQgbXZDb25zdGFudAlGQUlMCVBpCisKKyIgQ29tbWVudHM6ICBERUJVRywgaWYgaW4gYSBjb21tZW50LCBpcyBzcGVjaWFsbHkgaGlnaGxpZ2h0ZWQuIHt7ezEKK3N5biBrZXl3b3JkIG12RGVidWcJY29udGFpbmVkCURFQlVHCitzeW4gY2x1c3RlciBtdkNvbW1lbnRHcm91cAljb250YWlucz1tdlRvZG8sbXZEZWJ1ZyxAU3BlbGwKK3N5biBtYXRjaCBtdkNvbW1lbnQgIiMuKiQiCWNvbnRhaW5zPUBtdkNvbW1lbnRHcm91cAorCisiIEJhc2ljIExpYnJhcnkgRnVuY3Rpb25zOiA/IGluZGV4W2Z1bmN0aW9uXQorc3luIGtleXdvcmQgbXZMaWJyYXJ5ICQJQAlAQAlFUlJPUgorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEFGYWN0b3IJS2VsdmluSGVyCWFyY3RhbglmYWN0b3IJbG9nCXJocworc3luIGtleXdvcmQgbXZMaWJyYXJ5IEFGYWN0b3JzCUtlbHZpbktlaQlhcmN0YW5oCWZhY3RvcnMJbG9nMTAJcm9vdAorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEFpcnlBaQlLZWx2aW5LZXIJYXJndW1lbnQJZmNsb3NlCWxwcmludAlyb290cworc3luIGtleXdvcmQgbXZMaWJyYXJ5IEFpcnlCaQlMYW1iZXJ0VwlhcnJheQlmZW9mCW1hcAlyb3VuZAorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEFuZ2VySglMY20JYXNzaWduCWZmbHVzaAltYXAyCXJzb2x2ZQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEJlcmxla2FtcAlMZWdlbmRyZUUJYXNzaWduZWQJZmlsZXBvcwltYXRjaAlzYXZlbGliCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgQmVzc2VsSQlMZWdlbmRyZUVjCWFzc3BhcglmaXhkaXYJbWF0cml4CXNjYW5mCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgQmVzc2VsSglMZWdlbmRyZUVjMQlhc3N1bWUJZmxvYXQJbWF4CXNlYXJjaHRleHQKK3N5biBrZXl3b3JkIG12TGlicmFyeSBCZXNzZWxLCUxlZ2VuZHJlRglhc3VicwlmbG9vcgltYXhpbWl6ZQlzZWMKK3N5biBrZXl3b3JkIG12TGlicmFyeSBCZXNzZWxZCUxlZ2VuZHJlS2MJYXN5bXB0CWZub3JtYWwJbWF4bm9ybQlzZWNoCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgQmV0YQlMZWdlbmRyZUtjMQlhdHRyaWJ1dGUJZm9wZW4JbWF4b3JkZXIJc2VsZWN0CitzeW4ga2V5d29yZCBtdkxpYnJhcnkgQwlMZWdlbmRyZVBpCWJlcm5zdGVpbglmb3JnZXQJbWVtYmVyCXNlcQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IENoaQlMZWdlbmRyZVBpYwlicmFuY2hlcwlmb3J0cmFuCW1pbglzZXJpZXMKK3N5biBrZXl3b3JkIG12TGlicmFyeSBDaQlMZWdlbmRyZVBpYzEJYnNwbGluZQlmcHJpbnRmCW1pbmltaXplCXNldGF0dHJpYnV0ZQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IENvbXBTZXEJTGkJY2F0CWZyYWMJbWlucG9seQlzaGFrZQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IENvbnRlbnQJTGluc29sdmUJY2VpbAlmcmVlemUJbW9kcAlzaG93cHJvZmlsZQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEQJTU9MUwljaHJlbQlmcmVtb3ZlCW1vZHAxCXNob3d0aW1lCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgREVTb2wJTWFwbGVfZmxvYXRzCWNsb3NlCWZyb250ZW5kCW1vZHAyCXNpZ24KK3N5biBrZXl3b3JkIG12TGlicmFyeSBEZXQJTWVpamVyRwljbG9zZQlmc2NhbmYJbW9kcG9sCXNpZ251bQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IERpZmYJTm9ybQljb2VmZglmc29sdmUJbW9kcwlzaW1wbGlmeQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IERpcmFjCU5vcm1hbAljb2VmZnMJZ2Fsb2lzCW1zb2x2ZQlzaW4KK3N5biBrZXl3b3JkIG12TGlicmFyeSBEaXN0RGVnCU51bGxzcGFjZQljb2VmdGF5bAlnYwltdGF5bG9yCXNpbmd1bGFyCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgRGl2aWRlCVBvd2VyCWNvbGxlY3QJZ2NkCW11bAlzaW5oCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgRWkJUG93bW9kCWNvbWJpbmUJZ2NkZXgJbmV4dHByaW1lCXNpbnRlcnAKK3N5biBrZXl3b3JkIG12TGlicmFyeSBFaWdlbnZhbHMJUHJlbQljb21tdXRhdAlnZW5wb2x5CW5vcHMJc29sdmUKK3N5biBrZXl3b3JkIG12TGlicmFyeSBFbGxpcHRpY0NFCVByaW1maWVsZAljb21wYXJyYXkJaGFybW9uaWMJbm9ybQlzb3J0CitzeW4ga2V5d29yZCBtdkxpYnJhcnkgRWxsaXB0aWNDSwlQcmltaXRpdmUJY29tcG9seQloYXMJbm9ybWFsCXNwYXJzZQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEVsbGlwdGljQ1BpCVByaW1wYXJ0CWNvbmp1Z2F0ZQloYXNmdW4JbnVtYm9jY3VyCXNwbGluZQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEVsbGlwdGljRQlQcm9iU3BsaXQJY29udGVudAloYXNvcHRpb24JbnVtZXIJc3BsaXQKK3N5biBrZXl3b3JkIG12TGlicmFyeSBFbGxpcHRpY0YJUHJvZHVjdAljb252ZXJncwloYXN0eXBlCW9wCXNwbGl0cworc3luIGtleXdvcmQgbXZMaWJyYXJ5IEVsbGlwdGljSwlQc2kJY29udmVydAloZWFwCW9wZW4Jc3ByZW0KK3N5biBrZXl3b3JkIG12TGlicmFyeSBFbGxpcHRpY01vZHVsdXMJUXVvCWNvb3JkcwloaXN0b3J5CW9wdGltaXplCXNwcmludGYKK3N5biBrZXl3b3JkIG12TGlicmFyeSBFbGxpcHRpY05vbWUJUkVTb2wJY29weQloeXBlcmdlb20Jb3JkZXIJc3FyZnJlZQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEVsbGlwdGljUGkJUmFuZHBvbHkJY29zCWlGRlQJcGFyc2UJc3FydAorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEV2YWwJUmFuZHByaW1lCWNvc2gJaWNvbnRlbnQJcGNsb3NlCXNzY2FuZgorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEV4cGFuZAlSYXRyZWNvbgljb3N0CWlkZW50aXR5CXBjbG9zZQlzc3lzdGVtCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgRkZUCVJlCWNvdAlpZ2NkCXBkZXNvbHZlCXN0YWNrCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgRmFjdG9yCVJlbQljb3RoCWlnY2RleAlwaWVjZXdpc2UJc3R1cm0KK3N5biBrZXl3b3JkIG12TGlicmFyeSBGYWN0b3JzCVJlc3VsdGFudAljc2MJaWxjbQlwbG90CXN0dXJtc2VxCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgRnJlc25lbEMJUm9vdE9mCWNzY2gJaWxvZwlwbG90M2QJc3Vicworc3luIGtleXdvcmQgbXZMaWJyYXJ5IEZyZXNuZWxTCVJvb3RzCWNzZ24JaWxvZzEwCXBsb3RzZXR1cAlzdWJzb3AKK3N5biBrZXl3b3JkIG12TGlicmFyeSBGcmVzbmVsZglTUHJlbQlkYXdzb24JaW1wbGljaXRkaWZmCXBvY2hoYW1tZXIJc3Vic3RyaW5nCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgRnJlc25lbGcJU2VhcmNodGV4dAlkZWZpbmUJaW5kZXRzCXBvaW50dG8Jc3VtCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgRnJvYmVuaXVzCVNoaQlkZWdyZWUJaW5kZXgJcG9pc3NvbglzdXJkCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgR0FNTUEJU2kJZGVub20JaW5kZXhlZAlwb2xhcglzeW1tZGlmZgorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEdhdXNzQUdNCVNtaXRoCWRlcGVuZHMJaW5kaWNlcwlwb2x5bG9nCXN5bW1ldHJpYworc3luIGtleXdvcmQgbXZMaWJyYXJ5IEdhdXNzZWpvcmQJU3FyZnJlZQlkaWFnb25hbAlpbmlmY24JcG9seW5vbQlzeXN0ZW0KK3N5biBrZXl3b3JkIG12TGlicmFyeSBHYXVzc2VsaW0JU3NpCWRpZmYJaW5pbmFtZQlwb3dtb2QJdGFibGUKK3N5biBrZXl3b3JkIG12TGlicmFyeSBHY2QJU3RydXZlSAlkaWxvZwlpbml0aWFsaXplCXByZW0JdGFuCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgR2NkZXgJU3RydXZlTAlkaW50ZXJwCWluc2VydAlwcmV2cHJpbWUJdGFuaAorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEhhbmtlbEgxCVN1bQlkaXNhc3NlbWJsZQlpbnQJcHJpbXBhcnQJdGVzdGVxCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSGFua2VsSDIJU3ZkCWRpc2NvbnQJaW50ZXJmYWNlCXByaW50CXRlc3RmbG9hdAorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEhlYXZpc2lkZQlURVhUCWRpc2NyaW0JaW50ZXJwCXByaW50Zgl0aGF3CitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSGVybWl0ZQlUcmFjZQlkaXNtYW50bGUJaW52ZnVuYwlwcm9jYm9keQl0aGllbGUKK3N5biBrZXl3b3JkIG12TGlicmFyeSBJbQlXZWJlckUJZGl2aWRlCWludnp0cmFucwlwcm9jbWFrZQl0aW1lCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSW5kZXAJV2VpZXJzdHJhc3NQCWRzb2x2ZQlpb3N0YXR1cwlwcm9kdWN0CXRyYW5zbGF0ZQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEludGVycAlXZWllcnN0cmFzc1BQcmltZQllbGltaW5hdGUJaXBlcmZwb3cJcHJvb3QJdHJhcGVycm9yCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSW52ZXJzZQlXZWllcnN0cmFzc1NpZ21hCWVsbGlwc29pZAlpcXVvCXByb3BlcnR5CXRyaWdzdWJzCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSXJyZWR1YwlXZWllcnN0cmFzc1pldGEJZW50cmllcwlpcmF0cmVjb24JcHJvdGVjdAl0cnVuYworc3luIGtleXdvcmQgbXZMaWJyYXJ5IElzc2ltaWxhcglaZXRhCWVxbglpcmVtCXBzcXJ0CXR5cGUKK3N5biBrZXl3b3JkIG12TGlicmFyeSBKYWNvYmlBTQlhYnMJZXJmCWlyb290CXF1bwl0eXBlbWF0Y2gKK3N5biBrZXl3b3JkIG12TGlicmFyeSBKYWNvYmlDRAlhZGQJZXJmYwlpcnJlZHVjCXJhZG5vcm1hbAl1bmFtZXMKK3N5biBrZXl3b3JkIG12TGlicmFyeSBKYWNvYmlDTglhZGRjb29yZHMJZXVsZXJtYWMJaXNjb250CXJhZHNpbXAJdW5hcHBseQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEphY29iaUNTCWFkZHJlc3NvZglldmFsCWlzZGlmZmVyZW50aWFibGUJcmFuZAl1bmFzc2lnbgorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEphY29iaURDCWFsZ2VicmFpYwlldmFsYQlpc29sYXRlCXJhbmRvbWl6ZQl1bmxvYWQKK3N5biBrZXl3b3JkIG12TGlicmFyeSBKYWNvYmlETglhbGdzdWJzCWV2YWxhcHBseQlpc3BvbHkJcmFuZHBvbHkJdW5wcm90ZWN0CitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSmFjb2JpRFMJYWxpYXMJZXZhbGIJaXNxcmZyZWUJcmFuZ2UJdXBkYXRlc1I0CitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSmFjb2JpTkMJYWxsdmFsdWVzCWV2YWxjCWlzcXJ0CXJhdGlvbmFsaXplCXVzZXJpbmZvCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSmFjb2JpTkQJYW5hbWVzCWV2YWxmCWlzc3FyCXJhdHJlY29uCXZhbHVlCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSmFjb2JpTlMJYW50aXN5bW0JZXZhbGZpbnQJbGF0ZXgJcmVhZGJ5dGVzCXZlY3Rvcgorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEphY29iaVNDCWFwcGx5b3AJZXZhbGdmCWxhdHRpY2UJcmVhZGRhdGEJdmVyaWZ5CitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSmFjb2JpU0QJYXJjY29zCWV2YWxoZglsY20JcmVhZGxpYgl3aGF0dHlwZQorc3luIGtleXdvcmQgbXZMaWJyYXJ5IEphY29iaVNOCWFyY2Nvc2gJZXZhbG0JbGNvZWZmCXJlYWRsaW5lCXdpdGgKK3N5biBrZXl3b3JkIG12TGlicmFyeSBKYWNvYmlUaGV0YTEJYXJjY290CWV2YWxuCWxlYWR0ZXJtCXJlYWRzdGF0CXdyaXRlYnl0ZXMKK3N5biBrZXl3b3JkIG12TGlicmFyeSBKYWNvYmlUaGV0YTIJYXJjY290aAlldmFscglsZW5ndGgJcmVhbHJvb3QJd3JpdGVkYXRhCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSmFjb2JpVGhldGEzCWFyY2NzYwlleHAJbGV4b3JkZXIJcmVjaXBvbHkJd3JpdGVsaW5lCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSmFjb2JpVGhldGE0CWFyY2NzY2gJZXhwYW5kCWxocwlyZW0Jd3JpdGVzdGF0CitzeW4ga2V5d29yZCBtdkxpYnJhcnkgSmFjb2JpWmV0YQlhcmNzZWMJZXhwYW5kb2ZmCWxpbWl0CXJlbW92ZQl3cml0ZXRvCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgS2VsdmluQmVpCWFyY3NlY2gJZXhwYW5kb24JbG4JcmVzaWR1ZQl6aXAKK3N5biBrZXl3b3JkIG12TGlicmFyeSBLZWx2aW5CZXIJYXJjc2luCWV4dHJhY3QJbG5HQU1NQQlyZXN1bHRhbnQJenRyYW5zCitzeW4ga2V5d29yZCBtdkxpYnJhcnkgS2VsdmluSGVpCWFyY3NpbmgKKworCisiID09ICBQQUNLQUdFUyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSB7e3sxCisiIE5vdGU6IGhpZ2hsaWdodGluZyBvZiBwYWNrYWdlIGZ1bmN0aW9ucyBpcyBub3cgdXNlci1zZWxlY3RhYmxlIGJ5IHBhY2thZ2UuCisKKyIgUGFja2FnZTogREV0b29scyAgICAgZGlmZmVyZW50aWFsIGVxdWF0aW9ucyB0b29scyB7e3syCitpZiBleGlzdHMoIm12X0RFdG9vbHMiKQorICBzeW4ga2V5d29yZCBtdlBrZ19ERXRvb2xzCURFbm9ybWFsCURjaGFuZ2V2YXIJYXV0b25vbW91cwlkZmllbGRwbG90CXJlZHVjZU9yZGVyCXVudHJhbnNsYXRlCisgIHN5biBrZXl3b3JkIG12UGtnX0RFdG9vbHMJREVwbG90CVBERWNoYW5nZWNvb3Jkcwljb252ZXJ0QWxnCWluZGljaWFsZXEJcmVndWxhcnNwCXZhcnBhcmFtCisgIHN5biBrZXl3b3JkIG12UGtnX0RFdG9vbHMJREVwbG90M2QJUERFcGxvdAljb252ZXJ0c3lzCXBoYXNlcG9ydHJhaXQJdHJhbnNsYXRlCitlbmRpZgorCisiIFBhY2thZ2U6IERvbWFpbnM6IGNyZWF0ZSBkb21haW5zIG9mIGNvbXB1dGF0aW9uIHt7ezIKK2lmIGV4aXN0cygibXZfRG9tYWlucyIpCitlbmRpZgorCisiIFBhY2thZ2U6IEdGOiBHYWxvaXMgRmllbGRzIHt7ezIKK2lmIGV4aXN0cygibXZfR0YiKQorICBzeW4ga2V5d29yZCBtdlBrZ19HYWxvaXMJZ2Fsb2lzCitlbmRpZgorCisiIFBhY2thZ2U6IEdhdXNzSW50OiBHYXVzc2lhbiBJbnRlZ2VycyB7e3syCitpZiBleGlzdHMoIm12X0dhdXNzSW50IikKKyAgc3luIGtleXdvcmQgbXZQa2dfR2F1c3NJbnQJR0liYXNpcwlHSWZhY3RvcglHSWlzc3FyCUdJbm9ybQlHSXF1YWRyZXMJR0lzbWl0aAorICBzeW4ga2V5d29yZCBtdlBrZ19HYXVzc0ludAlHSWNocmVtCUdJZmFjdG9ycwlHSWxjbQlHSW5vcm1hbAlHSXF1bwlHSXNxcmZyZWUKKyAgc3luIGtleXdvcmQgbXZQa2dfR2F1c3NJbnQJR0lkaXZpc29yCUdJZ2NkCUdJbWNtYmluZQlHSW9yZGVyCUdJcmVtCUdJc3FydAorICBzeW4ga2V5d29yZCBtdlBrZ19HYXVzc0ludAlHSWZhY3BvbHkJR0lnY2RleAlHSW5lYXJlc3QJR0lwaGkJR0lyb290cwlHSXVuaXRub3JtYWwKKyAgc3luIGtleXdvcmQgbXZQa2dfR2F1c3NJbnQJR0lmYWNzZXQJR0loZXJtaXRlCUdJbm9kaXYJR0lwcmltZQlHSXNpZXZlCitlbmRpZgorCisiIFBhY2thZ2U6IExSRXRvb2xzOiBtYW5pcHVsYXRlIGxpbmVhciByZWN1cnJlbmNlIHJlbGF0aW9ucyB7e3syCitpZiBleGlzdHMoIm12X0xSRXRvb2xzIikKKyAgc3luIGtleXdvcmQgbXZQa2dfTFJFdG9vbHMJUkVjb250ZW50CVJFcHJpbXBhcnQJUkV0b2RlbHRhCWRlbHRhCWh5cGVyZ2VvbXNvbHMJcmF0cG9seXNvbHMKKyAgc3luIGtleXdvcmQgbXZQa2dfTFJFdG9vbHMJUkVjcmVhdGUJUkVyZWR1Y2VvcmRlcglSRXRvcHJvYwlkaXNwZXJzaW9uCXBvbHlzb2xzCXNoaWZ0CisgIHN5biBrZXl3b3JkIG12UGtnX0xSRXRvb2xzCVJFcGxvdAlSRXRvREUJY29uc3Rjb2VmZnNvbAorZW5kaWYKKworIiBQYWNrYWdlOiBjb21iaW5hdDogY29tYmluYXRvcmlhbCBmdW5jdGlvbnMge3t7MgoraWYgZXhpc3RzKCJtdl9jb21iaW5hdCIpCisgIHN5biBrZXl3b3JkIG12UGtnX2NvbWJpbmF0CUNoaQljb21wb3NpdGlvbglncmF5Y29kZQludW1iY29tYglwZXJtdXRlCXJhbmRwZXJtCisgIHN5biBrZXl3b3JkIG12UGtnX2NvbWJpbmF0CWJlbGwJY29uanBhcnQJaW50dG92ZWMJbnVtYmNvbXAJcG93ZXJzZXQJc3RpcmxpbmcxCisgIHN5biBrZXl3b3JkIG12UGtnX2NvbWJpbmF0CWJpbm9taWFsCWRlY29kZXBhcnQJbGFzdHBhcnQJbnVtYnBhcnQJcHJldnBhcnQJc3RpcmxpbmcyCisgIHN5biBrZXl3b3JkIG12UGtnX2NvbWJpbmF0CWNhcnRwcm9kCWVuY29kZXBhcnQJbXVsdGlub21pYWwJbnVtYnBlcm0JcmFuZGNvbWIJc3Vic2V0cworICBzeW4ga2V5d29yZCBtdlBrZ19jb21iaW5hdAljaGFyYWN0ZXIJZmlib25hY2NpCW5leHRwYXJ0CXBhcnRpdGlvbglyYW5kcGFydAl2ZWN0b2ludAorICBzeW4ga2V5d29yZCBtdlBrZ19jb21iaW5hdAljaG9vc2UJZmlyc3RwYXJ0CitlbmRpZgorCisiIFBhY2thZ2U6IGNvbWJzdHJ1Y3Q6IGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyB7e3syCitpZiBleGlzdHMoIm12X2NvbWJzdHJ1Y3QiKQorICBzeW4ga2V5d29yZCBtdlBrZ19jb21ic3RydWN0CWFsbHN0cnVjdHMJZHJhdwlpdGVyc3RydWN0cwlvcHRpb25zCXNwZWNpZmljYXRpb24Jc3RydWN0dXJlcworICBzeW4ga2V5d29yZCBtdlBrZ19jb21ic3RydWN0CWNvdW50CWZpbmlzaGVkCW5leHRzdHJ1Y3QKK2VuZGlmCisKKyIgUGFja2FnZTogZGlmZm9ybXM6IGRpZmZlcmVudGlhbCBmb3JtcyB7e3syCitpZiBleGlzdHMoIm12X2RpZmZvcm1zIikKKyAgc3luIGtleXdvcmQgbXZQa2dfZGlmZm9ybXMJY29uc3QJZGVmZm9ybQlmb3JtcGFydAlwYXJpdHkJc2NhbGFycGFydAl3ZGVncmVlCisgIHN5biBrZXl3b3JkIG12UGtnX2RpZmZvcm1zCWQJZm9ybQltaXhwYXIJc2NhbGFyCXNpbXBmb3JtCXdlZGdlCitlbmRpZgorCisiIFBhY2thZ2U6IGZpbmFuY2U6IGZpbmFuY2lhbCBtYXRoZW1hdGljcyB7e3syCitpZiBleGlzdHMoIm12X2ZpbmFuY2UiKQorICBzeW4ga2V5d29yZCBtdlBrZ19maW5hbmNlCWFtb3J0aXphdGlvbgljYXNoZmxvd3MJZnV0dXJldmFsdWUJZ3Jvd2luZ3BlcnBldHVpdHkJbXZfZmluYW5jZQlwcmVzZW50dmFsdWUKKyAgc3luIGtleXdvcmQgbXZQa2dfZmluYW5jZQlhbm51aXR5CWVmZmVjdGl2ZXJhdGUJZ3Jvd2luZ2FubnVpdHkJbGV2ZWxjb3Vwb24JcGVycGV0dWl0eQl5aWVsZHRvbWF0dXJpdHkKKyAgc3luIGtleXdvcmQgbXZQa2dfZmluYW5jZQlibGFja3NjaG9sZXMKK2VuZGlmCisKKyIgUGFja2FnZTogZ2VuZnVuYzogcmF0aW9uYWwgZ2VuZXJhdGluZyBmdW5jdGlvbnMge3t7MgoraWYgZXhpc3RzKCJtdl9nZW5mdW5jIikKKyAgc3luIGtleXdvcmQgbXZQa2dfZ2VuZnVuYwlyZ2ZfY2hhcnNlcQlyZ2ZfZXhwYW5kCXJnZl9oeWJyaWQJcmdmX3BmcmFjCXJnZl9zZXF1ZW5jZQlyZ2ZfdGVybQorICBzeW4ga2V5d29yZCBtdlBrZ19nZW5mdW5jCXJnZl9lbmNvZGUJcmdmX2ZpbmRyZWN1cglyZ2Zfbm9ybQlyZ2ZfcmVsYXRlCXJnZl9zaW1wCXRlcm1zY2FsZQorZW5kaWYKKworIiBQYWNrYWdlOiBnZW9tZXRyeTogRXVjbGlkZWFuIGdlb21ldHJ5IHt7ezIKK2lmIGV4aXN0cygibXZfZ2VvbWV0cnkiKQorICBzeW4ga2V5d29yZCBtdlBrZ19nZW9tZXRyeQljaXJjbGUJZHNlZ21lbnQJaHlwZXJib2xhCXBhcmFib2xhCXNlZ21lbnQJdHJpYW5nbGUKKyAgc3luIGtleXdvcmQgbXZQa2dfZ2VvbWV0cnkJY29uaWMJZWxsaXBzZQlsaW5lCXBvaW50CXNxdWFyZQorZW5kaWYKKworIiBQYWNrYWdlOiBncm9ibmVyOiBHcm9ibmVyIGJhc2VzIHt7ezIKK2lmIGV4aXN0cygibXZfZ3JvYm5lciIpCisgIHN5biBrZXl3b3JkIG12UGtnX2dyb2JuZXIJZmluZHVuaQlnYmFzaXMJbGVhZG1vbglub3JtYWxmCXNvbHZhYmxlCXNwb2x5CisgIHN5biBrZXl3b3JkIG12UGtnX2dyb2JuZXIJZmluaXRlCWdzb2x2ZQorZW5kaWYKKworIiBQYWNrYWdlOiBncm91cDogcGVybXV0YXRpb24gYW5kIGZpbml0ZWx5LXByZXNlbnRlZCBncm91cHMge3t7MgoraWYgZXhpc3RzKCJtdl9ncm91cCIpCisgIHN5biBrZXl3b3JkIG12UGtnX2dyb3VwCURlcml2ZWRTCWFyZWNvbmp1Z2F0ZQljb3NldHMJZ3JvdXBvcmRlcglpc3N1Ymdyb3VwCXBlcm1yZXAKKyAgc3luIGtleXdvcmQgbXZQa2dfZ3JvdXAJTENTCWNlbnRlcgljb3NyZXAJaW50ZXIJbXVscGVybXMJcHJlcworICBzeW4ga2V5d29yZCBtdlBrZ19ncm91cAlOb3JtYWxDbG9zdXJlCWNlbnRyYWxpemVyCWRlcml2ZWQJaW52cGVybQlub3JtYWxpemVyCXN1YmdyZWwKKyAgc3luIGtleXdvcmQgbXZQa2dfZ3JvdXAJUmFuZEVsZW1lbnQJY29udmVydAlncmVsZ3JvdXAJaXNhYmVsaWFuCW9yYml0CXR5cGUKKyAgc3luIGtleXdvcmQgbXZQa2dfZ3JvdXAJU3lsb3cJY29yZQlncm91cG1lbWJlcglpc25vcm1hbAlwZXJtZ3JvdXAKK2VuZGlmCisKKyIgUGFja2FnZTogaW50dHJhbnM6IGludGVncmFsIHRyYW5zZm9ybXMge3t7MgoraWYgZXhpc3RzKCJtdl9pbnR0cmFucyIpCisgIHN5biBrZXl3b3JkIG12UGtnX2ludHRyYW5zCWFkZHRhYmxlCWZvdXJpZXJjb3MJaGFua2VsCWludmZvdXJpZXIJaW52bGFwbGFjZQltZWxsaW4KKyAgc3luIGtleXdvcmQgbXZQa2dfaW50dHJhbnMJZm91cmllcglmb3VyaWVyc2luCWhpbGJlcnQJaW52aGlsYmVydAlsYXBsYWNlCitlbmRpZgorCisiIFBhY2thZ2U6IGxpZXN5bW06IExpZSBzeW1tZXRyaWVzIHt7ezIKK2lmIGV4aXN0cygibXZfbGllc3ltbSIpCisgIHN5biBrZXl3b3JkIG12UGtnX2xpZXN5bW0JJl4JVEQJZGVwdmFycwlnZXRmb3JtCW1peHBhcgl2Zml4CisgIHN5biBrZXl3b3JkIG12UGtnX2xpZXN5bW0JJm1vZAlhbm51bAlkZXRlcm1pbmUJaGFzY2xvc3VyZQlwcm9sb25nCXdjb2xsZWN0CisgIHN5biBrZXl3b3JkIG12UGtnX2xpZXN5bW0JRXRhCWF1dG9zaW1wCWR2YWx1ZQlob29rCXJlZHVjZQl3ZGVncmVlCisgIHN5biBrZXl3b3JkIG12UGtnX2xpZXN5bW0JTGllCWNsb3NlCWV4dHZhcnMJaW5kZXB2YXJzCXNldHVwCXdlZGdlc2V0CisgIHN5biBrZXl3b3JkIG12UGtnX2xpZXN5bW0JTHJhbmsJZAlnZXRjb2VmZgltYWtlZm9ybXMJdHJhbnNsYXRlCXdzdWJzCitlbmRpZgorCisiIFBhY2thZ2U6IGxpbmFsZzogTGluZWFyIGFsZ2VicmEge3t7MgoraWYgZXhpc3RzKCJtdl9saW5hbGciKQorICBzeW4ga2V5d29yZCBtdlBrZ19saW5hbGcJR3JhbVNjaG1pZHQJY29sZGltCWVxdWFsCWluZGV4ZnVuYwltdWxjb2wJc2luZ3ZhbAorICBzeW4ga2V5d29yZCBtdlBrZ19saW5hbGcJSm9yZGFuQmxvY2sJY29sc3BhY2UJZXhwb25lbnRpYWwJaW5uZXJwcm9kCW11bHRpcGx5CXNtaXRoCisgIHN5biBrZXl3b3JkIG12UGtnX2xpbmFsZwlMVWRlY29tcAljb2xzcGFuCWV4dGVuZAlpbnRiYXNpcwlub3JtCXN0YWNrCisgIHN5biBrZXl3b3JkIG12UGtnX2xpbmFsZwlRUmRlY29tcAljb21wYW5pb24JZmZnYXVzc2VsaW0JaW52ZXJzZQlub3JtYWxpemUJc3VibWF0cml4CisgIHN5biBrZXl3b3JkIG12UGtnX2xpbmFsZwlhZGRjb2wJY29uZAlmaWJvbmFjY2kJaXNtaXRoCW9ydGhvZwlzdWJ2ZWN0b3IKKyAgc3luIGtleXdvcmQgbXZQa2dfbGluYWxnCWFkZHJvdwljb3B5aW50bwlmb3J3YXJkc3ViCWlzc2ltaWxhcglwZXJtYW5lbnQJc3VtYmFzaXMKKyAgc3luIGtleXdvcmQgbXZQa2dfbGluYWxnCWFkam9pbnQJY3Jvc3Nwcm9kCWZyb2Jlbml1cwlpc3plcm8JcGl2b3QJc3dhcGNvbAorICBzeW4ga2V5d29yZCBtdlBrZ19saW5hbGcJYW5nbGUJY3VybAlnYXVzc2VsaW0JamFjb2JpYW4JcG90ZW50aWFsCXN3YXByb3cKKyAgc3luIGtleXdvcmQgbXZQa2dfbGluYWxnCWF1Z21lbnQJZGVmaW5pdGUJZ2F1c3Nqb3JkCWpvcmRhbglyYW5kbWF0cml4CXN5bHZlc3RlcgorICBzeW4ga2V5d29yZCBtdlBrZ19saW5hbGcJYmFja3N1YglkZWxjb2xzCWdlbmVxbnMJa2VybmVsCXJhbmR2ZWN0b3IJdG9lcGxpdHoKKyAgc3luIGtleXdvcmQgbXZQa2dfbGluYWxnCWJhbmQJZGVscm93cwlnZW5tYXRyaXgJbGFwbGFjaWFuCXJhbmsJdHJhY2UKKyAgc3luIGtleXdvcmQgbXZQa2dfbGluYWxnCWJhc2lzCWRldAlncmFkCWxlYXN0c3FycwlyZWZlcmVuY2VzCXRyYW5zcG9zZQorICBzeW4ga2V5d29yZCBtdlBrZ19saW5hbGcJYmV6b3V0CWRpYWcJaGFkYW1hcmQJbGluc29sdmUJcm93CXZhbmRlcm1vbmRlCisgIHN5biBrZXl3b3JkIG12UGtnX2xpbmFsZwlibG9ja21hdHJpeAlkaXZlcmdlCWhlcm1pdGUJbWF0YWRkCXJvd2RpbQl2ZWNwb3RlbnQKKyAgc3luIGtleXdvcmQgbXZQa2dfbGluYWxnCWNoYXJtYXQJZG90cHJvZAloZXNzaWFuCW1hdHJpeAlyb3dzcGFjZQl2ZWN0ZGltCisgIHN5biBrZXl3b3JkIG12UGtnX2xpbmFsZwljaGFycG9seQllaWdlbnZhbAloaWxiZXJ0CW1pbm9yCXJvd3NwYW4JdmVjdG9yCisgIHN5biBrZXl3b3JkIG12UGtnX2xpbmFsZwljaG9sZXNreQllaWdlbnZlY3QJaHRyYW5zcG9zZQltaW5wb2x5CXNjYWxhcm11bAl3cm9uc2tpYW4KKyAgc3luIGtleXdvcmQgbXZQa2dfbGluYWxnCWNvbAllbnRlcm1hdHJpeAlpaGVybWl0ZQorZW5kaWYKKworIiBQYWNrYWdlOiBsb2dpYzogQm9vbGVhbiBsb2dpYyB7e3syCitpZiBleGlzdHMoIm12X2xvZ2ljIikKKyAgc3luIGtleXdvcmQgbXZQa2dfbG9naWMJTU9EMglic2ltcAlkaXN0cmliCWVudmlyb24JcmFuZGJvb2wJdGF1dG9sb2d5CisgIHN5biBrZXl3b3JkIG12UGtnX2xvZ2ljCWJlcXVhbAljYW5vbglkdWFsCWZyb21pbmVydAlzYXRpc2Z5CXRvaW5lcnQKK2VuZGlmCisKKyIgUGFja2FnZTogbmV0d29ya3M6IGdyYXBoIG5ldHdvcmtzIHt7ezIKK2lmIGV4aXN0cygibXZfbmV0d29ya3MiKQorICBzeW4ga2V5d29yZCBtdlBrZ19uZXR3b3JrcwlhY3ljcG9seQljb25uZWN0CWRpbmljCWdyYXBoCW1pbmN1dAlzaG93CisgIHN5biBrZXl3b3JkIG12UGtnX25ldHdvcmtzCWFkZGVkZ2UJY29ubmVjdGl2aXR5CWRqc3BhbnRyZWUJZ3JhcGhpY2FsCW1pbmRlZ3JlZQlzaHJpbmsKKyAgc3luIGtleXdvcmQgbXZQa2dfbmV0d29ya3MJYWRkdmVydGV4CWNvbnRyYWN0CWRvZGVjYWhlZHJvbglnc2ltcAluZWlnaGJvcnMJc3BhbgorICBzeW4ga2V5d29yZCBtdlBrZ19uZXR3b3JrcwlhZGphY2VuY3kJY291bnRjdXRzCWRyYXcJZ3VuaW9uCW5ldwlzcGFucG9seQorICBzeW4ga2V5d29yZCBtdlBrZ19uZXR3b3JrcwlhbGxwYWlycwljb3VudHRyZWVzCWR1cGxpY2F0ZQloZWFkCW9jdGFoZWRyb24Jc3BhbnRyZWUKKyAgc3luIGtleXdvcmQgbXZQa2dfbmV0d29ya3MJYW5jZXN0b3IJY3ViZQllZGdlcwlpY29zYWhlZHJvbglvdXRkZWdyZWUJdGFpbAorICBzeW4ga2V5d29yZCBtdlBrZ19uZXR3b3JrcwlhcnJpdmFscwljeWNsZQllbmRzCWluY2lkZW5jZQlwYXRoCXRldHJhaGVkcm9uCisgIHN5biBrZXl3b3JkIG12UGtnX25ldHdvcmtzCWJpY29tcG9uZW50cwljeWNsZWJhc2UJZXdlaWdodAlpbmNpZGVudAlwZXRlcnNlbgl0dXR0ZXBvbHkKKyAgc3luIGtleXdvcmQgbXZQa2dfbmV0d29ya3MJY2hhcnBvbHkJZGF1Z2h0ZXIJZmxvdwlpbmRlZ3JlZQlyYW5kb20JdmRlZ3JlZQorICBzeW4ga2V5d29yZCBtdlBrZ19uZXR3b3JrcwljaHJvbXBvbHkJZGVncmVlc2VxCWZsb3dwb2x5CWluZHVjZQlyYW5rCXZlcnRpY2VzCisgIHN5biBrZXl3b3JkIG12UGtnX25ldHdvcmtzCWNvbXBsZW1lbnQJZGVsZXRlCWZ1bmRjeWMJaXNwbGFuYXIJcmFua3BvbHkJdm9pZAorICBzeW4ga2V5d29yZCBtdlBrZ19uZXR3b3Jrcwljb21wbGV0ZQlkZXBhcnR1cmVzCWdldGxhYmVsCW1heGRlZ3JlZQlzaG9ydHBhdGh0cmVlCXZ3ZWlnaHQKKyAgc3luIGtleXdvcmQgbXZQa2dfbmV0d29ya3MJY29tcG9uZW50cwlkaWFtZXRlcglnaXJ0aAorZW5kaWYKKworIiBQYWNrYWdlOiBudW1hcHByb3g6IG51bWVyaWNhbCBhcHByb3hpbWF0aW9uIHt7ezIKK2lmIGV4aXN0cygibXZfbnVtYXBwcm94IikKKyAgc3luIGtleXdvcmQgbXZQa2dfbnVtYXBwcm94CWNoZWJkZWcJY2hlYnNvcnQJZm5vcm0JbGF1cmVudAltaW5pbWF4CXJlbWV6CisgIHN5biBrZXl3b3JkIG12UGtnX251bWFwcHJveAljaGVibXVsdAljaGVieXNoZXYJaG9ybmVyZm9ybQlsYXVyZW50CXBhZGUJdGF5bG9yCisgIHN5biBrZXl3b3JkIG12UGtnX251bWFwcHJveAljaGVicGFkZQljb25mcmFjZm9ybQlpbmZub3JtCW1pbmltYXgKK2VuZGlmCisKKyIgUGFja2FnZTogbnVtdGhlb3J5OiBudW1iZXIgdGhlb3J5IHt7ezIKK2lmIGV4aXN0cygibXZfbnVtdGhlb3J5IikKKyAgc3luIGtleXdvcmQgbXZQa2dfbnVtdGhlb3J5CUIJY3ljbG90b21pYwlpbnZjZnJhYwltY29tYmluZQludGhjb252ZXIJcHJpbXJvb3QKKyAgc3luIGtleXdvcmQgbXZQa2dfbnVtdGhlb3J5CUYJZGl2aXNvcnMJaW52cGhpCW1lcnNlbm5lCW50aGRlbm9tCXF1YWRyZXMKKyAgc3luIGtleXdvcmQgbXZQa2dfbnVtdGhlb3J5CUdJZ2NkCWV1bGVyCWlzb2x2ZQltaW5rb3dza2kJbnRobnVtZXIJcm9vdHN1bml0eQorICBzeW4ga2V5d29yZCBtdlBrZ19udW10aGVvcnkJSglmYWN0b3JFUQlpc3ByaW1lCW1pcG9seXMJbnRocG93CXNhZmVwcmltZQorICBzeW4ga2V5d29yZCBtdlBrZ19udW10aGVvcnkJTAlmYWN0b3JzZXQJaXNzcXJmcmVlCW1sb2cJb3JkZXIJc2lnbWEKKyAgc3luIGtleXdvcmQgbXZQa2dfbnVtdGhlb3J5CU0JZmVybWF0CWl0aHByaW1lCW1vYml1cwlwZGV4cGFuZAlzcTJmYWN0b3IKKyAgc3luIGtleXdvcmQgbXZQa2dfbnVtdGhlb3J5CWJlcm5vdWxsaQlpZmFjdG9yCWphY29iaQltcm9vdAlwaGkJc3VtMnNxcgorICBzeW4ga2V5d29yZCBtdlBrZ19udW10aGVvcnkJYmlnb21lZ2EJaWZhY3RvcnMJa3JvbmVja2VyCW1zcXJ0CXBwcmltcm9vdAl0YXUKKyAgc3luIGtleXdvcmQgbXZQa2dfbnVtdGhlb3J5CWNmcmFjCWltYWd1bml0CWxhbWJkYQluZWFyZXN0cAlwcmV2cHJpbWUJdGh1ZQorICBzeW4ga2V5d29yZCBtdlBrZ19udW10aGVvcnkJY2ZyYWNwb2wJaW5kZXgJbGVnZW5kcmUJbmV4dHByaW1lCitlbmRpZgorCisiIFBhY2thZ2U6IG9ydGhvcG9seTogb3J0aG9nb25hbCBwb2x5bm9taWFscyB7e3syCitpZiBleGlzdHMoIm12X29ydGhvcG9seSIpCisgIHN5biBrZXl3b3JkIG12UGtnX29ydGhvcG9seQlHCUgJTAlQCVQJVQorZW5kaWYKKworIiBQYWNrYWdlOiBwYWRpYzogcC1hZGljIG51bWJlcnMge3t7MgoraWYgZXhpc3RzKCJtdl9wYWRpYyIpCisgIHN5biBrZXl3b3JkIG12UGtnX3BhZGljCWV2YWxwCWZ1bmN0aW9uCW9yZGVycAlyYXR2YWx1ZXAJcm9vdHAJdmFsdWVwCisgIHN5biBrZXl3b3JkIG12UGtnX3BhZGljCWV4cGFuc2lvbglsY29lZmZwCW9yZHAKK2VuZGlmCisKKyIgUGFja2FnZTogcGxvdHM6IGdyYXBoaWNzIHBhY2thZ2Uge3t7MgoraWYgZXhpc3RzKCJtdl9wbG90cyIpCisgIHN5biBrZXl3b3JkIG12UGtnX3Bsb3RzCWFuaW1hdGUJY29vcmRwbG90M2QJZ3JhZHBsb3QzZAlsaXN0cGxvdDNkCXBvbGFycGxvdAlzZXRvcHRpb25zM2QKKyAgc3luIGtleXdvcmQgbXZQa2dfcGxvdHMJYW5pbWF0ZTNkCWN5bGluZGVycGxvdAlpbXBsaWNpdHBsb3QJbG9nbG9ncGxvdAlwb2x5Z29ucGxvdAlzcGFjZWN1cnZlCisgIHN5biBrZXl3b3JkIG12UGtnX3Bsb3RzCWNoYW5nZWNvb3JkcwlkZW5zaXR5cGxvdAlpbXBsaWNpdHBsb3QzZAlsb2dwbG90CXBvbHlnb25wbG90M2QJc3BhcnNlbWF0cml4cGxvdAorICBzeW4ga2V5d29yZCBtdlBrZ19wbG90cwljb21wbGV4cGxvdAlkaXNwbGF5CWluZXF1YWwJbWF0cml4cGxvdAlwb2x5aGVkcmFwbG90CXNwaGVyZXBsb3QKKyAgc3luIGtleXdvcmQgbXZQa2dfcGxvdHMJY29tcGxleHBsb3QzZAlkaXNwbGF5M2QJbGlzdGNvbnRwbG90CW9kZXBsb3QJcmVwbG90CXN1cmZkYXRhCisgIHN5biBrZXl3b3JkIG12UGtnX3Bsb3RzCWNvbmZvcm1hbAlmaWVsZHBsb3QJbGlzdGNvbnRwbG90M2QJcGFyZXRvCXJvb3Rsb2N1cwl0ZXh0cGxvdAorICBzeW4ga2V5d29yZCBtdlBrZ19wbG90cwljb250b3VycGxvdAlmaWVsZHBsb3QzZAlsaXN0ZGVuc2l0eXBsb3QJcG9pbnRwbG90CXNlbWlsb2dwbG90CXRleHRwbG90M2QKKyAgc3luIGtleXdvcmQgbXZQa2dfcGxvdHMJY29udG91cnBsb3QzZAlncmFkcGxvdAlsaXN0cGxvdAlwb2ludHBsb3QzZAlzZXRvcHRpb25zCXR1YmVwbG90CisgIHN5biBrZXl3b3JkIG12UGtnX3Bsb3RzCWNvb3JkcGxvdAorZW5kaWYKKworIiBQYWNrYWdlOiBwbG90dG9vbHM6IGJhc2ljIGdyYXBoaWNhbCBvYmplY3RzIHt7ezIKK2lmIGV4aXN0cygibXZfcGxvdHRvb2xzIikKKyAgc3luIGtleXdvcmQgbXZQa2dfcGxvdHRvb2xzCWFyYwljdXJ2ZQlkb2RlY2FoZWRyb24JaHlwZXJib2xhCXBpZXNsaWNlCXNlbWl0b3J1cworICBzeW4ga2V5d29yZCBtdlBrZ19wbG90dG9vbHMJYXJyb3cJY3V0aW4JZWxsaXBzZQlpY29zYWhlZHJvbglwb2ludAlzcGhlcmUKKyAgc3luIGtleXdvcmQgbXZQa2dfcGxvdHRvb2xzCWNpcmNsZQljdXRvdXQJZWxsaXB0aWNBcmMJbGluZQlwb2x5Z29uCXRldHJhaGVkcm9uCisgIHN5biBrZXl3b3JkIG12UGtnX3Bsb3R0b29scwljb25lCWN5bGluZGVyCWhlbWlzcGhlcmUJb2N0YWhlZHJvbglyZWN0YW5nbGUJdG9ydXMKKyAgc3luIGtleXdvcmQgbXZQa2dfcGxvdHRvb2xzCWN1Ym9pZAlkaXNrCWhleGFoZWRyb24KK2VuZGlmCisKKyIgUGFja2FnZTogcG93c2VyaWVzOiBmb3JtYWwgcG93ZXIgc2VyaWVzIHt7ezIKK2lmIGV4aXN0cygibXZfcG93c2VyaWVzIikKKyAgc3luIGtleXdvcmQgbXZQa2dfcG93c2VyaWVzCWNvbXBvc2UJbXVsdGlwbHkJcG93Y3JlYXRlCXBvd2xvZwlwb3dzb2x2ZQlyZXZlcnNpb24KKyAgc3luIGtleXdvcmQgbXZQa2dfcG93c2VyaWVzCWV2YWxwb3cJbmVnYXRpdmUJcG93ZGlmZglwb3dwb2x5CXBvd3NxcnQJc3VidHJhY3QKKyAgc3luIGtleXdvcmQgbXZQa2dfcG93c2VyaWVzCWludmVyc2UJcG93YWRkCXBvd2V4cAlwb3dzZXJpZXMJcXVvdGllbnQJdHBzZm9ybQorICBzeW4ga2V5d29yZCBtdlBrZ19wb3dzZXJpZXMJbXVsdGNvbnN0CXBvd2Nvcwlwb3dpbnQJcG93c2luCitlbmRpZgorCisiIFBhY2thZ2U6IHByb2Nlc3M6IChVbml4KS1tdWx0aS1wcm9jZXNzaW5nIHt7ezIKK2lmIGV4aXN0cygibXZfcHJvY2VzcyIpCisgIHN5biBrZXl3b3JkIG12UGtnX3Byb2Nlc3MJYmxvY2sJZm9yawlwY2xvc2UJcGlwZQlwb3Blbgl3YWl0CisgIHN5biBrZXl3b3JkIG12UGtnX3Byb2Nlc3MJZXhlYwlraWxsCitlbmRpZgorCisiIFBhY2thZ2U6IHNpbXBsZXg6IGxpbmVhciBvcHRpbWl6YXRpb24ge3t7MgoraWYgZXhpc3RzKCJtdl9zaW1wbGV4IikKKyAgc3luIGtleXdvcmQgbXZQa2dfc2ltcGxleAlOT05ORUdBVElWRQljdGVybQlkdWFsCW1heGltaXplCXBpdm90ZXFuCXNldHVwCisgIHN5biBrZXl3b3JkIG12UGtnX3NpbXBsZXgJYmFzaXMJZGVmaW5lX3plcm8JZXF1YWxpdHkJbWluaW1pemUJcGl2b3R2YXIJc3RhbmRhcmRpemUKKyAgc3luIGtleXdvcmQgbXZQa2dfc2ltcGxleAljb252ZXhodWxsCWRpc3BsYXkJZmVhc2libGUJcGl2b3QJcmF0aW8KK2VuZGlmCisKKyIgUGFja2FnZTogc3RhdHM6IHN0YXRpc3RpY3Mge3t7MgoraWYgZXhpc3RzKCJtdl9zdGF0cyIpCisgIHN5biBrZXl3b3JkIG12UGtnX3N0YXRzCWFub3ZhCWRlc2NyaWJlCWZpdAlyYW5kb20Jc3RhdGV2YWxmCXN0YXRwbG90cworZW5kaWYKKworIiBQYWNrYWdlOiBzdHVkZW50OiBzdHVkZW50IGNhbGN1bHVzIHt7ezIKK2lmIGV4aXN0cygibXZfc3R1ZGVudCIpCisgIHN5biBrZXl3b3JkIG12UGtnX3N0dWRlbnQJRAlQcm9kdWN0CWRpc3RhbmNlCWlzb2xhdGUJbWlkZGxlc3VtCXJpZ2h0c3VtCisgIHN5biBrZXl3b3JkIG12UGtnX3N0dWRlbnQJRGlmZglTdW0JZXF1YXRlCWxlZnRib3gJbWlkcG9pbnQJc2hvd3RhbmdlbnQKKyAgc3luIGtleXdvcmQgbXZQa2dfc3R1ZGVudAlEb3VibGVpbnQJVHJpcGxlaW50CWV4dHJlbWEJbGVmdHN1bQltaW5pbWl6ZQlzaW1wc29uCisgIHN5biBrZXl3b3JkIG12UGtnX3N0dWRlbnQJSW50CWNoYW5nZXZhcglpbnRlZ3JhbmQJbWFrZXByb2MJbWluaW1pemUJc2xvcGUKKyAgc3luIGtleXdvcmQgbXZQa2dfc3R1ZGVudAlMaW1pdAljb21iaW5lCWludGVyY2VwdAltYXhpbWl6ZQlwb3dzdWJzCXRyYXBlem9pZAorICBzeW4ga2V5d29yZCBtdlBrZ19zdHVkZW50CUxpbmVpbnQJY29tcGxldGVzcXVhcmUJaW50cGFydHMJbWlkZGxlYm94CXJpZ2h0Ym94CXZhbHVlCisgIHN5biBrZXl3b3JkIG12UGtnX3N0dWRlbnQJUG9pbnQKK2VuZGlmCisKKyIgUGFja2FnZTogc3VtdG9vbHM6IGluZGVmaW5pdGUgYW5kIGRlZmluaXRlIHN1bXMge3t7MgoraWYgZXhpc3RzKCJtdl9zdW10b29scyIpCisgIHN5biBrZXl3b3JkIG12UGtnX3N1bXRvb2xzCUh5cGVyc3VtCWV4dGVuZGVkX2dvc3BlcgloeXBlcnJlY3Vyc2lvbgloeXBlcnRlcm0Jc3VtcmVjdXJzaW9uCXN1bXRvaHlwZXIKKyAgc3luIGtleXdvcmQgbXZQa2dfc3VtdG9vbHMJU3VtdG9oeXBlcglnb3NwZXIJaHlwZXJzdW0Jc2ltcGNvbWIKK2VuZGlmCisKKyIgUGFja2FnZTogdGVuc29yOiB0ZW5zb3IgY29tcHV0YXRpb25zIGFuZCBHZW5lcmFsIFJlbGF0aXZpdHkge3t7MgoraWYgZXhpc3RzKCJtdl90ZW5zb3IiKQorICBzeW4ga2V5d29yZCBtdlBrZ190ZW5zb3IJQ2hyaXN0b2ZmZWwxCVJpZW1hbm4JY29ubmV4RglkaXNwbGF5X2FsbEdSCWdldF9jb21wdHMJcGFydGlhbF9kaWZmCisgIHN5biBrZXl3b3JkIG12UGtnX3RlbnNvcglDaHJpc3RvZmZlbDIJUmllbWFubkYJY29udHJhY3QJZHVhbAlnZXRfcmFuawlwZXJtdXRlX2luZGljZXMKKyAgc3luIGtleXdvcmQgbXZQa2dfdGVuc29yCUVpbnN0ZWluCVdleWwJY29udmVydE5QCWVudGVybWV0cmljCWludmFycwlwZXRyb3YKKyAgc3luIGtleXdvcmQgbXZQa2dfdGVuc29yCUphY29iaWFuCWFjdAljb3ZfZGlmZglleHRlcmlvcl9kaWZmCWludmVydAlwcm9kCisgIHN5biBrZXl3b3JkIG12UGtnX3RlbnNvcglLaWxsaW5nX2VxbnMJYW50aXN5bW1ldHJpemUJY3JlYXRlCWV4dGVyaW9yX3Byb2QJbGluX2NvbQlyYWlzZQorICBzeW4ga2V5d29yZCBtdlBrZ190ZW5zb3IJTGV2aV9DaXZpdGEJY2hhbmdlX2Jhc2lzCWQxbWV0cmljCWZyYW1lCWxvd2VyCXN5bW1ldHJpemUKKyAgc3luIGtleXdvcmQgbXZQa2dfdGVuc29yCUxpZV9kaWZmCWNvbW11dGF0b3IJZDJtZXRyaWMJZ2VvZGVzaWNfZXFucwlucGN1cnZlCXRlbnNvcnNHUgorICBzeW4ga2V5d29yZCBtdlBrZ190ZW5zb3IJUmljY2kJY29tcGFyZQlkaXJlY3Rpb25hbF9kaWZmCWdldF9jaGFyCW5wc3Bpbgl0cmFuc2Zvcm0KKyAgc3luIGtleXdvcmQgbXZQa2dfdGVuc29yCVJpY2Npc2NhbGFyCWNvbmoJZGlzcGxheUdSCitlbmRpZgorCisiIFBhY2thZ2U6IHRvdG9yZGVyOiB0b3RhbCBvcmRlcnMgb24gbmFtZXMge3t7MgoraWYgZXhpc3RzKCJtdl90b3RvcmRlciIpCisgIHN5biBrZXl3b3JkIG12UGtnX3RvdG9yZGVyCWZvcmdldAlpbml0CW9yZGVyaW5nCXRhc3N1bWUJdGlzCitlbmRpZgorIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIiBIaWdobGlnaHRpbmc6IERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuIHt7ezEKKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX21hcGxldl9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9tYXBsZXZfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIE1hcGxlLT5NYXBsZSBMaW5rcyB7e3syCisgIEhpTGluayBtdkJyYWNlRXJyb3IJbXZFcnJvcgorICBIaUxpbmsgbXZDdXJseUVycm9yCW12RXJyb3IKKyAgSGlMaW5rIG12RGVidWcJCW12VG9kbworICBIaUxpbmsgbXZQYXJlbkVycm9yCW12RXJyb3IKKyAgSGlMaW5rIG12UGtnX0RFdG9vbHMJbXZQa2dGdW5jCisgIEhpTGluayBtdlBrZ19HYWxvaXMJbXZQa2dGdW5jCisgIEhpTGluayBtdlBrZ19HYXVzc0ludAltdlBrZ0Z1bmMKKyAgSGlMaW5rIG12UGtnX0xSRXRvb2xzCW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfY29tYmluYXQJbXZQa2dGdW5jCisgIEhpTGluayBtdlBrZ19jb21ic3RydWN0CW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfZGlmZm9ybXMJbXZQa2dGdW5jCisgIEhpTGluayBtdlBrZ19maW5hbmNlCW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfZ2VuZnVuYwltdlBrZ0Z1bmMKKyAgSGlMaW5rIG12UGtnX2dlb21ldHJ5CW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfZ3JvYm5lcgltdlBrZ0Z1bmMKKyAgSGlMaW5rIG12UGtnX2dyb3VwCW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfaW50dHJhbnMJbXZQa2dGdW5jCisgIEhpTGluayBtdlBrZ19saWVzeW1tCW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfbGluYWxnCW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfbG9naWMJbXZQa2dGdW5jCisgIEhpTGluayBtdlBrZ19uZXR3b3JrcwltdlBrZ0Z1bmMKKyAgSGlMaW5rIG12UGtnX251bWFwcHJveAltdlBrZ0Z1bmMKKyAgSGlMaW5rIG12UGtnX251bXRoZW9yeQltdlBrZ0Z1bmMKKyAgSGlMaW5rIG12UGtnX29ydGhvcG9seQltdlBrZ0Z1bmMKKyAgSGlMaW5rIG12UGtnX3BhZGljCW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfcGxvdHMJbXZQa2dGdW5jCisgIEhpTGluayBtdlBrZ19wbG90dG9vbHMJbXZQa2dGdW5jCisgIEhpTGluayBtdlBrZ19wb3dzZXJpZXMJbXZQa2dGdW5jCisgIEhpTGluayBtdlBrZ19wcm9jZXNzCW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfc2ltcGxleAltdlBrZ0Z1bmMKKyAgSGlMaW5rIG12UGtnX3N0YXRzCW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfc3R1ZGVudAltdlBrZ0Z1bmMKKyAgSGlMaW5rIG12UGtnX3N1bXRvb2xzCW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfdGVuc29yCW12UGtnRnVuYworICBIaUxpbmsgbXZQa2dfdG90b3JkZXIJbXZQa2dGdW5jCisgIEhpTGluayBtdlJhbmdlCQltdk9wZXIKKyAgSGlMaW5rIG12U2VtaUVycm9yCW12RXJyb3IKKworICAiIE1hcGxlLT5TdGFuZGFyZCBMaW5rcyB7e3syCisgIEhpTGluayBtdkFzc2lnbgkJRGVsaW1pdGVyCisgIEhpTGluayBtdkJvb2wJCUJvb2xlYW4KKyAgSGlMaW5rIG12Q29tbWEJCURlbGltaXRlcgorICBIaUxpbmsgbXZDb21tZW50CQlDb21tZW50CisgIEhpTGluayBtdkNvbmQJCUNvbmRpdGlvbmFsCisgIEhpTGluayBtdkNvbnN0YW50CQlOdW1iZXIKKyAgSGlMaW5rIG12RGVsYXlFdmFsCUxhYmVsCisgIEhpTGluayBtdkVycm9yCQlFcnJvcgorICBIaUxpbmsgbXZMaWJyYXJ5CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG12TnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIG12T3BlcgkJT3BlcmF0b3IKKyAgSGlMaW5rIG12UGFja2FnZQkJVHlwZQorICBIaUxpbmsgbXZQa2dGdW5jCQlGdW5jdGlvbgorICBIaUxpbmsgbXZQa3RPcHRpb24JU3BlY2lhbAorICBIaUxpbmsgbXZSZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgbXZTcGVjaWFsCQlTcGVjaWFsCisgIEhpTGluayBtdlN0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIG12U3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIG12VG9kbwkJVG9kbworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisiIEN1cnJlbnQgU3ludGF4OiB7e3sxCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJtYXBsZSIKKyIgdmltOiB0cz0yMCBmZG09bWFya2VyCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9tYXNtLnZpbSBiL3J1bnRpbWUvc3ludGF4L21hc20udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMWEwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9tYXNtLnZpbQpAQCAtMCwwICsxLDE0NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU1pY3Jvc29mdCBBc3NlbWJsZXIgKDgweDg2KQorIiBNYWludGFpbmVyOglSb2IgQnJhZHkgPHJvYmJAZGF0YXRvbmUuY29tPgorIiBMYXN0IENoYW5nZToJJERhdGUkCisiIFVSTDogaHR0cDovL3d3dy5kYXRhdG9uZS5jb20vfnJvYmIvdmltL3N5bnRheC9tYXNtLnZpbQorIiAkUmV2aXNpb24kCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKworIiBzeW4gbWF0Y2ggbWFzbVR5cGUgIlwud29yZCIKKworc3luIG1hdGNoIG1hc21JZGVudGlmaWVyCSJbYS16XyRdW2EtejAtOV8kXSoiCitzeW4gbWF0Y2ggbWFzbUxhYmVsCQkiXltBLVpfJF1bQS1aMC05XyRdKjoiaGU9ZS0xCisKK3N5biBtYXRjaCBtYXNtRGVjaW1hbAkJIlxkKiIKK3N5biBtYXRjaCBtYXNtQmluYXJ5CQkiWzAtMV1cK2IiICAicHV0IHRoaXMgYmVmb3JlIGhleCBvciAwYmZoIGRpZXMhCitzeW4gbWF0Y2ggbWFzbUhleGFkZWNpbWFsCSJbMC05XVx4KmgiCitzeW4gbWF0Y2ggbWFzbUZsb2F0CQkiWzAtOV1ceCpyIgorCitzeW4gbWF0Y2ggbWFzbUNvbW1lbnQJCSI7LioiCitzeW4gcmVnaW9uIG1hc21TdHJpbmcJCXN0YXJ0PSsnKyBlbmQ9KycrCisKK3N5biBrZXl3b3JkIG1hc21PcGVyYXRvcglBTkQgQllURSBQVFIgQ09ERVBUUiBEQVRBUFRSIERVUCBEV09SRCBFUSBGQVIKK3N5biBrZXl3b3JkIG1hc21PcGVyYXRvcglGV09SRCBHRSBHVCBISUdIIExBUkdFIExFIExPVyBMVCBNT0QgTkUgTkVBUgorc3luIGtleXdvcmQgbWFzbU9wZXJhdG9yCU5PVCBPRkZTRVQgT1IgUFJPQyBQV09SRCBRV09SRCBTRUcgU0hPUlQgVEJZVEUKK3N5biBrZXl3b3JkIG1hc21PcGVyYXRvcglUWVBFIFdPUkQgUEFSQQorc3luIGtleXdvcmQgbWFzbURpcmVjdGl2ZQlBTElHTiBBUkcgQVNTVU1FIENPREVTRUcgQ09NTQorc3luIGtleXdvcmQgbWFzbURpcmVjdGl2ZQlDT05TVCBEQVRBU0VHIERCIEREIERGIERJU1BMQVkgRE9TU0VHIERQCitzeW4ga2V5d29yZCBtYXNtRGlyZWN0aXZlCURRIERUIERXIEVMU0UgRUxTRUlGIEVNVUwgRU5EIEVORElGIEVORE0gRU5EUAorc3luIGtleXdvcmQgbWFzbURpcmVjdGl2ZQlFTkRTIEVOVU0gRVFVIFBST0MgUFVCTElDIFBVQkxJQ0RMTCBSQURJWAorc3luIGtleXdvcmQgbWFzbURpcmVjdGl2ZQlFWFRSTiBGQVJEQVRBIEdMT0JBTCBSRUNPUkQgU0VHTUVOVCBTTUFMTFNUQUNLCitzeW4ga2V5d29yZCBtYXNtRGlyZWN0aXZlCUdST1VQIElGIElGMSBJRjIgSUZCIElGREVGIElGRElGIElGRElGSQorc3luIGtleXdvcmQgbWFzbURpcmVjdGl2ZQlJRkUgSUZJRE4gSUZJRE5JIElGTkIgSUZOREVGIElOQ0xVREUgSU5DTFVETElCCitzeW4ga2V5d29yZCBtYXNtRGlyZWN0aXZlCUxBQkVMIExBUkdFU1RBQ0sgU1RBQ0sgU1RSVUMgU1VCVFRMIFRJVExFCitzeW4ga2V5d29yZCBtYXNtRGlyZWN0aXZlCU1PREVMIE5BTUUgTk9FTVVMIFVOSU9OIFVTRVMgVkVSU0lPTgorc3luIGtleXdvcmQgbWFzbURpcmVjdGl2ZQlPUkcgRkxBVAorc3luIG1hdGNoICAgbWFzbURpcmVjdGl2ZQkiXC5tb2RlbCIKK3N5biBtYXRjaCAgIG1hc21EaXJlY3RpdmUJIlwuMTg2Igorc3luIG1hdGNoICAgbWFzbURpcmVjdGl2ZQkiXC4yODYiCitzeW4gbWF0Y2ggICBtYXNtRGlyZWN0aXZlCSJcLjI4NmMiCitzeW4gbWF0Y2ggICBtYXNtRGlyZWN0aXZlCSJcLjI4NnAiCitzeW4gbWF0Y2ggICBtYXNtRGlyZWN0aXZlCSJcLjI4NyIKK3N5biBtYXRjaCAgIG1hc21EaXJlY3RpdmUJIlwuMzg2Igorc3luIG1hdGNoICAgbWFzbURpcmVjdGl2ZQkiXC4zODZjIgorc3luIG1hdGNoICAgbWFzbURpcmVjdGl2ZQkiXC4zODZwIgorc3luIG1hdGNoICAgbWFzbURpcmVjdGl2ZQkiXC4zODciCitzeW4gbWF0Y2ggICBtYXNtRGlyZWN0aXZlCSJcLjQ4NiIKK3N5biBtYXRjaCAgIG1hc21EaXJlY3RpdmUJIlwuNDg2YyIKK3N5biBtYXRjaCAgIG1hc21EaXJlY3RpdmUJIlwuNDg2cCIKK3N5biBtYXRjaCAgIG1hc21EaXJlY3RpdmUJIlwuODA4NiIKK3N5biBtYXRjaCAgIG1hc21EaXJlY3RpdmUJIlwuODA4NyIKK3N5biBtYXRjaCAgIG1hc21EaXJlY3RpdmUJIlwuQUxQSEEiCitzeW4gbWF0Y2ggICBtYXNtRGlyZWN0aXZlCSJcLkNPREUiCitzeW4gbWF0Y2ggICBtYXNtRGlyZWN0aXZlCSJcLkRBVEEiCisKK3N5biBrZXl3b3JkIG1hc21SZWdpc3RlcglBWCBCWCBDWCBEWCBTSSBESSBCUCBTUAorc3luIGtleXdvcmQgbWFzbVJlZ2lzdGVyCUVTIERTIFNTIENTCitzeW4ga2V5d29yZCBtYXNtUmVnaXN0ZXIJQUggQkggQ0ggREggQUwgQkwgQ0wgREwKK3N5biBrZXl3b3JkIG1hc21SZWdpc3RlcglFQVggRUJYIEVDWCBFRFggRVNJIEVESSBFQlAgRVNQCisKKworIiB0aGVzZSBhcmUgY3VycmVudCBhcyBvZiB0aGUgNDg2IC0gZG9uJ3QgaGF2ZSBhbnkgcGVudGl1bSBtYW51YWxzIGhhbmR5CitzeW4ga2V5d29yZCBtYXNtT3Bjb2RlCQlBQUEgQUFEIEFBTSBBQVMgQURDIEFERCBBTkQgQVJQTCBCT1VORCBCU0YKK3N5biBrZXl3b3JkIG1hc21PcGNvZGUJCUJTUiBCU1dBUCBCVCBCVEMgQlRSIEJUUyBCU1dBUCBCVCBCVEMgQlRSCitzeW4ga2V5d29yZCBtYXNtT3Bjb2RlCQlCVFMgQ0FMTCBDQlcgQ0RRIENMQyBDTEQgQ0xJIENMVFMgQ01DIENNUAorc3luIGtleXdvcmQgbWFzbU9wY29kZQkJQ01QUyBDTVBTQiBDTVBTVyBDTVBTRCBDTVBYQ0hHIENXRCBDV0RFIERBQQorc3luIGtleXdvcmQgbWFzbU9wY29kZQkJREFTIERFQyBESVYgRU5URVIgSExUIElESVYgSU1VTCBJTiBJTkMgSU5TCitzeW4ga2V5d29yZCBtYXNtT3Bjb2RlCQlJTlNCIElOU1cgSU5TRCBJTlQgSU5UTyBJTlZEIElOVkxQRyBJUkVUCitzeW4ga2V5d29yZCBtYXNtT3Bjb2RlCQlJUkVURCBKQSBKQUUgSkIgSkJFIEpDIEpDWFogSkVDWFogSkUgSlogSkcKK3N5biBrZXl3b3JkIG1hc21PcGNvZGUJCUpHRSBKTCBKTEUgSk5BIEpOQUUgSk5CIEpOQkUgSk5DIEpORSBKTkcgSk5HRQorc3luIGtleXdvcmQgbWFzbU9wY29kZQkJSk5MIEpOTEUgSk5PIEpOUCBKTlMgSk5aIEpPIEpQIEpQRSBKUE8gSlMgSloKK3N5biBrZXl3b3JkIG1hc21PcGNvZGUJCUpNUCBMQUhGIExBUiBMRUEgTEVBVkUgTEdEVCBMSURUIExHUyBMU1MgTEZTCitzeW4ga2V5d29yZCBtYXNtT3Bjb2RlCQlMT0RTIExPRFNCIExPRFNXIExPRFNEIExPT1AgTE9PUEUgTE9PUFogTE9PTkUKK3N5biBrZXl3b3JkIG1hc21PcGNvZGUJCUxPT1BORSBSRVRGIFJFVE4KK3N5biBrZXl3b3JkIG1hc21PcGNvZGUJCUxEUyBMRVMgTExEVCBMTVNXIExPQ0sgTFNMIExUUiBNT1YgTU9WUyBNT1ZTQgorc3luIGtleXdvcmQgbWFzbU9wY29kZQkJTU9WU1cgTU9WU0QgTU9WU1ggTU9WWlggTVVMIE5FRyBOT1AgTk9UIE9SCitzeW4ga2V5d29yZCBtYXNtT3Bjb2RlCQlPVVQgT1VUUyBPVVRTQiBPVVRTVyBPVVRTRCBQT1AgUE9QQSBQT1BECitzeW4ga2V5d29yZCBtYXNtT3Bjb2RlCQlQT1BGIFBPUEZEIFBVU0ggUFVTSEEgUFVTSEFEIFBVU0hGIFBVU0hGRAorc3luIGtleXdvcmQgbWFzbU9wY29kZQkJUkNMIFJDUiBST0wgUk9SIFJFUCBSRVBFIFJFUFogUkVQTkUgUkVQTloKK3N5biBrZXl3b3JkIG1hc21PcGNvZGUJCVJFVCBTQUhGIFNBTCBTQVIgU0hMIFNIUiBTQkIgU0NBUyBTQ0FTQgorc3luIGtleXdvcmQgbWFzbU9wY29kZQkJU0NBU1cgU0NBU0QgU0VUQSBTRVRBRSBTRVRCIFNFVEJFIFNFVEMgU0VURQorc3luIGtleXdvcmQgbWFzbU9wY29kZQkJU0VURyBTRVRHRSBTRVRMIFNFVExFIFNFVE5BIFNFVE5BRSBTRVROQgorc3luIGtleXdvcmQgbWFzbU9wY29kZQkJU0VUTkJFIFNFVE5DIFNFVE5FIFNFVE5HIFNFVE5HRSBTRVROTCBTRVROTEUKK3N5biBrZXl3b3JkIG1hc21PcGNvZGUJCVNFVE5PIFNFVE5QIFNFVE5TIFNFVE5aIFNFVE8gU0VUUCBTRVRQRSBTRVRQTworc3luIGtleXdvcmQgbWFzbU9wY29kZQkJU0VUUyBTRVRaIFNHRFQgU0lEVCBTSExEIFNIUkQgU0xEVCBTTVNXIFNUQworc3luIGtleXdvcmQgbWFzbU9wY29kZQkJU1REIFNUSSBTVE9TIFNUT1NCIFNUT1NXIFNUT1NEIFNUUiBTVUIgVEVTVAorc3luIGtleXdvcmQgbWFzbU9wY29kZQkJVkVSUiBWRVJXIFdBSVQgV0JJTlZEIFhBREQgWENIRyBYTEFUIFhMQVRCIFhPUgorCisiIGZsb2F0aW5nIHBvaW50IGNvcHJvY2Vzc29yIGFzIG9mIDQ4Nworc3luIGtleXdvcmQgbWFzbU9wRmxvYXQJCUYyWE0xIEZBQlMgRkFERCBGQUREUCBGQkxEIEZCU1RQIEZDSFMgRkNMRVgKK3N5biBrZXl3b3JkIG1hc21PcEZsb2F0CQlGTkNMRVggRkNPTSBGQ09NUCBGQ09NUFAgRkNPUyBGREVDU1RQIEZESVNJCitzeW4ga2V5d29yZCBtYXNtT3BGbG9hdAkJRk5ESVNJIEZESVYgRkRJVlAgRkRJVlIgRkRJVlJQIEZFTkkgRk5FTkkKK3N5biBrZXl3b3JkIG1hc21PcEZsb2F0CQlGRlJFRSBGSUFERCBGSUNPTSBGSUNPTVAgRklESVYgRklESVZSIEZJTEQKK3N5biBrZXl3b3JkIG1hc21PcEZsb2F0CQlGSU1VTCBGSU5DU1RQIEZJTklUIEZOSU5JVCBGSVNUIEZJU1RQIEZJU1VCCitzeW4ga2V5d29yZCBtYXNtT3BGbG9hdAkJRklTVUJSIEZMRCBGTERDVyBGTERFTlYgRkxETEcyIEZMRExOMiBGTERMMkUKK3N5biBrZXl3b3JkIG1hc21PcEZsb2F0CQlGTERMMlQgRkxEUEkgRkxEWiBGTEQxIEZNVUwgRk1VTFAgRk5PUCBGUEFUQU4KK3N5biBrZXl3b3JkIG1hc21PcEZsb2F0CQlGUFJFTSBGUFJFTTEgRlBUQU4gRlJORElOVCBGUlNUT1IgRlNBVkUKK3N5biBrZXl3b3JkIG1hc21PcEZsb2F0CQlGTlNBVkUgRlNDQUxFIEZTRVRQTSBGU0lOIEZTSU5DT1MgRlNRUlQgRlNUCitzeW4ga2V5d29yZCBtYXNtT3BGbG9hdAkJRlNUQ1cgRk5TVENXIEZTVEVOViBGTlNURU5WIEZTVFAgRlNUU1cgRk5TVFNXCitzeW4ga2V5d29yZCBtYXNtT3BGbG9hdAkJRlNVQiBGU1VCUCBGU1VCUiBGU1VCUlAgRlRTVCBGVUNPTSBGVUNPTVAKK3N5biBrZXl3b3JkIG1hc21PcEZsb2F0CQlGVUNPTVBQIEZXQUlUIEZYQU0gRlhDSCBGWFRSQUNUIEZZTDJYIEZZTDJYUDEKK3N5biBtYXRjaCAgIG1hc21PcEZsb2F0CQkiRlNUU1dbIFx0XVwrQVgiCitzeW4gbWF0Y2ggICBtYXNtT3BGbG9hdAkJIkZOU1RTV1sgXHRdXCtBWCIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbWFzbV9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9tYXNtX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICBIaUxpbmsgbWFzbUxhYmVsCUxhYmVsCisgIEhpTGluayBtYXNtQ29tbWVudAlDb21tZW50CisgIEhpTGluayBtYXNtRGlyZWN0aXZlCVN0YXRlbWVudAorICBIaUxpbmsgbWFzbU9wZXJhdG9yCVN0YXRlbWVudAorICBIaUxpbmsgbWFzbVN0cmluZwlTdHJpbmcKKworICBIaUxpbmsgbWFzbUhleGFkZWNpbWFsIE51bWJlcgorICBIaUxpbmsgbWFzbURlY2ltYWwJTnVtYmVyCisgIEhpTGluayBtYXNtQmluYXJ5CU51bWJlcgorICBIaUxpbmsgbWFzbUZsb2F0CU51bWJlcgorCisgIEhpTGluayBtYXNtSWRlbnRpZmllciBJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1hc20iCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9tYXNvbi52aW0gYi9ydW50aW1lL3N5bnRheC9tYXNvbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBiZGIwZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21hc29uLnZpbQpAQCAtMCwwICsxLDk5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgTWFzb24gKFBlcmwgZW1iZWRkZWQgaW4gSFRNTCkKKyIgTWFpbnRhaW5lcjogIEFuZHJldyBTbWl0aCA8YW5kcmV3ZHNtaXRoQHlhaG9vLmNvbT4KKyIgTGFzdCBjaGFuZ2U6IDIwMDMgTWF5IDExCisiIFVSTDoJICAgICAgIGh0dHA6Ly93d3cubWFzb25ocS5jb20vZWRpdG9ycy9tYXNvbi52aW0KKyIKKyIgVGhpcyBzZWVtcyB0byB3b3JrIHNhdGlzZmFjdG9yaWx5IHdpdGggaHRtbC52aW0gYW5kIHBlcmwudmltIGZvciB2ZXJzaW9uIDUuNS4KKyIgUGxlYXNlIG1haWwgYW55IGZpeGVzIG9yIGltcHJvdmVtZW50cyB0byB0aGUgYWJvdmUgYWRkcmVzcy4gVGhpbmdzIHRoYXQgbmVlZAorIiBkb2luZyBpbmNsdWRlOgorIgorIiAgLSBBZGQgbWF0Y2ggZm9yIGNvbXBvbmVudCBuYW1lcyBpbiA8JiAmPiBibG9ja3MuCisiICAtIEFkZCBtYXRjaCBmb3IgY29tcG9uZW50IG5hbWVzIGluIDwlZGVmPiBhbmQgPCVtZXRob2Q+IGJsb2NrIGRlbGltaXRlcnMuCisiICAtIEZpeCA8JXRleHQ+IGJsb2NrcyB0byBzaG93IEhUTUwgdGFncyBidXQgaWdub3JlIE1hc29uIHRhZ3MuCisiCisKKyIgQ2xlYXIgcHJldmlvdXMgc3ludGF4IHNldHRpbmdzIHVubGVzcyB0aGlzIGlzIHY2IG9yIGFib3ZlLCBpbiB3aGljaCBjYXNlIGp1c3QKKyIgZXhpdCB3aXRob3V0IGRvaW5nIGFueXRoaW5nLgorIgoraWYgdmVyc2lvbiA8IDYwMAorCXN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisJZmluaXNoCitlbmRpZgorCisiIFRoZSBIVE1MIHN5bnRheCBmaWxlIGluY2x1ZGVkIGJlbG93IHVzZXMgdGhpcyB2YXJpYWJsZS4KKyIKK2lmICFleGlzdHMoIm1haW5fc3ludGF4IikKKwlsZXQgbWFpbl9zeW50YXggPSAnbWFzb24nCitlbmRpZgorCisiIEZpcnN0IHB1bGwgaW4gdGhlIEhUTUwgc3ludGF4LgorIgoraWYgdmVyc2lvbiA8IDYwMAorCXNvIDxzZmlsZT46cDpoL2h0bWwudmltCitlbHNlCisJcnVudGltZSEgc3ludGF4L2h0bWwudmltCisJdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworc3luIGNsdXN0ZXIgaHRtbFByZXByb2MgYWRkPUBtYXNvblRvcAorCisiIE5vdyBwdWxsIGluIHRoZSBQZXJsIHN5bnRheC4KKyIKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW4gaW5jbHVkZSBAcGVybFRvcCA8c2ZpbGU+OnA6aC9wZXJsLnZpbQorZWxzZQorCXN5biBpbmNsdWRlIEBwZXJsVG9wIHN5bnRheC9wZXJsLnZpbQorZW5kaWYKKworIiBJdCdzIGhhcmQgdG8gcmVkdWNlIGRvd24gdG8gdGhlIGNvcnJlY3Qgc3ViLXNldCBvZiBQZXJsIHRvIGhpZ2hsaWdodCBpbiBzb21lCisiIG9mIHRoZXNlIGNhc2VzIHNvIEkndmUgdGFrZW4gdGhlIHNhZmUgb3B0aW9uIG9mIGp1c3QgdXNpbmcgcGVybFRvcCBpbiBhbGwgb2YKKyIgdGhlbS4gSWYgeW91IGhhdmUgYW55IHN1Z2dlc3Rpb25zLCBwbGVhc2UgbGV0IG1lIGtub3cuCisiCitzeW4gcmVnaW9uIG1hc29uTGluZSBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXiUiIGVuZD0iJCIgY29udGFpbnM9QHBlcmxUb3AKK3N5biByZWdpb24gbWFzb25FeHByIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8JSIgZW5kPSIlPiIgY29udGFpbnM9QHBlcmxUb3AKK3N5biByZWdpb24gbWFzb25QZXJsIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8JXBlcmw+IiBlbmQ9IjwvJXBlcmw+IiBjb250YWlucz1AcGVybFRvcAorc3luIHJlZ2lvbiBtYXNvbkNvbXAga2VlcGVuZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iPCYiIGVuZD0iJj4iIGNvbnRhaW5zPUBwZXJsVG9wCisKK3N5biByZWdpb24gbWFzb25BcmdzIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8JWFyZ3M+IiBlbmQ9IjwvJWFyZ3M+IiBjb250YWlucz1AcGVybFRvcAorCitzeW4gcmVnaW9uIG1hc29uSW5pdCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iPCVpbml0PiIgZW5kPSI8LyVpbml0PiIgY29udGFpbnM9QHBlcmxUb3AKK3N5biByZWdpb24gbWFzb25DbGVhbnVwIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8JWNsZWFudXA+IiBlbmQ9IjwvJWNsZWFudXA+IiBjb250YWlucz1AcGVybFRvcAorc3luIHJlZ2lvbiBtYXNvbk9uY2UgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9Ijwlb25jZT4iIGVuZD0iPC8lb25jZT4iIGNvbnRhaW5zPUBwZXJsVG9wCitzeW4gcmVnaW9uIG1hc29uU2hhcmVkIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8JXNoYXJlZD4iIGVuZD0iPC8lc2hhcmVkPiIgY29udGFpbnM9QHBlcmxUb3AKKworc3luIHJlZ2lvbiBtYXNvbkRlZiBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iPCVkZWZbXj5dKj4iIGVuZD0iPC8lZGVmPiIgY29udGFpbnM9QGh0bWxUb3AKK3N5biByZWdpb24gbWFzb25NZXRob2QgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IjwlbWV0aG9kW14+XSo+IiBlbmQ9IjwvJW1ldGhvZD4iIGNvbnRhaW5zPUBodG1sVG9wCisKK3N5biByZWdpb24gbWFzb25GbGFncyBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iPCVmbGFncz4iIGVuZD0iPC8lZmxhZ3M+IiBjb250YWlucz1AcGVybFRvcAorc3luIHJlZ2lvbiBtYXNvbkF0dHIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IjwlYXR0cj4iIGVuZD0iPC8lYXR0cj4iIGNvbnRhaW5zPUBwZXJsVG9wCisKK3N5biByZWdpb24gbWFzb25GaWx0ZXIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IjwlZmlsdGVyPiIgZW5kPSI8LyVmaWx0ZXI+IiBjb250YWlucz1AcGVybFRvcAorCitzeW4gcmVnaW9uIG1hc29uRG9jIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8JWRvYz4iIGVuZD0iPC8lZG9jPiIKK3N5biByZWdpb24gbWFzb25UZXh0IG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8JXRleHQ+IiBlbmQ9IjwvJXRleHQ+IgorCitzeW4gY2x1c3RlciBtYXNvblRvcCBjb250YWlucz1tYXNvbkxpbmUsbWFzb25FeHByLG1hc29uUGVybCxtYXNvbkNvbXAsbWFzb25BcmdzLG1hc29uSW5pdCxtYXNvbkNsZWFudXAsbWFzb25PbmNlLG1hc29uU2hhcmVkLG1hc29uRGVmLG1hc29uTWV0aG9kLG1hc29uRmxhZ3MsbWFzb25BdHRyLG1hc29uRmlsdGVyLG1hc29uRG9jLG1hc29uVGV4dAorCisiIFNldCB1cCBkZWZhdWx0IGhpZ2hsaWdodGluZy4gQWxtb3N0IGFsbCBvZiB0aGlzIGlzIGRvbmUgaW4gdGhlIGluY2x1ZGVkCisiIHN5bnRheCBmaWxlcy4KKyIKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9tYXNvbl9zeW5faW5pdHMiKQorCWlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9tYXNvbl9zeW5faW5pdHMgPSAxCisJCWNvbSAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbSAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluayBtYXNvbkRvYyBDb21tZW50CisKKwlkZWxjIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibWFzb24iCisKK2lmIG1haW5fc3ludGF4ID09ICdtYXNvbicKKwl1bmxldCBtYWluX3N5bnRheAorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L21hc3Rlci52aW0gYi9ydW50aW1lL3N5bnRheC9tYXN0ZXIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMTI1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9tYXN0ZXIudmltCkBAIC0wLDAgKzEsNTAgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglGb2N1cyBNYXN0ZXIgRmlsZQorIiBNYWludGFpbmVyOglSb2IgQnJhZHkgPHJvYmJAZGF0YXRvbmUuY29tPgorIiBMYXN0IENoYW5nZToJJERhdGUkCisiIFVSTDogaHR0cDovL3d3dy5kYXRhdG9uZS5jb20vfnJvYmIvdmltL3N5bnRheC9tYXN0ZXIudmltCisiICRSZXZpc2lvbiQKKworIiB0aGlzIGlzIGEgdmVyeSBzaW1wbGUgc3ludGF4IGZpbGUgLSBJIHdpbGwgYmUgaW1wcm92aW5nIGl0CisiIGFkZCBlbnRpcmUgREVGSU5FIHN5bnRheAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIG1hdGNoCisKKyIgQSBidW5jaCBvZiB1c2VmdWwga2V5d29yZHMKK3N5biBrZXl3b3JkIG1hc3RlcktleXdvcmQJRklMRU5BTUUgU1VGRklYIFNFR05BTUUgU0VHVFlQRSBQQVJFTlQgRklFTEROQU1FCitzeW4ga2V5d29yZCBtYXN0ZXJLZXl3b3JkCUZJRUxEIEFMSUFTIFVTQUdFIElOREVYIE1JU1NJTkcgT04KK3N5biBrZXl3b3JkIG1hc3RlcktleXdvcmQJRk9STUFUIENSRklMRSBDUktFWQorc3luIGtleXdvcmQgbWFzdGVyRGVmaW5lCURFRklORSBERUNPREUgRURJVAorc3luIHJlZ2lvbiAgbWFzdGVyU3RyaW5nCXN0YXJ0PSsiKyAgZW5kPSsiKworc3luIHJlZ2lvbiAgbWFzdGVyU3RyaW5nCXN0YXJ0PSsnKyAgZW5kPSsnKworc3luIG1hdGNoICAgbWFzdGVyQ29tbWVudAkiXCQuKiIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbWFzdGVyX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX21hc3Rlcl9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBtYXN0ZXJLZXl3b3JkIEtleXdvcmQKKyAgSGlMaW5rIG1hc3RlckNvbW1lbnQgQ29tbWVudAorICBIaUxpbmsgbWFzdGVyU3RyaW5nICBTdHJpbmcKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibWFzdGVyIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbWF0bGFiLnZpbSBiL3J1bnRpbWUvc3ludGF4L21hdGxhYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYTk3NQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21hdGxhYi52aW0KQEAgLTAsMCArMSwxMDkgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglNYXRsYWIKKyIgTWFpbnRhaW5lcjoJUHJlYmVuICdQZXBwZScgR3VsZGJlcmcgPHBlcHBlLXZpbUB3aWVsZGVycy5vcmc+CisiCQlPcmlnaW5hbCBhdXRob3I6IE1hcmlvIEV1c2ViaW8KKyIgTGFzdCBDaGFuZ2U6CTMwIE1heSAyMDAzCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGtleXdvcmQgbWF0bGFiU3RhdGVtZW50CQlyZXR1cm4KK3N5biBrZXl3b3JkIG1hdGxhYkxhYmVsCQkJY2FzZSBzd2l0Y2gKK3N5biBrZXl3b3JkIG1hdGxhYkNvbmRpdGlvbmFsCQllbHNlIGVsc2VpZiBlbmQgaWYgb3RoZXJ3aXNlCitzeW4ga2V5d29yZCBtYXRsYWJSZXBlYXQJCWRvIGZvciB3aGlsZQorCitzeW4ga2V5d29yZCBtYXRsYWJUb2RvCQkJY29udGFpbmVkICBUT0RPCisKKyIgSWYgeW91IGRvIG5vdCB3YW50IHRoZXNlIG9wZXJhdG9ycyBsaXQsIHVuY29tbW1lbnQgdGhlbSBhbmQgdGhlICJoaSBsaW5rIiBiZWxvdworc3luIG1hdGNoIG1hdGxhYkFyaXRobWV0aWNPcGVyYXRvcgkiWy0rXSIKK3N5biBtYXRjaCBtYXRsYWJBcml0aG1ldGljT3BlcmF0b3IJIlwuXD1bKi9cXF5dIgorc3luIG1hdGNoIG1hdGxhYlJlbGF0aW9uYWxPcGVyYXRvcgkiWz1+XT0iCitzeW4gbWF0Y2ggbWF0bGFiUmVsYXRpb25hbE9wZXJhdG9yCSJbPD5dPVw9Igorc3luIG1hdGNoIG1hdGxhYkxvZ2ljYWxPcGVyYXRvcgkJIlsmfH5dIgorCitzeW4gbWF0Y2ggbWF0bGFiTGluZUNvbnRpbnVhdGlvbgkiXC5cezN9IgorCisic3luIG1hdGNoIG1hdGxhYklkZW50aWZpZXIJCSJcPFxhXHcqXD4iCisKKyIgU3RyaW5nCitzeW4gcmVnaW9uIG1hdGxhYlN0cmluZwkJCXN0YXJ0PSsnKyBlbmQ9KycrCW9uZWxpbmUKKworIiBJZiB5b3UgZG9uJ3QgbGlrZSB0YWJzCitzeW4gbWF0Y2ggbWF0bGFiVGFiCQkJIlx0IgorCisiIFN0YW5kYXJkIG51bWJlcnMKK3N5biBtYXRjaCBtYXRsYWJOdW1iZXIJCSJcPFxkXCtbaWpdXD1cPiIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRoIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCBtYXRsYWJGbG9hdAkJIlw8XGRcK1woXC5cZCpcKVw9XChbZWRFRF1bLStdXD1cZFwrXClcPVtpal1cPVw+IgorIiBmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggbWF0bGFiRmxvYXQJCSJcLlxkXCtcKFtlZEVEXVstK11cPVxkXCtcKVw9W2lqXVw9XD4iCisKKyIgVHJhbnNwb3NlIGNoYXJhY3RlciBhbmQgZGVsaW1pdGVyczogRWl0aGVyIHVzZSBqdXN0IFsuLi5dIG9yICguLi4pIGFzd2VsbAorc3luIG1hdGNoIG1hdGxhYkRlbGltaXRlcgkJIltdW10iCisic3luIG1hdGNoIG1hdGxhYkRlbGltaXRlcgkJIltdWygpXSIKK3N5biBtYXRjaCBtYXRsYWJUcmFuc3Bvc2VPcGVyYXRvcgkiW10pYS16QS1aMC05Ll0nImxjPTEKKworc3luIG1hdGNoIG1hdGxhYlNlbWljb2xvbgkJIjsiCisKK3N5biBtYXRjaCBtYXRsYWJDb21tZW50CQkJIiUuKiQiCWNvbnRhaW5zPW1hdGxhYlRvZG8sbWF0bGFiVGFiCisKK3N5biBrZXl3b3JkIG1hdGxhYk9wZXJhdG9yCQlicmVhayB6ZXJvcyBkZWZhdWx0IG1hcmdpbiByb3VuZCBvbmVzIHJhbmQKK3N5biBrZXl3b3JkIG1hdGxhYk9wZXJhdG9yCQljZWlsIGZsb29yIHNpemUgY2xlYXIgemVyb3MgZXllIG1lYW4gc3RkIGNvdgorCitzeW4ga2V5d29yZCBtYXRsYWJGdW5jdGlvbgkJZXJyb3IgZXZhbCBmdW5jdGlvbgorCitzeW4ga2V5d29yZCBtYXRsYWJJbXBsaWNpdAkJYWJzIGFjb3MgYXRhbiBhc2luIGNvcyBjb3NoIGV4cCBsb2cgcHJvZCBzdW0KK3N5biBrZXl3b3JkIG1hdGxhYkltcGxpY2l0CQlsb2cxMCBtYXggbWluIHNpZ24gc2luIHNxcnQgdGFuIHJlc2hhcGUKKworc3luIG1hdGNoIG1hdGxhYkVycm9yCSItXD1cPFxkXCtcLlxkXCtcLlteKi9cXF5dIgorc3luIG1hdGNoIG1hdGxhYkVycm9yCSItXD1cPFxkXCtcLlxkXCtbZUVkRF1bLStdXD1cZFwrXC5cKFteKi9cXF5dXCkiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX21hdGxhYl9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9tYXRsYWJfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbWF0bGFiVHJhbnNwb3NlT3BlcmF0b3IJbWF0bGFiT3BlcmF0b3IKKyAgSGlMaW5rIG1hdGxhYk9wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgbWF0bGFiTGluZUNvbnRpbnVhdGlvbglTcGVjaWFsCisgIEhpTGluayBtYXRsYWJMYWJlbAkJCUxhYmVsCisgIEhpTGluayBtYXRsYWJDb25kaXRpb25hbAkJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIG1hdGxhYlJlcGVhdAkJCVJlcGVhdAorICBIaUxpbmsgbWF0bGFiVG9kbwkJCVRvZG8KKyAgSGlMaW5rIG1hdGxhYlN0cmluZwkJCVN0cmluZworICBIaUxpbmsgbWF0bGFiRGVsaW1pdGVyCQlJZGVudGlmaWVyCisgIEhpTGluayBtYXRsYWJUcmFuc3Bvc2VPdGhlcgkJSWRlbnRpZmllcgorICBIaUxpbmsgbWF0bGFiTnVtYmVyCQkJTnVtYmVyCisgIEhpTGluayBtYXRsYWJGbG9hdAkJCUZsb2F0CisgIEhpTGluayBtYXRsYWJGdW5jdGlvbgkJRnVuY3Rpb24KKyAgSGlMaW5rIG1hdGxhYkVycm9yCQkJRXJyb3IKKyAgSGlMaW5rIG1hdGxhYkltcGxpY2l0CQltYXRsYWJTdGF0ZW1lbnQKKyAgSGlMaW5rIG1hdGxhYlN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBtYXRsYWJTZW1pY29sb24JCVNwZWNpYWxDaGFyCisgIEhpTGluayBtYXRsYWJDb21tZW50CQkJQ29tbWVudAorCisgIEhpTGluayBtYXRsYWJBcml0aG1ldGljT3BlcmF0b3IJbWF0bGFiT3BlcmF0b3IKKyAgSGlMaW5rIG1hdGxhYlJlbGF0aW9uYWxPcGVyYXRvcgltYXRsYWJPcGVyYXRvcgorICBIaUxpbmsgbWF0bGFiTG9naWNhbE9wZXJhdG9yCQltYXRsYWJPcGVyYXRvcgorCisib3B0aW9uYWwgaGlnaGxpZ2h0aW5nCisgICJIaUxpbmsgbWF0bGFiSWRlbnRpZmllcgkJSWRlbnRpZmllcgorICAiSGlMaW5rIG1hdGxhYlRhYgkJCUVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1hdGxhYiIKKworIkVPRgl2aW06IHRzPTggbm9ldCB0dz0xMDAgc3c9OCBzdHM9MApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbWVsLnZpbSBiL3J1bnRpbWUvc3ludGF4L21lbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiODk0OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21lbC52aW0KQEAgLTAsMCArMSwxMjEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglNRUwgKE1heWEgRXh0ZW5zaW9uIExhbmd1YWdlKQorIiBNYWludGFpbmVyOglSb2JlcnQgTWluc2sgPGVnYmVydEBjZW50cm9wb2xpc2Z4LmNvbT4KKyIgTGFzdCBDaGFuZ2U6CU1heSAyNyAxOTk5CisiIEJhc2VkIG9uOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiBDIHN5bnRheCBmaWxlCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiB3aGVuIHdhbnRlZCwgaGlnaGxpZ2h0IHRyYWlsaW5nIHdoaXRlIHNwYWNlIGFuZCBzcGFjZXMgYmVmb3JlIHRhYnMKK2lmIGV4aXN0cygibWVsX3NwYWNlX2Vycm9ycyIpCisgIHN5IG1hdGNoCW1lbFNwYWNlRXJyb3IJIlxzXCskIgorICBzeSBtYXRjaAltZWxTcGFjZUVycm9yCSIgXCtcdCJtZT1lLTEKK2VuZGlmCisKKyIgQSBidW5jaCBvZiB1c2VmdWxsIE1FTCBrZXl3b3Jrcworc3kga2V5d29yZAltZWxCb29sZWFuCXRydWUgZmFsc2UgeWVzIG5vIG9uIG9mZgorCitzeSBrZXl3b3JkCW1lbEZ1bmN0aW9uCXByb2MKK3N5IG1hdGNoCW1lbElkZW50aWZpZXIJIlwkXChcYVx8X1wpXHcqIgorCitzeSBrZXl3b3JkCW1lbFN0YXRlbWVudAlicmVhayBjb250aW51ZSByZXR1cm4KK3N5IGtleXdvcmQJbWVsQ29uZGl0aW9uYWwJaWYgZWxzZSBzd2l0Y2gKK3N5IGtleXdvcmQJbWVsUmVwZWF0CXdoaWxlIGZvciBkbyBpbgorc3kga2V5d29yZAltZWxMYWJlbAljYXNlIGRlZmF1bHQKK3N5IGtleXdvcmQJbWVsT3BlcmF0b3IJc2l6ZSBldmFsIGVudiBleGlzdHMgd2hhdElzCitzeSBrZXl3b3JkCW1lbEtleXdvcmQJYWxpYXMKK3N5IGtleXdvcmQJbWVsRXhjZXB0aW9uCWNhdGNoIGVycm9yIHdhcm5pbmcKKworc3kga2V5d29yZAltZWxJbmNsdWRlCXNvdXJjZQorCitzeSBrZXl3b3JkCW1lbFR5cGUJCWludCBmbG9hdCBzdHJpbmcgdmVjdG9yIG1hdHJpeAorc3kga2V5d29yZAltZWxTdG9yYWdlQ2xhc3MJZ2xvYmFsCisKK3N5IGtleXdvcmQJbWVsRGVidWcJdHJhY2UKKworc3kga2V5d29yZAltZWxUb2RvCQljb250YWluZWQgVE9ETyBGSVhNRSBYWFgKKworIiBNRUwgZGF0YSB0eXBlcworc3kgbWF0Y2gJbWVsQ2hhclNwZWNpYWwJY29udGFpbmVkICJcXFtudHJcXCJdIgorc3kgbWF0Y2gJbWVsQ2hhckVycm9yCWNvbnRhaW5lZCAiXFxbXm50clxcIl0iCisKK3N5IHJlZ2lvbgltZWxTdHJpbmcJc3RhcnQ9KyIrIHNraXA9K1xcIisgZW5kPSsiKyBjb250YWlucz1tZWxDaGFyU3BlY2lhbCxtZWxDaGFyRXJyb3IKKworc3kgY2FzZSBpZ25vcmUKK3N5IG1hdGNoCW1lbEludGVnZXIJIlw8XGRcK1woZVstK11cPVxkXCtcKVw9XD4iCitzeSBtYXRjaAltZWxGbG9hdAkiXDxcZFwrXChlWy0rXVw9XGRcK1wpXD1mXD4iCitzeSBtYXRjaAltZWxGbG9hdAkiXDxcZFwrXC5cZCpcKGVbLStdXD1cZFwrXClcPWZcPVw+Igorc3kgbWF0Y2gJbWVsRmxvYXQJIlwuXGRcK1woZVstK11cPVxkXCtcKVw9Zlw9XD4iCitzeSBjYXNlIG1hdGNoCisKK3N5IG1hdGNoCW1lbENvbW1hU2VtaQljb250YWluZWQgIlssO10iCitzeSByZWdpb24JbWVsTWF0cml4VmVjdG9yCXN0YXJ0PS88PC8gZW5kPS8+Pi8gY29udGFpbnM9bWVsSW50ZWdlcixtZWxGbG9hdCxtZWxJZGVudGlmaWVyLG1lbENvbW1hU2VtaQorCitzeSBjbHVzdGVyCW1lbEdyb3VwCWNvbnRhaW5zPW1lbEZ1bmN0aW9uLG1lbFN0YXRlbWVudCxtZWxDb25kaXRpb25hbCxtZWxMYWJlbCxtZWxLZXl3b3JkLG1lbFN0b3JhZ2VDbGFzcyxtZWxUT0RPLG1lbENoYXJTcGVjaWFsLG1lbENoYXJFcnJvcixtZWxDb21tYVNlbWkKKworIiBjYXRjaCBlcnJvcnMgY2F1c2VkIGJ5IHdyb25nIHBhcmVudGhlc2lzCitzeSByZWdpb24JbWVsUGFyZW4JdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULEBtZWxHcm91cCxtZWxQYXJlbkVycm9yLG1lbEluUGFyZW4KK3N5IG1hdGNoCW1lbFBhcmVuRXJyb3IJIikiCitzeSBtYXRjaAltZWxJblBhcmVuCWNvbnRhaW5lZCAiW3t9XSIKKworIiBjb21tZW50cworc3kgcmVnaW9uCW1lbENvbW1lbnQJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPW1lbFRvZG8sbWVsU3BhY2VFcnJvcgorc3kgbWF0Y2gJbWVsQ29tbWVudAkiLy8uKiIgY29udGFpbnM9bWVsVG9kbyxtZWxTcGFjZUVycm9yCitzeSBtYXRjaAltZWxDb21tZW50RXJyb3IgIlwqLyIKKworc3kgcmVnaW9uCW1lbFF1ZXN0aW9uQ29sb24gbWF0Y2hncm91cD1tZWxDb25kaXRpb25hbCB0cmFuc3BhcmVudCBzdGFydD0nPycgZW5kPSc6JyBjb250YWlucz1BTExCVVQsQG1lbEdyb3VwCisKK2lmICFleGlzdHMoIm1lbF9taW5saW5lcyIpCisgIGxldCBtZWxfbWlubGluZXM9MTUKK2VuZGlmCitleGVjICJzeSBzeW5jIGNjb21tZW50IG1lbENvbW1lbnQgbWlubGluZXM9IiAuIG1lbF9taW5saW5lcworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9tZWxfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbWVsX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIG1lbEJvb2xlYW4JQm9vbGVhbgorICBIaUxpbmsgbWVsRnVuY3Rpb24JRnVuY3Rpb24KKyAgSGlMaW5rIG1lbElkZW50aWZpZXIJSWRlbnRpZmllcgorICBIaUxpbmsgbWVsU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgbWVsQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwKKyAgSGlMaW5rIG1lbFJlcGVhdAlSZXBlYXQKKyAgSGlMaW5rIG1lbExhYmVsCUxhYmVsCisgIEhpTGluayBtZWxPcGVyYXRvcglPcGVyYXRvcgorICBIaUxpbmsgbWVsS2V5d29yZAlLZXl3b3JkCisgIEhpTGluayBtZWxFeGNlcHRpb24JRXhjZXB0aW9uCisgIEhpTGluayBtZWxJbmNsdWRlCUluY2x1ZGUKKyAgSGlMaW5rIG1lbFR5cGUJVHlwZQorICBIaUxpbmsgbWVsU3RvcmFnZUNsYXNzIFN0b3JhZ2VDbGFzcworICBIaUxpbmsgbWVsRGVidWcJRGVidWcKKyAgSGlMaW5rIG1lbFRvZG8JVG9kbworICBIaUxpbmsgbWVsQ2hhclNwZWNpYWwgU3BlY2lhbENoYXIKKyAgSGlMaW5rIG1lbFN0cmluZwlTdHJpbmcKKyAgSGlMaW5rIG1lbEludGVnZXIJTnVtYmVyCisgIEhpTGluayBtZWxGbG9hdAlGbG9hdAorICBIaUxpbmsgbWVsTWF0cml4VmVjdG9yIEZsb2F0CisgIEhpTGluayBtZWxDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIG1lbEVycm9yCUVycm9yCisgIEhpTGluayBtZWxTcGFjZUVycm9yCW1lbEVycm9yCisgIEhpTGluayBtZWxDaGFyRXJyb3IJbWVsRXJyb3IKKyAgSGlMaW5rIG1lbFBhcmVuRXJyb3IJbWVsRXJyb3IKKyAgSGlMaW5rIG1lbEluUGFyZW4JbWVsRXJyb3IKKyAgSGlMaW5rIG1lbENvbW1lbnRFcnJvciBtZWxFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJtZWwiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9tZi52aW0gYi9ydW50aW1lL3N5bnRheC9tZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjNDhmZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21mLnZpbQpAQCAtMCwwICsxLDE5NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU1ldGFmb250CisiIE1haW50YWluZXI6CUFuZHJlYXMgU2NoZXJlciA8YW5kcmVhcy5zY2hlcmVyQHBvYm94LmNvbT4KKyIgTGFzdCBDaGFuZ2U6CUFwcmlsIDI1LCAyMDAxCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBNZXRhZm9udCAncHJpbWl0aXZlcycgYXMgZGVmaW5lZCBpbiBjaGFwdGVyIDI1IG9mICdUaGUgTUVUQUZPTlRib29rJworIiBQYWdlIDIxMDogJ2Jvb2xlYW4gZXhwcmVzc2lvbnMnCitzeW4ga2V5d29yZCBtZkJvb2xFeHAgdHJ1ZSBmYWxzZSBrbm93biB1bmtub3duIG9kZCBjaGFyZXhpc3RzIG5vdCBhbmQgb3IKKworIiBQYWdlIDIxMDogJ251bWVyaWMgZXhwcmVzc2lvbicKK3N5biBrZXl3b3JkIG1mTnVtRXhwIG5vcm1hbGRldmlhdGUgbGVuZ3RoIEFTQ0lJIG9jdCBoZXggYW5nbGUgdHVybmluZ251bWJlcgorc3luIGtleXdvcmQgbWZOdW1FeHAgdG90YWx3ZWlnaHQgZGlyZWN0aW9udGltZSB4cGFydCB5cGFydCB4eHBhcnQgeHlwYXJ0CitzeW4ga2V5d29yZCBtZk51bUV4cCB5eHBhcnQgeXlwYXJ0IHNxcnQgc2luZCBjb3NkIG1sb2cgbWV4cCBmbG9vcgorc3luIGtleXdvcmQgbWZOdW1FeHAgdW5pZm9ybWRldmlhdGUKKworIiBQYWdlIDIxMTogJ2ludGVybmFsIHF1YW50aXRpZXMnCitzeW4ga2V5d29yZCBtZkludGVybmFsIHRyYWNpbmd0aXRsZXMgdHJhY2luZ2VxdWF0aW9ucyB0cmFjaW5nY2Fwc3VsZXMKK3N5biBrZXl3b3JkIG1mSW50ZXJuYWwgdHJhY2luZ2Nob2ljZXMgdHJhY2luZ3NwZWNzIHRyYWNpbmdwZW5zCitzeW4ga2V5d29yZCBtZkludGVybmFsIHRyYWNpbmdjb21tYW5kcyB0cmFjaW5ncmVzdG9yZXMgdHJhY2luZ21hY3Jvcworc3luIGtleXdvcmQgbWZJbnRlcm5hbCB0cmFjaW5nZWRnZXMgdHJhY2luZ291dHB1dCB0cmFjaW5nb25saW5lIHRyYWNpbmdzdGF0cworc3luIGtleXdvcmQgbWZJbnRlcm5hbCBwYXVzaW5nIHNob3dzdG9wcGluZyBmb250bWFraW5nIHByb29maW5nCitzeW4ga2V5d29yZCBtZkludGVybmFsIHR1cm5pbmdjaGVjayB3YXJuaW5nY2hlY2sgc21vb3RoaW5nIGF1dG9yb3VuZGluZworc3luIGtleXdvcmQgbWZJbnRlcm5hbCBncmFudWxhcml0eSBmaWxsaW4geWVhciBtb250aCBkYXkgdGltZQorc3luIGtleXdvcmQgbWZJbnRlcm5hbCBjaGFyY29kZSBjaGFyZXh0IGNoYXJ3ZCBjaGFyaHQgY2hhcmRwIGNoYXJpYworc3luIGtleXdvcmQgbWZJbnRlcm5hbCBjaGFyZHggY2hhcmR5IGRlc2lnbnNpemUgaHBwcCB2cHBwIHhvZmZzZXQgeW9mZnNldAorc3luIGtleXdvcmQgbWZJbnRlcm5hbCBib3VuZGFyeWNoYXIKKworIiBQYWdlIDIxMjogJ3BhaXIgZXhwcmVzc2lvbnMnCitzeW4ga2V5d29yZCBtZlBhaXJFeHAgcG9pbnQgb2YgcHJlY29udHJvbCBwb3N0Y29udHJvbCBwZW5vZmZzZXQgcm90YXRlZAorc3luIGtleXdvcmQgbWZQYWlyRXhwIHNjYWxlZCBzaGlmdGVkIHNsYW50ZWQgdHJhbnNmb3JtZWQgeHNjYWxlZCB5c2NhbGVkCitzeW4ga2V5d29yZCBtZlBhaXJFeHAgenNjYWxlZAorCisiIFBhZ2UgMjEzOiAncGF0aCBleHByZXNzaW9ucycKK3N5biBrZXl3b3JkIG1mUGF0aEV4cCBtYWtlcGF0aCByZXZlcnNlIHN1YnBhdGggY3VybCB0ZW5zaW9uIGF0bGVhc3QKK3N5biBrZXl3b3JkIG1mUGF0aEV4cCBjb250cm9scyBjeWNsZQorCisiIFBhZ2UgMjE0OiAncGVuIGV4cHJlc3Npb25zJworc3luIGtleXdvcmQgbWZQZW5FeHAgbnVsbHBlbiBwZW5jaXJjbGUgbWFrZXBlbgorCisiIFBhZ2UgMjE0OiAncGljdXRyZSBleHByZXNzaW9ucycKK3N5biBrZXl3b3JkIG1mUGljRXhwIG51bGxwaWN0dXJlCisKKyIgUGFnZSAyMTQ6ICdzdHJpbmcgZXhwcmVzc2lvbnMnCitzeW4ga2V5d29yZCBtZlN0cmluZ0V4cCBqb2JuYW1lIHJlYWRzdHJpbmcgc3RyIGNoYXIgZGVjaW1hbCBzdWJzdHJpbmcKKworIiBQYWdlIDIxNzogJ2NvbW1hbmRzIGFuZCBzdGF0ZW1lbnRzJworc3luIGtleXdvcmQgbWZDb21tYW5kIGVuZCBkdW1wIHNhdmUgaW50ZXJpbSBuZXdpbnRlcm5hbCByYW5kb21zZWVkIGxldAorc3luIGtleXdvcmQgbWZDb21tYW5kIGRlbGltaXRlcnMgb3V0ZXIgZXZlcnlqb2Igc2hvdyBzaG93dmFyaWFibGUgc2hvd3Rva2VuCitzeW4ga2V5d29yZCBtZkNvbW1hbmQgc2hvd2RlcGVuZGVuY2llcyBzaG93c3RhdHMgbWVzc2FnZSBlcnJtZXNzYWdlIGVycmhlbHAKK3N5biBrZXl3b3JkIG1mQ29tbWFuZCBiYXRjaG1vZGUgbm9uc3RvcG1vZGUgc2Nyb2xsbW9kZSBlcnJvcnN0b3Btb2RlCitzeW4ga2V5d29yZCBtZkNvbW1hbmQgYWRkdG8gYWxzbyBjb250b3VyIGRvdWJsZXBhdGggd2l0aHBlbiB3aXRod2VpZ2h0IGN1bGwKK3N5biBrZXl3b3JkIG1mQ29tbWFuZCBrZWVwaW5nIGRyb3BwaW5nIGRpc3BsYXkgaW53aW5kb3cgb3BlbndpbmRvdyBhdCBmcm9tIHRvCitzeW4ga2V5d29yZCBtZkNvbW1hbmQgc2hpcG91dCBzcGVjaWFsIG51bXNwZWNpYWwKKworIiBQYWdlIDU2OiAndHlwZXMnCitzeW4ga2V5d29yZCBtZlR5cGUgYm9vbGVhbiBudW1lcmljIHBhaXIgcGF0aCBwZW4gcGljdHVyZSBzdHJpbmcgdHJhbnNmb3JtCisKKyIgUGFnZSAxNTU6ICdncm91cGluZycKK3N5biBrZXl3b3JkIG1mU3RhdGVtZW50IGJlZ2luZ3JvdXAgZW5kZ3JvdXAKKworIiBQYWdlIDE2NTogJ2RlZmluaXRpb25zJworc3luIGtleXdvcmQgbWZEZWZpbml0aW9uIGVuZGRlZiBkZWYgZXhwciBzdWZmaXggdGV4dCBwcmltYXJ5IHNlY29uZGFyeQorc3luIGtleXdvcmQgbWZEZWZpbml0aW9uIHRlcnRpYXJ5IHZhcmRlZiBwcmltYXJ5ZGVmIHNlY29uZGFyeWRlZiB0ZXJ0aWFyeWRlZgorCisiIFBhZ2UgMTY5OiAnY29uZGl0aW9ucyBhbmQgbG9vcHMnCitzeW4ga2V5d29yZCBtZkNvbmRpdGlvbiBpZiBmaSBlbHNlIGVsc2VpZiBlbmRmb3IgZm9yIGZvcnN1ZmZpeGVzIGZvcmV2ZXIKK3N5biBrZXl3b3JkIG1mQ29uZGl0aW9uIHN0ZXAgdW50aWwgZXhpdGlmCisKKyIgT3RoZXIgcHJpbWl0aXZlcyBsaXN0ZWQgaW4gdGhlIGluZGV4CitzeW4ga2V5d29yZCBtZlByaW1pdGl2ZSBjaGFybGlzdCBlbmRpbnB1dCBleHBhbmRhZnRlciBleHRlbnNpYmxlCitzeW4ga2V5d29yZCBtZlByaW1pdGl2ZSBmb250ZGltZW4gaGVhZGVyYnl0ZSBpbm5lciBpbnB1dCBpbnRlcnNlY3Rpb250aW1lcworc3luIGtleXdvcmQgbWZQcmltaXRpdmUga2VybiBsaWd0YWJsZSBxdW90ZSBzY2FudG9rZW5zIHNraXB0bworCisiIEtleXdvcmRzIGRlZmluZWQgYnkgcGxhaW4ubWYgKGRlZmluZWQgb24gcHAuMjYyLTI3OCkKK2lmICFleGlzdHMoInBsYWluX21mX21hY3JvcyIpCisgIGxldCBwbGFpbl9tZl9tYWNyb3MgPSAxICIgU2V0IHRoaXMgdG8gJzAnIGlmIHlvdXIgc291cmNlIGdldHMgdG9vIGNvbG91cmZ1bAorCQkJICAiIG1ldGFwb3N0LnZpbSBkb2VzIHNvIHRvIHR1cm4gb2ZmIE1ldGFmb250IG1hY3JvcworZW5kaWYKK2lmIHBsYWluX21mX21hY3JvcworICBzeW4ga2V5d29yZCBtZk1hY3JvIGFicyBhZGR0b19jdXJyZW50cGljdHVyZSBhc3BlY3RfcmF0aW8gYmFzZV9uYW1lCisgIHN5biBrZXl3b3JkIG1mTWFjcm8gYmFzZV92ZXJzaW9uIGJlZ2luY2hhciBibGFja2VyIGJsYW5rcGljdHVyZSBib3QgYnllIGJ5dGUKKyAgc3luIGtleXdvcmQgbWZNYWNybyBjYXBzdWxlX2RlZiBjZWlsaW5nIGNoYW5nZV93aWR0aCBjbGVhcl9wZW5fbWVtb3J5IGNsZWFyaXQKKyAgc3luIGtleXdvcmQgbWZNYWNybyBjbGVhcnBlbiBjbGVhcnh5IGNvdW50ZXJjbG9ja3dpc2UgY3VsbGRyYXcgY3VsbGl0CisgIHN5biBrZXl3b3JkIG1mTWFjcm8gY3VycmVudHBlbiBjdXJyZW50cGVuX3BhdGggY3VycmVudHBpY3R1cmUKKyAgc3luIGtleXdvcmQgbWZNYWNybyBjdXJyZW50dHJhbnNmb3JtIGN1cnJlbnR3aW5kb3cgY3V0ZHJhdyBjdXRvZmYgZCBkZWNyCisgIHN5biBrZXl3b3JkIG1mTWFjcm8gZGVmaW5lX2JsYWNrZXJfcGl4ZWxzIGRlZmluZV9jb3JyZWN0ZWRfcGl4ZWxzCisgIHN5biBrZXl3b3JkIG1mTWFjcm8gZGVmaW5lX2dvb2RfeF9waXhlbHMgZGVmaW5lX2dvb2RfeV9waXhlbHMKKyAgc3luIGtleXdvcmQgbWZNYWNybyBkZWZpbmVfaG9yaXpvbnRhbF9jb3JyZWN0ZWRfcGl4ZWxzIGRlZmluZV9waXhlbHMKKyAgc3luIGtleXdvcmQgbWZNYWNybyBkZWZpbmVfd2hvbGVfYmxhY2tlcl9waXhlbHMgZGVmaW5lX3dob2xlX3BpeGVscworICBzeW4ga2V5d29yZCBtZk1hY3JvIGRlZmluZV93aG9sZV92ZXJ0aWNhbF9ibGFja2VyX3BpeGVscworICBzeW4ga2V5d29yZCBtZk1hY3JvIGRlZmluZV93aG9sZV92ZXJ0aWNhbF9waXhlbHMgZGlyIGRpcmVjdGlvbiBkaXJlY3Rpb25wb2ludAorICBzeW4ga2V5d29yZCBtZk1hY3JvIGRpc3BsYXlpbmcgZGl0dG8gZGl2IGRvdHByb2QgZG93biBkb3dudG8gZHJhdyBkcmF3ZG90CisgIHN5biBrZXl3b3JkIG1mTWFjcm8gZW5kY2hhciBlcHMgZXBzaWxvbiBleHRyYV9iZWdpbmNoYXIgZXh0cmFfZW5kY2hhcgorICBzeW4ga2V5d29yZCBtZk1hY3JvIGV4dHJhX3NldHVwIGVyYXNlIGV4aXR1bmxlc3MgZmlsbCBmaWxsZHJhdyBmaXhfdW5pdHMgZmxleAorICBzeW4ga2V5d29yZCBtZk1hY3JvIGZvbnRfY29kaW5nX3NjaGVtZSBmb250X2V4dHJhX3NwYWNlIGZvbnRfaWRlbnRpZmllcgorICBzeW4ga2V5d29yZCBtZk1hY3JvIGZvbnRfbm9ybWFsX3NocmluayBmb250X25vcm1hbF9zcGFjZSBmb250X25vcm1hbF9zdHJldGNoCisgIHN5biBrZXl3b3JkIG1mTWFjcm8gZm9udF9xdWFkIGZvbnRfc2V0dXAgZm9udF9zaXplIGZvbnRfc2xhbnQgZm9udF94X2hlaWdodAorICBzeW4ga2V5d29yZCBtZk1hY3JvIGZ1bGxjaXJjbGUgZ2VuZXJhdGUgZ2Zjb3JuZXJzIGdvYmJsZSBnb2JibGVkIGdyYXlmb250IGgKKyAgc3luIGtleXdvcmQgbWZNYWNybyBoYWxmY2lyY2xlIGhpZGUgaHJvdW5kIGlkZW50aXR5IGltYWdlX3J1bGVzIGluY3IgaW5maW5pdHkKKyAgc3luIGtleXdvcmQgbWZNYWNybyBpbnRlcmFjdCBpbnRlcnBhdGggaW50ZXJzZWN0aW9ucG9pbnQgaW52ZXJzZSBpdGFsY29ycgorICBzeW4ga2V5d29yZCBtZk1hY3JvIGpvaW5fcmFkaXVzIGtpbGx0ZXh0IGxhYmVsZm9udCBsYWJlbHMgbGVmdCBsZnQgbG9jYWxmb250CisgIHN5biBrZXl3b3JkIG1mTWFjcm8gbG9nZ2luZ2FsbCBsb3dyZXMgbG93cmVzX2ZpeCBtYWcgbWFnc3RlcCBtYWtlYm94IG1ha2VncmlkCisgIHN5biBrZXl3b3JkIG1mTWFjcm8gbWFrZWxhYmVsIG1ha2V0aWNrcyBtYXggbWluIG1vZCBtb2RlIG1vZGVfZGVmIG1vZGVfbmFtZQorICBzeW4ga2V5d29yZCBtZk1hY3JvIG1vZGVfc2V0dXAgbm9kaXNwbGF5cyBub3RyYW5zZm9ybXMgbnVtYmVyX29mX21vZGVzIG51bXRvaworICBzeW4ga2V5d29yZCBtZk1hY3JvIG9fY29ycmVjdGlvbiBvcGVuaXQgb3JpZ2luIHBlbl9ib3QgcGVuX2xmdCBwZW5fcnQgcGVuX3RvcAorICBzeW4ga2V5d29yZCBtZk1hY3JvIHBlbmxhYmVscyBwZW5wb3MgcGVucmF6b3IgcGVuc3BlY2sgcGVuc3F1YXJlIHBlbnN0cm9rZQorICBzeW4ga2V5d29yZCBtZk1hY3JvIHBpY2t1cCBwaXhlbHNfcGVyX2luY2ggcHJvb2YgcHJvb2ZvZmZzZXQgcHJvb2ZydWxlCisgIHN5biBrZXl3b3JkIG1mTWFjcm8gcHJvb2ZydWxldGhpY2tuZXNzIHF1YXJ0ZXJjaXJjbGUgcmFuZ2UgcmVmbGVjdGVkYWJvdXQKKyAgc3luIGtleXdvcmQgbWZNYWNybyByZWxheCByaWdodCByb3RhdGVkYWJvdXQgcm90YXRlZGFyb3VuZCByb3VuZCBydCBydWxlcGVuCisgIHN5biBrZXl3b3JkIG1mTWFjcm8gc2F2ZXBlbiBzY3JlZW5jaGFycyBzY3JlZW5fcm93cyBzY3JlZW5fY29scyBzY3JlZW5ydWxlCisgIHN5biBrZXl3b3JkIG1mTWFjcm8gc2NyZWVuc3Ryb2tlcyBzaGlwaXQgc2hvd2l0IHNsYW50Zm9udCBzbW9kZSBzbW9rZSBzb2Z0am9pbgorICBzeW4ga2V5d29yZCBtZk1hY3JvIHNvbHZlIHN0b3Agc3VwZXJlbGxpcHNlIHRha2Vwb3dlciB0ZW5zZXBhdGggdGl0bGVmb250CisgIHN5biBrZXl3b3JkIG1mTWFjcm8gdG9sZXJhbmNlIHRvcCB0cmFjaW5nYWxsIHRyYWNpbmdub25lIHVuZHJhdyB1bmRyYXdkb3QKKyAgc3luIGtleXdvcmQgbWZNYWNybyB1bmZpbGwgdW5maWxsZHJhdyB1bml0cGl4ZWwgdW5pdHNxdWFyZSB1bml0dmVjdG9yIHVwIHVwdG8KKyAgc3luIGtleXdvcmQgbWZNYWNybyB2cm91bmQgdyB3aGF0ZXZlcgorZW5kaWYKKworIiBTb21lIG90aGVyIGJhc2ljIG1hY3JvIG5hbWVzLCBlLmcuLCBmcm9tIGNtYmFzZSwgbG9nbywgZXRjLgoraWYgIWV4aXN0cygib3RoZXJfbWZfbWFjcm9zIikKKyAgbGV0IG90aGVyX21mX21hY3JvcyA9IDEgIiBTZXQgdGhpcyB0byAnMCcgaWYgeW91ciBjb2RlIGdldHMgdG9vIGNvbG91cmZ1bAorCQkJICAiIG1ldGFwb3N0LnZpbSBkb2VzIHNvIHRvIHR1cm4gb2ZmIE1ldGFmb250IG1hY3JvcworZW5kaWYKK2lmIG90aGVyX21mX21hY3JvcworICBzeW4ga2V5d29yZCBtZk1hY3JvIGJlZ2lubG9nb2NoYXIKK2VuZGlmCisKKyIgTnVtZXJpYyB0b2tlbnMKK3N5biBtYXRjaCBtZk51bWVyaWMJIlstXVw9XGRcKyIKK3N5biBtYXRjaCBtZk51bWVyaWMJIlstXVw9XC5cZFwrIgorc3luIG1hdGNoIG1mTnVtZXJpYwkiWy1dXD1cZFwrXC5cZFwrIgorCisiIE1ldGFmb250IGxlbmd0aHMKK3N5biBtYXRjaCBtZkxlbmd0aAkiXDxcKGJwXHxjY1x8Y21cfGRkXHxpblx8bW1cfHBjXHxwdFwpXD4iCitzeW4gbWF0Y2ggbWZMZW5ndGgJIlw8Wy1dXD1cZFwrXChicFx8Y2NcfGNtXHxkZFx8aW5cfG1tXHxwY1x8cHRcKVwjXD1cPiIKK3N5biBtYXRjaCBtZkxlbmd0aAkiXDxbLV1cPVwuXGRcK1woYnBcfGNjXHxjbVx8ZGRcfGluXHxtbVx8cGNcfHB0XClcI1w9XD4iCitzeW4gbWF0Y2ggbWZMZW5ndGgJIlw8Wy1dXD1cZFwrXC5cZFwrXChicFx8Y2NcfGNtXHxkZFx8aW5cfG1tXHxwY1x8cHRcKVwjXD1cPiIKKworIiBNZXRhZm9udCBjb29yZGluYXRlcyBhbmQgcG9pbnRzCitzeW4gbWF0Y2ggbWZDb29yZAkiXDxbeHldXGRcK1w+Igorc3luIG1hdGNoIG1mUG9pbnQJIlw8elxkXCtcPiIKKworIiBTdHJpbmcgY29uc3RhbnRzCitzeW4gcmVnaW9uIG1mU3RyaW5nCXN0YXJ0PSsiKyBlbmQ9KyIrCisKKyIgQ29tbWVudHM6CitzeW4gbWF0Y2ggbWZDb21tZW50CSIlLiokIgorCisiIHN5bmNocm9uaXppbmcKK3N5biBzeW5jIG1heGxpbmVzPTUwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbWZfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbWZfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbWZCb29sRXhwCVN0YXRlbWVudAorICBIaUxpbmsgbWZOdW1FeHAJU3RhdGVtZW50CisgIEhpTGluayBtZkludGVybmFsCUlkZW50aWZpZXIKKyAgSGlMaW5rIG1mUGFpckV4cAlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1mUGF0aEV4cAlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1mUGVuRXhwCVN0YXRlbWVudAorICBIaUxpbmsgbWZQaWNFeHAJU3RhdGVtZW50CisgIEhpTGluayBtZlN0cmluZ0V4cAlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1mQ29tbWFuZAlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1mVHlwZQlUeXBlCisgIEhpTGluayBtZlN0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1mRGVmaW5pdGlvbglTdGF0ZW1lbnQKKyAgSGlMaW5rIG1mQ29uZGl0aW9uCUNvbmRpdGlvbmFsCisgIEhpTGluayBtZlByaW1pdGl2ZQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1mTWFjcm8JTWFjcm8KKyAgSGlMaW5rIG1mQ29vcmQJSWRlbnRpZmllcgorICBIaUxpbmsgbWZQb2ludAlJZGVudGlmaWVyCisgIEhpTGluayBtZk51bWVyaWMJTnVtYmVyCisgIEhpTGluayBtZkxlbmd0aAlOdW1iZXIKKyAgSGlMaW5rIG1mQ29tbWVudAlDb21tZW50CisgIEhpTGluayBtZlN0cmluZwlTdHJpbmcKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibWYiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9tZ3AudmltIGIvcnVudGltZS9zeW50YXgvbWdwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmI5NjYxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbWdwLnZpbQpAQCAtMCwwICsxLDgzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIG1ncCAtIE1hR2ljIFBvaW50CisiIE1haW50YWluZXI6ICAgR2VyZnJpZWQgRnVjaHMgPGFsZmllQGlzdC5vcmc+CisiIEZpbGVuYW1lczogICAgKi5tZ3AKKyIgTGFzdCBDaGFuZ2U6ICAyNSBBcHIgMjAwMQorIiBVUkw6CQlodHRwOi8vYWxmaWUuaXN0Lm9yZy92aW0vc3ludGF4L21ncC52aW0KKyIKKyIgQ29tbWVudHMgYXJlIHZlcnkgd2VsY29tZSAtIGJ1dCBwbGVhc2UgbWFrZSBzdXJlIHRoYXQgeW91IGFyZSBjb21tZW50aW5nIG9uCisiIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGZpbGUuCisiIFNQQU0gaXMgX05PVF8gd2VsY29tZSAtIGJlIHJlYWR5IHRvIGJlIHJlcG9ydGVkIQorCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworCitzeW4gbWF0Y2ggbWdwTGluZVNraXAgIlxcJCIKKworIiBhbGwgdGhlIGNvbW1hbmRzIHRoYXQgYXJlIGN1cnJlbnRseSByZWNvZ25pemVkCitzeW4ga2V5d29yZCBtZ3BDb21tYW5kIGNvbnRhaW5lZCBzaXplIGZvcmUgYmFjayBiZ3JhZCBsZWZ0IGxlZnRmaWxsIGNlbnRlcgorc3luIGtleXdvcmQgbWdwQ29tbWFuZCBjb250YWluZWQgcmlnaHQgc2hyaW5rIGxjdXRpbiByY3V0aW4gY29udCB4Zm9udCB2Zm9udAorc3luIGtleXdvcmQgbWdwQ29tbWFuZCBjb250YWluZWQgdGZvbnQgdG1mb250IHRmb250MCBiYXIgaW1hZ2UgbmV3aW1hZ2UKK3N5biBrZXl3b3JkIG1ncENvbW1hbmQgY29udGFpbmVkIHByZWZpeCBpY29uIGJpbWFnZSBkZWZhdWx0IHRhYiB2Z2FwIGhnYXAKK3N5biBrZXl3b3JkIG1ncENvbW1hbmQgY29udGFpbmVkIHBhdXNlIG1hcmsgYWdhaW4gc3lzdGVtIGZpbHRlciBlbmRmaWx0ZXIKK3N5biBrZXl3b3JkIG1ncENvbW1hbmQgY29udGFpbmVkIHZmY2FwIHRmZGlyIGRlZmZvbnQgZm9udCBlbWJlZCBlbmRlbWJlZAorc3luIGtleXdvcmQgbWdwQ29tbWFuZCBjb250YWluZWQgbm9vcCBwY2FjaGUgaW5jbHVkZQorCisiIGNoYXJzZXQgaXMgbm90IHlldCBzdXBwb3J0ZWQgOi0pCisiIHN5biBrZXl3b3JkIG1ncENvbW1hbmQgY29udGFpbmVkIGNoYXJzZXQKKworc3luIHJlZ2lvbiBtZ3BGaWxlICAgICBjb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKworc3luIG1hdGNoIG1ncFZhbHVlICAgICBjb250YWluZWQgIlxkXCsiCitzeW4gbWF0Y2ggbWdwU2l6ZSAgICAgIGNvbnRhaW5lZCAiXGRcK3hcZFwrIgorc3luIG1hdGNoIG1ncExpbmUgICAgICArXiUuKiQrIGNvbnRhaW5zPW1ncENvbW1hbmQsbWdwRmlsZSxtZ3BTaXplLG1ncFZhbHVlCisKKyIgQ29tbWVudHMKK3N5biBtYXRjaCBtZ3BQZXJjZW50ICAgK14lJS4qJCsKK3N5biBtYXRjaCBtZ3BIYXNoICAgICAgK14jLiokKworCisiIHRoZXNlIG9ubHkgd29yayBhbG9uZQorc3luIG1hdGNoIG1ncFBhZ2UgICAgICArXiVwYWdlJCsKK3N5biBtYXRjaCBtZ3BOb0RlZmF1bHQgK14lbm9kZWZhdWx0JCsKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9tZ3Bfc3luX2luaXRzIikKKyAgbGV0IGRpZF9tZ3Bfc3luX2luaXRzID0gMQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9tZ3Bfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbWdwTGluZVNraXAJU3BlY2lhbAorCisgIEhpTGluayBtZ3BIYXNoCW1ncENvbW1lbnQKKyAgSGlMaW5rIG1ncFBlcmNlbnQJbWdwQ29tbWVudAorICBIaUxpbmsgbWdwQ29tbWVudAlDb21tZW50CisKKyAgSGlMaW5rIG1ncENvbW1hbmQJSWRlbnRpZmllcgorCisgIEhpTGluayBtZ3BMaW5lCVR5cGUKKworICBIaUxpbmsgbWdwRmlsZQlTdHJpbmcKKyAgSGlMaW5rIG1ncFNpemUJTnVtYmVyCisgIEhpTGluayBtZ3BWYWx1ZQlOdW1iZXIKKworICBIaUxpbmsgbWdwUGFnZQltZ3BEZWZpbmUKKyAgSGlMaW5rIG1ncE5vRGVmYXVsdAltZ3BEZWZpbmUKKyAgSGlMaW5rIG1ncERlZmluZQlEZWZpbmUKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibWdwIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbWliLnZpbSBiL3J1bnRpbWUvc3ludGF4L21pYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5MjQyZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21pYi52aW0KQEAgLTAsMCArMSw3NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVZpbSBzeW50YXggZmlsZSBmb3IgU05NUHYxIGFuZCBTTk1QdjIgTUlCIGFuZCBTTUkgZmlsZXMKKyIgQXV0aG9yOglEYXZpZCBQYXNjb2UgPHBhc2NvZWRqQHNwYW1jb3AubmV0PgorIiBXcml0dGVuOglXZWQgSmFuIDI4IDE0OjM3OjIzIEdNVC0tODowMCAxOTk4CisiIExhc3QgQ2hhbmdlZDoJVGh1IEZlYiAyNyAxMDoxODoxNiBXU1QgMjAwMworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmIHZlcnNpb24gPj0gNjAwCisgIHNldGxvY2FsIGlza2V5d29yZD1ALDQ4LTU3LF8sMTI4LTE2NywyMjQtMjM1LC0sOiw9CitlbHNlCisgIHNldCBpc2tleXdvcmQ9QCw0OC01NyxfLDEyOC0xNjcsMjI0LTIzNSwtLDosPQorZW5kaWYKKworc3luIGtleXdvcmQgbWliSW1wbGljaXQgQUNDRVNTIEFOWSBBVUdNRU5UUyBCRUdJTiBCSVQgQklUUyBCT09MRUFOIENIT0lDRQorc3luIGtleXdvcmQgbWliSW1wbGljaXQgQ09NUE9ORU5UUyBDT05UQUNULUlORk8gREVGSU5JVElPTlMgREVGVkFMCitzeW4ga2V5d29yZCBtaWJJbXBsaWNpdCBERVNDUklQVElPTiBESVNQTEFZLUhJTlQgRU5EIEVOVEVSUFJJU0UgRVhURVJOQUwgRkFMU0UKK3N5biBrZXl3b3JkIG1pYkltcGxpY2l0IEZST00gR1JPVVAgSU1QTElDSVQgSU1QTElFRCBJTVBPUlRTIElOREVYCitzeW4ga2V5d29yZCBtaWJJbXBsaWNpdCBMQVNULVVQREFURUQgTUFOREFUT1JZLUdST1VQUyBNQVgtQUNDRVNTCitzeW4ga2V5d29yZCBtaWJJbXBsaWNpdCBNSU4tQUNDRVNTIE1PRFVMRSBNT0RVTEUtQ09NUExJQU5DRSBNT0RVTEUtSURFTlRJVFkKK3N5biBrZXl3b3JkIG1pYkltcGxpY2l0IE5PVElGSUNBVElPTi1HUk9VUCBOT1RJRklDQVRJT04tVFlQRSBOT1RJRklDQVRJT05TCitzeW4ga2V5d29yZCBtaWJJbXBsaWNpdCBOVUxMIE9CSkVDVC1HUk9VUCBPQkpFQ1QtSURFTlRJVFkgT0JKRUNULVRZUEUKK3N5biBrZXl3b3JkIG1pYkltcGxpY2l0IE9CSkVDVFMgT0YgT1BUSU9OQUwgT1JHQU5JWkFUSU9OIFJFRkVSRU5DRQorc3luIGtleXdvcmQgbWliSW1wbGljaXQgUkVWSVNJT04gU0VRVUVOQ0UgU0VUIFNJWkUgU1RBVFVTIFNZTlRBWAorc3luIGtleXdvcmQgbWliSW1wbGljaXQgVEVYVFVBTC1DT05WRU5USU9OIFRSQVAtVFlQRSBUUlVFIFVOSVRTIFZBUklBQkxFUworc3luIGtleXdvcmQgbWliSW1wbGljaXQgV1JJVEUtU1lOVEFYIDo6PQorc3luIGtleXdvcmQgbWliVmFsdWUgYWNjZXNzaWJsZS1mb3Itbm90aWZ5IGN1cnJlbnQgRGlzcGxheVN0cmluZworc3luIGtleXdvcmQgbWliVmFsdWUgZGVwcmVjYXRlZCBtYW5kYXRvcnkgbm90LWFjY2Vzc2libGUgb2Jzb2xldGUgb3B0aW9uYWwKK3N5biBrZXl3b3JkIG1pYlZhbHVlIHJlYWQtY3JlYXRlIHJlYWQtb25seSByZWFkLXdyaXRlIHdyaXRlLW9ubHkgSU5URUdFUgorc3luIGtleXdvcmQgbWliVmFsdWUgQ291bnRlciBHYXVnZSBJcEFkZHJlc3MgT0NURVQgU1RSSU5HIGV4cGVyaW1lbnRhbCBtaWItMgorc3luIGtleXdvcmQgbWliVmFsdWUgVGltZVRpY2tzIFJvd1N0YXR1cyBUcnV0aFZhbHVlIFVJbnRlZ2VyMzIgc25tcE1vZHVsZXMKK3N5biBrZXl3b3JkIG1pYlZhbHVlIEludGVnZXIzMiBDb3VudGVyMzIgVGVzdEFuZEluY3IgVGltZVN0YW1wIEluc3RhbmNlUG9pbnRlcgorc3luIGtleXdvcmQgbWliVmFsdWUgT0JKRUNUIElERU5USUZJRVIgR2F1Z2UzMiBBdXRvbm9tb3VzVHlwZSBDb3VudGVyNjQKK3N5biBrZXl3b3JkIG1pYlZhbHVlIFBoeXNBZGRyZXNzIFRpbWVJbnRlcnZhbCBNYWNBZGRyZXNzIFN0b3JhZ2VUeXBlIFJvd1BvaW50ZXIKK3N5biBrZXl3b3JkIG1pYlZhbHVlIFREb21haW4gVEFkZHJlc3MgaWZJbmRleAorCisiIEVwaWxvZ3VlIFNNSSBleHRlbnNpb25zCitzeW4ga2V5d29yZCBtaWJFcGlsb2d1ZSBGT1JDRS1JTkNMVURFIEVYQ0xVREUgY29va2llIGdldC1mdW5jdGlvbiBzZXQtZnVuY3Rpb24KK3N5biBrZXl3b3JkIG1pYkVwaWxvZ3VlIHRlc3QtZnVuY3Rpb24gZ2V0LWZ1bmN0aW9uLWFzeW5jIHNldC1mdW5jdGlvbi1hc3luYworc3luIGtleXdvcmQgbWliRXBpbG9ndWUgdGVzdC1mdW5jdGlvbi1hc3luYyBuZXh0LWZ1bmN0aW9uIG5leHQtZnVuY3Rpb24tYXN5bmMKK3N5biBrZXl3b3JkIG1pYkVwaWxvZ3VlIGxlYWYtbmFtZQorc3luIGtleXdvcmQgbWliRXBpbG9ndWUgREVGQVVMVCBjb250YWluZWQKKworc3luIG1hdGNoICBtaWJDb21tZW50CQkiXCAqLS0uKiQiCitzeW4gbWF0Y2ggIG1pYk51bWJlcgkJIlw8WycwLTlhLWZBLUZoSF0qXD4iCitzeW4gcmVnaW9uIG1pYkRlc2NyaXB0aW9uIHN0YXJ0PSJcIiIgZW5kPSJcIiIgY29udGFpbnM9REVGQVVMVAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9taWJfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbWliX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIG1pYkltcGxpY2l0CSAgICAgU3RhdGVtZW50CisgIEhpTGluayBtaWJDb21tZW50CSAgICAgQ29tbWVudAorICBIaUxpbmsgbWliQ29uc3RhbnRzCSAgICAgU3RyaW5nCisgIEhpTGluayBtaWJOdW1iZXIJICAgICBOdW1iZXIKKyAgSGlMaW5rIG1pYkRlc2NyaXB0aW9uICAgICAgSWRlbnRpZmllcgorICBIaUxpbmsgbWliRXBpbG9ndWUJICAgICBTcGVjaWFsQ2hhcgorICBIaUxpbmsgbWliVmFsdWUJICAgICBTdHJ1Y3R1cmUKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1pYiIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L21tYS52aW0gYi9ydW50aW1lL3N5bnRheC9tbWEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYjhkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9tbWEudmltCkBAIC0wLDAgKzEsNjMgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgTWF0aGVtYXRpY2EKKyIgTWFpbnRhaW5lcjogICBXb2xmZ2FuZyBXYWx0ZW5iZXJnZXIgPHd3YWx0ZW5AYmVuLnR1d2llbi5hYy5hdD4KKyIgTGFzdCBDaGFuZ2U6ICBUaHUgMjYgQXByIDIwMDEgMTM6MjA6MDMgQ0VTVAorCitpZiB2ZXJzaW9uIDwgNjAwCisJc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKwlmaW5pc2gKK2VuZGlmCisKK3N5biBtYXRjaCBtbWFFcnJvciAiXCopIgorc3luIG1hdGNoIG1tYUZpeG1lICJGSVhNRSIKK3N5biByZWdpb24gbW1hQ29tbWVudCBzdGFydD0rKFwqKyBlbmQ9K1wqKSsgc2tpcGVtcHR5IGNvbnRhaW5zPW1tYUZpeG1lCitzeW4gbWF0Y2ggbW1hTWVzc2FnZSAiXGEqOjpcYSoiCitzeW4gcmVnaW9uIG1tYVN0cmluZyBzdGFydD0rJysgICAgZW5kPSsnKworc3luIHJlZ2lvbiBtbWFTdHJpbmcgc3RhcnQ9KyIrICAgIGVuZD0rIisKK3N5biByZWdpb24gbW1hU3RyaW5nIHN0YXJ0PStcXFwiKyBlbmQ9K1wiKworc3luIHJlZ2lvbiBtbWFTdHJpbmcgc3RhcnQ9K1wiKyAgIGVuZD0rXCIrCisKK3N5biBtYXRjaCBtbWFWYXJpYWJsZSAiJFxhKiIKKworc3luIG1hdGNoIG1tYVBhdHRlcm4gIltBLVphLXowMS05YF0qX1x7MSwzfSIKK3N5biBtYXRjaCBtbWFQYXR0ZXJuICJbQS1aYS16MDEtOWBdKl9cezEsM31cKEludGVnZXJcfFJlYWxcfFBhdHRlcm5cfFN5bWJvbFwpIgorc3luIG1hdGNoIG1tYVBhdHRlcm4gIltBLVphLXowMS05YF0qX1x7MSwzfVwoUmF0aW9uYWxcfENvbXBsZXhcfEhlYWRcKSIKK3N5biBtYXRjaCBtbWFQYXR0ZXJuICJbQS1aYS16MDEtOWBdKl9cezEsM30/W0EtWmEtejAxLTlgXSoiCisKKyIgcHJlZml4L2luZml4L3Bvc3RmaXggbm90YXRpb25zCitzeW4gbWF0Y2ggbW1hR2VuZXJpY0Z1bmN0aW9uICJbQS1aYS16MDEtOWBdKlxzKlwoXFtcfEBcKSJoZT1lLTEKK3N5biBtYXRjaCBtbWFHZW5lcmljRnVuY3Rpb24gIltBLVphLXowMS05YF0qXHMqXCgvQFx8QEBcKSJoZT1lLTIKK3N5biBtYXRjaCBtbWFHZW5lcmljRnVuY3Rpb24gIlx+XHMqW0EtWmEtejAxLTlgXSpccypcfiJocz1zKzEsaGU9ZS0xCitzeW4gbWF0Y2ggbW1hR2VuZXJpY0Z1bmN0aW9uICIvL1xzKltBLVphLXowMS05YF0qImhzPXMrMgorc3luIG1hdGNoIG1tYU9wZXJhdG9yICIvOyIKKworc3luIG1hdGNoIG1tYVB1cmVGdW5jdGlvbiAiI1xkKiIKK3N5biBtYXRjaCBtbWFQdXJlRnVuY3Rpb24gIiYiCisKK3N5biBtYXRjaCBtbWFVbmljb2RlICJcXFxbW2EtekEtWjAxLTldKlxdIgorCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbW1hX3N5bl9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX21tYV9zeW5faW5pdHMgPSAxCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisJZWxzZQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKwllbmRpZgorCisJSGlMaW5rIG1tYU9wZXJhdG9yCSAgIE9wZXJhdG9yCisJSGlMaW5rIG1tYVZhcmlhYmxlCSAgIElkZW50aWZpZXIKKwlIaUxpbmsgbW1hU3RyaW5nCSAgIFN0cmluZworCUhpTGluayBtbWFVbmljb2RlCSAgIFN0cmluZworCUhpTGluayBtbWFNZXNzYWdlCSAgIElkZW50aWZpZXIKKwlIaUxpbmsgbW1hUGF0dGVybgkgICBJZGVudGlmaWVyCisJSGlMaW5rIG1tYUdlbmVyaWNGdW5jdGlvbiAgRnVuY3Rpb24KKwlIaUxpbmsgbW1hRXJyb3IJCSAgIEVycm9yCisJSGlMaW5rIG1tYUZpeG1lCQkgICBFcnJvcgorCUhpTGluayBtbWFDb21tZW50CSAgIENvbW1lbnQKKwlIaUxpbmsgbW1hUHVyZUZ1bmN0aW9uCSAgIE9wZXJhdG9yCisKKwlkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibW1hIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbW1peC52aW0gYi9ydW50aW1lL3N5bnRheC9tbWl4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjZhNDQzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbW1peC52aW0KQEAgLTAsMCArMSwxNjIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglNTUlYCisiIE1haW50YWluZXI6CURpcmsgSPxza2VuLCA8aHVlc2tlbkBpbmZvcm1hdGlrLnVuaS10dWViaW5nZW4uZGU+CisiIExhc3QgQ2hhbmdlOglXZWQgQXByIDI0IDAxOjE4OjUyIENFU1QgMjAwMgorIiBGaWxlbmFtZXM6CSoubW1zCisiIFVSTDogaHR0cDovL2hvbWVwYWdlcy51bmktdHVlYmluZ2VuLmRlL3N0dWRlbnQvZGlyay5odWVza2VuL3ZpbS9zeW50YXgvbW1peC52aW0KKworIiBMaW1pdGF0aW9uczoJQ29tbWVudHMgbXVzdCBzdGFydCB3aXRoIGVpdGhlciAlIG9yIC8vCisiCQkocHJlZmVycmFibHkgJSwgS251dGgtU3R5bGUpCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBNTUlYIGRhdGEgdHlwZXMKK3N5biBrZXl3b3JkIG1taXhUeXBlCWJ5dGUgd3lkZSB0ZXRyYSBvY3RhCisKKyIgZGlmZmVyZW50IGxpdGVyYWxzLi4uCitzeW4gbWF0Y2ggZGVjTnVtYmVyCQkiWzAtOV0qIgorc3luIG1hdGNoIG9jdE51bWJlcgkJIjBbMC03XVswLTddXCsiCitzeW4gbWF0Y2ggaGV4TnVtYmVyCQkiI1swLTlhLWZBLUZdXCsiCitzeW4gcmVnaW9uIG1taXhTdHJpbmcJCXN0YXJ0PSsiKyBza2lwPStcXCIrIGVuZD0rIisKK3N5biBtYXRjaCBtbWl4Q2hhcgkJIicuJyIKKworIiAuLi5hbmQgbW9yZSBzcGVjaWFsIE1NSVggc3R1ZmYKK3N5biBtYXRjaCBtbWl4QXQJCSJAIgorc3luIGtleXdvcmQgbW1peFNlZ21lbnRzCURhdGFfU2VnbWVudCBQb29sX1NlZ21lbnQgU3RhY2tfU2VnbWVudAorCitzeW4gbWF0Y2ggbW1peElkZW50aWZpZXIJIlthLXpfXVthLXowLTlfXSoiCisKKyIgbGFiZWxzIChmb3IgYnJhbmNoZXMgZXRjKQorc3luIG1hdGNoIG1taXhMYWJlbAkJIl5bYS16MC05XzpdW2EtejAtOV9dKiIKK3N5biBtYXRjaCBtbWl4TGFiZWwJCSJbMC05XVtIQkZdIgorCisiIHBzZXVkby1vcGVyYXRpb25zCitzeW4ga2V5d29yZCBtbWl4UHNldWRvCQlpcyBsb2MgZ3JlZworCisiIGNvbW1lbnRzCitzeW4gbWF0Y2ggbW1peENvbW1lbnQJCSIlLioiCitzeW4gbWF0Y2ggbW1peENvbW1lbnQJCSIvLy4qIgorc3luIG1hdGNoIG1taXhDb21tZW50CQkiXlwqLioiCisKKworc3luIGtleXdvcmQgbW1peE9wY29kZQl0cmFwIGZjbXAgZnVuIGZlcWwgZmFkZCBmaXggZnN1YiBmaXh1CitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWZtdWwgZmNtcGUgZnVuZSBmZXFsZSBmZGl2IGZzcXJ0IGZyZW0gZmludAorCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWZsb3RpIGZsb3R1aSBzZmxvdGkgc2Zsb3R1aSBpCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCW11bGkgbXVsdWkgZGl2aSBkaXZ1aQorc3luIGtleXdvcmQgbW1peE9wY29kZQlhZGRpIGFkZHVpIHN1Ymkgc3VidWkKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJMmFkZHVpIDRhZGR1aSA4YWRkdWkgMTZhZGR1aQorc3luIGtleXdvcmQgbW1peE9wY29kZQljbXBpIGNtcHVpIG5lZ2kgbmVndWkKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJc2xpIHNsdWkgc3JpIHNydWkKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJYm5iIGJ6YiBicGIgYm9kYgorc3luIGtleXdvcmQgbW1peE9wY29kZQlibm5iIGJuemIgYm5wYiBiZXZiCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXBibmIgcGJ6YiBwYnBiIHBib2RiCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXBibm5iIHBibnpiIHBibnBiIHBiZXZiCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWNzbmkgY3N6aSBjc3BpIGNzb2RpCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWNzbm5pIGNzbnppIGNzbnBpIGNzZXZpCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXpzbmkgenN6aSB6c3BpIHpzb2RpCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXpzbm5pIHpzbnppIHpzbnBpIHpzZXZpCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWxkYmkgbGRidWkgbGR3aSBsZHd1aQorc3luIGtleXdvcmQgbW1peE9wY29kZQlsZHRpIGxkdHVpIGxkb2kgbGRvdWkKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJbGRzZmkgbGRodGkgY3N3YXBpIGxkdW5jaQorc3luIGtleXdvcmQgbW1peE9wY29kZQlsZHZ0c2kgcHJlbGRpIHByZWdvaSBnb2kKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJc3RiaSBzdGJ1aSBzdHdpIHN0d3VpCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXN0dGkgc3R0dWkgc3RvaSBzdG91aQorc3luIGtleXdvcmQgbW1peE9wY29kZQlzdHNmaSBzdGh0aSBzdGNvaSBzdHVuY2kKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJc3luY2RpIHByZXN0aSBzeW5jaWRpIHB1c2hnb2kKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJb3JpIG9ybmkgbm9yaSB4b3JpCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWFuZGkgYW5kbmkgbmFuZGkgbnhvcmkKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJYmRpZmkgd2RpZmkgdGRpZmkgb2RpZmkKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJbXV4aSBzYWRkaSBtb3JpIG14b3JpCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCW11bGkgbXVsdWkgZGl2aSBkaXZ1aQorCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWZsb3QgZmxvdHUgc2Zsb3Qgc2Zsb3R1CitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCW11bCBtdWx1IGRpdiBkaXZ1CitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWFkZCBhZGR1IHN1YiBzdWJ1CitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCTJhZGR1IDRhZGR1IDhhZGR1IDE2YWRkdQorc3luIGtleXdvcmQgbW1peE9wY29kZQljbXAgY21wdSBuZWcgbmVndQorc3luIGtleXdvcmQgbW1peE9wY29kZQlzbCBzbHUgc3Igc3J1CitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWJuIGJ6IGJwIGJvZAorc3luIGtleXdvcmQgbW1peE9wY29kZQlibm4gYm56IGJucCBiZXYKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJcGJuIHBieiBwYnAgcGJvZAorc3luIGtleXdvcmQgbW1peE9wY29kZQlwYm5uIHBibnogcGJucCBwYmV2CitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWNzbiBjc3ogY3NwIGNzb2QKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJY3NubiBjc256IGNzbnAgY3Nldgorc3luIGtleXdvcmQgbW1peE9wY29kZQl6c24genN6IHpzcCB6c29kCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXpzbm4genNueiB6c25wIHpzZXYKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJbGRiIGxkYnUgbGR3IGxkd3UKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJbGR0IGxkdHUgbGRvIGxkb3UKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJbGRzZiBsZGh0IGNzd2FwIGxkdW5jCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWxkdnRzIHByZWxkIHByZWdvIGdvCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXN0YiBzdGJ1IHN0dyBzdHd1CitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXN0dCBzdHR1IHN0byBzdG91CitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXN0c2Ygc3RodCBzdGNvIHN0dW5jCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXN5bmNkIHByZXN0IHN5bmNpZCBwdXNoZ28KK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJb3Igb3JuIG5vciB4b3IKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJYW5kIGFuZG4gbmFuZCBueG9yCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCWJkaWYgd2RpZiB0ZGlmIG9kaWYKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJbXV4IHNhZGQgbW9yIG14b3IKKworc3luIGtleXdvcmQgbW1peE9wY29kZQlzZXRoIHNldG1oIHNldG1sIHNldGwgaW5jaCBpbmNtaCBpbmNtbCBpbmNsCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCW9yaCBvcm1oIG9ybWwgb3JsIGFuZGggYW5kbWggYW5kbWwgYW5kbmwKK3N5biBrZXl3b3JkIG1taXhPcGNvZGUJam1wIHB1c2hqIGdldGEgcHV0CitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXBvcCByZXN1bWUgc2F2ZSB1bnNhdmUgc3luYyBzd3ltIGdldCB0cmlwCitzeW4ga2V5d29yZCBtbWl4T3Bjb2RlCXNldCBsZGEKKworIiBzd2l0Y2ggYmFjayB0byBiZWluZyBjYXNlIHNlbnNpdGl2ZQorc3luIGNhc2UgbWF0Y2gKKworIiBnZW5lcmFsLXB1cnBvc2UgYW5kIHNwZWNpYWwtcHVycG9zZSByZWdpc3RlcnMKK3N5biBtYXRjaCBtbWl4UmVnaXN0ZXIJCSIkWzAtOV0qIgorc3luIG1hdGNoIG1taXhSZWdpc3RlcgkJInJbQS1aXSIKK3N5biBrZXl3b3JkIG1taXhSZWdpc3RlcglyQkIgclRUIHJXVyByWFggcllZIHJaWgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9tbWl4X3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX21taXhfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFRoZSBkZWZhdWx0IG1ldGhvZHMgZm9yIGhpZ2hsaWdodGluZy4gIENhbiBiZSBvdmVycmlkZGVuIGxhdGVyCisgIEhpTGluayBtbWl4QXQJCVR5cGUKKyAgSGlMaW5rIG1taXhQc2V1ZG8JVHlwZQorICBIaUxpbmsgbW1peFJlZ2lzdGVyCVNwZWNpYWwKKyAgSGlMaW5rIG1taXhTZWdtZW50cwlUeXBlCisKKyAgSGlMaW5rIG1taXhMYWJlbAlTcGVjaWFsCisgIEhpTGluayBtbWl4Q29tbWVudAlDb21tZW50CisgIEhpTGluayBtbWl4T3Bjb2RlCUtleXdvcmQKKworICBIaUxpbmsgaGV4TnVtYmVyCU51bWJlcgorICBIaUxpbmsgZGVjTnVtYmVyCU51bWJlcgorICBIaUxpbmsgb2N0TnVtYmVyCU51bWJlcgorCisgIEhpTGluayBtbWl4U3RyaW5nCVN0cmluZworICBIaUxpbmsgbW1peENoYXIJU3RyaW5nCisKKyAgSGlMaW5rIG1taXhUeXBlCVR5cGUKKyAgSGlMaW5rIG1taXhJZGVudGlmaWVyCU5vcm1hbAorICBIaUxpbmsgbW1peFNwZWNpYWxDb21tZW50IENvbW1lbnQKKworICAiIE15IGRlZmF1bHQgY29sb3Igb3ZlcnJpZGVzOgorICAiIGhpIG1taXhTcGVjaWFsQ29tbWVudCBjdGVybWZnPXJlZAorICAiaGkgbW1peExhYmVsIGN0ZXJtZmc9bGlnaHRjeWFuCisgICIgaGkgbW1peFR5cGUgY3Rlcm1iZz1ibGFjayBjdGVybWZnPWJyb3duCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1taXgiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9tb2Rjb25mLnZpbSBiL3J1bnRpbWUvc3ludGF4L21vZGNvbmYudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OWUxMzQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9tb2Rjb25mLnZpbQpAQCAtMCwwICsxLDY2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIExpbnV4IG1vZHV0aWxzIG1vZHVsZXMuY29uZiBGaWxlCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9zeW50YXgvcGNwL21vZGNvbmYvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDUtMjIKKyIgYXJjaC10YWc6CSAgICBiNzk4MWJkYi1kYWEzLTQxZDEtOTRiNS1hM2Q2MGI2Mjc5MTYKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgY29tbWVudHMKK3N5biByZWdpb24gIG1vZGNvbmZDb21tZW50ICBzdGFydD0iIyIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPW1vZGNvbmZUb2RvCisKKyIgdG9kbworc3luIGtleXdvcmQgbW9kY29uZlRvZG8JICAgIEZJWE1FIFRPRE8gWFhYIE5PVEUKKworIiBrZXl3b3JkcyBhbmQgc2ltaWxhcgorc3luIG1hdGNoICAgbW9kY29uZkJlZ2luICAgICJeIiBza2lwd2hpdGUgbmV4dGdyb3VwPW1vZGNvbmZDb21tYW5kLG1vZGNvbmZDb21tZW50CisKK3N5biBtYXRjaCAgIG1vZGNvbmZDb21tYW5kICAiXChhZGRcc1wrXClcPShhYm92ZVx8YmVsb3dcfHByb2JlXHxwcm9iZWFsbFx9Igorc3luIHJlZ2lvbiAgbW9kY29uZkNvbW1hbmQgIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9bW9kY29uZkNvbW1hbmQgc3RhcnQ9IlwoYWRkXHNcK1wpXD1vcHRpb25zIiBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9bW9kY29uZk1vZE9wdAorc3luIGtleXdvcmQgbW9kY29uZkNvbW1hbmQgIGRlZmluZSByZW1vdmUga2VlcCBpbnN0YWxsIGluc21vZF9vcHQgZWxzZSBlbmRpZgorc3luIGtleXdvcmQgbW9kY29uZkNvbW1hbmQgIG5leHRncm91cD1tb2Rjb25mUGF0aCBza2lwd2hpdGUgYWxpYXMgZGVwZmlsZSBnZW5lcmljX3N0cmluZ2ZpbGUgcGNpbWFwZmlsZSBpbmNsdWRlIGlzYXBucG1hcGZpbGUgdXNibWFwZmlsZSBwYXJwb3J0bWFwZmlsZSBpZWVlMTM5NG1hcGZpbGUgcG5wYmlvc21hcGZpbGUgcGVyc2lzdGRpciBwcnVuZQorc3luIG1hdGNoICAgbW9kY29uZkNvbW1hbmQgICJwYXRoXChcW1x3XCtcXVwpXD0iIG5leHRncm91cD1tb2Rjb25mUGF0aCBza2lwd2hpdGUKK3N5biByZWdpb24gIG1vZGNvbmZDb21tYW5kICB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW1vZGNvbmZDb21tYW5kIHN0YXJ0PSJeXHMqXChpZlx8ZWxzZWlmXCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1tb2Rjb25mT3AKK3N5biByZWdpb24gIG1vZGNvbmZDb21tYW5kICB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW1vZGNvbmZDb21tYW5kIHN0YXJ0PSJeXHMqXChwb3N0XHxwcmVcKS1cKGluc3RhbGxcfHJlbW92ZVwpIiBza2lwPSJcXCQiIGVuZD0iJCIKKworCisiIGV4cHJlc3Npb25zIGFuZCBzaW1pbGF5CitzeW4gbWF0Y2ggICBtb2Rjb25mT3AJICAgIGNvbnRhaW5lZCAiXHMtW2Zua11cPiIKK3N5biByZWdpb24gIG1vZGNvbmZQYXRoCSAgICBjb250YWluZWQgc3RhcnQ9IlwoPVxAPVwpXD0vIiBza2lwPSJcXCQiIGVuZD0iXFxcQCFcX3MiCitzeW4gbWF0Y2ggICBtb2Rjb25mTW9kT3B0ICAgY29udGFpbmVkICJcPFx3XCs9XEA9IgorCitpZiBleGlzdHMoIm1vZGNvbmZfbWlubGluZXMiKQorICAgIGxldCBiOm1vZGNvbmZfbWlubGluZXMgPSBtb2Rjb25mX21pbmxpbmVzCitlbHNlCisgICAgbGV0IGI6bW9kY29uZl9taW5saW5lcyA9IDUwCitlbmRpZgorZXhlYyAic3luIHN5bmMgbWlubGluZXM9IiAuIGI6bW9kY29uZl9taW5saW5lcworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9tb2Rjb25mX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX21vZGNvbmZfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbW9kY29uZkNvbW1lbnQgQ29tbWVudAorICBIaUxpbmsgbW9kY29uZlRvZG8JVG9kbworICBIaUxpbmsgbW9kY29uZkNvbW1hbmQgS2V5d29yZAorICBIaUxpbmsgbW9kY29uZlBhdGgJU3RyaW5nCisgIEhpTGluayBtb2Rjb25mT3AJSWRlbnRpZmllcgorICBIaUxpbmsgbW9kY29uZk1vZE9wdCAgSWRlbnRpZmllcgorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibW9kY29uZiIKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbW9kZWwudmltIGIvcnVudGltZS9zeW50YXgvbW9kZWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYjY3ODEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9tb2RlbC52aW0KQEAgLTAsMCArMSw1OSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU1vZGVsCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAxIEFwciAyNQorCisiIHZlcnkgYmFzaWMgdGhpbmdzIG9ubHkgKGJhc2VkIG9uIHRoZSB2Z3JpbmRlZnMgZmlsZSkuCisiIElmIHlvdSB1c2UgdGhpcyBsYW5ndWFnZSwgcGxlYXNlIGltcHJvdmUgaXQsIGFuZCBzZW5kIG1lIHRoZSBwYXRjaGVzIQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgQSBidW5jaCBvZiBrZXl3b3Jkcworc3luIGtleXdvcmQgbW9kZWxLZXl3b3JkIGFicyBhbmQgYXJyYXkgYm9vbGVhbiBieSBjYXNlIGNkbmwgY2hhciBjb3BpZWQgZGlzcG9zZQorc3luIGtleXdvcmQgbW9kZWxLZXl3b3JkIGRpdiBkbyBkeW5hbWljIGVsc2UgZWxzaWYgZW5kIGVudHJ5IGV4dGVybmFsIEZBTFNFIGZhbHNlCitzeW4ga2V5d29yZCBtb2RlbEtleXdvcmQgZmkgZmlsZSBmb3IgZm9ybWFsIGZvcnRyYW4gZ2xvYmFsIGlmIGlmZiBpZnQgaW4gaW50ZWdlciBpbmNsdWRlCitzeW4ga2V5d29yZCBtb2RlbEtleXdvcmQgaW5saW5lIGlzIGxibmQgbWF4IG1pbiBtb2QgbmV3IE5JTCBuaWwgbm9yZXN1bHQgbm90IG5vdGluIG9kIG9mCitzeW4ga2V5d29yZCBtb2RlbEtleXdvcmQgb3IgcHJvY2VkdXJlIHB1YmxpYyByZWFkIHJlYWRsbiByZWFkb25seSByZWNvcmQgcmVjdXJzaXZlIHJlbSByZXAKK3N5biBrZXl3b3JkIG1vZGVsS2V5d29yZCByZXBlYXQgcmVzIHJlc3VsdCByZXR1cm4gc2V0IHNwYWNlIHN0cmluZyBzdWJzY3JpcHQgc3VjaCB0aGVuIFRSVUUKK3N5biBrZXl3b3JkIG1vZGVsS2V5d29yZCB0cnVlIHR5cGUgdWJuZCB1bmlvbiB1bnRpbCB2YXJpZXMgd2hpbGUgd2lkdGgKKworIiBTcGVjaWFsIGtleXdvcmRzCitzeW4ga2V5d29yZCBtb2RlbEJsb2NrIGJlZ2lucHJvYyBlbmRwcm9jCisKKyIgQ29tbWVudHMKK3N5biByZWdpb24gbW9kZWxDb21tZW50IHN0YXJ0PSJcJCIgZW5kPSJcJCIgZW5kPSIkIgorCisiIFN0cmluZ3MKK3N5biByZWdpb24gbW9kZWxTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisKKworIiBDaGFyYWN0ZXIgY29uc3RhbnQgKGlzIHRoaXMgcmlnaHQ/KQorc3luIG1hdGNoIG1vZGVsU3RyaW5nICInLiIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbW9kZWxfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbW9kZWxfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbW9kZWxLZXl3b3JkCVN0YXRlbWVudAorICBIaUxpbmsgbW9kZWxCbG9jawlQcmVQcm9jCisgIEhpTGluayBtb2RlbENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgbW9kZWxTdHJpbmcJU3RyaW5nCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1vZGVsIgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9tb2RzaW0zLnZpbSBiL3J1bnRpbWUvc3ludGF4L21vZHNpbTMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTlhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9tb2RzaW0zLnZpbQpAQCAtMCwwICsxLDEwOSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU1vZHNpbSBJSUksIGJ5IGNvbXB1d2FyZSBjb3Jwb3JhdGlvbiAod3d3LmNvbXB1d2FyZS5jb20pCisiIE1haW50YWluZXI6CVBoaWxpcHAgSm9jaGFtIDxmbGlwQHNib3gudHUtZ3Jhei5hYy5hdD4KKyIgRXh0ZW5zaW9uOgkqLm1vZAorIiBMYXN0IENoYW5nZToJMjAwMSBNYXkgMTAKKyIKKyIgMjAwMSBNYXJjaCAyNDoKKyIgIC0gTW9kc2ltIElJSSBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIGZyb20gY29tcHV3YXJlIGNvcnBvcmF0aW9uCisiICAtIG1hZGUgY29tcGF0aWJsZSB3aXRoIFZpbSA2LjAKKyIKKyIgMTk5OSBBcHIgMjIgOiBDaGFuZ2VkIG1vZHNpbTNMaXRlcmFsIGZyb20gcmVnaW9uIHRvIG1hdGNoCisiCisiIHZlcnkgYmFzaWMgdGhpbmdzIG9ubHkgKGJhc2VkIG9uIHRoZSBtb2R1bGEyIGFuZCBjIGZpbGVzKS4KKworaWYgdmVyc2lvbiA8IDYwMAorICAiIFJlbW92ZSBhbnkgb2xkIHN5bnRheCBzdHVmZiBoYW5naW5nIGFyb3VuZAorICBzeW4gY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKworIiBzeW4gY2FzZSBtYXRjaCAiIGNhc2Ugc2Vuc2l0aXYgbWF0Y2ggaXMgZGVmYXVsdAorCisiIEEgYnVuY2ggb2Yga2V5d29yZHMKK3N5biBrZXl3b3JkIG1vZHNpbTNLZXl3b3JkIEFDVElEIEFMTCBBTkQgQVMgQVNLCitzeW4ga2V5d29yZCBtb2RzaW0zS2V5d29yZCBCWSBDQUxMIENBU0UgQ0xBU1MgQ09OU1QgRElWCitzeW4ga2V5d29yZCBtb2RzaW0zS2V5d29yZCBET1dOVE8gRFVSQVRJT04gRUxTRSBFTFNJRiBFWElUIEZBTFNFIEZJWEVEIEZPUgorc3luIGtleXdvcmQgbW9kc2ltM0tleXdvcmQgRk9SRUFDSCBGT1JXQVJEIElGIElOIElOSEVSSVRFRCBJTk9VVAorc3luIGtleXdvcmQgbW9kc2ltM0tleXdvcmQgSU5URVJSVVBUIExPT1AKK3N5biBrZXl3b3JkIG1vZHNpbTNLZXl3b3JkIE1PRCBNT05JVE9SIE5FV1ZBTFVFCitzeW4ga2V5d29yZCBtb2RzaW0zS2V5d29yZCBOT05NT0RTSU0gTk9UIE9CSkVDVCBPRiBPTiBPUiBPUklHSU5BTCBPVEhFUldJU0UgT1VUCitzeW4ga2V5d29yZCBtb2RzaW0zS2V5d29yZCBPVkVSUklERSBQUklWQVRFIFBST1RPIFJFUEVBVAorc3luIGtleXdvcmQgbW9kc2ltM0tleXdvcmQgUkVUVVJOIFJFVkVSU0VEIFNFTEYgU1RSRVJSIFRFTEwKK3N5biBrZXl3b3JkIG1vZHNpbTNLZXl3b3JkIFRFUk1JTkFURSBUSElTTUVUSE9EIFRPIFRSVUUgVFlQRSBVTlRJTCBWQUxVRSBWQVIKK3N5biBrZXl3b3JkIG1vZHNpbTNLZXl3b3JkIFdBSVQgV0FJVEZPUiBXSEVOIFdISUxFIFdJVEgKKworIiBCdWlsdGluIGZ1bmN0aW9ucyBhbmQgcHJvY2VkdXJlcworc3luIGtleXdvcmQgbW9kc2ltM0J1aWx0aW4gQUJTIEFDVElWQVRFIEFERE1PTklUT1IgQ0FQIENIQVJUT1NUUiBDSFIgQ0xPTkUKK3N5biBrZXl3b3JkIG1vZHNpbTNCdWlsdGluIERFQUNUSVZBVEUgREVDIERJU1BPU0UgRkxPQVQgR0VUTU9OSVRPUiBISUdIIElOQworc3luIGtleXdvcmQgbW9kc2ltM0J1aWx0aW4gSU5QVVQgSU5TRVJUIElOVFRPU1RSIElTQU5DRVNUT1IgTE9XIExPV0VSIE1BWCBNQVhPRgorc3luIGtleXdvcmQgbW9kc2ltM0J1aWx0aW4gTUlOIE1JTk9GIE5FVyBPQkpUWVBFSUQgT0JKVFlQRU5BTUUgT0JKVkFSSUQgT0RECitzeW4ga2V5d29yZCBtb2RzaW0zQnVpbHRpbiBPTkVSUk9SIE9ORVhJVCBPUkQgT1VUUFVUIFBPU0lUSU9OIFBSSU5UIFJFQUxUT1NUUgorc3luIGtleXdvcmQgbW9kc2ltM0J1aWx0aW4gUkVQTEFDRSBSRU1PVkVNT05JVE9SIFJPVU5EIFNDSEFSIFNJWkVPRiBTUFJJTlQKK3N5biBrZXl3b3JkIG1vZHNpbTNCdWlsdGluIFNUUkxFTiBTVFJUT0NIQVIgU1RSVE9JTlQgU1RSVE9SRUFMIFNVQlNUUiBUUlVOQworc3luIGtleXdvcmQgbW9kc2ltM0J1aWx0aW4gVVBEQVRFVkFMVUUgVVBQRVIgVkFMCisKK3N5biBrZXl3b3JkIG1vZHNpbTNCdWlsdGluTm9QYXJlbiBIQUxUIFRSQUNFCisKKyIgU3BlY2lhbCBrZXl3b3Jkcworc3luIGtleXdvcmQgbW9kc2ltM0Jsb2NrIFBST0NFRFVSRSBNRVRIT0QgTU9EVUxFIE1BSU4gREVGSU5JVElPTiBJTVBMRU1FTlRBVElPTgorc3luIGtleXdvcmQgbW9kc2ltM0Jsb2NrIEJFR0lOIEVORAorCitzeW4ga2V5d29yZCBtb2RzaW0zSW5jbHVkZSBJTVBPUlQgRlJPTQorCitzeW4ga2V5d29yZCBtb2RzaW0zVHlwZSBBTllBUlJBWSBBTllPQkogQU5ZUkVDIEFSUkFZIEJPT0xFQU4gQ0hBUiBJTlRFR0VSCitzeW4ga2V5d29yZCBtb2RzaW0zVHlwZSBMTU9OSVRPUkVEIExSTU9OSVRPUkVEIE5JTEFSUkFZIE5JTE9CSiBOSUxSRUMgUkVBTAorc3luIGtleXdvcmQgbW9kc2ltM1R5cGUgUkVDT1JEIFJNT05JVE9SIFJNT05JVE9SRUQgU1RSSU5HCisKKyIgY2F0Y2ggZXJycm9zIGNhdXNlIGJ5IHdyb25nIHBhcmVudGhlc2lzCisiIHNsaWdodCBwcm9ibGVtIHdpdGggIiggKikiIG9yICIoKiApIi4gSGludHM/CitzeW4gcmVnaW9uIG1vZHNpbTNQYXJlbgl0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsbW9kc2ltM1BhcmVuRXJyb3IKK3N5biBtYXRjaCBtb2RzaW0zUGFyZW5FcnJvciAiKSIKKworIiBDb21tZW50cworc3luIHJlZ2lvbiBtb2RzaW0zQ29tbWVudDEgc3RhcnQ9InsiIGVuZD0ifSIgY29udGFpbnM9bW9kc2ltM0NvbW1lbnQxLG1vZHNpbTNDb21tZW50Mgorc3luIHJlZ2lvbiBtb2RzaW0zQ29tbWVudDIgc3RhcnQ9IihcKiIgZW5kPSJcKikiIGNvbnRhaW5zPW1vZHNpbTNDb21tZW50MSxtb2RzaW0zQ29tbWVudDIKKyIgaGlnaGxpZ2h0aW5nIGlzIHdyb25nIGZvciBjb25zdHJ1Y3RzIGxpa2UgInsgICgqICB9ICAqKSIsCisiIHdoaWNoIGFyZSBhbGxvd2VkIGluIE1vZHNpbSBJSUksIGJ1dAorIiBJIHRoaW5rIHNvbWV0aGluZyBsaWtlIHRoYXQgc2hvdWxkbid0IGJlIHVzZWQgYW55d2F5LgorCisiIFN0cmluZ3MKK3N5biByZWdpb24gbW9kc2ltM1N0cmluZyBzdGFydD0rIisgZW5kPSsiKworCisiIExpdGVyYWxzCisic3luIHJlZ2lvbiBtb2RzaW0zTGl0ZXJhbCBzdGFydD0rJysgZW5kPSsnKworc3luIG1hdGNoIG1vZHNpbTNMaXRlcmFsICInW14nXSdcfCcnJyciCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX21vZHNpbTNfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbW9kc2ltM19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgICIgVGhlIGRlZmF1bHQgbWV0aG9kcyBmb3IgaGlnaGxpZ2h0aW5nLiAgQ2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIKKyAgSGlMaW5rIG1vZHNpbTNLZXl3b3JkCVN0YXRlbWVudAorICBIaUxpbmsgbW9kc2ltM0Jsb2NrCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1vZHNpbTNDb21tZW50MQlDb21tZW50CisgIEhpTGluayBtb2RzaW0zQ29tbWVudDIJQ29tbWVudAorICBIaUxpbmsgbW9kc2ltM1N0cmluZwkJU3RyaW5nCisgIEhpTGluayBtb2RzaW0zTGl0ZXJhbAlDaGFyYWN0ZXIKKyAgSGlMaW5rIG1vZHNpbTNJbmNsdWRlCVN0YXRlbWVudAorICBIaUxpbmsgbW9kc2ltM1R5cGUJCVR5cGUKKyAgSGlMaW5rIG1vZHNpbTNQYXJlbkVycm9yCUVycm9yCisgIEhpTGluayBtb2RzaW0zQnVpbHRpbglGdW5jdGlvbgorICBIaUxpbmsgbW9kc2ltM0J1aWx0aW5Ob1BhcmVuCUZ1bmN0aW9uCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1vZHNpbTMiCisKKyIgdmltOiB0cz04IHN3PTIKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbW9kdWxhMi52aW0gYi9ydW50aW1lL3N5bnRheC9tb2R1bGEyLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDE4OTAwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbW9kdWxhMi52aW0KQEAgLTAsMCArMSw4NiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU1vZHVsYSAyCisiIE1haW50YWluZXI6CXBmQGFydGNvbTAubm9ydGguZGUgKFBldGVyIEZ1bmspCisiICAgYmFzZWQgb24gb3JpZ2luYWwgd29yayBvZiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMSBNYXkgMDkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIERvbid0IGlnbm9yZSBjYXNlIChNb2R1bGEtMiBpcyBjYXNlIHNpZ25pZmljYW50KS4gVGhpcyBpcyB0aGUgZGVmYXVsdCBpbiB2aW0KKworIiBFc3BlY2lhbGx5IGVtcGhhc2l6ZSBoZWFkZXJzIG9mIHByb2NlZHVyZXMgYW5kIG1vZHVsZXM6CitzeW4gcmVnaW9uIG1vZHVsYTJIZWFkZXIgbWF0Y2hncm91cD1tb2R1bGEySGVhZGVyIHN0YXJ0PSJQUk9DRURVUkUgIiBlbmQ9IigiIGNvbnRhaW5zPW1vZHVsYTJJZGVudCBvbmVsaW5lCitzeW4gcmVnaW9uIG1vZHVsYTJIZWFkZXIgbWF0Y2hncm91cD1tb2R1bGEySGVhZGVyIHN0YXJ0PSJNT0RVTEUgIiBlbmQ9IjsiIGNvbnRhaW5zPW1vZHVsYTJJZGVudCBvbmVsaW5lCitzeW4gcmVnaW9uIG1vZHVsYTJIZWFkZXIgbWF0Y2hncm91cD1tb2R1bGEySGVhZGVyIHN0YXJ0PSJCRUdJTiAoXCoiIGVuZD0iXCopIiBjb250YWlucz1tb2R1bGEySWRlbnQgb25lbGluZQorc3luIHJlZ2lvbiBtb2R1bGEySGVhZGVyIG1hdGNoZ3JvdXA9bW9kdWxhMkhlYWRlciBzdGFydD0iRU5EICIgZW5kPSI7IiBjb250YWlucz1tb2R1bGEySWRlbnQgb25lbGluZQorc3luIHJlZ2lvbiBtb2R1bGEyS2V5d29yZCBzdGFydD0iRU5EIiBlbmQ9IjsiIGNvbnRhaW5zPUFMTEJVVCxtb2R1bGEySWRlbnQgb25lbGluZQorCisiIFNvbWUgdmVyeSBpbXBvcnRhbnQga2V5d29yZHMgd2hpY2ggc2hvdWxkIGJlIGVtcGhhc2l6ZWQgbW9yZSB0aGFuIG90aGVyczoKK3N5biBrZXl3b3JkIG1vZHVsYTJBdHRLZXl3b3JkIENPTlNUIEVYSVQgSEFMVCBSRVRVUk4gVFlQRSBWQVIKKyIgQWxsIG90aGVyIGtleXdvcmRzIGluIGFscGhhYmV0aWNhbCBvcmRlcjoKK3N5biBrZXl3b3JkIG1vZHVsYTJLZXl3b3JkIEFORCBBUlJBWSBCWSBDQVNFIERFRklOSVRJT04gRElWIERPIEVMU0UKK3N5biBrZXl3b3JkIG1vZHVsYTJLZXl3b3JkIEVMU0lGIEVYUE9SVCBGT1IgRlJPTSBJRiBJTVBMRU1FTlRBVElPTiBJTVBPUlQKK3N5biBrZXl3b3JkIG1vZHVsYTJLZXl3b3JkIElOIExPT1AgTU9EIE5PVCBPRiBPUiBQT0lOVEVSIFFVQUxJRklFRCBSRUNPUkQKK3N5biBrZXl3b3JkIG1vZHVsYTJLZXl3b3JkIFNFVCBUSEVOIFRPIFVOVElMIFdISUxFIFdJVEgKKworc3luIGtleXdvcmQgbW9kdWxhMlR5cGUgQUREUkVTUyBCSVRTRVQgQk9PTEVBTiBDQVJESU5BTCBDSEFSIElOVEVHRVIgUkVBTCBXT1JECitzeW4ga2V5d29yZCBtb2R1bGEyU3RkRnVuYyBBQlMgQ0FQIENIUiBERUMgRVhDTCBJTkMgSU5DTCBPUkQgU0laRSBUU0laRSBWQUwKK3N5biBrZXl3b3JkIG1vZHVsYTJTdGRDb25zdCBGQUxTRSBOSUwgVFJVRQorIiBUaGUgZm9sbG93aW5nIG1heSBiZSBkaXNjdXNzZWQsIHNpbmNlIE5FVyBhbmQgRElTUE9TRSBhcmUgc29tZSBraW5kIG9mCisiIHNwZWNpYWwgYnVpbHRpbiBtYWNybyBmdW5jdGlvbnM6CitzeW4ga2V5d29yZCBtb2R1bGEyU3RkRnVuYyBORVcgRElTUE9TRQorIiBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBhZGRlZCBsYXRlciBvbiBhbmQgbWF5IGJlIG1pc3NpbmcgZnJvbSBvbGRlcgorIiBNb2R1bGEtMiBDb21waWxlcnMgKHRoZXkgYXJlIGF0IGxlYXN0IG1pc3NpbmcgZnJvbSB0aGUgb3JpZ2luYWwgcmVwb3J0CisiIGJ5IE4uV2lydGggZnJvbSBNYXJjaCAxOTgwIDstKSAgSGlnaGxpZ2h0aW5nIHNob3VsZCBhcHBseSBuZXZlcnRoZWxlc3M6CitzeW4ga2V5d29yZCBtb2R1bGEyVHlwZSBCWVRFIExPTkdDQVJEIExPTkdJTlQgTE9OR1JFQUwgUFJPQyBTSE9SVENBUkQgU0hPUlRJTlQKKyIgc2FtZSBub3RlIGFwcGxpZXMgdG8gbWluIGFuZCBtYXgsIHdoaWNoIHdlcmUgYWxzbyBhZGRlZCBsYXRlciB0byBtMjoKK3N5biBrZXl3b3JkIG1vZHVsYTJTdGRGdW5jIE1BWCBNSU4KKyIgVGhlIHVuZGVyc2NvcmUgd2FzIG9yaWdpbmFsbHkgZGlzYWxsb3dlZCBpbiBtMiBpZHMsIGl0IHdhcyBhbHNvIGFkZGVkIGxhdGVyOgorc3luIG1hdGNoICAgbW9kdWxhMklkZW50ICIgW0EtWixhLXpdW0EtWixhLXosMC05LF9dKiIgY29udGFpbmVkCisKKyIgQ29tbWVudHMgbWF5IGJlIG5lc3RlZCBpbiBNb2R1bGEtMjoKK3N5biByZWdpb24gbW9kdWxhMkNvbW1lbnQgc3RhcnQ9IihcKiIgZW5kPSJcKikiIGNvbnRhaW5zPW1vZHVsYTJDb21tZW50LG1vZHVsYTJUb2RvCitzeW4ga2V5d29yZCBtb2R1bGEyVG9kbwljb250YWluZWQgVE9ETyBGSVhNRSBYWFgKKworIiBTdHJpbmdzCitzeW4gcmVnaW9uIG1vZHVsYTJTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisKK3N5biByZWdpb24gbW9kdWxhMlN0cmluZyBzdGFydD0iJyIgZW5kPSInIgorc3luIHJlZ2lvbiBtb2R1bGEyU2V0IHN0YXJ0PSJ7IiBlbmQ9In0iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX21vZHVsYTJfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbW9kdWxhMl9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBtb2R1bGEySWRlbnQJCUlkZW50aWZpZXIKKyAgSGlMaW5rIG1vZHVsYTJTdGRDb25zdAlCb29sZWFuCisgIEhpTGluayBtb2R1bGEyVHlwZQkJSWRlbnRpZmllcgorICBIaUxpbmsgbW9kdWxhMlN0ZEZ1bmMJCUlkZW50aWZpZXIKKyAgSGlMaW5rIG1vZHVsYTJIZWFkZXIJCVR5cGUKKyAgSGlMaW5rIG1vZHVsYTJLZXl3b3JkCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1vZHVsYTJBdHRLZXl3b3JkCVByZVByb2MKKyAgSGlMaW5rIG1vZHVsYTJDb21tZW50CQlDb21tZW50CisgICIgVGhlIGZvbGxvd2luZyBpcyBqdXN0IGEgbWF0dGVyIG9mIHRhc3RlICh5b3Ugd2FudCB0byB0cnkgdGhpcyBpbnN0ZWFkKToKKyAgIiBoaSBtb2R1bGEyQ29tbWVudCB0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrQmx1ZSBndWlmZz1CbHVlIGd1aT1ib2xkCisgIEhpTGluayBtb2R1bGEyVG9kbwkJVG9kbworICBIaUxpbmsgbW9kdWxhMlN0cmluZwkJU3RyaW5nCisgIEhpTGluayBtb2R1bGEyU2V0CQlTdHJpbmcKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibW9kdWxhMiIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L21vZHVsYTMudmltIGIvcnVudGltZS9zeW50YXgvbW9kdWxhMy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmNzJhZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21vZHVsYTMudmltCkBAIC0wLDAgKzEsNzIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglNb2R1bGEtMworIiBNYWludGFpbmVyOglUaW1vIFBlZGVyc2VuIDxkYXQ5N3RwZUBsdWRhdC5sdGguc2U+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAxMAorCisiIEJhc2ljIHRoaW5ncyBvbmx5Li4uCisiIEJhc2VkIG9uIHRoZSBtb2R1bGEgMiBzeW50YXggZmlsZQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgTW9kdWxhLTMgaXMgY2FzZS1zZW5zaXRpdmUKKyIgc3luIGNhc2UgaWdub3JlCisKKyIgTW9kdWxhLTMga2V5d29yZHMKK3N5biBrZXl3b3JkIG1vZHVsYTNLZXl3b3JkIEFCUyBBRERSRVMgQURSIEFEUlNJWkUgQU5EIEFOWQorc3luIGtleXdvcmQgbW9kdWxhM0tleXdvcmQgQVJSQVkgQVMgQklUUyBCSVRTSVpFIEJPT0xFQU4gQlJBTkRFRCBCWSBCWVRFU0laRQorc3luIGtleXdvcmQgbW9kdWxhM0tleXdvcmQgQ0FSRElOQUwgQ0FTRSBDRUlMSU5HIENIQVIgQ09OU1QgREVDIERFRklOSVRJT04KK3N5biBrZXl3b3JkIG1vZHVsYTNLZXl3b3JkIERJU1BPU0UgRElWCitzeW4ga2V5d29yZCBtb2R1bGEzS2V5d29yZCBFVkFMIEVYSVQgRVhDRVBUIEVYQ0VQVElPTgorc3luIGtleXdvcmQgbW9kdWxhM0tleXdvcmQgRVhJVCBFWFBPUlRTIEVYVEVOREVEIEZBTFNFIEZJTkFMTFkgRklSU1QgRkxPQVQKK3N5biBrZXl3b3JkIG1vZHVsYTNLZXl3b3JkIEZMT09SIEZST00gR0VORVJJQyBJTVBPUlQKK3N5biBrZXl3b3JkIG1vZHVsYTNLZXl3b3JkIElOIElOQyBJTlRFR0VSIElTVFlQRSBMQVNUIExPQ0sKK3N5biBrZXl3b3JkIG1vZHVsYTNLZXl3b3JkIExPTkdSRUFMIExPT1BIT0xFIE1BWCBNRVRIT0QgTUlOIE1PRCBNVVRFWAorc3luIGtleXdvcmQgbW9kdWxhM0tleXdvcmQgTkFSUk9XIE5FVyBOSUwgTk9UIE5VTEwgTlVNQkVSIE9GIE9SIE9SRCBSQUlTRQorc3luIGtleXdvcmQgbW9kdWxhM0tleXdvcmQgUkFJU0VTIFJFQURPTkxZIFJFQUwgUkVDT1JEIFJFRiBSRUZBTlkKK3N5biBrZXl3b3JkIG1vZHVsYTNLZXl3b3JkIFJFVFVSTiBST09UCitzeW4ga2V5d29yZCBtb2R1bGEzS2V5d29yZCBST1VORCBTRVQgU1VCQVJSQVkgVEVYVCBUUlVFIFRSVU5DIFRSWSBUWVBFCitzeW4ga2V5d29yZCBtb2R1bGEzS2V5d29yZCBUWVBFQ0FTRSBUWVBFQ09ERSBVTlNBRkUgVU5UUkFDRUQgVkFMIFZBTFVFIFZBUiBXSVRICisKKyIgU3BlY2lhbCBrZXl3b3JkcywgYmxvY2sgZGVsaW1pdGVycyBldGMKK3N5biBrZXl3b3JkIG1vZHVsYTNCbG9jayBQUk9DRURVUkUgRlVOQ1RJT04gTU9EVUxFIElOVEVSRkFDRSBSRVBFQVQgVEhFTgorc3luIGtleXdvcmQgbW9kdWxhM0Jsb2NrIEJFR0lOIEVORCBPQkpFQ1QgTUVUSE9EUyBPVkVSUklERVMgUkVDT1JEIFJFVkVBTAorc3luIGtleXdvcmQgbW9kdWxhM0Jsb2NrIFdISUxFIFVOVElMIERPIFRPIElGIEZPUiBFTFNJRiBFTFNFIExPT1AKKworIiBDb21tZW50cworc3luIHJlZ2lvbiBtb2R1bGEzQ29tbWVudCBzdGFydD0iKFwqIiBlbmQ9IlwqKSIKKworIiBTdHJpbmdzCitzeW4gcmVnaW9uIG1vZHVsYTNTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisKK3N5biByZWdpb24gbW9kdWxhM1N0cmluZyBzdGFydD0rJysgZW5kPSsnKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9tb2R1bGEzX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX21vZHVsYTNfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFRoZSBkZWZhdWx0IG1ldGhvZHMgZm9yIGhpZ2hsaWdodGluZy4gIENhbiBiZSBvdmVycmlkZGVuIGxhdGVyCisgIEhpTGluayBtb2R1bGEzS2V5d29yZAlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1vZHVsYTNCbG9jawkJUHJlUHJvYworICBIaUxpbmsgbW9kdWxhM0NvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgbW9kdWxhM1N0cmluZwkJU3RyaW5nCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1vZHVsYTMiCisKKyJJIHByZWZlciB0byB1c2UgdGhpcy4uLgorInNldCBhaQorInZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbW9uay52aW0gYi9ydW50aW1lL3N5bnRheC9tb25rLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjBiNzljCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbW9uay52aW0KQEAgLTAsMCArMSwyMjggQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiBNb25rIChTZWUtQmV5b25kIFRlY2hub2xvZ2llcykKKyIgTWFpbnRhaW5lcjogTWlrZSBMaXRoZXJsYW5kIDxsaXRoZXJtQGNjZi5vcmc+CisiIExhc3QgQ2hhbmdlOiBNYXJjaCA2LCAyMDAyCisKKyIgVGhpcyBzeW50YXggZmlsZSBpcyBnb29kIGVub3VnaCBmb3IgbXkgbmVlZHMsIGJ1dCBvdGhlcnMKKyIgbWF5IGRlc2lyZSBtb3JlIGZlYXR1cmVzLiAgU3VnZ2VzdGlvbnMgYW5kIGJ1ZyByZXBvcnRzCisiIGFyZSBzb2xpY2l0ZWQgYnkgdGhlIGF1dGhvciAoYWJvdmUpLgorCisiIE9yaWdpbmFsbHkgYmFzZWQgb24gdGhlIFNjaGVtZSBzeW50YXggZmlsZSBieToKKworIiBNYWludGFpbmVyOglEaXJrIHZhbiBEZXVuIDxkdmFuZGV1bkBwb2JveGVzLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CUFwcmlsIDMwLCAxOTk4CisKKyIgSW4gZmFjdCBpdCdzIGFsbW9zdCBpZGVudGljYWwuIDopCisKKyIgVGhlIG9yaWdpbmFsIGF1dGhvcidzIG5vdGVzOgorIiBUaGlzIHNjcmlwdCBpbmNvcnJlY3RseSByZWNvZ25pemVzIHNvbWUganVuayBpbnB1dCBhcyBudW1lcmFsczoKKyIgcGFyc2luZyB0aGUgY29tcGxldGUgc3lzdGVtIG9mIFNjaGVtZSBudW1lcmFscyB1c2luZyB0aGUgcGF0dGVybgorIiBsYW5ndWFnZSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlOiBJIGRpZCBhIGxheCBhcHByb3hpbWF0aW9uLgorCisiIEluaXRpYWxpemluZzoKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBGYXNjaXN0IGhpZ2hsaWdodGluZzogZXZlcnl0aGluZyB0aGF0IGRvZXNuJ3QgZml0IHRoZSBydWxlcyBpcyBhbiBlcnJvci4uLgorCitzeW4gbWF0Y2gJbW9ua0Vycm9yCW9uZWxpbmUgICAgIVteIFx0KCkiO10qIQorc3luIG1hdGNoCW1vbmtFcnJvcglvbmVsaW5lICAgICIpIgorCisiIFF1b3RlZCBhbmQgYmFja3F1b3RlZCBzdHVmZgorCitzeW4gcmVnaW9uIG1vbmtRdW90ZWQgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IlsnYF0iIGVuZD0hWyBcdCgpIjtdIW1lPWUtMSBjb250YWlucz1BTExCVVQsbW9ua1N0cnVjLG1vbmtTeW50YXgsbW9ua0Z1bmMKKworc3luIHJlZ2lvbiBtb25rUXVvdGVkIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJbJ2BdKCIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSIpIiBjb250YWlucz1BTExCVVQsbW9ua1N0cnVjLG1vbmtTeW50YXgsbW9ua0Z1bmMKK3N5biByZWdpb24gbW9ua1F1b3RlZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iWydgXSMoIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxtb25rU3RydWMsbW9ua1N5bnRheCxtb25rRnVuYworCitzeW4gcmVnaW9uIG1vbmtTdHJ1Y1Jlc3RyaWN0ZWQgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IigiIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iKSIgY29udGFpbnM9QUxMQlVULG1vbmtTdHJ1Yyxtb25rU3ludGF4LG1vbmtGdW5jCitzeW4gcmVnaW9uIG1vbmtTdHJ1Y1Jlc3RyaWN0ZWQgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IiMoIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxtb25rU3RydWMsbW9ua1N5bnRheCxtb25rRnVuYworCitzeW4gcmVnaW9uIG1vbmtVbnF1b3RlIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIsIiBlbmQ9IVsgXHQoKSI7XSFtZT1lLTEgY29udGFpbnM9QUxMQlVULG1vbmtTdHJ1Yyxtb25rU3ludGF4LG1vbmtGdW5jCitzeW4gcmVnaW9uIG1vbmtVbnF1b3RlIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIsQCIgZW5kPSFbIFx0KCkiO10hbWU9ZS0xIGNvbnRhaW5zPUFMTEJVVCxtb25rU3RydWMsbW9ua1N5bnRheCxtb25rRnVuYworCitzeW4gcmVnaW9uIG1vbmtVbnF1b3RlIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIsKCIgZW5kPSIpIiBjb250YWlucz1BTExCVVQsbW9ua1N0cnVjLG1vbmtTeW50YXgsbW9ua0Z1bmMKK3N5biByZWdpb24gbW9ua1VucXVvdGUgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IixAKCIgZW5kPSIpIiBjb250YWlucz1BTExCVVQsbW9ua1N0cnVjLG1vbmtTeW50YXgsbW9ua0Z1bmMKKworc3luIHJlZ2lvbiBtb25rVW5xdW90ZSBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iLCMoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxtb25rU3RydWMsbW9ua1N5bnRheCxtb25rRnVuYworc3luIHJlZ2lvbiBtb25rVW5xdW90ZSBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iLEAjKCIgZW5kPSIpIiBjb250YWlucz1BTExCVVQsbW9ua1N0cnVjLG1vbmtTeW50YXgsbW9ua0Z1bmMKKworIiBSNVJTIFNjaGVtZSBGdW5jdGlvbnMgYW5kIFN5bnRheDoKKworaWYgdmVyc2lvbiA8IDYwMAorICBzZXQgaXNrZXl3b3JkPTMzLDM1LTM5LDQyLTU4LDYwLTkwLDk0LDk1LDk3LTEyMiwxMjYsXworZWxzZQorICBzZXRsb2NhbCBpc2tleXdvcmQ9MzMsMzUtMzksNDItNTgsNjAtOTAsOTQsOTUsOTctMTIyLDEyNixfCitlbmRpZgorCitzeW4ga2V5d29yZCBtb25rU3ludGF4IGxhbWJkYSBhbmQgb3IgaWYgY29uZCBjYXNlIGRlZmluZSBsZXQgbGV0KiBsZXRyZWMKK3N5biBrZXl3b3JkIG1vbmtTeW50YXggYmVnaW4gZG8gZGVsYXkgc2V0ISBlbHNlID0+CitzeW4ga2V5d29yZCBtb25rU3ludGF4IHF1b3RlIHF1YXNpcXVvdGUgdW5xdW90ZSB1bnF1b3RlLXNwbGljaW5nCitzeW4ga2V5d29yZCBtb25rU3ludGF4IGRlZmluZS1zeW50YXggbGV0LXN5bnRheCBsZXRyZWMtc3ludGF4IHN5bnRheC1ydWxlcworCitzeW4ga2V5d29yZCBtb25rRnVuYyBub3QgYm9vbGVhbj8gZXE/IGVxdj8gZXF1YWw/IHBhaXI/IGNvbnMgY2FyIGNkciBzZXQtY2FyIQorc3luIGtleXdvcmQgbW9ua0Z1bmMgc2V0LWNkciEgY2FhciBjYWRyIGNkYXIgY2RkciBjYWFhciBjYWFkciBjYWRhciBjYWRkcgorc3luIGtleXdvcmQgbW9ua0Z1bmMgY2RhYXIgY2RhZHIgY2RkYXIgY2RkZHIgY2FhYWFyIGNhYWFkciBjYWFkYXIgY2FhZGRyCitzeW4ga2V5d29yZCBtb25rRnVuYyBjYWRhYXIgY2FkYWRyIGNhZGRhciBjYWRkZHIgY2RhYWFyIGNkYWFkciBjZGFkYXIgY2RhZGRyCitzeW4ga2V5d29yZCBtb25rRnVuYyBjZGRhYXIgY2RkYWRyIGNkZGRhciBjZGRkZHIgbnVsbD8gbGlzdD8gbGlzdCBsZW5ndGgKK3N5biBrZXl3b3JkIG1vbmtGdW5jIGFwcGVuZCByZXZlcnNlIGxpc3QtcmVmIG1lbXEgbWVtdiBtZW1iZXIgYXNzcSBhc3N2IGFzc29jCitzeW4ga2V5d29yZCBtb25rRnVuYyBzeW1ib2w/IHN5bWJvbC0+c3RyaW5nIHN0cmluZy0+c3ltYm9sIG51bWJlcj8gY29tcGxleD8KK3N5biBrZXl3b3JkIG1vbmtGdW5jIHJlYWw/IHJhdGlvbmFsPyBpbnRlZ2VyPyBleGFjdD8gaW5leGFjdD8gPSA8ID4gPD0gPj0KK3N5biBrZXl3b3JkIG1vbmtGdW5jIHplcm8/IHBvc2l0aXZlPyBuZWdhdGl2ZT8gb2RkPyBldmVuPyBtYXggbWluICsgKiAtIC8gYWJzCitzeW4ga2V5d29yZCBtb25rRnVuYyBxdW90aWVudCByZW1haW5kZXIgbW9kdWxvIGdjZCBsY20gbnVtZXJhdG9yIGRlbm9taW5hdG9yCitzeW4ga2V5d29yZCBtb25rRnVuYyBmbG9vciBjZWlsaW5nIHRydW5jYXRlIHJvdW5kIHJhdGlvbmFsaXplIGV4cCBsb2cgc2luIGNvcworc3luIGtleXdvcmQgbW9ua0Z1bmMgdGFuIGFzaW4gYWNvcyBhdGFuIHNxcnQgZXhwdCBtYWtlLXJlY3Rhbmd1bGFyIG1ha2UtcG9sYXIKK3N5biBrZXl3b3JkIG1vbmtGdW5jIHJlYWwtcGFydCBpbWFnLXBhcnQgbWFnbml0dWRlIGFuZ2xlIGV4YWN0LT5pbmV4YWN0CitzeW4ga2V5d29yZCBtb25rRnVuYyBpbmV4YWN0LT5leGFjdCBudW1iZXItPnN0cmluZyBzdHJpbmctPm51bWJlciBjaGFyPT8KK3N5biBrZXl3b3JkIG1vbmtGdW5jIGNoYXItY2k9PyBjaGFyPD8gY2hhci1jaTw/IGNoYXI+PyBjaGFyLWNpPj8gY2hhcjw9Pworc3luIGtleXdvcmQgbW9ua0Z1bmMgY2hhci1jaTw9PyBjaGFyPj0/IGNoYXItY2k+PT8gY2hhci1hbHBoYWJldGljPyBjaGFyPworc3luIGtleXdvcmQgbW9ua0Z1bmMgY2hhci1udW1lcmljPyBjaGFyLXdoaXRlc3BhY2U/IGNoYXItdXBwZXItY2FzZT8KK3N5biBrZXl3b3JkIG1vbmtGdW5jIGNoYXItbG93ZXItY2FzZT8KK3N5biBrZXl3b3JkIG1vbmtGdW5jIGNoYXItPmludGVnZXIgaW50ZWdlci0+Y2hhciBjaGFyLXVwY2FzZSBjaGFyLWRvd25jYXNlCitzeW4ga2V5d29yZCBtb25rRnVuYyBzdHJpbmc/IG1ha2Utc3RyaW5nIHN0cmluZyBzdHJpbmctbGVuZ3RoIHN0cmluZy1yZWYKK3N5biBrZXl3b3JkIG1vbmtGdW5jIHN0cmluZy1zZXQhIHN0cmluZz0/IHN0cmluZy1jaT0/IHN0cmluZzw/IHN0cmluZy1jaTw/CitzeW4ga2V5d29yZCBtb25rRnVuYyBzdHJpbmc+PyBzdHJpbmctY2k+PyBzdHJpbmc8PT8gc3RyaW5nLWNpPD0/IHN0cmluZz49Pworc3luIGtleXdvcmQgbW9ua0Z1bmMgc3RyaW5nLWNpPj0/IHN1YnN0cmluZyBzdHJpbmctYXBwZW5kIHZlY3Rvcj8gbWFrZS12ZWN0b3IKK3N5biBrZXl3b3JkIG1vbmtGdW5jIHZlY3RvciB2ZWN0b3ItbGVuZ3RoIHZlY3Rvci1yZWYgdmVjdG9yLXNldCEgcHJvY2VkdXJlPworc3luIGtleXdvcmQgbW9ua0Z1bmMgYXBwbHkgbWFwIGZvci1lYWNoIGNhbGwtd2l0aC1jdXJyZW50LWNvbnRpbnVhdGlvbgorc3luIGtleXdvcmQgbW9ua0Z1bmMgY2FsbC13aXRoLWlucHV0LWZpbGUgY2FsbC13aXRoLW91dHB1dC1maWxlIGlucHV0LXBvcnQ/CitzeW4ga2V5d29yZCBtb25rRnVuYyBvdXRwdXQtcG9ydD8gY3VycmVudC1pbnB1dC1wb3J0IGN1cnJlbnQtb3V0cHV0LXBvcnQKK3N5biBrZXl3b3JkIG1vbmtGdW5jIG9wZW4taW5wdXQtZmlsZSBvcGVuLW91dHB1dC1maWxlIGNsb3NlLWlucHV0LXBvcnQKK3N5biBrZXl3b3JkIG1vbmtGdW5jIGNsb3NlLW91dHB1dC1wb3J0IGVvZi1vYmplY3Q/IHJlYWQgcmVhZC1jaGFyIHBlZWstY2hhcgorc3luIGtleXdvcmQgbW9ua0Z1bmMgd3JpdGUgZGlzcGxheSBuZXdsaW5lIHdyaXRlLWNoYXIgY2FsbC9jYworc3luIGtleXdvcmQgbW9ua0Z1bmMgbGlzdC10YWlsIHN0cmluZy0+bGlzdCBsaXN0LT5zdHJpbmcgc3RyaW5nLWNvcHkKK3N5biBrZXl3b3JkIG1vbmtGdW5jIHN0cmluZy1maWxsISB2ZWN0b3ItPmxpc3QgbGlzdC0+dmVjdG9yIHZlY3Rvci1maWxsIQorc3luIGtleXdvcmQgbW9ua0Z1bmMgZm9yY2Ugd2l0aC1pbnB1dC1mcm9tLWZpbGUgd2l0aC1vdXRwdXQtdG8tZmlsZQorc3luIGtleXdvcmQgbW9ua0Z1bmMgY2hhci1yZWFkeT8gbG9hZCB0cmFuc2NyaXB0LW9uIHRyYW5zY3JpcHQtb2ZmIGV2YWwKK3N5biBrZXl3b3JkIG1vbmtGdW5jIGR5bmFtaWMtd2luZCBwb3J0PyB2YWx1ZXMgY2FsbC13aXRoLXZhbHVlcworc3luIGtleXdvcmQgbW9ua0Z1bmMgbW9uay1yZXBvcnQtZW52aXJvbm1lbnQgbnVsbC1lbnZpcm9ubWVudAorc3luIGtleXdvcmQgbW9ua0Z1bmMgaW50ZXJhY3Rpb24tZW52aXJvbm1lbnQKKworIiBLZXl3b3JkcyBzcGVjaWZpYyB0byBTVEMncyBpbXBsZW1lbnRhdGlvbgorCitzeW4ga2V5d29yZCBtb25rRnVuYyAkZXZlbnQtY2xlYXIgJGV2ZW50LXBhcnNlICRldmVudC0+c3RyaW5nICRtYWtlLWV2ZW50LW1hcAorc3luIGtleXdvcmQgbW9ua0Z1bmMgJHJlc29sdmUtZXZlbnQtZGVmaW5pdGlvbiBjaGFuZ2UtcGF0dGVybiBjb3B5IGNvcHktc3RyaXAKK3N5biBrZXl3b3JkIG1vbmtGdW5jIGNvdW50LWRhdGEtY2hpbGRyZW4gY291bnQtbWFwLWNoaWxkcmVuIGNvdW50LXJlcCBkYXRhLW1hcAorc3luIGtleXdvcmQgbW9ua0Z1bmMgZHVwbGljYXRlIGR1cGxpY2F0ZS1zdHJpcCBmaWxlLWNoZWNrIGZpbGUtbG9va3VwIGdldAorc3luIGtleXdvcmQgbW9ua0Z1bmMgaW5zZXJ0IGxpc3QtbG9va3VwIG5vZGUtaGFzLWRhdGE/IG5vdC12ZXJpZnkgcGF0aD8KK3N5biBrZXl3b3JkIG1vbmtGdW5jIHBhdGgtZGVmaW5lZC1hcy1yZXBlYXRpbmc/IHBhdGgtbm9kZWNsZWFyIHBhdGgtbm9kZWRlcHRoCitzeW4ga2V5d29yZCBtb25rRnVuYyBwYXRoLW5vZGVuYW1lIHBhdGgtbm9kZXBhcmVudG5hbWUgcGF0aC0+c3RyaW5nIHBhdGgtdmFsaWQ/CitzeW4ga2V5d29yZCBtb25rRnVuYyByZWdleCBzdHJpbmctPnBhdGggdGltZXN0YW1wIHVuaXF1ZWlkIHZlcmlmeQorCisiIEtleXdvcmRzIGZyb20gdGhlIE1vbmsgZnVuY3Rpb24gbGlicmFyeSAoZnJvbSBlKkdhdGUgNC4xIHByb2dyYW1tZXJzIHJlZikKK3N5biBrZXl3b3JkIG1vbmtGdW5jIGFsbGNhcD8gY2FwaXRhbGl6ZSBjaGFyLXB1bmN0dWF0aW9uPyBjaGFyLXN1YnN0aXR1dGUKK3N5biBrZXl3b3JkIG1vbmtGdW5jIGNoYXItdG8tY2hhciBjb252IGNvdW50LXVzZWQtY2hpbGRyZW4gZGVnYy0+ZGVnZgorc3luIGtleXdvcmQgbW9ua0Z1bmMgZGlmZi10d28tZGF0ZXMgZGlzcGxheS1lcnJvciBlbXB0eS1zdHJpbmc/IGZhaWxfaWQKK3N5biBrZXl3b3JkIG1vbmtGdW5jIGZhaWxfaWRfaWYgZmFpbF90cmFuc2xhdGlvbiBmYWlsX3RyYW5zbGF0aW9uX2lmCitzeW4ga2V5d29yZCBtb25rRnVuYyBmaW5kLWdldC1hZnRlciBmaW5kLWdldC1iZWZvcmUgZ2V0LXRpbWVzdGFtcCBqdWxpYW4tZGF0ZT8KK3N5biBrZXl3b3JkIG1vbmtGdW5jIGp1bGlhbi0+c3RhbmRhcmQgbGVhcC15ZWFyPyBtYXAtc3RyaW5nIG5vdC1lbXB0eS1zdHJpbmc/CitzeW4ga2V5d29yZCBtb25rRnVuYyBzdGFuZGFyZC1kYXRlPyBzdGFuZGFyZC0+anVsaWFuIHN0cmluZy1iZWdpbnMtd2l0aD8KK3N5biBrZXl3b3JkIG1vbmtGdW5jIHN0cmluZy1jb250YWlucz8gc3RyaW5nLWVuZHMtd2l0aD8gc3RyaW5nLXNlYXJjaC1mcm9tLWxlZnQKK3N5biBrZXl3b3JkIG1vbmtGdW5jIHN0cmluZy1zZWFyY2gtZnJvbS1yaWdodCBzdHJpbmctPnNzbiBzdHJpcC1wdW5jdAorc3luIGtleXdvcmQgbW9ua0Z1bmMgc3RyaXAtc3RyaW5nIHN1YnN0cmluZz0/IHN5bWJvbC10YWJsZS1nZXQgc3ltYm9sLXRhYmxlLXB1dAorc3luIGtleXdvcmQgbW9ua0Z1bmMgdHJpbS1zdHJpbmctbGVmdCB0cmltLXN0cmluZy1yaWdodCB2YWxpZC1kZWNpbWFsPworc3luIGtleXdvcmQgbW9ua0Z1bmMgdmFsaWQtaW50ZWdlcj8gdmVyaWZ5LXR5cGUKKworIiBXcml0aW5nIG91dCB0aGUgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgU2NoZW1lIG51bWVyYWxzIHdpdGhvdXQKKyIgdXNpbmcgdmFyaWFibGVzIGlzIGEgZGF5J3Mgd29yayBmb3IgYSB0cmFpbmVkIHNlY3JldGFyeS4uLgorIiBUaGlzIGlzIGEgdXNlZnVsIGxheCBhcHByb3hpbWF0aW9uOgorCitzeW4gbWF0Y2gJbW9ua051bWJlcglvbmVsaW5lICAgICJbLSMrMC05Ll1bLSMrLzAtOWEtZkBpLmJveGVzZmRsXSoiCitzeW4gbWF0Y2gJbW9ua0Vycm9yCW9uZWxpbmUgICAgIVstIyswLTkuXVstIysvMC05YS1mQGkuYm94ZXNmZGxdKlteLSMrLzAtOWEtZkBpLmJveGVzZmRsIFx0KCkiO11bXiBcdCgpIjtdKiEKKworc3luIG1hdGNoCW1vbmtPdGhlcglvbmVsaW5lICAgICFbKy1dWyBcdCgpIjtdIW1lPWUtMQorc3luIG1hdGNoCW1vbmtPdGhlcglvbmVsaW5lICAgICFbKy1dJCEKKyIgLi4uIHNvIHRoYXQgYSBzaW5nbGUgKyBvciAtLCBpbnNpZGUgYSBxdW90ZWQgY29udGV4dCwgd291bGQgbm90IGJlCisiIGludGVycHJldGVkIGFzIGEgbnVtYmVyIChvdXRzaWRlIHN1Y2ggY29udGV4dHMsIGl0J3MgYSBtb25rRnVuYykKKworc3luIG1hdGNoCW1vbmtEZWxpbWl0ZXIJb25lbGluZSAgICAhXC5bIFx0KCkiO10hbWU9ZS0xCitzeW4gbWF0Y2gJbW9ua0RlbGltaXRlcglvbmVsaW5lICAgICFcLiQhCisiIC4uLiBhbmQgYSBzaW5nbGUgZG90IGlzIG5vdCBhIG51bWJlciBidXQgYSBkZWxpbWl0ZXIKKworIiBTaW1wbGUgbGl0ZXJhbHM6CisKK3N5biBtYXRjaAltb25rQm9vbGVhbglvbmVsaW5lICAgICIjW3RmXSIKK3N5biBtYXRjaAltb25rRXJyb3IJb25lbGluZSAgICAhI1t0Zl1bXiBcdCgpIjtdXCshCisKK3N5biBtYXRjaAltb25rQ2hhcglvbmVsaW5lICAgICIjXFwiCitzeW4gbWF0Y2gJbW9ua0NoYXIJb25lbGluZSAgICAiI1xcLiIKK3N5biBtYXRjaAltb25rRXJyb3IJb25lbGluZSAgICAhI1xcLlteIFx0KCkiO11cKyEKK3N5biBtYXRjaAltb25rQ2hhcglvbmVsaW5lICAgICIjXFxzcGFjZSIKK3N5biBtYXRjaAltb25rRXJyb3IJb25lbGluZSAgICAhI1xcc3BhY2VbXiBcdCgpIjtdXCshCitzeW4gbWF0Y2gJbW9ua0NoYXIJb25lbGluZSAgICAiI1xcbmV3bGluZSIKK3N5biBtYXRjaAltb25rRXJyb3IJb25lbGluZSAgICAhI1xcbmV3bGluZVteIFx0KCkiO11cKyEKKworIiBUaGlzIGtlZXBzIGFsbCBvdGhlciBzdHVmZiB1bmhpZ2hsaWdodGVkLCBleGNlcHQgKnN0dWZmKiBhbmQgPHN0dWZmPjoKKworc3luIG1hdGNoCW1vbmtPdGhlcglvbmVsaW5lICAgICxbYS16ISQlJiovOjw9Pj9eX35dWy1hLXohJCUmKi86PD0+P15ffjAtOSsuQF0qLAorc3luIG1hdGNoCW1vbmtFcnJvcglvbmVsaW5lICAgICxbYS16ISQlJiovOjw9Pj9eX35dWy1hLXohJCUmKi86PD0+P15ffjAtOSsuQF0qW14tYS16ISQlJiovOjw9Pj9eX34wLTkrLkAgXHQoKSI7XVwrW14gXHQoKSI7XSosCisKK3N5biBtYXRjaAltb25rT3RoZXIJb25lbGluZSAgICAiXC5cLlwuIgorc3luIG1hdGNoCW1vbmtFcnJvcglvbmVsaW5lICAgICFcLlwuXC5bXiBcdCgpIjtdXCshCisiIC4uLiBhIHNwZWNpYWwgaWRlbnRpZmllcgorCitzeW4gbWF0Y2gJbW9ua0NvbnN0YW50CW9uZWxpbmUgICAgLFwqWy1hLXohJCUmKi86PD0+P15ffjAtOSsuQF0qXCpbIFx0KCkiO10sbWU9ZS0xCitzeW4gbWF0Y2gJbW9ua0NvbnN0YW50CW9uZWxpbmUgICAgLFwqWy1hLXohJCUmKi86PD0+P15ffjAtOSsuQF0qXCokLAorc3luIG1hdGNoCW1vbmtFcnJvcglvbmVsaW5lICAgICxcKlstYS16ISQlJiovOjw9Pj9eX34wLTkrLkBdKlwqW14tYS16ISQlJiovOjw9Pj9eX34wLTkrLkAgXHQoKSI7XVwrW14gXHQoKSI7XSosCisKK3N5biBtYXRjaAltb25rQ29uc3RhbnQJb25lbGluZSAgICAsPFstYS16ISQlJiovOjw9Pj9eX34wLTkrLkBdKj5bIFx0KCkiO10sbWU9ZS0xCitzeW4gbWF0Y2gJbW9ua0NvbnN0YW50CW9uZWxpbmUgICAgLDxbLWEteiEkJSYqLzo8PT4/Xl9+MC05Ky5AXSo+JCwKK3N5biBtYXRjaAltb25rRXJyb3IJb25lbGluZSAgICAsPFstYS16ISQlJiovOjw9Pj9eX34wLTkrLkBdKj5bXi1hLXohJCUmKi86PD0+P15ffjAtOSsuQCBcdCgpIjtdXCtbXiBcdCgpIjtdKiwKKworIiBNb25rIGlucHV0IGFuZCBvdXRwdXQgc3RydWN0dXJlcworc3luIG1hdGNoCW1vbmtTeW50YXgJb25lbGluZSAgICAiXChcfmlucHV0XHxcW0lcXS0+XClbXiBcdF0qIgorc3luIG1hdGNoCW1vbmtGdW5jCW9uZWxpbmUgICAgIlwoXH5vdXRwdXRcfFxbT1xdLT5cKVteIFx0XSoiCisKKyIgTm9uLXF1b3RlZCBsaXN0cywgYW5kIHN0cmluZ3M6CisKK3N5biByZWdpb24gbW9ua1N0cnVjIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIoIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBtb25rU3RydWMgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IiMoIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIGNvbnRhaW5zPUFMTAorCitzeW4gcmVnaW9uCW1vbmtTdHJpbmcJc3RhcnQ9KyIrICBza2lwPStcXFtcXCJdKyBlbmQ9KyIrCisKKyIgQ29tbWVudHM6CisKK3N5biBtYXRjaAltb25rQ29tbWVudAkiOy4qJCIKKworIiBTeW5jaHJvbml6YXRpb24gYW5kIHRoZSB3cmFwcGluZyB1cC4uLgorCitzeW4gc3luYyBtYXRjaCBtYXRjaFBsYWNlIGdyb3VwaGVyZSBOT05FICJeW14gXHRdIgorIiAuLi4gaS5lLiBzeW5jaHJvbml6ZSBvbiBhIGxpbmUgdGhhdCBzdGFydHMgYXQgdGhlIGxlZnQgbWFyZ2luCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX21vbmtfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbW9ua19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBtb25rU3ludGF4CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1vbmtGdW5jCQlGdW5jdGlvbgorCisgIEhpTGluayBtb25rU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIG1vbmtDaGFyCQlDaGFyYWN0ZXIKKyAgSGlMaW5rIG1vbmtOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgbW9ua0Jvb2xlYW4JCUJvb2xlYW4KKworICBIaUxpbmsgbW9ua0RlbGltaXRlcglEZWxpbWl0ZXIKKyAgSGlMaW5rIG1vbmtDb25zdGFudAlDb25zdGFudAorCisgIEhpTGluayBtb25rQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgbW9ua0Vycm9yCQlFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJtb25rIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbW9vLnZpbSBiL3J1bnRpbWUvc3ludGF4L21vby52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjNWQzYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21vby52aW0KQEAgLTAsMCArMSwxNzMgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglNT08KKyIgTWFpbnRhaW5lcjoJVGltbyBGcmVuYXkgPHRpbW9AZnJlbmF5Lm5ldD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgT2N0IDA2CisiIE5vdGU6CQlSZXF1aXJlcyBWaW0gNi4wIG9yIGFib3ZlCisKKyIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwIHx8IGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBJbml0aWFsaXphdGlvbnMKK3N5biBjYXNlIGlnbm9yZQorCisiIEMtc3R5bGUgY29tbWVudHMKK3N5biBtYXRjaCBtb29VbmNvbW1lbnRlZEVycm9yIGRpc3BsYXkgflwqL34KK3N5biBtYXRjaCBtb29DU3R5bGVDb21tZW50RXJyb3IgZGlzcGxheSB+L1x6ZVwqfiBjb250YWluZWQKK3N5biByZWdpb24gbW9vQ1N0eWxlQ29tbWVudCBtYXRjaGdyb3VwPW1vb0NvbW1lbnQgc3RhcnQ9fi9cKn4gZW5kPX5cKi9+IGNvbnRhaW5zPW1vb0NTdHlsZUNvbW1lbnRFcnJvcgorCisiIFN0YXRlbWVudHMKK2lmIGV4aXN0cygibW9vX2V4dGVuZGVkX2NzdHlsZV9jb21tZW50cyIpCisgIHN5biBtYXRjaCBtb29JZGVudGlmaWVyIGRpc3BsYXkgflwlKFwlKC9cKi5cey19XCovXHMqXCkqXClcQD5cPFxoXHcqXD5+IGNvbnRhaW5lZCB0cmFuc3BhcmVudCBjb250YWlucz1tb29DU3R5bGVDb21tZW50LEBtb29LZXl3b3JkLG1vb1R5cGUsbW9vVmFyaWFibGUKK2Vsc2UKKyAgc3luIG1hdGNoIG1vb0lkZW50aWZpZXIgZGlzcGxheSB+XDxcaFx3Klw+fiBjb250YWluZWQgdHJhbnNwYXJlbnQgY29udGFpbnM9QG1vb0tleXdvcmQsbW9vVHlwZSxtb29WYXJpYWJsZQorZW5kaWYKK3N5biBrZXl3b3JkIG1vb1N0YXRlbWVudCBicmVhayBjb250aW51ZSBlbHNlIGVsc2VpZiBlbmRmb3IgZW5kZm9yayBlbmRpZiBlbmR0cnkgZW5kd2hpbGUgZmluYWxseSBmb3IgaWYgdHJ5CitzeW4ga2V5d29yZCBtb29TdGF0ZW1lbnQgZXhjZXB0IGZvcmsgd2hpbGUgbmV4dGdyb3VwPW1vb0lkZW50aWZpZXIgc2tpcHdoaXRlCitzeW4ga2V5d29yZCBtb29TdGF0ZW1lbnQgcmV0dXJuIG5leHRncm91cD1tb29TdHJpbmcgc2tpcHdoaXRlCisKKyIgT3BlcmF0b3JzCitzeW4ga2V5d29yZCBtb29PcGVyYXRvckluIGluCisKKyIgRXJyb3IgY29uc3RhbnRzCitzeW4ga2V5d29yZCBtb29BbnkgQU5ZCitzeW4ga2V5d29yZCBtb29FcnJvckNvbnN0YW50IEVfQVJHUyBFX0lOVkFSRyBFX0RJViBFX0ZMT0FUIEVfSU5WSU5EIEVfTUFYUkVDIEVfTkFDQyBFX05PTkUgRV9QRVJNIEVfUFJPUE5GIEVfUVVPVEEgRV9SQU5HRSBFX1JFQ01PVkUgRV9UWVBFIEVfVkFSTkYgRV9WRVJCTkYKKworIiBCdWlsdGluIHZhcmlhYmxlcworc3luIG1hdGNoIG1vb1R5cGUgZGlzcGxheSB+XDxcJShFUlJcfEZMT0FUXHxJTlRcfExJU1RcfE5VTVx8T0JKXHxTVFJcKVw+fgorc3luIG1hdGNoIG1vb1ZhcmlhYmxlIGRpc3BsYXkgflw8XCUoYXJnc1wlKHRyXClcPVx8Y2FsbGVyXHxkb2JqXCUoc3RyXClcPVx8aW9ialwlKHN0clwpXD1cfHBsYXllclx8cHJlcHN0clx8dGhpc1x8dmVyYlwpXD5+CisKKyIgU3RyaW5ncworc3luIG1hdGNoIG1vb1N0cmluZ0Vycm9yIGRpc3BsYXkgflteXHQgLVtcXS1+XX4gY29udGFpbmVkCitzeW4gbWF0Y2ggbW9vU3RyaW5nU3BlY2lhbENoYXIgZGlzcGxheSB+XFxbIlxcXX4gY29udGFpbmVkCitpZiAhZXhpc3RzKCJtb29fbm9fcmVnZXhwIikKKyAgIiBSZWd1bGFyIGV4cHJlc3Npb25zCisgIHN5biBtYXRjaCBtb29SZWdleHAgZGlzcGxheSB+JSV+IGNvbnRhaW5lZCBjb250YWluZWRpbj1tb29TdHJpbmcsbW9vUmVnZXhwUGFyZW50aGVzZXMgdHJhbnNwYXJlbnQgY29udGFpbnM9Tk9ORQorICBzeW4gcmVnaW9uIG1vb1JlZ2V4cFBhcmVudGhlc2VzIGRpc3BsYXkgbWF0Y2hncm91cD1tb29SZWdleHBPciBzdGFydD1+JSh+IHNraXA9fiUlfiBlbmQ9fiUpfiBjb250YWluZWQgY29udGFpbmVkaW49bW9vU3RyaW5nLG1vb1JlZ2V4cFBhcmVudGhlc2VzIHRyYW5zcGFyZW50IG9uZWxpbmUKKyAgc3luIG1hdGNoIG1vb1JlZ2V4cE9yIGRpc3BsYXkgfiV8fiBjb250YWluZWQgY29udGFpbmVkaW49bW9vU3RyaW5nLG1vb1JlZ2V4cFBhcmVudGhlc2VzCitlbmRpZgoraWYgIWV4aXN0cygibW9vX25vX3Byb25vdW5fc3ViIikKKyAgIiBQcm9ub3VuIHN1YnN0aXR1dGlvbnMKKyAgc3luIG1hdGNoIG1vb1Byb25vdW5TdWIgZGlzcGxheSB+JSV+IGNvbnRhaW5lZCBjb250YWluZWRpbj1tb29TdHJpbmcgdHJhbnNwYXJlbnQgY29udGFpbnM9Tk9ORQorICBzeW4gbWF0Y2ggbW9vUHJvbm91blN1YiBkaXNwbGF5IH4lWyNkaWxub3BxcnN0XX4gY29udGFpbmVkIGNvbnRhaW5lZGluPW1vb1N0cmluZworICBzeW4gbWF0Y2ggbW9vUHJvbm91blN1YiBkaXNwbGF5IH4lXFsjW2RpbG50XVxdfiBjb250YWluZWQgY29udGFpbmVkaW49bW9vU3RyaW5nCisgIHN5biBtYXRjaCBtb29Qcm9ub3VuU3ViIGRpc3BsYXkgfiUoXGhcdyopfiBjb250YWluZWQgY29udGFpbmVkaW49bW9vU3RyaW5nCisgIHN5biBtYXRjaCBtb29Qcm9ub3VuU3ViIGRpc3BsYXkgfiVcW1tkaWxudF1caFx3KlxdfiBjb250YWluZWQgY29udGFpbmVkaW49bW9vU3RyaW5nCisgIHN5biBtYXRjaCBtb29Qcm9ub3VuU3ViIGRpc3BsYXkgfiU8XCUoW2RpbG50XTpcKVw9XGFcKz5+IGNvbnRhaW5lZCBjb250YWluZWRpbj1tb29TdHJpbmcKK2VuZGlmCitpZiBleGlzdHMoIm1vb191bm1hdGNoZWRfcXVvdGVzIikKKyAgc3luIHJlZ2lvbiBtb29TdHJpbmcgbWF0Y2hncm91cD1tb29TdHJpbmdFcnJvciBzdGFydD1+In4gZW5kPX4kfiBjb250YWlucz1AbW9vU3RyaW5nQ29udGVudHMga2VlcGVuZAorICBzeW4gcmVnaW9uIG1vb1N0cmluZyBzdGFydD1+In4gc2tpcD1+XFwufiBlbmQ9fiJ+IGNvbnRhaW5zPUBtb29TdHJpbmdDb250ZW50cyBvbmVsaW5lIGtlZXBlbmQKK2Vsc2UKKyAgc3luIHJlZ2lvbiBtb29TdHJpbmcgc3RhcnQ9fiJ+IHNraXA9flxcLn4gZW5kPX4iXHwkfiBjb250YWlucz1AbW9vU3RyaW5nQ29udGVudHMga2VlcGVuZAorZW5kaWYKKworIiBOdW1iZXJzIGFuZCBvYmplY3QgbnVtYmVycworc3luIG1hdGNoIG1vb051bWJlciBkaXNwbGF5IH5cJShcJShcPFxkXCtcKVw9XC5cZFwrXHxcPFxkXCtcKVwlKGVbK1wtXVw9XGRcK1wpXD1cPn4KK3N5biBtYXRjaCBtb29PYmplY3QgZGlzcGxheSB+Iy1cPVxkXCtcPn4KKworIiBQcm9wZXJ0aWVzIGFuZCB2ZXJicworaWYgZXhpc3RzKCJtb29fYnVpbHRpbl9wcm9wZXJ0aWVzIikKKyAgIkJ1aWx0aW4gcHJvcGVydGllcworICBzeW4ga2V5d29yZCBtb29CdWlsdGluUHJvcGVydHkgY29udGVudHMgZiBsb2NhdGlvbiBuYW1lIG93bmVyIHByb2dyYW1tZXIgciB3IHdpemFyZCBjb250YWluZWQgY29udGFpbmVkaW49bW9vUHJvcFJlZgorZW5kaWYKK2lmIGV4aXN0cygibW9vX2V4dGVuZGVkX2NzdHlsZV9jb21tZW50cyIpCisgIHN5biBtYXRjaCBtb29Qcm9wUmVmIGRpc3BsYXkgflwuXHMqXCUoXCUoL1wqLlx7LX1cKi9ccypcKSpcKVxAPlxoXHcqXD5+IHRyYW5zcGFyZW50IGNvbnRhaW5zPW1vb0NTdHlsZUNvbW1lbnQsQG1vb0tleXdvcmQKKyAgc3luIG1hdGNoIG1vb1ZlcmJSZWYgZGlzcGxheSB+OlxzKlwlKFwlKC9cKi5cey19XCovXHMqXCkqXClcQD5caFx3Klw+fiB0cmFuc3BhcmVudCBjb250YWlucz1tb29DU3R5bGVDb21tZW50LEBtb29LZXl3b3JkCitlbHNlCisgIHN5biBtYXRjaCBtb29Qcm9wUmVmIGRpc3BsYXkgflwuXHMqXGhcdypcPn4gdHJhbnNwYXJlbnQgY29udGFpbnM9QG1vb0tleXdvcmQKKyAgc3luIG1hdGNoIG1vb1ZlcmJSZWYgZGlzcGxheSB+OlxzKlxoXHcqXD5+IHRyYW5zcGFyZW50IGNvbnRhaW5zPUBtb29LZXl3b3JkCitlbmRpZgorCisiIEJ1aWx0aW4gZnVuY3Rpb25zLCBjb3JlIHByb3BlcnRpZXMgYW5kIGNvcmUgdmVyYnMKK2lmIGV4aXN0cygibW9vX2V4dGVuZGVkX2NzdHlsZV9jb21tZW50cyIpCisgIHN5biBtYXRjaCBtb29CdWlsdGluRnVuY3Rpb24gZGlzcGxheSB+XDxcaFx3KlxzKlwlKFwlKC9cKi5cey19XCovXHMqXCkqXClcQD5cemUofiBjb250YWlucz1tb29DU3R5bGVDb21tZW50CisgIHN5biBtYXRjaCBtb29Db3JlUHJvcE9yVmVyYiBkaXNwbGF5IH5cJFxzKlwlKFwlKC9cKi5cey19XCovXHMqXCkqXClcQD5cJShpblw+XClcQCFcaFx3Klw+fiBjb250YWlucz1tb29DU3R5bGVDb21tZW50LEBtb29LZXl3b3JkCitlbHNlCisgIHN5biBtYXRjaCBtb29CdWlsdGluRnVuY3Rpb24gZGlzcGxheSB+XDxcaFx3KlxzKlx6ZSh+IGNvbnRhaW5zPU5PTkUKKyAgc3luIG1hdGNoIG1vb0NvcmVQcm9wT3JWZXJiIGRpc3BsYXkgflwkXHMqXCUoaW5cPlwpXEAhXGhcdypcPn4gY29udGFpbnM9QG1vb0tleXdvcmQKK2VuZGlmCitpZiBleGlzdHMoIm1vb191bmtub3duX2J1aWx0aW5fZnVuY3Rpb25zIikKKyAgc3luIG1hdGNoIG1vb1Vua25vd25CdWlsdGluRnVuY3Rpb24gflw8XGhcdypcPn4gY29udGFpbmVkIGNvbnRhaW5lZGluPW1vb0J1aWx0aW5GdW5jdGlvbiBjb250YWlucz1tb29Lbm93bkJ1aWx0aW5GdW5jdGlvbgorICAiIEtub3duIGJ1aWx0aW4gZnVuY3Rpb25zIGFzIG9mIHZlcnNpb24gMS44LjEgb2YgdGhlIHNlcnZlcgorICAiIEFkZCB5b3VyIG93biBleHRlbnNpb25zIHRvIHRoaXMgZ3JvdXAgaWYgeW91IGxpa2UKKyAgc3luIGtleXdvcmQgbW9vS25vd25CdWlsdGluRnVuY3Rpb24gYWJzIGFjb3MgYWRkX3Byb3BlcnR5IGFkZF92ZXJiIGFzaW4gYXRhbiBiaW5hcnlfaGFzaCBib290X3BsYXllciBidWZmZXJlZF9vdXRwdXRfbGVuZ3RoIGNhbGxlcnMgY2FsbGVyX3Blcm1zIGNhbGxfZnVuY3Rpb24gY2VpbCBjaGlsZHJlbiBjaHBhcmVudCBjbGVhcl9wcm9wZXJ0eSBjb25uZWN0ZWRfcGxheWVycyBjb25uZWN0ZWRfc2Vjb25kcyBjb25uZWN0aW9uX25hbWUgY29ubmVjdGlvbl9vcHRpb24gY29ubmVjdGlvbl9vcHRpb25zIGNvcyBjb3NoIGNyZWF0ZSBjcnlwdCBjdGltZSBkYl9kaXNrX3NpemUgZGVjb2RlX2JpbmFyeSBkZWxldGVfcHJvcGVydHkgZGVsZXRlX3ZlcmIgZGlzYXNzZW1ibGUgZHVtcF9kYXRhYmFzZSBlbmNvZGVfYmluYXJ5IGVxdWFsIGV2YWwgZXhwIGZsb2F0c3RyIGZsb29yIGZsdXNoX2lucHV0IGZvcmNlX2lucHV0IGZ1bmN0aW9uX2luZm8gaWRsZV9zZWNvbmRzIGluZGV4IGlzX2NsZWFyX3Byb3BlcnR5IGlzX21lbWJlciBpc19wbGF5ZXIga2lsbF90YXNrIGxlbmd0aCBsaXN0YXBwZW5kIGxpc3RkZWxldGUgbGlzdGVuIGxpc3RlbmVycyBsaXN0aW5zZXJ0IGxpc3RzZXQgbG9nIGxvZzEwIG1hdGNoIG1heCBtYXhfb2JqZWN0IG1lbW9yeV91c2FnZSBtaW4gbW92ZSBub3RpZnkgb2JqZWN0X2J5dGVzIG9wZW5fbmV0d29ya19jb25uZWN0aW9uIG91dHB1dF9kZWxpbWl0ZXJzIHBhcmVudCBwYXNzIHBsYXllcnMgcHJvcGVydGllcyBwcm9wZXJ0eV9pbmZvIHF1ZXVlZF90YXNrcyBxdWV1ZV9pbmZvIHJhaXNlIHJhbmRvbSByZWFkIHJlY3ljbGUgcmVudW1iZXIgcmVzZXRfbWF4X29iamVjdCByZXN1bWUgcmluZGV4IHJtYXRjaCBzZWNvbmRzX2xlZnQgc2VydmVyX2xvZyBzZXJ2ZXJfdmVyc2lvbiBzZXRhZGQgc2V0cmVtb3ZlIHNldF9jb25uZWN0aW9uX29wdGlvbiBzZXRfcGxheWVyX2ZsYWcgc2V0X3Byb3BlcnR5X2luZm8gc2V0X3Rhc2tfcGVybXMgc2V0X3ZlcmJfYXJncyBzZXRfdmVyYl9jb2RlIHNldF92ZXJiX2luZm8gc2h1dGRvd24gc2luIHNpbmggc3FydCBzdHJjbXAgc3RyaW5nX2hhc2ggc3Ryc3ViIHN1YnN0aXR1dGUgc3VzcGVuZCB0YW4gdGFuaCB0YXNrX2lkIHRhc2tfc3RhY2sgdGlja3NfbGVmdCB0aW1lIHRvZmxvYXQgdG9pbnQgdG9saXRlcmFsIHRvbnVtIHRvb2JqIHRvc3RyIHRydW5jIHR5cGVvZiB1bmxpc3RlbiB2YWxpZCB2YWx1ZV9ieXRlcyB2YWx1ZV9oYXNoIHZlcmJzIHZlcmJfYXJncyB2ZXJiX2NvZGUgdmVyYl9pbmZvIGNvbnRhaW5lZAorZW5kaWYKKworIqBFbmNsb3NlZCBleHByZXNzaW9ucworc3luIG1hdGNoIG1vb1VuZW5jbG9zZWRFcnJvciBkaXNwbGF5IH5bJylcXXx9XX4KK3N5biBtYXRjaCBtb29QYXJlbnRoZXNlc0Vycm9yIGRpc3BsYXkgflsnO1xdfH1dfiBjb250YWluZWQKK3N5biByZWdpb24gbW9vUGFyZW50aGVzZXMgc3RhcnQ9fih+IGVuZD1+KX4gdHJhbnNwYXJlbnQgY29udGFpbnM9QG1vb0VuY2xvc2VkQ29udGVudHMsbW9vUGFyZW50aGVzZXNFcnJvcgorc3luIG1hdGNoIG1vb0JyYWNrZXRzRXJyb3IgZGlzcGxheSB+WycpO3x9XX4gY29udGFpbmVkCitzeW4gcmVnaW9uIG1vb0JyYWNrZXRzIHN0YXJ0PX5cW34gZW5kPX5cXX4gdHJhbnNwYXJlbnQgY29udGFpbnM9QG1vb0VuY2xvc2VkQ29udGVudHMsbW9vQnJhY2tldHNFcnJvcgorc3luIG1hdGNoIG1vb0JyYWNlc0Vycm9yIGRpc3BsYXkgflsnKTtcXXxdfiBjb250YWluZWQKK3N5biByZWdpb24gbW9vQnJhY2VzIHN0YXJ0PX57fiBlbmQ9fn1+IHRyYW5zcGFyZW50IGNvbnRhaW5zPUBtb29FbmNsb3NlZENvbnRlbnRzLG1vb0JyYWNlc0Vycm9yCitzeW4gbWF0Y2ggbW9vUXVlc3Rpb25FcnJvciBkaXNwbGF5IH5bJyk7XF19XX4gY29udGFpbmVkCitzeW4gcmVnaW9uIG1vb1F1ZXN0aW9uIHN0YXJ0PX4/fiBlbmQ9fnx+IHRyYW5zcGFyZW50IGNvbnRhaW5zPUBtb29FbmNsb3NlZENvbnRlbnRzLG1vb1F1ZXN0aW9uRXJyb3IKK3N5biBtYXRjaCBtb29DYXRjaEVycm9yIGRpc3BsYXkgflspO1xdfH1dfiBjb250YWluZWQKK3N5biByZWdpb24gbW9vQ2F0Y2ggbWF0Y2hncm91cD1tb29FeGNsYW1hdGlvbiBzdGFydD1+YH4gZW5kPX4nfiB0cmFuc3BhcmVudCBjb250YWlucz1AbW9vRW5jbG9zZWRDb250ZW50cyxtb29DYXRjaEVycm9yLG1vb0V4Y2xhbWF0aW9uCitpZiBleGlzdHMoIm1vb19leHRlbmRlZF9jc3R5bGVfY29tbWVudHMiKQorICBzeW4gbWF0Y2ggbW9vRXhjbGFtYXRpb24gZGlzcGxheSB+W1x0ICElJigqKyxcLS88PT4/QFteYHt8XVxAPCFccypcJShcJSgvXCouXHstfVwqL1xzKlwpKlwpXEA+IT1cQCF+IGNvbnRhaW5lZCBjb250YWlucz1tb29DU3R5bGVDb21tZW50CitlbHNlCisgIHN5biBtYXRjaCBtb29FeGNsYW1hdGlvbiBkaXNwbGF5IH5bXHQgISUmKCorLFwtLzw9Pj9AW15ge3xdXEA8IVxzKiE9XEAhfiBjb250YWluZWQKK2VuZGlmCisKKyIgQ29tbWVudHMKK3N5biBtYXRjaCBtb29Db21tZW50U3BlY2lhbENoYXIgZGlzcGxheSB+XFxbIlxcXX4gY29udGFpbmVkIHRyYW5zcGFyZW50IGNvbnRhaW5zPU5PTkUKK3N5biBtYXRjaCBtb29Db21tZW50IH5bXHQgISUmKissXC0vPD0+P0BefF1cQDwhXHMqIlwoW15cIl1cfFxcLlwpKiJccyo7fiBjb250YWlucz1tb29TdHJpbmdFcnJvcixtb29Db21tZW50U3BlY2lhbENoYXIKKworIiBOb24tY29kZQorc3luIHJlZ2lvbiBtb29Ob25Db2RlIHN0YXJ0PX5eXHMqQFw8fiBlbmQ9fiR+CitzeW4gbWF0Y2ggbW9vTm9uQ29kZSBkaXNwbGF5IH5eXC4kfgorc3luIG1hdGNoIG1vb05vbkNvZGUgZGlzcGxheSB+XlxzKlxkXCs6fmhlPWUtMQorCisiIE92ZXJyaWRpbmcgbWF0Y2hlcworc3luIG1hdGNoIG1vb1JhbmdlT3BlcmF0b3IgZGlzcGxheSB+XC5cLn4gdHJhbnNwYXJlbnQgY29udGFpbnM9Tk9ORQorc3luIG1hdGNoIG1vb09yT3BlcmF0b3IgZGlzcGxheSB+fHx+IHRyYW5zcGFyZW50IGNvbnRhaW5zPU5PTkUKK2lmIGV4aXN0cygibW9vX2V4dGVuZGVkX2NzdHlsZV9jb21tZW50cyIpCisgIHN5biBtYXRjaCBtb29TY2F0dGVyaW5nIH5bLHtdXEA8PVxzKlwlKFwlKC9cKi5cey19XCovXHMqXCkqXClcQD4/fiB0cmFuc3BhcmVudCBjb250YWlucz1tb29DU3R5bGVDb21tZW50CitlbHNlCisgIHN5biBtYXRjaCBtb29TY2F0dGVyaW5nIH5bLHtdXEA8PVxzKj9+IHRyYW5zcGFyZW50IGNvbnRhaW5zPU5PTkUKK2VuZGlmCisKKyIgQ2x1c3RlcnMKK3N5biBjbHVzdGVyIG1vb0tleXdvcmQgY29udGFpbnM9bW9vU3RhdGVtZW50LG1vb09wZXJhdG9ySW4sbW9vQW55LG1vb0Vycm9yQ29uc3RhbnQKK3N5biBjbHVzdGVyIG1vb1N0cmluZ0NvbnRlbnRzIGNvbnRhaW5zPW1vb1N0cmluZ0Vycm9yLG1vb1N0cmluZ1NwZWNpYWxDaGFyCitzeW4gY2x1c3RlciBtb29FbmNsb3NlZENvbnRlbnRzIGNvbnRhaW5zPVRPUCxtb29VbmVuY2xvc2VkRXJyb3IsbW9vQ29tbWVudCxtb29Ob25Db2RlCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KK2hpIGRlZiBsaW5rIG1vb1VuY29tbWVudGVkRXJyb3IgRXJyb3IKK2hpIGRlZiBsaW5rIG1vb0NTdHlsZUNvbW1lbnRFcnJvciBFcnJvcgoraGkgZGVmIGxpbmsgbW9vQ1N0eWxlQ29tbWVudCBDb21tZW50CitoaSBkZWYgbGluayBtb29TdGF0ZW1lbnQgU3RhdGVtZW50CitoaSBkZWYgbGluayBtb29PcGVyYXRvckluIE9wZXJhdG9yCitoaSBkZWYgbGluayBtb29BbnkgQ29uc3RhbnQgIiBsaW5rIHRoaXMgdG8gS2V5d29yZCBpZiB5b3Ugd2FudAoraGkgZGVmIGxpbmsgbW9vRXJyb3JDb25zdGFudCBDb25zdGFudAoraGkgZGVmIGxpbmsgbW9vVHlwZSBUeXBlCitoaSBkZWYgbGluayBtb29WYXJpYWJsZSBUeXBlCitoaSBkZWYgbGluayBtb29TdHJpbmdFcnJvciBFcnJvcgoraGkgZGVmIGxpbmsgbW9vU3RyaW5nU3BlY2lhbENoYXIgU3BlY2lhbENoYXIKK2hpIGRlZiBsaW5rIG1vb1JlZ2V4cE9yIFNwZWNpYWxDaGFyCitoaSBkZWYgbGluayBtb29Qcm9ub3VuU3ViIFNwZWNpYWxDaGFyCitoaSBkZWYgbGluayBtb29TdHJpbmcgU3RyaW5nCitoaSBkZWYgbGluayBtb29OdW1iZXIgTnVtYmVyCitoaSBkZWYgbGluayBtb29PYmplY3QgTnVtYmVyCitoaSBkZWYgbGluayBtb29CdWlsdGluUHJvcGVydHkgVHlwZQoraGkgZGVmIGxpbmsgbW9vQnVpbHRpbkZ1bmN0aW9uIEZ1bmN0aW9uCitoaSBkZWYgbGluayBtb29Vbmtub3duQnVpbHRpbkZ1bmN0aW9uIEVycm9yCitoaSBkZWYgbGluayBtb29Lbm93bkJ1aWx0aW5GdW5jdGlvbiBGdW5jdGlvbgoraGkgZGVmIGxpbmsgbW9vQ29yZVByb3BPclZlcmIgSWRlbnRpZmllcgoraGkgZGVmIGxpbmsgbW9vVW5lbmNsb3NlZEVycm9yIEVycm9yCitoaSBkZWYgbGluayBtb29QYXJlbnRoZXNlc0Vycm9yIEVycm9yCitoaSBkZWYgbGluayBtb29CcmFja2V0c0Vycm9yIEVycm9yCitoaSBkZWYgbGluayBtb29CcmFjZXNFcnJvciBFcnJvcgoraGkgZGVmIGxpbmsgbW9vUXVlc3Rpb25FcnJvciBFcnJvcgoraGkgZGVmIGxpbmsgbW9vQ2F0Y2hFcnJvciBFcnJvcgoraGkgZGVmIGxpbmsgbW9vRXhjbGFtYXRpb24gRXhjZXB0aW9uCitoaSBkZWYgbGluayBtb29Db21tZW50IENvbW1lbnQKK2hpIGRlZiBsaW5rIG1vb05vbkNvZGUgUHJlUHJvYworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJtb28iCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9tcC52aW0gYi9ydW50aW1lL3N5bnRheC9tcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmZDYwYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21wLnZpbQpAQCAtMCwwICsxLDEzMiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU1ldGFQb3N0CisiIE1haW50YWluZXI6CUFuZHJlYXMgU2NoZXJlciA8YW5kcmVhcy5zY2hlcmVyQHBvYm94LmNvbT4KKyIgTGFzdCBDaGFuZ2U6CUFwcmlsIDMwLCAyMDAxCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworbGV0IHBsYWluX21mX21hY3JvcyA9IDAgIiBwbGFpbi5tZiBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGZvciBNZXRhUG9zdAorbGV0IG90aGVyX21mX21hY3JvcyA9IDAgIiBjbWJhc2UubWYsIGxvZ28ubWYsIC4uLiBuZWl0aGVyCisKKyIgUmVhZCB0aGUgTWV0YWZvbnQgc3ludGF4IHRvIHN0YXJ0IHdpdGgKK2lmIHZlcnNpb24gPCA2MDAKKyAgc291cmNlIDxzZmlsZT46cDpoL21mLnZpbQorZWxzZQorICBydW50aW1lISBzeW50YXgvbWYudmltCitlbmRpZgorCisiIE1ldGFQb3N0IGhhcyBUZVggaW5zZXJ0cyBmb3IgdHlwZXNldCBsYWJlbHMKKyIgdmVyYmF0aW10ZXgsIGJ0ZXgsIGFuZCBldGV4IHdpbGwgYmUgdHJlYXRlZCBhcyBrZXl3b3Jkcworc3luIG1hdGNoIG1wVGVYYmVnaW4gIlwodmVyYmF0aW10ZXhcfGJ0ZXhcKSIKK3N5biBtYXRjaCBtcFRlWGVuZCAiZXRleCIKK3N5biByZWdpb24gbXBUZVhpbnNlcnQgc3RhcnQ9IlwodmVyYmF0aW10ZXhcfGJ0ZXhcKSJocz1lKzEgZW5kPSJldGV4ImhlPXMtMSBjb250YWlucz1tcFRlWGJlZ2luLG1wVGVYZW5kIGtlZXBlbmQKKworIiBNZXRhUG9zdCBwcmltaXRpdmVzIG5vdCBmb3VuZCBpbiBNZXRhZm9udAorc3luIGtleXdvcmQgbXBJbnRlcm5hbCBibHVlcGFydCBjbGlwIGNvbG9yIGRhc2hlZCBmb250c2l6ZSBncmVlbnBhcnQgaW5mb250CitzeW4ga2V5d29yZCBtcEludGVybmFsIGxpbmVjYXAgbGluZWpvaW4gbGxjb3JuZXIgbHJjb3JuZXIgbWl0ZXJsaW1pdCBtcHhicmVhaworc3luIGtleXdvcmQgbXBJbnRlcm5hbCBwcm9sb2d1ZXMgcmVkcGFydCBzZXRib3VuZHMgdHJhY2luZ2xvc3RjaGFycworc3luIGtleXdvcmQgbXBJbnRlcm5hbCB0cnVlY29ybmVycyB1bGNvcm5lciB1cmNvcm5lciB3aXRoY29sb3IKKworIiBNZXRhZm9udCBwcmltaXRpdmVzIG5vdCBmb3VuZCBpbiBNZXRhUG9zdAorc3luIGtleXdvcmQgbm90RGVmaW5lZCBhdXRvcm91bmRpbmcgY2hhcmR4IGNoYXJkeSBmaWxsaW4gZ3JhbnVsYXJpdHkgaHBwcAorc3luIGtleXdvcmQgbm90RGVmaW5lZCBwcm9vZmluZyBzbW9vdGhpbmcgdHJhY2luZ2VkZ2VzIHRyYWNpbmdwZW5zCitzeW4ga2V5d29yZCBub3REZWZpbmVkIHR1cm5pbmdjaGVjayB2cHBwIHhvZmZzZXQgeW9mZnNldAorCisiIEtleXdvcmRzIGRlZmluZWQgYnkgcGxhaW4ubXAKK2lmICFleGlzdHMoInBsYWluX21wX21hY3JvcyIpCisgIGxldCBwbGFpbl9tcF9tYWNyb3MgPSAxICIgU2V0IHRoaXMgdG8gJzAnIGlmIHlvdXIgc291cmNlIGdldHMgdG9vIGNvbG91cmZ1bAorZW5kaWYKK2lmIHBsYWluX21wX21hY3JvcworICBzeW4ga2V5d29yZCBtcE1hY3JvIGFoYW5nbGUgYWhsZW5ndGggYmFja2dyb3VuZCBiYm94IGJib3htYXJnaW4gYmVnaW5maWcKKyAgc3luIGtleXdvcmQgbXBNYWNybyBiZXZlbGVkIGJsYWNrIGJsdWUgYnVpbGRjeWNsZSBidXR0IGNlbnRlciBjdXRhZnRlcgorICBzeW4ga2V5d29yZCBtcE1hY3JvIGN1dGJlZm9yZSBjdXR0aW5ncyBkYXNocGF0dGVybiBkZWZhdWx0Zm9udCBkZWZhdWx0cGVuCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gZGVmYXVsdHNjYWxlIGRvdGxhYmVsIGRvdGxhYmVscyBkcmF3YXJyb3cgZHJhd2RibGFycm93CisgIHN5biBrZXl3b3JkIG1wTWFjcm8gZHJhd29wdGlvbnMgZW5kZmlnIGV2ZW5seSBleHRyYV9iZWdpbmZpZyBleHRyYV9lbmRmaWcKKyAgc3luIGtleXdvcmQgbXBNYWNybyBncmVlbiBsYWJlbCBsYWJlbG9mZnNldCBtaXRlcmVkIHJlZCByb3VuZGVkIHNxdWFyZWQKKyAgc3luIGtleXdvcmQgbXBNYWNybyB0aGVsYWJlbCB3aGl0ZSBiYXNlX25hbWUgYmFzZV92ZXJzaW9uCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gdXB0byBkb3dudG8gZXhpdHVubGVzcyByZWxheCBnb2JibGUgZ29iYmxlZAorICBzeW4ga2V5d29yZCBtcE1hY3JvIGludGVyYWN0IGxvZ2dpbmdhbGwgdHJhY2luZ2FsbCB0cmFjaW5nbm9uZQorICBzeW4ga2V5d29yZCBtcE1hY3JvIGVwcyBlcHNpbG9uIGluZmluaXR5IHJpZ2h0IGxlZnQgdXAgZG93biBvcmlnaW4KKyAgc3luIGtleXdvcmQgbXBNYWNybyBxdWFydGVyY2lyY2xlIGhhbGZjaXJjbGUgZnVsbGNpcmNsZSB1bml0c3F1YXJlIGlkZW50aXR5CisgIHN5biBrZXl3b3JkIG1wTWFjcm8gYmxhbmtwaWN0dXJlIHdpdGhkb3RzIGRpdHRvIEVPRiBwZW5zcXVhcmUgcGVucmF6b3IKKyAgc3luIGtleXdvcmQgbXBNYWNybyBwZW5zcGVjayB3aGF0ZXZlciBhYnMgcm91bmQgY2VpbGluZyBieXRlIGRpciB1bml0dmVjdG9yCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gaW52ZXJzZSBjb3VudGVyY2xvY2t3aXNlIHRlbnNlcGF0aCBtb2QgZGl2IGRvdHByb2QKKyAgc3luIGtleXdvcmQgbXBNYWNybyB0YWtlcG93ZXIgZGlyZWN0aW9uIGRpcmVjdGlvbnBvaW50IGludGVyc2VjdGlvbnBvaW50CisgIHN5biBrZXl3b3JkIG1wTWFjcm8gc29mdGpvaW4gaW5jciBkZWNyIHJlZmxlY3RlZGFib3V0IHJvdGF0ZWRhcm91bmQKKyAgc3luIGtleXdvcmQgbXBNYWNybyByb3RhdGVkYWJvdXQgbWluIG1heCBmbGV4IHN1cGVyZWxsaXBzZSBpbnRlcnBhdGgKKyAgc3luIGtleXdvcmQgbXBNYWNybyBtYWdzdGVwIGN1cnJlbnRwZW4gY3VycmVudHBlbl9wYXRoIGN1cnJlbnRwaWN0dXJlCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gZmlsbCBkcmF3IGZpbGxkcmF3IGRyYXdkb3QgdW5maWxsIHVuZHJhdyB1bmZpbGxkcmF3CisgIHN5biBrZXl3b3JkIG1wTWFjcm8gdW5kcmF3ZG90IGVyYXNlIGN1dGRyYXcgaW1hZ2UgcGlja3VwIG51bWVyaWNfcGlja3VwCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gcGVuX2xmdCBwZW5fcnQgcGVuX3RvcCBwZW5fYm90IHNhdmVwZW4gY2xlYXJwZW4KKyAgc3luIGtleXdvcmQgbXBNYWNybyBjbGVhcl9wZW5fbWVtb3J5IGxmdCBydCB0b3AgYm90IHVsZnQgdXJ0IGxsZnQgbHJ0CisgIHN5biBrZXl3b3JkIG1wTWFjcm8gcGVucG9zIHBlbnN0cm9rZSBhcnJvd2hlYWQgbWFrZWxhYmVsIGxhYmVscyBwZW5sYWJlbAorICBzeW4ga2V5d29yZCBtcE1hY3JvIHJhbmdlIG51bXRvayB0aHJ1IGNsZWFyeHkgY2xlYXJpdCBjbGVhcnBlbiBwaWNrdXAKKyAgc3luIGtleXdvcmQgbXBNYWNybyBzaGlwaXQgYnllIGhpZGUgc3RvcCBzb2x2ZQorZW5kaWYKKworIiBLZXl3b3JkcyBkZWZpbmVkIGJ5IG1mcGxhaW4ubXAKK2lmICFleGlzdHMoIm1mcGxhaW5fbXBfbWFjcm9zIikKKyAgbGV0IG1mcGxhaW5fbXBfbWFjcm9zID0gMCAiIFNldCB0aGlzIHRvICcxJyB0byBpbmNsdWRlIHRoZXNlIG1hY3JvIG5hbWVzCitlbmRpZgoraWYgbWZwbGFpbl9tcF9tYWNyb3MKKyAgc3luIGtleXdvcmQgbXBNYWNybyBiZWdpbmNoYXIgYmxhY2tlciBjYXBzdWxlX2RlZiBjaGFuZ2Vfd2lkdGgKKyAgc3luIGtleXdvcmQgbXBNYWNybyBkZWZpbmVfYmxhY2tlcl9waXhlbHMgZGVmaW5lX2NvcnJlY3RlZF9waXhlbHMKKyAgc3luIGtleXdvcmQgbXBNYWNybyBkZWZpbmVfZ29vZF94X3BpeGVscyBkZWZpbmVfZ29vZF95X3BpeGVscworICBzeW4ga2V5d29yZCBtcE1hY3JvIGRlZmluZV9ob3Jpem9udGFsX2NvcnJlY3RlZF9waXhlbHMKKyAgc3luIGtleXdvcmQgbXBNYWNybyBkZWZpbmVfcGl4ZWxzIGRlZmluZV93aG9sZV9ibGFja2VyX3BpeGVscworICBzeW4ga2V5d29yZCBtcE1hY3JvIGRlZmluZV93aG9sZV92ZXJ0aWNhbF9ibGFja2VyX3BpeGVscworICBzeW4ga2V5d29yZCBtcE1hY3JvIGRlZmluZV93aG9sZV92ZXJ0aWNhbF9waXhlbHMgZW5kY2hhcgorICBzeW4ga2V5d29yZCBtcE1hY3JvIGV4dHJhX2JlZ2luY2hhciBleHRyYV9lbmRjaGFyIGV4dHJhX3NldHVwCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gZm9udF9jb2Rpbmdfc2NoZW1lIGZvbnRfZXh0cmFfc3BhY2UgZm9udF9pZGVudGlmaWVyCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gZm9udF9ub3JtYWxfc2hyaW5rIGZvbnRfbm9ybWFsX3NwYWNlCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gZm9udF9ub3JtYWxfc3RyZXRjaCBmb250X3F1YWQgZm9udF9zaXplCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gZm9udF9zbGFudCBmb250X3hfaGVpZ2h0IGl0YWxjb3JyIGxhYmVsZm9udAorICBzeW4ga2V5d29yZCBtcE1hY3JvIG1ha2Vib3ggbWFrZWdyaWQgbWFrZXRpY2tzIG1vZGVfZGVmIG1vZGVfc2V0dXAKKyAgc3luIGtleXdvcmQgbXBNYWNybyBvX2NvcnJlY3Rpb24gcHJvb2ZydWxlIHByb29mcnVsZXRoaWNrbmVzcyBydWxlcGVuIHNtb2RlCisKKyAgIiBwbHVzIHNvbWUgbm8tb3BzLCBhbHNvIGZyb20gbWZwbGFpbi5tcAorICBzeW4ga2V5d29yZCBtcE1hY3JvIGN1bGxpdCBjdXJyZW50dHJhbnNmb3JtIGdmY29ybmVycyBncmF5Zm9udCBocm91bmQKKyAgc3luIGtleXdvcmQgbXBNYWNybyBpbWFnZXJ1bGVzIGxvd3Jlc19maXggbm9kaXNwbGF5cyBub3RyYW5zZm9ybXMgb3Blbml0CisgIHN5biBrZXl3b3JkIG1wTWFjcm8gcHJvb2ZvZmZzZXQgc2NyZWVuY2hhcnMgc2NyZWVucnVsZSBzY3JlZW5zdHJva2VzCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gc2hvd2l0IHNsYW50Zm9udCB0aXRsZWZvbnQgdW5pdHBpeGVsIHZyb3VuZAorZW5kaWYKKworIiBLZXl3b3JkcyBkZWZpbmVkIGJ5IG90aGVyIG1hY3JvIHBhY2thZ2VzLCBlLmcuLCBib3hlcy5tcAoraWYgIWV4aXN0cygib3RoZXJfbXBfbWFjcm9zIikKKyAgbGV0IG90aGVyX21wX21hY3JvcyA9IDEgIiBTZXQgdGhpcyB0byAnMCcgaWYgeW91ciBzb3VyY2UgZ2V0cyB0b28gY29sb3VyZnVsCitlbmRpZgoraWYgb3RoZXJfbXBfbWFjcm9zCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gY2lyY21hcmdpbiBkZWZhdWx0ZHggZGVmYXVsdGR5CisgIHN5biBrZXl3b3JkIG1wTWFjcm8gYm94aXQgYm94am9pbiBicGF0aCBjaXJjbGVpdCBkcmF3Ym94ZWQgZHJhd2JveGVzCisgIHN5biBrZXl3b3JkIG1wTWFjcm8gZHJhd3VuYm94ZWQgZml4cG9zIGZpeHNpemUgcGljCitlbmRpZgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcKKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX21wX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX21wX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIG1wVGVYaW5zZXJ0CVN0cmluZworICBIaUxpbmsgbXBUZVhiZWdpbglTdGF0ZW1lbnQKKyAgSGlMaW5rIG1wVGVYZW5kCVN0YXRlbWVudAorICBIaUxpbmsgbXBJbnRlcm5hbAltZkludGVybmFsCisgIEhpTGluayBtcE1hY3JvCU1hY3JvCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1wIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbXBsYXllcmNvbmYudmltIGIvcnVudGltZS9zeW50YXgvbXBsYXllcmNvbmYudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYmUyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9tcGxheWVyY29uZi52aW0KQEAgLTAsMCArMSwxMTEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkgICAgbXBsYXllcigxKSBjb25maWd1cmF0aW9uIGZpbGUKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL3N5bnRheC9wY3AvbXBsYXllcmNvbmYvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDUtMjIKKyIgYXJjaC10YWc6CSAgICBjMjBiOTM4MS01ODU4LTQ0NTItYjg2Ni01NGUyZTE4OTEyMjkKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgU2V0IGlza2V5d29yZCBzaW5jZSB3ZSBuZWVkIGAtJyAoYW5kIHBvdGVudGlhbGx5IG90aGVycykgaW4ga2V5d29yZHMuCisiIEZvciB2ZXJzaW9uIDUueDogU2V0IGl0IGdsb2JhbGx5CisiIEZvciB2ZXJzaW9uIDYueDogU2V0IGl0IGxvY2FsbHkKK2lmIHZlcnNpb24gPj0gNjAwCisgIGNvbW1hbmQgLW5hcmdzPTEgU2V0SXNrIHNldGxvY2FsIGlza2V5d29yZD08YXJncz4KK2Vsc2UKKyAgY29tbWFuZCAtbmFyZ3M9MSBTZXRJc2sgc2V0IGlza2V5d29yZD08YXJncz4KK2VuZGlmCitTZXRJc2sgQCw0OC01NywtCitkZWxjb21tYW5kIFNldElzaworCisiIFRvZG8KK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mVG9kbwljb250YWluZWQgVE9ETyBGSVhNRSBYWFggTk9URQorCisiIENvbW1lbnRzCitzeW4gcmVnaW9uIG1wbGF5ZXJjb25mQ29tbWVudCAgIGRpc3BsYXkgbWF0Y2hncm91cD1tcGxheWVyY29uZkNvbW1lbnQgc3RhcnQ9JyMnIGVuZD0nJCcgY29udGFpbnM9bXBsYXllcmNvbmZUb2RvCisKKyIgUHJlUHJvYworc3luIGtleXdvcmQgbXBsYXllcmNvbmZQcmVQcm9jICBpbmNsdWRlCisKKyIgQm9vbGVhbnMKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mQm9vbGVhbiAgeWVzIG5vCisKKyIgTnVtYmVycworc3luIG1hdGNoICAgbXBsYXllcmNvbmZOdW1iZXIgICAnXDxcZFwrXD4nCisKKyIgT3B0aW9ucworc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24JaGFyZGZyYW1lZHJvcCBub21vdXNlaW5wdXQgYmFuZHdpZHRoIGR1bXBzdHJlYW0KK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uCXJ0c3Atc3RyZWFtLW92ZXItdGNwIHR2IG92ZXJsYXBzdWIgc3ViLWJnLWFscGhhCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbglzdWJmb250LW91dGxpbmUgdW5pY29kZSBmb3JtYXQgdm8gZWRsIGNvb2tpZXMKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uCWZwcyB6cmZkIGFmLWFkdiBub3NvdW5kIGF1ZGlvLWRlbnNpdHkKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uCXBhc3Nsb2dmaWxlIHZvYnN1Ym91dGluZGV4CitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIGF1dG9xIGF1dG9zeW5jIGJlbmNobWFyayBjb2xvcmtleSBub2NvbG9ya2V5CitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIGVkbG91dCBlbnF1ZXVlIGZpeGVkLXZvIGZyYW1lZHJvcCBoCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIGlkZW50aWZ5IGlucHV0IGxpcmNjb25mIGxpc3Qtb3B0aW9ucyBsb29wIG1lbnUKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgbWVudS1jZmcgbWVudS1yb290IG5vam95c3RpY2sgbm9saXJjCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIG5vcnRjIHBsYXlsaXN0IHF1aWV0IHJlYWxseS1xdWlldCBzaHVmZmxlIHNraW4KK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgc2xhdmUgc29mdHNsZWVwIHNwZWVkIHNzdGVwIHVzZS1zdGRpbiBhaWQgYWxhbmcKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgYXVkaW8tZGVtdXhlciBhdWRpb2ZpbGUgYXVkaW9maWxlLWNhY2hlCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIGNkcm9tLWRldmljZSBjYWNoZSBjZGRhIGNoYW5uZWxzIGNoYXB0ZXIKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgY29va2llcy1maWxlIGRlbXV4ZXIgZHVtcGF1ZGlvIGR1bXBmaWxlCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIGR1bXB2aWRlbyBkdmJpbiBkdmQtZGV2aWNlIGR2ZGFuZ2xlIGZvcmNlaWR4CitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIGZyYW1lcyBoci1tcDMtc2VlayBpZHggaXB2NC1vbmx5LXByb3h5IGxvYWRpZHgKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgbWMgbWYgbmkgbm9icHMgbm9leHRiYXNlZCBwYXNzd2QgcHJlZmVyLWlwdjQKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgcHJlZmVyLWlwdjYgcmF3YXVkaW8gcmF3dmlkZW8KK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgc2F2ZWlkeCBzYiBzcmF0ZSBzcyB0c2tlZXBicm9rZW4gdHNwcm9nIHRzcHJvYmUKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgdXNlciB1c2VyLWFnZW50IHZpZCB2aXZvIGR1bXBqYWNvc3ViCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIGR1bXBtaWNyb2R2ZHN1YiBkdW1wbXBzdWIgZHVtcHNhbWkgZHVtcHNydHN1Ygorc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24gICBkdW1wc3ViIGZmYWN0b3IgZmxpcC1oZWJyZXcgZm9udCBmb3JjZWRzdWJzb25seQorc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24gICBmcmliaWRpLWNoYXJzZXQgaWZvIG5vYXV0b3N1YiBvc2RsZXZlbAorc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24gICBzaWQgc2xhbmcgc3B1YWEgc3B1YWxpZ24gc3B1Z2F1c3Mgc3ViCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIHN1Yi1iZy1jb2xvciBzdWItZGVtdXhlciBzdWItZnV6emluZXNzCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIHN1Yi1uby10ZXh0LXBwIHN1YmFsaWduIHN1YmNjIHN1YmNwIHN1YmRlbGF5CitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIHN1YmZpbGUgc3ViZm9udC1hdXRvc2NhbGUgc3ViZm9udC1ibHVyCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIHN1YmZvbnQtZW5jb2Rpbmcgc3ViZm9udC1vc2Qtc2NhbGUKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgc3ViZm9udC10ZXh0LXNjYWxlIHN1YmZwcyBzdWJwb3Mgc3Vid2lkdGgKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgdXRmOCB2b2JzdWIgdm9ic3ViaWQgYWJzIGFvIGFvZmlsZSBhb3AgZGVsYXkKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgbWl4ZXIgbm93YXZlaGVhZGVyIGFhIGJwcCBicmlnaHRuZXNzIGNvbnRyYXN0CitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIGRmYm9wdHMgZGlzcGxheSBkb3VibGUgZHIgZHhyMiBmYiBmYm1vZGUKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgZmJtb2RlY29uZmlnIGZvcmNleHYgZnMgZnNtb2RlLWRvbnR1c2UgZnN0eXBlCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIGdlb21ldHJ5IGd1aXdpZCBodWUganBlZyBtb25pdG9yLWRvdGNsb2NrCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIG1vbml0b3ItaGZyZXEgbW9uaXRvci12ZnJlcSBtb25pdG9yYXNwZWN0CitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIG5vZ3JhYnBvaW50ZXIgbm9rZWVwYXNwZWN0IG5veHYgb250b3AgcGFuc2Nhbgorc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24gICByb290d2luIHNhdHVyYXRpb24gc2NyZWVudyBzdG9wLXhzY3JlZW5zYXZlciB2bQorc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24gICB2c3luYyB3aWQgeGluZXJhbWFzY3JlZW4geiB6cmJ3IHpyY3JvcCB6cmRldgorc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24gICB6cmhlbHAgenJub3JtIHpycXVhbGl0eSB6cnZkZWMgenJ4ZG9mZiBhYyBhZgorc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24gICBhZm0gYXNwZWN0IGZsaXAgbGF2ZG9wdHMgbm9hc3BlY3Qgbm9zbGljZXMKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgbm92aWRlbyBvbGRwcCBwcCBwcGhlbHAgc3NmIHN0ZXJlbyBzd3MgdmMgdmZtIHgKK3N5biBrZXl3b3JkIG1wbGF5ZXJjb25mT3B0aW9uICAgeHZpZG9wdHMgeHkgeSB6b29tIHZmIHZvcCBhdWRpby1kZWxheQorc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24gICBhdWRpby1wcmVsb2FkIGVuZHBvcyBmZm91cmNjIGluY2x1ZGUgaW5mbworc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24gICBub2F1dG9leHBhbmQgbm9za2lwIG8gb2FjIG9mIG9mcHMgb3ZjCitzeW4ga2V5d29yZCBtcGxheWVyY29uZk9wdGlvbiAgIHNraXBsaW1pdCB2IHZvYnN1Ym91dCB2b2JzdWJvdXRpZAorc3luIGtleXdvcmQgbXBsYXllcmNvbmZPcHRpb24gICBsYW1lb3B0cyBsYXZjb3B0cyBudXZvcHRzIHh2aWRlbmNvcHRzCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX21wbGF5ZXJfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbXBsYXllcl9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBtcGxheWVyY29uZlRvZG8gICAgVG9kbworICBIaUxpbmsgbXBsYXllcmNvbmZDb21tZW50IENvbW1lbnQKKyAgSGlMaW5rIG1wbGF5ZXJjb25mUHJlUHJvYyBQcmVQcm9jCisgIEhpTGluayBtcGxheWVyY29uZkJvb2xlYW4gQm9vbGVhbgorICBIaUxpbmsgbXBsYXllcmNvbmZOdW1iZXIgIE51bWJlcgorICBIaUxpbmsgbXBsYXllcmNvbmZPcHRpb24gIEtleXdvcmQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibXBsYXllcmNvbmYiCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L21zaWRsLnZpbSBiL3J1bnRpbWUvc3ludGF4L21zaWRsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjI3MGVlYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L21zaWRsLnZpbQpAQCAtMCwwICsxLDkyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIE1TIElETCAoTWljcm9zb2Z0IGRpYWxlY3Qgb2YgSW50ZXJmYWNlIERlc2NyaXB0aW9uIExhbmd1YWdlKQorIiBNYWludGFpbmVyOiAgIFZhZGltIFplaXRsaW4gPHZhZGltQHd4d2luZG93cy5vcmc+CisiIExhc3QgQ2hhbmdlOiAgMjAwMyBNYXkgMTEKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIE1pc2MgYmFzaWMKK3N5biBtYXRjaCAgIG1zaWRsSWQJCSJbYS16QS1aXVthLXpBLVowLTlfXSoiCitzeW4gbWF0Y2ggICBtc2lkbFVVSUQJCSJ7XD9bWzp4ZGlnaXQ6XV1cezh9LVwoW1s6eGRpZ2l0Ol1dXHs0fS1cKVx7M31bWzp4ZGlnaXQ6XV1cezEyfX1cPyIKK3N5biByZWdpb24gIG1zaWRsU3RyaW5nCQlzdGFydD0vIi8gIHNraXA9L1xcXChcXFxcXCkqIi8JZW5kPS8iLworc3luIG1hdGNoICAgbXNpZGxMaXRlcmFsCSJcZFwrXChcLlxkKlwpXD0iCitzeW4gbWF0Y2ggICBtc2lkbExpdGVyYWwJIlwuXGRcKyIKK3N5biBtYXRjaCAgIG1zaWRsU3BlY2lhbAljb250YWluZWQgIltdXFt7fTpdIgorCisiIENvbW1lbnRzCitzeW4ga2V5d29yZCBtc2lkbFRvZG8JCWNvbnRhaW5lZCBUT0RPIEZJWE1FIFhYWAorc3luIHJlZ2lvbiAgbXNpZGxDb21tZW50CXN0YXJ0PSIvXCoiICBlbmQ9IlwqLyIgY29udGFpbnM9bXNpZGxUb2RvCitzeW4gbWF0Y2ggICBtc2lkbENvbW1lbnQJIi8vLioiIGNvbnRhaW5zPW1zaWRsVG9kbworc3luIG1hdGNoICAgbXNpZGxDb21tZW50RXJyb3IJIlwqLyIKKworIiBDIHN0eWxlIFByZXByb2Nlc3Nvcgorc3luIHJlZ2lvbiAgbXNpZGxJbmNsdWRlZAljb250YWluZWQgc3RhcnQ9KyIrICBza2lwPStcXFwoXFxcXFwpKiIrICBlbmQ9KyIrCitzeW4gbWF0Y2ggICBtc2lkbEluY2x1ZGVkCWNvbnRhaW5lZCAiPFtePl0qPiIKK3N5biBtYXRjaCAgIG1zaWRsSW5jbHVkZQkiXlsgXHRdKiNbIFx0XSppbmNsdWRlXD5bIFx0XSpbIjxdIiBjb250YWlucz1tc2lkbEluY2x1ZGVkLG1zaWRsU3RyaW5nCitzeW4gcmVnaW9uICBtc2lkbFByZUNvbmRpdAlzdGFydD0iXlsgXHRdKiNbIFx0XSpcKGlmXD5cfGlmZGVmXD5cfGlmbmRlZlw+XHxlbGlmXD5cfGVsc2VcPlx8ZW5kaWZcPlwpIiAgc2tpcD0iXFwkIgllbmQ9IiQiIGNvbnRhaW5zPW1zaWRsQ29tbWVudCxtc2lkbENvbW1lbnRFcnJvcgorc3luIHJlZ2lvbiAgbXNpZGxEZWZpbmUJCXN0YXJ0PSJeWyBcdF0qI1sgXHRdKlwoZGVmaW5lXD5cfHVuZGVmXD5cKSIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPW1zaWRsTGl0ZXJhbCwgbXNpZGxTdHJpbmcKKworIiBBdHRyaWJ1dGVzCitzeW4ga2V5d29yZCBtc2lkbEF0dHJpYnV0ZSAgICAgIGNvbnRhaW5lZCBpbiBvdXQgcHJvcGdldCBwcm9wcHV0IHByb3BwdXRyZWYgcmV0dmFsCitzeW4ga2V5d29yZCBtc2lkbEF0dHJpYnV0ZSAgICAgIGNvbnRhaW5lZCBhZ2dyZWdhdGFibGUgYXBwb2JqZWN0IGJpbmFkYWJsZSBjb2NsYXNzIGNvbnRyb2wgY3VzdG9tIGRlZmF1bHQgZGVmYXVsdGJpbmQgZGVmYXVsdGNvbGxlbGVtIGRlZmF1bHR2YWx1ZSBkZWZhdWx0dnRhYmxlIGRpc3BpbnRlcmZhY2UgZGlzcGxheWJpbmQgZHVhbCBlbnRyeSBoZWxwY29udGV4dCBoZWxwZmlsZSBoZWxwc3RyaW5nIGhlbHBzdHJpbmdkbGwgaGlkZGVuIGlkIGltbWVkaWF0ZWJpbmQgbGNpZCBsaWJyYXJ5IGxpY2Vuc2VkIG5vbmJyb3dzYWJsZSBub25jcmVhdGFibGUgbm9uZXh0ZW5zaWJsZSBvbGVhdXRvbWF0aW9uIG9wdGlvbmFsIG9iamVjdCBwdWJsaWMgcmVhZG9ubHkgcmVxdWVzdGVkaXQgcmVzdHJpY3RlZCBzb3VyY2Ugc3RyaW5nIHVpZGVmYXVsdCB1c2VzZ2V0bGFzdGVycm9yIHZhcmFyZyB2ZXJzaW9uCitzeW4gbWF0Y2ggICBtc2lkbEF0dHJpYnV0ZSAgICAgIC91dWlkKC4qKS9oZT1zKzQgY29udGFpbnM9bXNpZGxVVUlECitzeW4gbWF0Y2ggICBtc2lkbEF0dHJpYnV0ZSAgICAgIC9oZWxwc3RyaW5nKC4qKS9oZT1zKzEwIGNvbnRhaW5zPW1zaWRsU3RyaW5nCitzeW4gcmVnaW9uICBtc2lkbEF0dHJpYnV0ZXMgICAgIHN0YXJ0PSJcWyIgZW5kPSJdIiBrZWVwZW5kIGNvbnRhaW5zPW1zaWRsU3BlY2lhbCxtc2lkbFN0cmluZyxtc2lkbEF0dHJpYnV0ZSxtc2lkbENvbW1lbnQsbXNpZGxDb21tZW50RXJyb3IKKworIiBLZXl3b3Jkcworc3luIGtleXdvcmQgbXNpZGxFbnVtCQllbnVtCitzeW4ga2V5d29yZCBtc2lkbEltcG9ydAkJaW1wb3J0IGltcG9ydGxpYgorc3luIGtleXdvcmQgbXNpZGxTdHJ1Y3QJCWludGVyZmFjZSBsaWJyYXJ5IGNvY2xhc3MKK3N5biBrZXl3b3JkIG1zaWRsVHlwZWRlZgl0eXBlZGVmCisKKyIgVHlwZXMKK3N5biBrZXl3b3JkIG1zaWRsU3RhbmRhcmRUeXBlICAgYnl0ZSBjaGFyIGRvdWJsZSBmbG9hdCBoeXBlciBpbnQgbG9uZyBzaG9ydCB2b2lkIHdjaGFyX3QKK3N5biBrZXl3b3JkIG1zaWRsU3RhbmRhcmRUeXBlICAgQk9PTCBCU1RSIEhSRVNVTFQgVkFSSUFOVCBWQVJJQU5UX0JPT0wKK3N5biByZWdpb24gIG1zaWRsU2FmZUFycmF5ICAgICAgc3RhcnQ9IlNBRkVBUlJBWSgiIGVuZD0iKSIgY29udGFpbnM9bXNpZGxTdGFuZGFyZFR5cGUKKworc3luIHN5bmMgbGluZXM9NTAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbXNpZGxfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfbXNpZGxfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbXNpZGxJbmNsdWRlCQlJbmNsdWRlCisgIEhpTGluayBtc2lkbFByZVByb2MJCVByZVByb2MKKyAgSGlMaW5rIG1zaWRsUHJlQ29uZGl0CQlQcmVDb25kaXQKKyAgSGlMaW5rIG1zaWRsRGVmaW5lCQlNYWNybworICBIaUxpbmsgbXNpZGxJbmNsdWRlZAkJU3RyaW5nCisgIEhpTGluayBtc2lkbFN0cmluZwkJU3RyaW5nCisgIEhpTGluayBtc2lkbENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIG1zaWRsVG9kbwkJVG9kbworICBIaUxpbmsgbXNpZGxTcGVjaWFsCQlTcGVjaWFsQ2hhcgorICBIaUxpbmsgbXNpZGxMaXRlcmFsCQlOdW1iZXIKKyAgSGlMaW5rIG1zaWRsVVVJRAkJTnVtYmVyCisKKyAgSGlMaW5rIG1zaWRsSW1wb3J0CQlJbmNsdWRlCisgIEhpTGluayBtc2lkbEVudW0JCVN0b3JhZ2VDbGFzcworICBIaUxpbmsgbXNpZGxTdHJ1Y3QJCVN0cnVjdHVyZQorICBIaUxpbmsgbXNpZGxUeXBlZGVmCQlUeXBlZGVmCisgIEhpTGluayBtc2lkbEF0dHJpYnV0ZQkJU3RvcmFnZUNsYXNzCisKKyAgSGlMaW5rIG1zaWRsU3RhbmRhcmRUeXBlCVR5cGUKKyAgSGlMaW5rIG1zaWRsU2FmZUFycmF5CQlUeXBlCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm1zaWRsIgorCisiIHZpOiBzZXQgdHM9OCBzdz00OgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbXNxbC52aW0gYi9ydW50aW1lL3N5bnRheC9tc3FsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzE2ZmJiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbXNxbC52aW0KQEAgLTAsMCArMSwxMDAgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgltc3FsCisiIE1haW50YWluZXI6CUx1dHogRXltZXJzIDxpeHRhYkBwb2x6aW4uY29tPgorIiBVUkw6CQlodHRwOi8vd3d3LmlzcC5kZS9kYXRhL21zcWwudmltCisiIEVtYWlsOglTdWJqZWN0OiBzZW5kIHN5bnRheF92aW0udGd6CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAxMAorIgorIiBPcHRpb25zCW1zcWxfc3FsX3F1ZXJ5ID0gMSBmb3IgU1FMIHN5bnRheCBoaWdobGlndGhpbmcgaW5zaWRlIHN0cmluZ3MKKyIJCW1zcWxfbWlubGluZXMgPSB4ICAgICB0byBzeW5jIGF0IGxlYXN0IHggbGluZXMgYmFja3dhcmRzCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBsZXQgbWFpbl9zeW50YXggPSAnbXNxbCcKK2VuZGlmCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc28gPHNmaWxlPjpwOmgvaHRtbC52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2h0bWwudmltCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKK2VuZGlmCisKK3N5biBjbHVzdGVyIGh0bWxQcmVwcm9jIGFkZD1tc3FsUmVnaW9uCisKK3N5biBjYXNlIG1hdGNoCisKKyIgSW50ZXJuYWwgVmFyaWFibGVzCitzeW4ga2V5d29yZCBtc3FsSW50VmFyIEVSUk1TRyBjb250YWluZWQKKworIiBFbnYgVmFyaWFibGVzCitzeW4ga2V5d29yZCBtc3FsRW52VmFyIFNFUlZFUl9TT0ZUV0FSRSBTRVJWRVJfTkFNRSBTRVJWRVJfVVJMIEdBVEVXQVlfSU5URVJGQUNFIGNvbnRhaW5lZAorc3luIGtleXdvcmQgbXNxbEVudlZhciBTRVJWRVJfUFJPVE9DT0wgU0VSVkVSX1BPUlQgUkVRVUVTVF9NRVRIT0QgUEFUSF9JTkZPICBjb250YWluZWQKK3N5biBrZXl3b3JkIG1zcWxFbnZWYXIgUEFUSF9UUkFOU0xBVEVEIFNDUklQVF9OQU1FIFFVRVJZX1NUUklORyBSRU1PVEVfSE9TVCBjb250YWluZWQKK3N5biBrZXl3b3JkIG1zcWxFbnZWYXIgUkVNT1RFX0FERFIgQVVUSF9UWVBFIFJFTU9URV9VU0VSIENPTlRFTl9UWVBFICBjb250YWluZWQKK3N5biBrZXl3b3JkIG1zcWxFbnZWYXIgQ09OVEVOVF9MRU5HVEggSFRUUFMgSFRUUFNfS0VZU0laRSBIVFRQU19TRUNSRVRLRVlTSVpFICBjb250YWluZWQKK3N5biBrZXl3b3JkIG1zcWxFbnZWYXIgSFRUUF9BQ0NFQ1QgSFRUUF9VU0VSX0FHRU5UIEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgbXNxbEVudlZhciBIVFRQX0ZST00gSFRUUF9SRUZFUkVSIGNvbnRhaW5lZAorCisiIElubGNsdWRlIGxMaXRlCitzeW4gaW5jbHVkZSBAbXNxbExpdGUgPHNmaWxlPjpwOmgvbGl0ZS52aW0KKworIiBNc3FsIFJlZ2lvbgorc3luIHJlZ2lvbiBtc3FsUmVnaW9uIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8ISQiIHN0YXJ0PSI8IVteIS0+RF0iIGVuZD0iPiIgY29udGFpbnM9QG1zcWxMaXRlLG1zcWwuKgorCisiIHN5bmMKK2lmIGV4aXN0cygibXNxbF9taW5saW5lcyIpCisgIGV4ZWMgInN5biBzeW5jIG1pbmxpbmVzPSIgLiBtc3FsX21pbmxpbmVzCitlbHNlCisgIHN5biBzeW5jIG1pbmxpbmVzPTEwMAorZW5kaWYKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbXNxbF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9tc3FsX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIG1zcWxDb21tZW50CQlDb21tZW50CisgIEhpTGluayBtc3FsU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIG1zcWxOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgbXNxbEZsb2F0CQlGbG9hdAorICBIaUxpbmsgbXNxbElkZW50aWZpZXIJSWRlbnRpZmllcgorICBIaUxpbmsgbXNxbEdsb2JhbElkZW50aWZpZXIJSWRlbnRpZmllcgorICBIaUxpbmsgbXNxbEludFZhcgkJSWRlbnRpZmllcgorICBIaUxpbmsgbXNxbEVudlZhcgkJSWRlbnRpZmllcgorICBIaUxpbmsgbXNxbEZ1bmN0aW9ucwkJRnVuY3Rpb24KKyAgSGlMaW5rIG1zcWxSZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgbXNxbENvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluayBtc3FsU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG1zcWxUeXBlCQlUeXBlCisgIEhpTGluayBtc3FsSW5jbHVkZQkJSW5jbHVkZQorICBIaUxpbmsgbXNxbERlZmluZQkJRGVmaW5lCisgIEhpTGluayBtc3FsU3BlY2lhbENoYXIJU3BlY2lhbENoYXIKKyAgSGlMaW5rIG1zcWxQYXJlbnRFcnJvcglFcnJvcgorICBIaUxpbmsgbXNxbFRvZG8JCVRvZG8KKyAgSGlMaW5rIG1zcWxPcGVyYXRvcgkJT3BlcmF0b3IKKyAgSGlMaW5rIG1zcWxSZWxhdGlvbgkJT3BlcmF0b3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibXNxbCIKKworaWYgbWFpbl9zeW50YXggPT0gJ21zcWwnCisgIHVubGV0IG1haW5fc3ludGF4CitlbmRpZgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbXVzaC52aW0gYi9ydW50aW1lL3N5bnRheC9tdXNoLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTY1OTI3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbXVzaC52aW0KQEAgLTAsMCArMSwxMzIgQEAKKyIgTVVTSGNvZGUgc3ludGF4IGZpbGUKKyIgTWFpbnRhaW5lcjoJQmVrIE9iZXJpbiA8Z29zc2FtZXJAdGVydGl1cy5uZXQuYXU+CisiIExhc3QgdXBkYXRlZCBieSBSaW1uYWwgb24gTW9uIEF1ZyAyMCAwODoyODo1NiBNRFQgMjAwMQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKworIiByZWd1bGFyIG11c2ggZnVuY3Rpb25zCitzeW50YXgga2V5d29yZCBtdXNoRnVuY3Rpb24gY29udGFpbmVkIGFicyBhY29zIGFkZCBhZnRlciBhbmQgYW5kZmxhZ3MgYXBvc3MKK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgYXNpbiBhdGFuIGJlZm9yZSBjYXBzdHIgY2F0IGNlaWwgY2VudGVyCitzeW50YXgga2V5d29yZCBtdXNoRnVuY3Rpb24gY29udGFpbmVkIGNvbXAgY29uIGNvbm4gY29udHJvbHMgY29udnNlY3MgY29udnRpbWUKK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgY29zIGRlZmF1bHQgZGVsZXRlIGRpc3QyZCBkaXN0M2QgZGl2IGUKK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgZWRlZmF1bHQgZWRpdCBlbGVtZW50cyBlbG9jayBlcSBlc2NhcGUKK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgZXhpdCBleHAgZXh0cmFjdCBmZGl2IGZpbHRlciBmaXJzdCBmbGFncworc3ludGF4IGtleXdvcmQgbXVzaEZ1bmN0aW9uIGNvbnRhaW5lZCBmbG9vciBmb2xkIGZvcmVhY2ggZmluZGFibGUgZnVsbG5hbWUgZ2V0CitzeW50YXgga2V5d29yZCBtdXNoRnVuY3Rpb24gY29udGFpbmVkIGdldF9ldmFsIGdyYWIgZ3QgZ3RlIGhhc2F0dHIgaGFzZmxhZworc3ludGF4IGtleXdvcmQgbXVzaEZ1bmN0aW9uIGNvbnRhaW5lZCBob21lIGlkbGUgaW5kZXggaW5zZXJ0IGlzZGJyZWYgaXNudW0KK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgaXN3b3JkIGl0ZXIgbGFzdCBsYXR0ciBsY29uIGxjc3RyCitzeW50YXgga2V5d29yZCBtdXNoRnVuY3Rpb24gY29udGFpbmVkIGxkZWxldGUgbGVmdCBsZXhpdHMgbGp1c3QgbG4gbG51bSBsb2MKK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgbG9jYXRlIGxvY2sgbG9nIGxwb3MgbHQgbHRlIGx3aG8gbWFwCitzeW50YXgga2V5d29yZCBtdXNoRnVuY3Rpb24gY29udGFpbmVkIG1hdGNoIG1hdGNoYWxsIG1heCBtZW1iZXIgbWVyZ2UgbWlkIG1pbgorc3ludGF4IGtleXdvcmQgbXVzaEZ1bmN0aW9uIGNvbnRhaW5lZCBtaXggbW9kIG1vbmV5IG11ZG5hbWUgbXVsIG11bmdlIG5hbWUKK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgbmVhcmJ5IG5lcSBuZXh0IG5vdCBudW0gb2JqIG9iamV2YWwKK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgb2JqbWVtIG9yIG9yZmxhZ3Mgb3duZXIgcGFyZW50IHBhcnNlIHBpCitzeW50YXgga2V5d29yZCBtdXNoRnVuY3Rpb24gY29udGFpbmVkIHBvcnRzIHBvcyBwb3NzIHBvd2VyIHIgcmFuZCByZW1vdmUgcmVwZWF0CitzeW50YXgga2V5d29yZCBtdXNoRnVuY3Rpb24gY29udGFpbmVkIHJlcGxhY2UgcmVzdCByZXZlcnNlIHJldndvcmRzIHJpZ2h0CitzeW50YXgga2V5d29yZCBtdXNoRnVuY3Rpb24gY29udGFpbmVkIHJqdXN0IHJsb2Mgcm9vbSByb3VuZCBzIHNjcmFtYmxlIHNlYXJjaAorc3ludGF4IGtleXdvcmQgbXVzaEZ1bmN0aW9uIGNvbnRhaW5lZCBzZWNzIHNlY3VyZSBzZXRkaWZmIHNldGludGVyIHNldHEKK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgc2V0dW5pb24gc2h1ZmZsZSBzaWduIHNpbiBzb3J0IHNvcnRieQorc3ludGF4IGtleXdvcmQgbXVzaEZ1bmN0aW9uIGNvbnRhaW5lZCBzcGFjZSBzcGxpY2Ugc3FydCBzcXVpc2ggc3RhcnR0aW1lIHN0YXRzCitzeW50YXgga2V5d29yZCBtdXNoRnVuY3Rpb24gY29udGFpbmVkIHN0cmxlbiBzdHJtYXRjaCBzdWIgc3ViaiBzd2l0Y2ggdGFuIHRpbWUKK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgdHJpbSB0cnVuYyB0eXBlIHUgdWNzdHIgdWRlZmF1bHQgdWxvY2FsCitzeW50YXgga2V5d29yZCBtdXNoRnVuY3Rpb24gY29udGFpbmVkIHYgdmVyc2lvbiB2aXNpYmxlIHdoZXJlIHdvcmRwb3Mgd29yZHMKK3N5bnRheCBrZXl3b3JkIG11c2hGdW5jdGlvbiBjb250YWluZWQgeGNvbiB4b3IKKyIgb25seSBoaWdobGlnaCBmdW5jdGlvbnMgd2hlbiB0aGV5IGhhdmUgYW4gaW4tYnJhY2tldCBpbW1lZGlhdGVseSBhZnRlcgorc3ludGF4IG1hdGNoIG11c2hGdW5jdGlvbkJyYWNrZXRzICAiXGlcSSooIiBjb250YWlucz1tdXNoRnVuY3Rpb24KKworIiByZWd1bGFyIG11c2ggY29tbWFuZHMKK3N5bnRheCBrZXl3b3JkIG11c2hBdENvbW1hbmRMaXN0IGNvbnRhaW5lZCBAYWxpYXMgQGNob3duIEBjbG9uZSBAY3JlYXRlCitzeW50YXgga2V5d29yZCBtdXNoQXRDb21tYW5kTGlzdCBjb250YWluZWQgQGRlY29tcGlsZSBAZGVzdHJveSBAZG9pbmcgQGRvbGlzdAorc3ludGF4IGtleXdvcmQgbXVzaEF0Q29tbWFuZExpc3QgY29udGFpbmVkIEBkcmFpbiBAZWRpdCBAZW1pdCBAZW50cmFuY2VzIEBmZW1pdAorc3ludGF4IGtleXdvcmQgbXVzaEF0Q29tbWFuZExpc3QgY29udGFpbmVkIEBmb3JjZSBAZnBvc2UgQGZzYXkgQGhhbHQgQGxhc3QKK3N5bnRheCBrZXl3b3JkIG11c2hBdENvbW1hbmRMaXN0IGNvbnRhaW5lZCBAbGluayBAbGlzdCBAbGlzdG1vdGQgQGxvY2sgQG11ZHdobworc3ludGF4IGtleXdvcmQgbXVzaEF0Q29tbWFuZExpc3QgY29udGFpbmVkIEBtdmF0dHIgQG5hbWUgQG5vdGlmeSBAb2VtaXQgQHBhcmVudAorc3ludGF4IGtleXdvcmQgbXVzaEF0Q29tbWFuZExpc3QgY29udGFpbmVkIEBwYXNzd29yZCBAcGVtaXQgQHBzIEBxdW90YSBAcm9ib3QKK3N5bnRheCBrZXl3b3JkIG11c2hBdENvbW1hbmRMaXN0IGNvbnRhaW5lZCBAc2VhcmNoIEBzZXQgQHN0YXRzIEBzd2VlcCBAc3dpdGNoCitzeW50YXgga2V5d29yZCBtdXNoQXRDb21tYW5kTGlzdCBjb250YWluZWQgQHRlbGVwb3J0IEB0cmlnZ2VyIEB1bmxpbmsgQHVubG9jaworc3ludGF4IGtleXdvcmQgbXVzaEF0Q29tbWFuZExpc3QgY29udGFpbmVkIEB2ZXJiIEB3YWl0IEB3aXBlCitzeW50YXggbWF0Y2ggbXVzaENvbW1hbmQgICJAXGlcSSoiIGNvbnRhaW5zPW11c2hBdENvbW1hbmRMaXN0CisKKworc3ludGF4IGtleXdvcmQgbXVzaENvbW1hbmQgZHJvcCBlbnRlciBleGFtaW5lIGdldCBnaXZlIGdvdG8gaGVscCBpbnZlbnRvcnkKK3N5bnRheCBrZXl3b3JkIG11c2hDb21tYW5kIGtpbGwgbGVhdmUgbG9vayBuZXdzIHBhZ2UgcG9zZSBzYXkgc2NvcmUgdXNlCitzeW50YXgga2V5d29yZCBtdXNoQ29tbWFuZCB2ZXJzaW9uIHdoaXNwZXIgRE9JTkcgTE9HT1VUIE9VVFBVVFBSRUZJWAorc3ludGF4IGtleXdvcmQgbXVzaENvbW1hbmQgT1VUUFVUU1VGRklYIFFVSVQgU0VTU0lPTiBXSE8KKworc3ludGF4IG1hdGNoIG11c2hTcGVjaWFsICAgICAiXCpcfCFcfD1cfC1cfFxcXHwrIgorc3ludGF4IG1hdGNoIG11c2hTcGVjaWFsMiBjb250YWluZWQgICAgICJcKiIKKworc3ludGF4IG1hdGNoIG11c2hJZGVudGlmaWVyICAgIiZbXiBdXCsiCisKK3N5bnRheCBtYXRjaCBtdXNoVmFyaWFibGUgICAiJXJcfCV0XHwlY3JcfCVbQS1aYS16MC05XVwrXHwlI1x8IyNcfGhlcmUiCisKKyIgbnVtYmVycworc3ludGF4IG1hdGNoIG11c2hOdW1iZXIJK1swLTldXCsrCisKKyIgQSBjb21tZW50IGxpbmUgc3RhcnRzIHdpdGggYSBvciAjIG9yICIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lCisiIG9yIGFuIEBACitzeW50YXgga2V5d29yZCBtdXNoVG9kbyBjb250YWluZWQJVE9ETyBGSVhNRSBYWFgKK3N5bnRheCBtYXRjaAltdXNoQ29tbWVudAkrXlxzKkBALiokKwljb250YWlucz1tdXNoVG9kbworc3ludGF4IG1hdGNoCW11c2hDb21tZW50CSteIi4qJCsJY29udGFpbnM9bXVzaFRvZG8KK3N5bnRheCBtYXRjaAltdXNoQ29tbWVudAkrXiMuKiQrCWNvbnRhaW5zPW11c2hUb2RvCisKK3N5bnRheCByZWdpb24JbXVzaEZ1bmNCb3VuZGFyaWVzIHN0YXJ0PSJcWyIgZW5kPSJcXSIgY29udGFpbnM9bXVzaEZ1bmN0aW9uLG11c2hGbGFnLG11c2hBdHRyaWJ1dGVzLG11c2hOdW1iZXIsbXVzaENvbW1hbmQsbXVzaFZhcmlhYmxlLG11c2hTcGVjaWFsMgorCisiIEZMQUdTCitzeW50YXgga2V5d29yZCBtdXNoRmxhZyBQTEFZRVIgQUJPREUgQlVJTERFUiBDSE9XTl9PSyBEQVJLIEZMT0FUSU5HCitzeW50YXgga2V5d29yZCBtdXNoRmxhZyBHT0lORyBIQVZFTiBJTkhFUklUIEpVTVBfT0sgS0VZIExJTktfT0sgTU9OSVRPUgorc3ludGF4IGtleXdvcmQgbXVzaEZsYWcgTk9TUE9PRiBPUEFRVUUgUVVJRVQgU1RJQ0tZIFRSQUNFIFVORklOREFCTEUgVklTVUFMCitzeW50YXgga2V5d29yZCBtdXNoRmxhZyBXSVpBUkQgUEFSRU5UX09LIFpPTkUgQVVESUJMRSBDT05ORUNURUQgREVTVFJPWV9PSworc3ludGF4IGtleXdvcmQgbXVzaEZsYWcgRU5URVJfT0sgSEFMVEVEIElNTU9SVEFMIExJR0hUIE1ZT1BJQyBQVVBQRVQgVEVSU0UKK3N5bnRheCBrZXl3b3JkIG11c2hGbGFnIFJPQk9UIFNBRkUgVFJBTlNQQVJFTlQgVkVSQk9TRSBDT05UUk9MX09LIENPTU1BTkRTCisKK3N5bnRheCBrZXl3b3JkIG11c2hBdHRyaWJ1dGUgYWFoZWFyIGFjbG9uZSBhY29ubmVjdCBhZGVzYyBhZGZhaWwgYWRpc2Nvbm5lY3QKK3N5bnRheCBrZXl3b3JkIG11c2hBdHRyaWJ1dGUgYWRyb3AgYWVmYWlsIGFlbnRlciBhZmFpbCBhZ2ZhaWwgYWhlYXIgYWtpbGwKK3N5bnRheCBrZXl3b3JkIG11c2hBdHRyaWJ1dGUgYWxlYXZlIGFsZmFpbCBhbGlhcyBhbWhlYXIgYW1vdmUgYXBheSBhcmZhaWwKK3N5bnRheCBrZXl3b3JkIG11c2hBdHRyaWJ1dGUgYXN1Y2MgYXRmYWlsIGF0cG9ydCBhdWZhaWwgYXVzZSBhd2F5IGNoYXJnZXMKK3N5bnRheCBrZXl3b3JkIG11c2hBdHRyaWJ1dGUgY29zdCBkZXNjIGRmYWlsIGRyb3AgZWFsaWFzIGVmYWlsIGVudGVyIGZhaWwKK3N5bnRheCBrZXl3b3JkIG11c2hBdHRyaWJ1dGUgZmlsdGVyIGZvcndhcmRsaXN0IGdmYWlsIGlkZXNjIGlkbGUgaW5maWx0ZXIKK3N5bnRheCBrZXl3b3JkIG11c2hBdHRyaWJ1dGUgaW5wcmVmaXgga2lsbCBsYWxpYXMgbGFzdCBsYXN0c2l0ZSBsZWF2ZSBsZmFpbAorc3ludGF4IGtleXdvcmQgbXVzaEF0dHJpYnV0ZSBsaXN0ZW4gbW92ZSBvZGVzYyBvZGZhaWwgb2Ryb3Agb2VmYWlsIG9lbnRlcgorc3ludGF4IGtleXdvcmQgbXVzaEF0dHJpYnV0ZSBvZmFpbCBvZ2ZhaWwgb2tpbGwgb2xlYXZlIG9sZmFpbCBvbW92ZSBvcGF5CitzeW50YXgga2V5d29yZCBtdXNoQXR0cmlidXRlIG9yZmFpbCBvc3VjYyBvdGZhaWwgb3Rwb3J0IG91ZmFpbCBvdXNlIG94ZW50ZXIKK3N5bnRheCBrZXl3b3JkIG11c2hBdHRyaWJ1dGUgb3hsZWF2ZSBveHRwb3J0IHBheSBwcmVmaXggcmVqZWN0IHJmYWlsIHJ1bm91dAorc3ludGF4IGtleXdvcmQgbXVzaEF0dHJpYnV0ZSBzZW1hcGhvcmUgc2V4IHN0YXJ0dXAgc3VjYyB0ZmFpbCB0cG9ydCB1ZmFpbAorc3ludGF4IGtleXdvcmQgbXVzaEF0dHJpYnV0ZSB1c2UgdmEgdmIgdmMgdmQgdmUgdmYgdmcgdmggdmkgdmogdmsgdmwgdm0gdm4KK3N5bnRheCBrZXl3b3JkIG11c2hBdHRyaWJ1dGUgdm8gdnAgdnEgdnIgdnMgdnQgdnUgdnYgdncgdnggdnkgdnoKKworCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbXVzaF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9tdXNoX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICBIaUxpbmsgbXVzaEF0dHJpYnV0ZSAgQ29uc3RhbnQKKyAgSGlMaW5rIG11c2hDb21tYW5kICAgIEZ1bmN0aW9uCisgIEhpTGluayBtdXNoQ29tbWVudCAgICBDb21tZW50CisgIEhpTGluayBtdXNoTnVtYmVyICAgICBOdW1iZXIKKyAgSGlMaW5rIG11c2hTZXR0aW5nICAgIFByZVByb2MKKyAgSGlMaW5rIG11c2hGdW5jdGlvbiAgIFN0YXRlbWVudAorICBIaUxpbmsgbXVzaFZhcmlhYmxlICAgSWRlbnRpZmllcgorICBIaUxpbmsgbXVzaFNwZWNpYWwgICAgU3BlY2lhbAorICBIaUxpbmsgbXVzaFRvZG8gICAgICAgVG9kbworICBIaUxpbmsgbXVzaEZsYWcgICAgICAgU3BlY2lhbAorICBIaUxpbmsgbXVzaElkZW50aWZpZXIgSWRlbnRpZmllcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJtdXNoIgorCisiIG11c2g6IHRzPTE3CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9tdXR0cmMudmltIGIvcnVudGltZS9zeW50YXgvbXV0dHJjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTFmMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbXV0dHJjLnZpbQpAQCAtMCwwICsxLDI0OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU11dHQgc2V0dXAgZmlsZXMKKyIgTWFpbnRhaW5lcjoJUHJlYmVuICdQZXBwZScgR3VsZGJlcmcgPHBlcHBlLXZpbUB3aWVsZGVycy5vcmc+CisiIENvbnRyaWJ1dG9yOglHYXJ5IEpvaG5zb24gPGdhcnlqb2huQHNway5hZ2lsZW50LmNvbT4KKyIgTGFzdCBDaGFuZ2U6CTI3IE1heSAyMDA0CisKKyIgVGhpcyBmaWxlIGNvdmVycyBtdXR0IHZlcnNpb24gMS40LjIuMWkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFNldCB0aGUga2V5d29yZCBjaGFyYWN0ZXJzCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNldCBpc2s9QCw0OC01NyxfLC0KK2Vsc2UKKyAgc2V0bG9jYWwgaXNrPUAsNDgtNTcsXywtCitlbmRpZgorCitzeW4gbWF0Y2ggbXV0dHJjQ29tbWVudAkJIl4jLiokIgorc3luIG1hdGNoIG11dHRyY0NvbW1lbnQJCSJbXlxcXSMuKiQibGM9MQorCisiIEVzY2FwZSBzZXF1ZW5jZXMgKGJhY2stdGljayBhbmQgcGlwZSBnb2VzIGhlcmUgdG9vKQorc3luIG1hdGNoIG11dHRyY0VzY2FwZQkJK1xcWyN0bnIiJ0NjXSsKK3N5biBtYXRjaCBtdXR0cmNFc2NhcGUJCStbYHxdKworCisiIFRoZSB2YXJpYWJsZXMgdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMKK3N5biBtYXRjaCAgbXV0dHJjU3RyaW5nCQkiPVxzKlteICMiJ11cKyJsYz0xIGNvbnRhaW5zPW11dHRyY0VzY2FwZQorc3luIHJlZ2lvbiBtdXR0cmNTdHJpbmcJCXN0YXJ0PSsiK21zPWUgc2tpcD0rXFwiKyBlbmQ9KyIrIGNvbnRhaW5zPW11dHRyY0VzY2FwZSxtdXR0cmNTZXQsbXV0dHJjVW5zZXQsbXV0dHJjUmVzZXQsbXV0dHJjVG9nZ2xlLG11dHRyY01hY3JvLG11dHRyY0NvbW1hbmQKK3N5biByZWdpb24gbXV0dHJjU3RyaW5nCQlzdGFydD0rJyttcz1lIHNraXA9K1xcJysgZW5kPSsnKyBjb250YWlucz1tdXR0cmNFc2NhcGUsbXV0dHJjU2V0LG11dHRyY1Vuc2V0LG11dHRyY1Jlc2V0LG11dHRyY1RvZ2dsZSxtdXR0cmNNYWNybyxtdXR0cmNDb21tYW5kCisKK3N5biBtYXRjaCBtdXR0cmNTcGVjaWFsCQkrXChbJyJdXCkhXDErCisKKyIgTnVtYmVycyBhbmQgUXVhZG9wdGlvbnMgbWF5IGJlIHN1cnJvdW5kZWQgYnkgIiBvciAnCitzeW4gbWF0Y2ggbXV0dHJjTnVtYmVyCQkvPVxzKlxkXCsvbGM9MQorc3luIG1hdGNoIG11dHRyY051bWJlcgkJLz1ccyoiXGRcKyIvbGM9MQorc3luIG1hdGNoIG11dHRyY051bWJlcgkJLz1ccyonXGRcKycvbGM9MQorc3luIG1hdGNoIG11dHRyY1F1YWRvcHQJCSs9XHMqXChhc2stXClcPVwoeWVzXHxub1wpK2xjPTEKK3N5biBtYXRjaCBtdXR0cmNRdWFkb3B0CQkrPVxzKiJcKGFzay1cKVw9XCh5ZXNcfG5vXCkiK2xjPTEKK3N5biBtYXRjaCBtdXR0cmNRdWFkb3B0CQkrPVxzKidcKGFzay1cKVw9XCh5ZXNcfG5vXCknK2xjPTEKKworIiBOb3cgY2F0Y2ggc29tZSBlbWFpbCBhZGRyZXNzZXMgYW5kIGhlYWRlcnMgKHB1cmlmaWVkIHZlcnNpb24gZnJvbSBtYWlsLnZpbSkKK3N5biBtYXRjaCBtdXR0cmNFbWFpbAkJIlthLXpBLVowLTkuXy1dXCtAW2EtekEtWjAtOS4vLV1cKyIKK3N5biBtYXRjaCBtdXR0cmNIZWFkZXIJCSJcPFwoRnJvbVx8VG9cfENjXHxCY2NcfFJlcGx5LVRvXHxTdWJqZWN0XHxSZXR1cm4tUGF0aFx8UmVjZWl2ZWRcfERhdGVcfFJlcGxpZWRcfEF0dGFjaFwpXD46XD0iCisKK3N5biBtYXRjaCAgIG11dHRyY0tleVNwZWNpYWwJY29udGFpbmVkICtcKFxcW0NjJyJdXHxcXlx8XFxbMDFdXGRcezJ9XCkrCitzeW4gbWF0Y2ggICBtdXR0cmNLZXkJCWNvbnRhaW5lZCAiXFNcKyIJCQljb250YWlucz1tdXR0cmNLZXlTcGVjaWFsCitzeW4gcmVnaW9uICBtdXR0cmNLZXkJCWNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCWNvbnRhaW5zPW11dHRyY0tleVNwZWNpYWwKK3N5biByZWdpb24gIG11dHRyY0tleQkJY29udGFpbmVkIHN0YXJ0PSsnKyBza2lwPStcXFxcXHxcXCcrIGVuZD0rJysJY29udGFpbnM9bXV0dHJjS2V5U3BlY2lhbAorc3luIG1hdGNoICAgbXV0dHJjS2V5TmFtZQljb250YWluZWQgIlw8ZlwoXGRcfDEwXClcPiIKK3N5biBtYXRjaCAgIG11dHRyY0tleU5hbWUJY29udGFpbmVkICJcXFt0cm5lXSIKK3N5biBtYXRjaCAgIG11dHRyY0tleU5hbWUJY29udGFpbmVkICI8XChCYWNrU3BhY2VcfERlbGV0ZVx8RG93blx8RW5kXHxFbnRlclx8RXNjXHxIb21lXHxJbnNlcnRcfExlZnRcfFBhZ2VEb3duXHxQYWdlVXBcfFJldHVyblx8UmlnaHRcfFNwYWNlXHxUYWJcfFVwXCk+IgorCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBhbGxvd184Yml0IGFsbG93X2Fuc2kgYXJyb3dfY3Vyc29yIGFzY2lpX2NoYXJzIGFza2JjYyBhc2tjYyBhdHRhY2hfc3BsaXQKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGF1dG9fdGFnIGF1dG9lZGl0IGJlZXAgYmVlcF9uZXcgYm91bmNlX2RlbGl2ZXJlZCBjaGVja19uZXcgY29sbGFwc2VfdW5yZWFkCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBjb25maXJtYXBwZW5kIGNvbmZpcm1jcmVhdGUgZGVsZXRlX3VudGFnIGRpZ2VzdF9jb2xsYXBzZSBkdXBsaWNhdGVfdGhyZWFkcworc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgZWRpdF9oZHJzIGVkaXRfaGVhZGVycyBlbmNvZGVfZnJvbSBlbnZlbG9wZV9mcm9tIGZhc3RfcmVwbHkgZmNjX2F0dGFjaAorc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgZmNjX2NsZWFyIGZvbGxvd3VwX3RvIGZvcmNlX25hbWUgZm9yd19kZWNvZGUgZm9yd19kZWNyeXB0IGZvcndfcXVvdGUKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGZvcndhcmRfZGVjb2RlIGZvcndhcmRfZGVjcnlwdCBmb3J3YXJkX3F1b3RlIGhkcnMgaGVhZGVyIGhlbHAgaGlkZGVuX2hvc3QKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGhpZGVfbGltaXRlZCBoaWRlX21pc3NpbmcgaGlkZV90b3BfbGltaXRlZCBoaWRlX3RvcF9taXNzaW5nIGlnbm9yZV9saXN0X3JlcGx5X3RvCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbWFwX2ZvcmNlX3NzbCBpbWFwX2xpc3Rfc3Vic2NyaWJlZCBpbWFwX3Bhc3NpdmUgaW1hcF9wZWVrIGltYXBfc2VydmVybm9pc2UKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGltcGxpY2l0X2F1dG92aWV3IGtlZXBfZmxhZ2dlZCBtYWlsY2FwX3Nhbml0aXplIG1haWxkaXJfdHJhc2ggbWFya19vbGQgbWFya2Vycworc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgbWVudV9zY3JvbGwgbWV0YV9rZXkgbWV0b28gbWhfcHVyZ2UgbWltZV9mb3J3YXJkX2RlY29kZSBwYWdlcl9zdG9wIHBncF9hdXRvZW5jcnlwdAorc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgcGdwX2F1dG9zaWduIHBncF9pZ25vcmVfc3Via2V5cyBwZ3BfbG9uZ19pZHMgcGdwX3JlcGx5ZW5jcnlwdCBwZ3BfcmVwbHlzaWduCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBwZ3BfcmVwbHlzaWduZW5jcnlwdGVkIHBncF9yZXRhaW5hYmxlX3NpZ3MgcGdwX3Nob3dfdW51c2FibGUgcGdwX3N0cmljdF9lbmMKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIHBpcGVfZGVjb2RlIHBpcGVfc3BsaXQgcG9wX2F1dGhfdHJ5X2FsbCBwb3BfbGFzdCBwcmludF9kZWNvZGUgcHJpbnRfc3BsaXQKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIHByb21wdF9hZnRlciByZWFkX29ubHkgcmVwbHlfc2VsZiByZXNvbHZlIHJldmVyc2VfYWxpYXMgcmV2ZXJzZV9uYW1lCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCByZXZlcnNlX3JlYWxuYW1lIHJmYzIwNDdfcGFyYW1ldGVycyBzYXZlX2FkZHJlc3Mgc2F2ZV9lbXB0eSBzYXZlX25hbWUgc2NvcmUKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIHNpZ19kYXNoZXMgc2lnX29uX3RvcCBzbWFydF93cmFwIHNvcnRfcmUgc3NsX3VzZV9zc2x2MiBzc2xfdXNlX3NzbHYzIHNzbF91c2VfdGxzdjEKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIHNzbF91c2VzeXN0ZW1jZXJ0cyBzdGF0dXNfb25fdG9wIHN0cmljdF90aHJlYWRzIHN1c3BlbmQgdGV4dF9mbG93ZWQgdGhvcm91Z2hfc2VhcmNoCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCB0aHJlYWRfcmVjZWl2ZWQgdGlsZGUgdW5jb2xsYXBzZV9qdW1wIHVzZV84Yml0bWltZSB1c2VfZG9tYWluIHVzZV9mcm9tIHVzZV9pcHY2CitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCB1c2VyX2FnZW50IHdhaXRfa2V5IHdlZWQgd3JhcF9zZWFyY2ggd3JpdGVfYmNjCisKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIG5vYWxsb3dfOGJpdCBub2FsbG93X2Fuc2kgbm9hcnJvd19jdXJzb3Igbm9hc2NpaV9jaGFycyBub2Fza2JjYyBub2Fza2NjCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBub2F0dGFjaF9zcGxpdCBub2F1dG9fdGFnIG5vYXV0b2VkaXQgbm9iZWVwIG5vYmVlcF9uZXcgbm9ib3VuY2VfZGVsaXZlcmVkCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBub2NoZWNrX25ldyBub2NvbGxhcHNlX3VucmVhZCBub2NvbmZpcm1hcHBlbmQgbm9jb25maXJtY3JlYXRlIG5vZGVsZXRlX3VudGFnCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBub2RpZ2VzdF9jb2xsYXBzZSBub2R1cGxpY2F0ZV90aHJlYWRzIG5vZWRpdF9oZHJzIG5vZWRpdF9oZWFkZXJzIG5vZW5jb2RlX2Zyb20KK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIG5vZW52ZWxvcGVfZnJvbSBub2Zhc3RfcmVwbHkgbm9mY2NfYXR0YWNoIG5vZmNjX2NsZWFyIG5vZm9sbG93dXBfdG8gbm9mb3JjZV9uYW1lCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBub2ZvcndfZGVjb2RlIG5vZm9yd19kZWNyeXB0IG5vZm9yd19xdW90ZSBub2ZvcndhcmRfZGVjb2RlIG5vZm9yd2FyZF9kZWNyeXB0CitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBub2ZvcndhcmRfcXVvdGUgbm9oZHJzIG5vaGVhZGVyIG5vaGVscCBub2hpZGRlbl9ob3N0IG5vaGlkZV9saW1pdGVkIG5vaGlkZV9taXNzaW5nCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBub2hpZGVfdG9wX2xpbWl0ZWQgbm9oaWRlX3RvcF9taXNzaW5nIG5vaWdub3JlX2xpc3RfcmVwbHlfdG8gbm9pbWFwX2ZvcmNlX3NzbAorc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgbm9pbWFwX2xpc3Rfc3Vic2NyaWJlZCBub2ltYXBfcGFzc2l2ZSBub2ltYXBfcGVlayBub2ltYXBfc2VydmVybm9pc2UKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIG5vaW1wbGljaXRfYXV0b3ZpZXcgbm9rZWVwX2ZsYWdnZWQgbm9tYWlsY2FwX3Nhbml0aXplIG5vbWFpbGRpcl90cmFzaCBub21hcmtfb2xkCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBub21hcmtlcnMgbm9tZW51X3Njcm9sbCBub21ldGFfa2V5IG5vbWV0b28gbm9taF9wdXJnZSBub21pbWVfZm9yd2FyZF9kZWNvZGUKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIG5vcGFnZXJfc3RvcCBub3BncF9hdXRvZW5jcnlwdCBub3BncF9hdXRvc2lnbiBub3BncF9pZ25vcmVfc3Via2V5cyBub3BncF9sb25nX2lkcworc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgbm9wZ3BfcmVwbHllbmNyeXB0IG5vcGdwX3JlcGx5c2lnbiBub3BncF9yZXBseXNpZ25lbmNyeXB0ZWQgbm9wZ3BfcmV0YWluYWJsZV9zaWdzCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBub3BncF9zaG93X3VudXNhYmxlIG5vcGdwX3N0cmljdF9lbmMgbm9waXBlX2RlY29kZSBub3BpcGVfc3BsaXQgbm9wb3BfYXV0aF90cnlfYWxsCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBub3BvcF9sYXN0IG5vcHJpbnRfZGVjb2RlIG5vcHJpbnRfc3BsaXQgbm9wcm9tcHRfYWZ0ZXIgbm9yZWFkX29ubHkgbm9yZXBseV9zZWxmCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBub3Jlc29sdmUgbm9yZXZlcnNlX2FsaWFzIG5vcmV2ZXJzZV9uYW1lIG5vcmV2ZXJzZV9yZWFsbmFtZSBub3JmYzIwNDdfcGFyYW1ldGVycworc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgbm9zYXZlX2FkZHJlc3Mgbm9zYXZlX2VtcHR5IG5vc2F2ZV9uYW1lIG5vc2NvcmUgbm9zaWdfZGFzaGVzIG5vc2lnX29uX3RvcAorc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgbm9zbWFydF93cmFwIG5vc29ydF9yZSBub3NzbF91c2Vfc3NsdjIgbm9zc2xfdXNlX3NzbHYzIG5vc3NsX3VzZV90bHN2MQorc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgbm9zc2xfdXNlc3lzdGVtY2VydHMgbm9zdGF0dXNfb25fdG9wIG5vc3RyaWN0X3RocmVhZHMgbm9zdXNwZW5kIG5vdGV4dF9mbG93ZWQKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIG5vdGhvcm91Z2hfc2VhcmNoIG5vdGhyZWFkX3JlY2VpdmVkIG5vdGlsZGUgbm91bmNvbGxhcHNlX2p1bXAgbm91c2VfOGJpdG1pbWUKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIG5vdXNlX2RvbWFpbiBub3VzZV9mcm9tIG5vdXNlX2lwdjYgbm91c2VyX2FnZW50IG5vd2FpdF9rZXkgbm93ZWVkIG5vd3JhcF9zZWFyY2gKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIG5vd3JpdGVfYmNjCisKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGludmFsbG93XzhiaXQgaW52YWxsb3dfYW5zaSBpbnZhcnJvd19jdXJzb3IgaW52YXNjaWlfY2hhcnMgaW52YXNrYmNjIGludmFza2NjCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZhdHRhY2hfc3BsaXQgaW52YXV0b190YWcgaW52YXV0b2VkaXQgaW52YmVlcCBpbnZiZWVwX25ldyBpbnZib3VuY2VfZGVsaXZlcmVkCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZjaGVja19uZXcgaW52Y29sbGFwc2VfdW5yZWFkIGludmNvbmZpcm1hcHBlbmQgaW52Y29uZmlybWNyZWF0ZSBpbnZkZWxldGVfdW50YWcKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGludmRpZ2VzdF9jb2xsYXBzZSBpbnZkdXBsaWNhdGVfdGhyZWFkcyBpbnZlZGl0X2hkcnMgaW52ZWRpdF9oZWFkZXJzIGludmVuY29kZV9mcm9tCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZlbnZlbG9wZV9mcm9tIGludmZhc3RfcmVwbHkgaW52ZmNjX2F0dGFjaCBpbnZmY2NfY2xlYXIgaW52Zm9sbG93dXBfdG8gaW52Zm9yY2VfbmFtZQorc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgaW52Zm9yd19kZWNvZGUgaW52Zm9yd19kZWNyeXB0IGludmZvcndfcXVvdGUgaW52Zm9yd2FyZF9kZWNvZGUgaW52Zm9yd2FyZF9kZWNyeXB0CitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZmb3J3YXJkX3F1b3RlIGludmhkcnMgaW52aGVhZGVyIGludmhlbHAgaW52aGlkZGVuX2hvc3QgaW52aGlkZV9saW1pdGVkCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZoaWRlX21pc3NpbmcgaW52aGlkZV90b3BfbGltaXRlZCBpbnZoaWRlX3RvcF9taXNzaW5nIGludmlnbm9yZV9saXN0X3JlcGx5X3RvCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZpbWFwX2ZvcmNlX3NzbCBpbnZpbWFwX2xpc3Rfc3Vic2NyaWJlZCBpbnZpbWFwX3Bhc3NpdmUgaW52aW1hcF9wZWVrCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZpbWFwX3NlcnZlcm5vaXNlIGludmltcGxpY2l0X2F1dG92aWV3IGludmtlZXBfZmxhZ2dlZCBpbnZtYWlsY2FwX3Nhbml0aXplCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZtYWlsZGlyX3RyYXNoIGludm1hcmtfb2xkIGludm1hcmtlcnMgaW52bWVudV9zY3JvbGwgaW52bWV0YV9rZXkgaW52bWV0b28KK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGludm1oX3B1cmdlIGludm1pbWVfZm9yd2FyZF9kZWNvZGUgaW52cGFnZXJfc3RvcCBpbnZwZ3BfYXV0b2VuY3J5cHQgaW52cGdwX2F1dG9zaWduCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZwZ3BfaWdub3JlX3N1YmtleXMgaW52cGdwX2xvbmdfaWRzIGludnBncF9yZXBseWVuY3J5cHQgaW52cGdwX3JlcGx5c2lnbgorc3luIGtleXdvcmQgbXV0dHJjVmFyQm9vbAljb250YWluZWQgaW52cGdwX3JlcGx5c2lnbmVuY3J5cHRlZCBpbnZwZ3BfcmV0YWluYWJsZV9zaWdzIGludnBncF9zaG93X3VudXNhYmxlIGludnBncF9zdHJpY3RfZW5jCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZwaXBlX2RlY29kZSBpbnZwaXBlX3NwbGl0IGludnBvcF9hdXRoX3RyeV9hbGwgaW52cG9wX2xhc3QgaW52cHJpbnRfZGVjb2RlCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZwcmludF9zcGxpdCBpbnZwcm9tcHRfYWZ0ZXIgaW52cmVhZF9vbmx5IGludnJlcGx5X3NlbGYgaW52cmVzb2x2ZSBpbnZyZXZlcnNlX2FsaWFzCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZyZXZlcnNlX25hbWUgaW52cmV2ZXJzZV9yZWFsbmFtZSBpbnZyZmMyMDQ3X3BhcmFtZXRlcnMgaW52c2F2ZV9hZGRyZXNzIGludnNhdmVfZW1wdHkKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGludnNhdmVfbmFtZSBpbnZzY29yZSBpbnZzaWdfZGFzaGVzIGludnNpZ19vbl90b3AgaW52c21hcnRfd3JhcCBpbnZzb3J0X3JlCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZzc2xfdXNlX3NzbHYyIGludnNzbF91c2Vfc3NsdjMgaW52c3NsX3VzZV90bHN2MSBpbnZzc2xfdXNlc3lzdGVtY2VydHMKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGludnN0YXR1c19vbl90b3AgaW52c3RyaWN0X3RocmVhZHMgaW52c3VzcGVuZCBpbnZ0ZXh0X2Zsb3dlZCBpbnZ0aG9yb3VnaF9zZWFyY2gKK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGludnRocmVhZF9yZWNlaXZlZCBpbnZ0aWxkZSBpbnZ1bmNvbGxhcHNlX2p1bXAgaW52dXNlXzhiaXRtaW1lIGludnVzZV9kb21haW4gaW52dXNlX2Zyb20KK3N5biBrZXl3b3JkIG11dHRyY1ZhckJvb2wJY29udGFpbmVkIGludnVzZV9pcHY2IGludnVzZXJfYWdlbnQgaW52d2FpdF9rZXkgaW52d2VlZCBpbnZ3cmFwX3NlYXJjaCBpbnZ3cml0ZV9iY2MKKworc3luIGtleXdvcmQgbXV0dHJjVmFyUXVhZAljb250YWluZWQgYWJvcnRfbm9zdWJqZWN0IGFib3J0X3VubW9kaWZpZWQgY29weSBkZWxldGUgaG9ub3JfZm9sbG93dXBfdG8gaW5jbHVkZSBtaW1lX2ZvcndhcmQKK3N5biBrZXl3b3JkIG11dHRyY1ZhclF1YWQJY29udGFpbmVkIG1pbWVfZm9yd2FyZF9yZXN0IG1pbWVfZndkIG1vdmUgcGdwX2NyZWF0ZV90cmFkaXRpb25hbCBwZ3BfdmVyaWZ5X3NpZyBwb3BfZGVsZXRlCitzeW4ga2V5d29yZCBtdXR0cmNWYXJRdWFkCWNvbnRhaW5lZCBwb3BfcmVjb25uZWN0IHBvc3Rwb25lIHByaW50IHF1aXQgcmVjYWxsIHJlcGx5X3RvIHNzbF9zdGFydHRscworCitzeW4ga2V5d29yZCBtdXR0cmNWYXJRdWFkCWNvbnRhaW5lZCBub2Fib3J0X25vc3ViamVjdCBub2Fib3J0X3VubW9kaWZpZWQgbm9jb3B5IG5vZGVsZXRlIG5vaG9ub3JfZm9sbG93dXBfdG8KK3N5biBrZXl3b3JkIG11dHRyY1ZhclF1YWQJY29udGFpbmVkIG5vaW5jbHVkZSBub21pbWVfZm9yd2FyZCBub2NvbnRhaW5lZCBub21pbWVfZm9yd2FyZF9yZXN0IG5vbWltZV9md2Qgbm9tb3ZlCitzeW4ga2V5d29yZCBtdXR0cmNWYXJRdWFkCWNvbnRhaW5lZCBub3BncF9jcmVhdGVfdHJhZGl0aW9uYWwgbm9wZ3BfdmVyaWZ5X3NpZyBub3BvcF9kZWxldGUgbm9wb3BfcmVjb25uZWN0CitzeW4ga2V5d29yZCBtdXR0cmNWYXJRdWFkCWNvbnRhaW5lZCBub3Bvc3Rwb25lIG5vcHJpbnQgbm9xdWl0IG5vcmVjYWxsIG5vcmVwbHlfdG8gbm9zc2xfc3RhcnR0bHMKKworc3luIGtleXdvcmQgbXV0dHJjVmFyUXVhZAljb250YWluZWQgaW52YWJvcnRfbm9zdWJqZWN0IGludmFib3J0X3VubW9kaWZpZWQgaW52Y29weSBpbnZkZWxldGUgaW52aG9ub3JfZm9sbG93dXBfdG8KK3N5biBrZXl3b3JkIG11dHRyY1ZhclF1YWQJY29udGFpbmVkIGludmluY2x1ZGUgaW52bWltZV9mb3J3YXJkIGludmNvbnRhaW5lZCBpbnZtaW1lX2ZvcndhcmRfcmVzdCBpbnZtaW1lX2Z3ZCBpbnZtb3ZlCitzeW4ga2V5d29yZCBtdXR0cmNWYXJRdWFkCWNvbnRhaW5lZCBpbnZwZ3BfY3JlYXRlX3RyYWRpdGlvbmFsIGludnBncF92ZXJpZnlfc2lnIGludnBvcF9kZWxldGUgaW52cG9wX3JlY29ubmVjdAorc3luIGtleXdvcmQgbXV0dHJjVmFyUXVhZAljb250YWluZWQgaW52cG9zdHBvbmUgaW52cHJpbnQgaW52cXVpdCBpbnZyZWNhbGwgaW52cmVwbHlfdG8gaW52c3NsX3N0YXJ0dGxzCisKK3N5biBrZXl3b3JkIG11dHRyY1Zhck51bQljb250YWluZWQgY29ubmVjdF90aW1lb3V0IGhpc3RvcnkgaW1hcF9rZWVwYWxpdmUgbWFpbF9jaGVjayBwYWdlcl9jb250ZXh0IHBhZ2VyX2luZGV4X2xpbmVzCitzeW4ga2V5d29yZCBtdXR0cmNWYXJOdW0JY29udGFpbmVkIHBncF90aW1lb3V0IHBvcF9jaGVja2ludGVydmFsIHJlYWRfaW5jIHNjb3JlX3RocmVzaG9sZF9kZWxldGUgc2NvcmVfdGhyZXNob2xkX2ZsYWcKK3N5biBrZXl3b3JkIG11dHRyY1Zhck51bQljb250YWluZWQgc2NvcmVfdGhyZXNob2xkX3JlYWQgc2VuZG1haWxfd2FpdCBzbGVlcF90aW1lIHRpbWVvdXQgd3JhcG1hcmdpbiB3cml0ZV9pbmMKKworc3luIGtleXdvcmQgbXV0dHJjVmFyU3RyCWNvbnRhaW5lZCBhbGlhc19maWxlIGFsaWFzX2Zvcm1hdCBhbHRlcm5hdGVzIGF0dGFjaF9mb3JtYXQgYXR0YWNoX3NlcCBhdHRyaWJ1dGlvbiBjZXJ0aWZpY2F0ZV9maWxlCitzeW4ga2V5d29yZCBtdXR0cmNWYXJTdHIJY29udGFpbmVkIGNoYXJzZXQgY29tcG9zZV9mb3JtYXQgZGF0ZV9mb3JtYXQgZGVmYXVsdF9ob29rIGRpc3BsYXlfZmlsdGVyIGRvdGxvY2tfcHJvZ3JhbSBkc25fbm90aWZ5CitzeW4ga2V5d29yZCBtdXR0cmNWYXJTdHIJY29udGFpbmVkIGRzbl9yZXR1cm4gZWRpdG9yIGVudHJvcHlfZmlsZSBlc2NhcGUgZm9sZGVyIGZvbGRlcl9mb3JtYXQgZm9yd19mb3JtYXQgZm9yd2FyZF9mb3JtYXQKK3N5biBrZXl3b3JkIG11dHRyY1ZhclN0cgljb250YWluZWQgZnJvbSBnZWNvc19tYXNrIGhkcl9mb3JtYXQgaG9zdG5hbWUgaW1hcF9hdXRoZW50aWNhdG9ycyBpbWFwX2RlbGltX2NoYXJzCitzeW4ga2V5d29yZCBtdXR0cmNWYXJTdHIJY29udGFpbmVkIGltYXBfaG9tZV9uYW1lc3BhY2UgaW1hcF9wYXNzIGltYXBfdXNlciBpbmRlbnRfc3RyIGluZGVudF9zdHJpbmcgaW5kZXhfZm9ybWF0IGlzcGVsbAorc3luIGtleXdvcmQgbXV0dHJjVmFyU3RyCWNvbnRhaW5lZCBsb2NhbGUgbWFpbGNhcF9wYXRoIG1hc2sgbWJveCBtYm94X3R5cGUgbWVzc2FnZV9mb3JtYXQgbWhfc2VxX2ZsYWdnZWQgbWhfc2VxX3JlcGxpZWQKK3N5biBrZXl3b3JkIG11dHRyY1ZhclN0cgljb250YWluZWQgbWhfc2VxX3Vuc2VlbiBtaXhfZW50cnlfZm9ybWF0IG1peG1hc3RlciBtc2dfZm9ybWF0IHBhZ2VyIHBhZ2VyX2Zvcm1hdAorc3luIGtleXdvcmQgbXV0dHJjVmFyU3RyCWNvbnRhaW5lZCBwZ3BfY2xlYXJzaWduX2NvbW1hbmQgcGdwX2RlY29kZV9jb21tYW5kIHBncF9kZWNyeXB0X2NvbW1hbmQgcGdwX2VuY3J5cHRfb25seV9jb21tYW5kCitzeW4ga2V5d29yZCBtdXR0cmNWYXJTdHIJY29udGFpbmVkIHBncF9lbmNyeXB0X3NpZ25fY29tbWFuZCBwZ3BfZW50cnlfZm9ybWF0IHBncF9leHBvcnRfY29tbWFuZCBwZ3BfZ2V0a2V5c19jb21tYW5kCitzeW4ga2V5d29yZCBtdXR0cmNWYXJTdHIJY29udGFpbmVkIHBncF9nb29kX3NpZ24gcGdwX2ltcG9ydF9jb21tYW5kIHBncF9saXN0X3B1YnJpbmdfY29tbWFuZCBwZ3BfbGlzdF9zZWNyaW5nX2NvbW1hbmQKK3N5biBrZXl3b3JkIG11dHRyY1ZhclN0cgljb250YWluZWQgcGdwX3NpZ25fYXMgcGdwX3NpZ25fY29tbWFuZCBwZ3Bfc29ydF9rZXlzIHBncF92ZXJpZnlfY29tbWFuZCBwZ3BfdmVyaWZ5X2tleV9jb21tYW5kCitzeW4ga2V5d29yZCBtdXR0cmNWYXJTdHIJY29udGFpbmVkIHBpcGVfc2VwIHBvcF9hdXRoZW50aWNhdG9ycyBwb3BfaG9zdCBwb3BfcGFzcyBwb3BfdXNlciBwb3N0X2luZGVudF9zdHIgcG9zdF9pbmRlbnRfc3RyaW5nCitzeW4ga2V5d29yZCBtdXR0cmNWYXJTdHIJY29udGFpbmVkIHBvc3Rwb25lZCBwcmVjb25uZWN0IHByaW50X2NtZCBwcmludF9jb21tYW5kIHF1ZXJ5X2NvbW1hbmQgcXVvdGVfcmVnZXhwIHJlYWxuYW1lIHJlY29yZAorc3luIGtleXdvcmQgbXV0dHJjVmFyU3RyCWNvbnRhaW5lZCByZXBseV9yZWdleHAgc2VuZF9jaGFyc2V0IHNlbmRtYWlsIHNoZWxsIHNpZ25hdHVyZSBzaW1wbGVfc2VhcmNoIHNtaWxleXMgc29ydCBzb3J0X2FsaWFzCitzeW4ga2V5d29yZCBtdXR0cmNWYXJTdHIJY29udGFpbmVkIHNvcnRfYXV4IHNvcnRfYnJvd3NlciBzcG9vbGZpbGUgc3RhdHVzX2NoYXJzIHN0YXR1c19mb3JtYXQgdG1wZGlyIHRvX2NoYXJzIHR1bm5lbCB2aXN1YWwKKworc3luIGtleXdvcmQgbXV0dHJjTWVudQkJY29udGFpbmVkIGFsaWFzIGF0dGFjaCBicm93c2VyIGNvbXBvc2UgZWRpdG9yIGluZGV4IHBhZ2VyIHBvc3Rwb25lIHBncCBtaXggcXVlcnkgZ2VuZXJpYworCitzeW4ga2V5d29yZCBtdXR0cmNDb21tYW5kCWFjY291bnQtaG9vayBhdXRvX3ZpZXcgYWx0ZXJuYXRpdmVfb3JkZXIgY2hhcnNldC1ob29rIHVuY29sb3IgZXhlYyBmY2MtaG9vayBmY2Mtc2F2ZS1ob29rCitzeW4ga2V5d29yZCBtdXR0cmNDb21tYW5kCWZvbGRlci1ob29rIGhkcl9vcmRlciBpY29udi1ob29rIGlnbm9yZSBsaXN0cyBtYWlsYm94ZXMgbWVzc2FnZS1ob29rIG1ib3gtaG9vayBteV9oZHIKK3N5biBrZXl3b3JkIG11dHRyY0NvbW1hbmQJcGdwLWhvb2sgcHVzaCBzYXZlLWhvb2sgc2NvcmUgc2VuZC1ob29rIHNvdXJjZSBzdWJzY3JpYmUgdW5hbGlhcyB1bmF1dG9fdmlldyB1bmhkcl9vcmRlcgorc3luIGtleXdvcmQgbXV0dHJjQ29tbWFuZAl1bmhvb2sgdW5pZ25vcmUgdW5saXN0cyB1bm1vbm8gdW5teV9oZHIgdW5zY29yZSB1bnN1YnNjcmliZQorCitzeW4ga2V5d29yZCBtdXR0cmNTZXQJCXNldCAgICAgc2tpcHdoaXRlIG5leHRncm91cD1tdXR0cmNWYXIuKgorc3luIGtleXdvcmQgbXV0dHJjVW5zZXQJCXVuc2V0ICAgc2tpcHdoaXRlIG5leHRncm91cD1tdXR0cmNWYXIuKgorc3luIGtleXdvcmQgbXV0dHJjUmVzZXQJCXJlc2V0ICAgc2tpcHdoaXRlIG5leHRncm91cD1tdXR0cmNWYXIuKgorc3luIGtleXdvcmQgbXV0dHJjVG9nZ2xlCXRvZ2dsZSAgc2tpcHdoaXRlIG5leHRncm91cD1tdXR0cmNWYXIuKgorCitzeW4ga2V5d29yZCBtdXR0cmNCaW5kCQljb250YWluZWQgYmluZAkJc2tpcHdoaXRlIG5leHRncm91cD1tdXR0cmNNZW51CitzeW4gbWF0Y2ggICBtdXR0cmNCaW5kTGluZQkiXlxzKmJpbmRcc1wrXFNcKyIJc2tpcHdoaXRlIG5leHRncm91cD1tdXR0cmNLZXlcKE5hbWVcKVw9IGNvbnRhaW5zPW11dHRyY0JpbmQKKworc3luIGtleXdvcmQgbXV0dHJjTWFjcm8JCWNvbnRhaW5lZCBtYWNybwkJc2tpcHdoaXRlIG5leHRncm91cD1tdXR0cmNNZW51CitzeW4gbWF0Y2ggICBtdXR0cmNNYWNyb0xpbmUJIl5ccyptYWNyb1xzXCtcU1wrIglza2lwd2hpdGUgbmV4dGdyb3VwPW11dHRyY0tleVwoTmFtZVwpXD0gY29udGFpbnM9bXV0dHJjTWFjcm8KKworc3luIGtleXdvcmQgbXV0dHJjQWxpYXMJCWNvbnRhaW5lZCBhbGlhcworc3luIG1hdGNoICAgbXV0dHJjQWxpYXNMaW5lCSJeXHMqYWxpYXNcc1wrXFNcKyIgY29udGFpbnM9bXV0dHJjQWxpYXMKKworIiBDb2xvdXIgZGVmaW5pdGlvbnMgdGFrZXMgb2JqZWN0LCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGFyZ3VtZW50cyAocmVnZXhwcyBleGNsdWRlZCkuCitzeW4ga2V5d29yZCBtdXR0cmNDb2xvckZpZWxkCWNvbnRhaW5lZCBhdHRhY2htZW50IGJvZHkgYm9sZCBlcnJvciBoZHJkZWZhdWx0IGhlYWRlciBpbmRleAorc3luIGtleXdvcmQgbXV0dHJjQ29sb3JGaWVsZAljb250YWluZWQgaW5kaWNhdG9yIG1hcmtlcnMgbWVzc2FnZSBub3JtYWwgcXVvdGVkIHNlYXJjaCBzaWduYXR1cmUKK3N5biBrZXl3b3JkIG11dHRyY0NvbG9yRmllbGQJY29udGFpbmVkIHN0YXR1cyB0aWxkZSB0cmVlIHVuZGVybGluZQorc3luIG1hdGNoICAgbXV0dHJjQ29sb3JGaWVsZAljb250YWluZWQgIlw8cXVvdGVkXGRcPVw+Igorc3luIGtleXdvcmQgbXV0dHJjQ29sb3JGRwljb250YWluZWQgYmxhY2sgYmx1ZSBjeWFuIGRlZmF1bHQgZ3JlZW4gbWFnZW50YSByZWQgd2hpdGUgeWVsbG93CitzeW4ga2V5d29yZCBtdXR0cmNDb2xvckZHCWNvbnRhaW5lZCBicmlnaHRibGFjayBicmlnaHRibHVlIGJyaWdodGN5YW4gYnJpZ2h0ZGVmYXVsdCBicmlnaHRncmVlbgorc3luIGtleXdvcmQgbXV0dHJjQ29sb3JGRwljb250YWluZWQgYnJpZ2h0bWFnZW50YSBicmlnaHRyZWQgYnJpZ2h0d2hpdGUgYnJpZ2h0eWVsbG93CitzeW4gbWF0Y2ggICBtdXR0cmNDb2xvckZHCWNvbnRhaW5lZCAiXDxcKGJyaWdodFwpXD1jb2xvclxkXHsxLDJ9XD4iCitzeW4ga2V5d29yZCBtdXR0cmNDb2xvckJHCWNvbnRhaW5lZCBibGFjayBibHVlIGN5YW4gZGVmYXVsdCBncmVlbiBtYWdlbnRhIHJlZCB3aGl0ZSB5ZWxsb3cKK3N5biBtYXRjaCAgIG11dHRyY0NvbG9yQkcJY29udGFpbmVkICJcPGNvbG9yXGRcezEsMn1cPiIKKyIgTm93IGZvciB0aGUgbWF0Y2gKK3N5biBrZXl3b3JkIG11dHRyY0NvbG9yCQljb250YWluZWQgY29sb3IJCQlza2lwd2hpdGUgbmV4dGdyb3VwPW11dHRyY0NvbG9yRmllbGQKK3N5biBtYXRjaCAgIG11dHRyY0NvbG9ySW5pdAljb250YWluZWQgIl5ccypjb2xvclxzXCtcU1wrIglza2lwd2hpdGUgbmV4dGdyb3VwPW11dHRyY0NvbG9yRkcgY29udGFpbnM9bXV0dHJjQ29sb3IKK3N5biBtYXRjaCAgIG11dHRyY0NvbG9yTGluZQkiXlxzKmNvbG9yXHNcK1xTXCtcc1wrXFMiCXNraXB3aGl0ZSBuZXh0Z3JvdXA9bXV0dHJjQ29sb3JCRyBjb250YWlucz1tdXR0cmNDb2xvckluaXQKKworIiBNb25vIGFyZSBhbG1vc3QgbGlrZSBjb2xvciAob2plY3RzIGluaGVyaXRlZCBmcm9tIGNvbG9yKQorc3luIGtleXdvcmQgbXV0dHJjTW9ub0F0dHJpYgljb250YWluZWQgYm9sZCBub25lIG5vcm1hbCByZXZlcnNlIHN0YW5kb3V0IHVuZGVybGluZQorc3luIGtleXdvcmQgbXV0dHJjTW9ubwkJY29udGFpbmVkIG1vbm8JCXNraXB3aGl0ZSBuZXh0Z3JvdXA9bXV0dHJjQ29sb3JGaWVsZAorc3luIG1hdGNoICAgbXV0dHJjTW9ub0xpbmUJIl5ccyptb25vXHNcK1xTXCsiCXNraXB3aGl0ZSBuZXh0Z3JvdXA9bXV0dHJjTW9ub0F0dHJpYiBjb250YWlucz1tdXR0cmNNb25vCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX211dHRyY19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9tdXR0cmNfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgbXV0dHJjQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgbXV0dHJjRXNjYXBlCQlTcGVjaWFsQ2hhcgorICBIaUxpbmsgbXV0dHJjU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIG11dHRyY1NwZWNpYWwJCVNwZWNpYWwKKyAgSGlMaW5rIG11dHRyY051bWJlcgkJTnVtYmVyCisgIEhpTGluayBtdXR0cmNRdWFkb3B0CQlCb29sZWFuCisgIEhpTGluayBtdXR0cmNFbWFpbAkJU3BlY2lhbAorICBIaUxpbmsgbXV0dHJjSGVhZGVyCQlUeXBlCisgIEhpTGluayBtdXR0cmNLZXlTcGVjaWFsCVNwZWNpYWxDaGFyCisgIEhpTGluayBtdXR0cmNLZXkJCVR5cGUKKyAgSGlMaW5rIG11dHRyY0tleU5hbWUJCU1hY3JvCisgIEhpTGluayBtdXR0cmNWYXJCb29sCQlJZGVudGlmaWVyCisgIEhpTGluayBtdXR0cmNWYXJRdWFkCQlJZGVudGlmaWVyCisgIEhpTGluayBtdXR0cmNWYXJOdW0JCUlkZW50aWZpZXIKKyAgSGlMaW5rIG11dHRyY1ZhclN0cgkJSWRlbnRpZmllcgorICBIaUxpbmsgbXV0dHJjTWVudQkJSWRlbnRpZmllcgorICBIaUxpbmsgbXV0dHJjQ29tbWFuZAkJS2V5d29yZAorICBIaUxpbmsgbXV0dHJjU2V0CQltdXR0cmNDb21tYW5kCisgIEhpTGluayBtdXR0cmNVbnNldAkJbXV0dHJjQ29tbWFuZAorICBIaUxpbmsgbXV0dHJjUmVzZXQJCW11dHRyY0NvbW1hbmQKKyAgSGlMaW5rIG11dHRyY1RvZ2dsZQkJbXV0dHJjQ29tbWFuZAorICBIaUxpbmsgbXV0dHJjQmluZAkJbXV0dHJjQ29tbWFuZAorICBIaUxpbmsgbXV0dHJjTWFjcm8JCW11dHRyY0NvbW1hbmQKKyAgSGlMaW5rIG11dHRyY0FsaWFzCQltdXR0cmNDb21tYW5kCisgIEhpTGluayBtdXR0cmNBbGlhc0xpbmUJSWRlbnRpZmllcgorICBIaUxpbmsgbXV0dHJjQ29sb3JGaWVsZAlJZGVudGlmaWVyCisgIEhpTGluayBtdXR0cmNDb2xvckZHCQlTdHJpbmcKKyAgSGlMaW5rIG11dHRyY0NvbG9yQkcJCW11dHRyY0NvbG9yRkcKKyAgSGlMaW5rIG11dHRyY0NvbG9yCQltdXR0cmNDb21tYW5kCisgIEhpTGluayBtdXR0cmNNb25vQXR0cmliCW11dHRyY0NvbG9yRkcKKyAgSGlMaW5rIG11dHRyY01vbm8JCW11dHRyY0NvbW1hbmQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibXV0dHJjIgorCisiRU9GCXZpbTogdHM9OCBub2V0IHR3PTEwMCBzdz04IHN0cz0wCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9teXNxbC52aW0gYi9ydW50aW1lL3N5bnRheC9teXNxbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiOGU5ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L215c3FsLnZpbQpAQCAtMCwwICsxLDI5NiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBteXNxbAorIiBNYWludGFpbmVyOiAgIEtlbm5ldGggSi4gUHJvbm92aWNpIDxwcm9ub3ZpY0BpZWVlLm9yZz4KKyIgTGFzdCBDaGFuZ2U6ICAkRGF0ZSQKKyIgRmlsZW5hbWVzOiAgICAqLm15c3FsCisiIFVSTDoJCWZ0cDovL2NlZGFyLXNvbHV0aW9ucy5jb20vc29mdHdhcmUvbXlzcWwudmltCisiIE5vdGU6CQlUaGUgZGVmaW5pdGlvbnMgYmVsb3cgYXJlIHRha2VuIGZyb20gdGhlIG15c3FsIHVzZXIgbWFudWFsIGFzIG9mIEFwcmlsIDIwMDIsIGZvciB2ZXJzaW9uIDMuMjMKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEFsd2F5cyBpZ25vcmUgY2FzZQorc3luIGNhc2UgaWdub3JlCisKKyIgR2VuZXJhbCBrZXl3b3JkcyB3aGljaCBkb24ndCBmYWxsIGludG8gb3RoZXIgY2F0ZWdvcmllcworc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSBhY3Rpb24gYWRkIGFmdGVyIGFnZ3JlZ2F0ZSBhbGwgYWx0ZXIgYXMgYXNjIGF1dG9faW5jcmVtZW50IGF2ZyBhdmdfcm93X2xlbmd0aAorc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSBib3RoIGJ5CitzeW4ga2V5d29yZCBteXNxbEtleXdvcmQJIGNhc2NhZGUgY2hhbmdlIGNoYXJhY3RlciBjaGVjayBjaGVja3N1bSBjb2x1bW4gY29sdW1ucyBjb21tZW50IGNvbnN0cmFpbnQgY3JlYXRlIGNyb3NzCitzeW4ga2V5d29yZCBteXNxbEtleXdvcmQJIGN1cnJlbnRfZGF0ZSBjdXJyZW50X3RpbWUgY3VycmVudF90aW1lc3RhbXAKK3N5biBrZXl3b3JkIG15c3FsS2V5d29yZAkgZGF0YSBkYXRhYmFzZSBkYXRhYmFzZXMgZGF5IGRheV9ob3VyIGRheV9taW51dGUgZGF5X3NlY29uZAorc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSBkZWZhdWx0IGRlbGF5ZWQgZGVsYXlfa2V5X3dyaXRlIGRlbGV0ZSBkZXNjIGRlc2NyaWJlIGRpc3RpbmN0IGRpc3RpbmN0cm93IGRyb3AKK3N5biBrZXl3b3JkIG15c3FsS2V5d29yZAkgZW5jbG9zZWQgZXNjYXBlIGVzY2FwZWQgZXhwbGFpbgorc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSBmaWVsZHMgZmlsZSBmaXJzdCBmbHVzaCBmb3IgZm9yZWlnbiBmcm9tIGZ1bGwgZnVuY3Rpb24KK3N5biBrZXl3b3JkIG15c3FsS2V5d29yZAkgZ2xvYmFsIGdyYW50IGdyYW50cyBncm91cAorc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSBoYXZpbmcgaGVhcCBoaWdoX3ByaW9yaXR5IGhvc3RzIGhvdXIgaG91cl9taW51dGUgaG91cl9zZWNvbmQKK3N5biBrZXl3b3JkIG15c3FsS2V5d29yZAkgaWRlbnRpZmllZCBpZ25vcmUgaW5kZXggaW5maWxlIGlubmVyIGluc2VydCBpbnNlcnRfaWQgaW50byBpc2FtCitzeW4ga2V5d29yZCBteXNxbEtleXdvcmQJIGpvaW4KK3N5biBrZXl3b3JkIG15c3FsS2V5d29yZAkga2V5IGtleXMga2lsbCBsYXN0X2luc2VydF9pZCBsZWFkaW5nIGxlZnQgbGltaXQgbGluZXMgbG9hZCBsb2NhbCBsb2NrIGxvZ3MgbG9uZworc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSBsb3dfcHJpb3JpdHkKK3N5biBrZXl3b3JkIG15c3FsS2V5d29yZAkgbWF0Y2ggbWF4X3Jvd3MgbWlkZGxlaW50IG1pbl9yb3dzIG1pbnV0ZSBtaW51dGVfc2Vjb25kIG1vZGlmeSBtb250aCBteWlzYW0KK3N5biBrZXl3b3JkIG15c3FsS2V5d29yZAkgbmF0dXJhbCBubworc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSBvbiBvcHRpbWl6ZSBvcHRpb24gb3B0aW9uYWxseSBvcmRlciBvdXRlciBvdXRmaWxlCitzeW4ga2V5d29yZCBteXNxbEtleXdvcmQJIHBhY2tfa2V5cyBwYXJ0aWFsIHBhc3N3b3JkIHByaW1hcnkgcHJpdmlsZWdlcyBwcm9jZWR1cmUgcHJvY2VzcyBwcm9jZXNzbGlzdAorc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSByZWFkIHJlZmVyZW5jZXMgcmVsb2FkIHJlbmFtZSByZXBsYWNlIHJlc3RyaWN0IHJldHVybnMgcmV2b2tlIHJvdyByb3dzCitzeW4ga2V5d29yZCBteXNxbEtleXdvcmQJIHNlY29uZCBzZWxlY3Qgc2hvdyBzaHV0ZG93biBzb25hbWUgc3FsX2JpZ19yZXN1bHQgc3FsX2JpZ19zZWxlY3RzIHNxbF9iaWdfdGFibGVzIHNxbF9sb2dfb2ZmCitzeW4ga2V5d29yZCBteXNxbEtleXdvcmQJIHNxbF9sb2dfdXBkYXRlIHNxbF9sb3dfcHJpb3JpdHlfdXBkYXRlcyBzcWxfc2VsZWN0X2xpbWl0IHNxbF9zbWFsbF9yZXN1bHQgc3FsX3dhcm5pbmdzIHN0YXJ0aW5nCitzeW4ga2V5d29yZCBteXNxbEtleXdvcmQJIHN0YXR1cyBzdHJhaWdodF9qb2luIHN0cmluZworc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSB0YWJsZSB0YWJsZXMgdGVtcG9yYXJ5IHRlcm1pbmF0ZWQgdG8gdHJhaWxpbmcgdHlwZQorc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSB1bmlxdWUgdW5sb2NrIHVuc2lnbmVkIHVwZGF0ZSB1c2FnZSB1c2UgdXNpbmcKK3N5biBrZXl3b3JkIG15c3FsS2V5d29yZAkgdmFsdWVzIHZhcmJpbmFyeSB2YXJpYWJsZXMgdmFyeWluZworc3luIGtleXdvcmQgbXlzcWxLZXl3b3JkCSB3aGVyZSB3aXRoIHdyaXRlCitzeW4ga2V5d29yZCBteXNxbEtleXdvcmQJIHllYXJfbW9udGgKK3N5biBrZXl3b3JkIG15c3FsS2V5d29yZAkgemVyb2ZpbGwKKworIiBTcGVjaWFsIHZhbHVlcworc3luIGtleXdvcmQgbXlzcWxTcGVjaWFsCSBmYWxzZSBudWxsIHRydWUKKworIiBTdHJpbmdzIChzaW5nbGUtIGFuZCBkb3VibGUtcXVvdGUpCitzeW4gcmVnaW9uIG15c3FsU3RyaW5nCQkgc3RhcnQ9KyIrICBza2lwPStcXFxcXHxcXCIrICBlbmQ9KyIrCitzeW4gcmVnaW9uIG15c3FsU3RyaW5nCQkgc3RhcnQ9KycrICBza2lwPStcXFxcXHxcXCcrICBlbmQ9KycrCisKKyIgTnVtYmVycyBhbmQgaGV4aWRlY2ltYWwgdmFsdWVzCitzeW4gbWF0Y2ggbXlzcWxOdW1iZXIJCSAiLVw9XDxbMC05XSpcPiIKK3N5biBtYXRjaCBteXNxbE51bWJlcgkJICItXD1cPFswLTldKlwuWzAtOV0qXD4iCitzeW4gbWF0Y2ggbXlzcWxOdW1iZXIJCSAiLVw9XDxbMC05XSplWystXVw9WzAtOV0qXD4iCitzeW4gbWF0Y2ggbXlzcWxOdW1iZXIJCSAiLVw9XDxbMC05XSpcLlswLTldKmVbKy1dXD1bMC05XSpcPiIKK3N5biBtYXRjaCBteXNxbE51bWJlcgkJICJcPDB4W2FiY2RlZkFCQ0RFRjAtOV0qXD4iCisKKyIgVXNlciB2YXJpYWJsZXMKK3N5biBtYXRjaCBteXNxbFZhcmlhYmxlCQkgIkBcYSpbQS1aYS16MC05XSpbLl9dKltBLVphLXowLTldKiIKKworIiBDb21tZW50cyAoYy1zdHlsZSwgbXlzcWwtc3R5bGUgYW5kIG1vZGlmaWVkIHNxbC1zdHlsZSkKK3N5biByZWdpb24gbXlzcWxDb21tZW50CQkgc3RhcnQ9Ii9cKiIgIGVuZD0iXCovIgorc3luIG1hdGNoIG15c3FsQ29tbWVudAkJICIjLioiCitzeW4gbWF0Y2ggbXlzcWxDb21tZW50CQkgIi0tIC4qIgorc3luIHN5bmMgY2NvbW1lbnQgbXlzcWxDb21tZW50CisKKyIgQ29sdW1uIHR5cGVzCisiCisiIFRoaXMgZ2V0cyBhIGJpdCB1Z2x5LiAgVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgcHJvYmxlbXMgd2UgaGF2ZSB0bworIiBkZWFsIHdpdGguCisiCisiIFRoZSBmaXJzdCBwcm9ibGVtIGlzIHRoYXQgc29tZSBrZXl3b2FyZHMgbGlrZSAnZmxvYXQnIGNhbiBiZSB1c2VkCisiIGJvdGggd2l0aCBhbmQgd2l0aG91dCBzcGVjaWZpZXJzLCBpLmUuICdmbG9hdCcsICdmbG9hdCgxKScgYW5kCisiICdmbG9hdChAdmFyKScgYXJlIGFsbCB2YWxpZC4gIFdlIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhpcyBhbmQgd2UKKyIgYWxzbyBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGdhcmJhZ2UgbGlrZSBmbG9hdG4gb3IgZmxvYXRfKDEpIGlzIG5vdAorIiBoaWdobGlnaHRlZC4KKyIKKyIgVGhlIHNlY29uZCBwcm9ibGVtIGlzIHRoYXQgc29tZSBvZiB0aGVzZSBrZXl3b3JkcyBhcmUgaW5jbHVkZWQgaW4KKyIgZnVuY3Rpb24gbmFtZXMuICBGb3IgaW5zdGFuY2UsIHllYXIoKSBpcyBwYXJ0IG9mIHRoZSBuYW1lIG9mIHRoZQorIiBkYXlvZnllYXIoKSBmdW5jdGlvbiwgYW5kIHRoZSBkZWMga2V5d29yZCAobm8gcGFyZW50aGVzaXMpIGlzIHBhcnQgb2YKKyIgdGhlIG5hbWUgb2YgdGhlIGRlY29kZSgpIGZ1bmN0aW9uLgorCitzeW4ga2V5d29yZCBteXNxbFR5cGUJCSB0aW55aW50IHNtYWxsaW50IG1lZGl1bWludCBpbnQgaW50ZWdlciBiaWdpbnQKK3N5biBrZXl3b3JkIG15c3FsVHlwZQkJIGRhdGUgZGF0ZXRpbWUgdGltZSBiaXQgYm9vbAorc3luIGtleXdvcmQgbXlzcWxUeXBlCQkgdGlueXRleHQgbWVkaXVtdGV4dCBsb25ndGV4dCB0ZXh0CitzeW4ga2V5d29yZCBteXNxbFR5cGUJCSB0aW55YmxvYiBtZWRpdW1ibG9iIGxvbmdibG9iIGJsb2IKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9ImZsb2F0XFciIGVuZD0iLiJtZT1zLTEKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9ImZsb2F0JCIgZW5kPSIuIm1lPXMtMQorc3luIHJlZ2lvbiBteXNxbFR5cGUJCSBzdGFydD0iZmxvYXQoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9ImRvdWJsZVxXIiBlbmQ9Ii4ibWU9cy0xCitzeW4gcmVnaW9uIG15c3FsVHlwZQkJIHN0YXJ0PSJkb3VibGUkIiBlbmQ9Ii4ibWU9cy0xCitzeW4gcmVnaW9uIG15c3FsVHlwZQkJIHN0YXJ0PSJkb3VibGUoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9ImRvdWJsZSBwcmVjaXNpb25cVyIgZW5kPSIuIm1lPXMtMQorc3luIHJlZ2lvbiBteXNxbFR5cGUJCSBzdGFydD0iZG91YmxlIHByZWNpc2lvbiQiIGVuZD0iLiJtZT1zLTEKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9ImRvdWJsZSBwcmVjaXNpb24oIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9InJlYWxcVyIgZW5kPSIuIm1lPXMtMQorc3luIHJlZ2lvbiBteXNxbFR5cGUJCSBzdGFydD0icmVhbCQiIGVuZD0iLiJtZT1zLTEKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9InJlYWwoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9Im51bWVyaWMoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9ImRlY1xXIiBlbmQ9Ii4ibWU9cy0xCitzeW4gcmVnaW9uIG15c3FsVHlwZQkJIHN0YXJ0PSJkZWMkIiBlbmQ9Ii4ibWU9cy0xCitzeW4gcmVnaW9uIG15c3FsVHlwZQkJIHN0YXJ0PSJkZWMoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9ImRlY2ltYWxcVyIgZW5kPSIuIm1lPXMtMQorc3luIHJlZ2lvbiBteXNxbFR5cGUJCSBzdGFydD0iZGVjaW1hbCQiIGVuZD0iLiJtZT1zLTEKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9ImRlY2ltYWwoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9IlxXdGltZXN0YW1wXFciIGVuZD0iLiJtZT1zLTEKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9IlxXdGltZXN0YW1wJCIgZW5kPSIuIm1lPXMtMQorc3luIHJlZ2lvbiBteXNxbFR5cGUJCSBzdGFydD0iXFd0aW1lc3RhbXAoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9Il50aW1lc3RhbXBcVyIgZW5kPSIuIm1lPXMtMQorc3luIHJlZ2lvbiBteXNxbFR5cGUJCSBzdGFydD0iXnRpbWVzdGFtcCQiIGVuZD0iLiJtZT1zLTEKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9Il50aW1lc3RhbXAoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9IlxXeWVhcigiIGVuZD0iKSIgY29udGFpbnM9bXlzcWxOdW1iZXIsbXlzcWxWYXJpYWJsZQorc3luIHJlZ2lvbiBteXNxbFR5cGUJCSBzdGFydD0iXnllYXIoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9ImNoYXIoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9InZhcmNoYXIoIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsTnVtYmVyLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9ImVudW0oIiBlbmQ9IikiIGNvbnRhaW5zPW15c3FsU3RyaW5nLG15c3FsVmFyaWFibGUKK3N5biByZWdpb24gbXlzcWxUeXBlCQkgc3RhcnQ9IlxXc2V0KCIgZW5kPSIpIiBjb250YWlucz1teXNxbFN0cmluZyxteXNxbFZhcmlhYmxlCitzeW4gcmVnaW9uIG15c3FsVHlwZQkJIHN0YXJ0PSJec2V0KCIgZW5kPSIpIiBjb250YWlucz1teXNxbFN0cmluZyxteXNxbFZhcmlhYmxlCisKKyIgTG9naWNhbCwgc3RyaW5nIGFuZCAgbnVtZXJpYyBvcGVyYXRvcnMKK3N5biBrZXl3b3JkIG15c3FsT3BlcmF0b3IJIGJldHdlZW4gbm90IGFuZCBvciBpcyBpbiBsaWtlIHJlZ2V4cCBybGlrZSBiaW5hcnkgZXhpc3RzCitzeW4gcmVnaW9uIG15c3FsT3BlcmF0b3IJIHN0YXJ0PSJpc251bGwoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbE9wZXJhdG9yCSBzdGFydD0iY29hbGVzY2UoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbE9wZXJhdG9yCSBzdGFydD0iaW50ZXJ2YWwoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorCisiIENvbnRyb2wgZmxvdyBmdW5jdGlvbnMKK3N5biBrZXl3b3JkIG15c3FsRmxvdwkJIGNhc2Ugd2hlbiB0aGVuIGVsc2UgZW5kCitzeW4gcmVnaW9uIG15c3FsRmxvdwkJIHN0YXJ0PSJpZm51bGwoIiAgIGVuZD0iKSIgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZsb3cJCSBzdGFydD0ibnVsbGlmKCIgICBlbmQ9IikiICBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGbG93CQkgc3RhcnQ9ImlmKCIJICAgZW5kPSIpIiAgY29udGFpbnM9QUxMCisKKyIgR2VuZXJhbCBGdW5jdGlvbnMKKyIKKyIgSSdtIGxlZXJ5IG9mIGp1c3QgZGVmaW5pbmcga2V5d29yZHMgZm9yIGZ1bmN0aW9ucywgc2luY2UgYWNjb3JkaW5nIHRvIHRoZSBNeVNRTCBtYW51YWw6CisiCisiICAgICBGdW5jdGlvbiBuYW1lcyBkbyBub3QgY2xhc2ggd2l0aCB0YWJsZSBvciBjb2x1bW4gbmFtZXMuIEZvciBleGFtcGxlLCBBQlMgaXMgYQorIiAgICAgdmFsaWQgY29sdW1uIG5hbWUuIFRoZSBvbmx5IHJlc3RyaWN0aW9uIGlzIHRoYXQgZm9yIGEgZnVuY3Rpb24gY2FsbCwgbm8gc3BhY2VzCisiICAgICBhcmUgYWxsb3dlZCBiZXR3ZWVuIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCB0aGUgYCgnIHRoYXQgZm9sbG93cyBpdC4KKyIKKyIgVGhpcyBtZWFucyB0aGF0IGlmIEkgd2FudCB0byBoaWdobGlnaHQgZnVuY3Rpb24gbmFtZXMgcHJvcGVybHksIEkgaGF2ZSB0byB1c2UgYQorIiByZWdpb24gdG8gZGVmaW5lIHRoZW0sIG5vdCBqdXN0IGEga2V5d29yZC4gIFRoaXMgd2lsbCBwcm9iYWJseSBjYXVzZSB0aGUgc3ludGF4IGZpbGUKKyIgdG8gbG9hZCBtb3JlIHNsb3dseSwgYnV0IGF0IGxlYXN0IGl0IHdpbGwgYmUgJ2NvcnJlY3QnLgorCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJhYnMoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iYWNvcygiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJhZGRkYXRlKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImFzY2lpKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImFzaW4oIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iYXRhbigiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJhdGFuMigiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJiZW5jaG1hcmsoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iYmluKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImJpdF9hbmQoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iYml0X2NvdW50KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImJpdF9vcigiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJjZWlsaW5nKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImNoYXJhY3Rlcl9sZW5ndGgoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iY2hhcl9sZW5ndGgoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iY29uY2F0KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImNvbmNhdF93cygiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJjb25uZWN0aW9uX2lkKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImNvbnYoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iY29zKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImNvdCgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJjb3VudCgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJjdXJkYXRlKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImN1cnRpbWUoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iZGF0ZV9hZGQoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iZGF0ZV9mb3JtYXQoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iZGF0ZV9zdWIoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iZGF5bmFtZSgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJkYXlvZm1vbnRoKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImRheW9md2VlaygiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJkYXlvZnllYXIoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iZGVjb2RlKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImRlZ3JlZXMoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iZWx0KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImVuY29kZSgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJlbmNyeXB0KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImV4cCgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJleHBvcnRfc2V0KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImV4dHJhY3QoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iZmllbGQoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iZmluZF9pbl9zZXQoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iZmxvb3IoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iZm9ybWF0KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImZyb21fZGF5cygiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJmcm9tX3VuaXh0aW1lKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImdldF9sb2NrKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImdyZWF0ZXN0KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9Imdyb3VwX3VuaXF1ZV91c2VycygiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJoZXgoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0iaW5ldF9hdG9uKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImluZXRfbnRvYSgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJpbnN0cigiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJsY2FzZSgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJsZWFzdCgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJsZW5ndGgoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ibG9hZF9maWxlKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9ImxvY2F0ZSgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJsb2coIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ibG9nMTAoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ibG93ZXIoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ibHBhZCgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJsdHJpbSgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJtYWtlX3NldCgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJtYXN0ZXJfcG9zX3dhaXQoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ibWF4KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9Im1kNSgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJtaWQoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ibWluKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9Im1vZCgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJtb250aG5hbWUoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ibm93KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9Im9jdCgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJvY3RldF9sZW5ndGgoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ib3JkKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InBlcmlvZF9hZGQoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0icGVyaW9kX2RpZmYoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0icGkoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0icG9zaXRpb24oIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0icG93KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InBvd2VyKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InF1YXJ0ZXIoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0icmFkaWFucygiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJyYW5kKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InJlbGVhc2VfbG9jaygiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJyZXBlYXQoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0icmV2ZXJzZSgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJyb3VuZCgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJycGFkKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InJ0cmltKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InNlY190b190aW1lKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InNlc3Npb25fdXNlcigiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJzaWduKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InNpbigiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJzb3VuZGV4KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InNwYWNlKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InNxcnQoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ic3RkKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InN0ZGRldigiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJzdHJjbXAoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ic3ViZGF0ZSgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJzdWJzdHJpbmcoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ic3Vic3RyaW5nX2luZGV4KCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InN1bSgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJzeXNkYXRlKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InN5c3RlbV91c2VyKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InRhbigiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJ0aW1lX2Zvcm1hdCgiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJ0aW1lX3RvX3NlYygiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJ0b19kYXlzKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InRyaW0oIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0idWNhc2UoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0idW5pcXVlX3VzZXJzKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InVuaXhfdGltZXN0YW1wKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InVwcGVyKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9InVzZXIoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0idmVyc2lvbigiIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIG15c3FsRnVuY3Rpb24JIHN0YXJ0PSJ3ZWVrKCIgZW5kPSIpIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gbXlzcWxGdW5jdGlvbgkgc3RhcnQ9IndlZWtkYXkoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiBteXNxbEZ1bmN0aW9uCSBzdGFydD0ieWVhcndlZWsoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9teXNxbF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9teXNxbF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBteXNxbEtleXdvcmQJCSBTdGF0ZW1lbnQKKyAgSGlMaW5rIG15c3FsU3BlY2lhbAkJIFNwZWNpYWwKKyAgSGlMaW5rIG15c3FsU3RyaW5nCQkgU3RyaW5nCisgIEhpTGluayBteXNxbE51bWJlcgkJIE51bWJlcgorICBIaUxpbmsgbXlzcWxWYXJpYWJsZQkJIElkZW50aWZpZXIKKyAgSGlMaW5rIG15c3FsQ29tbWVudAkJIENvbW1lbnQKKyAgSGlMaW5rIG15c3FsVHlwZQkJIFR5cGUKKyAgSGlMaW5rIG15c3FsT3BlcmF0b3IJCSBTdGF0ZW1lbnQKKyAgSGlMaW5rIG15c3FsRmxvdwkJIFN0YXRlbWVudAorICBIaUxpbmsgbXlzcWxGdW5jdGlvbgkJIEZ1bmN0aW9uCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm15c3FsIgorCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9uYW1lZC52aW0gYi9ydW50aW1lL3N5bnRheC9uYW1lZC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkxODM1MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L25hbWVkLnZpbQpAQCAtMCwwICsxLDIzNCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CUJJTkQgOC54IGNvbmZpZ3VyYXRpb24gZmlsZQorIiBNYWludGFpbmVyOglnbG9yeSBodW1wIDxybmRAd2ViLWRyaXZlLnJ1PgorIiBMYXN0IGNoYW5nZToJTW9uIE1heSAyMSAwNDo1MTowMSBTQU1TVCAyMDAxCisiIEZpbGVuYW1lczoJbmFtZWQuY29uZgorIiBVUkw6CWh0dHA6Ly9ybmQud2ViLWRyaXZlLnJ1L3ZpbS9zeW50YXgvbmFtZWQudmltCisiICRJZCQKKyIKKyIgTk9URQorIiAgICBpdCB3YXMgbm90IHdpZGVseSB0ZXN0ZWQsIGkganVzdCB0cmllZCBpdCBvbiBteSBzaW1wbGUKKyIgICAgc2luZ2xlLW1hc3Rlci1zaW5nbGUtc2xhdmUgY29uZmlndXJhdGlvbi4gbW9zdCBzeW50YXggd2FzIGJvcnJvd2VkCisiICAgIGRpcmVjdGx5IGZyb20gIkJJTkQgQ29uZmlndXJhdGlvbiBGaWxlIEd1aWRlIiB3aXRob3V0IHRlc3RpbmcuCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgbWF0Y2gKKworaWYgdmVyc2lvbiA+PSA2MDAKKyAgc2V0bG9jYWwgaXNrZXl3b3JkPS4sLSw0OC01OCxBLVosYS16LF8KK2Vsc2UKKyAgc2V0IGlza2V5d29yZD0uLC0sNDgtNTgsQS1aLGEteixfCitlbmRpZgorCitsZXQgczpzYXZlX2NwbyA9ICZjcG8KK3NldCBjcG8tPUMKKworIiBCSU5EIGNvbmZpZ3VyYXRpb24gZmlsZQorCitzeW4gbWF0Y2gJbmFtZWRDb21tZW50CSIvLy4qIgorc3luIHJlZ2lvbgluYW1lZENvbW1lbnQJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iCitzeW4gcmVnaW9uCW5hbWVkU3RyaW5nCXN0YXJ0PS8iLyBlbmQ9LyIvIGNvbnRhaW5lZAorIiAtLS0gb21pdHRlZCB0cmFpbGluZyBzZW1pY29sb24gRklYTUUKK3N5biBtYXRjaAluYW1lZEVycm9yCS9bXjt7XSQvCisKKyIgLS0tIHRvcC1sZXZlbCBrZXl3b3JkcworCitzeW4ga2V5d29yZAluYW1lZEluY2x1ZGUJaW5jbHVkZSBuZXh0Z3JvdXA9bmFtZWRTdHJpbmcgc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZEtleXdvcmQJYWNsIGtleSBuZXh0Z3JvdXA9bmFtZWRJbnRJZGVudCBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkS2V5d29yZAlzZXJ2ZXIgbmV4dGdyb3VwPW5hbWVkSWRlbnRpZmllciBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkS2V5d29yZAljb250cm9scyBuZXh0Z3JvdXA9bmFtZWRTZWN0aW9uIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRLZXl3b3JkCXRydXN0ZWQta2V5cyBuZXh0Z3JvdXA9bmFtZWRJbnRTZWN0aW9uIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRLZXl3b3JkCWxvZ2dpbmcgbmV4dGdyb3VwPW5hbWVkTG9nU2VjdGlvbiBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkS2V5d29yZAlvcHRpb25zIG5leHRncm91cD1uYW1lZE9wdFNlY3Rpb24gc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZEtleXdvcmQJem9uZSBuZXh0Z3JvdXA9bmFtZWRab25lU3RyaW5nIHNraXB3aGl0ZQorCisiIC0tLSBJZGVudGlmaWVyOiBuYW1lIG9mIGZvbGxvd2luZyB7IC4uLiB9IFNlY3Rpb24KK3N5biBtYXRjaAluYW1lZElkZW50aWZpZXIJY29udGFpbmVkIC9ca1wrLyBuZXh0Z3JvdXA9bmFtZWRTZWN0aW9uIHNraXB3aGl0ZQorIiAtLS0gSW50SWRlbnQ6IG5hbWUgb2YgZm9sbG93aW5nIEludFNlY3Rpb24KK3N5biBtYXRjaAluYW1lZEludElkZW50CWNvbnRhaW5lZCAvIlw9XGtcKyJcPS8gbmV4dGdyb3VwPW5hbWVkSW50U2VjdGlvbiBza2lwd2hpdGUKKworIiAtLS0gU2VjdGlvbjogeyAuLi4gfSBjbGF1c2UKK3N5biByZWdpb24JbmFtZWRTZWN0aW9uCWNvbnRhaW5lZCBzdGFydD0reysgZW5kPSt9OysgY29udGFpbnM9bmFtZWRTZWN0aW9uLG5hbWVkSW50S2V5d29yZAorCisiIC0tLSBJbnRTZWN0aW9uOiBzZWN0aW9uIHRoYXQgZG9lcyBub3QgY29udGFpbiBvdGhlciBzZWN0aW9ucworc3luIHJlZ2lvbgluYW1lZEludFNlY3Rpb24JY29udGFpbmVkIHN0YXJ0PSt7KyBlbmQ9K30rIGNvbnRhaW5zPW5hbWVkSW50S2V5d29yZCxuYW1lZEVycm9yCisKKyIgLS0tIEludEtleXdvcmQ6IGtleXdvcmRzIGNvbnRhaW5lZCB3aXRoaW4gYHsgLi4uIH0nIHNlY3Rpb25zIG9ubHkKKyIgKyB0aGVzZSBrZXl3b3JkcyBhcmUgY29udGFpbmVkIHdpdGhpbiBga2V5JyBhbmQgYGFjbCcgc2VjdGlvbnMKK3N5biBrZXl3b3JkCW5hbWVkSW50S2V5d29yZAljb250YWluZWQga2V5IGFsZ29yaXRobQorc3luIGtleXdvcmQJbmFtZWRJbnRLZXl3b3JkCWNvbnRhaW5lZCBzZWNyZXQgbmV4dGdyb3VwPW5hbWVkU3RyaW5nIHNraXB3aGl0ZQorCisiICsgdGhlc2Uga2V5d29yZHMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gYHNlcnZlcicgc2VjdGlvbiBvbmx5CitzeW4ga2V5d29yZAluYW1lZEludEtleXdvcmQJY29udGFpbmVkIGJvZ3VzIHN1cHBvcnQtaXhmciBuZXh0Z3JvdXA9bmFtZWRCb29sLG5hbWVkTm90Qm9vbCBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkSW50S2V5d29yZAljb250YWluZWQgdHJhbnNmZXJzIG5leHRncm91cD1uYW1lZE51bWJlcixuYW1lZE5vdE51bWJlciBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkSW50S2V5d29yZAljb250YWluZWQgdHJhbnNmZXItZm9ybWF0CitzeW4ga2V5d29yZAluYW1lZEludEtleXdvcmQJY29udGFpbmVkIGtleXMgbmV4dGdyb3VwPW5hbWVkSW50U2VjdGlvbiBza2lwd2hpdGUKKworIiArIHRoZXNlIGtleXdvcmRzIGFyZSBjb250YWluZWQgd2l0aGluIGBjb250cm9scycgc2VjdGlvbiBvbmx5CitzeW4ga2V5d29yZAluYW1lZEludEtleXdvcmQJY29udGFpbmVkIGluZXQgbmV4dGdyb3VwPW5hbWVkSVBhZGRyLG5hbWVkSVBlcnJvciBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkSW50S2V5d29yZAljb250YWluZWQgdW5peCBuZXh0Z3JvdXA9bmFtZWRTdHJpbmcgc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZEludEtleXdvcmQJY29udGFpbmVkIHBvcnQgcGVybSBvd25lciBncm91cCBuZXh0Z3JvdXA9bmFtZWROdW1iZXIsbmFtZWROb3ROdW1iZXIgc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZEludEtleXdvcmQJY29udGFpbmVkIGFsbG93IG5leHRncm91cD1uYW1lZEludFNlY3Rpb24gc2tpcHdoaXRlCisKKyIgLS0tIG9wdGlvbnMKK3N5biByZWdpb24JbmFtZWRPcHRTZWN0aW9uCWNvbnRhaW5lZCBzdGFydD0reysgZW5kPSt9OysgY29udGFpbnM9bmFtZWRPcHRpb24sbmFtZWRDTk9wdGlvbixuYW1lZENvbW1lbnQsbmFtZWRQYXJlbkVycm9yCisKK3N5biBrZXl3b3JkCW5hbWVkT3B0aW9uCWNvbnRhaW5lZCB2ZXJzaW9uIGRpcmVjdG9yeQorXAkJbmV4dGdyb3VwPW5hbWVkU3RyaW5nIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIG5hbWVkLXhmZXIgZHVtcC1maWxlIHBpZC1maWxlCitcCQluZXh0Z3JvdXA9bmFtZWRTdHJpbmcgc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZE9wdGlvbgljb250YWluZWQgbWVtLXN0YXRpc3RpY3MtZmlsZSBzdGF0aXN0aWNzLWZpbGUKK1wJCW5leHRncm91cD1uYW1lZFN0cmluZyBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkT3B0aW9uCWNvbnRhaW5lZCBhdXRoLW54ZG9tYWluIGRlYWxsb2NhdGUtb24tZXhpdAorXAkJbmV4dGdyb3VwPW5hbWVkQm9vbCxuYW1lZE5vdEJvb2wgc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZE9wdGlvbgljb250YWluZWQgZGlhbHVwIGZha2UtaXF1ZXJ5IGZldGNoLWdsdWUKK1wJCW5leHRncm91cD1uYW1lZEJvb2wsbmFtZWROb3RCb29sIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIGhhcy1vbGQtY2xpZW50cyBob3N0LXN0YXRpc3RpY3MKK1wJCW5leHRncm91cD1uYW1lZEJvb2wsbmFtZWROb3RCb29sIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIG1haW50YWluLWl4ZnItYmFzZSBtdWx0aXBsZS1jbmFtZXMKK1wJCW5leHRncm91cD1uYW1lZEJvb2wsbmFtZWROb3RCb29sIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIG5vdGlmeSByZWN1cnNpb24gcmZjMjMwOC10eXBlMQorXAkJbmV4dGdyb3VwPW5hbWVkQm9vbCxuYW1lZE5vdEJvb2wgc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZE9wdGlvbgljb250YWluZWQgdXNlLWlkLXBvb2wgdHJlYXQtY3ItYXMtc3BhY2UKK1wJCW5leHRncm91cD1uYW1lZEJvb2wsbmFtZWROb3RCb29sIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIGFsc28tbm90aWZ5IGZvcndhcmRlcnMKK1wJCW5leHRncm91cD1uYW1lZEludFNlY3Rpb24gc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZE9wdGlvbgljb250YWluZWQgZm9yd2FyZCBjaGVjay1uYW1lcworc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIGFsbG93LXF1ZXJ5IGFsbG93LXRyYW5zZmVyIGFsbG93LXJlY3Vyc2lvbgluZXh0Z3JvdXA9bmFtZWRBTUwgc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZE9wdGlvbgljb250YWluZWQgYmxhY2tob2xlIGxpc3Rlbi1vbgorXAkJbmV4dGdyb3VwPW5hbWVkSW50U2VjdGlvbiBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkT3B0aW9uCWNvbnRhaW5lZCBsYW1lLXR0bCBtYXgtdHJhbnNmZXItdGltZS1pbgorXAkJbmV4dGdyb3VwPW5hbWVkTnVtYmVyLG5hbWVkTm90TnVtYmVyIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIG1heC1uY2FjaGUtdHRsIG1pbi1yb290cworXAkJbmV4dGdyb3VwPW5hbWVkTnVtYmVyLG5hbWVkTm90TnVtYmVyIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIHNlcmlhbC1xdWVyaWVzIHRyYW5zZmVycy1pbgorXAkJbmV4dGdyb3VwPW5hbWVkTnVtYmVyLG5hbWVkTm90TnVtYmVyIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIHRyYW5zZmVycy1vdXQgdHJhbnNmZXJzLXBlci1ucworc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIHRyYW5zZmVyLWZvcm1hdAorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIHRyYW5zZmVyLXNvdXJjZQorXAkJbmV4dGdyb3VwPW5hbWVkSVBhZGRyLG5hbWVkSVBlcnJvciBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkT3B0aW9uCWNvbnRhaW5lZCBtYXgtaXhmci1sb2ctc2l6ZQorXAkJbmV4dGdyb3VwPW5hbWVkTnVtYmVyLG5hbWVkTm90TnVtYmVyIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIGNvcmVzaXplIGRhdGFzaXplIGZpbGVzIHN0YWNrc2l6ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIGNsZWFuaW5nLWludGVydmFsIGludGVyZmFjZS1pbnRlcnZhbCBzdGF0aXN0aWNzLWludGVydmFsIGhlYXJ0YmVhdC1pbnRlcnZhbAorXAkJbmV4dGdyb3VwPW5hbWVkTnVtYmVyLG5hbWVkTm90TnVtYmVyIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRPcHRpb24JY29udGFpbmVkIHRvcG9sb2d5IHNvcnRsaXN0IHJyc2V0LW9yZGVyCitcCQluZXh0Z3JvdXA9bmFtZWRJbnRTZWN0aW9uIHNraXB3aGl0ZQorCitzeW4gbWF0Y2gJbmFtZWRPcHRpb24JY29udGFpbmVkIC9cPHF1ZXJ5LXNvdXJjZVxzXCsuKjsvaGU9cysxMiBjb250YWlucz1uYW1lZFFTS2V5d29yZHMKK3N5biBrZXl3b3JkCW5hbWVkUVNLZXl3b3Jkcwljb250YWluZWQgYWRkcmVzcyBwb3J0CitzeW4gbWF0Y2gJbmFtZWRDTk9wdGlvbgljb250YWluZWQgL1w8Y2hlY2stbmFtZXNcc1wrLio7L2hlPXMrMTEgY29udGFpbnM9bmFtZWRDTktleXdvcmRzCitzeW4ga2V5d29yZAluYW1lZENOS2V5d29yZHMJY29udGFpbmVkIGZhaWwgd2FybiBpZ25vcmUgbWFzdGVyIHNsYXZlIHJlc3BvbnNlCisKKyIgLS0tIGxvZ2dpbmcgZmFjaWxpdGllcworc3luIHJlZ2lvbgluYW1lZExvZ1NlY3Rpb24JY29udGFpbmVkIHN0YXJ0PSt7KyBlbmQ9K307KyBjb250YWlucz1uYW1lZExvZ09wdGlvbgorc3luIGtleXdvcmQJbmFtZWRMb2dPcHRpb24JY29udGFpbmVkIGNoYW5uZWwgbmV4dGdyb3VwPW5hbWVkSW50SWRlbnQgc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZExvZ09wdGlvbgljb250YWluZWQgY2F0ZWdvcnkgbmV4dGdyb3VwPW5hbWVkSW50SWRlbnQgc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZEludEtleXdvcmQJY29udGFpbmVkIHN5c2xvZyBudWxsIHZlcnNpb25zIHNpemUgc2V2ZXJpdHkKK3N5biBrZXl3b3JkCW5hbWVkSW50S2V5d29yZAljb250YWluZWQgZmlsZSBuZXh0Z3JvdXA9bmFtZWRTdHJpbmcgc2tpcHdoaXRlCitzeW4ga2V5d29yZAluYW1lZEludEtleXdvcmQJY29udGFpbmVkIHByaW50LWNhdGVnb3J5IHByaW50LXNldmVyaXR5IHByaW50LXRpbWUgbmV4dGdyb3VwPW5hbWVkQm9vbCxuYW1lZE5vdEJvb2wgc2tpcHdoaXRlCisKKyIgLS0tIHpvbmUgc2VjdGlvbgorc3luIHJlZ2lvbgluYW1lZFpvbmVTdHJpbmcJY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9KyIrIGVuZD0rIisgc2tpcHdoaXRlCitcCQljb250YWlucz1uYW1lZERvbWFpbixuYW1lZElsbGVnYWxEb20KK1wJCW5leHRncm91cD1uYW1lZFpvbmVDbGFzcyxuYW1lZFpvbmVTZWN0aW9uCitzeW4ga2V5d29yZAluYW1lZFpvbmVDbGFzcwljb250YWluZWQgaW4gaHMgaGVzaW9kIGNoYW9zCitcCQlJTiBIUyBIRVNJT0QgQ0hBT1MKK1wJCW5leHRncm91cD1uYW1lZFpvbmVTZWN0aW9uIHNraXB3aGl0ZQorCitzeW4gcmVnaW9uCW5hbWVkWm9uZVNlY3Rpb24JY29udGFpbmVkIHN0YXJ0PSt7KyBlbmQ9K307KyBjb250YWlucz1uYW1lZFpvbmVPcHQsbmFtZWRDTk9wdGlvbixuYW1lZENvbW1lbnQsbmFtZWRNYXN0ZXJzLG5hbWVkUGFyZW5FcnJvcgorc3luIGtleXdvcmQJbmFtZWRab25lT3B0CWNvbnRhaW5lZCBmaWxlIGl4ZnItYmFzZQorXAkJbmV4dGdyb3VwPW5hbWVkU3RyaW5nIHNraXB3aGl0ZQorc3luIGtleXdvcmQJbmFtZWRab25lT3B0CWNvbnRhaW5lZCBub3RpZnkgZGlhbHVwCitcCQluZXh0Z3JvdXA9bmFtZWRCb29sLG5hbWVkTm90Qm9vbCBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkWm9uZU9wdAljb250YWluZWQgcHVia2V5IGZvcndhcmQKK3N5biBrZXl3b3JkCW5hbWVkWm9uZU9wdAljb250YWluZWQgbWF4LXRyYW5zZmVyLXRpbWUtaW4KK1wJCW5leHRncm91cD1uYW1lZE51bWJlcixuYW1lZE5vdE51bWJlciBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkWm9uZU9wdAljb250YWluZWQgdHlwZSBuZXh0Z3JvdXA9bmFtZWRab25lVHlwZSBza2lwd2hpdGUKK3N5biBrZXl3b3JkCW5hbWVkWm9uZVR5cGUJY29udGFpbmVkIG1hc3RlciBzbGF2ZSBzdHViIGZvcndhcmQgaGludAorCitzeW4ga2V5d29yZAluYW1lZFpvbmVPcHQJY29udGFpbmVkIG1hc3RlcnMgZm9yd2FyZGVycworXAkJbmV4dGdyb3VwPW5hbWVkSVBsaXN0IHNraXB3aGl0ZQorc3luIHJlZ2lvbgluYW1lZElQbGlzdAljb250YWluZWQgc3RhcnQ9K3srIGVuZD0rfTsrIGNvbnRhaW5zPW5hbWVkSVBhZGRyLG5hbWVkSVBlcnJvcixuYW1lZFBhcmVuRXJyb3IsbmFtZWRDb21tZW50CitzeW4gbWF0Y2gJbmFtZWRab25lT3B0CWNvbnRhaW5lZCAiXDxhbGxvdy1cKHVwZGF0ZVx8cXVlcnlcfHRyYW5zZmVyXCkiCitcCQluZXh0Z3JvdXA9bmFtZWRBTUwgc2tpcHdoaXRlCisKKyIgLS0tIGJvb2xlYW4gcGFyYW1ldGVyCitzeW4gbWF0Y2gJbmFtZWROb3RCb29sCWNvbnRhaW5lZCAiW14gCTtdXCsiCitzeW4ga2V5d29yZAluYW1lZEJvb2wJY29udGFpbmVkIHllcyBubyB0cnVlIGZhbHNlIDEgMAorCisiIC0tLSBudW1iZXIgcGFyYW1ldGVyCitzeW4gbWF0Y2gJbmFtZWROb3ROdW1iZXIJY29udGFpbmVkICJbXiAJMC05O11cKyIKK3N5biBtYXRjaAluYW1lZE51bWJlcgljb250YWluZWQgIlxkXCsiCisKKyIgLS0tIGFkZHJlc3MgbWF0Y2ggbGlzdAorc3luIHJlZ2lvbgluYW1lZEFNTAljb250YWluZWQgc3RhcnQ9K3srIGVuZD0rfTsrIGNvbnRhaW5zPW5hbWVkUGFyZW5FcnJvcixuYW1lZENvbW1lbnQKKworIiAtLS0gSVBzICYgRG9tYWlucworc3luIG1hdGNoCW5hbWVkSVBhZGRyCWNvbnRhaW5lZCAvXDxbMC05XVx7MSwzfVwoXC5bMC05XVx7MSwzfVwpXHszfTsvaGU9ZS0xCitzeW4gbWF0Y2gJbmFtZWREb21haW4JY29udGFpbmVkIC9cPFswLTlBLVphLXpdWy0wLTlBLVphLXouXVwrXD4vIG5leHRncm91cD1uYW1lZFNwYXJlRG90CitzeW4gbWF0Y2gJbmFtZWREb21haW4JY29udGFpbmVkIC8iXC4iL21zPXMrMSxtZT1lLTEKK3N5biBtYXRjaAluYW1lZFNwYXJlRG90CWNvbnRhaW5lZCAvXC4vCisKKyIgLS0tIHN5bnRheCBlcnJvcnMKK3N5biBtYXRjaAluYW1lZElsbGVnYWxEb20JY29udGFpbmVkIC8iXFMqW14tQS1aYS16MC05Lls6c3BhY2U6XV1cUyoiL21zPXMrMSxtZT1lLTEKK3N5biBtYXRjaAluYW1lZElQZXJyb3IJY29udGFpbmVkIC9cPFxTKlteMC05Lls6c3BhY2U6XTtdXFMqLworc3luIG1hdGNoCW5hbWVkRVBhcmVuRXJyb3IJY29udGFpbmVkICt7Kworc3luIG1hdGNoCW5hbWVkUGFyZW5FcnJvcgkrfVwoW147XVx8JFwpKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9uYW1lZF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9uYW1lZF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBuYW1lZENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgbmFtZWRJbmNsdWRlCUluY2x1ZGUKKyAgSGlMaW5rIG5hbWVkS2V5d29yZAlLZXl3b3JkCisgIEhpTGluayBuYW1lZEludEtleXdvcmQJS2V5d29yZAorICBIaUxpbmsgbmFtZWRJZGVudGlmaWVyCUlkZW50aWZpZXIKKyAgSGlMaW5rIG5hbWVkSW50SWRlbnQJSWRlbnRpZmllcgorCisgIEhpTGluayBuYW1lZFN0cmluZwlTdHJpbmcKKyAgSGlMaW5rIG5hbWVkQm9vbAlUeXBlCisgIEhpTGluayBuYW1lZE5vdEJvb2wJRXJyb3IKKyAgSGlMaW5rIG5hbWVkTnVtYmVyCU51bWJlcgorICBIaUxpbmsgbmFtZWROb3ROdW1iZXIJRXJyb3IKKworICBIaUxpbmsgbmFtZWRPcHRpb24JbmFtZWRLZXl3b3JkCisgIEhpTGluayBuYW1lZExvZ09wdGlvbgluYW1lZEtleXdvcmQKKyAgSGlMaW5rIG5hbWVkQ05PcHRpb24JbmFtZWRLZXl3b3JkCisgIEhpTGluayBuYW1lZFFTS2V5d29yZHMJVHlwZQorICBIaUxpbmsgbmFtZWRDTktleXdvcmRzCVR5cGUKKyAgSGlMaW5rIG5hbWVkTG9nQ2F0ZWdvcnkJVHlwZQorICBIaUxpbmsgbmFtZWREb21haW4JSWRlbnRpZmllcgorICBIaUxpbmsgbmFtZWRab25lT3B0CW5hbWVkS2V5d29yZAorICBIaUxpbmsgbmFtZWRab25lVHlwZQlUeXBlCisgIEhpTGluayBuYW1lZFBhcmVuRXJyb3IJRXJyb3IKKyAgSGlMaW5rIG5hbWVkRVBhcmVuRXJyb3IJRXJyb3IKKyAgSGlMaW5rIG5hbWVkSWxsZWdhbERvbQlFcnJvcgorICBIaUxpbmsgbmFtZWRJUGVycm9yCUVycm9yCisgIEhpTGluayBuYW1lZFNwYXJlRG90CUVycm9yCisgIEhpTGluayBuYW1lZEVycm9yCUVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCAmY3BvID0gczpzYXZlX2NwbwordW5sZXQgczpzYXZlX2NwbworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJuYW1lZCIKKworIiB2aW06IHRzPTE3CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9uYXNtLnZpbSBiL3J1bnRpbWUvc3ludGF4L25hc20udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYmYzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9uYXNtLnZpbQpAQCAtMCwwICsxLDUyMiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU5BU00gLSBUaGUgTmV0d2lkZSBBc3NlbWJsZXIgKHYwLjk4KQorIiBNYWludGFpbmVyOglNYW51ZWwgTS5ILiBTdG9sCTxtbWguc3RvbEBnbXgubmV0PgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMTEKKyIgVmltIFVSTDoJaHR0cDovL3d3dy52aW0ub3JnL2xhbmcuaHRtbAorIiBOQVNNIEhvbWU6CWh0dHA6Ly93d3cuY3J5b2dlbi5jb20vTmFzbS8KKworCisKKyIgU2V0dXAgU3ludGF4OgorIiAgQ2xlYXIgb2xkIHN5bnRheCBzZXR0aW5ncworaWYgdmVyc2lvbiA8IDYwMAorICBzeW4gY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisiICBBc3NlbWJsZXIgc3ludGF4IGlzIGNhc2UgaW5zZW5zZXRpdmUKK3N5biBjYXNlIGlnbm9yZQorCisKKworIiBWaW0gc2VhcmNoIGFuZCBtb3ZlbWVudCBjb21tYW5kcyBvbiBpZGVudGlmZXJzCitpZiB2ZXJzaW9uIDwgNjAwCisgICIgIENvbW1lbnRzIGF0IHN0YXJ0IG9mIGEgbGluZSBpbnNpZGUgd2hpY2ggdG8gc2tpcCBzZWFyY2ggZm9yIGluZGVudGlmaWVycworICBzZXQgY29tbWVudHM9OjsKKyAgIiAgSWRlbnRpZmllciBLZXl3b3JkIGNoYXJhY3RlcnMgKGRlZmluZXMgXGspCisgIHNldCBpc2tleXdvcmQ9QCw0OC01NywjLCQsLiw/LEAtQCxfLH4KK2Vsc2UKKyAgIiAgQ29tbWVudHMgYXQgc3RhcnQgb2YgYSBsaW5lIGluc2lkZSB3aGljaCB0byBza2lwIHNlYXJjaCBmb3IgaW5kZW50aWZpZXJzCisgIHNldGxvY2FsIGNvbW1lbnRzPTo7CisgICIgIElkZW50aWZpZXIgS2V5d29yZCBjaGFyYWN0ZXJzIChkZWZpbmVzIFxrKQorICBzZXRsb2NhbCBpc2tleXdvcmQ9QCw0OC01NywjLCQsLiw/LEAtQCxfLH4KK2VuZGlmCisKKworCisiIENvbW1lbnRzOgorc3luIHJlZ2lvbiAgbmFzbUNvbW1lbnQJCXN0YXJ0PSI7IiBrZWVwZW5kIGVuZD0iJCIgY29udGFpbnM9QG5hc21HcnBJbkNvbW1lbnRzCitzeW4gcmVnaW9uICBuYXNtU3BlY2lhbENvbW1lbnQJc3RhcnQ9IjtcKlwqXCoiIGtlZXBlbmQgZW5kPSIkIgorc3luIGtleXdvcmQgbmFzbUluQ29tbWVudFRvZG8JY29udGFpbmVkIFRPRE8gRklYTUUgWFhYW1hYWFhYXQorc3luIGNsdXN0ZXIgbmFzbUdycEluQ29tbWVudHMJY29udGFpbnM9bmFzbUluQ29tbWVudFRvZG8KK3N5biBjbHVzdGVyIG5hc21HcnBDb21tZW50cwljb250YWlucz1AbmFzbUdycEluQ29tbWVudHMsbmFzbUNvbW1lbnQsbmFzbVNwZWNpYWxDb21tZW50CisKKworCisiIExhYmVsIElkZW50aWZpZXJzOgorIiAgaW4gTkFTTTogJ0V2ZXJ5dGhpbmcgaXMgYSBMYWJlbCcKKyIgIERlZmluaXRpb24gTGFiZWwgPSBsYWJlbCBkZWZpbmVkIGJ5ICVbaV1kZWZpbmUgb3IgJVtpXWFzc2lnbgorIiAgSWRlbnRpZmllciBMYWJlbCA9IGxhYmVsIGRlZmluZWQgYXMgZmlyc3Qgbm9uLWtleXdvcmQgb24gYSBsaW5lIG9yICVbaV1tYWNybworc3luIG1hdGNoICAgbmFzbUxhYmVsRXJyb3IJIiRcPVwoXGRcK1xLXHxbI1wuQF1cfFwkXCRca1wpXGsqXD4iCitzeW4gbWF0Y2ggICBuYXNtTGFiZWwJCSJcPFwoXGhcfFs/QF1cKVxrKlw+Igorc3luIG1hdGNoICAgbmFzbUxhYmVsCQkiW1wkXH5dXChcaFx8Wz9AXVwpXGsqXD4ibGM9MQorIiAgTGFiZWxzIHN0YXJ0aW5nIHdpdGggb25lIG9yIHR3byAnLicgYXJlIHNwZWNpYWwKK3N5biBtYXRjaCAgIG5hc21Mb2NhbExhYmVsCSJcPFwuXChcd1x8WyMkP0B+XVwpXGsqXD4iCitzeW4gbWF0Y2ggICBuYXNtTG9jYWxMYWJlbAkiXDxcJFwuXChcd1x8WyMkP0B+XVwpXGsqXD4ibXM9cysxCitpZiAhZXhpc3RzKCJuYXNtX25vX3dhcm4iKQorICBzeW4gbWF0Y2ggIG5hc21MYWJlbFdhcm4JIlw8XH5cPVwkXD1bX1wuXVtfXC5cfl0qXD4iCitlbmRpZgoraWYgZXhpc3RzKCJuYXNtX2xvb3NlX3N5bnRheCIpCisgIHN5biBtYXRjaCAgIG5hc21TcGVjaWFsTGFiZWwJIlw8XC5cLkBca1wrXD4iCisgIHN5biBtYXRjaCAgIG5hc21TcGVjaWFsTGFiZWwJIlw8XCRcLlwuQFxrXCtcPiJtcz1zKzEKKyAgaWYgIWV4aXN0cygibmFzbV9ub193YXJuIikKKyAgICBzeW4gbWF0Y2ggICBuYXNtTGFiZWxXYXJuCSJcPFwkXD1cLlwuQFwoXGRcfFsjJFwufl1cKVxrKlw+IgorICBlbmRpZgorICAiIGRpc2FsbG93IHVzZSBvZiBuYXNtIGludGVybmFsIGxhYmVsIGZvcm1hdAorICBzeW4gbWF0Y2ggICBuYXNtTGFiZWxFcnJvcgkiXDxcJFw9XC5cLkBcZFwrXC5caypcPiIKK2Vsc2UKKyAgc3luIG1hdGNoICAgbmFzbVNwZWNpYWxMYWJlbAkiXDxcLlwuQFwoXGhcfFs/QF1cKVxrKlw+IgorICBzeW4gbWF0Y2ggICBuYXNtU3BlY2lhbExhYmVsCSJcPFwkXC5cLkBcKFxoXHxbP0BdXClcaypcPiJtcz1zKzEKK2VuZGlmCisiICBMYWJlbHMgY2FuIGJlIGRlcmVmZXJlbmNlZCB3aXRoICckJyB0byBkZXN0aW5ndWlzaCB0aGVtIGZyb20gcmVzZXJ2ZWQgd29yZHMKK3N5biBtYXRjaCAgIG5hc21MYWJlbEVycm9yCSJcPFwkXEtcaypccyo6Igorc3luIG1hdGNoICAgbmFzbUxhYmVsRXJyb3IJIl5ccypcJFxLXGsqXD4iCitzeW4gbWF0Y2ggICBuYXNtTGFiZWxFcnJvcgkiXDxcflxzKlwoXGsqXHMqOlx8XCRcPVwuXGsqXCkiCisKKworCisiIENvbnN0YW50czoKK3N5biBtYXRjaCAgIG5hc21TdHJpbmdFcnJvcgkrWyInXSsKK3N5biBtYXRjaCAgIG5hc21TdHJpbmcJCStcKCJbXiJdXHstfSJcfCdbXiddXHstfSdcKSsKK3N5biBtYXRjaCAgIG5hc21CaW5OdW1iZXIJIlw8WzAtMV1cK2JcPiIKK3N5biBtYXRjaCAgIG5hc21CaW5OdW1iZXIJIlw8XH5bMC0xXVwrYlw+ImxjPTEKK3N5biBtYXRjaCAgIG5hc21PY3ROdW1iZXIJIlw8XG9cK3FcPiIKK3N5biBtYXRjaCAgIG5hc21PY3ROdW1iZXIJIlw8XH5cb1wrcVw+ImxjPTEKK3N5biBtYXRjaCAgIG5hc21EZWNOdW1iZXIJIlw8XGRcK1w+Igorc3luIG1hdGNoICAgbmFzbURlY051bWJlcgkiXDxcflxkXCtcPiJsYz0xCitzeW4gbWF0Y2ggICBuYXNtSGV4TnVtYmVyCSJcPFwoXGRceCpoXHwweFx4XCtcfFwkXGRceCpcKVw+Igorc3luIG1hdGNoICAgbmFzbUhleE51bWJlcgkiXDxcflwoXGRceCpoXHwweFx4XCtcfFwkXGRceCpcKVw+ImxjPTEKK3N5biBtYXRjaCAgIG5hc21GbHROdW1iZXIJIlw8XGRcK1wuXGQqXChlWystXVw9XGRcK1wpXD1cPiIKK3N5biBrZXl3b3JkIG5hc21GbHROdW1iZXIJSW5mIEluZmluaXR5IEluZGVmaW5pdGUgTmFOIFNOYU4gUU5hTgorc3luIG1hdGNoICAgbmFzbU51bWJlckVycm9yCSJcPFx+XHMqXGRcK1wuXGQqXChlWystXVw9XGRcK1wpXD1cPiIKKworCisKKyIgTmV0d2lkZSBBc3NlbWJsZXIgU3RvcmFnZSBEaXJlY3RpdmVzOgorIiAgU3RvcmFnZSB0eXBlcworc3luIGtleXdvcmQgbmFzbVR5cGVFcnJvcglERiBFWFRSTiBGV09SRCBSRVNGIFRCWVRFCitzeW4ga2V5d29yZCBuYXNtVHlwZQkJRkFSIE5FQVIgU0hPUlQKK3N5biBrZXl3b3JkIG5hc21UeXBlCQlCWVRFIFdPUkQgRFdPUkQgUVdPUkQgRFFXT1JEIEhXT1JEIERIV09SRCBUV09SRAorc3luIGtleXdvcmQgbmFzbVR5cGUJCUNERUNMIEZBU1RDQUxMIE5PTkUgUEFTQ0FMIFNURENBTEwKK3N5biBrZXl3b3JkIG5hc21TdG9yYWdlCQlEQiBEVyBERCBEUSBERFEgRFQKK3N5biBrZXl3b3JkIG5hc21TdG9yYWdlCQlSRVNCIFJFU1cgUkVTRCBSRVNRIFJFU0RRIFJFU1QKK3N5biBrZXl3b3JkIG5hc21TdG9yYWdlCQlFWFRFUk4gR0xPQkFMIENPTU1PTgorIiAgU3RydWN0dXJlZCBzdG9yYWdlIHR5cGVzCitzeW4gbWF0Y2ggICBuYXNtVHlwZUVycm9yCSJcPFwoQVRcfElcPVwoRU5EXClcPVwoU1RSVUNUXD1cfFVOSU9OXClcfElcPUVORFwpXD4iCitzeW4gbWF0Y2ggICBuYXNtU3RydWN0dXJlTGFiZWwJY29udGFpbmVkICJcPFwoQVRcfElcPVwoRU5EXClcPVwoU1RSVUNUXD1cfFVOSU9OXClcfElcPUVORFwpXD4iCisiICAgc3RydWN0dXJlcyBjYW5ub3QgYmUgbmVzdGVkICh5ZXQpIC0+IHVzZTogJ2tlZXBlbmQnIGFuZCAncmU9Jworc3luIGNsdXN0ZXIgbmFzbUdycENudG5TdHJ1Ywljb250YWlucz1BTExCVVQsQG5hc21HcnBJbkNvbW1lbnRzLG5hc21NYWNyb0RlZixAbmFzbUdycEluTWFjcm9zLEBuYXNtR3JwSW5QcmVDb25kaXRzLG5hc21TdHJ1Y3R1cmVEZWYsQG5hc21HcnBJblN0cnVjcworc3luIHJlZ2lvbiAgbmFzbVN0cnVjdHVyZURlZgl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW5hc21TdHJ1Y3R1cmUga2VlcGVuZCBzdGFydD0iXlxzKlNUUlVDVFw+ImhzPWUtNSBlbmQ9Il5ccypFTkRTVFJVQ1RcPiJyZT1lLTkgY29udGFpbnM9QG5hc21HcnBDbnRuU3RydWMKK3N5biByZWdpb24gIG5hc21TdHJ1Y3R1cmVEZWYJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1uYXNtU3RydWN0dXJlIGtlZXBlbmQgc3RhcnQ9Il5ccypTVFJVQ1w+ImhzPWUtNCAgZW5kPSJeXHMqRU5EU1RSVUNcPiJyZT1lLTggIGNvbnRhaW5zPUBuYXNtR3JwQ250blN0cnVjCitzeW4gcmVnaW9uICBuYXNtU3RydWN0dXJlRGVmCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9bmFzbVN0cnVjdHVyZSBrZWVwZW5kIHN0YXJ0PSJcPElTVFJVQ1RcPVw+IiBlbmQ9Ilw8SUVORFwoU1RSVUNUXD1cKVw9XD4iIGNvbnRhaW5zPUBuYXNtR3JwQ250blN0cnVjLG5hc21JblN0cnVjdHVyZQorIiAgIHVuaW9uIHR5cGVzIGFyZSBub3QgcGFydCBvZiBuYXNtICh5ZXQpCisic3luIHJlZ2lvbiAgbmFzbVN0cnVjdHVyZURlZgl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW5hc21TdHJ1Y3R1cmUga2VlcGVuZCBzdGFydD0iXlxzKlVOSU9OXD4iaHM9ZS00IGVuZD0iXlxzKkVORFVOSU9OXD4icmU9ZS04IGNvbnRhaW5zPUBuYXNtR3JwQ250blN0cnVjCisic3luIHJlZ2lvbiAgbmFzbVN0cnVjdHVyZURlZgl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW5hc21TdHJ1Y3R1cmUga2VlcGVuZCBzdGFydD0iXDxJVU5JT05cPiIgZW5kPSJcPElFTkRcKFVOSU9OXClcPVw+IiBjb250YWlucz1AbmFzbUdycENudG5TdHJ1YyxuYXNtSW5TdHJ1Y3R1cmUKK3N5biBtYXRjaCAgIG5hc21JblN0cnVjdHVyZQljb250YWluZWQgIl5ccypBVFw+ImhzPWUtMQorc3luIGNsdXN0ZXIgbmFzbUdycEluU3RydWNzCWNvbnRhaW5zPW5hc21TdHJ1Y3R1cmUsbmFzbUluU3RydWN0dXJlLG5hc21TdHJ1Y3R1cmVMYWJlbAorCisKKworIiBQcmVQcm9jZXNzb3IgSW5zdHJ1Y3Rpb25zOgorIiBOQXNtIFByZVByb2NzIHN0YXJ0IHdpdGggJSwgYnV0ICUgaXMgbm90IGEgY2hhcmFjdGVyCitzeW4gbWF0Y2ggICBuYXNtUHJlUHJvY0Vycm9yCSIle1w9XCglXD1ca1wrXHwlJVwrXGsqXHxbKy1dXD1cZFwrXCl9XD0iCitpZiBleGlzdHMoIm5hc21fbG9vc2Vfc3ludGF4IikKKyAgc3luIGNsdXN0ZXIgbmFzbUdycE54dEN0eAljb250YWlucz1uYXNtU3RydWN0dXJlTGFiZWwsbmFzbUxhYmVsLG5hc21Mb2NhbExhYmVsLG5hc21TcGVjaWFsTGFiZWwsbmFzbUxhYmVsRXJyb3IsbmFzbVByZVByb2NFcnJvcgorZWxzZQorICBzeW4gY2x1c3RlciBuYXNtR3JwTnh0Q3R4CWNvbnRhaW5zPW5hc21TdHJ1Y3R1cmVMYWJlbCxuYXNtTGFiZWwsbmFzbUxhYmVsRXJyb3IsbmFzbVByZVByb2NFcnJvcgorZW5kaWYKKworIiAgTXVsdGktbGluZSBtYWNybworc3luIGNsdXN0ZXIgbmFzbUdycENudG5NYWNybwljb250YWlucz1BTExCVVQsQG5hc21HcnBJbkNvbW1lbnRzLG5hc21TdHJ1Y3R1cmVEZWYsQG5hc21HcnBJblN0cnVjcyxuYXNtTWFjcm9EZWYsQG5hc21HcnBQcmVDb25kaXRzLG5hc21NZW1SZWZlcmVuY2UsbmFzbUluTWFjUHJlQ29uZGl0LG5hc21Jbk1hY1N0cnVjRGVmCitzeW4gcmVnaW9uICBuYXNtTWFjcm9EZWYJbWF0Y2hncm91cD1uYXNtTWFjcm8ga2VlcGVuZCBzdGFydD0iXlxzKiVtYWNyb1w+ImhzPWUtNSBzdGFydD0iXlxzKiVpbWFjcm9cPiJocz1lLTYgZW5kPSJeXHMqJWVuZG1hY3JvXD4icmU9ZS05IGNvbnRhaW5zPUBuYXNtR3JwQ250bk1hY3JvLG5hc21Jbk1hY1N0cnVjRGVmCitpZiBleGlzdHMoIm5hc21fbG9vc2Vfc3ludGF4IikKKyAgc3luIG1hdGNoICBuYXNtSW5NYWNMYWJlbAljb250YWluZWQgIiVcKCVca1wrXD5cfHslXGtcK31cKSIKKyAgc3luIG1hdGNoICBuYXNtSW5NYWNMYWJlbAljb250YWluZWQgIiVcKCRcK1woXHdcfFsjXC4/QH5dXClcaypcPlx8eyRcK1woXHdcfFsjXC4/QH5dXClcayp9XCkiCisgIHN5biBtYXRjaCAgbmFzbUluTWFjUHJlUHJvYwljb250YWluZWQgIl5ccyolXChwdXNoXHxyZXBsXClcPiJocz1lLTQgc2tpcHdoaXRlIG5leHRncm91cD1uYXNtU3RydWN0dXJlTGFiZWwsbmFzbUxhYmVsLG5hc21Jbk1hY1BhcmFtLG5hc21Mb2NhbExhYmVsLG5hc21TcGVjaWFsTGFiZWwsbmFzbUxhYmVsRXJyb3IsbmFzbVByZVByb2NFcnJvcgorICBpZiAhZXhpc3RzKCJuYXNtX25vX3dhcm4iKQorICAgIHN5biBtYXRjaCBuYXNtSW5NYWNMYmxXYXJuCWNvbnRhaW5lZCAiJVwoJVskXC5dXGsqXD5cfHslWyRcLl1cayp9XCkiCisgICAgc3luIG1hdGNoIG5hc21Jbk1hY0xibFdhcm4JY29udGFpbmVkICIlXCgkXCtcKFxkXHxbI1wuQH5dXClcaypcfHtcJFwrXChcZFx8WyNcLkB+XVwpXGsqfVwpIgorICAgIGhpIGxpbmsgbmFzbUluTWFjQ2F0TGFiZWwJbmFzbUluTWFjTGJsV2FybgorICBlbHNlCisgICAgaGkgbGluayBuYXNtSW5NYWNDYXRMYWJlbAluYXNtSW5NYWNMYWJlbAorICBlbmRpZgorZWxzZQorICBzeW4gbWF0Y2ggIG5hc21Jbk1hY0xhYmVsCWNvbnRhaW5lZCAiJVwoJVwoXHdcfFsjP0B+XVwpXGsqXD5cfHslXChcd1x8WyM/QH5dXClcayp9XCkiCisgIHN5biBtYXRjaCAgbmFzbUluTWFjTGFiZWwJY29udGFpbmVkICIlXCgkXCtcKFxoXHxbP0BdXClcaypcPlx8eyRcK1woXGhcfFs/QF1cKVxrKn1cKSIKKyAgaGkgbGluayBuYXNtSW5NYWNDYXRMYWJlbAluYXNtTGFiZWxFcnJvcgorZW5kaWYKK3N5biBtYXRjaCAgIG5hc21Jbk1hY0NhdExhYmVsCWNvbnRhaW5lZCAiXGRcS1xrKiJsYz0xCitzeW4gbWF0Y2ggICBuYXNtSW5NYWNMYWJlbAljb250YWluZWQgIlxkfVxrXCsibGM9MgoraWYgIWV4aXN0cygibmFzbV9ub193YXJuIikKKyAgc3luIG1hdGNoICBuYXNtSW5NYWNMYmxXYXJuCWNvbnRhaW5lZCAiJVwoXCgkXCtcfCVcKVtffl1bLl9+XSpcPlx8e1woJFwrXHwlXClbX35dWy5ffl0qfVwpIgorZW5kaWYKK3N5biBtYXRjaCAgIG5hc21Jbk1hY1ByZVByb2MJY29udGFpbmVkICJeXHMqJXBvcFw+ImhzPWUtMworc3luIG1hdGNoICAgbmFzbUluTWFjUHJlUHJvYwljb250YWluZWQgIl5ccyolXChwdXNoXHxyZXBsXClcPiJocz1lLTQgc2tpcHdoaXRlIG5leHRncm91cD1AbmFzbUdycE54dEN0eAorIiAgIHN0cnVjdHVyZXMgY2Fubm90IGJlIG5lc3RlZCAoeWV0KSAtPiB1c2U6ICdrZWVwZW5kJyBhbmQgJ3JlPScKK3N5biByZWdpb24gIG5hc21Jbk1hY1N0cnVjRGVmCWNvbnRhaW5lZCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW5hc21TdHJ1Y3R1cmUga2VlcGVuZCBzdGFydD0iXlxzKlNUUlVDVFw+ImhzPWUtNSBlbmQ9Il5ccypFTkRTVFJVQ1RcPiJyZT1lLTkgY29udGFpbnM9QG5hc21HcnBDbnRuTWFjcm8KK3N5biByZWdpb24gIG5hc21Jbk1hY1N0cnVjRGVmCWNvbnRhaW5lZCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW5hc21TdHJ1Y3R1cmUga2VlcGVuZCBzdGFydD0iXlxzKlNUUlVDXD4iaHM9ZS00ICBlbmQ9Il5ccypFTkRTVFJVQ1w+InJlPWUtOCAgY29udGFpbnM9QG5hc21HcnBDbnRuTWFjcm8KK3N5biByZWdpb24gIG5hc21Jbk1hY1N0cnVjRGVmCWNvbnRhaW5lZCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW5hc21TdHJ1Y3R1cmUga2VlcGVuZCBzdGFydD0iXDxJU1RSVUNUXD1cPiIgZW5kPSJcPElFTkRcKFNUUlVDVFw9XClcPVw+IiBjb250YWlucz1AbmFzbUdycENudG5NYWNybyxuYXNtSW5TdHJ1Y3R1cmUKKyIgICB1bmlvbiB0eXBlcyBhcmUgbm90IHBhcnQgb2YgbmFzbSAoeWV0KQorInN5biByZWdpb24gIG5hc21Jbk1hY1N0cnVjRGVmCWNvbnRhaW5lZCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW5hc21TdHJ1Y3R1cmUga2VlcGVuZCBzdGFydD0iXlxzKlVOSU9OXD4iaHM9ZS00IGVuZD0iXlxzKkVORFVOSU9OXD4icmU9ZS04IGNvbnRhaW5zPUBuYXNtR3JwQ250bk1hY3JvCisic3luIHJlZ2lvbiAgbmFzbUluTWFjU3RydWNEZWYJY29udGFpbmVkIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9bmFzbVN0cnVjdHVyZSBrZWVwZW5kIHN0YXJ0PSJcPElVTklPTlw+IiBlbmQ9Ilw8SUVORFwoVU5JT05cKVw9XD4iIGNvbnRhaW5zPUBuYXNtR3JwQ250bk1hY3JvLG5hc21JblN0cnVjdHVyZQorc3luIHJlZ2lvbiAgbmFzbUluTWFjUHJlQ29uRGVmCWNvbnRhaW5lZCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW5hc21Jbk1hY1ByZUNvbmRpdCBzdGFydD0iXlxzKiVpZm5pZG5pXD4iaHM9ZS03IHN0YXJ0PSJeXHMqJWlmXChpZG5pXHxuXChjdHhcfGRlZlx8aWRuXHxudW1cfHN0clwpXClcPiJocz1lLTYgc3RhcnQ9Il5ccyolaWZcKGN0eFx8ZGVmXHxpZG5cfG5pZFx8bnVtXHxzdHJcKVw+ImhzPWUtNSBzdGFydD0iXlxzKiVpZmlkXD4iaHM9ZS00IHN0YXJ0PSJeXHMqJWlmXD4iaHM9ZS0yIGVuZD0iJWVuZGlmXD4iIGNvbnRhaW5zPUBuYXNtR3JwQ250bk1hY3JvLG5hc21Jbk1hY1ByZUNvbmRpdCxuYXNtSW5QcmVDb25kaXQKK3N5biBtYXRjaCAgIG5hc21Jbk1hY1ByZUNvbmRpdAljb250YWluZWQgdHJhbnNwYXJlbnQgImN0eFxzImxjPTMgc2tpcHdoaXRlIG5leHRncm91cD1AbmFzbUdycE54dEN0eAorc3luIG1hdGNoICAgbmFzbUluTWFjUHJlQ29uZGl0CWNvbnRhaW5lZCAiXlxzKiVlbGlmY3R4XD4iaHM9ZS03IHNraXB3aGl0ZSBuZXh0Z3JvdXA9QG5hc21HcnBOeHRDdHgKK3N5biBtYXRjaCAgIG5hc21Jbk1hY1ByZUNvbmRpdAljb250YWluZWQgIl5ccyolZWxpZm5jdHhcPiJocz1lLTggc2tpcHdoaXRlIG5leHRncm91cD1AbmFzbUdycE54dEN0eAorc3luIG1hdGNoICAgbmFzbUluTWFjUGFyYW1OdW0JY29udGFpbmVkICJcPFxkXCtcLmxpc3RcPiJtZT1lLTUKK3N5biBtYXRjaCAgIG5hc21Jbk1hY1BhcmFtTnVtCWNvbnRhaW5lZCAiXDxcZFwrXC5ub2xpc3RcPiJtZT1lLTcKK3N5biBtYXRjaCAgIG5hc21Jbk1hY0RpcmVjdGl2ZQljb250YWluZWQgIlwuXChub1wpXD1saXN0XD4iCitzeW4gbWF0Y2ggICBuYXNtSW5NYWNNYWNybwljb250YWluZWQgdHJhbnNwYXJlbnQgIm1hY3JvXHMibGM9NSBza2lwd2hpdGUgbmV4dGdyb3VwPW5hc21TdHJ1Y3R1cmVMYWJlbAorc3luIG1hdGNoICAgbmFzbUluTWFjTWFjcm8JY29udGFpbmVkICJeXHMqJXJvdGF0ZVw+ImhzPWUtNgorc3luIG1hdGNoICAgbmFzbUluTWFjUGFyYW0JY29udGFpbmVkICIlXChbKy1dXD1cZFwrXHx7WystXVw9XGRcK31cKSIKKyIgICBuYXNtIGNvbmRpdGlvbmFsIG1hY3JvIG9wZXJhbmRzL2FyZ3VtZW50cworIiAgIFRvZG86IGNoZWNrIGZlYXNlYmlsaXR5OyBhZGQgdG9vIG5hc21HcnBJbk1hY3JvcywgZXRjLgorInN5biBtYXRjaCAgIG5hc21Jbk1hY0NvbmQJY29udGFpbmVkICJcPFwoTlw9XChbQUJHTF1FXD1cfFtDRU9TWl1cKVx8UFtFT11cPVwpXD4iCitzeW4gY2x1c3RlciBuYXNtR3JwSW5NYWNyb3MJY29udGFpbnM9bmFzbU1hY3JvLG5hc21Jbk1hY01hY3JvLG5hc21Jbk1hY1BhcmFtLG5hc21Jbk1hY1BhcmFtTnVtLG5hc21Jbk1hY0RpcmVjdGl2ZSxuYXNtSW5NYWNMYWJlbCxuYXNtSW5NYWNMYmxXYXJuLG5hc21Jbk1hY01lbVJlZixuYXNtSW5NYWNQcmVDb25EZWYsbmFzbUluTWFjUHJlQ29uZGl0LG5hc21Jbk1hY1ByZVByb2MsbmFzbUluTWFjU3RydWNEZWYKKworIiAgIENvbnRleHQgcHJlLXByb2NzIHRoYXQgYXJlIGJldHRlciB1c2VkIGluc2lkZSBhIG1hY3JvCitpZiBleGlzdHMoIm5hc21fY3R4X291dHNpZGVfbWFjcm8iKQorICBzeW4gcmVnaW9uIG5hc21QcmVDb25kaXREZWYJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1uYXNtQ3R4UHJlQ29uZGl0IHN0YXJ0PSJeXHMqJWlmbmN0eFw+ImhzPWUtNiBzdGFydD0iXlxzKiVpZmN0eFw+ImhzPWUtNSBlbmQ9IiVlbmRpZlw+IiBjb250YWlucz1AbmFzbUdycENudG5QcmVDb24KKyAgc3luIG1hdGNoICBuYXNtQ3R4UHJlUHJvYwkiXlxzKiVwb3BcPiJocz1lLTMKKyAgaWYgZXhpc3RzKCJuYXNtX2xvb3NlX3N5bnRheCIpCisgICAgc3luIG1hdGNoICAgbmFzbUN0eExvY0xhYmVsCSIlJFwrXChcd1x8WyNcLj9Afl1cKVxrKlw+IgorICBlbHNlCisgICAgc3luIG1hdGNoICAgbmFzbUN0eExvY0xhYmVsCSIlJFwrXChcaFx8Wz9AXVwpXGsqXD4iCisgIGVuZGlmCisgIHN5biBtYXRjaCBuYXNtQ3R4UHJlUHJvYwkiXlxzKiVcKHB1c2hcfHJlcGxcKVw+ImhzPWUtNCBza2lwd2hpdGUgbmV4dGdyb3VwPUBuYXNtR3JwTnh0Q3R4CisgIHN5biBtYXRjaCBuYXNtQ3R4UHJlQ29uZGl0CWNvbnRhaW5lZCB0cmFuc3BhcmVudCAiY3R4XHMibGM9MyBza2lwd2hpdGUgbmV4dGdyb3VwPUBuYXNtR3JwTnh0Q3R4CisgIHN5biBtYXRjaCBuYXNtQ3R4UHJlQ29uZGl0CWNvbnRhaW5lZCAiXlxzKiVlbGlmY3R4XD4iaHM9ZS03IHNraXB3aGl0ZSBuZXh0Z3JvdXA9QG5hc21HcnBOeHRDdHgKKyAgc3luIG1hdGNoIG5hc21DdHhQcmVDb25kaXQJY29udGFpbmVkICJeXHMqJWVsaWZuY3R4XD4iaHM9ZS04IHNraXB3aGl0ZSBuZXh0Z3JvdXA9QG5hc21HcnBOeHRDdHgKKyAgaWYgZXhpc3RzKCJuYXNtX25vX3dhcm4iKQorICAgIGhpIGxpbmsgbmFzbUN0eFByZUNvbmRpdAluYXNtUHJlQ29uZGl0CisgICAgaGkgbGluayBuYXNtQ3R4UHJlUHJvYwluYXNtUHJlUHJvYworICAgIGhpIGxpbmsgbmFzbUN0eExvY0xhYmVsCW5hc21Mb2NhbExhYmVsCisgIGVsc2UKKyAgICBoaSBsaW5rIG5hc21DdHhQcmVDb25kaXQJbmFzbVByZVByb2NXYXJuCisgICAgaGkgbGluayBuYXNtQ3R4UHJlUHJvYwluYXNtUHJlUHJvY1dhcm4KKyAgICBoaSBsaW5rIG5hc21DdHhMb2NMYWJlbAluYXNtTGFiZWxXYXJuCisgIGVuZGlmCitlbmRpZgorCisiICBDb25kaXRpb25hbCBhc3NlbWJseQorc3luIGNsdXN0ZXIgbmFzbUdycENudG5QcmVDb24JY29udGFpbnM9QUxMQlVULEBuYXNtR3JwSW5Db21tZW50cyxAbmFzbUdycEluTWFjcm9zLEBuYXNtR3JwSW5TdHJ1Y3MKK3N5biByZWdpb24gIG5hc21QcmVDb25kaXREZWYJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1uYXNtUHJlQ29uZGl0IHN0YXJ0PSJeXHMqJWlmbmlkbmlcPiJocz1lLTcgc3RhcnQ9Il5ccyolaWZcKGlkbmlcfG5cKGRlZlx8aWRuXHxudW1cfHN0clwpXClcPiJocz1lLTYgc3RhcnQ9Il5ccyolaWZcKGRlZlx8aWRuXHxuaWRcfG51bVx8c3RyXClcPiJocz1lLTUgc3RhcnQ9Il5ccyolaWZpZFw+ImhzPWUtNCBzdGFydD0iXlxzKiVpZlw+ImhzPWUtMiBlbmQ9IiVlbmRpZlw+IiBjb250YWlucz1AbmFzbUdycENudG5QcmVDb24KK3N5biBtYXRjaCAgIG5hc21JblByZUNvbmRpdAljb250YWluZWQgIl5ccyolZWxcKGlmXHxzZVwpXD4iaHM9ZS00CitzeW4gbWF0Y2ggICBuYXNtSW5QcmVDb25kaXQJY29udGFpbmVkICJeXHMqJWVsaWZpZFw+ImhzPWUtNgorc3luIG1hdGNoICAgbmFzbUluUHJlQ29uZGl0CWNvbnRhaW5lZCAiXlxzKiVlbGlmXChkZWZcfGlkblx8bmlkXHxudW1cfHN0clwpXD4iaHM9ZS03CitzeW4gbWF0Y2ggICBuYXNtSW5QcmVDb25kaXQJY29udGFpbmVkICJeXHMqJWVsaWZcKG5cKGRlZlx8aWRuXHxudW1cfHN0clwpXHxpZG5pXClcPiJocz1lLTgKK3N5biBtYXRjaCAgIG5hc21JblByZUNvbmRpdAljb250YWluZWQgIl5ccyolZWxpZm5pZG5pXD4iaHM9ZS05CitzeW4gY2x1c3RlciBuYXNtR3JwSW5QcmVDb25kaXRzCWNvbnRhaW5zPW5hc21QcmVDb25kaXQsbmFzbUluUHJlQ29uZGl0LG5hc21DdHhQcmVDb25kaXQKK3N5biBjbHVzdGVyIG5hc21HcnBQcmVDb25kaXRzCWNvbnRhaW5zPW5hc21QcmVDb25kaXREZWYsQG5hc21HcnBJblByZUNvbmRpdHMsbmFzbUN0eFByZVByb2MsbmFzbUN0eExvY0xhYmVsCisKKyIgIE90aGVyIHByZS1wcm9jZXNzb3Igc3RhdGVtZW50cworc3luIG1hdGNoICAgbmFzbVByZVByb2MJCSJeXHMqJXJlcFw+ImhzPWUtMworc3luIG1hdGNoICAgbmFzbVByZVByb2MJCSJeXHMqJWxpbmVcPiJocz1lLTQKK3N5biBtYXRjaCAgIG5hc21QcmVQcm9jCQkiXlxzKiVcKGNsZWFyXHxlcnJvclwpXD4iaHM9ZS01CitzeW4gbWF0Y2ggICBuYXNtUHJlUHJvYwkJIl5ccyolZW5kcmVwXD4iaHM9ZS02CitzeW4gbWF0Y2ggICBuYXNtUHJlUHJvYwkJIl5ccyolZXhpdHJlcFw+ImhzPWUtNworc3luIG1hdGNoICAgbmFzbURlZmluZQkJIl5ccyoldW5kZWZcPiJocz1lLTUKK3N5biBtYXRjaCAgIG5hc21EZWZpbmUJCSJeXHMqJVwoYXNzaWduXHxkZWZpbmVcKVw+ImhzPWUtNgorc3luIG1hdGNoICAgbmFzbURlZmluZQkJIl5ccyolaVwoYXNzaWduXHxkZWZpbmVcKVw+ImhzPWUtNworc3luIG1hdGNoICAgbmFzbUluY2x1ZGUJCSJeXHMqJWluY2x1ZGVcPiJocz1lLTcKKworIiAgTXVsdGlwbGUgcHJlLXByb2Nlc3NvciBpbnN0cnVjdGlvbnMgb24gc2luZ2xlIGxpbmUgZGV0ZWN0aW9uIChvYnNvbGV0ZSkKKyJzeW4gbWF0Y2ggICBuYXNtUHJlUHJvY0Vycm9yCSteXHMqXChbXlx0ICIlJztdW14iJSc7XSpcfFteXHQgIic7XVteIiUnO11cK1wpJVxhXCtcPisKK3N5biBjbHVzdGVyIG5hc21HcnBQcmVQcm9jcwljb250YWlucz1uYXNtTWFjcm9EZWYsQG5hc21HcnBJbk1hY3JvcyxAbmFzbUdycFByZUNvbmRpdHMsbmFzbVByZVByb2MsbmFzbURlZmluZSxuYXNtSW5jbHVkZSxuYXNtUHJlUHJvY1dhcm4sbmFzbVByZVByb2NFcnJvcgorCisKKworIiBSZWdpc3RlciBJZGVudGlmaWVyczoKKyIgIFJlZ2lzdGVyIG9wZXJhbmRzOgorc3luIG1hdGNoICAgbmFzbUdlbjA4UmVnaXN0ZXIJIlw8W0EtRF1bSExdXD4iCitzeW4gbWF0Y2ggICBuYXNtR2VuMTZSZWdpc3RlcgkiXDxcKFtBLURdWFx8W0RTXUlcfFtCU11QXClcPiIKK3N5biBtYXRjaCAgIG5hc21HZW4zMlJlZ2lzdGVyCSJcPEVcKFtBLURdWFx8W0RTXUlcfFtCU11QXClcPiIKK3N5biBtYXRjaCAgIG5hc21TZWdSZWdpc3RlcgkiXDxbQy1HU11TXD4iCitzeW4gbWF0Y2ggICBuYXNtU3BjUmVnaXN0ZXIJIlw8RVw9SVBcPiIKK3N5biBtYXRjaCAgIG5hc21GcHVSZWdpc3RlcgkiXDxTVFxvXD4iCitzeW4gbWF0Y2ggICBuYXNtTW14UmVnaXN0ZXIJIlw8TU1cb1w+Igorc3luIG1hdGNoICAgbmFzbVNzZVJlZ2lzdGVyCSJcPFhNTVxvXD4iCitzeW4gbWF0Y2ggICBuYXNtQ3RybFJlZ2lzdGVyCSJcPENSXG9cPiIKK3N5biBtYXRjaCAgIG5hc21EZWJ1Z1JlZ2lzdGVyCSJcPERSXG9cPiIKK3N5biBtYXRjaCAgIG5hc21UZXN0UmVnaXN0ZXIJIlw8VFJcb1w+Igorc3luIG1hdGNoICAgbmFzbVJlZ2lzdGVyRXJyb3IJIlw8XChDUlsxNS05XVx8RFJbNC01OC05XVx8VFJbMC0yOC05XVwpXD4iCitzeW4gbWF0Y2ggICBuYXNtUmVnaXN0ZXJFcnJvcgkiXDxYXD1NTVs4LTldXD4iCitzeW4gbWF0Y2ggICBuYXNtUmVnaXN0ZXJFcnJvcgkiXDxTVFwoKFxkKVx8WzgtOV1cPlwpIgorc3luIG1hdGNoICAgbmFzbVJlZ2lzdGVyRXJyb3IJIlw8RVwoW0EtRF1bSExdXHxbQy1HU11TXClcPiIKKyIgIE1lbW9yeSByZWZlcmVuY2Ugb3BlcmFuZCAoYWRkcmVzcyk6CitzeW4gbWF0Y2ggICBuYXNtTWVtUmVmRXJyb3IJIltcW1xdXSIKK3N5biBjbHVzdGVyIG5hc21HcnBDbnRuTWVtUmVmCWNvbnRhaW5zPUFMTEJVVCxAbmFzbUdycENvbW1lbnRzLEBuYXNtR3JwUHJlUHJvY3MsQG5hc21HcnBJblN0cnVjcyxuYXNtTWVtUmVmZXJlbmNlLG5hc21NZW1SZWZFcnJvcgorc3luIG1hdGNoICAgbmFzbUluTWFjTWVtUmVmCWNvbnRhaW5lZCAiXFtbXjtcW1xdXVx7LX1cXSIgY29udGFpbnM9QG5hc21HcnBDbnRuTWVtUmVmLG5hc21QcmVQcm9jRXJyb3IsbmFzbUluTWFjTGFiZWwsbmFzbUluTWFjTGJsV2FybixuYXNtSW5NYWNQYXJhbQorc3luIG1hdGNoICAgbmFzbU1lbVJlZmVyZW5jZQkiXFtbXjtcW1xdXVx7LX1cXSIgY29udGFpbnM9QG5hc21HcnBDbnRuTWVtUmVmLG5hc21QcmVQcm9jRXJyb3IsbmFzbUN0eExvY0xhYmVsCisKKworCisiIE5ldHdpZGUgQXNzZW1ibGVyIERpcmVjdGl2ZXM6CisiICBDb21waWxhdGlvbiBjb25zdGFudHMKK3N5biBrZXl3b3JkIG5hc21Db25zdGFudAlfX0JJVFNfXyBfX0RBVEVfXyBfX0ZJTEVfXyBfX0ZPUk1BVF9fIF9fTElORV9fCitzeW4ga2V5d29yZCBuYXNtQ29uc3RhbnQJX19OQVNNX01BSk9SX18gX19OQVNNX01JTk9SX18gX19OQVNNX1ZFUlNJT05fXworc3luIGtleXdvcmQgbmFzbUNvbnN0YW50CV9fVElNRV9fCisiICBJbnN0cnVjdGlvbiBtb2RpZmllcnMKK3N5biBtYXRjaCAgIG5hc21JbnN0cnVjdG5FcnJvcgkiXDxUT1w+Igorc3luIG1hdGNoICAgbmFzbUluc3RyTW9kaWZpZXIJIlwoXlx8OlwpXHMqW0MtR1NdU1w+Im1zPWUtMQorc3luIGtleXdvcmQgbmFzbUluc3RyTW9kaWZpZXIJQTE2IEEzMiBPMTYgTzMyCitzeW4gbWF0Y2ggICBuYXNtSW5zdHJNb2RpZmllcgkiXDxGXChBRERcfE1VTFx8XChESVZcfFNVQlwpUlw9XClcc1wrVE9cPiJsYz01LG1zPWUtMQorIiAgIHRoZSAndG8nIGtleXdvcmQgaXMgbm90IGFsbG93ZWQgZm9yIGZwdS1wb3AgaW5zdHJ1Y3Rpb25zICh5ZXQpCisic3luIG1hdGNoICAgbmFzbUluc3RyTW9kaWZpZXIJIlw8RlwoQUREXHxNVUxcfFwoRElWXHxTVUJcKVJcPVwpUFxzXCtUT1w+ImxjPTYsbXM9ZS0xCisiICBOQXNtIGRpcmVjdGl2ZXMKK3N5biBrZXl3b3JkIG5hc21SZXBlYXQJCVRJTUVTCitzeW4ga2V5d29yZCBuYXNtRGlyZWN0aXZlCUFMSUdOW0JdIElOQ0JJTiBFUVUgTk9TUExJVCBTUExJVAorc3luIGtleXdvcmQgbmFzbURpcmVjdGl2ZQlBQlNPTFVURSBCSVRTIFNFQ1RJT04gU0VHTUVOVAorc3luIGtleXdvcmQgbmFzbURpcmVjdGl2ZQlFTkRTRUNUSU9OIEVORFNFR01FTlQKK3N5biBrZXl3b3JkIG5hc21EaXJlY3RpdmUJX19TRUNUX18KKyIgIE1hY3JvIGNyZWF0ZWQgc3RhbmRhcmQgZGlyZWN0aXZlczogKHJlcXVpcmVzICVpbmNsdWRlKQorc3luIGNhc2UgbWF0Y2gKK3N5biBrZXl3b3JkIG5hc21TdGREaXJlY3RpdmUJRU5EUFJPQyBFUElMT0dVRSBMT0NBTFMgUFJPQyBQUk9MT0dVRSBVU0VTCitzeW4ga2V5d29yZCBuYXNtU3RkRGlyZWN0aXZlCUVORElGIEVMU0UgRUxJRiBFTFNJRiBJRgorInN5biBrZXl3b3JkIG5hc21TdGREaXJlY3RpdmUJQlJFQUsgQ0FTRSBERUZBVUxUIEVORFNXSVRDSCBTV0lUQ0gKKyJzeW4ga2V5d29yZCBuYXNtU3RkRGlyZWN0aXZlCUNBU0UgT0YgRU5EQ0FTRQorc3luIGtleXdvcmQgbmFzbVN0ZERpcmVjdGl2ZQlETyBFTkRGT1IgRU5EV0hJTEUgRk9SIFJFUEVBVCBVTlRJTCBXSElMRSBFWElUCitzeW4gY2FzZSBpZ25vcmUKKyIgIEZvcm1hdCBzcGVjaWZpYyBkaXJlY3RpdmVzOiAoYWxsIGZvcm1hdHMpCisiICAoZXhjbHVkZWQ6IGV4dGVuc2lvbiBkaXJlY3RpdmVzIHRvIHNlY3Rpb24sIGdsb2JhbCwgY29tbW9uIGFuZCBleHRlcm4pCitzeW4ga2V5d29yZCBuYXNtRm10RGlyZWN0aXZlCU9SRworc3luIGtleXdvcmQgbmFzbUZtdERpcmVjdGl2ZQlFWFBPUlQgSU1QT1JUIEdST1VQIFVQUEVSQ0FTRSBTRUcgV1JUCitzeW4ga2V5d29yZCBuYXNtRm10RGlyZWN0aXZlCUxJQlJBUlkKK3N5biBjYXNlIG1hdGNoCitzeW4ga2V5d29yZCBuYXNtRm10RGlyZWN0aXZlCV9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBfX0dMT0JBTF9PRkZTRVRfVEFCTEVfCitzeW4ga2V5d29yZCBuYXNtRm10RGlyZWN0aXZlCS4uc3RhcnQgLi5nb3QgLi5nb3RvZmYgLi5nb3RwYyAuLnBsdCAuLnN5bQorc3luIGNhc2UgaWdub3JlCisKKworCisiIFN0YW5kYXJkIEluc3RydWN0aW9uczoKK3N5biBtYXRjaCAgIG5hc21JbnN0cnVjdG5FcnJvcgkiXDxcKEZcPUNNT1ZcfFNFVFwpTlw9XGFcezAsMn1cPiIKK3N5biBrZXl3b3JkIG5hc21JbnN0cnVjdG5FcnJvcglDTVBTIE1PVlMgTENTIExPRFMgU1RPUyBYTEFUCitzeW4gbWF0Y2ggICBuYXNtU3RkSW5zdHJ1Y3Rpb24JIlw8TU9WXD4iCitzeW4gbWF0Y2ggICBuYXNtSW5zdHJ1Y3RuRXJyb3IJIlw8TU9WXHNbXiw7W10qXDxDU1w+XHMqW146XSJoZT1lLTEKK3N5biBtYXRjaCAgIG5hc21TdGRJbnN0cnVjdGlvbgkiXDxcKENNT1ZcfEpcfFNFVFwpXChOXD1cKFtBQkdMXUVcPVx8W0NFT1NaXVwpXHxQW0VPXVw9XClcPiIKK3N5biBtYXRjaCAgIG5hc21TdGRJbnN0cnVjdGlvbgkiXDxQT1BcPiIKK3N5biBrZXl3b3JkIG5hc21TdGRJbnN0cnVjdGlvbglBQUEgQUFEIEFBTSBBQVMgQURDIEFERCBBTkQKK3N5biBrZXl3b3JkIG5hc21TdGRJbnN0cnVjdGlvbglCT1VORCBCU0YgQlNSIEJTV0FQIEJUW0NdIEJUUiBCVFMKK3N5biBrZXl3b3JkIG5hc21TdGRJbnN0cnVjdGlvbglDQUxMIENCVyBDRFEgQ0xDIENMRCBDTUMgQ01QIENNUFNCIENNUFNEIENNUFNXCitzeW4ga2V5d29yZCBuYXNtU3RkSW5zdHJ1Y3Rpb24JQ01QWENIRyBDTVBYQ0hHOEIgQ1BVSUQgQ1dEW0VdCitzeW4ga2V5d29yZCBuYXNtU3RkSW5zdHJ1Y3Rpb24JREFBIERBUyBERUMgRElWIEVOVEVSCitzeW4ga2V5d29yZCBuYXNtU3RkSW5zdHJ1Y3Rpb24JSURJViBJTVVMIElOQyBJTlRbT10gSVJFVFtEXSBJUkVUVworc3luIGtleXdvcmQgbmFzbVN0ZEluc3RydWN0aW9uCUpDWFogSkVDWFogSk1QCitzeW4ga2V5d29yZCBuYXNtU3RkSW5zdHJ1Y3Rpb24JTEFIRiBMRFMgTEVBIExFQVZFIExFUyBMRlMgTEdTIExPRFNCIExPRFNECitzeW4ga2V5d29yZCBuYXNtU3RkSW5zdHJ1Y3Rpb24JTE9EU1cgTE9PUFtFXSBMT09QTkUgTE9PUE5aIExPT1BaIExTUworc3luIGtleXdvcmQgbmFzbVN0ZEluc3RydWN0aW9uCU1PVlNCIE1PVlNEIE1PVlNXIE1PVlNYIE1PVlpYIE1VTCBORUcgTk9QIE5PVAorc3luIGtleXdvcmQgbmFzbVN0ZEluc3RydWN0aW9uCU9SIFBPUEFbRF0gUE9QQVcgUE9QRltEXSBQT1BGVworc3luIGtleXdvcmQgbmFzbVN0ZEluc3RydWN0aW9uCVBVU0hbQURdIFBVU0hBVyBQVVNIRltEXSBQVVNIRlcKK3N5biBrZXl3b3JkIG5hc21TdGRJbnN0cnVjdGlvbglSQ0wgUkNSIFJFVEYgUkVUW05dIFJPTCBST1IKK3N5biBrZXl3b3JkIG5hc21TdGRJbnN0cnVjdGlvbglTQUhGIFNBTCBTQVIgU0JCIFNDQVNCIFNDQVNEIFNDQVNXCitzeW4ga2V5d29yZCBuYXNtU3RkSW5zdHJ1Y3Rpb24JU0hMW0RdIFNIUltEXSBTVEMgU1REIFNUT1NCIFNUT1NEIFNUT1NXIFNVQgorc3luIGtleXdvcmQgbmFzbVN0ZEluc3RydWN0aW9uCVRFU1QgWEFERCBYQ0hHIFhMQVRCIFhPUgorCisKKyIgU3lzdGVtIEluc3RydWN0aW9uczogKHVzdWFsbHkgcHJpdmlsZWdlZCkKKyIgIFZlcmlmaWNhdGlvbiBvZiBwb2ludGVyIHBhcmFtZXRlcnMKK3N5biBrZXl3b3JkIG5hc21TeXNJbnN0cnVjdGlvbglBUlBMIExBUiBMU0wgVkVSUiBWRVJXCisiICBBZGRyZXNzaW5nIGRlc2NyaXB0b3IgdGFibGVzCitzeW4ga2V5d29yZCBuYXNtU3lzSW5zdHJ1Y3Rpb24JTExEVCBTTERUIExHRFQgU0dEVAorIiAgTXVsdGl0YXNraW5nCitzeW4ga2V5d29yZCBuYXNtU3lzSW5zdHJ1Y3Rpb24JTFRSIFNUUgorIiAgQ29wcm9jZXNzaW5nIGFuZCBNdWx0aXByb2Nlc3NpbmcgKHJlcXVpcmVzIGZwdSBhbmQgbXVsdGlwbGUgY3B1J3MgcmVzcC4pCitzeW4ga2V5d29yZCBuYXNtU3lzSW5zdHJ1Y3Rpb24JQ0xUUyBMT0NLIFdBSVQKKyIgIElucHV0IGFuZCBPdXRwdXQKK3N5biBrZXl3b3JkIG5hc21JbnN0cnVjdG5FcnJvcglJTlMgT1VUUworc3luIGtleXdvcmQgbmFzbVN5c0luc3RydWN0aW9uCUlOIElOU0IgSU5TVyBJTlNEIE9VVCBPVVRTQiBPVVRTQiBPVVRTVyBPVVRTRAorIiAgSW50ZXJydXB0IGNvbnRyb2wKK3N5biBrZXl3b3JkIG5hc21TeXNJbnN0cnVjdGlvbglDTEkgU1RJIExJRFQgU0lEVAorIiAgU3lzdGVtIGNvbnRyb2wKK3N5biBtYXRjaCAgIG5hc21TeXNJbnN0cnVjdGlvbgkiXDxNT1Zcc1teO11cey19XDxDUlxvXD4ibWU9cyszCitzeW4ga2V5d29yZCBuYXNtU3lzSW5zdHJ1Y3Rpb24JSExUIElOVkQgTE1TVworc3luIGtleXdvcmQgbmFzbVNzZUluc3RydWN0aW9uCVBSRUZFVENIVDAgUFJFRkVUQ0hUMSBQUkVGRVRDSFQyIFBSRUZFVENITlRBCitzeW4ga2V5d29yZCBuYXNtU3NlSW5zdHJ1Y3Rpb24JUlNNIFNGRU5DRSBTTVNXIFNZU0VOVEVSIFNZU0VYSVQgVUQyIFdCSU5WRAorIiAgVExCIChUcmFuc2xhdGlvbiBMb29rYWhlYWQgQnVmZmVyKSB0ZXN0aW5nCitzeW4gbWF0Y2ggICBuYXNtU3lzSW5zdHJ1Y3Rpb24JIlw8TU9WXHNbXjtdXHstfVw8VFJcb1w+Im1lPXMrMworc3luIGtleXdvcmQgbmFzbVN5c0luc3RydWN0aW9uCUlOVkxQRworCisiIERlYnVnZ2luZyBJbnN0cnVjdGlvbnM6IChwcml2aWxlZ2VkKQorc3luIG1hdGNoICAgbmFzbURiZ0luc3RydWN0aW9uCSJcPE1PVlxzW147XVx7LX1cPERSXG9cPiJtZT1zKzMKK3N5biBrZXl3b3JkIG5hc21EYmdJbnN0cnVjdGlvbglJTlQxIElOVDMgUkRNU1IgUkRUU0MgUkRQTUMgV1JNU1IKKworCisiIEZsb2F0aW5nIFBvaW50IEluc3RydWN0aW9uczogKHJlcXVpcmVzIEZQVSkKK3N5biBtYXRjaCAgIG5hc21GcHVJbnN0cnVjdGlvbgkiXDxGQ01PVk5cPVwoW0FCXUVcPVx8W0NFUFVaXVwpXD4iCitzeW4ga2V5d29yZCBuYXNtRnB1SW5zdHJ1Y3Rpb24JRjJYTTEgRkFCUyBGQUREW1BdIEZCTEQgRkJTVFAKK3N5biBrZXl3b3JkIG5hc21GcHVJbnN0cnVjdGlvbglGQ0hTIEZDTEVYIEZDT01bSVBdIEZDT01QW1BdIEZDT1MKK3N5biBrZXl3b3JkIG5hc21GcHVJbnN0cnVjdGlvbglGREVDU1RQIEZESVNJIEZESVZbUF0gRkRJVlJbUF0gRkVOSSBGRlJFRQorc3luIGtleXdvcmQgbmFzbUZwdUluc3RydWN0aW9uCUZJQUREIEZJQ09NW1BdIEZJRElWW1JdIEZJTEQKK3N5biBrZXl3b3JkIG5hc21GcHVJbnN0cnVjdGlvbglGSU1VTCBGSU5DU1RQIEZJTklUIEZJU1RbUF0gRklTVUJbUl0KK3N5biBrZXl3b3JkIG5hc21GcHVJbnN0cnVjdGlvbglGTERbMV0gRkxEQ1cgRkxERU5WIEZMREwyRSBGTERMMlQgRkxETEcyCitzeW4ga2V5d29yZCBuYXNtRnB1SW5zdHJ1Y3Rpb24JRkxETE4yIEZMRFBJIEZMRFogRk1VTFtQXQorc3luIGtleXdvcmQgbmFzbUZwdUluc3RydWN0aW9uCUZOQ0xFWCBGTkRJU0kgRk5FTkkgRk5JTklUIEZOT1AgRk5TQVZFCitzeW4ga2V5d29yZCBuYXNtRnB1SW5zdHJ1Y3Rpb24JRk5TVENXIEZOU1RFTlYgRk5TVFNXIEZOU1RTVworc3luIGtleXdvcmQgbmFzbUZwdUluc3RydWN0aW9uCUZQQVRBTiBGUFJFTVsxXSBGUFRBTiBGUk5ESU5UIEZSU1RPUgorc3luIGtleXdvcmQgbmFzbUZwdUluc3RydWN0aW9uCUZTQVZFIEZTQ0FMRSBGU0VUUE0gRlNJTiBGU0lOQ09TIEZTUVJUCitzeW4ga2V5d29yZCBuYXNtRnB1SW5zdHJ1Y3Rpb24JRlNUQ1cgRlNURU5WIEZTVFtQXSBGU1RTVyBGU1VCW1BdIEZTVUJSW1BdCitzeW4ga2V5d29yZCBuYXNtRnB1SW5zdHJ1Y3Rpb24JRlRTVCBGVUNPTVtJUF0gRlVDT01QW1BdCitzeW4ga2V5d29yZCBuYXNtRnB1SW5zdHJ1Y3Rpb24JRlhBTSBGWENIIEZYVFJBQ1QgRllMMlggRllMMlhQMQorCisKKyIgTXVsdGkgTWVkaWEgWHRlbnNpb24gUGFja2VkIEluc3RydWN0aW9uczogKHJlcXVpcmVzIE1NWCB1bml0KQorIiAgU3RhbmRhcmQgTU1YIGluc3RydWN0aW9uczogKHJlcXVpcmVzIE1NWDEgdW5pdCkKK3N5biBtYXRjaCAgIG5hc21JbnN0cnVjdG5FcnJvcgkiXDxQXChBRERcfFNVQlwpVVw9U1w9W0RRXVw9XD4iCitzeW4gbWF0Y2ggICBuYXNtSW5zdHJ1Y3RuRXJyb3IJIlw8UENNUFxhXHswLDJ9W0JEV1FdXD1cPiIKK3N5biBrZXl3b3JkIG5hc21NbXhJbnN0cnVjdGlvbglFTU1TIE1PVkQgTU9WUQorc3luIGtleXdvcmQgbmFzbU1teEluc3RydWN0aW9uCVBBQ0tTU0RXIFBBQ0tTU1dCIFBBQ0tVU1dCIFBBRERCIFBBREREIFBBRERXCitzeW4ga2V5d29yZCBuYXNtTW14SW5zdHJ1Y3Rpb24JUEFERFNCIFBBRERTVyBQQUREVVNCIFBBRERVU1cgUEFORFtOXQorc3luIGtleXdvcmQgbmFzbU1teEluc3RydWN0aW9uCVBDTVBFUUIgUENNUEVRRCBQQ01QRVFXIFBDTVBHVEIgUENNUEdURCBQQ01QR1RXCitzeW4ga2V5d29yZCBuYXNtTW14SW5zdHJ1Y3Rpb24JUE1BQ0hSSVcgUE1BRERXRCBQTVVMSFcgUE1VTExXIFBPUgorc3luIGtleXdvcmQgbmFzbU1teEluc3RydWN0aW9uCVBTTExEIFBTTExRIFBTTExXIFBTUkFEIFBTUkFXIFBTUkxEIFBTUkxRIFBTUkxXCitzeW4ga2V5d29yZCBuYXNtTW14SW5zdHJ1Y3Rpb24JUFNVQkIgUFNVQkQgUFNVQlcgUFNVQlNCIFBTVUJTVyBQU1VCVVNCIFBTVUJVU1cKK3N5biBrZXl3b3JkIG5hc21NbXhJbnN0cnVjdGlvbglQVU5QQ0tIQlcgUFVOUENLSERRIFBVTlBDS0hXRAorc3luIGtleXdvcmQgbmFzbU1teEluc3RydWN0aW9uCVBVTlBDS0xCVyBQVU5QQ0tMRFEgUFVOUENLTFdEIFBYT1IKKyIgIEV4dGVuZGVkIE1NWCBpbnN0cnVjdGlvbnM6IChyZXF1aXJlcyBNTVgyL1NTRSB1bml0KQorc3luIGtleXdvcmQgbmFzbU1teEluc3RydWN0aW9uCU1BU0tNT1ZRIE1PVk5UUQorc3luIGtleXdvcmQgbmFzbU1teEluc3RydWN0aW9uCVBBVkdCIFBBVkdXIFBFWFRSVyBQSU5TUlcgUE1BWFNXIFBNQVhVQgorc3luIGtleXdvcmQgbmFzbU1teEluc3RydWN0aW9uCVBNSU5TVyBQTUlOVUIgUE1PVk1TS0IgUE1VTEhVVyBQU0FEQlcgUFNIVUZXCisKKworIiBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb24gUGFja2VkIEluc3RydWN0aW9uczogKHJlcXVpcmVzIFNTRSB1bml0KQorc3luIG1hdGNoICAgbmFzbUluc3RydWN0bkVycm9yCSJcPENNUFxhXHsxLDV9W1BTXVNcPiIKK3N5biBtYXRjaCAgIG5hc21Tc2VJbnN0cnVjdGlvbgkiXDxDTVBcKE5cPVwoRVFcfExbRVRdXClcfFwoVU5cKVw9T1JEXClcPVtQU11TXD4iCitzeW4ga2V5d29yZCBuYXNtU3NlSW5zdHJ1Y3Rpb24JQUREUFMgQUREU1MgQU5ETlBTIEFORFBTCitzeW4ga2V5d29yZCBuYXNtU3NlSW5zdHJ1Y3Rpb24JQ09NSVNTIENWVFBJMlBTIENWVFBTMlBJCitzeW4ga2V5d29yZCBuYXNtU3NlSW5zdHJ1Y3Rpb24JQ1ZUU0kyU1MgQ1ZUU1MyU0kgQ1ZUVFBTMlBJIENWVFRTUzJTSQorc3luIGtleXdvcmQgbmFzbVNzZUluc3RydWN0aW9uCURJVlBTIERJVlNTIEZYUlNUT1IgRlhTQVZFIExETVhDU1IKK3N5biBrZXl3b3JkIG5hc21Tc2VJbnN0cnVjdGlvbglNQVhQUyBNQVhTUyBNSU5QUyBNSU5TUyBNT1ZBUFMgTU9WSExQUyBNT1ZIUFMKK3N5biBrZXl3b3JkIG5hc21Tc2VJbnN0cnVjdGlvbglNT1ZMSFBTIE1PVkxQUyBNT1ZNU0tQUyBNT1ZOVFBTIE1PVlNTIE1PVlVQUworc3luIGtleXdvcmQgbmFzbVNzZUluc3RydWN0aW9uCU1VTFBTIE1VTFNTCitzeW4ga2V5d29yZCBuYXNtU3NlSW5zdHJ1Y3Rpb24JT1JQUyBSQ1BQUyBSQ1BTUyBSU1FSVFBTIFJTUVJUU1MKK3N5biBrZXl3b3JkIG5hc21Tc2VJbnN0cnVjdGlvbglTSFVGUFMgU1FSVFBTIFNRUlRTUyBTVE1YQ1NSIFNVQlBTIFNVQlNTCitzeW4ga2V5d29yZCBuYXNtU3NlSW5zdHJ1Y3Rpb24JVUNPTUlTUyBVTlBDS0hQUyBVTlBDS0xQUyBYT1JQUworCisKKyIgVGhyZWUgRGltZW5zaW9uYWwgTm93IFBhY2tlZCBJbnN0cnVjdGlvbnM6IChyZXF1aXJlcyAzRE5vdyEgdW5pdCkKK3N5biBrZXl3b3JkIG5hc21Ob3dJbnN0cnVjdGlvbglGRU1NUyBQQVZHVVNCIFBGMklEIFBGQUNDIFBGQUREIFBGQ01QRVEgUEZDTVBHRQorc3luIGtleXdvcmQgbmFzbU5vd0luc3RydWN0aW9uCVBGQ01QR1QgUEZNQVggUEZNSU4gUEZNVUwgUEZSQ1AgUEZSQ1BJVDEKK3N5biBrZXl3b3JkIG5hc21Ob3dJbnN0cnVjdGlvbglQRlJDUElUMiBQRlJTUUlUMSBQRlJTUVJUIFBGU1VCW1JdIFBJMkZECitzeW4ga2V5d29yZCBuYXNtTm93SW5zdHJ1Y3Rpb24JUE1VTEhSV0EgUFJFRkVUQ0hbV10KKworCisiIFZlbmRvciBTcGVjaWZpYyBJbnN0cnVjdGlvbnM6CisiICBDeXJpeCBpbnN0cnVjdGlvbnMgKHJlcXVpcmVzIEN5cml4IHByb2Nlc3NvcikKK3N5biBrZXl3b3JkIG5hc21DcnhJbnN0cnVjdGlvbglQQUREU0lXIFBBVkVCIFBESVNUSUIgUE1BR1cgUE1VTEhSV1tDXSBQTVVMSFJJVworc3luIGtleXdvcmQgbmFzbUNyeEluc3RydWN0aW9uCVBNVkdFWkIgUE1WTFpCIFBNVk5aQiBQTVZaQiBQU1VCU0lXCitzeW4ga2V5d29yZCBuYXNtQ3J4SW5zdHJ1Y3Rpb24JUkRTSFIgUlNEQyBSU0xEVCBTTUlOVCBTTUlOVE9MRCBTVkRDIFNWTERUIFNWVFMKK3N5biBrZXl3b3JkIG5hc21DcnhJbnN0cnVjdGlvbglXUlNIUgorIiAgQU1EIGluc3RydWN0aW9ucyAocmVxdWlyZXMgQU1EIHByb2Nlc3NvcikKK3N5biBrZXl3b3JkIG5hc21BbWRJbnN0cnVjdGlvbglTWVNDQUxMIFNZU1JFVAorCisKKyIgVW5kb2N1bWVudGVkIEluc3RydWN0aW9uczoKK3N5biBtYXRjaCAgIG5hc21VbmRJbnN0cnVjdGlvbgkiXDxQT1Bcc1teO10qXDxDU1w+Im1lPXMrMworc3luIGtleXdvcmQgbmFzbVVuZEluc3RydWN0aW9uCUNNUFhDSEc0ODYgSUJUUyBJQ0VCUCBJTlQwMSBJTlQwMyBMT0FEQUxMCitzeW4ga2V5d29yZCBuYXNtVW5kSW5zdHJ1Y3Rpb24JTE9BREFMTDI4NiBMT0FEQUxMMzg2IFNBTEMgU01JIFVEMSBVTU9WIFhCVFMKKworCisKKyIgU3luY2hyb25pemUgU3ludGF4Ogorc3luIHN5bmMgY2xlYXIKK3N5biBzeW5jIG1pbmxpbmVzPTUwCQkiZm9yIG11bHRpcGxlIHJlZ2lvbiBuZXN0aW5nCitzeW4gc3luYyBtYXRjaCAgbmFzbVN5bmMJZ3JvdXBoZXJlIG5hc21NYWNyb0RlZiAiXlxzKiVpXD1tYWNyb1w+Im1lPXMtMQorc3luIHN5bmMgbWF0Y2gJbmFzbVN5bmMJZ3JvdXBoZXJlIE5PTkUJICAgICAgICJeXHMqJWVuZG1hY3JvXD4iCisKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXIgIDogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9uYXNtX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX25hc21fc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFN1YiBMaW5rczoKKyAgSGlMaW5rIG5hc21Jbk1hY0RpcmVjdGl2ZQluYXNtRGlyZWN0aXZlCisgIEhpTGluayBuYXNtSW5NYWNMYWJlbAkJbmFzbUxvY2FsTGFiZWwKKyAgSGlMaW5rIG5hc21Jbk1hY0xibFdhcm4JbmFzbUxhYmVsV2FybgorICBIaUxpbmsgbmFzbUluTWFjTWFjcm8JCW5hc21NYWNybworICBIaUxpbmsgbmFzbUluTWFjUGFyYW0JCW5hc21NYWNybworICBIaUxpbmsgbmFzbUluTWFjUGFyYW1OdW0JbmFzbURlY051bWJlcgorICBIaUxpbmsgbmFzbUluTWFjUHJlQ29uZGl0CW5hc21QcmVDb25kaXQKKyAgSGlMaW5rIG5hc21Jbk1hY1ByZVByb2MJbmFzbVByZVByb2MKKyAgSGlMaW5rIG5hc21JblByZUNvbmRpdAluYXNtUHJlQ29uZGl0CisgIEhpTGluayBuYXNtSW5TdHJ1Y3R1cmUJbmFzbVN0cnVjdHVyZQorICBIaUxpbmsgbmFzbVN0cnVjdHVyZUxhYmVsCW5hc21TdHJ1Y3R1cmUKKworICAiIENvbW1lbnQgR3JvdXA6CisgIEhpTGluayBuYXNtQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgbmFzbVNwZWNpYWxDb21tZW50CVNwZWNpYWxDb21tZW50CisgIEhpTGluayBuYXNtSW5Db21tZW50VG9kbwlUb2RvCisKKyAgIiBDb25zdGFudCBHcm91cDoKKyAgSGlMaW5rIG5hc21TdHJpbmcJCVN0cmluZworICBIaUxpbmsgbmFzbVN0cmluZ0Vycm9yCUVycm9yCisgIEhpTGluayBuYXNtQmluTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIG5hc21PY3ROdW1iZXIJCU51bWJlcgorICBIaUxpbmsgbmFzbURlY051bWJlcgkJTnVtYmVyCisgIEhpTGluayBuYXNtSGV4TnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIG5hc21GbHROdW1iZXIJCUZsb2F0CisgIEhpTGluayBuYXNtTnVtYmVyRXJyb3IJRXJyb3IKKworICAiIElkZW50aWZpZXIgR3JvdXA6CisgIEhpTGluayBuYXNtTGFiZWwJCUlkZW50aWZpZXIKKyAgSGlMaW5rIG5hc21Mb2NhbExhYmVsCQlJZGVudGlmaWVyCisgIEhpTGluayBuYXNtU3BlY2lhbExhYmVsCVNwZWNpYWwKKyAgSGlMaW5rIG5hc21MYWJlbEVycm9yCQlFcnJvcgorICBIaUxpbmsgbmFzbUxhYmVsV2FybgkJVG9kbworCisgICIgUHJlUHJvYyBHcm91cDoKKyAgSGlMaW5rIG5hc21QcmVQcm9jCQlQcmVQcm9jCisgIEhpTGluayBuYXNtRGVmaW5lCQlEZWZpbmUKKyAgSGlMaW5rIG5hc21JbmNsdWRlCQlJbmNsdWRlCisgIEhpTGluayBuYXNtTWFjcm8JCU1hY3JvCisgIEhpTGluayBuYXNtUHJlQ29uZGl0CQlQcmVDb25kaXQKKyAgSGlMaW5rIG5hc21QcmVQcm9jRXJyb3IJRXJyb3IKKyAgSGlMaW5rIG5hc21QcmVQcm9jV2FybglUb2RvCisKKyAgIiBUeXBlIEdyb3VwOgorICBIaUxpbmsgbmFzbVR5cGUJCVR5cGUKKyAgSGlMaW5rIG5hc21TdG9yYWdlCQlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIG5hc21TdHJ1Y3R1cmUJCVN0cnVjdHVyZQorICBIaUxpbmsgbmFzbVR5cGVFcnJvcgkJRXJyb3IKKworICAiIERpcmVjdGl2ZSBHcm91cDoKKyAgSGlMaW5rIG5hc21Db25zdGFudAkJQ29uc3RhbnQKKyAgSGlMaW5rIG5hc21JbnN0ck1vZGlmaWVyCU9wZXJhdG9yCisgIEhpTGluayBuYXNtUmVwZWF0CQlSZXBlYXQKKyAgSGlMaW5rIG5hc21EaXJlY3RpdmUJCUtleXdvcmQKKyAgSGlMaW5rIG5hc21TdGREaXJlY3RpdmUJT3BlcmF0b3IKKyAgSGlMaW5rIG5hc21GbXREaXJlY3RpdmUJS2V5d29yZAorCisgICIgUmVnaXN0ZXIgR3JvdXA6CisgIEhpTGluayBuYXNtQ3RybFJlZ2lzdGVyCVNwZWNpYWwKKyAgSGlMaW5rIG5hc21EZWJ1Z1JlZ2lzdGVyCURlYnVnCisgIEhpTGluayBuYXNtVGVzdFJlZ2lzdGVyCVNwZWNpYWwKKyAgSGlMaW5rIG5hc21SZWdpc3RlckVycm9yCUVycm9yCisgIEhpTGluayBuYXNtTWVtUmVmRXJyb3IJRXJyb3IKKworICAiIEluc3RydWN0aW9uIEdyb3VwOgorICBIaUxpbmsgbmFzbVN0ZEluc3RydWN0aW9uCVN0YXRlbWVudAorICBIaUxpbmsgbmFzbVN5c0luc3RydWN0aW9uCVN0YXRlbWVudAorICBIaUxpbmsgbmFzbURiZ0luc3RydWN0aW9uCURlYnVnCisgIEhpTGluayBuYXNtRnB1SW5zdHJ1Y3Rpb24JU3RhdGVtZW50CisgIEhpTGluayBuYXNtTW14SW5zdHJ1Y3Rpb24JU3RhdGVtZW50CisgIEhpTGluayBuYXNtU3NlSW5zdHJ1Y3Rpb24JU3RhdGVtZW50CisgIEhpTGluayBuYXNtTm93SW5zdHJ1Y3Rpb24JU3RhdGVtZW50CisgIEhpTGluayBuYXNtQW1kSW5zdHJ1Y3Rpb24JU3BlY2lhbAorICBIaUxpbmsgbmFzbUNyeEluc3RydWN0aW9uCVNwZWNpYWwKKyAgSGlMaW5rIG5hc21VbmRJbnN0cnVjdGlvbglUb2RvCisgIEhpTGluayBuYXNtSW5zdHJ1Y3RuRXJyb3IJRXJyb3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibmFzbSIKKworIiB2aW06dHM9OCBzdz00CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9uYXN0cmFuLnZpbSBiL3J1bnRpbWUvc3ludGF4L25hc3RyYW4udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OTI3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9uYXN0cmFuLnZpbQpAQCAtMCwwICsxLDE5MyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6IE5BU1RSQU4gaW5wdXQvRE1BUAorIiBNYWludGFpbmVyOiBUb20gS293YWxza2kgPHRya0BzY2hhZWZmZXJhcy5jb20+CisiIExhc3QgY2hhbmdlOiBBcHJpbCAyNywgMjAwMQorIiAgVGhhbmtzIHRvIHRoZSBhdXRob3JzIGFuZCBtYWludGFpbmVycyBvZiBmb3J0cmFuLnZpbS4KKyIJCVNpbmNlIERNQVAgc2hhcmVzIHNvbWUgdHJhaXRzIHdpdGggZm9ydHJhbiwgdGhpcyBzeW50YXggZmlsZQorIgkJaXMgYmFzZWQgb24gdGhlIGZvcnRyYW4udmltIHN5bnRheCBmaWxlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgUmVtb3ZlIGFueSBvbGQgc3ludGF4IHN0dWZmIGhhbmdpbmcgYXJvdW5kCisic3luIGNsZWFyCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKyIgRE1BUCBpcyBub3QgY2FzZSBkZXBlbmRlbnQKK3N5biBjYXNlIGlnbm9yZQorIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tRE1BUCBTWU5UQVgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIKKyIgLS0tLS0tLUV4ZWN1dGl2ZSBNb2R1bGVzIGFuZCBTdGF0ZW1lbnRzCisiCitzeW4ga2V5d29yZCBuYXN0cmFuRG1hcGV4ZWNtb2QJICAgICAgIGNhbGwgZGJ2aWV3IGRlbGV0ZSBlbmQgZXF1aXYgZXF1aXZ4IGV4aXQKK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwZXhlY21vZAkgICAgICAgZmlsZSBtZXNzYWdlIHB1cmdlIHB1cmdleCByZXR1cm4gc3ViZG1hcAorc3luIGtleXdvcmQgbmFzdHJhbkRtYXBUeXBlCSAgICAgICB0eXBlCitzeW4ga2V5d29yZCBuYXN0cmFuRG1hcExhYmVsICBnbyB0byBnb3RvCitzeW4ga2V5d29yZCBuYXN0cmFuRG1hcFJlcGVhdCAgaWYgZWxzZSBlbHNlaWYgZW5kaWYgdGhlbgorc3luIGtleXdvcmQgbmFzdHJhbkRtYXBSZXBlYXQgIGRvIHdoaWxlCitzeW4gcmVnaW9uIG5hc3RyYW5EbWFwU3RyaW5nICBzdGFydD0rIisgZW5kPSsiKyBvbmVsaW5lCitzeW4gcmVnaW9uIG5hc3RyYW5EbWFwU3RyaW5nICBzdGFydD0rJysgZW5kPSsnKyBvbmVsaW5lCisiIElmIHlvdSBkb24ndCBsaWtlIGluaXRpYWwgdGFicyBpbiBkbWFwIChvciBhdCBhbGwpCisic3luIG1hdGNoIG5hc3RyYW5EbWFwSW5pVGFiICAiXlx0LiokIgorInN5biBtYXRjaCBuYXN0cmFuRG1hcFRhYiAgICJcdCIKKworIiBBbnkgaW50ZWdlcgorc3luIG1hdGNoIG5hc3RyYW5EbWFwTnVtYmVyICAiLVw9XDxbMC05XVwrXD4iCisiIGZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggbmFzdHJhbkRtYXBGbG9hdCAgIlw8WzAtOV1cK1wuWzAtOV0qXChbZWRFRF1bLStdXD1bMC05XVwrXClcPVw+IgorIiBmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggbmFzdHJhbkRtYXBGbG9hdCAgIlwuWzAtOV1cK1woW2VkRURdWy0rXVw9WzAtOV1cK1wpXD1cPiIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRob3V0IGRvdCwgd2l0aCBleHBvbmVudAorc3luIG1hdGNoIG5hc3RyYW5EbWFwRmxvYXQgICJcPFswLTldXCtbZWRFRF1bLStdXD1bMC05XVwrXD4iCisKK3N5biBtYXRjaCBuYXN0cmFuRG1hcExvZ2ljYWwgIlwodHJ1ZVx8ZmFsc2VcKSIKKworc3luIG1hdGNoIG5hc3RyYW5EbWFwUHJlQ29uZGl0ICAiXiNkZWZpbmVcPiIKK3N5biBtYXRjaCBuYXN0cmFuRG1hcFByZUNvbmRpdCAgIl4jaW5jbHVkZVw+IgorIgorIiAtLS0tLS0tQ29tbWVudHMgbWF5IGJlIGNvbnRhaW5lZCBpbiBhbm90aGVyIGxpbmUuCisiCitzeW4gbWF0Y2ggbmFzdHJhbkRtYXBDb21tZW50ICJeW1wkXS4qJCIKK3N5biBtYXRjaCBuYXN0cmFuRG1hcENvbW1lbnQgIlwkLiokIgorc3luIG1hdGNoIG5hc3RyYW5EbWFwQ29tbWVudCAiXltcJF0uKiQiIGNvbnRhaW5lZAorc3luIG1hdGNoIG5hc3RyYW5EbWFwQ29tbWVudCAiXCQuKiQiICBjb250YWluZWQKKyIgVHJlYXQgYWxsIHBhc3QgNzJuZCBjb2x1bW4gYXMgYSBjb21tZW50LiBEbyBub3Qgd29yayB3aXRoIHRhYnMhCisiIEJyZWFrcyBkb3duIHdoZW4gNzItNzNyZCBjb2x1bW4gaXMgaW4gYW5vdGhlciBtYXRjaCAoZWcgbnVtYmVyIG9yIGtleXdvcmQpCitzeW4gbWF0Y2ggIG5hc3RyYW5EbWFwQ29tbWVudCAgIl4uXHstNzJ9LiokImxjPTcyIGNvbnRhaW5lZAorCisiCisiIC0tLS0tLS1VdGlsaXR5IE1vZHVsZXMKKyIKK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwVXRpbG1vZAkgICAgICAgYXBwZW5kIGNvcHkgZGJjIGRiZGljdCBkYmRpciBkbWluIGRybXMxCitzeW4ga2V5d29yZCBuYXN0cmFuRG1hcFV0aWxtb2QJICAgICAgIGR0aWluIGVsdHBydCBpZnAgaWZwMSBpbnB1dHQyIGlucHV0dDQgbGFteAorc3luIGtleXdvcmQgbmFzdHJhbkRtYXBVdGlsbW9kCSAgICAgICBtYXRnZW4gbWF0Z3ByIG1hdG1vZCBtYXRwY2ggbWF0cHJuIG1hdHBydAorc3luIGtleXdvcmQgbmFzdHJhbkRtYXBVdGlsbW9kCSAgICAgICBtb2R0cmwgbXRyeGluIG9mcCBvdXRwdXQyIG91dHB1dDQgcGFyYW0KK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwVXRpbG1vZAkgICAgICAgcGFyYW1sIHBhcmFtciBwcnRwYXJhbSBwdnQgc2NhbGFyCitzeW4ga2V5d29yZCBuYXN0cmFuRG1hcFV0aWxtb2QJICAgICAgIHNlcXAgc2V0dmFsIHRhYmVkaXQgdGFicHJ0IHRhYnB0IHZlYyB2ZWNwbG90CitzeW4ga2V5d29yZCBuYXN0cmFuRG1hcFV0aWxtb2QJICAgICAgIHhzb3J0CisiCisiIC0tLS0tLS1NYXRyaXggTW9kdWxlcworIgorc3luIGtleXdvcmQgbmFzdHJhbkRtYXBNYXRtb2QJICAgICAgIGFkZCBhZGQ1IGNlYWQgZGNtcCBkZWNvbXAgZGlhZ29uYWwgZmJzIG1lcmdlCitzeW4ga2V5d29yZCBuYXN0cmFuRG1hcE1hdG1vZAkgICAgICAgbXB5YWQgbm9ybSByZWFkIHJlaWdsIHNtcHlhZCBzb2x2ZSBzb2x2aXQKK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwTWF0bW9kCSAgICAgICB0cm5zcCB1bWVyZ2UgdW1lcmdlMSB1cGFydG4gZG1paW4gcGFydG4KK3N5biByZWdpb24gIG5hc3RyYW5EbWFwTWF0bW9kCSAgICAgICBzdGFydD0rXiAqW0RkXVtNbV1bSWldKyBlbmQ9K1tcL10rCisiCisiIC0tLS0tLS1JbXBsaWNpdCBGdW5jdGlvbnMKKyIKK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwSW1wbGljaXQgYWJzIGFjb3MgYWNvc2ggYW5kbCBhc2luIGFzaW5oIGF0YW4gYXRhbjIKK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwSW1wbGljaXQgYXRhbmggYXRhbmgyIGNoYXIgY2xlbiBjbG9jayBjbXBseCBjb25jYXQxCitzeW4ga2V5d29yZCBuYXN0cmFuRG1hcEltcGxpY2l0IGNvbmNhdDIgY29uY2F0MyBjb25qZyBjb3MgY29zaCBkYmxlIGRpYWdvZmYKK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwSW1wbGljaXQgZGlhZ29uIGRpbSBkbGFibGFuayBkbHhibGFuayBkcHJvZCBlcXZsIGV4cAorc3luIGtleXdvcmQgbmFzdHJhbkRtYXBJbXBsaWNpdCBnZXRkaWFnIGdldHN5cyBpY2hhciBpbWFnIGltcGwgaW5kZXggaW5kZXhzdHIKK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwSW1wbGljaXQgaW50IGl0b2wgbGVxIGxnZSBsZ3QgbGxlIGxsdCBsbmUgbG9nIGxvZzEwCitzeW4ga2V5d29yZCBuYXN0cmFuRG1hcEltcGxpY2l0IGxvZ3ggbHRvaSBtY2dldHN5cyBtY3B1dHN5cyBtYXggbWluIG1vZCBuZXF2bAorc3luIGtleXdvcmQgbmFzdHJhbkRtYXBJbXBsaWNpdCBuaW50IG5vb3Agbm9ybWFsIG5vdGwgbnVtZXEgbnVtZ2UgbnVtZ3QgbnVtbGUKK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwSW1wbGljaXQgbnVtbHQgbnVtbmUgb3JsIHBpIHByZWNpc29uIHB1dGRpYWcgcHV0c3lzCitzeW4ga2V5d29yZCBuYXN0cmFuRG1hcEltcGxpY2l0IHJhbmQgcmRpYWdvbiByZWFsIHJ0aW10b2dvIHNldGNvcmUgc2lnbiBzaW4KK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwSW1wbGljaXQgc2luaCBzbmdsIHNwcm9kIHNxcnQgc3Vic3RyaW4gdGFuIHRhbmgKK3N5biBrZXl3b3JkIG5hc3RyYW5EbWFwSW1wbGljaXQgdGltZXRvZ28gd2xlbiB4b3JsCisiCisiCisiLS0tLS0tLS0tLS0tLS0tLS0tLS1JTlBVVCBGSUxFIFNZTlRBWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIgorIgorIiAtLS0tLS0tTmFzdHJhbiBTdGF0ZW1lbnQKKyIKK3N5biBrZXl3b3JkIG5hc3RyYW5OYXN0cmFuQ2FyZAkJIG5hc3RyYW4KKyIKKyIgLS0tLS0tLVRoZSBGaWxlIE1hbmFnZW1lbnQgU2VjdGlvbiAoRk1TKQorIgorc3luIHJlZ2lvbiBuYXN0cmFuRk1TQ2FyZCBzdGFydD0rXiAqW0FhXVtDY11bUXFdW1V1XVtJaV0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkZNU0NhcmQgc3RhcnQ9K14gKltBYV1bU3NdW1NzXVtJaV1bR2ddKyBlbmQ9KyQrICBvbmVsaW5lCitzeW4gcmVnaW9uIG5hc3RyYW5GTVNDYXJkIHN0YXJ0PSteICpbQ2NdW29PXVtObl1bTm5dW0VlXSsgZW5kPSskKyAgb25lbGluZQorc3luIHJlZ2lvbiBuYXN0cmFuRk1TQ2FyZCBzdGFydD0rXiAqW0RkXVtCYl1bQ2NdW0xsXVtFZV0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkZNU0NhcmQgc3RhcnQ9K14gKltEZF1bQmJdW0RkXVtJaV1bQ2NdKyBlbmQ9KyQrICBvbmVsaW5lCitzeW4gcmVnaW9uIG5hc3RyYW5GTVNDYXJkIHN0YXJ0PSteICpbRGRdW0JiXVtEZF1bSWldW1JyXSsgZW5kPSskKyAgb25lbGluZQorc3luIHJlZ2lvbiBuYXN0cmFuRk1TQ2FyZCBzdGFydD0rXiAqW0RkXVtCYl1bRmZdW0lpXVtYeF0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkZNU0NhcmQgc3RhcnQ9K14gKltEZF1bQmJdW0xsXVtPb11bQWFdKyBlbmQ9KyQrICBvbmVsaW5lCitzeW4gcmVnaW9uIG5hc3RyYW5GTVNDYXJkIHN0YXJ0PSteICpbRGRdW0JiXVtMbF1bT29dW0NjXSsgZW5kPSskKyAgb25lbGluZQorc3luIHJlZ2lvbiBuYXN0cmFuRk1TQ2FyZCBzdGFydD0rXiAqW0RkXVtCYl1bU3NdW0VlXVtUdF0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkZNU0NhcmQgc3RhcnQ9K14gKltEZF1bQmJdW1V1XVtObl1bTGxdKyBlbmQ9KyQrICBvbmVsaW5lCitzeW4gcmVnaW9uIG5hc3RyYW5GTVNDYXJkIHN0YXJ0PSteICpbRGRdW0JiXVtVdV1bUHBdW0RkXSsgZW5kPSskKyAgb25lbGluZQorc3luIHJlZ2lvbiBuYXN0cmFuRk1TQ2FyZCBzdGFydD0rXiAqW0RkXVtFZV1bRmZdW0lpXVtObl0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkZNU0NhcmQgc3RhcnQ9K14gKltFZV1bTm5dW0RkXVtKal1bT29dKyBlbmQ9KyQrICBvbmVsaW5lCitzeW4gcmVnaW9uIG5hc3RyYW5GTVNDYXJkIHN0YXJ0PSteICpbRWVdW1h4XVtQcF1bQWFdW05uXSsgZW5kPSskKyAgb25lbGluZQorc3luIHJlZ2lvbiBuYXN0cmFuRk1TQ2FyZCBzdGFydD0rXiAqW0lpXVtObl1bQ2NdW0xsXVtVdV0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkZNU0NhcmQgc3RhcnQ9K14gKltJaV1bTm5dW0lpXVtUdF0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkZNU0NhcmQgc3RhcnQ9K14gKltQcF1bUnJdW09vXVtKal0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkZNU0NhcmQgc3RhcnQ9K14gKltScl1bRWVdW1NzXVtUdF0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biBtYXRjaCAgIG5hc3RyYW5EbWFwVXRpbG1vZAkgICAiXiAqW1JyXVtFZV1bU3NdW1R0XVtBYV0uKiwuKiwiIGNvbnRhaW5zPW5hc3RyYW5EbWFwQ29tbWVudAorIgorIiAtLS0tLS0tRXhlY3V0aXZlIENvbnRyb2wgU2VjdGlvbgorIgorc3luIHJlZ2lvbiBuYXN0cmFuRUNTQ2FyZCBzdGFydD0rXiAqW0FhXVtMbF1bVHRdW0VlXVtScl0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkVDU0NhcmQgc3RhcnQ9K14gKltBYV1bUHBdW1BwXSsgZW5kPSskKyAgb25lbGluZQorc3luIHJlZ2lvbiBuYXN0cmFuRUNTQ2FyZCBzdGFydD0rXiAqW0NjXVtPb11bTW1dW1BwXVtJaV0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkVDU0NhcmQgc3RhcnQ9K14gKltEZF1bSWldW0FhXVtHZ10gKyBlbmQ9KyQrICBvbmVsaW5lCitzeW4gcmVnaW9uIG5hc3RyYW5FQ1NDYXJkIHN0YXJ0PSteICpbRWVdW0NjXVtIaF1bT29dKyBlbmQ9KyQrICBvbmVsaW5lCitzeW4gcmVnaW9uIG5hc3RyYW5FQ1NDYXJkIHN0YXJ0PSteICpbRWVdW05uXVtEZF1bQWFdW0xsXSsgZW5kPSskKyAgb25lbGluZQorc3luIHJlZ2lvbiBuYXN0cmFuRUNTQ2FyZCBzdGFydD0rXiAqW0lpXVtEZF0rIGVuZD0rJCsgIG9uZWxpbmUKK3N5biByZWdpb24gbmFzdHJhbkVDU0NhcmQgc3RhcnQ9K14gKltJaV1bTm5dW0NjXVtMbF1bVXVdKyBlbmQ9KyQrICBvbmVsaW5lCitzeW4gcmVnaW9uIG5hc3RyYW5FQ1NDYXJkIHN0YXJ0PSteICpbTGxdW0lpXVtObl1bS2tdKyBlbmQ9KyQrICBvbmVsaW5lCitzeW4gcmVnaW9uIG5hc3RyYW5FQ1NDYXJkIHN0YXJ0PSteICpbTW1dW0FhXVtMbF1bVHRdW0VlXSsgZW5kPSskKyAgb25lbGluZQorc3luIHJlZ2lvbiBuYXN0cmFuRUNTQ2FyZCBzdGFydD0rXiAqW1NzXVtPb11bTGxdICsgZW5kPSskKyAgb25lbGluZQorc3luIHJlZ2lvbiBuYXN0cmFuRUNTQ2FyZCBzdGFydD0rXiAqW1R0XVtJaV1bTW1dW0VlXSsgZW5kPSskKyAgb25lbGluZQorIgorIiAtLS0tLS0tRGVsaW1pdGVycworIgorc3luIG1hdGNoIG5hc3RyYW5EZWxpbWl0ZXIgIltDY11bRWVdW05uXVtEZF0iIGNvbnRhaW5lZAorc3luIG1hdGNoIG5hc3RyYW5EZWxpbWl0ZXIgIltCYl1bRWVdW0dnXVtJaV1bTm5dIiBjb250YWluZWQKK3N5biBtYXRjaCBuYXN0cmFuRGVsaW1pdGVyICIgKltCYl1bVXVdW0xsXVtLa10iIGNvbnRhaW5lZAorc3luIG1hdGNoIG5hc3RyYW5EZWxpbWl0ZXIgIltFZV1bTm5dW0RkXSAqW2REXVtBYV1bVHRdW0FhXSIgY29udGFpbmVkCisiCisiIC0tLS0tLS1DYXNlIENvbnRyb2wgc2VjdGlvbgorIgorc3luIHJlZ2lvbiBuYXN0cmFuQ0Mgc3RhcnQ9K14gKltDY11bRWVdW05uXVtEZF0rIGVuZD0rXiAqW0JiXVtFZV1bR2ddW0lpXVtObl0rIGNvbnRhaW5zPW5hc3RyYW5EZWxpbWl0ZXIsbmFzdHJhbkJ1bGtEYXRhLG5hc3RyYW5EbWFwQ29tbWVudAorCisiCisiIC0tLS0tLS1CdWxrIERhdGEgc2VjdGlvbgorIgorc3luIHJlZ2lvbiBuYXN0cmFuQnVsa0RhdGEgc3RhcnQ9KyAqW0JiXVtVdV1bTGxdW0trXSAqJCsgZW5kPSteIFtFZV1bTm5dW0RkXSAqW0RkXSsgY29udGFpbnM9bmFzdHJhbkRlbGltaXRlcixuYXN0cmFuRG1hcENvbW1lbnQKKyIKKyIgLS0tLS0tLVRoZSBmb2xsb3dpbmcgY2FyZHMgbWF5IGFwcGVhciBpbiBtdWx0aXBsZSBzZWN0aW9ucyBvZiB0aGUgZmlsZQorIgorc3luIGtleXdvcmQgbmFzdHJhblV0aWxDYXJkIEVDSE9PTiBFQ0hPT0ZGIElOQ0xVREUgUEFSQU0KKworCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbmFzdHJhbl9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgIGxldCBkaWRfbmFzdHJhbl9zeW50YXhfaW5pdHMgPSAxCisgICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZW5kaWYKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICBIaUxpbmsgbmFzdHJhbkRtYXBleGVjbW9kCSAgICAgU3RhdGVtZW50CisgIEhpTGluayBuYXN0cmFuRG1hcFR5cGUJICAgICBUeXBlCisgIEhpTGluayBuYXN0cmFuRG1hcFByZUNvbmRpdAkgICAgIEVycm9yCisgIEhpTGluayBuYXN0cmFuRG1hcFV0aWxtb2QJICAgICBQcmVQcm9jCisgIEhpTGluayBuYXN0cmFuRG1hcE1hdG1vZAkgICAgIG5hc3RyYW5EbWFwVXRpbG1vZAorICBIaUxpbmsgbmFzdHJhbkRtYXBTdHJpbmcJICAgICBTdHJpbmcKKyAgSGlMaW5rIG5hc3RyYW5EbWFwTnVtYmVyCSAgICAgQ29uc3RhbnQKKyAgSGlMaW5rIG5hc3RyYW5EbWFwRmxvYXQJICAgICBuYXN0cmFuRG1hcE51bWJlcgorICBIaUxpbmsgbmFzdHJhbkRtYXBJbml0VGFiCSAgICAgbmFzdHJhbkRtYXBOdW1iZXIKKyAgSGlMaW5rIG5hc3RyYW5EbWFwVGFiCQkgICAgIG5hc3RyYW5EbWFwTnVtYmVyCisgIEhpTGluayBuYXN0cmFuRG1hcExvZ2ljYWwJICAgICBuYXN0cmFuRG1hcEV4ZWNtb2QKKyAgSGlMaW5rIG5hc3RyYW5EbWFwSW1wbGljaXQJICAgICBJZGVudGlmaWVyCisgIEhpTGluayBuYXN0cmFuRG1hcENvbW1lbnQJICAgICBDb21tZW50CisgIEhpTGluayBuYXN0cmFuRG1hcFJlcGVhdAkgICAgIG5hc3RyYW5EbWFwZXhlY21vZAorICBIaUxpbmsgbmFzdHJhbk5hc3RyYW5DYXJkCSAgICAgbmFzdHJhbkRtYXBQcmVDb25kaXQKKyAgSGlMaW5rIG5hc3RyYW5FQ1NDYXJkCQkgICAgIG5hc3RyYW5EbWFwVXRpbG1vZAorICBIaUxpbmsgbmFzdHJhbkZNU0NhcmQJCSAgICAgbmFzdHJhbk5hc3RyYW5DYXJkCisgIEhpTGluayBuYXN0cmFuQ0MJCSAgICAgbmFzdHJhbkRtYXBleGVjbW9kCisgIEhpTGluayBuYXN0cmFuRGVsaW1pdGVyCSAgICAgU3BlY2lhbAorICBIaUxpbmsgbmFzdHJhbkJ1bGtEYXRhCSAgICAgbmFzdHJhbkRtYXBUeXBlCisgIEhpTGluayBuYXN0cmFuVXRpbENhcmQJICAgICBuYXN0cmFuRG1hcGV4ZWNtb2QKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm5hc3RyYW4iCisKKyJFT0YgdmltOiB0cz04IG5vZXQgdHc9MTIwIHN3PTggc3RzPTAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L25hdHVyYWwudmltIGIvcnVudGltZS9zeW50YXgvbmF0dXJhbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmMTQwZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L25hdHVyYWwudmltCkBAIC0wLDAgKzEsMjA1IEBACisiIFZpbSBzeW50YXggZmlsZQorIgorIiBMYW5ndWFnZToJCU5BVFVSQUwKKyIgVmVyc2lvbjoJCTIuMC4yNi4xNworIiBNYWludGFpbmVyOglNYXJrbyBMZWlwZXJ0IDx2aW1AbWxlaXBlcnQuZGU+CisiIExhc3QgQ2hhbmdlZDoJMjAwMi0wMi0yOCAwOTo1MDozNgorIiBTdXBwb3J0OgkJaHR0cDovL3d3dy53aW5jb25zb2xlLmRlL3ZpbS9zeW50YXguaHRtbAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiB0aGlzIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdjp2ZXJzaW9uIDwgNjAwCisJc3ludGF4IGNsZWFyCisJc2V0IGlza2V5d29yZCs9LSwqLCMsKyxfLC8KK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZWxzZQorCXNldGxvY2FsIGlza2V5d29yZCs9LSwqLCMsKyxfLC8KK2VuZGlmCisKKyIgTkFUVVJBTCBpcyBjYXNlIGluc2Vuc2l0aXZlCitzeW50YXggY2FzZSBpZ25vcmUKKworIiBwcmVwcm9jZXNzb3IKK3N5biBrZXl3b3JkIG5hdHVyYWxJbmNsdWRlCQlpbmNsdWRlIG5leHRncm91cD1uYXR1cmFsT2JqTmFtZSBza2lwd2hpdGUKKworIiBkZWZpbmUgZGF0YQorc3luIGtleXdvcmQgbmF0dXJhbEtleXdvcmQJCWRlZmluZSBkYXRhIGVuZC1kZWZpbmUKK3N5biBrZXl3b3JkIG5hdHVyYWxLZXl3b3JkCQlpbmRlcGVuZGVudCBnbG9iYWwgcGFyYW1ldGVyIGxvY2FsIHJlZGVmaW5lIHZpZXcKK3N5biBrZXl3b3JkIG5hdHVyYWxLZXl3b3JkCQljb25zdFthbnRdIGluaXQgaW5pdGlhbAorCisiIGxvb3BzCitzeW4ga2V5d29yZCBuYXR1cmFsTG9vcAkJCXJlYWQgZW5kLXJlYWQgZW5kLXdvcmsgZmluZCBlbmQtZmluZCBoaXN0b2dyYW0gZW5kLWhpc3RvZ3JhbQorc3luIGtleXdvcmQgbmF0dXJhbExvb3AJCQllbmQtYWxsIHNvcnQgZW5kLXNvcnQgc29ydGVkIGRlc2NlbmRpbmcgYXNjZW5kaW5nCitzeW4ga2V5d29yZCBuYXR1cmFsUmVwZWF0CQlyZXBlYXQgZW5kLXJlcGVhdCB3aGlsZSB1bnRpbCBmb3Igc3RlcCBlbmQtZm9yCitzeW4ga2V5d29yZCBuYXR1cmFsS2V5d29yZAkJaW4gZmlsZSB3aXRoIGZpZWxkIHN0YXJ0aW5nIGZyb20gZW5kaW5nIGF0IHRocnUgYnkgaXNuIHdoZXJlCitzeW4ga2V5d29yZCBuYXR1cmFsRXJyb3IJCW9uIGVycm9yIGVuZC1lcnJvcgorc3luIGtleXdvcmQgbmF0dXJhbEtleXdvcmQJCWFjY2VwdCByZWplY3QgZW5kLWVuZGRhdGEgbnVtYmVyIHVuaXF1ZSByZXRhaW4gYXMgcmVsZWFzZQorc3luIGtleXdvcmQgbmF0dXJhbEtleXdvcmQJCXN0YXJ0IGVuZC1zdGFydCBicmVhayBlbmQtYnJlYWsgcGh5c2ljYWwgcGFnZSB0b3Agc2VxdWVuY2UKK3N5biBrZXl3b3JkIG5hdHVyYWxLZXl3b3JkCQllbmQtdG9wcGFnZSBlbmQtZW5kcGFnZSBlbmQtZW5kZmlsZSBiZWZvcmUgcHJvY2Vzc2luZworc3luIGtleXdvcmQgbmF0dXJhbEtleXdvcmQJCWVuZC1iZWZvcmUKKworIiBjb25kaXRpb25hbHMKK3N5biBrZXl3b3JkIG5hdHVyYWxDb25kaXRpb25hbAlpZiB0aGVuIGVsc2UgZW5kLWlmIGVuZC1ub3JlYworc3luIGtleXdvcmQgbmF0dXJhbENvbmRpdGlvbmFsCWRlY2lkZSBlbmQtZGVjaWRlIHZhbHVlIHdoZW4gY29uZGl0aW9uIG5vbmUgYW55CisKKyIgYXNzaWdubWVudCAvIGNhbGN1bGF0aW9uCitzeW4ga2V5d29yZCBuYXR1cmFsS2V5d29yZAkJcmVzZXQgYXNzaWduIG1vdmUgbGVmdCByaWdodCBqdXN0aWZpZWQgY29tcHJlc3MgdG8gaW50byBlZGl0ZWQKK3N5biBrZXl3b3JkIG5hdHVyYWxLZXl3b3JkCQlhZGQgc3VidHJhY3QgbXVsdGlwbHkgZGl2aWRlIGNvbXB1dGUgbmFtZQorc3luIGtleXdvcmQgbmF0dXJhbEtleXdvcmQJCWFsbCBnaXZpbmcgcmVtYWluZGVyIHJvdW5kZWQgbGVhdmluZyBzcGFjZQorc3luIGtleXdvcmQgbmF0dXJhbEtleXdvcmQJCWV4YW1pbmUgZnVsbCByZXBsYWNlIGdpdmluZyBzZXBhcmF0ZSBkZWxpbWl0ZXIgbW9kaWZpZWQKK3N5biBrZXl3b3JkIG5hdHVyYWxLZXl3b3JkCQlzdXNwZW5kIGlkZW50aWNhbCBzdXBwcmVzcworCisiIHByb2dyYW0gZmxvdworc3luIGtleXdvcmQgbmF0dXJhbEZsb3cJCQljYWxsbmF0IGZldGNoIHJldHVybiBlbnRlciBlc2NhcGUgYm90dG9tIHRvcCBzdGFjayBmb3JtYXR0ZWQKK3N5biBrZXl3b3JkIG5hdHVyYWxGbG93CQkJY29tbWFuZCBjYWxsCitzeW4ga2V5d29yZCBuYXR1cmFsZmxvdwkJCWVuZC1zdWJyb3V0aW5lIHJvdXRpbmUKKworIiBmaWxlIG9wZXJhdGlvbnMKK3N5biBrZXl3b3JkIG5hdHVyYWxLZXl3b3JkCQl1cGRhdGUgc3RvcmUgZ2V0IGRlbGV0ZSBlbmQgdHJhbnNhY3Rpb24gd29yayBvbmNlIGNsb3NlCisKKyIgb3RoZXIga2V5d29yZHMKK3N5biBrZXl3b3JkIG5hdHVyYWxLZXl3b3JkCQlmaXJzdCBldmVyeSBvZiBubyByZWNvcmRbc10gZm91bmQgaWdub3JlIGltbWVkaWF0ZQorc3luIGtleXdvcmQgbmF0dXJhbEtleXdvcmQJCXNldCBzZXR0aW1lIGtleSBjb250cm9sIHN0b3AgdGVybWluYXRlCisKKyIgaW4tL291dHB1dAorc3luIGtleXdvcmQgbmF0dXJhbEtleXdvcmQJCXdyaXRlIGRpc3BsYXkgaW5wdXQgcmVpbnB1dCBub3RpdGxlIG5vaGRyIG1hcCBuZXdwYWdlIG1hcmsKK3N5biBrZXl3b3JkIG5hdHVyYWxLZXl3b3JkCQlhbGFybSB0ZXh0IGhlbHAgZWplY3QgaW5kZXgKK3N5biBrZXl3b3JkIG5hdHVyYWxLZXl3b3JkCQlmb3JtYXQgcHJpbnRlciBza2lwIGxpbmVzCisKKyIgZnVuY3Rpb25zCitzeW4ga2V5d29yZCBuYXR1cmFsS2V5d29yZAkJYWJzIGF0biBjb3MgZXhwIGZyYWMgaW50IGxvZyBzZ24gc2luIHNxcnQgdGFuIHZhbCBvbGQKKworIiByZXBvcnQgbW9kZSBrZXl3b3Jkcworc3luIGtleXdvcmQgbmF0dXJhbFJNS2V5d29yZAlzYW1lIGxvb3Agb2J0YWluIGluZGV4ZWQgZG8gZG9lbmQKKworIiBTdWJyb3V0aW5lIG5hbWUKK3N5biBrZXl3b3JkCW5hdHVyYWxGbG93CQkJcGVyZm9ybSBzdWJyb3V0aW5lIG5leHRncm91cD1uYXR1cmFsRnVuY3Rpb24gc2tpcHdoaXRlCitzeW4gbWF0Y2gJbmF0dXJhbEZ1bmN0aW9uCQkiXDxbYS16XVstX2EtejAtOV0qXD4iCisKK3N5biBrZXl3b3JkCW5hdHVyYWxGbG93CQkJdXNpbmcgbmV4dGdyb3VwPW5hdHVyYWxLZXl3b3JkLG5hdHVyYWxPYmpOYW1lIHNraXB3aGl0ZQorc3luIG1hdGNoCW5hdHVyYWxPYmpOYW1lCQkiXDxbYS16XVstX2EtejAtOV1ceyw3fVw+IgorCisiIExhYmVscworc3luIG1hdGNoCW5hdHVyYWxMYWJlbAkJIlw8WysjYS16XVstXyNhLXowLTldKlwuIgorc3luIG1hdGNoCW5hdHVyYWxSZWYJCQkiXDxbKyNhLXpdWy1fI2EtejAtOV0qXD5cLlw8WysjYS16XVsqXVw9Wy1fI2EtejAtOV0qXD4iCisKKyIgU3lzdGVtIHZhcmlhYmxlcworc3luIG1hdGNoCW5hdHVyYWxTeXNWYXIJCSJcPFwqW2Etel1bLWEtejAtOV0qXD4iCisKKyJpbnRlZ2VyIG51bWJlciwgb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdpdGhvdXQgYSBkb3QuCitzeW4gbWF0Y2gJbmF0dXJhbE51bWJlcgkJIlw8LVw9XGRcK1w+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QKK3N5biBtYXRjaAluYXR1cmFsTnVtYmVyCQkiXDwtXD1cZFwrXC5cZFwrXD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90CitzeW4gbWF0Y2gJbmF0dXJhbE51bWJlcgkJIlwuXGRcKyIKKworIiBGb3JtYXRzIGluIHdyaXRlIHN0YXRlbWVudAorc3luIG1hdGNoCW5hdHVyYWxGb3JtYXQJCSJcPFxkXCtbVFhdXD4iCisKKyIgU3RyaW5nIGFuZCBDaGFyYWN0ZXIgY29udHN0YW50cworc3luIG1hdGNoCW5hdHVyYWxTdHJpbmcJCSJIJ1x4XCsnIgorc3luIHJlZ2lvbiAgbmF0dXJhbFN0cmluZwkJc3RhcnQ9KyIrIGVuZD0rIisKK3N5biByZWdpb24JbmF0dXJhbFN0cmluZwkJc3RhcnQ9KycrIGVuZD0rJysKKworIiBUeXBlIGRlZmluaXRpb24KK3N5biBtYXRjaAluYXR1cmFsQXR0cmlidXRlCSJcPFstYS16XVthLXpdPVstYS16MC05X1wuLF1cK1w+Igorc3luIG1hdGNoCW5hdHVyYWxUeXBlCQkJY29udGFpbmVkICJcPFtBQklOUF1cZFwrXCgsXGRcK1wpXD1cPiIKK3N5biBtYXRjaAluYXR1cmFsVHlwZQkJCWNvbnRhaW5lZCAiXDxbQ0xdXD4iCisKKyIgIlRPRE8iIC8gb3RoZXIgY29tbWVudHMKK3N5biBrZXl3b3JkIG5hdHVyYWxUb2RvCQkJY29udGFpbmVkIHRvZG8gdGVzdAorc3luIG1hdGNoCW5hdHVyYWxDb21tZW50TWFyawljb250YWluZWQgIlthLXpdW14gXHQvOnxdKlwoXHNbXiBcdC86JyJ8XVwrXCkqOlxzImhlPWUtMQorCisiIGNvbW1lbnRzCitzeW4gcmVnaW9uCW5hdHVyYWxDb21tZW50CQlzdGFydD0iL1wqIiBlbmQ9IiQiIGNvbnRhaW5zPW5hdHVyYWxUb2RvLG5hdHVyYWxMaW5lUmVmLG5hdHVyYWxDb21tZW50TWFyaworc3luIHJlZ2lvbgluYXR1cmFsQ29tbWVudAkJc3RhcnQ9Il5cKltcIFwqXSIgZW5kPSIkIiBjb250YWlucz1uYXR1cmFsVG9kbyxuYXR1cmFsTGluZVJlZixuYXR1cmFsQ29tbWVudE1hcmsKK3N5biByZWdpb24JbmF0dXJhbENvbW1lbnQJCXN0YXJ0PSJeXGRcezR9IFwqW1wgXCpdImxjPTUgZW5kPSIkIiBjb250YWlucz1uYXR1cmFsVG9kbyxuYXR1cmFsTGluZVJlZixuYXR1cmFsQ29tbWVudE1hcmsKK3N5biBtYXRjaAluYXR1cmFsQ29tbWVudAkJIl4qJCIKK3N5biBtYXRjaAluYXR1cmFsQ29tbWVudAkJIl5cZFx7NH0gXCokImxjPTUKKyIgLyogaXMgbGVnYWwgc3ludGF4IGluIHBhcmVudGhlc2VzIGUuZy4gIiNpZGVudChsYWJlbC4vKikiCitzeW4gcmVnaW9uCW5hdHVyYWxQQ29tbWVudAkJY29udGFpbmVkIHN0YXJ0PSIvXCpccypbXiksXSIgIGVuZD0iJCIgY29udGFpbnM9bmF0dXJhbFRvZG8sbmF0dXJhbExpbmVSZWYsbmF0dXJhbENvbW1lbnRNYXJrCisKKyIgb3BlcmF0b3JzCitzeW4ga2V5d29yZAluYXR1cmFsT3BlcmF0b3IJCWFuZCBvciBub3QgZXEgbmUgZ3QgbHQgZ2UgbGUgbWFzayBzY2FuCisKKyIgY29uc3RhbnRzCitzeW4ga2V5d29yZCBuYXR1cmFsQm9vbGVhbgkJdHJ1ZSBmYWxzZQorCitzeW4gbWF0Y2gJbmF0dXJhbExpbmVObwkJIl5cZFx7NH0iCisKKyIgaWRlbnRpZmllcnMKK3N5biBtYXRjaAluYXR1cmFsSWRlbnQJCSJcPFsrI2Etel1bLV8jYS16MC05XSpcPlteXC4nXSJtZT1lLTEKK3N5biBtYXRjaAluYXR1cmFsSWRlbnQJCSJcPFsrI2Etel1bLV8jYS16MC05XSokIgorc3luIG1hdGNoCW5hdHVyYWxMZWdhbElkZW50CSJbKyNhLXpdWy1fI2EtejAtOV0qL1stXyNhLXowLTldKiIKKworIiBwYXJlbnRoZXNlcworc3luIHJlZ2lvbiAgbmF0dXJhbFBhcgkJCW1hdGNoZ3JvdXA9bmF0dXJhbFBhckd1aSBzdGFydD0iKCIgZW5kPSIpIiBjb250YWlucz1uYXR1cmFsTGFiZWwsbmF0dXJhbFJlZixuYXR1cmFsT3BlcmF0b3IsQG5hdHVyYWxDb25zdGFudCxuYXR1cmFsVHlwZSxuYXR1cmFsU3lzVmFyLG5hdHVyYWxQYXIsbmF0dXJhbExpbmVObyxuYXR1cmFsUENvbW1lbnQKK3N5biBtYXRjaAluYXR1cmFsTGluZVJlZgkJIihcZFx7NH0pIgorCisiIGJ1aWxkIHN5bnRheCBncm91cHMKK3N5bnRheCBjbHVzdGVyIG5hdHVyYWxDb25zdGFudAljb250YWlucz1uYXR1cmFsU3RyaW5nLG5hdHVyYWxOdW1iZXIsbmF0dXJhbEF0dHJpYnV0ZSxuYXR1cmFsQm9vbGVhbgorCisiIGZvbGRpbmcKK2lmIHY6dmVyc2lvbiA+PSA2MDAKKwlzZXQgZm9sZGlnbm9yZT0qCitlbmRpZgorCisKK2lmIHY6dmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX25hdHVyYWxfc3ludGF4X2luaXRzIikKKwlpZiB2OnZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9uYXR1cmFsX3N5bnRheF9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWVuZGlmCisJIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorCisJIiBDb25zdGFudHMKKwlIaUxpbmsgbmF0dXJhbEZvcm1hdAkJQ29uc3RhbnQKKwlIaUxpbmsgbmF0dXJhbEF0dHJpYnV0ZQkJQ29uc3RhbnQKKwlIaUxpbmsgbmF0dXJhbE51bWJlcgkJTnVtYmVyCisJSGlMaW5rIG5hdHVyYWxTdHJpbmcJCVN0cmluZworCUhpTGluayBuYXR1cmFsQm9vbGVhbgkJQm9vbGVhbgorCisJIiBBbGwga2luZHMgb2Yga2V5d29yZHMKKwlIaUxpbmsgbmF0dXJhbENvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisJSGlMaW5rIG5hdHVyYWxSZXBlYXQJCVJlcGVhdAorCUhpTGluayBuYXR1cmFsTG9vcAkJCVJlcGVhdAorCUhpTGluayBuYXR1cmFsRmxvdwkJCUtleXdvcmQKKwlIaUxpbmsgbmF0dXJhbEVycm9yCQkJS2V5d29yZAorCUhpTGluayBuYXR1cmFsS2V5d29yZAkJS2V5d29yZAorCUhpTGluayBuYXR1cmFsT3BlcmF0b3IJCU9wZXJhdG9yCisJSGlMaW5rIG5hdHVyYWxQYXJHdWkJCU9wZXJhdG9yCisKKwkiIExhYmVscworCUhpTGluayBuYXR1cmFsTGFiZWwJCQlMYWJlbAorCUhpTGluayBuYXR1cmFsUmVmTGFiZWwJCUxhYmVsCisKKwkiIENvbW1lbnRzCisJSGlMaW5rIG5hdHVyYWxQQ29tbWVudAkJQ29tbWVudAorCUhpTGluayBuYXR1cmFsQ29tbWVudAkJQ29tbWVudAorCUhpTGluayBuYXR1cmFsVG9kbwkJCVRvZG8KKwlIaUxpbmsgbmF0dXJhbENvbW1lbnRNYXJrCVByZVByb2MKKworCUhpTGluayBuYXR1cmFsSW5jbHVkZQkJSW5jbHVkZQorCUhpTGluayBuYXR1cmFsU3lzVmFyCQlJZGVudGlmaWVyCisJSGlMaW5rIG5hdHVyYWxMaW5lTm8JCUxpbmVOcgorCUhpTGluayBuYXR1cmFsTGluZVJlZgkJRXJyb3IKKwlIaUxpbmsgbmF0dXJhbFNwZWNpYWwJCVNwZWNpYWwKKwlIaUxpbmsgbmF0dXJhbENvbUtleQkJVG9kbworCisJIiBpbGxlZ2FsIHRoaW5ncworCUhpTGluayBuYXR1cmFsUk1LZXl3b3JkCQlFcnJvcgorCUhpTGluayBuYXR1cmFsTGVnYWxJZGVudAlFcnJvcgorCisJSGlMaW5rIG5hdHVyYWxUeXBlCQkJVHlwZQorCUhpTGluayBuYXR1cmFsRnVuY3Rpb24JCUZ1bmN0aW9uCisJSGlMaW5rIG5hdHVyYWxPYmpOYW1lCQlGdW5jdGlvbgorCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm5hdHVyYWwiCisKKyIgdmltOnNldCB0cz00IHN3PTQgbm9ldCBmdD12aW0gbGlzdDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L25jZi52aW0gYi9ydW50aW1lL3N5bnRheC9uY2YudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Yzc0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9uY2YudmltCkBAIC0wLDAgKzEsMjU4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIE5vdmVsbCAiTkNGIiBCYXRjaCBGaWxlCisiIE1haW50YWluZXI6ICAgSm9uYXRoYW4gSi4gTWluZXIgPG1pbmVyQGRvaXQud2lzYy5lZHU+CisiIExhc3QgQ2hhbmdlOglUdWUsIDA0IFNlcCAyMDAxIDE2OjIwOjMzIENEVAorIiAkSWQkCisKKyIgUmVtb3ZlIGFueSBvbGQgc3ludGF4IHN0dWZmIGhhbmdpbmcgYXJvdW5kCitpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3luIGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCitzeW4ga2V5d29yZCBuY2ZDb21tYW5kcwkJbW91bnQgbG9hZCB1bmxvYWQKK3N5biBrZXl3b3JkIG5jZkJvb2xlYW4JCW9uIG9mZgorc3luIGtleXdvcmQgbmNmQ29tbWFuZHMJCXNldCBuZXh0Z3JvdXA9bmNmU2V0Q29tbWFuZHMKK3N5biBrZXl3b3JkIG5jZlRpbWVUeXBlcwlSZWZlcmVuY2UgUHJpbWFyeSBTZWNvbmRhcnkgU2luZ2xlCitzeW4gbWF0Y2ggbmNmTG9hZCAgICAgICAiXCh1bmxcfGxcKW9hZCAuKiJsYz00IGNvbnRhaW5zPUFMTEJVVCxFcnJvcgorc3luIG1hdGNoIG5jZk1vdW50ICAgICAgIm1vdW50IC4qImxjPTUgY29udGFpbnM9QUxMQlVULEVycm9yCisKK3N5biBtYXRjaCBuY2ZDb21tZW50ICAgICJeXCAqcmVtLiokIgorc3luIG1hdGNoIG5jZkNvbW1lbnQgICAgIl5cICo7LiokIgorc3luIG1hdGNoIG5jZkNvbW1lbnQgICAgIl5cICojLiokIgorCitzeW4gbWF0Y2ggbmNmU2VhcmNoUGF0aCAic2VhcmNoIFwoYWRkXHxkZWxcKSAiIG5leHRncm91cD1uY2ZQYXRoCitzeW4gbWF0Y2ggbmNmUGF0aCAgICAgICAiXDxbXjogXVwrOlwoW0EtWmEtejAtOS5fXVx8XFxcKSpcPiIKK3N5biBtYXRjaCBuY2ZTZXJ2ZXJOYW1lICJeZmlsZSBzZXJ2ZXIgbmFtZSAuKiQiCitzeW4gbWF0Y2ggbmNmSVBYTmV0ICAgICAiXmlweCBpbnRlcm5hbCBuZXQiCisKKyIgU3RyaW5nCitzeW4gcmVnaW9uIG5jZlN0cmluZyAgICBzdGFydD0rIisgIGVuZD0rIisKK3N5biBtYXRjaCBuY2ZDb250U3RyaW5nICI9IFwoXChcLlx7MCwxfVwoT1U9XHxPPVwpXHswLDF9W0EtWl9dXCtcKVwrO1x7MCwxfVwpXCsibGM9MgorCitzeW4gbWF0Y2ggbmNmSGV4TnVtYmVyICAiXDxcZFwoXGRcK1x8W0EtRl1cK1wpKlw+Igorc3luIG1hdGNoIG5jZk51bWJlciAgICAgIlw8XGRcK1wuXHswLDF9XGQqXD4iCitzeW4gbWF0Y2ggbmNmSVBBZGRyICAgICAiXGRcezEsM31cLlxkXHsxLDN9XC5cZFx7MSwzfVwuXGRcezEsM30iCitzeW4gbWF0Y2ggbmNmVGltZSAgICAgICAiXCgrfD1cKVx7MCwxfVxkXHsxLDJ9OlxkXHsxLDJ9OlxkXHsxLDJ9Igorc3luIG1hdGNoIG5jZkRTVFRpbWUgICAgIihbXiBdXCsgW14gXVwrIFwoRklSU1RcfExBU1RcKVxzKlxkXHsxLDJ9OlxkXHsxLDJ9OlxkXHsxLDJ9IFwoQU1cfFBNXCkpIgorc3luIG1hdGNoIG5jZlRpbWVab25lICAgIltBLVpdXHszfVxkW0EtWl1cezN9IgorCitzeW4gbWF0Y2ggbmNmTG9naW5zICAgICAiXlwoW0RkXWlzXHxbRWVdblwpYWJsZSBsb2dpbltzXSoiCitzeW4gbWF0Y2ggbmNmU2NyaXB0ICAgICAiW14gXSpcLm5jZiIKKworIiAgU0VUIENvbW1hbmRzIHRoYXQgdGFrZSBhIE51bWJlciBmb2xsb3dpbmcKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChBbGVydCBNZXNzYWdlIE5vZGVzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKEF1dG8gUmVzdGFydCBBZnRlciBBYmVuZFwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChBdXRvIFJlc3RhcnQgQWZ0ZXIgQWJlbmQgRGVsYXkgVGltZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChDb21wcmVzc2lvbiBEYWlseSBDaGVjayBTdGFydGluZyBIb3VyXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKENvbXByZXNzaW9uIERhaWx5IENoZWNrIFN0b3AgSG91clwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChDb25jdXJyZW50IFJlbWlycm9yIFJlcXVlc3RzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKENvbnZlcnQgQ29tcHJlc3NlZCB0byBVbmNvbXByZXNzZWQgT3B0aW9uXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKERheXMgVW50b3VjaGVkIEJlZm9yZSBDb21wcmVzc2lvblwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChEZWNvbXByZXNzIEZyZWUgU3BhY2UgV2FybmluZyBJbnRlcnZhbFwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChEZWNvbXByZXNzIFBlcmNlbnQgRGlzayBTcGFjZSBGcmVlIHRvIEFsbG93IENvbW1pdFwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChEZWxldGVkIEZpbGVzIENvbXByZXNzaW9uIE9wdGlvblwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChEaXJlY3RvcnkgQ2FjaGUgQWxsb2NhdGlvbiBXYWl0IFRpbWVcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoRW5hYmxlIElQWCBDaGVja3N1bXNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoR2FyYmFnZSBDb2xsZWN0aW9uIEludGVydmFsXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKElQWCBOZXRCSU9TIFJlcGxpY2F0aW9uIE9wdGlvblwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChNYXhpbXVtIENvbmN1cnJlbnQgQ29tcHJlc3Npb25zXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1heGltdW0gQ29uY3VycmVudCBEaXJlY3RvcnkgQ2FjaGUgV3JpdGVzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1heGltdW0gQ29uY3VycmVudCBEaXNrIENhY2hlIFdyaXRlc1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChNYXhpbXVtIERpcmVjdG9yeSBDYWNoZSBCdWZmZXJzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1heGltdW0gRXh0ZW5kZWQgQXR0cmlidXRlcyBwZXIgRmlsZSBvciBQYXRoXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1heGltdW0gRmlsZSBMb2Nrc1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChNYXhpbXVtIEZpbGUgTG9ja3MgUGVyIENvbm5lY3Rpb25cKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTWF4aW11bSBJbnRlcnJ1cHQgRXZlbnRzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1heGltdW0gTnVtYmVyIG9mIERpcmVjdG9yeSBIYW5kbGVzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1heGltdW0gTnVtYmVyIG9mIEludGVybmFsIERpcmVjdG9yeSBIYW5kbGVzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1heGltdW0gT3V0c3RhbmRpbmcgTkNQIFNlYXJjaGVzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1heGltdW0gUGFja2V0IFJlY2VpdmUgQnVmZmVyc1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChNYXhpbXVtIFBoeXNpY2FsIFJlY2VpdmUgUGFja2V0IFNpemVcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTWF4aW11bSBSZWNvcmQgTG9ja3NcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTWF4aW11bSBSZWNvcmQgTG9ja3MgUGVyIENvbm5lY3Rpb25cKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTWF4aW11bSBTZXJ2aWNlIFByb2Nlc3Nlc1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChNYXhpbXVtIFN1YmRpcmVjdG9yeSBUcmVlIERlcHRoXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1heGltdW0gVHJhbnNhY3Rpb25zXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1pbmltdW0gQ29tcHJlc3Npb24gUGVyY2VudGFnZSBHYWluXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1pbmltdW0gRGlyZWN0b3J5IENhY2hlIEJ1ZmZlcnNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTWluaW11bSBGaWxlIENhY2hlIEJ1ZmZlcnNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTWluaW11bSBGaWxlIENhY2hlIFJlcG9ydCBUaHJlc2hvbGRcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTWluaW11bSBGcmVlIE1lbW9yeSBmb3IgR2FyYmFnZSBDb2xsZWN0aW9uXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE1pbmltdW0gUGFja2V0IFJlY2VpdmUgQnVmZmVyc1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChNaW5pbXVtIFNlcnZpY2UgUHJvY2Vzc2VzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKE5DUCBQYWNrZXQgU2lnbmF0dXJlIE9wdGlvblwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChORFMgQmFja2xpbmsgSW50ZXJ2YWxcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTkRTIENsaWVudCBOQ1AgUmV0cmllc1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChORFMgRXh0ZXJuYWwgUmVmZXJlbmNlIExpZmUgU3BhblwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChORFMgSW5hY3Rpdml0eSBTeW5jaHJvbml6YXRpb24gSW50ZXJ2YWxcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTkRTIEphbml0b3IgSW50ZXJ2YWxcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTmV3IFNlcnZpY2UgUHJvY2VzcyBXYWl0IFRpbWVcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTnVtYmVyIG9mIEZyZWVzIGZvciBHYXJiYWdlIENvbGxlY3Rpb25cKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoTnVtYmVyIG9mIFdhdGNoZG9nIFBhY2tldHNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoUHNldWRvIFByZWVtcHRpb24gQ291bnRcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoUmVhZCBBaGVhZCBMUlUgU2l0dGluZyBUaW1lIFRocmVzaG9sZFwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChSZW1pcnJvciBCbG9jayBTaXplXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKFJlc2VydmVkIEJ1ZmZlcnMgQmVsb3cgMTYgTWVnXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKFNlcnZlciBMb2cgRmlsZSBPdmVyZmxvdyBTaXplXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKFNlcnZlciBMb2cgRmlsZSBTdGF0ZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChTTVAgUG9sbGluZyBDb3VudFwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChTTVAgU3RhY2sgU2l6ZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChUSU1FU1lOQyBQb2xsaW5nIENvdW50XClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKFRJTUVTWU5DIFBvbGxpbmcgSW50ZXJ2YWxcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoVElNRVNZTkMgU3luY2hyb25pemF0aW9uIFJhZGl1c1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChUSU1FU1lOQyBXcml0ZSBWYWx1ZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChWb2x1bWUgTG9nIEZpbGUgT3ZlcmZsb3cgU2l6ZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChWb2x1bWUgTG9nIEZpbGUgU3RhdGVcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNOdW0gIlwoVm9sdW1lIExvdyBXYXJuaW5nIFJlc2V0IFRocmVzaG9sZFwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChWb2x1bWUgTG93IFdhcm5pbmcgVGhyZXNob2xkXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKFZvbHVtZSBUVFMgTG9nIEZpbGUgT3ZlcmZsb3cgU2l6ZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc051bSAiXChWb2x1bWUgVFRTIExvZyBGaWxlIFN0YXRlXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzTnVtICJcKFdvcmtlciBUaHJlYWQgRXhlY3V0ZSBJbiBhIFJvdyBDb3VudFwpXHMqPSIKKworIiBTRVQgQ29tbWFuZHMgdGhhdCB0YWtlIGEgQm9vbGVhbiAoT04vT0ZGKQorCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKEFsbG9jIE1lbW9yeSBDaGVjayBGbGFnXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChBbGxvdyBBdWRpdCBQYXNzd29yZHNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKEFsbG93IENoYW5nZSB0byBDbGllbnQgUmlnaHRzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChBbGxvdyBEZWxldGlvbiBvZiBBY3RpdmUgRGlyZWN0b3JpZXNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKEFsbG93IEludmFsaWQgUG9pbnRlcnNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKEFsbG93IExJUFwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoQWxsb3cgVW5lbmNyeXB0ZWQgUGFzc3dvcmRzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChBbGxvdyBVbm93bmVkIEZpbGVzIFRvIEJlIEV4dGVuZGVkXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChBdXRvIFJlZ2lzdGVyIE1lbW9yeSBBYm92ZSAxNiBNZWdhYnl0ZXNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKEF1dG8gVFRTIEJhY2tvdXQgRmxhZ1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoQXV0b21hdGljYWxseSBSZXBhaXIgQmFkIFZvbHVtZXNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKENoZWNrIEVxdWl2YWxlbnQgdG8gTWVcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKENvbW1hbmQgTGluZSBQcm9tcHQgRGVmYXVsdCBDaG9pY2VcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKENvbnNvbGUgRGlzcGxheSBXYXRjaGRvZyBMb2dvdXRzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChEYXlsaWdodCBTYXZpbmdzIFRpbWUgU3RhdHVzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChEZXZlbG9wZXIgT3B0aW9uXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChEaXNwbGF5IEluY29tcGxldGUgSVBYIFBhY2tldCBBbGVydHNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKERpc3BsYXkgTG9zdCBJbnRlcnJ1cHQgQWxlcnRzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChEaXNwbGF5IE5DUCBCYWQgQ29tcG9uZW50IFdhcm5pbmdzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChEaXNwbGF5IE5DUCBCYWQgTGVuZ3RoIFdhcm5pbmdzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChEaXNwbGF5IE9sZCBBUEkgTmFtZXNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKERpc3BsYXkgUmVsaW5xdWlzaCBDb250cm9sIEFsZXJ0c1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoRGlzcGxheSBTcHVyaW91cyBJbnRlcnJ1cHQgQWxlcnRzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChFbmFibGUgRGVhZGxvY2sgRGV0ZWN0aW9uXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChFbmFibGUgRGlzayBSZWFkIEFmdGVyIFdyaXRlIFZlcmlmeVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoRW5hYmxlIEZpbGUgQ29tcHJlc3Npb25cKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKEVuYWJsZSBJTyBIYW5kaWNhcCBBdHRyaWJ1dGVcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKEVuYWJsZSBTRUNVUkUuTkNGXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChGYXN0IFZvbHVtZSBNb3VudHNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKEdsb2JhbCBQc2V1ZG8gUHJlZW1wdGlvblwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoSGFsdCBTeXN0ZW0gb24gSW52YWxpZCBQYXJhbWV0ZXJzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChJZ25vcmUgRGlzayBHZW9tZXRyeVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoSW1tZWRpYXRlIFB1cmdlIG9mIERlbGV0ZWQgRmlsZXNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKE5DUCBGaWxlIENvbW1pdFwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoTkRTIFRyYWNlIEZpbGUgTGVuZ3RoIHRvIFplcm9cKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKE5EUyBUcmFjZSB0byBGaWxlXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChORFMgVHJhY2UgdG8gU2NyZWVuXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChOZXcgVGltZSBXaXRoIERheWxpZ2h0IFNhdmluZ3MgVGltZSBTdGF0dXNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKFJlYWQgQWhlYWQgRW5hYmxlZFwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoUmVhZCBGYXVsdCBFbXVsYXRpb25cKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKFJlYWQgRmF1bHQgTm90aWZpY2F0aW9uXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChSZWplY3QgTkNQIFBhY2tldHMgd2l0aCBCYWQgQ29tcG9uZW50c1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoUmVqZWN0IE5DUCBQYWNrZXRzIHdpdGggQmFkIExlbmd0aHNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKFJlcGxhY2UgQ29uc29sZSBQcm9tcHQgd2l0aCBTZXJ2ZXIgTmFtZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoUmVwbHkgdG8gR2V0IE5lYXJlc3QgU2VydmVyXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChTTVAgRGV2ZWxvcGVyIE9wdGlvblwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoU01QIEZsdXNoIFByb2Nlc3NvciBDYWNoZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoU01QIEludHJ1c2l2ZSBBYmVuZCBNb2RlXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChTTVAgTWVtb3J5IFByb3RlY3Rpb25cKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKFNvdW5kIEJlbGwgZm9yIEFsZXJ0c1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoVElNRVNZTkMgQ29uZmlndXJlZCBTb3VyY2VzXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChUSU1FU1lOQyBEaXJlY3RvcnkgVHJlZSBNb2RlXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChUSU1FU1lOQyBIYXJkd2FyZSBDbG9ja1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoVElNRVNZTkMgUkVTRVRcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNCb29sICJcKFRJTUVTWU5DIFJlc3RhcnQgRmxhZ1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoVElNRVNZTkMgU2VydmljZSBBZHZlcnRpc2luZ1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoVElNRVNZTkMgV3JpdGUgUGFyYW1ldGVyc1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoVFRTIEFib3J0IER1bXAgRmxhZ1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoVXBncmFkZSBMb3cgUHJpb3JpdHkgVGhyZWFkc1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoVm9sdW1lIExvdyBXYXJuIEFsbCBVc2Vyc1wpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0Jvb2wgIlwoV3JpdGUgRmF1bHQgRW11bGF0aW9uXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzQm9vbCAiXChXcml0ZSBGYXVsdCBOb3RpZmljYXRpb25cKVxzKj0iCisKKyIgU2V0IENvbW1hbmRzIHRoYXQgdGFrZSBhICJzdHJpbmciIC0tIE5PVCBRVU9URUQKKworc3luIG1hdGNoIG5jZlNldENvbW1hbmRzU3RyICJcKERlZmF1bHQgVGltZSBTZXJ2ZXIgVHlwZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc1N0ciAiXChTTVAgTmV0V2FyZSBLZXJuZWwgTW9kZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc1N0ciAiXChUaW1lIFpvbmVcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNTdHIgIlwoVElNRVNZTkMgQUREIFRpbWUgU291cmNlXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzU3RyICJcKFRJTUVTWU5DIFJFTU9WRSBUaW1lIFNvdXJjZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc1N0ciAiXChUSU1FU1lOQyBUaW1lIFNvdXJjZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc1N0ciAiXChUSU1FU1lOQyBUeXBlXClccyo9IgorCisiIFNFVCBDb21tYW5kcyB0aGF0IHRha2UgYSAiVGltZSIKKworc3luIG1hdGNoIG5jZlNldENvbW1hbmRzVGltZSAiXChDb21tYW5kIExpbmUgUHJvbXB0IFRpbWUgT3V0XClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzVGltZSAiXChEZWxheSBCZWZvcmUgRmlyc3QgV2F0Y2hkb2cgUGFja2V0XClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzVGltZSAiXChEZWxheSBCZXR3ZWVuIFdhdGNoZG9nIFBhY2tldHNcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNUaW1lICJcKERpcmVjdG9yeSBDYWNoZSBCdWZmZXIgTm9uUmVmZXJlbmNlZCBEZWxheVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc1RpbWUgIlwoRGlydHkgRGlyZWN0b3J5IENhY2hlIERlbGF5IFRpbWVcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNUaW1lICJcKERpcnR5IERpc2sgQ2FjaGUgRGVsYXkgVGltZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc1RpbWUgIlwoRmlsZSBEZWxldGUgV2FpdCBUaW1lXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzVGltZSAiXChNaW5pbXVtIEZpbGUgRGVsZXRlIFdhaXQgVGltZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc1RpbWUgIlwoTWlycm9yZWQgRGV2aWNlcyBBcmUgT3V0IG9mIFN5bmMgTWVzc2FnZSBGcmVxdWVuY3lcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNUaW1lICJcKE5ldyBQYWNrZXQgUmVjZWl2ZSBCdWZmZXIgV2FpdCBUaW1lXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzVGltZSAiXChUVFMgQmFja291dCBGaWxlIFRydW5jYXRpb24gV2FpdCBUaW1lXClccyo9Igorc3luIG1hdGNoIG5jZlNldENvbW1hbmRzVGltZSAiXChUVFMgVW5Xcml0dGVuIENhY2hlIFdhaXQgVGltZVwpXHMqPSIKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc1RpbWUgIlwoVHVyYm8gRkFUIFJlLVVzZSBXYWl0IFRpbWVcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNUaW1lICJcKERheWxpZ2h0IFNhdmluZ3MgVGltZSBPZmZzZXRcKVxzKj0iCisKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc1RpbWVEYXRlICJcKEVuZCBvZiBEYXlsaWdodCBTYXZpbmdzIFRpbWVcKVxzKj0iCitzeW4gbWF0Y2ggbmNmU2V0Q29tbWFuZHNUaW1lRGF0ZSAiXChTdGFydCBvZiBEYXlsaWdodCBTYXZpbmdzIFRpbWVcKVxzKj0iCisKK3N5biBtYXRjaCBuY2ZTZXRDb21tYW5kc0JpbmRDb24gIlwoQmluZGVyeSBDb250ZXh0XClccyo9IiBuZXh0Z3JvdXA9bmNmQ29udFN0cmluZworCitzeW4gY2x1c3RlciBuY2ZTZXRDb21tYW5kcyBjb250YWlucz1uY2ZTZXRDb21tYW5kc051bSxuY2ZTZXRDb21tYW5kc0Jvb2wsbmNmU2V0Q29tbWFuZHNTdHIsbmNmU2V0Q29tbWFuZHNUaW1lLG5jZlNldENvbW1hbmRzVGltZURhdGUsbmNmU2V0Q29tbWFuZHNCaW5kQ29uCisKKworaWYgZXhpc3RzKCJuY2ZfaGlnaGxpZ2h0X3Vua25vd25zIikKKyAgICBzeW4gbWF0Y2ggRXJyb3IgIlteIFx0XSoiIGNvbnRhaW5zPUFMTAorZW5kaWYKKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX25jZl9zeW50YXhfaW5pdHMiKQorICAgIGlmIHZlcnNpb24gPCA1MDgKKwlsZXQgZGlkX25jZl9zeW50YXhfaW5pdHMgPSAxCisJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgICBlbHNlCisJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgICAgZW5kaWYKKworICAgICIgVGhlIGRlZmF1bHQgbWV0aG9kcyBmb3IgaGlnaGxpZ2h0aW5nLiAgQ2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIKKyAgICBIaUxpbmsgbmNmQ29tbWFuZHMJCVN0YXRlbWVudAorICAgIEhpTGluayBuY2ZTZXRDb21tYW5kcwluY2ZDb21tYW5kcworICAgIEhpTGluayBuY2ZMb2dpbnMJCW5jZkNvbW1hbmRzCisgICAgSGlMaW5rIG5jZlN0cmluZwkJU3RyaW5nCisgICAgSGlMaW5rIG5jZkNvbnRTdHJpbmcJbmNmU3RyaW5nCisgICAgSGlMaW5rIG5jZkNvbW1lbnQJCUNvbW1lbnQKKyAgICBIaUxpbmsgbmNmSW1wbGljaXQJCVR5cGUKKyAgICBIaUxpbmsgbmNmQm9vbGVhbgkJQm9vbGVhbgorICAgIEhpTGluayBuY2ZTY3JpcHQJCUlkZW50aWZpZXIKKyAgICBIaUxpbmsgbmNmTnVtYmVyCQlOdW1iZXIKKyAgICBIaUxpbmsgbmNmSVBBZGRyCQluY2ZOdW1iZXIKKyAgICBIaUxpbmsgbmNmSGV4TnVtYmVyCQluY2ZOdW1iZXIKKyAgICBIaUxpbmsgbmNmVGltZQkJbmNmTnVtYmVyCisgICAgSGlMaW5rIG5jZkRTVFRpbWUJCW5jZk51bWJlcgorICAgIEhpTGluayBuY2ZQYXRoCQlDb25zdGFudAorICAgIEhpTGluayBuY2ZTZXJ2ZXJOYW1lCVNwZWNpYWwKKyAgICBIaUxpbmsgbmNmSVBYTmV0CQluY2ZTZXJ2ZXJOYW1lCisgICAgSGlMaW5rIG5jZlRpbWVUeXBlcwkJQ29uc3RhbnQKKyAgICBIaUxpbmsgbmNmU2V0Q29tbWFuZHNOdW0JICAgbmNmU2V0Q29tbWFuZHMKKyAgICBIaUxpbmsgbmNmU2V0Q29tbWFuZHNCb29sCSAgIG5jZlNldENvbW1hbmRzCisgICAgSGlMaW5rIG5jZlNldENvbW1hbmRzU3RyCSAgIG5jZlNldENvbW1hbmRzCisgICAgSGlMaW5rIG5jZlNldENvbW1hbmRzVGltZQkgICBuY2ZTZXRDb21tYW5kcworICAgIEhpTGluayBuY2ZTZXRDb21tYW5kc1RpbWVEYXRlICBuY2ZTZXRDb21tYW5kcworICAgIEhpTGluayBuY2ZTZXRDb21tYW5kc0JpbmRDb24gICBuY2ZTZXRDb21tYW5kcworCisgICAgZGVsY29tbWFuZCBIaUxpbmsKKworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibmNmIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbm9zeW50YXgudmltIGIvcnVudGltZS9zeW50YXgvbm9zeW50YXgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYjBjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9ub3N5bnRheC52aW0KQEAgLTAsMCArMSwyOSBAQAorIiBWaW0gc3ludGF4IHN1cHBvcnQgZmlsZQorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMCBKdWwgMTUKKworIiBUaGlzIGZpbGUgaXMgdXNlZCBmb3IgIjpzeW50YXggb2ZmIi4KKyIgSXQgcmVtb3ZlcyB0aGUgYXV0b2NvbW1hbmRzIGFuZCBzdG9wcyBoaWdobGlnaHRpbmcgZm9yIGFsbCBidWZmZXJzLgorCitpZiAhaGFzKCJzeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgcmVtb3ZlIGFsbCBzeW50YXggYXV0b2NvbW1hbmRzIGFuZCByZW1vdmUgdGhlIHN5bnRheCBmb3IgZWFjaCBidWZmZXIKK2F1Z3JvdXAgc3ludGF4c2V0CisgIGF1IQorICBhdSBCdWZFbnRlciAqIHN5biBjbGVhcgorICBhdSBCdWZFbnRlciAqIGlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpIHwgdW5sZXQgYjpjdXJyZW50X3N5bnRheCB8IGVuZGlmCisgIGRvYXV0b2FsbCBzeW50YXhzZXQgQnVmRW50ZXIgKgorICBhdSEKK2F1Z3JvdXAgRU5ECisKKyIgSnVzdCBpbiBjYXNlOiByZW1vdmUgYWxsIGF1dG9jb21tYW5kcyBmb3IgdGhlIFN5bnRheCBldmVudAorYXUhIFN5bnRheAorCitpZiBleGlzdHMoInN5bnRheF9vbiIpCisgIHVubGV0IHN5bnRheF9vbgorZW5kaWYKK2lmIGV4aXN0cygic3ludGF4X21hbnVhbCIpCisgIHVubGV0IHN5bnRheF9tYW51YWwKK2VuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9ucWMudmltIGIvcnVudGltZS9zeW50YXgvbnFjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTNjZDZiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvbnFjLnZpbQpAQCAtMCwwICsxLDM3OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU5RQyAtIE5vdCBRdWl0ZSBDLCBmb3IgTEVHTyBtaW5kc3Rvcm1zCisiCQlOUUMgaG9tZXBhZ2U6IGh0dHA6Ly93d3cuZW50ZXJhY3QuY29tL35kYmF1bS9ucWMvCisiIE1haW50YWluZXI6CVN0ZWZhbiBTY2hlcmVyIDxzdGVmYW5AZW5vdGVzLmRlPgorIiBMYXN0IENoYW5nZToJMjAwMSBNYXkgMTAKKyIgVVJMOgkJaHR0cDovL3d3dy5lbm90ZXMuZGUvdHdpa2kvcHViL0hvbWUvTGVnb01pbmRzdG9ybXMvbnFjLnZpbQorIiBGaWxlbmFtZXM6CS5ucWMKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFN0YXRlbWVudHMKK3N5biBrZXl3b3JkCW5xY1N0YXRlbWVudAlicmVhayByZXR1cm4gY29udGludWUgc3RhcnQgc3RvcCBhYnMgc2lnbgorc3luIGtleXdvcmQgICAgIG5xY1N0YXRlbWVudAlzdWIgdGFzaworc3luIGtleXdvcmQgICAgIG5xY0xhYmVsCWNhc2UgZGVmYXVsdAorc3luIGtleXdvcmQJbnFjQ29uZGl0aW9uYWwJaWYgZWxzZSBzd2l0Y2gKK3N5biBrZXl3b3JkCW5xY1JlcGVhdAl3aGlsZSBmb3IgZG8gdW50aWwgcmVwZWF0CisKKyIgU2NvdXQgYW5kIFJDWDIKK3N5biBrZXl3b3JkCW5xY0V2ZW50cwlhY3F1aXJlIGNhdGNoIG1vbml0b3IKKworIiB0eXBlcyBhbmQgY2xhc3Nlcworc3luIGtleXdvcmQJbnFjVHlwZQkJaW50IHRydWUgZmFsc2Ugdm9pZAorc3luIGtleXdvcmQJbnFjU3RvcmFnZUNsYXNzCWFzbSBjb25zdCBpbmxpbmUKKworCisKKyIgU2Vuc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBJbnB1dCBTZW5zb3JzCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJU0VOU09SXzEgU0VOU09SXzIgU0VOU09SXzMKKworIiBUeXBlcyBmb3IgU2V0U2Vuc29yVHlwZSgpCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJU0VOU09SX1RZUEVfVE9VQ0ggU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlTRU5TT1JfVFlQRV9MSUdIVCBTRU5TT1JfVFlQRV9ST1RBVElPTgorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CVNFTlNPUl9MSUdIVCBTRU5TT1JfVE9VQ0gKKworIiBNb2RlcyBmb3IgU2V0U2Vuc29yTW9kZSgpCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJU0VOU09SX01PREVfUkFXIFNFTlNPUl9NT0RFX0JPT0wKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlTRU5TT1JfTU9ERV9FREdFIFNFTlNPUl9NT0RFX1BVTFNFCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJU0VOU09SX01PREVfUEVSQ0VOVCBTRU5TT1JfTU9ERV9DRUxTSVVTCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJU0VOU09SX01PREVfRkFIUkVOSEVJVCBTRU5TT1JfTU9ERV9ST1RBVElPTgorCisiIFNlbnNvciBjb25maWd1cmF0aW9ucyBmb3IgU2V0U2Vuc29yKCkKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlTRU5TT1JfVE9VQ0ggU0VOU09SX0xJR0hUIFNFTlNPUl9ST1RBVElPTgorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CVNFTlNPUl9DRUxTSVVTIFNFTlNPUl9GQUhSRU5IRUlUIFNFTlNPUl9QVUxTRQorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CVNFTlNPUl9FREdFCisKKyIgRnVuY3Rpb25zIC0gQWxsCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglDbGVhclNlbnNvcgorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JU2Vuc29yVmFsdWUgU2Vuc29yVHlwZQorCisiIEZ1bmN0aW9ucyAtIFJDWAorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JU2V0U2Vuc29yIFNldFNlbnNvclR5cGUKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCVNlbnNvclZhbHVlQm9vbAorCisiIEZ1bmN0aW9ucyAtIFJDWCwgQ3liZXJNYXN0ZXIKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCVNldFNlbnNvck1vZGUgU2Vuc29yTW9kZQorCisiIEZ1bmN0aW9ucyAtIFJDWCwgU2NvdXQKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCVNlbnNvclZhbHVlUmF3CisKKyIgRnVuY3Rpb25zIC0gU2NvdXQKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCVNldFNlbnNvckxvd2VyTGltaXQgU2V0U2Vuc29yVXBwZXJMaW1pdAorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JU2V0U2Vuc29ySHlzdGVyZXNpcyBDYWxpYnJhdGVTZW5zb3IKKworCisiIE91dHB1dHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgT3V0cHV0cyBmb3IgT24oKSwgT2ZmKCksIGV0Yy4KK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlPVVRfQSBPVVRfQiBPVVRfQworCisiIE1vZGVzIGZvciBTZXRPdXRwdXQoKQorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CU9VVF9PTiBPVVRfT0ZGIE9VVF9GTE9BVAorCisiIERpcmVjdGlvbnMgZm9yIFNldERpcmVjdGlvbigpCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJT1VUX0ZXRCBPVVRfUkVWIE9VVF9UT0dHTEUKKworIiBPdXRwdXQgcG93ZXIgZm9yIFNldFBvd2VyKCkKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlPVVRfTE9XIE9VVF9IQUxGIE9VVF9GVUxMCisKKyIgRnVuY3Rpb25zIC0gQWxsCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglTZXRPdXRwdXQgU2V0RGlyZWN0aW9uIFNldFBvd2VyIE91dHB1dFN0YXR1cworc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JT24gT2ZmIEZsb2F0IEZ3ZCBSZXYgVG9nZ2xlCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglPbkZ3ZCBPblJldiBPbkZvcgorCisiIEZ1bmN0aW9ucyAtIFJYQzIsIFNjb3V0CitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglTZXRHbG9iYWxPdXRwdXQgU2V0R2xvYmFsRGlyZWN0aW9uIFNldE1heFBvd2VyCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglHbG9iYWxPdXRwdXRTdGF0dXMKKworCisiIFNvdW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgU291bmRzIGZvciBQbGF5U291bmQoKQorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CVNPVU5EX0NMSUNLIFNPVU5EX0RPVUJMRV9CRUVQIFNPVU5EX0RPV04KK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlTT1VORF9VUCBTT1VORF9MT1dfQkVFUCBTT1VORF9GQVNUX1VQCisKKyIgRnVuY3Rpb25zIC0gQWxsCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglQbGF5U291bmQgUGxheVRvbmUKKworIiBGdW5jdGlvbnMgLSBSQ1gyLCBTY291dAorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JTXV0ZVNvdW5kIFVubXV0ZVNvdW5kIENsZWFyU291bmQKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCVNlbGVjdFNvdW5kcworCisKKyIgTENEIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBNb2RlcyBmb3IgU2VsZWN0RGlzcGxheSgpCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJRElTUExBWV9XQVRDSCBESVNQTEFZX1NFTlNPUl8xIERJU1BMQVlfU0VOU09SXzIKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlESVNQTEFZX1NFTlNPUl8zIERJU1BMQVlfT1VUX0EgRElTUExBWV9PVVRfQgorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CURJU1BMQVlfT1VUX0MKKyIgUkNYMgorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CURJU1BMQVlfVVNFUgorCisiIEZ1bmN0aW9ucyAtIFJDWAorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JU2VsZWN0RGlzcGxheQorIiBGdW5jdGlvbnMgLSBSQ1gyCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglTZXRVc2VyRGlzcGxheQorCisKKyIgQ29tbXVuaWNhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBNZXNzYWdlcyAtIFJDWCwgU2NvdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFR4IHBvd2VyIGxldmVsIGZvciBTZXRUeFBvd2VyKCkKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlUWF9QT1dFUl9MTyBUWF9QT1dFUl9ISQorCisiIEZ1bmN0aW9ucyAtIFJDWCwgU2NvdXQKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCU1lc3NhZ2UgQ2xlYXJNZXNzYWdlIFNlbmRNZXNzYWdlIFNldFR4UG93ZXIKKworIiBTZXJpYWwgLSBSQ1gyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIGZvciBTZXRTZXJpYWxDb21tKCkKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlTRVJJQUxfQ09NTV9ERUZBVUxUIFNFUklBTF9DT01NXzQ4MDAKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlTRVJJQUxfQ09NTV9EVVRZMjUgU0VSSUFMX0NPTU1fNzZLSFoKKworIiBmb3IgU2V0U2VyaWFsUGFja2V0KCkKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlTRVJJQUxfUEFDS0VUX0RFRkFVTFQgU0VSSUFMX1BBQ0tFVF9QUkVBTUJMRQorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CVNFUklBTF9QQUNLRVRfTkVHQVRFRCBTRVJJQUxfUEFDS0VUX0NIRUNLU1VNCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJU0VSSUFMX1BBQ0tFVF9SQ1gKKworIiBGdW5jdGlvbnMgLSBSQ1gyCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglTZXRTZXJpYWxDb21tIFNldFNlcmlhbFBhY2tldCBTZXRTZXJpYWxEYXRhCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglTZXJpYWxEYXRhIFNlbmRTZXJpYWwKKworIiBWTEwgLSBTY291dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIEZ1bmN0aW9ucyAtIFNjb3V0CitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglTZW5kVkxMCisKKworIiBUaW1lcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIEZ1bmN0aW9ucyAtIEFsbAorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JQ2xlYXJUaW1lciBUaW1lcgorCisiIEZ1bmN0aW9ucyAtIFJDWDIKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCVNldFRpbWVyIEZhc3RUaW1lcgorCisKKyIgQ291bnRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBGdW5jdGlvbnMgLSBSQ1gyLCBTY291dAorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JQ2xlYXJDb3VudGVyIEluY0NvdW50ZXIgRGVjQ291bnRlciBDb3VudGVyCisKKworIiBBY2Nlc3MgQ29udHJvbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJQUNRVUlSRV9PVVRfQSBBQ1FVSVJFX09VVF9CIEFDUVVJUkVfT1VUX0MKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlBQ1FVSVJFX1NPVU5ECisiIFJDWDIgb25seQorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CUFDUVVJUkVfVVNFUl8xIEFDUVVJUkVfVVNFUl8yIEFDUVVJUkVfVVNFUl8zCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJQUNRVUlSRV9VU0VSXzQKKworIiBGdW5jdGlvbnMgLSBSQ1gyLCBTY291dAorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JU2V0UHJpb3JpdHkKKworCisiIEV2ZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgUkNYMiBFdmVudHMKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlFVkVOVF9UWVBFX1BSRVNTRUQgRVZFTlRfVFlQRV9SRUxFQVNFRAorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CUVWRU5UX1RZUEVfUFVMU0UgRVZFTlRfVFlQRV9FREdFCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJRVZFTlRfVFlQRV9GQVNUX0NIQU5HRSBFVkVOVF9UWVBFX0xPVworc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CUVWRU5UX1RZUEVfTk9STUFMIEVWRU5UX1RZUEVfSElHSAorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CUVWRU5UX1RZUEVfQ0xJQ0sgRVZFTlRfVFlQRV9ET1VCTEVDTElDSworc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CUVWRU5UX1RZUEVfTUVTU0FHRQorCisiIFNjb3V0IEV2ZW50cworc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CUVWRU5UXzFfUFJFU1NFRCBFVkVOVF8xX1JFTEVBU0VECitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJRVZFTlRfMl9QUkVTU0VEIEVWRU5UXzJfUkVMRUFTRUQKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlFVkVOVF9MSUdIVF9ISUdIIEVWRU5UX0xJR0hUX05PUk1BTAorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CUVWRU5UX0xJR0hUX0xPVyBFVkVOVF9MSUdIVF9DTElDSworc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CUVWRU5UX0xJR0hUX0RPVUJMRUNMSUNLIEVWRU5UX0NPVU5URVJfMAorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CUVWRU5UX0NPVU5URVJfMSBFVkVOVF9USU1FUl8wIEVWRU5UX1RJTUVSXzEKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlFVkVOVF9USU1FUl8yIEVWRU5UX01FU1NBR0UKKworIiBGdW5jdGlvbnMgLSBSQ1gyLCBTY291dAorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JQWN0aXZlRXZlbnRzIEV2ZW50CisKKyIgRnVuY3Rpb25zIC0gUkNYMgorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JQ3VycmVudEV2ZW50cworc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JU2V0RXZlbnQgQ2xlYXJFdmVudCBDbGVhckFsbEV2ZW50cyBFdmVudFN0YXRlCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglDYWxpYnJhdGVFdmVudCBTZXRVcHBlckxpbWl0IFVwcGVyTGltaXQKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCVNldExvd2VyTGltaXQgTG93ZXJMaW1pdCBTZXRIeXN0ZXJlc2lzCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglIeXN0ZXJlc2lzCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglTZXRDbGlja1RpbWUgQ2xpY2tUaW1lIFNldENsaWNrQ291bnRlcgorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JQ2xpY2tDb3VudGVyCisKKyIgRnVuY3Rpb25zIC0gU2NvdXQKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCVNldFNlbnNvckNsaWNrVGltZSBTZXRDb3VudGVyTGltaXQKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCVNldFRpbWVyTGltaXQKKworCisiIERhdGEgTG9nZ2luZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgRnVuY3Rpb25zIC0gUkNYCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglDcmVhdGVEYXRhbG9nIEFkZFRvRGF0YWxvZworc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JVXBsb2FkRGF0YWxvZworCisKKyIgR2VuZXJhbCBGZWF0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBGdW5jdGlvbnMgLSBBbGwKK3N5biBrZXl3b3JkCW5xY0Z1bmN0aW9uCVdhaXQgU3RvcEFsbFRhc2tzIFJhbmRvbQorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JU2V0U2xlZXBUaW1lIFNsZWVwTm93CisKKyIgRnVuY3Rpb25zIC0gUkNYCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglQcm9ncmFtIFdhdGNoIFNldFdhdGNoCisKKyIgRnVuY3Rpb25zIC0gUkNYMgorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JU2V0UmFuZG9tU2VlZCBTZWxlY3RQcm9ncmFtCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglCYXR0ZXJ5TGV2ZWwgRmlybXdhcmVWZXJzaW9uCisKKyIgRnVuY3Rpb25zIC0gU2NvdXQKKyIgUGFyYW1ldGVycyBmb3IgU2V0TGlnaHQoKQorc3luIGtleXdvcmQgICAgIG5xY0NvbnN0YW50CUxJR0hUX09OIExJR0hUX09GRgorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JU2V0U2NvdXRSdWxlcyBTY291dFJ1bGVzIFNldFNjb3V0TW9kZQorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JU2V0RXZlbnRGZWVkYmFjayBFdmVudEZlZWRiYWNrIFNldExpZ2h0CisKKyIgYWRkaXRpb25hbCBDeWJlck1hc3RlciBkZWZpbmVzCitzeW4ga2V5d29yZCAgICAgbnFjQ29uc3RhbnQJT1VUX0wgT1VUX1IgT1VUX1gKK3N5biBrZXl3b3JkICAgICBucWNDb25zdGFudAlTRU5TT1JfTCBTRU5TT1JfTSBTRU5TT1JfUgorIiBGdW5jdGlvbnMgLSBDeWJlck1hc3Rlcgorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JRHJpdmUgT25XYWl0IE9uV2FpdERpZmZlcmVudAorc3luIGtleXdvcmQJbnFjRnVuY3Rpb24JQ2xlYXJUYWNob0NvdW50ZXIgVGFjaG9Db3VudCBUYWNob1NwZWVkCitzeW4ga2V5d29yZAlucWNGdW5jdGlvbglFeHRlcm5hbE1vdG9yUnVubmluZyBBR0MKKworCisKKyIgbnFjQ29tbWVudEdyb3VwIGFsbG93cyBhZGRpbmcgbWF0Y2hlcyBmb3Igc3BlY2lhbCB0aGluZ3MgaW4gY29tbWVudHMKK3N5biBrZXl3b3JkCW5xY1RvZG8JCWNvbnRhaW5lZCBUT0RPIEZJWE1FIFhYWAorc3luIGNsdXN0ZXIJbnFjQ29tbWVudEdyb3VwCWNvbnRhaW5zPW5xY1RvZG8KKworIndoZW4gd2FudGVkLCBoaWdobGlnaHQgdHJhaWxpbmcgd2hpdGUgc3BhY2UKK2lmIGV4aXN0cygibnFjX3NwYWNlX2Vycm9ycyIpCisgIGlmICFleGlzdHMoIm5xY19ub190cmFpbF9zcGFjZV9lcnJvciIpCisgICAgc3luIG1hdGNoCW5xY1NwYWNlRXJyb3IJZGlzcGxheSBleGNsdWRlbmwgIlxzXCskIgorICBlbmRpZgorICBpZiAhZXhpc3RzKCJucWNfbm9fdGFiX3NwYWNlX2Vycm9yIikKKyAgICBzeW4gbWF0Y2gJbnFjU3BhY2VFcnJvcglkaXNwbGF5ICIgXCtcdCJtZT1lLTEKKyAgZW5kaWYKK2VuZGlmCisKKyJjYXRjaCBlcnJvcnMgY2F1c2VkIGJ5IHdyb25nIHBhcmVudGhlc2lzIGFuZCBicmFja2V0cworc3luIGNsdXN0ZXIJbnFjUGFyZW5Hcm91cAljb250YWlucz1ucWNQYXJlbkVycm9yLG5xY0luY2x1ZGVkLG5xY0NvbW1lbnRTa2lwLEBucWNDb21tZW50R3JvdXAsbnFjQ29tbWVudFN0YXJ0RXJyb3IsbnFjQ29tbWVudFNraXAsbnFjQ3BwT3V0LG5xY0NwcE91dDIsbnFjQ3BwU2tpcCxucWNOdW1iZXIsbnFjRmxvYXQsbnFjTnVtYmVycworaWYgZXhpc3RzKCJucWNfbm9fYnJhY2tldF9lcnJvciIpCisgIHN5biByZWdpb24JbnFjUGFyZW4JdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULEBucWNQYXJlbkdyb3VwLG5xY0NwcFBhcmVuCisgICIgbnFjQ3BwUGFyZW46IHNhbWUgYXMgbnFjUGFyZW4gYnV0IGVuZHMgYXQgZW5kLW9mLWxpbmU7IHVzZWQgaW4gbnFjRGVmaW5lCisgIHN5biByZWdpb24JbnFjQ3BwUGFyZW4JdHJhbnNwYXJlbnQgc3RhcnQ9JygnIHNraXA9J1xcJCcgZXhjbHVkZW5sIGVuZD0nKScgZW5kPSckJyBjb250YWluZWQgY29udGFpbnM9QUxMQlVULEBucWNQYXJlbkdyb3VwLG5xY1BhcmVuCisgIHN5biBtYXRjaAlucWNQYXJlbkVycm9yCWRpc3BsYXkgIikiCisgIHN5biBtYXRjaAlucWNFcnJJblBhcmVuCWRpc3BsYXkgY29udGFpbmVkICJbe31dIgorZWxzZQorICBzeW4gcmVnaW9uCW5xY1BhcmVuCQl0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsQG5xY1BhcmVuR3JvdXAsbnFjQ3BwUGFyZW4sbnFjRXJySW5CcmFja2V0LG5xY0NwcEJyYWNrZXQKKyAgIiBucWNDcHBQYXJlbjogc2FtZSBhcyBucWNQYXJlbiBidXQgZW5kcyBhdCBlbmQtb2YtbGluZTsgdXNlZCBpbiBucWNEZWZpbmUKKyAgc3luIHJlZ2lvbglucWNDcHBQYXJlbgl0cmFuc3BhcmVudCBzdGFydD0nKCcgc2tpcD0nXFwkJyBleGNsdWRlbmwgZW5kPScpJyBlbmQ9JyQnIGNvbnRhaW5lZCBjb250YWlucz1BTExCVVQsQG5xY1BhcmVuR3JvdXAsbnFjRXJySW5CcmFja2V0LG5xY1BhcmVuLG5xY0JyYWNrZXQKKyAgc3luIG1hdGNoCW5xY1BhcmVuRXJyb3IJZGlzcGxheSAiW1xdKV0iCisgIHN5biBtYXRjaAlucWNFcnJJblBhcmVuCWRpc3BsYXkgY29udGFpbmVkICJbXF17fV0iCisgIHN5biByZWdpb24JbnFjQnJhY2tldAl0cmFuc3BhcmVudCBzdGFydD0nXFsnIGVuZD0nXScgY29udGFpbnM9QUxMQlVULEBucWNQYXJlbkdyb3VwLG5xY0VyckluUGFyZW4sbnFjQ3BwUGFyZW4sbnFjQ3BwQnJhY2tldAorICAiIG5xY0NwcEJyYWNrZXQ6IHNhbWUgYXMgbnFjUGFyZW4gYnV0IGVuZHMgYXQgZW5kLW9mLWxpbmU7IHVzZWQgaW4gbnFjRGVmaW5lCisgIHN5biByZWdpb24JbnFjQ3BwQnJhY2tldAl0cmFuc3BhcmVudCBzdGFydD0nXFsnIHNraXA9J1xcJCcgZXhjbHVkZW5sIGVuZD0nXScgZW5kPSckJyBjb250YWluZWQgY29udGFpbnM9QUxMQlVULEBucWNQYXJlbkdyb3VwLG5xY0VyckluUGFyZW4sbnFjUGFyZW4sbnFjQnJhY2tldAorICBzeW4gbWF0Y2gJbnFjRXJySW5CcmFja2V0CWRpc3BsYXkgY29udGFpbmVkICJbKTt7fV0iCitlbmRpZgorCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90IGFuZCB3aXRoICJmIi4KK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoCW5xY051bWJlcnMJZGlzcGxheSB0cmFuc3BhcmVudCAiXDxcZFx8XC5cZCIgY29udGFpbnM9bnFjTnVtYmVyLG5xY0Zsb2F0CisiIFNhbWUsIGJ1dCB3aXRob3V0IG9jdGFsIGVycm9yIChmb3IgY29tbWVudHMpCitzeW4gbWF0Y2gJbnFjTnVtYmVyCWRpc3BsYXkgY29udGFpbmVkICJcZFwrXCh1XD1sXHswLDJ9XHxsbFw9dVwpXD4iCisiaGV4IG51bWJlcgorc3luIG1hdGNoCW5xY051bWJlcglkaXNwbGF5IGNvbnRhaW5lZCAiMHhceFwrXCh1XD1sXHswLDJ9XHxsbFw9dVwpXD4iCisiIEZsYWcgdGhlIGZpcnN0IHplcm8gb2YgYW4gb2N0YWwgbnVtYmVyIGFzIHNvbWV0aGluZyBzcGVjaWFsCitzeW4gbWF0Y2gJbnFjRmxvYXQJZGlzcGxheSBjb250YWluZWQgIlxkXCtmIgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2gJbnFjRmxvYXQJZGlzcGxheSBjb250YWluZWQgIlxkXCtcLlxkKlwoZVstK11cPVxkXCtcKVw9W2ZsXVw9IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaAlucWNGbG9hdAlkaXNwbGF5IGNvbnRhaW5lZCAiXC5cZFwrXChlWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGhvdXQgZG90LCB3aXRoIGV4cG9uZW50CitzeW4gbWF0Y2gJbnFjRmxvYXQJZGlzcGxheSBjb250YWluZWQgIlxkXCtlWy0rXVw9XGRcK1tmbF1cPVw+IgorIiBmbGFnIGFuIG9jdGFsIG51bWJlciB3aXRoIHdyb25nIGRpZ2l0cworc3luIGNhc2UgbWF0Y2gKKworc3luIHJlZ2lvbglucWNDb21tZW50TAlzdGFydD0iLy8iIHNraXA9IlxcJCIgZW5kPSIkIiBrZWVwZW5kIGNvbnRhaW5zPUBucWNDb21tZW50R3JvdXAsbnFjU3BhY2VFcnJvcgorc3luIHJlZ2lvbglucWNDb21tZW50CW1hdGNoZ3JvdXA9bnFjQ29tbWVudFN0YXJ0IHN0YXJ0PSIvXCoiIG1hdGNoZ3JvdXA9Tk9ORSBlbmQ9IlwqLyIgY29udGFpbnM9QG5xY0NvbW1lbnRHcm91cCxucWNDb21tZW50U3RhcnRFcnJvcixucWNTcGFjZUVycm9yCisKKyIga2VlcCBhIC8vIGNvbW1lbnQgc2VwYXJhdGVseSwgaXQgdGVybWluYXRlcyBhIHByZXByb2MuIGNvbmRpdGlvbmFsCitzeW50YXggbWF0Y2gJbnFjQ29tbWVudEVycm9yCWRpc3BsYXkgIlwqLyIKK3N5bnRheCBtYXRjaAlucWNDb21tZW50U3RhcnRFcnJvciBkaXNwbGF5ICIvXCoiIGNvbnRhaW5lZAorCisKKworCisKK3N5biByZWdpb24JbnFjUHJlQ29uZGl0CXN0YXJ0PSJeXHMqI1xzKlwoaWZcfGlmZGVmXHxpZm5kZWZcfGVsaWZcKVw+IiBza2lwPSJcXCQiIGVuZD0iJCIgZW5kPSIvLyJtZT1zLTEgY29udGFpbnM9bnFjQ29tbWVudCxucWNDaGFyYWN0ZXIsbnFjQ3BwUGFyZW4sbnFjUGFyZW5FcnJvcixucWNOdW1iZXJzLG5xY0NvbW1lbnRFcnJvcixucWNTcGFjZUVycm9yCitzeW4gbWF0Y2gJbnFjUHJlQ29uZGl0CWRpc3BsYXkgIl5ccyojXHMqXChlbHNlXHxlbmRpZlwpXD4iCitpZiAhZXhpc3RzKCJucWNfbm9faWYwIikKKyAgc3luIHJlZ2lvbglucWNDcHBPdXQJCXN0YXJ0PSJeXHMqI1xzKmlmXHNcKzBcPiIgZW5kPSIuXHwkIiBjb250YWlucz1ucWNDcHBPdXQyCisgIHN5biByZWdpb24JbnFjQ3BwT3V0Mgljb250YWluZWQgc3RhcnQ9IjAiIGVuZD0iXlxzKiNccypcKGVuZGlmXD5cfGVsc2VcPlx8ZWxpZlw+XCkiIGNvbnRhaW5zPW5xY1NwYWNlRXJyb3IsbnFjQ3BwU2tpcAorICBzeW4gcmVnaW9uCW5xY0NwcFNraXAJY29udGFpbmVkIHN0YXJ0PSJeXHMqI1xzKlwoaWZcPlx8aWZkZWZcPlx8aWZuZGVmXD5cKSIgc2tpcD0iXFwkIiBlbmQ9Il5ccyojXHMqZW5kaWZcPiIgY29udGFpbnM9bnFjU3BhY2VFcnJvcixucWNDcHBTa2lwCitlbmRpZgorc3luIHJlZ2lvbglucWNJbmNsdWRlZAlkaXNwbGF5IGNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCitzeW4gbWF0Y2gJbnFjSW5jbHVkZQlkaXNwbGF5ICJeXHMqI1xzKmluY2x1ZGVcPlxzKlsiXSIgY29udGFpbnM9bnFjSW5jbHVkZWQKKyJzeW4gbWF0Y2ggbnFjTGluZVNraXAJIlxcJCIKK3N5biBjbHVzdGVyCW5xY1ByZVByb2NHcm91cAljb250YWlucz1ucWNQcmVDb25kaXQsbnFjSW5jbHVkZWQsbnFjSW5jbHVkZSxucWNEZWZpbmUsbnFjRXJySW5QYXJlbixucWNFcnJJbkJyYWNrZXQsbnFjQ3BwT3V0LG5xY0NwcE91dDIsbnFjQ3BwU2tpcCxucWNOdW1iZXIsbnFjRmxvYXQsbnFjTnVtYmVycyxucWNDb21tZW50U2tpcCxAbnFjQ29tbWVudEdyb3VwLG5xY0NvbW1lbnRTdGFydEVycm9yLG5xY1BhcmVuLG5xY0JyYWNrZXQKK3N5biByZWdpb24JbnFjRGVmaW5lCXN0YXJ0PSJeXHMqI1xzKlwoZGVmaW5lXHx1bmRlZlwpXD4iIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1BTExCVVQsQG5xY1ByZVByb2NHcm91cAorc3luIHJlZ2lvbglucWNQcmVQcm9jCXN0YXJ0PSJeXHMqI1xzKlwocHJhZ21hXD5cKSIgc2tpcD0iXFwkIiBlbmQ9IiQiIGtlZXBlbmQgY29udGFpbnM9QUxMQlVULEBucWNQcmVQcm9jR3JvdXAKKworaWYgIWV4aXN0cygibnFjX21pbmxpbmVzIikKKyAgaWYgIWV4aXN0cygibnFjX25vX2lmMCIpCisgICAgbGV0IG5xY19taW5saW5lcyA9IDUwCSAgICAiICNpZiAwIGNvbnN0cnVjdHMgY2FuIGJlIGxvbmcKKyAgZWxzZQorICAgIGxldCBucWNfbWlubGluZXMgPSAxNQkgICAgIiBtb3N0bHkgZm9yICgpIGNvbnN0cnVjdHMKKyAgZW5kaWYKK2VuZGlmCitleGVjICJzeW4gc3luYyBjY29tbWVudCBucWNDb21tZW50IG1pbmxpbmVzPSIgLiBucWNfbWlubGluZXMKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbnFjX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX25xY19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgICIgVGhlIGRlZmF1bHQgbWV0aG9kcyBmb3IgaGlnaGxpZ2h0aW5nLiAgQ2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIKKyAgSGlMaW5rIG5xY0xhYmVsCQlMYWJlbAorICBIaUxpbmsgbnFjQ29uZGl0aW9uYWwJCUNvbmRpdGlvbmFsCisgIEhpTGluayBucWNSZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgbnFjQ2hhcmFjdGVyCQlDaGFyYWN0ZXIKKyAgSGlMaW5rIG5xY051bWJlcgkJTnVtYmVyCisgIEhpTGluayBucWNGbG9hdAkJRmxvYXQKKyAgSGlMaW5rIG5xY0Z1bmN0aW9uCQlGdW5jdGlvbgorICBIaUxpbmsgbnFjUGFyZW5FcnJvcgkJbnFjRXJyb3IKKyAgSGlMaW5rIG5xY0VyckluUGFyZW4JCW5xY0Vycm9yCisgIEhpTGluayBucWNFcnJJbkJyYWNrZXQJbnFjRXJyb3IKKyAgSGlMaW5rIG5xY0NvbW1lbnRMCQlucWNDb21tZW50CisgIEhpTGluayBucWNDb21tZW50U3RhcnQJbnFjQ29tbWVudAorICBIaUxpbmsgbnFjQ29tbWVudEVycm9yCW5xY0Vycm9yCisgIEhpTGluayBucWNDb21tZW50U3RhcnRFcnJvcglucWNFcnJvcgorICBIaUxpbmsgbnFjU3BhY2VFcnJvcgkJbnFjRXJyb3IKKyAgSGlMaW5rIG5xY1N0b3JhZ2VDbGFzcwlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIG5xY0luY2x1ZGUJCUluY2x1ZGUKKyAgSGlMaW5rIG5xY1ByZVByb2MJCVByZVByb2MKKyAgSGlMaW5rIG5xY0RlZmluZQkJTWFjcm8KKyAgSGlMaW5rIG5xY0luY2x1ZGVkCQlTdHJpbmcKKyAgSGlMaW5rIG5xY0Vycm9yCQlFcnJvcgorICBIaUxpbmsgbnFjU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG5xY0V2ZW50cwkJU3RhdGVtZW50CisgIEhpTGluayBucWNQcmVDb25kaXQJCVByZUNvbmRpdAorICBIaUxpbmsgbnFjVHlwZQkJVHlwZQorICBIaUxpbmsgbnFjQ29uc3RhbnQJCUNvbnN0YW50CisgIEhpTGluayBucWNDb21tZW50U2tpcAkJbnFjQ29tbWVudAorICBIaUxpbmsgbnFjQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgbnFjVG9kbwkJVG9kbworICBIaUxpbmsgbnFjQ3BwU2tpcAkJbnFjQ3BwT3V0CisgIEhpTGluayBucWNDcHBPdXQyCQlucWNDcHBPdXQKKyAgSGlMaW5rIG5xY0NwcE91dAkJQ29tbWVudAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJucWMiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9ucm9mZi52aW0gYi9ydW50aW1lL3N5bnRheC9ucm9mZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwMDRkNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L25yb2ZmLnZpbQpAQCAtMCwwICsxLDI1OSBAQAorIiBWSU0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CW5yb2ZmL2dyb2ZmCisiIE1haW50YWluZXI6CUFsZWphbmRybyBM83Blei1WYWxlbmNpYSA8ZHJhZHVsQHlhaG9vLmNvbT4KKyIgVVJMOgkJaHR0cDovL2RyYWR1bC50cmlwb2QuY29tL3ZpbQorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMjQKKyIKKyIge3t7MSBBY2tub3dsZWRnZW1lbnRzCisiCisiIEFDS05PV0xFREdFTUVOVFM6CisiCisiIE15IHRoYW5rcyB0byBK6XL0bWUgUGz7dCA8SmVyb21lLlBsdXRAZW5zLmZyPiwgd2hvIHdhcyB0aGUKKyIgY3JlYXRvciBhbmQgbWFpbnRhaW5lciBvZiB0aGlzIHN5bnRheCBmaWxlIGZvciBzZXZlcmFsIHllYXJzLgorIiBNYXkgSSBiZSBhcyBnb29kIGF0IGl0IGFzIGhlIGhhcyBiZWVuLgorIgorIiB7e3sxIFRvZG8KKyIKKyIgVE9ETzoKKyIKKyIgKiBXcml0ZSBzeW50YXggaGlnaGxpZ2h0aW5nIGZpbGVzIGZvciB0aGUgcHJlcHJvY2Vzc29ycywKKyIJYW5kIGludGVncmF0ZSB3aXRoIG5yb2ZmLnZpbS4KKyIKKyIKKyIge3t7MSBTdGFydCBzeW50YXggaGlnaGxpZ2h0aW5nLgorIgorIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKKyIKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworIgorIiB7e3sxIHBsdWdpbiBzZXR0aW5ncy4uLgorIgorIiB7e3syIGVuYWJsZSBzcGFjaW5nIGVycm9yIGhpZ2hsaWdodGluZworIgoraWYgZXhpc3RzKCJucm9mZl9zcGFjZV9lcnJvcnMiKQorCXN5biBtYXRjaCBucm9mZkVycm9yIC9cc1wrJC8KKwlzeW4gbWF0Y2ggbnJvZmZTcGFjZUVycm9yIC9bLiw6OyE/XVxzXHsyLH0vCitlbmRpZgorIgorIgorIiB7e3sxIFNwZWNpYWwgZmlsZSBzZXR0aW5ncworIgorIiB7e3syICBtcyBleGRlbnRlZCBwYXJhZ3JhcGhzIGFyZSBub3QgaW4gdGhlIGRlZmF1bHQgcGFyYWdyYXBocyBsaXN0LgorIgorc2V0bG9jYWwgcGFyYWdyYXBocys9WFAKKyIKKyIge3t7MiBBY3RpdmF0ZSBuYXZpZ2F0aW9uIHRvIHByZXBvcmNlc3NvciBzZWN0aW9ucy4KKyIKK2lmIGV4aXN0cygiYjpwcmVwcm9jc19hc19zZWN0aW9ucyIpCisJc2V0bG9jYWwgc2VjdGlvbnM9RVFUU1BTW1wgRzFHUworZW5kaWYKKworIiB7e3sxIEVzY2FwZSBzZXF1ZW5jZXMKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N5biBtYXRjaCBucm9mZkVzY0NoYXIgL1xcW0NOXS8gbmV4dGdyb3VwPW5yb2ZmRXNjQ2hhckFyZworc3luIG1hdGNoIG5yb2ZmRXNjYXBlIC9cXFsqZmdtbllWXS8gbmV4dGdyb3VwPW5yb2ZmRXNjUmVnUGFyLG5yb2ZmRXNjUmVnQXJnCitzeW4gbWF0Y2ggbnJvZmZFc2NhcGUgL1xcc1srLV1cPS8gbmV4dGdyb3VwPW5yb2ZmU2l6ZQorc3luIG1hdGNoIG5yb2ZmRXNjYXBlIC9cXFskQWJEaGxMUnZ4WFpdLyBuZXh0Z3JvdXA9bnJvZmZFc2NQYXIsbnJvZmZFc2NBcmcKKworc3luIG1hdGNoIG5yb2ZmRXNjUmVnQXJnIC8uLyBjb250YWluZWQKK3N5biBtYXRjaCBucm9mZkVzY1JlZ0FyZzIgLy4uLyBjb250YWluZWQKK3N5biBtYXRjaCBucm9mZkVzY1JlZ1BhciAvKC8gY29udGFpbmVkIG5leHRncm91cD1ucm9mZkVzY1JlZ0FyZzIKK3N5biBtYXRjaCBucm9mZkVzY0FyZyAvLi8gY29udGFpbmVkCitzeW4gbWF0Y2ggbnJvZmZFc2NBcmcyIC8uLi8gY29udGFpbmVkCitzeW4gbWF0Y2ggbnJvZmZFc2NQYXIgLygvIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bnJvZmZFc2NBcmcyCitzeW4gbWF0Y2ggbnJvZmZTaXplIC9cKChcZFwpXD1cZC8gY29udGFpbmVkCisKK3N5biByZWdpb24gbnJvZmZFc2NDaGFyQXJnIHN0YXJ0PS8nLyBlbmQ9LycvIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBucm9mZkVzY0FyZyBzdGFydD0vJy8gZW5kPS8nLyBjb250YWluZWQgY29udGFpbnM9bnJvZmZFc2NhcGUsQG5yb2ZmU3BlY2lhbAorCitpZiBleGlzdHMoImI6bnJvZmZfaXNfZ3JvZmYiKQorCXN5biByZWdpb24gbnJvZmZFc2NSZWdBcmcgbWF0Y2hncm91cD1ucm9mZkVzY2FwZSBzdGFydD0vXFsvIGVuZD0vXF0vIGNvbnRhaW5lZCBvbmVsaW5lCisJc3luIHJlZ2lvbiBucm9mZlNpemUgbWF0Y2hncm91cD1ucm9mZkVzY2FwZSBzdGFydD0vXFsvIGVuZD0vXF0vIGNvbnRhaW5lZAorZW5kaWYKKworc3luIG1hdGNoIG5yb2ZmRXNjYXBlIC9cXFthZHBydHV7fV0vCitzeW4gbWF0Y2ggbnJvZmZFc2NhcGUgL1xcJC8KK3N5biBtYXRjaCBucm9mZkVzY2FwZSAvXFxcJFtAKl0vCisKKyIge3t7MSBTdHJpbmdzIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N5biBtYXRjaCBucm9mZlNwZWNpYWxDaGFyIC9cXFtcXGVFPyEtXS8KK3N5biBtYXRjaCBucm9mZlNwYWNlICJcXFsmJX58XjApLyxdIgorc3luIG1hdGNoIG5yb2ZmU3BlY2lhbENoYXIgL1xcKC4uLworCitpZiBleGlzdHMoImI6bnJvZmZfaXNfZ3JvZmYiKQorCXN5biBtYXRjaCBucm9mZlNwZWNpYWxDaGFyIC9cXFxbW15dXSpdLworCXN5biByZWdpb24gbnJvZmZQcmVzZXJ2ZSAgbWF0Y2hncm91cD1ucm9mZlNwZWNpYWxDaGFyIHN0YXJ0PS9cXD8vIGVuZD0vXFw/LyBvbmVsaW5lCitlbmRpZgorCitzeW4gcmVnaW9uIG5yb2ZmUHJlc2VydmUgbWF0Y2hncm91cD1ucm9mZlNwZWNpYWxDaGFyIHN0YXJ0PS9cXCEvIGVuZD0vJC8gb25lbGluZQorCitzeW4gY2x1c3RlciBucm9mZlNwZWNpYWwgY29udGFpbnM9bnJvZmZTcGVjaWFsQ2hhcixucm9mZlNwYWNlCisKKworc3luIHJlZ2lvbiBucm9mZlN0cmluZyBzdGFydD0vIi8gZW5kPS8iLyBza2lwPS9cXCQvIGNvbnRhaW5zPW5yb2ZmRXNjYXBlLEBucm9mZlNwZWNpYWwgY29udGFpbmVkCitzeW4gcmVnaW9uIG5yb2ZmU3RyaW5nIHN0YXJ0PS8nLyBlbmQ9LycvIHNraXA9L1xcJC8gY29udGFpbnM9bnJvZmZFc2NhcGUsQG5yb2ZmU3BlY2lhbCBjb250YWluZWQKKworCisiIHt7ezEgTnVtYmVycyBhbmQgdW5pdHMKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzeW4gbWF0Y2ggbnJvZmZOdW1CbG9jayAvWzAtOS5dXGFcPS8gY29udGFpbmVkIGNvbnRhaW5zPW5yb2ZmTnVtYmVyCitzeW4gbWF0Y2ggbnJvZmZOdW1iZXIgL1xkXCtcKFwuXGQqXClcPS8gY29udGFpbmVkIG5leHRncm91cD1ucm9mZlVuaXQsbnJvZmZCYWRDaGFyCitzeW4gbWF0Y2ggbnJvZmZOdW1iZXIgL1wuXGRcKykvIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bnJvZmZVbml0LG5yb2ZmQmFkQ2hhcgorc3luIG1hdGNoIG5yb2ZmQmFkQ2hhciAvLi8gY29udGFpbmVkCitzeW4gbWF0Y2ggbnJvZmZVbml0IC9baWNwUHN6bW52TXVdLyBjb250YWluZWQKKworCisiIHt7ezEgUmVxdWVzdHMKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyIgUmVxdWVzdHMgYmVnaW4gd2l0aCAuIG9yICcgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUsIG9yCisiIGFmdGVyIC5pZiBvciAuaWUuCisKK3N5biBtYXRjaCBucm9mZlJlcUxlYWRlciAvXlsuJ10vCW5leHRncm91cD1ucm9mZlJlcU5hbWUgc2tpcHdoaXRlCitzeW4gbWF0Y2ggbnJvZmZSZXFMZWFkZXIgL1suJ10vCWNvbnRhaW5lZCBuZXh0Z3JvdXA9bnJvZmZSZXFOYW1lIHNraXB3aGl0ZQorCitpZiBleGlzdHMoImI6bnJvZmZfaXNfZ3JvZmYiKQorIgorIiBHTlUgdHJvZmYgYWxsb3dzIGxvbmcgcmVxdWVzdCBuYW1lcworIgorc3luIG1hdGNoIG5yb2ZmUmVxTmFtZSAvW15cdCBcXFxbP11cKy8gY29udGFpbmVkIG5leHRncm91cD1ucm9mZlJlcUFyZworZWxzZQorCXN5biBtYXRjaCBucm9mZlJlcU5hbWUgL1teXHQgXFxcWz9dXHsxLDJ9LyBjb250YWluZWQgbmV4dGdyb3VwPW5yb2ZmUmVxQXJnCitlbmRpZgorCitzeW4gcmVnaW9uIHJvZmZSZXFBcmcgc3RhcnQ9L1xTLyBza2lwPS9cXCQvIGVuZD0vJC8gY29udGFpbmVkIGNvbnRhaW5zPW5yb2ZmRXNjYXBlLEBucm9mZlNwZWNpYWwsbnJvZmZTdHJpbmcsbnJvZmZFcnJvcixucm9mZlNwYWNlRXJyb3IsbnJvZmZOdW1CbG9jayxucm9mZkNvbW1lbnQKKworIiB7e3syIENvbmRpdGlvbmFsOiAuaWYgLmllIC5lbAorc3luIG1hdGNoIG5yb2ZmUmVxTmFtZSAvXChpZlx8aWVcKS8gY29udGFpbmVkIG5leHRncm91cD1ucm9mZkNvbmQgc2tpcHdoaXRlCitzeW4gbWF0Y2ggbnJvZmZSZXFOYW1lIC9lbC8gY29udGFpbmVkIG5leHRncm91cD1ucm9mZlJlcUxlYWRlciBza2lwd2hpdGUKK3N5biBtYXRjaCBucm9mZkNvbmQgL1xTXCsvIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bnJvZmZSZXFMZWFkZXIgc2tpcHdoaXRlCisKKyIge3t7MiBTdHJpbmcgZGVmaW5pdGlvbjogLmRzIC5hcworc3luIG1hdGNoIG5yb2ZmUmVxbmFtZSAvW2RhXXMvIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bnJvZmZEZWZJZGVudCBza2lwd2hpdGUKK3N5biBtYXRjaCBucm9mZkRlZklkZW50IC9cU1wrLyBjb250YWluZWQgbmV4dGdyb3VwPW5yb2ZmRGVmaW5pdGlvbiBza2lwd2hpdGUKK3N5biByZWdpb24gbnJvZmZEZWZpbml0aW9uIG1hdGNoZ3JvdXA9bnJvZmZTcGVjaWFsQ2hhciBzdGFydD0vIi8gbWF0Y2hncm91cD1OT05FIGVuZD0vXFwiL21lPWUtMiBza2lwPS9cXCQvIHN0YXJ0PS9cUy8gZW5kPS8kLyBjb250YWluZWQgY29udGFpbnM9bnJvZmZEZWZTcGVjaWFsCitzeW4gbWF0Y2ggbnJvZmZEZWZTcGVjaWFsIC9cXCQvIGNvbnRhaW5lZAorc3luIG1hdGNoIG5yb2ZmRGVmU3BlY2lhbCAvXFxcKCguXClcPS4vIGNvbnRhaW5lZAorCitpZiBleGlzdHMoImI6bnJvZmZfaXNfZ3JvZmYiKQorCXN5biBtYXRjaCBucm9mZkRlZlNwZWNpYWwgL1xcXFtbXl1dKl0vIGNvbnRhaW5lZAorZW5kaWYKKworIiB7e3syIE1hY3JvIGRlZmluaXRpb246IC5kZSAuYW0sIGFsc28gZGl2ZXJzaW9uOiAuZGkKK3N5biBtYXRjaCBucm9mZlJlcU5hbWUgL1woZFtlaV1cfGFtXCkvIGNvbnRhaW5lZCBuZXh0Z3JvdXA9bnJvZmZJZGVudCBza2lwd2hpdGUKK3N5biBtYXRjaCBucm9mZklkZW50IC9bXls/KCBcdF1cKy8gY29udGFpbmVkCitpZiBleGlzdHMoImI6bnJvZmZfaXNfZ3JvZmYiKQorCXN5biBtYXRjaCBucm9mZlJlcU5hbWUgL2Fscy8gY29udGFpbmVkIG5leHRncm91cD1ucm9mZklkZW50IHNraXB3aGl0ZQorZW5kaWYKKworIiB7e3syIFJlZ2lzdGVyIGRlZmluaXRpb246IC5ybiAucnIKK3N5biBtYXRjaCBucm9mZlJlcU5hbWUgL1tybl1yLyBjb250YWluZWQgbmV4dGdyb3VwPW5yb2ZmSWRlbnQgc2tpcHdoaXRlCitpZiBleGlzdHMoImI6bnJvZmZfaXNfZ3JvZmYiKQorCXN5biBtYXRjaCBucm9mZlJlcU5hbWUgL1wocm5uXHxhbG5cKS8gY29udGFpbmVkIG5leHRncm91cD1ucm9mZklkZW50IHNraXB3aGl0ZQorZW5kaWYKKworCisiIHt7ezEgZXFuL3RibC9waWMKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIDxqcD4KKyIgWFhYOiB3cml0ZSBwcm9wZXIgc3ludGF4IGhpZ2hsaWdodCBmb3IgZXFuIC8gdGJsIC8gcGljID8KKyIgPGpwIC8+CisKK3N5biByZWdpb24gbnJvZmZFcXVhdGlvbiBzdGFydD0vXlwuXHMqRVFcPi8gZW5kPS9eXC5ccypFTlw+Lworc3luIHJlZ2lvbiBucm9mZlRhYmxlIHN0YXJ0PS9eXC5ccypUU1w+LyBlbmQ9L15cLlxzKlRFXD4vCitzeW4gcmVnaW9uIG5yb2ZmUGljdHVyZSBzdGFydD0vXlwuXHMqUFNcPi8gZW5kPS9eXC5ccypQRVw+Lworc3luIHJlZ2lvbiBucm9mZlJlZmVyIHN0YXJ0PS9eXC5ccypcW1w+LyBlbmQ9L15cLlxzKlxdXD4vCitzeW4gcmVnaW9uIG5yb2ZmR3JhcCBzdGFydD0vXlwuXHMqRzFcPi8gZW5kPS9eXC5ccypHMlw+Lworc3luIHJlZ2lvbiBucm9mZkdyZW1saW4gc3RhcnQ9L15cLlxzKkdTXD4vIGVuZD0vXlwuXHMqR0V8R0ZcPi8KKworIiB7e3sxIENvbW1lbnRzCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzeW4gcmVnaW9uIG5yb2ZmSWdub3JlIHN0YXJ0PS9eWy4nXVxzKmlnLyBlbmQ9L15bJy5dXHMqXC4vCitzeW4gbWF0Y2ggbnJvZmZDb21tZW50IC9cKF5bLiddXHMqXClcPVxcIi4qLyBjb250YWlucz1ucm9mZlRvZG8KK3N5biBtYXRjaCBucm9mZkNvbW1lbnQgL14nJycuKi8gIGNvbnRhaW5zPW5yb2ZmVG9kbworCitpZiBleGlzdHMoImI6bnJvZmZfaXNfZ3JvZmYiKQorCXN5biBtYXRjaCBucm9mZkNvbW1lbnQgIlxcIy4qJCIgY29udGFpbnM9bnJvZmZUb2RvCitlbmRpZgorCitzeW4ga2V5d29yZCBucm9mZlRvZG8gVE9ETyBYWFggRklYTUUgY29udGFpbmVkCisKKyIge3t7MSBIaWxpZ2h0aW5nCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIgorCisiCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKKyIKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9ucm9mZl9zeW5faW5pdHMiKQorCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX25yb2ZmX3N5bl9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWVuZGlmCisKKwlIaUxpbmsgbnJvZmZFc2NDaGFyIG5yb2ZmU3BlY2lhbENoYXIKKwlIaUxpbmsgbnJvZmZFc2NDaGFyQXIgbnJvZmZTcGVjaWFsQ2hhcgorCUhpTGluayBucm9mZlNwZWNpYWxDaGFyIFNwZWNpYWxDaGFyCisJSGlMaW5rIG5yb2ZmU3BhY2UgRGVsaW1pdGVyCisKKwlIaUxpbmsgbnJvZmZFc2NSZWdBcmcyIG5yb2ZmRXNjUmVnQXJnCisJSGlMaW5rIG5yb2ZmRXNjUmVnQXJnIG5yb2ZmSWRlbnQKKworCUhpTGluayBucm9mZkVzY0FyZzIgbnJvZmZFc2NBcmcKKwlIaUxpbmsgbnJvZmZFc2NQYXIgbnJvZmZFc2NhcGUKKworCUhpTGluayBucm9mZkVzY1JlZ1BhciBucm9mZkVzY2FwZQorCUhpTGluayBucm9mZkVzY0FyZyBucm9mZkVzY2FwZQorCUhpTGluayBucm9mZlNpemUgbnJvZmZFc2NhcGUKKwlIaUxpbmsgbnJvZmZFc2NhcGUgUHJlcHJvYworCisJSGlMaW5rIG5yb2ZmSWdub3JlIENvbW1lbnQKKwlIaUxpbmsgbnJvZmZDb21tZW50IENvbW1lbnQKKwlIaUxpbmsgbnJvZmZUb2RvIFRvZG8KKworCUhpTGluayBucm9mZlJlcUxlYWRlciBucm9mZlJlcXVlc3QKKwlIaUxpbmsgbnJvZmZSZXFOYW1lIG5yb2ZmUmVxdWVzdAorCUhpTGluayBucm9mZlJlcXVlc3QgU3RhdGVtZW50CisJSGlMaW5rIG5yb2ZmQ29uZCBQcmVDb25kaXQKKwlIaUxpbmsgbnJvZmZEZWZJZGVudCBucm9mZklkZW50CisJSGlMaW5rIG5yb2ZmSWRlbnQgSWRlbnRpZmllcgorCisJSGlMaW5rIG5yb2ZmRXF1YXRpb24gUHJlUHJvYworCUhpTGluayBucm9mZlRhYmxlIFByZVByb2MKKwlIaUxpbmsgbnJvZmZQaWN0dXJlIFByZVByb2MKKwlIaUxpbmsgbnJvZmZSZWZlciBQcmVQcm9jCisJSGlMaW5rIG5yb2ZmR3JhcCBQcmVQcm9jCisJSGlMaW5rIG5yb2ZmR3JlbWxpbiBQcmVQcm9jCisKKwlIaUxpbmsgbnJvZmZOdW1iZXIgTnVtYmVyCisJSGlMaW5rIG5yb2ZmQmFkQ2hhciBucm9mZkVycm9yCisJSGlMaW5rIG5yb2ZmU3BhY2VFcnJvciBucm9mZkVycm9yCisJSGlMaW5rIG5yb2ZmRXJyb3IgRXJyb3IKKworCUhpTGluayBucm9mZlByZXNlcnZlIFN0cmluZworCUhpTGluayBucm9mZlN0cmluZyBTdHJpbmcKKwlIaUxpbmsgbnJvZmZEZWZpbml0aW9uIFN0cmluZworCUhpTGluayBucm9mZkRlZlNwZWNpYWwgU3BlY2lhbAorCisJZGVsY29tbWFuZCBIaUxpbmsKKworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibnJvZmYiCisKKyIgdmltNjAwOiBzZXQgZmRtPW1hcmtlciBmZGw9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L25zaXMudmltIGIvcnVudGltZS9zeW50YXgvbnNpcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkODAzNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L25zaXMudmltCkBAIC0wLDAgKzEsMjcxIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJTlNJUyBzY3JpcHQsIGZvciB2ZXJzaW9uIG9mIE5TSVMgMS45MSBhbmQgbGF0ZXIKKyIgTWFpbnRhaW5lcjoJQWxleCBKYWt1c2hldiA8QWxleC5KYWt1c2hldkBrZW1lay5sdD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgTWF5IDEyCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKworIkNPTU1FTlRTCitzeW4ga2V5d29yZCBuc2lzVG9kbwl0b2RvIGF0dGVudGlvbiBub3RlIGZpeG1lIHJlYWRtZQorc3luIHJlZ2lvbiBuc2lzQ29tbWVudAlzdGFydD0iOyIgIGVuZD0iJCIgY29udGFpbnM9bnNpc1RvZG8KK3N5biByZWdpb24gbnNpc0NvbW1lbnQJc3RhcnQ9IiMiICBlbmQ9IiQiIGNvbnRhaW5zPW5zaXNUb2RvCisKKyJMQUJFTFMKK3N5biBtYXRjaCBuc2lzTG9jYWxMYWJlbAkiXGFcU1x7LX06Igorc3luIG1hdGNoIG5zaXNHbG9iYWxMYWJlbAkiXC5cU1x7LTEsfToiCisKKyJQUkVQUk9DRVNTT1IKK3N5biBtYXRjaCBuc2lzUHJlcHJvY1N1YnN0CSIkey5cey19fSIKK3N5biBtYXRjaCBuc2lzRGVmaW5lCQkiIWRlZmluZVw+Igorc3luIG1hdGNoIG5zaXNEZWZpbmUJCSIhdW5kZWZcPiIKK3N5biBtYXRjaCBuc2lzUHJlQ29uZGl0CQkiIWlmZGVmXD4iCitzeW4gbWF0Y2ggbnNpc1ByZUNvbmRpdAkJIiFpZm5kZWZcPiIKK3N5biBtYXRjaCBuc2lzUHJlQ29uZGl0CQkiIWVuZGlmXD4iCitzeW4gbWF0Y2ggbnNpc1ByZUNvbmRpdAkJIiFlbHNlXD4iCitzeW4gbWF0Y2ggbnNpc01hY3JvCQkiIW1hY3JvXD4iCitzeW4gbWF0Y2ggbnNpc01hY3JvCQkiIW1hY3JvZW5kXD4iCitzeW4gbWF0Y2ggbnNpc01hY3JvCQkiIWluc2VydG1hY3JvXD4iCisKKyJDT01QSUxFUiBVVElMSVRZCitzeW4gbWF0Y2ggbnNpc0luY2x1ZGUJCSIhaW5jbHVkZVw+Igorc3luIG1hdGNoIG5zaXNTeXN0ZW0JCSIhY2RcPiIKK3N5biBtYXRjaCBuc2lzU3lzdGVtCQkiIXN5c3RlbVw+Igorc3luIG1hdGNoIG5zaXNTeXN0ZW0JCSIhcGFja2hkclw+IgorCisiVkFSSUFCTEVTCitzeW4gbWF0Y2ggbnNpc1VzZXJWYXIJCSIkXGQiCitzeW4gbWF0Y2ggbnNpc1VzZXJWYXIJCSIkUlxkIgorc3luIG1hdGNoIG5zaXNTeXNWYXIJCSIkSU5TVERJUiIKK3N5biBtYXRjaCBuc2lzU3lzVmFyCQkiJE9VVERJUiIKK3N5biBtYXRjaCBuc2lzU3lzVmFyCQkiJENNRExJTkUiCitzeW4gbWF0Y2ggbnNpc1N5c1ZhcgkJIiRQUk9HUkFNRklMRVMiCitzeW4gbWF0Y2ggbnNpc1N5c1ZhcgkJIiRERVNLVE9QIgorc3luIG1hdGNoIG5zaXNTeXNWYXIJCSIkRVhFRElSIgorc3luIG1hdGNoIG5zaXNTeXNWYXIJCSIkV0lORElSIgorc3luIG1hdGNoIG5zaXNTeXNWYXIJCSIkU1lTRElSIgorc3luIG1hdGNoIG5zaXNTeXNWYXIJCSIkVEVNUCIKK3N5biBtYXRjaCBuc2lzU3lzVmFyCQkiJFNUQVJUTUVOVSIKK3N5biBtYXRjaCBuc2lzU3lzVmFyCQkiJFNNUFJPR1JBTVMiCitzeW4gbWF0Y2ggbnNpc1N5c1ZhcgkJIiRTTVNUQVJUVVAiCitzeW4gbWF0Y2ggbnNpc1N5c1ZhcgkJIiRRVUlDS0xBVU5DSCIKK3N5biBtYXRjaCBuc2lzU3lzVmFyCQkiJEhXTkRQQVJFTlQiCitzeW4gbWF0Y2ggbnNpc1N5c1ZhcgkJIiRcXHIiCitzeW4gbWF0Y2ggbnNpc1N5c1ZhcgkJIiRcXG4iCitzeW4gbWF0Y2ggbnNpc1N5c1ZhcgkJIiRcJCIKKworIlNUUklOR1MKK3N5biByZWdpb24gbnNpc1N0cmluZwlzdGFydD0vIi8gc2tpcD0vJ1x8YC8gZW5kPS8iLyBjb250YWlucz1uc2lzUHJlcHJvY1N1YnN0LG5zaXNVc2VyVmFyLG5zaXNTeXNWYXIsbnNpc1JlZ2lzdHJ5CitzeW4gcmVnaW9uIG5zaXNTdHJpbmcJc3RhcnQ9LycvIHNraXA9LyJcfGAvIGVuZD0vJy8gY29udGFpbnM9bnNpc1ByZXByb2NTdWJzdCxuc2lzVXNlclZhcixuc2lzU3lzVmFyLG5zaXNSZWdpc3RyeQorc3luIHJlZ2lvbiBuc2lzU3RyaW5nCXN0YXJ0PS9gLyBza2lwPS8iXHwnLyBlbmQ9L2AvIGNvbnRhaW5zPW5zaXNQcmVwcm9jU3Vic3QsbnNpc1VzZXJWYXIsbnNpc1N5c1Zhcixuc2lzUmVnaXN0cnkKKworIkNPTlNUQU5UUworc3luIGtleXdvcmQgbnNpc0Jvb2xlYW4JCXRydWUgZmFsc2Ugb24gb2ZmCisKK3N5biBrZXl3b3JkIG5zaXNBdHRyaWJPcHRpb25zCWhpZGUgc2hvdyBuZXZlcnNob3cgYXV0byBmb3JjZSB0cnkgaWZuZXdlciBub3JtYWwgc2lsZW50IHNpbGVudGxvZworc3luIGtleXdvcmQgbnNpc0F0dHJpYk9wdGlvbnMJc21vb3RoIGNvbG9yZWQgU0VUIENVUiBFTkQgUk8gbm9uZSBsaXN0b25seSB0ZXh0b25seSBib3RoIGN1cnJlbnQgYWxsCitzeW4ga2V5d29yZCBuc2lzQXR0cmliT3B0aW9ucwl6bGliIGJ6aXAyIGx6bWEKKworc3luIG1hdGNoIG5zaXNBdHRyaWJPcHRpb25zCSdcL05PQ1VTVE9NJworc3luIG1hdGNoIG5zaXNBdHRyaWJPcHRpb25zCSdcL0NVU1RPTVNUUklORycKK3N5biBtYXRjaCBuc2lzQXR0cmliT3B0aW9ucwknXC9DT01QT05FTlRTT05MWU9OQ1VTVE9NJworc3luIG1hdGNoIG5zaXNBdHRyaWJPcHRpb25zCSdcL3dpbmRvd3MnCitzeW4gbWF0Y2ggbnNpc0F0dHJpYk9wdGlvbnMJJ1wvcicKK3N5biBtYXRjaCBuc2lzQXR0cmliT3B0aW9ucwknXC9vbmFtZScKK3N5biBtYXRjaCBuc2lzQXR0cmliT3B0aW9ucwknXC9SRUJPT1RPSycKK3N5biBtYXRjaCBuc2lzQXR0cmliT3B0aW9ucwknXC9TSUxFTlQnCitzeW4gbWF0Y2ggbnNpc0F0dHJpYk9wdGlvbnMJJ1wvRklMRVNPTkxZJworc3luIG1hdGNoIG5zaXNBdHRyaWJPcHRpb25zCSdcL1NIT1JUJworCitzeW4ga2V5d29yZCBuc2lzRXhlY1NoZWxsCVNXX1NIT1dOT1JNQUwgU1dfU0hPV01BWElNSVpFRCBTV19TSE9XTUlOSU1JWkVECisKK3N5biBrZXl3b3JkIG5zaXNSZWdpc3RyeQlIS0NSIEhLTE0gSEtDVSBIS1UgSEtDQyBIS0REIEhLUEQKK3N5biBrZXl3b3JkIG5zaXNSZWdpc3RyeQlIS0VZX0NMQVNTRVNfUk9PVCBIS0VZX0xPQ0FMX01BQ0hJTkUgSEtFWV9DVVJSRU5UX1VTRVIgSEtFWV9VU0VSUworc3luIGtleXdvcmQgbnNpc1JlZ2lzdHJ5CUhLRVlfQ1VSUkVOVF9DT05GSUcgSEtFWV9EWU5fREFUQSBIS0VZX1BFUkZPUk1BTkNFX0RBVEEKKworc3luIGtleXdvcmQgbnNpc0ZpbGVBdHRyaWIJTk9STUFMIEFSQ0hJVkUgSElEREVOIE9GRkxJTkUgUkVBRE9OTFkgU1lTVEVNIFRFTVBPUkFSWQorc3luIGtleXdvcmQgbnNpc0ZpbGVBdHRyaWIJRklMRV9BVFRSSUJVVEVfTk9STUFMIEZJTEVfQVRUUklCVVRFX0FSQ0hJVkUgRklMRV9BVFRSSUJVVEVfSElEREVOCitzeW4ga2V5d29yZCBuc2lzRmlsZUF0dHJpYglGSUxFX0FUVFJJQlVURV9PRkZMSU5FIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZIEZJTEVfQVRUUklCVVRFX1NZU1RFTQorc3luIGtleXdvcmQgbnNpc0ZpbGVBdHRyaWIJRklMRV9BVFRSSUJVVEVfVEVNUE9SQVJZCisKK3N5biBrZXl3b3JkIG5zaXNNZXNzYWdlQm94CU1CX09LIE1CX09LQ0FOQ0VMIE1CX0FCT1JUUkVUUllJR05PUkUgTUJfUkVUUllDQU5DRUwgTUJfWUVTTk8gTUJfWUVTTk9DQU5DRUwKK3N5biBrZXl3b3JkIG5zaXNNZXNzYWdlQm94CU1CX0lDT05FWENMQU1BVElPTiBNQl9JQ09OSU5GT1JNQVRJT04gTUJfSUNPTlFVRVNUSU9OIE1CX0lDT05TVE9QCitzeW4ga2V5d29yZCBuc2lzTWVzc2FnZUJveAlNQl9UT1BNT1NUIE1CX1NFVEZPUkVHUk9VTkQgTUJfUklHSFQKK3N5biBrZXl3b3JkIG5zaXNNZXNzYWdlQm94CU1CX0RFRkJVVFRPTjEgTUJfREVGQlVUVE9OMiBNQl9ERUZCVVRUT04zIE1CX0RFRkJVVFRPTjQKK3N5biBrZXl3b3JkIG5zaXNNZXNzYWdlQm94CUlEQUJPUlQgSURDQU5DRUwgSURJR05PUkUgSUROTyBJRE9LIElEUkVUUlkgSURZRVMKKworc3luIG1hdGNoIG5zaXNOdW1iZXIJCSJcPFteMF1cZCpcPiIKK3N5biBtYXRjaCBuc2lzTnVtYmVyCQkiXDwweFx4XCtcPiIKK3N5biBtYXRjaCBuc2lzTnVtYmVyCQkiXDwwXG8qXD4iCisKKworIklOU1RBTExFUiBBVFRSSUJVVEVTIC0gR2VuZXJhbCBpbnN0YWxsZXIgY29uZmlndXJhdGlvbgorc3luIGtleXdvcmQgbnNpc0F0dHJpYnV0ZQlPdXRGaWxlIE5hbWUgQ2FwdGlvbiBTdWJDYXB0aW9uIEJyYW5kaW5nVGV4dCBJY29uCitzeW4ga2V5d29yZCBuc2lzQXR0cmlidXRlCVdpbmRvd0ljb24gQkdHcmFkaWVudCBTaWxlbnRJbnN0YWxsIFNpbGVudFVuSW5zdGFsbAorc3luIGtleXdvcmQgbnNpc0F0dHJpYnV0ZQlDUkNDaGVjayBNaXNjQnV0dG9uVGV4dCBJbnN0YWxsQnV0dG9uVGV4dCBGaWxlRXJyb3JUZXh0CisKKyJJTlNUQUxMRVIgQVRUUklCVVRFUyAtIEluc3RhbGwgZGlyZWN0b3J5IGNvbmZpZ3VyYXRpb24KK3N5biBrZXl3b3JkIG5zaXNBdHRyaWJ1dGUJSW5zdGFsbERpciBJbnN0YWxsRGlyUmVnS2V5CisKKyJJTlNUQUxMRVIgQVRUUklCVVRFUyAtIExpY2Vuc2UgcGFnZSBjb25maWd1cmF0aW9uCitzeW4ga2V5d29yZCBuc2lzQXR0cmlidXRlCUxpY2Vuc2VUZXh0IExpY2Vuc2VEYXRhCisKKyJJTlNUQUxMRVIgQVRUUklCVVRFUyAtIENvbXBvbmVudCBwYWdlIGNvbmZpZ3VyYXRpb24KK3N5biBrZXl3b3JkIG5zaXNBdHRyaWJ1dGUJQ29tcG9uZW50VGV4dCBJbnN0VHlwZSBFbmFibGVkQml0bWFwIERpc2FibGVkQml0bWFwIFNwYWNlVGV4dHMKKworIklOU1RBTExFUiBBVFRSSUJVVEVTIC0gRGlyZWN0b3J5IHBhZ2UgY29uZmlndXJhdGlvbgorc3luIGtleXdvcmQgbnNpc0F0dHJpYnV0ZQlEaXJTaG93IERpclRleHQgQWxsb3dSb290RGlySW5zdGFsbAorCisiSU5TVEFMTEVSIEFUVFJJQlVURVMgLSBJbnN0YWxsIHBhZ2UgY29uZmlndXJhdGlvbgorc3luIGtleXdvcmQgbnNpc0F0dHJpYnV0ZQlJbnN0YWxsQ29sb3JzIEluc3RQcm9ncmVzc0ZsYWdzIEF1dG9DbG9zZVdpbmRvdworc3luIGtleXdvcmQgbnNpc0F0dHJpYnV0ZQlTaG93SW5zdERldGFpbHMgRGV0YWlsc0J1dHRvblRleHQgQ29tcGxldGVkVGV4dAorCisiSU5TVEFMTEVSIEFUVFJJQlVURVMgLSBVbmluc3RhbGwgY29uZmlndXJhdGlvbgorc3luIGtleXdvcmQgbnNpc0F0dHJpYnV0ZQlVbmluc3RhbGxUZXh0IFVuaW5zdGFsbEljb24gVW5pbnN0YWxsQ2FwdGlvbgorc3luIGtleXdvcmQgbnNpc0F0dHJpYnV0ZQlVbmluc3RhbGxTdWJDYXB0aW9uIFNob3dVbmluc3REZXRhaWxzIFVuaW5zdGFsbEJ1dHRvblRleHQKKworIkNPTVBJTEVSIEFUVFJJQlVURVMKK3N5biBrZXl3b3JkIG5zaXNDb21waWxlcglTZXRPdmVyd3JpdGUgU2V0Q29tcHJlc3MgU2V0Q29tcHJlc3NvciBTZXREYXRhYmxvY2tPcHRpbWl6ZSBTZXREYXRlU2F2ZQorCisKKyJGVU5DVElPTlMgLSBnZW5lcmFsIHB1cnBvc2UKK3N5biBrZXl3b3JkIG5zaXNJbnN0cnVjdGlvbglTZXRPdXRQYXRoIEZpbGUgRXhlYyBFeGVjV2FpdCBFeGVjU2hlbGwKK3N5biBrZXl3b3JkIG5zaXNJbnN0cnVjdGlvbglSZW5hbWUgRGVsZXRlIFJNRGlyCisKKyJGVU5DVElPTlMgLSByZWdpc3RyeSAmIGluaQorc3luIGtleXdvcmQgbnNpc0luc3RydWN0aW9uCVdyaXRlUmVnU3RyIFdyaXRlUmVnRXhwYW5kU3RyIFdyaXRlUmVnRFdPUkQgV3JpdGVSZWdCaW4KK3N5biBrZXl3b3JkIG5zaXNJbnN0cnVjdGlvbglXcml0ZUlOSVN0ciBSZWFkUmVnU3RyIFJlYWRSZWdEV09SRCBSZWFkSU5JU3RyIFJlYWRFbnZTdHIKK3N5biBrZXl3b3JkIG5zaXNJbnN0cnVjdGlvbglFeHBhbmRFbnZTdHJpbmdzIERlbGV0ZVJlZ1ZhbHVlIERlbGV0ZVJlZ0tleSBFbnVtUmVnS2V5CitzeW4ga2V5d29yZCBuc2lzSW5zdHJ1Y3Rpb24JRW51bVJlZ1ZhbHVlIERlbGV0ZUlOSVNlYyBEZWxldGVJTklTdHIKKworIkZVTkNUSU9OUyAtIGdlbmVyYWwgcHVycG9zZSwgYWR2YW5jZWQKK3N5biBrZXl3b3JkIG5zaXNJbnN0cnVjdGlvbglDcmVhdGVEaXJlY3RvcnkgQ29weUZpbGVzIFNldEZpbGVBdHRyaWJ1dGVzIENyZWF0ZVNob3J0Q3V0CitzeW4ga2V5d29yZCBuc2lzSW5zdHJ1Y3Rpb24JR2V0RnVsbFBhdGhOYW1lIFNlYXJjaFBhdGggR2V0VGVtcEZpbGVOYW1lIENhbGxJbnN0RExMCitzeW4ga2V5d29yZCBuc2lzSW5zdHJ1Y3Rpb24JUmVnRExMIFVuUmVnRExMIEdldERMTFZlcnNpb24gR2V0RExMVmVyc2lvbkxvY2FsCitzeW4ga2V5d29yZCBuc2lzSW5zdHJ1Y3Rpb24JR2V0RmlsZVRpbWUgR2V0RmlsZVRpbWVMb2NhbAorCisiRlVOQ1RJT05TIC0gQnJhbmNoaW5nLCBmbG93IGNvbnRyb2wsIGVycm9yIGNoZWNraW5nLCB1c2VyIGludGVyYWN0aW9uLCBldGMgaW5zdHJ1Y3Rpb25zCitzeW4ga2V5d29yZCBuc2lzSW5zdHJ1Y3Rpb24JR290byBDYWxsIFJldHVybiBJZkVycm9ycyBDbGVhckVycm9ycyBTZXRFcnJvcnMgRmluZFdpbmRvdworc3luIGtleXdvcmQgbnNpc0luc3RydWN0aW9uCVNlbmRNZXNzYWdlIElzV2luZG93IElmRmlsZUV4aXN0cyBNZXNzYWdlQm94IFN0ckNtcAorc3luIGtleXdvcmQgbnNpc0luc3RydWN0aW9uCUludENtcCBJbnRDbXBVIEFib3J0IFF1aXQgR2V0RnVuY3Rpb25BZGRyZXNzIEdldExhYmVsQWRkcmVzcworc3luIGtleXdvcmQgbnNpc0luc3RydWN0aW9uCUdldEN1cnJlbnRBZGRyZXNzCisKKyJGVU5DVElPTlMgLSBGaWxlIGFuZCBkaXJlY3RvcnkgaS9vIGluc3RydWN0aW9ucworc3luIGtleXdvcmQgbnNpc0luc3RydWN0aW9uCUZpbmRGaXJzdCBGaW5kTmV4dCBGaW5kQ2xvc2UgRmlsZU9wZW4gRmlsZUNsb3NlIEZpbGVSZWFkCitzeW4ga2V5d29yZCBuc2lzSW5zdHJ1Y3Rpb24JRmlsZVdyaXRlIEZpbGVSZWFkQnl0ZSBGaWxlV3JpdGVCeXRlIEZpbGVTZWVrCisKKyJGVU5DVElPTlMgLSBNaXNjIGluc3RydWN0aW9ucworc3luIGtleXdvcmQgbnNpc0luc3RydWN0aW9uCVNldERldGFpbHNWaWV3IFNldERldGFpbHNQcmludCBTZXRBdXRvQ2xvc2UgRGV0YWlsUHJpbnQKK3N5biBrZXl3b3JkIG5zaXNJbnN0cnVjdGlvbglTbGVlcCBCcmluZ1RvRnJvbnQgSGlkZVdpbmRvdyBTZXRTaGVsbFZhckNvbnRleHQKKworIkZVTkNUSU9OUyAtIFN0cmluZyBtYW5pcHVsYXRpb24gc3VwcG9ydAorc3luIGtleXdvcmQgbnNpc0luc3RydWN0aW9uCVN0ckNweSBTdHJMZW4KKworIkZVTkNUSU9OUyAtIFN0YWNrIHN1cHBvcnQKK3N5biBrZXl3b3JkIG5zaXNJbnN0cnVjdGlvbglQdXNoIFBvcCBFeGNoCisKKyJGVU5DVElPTlMgLSBJbnRlZ2VyIG1hbmlwdWxhdGlvbiBzdXBwb3J0CitzeW4ga2V5d29yZCBuc2lzSW5zdHJ1Y3Rpb24JSW50T3AgSW50Rm10CisKKyJGVU5DVElPTlMgLSBSZWJvb3Rpbmcgc3VwcG9ydAorc3luIGtleXdvcmQgbnNpc0luc3RydWN0aW9uCVJlYm9vdCBJZlJlYm9vdEZsYWcgU2V0UmVib290RmxhZworCisiRlVOQ1RJT05TIC0gVW5pbnN0YWxsZXIgaW5zdHJ1Y3Rpb25zCitzeW4ga2V5d29yZCBuc2lzSW5zdHJ1Y3Rpb24JV3JpdGVVbmluc3RhbGxlcgorCisiRlVOQ1RJT05TIC0gSW5zdGFsbCBsb2dnaW5nIGluc3RydWN0aW9ucworc3luIGtleXdvcmQgbnNpc0luc3RydWN0aW9uCUxvZ1NldCBMb2dUZXh0CisKKyJGVU5DVElPTlMgLSBTZWN0aW9uIG1hbmFnZW1lbnQgaW5zdHJ1Y3Rpb25zCitzeW4ga2V5d29yZCBuc2lzSW5zdHJ1Y3Rpb24JU2VjdGlvblNldEZsYWdzIFNlY3Rpb25HZXRGbGFncyBTZWN0aW9uU2V0VGV4dAorc3luIGtleXdvcmQgbnNpc0luc3RydWN0aW9uCVNlY3Rpb25HZXRUZXh0CisKKworIlNQRUNJQUwgRlVOQ1RJT05TIC0gaW5zdGFsbAorc3luIG1hdGNoIG5zaXNDYWxsYmFjawkJIlwub25Jbml0Igorc3luIG1hdGNoIG5zaXNDYWxsYmFjawkJIlwub25Vc2VyQWJvcnQiCitzeW4gbWF0Y2ggbnNpc0NhbGxiYWNrCQkiXC5vbkluc3RTdWNjZXNzIgorc3luIG1hdGNoIG5zaXNDYWxsYmFjawkJIlwub25JbnN0RmFpbGVkIgorc3luIG1hdGNoIG5zaXNDYWxsYmFjawkJIlwub25WZXJpZnlJbnN0RGlyIgorc3luIG1hdGNoIG5zaXNDYWxsYmFjawkJIlwub25OZXh0UGFnZSIKK3N5biBtYXRjaCBuc2lzQ2FsbGJhY2sJCSJcLm9uUHJldlBhZ2UiCitzeW4gbWF0Y2ggbnNpc0NhbGxiYWNrCQkiXC5vblNlbENoYW5nZSIKKworIlNQRUNJQUwgRlVOQ1RJT05TIC0gdW5pbnN0YWxsCitzeW4gbWF0Y2ggbnNpc0NhbGxiYWNrCQkidW5cLm9uSW5pdCIKK3N5biBtYXRjaCBuc2lzQ2FsbGJhY2sJCSJ1blwub25Vc2VyQWJvcnQiCitzeW4gbWF0Y2ggbnNpc0NhbGxiYWNrCQkidW5cLm9uSW5zdFN1Y2Nlc3MiCitzeW4gbWF0Y2ggbnNpc0NhbGxiYWNrCQkidW5cLm9uSW5zdEZhaWxlZCIKK3N5biBtYXRjaCBuc2lzQ2FsbGJhY2sJCSJ1blwub25WZXJpZnlJbnN0RGlyIgorc3luIG1hdGNoIG5zaXNDYWxsYmFjawkJInVuXC5vbk5leHRQYWdlIgorCisKKyJTVEFURU1FTlRTIC0gc2VjdGlvbnMKK3N5biBrZXl3b3JkIG5zaXNTdGF0ZW1lbnQJU2VjdGlvbiBTZWN0aW9uSW4gU2VjdGlvbkVuZCBTZWN0aW9uRGl2aWRlcgorc3luIGtleXdvcmQgbnNpc1N0YXRlbWVudAlBZGRTaXplCisKKyJTVEFURU1FTlRTIC0gZnVuY3Rpb25zCitzeW4ga2V5d29yZCBuc2lzU3RhdGVtZW50CUZ1bmN0aW9uIEZ1bmN0aW9uRW5kCisKKyJTVEFURU1FTlRTIC0gcGFnZXMKK3N5biBrZXl3b3JkIG5zaXNTdGF0ZW1lbnQJUGFnZSBVbmluc3RQYWdlIFBhZ2VFeCBQYWdlRXhFbmMgUGFnZUNhbGxiYWNrcworCisKKyJFUlJPUgorc3luIGtleXdvcmQgbnNpc0Vycm9yCQlVbmluc3RhbGxFeGVOYW1lCisKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfbnNpc19zeW5faW5pdHMiKQorCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX25zeXNfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworCisgIEhpTGluayBuc2lzSW5zdHJ1Y3Rpb24JCUZ1bmN0aW9uCisgIEhpTGluayBuc2lzQ29tbWVudAkJCUNvbW1lbnQKKyAgSGlMaW5rIG5zaXNMb2NhbExhYmVsCQkJTGFiZWwKKyAgSGlMaW5rIG5zaXNHbG9iYWxMYWJlbAkJTGFiZWwKKyAgSGlMaW5rIG5zaXNTdGF0ZW1lbnQJCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG5zaXNTdHJpbmcJCQlTdHJpbmcKKyAgSGlMaW5rIG5zaXNCb29sZWFuCQkJQm9vbGVhbgorICBIaUxpbmsgbnNpc0F0dHJpYk9wdGlvbnMJCUNvbnN0YW50CisgIEhpTGluayBuc2lzRXhlY1NoZWxsCQkJQ29uc3RhbnQKKyAgSGlMaW5rIG5zaXNGaWxlQXR0cmliCQkJQ29uc3RhbnQKKyAgSGlMaW5rIG5zaXNNZXNzYWdlQm94CQkJQ29uc3RhbnQKKyAgSGlMaW5rIG5zaXNSZWdpc3RyeQkJCUlkZW50aWZpZXIKKyAgSGlMaW5rIG5zaXNOdW1iZXIJCQlOdW1iZXIKKyAgSGlMaW5rIG5zaXNFcnJvcgkJCUVycm9yCisgIEhpTGluayBuc2lzVXNlclZhcgkJCUlkZW50aWZpZXIKKyAgSGlMaW5rIG5zaXNTeXNWYXIJCQlJZGVudGlmaWVyCisgIEhpTGluayBuc2lzQXR0cmlidXRlCQkJVHlwZQorICBIaUxpbmsgbnNpc0NvbXBpbGVyCQkJVHlwZQorICBIaUxpbmsgbnNpc1RvZG8JCQlUb2RvCisgIEhpTGluayBuc2lzQ2FsbGJhY2sJCQlPcGVyYXRvcgorICAiIHByZXByb2Nlc3NvciBjb21tYW5kcworICBIaUxpbmsgbnNpc1ByZXByb2NTdWJzdAkJUHJlUHJvYworICBIaUxpbmsgbnNpc0RlZmluZQkJCURlZmluZQorICBIaUxpbmsgbnNpc01hY3JvCQkJTWFjcm8KKyAgSGlMaW5rIG5zaXNQcmVDb25kaXQJCQlQcmVDb25kaXQKKyAgSGlMaW5rIG5zaXNJbmNsdWRlCQkJSW5jbHVkZQorICBIaUxpbmsgbnNpc1N5c3RlbQkJCVByZVByb2MKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAibnNpcyIKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvb2JqYy52aW0gYi9ydW50aW1lL3N5bnRheC9vYmpjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTk2NWEwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvb2JqYy52aW0KQEAgLTAsMCArMSwxMDcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkgICAgT2JqZWN0aXZlIEMKKyIgTWFpbnRhaW5lcjoJICAgIEthenVub2J1IEt1cml5YW1hIDxrYXp1bm9idS5rdXJpeWFtYUBuaWZ0eS5jb20+CisiIEV4LW1haW50YWluZXI6ICAgIEFudGhvbnkgSG9kc2RvbiA8YWhvZHNkb25AZmFzdG1haWwuZm0+CisiIEZpcnN0IEF1dGhvcjoJICAgIFZhbGVudGlubyBLeXJpYWtpZGVzIDwxa3lyaWFraUBpbmZvcm1hdGlrLnVuaS1oYW1idXJnLmRlPgorIiBMYXN0IENoYW5nZToJICAgIDIwMDQgTWF5IDIwCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgJmZpbGV0eXBlICE9ICdvYmpjcHAnCisgICIgUmVhZCB0aGUgQyBzeW50YXggdG8gc3RhcnQgd2l0aAorICBpZiB2ZXJzaW9uIDwgNjAwCisgICAgc291cmNlIDxzZmlsZT46cDpoL2MudmltCisgIGVsc2UKKyAgICBydW50aW1lISBzeW50YXgvYy52aW0KKyAgZW5kaWYKK2VuZGlmCisKKyIgT2JqZWN0aXZlIEMgZXh0ZW50aW9ucyBmb2xsb3cgYmVsb3cKKyIKKyIgTk9URTogT2JqZWN0aXZlIEMgaXMgYWJicmV2aWF0ZWQgdG8gT2JqQy9vYmpjCisiIGFuZCB1c2VzICouaCwgKi5tIGFzIGZpbGUgZXh0ZW5zaW9ucyEKKworCisiIE9iakMga2V5d29yZHMsIHR5cGVzLCB0eXBlIHF1YWxpZmllcnMgZXRjLgorc3luIGtleXdvcmQgb2JqY1N0YXRlbWVudAlzZWxmIHN1cGVyIF9jbWQKK3N5biBrZXl3b3JkIG9iamNUeXBlCQlpZCBDbGFzcyBTRUwgSU1QIEJPT0wgbmlsIE5pbAorc3luIGtleXdvcmQgb2JqY1R5cGVNb2RpZmllcglieWNvcHkgaW4gb3V0IGlub3V0IG9uZXdheQorCisiIE1hdGNoIHRoZSBPYmpDICNpbXBvcnQgZGlyZWN0aXZlIChsaWtlIEMncyAjaW5jbHVkZSkKK3N5biByZWdpb24gb2JqY0ltcG9ydGVkIGRpc3BsYXkgY29udGFpbmVkIHN0YXJ0PSsiKyAgc2tpcD0rXFxcXFx8XFwiKyAgZW5kPSsiKworc3luIG1hdGNoICBvYmpjSW1wb3J0ZWQgZGlzcGxheSBjb250YWluZWQgIjxbXzAtOWEtekEtWi5cL10qPiIKK3N5biBtYXRjaCAgb2JqY0ltcG9ydCBkaXNwbGF5ICJeXHMqXCglOlx8I1wpXHMqaW1wb3J0XD5ccypbIjxdIiBjb250YWlucz1vYmpjSW1wb3J0ZWQKKworIiBNYXRjaCB0aGUgaW1wb3J0YW50IE9iakMgZGlyZWN0aXZlcworc3luIG1hdGNoICBvYmpjU2NvcGVEZWNsICAgICJAcHVibGljXHxAcHJpdmF0ZVx8QHByb3RlY3RlZCIKK3N5biBtYXRjaCAgb2JqY0RpcmVjdGl2ZSAgICAiQGludGVyZmFjZVx8QGltcGxlbWVudGF0aW9uIgorc3luIG1hdGNoICBvYmpjRGlyZWN0aXZlICAgICJAY2xhc3NcfEBlbmRcfEBkZWZzIgorc3luIG1hdGNoICBvYmpjRGlyZWN0aXZlICAgICJAZW5jb2RlXHxAcHJvdG9jb2xcfEBzZWxlY3RvciIKKworIiBNYXRjaCB0aGUgT2JqQyBtZXRob2QgdHlwZXMKKyIKKyIgTk9URTogaGVyZSBJIG1hdGNoIG9ubHkgdGhlIGluZGljYXRvcnMsIHRoaXMgbG9va3MKKyIgbXVjaCBuaWNlciBhbmQgcmVkdWNlcyBjbHV0dGVyaW5nIGNvbG9yIGhpZ2hsaWdodGluZ3MuCisiIEhvd2V2ZXIsIGlmIHlvdSBwcmVmZXIgZnVsbCBtZXRob2QgZGVjbGFyYXRpb24gbWF0Y2hpbmcKKyIgYXBwZW5kIC4qIGF0IHRoZSBlbmQgb2YgdGhlIG5leHQgdHdvIHBhdHRlcm5zIQorIgorc3luIG1hdGNoIG9iamNJbnN0TWV0aG9kICAgICJeXHMqLVxzKiIKK3N5biBtYXRjaCBvYmpjRmFjdE1ldGhvZCAgICAiXlxzKitccyoiCisKKyIgVG8gZGlzdGluZ3Vpc2ggZnJvbSBhIGhlYWRlciBpbmNsdXNpb24gZnJvbSBhIHByb3RvY29sIGxpc3QuCitzeW4gbWF0Y2ggb2JqY1Byb3RvY29sIGRpc3BsYXkgIjxbX2EtekEtWl1bX2EtekEtWjAtOV0qPiIgY29udGFpbnM9b2JqY1R5cGUsY1R5cGUsVHlwZQorCisKKyIgVG8gZGlzdGluZ3Vpc2ggbGFiZWxzIGZyb20gdGhlIGtleXdvcmQgZm9yIGEgbWV0aG9kJ3MgcGFyYW1ldGVyLgorc3luIHJlZ2lvbiBvYmpjS2V5Rm9yTWV0aG9kUGFyYW0gZGlzcGxheQorICAgIFwgc3RhcnQ9Il5ccypbX2EtekEtWl1bX2EtekEtWjAtOV0qXHMqOlxzKigiCisgICAgXCBlbmQ9IilccypbX2EtekEtWl1bX2EtekEtWjAtOV0qIgorICAgIFwgY29udGFpbnM9b2JqY1R5cGUsb2JqY1R5cGVNb2RpZmllcixjVHlwZSxjU3RydWN0dXJlLGNTdG9yYWdlQ2xhc3MsVHlwZQorCisiIE9iamVjdGl2ZS1DIENvbnN0YW50IFN0cmluZ3MKK3N5biBtYXRjaCBvYmpjU3BlY2lhbCBkaXNwbGF5ICIlQCIgY29udGFpbmVkCitzeW4gcmVnaW9uIG9iamNTdHJpbmcgc3RhcnQ9K1woQCJcfCJcKSsgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPWNGb3JtYXQsY1NwZWNpYWwsb2JqY1NwZWNpYWwKKworIiBPYmplY3RpdmUtQyBNZXNzYWdlIEV4cHJlc3Npb25zCitzeW4gcmVnaW9uIG9iamNNZXNzYWdlIGRpc3BsYXkgc3RhcnQ9IlxbIiBlbmQ9IlxdIiBjb250YWlucz1vYmpjTWVzc2FnZSxvYmpjU3RhdGVtZW50LG9iamNUeXBlLG9iamNUeXBlTW9kaWZpZXIsb2JqY1N0cmluZyxvYmpjQ29uc3RhbnQsb2JqY0RpcmVjdGl2ZSxjVHlwZSxjU3RydWN0dXJlLGNTdG9yYWdlQ2xhc3MsY1N0cmluZyxjQ2hhcmFjdGVyLGNTcGVjaWFsQ2hhcmFjdGVyLGNOdW1iZXJzLGNDb25zdGFudCxjT3BlcmF0b3IsY0NvbW1lbnQsY0NvbW1lbnRMLFR5cGUKKworc3luIGNsdXN0ZXIgY1BhcmVuR3JvdXAgYWRkPW9iamNNZXNzYWdlCitzeW4gY2x1c3RlciBjUHJlUHJvY0dyb3VwIGFkZD1vYmpjTWVzc2FnZQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9vYmpjX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX29iamNfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgb2JqY0ltcG9ydAkJSW5jbHVkZQorICBIaUxpbmsgb2JqY0ltcG9ydGVkCQljU3RyaW5nCisgIEhpTGluayBvYmpjVHlwZU1vZGlmaWVyCW9iamNUeXBlCisgIEhpTGluayBvYmpjVHlwZQkJVHlwZQorICBIaUxpbmsgb2JqY1Njb3BlRGVjbAkJU3RhdGVtZW50CisgIEhpTGluayBvYmpjSW5zdE1ldGhvZAkJRnVuY3Rpb24KKyAgSGlMaW5rIG9iamNGYWN0TWV0aG9kCQlGdW5jdGlvbgorICBIaUxpbmsgb2JqY1N0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBvYmpjRGlyZWN0aXZlCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG9iamNLZXlGb3JNZXRob2RQYXJhbQlOb25lCisgIEhpTGluayBvYmpjU3RyaW5nCQljU3RyaW5nCisgIEhpTGluayBvYmpjU3BlY2lhbAkJU3BlY2lhbAorICBIaUxpbmsgb2JqY1Byb3RvY29sCQlOb25lCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm9iamMiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9vYmpjcHAudmltIGIvcnVudGltZS9zeW50YXgvb2JqY3BwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2UzODBjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvb2JqY3BwLnZpbQpAQCAtMCwwICsxLDMxIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIE9iakMrKworIiBNYWludGFpbmVyOiAgIEFudGhvbnkgSG9kc2RvbiA8YWhvZHNkb25AZmFzdG1haWwuZm0+CisiIExhc3QgY2hhbmdlOiAgMjAwMyBBcHIgMjUKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgICBmaW5pc2gKK2VuZGlmCisKKyIgUmVhZCBpbiBDKysgYW5kIE9iakMgc3ludGF4IGZpbGVzCitpZiB2ZXJzaW9uIDwgNjAwCisgICBzbyA8c2ZpbGU+OnA6aC9jcHAudmltCisgICBzbyA8c2ZsaWU+OnA6aC9vYmpjLnZpbQorZWxzZQorICAgcnVudGltZSEgc3ludGF4L2NwcC52aW0KKyAgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKKyAgIHJ1bnRpbWUhIHN5bnRheC9vYmpjLnZpbQorZW5kaWYKKworIiBOb3RlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIGEgcmVnaW9uIGZvciBtZXRob2QgY2FsbHMgKCBbb2JqY19jbGFzcyBtZXRob2RdICkKKyIgYnkgd2F5IG9mIGNCcmFja2V0Lgorc3luIHJlZ2lvbiBvYmpDRnVuYyBzdGFydD0iXlxzKlstK10iICBlbmQ9IiQiICBjb250YWlucz1BTExCVVQsY0VyckluUGFyZW4sY0VyckluQnJhY2tldAorCitzeW4ga2V5d29yZCBvYmpDcHBOb25TdHJ1Y3R1cmUgICAgY2xhc3MgdGVtcGxhdGUgbmFtZXNwYWNlIHRyYW5zcGFyZW50IGNvbnRhaW5lZAorc3luIGtleXdvcmQgb2JqQ3BwTm9uU3RhdGVtZW50ICAgIG5ldyBkZWxldGUgZnJpZW5kIHVzaW5nIHRyYW5zcGFyZW50IGNvbnRhaW5lZAorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJvYmpjcHAiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9vY2FtbC52aW0gYi9ydW50aW1lL3N5bnRheC9vY2FtbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1MzRhNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L29jYW1sLnZpbQpAQCAtMCwwICsxLDMxNyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBPQ2FtbAorIiBGaWxlbmFtZXM6ICAgICoubWwgKi5tbGkgKi5tbGwgKi5tbHkKKyIgTWFpbnRhaW5lcnM6ICBNYXJrdXMgTW90dGwgICAgICA8bWFya3VzQG9lZmFpLmF0PgorIgkJS2FybC1IZWlueiBTeWxsYSAgPEthcmwtSGVpbnouU3lsbGFAZ21kLmRlPgorIgkJSXNzYWMgVHJvdHRzCSAgPDxpanRyb3R0c0B1Y2RhdmlzLmVkdT4KKyIgVVJMOgkJaHR0cDovL3d3dy5vZWZhaS5hdC9+bWFya3VzL3ZpbS9zeW50YXgvb2NhbWwudmltCisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAwNAorIgkJMjAwMiBPY3QgMjQgLSBTbWFsbCBmaXggZm9yICJtb2R1bGUgdHlwZSIgKE1NKQorIgkJMjAwMiBKdW4gMTYgLSBBZGRlZCAiJiYiLCAiPCIgYW5kICI+IiBhcyBvcGVyYXRvcnMgKE1NKQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgT0NhbWwgaXMgY2FzZSBzZW5zaXRpdmUuCitzeW4gY2FzZSBtYXRjaAorCisiIFNjcmlwdCBoZWFkZXJzIGhpZ2hsaWdodGVkIGxpa2UgY29tbWVudHMKK3N5biBtYXRjaCAgICBvY2FtbENvbW1lbnQgICAiXiMhLioiCisKKyIgU2NyaXB0aW5nIGRpcmVjdGl2ZXMKK3N5biBtYXRjaCAgICBvY2FtbFNjcmlwdCAiXiNcPFwocXVpdFx8bGFiZWxzXHx3YXJuaW5nc1x8ZGlyZWN0b3J5XHxjZFx8bG9hZFx8dXNlXHxpbnN0YWxsX3ByaW50ZXJcfHJlbW92ZV9wcmludGVyXHx0cmFjZVx8dW50cmFjZVx8dW50cmFjZV9hbGxcfHByaW50X2RlcHRoXHxwcmludF9sZW5ndGhcKVw+IgorCisiIGxvd2VyY2FzZSBpZGVudGlmaWVyIC0gdGhlIHN0YW5kYXJkIHdheSB0byBtYXRjaAorc3luIG1hdGNoICAgIG9jYW1sTENJZGVudGlmaWVyIC9cPFwoXGxcfF9cKVwoXHdcfCdcKSpcPi8KKworc3luIG1hdGNoICAgIG9jYW1sS2V5Q2hhciAgICAifCIKKworIiBFcnJvcnMKK3N5biBtYXRjaCAgICBvY2FtbEJyYWNlRXJyICAgIn0iCitzeW4gbWF0Y2ggICAgb2NhbWxCcmFja0VyciAgICJcXSIKK3N5biBtYXRjaCAgICBvY2FtbFBhcmVuRXJyICAgIikiCitzeW4gbWF0Y2ggICAgb2NhbWxBcnJFcnIgICAgICJ8XSIKKworc3luIG1hdGNoICAgIG9jYW1sQ29tbWVudEVyciAiXCopIgorCitzeW4gbWF0Y2ggICAgb2NhbWxDb3VudEVyciAgICJcPGRvd250b1w+Igorc3luIG1hdGNoICAgIG9jYW1sQ291bnRFcnIgICAiXDx0b1w+IgorCitpZiAhZXhpc3RzKCJvY2FtbF9yZXZpc2VkIikKKyAgc3luIG1hdGNoICAgIG9jYW1sRG9FcnIgICAgICAiXDxkb1w+IgorZW5kaWYKKworc3luIG1hdGNoICAgIG9jYW1sRG9uZUVyciAgICAiXDxkb25lXD4iCitzeW4gbWF0Y2ggICAgb2NhbWxUaGVuRXJyICAgICJcPHRoZW5cPiIKKworIiBFcnJvci1oaWdobGlnaHRpbmcgb2YgImVuZCIgd2l0aG91dCBzeW5jaHJvbml6YXRpb246CisiIGFzIGtleXdvcmQgb3IgYXMgZXJyb3IgKGRlZmF1bHQpCitpZiBleGlzdHMoIm9jYW1sX25vZW5kX2Vycm9yIikKKyAgc3luIG1hdGNoICAgIG9jYW1sS2V5d29yZCAgICAiXDxlbmRcPiIKK2Vsc2UKKyAgc3luIG1hdGNoICAgIG9jYW1sRW5kRXJyICAgICAiXDxlbmRcPiIKK2VuZGlmCisKKyIgU29tZSBjb252ZW5pZW50IGNsdXN0ZXJzCitzeW4gY2x1c3RlciAgb2NhbWxBbGxFcnJzIGNvbnRhaW5zPW9jYW1sQnJhY2VFcnIsb2NhbWxCcmFja0VycixvY2FtbFBhcmVuRXJyLG9jYW1sQ29tbWVudEVycixvY2FtbENvdW50RXJyLG9jYW1sRG9FcnIsb2NhbWxEb25lRXJyLG9jYW1sRW5kRXJyLG9jYW1sVGhlbkVycgorCitzeW4gY2x1c3RlciAgb2NhbWxBRU5vUGFyZW4gY29udGFpbnM9b2NhbWxCcmFjZUVycixvY2FtbEJyYWNrRXJyLG9jYW1sQ29tbWVudEVycixvY2FtbENvdW50RXJyLG9jYW1sRG9FcnIsb2NhbWxEb25lRXJyLG9jYW1sRW5kRXJyLG9jYW1sVGhlbkVycgorCitzeW4gY2x1c3RlciAgb2NhbWxDb250YWluZWQgY29udGFpbnM9b2NhbWxUb2RvLG9jYW1sUHJlRGVmLG9jYW1sTW9kUGFyYW0sb2NhbWxNb2RQYXJhbTEsb2NhbWxQcmVNUFJlc3RyLG9jYW1sTVBSZXN0cixvY2FtbE1QUmVzdHIxLG9jYW1sTVBSZXN0cjIsb2NhbWxNUFJlc3RyMyxvY2FtbE1vZFJIUyxvY2FtbEZ1bmNXaXRoLG9jYW1sRnVuY1N0cnVjdCxvY2FtbE1vZFR5cGVSZXN0cixvY2FtbE1vZFRSV2l0aCxvY2FtbFdpdGgsb2NhbWxXaXRoUmVzdCxvY2FtbE1vZFR5cGUsb2NhbWxGdWxsTW9kCisKKworIiBFbmNsb3NpbmcgZGVsaW1pdGVycworc3luIHJlZ2lvbiAgIG9jYW1sRW5jbCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW9jYW1sS2V5d29yZCBzdGFydD0iKCIgbWF0Y2hncm91cD1vY2FtbEtleXdvcmQgZW5kPSIpIiBjb250YWlucz1BTExCVVQsQG9jYW1sQ29udGFpbmVkLG9jYW1sUGFyZW5FcnIKK3N5biByZWdpb24gICBvY2FtbEVuY2wgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1vY2FtbEtleXdvcmQgc3RhcnQ9InsiIG1hdGNoZ3JvdXA9b2NhbWxLZXl3b3JkIGVuZD0ifSIgIGNvbnRhaW5zPUFMTEJVVCxAb2NhbWxDb250YWluZWQsb2NhbWxCcmFjZUVycgorc3luIHJlZ2lvbiAgIG9jYW1sRW5jbCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW9jYW1sS2V5d29yZCBzdGFydD0iXFsiIG1hdGNoZ3JvdXA9b2NhbWxLZXl3b3JkIGVuZD0iXF0iIGNvbnRhaW5zPUFMTEJVVCxAb2NhbWxDb250YWluZWQsb2NhbWxCcmFja0Vycgorc3luIHJlZ2lvbiAgIG9jYW1sRW5jbCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPW9jYW1sS2V5d29yZCBzdGFydD0iXFt8IiBtYXRjaGdyb3VwPW9jYW1sS2V5d29yZCBlbmQ9InxcXSIgY29udGFpbnM9QUxMQlVULEBvY2FtbENvbnRhaW5lZCxvY2FtbEFyckVycgorCisKKyIgQ29tbWVudHMKK3N5biByZWdpb24gICBvY2FtbENvbW1lbnQgc3RhcnQ9IihcKiIgZW5kPSJcKikiIGNvbnRhaW5zPW9jYW1sQ29tbWVudCxvY2FtbFRvZG8KK3N5biBrZXl3b3JkICBvY2FtbFRvZG8gY29udGFpbmVkIFRPRE8gRklYTUUgWFhYCisKKworIiBPYmplY3RzCitzeW4gcmVnaW9uICAgb2NhbWxFbmQgbWF0Y2hncm91cD1vY2FtbEtleXdvcmQgc3RhcnQ9Ilw8b2JqZWN0XD4iIG1hdGNoZ3JvdXA9b2NhbWxLZXl3b3JkIGVuZD0iXDxlbmRcPiIgY29udGFpbnM9QUxMQlVULEBvY2FtbENvbnRhaW5lZCxvY2FtbEVuZEVycgorCisKKyIgQmxvY2tzCitpZiAhZXhpc3RzKCJvY2FtbF9yZXZpc2VkIikKKyAgc3luIHJlZ2lvbiAgIG9jYW1sRW5kIG1hdGNoZ3JvdXA9b2NhbWxLZXl3b3JkIHN0YXJ0PSJcPGJlZ2luXD4iIG1hdGNoZ3JvdXA9b2NhbWxLZXl3b3JkIGVuZD0iXDxlbmRcPiIgY29udGFpbnM9QUxMQlVULEBvY2FtbENvbnRhaW5lZCxvY2FtbEVuZEVycgorZW5kaWYKKworCisiICJmb3IiCitzeW4gcmVnaW9uICAgb2NhbWxOb25lIG1hdGNoZ3JvdXA9b2NhbWxLZXl3b3JkIHN0YXJ0PSJcPGZvclw+IiBtYXRjaGdyb3VwPW9jYW1sS2V5d29yZCBlbmQ9Ilw8XCh0b1x8ZG93bnRvXClcPiIgY29udGFpbnM9QUxMQlVULEBvY2FtbENvbnRhaW5lZCxvY2FtbENvdW50RXJyCisKKworIiAiZG8iCitpZiAhZXhpc3RzKCJvY2FtbF9yZXZpc2VkIikKKyAgc3luIHJlZ2lvbiAgIG9jYW1sRG8gbWF0Y2hncm91cD1vY2FtbEtleXdvcmQgc3RhcnQ9Ilw8ZG9cPiIgbWF0Y2hncm91cD1vY2FtbEtleXdvcmQgZW5kPSJcPGRvbmVcPiIgY29udGFpbnM9QUxMQlVULEBvY2FtbENvbnRhaW5lZCxvY2FtbERvbmVFcnIKK2VuZGlmCisKKyIgImlmIgorc3luIHJlZ2lvbiAgIG9jYW1sTm9uZSBtYXRjaGdyb3VwPW9jYW1sS2V5d29yZCBzdGFydD0iXDxpZlw+IiBtYXRjaGdyb3VwPW9jYW1sS2V5d29yZCBlbmQ9Ilw8dGhlblw+IiBjb250YWlucz1BTExCVVQsQG9jYW1sQ29udGFpbmVkLG9jYW1sVGhlbkVycgorCisKKyIiIE1vZHVsZXMKKworIiAic3RydWN0Igorc3luIHJlZ2lvbiAgIG9jYW1sU3RydWN0IG1hdGNoZ3JvdXA9b2NhbWxNb2R1bGUgc3RhcnQ9Ilw8c3RydWN0XD4iIG1hdGNoZ3JvdXA9b2NhbWxNb2R1bGUgZW5kPSJcPGVuZFw+IiBjb250YWlucz1BTExCVVQsQG9jYW1sQ29udGFpbmVkLG9jYW1sRW5kRXJyCisKKyIgInNpZyIKK3N5biByZWdpb24gICBvY2FtbFNpZyBtYXRjaGdyb3VwPW9jYW1sTW9kdWxlIHN0YXJ0PSJcPHNpZ1w+IiBtYXRjaGdyb3VwPW9jYW1sTW9kdWxlIGVuZD0iXDxlbmRcPiIgY29udGFpbnM9QUxMQlVULEBvY2FtbENvbnRhaW5lZCxvY2FtbEVuZEVycixvY2FtbE1vZHVsZQorc3luIHJlZ2lvbiAgIG9jYW1sTW9kU3BlYyBtYXRjaGdyb3VwPW9jYW1sS2V5d29yZCBzdGFydD0iXDxtb2R1bGVcPiIgbWF0Y2hncm91cD1vY2FtbE1vZHVsZSBlbmQ9Ilw8XHVcKFx3XHwnXCkqXD4iIGNvbnRhaW5lZCBjb250YWlucz1Ab2NhbWxBbGxFcnJzLG9jYW1sQ29tbWVudCBza2lwd2hpdGUgc2tpcGVtcHR5IG5leHRncm91cD1vY2FtbE1vZFRSV2l0aCxvY2FtbE1QUmVzdHIKKworIiAib3BlbiIKK3N5biByZWdpb24gICBvY2FtbE5vbmUgbWF0Y2hncm91cD1vY2FtbEtleXdvcmQgc3RhcnQ9Ilw8b3Blblw+IiBtYXRjaGdyb3VwPW9jYW1sTW9kdWxlIGVuZD0iXDxcdVwoXHdcfCdcKSpcKFwuXHVcKFx3XHwnXCkqXCkqXD4iIGNvbnRhaW5zPUBvY2FtbEFsbEVycnMsb2NhbWxDb21tZW50CisKKyIgImluY2x1ZGUiCitzeW4gbWF0Y2ggICAgb2NhbWxLZXl3b3JkICJcPGluY2x1ZGVcPiIgY29udGFpbmVkIHNraXB3aGl0ZSBza2lwZW1wdHkgbmV4dGdyb3VwPW9jYW1sTW9kUGFyYW0sb2NhbWxGdWxsTW9kCisKKyIgIm1vZHVsZSIgLSBzb21ld2hhdCBjb21wbGljYXRlZCBzdHVmZiA7LSkKK3N5biByZWdpb24gICBvY2FtbE1vZHVsZSBtYXRjaGdyb3VwPW9jYW1sS2V5d29yZCBzdGFydD0iXDxtb2R1bGVcPiIgbWF0Y2hncm91cD1vY2FtbE1vZHVsZSBlbmQ9Ilw8XHVcKFx3XHwnXCkqXD4iIGNvbnRhaW5zPUBvY2FtbEFsbEVycnMsb2NhbWxDb21tZW50IHNraXB3aGl0ZSBza2lwZW1wdHkgbmV4dGdyb3VwPW9jYW1sUHJlRGVmCitzeW4gcmVnaW9uICAgb2NhbWxQcmVEZWYgc3RhcnQ9Ii4ibWU9ZS0xIG1hdGNoZ3JvdXA9b2NhbWxLZXl3b3JkIGVuZD0iXGxcfD0ibWU9ZS0xIGNvbnRhaW5lZCBjb250YWlucz1Ab2NhbWxBbGxFcnJzLG9jYW1sQ29tbWVudCxvY2FtbE1vZFBhcmFtLG9jYW1sTW9kVHlwZVJlc3RyLG9jYW1sTW9kVFJXaXRoIG5leHRncm91cD1vY2FtbE1vZFByZVJIUworc3luIHJlZ2lvbiAgIG9jYW1sTW9kUGFyYW0gc3RhcnQ9IihbXipdIiBlbmQ9IikiIGNvbnRhaW5lZCBjb250YWlucz1Ab2NhbWxBRU5vUGFyZW4sb2NhbWxNb2RQYXJhbTEKK3N5biBtYXRjaCAgICBvY2FtbE1vZFBhcmFtMSAiXDxcdVwoXHdcfCdcKSpcPiIgY29udGFpbmVkIHNraXB3aGl0ZSBza2lwZW1wdHkgbmV4dGdyb3VwPW9jYW1sUHJlTVBSZXN0cgorCitzeW4gcmVnaW9uICAgb2NhbWxQcmVNUFJlc3RyIHN0YXJ0PSIuIm1lPWUtMSBlbmQ9IikibWU9ZS0xIGNvbnRhaW5lZCBjb250YWlucz1Ab2NhbWxBbGxFcnJzLG9jYW1sQ29tbWVudCxvY2FtbE1QUmVzdHIsb2NhbWxNb2RUeXBlUmVzdHIKKworc3luIHJlZ2lvbiAgIG9jYW1sTVBSZXN0ciBzdGFydD0iOiIgZW5kPSIuIm1lPWUtMSBjb250YWluZWQgY29udGFpbnM9QG9jYW1sQ29tbWVudCBza2lwd2hpdGUgc2tpcGVtcHR5IG5leHRncm91cD1vY2FtbE1QUmVzdHIxLG9jYW1sTVBSZXN0cjIsb2NhbWxNUFJlc3RyMworc3luIHJlZ2lvbiAgIG9jYW1sTVBSZXN0cjEgbWF0Y2hncm91cD1vY2FtbE1vZHVsZSBzdGFydD0iXHNzaWdcc1w9IiBtYXRjaGdyb3VwPW9jYW1sTW9kdWxlIGVuZD0iXDxlbmRcPiIgY29udGFpbmVkIGNvbnRhaW5zPUFMTEJVVCxAb2NhbWxDb250YWluZWQsb2NhbWxFbmRFcnIsb2NhbWxNb2R1bGUKK3N5biByZWdpb24gICBvY2FtbE1QUmVzdHIyIHN0YXJ0PSJcc2Z1bmN0b3JcKFxzXHwoXClcPSJtZT1lLTEgbWF0Y2hncm91cD1vY2FtbEtleXdvcmQgZW5kPSItPiIgY29udGFpbmVkIGNvbnRhaW5zPUBvY2FtbEFsbEVycnMsb2NhbWxDb21tZW50LG9jYW1sTW9kUGFyYW0gc2tpcHdoaXRlIHNraXBlbXB0eSBuZXh0Z3JvdXA9b2NhbWxGdW5jV2l0aCxvY2FtbE1QUmVzdHIyCitzeW4gbWF0Y2ggICAgb2NhbWxNUFJlc3RyMyAiXHdcKFx3XHwnXCkqXChcLlx3XChcd1x8J1wpKlwpKiIgY29udGFpbmVkCitzeW4gbWF0Y2ggICAgb2NhbWxNb2RQcmVSSFMgIj0iIGNvbnRhaW5lZCBza2lwd2hpdGUgc2tpcGVtcHR5IG5leHRncm91cD1vY2FtbE1vZFBhcmFtLG9jYW1sRnVsbE1vZAorc3luIHJlZ2lvbiAgIG9jYW1sTW9kUkhTIHN0YXJ0PSIuIiBlbmQ9Ii5cd1x8KFteKl0ibWU9ZS0yIGNvbnRhaW5lZCBjb250YWlucz1vY2FtbENvbW1lbnQgc2tpcHdoaXRlIHNraXBlbXB0eSBuZXh0Z3JvdXA9b2NhbWxNb2RQYXJhbSxvY2FtbEZ1bGxNb2QKK3N5biBtYXRjaCAgICBvY2FtbEZ1bGxNb2QgIlw8XHVcKFx3XHwnXCkqXChcLlx1XChcd1x8J1wpKlwpKiIgY29udGFpbmVkIHNraXB3aGl0ZSBza2lwZW1wdHkgbmV4dGdyb3VwPW9jYW1sRnVuY1dpdGgKKworc3luIHJlZ2lvbiAgIG9jYW1sRnVuY1dpdGggc3RhcnQ9IihbXipdIm1lPWUtMSBlbmQ9IikiIGNvbnRhaW5lZCBjb250YWlucz1vY2FtbENvbW1lbnQsb2NhbWxXaXRoLG9jYW1sRnVuY1N0cnVjdCBza2lwd2hpdGUgc2tpcGVtcHR5IG5leHRncm91cD1vY2FtbEZ1bmNXaXRoCitzeW4gcmVnaW9uICAgb2NhbWxGdW5jU3RydWN0IG1hdGNoZ3JvdXA9b2NhbWxNb2R1bGUgc3RhcnQ9IlteYS16QS1aXXN0cnVjdFw+ImhzPXMrMSBtYXRjaGdyb3VwPW9jYW1sTW9kdWxlIGVuZD0iXDxlbmRcPiIgY29udGFpbnM9QUxMQlVULEBvY2FtbENvbnRhaW5lZCxvY2FtbEVuZEVycgorCitzeW4gbWF0Y2ggICAgb2NhbWxNb2RUeXBlUmVzdHIgIlw8XHdcKFx3XHwnXCkqXChcLlx3XChcd1x8J1wpKlwpKlw+IiBjb250YWluZWQKK3N5biByZWdpb24gICBvY2FtbE1vZFRSV2l0aCBzdGFydD0iOlxzKigiaHM9cysxIGVuZD0iKSIgY29udGFpbmVkIGNvbnRhaW5zPUBvY2FtbEFFTm9QYXJlbixvY2FtbFdpdGgKK3N5biBtYXRjaCAgICBvY2FtbFdpdGggIlw8XChcdVwoXHdcfCdcKSpcLlwpKlx3XChcd1x8J1wpKlw+IiBjb250YWluZWQgc2tpcHdoaXRlIHNraXBlbXB0eSBuZXh0Z3JvdXA9b2NhbWxXaXRoUmVzdAorc3luIHJlZ2lvbiAgIG9jYW1sV2l0aFJlc3Qgc3RhcnQ9IlteKV0iIGVuZD0iKSJtZT1lLTEgY29udGFpbmVkIGNvbnRhaW5zPUFMTEJVVCxAb2NhbWxDb250YWluZWQKKworIiAibW9kdWxlIHR5cGUiCitzeW4gcmVnaW9uICAgb2NhbWxLZXl3b3JkIHN0YXJ0PSJcPG1vZHVsZVw+XHMqXDx0eXBlXD4iIG1hdGNoZ3JvdXA9b2NhbWxNb2R1bGUgZW5kPSJcPFx3XChcd1x8J1wpKlw+IiBjb250YWlucz1vY2FtbENvbW1lbnQgc2tpcHdoaXRlIHNraXBlbXB0eSBuZXh0Z3JvdXA9b2NhbWxNVERlZgorc3luIG1hdGNoICAgIG9jYW1sTVREZWYgIj1ccypcd1woXHdcfCdcKSpcPiJocz1zKzEsbWU9cworCitzeW4ga2V5d29yZCAgb2NhbWxLZXl3b3JkICBhbmQgYXMgYXNzZXJ0IGNsYXNzCitzeW4ga2V5d29yZCAgb2NhbWxLZXl3b3JkICBjb25zdHJhaW50IGVsc2UKK3N5biBrZXl3b3JkICBvY2FtbEtleXdvcmQgIGV4Y2VwdGlvbiBleHRlcm5hbCBmdW4KKworc3luIGtleXdvcmQgIG9jYW1sS2V5d29yZCAgaW4gaW5oZXJpdCBpbml0aWFsaXplcgorc3luIGtleXdvcmQgIG9jYW1sS2V5d29yZCAgbGFuZCBsYXp5IGxldCBtYXRjaAorc3luIGtleXdvcmQgIG9jYW1sS2V5d29yZCAgbWV0aG9kIG11dGFibGUgbmV3IG9mCitzeW4ga2V5d29yZCAgb2NhbWxLZXl3b3JkICBwYXJzZXIgcHJpdmF0ZSByYWlzZSByZWMKK3N5biBrZXl3b3JkICBvY2FtbEtleXdvcmQgIHRyeSB0eXBlCitzeW4ga2V5d29yZCAgb2NhbWxLZXl3b3JkICB2YWwgdmlydHVhbCB3aGVuIHdoaWxlIHdpdGgKKworaWYgZXhpc3RzKCJvY2FtbF9yZXZpc2VkIikKKyAgc3luIGtleXdvcmQgIG9jYW1sS2V5d29yZCAgZG8gdmFsdWUKKyAgc3luIGtleXdvcmQgIG9jYW1sQm9vbGVhbiAgVHJ1ZSBGYWxzZQorZWxzZQorICBzeW4ga2V5d29yZCAgb2NhbWxLZXl3b3JkICBmdW5jdGlvbgorICBzeW4ga2V5d29yZCAgb2NhbWxCb29sZWFuICB0cnVlIGZhbHNlCisgIHN5biBtYXRjaCAgICBvY2FtbEtleUNoYXIgICIhIgorZW5kaWYKKworc3luIGtleXdvcmQgIG9jYW1sVHlwZSAgICAgYXJyYXkgYm9vbCBjaGFyIGV4biBmbG9hdCBmb3JtYXQgaW50CitzeW4ga2V5d29yZCAgb2NhbWxUeXBlICAgICBsaXN0IG9wdGlvbiBzdHJpbmcgdW5pdAorCitzeW4ga2V5d29yZCAgb2NhbWxPcGVyYXRvciBhc3IgbG9yIGxzbCBsc3IgbHhvciBtb2Qgbm90CisKK3N5biBtYXRjaCAgICBvY2FtbENvbnN0cnVjdG9yICAiKFxzKikiCitzeW4gbWF0Y2ggICAgb2NhbWxDb25zdHJ1Y3RvciAgIlxbXHMqXF0iCitzeW4gbWF0Y2ggICAgb2NhbWxDb25zdHJ1Y3RvciAgIlxbfFxzKj58XSIKK3N5biBtYXRjaCAgICBvY2FtbENvbnN0cnVjdG9yICAiXFs8XHMqPlxdIgorc3luIG1hdGNoICAgIG9jYW1sQ29uc3RydWN0b3IgICJcdVwoXHdcfCdcKSpcPiIKKworIiBQb2x5bW9ycGhpYyB2YXJpYW50cworc3luIG1hdGNoICAgIG9jYW1sQ29uc3RydWN0b3IgICJgXHdcKFx3XHwnXCkqXD4iCisKKyIgTW9kdWxlIHByZWZpeAorc3luIG1hdGNoICAgIG9jYW1sTW9kUGF0aCAgICAgICJcdVwoXHdcfCdcKSpcLiJoZT1lLTEKKworc3luIG1hdGNoICAgIG9jYW1sQ2hhcmFjdGVyICAgICInXFxcZFxkXGQnXHwnXFxbXCdudGJyXSdcfCcuJyIKK3N5biBtYXRjaCAgICBvY2FtbENoYXJFcnIgICAgICAiJ1xcXGRcZCdcfCdcXFxkJyIKK3N5biBtYXRjaCAgICBvY2FtbENoYXJFcnIgICAgICAiJ1xcW15cJ250YnJdJyIKK3N5biByZWdpb24gICBvY2FtbFN0cmluZyAgICAgICBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCisKK3N5biBtYXRjaCAgICBvY2FtbEZ1bkRlZiAgICAgICAiLT4iCitzeW4gbWF0Y2ggICAgb2NhbWxSZWZBc3NpZ24gICAgIjo9Igorc3luIG1hdGNoICAgIG9jYW1sVG9wU3RvcCAgICAgICI7OyIKK3N5biBtYXRjaCAgICBvY2FtbE9wZXJhdG9yICAgICAiXF4iCitzeW4gbWF0Y2ggICAgb2NhbWxPcGVyYXRvciAgICAgIjo6IgorCitzeW4gbWF0Y2ggICAgb2NhbWxPcGVyYXRvciAgICAgIiYmIgorc3luIG1hdGNoICAgIG9jYW1sT3BlcmF0b3IgICAgICI8Igorc3luIG1hdGNoICAgIG9jYW1sT3BlcmF0b3IgICAgICI+Igorc3luIG1hdGNoICAgIG9jYW1sQW55VmFyICAgICAgICJcPF9cPiIKK3N5biBtYXRjaCAgICBvY2FtbEtleUNoYXIgICAgICAifFteXF1dIm1lPWUtMQorc3luIG1hdGNoICAgIG9jYW1sS2V5Q2hhciAgICAgICI7Igorc3luIG1hdGNoICAgIG9jYW1sS2V5Q2hhciAgICAgICJcfiIKK3N5biBtYXRjaCAgICBvY2FtbEtleUNoYXIgICAgICAiPyIKK3N5biBtYXRjaCAgICBvY2FtbEtleUNoYXIgICAgICAiXCoiCitzeW4gbWF0Y2ggICAgb2NhbWxLZXlDaGFyICAgICAgIj0iCisKK2lmIGV4aXN0cygib2NhbWxfcmV2aXNlZCIpCisgIHN5biBtYXRjaCAgICBvY2FtbEVycgkJIjwtIgorZWxzZQorICBzeW4gbWF0Y2ggICAgb2NhbWxPcGVyYXRvcgkiPC0iCitlbmRpZgorCitzeW4gbWF0Y2ggICAgb2NhbWxOdW1iZXIJIlw8LVw9XGRcK1w+Igorc3luIG1hdGNoICAgIG9jYW1sTnVtYmVyCSJcPC1cPTBbeHxYXVx4XCtcPiIKK3N5biBtYXRjaCAgICBvY2FtbE51bWJlcgkiXDwtXD0wW298T11cb1wrXD4iCitzeW4gbWF0Y2ggICAgb2NhbWxOdW1iZXIJIlw8LVw9MFtifEJdWzAxXVwrXD4iCitzeW4gbWF0Y2ggICAgb2NhbWxGbG9hdAkJIlw8LVw9XGRcK1wuXGQqXChbZUVdWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKworIiBMYWJlbHMKK3N5biBtYXRjaCAgICBvY2FtbExhYmVsCQkiXH5cKFxsXHxfXClcKFx3XHwnXCkqImxjPTEKK3N5biBtYXRjaCAgICBvY2FtbExhYmVsCQkiP1woXGxcfF9cKVwoXHdcfCdcKSoibGM9MQorc3luIHJlZ2lvbiAgIG9jYW1sTGFiZWwgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1vY2FtbExhYmVsIHN0YXJ0PSI/KFwoXGxcfF9cKVwoXHdcfCdcKSoibGM9MiBlbmQ9IikibWU9ZS0xIGNvbnRhaW5zPUFMTEJVVCxAb2NhbWxDb250YWluZWQsb2NhbWxQYXJlbkVycgorCisKKyIgU3luY2hyb25pemF0aW9uCitzeW4gc3luYyBtaW5saW5lcz01MAorc3luIHN5bmMgbWF4bGluZXM9NTAwCisKK2lmICFleGlzdHMoIm9jYW1sX3JldmlzZWQiKQorICBzeW4gc3luYyBtYXRjaCBvY2FtbERvU3luYyAgICAgIGdyb3VwaGVyZSAgb2NhbWxEbyAgICAgICJcPGRvXD4iCisgIHN5biBzeW5jIG1hdGNoIG9jYW1sRG9TeW5jICAgICAgZ3JvdXB0aGVyZSBvY2FtbERvICAgICAgIlw8ZG9uZVw+IgorZW5kaWYKKworaWYgZXhpc3RzKCJvY2FtbF9yZXZpc2VkIikKKyAgc3luIHN5bmMgbWF0Y2ggb2NhbWxFbmRTeW5jICAgICBncm91cGhlcmUgIG9jYW1sRW5kICAgICAiXDxcKG9iamVjdFwpXD4iCitlbHNlCisgIHN5biBzeW5jIG1hdGNoIG9jYW1sRW5kU3luYyAgICAgZ3JvdXBoZXJlICBvY2FtbEVuZCAgICAgIlw8XChiZWdpblx8b2JqZWN0XClcPiIKK2VuZGlmCisKK3N5biBzeW5jIG1hdGNoIG9jYW1sRW5kU3luYyAgICAgZ3JvdXB0aGVyZSBvY2FtbEVuZCAgICAgIlw8ZW5kXD4iCitzeW4gc3luYyBtYXRjaCBvY2FtbFN0cnVjdFN5bmMgIGdyb3VwaGVyZSAgb2NhbWxTdHJ1Y3QgICJcPHN0cnVjdFw+Igorc3luIHN5bmMgbWF0Y2ggb2NhbWxTdHJ1Y3RTeW5jICBncm91cHRoZXJlIG9jYW1sU3RydWN0ICAiXDxlbmRcPiIKK3N5biBzeW5jIG1hdGNoIG9jYW1sU2lnU3luYyAgICAgZ3JvdXBoZXJlICBvY2FtbFNpZyAgICAgIlw8c2lnXD4iCitzeW4gc3luYyBtYXRjaCBvY2FtbFNpZ1N5bmMgICAgIGdyb3VwdGhlcmUgb2NhbWxTaWcgICAgICJcPGVuZFw+IgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9vY2FtbF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9vY2FtbF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBvY2FtbEJyYWNlRXJyCSAgIEVycm9yCisgIEhpTGluayBvY2FtbEJyYWNrRXJyCSAgIEVycm9yCisgIEhpTGluayBvY2FtbFBhcmVuRXJyCSAgIEVycm9yCisgIEhpTGluayBvY2FtbEFyckVycgkgICBFcnJvcgorCisgIEhpTGluayBvY2FtbENvbW1lbnRFcnIgICBFcnJvcgorCisgIEhpTGluayBvY2FtbENvdW50RXJyCSAgIEVycm9yCisgIEhpTGluayBvY2FtbERvRXJyCSAgIEVycm9yCisgIEhpTGluayBvY2FtbERvbmVFcnIJICAgRXJyb3IKKyAgSGlMaW5rIG9jYW1sRW5kRXJyCSAgIEVycm9yCisgIEhpTGluayBvY2FtbFRoZW5FcnIJICAgRXJyb3IKKworICBIaUxpbmsgb2NhbWxDaGFyRXJyCSAgIEVycm9yCisKKyAgSGlMaW5rIG9jYW1sRXJyCSAgIEVycm9yCisKKyAgSGlMaW5rIG9jYW1sQ29tbWVudAkgICBDb21tZW50CisKKyAgSGlMaW5rIG9jYW1sTW9kUGF0aAkgICBJbmNsdWRlCisgIEhpTGluayBvY2FtbE1vZHVsZQkgICBJbmNsdWRlCisgIEhpTGluayBvY2FtbE1vZFBhcmFtMSAgICBJbmNsdWRlCisgIEhpTGluayBvY2FtbE1vZFR5cGUJICAgSW5jbHVkZQorICBIaUxpbmsgb2NhbWxNUFJlc3RyMwkgICBJbmNsdWRlCisgIEhpTGluayBvY2FtbEZ1bGxNb2QJICAgSW5jbHVkZQorICBIaUxpbmsgb2NhbWxNb2RUeXBlUmVzdHIgSW5jbHVkZQorICBIaUxpbmsgb2NhbWxXaXRoCSAgIEluY2x1ZGUKKyAgSGlMaW5rIG9jYW1sTVREZWYJICAgSW5jbHVkZQorCisgIEhpTGluayBvY2FtbFNjcmlwdAkgICBJbmNsdWRlCisKKyAgSGlMaW5rIG9jYW1sQ29uc3RydWN0b3IgIENvbnN0YW50CisKKyAgSGlMaW5rIG9jYW1sTW9kUHJlUkhTICAgIEtleXdvcmQKKyAgSGlMaW5rIG9jYW1sTVBSZXN0cjIJICAgS2V5d29yZAorICBIaUxpbmsgb2NhbWxLZXl3b3JkCSAgIEtleXdvcmQKKyAgSGlMaW5rIG9jYW1sRnVuRGVmCSAgIEtleXdvcmQKKyAgSGlMaW5rIG9jYW1sUmVmQXNzaWduICAgIEtleXdvcmQKKyAgSGlMaW5rIG9jYW1sS2V5Q2hhcgkgICBLZXl3b3JkCisgIEhpTGluayBvY2FtbEFueVZhcgkgICBLZXl3b3JkCisgIEhpTGluayBvY2FtbFRvcFN0b3AJICAgS2V5d29yZAorICBIaUxpbmsgb2NhbWxPcGVyYXRvcgkgICBLZXl3b3JkCisKKyAgSGlMaW5rIG9jYW1sQm9vbGVhbgkgICBCb29sZWFuCisgIEhpTGluayBvY2FtbENoYXJhY3RlciAgICBDaGFyYWN0ZXIKKyAgSGlMaW5rIG9jYW1sTnVtYmVyCSAgIE51bWJlcgorICBIaUxpbmsgb2NhbWxGbG9hdAkgICBGbG9hdAorICBIaUxpbmsgb2NhbWxTdHJpbmcJICAgU3RyaW5nCisKKyAgSGlMaW5rIG9jYW1sTGFiZWwJICAgSWRlbnRpZmllcgorCisgIEhpTGluayBvY2FtbFR5cGUJICAgVHlwZQorCisgIEhpTGluayBvY2FtbFRvZG8JICAgVG9kbworCisgIEhpTGluayBvY2FtbEVuY2wJICAgS2V5d29yZAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJvY2FtbCIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L29jY2FtLnZpbSBiL3J1bnRpbWUvc3ludGF4L29jY2FtLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzg0YmYwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvb2NjYW0udmltCkBAIC0wLDAgKzEsMTI2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJb2NjYW0KKyIgQ29weXJpZ2h0OglGcmVkIEJhcm5lcyA8ZnJtYjJAa2VudC5hYy51az4sIE1hcmlvIFNjaHdlaWdsZXIgPG1zNDRAa2VudC5hYy51az4KKyIgTWFpbnRhaW5lcjoJTWFyaW8gU2Nod2VpZ2xlciA8bXM0NEBrZW50LmFjLnVrPgorIiBMYXN0IENoYW5nZToJMjQgTWF5IDIwMDMKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyJ7e3sgIFNldHRpbmdzCisiIFNldCBzaGlmdCB3aWR0aCBmb3IgaW5kZW50CitzZXRsb2NhbCBzaGlmdHdpZHRoPTIKKyIgU2V0IHRoZSB0YWIga2V5IHNpemUgdG8gdHdvIHNwYWNlcworc2V0bG9jYWwgc29mdHRhYnN0b3A9MgorIiBMZXQgdGFiIGtleXMgYWx3YXlzIGJlIGV4cGFuZGVkIHRvIHNwYWNlcworc2V0bG9jYWwgZXhwYW5kdGFiCisKKyIgRG90cyBhcmUgdmFsaWQgaW4gb2NjYW0gaWRlbnRpZmllcnMKK3NldGxvY2FsIGlza2V5d29yZCs9LgorIn19fQorCitzeW4gY2FzZSBtYXRjaAorCitzeW4ga2V5d29yZCBvY2NhbVR5cGUJCUJZVEUgQk9PTCBJTlQgSU5UMTYgSU5UMzIgSU5UNjQgUkVBTDMyIFJFQUw2NCBBTlkKK3N5biBrZXl3b3JkIG9jY2FtVHlwZQkJQ0hBTiBEQVRBIE9GIFRZUEUgVElNRVIgSU5JVElBTCBWQUwgUE9SVCBNT0JJTEUgUExBQ0VECitzeW4ga2V5d29yZCBvY2NhbVR5cGUJCVBST0NFU1NPUiBQQUNLRUQgUkVDT1JEIFBST1RPQ09MIFNIQVJFRCBST1VORCBUUlVOQworCitzeW4ga2V5d29yZCBvY2NhbVN0cnVjdHVyZQlTRVEgUEFSIElGIEFMVCBQUkkgRk9SS0lORyBQTEFDRSBBVAorCitzeW4ga2V5d29yZCBvY2NhbUtleXdvcmQJUFJPQyBJUyBUUlVFIEZBTFNFIFNJWkUgUkVDVVJTSVZFIFJFQworc3luIGtleXdvcmQgb2NjYW1LZXl3b3JkCVJFVFlQRVMgUkVTSEFQRVMgU1RFUCBGUk9NIEZPUiBSRVNDSEVEVUxFIFNUT1AgU0tJUCBGT1JLCitzeW4ga2V5d29yZCBvY2NhbUtleXdvcmQJRlVOQ1RJT04gVkFMT0YgUkVTVUxUIEVMU0UgQ0xPTkUgQ0xBSU0KK3N5biBrZXl3b3JkIG9jY2FtQm9vbGVhbglUUlVFIEZBTFNFCitzeW4ga2V5d29yZCBvY2NhbVJlcGVhdAkJV0hJTEUKK3N5biBrZXl3b3JkIG9jY2FtQ29uZGl0aW9uYWwJQ0FTRQorc3luIGtleXdvcmQgb2NjYW1Db25zdGFudAlNT1NUTkVHIE1PU1RQT1MKKworc3luIG1hdGNoIG9jY2FtQnJhY2tldHMJCS9cW1x8XF0vCitzeW4gbWF0Y2ggb2NjYW1QYXJhbnRoZXNlcwkvKFx8KS8KKworc3luIGtleXdvcmQgb2NjYW1PcGVyYXRvcglBRlRFUiBUSU1FUyBNSU5VUyBQTFVTIElOSVRJQUwgUkVNIEFORCBPUiBYT1IgTk9UCitzeW4ga2V5d29yZCBvY2NhbU9wZXJhdG9yCUJJVEFORCBCSVRPUiBCSVROT1QgQllURVNJTiBPRkZTRVRPRgorCitzeW4gbWF0Y2ggb2NjYW1PcGVyYXRvcgkJLzo6XHw6PVx8P1x8IS8KK3N5biBtYXRjaCBvY2NhbU9wZXJhdG9yCQkvPFx8Plx8K1x8LVx8XCpcfFwvXHxcXFx8PVx8XH4vCitzeW4gbWF0Y2ggb2NjYW1PcGVyYXRvcgkJL0BcfFwkXCRcfCVcfCYmXHw8Jlx8Jj5cfDxcXVx8XFs+XHxcXi8KKworc3luIG1hdGNoIG9jY2FtU3BlY2lhbENoYXIJL1xNKipcfConXHwqIlx8KiNcKFxbMC05QS1GXF1cK1wpLyBjb250YWluZWQKK3N5biBtYXRjaCBvY2NhbUNoYXIJCS9cTVxMXD0nXFteKlxdJy8KK3N5biBtYXRjaCBvY2NhbUNoYXIJCS9MJ1teJ10qJy8gY29udGFpbnM9b2NjYW1TcGVjaWFsQ2hhcgorCitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCBvY2NhbVRvZG8JCS9cPHRvZG9cPjpcPS8gY29udGFpbmVkCitzeW4gbWF0Y2ggb2NjYW1Ob3RlCQkvXDxub3RlXD46XD0vIGNvbnRhaW5lZAorc3luIGNhc2UgbWF0Y2gKK3N5biBrZXl3b3JkIG9jY2FtTm90ZQkJTk9UIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggb2NjYW1Db21tZW50CQkvLS0uKi8gY29udGFpbnM9b2NjYW1Db21tZW50VGl0bGUsb2NjYW1Ub2RvLG9jY2FtTm90ZQorc3luIG1hdGNoIG9jY2FtQ29tbWVudFRpdGxlCS8tLVxzKlx1XGEqXChcc1wrXHVcYSpcKSo6L2hzPXMrMiBjb250YWluZWQgY29udGFpbnM9b2NjYW1Ub2RvLG9jY2FtTm90ZQorc3luIG1hdGNoIG9jY2FtQ29tbWVudFRpdGxlCS8tLVxzKktST0MtTElCUkFSWVwoXC5zb1x8XC5hXClcPVxzKiQvaHM9cysyIGNvbnRhaW5lZAorc3luIG1hdGNoIG9jY2FtQ29tbWVudFRpdGxlCS8tLVxzKlwoS1JPQy1PUFRJT05TOlx8UlVOLVBBUkFNRVRFUlM6XCkvaHM9cysyIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggb2NjYW1JZGVudGlmaWVyCS9cPFtBLVouXVtBLVouMC05XSpcPi8KK3N5biBtYXRjaCBvY2NhbUZ1bmN0aW9uCQkvXDxbQS1aYS16Ll1bQS1aYS16MC05Ll0qXD4vIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggb2NjYW1QUElkZW50aWZpZXIJLyMjLlx7LX1cPi8KKworc3luIHJlZ2lvbiBvY2NhbVN0cmluZwkJc3RhcnQ9LyIvIHNraXA9L1xNKiIvIGVuZD0vIi8gY29udGFpbnM9b2NjYW1TcGVjaWFsQ2hhcgorc3luIHJlZ2lvbiBvY2NhbUNoYXJTdHJpbmcJc3RhcnQ9LycvIGVuZD0vJy8gY29udGFpbnM9b2NjYW1TcGVjaWFsQ2hhcgorCitzeW4gbWF0Y2ggb2NjYW1OdW1iZXIJCS9cPFxkXCtcKFwuXGRcK1woRVwoK1x8LVwpXGRcK1wpXD1cKVw9Lworc3luIG1hdGNoIG9jY2FtTnVtYmVyCQkvLVxkXCtcKFwuXGRcK1woRVwoK1x8LVwpXGRcK1wpXD1cKVw9Lworc3luIG1hdGNoIG9jY2FtTnVtYmVyCQkvI1woXGRcfFtBLUZdXClcKy8KK3N5biBtYXRjaCBvY2NhbU51bWJlcgkJLy0jXChcZFx8W0EtRl1cKVwrLworCitzeW4ga2V5d29yZCBvY2NhbUNEU3RyaW5nCVNIQVJFRCBFWFRFUk5BTCBERUZJTkVEIE5PQUxJQVMgTk9VU0FHRSBOT1QgY29udGFpbmVkCitzeW4ga2V5d29yZCBvY2NhbUNEU3RyaW5nCUZJTEUgTElORSBQUk9DRVNTLlBSSU9SSVRZIE9DQ0FNMi41IGNvbnRhaW5lZAorc3luIGtleXdvcmQgb2NjYW1DRFN0cmluZwlVU0VSLkRFRklORUQuT1BFUkFUT1JTIElOSVRJQUwuREVDTCBNT0JJTEVTIGNvbnRhaW5lZAorc3luIGtleXdvcmQgb2NjYW1DRFN0cmluZwlCTE9DS0lORy5TWVNDQUxMUyBWRVJTSU9OIE5FRUQuUVVBRC5BTElHTk1FTlQgY29udGFpbmVkCitzeW4ga2V5d29yZCBvY2NhbUNEU3RyaW5nCVRBUkdFVC5DQU5PTklDQUwgVEFSR0VULkNQVSBUQVJHRVQuT1MgVEFSR0VULlZFTkRPUiBjb250YWluZWQKK3N5biBrZXl3b3JkIG9jY2FtQ0RTdHJpbmcJVFJVRSBGQUxTRSBBTkQgT1IgY29udGFpbmVkCitzeW4gbWF0Y2ggb2NjYW1DRFN0cmluZwkJLzxcfD5cfD1cfChcfCkvIGNvbnRhaW5lZAorCitzeW4gcmVnaW9uIG9jY2FtQ0RpcmVjdGl2ZQlzdGFydD0vI1woVVNFXHxJTkNMVURFXHxQUkFHTUFcfERFRklORVx8VU5ERUZJTkVcfFVOREVGXHxJRlx8RUxJRlx8RUxTRVx8RU5ESUZcfFdBUk5JTkdcfEVSUk9SXHxSRUxBWFwpXD4vIGVuZD0vJC8gY29udGFpbnM9b2NjYW1TdHJpbmcsb2NjYW1Db21tZW50LG9jY2FtQ0RTdHJpbmcKKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX29jY2FtX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX29jY2FtX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIG9jY2FtVHlwZSBUeXBlCisgIEhpTGluayBvY2NhbUtleXdvcmQgS2V5d29yZAorICBIaUxpbmsgb2NjYW1Db21tZW50IENvbW1lbnQKKyAgSGlMaW5rIG9jY2FtQ29tbWVudFRpdGxlIFByZVByb2MKKyAgSGlMaW5rIG9jY2FtVG9kbyBUb2RvCisgIEhpTGluayBvY2NhbU5vdGUgVG9kbworICBIaUxpbmsgb2NjYW1TdHJpbmcgU3RyaW5nCisgIEhpTGluayBvY2NhbUNoYXJTdHJpbmcgU3RyaW5nCisgIEhpTGluayBvY2NhbU51bWJlciBOdW1iZXIKKyAgSGlMaW5rIG9jY2FtQ0RpcmVjdGl2ZSBQcmVQcm9jCisgIEhpTGluayBvY2NhbUNEU3RyaW5nIFN0cmluZworICBIaUxpbmsgb2NjYW1QUElkZW50aWZpZXIgUHJlUHJvYworICBIaUxpbmsgb2NjYW1Cb29sZWFuIEJvb2xlYW4KKyAgSGlMaW5rIG9jY2FtU3BlY2lhbENoYXIgU3BlY2lhbENoYXIKKyAgSGlMaW5rIG9jY2FtQ2hhciBDaGFyYWN0ZXIKKyAgSGlMaW5rIG9jY2FtU3RydWN0dXJlIFN0cnVjdHVyZQorICBIaUxpbmsgb2NjYW1JZGVudGlmaWVyIElkZW50aWZpZXIKKyAgSGlMaW5rIG9jY2FtQ29uc3RhbnQgQ29uc3RhbnQKKyAgSGlMaW5rIG9jY2FtT3BlcmF0b3IgT3BlcmF0b3IKKyAgSGlMaW5rIG9jY2FtRnVuY3Rpb24gSWdub3JlCisgIEhpTGluayBvY2NhbVJlcGVhdCBSZXBlYXQKKyAgSGlMaW5rIG9jY2FtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwKKyAgSGlMaW5rIG9jY2FtQnJhY2tldHMgVHlwZQorICBIaUxpbmsgb2NjYW1QYXJhbnRoZXNlcyBEZWxpbWl0ZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAib2NjYW0iCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L29tbmltYXJrLnZpbSBiL3J1bnRpbWUvc3ludGF4L29tbmltYXJrLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OThiM2MwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvb21uaW1hcmsudmltCkBAIC0wLDAgKzEsMTIzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJT21uaW1hcmsKKyIgTWFpbnRhaW5lcjoJUGF1bCBUZXJyYXkgPG1haWx0bzp0ZXJyYXlANGRjb25jZXB0LmZyPgorIiBMYXN0IENoYW5nZToJMTEgT2N0IDIwMDAKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNldCBpc2tleXdvcmQ9QCw0OC01NyxfLDEyOC0xNjcsMjI0LTIzNSwtCitlbHNlCisgIHNldGxvY2FsIGlza2V5d29yZD1ALDQ4LTU3LF8sMTI4LTE2NywyMjQtMjM1LC0KK2VuZGlmCisKK3N5biBrZXl3b3JkIG9tbmltYXJrS2V5d29yZHMJQUNUSVZBVEUgQUdBSU4KK3N5biBrZXl3b3JkIG9tbmltYXJrS2V5d29yZHMJQ0FUQ0ggQ0xFQVIgQ0xPU0UgQ09QWSBDT1BZLUNMRUFSIENST1NTLVRSQU5TTEFURQorc3luIGtleXdvcmQgb21uaW1hcmtLZXl3b3JkcwlERUFDVElWQVRFIERFQ0xBUkUgREVDUkVNRU5UIERFRklORSBESVNDQVJEIERJVklERSBETyBET0NVTUVOVC1FTkQgRE9DVU1FTlQtU1RBUlQgRE9ORSBEVEQtU1RBUlQKK3N5biBrZXl3b3JkIG9tbmltYXJrS2V5d29yZHMJRUxFTUVOVCBFTFNFIEVTQ0FQRSBFWElUCitzeW4ga2V5d29yZCBvbW5pbWFya0tleXdvcmRzCUZBSUwgRklORCBGSU5ELUVORCBGSU5ELVNUQVJUIEZPUk1BVAorc3luIGtleXdvcmQgb21uaW1hcmtLZXl3b3JkcwlHUk9VUAorc3luIGtleXdvcmQgb21uaW1hcmtLZXl3b3JkcwlIQUxUIEhBTFQtRVZFUllUSElORworc3luIGtleXdvcmQgb21uaW1hcmtLZXl3b3JkcwlJR05PUkUgSU1QTElFRCBJTkNMVURFIElOQ0xVREUtRU5EIElOQ0xVREUtU1RBUlQgSU5DUkVNRU5UIElOUFVUCitzeW4ga2V5d29yZCBvbW5pbWFya0tleXdvcmRzCUpPSU4KK3N5biBrZXl3b3JkIG9tbmltYXJrS2V5d29yZHMJTElORS1FTkQgTElORS1TVEFSVCBMT0cgTE9PS0FIRUFECitzeW4ga2V5d29yZCBvbW5pbWFya0tleXdvcmRzCU1BQ1JPCitzeW4ga2V5d29yZCBvbW5pbWFya0tleXdvcmRzCU1BQ1JPLUVORCBNQVJLRUQtU0VDVElPTiBNQVJLVVAtQ09NTUVOVCBNQVJLVVAtRVJST1IgTUFSS1VQLVBBUlNFUiBNQVNLIE1BVENIIE1JTlVTIE1PRFVMTworc3luIGtleXdvcmQgb21uaW1hcmtLZXl3b3JkcwlORVcgTkVXTElORSBORVhUCitzeW4ga2V5d29yZCBvbW5pbWFya0tleXdvcmRzCU9QRU4gT1VUUFVUIE9VVFBVVC1UTyBPVkVSCitzeW4ga2V5d29yZCBvbW5pbWFya0tleXdvcmRzCVBST0NFU1MgUFJPQ0VTUy1FTkQgUFJPQ0VTUy1TVEFSVCBQUk9DRVNTSU5HLUlOU1RSVUNUSU9OIFBST0xPRy1FTkQgUFJPTE9HLUlOLUVSUk9SIFBVVAorc3luIGtleXdvcmQgb21uaW1hcmtLZXl3b3JkcwlSRU1PVkUgUkVPUEVOIFJFUEVBVCBSRVNFVCBSRVRIUk9XIFJFVFVSTgorc3luIGtleXdvcmQgb21uaW1hcmtLZXl3b3JkcwlXSEVOIFdISVRFLVNQQUNFCitzeW4ga2V5d29yZCBvbW5pbWFya0tleXdvcmRzCVNBVkUgU0FWRS1DTEVBUiBTQ0FOIFNFTEVDVCBTRVQgU0dNTCBTR01MLUNPTU1FTlQgU0dNTC1ERUNMQVJBVElPTi1FTkQgU0dNTC1EVEQgU0dNTC1EVERTIFNHTUwtRVJST1IgU0dNTC1JTiBTR01MLU9VVCBTR01MLVBBUlNFIFNHTUwtUEFSU0VSIFNISUZUIFNVQk1JVCBTVUNDRUVEIFNVUFBSRVNTCitzeW4ga2V5d29yZCBvbW5pbWFya0tleXdvcmRzCVNZU1RFTS1DQUxMCitzeW4ga2V5d29yZCBvbW5pbWFya0tleXdvcmRzCVRFU1QtU1lTVEVNIFRIUk9XIFRPIFRSQU5TTEFURQorc3luIGtleXdvcmQgb21uaW1hcmtLZXl3b3JkcwlVQyBVTCBVTkxFU1MgVVAtVFJBTlNMQVRFCitzeW4ga2V5d29yZCBvbW5pbWFya0tleXdvcmRzCVhNTC1QQVJTRQorCitzeW4ga2V5d29yZCBvbW5pbWFya0NvbW1hbmRzCUFDVElWRSBBRlRFUiBBTkNFU1RPUiBBTkQgQU5PVEhFUiBBUkcgQVMgQVRUQUNIRUQgQVRUUklCVVRFIEFUVFJJQlVURVMKK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJQkFTRSBCRUZPUkUgQklOQVJZIEJJTkFSWS1JTlBVVCBCSU5BUlktTU9ERSBCSU5BUlktT1VUUFVUIEJSRUFLLVdJRFRIIEJVRkZFUiBCWQorc3luIGtleXdvcmQgb21uaW1hcmtDb21tYW5kcwlDQVNFIENISUxEUkVOIENMT1NFRCBDT01QSUxFRC1EQVRFIENPTVBMRU1FTlQgQ09OUkVGIENPTlRFTlQgQ09OVEVYVC1UUkFOU0xBVEUgQ09VTlRFUiBDUkVBVEVEIENSRUFUSU5HIENSRUFUT1IgQ1VSUkVOVAorc3luIGtleXdvcmQgb21uaW1hcmtDb21tYW5kcwlEQVRBLUFUVFJJQlVURSBEQVRBLUFUVFJJQlVURVMgREFUQS1DT05URU5UIERBVEEtTEVUVEVSUyBEQVRFIERFQ0xBUkVELUNPTlJFRiBERUNMQVJFRC1DVVJSRU5UIERFQ0xBUkVELURFRkFVTFRFRCBERUNMQVJFRC1GSVhFRCBERUNMQVJFRC1JTVBMSUVEIERFQ0xBUkVELVJFUVVJUkVECitzeW4ga2V5d29yZCBvbW5pbWFya0NvbW1hbmRzCURFRkFVTFQtRU5USVRZIERFRkFVTFRFRCBERUZBVUxUSU5HIERFTElNSVRFUiBESUZGRVJFTkNFIERJUkVDVE9SWSBET0NUWVBFIERPQ1VNRU5UIERPQ1VNRU5ULUVMRU1FTlQgRE9NQUlOLUZSRUUgRE9XTi1UUkFOU0xBVEUgRFREIERURC1FTkQgRFREUworc3luIGtleXdvcmQgb21uaW1hcmtDb21tYW5kcwlFTEVNRU5UUyBFTFNFV0hFUkUgRU1QVFkgRU5USVRJRVMgRU5USVRZIEVQSUxPRy1TVEFSVCBFUVVBTCBFWENFUFQgRVhJU1RTIEVYVEVSTkFMIEVYVEVSTkFMLURBVEEtRU5USVRZIEVYVEVSTkFMLUVOVElUWSBFWFRFUk5BTC1GVU5DVElPTiBFWFRFUk5BTC1PVVRQVVQtRlVOQ1RJT04KK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJRVhURVJOQUwtVEVYVC1FTlRJVFkKK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJRkFMU0UgRklMRSBGVU5DVElPTiBGVU5DVElPTi1MSUJSQVJZCitzeW4ga2V5d29yZCBvbW5pbWFya0NvbW1hbmRzCUdFTkVSQUwgR0xPQkFMIEdSRUFURVItRVFVQUwgR1JFQVRFUi1USEFOIEdST1VQUworc3luIGtleXdvcmQgb21uaW1hcmtDb21tYW5kcwlIQVMgSEFTTlQgSEVSQUxERUQtTkFNRVMKK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJSUQgSUQtQ0hFQ0tJTkcgSURSRUYgSURSRUZTIElOIElOLUxJQlJBUlkgSU5DTFVTSU9OIElOSVRJQUwgSU5JVElBTC1TSVpFIElOU0VSVElPTi1CUkVBSyBJTlNUQU5DRSBJTlRFUk5BTCBJTlZBTElELURBVEEgSVMgSVNOVCBJVEVNCitzeW4ga2V5d29yZCBvbW5pbWFya0NvbW1hbmRzCUtFWSBLRVlFRAorc3luIGtleXdvcmQgb21uaW1hcmtDb21tYW5kcwlMQVNUIExBU1RNT1NUIExDIExFTkdUSCBMRVNTLUVRVUFMIExFU1MtVEhBTiBMRVRURVJTIExJQlJBUlkgTElURVJBTCBMT0NBTAorc3luIGtleXdvcmQgb21uaW1hcmtDb21tYW5kcwlNQVRDSEVTIE1JWEVEIE1PRElGSUFCTEUKK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJTkFNRSBOQU1FLUxFVFRFUlMgTkFNRUNBU0UgTkFNRUQgTkFNRVMgTkRBVEEtRU5USVRZIE5FR0FURSBORVNURUQtUkVGRVJFTlRTIE5NVE9LRU4gTk1UT0tFTlMgTk8gTk8tREVGQVVMVC1JTyBOT04tQ0RBVEEgTk9OLUlNUExJRUQgTk9OLVNEQVRBIE5PVCBOT1RBVElPTiBOVU1CRVItT0YgTlVNQkVSUworc3luIGtleXdvcmQgb21uaW1hcmtDb21tYW5kcwlOVVRPS0VOIE5VVE9LRU5TCitzeW4ga2V5d29yZCBvbW5pbWFya0NvbW1hbmRzCU9DQ1VSUkVOQ0UgT0YgT1BBUVVFIE9QVElPTkFMIE9SCitzeW4ga2V5d29yZCBvbW5pbWFya0NvbW1hbmRzCVBBUkFNRVRFUiBQQVJFTlQgUEFTVCBQQVRURVJOIFBMVVMgUFJFUEFSRU5UIFBSRVZJT1VTIFBST1BFUiBQVUJMSUMKK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJUkVBRC1PTkxZIFJFQURBQkxFIFJFRkVSRU5UIFJFRkVSRU5UUyBSRUZFUkVOVFMtQUxMT1dFRCBSRUZFUkVOVFMtRElTUExBWUVEIFJFRkVSRU5UUy1OT1QtQUxMT1dFRCBSRU1BSU5ERVIgUkVQRUFURUQgUkVQTEFDRU1FTlQtQlJFQUsgUkVWRVJTRUQKK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJU0lMRU5ULVJFRkVSRU5UIFNJWkUgU0tJUCBTT1VSQ0UgU1BFQ0lGSUVEIFNUQVRVUyBTVFJFQU0gU1VCRE9DLUVOVElUWSBTVUJET0NVTUVOVCBTVUJET0NVTUVOVFMgU1VCRUxFTUVOVCBTV0lUQ0ggU1lNQk9MIFNZU1RFTQorc3luIGtleXdvcmQgb21uaW1hcmtDb21tYW5kcwlURVhULU1PREUgVEhJUyBUSU1FUyBUT0tFTiBUUlVFCitzeW4ga2V5d29yZCBvbW5pbWFya0NvbW1hbmRzCVVOQU5DSE9SRUQgVU5BVFRBQ0hFRCBVTklPTiBVU0VNQVAgVVNJTkcKK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJVkFMVUUgVkFMVUVEIFZBUklBQkxFCitzeW4ga2V5d29yZCBvbW5pbWFya0NvbW1hbmRzCVdJVEggV1JJVEFCTEUKK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJWE1MIFhNTC1EVEQgWE1MLURURFMKK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJWUVTCitzeW4ga2V5d29yZCBvbW5pbWFya0NvbW1hbmRzCSNBRERJVElPTkFMLUlORk8gI0FQUElORk8gI0NBUEFDSVRZICNDSEFSU0VUICNDTEFTUyAjQ09NTUFORC1MSU5FLU5BTUVTICNDT05TT0xFICNDVVJSRU5ULUlOUFVUICNDVVJSRU5ULU9VVFBVVCAjREFUQSAjRE9DVFlQRSAjRE9DVU1FTlQgI0RURCAjRU1QVFkgI0VSUk9SICNFUlJPUi1DT0RFCitzeW4ga2V5d29yZCBvbW5pbWFya0NvbW1hbmRzCSNGSUxFLU5BTUUgI0ZJUlNUICNHUk9VUCAjSU1QTElFRCAjSVRFTSAjTEFOR1VBR0UtVkVSU0lPTiAjTEFTVCAjTElCUEFUSCAjTElCUkFSWSAjTElCVkFMVUUgI0xJTkUtTlVNQkVSICNNQUlOLUlOUFVUICNNQUlOLU9VVFBVVCAjTUFSS1VQLUVSUk9SLUNPVU5UICNNQVJLVVAtRVJST1ItVE9UQUwKK3N5biBrZXl3b3JkIG9tbmltYXJrQ29tbWFuZHMJI01BUktVUC1QQVJTRVIgI01BUktVUC1XQVJOSU5HLUNPVU5UICNNQVJLVVAtV0FSTklORy1UT1RBTCAjTUVTU0FHRSAjTk9ORSAjT1VUUFVUICNQTEFURk9STS1JTkZPICNQUk9DRVNTLUlOUFVUICNQUk9DRVNTLU9VVFBVVCAjUkVDT1ZFUlktSU5GTyAjU0dNTCAjU0dNTC1FUlJPUi1DT1VOVAorc3luIGtleXdvcmQgb21uaW1hcmtDb21tYW5kcwkjU0dNTC1FUlJPUi1UT1RBTCAjU0dNTC1XQVJOSU5HLUNPVU5UICNTR01MLVdBUk5JTkctVE9UQUwgI1NVUFBSRVNTICNTWU5UQVggIyEKKworc3luIGtleXdvcmQgb21uaW1hcmtQYXR0ZXJucwlBTlkgQU5ZLVRFWFQKK3N5biBrZXl3b3JkIG9tbmltYXJrUGF0dGVybnMJQkxBTksKK3N5biBrZXl3b3JkIG9tbmltYXJrUGF0dGVybnMJQ0RBVEEgQ0RBVEEtRU5USVRZIENPTlRFTlQtRU5EIENPTlRFTlQtU1RBUlQKK3N5biBrZXl3b3JkIG9tbmltYXJrUGF0dGVybnMJRElHSVQKK3N5biBrZXl3b3JkIG9tbmltYXJrUGF0dGVybnMJTEVUVEVSCitzeW4ga2V5d29yZCBvbW5pbWFya1BhdHRlcm5zCU5VTUJFUgorc3luIGtleXdvcmQgb21uaW1hcmtQYXR0ZXJucwlQQ0RBVEEKK3N5biBrZXl3b3JkIG9tbmltYXJrUGF0dGVybnMJUkNEQVRBCitzeW4ga2V5d29yZCBvbW5pbWFya1BhdHRlcm5zCVNEQVRBIFNEQVRBLUVOVElUWSBTUEFDRQorc3luIGtleXdvcmQgb21uaW1hcmtQYXR0ZXJucwlURVhUCitzeW4ga2V5d29yZCBvbW5pbWFya1BhdHRlcm5zCVZBTFVFLUVORCBWQUxVRS1TVEFSVAorc3luIGtleXdvcmQgb21uaW1hcmtQYXR0ZXJucwlXT1JELUVORCBXT1JELVNUQVJUCisKK3N5biByZWdpb24gIG9tbmltYXJrQ29tbWVudAlzdGFydD0iOyIgZW5kPSIkIgorCisiIHN0cmluZ3MKK3N5biByZWdpb24gIG9tbmltYXJrU3RyaW5nCQltYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rJysgIGVuZD0rJysgc2tpcD0rJScrIGNvbnRhaW5zPW9tbmltYXJrRXNjYXBlCitzeW4gcmVnaW9uICBvbW5pbWFya1N0cmluZwkJbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9KyIrICBlbmQ9KyIrIHNraXA9KyUiKyBjb250YWlucz1vbW5pbWFya0VzY2FwZQorc3luIG1hdGNoICBvbW5pbWFya0VzY2FwZSBjb250YWluZWQgKyUuKworc3luIG1hdGNoICBvbW5pbWFya0VzY2FwZSBjb250YWluZWQgKyVbMC05XVswLTldIysKKworInN5biBzeW5jIG1heGxpbmVzPTEwMAorc3luIHN5bmMgbWlubGluZXM9MjAwMAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9vbW5pbWFya19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9vbW5pbWFya19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBvbW5pbWFya0NvbW1hbmRzCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIG9tbmltYXJrS2V5d29yZHMJCUlkZW50aWZpZXIKKyAgSGlMaW5rIG9tbmltYXJrU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIG9tbmltYXJrUGF0dGVybnMJCU1hY3JvCisiICBIaUxpbmsgb21uaW1hcmtOdW1iZXIJCQlOdW1iZXIKKyAgSGlMaW5rIG9tbmltYXJrQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgb21uaW1hcmtFc2NhcGUJCVNwZWNpYWwKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAib21uaW1hcmsiCisKKyIgdmltOiB0cz04CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L29wZW5yb2FkLnZpbSBiL3J1bnRpbWUvc3ludGF4L29wZW5yb2FkLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjlhNzhkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvb3BlbnJvYWQudmltCkBAIC0wLDAgKzEsMjY2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJCUNBLU9wZW5ST0FECisiIE1haW50YWluZXI6CUx1aXMgTW9yZW5vIDxsbW9yZW5vQGVyZXNtYXMubmV0PgorIiBMYXN0IGNoYW5nZToJMjAwMSBKdW4gMTIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKKyIKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworc3ludGF4IGNhc2UgaWdub3JlCisKKyIgS2V5d29yZHMKKyIKK3N5bnRheCBrZXl3b3JkIG9wZW5yb2FkS2V5d29yZAlBQk9SVCBBTEwgQUxURVIgQU5EIEFOWSBBUyBBU0MgQVQgQVZHIEJFR0lOCitzeW50YXgga2V5d29yZCBvcGVucm9hZEtleXdvcmQJQkVUV0VFTiBCWSBCWVJFRiBDQUxMIENBTExGUkFNRSBDQUxMUFJPQyBDQVNFCitzeW50YXgga2V5d29yZCBvcGVucm9hZEtleXdvcmQJQ0xFQVIgQ0xPU0UgQ09NTUlUIENPTk5FQ1QgQ09OVElOVUUgQ09QWSBDT1VOVAorc3ludGF4IGtleXdvcmQgb3BlbnJvYWRLZXl3b3JkCUNSRUFURSBDVVJSRU5UIERCRVZFTlQgREVDTEFSRSBERUZBVUxUIERFTEVURQorc3ludGF4IGtleXdvcmQgb3BlbnJvYWRLZXl3b3JkCURFTEVURVJPVyBERVNDIERJUkVDVCBESVNDT05ORUNUIERJU1RJTkNUIERPCitzeW50YXgga2V5d29yZCBvcGVucm9hZEtleXdvcmQJRFJPUCBFTFNFIEVMU0VJRiBFTkQgRU5EQ0FTRSBFTkRERUNMQVJFIEVOREZPUgorc3ludGF4IGtleXdvcmQgb3BlbnJvYWRLZXl3b3JkCUVORElGIEVORExPT1AgRU5EV0hJTEUgRVNDQVBFIEVYRUNVVEUgRVhJU1RTCitzeW50YXgga2V5d29yZCBvcGVucm9hZEtleXdvcmQJRVhJVCBGRVRDSCBGSUVMRCBGT1IgRlJPTSBHT1RPRlJBTUUgR1JBTlQgR1JPVVAKK3N5bnRheCBrZXl3b3JkIG9wZW5yb2FkS2V5d29yZAlIQVZJTkcgSUYgSU1NRURJQVRFIElOIElOREVYIElOSVRJQUxJU0UKK3N5bnRheCBrZXl3b3JkIG9wZW5yb2FkS2V5d29yZAlJTklUSUFMSVpFIElOUVVJUkVfSU5HUkVTIElOUVVJUkVfU1FMIElOU0VSVAorc3ludGF4IGtleXdvcmQgb3BlbnJvYWRLZXl3b3JkCUlOU0VSVFJPVyBJTlNUQUxMQVRJT04gSU5URUdSSVRZIElOVE8gS0VZIExJS0UKK3N5bnRheCBrZXl3b3JkIG9wZW5yb2FkS2V5d29yZAlMSU5LIE1BWCBNRVNTQUdFIE1FVEhPRCBNSU4gTU9ERSBNT0RJRlkgTkVYVAorc3ludGF4IGtleXdvcmQgb3BlbnJvYWRLZXl3b3JkCU5PRUNITyBOT1QgTlVMTCBPRiBPTiBPUEVOIE9QRU5GUkFNRSBPUiBPUkRFUgorc3ludGF4IGtleXdvcmQgb3BlbnJvYWRLZXl3b3JkCVBFUk1JVCBQUk9DRURVUkUgUFJPTVBUIFFVQUxJRklDQVRJT04gUkFJU0UKK3N5bnRheCBrZXl3b3JkIG9wZW5yb2FkS2V5d29yZAlSRUdJU1RFUiBSRUxPQ0FURSBSRU1PVkUgUkVQRUFUIFJFUEVBVEVEIFJFU1VNRQorc3ludGF4IGtleXdvcmQgb3BlbnJvYWRLZXl3b3JkCVJFVFVSTiBSRVRVUk5JTkcgUkVWT0tFIFJPTEUgUk9MTEJBQ0sgUlVMRSBTQVZFCitzeW50YXgga2V5d29yZCBvcGVucm9hZEtleXdvcmQJU0FWRVBPSU5UIFNFTEVDVCBTRVQgU0xFRVAgU09NRSBTVU0gU1lTVEVNIFRBQkxFCitzeW50YXgga2V5d29yZCBvcGVucm9hZEtleXdvcmQJVEhFTiBUTyBUUkFOU0FDVElPTiBVTklPTiBVTklRVUUgVU5USUwgVVBEQVRFCitzeW50YXgga2V5d29yZCBvcGVucm9hZEtleXdvcmQJVkFMVUVTIFZJRVcgV0hFUkUgV0hJTEUgV0lUSCBXT1JLCisKK3N5bnRheCBrZXl3b3JkIG9wZW5yb2FkVG9kbyBjb250YWluZWQJVE9ETworCisiIENhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMKKyIKK3N5bnRheCBjbHVzdGVyCW9wZW5yb2FkUGFyZW5Hcm91cAljb250YWlucz1vcGVucm9hZFBhcmVuRXJyb3Isb3BlbnJvYWRUb2RvCitzeW50YXggcmVnaW9uCW9wZW5yb2FkUGFyZW4JCXRyYW5zcGFyZW50IHN0YXJ0PScoJyBlbmQ9JyknIGNvbnRhaW5zPUFMTEJVVCxAb3BlbnJvYWRQYXJlbkdyb3VwCitzeW50YXggbWF0Y2gJb3BlbnJvYWRQYXJlbkVycm9yCSIpIgoraGlnaGxpZ2h0IGxpbmsJb3BlbnJvYWRQYXJlbkVycm9yCWNFcnJvcgorCisiIE51bWJlcnMKKyIKK3N5bnRheCBtYXRjaAlvcGVucm9hZE51bWJlcgkJIlw8WzAtOV1cK1w+IgorCisiIFN0cmluZworIgorc3ludGF4IHJlZ2lvbglvcGVucm9hZFN0cmluZwkJc3RhcnQ9KycrICBlbmQ9KycrCisKKyIgT3BlcmF0b3JzLCBEYXRhIFR5cGVzIGFuZCBGdW5jdGlvbnMKKyIKK3N5bnRheCBtYXRjaAlvcGVucm9hZE9wZXJhdG9yCS9bXCtcLVwqXC89XDxcPjtcKFwpXS8KKworc3ludGF4IGtleXdvcmQJb3BlbnJvYWRUeXBlCQlBUlJBWSBCWVRFIENIQVIgREFURSBERUNJTUFMIEZMT0FUIEZMT0FUNAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRUeXBlCQlGTE9BVDggSU5UMSBJTlQyIElOVDQgSU5URUdFUiBJTlRFR0VSMQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRUeXBlCQlJTlRFR0VSMiBJTlRFR0VSNCBNT05FWSBPQkpFQ1RfS0VZCitzeW50YXgga2V5d29yZAlvcGVucm9hZFR5cGUJCVNFQ1VSSVRZX0xBQkVMIFNNQUxMSU5UIFRBQkxFX0tFWSBWQVJDSEFSCisKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkRnVuYwkJSUZOVUxMCisKKyIgU3lzdGVtIENsYXNzZXMKKyIKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ2xhc3MJQUNUSVZFRklFTEQgQU5BTE9HRklFTEQgQVBQRkxBRyBBUFBTT1VSQ0UKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ2xhc3MJQVJSQVlPQkpFQ1QgQVRUUklCVVRFT0JKRUNUIEJBUkZJRUxECitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCUJJVE1BUE9CSkVDVCBCT1hUUklNIEJSRUFLU1BFQyBCVVRUT05GSUVMRAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDbGFzcwlDRUxMQVRUUklCVVRFIENIT0lDRUJJVE1BUCBDSE9JQ0VERVRBSUwKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ2xhc3MJQ0hPSUNFRklFTEQgQ0hPSUNFSVRFTSBDSE9JQ0VMSVNUIENMQVNTCitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCUNMQVNTU09VUkNFIENPTFVNTkNST1NTIENPTFVNTkZJRUxECitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCUNPTVBPU0lURUZJRUxEIENPTVBTT1VSQ0UgQ09OVFJPTEJVVFRPTgorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDbGFzcwlDUk9TU1RBQkxFIENVUlNPUkJJVE1BUCBDVVJTT1JPQkpFQ1QgREFUQVNUUkVBTQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDbGFzcwlEQVRFT0JKRUNUIERCRVZFTlRPQkpFQ1QgREJTRVNTSU9OT0JKRUNUCitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCURJU1BMQVlGT1JNIERZTkVYUFIgRUxMSVBTRVNIQVBFIEVOVFJZRklFTEQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ2xhc3MJRU5VTUZJRUxEIEVWRU5UIEVYVE9CSkVDVCBFWFRPQkpGSUVMRAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDbGFzcwlGSUVMRE9CSkVDVCBGTEVYSUJMRUZPUk0gRkxPQVRPQkpFQ1QgRk9STUZJRUxECitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCUZSQU1FRVhFQyBGUkFNRUZPUk0gRlJBTUVTT1VSQ0UgRlJFRVRSSU0KK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ2xhc3MJR0hPU1RFWEVDIEdIT1NUU09VUkNFIElNQUdFRklFTEQgSU1BR0VUUklNCitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCUlOVEVHRVJPQkpFQ1QgTElTVEZJRUxEIExJU1RWSUVXQ09MQVRUUgorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDbGFzcwlMSVNUVklFV0ZJRUxEIExPTkdCWVRFT0JKRUNUIExPTkdWQ0hBUk9CSkVDVAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDbGFzcwlNQVRSSVhGSUVMRCBNRU5VQkFSIE1FTlVCVVRUT04gTUVOVUZJRUxECitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCU1FTlVHUk9VUCBNRU5VSVRFTSBNRU5VTElTVCBNRU5VU0VQQVJBVE9SCitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCU1FTlVTVEFDSyBNRU5VVE9HR0xFIE1FVEhPREVYRUMgTUVUSE9ET0JKRUNUCitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCU1PTkVZT0JKRUNUIE9CSkVDVCBPUFRJT05GSUVMRCBPUFRJT05NRU5VCitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCVBBTEVUVEVGSUVMRCBQT1BVUEJVVFRPTiBQUk9DNEdMU09VUkNFIFBST0NFWEVDCitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCVBST0NIQU5ETEUgUVVFUllDT0wgUVVFUllPQkpFQ1QgUVVFUllQQVJNCitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCVFVRVJZVEFCTEUgUkFESU9GSUVMRCBSRUNUQU5HTEVTSEFQRSBST1dDUk9TUworc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDbGFzcwlTQ0FMQVJGSUVMRCBTQ09QRSBTQ1JPTExCQVJGSUVMRCBTRUdNRU5UU0hBUEUKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ2xhc3MJU0VTU0lPTk9CSkVDVCBTSEFQRUZJRUxEIFNMSURFUkZJRUxEIFNRTFNFTEVDVAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDbGFzcwlTVEFDS0ZJRUxEIFNUUklOR09CSkVDVCBTVUJGT1JNIFRBQkJBUgorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDbGFzcwlUQUJGSUVMRCBUQUJGT0xERVIgVEFCTEVGSUVMRCBUQUJQQUdFCitzeW50YXgga2V5d29yZAlvcGVucm9hZENsYXNzCVRPR0dMRUZJRUxEIFRSRUUgVFJFRU5PREUgVFJFRVZJRVdGSUVMRAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDbGFzcwlVU0VSQ0xBU1NPQkpFQ1QgVVNFUk9CSkVDVCBWSUVXUE9SVEZJRUxECisKKyIgU3lzdGVtIEV2ZW50cworIgorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRFdmVudAlDSElMRENMSUNLIENISUxEQ0xJQ0tQT0lOVCBDSElMRENPTExBUFNFRAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRFdmVudAlDSElMRERFVEFJTFMgQ0hJTERET1VCTEVDTElDSyBDSElMRERSQUdCT1gKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkRXZlbnQJQ0hJTEREUkFHU0VHTUVOVCBDSElMREVOVFJZIENISUxERVhJVAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRFdmVudAlDSElMREVYUEFOREVEIENISUxESEVBREVSQ0xJQ0sgQ0hJTERNT1ZFRAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRFdmVudAlDSElMRFBST1BFUlRJRVMgQ0hJTERSRVNJWkVEIENISUxEU0NST0xMCitzeW50YXgga2V5d29yZAlvcGVucm9hZEV2ZW50CUNISUxEU0VMRUNUIENISUxEU0VMRUNUSU9OQ0hBTkdFRCBDSElMRFNFVFZBTFVFCitzeW50YXgga2V5d29yZAlvcGVucm9hZEV2ZW50CUNISUxEVU5TRUxFQ1QgQ0hJTERWQUxJREFURSBDTElDSyBDTElDS1BPSU5UCitzeW50YXgga2V5d29yZAlvcGVucm9hZEV2ZW50CUNPTExBUFNFRCBEQkVWRU5UIERFVEFJTFMgRE9VQkxFQ0xJQ0sgRFJBR0JPWAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRFdmVudAlEUkFHU0VHTUVOVCBFTlRSWSBFWElUIEVYUEFOREVEIEVYVENMQVNTRVZFTlQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkRXZlbnQJRlJBTUVBQ1RJVkFURSBGUkFNRURFQUNUSVZBVEUgSEVBREVSQ0xJQ0sKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkRXZlbnQJSU5TRVJUUk9XIExBQkVMQ0hBTkdFRCBNT1ZFRCBQQUdFQUNUSVZBVEVECitzeW50YXgga2V5d29yZAlvcGVucm9hZEV2ZW50CVBBR0VDSEFOR0VEIFBBR0VERUFDVElWQVRFRCBQUk9QRVJUSUVTIFJFU0laRUQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkRXZlbnQJU0NST0xMIFNFTEVDVCBTRUxFQ1RJT05DSEFOR0VEIFNFVFZBTFVFCitzeW50YXgga2V5d29yZAlvcGVucm9hZEV2ZW50CVRFUk1JTkFURSBVTlNFTEVDVCBVU0VSRVZFTlQgVkFMSURBVEUKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkRXZlbnQJV0lORE9XQ0xPU0UgV0lORE9XSUNPTiBXSU5ET1dNT1ZFRCBXSU5ET1dSRVNJWkVECitzeW50YXgga2V5d29yZAlvcGVucm9hZEV2ZW50CVdJTkRPV1ZJU0lCTEUKKworIiBTeXN0ZW0gQ29uc3RhbnRzCisiCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUJGX0JNUCBCRl9HSUYgQkZfU1VOUkFTVEVSIEJGX1RJRkYKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJQkZfV0lORE9XQ1VSU09SIEJGX1dJTkRPV0lDT04gQkZfWEJNCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNDX0JBQ0tHUk9VTkQgQ0NfQkxBQ0sgQ0NfQkxVRSBDQ19CUk9XTiBDQ19DWUFOCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNDX0RFRkFVTFRfMSBDQ19ERUZBVUxUXzEwIENDX0RFRkFVTFRfMTEKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJQ0NfREVGQVVMVF8xMiBDQ19ERUZBVUxUXzEzIENDX0RFRkFVTFRfMTQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJQ0NfREVGQVVMVF8xNSBDQ19ERUZBVUxUXzE2IENDX0RFRkFVTFRfMTcKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJQ0NfREVGQVVMVF8xOCBDQ19ERUZBVUxUXzE5IENDX0RFRkFVTFRfMgorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19ERUZBVUxUXzIwIENDX0RFRkFVTFRfMjEgQ0NfREVGQVVMVF8yMgorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19ERUZBVUxUXzIzIENDX0RFRkFVTFRfMjQgQ0NfREVGQVVMVF8yNQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19ERUZBVUxUXzI2IENDX0RFRkFVTFRfMjcgQ0NfREVGQVVMVF8yOAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19ERUZBVUxUXzI5IENDX0RFRkFVTFRfMyBDQ19ERUZBVUxUXzMwCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNDX0RFRkFVTFRfNCBDQ19ERUZBVUxUXzUgQ0NfREVGQVVMVF82CitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNDX0RFRkFVTFRfNyBDQ19ERUZBVUxUXzggQ0NfREVGQVVMVF85CitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNDX0ZPUkVHUk9VTkQgQ0NfR1JBWSBDQ19HUkVFTiBDQ19MSUdIVF9CTFVFCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNDX0xJR0hUX0JST1dOCUNDX0xJR0hUX0NZQU4gQ0NfTElHSFRfR1JBWQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19MSUdIVF9HUkVFTiBDQ19MSUdIVF9PUkFOR0UgQ0NfTElHSFRfUElOSworc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19MSUdIVF9QVVJQTEUgQ0NfTElHSFRfUkVEIENDX0xJR0hUX1lFTExPVworc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19NQUdFTlRBIENDX09SQU5HRSBDQ19QQUxFX0JMVUUgQ0NfUEFMRV9CUk9XTgorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19QQUxFX0NZQU4gQ0NfUEFMRV9HUkFZIENDX1BBTEVfR1JFRU4KK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJQ0NfUEFMRV9PUkFOR0UgQ0NfUEFMRV9QSU5LIENDX1BBTEVfUFVSUExFCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNDX1BBTEVfUkVEIENDX1BBTEVfWUVMTE9XIENDX1BJTksgQ0NfUFVSUExFCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNDX1JFRCBDQ19TWVNfQUNUSVZFQk9SREVSIENDX1NZU19BQ1RJVkVDQVBUSU9OCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNDX1NZU19BUFBXT1JLU1BBQ0UgQ0NfU1lTX0JBQ0tHUk9VTkQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJQ0NfU1lTX0JUTkZBQ0UgQ0NfU1lTX0JUTlNIQURPVyBDQ19TWVNfQlROVEVYVAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19TWVNfQ0FQVElPTlRFWFQgQ0NfU1lTX0dSQVlURVhUCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNDX1NZU19ISUdITElHSFQgQ0NfU1lTX0hJR0hMSUdIVFRFWFQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJQ0NfU1lTX0lOQUNUSVZFQk9SREVSIENDX1NZU19JTkFDVElWRUNBUFRJT04KK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJQ0NfU1lTX0lOQUNUSVZFQ0FQVElPTlRFWFQgQ0NfU1lTX01FTlUKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJQ0NfU1lTX01FTlVURVhUIENDX1NZU19TQ1JPTExCQVIgQ0NfU1lTX1NIQURPVworc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19TWVNfV0lORE9XIENDX1NZU19XSU5ET1dGUkFNRQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlDQ19TWVNfV0lORE9XVEVYVCBDQ19XSElURSBDQ19ZRUxMT1cKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJQ0xfSU5WQUxJRFZBTFVFIENQX0JPVEggQ1BfQ09MVU1OUyBDUF9OT05FCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNQX1JPV1MgQ1NfQ0xPU0VEIENTX0NVUlJFTlQgQ1NfTk9DVVJSRU5UCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUNTX05PX01PUkVfUk9XUyBDU19PUEVOIENTX09QRU5fQ0FDSEVEIERDX0JXCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CURDX0NPTE9SIERQX0FVVE9TSVpFX0ZJRUxEIERQX0NMSVBfSU1BR0UKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJRFBfU0NBTEVfSU1BR0VfSCBEUF9TQ0FMRV9JTUFHRV9IVworc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlEUF9TQ0FMRV9JTUFHRV9XIERTX0NPTk5FQ1RFRCBEU19ESVNBQkxFRAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlEU19ESVNDT05ORUNURUQgRFNfSU5HUkVTX0RCTVMgRFNfTk9fREJNUworc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlEU19PUkFDTEVfREJNUyBEU19TUUxTRVJWRVJfREJNUyBEVl9OVUxMCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CURWX1NUUklORyBEVl9TWVNURU0gRUhfTkVYVF9IQU5ETEVSIEVIX1JFU1VNRQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlFSF9SRVRSWSBFUF9JTlRFUkFDVElWRSBFUF9OT05FIEVQX09VVFBVVAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlFUl9GQUlMIEVSX05BTUVFWElTVFMgRVJfT0sgRVJfT1VUT0ZSQU5HRQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlFUl9ST1dOT1RGT1VORCBFUl9VU0VSMSBFUl9VU0VSMTAgRVJfVVNFUjIKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJRVJfVVNFUjMgRVJfVVNFUjQgRVJfVVNFUjUgRVJfVVNFUjYgRVJfVVNFUjcKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJRVJfVVNFUjggRVJfVVNFUjkgRkFMU0UgRkFfQk9UVE9NQ0VOVEVSCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUZBX0JPVFRPTUxFRlQgRkFfQk9UVE9NUklHSFQgRkFfQ0VOVEVSCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUZBX0NFTlRFUkxFRlQgRkFfQ0VOVEVSUklHSFQgRkFfREVGQVVMVCBGQV9OT05FCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUZBX1RPUENFTlRFUiBGQV9UT1BMRUZUIEZBX1RPUFJJR0hUCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUZCX0NIQU5HRUFCTEUgRkJfQ0xJQ0tQT0lOVCBGQl9ESU1NRUQgRkJfRFJBR0JPWAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlGQl9EUkFHU0VHTUVOVCBGQl9GTEVYSUJMRSBGQl9JTlZJU0lCTEUKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJRkJfTEFOREFCTEUgRkJfTUFSS0FCTEUgRkJfUkVTSVpFQUJMRQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlGQl9WSUVXQUJMRSBGQl9WSVNJQkxFIEZDX0xPV0VSIEZDX05PTkUgRkNfVVBQRVIKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJRk1fUVVFUlkgRk1fUkVBRCBGTV9VUERBVEUgRk1fVVNFUjEgRk1fVVNFUjIKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJRk1fVVNFUjMgRk9fREVGQVVMVCBGT19IT1JJWk9OVEFMIEZPX1ZFUlRJQ0FMCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUZQX0JJVE1BUCBGUF9DTEVBUiBGUF9DUk9TU0hBVENIIEZQX0RBUktTSEFERQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlGUF9ERUZBVUxUIEZQX0hPUklaT05UQUwgRlBfTElHSFRTSEFERSBGUF9TSEFERQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlGUF9TT0xJRCBGUF9WRVJUSUNBTCBGVF9OT1RTRVRWQUxVRSBGVF9TRVRWQUxVRQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlGVF9UQUJUTyBGVF9UQUtFRk9DVVMgR0ZfQk9UVE9NIEdGX0RFRkFVTFQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJR0ZfTEVGVCBHRl9SSUdIVCBHRl9UT1AgSENfRE9VQkxFUVVPVEUKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJSENfRk9STUZFRUQgSENfTkVXTElORSBIQ19RVU9URSBIQ19TUEFDRSBIQ19UQUIKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJSFZfQ09OVEVOVFMgSFZfQ09OVEVYVCBIVl9IRUxQT05IRUxQIEhWX0tFWQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlIVl9RVUlUIExTXzNEIExTX0RBU0ggTFNfREFTSERPVCBMU19EQVNIRE9URE9UCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUxTX0RFRkFVTFQgTFNfRE9UIExTX1NPTElEIExXX0RFRkFVTFQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJTFdfRVhUUkFUSElOIExXX01BWElNVU0gTFdfTUlERExFIExXX01JTklNVU0KK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJTFdfTk9MSU5FIExXX1RISUNLIExXX1RISU4gTFdfVkVSWVRISUNLCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CUxXX1ZFUllUSElOIE1CX0RJU0FCTEVEIE1CX0VOQUJMRUQgTUJfSU5WSVNJQkxFCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CU1CX01PVkVBQkxFIE1UX0VSUk9SIE1UX0lORk8gTVRfTk9ORSBNVF9XQVJOSU5HCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CU9QX0FQUEVORCBPUF9OT05FIE9TM0QgT1NfREVGQVVMVCBPU19TSEFET1cKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJT1NfU09MSUQgUFVfQ0FOQ0VMIFBVX09LIFFTX0FDVElWRSBRU19JTkFDVElWRQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlRU19TRVRDT0wgUVlfQVJSQVkgUVlfQ0FDSEUgUVlfQ1VSU09SIFFZX0RJUkVDVAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlSQ19DSElMRFNFTEVDVEVEIFJDX0RPV04gUkNfRU5EIFJDX0ZJRUxERlJFRUQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJUkNfRklFTERPUlBIQU5FRCBSQ19HUk9VUFNFTEVDVCBSQ19IT01FIFJDX0xFRlQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJUkNfTU9ERUNIQU5HRUQgUkNfTU9VU0VDTElDSyBSQ19NT1VTRURSQUcKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJUkNfTkVYVCBSQ19OT1RBUFBMSUNBQkxFIFJDX1BBR0VET1dOIFJDX1BBR0VVUAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlSQ19QQVJFTlRTRUxFQ1RFRCBSQ19QUkVWSU9VUyBSQ19QUk9HUkFNCitzeW50YXgga2V5d29yZAlvcGVucm9hZENvbnN0CVJDX1JFU1VNRSBSQ19SRVRVUk4gUkNfUklHSFQgUkNfUk9XREVMRVRFRAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlSQ19ST1dJTlNFUlRFRCBSQ19ST1dTQUxMREVMRVRFRCBSQ19TRUxFQ1QKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJUkNfVEZTQ1JPTEwgUkNfVE9HR0xFU0VMRUNUIFJDX1VQIFJTX0NIQU5HRUQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJUlNfREVMRVRFRCBSU19ORVcgUlNfVU5DSEFOR0VEIFJTX1VOREVGSU5FRAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlTS19DTE9TRSBTS19DT1BZIFNLX0NVVCBTS19ERUxFVEUgU0tfREVUQUlMUworc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlTS19EVVBMSUNBVEUgU0tfRklORCBTS19HTyBTS19IRUxQIFNLX05FWFQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJU0tfTk9ORSBTS19QQVNURSBTS19QUk9QUyBTS19RVUlUIFNLX1JFRE8KK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJU0tfU0FWRSBTS19URkRFTEVURUFMTFJPV1MgU0tfVEZERUxFVEVST1cKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJU0tfVEZGSU5EIFNLX1RGSU5TRVJUUk9XIFNLX1VORE8gU1BfQVBQU1RBUlRJTkcKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJU1BfQVJST1cgU1BfQ1JPU1MgU1BfSUJFQU0gU1BfSUNPTiBTUF9OTworc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlTUF9TSVpFIFNQX1NJWkVORVNXIFNQX1NJWkVOUyBTUF9TSVpFTldTRQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlTUF9TSVpFV0UgU1BfVVBBUlJPVyBTUF9XQUlUIFNZX05UIFNZX09TMgorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlTWV9VTklYIFNZX1ZNUyBTWV9XSU45NSBURl9DT1VSSUVSIFRGX0hFTFZFVElDQQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlURl9MVUNJREEgVEZfTUVOVURFRkFVTFQgVEZfTkVXQ0VOVFVSWSBURl9TWVNURU0KK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJVEZfVElNRVNST01BTiBUUlVFIFVFX0RBVEFFUlJPUiBVRV9FWElURUQKK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJVUVfTk9UQUNUSVZFIFVFX1BVUkdFRCBVRV9SRVNVTUVEIFVFX1VOS05PV04KK3N5bnRheCBrZXl3b3JkCW9wZW5yb2FkQ29uc3QJV0lfTU9USUYgV0lfTVNXSU4zMiBXSV9NU1dJTkRPV1MgV0lfTk9ORSBXSV9QTQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlXUF9GTE9BVElORyBXUF9JTlRFUkFDVElWRSBXUF9QQVJFTlRDRU5URVJFRAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlXUF9QQVJFTlRSRUxBVElWRSBXUF9TQ1JFRU5DRU5URVJFRAorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlXUF9TQ1JFRU5SRUxBVElWRSBXVl9JQ09OIFdWX0lOVklTSUJMRQorc3ludGF4IGtleXdvcmQJb3BlbnJvYWRDb25zdAlXVl9VTlJFQUxJWkVEIFdWX1ZJU0lCTEUKKworIiBTeXN0ZW0gVmFyaWFibGVzCisiCitzeW50YXgga2V5d29yZAlvcGVucm9hZFZhcgkJQ3VyRnJhbWUgQ3VyUHJvY2VkdXJlIEN1ck1ldGhvZCBDdXJPYmplY3QKKworIiBJZGVudGlmaWVycworIgorc3ludGF4IG1hdGNoCW9wZW5yb2FkSWRlbnQJL1thLXpBLVpfXVthLXpBLVpfXSohW2EtekEtWl9dW2EtekEtWl9dKi8KKworIiBDb21tZW50cworIgoraWYgZXhpc3RzKCJvcGVucm9hZF9jb21tZW50X3N0cmluZ3MiKQorCXN5bnRheCBtYXRjaCBvcGVucm9hZENvbW1lbnRTa2lwCWNvbnRhaW5lZCAiXlxzKlwqXCgkXHxcc1wrXCkiCisJc3ludGF4IHJlZ2lvbiBvcGVucm9hZENvbW1lbnRTdHJpbmcJY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgZW5kPSIkIgorCXN5bnRheCByZWdpb24gb3BlbnJvYWRDb21tZW50CQlzdGFydD0iL1wqIiBlbmQ9IlwqLyIgY29udGFpbnM9b3BlbnJvYWRDb21tZW50U3RyaW5nLG9wZW5yb2FkQ2hhcmFjdGVyLG9wZW5yb2FkTnVtYmVyCisJc3ludGF4IG1hdGNoIG9wZW5yb2FkQ29tbWVudAkJIi8vLioiIGNvbnRhaW5zPW9wZW5yb2FkQ29tbWVudDJTdHJpbmcsb3BlbnJvYWRDaGFyYWN0ZXIsb3BlbnJvYWROdW1iZXIKK2Vsc2UKKwlzeW4gcmVnaW9uIG9wZW5yb2FkQ29tbWVudAkJCXN0YXJ0PSIvXCoiIGVuZD0iXCovIgorCXN5biBtYXRjaCBvcGVucm9hZENvbW1lbnQJCQkiLy8uKiIKK2VuZGlmCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAorIgoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX29wZW5yb2FkX3N5bnRheF9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX29wZW5yb2FkX3N5bnRheF9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWVuZGlmCisKKwlIaUxpbmsgb3BlbnJvYWRLZXl3b3JkCVN0YXRlbWVudAorCUhpTGluayBvcGVucm9hZE51bWJlcglOdW1iZXIKKwlIaUxpbmsgb3BlbnJvYWRTdHJpbmcJU3RyaW5nCisJSGlMaW5rIG9wZW5yb2FkQ29tbWVudAlDb21tZW50CisJSGlMaW5rIG9wZW5yb2FkT3BlcmF0b3IJT3BlcmF0b3IKKwlIaUxpbmsgb3BlbnJvYWRUeXBlCQlUeXBlCisJSGlMaW5rIG9wZW5yb2FkRnVuYwkJU3BlY2lhbAorCUhpTGluayBvcGVucm9hZENsYXNzCVR5cGUKKwlIaUxpbmsgb3BlbnJvYWRFdmVudAlTdGF0ZW1lbnQKKwlIaUxpbmsgb3BlbnJvYWRDb25zdAlDb25zdGFudAorCUhpTGluayBvcGVucm9hZFZhcgkJSWRlbnRpZmllcgorCUhpTGluayBvcGVucm9hZElkZW50CUlkZW50aWZpZXIKKwlIaUxpbmsgb3BlbnJvYWRUb2RvCQlUb2RvCisKKwlkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAib3BlbnJvYWQiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9vcGwudmltIGIvcnVudGltZS9zeW50YXgvb3BsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTE0YTA1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvb3BsLnZpbQpAQCAtMCwwICsxLDk2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJT1BMCisiIE1haW50YWluZXI6CUN6byA8T2xpdmllci5TaXJvbEBsaXA2LmZyPgorIiAkSWQkCisKKyIgT3BlbiBQc2lvbiBMYW5ndWFnZS4uLiAoRVBPQzE2L0VQT0MzMikKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGNhc2UgaXMgbm90IHNpZ25pZmljYW50CitzeW4gY2FzZSBpZ25vcmUKKworIiBBIGJ1bmNoIG9mIHVzZWZ1bCBPUEwga2V5d29yZHMKK3N5biBrZXl3b3JkIE9QTFN0YXRlbWVudCBwcm9jIGVuZHAgYWJzIGFjb3MgYWRkciBhZGp1c3RhbGxvYyBhbGVydCBhbGxvYyBhcHAKK3N5biBrZXl3b3JkIE9QTFN0YXRlbWVudCBhcHBlbmQgYXBwZW5kc3ByaXRlIGFzYyBhc2luIGF0IGF0YW4gYmFjayBiZWVwCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgYmVnaW50cmFucyBib29rbWFyayBicmVhayBidXN5IGJ5cmVmIGNhY2hlCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgY2FjaGVoZHIgY2FjaGVyZWMgY2FjaGV0aWR5IGNhbGwgY2FuY2VsIGNhcHRpb24KK3N5biBrZXl3b3JkIE9QTFN0YXRlbWVudCBjaGFuZ2VzcHJpdGUgY2hyJCBjbGVhcmZsYWdzIGNsb3NlIGNsb3Nlc3ByaXRlIGNscworc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IGNtZCQgY29tbWl0dHJhbnMgY29tcGFjdCBjb21wcmVzcyBjb25zdCBjb250aW51ZQorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IGNvcHkgY29zIGNvdW50IGNyZWF0ZSBjcmVhdGVzcHJpdGUgY3Vyc29yCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgZGF0ZXRvc2VjcyBkYXRpbSQgZGF5IGRheW5hbWUkIGRheXMgZGF5c3RvZGF0ZQorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IGRidXR0b25zIGRjaGVja2JveCBkY2hvaWNlIGRkYXRlIGRlY2xhcmUgZGVkaXQKK3N5biBrZXl3b3JkIE9QTFN0YXRlbWVudCBkZWRpdG11bHRpIGRlZmF1bHR3aW4gZGVnIGRlbGV0ZSBkZmlsZSBkZmxvYXQKK3N5biBrZXl3b3JkIE9QTFN0YXRlbWVudCBkaWFsb2cgZGlhbWluaXQgZGlhbXBvcyBkaW5pdCBkaXIkIGRsb25nIGRvIGRvdworc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IGRwb3NpdGlvbiBkcmF3c3ByaXRlIGR0ZXh0IGR0aW1lIGR4aW5wdXQgZWRpdCBlbHNlCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgZWxzZWlmIGVuZGEgZW5kaWYgZW5kdiBlbmR3aCBlbnRlcnNlbmQgZW50ZXJzZW5kMAorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IGVvZiBlcmFzZSBlcnIgZXJyJCBlcnJ4JCBlc2NhcGUgZXZhbCBleGlzdCBleHAgZXh0CitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgZXh0ZXJuYWwgZmluZCBmaW5kZmllbGQgZmluZGxpYiBmaXJzdCBmaXgkIGZsYWdzCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgZmx0IGZvbnQgZnJlZWFsbG9jIGdhdCBnYm9yZGVyIGdib3ggZ2J1dHRvbgorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IGdjaXJjbGUgZ2Nsb2NrIGdjbG9zZSBnY2xzIGdjb2xvciBnY29weSBnY3JlYXRlCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgZ2NyZWF0ZWJpdCBnZHJhd29iamVjdCBnZWxsaXBzZSBnZW4kIGdldCBnZXQkCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgZ2V0Y21kJCBnZXRkb2MkIGdldGV2ZW50IGdldGV2ZW50MzIgZ2V0ZXZlbnRhMzIKK3N5biBrZXl3b3JkIE9QTFN0YXRlbWVudCBnZXRldmVudGMgZ2V0bGliaCBnZmlsbCBnZm9udCBnZ21vZGUgZ2dyZXkgZ2hlaWdodAorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IGdpZGVudGl0eSBnaW5mbyBnaW5mbzMyIGdpbnZlcnQgZ2lwcmludCBnbGluZWJ5CitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgZ2xpbmV0byBnbG9hZGJpdCBnbG9hZGZvbnQgZ2xvYmFsIGdtb3ZlIGdvcmRlcgorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IGdvcmlnaW54IGdvcmlnaW55IGdvdG8gZ290b21hcmsgZ3BhdHQgZ3BlZWtsaW5lCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgZ3BvbHkgZ3ByaW50IGdwcmludGIgZ3ByaW50Y2xpcCBncmFuayBnc2F2ZWJpdAorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IGdzY3JvbGwgZ3NldHBlbndpZHRoIGdzZXR3aW4gZ3N0eWxlIGd0bW9kZSBndHdpZHRoCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgZ3VubG9hZGZvbnQgZ3VwZGF0ZSBndXNlIGd2aXNpYmxlIGd3aWR0aCBneAorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IGd4Ym9yZGVyIGd4cHJpbnQgZ3kgaGV4JCBob3VyIGlhYnMgaWNvbiBpZiBpbmNsdWRlCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgaW5wdXQgaW5zZXJ0IGludCBpbnRmIGludHJhbnMga2V5IGtleSQga2V5YSBrZXljCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQga2lsbG1hcmsga21vZCBsYXN0IGxjbG9zZSBsZWZ0JCBsZW4gbGVuYWxsb2MKK3N5biBrZXl3b3JkIE9QTFN0YXRlbWVudCBsaW5rbGliIGxuIGxvYWRsaWIgbG9hZG0gbG9jIGxvY2FsIGxvY2sgbG9nIGxvcGVuCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgbG93ZXIkIGxwcmludCBtYXggbWNhcmQgbWNhc2MgbWVhbiBtZW51IG1pZCQgbWluCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgbWluaXQgbWludXRlIG1rZGlyIG1vZGlmeSBtb250aCBtb250aCQgbXBvcHVwCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgbmV3b2JqIG5ld29iamggbmV4dCBub3RlcyBudW0kIG9kYmluZm8gb2ZmIG9uZXJyCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgb3BlbiBvcGVuciBvcHggb3MgcGFyc2UkIHBhdGggcGF1c2UgcGVlayBwaQorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IHBvaW50ZXJmaWx0ZXIgcG9rZSBwb3MgcG9zaXRpb24gcG9zc3ByaXRlIHByaW50CitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgcHV0IHJhZCByYWlzZSByYW5kb21pemUgcmVhbGxvYyByZWNzaXplIHJlbmFtZQorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IHJlcHQkIHJldHVybiByaWdodCQgcm1kaXIgcm5kIHJvbGxiYWNrIHNjaSQgc2NyZWVuCitzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgc2NyZWVuaW5mbyBzZWNvbmQgc2Vjc3RvZGF0ZSBzZW5kIHNldGRvYyBzZXRmbGFncworc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IHNldG5hbWUgc2V0cGF0aCBzaW4gc3BhY2Ugc3FyIHN0YXR1c3dpbgorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IHN0YXR3aW5pbmZvIHN0ZCBzdG9wIHN0eWxlIHN1bSB0YW4gdGVzdGV2ZW50IHRyYXAKK3N5biBrZXl3b3JkIE9QTFN0YXRlbWVudCB0eXBlIHVhZGQgdW5sb2FkbGliIHVubG9hZG0gdW50aWwgdXBkYXRlIHVwcGVyJAorc3luIGtleXdvcmQgT1BMU3RhdGVtZW50IHVzZSB1c3IgdXNyJCB1c3ViIHZhbCB2YXIgdmVjdG9yIHdlZWsgd2hpbGUgeWVhcgorIiBzeW4ga2V5d29yZCBPUExTdGF0ZW1lbnQgcmVtCisKKworc3luIG1hdGNoICBPUExOdW1iZXIJCSJcPFxkXCtcPiIKK3N5biBtYXRjaCAgT1BMTnVtYmVyCQkiXDxcZFwrXC5cZCpcPiIKK3N5biBtYXRjaCAgT1BMTnVtYmVyCQkiXC5cZFwrXD4iCisKK3N5biByZWdpb24gIE9QTFN0cmluZwkJc3RhcnQ9KyIrICAgZW5kPSsiKworc3luIHJlZ2lvbiAgT1BMQ29tbWVudAkJc3RhcnQ9IlJFTVtcdCBdIiBlbmQ9IiQiCitzeW4gbWF0Y2ggICBPUExNYXRoc09wZXJhdG9yICAgICItXHw9XHxbOjw+K1wqXi9cXF0iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX09QTF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9PUExfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgT1BMU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIE9QTE51bWJlcgkJTnVtYmVyCisgIEhpTGluayBPUExTdHJpbmcJCVN0cmluZworICBIaUxpbmsgT1BMQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgT1BMTWF0aHNPcGVyYXRvcglDb25kaXRpb25hbAorIiAgSGlMaW5rIE9QTEVycm9yCQlFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJvcGwiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9vcmEudmltIGIvcnVudGltZS9zeW50YXgvb3JhLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjVkMzIyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvb3JhLnZpbQpAQCAtMCwwICsxLDQ3OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CU9yYWNsZSBjb25maWcgZmlsZXMgKC5vcmEpIChPcmFjbGUgOGksIHZlci4gOC4xLjUpCisiIE1haW50YWluZXI6CVNhbmRvciBLb3BhbnlpIDxzYW5kb3Iua29wYW55aUBtYWlsYm94Lmh1PgorIiBVcmw6CQk8LT4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisKKyIgKiB0aGUga2V5d29yZHMgYXJlIGxpc3RlZCBieSBmaWxlIChzcWxuZXQub3JhLCBsaXN0ZW5lci5vcmEsIGV0Yy4pCisiICogdGhlIHBhcmF0aGVzaXMtY2hlY2tpbmcgaXMgbWFkZSBhdCB0aGUgYmVnaW5uaW5nIGZvciBhbGwga2V5d29yZHMKKyIgKiBwb3NzaWJsZSB2YWx1ZXMgYXJlIGxpc3RlZCBhbHNvCisiICogdGhlcmUgYXJlIHNvbWUgb3ZlcmxhcHBpbmdzIChlLmcuIE1FVEhPRCBpcyBtZW50aW9uZWQgYm90aCBmb3IKKyIgICBzcWxuZXQtb3JhIGFuZCB0bnNuYW1lcy5vcmE7IHNpbmNlIHdpbGwgbm90IGNhdXNlKD8pIHByb2JsZW1zCisiICAgaXMgZWFzaWVyIHRvIGZvbGxvdyBzZXBhcmF0ZWx5IGVhY2ggZmlsZSdzIGtleXdvcmRzKQorCisiIFJlbW92ZSBhbnkgb2xkIHN5bnRheCBzdHVmZiBoYW5naW5nIGFyb3VuZCwgaWYgbmVlZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBsZXQgbWFpbl9zeW50YXggPSAnb3JhJworZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyJjb21tZW50cworc3luIG1hdGNoIG9yYUNvbW1lbnQgIlwjLioiCisKKyIgY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcworc3luIHJlZ2lvbiAgb3JhUGFyZW4gdHJhbnNwYXJlbnQgc3RhcnQ9IigiIGVuZD0iKSIgY29udGFpbnM9QG9yYUFsbCxvcmFQYXJlbgorc3luIG1hdGNoICAgb3JhUGFyZW5FcnJvciAiKSIKKworIiBzdHJpbmdzCitzeW4gcmVnaW9uICBvcmFTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisKKworImNvbW1vbiAub3JhIHN0YWZmCisKKyJjb21tb24gcHJvdG9jb2wgcGFyYW1ldGVycworc3luIGtleXdvcmQgb3JhS2V5d29yZEdyb3VwICAgQUREUkVTUyBBRERSRVNTX0xJU1QKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRHcm91cCAgIERFU0NSSVBUSU9OX0xJU1QgREVTQ1JJUFRJT04KKyJhbGwgcHJvdG9jb2xzCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFBST1RPQ09MCitzeW4ga2V5d29yZCBvcmFWYWx1ZQkgICAgICBpcGMgdGNwIG5tcAorIkJlcXVlYXRoCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFBST0dSQU0gQVJHVjAgQVJHUworIklQQworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBLRVkKKyJOYW1lZCBQaXBlcworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBTRVJWRVIgUElQRQorIkxVNi4yCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIExVX05BTUUgTExVIExPQ0FMX0xVIExMVV9OQU1FIExPQ0FMX0xVX05BTUUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgTU9ERSBNRE4KK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgUExVIFBBUlRORVJfTFVfTkFNRSBQTFVfTEEgUEFSVE5FUl9MVV9MT0NBTF9BTElBUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBUUF9OQU1FIFRQTgorIlNQWAorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBTRVJWSUNFCisiVENQL0lQIGFuZCBUQ1AvSVAgd2l0aCBTU0wKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgSE9TVCBQT1JUCisKKyJtaXNjLiBrZXl3b3JkcyBJJ3ZlIG1ldCBidXQgZGlkbid0IGZpbmQgaW4gbWFudWFsIChtYXliZSB0aGV5IGFyZSBkZXByZWNhdGVkPykKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRHcm91cCBDT01NVU5JVFlfTElTVAorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgQ09NTVVOSVRZIE5BTUUgREVGQVVMVF9aT05FCitzeW4ga2V5d29yZCBvcmFWYWx1ZQkgICAgdGNwY29tCisKKyJjb21tb24gdmFsdWVzCitzeW4ga2V5d29yZCBvcmFWYWx1ZQkgICAgeWVzIG5vIG9uIG9mZiB0cnVlIGZhbHNlIG51bGwgYWxsIG5vbmUgb2sKKyJ3b3JkICd3b3JsZCcgaXMgdXNlZCBhIGxvdC4uLgorc3luIGtleXdvcmQgb3JhTW9kaWZpZXIgICAgICAgd29ybGQKKworIm1pc2MuIGNvbW1vbiBrZXl3b3Jkcworc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIFRSQUNFX0RJUkVDVE9SWSBUUkFDRV9MRVZFTCBUUkFDRV9GSUxFCisKKworInNxbG5ldC5vcmEKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRQcmVmICBOQU1FUyBOQU1FU0NUTAorc3luIGtleXdvcmQgb3JhS2V5d29yZFByZWYgIE9TUyBTT1VSQ0UgU1FMTkVUIFROU1BJTkcKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBBVVRPTUFUSUNfSVBDIEJFUVVFQVRIX0RFVEFDSCBEQUVNT04gVFJBQ0VfTUFTSworc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIERJU0FCTEVfT09CCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgTE9HX0RJUkVDVE9SWV9DTElFTlQgTE9HX0RJUkVDVE9SWV9TRVJWRVIKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBMT0dfRklMRV9DTElFTlQgTE9HX0ZJTEVfU0VSVkVSCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgRENFIFBSRUZJWCBERUZBVUxUX0RPTUFJTiBESVJFQ1RPUllfUEFUSAorc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIElOSVRJQUxfUkVUUllfVElNRU9VVCBNQVhfT1BFTl9DT05ORUNUSU9OUworc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIE1FU1NBR0VfUE9PTF9TVEFSVF9TSVpFIE5JUyBNRVRBX01BUAorc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIFBBU1NXT1JEIFBSRUZFUlJFRF9TRVJWRVJTIFJFUVVFU1RfUkVUUklFUworc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIElOVEVSTkFMX0VOQ1JZUFRfUEFTU1dPUkQgSU5URVJOQUxfVVNFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgTk9fSU5JVElBTF9TRVJWRVIgTk9DT05GSVJNCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgU0VSVkVSX1BBU1NXT1JEIFRSQUNFX1VOSVFVRSBNWV9XQUxMRVQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBMT0NBVElPTiBESVJFQ1RPUlkgTUVUSE9EIE1FVEhPRF9EQVRBCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgU1FMTkVUX0FERFJFU1MKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBBVVRIRU5USUNBVElPTl9TRVJWSUNFUworc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIEFVVEhFTlRJQ0FUSU9OX0tFUkJFUk9TNV9TRVJWSUNFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgQVVUSEVOVElDQVRJT05fR1NTQVBJX1NFUlZJQ0UKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBDTElFTlRfUkVHSVNUUkFUSU9OCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgQ1JZUFRPX0NIRUNLU1VNX0NMSUVOVCBDUllQVE9fQ0hFQ0tTVU1fU0VSVkVSCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgQ1JZUFRPX0NIRUNLU1VNX1RZUEVTX0NMSUVOVCBDUllQVE9fQ0hFQ0tTVU1fVFlQRVNfU0VSVkVSCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgQ1JZUFRPX1NFRUQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBFTkNSWVBUSU9OX0NMSUVOVCBFTkNSWVBUSU9OX1NFUlZFUgorc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIEVOQ1JZUFRJT05fVFlQRVNfQ0xJRU5UIEVOQ1JZUFRJT05fVFlQRVNfU0VSVkVSCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgRVhQSVJFX1RJTUUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBJREVOVElYX0ZJTkdFUlBSSU5UX0RBVEFCQVNFIElERU5USVhfRklOR0VSUFJJTlRfREFUQUJBU0VfVVNFUgorc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIElERU5USVhfRklOR0VSUFJJTlRfREFUQUJBU0VfUEFTU1dPUkQgSURFTlRJWF9GSU5HRVJQUklOVF9NRVRIT0QKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBLRVJCRVJPUzVfQ0NfTkFNRSBLRVJCRVJPUzVfQ0xPQ0tTS0VXIEtFUkJFUk9TNV9DT05GCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgS0VSQkVST1M1X0tFWVRBQiBLRVJCRVJPUzVfUkVBTE1TCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgUkFESVVTX0FMVEVSTkFURSBSQURJVVNfQUxURVJOQVRFX1BPUlQgUkFESVVTX0FMVEVSTkFURV9SRVRSSUVTCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgUkFESVVTX0FVVEhFTlRJQ0FUSU9OX1RJTUVPVVQgUkFESVVTX0FVVEhFTlRJQ0FUSU9OCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgUkFESVVTX0FVVEhFTlRJQ0FUSU9OX0lOVEVSRkFDRSBSQURJVVNfQVVUSEVOVElDQVRJT05fUE9SVAorc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIFJBRElVU19BVVRIRU5USUNBVElPTl9SRVRSSUVTIFJBRElVU19BVVRIRU5USUNBVElPTl9USU1FT1VUCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgUkFESVVTX0NIQUxMRU5HRV9SRVNQT05TRSBSQURJVVNfU0VDUkVUIFJBRElVU19TRU5EX0FDQ09VTlRJTkcKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBTU0xfQ0xJRU5UX0FVVEhFTlRJQ0FUSU9OIFNTTF9DSVBIRVJfU1VJVEVTIFNTTF9WRVJTSU9OCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgVFJBQ0VfRElSRUNUT1JZX0NMSUVOVCBUUkFDRV9ESVJFQ1RPUllfU0VSVkVSCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgVFJBQ0VfRklMRV9DTElFTlQgVFJBQ0VfRklMRV9TRVJWRVIKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBUUkFDRV9MRVZFTF9DTElFTlQgVFJBQ0VfTEVWRUxfU0VSVkVSCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgVFJBQ0VfVU5JUVVFX0NMSUVOVAorc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIFVTRV9DTUFOIFVTRV9ERURJQ0FURURfU0VSVkVSCitzeW4ga2V5d29yZCBvcmFWYWx1ZQkgICAgdXNlciBhZG1pbiBzdXBwb3J0CitzeW4ga2V5d29yZCBvcmFWYWx1ZQkgICAgYWNjZXB0IGFjY2VwdGVkIHJlamVjdCByZWplY3RlZCByZXF1ZXN0ZWQgcmVxdWlyZWQKK3N5biBrZXl3b3JkIG9yYVZhbHVlCSAgICBtZDUgcmM0XzQwIHJjNF81NiByYzRfMTI4IGRlcyBkZXNfNDAKK3N5biBrZXl3b3JkIG9yYVZhbHVlCSAgICB0bnNuYW1lcyBvbmFtZXMgaG9zdG5hbWUgZGNlIG5pcyBub3ZlbGwKK3N5biBrZXl3b3JkIG9yYVZhbHVlCSAgICBmaWxlIG9yYWNsZQorc3luIGtleXdvcmQgb3JhVmFsdWUJICAgIG9zcworc3luIGtleXdvcmQgb3JhVmFsdWUJICAgIGJlcSBuZHMgbnRzIGtlcmJlcm9zNSBzZWN1cmlkIGN5YmVyc2FmZSBpZGVudGl4IGRjZWdzc2FwaSByYWRpdXMKK3N5biBrZXl3b3JkIG9yYVZhbHVlCSAgICB1bmRldGVybWluZWQKKworInRuc25hbWVzLm9yYQorc3luIGtleXdvcmQgb3JhS2V5d29yZEdyb3VwIENPTk5FQ1RfREFUQSBGQUlMT1ZFUl9NT0RFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgRkFJTE9WRVIgTE9BRF9CQUxBTkNFIFNPVVJDRV9ST1VURSBUWVBFX09GX1NFUlZJQ0UKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBCQUNLVVAgVFlQRSBNRVRIT0QgR0xPQkFMX05BTUUgSFMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBJTlNUQU5DRV9OQU1FIFJEQl9EQVRBQkFTRSBTRFUgU0VSVkVSCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgU0VSVklDRV9OQU1FIFNFUlZJQ0VfTkFNRVMgU0lECitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgSEFORExFUl9OQU1FIEVYVFBST0NfQ09OTkVDVElPTl9EQVRBCitzeW4ga2V5d29yZCBvcmFWYWx1ZQkgICAgc2Vzc2lvbiBzZWxlY3QgYmFzaWMgcHJlY29ubmVjdCBkZWRpY2F0ZWQgc2hhcmVkCisKKyJsaXN0ZW5lci5vcmEKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRHcm91cCBTSURfTElTVCBTSURfREVTQyBQUkVTUEFXTl9MSVNUIFBSRVNQQVdOX0RFU0MKK3N5biBtYXRjaCAgIG9yYUtleXdvcmRHcm91cCAiU0lEX0xJU1RfXHcqIgorc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIFBST1RPQ09MX1NUQUNLIFBSRVNFTlRBVElPTiBTRVNTSU9OCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgR0xPQkFMX0RCTkFNRSBPUkFDTEVfSE9NRSBQUk9HUkFNIFNJRF9OQU1FCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgUFJFU1BBV05fTUFYIFBPT0xfU0laRSBUSU1FT1VUCitzeW4gbWF0Y2ggICBvcmFLZXl3b3JkICAgICAgIkNPTk5FQ1RfVElNRU9VVF9cdyoiCitzeW4gbWF0Y2ggICBvcmFLZXl3b3JkICAgICAgIkxPR19ESVJFQ1RPUllfXHcqIgorc3luIG1hdGNoICAgb3JhS2V5d29yZCAgICAgICJMT0dfRklMRV9cdyoiCitzeW4gbWF0Y2ggICBvcmFLZXl3b3JkICAgICAgIlBBU1NXT1JEU19cdyoiCitzeW4gbWF0Y2ggICBvcmFLZXl3b3JkICAgICAgIlNUQVJUVVBfV0FJVF9USU1FX1x3KiIKK3N5biBtYXRjaCAgIG9yYUtleXdvcmQgICAgICAiU1RBUlRVUF9XQUlUVElNRV9cdyoiCitzeW4gbWF0Y2ggICBvcmFLZXl3b3JkICAgICAgIlRSQUNFX0RJUkVDVE9SWV9cdyoiCitzeW4gbWF0Y2ggICBvcmFLZXl3b3JkICAgICAgIlRSQUNFX0ZJTEVfXHcqIgorc3luIG1hdGNoICAgb3JhS2V5d29yZCAgICAgICJUUkFDRV9MRVZFTF9cdyoiCitzeW4gbWF0Y2ggICBvcmFLZXl3b3JkICAgICAgIlVTRV9QTFVHX0FORF9QTEFZX1x3KiIKK3N5biBrZXl3b3JkIG9yYVZhbHVlCSAgICB0dGMgZ2lvcCBucyByYXcKKworIm5hbWVzLm9yYQorc3luIGtleXdvcmQgb3JhS2V5d29yZEdyb3VwIEFERFJFU1NFUyBBRE1JTl9SRUdJT04KK3N5biBrZXl3b3JkIG9yYUtleXdvcmRHcm91cCBERUZBVUxUX0ZPUldBUkRFUlMgRk9SV0FSREVSX0xJU1QgRk9SV0FSREVSCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkR3JvdXAgRE9NQUlOX0hJTlRTIEhJTlRfREVTQyBISU5UX0xJU1QKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRHcm91cCBET01BSU5TIERPTUFJTl9MSVNUIERPTUFJTgorc3luIGtleXdvcmQgb3JhS2V5d29yZFByZWYgIE5BTUVTCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgRVhQSVJFIFJFRlJFU0ggUkVHSU9OIFJFVFJZIFVTRVJJRCBWRVJTSU9OCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgQVVUSE9SSVRZX1JFUVVJUkVEIENPTk5FQ1RfVElNRU9VVAorc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIEFVVE9fUkVGUkVTSF9FWFBJUkUgQVVUT19SRUZSRVNIX1JFVFJZCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgQ0FDSEVfQ0hFQ0tQT0lOVF9GSUxFIENBQ0hFX0NIRUNLUE9JTlRfSU5URVJWQUwKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBDT05GSUdfQ0hFQ0tQT0lOVF9GSUxFIERFRkFVTFRfRk9SV0FSREVSU19PTkxZCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgSElOVCBGT1JXQVJESU5HX0FWQUlMQUJMRSBGT1JXQVJESU5HX0RFU0lSRUQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBLRUVQX0RCX09QRU4KK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBMT0dfRElSRUNUT1JZIExPR19GSUxFIExPR19TVEFUU19JTlRFUlZBTCBMT0dfVU5JUVVFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgTUFYX09QRU5fQ09OTkVDVElPTlMgTUFYX1JFRk9SV0FSRFMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBNRVNTQUdFX1BPT0xfU1RBUlRfU0laRQorc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIE5PX01PRElGWV9SRVFVRVNUUyBOT19SRUdJT05fREFUQUJBU0UKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQgICAgICBQQVNTV09SRCBSRUdJT05fQ0hFQ0tQT0lOVF9GSUxFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkICAgICAgUkVTRVRfU1RBVFNfSU5URVJWQUwgU0FWRV9DT05GSUdfT05fU1RPUAorc3luIGtleXdvcmQgb3JhS2V5d29yZCAgICAgIFNFUlZFUl9OQU1FIFRSQUNFX0ZVTkMgVFJBQ0VfVU5JUVVFCisKKyJjbWFuLm9yYQorc3luIGtleXdvcmQgb3JhS2V5d29yZEdyb3VwICAgQ01BTiBDTUFOX0FETUlOIENNQU5fUFJPRklMRSBQQVJBTUVURVJfTElTVAorc3luIGtleXdvcmQgb3JhS2V5d29yZEdyb3VwICAgQ01BTl9SVUxFUyBSVUxFU19MSVNUIFJVTEUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgQU5TV0VSX1RJTUVPVVQgQVVUSEVOVElDQVRJT05fTEVWRUwgTE9HX0xFVkVMCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIE1BWF9GUkVFTElTVF9CVUZGRVJTIE1BWElNVU1fQ09OTkVDVF9EQVRBIE1BWElNVU1fUkVMQVlTCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFJFTEFZX1NUQVRJU1RJQ1MgU0hPV19UTlNfSU5GTyBUUkFDSU5HCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFVTRV9BU1lOQ19DQUxMIFNSQyBEU1QgU1JWIEFDVAorCisicHJvdG9jb2wub3JhCitzeW4gbWF0Y2ggb3JhS2V5d29yZAkgICAgICAiXHcqXC5FWENMVURFRF9OT0RFUyIKK3N5biBtYXRjaCBvcmFLZXl3b3JkCSAgICAgICJcdypcLklOVklURURfTk9ERVMiCitzeW4gbWF0Y2ggb3JhS2V5d29yZAkgICAgICAiXHcqXC5WQUxJRE5PREVfQ0hFQ0tJTkciCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFRDUCBOT0RFTEFZCisKKworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyJpbml0Lm9yYQorCisiY29tbW9uIHZhbHVlcworc3luIGtleXdvcmQgb3JhVmFsdWUJICAgICAgbmVzdGVkX2xvb3BzIG1lcmdlIGhhc2ggdW5saW1pdGVkCisKKyJpbml0IHBhcmFtcworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBPN19ESUNUSU9OQVJZX0FDQ0VTU0lCSUxJVFkgQUxXQVlTX0FOVElfSk9JTiBBTFdBWVNfU0VNSV9KT0lOCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIEFRX1RNX1BST0NFU1NFUyBBUkNIX0lPX1NMQVZFUyBBVURJVF9GSUxFX0RFU1QgQVVESVRfVFJBSUwKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgQkFDS0dST1VORF9DT1JFX0RVTVAgQkFDS0dST1VORF9EVU1QX0RFU1QKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgQkFDS1VQX1RBUEVfSU9fU0xBVkVTIEJJVE1BUF9NRVJHRV9BUkVBX1NJWkUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgQkxBTktfVFJJTU1JTkcgQlVGRkVSX1BPT0xfS0VFUCBCVUZGRVJfUE9PTF9SRUNZQ0xFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIENPTU1JVF9QT0lOVF9TVFJFTkdUSCBDT01QQVRJQkxFIENPTlRST0xfRklMRV9SRUNPUkRfS0VFUF9USU1FCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIENPTlRST0xfRklMRVMgQ09SRV9EVU1QX0RFU1QgQ1BVX0NPVU5UCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIENSRUFURV9CSVRNQVBfQVJFQV9TSVpFIENVUlNPUl9TUEFDRV9GT1JfVElNRQorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBEQl9CTE9DS19CVUZGRVJTIERCX0JMT0NLX0NIRUNLSU5HIERCX0JMT0NLX0NIRUNLU1VNCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIERCX0JMT0NLX0xSVV9MQVRDSEVTIERCX0JMT0NLX01BWF9ESVJUWV9UQVJHRVQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgREJfQkxPQ0tfU0laRSBEQl9ET01BSU4KK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgREJfRklMRV9ESVJFQ1RfSU9fQ09VTlQgREJfRklMRV9NVUxUSUJMT0NLX1JFQURfQ09VTlQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgREJfRklMRV9OQU1FX0NPTlZFUlQgREJfRklMRV9TSU1VTFRBTkVPVVNfV1JJVEVTCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIERCX0ZJTEVTIERCX05BTUUgREJfV1JJVEVSX1BST0NFU1NFUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBEQkxJTktfRU5DUllQVF9MT0dJTiBEQldSX0lPX1NMQVZFUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBERUxBWUVEX0xPR0dJTkdfQkxPQ0tfQ0xFQU5PVVRTIERJU0NSRVRFX1RSQU5TQUNUSU9OU19FTkFCTEVECitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIERJU0tfQVNZTkNIX0lPIERJU1RSSUJVVEVEX1RSQU5TQUNUSU9OUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBETUxfTE9DS1MgRU5RVUVVRV9SRVNPVVJDRVMgRU5UX0RPTUFJTl9OQU1FIEVWRU5UCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIEZBU1RfU1RBUlRfSU9fVEFSR0VUIEZBU1RfU1RBUlRfUEFSQUxMRUxfUk9MTEJBQ0sKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgRklYRURfREFURSBGUkVFWkVfREJfRk9SX0ZBU1RfSU5TVEFOQ0VfUkVDT1ZFUlkKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgR0NfREVGRVJfVElNRSBHQ19GSUxFU19UT19MT0NLUyBHQ19SRUxFQVNBQkxFX0xPQ0tTIEdDX1JPTExCQUNLX0xPQ0tTCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIEdMT0JBTF9OQU1FUyBIQVNIX0FSRUFfU0laRQorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBIQVNIX0pPSU5fRU5BQkxFRCBIQVNIX01VTFRJQkxPQ0tfSU9fQ09VTlQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgSElfU0hBUkVEX01FTU9SWV9BRERSRVNTIEhTX0FVVE9SRUdJU1RFUgorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBJRklMRQorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBJTlNUQU5DRV9HUk9VUFMgSU5TVEFOQ0VfTkFNRSBJTlNUQU5DRV9OVU1CRVIKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgSkFWQV9QT09MX1NJWkUgSk9CX1FVRVVFX0lOVEVSVkFMIEpPQl9RVUVVRV9QUk9DRVNTRVMgTEFSR0VfUE9PTF9TSVpFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIExJQ0VOU0VfTUFYX1NFU1NJT05TIExJQ0VOU0VfTUFYX1VTRVJTIExJQ0VOU0VfU0VTU0lPTlNfV0FSTklORworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBMTV9MT0NLUyBMTV9QUk9DUyBMTV9SRVNTCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIExPQ0FMX0xJU1RFTkVSIExPQ0tfTkFNRV9TUEFDRSBMT0NLX1NHQSBMT0NLX1NHQV9BUkVBUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBMT0dfQVJDSElWRV9CVUZGRVJfU0laRSBMT0dfQVJDSElWRV9CVUZGRVJTIExPR19BUkNISVZFX0RFU1QKK3N5biBtYXRjaCAgIG9yYUtleXdvcmQJICAgICAgIkxPR19BUkNISVZFX0RFU1RfXCgxXHwyXHwzXHw0XHw1XCkiCitzeW4gbWF0Y2ggICBvcmFLZXl3b3JkCSAgICAgICJMT0dfQVJDSElWRV9ERVNUX1NUQVRFX1woMVx8Mlx8M1x8NFx8NVwpIgorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBMT0dfQVJDSElWRV9EVVBMRVhfREVTVCBMT0dfQVJDSElWRV9GT1JNQVQgTE9HX0FSQ0hJVkVfTUFYX1BST0NFU1NFUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBMT0dfQVJDSElWRV9NSU5fU1VDQ0VFRF9ERVNUIExPR19BUkNISVZFX1NUQVJUCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIExPR19CVUZGRVIgTE9HX0NIRUNLUE9JTlRfSU5URVJWQUwgTE9HX0NIRUNLUE9JTlRfVElNRU9VVAorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBMT0dfQ0hFQ0tQT0lOVFNfVE9fQUxFUlQgTE9HX0ZJTEVfTkFNRV9DT05WRVJUCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIE1BWF9DT01NSVRfUFJPUEFHQVRJT05fREVMQVkgTUFYX0RVTVBfRklMRV9TSVpFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIE1BWF9FTkFCTEVEX1JPTEVTIE1BWF9ST0xMQkFDS19TRUdNRU5UUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBNVFNfRElTUEFUQ0hFUlMgTVRTX01BWF9ESVNQQVRDSEVSUyBNVFNfTUFYX1NFUlZFUlMgTVRTX1NFUlZFUlMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgTkxTX0NBTEVOREFSIE5MU19DT01QIE5MU19DVVJSRU5DWSBOTFNfREFURV9GT1JNQVQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgTkxTX0RBVEVfTEFOR1VBR0UgTkxTX0RVQUxfQ1VSUkVOQ1kgTkxTX0lTT19DVVJSRU5DWSBOTFNfTEFOR1VBR0UKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgTkxTX05VTUVSSUNfQ0hBUkFDVEVSUyBOTFNfU09SVCBOTFNfVEVSUklUT1JZCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIE9CSkVDVF9DQUNIRV9NQVhfU0laRV9QRVJDRU5UIE9CSkVDVF9DQUNIRV9PUFRJTUFMX1NJWkUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgT1BFTl9DVVJTT1JTIE9QRU5fTElOS1MgT1BFTl9MSU5LU19QRVJfSU5TVEFOQ0UKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgT1BTX0FETUlOSVNUUkFUSU9OX0dST1VQCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIE9QVElNSVpFUl9GRUFUVVJFU19FTkFCTEUgT1BUSU1JWkVSX0lOREVYX0NBQ0hJTkcKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgT1BUSU1JWkVSX0lOREVYX0NPU1RfQURKIE9QVElNSVpFUl9NQVhfUEVSTVVUQVRJT05TCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIE9QVElNSVpFUl9NT0RFIE9QVElNSVpFUl9QRVJDRU5UX1BBUkFMTEVMCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIE9QVElNSVpFUl9TRUFSQ0hfTElNSVQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgT1JBQ0xFX1RSQUNFX0NPTExFQ1RJT05fTkFNRSBPUkFDTEVfVFJBQ0VfQ09MTEVDVElPTl9QQVRICitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIE9SQUNMRV9UUkFDRV9DT0xMRUNUSU9OX1NJWkUgT1JBQ0xFX1RSQUNFX0VOQUJMRQorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBPUkFDTEVfVFJBQ0VfRkFDSUxJVFlfTkFNRSBPUkFDTEVfVFJBQ0VfRkFDSUxJVFlfUEFUSAorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBPU19BVVRIRU5UX1BSRUZJWCBPU19ST0xFUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBQQVJBTExFTF9BREFQVElWRV9NVUxUSV9VU0VSIFBBUkFMTEVMX0FVVE9NQVRJQ19UVU5JTkcKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgUEFSQUxMRUxfQlJPQURDQVNUX0VOQUJMRUQgUEFSQUxMRUxfRVhFQ1VUSU9OX01FU1NBR0VfU0laRQorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBQQVJBTExFTF9JTlNUQU5DRV9HUk9VUCBQQVJBTExFTF9NQVhfU0VSVkVSUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBQQVJBTExFTF9NSU5fUEVSQ0VOVCBQQVJBTExFTF9NSU5fU0VSVkVSUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBQQVJBTExFTF9TRVJWRVIgUEFSQUxMRUxfU0VSVkVSX0lOU1RBTkNFUyBQQVJBTExFTF9USFJFQURTX1BFUl9DUFUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgUEFSVElUSU9OX1ZJRVdfRU5BQkxFRCBQTFNRTF9WMl9DT01QQVRJQklMSVRZCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFBSRV9QQUdFX1NHQSBQUk9DRVNTRVMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgUVVFUllfUkVXUklURV9FTkFCTEVEIFFVRVJZX1JFV1JJVEVfSU5URUdSSVRZCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFJEQk1TX1NFUlZFUl9ETiBSRUFEX09OTFlfT1BFTl9ERUxBWUVEIFJFQ09WRVJZX1BBUkFMTEVMSVNNCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFJFTU9URV9ERVBFTkRFTkNJRVNfTU9ERSBSRU1PVEVfTE9HSU5fUEFTU1dPUkRGSUxFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFJFTU9URV9PU19BVVRIRU5UIFJFTU9URV9PU19ST0xFUworc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBSRVBMSUNBVElPTl9ERVBFTkRFTkNZX1RSQUNLSU5HCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFJFU09VUkNFX0xJTUlUIFJFU09VUkNFX01BTkFHRVJfUExBTgorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBST0xMQkFDS19TRUdNRU5UUyBST1dfTE9DS0lORyBTRVJJQUwgX1JFVVNFIFNFUlZJQ0VfTkFNRVMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgU0VTU0lPTl9DQUNIRURfQ1VSU09SUyBTRVNTSU9OX01BWF9PUEVOX0ZJTEVTIFNFU1NJT05TCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFNIQURPV19DT1JFX0RVTVAKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgU0hBUkVEX01FTU9SWV9BRERSRVNTIFNIQVJFRF9QT09MX1JFU0VSVkVEX1NJWkUgU0hBUkVEX1BPT0xfU0laRQorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBTT1JUX0FSRUFfUkVUQUlORURfU0laRSBTT1JUX0FSRUFfU0laRSBTT1JUX01VTFRJQkxPQ0tfUkVBRF9DT1VOVAorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBTUUw5Ml9TRUNVUklUWSBTUUxfVFJBQ0UgU1RBTkRCWV9BUkNISVZFX0RFU1QKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgU1RBUl9UUkFOU0ZPUk1BVElPTl9FTkFCTEVEIFRBUEVfQVNZTkNIX0lPIFRIUkVBRAorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBUSU1FRF9PU19TVEFUSVNUSUNTIFRJTUVEX1NUQVRJU1RJQ1MKK3N5biBrZXl3b3JkIG9yYUtleXdvcmQJICAgICAgVFJBTlNBQ1RJT05fQVVESVRJTkcgVFJBTlNBQ1RJT05TIFRSQU5TQUNUSU9OU19QRVJfUk9MTEJBQ0tfU0VHTUVOVAorc3luIGtleXdvcmQgb3JhS2V5d29yZAkgICAgICBVU0VfSU5ESVJFQ1RfREFUQV9CVUZGRVJTIFVTRVJfRFVNUF9ERVNUCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkCSAgICAgIFVUTF9GSUxFX0RJUgorc3luIGtleXdvcmQgb3JhS2V5d29yZE9icyAgICAgQUxMT1dfUEFSVElBTF9TTl9SRVNVTFRTIEJfVFJFRV9CSVRNQVBfUExBTlMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRPYnMgICAgIEJBQ0tVUF9ESVNLX0lPX1NMQVZFUyBDQUNIRV9TSVpFX1RIUkVTSE9MRAorc3luIGtleXdvcmQgb3JhS2V5d29yZE9icyAgICAgQ0NGX0lPX1NJWkUgQ0xFQU5VUF9ST0xMQkFDS19FTlRSSUVTCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkT2JzICAgICBDTE9TRV9DQUNIRURfT1BFTl9DVVJTT1JTIENPTVBBVElCTEVfTk9fUkVDT1ZFUlkKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRPYnMgICAgIENPTVBMRVhfVklFV19NRVJHSU5HCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkT2JzICAgICBEQl9CTE9DS19DSEVDS1BPSU5UX0JBVENIIERCX0JMT0NLX0xSVV9FWFRFTkRFRF9TVEFUSVNUSUNTCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkT2JzICAgICBEQl9CTE9DS19MUlVfU1RBVElTVElDUworc3luIGtleXdvcmQgb3JhS2V5d29yZE9icyAgICAgRElTVFJJQlVURURfTE9DS19USU1FT1VUIERJU1RSSUJVVEVEX1JFQ09WRVJZX0NPTk5FQ1RJT05fSE9MRF9USU1FCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkT2JzICAgICBGQVNUX0ZVTExfU0NBTl9FTkFCTEVEIEdDX0xBVENIRVMgR0NfTENLX1BST0NTCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkT2JzICAgICBMQVJHRV9QT09MX01JTl9BTExPQyBMR1dSX0lPX1NMQVZFUworc3luIGtleXdvcmQgb3JhS2V5d29yZE9icyAgICAgTE9HX0JMT0NLX0NIRUNLU1VNIExPR19GSUxFUworc3luIGtleXdvcmQgb3JhS2V5d29yZE9icyAgICAgTE9HX1NJTVVMVEFORU9VU19DT1BJRVMgTE9HX1NNQUxMX0VOVFJZX01BWF9TSVpFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkT2JzICAgICBNQVhfVFJBTlNBQ1RJT05fQlJBTkNIRVMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRPYnMgICAgIE1UU19MSVNURU5FUl9BRERSRVNTIE1UU19NVUxUSVBMRV9MSVNURU5FUlMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRPYnMgICAgIE1UU19SQVRFX0xPR19TSVpFIE1UU19SQVRFX1NDQUxFIE1UU19TRVJWSUNFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkT2JzICAgICBPR01TX0hPTUUgT1BTX0FETUlOX0dST1VQCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkT2JzICAgICBQQVJBTExFTF9ERUZBVUxUX01BWF9JTlNUQU5DRVMgUEFSQUxMRUxfTUlOX01FU1NBR0VfUE9PTAorc3luIGtleXdvcmQgb3JhS2V5d29yZE9icyAgICAgUEFSQUxMRUxfU0VSVkVSX0lETEVfVElNRSBQQVJBTExFTF9UUkFOU0FDVElPTl9SRVNPVVJDRV9USU1FT1VUCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkT2JzICAgICBQVVNIX0pPSU5fUFJFRElDQVRFIFJFRFVDRV9BTEFSTSBST1dfQ0FDSEVfQ1VSU09SUworc3luIGtleXdvcmQgb3JhS2V5d29yZE9icyAgICAgU0VRVUVOQ0VfQ0FDSEVfRU5UUklFUyBTRVFVRU5DRV9DQUNIRV9IQVNIX0JVQ0tFVFMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRPYnMgICAgIFNIQVJFRF9QT09MX1JFU0VSVkVEX01JTl9BTExPQworc3luIGtleXdvcmQgb3JhS2V5d29yZE9icyAgICAgU09SVF9ESVJFQ1RfV1JJVEVTIFNPUlRfUkVBRF9GQUMgU09SVF9TUEFDRU1BUF9TSVpFCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkT2JzICAgICBTT1JUX1dSSVRFX0JVRkZFUl9TSVpFIFNPUlRfV1JJVEVfQlVGRkVSUworc3luIGtleXdvcmQgb3JhS2V5d29yZE9icyAgICAgU1BJTl9DT1VOVCBURU1QT1JBUllfVEFCTEVfTE9DS1MgVVNFX0lTTQorc3luIGtleXdvcmQgb3JhVmFsdWUJICAgICAgZGIgb3MgZnVsbCBwYXJ0aWFsIG1hbmRhdG9yeSBvcHRpb25hbCByZW9wZW4gZW5hYmxlIGRlZmVyCitzeW4ga2V5d29yZCBvcmFWYWx1ZQkgICAgICBhbHdheXMgZGVmYXVsdCBpbnRlbnQgZGlzYWJsZSBkbWwgcGxzcWwgdGVtcF9kaXNhYmxlCitzeW4gbWF0Y2ggICBvcmF2YWx1ZQkgICAgICAiQXJhYmljIEhpanJhaCIKK3N5biBtYXRjaCAgIG9yYXZhbHVlCSAgICAgICJFbmdsaXNoIEhpanJhaCIKK3N5biBtYXRjaCAgIG9yYXZhbHVlCSAgICAgICJHcmVnb3JpYW4iCitzeW4gbWF0Y2ggICBvcmF2YWx1ZQkgICAgICAiSmFwYW5lc2UgSW1wZXJpYWwiCitzeW4gbWF0Y2ggICBvcmF2YWx1ZQkgICAgICAiUGVyc2lhbiIKK3N5biBtYXRjaCAgIG9yYXZhbHVlCSAgICAgICJST0MgT2ZmaWNpYWwiCitzeW4gbWF0Y2ggICBvcmF2YWx1ZQkgICAgICAiVGhhaSBCdWRkaGEiCitzeW4gbWF0Y2ggICBvcmF2YWx1ZQkgICAgICAiOC4wLjAiCitzeW4gbWF0Y2ggICBvcmF2YWx1ZQkgICAgICAiOC4wLjMiCitzeW4gbWF0Y2ggICBvcmF2YWx1ZQkgICAgICAiOC4wLjQiCitzeW4gbWF0Y2ggICBvcmF2YWx1ZQkgICAgICAiOC4xLjMiCitzeW4gbWF0Y2ggb3JhTW9kaWZpZXIJICAgICAgImFyY2hpdmVkIGxvZyIKK3N5biBtYXRjaCBvcmFNb2RpZmllcgkgICAgICAiYmFja3VwIGNvcnJ1cHRpb24iCitzeW4gbWF0Y2ggb3JhTW9kaWZpZXIJICAgICAgImJhY2t1cCBkYXRhZmlsZSIKK3N5biBtYXRjaCBvcmFNb2RpZmllcgkgICAgICAiYmFja3VwIHBpZWNlICAiCitzeW4gbWF0Y2ggb3JhTW9kaWZpZXIJICAgICAgImJhY2t1cCByZWRvIGxvZyIKK3N5biBtYXRjaCBvcmFNb2RpZmllcgkgICAgICAiYmFja3VwIHNldCIKK3N5biBtYXRjaCBvcmFNb2RpZmllcgkgICAgICAiY29weSBjb3JydXB0aW9uIgorc3luIG1hdGNoIG9yYU1vZGlmaWVyCSAgICAgICJkYXRhZmlsZSBjb3B5Igorc3luIG1hdGNoIG9yYU1vZGlmaWVyCSAgICAgICJkZWxldGVkIG9iamVjdCIKK3N5biBtYXRjaCBvcmFNb2RpZmllcgkgICAgICAibG9naGlzdG9yeSIKK3N5biBtYXRjaCBvcmFNb2RpZmllcgkgICAgICAib2ZmbGluZSByYW5nZSIKKworInVuZG9jdW1lbnRlZCBpbml0IHBhcmFtcworInVwIHRvIDcuMiAoaW5jbHVzaXZlKQorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX2xhdGNoX3NwaW5fY291bnQgX3RyYWNlX2luc3RhbmNlX3Rlcm1pbmF0aW9uCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kT2JzICBfd2FrZXVwX3RpbWVvdXQgX2xnd3JfYXN5bmNfd3JpdGUKKyI3LjMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9zdGFuZGJ5X2xvY2tfc3BhY2VfbmFtZSBfZW5hYmxlX2RiYV9sb2NraW5nCisiOC4wLjUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9OVU1BX2luc3RhbmNlX21hcHBpbmcgX05VTUFfcG9vbF9zaXplCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfYWR2YW5jZWRfZHNzX2ZlYXR1cmVzIF9hZmZpbml0eV9vbiBfYWxsX3NoYXJlZF9kYmxpbmtzCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfYWxsb2NhdGVfY3JlYXRpb25fb3JkZXIgX2FsbG93X3Jlc2V0bG9nc19jb3JydXB0aW9uCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfYWx3YXlzX3N0YXJfdHJhbnNmb3JtYXRpb24gX2J1bXBfaGlnaHdhdGVyX21hcmtfY291bnQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9jb2x1bW5fZWxpbWluYXRpb25fb2ZmIF9jb250cm9sZmlsZV9lbnF1ZXVlX3RpbWVvdXQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9jb3JydXB0X2Jsb2Nrc19vbl9zdHVja19yZWNvdmVyeSBfY29ycnVwdGVkX3JvbGxiYWNrX3NlZ21lbnRzCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfY3JfZGVhZHRpbWUgX2N1cnNvcl9kYl9idWZmZXJzX3Bpbm5lZAorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX2RiX2Jsb2NrX2NhY2hlX2Nsb25lIF9kYl9ibG9ja19jYWNoZV9tYXAgX2RiX2Jsb2NrX2NhY2hlX3Byb3RlY3QKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9kYl9ibG9ja19oYXNoX2J1Y2tldHMgX2RiX2Jsb2NrX2hpX3ByaW9yaXR5X2JhdGNoX3NpemUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9kYl9ibG9ja19tYXhfY3JfZGJhIF9kYl9ibG9ja19tYXhfc2Nhbl9jbnQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9kYl9ibG9ja19tZWRfcHJpb3JpdHlfYmF0Y2hfc2l6ZSBfZGJfYmxvY2tfbm9faWRsZV93cml0ZXMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9kYl9ibG9ja193cml0ZV9iYXRjaCBfZGJfaGFuZGxlcyBfZGJfaGFuZGxlc19jYWNoZWQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9kYl9sYXJnZV9kaXJ0eV9xdWV1ZSBfZGJfbm9fbW91bnRfbG9jaworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX2RiX3dyaXRlcl9oaXN0b2dyYW1fc3RhdGlzdGljcyBfZGJfd3JpdGVyX3NjYW5fZGVwdGgKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9kYl93cml0ZXJfc2Nhbl9kZXB0aF9kZWNyZW1lbnQgX2RiX3dyaXRlcl9zY2FuX2RlcHRoX2luY3JlbWVudAorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX2Rpc2FibGVfaW5jcmVtZW50YWxfY2hlY2twb2ludHMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9kaXNhYmxlX2xhdGNoX2ZyZWVfU0NOX3dyaXRlc192aWFfMzJjYXMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9kaXNhYmxlX2xhdGNoX2ZyZWVfU0NOX3dyaXRlc192aWFfNjRjYXMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9kaXNhYmxlX2xvZ2dpbmcgX2Rpc2FibGVfbnRsb2dfZXZlbnRzCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfZHNzX2NhY2hlX2ZsdXNoIF9keW5hbWljX3N0YXRzX3RocmVzaG9sZAorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX2VuYWJsZV9jc2NuX2NhY2hpbmcgX2VuYWJsZV9kZWZhdWx0X2FmZmluaXR5CitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfZW5xdWV1ZV9kZWJ1Z19tdWx0aV9pbnN0YW5jZSBfZW5xdWV1ZV9oYXNoCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfZW5xdWV1ZV9oYXNoX2NoYWluX2xhdGNoZXMgX2VucXVldWVfbG9ja3MKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9maWZ0aF9zcGFyZV9wYXJhbWV0ZXIgX2ZpcnN0X3NwYXJlX3BhcmFtZXRlciBfZm91cnRoX3NwYXJlX3BhcmFtZXRlcgorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX2djX2NsYXNzX2xvY2tzIF9ncm91cGJ5X25vcHVzaGRvd25fY3V0X3JhdGlvCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfaWRsX2NvbnZlbnRpb25hbF9pbmRleF9tYWludGVuYW5jZSBfaWdub3JlX2ZhaWxlZF9lc2NhbGF0ZXMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9pbml0X3NxbF9maWxlCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfaW9fc2xhdmVzX2Rpc2FibGVkIF9pb3NsYXZlX2JhdGNoX2NvdW50IF9pb3NsYXZlX2lzc3VlX2NvdW50CitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfa2dsX2J1Y2tldF9jb3VudCBfa2dsX2xhdGNoX2NvdW50IF9rZ2xfbXVsdGlfaW5zdGFuY2VfaW52YWxpZGF0aW9uCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfa2dsX211bHRpX2luc3RhbmNlX2xvY2sgX2tnbF9tdWx0aV9pbnN0YW5jZV9waW4KK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9sYXRjaF9taXNzX3N0YXRfc2lkIF9sYXRjaF9yZWNvdmVyeV9hbGlnbm1lbnQgX2xhdGNoX3dhaXRfcG9zdGluZworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX2xtX2FzdF9vcHRpb24gX2xtX2RpcmVjdF9zZW5kcyBfbG1fZGxtZF9wcm9jcyBfbG1fZG9tYWlucyBfbG1fZ3JvdXBzCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfbG1fbm9uX2ZhdWx0X3RvbGVyYW50IF9sbV9zZW5kX2J1ZmZlcnMgX2xtX3N0YXRpc3RpY3MgX2xtX3hpZHMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9sb2dfYmxvY2tzX2R1cmluZ19iYWNrdXAgX2xvZ19idWZmZXJzX2RlYnVnIF9sb2dfY2hlY2twb2ludF9yZWNvdmVyeV9jaGVjaworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX2xvZ19kZWJ1Z19tdWx0aV9pbnN0YW5jZSBfbG9nX2VudHJ5X3ByZWJ1aWxkX3RocmVzaG9sZCBfbG9nX2lvX3NpemUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9sb2dfc3BhY2VfZXJyb3JzCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfbWF4X2V4cG9uZW50aWFsX3NsZWVwIF9tYXhfc2xlZXBfaG9sZGluZ19sYXRjaAorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX21lc3NhZ2VzIF9taW5pbXVtX2dpZ2Ffc2NuIF9tdHNfbG9hZF9jb25zdGFudHMgX25lc3RlZF9sb29wX2Z1ZGdlCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfbm9fb2JqZWN0cyBfbm9fb3JfZXhwYW5zaW9uCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfbnVtYmVyX2NhY2hlZF9hdHRyaWJ1dGVzIF9vZmZsaW5lX3JvbGxiYWNrX3NlZ21lbnRzIF9vcGVuX2ZpbGVzX2xpbWl0CitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfb3B0aW1pemVyX3VuZG9fY2hhbmdlcworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX29yYWNsZV90cmFjZV9ldmVudHMgX29yYWNsZV90cmFjZV9mYWNpbGl0eV92ZXJzaW9uCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfb3JkZXJlZF9uZXN0ZWRfbG9vcCBfcGFyYWxsZWxfc2VydmVyX3NsZWVwX3RpbWUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9wYXNzd29yZGZpbGVfZW5xdWV1ZV90aW1lb3V0IF9wZG1sX3NsYXZlc19kaWZmX3BhcnQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9wbHNxbF9kdW1wX2J1ZmZlcl9ldmVudHMgX3ByZWRpY2F0ZV9lbGltaW5hdGlvbl9lbmFibGVkCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfcHJvamVjdF92aWV3X2NvbHVtbnMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9weF9icm9hZGNhc3RfZnVkZ2VfZmFjdG9yIF9weF9icm9hZGNhc3RfdHJhY2UgX3B4X2RvcF9saW1pdF9kZWdyZWUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9weF9kb3BfbGltaXRfdGhyZXNob2xkIF9weF9reGZyX2dyYW51bGVfYWxsb2NhdGlvbiBfcHhfa3hpYl90cmFjaW5nCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfcmVsZWFzZV9pbnNlcnRfdGhyZXNob2xkIF9yZXVzZV9pbmRleF9sb29wCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfcm9sbGJhY2tfc2VnbWVudF9jb3VudCBfcm9sbGJhY2tfc2VnbWVudF9pbml0aWFsCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfcm93X2NhY2hlX2J1ZmZlcl9zaXplIF9yb3dfY2FjaGVfaW5zdGFuY2VfbG9ja3MKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF9zYXZlX2VzY2FsYXRlcyBfc2NuX3NjaGVtZQorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX3NlY29uZF9zcGFyZV9wYXJhbWV0ZXIgX3Nlc3Npb25faWRsZV9iaXRfbGF0Y2hlcworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX3NoYXJlZF9zZXNzaW9uX3NvcnRfZmV0Y2hfYnVmZmVyIF9zaW5nbGVfcHJvY2Vzcworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX3NtYWxsX3RhYmxlX3RocmVzaG9sZCBfc3FsX2Nvbm5lY3RfY2FwYWJpbGl0eV9vdmVycmlkZQorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX3NxbF9jb25uZWN0X2NhcGFiaWxpdHlfdGFibGUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmQgICAgIF90ZXN0X3BhcmFtXzEgX3Rlc3RfcGFyYW1fMiBfdGVzdF9wYXJhbV8zCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kICAgICBfdGhpcmRfc3BhcmVfcGFyYW1ldGVyIF90cV9kdW1wX3BlcmlvZAorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX3RyYWNlX2FyY2hpdmVfZGVzdCBfdHJhY2VfYXJjaGl2ZV9zdGFydCBfdHJhY2VfYmxvY2tfc2l6ZQorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX3RyYWNlX2J1ZmZlcnNfcGVyX3Byb2Nlc3MgX3RyYWNlX2VuYWJsZWQgX3RyYWNlX2V2ZW50cworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX3RyYWNlX2ZpbGVfc2l6ZSBfdHJhY2VfZmlsZXNfcHVibGljIF90cmFjZV9mbHVzaGluZyBfdHJhY2Vfd3JpdGVfYmF0Y2hfc2l6ZQorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZCAgICAgX3VwY29udmVydF9mcm9tX2FzdCBfdXNlX3ZlY3Rvcl9wb3N0IF93YWl0X2Zvcl9zeW5jIF93YWxrX2luc2VydF90aHJlc2hvbGQKKyJkdW5ubyB3aGljaCB2ZXJzaW9uOyBtYXkgYmUgOC4xLngsIG1heSBiZSBvYnNvbGV0ZWQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9hcmNoX2lvX3NsYXZlcyBfYXZlcmFnZV9kaXJ0aWVzX2hhbGZfbGlmZSBfYl90cmVlX2JpdG1hcF9wbGFucworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX2JhY2t1cF9kaXNrX2lvX3NsYXZlcyBfYmFja3VwX2lvX3Bvb2xfc2l6ZQorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX2NsZWFudXBfcm9sbGJhY2tfZW50cmllcyBfY2xvc2VfY2FjaGVkX29wZW5fY3Vyc29ycworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX2NvbXBhdGlibGVfbm9fcmVjb3ZlcnkgX2NvbXBsZXhfdmlld19tZXJnaW5nCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kT2JzICBfY3B1X3RvX2lvIF9jcl9zZXJ2ZXIKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9kYl9hZ2luZ19jb29sX2NvdW50IF9kYl9hZ2luZ19mcmVlemVfY3IgX2RiX2FnaW5nX2hvdF9jcml0ZXJpYQorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX2RiX2FnaW5nX3N0YXlfY291bnQgX2RiX2FnaW5nX3RvdWNoX3RpbWUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9kYl9wZXJjZW50X2hvdF9kZWZhdWx0IF9kYl9wZXJjZW50X2hvdF9rZWVwIF9kYl9wZXJjZW50X2hvdF9yZWN5Y2xlCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kT2JzICBfZGJfd3JpdGVyX2NodW5rX3dyaXRlcyBfZGJfd3JpdGVyX21heF93cml0ZXMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9kYndyX2FzeW5jX2lvIF9kYndyX3RyYWNpbmcKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9kZWZlcl9tdWx0aXBsZV93YWl0ZXJzIF9kaXNjcmV0ZV90cmFuc2FjdGlvbl9lbmFibGVkCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kT2JzICBfZGlzdHJpYnV0ZWRfbG9ja190aW1lb3V0IF9kaXN0cmlidXRlZF9yZWNvdmVyeSBfZGlzdHJpYml0ZWRfcmVjb3ZlcnlfCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kT2JzICBfZG9tYWluX2luZGV4X2JhdGNoX3NpemUgX2RvbWFpbl9pbmRleF9kbWxfYmF0Y2hfc2l6ZQorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX2VuYWJsZV9OVU1BX29wdGltaXphdGlvbiBfZW5hYmxlX2Jsb2NrX2xldmVsX3RyYW5zYWN0aW9uX3JlY292ZXJ5CitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kT2JzICBfZW5hYmxlX2xpc3RfaW8gX2VuYWJsZV9tdWx0aXBsZV9zYW1wbGluZworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX2ZhaXJuZXNzX3RyZXNob2xkIF9mYXN0X2Z1bGxfc2Nhbl9lbmFibGVkIF9mb3JlZ3JvdW5kX2xvY2tzCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kT2JzICBfZnVsbF9wd2lzZV9qb2luX2VuYWJsZWQgX2djX2xhdGNoZXMgX2djX2xja19wcm9jcworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX2hpZ2hfc2VydmVyX3RyZXNob2xkIF9pbmRleF9wcmVmZXRjaF9mYWN0b3IgX2tjbF9kZWJ1Zworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX2trZmlfdHJhY2UgX2xhcmdlX3Bvb2xfbWluX2FsbG9jIF9sYXp5X2ZyZWVsaXN0X2Nsb3NlIF9sZWZ0X25lc3RlZF9sb29wc19yYW5kb20KK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9sZ3dyX2FzeW5jX2lvIF9sZ3dyX2lvX3NsYXZlcyBfbG9ja19zZ2FfYXJlYXMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9sb2dfYXJjaGl2ZV9idWZmZXJfc2l6ZSBfbG9nX2FyY2hpdmVfYnVmZmVycyBfbG9nX3NpbXVsdGFuZW91c19jb3BpZXMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9sb3dfc2VydmVyX3RyZXNob2xkIF9tYXhfdHJhbnNhY3Rpb25fYnJhbmNoZXMKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9tdHNfcmF0ZV9sb2dfc2l6ZSBfbXRzX3JhdGVfc2NhbGUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9tdmlld19jb3N0X3Jld3JpdGUgX212aWV3X3Jld3JpdGVfMgorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX25jbWJfcmVhZGFoZWFkX2VuYWJsZWQgX25jbWJfcmVhZGFoZWFkX3RyYWNpbmcKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9vZ21zX2hvbWUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9wYXJhbGxlbF9hZGFwdGl2ZV9tYXhfdXNlcnMgX3BhcmFsbGVsX2RlZmF1bHRfbWF4X2luc3RhbmNlcworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX3BhcmFsbGVsX2V4ZWN1dGlvbl9tZXNzYWdlX2FsaWduIF9wYXJhbGxlbF9mYWtlX2NsYXNzX3BjdAorc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX3BhcmFsbGVsX2xvYWRfYmFsX3VuaXQgX3BhcmFsbGVsX2xvYWRfYmFsYW5jaW5nCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kT2JzICBfcGFyYWxsZWxfbWluX21lc3NhZ2VfcG9vbCBfcGFyYWxsZWxfcmVjb3Zlcnlfc3RvcGF0CitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kT2JzICBfcGFyYWxsZWxfc2VydmVyX2lkbGVfdGltZSBfcGFyYWxsZWxpc21fY29zdF9mdWRnZV9mYWN0b3IKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9wYXJ0aWFsX3B3aXNlX2pvaW5fZW5hYmxlZCBfcGRtbF9zZXBhcmF0ZV9naW0gX3B1c2hfam9pbl9wcmVkaWNhdGUKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9weF9ncmFudWxlX3NpemUgX3B4X2luZGV4X3NhbXBsaW5nIF9weF9sb2FkX3B1Ymxpc2hfaW50ZXJ2YWwKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF9weF9tYXhfZ3JhbnVsZXNfcGVyX3NsYXZlIF9weF9taW5fZ3JhbnVsZXNfcGVyX3NsYXZlIF9weF9ub19zdGVhbGluZworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX3Jvd19jYWNoZV9jdXJzb3JzIF9zZXJpYWxfZGlyZWN0X3JlYWQgX3NoYXJlZF9wb29sX3Jlc2VydmVkX21pbl9hbGxvYworc3luIGtleXdvcmQgb3JhS2V5d29yZFVuZE9icyAgX3NvcnRfc3BhY2VfZm9yX3dyaXRlX2J1ZmZlcnMgX3NwaW5fY291bnQgX3N5c3RlbV90cmlnX2VuYWJsZWQKK3N5biBrZXl3b3JkIG9yYUtleXdvcmRVbmRPYnMgIF90cmFjZV9idWZmZXJfZmx1c2hlcyBfdHJhY2VfY3JfYnVmZmVyX2NyZWF0ZXMgX3RyYWNlX211bHRpX2Jsb2NrX3JlYWRzCitzeW4ga2V5d29yZCBvcmFLZXl3b3JkVW5kT2JzICBfdHJhbnNhY3Rpb25fcmVjb3Zlcnlfc2VydmVycyBfdXNlX2lzbSBfeWllbGRfY2hlY2tfaW50ZXJ2YWwKKworCitzeW4gY2x1c3RlciBvcmFBbGwgYWRkPW9yYUtleXdvcmQsb3JhS2V5d29yZEdyb3VwLG9yYUtleXdvcmRQcmVmLG9yYUtleXdvcmRPYnMsb3JhS2V5d29yZFVuZCxvcmFLZXl3b3JkVW5kT2JzCitzeW4gY2x1c3RlciBvcmFBbGwgYWRkPW9yYVZhbHVlLG9yYU1vZGlmaWVyLG9yYVN0cmluZyxvcmFTcGVjaWFsLG9yYUNvbW1lbnQKKworIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIiBoaWdobGlnaHRpbmcKKworIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfb3JhX3N5bl9pbml0cyIpCisKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfb3JhX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIG9yYUtleXdvcmQJICBTdGF0ZW1lbnQJCSJ1c3VhbCBrZXl3b3JkcworICBIaUxpbmsgb3JhS2V5d29yZEdyb3VwICBUeXBlCQkJImtleXdvcmRzIHdoaWNoIGdyb3VwIG90aGVyIGtleXdvcmRzCisgIEhpTGluayBvcmFLZXl3b3JkUHJlZiAgIG9yYUtleXdvcmRHcm91cAkia2V5d29yZHMgd2hpY2ggYWN0IGFzIHByZWZpeGVzCisgIEhpTGluayBvcmFLZXl3b3JkT2JzCSAgVG9kbwkJCSJvYnNvbGV0ZSBrZXl3b3JkcworICBIaUxpbmsgb3JhS2V5d29yZFVuZAkgIFByZVByb2MJCSJ1bmRvY3VtZW50ZWQga2V5d29yZHMKKyAgSGlMaW5rIG9yYUtleXdvcmRVbmRPYnMgb3JhS2V5d29yZE9icwkJInVuZG9jdW1lbnRlZCBvYnNvbGV0ZSBrZXl3b3JkcworICBIaUxpbmsgb3JhVmFsdWUJICBJZGVudGlmaWVyCQkidmFsdWVzLCBsaWtlIHRydWUgb3IgZmFsc2UKKyAgSGlMaW5rIG9yYU1vZGlmaWVyCSAgb3JhVmFsdWUJCSJtb2RpZmllcyB2YWx1ZXMKKyAgSGlMaW5rIG9yYVN0cmluZwkgIFN0cmluZwkJInN0cmluZ3MKKworICBIaUxpbmsgb3JhU3BlY2lhbAkgIFNwZWNpYWwJCSJzcGVjaWFsIGNoYXJhY3RlcnMKKyAgSGlMaW5rIG9yYUVycm9yCSAgRXJyb3IJCQkiZXJyb3JzCisgIEhpTGluayBvcmFQYXJlbkVycm9yCSAgb3JhRXJyb3IJCSJlcnJvcnMgY2F1c2VkIGJ5IG1pc21hdGNoaW5nIHBhcmFudGhlc2VzCisKKyAgSGlMaW5rIG9yYUNvbW1lbnQJICBDb21tZW50CQkiY29tbWVudHMKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIm9yYSIKKworaWYgbWFpbl9zeW50YXggPT0gJ29yYScKKyAgdW5sZXQgbWFpbl9zeW50YXgKK2VuZGlmCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9wYXBwLnZpbSBiL3J1bnRpbWUvc3ludGF4L3BhcHAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODRkODAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wYXBwLnZpbQpAQCAtMCwwICsxLDkyIEBACisiIFZpbSBzeW50YXggZmlsZSBmb3IgdGhlICJwYXBwIiBmaWxlIGZvcm1hdCAoX3BfZXJsIF9hcHBfbGljYXRpb24pCisiCisiIExhbmd1YWdlOglwYXBwCisiIE1haW50YWluZXI6CU1hcmMgTGVobWFubiA8cGNnQGdvb2YuY29tPgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMTEKKyIgRmlsZW5hbWVzOiAgICAqLnBhcHAgKi5weG1sICoucHhzbAorIiBVUkw6CQlodHRwOi8vcGFwcC5wbGFuOS5kZS8KKworIiBZb3UgY2FuIHNldCB0aGUgInBhcHBfaW5jbHVkZV9odG1sIiB2YXJpYWJsZSBzbyB0aGF0IGh0bWwgd2lsbCBiZQorIiByZW5kZXJlZCBhcyBzdWNoIGluc2lkZSBwaHRtbCBzZWN0aW9ucyAoaW4gY2FzZSB5b3UgYWN0dWFsbHkgcHV0IGh0bWwKKyIgdGhlcmUgLSBwYXBwIGRvZXMgbm90IHJlcXVpcmUgdGhhdCkuIEFsc28sIHJlbmRlcmluZyBodG1sIHRlbmRzIHRvIGtlZXAKKyIgdGhlIGNsdXR0ZXIgaGlnaCBvbiB0aGUgc2NyZWVuIC0gbWl4aW5nIHRocmVlIGxhbmd1YWdlcyBpcyBkaWZmaWN1bHQKKyIgZW5vdWdoKCEpLiBQUzogaXQgaXMgYWxzbyBzbG93LgorCisiIHBvZCBpcywgYnR3LCBhbGxvd2VkIGV2ZXJ5d2hlcmUsIHdoaWNoIGlzIGFjdHVhbGx5IHdyb25nIDooCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBzb3VyY2UgaXMgYmFzaWNhbGx5IHhtbCwgd2l0aCBpbmNsdWRlZCBodG1sICh0aGlzIGlzIGNvbW1vbikgYW5kIHBlcmwgYml0cworaWYgdmVyc2lvbiA8IDYwMAorICBzbyA8c2ZpbGU+OnA6aC94bWwudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC94bWwudmltCitlbmRpZgordW5sZXQgYjpjdXJyZW50X3N5bnRheAorCitpZiBleGlzdHMoInBhcHBfaW5jbHVkZV9odG1sIikKKyAgaWYgdmVyc2lvbiA8IDYwMAorICAgIHN5biBpbmNsdWRlIEBQQXBwSHRtbCA8c2ZpbGU+OnA6aC9odG1sLnZpbQorICBlbHNlCisgICAgc3luIGluY2x1ZGUgQFBBcHBIdG1sIHN5bnRheC9odG1sLnZpbQorICBlbmRpZgorICB1bmxldCBiOmN1cnJlbnRfc3ludGF4CitlbmRpZgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBpbmNsdWRlIEBQQXBwUGVybCA8c2ZpbGU+OnA6aC9wZXJsLnZpbQorZWxzZQorICBzeW4gaW5jbHVkZSBAUEFwcFBlcmwgc3ludGF4L3BlcmwudmltCitlbmRpZgorCitpZiB2OnZlcnNpb24gPj0gNjAwCisgICBzeW4gY2x1c3RlciB4bWxGb2xkQ2x1c3RlciBhZGQ9cGFwcF9wZXJsLHBhcHBfeHBlcmwscGFwcF9waHRtbCxwYXBwX3B4bWwscGFwcF9wZXJsUE9ECitlbmRpZgorCisiIHByZXByb2Nlc3NvciBjb21tYW5kcworc3luIHJlZ2lvbiBwYXBwX3ByZXAgbWF0Y2hncm91cD1wYXBwX3ByZXAgc3RhcnQ9Il4jXHMqXChpZlx8ZWxzaWZcKSIgZW5kPSIkIiBrZWVwZW5kIGNvbnRhaW5zPUBwZXJsRXhwciBjb250YWluZWQKK3N5biBtYXRjaCBwYXBwX3ByZXAgL14jXHMqXChlbHNlXHxlbmRpZlx8Pz9cKS4qJC8gY29udGFpbmVkCisiIHRyYW5zbGF0aW9uIGVudHJpZXMKK3N5biByZWdpb24gcGFwcF9nZXR0ZXh0IHN0YXJ0PS9fXyIvIGVuZD0vIi8gY29udGFpbmVkIGNvbnRhaW5zPUBwYXBwX3BlcmxJbnRlcnBEUQorc3luIGNsdXN0ZXIgUEFwcEh0bWwgYWRkPXBhcHBfZ2V0dGV4dCxwYXBwX3ByZXAKKworIiBhZGQgc3BlY2lhbCwgcGFpcmVkIHhwZXJsLCBwZXJsIGFuZCBwaHRtbCB0YWdzCitzeW4gcmVnaW9uIHBhcHBfcGVybCAgbWF0Y2hncm91cD14bWxUYWcgc3RhcnQ9IjxwZXJsPiIgIGVuZD0iPC9wZXJsPiIgIGNvbnRhaW5zPXBhcHBfQ0RBVEFwLEBQQXBwUGVybCBrZWVwZW5kCitzeW4gcmVnaW9uIHBhcHBfeHBlcmwgbWF0Y2hncm91cD14bWxUYWcgc3RhcnQ9Ijx4cGVybD4iIGVuZD0iPC94cGVybD4iIGNvbnRhaW5zPXBhcHBfQ0RBVEFwLEBQQXBwUGVybCBrZWVwZW5kCitzeW4gcmVnaW9uIHBhcHBfcGh0bWwgbWF0Y2hncm91cD14bWxUYWcgc3RhcnQ9IjxwaHRtbD4iIGVuZD0iPC9waHRtbD4iIGNvbnRhaW5zPXBhcHBfQ0RBVEFoLHBhcHBfcGhfcGVybCxwYXBwX3BoX2h0bWwscGFwcF9waF9oaW50LEBQQXBwSHRtbCBrZWVwZW5kCitzeW4gcmVnaW9uIHBhcHBfcHhtbCAgbWF0Y2hncm91cD14bWxUYWcgc3RhcnQ9IjxweG1sPiIJZW5kPSI8L3B4bWw+IiAgY29udGFpbnM9cGFwcF9DREFUQXgscGFwcF9waF9wZXJsLHBhcHBfcGhfeG1sLHBhcHBfcGhfeGludAkgICAgIGtlZXBlbmQKK3N5biByZWdpb24gcGFwcF9wZXJsUE9EIHN0YXJ0PSJePVthLXpdIiBlbmQ9Il49Y3V0IiBjb250YWlucz1AUG9kLHBlcmxUb2RvIGtlZXBlbmQKKworIiBjZGF0YSBzZWN0aW9ucworc3luIHJlZ2lvbiBwYXBwX0NEQVRBcCBtYXRjaGdyb3VwPXhtbENkYXRhRGVjbCBzdGFydD0iPCFcW0NEQVRBXFsiIGVuZD0iXF1cXT4iIGNvbnRhaW5zPUBQQXBwUGVybAkJCQkJIGNvbnRhaW5lZCBrZWVwZW5kCitzeW4gcmVnaW9uIHBhcHBfQ0RBVEFoIG1hdGNoZ3JvdXA9eG1sQ2RhdGFEZWNsIHN0YXJ0PSI8IVxbQ0RBVEFcWyIgZW5kPSJcXVxdPiIgY29udGFpbnM9cGFwcF9waF9wZXJsLHBhcHBfcGhfaHRtbCxwYXBwX3BoX2hpbnQsQFBBcHBIdG1sIGNvbnRhaW5lZCBrZWVwZW5kCitzeW4gcmVnaW9uIHBhcHBfQ0RBVEF4IG1hdGNoZ3JvdXA9eG1sQ2RhdGFEZWNsIHN0YXJ0PSI8IVxbQ0RBVEFcWyIgZW5kPSJcXVxdPiIgY29udGFpbnM9cGFwcF9waF9wZXJsLHBhcHBfcGhfeG1sLHBhcHBfcGhfeGludAkJIGNvbnRhaW5lZCBrZWVwZW5kCisKK3N5biByZWdpb24gcGFwcF9waF9wZXJsIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8Wzo/XSIgZW5kPSJbOj9dPiJtZT1lLTIgbmV4dGdyb3VwPXBhcHBfcGhfaHRtbCBjb250YWlucz1AUEFwcFBlcmwJCSAgICAgY29udGFpbmVkIGtlZXBlbmQKK3N5biByZWdpb24gcGFwcF9waF9odG1sIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI6PiIgICAgZW5kPSI8Wzo/XSJtZT1lLTIgbmV4dGdyb3VwPXBhcHBfcGhfcGVybCBjb250YWlucz1AUEFwcEh0bWwJCSAgICAgY29udGFpbmVkIGtlZXBlbmQKK3N5biByZWdpb24gcGFwcF9waF9oaW50IG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI/PiIgICAgZW5kPSI8Wzo/XSJtZT1lLTIgbmV4dGdyb3VwPXBhcHBfcGhfcGVybCBjb250YWlucz1AcGVybEludGVycERRLEBQQXBwSHRtbCBjb250YWluZWQga2VlcGVuZAorc3luIHJlZ2lvbiBwYXBwX3BoX3htbAltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iOj4iICAgIGVuZD0iPFs6P10ibWU9ZS0yIG5leHRncm91cD1wYXBwX3BoX3BlcmwgY29udGFpbnM9CQkJICAgICBjb250YWluZWQga2VlcGVuZAorc3luIHJlZ2lvbiBwYXBwX3BoX3hpbnQgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9Ij8+IiAgICBlbmQ9IjxbOj9dIm1lPWUtMiBuZXh0Z3JvdXA9cGFwcF9waF9wZXJsIGNvbnRhaW5zPUBwZXJsSW50ZXJwRFEJICAgICBjb250YWluZWQga2VlcGVuZAorCisiIHN5bmNocm9uaXphdGlvbiBpcyBob3Jyb3JzIQorc3luIHN5bmMgY2xlYXIKK3N5biBzeW5jIG1hdGNoIHBhcHBTeW5jIGdyb3VwaGVyZSBwYXBwX0NEQVRBaCAiPC9cKHBlcmxcfHhwZXJsXHxwaHRtbFx8bWFjcm9cfG1vZHVsZVwpPiIKK3N5biBzeW5jIG1hdGNoIHBhcHBTeW5jIGdyb3VwaGVyZSBwYXBwX0NEQVRBaCAiXiMgKlwoaWZcfGVsc2lmXHxlbHNlXHxlbmRpZlwpIgorc3luIHN5bmMgbWF0Y2ggcGFwcFN5bmMgZ3JvdXBoZXJlIHBhcHBfQ0RBVEFoICI8L1wodHJcfHRkXHx0YWJsZVx8aHJcfGgxXHxoMlx8aDNcKT4iCitzeW4gc3luYyBtYXRjaCBwYXBwU3luYyBncm91cGhlcmUgTk9ORQkgICAgICAiPC9cPVwobW9kdWxlXHxzdGF0ZVx8bWFjcm9cKT4iCisKK3N5biBzeW5jIG1heGxpbmVzPTMwMAorc3luIHN5bmMgbWlubGluZXM9NQorCisiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKworaGkgZGVmIGxpbmsgcGFwcF9wcmVwCQlwcmVDb25kaXQKK2hpIGRlZiBsaW5rIHBhcHBfZ2V0dGV4dAlTdHJpbmcKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicGFwcCIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3Bhc2NhbC52aW0gYi9ydW50aW1lL3N5bnRheC9wYXNjYWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTE5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wYXNjYWwudmltCkBAIC0wLDAgKzEsMzU3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJUGFzY2FsCisiIFZlcnNpb246IDIuNworIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMTEKKyIgTWFpbnRhaW5lcjogIFhhdmllciBDculndXQgPHhhdmllci5jcmVndXRAZW5zZWVpaHQuZnI+CisiIFByZXZpb3VzIE1haW50YWluZXI6CU1hcmlvIEV1c2ViaW8gPGJpb0BkcS5mY3QudW5sLnB0PgorCisiIENvbnRyaWJ1dG9yczogVGltIENoYXNlIDx0Y2hhc2VAY3NjLmNvbT4sIFN0YXMgR3JhYm9pcyA8c3RzaUB2dHJhaWxzLmNvbT4sCisiCU1hemVuIE5FSUZFUiA8bWF6ZW4ubmVpZmVyLjIwMDFAc3VwYWVyby5mcj4sCisiCUtsYXVzIEhhc3QgPEtsYXVzLkhhc3RAYXJjb3IubmV0PgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKworc3luIGNhc2UgaWdub3JlCitzeW4gc3luYyBsaW5lcz0yNTAKKworc3luIGtleXdvcmQgcGFzY2FsQm9vbGVhbgl0cnVlIGZhbHNlCitzeW4ga2V5d29yZCBwYXNjYWxDb25kaXRpb25hbAlpZiBlbHNlIHRoZW4KK3N5biBrZXl3b3JkIHBhc2NhbENvbnN0YW50CW5pbCBtYXhpbnQKK3N5biBrZXl3b3JkIHBhc2NhbExhYmVsCQljYXNlIGdvdG8gbGFiZWwKK3N5biBrZXl3b3JkIHBhc2NhbE9wZXJhdG9yCWFuZCBkaXYgZG93bnRvIGluIG1vZCBub3Qgb2Ygb3IgcGFja2VkIHdpdGgKK3N5biBrZXl3b3JkIHBhc2NhbFJlcGVhdAlkbyBmb3IgZG8gcmVwZWF0IHdoaWxlIHRvIHVudGlsCitzeW4ga2V5d29yZCBwYXNjYWxTdGF0ZW1lbnQJcHJvY2VkdXJlIGZ1bmN0aW9uCitzeW4ga2V5d29yZCBwYXNjYWxTdGF0ZW1lbnQJcHJvZ3JhbSBiZWdpbiBlbmQgY29uc3QgdmFyIHR5cGUKK3N5biBrZXl3b3JkIHBhc2NhbFN0cnVjdAlyZWNvcmQKK3N5biBrZXl3b3JkIHBhc2NhbFR5cGUJCWFycmF5IGJvb2xlYW4gY2hhciBpbnRlZ2VyIGZpbGUgcG9pbnRlciByZWFsIHNldAorc3luIGtleXdvcmQgcGFzY2FsVHlwZQkJc3RyaW5nIHRleHQgdmFyaWFudAorCisKK3N5biBrZXl3b3JkIHBhc2NhbFRvZG8gY29udGFpbmVkCVRPRE8KKworCisiIFN0cmluZworaWYgIWV4aXN0cygicGFzY2FsX29uZV9saW5lX3N0cmluZyIpCisgIHN5biByZWdpb24gIHBhc2NhbFN0cmluZyBtYXRjaGdyb3VwPXBhc2NhbFN0cmluZyBzdGFydD0rJysgZW5kPSsnKyBjb250YWlucz1wYXNjYWxTdHJpbmdFc2NhcGUKKyAgaWYgZXhpc3RzKCJwYXNjYWxfZ3BjIikKKyAgICBzeW4gcmVnaW9uICBwYXNjYWxTdHJpbmcgbWF0Y2hncm91cD1wYXNjYWxTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisgY29udGFpbnM9cGFzY2FsU3RyaW5nRXNjYXBlR1BDCisgIGVsc2UKKyAgICBzeW4gcmVnaW9uICBwYXNjYWxTdHJpbmdFcnJvciBtYXRjaGdyb3VwPXBhc2NhbFN0cmluZ0Vycm9yIHN0YXJ0PSsiKyBlbmQ9KyIrIGNvbnRhaW5zPXBhc2NhbFN0cmluZ0VzY2FwZQorICBlbmRpZgorZWxzZQorICAid3Jvbmcgc3RyaW5ncworICBzeW4gcmVnaW9uICBwYXNjYWxTdHJpbmdFcnJvciBtYXRjaGdyb3VwPXBhc2NhbFN0cmluZ0Vycm9yIHN0YXJ0PSsnKyBlbmQ9KycrIGVuZD0rJCsgY29udGFpbnM9cGFzY2FsU3RyaW5nRXNjYXBlCisgIGlmIGV4aXN0cygicGFzY2FsX2dwYyIpCisgICAgc3luIHJlZ2lvbiAgcGFzY2FsU3RyaW5nRXJyb3IgbWF0Y2hncm91cD1wYXNjYWxTdHJpbmdFcnJvciBzdGFydD0rIisgZW5kPSsiKyBlbmQ9KyQrIGNvbnRhaW5zPXBhc2NhbFN0cmluZ0VzY2FwZUdQQworICBlbHNlCisgICAgc3luIHJlZ2lvbiAgcGFzY2FsU3RyaW5nRXJyb3IgbWF0Y2hncm91cD1wYXNjYWxTdHJpbmdFcnJvciBzdGFydD0rIisgZW5kPSsiKyBlbmQ9KyQrIGNvbnRhaW5zPXBhc2NhbFN0cmluZ0VzY2FwZQorICBlbmRpZgorCisgICJyaWdodCBzdHJpbmdzCisgIHN5biByZWdpb24gIHBhc2NhbFN0cmluZyBtYXRjaGdyb3VwPXBhc2NhbFN0cmluZyBzdGFydD0rJysgZW5kPSsnKyBvbmVsaW5lIGNvbnRhaW5zPXBhc2NhbFN0cmluZ0VzY2FwZQorICAiIFRvIHNlZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiBzdHJpbmdzOgorICAiIHN5biByZWdpb24gIHBhc2NhbFN0cmluZyBtYXRjaGdyb3VwPXBhc2NhbFN0cmluZ0Vycm9yIHN0YXJ0PSsnKyBlbmQ9KycrIG9uZWxpbmUgY29udGFpbnM9cGFzY2FsU3RyaW5nRXNjYXBlCisgIGlmIGV4aXN0cygicGFzY2FsX2dwYyIpCisgICAgc3luIHJlZ2lvbiAgcGFzY2FsU3RyaW5nIG1hdGNoZ3JvdXA9cGFzY2FsU3RyaW5nIHN0YXJ0PSsiKyBlbmQ9KyIrIG9uZWxpbmUgY29udGFpbnM9cGFzY2FsU3RyaW5nRXNjYXBlR1BDCisgIGVsc2UKKyAgICBzeW4gcmVnaW9uICBwYXNjYWxTdHJpbmdFcnJvciBtYXRjaGdyb3VwPXBhc2NhbFN0cmluZ0Vycm9yIHN0YXJ0PSsiKyBlbmQ9KyIrIG9uZWxpbmUgY29udGFpbnM9cGFzY2FsU3RyaW5nRXNjYXBlCisgIGVuZGlmCitlbmQKK3N5biBtYXRjaCAgIHBhc2NhbFN0cmluZ0VzY2FwZQkJY29udGFpbmVkICInJyIKK3N5biBtYXRjaCAgIHBhc2NhbFN0cmluZ0VzY2FwZUdQQwljb250YWluZWQgJyIiJworCisKKyIgc3luIG1hdGNoICAgcGFzY2FsSWRlbnRpZmllcgkJIlw8W2EtekEtWl9dW2EtekEtWjAtOV9dKlw+IgorCisKK2lmIGV4aXN0cygicGFzY2FsX3N5bWJvbF9vcGVyYXRvciIpCisgIHN5biBtYXRjaCAgIHBhc2NhbFN5bWJvbE9wZXJhdG9yICAgICAgIlsrXC0vKj1dIgorICBzeW4gbWF0Y2ggICBwYXNjYWxTeW1ib2xPcGVyYXRvciAgICAgICJbPD5dPVw9IgorICBzeW4gbWF0Y2ggICBwYXNjYWxTeW1ib2xPcGVyYXRvciAgICAgICI8PiIKKyAgc3luIG1hdGNoICAgcGFzY2FsU3ltYm9sT3BlcmF0b3IgICAgICAiOj0iCisgIHN5biBtYXRjaCAgIHBhc2NhbFN5bWJvbE9wZXJhdG9yICAgICAgIlsoKV0iCisgIHN5biBtYXRjaCAgIHBhc2NhbFN5bWJvbE9wZXJhdG9yICAgICAgIlwuXC4iCisgIHN5biBtYXRjaCAgIHBhc2NhbFN5bWJvbE9wZXJhdG9yICAgICAgICJbXF4uXSIKKyAgc3luIG1hdGNoICAgcGFzY2FsTWF0cml4RGVsaW1pdGVyCSJbXVtdIgorICAiaWYgeW91IHByZWZlciB5b3UgY2FuIGhpZ2hsaWdodCB0aGUgcmFuZ2UKKyAgInN5biBtYXRjaCAgcGFzY2FsTWF0cml4RGVsaW1pdGVyCSJbXGRcK1wuXC5cZFwrXSIKK2VuZGlmCisKK3N5biBtYXRjaCAgcGFzY2FsTnVtYmVyCQkiLVw9XDxcZFwrXD4iCitzeW4gbWF0Y2ggIHBhc2NhbEZsb2F0CQkiLVw9XDxcZFwrXC5cZFwrXD4iCitzeW4gbWF0Y2ggIHBhc2NhbEZsb2F0CQkiLVw9XDxcZFwrXC5cZFwrW2VFXS1cPVxkXCtcPiIKK3N5biBtYXRjaCAgcGFzY2FsSGV4TnVtYmVyCSJcJFswLTlhLWZBLUZdXCtcPiIKKworaWYgZXhpc3RzKCJwYXNjYWxfbm9fdGFicyIpCisgIHN5biBtYXRjaCBwYXNjYWxTaG93VGFiICJcdCIKK2VuZGlmCisKK3N5biByZWdpb24gcGFzY2FsQ29tbWVudAlzdGFydD0iKFwqIiAgZW5kPSJcKikiIGNvbnRhaW5zPXBhc2NhbFRvZG8KK3N5biByZWdpb24gcGFzY2FsQ29tbWVudAlzdGFydD0ieyIgIGVuZD0ifSIgY29udGFpbnM9cGFzY2FsVG9kbworCisKK2lmICFleGlzdHMoInBhc2NhbF9ub19mdW5jdGlvbnMiKQorICAiIGFycmF5IGZ1bmN0aW9ucworICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglwYWNrIHVucGFjaworCisgICIgbWVtb3J5IGZ1bmN0aW9uCisgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCURpc3Bvc2UgTmV3CisKKyAgIiBtYXRoIGZ1bmN0aW9ucworICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglBYnMgQXJjdGFuIENvcyBFeHAgTG4gU2luIFNxciBTcXJ0CisKKyAgIiBmaWxlIGZ1bmN0aW9ucworICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglFb2YgRW9sbiBXcml0ZSBXcml0ZWxuCisgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQJSW5wdXQgT3V0cHV0CisKKyAgaWYgZXhpc3RzKCJwYXNjYWxfdHJhZGl0aW9uYWwiKQorICAgICIgVGhlc2UgZnVuY3Rpb25zIGRvIG5vdCBzZWVtIHRvIGJlIGRlZmluZWQgaW4gVHVyYm8gUGFzY2FsCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JR2V0IFBhZ2UgUHV0CisgIGVuZGlmCisKKyAgIiBvcmRpbmFsIGZ1bmN0aW9ucworICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglPZGQgUHJlZCBTdWNjCisKKyAgIiB0cmFuc2ZlcnQgZnVuY3Rpb25zCisgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUNociBPcmQgUm91bmQgVHJ1bmMKK2VuZGlmCisKKworaWYgIWV4aXN0cygicGFzY2FsX3RyYWRpdGlvbmFsIikKKworICBzeW4ga2V5d29yZCBwYXNjYWxTdGF0ZW1lbnQJY29uc3RydWN0b3IgZGVzdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbiBpbmhlcml0ZWQKKyAgc3luIGtleXdvcmQgcGFzY2FsU3RhdGVtZW50CWludGVyZmFjZSB1bml0IHVzZXMKKyAgc3luIGtleXdvcmQgcGFzY2FsTW9kaWZpZXIJYWJzb2x1dGUgYXNzZW1ibGVyIGV4dGVybmFsIGZhciBmb3J3YXJkIGlubGluZQorICBzeW4ga2V5d29yZCBwYXNjYWxNb2RpZmllcglpbnRlcnJ1cHQgbmVhciB2aXJ0dWFsCisgIHN5biBrZXl3b3JkIHBhc2NhbEFjY2VzCXByaXZhdGUgcHVibGljCisgIHN5biBrZXl3b3JkIHBhc2NhbFN0cnVjdAlvYmplY3QKKyAgc3luIGtleXdvcmQgcGFzY2FsT3BlcmF0b3IJc2hsIHNociB4b3IKKworICBzeW4gcmVnaW9uIHBhc2NhbFByZVByb2MJc3RhcnQ9IihcKlwkIiAgZW5kPSJcKikiIGNvbnRhaW5zPXBhc2NhbFRvZG8KKyAgc3luIHJlZ2lvbiBwYXNjYWxQcmVQcm9jCXN0YXJ0PSJ7XCQiICBlbmQ9In0iCisKKyAgc3luIHJlZ2lvbiAgcGFzY2FsQXNtCQltYXRjaGdyb3VwPXBhc2NhbEFzbUtleSBzdGFydD0iXDxhc21cPiIgZW5kPSJcPGVuZFw+IiBjb250YWlucz1wYXNjYWxDb21tZW50LHBhc2NhbFByZVByb2MKKworICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVNob3J0SW50IExvbmdJbnQgQnl0ZSBXb3JkCisgIHN5biBrZXl3b3JkIHBhc2NhbFR5cGUJQnl0ZUJvb2wgV29yZEJvb2wgTG9uZ0Jvb2wKKyAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlDYXJkaW5hbCBMb25nV29yZAorICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVNpbmdsZSBEb3VibGUgRXh0ZW5kZWQgQ29tcAorICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVBDaGFyCisKKworICBpZiAhZXhpc3RzICgicGFzY2FsX2ZwYyIpCisgICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZAlSZXN1bHQKKyAgZW5kaWYKKworICBpZiBleGlzdHMoInBhc2NhbF9mcGMiKQorICAgIHN5biByZWdpb24gcGFzY2FsQ29tbWVudAlzdGFydD0iLy8iIGVuZD0iJCIKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxTdGF0ZW1lbnQJZmFpbCBvdGhlcndpc2Ugb3BlcmF0b3IKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxEaXJlY3RpdmUJcG9wc3RhY2sKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxQcmVkZWZpbmVkIHNlbGYKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVNob3J0U3RyaW5nIEFuc2lTdHJpbmcgV2lkZVN0cmluZworICBlbmRpZgorCisgIGlmIGV4aXN0cygicGFzY2FsX2dwYyIpCisgICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlTbWFsbEludAorICAgIHN5biBrZXl3b3JkIHBhc2NhbFR5cGUJQW5zaUNoYXIKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVBBbnNpQ2hhcgorICBlbmRpZgorCisgIGlmIGV4aXN0cygicGFzY2FsX2RlbHBoaSIpCisgICAgc3luIHJlZ2lvbiBwYXNjYWxDb21tZW50CXN0YXJ0PSIvLyIgIGVuZD0iJCIgY29udGFpbnM9cGFzY2FsVG9kbworICAgIHN5biBrZXl3b3JkIHBhc2NhbFR5cGUJU21hbGxJbnQgSW50NjQKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVJlYWw0OCBDdXJyZW5jeQorICAgIHN5biBrZXl3b3JkIHBhc2NhbFR5cGUJQW5zaUNoYXIgV2lkZUNoYXIKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVNob3J0U3RyaW5nIEFuc2lTdHJpbmcgV2lkZVN0cmluZworICAgIHN5biBrZXl3b3JkIHBhc2NhbFR5cGUJUEFuc2lDaGFyIFBXaWRlQ2hhcgorICAgIHN5biBtYXRjaCAgcGFzY2FsRmxvYXQJIi1cPVw8XGRcK1wuXGRcK1tkRF0tXD1cZFwrXD4iCisgICAgc3luIG1hdGNoICBwYXNjYWxTdHJpbmdFc2NhcGUJY29udGFpbmVkICIjWzEyXVswLTldXD1bMC05XVw9IgorICAgIHN5biBrZXl3b3JkIHBhc2NhbFN0cnVjdAljbGFzcyBkaXNwaW50ZXJmYWNlCisgICAgc3luIGtleXdvcmQgcGFzY2FsRXhjZXB0aW9uCXRyeSBleGNlcHQgcmFpc2UgYXQgb24gZmluYWxseQorICAgIHN5biBrZXl3b3JkIHBhc2NhbFN0YXRlbWVudAlvdXQKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxTdGF0ZW1lbnQJbGlicmFyeSBwYWNrYWdlCisgICAgc3luIGtleXdvcmQgcGFzY2FsU3RhdGVtZW50CWluaXRpYWxpemF0aW9uIGZpbmFsaXphdGlvbiB1c2VzIGV4cG9ydHMKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxTdGF0ZW1lbnQJcHJvcGVydHkgb3V0IHJlc291cmNlc3RyaW5nIHRocmVhZHZhcgorICAgIHN5biBrZXl3b3JkIHBhc2NhbE1vZGlmaWVyCWNvbnRhaW5zCisgICAgc3luIGtleXdvcmQgcGFzY2FsTW9kaWZpZXIJb3ZlcnJpZGRlbiByZWludHJvZHVjZSBhYnN0cmFjdAorICAgIHN5biBrZXl3b3JkIHBhc2NhbE1vZGlmaWVyCW92ZXJyaWRlIGV4cG9ydCBkeW5hbWljIG5hbWUgbWVzc2FnZQorICAgIHN5biBrZXl3b3JkIHBhc2NhbE1vZGlmaWVyCWRpc3BpZCBpbmRleCBzdG9yZWQgZGVmYXVsdCBub2RlZmF1bHQgcmVhZG9ubHkKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxNb2RpZmllcgl3cml0ZW9ubHkgaW1wbGVtZW50cyBvdmVybG9hZCByZXF1aXJlcyByZXNpZGVudAorICAgIHN5biBrZXl3b3JkIHBhc2NhbEFjY2VzCXByb3RlY3RlZCBwdWJsaXNoZWQgYXV0b21hdGVkCisgICAgc3luIGtleXdvcmQgcGFzY2FsRGlyZWN0aXZlCXJlZ2lzdGVyIHBhc2NhbCBjdmFyIGNkZWNsIHN0ZGNhbGwgc2FmZWNhbGwKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxPcGVyYXRvcglhcyBpcworICBlbmRpZgorCisgIGlmIGV4aXN0cygicGFzY2FsX25vX2Z1bmN0aW9ucyIpCisgICAgInN5biBrZXl3b3JkIHBhc2NhbE1vZGlmaWVyCXJlYWQgd3JpdGUKKyAgICAibWF5IGNvbmZ1c2Ugd2l0aCBSZWFkIGFuZCBXcml0ZSBmdW5jdGlvbnMuICBOb3QgZWFzeSB0byBoYW5kbGUuCisgIGVsc2UKKyAgICAiIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnMKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglCcmVhayBDb250aW51ZSBFeGl0IEhhbHQgUnVuRXJyb3IKKworICAgICIgb3JkaW5hbCBmdW5jdGlvbnMKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglEZWMgSW5jIEhpZ2ggTG93CisKKyAgICAiIG1hdGggZnVuY3Rpb25zCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JRnJhYyBJbnQgUGkKKworICAgICIgc3RyaW5nIGZ1bmN0aW9ucworICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUNvbmNhdCBDb3B5IERlbGV0ZSBJbnNlcnQgTGVuZ3RoIFBvcyBTdHIgVmFsCisKKyAgICAiIG1lbW9yeSBmdW5jdGlvbgorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUZyZWVNZW0gR2V0TWVtIE1heEF2YWlsIE1lbUF2YWlsCisKKyAgICAiIHBvaW50ZXIgYW5kIGFkZHJlc3MgZnVuY3Rpb25zCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JQWRkciBBc3NpZ25lZCBDU2VnIERTZWcgT2ZzIFB0ciBTZWcgU1B0ciBTU2VnCisKKyAgICAiIG1pc2MgZnVuY3Rpb25zCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JRXhjbHVkZSBGaWxsQ2hhciBIaSBJbmNsdWRlIExvIE1vdmUgUGFyYW1Db3VudAorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVBhcmFtU3RyIFJhbmRvbSBSYW5kb21pemUgU2l6ZU9mIFN3YXAgVHlwZU9mCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JVXBDYXNlCisKKyAgICAiIHByZWRlZmluZWQgdmFyaWFibGVzCisgICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBFcnJvckFkZHIgRXhpdENvZGUgRXhpdFByb2MgRmlsZU1vZGUgRnJlZUxpc3QKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxQcmVkZWZpbmVkIEZyZWVaZXJvIEhlYXBFbmQgSGVhcEVycm9yIEhlYXBPcmcgSGVhcFB0cgorICAgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQgSW5PdXRSZXMgT3ZyQ29kZUxpc3QgT3ZyRGVidWdQdHIgT3ZyRG9zSGFuZGxlCisgICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBPdnJFbXNIYW5kbGUgT3ZySGVhcEVuZCBPdnJIZWFwT3JnIE92ckhlYXBQdHIKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxQcmVkZWZpbmVkIE92ckhlYXBTaXplIE92ckxvYWRMaXN0IFByZWZpeFNlZyBSYW5kU2VlZAorICAgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQgU2F2ZUludDAwIFNhdmVJbnQwMiBTYXZlSW50MUIgU2F2ZUludDIxCisgICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBTYXZlSW50MjMgU2F2ZUludDI0IFNhdmVJbnQzNCBTYXZlSW50MzUKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxQcmVkZWZpbmVkIFNhdmVJbnQzNiBTYXZlSW50MzcgU2F2ZUludDM4IFNhdmVJbnQzOQorICAgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQgU2F2ZUludDNBIFNhdmVJbnQzQiBTYXZlSW50M0MgU2F2ZUludDNECisgICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBTYXZlSW50M0UgU2F2ZUludDNGIFNhdmVJbnQ3NSBTZWdBMDAwIFNlZ0IwMDAKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxQcmVkZWZpbmVkIFNlZ0I4MDAgU2VsZWN0b3JJbmMgU3RhY2tMaW1pdCBUZXN0ODA4NworCisgICAgIiBmaWxlIGZ1bmN0aW9ucworICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUFwcGVuZCBBc3NpZ24gQmxvY2tSZWFkIEJsb2NrV3JpdGUgQ2hEaXIgQ2xvc2UKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglFcmFzZSBGaWxlUG9zIEZpbGVTaXplIEZsdXNoIEdldERpciBJT1Jlc3VsdAorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCU1rRGlyIFJlYWQgUmVhZGxuIFJlbmFtZSBSZXNldCBSZXdyaXRlIFJtRGlyCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JU2VlayBTZWVrRW9mIFNlZWtFb2xuIFNldFRleHRCdWYgVHJ1bmNhdGUKKworICAgICIgY3J0IHVuaXQKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglBc3NpZ25DcnQgQ2xyRW9sIENsclNjciBEZWxheSBEZWxMaW5lIEdvdG9YWQorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUhpZ2hWaWRlbyBJbnNMaW5lIEtleVByZXNzZWQgTG93VmlkZW8gTm9ybVZpZGVvCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JTm9Tb3VuZCBSZWFkS2V5IFNvdW5kIFRleHRCYWNrZ3JvdW5kIFRleHRDb2xvcgorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVRleHRNb2RlIFdoZXJlWCBXaGVyZVkgV2luZG93CisgICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBDaGVja0JyZWFrIENoZWNrRU9GIENoZWNrU25vdyBEaXJlY3RWaWRlbworICAgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQgTGFzdE1vZGUgVGV4dEF0dHIgV2luZE1pbiBXaW5kTWF4CisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24gQmlnQ3Vyc29yIEN1cnNvck9mZiBDdXJzb3JPbgorICAgIHN5biBrZXl3b3JkIHBhc2NhbENvbnN0YW50IEJsYWNrIEJsdWUgR3JlZW4gQ3lhbiBSZWQgTWFnZW50YSBCcm93bgorICAgIHN5biBrZXl3b3JkIHBhc2NhbENvbnN0YW50IExpZ2h0R3JheSBEYXJrR3JheSBMaWdodEJsdWUgTGlnaHRHcmVlbgorICAgIHN5biBrZXl3b3JkIHBhc2NhbENvbnN0YW50IExpZ2h0Q3lhbiBMaWdodFJlZCBMaWdodE1hZ2VudGEgWWVsbG93IFdoaXRlCisgICAgc3luIGtleXdvcmQgcGFzY2FsQ29uc3RhbnQgQmxpbmsgU2NyZWVuV2lkdGggU2NyZWVuSGVpZ2h0IGJ3NDAKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxDb25zdGFudCBjbzQwIGJ3ODAgY284MCBtb25vCisgICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBUZXh0Q2hhcgorCisgICAgIiBET1MgdW5pdAorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUFkZERpc2sgRGlza0ZyZWUgRGlza1NpemUgRG9zRXhpdENvZGUgRG9zVmVyc2lvbgorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUVudkNvdW50IEVudlN0ciBFeGVjIEV4cGFuZCBGaW5kQ2xvc2UgRmluZEZpcnN0CisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JRmluZE5leHQgRlNlYXJjaCBGU3BsaXQgR2V0Q0JyZWFrIEdldERhdGUKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglHZXRFbnYgR2V0RkF0dHIgR2V0RlRpbWUgR2V0SW50VmVjIEdldFRpbWUKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglHZXRWZXJpZnkgSW50ciBLZWVwIE1TRG9zIFBhY2tUaW1lIFNldENCcmVhaworICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVNldERhdGUgU2V0RkF0dHIgU2V0RlRpbWUgU2V0SW50VmVjIFNldFRpbWUKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTZXRWZXJpZnkgU3dhcFZlY3RvcnMgVW5QYWNrVGltZQorICAgIHN5biBrZXl3b3JkIHBhc2NhbENvbnN0YW50CUZDYXJyeSBGUGFyaXR5IEZBdXhpbGlhcnkgRlplcm8gRlNpZ24gRk92ZXJmbG93CisgICAgc3luIGtleXdvcmQgcGFzY2FsQ29uc3RhbnQJSGlkZGVuIFN5c2ZpbGUgVm9sdW1lSWQgRGlyZWN0b3J5IEFyY2hpdmUKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxDb25zdGFudAlBbnlGaWxlIGZtQ2xvc2VkIGZtSW5wdXQgZm1PdXRwdXQgZm1Jbm91dAorICAgIHN5biBrZXl3b3JkIHBhc2NhbENvbnN0YW50CVRleHRSZWNOYW1lTGVuZ3RoIFRleHRSZWNCdWZTaXplCisgICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlDb21TdHIgUGF0aFN0ciBEaXJTdHIgTmFtZVN0ciBFeHRTdHIgU2VhcmNoUmVjCisgICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlGaWxlUmVjIFRleHRCdWYgVGV4dFJlYyBSZWdpc3RlcnMgRGF0ZVRpbWUKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxQcmVkZWZpbmVkIERvc0Vycm9yCisKKyAgICAiR3JhcGggVW5pdAorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUFyYyBCYXIgQmFyM0QgQ2lyY2xlIENsZWFyRGV2aWNlIENsZWFyVmlld1BvcnQKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglDbG9zZUdyYXBoIERldGVjdEdyYXBoIERyYXdQb2x5IEVsbGlwc2UKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglGaWxsRWxsaXBzZSBGaWxsUG9seSBGbG9vZEZpbGwgR2V0QXJjQ29vcmRzCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JR2V0QXNwZWN0UmF0aW8gR2V0QmtDb2xvciBHZXRDb2xvcgorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUdldERlZmF1bHRQYWxldHRlIEdldERyaXZlck5hbWUgR2V0RmlsbFBhdHRlcm4KKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglHZXRGaWxsU2V0dGluZ3MgR2V0R3JhcGhNb2RlIEdldEltYWdlCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JR2V0TGluZVNldHRpbmdzIEdldE1heENvbG9yIEdldE1heE1vZGUgR2V0TWF4WAorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUdldE1heFkgR2V0TW9kZU5hbWUgR2V0TW9kZVJhbmdlIEdldFBhbGV0dGUKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglHZXRQYWxldHRlU2l6ZSBHZXRQaXhlbCBHZXRUZXh0U2V0dGluZ3MKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglHZXRWaWV3U2V0dGluZ3MgR2V0WCBHZXRZIEdyYXBoRGVmYXVsdHMKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglHcmFwaEVycm9yTXNnIEdyYXBoUmVzdWx0IEltYWdlU2l6ZSBJbml0R3JhcGgKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglJbnN0YWxsVXNlckRyaXZlciBJbnN0YWxsVXNlckZvbnQgTGluZSBMaW5lUmVsCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JTGluZVRvIE1vdmVSZWwgTW92ZVRvIE91dFRleHQgT3V0VGV4dFhZCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JUGllU2xpY2UgUHV0SW1hZ2UgUHV0UGl4ZWwgUmVjdGFuZ2xlCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JUmVnaXN0ZXJCR0lEcml2ZXIgUmVnaXN0ZXJCR0lGb250CisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JUmVzdG9yZUNSVE1vZGUgU2VjdG9yIFNldEFjdGl2ZVBhZ2UKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTZXRBbGxQYWxsZXR0ZSBTZXRBc3BlY3RSYXRpbyBTZXRCa0NvbG9yCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JU2V0Q29sb3IgU2V0RmlsbFBhdHRlcm4gU2V0RmlsbFN0eWxlCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JU2V0R3JhcGhCdWZTaXplIFNldEdyYXBoTW9kZSBTZXRMaW5lU3R5bGUKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTZXRQYWxldHRlIFNldFJHQlBhbGV0dGUgU2V0VGV4dEp1c3RpZnkKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTZXRUZXh0U3R5bGUgU2V0VXNlckNoYXJTaXplIFNldFZpZXdQb3J0CisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JU2V0VmlzdWFsUGFnZSBTZXRXcml0ZU1vZGUgVGV4dEhlaWdodCBUZXh0V2lkdGgKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCUFyY0Nvb3Jkc1R5cGUgRmlsbFBhdHRlcm5UeXBlIEZpbGxTZXR0aW5nc1R5cGUKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCUxpbmVTZXR0aW5nc1R5cGUgUGFsZXR0ZVR5cGUgUG9pbnRUeXBlCisgICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlUZXh0U2V0dGluZ3NUeXBlIFZpZXdQb3J0VHlwZQorCisgICAgIiBzdHJpbmcgZnVuY3Rpb25zCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JU3RyQWxsb2MgU3RyQnVmU2l6ZSBTdHJDYXQgU3RyQ29tcCBTdHJDb3B5CisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JU3RyRGlzcG9zZSBTdHJFQ29weSBTdHJFbmQgU3RyRm10IFN0cklDb21wCisgICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JU3RyTENhdCBTdHJMQ29tcCBTdHJMQ29weSBTdHJMZW4gU3RyTEZtdAorICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVN0ckxJQ29tcCBTdHJMb3dlciBTdHJNb3ZlIFN0ck5ldyBTdHJQYXMKKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTdHJQQ29weSBTdHJQTENvcHkgU3RyUG9zIFN0clJTY2FuIFN0clNjYW4KKyAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTdHJVcHBlcgorICBlbmRpZgorCitlbmRpZgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9wYXNjYWxfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcGFzY2FsX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHBhc2NhbEFjY2VzCQlwYXNjYWxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBhc2NhbEJvb2xlYW4JCUJvb2xlYW4KKyAgSGlMaW5rIHBhc2NhbENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHBhc2NhbENvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluayBwYXNjYWxDb25zdGFudAkJQ29uc3RhbnQKKyAgSGlMaW5rIHBhc2NhbERlbGltaXRlcglJZGVudGlmaWVyCisgIEhpTGluayBwYXNjYWxEaXJlY3RpdmUJcGFzY2FsU3RhdGVtZW50CisgIEhpTGluayBwYXNjYWxFeGNlcHRpb24JRXhjZXB0aW9uCisgIEhpTGluayBwYXNjYWxGbG9hdAkJRmxvYXQKKyAgSGlMaW5rIHBhc2NhbEZ1bmN0aW9uCQlGdW5jdGlvbgorICBIaUxpbmsgcGFzY2FsTGFiZWwJCUxhYmVsCisgIEhpTGluayBwYXNjYWxNYXRyaXhEZWxpbWl0ZXIJSWRlbnRpZmllcgorICBIaUxpbmsgcGFzY2FsTW9kaWZpZXIJCVR5cGUKKyAgSGlMaW5rIHBhc2NhbE51bWJlcgkJTnVtYmVyCisgIEhpTGluayBwYXNjYWxPcGVyYXRvcgkJT3BlcmF0b3IKKyAgSGlMaW5rIHBhc2NhbFByZWRlZmluZWQJcGFzY2FsU3RhdGVtZW50CisgIEhpTGluayBwYXNjYWxQcmVQcm9jCQlQcmVQcm9jCisgIEhpTGluayBwYXNjYWxSZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgcGFzY2FsU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgcGFzY2FsU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHBhc2NhbFN0cmluZ0VzY2FwZQlTcGVjaWFsCisgIEhpTGluayBwYXNjYWxTdHJpbmdFc2NhcGVHUEMJU3BlY2lhbAorICBIaUxpbmsgcGFzY2FsU3RyaW5nRXJyb3IJRXJyb3IKKyAgSGlMaW5rIHBhc2NhbFN0cnVjdAkJcGFzY2FsU3RhdGVtZW50CisgIEhpTGluayBwYXNjYWxTeW1ib2xPcGVyYXRvcglwYXNjYWxPcGVyYXRvcgorICBIaUxpbmsgcGFzY2FsVG9kbwkJVG9kbworICBIaUxpbmsgcGFzY2FsVHlwZQkJVHlwZQorICBIaUxpbmsgcGFzY2FsVW5jbGFzc2lmaWVkCXBhc2NhbFN0YXRlbWVudAorICAiICBIaUxpbmsgcGFzY2FsQXNtCQlBc3NlbWJsZXIKKyAgSGlMaW5rIHBhc2NhbEVycm9yCQlFcnJvcgorICBIaUxpbmsgcGFzY2FsQXNtS2V5CQlwYXNjYWxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBhc2NhbFNob3dUYWIJCUVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicGFzY2FsIgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9wY2FwLnZpbSBiL3J1bnRpbWUvc3ludGF4L3BjYXAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDBkNDIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wY2FwLnZpbQpAQCAtMCwwICsxLDY1IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBDb25maWcgZmlsZToJcHJpbnRjYXAKKyIgTWFpbnRhaW5lcjoJTGVubmFydCBTY2h1bHR6IDxMZW5uYXJ0LlNjaHVsdHpAZWNtd2YuaW50PiAoZGVmdW5jdCkKKyIJCU1vZGlmaWVkIGJ5IEJyYW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworImRlZmluZSBrZXl3b3JkcworaWYgdmVyc2lvbiA8IDYwMAorICBzZXQgaXNrPUAsNDYtNTcsXywtLCMsPSwxOTItMjU1CitlbHNlCisgIHNldGxvY2FsIGlzaz1ALDQ2LTU3LF8sLSwjLD0sMTkyLTI1NQorZW5kaWYKKworImZpcnN0IGFsbCB0aGUgYmFkIGd1eXMKK3N5biBtYXRjaCBwY2FwQmFkICdeLlwrJCcJICAgICAgICJkZWZpbmUgYW55IGxpbmUgYXMgYmFkCitzeW4gbWF0Y2ggcGNhcEJhZHdvcmQgJ1xrXCsnIGNvbnRhaW5lZCAiZGVmaW5lIGFueSBzZXF1ZW5jZSBvZiBrZXl3b3JkcyBhcyBiYWQKK3N5biBtYXRjaCBwY2FwQmFkd29yZCAnOicgY29udGFpbmVkICAgICJkZWZpbmUgYW55IHNpbmdsZSA6IGFzIGJhZAorc3luIG1hdGNoIHBjYXBCYWR3b3JkICdcXCcgY29udGFpbmVkICAgImRlZmluZSBhbnkgc2luZ2xlIFwgYXMgYmFkCisidGhlbiB0aGUgZ29vZCBib3lzCisiIEJvb2xlYW4ga2V5d29yZHMKK3N5biBtYXRjaCBwY2FwS2V5d29yZCBjb250YWluZWQgJzpcKGZvXHxobFx8aWNcfHJzXHxyd1x8c2JcfHNjXHxzZlx8c2hcKScKKyIgTnVtZXJpYyBLZXl3b3Jkcworc3luIG1hdGNoIHBjYXBLZXl3b3JkIGNvbnRhaW5lZCAnOlwoYnJcfGR1XHxmY1x8ZnNcfG14XHxwY1x8cGxcfHB3XHxweFx8cHlcfHhjXHx4c1wpI1xkXCsnCisiIFN0cmluZyBLZXl3b3Jkcworc3luIG1hdGNoIHBjYXBLZXl3b3JkIGNvbnRhaW5lZCAnOlwoYWZcfGNmXHxkZlx8ZmZcfGdmXHxpZlx8bGZcfGxvXHxscFx8bmRcfG5mXHxvZlx8cmZcfHJnXHxybVx8cnBcfHNkXHxzdFx8dGZcfHRyXHx2ZlwpPVxrKicKKyIgYWxsb3cgY29udGludWF0aW9uCitzeW4gbWF0Y2ggcGNhcEVuZCAnOlxcJCcgY29udGFpbmVkCisiCitzeW4gbWF0Y2ggcGNhcERlZmluZUxhc3QgJ15ccy5cKyQnIGNvbnRhaW5zPXBjYXBCYWR3b3JkLHBjYXBLZXl3b3JkCitzeW4gbWF0Y2ggcGNhcERlZmluZSAnXlxzLlwrJCcgY29udGFpbnM9cGNhcEJhZHdvcmQscGNhcEtleXdvcmQscGNhcEVuZAorc3luIG1hdGNoIHBjYXBIZWFkZXIgJ15ca1tefF1cK1wofFxrW158XVwrXCkqOlxcJCcKK3N5biBtYXRjaCBwY2FwQ29tbWVudCAiIy4qJCIKKworc3luIHN5bmMgbWlubGluZXM9NTAKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9wY2FwX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3BjYXBfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgcGNhcEJhZCBXYXJuaW5nTXNnCisgIEhpTGluayBwY2FwQmFkd29yZCBXYXJuaW5nTXNnCisgIEhpTGluayBwY2FwQ29tbWVudCBDb21tZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInBjYXAiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9wY2N0cy52aW0gYi9ydW50aW1lL3N5bnRheC9wY2N0cy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY1MjY4MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3BjY3RzLnZpbQpAQCAtMCwwICsxLDEwNiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVBDQ1RTCisiIE1haW50YWluZXI6CVNjb3R0IEJpZ2hhbSA8ZHNiQGNzLmR1a2UuZWR1PgorIiBMYXN0IENoYW5nZToJMTAgQXVnIDE5OTkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFJlYWQgdGhlIEMrKyBzeW50YXggdG8gc3RhcnQgd2l0aAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW4gaW5jbHVkZSBAY3BwVG9wTGV2ZWwgPHNmaWxlPjpwOmgvY3BwLnZpbQorZWxzZQorICBzeW4gaW5jbHVkZSBAY3BwVG9wTGV2ZWwgc3ludGF4L2NwcC52aW0KK2VuZGlmCisKK3N5biByZWdpb24gcGNjdHNBY3Rpb24gbWF0Y2hncm91cD1wY2N0c0RlbGltIHN0YXJ0PSI8PCIgZW5kPSI+Pj9cPSIgY29udGFpbnM9QGNwcFRvcExldmVsLHBjY3RzUnVsZVJlZgorCitzeW4gcmVnaW9uIHBjY3RzQXJnQmxvY2sgbWF0Y2hncm91cD1wY2N0c0RlbGltIHN0YXJ0PSJcKD5ccypcKVw9XFsiIGVuZD0iXF0iIGNvbnRhaW5zPUBjcHBUb3BMZXZlbCxwY2N0c1J1bGVSZWYKKworc3luIHJlZ2lvbiBwY2N0c1N0cmluZyBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPXBjY3RzU3BlY2lhbENoYXIKK3N5biBtYXRjaCAgcGNjdHNTcGVjaWFsQ2hhciAiXFxcXFx8XFxcIiIgY29udGFpbmVkCisKK3N5biByZWdpb24gcGNjdHNDb21tZW50IHN0YXJ0PSIvXCoiIGVuZD0iXCovIiBjb250YWlucz1jVG9kbworc3luIG1hdGNoICBwY2N0c0NvbW1lbnQgIi8vLiokIiBjb250YWlucz1jVG9kbworCitzeW4gcmVnaW9uIHBjY3RzRGlyZWN0aXZlIHN0YXJ0PSJeXHMqI2hlYWRlclxzXCs8PCIgZW5kPSI+PiIgY29udGFpbnM9cGNjdHNBY3Rpb24ga2VlcGVuZAorc3luIG1hdGNoICBwY2N0c0RpcmVjdGl2ZSAiXlxzKiNwYXJzZXJcPi4qJCIgY29udGFpbnM9cGNjdHNTdHJpbmcscGNjdHNDb21tZW50CitzeW4gbWF0Y2ggIHBjY3RzRGlyZWN0aXZlICJeXHMqI3Rva2RlZnNcPi4qJCIgY29udGFpbnM9cGNjdHNTdHJpbmcscGNjdHNDb21tZW50CitzeW4gbWF0Y2ggIHBjY3RzRGlyZWN0aXZlICJeXHMqI3Rva2VuXD4uKiQiIGNvbnRhaW5zPXBjY3RzU3RyaW5nLHBjY3RzQWN0aW9uLHBjY3RzVG9rZW5OYW1lLHBjY3RzQ29tbWVudAorc3luIHJlZ2lvbiBwY2N0c0RpcmVjdGl2ZSBzdGFydD0iXlxzKiN0b2tjbGFzc1xzXCtbQS1aXVxpKlxzXCt7IiBlbmQ9In0iIGNvbnRhaW5zPXBjY3RzU3RyaW5nLHBjY3RzVG9rZW5OYW1lCitzeW4gbWF0Y2ggIHBjY3RzRGlyZWN0aXZlICJeXHMqI2xleGNsYXNzXD4uKiQiIGNvbnRhaW5zPXBjY3RzVG9rZW5OYW1lCitzeW4gcmVnaW9uIHBjY3RzRGlyZWN0aXZlIHN0YXJ0PSJeXHMqI2VycmNsYXNzXHNcK1tee11cK1xzXCt7IiBlbmQ9In0iIGNvbnRhaW5zPXBjY3RzU3RyaW5nLHBjY3RzVG9rZW5OYW1lCitzeW4gbWF0Y2ggcGNjdHNEaXJlY3RpdmUgIl5ccyojcHJlZFw+LiokIiBjb250YWlucz1wY2N0c1Rva2VuTmFtZSxwY2N0c0FjdGlvbgorCitzeW4gY2x1c3RlciBwY2N0c0luUnVsZSBjb250YWlucz1wY2N0c1N0cmluZyxwY2N0c1J1bGVOYW1lLHBjY3RzVG9rZW5OYW1lLHBjY3RzQWN0aW9uLHBjY3RzQXJnQmxvY2sscGNjdHNTdWJSdWxlLHBjY3RzTGFiZWwscGNjdHNDb21tZW50CisKK3N5biByZWdpb24gcGNjdHNSdWxlIHN0YXJ0PSJcPFthLXpdW0EtWmEtejAtOV9dKlw+XChccypcW1teXV0qXF1cKVw9XChccyo+XHMqXFtbXl1dKlxdXClcPVxzKjoiIGVuZD0iOyIgY29udGFpbnM9QHBjY3RzSW5SdWxlCisKK3N5biByZWdpb24gcGNjdHNTdWJSdWxlIG1hdGNoZ3JvdXA9cGNjdHNEZWxpbSBzdGFydD0iKCIgZW5kPSIpXCgrXHxcKlx8P1woXHMqPT5cKVw9XClcPSIgY29udGFpbnM9QHBjY3RzSW5SdWxlIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBwY2N0c1N1YlJ1bGUgbWF0Y2hncm91cD1wY2N0c0RlbGltIHN0YXJ0PSJ7IiBlbmQ9In0iIGNvbnRhaW5zPUBwY2N0c0luUnVsZSBjb250YWluZWQKKworc3luIG1hdGNoIHBjY3RzUnVsZU5hbWUgICJcPFthLXpdXGkqXD4iIGNvbnRhaW5lZAorc3luIG1hdGNoIHBjY3RzVG9rZW5OYW1lICJcPFtBLVpdXGkqXD4iIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggcGNjdHNMYWJlbCAiXDxcSVxpKjpcSVxpKiIgY29udGFpbmVkIGNvbnRhaW5zPXBjY3RzTGFiZWxIYWNrLHBjY3RzUnVsZU5hbWUscGNjdHNUb2tlbk5hbWUKK3N5biBtYXRjaCBwY2N0c0xhYmVsICJcPFxJXGkqOlwiXChbXlxcXVx8XFwuXCkqXCIiIGNvbnRhaW5lZCBjb250YWlucz1wY2N0c0xhYmVsSGFjayxwY2N0c1N0cmluZworc3luIG1hdGNoIHBjY3RzTGFiZWxIYWNrICJcPFxJXGkqOiIgY29udGFpbmVkCisKK3N5biBtYXRjaCBwY2N0c1J1bGVSZWYgIlwkXElcaSpcPiIgY29udGFpbmVkCitzeW4gbWF0Y2ggcGNjdHNSdWxlUmVmICJcJFxkXCtcKFwuXGRcK1wpXD4iIGNvbnRhaW5lZAorCitzeW4ga2V5d29yZCBwY2N0c0NsYXNzICAgICBjbGFzcyAgIG5leHRncm91cD1wY2N0c0NsYXNzTmFtZSBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHBjY3RzQ2xhc3NOYW1lICJcPFxJXGkqXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cGNjdHNDbGFzc0Jsb2NrIHNraXB3aGl0ZSBza2lwbmwKK3N5biByZWdpb24gcGNjdHNDbGFzc0Jsb2NrIHN0YXJ0PSJ7IiBlbmQ9In0iIGNvbnRhaW5lZCBjb250YWlucz1wY2N0c1J1bGUscGNjdHNDb21tZW50LHBjY3RzRGlyZWN0aXZlLHBjY3RzQWN0aW9uLHBjY3RzRXhjZXB0aW9uLHBjY3RzRXhjZXB0aW9uSGFuZGxlcgorCitzeW4ga2V5d29yZCBwY2N0c0V4Y2VwdGlvbiBleGNlcHRpb24gbmV4dGdyb3VwPXBjY3RzRXhjZXB0aW9uUnVsZVJlZiBza2lwd2hpdGUKK3N5biBtYXRjaCBwY2N0c0V4Y2VwdGlvblJ1bGVSZWYgIlxbXElcaSpcXSIgY29udGFpbmVkIGNvbnRhaW5zPXBjY3RzRXhjZXB0aW9uSUQKK3N5biBtYXRjaCBwY2N0c0V4Y2VwdGlvbklEICJcSVxpKiIgY29udGFpbmVkCitzeW4ga2V5d29yZCBwY2N0c0V4Y2VwdGlvbkhhbmRsZXIJY2F0Y2ggZGVmYXVsdAorc3luIGtleXdvcmQgcGNjdHNFeGNlcHRpb25IYW5kbGVyCU5vVmlhYmxlQWx0IE5vU2VtVmlhYmxlQWx0CitzeW4ga2V5d29yZCBwY2N0c0V4Y2VwdGlvbkhhbmRsZXIJTWlzbWF0Y2hlZFRva2VuCisKK3N5biBzeW5jIGNsZWFyCitzeW4gc3luYyBtYXRjaCBwY2N0c1N5bmNBY3Rpb24gZ3JvdXBoZXJlIHBjY3RzQWN0aW9uICI8PCIKK3N5biBzeW5jIG1hdGNoIHBjY3RzU3luY0FjdGlvbiAiPDxcKFtePl1cfD5bXj5dXCkqPj4iCitzeW4gc3luYyBtYXRjaCBwY2N0c1N5bmNSdWxlIGdyb3VwaGVyZSBwY2N0c1J1bGUgIlw8W2Etel1bQS1aYS16MC05X10qXD5ccypcW1teXV0qXF1ccyo6Igorc3luIHN5bmMgbWF0Y2ggcGNjdHNTeW5jUnVsZSBncm91cGhlcmUgcGNjdHNSdWxlICJcPFthLXpdW0EtWmEtejAtOV9dKlw+XChccypcW1teXV0qXF1cKVw9XHMqPlxzKlxbW15dXSpcXVxzKjoiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3BjY3RzX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3BjY3RzX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHBjY3RzRGVsaW0JCVNwZWNpYWwKKyAgSGlMaW5rIHBjY3RzVG9rZW5OYW1lCQlJZGVudGlmaWVyCisgIEhpTGluayBwY2N0c1J1bGVOYW1lCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHBjY3RzTGFiZWxIYWNrCQlMYWJlbAorICBIaUxpbmsgcGNjdHNEaXJlY3RpdmUJCVByZVByb2MKKyAgSGlMaW5rIHBjY3RzU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHBjY3RzQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgcGNjdHNDbGFzcwkJU3RhdGVtZW50CisgIEhpTGluayBwY2N0c0NsYXNzTmFtZQkJSWRlbnRpZmllcgorICBIaUxpbmsgcGNjdHNFeGNlcHRpb24JCVN0YXRlbWVudAorICBIaUxpbmsgcGNjdHNFeGNlcHRpb25IYW5kbGVyCUtleXdvcmQKKyAgSGlMaW5rIHBjY3RzRXhjZXB0aW9uUnVsZVJlZglwY2N0c0RlbGltCisgIEhpTGluayBwY2N0c0V4Y2VwdGlvbklECUlkZW50aWZpZXIKKyAgSGlMaW5rIHBjY3RzUnVsZVJlZgkJSWRlbnRpZmllcgorICBIaUxpbmsgcGNjdHNTcGVjaWFsQ2hhcglTcGVjaWFsQ2hhcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJwY2N0cyIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3BlcmwudmltIGIvcnVudGltZS9zeW50YXgvcGVybC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4ODcyOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3BlcmwudmltCkBAIC0wLDAgKzEsNTU2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJUGVybAorIiBNYWludGFpbmVyOglOaWNrIEhpYm1hIDxuX2hpYm1hQHZhbi1sYWFyaG92ZW4ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXkgMTYKKyIgTG9jYXRpb246CWh0dHA6Ly93d3cudmFuLWxhYXJob3Zlbi5vcmcvdmltL3N5bnRheC9wZXJsLnZpbQorIgorIiBQbGVhc2UgZG93bmxvYWQgbW9zdCByZWNlbnQgdmVyc2lvbiBmaXJzdCBiZWZvcmUgbWFpbGluZworIiBhbnkgY29tbWVudHMuCisiIFNlZSBhbHNvIHRoZSBmaWxlIHBlcmwudmltLnJlZ3Jlc3Npb24ucGwgdG8gY2hlY2sgd2hldGhlciB5b3VyCisiIG1vZGlmaWNhdGlvbnMgd29yayBpbiB0aGUgbW9zdCBvZGQgY2FzZXMKKyIgaHR0cDovL3d3dy52YW4tbGFhcmhvdmVuLm9yZy92aW0vc3ludGF4L3BlcmwudmltLnJlZ3Jlc3Npb24ucGwKKyIKKyIgT3JpZ2luYWwgdmVyc2lvbjogU29uaWEgSGVpbWFubiA8bmlhbmlhQG5ldHN1cmYub3JnPgorIiBUaGFua3MgdG8gbWFueSBwZW9wbGUgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbi4KKworIiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSBmb3IgdHVuaW5nIHRoZQorIiBwZXJsIHN5bnRheCBoaWdobGlnaHRpbmcsIHdpdGggZGVmYXVsdHMgZ2l2ZW46CisiCisiIHVubGV0IHBlcmxfaW5jbHVkZV9wb2QKKyIgdW5sZXQgcGVybF93YW50X3Njb3BlX2luX3ZhcmlhYmxlcworIiB1bmxldCBwZXJsX2V4dGVuZGVkX3ZhcnMKKyIgdW5sZXQgcGVybF9zdHJpbmdfYXNfc3RhdGVtZW50CisiIHVubGV0IHBlcmxfbm9fc3luY19vbl9zdWIKKyIgdW5sZXQgcGVybF9ub19zeW5jX29uX2dsb2JhbF92YXIKKyIgbGV0IHBlcmxfc3luY19kaXN0ID0gMTAwCisiIHVubGV0IHBlcmxfZm9sZAorIiB1bmxldCBwZXJsX2ZvbGRfYmxvY2tzCisKKyIgUmVtb3ZlIGFueSBvbGQgc3ludGF4IHN0dWZmIHRoYXQgd2FzIGxvYWRlZCAoNS54KSBvciBxdWl0IHdoZW4gYSBzeW50YXggZmlsZQorIiB3YXMgYWxyZWFkeSBsb2FkZWQgKDYueCkuCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBVbnNldCBwZXJsX2ZvbGQgaWYgaXQgc2V0IGJ1dCB2aW0gZG9lc24ndCBzdXBwb3J0IGl0LgoraWYgdmVyc2lvbiA8IDYwMCAmJiBleGlzdHMoInBlcmxfZm9sZCIpCisgIHVubGV0IHBlcmxfZm9sZAorZW5kaWYKKworCisiIFBPRCBzdGFydHMgd2l0aCBePTx3b3JkPiBhbmQgZW5kcyB3aXRoIF49Y3V0CisKK2lmIGV4aXN0cygicGVybF9pbmNsdWRlX3BvZCIpCisgICIgSW5jbHVkZSBhIHdoaWxlIGV4dHJhIHN5bnRheCBmaWxlCisgIHN5biBpbmNsdWRlIEBQb2Qgc3ludGF4L3BvZC52aW0KKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorICBpZiBleGlzdHMoInBlcmxfZm9sZCIpCisgICAgc3luIHJlZ2lvbiBwZXJsUE9EIHN0YXJ0PSJePVthLXpdIiBlbmQ9Il49Y3V0IiBjb250YWlucz1AUG9kLHBlcmxUb2RvIGtlZXBlbmQgZm9sZAorICAgIHN5biByZWdpb24gcGVybFBPRCBzdGFydD0iXj1jdXQiIGVuZD0iXj1jdXQiIGNvbnRhaW5zPXBlcmxUb2RvIGtlZXBlbmQgZm9sZAorICBlbHNlCisgICAgc3luIHJlZ2lvbiBwZXJsUE9EIHN0YXJ0PSJePVthLXpdIiBlbmQ9Il49Y3V0IiBjb250YWlucz1AUG9kLHBlcmxUb2RvIGtlZXBlbmQKKyAgICBzeW4gcmVnaW9uIHBlcmxQT0Qgc3RhcnQ9Il49Y3V0IiBlbmQ9Il49Y3V0IiBjb250YWlucz1wZXJsVG9kbyBrZWVwZW5kCisgIGVuZGlmCitlbHNlCisgICIgVXNlIG9ubHkgdGhlIGJhcmUgbWluaW11bSBvZiBydWxlcworICBpZiBleGlzdHMoInBlcmxfZm9sZCIpCisgICAgc3luIHJlZ2lvbiBwZXJsUE9EIHN0YXJ0PSJePVthLXpdIiBlbmQ9Il49Y3V0IiBmb2xkCisgIGVsc2UKKyAgICBzeW4gcmVnaW9uIHBlcmxQT0Qgc3RhcnQ9Il49W2Etel0iIGVuZD0iXj1jdXQiCisgIGVuZGlmCitlbmRpZgorCisKKyIgQWxsIGtleXdvcmRzCisiCitpZiBleGlzdHMoInBlcmxfZm9sZCIpICYmIGV4aXN0cygicGVybF9mb2xkX2Jsb2NrcyIpCisgIHN5biBtYXRjaCBwZXJsQ29uZGl0aW9uYWwJCSJcPGlmXD4iCisgIHN5biBtYXRjaCBwZXJsQ29uZGl0aW9uYWwJCSJcPGVsc2lmXD4iCisgIHN5biBtYXRjaCBwZXJsQ29uZGl0aW9uYWwJCSJcPHVubGVzc1w+IgorICBzeW4gbWF0Y2ggcGVybENvbmRpdGlvbmFsCQkiXDxlbHNlXD4iIG5leHRncm91cD1wZXJsRWxzZUlmRXJyb3Igc2tpcHdoaXRlIHNraXBubCBza2lwZW1wdHkKK2Vsc2UKKyAgc3luIGtleXdvcmQgcGVybENvbmRpdGlvbmFsCQlpZiBlbHNpZiB1bmxlc3MKKyAgc3luIGtleXdvcmQgcGVybENvbmRpdGlvbmFsCQllbHNlIG5leHRncm91cD1wZXJsRWxzZUlmRXJyb3Igc2tpcHdoaXRlIHNraXBubCBza2lwZW1wdHkKK2VuZGlmCitzeW4ga2V5d29yZCBwZXJsQ29uZGl0aW9uYWwJCXN3aXRjaCBlcSBuZSBndCBsdCBnZSBsZSBjbXAgbm90IGFuZCBvciB4b3IgZXJyCitpZiBleGlzdHMoInBlcmxfZm9sZCIpICYmIGV4aXN0cygicGVybF9mb2xkX2Jsb2NrcyIpCisgIHN5biBtYXRjaCBwZXJsUmVwZWF0CQkJIlw8d2hpbGVcPiIKKyAgc3luIG1hdGNoIHBlcmxSZXBlYXQJCQkiXDxmb3JcPiIKKyAgc3luIG1hdGNoIHBlcmxSZXBlYXQJCQkiXDxmb3JlYWNoXD4iCisgIHN5biBtYXRjaCBwZXJsUmVwZWF0CQkJIlw8ZG9cPiIKKyAgc3luIG1hdGNoIHBlcmxSZXBlYXQJCQkiXDx1bnRpbFw+IgorICBzeW4gbWF0Y2ggcGVybFJlcGVhdAkJCSJcPGNvbnRpbnVlXD4iCitlbHNlCisgIHN5biBrZXl3b3JkIHBlcmxSZXBlYXQJCXdoaWxlIGZvciBmb3JlYWNoIGRvIHVudGlsIGNvbnRpbnVlCitlbmRpZgorc3luIGtleXdvcmQgcGVybE9wZXJhdG9yCQlkZWZpbmVkIHVuZGVmIGFuZCBvciBub3QgYmxlc3MgcmVmCitpZiBleGlzdHMoInBlcmxfZm9sZCIpCisgICIgaWYgQkVHSU4vRU5EIGlzIGEga2V5d29yZCB0aGUgcGVybEJFR0lORU5ERm9sZCBkb2VzIG5vdCB3b3JrCisgIHN5biBtYXRjaCBwZXJsQ29udHJvbAkJCSJcPEJFR0lOXD4iIGNvbnRhaW5lZAorICBzeW4gbWF0Y2ggcGVybENvbnRyb2wJCQkiXDxFTkRcPiIgY29udGFpbmVkCitlbHNlCisgIHN5biBrZXl3b3JkIHBlcmxDb250cm9sCQlCRUdJTiBFTkQKK2VuZGlmCisKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRTdG9yYWdlCW15IGxvY2FsIG91cgorc3luIGtleXdvcmQgcGVybFN0YXRlbWVudENvbnRyb2wJZ290byByZXR1cm4gbGFzdCBuZXh0IHJlZG8KK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRTY2FsYXIJCWNob21wIGNob3AgY2hyIGNyeXB0IGluZGV4IGxjIGxjZmlyc3QgbGVuZ3RoIG9yZCBwYWNrIHJldmVyc2UgcmluZGV4IHNwcmludGYgc3Vic3RyIHVjIHVjZmlyc3QKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRSZWdleHAJCXBvcyBxdW90ZW1ldGEgc3BsaXQgc3R1ZHkKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnROdW1lcmljCWFicyBhdGFuMiBjb3MgZXhwIGhleCBpbnQgbG9nIG9jdCByYW5kIHNpbiBzcXJ0IHNyYW5kCitzeW4ga2V5d29yZCBwZXJsU3RhdGVtZW50TGlzdAkJc3BsaWNlIHVuc2hpZnQgc2hpZnQgcHVzaCBwb3Agc3BsaXQgam9pbiByZXZlcnNlIGdyZXAgbWFwIHNvcnQgdW5wYWNrCitzeW4ga2V5d29yZCBwZXJsU3RhdGVtZW50SGFzaAkJZWFjaCBleGlzdHMga2V5cyB2YWx1ZXMgdGllIHRpZWQgdW50aWUKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRJT2Z1bmMJCWNhcnAgY29uZmVzcyBjcm9hayBkYm1jbG9zZSBkYm1vcGVuIGRpZSBzeXNjYWxsCitzeW4ga2V5d29yZCBwZXJsU3RhdGVtZW50RmlsZWRlc2MJYmlubW9kZSBjbG9zZSBjbG9zZWRpciBlb2YgZmlsZW5vIGdldGMgbHN0YXQgcHJpbnQgcHJpbnRmIHJlYWRkaXIgcmVhZGxpbmUgcmVhZHBpcGUgcmV3aW5kZGlyIHNlbGVjdCBzdGF0IHRlbGwgdGVsbGRpciB3cml0ZSBuZXh0Z3JvdXA9cGVybEZpbGVkZXNjU3RhdGVtZW50Tm9jb21tYSBza2lwd2hpdGUKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRGaWxlZGVzYwlmY250bCBmbG9jayBpb2N0bCBvcGVuIG9wZW5kaXIgcmVhZCBzZWVrIHNlZWtkaXIgc3lzb3BlbiBzeXNyZWFkIHN5c3NlZWsgc3lzd3JpdGUgdHJ1bmNhdGUgbmV4dGdyb3VwPXBlcmxGaWxlZGVzY1N0YXRlbWVudENvbW1hIHNraXB3aGl0ZQorc3luIGtleXdvcmQgcGVybFN0YXRlbWVudFZlY3RvcgkJcGFjayB2ZWMKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRGaWxlcwkJY2hkaXIgY2htb2QgY2hvd24gY2hyb290IGdsb2IgbGluayBta2RpciByZWFkbGluayByZW5hbWUgcm1kaXIgc3ltbGluayB1bWFzayB1bmxpbmsgdXRpbWUKK3N5biBtYXRjaCAgIHBlcmxTdGF0ZW1lbnRGaWxlcwkJIi1bcnd4b1JXWE9lenNmZGxwU2JjdHVna1RCTUFDXVw+Igorc3luIGtleXdvcmQgcGVybFN0YXRlbWVudEZsb3cJCWNhbGxlciBkaWUgZHVtcCBldmFsIGV4aXQgd2FudGFycmF5CitzeW4ga2V5d29yZCBwZXJsU3RhdGVtZW50SW5jbHVkZQlyZXF1aXJlCitzeW4gbWF0Y2ggICBwZXJsU3RhdGVtZW50SW5jbHVkZQkiXCh1c2VcfG5vXClcc1wrXChpbnRlZ2VyXD5cfHN0cmljdFw+XHxsaWJcPlx8c2lndHJhcFw+XHxzdWJzXD5cfHZhcnNcPlx8d2FybmluZ3NcPlx8dXRmOFw+XHxieXRlXD5cKVw9Igorc3luIGtleXdvcmQgcGVybFN0YXRlbWVudFNjb3BlCQlpbXBvcnQKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRQcm9jCQlhbGFybSBleGVjIGZvcmsgZ2V0cGdycCBnZXRwcGlkIGdldHByaW9yaXR5IGtpbGwgcGlwZSBzZXRwZ3JwIHNldHByaW9yaXR5IHNsZWVwIHN5c3RlbSB0aW1lcyB3YWl0IHdhaXRwaWQKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRTb2NrZXQJCWFjY2VwdCBiaW5kIGNvbm5lY3QgZ2V0cGVlcm5hbWUgZ2V0c29ja25hbWUgZ2V0c29ja29wdCBsaXN0ZW4gcmVjdiBzZW5kIHNldHNvY2tvcHQgc2h1dGRvd24gc29ja2V0IHNvY2tldHBhaXIKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRJUEMJCW1zZ2N0bCBtc2dnZXQgbXNncmN2IG1zZ3NuZCBzZW1jdGwgc2VtZ2V0IHNlbW9wIHNobWN0bCBzaG1nZXQgc2htcmVhZCBzaG13cml0ZQorc3luIGtleXdvcmQgcGVybFN0YXRlbWVudE5ldHdvcmsJZW5kaG9zdGVudCBlbmRuZXRlbnQgZW5kcHJvdG9lbnQgZW5kc2VydmVudCBnZXRob3N0YnlhZGRyIGdldGhvc3RieW5hbWUgZ2V0aG9zdGVudCBnZXRuZXRieWFkZHIgZ2V0bmV0YnluYW1lIGdldG5ldGVudCBnZXRwcm90b2J5bmFtZSBnZXRwcm90b2J5bnVtYmVyIGdldHByb3RvZW50IGdldHNlcnZieW5hbWUgZ2V0c2VydmJ5cG9ydCBnZXRzZXJ2ZW50IHNldGhvc3RlbnQgc2V0bmV0ZW50IHNldHByb3RvZW50IHNldHNlcnZlbnQKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRQd29yZAkJZ2V0cHd1aWQgZ2V0cHduYW0gZ2V0cHdlbnQgc2V0cHdlbnQgZW5kcHdlbnQgZ2V0Z3JlbnQgZ2V0Z3JnaWQgZ2V0bG9naW4gZ2V0Z3JuYW0gc2V0Z3JlbnQgZW5kZ3JlbnQKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRUaW1lCQlnbXRpbWUgbG9jYWx0aW1lIHRpbWUgdGltZXMKKworc3luIGtleXdvcmQgcGVybFN0YXRlbWVudE1pc2MJCXdhcm4gZm9ybWxpbmUgcmVzZXQgc2NhbGFyIGRlbGV0ZSBwcm90b3R5cGUgbG9jaworc3luIGtleXdvcmQgcGVybFN0YXRlbWVudE5ldwkJbmV3CisKK3N5biBrZXl3b3JkIHBlcmxUb2RvCQkJVE9ETyBUQkQgRklYTUUgWFhYIGNvbnRhaW5lZAorCisiIFBlcmwgSWRlbnRpZmllcnMuCisiCisiIFNob3VsZCBiZSBjbGVhbmVkIHVwIHRvIGJldHRlciBoYW5kbGUgaWRlbnRpZmllcnMgaW4gcGFydGljdWxhciBzaXR1YXRpb25zCisiIChpbiBoYXNoIGtleXMgZm9yIGV4YW1wbGUpCisiCisiIFBsYWluIGlkZW50aWZpZXJzOiAkZm9vLCBAZm9vLCAkI2ZvbywgJWZvbywgJmZvbyBhbmQgZGVyZWZlcmVuY2VzICQkZm9vLCBAJGZvbywgZXRjLgorIiBXZSBkbyBub3QgcHJvY2VzcyBjb21wbGV4IHRoaW5ncyBzdWNoIGFzIEB7JHsiZm9vIn19LiBUb28gY29tcGxpY2F0ZWQsIGFuZAorIiB0b28gc2xvdy4gQW5kIHdoYXQgaXMgYWZ0ZXIgdGhlIC0+IGlzICpub3QqIGNvbnNpZGVyZWQgYXMgcGFydCBvZiB0aGUKKyIgdmFyaWFibGUgLSB0aGVyZSBhZ2FpbiwgdG9vIGNvbXBsaWNhdGVkIGFuZCB0b28gc2xvdy4KKworIiBTcGVjaWFsIHZhcmlhYmxlcyBmaXJzdCAoJF5BLCAuLi4pIGFuZCAoJHwsICQnLCAuLi4pCitzeW4gbWF0Y2ggIHBlcmxWYXJQbGFpbgkJICIkXltBREVGSElMTU9QU1RXWF1cPSIKK3N5biBtYXRjaCAgcGVybFZhclBsYWluCQkgIiRbXFxcIlxbXF0nJmArKi4sOz0lfiE/QCQ8PigtXSIKK3N5biBtYXRjaCAgcGVybFZhclBsYWluCQkgIiRcKDBcfFsxLTldWzAtOV0qXCkiCisiIFNhbWUgYXMgYWJvdmUsIGJ1dCBhdm9pZHMgY29uZnVzaW9uIGluICQ6OmZvbyAoZXF1aXZhbGVudCB0byAkbWFpbjo6Zm9vKQorc3luIG1hdGNoICBwZXJsVmFyUGxhaW4JCSAiJDpbXjpdIgorIiBUaGVzZSB2YXJpYWJsZXMgYXJlIG5vdCByZWNvZ25pemVkIHdpdGhpbiBtYXRjaGVzLgorc3luIG1hdGNoICBwZXJsVmFyTm90SW5NYXRjaGVzCSAiJFt8KV0iCisiIFRoaXMgdmFyaWFibGUgaXMgbm90IHJlY29nbml6ZWQgd2l0aGluIG1hdGNoZXMgZGVsaW1pdGVkIGJ5IG0vLy4KK3N5biBtYXRjaCAgcGVybFZhclNsYXNoCQkgIiQvIgorCisiIEFuZCBwbGFpbiBpZGVudGlmaWVycworc3luIG1hdGNoICBwZXJsUGFja2FnZVJlZgkgIlwoXGhcdypcKVw9XCg6Olx8J1wpXEkibWU9ZS0xIGNvbnRhaW5lZAorCisiIFRvIGhpZ2hsaWdodCBwYWNrYWdlcyBpbiB2YXJpYWJsZXMgYXMgYSBzY29wZSByZWZlcmVuY2UgLSBpLmUuIGluICRwYWNrOjp2YXIsCisiIHBhY2s6OiBpcyBhIHNjb3BlLCBqdXN0IHNldCAicGVybF93YW50X3Njb3BlX2luX3ZhcmlhYmxlcyIKKyIgSWYgeW91ICp3YW50KiBjb21wbGV4IHRoaW5ncyBsaWtlIEB7JHsiZm9vIn19IHRvIGJlIHByb2Nlc3NlZCwKKyIganVzdCBzZXQgdGhlIHZhcmlhYmxlICJwZXJsX2V4dGVuZGVkX3ZhcnMiLi4uCisKKyIgRklYTUUgdmFsdWUgYmV0d2VlbiB7fSBzaG91bGQgYmUgbWFya2VkIGFzIHN0cmluZy4gaXMgdHJlYXRlZCBhcyBzdWNoIGJ5IFBlcmwuCisiIEF0IHRoZSBtb21lbnQgaXQgaXMgbWFya2VkIGFzIHNvbWV0aGluZyBncmV5aXNoIGluc3RlYWQgb2YgcmVhZC4gUHJvYmFibHkgdG9kbworIiB3aXRoIHRyYW5zcGFyZW5jeS4gT3IgbWF5YmUgd2Ugc2hvdWxkIGhhbmRsZSB0aGUgYmFyZSB3b3JkIGluIHRoYXQgY2FzZS4gb3IgbWFrZSBpdCBpbnRvCisKK2lmIGV4aXN0cygicGVybF93YW50X3Njb3BlX2luX3ZhcmlhYmxlcyIpCisgIHN5biBtYXRjaCAgcGVybFZhclBsYWluCSJcXFw9XChbQCUkXVx8XCQjXClcJCpcKFxJXGkqXClcPVwoXCg6Olx8J1wpXElcaSpcKSpcPiIgY29udGFpbnM9cGVybFBhY2thZ2VSZWYgbmV4dGdyb3VwPXBlcmxWYXJNZW1iZXIscGVybFZhclNpbXBsZU1lbWJlcixwZXJsTWV0aG9kCisgIHN5biBtYXRjaCAgcGVybEZ1bmN0aW9uTmFtZQkiXFxcPSZcJCpcKFxJXGkqXClcPVwoXCg6Olx8J1wpXElcaSpcKSpcPiIgY29udGFpbnM9cGVybFBhY2thZ2VSZWYgbmV4dGdyb3VwPXBlcmxWYXJNZW1iZXIscGVybFZhclNpbXBsZU1lbWJlcgorZWxzZQorICBzeW4gbWF0Y2ggIHBlcmxWYXJQbGFpbgkiXFxcPVwoW0AlJF1cfFwkI1wpXCQqXChcSVxpKlwpXD1cKFwoOjpcfCdcKVxJXGkqXCkqXD4iIG5leHRncm91cD1wZXJsVmFyTWVtYmVyLHBlcmxWYXJTaW1wbGVNZW1iZXIscGVybE1ldGhvZAorICBzeW4gbWF0Y2ggIHBlcmxGdW5jdGlvbk5hbWUJIlxcXD0mXCQqXChcSVxpKlwpXD1cKFwoOjpcfCdcKVxJXGkqXCkqXD4iIG5leHRncm91cD1wZXJsVmFyTWVtYmVyLHBlcmxWYXJTaW1wbGVNZW1iZXIKK2VuZGlmCisKK2lmIGV4aXN0cygicGVybF9leHRlbmRlZF92YXJzIikKKyAgc3luIGNsdXN0ZXIgcGVybEV4cHIJCWNvbnRhaW5zPXBlcmxTdGF0ZW1lbnRTY2FsYXIscGVybFN0YXRlbWVudFJlZ2V4cCxwZXJsU3RhdGVtZW50TnVtZXJpYyxwZXJsU3RhdGVtZW50TGlzdCxwZXJsU3RhdGVtZW50SGFzaCxwZXJsU3RhdGVtZW50RmlsZXMscGVybFN0YXRlbWVudFRpbWUscGVybFN0YXRlbWVudE1pc2MscGVybFZhclBsYWluLHBlcmxWYXJOb3RJbk1hdGNoZXMscGVybFZhclNsYXNoLHBlcmxWYXJCbG9jayxwZXJsU2hlbGxDb21tYW5kLHBlcmxGbG9hdCxwZXJsTnVtYmVyLHBlcmxTdHJpbmdVbmV4cGFuZGVkLHBlcmxTdHJpbmcscGVybFFRCisgIHN5biByZWdpb24gcGVybFZhckJsb2NrCW1hdGNoZ3JvdXA9cGVybFZhclBsYWluIHN0YXJ0PSJcKCQjXHxbQCUkXVwpXCQqeyIgc2tpcD0iXFx9IiBlbmQ9In0iIGNvbnRhaW5zPUBwZXJsRXhwciBuZXh0Z3JvdXA9cGVybFZhck1lbWJlcixwZXJsVmFyU2ltcGxlTWVtYmVyCisgIHN5biByZWdpb24gcGVybFZhckJsb2NrCW1hdGNoZ3JvdXA9cGVybFZhclBsYWluIHN0YXJ0PSImXCQqeyIgc2tpcD0iXFx9IiBlbmQ9In0iIGNvbnRhaW5zPUBwZXJsRXhwcgorICBzeW4gbWF0Y2ggIHBlcmxWYXJQbGFpbgkiXFxcPVwoXCQjXHxbQCUmJF1cKVwkKntcSVxpKn0iIG5leHRncm91cD1wZXJsVmFyTWVtYmVyLHBlcmxWYXJTaW1wbGVNZW1iZXIKKyAgc3luIHJlZ2lvbiBwZXJsVmFyTWVtYmVyCW1hdGNoZ3JvdXA9cGVybFZhclBsYWluIHN0YXJ0PSJcKC0+XClcPXsiIHNraXA9IlxcfSIgZW5kPSJ9IiBjb250YWluZWQgY29udGFpbnM9QHBlcmxFeHByIG5leHRncm91cD1wZXJsVmFyTWVtYmVyLHBlcmxWYXJTaW1wbGVNZW1iZXIKKyAgc3luIG1hdGNoICBwZXJsVmFyU2ltcGxlTWVtYmVyCSJcKC0+XClcPXtcSVxpKn0iIG5leHRncm91cD1wZXJsVmFyTWVtYmVyLHBlcmxWYXJTaW1wbGVNZW1iZXIgY29udGFpbnM9cGVybFZhclNpbXBsZU1lbWJlck5hbWUgY29udGFpbmVkCisgIHN5biBtYXRjaCAgcGVybFZhclNpbXBsZU1lbWJlck5hbWUJIlxJXGkqIiBjb250YWluZWQKKyAgc3luIHJlZ2lvbiBwZXJsVmFyTWVtYmVyCW1hdGNoZ3JvdXA9cGVybFZhclBsYWluIHN0YXJ0PSJcKC0+XClcPVxbIiBza2lwPSJcXF0iIGVuZD0iXSIgY29udGFpbmVkIGNvbnRhaW5zPUBwZXJsRXhwciBuZXh0Z3JvdXA9cGVybFZhck1lbWJlcixwZXJsVmFyU2ltcGxlTWVtYmVyCisgIHN5biBtYXRjaCAgcGVybE1ldGhvZAkJIlwoLT5cKVxJXGkqIiBjb250YWluZWQKK2VuZGlmCisKKyIgRmlsZSBEZXNjcmlwdG9ycworc3luIG1hdGNoICBwZXJsRmlsZWRlc2NSZWFkCSJbPF1caFx3XCtbPl0iCisKK3N5biBtYXRjaCAgcGVybEZpbGVkZXNjU3RhdGVtZW50Q29tbWEJIihcPVxzKlx1XHcqXHMqLCJtZT1lLTEgdHJhbnNwYXJlbnQgY29udGFpbmVkIGNvbnRhaW5zPXBlcmxGaWxlZGVzY1N0YXRlbWVudAorc3luIG1hdGNoICBwZXJsRmlsZWRlc2NTdGF0ZW1lbnROb2NvbW1hICIoXD1ccypcdVx3KlxzKlteLCBcdF0ibWU9ZS0xIHRyYW5zcGFyZW50IGNvbnRhaW5lZCBjb250YWlucz1wZXJsRmlsZWRlc2NTdGF0ZW1lbnQKKworc3luIG1hdGNoICBwZXJsRmlsZWRlc2NTdGF0ZW1lbnQJIlx1XHcqIiBjb250YWluZWQKKworIiBTcGVjaWFsIGNoYXJhY3RlcnMgaW4gc3RyaW5ncyBhbmQgbWF0Y2hlcworc3luIG1hdGNoICBwZXJsU3BlY2lhbFN0cmluZwkiXFxcKFxkXCtcfFt4WF1ceFwrXHxjXHVcfC5cKSIgY29udGFpbmVkCitzeW4gbWF0Y2ggIHBlcmxTcGVjaWFsU3RyaW5nVQkiXFxbJ1xcXSIgY29udGFpbmVkCitzeW4gbWF0Y2ggIHBlcmxTcGVjaWFsTWF0Y2gJIntcZFwoLFxkXClcPX0iIGNvbnRhaW5lZAorc3luIG1hdGNoICBwZXJsU3BlY2lhbE1hdGNoCSJcW1woXF1cfC1cKVw9W15cW1xdXSpcKFxbXHxcLVwpXD1cXSIgY29udGFpbmVkCitzeW4gbWF0Y2ggIHBlcmxTcGVjaWFsTWF0Y2gJIlsrKigpPy5dIiBjb250YWluZWQKK3N5biBtYXRjaCAgcGVybFNwZWNpYWxNYXRjaAkiKD9bIzo9IV0iIGNvbnRhaW5lZAorc3luIG1hdGNoICBwZXJsU3BlY2lhbE1hdGNoCSIoP1tpbXN4XVwrKSIgY29udGFpbmVkCisiIEZJWE1FIHRoZSBsaW5lIGJlbG93IGRvZXMgbm90IHdvcmsuIEl0IHNob3VsZCBtYXJrIGVuZCBvZiBsaW5lIGFuZAorIiBiZWdpbiBvZiBsaW5lIGFzIHBlcmxTcGVjaWFsLgorIiBzeW4gbWF0Y2ggcGVybFNwZWNpYWxCRU9NICAgICJeXF5cfFwkJCIgY29udGFpbmVkCisKKyIgUG9zc2libGUgZXJyb3JzCisiCisiIEhpZ2hsaWdodCBsaW5lcyB3aXRoIG9ubHkgd2hpdGVzcGFjZSAob25seSBpbiBibGFuayBkZWxpbWl0ZWQgaGVyZSBkb2N1bWVudHMpIGFzIGVycm9ycworc3luIG1hdGNoICBwZXJsTm90RW1wdHlMaW5lCSJeXHNcKyQiIGNvbnRhaW5lZAorIiBIaWdobGlnaHQgJ30gZWxzZSBpZiAoLi4uKSB7JywgaXQgc2hvdWxkIGJlICd9IGVsc2UgeyBpZiAoLi4uKSB7ICcgb3IKKyIgJ30gZWxzaWYgKC4uLikgeycuCisic3luIGtleXdvcmQgcGVybEVsc2VJZkVycm9yCWlmIGNvbnRhaW5lZAorCisiIFZhcmlhYmxlIGludGVycG9sYXRpb24KKyIKKyIgVGhlc2UgaXRlbXMgYXJlIGludGVycG9sYXRlZCBpbnNpZGUgIiIgc3RyaW5ncyBhbmQgc2ltaWxhciBjb25zdHJ1Y3RzLgorc3luIGNsdXN0ZXIgcGVybEludGVycERRCWNvbnRhaW5zPXBlcmxTcGVjaWFsU3RyaW5nLHBlcmxWYXJQbGFpbixwZXJsVmFyTm90SW5NYXRjaGVzLHBlcmxWYXJTbGFzaCxwZXJsVmFyQmxvY2sKKyIgVGhlc2UgaXRlbXMgYXJlIGludGVycG9sYXRlZCBpbnNpZGUgJycgc3RyaW5ncyBhbmQgc2ltaWxhciBjb25zdHJ1Y3RzLgorc3luIGNsdXN0ZXIgcGVybEludGVycFNRCWNvbnRhaW5zPXBlcmxTcGVjaWFsU3RyaW5nVQorIiBUaGVzZSBpdGVtcyBhcmUgaW50ZXJwb2xhdGVkIGluc2lkZSBtLy8gbWF0Y2hlcyBhbmQgcy8vLyBzdWJzdGl0dXRpb25zLgorc3luIGNsdXN0ZXIgcGVybEludGVycFNsYXNoCWNvbnRhaW5zPXBlcmxTcGVjaWFsU3RyaW5nLHBlcmxTcGVjaWFsTWF0Y2gscGVybFZhclBsYWluLHBlcmxWYXJCbG9jayxwZXJsU3BlY2lhbEJFT00KKyIgVGhlc2UgaXRlbXMgYXJlIGludGVycG9sYXRlZCBpbnNpZGUgbSMjIG1hdGNoZXMgYW5kIHMjIyMgc3Vic3RpdHV0aW9ucy4KK3N5biBjbHVzdGVyIHBlcmxJbnRlcnBNYXRjaAljb250YWlucz1AcGVybEludGVycFNsYXNoLHBlcmxWYXJTbGFzaAorCisiIFNoZWxsIGNvbW1hbmRzCitzeW4gcmVnaW9uICBwZXJsU2hlbGxDb21tYW5kCW1hdGNoZ3JvdXA9cGVybE1hdGNoU3RhcnRFbmQgc3RhcnQ9ImAiIGVuZD0iYCIgY29udGFpbnM9QHBlcmxJbnRlcnBEUQorCisiIENvbnN0YW50cworIgorIiBOdW1iZXJzCitzeW4gbWF0Y2ggIHBlcmxOdW1iZXIJIlstK11cPVwoXDxcZFtbOmRpZ2l0Ol1fXSpMXD1cPlx8MFt4WF1ceFtbOnhkaWdpdDpdX10qXD5cKSIKK3N5biBtYXRjaCAgcGVybEZsb2F0CSJbLStdXD1cPFxkW1s6ZGlnaXQ6XV9dKltlRV1bXC0rXVw9XGRcKyIKK3N5biBtYXRjaCAgcGVybEZsb2F0CSJbLStdXD1cPFxkW1s6ZGlnaXQ6XV9dKlwuW1s6ZGlnaXQ6XV9dKlwoW2VFXVtcLStdXD1cZFwrXClcPSIKK3N5biBtYXRjaCAgcGVybEZsb2F0CSJbLStdXD1cPFwuW1s6ZGlnaXQ6XV9dXCtcKFtlRV1bXC0rXVw9XGRcK1wpXD0iCisKKworIiBTaW1wbGUgdmVyc2lvbiBvZiBzZWFyY2hlcyBhbmQgbWF0Y2hlcworIiBjYXRlcnMgZm9yIG0vLywgbSMjLCBte30gYW5kIG1bXSAoYW5kIHRoZSAhLyB2YXJpYW50KQorc3luIHJlZ2lvbiBwZXJsTWF0Y2gJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rW20hXS8rIGVuZD0rL1tjZ2ltb3N4XSorIGNvbnRhaW5zPUBwZXJsSW50ZXJwU2xhc2gKK3N5biByZWdpb24gcGVybE1hdGNoCW1hdGNoZ3JvdXA9cGVybE1hdGNoU3RhcnRFbmQgc3RhcnQ9K1ttIV0jKyBlbmQ9KyNbY2dpbW9zeF0qKyBjb250YWlucz1AcGVybEludGVycE1hdGNoCitzeW4gcmVnaW9uIHBlcmxNYXRjaAltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PStbbSFdeysgZW5kPSt9W2NnaW1vc3hdKisgY29udGFpbnM9QHBlcmxJbnRlcnBNYXRjaAorc3luIHJlZ2lvbiBwZXJsTWF0Y2gJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rW20hXVxbKyBlbmQ9K1xdW2NnaW1vc3hdKisgY29udGFpbnM9QHBlcmxJbnRlcnBNYXRjaAorCisiIEEgc3BlY2lhbCBjYXNlIGZvciBtISF4IHdoaWNoIGFsbG93cyBmb3IgY29tbWVudHMgYW5kIGV4dHJhIHdoaXRlc3BhY2UgaW4gdGhlIHBhdHRlcm4KK3N5biByZWdpb24gcGVybE1hdGNoCW1hdGNoZ3JvdXA9cGVybE1hdGNoU3RhcnRFbmQgc3RhcnQ9K1ttIV0hKyBlbmQ9KyFbY2dpbW9zeF0qKyBjb250YWlucz1AcGVybEludGVycFNsYXNoLHBlcmxDb21tZW50CisKKyIgQmVsb3cgc29tZSBoYWNrcyB0byByZWNvZ25pc2UgdGhlIC8vIHZhcmlhbnQuIFRoaXMgaXMgdmlydHVhbGx5IGltcG9zc2libGUgdG8gY2F0Y2ggaW4gYWxsCisiIGNhc2VzIGFzIHRoZSAvIGlzIHVzZWQgaW4gc28gbWFueSBvdGhlciB3YXlzLCBidXQgdGhlc2Ugc2hvdWxkIGJlIHRoZSBtb3N0IG9idmlvdXMgb25lcy4KKyJzeW4gcmVnaW9uIHBlcmxNYXRjaAltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PStec3BsaXQgLytsYz01IHN0YXJ0PStbXiRAJV1cPHNwbGl0IC8rbGM9NiBzdGFydD0rXmlmIC8rbGM9MiBzdGFydD0rW14kQCVdaWYgLytsYz0zIHN0YXJ0PStbIT1dXH5ccyovK2xjPTIgc3RhcnQ9K1sofl0vK2xjPTEgc3RhcnQ9K1wuXC4vK2xjPTIgc3RhcnQ9K1xzL1tePSBcdDAtOSRAJV0rbGM9MSxtZT1lLTEscnM9ZS0xIHN0YXJ0PSteLysgc2tpcD0rXFwvKyBlbmQ9Ky9bY2dpbW9zeF0qKyBjb250YWlucz1AcGVybEludGVycFNsYXNoCitzeW4gcmVnaW9uIHBlcmxNYXRjaAltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PStec3BsaXQgLytsYz01IHN0YXJ0PStbXiRAJV1cPHNwbGl0IC8rbGM9NiBzdGFydD0rXndoaWxlIC8rbGM9NSBzdGFydD0rW14kQCVdd2hpbGUgLytsYz02IHN0YXJ0PSteaWYgLytsYz0yIHN0YXJ0PStbXiRAJV1pZiAvK2xjPTMgc3RhcnQ9K1shPV1cflxzKi8rbGM9MiBzdGFydD0rWyh+XS8rbGM9MSBzdGFydD0rXC5cLi8rbGM9MiBzdGFydD0rXHMvW149IFx0MC05JEAlXStsYz0xLG1lPWUtMSxycz1lLTEgc3RhcnQ9K14vKyBza2lwPStcXC8rIGVuZD0rL1tjZ2ltb3N4XSorIGNvbnRhaW5zPUBwZXJsSW50ZXJwU2xhc2gKKworCisiIFN1YnN0aXR1dGlvbnMKKyIgY2F0ZXJzIGZvciBzLy8vLCBzIyMjIGFuZCBzW11bXQorIiBwZXJsTWF0Y2ggaXMgdGhlIGZpcnN0IHBhcnQsIHBlcmxTdWJzdGl0dXRpb24qIGlzIHRoZSBzdWJzdGl0dXRpb24gcGFydAorc3luIHJlZ2lvbiBwZXJsTWF0Y2gJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rXDxzJysgIGVuZD0rJyttZT1lLTEgY29udGFpbnM9QHBlcmxJbnRlcnBTUSBuZXh0Z3JvdXA9cGVybFN1YnN0aXR1dGlvblNRCitzeW4gcmVnaW9uIHBlcmxNYXRjaAltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PStcPHMiKyAgZW5kPSsiK21lPWUtMSBjb250YWlucz1AcGVybEludGVycE1hdGNoIG5leHRncm91cD1wZXJsU3Vic3RpdHV0aW9uRFEKK3N5biByZWdpb24gcGVybE1hdGNoCW1hdGNoZ3JvdXA9cGVybE1hdGNoU3RhcnRFbmQgc3RhcnQ9K1w8cy8rICBlbmQ9Ky8rbWU9ZS0xIGNvbnRhaW5zPUBwZXJsSW50ZXJwU2xhc2ggbmV4dGdyb3VwPXBlcmxTdWJzdGl0dXRpb25TbGFzaAorc3luIHJlZ2lvbiBwZXJsTWF0Y2gJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rXDxzIysgIGVuZD0rIyttZT1lLTEgY29udGFpbnM9QHBlcmxJbnRlcnBNYXRjaCBuZXh0Z3JvdXA9cGVybFN1YnN0aXR1dGlvbkhhc2gKK3N5biByZWdpb24gcGVybE1hdGNoCW1hdGNoZ3JvdXA9cGVybE1hdGNoU3RhcnRFbmQgc3RhcnQ9K1w8c1xbKyBlbmQ9K1xdKyBjb250YWlucz1AcGVybEludGVycE1hdGNoIG5leHRncm91cD1wZXJsU3Vic3RpdHV0aW9uQnJhY2tldCBza2lwd2hpdGUgc2tpcGVtcHR5IHNraXBubAorc3luIHJlZ2lvbiBwZXJsTWF0Y2gJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rXDxzeysgZW5kPSt9KyBjb250YWlucz1AcGVybEludGVycE1hdGNoIG5leHRncm91cD1wZXJsU3Vic3RpdHV0aW9uQ3VybHkgc2tpcHdoaXRlIHNraXBlbXB0eSBza2lwbmwKK3N5biByZWdpb24gcGVybFN1YnN0aXR1dGlvblNRCQltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PSsnKyAgZW5kPSsnW2VjZ2ltb3N4XSorIGNvbnRhaW5lZCBjb250YWlucz1AcGVybEludGVycFNRCitzeW4gcmVnaW9uIHBlcmxTdWJzdGl0dXRpb25EUQkJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rIisgIGVuZD0rIltlY2dpbW9zeF0qKyBjb250YWluZWQgY29udGFpbnM9QHBlcmxJbnRlcnBEUQorc3luIHJlZ2lvbiBwZXJsU3Vic3RpdHV0aW9uU2xhc2gJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rLysgIGVuZD0rL1tlY2dpbW9zeF0qKyBjb250YWluZWQgY29udGFpbnM9QHBlcmxJbnRlcnBEUQorc3luIHJlZ2lvbiBwZXJsU3Vic3RpdHV0aW9uSGFzaAkJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rIysgIGVuZD0rI1tlY2dpbW9zeF0qKyBjb250YWluZWQgY29udGFpbnM9QHBlcmxJbnRlcnBEUQorc3luIHJlZ2lvbiBwZXJsU3Vic3RpdHV0aW9uQnJhY2tldAltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PStcWysgZW5kPStcXVtlY2dpbW9zeF0qKyBjb250YWluZWQgY29udGFpbnM9QHBlcmxJbnRlcnBEUQorc3luIHJlZ2lvbiBwZXJsU3Vic3RpdHV0aW9uQ3VybHkJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0reysgIGVuZD0rfVtlY2dpbW9zeF0qKyBjb250YWluZWQgY29udGFpbnM9QHBlcmxJbnRlcnBEUQorCisiIEEgc3BlY2lhbCBjYXNlIGZvciBtISF4IHdoaWNoIGFsbG93cyBmb3IgY29tbWVudHMgYW5kIGV4dHJhIHdoaXRlc3BhY2UgaW4gdGhlIHBhdHRlcm4KK3N5biByZWdpb24gcGVybE1hdGNoCW1hdGNoZ3JvdXA9cGVybE1hdGNoU3RhcnRFbmQgc3RhcnQ9K1w8cyErIGVuZD0rISttZT1lLTEgY29udGFpbnM9QHBlcmxJbnRlcnBTbGFzaCxwZXJsQ29tbWVudCBuZXh0Z3JvdXA9cGVybFN1YnN0aXR1dGlvblBsaW5nCitzeW4gcmVnaW9uIHBlcmxTdWJzdGl0dXRpb25QbGluZwltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PSshKyBlbmQ9KyFbZWNnaW1vc3hdKisgY29udGFpbmVkIGNvbnRhaW5zPUBwZXJsSW50ZXJwRFEKKworIiBTdWJzdGl0dXRpb25zCisiIGNhdGVycyBmb3IgdHIvLy8sIHRyIyMjIGFuZCB0cltdW10KKyIgcGVybE1hdGNoIGlzIHRoZSBmaXJzdCBwYXJ0LCBwZXJsVHJhbnNsYXRpb24qIGlzIHRoZSBzZWNvbmQsIHRyYW5zbGF0b3IgcGFydC4KK3N5biByZWdpb24gcGVybE1hdGNoCW1hdGNoZ3JvdXA9cGVybE1hdGNoU3RhcnRFbmQgc3RhcnQ9K1w8XCh0clx8eVwpJysgZW5kPSsnK21lPWUtMSBjb250YWlucz1AcGVybEludGVycFNRIG5leHRncm91cD1wZXJsVHJhbnNsYXRpb25TUQorc3luIHJlZ2lvbiBwZXJsTWF0Y2gJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rXDxcKHRyXHx5XCkiKyBlbmQ9KyIrbWU9ZS0xIGNvbnRhaW5zPUBwZXJsSW50ZXJwU1EgbmV4dGdyb3VwPXBlcmxUcmFuc2xhdGlvbkRRCitzeW4gcmVnaW9uIHBlcmxNYXRjaAltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PStcPFwodHJcfHlcKS8rIGVuZD0rLyttZT1lLTEgY29udGFpbnM9QHBlcmxJbnRlcnBTUSBuZXh0Z3JvdXA9cGVybFRyYW5zbGF0aW9uU2xhc2gKK3N5biByZWdpb24gcGVybE1hdGNoCW1hdGNoZ3JvdXA9cGVybE1hdGNoU3RhcnRFbmQgc3RhcnQ9K1w8XCh0clx8eVwpIysgZW5kPSsjK21lPWUtMSBjb250YWlucz1AcGVybEludGVycFNRIG5leHRncm91cD1wZXJsVHJhbnNsYXRpb25IYXNoCitzeW4gcmVnaW9uIHBlcmxNYXRjaAltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PStcPFwodHJcfHlcKVxbKyBlbmQ9K1xdKyBjb250YWlucz1AcGVybEludGVycFNRIG5leHRncm91cD1wZXJsVHJhbnNsYXRpb25CcmFja2V0IHNraXB3aGl0ZSBza2lwZW1wdHkgc2tpcG5sCitzeW4gcmVnaW9uIHBlcmxNYXRjaAltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PStcPFwodHJcfHlcKXsrIGVuZD0rfSsgY29udGFpbnM9QHBlcmxJbnRlcnBTUSBuZXh0Z3JvdXA9cGVybFRyYW5zbGF0aW9uQ3VybHkgc2tpcHdoaXRlIHNraXBlbXB0eSBza2lwbmwKK3N5biByZWdpb24gcGVybFRyYW5zbGF0aW9uU1EJCW1hdGNoZ3JvdXA9cGVybE1hdGNoU3RhcnRFbmQgc3RhcnQ9KycrIGVuZD0rJ1tjZHNdKisgY29udGFpbmVkCitzeW4gcmVnaW9uIHBlcmxUcmFuc2xhdGlvbkRRCQltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PSsiKyBlbmQ9KyJbY2RzXSorIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBwZXJsVHJhbnNsYXRpb25TbGFzaAkJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rLysgZW5kPSsvW2Nkc10qKyBjb250YWluZWQKK3N5biByZWdpb24gcGVybFRyYW5zbGF0aW9uSGFzaAkJbWF0Y2hncm91cD1wZXJsTWF0Y2hTdGFydEVuZCBzdGFydD0rIysgZW5kPSsjW2Nkc10qKyBjb250YWluZWQKK3N5biByZWdpb24gcGVybFRyYW5zbGF0aW9uQnJhY2tldAltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PStcWysgZW5kPStcXVtjZHNdKisgY29udGFpbmVkCitzeW4gcmVnaW9uIHBlcmxUcmFuc2xhdGlvbkN1cmx5CQltYXRjaGdyb3VwPXBlcmxNYXRjaFN0YXJ0RW5kIHN0YXJ0PSt7KyBlbmQ9K31bY2RzXSorIGNvbnRhaW5lZAorCisKKyIgVGhlID0+IG9wZXJhdG9yIGZvcmNlcyBhIGJhcmV3b3JkIHRvIHRoZSBsZWZ0IG9mIGl0IHRvIGJlIGludGVycHJldGVkIGFzCisiIGEgc3RyaW5nCitzeW4gbWF0Y2ggIHBlcmxTdHJpbmcgIlw8XElcaSpccyo9PiJtZT1lLTIKKworIiBTdHJpbmdzIGFuZCBxLCBxcSwgcXcgYW5kIHFyIGV4cHJlc3Npb25zCisKKyIgQnJhY2tldHMgaW4gcXEoKQorc3luIHJlZ2lvbiBwZXJsQnJhY2tldHMJc3RhcnQ9KygrIGVuZD0rKSsgY29udGFpbmVkIHRyYW5zcGFyZW50IGNvbnRhaW5zPXBlcmxCcmFja2V0cyxAcGVybFN0cmluZ1NRCisKK3N5biByZWdpb24gcGVybFN0cmluZ1VuZXhwYW5kZWQJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9IiciIGVuZD0iJyIgY29udGFpbnM9QHBlcmxJbnRlcnBTUQorc3luIHJlZ2lvbiBwZXJsU3RyaW5nCQltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rIisgIGVuZD0rIisgY29udGFpbnM9QHBlcmxJbnRlcnBEUQorc3luIHJlZ2lvbiBwZXJsUVEJCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PStcPHEjKyBlbmQ9KyMrIGNvbnRhaW5zPUBwZXJsSW50ZXJwU1EKK3N5biByZWdpb24gcGVybFFRCQltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rXDxxfCsgZW5kPSt8KyBjb250YWlucz1AcGVybEludGVycFNRCitzeW4gcmVnaW9uIHBlcmxRUQkJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9K1w8cSgrIGVuZD0rKSsgY29udGFpbnM9QHBlcmxJbnRlcnBTUSxwZXJsQnJhY2tldHMKK3N5biByZWdpb24gcGVybFFRCQltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rXDxxeysgZW5kPSt9KyBjb250YWlucz1AcGVybEludGVycFNRCitzeW4gcmVnaW9uIHBlcmxRUQkJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9K1w8cS8rIGVuZD0rLysgY29udGFpbnM9QHBlcmxJbnRlcnBTUQorc3luIHJlZ2lvbiBwZXJsUVEJCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PStcPHFbcXhdIysgZW5kPSsjKyBjb250YWlucz1AcGVybEludGVycERRCitzeW4gcmVnaW9uIHBlcmxRUQkJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9K1w8cVtxeF18KyBlbmQ9K3wrIGNvbnRhaW5zPUBwZXJsSW50ZXJwRFEKK3N5biByZWdpb24gcGVybFFRCQltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rXDxxW3F4XSgrIGVuZD0rKSsgY29udGFpbnM9QHBlcmxJbnRlcnBEUSxwZXJsQnJhY2tldHMKK3N5biByZWdpb24gcGVybFFRCQltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rXDxxW3F4XXsrIGVuZD0rfSsgY29udGFpbnM9QHBlcmxJbnRlcnBEUQorc3luIHJlZ2lvbiBwZXJsUVEJCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PStcPHFbcXhdLysgZW5kPSsvKyBjb250YWlucz1AcGVybEludGVycERRCitzeW4gcmVnaW9uIHBlcmxRUQkJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9K1w8cXcjKyAgZW5kPSsjKyBjb250YWlucz1AcGVybEludGVycFNRCitzeW4gcmVnaW9uIHBlcmxRUQkJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9K1w8cXd8KyAgZW5kPSt8KyBjb250YWlucz1AcGVybEludGVycFNRCitzeW4gcmVnaW9uIHBlcmxRUQkJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9K1w8cXcoKyAgZW5kPSspKyBjb250YWlucz1AcGVybEludGVycFNRLHBlcmxCcmFja2V0cworc3luIHJlZ2lvbiBwZXJsUVEJCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PStcPHF3eysgIGVuZD0rfSsgY29udGFpbnM9QHBlcmxJbnRlcnBTUQorc3luIHJlZ2lvbiBwZXJsUVEJCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PStcPHF3LysgIGVuZD0rLysgY29udGFpbnM9QHBlcmxJbnRlcnBTUQorc3luIHJlZ2lvbiBwZXJsUVEJCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PStcPHFyIysgIGVuZD0rI1tpbW9zeF0qKyBjb250YWlucz1AcGVybEludGVycE1hdGNoCitzeW4gcmVnaW9uIHBlcmxRUQkJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9K1w8cXJ8KyAgZW5kPSt8W2ltb3N4XSorIGNvbnRhaW5zPUBwZXJsSW50ZXJwTWF0Y2gKK3N5biByZWdpb24gcGVybFFRCQltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rXDxxcigrICBlbmQ9KylbaW1vc3hdKisgY29udGFpbnM9QHBlcmxJbnRlcnBNYXRjaAorc3luIHJlZ2lvbiBwZXJsUVEJCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PStcPHFyeysgIGVuZD0rfVtpbW9zeF0qKyBjb250YWlucz1AcGVybEludGVycE1hdGNoCitzeW4gcmVnaW9uIHBlcmxRUQkJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9K1w8cXIvKyAgZW5kPSsvW2ltb3N4XSorIGNvbnRhaW5zPUBwZXJsSW50ZXJwU2xhc2gKKworIiBDb25zdHJ1Y3RzIHN1Y2ggYXMgcHJpbnQgPDxFT0YgWy4uLl0gRU9GLCAnaGVyZScgZG9jdW1lbnRzCisiCitpZiB2ZXJzaW9uID49IDYwMAorICAiIFhYWCBBbnkgc3RhdGVtZW50cyBhZnRlciB0aGUgaWRlbnRpZmllciBhcmUgaW4gcGVybFN0cmluZyBjb2xvdXIgKGkuZS4KKyAgIiAnaWYgJGEnIGluICdwcmludCA8PEVPRiBpZiAkYScpLgorICBpZiBleGlzdHMoInBlcmxfZm9sZCIpCisgICAgc3luIHJlZ2lvbiBwZXJsSGVyZURvYwltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rPDxceihcSVxpKlwpKyAgICBlbmQ9K15cejEkKyBjb250YWlucz1AcGVybEludGVycERRIGZvbGQKKyAgICBzeW4gcmVnaW9uIHBlcmxIZXJlRG9jCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PSs8PFxzKiJceiguXHstfVwpIisgZW5kPSteXHoxJCsgY29udGFpbnM9QHBlcmxJbnRlcnBEUSBmb2xkCisgICAgc3luIHJlZ2lvbiBwZXJsSGVyZURvYwltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rPDxccyonXHooLlx7LX1cKScrIGVuZD0rXlx6MSQrIGNvbnRhaW5zPUBwZXJsSW50ZXJwU1EgZm9sZAorICAgIHN5biByZWdpb24gcGVybEhlcmVEb2MJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9Kzw8XHMqIiIrICAgICAgICAgZW5kPSteJCsgICAgY29udGFpbnM9QHBlcmxJbnRlcnBEUSxwZXJsTm90RW1wdHlMaW5lIGZvbGQKKyAgICBzeW4gcmVnaW9uIHBlcmxIZXJlRG9jCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PSs8PFxzKicnKyAgICAgICAgIGVuZD0rXiQrICAgIGNvbnRhaW5zPUBwZXJsSW50ZXJwU1EscGVybE5vdEVtcHR5TGluZSBmb2xkCisgICAgc3luIHJlZ2lvbiBwZXJsQXV0b2xvYWQJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9Kzw8WyciXVx6KEVORF9cKFNVQlx8T0ZfRlVOQ1x8T0ZfQVVUT0xPQURcKVwpWyciXSsgZW5kPSteXHoxJCsgY29udGFpbnM9QUxMIGZvbGQKKyAgZWxzZQorICAgIHN5biByZWdpb24gcGVybEhlcmVEb2MJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9Kzw8XHooXElcaSpcKSsgICAgZW5kPSteXHoxJCsgY29udGFpbnM9QHBlcmxJbnRlcnBEUQorICAgIHN5biByZWdpb24gcGVybEhlcmVEb2MJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9Kzw8XHMqIlx6KC5cey19XCkiKyBlbmQ9K15cejEkKyBjb250YWlucz1AcGVybEludGVycERRCisgICAgc3luIHJlZ2lvbiBwZXJsSGVyZURvYwltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rPDxccyonXHooLlx7LX1cKScrIGVuZD0rXlx6MSQrIGNvbnRhaW5zPUBwZXJsSW50ZXJwU1EKKyAgICBzeW4gcmVnaW9uIHBlcmxIZXJlRG9jCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PSs8PFxzKiIiKyAgICAgICAgIGVuZD0rXiQrICAgIGNvbnRhaW5zPUBwZXJsSW50ZXJwRFEscGVybE5vdEVtcHR5TGluZQorICAgIHN5biByZWdpb24gcGVybEhlcmVEb2MJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9Kzw8XHMqJycrICAgICAgICAgZW5kPSteJCsgICAgY29udGFpbnM9QHBlcmxJbnRlcnBTUSxwZXJsTm90RW1wdHlMaW5lCisgICAgc3luIHJlZ2lvbiBwZXJsQXV0b2xvYWQJbWF0Y2hncm91cD1wZXJsU3RyaW5nU3RhcnRFbmQgc3RhcnQ9Kzw8XChbJyJdXHxcKVx6KEVORF9cKFNVQlx8T0ZfRlVOQ1x8T0ZfQVVUT0xPQURcKVwpXDErIGVuZD0rXlx6MSQrIGNvbnRhaW5zPUFMTAorICBlbmRpZgorZWxzZQorICBzeW4gbWF0Y2ggcGVybFVudGlsRU9GU3RhcnQJIjw8RU9GLioibGM9NSBuZXh0Z3JvdXA9cGVybFVudGlsRU9GRFEgc2tpcG5sIHRyYW5zcGFyZW50CisgIHN5biBtYXRjaCBwZXJsVW50aWxFT0ZTdGFydAkiPDxccypcIkVPRlwiLioiIG5leHRncm91cD1wZXJsVW50aWxFT0ZEUSBza2lwbmwgdHJhbnNwYXJlbnQKKyAgc3luIG1hdGNoIHBlcmxVbnRpbEVPRlN0YXJ0CSI8PFxzKidFT0YnLioiIG5leHRncm91cD1wZXJsVW50aWxFT0ZTUSBza2lwbmwgdHJhbnNwYXJlbnQKKyAgc3luIG1hdGNoIHBlcmxVbnRpbEVPRlN0YXJ0CSI8PFxzKlwiXCIuKiIgbmV4dGdyb3VwPXBlcmxVbnRpbEVtcHR5RFEgc2tpcG5sIHRyYW5zcGFyZW50CisgIHN5biBtYXRjaCBwZXJsVW50aWxFT0ZTdGFydAkiPDxccyonJy4qIiBuZXh0Z3JvdXA9cGVybFVudGlsRW1wdHlTUSBza2lwbmwgdHJhbnNwYXJlbnQKKyAgc3luIHJlZ2lvbiBwZXJsVW50aWxFT0ZEUQltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rKyBlbmQ9Il5FT0YkIiBjb250YWlucz1AcGVybEludGVycERRIGNvbnRhaW5lZAorICBzeW4gcmVnaW9uIHBlcmxVbnRpbEVPRlNRCW1hdGNoZ3JvdXA9cGVybFN0cmluZ1N0YXJ0RW5kIHN0YXJ0PSsrIGVuZD0iXkVPRiQiIGNvbnRhaW5zPUBwZXJsSW50ZXJwU1EgY29udGFpbmVkCisgIHN5biByZWdpb24gcGVybFVudGlsRW1wdHlTUQltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rKyBlbmQ9Il4kIiBjb250YWlucz1AcGVybEludGVycERRLHBlcmxOb3RFbXB0eUxpbmUgY29udGFpbmVkCisgIHN5biByZWdpb24gcGVybFVudGlsRW1wdHlEUQltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rKyBlbmQ9Il4kIiBjb250YWlucz1AcGVybEludGVycFNRLHBlcmxOb3RFbXB0eUxpbmUgY29udGFpbmVkCisgIHN5biBtYXRjaCBwZXJsSGVyZUlkZW50aWZpZXIJIjw8RU9GIgorICBzeW4gcmVnaW9uIHBlcmxBdXRvbG9hZAltYXRjaGdyb3VwPXBlcmxTdHJpbmdTdGFydEVuZCBzdGFydD0rPDxcKFsnIl1cfFwpXChFTkRfXChTVUJcfE9GX0ZVTkNcfE9GX0FVVE9MT0FEXClcKVwxKyBlbmQ9K15cKEVORF9cKFNVQlx8T0ZfRlVOQ1x8T0ZfQVVUT0xPQURcKVwpJCsgY29udGFpbnM9QUxMCitlbmRpZgorCisKKyIgQ2xhc3MgZGVjbGFyYXRpb25zCisiCitzeW4gbWF0Y2ggIHBlcmxQYWNrYWdlRGVjbAkiXlxzKlw8cGFja2FnZVxzXCtcU1wrIiBjb250YWlucz1wZXJsU3RhdGVtZW50UGFja2FnZQorc3luIGtleXdvcmQgcGVybFN0YXRlbWVudFBhY2thZ2UJcGFja2FnZSBjb250YWluZWQKKworIiBGdW5jdGlvbnMKKyIgICAgICAgc3ViIFtuYW1lXSBbKHByb3RvdHlwZSldIHsKKyIKK3N5biByZWdpb24gcGVybEZ1bmN0aW9uCQlzdGFydD0iXHMqXDxzdWJcPiIgZW5kPSJbO3tdImhlPWUtMSBjb250YWlucz1wZXJsU3RhdGVtZW50U3ViLHBlcmxGdW5jdGlvblByb3RvdHlwZSxwZXJsRnVuY3Rpb25QUmVmLHBlcmxGdW5jdGlvbk5hbWUscGVybENvbW1lbnQKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRTdWIJc3ViIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggIHBlcmxGdW5jdGlvblByb3RvdHlwZQkiKFteKV0qKSIgY29udGFpbmVkCitpZiBleGlzdHMoInBlcmxfd2FudF9zY29wZV9pbl92YXJpYWJsZXMiKQorICAgc3luIG1hdGNoICBwZXJsRnVuY3Rpb25QUmVmCSJcaFx3Kjo6IiBjb250YWluZWQKKyAgIHN5biBtYXRjaCAgcGVybEZ1bmN0aW9uTmFtZQkiXGhcdypbXjpdIiBjb250YWluZWQKK2Vsc2UKKyAgIHN5biBtYXRjaCAgcGVybEZ1bmN0aW9uTmFtZQkiXGhbWzphbG51bTpdXzpdKiIgY29udGFpbmVkCitlbmRpZgorCisKKyIgQWxsIG90aGVyICMgYXJlIGNvbW1lbnRzLCBleGNlcHQgXiMhCitzeW4gbWF0Y2ggIHBlcmxDb21tZW50CQkiIy4qIiBjb250YWlucz1wZXJsVG9kbworc3luIG1hdGNoICBwZXJsU2hhcnBCYW5nCSJeIyEuKiIKKworIiBGb3JtYXRzCitzeW4gcmVnaW9uIHBlcmxGb3JtYXQJCW1hdGNoZ3JvdXA9cGVybFN0YXRlbWVudElPRnVuYyBzdGFydD0iXlxzKlw8Zm9ybWF0XHNcK1xrXCtccyo9XHMqJCJycz1zKzYgZW5kPSJeXHMqXC5ccyokIiBjb250YWlucz1wZXJsRm9ybWF0TmFtZSxwZXJsRm9ybWF0RmllbGQscGVybFZhclBsYWluCitzeW4gbWF0Y2ggIHBlcmxGb3JtYXROYW1lCSJmb3JtYXRcc1wrXGtcK1xzKj0ibGM9NyxtZT1lLTEgY29udGFpbmVkCitzeW4gbWF0Y2ggIHBlcmxGb3JtYXRGaWVsZAkiW0BeXVt8PD5+XVwrXChcLlwuXC5cKVw9IiBjb250YWluZWQKK3N5biBtYXRjaCAgcGVybEZvcm1hdEZpZWxkCSJbQF5dI1sjLl0qIiBjb250YWluZWQKK3N5biBtYXRjaCAgcGVybEZvcm1hdEZpZWxkCSJAXCoiIGNvbnRhaW5lZAorc3luIG1hdGNoICBwZXJsRm9ybWF0RmllbGQJIkBbXkEtWmEtel98PD5+IypdIm1lPWUtMSBjb250YWluZWQKK3N5biBtYXRjaCAgcGVybEZvcm1hdEZpZWxkCSJAJCIgY29udGFpbmVkCisKKyIgX19FTkRfXyBhbmQgX19EQVRBX18gY2xhdXNlcworaWYgZXhpc3RzKCJwZXJsX2ZvbGQiKQorICBzeW50YXggcmVnaW9uIHBlcmxEQVRBCQlzdGFydD0iXl9fXChEQVRBXHxFTkRcKV9fJCIgc2tpcD0iLiIgZW5kPSIuIiBjb250YWlucz1wZXJsUE9ELEBwZXJsREFUQSBmb2xkCitlbHNlCisgIHN5bnRheCByZWdpb24gcGVybERBVEEJCXN0YXJ0PSJeX19cKERBVEFcfEVORFwpX18kIiBza2lwPSIuIiBlbmQ9Ii4iIGNvbnRhaW5zPXBlcmxQT0QsQHBlcmxEQVRBCitlbmRpZgorCisKKyIKKyIgRm9sZGluZworCitpZiBleGlzdHMoInBlcmxfZm9sZCIpCisgIHN5biByZWdpb24gcGVybFBhY2thZ2VGb2xkIHN0YXJ0PSJecGFja2FnZSBcU1wrOyQiIGVuZD0iXjE7JCIgZW5kPSJcblwrcGFja2FnZSJtZT1zLTEgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kCisgIHN5biByZWdpb24gcGVybFN1YkZvbGQgICAgIHN0YXJ0PSJeXHooXHMqXClcPHN1Ylw+LipbXn07XSQiIGVuZD0iXlx6MX1ccyokIiBlbmQ9Il5cejF9XHMqXCMuKiQiIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZAorICBzeW4gcmVnaW9uIHBlcmxCRUdJTkVOREZvbGQgc3RhcnQ9Il5ceihccypcKVw8XChCRUdJTlx8RU5EXClcPi4qW159O10kIiBlbmQ9Il5cejF9XHMqJCIgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kCisKKyAgaWYgZXhpc3RzKCJwZXJsX2ZvbGRfYmxvY2tzIikKKyAgICBzeW4gcmVnaW9uIHBlcmxJZkZvbGQgc3RhcnQ9Il5ceihccypcKVwoaWZcfHVubGVzc1x8Zm9yXHx3aGlsZVx8dW50aWxcKVxzKiguKilccyp7XHMqJCIgc3RhcnQ9Il5ceihccypcKWZvcmVhY2hccypcKFwobXlcfG91clwpXD1ccypcU1wrXHMqXClcPSguKilccyp7XHMqJCIgZW5kPSJeXHoxfVxzKjtcPSQiIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZAorICAgIHN5biByZWdpb24gcGVybElmRm9sZCBzdGFydD0iXlx6KFxzKlwpZG9ccyp7XHMqJCIgZW5kPSJeXHoxfVxzKndoaWxlIiBlbmQ9Il5cejF9XHMqO1w9JCIgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kCisgIGVuZGlmCisKKyAgc2V0bG9jYWwgZm9sZG1ldGhvZD1zeW50YXgKKyAgc3luIHN5bmMgZnJvbXN0YXJ0CitlbHNlCisgICIgZnJvbXN0YXJ0IGFib3ZlIHNlZW1zIHRvIHNldCBtaW5saW5lcyBldmVuIGlmIHBlcmxfZm9sZCBpcyBub3Qgc2V0LgorICBzeW4gc3luYyBtaW5saW5lcz0wCitlbmRpZgorCisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9wZXJsX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3Blcmxfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyAgSGlMaW5rIHBlcmxTaGFycEJhbmcJCVByZVByb2MKKyAgSGlMaW5rIHBlcmxDb250cm9sCQlQcmVQcm9jCisgIEhpTGluayBwZXJsSW5jbHVkZQkJSW5jbHVkZQorICBIaUxpbmsgcGVybFNwZWNpYWwJCVNwZWNpYWwKKyAgSGlMaW5rIHBlcmxTdHJpbmcJCVN0cmluZworICBIaUxpbmsgcGVybENoYXJhY3RlcgkJQ2hhcmFjdGVyCisgIEhpTGluayBwZXJsTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHBlcmxGbG9hdAkJRmxvYXQKKyAgSGlMaW5rIHBlcmxUeXBlCQlUeXBlCisgIEhpTGluayBwZXJsSWRlbnRpZmllcgkJSWRlbnRpZmllcgorICBIaUxpbmsgcGVybExhYmVsCQlMYWJlbAorICBIaUxpbmsgcGVybFN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBwZXJsQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHBlcmxSZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgcGVybE9wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgcGVybEZ1bmN0aW9uCQlGdW5jdGlvbgorICBIaUxpbmsgcGVybEZ1bmN0aW9uUHJvdG90eXBlCXBlcmxGdW5jdGlvbgorICBIaUxpbmsgcGVybENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHBlcmxUb2RvCQlUb2RvCisgIGlmIGV4aXN0cygicGVybF9zdHJpbmdfYXNfc3RhdGVtZW50IikKKyAgICBIaUxpbmsgcGVybFN0cmluZ1N0YXJ0RW5kCXBlcmxTdGF0ZW1lbnQKKyAgZWxzZQorICAgIEhpTGluayBwZXJsU3RyaW5nU3RhcnRFbmQJcGVybFN0cmluZworICBlbmRpZgorICBIaUxpbmsgcGVybExpc3QJCXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxNaXNjCQlwZXJsU3RhdGVtZW50CisgIEhpTGluayBwZXJsVmFyUGxhaW4JCXBlcmxJZGVudGlmaWVyCisgIEhpTGluayBwZXJsRmlsZWRlc2NSZWFkCXBlcmxJZGVudGlmaWVyCisgIEhpTGluayBwZXJsRmlsZWRlc2NTdGF0ZW1lbnQJcGVybElkZW50aWZpZXIKKyAgSGlMaW5rIHBlcmxWYXJTaW1wbGVNZW1iZXIJcGVybElkZW50aWZpZXIKKyAgSGlMaW5rIHBlcmxWYXJTaW1wbGVNZW1iZXJOYW1lIHBlcmxTdHJpbmcKKyAgSGlMaW5rIHBlcmxWYXJOb3RJbk1hdGNoZXMJcGVybElkZW50aWZpZXIKKyAgSGlMaW5rIHBlcmxWYXJTbGFzaAkJcGVybElkZW50aWZpZXIKKyAgSGlMaW5rIHBlcmxRUQkJCXBlcmxTdHJpbmcKKyAgaWYgdmVyc2lvbiA+PSA2MDAKKyAgICBIaUxpbmsgcGVybEhlcmVEb2MJCXBlcmxTdHJpbmcKKyAgZWxzZQorICAgIEhpTGluayBwZXJsSGVyZUlkZW50aWZpZXIJcGVybFN0cmluZ1N0YXJ0RW5kCisgICAgSGlMaW5rIHBlcmxVbnRpbEVPRkRRCXBlcmxTdHJpbmcKKyAgICBIaUxpbmsgcGVybFVudGlsRU9GU1EJcGVybFN0cmluZworICAgIEhpTGluayBwZXJsVW50aWxFbXB0eURRCXBlcmxTdHJpbmcKKyAgICBIaUxpbmsgcGVybFVudGlsRW1wdHlTUQlwZXJsU3RyaW5nCisgICAgSGlMaW5rIHBlcmxVbnRpbEVPRgkJcGVybFN0cmluZworICBlbmRpZgorICBIaUxpbmsgcGVybFN0cmluZ1VuZXhwYW5kZWQJcGVybFN0cmluZworICBIaUxpbmsgcGVybFN1YnN0aXR1dGlvblNRCXBlcmxTdHJpbmcKKyAgSGlMaW5rIHBlcmxTdWJzdGl0dXRpb25EUQlwZXJsU3RyaW5nCisgIEhpTGluayBwZXJsU3Vic3RpdHV0aW9uU2xhc2gJcGVybFN0cmluZworICBIaUxpbmsgcGVybFN1YnN0aXR1dGlvbkhhc2gJcGVybFN0cmluZworICBIaUxpbmsgcGVybFN1YnN0aXR1dGlvbkJyYWNrZXQgcGVybFN0cmluZworICBIaUxpbmsgcGVybFN1YnN0aXR1dGlvbkN1cmx5IAlwZXJsU3RyaW5nCisgIEhpTGluayBwZXJsU3Vic3RpdHV0aW9uUGxpbmcJcGVybFN0cmluZworICBIaUxpbmsgcGVybFRyYW5zbGF0aW9uU2xhc2gJcGVybFN0cmluZworICBIaUxpbmsgcGVybFRyYW5zbGF0aW9uSGFzaAlwZXJsU3RyaW5nCisgIEhpTGluayBwZXJsVHJhbnNsYXRpb25CcmFja2V0CXBlcmxTdHJpbmcKKyAgSGlMaW5rIHBlcmxUcmFuc2xhdGlvbkN1cmx5CXBlcmxTdHJpbmcKKyAgSGlMaW5rIHBlcmxNYXRjaAkJcGVybFN0cmluZworICBIaUxpbmsgcGVybE1hdGNoU3RhcnRFbmQJcGVybFN0YXRlbWVudAorICBIaUxpbmsgcGVybEZvcm1hdE5hbWUJCXBlcmxJZGVudGlmaWVyCisgIEhpTGluayBwZXJsRm9ybWF0RmllbGQJcGVybFN0cmluZworICBIaUxpbmsgcGVybFBhY2thZ2VEZWNsCXBlcmxUeXBlCisgIEhpTGluayBwZXJsU3RvcmFnZUNsYXNzCXBlcmxUeXBlCisgIEhpTGluayBwZXJsUGFja2FnZVJlZgkJcGVybFR5cGUKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRQYWNrYWdlCXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRTdWIJcGVybFN0YXRlbWVudAorICBIaUxpbmsgcGVybFN0YXRlbWVudFN0b3JhZ2UJcGVybFN0YXRlbWVudAorICBIaUxpbmsgcGVybFN0YXRlbWVudENvbnRyb2wJcGVybFN0YXRlbWVudAorICBIaUxpbmsgcGVybFN0YXRlbWVudFNjYWxhcglwZXJsU3RhdGVtZW50CisgIEhpTGluayBwZXJsU3RhdGVtZW50UmVnZXhwCXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnROdW1lcmljCXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRMaXN0CXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRIYXNoCXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRJT2Z1bmMJcGVybFN0YXRlbWVudAorICBIaUxpbmsgcGVybFN0YXRlbWVudEZpbGVkZXNjCXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRWZWN0b3IJcGVybFN0YXRlbWVudAorICBIaUxpbmsgcGVybFN0YXRlbWVudEZpbGVzCXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRGbG93CXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRTY29wZQlwZXJsU3RhdGVtZW50CisgIEhpTGluayBwZXJsU3RhdGVtZW50SW5jbHVkZQlwZXJsU3RhdGVtZW50CisgIEhpTGluayBwZXJsU3RhdGVtZW50UHJvYwlwZXJsU3RhdGVtZW50CisgIEhpTGluayBwZXJsU3RhdGVtZW50U29ja2V0CXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRJUEMJcGVybFN0YXRlbWVudAorICBIaUxpbmsgcGVybFN0YXRlbWVudE5ldHdvcmsJcGVybFN0YXRlbWVudAorICBIaUxpbmsgcGVybFN0YXRlbWVudFB3b3JkCXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRUaW1lCXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnRNaXNjCXBlcmxTdGF0ZW1lbnQKKyAgSGlMaW5rIHBlcmxTdGF0ZW1lbnROZXcJcGVybFN0YXRlbWVudAorICBIaUxpbmsgcGVybEZ1bmN0aW9uTmFtZQlwZXJsSWRlbnRpZmllcgorICBIaUxpbmsgcGVybE1ldGhvZAkJcGVybElkZW50aWZpZXIKKyAgSGlMaW5rIHBlcmxGdW5jdGlvblBSZWYJcGVybFR5cGUKKyAgSGlMaW5rIHBlcmxQT0QJCXBlcmxDb21tZW50CisgIEhpTGluayBwZXJsU2hlbGxDb21tYW5kCXBlcmxTdHJpbmcKKyAgSGlMaW5rIHBlcmxTcGVjaWFsQXNjaWkJcGVybFNwZWNpYWwKKyAgSGlMaW5rIHBlcmxTcGVjaWFsRG9sbGFyCXBlcmxTcGVjaWFsCisgIEhpTGluayBwZXJsU3BlY2lhbFN0cmluZwlwZXJsU3BlY2lhbAorICBIaUxpbmsgcGVybFNwZWNpYWxTdHJpbmdVCXBlcmxTcGVjaWFsCisgIEhpTGluayBwZXJsU3BlY2lhbE1hdGNoCXBlcmxTcGVjaWFsCisgIEhpTGluayBwZXJsU3BlY2lhbEJFT00JcGVybFNwZWNpYWwKKyAgSGlMaW5rIHBlcmxEQVRBCQlwZXJsQ29tbWVudAorCisgIEhpTGluayBwZXJsQnJhY2tldHMJCUVycm9yCisKKyAgIiBQb3NzaWJsZSBlcnJvcnMKKyAgSGlMaW5rIHBlcmxOb3RFbXB0eUxpbmUJRXJyb3IKKyAgSGlMaW5rIHBlcmxFbHNlSWZFcnJvcglFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisiIFN5bmNpbmcgdG8gc3BlZWQgdXAgcHJvY2Vzc2luZworIgoraWYgIWV4aXN0cygicGVybF9ub19zeW5jX29uX3N1YiIpCisgIHN5biBzeW5jIG1hdGNoIHBlcmxTeW5jCWdyb3VwaGVyZSBOT05FICJeXHMqXDxwYWNrYWdlXHMiCisgIHN5biBzeW5jIG1hdGNoIHBlcmxTeW5jCWdyb3VwaGVyZSBwZXJsRnVuY3Rpb24gIl5ccypcPHN1YlxzIgorICBzeW4gc3luYyBtYXRjaCBwZXJsU3luYwlncm91cGhlcmUgTk9ORSAiXn0iCitlbmRpZgorCitpZiAhZXhpc3RzKCJwZXJsX25vX3N5bmNfb25fZ2xvYmFsX3ZhciIpCisgIHN5biBzeW5jIG1hdGNoIHBlcmxTeW5jCWdyb3VwaGVyZSBOT05FICJeJFxJW1s6YWxudW06XV86XStccyo9XHMqeyIKKyAgc3luIHN5bmMgbWF0Y2ggcGVybFN5bmMJZ3JvdXBoZXJlIE5PTkUgIl5bQCVdXElbWzphbG51bTpdXzpdK1xzKj1ccyooIgorZW5kaWYKKworaWYgZXhpc3RzKCJwZXJsX3N5bmNfZGlzdCIpCisgIGV4ZWN1dGUgInN5biBzeW5jIG1heGxpbmVzPSIgLiBwZXJsX3N5bmNfZGlzdAorZWxzZQorICBzeW4gc3luYyBtYXhsaW5lcz0xMDAKK2VuZGlmCisKK3N5biBzeW5jIG1hdGNoIHBlcmxTeW5jUE9ECWdyb3VwaGVyZSBwZXJsUE9EICJePXBvZCIKK3N5biBzeW5jIG1hdGNoIHBlcmxTeW5jUE9ECWdyb3VwaGVyZSBwZXJsUE9EICJePWhlYWQiCitzeW4gc3luYyBtYXRjaCBwZXJsU3luY1BPRAlncm91cGhlcmUgcGVybFBPRCAiXj1pdGVtIgorc3luIHN5bmMgbWF0Y2ggcGVybFN5bmNQT0QJZ3JvdXBoZXJlIE5PTkUgIl49Y3V0IgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJwZXJsIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcGYudmltIGIvcnVudGltZS9zeW50YXgvcGYudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NGNmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wZi52aW0KQEAgLTAsMCArMSw3NSBAQAorIiBwZiBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJT3BlbkJTRCBwYWNrZXQgZmlsdGVyIGNvbmZpZ3VyYXRpb24gKHBmLmNvbmYpCisiIE1haW50YWluZXI6CUNhbWllbCBEb2JiZWxhYXIgPGNkQHNlbnRpYS5ubD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDI3CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc2V0bG9jYWwgZm9sZG1ldGhvZD1zeW50YXgKK3N5biBzeW5jIGZyb21zdGFydAorCitzeW4gY2x1c3RlcglwZk5vdExTCQljb250YWlucz1wZkNvbW1lbnQscGZUb2RvLHBmVmFyQXNzaWduCitzeW4ga2V5d29yZAlwZkNtZAkJYWx0cSBhbmNob3IgYW50aXNwb29mIGJpbmF0IG5hdCBwYXNzCitzeW4ga2V5d29yZAlwZkNtZAkJcXVldWUgcmRyIHNjcnViIHRhYmxlIHNldAorc3luIGtleXdvcmQJcGZTZXJ2aWNlCWF1dGggYmdwIGRvbWFpbiBmaW5nZXIgZnRwIGh0dHAgaHR0cHMgaWRlbnQKK3N5biBrZXl3b3JkCXBmU2VydmljZQlpbWFwIGlyYyBpc2FrbXAga2VyYmVyb3MgbWFpbCBuYW1lc2VydmVyIG5mcworc3luIGtleXdvcmQJcGZTZXJ2aWNlCW5udHAgbnRwIHBvcDMgcG9ydG1hcCBwcHRwIHJwY2JpbmQgcnN5bmMgc210cAorc3luIGtleXdvcmQJcGZTZXJ2aWNlCXNubXAgc25tcHRyYXAgc29ja3Mgc3NoIHN1bnJwYyBzeXNsb2cgdGVsbmV0CitzeW4ga2V5d29yZAlwZlNlcnZpY2UJdGZ0cCB3d3cKK3N5biBrZXl3b3JkCXBmVG9kbwkJVE9ETyBYWFggY29udGFpbmVkCitzeW4ga2V5d29yZAlwZldpbGRBZGRyCWFsbCBhbnkKK3N5biBtYXRjaAlwZkNtZAkJL2Jsb2NrXHMvCitzeW4gbWF0Y2gJcGZDb21tZW50CS8jLiokLyBjb250YWlucz1wZlRvZG8KK3N5biBtYXRjaAlwZkNvbnQJCS9cXCQvCitzeW4gbWF0Y2gJcGZFcnJDbG9zZQkvfS8KK3N5biBtYXRjaAlwZklQdjQJCS9cZFx7MSwzfVwuXGRcezEsM31cLlxkXHsxLDN9XC5cZFx7MSwzfS8KK3N5biBtYXRjaAlwZklQdjYJCS9bYS1mQS1GMC05Ol0qOjpbYS1mQS1GMC05Oi5dKi8KK3N5biBtYXRjaAlwZklQdjYJCS9bYS1mQS1GMC05Ol1cKzpbYS1mQS1GMC05Ol1cKzpbYS1mQS1GMC05Oi5dXCsvCitzeW4gbWF0Y2gJcGZOZXRtYXNrCS9cL1xkXCsvCitzeW4gbWF0Y2gJcGZOdW0JCS9bYS16QS1aMC05XzouXVxAPCFcZFwrW2EtekEtWjAtOV86Ll1cQCEvCitzeW4gbWF0Y2gJcGZUYWJsZQkJLzxccypbYS16QS1aXVthLXpBLVowLTlfXSpccyo+Lworc3luIG1hdGNoCXBmVmFyCQkvJFthLXpBLVpdW2EtekEtWjAtOV9dKi8KK3N5biBtYXRjaAlwZlZhckFzc2lnbgkvXlxzKlthLXpBLVpdW2EtekEtWjAtOV9dKlxzKj0vbWU9ZS0xCitzeW4gcmVnaW9uCXBmRm9sZDEJCXN0YXJ0PS9eI1x7MX0+LyBlbmQ9L14jXHsxLDN9Pi9tZT1zLTEgdHJhbnNwYXJlbnQgZm9sZAorc3luIHJlZ2lvbglwZkZvbGQyCQlzdGFydD0vXiNcezJ9Pi8gZW5kPS9eI1x7MiwzfT4vbWU9cy0xIHRyYW5zcGFyZW50IGZvbGQKK3N5biByZWdpb24JcGZGb2xkMwkJc3RhcnQ9L14jXHszfT4vIGVuZD0vXiNcezN9Pi9tZT1zLTEgdHJhbnNwYXJlbnQgZm9sZAorc3luIHJlZ2lvbglwZkxpc3QJCXN0YXJ0PS97LyBlbmQ9L30vIHRyYW5zcGFyZW50IGNvbnRhaW5zPUFMTEJVVCxwZkVyckNsb3NlLEBwZk5vdExTCitzeW4gcmVnaW9uCXBmU3RyaW5nCXN0YXJ0PS8iLyBlbmQ9LyIvIHRyYW5zcGFyZW50IGNvbnRhaW5zPUFMTEJVVCxwZlN0cmluZyxAcGZOb3RMUworc3luIHJlZ2lvbglwZlN0cmluZwlzdGFydD0vJy8gZW5kPS8nLyB0cmFuc3BhcmVudCBjb250YWlucz1BTExCVVQscGZTdHJpbmcsQHBmTm90TFMKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY19zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9jX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHBmQ21kCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHBmQ29tbWVudAlDb21tZW50CisgIEhpTGluayBwZkNvbnQJCVN0YXRlbWVudAorICBIaUxpbmsgcGZFcnJDbG9zZQlFcnJvcgorICBIaUxpbmsgcGZJUHY0CQlUeXBlCisgIEhpTGluayBwZklQdjYJCVR5cGUKKyAgSGlMaW5rIHBmTmV0bWFzawlDb25zdGFudAorICBIaUxpbmsgcGZOdW0JCUNvbnN0YW50CisgIEhpTGluayBwZlNlcnZpY2UJQ29uc3RhbnQKKyAgSGlMaW5rIHBmVGFibGUJSWRlbnRpZmllcgorICBIaUxpbmsgcGZUb2RvCQlUb2RvCisgIEhpTGluayBwZlZhcgkJSWRlbnRpZmllcgorICBIaUxpbmsgcGZWYXJBc3NpZ24JSWRlbnRpZmllcgorICBIaUxpbmsgcGZXaWxkQWRkcglUeXBlCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInBmIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcGZtYWluLnZpbSBiL3J1bnRpbWUvc3ludGF4L3BmbWFpbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzNmQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3BmbWFpbi52aW0KQEAgLTAsMCArMSw4NTggQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglQb3N0Zml4IG1haW4uY2YgY29uZmlndXJhdGlvbgorIiBNYWludGFpbmVyOglLRUxFTUVOIFBldGVyIDxQZXRlciBkb3QgS2VsZW1lbiBhdCBjZXJuIGRvdCBjaD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDQgSnVuIDAxCisiIFZlcnNpb246CTAuMTIKKyIgVVJMOgkJaHR0cDovL2Nlcm4uY2gvZnVqaS92aW0vc3ludGF4L3BmbWFpbi52aW0KKyIgQ29tbWVudDoJQmFzZWQgb24gUG9zdGZpeCAyLjEuMSBkZWZhdWx0cy4gKCtUTFMpCisKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworaWYgdmVyc2lvbiA+PSA2MDAKKwlzZXRsb2NhbCBpc2tleXdvcmQ9QCw0OC01NyxfLC0KK2Vsc2UKKwlzZXQgaXNrZXl3b3JkPUAsNDgtNTcsXywtCitlbmRpZgorCitzeW50YXggY2FzZSBtYXRjaAorc3ludGF4IHN5bmMgbWlubGluZXM9MQorCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIDJib3VuY2Vfbm90aWNlX3JlY2lwaWVudAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBhY2Nlc3NfbWFwX3JlamVjdF9jb2RlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFkZHJlc3NfdmVyaWZ5X2RlZmF1bHRfdHJhbnNwb3J0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFkZHJlc3NfdmVyaWZ5X2xvY2FsX3RyYW5zcG9ydAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBhZGRyZXNzX3ZlcmlmeV9tYXAKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYWRkcmVzc192ZXJpZnlfbmVnYXRpdmVfY2FjaGUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYWRkcmVzc192ZXJpZnlfbmVnYXRpdmVfZXhwaXJlX3RpbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYWRkcmVzc192ZXJpZnlfbmVnYXRpdmVfcmVmcmVzaF90aW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFkZHJlc3NfdmVyaWZ5X3BvbGxfY291bnQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYWRkcmVzc192ZXJpZnlfcG9sbF9kZWxheQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBhZGRyZXNzX3ZlcmlmeV9wb3NpdGl2ZV9leHBpcmVfdGltZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBhZGRyZXNzX3ZlcmlmeV9wb3NpdGl2ZV9yZWZyZXNoX3RpbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYWRkcmVzc192ZXJpZnlfcmVsYXlfdHJhbnNwb3J0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFkZHJlc3NfdmVyaWZ5X3JlbGF5aG9zdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBhZGRyZXNzX3ZlcmlmeV9zZW5kZXIKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYWRkcmVzc192ZXJpZnlfc2VydmljZV9uYW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFkZHJlc3NfdmVyaWZ5X3RyYW5zcG9ydF9tYXBzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFkZHJlc3NfdmVyaWZ5X3ZpcnR1YWxfdHJhbnNwb3J0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFsaWFzX2RhdGFiYXNlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFsaWFzX21hcHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYWxsb3dfbWFpbF90b19jb21tYW5kcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBhbGxvd19tYWlsX3RvX2ZpbGVzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFsbG93X21pbl91c2VyCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFsbG93X3BlcmNlbnRfaGFjaworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBhbGxvd191bnRydXN0ZWRfcm91dGluZworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBhbHRlcm5hdGVfY29uZmlnX2RpcmVjdG9yaWVzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFsd2F5c19iY2MKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYXBwZW5kX2F0X215b3JpZ2luCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGFwcGVuZF9kb3RfbXlkb21haW4KK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYXBwbGljYXRpb25fZXZlbnRfZHJhaW5fdGltZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBiYWNrd2FyZHNfYm91bmNlX2xvZ2ZpbGVfY29tcGF0aWJpbGl0eQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBiZXJrZWxleV9kYl9jcmVhdGVfYnVmZmVyX3NpemUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYmVya2VsZXlfZGJfcmVhZF9idWZmZXJfc2l6ZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBiZXN0X214X3RyYW5zcG9ydAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBiaWZmCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGJvZHlfY2hlY2tzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGJvZHlfY2hlY2tzX3NpemVfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYm91bmNlX25vdGljZV9yZWNpcGllbnQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYm91bmNlX3F1ZXVlX2xpZmV0aW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGJvdW5jZV9zZXJ2aWNlX25hbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYm91bmNlX3NpemVfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgYnJva2VuX3Nhc2xfYXV0aF9jbGllbnRzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGNhbm9uaWNhbF9tYXBzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGNsZWFudXBfc2VydmljZV9uYW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGNvbW1hbmRfZGlyZWN0b3J5CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGNvbW1hbmRfZXhwYW5zaW9uX2ZpbHRlcgorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBjb21tYW5kX3RpbWVfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgY29uZmlnX2RpcmVjdG9yeQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBjb250ZW50X2ZpbHRlcgorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBkYWVtb25fZGlyZWN0b3J5CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGRhZW1vbl90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGRlYnVnX3BlZXJfbGV2ZWwKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVidWdfcGVlcl9saXN0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGRlZmF1bHRfZGF0YWJhc2VfdHlwZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBkZWZhdWx0X2RlbGl2ZXJ5X3Nsb3RfY29zdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBkZWZhdWx0X2RlbGl2ZXJ5X3Nsb3RfZGlzY291bnQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVmYXVsdF9kZWxpdmVyeV9zbG90X2xvYW4KK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVmYXVsdF9kZXN0aW5hdGlvbl9jb25jdXJyZW5jeV9saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBkZWZhdWx0X2Rlc3RpbmF0aW9uX3JlY2lwaWVudF9saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBkZWZhdWx0X2V4dHJhX3JlY2lwaWVudF9saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBkZWZhdWx0X21pbmltdW1fZGVsaXZlcnlfc2xvdHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVmYXVsdF9wcml2cworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBkZWZhdWx0X3Byb2Nlc3NfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVmYXVsdF9yYmxfcmVwbHkKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVmYXVsdF9yZWNpcGllbnRfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVmYXVsdF90cmFuc3BvcnQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVmYXVsdF92ZXJwX2RlbGltaXRlcnMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVmZXJfY29kZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBkZWZlcl9zZXJ2aWNlX25hbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVmZXJfdHJhbnNwb3J0cworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBkZWxheV9ub3RpY2VfcmVjaXBpZW50CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGRlbGF5X3dhcm5pbmdfdGltZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBkZWxpdmVyX2xvY2tfYXR0ZW1wdHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGVsaXZlcl9sb2NrX2RlbGF5CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGRpc2FibGVfZG5zX2xvb2t1cHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGlzYWJsZV9taW1lX2lucHV0X3Byb2Nlc3NpbmcKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZGlzYWJsZV9taW1lX291dHB1dF9jb252ZXJzaW9uCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGRpc2FibGVfdmVycF9ib3VuY2VzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGRpc2FibGVfdnJmeV9jb21tYW5kCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGRvbnRfcmVtb3ZlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGRvdWJsZV9ib3VuY2Vfc2VuZGVyCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGR1cGxpY2F0ZV9maWx0ZXJfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZW1wdHlfYWRkcmVzc19yZWNpcGllbnQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZW5hYmxlX2Vycm9yc190bworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBlbmFibGVfb3JpZ2luYWxfcmVjaXBpZW50CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGVycm9yX25vdGljZV9yZWNpcGllbnQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZXJyb3Jfc2VydmljZV9uYW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGV4cGFuZF9vd25lcl9hbGlhcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBleHBvcnRfZW52aXJvbm1lbnQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZmFsbGJhY2tfcmVsYXkKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZmFsbGJhY2tfdHJhbnNwb3J0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGZhc3RfZmx1c2hfZG9tYWlucworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBmYXN0X2ZsdXNoX3B1cmdlX3RpbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZmFzdF9mbHVzaF9yZWZyZXNoX3RpbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZmF1bHRfaW5qZWN0aW9uX2NvZGUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZmx1c2hfc2VydmljZV9uYW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGZvcmtfYXR0ZW1wdHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZm9ya19kZWxheQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBmb3J3YXJkX2V4cGFuc2lvbl9maWx0ZXIKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgZm9yd2FyZF9wYXRoCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGhhc2hfcXVldWVfZGVwdGgKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgaGFzaF9xdWV1ZV9uYW1lcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBoZWFkZXJfYWRkcmVzc190b2tlbl9saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBoZWFkZXJfY2hlY2tzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGhlYWRlcl9zaXplX2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGhlbHBmdWxfd2FybmluZ3MKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgaG9tZV9tYWlsYm94CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGhvcGNvdW50X2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGh0bWxfZGlyZWN0b3J5CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGlnbm9yZV9teF9sb29rdXBfZXJyb3IKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgaW1wb3J0X2Vudmlyb25tZW50CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGluX2Zsb3dfZGVsYXkKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgaW5ldF9pbnRlcmZhY2VzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGluaXRpYWxfZGVzdGluYXRpb25fY29uY3VycmVuY3kKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgaW52YWxpZF9ob3N0bmFtZV9yZWplY3RfY29kZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBpcGNfaWRsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBpcGNfdGltZW91dAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBpcGNfdHRsCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxpbmVfbGVuZ3RoX2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxtdHBfY2FjaGVfY29ubmVjdGlvbgorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsbXRwX2Nvbm5lY3RfdGltZW91dAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsbXRwX2RhdGFfZG9uZV90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxtdHBfZGF0YV9pbml0X3RpbWVvdXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbG10cF9kYXRhX3hmZXJfdGltZW91dAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsbXRwX2Rlc3RpbmF0aW9uX2NvbmN1cnJlbmN5X2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxtdHBfZGVzdGluYXRpb25fcmVjaXBpZW50X2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxtdHBfbGhsb190aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxtdHBfbWFpbF90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxtdHBfcXVpdF90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxtdHBfcmNwdF90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxtdHBfcnNldF90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxtdHBfc2FzbF9hdXRoX2VuYWJsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsbXRwX3Nhc2xfcGFzc3dvcmRfbWFwcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsbXRwX3Nhc2xfc2VjdXJpdHlfb3B0aW9ucworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsbXRwX3NlbmRfeGZvcndhcmRfY29tbWFuZAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsbXRwX3NraXBfcXVpdF9yZXNwb25zZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsbXRwX3RjcF9wb3J0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxtdHBfeGZvcndhcmRfdGltZW91dAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsb2NhbF9jb21tYW5kX3NoZWxsCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxvY2FsX2Rlc3RpbmF0aW9uX2NvbmN1cnJlbmN5X2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIGxvY2FsX2Rlc3RpbmF0aW9uX3JlY2lwaWVudF9saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsb2NhbF9yZWNpcGllbnRfbWFwcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBsb2NhbF90cmFuc3BvcnQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbHVzZXJfcmVsYXkKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbWFpbF9uYW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG1haWxfb3duZXIKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbWFpbF9yZWxlYXNlX2RhdGUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbWFpbF9zcG9vbF9kaXJlY3RvcnkKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbWFpbF92ZXJzaW9uCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG1haWxib3hfY29tbWFuZAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBtYWlsYm94X2NvbW1hbmRfbWFwcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBtYWlsYm94X2RlbGl2ZXJ5X2xvY2sKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbWFpbGJveF9zaXplX2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG1haWxib3hfdHJhbnNwb3J0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG1haWxxX3BhdGgKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbWFucGFnZV9kaXJlY3RvcnkKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbWFwc19yYmxfZG9tYWlucworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBtYXBzX3JibF9yZWplY3RfY29kZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBtYXNxdWVyYWRlX2NsYXNzZXMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbWFzcXVlcmFkZV9kb21haW5zCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG1hc3F1ZXJhZGVfZXhjZXB0aW9ucworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBtYXhfaWRsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBtYXhfdXNlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG1heGltYWxfYmFja29mZl90aW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG1heGltYWxfcXVldWVfbGlmZXRpbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbWVzc2FnZV9zaXplX2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG1pbWVfYm91bmRhcnlfbGVuZ3RoX2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG1pbWVfaGVhZGVyX2NoZWNrcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBtaW1lX25lc3RpbmdfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbWluaW1hbF9iYWNrb2ZmX3RpbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbXVsdGlfcmVjaXBpZW50X2JvdW5jZV9yZWplY3RfY29kZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBteWRlc3RpbmF0aW9uCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG15ZG9tYWluCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG15aG9zdG5hbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgbXluZXR3b3Jrcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBteW5ldHdvcmtzX3N0eWxlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG15b3JpZ2luCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG5lc3RlZF9oZWFkZXJfY2hlY2tzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIG5ld2FsaWFzZXNfcGF0aAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBub25fZnFkbl9yZWplY3RfY29kZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBub3RpZnlfY2xhc3Nlcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBvd25lcl9yZXF1ZXN0X3NwZWNpYWwKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgcGFyZW50X2RvbWFpbl9tYXRjaGVzX3N1YmRvbWFpbnMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgcGVybWl0X214X2JhY2t1cF9uZXR3b3Jrcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBwaWNrdXBfc2VydmljZV9uYW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHByZXBlbmRfZGVsaXZlcmVkX2hlYWRlcgorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBwcm9jZXNzX2lkX2RpcmVjdG9yeQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBwcm9wYWdhdGVfdW5tYXRjaGVkX2V4dGVuc2lvbnMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgcHJveHlfaW50ZXJmYWNlcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBwcm94eV9yZWFkX21hcHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgcW1ncl9jbG9nX3dhcm5fdGltZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBxbWdyX2Z1ZGdlX2ZhY3Rvcgorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBxbWdyX21lc3NhZ2VfYWN0aXZlX2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHFtZ3JfbWVzc2FnZV9yZWNpcGllbnRfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgcW1ncl9tZXNzYWdlX3JlY2lwaWVudF9taW5pbXVtCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHFtcXBkX2F1dGhvcml6ZWRfY2xpZW50cworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBxbXFwZF9lcnJvcl9kZWxheQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBxbXFwZF90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHF1ZXVlX2RpcmVjdG9yeQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBxdWV1ZV9maWxlX2F0dHJpYnV0ZV9jb3VudF9saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBxdWV1ZV9taW5mcmVlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHF1ZXVlX3J1bl9kZWxheQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBxdWV1ZV9zZXJ2aWNlX25hbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgcmJsX3JlcGx5X21hcHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgcmVhZG1lX2RpcmVjdG9yeQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiByZWNlaXZlX292ZXJyaWRlX29wdGlvbnMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgcmVjaXBpZW50X2JjY19tYXBzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHJlY2lwaWVudF9jYW5vbmljYWxfbWFwcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiByZWNpcGllbnRfZGVsaW1pdGVyCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHJlamVjdF9jb2RlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHJlbGF5X2NsaWVudGNlcnRzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHJlbGF5X2Rlc3RpbmF0aW9uX2NvbmN1cnJlbmN5X2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHJlbGF5X2Rlc3RpbmF0aW9uX3JlY2lwaWVudF9saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiByZWxheV9kb21haW5zCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHJlbGF5X2RvbWFpbnNfcmVqZWN0X2NvZGUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgcmVsYXlfcmVjaXBpZW50X21hcHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgcmVsYXlfdHJhbnNwb3J0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHJlbGF5aG9zdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiByZWxvY2F0ZWRfbWFwcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiByZXF1aXJlX2hvbWVfZGlyZWN0b3J5CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHJlc29sdmVfZGVxdW90ZWRfYWRkcmVzcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiByZXNvbHZlX251bGxfZG9tYWluCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHJld3JpdGVfc2VydmljZV9uYW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNhbXBsZV9kaXJlY3RvcnkKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc2VuZGVyX2Jhc2VkX3JvdXRpbmcKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc2VuZGVyX2JjY19tYXBzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNlbmRlcl9jYW5vbmljYWxfbWFwcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzZW5kbWFpbF9wYXRoCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNlcnZpY2VfdGhyb3R0bGVfdGltZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzZXRnaWRfZ3JvdXAKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc2hvd191c2VyX3Vua25vd25fdGFibGVfbmFtZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzaG93cV9zZXJ2aWNlX25hbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9hbHdheXNfc2VuZF9laGxvCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfYmluZF9hZGRyZXNzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfY29ubmVjdF90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfZGF0YV9kb25lX3RpbWVvdXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9kYXRhX2luaXRfdGltZW91dAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX2RhdGFfeGZlcl90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfZGVmZXJfaWZfbm9fbXhfYWRkcmVzc19mb3VuZAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX2Rlc3RpbmF0aW9uX2NvbmN1cnJlbmN5X2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfZGVzdGluYXRpb25fcmVjaXBpZW50X2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfZW5mb3JjZV90bHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9oZWxvX25hbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9oZWxvX3RpbWVvdXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9ob3N0X2xvb2t1cAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX2xpbmVfbGVuZ3RoX2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfbWFpbF90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfbXhfYWRkcmVzc19saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX214X3Nlc3Npb25fbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9uZXZlcl9zZW5kX2VobG8KK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9waXhfd29ya2Fyb3VuZF9kZWxheV90aW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfcGl4X3dvcmthcm91bmRfdGhyZXNob2xkX3RpbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9xdWl0X3RpbWVvdXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9xdW90ZV9yZmM4MjFfZW52ZWxvcGUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9yYW5kb21pemVfYWRkcmVzc2VzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfcmNwdF90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfcnNldF90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfc2FzbF9hdXRoX2VuYWJsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX3Nhc2xfcGFzc3dvcmRfbWFwcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX3Nhc2xfc2VjdXJpdHlfb3B0aW9ucworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX3Nhc2xfdGxzX3NlY3VyaXR5X29wdGlvbnMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9zYXNsX3Rsc192ZXJpZmllZF9zZWN1cml0eV9vcHRpb25zCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfc2VuZF94Zm9yd2FyZF9jb21tYW5kCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfc2tpcF81eHhfZ3JlZXRpbmcKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9za2lwX3F1aXRfcmVzcG9uc2UKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF9zdGFydHRsc190aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfdGxzX0NBZmlsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX3Rsc19DQXBhdGgKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF90bHNfY2VydF9maWxlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfdGxzX2NpcGhlcmxpc3QKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF90bHNfZGNlcnRfZmlsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX3Rsc19ka2V5X2ZpbGUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF90bHNfZW5mb3JjZV9wZWVybmFtZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX3Rsc19rZXlfZmlsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX3Rsc19sb2dsZXZlbAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX3Rsc19ub3RlX3N0YXJ0dGxzX29mZmVyCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfdGxzX3Blcl9zaXRlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfdGxzX3NjZXJ0X3ZlcmlmeWRlcHRoCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfdGxzX3Nlc3Npb25fY2FjaGVfZGF0YWJhc2UKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cF90bHNfc2Vzc2lvbl9jYWNoZV90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBfdXNlX3Rscworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwX3hmb3J3YXJkX3RpbWVvdXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfYXV0aG9yaXplZF92ZXJwX2NsaWVudHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfYXV0aG9yaXplZF94Y2xpZW50X2hvc3RzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX2F1dGhvcml6ZWRfeGZvcndhcmRfaG9zdHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfYmFubmVyCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX2NsaWVudF9jb25uZWN0aW9uX2NvdW50X2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX2NsaWVudF9jb25uZWN0aW9uX2xpbWl0X2V4Y2VwdGlvbnMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfY2xpZW50X2Nvbm5lY3Rpb25fcmF0ZV9saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF9jbGllbnRfcmVzdHJpY3Rpb25zCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX2RhdGFfcmVzdHJpY3Rpb25zCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX2RlbGF5X3JlamVjdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF9lbmZvcmNlX3Rscworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF9lcnJvcl9zbGVlcF90aW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX2V0cm5fcmVzdHJpY3Rpb25zCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX2V4cGFuc2lvbl9maWx0ZXIKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfaGFyZF9lcnJvcl9saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF9oZWxvX3JlcXVpcmVkCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX2hlbG9fcmVzdHJpY3Rpb25zCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX2hpc3RvcnlfZmx1c2hfdGhyZXNob2xkCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX2p1bmtfY29tbWFuZF9saW1pdAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF9ub29wX2NvbW1hbmRzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX251bGxfYWNjZXNzX2xvb2t1cF9rZXkKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfcG9saWN5X3NlcnZpY2VfbWF4X2lkbGUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfcG9saWN5X3NlcnZpY2VfbWF4X3R0bAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF9wb2xpY3lfc2VydmljZV90aW1lb3V0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Byb3h5X2VobG8KK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfcHJveHlfZmlsdGVyCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Byb3h5X3RpbWVvdXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfcmVjaXBpZW50X2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3JlY2lwaWVudF9vdmVyc2hvb3RfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfcmVjaXBpZW50X3Jlc3RyaWN0aW9ucworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF9yZWplY3RfdW5saXN0ZWRfcmVjaXBpZW50CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3JlamVjdF91bmxpc3RlZF9zZW5kZXIKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfcmVzdHJpY3Rpb25fY2xhc3Nlcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF9zYXNsX2FwcGxpY2F0aW9uX25hbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfc2FzbF9hdXRoX2VuYWJsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF9zYXNsX2V4Y2VwdGlvbnNfbmV0d29ya3MKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfc2FzbF9sb2NhbF9kb21haW4KK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfc2FzbF9zZWN1cml0eV9vcHRpb25zCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Nhc2xfdGxzX3NlY3VyaXR5X29wdGlvbnMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfc2VuZGVyX2xvZ2luX21hcHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfc2VuZGVyX3Jlc3RyaWN0aW9ucworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF9zb2Z0X2Vycm9yX2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3N0YXJ0dGxzX3RpbWVvdXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfdGltZW91dAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF90bHNfQ0FmaWxlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Rsc19DQXBhdGgKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfdGxzX2Fza19jY2VydAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF90bHNfYXV0aF9vbmx5CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Rsc19jY2VydF92ZXJpZnlkZXB0aAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF90bHNfY2VydF9maWxlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Rsc19jaXBoZXJsaXN0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Rsc19kY2VydF9maWxlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Rsc19kaDEwMjRfcGFyYW1fZmlsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF90bHNfZGg1MTJfcGFyYW1fZmlsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF90bHNfZGtleV9maWxlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Rsc19rZXlfZmlsZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF90bHNfbG9nbGV2ZWwKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfdGxzX3JlY2VpdmVkX2hlYWRlcgorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzbXRwZF90bHNfcmVxX2NjZXJ0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Rsc19zZXNzaW9uX2NhY2hlX2RhdGFiYXNlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3Rsc19zZXNzaW9uX2NhY2hlX3RpbWVvdXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc210cGRfdGxzX3dyYXBwZXJtb2RlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHNtdHBkX3VzZV90bHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc29mdF9ib3VuY2UKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc3RhbGVfbG9ja190aW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHN0cmljdF83Yml0X2hlYWRlcnMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgc3RyaWN0XzhiaXRtaW1lCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHN0cmljdF84Yml0bWltZV9ib2R5CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHN0cmljdF9taW1lX2VuY29kaW5nX2RvbWFpbgorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzdHJpY3RfcmZjODIxX2VudmVsb3Blcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzdW5fbWFpbHRvb2xfY29tcGF0aWJpbGl0eQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzd2FwX2JhbmdwYXRoCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHN5c2xvZ19mYWNpbGl0eQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiBzeXNsb2dfbmFtZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB0bHNfZGFlbW9uX3JhbmRvbV9ieXRlcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB0bHNfZGFlbW9uX3JhbmRvbV9zb3VyY2UKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdGxzX3JhbmRvbV9ieXRlcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB0bHNfcmFuZG9tX2V4Y2hhbmdlX25hbWUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdGxzX3JhbmRvbV9wcm5nX3VwZGF0ZV9wZXJpb2QKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdGxzX3JhbmRvbV9yZXNlZWRfcGVyaW9kCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHRsc19yYW5kb21fc291cmNlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHRyYWNlX3NlcnZpY2VfbmFtZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB0cmFuc3BvcnRfbWFwcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB0cmFuc3BvcnRfcmV0cnlfdGltZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB0cmlnZ2VyX3RpbWVvdXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdW5kaXNjbG9zZWRfcmVjaXBpZW50c19oZWFkZXIKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdW5rbm93bl9hZGRyZXNzX3JlamVjdF9jb2RlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHVua25vd25fY2xpZW50X3JlamVjdF9jb2RlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHVua25vd25faG9zdG5hbWVfcmVqZWN0X2NvZGUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdW5rbm93bl9sb2NhbF9yZWNpcGllbnRfcmVqZWN0X2NvZGUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdW5rbm93bl9yZWxheV9yZWNpcGllbnRfcmVqZWN0X2NvZGUKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdW5rbm93bl92aXJ0dWFsX2FsaWFzX3JlamVjdF9jb2RlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHVua25vd25fdmlydHVhbF9tYWlsYm94X3JlamVjdF9jb2RlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHVudmVyaWZpZWRfcmVjaXBpZW50X3JlamVjdF9jb2RlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHVudmVyaWZpZWRfc2VuZGVyX3JlamVjdF9jb2RlCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHZlcnBfZGVsaW1pdGVyX2ZpbHRlcgorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB2aXJ0dWFsX2FsaWFzX2RvbWFpbnMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdmlydHVhbF9hbGlhc19leHBhbnNpb25fbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdmlydHVhbF9hbGlhc19tYXBzCitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHZpcnR1YWxfYWxpYXNfcmVjdXJzaW9uX2xpbWl0CitzeW50YXgga2V5d29yZCBwZm1haW5Db25mIHZpcnR1YWxfZGVzdGluYXRpb25fY29uY3VycmVuY3lfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdmlydHVhbF9kZXN0aW5hdGlvbl9yZWNpcGllbnRfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdmlydHVhbF9naWRfbWFwcworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB2aXJ0dWFsX21haWxib3hfYmFzZQorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB2aXJ0dWFsX21haWxib3hfZG9tYWlucworc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB2aXJ0dWFsX21haWxib3hfbGltaXQKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdmlydHVhbF9tYWlsYm94X2xvY2sKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdmlydHVhbF9tYWlsYm94X21hcHMKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkNvbmYgdmlydHVhbF9taW5pbXVtX3VpZAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB2aXJ0dWFsX3RyYW5zcG9ydAorc3ludGF4IGtleXdvcmQgcGZtYWluQ29uZiB2aXJ0dWFsX3VpZF9tYXBzCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDwyYm91bmNlX25vdGljZV9yZWNpcGllbnRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFjY2Vzc19tYXBfcmVqZWN0X2NvZGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFkZHJlc3NfdmVyaWZ5X2RlZmF1bHRfdHJhbnNwb3J0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxhZGRyZXNzX3ZlcmlmeV9sb2NhbF90cmFuc3BvcnRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFkZHJlc3NfdmVyaWZ5X21hcFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YWRkcmVzc192ZXJpZnlfbmVnYXRpdmVfY2FjaGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFkZHJlc3NfdmVyaWZ5X25lZ2F0aXZlX2V4cGlyZV90aW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxhZGRyZXNzX3ZlcmlmeV9uZWdhdGl2ZV9yZWZyZXNoX3RpbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFkZHJlc3NfdmVyaWZ5X3BvbGxfY291bnRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFkZHJlc3NfdmVyaWZ5X3BvbGxfZGVsYXlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFkZHJlc3NfdmVyaWZ5X3Bvc2l0aXZlX2V4cGlyZV90aW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxhZGRyZXNzX3ZlcmlmeV9wb3NpdGl2ZV9yZWZyZXNoX3RpbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFkZHJlc3NfdmVyaWZ5X3JlbGF5X3RyYW5zcG9ydFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YWRkcmVzc192ZXJpZnlfcmVsYXlob3N0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxhZGRyZXNzX3ZlcmlmeV9zZW5kZXJcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFkZHJlc3NfdmVyaWZ5X3NlcnZpY2VfbmFtZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YWRkcmVzc192ZXJpZnlfdHJhbnNwb3J0X21hcHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFkZHJlc3NfdmVyaWZ5X3ZpcnR1YWxfdHJhbnNwb3J0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxhbGlhc19kYXRhYmFzZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YWxpYXNfbWFwc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YWxsb3dfbWFpbF90b19jb21tYW5kc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YWxsb3dfbWFpbF90b19maWxlc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YWxsb3dfbWluX3VzZXJcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFsbG93X3BlcmNlbnRfaGFja1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YWxsb3dfdW50cnVzdGVkX3JvdXRpbmdcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFsdGVybmF0ZV9jb25maWdfZGlyZWN0b3JpZXNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFsd2F5c19iY2NcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGFwcGVuZF9hdF9teW9yaWdpblw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YXBwZW5kX2RvdF9teWRvbWFpblw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YXBwbGljYXRpb25fZXZlbnRfZHJhaW5fdGltZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YmFja3dhcmRzX2JvdW5jZV9sb2dmaWxlX2NvbXBhdGliaWxpdHlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGJlcmtlbGV5X2RiX2NyZWF0ZV9idWZmZXJfc2l6ZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YmVya2VsZXlfZGJfcmVhZF9idWZmZXJfc2l6ZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YmVzdF9teF90cmFuc3BvcnRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGJpZmZcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGJvZHlfY2hlY2tzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxib2R5X2NoZWNrc19zaXplX2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxib3VuY2Vfbm90aWNlX3JlY2lwaWVudFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8Ym91bmNlX3F1ZXVlX2xpZmV0aW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxib3VuY2Vfc2VydmljZV9uYW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxib3VuY2Vfc2l6ZV9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8YnJva2VuX3Nhc2xfYXV0aF9jbGllbnRzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxjYW5vbmljYWxfbWFwc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8Y2xlYW51cF9zZXJ2aWNlX25hbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGNvbW1hbmRfZGlyZWN0b3J5XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxjb21tYW5kX2V4cGFuc2lvbl9maWx0ZXJcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGNvbW1hbmRfdGltZV9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8Y29uZmlnX2RpcmVjdG9yeVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8Y29udGVudF9maWx0ZXJcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRhZW1vbl9kaXJlY3RvcnlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRhZW1vbl90aW1lb3V0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkZWJ1Z19wZWVyX2xldmVsXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkZWJ1Z19wZWVyX2xpc3RcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRlZmF1bHRfZGF0YWJhc2VfdHlwZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZGVmYXVsdF9kZWxpdmVyeV9zbG90X2Nvc3RcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRlZmF1bHRfZGVsaXZlcnlfc2xvdF9kaXNjb3VudFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZGVmYXVsdF9kZWxpdmVyeV9zbG90X2xvYW5cPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRlZmF1bHRfZGVzdGluYXRpb25fY29uY3VycmVuY3lfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRlZmF1bHRfZGVzdGluYXRpb25fcmVjaXBpZW50X2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkZWZhdWx0X2V4dHJhX3JlY2lwaWVudF9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZGVmYXVsdF9taW5pbXVtX2RlbGl2ZXJ5X3Nsb3RzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkZWZhdWx0X3ByaXZzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkZWZhdWx0X3Byb2Nlc3NfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRlZmF1bHRfcmJsX3JlcGx5XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkZWZhdWx0X3JlY2lwaWVudF9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZGVmYXVsdF90cmFuc3BvcnRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRlZmF1bHRfdmVycF9kZWxpbWl0ZXJzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkZWZlcl9jb2RlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkZWZlcl9zZXJ2aWNlX25hbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRlZmVyX3RyYW5zcG9ydHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRlbGF5X25vdGljZV9yZWNpcGllbnRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRlbGF5X3dhcm5pbmdfdGltZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZGVsaXZlcl9sb2NrX2F0dGVtcHRzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkZWxpdmVyX2xvY2tfZGVsYXlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRpc2FibGVfZG5zX2xvb2t1cHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRpc2FibGVfbWltZV9pbnB1dF9wcm9jZXNzaW5nXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkaXNhYmxlX21pbWVfb3V0cHV0X2NvbnZlcnNpb25cPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRpc2FibGVfdmVycF9ib3VuY2VzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkaXNhYmxlX3ZyZnlfY29tbWFuZFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZG9udF9yZW1vdmVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGRvdWJsZV9ib3VuY2Vfc2VuZGVyXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxkdXBsaWNhdGVfZmlsdGVyX2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxlbXB0eV9hZGRyZXNzX3JlY2lwaWVudFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZW5hYmxlX2Vycm9yc190b1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZW5hYmxlX29yaWdpbmFsX3JlY2lwaWVudFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZXJyb3Jfbm90aWNlX3JlY2lwaWVudFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZXJyb3Jfc2VydmljZV9uYW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxleHBhbmRfb3duZXJfYWxpYXNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGV4cG9ydF9lbnZpcm9ubWVudFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZmFsbGJhY2tfcmVsYXlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGZhbGxiYWNrX3RyYW5zcG9ydFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8ZmFzdF9mbHVzaF9kb21haW5zXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxmYXN0X2ZsdXNoX3B1cmdlX3RpbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGZhc3RfZmx1c2hfcmVmcmVzaF90aW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxmYXVsdF9pbmplY3Rpb25fY29kZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8Zmx1c2hfc2VydmljZV9uYW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxmb3JrX2F0dGVtcHRzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxmb3JrX2RlbGF5XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxmb3J3YXJkX2V4cGFuc2lvbl9maWx0ZXJcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGZvcndhcmRfcGF0aFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8aGFzaF9xdWV1ZV9kZXB0aFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8aGFzaF9xdWV1ZV9uYW1lc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8aGVhZGVyX2FkZHJlc3NfdG9rZW5fbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGhlYWRlcl9jaGVja3NcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGhlYWRlcl9zaXplX2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxoZWxwZnVsX3dhcm5pbmdzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxob21lX21haWxib3hcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGhvcGNvdW50X2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxodG1sX2RpcmVjdG9yeVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8aWdub3JlX214X2xvb2t1cF9lcnJvclw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8aW1wb3J0X2Vudmlyb25tZW50XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxpbl9mbG93X2RlbGF5XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxpbmV0X2ludGVyZmFjZXNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGluaXRpYWxfZGVzdGluYXRpb25fY29uY3VycmVuY3lcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGludmFsaWRfaG9zdG5hbWVfcmVqZWN0X2NvZGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGlwY19pZGxlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxpcGNfdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8aXBjX3R0bFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bGluZV9sZW5ndGhfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfY2FjaGVfY29ubmVjdGlvblw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bG10cF9jb25uZWN0X3RpbWVvdXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfZGF0YV9kb25lX3RpbWVvdXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfZGF0YV9pbml0X3RpbWVvdXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfZGF0YV94ZmVyX3RpbWVvdXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfZGVzdGluYXRpb25fY29uY3VycmVuY3lfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfZGVzdGluYXRpb25fcmVjaXBpZW50X2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxsbXRwX2xobG9fdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bG10cF9tYWlsX3RpbWVvdXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfcXVpdF90aW1lb3V0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxsbXRwX3JjcHRfdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bG10cF9yc2V0X3RpbWVvdXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfc2FzbF9hdXRoX2VuYWJsZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bG10cF9zYXNsX3Bhc3N3b3JkX21hcHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfc2FzbF9zZWN1cml0eV9vcHRpb25zXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxsbXRwX3NlbmRfeGZvcndhcmRfY29tbWFuZFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bG10cF9za2lwX3F1aXRfcmVzcG9uc2VcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfdGNwX3BvcnRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxtdHBfeGZvcndhcmRfdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bG9jYWxfY29tbWFuZF9zaGVsbFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bG9jYWxfZGVzdGluYXRpb25fY29uY3VycmVuY3lfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxvY2FsX2Rlc3RpbmF0aW9uX3JlY2lwaWVudF9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bG9jYWxfcmVjaXBpZW50X21hcHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPGxvY2FsX3RyYW5zcG9ydFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bHVzZXJfcmVsYXlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG1haWxfbmFtZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWFpbF9vd25lclw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWFpbF9yZWxlYXNlX2RhdGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG1haWxfc3Bvb2xfZGlyZWN0b3J5XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxtYWlsX3ZlcnNpb25cPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG1haWxib3hfY29tbWFuZFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWFpbGJveF9jb21tYW5kX21hcHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG1haWxib3hfZGVsaXZlcnlfbG9ja1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWFpbGJveF9zaXplX2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxtYWlsYm94X3RyYW5zcG9ydFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWFpbHFfcGF0aFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWFucGFnZV9kaXJlY3RvcnlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG1hcHNfcmJsX2RvbWFpbnNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG1hcHNfcmJsX3JlamVjdF9jb2RlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxtYXNxdWVyYWRlX2NsYXNzZXNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG1hc3F1ZXJhZGVfZG9tYWluc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWFzcXVlcmFkZV9leGNlcHRpb25zXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxtYXhfaWRsZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWF4X3VzZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWF4aW1hbF9iYWNrb2ZmX3RpbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG1heGltYWxfcXVldWVfbGlmZXRpbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG1lc3NhZ2Vfc2l6ZV9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWltZV9ib3VuZGFyeV9sZW5ndGhfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG1pbWVfaGVhZGVyX2NoZWNrc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bWltZV9uZXN0aW5nX2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxtaW5pbWFsX2JhY2tvZmZfdGltZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bXVsdGlfcmVjaXBpZW50X2JvdW5jZV9yZWplY3RfY29kZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bXlkZXN0aW5hdGlvblw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bXlkb21haW5cPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG15aG9zdG5hbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG15bmV0d29ya3NcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG15bmV0d29ya3Nfc3R5bGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG15b3JpZ2luXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxuZXN0ZWRfaGVhZGVyX2NoZWNrc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bmV3YWxpYXNlc19wYXRoXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxub25fZnFkbl9yZWplY3RfY29kZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8bm90aWZ5X2NsYXNzZXNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPG93bmVyX3JlcXVlc3Rfc3BlY2lhbFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cGFyZW50X2RvbWFpbl9tYXRjaGVzX3N1YmRvbWFpbnNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHBlcm1pdF9teF9iYWNrdXBfbmV0d29ya3NcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHBpY2t1cF9zZXJ2aWNlX25hbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHByZXBlbmRfZGVsaXZlcmVkX2hlYWRlclw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cHJvY2Vzc19pZF9kaXJlY3RvcnlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHByb3BhZ2F0ZV91bm1hdGNoZWRfZXh0ZW5zaW9uc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cHJveHlfaW50ZXJmYWNlc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cHJveHlfcmVhZF9tYXBzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxxbWdyX2Nsb2dfd2Fybl90aW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxxbWdyX2Z1ZGdlX2ZhY3Rvclw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cW1ncl9tZXNzYWdlX2FjdGl2ZV9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cW1ncl9tZXNzYWdlX3JlY2lwaWVudF9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cW1ncl9tZXNzYWdlX3JlY2lwaWVudF9taW5pbXVtXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxxbXFwZF9hdXRob3JpemVkX2NsaWVudHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHFtcXBkX2Vycm9yX2RlbGF5XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxxbXFwZF90aW1lb3V0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxxdWV1ZV9kaXJlY3RvcnlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHF1ZXVlX2ZpbGVfYXR0cmlidXRlX2NvdW50X2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxxdWV1ZV9taW5mcmVlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxxdWV1ZV9ydW5fZGVsYXlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHF1ZXVlX3NlcnZpY2VfbmFtZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cmJsX3JlcGx5X21hcHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHJlYWRtZV9kaXJlY3RvcnlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHJlY2VpdmVfb3ZlcnJpZGVfb3B0aW9uc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cmVjaXBpZW50X2JjY19tYXBzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxyZWNpcGllbnRfY2Fub25pY2FsX21hcHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHJlY2lwaWVudF9kZWxpbWl0ZXJcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHJlamVjdF9jb2RlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxyZWxheV9jbGllbnRjZXJ0c1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cmVsYXlfZGVzdGluYXRpb25fY29uY3VycmVuY3lfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHJlbGF5X2Rlc3RpbmF0aW9uX3JlY2lwaWVudF9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cmVsYXlfZG9tYWluc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cmVsYXlfZG9tYWluc19yZWplY3RfY29kZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cmVsYXlfcmVjaXBpZW50X21hcHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHJlbGF5X3RyYW5zcG9ydFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cmVsYXlob3N0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxyZWxvY2F0ZWRfbWFwc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cmVxdWlyZV9ob21lX2RpcmVjdG9yeVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8cmVzb2x2ZV9kZXF1b3RlZF9hZGRyZXNzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxyZXNvbHZlX251bGxfZG9tYWluXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxyZXdyaXRlX3NlcnZpY2VfbmFtZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c2FtcGxlX2RpcmVjdG9yeVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c2VuZGVyX2Jhc2VkX3JvdXRpbmdcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNlbmRlcl9iY2NfbWFwc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c2VuZGVyX2Nhbm9uaWNhbF9tYXBzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzZW5kbWFpbF9wYXRoXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzZXJ2aWNlX3Rocm90dGxlX3RpbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNldGdpZF9ncm91cFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c2hvd191c2VyX3Vua25vd25fdGFibGVfbmFtZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c2hvd3Ffc2VydmljZV9uYW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX2Fsd2F5c19zZW5kX2VobG9cPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfYmluZF9hZGRyZXNzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX2Nvbm5lY3RfdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9kYXRhX2RvbmVfdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9kYXRhX2luaXRfdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9kYXRhX3hmZXJfdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9kZWZlcl9pZl9ub19teF9hZGRyZXNzX2ZvdW5kXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX2Rlc3RpbmF0aW9uX2NvbmN1cnJlbmN5X2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX2Rlc3RpbmF0aW9uX3JlY2lwaWVudF9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9lbmZvcmNlX3Rsc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9oZWxvX25hbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfaGVsb190aW1lb3V0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX2hvc3RfbG9va3VwXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX2xpbmVfbGVuZ3RoX2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX21haWxfdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9teF9hZGRyZXNzX2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX214X3Nlc3Npb25fbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfbmV2ZXJfc2VuZF9laGxvXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX3BpeF93b3JrYXJvdW5kX2RlbGF5X3RpbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfcGl4X3dvcmthcm91bmRfdGhyZXNob2xkX3RpbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfcXVpdF90aW1lb3V0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX3F1b3RlX3JmYzgyMV9lbnZlbG9wZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9yYW5kb21pemVfYWRkcmVzc2VzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX3JjcHRfdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9yc2V0X3RpbWVvdXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfc2FzbF9hdXRoX2VuYWJsZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9zYXNsX3Bhc3N3b3JkX21hcHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfc2FzbF9zZWN1cml0eV9vcHRpb25zXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX3Nhc2xfdGxzX3NlY3VyaXR5X29wdGlvbnNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfc2FzbF90bHNfdmVyaWZpZWRfc2VjdXJpdHlfb3B0aW9uc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF9zZW5kX3hmb3J3YXJkX2NvbW1hbmRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfc2tpcF81eHhfZ3JlZXRpbmdcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfc2tpcF9xdWl0X3Jlc3BvbnNlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX3N0YXJ0dGxzX3RpbWVvdXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfdGxzX0NBZmlsZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF90bHNfQ0FwYXRoXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX3Rsc19jZXJ0X2ZpbGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfdGxzX2NpcGhlcmxpc3RcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfdGxzX2RjZXJ0X2ZpbGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfdGxzX2RrZXlfZmlsZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF90bHNfZW5mb3JjZV9wZWVybmFtZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF90bHNfa2V5X2ZpbGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfdGxzX2xvZ2xldmVsXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX3Rsc19ub3RlX3N0YXJ0dGxzX29mZmVyXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX3Rsc19wZXJfc2l0ZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF90bHNfc2NlcnRfdmVyaWZ5ZGVwdGhcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfdGxzX3Nlc3Npb25fY2FjaGVfZGF0YWJhc2VcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBfdGxzX3Nlc3Npb25fY2FjaGVfdGltZW91dFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cF91c2VfdGxzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwX3hmb3J3YXJkX3RpbWVvdXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX2F1dGhvcml6ZWRfdmVycF9jbGllbnRzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9hdXRob3JpemVkX3hjbGllbnRfaG9zdHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX2F1dGhvcml6ZWRfeGZvcndhcmRfaG9zdHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX2Jhbm5lclw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfY2xpZW50X2Nvbm5lY3Rpb25fY291bnRfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX2NsaWVudF9jb25uZWN0aW9uX2xpbWl0X2V4Y2VwdGlvbnNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX2NsaWVudF9jb25uZWN0aW9uX3JhdGVfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX2NsaWVudF9yZXN0cmljdGlvbnNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX2RhdGFfcmVzdHJpY3Rpb25zXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9kZWxheV9yZWplY3RcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX2VuZm9yY2VfdGxzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9lcnJvcl9zbGVlcF90aW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9ldHJuX3Jlc3RyaWN0aW9uc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfZXhwYW5zaW9uX2ZpbHRlclw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfaGFyZF9lcnJvcl9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfaGVsb19yZXF1aXJlZFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfaGVsb19yZXN0cmljdGlvbnNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX2hpc3RvcnlfZmx1c2hfdGhyZXNob2xkXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9qdW5rX2NvbW1hbmRfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX25vb3BfY29tbWFuZHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX251bGxfYWNjZXNzX2xvb2t1cF9rZXlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3BvbGljeV9zZXJ2aWNlX21heF9pZGxlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9wb2xpY3lfc2VydmljZV9tYXhfdHRsXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9wb2xpY3lfc2VydmljZV90aW1lb3V0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9wcm94eV9laGxvXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9wcm94eV9maWx0ZXJcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3Byb3h5X3RpbWVvdXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3JlY2lwaWVudF9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfcmVjaXBpZW50X292ZXJzaG9vdF9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfcmVjaXBpZW50X3Jlc3RyaWN0aW9uc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfcmVqZWN0X3VubGlzdGVkX3JlY2lwaWVudFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfcmVqZWN0X3VubGlzdGVkX3NlbmRlclw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfcmVzdHJpY3Rpb25fY2xhc3Nlc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfc2FzbF9hcHBsaWNhdGlvbl9uYW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9zYXNsX2F1dGhfZW5hYmxlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9zYXNsX2V4Y2VwdGlvbnNfbmV0d29ya3NcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3Nhc2xfbG9jYWxfZG9tYWluXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9zYXNsX3NlY3VyaXR5X29wdGlvbnNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3Nhc2xfdGxzX3NlY3VyaXR5X29wdGlvbnNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3NlbmRlcl9sb2dpbl9tYXBzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9zZW5kZXJfcmVzdHJpY3Rpb25zXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9zb2Z0X2Vycm9yX2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF9zdGFydHRsc190aW1lb3V0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90aW1lb3V0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90bHNfQ0FmaWxlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90bHNfQ0FwYXRoXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90bHNfYXNrX2NjZXJ0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90bHNfYXV0aF9vbmx5XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90bHNfY2NlcnRfdmVyaWZ5ZGVwdGhcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3Rsc19jZXJ0X2ZpbGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3Rsc19jaXBoZXJsaXN0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90bHNfZGNlcnRfZmlsZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfdGxzX2RoMTAyNF9wYXJhbV9maWxlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90bHNfZGg1MTJfcGFyYW1fZmlsZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfdGxzX2RrZXlfZmlsZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c210cGRfdGxzX2tleV9maWxlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90bHNfbG9nbGV2ZWxcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3Rsc19yZWNlaXZlZF9oZWFkZXJcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3Rsc19yZXFfY2NlcnRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3Rsc19zZXNzaW9uX2NhY2hlX2RhdGFiYXNlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90bHNfc2Vzc2lvbl9jYWNoZV90aW1lb3V0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzbXRwZF90bHNfd3JhcHBlcm1vZGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNtdHBkX3VzZV90bHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHNvZnRfYm91bmNlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzdGFsZV9sb2NrX3RpbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHN0cmljdF83Yml0X2hlYWRlcnNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHN0cmljdF84Yml0bWltZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c3RyaWN0XzhiaXRtaW1lX2JvZHlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHN0cmljdF9taW1lX2VuY29kaW5nX2RvbWFpblw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8c3RyaWN0X3JmYzgyMV9lbnZlbG9wZXNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHN1bl9tYWlsdG9vbF9jb21wYXRpYmlsaXR5XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzd2FwX2JhbmdwYXRoXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDxzeXNsb2dfZmFjaWxpdHlcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHN5c2xvZ19uYW1lXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx0bHNfZGFlbW9uX3JhbmRvbV9ieXRlc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dGxzX2RhZW1vbl9yYW5kb21fc291cmNlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx0bHNfcmFuZG9tX2J5dGVzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx0bHNfcmFuZG9tX2V4Y2hhbmdlX25hbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHRsc19yYW5kb21fcHJuZ191cGRhdGVfcGVyaW9kXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx0bHNfcmFuZG9tX3Jlc2VlZF9wZXJpb2RcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHRsc19yYW5kb21fc291cmNlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx0cmFjZV9zZXJ2aWNlX25hbWVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHRyYW5zcG9ydF9tYXBzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx0cmFuc3BvcnRfcmV0cnlfdGltZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dHJpZ2dlcl90aW1lb3V0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx1bmRpc2Nsb3NlZF9yZWNpcGllbnRzX2hlYWRlclw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dW5rbm93bl9hZGRyZXNzX3JlamVjdF9jb2RlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx1bmtub3duX2NsaWVudF9yZWplY3RfY29kZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dW5rbm93bl9ob3N0bmFtZV9yZWplY3RfY29kZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dW5rbm93bl9sb2NhbF9yZWNpcGllbnRfcmVqZWN0X2NvZGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHVua25vd25fcmVsYXlfcmVjaXBpZW50X3JlamVjdF9jb2RlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx1bmtub3duX3ZpcnR1YWxfYWxpYXNfcmVqZWN0X2NvZGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHVua25vd25fdmlydHVhbF9tYWlsYm94X3JlamVjdF9jb2RlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx1bnZlcmlmaWVkX3JlY2lwaWVudF9yZWplY3RfY29kZVw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dW52ZXJpZmllZF9zZW5kZXJfcmVqZWN0X2NvZGVcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHZlcnBfZGVsaW1pdGVyX2ZpbHRlclw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dmlydHVhbF9hbGlhc19kb21haW5zXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx2aXJ0dWFsX2FsaWFzX2V4cGFuc2lvbl9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dmlydHVhbF9hbGlhc19tYXBzXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx2aXJ0dWFsX2FsaWFzX3JlY3Vyc2lvbl9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dmlydHVhbF9kZXN0aW5hdGlvbl9jb25jdXJyZW5jeV9saW1pdFw+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dmlydHVhbF9kZXN0aW5hdGlvbl9yZWNpcGllbnRfbGltaXRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHZpcnR1YWxfZ2lkX21hcHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHZpcnR1YWxfbWFpbGJveF9iYXNlXD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx2aXJ0dWFsX21haWxib3hfZG9tYWluc1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dmlydHVhbF9tYWlsYm94X2xpbWl0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx2aXJ0dWFsX21haWxib3hfbG9ja1w+Igorc3ludGF4IG1hdGNoIHBmbWFpblJlZiAiJFw8dmlydHVhbF9tYWlsYm94X21hcHNcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHZpcnR1YWxfbWluaW11bV91aWRcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5SZWYgIiRcPHZpcnR1YWxfdHJhbnNwb3J0XD4iCitzeW50YXggbWF0Y2ggcGZtYWluUmVmICIkXDx2aXJ0dWFsX3VpZF9tYXBzXD4iCisKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkRpY3REQgloYXNoIGJ0cmVlIGRibQorc3ludGF4IGtleXdvcmQgcGZtYWluRGljdFJFCXJlZ2V4cCBwY3JlCitzeW50YXgga2V5d29yZCBwZm1haW5EaWN0RVhUCWxkYXAgZW52aXJvbiBuaXMgbmV0aW5mbworc3ludGF4IGtleXdvcmQgcGZtYWluUXVldWUJYWN0aXZlIGJvdW5jZSBjb3JydXB0IGRlZmVyIGRlZmVycmVkCitzeW50YXgga2V5d29yZCBwZm1haW5RdWV1ZQlmbHVzaCBpbmNvbWluZyBzYXZlZAorc3ludGF4IGtleXdvcmQgcGZtYWluVHJhbnNwb3J0CXNtdHAgbG10cCB1bml4IGxvY2FsIGVycm9yCitzeW50YXgga2V5d29yZCBwZm1haW5Mb2NrCWZjbnRsIGZsb2NrIGRvdGxvY2sKK3N5bnRheCBrZXl3b3JkIHBmbWFpbkFuc3dlcgl5ZXMgbm8KKworc3ludGF4IG1hdGNoIHBmbWFpbkNvbW1lbnQJIiMuKiQiCitzeW50YXggbWF0Y2ggcGZtYWluTnVtYmVyCSJcPFxkXCtcPiIKK3N5bnRheCBtYXRjaCBwZm1haW5UaW1lCQkiXDxcZFwrW2htc2RdXD4iCitzeW50YXggbWF0Y2ggcGZtYWluSVAJCSJcPFxkXHsxLDN9XC5cZFx7MSwzfVwuXGRcezEsM31cLlxkXHsxLDN9XD4iCitzeW50YXggbWF0Y2ggcGZtYWluVmFyaWFibGUJIlwkXHdcKyIgY29udGFpbnM9cGZtYWluUmVmICIscGZtYWluUmVmVExTCisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoInBmbWFpbl9zeW50YXhfaW5pdCIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgcGZtYWluX3N5bnRheF9pbml0ID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluayBwZm1haW5Db21tZW50CUNvbW1lbnQKKwlIaUxpbmsgcGZtYWluQ29uZglLZXl3b3JkCisJSGlMaW5rIHBmbWFpbk51bWJlcglOdW1iZXIKKwlIaUxpbmsgcGZtYWluVGltZQlOdW1iZXIKKwlIaUxpbmsgcGZtYWluSVAJCU51bWJlcgorCUhpTGluayBwZm1haW5EaWN0REIJVHlwZQorCUhpTGluayBwZm1haW5EaWN0UkUJVHlwZQorCUhpTGluayBwZm1haW5EaWN0RVhUCVR5cGUKKwlIaUxpbmsgcGZtYWluUXVldWUJQ29uc3RhbnQKKwlIaUxpbmsgcGZtYWluVHJhbnNwb3J0CUNvbnN0YW50CisJSGlMaW5rIHBmbWFpbkxvY2sJQ29uc3RhbnQKKwlIaUxpbmsgcGZtYWluQW5zd2VyCUNvbnN0YW50CisJSGlMaW5rIHBmbWFpblJlZglNYWNybworCisJIiBIaUxpbmsgcGZtYWluQ29uZlRMUwlTcGVjaWFsCisJIiBIaUxpbmsgcGZtYWluUmVmVExTCU1hY3JvCisKKwlIaUxpbmsgcGZtYWluVmFyaWFibGUJRXJyb3IKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJwZm1haW4iCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3BocC52aW0gYi9ydW50aW1lL3N5bnRheC9waHAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGEyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9waHAudmltCkBAIC0wLDAgKzEsNTEzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJcGhwIFBIUCAzLzQvNQorIiBNYWludGFpbmVyOglMdXR6IEV5bWVycyA8aXh0YWJAcG9semluLmNvbT4KKyIgVVJMOgkJaHR0cDovL3d3dy5pc3AuZGUvZGF0YS9waHAudmltCisiIExhc3QgQ2hhbmdlOgkyMDA0IEZlYiAwNAorIgorIiBPcHRpb25zCXBocF9zcWxfcXVlcnkgPSAxICBmb3IgU1FMIHN5bnRheCBoaWdobGlnaHRpbmcgaW5zaWRlIHN0cmluZ3MKKyIJCXBocF9odG1sSW5TdHJpbmdzID0gMSAgZm9yIEhUTUwgc3ludGF4IGhpZ2hsaWdodGluZyBpbnNpZGUgc3RyaW5ncworIgkJcGhwX2Jhc2VsaWIgPSAxICBmb3IgaGlnaGxpZ2h0aW5nIGJhc2VsaWIgZnVuY3Rpb25zCisiCQlwaHBfYXNwX3RhZ3MgPSAxICBmb3IgaGlnaGxpZ2h0aW5nIEFTUC1zdHlsZSBzaG9ydCB0YWdzCisiCQlwaHBfcGFyZW50X2Vycm9yX2Nsb3NlID0gMSAgZm9yIGhpZ2hsaWdodGluZyBwYXJlbnQgZXJyb3IgXSBvciApCisiCQlwaHBfcGFyZW50X2Vycm9yX29wZW4gPSAxICBmb3Igc2tpcHBpbmcgYW4gcGhwIGVuZCB0YWcsIGlmIHRoZXJlIGV4aXN0cyBhbiBvcGVuICggb3IgWyB3aXRob3V0IGEgY2xvc2luZyBvbmUKKyIJCXBocF9vbGRTdHlsZSA9IDEgIGZvciB1c2luZyBvbGQgY29sb3JzdHlsZQorIgkJcGhwX25vU2hvcnRUYWdzID0gMSAgZG9uJ3Qgc3luYyA8PyA/PiBhcyBwaHAKKyIJCXBocF9mb2xkaW5nID0gMSAgZm9yIGZvbGRpbmcgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCisiCQlwaHBfZm9sZGluZyA9IDIgIGZvciBmb2xkaW5nIGFsbCB7IH0gcmVnaW9ucworIgkJcGhwX3N5bmNfbWV0aG9kID0geAorIgkJCXg9LTEgdG8gc3luYyBieSBzZWFyY2ggKCBkZWZhdWx0ICkKKyIJCQl4PjAgdG8gc3luYyBhdCBsZWFzdCB4IGxpbmVzIGJhY2t3YXJkcworIgkJCXg9MCB0byBzeW5jIGZyb20gc3RhcnQKKworIiBOb3RlCisiIFNldHRpbmcgcGhwX2ZvbGRpbmc9MSB3aWxsIG1hdGNoIGEgY2xvc2luZyB9IGJ5IGNvbXBhcmluZyB0aGUgaW5kZW50CisiIGJlZm9yZSB0aGUgY2xhc3Mgb3IgZnVuY3Rpb24ga2V5d29yZCB3aXRoIHRoZSBpbmRlbnQgb2YgYSBtYXRjaGluZyB9LgorIiBTZXR0aW5nIHBocF9mb2xkaW5nPTIgd2lsbCBtYXRjaCBhbGwgb2YgcGFpcnMgb2Ygeyx9ICggc2VlIGtub3duCisiIGJ1Z3MgaWkgKQorCisiIEtub3duIGJ1Z3MKKyIgc2V0dGluZyAgcGhwX3BhcmVudF9lcnJvcl9jbG9zZSAgb24gIGFuZCAgcGhwX3BhcmVudF9lcnJvcl9vcGVuICBvZmYKKyIgaGFzIHRoZXNlIHR3byBsZWFrczoKKyIgIGkpIEFuIGNsb3NpbmcgKSBvciBdIGluc2lkZSBhIHN0cmluZyBtYXRjaCB0byB0aGUgbGFzdCBvcGVuICggb3IgWworIiAgICAgYmVmb3JlIHRoZSBzdHJpbmcsIHdoZW4gdGhlIHRoZSBjbG9zaW5nICkgb3IgXSBpcyBvbiB0aGUgc2FtZSBsaW5lCisiICAgICB3aGVyZSB0aGUgc3RyaW5nIHN0YXJ0ZWQuIEluIHRoaXMgY2FzZSBhIGZvbGxvd2luZyApIG9yIF0gYWZ0ZXIKKyIgICAgIHRoZSBzdHJpbmcgd291bGQgYmUgaGlnaGxpZ2h0ZWQgYXMgYW4gZXJyb3IsIHdoYXQgaXMgaW5jb3JyZWN0LgorIiBpaSkgU2FtZSBwcm9ibGVtIGlmIHlvdSBhcmUgc2V0dGluZyBwaHBfZm9sZGluZyA9IDIgd2l0aCBhIGNsb3NpbmcKKyIgICAgIH0gaW5zaWRlIGFuIHN0cmluZyBvbiB0aGUgZmlyc3QgbGluZSBvZiB0aGlzIHN0cmluZy4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitpZiAhZXhpc3RzKCJtYWluX3N5bnRheCIpCisgIGxldCBtYWluX3N5bnRheCA9ICdwaHAnCitlbmRpZgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHVubGV0ISBwaHBfZm9sZGluZworICBpZiBleGlzdHMoInBocF9zeW5jX21ldGhvZCIpICYmICFwaHBfc3luY19tZXRob2QKKyAgICBsZXQgcGhwX3N5bmNfbWV0aG9kPS0xCisgIGVuZGlmCisgIHNvIDxzZmlsZT46cDpoL2h0bWwudmltCitlbHNlCisgIHJ1bnRpbWUgc3ludGF4L2h0bWwudmltCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKK2VuZGlmCisKKyIgYWNjZXB0IG9sZCBvcHRpb25zCitpZiAhZXhpc3RzKCJwaHBfc3luY19tZXRob2QiKQorICBpZiBleGlzdHMoInBocF9taW5saW5lcyIpCisgICAgbGV0IHBocF9zeW5jX21ldGhvZD1waHBfbWlubGluZXMKKyAgZWxzZQorICAgIGxldCBwaHBfc3luY19tZXRob2Q9LTEKKyAgZW5kaWYKK2VuZGlmCisKK2lmIGV4aXN0cygicGhwX3BhcmVudEVycm9yIikgJiYgIWV4aXN0cygicGhwX3BhcmVudF9lcnJvcl9vcGVuIikgJiYgIWV4aXN0cygicGhwX3BhcmVudF9lcnJvcl9jbG9zZSIpCisgIGxldCBwaHBfcGFyZW50X2Vycm9yX2Nsb3NlPTEKKyAgbGV0IHBocF9wYXJlbnRfZXJyb3Jfb3Blbj0xCitlbmRpZgorCitzeW4gY2x1c3RlciBodG1sUHJlcHJvYyBhZGQ9cGhwUmVnaW9uLHBocFJlZ2lvbkFzcCxwaHBSZWdpb25TYworCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBpbmNsdWRlIEBzcWxUb3AgPHNmaWxlPjpwOmgvc3FsLnZpbQorZWxzZQorICBzeW4gaW5jbHVkZSBAc3FsVG9wIHN5bnRheC9zcWwudmltCitlbmRpZgorc3luIHN5bmMgY2xlYXIKK3VubGV0IGI6Y3VycmVudF9zeW50YXgKK3N5biBjbHVzdGVyIHNxbFRvcCByZW1vdmU9c3FsU3RyaW5nLHNxbENvbW1lbnQKK2lmIGV4aXN0cyggInBocF9zcWxfcXVlcnkiKQorICBzeW4gY2x1c3RlciBwaHBBZGRTdHJpbmdzIGNvbnRhaW5zPUBzcWxUb3AKK2VuZGlmCisKK2lmIGV4aXN0cyggInBocF9odG1sSW5TdHJpbmdzIikKKyAgc3luIGNsdXN0ZXIgcGhwQWRkU3RyaW5ncyBhZGQ9QGh0bWxUb3AKK2VuZGlmCisKK3N5biBjYXNlIG1hdGNoCisKKyIgRW52IFZhcmlhYmxlcworc3luIGtleXdvcmQJcGhwRW52VmFyCUdBVEVXQVlfSU5URVJGQUNFIFNFUlZFUl9OQU1FIFNFUlZFUl9TT0ZUV0FSRSBTRVJWRVJfUFJPVE9DT0wgUkVRVUVTVF9NRVRIT0QgUVVFUllfU1RSSU5HIERPQ1VNRU5UX1JPT1QgSFRUUF9BQ0NFUFQgSFRUUF9BQ0NFUFRfQ0hBUlNFVCBIVFRQX0VOQ09ESU5HIEhUVFBfQUNDRVBUX0xBTkdVQUdFIEhUVFBfQ09OTkVDVElPTiBIVFRQX0hPU1QgSFRUUF9SRUZFUkVSIEhUVFBfVVNFUl9BR0VOVCBSRU1PVEVfQUREUiBSRU1PVEVfUE9SVCBTQ1JJUFRfRklMRU5BTUUgU0VSVkVSX0FETUlOIFNFUlZFUl9QT1JUIFNFUlZFUl9TSUdOQVRVUkUgUEFUSF9UUkFOU0xBVEVEIFNDUklQVF9OQU1FIFJFUVVFU1RfVVJJCWNvbnRhaW5lZAorCisiIEludGVybmFsIFZhcmlhYmxlcworc3luIGtleXdvcmQJcGhwSW50VmFyCUdMT0JBTFMgUEhQX0VSUk1TRyBQSFBfU0VMRiBIVFRQX0dFVF9WQVJTIEhUVFBfUE9TVF9WQVJTIEhUVFBfQ09PS0lFX1ZBUlMgSFRUUF9QT1NUX0ZJTEVTIEhUVFBfRU5WX1ZBUlMgSFRUUF9TRVJWRVJfVkFSUyBIVFRQX1NFU1NJT05fVkFSUyBIVFRQX1JBV19QT1NUX0RBVEEgSFRUUF9TVEFURV9WQVJTIF9HRVQgX1BPU1QgX0NPT0tJRSBfRklMRVMgX1NFUlZFUiBfRU5WIF9TRVJWRVIgX1JFUVVFU1QgX1NFU1NJT04JY29udGFpbmVkCisKKyIgQ29uc3RhbnRzCitzeW4ga2V5d29yZAlwaHBDb3JlQ29uc3RhbnQJUEhQX1ZFUlNJT04gUEhQX09TIERFRkFVTFRfSU5DTFVERV9QQVRIIFBFQVJfSU5TVEFMTF9ESVIgUEVBUl9FWFRFTlNJT05fRElSIFBIUF9FWFRFTlNJT05fRElSIFBIUF9CSU5ESVIgUEhQX0xJQkRJUiBQSFBfREFUQURJUiBQSFBfU1lTQ09ORkRJUiBQSFBfTE9DQUxTVEFURURJUiBQSFBfQ09ORklHX0ZJTEVfUEFUSCBQSFBfT1VUUFVUX0hBTkRMRVJfU1RBUlQgUEhQX09VVFBVVF9IQU5ETEVSX0NPTlQgUEhQX09VVFBVVF9IQU5ETEVSX0VORCBFX0VSUk9SIEVfV0FSTklORyBFX1BBUlNFIEVfTk9USUNFIEVfQ09SRV9FUlJPUiBFX0NPUkVfV0FSTklORyBFX0NPTVBJTEVfRVJST1IgRV9DT01QSUxFX1dBUk5JTkcgRV9VU0VSX0VSUk9SIEVfVVNFUl9XQVJOSU5HIEVfVVNFUl9OT1RJQ0UgRV9BTEwJY29udGFpbmVkCisKK3N5biBjYXNlIGlnbm9yZQorCitzeW4ga2V5d29yZAlwaHBDb25zdGFudAkgX19MSU5FX18gX19GSUxFX18gX19GVU5DVElPTl9fIF9fTUVUSE9EX18gX19DTEFTU19fCWNvbnRhaW5lZAorCisKKyIgRnVuY3Rpb24gYW5kIE1ldGhvZHMgcmlwcGVkIGZyb20gcGhwX21hbnVhbF9kZS50YXIuZ3ogSmFuIDIwMDMKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlhcGFjaGVfY2hpbGRfdGVybWluYXRlIGFwYWNoZV9nZXRfbW9kdWxlcyBhcGFjaGVfZ2V0X3ZlcnNpb24gYXBhY2hlX2dldGVudiBhcGFjaGVfbG9va3VwX3VyaSBhcGFjaGVfbm90ZSBhcGFjaGVfcmVxdWVzdF9oZWFkZXJzIGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzIGFwYWNoZV9zZXRlbnYgYXNjaWkyZWJjZGljIGViY2RpYzJhc2NpaSBnZXRhbGxoZWFkZXJzIHZpcnR1YWwJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJYXJyYXlfY2hhbmdlX2tleV9jYXNlIGFycmF5X2NodW5rIGFycmF5X2NvbWJpbmUgYXJyYXlfY291bnRfdmFsdWVzIGFycmF5X2RpZmZfYXNzb2MgYXJyYXlfZGlmZl91YXNzb2MgYXJyYXlfZGlmZiBhcnJheV9maWxsIGFycmF5X2ZpbHRlciBhcnJheV9mbGlwIGFycmF5X2ludGVyc2VjdF9hc3NvYyBhcnJheV9pbnRlcnNlY3QgYXJyYXlfa2V5X2V4aXN0cyBhcnJheV9rZXlzIGFycmF5X21hcCBhcnJheV9tZXJnZV9yZWN1cnNpdmUgYXJyYXlfbWVyZ2UgYXJyYXlfbXVsdGlzb3J0IGFycmF5X3BhZCBhcnJheV9wb3AgYXJyYXlfcHVzaCBhcnJheV9yYW5kIGFycmF5X3JlZHVjZSBhcnJheV9yZXZlcnNlIGFycmF5X3NlYXJjaCBhcnJheV9zaGlmdCBhcnJheV9zbGljZSBhcnJheV9zcGxpY2UgYXJyYXlfc3VtIGFycmF5X3VkaWZmX2Fzc29jIGFycmF5X3VkaWZmX3Vhc3NvYyBhcnJheV91ZGlmZiBhcnJheV91bmlxdWUgYXJyYXlfdW5zaGlmdCBhcnJheV92YWx1ZXMgYXJyYXlfd2FsayBhcnJheSBhcnNvcnQgYXNvcnQgY29tcGFjdCBjb3VudCBjdXJyZW50IGVhY2ggZW5kIGV4dHJhY3QgaW5fYXJyYXkga2V5IGtyc29ydCBrc29ydCBsaXN0IG5hdGNhc2Vzb3J0IG5hdHNvcnQgbmV4dCBwb3MgcHJldiByYW5nZSByZXNldCByc29ydCBzaHVmZmxlIHNpemVvZiBzb3J0IHVhc29ydCB1a3NvcnQgdXNvcnQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJYXNwZWxsX2NoZWNrIGFzcGVsbF9uZXcgYXNwZWxsX3N1Z2dlc3QJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJYmNhZGQgYmNjb21wIGJjZGl2IGJjbW9kIGJjbXVsIGJjcG93IGJjcG93bW9kIGJjc2NhbGUgYmNzcXJ0IGJjc3ViCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWJ6Y2xvc2UgYnpjb21wcmVzcyBiemRlY29tcHJlc3MgYnplcnJubyBiemVycm9yIGJ6ZXJyc3RyIGJ6Zmx1c2ggYnpvcGVuIGJ6cmVhZCBiendyaXRlCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWNhbF9kYXlzX2luX21vbnRoIGNhbF9mcm9tX2pkIGNhbF9pbmZvIGNhbF90b19qZCBlYXN0ZXJfZGF0ZSBlYXN0ZXJfZGF5cyBmcmVuY2h0b2pkIGdyZWdvcmlhbnRvamQgamRkYXlvZndlZWsgamRtb250aG5hbWUgamR0b2ZyZW5jaCBqZHRvZ3JlZ29yaWFuIGpkdG9qZXdpc2ggamR0b2p1bGlhbiBqZHRvdW5peCBqZXdpc2h0b2pkIGp1bGlhbnRvamQgdW5peHRvamQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJY2N2c19hZGQgY2N2c19hdXRoIGNjdnNfY29tbWFuZCBjY3ZzX2NvdW50IGNjdnNfZGVsZXRlIGNjdnNfZG9uZSBjY3ZzX2luaXQgY2N2c19sb29rdXAgY2N2c19uZXcgY2N2c19yZXBvcnQgY2N2c19yZXR1cm4gY2N2c19yZXZlcnNlIGNjdnNfc2FsZSBjY3ZzX3N0YXR1cyBjY3ZzX3RleHR2YWx1ZSBjY3ZzX3ZvaWQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJY2FsbF91c2VyX21ldGhvZF9hcnJheSBjYWxsX3VzZXJfbWV0aG9kIGNsYXNzX2V4aXN0cyBnZXRfY2xhc3NfbWV0aG9kcyBnZXRfY2xhc3NfdmFycyBnZXRfY2xhc3MgZ2V0X2RlY2xhcmVkX2NsYXNzZXMgZ2V0X29iamVjdF92YXJzIGdldF9wYXJlbnRfY2xhc3MgaXNfYSBpc19zdWJjbGFzc19vZiBtZXRob2RfZXhpc3RzCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWNvbSBWQVJJQU5UIGNvbV9hZGRyZWYgY29tX2dldCBjb21faW52b2tlIGNvbV9pc2VudW0gY29tX2xvYWRfdHlwZWxpYiBjb21fbG9hZCBjb21fcHJvcGdldCBjb21fcHJvcHB1dCBjb21fcHJvcHNldCBjb21fcmVsZWFzZSBjb21fc2V0CWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWNwZGZfYWRkX2Fubm90YXRpb24gY3BkZl9hZGRfb3V0bGluZSBjcGRmX2FyYyBjcGRmX2JlZ2luX3RleHQgY3BkZl9jaXJjbGUgY3BkZl9jbGlwIGNwZGZfY2xvc2UgY3BkZl9jbG9zZXBhdGhfZmlsbF9zdHJva2UgY3BkZl9jbG9zZXBhdGhfc3Ryb2tlIGNwZGZfY2xvc2VwYXRoIGNwZGZfY29udGludWVfdGV4dCBjcGRmX2N1cnZldG8gY3BkZl9lbmRfdGV4dCBjcGRmX2ZpbGxfc3Ryb2tlIGNwZGZfZmlsbCBjcGRmX2ZpbmFsaXplX3BhZ2UgY3BkZl9maW5hbGl6ZSBjcGRmX2dsb2JhbF9zZXRfZG9jdW1lbnRfbGltaXRzIGNwZGZfaW1wb3J0X2pwZWcgY3BkZl9saW5ldG8gY3BkZl9tb3ZldG8gY3BkZl9uZXdwYXRoIGNwZGZfb3BlbiBjcGRmX291dHB1dF9idWZmZXIgY3BkZl9wYWdlX2luaXQgY3BkZl9wbGFjZV9pbmxpbmVfaW1hZ2UgY3BkZl9yZWN0IGNwZGZfcmVzdG9yZSBjcGRmX3JsaW5ldG8gY3BkZl9ybW92ZXRvIGNwZGZfcm90YXRlX3RleHQgY3BkZl9yb3RhdGUgY3BkZl9zYXZlX3RvX2ZpbGUgY3BkZl9zYXZlIGNwZGZfc2NhbGUgY3BkZl9zZXRfYWN0aW9uX3VybCBjcGRmX3NldF9jaGFyX3NwYWNpbmcgY3BkZl9zZXRfY3JlYXRvciBjcGRmX3NldF9jdXJyZW50X3BhZ2UgY3BkZl9zZXRfZm9udF9kaXJlY3RvcmllcyBjcGRmX3NldF9mb250X21hcF9maWxlIGNwZGZfc2V0X2ZvbnQgY3BkZl9zZXRfaG9yaXpfc2NhbGluZyBjcGRmX3NldF9rZXl3b3JkcyBjcGRmX3NldF9sZWFkaW5nIGNwZGZfc2V0X3BhZ2VfYW5pbWF0aW9uIGNwZGZfc2V0X3N1YmplY3QgY3BkZl9zZXRfdGV4dF9tYXRyaXggY3BkZl9zZXRfdGV4dF9wb3MgY3BkZl9zZXRfdGV4dF9yZW5kZXJpbmcgY3BkZl9zZXRfdGV4dF9yaXNlIGNwZGZfc2V0X3RpdGxlIGNwZGZfc2V0X3ZpZXdlcl9wcmVmZXJlbmNlcyBjcGRmX3NldF93b3JkX3NwYWNpbmcgY3BkZl9zZXRkYXNoIGNwZGZfc2V0ZmxhdCBjcGRmX3NldGdyYXlfZmlsbCBjcGRmX3NldGdyYXlfc3Ryb2tlIGNwZGZfc2V0Z3JheSBjcGRmX3NldGxpbmVjYXAgY3BkZl9zZXRsaW5lam9pbiBjcGRmX3NldGxpbmV3aWR0aCBjcGRmX3NldG1pdGVybGltaXQgY3BkZl9zZXRyZ2Jjb2xvcl9maWxsIGNwZGZfc2V0cmdiY29sb3Jfc3Ryb2tlIGNwZGZfc2V0cmdiY29sb3IgY3BkZl9zaG93X3h5IGNwZGZfc2hvdyBjcGRmX3N0cmluZ3dpZHRoIGNwZGZfc3Ryb2tlIGNwZGZfdGV4dCBjcGRmX3RyYW5zbGF0ZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwljcmFja19jaGVjayBjcmFja19jbG9zZWRpY3QgY3JhY2tfZ2V0bGFzdG1lc3NhZ2UgY3JhY2tfb3BlbmRpY3QJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJY3R5cGVfYWxudW0gY3R5cGVfYWxwaGEgY3R5cGVfY250cmwgY3R5cGVfZGlnaXQgY3R5cGVfZ3JhcGggY3R5cGVfbG93ZXIgY3R5cGVfcHJpbnQgY3R5cGVfcHVuY3QgY3R5cGVfc3BhY2UgY3R5cGVfdXBwZXIgY3R5cGVfeGRpZ2l0CWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWN1cmxfY2xvc2UgY3VybF9lcnJubyBjdXJsX2Vycm9yIGN1cmxfZXhlYyBjdXJsX2dldGluZm8gY3VybF9pbml0IGN1cmxfbXVsdGlfYWRkX2hhbmRsZSBjdXJsX211bHRpX2Nsb3NlIGN1cmxfbXVsdGlfZXhlYyBjdXJsX211bHRpX2dldGNvbnRlbnQgY3VybF9tdWx0aV9pbmZvX3JlYWQgY3VybF9tdWx0aV9pbml0IGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSBjdXJsX211bHRpX3NlbGVjdCBjdXJsX3NldG9wdCBjdXJsX3ZlcnNpb24JY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJY3liZXJjYXNoX2Jhc2U2NF9kZWNvZGUgY3liZXJjYXNoX2Jhc2U2NF9lbmNvZGUgY3liZXJjYXNoX2RlY3IgY3liZXJjYXNoX2VuY3IJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJY3lydXNfYXV0aGVudGljYXRlIGN5cnVzX2JpbmQgY3lydXNfY2xvc2UgY3lydXNfY29ubmVjdCBjeXJ1c19xdWVyeSBjeXJ1c191bmJpbmQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJY2hlY2tkYXRlIGRhdGUgZ2V0ZGF0ZSBnZXR0aW1lb2ZkYXkgZ21kYXRlIGdtbWt0aW1lIGdtc3RyZnRpbWUgbG9jYWx0aW1lIG1pY3JvdGltZSBta3RpbWUgc3RyZnRpbWUgc3RydG90aW1lIHRpbWUJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJZGJhX2Nsb3NlIGRiYV9kZWxldGUgZGJhX2V4aXN0cyBkYmFfZmV0Y2ggZGJhX2ZpcnN0a2V5IGRiYV9oYW5kbGVycyBkYmFfaW5zZXJ0IGRiYV9rZXlfc3BsaXQgZGJhX2xpc3QgZGJhX25leHRrZXkgZGJhX29wZW4gZGJhX29wdGltaXplIGRiYV9wb3BlbiBkYmFfcmVwbGFjZSBkYmFfc3luYwljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlkYmFzZV9hZGRfcmVjb3JkIGRiYXNlX2Nsb3NlIGRiYXNlX2NyZWF0ZSBkYmFzZV9kZWxldGVfcmVjb3JkIGRiYXNlX2dldF9oZWFkZXJfaW5mbyBkYmFzZV9nZXRfcmVjb3JkX3dpdGhfbmFtZXMgZGJhc2VfZ2V0X3JlY29yZCBkYmFzZV9udW1maWVsZHMgZGJhc2VfbnVtcmVjb3JkcyBkYmFzZV9vcGVuIGRiYXNlX3BhY2sgZGJhc2VfcmVwbGFjZV9yZWNvcmQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJZGJsaXN0IGRibWNsb3NlIGRibWRlbGV0ZSBkYm1leGlzdHMgZGJtZmV0Y2ggZGJtZmlyc3RrZXkgZGJtaW5zZXJ0IGRibW5leHRrZXkgZGJtb3BlbiBkYm1yZXBsYWNlCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWRicGx1c19hZGQgZGJwbHVzX2FxbCBkYnBsdXNfY2hkaXIgZGJwbHVzX2Nsb3NlIGRicGx1c19jdXJyIGRicGx1c19lcnJjb2RlIGRicGx1c19lcnJubyBkYnBsdXNfZmluZCBkYnBsdXNfZmlyc3QgZGJwbHVzX2ZsdXNoIGRicGx1c19mcmVlYWxsbG9ja3MgZGJwbHVzX2ZyZWVsb2NrIGRicGx1c19mcmVlcmxvY2tzIGRicGx1c19nZXRsb2NrIGRicGx1c19nZXR1bmlxdWUgZGJwbHVzX2luZm8gZGJwbHVzX2xhc3QgZGJwbHVzX2xvY2tyZWwgZGJwbHVzX25leHQgZGJwbHVzX29wZW4gZGJwbHVzX3ByZXYgZGJwbHVzX3JjaHBlcm0gZGJwbHVzX3JjcmVhdGUgZGJwbHVzX3JjcnRleGFjdCBkYnBsdXNfcmNydGxpa2UgZGJwbHVzX3Jlc29sdmUgZGJwbHVzX3Jlc3RvcmVwb3MgZGJwbHVzX3JrZXlzIGRicGx1c19yb3BlbiBkYnBsdXNfcnF1ZXJ5IGRicGx1c19ycmVuYW1lIGRicGx1c19yc2VjaW5kZXggZGJwbHVzX3J1bmxpbmsgZGJwbHVzX3J6YXAgZGJwbHVzX3NhdmVwb3MgZGJwbHVzX3NldGluZGV4IGRicGx1c19zZXRpbmRleGJ5bnVtYmVyIGRicGx1c19zcWwgZGJwbHVzX3RjbCBkYnBsdXNfdHJlbW92ZSBkYnBsdXNfdW5kbyBkYnBsdXNfdW5kb3ByZXBhcmUgZGJwbHVzX3VubG9ja3JlbCBkYnBsdXNfdW5zZWxlY3QgZGJwbHVzX3VwZGF0ZSBkYnBsdXNfeGxvY2tyZWwgZGJwbHVzX3h1bmxvY2tyZWwJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJZGJ4X2Nsb3NlIGRieF9jb21wYXJlIGRieF9jb25uZWN0IGRieF9lcnJvciBkYnhfZXNjYXBlX3N0cmluZyBkYnhfZmV0Y2hfcm93IGRieF9xdWVyeSBkYnhfc29ydAljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlkaW9fY2xvc2UgZGlvX2ZjbnRsIGRpb19vcGVuIGRpb19yZWFkIGRpb19zZWVrIGRpb19zdGF0IGRpb190Y3NldGF0dHIgZGlvX3RydW5jYXRlIGRpb193cml0ZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwljaGRpciBjaHJvb3QgZGlyIGNsb3NlZGlyIGdldGN3ZCBvcGVuZGlyIHJlYWRkaXIgcmV3aW5kZGlyIHNjYW5kaXIJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJZG9teG1sX25ld19kb2MgZG9teG1sX29wZW5fZmlsZSBkb214bWxfb3Blbl9tZW0gZG9teG1sX3ZlcnNpb24gZG9teG1sX3htbHRyZWUgZG9teG1sX3hzbHRfc3R5bGVzaGVldF9kb2MgZG9teG1sX3hzbHRfc3R5bGVzaGVldF9maWxlIGRvbXhtbF94c2x0X3N0eWxlc2hlZXQgeHBhdGhfZXZhbF9leHByZXNzaW9uIHhwYXRoX2V2YWwgeHBhdGhfbmV3X2NvbnRleHQgeHB0cl9ldmFsIHhwdHJfbmV3X2NvbnRleHQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBNZXRob2RzCW5hbWUgc3BlY2lmaWVkIHZhbHVlIGNyZWF0ZV9hdHRyaWJ1dGUgY3JlYXRlX2NkYXRhX3NlY3Rpb24gY3JlYXRlX2NvbW1lbnQgY3JlYXRlX2VsZW1lbnRfbnMgY3JlYXRlX2VsZW1lbnQgY3JlYXRlX2VudGl0eV9yZWZlcmVuY2UgY3JlYXRlX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gY3JlYXRlX3RleHRfbm9kZSBkb2N0eXBlIGRvY3VtZW50X2VsZW1lbnQgZHVtcF9maWxlIGR1bXBfbWVtIGdldF9lbGVtZW50X2J5X2lkIGdldF9lbGVtZW50c19ieV90YWduYW1lIGh0bWxfZHVtcF9tZW0geGluY2x1ZGUgZW50aXRpZXMgaW50ZXJuYWxfc3Vic2V0IG5hbWUgbm90YXRpb25zIHB1YmxpY19pZCBzeXN0ZW1faWQgZ2V0X2F0dHJpYnV0ZV9ub2RlIGdldF9hdHRyaWJ1dGUgZ2V0X2VsZW1lbnRzX2J5X3RhZ25hbWUgaGFzX2F0dHJpYnV0ZSByZW1vdmVfYXR0cmlidXRlIHNldF9hdHRyaWJ1dGUgdGFnbmFtZSBhZGRfbmFtZXNwYWNlIGFwcGVuZF9jaGlsZCBhcHBlbmRfc2libGluZyBhdHRyaWJ1dGVzIGNoaWxkX25vZGVzIGNsb25lX25vZGUgZHVtcF9ub2RlIGZpcnN0X2NoaWxkIGdldF9jb250ZW50IGhhc19hdHRyaWJ1dGVzIGhhc19jaGlsZF9ub2RlcyBpbnNlcnRfYmVmb3JlIGlzX2JsYW5rX25vZGUgbGFzdF9jaGlsZCBuZXh0X3NpYmxpbmcgbm9kZV9uYW1lIG5vZGVfdHlwZSBub2RlX3ZhbHVlIG93bmVyX2RvY3VtZW50IHBhcmVudF9ub2RlIHByZWZpeCBwcmV2aW91c19zaWJsaW5nIHJlbW92ZV9jaGlsZCByZXBsYWNlX2NoaWxkIHJlcGxhY2Vfbm9kZSBzZXRfY29udGVudCBzZXRfbmFtZSBzZXRfbmFtZXNwYWNlIHVubGlua19ub2RlIGRhdGEgdGFyZ2V0IHByb2Nlc3MgcmVzdWx0X2R1bXBfZmlsZSByZXN1bHRfZHVtcF9tZW0JY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJZG90bmV0X2xvYWQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJZGVidWdfYmFja3RyYWNlIGRlYnVnX3ByaW50X2JhY2t0cmFjZSBlcnJvcl9sb2cgZXJyb3JfcmVwb3J0aW5nIHJlc3RvcmVfZXJyb3JfaGFuZGxlciBzZXRfZXJyb3JfaGFuZGxlciB0cmlnZ2VyX2Vycm9yIHVzZXJfZXJyb3IJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJZXNjYXBlc2hlbGxhcmcgZXNjYXBlc2hlbGxjbWQgZXhlYyBwYXNzdGhydSBwcm9jX2Nsb3NlIHByb2NfZ2V0X3N0YXR1cyBwcm9jX25pY2UgcHJvY19vcGVuIHByb2NfdGVybWluYXRlIHNoZWxsX2V4ZWMgc3lzdGVtCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWZhbV9jYW5jZWxfbW9uaXRvciBmYW1fY2xvc2UgZmFtX21vbml0b3JfY29sbGVjdGlvbiBmYW1fbW9uaXRvcl9kaXJlY3RvcnkgZmFtX21vbml0b3JfZmlsZSBmYW1fbmV4dF9ldmVudCBmYW1fb3BlbiBmYW1fcGVuZGluZyBmYW1fcmVzdW1lX21vbml0b3IgZmFtX3N1c3BlbmRfbW9uaXRvcgljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlmYnNxbF9hZmZlY3RlZF9yb3dzIGZic3FsX2F1dG9jb21taXQgZmJzcWxfY2hhbmdlX3VzZXIgZmJzcWxfY2xvc2UgZmJzcWxfY29tbWl0IGZic3FsX2Nvbm5lY3QgZmJzcWxfY3JlYXRlX2Jsb2IgZmJzcWxfY3JlYXRlX2Nsb2IgZmJzcWxfY3JlYXRlX2RiIGZic3FsX2RhdGFfc2VlayBmYnNxbF9kYXRhYmFzZV9wYXNzd29yZCBmYnNxbF9kYXRhYmFzZSBmYnNxbF9kYl9xdWVyeSBmYnNxbF9kYl9zdGF0dXMgZmJzcWxfZHJvcF9kYiBmYnNxbF9lcnJubyBmYnNxbF9lcnJvciBmYnNxbF9mZXRjaF9hcnJheSBmYnNxbF9mZXRjaF9hc3NvYyBmYnNxbF9mZXRjaF9maWVsZCBmYnNxbF9mZXRjaF9sZW5ndGhzIGZic3FsX2ZldGNoX29iamVjdCBmYnNxbF9mZXRjaF9yb3cgZmJzcWxfZmllbGRfZmxhZ3MgZmJzcWxfZmllbGRfbGVuIGZic3FsX2ZpZWxkX25hbWUgZmJzcWxfZmllbGRfc2VlayBmYnNxbF9maWVsZF90YWJsZSBmYnNxbF9maWVsZF90eXBlIGZic3FsX2ZyZWVfcmVzdWx0IGZic3FsX2dldF9hdXRvc3RhcnRfaW5mbyBmYnNxbF9ob3N0bmFtZSBmYnNxbF9pbnNlcnRfaWQgZmJzcWxfbGlzdF9kYnMgZmJzcWxfbGlzdF9maWVsZHMgZmJzcWxfbGlzdF90YWJsZXMgZmJzcWxfbmV4dF9yZXN1bHQgZmJzcWxfbnVtX2ZpZWxkcyBmYnNxbF9udW1fcm93cyBmYnNxbF9wYXNzd29yZCBmYnNxbF9wY29ubmVjdCBmYnNxbF9xdWVyeSBmYnNxbF9yZWFkX2Jsb2IgZmJzcWxfcmVhZF9jbG9iIGZic3FsX3Jlc3VsdCBmYnNxbF9yb2xsYmFjayBmYnNxbF9zZWxlY3RfZGIgZmJzcWxfc2V0X2xvYl9tb2RlIGZic3FsX3NldF90cmFuc2FjdGlvbiBmYnNxbF9zdGFydF9kYiBmYnNxbF9zdG9wX2RiIGZic3FsX3RhYmxlbmFtZSBmYnNxbF91c2VybmFtZSBmYnNxbF93YXJuaW5ncwljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlmZGZfYWRkX2RvY19qYXZhc2NyaXB0IGZkZl9hZGRfdGVtcGxhdGUgZmRmX2Nsb3NlIGZkZl9jcmVhdGUgZmRmX2VudW1fdmFsdWVzIGZkZl9lcnJubyBmZGZfZXJyb3IgZmRmX2dldF9hcCBmZGZfZ2V0X2F0dGFjaG1lbnQgZmRmX2dldF9lbmNvZGluZyBmZGZfZ2V0X2ZpbGUgZmRmX2dldF9mbGFncyBmZGZfZ2V0X29wdCBmZGZfZ2V0X3N0YXR1cyBmZGZfZ2V0X3ZhbHVlIGZkZl9nZXRfdmVyc2lvbiBmZGZfaGVhZGVyIGZkZl9uZXh0X2ZpZWxkX25hbWUgZmRmX29wZW5fc3RyaW5nIGZkZl9vcGVuIGZkZl9yZW1vdmVfaXRlbSBmZGZfc2F2ZV9zdHJpbmcgZmRmX3NhdmUgZmRmX3NldF9hcCBmZGZfc2V0X2VuY29kaW5nIGZkZl9zZXRfZmlsZSBmZGZfc2V0X2ZsYWdzIGZkZl9zZXRfamF2YXNjcmlwdF9hY3Rpb24gZmRmX3NldF9vcHQgZmRmX3NldF9zdGF0dXMgZmRmX3NldF9zdWJtaXRfZm9ybV9hY3Rpb24gZmRmX3NldF90YXJnZXRfZnJhbWUgZmRmX3NldF92YWx1ZSBmZGZfc2V0X3ZlcnNpb24JY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJZmlsZXByb19maWVsZGNvdW50IGZpbGVwcm9fZmllbGRuYW1lIGZpbGVwcm9fZmllbGR0eXBlIGZpbGVwcm9fZmllbGR3aWR0aCBmaWxlcHJvX3JldHJpZXZlIGZpbGVwcm9fcm93Y291bnQgZmlsZXBybwljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwliYXNlbmFtZSBjaGdycCBjaG1vZCBjaG93biBjbGVhcnN0YXRjYWNoZSBjb3B5IGRlbGV0ZSBkaXJuYW1lIGRpc2tfZnJlZV9zcGFjZSBkaXNrX3RvdGFsX3NwYWNlIGRpc2tmcmVlc3BhY2UgZmNsb3NlIGZlb2YgZmZsdXNoIGZnZXRjIGZnZXRjc3YgZmdldHMgZmdldHNzIGZpbGVfZXhpc3RzIGZpbGVfZ2V0X2NvbnRlbnRzIGZpbGVfcHV0X2NvbnRlbnRzIGZpbGUgZmlsZWF0aW1lIGZpbGVjdGltZSBmaWxlZ3JvdXAgZmlsZWlub2RlIGZpbGVtdGltZSBmaWxlb3duZXIgZmlsZXBlcm1zIGZpbGVzaXplIGZpbGV0eXBlIGZsb2NrIGZubWF0Y2ggZm9wZW4gZnBhc3N0aHJ1IGZwdXRzIGZyZWFkIGZzY2FuZiBmc2VlayBmc3RhdCBmdGVsbCBmdHJ1bmNhdGUgZndyaXRlIGdsb2IgaXNfZGlyIGlzX2V4ZWN1dGFibGUgaXNfZmlsZSBpc19saW5rIGlzX3JlYWRhYmxlIGlzX3VwbG9hZGVkX2ZpbGUgaXNfd3JpdGFibGUgaXNfd3JpdGVhYmxlIGxpbmsgbGlua2luZm8gbHN0YXQgbWtkaXIgbW92ZV91cGxvYWRlZF9maWxlIHBhcnNlX2luaV9maWxlIHBhdGhpbmZvIHBjbG9zZSBwb3BlbiByZWFkZmlsZSByZWFkbGluayByZWFscGF0aCByZW5hbWUgcmV3aW5kIHJtZGlyIHNldF9maWxlX2J1ZmZlciBzdGF0IHN5bWxpbmsgdGVtcG5hbSB0bXBmaWxlIHRvdWNoIHVtYXNrIHVubGluawljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlmcmliaWRpX2xvZzJ2aXMJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJZnRwX2FsbG9jIGZ0cF9jZHVwIGZ0cF9jaGRpciBmdHBfY2htb2QgZnRwX2Nsb3NlIGZ0cF9jb25uZWN0IGZ0cF9kZWxldGUgZnRwX2V4ZWMgZnRwX2ZnZXQgZnRwX2ZwdXQgZnRwX2dldF9vcHRpb24gZnRwX2dldCBmdHBfbG9naW4gZnRwX21kdG0gZnRwX21rZGlyIGZ0cF9uYl9jb250aW51ZSBmdHBfbmJfZmdldCBmdHBfbmJfZnB1dCBmdHBfbmJfZ2V0IGZ0cF9uYl9wdXQgZnRwX25saXN0IGZ0cF9wYXN2IGZ0cF9wdXQgZnRwX3B3ZCBmdHBfcXVpdCBmdHBfcmF3IGZ0cF9yYXdsaXN0IGZ0cF9yZW5hbWUgZnRwX3JtZGlyIGZ0cF9zZXRfb3B0aW9uIGZ0cF9zaXRlIGZ0cF9zaXplIGZ0cF9zc2xfY29ubmVjdCBmdHBfc3lzdHlwZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwljYWxsX3VzZXJfZnVuY19hcnJheSBjYWxsX3VzZXJfZnVuYyBjcmVhdGVfZnVuY3Rpb24gZnVuY19nZXRfYXJnIGZ1bmNfZ2V0X2FyZ3MgZnVuY19udW1fYXJncyBmdW5jdGlvbl9leGlzdHMgZ2V0X2RlZmluZWRfZnVuY3Rpb25zIHJlZ2lzdGVyX3NodXRkb3duX2Z1bmN0aW9uIHJlZ2lzdGVyX3RpY2tfZnVuY3Rpb24gdW5yZWdpc3Rlcl90aWNrX2Z1bmN0aW9uCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGJpbmR0ZXh0ZG9tYWluIGRjZ2V0dGV4dCBkY25nZXR0ZXh0IGRnZXR0ZXh0IGRuZ2V0dGV4dCBnZXR0ZXh0IG5nZXR0ZXh0IHRleHRkb21haW4JY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJZ21wX2FicyBnbXBfYWRkIGdtcF9hbmQgZ21wX2NscmJpdCBnbXBfY21wIGdtcF9jb20gZ21wX2Rpdl9xIGdtcF9kaXZfcXIgZ21wX2Rpdl9yIGdtcF9kaXYgZ21wX2RpdmV4YWN0IGdtcF9mYWN0IGdtcF9nY2QgZ21wX2djZGV4dCBnbXBfaGFtZGlzdCBnbXBfaW5pdCBnbXBfaW50dmFsIGdtcF9pbnZlcnQgZ21wX2phY29iaSBnbXBfbGVnZW5kcmUgZ21wX21vZCBnbXBfbXVsIGdtcF9uZWcgZ21wX29yIGdtcF9wZXJmZWN0X3NxdWFyZSBnbXBfcG9wY291bnQgZ21wX3BvdyBnbXBfcG93bSBnbXBfcHJvYl9wcmltZSBnbXBfcmFuZG9tIGdtcF9zY2FuMCBnbXBfc2NhbjEgZ21wX3NldGJpdCBnbXBfc2lnbiBnbXBfc3FydCBnbXBfc3FydHJlbSBnbXBfc3FydHJtIGdtcF9zdHJ2YWwgZ21wX3N1YiBnbXBfeG9yCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWhlYWRlciBoZWFkZXJzX2xpc3QgaGVhZGVyc19zZW50IHNldGNvb2tpZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlod19hcGlfYXR0cmlidXRlIGh3YXBpX2hnY3NwIGh3X2FwaV9jb250ZW50IGh3X2FwaV9vYmplY3QJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBNZXRob2RzCWtleSBsYW5nZGVwdmFsdWUgdmFsdWUgdmFsdWVzIGNoZWNraW4gY2hlY2tvdXQgY2hpbGRyZW4gbWltZXR5cGUgcmVhZCBjb250ZW50IGNvcHkgZGJzdGF0IGRjc3RhdCBkc3RhbmNob3JzIGRzdG9mc3JjYW5jaG9ycyBjb3VudCByZWFzb24gZmluZCBmdHN0YXQgaHdzdGF0IGlkZW50aWZ5IGluZm8gaW5zZXJ0IGluc2VydGFuY2hvciBpbnNlcnRjb2xsZWN0aW9uIGluc2VydGRvY3VtZW50IGxpbmsgbG9jayBtb3ZlIGFzc2lnbiBhdHRyZWRpdGFibGUgY291bnQgaW5zZXJ0IHJlbW92ZSB0aXRsZSB2YWx1ZSBvYmplY3Qgb2JqZWN0YnlhbmNob3IgcGFyZW50cyBkZXNjcmlwdGlvbiB0eXBlIHJlbW92ZSByZXBsYWNlIHNldGNvbW1pdGVkdmVyc2lvbiBzcmNhbmNob3JzIHNyY3NvZmRzdCB1bmxvY2sgdXNlciB1c2VybGlzdAljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlod19BcnJheTJPYmpyZWMgaHdfY2hhbmdlb2JqZWN0IGh3X0NoaWxkcmVuIGh3X0NoaWxkcmVuT2JqIGh3X0Nsb3NlIGh3X0Nvbm5lY3QgaHdfY29ubmVjdGlvbl9pbmZvIGh3X2NwIGh3X0RlbGV0ZW9iamVjdCBod19Eb2NCeUFuY2hvciBod19Eb2NCeUFuY2hvck9iaiBod19Eb2N1bWVudF9BdHRyaWJ1dGVzIGh3X0RvY3VtZW50X0JvZHlUYWcgaHdfRG9jdW1lbnRfQ29udGVudCBod19Eb2N1bWVudF9TZXRDb250ZW50IGh3X0RvY3VtZW50X1NpemUgaHdfZHVtbXkgaHdfRWRpdFRleHQgaHdfRXJyb3IgaHdfRXJyb3JNc2cgaHdfRnJlZV9Eb2N1bWVudCBod19HZXRBbmNob3JzIGh3X0dldEFuY2hvcnNPYmogaHdfR2V0QW5kTG9jayBod19HZXRDaGlsZENvbGwgaHdfR2V0Q2hpbGRDb2xsT2JqIGh3X0dldENoaWxkRG9jQ29sbCBod19HZXRDaGlsZERvY0NvbGxPYmogaHdfR2V0T2JqZWN0IGh3X0dldE9iamVjdEJ5UXVlcnkgaHdfR2V0T2JqZWN0QnlRdWVyeUNvbGwgaHdfR2V0T2JqZWN0QnlRdWVyeUNvbGxPYmogaHdfR2V0T2JqZWN0QnlRdWVyeU9iaiBod19HZXRQYXJlbnRzIGh3X0dldFBhcmVudHNPYmogaHdfZ2V0cmVsbGluayBod19HZXRSZW1vdGUgaHdfZ2V0cmVtb3RlY2hpbGRyZW4gaHdfR2V0U3JjQnlEZXN0T2JqIGh3X0dldFRleHQgaHdfZ2V0dXNlcm5hbWUgaHdfSWRlbnRpZnkgaHdfSW5Db2xsZWN0aW9ucyBod19JbmZvIGh3X0luc0NvbGwgaHdfSW5zRG9jIGh3X2luc2VydGFuY2hvcnMgaHdfSW5zZXJ0RG9jdW1lbnQgaHdfSW5zZXJ0T2JqZWN0IGh3X21hcGlkIGh3X01vZGlmeW9iamVjdCBod19tdiBod19OZXdfRG9jdW1lbnQgaHdfb2JqcmVjMmFycmF5IGh3X091dHB1dF9Eb2N1bWVudCBod19wQ29ubmVjdCBod19QaXBlRG9jdW1lbnQgaHdfUm9vdCBod19zZXRsaW5rcm9vdCBod19zdGF0IGh3X1VubG9jayBod19XaG8JY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJaWJhc2VfYWRkX3VzZXIgaWJhc2VfYWZmZWN0ZWRfcm93cyBpYmFzZV9ibG9iX2FkZCBpYmFzZV9ibG9iX2NhbmNlbCBpYmFzZV9ibG9iX2Nsb3NlIGliYXNlX2Jsb2JfY3JlYXRlIGliYXNlX2Jsb2JfZWNobyBpYmFzZV9ibG9iX2dldCBpYmFzZV9ibG9iX2ltcG9ydCBpYmFzZV9ibG9iX2luZm8gaWJhc2VfYmxvYl9vcGVuIGliYXNlX2Nsb3NlIGliYXNlX2NvbW1pdF9yZXQgaWJhc2VfY29tbWl0IGliYXNlX2Nvbm5lY3QgaWJhc2VfZGVsZXRlX3VzZXIgaWJhc2VfZHJvcF9kYiBpYmFzZV9lcnJjb2RlIGliYXNlX2Vycm1zZyBpYmFzZV9leGVjdXRlIGliYXNlX2ZldGNoX2Fzc29jIGliYXNlX2ZldGNoX29iamVjdCBpYmFzZV9mZXRjaF9yb3cgaWJhc2VfZmllbGRfaW5mbyBpYmFzZV9mcmVlX2V2ZW50X2hhbmRsZXIgaWJhc2VfZnJlZV9xdWVyeSBpYmFzZV9mcmVlX3Jlc3VsdCBpYmFzZV9nZW5faWQgaWJhc2VfbW9kaWZ5X3VzZXIgaWJhc2VfbmFtZV9yZXN1bHQgaWJhc2VfbnVtX2ZpZWxkcyBpYmFzZV9udW1fcGFyYW1zIGliYXNlX3BhcmFtX2luZm8gaWJhc2VfcGNvbm5lY3QgaWJhc2VfcHJlcGFyZSBpYmFzZV9xdWVyeSBpYmFzZV9yb2xsYmFja19yZXQgaWJhc2Vfcm9sbGJhY2sgaWJhc2Vfc2V0X2V2ZW50X2hhbmRsZXIgaWJhc2VfdGltZWZtdCBpYmFzZV90cmFucyBpYmFzZV93YWl0X2V2ZW50CWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWljb252X2dldF9lbmNvZGluZyBpY29udl9taW1lX2RlY29kZV9oZWFkZXJzIGljb252X21pbWVfZGVjb2RlIGljb252X21pbWVfZW5jb2RlIGljb252X3NldF9lbmNvZGluZyBpY29udl9zdHJsZW4gaWNvbnZfc3RycG9zIGljb252X3N0cnJwb3MgaWNvbnZfc3Vic3RyIGljb252IG9iX2ljb252X2hhbmRsZXIJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJaWZ4X2FmZmVjdGVkX3Jvd3MgaWZ4X2Jsb2JpbmZpbGVfbW9kZSBpZnhfYnl0ZWFzdmFyY2hhciBpZnhfY2xvc2UgaWZ4X2Nvbm5lY3QgaWZ4X2NvcHlfYmxvYiBpZnhfY3JlYXRlX2Jsb2IgaWZ4X2NyZWF0ZV9jaGFyIGlmeF9kbyBpZnhfZXJyb3IgaWZ4X2Vycm9ybXNnIGlmeF9mZXRjaF9yb3cgaWZ4X2ZpZWxkcHJvcGVydGllcyBpZnhfZmllbGR0eXBlcyBpZnhfZnJlZV9ibG9iIGlmeF9mcmVlX2NoYXIgaWZ4X2ZyZWVfcmVzdWx0IGlmeF9nZXRfYmxvYiBpZnhfZ2V0X2NoYXIgaWZ4X2dldHNxbGNhIGlmeF9odG1sdGJsX3Jlc3VsdCBpZnhfbnVsbGZvcm1hdCBpZnhfbnVtX2ZpZWxkcyBpZnhfbnVtX3Jvd3MgaWZ4X3Bjb25uZWN0IGlmeF9wcmVwYXJlIGlmeF9xdWVyeSBpZnhfdGV4dGFzdmFyY2hhciBpZnhfdXBkYXRlX2Jsb2IgaWZ4X3VwZGF0ZV9jaGFyIGlmeHVzX2Nsb3NlX3Nsb2IgaWZ4dXNfY3JlYXRlX3Nsb2IgaWZ4dXNfZnJlZV9zbG9iIGlmeHVzX29wZW5fc2xvYiBpZnh1c19yZWFkX3Nsb2IgaWZ4dXNfc2Vla19zbG9iIGlmeHVzX3RlbGxfc2xvYiBpZnh1c193cml0ZV9zbG9iCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWV4aWZfaW1hZ2V0eXBlIGV4aWZfcmVhZF9kYXRhIGV4aWZfdGh1bWJuYWlsIGdkX2luZm8gZ2V0aW1hZ2VzaXplIGltYWdlX3R5cGVfdG9fbWltZV90eXBlIGltYWdlMndibXAgaW1hZ2VhbHBoYWJsZW5kaW5nIGltYWdlYW50aWFsaWFzIGltYWdlYXJjIGltYWdlY2hhciBpbWFnZWNoYXJ1cCBpbWFnZWNvbG9yYWxsb2NhdGUgaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGEgaW1hZ2Vjb2xvcmF0IGltYWdlY29sb3JjbG9zZXN0IGltYWdlY29sb3JjbG9zZXN0YWxwaGEgaW1hZ2Vjb2xvcmNsb3Nlc3Rod2IgaW1hZ2Vjb2xvcmRlYWxsb2NhdGUgaW1hZ2Vjb2xvcmV4YWN0IGltYWdlY29sb3JleGFjdGFscGhhIGltYWdlY29sb3JtYXRjaCBpbWFnZWNvbG9ycmVzb2x2ZSBpbWFnZWNvbG9ycmVzb2x2ZWFscGhhIGltYWdlY29sb3JzZXQgaW1hZ2Vjb2xvcnNmb3JpbmRleCBpbWFnZWNvbG9yc3RvdGFsIGltYWdlY29sb3J0cmFuc3BhcmVudCBpbWFnZWNvcHkgaW1hZ2Vjb3B5bWVyZ2UgaW1hZ2Vjb3B5bWVyZ2VncmF5IGltYWdlY29weXJlc2FtcGxlZCBpbWFnZWNvcHlyZXNpemVkIGltYWdlY3JlYXRlIGltYWdlY3JlYXRlZnJvbWdkMiBpbWFnZWNyZWF0ZWZyb21nZDJwYXJ0IGltYWdlY3JlYXRlZnJvbWdkIGltYWdlY3JlYXRlZnJvbWdpZiBpbWFnZWNyZWF0ZWZyb21qcGVnIGltYWdlY3JlYXRlZnJvbXBuZyBpbWFnZWNyZWF0ZWZyb21zdHJpbmcgaW1hZ2VjcmVhdGVmcm9td2JtcCBpbWFnZWNyZWF0ZWZyb214Ym0gaW1hZ2VjcmVhdGVmcm9teHBtIGltYWdlY3JlYXRldHJ1ZWNvbG9yIGltYWdlZGFzaGVkbGluZSBpbWFnZWRlc3Ryb3kgaW1hZ2VlbGxpcHNlIGltYWdlZmlsbCBpbWFnZWZpbGxlZGFyYyBpbWFnZWZpbGxlZGVsbGlwc2UgaW1hZ2VmaWxsZWRwb2x5Z29uIGltYWdlZmlsbGVkcmVjdGFuZ2xlIGltYWdlZmlsbHRvYm9yZGVyIGltYWdlZm9udGhlaWdodCBpbWFnZWZvbnR3aWR0aCBpbWFnZWZ0YmJveCBpbWFnZWZ0dGV4dCBpbWFnZWdhbW1hY29ycmVjdCBpbWFnZWdkMiBpbWFnZWdkIGltYWdlZ2lmIGltYWdlaW50ZXJsYWNlIGltYWdlaXN0cnVlY29sb3IgaW1hZ2VqcGVnIGltYWdlbGluZSBpbWFnZWxvYWRmb250IGltYWdlcGFsZXR0ZWNvcHkgaW1hZ2VwbmcgaW1hZ2Vwb2x5Z29uIGltYWdlcHNiYm94IGltYWdlcHNjb3B5Zm9udCBpbWFnZXBzZW5jb2RlZm9udCBpbWFnZXBzZXh0ZW5kZm9udCBpbWFnZXBzZnJlZWZvbnQgaW1hZ2Vwc2xvYWRmb250IGltYWdlcHNzbGFudGZvbnQgaW1hZ2Vwc3RleHQgaW1hZ2VyZWN0YW5nbGUgaW1hZ2Vyb3RhdGUgaW1hZ2VzYXZlYWxwaGEgaW1hZ2VzZXRicnVzaCBpbWFnZXNldHBpeGVsIGltYWdlc2V0c3R5bGUgaW1hZ2VzZXR0aGlja25lc3MgaW1hZ2VzZXR0aWxlIGltYWdlc3RyaW5nIGltYWdlc3RyaW5ndXAgaW1hZ2VzeCBpbWFnZXN5IGltYWdldHJ1ZWNvbG9ydG9wYWxldHRlIGltYWdldHRmYmJveCBpbWFnZXR0ZnRleHQgaW1hZ2V0eXBlcyBpbWFnZXdibXAgaXB0Y2VtYmVkIGlwdGNwYXJzZSBqcGVnMndibXAgcG5nMndibXAgcmVhZF9leGlmX2RhdGEJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJaW1hcF84Yml0IGltYXBfYWxlcnRzIGltYXBfYXBwZW5kIGltYXBfYmFzZTY0IGltYXBfYmluYXJ5IGltYXBfYm9keSBpbWFwX2JvZHlzdHJ1Y3QgaW1hcF9jaGVjayBpbWFwX2NsZWFyZmxhZ19mdWxsIGltYXBfY2xvc2UgaW1hcF9jcmVhdGVtYWlsYm94IGltYXBfZGVsZXRlIGltYXBfZGVsZXRlbWFpbGJveCBpbWFwX2Vycm9ycyBpbWFwX2V4cHVuZ2UgaW1hcF9mZXRjaF9vdmVydmlldyBpbWFwX2ZldGNoYm9keSBpbWFwX2ZldGNoaGVhZGVyIGltYXBfZmV0Y2hzdHJ1Y3R1cmUgaW1hcF9nZXRfcXVvdGEgaW1hcF9nZXRfcXVvdGFyb290IGltYXBfZ2V0YWNsIGltYXBfZ2V0bWFpbGJveGVzIGltYXBfZ2V0c3Vic2NyaWJlZCBpbWFwX2hlYWRlciBpbWFwX2hlYWRlcmluZm8gaW1hcF9oZWFkZXJzIGltYXBfbGFzdF9lcnJvciBpbWFwX2xpc3QgaW1hcF9saXN0bWFpbGJveCBpbWFwX2xpc3RzY2FuIGltYXBfbGlzdHN1YnNjcmliZWQgaW1hcF9sc3ViIGltYXBfbWFpbF9jb21wb3NlIGltYXBfbWFpbF9jb3B5IGltYXBfbWFpbF9tb3ZlIGltYXBfbWFpbCBpbWFwX21haWxib3htc2dpbmZvIGltYXBfbWltZV9oZWFkZXJfZGVjb2RlIGltYXBfbXNnbm8gaW1hcF9udW1fbXNnIGltYXBfbnVtX3JlY2VudCBpbWFwX29wZW4gaW1hcF9waW5nIGltYXBfcXByaW50IGltYXBfcmVuYW1lbWFpbGJveCBpbWFwX3Jlb3BlbiBpbWFwX3JmYzgyMl9wYXJzZV9hZHJsaXN0IGltYXBfcmZjODIyX3BhcnNlX2hlYWRlcnMgaW1hcF9yZmM4MjJfd3JpdGVfYWRkcmVzcyBpbWFwX3NjYW5tYWlsYm94IGltYXBfc2VhcmNoIGltYXBfc2V0X3F1b3RhIGltYXBfc2V0YWNsIGltYXBfc2V0ZmxhZ19mdWxsIGltYXBfc29ydCBpbWFwX3N0YXR1cyBpbWFwX3N1YnNjcmliZSBpbWFwX3RocmVhZCBpbWFwX3RpbWVvdXQgaW1hcF91aWQgaW1hcF91bmRlbGV0ZSBpbWFwX3Vuc3Vic2NyaWJlIGltYXBfdXRmN19kZWNvZGUgaW1hcF91dGY3X2VuY29kZSBpbWFwX3V0ZjgJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJYXNzZXJ0X29wdGlvbnMgYXNzZXJ0IGRsIGV4dGVuc2lvbl9sb2FkZWQgZ2V0X2NmZ192YXIgZ2V0X2N1cnJlbnRfdXNlciBnZXRfZGVmaW5lZF9jb25zdGFudHMgZ2V0X2V4dGVuc2lvbl9mdW5jcyBnZXRfaW5jbHVkZV9wYXRoIGdldF9pbmNsdWRlZF9maWxlcyBnZXRfbG9hZGVkX2V4dGVuc2lvbnMgZ2V0X21hZ2ljX3F1b3Rlc19ncGMgZ2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lIGdldF9yZXF1aXJlZF9maWxlcyBnZXRlbnYgZ2V0bGFzdG1vZCBnZXRteWdpZCBnZXRteWlub2RlIGdldG15cGlkIGdldG15dWlkIGdldG9wdCBnZXRydXNhZ2UgaW5pX2FsdGVyIGluaV9nZXRfYWxsIGluaV9nZXQgaW5pX3Jlc3RvcmUgaW5pX3NldCBtYWluIG1lbW9yeV9nZXRfdXNhZ2UgcGhwX2luaV9zY2FubmVkX2ZpbGVzIHBocF9sb2dvX2d1aWQgcGhwX3NhcGlfbmFtZSBwaHBfdW5hbWUgcGhwY3JlZGl0cyBwaHBpbmZvIHBocHZlcnNpb24gcHV0ZW52IHJlc3RvcmVfaW5jbHVkZV9wYXRoIHNldF9pbmNsdWRlX3BhdGggc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lIHNldF90aW1lX2xpbWl0IHZlcnNpb25fY29tcGFyZSB6ZW5kX2xvZ29fZ3VpZCB6ZW5kX3ZlcnNpb24JY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJaW5ncmVzX2F1dG9jb21taXQgaW5ncmVzX2Nsb3NlIGluZ3Jlc19jb21taXQgaW5ncmVzX2Nvbm5lY3QgaW5ncmVzX2ZldGNoX2FycmF5IGluZ3Jlc19mZXRjaF9vYmplY3QgaW5ncmVzX2ZldGNoX3JvdyBpbmdyZXNfZmllbGRfbGVuZ3RoIGluZ3Jlc19maWVsZF9uYW1lIGluZ3Jlc19maWVsZF9udWxsYWJsZSBpbmdyZXNfZmllbGRfcHJlY2lzaW9uIGluZ3Jlc19maWVsZF9zY2FsZSBpbmdyZXNfZmllbGRfdHlwZSBpbmdyZXNfbnVtX2ZpZWxkcyBpbmdyZXNfbnVtX3Jvd3MgaW5ncmVzX3Bjb25uZWN0IGluZ3Jlc19xdWVyeSBpbmdyZXNfcm9sbGJhY2sJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJaXJjZ19jaGFubmVsX21vZGUgaXJjZ19kaXNjb25uZWN0IGlyY2dfZmV0Y2hfZXJyb3JfbXNnIGlyY2dfZ2V0X3VzZXJuYW1lIGlyY2dfaHRtbF9lbmNvZGUgaXJjZ19pZ25vcmVfYWRkIGlyY2dfaWdub3JlX2RlbCBpcmNnX2lzX2Nvbm5fYWxpdmUgaXJjZ19qb2luIGlyY2dfa2ljayBpcmNnX2xvb2t1cF9mb3JtYXRfbWVzc2FnZXMgaXJjZ19tc2cgaXJjZ19uaWNrIGlyY2dfbmlja25hbWVfZXNjYXBlIGlyY2dfbmlja25hbWVfdW5lc2NhcGUgaXJjZ19ub3RpY2UgaXJjZ19wYXJ0IGlyY2dfcGNvbm5lY3QgaXJjZ19yZWdpc3Rlcl9mb3JtYXRfbWVzc2FnZXMgaXJjZ19zZXRfY3VycmVudCBpcmNnX3NldF9maWxlIGlyY2dfc2V0X29uX2RpZSBpcmNnX3RvcGljIGlyY2dfd2hvaXMJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJamF2YV9sYXN0X2V4Y2VwdGlvbl9jbGVhciBqYXZhX2xhc3RfZXhjZXB0aW9uX2dldAljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlsZGFwXzg4NTlfdG9fdDYxIGxkYXBfYWRkIGxkYXBfYmluZCBsZGFwX2Nsb3NlIGxkYXBfY29tcGFyZSBsZGFwX2Nvbm5lY3QgbGRhcF9jb3VudF9lbnRyaWVzIGxkYXBfZGVsZXRlIGxkYXBfZG4ydWZuIGxkYXBfZXJyMnN0ciBsZGFwX2Vycm5vIGxkYXBfZXJyb3IgbGRhcF9leHBsb2RlX2RuIGxkYXBfZmlyc3RfYXR0cmlidXRlIGxkYXBfZmlyc3RfZW50cnkgbGRhcF9maXJzdF9yZWZlcmVuY2UgbGRhcF9mcmVlX3Jlc3VsdCBsZGFwX2dldF9hdHRyaWJ1dGVzIGxkYXBfZ2V0X2RuIGxkYXBfZ2V0X2VudHJpZXMgbGRhcF9nZXRfb3B0aW9uIGxkYXBfZ2V0X3ZhbHVlc19sZW4gbGRhcF9nZXRfdmFsdWVzIGxkYXBfbGlzdCBsZGFwX21vZF9hZGQgbGRhcF9tb2RfZGVsIGxkYXBfbW9kX3JlcGxhY2UgbGRhcF9tb2RpZnkgbGRhcF9uZXh0X2F0dHJpYnV0ZSBsZGFwX25leHRfZW50cnkgbGRhcF9uZXh0X3JlZmVyZW5jZSBsZGFwX3BhcnNlX3JlZmVyZW5jZSBsZGFwX3BhcnNlX3Jlc3VsdCBsZGFwX3JlYWQgbGRhcF9yZW5hbWUgbGRhcF9zZWFyY2ggbGRhcF9zZXRfb3B0aW9uIGxkYXBfc2V0X3JlYmluZF9wcm9jIGxkYXBfc29ydCBsZGFwX3N0YXJ0X3RscyBsZGFwX3Q2MV90b184ODU5IGxkYXBfdW5iaW5kCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWx6Zl9jb21wcmVzcyBsemZfZGVjb21wcmVzcyBsemZfb3B0aW1pemVkX2Zvcgljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwllem1sbV9oYXNoIG1haWwJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJbWFpbHBhcnNlX2RldGVybWluZV9iZXN0X3hmZXJfZW5jb2RpbmcgbWFpbHBhcnNlX21zZ19jcmVhdGUgbWFpbHBhcnNlX21zZ19leHRyYWN0X3BhcnRfZmlsZSBtYWlscGFyc2VfbXNnX2V4dHJhY3RfcGFydCBtYWlscGFyc2VfbXNnX2ZyZWUgbWFpbHBhcnNlX21zZ19nZXRfcGFydF9kYXRhIG1haWxwYXJzZV9tc2dfZ2V0X3BhcnQgbWFpbHBhcnNlX21zZ19nZXRfc3RydWN0dXJlIG1haWxwYXJzZV9tc2dfcGFyc2VfZmlsZSBtYWlscGFyc2VfbXNnX3BhcnNlIG1haWxwYXJzZV9yZmM4MjJfcGFyc2VfYWRkcmVzc2VzIG1haWxwYXJzZV9zdHJlYW1fZW5jb2RlIG1haWxwYXJzZV91dWRlY29kZV9hbGwJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJYWJzIGFjb3MgYWNvc2ggYXNpbiBhc2luaCBhdGFuMiBhdGFuIGF0YW5oIGJhc2VfY29udmVydCBiaW5kZWMgY2VpbCBjb3MgY29zaCBkZWNiaW4gZGVjaGV4IGRlY29jdCBkZWcycmFkIGV4cCBleHBtMSBmbG9vciBmbW9kIGdldHJhbmRtYXggaGV4ZGVjIGh5cG90IGlzX2Zpbml0ZSBpc19pbmZpbml0ZSBpc19uYW4gbGNnX3ZhbHVlIGxvZzEwIGxvZzFwIGxvZyBtYXggbWluIG10X2dldHJhbmRtYXggbXRfcmFuZCBtdF9zcmFuZCBvY3RkZWMgcGkgcG93IHJhZDJkZWcgcmFuZCByb3VuZCBzaW4gc2luaCBzcXJ0IHNyYW5kIHRhbiB0YW5oCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCW1iX2NvbnZlcnRfY2FzZSBtYl9jb252ZXJ0X2VuY29kaW5nIG1iX2NvbnZlcnRfa2FuYSBtYl9jb252ZXJ0X3ZhcmlhYmxlcyBtYl9kZWNvZGVfbWltZWhlYWRlciBtYl9kZWNvZGVfbnVtZXJpY2VudGl0eSBtYl9kZXRlY3RfZW5jb2RpbmcgbWJfZGV0ZWN0X29yZGVyIG1iX2VuY29kZV9taW1laGVhZGVyIG1iX2VuY29kZV9udW1lcmljZW50aXR5IG1iX2VyZWdfbWF0Y2ggbWJfZXJlZ19yZXBsYWNlIG1iX2VyZWdfc2VhcmNoX2dldHBvcyBtYl9lcmVnX3NlYXJjaF9nZXRyZWdzIG1iX2VyZWdfc2VhcmNoX2luaXQgbWJfZXJlZ19zZWFyY2hfcG9zIG1iX2VyZWdfc2VhcmNoX3JlZ3MgbWJfZXJlZ19zZWFyY2hfc2V0cG9zIG1iX2VyZWdfc2VhcmNoIG1iX2VyZWcgbWJfZXJlZ2lfcmVwbGFjZSBtYl9lcmVnaSBtYl9nZXRfaW5mbyBtYl9odHRwX2lucHV0IG1iX2h0dHBfb3V0cHV0IG1iX2ludGVybmFsX2VuY29kaW5nIG1iX2xhbmd1YWdlIG1iX291dHB1dF9oYW5kbGVyIG1iX3BhcnNlX3N0ciBtYl9wcmVmZXJyZWRfbWltZV9uYW1lIG1iX3JlZ2V4X2VuY29kaW5nIG1iX3JlZ2V4X3NldF9vcHRpb25zIG1iX3NlbmRfbWFpbCBtYl9zcGxpdCBtYl9zdHJjdXQgbWJfc3RyaW13aWR0aCBtYl9zdHJsZW4gbWJfc3RycG9zIG1iX3N0cnJwb3MgbWJfc3RydG9sb3dlciBtYl9zdHJ0b3VwcGVyIG1iX3N0cndpZHRoIG1iX3N1YnN0aXR1dGVfY2hhcmFjdGVyIG1iX3N1YnN0cl9jb3VudCBtYl9zdWJzdHIJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJbWNhbF9hcHBlbmRfZXZlbnQgbWNhbF9jbG9zZSBtY2FsX2NyZWF0ZV9jYWxlbmRhciBtY2FsX2RhdGVfY29tcGFyZSBtY2FsX2RhdGVfdmFsaWQgbWNhbF9kYXlfb2Zfd2VlayBtY2FsX2RheV9vZl95ZWFyIG1jYWxfZGF5c19pbl9tb250aCBtY2FsX2RlbGV0ZV9jYWxlbmRhciBtY2FsX2RlbGV0ZV9ldmVudCBtY2FsX2V2ZW50X2FkZF9hdHRyaWJ1dGUgbWNhbF9ldmVudF9pbml0IG1jYWxfZXZlbnRfc2V0X2FsYXJtIG1jYWxfZXZlbnRfc2V0X2NhdGVnb3J5IG1jYWxfZXZlbnRfc2V0X2NsYXNzIG1jYWxfZXZlbnRfc2V0X2Rlc2NyaXB0aW9uIG1jYWxfZXZlbnRfc2V0X2VuZCBtY2FsX2V2ZW50X3NldF9yZWN1cl9kYWlseSBtY2FsX2V2ZW50X3NldF9yZWN1cl9tb250aGx5X21kYXkgbWNhbF9ldmVudF9zZXRfcmVjdXJfbW9udGhseV93ZGF5IG1jYWxfZXZlbnRfc2V0X3JlY3VyX25vbmUgbWNhbF9ldmVudF9zZXRfcmVjdXJfd2Vla2x5IG1jYWxfZXZlbnRfc2V0X3JlY3VyX3llYXJseSBtY2FsX2V2ZW50X3NldF9zdGFydCBtY2FsX2V2ZW50X3NldF90aXRsZSBtY2FsX2V4cHVuZ2UgbWNhbF9mZXRjaF9jdXJyZW50X3N0cmVhbV9ldmVudCBtY2FsX2ZldGNoX2V2ZW50IG1jYWxfaXNfbGVhcF95ZWFyIG1jYWxfbGlzdF9hbGFybXMgbWNhbF9saXN0X2V2ZW50cyBtY2FsX25leHRfcmVjdXJyZW5jZSBtY2FsX29wZW4gbWNhbF9wb3BlbiBtY2FsX3JlbmFtZV9jYWxlbmRhciBtY2FsX3Jlb3BlbiBtY2FsX3Nub296ZSBtY2FsX3N0b3JlX2V2ZW50IG1jYWxfdGltZV92YWxpZCBtY2FsX3dlZWtfb2ZfeWVhcgljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwltY3J5cHRfY2JjIG1jcnlwdF9jZmIgbWNyeXB0X2NyZWF0ZV9pdiBtY3J5cHRfZGVjcnlwdCBtY3J5cHRfZWNiIG1jcnlwdF9lbmNfZ2V0X2FsZ29yaXRobXNfbmFtZSBtY3J5cHRfZW5jX2dldF9ibG9ja19zaXplIG1jcnlwdF9lbmNfZ2V0X2l2X3NpemUgbWNyeXB0X2VuY19nZXRfa2V5X3NpemUgbWNyeXB0X2VuY19nZXRfbW9kZXNfbmFtZSBtY3J5cHRfZW5jX2dldF9zdXBwb3J0ZWRfa2V5X3NpemVzIG1jcnlwdF9lbmNfaXNfYmxvY2tfYWxnb3JpdGhtX21vZGUgbWNyeXB0X2VuY19pc19ibG9ja19hbGdvcml0aG0gbWNyeXB0X2VuY19pc19ibG9ja19tb2RlIG1jcnlwdF9lbmNfc2VsZl90ZXN0IG1jcnlwdF9lbmNyeXB0IG1jcnlwdF9nZW5lcmljX2RlaW5pdCBtY3J5cHRfZ2VuZXJpY19lbmQgbWNyeXB0X2dlbmVyaWNfaW5pdCBtY3J5cHRfZ2VuZXJpYyBtY3J5cHRfZ2V0X2Jsb2NrX3NpemUgbWNyeXB0X2dldF9jaXBoZXJfbmFtZSBtY3J5cHRfZ2V0X2l2X3NpemUgbWNyeXB0X2dldF9rZXlfc2l6ZSBtY3J5cHRfbGlzdF9hbGdvcml0aG1zIG1jcnlwdF9saXN0X21vZGVzIG1jcnlwdF9tb2R1bGVfY2xvc2UgbWNyeXB0X21vZHVsZV9nZXRfYWxnb19ibG9ja19zaXplIG1jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fa2V5X3NpemUgbWNyeXB0X21vZHVsZV9nZXRfc3VwcG9ydGVkX2tleV9zaXplcyBtY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlIG1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfYWxnb3JpdGhtIG1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfbW9kZSBtY3J5cHRfbW9kdWxlX29wZW4gbWNyeXB0X21vZHVsZV9zZWxmX3Rlc3QgbWNyeXB0X29mYiBtZGVjcnlwdF9nZW5lcmljCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCW1jdmVfYWRkdXNlciBtY3ZlX2FkZHVzZXJhcmcgbWN2ZV9idCBtY3ZlX2NoZWNrc3RhdHVzIG1jdmVfY2hrcHdkIG1jdmVfY2huZ3B3ZCBtY3ZlX2NvbXBsZXRlYXV0aG9yaXphdGlvbnMgbWN2ZV9jb25uZWN0IG1jdmVfY29ubmVjdGlvbmVycm9yIG1jdmVfZGVsZXRlcmVzcG9uc2UgbWN2ZV9kZWxldGV0cmFucyBtY3ZlX2RlbGV0ZXVzZXJzZXR1cCBtY3ZlX2RlbHVzZXIgbWN2ZV9kZXN0cm95Y29ubiBtY3ZlX2Rlc3Ryb3llbmdpbmUgbWN2ZV9kaXNhYmxldXNlciBtY3ZlX2VkaXR1c2VyIG1jdmVfZW5hYmxldXNlciBtY3ZlX2ZvcmNlIG1jdmVfZ2V0Y2VsbCBtY3ZlX2dldGNlbGxieW51bSBtY3ZlX2dldGNvbW1hZGVsaW1pdGVkIG1jdmVfZ2V0aGVhZGVyIG1jdmVfZ2V0dXNlcmFyZyBtY3ZlX2dldHVzZXJwYXJhbSBtY3ZlX2dmdCBtY3ZlX2dsIG1jdmVfZ3V0IG1jdmVfaW5pdGNvbm4gbWN2ZV9pbml0ZW5naW5lIG1jdmVfaW5pdHVzZXJzZXR1cCBtY3ZlX2lzY29tbWFkZWxpbWl0ZWQgbWN2ZV9saXN0c3RhdHMgbWN2ZV9saXN0dXNlcnMgbWN2ZV9tYXhjb25udGltZW91dCBtY3ZlX21vbml0b3IgbWN2ZV9udW1jb2x1bW5zIG1jdmVfbnVtcm93cyBtY3ZlX292ZXJyaWRlIG1jdmVfcGFyc2Vjb21tYWRlbGltaXRlZCBtY3ZlX3BpbmcgbWN2ZV9wcmVhdXRoIG1jdmVfcHJlYXV0aGNvbXBsZXRpb24gbWN2ZV9xYyBtY3ZlX3Jlc3BvbnNlcGFyYW0gbWN2ZV9yZXR1cm4gbWN2ZV9yZXR1cm5jb2RlIG1jdmVfcmV0dXJuc3RhdHVzIG1jdmVfc2FsZSBtY3ZlX3NldGJsb2NraW5nIG1jdmVfc2V0ZHJvcGZpbGUgbWN2ZV9zZXRpcCBtY3ZlX3NldHNzbF9maWxlcyBtY3ZlX3NldHNzbCBtY3ZlX3NldHRpbWVvdXQgbWN2ZV9zZXR0bGUgbWN2ZV90ZXh0X2F2cyBtY3ZlX3RleHRfY29kZSBtY3ZlX3RleHRfY3YgbWN2ZV90cmFuc2FjdGlvbmF1dGggbWN2ZV90cmFuc2FjdGlvbmF2cyBtY3ZlX3RyYW5zYWN0aW9uYmF0Y2ggbWN2ZV90cmFuc2FjdGlvbmN2IG1jdmVfdHJhbnNhY3Rpb25pZCBtY3ZlX3RyYW5zYWN0aW9uaXRlbSBtY3ZlX3RyYW5zYWN0aW9uc3NlbnQgbWN2ZV90cmFuc2FjdGlvbnRleHQgbWN2ZV90cmFuc2lucXVldWUgbWN2ZV90cmFuc25ldyBtY3ZlX3RyYW5zcGFyYW0gbWN2ZV90cmFuc3NlbmQgbWN2ZV91YiBtY3ZlX3V3YWl0IG1jdmVfdmVyaWZ5Y29ubmVjdGlvbiBtY3ZlX3ZlcmlmeXNzbGNlcnQgbWN2ZV92b2lkCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCW1oYXNoX2NvdW50IG1oYXNoX2dldF9ibG9ja19zaXplIG1oYXNoX2dldF9oYXNoX25hbWUgbWhhc2hfa2V5Z2VuX3MyayBtaGFzaAljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwltaW1lX2NvbnRlbnRfdHlwZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwltaW5nX3NldGN1YmljdGhyZXNob2xkIG1pbmdfc2V0c2NhbGUgbWluZ191c2Vzd2Z2ZXJzaW9uIFNXRkFjdGlvbiBTV0ZCaXRtYXAgc3dmYnV0dG9uX2tleXByZXNzIFNXRmJ1dHRvbiBTV0ZEaXNwbGF5SXRlbSBTV0ZGaWxsIFNXRkZvbnQgU1dGR3JhZGllbnQgU1dGTW9ycGggU1dGTW92aWUgU1dGU2hhcGUgU1dGU3ByaXRlIFNXRlRleHQgU1dGVGV4dEZpZWxkCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwTWV0aG9kcwlnZXRIZWlnaHQgZ2V0V2lkdGggYWRkQWN0aW9uIGFkZFNoYXBlIHNldEFjdGlvbiBzZXRkb3duIHNldEhpdCBzZXRPdmVyIHNldFVwIGFkZENvbG9yIG1vdmUgbW92ZVRvIG11bHRDb2xvciByZW1vdmUgUm90YXRlIHJvdGF0ZVRvIHNjYWxlIHNjYWxlVG8gc2V0RGVwdGggc2V0TmFtZSBzZXRSYXRpbyBza2V3WCBza2V3WFRvIHNrZXdZIHNrZXdZVG8gbW92ZVRvIHJvdGF0ZVRvIHNjYWxlVG8gc2tld1hUbyBza2V3WVRvIGdldHdpZHRoIGFkZEVudHJ5IGdldHNoYXBlMSBnZXRzaGFwZTIgYWRkIG5leHRmcmFtZSBvdXRwdXQgcmVtb3ZlIHNhdmUgc2V0YmFja2dyb3VuZCBzZXRkaW1lbnNpb24gc2V0ZnJhbWVzIHNldHJhdGUgc3RyZWFtbXAzIGFkZEZpbGwgZHJhd0N1cnZlIGRyYXdDdXJ2ZVRvIGRyYXdMaW5lIGRyYXdMaW5lVG8gbW92ZVBlbiBtb3ZlUGVuVG8gc2V0TGVmdEZpbGwgc2V0TGluZSBzZXRSaWdodEZpbGwgYWRkIG5leHRmcmFtZSByZW1vdmUgc2V0ZnJhbWVzIGFkZFN0cmluZyBnZXRXaWR0aCBtb3ZlVG8gc2V0Q29sb3Igc2V0Rm9udCBzZXRIZWlnaHQgc2V0U3BhY2luZyBhZGRzdHJpbmcgYWxpZ24gc2V0Ym91bmRzIHNldGNvbG9yIHNldEZvbnQgc2V0SGVpZ2h0IHNldGluZGVudGF0aW9uIHNldExlZnRNYXJnaW4gc2V0TGluZVNwYWNpbmcgc2V0TWFyZ2lucyBzZXRuYW1lIHNldHJpZ2h0TWFyZ2luCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWNvbm5lY3Rpb25fYWJvcnRlZCBjb25uZWN0aW9uX3N0YXR1cyBjb25uZWN0aW9uX3RpbWVvdXQgY29uc3RhbnQgZGVmaW5lIGRlZmluZWQgZGllIGV2YWwgZXhpdCBnZXRfYnJvd3NlciBoaWdobGlnaHRfZmlsZSBoaWdobGlnaHRfc3RyaW5nIGlnbm9yZV91c2VyX2Fib3J0IHBhY2sgc2hvd19zb3VyY2Ugc2xlZXAgdW5pcWlkIHVucGFjayB1c2xlZXAJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJdWRtX2FkZF9zZWFyY2hfbGltaXQgdWRtX2FsbG9jX2FnZW50IHVkbV9hcGlfdmVyc2lvbiB1ZG1fY2F0X2xpc3QgdWRtX2NhdF9wYXRoIHVkbV9jaGVja19jaGFyc2V0IHVkbV9jaGVja19zdG9yZWQgdWRtX2NsZWFyX3NlYXJjaF9saW1pdHMgdWRtX2Nsb3NlX3N0b3JlZCB1ZG1fY3JjMzIgdWRtX2Vycm5vIHVkbV9lcnJvciB1ZG1fZmluZCB1ZG1fZnJlZV9hZ2VudCB1ZG1fZnJlZV9pc3BlbGxfZGF0YSB1ZG1fZnJlZV9yZXMgdWRtX2dldF9kb2NfY291bnQgdWRtX2dldF9yZXNfZmllbGQgdWRtX2dldF9yZXNfcGFyYW0gdWRtX2xvYWRfaXNwZWxsX2RhdGEgdWRtX29wZW5fc3RvcmVkIHVkbV9zZXRfYWdlbnRfcGFyYW0JY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJbXNlc3Npb25fY29ubmVjdCBtc2Vzc2lvbl9jb3VudCBtc2Vzc2lvbl9jcmVhdGUgbXNlc3Npb25fZGVzdHJveSBtc2Vzc2lvbl9kaXNjb25uZWN0IG1zZXNzaW9uX2ZpbmQgbXNlc3Npb25fZ2V0X2FycmF5IG1zZXNzaW9uX2dldCBtc2Vzc2lvbl9nZXRkYXRhIG1zZXNzaW9uX2luYyBtc2Vzc2lvbl9saXN0IG1zZXNzaW9uX2xpc3R2YXIgbXNlc3Npb25fbG9jayBtc2Vzc2lvbl9wbHVnaW4gbXNlc3Npb25fcmFuZHN0ciBtc2Vzc2lvbl9zZXRfYXJyYXkgbXNlc3Npb25fc2V0IG1zZXNzaW9uX3NldGRhdGEgbXNlc3Npb25fdGltZW91dCBtc2Vzc2lvbl91bmlxIG1zZXNzaW9uX3VubG9jawljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwltc3FsX2FmZmVjdGVkX3Jvd3MgbXNxbF9jbG9zZSBtc3FsX2Nvbm5lY3QgbXNxbF9jcmVhdGVfZGIgbXNxbF9jcmVhdGVkYiBtc3FsX2RhdGFfc2VlayBtc3FsX2RibmFtZSBtc3FsX2Ryb3BfZGIgbXNxbF9kcm9wZGIgbXNxbF9lcnJvciBtc3FsX2ZldGNoX2FycmF5IG1zcWxfZmV0Y2hfZmllbGQgbXNxbF9mZXRjaF9vYmplY3QgbXNxbF9mZXRjaF9yb3cgbXNxbF9maWVsZF9zZWVrIG1zcWxfZmllbGRmbGFncyBtc3FsX2ZpZWxkbGVuIG1zcWxfZmllbGRuYW1lIG1zcWxfZmllbGR0YWJsZSBtc3FsX2ZpZWxkdHlwZSBtc3FsX2ZyZWVfcmVzdWx0IG1zcWxfZnJlZXJlc3VsdCBtc3FsX2xpc3RfZGJzIG1zcWxfbGlzdF9maWVsZHMgbXNxbF9saXN0X3RhYmxlcyBtc3FsX2xpc3RkYnMgbXNxbF9saXN0ZmllbGRzIG1zcWxfbGlzdHRhYmxlcyBtc3FsX251bV9maWVsZHMgbXNxbF9udW1fcm93cyBtc3FsX251bWZpZWxkcyBtc3FsX251bXJvd3MgbXNxbF9wY29ubmVjdCBtc3FsX3F1ZXJ5IG1zcWxfcmVnY2FzZSBtc3FsX3Jlc3VsdCBtc3FsX3NlbGVjdF9kYiBtc3FsX3NlbGVjdGRiIG1zcWxfdGFibGVuYW1lIG1zcWwJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJbXNzcWxfYmluZCBtc3NxbF9jbG9zZSBtc3NxbF9jb25uZWN0IG1zc3FsX2RhdGFfc2VlayBtc3NxbF9leGVjdXRlIG1zc3FsX2ZldGNoX2FycmF5IG1zc3FsX2ZldGNoX2Fzc29jIG1zc3FsX2ZldGNoX2JhdGNoIG1zc3FsX2ZldGNoX2ZpZWxkIG1zc3FsX2ZldGNoX29iamVjdCBtc3NxbF9mZXRjaF9yb3cgbXNzcWxfZmllbGRfbGVuZ3RoIG1zc3FsX2ZpZWxkX25hbWUgbXNzcWxfZmllbGRfc2VlayBtc3NxbF9maWVsZF90eXBlIG1zc3FsX2ZyZWVfcmVzdWx0IG1zc3FsX2ZyZWVfc3RhdGVtZW50IG1zc3FsX2dldF9sYXN0X21lc3NhZ2UgbXNzcWxfZ3VpZF9zdHJpbmcgbXNzcWxfaW5pdCBtc3NxbF9taW5fZXJyb3Jfc2V2ZXJpdHkgbXNzcWxfbWluX21lc3NhZ2Vfc2V2ZXJpdHkgbXNzcWxfbmV4dF9yZXN1bHQgbXNzcWxfbnVtX2ZpZWxkcyBtc3NxbF9udW1fcm93cyBtc3NxbF9wY29ubmVjdCBtc3NxbF9xdWVyeSBtc3NxbF9yZXN1bHQgbXNzcWxfcm93c19hZmZlY3RlZCBtc3NxbF9zZWxlY3RfZGIJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJbXVzY2F0X2Nsb3NlIG11c2NhdF9nZXQgbXVzY2F0X2dpdmUgbXVzY2F0X3NldHVwX25ldCBtdXNjYXRfc2V0dXAJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJbXlzcWxfYWZmZWN0ZWRfcm93cyBteXNxbF9jaGFuZ2VfdXNlciBteXNxbF9jbGllbnRfZW5jb2RpbmcgbXlzcWxfY2xvc2UgbXlzcWxfY29ubmVjdCBteXNxbF9jcmVhdGVfZGIgbXlzcWxfZGF0YV9zZWVrIG15c3FsX2RiX25hbWUgbXlzcWxfZGJfcXVlcnkgbXlzcWxfZHJvcF9kYiBteXNxbF9lcnJubyBteXNxbF9lcnJvciBteXNxbF9lc2NhcGVfc3RyaW5nIG15c3FsX2ZldGNoX2FycmF5IG15c3FsX2ZldGNoX2Fzc29jIG15c3FsX2ZldGNoX2ZpZWxkIG15c3FsX2ZldGNoX2xlbmd0aHMgbXlzcWxfZmV0Y2hfb2JqZWN0IG15c3FsX2ZldGNoX3JvdyBteXNxbF9maWVsZF9mbGFncyBteXNxbF9maWVsZF9sZW4gbXlzcWxfZmllbGRfbmFtZSBteXNxbF9maWVsZF9zZWVrIG15c3FsX2ZpZWxkX3RhYmxlIG15c3FsX2ZpZWxkX3R5cGUgbXlzcWxfZnJlZV9yZXN1bHQgbXlzcWxfZ2V0X2NsaWVudF9pbmZvIG15c3FsX2dldF9ob3N0X2luZm8gbXlzcWxfZ2V0X3Byb3RvX2luZm8gbXlzcWxfZ2V0X3NlcnZlcl9pbmZvIG15c3FsX2luZm8gbXlzcWxfaW5zZXJ0X2lkIG15c3FsX2xpc3RfZGJzIG15c3FsX2xpc3RfZmllbGRzIG15c3FsX2xpc3RfcHJvY2Vzc2VzIG15c3FsX2xpc3RfdGFibGVzIG15c3FsX251bV9maWVsZHMgbXlzcWxfbnVtX3Jvd3MgbXlzcWxfcGNvbm5lY3QgbXlzcWxfcGluZyBteXNxbF9xdWVyeSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcgbXlzcWxfcmVzdWx0IG15c3FsX3NlbGVjdF9kYiBteXNxbF9zdGF0IG15c3FsX3RhYmxlbmFtZSBteXNxbF90aHJlYWRfaWQgbXlzcWxfdW5idWZmZXJlZF9xdWVyeQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlteXNxbGlfYWZmZWN0ZWRfcm93cyBteXNxbGlfYXV0b2NvbW1pdCBteXNxbGlfYmluZF9wYXJhbSBteXNxbGlfYmluZF9yZXN1bHQgbXlzcWxpX2NoYW5nZV91c2VyIG15c3FsaV9jaGFyYWN0ZXJfc2V0X25hbWUgbXlzcWxpX2Nsb3NlIG15c3FsaV9jb21taXQgbXlzcWxpX2Nvbm5lY3QgbXlzcWxpX2RhdGFfc2VlayBteXNxbGlfZGVidWcgbXlzcWxpX2Rpc2FibGVfcmVhZHNfZnJvbV9tYXN0ZXIgbXlzcWxpX2Rpc2FibGVfcnBsX3BhcnNlIG15c3FsaV9kdW1wX2RlYnVnX2luZm8gbXlzcWxpX2VuYWJsZV9yZWFkc19mcm9tX21hc3RlciBteXNxbGlfZW5hYmxlX3JwbF9wYXJzZSBteXNxbGlfZXJybm8gbXlzcWxpX2Vycm9yIG15c3FsaV9leGVjdXRlIG15c3FsaV9mZXRjaF9hcnJheSBteXNxbGlfZmV0Y2hfYXNzb2MgbXlzcWxpX2ZldGNoX2ZpZWxkX2RpcmVjdCBteXNxbGlfZmV0Y2hfZmllbGQgbXlzcWxpX2ZldGNoX2ZpZWxkcyBteXNxbGlfZmV0Y2hfbGVuZ3RocyBteXNxbGlfZmV0Y2hfb2JqZWN0IG15c3FsaV9mZXRjaF9yb3cgbXlzcWxpX2ZldGNoIG15c3FsaV9maWVsZF9jb3VudCBteXNxbGlfZmllbGRfc2VlayBteXNxbGlfZmllbGRfdGVsbCBteXNxbGlfZnJlZV9yZXN1bHQgbXlzcWxpX2dldF9jbGllbnRfaW5mbyBteXNxbGlfZ2V0X2hvc3RfaW5mbyBteXNxbGlfZ2V0X3Byb3RvX2luZm8gbXlzcWxpX2dldF9zZXJ2ZXJfaW5mbyBteXNxbGlfZ2V0X3NlcnZlcl92ZXJzaW9uIG15c3FsaV9pbmZvIG15c3FsaV9pbml0IG15c3FsaV9pbnNlcnRfaWQgbXlzcWxpX2tpbGwgbXlzcWxpX21hc3Rlcl9xdWVyeSBteXNxbGlfbnVtX2ZpZWxkcyBteXNxbGlfbnVtX3Jvd3MgbXlzcWxpX29wdGlvbnMgbXlzcWxpX3BhcmFtX2NvdW50IG15c3FsaV9waW5nIG15c3FsaV9wcmVwYXJlX3Jlc3VsdCBteXNxbGlfcHJlcGFyZSBteXNxbGlfcHJvZmlsZXIgbXlzcWxpX3F1ZXJ5IG15c3FsaV9yZWFkX3F1ZXJ5X3Jlc3VsdCBteXNxbGlfcmVhbF9jb25uZWN0IG15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcgbXlzcWxpX3JlYWxfcXVlcnkgbXlzcWxpX3JlbG9hZCBteXNxbGlfcm9sbGJhY2sgbXlzcWxpX3JwbF9wYXJzZV9lbmFibGVkIG15c3FsaV9ycGxfcHJvYmUgbXlzcWxpX3JwbF9xdWVyeV90eXBlIG15c3FsaV9zZWxlY3RfZGIgbXlzcWxpX3NlbmRfbG9uZ19kYXRhIG15c3FsaV9zZW5kX3F1ZXJ5IG15c3FsaV9zbGF2ZV9xdWVyeSBteXNxbGlfc3NsX3NldCBteXNxbGlfc3RhdCBteXNxbGlfc3RtdF9hZmZlY3RlZF9yb3dzIG15c3FsaV9zdG10X2Nsb3NlIG15c3FsaV9zdG10X2Vycm5vIG15c3FsaV9zdG10X2Vycm9yIG15c3FsaV9zdG10X3N0b3JlX3Jlc3VsdCBteXNxbGlfc3RvcmVfcmVzdWx0IG15c3FsaV90aHJlYWRfaWQgbXlzcWxpX3RocmVhZF9zYWZlIG15c3FsaV91c2VfcmVzdWx0IG15c3FsaV93YXJuaW5nX2NvdW50CWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCW5jdXJzZXNfYWRkY2ggbmN1cnNlc19hZGRjaG5zdHIgbmN1cnNlc19hZGRjaHN0ciBuY3Vyc2VzX2FkZG5zdHIgbmN1cnNlc19hZGRzdHIgbmN1cnNlc19hc3N1bWVfZGVmYXVsdF9jb2xvcnMgbmN1cnNlc19hdHRyb2ZmIG5jdXJzZXNfYXR0cm9uIG5jdXJzZXNfYXR0cnNldCBuY3Vyc2VzX2JhdWRyYXRlIG5jdXJzZXNfYmVlcCBuY3Vyc2VzX2JrZ2QgbmN1cnNlc19ia2dkc2V0IG5jdXJzZXNfYm9yZGVyIG5jdXJzZXNfYm90dG9tX3BhbmVsIG5jdXJzZXNfY2FuX2NoYW5nZV9jb2xvciBuY3Vyc2VzX2NicmVhayBuY3Vyc2VzX2NsZWFyIG5jdXJzZXNfY2xydG9ib3QgbmN1cnNlc19jbHJ0b2VvbCBuY3Vyc2VzX2NvbG9yX2NvbnRlbnQgbmN1cnNlc19jb2xvcl9zZXQgbmN1cnNlc19jdXJzX3NldCBuY3Vyc2VzX2RlZl9wcm9nX21vZGUgbmN1cnNlc19kZWZfc2hlbGxfbW9kZSBuY3Vyc2VzX2RlZmluZV9rZXkgbmN1cnNlc19kZWxfcGFuZWwgbmN1cnNlc19kZWxheV9vdXRwdXQgbmN1cnNlc19kZWxjaCBuY3Vyc2VzX2RlbGV0ZWxuIG5jdXJzZXNfZGVsd2luIG5jdXJzZXNfZG91cGRhdGUgbmN1cnNlc19lY2hvIG5jdXJzZXNfZWNob2NoYXIgbmN1cnNlc19lbmQgbmN1cnNlc19lcmFzZSBuY3Vyc2VzX2VyYXNlY2hhciBuY3Vyc2VzX2ZpbHRlciBuY3Vyc2VzX2ZsYXNoIG5jdXJzZXNfZmx1c2hpbnAgbmN1cnNlc19nZXRjaCBuY3Vyc2VzX2dldG1heHl4IG5jdXJzZXNfZ2V0bW91c2UgbmN1cnNlc19nZXR5eCBuY3Vyc2VzX2hhbGZkZWxheSBuY3Vyc2VzX2hhc19jb2xvcnMgbmN1cnNlc19oYXNfaWMgbmN1cnNlc19oYXNfaWwgbmN1cnNlc19oYXNfa2V5IG5jdXJzZXNfaGlkZV9wYW5lbCBuY3Vyc2VzX2hsaW5lIG5jdXJzZXNfaW5jaCBuY3Vyc2VzX2luaXRfY29sb3IgbmN1cnNlc19pbml0X3BhaXIgbmN1cnNlc19pbml0IG5jdXJzZXNfaW5zY2ggbmN1cnNlc19pbnNkZWxsbiBuY3Vyc2VzX2luc2VydGxuIG5jdXJzZXNfaW5zc3RyIG5jdXJzZXNfaW5zdHIgbmN1cnNlc19pc2VuZHdpbiBuY3Vyc2VzX2tleW9rIG5jdXJzZXNfa2V5cGFkIG5jdXJzZXNfa2lsbGNoYXIgbmN1cnNlc19sb25nbmFtZSBuY3Vyc2VzX21ldGEgbmN1cnNlc19tb3VzZV90cmFmbyBuY3Vyc2VzX21vdXNlaW50ZXJ2YWwgbmN1cnNlc19tb3VzZW1hc2sgbmN1cnNlc19tb3ZlX3BhbmVsIG5jdXJzZXNfbW92ZSBuY3Vyc2VzX212YWRkY2ggbmN1cnNlc19tdmFkZGNobnN0ciBuY3Vyc2VzX212YWRkY2hzdHIgbmN1cnNlc19tdmFkZG5zdHIgbmN1cnNlc19tdmFkZHN0ciBuY3Vyc2VzX212Y3VyIG5jdXJzZXNfbXZkZWxjaCBuY3Vyc2VzX212Z2V0Y2ggbmN1cnNlc19tdmhsaW5lIG5jdXJzZXNfbXZpbmNoIG5jdXJzZXNfbXZ2bGluZSBuY3Vyc2VzX212d2FkZHN0ciBuY3Vyc2VzX25hcG1zIG5jdXJzZXNfbmV3X3BhbmVsIG5jdXJzZXNfbmV3cGFkIG5jdXJzZXNfbmV3d2luIG5jdXJzZXNfbmwgbmN1cnNlc19ub2NicmVhayBuY3Vyc2VzX25vZWNobyBuY3Vyc2VzX25vbmwgbmN1cnNlc19ub3FpZmx1c2ggbmN1cnNlc19ub3JhdyBuY3Vyc2VzX3BhaXJfY29udGVudCBuY3Vyc2VzX3BhbmVsX2Fib3ZlIG5jdXJzZXNfcGFuZWxfYmVsb3cgbmN1cnNlc19wYW5lbF93aW5kb3cgbmN1cnNlc19wbm91dHJlZnJlc2ggbmN1cnNlc19wcmVmcmVzaCBuY3Vyc2VzX3B1dHAgbmN1cnNlc19xaWZsdXNoIG5jdXJzZXNfcmF3IG5jdXJzZXNfcmVmcmVzaCBuY3Vyc2VzX3JlcGxhY2VfcGFuZWwgbmN1cnNlc19yZXNldF9wcm9nX21vZGUgbmN1cnNlc19yZXNldF9zaGVsbF9tb2RlIG5jdXJzZXNfcmVzZXR0eSBuY3Vyc2VzX3NhdmV0dHkgbmN1cnNlc19zY3JfZHVtcCBuY3Vyc2VzX3Njcl9pbml0IG5jdXJzZXNfc2NyX3Jlc3RvcmUgbmN1cnNlc19zY3Jfc2V0IG5jdXJzZXNfc2NybCBuY3Vyc2VzX3Nob3dfcGFuZWwgbmN1cnNlc19zbGtfYXR0ciBuY3Vyc2VzX3Nsa19hdHRyb2ZmIG5jdXJzZXNfc2xrX2F0dHJvbiBuY3Vyc2VzX3Nsa19hdHRyc2V0IG5jdXJzZXNfc2xrX2NsZWFyIG5jdXJzZXNfc2xrX2NvbG9yIG5jdXJzZXNfc2xrX2luaXQgbmN1cnNlc19zbGtfbm91dHJlZnJlc2ggbmN1cnNlc19zbGtfcmVmcmVzaCBuY3Vyc2VzX3Nsa19yZXN0b3JlIG5jdXJzZXNfc2xrX3NldCBuY3Vyc2VzX3Nsa190b3VjaCBuY3Vyc2VzX3N0YW5kZW5kIG5jdXJzZXNfc3RhbmRvdXQgbmN1cnNlc19zdGFydF9jb2xvciBuY3Vyc2VzX3Rlcm1hdHRycyBuY3Vyc2VzX3Rlcm1uYW1lIG5jdXJzZXNfdGltZW91dCBuY3Vyc2VzX3RvcF9wYW5lbCBuY3Vyc2VzX3R5cGVhaGVhZCBuY3Vyc2VzX3VuZ2V0Y2ggbmN1cnNlc191bmdldG1vdXNlIG5jdXJzZXNfdXBkYXRlX3BhbmVscyBuY3Vyc2VzX3VzZV9kZWZhdWx0X2NvbG9ycyBuY3Vyc2VzX3VzZV9lbnYgbmN1cnNlc191c2VfZXh0ZW5kZWRfbmFtZXMgbmN1cnNlc192aWRhdHRyIG5jdXJzZXNfdmxpbmUgbmN1cnNlc193YWRkY2ggbmN1cnNlc193YWRkc3RyIG5jdXJzZXNfd2F0dHJvZmYgbmN1cnNlc193YXR0cm9uIG5jdXJzZXNfd2F0dHJzZXQgbmN1cnNlc193Ym9yZGVyIG5jdXJzZXNfd2NsZWFyIG5jdXJzZXNfd2NvbG9yX3NldCBuY3Vyc2VzX3dlcmFzZSBuY3Vyc2VzX3dnZXRjaCBuY3Vyc2VzX3dobGluZSBuY3Vyc2VzX3dtb3VzZV90cmFmbyBuY3Vyc2VzX3dtb3ZlIG5jdXJzZXNfd25vdXRyZWZyZXNoIG5jdXJzZXNfd3JlZnJlc2ggbmN1cnNlc193c3RhbmRlbmQgbmN1cnNlc193c3RhbmRvdXQgbmN1cnNlc193dmxpbmUJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJY2hlY2tkbnNyciBjbG9zZWxvZyBkZWJ1Z2dlcl9vZmYgZGVidWdnZXJfb24gZGVmaW5lX3N5c2xvZ192YXJpYWJsZXMgZG5zX2NoZWNrX3JlY29yZCBkbnNfZ2V0X214IGRuc19nZXRfcmVjb3JkIGZzb2Nrb3BlbiBnZXRob3N0YnlhZGRyIGdldGhvc3RieW5hbWUgZ2V0aG9zdGJ5bmFtZWwgZ2V0bXhyciBnZXRwcm90b2J5bmFtZSBnZXRwcm90b2J5bnVtYmVyIGdldHNlcnZieW5hbWUgZ2V0c2VydmJ5cG9ydCBpcDJsb25nIGxvbmcyaXAgb3BlbmxvZyBwZnNvY2tvcGVuIHNvY2tldF9nZXRfc3RhdHVzIHNvY2tldF9zZXRfYmxvY2tpbmcgc29ja2V0X3NldF90aW1lb3V0IHN5c2xvZwljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwl5cF9hbGwgeXBfY2F0IHlwX2Vycl9zdHJpbmcgeXBfZXJybm8geXBfZmlyc3QgeXBfZ2V0X2RlZmF1bHRfZG9tYWluIHlwX21hc3RlciB5cF9tYXRjaCB5cF9uZXh0IHlwX29yZGVyCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCW5vdGVzX2JvZHkgbm90ZXNfY29weV9kYiBub3Rlc19jcmVhdGVfZGIgbm90ZXNfY3JlYXRlX25vdGUgbm90ZXNfZHJvcF9kYiBub3Rlc19maW5kX25vdGUgbm90ZXNfaGVhZGVyX2luZm8gbm90ZXNfbGlzdF9tc2dzIG5vdGVzX21hcmtfcmVhZCBub3Rlc19tYXJrX3VucmVhZCBub3Rlc19uYXZfY3JlYXRlIG5vdGVzX3NlYXJjaCBub3Rlc191bnJlYWQgbm90ZXNfdmVyc2lvbgljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwluc2FwaV9yZXF1ZXN0X2hlYWRlcnMgbnNhcGlfcmVzcG9uc2VfaGVhZGVycyBuc2FwaV92aXJ0dWFsCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWFnZ3JlZ2F0ZV9pbmZvIGFnZ3JlZ2F0ZV9tZXRob2RzX2J5X2xpc3QgYWdncmVnYXRlX21ldGhvZHNfYnlfcmVnZXhwIGFnZ3JlZ2F0ZV9tZXRob2RzIGFnZ3JlZ2F0ZV9wcm9wZXJ0aWVzX2J5X2xpc3QgYWdncmVnYXRlX3Byb3BlcnRpZXNfYnlfcmVnZXhwIGFnZ3JlZ2F0ZV9wcm9wZXJ0aWVzIGFnZ3JlZ2F0ZSBhZ2dyZWdhdGlvbl9pbmZvIGRlYWdncmVnYXRlCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCW9jaWJpbmRieW5hbWUgb2NpY2FuY2VsIG9jaWNsb3NlbG9iIG9jaWNvbGxhcHBlbmQgb2NpY29sbGFzc2lnbiBvY2ljb2xsYXNzaWduZWxlbSBvY2ljb2xsZ2V0ZWxlbSBvY2ljb2xsbWF4IG9jaWNvbGxzaXplIG9jaWNvbGx0cmltIG9jaWNvbHVtbmlzbnVsbCBvY2ljb2x1bW5uYW1lIG9jaWNvbHVtbnByZWNpc2lvbiBvY2ljb2x1bW5zY2FsZSBvY2ljb2x1bW5zaXplIG9jaWNvbHVtbnR5cGUgb2NpY29sdW1udHlwZXJhdyBvY2ljb21taXQgb2NpZGVmaW5lYnluYW1lIG9jaWVycm9yIG9jaWV4ZWN1dGUgb2NpZmV0Y2ggb2NpZmV0Y2hpbnRvIG9jaWZldGNoc3RhdGVtZW50IG9jaWZyZWVjb2xsZWN0aW9uIG9jaWZyZWVjdXJzb3Igb2NpZnJlZWRlc2Mgb2NpZnJlZXN0YXRlbWVudCBvY2lpbnRlcm5hbGRlYnVnIG9jaWxvYWRsb2Igb2NpbG9nb2ZmIG9jaWxvZ29uIG9jaW5ld2NvbGxlY3Rpb24gb2NpbmV3Y3Vyc29yIG9jaW5ld2Rlc2NyaXB0b3Igb2NpbmxvZ29uIG9jaW51bWNvbHMgb2NpcGFyc2Ugb2NpcGxvZ29uIG9jaXJlc3VsdCBvY2lyb2xsYmFjayBvY2lyb3djb3VudCBvY2lzYXZlbG9iIG9jaXNhdmVsb2JmaWxlIG9jaXNlcnZlcnZlcnNpb24gb2Npc2V0cHJlZmV0Y2ggb2Npc3RhdGVtZW50dHlwZSBvY2l3cml0ZWxvYnRvZmlsZSBvY2l3cml0ZXRlbXBvcmFyeWxvYgljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlvZGJjX2F1dG9jb21taXQgb2RiY19iaW5tb2RlIG9kYmNfY2xvc2VfYWxsIG9kYmNfY2xvc2Ugb2RiY19jb2x1bW5wcml2aWxlZ2VzIG9kYmNfY29sdW1ucyBvZGJjX2NvbW1pdCBvZGJjX2Nvbm5lY3Qgb2RiY19jdXJzb3Igb2RiY19kYXRhX3NvdXJjZSBvZGJjX2RvIG9kYmNfZXJyb3Igb2RiY19lcnJvcm1zZyBvZGJjX2V4ZWMgb2RiY19leGVjdXRlIG9kYmNfZmV0Y2hfYXJyYXkgb2RiY19mZXRjaF9pbnRvIG9kYmNfZmV0Y2hfb2JqZWN0IG9kYmNfZmV0Y2hfcm93IG9kYmNfZmllbGRfbGVuIG9kYmNfZmllbGRfbmFtZSBvZGJjX2ZpZWxkX251bSBvZGJjX2ZpZWxkX3ByZWNpc2lvbiBvZGJjX2ZpZWxkX3NjYWxlIG9kYmNfZmllbGRfdHlwZSBvZGJjX2ZvcmVpZ25rZXlzIG9kYmNfZnJlZV9yZXN1bHQgb2RiY19nZXR0eXBlaW5mbyBvZGJjX2xvbmdyZWFkbGVuIG9kYmNfbmV4dF9yZXN1bHQgb2RiY19udW1fZmllbGRzIG9kYmNfbnVtX3Jvd3Mgb2RiY19wY29ubmVjdCBvZGJjX3ByZXBhcmUgb2RiY19wcmltYXJ5a2V5cyBvZGJjX3Byb2NlZHVyZWNvbHVtbnMgb2RiY19wcm9jZWR1cmVzIG9kYmNfcmVzdWx0X2FsbCBvZGJjX3Jlc3VsdCBvZGJjX3JvbGxiYWNrIG9kYmNfc2V0b3B0aW9uIG9kYmNfc3BlY2lhbGNvbHVtbnMgb2RiY19zdGF0aXN0aWNzIG9kYmNfdGFibGVwcml2aWxlZ2VzIG9kYmNfdGFibGVzCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCW9wZW5zc2xfY3NyX2V4cG9ydF90b19maWxlIG9wZW5zc2xfY3NyX2V4cG9ydCBvcGVuc3NsX2Nzcl9uZXcgb3BlbnNzbF9jc3Jfc2lnbiBvcGVuc3NsX2Vycm9yX3N0cmluZyBvcGVuc3NsX2ZyZWVfa2V5IG9wZW5zc2xfZ2V0X3ByaXZhdGVrZXkgb3BlbnNzbF9nZXRfcHVibGlja2V5IG9wZW5zc2xfb3BlbiBvcGVuc3NsX3BrY3M3X2RlY3J5cHQgb3BlbnNzbF9wa2NzN19lbmNyeXB0IG9wZW5zc2xfcGtjczdfc2lnbiBvcGVuc3NsX3BrY3M3X3ZlcmlmeSBvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGUgb3BlbnNzbF9wa2V5X2V4cG9ydCBvcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGUgb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMgb3BlbnNzbF9wa2V5X25ldyBvcGVuc3NsX3ByaXZhdGVfZGVjcnlwdCBvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCBvcGVuc3NsX3B1YmxpY19kZWNyeXB0IG9wZW5zc2xfcHVibGljX2VuY3J5cHQgb3BlbnNzbF9zZWFsIG9wZW5zc2xfc2lnbiBvcGVuc3NsX3ZlcmlmeSBvcGVuc3NsX3g1MDlfY2hlY2tfcHJpdmF0ZV9rZXkgb3BlbnNzbF94NTA5X2NoZWNrcHVycG9zZSBvcGVuc3NsX3g1MDlfZXhwb3J0X3RvX2ZpbGUgb3BlbnNzbF94NTA5X2V4cG9ydCBvcGVuc3NsX3g1MDlfZnJlZSBvcGVuc3NsX3g1MDlfcGFyc2Ugb3BlbnNzbF94NTA5X3JlYWQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJb3JhX2JpbmQgb3JhX2Nsb3NlIG9yYV9jb2x1bW5uYW1lIG9yYV9jb2x1bW5zaXplIG9yYV9jb2x1bW50eXBlIG9yYV9jb21taXQgb3JhX2NvbW1pdG9mZiBvcmFfY29tbWl0b24gb3JhX2RvIG9yYV9lcnJvciBvcmFfZXJyb3Jjb2RlIG9yYV9leGVjIG9yYV9mZXRjaF9pbnRvIG9yYV9mZXRjaCBvcmFfZ2V0Y29sdW1uIG9yYV9sb2dvZmYgb3JhX2xvZ29uIG9yYV9udW1jb2xzIG9yYV9udW1yb3dzIG9yYV9vcGVuIG9yYV9wYXJzZSBvcmFfcGxvZ29uIG9yYV9yb2xsYmFjawljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlmbHVzaCBvYl9jbGVhbiBvYl9lbmRfY2xlYW4gb2JfZW5kX2ZsdXNoIG9iX2ZsdXNoIG9iX2dldF9jbGVhbiBvYl9nZXRfY29udGVudHMgb2JfZ2V0X2ZsdXNoIG9iX2dldF9sZW5ndGggb2JfZ2V0X2xldmVsIG9iX2dldF9zdGF0dXMgb2JfZ3poYW5kbGVyIG9iX2ltcGxpY2l0X2ZsdXNoIG9iX2xpc3RfaGFuZGxlcnMgb2Jfc3RhcnQgb3V0cHV0X2FkZF9yZXdyaXRlX3ZhciBvdXRwdXRfcmVzZXRfcmV3cml0ZV92YXJzCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCW92ZXJsb2FkCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCW92cmltb3NfY2xvc2Ugb3ZyaW1vc19jb21taXQgb3ZyaW1vc19jb25uZWN0IG92cmltb3NfY3Vyc29yIG92cmltb3NfZXhlYyBvdnJpbW9zX2V4ZWN1dGUgb3ZyaW1vc19mZXRjaF9pbnRvIG92cmltb3NfZmV0Y2hfcm93IG92cmltb3NfZmllbGRfbGVuIG92cmltb3NfZmllbGRfbmFtZSBvdnJpbW9zX2ZpZWxkX251bSBvdnJpbW9zX2ZpZWxkX3R5cGUgb3ZyaW1vc19mcmVlX3Jlc3VsdCBvdnJpbW9zX2xvbmdyZWFkbGVuIG92cmltb3NfbnVtX2ZpZWxkcyBvdnJpbW9zX251bV9yb3dzIG92cmltb3NfcHJlcGFyZSBvdnJpbW9zX3Jlc3VsdF9hbGwgb3ZyaW1vc19yZXN1bHQgb3ZyaW1vc19yb2xsYmFjawljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlwY250bF9leGVjIHBjbnRsX2ZvcmsgcGNudGxfc2lnbmFsIHBjbnRsX3dhaXRwaWQgcGNudGxfd2V4aXRzdGF0dXMgcGNudGxfd2lmZXhpdGVkIHBjbnRsX3dpZnNpZ25hbGVkIHBjbnRsX3dpZnN0b3BwZWQgcGNudGxfd3N0b3BzaWcgcGNudGxfd3Rlcm1zaWcJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJcHJlZ19ncmVwIHByZWdfbWF0Y2hfYWxsIHByZWdfbWF0Y2ggcHJlZ19xdW90ZSBwcmVnX3JlcGxhY2VfY2FsbGJhY2sgcHJlZ19yZXBsYWNlIHByZWdfc3BsaXQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJcGRmX2FkZF9hbm5vdGF0aW9uIHBkZl9hZGRfYm9va21hcmsgcGRmX2FkZF9sYXVuY2hsaW5rIHBkZl9hZGRfbG9jYWxsaW5rIHBkZl9hZGRfbm90ZSBwZGZfYWRkX291dGxpbmUgcGRmX2FkZF9wZGZsaW5rIHBkZl9hZGRfdGh1bWJuYWlsIHBkZl9hZGRfd2VibGluayBwZGZfYXJjIHBkZl9hcmNuIHBkZl9hdHRhY2hfZmlsZSBwZGZfYmVnaW5fcGFnZSBwZGZfYmVnaW5fcGF0dGVybiBwZGZfYmVnaW5fdGVtcGxhdGUgcGRmX2NpcmNsZSBwZGZfY2xpcCBwZGZfY2xvc2VfaW1hZ2UgcGRmX2Nsb3NlX3BkaV9wYWdlIHBkZl9jbG9zZV9wZGkgcGRmX2Nsb3NlIHBkZl9jbG9zZXBhdGhfZmlsbF9zdHJva2UgcGRmX2Nsb3NlcGF0aF9zdHJva2UgcGRmX2Nsb3NlcGF0aCBwZGZfY29uY2F0IHBkZl9jb250aW51ZV90ZXh0IHBkZl9jdXJ2ZXRvIHBkZl9kZWxldGUgcGRmX2VuZF9wYWdlIHBkZl9lbmRfcGF0dGVybiBwZGZfZW5kX3RlbXBsYXRlIHBkZl9lbmRwYXRoIHBkZl9maWxsX3N0cm9rZSBwZGZfZmlsbCBwZGZfZmluZGZvbnQgcGRmX2dldF9idWZmZXIgcGRmX2dldF9mb250IHBkZl9nZXRfZm9udG5hbWUgcGRmX2dldF9mb250c2l6ZSBwZGZfZ2V0X2ltYWdlX2hlaWdodCBwZGZfZ2V0X2ltYWdlX3dpZHRoIHBkZl9nZXRfbWFqb3J2ZXJzaW9uIHBkZl9nZXRfbWlub3J2ZXJzaW9uIHBkZl9nZXRfcGFyYW1ldGVyIHBkZl9nZXRfcGRpX3BhcmFtZXRlciBwZGZfZ2V0X3BkaV92YWx1ZSBwZGZfZ2V0X3ZhbHVlIHBkZl9pbml0Z3JhcGhpY3MgcGRmX2xpbmV0byBwZGZfbWFrZXNwb3Rjb2xvciBwZGZfbW92ZXRvIHBkZl9uZXcgcGRmX29wZW5fQ0NJVFQgcGRmX29wZW5fZmlsZSBwZGZfb3Blbl9naWYgcGRmX29wZW5faW1hZ2VfZmlsZSBwZGZfb3Blbl9pbWFnZSBwZGZfb3Blbl9qcGVnIHBkZl9vcGVuX21lbW9yeV9pbWFnZSBwZGZfb3Blbl9wZGlfcGFnZSBwZGZfb3Blbl9wZGkgcGRmX29wZW5fcG5nIHBkZl9vcGVuX3RpZmYgcGRmX29wZW4gcGRmX3BsYWNlX2ltYWdlIHBkZl9wbGFjZV9wZGlfcGFnZSBwZGZfcmVjdCBwZGZfcmVzdG9yZSBwZGZfcm90YXRlIHBkZl9zYXZlIHBkZl9zY2FsZSBwZGZfc2V0X2JvcmRlcl9jb2xvciBwZGZfc2V0X2JvcmRlcl9kYXNoIHBkZl9zZXRfYm9yZGVyX3N0eWxlIHBkZl9zZXRfY2hhcl9zcGFjaW5nIHBkZl9zZXRfZHVyYXRpb24gcGRmX3NldF9mb250IHBkZl9zZXRfaG9yaXpfc2NhbGluZyBwZGZfc2V0X2luZm9fYXV0aG9yIHBkZl9zZXRfaW5mb19jcmVhdG9yIHBkZl9zZXRfaW5mb19rZXl3b3JkcyBwZGZfc2V0X2luZm9fc3ViamVjdCBwZGZfc2V0X2luZm9fdGl0bGUgcGRmX3NldF9pbmZvIHBkZl9zZXRfbGVhZGluZyBwZGZfc2V0X3BhcmFtZXRlciBwZGZfc2V0X3RleHRfbWF0cml4IHBkZl9zZXRfdGV4dF9wb3MgcGRmX3NldF90ZXh0X3JlbmRlcmluZyBwZGZfc2V0X3RleHRfcmlzZSBwZGZfc2V0X3ZhbHVlIHBkZl9zZXRfd29yZF9zcGFjaW5nIHBkZl9zZXRjb2xvciBwZGZfc2V0ZGFzaCBwZGZfc2V0ZmxhdCBwZGZfc2V0Zm9udCBwZGZfc2V0Z3JheV9maWxsIHBkZl9zZXRncmF5X3N0cm9rZSBwZGZfc2V0Z3JheSBwZGZfc2V0bGluZWNhcCBwZGZfc2V0bGluZWpvaW4gcGRmX3NldGxpbmV3aWR0aCBwZGZfc2V0bWF0cml4IHBkZl9zZXRtaXRlcmxpbWl0IHBkZl9zZXRwb2x5ZGFzaCBwZGZfc2V0cmdiY29sb3JfZmlsbCBwZGZfc2V0cmdiY29sb3Jfc3Ryb2tlIHBkZl9zZXRyZ2Jjb2xvciBwZGZfc2hvd19ib3hlZCBwZGZfc2hvd194eSBwZGZfc2hvdyBwZGZfc2tldyBwZGZfc3RyaW5nd2lkdGggcGRmX3N0cm9rZSBwZGZfdHJhbnNsYXRlCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXBmcHJvX2NsZWFudXAgcGZwcm9faW5pdCBwZnByb19wcm9jZXNzX3JhdyBwZnByb19wcm9jZXNzIHBmcHJvX3ZlcnNpb24JY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJcGdfYWZmZWN0ZWRfcm93cyBwZ19jYW5jZWxfcXVlcnkgcGdfY2xpZW50X2VuY29kaW5nIHBnX2Nsb3NlIHBnX2Nvbm5lY3QgcGdfY29ubmVjdGlvbl9idXN5IHBnX2Nvbm5lY3Rpb25fcmVzZXQgcGdfY29ubmVjdGlvbl9zdGF0dXMgcGdfY29udmVydCBwZ19jb3B5X2Zyb20gcGdfY29weV90byBwZ19kYm5hbWUgcGdfZGVsZXRlIHBnX2VuZF9jb3B5IHBnX2VzY2FwZV9ieXRlYSBwZ19lc2NhcGVfc3RyaW5nIHBnX2ZldGNoX2FsbCBwZ19mZXRjaF9hcnJheSBwZ19mZXRjaF9hc3NvYyBwZ19mZXRjaF9vYmplY3QgcGdfZmV0Y2hfcmVzdWx0IHBnX2ZldGNoX3JvdyBwZ19maWVsZF9pc19udWxsIHBnX2ZpZWxkX25hbWUgcGdfZmllbGRfbnVtIHBnX2ZpZWxkX3BydGxlbiBwZ19maWVsZF9zaXplIHBnX2ZpZWxkX3R5cGUgcGdfZnJlZV9yZXN1bHQgcGdfZ2V0X25vdGlmeSBwZ19nZXRfcGlkIHBnX2dldF9yZXN1bHQgcGdfaG9zdCBwZ19pbnNlcnQgcGdfbGFzdF9lcnJvciBwZ19sYXN0X25vdGljZSBwZ19sYXN0X29pZCBwZ19sb19jbG9zZSBwZ19sb19jcmVhdGUgcGdfbG9fZXhwb3J0IHBnX2xvX2ltcG9ydCBwZ19sb19vcGVuIHBnX2xvX3JlYWRfYWxsIHBnX2xvX3JlYWQgcGdfbG9fc2VlayBwZ19sb190ZWxsIHBnX2xvX3VubGluayBwZ19sb193cml0ZSBwZ19tZXRhX2RhdGEgcGdfbnVtX2ZpZWxkcyBwZ19udW1fcm93cyBwZ19vcHRpb25zIHBnX3Bjb25uZWN0IHBnX3BpbmcgcGdfcG9ydCBwZ19wdXRfbGluZSBwZ19xdWVyeSBwZ19yZXN1bHRfZXJyb3IgcGdfcmVzdWx0X3NlZWsgcGdfcmVzdWx0X3N0YXR1cyBwZ19zZWxlY3QgcGdfc2VuZF9xdWVyeSBwZ19zZXRfY2xpZW50X2VuY29kaW5nIHBnX3RyYWNlIHBnX3R0eSBwZ191bmVzY2FwZV9ieXRlYSBwZ191bnRyYWNlIHBnX3VwZGF0ZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlwb3NpeF9jdGVybWlkIHBvc2l4X2dldF9sYXN0X2Vycm9yIHBvc2l4X2dldGN3ZCBwb3NpeF9nZXRlZ2lkIHBvc2l4X2dldGV1aWQgcG9zaXhfZ2V0Z2lkIHBvc2l4X2dldGdyZ2lkIHBvc2l4X2dldGdybmFtIHBvc2l4X2dldGdyb3VwcyBwb3NpeF9nZXRsb2dpbiBwb3NpeF9nZXRwZ2lkIHBvc2l4X2dldHBncnAgcG9zaXhfZ2V0cGlkIHBvc2l4X2dldHBwaWQgcG9zaXhfZ2V0cHduYW0gcG9zaXhfZ2V0cHd1aWQgcG9zaXhfZ2V0cmxpbWl0IHBvc2l4X2dldHNpZCBwb3NpeF9nZXR1aWQgcG9zaXhfaXNhdHR5IHBvc2l4X2tpbGwgcG9zaXhfbWtmaWZvIHBvc2l4X3NldGVnaWQgcG9zaXhfc2V0ZXVpZCBwb3NpeF9zZXRnaWQgcG9zaXhfc2V0cGdpZCBwb3NpeF9zZXRzaWQgcG9zaXhfc2V0dWlkIHBvc2l4X3N0cmVycm9yIHBvc2l4X3RpbWVzIHBvc2l4X3R0eW5hbWUgcG9zaXhfdW5hbWUJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJcHJpbnRlcl9hYm9ydCBwcmludGVyX2Nsb3NlIHByaW50ZXJfY3JlYXRlX2JydXNoIHByaW50ZXJfY3JlYXRlX2RjIHByaW50ZXJfY3JlYXRlX2ZvbnQgcHJpbnRlcl9jcmVhdGVfcGVuIHByaW50ZXJfZGVsZXRlX2JydXNoIHByaW50ZXJfZGVsZXRlX2RjIHByaW50ZXJfZGVsZXRlX2ZvbnQgcHJpbnRlcl9kZWxldGVfcGVuIHByaW50ZXJfZHJhd19ibXAgcHJpbnRlcl9kcmF3X2Nob3JkIHByaW50ZXJfZHJhd19lbGlwc2UgcHJpbnRlcl9kcmF3X2xpbmUgcHJpbnRlcl9kcmF3X3BpZSBwcmludGVyX2RyYXdfcmVjdGFuZ2xlIHByaW50ZXJfZHJhd19yb3VuZHJlY3QgcHJpbnRlcl9kcmF3X3RleHQgcHJpbnRlcl9lbmRfZG9jIHByaW50ZXJfZW5kX3BhZ2UgcHJpbnRlcl9nZXRfb3B0aW9uIHByaW50ZXJfbGlzdCBwcmludGVyX2xvZ2ljYWxfZm9udGhlaWdodCBwcmludGVyX29wZW4gcHJpbnRlcl9zZWxlY3RfYnJ1c2ggcHJpbnRlcl9zZWxlY3RfZm9udCBwcmludGVyX3NlbGVjdF9wZW4gcHJpbnRlcl9zZXRfb3B0aW9uIHByaW50ZXJfc3RhcnRfZG9jIHByaW50ZXJfc3RhcnRfcGFnZSBwcmludGVyX3dyaXRlCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXBzcGVsbF9hZGRfdG9fcGVyc29uYWwgcHNwZWxsX2FkZF90b19zZXNzaW9uIHBzcGVsbF9jaGVjayBwc3BlbGxfY2xlYXJfc2Vzc2lvbiBwc3BlbGxfY29uZmlnX2NyZWF0ZSBwc3BlbGxfY29uZmlnX2lnbm9yZSBwc3BlbGxfY29uZmlnX21vZGUgcHNwZWxsX2NvbmZpZ19wZXJzb25hbCBwc3BlbGxfY29uZmlnX3JlcGwgcHNwZWxsX2NvbmZpZ19ydW50b2dldGhlciBwc3BlbGxfY29uZmlnX3NhdmVfcmVwbCBwc3BlbGxfbmV3X2NvbmZpZyBwc3BlbGxfbmV3X3BlcnNvbmFsIHBzcGVsbF9uZXcgcHNwZWxsX3NhdmVfd29yZGxpc3QgcHNwZWxsX3N0b3JlX3JlcGxhY2VtZW50IHBzcGVsbF9zdWdnZXN0CWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXFkb21fZXJyb3IgcWRvbV90cmVlCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXJlYWRsaW5lX2FkZF9oaXN0b3J5IHJlYWRsaW5lX2NsZWFyX2hpc3RvcnkgcmVhZGxpbmVfY29tcGxldGlvbl9mdW5jdGlvbiByZWFkbGluZV9pbmZvIHJlYWRsaW5lX2xpc3RfaGlzdG9yeSByZWFkbGluZV9yZWFkX2hpc3RvcnkgcmVhZGxpbmVfd3JpdGVfaGlzdG9yeSByZWFkbGluZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlyZWNvZGVfZmlsZSByZWNvZGVfc3RyaW5nIHJlY29kZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwllcmVnX3JlcGxhY2UgZXJlZyBlcmVnaV9yZXBsYWNlIGVyZWdpIHNwbGl0IHNwbGl0aSBzcWxfcmVnY2FzZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlmdG9rIG1zZ19nZXRfcXVldWUgbXNnX3JlY2VpdmUgbXNnX3JlbW92ZV9xdWV1ZSBtc2dfc2VuZCBtc2dfc2V0X3F1ZXVlIG1zZ19zdGF0X3F1ZXVlIHNlbV9hY3F1aXJlIHNlbV9nZXQgc2VtX3JlbGVhc2Ugc2VtX3JlbW92ZSBzaG1fYXR0YWNoIHNobV9kZXRhY2ggc2htX2dldF92YXIgc2htX3B1dF92YXIgc2htX3JlbW92ZV92YXIgc2htX3JlbW92ZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlzZXNhbV9hZmZlY3RlZF9yb3dzIHNlc2FtX2NvbW1pdCBzZXNhbV9jb25uZWN0IHNlc2FtX2RpYWdub3N0aWMgc2VzYW1fZGlzY29ubmVjdCBzZXNhbV9lcnJvcm1zZyBzZXNhbV9leGVjaW1tIHNlc2FtX2ZldGNoX2FycmF5IHNlc2FtX2ZldGNoX3Jlc3VsdCBzZXNhbV9mZXRjaF9yb3cgc2VzYW1fZmllbGRfYXJyYXkgc2VzYW1fZmllbGRfbmFtZSBzZXNhbV9mcmVlX3Jlc3VsdCBzZXNhbV9udW1fZmllbGRzIHNlc2FtX3F1ZXJ5IHNlc2FtX3JvbGxiYWNrIHNlc2FtX3NlZWtfcm93IHNlc2FtX3NldHRyYW5zYWN0aW9uCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXNlc3Npb25fY2FjaGVfZXhwaXJlIHNlc3Npb25fY2FjaGVfbGltaXRlciBzZXNzaW9uX2RlY29kZSBzZXNzaW9uX2Rlc3Ryb3kgc2Vzc2lvbl9lbmNvZGUgc2Vzc2lvbl9nZXRfY29va2llX3BhcmFtcyBzZXNzaW9uX2lkIHNlc3Npb25faXNfcmVnaXN0ZXJlZCBzZXNzaW9uX21vZHVsZV9uYW1lIHNlc3Npb25fbmFtZSBzZXNzaW9uX3JlZ2VuZXJhdGVfaWQgc2Vzc2lvbl9yZWdpc3RlciBzZXNzaW9uX3NhdmVfcGF0aCBzZXNzaW9uX3NldF9jb29raWVfcGFyYW1zIHNlc3Npb25fc2V0X3NhdmVfaGFuZGxlciBzZXNzaW9uX3N0YXJ0IHNlc3Npb25fdW5yZWdpc3RlciBzZXNzaW9uX3Vuc2V0IHNlc3Npb25fd3JpdGVfY2xvc2UJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJc2htb3BfY2xvc2Ugc2htb3BfZGVsZXRlIHNobW9wX29wZW4gc2htb3BfcmVhZCBzaG1vcF9zaXplIHNobW9wX3dyaXRlCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXNubXBfZ2V0X3F1aWNrX3ByaW50IHNubXBfc2V0X3F1aWNrX3ByaW50IHNubXBnZXQgc25tcHJlYWx3YWxrIHNubXBzZXQgc25tcHdhbGsgc25tcHdhbGtvaWQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJc29ja2V0X2FjY2VwdCBzb2NrZXRfYmluZCBzb2NrZXRfY2xlYXJfZXJyb3Igc29ja2V0X2Nsb3NlIHNvY2tldF9jb25uZWN0IHNvY2tldF9jcmVhdGVfbGlzdGVuIHNvY2tldF9jcmVhdGVfcGFpciBzb2NrZXRfY3JlYXRlIHNvY2tldF9nZXRfb3B0aW9uIHNvY2tldF9nZXRwZWVybmFtZSBzb2NrZXRfZ2V0c29ja25hbWUgc29ja2V0X2lvdmVjX2FkZCBzb2NrZXRfaW92ZWNfYWxsb2Mgc29ja2V0X2lvdmVjX2RlbGV0ZSBzb2NrZXRfaW92ZWNfZmV0Y2ggc29ja2V0X2lvdmVjX2ZyZWUgc29ja2V0X2lvdmVjX3NldCBzb2NrZXRfbGFzdF9lcnJvciBzb2NrZXRfbGlzdGVuIHNvY2tldF9yZWFkIHNvY2tldF9yZWFkdiBzb2NrZXRfcmVjdiBzb2NrZXRfcmVjdmZyb20gc29ja2V0X3JlY3Ztc2cgc29ja2V0X3NlbGVjdCBzb2NrZXRfc2VuZCBzb2NrZXRfc2VuZG1zZyBzb2NrZXRfc2VuZHRvIHNvY2tldF9zZXRfYmxvY2sgc29ja2V0X3NldF9ub25ibG9jayBzb2NrZXRfc2V0X29wdGlvbiBzb2NrZXRfc2h1dGRvd24gc29ja2V0X3N0cmVycm9yIHNvY2tldF93cml0ZSBzb2NrZXRfd3JpdGV2CWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXNxbGl0ZV9hcnJheV9xdWVyeSBzcWxpdGVfYnVzeV90aW1lb3V0IHNxbGl0ZV9jaGFuZ2VzIHNxbGl0ZV9jbG9zZSBzcWxpdGVfY29sdW1uIHNxbGl0ZV9jcmVhdGVfYWdncmVnYXRlIHNxbGl0ZV9jcmVhdGVfZnVuY3Rpb24gc3FsaXRlX2N1cnJlbnQgc3FsaXRlX2Vycm9yX3N0cmluZyBzcWxpdGVfZXNjYXBlX3N0cmluZyBzcWxpdGVfZmV0Y2hfYXJyYXkgc3FsaXRlX2ZldGNoX3NpbmdsZSBzcWxpdGVfZmV0Y2hfc3RyaW5nIHNxbGl0ZV9maWVsZF9uYW1lIHNxbGl0ZV9oYXNfbW9yZSBzcWxpdGVfbGFzdF9lcnJvciBzcWxpdGVfbGFzdF9pbnNlcnRfcm93aWQgc3FsaXRlX2xpYmVuY29kaW5nIHNxbGl0ZV9saWJ2ZXJzaW9uIHNxbGl0ZV9uZXh0IHNxbGl0ZV9udW1fZmllbGRzIHNxbGl0ZV9udW1fcm93cyBzcWxpdGVfb3BlbiBzcWxpdGVfcG9wZW4gc3FsaXRlX3F1ZXJ5IHNxbGl0ZV9yZXdpbmQgc3FsaXRlX3NlZWsgc3FsaXRlX3VkZl9kZWNvZGVfYmluYXJ5IHNxbGl0ZV91ZGZfZW5jb2RlX2JpbmFyeSBzcWxpdGVfdW5idWZmZXJlZF9xdWVyeQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlzdHJlYW1fY29udGV4dF9jcmVhdGUgc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbnMgc3RyZWFtX2NvbnRleHRfc2V0X29wdGlvbiBzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSBzdHJlYW1fZmlsdGVyX2FwcGVuZCBzdHJlYW1fZmlsdGVyX3ByZXBlbmQgc3RyZWFtX2ZpbHRlcl9yZWdpc3RlciBzdHJlYW1fZ2V0X2NvbnRlbnRzIHN0cmVhbV9nZXRfZmlsdGVycyBzdHJlYW1fZ2V0X2xpbmUgc3RyZWFtX2dldF9tZXRhX2RhdGEgc3RyZWFtX2dldF90cmFuc3BvcnRzIHN0cmVhbV9nZXRfd3JhcHBlcnMgc3RyZWFtX3JlZ2lzdGVyX3dyYXBwZXIgc3RyZWFtX3NlbGVjdCBzdHJlYW1fc2V0X2Jsb2NraW5nIHN0cmVhbV9zZXRfdGltZW91dCBzdHJlYW1fc2V0X3dyaXRlX2J1ZmZlciBzdHJlYW1fc29ja2V0X2FjY2VwdCBzdHJlYW1fc29ja2V0X2NsaWVudCBzdHJlYW1fc29ja2V0X2dldF9uYW1lIHN0cmVhbV9zb2NrZXRfcmVjdmZyb20gc3RyZWFtX3NvY2tldF9zZW5kdG8gc3RyZWFtX3NvY2tldF9zZXJ2ZXIgc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXIJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJYWRkY3NsYXNoZXMgYWRkc2xhc2hlcyBiaW4yaGV4IGNob3AgY2hyIGNodW5rX3NwbGl0IGNvbnZlcnRfY3lyX3N0cmluZyBjb3VudF9jaGFycyBjcmMzMiBjcnlwdCBlY2hvIGV4cGxvZGUgZnByaW50ZiBnZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZSBoZWJyZXYgaGVicmV2YyBodG1sX2VudGl0eV9kZWNvZGUgaHRtbGVudGl0aWVzIGh0bWxzcGVjaWFsY2hhcnMgaW1wbG9kZSBqb2luIGxldmVuc2h0ZWluIGxvY2FsZWNvbnYgbHRyaW0gbWQ1X2ZpbGUgbWQ1IG1ldGFwaG9uZSBtb25leV9mb3JtYXQgbmxfbGFuZ2luZm8gbmwyYnIgbnVtYmVyX2Zvcm1hdCBvcmQgcGFyc2Vfc3RyIHByaW50IHByaW50ZiBxdW90ZWRfcHJpbnRhYmxlX2RlY29kZSBxdW90ZW1ldGEgcnRyaW0gc2V0bG9jYWxlIHNoYTFfZmlsZSBzaGExIHNpbWlsYXJfdGV4dCBzb3VuZGV4IHNwcmludGYgc3NjYW5mIHN0cl9pcmVwbGFjZSBzdHJfcGFkIHN0cl9yZXBlYXQgc3RyX3JlcGxhY2Ugc3RyX3JvdDEzIHN0cl9zaHVmZmxlIHN0cl9zcGxpdCBzdHJfd29yZF9jb3VudCBzdHJjYXNlY21wIHN0cmNociBzdHJjbXAgc3RyY29sbCBzdHJjc3BuIHN0cmlwX3RhZ3Mgc3RyaXBjc2xhc2hlcyBzdHJpcG9zIHN0cmlwc2xhc2hlcyBzdHJpc3RyIHN0cmxlbiBzdHJuYXRjYXNlY21wIHN0cm5hdGNtcCBzdHJuY2FzZWNtcCBzdHJuY21wIHN0cnBvcyBzdHJyY2hyIHN0cnJldiBzdHJyaXBvcyBzdHJycG9zIHN0cnNwbiBzdHJzdHIgc3RydG9rIHN0cnRvbG93ZXIgc3RydG91cHBlciBzdHJ0ciBzdWJzdHJfY29tcGFyZSBzdWJzdHJfY291bnQgc3Vic3RyX3JlcGxhY2Ugc3Vic3RyIHRyaW0gdWNmaXJzdCB1Y3dvcmRzIHZwcmludGYgdnNwcmludGYgd29yZHdyYXAJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJc3dmX2FjdGlvbmdldHVybCBzd2ZfYWN0aW9uZ290b2ZyYW1lIHN3Zl9hY3Rpb25nb3RvbGFiZWwgc3dmX2FjdGlvbm5leHRmcmFtZSBzd2ZfYWN0aW9ucGxheSBzd2ZfYWN0aW9ucHJldmZyYW1lIHN3Zl9hY3Rpb25zZXR0YXJnZXQgc3dmX2FjdGlvbnN0b3Agc3dmX2FjdGlvbnRvZ2dsZXF1YWxpdHkgc3dmX2FjdGlvbndhaXRmb3JmcmFtZSBzd2ZfYWRkYnV0dG9ucmVjb3JkIHN3Zl9hZGRjb2xvciBzd2ZfY2xvc2VmaWxlIHN3Zl9kZWZpbmViaXRtYXAgc3dmX2RlZmluZWZvbnQgc3dmX2RlZmluZWxpbmUgc3dmX2RlZmluZXBvbHkgc3dmX2RlZmluZXJlY3Qgc3dmX2RlZmluZXRleHQgc3dmX2VuZGJ1dHRvbiBzd2ZfZW5kZG9hY3Rpb24gc3dmX2VuZHNoYXBlIHN3Zl9lbmRzeW1ib2wgc3dmX2ZvbnRzaXplIHN3Zl9mb250c2xhbnQgc3dmX2ZvbnR0cmFja2luZyBzd2ZfZ2V0Yml0bWFwaW5mbyBzd2ZfZ2V0Zm9udGluZm8gc3dmX2dldGZyYW1lIHN3Zl9sYWJlbGZyYW1lIHN3Zl9sb29rYXQgc3dmX21vZGlmeW9iamVjdCBzd2ZfbXVsY29sb3Igc3dmX25leHRpZCBzd2Zfb25jb25kaXRpb24gc3dmX29wZW5maWxlIHN3Zl9vcnRobzIgc3dmX29ydGhvIHN3Zl9wZXJzcGVjdGl2ZSBzd2ZfcGxhY2VvYmplY3Qgc3dmX3BvbGFydmlldyBzd2ZfcG9wbWF0cml4IHN3Zl9wb3Nyb3VuZCBzd2ZfcHVzaG1hdHJpeCBzd2ZfcmVtb3Zlb2JqZWN0IHN3Zl9yb3RhdGUgc3dmX3NjYWxlIHN3Zl9zZXRmb250IHN3Zl9zZXRmcmFtZSBzd2Zfc2hhcGVhcmMgc3dmX3NoYXBlY3VydmV0bzMgc3dmX3NoYXBlY3VydmV0byBzd2Zfc2hhcGVmaWxsYml0bWFwY2xpcCBzd2Zfc2hhcGVmaWxsYml0bWFwdGlsZSBzd2Zfc2hhcGVmaWxsb2ZmIHN3Zl9zaGFwZWZpbGxzb2xpZCBzd2Zfc2hhcGVsaW5lc29saWQgc3dmX3NoYXBlbGluZXRvIHN3Zl9zaGFwZW1vdmV0byBzd2Zfc2hvd2ZyYW1lIHN3Zl9zdGFydGJ1dHRvbiBzd2Zfc3RhcnRkb2FjdGlvbiBzd2Zfc3RhcnRzaGFwZSBzd2Zfc3RhcnRzeW1ib2wgc3dmX3RleHR3aWR0aCBzd2ZfdHJhbnNsYXRlIHN3Zl92aWV3cG9ydAljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlzeWJhc2VfYWZmZWN0ZWRfcm93cyBzeWJhc2VfY2xvc2Ugc3liYXNlX2Nvbm5lY3Qgc3liYXNlX2RhdGFfc2VlayBzeWJhc2VfZGVhZGxvY2tfcmV0cnlfY291bnQgc3liYXNlX2ZldGNoX2FycmF5IHN5YmFzZV9mZXRjaF9hc3NvYyBzeWJhc2VfZmV0Y2hfZmllbGQgc3liYXNlX2ZldGNoX29iamVjdCBzeWJhc2VfZmV0Y2hfcm93IHN5YmFzZV9maWVsZF9zZWVrIHN5YmFzZV9mcmVlX3Jlc3VsdCBzeWJhc2VfZ2V0X2xhc3RfbWVzc2FnZSBzeWJhc2VfbWluX2NsaWVudF9zZXZlcml0eSBzeWJhc2VfbWluX2Vycm9yX3NldmVyaXR5IHN5YmFzZV9taW5fbWVzc2FnZV9zZXZlcml0eSBzeWJhc2VfbWluX3NlcnZlcl9zZXZlcml0eSBzeWJhc2VfbnVtX2ZpZWxkcyBzeWJhc2VfbnVtX3Jvd3Mgc3liYXNlX3Bjb25uZWN0IHN5YmFzZV9xdWVyeSBzeWJhc2VfcmVzdWx0IHN5YmFzZV9zZWxlY3RfZGIgc3liYXNlX3NldF9tZXNzYWdlX2hhbmRsZXIgc3liYXNlX3VuYnVmZmVyZWRfcXVlcnkJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJdGlkeV9hY2Nlc3NfY291bnQgdGlkeV9jbGVhbl9yZXBhaXIgdGlkeV9jb25maWdfY291bnQgdGlkeV9kaWFnbm9zZSB0aWR5X2Vycm9yX2NvdW50IHRpZHlfZ2V0X2JvZHkgdGlkeV9nZXRfY29uZmlnIHRpZHlfZ2V0X2Vycm9yX2J1ZmZlciB0aWR5X2dldF9oZWFkIHRpZHlfZ2V0X2h0bWxfdmVyIHRpZHlfZ2V0X2h0bWwgdGlkeV9nZXRfb3V0cHV0IHRpZHlfZ2V0X3JlbGVhc2UgdGlkeV9nZXRfcm9vdCB0aWR5X2dldF9zdGF0dXMgdGlkeV9nZXRvcHQgdGlkeV9pc194aHRtbCB0aWR5X2xvYWRfY29uZmlnIHRpZHlfcGFyc2VfZmlsZSB0aWR5X3BhcnNlX3N0cmluZyB0aWR5X3JlcGFpcl9maWxlIHRpZHlfcmVwYWlyX3N0cmluZyB0aWR5X3Jlc2V0X2NvbmZpZyB0aWR5X3NhdmVfY29uZmlnIHRpZHlfc2V0X2VuY29kaW5nIHRpZHlfc2V0b3B0IHRpZHlfd2FybmluZ19jb3VudAljb250YWluZWQKK3N5biBrZXl3b3JkCXBocE1ldGhvZHMJYXR0cmlidXRlcyBjaGlsZHJlbiBnZXRfYXR0ciBnZXRfbm9kZXMgaGFzX2NoaWxkcmVuIGhhc19zaWJsaW5ncyBpc19hc3AgaXNfY29tbWVudCBpc19odG1sIGlzX2pzcCBpc19qc3RlIGlzX3RleHQgaXNfeGh0bWwgaXNfeG1sIG5leHQgcHJldiB0aWR5X25vZGUJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJdG9rZW5fZ2V0X2FsbCB0b2tlbl9uYW1lCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCWJhc2U2NF9kZWNvZGUgYmFzZTY0X2VuY29kZSBnZXRfbWV0YV90YWdzIGh0dHBfYnVpbGRfcXVlcnkgcGFyc2VfdXJsIHJhd3VybGRlY29kZSByYXd1cmxlbmNvZGUgdXJsZGVjb2RlIHVybGVuY29kZQljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlkb3VibGV2YWwgZW1wdHkgZmxvYXR2YWwgZ2V0X2RlZmluZWRfdmFycyBnZXRfcmVzb3VyY2VfdHlwZSBnZXR0eXBlIGltcG9ydF9yZXF1ZXN0X3ZhcmlhYmxlcyBpbnR2YWwgaXNfYXJyYXkgaXNfYm9vbCBpc19jYWxsYWJsZSBpc19kb3VibGUgaXNfZmxvYXQgaXNfaW50IGlzX2ludGVnZXIgaXNfbG9uZyBpc19udWxsIGlzX251bWVyaWMgaXNfb2JqZWN0IGlzX3JlYWwgaXNfcmVzb3VyY2UgaXNfc2NhbGFyIGlzX3N0cmluZyBpc3NldCBwcmludF9yIHNlcmlhbGl6ZSBzZXR0eXBlIHN0cnZhbCB1bnNlcmlhbGl6ZSB1bnNldCB2YXJfZHVtcCB2YXJfZXhwb3J0CWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXZwb3BtYWlsX2FkZF9hbGlhc19kb21haW5fZXggdnBvcG1haWxfYWRkX2FsaWFzX2RvbWFpbiB2cG9wbWFpbF9hZGRfZG9tYWluX2V4IHZwb3BtYWlsX2FkZF9kb21haW4gdnBvcG1haWxfYWRkX3VzZXIgdnBvcG1haWxfYWxpYXNfYWRkIHZwb3BtYWlsX2FsaWFzX2RlbF9kb21haW4gdnBvcG1haWxfYWxpYXNfZGVsIHZwb3BtYWlsX2FsaWFzX2dldF9hbGwgdnBvcG1haWxfYWxpYXNfZ2V0IHZwb3BtYWlsX2F1dGhfdXNlciB2cG9wbWFpbF9kZWxfZG9tYWluX2V4IHZwb3BtYWlsX2RlbF9kb21haW4gdnBvcG1haWxfZGVsX3VzZXIgdnBvcG1haWxfZXJyb3IgdnBvcG1haWxfcGFzc3dkIHZwb3BtYWlsX3NldF91c2VyX3F1b3RhCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXczMmFwaV9kZWZ0eXBlIHczMmFwaV9pbml0X2R0eXBlIHczMmFwaV9pbnZva2VfZnVuY3Rpb24gdzMyYXBpX3JlZ2lzdGVyX2Z1bmN0aW9uIHczMmFwaV9zZXRfY2FsbF9tZXRob2QJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJd2RkeF9hZGRfdmFycyB3ZGR4X2Rlc2VyaWFsaXplIHdkZHhfcGFja2V0X2VuZCB3ZGR4X3BhY2tldF9zdGFydCB3ZGR4X3NlcmlhbGl6ZV92YWx1ZSB3ZGR4X3NlcmlhbGl6ZV92YXJzCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXV0ZjhfZGVjb2RlIHV0ZjhfZW5jb2RlIHhtbF9lcnJvcl9zdHJpbmcgeG1sX2dldF9jdXJyZW50X2J5dGVfaW5kZXggeG1sX2dldF9jdXJyZW50X2NvbHVtbl9udW1iZXIgeG1sX2dldF9jdXJyZW50X2xpbmVfbnVtYmVyIHhtbF9nZXRfZXJyb3JfY29kZSB4bWxfcGFyc2VfaW50b19zdHJ1Y3QgeG1sX3BhcnNlIHhtbF9wYXJzZXJfY3JlYXRlX25zIHhtbF9wYXJzZXJfY3JlYXRlIHhtbF9wYXJzZXJfZnJlZSB4bWxfcGFyc2VyX2dldF9vcHRpb24geG1sX3BhcnNlcl9zZXRfb3B0aW9uIHhtbF9zZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlciB4bWxfc2V0X2RlZmF1bHRfaGFuZGxlciB4bWxfc2V0X2VsZW1lbnRfaGFuZGxlciB4bWxfc2V0X2VuZF9uYW1lc3BhY2VfZGVjbF9oYW5kbGVyIHhtbF9zZXRfZXh0ZXJuYWxfZW50aXR5X3JlZl9oYW5kbGVyIHhtbF9zZXRfbm90YXRpb25fZGVjbF9oYW5kbGVyIHhtbF9zZXRfb2JqZWN0IHhtbF9zZXRfcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9oYW5kbGVyIHhtbF9zZXRfc3RhcnRfbmFtZXNwYWNlX2RlY2xfaGFuZGxlciB4bWxfc2V0X3VucGFyc2VkX2VudGl0eV9kZWNsX2hhbmRsZXIJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJeG1scnBjX2RlY29kZV9yZXF1ZXN0IHhtbHJwY19kZWNvZGUgeG1scnBjX2VuY29kZV9yZXF1ZXN0IHhtbHJwY19lbmNvZGUgeG1scnBjX2dldF90eXBlIHhtbHJwY19wYXJzZV9tZXRob2RfZGVzY3JpcHRpb25zIHhtbHJwY19zZXJ2ZXJfYWRkX2ludHJvc3BlY3Rpb25fZGF0YSB4bWxycGNfc2VydmVyX2NhbGxfbWV0aG9kIHhtbHJwY19zZXJ2ZXJfY3JlYXRlIHhtbHJwY19zZXJ2ZXJfZGVzdHJveSB4bWxycGNfc2VydmVyX3JlZ2lzdGVyX2ludHJvc3BlY3Rpb25fY2FsbGJhY2sgeG1scnBjX3NlcnZlcl9yZWdpc3Rlcl9tZXRob2QgeG1scnBjX3NldF90eXBlCWNvbnRhaW5lZAorc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXhzbHRfY3JlYXRlIHhzbHRfZXJybm8geHNsdF9lcnJvciB4c2x0X2ZyZWUgeHNsdF9vdXRwdXRfcHJvY2VzcyB4c2x0X3NldF9iYXNlIHhzbHRfc2V0X2VuY29kaW5nIHhzbHRfc2V0X2Vycm9yX2hhbmRsZXIgeHNsdF9zZXRfbG9nIHhzbHRfc2V0X3NheF9oYW5kbGVyIHhzbHRfc2V0X3NheF9oYW5kbGVycyB4c2x0X3NldF9zY2hlbWVfaGFuZGxlciB4c2x0X3NldF9zY2hlbWVfaGFuZGxlcnMJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJeWF6X2FkZGluZm8geWF6X2NjbF9jb25mIHlhel9jY2xfcGFyc2UgeWF6X2Nsb3NlIHlhel9jb25uZWN0IHlhel9kYXRhYmFzZSB5YXpfZWxlbWVudCB5YXpfZXJybm8geWF6X2Vycm9yIHlhel9lc19yZXN1bHQgeWF6X2dldF9vcHRpb24geWF6X2hpdHMgeWF6X2l0ZW1vcmRlciB5YXpfcHJlc2VudCB5YXpfcmFuZ2UgeWF6X3JlY29yZCB5YXpfc2Nhbl9yZXN1bHQgeWF6X3NjYW4geWF6X3NjaGVtYSB5YXpfc2VhcmNoIHlhel9zZXRfb3B0aW9uIHlhel9zb3J0IHlhel9zeW50YXggeWF6X3dhaXQJY29udGFpbmVkCitzeW4ga2V5d29yZAlwaHBGdW5jdGlvbnMJemlwX2Nsb3NlIHppcF9lbnRyeV9jbG9zZSB6aXBfZW50cnlfY29tcHJlc3NlZHNpemUgemlwX2VudHJ5X2NvbXByZXNzaW9ubWV0aG9kIHppcF9lbnRyeV9maWxlc2l6ZSB6aXBfZW50cnlfbmFtZSB6aXBfZW50cnlfb3BlbiB6aXBfZW50cnlfcmVhZCB6aXBfb3BlbiB6aXBfcmVhZAljb250YWluZWQKK3N5biBrZXl3b3JkCXBocEZ1bmN0aW9ucwlnemNsb3NlIGd6Y29tcHJlc3MgZ3pkZWZsYXRlIGd6ZW5jb2RlIGd6ZW9mIGd6ZmlsZSBnemdldGMgZ3pnZXRzIGd6Z2V0c3MgZ3ppbmZsYXRlIGd6b3BlbiBnenBhc3N0aHJ1IGd6cHV0cyBnenJlYWQgZ3pyZXdpbmQgZ3pzZWVrIGd6dGVsbCBnenVuY29tcHJlc3MgZ3p3cml0ZSByZWFkZ3pmaWxlIHpsaWJfZ2V0X2NvZGluZ190eXBlCWNvbnRhaW5lZAorCitpZiBleGlzdHMoICJwaHBfYmFzZWxpYiIgKQorICBzeW4ga2V5d29yZAlwaHBNZXRob2RzCXF1ZXJ5IG5leHRfcmVjb3JkIG51bV9yb3dzIGFmZmVjdGVkX3Jvd3MgbmYgZiBwIG5wIG51bV9maWVsZHMgaGFsdG1zZyBzZWVrIGxpbmtfaWQgcXVlcnlfaWQgbWV0YWRhdGEgdGFibGVfbmFtZXMgbmV4dGlkIGNvbm5lY3QgaGFsdCBmcmVlIHJlZ2lzdGVyIHVucmVnaXN0ZXIgaXNfcmVnaXN0ZXJlZCBkZWxldGUgdXJsIHB1cmwgc2VsZl91cmwgcHNlbGZfdXJsIGhpZGRlbl9zZXNzaW9uIGFkZF9xdWVyeSBwYWRkX3F1ZXJ5IHJlaW1wb3J0X2dldF92YXJzIHJlaW1wb3J0X3Bvc3RfdmFycyByZWltcG9ydF9jb29raWVfdmFycyBzZXRfY29udGFpbmVyIHNldF90b2tlbm5hbWUgcmVsZWFzZV90b2tlbiBwdXRfaGVhZGVycyBnZXRfaWQgZ2V0X2lkIHB1dF9pZCBmcmVlemUgdGhhdyBnYyByZWltcG9ydF9hbnlfdmFycyBzdGFydCB1cmwgcHVybCBsb2dpbl9pZiBpc19hdXRoZW50aWNhdGVkIGF1dGhfcHJlYXV0aCBhdXRoX2xvZ2luZm9ybSBhdXRoX3ZhbGlkYXRlbG9naW4gYXV0aF9yZWZyZXNobG9naW4gYXV0aF9yZWdpc3RlcmZvcm0gYXV0aF9kb3JlZ2lzdGVyIHN0YXJ0IGNoZWNrIGhhdmVfcGVybSBwZXJtc3VtIHBlcm1faW52YWxpZAljb250YWluZWQKKyAgc3luIGtleXdvcmQJcGhwRnVuY3Rpb25zCXBhZ2Vfb3BlbiBwYWdlX2Nsb3NlIHNlc3NfbG9hZCBzZXNzX3NhdmUJY29udGFpbmVkCitlbmRpZgorCisiIENvbmRpdGlvbmFsCitzeW4ga2V5d29yZAlwaHBDb25kaXRpb25hbAlkZWNsYXJlIGVsc2UgZW5kZGVjbGFyZSBlbmRzd2l0Y2ggZWxzZWlmIGVuZGlmIGlmIHN3aXRjaAljb250YWluZWQKKworIiBSZXBlYXQKK3N5biBrZXl3b3JkCXBocFJlcGVhdAlhcyBkbyBlbmRmb3IgZW5kZm9yZWFjaCBlbmR3aGlsZSBmb3IgZm9yZWFjaCB3aGlsZQljb250YWluZWQKKworIiBSZXBlYXQKK3N5biBrZXl3b3JkCXBocExhYmVsCWNhc2UgZGVmYXVsdCBzd2l0Y2gJY29udGFpbmVkCisKKyIgU3RhdGVtZW50CitzeW4ga2V5d29yZAlwaHBTdGF0ZW1lbnQJcmV0dXJuIGJyZWFrIGNvbnRpbnVlIGV4aXQJY29udGFpbmVkCisKKyIgS2V5d29yZAorc3luIGtleXdvcmQJcGhwS2V5d29yZAl2YXIgY29uc3QJY29udGFpbmVkCisKKyIgVHlwZQorc3luIGtleXdvcmQJcGhwVHlwZQlib29sW2Vhbl0gaW50W2VnZXJdIHJlYWwgZG91YmxlIGZsb2F0IHN0cmluZyBhcnJheSBvYmplY3QgTlVMTAljb250YWluZWQKKworIiBTdHJ1Y3R1cmUKK3N5biBrZXl3b3JkCXBocFN0cnVjdHVyZQlleHRlbmRzIGltcGxlbWVudHMgaW5zdGFuY2VvZiBwYXJlbnQgc2VsZgljb250YWluZWQKKworIiBPcGVyYXRvcgorc3luIG1hdGNoCXBocE9wZXJhdG9yCSJbLT0rJV4mfCohLn4/Ol0iCWNvbnRhaW5lZCBkaXNwbGF5CitzeW4gbWF0Y2gJcGhwT3BlcmF0b3IJIlstKyovJV4mfC5dPSIJY29udGFpbmVkIGRpc3BsYXkKK3N5biBtYXRjaAlwaHBPcGVyYXRvcgkiL1teKi9dIm1lPWUtMQljb250YWluZWQgZGlzcGxheQorc3luIG1hdGNoCXBocE9wZXJhdG9yCSJcJCIJY29udGFpbmVkIGRpc3BsYXkKK3N5biBtYXRjaAlwaHBPcGVyYXRvcgkiJiZcfFw8YW5kXD4iCWNvbnRhaW5lZCBkaXNwbGF5CitzeW4gbWF0Y2gJcGhwT3BlcmF0b3IJInx8XHxcPHhcPW9yXD4iCWNvbnRhaW5lZCBkaXNwbGF5CitzeW4gbWF0Y2gJcGhwUmVsYXRpb24JIlshPTw+XT0iCWNvbnRhaW5lZCBkaXNwbGF5CitzeW4gbWF0Y2gJcGhwUmVsYXRpb24JIls8Pl0iCWNvbnRhaW5lZCBkaXNwbGF5CitzeW4gbWF0Y2gJcGhwTWVtYmVyU2VsZWN0b3IJIi0+Igljb250YWluZWQgZGlzcGxheQorc3luIG1hdGNoCXBocFZhclNlbGVjdG9yCSJcJCIJY29udGFpbmVkIGRpc3BsYXkKKworIiBJZGVudGlmaWVyCitzeW4gbWF0Y2gJcGhwSWRlbnRpZmllcgkiJFxoXHcqIgljb250YWluZWQgY29udGFpbnM9cGhwRW52VmFyLHBocEludFZhcixwaHBWYXJTZWxlY3RvciBkaXNwbGF5CitzeW4gbWF0Y2gJcGhwSWRlbnRpZmllclNpbXBseQkiJHtcaFx3Kn0iCWNvbnRhaW5zPXBocE9wZXJhdG9yLHBocFBhcmVudAljb250YWluZWQgZGlzcGxheQorc3luIHJlZ2lvbglwaHBJZGVudGlmaWVyQ29tcGxleAltYXRjaGdyb3VwPXBocFBhcmVudCBzdGFydD0ie1wkInJzPWUtMSBlbmQ9In0iCWNvbnRhaW5zPXBocElkZW50aWZpZXIscGhwTWVtYmVyU2VsZWN0b3IscGhwVmFyU2VsZWN0b3IscGhwSWRlbnRpZmllckNvbXBsZXhQCWNvbnRhaW5lZCBleHRlbmQKK3N5biByZWdpb24JcGhwSWRlbnRpZmllckNvbXBsZXhQCW1hdGNoZ3JvdXA9cGhwUGFyZW50IHN0YXJ0PSJcWyIgZW5kPSJdIgljb250YWlucz1AcGhwQ2xJbnNpZGUJY29udGFpbmVkCisKKyIgTWV0aG9kZW4KK3N5biBtYXRjaAlwaHBNZXRob2RzVmFyCSItPlxoXHcqIgljb250YWluZWQgY29udGFpbnM9cGhwTWV0aG9kcyxwaHBNZW1iZXJTZWxlY3RvciBkaXNwbGF5CisKKyIgSW5jbHVkZQorc3luIGtleXdvcmQJcGhwSW5jbHVkZQlpbmNsdWRlIHJlcXVpcmUgaW5jbHVkZV9vbmNlIHJlcXVpcmVfb25jZQljb250YWluZWQKKworIiBEZWZpbmUKK3N5biBrZXl3b3JkCXBocERlZmluZQluZXcJY29udGFpbmVkCisKKyIgQm9vbGVhbgorc3luIGtleXdvcmQJcGhwQm9vbGVhbgl0cnVlIGZhbHNlCWNvbnRhaW5lZAorCisiIE51bWJlcgorc3luIG1hdGNoIHBocE51bWJlcgkiLVw9XDxcZFwrXD4iCWNvbnRhaW5lZCBkaXNwbGF5CitzeW4gbWF0Y2ggcGhwTnVtYmVyCSJcPDB4XHhcezEsOH1cPiIJY29udGFpbmVkIGRpc3BsYXkKKworIiBGbG9hdAorc3luIG1hdGNoIHBocEZsb2F0CSJcKC1cPVw8XGQrXHwtXD1cKVwuXGRcK1w+Igljb250YWluZWQgZGlzcGxheQorCisiIFNwZWNpYWxDaGFyCitzeW4gbWF0Y2ggcGhwU3BlY2lhbENoYXIJIlxcW2FiY2ZucnR5dlxcXSIJY29udGFpbmVkIGRpc3BsYXkKK3N5biBtYXRjaCBwaHBTcGVjaWFsQ2hhcgkiXFxcZFx7M30iCWNvbnRhaW5lZCBjb250YWlucz1waHBPY3RhbEVycm9yIGRpc3BsYXkKK3N5biBtYXRjaCBwaHBTcGVjaWFsQ2hhcgkiXFx4XHhcezJ9Igljb250YWluZWQgZGlzcGxheQorCisiIEVycm9yCitzeW4gbWF0Y2ggcGhwT2N0YWxFcnJvcgkiWzg5XSIJY29udGFpbmVkIGRpc3BsYXkKK2lmIGV4aXN0cygicGhwX3BhcmVudF9lcnJvcl9jbG9zZSIpCisgIHN5biBtYXRjaCBwaHBQYXJlbnRFcnJvcgkiWylcXX1dIgljb250YWluZWQgZGlzcGxheQorZW5kaWYKKworIiBUb2RvCitzeW4ga2V5d29yZAlwaHBUb2RvCXRvZG8gZml4bWUgeHh4CWNvbnRhaW5lZAorCisiIENvbW1lbnQKK2lmIGV4aXN0cygicGhwX3BhcmVudF9lcnJvcl9vcGVuIikKKyAgc3luIHJlZ2lvbglwaHBDb21tZW50CXN0YXJ0PSIvXCoiIGVuZD0iXCovIgljb250YWluZWQgY29udGFpbnM9cGhwVG9kbworZWxzZQorICBzeW4gcmVnaW9uCXBocENvbW1lbnQJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iCWNvbnRhaW5lZCBjb250YWlucz1waHBUb2RvIGV4dGVuZAorZW5kaWYKK2lmIHZlcnNpb24gPj0gNjAwCisgIHN5biBtYXRjaAlwaHBDb21tZW50CSIjLlx7LX1cKD8+XHwkXClcQD0iCWNvbnRhaW5lZCBjb250YWlucz1waHBUb2RvCisgIHN5biBtYXRjaAlwaHBDb21tZW50CSIvLy5cey19XCg/Plx8JFwpXEA9Igljb250YWluZWQgY29udGFpbnM9cGhwVG9kbworZWxzZQorICBzeW4gbWF0Y2gJcGhwQ29tbWVudAkiIy5cey19JCIJY29udGFpbmVkIGNvbnRhaW5zPXBocFRvZG8KKyAgc3luIG1hdGNoCXBocENvbW1lbnQJIiMuXHstfT8+Im1lPWUtMgljb250YWluZWQgY29udGFpbnM9cGhwVG9kbworICBzeW4gbWF0Y2gJcGhwQ29tbWVudAkiLy8uXHstfSQiCWNvbnRhaW5lZCBjb250YWlucz1waHBUb2RvCisgIHN5biBtYXRjaAlwaHBDb21tZW50CSIvLy5cey19Pz4ibWU9ZS0yCWNvbnRhaW5lZCBjb250YWlucz1waHBUb2RvCitlbmRpZgorCisiIFN0cmluZworaWYgZXhpc3RzKCJwaHBfcGFyZW50X2Vycm9yX29wZW4iKQorICBzeW4gcmVnaW9uCXBocFN0cmluZ0RvdWJsZQltYXRjaGdyb3VwPU5vbmUgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKwljb250YWlucz1AcGhwQWRkU3RyaW5ncyxwaHBJZGVudGlmaWVyLHBocFNwZWNpYWxDaGFyLHBocElkZW50aWZpZXJTaW1wbHkscGhwSWRlbnRpZmllckNvbXBsZXgJY29udGFpbmVkIGtlZXBlbmQKKyAgc3luIHJlZ2lvbglwaHBTdHJpbmdTaW5nbGUJbWF0Y2hncm91cD1Ob25lIHN0YXJ0PSsnKyBza2lwPStcXFxcXHxcXCcrIGVuZD0rJysJY29udGFpbnM9QHBocEFkZFN0cmluZ3MgY29udGFpbmVkIGtlZXBlbmQKK2Vsc2UKKyAgc3luIHJlZ2lvbglwaHBTdHJpbmdEb3VibGUJbWF0Y2hncm91cD1Ob25lIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisJY29udGFpbnM9QHBocEFkZFN0cmluZ3MscGhwSWRlbnRpZmllcixwaHBTcGVjaWFsQ2hhcixwaHBJZGVudGlmaWVyU2ltcGx5LHBocElkZW50aWZpZXJDb21wbGV4IGNvbnRhaW5lZCBleHRlbmQga2VlcGVuZAorICBzeW4gcmVnaW9uCXBocFN0cmluZ1NpbmdsZQltYXRjaGdyb3VwPU5vbmUgc3RhcnQ9KycrIHNraXA9K1xcXFxcfFxcJysgZW5kPSsnKwljb250YWlucz1AcGhwQWRkU3RyaW5ncyBjb250YWluZWQga2VlcGVuZCBleHRlbmQKK2VuZGlmCisKKyIgSGVyZURvYworaWYgdmVyc2lvbiA+PSA2MDAKKyAgc3luIGNhc2UgbWF0Y2gKKyAgc3luIHJlZ2lvbglwaHBIZXJlRG9jCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcKDw8PFwpXEA8PVx6KFxJXGkqXCkkIiBlbmQ9Il5cejFcKDtcPSRcKVxAPSIJY29udGFpbmVkIGNvbnRhaW5zPXBocElkZW50aWZpZXIscGhwSWRlbnRpZmllclNpbXBseSxwaHBJZGVudGlmaWVyQ29tcGxleCxwaHBTcGVjaWFsQ2hhcixwaHBNZXRob2RzVmFyIGtlZXBlbmQgZXh0ZW5kCisiIGluY2x1ZGluZyBIVE1MLEphdmFTY3JpcHQsU1FMIGV2ZW4gaWYgbm90IGVuYWJsZWQgdmlhIG9wdGlvbnMKKyAgc3luIHJlZ2lvbglwaHBIZXJlRG9jCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcKDw8PFwpXEA8PVx6KFwoXElcaSpcKVw9XChodG1sXClcY1woXGkqXClcKSQiIGVuZD0iXlx6MVwoO1w9JFwpXEA9Igljb250YWluZWQgY29udGFpbnM9QGh0bWxUb3AscGhwSWRlbnRpZmllcixwaHBJZGVudGlmaWVyU2ltcGx5LHBocElkZW50aWZpZXJDb21wbGV4LHBocFNwZWNpYWxDaGFyLHBocE1ldGhvZHNWYXIga2VlcGVuZCBleHRlbmQKKyAgc3luIHJlZ2lvbglwaHBIZXJlRG9jCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcKDw8PFwpXEA8PVx6KFwoXElcaSpcKVw9XChzcWxcKVxjXChcaSpcKVwpJCIgZW5kPSJeXHoxXCg7XD0kXClcQD0iCWNvbnRhaW5lZCBjb250YWlucz1Ac3FsVG9wLHBocElkZW50aWZpZXIscGhwSWRlbnRpZmllclNpbXBseSxwaHBJZGVudGlmaWVyQ29tcGxleCxwaHBTcGVjaWFsQ2hhcixwaHBNZXRob2RzVmFyIGtlZXBlbmQgZXh0ZW5kCisgIHN5biByZWdpb24JcGhwSGVyZURvYwltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXCg8PDxcKVxAPD1ceihcKFxJXGkqXClcPVwoamF2YXNjcmlwdFwpXGNcKFxpKlwpXCkkIiBlbmQ9Il5cejFcKDtcPSRcKVxAPSIJY29udGFpbmVkIGNvbnRhaW5zPUBodG1sSmF2YXNjcmlwdCxwaHBJZGVudGlmaWVyU2ltcGx5LHBocElkZW50aWZpZXIscGhwSWRlbnRpZmllckNvbXBsZXgscGhwU3BlY2lhbENoYXIscGhwTWV0aG9kc1ZhciBrZWVwZW5kIGV4dGVuZAorICBzeW4gY2FzZSBpZ25vcmUKK2VuZGlmCisKKyIgUGFyZW50CitpZiBleGlzdHMoInBocF9wYXJlbnRfZXJyb3JfY2xvc2UiKSB8fCBleGlzdHMoInBocF9wYXJlbnRfZXJyb3Jfb3BlbiIpCisgIHN5biBtYXRjaAlwaHBQYXJlbnQJIlt7fV0iCWNvbnRhaW5lZAorICBzeW4gcmVnaW9uCXBocFBhcmVudAltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iKCIgZW5kPSIpIgljb250YWluZWQgY29udGFpbnM9QHBocENsSW5zaWRlIHRyYW5zcGFyZW50CisgIHN5biByZWdpb24JcGhwUGFyZW50CW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcWyIgZW5kPSJcXSIJY29udGFpbmVkIGNvbnRhaW5zPUBwaHBDbEluc2lkZSB0cmFuc3BhcmVudAorICBpZiAhZXhpc3RzKCJwaHBfcGFyZW50X2Vycm9yX2Nsb3NlIikKKyAgICBzeW4gbWF0Y2ggcGhwUGFyZW50CSJbXF0pXSIgY29udGFpbmVkCisgIGVuZGlmCitlbHNlCisgIHN5biBtYXRjaCBwaHBQYXJlbnQJIlsoe1tcXX0pXSIJY29udGFpbmVkCitlbmRpZgorCitzeW4gY2x1c3RlcglwaHBDbENvbnN0CWNvbnRhaW5zPXBocEZ1bmN0aW9ucyxwaHBJZGVudGlmaWVyLHBocENvbmRpdGlvbmFsLHBocFJlcGVhdCxwaHBTdGF0ZW1lbnQscGhwT3BlcmF0b3IscGhwUmVsYXRpb24scGhwU3RyaW5nU2luZ2xlLHBocFN0cmluZ0RvdWJsZSxwaHBOdW1iZXIscGhwRmxvYXQscGhwS2V5d29yZCxwaHBUeXBlLHBocEJvb2xlYW4scGhwU3RydWN0dXJlLHBocE1ldGhvZHNWYXIscGhwQ29uc3RhbnQscGhwQ29yZUNvbnN0YW50LHBocEV4Y2VwdGlvbgorc3luIGNsdXN0ZXIJcGhwQ2xJbnNpZGUJY29udGFpbnM9QHBocENsQ29uc3QscGhwQ29tbWVudCxwaHBMYWJlbCxwaHBQYXJlbnQscGhwUGFyZW50RXJyb3IscGhwSW5jbHVkZSxwaHBIZXJlRG9jCitzeW4gY2x1c3RlcglwaHBDbEZ1bmN0aW9uCWNvbnRhaW5zPUBwaHBDbEluc2lkZSxwaHBEZWZpbmUscGhwUGFyZW50RXJyb3IscGhwU3RvcmFnZUNsYXNzCitzeW4gY2x1c3RlcglwaHBDbFRvcAljb250YWlucz1AcGhwQ2xGdW5jdGlvbixwaHBGb2xkRnVuY3Rpb24scGhwRm9sZENsYXNzLHBocEZvbGRJbnRlcmZhY2UscGhwRm9sZFRyeSxwaHBGb2xkQ2F0Y2gKKworIiBQaHAgUmVnaW9uCitpZiBleGlzdHMoInBocF9wYXJlbnRfZXJyb3Jfb3BlbiIpCisgIGlmIGV4aXN0cygicGhwX25vU2hvcnRUYWdzIikKKyAgICBzeW4gcmVnaW9uCSBwaHBSZWdpb24JbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9Ijw/cGhwIiBlbmQ9Ij8+Igljb250YWlucz1AcGhwQ2xUb3AKKyAgZWxzZQorICAgIHN5biByZWdpb24JIHBocFJlZ2lvbgltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iPD9cKHBocFwpXD0iIGVuZD0iPz4iCWNvbnRhaW5zPUBwaHBDbFRvcAorICBlbmRpZgorICBzeW4gcmVnaW9uCSBwaHBSZWdpb25TYwltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0rPHNjcmlwdCBsYW5ndWFnZT0icGhwIj4rIGVuZD0rPC9zY3JpcHQ+Kwljb250YWlucz1AcGhwQ2xUb3AKKyAgaWYgZXhpc3RzKCJwaHBfYXNwX3RhZ3MiKQorICAgIHN5biByZWdpb24JIHBocFJlZ2lvbkFzcAltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iPCVcKD1cKVw9IiBlbmQ9IiU+Igljb250YWlucz1AcGhwQ2xUb3AKKyAgZW5kaWYKK2Vsc2UKKyAgaWYgZXhpc3RzKCJwaHBfbm9TaG9ydFRhZ3MiKQorICAgIHN5biByZWdpb24JIHBocFJlZ2lvbgltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iPD9waHAiIGVuZD0iPz4iCWNvbnRhaW5zPUBwaHBDbFRvcCBrZWVwZW5kCisgIGVsc2UKKyAgICBzeW4gcmVnaW9uCSBwaHBSZWdpb24JbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9Ijw/XChwaHBcKVw9IiBlbmQ9Ij8+Igljb250YWlucz1AcGhwQ2xUb3Aga2VlcGVuZAorICBlbmRpZgorICBzeW4gcmVnaW9uCSBwaHBSZWdpb25TYwltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0rPHNjcmlwdCBsYW5ndWFnZT0icGhwIj4rIGVuZD0rPC9zY3JpcHQ+Kwljb250YWlucz1AcGhwQ2xUb3Aga2VlcGVuZAorICBpZiBleGlzdHMoInBocF9hc3BfdGFncyIpCisgICAgc3luIHJlZ2lvbgkgcGhwUmVnaW9uQXNwCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8JVwoPVwpXD0iIGVuZD0iJT4iCWNvbnRhaW5zPUBwaHBDbFRvcCBrZWVwZW5kCisgIGVuZGlmCitlbmRpZgorCisiIEZvbGQKK2lmIGV4aXN0cygicGhwX2ZvbGRpbmciKSAmJiBwaHBfZm9sZGluZz09MQorIiBtYXRjaCBvbmUgbGluZSBjb25zdHJ1Y3RzIGhlcmUgYW5kIHNraXAgdGhlbSBhdCBmb2xkaW5nCisgIHN5biBrZXl3b3JkCXBocFNDS2V5d29yZAlhYnN0cmFjdCBmaW5hbCBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgc3RhdGljCWNvbnRhaW5lZAorICBzeW4ga2V5d29yZAlwaHBGQ0tleXdvcmQJZnVuY3Rpb24JY29udGFpbmVkCisgIHN5biBrZXl3b3JkCXBocFN0b3JhZ2VDbGFzcwlnbG9iYWwJY29udGFpbmVkCisgIHN5biBtYXRjaAlwaHBEZWZpbmUJIlwoXHNcfF5cKVwoYWJzdHJhY3Rcc1wrXHxmaW5hbFxzXCtcfHByaXZhdGVcc1wrXHxwcm90ZWN0ZWRcc1wrXHxwdWJsaWNcc1wrXHxzdGF0aWNcc1wrXCkqZnVuY3Rpb25cKFxzXCsuKls7fV1cKVxAPSIJY29udGFpbmVkIGNvbnRhaW5zPXBocFNDS2V5d29yZAorICBzeW4gbWF0Y2gJcGhwU3RydWN0dXJlCSJcKFxzXHxeXClcKGFic3RyYWN0XHNcK1x8ZmluYWxcc1wrXCkqY2xhc3NcKFxzXCsuKn1cKVxAPSIJY29udGFpbmVkCisgIHN5biBtYXRjaAlwaHBTdHJ1Y3R1cmUJIlwoXHNcfF5cKWludGVyZmFjZVwoXHNcKy4qfVwpXEA9Igljb250YWluZWQKKyAgc3luIG1hdGNoCXBocEV4Y2VwdGlvbgkiXChcc1x8XlwpdHJ5XChcc1wrLip9XClcQD0iCWNvbnRhaW5lZAorICBzeW4gbWF0Y2gJcGhwRXhjZXB0aW9uCSJcKFxzXHxeXCljYXRjaFwoXHNcKy4qfVwpXEA9Igljb250YWluZWQKKworICBzZXQgZm9sZG1ldGhvZD1zeW50YXgKKyAgc3luIHJlZ2lvbglwaHBGb2xkSHRtbEluc2lkZQltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iPz4iIGVuZD0iPD9cKHBocFwpXD0iIGNvbnRhaW5lZCB0cmFuc3BhcmVudCBjb250YWlucz1AaHRtbFRvcAorICBzeW4gcmVnaW9uCXBocEZvbGRGdW5jdGlvbgltYXRjaGdyb3VwPVN0b3JhZ2VjbGFzcyBzdGFydD0iXlx6KFxzKlwpXChhYnN0cmFjdFxzXCtcfGZpbmFsXHNcK1x8cHJpdmF0ZVxzXCtcfHByb3RlY3RlZFxzXCtcfHB1YmxpY1xzXCtcfHN0YXRpY1xzXCtcKSpmdW5jdGlvblxzXChbXn07XSokXClcQD0icnM9ZS05IG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iXlx6MX0iIGNvbnRhaW5zPUBwaHBDbEZ1bmN0aW9uLHBocEZvbGRIdG1sSW5zaWRlLHBocEZDS2V5d29yZCBjb250YWluZWQgdHJhbnNwYXJlbnQgZm9sZCBleHRlbmQKKyAgc3luIHJlZ2lvbglwaHBGb2xkRnVuY3Rpb24JbWF0Y2hncm91cD1EZWZpbmUgc3RhcnQ9Il5mdW5jdGlvblxzXChbXn07XSokXClcQD0iIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iXn0iIGNvbnRhaW5zPUBwaHBDbEZ1bmN0aW9uLHBocEZvbGRIdG1sSW5zaWRlIGNvbnRhaW5lZCB0cmFuc3BhcmVudCBmb2xkIGV4dGVuZAorICBzeW4gcmVnaW9uCXBocEZvbGRDbGFzcwltYXRjaGdyb3VwPVN0cnVjdHVyZSBzdGFydD0iXlx6KFxzKlwpXChhYnN0cmFjdFxzXCtcfGZpbmFsXHNcK1wpKmNsYXNzXHNcK1woW159XSokXClcQD0iIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iXlx6MX0iIGNvbnRhaW5zPUBwaHBDbEZ1bmN0aW9uLHBocEZvbGRGdW5jdGlvbixwaHBTQ0tleXdvcmQgY29udGFpbmVkIHRyYW5zcGFyZW50IGZvbGQgZXh0ZW5kCisgIHN5biByZWdpb24JcGhwRm9sZEludGVyZmFjZQltYXRjaGdyb3VwPVN0cnVjdHVyZSBzdGFydD0iXlx6KFxzKlwpaW50ZXJmYWNlXHNcK1woW159XSokXClcQD0iIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iXlx6MX0iIGNvbnRhaW5zPUBwaHBDbEZ1bmN0aW9uLHBocEZvbGRGdW5jdGlvbiBjb250YWluZWQgdHJhbnNwYXJlbnQgZm9sZCBleHRlbmQKKyAgc3luIHJlZ2lvbglwaHBGb2xkQ2F0Y2gJbWF0Y2hncm91cD1FeGNlcHRpb24gc3RhcnQ9Il5ceihccypcKWNhdGNoXHNcK1woW159XSokXClcQD0iIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iXlx6MX0iIGNvbnRhaW5zPUBwaHBDbEZ1bmN0aW9uLHBocEZvbGRGdW5jdGlvbiBjb250YWluZWQgdHJhbnNwYXJlbnQgZm9sZCBleHRlbmQKKyAgc3luIHJlZ2lvbglwaHBGb2xkVHJ5CW1hdGNoZ3JvdXA9RXhjZXB0aW9uIHN0YXJ0PSJeXHooXHMqXCl0cnlcc1wrXChbXn1dKiRcKVxAPSIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSJeXHoxfSIgY29udGFpbnM9QHBocENsRnVuY3Rpb24scGhwRm9sZEZ1bmN0aW9uIGNvbnRhaW5lZCB0cmFuc3BhcmVudCBmb2xkIGV4dGVuZAorZWxzZWlmIGV4aXN0cygicGhwX2ZvbGRpbmciKSAmJiBwaHBfZm9sZGluZz09MgorICBzeW4ga2V5d29yZAlwaHBEZWZpbmUJZnVuY3Rpb24JY29udGFpbmVkCisgIHN5biBrZXl3b3JkCXBocFN0cnVjdHVyZQlhYnN0cmFjdCBjbGFzcyBpbnRlcmZhY2UJY29udGFpbmVkCisgIHN5biBrZXl3b3JkCXBocEV4Y2VwdGlvbgljYXRjaCB0aHJvdyB0cnkJY29udGFpbmVkCisgIHN5biBrZXl3b3JkCXBocFN0b3JhZ2VDbGFzcwlmaW5hbCBnbG9iYWwgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHN0YXRpYwljb250YWluZWQKKworICBzZXQgZm9sZG1ldGhvZD1zeW50YXgKKyAgc3luIHJlZ2lvbglwaHBGb2xkSHRtbEluc2lkZQltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iPz4iIGVuZD0iPD9cKHBocFwpXD0iIGNvbnRhaW5lZCB0cmFuc3BhcmVudCBjb250YWlucz1AaHRtbFRvcAorICBzeW4gcmVnaW9uCXBocFBhcmVudAltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0ieyIgZW5kPSJ9Igljb250YWluZWQgY29udGFpbnM9QHBocENsRnVuY3Rpb24scGhwRm9sZEh0bWxJbnNpZGUgdHJhbnNwYXJlbnQgZm9sZAorZWxzZQorICBzeW4ga2V5d29yZAlwaHBEZWZpbmUJZnVuY3Rpb24JY29udGFpbmVkCisgIHN5biBrZXl3b3JkCXBocFN0cnVjdHVyZQlhYnN0cmFjdCBjbGFzcyBpbnRlcmZhY2UJY29udGFpbmVkCisgIHN5biBrZXl3b3JkCXBocEV4Y2VwdGlvbgljYXRjaCB0aHJvdyB0cnkJY29udGFpbmVkCisgIHN5biBrZXl3b3JkCXBocFN0b3JhZ2VDbGFzcwlmaW5hbCBnbG9iYWwgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHN0YXRpYwljb250YWluZWQKK2VuZGlmCisKKworIiBTeW5jCitpZiBwaHBfc3luY19tZXRob2Q9PS0xCisgIGlmIGV4aXN0cygicGhwX25vU2hvcnRUYWdzIikKKyAgICBzeW4gc3luYyBtYXRjaCBwaHBSZWdpb25TeW5jIGdyb3VwaGVyZSBwaHBSZWdpb24gIl5ccyo8P3BocFxzKiQiCisgIGVsc2UKKyAgICBzeW4gc3luYyBtYXRjaCBwaHBSZWdpb25TeW5jIGdyb3VwaGVyZSBwaHBSZWdpb24gIl5ccyo8P1wocGhwXClcPVxzKiQiCisgIGVuZGlmCisgIHN5biBzeW5jIG1hdGNoIHBocFJlZ2lvblN5bmMgZ3JvdXBoZXJlIHBocFJlZ2lvblNjICteXHMqPHNjcmlwdCBsYW5ndWFnZT0icGhwIj5ccyokKworICBpZiBleGlzdHMoInBocF9hc3BfdGFncyIpCisgICAgc3luIHN5bmMgbWF0Y2ggcGhwUmVnaW9uU3luYyBncm91cGhlcmUgcGhwUmVnaW9uQXNwICJeXHMqPCVcKD1cKVw9XHMqJCIKKyAgZW5kaWYKKyAgc3luIHN5bmMgbWF0Y2ggcGhwUmVnaW9uU3luYyBncm91cGhlcmUgTk9ORSAiXlxzKj8+XHMqJCIKKyAgc3luIHN5bmMgbWF0Y2ggcGhwUmVnaW9uU3luYyBncm91cGhlcmUgTk9ORSAiXlxzKiU+XHMqJCIKKyAgc3luIHN5bmMgbWF0Y2ggcGhwUmVnaW9uU3luYyBncm91cGhlcmUgcGhwUmVnaW9uICJmdW5jdGlvblxzLiooLipcJCIKKyAgInN5biBzeW5jIG1hdGNoIHBocFJlZ2lvblN5bmMgZ3JvdXBoZXJlIE5PTkUgIi9caSo+XHMqJCIKK2Vsc2VpZiBwaHBfc3luY19tZXRob2Q+MAorICBleGVjICJzeW4gc3luYyBtaW5saW5lcz0iIC4gcGhwX3N5bmNfbWV0aG9kCitlbHNlCisgIGV4ZWMgInN5biBzeW5jIGZyb21zdGFydCIKK2VuZGlmCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3BocF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9waHBfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsJIHBocENvbnN0YW50CUNvbnN0YW50CisgIEhpTGluawkgcGhwQ29yZUNvbnN0YW50CUNvbnN0YW50CisgIEhpTGluawkgcGhwQ29tbWVudAlDb21tZW50CisgIEhpTGluawkgcGhwRXhjZXB0aW9uCUV4Y2VwdGlvbgorICBIaUxpbmsJIHBocEJvb2xlYW4JQm9vbGVhbgorICBIaUxpbmsJIHBocFN0b3JhZ2VDbGFzcwlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rCSBwaHBTQ0tleXdvcmQJU3RvcmFnZUNsYXNzCisgIEhpTGluawkgcGhwRkNLZXl3b3JkCURlZmluZQorICBIaUxpbmsJIHBocFN0cnVjdHVyZQlTdHJ1Y3R1cmUKKyAgSGlMaW5rCSBwaHBTdHJpbmdTaW5nbGUJU3RyaW5nCisgIEhpTGluawkgcGhwU3RyaW5nRG91YmxlCVN0cmluZworICBIaUxpbmsJIHBocE51bWJlcglOdW1iZXIKKyAgSGlMaW5rCSBwaHBGbG9hdAlGbG9hdAorICBIaUxpbmsJIHBocE1ldGhvZHMJRnVuY3Rpb24KKyAgSGlMaW5rCSBwaHBGdW5jdGlvbnMJRnVuY3Rpb24KKyAgSGlMaW5rCSBwaHBCYXNlbGliCUZ1bmN0aW9uCisgIEhpTGluawkgcGhwUmVwZWF0CVJlcGVhdAorICBIaUxpbmsJIHBocENvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluawkgcGhwTGFiZWwJTGFiZWwKKyAgSGlMaW5rCSBwaHBTdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluawkgcGhwS2V5d29yZAlTdGF0ZW1lbnQKKyAgSGlMaW5rCSBwaHBUeXBlCVR5cGUKKyAgSGlMaW5rCSBwaHBJbmNsdWRlCUluY2x1ZGUKKyAgSGlMaW5rCSBwaHBEZWZpbmUJRGVmaW5lCisgIEhpTGluawkgcGhwU3BlY2lhbENoYXIJU3BlY2lhbENoYXIKKyAgSGlMaW5rCSBwaHBQYXJlbnQJRGVsaW1pdGVyCisgIEhpTGluawkgcGhwSWRlbnRpZmllckNvbnN0CURlbGltaXRlcgorICBIaUxpbmsJIHBocFBhcmVudEVycm9yCUVycm9yCisgIEhpTGluawkgcGhwT2N0YWxFcnJvcglFcnJvcgorICBIaUxpbmsJIHBocFRvZG8JVG9kbworICBIaUxpbmsJIHBocE1lbWJlclNlbGVjdG9yCVN0cnVjdHVyZQorICBpZiBleGlzdHMoInBocF9vbGRTdHlsZSIpCisJaGkJcGhwSW50VmFyIGd1aWZnPVJlZCBjdGVybWZnPURhcmtSZWQKKwloaQlwaHBFbnZWYXIgZ3VpZmc9UmVkIGN0ZXJtZmc9RGFya1JlZAorCWhpCXBocE9wZXJhdG9yIGd1aWZnPVNlYUdyZWVuIGN0ZXJtZmc9RGFya0dyZWVuCisJaGkJcGhwVmFyU2VsZWN0b3IgZ3VpZmc9U2VhR3JlZW4gY3Rlcm1mZz1EYXJrR3JlZW4KKwloaQlwaHBSZWxhdGlvbiBndWlmZz1TZWFHcmVlbiBjdGVybWZnPURhcmtHcmVlbgorCWhpCXBocElkZW50aWZpZXIgZ3VpZmc9RGFya0dyYXkgY3Rlcm1mZz1Ccm93bgorCWhpCXBocElkZW50aWZpZXJTaW1wbHkgZ3VpZmc9RGFya0dyYXkgY3Rlcm1mZz1Ccm93bgorICBlbHNlCisJSGlMaW5rCXBocEludFZhcglJZGVudGlmaWVyCisJSGlMaW5rCXBocEVudlZhcglJZGVudGlmaWVyCisJSGlMaW5rCXBocE9wZXJhdG9yCU9wZXJhdG9yCisJSGlMaW5rCXBocFZhclNlbGVjdG9yCU9wZXJhdG9yCisJSGlMaW5rCXBocFJlbGF0aW9uCU9wZXJhdG9yCisJSGlMaW5rCXBocElkZW50aWZpZXIJSWRlbnRpZmllcgorCUhpTGluawlwaHBJZGVudGlmaWVyU2ltcGx5CUlkZW50aWZpZXIKKyAgZW5kaWYKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicGhwIgorCitpZiBtYWluX3N5bnRheCA9PSAncGhwJworICB1bmxldCBtYWluX3N5bnRheAorZW5kaWYKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3BodG1sLnZpbSBiL3J1bnRpbWUvc3ludGF4L3BodG1sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmY2ZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcGh0bWwudmltCkBAIC0wLDAgKzEsMjQ0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJcGh0bWwgUEhQIDIuMAorIiBNYWludGFpbmVyOglMdXR6IEV5bWVycyA8aXh0YWJAcG9semluLmNvbT4KKyIgVVJMOgkJaHR0cDovL3d3dy5pc3AuZGUvZGF0YS9waHRtbC52aW0KKyIgRW1haWw6CVN1YmplY3Q6IHNlbmQgc3ludGF4X3ZpbS50Z3oKKyIgTGFzdCBjaGFuZ2U6CTIwMDMgTWF5IDExCisiCisiIE9wdGlvbnMJcGh0bWxfc3FsX3F1ZXJ5ID0gMSBmb3IgU1FMIHN5bnRheCBoaWdobGlndGhpbmcgaW5zaWRlIHN0cmluZ3MKKyIJCXBodG1sX21pbmxpbmVzID0geCAgICAgdG8gc3luYyBhdCBsZWFzdCB4IGxpbmVzIGJhY2t3YXJkcworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmICFleGlzdHMoIm1haW5fc3ludGF4IikKKyAgbGV0IG1haW5fc3ludGF4ID0gJ3BodG1sJworZW5kaWYKKworaWYgdmVyc2lvbiA8IDYwMAorICBzbyA8c2ZpbGU+OnA6aC9odG1sLnZpbQorZWxzZQorICBydW50aW1lISBzeW50YXgvaHRtbC52aW0KKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworc3luIGNsdXN0ZXIgaHRtbFByZXByb2MgYWRkPXBodG1sUmVnaW9uSW5zaWRlSHRtbFRhZ3MKKworaWYgZXhpc3RzKCAicGh0bWxfc3FsX3F1ZXJ5IikKKyAgaWYgcGh0bWxfc3FsX3F1ZXJ5ID09IDEKKyAgICBzeW4gaW5jbHVkZSBAcGh0bWxTcWwgPHNmaWxlPjpwOmgvc3FsLnZpbQorICAgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKKyAgZW5kaWYKK2VuZGlmCitzeW4gY2x1c3RlciBwaHRtbFNxbCByZW1vdmU9c3FsU3RyaW5nLHNxbENvbW1lbnQKKworc3luIGNhc2UgbWF0Y2gKKworIiBFbnYgVmFyaWFibGVzCitzeW4ga2V5d29yZCBwaHRtbEVudlZhciBTRVJWRVJfU09GVFdBUkUgU0VSVkVSX05BTUUgU0VSVkVSX1VSTCBHQVRFV0FZX0lOVEVSRkFDRSAgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxFbnZWYXIgU0VSVkVSX1BST1RPQ09MIFNFUlZFUl9QT1JUIFJFUVVFU1RfTUVUSE9EIFBBVEhfSU5GTyAgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEVudlZhciBQQVRIX1RSQU5TTEFURUQgU0NSSVBUX05BTUUgUVVFUllfU1RSSU5HIFJFTU9URV9IT1NUIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxFbnZWYXIgUkVNT1RFX0FERFIgQVVUSF9UWVBFIFJFTU9URV9VU0VSIENPTlRFTl9UWVBFICBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRW52VmFyIENPTlRFTlRfTEVOR1RIIEhUVFBTIEhUVFBTX0tFWVNJWkUgSFRUUFNfU0VDUkVUS0VZU0laRSAgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEVudlZhciBIVFRQX0FDQ0VDVCBIVFRQX1VTRVJfQUdFTlQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSAgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEVudlZhciBIVFRQX0ZST00gSFRUUF9SRUZFUkVSIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxFbnZWYXIgUEhQX1NFTEYgY29udGFpbmVkCisKK3N5biBjYXNlIGlnbm9yZQorCisiIEludGVybmFsIFZhcmlhYmxlcworc3luIGtleXdvcmQgcGh0bWxJbnRWYXIgcGhwZXJybXNnIHBocF9zZWxmIGNvbnRhaW5lZAorCisiIENvbW1lbnQKK3N5biByZWdpb24gcGh0bWxDb21tZW50CQlzdGFydD0iL1wqIiBlbmQ9IlwqLyIgIGNvbnRhaW5lZCBjb250YWlucz1waHRtbFRvZG8KKworIiBGdW5jdGlvbiBuYW1lcworc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIEFicyBBZGFfQ2xvc2UgQWRhX0Nvbm5lY3QgQWRhX0V4ZWMgQWRhX0ZldGNoUm93IGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIEFkYV9GaWVsZE5hbWUgQWRhX0ZpZWxkTnVtIEFkYV9GaWVsZFR5cGUgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgQWRhX0ZyZWVSZXN1bHQgQWRhX051bUZpZWxkcyBBZGFfTnVtUm93cyBBZGFfUmVzdWx0IGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIEFkYV9SZXN1bHRBbGwgQWRkU2xhc2hlcyBBU29ydCBCaW5EZWMgQ2VpbCBDaERpciBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBBZGFHcnAgQ2hNb2QgQ2hPd24gQ2hvcCBDaHIgQ2xlYXJTdGFjayBDbGVhclN0YXRDYWNoZSBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBjbG9zZURpciBDbG9zZUxvZyBDb3MgQ291bnQgQ3J5cHQgRGF0ZSBkYkxpc3QgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIGRibUNsb3NlIGRibURlbGV0ZSBkYm1FeGlzdHMgZGJtRmV0Y2ggZGJtRmlyc3RLZXkgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgZGJtSW5zZXJ0IGRibU5leHRLZXkgZGJtT3BlbiBkYm1SZXBsYWNlIERlY0JpbiBEZWNIZXggY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgRGVjT2N0IGRvdWJsZXZhbCBFY2hvIEVuZCBlcmVnIGVyZWdpIGVyZWdfcmVwbGFjZSBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBlcmVnaV9yZXBsYWNlIEVzY2FwZVNoZWxsQ21kIEV2YWwgRXhlYyBFeGl0IEV4cCBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBmY2xvc2UgZmVvZiBmZ2V0cyBmZ2V0c3MgRmlsZSBmaWxlQXRpbWUgZmlsZUN0aW1lIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIGZpbGVHcm91cCBmaWxlSW5vZGUgZmlsZU10aW1lIGZpbGVPd25lciBmaWxlUGVybXMgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgZmlsZVNpemUgZmlsZVR5cGUgRmxvb3IgRmx1c2ggZm9wZW4gZnB1dHMgRlBhc3NUaHJ1IGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIGZzZWVrIGZzb2Nrb3BlbiBmdGVsbCBnZXRBY2NEaXIgR2V0RW52IGdldEhvc3RCeU5hbWUgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgZ2V0SG9zdEJ5QWRkciBHZXRJbWFnZVNpemUgZ2V0TGFzdEFjZXNzIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIGdldExhc3Ricm93c2VyIGdldExhc3RFbWFpbCBnZXRMYXN0SG9zdCBnZXRMYXN0TW9kIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIGdldExhc3RyZWYgZ2V0TG9nRGlyIGdldE15SW5vZGUgZ2V0TXlQaWQgZ2V0TXlVaWQgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgZ2V0UmFuZE1heCBnZXRTdGFydExvZ2dpbmcgZ2V0VG9kYXkgZ2V0VG90YWwgR2V0VHlwZSBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBnbURhdGUgSGVhZGVyIEhleERlYyBIdG1sU3BlY2lhbENoYXJzIEltYWdlQXJjIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIEltYWdlQ2hhciBJbWFnZUNoYXJVcCBJYW1nZUNvbG9yQWxsb2NhdGUgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIEltYWdlQ29sb3JUcmFuc3BhcmVudCBJbWFnZUNvcHlSZXNpemVkIEltYWdlQ3JlYXRlIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIEltYWdlQ3JlYXRlRnJvbUdpZiBJbWFnZURlc3Ryb3kgSW1hZ2VGaWxsIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIEltYWdlRmlsbGVkUG9seWdvbiBJbWFnZUZpbGxlZFJlY3RhbmdsZSBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBJbWFnZUZpbGxUb0JvcmRlciBJbWFnZUdpZiBJbWFnZUludGVybGFjZSBJbWFnZUxpbmUgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgSW1hZ2VQb2x5Z29uIEltYWdlUmVjdGFuZ2xlIEltYWdlU2V0UGl4ZWwgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIEltYWdlU3RyaW5nIEltYWdlU3RyaW5nVXAgSW1hZ2VTWCBJbWFnZVNZIEluY2x1ZGUgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgSW5pdFN5c2xvZyBpbnR2YWwgSXNTZXQgS2V5IExpbmsgTGlua0luZm8gTG9nIExvZzEwIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIExvc0FzIE1haWwgTWF4IE1kNSBtaV9DbG9zZSBtaV9Db25uZWN0IG1pX0RCbmFtZSBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBtaV9FeGVjIG1pX0ZpZWxkTmFtZSBtaV9GaWVsZE51bSBtaV9OdW1GaWVsZHMgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgbWlfTnVtUm93cyBtaV9SZXN1bHQgTWljcm90aW1lIE1pbiBNa0RpciBNa1RpbWUgbXNxbCBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBtc3FsX2Nvbm5lY3QgbXNxbF9DcmVhdGVEQiBtc3FsX2RiTmFtZSBtc3FsX0Ryb3BEQiBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBtc3FsRmllbGRGbGFncyBtc3FsX0ZpZWxkTGVuIG1zcWxfRmllbGROYW1lIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIG1zcWxfRmllbGRUeXBlIG1zcWxfRnJlZVJlc3VsdCBtc3FsX0xpc3REQnMgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgbXNxbF9MaXN0ZmllbGRzIG1zcWxfTGlzdFRhYmxlcyBtc3FsX051bUZpZWxkcyBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBtc3FsX051bVJvd3MgbXNxbF9SZWdDYXNlIG1zcWxfUmVzdWx0IG1zcWxfVGFibGVOYW1lIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIG15c3FsIG15c3FsX2FmZmVjdGVkX3Jvd3MgbXlzcWxfY2xvc2UgbXlzcWxfY29ubmVjdCBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBteXNxbF9DcmVhdGVEQiBteXNxbF9kYk5hbWUgbXlzcWxEcm9wREIgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIG15c3FsX0ZpZWxkRmxhZ3MgbXlzcWxfRmllbGRMZW4gbXlzcWxfRmllbGROYW1lIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIG15c3FsX0ZpZWxkVHlwZSBteXNxbF9GcmVlUmVzdWx0IG15c3FsX2luc2VydF9pZCBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBteXNxbF9saXN0REJzIG15c3FsX0xpc3RmaWVsZHMgbXlzcWxfTGlzdFRhYmxlcyBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBteXNxbF9OdW1GaWVsZHMgbXlzcWxfTnVtUm93cyBteXNxbF9SZXN1bHQgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIG15c3FsX1RhYmxlTmFtZSBOZXh0IE9jdERlYyBvcGVuRGlyIE9wZW5Mb2cgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIE9yYV9CaW5kIE9yYV9DbG9zZSBPcmFfQ29tbWl0IE9yYV9Db21taXRPZmYgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgT3JhX0NvbW1pdE9uIE9yYV9FeGVjIE9yYV9GZXRjaCBPcmFfR2V0Q29sdW1uIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIE9yYV9Mb2dvZmYgT3JhX0xvZ29uIE9yYV9QYXJzZSBPcmFfUm9sbGJhY2sgT3JkICBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBQYXJzZV9zdHIgUGFzc1RocnUgcGNsb3NlIHBnX0Nsb3NlIHBnX0Nvbm5lY3QgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgcGdfREJuYW1lIHBnX0Vycm9yTWVzc2FnZSBwZ19FeGVjIHBnX0ZpZWxkTmFtZSBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBwZ19GaWVsZFBydExlbiBwZ19GaWVsZE51bSBwZ19GaWVsZFNpemUgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIHBnX0ZpZWxkVHlwZSBwZ19GcmVlUmVzdWx0IHBnX0dldExhc3RPaWQgcGdfSG9zdCBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBwZ19OdW1GaWVsZHMgcGdfTnVtUm93cyBwZ19PcHRpb25zIHBnX1BvcnQgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIHBnX1Jlc3VsdCBwZ190dHkgcGhwSW5mbyBwaHBWZXJzaW9uIHBvcGVuIHBvcyBwb3cgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgUHJldiBQdXRFbnYgUXVvdGVNZXRhIFJhbmQgcmVhZERpciBSZWFkRmlsZSBSZWFkTGluayBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICByZWdfTWF0Y2ggcmVnX3JlcGxhY2UgcmVnX1NlYXJjaCBSZW5hbWUgUmVzZXQgcmV0dXJuICBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICByZXdpbmQgcmV3aW5kRGlyIFJtRGlyIHJTb3J0IFNldENvb2tpZSBTZXRFcnJvclJlcG9ydGluZyBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBTZXRMb2dnaW5nIFNldFNob3dJbmZvIFNldFR5cGUgc2hsIHNociBTaW4gU2xlZXAgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgU29saWRfQ2xvc2UgU29saWRfQ29ubmVjdCBTb2xpZF9FeGVjIFNvbGlkX0ZldGNoUm93IGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIFNvbGlkX0ZpZWxkTmFtZSBTb2xpZF9GaWVsZE51bSBTb2xpZF9GcmVlUmVzdWx0ICBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBTb2xpZF9OdW1GaWVsZHMgU29saWRfTnVtUm93cyBTb2xpZF9SZXN1bHQgU29ydCBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBTcHVuZHRleCBTcHJpbnRmIFNxcnQgU3JhbmQgc3RyY2hyIHN0cnRyICBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBTdHJpcFNsYXNoZXMgc3RybGVuIHN0cmNociBzdHJzdHIgc3RydG9rIHN0cnRvbG93ZXIgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgc3RydG91cHBlciBzdHJ2YWwgc3Vic3RyIHN5YlNRTF9DaGVja0Nvbm5lY3QgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgc3liU1FMX0RCVVNFIHN5YlNRTF9Db25uZWN0IHN5YlNRTF9FeGl0IGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIHN5YlNRTF9GaWVsZG5hbWUgc3liU1FMX0dldEZpZWxkIHN5YlNRTF9Jc1JvdyAgY29udGFpbmVkCitzeW4ga2V5d29yZCBwaHRtbEZ1bmN0aW9ucyAgc3liU1FMX05leHRSb3cgc3liU1FMX051bUZpZWxkcyBzeWJTUUxfTnVtUm93cyBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBzeWJTUUxfUXVlcnkgc3liU1FMX1Jlc3VsdCBzeWJTUUxfUmVzdWx0IHN5YlNRTF9TZWVrIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGh0bWxGdW5jdGlvbnMgIFN5bWxpbmsgc3lzbG9nIFN5c3RlbSBUYW4gVGVtcE5hbSBUaW1lIFVtYXNrIFVuaXFJZCBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBVbmxpbmsgVW5zZXQgVXJsRGVjb2RlIFVybEVuY29kZSBVU2xlZXAgVmlydHVhbCBjb250YWluZWQKK3N5biBrZXl3b3JkIHBodG1sRnVuY3Rpb25zICBTZWN1cmVWYXIgY29udGFpbmVkCisKKyIgQ29uZGl0aW9uYWwKK3N5biBrZXl3b3JkIHBodG1sQ29uZGl0aW9uYWwgIGlmIGVsc2UgZWxzZWlmIGVuZGlmIHN3aXRjaCBlbmRzd2l0Y2ggY29udGFpbmVkCisKKyIgUmVwZWF0CitzeW4ga2V5d29yZCBwaHRtbFJlcGVhdCAgd2hpbGUgZW5kd2hpbGUgY29udGFpbmVkCisKKyIgUmVwZWF0CitzeW4ga2V5d29yZCBwaHRtbExhYmVsICBjYXNlIGRlZmF1bHQgY29udGFpbmVkCisKKyIgU3RhdGVtZW50CitzeW4ga2V5d29yZCBwaHRtbFN0YXRlbWVudCAgYnJlYWsgcmV0dXJuIGNvbnRpbnVlIGV4aXQgY29udGFpbmVkCisKKyIgT3BlcmF0b3IKK3N5biBtYXRjaCBwaHRtbE9wZXJhdG9yICAiWy09KyVeJnwqIV0iIGNvbnRhaW5lZAorc3luIG1hdGNoIHBodG1sT3BlcmF0b3IgICJbLSsqLyVeJnxdPSIgY29udGFpbmVkCitzeW4gbWF0Y2ggcGh0bWxPcGVyYXRvciAgIi9bXipdIm1lPWUtMSBjb250YWluZWQKK3N5biBtYXRjaCBwaHRtbE9wZXJhdG9yICAiXCQiIGNvbnRhaW5lZAorc3luIG1hdGNoIHBodG1sUmVsYXRpb24gICImJiIgY29udGFpbmVkCitzeW4gbWF0Y2ggcGh0bWxSZWxhdGlvbiAgInx8IiBjb250YWluZWQKK3N5biBtYXRjaCBwaHRtbFJlbGF0aW9uICAiWyE9PD5dPSIgY29udGFpbmVkCitzeW4gbWF0Y2ggcGh0bWxSZWxhdGlvbiAgIls8Pl0iIGNvbnRhaW5lZAorCisiIElkZW50aWZpZXIKK3N5biBtYXRjaCAgcGh0bWxJZGVudGlmaWVyICIkXGhcdyoiIGNvbnRhaW5lZCBjb250YWlucz1waHRtbEVudlZhcixwaHRtbEludFZhcixwaHRtbE9wZXJhdG9yCisKKworIiBJbmNsdWRlCitzeW4ga2V5d29yZCBwaHRtbEluY2x1ZGUgIGluY2x1ZGUgY29udGFpbmVkCisKKyIgRGVmaW5lc2FnCitzeW4ga2V5d29yZCBwaHRtbERlZmluZSAgRnVuY3Rpb24gY29udGFpbmVkCisKKyIgU3RyaW5nCitzeW4gcmVnaW9uIHBodG1sU3RyaW5nIGtlZXBlbmQgbWF0Y2hncm91cD1Ob25lIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrICBlbmQ9KyIrIGNvbnRhaW5zPXBodG1sSWRlbnRpZmllcixwaHRtbFNwZWNpYWxDaGFyLEBwaHRtbFNxbCBjb250YWluZWQKKworIiBOdW1iZXIKK3N5biBtYXRjaCBwaHRtbE51bWJlciAgIi1cPVw8XGRcK1w+IiBjb250YWluZWQKKworIiBGbG9hdAorc3luIG1hdGNoIHBodG1sRmxvYXQgICJcKC1cPVw8XGQrXHwtXD1cKVwuXGRcK1w+IiBjb250YWluZWQKKworIiBTcGVjaWFsQ2hhcgorc3luIG1hdGNoIHBodG1sU3BlY2lhbENoYXIgIlxcW2FiY2ZucnR5dlxcXSIgY29udGFpbmVkCitzeW4gbWF0Y2ggcGh0bWxTcGVjaWFsQ2hhciAiXFxcZFx7M30iIGNvbnRhaW5lZCBjb250YWlucz1waHRtbE9jdGFsRXJyb3IKK3N5biBtYXRjaCBwaHRtbFNwZWNpYWxDaGFyICJcXHhbMC05YS1mQS1GXVx7Mn0iIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggcGh0bWxPY3RhbEVycm9yICJbODldIiBjb250YWluZWQKKworCitzeW4gbWF0Y2ggcGh0bWxQYXJlbnRFcnJvciAiWyl9XF1dIiBjb250YWluZWQKKworIiBUb2RvCitzeW4ga2V5d29yZCBwaHRtbFRvZG8gVE9ETyBUb2RvIHRvZG8gY29udGFpbmVkCisKKyIgUGFyZW50cworc3luIGNsdXN0ZXIgcGh0bWxJbnNpZGUgY29udGFpbnM9cGh0bWxDb21tZW50LHBodG1sRnVuY3Rpb25zLHBodG1sSWRlbnRpZmllcixwaHRtbENvbmRpdGlvbmFsLHBodG1sUmVwZWF0LHBodG1sTGFiZWwscGh0bWxTdGF0ZW1lbnQscGh0bWxPcGVyYXRvcixwaHRtbFJlbGF0aW9uLHBodG1sU3RyaW5nLHBodG1sTnVtYmVyLHBodG1sRmxvYXQscGh0bWxTcGVjaWFsQ2hhcixwaHRtbFBhcmVudCxwaHRtbFBhcmVudEVycm9yLHBodG1sSW5jbHVkZQorCitzeW4gY2x1c3RlciBwaHRtbFRvcCBjb250YWlucz1AcGh0bWxJbnNpZGUscGh0bWxJbmNsdWRlLHBodG1sRGVmaW5lLHBodG1sUGFyZW50RXJyb3IscGh0bWxUb2RvCitzeW4gcmVnaW9uIHBodG1sUGFyZW50CW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIoIiBlbmQ9IikiIGNvbnRhaW5lZCBjb250YWlucz1AcGh0bWxJbnNpZGUKK3N5biByZWdpb24gcGh0bWxQYXJlbnQJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9InsiIGVuZD0ifSIgY29udGFpbmVkIGNvbnRhaW5zPUBwaHRtbEluc2lkZQorc3luIHJlZ2lvbiBwaHRtbFBhcmVudAltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXFsiIGVuZD0iXF0iIGNvbnRhaW5lZCBjb250YWlucz1AcGh0bWxJbnNpZGUKKworc3luIHJlZ2lvbiBwaHRtbFJlZ2lvbiBrZWVwZW5kIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSI8PyIgc2tpcD0rKC4qPi4qKVx8Ii5cey19Pi5cey19Ilx8L1wqLlx7LX0+Llx7LX1cKi8rIGVuZD0iPiIgY29udGFpbnM9QHBodG1sVG9wCitzeW4gcmVnaW9uIHBodG1sUmVnaW9uSW5zaWRlSHRtbFRhZ3Mga2VlcGVuZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iPD8iIHNraXA9KyguKj4uKilcfC9cKi5cey19Pi5cey19XCovKyBlbmQ9Ij4iIGNvbnRhaW5zPUBwaHRtbFRvcCBjb250YWluZWQKKworIiBzeW5jCitpZiBleGlzdHMoInBodG1sX21pbmxpbmVzIikKKyAgZXhlYyAic3luIHN5bmMgbWlubGluZXM9IiAuIHBodG1sX21pbmxpbmVzCitlbHNlCisgIHN5biBzeW5jIG1pbmxpbmVzPTEwMAorZW5kaWYKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcGh0bWxfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcGh0bWxfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgcGh0bWxDb21tZW50CQlDb21tZW50CisgIEhpTGluayBwaHRtbFN0cmluZwkJU3RyaW5nCisgIEhpTGluayBwaHRtbE51bWJlcgkJTnVtYmVyCisgIEhpTGluayBwaHRtbEZsb2F0CQlGbG9hdAorICBIaUxpbmsgcGh0bWxJZGVudGlmaWVyCUlkZW50aWZpZXIKKyAgSGlMaW5rIHBodG1sSW50VmFyCQlJZGVudGlmaWVyCisgIEhpTGluayBwaHRtbEVudlZhcgkJSWRlbnRpZmllcgorICBIaUxpbmsgcGh0bWxGdW5jdGlvbnMJCUZ1bmN0aW9uCisgIEhpTGluayBwaHRtbFJlcGVhdAkJUmVwZWF0CisgIEhpTGluayBwaHRtbENvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluayBwaHRtbExhYmVsCQlMYWJlbAorICBIaUxpbmsgcGh0bWxTdGF0ZW1lbnQJCVN0YXRlbWVudAorICBIaUxpbmsgcGh0bWxUeXBlCQlUeXBlCisgIEhpTGluayBwaHRtbEluY2x1ZGUJCUluY2x1ZGUKKyAgSGlMaW5rIHBodG1sRGVmaW5lCQlEZWZpbmUKKyAgSGlMaW5rIHBodG1sU3BlY2lhbENoYXIJU3BlY2lhbENoYXIKKyAgSGlMaW5rIHBodG1sUGFyZW50RXJyb3IJRXJyb3IKKyAgSGlMaW5rIHBodG1sT2N0YWxFcnJvcglFcnJvcgorICBIaUxpbmsgcGh0bWxUb2RvCQlUb2RvCisgIEhpTGluayBwaHRtbE9wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgcGh0bWxSZWxhdGlvbgkJT3BlcmF0b3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicGh0bWwiCisKK2lmIG1haW5fc3ludGF4ID09ICdwaHRtbCcKKyAgdW5sZXQgbWFpbl9zeW50YXgKK2VuZGlmCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9waWMudmltIGIvcnVudGltZS9zeW50YXgvcGljLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGM5NjRlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcGljLnZpbQpAQCAtMCwwICsxLDEyNyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBQSUMxNkY4NCBBc3NlbWJsZXIgKE1pY3JvY2hpcCdzIG1pY3JvY29udHJvbGxlcikKKyIgTWFpbnRhaW5lcjogICBBbGVrc2FuZGFyIFZlc2VsaW5vdmljIDxhbGVrc2FAY3MuY211LmNvbT4KKyIgTGFzdCBDaGFuZ2U6ICAyMDAzIE1heSAxMQorIiBVUkw6CQlodHRwOi8vZ2FsZWIuZXRmLmJnLmFjLnl1L35hbGV4YS92aW0vc3ludGF4L3BpYy52aW0KKyIgUmV2aXNpb246ICAgICAxLjAxCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgbWF0Y2gKK3N5biBrZXl3b3JkIHBpY1RvZG8gTk9URSBUT0RPIFhYWCBjb250YWluZWQKKworc3luIGNhc2UgaWdub3JlCisKK3N5biBtYXRjaCBwaWNJZGVudGlmaWVyICJbYS16XyRdW2EtejAtOV8kXSoiCitzeW4gbWF0Y2ggcGljTGFiZWwgICAgICAiXltBLVpfJF1bQS1aMC05XyRdKiIKK3N5biBtYXRjaCBwaWNMYWJlbCAgICAgICJeW0EtWl8kXVtBLVowLTlfJF0qOiJtZT1lLTEKKworc3luIG1hdGNoIHBpY0FTQ0lJICAgICAgIkFcPScuJyIKK3N5biBtYXRjaCBwaWNCaW5hcnkgICAgICJCJ1swLTFdXCsnIgorc3luIG1hdGNoIHBpY0RlY2ltYWwgICAgIkQnXGRcKyciCitzeW4gbWF0Y2ggcGljRGVjaW1hbCAgICAiXGRcKyIKK3N5biBtYXRjaCBwaWNIZXhhZGVjaW1hbCAiMHhceFwrIgorc3luIG1hdGNoIHBpY0hleGFkZWNpbWFsICJIJ1x4XCsnIgorc3luIG1hdGNoIHBpY0hleGFkZWNpbWFsICJbMC05XVx4KmgiCitzeW4gbWF0Y2ggcGljT2N0YWwgICAgICAiTydbMC03XVxvKiciCisKKworc3luIG1hdGNoIHBpY0NvbW1lbnQgICAgIjsuKiIgY29udGFpbnM9cGljVG9kbworCitzeW4gcmVnaW9uIHBpY1N0cmluZyAgICBzdGFydD0rIisgZW5kPSsiKworCitzeW4ga2V5d29yZCBwaWNSZWdpc3RlcgkJSU5ERiBUTVIwIFBDTCBTVEFUVVMgRlNSIFBPUlRBIFBPUlRCCitzeW4ga2V5d29yZCBwaWNSZWdpc3RlcgkJRUVEQVRBIEVFQURSIFBDTEFUSCBJTlRDT04gSU5ERiBPUFRJT05fUkVHIFBDTAorc3luIGtleXdvcmQgcGljUmVnaXN0ZXIJCUZTUiBUUklTQSBUUklTQiBFRUNPTjEgRUVDT04yIElOVENPTiBPUFRJT04KKworCisiIFJlZ2lzdGVyIC0tLSBiaXRzCisKKyIgU1RBVFVTCitzeW4ga2V5d29yZCBwaWNSZWdpc3RlclBhcnQgICAgIElSUCBSUDEgUlAwIFRPIFBEIFogREMgQworCisiIFBPUlRBCitzeW4ga2V5d29yZCBwaWNSZWdpc3RlclBhcnQgICAgIFQwQ0tJCitzeW4gbWF0Y2ggICBwaWNSZWdpc3RlclBhcnQgICAgICJSQVswLTRdIgorCisiIFBPUlRCCitzeW4ga2V5d29yZCBwaWNSZWdpc3RlclBhcnQgICAgIElOVAorc3luIG1hdGNoICAgcGljUmVnaXN0ZXJQYXJ0ICAgICAiUkJbMC03XSIKKworIiBJTlRDT04KK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCAgICAgR0lFIEVFSUUgVDBJRSBJTlRFIFJCSUUgVDBJRiBJTlRGIFJCSUYKKworIiBPUFRJT04KK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCAgICAgUkJQVSBJTlRFREcgVDBDUyBUMFNFIFBTQSBQUzIgUFMxIFBTMAorCisiIEVFQ09OMgorc3luIGtleXdvcmQgcGljUmVnaXN0ZXJQYXJ0ICAgICBFRUlGIFdSRVJSIFdSRU4gV1IgUkQKKworIiBJTlRDT04KK3N5biBrZXl3b3JkIHBpY1JlZ2lzdGVyUGFydCAgICAgR0lFIEVFSUUgVDBJRSBJTlRFIFJCSUUgVDBJRiBJTlRGIFJCSUYKKworCisiIE9wQ29kZXMuLi4KK3N5biBrZXl3b3JkIHBpY09wY29kZSAgQUREV0YgQU5EV0YgQ0xSRiBDTFJXIENPTUYgREVDRiBERUNGU1ogSU5DRiBJTkNGU1oKK3N5biBrZXl3b3JkIHBpY09wY29kZSAgSU9SV0YgTU9WRiBNT1ZXRiBOT1AgUkxGIFJSRiBTVUJXRiBTV0FQRiBYT1JXRgorc3luIGtleXdvcmQgcGljT3Bjb2RlICBCQ0YgQlNGIEJURlNDIEJURlNTCitzeW4ga2V5d29yZCBwaWNPcGNvZGUgIEFERExXIEFORExXIENBTEwgQ0xSV0RUIEdPVE8gSU9STFcgTU9WTFcgUkVURklFCitzeW4ga2V5d29yZCBwaWNPcGNvZGUgIFJFVExXIFJFVFVSTiBTTEVFUCBTVUJMVyBYT1JMVworc3luIGtleXdvcmQgcGljT3Bjb2RlICBHT1RPCisKKworIiBEaXJlY3RpdmVzCitzeW4ga2V5d29yZCBwaWNEaXJlY3RpdmUgX19CQURSQU0gQkFOS0lTRUwgQkFOS1NFTCBDQkxPQ0sgQ09ERSBfX0NPTkZJRworc3luIGtleXdvcmQgcGljRGlyZWN0aXZlIENPTlNUQU5UIERBVEEgREIgREUgRFQgRFcgRUxTRSBFTkQgRU5EQworc3luIGtleXdvcmQgcGljRGlyZWN0aXZlIEVORElGIEVORE0gRU5EVyBFUVUgRVJST1IgRVJST1JMRVZFTCBFWElUTSBFWFBBTkQKK3N5biBrZXl3b3JkIHBpY0RpcmVjdGl2ZSBFWFRFUk4gRklMTCBHTE9CQUwgSURBVEEgX19JRExPQ1MgSUYgSUZERUYgSUZOREVGCitzeW4ga2V5d29yZCBwaWNEaXJlY3RpdmUgSU5DTFVERSBMSVNUIExPQ0FMIE1BQ1JPIF9fTUFYUkFNIE1FU1NHIE5PRVhQQU5ECitzeW4ga2V5d29yZCBwaWNEaXJlY3RpdmUgTk9MSVNUIE9SRyBQQUdFIFBBR0VTRUwgUFJPQ0VTU09SIFJBRElYIFJFUyBTRVQKK3N5biBrZXl3b3JkIHBpY0RpcmVjdGl2ZSBTUEFDRSBTVUJUSVRMRSBUSVRMRSBVREFUQSBVREFUQV9PVlIgVURBVEFfU0hSCitzeW4ga2V5d29yZCBwaWNEaXJlY3RpdmUgVkFSSUFCTEUgV0hJTEUgSU5DTFVERQorc3luIG1hdGNoIHBpY0RpcmVjdGl2ZSAgICIjXD1VTkRFRklORSIKK3N5biBtYXRjaCBwaWNEaXJlY3RpdmUgICAiI1w9SU5DTFVERSIKK3N5biBtYXRjaCBwaWNEaXJlY3RpdmUgICAiI1w9REVGSU5FIgorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3BpYzE2Zjg0X3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3BpYzE2Zjg0X3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHBpY1RvZG8JCVRvZG8KKyAgSGlMaW5rIHBpY0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHBpY0RpcmVjdGl2ZQkJU3RhdGVtZW50CisgIEhpTGluayBwaWNMYWJlbAkJTGFiZWwKKyAgSGlMaW5rIHBpY1N0cmluZwkJU3RyaW5nCisKKyAiSGlMaW5rIHBpY09wY29kZQkJS2V5d29yZAorICJIaUxpbmsgcGljUmVnaXN0ZXIJCVN0cnVjdHVyZQorICJIaUxpbmsgcGljUmVnaXN0ZXJQYXJ0CVNwZWNpYWwKKworICBIaUxpbmsgcGljQVNDSUkJCVN0cmluZworICBIaUxpbmsgcGljQmluYXJ5CQlOdW1iZXIKKyAgSGlMaW5rIHBpY0RlY2ltYWwJCU51bWJlcgorICBIaUxpbmsgcGljSGV4YWRlY2ltYWwJCU51bWJlcgorICBIaUxpbmsgcGljT2N0YWwJCU51bWJlcgorCisgIEhpTGluayBwaWNJZGVudGlmaWVyCQlJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInBpYyIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3Bpa2UudmltIGIvcnVudGltZS9zeW50YXgvcGlrZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZiYWZkNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3Bpa2UudmltCkBAIC0wLDAgKzEsMTU1IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJUGlrZQorIiBNYWludGFpbmVyOglGcmFuY2VzY28gQ2hlbW9sbGkgPGtpbmtpZUBrYW1lLnVzci5kc2kudW5pbWkuaXQ+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAxMAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgQSBidW5jaCBvZiB1c2VmdWwgQyBrZXl3b3Jkcworc3luIGtleXdvcmQgcGlrZVN0YXRlbWVudAlnb3RvIGJyZWFrIHJldHVybiBjb250aW51ZQorc3luIGtleXdvcmQgcGlrZUxhYmVsCQljYXNlIGRlZmF1bHQKK3N5biBrZXl3b3JkIHBpa2VDb25kaXRpb25hbAlpZiBlbHNlIHN3aXRjaAorc3luIGtleXdvcmQgcGlrZVJlcGVhdAkJd2hpbGUgZm9yIGZvcmVhY2ggZG8KK3N5biBrZXl3b3JkIHBpa2VTdGF0ZW1lbnQJZ2F1Z2UgZGVzdHJ1Y3QgbGFtYmRhIGluaGVyaXQgaW1wb3J0IHR5cGVvZgorc3luIGtleXdvcmQgcGlrZUV4Y2VwdGlvbgljYXRjaAorc3luIGtleXdvcmQgcGlrZVR5cGUJCWlubGluZSBub21hc2sgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHN0YXRpYworCisKK3N5biBrZXl3b3JkIHBpa2VUb2RvIGNvbnRhaW5lZAlUT0RPIEZJWE1FIFhYWAorCisiIFN0cmluZyBhbmQgQ2hhcmFjdGVyIGNvbnN0YW50cworIiBIaWdobGlnaHQgc3BlY2lhbCBjaGFyYWN0ZXJzICh0aG9zZSB3aGljaCBoYXZlIGEgYmFja3NsYXNoKSBkaWZmZXJlbnRseQorc3luIG1hdGNoIHBpa2VTcGVjaWFsIGNvbnRhaW5lZAkiXFxbMC03XVswLTddWzAtN11cPVx8XFwuIgorc3luIHJlZ2lvbiBwaWtlU3RyaW5nCQlzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPXBpa2VTcGVjaWFsCitzeW4gbWF0Y2ggcGlrZUNoYXJhY3RlcgkJIidbXlxcXSciCitzeW4gbWF0Y2ggcGlrZVNwZWNpYWxDaGFyYWN0ZXIJIidcXC4nIgorc3luIG1hdGNoIHBpa2VTcGVjaWFsQ2hhcmFjdGVyCSInXFxbMC03XVswLTddJyIKK3N5biBtYXRjaCBwaWtlU3BlY2lhbENoYXJhY3RlcgkiJ1xcWzAtN11bMC03XVswLTddJyIKKworIiBDb21wb3VuZCBkYXRhIHR5cGVzCitzeW4gcmVnaW9uIHBpa2VDb21wb3VuZFR5cGUgc3RhcnQ9Jyh7JyBjb250YWlucz1waWtlU3RyaW5nLHBpa2VDb21wb3VuZFR5cGUscGlrZU51bWJlcixwaWtlRmxvYXQgZW5kPSd9KScKK3N5biByZWdpb24gcGlrZUNvbXBvdW5kVHlwZSBzdGFydD0nKFxbJyBjb250YWlucz1waWtlU3RyaW5nLHBpa2VDb21wb3VuZFR5cGUscGlrZU51bWJlcixwaWtlRmxvYXQgZW5kPSdcXSknCitzeW4gcmVnaW9uIHBpa2VDb21wb3VuZFR5cGUgc3RhcnQ9Jyg8JyBjb250YWlucz1waWtlU3RyaW5nLHBpa2VDb21wb3VuZFR5cGUscGlrZU51bWJlcixwaWtlRmxvYXQgZW5kPSc+KScKKworImNhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMKK3N5biByZWdpb24gcGlrZVBhcmVuCQl0cmFuc3BhcmVudCBzdGFydD0nKFtee1s8KF0nIGVuZD0nKScgY29udGFpbnM9QUxMQlVULHBpa2VQYXJlbkVycm9yLHBpa2VJbmNsdWRlZCxwaWtlU3BlY2lhbCxwaWtlVG9kbyxwaWtlVXNlckxhYmVsLHBpa2VCaXRGaWVsZAorc3luIG1hdGNoIHBpa2VQYXJlbkVycm9yCQkiKSIKK3N5biBtYXRjaCBwaWtlSW5QYXJlbiBjb250YWluZWQJIlteKF1be31dW14pXSIKKworImludGVnZXIgbnVtYmVyLCBvciBmbG9hdGluZyBwb2ludCBudW1iZXIgd2l0aG91dCBhIGRvdCBhbmQgd2l0aCAiZiIuCitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCBwaWtlTnVtYmVyCQkiXDxcZFwrXCh1XD1sXD1cfGx1XHxmXClcPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoIHBpa2VGbG9hdAkJIlw8XGRcK1wuXGQqXChlWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggcGlrZUZsb2F0CQkiXC5cZFwrXChlWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGhvdXQgZG90LCB3aXRoIGV4cG9uZW50CitzeW4gbWF0Y2ggcGlrZUZsb2F0CQkiXDxcZFwrZVstK11cPVxkXCtbZmxdXD1cPiIKKyJoZXggbnVtYmVyCitzeW4gbWF0Y2ggcGlrZU51bWJlcgkJIlw8MHhbMC05YS1mXVwrXCh1XD1sXD1cfGx1XClcPiIKKyJzeW4gbWF0Y2ggcGlrZUlkZW50aWZpZXIJIlw8W2Etel9dW2EtejAtOV9dKlw+Igorc3luIGNhc2UgbWF0Y2gKKyIgZmxhZyBhbiBvY3RhbCBudW1iZXIgd2l0aCB3cm9uZyBkaWdpdHMKK3N5biBtYXRjaCBwaWtlT2N0YWxFcnJvcgkJIlw8MFswLTddKls4OV0iCisKK2lmIGV4aXN0cygiY19jb21tZW50X3N0cmluZ3MiKQorICAiIEEgY29tbWVudCBjYW4gY29udGFpbiBwaWtlU3RyaW5nLCBwaWtlQ2hhcmFjdGVyIGFuZCBwaWtlTnVtYmVyLgorICAiIEJ1dCBhICIqLyIgaW5zaWRlIGEgcGlrZVN0cmluZyBpbiBhIHBpa2VDb21tZW50IERPRVMgZW5kIHRoZSBjb21tZW50ISAgU28gd2UKKyAgIiBuZWVkIHRvIHVzZSBhIHNwZWNpYWwgdHlwZSBvZiBwaWtlU3RyaW5nOiBwaWtlQ29tbWVudFN0cmluZywgd2hpY2ggYWxzbyBlbmRzIG9uCisgICIgIiovIiwgYW5kIHNlZXMgYSAiKiIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGFzIGNvbW1lbnQgYWdhaW4uCisgICIgVW5mb3J0dW5hdGVseSB0aGlzIGRvZXNuJ3QgdmVyeSB3ZWxsIHdvcmsgZm9yIC8vIHR5cGUgb2YgY29tbWVudHMgOi0oCisgIHN5bnRheCBtYXRjaCBwaWtlQ29tbWVudFNraXAJY29udGFpbmVkICJeXHMqXCpcKCRcfFxzXCtcKSIKKyAgc3ludGF4IHJlZ2lvbiBwaWtlQ29tbWVudFN0cmluZwljb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBlbmQ9K1wqLyttZT1zLTEgY29udGFpbnM9cGlrZVNwZWNpYWwscGlrZUNvbW1lbnRTa2lwCisgIHN5bnRheCByZWdpb24gcGlrZUNvbW1lbnQyU3RyaW5nCWNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGVuZD0iJCIgY29udGFpbnM9cGlrZVNwZWNpYWwKKyAgc3ludGF4IHJlZ2lvbiBwaWtlQ29tbWVudAlzdGFydD0iL1wqIiBlbmQ9IlwqLyIgY29udGFpbnM9cGlrZVRvZG8scGlrZUNvbW1lbnRTdHJpbmcscGlrZUNoYXJhY3RlcixwaWtlTnVtYmVyLHBpa2VGbG9hdAorICBzeW50YXggbWF0Y2ggIHBpa2VDb21tZW50CSIvLy4qIiBjb250YWlucz1waWtlVG9kbyxwaWtlQ29tbWVudDJTdHJpbmcscGlrZUNoYXJhY3RlcixwaWtlTnVtYmVyCisgIHN5bnRheCBtYXRjaCAgcGlrZUNvbW1lbnQJIiNcIS4qIiBjb250YWlucz1waWtlVG9kbyxwaWtlQ29tbWVudDJTdHJpbmcscGlrZUNoYXJhY3RlcixwaWtlTnVtYmVyCitlbHNlCisgIHN5biByZWdpb24gcGlrZUNvbW1lbnQJCXN0YXJ0PSIvXCoiIGVuZD0iXCovIiBjb250YWlucz1waWtlVG9kbworICBzeW4gbWF0Y2ggcGlrZUNvbW1lbnQJCSIvLy4qIiBjb250YWlucz1waWtlVG9kbworICBzeW4gbWF0Y2ggcGlrZUNvbW1lbnQJCSIjIS4qIiBjb250YWlucz1waWtlVG9kbworZW5kaWYKK3N5bnRheCBtYXRjaCBwaWtlQ29tbWVudEVycm9yCSJcKi8iCisKK3N5biBrZXl3b3JkIHBpa2VPcGVyYXRvcglzaXplb2YKK3N5biBrZXl3b3JkIHBpa2VUeXBlCQlpbnQgc3RyaW5nIHZvaWQgZmxvYXQgbWFwcGluZyBhcnJheSBtdWx0aXNldCBtaXhlZAorc3luIGtleXdvcmQgcGlrZVR5cGUJCXByb2dyYW0gb2JqZWN0IGZ1bmN0aW9uCisKK3N5biByZWdpb24gcGlrZVByZUNvbmRpdAlzdGFydD0iXlxzKiNccypcKGlmXD5cfGlmZGVmXD5cfGlmbmRlZlw+XHxlbGlmXD5cfGVsc2VcPlx8ZW5kaWZcPlwpIiBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9cGlrZUNvbW1lbnQscGlrZVN0cmluZyxwaWtlQ2hhcmFjdGVyLHBpa2VOdW1iZXIscGlrZUNvbW1lbnRFcnJvcgorc3luIHJlZ2lvbiBwaWtlSW5jbHVkZWQgY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisKK3N5biBtYXRjaCBwaWtlSW5jbHVkZWQgY29udGFpbmVkICI8W14+XSo+Igorc3luIG1hdGNoIHBpa2VJbmNsdWRlCQkiXlxzKiNccyppbmNsdWRlXD5ccypbIjxdIiBjb250YWlucz1waWtlSW5jbHVkZWQKKyJzeW4gbWF0Y2ggcGlrZUxpbmVTa2lwCSJcXCQiCitzeW4gcmVnaW9uIHBpa2VEZWZpbmUJCXN0YXJ0PSJeXHMqI1xzKlwoZGVmaW5lXD5cfHVuZGVmXD5cKSIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPUFMTEJVVCxwaWtlUHJlQ29uZGl0LHBpa2VJbmNsdWRlZCxwaWtlSW5jbHVkZSxwaWtlRGVmaW5lLHBpa2VJblBhcmVuCitzeW4gcmVnaW9uIHBpa2VQcmVQcm9jCQlzdGFydD0iXlxzKiNccypcKHByYWdtYVw+XHxsaW5lXD5cfHdhcm5pbmdcPlx8d2Fyblw+XHxlcnJvclw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1BTExCVVQscGlrZVByZUNvbmRpdCxwaWtlSW5jbHVkZWQscGlrZUluY2x1ZGUscGlrZURlZmluZSxwaWtlSW5QYXJlbgorCisiIEhpZ2hsaWdodCBVc2VyIExhYmVscworc3luIHJlZ2lvbglwaWtlTXVsdGkJCXRyYW5zcGFyZW50IHN0YXJ0PSc/JyBlbmQ9JzonIGNvbnRhaW5zPUFMTEJVVCxwaWtlSW5jbHVkZWQscGlrZVNwZWNpYWwscGlrZVRvZG8scGlrZVVzZXJMYWJlbCxwaWtlQml0RmllbGQKKyIgQXZvaWQgbWF0Y2hpbmcgZm9vOjpiYXIoKSBpbiBDKysgYnkgcmVxdWlyaW5nIHRoYXQgdGhlIG5leHQgY2hhciBpcyBub3QgJzonCitzeW4gbWF0Y2gJcGlrZVVzZXJMYWJlbAkiXlxzKlxJXGkqXHMqOiQiCitzeW4gbWF0Y2gJcGlrZVVzZXJMYWJlbAkiO1xzKlxJXGkqXHMqOiQibXM9cysxCitzeW4gbWF0Y2gJcGlrZVVzZXJMYWJlbAkiXlxzKlxJXGkqXHMqOlteOl0ibWU9ZS0xCitzeW4gbWF0Y2gJcGlrZVVzZXJMYWJlbAkiO1xzKlxJXGkqXHMqOlteOl0ibXM9cysxLG1lPWUtMQorCisiIEF2b2lkIHJlY29nbml6aW5nIG1vc3QgYml0ZmllbGRzIGFzIGxhYmVscworc3luIG1hdGNoCXBpa2VCaXRGaWVsZAkiXlxzKlxJXGkqXHMqOlxzKlsxLTldIm1lPWUtMQorc3luIG1hdGNoCXBpa2VCaXRGaWVsZAkiO1xzKlxJXGkqXHMqOlxzKlsxLTldIm1lPWUtMQorCitzeW4gc3luYyBjY29tbWVudCBwaWtlQ29tbWVudCBtaW5saW5lcz0xMAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9waWtlX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3Bpa2Vfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgcGlrZUxhYmVsCQlMYWJlbAorICBIaUxpbmsgcGlrZVVzZXJMYWJlbAkJTGFiZWwKKyAgSGlMaW5rIHBpa2VDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgcGlrZVJlcGVhdAkJUmVwZWF0CisgIEhpTGluayBwaWtlQ2hhcmFjdGVyCQlDaGFyYWN0ZXIKKyAgSGlMaW5rIHBpa2VTcGVjaWFsQ2hhcmFjdGVyIHBpa2VTcGVjaWFsCisgIEhpTGluayBwaWtlTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHBpa2VGbG9hdAkJRmxvYXQKKyAgSGlMaW5rIHBpa2VPY3RhbEVycm9yCQlwaWtlRXJyb3IKKyAgSGlMaW5rIHBpa2VQYXJlbkVycm9yCQlwaWtlRXJyb3IKKyAgSGlMaW5rIHBpa2VJblBhcmVuCQlwaWtlRXJyb3IKKyAgSGlMaW5rIHBpa2VDb21tZW50RXJyb3IJcGlrZUVycm9yCisgIEhpTGluayBwaWtlT3BlcmF0b3IJCU9wZXJhdG9yCisgIEhpTGluayBwaWtlSW5jbHVkZQkJSW5jbHVkZQorICBIaUxpbmsgcGlrZVByZVByb2MJCVByZVByb2MKKyAgSGlMaW5rIHBpa2VEZWZpbmUJCU1hY3JvCisgIEhpTGluayBwaWtlSW5jbHVkZWQJCXBpa2VTdHJpbmcKKyAgSGlMaW5rIHBpa2VFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIHBpa2VTdGF0ZW1lbnQJCVN0YXRlbWVudAorICBIaUxpbmsgcGlrZVByZUNvbmRpdAkJUHJlQ29uZGl0CisgIEhpTGluayBwaWtlVHlwZQkJVHlwZQorICBIaUxpbmsgcGlrZUNvbW1lbnRFcnJvcglwaWtlRXJyb3IKKyAgSGlMaW5rIHBpa2VDb21tZW50U3RyaW5nCXBpa2VTdHJpbmcKKyAgSGlMaW5rIHBpa2VDb21tZW50MlN0cmluZwlwaWtlU3RyaW5nCisgIEhpTGluayBwaWtlQ29tbWVudFNraXAJcGlrZUNvbW1lbnQKKyAgSGlMaW5rIHBpa2VTdHJpbmcJCVN0cmluZworICBIaUxpbmsgcGlrZUNvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHBpa2VTcGVjaWFsCQlTcGVjaWFsQ2hhcgorICBIaUxpbmsgcGlrZVRvZG8JCVRvZG8KKyAgSGlMaW5rIHBpa2VFeGNlcHRpb24JCXBpa2VTdGF0ZW1lbnQKKyAgSGlMaW5rIHBpa2VDb21wb3VuZFR5cGUJQ29uc3RhbnQKKyAgIkhpTGluayBwaWtlSWRlbnRpZmllcglJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInBpa2UiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9waWxyYy52aW0gYi9ydW50aW1lL3N5bnRheC9waWxyYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkNTYxMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3BpbHJjLnZpbQpAQCAtMCwwICsxLDE0OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CXBpbHJjIC0gYSByZXNvdXJjZSBjb21waWxlciBmb3IgUGFsbSBPUyBkZXZlbG9wbWVudAorIiBNYWludGFpbmVyOglCcmlhbiBTY2hhdSA8YnJpYW5Ac2NoYXUuY29tPgorIiBMYXN0IGNoYW5nZToJMjAwMyBNYXkgMTEKKyIgQXZhaWxhYmxlIG9uOglodHRwOi8vd3d3LnNjaGF1LmNvbS9waWxyY3ZpbS9waWxyYy52aW0KKworIiBSZW1vdmUgYW55IG9sZCBzeW50YXgKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW4gY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyIgTm90ZXM6IFRSQU5TUEFSRU5ULCBGT05UIGFuZCBGT05UIElEIGFyZSBkZWZpbmVkIGluIHRoZSBzcGVjaWFscworIgkgc2VjdGlvbiBiZWxvdy4gICBCZXdhcmUgb2YgdGhlIG9yZGVyIG9mIHRoZSBzcGVjaWFscyEKKyIJIExvb2sgaW4gdGhlIHN5bnRheC50eHQgYW5kIHVzcl8yNy50eHQgZmlsZXMgaW4gdmltXHZpbXt2ZXJzaW9ufVxkb2MKKyIJIGRpcmVjdG9yeSBmb3IgcmVnZXhwcyBldGMuCisKKyIgS2V5d29yZHMgLSBiYXNpYworc3luIGtleXdvcmQgcGlscmNLZXl3b3JkIEFMRVJUIEFQUExJQ0FUSU9OIEFQUExJQ0FUSU9OSUNPTk5BTUUgQVJFQQorc3luIGtleXdvcmQgcGlscmNLZXl3b3JkIEJJVE1BUCBCSVRNQVBDT0xPUiBCSVRNQVBDT0xPUjE2IEJJVE1BUENPTE9SMTZLCitzeW4ga2V5d29yZCBwaWxyY0tleXdvcmQgQklUTUFQRkFNSUxZIEJJVE1BUEZBTUlMWUVYIEJJVE1BUEZBTUlMWVNQRUNJQUwKK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBCSVRNQVBHUkVZIEJJVE1BUEdSRVkxNiBCSVRNQVBTQ1JFRU5GQU1JTFkKK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBCT09UU0NSRUVORkFNSUxZIEJVVFRPTiBCVVRUT05TIEJZVEVMSVNUCitzeW4ga2V5d29yZCBwaWxyY0tleXdvcmQgQ0FURUdPUklFUyBDSEVDS0JPWCBDT1VOVFJZTE9DQUxJU0FUSU9OCitzeW4ga2V5d29yZCBwaWxyY0tleXdvcmQgREFUQQorc3luIGtleXdvcmQgcGlscmNLZXl3b3JkIEZFQVRVUkUgRklFTEQgRk9OVElOREVYIEZPUk0gRk9STUJJVE1BUAorc3luIGtleXdvcmQgcGlscmNLZXl3b3JkIEdBREdFVCBHRU5FUkFURUhFQURFUgorc3luIGtleXdvcmQgcGlscmNLZXl3b3JkIEdSQUZGSVRJSU5QVVRBUkVBIEdSQUZGSVRJU1RBVEVJTkRJQ0FUT1IKK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBIRVgKK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBJQ09OIElDT05GQU1JTFkgSUNPTkZBTUlMWUVYIElOVEVHRVIKK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBLRVlCT0FSRAorc3luIGtleXdvcmQgcGlscmNLZXl3b3JkIExBQkVMIExBVU5DSEVSQ0FURUdPUlkgTElTVCBMT05HV09SRExJU1QKK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBNRU5VIE1FTlVJVEVNIE1FU1NBR0UgIE1JREkKK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBQQUxFVFRFVEFCTEUgUE9QVVBMSVNUIFBPUFVQVFJJR0dFUgorc3luIGtleXdvcmQgcGlscmNLZXl3b3JkIFBVTExET1dOIFBVU0hCVVRUT04KK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBSRVBFQVRCVVRUT04gUkVTRVRBVVRPSUQKK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBTQ1JPTExCQVIgU0VMRUNUT1JUUklHR0VSIFNMSURFUiBTTUFMTElDT04KK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBTTUFMTElDT05GQU1JTFkgU01BTExJQ09ORkFNSUxZRVggU1RSSU5HIFNUUklOR1RBQkxFCitzeW4ga2V5d29yZCBwaWxyY0tleXdvcmQgVEFCTEUgVElUTEUgVFJBTlNMQVRJT04gVFJBUAorc3luIGtleXdvcmQgcGlscmNLZXl3b3JkIFZFUlNJT04KK3N5biBrZXl3b3JkIHBpbHJjS2V5d29yZCBXT1JETElTVAorCisiIFR5cGVzCitzeW4ga2V5d29yZCBwaWxyY1R5cGUgQVQgQVVUT1NISUZUCitzeW4ga2V5d29yZCBwaWxyY1R5cGUgQkFDS0dST1VORElEIEJJVE1BUElEIEJPTERGUkFNRSBCUFAKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBDSEVDS0VEIENPTE9SVEFCTEUgQ09MVU1OUyBDT0xVTU5XSURUSFMgQ09NUFJFU1MKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBDT01QUkVTU0JFU1QgQ09NUFJFU1NQQUNLQklUUyBDT01QUkVTU1JMRSBDT01QUkVTU1NDQU5MSU5FCitzeW4ga2V5d29yZCBwaWxyY1R5cGUgQ09ORklSTUFUSU9OIENPVU5UUlkgQ1JFQVRPUiBDVVJSRU5DWURFQ0lNQUxQTEFDRVMKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBDVVJSRU5DWU5BTUUgQ1VSUkVOQ1lTWU1CT0wgQ1VSUkVOQ1lVTklRVUVTWU1CT0wKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBEQVRFRk9STUFUIERBWUxJR0hUU0FWSU5HUyBERUZBVUxUQlROSUQgREVGQVVMVEJVVFRPTgorc3luIGtleXdvcmQgcGlscmNUeXBlIERFTlNJVFkgRElTQUJMRUQgRFlOQU1JQ1NJWkUKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBFRElUQUJMRSBFTlRSWSBFUlJPUiBFWFRFTkRFRAorc3luIGtleXdvcmQgcGlscmNUeXBlIEZFRURCQUNLIEZJTEUgRk9OVElEIEZPUkNFQ09NUFJFU1MgRlJBTUUKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBHUkFGRklUSSBHUkFQSElDQUwgR1JPVVAKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBIQVNTQ1JPTExCQVIgSEVMUElECitzeW4ga2V5d29yZCBwaWxyY1R5cGUgSUQgSU5ERVggSU5GT1JNQVRJT04KK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBLRVlET1dOQ0hSIEtFWURPV05LRVlDT0RFIEtFWURPV05NT0RJRklFUlMKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBMQU5HVUFHRSBMRUZUQUxJR04gTEVGVEFOQ0hPUiBMT05HREFURUZPUk1BVAorc3luIGtleXdvcmQgcGlscmNUeXBlIE1BWCBNQVhDSEFSUyBNRUFTVVJFTUVOVFNZU1RFTSBNRU5VSUQgTUlOIExPQ0FMRQorc3luIGtleXdvcmQgcGlscmNUeXBlIE1JTlVURVNXRVNUT0ZHTVQgTU9EQUwgTVVMVElQTEVMSU5FUworc3luIGtleXdvcmQgcGlscmNUeXBlIE5BTUUgTk9DT0xPUlRBQkxFIE5PQ09NUFJFU1MgTk9GUkFNRSBOT05FRElUQUJMRQorc3luIGtleXdvcmQgcGlscmNUeXBlIE5PTkVYVEVOREVEIE5PTlVTQUJMRSBOT1NBVkVCRUhJTkQgTlVNQkVSIE5VTUJFUkZPUk1BVAorc3luIGtleXdvcmQgcGlscmNUeXBlIE5VTUVSSUMKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBQQUdFU0laRQorc3luIGtleXdvcmQgcGlscmNUeXBlIFJFQ1RGUkFNRSBSSUdIVEFMSUdOIFJJR0hUQU5DSE9SIFJPV1MKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBTQVZFQkVISU5EIFNFQVJDSCBTQ1JFRU4gU0VMRUNURURCSVRNQVBJRCBTSU5HTEVMSU5FCitzeW4ga2V5d29yZCBwaWxyY1R5cGUgVEhVTUJJRCBUUkFOU1BBUkVOVElOREVYIFRJTUVGT1JNQVQKK3N5biBrZXl3b3JkIHBpbHJjVHlwZSBVTkRFUkxJTkVEIFVTQUJMRQorc3luIGtleXdvcmQgcGlscmNUeXBlIFZBTFVFIFZFUlRJQ0FMIFZJU0lCTEVJVEVNUworc3luIGtleXdvcmQgcGlscmNUeXBlIFdBUk5JTkcgV0VFS1NUQVJUREFZCisKKyIgQ291bnRyeQorc3luIGtleXdvcmQgcGlscmNDb3VudHJ5IEF1c3RyYWxpYSBBdXN0cmlhIEJlbGdpdW0gQnJhemlsIENhbmFkYSBEZW5tYXJrCitzeW4ga2V5d29yZCBwaWxyY0NvdW50cnkgRmlubGFuZCBGcmFuY2UgR2VybWFueSBIb25nS29uZyBJY2VsYW5kIEluZGlhbgorc3luIGtleXdvcmQgcGlscmNDb3VudHJ5IEluZG9uZXNpYSBJcmVsYW5kIEl0YWx5IEphcGFuIEtvcmVhIEx1eGVtYm91cmcgTWFsYXlzaWEKK3N5biBrZXl3b3JkIHBpbHJjQ291bnRyeSBNZXhpY28gTmV0aGVybGFuZHMgTmV3WmVhbGFuZCBOb3J3YXkgUGhpbGlwcGluZXMKK3N5biBrZXl3b3JkIHBpbHJjQ291bnRyeSBSZXBDaGluYSBTaW5nYXBvcmUgU3BhaW4gU3dlZGVuIFN3aXR6ZXJsYW5kIFRoYWlsYW5kCitzeW4ga2V5d29yZCBwaWxyY0NvdW50cnkgVGFpd2FuIFVuaXRlZEtpbmdkb20gVW5pdGVkU3RhdGVzCisKKyIgTGFuZ3VhZ2UKK3N5biBrZXl3b3JkIHBpbHJjTGFuZ3VhZ2UgRW5nbGlzaCBGcmVuY2ggR2VybWFuIEl0YWxpYW4gSmFwYW5lc2UgU3BhbmlzaAorCisiIFN0cmluZworc3luIG1hdGNoIHBpbHJjU3RyaW5nICJcIlteIl0qXCIiCisKKyIgTnVtYmVyCitzeW4gbWF0Y2ggcGlscmNOdW1iZXIgIlw8MHhceFwrXD4iCitzeW4gbWF0Y2ggcGlscmNOdW1iZXIgIlw8XGRcK1w+IgorCisiIENvbW1lbnQKK3N5biByZWdpb24gcGlscmNDb21tZW50IHN0YXJ0PSIvXCoiIGVuZD0iXCovIgorc3luIHJlZ2lvbiBwaWxyY0NvbW1lbnQgc3RhcnQ9Ii8vIiBlbmQ9IiQiCisKKyIgQ29uc3RhbnRzCitzeW4ga2V5d29yZCBwaWxyY0NvbnN0YW50IEFVVE8gQVVUT0lEIEJPVFRPTSBDRU5URVIgUFJFVkJPVFRPTSBQUkVWSEVJR0hUCitzeW4ga2V5d29yZCBwaWxyY0NvbnN0YW50IFBSRVZMRUZUIFBSRVZSSUdIVCBQUkVWVE9QIFBSRVZXSURUSCBSSUdIVAorc3luIGtleXdvcmQgcGlscmNDb25zdGFudCBTRVBBUkFUT1IKKworIiBJZGVudGlmaWVyCitzeW4gbWF0Y2ggcGlscmNJZGVudGlmaWVyICJcPFxoXHcqXD4iCisKKyIgU3BlY2lhbHMKK3N5biBtYXRjaCBwaWxyY1R5cGUgIlw8Rk9OVFw+Igorc3luIG1hdGNoIHBpbHJjS2V5d29yZCAiXDxGT05UXD5ccypcPElEXD4iCitzeW4gbWF0Y2ggcGlscmNUeXBlICJcPFRSQU5TUEFSRU5UXD4iCisKKyIgRnVuY3Rpb24KK3N5biBrZXl3b3JkIHBpbHJjRnVuY3Rpb24gQkVHSU4gRU5ECisKKyIgSW5jbHVkZQorc3luIG1hdGNoIHBpbHJjSW5jbHVkZSAiXCNpbmNsdWRlIgorc3luIG1hdGNoIHBpbHJjSW5jbHVkZSAiXCNkZWZpbmUiCitzeW4ga2V5d29yZCBwaWxyY0luY2x1ZGUgZXF1CitzeW4ga2V5d29yZCBwaWxyY0luY2x1ZGUgcGFja2FnZQorc3luIHJlZ2lvbiBwaWxyY0luY2x1ZGUgc3RhcnQ9InB1YmxpYyBjbGFzcyIgZW5kPSJ9IgorCitzeW4gc3luYyBjY29tbWVudCBwaWxyY0NvbW1lbnQKKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3BpbHJjX3N5bnRheF9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCWxldCBkaWRfcGlscmNfc3ludGF4X2luaXRzID0gMQorCisJIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcKKwlIaUxpbmsgcGlscmNLZXl3b3JkCQlTdGF0ZW1lbnQKKwlIaUxpbmsgcGlscmNUeXBlCQlUeXBlCisJSGlMaW5rIHBpbHJjRXJyb3IJCUVycm9yCisJSGlMaW5rIHBpbHJjQ291bnRyeQkJU3BlY2lhbENoYXIKKwlIaUxpbmsgcGlscmNMYW5ndWFnZQkJU3BlY2lhbENoYXIKKwlIaUxpbmsgcGlscmNTdHJpbmcJCVNwZWNpYWxDaGFyCisJSGlMaW5rIHBpbHJjTnVtYmVyCQlOdW1iZXIKKwlIaUxpbmsgcGlscmNDb21tZW50CQlDb21tZW50CisJSGlMaW5rIHBpbHJjQ29uc3RhbnQJCUNvbnN0YW50CisJSGlMaW5rIHBpbHJjRnVuY3Rpb24JCUZ1bmN0aW9uCisJSGlMaW5rIHBpbHJjSW5jbHVkZQkJU3BlY2lhbENoYXIKKwlIaUxpbmsgcGlscmNJZGVudGlmaWVyCQlOdW1iZXIKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJwaWxyYyIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3BpbmUudmltIGIvcnVudGltZS9zeW50YXgvcGluZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5NTM1ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3BpbmUudmltCkBAIC0wLDAgKzEsMzcyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJUGluZSAoZW1haWwgcHJvZ3JhbSkgcnVuIGNvbW1hbmRzCisiIE1haW50YWluZXI6CURhdmlkIFBhc2NvZSA8cGFzY29lZGpAc3BhbWNvcC5uZXQ+CisiIExhc3QgQ2hhbmdlOglUaHUgRmViIDI3IDEwOjE4OjQ4IFdTVCAyMDAzLCB1cGRhdGUgZm9yIHBpbmUgNC41MworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmIHZlcnNpb24gPj0gNjAwCisgIHNldGxvY2FsIGlza2V5d29yZD1ALDQ4LTU3LF8sMTI4LTE2NywyMjQtMjM1LC0sCitlbHNlCisgIHNldCBpc2tleXdvcmQ9QCw0OC01NyxfLDEyOC0xNjcsMjI0LTIzNSwtLAorZW5kaWYKKworc3luIGtleXdvcmQgcGluZUNvbmZpZyBhZGRyYm9vay1zb3J0LXJ1bGUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgYWRkcmVzcy1ib29rCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGFkZHJlc3Nib29rLWZvcm1hdHMKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgYWx0LWFkZHJlc3Nlcworc3luIGtleXdvcmQgcGluZUNvbmZpZyBidWdzLWFkZGl0aW9uYWwtZGF0YQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBidWdzLWFkZHJlc3MKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgYnVncy1mdWxsbmFtZQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBjaGFyYWN0ZXItc2V0CitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGNvbG9yLXN0eWxlCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGNvbXBvc2UtbWltZQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBjb21wb3Nlci13cmFwLWNvbHVtbgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBjdXJyZW50LWluZGV4bGluZS1zdHlsZQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBjdXJzb3Itc3R5bGUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgY3VzdG9taXplZC1oZHJzCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGRlYnVnLW1lbW9yeQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBkZWZhdWx0LWNvbXBvc2VyLWhkcnMKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgZGVmYXVsdC1mY2MKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgZGVmYXVsdC1zYXZlZC1tc2ctZm9sZGVyCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGRpc2FibGUtdGhlc2UtYXV0aGVudGljYXRvcnMKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgZGlzYWJsZS10aGVzZS1kcml2ZXJzCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGRpc3BsYXktZmlsdGVycworc3luIGtleXdvcmQgcGluZUNvbmZpZyBkb3dubG9hZC1jb21tYW5kCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGRvd25sb2FkLWNvbW1hbmQtcHJlZml4CitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGVkaXRvcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBlbG0tc3R5bGUtc2F2ZQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBlbXB0eS1oZWFkZXItbWVzc2FnZQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBmY2MtbmFtZS1ydWxlCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGZlYXR1cmUtbGV2ZWwKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgZmVhdHVyZS1saXN0CitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGZpbGUtZGlyZWN0b3J5CitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGZvbGRlci1jb2xsZWN0aW9ucworc3luIGtleXdvcmQgcGluZUNvbmZpZyBmb2xkZXItZXh0ZW5zaW9uCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGZvbGRlci1zb3J0LXJ1bGUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgZm9udC1jaGFyLXNldAorc3luIGtleXdvcmQgcGluZUNvbmZpZyBmb250LW5hbWUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgZm9udC1zaXplCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGZvbnQtc3R5bGUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgZm9yY2VkLWFib29rLWVudHJ5CitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGZvcm0tbGV0dGVyLWZvbGRlcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBnbG9iYWwtYWRkcmVzcy1ib29rCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGdvdG8tZGVmYXVsdC1ydWxlCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGhlYWRlci1pbi1yZXBseQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBpbWFnZS12aWV3ZXIKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgaW5ib3gtcGF0aAorc3luIGtleXdvcmQgcGluZUNvbmZpZyBpbmNvbWluZy1hcmNoaXZlLWZvbGRlcnMKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgaW5jb21pbmctZm9sZGVycworc3luIGtleXdvcmQgcGluZUNvbmZpZyBpbmNvbWluZy1zdGFydHVwLXJ1bGUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgaW5kZXgtYW5zd2VyZWQtYmFja2dyb3VuZC1jb2xvcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBpbmRleC1hbnN3ZXJlZC1mb3JlZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGluZGV4LWRlbGV0ZWQtYmFja2dyb3VuZC1jb2xvcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBpbmRleC1kZWxldGVkLWZvcmVncm91bmQtY29sb3IKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgaW5kZXgtZm9ybWF0CitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGluZGV4LWltcG9ydGFudC1iYWNrZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGluZGV4LWltcG9ydGFudC1mb3JlZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGluZGV4LW5ldy1iYWNrZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGluZGV4LW5ldy1mb3JlZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGluZGV4LXJlY2VudC1iYWNrZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGluZGV4LXJlY2VudC1mb3JlZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGluZGV4LXRvLW1lLWJhY2tncm91bmQtY29sb3IKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgaW5kZXgtdG8tbWUtZm9yZWdyb3VuZC1jb2xvcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBpbmRleC11bnNlZW4tYmFja2dyb3VuZC1jb2xvcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBpbmRleC11bnNlZW4tZm9yZWdyb3VuZC1jb2xvcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBpbml0aWFsLWtleXN0cm9rZS1saXN0CitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGtibG9jay1wYXNzd2QtY291bnQKK3N5biBrZXl3b3JkIHBpbmVDb25maWcga2V5bGFiZWwtYmFja2dyb3VuZC1jb2xvcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBrZXlsYWJlbC1mb3JlZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGtleW5hbWUtYmFja2dyb3VuZC1jb2xvcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBrZXluYW1lLWZvcmVncm91bmQtY29sb3IKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgbGFzdC10aW1lLXBydW5lLXF1ZXN0aW9uZWQKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgbGFzdC12ZXJzaW9uLXVzZWQKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgbGRhcC1zZXJ2ZXJzCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGxpdGVyYWwtc2lnbmF0dXJlCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIGxvY2FsLWFkZHJlc3MKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgbG9jYWwtZnVsbG5hbWUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgbWFpbC1jaGVjay1pbnRlcnZhbAorc3luIGtleXdvcmQgcGluZUNvbmZpZyBtYWlsLWRpcmVjdG9yeQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBtYWlsY2FwLXNlYXJjaC1wYXRoCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIG1pbWV0eXBlLXNlYXJjaC1wYXRoCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIG5ldy12ZXJzaW9uLXRocmVzaG9sZAorc3luIGtleXdvcmQgcGluZUNvbmZpZyBuZXdzLWFjdGl2ZS1maWxlLXBhdGgKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgbmV3cy1jb2xsZWN0aW9ucworc3luIGtleXdvcmQgcGluZUNvbmZpZyBuZXdzLXNwb29sLWRpcmVjdG9yeQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBuZXdzcmMtcGF0aAorc3luIGtleXdvcmQgcGluZUNvbmZpZyBubnRwLXNlcnZlcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBub3JtYWwtYmFja2dyb3VuZC1jb2xvcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBub3JtYWwtZm9yZWdyb3VuZC1jb2xvcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBvbGQtc3R5bGUtcmVwbHkKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgb3BlcmF0aW5nLWRpcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBwYXR0ZXJucworc3luIGtleXdvcmQgcGluZUNvbmZpZyBwYXR0ZXJucy1maWx0ZXJzCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHBhdHRlcm5zLWZpbHRlcnMyCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHBhdHRlcm5zLWluZGV4Y29sb3JzCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHBhdHRlcm5zLW90aGVyCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHBhdHRlcm5zLXJvbGVzCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHBhdHRlcm5zLXNjb3Jlcworc3luIGtleXdvcmQgcGluZUNvbmZpZyBwYXR0ZXJucy1zY29yZXMyCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHBlcnNvbmFsLW5hbWUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcGVyc29uYWwtcHJpbnQtY2F0ZWdvcnkKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcGVyc29uYWwtcHJpbnQtY29tbWFuZAorc3luIGtleXdvcmQgcGluZUNvbmZpZyBwb3N0cG9uZWQtZm9sZGVyCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHByaW50LWZvbnQtY2hhci1zZXQKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcHJpbnQtZm9udC1uYW1lCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHByaW50LWZvbnQtc2l6ZQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBwcmludC1mb250LXN0eWxlCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHByaW50ZXIKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcHJvbXB0LWJhY2tncm91bmQtY29sb3IKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcHJvbXB0LWZvcmVncm91bmQtY29sb3IKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcHJ1bmVkLWZvbGRlcnMKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcHJ1bmluZy1ydWxlCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHF1b3RlMS1iYWNrZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHF1b3RlMS1mb3JlZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHF1b3RlMi1iYWNrZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHF1b3RlMi1mb3JlZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHF1b3RlMy1iYWNrZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHF1b3RlMy1mb3JlZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHJlYWQtbWVzc2FnZS1mb2xkZXIKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcmVtb3RlLWFib29rLWhpc3RvcnkKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcmVtb3RlLWFib29rLW1ldGFmaWxlCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHJlbW90ZS1hYm9vay12YWxpZGl0eQorc3luIGtleXdvcmQgcGluZUNvbmZpZyByZXBseS1pbmRlbnQtc3RyaW5nCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHJlcGx5LWxlYWRpbgorc3luIGtleXdvcmQgcGluZUNvbmZpZyByZXZlcnNlLWJhY2tncm91bmQtY29sb3IKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcmV2ZXJzZS1mb3JlZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHJzaC1jb21tYW5kCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHJzaC1vcGVuLXRpbWVvdXQKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgcnNoLXBhdGgKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgc2F2ZS1ieS1zZW5kZXIKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgc2F2ZWQtbXNnLW5hbWUtcnVsZQorc3luIGtleXdvcmQgcGluZUNvbmZpZyBzY3JvbGwtbWFyZ2luCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHNlbGVjdGFibGUtaXRlbS1iYWNrZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHNlbGVjdGFibGUtaXRlbS1mb3JlZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHNlbmRpbmctZmlsdGVycworc3luIGtleXdvcmQgcGluZUNvbmZpZyBzZW5kbWFpbC1wYXRoCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHNob3ctYWxsLWNoYXJhY3RlcnMKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgc2lnbmF0dXJlLWZpbGUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgc210cC1zZXJ2ZXIKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgc29ydC1rZXkKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgc3BlbGxlcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyBzc2gtY29tbWFuZAorc3luIGtleXdvcmQgcGluZUNvbmZpZyBzc2gtb3Blbi10aW1lb3V0CitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHNzaC1wYXRoCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHN0YW5kYXJkLXByaW50ZXIKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgc3RhdHVzLWJhY2tncm91bmQtY29sb3IKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgc3RhdHVzLWZvcmVncm91bmQtY29sb3IKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgc3RhdHVzLW1lc3NhZ2UtZGVsYXkKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgc3VnZ2VzdC1hZGRyZXNzCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHN1Z2dlc3QtZnVsbG5hbWUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgdGNwLW9wZW4tdGltZW91dAorc3luIGtleXdvcmQgcGluZUNvbmZpZyB0Y3AtcXVlcnktdGltZW91dAorc3luIGtleXdvcmQgcGluZUNvbmZpZyB0Y3AtcmVhZC13YXJuaW5nLXRpbWVvdXQKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgdGNwLXdyaXRlLXdhcm5pbmctdGltZW91dAorc3luIGtleXdvcmQgcGluZUNvbmZpZyB0aHJlYWRpbmctZGlzcGxheS1zdHlsZQorc3luIGtleXdvcmQgcGluZUNvbmZpZyB0aHJlYWRpbmctZXhwYW5kZWQtY2hhcmFjdGVyCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHRocmVhZGluZy1pbmRleC1zdHlsZQorc3luIGtleXdvcmQgcGluZUNvbmZpZyB0aHJlYWRpbmctaW5kaWNhdG9yLWNoYXJhY3Rlcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyB0aHJlYWRpbmctbGFzdHJlcGx5LWNoYXJhY3Rlcgorc3luIGtleXdvcmQgcGluZUNvbmZpZyB0aXRsZS1iYWNrZ3JvdW5kLWNvbG9yCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHRpdGxlLWZvcmVncm91bmQtY29sb3IKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgdGl0bGViYXItY29sb3Itc3R5bGUKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgdXBsb2FkLWNvbW1hbmQKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgdXBsb2FkLWNvbW1hbmQtcHJlZml4CitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHVybC12aWV3ZXJzCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHVzZS1vbmx5LWRvbWFpbi1uYW1lCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHVzZXItZG9tYWluCitzeW4ga2V5d29yZCBwaW5lQ29uZmlnIHVzZXItaWQKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgdXNlci1pZAorc3luIGtleXdvcmQgcGluZUNvbmZpZyB1c2VyLWlucHV0LXRpbWVvdXQKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgdmlld2VyLWhkci1jb2xvcnMKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgdmlld2VyLWhkcnMKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgdmlld2VyLW92ZXJsYXAKK3N5biBrZXl3b3JkIHBpbmVDb25maWcgd2luZG93LXBvc2l0aW9uCisKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gYWxsb3ctY2hhbmdpbmctZnJvbQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBhbGxvdy10YWxrCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGFsdGVybmF0ZS1jb21wb3NlLW1lbnUKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gYXNzdW1lLXNsb3ctbGluaworc3luIGtleXdvcmQgcGluZU9wdGlvbiBhdXRvLW1vdmUtcmVhZC1tc2dzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGF1dG8tb3Blbi1uZXh0LXVucmVhZAorc3luIGtleXdvcmQgcGluZU9wdGlvbiBhdXRvLXVuem9vbS1hZnRlci1hcHBseQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBhdXRvLXpvb20tYWZ0ZXItc2VsZWN0CitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGNhY2hlLXJlbW90ZS1waW5lcmMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gY2hlY2stbmV3bWFpbC13aGVuLXF1aXR0aW5nCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGNvbWJpbmVkLWFkZHJib29rLWRpc3BsYXkKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gY29tYmluZWQtZm9sZGVyLWRpc3BsYXkKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gY29tYmluZWQtc3ViZGlyZWN0b3J5LWRpc3BsYXkKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gY29tcG9zZS1jdXQtZnJvbS1jdXJzb3IKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gY29tcG9zZS1tYXBzLWRlbGV0ZS1rZXktdG8tY3RybC1kCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGNvbXBvc2UtcmVqZWN0cy11bnF1YWxpZmllZC1hZGRycworc3luIGtleXdvcmQgcGluZU9wdGlvbiBjb21wb3NlLXNlbmQtb2ZmZXJzLWZpcnN0LWZpbHRlcgorc3luIGtleXdvcmQgcGluZU9wdGlvbiBjb21wb3NlLXNldHMtbmV3c2dyb3VwLXdpdGhvdXQtY29uZmlybQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBjb25maXJtLXJvbGUtZXZlbi1mb3ItZGVmYXVsdAorc3luIGtleXdvcmQgcGluZU9wdGlvbiBjb250aW51ZS10YWItd2l0aG91dC1jb25maXJtCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGRlbGV0ZS1za2lwcy1kZWxldGVkCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGRpc2FibGUtMjAyMi1qcC1jb252ZXJzaW9ucworc3luIGtleXdvcmQgcGluZU9wdGlvbiBkaXNhYmxlLWJ1c3ktYWxhcm0KK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZGlzYWJsZS1jaGFyc2V0LWNvbnZlcnNpb25zCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGRpc2FibGUtY29uZmlnLWNtZAorc3luIGtleXdvcmQgcGluZU9wdGlvbiBkaXNhYmxlLWtleWJvYXJkLWxvY2stY21kCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGRpc2FibGUta2V5bWVudQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBkaXNhYmxlLXBhc3N3b3JkLWNhY2hpbmcKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZGlzYWJsZS1wYXNzd29yZC1jbWQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZGlzYWJsZS1waXBlcy1pbi1zaWdzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGRpc2FibGUtcGlwZXMtaW4tdGVtcGxhdGVzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGRpc2FibGUtcm9sZXMtc2V0dXAtY21kCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGRpc2FibGUtcm9sZXMtc2lnLWVkaXQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZGlzYWJsZS1yb2xlcy10ZW1wbGF0ZS1lZGl0CitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGRpc2FibGUtc2VuZGVyCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGRpc2FibGUtc2hhcmVkLW5hbWVzcGFjZXMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZGlzYWJsZS1zaWduYXR1cmUtZWRpdC1jbWQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZGlzYWJsZS10YWtlLWxhc3QtY29tbWEtZmlyc3QKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLThiaXQtZXNtdHAtbmVnb3RpYXRpb24KK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLThiaXQtbm50cC1wb3N0aW5nCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1hZ2dyZWdhdGUtY29tbWFuZC1zZXQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLWFsdGVybmF0ZS1lZGl0b3ItY21kCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1hbHRlcm5hdGUtZWRpdG9yLWltcGxpY2l0bHkKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLWFycm93LW5hdmlnYXRpb24KK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLWFycm93LW5hdmlnYXRpb24tcmVsYXhlZAorc3luIGtleXdvcmQgcGluZU9wdGlvbiBlbmFibGUtYmFja2dyb3VuZC1zZW5kaW5nCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1ib3VuY2UtY21kCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1jcnVpc2UtbW9kZQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBlbmFibGUtY3J1aXNlLW1vZGUtZGVsZXRlCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1kZWxpdmVyeS1zdGF0dXMtbm90aWZpY2F0aW9uCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1kb3QtZmlsZXMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLWRvdC1mb2xkZXJzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1leGl0LXZpYS1sZXNzdGhhbi1jb21tYW5kCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1mYXN0LXJlY2VudC10ZXN0CitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1mbGFnLWNtZAorc3luIGtleXdvcmQgcGluZU9wdGlvbiBlbmFibGUtZmxhZy1zY3JlZW4taW1wbGljaXRseQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBlbmFibGUtZnVsbC1oZWFkZXItYW5kLXRleHQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLWZ1bGwtaGVhZGVyLWNtZAorc3luIGtleXdvcmQgcGluZU9wdGlvbiBlbmFibGUtZ290by1pbi1maWxlLWJyb3dzZXIKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLWluY29taW5nLWZvbGRlcnMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLWp1bXAtc2hvcnRjdXQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLWxhbWUtbGlzdC1tb2RlCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1tYWlsLWNoZWNrLWN1ZQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBlbmFibGUtbWFpbGNhcC1wYXJhbS1zdWJzdGl0dXRpb24KK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLW1vdXNlLWluLXh0ZXJtCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1tc2ctdmlldy1hZGRyZXNzZXMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLW1zZy12aWV3LWF0dGFjaG1lbnRzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1tc2ctdmlldy1mb3JjZWQtYXJyb3dzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1tc2ctdmlldy11cmxzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1tc2ctdmlldy13ZWItaG9zdG5hbWVzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1uZXdtYWlsLWluLXh0ZXJtLWljb24KK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLXBhcnRpYWwtbWF0Y2gtbGlzdHMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLXByaW50LXZpYS15LWNvbW1hbmQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLXJlcGx5LWluZGVudC1zdHJpbmctZWRpdGluZworc3luIGtleXdvcmQgcGluZU9wdGlvbiBlbmFibGUtcnVsZXMtdW5kZXItdGFrZQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBlbmFibGUtc2VhcmNoLWFuZC1yZXBsYWNlCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS1zaWdkYXNoZXMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLXN1c3BlbmQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZW5hYmxlLXRhYi1jb21wbGV0aW9uCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS10YWtlLWV4cG9ydAorc3luIGtleXdvcmQgcGluZU9wdGlvbiBlbmFibGUtdHJheS1pY29uCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS11bml4LXBpcGUtY21kCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGVuYWJsZS12ZXJib3NlLXNtdHAtcG9zdGluZworc3luIGtleXdvcmQgcGluZU9wdGlvbiBleHBhbmRlZC12aWV3LW9mLWFkZHJlc3Nib29rcworc3luIGtleXdvcmQgcGluZU9wdGlvbiBleHBhbmRlZC12aWV3LW9mLWRpc3RyaWJ1dGlvbi1saXN0cworc3luIGtleXdvcmQgcGluZU9wdGlvbiBleHBhbmRlZC12aWV3LW9mLWZvbGRlcnMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZXhwb3NlLWhpZGRlbi1jb25maWcKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZXhwdW5nZS1vbmx5LW1hbnVhbGx5CitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGV4cHVuZ2Utd2l0aG91dC1jb25maXJtCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIGV4cHVuZ2Utd2l0aG91dC1jb25maXJtLWV2ZXJ5d2hlcmUKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZmNjLW9uLWJvdW5jZQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBmY2Mtb25seS13aXRob3V0LWNvbmZpcm0KK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gZmNjLXdpdGhvdXQtYXR0YWNobWVudHMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gaW5jbHVkZS1hdHRhY2htZW50cy1pbi1yZXBseQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBpbmNsdWRlLWhlYWRlci1pbi1yZXBseQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBpbmNsdWRlLXRleHQtaW4tcmVwbHkKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gbGRhcC1yZXN1bHQtdG8tYWRkcmJvb2stYWRkCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIG1hcmstZmNjLXNlZW4KK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gbWFyay1mb3ItY2MKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gbmV3cy1hcHByb3hpbWF0ZXMtbmV3LXN0YXR1cworc3luIGtleXdvcmQgcGluZU9wdGlvbiBuZXdzLWRlbGV0ZXMtYWNyb3NzLWdyb3Vwcworc3luIGtleXdvcmQgcGluZU9wdGlvbiBuZXdzLW9mZmVycy1jYXRjaHVwLW9uLWNsb3NlCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIG5ld3MtcG9zdC13aXRob3V0LXZhbGlkYXRpb24KK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gbmV3cy1yZWFkLWluLW5ld3NyYy1vcmRlcgorc3luIGtleXdvcmQgcGluZU9wdGlvbiBuZXh0LXRocmVhZC13aXRob3V0LWNvbmZpcm0KK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gb2xkLWdyb3d0aAorc3luIGtleXdvcmQgcGluZU9wdGlvbiBwYXNzLWNvbnRyb2wtY2hhcmFjdGVycy1hcy1pcworc3luIGtleXdvcmQgcGluZU9wdGlvbiBwcmVmZXItcGxhaW4tdGV4dAorc3luIGtleXdvcmQgcGluZU9wdGlvbiBwcmVzZXJ2ZS1zdGFydC1zdG9wLWNoYXJhY3RlcnMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gcHJpbnQtZm9ybWZlZWQtYmV0d2Vlbi1tZXNzYWdlcworc3luIGtleXdvcmQgcGluZU9wdGlvbiBwcmludC1pbmNsdWRlcy1mcm9tLWxpbmUKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gcHJpbnQtaW5kZXgtZW5hYmxlZAorc3luIGtleXdvcmQgcGluZU9wdGlvbiBwcmludC1vZmZlcnMtY3VzdG9tLWNtZC1wcm9tcHQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gcXVlbGwtYXR0YWNobWVudC1leHRyYS1wcm9tcHQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gcXVlbGwtYmVya2VsZXktZm9ybWF0LXRpbWV6b25lCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHF1ZWxsLWNvbnRlbnQtaWQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gcXVlbGwtZGVhZC1sZXR0ZXItb24tY2FuY2VsCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHF1ZWxsLWVtcHR5LWRpcmVjdG9yaWVzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHF1ZWxsLWV4dHJhLXBvc3QtcHJvbXB0CitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHF1ZWxsLWZvbGRlci1pbnRlcm5hbC1tc2cKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gcXVlbGwtaW1hcC1lbnZlbG9wZS11cGRhdGUKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gcXVlbGwtbG9jay1mYWlsdXJlLXdhcm5pbmdzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHF1ZWxsLW1haWxkb21haW4td2FybmluZworc3luIGtleXdvcmQgcGluZU9wdGlvbiBxdWVsbC1uZXdzLWVudmVsb3BlLXVwZGF0ZQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBxdWVsbC1wYXJ0aWFsLWZldGNoaW5nCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHF1ZWxsLXNzbC1sYXJnZWJsb2Nrcworc3luIGtleXdvcmQgcGluZU9wdGlvbiBxdWVsbC1zdGF0dXMtbWVzc2FnZS1iZWVwaW5nCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHF1ZWxsLXRpbWV6b25lLWNvbW1lbnQtd2hlbi1zZW5kaW5nCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHF1ZWxsLXVzZXItbG9va3VwLWluLXBhc3N3ZC1maWxlCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHF1aXQtd2l0aG91dC1jb25maXJtCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHJlcGx5LWFsd2F5cy11c2VzLXJlcGx5LXRvCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHNhdmUtYWdncmVnYXRlcy1jb3B5LXNlcXVlbmNlCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHNhdmUtd2lsbC1hZHZhbmNlCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHNhdmUtd2lsbC1ub3QtZGVsZXRlCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHNhdmUtd2lsbC1xdW90ZS1sZWFkaW5nLWZyb21zCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHNjcmFtYmxlLW1lc3NhZ2UtaWQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gc2VsZWN0LXdpdGhvdXQtY29uZmlybQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBzZWxlY3RhYmxlLWl0ZW0tbm9ib2xkCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHNlcGFyYXRlLWZvbGRlci1hbmQtZGlyZWN0b3J5LWVudHJpZXMKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gc2hvdy1jdXJzb3IKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gc2hvdy1wbGFpbi10ZXh0LWludGVybmFsbHkKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gc2hvdy1zZWxlY3RlZC1pbi1ib2xkZmFjZQorc3luIGtleXdvcmQgcGluZU9wdGlvbiBzaWduYXR1cmUtYXQtYm90dG9tCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHNpbmdsZS1jb2x1bW4tZm9sZGVyLWxpc3QKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gc2xhc2gtY29sbGFwc2VzLWVudGlyZS10aHJlYWQKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gc3BlbGwtY2hlY2stYmVmb3JlLXNlbmRpbmcKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gc3RvcmUtd2luZG93LXBvc2l0aW9uLWluLWNvbmZpZworc3luIGtleXdvcmQgcGluZU9wdGlvbiBzdHJpcC1mcm9tLXNpZ2Rhc2hlcy1vbi1yZXBseQorc3luIGtleXdvcmQgcGluZU9wdGlvbiB0YWItdmlzaXRzLW5leHQtbmV3LW1lc3NhZ2Utb25seQorc3luIGtleXdvcmQgcGluZU9wdGlvbiB0ZXJtZGVmLXRha2VzLXByZWNlZGVuY2UKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gdGhyZWFkLWluZGV4LXNob3dzLWltcG9ydGFudC1jb2xvcgorc3luIGtleXdvcmQgcGluZU9wdGlvbiB0cnktYWx0ZXJuYXRpdmUtYXV0aGVudGljYXRpb24tZHJpdmVyLWZpcnN0CitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHVuc2VsZWN0LXdpbGwtbm90LWFkdmFuY2UKK3N5biBrZXl3b3JkIHBpbmVPcHRpb24gdXNlLWN1cnJlbnQtZGlyCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHVzZS1mdW5jdGlvbi1rZXlzCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHVzZS1zZW5kZXItbm90LXgtc2VuZGVyCitzeW4ga2V5d29yZCBwaW5lT3B0aW9uIHVzZS1zdWJzaGVsbC1mb3Itc3VzcGVuZAorc3luIGtleXdvcmQgcGluZU9wdGlvbiB2ZXJ0aWNhbC1mb2xkZXItbGlzdAorCitzeW4gbWF0Y2ggIHBpbmVDb21tZW50ICAiXiMuKiQiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3BpbmVfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcGluZV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBwaW5lQ29uZmlnCVR5cGUKKyAgSGlMaW5rIHBpbmVDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIHBpbmVPcHRpb24JTWFjcm8KKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInBpbmUiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9waW5mby52aW0gYi9ydW50aW1lL3N5bnRheC9waW5mby52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlZjcxMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3BpbmZvLnZpbQpAQCAtMCwwICsxLDEzNCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBwaW5mbygxKSBjb25maWd1cmF0aW9uIGZpbGUKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDUtMjIKKyIgYXJjaC10YWc6CSAgICBkYTJjZmExYy0wMzUwLTQ1ZGMtYjJkMi0yYmYzOTE1YmQwYTIKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgU2V0IGlza2V5d29yZCBzaW5jZSB3ZSBuZWVkIGAtJyAoYW5kIHBvdGVudGlhbGx5IG90aGVycykgaW4ga2V5d29yZHMuCisiIEZvciB2ZXJzaW9uIDUueDogU2V0IGl0IGdsb2JhbGx5CisiIEZvciB2ZXJzaW9uIDYueDogU2V0IGl0IGxvY2FsbHkKK2lmIHZlcnNpb24gPj0gNjAwCisgIGNvbW1hbmQgLW5hcmdzPTEgU2V0SXNrIHNldGxvY2FsIGlza2V5d29yZD08YXJncz4KK2Vsc2UKKyAgY29tbWFuZCAtbmFyZ3M9MSBTZXRJc2sgc2V0IGlza2V5d29yZD08YXJncz4KK2VuZGlmCitTZXRJc2sgQCw0OC01NyxfLC0KK2RlbGNvbW1hbmQgU2V0SXNrCisKKyIgSWdub3JlIENhc2UKK3N5biBjYXNlIGlnbm9yZQorCisiIFRvZG8KK3N5biBrZXl3b3JkIHBpbmZvVG9kbwljb250YWluZWQgRklYTUUgVE9ETyBYWFggTk9URQorCisiIENvbW1lbnRzCitzeW4gcmVnaW9uICBwaW5mb0NvbW1lbnQgICAgc3RhcnQ9J14jJyBlbmQ9JyQnIGNvbnRhaW5zPXBpbmZvVG9kbworCisiIEtleXdvcmRzCitzeW4ga2V5d29yZCBwaW5mb09wdGlvbnMgICAgTUFOVUFMIENVVC1NQU4tSEVBREVSUyBDVVQtRU1QVFktTUFOLUxJTkVTCitzeW4ga2V5d29yZCBwaW5mb09wdGlvbnMgICAgUkFXLUZJTEVOQU1FIEFQUk9QT1MgRE9OVC1IQU5ETEUtV0lUSE9VVC1UQUctVEFCTEUKK3N5biBrZXl3b3JkIHBpbmZvT3B0aW9ucyAgICBIVFRQVklFV0VSIEZUUFZJRVdFUiBNQUlMRURJVE9SIFBSSU5UVVRJTElUWQorc3luIGtleXdvcmQgcGluZm9PcHRpb25zICAgIE1BTkxJTktTIElORk9QQVRIIE1BTi1PUFRJT05TIFNUREVSUi1SRURJUkVDVElPTgorc3luIGtleXdvcmQgcGluZm9PcHRpb25zICAgIExPTkctTUFOVUFMLUxJTktTIEZJTFRFUi0weEI3IFFVSVQtQ09ORklSTUFUSU9OCitzeW4ga2V5d29yZCBwaW5mb09wdGlvbnMgICAgUVVJVC1DT05GSVJNLURFRkFVTFQgQ0xFQVItU0NSRUVOLUFULUVYSVQKK3N5biBrZXl3b3JkIHBpbmZvT3B0aW9ucyAgICBDQUxMLVJFQURMSU5FLUhJU1RPUlkgSElHSExJR0hUUkVHRVhQIFNBRkUtVVNFUgorc3luIGtleXdvcmQgcGluZm9PcHRpb25zICAgIFNBRkUtR1JPVVAKKworIiBDb2xvcnMKK3N5biBrZXl3b3JkIHBpbmZvQ29sb3JzCSAgICBDT0xfTk9STUFMIENPTF9UT1BMSU5FIENPTF9CT1RUT01MSU5FIENPTF9NRU5VCitzeW4ga2V5d29yZCBwaW5mb0NvbG9ycwkgICAgQ09MX01FTlVTRUxFQ1RFRCBDT0xfTk9URSBDT0xfTk9URVNFTEVDVEVEIENPTF9VUkwKK3N5biBrZXl3b3JkIHBpbmZvQ29sb3JzCSAgICBDT0xfVVJMU0VMRUNURUQgQ09MX0lORk9ISUdITElHSFQgQ09MX01BTlVBTEJPTEQKK3N5biBrZXl3b3JkIHBpbmZvQ29sb3JzCSAgICBDT0xfTUFOVUFMSVRBTElDCitzeW4ga2V5d29yZCBwaW5mb0NvbG9yRGVmYXVsdAlDT0xPUl9ERUZBVUxUCitzeW4ga2V5d29yZCBwaW5mb0NvbG9yQm9sZAlCT0xECitzeW4ga2V5d29yZCBwaW5mb0NvbG9yTm9Cb2xkCU5PX0JPTEQKK3N5biBrZXl3b3JkIHBpbmZvQ29sb3JCbGluawlCTElOSworc3luIGtleXdvcmQgcGluZm9Db2xvck5vQmxpbmsJTk9fQkxJTksKK3N5biBrZXl3b3JkIHBpbmZvQ29sb3JCbGFjawlDT0xPUl9CTEFDSworc3luIGtleXdvcmQgcGluZm9Db2xvclJlZAlDT0xPUl9SRUQKK3N5biBrZXl3b3JkIHBpbmZvQ29sb3JHcmVlbglDT0xPUl9HUkVFTgorc3luIGtleXdvcmQgcGluZm9Db2xvclllbGxvdwlDT0xPUl9ZRUxMT1cKK3N5biBrZXl3b3JkIHBpbmZvQ29sb3JCbHVlCUNPTE9SX0JMVUUKK3N5biBrZXl3b3JkIHBpbmZvQ29sb3JNYWdlbnRhCUNPTE9SX01BR0VOVEEKK3N5biBrZXl3b3JkIHBpbmZvQ29sb3JDeWFuCUNPTE9SX0NZQU4KK3N5biBrZXl3b3JkIHBpbmZvQ29sb3JXaGl0ZQlDT0xPUl9XSElURQorCisiIEtleWJpbmRpbmdzCitzeW4ga2V5d29yZCBwaW5mb0tleXMJS0VZX1RPVEFMU0VBUkNIXzEgS0VZX1RPVEFMU0VBUkNIXzIgS0VZX1NFQVJDSF8xCitzeW4ga2V5d29yZCBwaW5mb0tleXMJS0VZX1NFQVJDSF8yIEtFWV9TRUFSQ0hfQUdBSU5fMSBLRVlfU0VBUkNIX0FHQUlOXzIKK3N5biBrZXl3b3JkIHBpbmZvS2V5cwlLRVlfR09UT18xIEtFWV9HT1RPXzIgS0VZX1BSRVZOT0RFXzEgS0VZX1BSRVZOT0RFXzIKK3N5biBrZXl3b3JkIHBpbmZvS2V5cwlLRVlfTkVYVE5PREVfMSBLRVlfTkVYVE5PREVfMiBLRVlfVVBfMSBLRVlfVVBfMgorc3luIGtleXdvcmQgcGluZm9LZXlzCUtFWV9FTkRfMSBLRVlfRU5EXzIgS0VZX1BHRE5fMSBLRVlfUEdETl8yCitzeW4ga2V5d29yZCBwaW5mb0tleXMJS0VZX1BHRE5fQVVUT18xIEtFWV9QR0ROX0FVVE9fMiBLRVlfSE9NRV8xIEtFWV9IT01FXzIKK3N5biBrZXl3b3JkIHBpbmZvS2V5cwlLRVlfUEdVUF8xIEtFWV9QR1VQXzIgS0VZX1BHVVBfQVVUT18xIEtFWV9QR1VQX0FVVE9fMgorc3luIGtleXdvcmQgcGluZm9LZXlzCUtFWV9ET1dOXzEgS0VZX0RPV05fMiBLRVlfVE9QXzEgS0VZX1RPUF8yIEtFWV9CQUNLXzEKK3N5biBrZXl3b3JkIHBpbmZvS2V5cwlLRVlfQkFDS18yIEtFWV9GT0xMT1dMSU5LXzEgS0VZX0ZPTExPV0xJTktfMgorc3luIGtleXdvcmQgcGluZm9LZXlzCUtFWV9SRUZSRVNIXzEgS0VZX1JFRlJFU0hfMiBLRVlfU0hFTExGRUVEXzEKK3N5biBrZXl3b3JkIHBpbmZvS2V5cwlLRVlfU0hFTExGRUVEXzIgS0VZX1FVSVRfMSBLRVlfUVVJVF8yIEtFWV9HT0xJTkVfMQorc3luIGtleXdvcmQgcGluZm9LZXlzCUtFWV9HT0xJTkVfMiBLRVlfUFJJTlRfMSBLRVlfUFJJTlRfMgorc3luIGtleXdvcmQgcGluZm9LZXlzCUtFWV9ESVJQQUdFXzEgS0VZX0RJUlBBR0VfMgorCisiIFNwZWNpYWwgS2V5cworc3luIGtleXdvcmQgcGluZm9TcGVjaWFsS2V5cwlLRVlfQlJFQUsgS0VZX0RPV04gS0VZX1VQIEtFWV9MRUZUIEtFWV9SSUdIVAorc3luIGtleXdvcmQgcGluZm9TcGVjaWFsS2V5cwlLRVlfRE9XTiBLRVlfSE9NRSBLRVlfQkFDS1NQQUNFIEtFWV9OUEFHRQorc3luIGtleXdvcmQgcGluZm9TcGVjaWFsS2V5cwlLRVlfUFBBR0UgS0VZX0VORCBLRVlfSUMgS0VZX0RDCitzeW4gcmVnaW9uICBwaW5mb1NwZWNpYWxLZXlzCW1hdGNoZ3JvdXA9cGluZm9TcGVjaWFsS2V5cyB0cmFuc3BhcmVudCBzdGFydD0rS0VZX1wlKEZcfENUUkxcfEFMVFwpKCsgZW5kPSspKworc3luIHJlZ2lvbiAgcGluZm9TaW1wbGVLZXkJbWF0Y2hncm91cD1waW5mb1NpbXBsZUtleSBzdGFydD0rJysgc2tpcD0rXFwnKyBlbmQ9KycrIGNvbnRhaW5zPXBpbmZvU2ltcGxlS2V5RXNjYXBlCitzeW4gbWF0Y2ggICBwaW5mb1NpbXBsZUtleUVzY2FwZSAgICArXFxbXFxudCddKworc3luIG1hdGNoICAgcGluZm9LZXljb2RlICAgICdcPFxkXCtcPicKKworIiBDb25zdGFudHMKK3N5biBrZXl3b3JkIHBpbmZvQ29uc3RhbnRzICBUUlVFIEZBTFNFIFlFUyBOTworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9waW5mb19zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9waW5mb19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgICBjb21tYW5kIC1uYXJncz0rIEhpRGVmIGhpIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaURlZiBoaSBkZWYgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHBpbmZvVG9kbwkJVG9kbworICBIaUxpbmsgcGluZm9Db21tZW50CQlDb21tZW50CisgIEhpTGluayBwaW5mb09wdGlvbnMJCUtleXdvcmQKKyAgSGlMaW5rIHBpbmZvQ29sb3JzCQlLZXl3b3JkCisgIEhpTGluayBwaW5mb0NvbG9yRGVmYXVsdAlOb3JtYWwKKyAgSGlEZWYgcGluZm9Db2xvckJvbGQJCWN0ZXJtPWJvbGQKKyAgSGlEZWYgcGluZm9Db2xvck5vQm9sZAljdGVybT1ub25lCisgICIgd2UgY2FuJ3QgYWNjZXNzIHRoZSBibGluayBhdHRyaWJ1dGUgZnJvbSBWaW0gYXRtCisgIEhpRGVmIHBpbmZvQ29sb3JCbGluawkJY3Rlcm09aW52ZXJzZQorICBIaURlZiBwaW5mb0NvbG9yTm9CbGluawljdGVybT1ub25lCisgIEhpRGVmIHBpbmZvQ29sb3JCbGFjawkJY3Rlcm1mZz1CbGFjawkgICAgZ3VpZmc9QmxhY2sKKyAgSGlEZWYgcGluZm9Db2xvclJlZAkJY3Rlcm1mZz1EYXJrUmVkCSAgICBndWlmZz1EYXJrUmVkCisgIEhpRGVmIHBpbmZvQ29sb3JHcmVlbgkJY3Rlcm1mZz1EYXJrR3JlZW4gICBndWlmZz1EYXJrR3JlZW4KKyAgSGlEZWYgcGluZm9Db2xvclllbGxvdwljdGVybWZnPURhcmtZZWxsb3cgIGd1aWZnPURhcmtZZWxsb3cKKyAgSGlEZWYgcGluZm9Db2xvckJsdWUJCWN0ZXJtZmc9RGFya0JsdWUgICAgZ3VpZmc9RGFya0JsdWUKKyAgSGlEZWYgcGluZm9Db2xvck1hZ2VudGEJY3Rlcm1mZz1EYXJrTWFnZW50YSBndWlmZz1EYXJrTWFnZW50YQorICBIaURlZiBwaW5mb0NvbG9yQ3lhbgkJY3Rlcm1mZz1EYXJrQ3lhbiAgICBndWlmZz1EYXJrQ3lhbgorICBIaURlZiBwaW5mb0NvbG9yV2hpdGUJCWN0ZXJtZmc9TGlnaHRHcmF5ICAgZ3VpZmc9TGlnaHRHcmF5CisgIEhpTGluayBwaW5mb0tleXMJCUtleXdvcmQKKyAgSGlMaW5rIHBpbmZvU3BlY2lhbEtleXMJU3BlY2lhbENoYXIKKyAgSGlMaW5rIHBpbmZvU2ltcGxlS2V5CQlTdHJpbmcKKyAgSGlMaW5rIHBpbmZvU2ltcGxlS2V5RXNjYXBlCVNwZWNpYWxDaGFyCisgIEhpTGluayBwaW5mb0tleWNvZGUJCU51bWJlcgorICBIaUxpbmsgcGluZm9Db25zdGFudHMJQ29uc3RhbnQKKworICBkZWxjb21tYW5kIEhpTGluaworICBkZWxjb21tYW5kIEhpRGVmCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJwaW5mbyIKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcGxtLnZpbSBiL3J1bnRpbWUvc3ludGF4L3BsbS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3YzMyZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3BsbS52aW0KQEAgLTAsMCArMSwxNDcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglQTC9NCisiIE1haW50YWluZXI6CVBoaWxpcHBlIENvdWxvbmdlcyA8Y3BoaWxAY3BoaWwubmV0PgorIiBMYXN0IGNoYW5nZToJMjAwMyBNYXkgMTEKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFBML00gaXMgYSBjYXNlIGluc2Vuc2l0aXZlIGxhbmd1YWdlCitzeW4gY2FzZSBpZ25vcmUKKworc3luIGtleXdvcmQgcGxtVG9kbyBjb250YWluZWQJVE9ETyBGSVhNRSBYWFgKKworIiBTdHJpbmcKK3N5biByZWdpb24gIHBsbVN0cmluZwkJc3RhcnQ9KycrICBlbmQ9KycrCisKK3N5biBtYXRjaCAgIHBsbU9wZXJhdG9yCQkiW0A9XCtcLVwqXC9cPFw+XSIKKworc3luIG1hdGNoICAgcGxtSWRlbnRpZmllcgkiXDxbYS16QS1aX11bYS16QS1aMC05X10qXD4iCisKK3N5biBtYXRjaCAgIHBsbURlbGltaXRlcgkiWygpOyxdIgorCitzeW4gcmVnaW9uICBwbG1QcmVQcm9jCQlzdGFydD0iXlxzKlwkXHMqIiBza2lwPSJcXCQiIGVuZD0iJCIKKworIiBGSVhNRSA6IE5vIE51bWJlciBzdXBwb3J0IGZvciBmbG9hdHMsIGFzIEknbSB3b3JraW5nIG9uIGFuIGVtYmVkZGVkCisiIHByb2plY3QgdGhhdCBkb2Vzbid0IHVzZSBhbnkuCitzeW4gbWF0Y2ggICBwbG1OdW1iZXIJCSItXD1cPFxkXCtcPiIKK3N5biBtYXRjaCAgIHBsbU51bWJlcgkJIlw8WzAtOWEtZkEtRl0qW2hIXSpcPiIKKworIiBJZiB5b3UgZG9uJ3QgbGlrZSB0YWJzCisic3luIG1hdGNoIHBsbVNob3dUYWIgIlx0IgorInN5biBtYXRjaCBwbG1TaG93VGFiYyAiXHQiCisKKyJ3aGVuIHdhbnRlZCwgaGlnaGxpZ2h0IHRyYWlsaW5nIHdoaXRlIHNwYWNlCitpZiBleGlzdHMoImNfc3BhY2VfZXJyb3JzIikKKyAgc3luIG1hdGNoCXBsbVNwYWNlRXJyb3IJIlxzKiQiCisgIHN5biBtYXRjaAlwbG1TcGFjZUVycm9yCSIgXCtcdCJtZT1lLTEKK2VuZGlmCisKKyIKKyAgIiBVc2UgdGhlIHNhbWUgY29udHJvbCB2YXJpYWJsZSBhcyBDIGxhbmd1YWdlIGZvciBJIGJlbGlldmUKKyAgIiB1c2VycyB3aWxsIHdhbnQgdGhlIHNhbWUgYmVoYXZpb3IKK2lmIGV4aXN0cygiY19jb21tZW50X3N0cmluZ3MiKQorICAiIEZJWE1FIDogZG9uJ3Qgd29yayBmaW5lIHdpdGggY19jb21tZW50X3N0cmluZ3Mgc2V0LAorICAiCSAgICB3aGljaCBJIGRvbid0IGNhcmUgYXMgSSBkb24ndCB1c2UKKworICAiIEEgY29tbWVudCBjYW4gY29udGFpbiBwbG1TdHJpbmcsIHBsbUNoYXJhY3RlciBhbmQgcGxtTnVtYmVyLgorICAiIEJ1dCBhICIqLyIgaW5zaWRlIGEgcGxtU3RyaW5nIGluIGEgcGxtQ29tbWVudCBET0VTIGVuZCB0aGUgY29tbWVudCEgIFNvIHdlCisgICIgbmVlZCB0byB1c2UgYSBzcGVjaWFsIHR5cGUgb2YgcGxtU3RyaW5nOiBwbG1Db21tZW50U3RyaW5nLCB3aGljaCBhbHNvIGVuZHMgb24KKyAgIiAiKi8iLCBhbmQgc2VlcyBhICIqIiBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgYXMgY29tbWVudCBhZ2Fpbi4KKyAgc3ludGF4IG1hdGNoCXBsbUNvbW1lbnRTa2lwCWNvbnRhaW5lZCAiXlxzKlwqXCgkXHxcc1wrXCkiCisgIHN5bnRheCByZWdpb24gcGxtQ29tbWVudFN0cmluZwljb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBlbmQ9K1wqLyttZT1zLTEgY29udGFpbnM9cGxtU3BlY2lhbCxwbG1Db21tZW50U2tpcAorICBzeW50YXggcmVnaW9uIHBsbUNvbW1lbnQyU3RyaW5nCWNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGVuZD0iJCIgY29udGFpbnM9cGxtU3BlY2lhbAorICBzeW50YXggcmVnaW9uIHBsbUNvbW1lbnQJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPXBsbVRvZG8scGxtQ29tbWVudFN0cmluZyxwbG1DaGFyYWN0ZXIscGxtTnVtYmVyLHBsbUZsb2F0LHBsbVNwYWNlRXJyb3IKKyAgc3ludGF4IG1hdGNoICBwbG1Db21tZW50CSIvLy4qIiBjb250YWlucz1wbG1Ub2RvLHBsbUNvbW1lbnQyU3RyaW5nLHBsbUNoYXJhY3RlcixwbG1OdW1iZXIscGxtU3BhY2VFcnJvcgorZWxzZQorICBzeW4gcmVnaW9uCXBsbUNvbW1lbnQJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPXBsbVRvZG8scGxtU3BhY2VFcnJvcgorICBzeW4gbWF0Y2gJcGxtQ29tbWVudAkiLy8uKiIgY29udGFpbnM9cGxtVG9kbyxwbG1TcGFjZUVycm9yCitlbmRpZgorCitzeW50YXggbWF0Y2gJcGxtQ29tbWVudEVycm9yCSJcKi8iCisKK3N5biBrZXl3b3JkIHBsbVJlc2VydmVkCUFERFJFU1MgQU5EIEFUIEJBU0VEIEJZIEJZVEUgQ0FMTCBDQVNFCitzeW4ga2V5d29yZCBwbG1SZXNlcnZlZCBEQVRBIERFQ0xBUkUgRElTQUJMRSBETyBEV09SRAorc3luIGtleXdvcmQgcGxtUmVzZXJ2ZWQJRUxTRSBFTkFCTEUgRU5EIEVPRiBFWFRFUk5BTAorc3luIGtleXdvcmQgcGxtUmVzZXJ2ZWQgR08gR09UTyBIQUxUIElGIElOSVRJQUwgSU5URUdFUiBJTlRFUlJVUFQKK3N5biBrZXl3b3JkIHBsbVJlc2VydmVkIExBQkVMIExJVEVSQUxMWSBNSU5VUyBNT0QgTk9UIE9SCitzeW4ga2V5d29yZCBwbG1SZXNlcnZlZCBQTFVTIFBPSU5URVIgUFJPQ0VEVVJFIFBVQkxJQworc3luIGtleXdvcmQgcGxtUmVzZXJ2ZWQgUkVBTCBSRUVOVFJBTlQgUkVUVVJOIFNFTEVDVE9SIFNUUlVDVFVSRQorc3luIGtleXdvcmQgcGxtUmVzZXJ2ZWQgVEhFTiBUTyBXSElMRSBXT1JEIFhPUgorc3luIGtleXdvcmQgcGxtMzg2UmVzZXJ2ZWQgQ0hBUklOVCBIV09SRCBMT05HSU5UIE9GRlNFVCBRV09SRCBTSE9SVElOVAorCitzeW4ga2V5d29yZCBwbG1CdWlsdEluIEFCUyBBREpVU1RSUEwgQkxPQ0tJTlBVVCBCTE9DS0lOV09SRCBCTE9DS09VVFBVVAorc3luIGtleXdvcmQgcGxtQnVpbHRJbiBCTE9DS09VVFdPUkQgQlVJTFBUUiBDQVJSWSBDQVVTRUlOVEVSUlVQVCBDTVBCCitzeW4ga2V5d29yZCBwbG1CdWlsdEluIENNUFcgREVDIERPVUJMRSBGSU5EQiBGSU5EUkIgRklORFJXIEZJTkRXIEZJWAorc3luIGtleXdvcmQgcGxtQnVpbHRJbiBGTEFHUyBGTE9BVCBHRVRSRUFMRVJST1IgSElHSCBJQUJTIElOSVRSRUFMTUFUSFVOSVQKK3N5biBrZXl3b3JkIHBsbUJ1aWx0SW4gSU5QVVQgSU5UIElOV09SRCBMQVNUIExPQ0tTRVQgTEVOR1RIIExPVyBNT1ZCIE1PVkUKK3N5biBrZXl3b3JkIHBsbUJ1aWx0SW4gTU9WUkIgTU9WUlcgTU9WVyBOSUwgT1VUUFVUIE9VVFdPUkQgUkVTVE9SRVJFQUxTVEFUVVMKK3N5biBrZXl3b3JkIHBsbUJ1aWx0SW4gUk9MIFJPUiBTQUwgU0FWRVJFQUxTVEFUVVMgU0NMIFNDUiBTRUxFQ1RPUk9GIFNFVEIKK3N5biBrZXl3b3JkIHBsbUJ1aWx0SW4gU0VUUkVBTE1PREUgU0VUVyBTSEwgU0hSIFNJR04gU0lHTkVEIFNJWkUgU0tJUEIKK3N5biBrZXl3b3JkIHBsbUJ1aWx0SW4gU0tJUFJCIFNLSVBSVyBTS0lQVyBTVEFDS0JBU0UgU1RBQ0tQVFIgVElNRSBTSVpFCitzeW4ga2V5d29yZCBwbG1CdWlsdEluIFVOU0lHTiBYTEFUIFpFUk8KK3N5biBrZXl3b3JkIHBsbTM4NkJ1aWx0SW4gSU5URVJSVVBUIFNFVElOVEVSUlVQVAorc3luIGtleXdvcmQgcGxtMjg2QnVpbHRJbiBDTEVBUlRBU0tTV0lUQ0hFREZMQUcgR0VUQUNDRVNTUklHSFRTCitzeW4ga2V5d29yZCBwbG0yODZCdWlsdEluIEdFVFNFR01FTlRMSU1JVCBMT0NBTFRBQkxFIE1BQ0hJTkVTVEFUVVMKK3N5biBrZXl3b3JkIHBsbTI4NkJ1aWx0SW4gT0ZGU0VUT0YgUEFSSVRZIFJFU1RPUkVHTE9CQUxUQUJMRQorc3luIGtleXdvcmQgcGxtMjg2QnVpbHRJbiBSRVNUT1JFSU5URVJSVVBUVEFCTEUgU0FWRUdMT0JBTFRBQkxFCitzeW4ga2V5d29yZCBwbG0yODZCdWlsdEluIFNBVkVJTlRFUlJVUFRUQUJMRSBTRUdNRU5UUkVBREFCTEUKK3N5biBrZXl3b3JkIHBsbTI4NkJ1aWx0SW4gU0VHTUVOVFdSSVRBQkxFIFRBU0tSRUdJU1RFUiBXQUlURk9SSU5URVJSVVBUCitzeW4ga2V5d29yZCBwbG0zODZCdWlsdEluIENPTlRST0xSRUdJU1RFUiBERUJVR1JFR0lTVEVSIEZJTkRIVworc3luIGtleXdvcmQgcGxtMzg2QnVpbHRJbiBGSU5EUkhXIElOSFdPUkQgTU9WQklUIE1PVlJCSVQgTU9WSFcgTU9WUkhXCitzeW4ga2V5d29yZCBwbG0zODZCdWlsdEluIE9VVEhXT1JEIFNDQU5CSVQgU0NBTlJCSVQgU0VUSFcgU0hMRCBTSFJECitzeW4ga2V5d29yZCBwbG0zODZCdWlsdEluIFNLSVBIVyBTS0lQUkhXIFRFU1RSRUdJU1RFUgorc3luIGtleXdvcmQgcGxtMzg2dzE2QnVpbHRJbiBCTE9DS0lORFdPUkQgQkxPQ0tPVVREV09SRCBDTVBEIEZJTkRECitzeW4ga2V5d29yZCBwbG0zODZ3MTZCdWlsdEluIEZJTkRSRCBJTkRXT1JEIE1PVkQgTU9WUkQgT1VURFdPUkQKK3N5biBrZXl3b3JkIHBsbTM4NncxNkJ1aWx0SW4gU0VURCBTS0lQRCBTS0lQUkQKKworc3luIHN5bmMgbGluZXM9NTAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcGxtX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3BsbV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorIiAgSGlMaW5rIHBsbUxhYmVsCQkJTGFiZWwKKyIgIEhpTGluayBwbG1Db25kaXRpb25hbAkJQ29uZGl0aW9uYWwKKyIgIEhpTGluayBwbG1SZXBlYXQJCQlSZXBlYXQKKyAgSGlMaW5rIHBsbVRvZG8JCQlUb2RvCisgIEhpTGluayBwbG1OdW1iZXIJCQlOdW1iZXIKKyAgSGlMaW5rIHBsbU9wZXJhdG9yCQkJT3BlcmF0b3IKKyAgSGlMaW5rIHBsbURlbGltaXRlcgkJCU9wZXJhdG9yCisgICJIaUxpbmsgcGxtU2hvd1RhYgkJCUVycm9yCisgICJIaUxpbmsgcGxtU2hvd1RhYmMJCQlFcnJvcgorICBIaUxpbmsgcGxtSWRlbnRpZmllcgkJCUlkZW50aWZpZXIKKyAgSGlMaW5rIHBsbUJ1aWx0SW4JCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHBsbTI4NkJ1aWx0SW4JCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHBsbTM4NkJ1aWx0SW4JCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHBsbTM4NncxNkJ1aWx0SW4JCVN0YXRlbWVudAorICBIaUxpbmsgcGxtUmVzZXJ2ZWQJCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHBsbTM4NlJlc2VydmVkCQkJU3RhdGVtZW50CisgIEhpTGluayBwbG1QcmVQcm9jCQkJUHJlUHJvYworICBIaUxpbmsgcGxtQ29tbWVudEVycm9yCQlwbG1FcnJvcgorICBIaUxpbmsgcGxtQ29tbWVudFN0cmluZwkJcGxtU3RyaW5nCisgIEhpTGluayBwbG1Db21tZW50MlN0cmluZwkJcGxtU3RyaW5nCisgIEhpTGluayBwbG1Db21tZW50U2tpcAkJCXBsbUNvbW1lbnQKKyAgSGlMaW5rIHBsbVN0cmluZwkJCVN0cmluZworICBIaUxpbmsgcGxtQ29tbWVudAkJCUNvbW1lbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicGxtIgorCisiIHZpbTogdHM9OCBzdz0yCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3BscC52aW0gYi9ydW50aW1lL3N5bnRheC9wbHAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTcwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wbHAudmltCkBAIC0wLDAgKzEsNDUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglQTFAgKFBlcmwgaW4gSFRNTCkKKyIgTWFpbnRhaW5lcjoJSnVlcmQgPGp1ZXJkQGp1ZXJkLm5sPgorIiBMYXN0IENoYW5nZToJMjAwMyBBcHIgMjUKKyIgQ2xvbmVkIEZyb206CWFzcHBlcmwudmltCisKKyIgQWRkIHRvIGZpbGV0eXBlLnZpbSB0aGUgZm9sbG93aW5nIGxpbmUgKHdpdGhvdXQgcXVvdGUgc2lnbik6CisiIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBscCBzZXRmIHBscAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK2lmICFleGlzdHMoIm1haW5fc3ludGF4IikKKyAgbGV0IG1haW5fc3ludGF4ID0gJ3BlcmxzY3JpcHQnCitlbmRpZgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvIDxzZmlsZT46cDpoL2h0bWwudmltCisgIHN5biBpbmNsdWRlIEBQTFBwZXJsIDxzZmlsZT46cDpoL3BlcmwudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9odG1sLnZpbQorICB1bmxldCBiOmN1cnJlbnRfc3ludGF4CisgIHN5biBpbmNsdWRlIEBQTFBwZXJsIHN5bnRheC9wZXJsLnZpbQorZW5kaWYKKworc3luIGNsdXN0ZXIgaHRtbFByZXByb2MgYWRkPVBMUHBlcmxibG9jaworCitzeW4ga2V5d29yZCBwZXJsQ29udHJvbCBQTFBfRU5ECitzeW4ga2V5d29yZCBwZXJsU3RhdGVtZW50SW5jbHVkZSBpbmNsdWRlIEluY2x1ZGUKK3N5biBrZXl3b3JkIHBlcmxTdGF0ZW1lbnRGaWxlcyBSZWFkRmlsZSBXcml0ZUZpbGUgQ291bnRlcgorc3luIGtleXdvcmQgcGVybFN0YXRlbWVudFNjYWxhciBFbnRpdHkgQXV0b1VSTCBEZWNvZGVVUkkgRW5jb2RlVVJJCisKK3N5biBjbHVzdGVyIFBMUHBlcmxjb2RlIGNvbnRhaW5zPXBlcmxTdGF0ZW1lbnQuKixwZXJsRnVuY3Rpb24scGVybE9wZXJhdG9yLHBlcmxWYXJQbGFpbixwZXJsVmFyTm90SW5NYXRjaGVzLHBlcmxTaGVsbENvbW1hbmQscGVybEZsb2F0LHBlcmxOdW1iZXIscGVybFN0cmluZ1VuZXhwYW5kZWQscGVybFN0cmluZyxwZXJsUVEscGVybENvbnRyb2wscGVybENvbmRpdGlvbmFsLHBlcmxSZXBlYXQscGVybENvbW1lbnQscGVybFBPRCxwZXJsSGVyZURvYyxwZXJsUGFja2FnZURlY2wscGVybEVsc2VJZkVycm9yLHBlcmxGaWxlZGVzY1JlYWQscGVybE1hdGNoCisKK3N5biByZWdpb24gIFBMUHBlcmxibG9jayBrZWVwZW5kIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSs8Oj1cPSsgZW5kPSs6PisgdHJhbnNwYXJlbnQgY29udGFpbnM9QFBMUHBlcmxjb2RlCisKK3N5biByZWdpb24gIFBMUGluY2x1ZGUga2VlcGVuZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0rPCgrIGVuZD0rKT4rCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInBscCIKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcGxzcWwudmltIGIvcnVudGltZS9zeW50YXgvcGxzcWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNTEzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wbHNxbC52aW0KQEAgLTAsMCArMSwyNzcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiBPcmFjbGUgUHJvY2VkdXJlYWwgU1FMIChQTC9TUUwpCisiIE1haW50YWluZXI6IEplZmYgTGFuemFyb3R0YSAoamVmZmxhbnphcm90dGEgYXQgeWFob28gZG90IGNvbSkKKyIgT3JpZ2luYWwgTWFpbnRhaW5lcjogQy4gTGF1cmVuY2UgR29uc2FsdmVzIChjbGdvbnNhbEBrYW1pLmNvbSkKKyIgVVJMOiBodHRwOi8vbGFuemFyb3R0YS50cmlwb2QuY29tL3ZpbS9zeW50YXgvcGxzcWwudmltLnppcAorIiBMYXN0IENoYW5nZTogU2VwdGVtYmVyIDE4LCAyMDAyCisiIEhpc3Rvcnk6IEdlb2ZmIEV2YW5zICYgQmlsbCBQcmlieWwgKGJpbGwgYXQgcGxuZXQgZG90IG9yZykKKyIJCUFkZGVkIDlpIGtleXdvcmRzLgorIgkgICBBdXN0aW4gWmllZ2xlciAoYXVzdGluIGF0IGhhbG9zdGF0dWUgZG90IGNhKQorIgkJQWRkZWQgOGkrIGZlYXR1cmVzLgorIgorIiBGb3IgdmVyc2lvbiA1LngsIGNsZWFyIGFsbCBzeW50YXggaXRlbXMuCisiIEZvciB2ZXJzaW9uIDYueCwgcXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkLgoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgVG9kby4KK3N5biBrZXl3b3JkIHBsc3FsVG9kbyBUT0RPIEZJWE1FIFhYWCBERUJVRyBOT1RFCitzeW4gY2x1c3RlciBwbHNxbENvbW1lbnRHcm91cCBjb250YWlucz1wbHNxbFRvZG8KKworc3luIGNhc2UgaWdub3JlCisKK3N5biBtYXRjaCAgIHBsc3FsR2FyYmFnZSAiW14gXHQoKV0iCitzeW4gbWF0Y2ggICBwbHNxbElkZW50aWZpZXIgIlthLXpdW2EtejAtOSRfI10qIgorc3luIG1hdGNoICAgcGxzcWxIb3N0SWRlbnRpZmllciAiOlthLXpdW2EtejAtOSRfI10qIgorCisiIFdoZW4gd2FudGVkLCBoaWdobGlnaHQgdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCitpZiBleGlzdHMoImNfc3BhY2VfZXJyb3JzIikKKyAgaWYgIWV4aXN0cygiY19ub190cmFpbF9zcGFjZV9lcnJvciIpCisgICAgc3luIG1hdGNoIHBsc3FsU3BhY2VFcnJvciAiXHNcKyQiCisgIGVuZGlmCisKKyAgaWYgIWV4aXN0cygiY19ub190YWJfc3BhY2VfZXJyb3IiKQorICAgIHN5biBtYXRjaCBwbHNxbFNwYWNlRXJyb3IgIiBcK1x0Im1lPWUtMQorICBlbmRpZgorZW5kaWYKKworIiBTeW1ib2xzLgorc3luIG1hdGNoICAgcGxzcWxTeW1ib2wgIlwoO1x8LFx8XC5cKSIKKworIiBPcGVyYXRvcnMuCitzeW4gbWF0Y2ggICBwbHNxbE9wZXJhdG9yICJcKCtcfC1cfFwqXHwvXHw9XHw8XHw+XHxAXHxcKlwqXHwhPVx8XH49XCkiCitzeW4gbWF0Y2ggICBwbHNxbE9wZXJhdG9yICJcKF49XHw8PVx8Pj1cfDo9XHw9Plx8XC5cLlx8fHxcfDw8XHw+Plx8XCJcKSIKKworIiBTb21lIG9mIE9yYWNsZSdzIFNRTCBrZXl3b3Jkcy4KK3N5biBrZXl3b3JkIHBsc3FsU1FMS2V5d29yZCBBQk9SVCBBQ0NFU1MgQUNDRVNTRUQgQUREIEFGVEVSIEFMTCBBTFRFUiBBTkQgQU5ZCitzeW4ga2V5d29yZCBwbHNxbFNRTEtleXdvcmQgQVMgQVNDIEFUVFJJQlVURSBBVURJVCBBVVRIT1JJWkFUSU9OIEFWRyBCQVNFX1RBQkxFCitzeW4ga2V5d29yZCBwbHNxbFNRTEtleXdvcmQgQkVGT1JFIEJFVFdFRU4gQlkgQ0FTQ0FERSBDQVNUIENIRUNLIENMVVNURVIKK3N5biBrZXl3b3JkIHBsc3FsU1FMS2V5d29yZCBDTFVTVEVSUyBDT0xBVVRIIENPTFVNTiBDT01NRU5UIENPTVBSRVNTIENPTk5FQ1QKK3N5biBrZXl3b3JkIHBsc3FsU1FMS2V5d29yZCBDT05TVFJBSU5UIENSQVNIIENSRUFURSBDVVJSRU5UIERBVEEgREFUQUJBU0UKK3N5biBrZXl3b3JkIHBsc3FsU1FMS2V5d29yZCBEQVRBX0JBU0UgREJBIERFRkFVTFQgREVMQVkgREVMRVRFIERFU0MgRElTVElOQ1QKK3N5biBrZXl3b3JkIHBsc3FsU1FMS2V5d29yZCBEUk9QIERVQUwgRUxTRSBFWENMVVNJVkUgRVhJU1RTIEVYVEVORFMgRVhUUkFDVAorc3luIGtleXdvcmQgcGxzcWxTUUxLZXl3b3JkIEZJTEUgRk9SQ0UgRk9SRUlHTiBGUk9NIEdSQU5UIEdST1VQIEhBVklORyBIRUFQCitzeW4ga2V5d29yZCBwbHNxbFNRTEtleXdvcmQgSURFTlRJRklFRCBJREVOVElGSUVSIElNTUVESUFURSBJTiBJTkNMVURJTkcKK3N5biBrZXl3b3JkIHBsc3FsU1FMS2V5d29yZCBJTkNSRU1FTlQgSU5ERVggSU5ERVhFUyBJTklUSUFMIElOU0VSVCBJTlNURUFECitzeW4ga2V5d29yZCBwbHNxbFNRTEtleXdvcmQgSU5URVJTRUNUIElOVE8gSU5WQUxJREFURSBJUyBJU09MQVRJT04gS0VZIExJQlJBUlkKK3N5biBrZXl3b3JkIHBsc3FsU1FMS2V5d29yZCBMSUtFIExPQ0sgTUFYRVhURU5UUyBNSU5VUyBNT0RFIE1PRElGWSBNVUxUSVNFVAorc3luIGtleXdvcmQgcGxzcWxTUUxLZXl3b3JkIE5FU1RFRCBOT0FVRElUIE5PQ09NUFJFU1MgTk9UIE5PV0FJVCBPRiBPRkYgT0ZGTElORQorc3luIGtleXdvcmQgcGxzcWxTUUxLZXl3b3JkIE9OIE9OTElORSBPUEVSQVRPUiBPUFRJT04gT1IgT1JERVIgT1JHQU5JWkFUSU9OCitzeW4ga2V5d29yZCBwbHNxbFNRTEtleXdvcmQgUENURlJFRSBQUklNQVJZIFBSSU9SIFBSSVZBVEUgUFJJVklMRUdFUyBQVUJMSUMKK3N5biBrZXl3b3JkIHBsc3FsU1FMS2V5d29yZCBRVU9UQSBSRUxFQVNFIFJFTkFNRSBSRVBMQUNFIFJFU09VUkNFIFJFVk9LRSBST0xMQkFDSworc3luIGtleXdvcmQgcGxzcWxTUUxLZXl3b3JkIFJPVyBST1dMQUJFTCBST1dTIFNDSEVNQSBTRUxFQ1QgU0VQQVJBVEUgU0VTU0lPTiBTRVQKK3N5biBrZXl3b3JkIHBsc3FsU1FMS2V5d29yZCBTSEFSRSBTSVpFIFNQQUNFIFNUQVJUIFNUT1JFIFNVQ0NFU1NGVUwgU1lOT05ZTQorc3luIGtleXdvcmQgcGxzcWxTUUxLZXl3b3JkIFNZU0RBVEUgVEFCTEUgVEFCTEVTIFRBQkxFU1BBQ0UgVEVNUE9SQVJZIFRPIFRSRUFUCitzeW4ga2V5d29yZCBwbHNxbFNRTEtleXdvcmQgVFJJR0dFUiBUUlVOQ0FURSBVSUQgVU5JT04gVU5JUVVFIFVOTElNSVRFRCBVUERBVEUKK3N5biBrZXl3b3JkIHBsc3FsU1FMS2V5d29yZCBVU0UgVVNFUiBWQUxJREFURSBWQUxVRVMgVklFVyBXSEVORVZFUiBXSEVSRSBXSVRICisKKyIgUEwvU1FMJ3Mgb3duIGtleXdvcmRzLgorc3luIGtleXdvcmQgcGxzcWxLZXl3b3JkIEFHRU5UIEFORCBBTlkgQVJSQVkgQVNTSUdOIEFTIEFUIEFVVEhJRCBCRUdJTiBCT0RZIEJZCitzeW4ga2V5d29yZCBwbHNxbEtleXdvcmQgQlVMSyBDIENBU0UgQ0hBUl9CQVNFIENIQVJTRVRGT1JNIENIQVJTRVRJRCBDTE9TRQorc3luIGtleXdvcmQgcGxzcWxLZXl3b3JkIENPTExFQ1QgQ09OU1RBTlQgQ09OU1RSVUNUT1IgQ09OVEVYVCBDVVJSVkFMIERFQ0xBUkUKK3N5biBrZXl3b3JkIHBsc3FsS2V5d29yZCBEVk9JRCBFWENFUFRJT04gRVhDRVBUSU9OX0lOSVQgRVhFQ1VURSBFWElUIEZFVENICitzeW4ga2V5d29yZCBwbHNxbEtleXdvcmQgRklOQUwgRlVOQ1RJT04gR09UTyBIQVNIIElNTUVESUFURSBJTiBJTkRJQ0FUT1IKK3N5biBrZXl3b3JkIHBsc3FsS2V5d29yZCBJTlNUQU5USUFCTEUgSVMgSkFWQSBMQU5HVUFHRSBMSUJSQVJZIE1BUCBNQVhMRU4KK3N5biBrZXl3b3JkIHBsc3FsS2V5d29yZCBNRU1CRVIgTkFNRSBORVcgTk9DT1BZIE5VTUJFUl9CQVNFIE9CSkVDVCBPQ0lDT0xMCitzeW4ga2V5d29yZCBwbHNxbEtleXdvcmQgT0NJREFURSBPQ0lEQVRFVElNRSBPQ0lMT0JMT0NBVE9SIE9DSU5VTUJFUiBPQ0lSQVcKK3N5biBrZXl3b3JkIHBsc3FsS2V5d29yZCBPQ0lTVFJJTkcgT0YgT1BBUVVFIE9QRU4gT1IgT1JERVIgT1RIRVJTIE9VVAorc3luIGtleXdvcmQgcGxzcWxLZXl3b3JkIE9WRVJSSURJTkcgUEFDS0FHRSBQQVJBTExFTF9FTkFCTEUgUEFSQU1FVEVSUworc3luIGtleXdvcmQgcGxzcWxLZXl3b3JkIFBBUlRJVElPTiBQSVBFTElORUQgUFJBR01BIFBST0NFRFVSRSBSQUlTRSBSQU5HRSBSRUYKK3N5biBrZXl3b3JkIHBsc3FsS2V5d29yZCBSRVNVTFQgUkVUVVJOIFJFVkVSU0UgUk9XVFlQRSBTQjEgU0VMRiBTSE9SVCBTSVpFX1QKK3N5biBrZXl3b3JkIHBsc3FsS2V5d29yZCBTUUwgU1FMQ09ERSBTUUxFUlJNIFNUQVRJQyBTVFJVQ1QgU1VCVFlQRSBURE8gVEhFTgorc3luIGtleXdvcmQgcGxzcWxLZXl3b3JkIFRBQkxFIFRJTUVaT05FX0FCQlIgVElNRVpPTkVfSE9VUiBUSU1FWk9ORV9NSU5VVEUKK3N5biBrZXl3b3JkIHBsc3FsS2V5d29yZCBUSU1FWk9ORV9SRUdJT04gVFlQRSBVTkRFUiBVTlNJR05FRCBVU0lORyBWQVJJQU5DRQorc3luIGtleXdvcmQgcGxzcWxLZXl3b3JkIFZBUlJBWSBWQVJZSU5HIFdIRU4gV1JJVEUKK3N5biBtYXRjaCAgIHBsc3FsS2V5d29yZCAiXDxFTkRcPiIKK3N5biBtYXRjaCAgIHBsc3FsS2V5d29yZCAiXC5DT1VOVFw+ImhzPXMrMQorc3luIG1hdGNoICAgcGxzcWxLZXl3b3JkICJcLkVYSVNUU1w+ImhzPXMrMQorc3luIG1hdGNoICAgcGxzcWxLZXl3b3JkICJcLkZJUlNUXD4iaHM9cysxCitzeW4gbWF0Y2ggICBwbHNxbEtleXdvcmQgIlwuTEFTVFw+ImhzPXMrMQorc3luIG1hdGNoICAgcGxzcWxLZXl3b3JkICJcLkRFTEVURVw+ImhzPXMrMQorc3luIG1hdGNoICAgcGxzcWxLZXl3b3JkICJcLlBSRVZcPiJocz1zKzEKK3N5biBtYXRjaCAgIHBsc3FsS2V5d29yZCAiXC5ORVhUXD4iaHM9cysxCisKKyIgUEwvU1FMIGZ1bmN0aW9ucy4KK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gQUJTIEFDT1MgQUREX01PTlRIUyBBU0NJSSBBU0NJSVNUUiBBU0lOIEFUQU4gQVRBTjIKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gQkZJTEVOQU1FIEJJVEFORCBDRUlMIENIQVJUT1JPV0lEIENIUiBDT0FMRVNDRQorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBDT01NSVQgQ09NTUlUX0NNIENPTVBPU0UgQ09OQ0FUICBDT05WRVJUICBDT1MgQ09TSAorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBDT1VOVCBDVUJFIENVUlJFTlRfREFURSBDVVJSRU5UX1RJTUUgQ1VSUkVOVF9USU1FU1RBTVAKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gREJUSU1FWk9ORSBERUNPREUgREVDT01QT1NFIERFUkVGIERVTVAgRU1QVFlfQkxPQgorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBFTVBUWV9DTE9CIEVYSVNUUyBFWFAgRkxPT1IgRlJPTV9UWiBHRVRCTkQgR0xCCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIEdSRUFURVNUIEdSRUFURVNUX0xCIEdST1VQSU5HIEhFWFRPUkFXICBJTklUQ0FQCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIElOU1RSIElOU1RSMiBJTlNUUjQgSU5TVFJCIElOU1RSQyBJU05DSEFSIExBU1RfREFZCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIExFQVNUIExFQVNUX1VCIExFTkdUSCBMRU5HVEgyIExFTkdUSDQgTEVOR1RIQiBMRU5HVEhDCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIExOIExPQ0FMVElNRSBMT0NBTFRJTUVTVEFNUCBMT0cgTE9XRVIgTFBBRAorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBMVFJJTSBMVUIgTUFLRV9SRUYgTUFYIE1JTiBNT0QgTU9OVEhTX0JFVFdFRU4KK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gTkNIQVJUT1JPV0lEIE5DSFIgTkVXX1RJTUUgTkVYVF9EQVkgTkhFWFRPUkFXCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIE5MU19DSEFSU0VUX0RFQ0xfTEVOIE5MU19DSEFSU0VUX0lEIE5MU19DSEFSU0VUX05BTUUKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gTkxTX0lOSVRDQVAgTkxTX0xPV0VSIE5MU1NPUlQgTkxTX1VQUEVSIE5VTExGTiBOVUxMSUYKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gTlVNVE9EU0lOVEVSVkFMIE5VTVRPWU1JTlRFUlZBTCBOVkwgUE9XRVIKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gUkFJU0VfQVBQTElDQVRJT05fRVJST1IgUkFXVE9IRVggUkFXVE9OSEVYIFJFRgorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBSRUZUT0hFWCBSRVBMQUNFIFJPTExCQUNLX05SIFJPTExCQUNLX1NWIFJPTExVUCBST1VORAorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBST1dJRFRPQ0hBUiBST1dJRFRPTkNIQVIgUk9XTEFCRUwgUlBBRCBSVFJJTQorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBTQVZFUE9JTlQgU0VTU0lPTlRJTUVaT05FIFNFVEJORCBTRVRfVFJBTlNBQ1RJT05fVVNFCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIFNJR04gU0lOIFNJTkggU09VTkRFWCBTUUxDT0RFIFNRTEVSUk0gU1FSVCBTVERERVYKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gU1VCU1RSIFNVQlNUUjIgU1VCU1RSNCBTVUJTVFJCIFNVQlNUUkMgU1VNCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIFNZU19BVF9USU1FX1pPTkUgU1lTX0NPTlRFWFQgU1lTREFURSBTWVNfRVhUUkFDVF9VVEMKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gU1lTX0dVSUQgU1lTX0xJVEVSQUxUT0RBVEUgU1lTX0xJVEVSQUxUT0RTSU5URVJWQUwKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gU1lTX0xJVEVSQUxUT1RJTUUgU1lTX0xJVEVSQUxUT1RJTUVTVEFNUAorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBTWVNfTElURVJBTFRPVFpUSU1FIFNZU19MSVRFUkFMVE9UWlRJTUVTVEFNUAorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBTWVNfTElURVJBTFRPWU1JTlRFUlZBTCBTWVNfT1ZFUl9fREQgU1lTX09WRVJfX0RJCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIFNZU19PVkVSX19JRCBTWVNfT1ZFUl9JSUQgU1lTX09WRVJfSUlUCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIFNZU19PVkVSX19JVCBTWVNfT1ZFUl9fVEkgU1lTX09WRVJfX1RUCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIFNZU1RJTUVTVEFNUCBUQU4gVEFOSCBUT19BTllMT0IgVE9fQkxPQiBUT19DSEFSCitzeW4ga2V5d29yZCBwbHNxbEZ1bmN0aW9uIFRPX0NMT0IgVE9fREFURSBUT19EU0lOVEVSVkFMIFRPX0xBQkVMIFRPX01VTFRJX0JZVEUKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gVE9fTkNIQVIgVE9fTkNMT0IgVE9fTlVNQkVSIFRPX1JBVyBUT19TSU5HTEVfQllURQorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBUT19USU1FIFRPX1RJTUVTVEFNUCBUT19USU1FU1RBTVBfVFogVE9fVElNRV9UWgorc3luIGtleXdvcmQgcGxzcWxGdW5jdGlvbiBUT19ZTUlOVEVSVkFMIFRSQU5TTEFURSBUUkVBVCBUUklNIFRSVU5DIFRaX09GRlNFVCBVSUQKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gVU5JU1RSIFVQUEVSIFVST1dJRCBVU0VSIFVTRVJFTlYgVkFMVUUgVkFSSUFOQ0UKK3N5biBrZXl3b3JkIHBsc3FsRnVuY3Rpb24gVlNJWkUgV09SSyBYT1IKK3N5biBtYXRjaCAgIHBsc3FsRnVuY3Rpb24gIlw8U1lTXCRMT0JfUkVQTElDQVRJT05cPiIKKworIiBQTC9TUUwgRXhjZXB0aW9ucworc3luIGtleXdvcmQgcGxzcWxFeGNlcHRpb24gQUNDRVNTX0lOVE9fTlVMTCBDQVNFX05PVF9GT1VORCBDT0xMRUNUSU9OX0lTX05VTEwKK3N5biBrZXl3b3JkIHBsc3FsRXhjZXB0aW9uIENVUlNPUl9BTFJFQURZX09QRU4gRFVQX1ZBTF9PTl9JTkRFWCBJTlZBTElEX0NVUlNPUgorc3luIGtleXdvcmQgcGxzcWxFeGNlcHRpb24gSU5WQUxJRF9OVU1CRVIgTE9HSU5fREVOSUVEIE5PX0RBVEFfRk9VTkQKK3N5biBrZXl3b3JkIHBsc3FsRXhjZXB0aW9uIE5PVF9MT0dHRURfT04gUFJPR1JBTV9FUlJPUiBST1dUWVBFX01JU01BVENICitzeW4ga2V5d29yZCBwbHNxbEV4Y2VwdGlvbiBTRUxGX0lTX05VTEwgU1RPUkFHRV9FUlJPUiBTVUJTQ1JJUFRfQkVZT05EX0NPVU5UCitzeW4ga2V5d29yZCBwbHNxbEV4Y2VwdGlvbiBTVUJTQ1JJUFRfT1VUU0lERV9MSU1JVCBTWVNfSU5WQUxJRF9ST1dJRAorc3luIGtleXdvcmQgcGxzcWxFeGNlcHRpb24gVElNRU9VVF9PTl9SRVNPVVJDRSBUT09fTUFOWV9ST1dTIFZBTFVFX0VSUk9SCitzeW4ga2V5d29yZCBwbHNxbEV4Y2VwdGlvbiBaRVJPX0RJVklERQorCisiIE9yYWNsZSBQc2V1ZG8gQ29sdW1zLgorc3luIGtleXdvcmQgcGxzcWxQc2V1ZG8gQ1VSUlZBTCBMRVZFTCBORVhUVkFMIFJPV0lEIFJPV05VTQorCitpZiBleGlzdHMoInBsc3FsX2hpZ2hsaWdodF90cmlnZ2VycyIpCisgIHN5biBrZXl3b3JkIHBsc3FsVHJpZ2dlciBJTlNFUlRJTkcgVVBEQVRJTkcgREVMRVRJTkcKK2VuZGlmCisKKyIgQ29uZGl0aW9uYWxzLgorc3luIGtleXdvcmQgcGxzcWxDb25kaXRpb25hbCBFTFNJRiBFTFNFIElGCitzeW4gbWF0Y2ggICBwbHNxbENvbmRpdGlvbmFsICJcPEVORFxzXCtJRlw+IgorCisiIExvb3BzLgorc3luIGtleXdvcmQgcGxzcWxSZXBlYXQgRk9SIExPT1AgV0hJTEUgRk9SQUxMCitzeW4gbWF0Y2ggICBwbHNxbFJlcGVhdCAiXDxFTkRcc1wrTE9PUFw+IgorCisiIFZhcmlvdXMgdHlwZXMgb2YgY29tbWVudHMuCitpZiBleGlzdHMoImNfY29tbWVudF9zdHJpbmdzIikKKyAgc3ludGF4IG1hdGNoIHBsc3FsQ29tbWVudFNraXAgY29udGFpbmVkICJeXHMqXCpcKCRcfFxzXCtcKSIKKyAgc3ludGF4IHJlZ2lvbiBwbHNxbENvbW1lbnRTdHJpbmcgY29udGFpbmVkIHN0YXJ0PStMXD0iKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgZW5kPStcKi8rbWU9cy0xIGNvbnRhaW5zPXBsc3FsQ29tbWVudFNraXAKKyAgc3ludGF4IHJlZ2lvbiBwbHNxbENvbW1lbnQyU3RyaW5nIGNvbnRhaW5lZCBzdGFydD0rTFw9Iisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGVuZD0iJCIKKyAgc3ludGF4IHJlZ2lvbiBwbHNxbENvbW1lbnRMIHN0YXJ0PSItLSIgc2tpcD0iXFwkIiBlbmQ9IiQiIGtlZXBlbmQgY29udGFpbnM9QHBsc3FsQ29tbWVudEdyb3VwLHBsc3FsQ29tbWVudDJTdHJpbmcscGxzcWxDaGFyTGl0ZXJhbCxwbHNxbEJvb2xlYW5MaXRlcmFsLHBsc3FsTnVtYmVyc0NvbSxwbHNxbFNwYWNlRXJyb3IKKyAgc3ludGF4IHJlZ2lvbiBwbHNxbENvbW1lbnQgc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPUBwbHNxbENvbW1lbnRHcm91cCxwbHNxbENvbW1lbnQyU3RyaW5nLHBsc3FsQ2hhckxpdGVyYWwscGxzcWxCb29sZWFuTGl0ZXJhbCxwbHNxbE51bWJlcnNDb20scGxzcWxTcGFjZUVycm9yCitlbHNlCisgIHN5bnRheCByZWdpb24gcGxzcWxDb21tZW50TCBzdGFydD0iLS0iIHNraXA9IlxcJCIgZW5kPSIkIiBrZWVwZW5kIGNvbnRhaW5zPUBwbHNxbENvbW1lbnRHcm91cCxwbHNxbFNwYWNlRXJyb3IKKyAgc3ludGF4IHJlZ2lvbiBwbHNxbENvbW1lbnQgc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPUBwbHNxbENvbW1lbnRHcm91cCxwbHNxbFNwYWNlRXJyb3IKK2VuZGlmCisKK3N5biBzeW5jIGNjb21tZW50IHBsc3FsQ29tbWVudAorc3luIHN5bmMgY2NvbW1lbnQgcGxzcWxDb21tZW50TAorCisiIFRvIGNhdGNoIHVudGVybWluYXRlZCBzdHJpbmcgbGl0ZXJhbHMuCitzeW4gbWF0Y2ggICBwbHNxbFN0cmluZ0Vycm9yICInLiokIgorCisiIFZhcmlvdXMgdHlwZXMgb2YgbGl0ZXJhbHMuCitzeW4gbWF0Y2ggICBwbHNxbE51bWJlcnMgdHJhbnNwYXJlbnQgIlw8WystXVw9XGRcfFsrLV1cPVwuXGQiIGNvbnRhaW5zPXBsc3FsSW50TGl0ZXJhbCxwbHNxbEZsb2F0TGl0ZXJhbAorc3luIG1hdGNoICAgcGxzcWxOdW1iZXJzQ29tIGNvbnRhaW5lZCB0cmFuc3BhcmVudCAiXDxbKy1dXD1cZFx8WystXVw9XC5cZCIgY29udGFpbnM9cGxzcWxJbnRMaXRlcmFsLHBsc3FsRmxvYXRMaXRlcmFsCitzeW4gbWF0Y2ggICBwbHNxbEludExpdGVyYWwgY29udGFpbmVkICJbKy1dXD1cZFwrIgorc3luIG1hdGNoICAgcGxzcWxGbG9hdExpdGVyYWwgY29udGFpbmVkICJbKy1dXD1cZFwrXC5cZCoiCitzeW4gbWF0Y2ggICBwbHNxbEZsb2F0TGl0ZXJhbCBjb250YWluZWQgIlsrLV1cPVxkKlwuXGQqIgorc3luIG1hdGNoICAgcGxzcWxDaGFyTGl0ZXJhbCAgICAiJ1teJ10nIgorc3luIG1hdGNoICAgcGxzcWxTdHJpbmdMaXRlcmFsICAiJ1woW14nXVx8JydcKSonIgorc3luIGtleXdvcmQgcGxzcWxCb29sZWFuTGl0ZXJhbCBUUlVFIEZBTFNFIE5VTEwKKworIiBUaGUgYnVpbHQtaW4gdHlwZXMuCitzeW4ga2V5d29yZCBwbHNxbFN0b3JhZ2UgQU5ZREFUQSBBTllUWVBFIEJGSUxFIEJJTkFSWV9JTlRFR0VSIEJMT0IgQk9PTEVBTgorc3luIGtleXdvcmQgcGxzcWxTdG9yYWdlIEJZVEUgQ0hBUiBDSEFSQUNURVIgQ0xPQiBDVVJTT1IgREFURSBEQVkgREVDIERFQ0lNQUwKK3N5biBrZXl3b3JkIHBsc3FsU3RvcmFnZSBET1VCTEUgRFNJTlRFUlZBTF9VTkNPTlNUUkFJTkVEIEZMT0FUIEhPVVIKK3N5biBrZXl3b3JkIHBsc3FsU3RvcmFnZSBJTlQgSU5URUdFUiBJTlRFUlZBTCBMT0IgTE9ORyBNSU5VVEUKK3N5biBrZXl3b3JkIHBsc3FsU3RvcmFnZSBNTFNMQUJFTCBNT05USCBOQVRVUkFMIE5BVFVSQUxOIE5DSEFSIE5DSEFSX0NTIE5DTE9CCitzeW4ga2V5d29yZCBwbHNxbFN0b3JhZ2UgTlVNQkVSIE5VTUVSSUMgTlZBUkNIQVIgUExTX0lOVCBQTFNfSU5URUdFUgorc3luIGtleXdvcmQgcGxzcWxTdG9yYWdlIFBPU0lUSVZFIFBPU0lUSVZFTiBQUkVDSVNJT04gUkFXIFJFQUwgUkVDT1JECitzeW4ga2V5d29yZCBwbHNxbFN0b3JhZ2UgU0VDT05EIFNJR05UWVBFIFNNQUxMSU5UIFNUUklORyBTWVNfUkVGQ1VSU09SIFRBQkxFIFRJTUUKK3N5biBrZXl3b3JkIHBsc3FsU3RvcmFnZSBUSU1FU1RBTVAgVElNRVNUQU1QX1VOQ09OU1RSQUlORUQKK3N5biBrZXl3b3JkIHBsc3FsU3RvcmFnZSBUSU1FU1RBTVBfVFpfVU5DT05TVFJBSU5FRAorc3luIGtleXdvcmQgcGxzcWxTdG9yYWdlIFRJTUVTVEFNUF9MVFpfVU5DT05TVFJBSU5FRCBVUk9XSUQgVkFSQ0hBUgorc3luIGtleXdvcmQgcGxzcWxTdG9yYWdlIFZBUkNIQVIyIFlFQVIgWU1JTlRFUlZBTF9VTkNPTlNUUkFJTkVEIFpPTkUKKworIiBBIHR5cGUtYXR0cmlidXRlIGlzIHJlYWxseSBhIHR5cGUuCitzeW4gbWF0Y2ggcGxzcWxUeXBlQXR0cmlidXRlICAiJVwoVFlQRVx8Uk9XVFlQRVwpXD4iCisKKyIgQWxsIG90aGVyIGF0dHJpYnV0ZXMuCitzeW4gbWF0Y2ggcGxzcWxBdHRyaWJ1dGUgIiVcKEJVTEtfRVhDRVBUSU9OU1x8QlVMS19ST1dDT1VOVFx8SVNPUEVOXHxGT1VORFx8Tk9URk9VTkRcfFJPV0NPVU5UXClcPiIKKworIiBUaGlzJ2xsIGNhdGNoIG1pcy1tYXRjaGVkIGNsb3NlLXBhcmVucy4KK3N5biBjbHVzdGVyIHBsc3FsUGFyZW5Hcm91cCBjb250YWlucz1wbHNxbFBhcmVuRXJyb3IsQHBsc3FsQ29tbWVudEdyb3VwLHBsc3FsQ29tbWVudFNraXAscGxzcWxJbnRMaXRlcmFsLHBsc3FsRmxvYXRMaXRlcmFsLHBsc3FsTnVtYmVyc0NvbQoraWYgZXhpc3RzKCJjX25vX2JyYWNrZXRfZXJyb3IiKQorICBzeW4gcmVnaW9uIHBsc3FsUGFyZW4gdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULEBwbHNxbFBhcmVuR3JvdXAKKyAgc3luIG1hdGNoIHBsc3FsUGFyZW5FcnJvciAiKSIKKyAgc3luIG1hdGNoIHBsc3FsRXJySW5QYXJlbiBjb250YWluZWQgIlt7fV0iCitlbHNlCisgIHN5biByZWdpb24gcGxzcWxQYXJlbiB0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsQHBsc3FsUGFyZW5Hcm91cCxwbHNxbEVyckluQnJhY2tldAorICBzeW4gbWF0Y2ggcGxzcWxQYXJlbkVycm9yICJbXF0pXSIKKyAgc3luIG1hdGNoIHBsc3FsRXJySW5QYXJlbiBjb250YWluZWQgIlt7fV0iCisgIHN5biByZWdpb24gcGxzcWxCcmFja2V0IHRyYW5zcGFyZW50IHN0YXJ0PSdcWycgZW5kPSddJyBjb250YWlucz1BTExCVVQsQHBsc3FsUGFyZW5Hcm91cCxwbHNxbEVyckluUGFyZW4KKyAgc3luIG1hdGNoIHBsc3FsRXJySW5CcmFja2V0IGNvbnRhaW5lZCAiWyk7e31dIgorZW5kaWYKKworIiBTeW50YXggU3luY2hyb25pemluZworc3luIHN5bmMgbWlubGluZXM9MTAgbWF4bGluZXM9MTAwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS54IGFuZCBlYXJsaWVyLCBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeS4KKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlciwgb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQuCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcGxzcWxfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcGxzcWxfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgcGxzcWxBdHRyaWJ1dGUJCU1hY3JvCisgIEhpTGluayBwbHNxbEJsb2NrRXJyb3IJRXJyb3IKKyAgSGlMaW5rIHBsc3FsQm9vbGVhbkxpdGVyYWwJQm9vbGVhbgorICBIaUxpbmsgcGxzcWxDaGFyTGl0ZXJhbAlDaGFyYWN0ZXIKKyAgSGlMaW5rIHBsc3FsQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgcGxzcWxDb21tZW50TAkJQ29tbWVudAorICBIaUxpbmsgcGxzcWxDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgcGxzcWxFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIHBsc3FsRXJySW5CcmFja2V0CUVycm9yCisgIEhpTGluayBwbHNxbEVyckluQmxvY2sJRXJyb3IKKyAgSGlMaW5rIHBsc3FsRXJySW5QYXJlbglFcnJvcgorICBIaUxpbmsgcGxzcWxFeGNlcHRpb24JCUZ1bmN0aW9uCisgIEhpTGluayBwbHNxbEZsb2F0TGl0ZXJhbAlGbG9hdAorICBIaUxpbmsgcGxzcWxGdW5jdGlvbgkJRnVuY3Rpb24KKyAgSGlMaW5rIHBsc3FsR2FyYmFnZQkJRXJyb3IKKyAgSGlMaW5rIHBsc3FsSG9zdElkZW50aWZpZXIJTGFiZWwKKyAgSGlMaW5rIHBsc3FsSWRlbnRpZmllcglOb3JtYWwKKyAgSGlMaW5rIHBsc3FsSW50TGl0ZXJhbAlOdW1iZXIKKyAgSGlMaW5rIHBsc3FsT3BlcmF0b3IJCU9wZXJhdG9yCisgIEhpTGluayBwbHNxbFBhcmVuCQlOb3JtYWwKKyAgSGlMaW5rIHBsc3FsUGFyZW5FcnJvcglFcnJvcgorICBIaUxpbmsgcGxzcWxTcGFjZUVycm9yCUVycm9yCisgIEhpTGluayBwbHNxbFBzZXVkbwkJUHJlUHJvYworICBIaUxpbmsgcGxzcWxLZXl3b3JkCQlLZXl3b3JkCisgIEhpTGluayBwbHNxbFJlcGVhdAkJUmVwZWF0CisgIEhpTGluayBwbHNxbFN0b3JhZ2UJCVN0b3JhZ2VDbGFzcworICBIaUxpbmsgcGxzcWxTUUxLZXl3b3JkCUZ1bmN0aW9uCisgIEhpTGluayBwbHNxbFN0cmluZ0Vycm9yCUVycm9yCisgIEhpTGluayBwbHNxbFN0cmluZ0xpdGVyYWwJU3RyaW5nCisgIEhpTGluayBwbHNxbENvbW1lbnRTdHJpbmcJU3RyaW5nCisgIEhpTGluayBwbHNxbENvbW1lbnQyU3RyaW5nCVN0cmluZworICBIaUxpbmsgcGxzcWxTeW1ib2wJCU5vcm1hbAorICBIaUxpbmsgcGxzcWxUcmlnZ2VyCQlGdW5jdGlvbgorICBIaUxpbmsgcGxzcWxUeXBlQXR0cmlidXRlCVN0b3JhZ2VDbGFzcworICBIaUxpbmsgcGxzcWxUb2RvCQlUb2RvCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInBsc3FsIgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9wby52aW0gYi9ydW50aW1lL3N5bnRheC9wby52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhNzVkNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3BvLnZpbQpAQCAtMCwwICsxLDQ2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJcG8gKGdldHRleHQpCisiIE1haW50YWluZXI6CU5hbSBTdW5nSHl1biA8bmFtc2hAa2xkcC5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAxIEFwciAyNgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBtYXRjaCAgcG9Db21tZW50CSJeIy4qJCIKK3N5biBtYXRjaCAgcG9Tb3VyY2VzCSJeIzouKiQiCitzeW4gbWF0Y2ggIHBvU3RhdGVtZW50CSJeXChkb21haW5cfG1zZ2lkXHxtc2dzdHJcKSIKK3N5biBtYXRjaCAgcG9TcGVjaWFsCWNvbnRhaW5lZCAiXFxcKHhceFwrXHxcb1x7MSwzfVx8Llx8JFwpIgorc3luIG1hdGNoICBwb0Zvcm1hdAkiJVwoXGRcK1wkXClcPVstKycgIzAqXSpcKFxkKlx8XCpcfFwqXGRcK1wkXClcKFwuXChcZCpcfFwqXHxcKlxkXCtcJFwpXClcPVwoW2hsTF1cfGxsXClcPVwoW2RpdW94WGZlRWdHY0NzU3BuXVx8XFtcXlw9LlteXV0qXF1cKSIgY29udGFpbmVkCitzeW4gbWF0Y2ggIHBvRm9ybWF0CSIlJSIgY29udGFpbmVkCitzeW4gcmVnaW9uIHBvU3RyaW5nCXN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisKKwkJCVwgY29udGFpbnM9cG9TcGVjaWFsLHBvRm9ybWF0CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3BvX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3BvX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHBvQ29tbWVudAlDb21tZW50CisgIEhpTGluayBwb1NvdXJjZXMJUHJlUHJvYworICBIaUxpbmsgcG9TdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluayBwb1NwZWNpYWwJU3BlY2lhbAorICBIaUxpbmsgcG9Gb3JtYXQJcG9TcGVjaWFsCisgIEhpTGluayBwb1N0cmluZwlTdHJpbmcKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicG8iCisKKyIgdmltOnNldCB0cz04IHN0cz0yIHN3PTIgbm9ldDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3BvZC52aW0gYi9ydW50aW1lL3N5bnRheC9wb2QudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZDBjODUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wb2QudmltCkBAIC0wLDAgKzEsODEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglQZXJsIFBPRCBmb3JtYXQKKyIgTWFpbnRhaW5lcjoJU2NvdHQgQmlnaGFtIDxkc2JAY3MuZHVrZS5lZHU+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorCisiIFRvIGFkZCBlbWJlZGRlZCBQT0QgZG9jdW1lbnRhdGlvbiBoaWdobGlnaHRpbmcgdG8geW91ciBzeW50YXggZmlsZSwgYWRkCisiIHRoZSBjb21tYW5kczoKKyIKKyIgICBzeW4gaW5jbHVkZSBAUG9kIDxzZmlsZT46cDpoL3BvZC52aW0KKyIgICBzeW4gcmVnaW9uIG15UE9EIHN0YXJ0PSJePXBvZCIgc3RhcnQ9Il49aGVhZCIgZW5kPSJePWN1dCIga2VlcGVuZCBjb250YWluZWQgY29udGFpbnM9QFBvZAorIgorIiBhbmQgYWRkIG15UG9kIHRvIHRoZSBjb250YWlucz0gbGlzdCBvZiBzb21lIGV4aXN0aW5nIHJlZ2lvbiwgcHJvYmFibHkgYQorIiBjb21tZW50LiAgVGhlICJrZWVwZW5kIiBmbGFnIGlzIG5lZWRlZCBiZWNhdXNlICI9Y3V0IiBpcyBtYXRjaGVkIGFzIGEKKyIgcGF0dGVybiBpbiBpdHMgb3duIHJpZ2h0LgorCisKKyIgUmVtb3ZlIGFueSBvbGQgc3ludGF4IHN0dWZmIGhhbmdpbmcgYXJvdW5kICh0aGlzIGlzIHN1cHByZXNzZWQKKyIgYXV0b21hdGljYWxseSBieSAiOnN5biBpbmNsdWRlIiBpZiBuZWNlc3NhcnkpLgorIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFBPRCBjb21tYW5kcworc3luIG1hdGNoIHBvZENvbW1hbmQJIl49aGVhZFsxMl0iCW5leHRncm91cD1wb2RDbWRUZXh0CitzeW4gbWF0Y2ggcG9kQ29tbWFuZAkiXj1pdGVtIgluZXh0Z3JvdXA9cG9kQ21kVGV4dAorc3luIG1hdGNoIHBvZENvbW1hbmQJIl49b3ZlciIJbmV4dGdyb3VwPXBvZE92ZXJJbmRlbnQgc2tpcHdoaXRlCitzeW4gbWF0Y2ggcG9kQ29tbWFuZAkiXj1iYWNrIgorc3luIG1hdGNoIHBvZENvbW1hbmQJIl49Y3V0Igorc3luIG1hdGNoIHBvZENvbW1hbmQJIl49cG9kIgorc3luIG1hdGNoIHBvZENvbW1hbmQJIl49Zm9yIgkJbmV4dGdyb3VwPXBvZEZvcktleXdkIHNraXB3aGl0ZQorc3luIG1hdGNoIHBvZENvbW1hbmQJIl49YmVnaW4iCW5leHRncm91cD1wb2RGb3JLZXl3ZCBza2lwd2hpdGUKK3N5biBtYXRjaCBwb2RDb21tYW5kCSJePWVuZCIJCW5leHRncm91cD1wb2RGb3JLZXl3ZCBza2lwd2hpdGUKKworIiBUZXh0IG9mIGEgPWhlYWQxLCA9aGVhZDIgb3IgPWl0ZW0gY29tbWFuZAorc3luIG1hdGNoIHBvZENtZFRleHQJIi4qJCIgY29udGFpbmVkIGNvbnRhaW5zPXBvZEZvcm1hdAorCisiIEluZGVudCBhbW91bnQgb2YgPW92ZXIgY29tbWFuZAorc3luIG1hdGNoIHBvZE92ZXJJbmRlbnQJIlxkXCsiIGNvbnRhaW5lZAorCisiIEZvcm1hdHRlciBpZGVudGlmaWVyIGtleXdvcmQgZm9yID1mb3IsID1iZWdpbiBhbmQgPWVuZCBjb21tYW5kcworc3luIG1hdGNoIHBvZEZvcktleXdkCSJcU1wrIiBjb250YWluZWQKKworIiBBbiBpbmRlbnRlZCBsaW5lLCB0byBiZSBkaXNwbGF5ZWQgdmVyYmF0aW0KK3N5biBtYXRjaCBwb2RWZXJiYXRpbUxpbmUJIl5ccy4qJCIKKworIiBJbmxpbmUgdGV4dHVhbCBpdGVtcyBoYW5kbGVkIHNwZWNpYWxseSBieSBQT0QKK3N5biBtYXRjaCBwb2RTcGVjaWFsCSJcKFw8XHwmXClcSVxpKlwoOjpcSVxpKlwpKihbXildKikiCitzeW4gbWF0Y2ggcG9kU3BlY2lhbAkiWyRAJV1cSVxpKlwoOjpcSVxpKlwpKlw+IgorCisiIFNwZWNpYWwgZm9ybWF0dGluZyBzZXF1ZW5jZXMKK3N5biByZWdpb24gcG9kRm9ybWF0CXN0YXJ0PSJbSUJTQ0xGWEVaXTwiIGVuZD0iPiIgb25lbGluZSBjb250YWlucz1wb2RGb3JtYXQKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcG9kX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3BvZF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBwb2RDb21tYW5kCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHBvZENtZFRleHQJCVN0cmluZworICBIaUxpbmsgcG9kT3ZlckluZGVudAkJTnVtYmVyCisgIEhpTGluayBwb2RGb3JLZXl3ZAkJSWRlbnRpZmllcgorICBIaUxpbmsgcG9kRm9ybWF0CQlJZGVudGlmaWVyCisgIEhpTGluayBwb2RWZXJiYXRpbUxpbmUJUHJlUHJvYworICBIaUxpbmsgcG9kU3BlY2lhbAkJSWRlbnRpZmllcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJwb2QiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9wb3N0c2NyLnZpbSBiL3J1bnRpbWUvc3ludGF4L3Bvc3RzY3IudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZGJjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wb3N0c2NyLnZpbQpAQCAtMCwwICsxLDc4MyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBQb3N0U2NyaXB0IC0gYWxsIExldmVscywgc2VsZWN0YWJsZQorIiBNYWludGFpbmVyOiAgIE1pa2UgV2lsbGlhbXMgPG1yd0BlYW5kZW0uY28udWs+CisiIEZpbGVuYW1lczogICAgKi5wcywqLmVwcworIiBMYXN0IENoYW5nZTogIDI3dGggSnVuZSAyMDAyCisiIFVSTDoJCWh0dHA6Ly93d3cuZWFuZGVtLmNvLnVrL21ydy92aW0KKyIKKyIgT3B0aW9ucyBGbGFnczoKKyIgcG9zdHNjcl9sZXZlbAkJCS0gbGFuZ3VhZ2UgbGV2ZWwgdG8gdXNlIGZvciBoaWdobGlndGluZyAoMSwgMiwgb3IgMykKKyIgcG9zdHNjcl9kaXNwbGF5CQktIGluY2x1ZGUgZGlzcGxheSBQUyBvcGVyYXRvcnMKKyIgcG9zdHNjcl9naG9zdHNjcmlwdAkJLSBpbmNsdWRlIEdTIGV4dGVuc2lvbnMKKyIgcG9zdHNjcl9mb250cwkJCS0gaGlnaGxpZ2h0IHN0YW5kYXJkIGZvbnQgbmFtZXMgKGEgbG90IGZvciBQUyAzKQorIiBwb3N0c2NyX2VuY29kaW5ncwkJLSBoaWdobGlnaHQgZW5jb2RpbmcgbmFtZXMgKHRoZXJlIGFyZSBhIGxvdCkKKyIgcG9zdHNjcl9hbmRvcm5vdF9iaW5hcnkJLSBoaWdobGlnaHQgYW5kLCBvciwgYW5kIG5vdCBhcyBiaW5hcnkgb3BlcmF0b3JzIChub3QgbG9naWNhbCkKKyIKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBQb3N0U2NyaXB0IGlzIGNhc2Ugc2Vuc2l0aXZlCitzeW4gY2FzZSBtYXRjaAorCisiIEtleXdvcmQgY2hhcmFjdGVycyAtIGFsbCA3LWJpdCBBU0NJSSBiYXIgUFMgZGVsaW1pdGVycyBhbmQgd3MKK2lmIHZlcnNpb24gPj0gNjAwCisgIHNldGxvY2FsIGlza2V5d29yZD0zMy0xMjcsXigsXiksXjwsXj4sXlssXl0sXnssXn0sXi8sXiUKK2Vsc2UKKyAgc2V0IGlza2V5d29yZD0zMy0xMjcsXigsXiksXjwsXj4sXlssXl0sXnssXn0sXi8sXiUKK2VuZGlmCisKKyIgWWVyIHRydXN0eSBvbGQgVE9ETyBoaWdobGdodGVyIQorc3luIGtleXdvcmQgcG9zdHNjclRvZG8gY29udGFpbmVkICBUT0RPCisKKyIgQ29tbWVudAorc3luIG1hdGNoIHBvc3RzY3JDb21tZW50CSIlLiokIiBjb250YWlucz1wb3N0c2NyVG9kbworIiBEU0MgY29tbWVudCBzdGFydCBsaW5lIChOQjogZGVmaW5lcyBEU0MgbGV2ZWwsIG5vdCBQUyBsZXZlbCEpCitzeW4gbWF0Y2ggIHBvc3RzY3JEU0NDb21tZW50ICAgICJeJSFQUy1BZG9iZS1cZFwrXC5cZFwrXHMqLiokIgorIiBEU0MgY29tbWVudCBsaW5lIChubyBjaGVjayBvbiBwb3NzaWJsZSBjb21tZW50cyAtIGFub3RoZXIgbGFuZ3VhZ2UhKQorc3luIG1hdGNoICBwb3N0c2NyRFNDQ29tbWVudCAgICAiXiUlXHVcKy4qJCIgY29udGFpbnM9QHBvc3RzY3JTdHJpbmcsQHBvc3RzY3JOdW1iZXIKKyIgRFNDIGNvbnRpbnVhdGlvbiBsaW5lIChubyBjaGVjayB0aGF0IHByZXZpb3VzIGxpbmUgaXMgRFNDIGNvbW1lbnQpCitzeW4gbWF0Y2ggIHBvc3RzY3JEU0NDb21tZW50ICAgICJeJSUrICouKiQiIGNvbnRhaW5zPUBwb3N0c2NyU3RyaW5nLEBwb3N0c2NyTnVtYmVyCisKKyIgTmFtZXMKK3N5biBtYXRjaCBwb3N0c2NyTmFtZQkJIlxrXCsiCisKKyIgSWRlbnRpZmllcnMKK3N5biBtYXRjaCBwb3N0c2NySWRlbnRpZmllckVycm9yICIvXHsxLDJ9W1s6c3BhY2U6XVxbXF17fV0ibWU9ZS0xCitzeW4gbWF0Y2ggcG9zdHNjcklkZW50aWZpZXIgICAgICIvXHsxLDJ9XGtcKyIgY29udGFpbnM9cG9zdHNjckNvbnN0YW50LHBvc3RzY3JCb29sZWFuLHBvc3RzY3JDdXN0Q29uc3RhbnQKKworIiBOdW1iZXJzCitzeW4gY2FzZSBpZ25vcmUKKyIgSW4gZmlsZSBoZXggZGF0YSAtIHVzdWFsbHkgY29tcGxldGUgbGluZXMKK3N5biBtYXRjaCBwb3N0c2NySGV4CQkiXltbOnhkaWdpdDpdXVtbOnhkaWdpdDpdWzpzcGFjZTpdXSokIgorInN5biBtYXRjaCBwb3N0c2NySGV4CQkgIlw8XHhcezIsfVw+IgorIiBJbnRlZ2Vycworc3luIG1hdGNoIHBvc3RzY3JJbnRlZ2VyCSJcPFsrLV1cPVxkXCtcPiIKKyIgUmFkaXgKK3N5biBtYXRjaCBwb3N0c2NyUmFkaXgJCSJcZFwrI1x4XCtcPiIKKyIgUmVhbHMgLSB1cHBlciBhbmQgbG93ZXIgY2FzZSBlIGlzIGFsbG93ZWQKK3N5biBtYXRjaCBwb3N0c2NyRmxvYXQJCSJbKy1dXD1cZFwrXC5cPiIKK3N5biBtYXRjaCBwb3N0c2NyRmxvYXQJCSJbKy1dXD1cZFwrXC5cZCpcKGVbKy1dXD1cZFwrXClcPVw+Igorc3luIG1hdGNoIHBvc3RzY3JGbG9hdAkJIlsrLV1cPVwuXGRcK1woZVsrLV1cPVxkXCtcKVw9XD4iCitzeW4gbWF0Y2ggcG9zdHNjckZsb2F0CQkiWystXVw9XGRcK2VbKy1dXD1cZFwrXD4iCitzeW4gY2x1c3RlciBwb3N0c2NyTnVtYmVyCWNvbnRhaW5zPXBvc3RzY3JJbnRlZ2VyLHBvc3RzY3JSYWRpeCxwb3N0c2NyRmxvYXQKK3N5biBjYXNlIG1hdGNoCisKKyIgRXNjYXBlZCBjaGFyYWN0ZXJzCitzeW4gbWF0Y2ggcG9zdHNjclNwZWNpYWxDaGFyICAgIGNvbnRhaW5lZCAiXFxbbnJ0YmZcXCgpXSIKK3N5biBtYXRjaCBwb3N0c2NyU3BlY2lhbENoYXJFcnJvciBjb250YWluZWQgIlxcW15ucnRiZlxcKCldImhlPWUtMQorIiBFc2NhcGVkIG9jdGFsIGNoYXJhY3RlcnMKK3N5biBtYXRjaCBwb3N0c2NyU3BlY2lhbENoYXIgICAgY29udGFpbmVkICJcXFxvXHsxLDN9IgorCisiIFN0cmluZ3MKKyIgQVNDSUkgc3RyaW5ncworc3luIHJlZ2lvbiBwb3N0c2NyQVNDSUlTdHJpbmcgICBzdGFydD0rKCsgZW5kPSspKyBza2lwPSsoW14pXSopKyBjb250YWlucz1wb3N0c2NyU3BlY2lhbENoYXIscG9zdHNjclNwZWNpYWxDaGFyRXJyb3IKKyIgSGV4IHN0cmluZ3MKK3N5biBtYXRjaCBwb3N0c2NySGV4Q2hhckVycm9yICAgY29udGFpbmVkICJbXjw+Wzp4ZGlnaXQ6XVs6c3BhY2U6XV0iCitzeW4gcmVnaW9uIHBvc3RzY3JIZXhTdHJpbmcgICAgIHN0YXJ0PSs8XCgkXHxbXjxdXCkrIGVuZD0rPisgY29udGFpbnM9cG9zdHNjckhleENoYXJFcnJvcgorc3luIG1hdGNoIHBvc3RzY3JIZXhTdHJpbmcgICAgICAiPD4iCisiIEFTQ0lJODUgc3RyaW5ncworc3luIG1hdGNoIHBvc3RzY3JBU0NJSTg1Q2hhckVycm9yIGNvbnRhaW5lZCAiW148Plx+IS11els6c3BhY2U6XV0iCitzeW4gcmVnaW9uIHBvc3RzY3JBU0NJSTg1U3RyaW5nIHN0YXJ0PSs8XH4rIGVuZD0rXH4+KyBjb250YWlucz1wb3N0c2NyQVNDSUk4NUNoYXJFcnJvcgorc3luIGNsdXN0ZXIgcG9zdHNjclN0cmluZyAgICAgICBjb250YWlucz1wb3N0c2NyQVNDSUlTdHJpbmcscG9zdHNjckhleFN0cmluZyxwb3N0c2NyQVNDSUk4NVN0cmluZworCisKKyIgU2V0IGRlZmF1bHQgaGlnaGxpZ2h0aW5nIHRvIGxldmVsIDIgLSBtb3N0IGNvbW1vbiBhdCB0aGUgbW9tZW50CitpZiAhZXhpc3RzKCJwb3N0c2NyX2xldmVsIikKKyAgbGV0IHBvc3RzY3JfbGV2ZWwgPSAyCitlbmRpZgorCisKKyIgUFMgbGV2ZWwgMSBvcGVyYXRvcnMgLSBjb21tb24gdG8gYWxsIGxldmVscyAod2VsbCAuLi4pCisKKyIgU3RhY2sgb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIHBvcCBleGNoIGR1cCBjb3B5IGluZGV4IHJvbGwgY2xlYXIgY291bnQgbWFyayBjbGVhcnRvbWFyayBjb3VudHRvbWFyaworCisiIE1hdGggb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyTWF0aE9wZXJhdG9yIGFkZCBkaXYgaWRpdiBtb2QgbXVsIHN1YiBhYnMgbmVnIGNlaWxpbmcgZmxvb3Igcm91bmQgdHJ1bmNhdGUgc3FydCBhdGFuIGNvcworc3luIGtleXdvcmQgcG9zdHNjck1hdGhPcGVyYXRvciBzaW4gZXhwIGxuIGxvZyByYW5kIHNyYW5kIHJyYW5kCisKKyIgQXJyYXkgb3BlcmF0b3JzCitzeW4gbWF0Y2ggcG9zdHNjck9wZXJhdG9yICAgICAgICJbXFtcXXt9XSIKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgYXJyYXkgbGVuZ3RoIGdldCBwdXQgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwgYXN0b3JlIGFsb2FkIGNvcHkKK3N5biBrZXl3b3JkIHBvc3RzY3JSZXBlYXQgICAgICAgZm9yYWxsCisKKyIgRGljdGlvbmFyeSBvcGVyYXRvcnMKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgZGljdCBtYXhsZW5ndGggYmVnaW4gZW5kIGRlZiBsb2FkIHN0b3JlIGtub3duIHdoZXJlIGN1cnJlbnRkaWN0CitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIGNvdW50ZGljdHN0YWNrIGRpY3RzdGFjayBjbGVhcmRpY3RzdGFjayBpbnRlcm5hbGRpY3QKK3N5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgICAgJGVycm9yIHN5c3RlbWRpY3QgdXNlcmRpY3Qgc3RhdHVzZGljdCBlcnJvcmRpY3QKKworIiBTdHJpbmcgb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIHN0cmluZyBhbmNob3JzZWFyY2ggc2VhcmNoIHRva2VuCisKKyIgTG9naWMgb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyTG9naWNhbE9wZXJhdG9yIGVxIG5lIGdlIGd0IGxlIGx0IGFuZCBub3Qgb3IKK2lmIGV4aXN0cygicG9zdHNjcl9hbmRvcm5vdF9iaW5hcnlvcCIpCisgIHN5biBrZXl3b3JkIHBvc3RzY3JCaW5hcnlPcGVyYXRvciBhbmQgb3Igbm90CitlbHNlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JMb2dpY2FsT3BlcmF0b3IgYW5kIG5vdCBvcgorZW5kaWYKK3N5biBrZXl3b3JkIHBvc3RzY3JCaW5hcnlPcGVyYXRvciB4b3IgYml0c2hpZnQKK3N5biBrZXl3b3JkIHBvc3RzY3JCb29sZWFuICAgICAgdHJ1ZSBmYWxzZQorCisiIFBTIFR5cGUgbmFtZXMKK3N5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgICAgYXJyYXl0eXBlIGJvb2xlYW50eXBlIGNvbmRpdGlvbnR5cGUgZGljdHR5cGUgZmlsZXR5cGUgZm9udHR5cGUgZ3N0YXRldHlwZQorc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgICBpbnRlZ2VydHlwZSBsb2NrdHlwZSBtYXJrdHlwZSBuYW1ldHlwZSBudWxsdHlwZSBvcGVyYXRvcnR5cGUKK3N5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgICAgcGFja2VkYXJyYXl0eXBlIHJlYWx0eXBlIHNhdmV0eXBlIHN0cmluZ3R5cGUKKworIiBDb250cm9sIG9wZXJhdG9ycworc3luIGtleXdvcmQgcG9zdHNjckNvbmRpdGlvbmFsICBpZiBpZmVsc2UKK3N5biBrZXl3b3JkIHBvc3RzY3JSZXBlYXQgICAgICAgZm9yIHJlcGVhdCBsb29wCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIGV4ZWMgZXhpdCBzdG9wIHN0b3BwZWQgY291bnRleGVjc3RhY2sgZXhlY3N0YWNrIHF1aXQKK3N5biBrZXl3b3JkIHBvc3RzY3JQcm9jZWR1cmUgICAgc3RhcnQKKworIiBPYmplY3Qgb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIHR5cGUgY3ZsaXQgY3Z4IHhjaGVjayBleGVjdXRlb25seSBub2FjY2VzcyByZWFkb25seSByY2hlY2sgd2NoZWNrIGN2aSBjdm4gY3ZyCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIGN2cnMgY3ZzCisKKyIgRmlsZSBvcGVyYXRvcnMKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgZmlsZSBjbG9zZWZpbGUgcmVhZCB3cml0ZSByZWFkaGV4c3RyaW5nIHdyaXRlaGV4c3RyaW5nIHJlYWRzdHJpbmcgd3JpdGVzdHJpbmcKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgYnl0ZXNhdmFpbGFibGUgZmx1c2ggZmx1c2hmaWxlIHJlc2V0ZmlsZSBzdGF0dXMgcnVuIGN1cnJlbnRmaWxlIHByaW50CitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIHN0YWNrIHBzdGFjayByZWFkbGluZSBkZWxldGVmaWxlIHNldGZpbGVwb3NpdGlvbiBmaWxlcG9zaXRpb24gcmVuYW1lZmlsZQorc3luIGtleXdvcmQgcG9zdHNjclJlcGVhdCAgICAgICBmaWxlbmFtZWZvcmFsbAorc3luIGtleXdvcmQgcG9zdHNjclByb2NlZHVyZSAgICA9ID09CisKKyIgVk0gb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIHNhdmUgcmVzdG9yZQorCisiIE1pc2Mgb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIGJpbmQgbnVsbCB1c2VydGltZSBleGVjdXRpdmUgZWNobyByZWFsdGltZQorc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgICBwcm9kdWN0IHJldmlzaW9uIHNlcmlhbG51bWJlciB2ZXJzaW9uCitzeW4ga2V5d29yZCBwb3N0c2NyUHJvY2VkdXJlICAgIHByb21wdAorCisiIEdTdGF0ZSBvcGVyYXRvcnMKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgZ3NhdmUgZ3Jlc3RvcmUgZ3Jlc3RvcmVhbGwgaW5pdGdyYXBoaWNzIHNldGxpbmV3aWR0aCBzZXRsaW5lY2FwIGN1cnJlbnRncmF5CitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIGN1cnJlbnRsaW5lam9pbiBzZXRtaXRlcmxpbWl0IGN1cnJlbnRtaXRlcmxpbWl0IHNldGRhc2ggY3VycmVudGRhc2ggc2V0Z3JheQorc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgICBzZXRoc2Jjb2xvciBjdXJyZW50aHNiY29sb3Igc2V0cmdiY29sb3IgY3VycmVudHJnYmNvbG9yIGN1cnJlbnRsaW5ld2lkdGgKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgY3VycmVudGxpbmVjYXAgc2V0bGluZWpvaW4gc2V0Y215a2NvbG9yIGN1cnJlbnRjbXlrY29sb3IKKworIiBEZXZpY2UgZ3N0YXRlIG9wZXJhdG9ycworc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgICBzZXRzY3JlZW4gY3VycmVudHNjcmVlbiBzZXR0cmFuc2ZlciBjdXJyZW50dHJhbnNmZXIgc2V0ZmxhdCBjdXJyZW50ZmxhdAorc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgICBjdXJyZW50YmxhY2tnZW5lcmF0aW9uIHNldGJsYWNrZ2VuZXJhdGlvbiBzZXR1bmRlcmNvbG9ycmVtb3ZhbAorc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgICBzZXRjb2xvcnNjcmVlbiBjdXJyZW50Y29sb3JzY3JlZW4gc2V0Y29sb3J0cmFuc2ZlciBjdXJyZW50Y29sb3J0cmFuc2Zlcgorc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgICBjdXJyZW50dW5kZXJjb2xvcnJlbW92YWwKKworIiBNYXRyaXggb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIG1hdHJpeCBpbml0bWF0cml4IGlkZW50bWF0cml4IGRlZmF1bHRtYXRyaXggY3VycmVudG1hdHJpeCBzZXRtYXRyaXggdHJhbnNsYXRlCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIGNvbmNhdCBjb25jYXRtYXRyaXggdHJhbnNmb3JtIGR0cmFuc2Zvcm0gaXRyYW5zZm9ybSBpZHRyYW5zZm9ybSBpbnZlcnRtYXRyaXgKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgc2NhbGUgcm90YXRlCisKKyIgUGF0aCBvcGVyYXRvcnMKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgbmV3cGF0aCBjdXJyZW50cG9pbnQgbW92ZXRvIHJtb3ZldG8gbGluZXRvIHJsaW5ldG8gYXJjIGFyY24gYXJjdG8gY3VydmV0bworc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgICBjbG9zZXBhdGggZmxhdHRlbnBhdGggcmV2ZXJzZXBhdGggc3Ryb2tlcGF0aCBjaGFycGF0aCBjbGlwcGF0aCBwYXRoYmJveAorc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgICBpbml0Y2xpcCBjbGlwIGVvY2xpcCByY3VydmV0bworc3luIGtleXdvcmQgcG9zdHNjclJlcGVhdCAgICAgICBwYXRoZm9yYWxsCisKKyIgUGFpbnRpbmcgb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIGVyYXNlcGFnZSBmaWxsIGVvZmlsbCBzdHJva2UgaW1hZ2UgaW1hZ2VtYXNrIGNvbG9yaW1hZ2UKKworIiBEZXZpY2Ugb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAgIHNob3dwYWdlIGNvcHlwYWdlIG51bGxkZXZpY2UKKworIiBDaGFyYWN0ZXIgb3BlcmF0b3JzCitzeW4ga2V5d29yZCBwb3N0c2NyUHJvY2VkdXJlICAgIGZpbmRmb250CitzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICAgIEZvbnREaXJlY3RvcnkgSVNPTGF0aW4xRW5jb2RpbmcgU3RhbmRhcmRFbmNvZGluZworc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgICBkZWZpbmVmb250IHNjYWxlZm9udCBtYWtlZm9udCBzZXRmb250IGN1cnJlbnRmb250IHNob3cgYXNob3cKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgc3RyaW5nd2lkdGgga3Nob3cgc2V0Y2FjaGVkZXZpY2UKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgc2V0Y2hhcndpZHRoIHdpZHRoc2hvdyBhd2lkdGhzaG93IGZpbmRlbmNvZGluZyBjc2hvdyByb290Zm9udCBzZXRjYWNoZWRldmljZTIKKworIiBJbnRlcnByZXRlciBvcGVyYXRvcnMKK3N5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgICAgdm1zdGF0dXMgY2FjaGVzdGF0dXMgc2V0Y2FjaGVsaW1pdAorCisiIFBTIGNvbnN0YW50cworc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgICBjb250YWluZWQgR3JheSBSZWQgR3JlZW4gQmx1ZSBBbGwgTm9uZSBEZXZpY2VHcmF5IERldmljZVJHQgorCisiIFBTIEZpbHRlcnMKK3N5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgICAgY29udGFpbmVkIEFTQ0lJSGV4RGVjb2RlIEFTQ0lJSGV4RW5jb2RlIEFTQ0lJODVEZWNvZGUgQVNDSUk4NUVuY29kZSBMWldEZWNvZGUKK3N5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgICAgY29udGFpbmVkIFJ1bkxlbmd0aERlY29kZSBSdW5MZW5ndGhFbmNvZGUgU3ViRmlsZURlY29kZSBOdWxsRW5jb2RlCitzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICAgIGNvbnRhaW5lZCBHSUZEZWNvZGUgUE5HRGVjb2RlIExaV0VuY29kZQorCisiIFBTIEpQRUcgZmlsdGVyIGRpY3Rpb25hcnkgZW50cmllcworc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgICBjb250YWluZWQgRENURW5jb2RlIERDVERlY29kZSBDb2xvcnMgSFNhbXBsZXMgVlNhbXBsZXMgUXVhbnRUYWJsZXMgUUZhY3Rvcgorc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgICBjb250YWluZWQgSHVmZlRhYmxlcyBDb2xvclRyYW5zZm9ybQorCisiIFBTIENDSVRUIGZpbHRlciBkaWN0aW9uYXJ5IGVudHJpZXMKK3N5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgICAgY29udGFpbmVkIENDSVRURmF4RW5jb2RlIENDSVRURmF4RGVjb2RlIFVuY29tcHJlc3NlZCBLIEVuZE9mTGluZQorc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgICBjb250YWluZWQgQ29sdW1ucyBSb3dzIEVuZE9mQmxvY2sgQmxhY2tzMSBEYW1hZ2VkUm93c0JlZm9yZUVycm9yCitzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICAgIGNvbnRhaW5lZCBFbmNvZGVkQnl0ZUFsaWduCisKKyIgUFMgRm9ybSBkaWN0aW9uYXJ5IGVudHJpZXMKK3N5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgICAgY29udGFpbmVkIEZvcm1UeXBlIFhVSUQgQkJveCBNYXRyaXggUGFpbnRQcm9jIEltcGxlbWVudGF0aW9uCisKKyIgUFMgRXJyb3JzCitzeW4ga2V5d29yZCBwb3N0c2NyUHJvY2VkdXJlICAgIGhhbmRsZWVycm9yCitzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICAgIGNvbnRhaW5lZCAgY29uZmlndXJhdGlvbmVycm9yIGRpY3RmdWxsIGRpY3RzdGFja3VuZGVyZmxvdyBkaWN0c3RhY2tvdmVyZmxvdworc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgICBjb250YWluZWQgIGV4ZWNzdGFja292ZXJmbG93IGludGVycnVwdCBpbnZhbGlkYWNjZXNzCitzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICAgIGNvbnRhaW5lZCAgaW52YWxpZGNvbnRleHQgaW52YWxpZGV4aXQgaW52YWxpZGZpbGVhY2Nlc3MgaW52YWxpZGZvbnQKK3N5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgICAgY29udGFpbmVkICBpbnZhbGlkaWQgaW52YWxpZHJlc3RvcmUgaW9lcnJvciBsaW1pdGNoZWNrIG5vY3VycmVudHBvaW50CitzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICAgIGNvbnRhaW5lZCAgcmFuZ2VjaGVjayBzdGFja292ZXJmbG93IHN0YWNrdW5kZXJmbG93IHN5bnRheGVycm9yIHRpbWVvdXQKK3N5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgICAgY29udGFpbmVkICB0eXBlY2hlY2sgdW5kZWZpbmVkIHVuZGVmaW5lZGZpbGVuYW1lIHVuZGVmaW5lZHJlc291cmNlCitzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICAgIGNvbnRhaW5lZCAgdW5kZWZpbmVkcmVzdWx0IHVubWF0Y2hlZG1hcmsgdW5yZWdpc3RlcmVkIFZNZXJyb3IKKworaWYgZXhpc3RzKCJwb3N0c2NyX2ZvbnRzIikKKyIgRm9udCBuYW1lcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgU3ltYm9sIFRpbWVzLVJvbWFuIFRpbWVzLUl0YWxpYyBUaW1lcy1Cb2xkIFRpbWVzLUJvbGRJdGFsaWMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIEhlbHZldGljYSBIZWx2ZXRpY2EtT2JsaXF1ZSBIZWx2ZXRpY2EtQm9sZCBIZWx2ZXRpY2EtQm9sZE9ibGlxdWUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIENvdXJpZXIgQ291cmllci1PYmxpcXVlIENvdXJpZXItQm9sZCBDb3VyaWVyLUJvbGRPYmxpcXVlCitlbmRpZgorCisKK2lmIGV4aXN0cygicG9zdHNjcl9kaXNwbGF5IikKKyIgRGlzcGxheSBQUyBvbmx5IG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBjdXJyZW50Y29udGV4dCBmb3JrIGpvaW4gZGV0YWNoIGxvY2sgbW9uaXRvciBjb25kaXRpb24gd2FpdCBub3RpZnkgeWllbGQKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgdmlld2NsaXAgZW92aWV3Y2xpcCByZWN0dmlld2NsaXAgaW5pdHZpZXdjbGlwIHZpZXdjbGlwcGF0aCBkZXZpY2VpbmZvCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIHNldGhhbGZ0b25lcGhhc2UgY3VycmVudGhhbGZ0b25lcGhhc2Ugd3RyYW5zbGF0aW9uIGRlZmluZXVzZXJuYW1lCitlbmRpZgorCisiIFBTIENoYXJhY3RlciBlbmNvZGluZyBuYW1lcworaWYgZXhpc3RzKCJwb3N0c2NyX2VuY29kaW5ncyIpCisiIENvbW1vbiBlbmNvZGluZyBuYW1lcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgLm5vdGRlZgorCisiIFN0YW5kYXJkIGFuZCBJU08gZW5jb2RpbmcgbmFtZXMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIHNwYWNlIGV4Y2xhbSBxdW90ZWRibCBudW1iZXJzaWduIGRvbGxhciBwZXJjZW50IGFtcGVyc2FuZCBxdW90ZXJpZ2h0CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBwYXJlbmxlZnQgcGFyZW5yaWdodCBhc3RlcmlzayBwbHVzIGNvbW1hIGh5cGhlbiBwZXJpb2Qgc2xhc2ggemVybworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgb25lIHR3byB0aHJlZSBmb3VyIGZpdmUgc2l4IHNldmVuIGVpZ2h0IG5pbmUgY29sb24gc2VtaWNvbG9uIGxlc3MKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGVxdWFsIGdyZWF0ZXIgcXVlc3Rpb24gYXQKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGJyYWNrZXRsZWZ0IGJhY2tzbGFzaCBicmFja2V0cmlnaHQgYXNjaWljaXJjdW0gdW5kZXJzY29yZSBxdW90ZWxlZnQKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGJyYWNlbGVmdCBiYXIgYnJhY2VyaWdodCBhc2NpaXRpbGRlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBleGNsYW1kb3duIGNlbnQgc3RlcmxpbmcgZnJhY3Rpb24geWVuIGZsb3JpbiBzZWN0aW9uIGN1cnJlbmN5CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBxdW90ZXNpbmdsZSBxdW90ZWRibGxlZnQgZ3VpbGxlbW90bGVmdCBndWlsc2luZ2xsZWZ0IGd1aWxzaW5nbHJpZ2h0CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBmaSBmbCBlbmRhc2ggZGFnZ2VyIGRhZ2dlcmRibCBwZXJpb2RjZW50ZXJlZCBwYXJhZ3JhcGggYnVsbGV0CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBxdW90ZXNpbmdsYmFzZSBxdW90ZWRibGJhc2UgcXVvdGVkYmxyaWdodCBndWlsbGVtb3RyaWdodCBlbGxpcHNpcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgcGVydGhvdXNhbmQgcXVlc3Rpb25kb3duIGdyYXZlIGFjdXRlIGNpcmN1bWZsZXggdGlsZGUgbWFjcm9uIGJyZXZlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBkb3RhY2NlbnQgZGllcmVzaXMgcmluZyBjZWRpbGxhIGh1bmdhcnVtbGF1dCBvZ29uZWsgY2Fyb24gZW1kYXNoCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBBRSBvcmRmZW1pbmluZSBMc2xhc2ggT3NsYXNoIE9FIG9yZG1hc2N1bGluZSBhZSBkb3RsZXNzaSBsc2xhc2gKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIG9zbGFzaCBvZSBnZXJtYW5kYmxzCisiIFRoZSBmb2xsb3dpbmcgYXJlIHZhbGlkIG5hbWVzLCBidXQgYXJlIHVzZWQgYXMgc2hvcnQgcHJvY2VkdXJlIG5hbWVzIGluIGdlbmVyYXRlZCBQUyEKKyIgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6CisiIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWgorCisiIFN5bWJvbCBlbmNvZGluZyBuYW1lcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgdW5pdmVyc2FsIGV4aXN0ZW50aWFsIHN1Y2h0aGF0IGFzdGVyaXNrbWF0aCBtaW51cworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgY29uZ3J1ZW50IEFscGhhIEJldGEgQ2hpIERlbHRhIEVwc2lsb24gUGhpIEdhbW1hIEV0YSBJb3RhIHRoZXRhMQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgS2FwcGEgTGFtYmRhIE11IE51IE9taWNyb24gUGkgVGhldGEgUmhvIFNpZ21hIFRhdSBVcHNpbG9uIHNpZ21hMQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgT21lZ2EgWGkgUHNpIFpldGEgdGhlcmVmb3JlIHBlcnBlbmRpY3VsYXIKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIHJhZGljYWxleCBhbHBoYSBiZXRhIGNoaSBkZWx0YSBlcHNpbG9uIHBoaSBnYW1tYSBldGEgaW90YSBwaGkxCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBrYXBwYSBsYW1iZGEgbXUgbnUgb21pY3JvbiBwaSB0aGV0YSByaG8gc2lnbWEgdGF1IHVwc2lsb24gb21lZ2ExCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBVcHNpbG9uMSBtaW51dGUgbGVzc2VxdWFsIGluZmluaXR5IGNsdWIgZGlhbW9uZCBoZWFydCBzcGFkZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgYXJyb3dib3RoIGFycm93bGVmdCBhcnJvd3VwIGFycm93cmlnaHQgYXJyb3dkb3duIGRlZ3JlZSBwbHVzbWludXMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIHNlY29uZCBncmVhdGVyZXF1YWwgbXVsdGlwbHkgcHJvcG9ydGlvbmFsIHBhcnRpYWxkaWZmIGRpdmlkZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgbm90ZXF1YWwgZXF1aXZhbGVuY2UgYXBwcm94ZXF1YWwgYXJyb3d2ZXJ0ZXggYXJyb3dob3JpemV4CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBhbGVwaCBJZnJha3R1ciBSZnJha3R1ciB3ZWllcnN0cmFzcyBjaXJjbGVtdWx0aXBseSBjaXJjbGVwbHVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBlbXB0eXNldCBpbnRlcnNlY3Rpb24gdW5pb24gcHJvcGVyc3VwZXJzZXQgcmVmbGV4c3VwZXJzZXQgbm90c3Vic2V0CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBwcm9wZXJzdWJzZXQgcmVmbGV4c3Vic2V0IGVsZW1lbnQgbm90ZWxlbWVudCBhbmdsZSBncmFkaWVudAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgcmVnaXN0ZXJzZXJpZiBjb3B5cmlnaHRzZXJpZiB0cmFkZW1hcmtzZXJpZiByYWRpY2FsIGRvdG1hdGgKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGxvZ2ljYWxub3QgbG9naWNhbGFuZCBsb2dpY2Fsb3IgYXJyb3dkYmxib3RoIGFycm93ZGJsbGVmdCBhcnJvd2RibHVwCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBhcnJvd2RibHJpZ2h0IGFycm93ZGJsZG93biBvbWVnYSB4aSBwc2kgemV0YSBzaW1pbGFyIGNhcnJpYWdlcmV0dXJuCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBsb3plbmdlIGFuZ2xlbGVmdCByZWdpc3RlcnNhbnMgY29weXJpZ2h0c2FucyB0cmFkZW1hcmtzYW5zIHN1bW1hdGlvbgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgcGFyZW5sZWZ0dHAgcGFyZW5sZWZ0ZXggcGFyZW5sZWZ0YnQgYnJhY2tldGxlZnR0cCBicmFja2V0bGVmdGV4CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBicmFja2V0bGVmdGJ0IGJyYWNlbGVmdHRwIGJyYWNlbGVmdG1pZCBicmFjZWxlZnRidCBicmFjZWV4IGV1cm8KKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGFuZ2xlcmlnaHQgaW50ZWdyYWwgaW50ZWdyYWx0cCBpbnRlZ3JhbGV4IGludGVncmFsYnQgcGFyZW5yaWdodHRwCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBwYXJlbnJpZ2h0ZXggcGFyZW5yaWdodGJ0IGJyYWNrZXRyaWdodHRwIGJyYWNrZXRyaWdodGV4CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBicmFja2V0cmlnaHRidCBicmFjZXJpZ2h0dHAgYnJhY2VyaWdodG1pZCBicmFjZXJpZ2h0YnQKKworIiBJU08gTGF0aW4xIGVuY29kaW5nIG5hbWVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBicm9rZW5iYXIgY29weXJpZ2h0IHJlZ2lzdGVyZWQgdHdvc3VwZXJpb3IgdGhyZWVzdXBlcmlvcgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgb25lc3VwZXJpb3Igb25lcXVhcnRlciBvbmVoYWxmIHRocmVlcXVhcnRlcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIEFncmF2ZSBBYWN1dGUgQWNpcmN1bWZsZXggQXRpbGRlIEFkaWVyZXNpcyBBcmluZyBDY2VkaWxsYSBFZ3JhdmUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIEVhY3V0ZSBFY2lyY3VtZmxleCBFZGllcmVzaXMgSWdyYXZlIElhY3V0ZSBJY2lyY3VtZmxleCBJZGllcmVzaXMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIEV0aCBOdGlsZGUgT2dyYXZlIE9hY3V0ZSBPY2lyY3VtZmxleCBPdGlsZGUgT2RpZXJlc2lzIFVncmF2ZSBVYWN1dGUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIFVjaXJjdW1mbGV4IFVkaWVyZXNpcyBZYWN1dGUgVGhvcm4KKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGFncmF2ZSBhYWN1dGUgYWNpcmN1bWZsZXggYXRpbGRlIGFkaWVyZXNpcyBhcmluZyBjY2VkaWxsYSBlZ3JhdmUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGVhY3V0ZSBlY2lyY3VtZmxleCBlZGllcmVzaXMgaWdyYXZlIGlhY3V0ZSBpY2lyY3VtZmxleCBpZGllcmVzaXMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGV0aCBudGlsZGUgb2dyYXZlIG9hY3V0ZSBvY2lyY3VtZmxleCBvdGlsZGUgb2RpZXJlc2lzIHVncmF2ZSB1YWN1dGUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIHVjaXJjdW1mbGV4IHVkaWVyZXNpcyB5YWN1dGUgdGhvcm4geWRpZXJlc2lzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCB6Y2Fyb24gZXhjbGFtc21hbGwgSHVuZ2FydW1sYXV0c21hbGwgZG9sbGFyb2xkc3R5bGUgZG9sbGFyc3VwZXJpb3IKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGFtcGVyc2FuZHNtYWxsIEFjdXRlc21hbGwgcGFyZW5sZWZ0c3VwZXJpb3IgcGFyZW5yaWdodHN1cGVyaW9yCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCB0d29kb3RlbmxlYWRlciBvbmVkb3RlbmxlYWRlciB6ZXJvb2xkc3R5bGUgb25lb2xkc3R5bGUgdHdvb2xkc3R5bGUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIHRocmVlb2xkc3R5bGUgZm91cm9sZHN0eWxlIGZpdmVvbGRzdHlsZSBzaXhvbGRzdHlsZSBzZXZlbm9sZHN0eWxlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBlaWdodG9sZHN0eWxlIG5pbmVvbGRzdHlsZSBjb21tYXN1cGVyaW9yCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCB0aHJlZXF1YXJ0ZXJzZW1kYXNoIHBlcmlvZHN1cGVyaW9yIHF1ZXN0aW9uc21hbGwgYXN1cGVyaW9yIGJzdXBlcmlvcgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgY2VudHN1cGVyaW9yIGRzdXBlcmlvciBlc3VwZXJpb3IgaXN1cGVyaW9yIGxzdXBlcmlvciBtc3VwZXJpb3IKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIG5zdXBlcmlvciBvc3VwZXJpb3IgcnN1cGVyaW9yIHNzdXBlcmlvciB0c3VwZXJpb3IgZmYgZmZpIGZmbAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgcGFyZW5sZWZ0aW5mZXJpb3IgcGFyZW5yaWdodGluZmVyaW9yIENpcmN1bWZsZXhzbWFsbCBoeXBoZW5zdXBlcmlvcgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgR3JhdmVzbWFsbCBBc21hbGwgQnNtYWxsIENzbWFsbCBEc21hbGwgRXNtYWxsIEZzbWFsbCBHc21hbGwgSHNtYWxsCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBJc21hbGwgSnNtYWxsIEtzbWFsbCBMc21hbGwgTXNtYWxsIE5zbWFsbCBPc21hbGwgUHNtYWxsIFFzbWFsbAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgUnNtYWxsIFNzbWFsbCBUc21hbGwgVXNtYWxsIFZzbWFsbCBXc21hbGwgWHNtYWxsIFlzbWFsbCBac21hbGwKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGNvbG9ubW9uZXRhcnkgb25lZml0dGVkIHJ1cGlhaCBUaWxkZXNtYWxsIGV4Y2xhbWRvd25zbWFsbAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgY2VudG9sZHN0eWxlIExzbGFzaHNtYWxsIFNjYXJvbnNtYWxsIFpjYXJvbnNtYWxsIERpZXJlc2lzc21hbGwKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIEJyZXZlc21hbGwgQ2Fyb25zbWFsbCBEb3RhY2NlbnRzbWFsbCBNYWNyb25zbWFsbCBmaWd1cmVkYXNoCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBoeXBoZW5pbmZlcmlvciBPZ29uZWtzbWFsbCBSaW5nc21hbGwgQ2VkaWxsYXNtYWxsIHF1ZXN0aW9uZG93bnNtYWxsCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBvbmVlaWdodGggdGhyZWVlaWdodGhzIGZpdmVlaWdodGhzIHNldmVuZWlnaHRocyBvbmV0aGlyZCB0d290aGlyZHMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIHplcm9zdXBlcmlvciBmb3Vyc3VwZXJpb3IgZml2ZXN1cGVyaW9yIHNpeHN1cGVyaW9yIHNldmVuc3VwZXJpb3IKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGVpZ2h0c3VwZXJpb3IgbmluZXN1cGVyaW9yIHplcm9pbmZlcmlvciBvbmVpbmZlcmlvciB0d29pbmZlcmlvcgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgdGhyZWVpbmZlcmlvciBmb3VyaW5mZXJpb3IgZml2ZWluZmVyaW9yIHNpeGluZmVyaW9yIHNldmVuaW5mZXJpb3IKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIGVpZ2h0aW5mZXJpb3IgbmluZWluZmVyaW9yIGNlbnRpbmZlcmlvciBkb2xsYXJpbmZlcmlvciBwZXJpb2RpbmZlcmlvcgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgY29tbWFpbmZlcmlvciBBZ3JhdmVzbWFsbCBBYWN1dGVzbWFsbCBBY2lyY3VtZmxleHNtYWxsCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBBdGlsZGVzbWFsbCBBZGllcmVzaXNzbWFsbCBBcmluZ3NtYWxsIEFFc21hbGwgQ2NlZGlsbGFzbWFsbAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgRWdyYXZlc21hbGwgRWFjdXRlc21hbGwgRWNpcmN1bWZsZXhzbWFsbCBFZGllcmVzaXNzbWFsbCBJZ3JhdmVzbWFsbAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgSWFjdXRlc21hbGwgSWNpcmN1bWZsZXhzbWFsbCBJZGllcmVzaXNzbWFsbCBFdGhzbWFsbCBOdGlsZGVzbWFsbAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgT2dyYXZlc21hbGwgT2FjdXRlc21hbGwgT2NpcmN1bWZsZXhzbWFsbCBPdGlsZGVzbWFsbCBPZGllcmVzaXNzbWFsbAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgT0VzbWFsbCBPc2xhc2hzbWFsbCBVZ3JhdmVzbWFsbCBVYWN1dGVzbWFsbCBVY2lyY3VtZmxleHNtYWxsCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBVZGllcmVzaXNzbWFsbCBZYWN1dGVzbWFsbCBUaG9ybnNtYWxsIFlkaWVyZXNpc3NtYWxsIEJsYWNrIEJvbGQgQm9vaworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgTGlnaHQgTWVkaXVtIFJlZ3VsYXIgUm9tYW4gU2VtaWJvbGQKKworIiBTdW5kcnkgc3RhbmRhcmQgYW5kIGV4cGVydCBlbmNvZGluZyBuYW1lcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgdHJhZGVtYXJrIFNjYXJvbiBZZGllcmVzaXMgWmNhcm9uIHNjYXJvbiBzb2Z0aHlwaGVuIG92ZXJzY29yZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgZ3JheWJveCBTYWN1dGUgVGNhcm9uIFphY3V0ZSBzYWN1dGUgdGNhcm9uIHphY3V0ZSBBb2dvbmVrIFNjZWRpbGxhCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBaZG90YWNjZW50IGFvZ29uZWsgc2NlZGlsbGEgTGNhcm9uIGxjYXJvbiB6ZG90YWNjZW50IFJhY3V0ZSBBYnJldmUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIExhY3V0ZSBDYWN1dGUgQ2Nhcm9uIEVvZ29uZWsgRWNhcm9uIERjYXJvbiBEY3JvYXQgTmFjdXRlIE5jYXJvbgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgT2h1bmdhcnVtbGF1dCBSY2Fyb24gVXJpbmcgVWh1bmdhcnVtbGF1dCBUY29tbWFhY2NlbnQgcmFjdXRlIGFicmV2ZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgbGFjdXRlIGNhY3V0ZSBjY2Fyb24gZW9nb25layBlY2Fyb24gZGNhcm9uIGRjcm9hdCBuYWN1dGUgbmNhcm9uCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBvaHVuZ2FydW1sYXV0IHJjYXJvbiB1cmluZyB1aHVuZ2FydW1sYXV0IHRjb21tYWFjY2VudCBHYnJldmUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIElkb3RhY2NlbnQgZ2JyZXZlIGJsYW5rIGFwcGxlCitlbmRpZgorCisKKyIgQnkgZGVmYXVsdCBsZXZlbCAzIGluY2x1ZGVzIGFsbCBsZXZlbCAyIG9wZXJhdG9ycworaWYgcG9zdHNjcl9sZXZlbCA9PSAyIHx8IHBvc3RzY3JfbGV2ZWwgPT0gMworIiBEaWN0aW9uYXJ5IG9wZXJhdG9ycworICBzeW4gbWF0Y2ggcG9zdHNjck9wZXJhdG9yICAgICAiXCg8PFx8Pj5cKSIKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgdW5kZWYKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgZ2xvYmFsZGljdCBzaGFyZWRkaWN0CisKKyIgRGV2aWNlIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBzZXRwYWdlZGV2aWNlIGN1cnJlbnRwYWdlZGV2aWNlCisKKyIgUGF0aCBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgcmVjdGNsaXAgc2V0YmJveCB1YXBwZW5kIHVjYWNoZSB1cGF0aCB1c3Ryb2tlcGF0aCBhcmN0CisKKyIgUGFpbnRpbmcgb3BlcmF0b3JzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIHJlY3RmaWxsIHJlY3RzdHJva2UgdWZpbGwgdWVvZmlsbCB1c3Ryb2tlCisKKyIgQXJyYXkgb3BlcmF0b3JzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIGN1cnJlbnRwYWNraW5nIHNldHBhY2tpbmcgcGFja2VkYXJyYXkKKworIiBNaXNjIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBsYW5ndWFnZWxldmVsCisKKyIgSW5zaWRlbmVzcyBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgaW5maWxsIGluZW9maWxsIGluc3Ryb2tlIGludWZpbGwgaW51ZW9maWxsIGludXN0cm9rZQorCisiIEdTdGF0ZSBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgZ3N0YXRlIHNldGdzdGF0ZSBjdXJyZW50Z3N0YXRlIHNldGNvbG9yCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIHNldGNvbG9yc3BhY2UgY3VycmVudGNvbG9yc3BhY2Ugc2V0c3Ryb2tlYWRqdXN0IGN1cnJlbnRzdHJva2VhZGp1c3QKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgY3VycmVudGNvbG9yCisKKyIgRGV2aWNlIGdzdGF0ZSBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgc2V0aGFsZnRvbmUgY3VycmVudGhhbGZ0b25lIHNldG92ZXJwcmludCBjdXJyZW50b3ZlcnByaW50CisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIHNldGNvbG9ycmVuZGVyaW5nIGN1cnJlbnRjb2xvcnJlbmRlcmluZworCisiIENoYXJhY3RlciBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgR2xvYmFsRm9udERpcmVjdG9yeSBTaGFyZWRGb250RGlyZWN0b3J5CisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIGdseXBoc2hvdyBzZWxlY3Rmb250CisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIGFkZGdseXBoIHVuZGVmaW5lZm9udCB4c2hvdyB4eXNob3cgeXNob3cKKworIiBQYXR0ZXJuIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBtYWtlcGF0dGVybiBzZXRwYXR0ZXJuIGV4ZWNmb3JtCisKKyIgUmVzb3VyY2Ugb3BlcmF0b3JzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIGRlZmluZXJlc291cmNlIHVuZGVmaW5lcmVzb3VyY2UgZmluZHJlc291cmNlIHJlc291cmNlc3RhdHVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JSZXBlYXQgICAgIHJlc291cmNlZm9yYWxsCisKKyIgRmlsZSBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgZmlsdGVyIHByaW50b2JqZWN0IHdyaXRlb2JqZWN0IHNldG9iamVjdGZvcm1hdCBjdXJyZW50b2JqZWN0Zm9ybWF0CisKKyIgVk0gb3BlcmF0b3JzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIGN1cnJlbnRzaGFyZWQgc2V0c2hhcmVkIGRlZmluZXVzZXJvYmplY3QgZXhlY3VzZXJvYmplY3QgdW5kZWZpbmV1c2Vyb2JqZWN0CisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIGdjaGVjayBzY2hlY2sgc3RhcnRqb2IgY3VycmVudGdsb2JhbCBzZXRnbG9iYWwKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgVXNlck9iamVjdHMKKworIiBJbnRlcnByZXRlciBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgc2V0dWNhY2hlcGFyYW1zIHNldHZtdGhyZXNob2xkIHVjYWNoZXN0YXR1cyBzZXRzeXN0ZW1wYXJhbXMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgc2V0dXNlcnBhcmFtcyBjdXJyZW50dXNlcnBhcmFtcyBzZXRjYWNoZXBhcmFtcyBjdXJyZW50Y2FjaGVwYXJhbXMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgY3VycmVudGRldnBhcmFtcyBzZXRkZXZwYXJhbXMgdm1yZWNsYWltIGN1cnJlbnRzeXN0ZW1wYXJhbXMKKworIiBQUzIgY29uc3RhbnRzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBEZXZpY2VDTVlLIFBhdHRlcm4gSW5kZXhlZCBTZXBhcmF0aW9uIEN5YW4gTWFnZW50YSBZZWxsb3cgQmxhY2sKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIENJRUJhc2VkQSBDSUVCYXNlZEFCQyBDSUVCYXNlZERFRiBDSUVCYXNlZERFRkcKKworIiBQUzIgJGVycm9yIGRpY3Rpb25hcnkgZW50cmllcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgbmV3ZXJyb3IgZXJyb3JuYW1lIGNvbW1hbmQgZXJyb3JpbmZvIG9zdGFjayBlc3RhY2sgZHN0YWNrCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCByZWNvcmRzdGFja3MgYmluYXJ5CisKKyIgUFMyIENhdGVnb3J5IGRpY3Rpb25hcnkKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIERlZmluZVJlc291cmNlIFVuZGVmaW5lUmVzb3VyY2UgRmluZFJlc291cmNlIFJlc291cmNlU3RhdHVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBSZXNvdXJjZUZvckFsbCBDYXRlZ29yeSBJbnN0YW5jZVR5cGUgUmVzb3VyY2VGaWxlTmFtZQorCisiIFBTMiBDYXRlZ29yeSBuYW1lcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgRm9udCBFbmNvZGluZyBGb3JtIFBhdHRlcm4gUHJvY1NldCBDb2xvclNwYWNlIEhhbGZ0b25lCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBDb2xvclJlbmRlcmluZyBGaWx0ZXIgQ29sb3JTcGFjZUZhbWlseSBFbXVsYXRvciBJT0RldmljZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgQ29sb3JSZW5kZXJpbmdUeXBlIEZNYXBUeXBlIEZvbnRUeXBlIEZvcm1UeXBlIEhhbGZ0b25lVHlwZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgSW1hZ2VUeXBlIFBhdHRlcm5UeXBlIENhdGVnb3J5IEdlbmVyaWMKKworIiBQUzIgcGFnZWRldmljZSBkaWN0aW9uYXJ5IGVudHJpZXMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIFBhZ2VTaXplIE1lZGlhQ29sb3IgTWVkaWFXZWlnaHQgTWVkaWFUeXBlIElucHV0QXR0cmlidXRlcyBNYW51YWxGZWVkCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBPdXRwdXRUeXBlIE91dHB1dEF0dHJpYnV0ZXMgTnVtQ29waWVzIENvbGxhdGUgRHVwbGV4IFR1bWJsZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgU2VwYXJhdGlvbnMgSFdSZXNvbHV0aW9uIE1hcmdpbnMgTmVnYXRpdmVQcmludCBNaXJyb3JQcmludAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgQ3V0TWVkaWEgQWR2YW5jZU1lZGlhIEFkdmFuY2VEaXN0YW5jZSBJbWFnaW5nQkJveAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgUG9saWNpZXMgSW5zdGFsbCBCZWdpblBhZ2UgRW5kUGFnZSBQb2xpY3lOb3RGb3VuZCBQb2xpY3lSZXBvcnQKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIE1hbnVhbFNpemUgT3V0cHV0RmFjZVVwIEpvZworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgQmluZCBCaW5kRGV0YWlscyBCb29rbGV0IEJvb2tsZXREZXRhaWxzIENvbGxhdGVEZXRhaWxzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBEZXZpY2VSZW5kZXJpbmdJbmZvIEV4aXRKYW1SZWNvdmVyeSBGb2xkIEZvbGREZXRhaWxzIExhbWluYXRlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBNYW51YWxGZWVkVGltZW91dCBPcmllbnRhdGlvbiBPdXRwdXRQYWdlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBQb3N0UmVuZGVyaW5nRW5oYW5jZSBQb3N0UmVuZGVyaW5nRW5oYW5jZURldGFpbHMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIFByZVJlbmRlcmluZ0VuaGFuY2UgUHJlUmVuZGVyaW5nRW5oYW5jZURldGFpbHMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIFNpZ25hdHVyZSBTbGlwU2hlZXQgU3RhcGxlIFN0YXBsZURldGFpbHMgVHJpbQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgUHJvb2ZTZXQgUkVWYWx1ZSBQcmludFF1YWxpdHkgVmFsdWVzUGVyQ29sb3JDb21wb25lbnQgQW50aUFsaWFzCisKKyIgUFMyIFBETCByZXNvdXJjZSBlbnRyaWVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBTZWxlY3RvciBMYW5ndWFnZUZhbWlseSBMYW5ndWFnZVZlcnNpb24KKworIiBQUzIgaGFsZnRvbmUgZGljdGlvbmFyeSBlbnRyaWVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBIYWxmdG9uZVR5cGUgSGFsZnRvbmVOYW1lCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBBY2N1cmF0ZVNjcmVlbnMgQWN0dWFsQW5nbGUgWHNxdWFyZSBZc3F1YXJlIEFjY3VyYXRlRnJlcXVlbmN5CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBGcmVxdWVuY3kgU3BvdEZ1bmN0aW9uIEFuZ2xlIFdpZHRoIEhlaWdodCBUaHJlc2hvbGRzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBSZWRGcmVxdWVuY3kgUmVkU3BvdEZ1bmN0aW9uIFJlZEFuZ2xlIFJlZFdpZHRoIFJlZEhlaWdodAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgR3JlZW5GcmVxdWVuY3kgR3JlZW5TcG90RnVuY3Rpb24gR3JlZW5BbmdsZSBHcmVlbldpZHRoIEdyZWVuSGVpZ2h0CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBCbHVlRnJlcXVlbmN5IEJsdWVTcG90RnVuY3Rpb24gQmx1ZUFuZ2xlIEJsdWVXaWR0aCBCbHVlSGVpZ2h0CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBHcmF5RnJlcXVlbmN5IEdyYXlBbmdsZSBHcmF5U3BvdEZ1bmN0aW9uIEdyYXlXaWR0aCBHcmF5SGVpZ2h0CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBHcmF5VGhyZXNob2xkcyBCbHVlVGhyZXNob2xkcyBHcmVlblRocmVzaG9sZHMgUmVkVGhyZXNob2xkcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgVHJhbnNmZXJGdW5jdGlvbgorCisiIFBTMiBDU1IgZGljdGlvbmFyaWVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBSYW5nZUEgRGVjb2RlQSBNYXRyaXhBIFJhbmdlQUJDIERlY29kZUFCQyBNYXRyaXhBQkMgQmxhY2tQb2ludAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgUmFuZ2VMTU4gRGVjb2RlTE1OIE1hdHJpeExNTiBXaGl0ZVBvaW50IFJhbmdlREVGIERlY29kZURFRiBSYW5nZUhJSgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgUmFuZ2VERUZHIERlY29kZURFRkcgUmFuZ2VISUpLIFRhYmxlCisKKyIgUFMyIENSRCBkaWN0aW9uYXJpZXMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIENvbG9yUmVuZGVyaW5nVHlwZSBFbmNvZGVMTUIgRW5jb2RlQUJDIFJhbmdlUFFSIE1hdHJpeFBRUgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgQWJzb2x1dGVDb2xvcmltZXRyaWMgUmVsYXRpdmVDb2xvcmltZXRyaWMgU2F0dXJhdGlvbiBQZXJjZXB0dWFsCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBUcmFuc2Zvcm1QUVIgUmVuZGVyVGFibGUKKworIiBQUzIgUGF0dGVybiBkaWN0aW9uYXJ5CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBQYXR0ZXJuVHlwZSBQYWludFR5cGUgVGlsaW5nVHlwZSBYU3RlcCBZU3RlcAorCisiIFBTMiBJbWFnZSBkaWN0aW9uYXJ5CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBJbWFnZVR5cGUgSW1hZ2VNYXRyaXggTXVsdGlwbGVEYXRhU291cmNlcyBEYXRhU291cmNlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBCaXRzUGVyQ29tcG9uZW50IERlY29kZSBJbnRlcnBvbGF0ZQorCisiIFBTMiBGb250IGRpY3Rpb25hcmllcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgRm9udFR5cGUgRm9udE1hdHJpeCBGb250TmFtZSBGb250SW5mbyBMYW5ndWFnZUxldmVsIFdNb2RlIEVuY29kaW5nCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBVbmlxdWVJRCBTdHJva2VXaWR0aCBNZXRyaWNzIE1ldHJpY3MyIENEZXZQcm9jIENoYXJTdHJpbmdzIFByaXZhdGUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIEZ1bGxOYW1lIE5vdGljZSB2ZXJzaW9uIEl0YWxpY0FuZ2xlIGlzRml4ZWRQaXRjaCBVbmRlcmxpbmVQb3NpdGlvbgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgRk1hcFR5cGUgRW5jb2RpbmcgRkRlcFZlY3RvciBQcmVmRW5jIEVzY0NoYXIgU2hpZnRPdXQgU2hpZnRJbgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgV2VpZ2h0VmVjdG9yIEJsZW5kICRCbGVuZCBDSURGb250VHlwZSBzZm50cyBDSURTeXN0ZW1JbmZvIENvZGVNYXAKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIENNYXAgQ0lERm9udE5hbWUgQ0lEU3lzdGVtSW5mbyBVSURCYXNlIENJRERldlByb2MgQ0lEQ291bnQKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIENJRE1hcE9mZnNldCBGREFycmF5IEZEQnl0ZXMgR0RCeXRlcyBHbHlwaERhdGEgR2x5cGhEaWN0aW9uYXJ5CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBTREJ5dGVzIFN1YnJNYXBPZmZzZXQgU3VickNvdW50IEJ1aWxkR2x5cGggQ0lETWFwIEZJRCBNSURWZWN0b3IKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIE9yZGVyaW5nIFJlZ2lzdHJ5IFN1cHBsZW1lbnQgQ01hcE5hbWUgQ01hcFZlcnNpb24gVUlET2Zmc2V0CisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBTdWJzVmVjdG9yIFVuZGVybGluZVRoaWNrbmVzcyBGYW1pbHlOYW1lIEZvbnRCQm94IEN1ck1JRAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgV2VpZ2h0CisKKyIgUFMyIFVzZXIgcGFyYW10ZXJzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBNYXhGb250SXRlbSBNaW5Gb250Q29tcHJlc3MgTWF4VVBhdGhJdGVtIE1heEZvcm1JdGVtIE1heFBhdHRlcm5JdGVtCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBNYXhTY3JlZW5JdGVtIE1heE9wU3RhY2sgTWF4RGljdFN0YWNrIE1heEV4ZWNTdGFjayBNYXhMb2NhbFZNCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBWTVJlY2xhaW0gVk1UaHJlc2hvbGQKKworIiBQUzIgU3lzdGVtIHBhcmFtdGVycworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgU3lzdGVtUGFyYW1zUGFzc3dvcmQgU3RhcnRKb2JQYXNzd29yZCBCdWlsZFRpbWUgQnl0ZU9yZGVyIFJlYWxGb3JtYXQKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIE1heEZvbnRDYWNoZSBDdXJGb250Q2FjaGUgTWF4T3V0bGluZUNhY2hlIEN1ck91dGxpbmVDYWNoZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgTWF4VVBhdGhDYWNoZSBDdXJVUGF0aENhY2hlIE1heEZvcm1DYWNoZSBDdXJGb3JtQ2FjaGUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIE1heFBhdHRlcm5DYWNoZSBDdXJQYXR0ZXJuQ2FjaGUgTWF4U2NyZWVuU3RvcmFnZSBDdXJTY3JlZW5TdG9yYWdlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBNYXhEaXNwbGF5TGlzdCBDdXJEaXNwbGF5TGlzdAorCisiIFBTMiBMWlcgRmlsdGVycworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgUHJlZGljdG9yCisKKyIgUGFwZXIgU2l6ZSBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgbGV0dGVyIGxldHRlcnNtYWxsIGxlZ2FsIGxlZGdlciAxMXgxNyBhNCBhMyBhNHNtYWxsIGI1IG5vdGUKKworIiBQYXBlciBUcmF5IG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBsZXR0ZXJ0cmF5IGxlZ2FsdHJheSBsZWRnZXJ0cmF5IGEzdHJheSBhNHRyYXkgYjV0cmF5IDExeDE3dHJheQorCisiIFNDQyBjb21wYXRpYmlsaXR5IG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBzY2NiYXRjaCBzY2NpbnRlcmFjdGl2ZSBzZXRzY2NiYXRjaCBzZXRzY2NpbnRlcmFjdGl2ZQorCisiIFBhZ2UgZHVwbGV4aW5nIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBkdXBsZXhtb2RlIGZpcnN0c2lkZSBuZXdzaGVldCBzZXRkdXBsZXhtb2RlIHNldHR1bWJsZSB0dW1ibGUKKworIiBEZXZpY2UgY29tcGF0YWJpbGl0eSBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgZGV2ZGlzbW91bnQgZGV2Zm9ybWF0IGRldm1vdW50IGRldnN0YXR1cworICBzeW4ga2V5d29yZCBwb3N0c2NyUmVwZWF0ICAgICBkZXZmb3JhbGwKKworIiBJbWFnZXNldHRlciBjb21wYXRhYmlsaXR5IG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBhY2N1cmF0ZXNjcmVlbnMgY2hlY2tzY3JlZW4gcGFnZW1hcmdpbiBwYWdlcGFyYW1zIHNldGFjY3VyYXRlc2NyZWVucyBzZXRwYWdlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIHNldHBhZ2VtYXJnaW4gc2V0cGFnZXBhcmFtcworCisiIE1pc2MgY29tcGF0YWJpbGl0eSBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgYXBwbGV0YWxrdHlwZSBidWlsZHRpbWUgYnl0ZW9yZGVyIGNoZWNrcGFzc3dvcmQgZGVmYXVsdHRpbWVvdXRzIGRpc2tvbmxpbmUKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgZGlza3N0YXR1cyBtYW51YWxmZWVkIG1hbnVhbGZlZWR0aW1lb3V0IG1hcmdpbnMgbWlycm9ycHJpbnQgcGFnZWNvdW50CisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIHBhZ2VzdGFja29yZGVyIHByaW50ZXJuYW1lIHByb2Nlc3Njb2xvcnMgc2V0aGFyZHdhcmVpb21vZGUgc2V0am9idGltZW91dAorICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBzZXRwYWdlc3RvY2tvcmRlciBzZXRwcmludGVybmFtZSBzZXRyZXNvbHV0aW9uIGRvcHJpbnRlcnJvcnMgZG9zdGFydHBhZ2UKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgaGFyZHdhcmVpb21vZGUgaW5pdGlhbGl6ZWRpc2sgam9ibmFtZSBqb2J0aW1lb3V0IHJhbXNpemUgcmVhbGZvcm1hdCByZXNvbHV0aW9uCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIHNldGRlZmF1bHR0aW1lb3V0cyBzZXRkb3ByaW50ZXJyb3JzIHNldGRvc3RhcnRwYWdlIHNldGRvc3lzc3RhcnQKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgc2V0dXNlcmRpc2twZXJjZW50IHNvZnR3YXJlaW9tb2RlIHVzZXJkaXNrcGVyY2VudCB3YWl0dGltZW91dAorICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBzZXRzb2Z0d2FyZWlvbW9kZSBkb3N5c3N0YXJ0IGVtdWxhdGUgc2V0bWFyZ2lucyBzZXRtaXJyb3JwcmludAorCitlbmRpZiAiIFBTMiBoaWdobGlnaHRpbmcKKworaWYgcG9zdHNjcl9sZXZlbCA9PSAzCisiIFNoYWRpbmcgb3BlcmF0b3JzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIHNldHNtb290aG5lc3MgY3VycmVudHNtb290aG5lc3Mgc2hmaWxsCisKKyIgQ2xpcCBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgY2xpcHNhdmUgY2xpcHJlc3RvcmUKKworIiBQYWdlZGV2aXZlIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBzZXRwYWdlIHNldHBhZ2VwYXJhbXMKKworIiBEZXZpY2UgZ3N0YXRlIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBmaW5kY29sb3JyZW5kZXJpbmcKKworIiBGb250IG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBjb21wb3NlZm9udAorCisiIFBTIExMMyBPdXRwdXQgZGV2aWNlIHJlc291cmNlIGVudHJpZXMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIERldmljZU4gVHJhcHBpbmdEZXRhaWxzVHlwZQorCisiIFBTIExMMyBwYWdkZXZpY2UgZGljdGlvbmFyeSBlbnRyaWVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBEZWZlcnJlZE1lZGlhU2VsZWN0aW9uIEltYWdlU2hpZnQgSW5zZXJ0U2hlZXQgTGVhZGluZ0VkZ2UgTWF4U2VwYXJhdGlvbnMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIE1lZGlhQ2xhc3MgTWVkaWFQb3NpdGlvbiBPdXRwdXREZXZpY2UgUGFnZURldmljZU5hbWUgUGFnZU9mZnNldCBQcm9jZXNzQ29sb3JNb2RlbAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgUm9sbEZlZE1lZGlhIFNlcGFyYXRpb25Db2xvck5hbWVzIFNlcGFyYXRpb25PcmRlciBUcmFwcGluZyBUcmFwcGluZ0RldGFpbHMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIFRyYXlTd2l0Y2ggVXNlQ0lFQ29sb3IKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIENvbG9yYW50RGV0YWlscyBDb2xvcmFudE5hbWUgQ29sb3JhbnRUeXBlIE5ldXRyYWxEZW5zaXR5IFRyYXBwaW5nT3JkZXIKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIENvbG9yYW50U2V0TmFtZQorCisiIFBTIExMMyB0cmFwcGluZyBkaWN0aW9uYXJ5IGVudHJpZXMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIEJsYWNrQ29sb3JMaW1pdCBCbGFja0RlbnNpdHlMaW1pdCBCbGFja1dpZHRoIENvbG9yYW50Wm9uZURldGFpbHMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIFNsaWRpbmdUcmFwTGltaXQgU3RlcExpbWl0IFRyYXBDb2xvclNjYWxpbmcgVHJhcFNldE5hbWUgVHJhcFdpZHRoCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBJbWFnZVJlc29sdXRpb24gSW1hZ2VUb09iamVjdFRyYXBwaW5nIEltYWdlVHJhcFBsYWNlbWVudAorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgU3RlcExpbWl0IFRyYXBDb2xvclNjYWxpbmcgRW5hYmxlZCBJbWFnZUludGVybmFsVHJhcHBpbmcKKworIiBQUyBMTDMgZmlsdGVycyBhbmQgZW50cmllcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgUmV1c2FibGVTdHJlYW1EZWNvZGUgQ2xvc2VTb3VyY2UgQ2xvc2VUYXJnZXQgVW5pdFNpemUgTG93Qml0Rmlyc3QKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIEZsYXRlRW5jb2RlIEZsYXRlRGVjb2RlIERlY29kZVBhcmFtcyBJbnRlbnQgQXN5bmNSZWFkCisKKyIgUFMgTEwzIGhhbGZ0b25lIGRpY3Rpb25hcnkgZW50cmllcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgSGVpZ2h0MiBXaWR0aDIKKworIiBQUyBMTDMgZnVuY3Rpb24gZGljdGlvbmFyeSBlbnRyaWVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBGdW5jdGlvblR5cGUgRG9tYWluIFJhbmdlIE9yZGVyIEJpdHNQZXJTYW1wbGUgRW5jb2RlIFNpemUgQzAgQzEgTgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgRnVuY3Rpb25zIEJvdW5kcworCisiIFBTIExMMyBpbWFnZSBkaWN0aW9uYXJ5IGVudHJpZXMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIEludGVybGVhdmVUeXBlIE1hc2tEaWN0IERhdGFEaWN0IE1hc2tDb2xvcgorCisiIFBTIExMMyBQYXR0ZXJuIGFuZCBzaGFkaW5nIGRpY3Rpb25hcnkgZW50cmllcworICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgU2hhZGluZyBTaGFkaW5nVHlwZSBCYWNrZ3JvdW5kIENvbG9yU3BhY2UgQ29vcmRzIEV4dGVuZCBGdW5jdGlvbgorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgVmVydGljZXNQZXJSb3cgQml0c1BlckNvb3JkaW5hdGUgQml0c1BlckZsYWcKKworIiBQUyBMTDMgaW1hZ2UgZGljdGlvbmFyeSBlbnRyaWVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBYT3JpZ2luIFlPcmlnaW4gVW5wYWludGVkUGF0aCBQaXhlbENvcHkKKworIiBQUyBMTDMgY29sb3JyZW5kZXJpbmcgcHJvY2VkdXJlcworICBzeW4ga2V5d29yZCBwb3N0c2NyUHJvY2VkdXJlICBHZXRIYWxmdG9uZU5hbWUgR2V0UGFnZURldmljZU5hbWUgR2V0U3Vic3RpdHV0ZUNSRAorCisiIFBTIExMMyBDSURJbml0IHByb2NlZHVyZXMKKyAgc3luIGtleXdvcmQgcG9zdHNjclByb2NlZHVyZSAgYmVnaW5iZmNoYXIgYmVnaW5iZnJhbmdlIGJlZ2luY2lkY2hhciBiZWdpbmNpZHJhbmdlIGJlZ2luY21hcCBiZWdpbmNvZGVzcGFjZXJhbmdlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JQcm9jZWR1cmUgIGJlZ2lubm90ZGVmY2hhciBiZWdpbm5vdGRlZnJhbmdlIGJlZ2lucmVhcnJhbmdlZGZvbnQgYmVnaW51c2VtYXRyaXgKKyAgc3luIGtleXdvcmQgcG9zdHNjclByb2NlZHVyZSAgZW5kYmZjaGFyIGVuZGJmcmFuZ2UgZW5kY2lkY2hhciBlbmRjaWRyYW5nZSBlbmRjbWFwIGVuZGNvZGVzcGFjZXJhbmdlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JQcm9jZWR1cmUgIGVuZG5vdGRlZmNoYXIgZW5kbm90ZGVmcmFuZ2UgZW5kcmVhcnJhbmdlZGZvbnQgZW5kdXNlbWF0cml4CisgIHN5biBrZXl3b3JkIHBvc3RzY3JQcm9jZWR1cmUgIFN0YXJ0RGF0YSB1c2Vmb250IHVzZWNtcAorCisiIFBTIExMMyBUcmFwcGluZyBwcm9jZWR1cmVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JQcm9jZWR1cmUgIHNldHRyYXBwYXJhbXMgY3VycmVudHRyYXBwYXJhbXMgc2V0dHJhcHpvbmUKKworIiBQUyBMTDMgQml0bWFwRm9udEluaXQgcHJvY2VkdXJlcworICBzeW4ga2V5d29yZCBwb3N0c2NyUHJvY2VkdXJlICByZW1vdmVhbGwgcmVtb3ZlZ2x5cGhzCisKKyIgUFMgTEwzIEZvbnQgbmFtZXMKKyAgaWYgZXhpc3RzKCJwb3N0c2NyX2ZvbnRzIikKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEFsYmVydHVzTVQgQWxiZXJ0dXNNVC1JdGFsaWMgQWxiZXJ0dXNNVC1MaWdodCBBcHBsZS1DaGFuY2VyeSBBcHBsZS1DaGFuY2VyeUNFCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBBbnRpcXVlT2xpdmUtUm9tYW4gQW50aXF1ZU9saXZlLUl0YWxpYyBBbnRpcXVlT2xpdmUtQm9sZCBBbnRpcXVlT2xpdmUtQ29tcGFjdAorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgQW50aXF1ZU9saXZlQ0UtUm9tYW4gQW50aXF1ZU9saXZlQ0UtSXRhbGljIEFudGlxdWVPbGl2ZUNFLUJvbGQgQW50aXF1ZU9saXZlQ0UtQ29tcGFjdAorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgQXJpYWxNVCBBcmlhbC1JdGFsaWNNVCBBcmlhbC1MaWdodE1UIEFyaWFsLUJvbGRNVCBBcmlhbC1Cb2xkSXRhbGljTVQKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEFyaWFsQ0UgQXJpYWxDRS1JdGFsaWMgQXJpYWxDRS1MaWdodCBBcmlhbENFLUJvbGQgQXJpYWxDRS1Cb2xkSXRhbGljCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBBdmFudEdhcmRlLUJvb2sgQXZhbnRHYXJkZS1Cb29rT2JsaXF1ZSBBdmFudEdhcmRlLURlbWkgQXZhbnRHYXJkZS1EZW1pT2JsaXF1ZQorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgQXZhbnRHYXJkZUNFLUJvb2sgQXZhbnRHYXJkZUNFLUJvb2tPYmxpcXVlIEF2YW50R2FyZGVDRS1EZW1pIEF2YW50R2FyZGVDRS1EZW1pT2JsaXF1ZQorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgQm9kb25pIEJvZG9uaS1JdGFsaWMgQm9kb25pLUJvbGQgQm9kb25pLUJvbGRJdGFsaWMgQm9kb25pLVBvc3RlciBCb2RvbmktUG9zdGVyQ29tcHJlc3NlZAorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgQm9kb25pQ0UgQm9kb25pQ0UtSXRhbGljIEJvZG9uaUNFLUJvbGQgQm9kb25pQ0UtQm9sZEl0YWxpYyBCb2RvbmlDRS1Qb3N0ZXIgQm9kb25pQ0UtUG9zdGVyQ29tcHJlc3NlZAorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgQm9va21hbi1MaWdodCBCb29rbWFuLUxpZ2h0SXRhbGljIEJvb2ttYW4tRGVtaSBCb29rbWFuLURlbWlJdGFsaWMKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEJvb2ttYW5DRS1MaWdodCBCb29rbWFuQ0UtTGlnaHRJdGFsaWMgQm9va21hbkNFLURlbWkgQm9va21hbkNFLURlbWlJdGFsaWMKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIENhcnRhIENoaWNhZ28gQ2hpY2Fnb0NFIENsYXJlbmRvbiBDbGFyZW5kb24tTGlnaHQgQ2xhcmVuZG9uLUJvbGQKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIENsYXJlbmRvbkNFIENsYXJlbmRvbkNFLUxpZ2h0IENsYXJlbmRvbkNFLUJvbGQgQ29vcGVyQmxhY2sgQ29vcGVyQmxhY2stSXRhbGljCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBDb3BwZXJwbGF0ZS1UaGlydHlUd29CQyBDb3BwZXJQbGF0ZS1UaGlydHlUaHJlZUJDIENvcm9uZXQtUmVndWxhciBDb3JvbmV0Q0UtUmVndWxhcgorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgQ291cmllckNFIENvdXJpZXJDRS1PYmxpcXVlIENvdXJpZXJDRS1Cb2xkIENvdXJpZXJDRS1Cb2xkT2JsaXF1ZQorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgRXVyb3N0aWxlIEV1cm9zdGlsZS1Cb2xkIEV1cm9zdGlsZS1FeHRlbmRlZFR3byBFdXJvc3RpbGUtQm9sZEV4dGVuZGVkVHdvCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBFdXJvc3RpbGUgRXVyb3N0aWxlQ0UtQm9sZCBFdXJvc3RpbGVDRS1FeHRlbmRlZFR3byBFdXJvc3RpbGVDRS1Cb2xkRXh0ZW5kZWRUd28KKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEdlbmV2YSBHZW5ldmFDRSBHaWxsU2FucyBHaWxsU2Fucy1JdGFsaWMgR2lsbFNhbnMtQm9sZCBHaWxsU2Fucy1Cb2xkSXRhbGljIEdpbGxTYW5zLUJvbGRDb25kZW5zZWQKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEdpbGxTYW5zLUxpZ2h0IEdpbGxTYW5zLUxpZ2h0SXRhbGljIEdpbGxTYW5zLUV4dHJhQm9sZAorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgR2lsbFNhbnNDRS1Sb21hbiBHaWxsU2Fuc0NFLUl0YWxpYyBHaWxsU2Fuc0NFLUJvbGQgR2lsbFNhbnNDRS1Cb2xkSXRhbGljIEdpbGxTYW5zQ0UtQm9sZENvbmRlbnNlZAorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgR2lsbFNhbnNDRS1MaWdodCBHaWxsU2Fuc0NFLUxpZ2h0SXRhbGljIEdpbGxTYW5zQ0UtRXh0cmFCb2xkCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBHb3VkeSBHb3VkeS1JdGFsaWMgR291ZHktQm9sZCBHb3VkeS1Cb2xkSXRhbGljIEdvdWR5LUV4dHJhQm91bGQKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEhlbHZldGljYUNFIEhlbHZldGljYUNFLU9ibGlxdWUgSGVsdmV0aWNhQ0UtQm9sZCBIZWx2ZXRpY2FDRS1Cb2xkT2JsaXF1ZQorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgSGVsdmV0aWNhLUNvbmRlbnNlZCBIZWx2ZXRpY2EtQ29uZGVuc2VkLU9ibGlxdWUgSGVsdmV0aWNhLUNvbmRlbnNlZC1Cb2xkIEhlbHZldGljYS1Db25kZW5zZWQtQm9sZE9ibAorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgSGVsdmV0aWNhQ0UtQ29uZGVuc2VkIEhlbHZldGljYUNFLUNvbmRlbnNlZC1PYmxpcXVlIEhlbHZldGljYUNFLUNvbmRlbnNlZC1Cb2xkCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBIZWx2ZXRpY2FDRS1Db25kZW5zZWQtQm9sZE9ibCBIZWx2ZXRpY2EtTmFycm93IEhlbHZldGljYS1OYXJyb3ctT2JsaXF1ZSBIZWx2ZXRpY2EtTmFycm93LUJvbGQKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEhlbHZldGljYS1OYXJyb3ctQm9sZE9ibGlxdWUgSGVsdmV0aWNhQ0UtTmFycm93IEhlbHZldGljYUNFLU5hcnJvdy1PYmxpcXVlIEhlbHZldGljYUNFLU5hcnJvdy1Cb2xkCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBIZWx2ZXRpY2FDRS1OYXJyb3ctQm9sZE9ibGlxdWUgSG9lZmxlclRleHQtUmVndWxhciBIb2VmbGVyVGV4dC1JdGFsaWMgSG9lZmxlclRleHQtQmxhY2sKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEhvZWZsZXJUZXh0LUJsYWNrSXRhbGljIEhvZWZsZXJUZXh0LU9ybmFtZW50cyBIb2VmbGVyVGV4dENFLVJlZ3VsYXIgSG9lZmxlclRleHRDRS1JdGFsaWMKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEhvZWZsZXJUZXh0Q0UtQmxhY2sgSG9lZmxlclRleHRDRS1CbGFja0l0YWxpYworICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgSm9hbm5hTVQgSm9hbm5hTVQtSXRhbGljIEpvYW5uYU1ULUJvbGQgSm9hbm5hTVQtQm9sZEl0YWxpYworICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgSm9hbm5hTVRDRSBKb2FubmFNVENFLUl0YWxpYyBKb2FubmFNVENFLUJvbGQgSm9hbm5hTVRDRS1Cb2xkSXRhbGljCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBMZXR0ZXJHb3RoaWMgTGV0dGVyR290aGljLVNsYW50ZWQgTGV0dGVyR290aGljLUJvbGQgTGV0dGVyR290aGljLUJvbGRTbGFudGVkCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBMZXR0ZXJHb3RoaWNDRSBMZXR0ZXJHb3RoaWNDRS1TbGFudGVkIExldHRlckdvdGhpY0NFLUJvbGQgTGV0dGVyR290aGljQ0UtQm9sZFNsYW50ZWQKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEx1YmFsaW5HcmFwaC1Cb29rIEx1YmFsaW5HcmFwaC1Cb29rT2JsaXF1ZSBMdWJhbGluR3JhcGgtRGVtaSBMdWJhbGluR3JhcGgtRGVtaU9ibGlxdWUKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIEx1YmFsaW5HcmFwaENFLUJvb2sgTHViYWxpbkdyYXBoQ0UtQm9va09ibGlxdWUgTHViYWxpbkdyYXBoQ0UtRGVtaSBMdWJhbGluR3JhcGhDRS1EZW1pT2JsaXF1ZQorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgTWFyaWdvbGQgTW9uYWNvIE1vbmFjb0NFIE1vbmFMaXNhLVJlY3V0IE94Zm9yZCBTeW1ib2wgVGVrdG9uCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBOZXdDZW5udHVyeVNjaGxiay1Sb21hbiBOZXdDZW50dXJ5U2NobGJrLUl0YWxpYyBOZXdDZW50dXJ5U2NobGJrLUJvbGQgTmV3Q2VudHVyeVNjaGxiay1Cb2xkSXRhbGljCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBOZXdDZW50dXJ5U2NobGJrQ0UtUm9tYW4gTmV3Q2VudHVyeVNjaGxia0NFLUl0YWxpYyBOZXdDZW50dXJ5U2NobGJrQ0UtQm9sZAorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgTmV3Q2VudHVyeVNjaGxia0NFLUJvbGRJdGFsaWMgTmV3WW9yayBOZXdZb3JrQ0UKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIE9wdGltYSBPcHRpbWEtSXRhbGljIE9wdGltYS1Cb2xkIE9wdGltYS1Cb2xkSXRhbGljCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBPcHRpbWFDRSBPcHRpbWFDRS1JdGFsaWMgT3B0aW1hQ0UtQm9sZCBPcHRpbWFDRS1Cb2xkSXRhbGljCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBQYWxhdGluby1Sb21hbiBQYWxhdGluby1JdGFsaWMgUGFsYXRpbm8tQm9sZCBQYWxhdGluby1Cb2xkSXRhbGljCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBQYWxhdGlub0NFLVJvbWFuIFBhbGF0aW5vQ0UtSXRhbGljIFBhbGF0aW5vQ0UtQm9sZCBQYWxhdGlub0NFLUJvbGRJdGFsaWMKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIFN0ZW1wZWxHYXJhbW9uZC1Sb21hbiBTdGVtcGVsR2FyYW1vbmQtSXRhbGljIFN0ZW1wZWxHYXJhbW9uZC1Cb2xkIFN0ZW1wZWxHYXJhbW9uZC1Cb2xkSXRhbGljCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBTdGVtcGVsR2FyYW1vbmRDRS1Sb21hbiBTdGVtcGVsR2FyYW1vbmRDRS1JdGFsaWMgU3RlbXBlbEdhcmFtb25kQ0UtQm9sZCBTdGVtcGVsR2FyYW1vbmRDRS1Cb2xkSXRhbGljCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBUaW1lc0NFLVJvbWFuIFRpbWVzQ0UtSXRhbGljIFRpbWVzQ0UtQm9sZCBUaW1lc0NFLUJvbGRJdGFsaWMKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIFRpbWVzTmV3Um9tYW5QU01UIFRpbWVzTmV3Um9tYW5QUy1JdGFsaWNNVCBUaW1lc05ld1JvbWFuUFMtQm9sZE1UIFRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljTVQKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIFRpbWVzTmV3Um9tYW5DRSBUaW1lc05ld1JvbWFuQ0UtSXRhbGljIFRpbWVzTmV3Um9tYW5DRS1Cb2xkIFRpbWVzTmV3Um9tYW5DRS1Cb2xkSXRhbGljCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBVbml2ZXJzIFVuaXZlcnMtT2JsaXF1ZSBVbml2ZXJzLUJvbGQgVW5pdmVycy1Cb2xkT2JsaXF1ZQorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgVW5pdmVyc0NFLU1lZGl1bSBVbml2ZXJzQ0UtT2JsaXF1ZSBVbml2ZXJzQ0UtQm9sZCBVbml2ZXJzQ0UtQm9sZE9ibGlxdWUKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIFVuaXZlcnMtTGlnaHQgVW5pdmVycy1MaWdodE9ibGlxdWUgVW5pdmVyc0NFLUxpZ2h0IFVuaXZlcnNDRS1MaWdodE9ibGlxdWUKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIFVuaXZlcnMtQ29uZGVuc2VkIFVuaXZlcnMtQ29uZGVuc2VkT2JsaXF1ZSBVbml2ZXJzLUNvbmRlbnNlZEJvbGQgVW5pdmVycy1Db25kZW5zZWRCb2xkT2JsaXF1ZQorICAgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCBjb250YWluZWQgVW5pdmVyc0NFLUNvbmRlbnNlZCBVbml2ZXJzQ0UtQ29uZGVuc2VkT2JsaXF1ZSBVbml2ZXJzQ0UtQ29uZGVuc2VkQm9sZCBVbml2ZXJzQ0UtQ29uZGVuc2VkQm9sZE9ibGlxdWUKKyAgICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgY29udGFpbmVkIFVuaXZlcnMtRXh0ZW5kZWQgVW5pdmVycy1FeHRlbmRlZE9ibCBVbml2ZXJzLUJvbGRFeHQgVW5pdmVycy1Cb2xkRXh0T2JsCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBVbml2ZXJzQ0UtRXh0ZW5kZWQgVW5pdmVyc0NFLUV4dGVuZGVkT2JsIFVuaXZlcnNDRS1Cb2xkRXh0IFVuaXZlcnNDRS1Cb2xkRXh0T2JsCisgICAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50IGNvbnRhaW5lZCBXaW5nZGluZ3MtUmVndWxhciBaYXBmQ2hhbmNlcnktTWVkaXVtSXRhbGljIFphcGZDaGFuY2VyeUNFLU1lZGl1bUl0YWxpYyBaYXBmRGluZ0JhdHMKKyAgZW5kaWYgIiBGb250IG5hbWVzCisKK2VuZGlmICIgUFMgTEwzIGhpZ2hsaWdodGluZworCisKK2lmIGV4aXN0cygicG9zdHNjcl9naG9zdHNjcmlwdCIpCisgICIgR1MgZ3N0YXRlIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAuc2V0YWNjdXJhdGVjdXJ2ZXMgLmN1cnJlbnRhY2N1cmF0ZWN1cnZlcyAuc2V0Y2xpcG91dHNpZGUKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgLnNldGRhc2hhZGFwdCAuY3VycmVudGRhc2hhZGFwdCAuc2V0ZGVmYXVsdG1hdHJpeCAuc2V0ZG90bGVuZ3RoCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIC5jdXJyZW50ZG90bGVuZ3RoIC5zZXRmaWxsYWRqdXN0MiAuY3VycmVudGZpbGxhZGp1c3QyCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIC5jdXJyZW50Y2xpcG91dHNpZGUgLnNldGN1cnZlam9pbiAuY3VycmVudGN1cnZlam9pbgorICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAuc2V0YmxlbmRtb2RlIC5jdXJyZW50YmxlbmRtb2RlIC5zZXRvcGFjaXR5YWxwaGEgLmN1cnJlbnRvcGFjaXR5YWxwaGEgLnNldHNoYXBlYWxwaGEgLmN1cnJlbnRzaGFwZWFscGhhCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIC5zZXRsaW1pdGNsYW1wIC5jdXJyZW50bGltaXRjbGFtcCAuc2V0b3ZlcnByaW50bW9kZSAuY3VycmVudG92ZXJwcmludG1vZGUKKworICAiIEdTIHBhdGggb3BlcmF0b3JzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIC5kYXNocGF0aCAucmVjdGFwcGVuZAorCisgICIgR1MgcGFpbnRpbmcgb3BlcmF0b3JzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIC5zZXRyYXN0ZXJvcCAuY3VycmVudHJhc3Rlcm9wIC5zZXRzb3VyY2V0cmFuc3BhcmVudAorICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAuc2V0dGV4dHVyZXRyYW5zcGFyZW50IC5jdXJyZW50dGV4dHVyZXRyYW5zcGFyZW50CisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIC5jdXJyZW50c291cmNldHJhbnNwYXJlbnQKKworICAiIEdTIGNoYXJhY3RlciBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgLmNoYXJib3hwYXRoIC50eXBlMWV4ZWNjaGFyICVUeXBlMUJ1aWxkQ2hhciAlVHlwZTFCdWlsZEdseXBoCisKKyAgIiBHUyBtYXRoZW1hdGljYWwgb3BlcmF0b3JzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JNYXRoT3BlcmF0b3IgYXJjY29zIGFyY3NpbgorCisgICIgR1MgZGljdGlvbmFyeSBvcGVyYXRvcnMKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgLmRpY3R0b21hcmsgLmZvcmNlcHV0IC5mb3JjZXVuZGVmIC5rbm93bmdldCAuc2V0bWF4bGVuZ3RoCisKKyAgIiBHUyBieXRlIGFuZCBzdHJpbmcgb3BlcmF0b3JzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIC50eXBlMWVuY3J5cHQgLnR5cGUxZGVjcnlwdAorICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAuYnl0ZXN0cmluZyAubmFtZXN0cmluZyAuc3RyaW5nbWF0Y2gKKworICAiIEdTIHJlbGF0aW9uYWwgb3BlcmF0b3JzIChzZWVtIGxpa2UgbWF0aCBvbmVzIHRvIG1lISkKKyAgc3luIGtleXdvcmQgcG9zdHNjck1hdGhPcGVyYXRvciBtYXggbWluCisKKyAgIiBHUyBmaWxlIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBmaW5kbGliZmlsZSB1bnJlYWQgd3JpdGVwcG1maWxlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIC5maWxlbmFtZSAuZmlsZXBvc2l0aW9uIC5wZWVrc3RyaW5nIC51bnJlYWQKKworICAiIEdTIHZtIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAuZm9yZ2V0c2F2ZQorCisgICIgR1MgZGV2aWNlIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBjb3B5ZGV2aWNlIC5nZXRkZXZpY2UgbWFrZWltYWdlZGV2aWNlIG1ha2V3b3JkaW1hZ2VkZXZpY2UgY29weXNjYW5saW5lcworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBzZXRkZXZpY2UgY3VycmVudGRldmljZSBnZXRkZXZpY2Vwcm9wcyBwdXRkZXZpY2Vwcm9wcyBmbHVzaHBhZ2UKKyAgc3luIGtleXdvcmQgcG9zdHNjck9wZXJhdG9yICAgZmluZGRldmljZSBmaW5kcHJvdG9kZXZpY2UgLmdldGJpdHNyZWN0CisKKyAgIiBHUyBtaXNjIG9wZXJhdG9ycworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICBnZXRlbnYgLm1ha2VvcGVyYXRvciAuc2V0ZGVidWcgLm9zZXJybm8gLm9zZXJyb3IgLmV4ZWNuCisKKyAgIiBHUyByZW5kZXJpbmcgc3RhY2sgb3BlcmF0b3JzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIC5iZWdpbnRyYW5zcGFyZW5jeWdyb3VwIC5kaXNjYXJkdHJhbnNwYXJlbmN5Z3JvdXAgLmVuZHRyYW5zcGFyZW5jeWdyb3VwCisgIHN5biBrZXl3b3JkIHBvc3RzY3JPcGVyYXRvciAgIC5iZWdpbnRyYW5zcGFyZW5jeW1hc2sgLmRpc2NhcmR0cmFuc3BhcmVuY3ltYXNrIC5lbmR0cmFuc3BhcmVuY3ltYXNrIC5pbml0dHJhbnNwYXJlbmN5bWFzaworICBzeW4ga2V5d29yZCBwb3N0c2NyT3BlcmF0b3IgICAuc2V0dGV4dGtub2Nrb3V0IC5jdXJyZW50dGV4dGtub2Nrb3V0CisKKyAgIiBHUyBmaWx0ZXJzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBCQ1BFbmNvZGUgQkNQRGVjb2RlIGVleGVjRW5jb2RlIGVleGVjRGVjb2RlIFBDWERlY29kZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgUGl4ZWxEaWZmZXJlbmNlRW5jb2RlIFBpeGVsRGlmZmVyZW5jZURlY29kZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgUE5HUHJlZGljdG9yRGVjb2RlIFRCQ1BFbmNvZGUgVEJDUERlY29kZSB6bGliRW5jb2RlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCB6bGliRGVjb2RlIFBOR1ByZWRpY3RvckVuY29kZSBQRkJEZWNvZGUKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIE1ENUVuY29kZQorCisgICIgR1MgZmlsdGVyIGtleXMKKyAgc3luIGtleXdvcmQgcG9zdHNjckNvbnN0YW50ICAgY29udGFpbmVkIEluaXRpYWxDb2RlTGVuZ3RoIEZpcnN0Qml0TG93T3JkZXIgQmxvY2tEYXRhIERlY29kZWRCeXRlQWxpZ24KKworICAiIEdTIGRldmljZSBwYXJhbWV0ZXJzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBCaXRzUGVyUGl4ZWwgLkhXTWFyZ2lucyBIV1NpemUgTmFtZSBHcmF5VmFsdWVzCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBDb2xvclZhbHVlcyBUZXh0QWxwaGFCaXRzIEdyYXBoaWNzQWxwaGFCaXRzIEJ1ZmZlclNwYWNlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBPcGVuT3V0cHV0RmlsZSBQYWdlQ291bnQgQmFuZEhlaWdodCBCYW5kV2lkdGggQmFuZEJ1ZmZlclNwYWNlCisgIHN5biBrZXl3b3JkIHBvc3RzY3JDb25zdGFudCAgIGNvbnRhaW5lZCBWaWV3ZXJQcmVQcm9jZXNzIEdyZWVuVmFsdWVzIEJsdWVWYWx1ZXMgT3V0cHV0RmlsZQorICBzeW4ga2V5d29yZCBwb3N0c2NyQ29uc3RhbnQgICBjb250YWluZWQgTWF4Qml0bWFwIFJlZFZhbHVlcworCitlbmRpZiAiIEdob3N0U2NyaXB0IGhpZ2hsaWdodGluZworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9wb3N0c2NyX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3Bvc3RzY3Jfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgcG9zdHNjckNvbW1lbnQJCUNvbW1lbnQKKworICBIaUxpbmsgcG9zdHNjckNvbnN0YW50CUNvbnN0YW50CisgIEhpTGluayBwb3N0c2NyU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHBvc3RzY3JBU0NJSVN0cmluZwlwb3N0c2NyU3RyaW5nCisgIEhpTGluayBwb3N0c2NySGV4U3RyaW5nCXBvc3RzY3JTdHJpbmcKKyAgSGlMaW5rIHBvc3RzY3JBU0NJSTg1U3RyaW5nCXBvc3RzY3JTdHJpbmcKKyAgSGlMaW5rIHBvc3RzY3JOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgcG9zdHNjckludGVnZXIJCXBvc3RzY3JOdW1iZXIKKyAgSGlMaW5rIHBvc3RzY3JIZXgJCXBvc3RzY3JOdW1iZXIKKyAgSGlMaW5rIHBvc3RzY3JSYWRpeAkJcG9zdHNjck51bWJlcgorICBIaUxpbmsgcG9zdHNjckZsb2F0CQlGbG9hdAorICBIaUxpbmsgcG9zdHNjckJvb2xlYW4JCUJvb2xlYW4KKworICBIaUxpbmsgcG9zdHNjcklkZW50aWZpZXIJSWRlbnRpZmllcgorICBIaUxpbmsgcG9zdHNjclByb2NlZHVyZQlGdW5jdGlvbgorCisgIEhpTGluayBwb3N0c2NyTmFtZQkJU3RhdGVtZW50CisgIEhpTGluayBwb3N0c2NyQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHBvc3RzY3JSZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgcG9zdHNjck9wZXJhdG9yCU9wZXJhdG9yCisgIEhpTGluayBwb3N0c2NyTWF0aE9wZXJhdG9yCXBvc3RzY3JPcGVyYXRvcgorICBIaUxpbmsgcG9zdHNjckxvZ2ljYWxPcGVyYXRvciBwb3N0c2NyT3BlcmF0b3IKKyAgSGlMaW5rIHBvc3RzY3JCaW5hcnlPcGVyYXRvcglwb3N0c2NyT3BlcmF0b3IKKworICBIaUxpbmsgcG9zdHNjckRTQ0NvbW1lbnQJU3BlY2lhbENvbW1lbnQKKyAgSGlMaW5rIHBvc3RzY3JTcGVjaWFsQ2hhcglTcGVjaWFsQ2hhcgorCisgIEhpTGluayBwb3N0c2NyVG9kbwkJVG9kbworCisgIEhpTGluayBwb3N0c2NyRXJyb3IJCUVycm9yCisgIEhpTGluayBwb3N0c2NyU3BlY2lhbENoYXJFcnJvciBwb3N0c2NyRXJyb3IKKyAgSGlMaW5rIHBvc3RzY3JBU0NJSTg1Q2hhckVycm9yIHBvc3RzY3JFcnJvcgorICBIaUxpbmsgcG9zdHNjckhleENoYXJFcnJvcglwb3N0c2NyRXJyb3IKKyAgSGlMaW5rIHBvc3RzY3JJZGVudGlmaWVyRXJyb3IgcG9zdHNjckVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInBvc3RzY3IiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9wb3YudmltIGIvcnVudGltZS9zeW50YXgvcG92LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBiYjMxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcG92LnZpbQpAQCAtMCwwICsxLDE0NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgVGhpcyBpcyBhIEdFTkVSQVRFRCBGSUxFLiBQbGVhc2UgYWx3YXlzIHJlZmVyIHRvIHNvdXJjZSBmaWxlIGF0IHRoZSBVUkkgYmVsb3cuCisiIExhbmd1YWdlOiBQb1YtUmF5KHRtKSAzLjUgU2NlbmUgRGVzY3JpcHRpb24gTGFuZ3VhZ2UKKyIgTWFpbnRhaW5lcjogRGF2aWQgTmVcdntjfWFzIChZZXRpKSA8eWV0aUBwaHlzaWNzLm11bmkuY3o+CisiIExhc3QgQ2hhbmdlOiAyMDAzIEFwciAyNQorIiBVUkw6IGh0dHA6Ly9waHlzaWNzLm11bmkuY3ovfnlldGkvZG93bmxvYWQvc3ludGF4L3Bvdi52aW0KKyIgUmVxdWlyZWQgVmltIFZlcnNpb246IDYuMAorCisiIFNldHVwCitpZiB2ZXJzaW9uID49IDYwMAorICAiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAorICBpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorICBlbmRpZgorZWxzZQorICAiIENyb2FrIHdoZW4gYW4gb2xkIFZpbSBpcyBzb3VyY2luZyB1cy4KKyAgZWNobyAiU29ycnksIGJ1dCB0aGlzIHN5bnRheCBmaWxlIHJlbGllcyBvbiBWaW0gNiBmZWF0dXJlcy4gIEVpdGhlciB1cGdyYWRlIFZpbSBvciB1c2UgYSB2ZXJzaW9uIG9mICIgLiBleHBhbmQoIjxzZmlsZT46dDpyIikgLiAiIHN5bnRheCBmaWxlIGFwcHJvcHJpYXRlIGZvciBWaW0gIiAuIHZlcnNpb24vMTAwIC4gIi4iIC4gdmVyc2lvbiAlMTAwIC4gIi4iCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgbWF0Y2gKKworIiBUb3AgbGV2ZWwgc3R1ZmYKK3N5biBrZXl3b3JkIHBvdkNvbW1hbmRzIGdsb2JhbF9zZXR0aW5ncworc3luIGtleXdvcmQgcG92T2JqZWN0cyBhcnJheSBhdG1vc3BoZXJlIGJhY2tncm91bmQgYmljdWJpY19wYXRjaCBibG9iIGJveCBjYW1lcmEgY29tcG9uZW50IGNvbmUgY3ViaWMgY3lsaW5kZXIgZGlzYyBmb2cgaGVpZ2h0X2ZpZWxkIGlzb3N1cmZhY2UganVsaWFfZnJhY3RhbCBsYXRoZSBsaWdodF9ncm91cCBsaWdodF9zb3VyY2UgbWVzaCBtZXNoMiBvYmplY3QgcGFyYW1ldHJpYyBwYXR0ZXJuIHBob3RvbnMgcGxhbmUgcG9seSBwb2x5Z29uIHByaXNtIHF1YWRyaWMgcXVhcnRpYyByYWluYm93IHNreV9zcGhlcmUgc21vb3RoX3RyaWFuZ2xlIHNvciBzcGhlcmUgc3BoZXJlX3N3ZWVwIHNwbGluZSBzdXBlcmVsbGlwc29pZCB0ZXh0IHRvcnVzIHRyaWFuZ2xlCitzeW4ga2V5d29yZCBwb3ZDU0cgY2xpcHBlZF9ieSBjb21wb3NpdGUgY29udGFpbmVkX2J5IGRpZmZlcmVuY2UgaW50ZXJzZWN0aW9uIG1lcmdlIHVuaW9uCitzeW4ga2V5d29yZCBwb3ZBcHBlYXJhbmNlIGludGVyaW9yIG1hdGVyaWFsIG1lZGlhIHRleHR1cmUgaW50ZXJpb3JfdGV4dHVyZSB0ZXh0dXJlX2xpc3QKK3N5biBrZXl3b3JkIHBvdkdsb2JhbFNldHRpbmdzIGFtYmllbnRfbGlnaHQgYXNzdW1lZF9nYW1tYSBjaGFyc2V0IGhmX2dyYXlfMTYgaXJpZF93YXZlbGVuZ3RoIG1heF9pbnRlcnNlY3Rpb25zIG1heF90cmFjZV9sZXZlbCBudW1iZXJfb2Zfd2F2ZXMgcmFkaW9zaXR5IG5vaXNlX2dlbmVyYXRvcgorc3luIGtleXdvcmQgcG92VHJhbnNmb3JtIGludmVyc2UgbWF0cml4IHJvdGF0ZSBzY2FsZSB0cmFuc2xhdGUgdHJhbnNmb3JtCisKKyIgRGVzY3JpcHRvcnMKK3N5biBrZXl3b3JkIHBvdkRlc2NyaXB0b3JzIGZpbmlzaCBub3JtYWwgcGlnbWVudCB1dl9tYXBwaW5nIHV2X3ZlY3RvcnMgdmVydGV4X3ZlY3RvcnMKK3N5biBrZXl3b3JkIHBvdkRlc2NyaXB0b3JzIGFkY19iYWlsb3V0IGFsd2F5c19zYW1wbGUgYnJpZ2h0bmVzcyBjb3VudCBlcnJvcl9ib3VuZCBkaXN0YW5jZV9tYXhpbXVtIGdyYXlfdGhyZXNob2xkIGxvYWRfZmlsZSBsb3dfZXJyb3JfZmFjdG9yIG1heF9zYW1wbGUgbWVkaWEgbWluaW11bV9yZXVzZSBuZWFyZXN0X2NvdW50IG5vcm1hbCBwcmV0cmFjZV9lbmQgcHJldHJhY2Vfc3RhcnQgcmVjdXJzaW9uX2xpbWl0IHNhdmVfZmlsZQorc3luIGtleXdvcmQgcG92RGVzY3JpcHRvcnMgY29sb3IgY29sb3VyIGdyYXkgcmdiIHJnYnQgcmdiZiByZ2JmdCByZWQgZ3JlZW4gYmx1ZQorc3luIGtleXdvcmQgcG92RGVzY3JpcHRvcnMgYnVtcF9tYXAgY29sb3JfbWFwIGNvbG91cl9tYXAgaW1hZ2VfbWFwIG1hdGVyaWFsX21hcCBwaWdtZW50X21hcCBxdWlja19jb2xvciBxdWlja19jb2xvdXIgbm9ybWFsX21hcCB0ZXh0dXJlX21hcCBpbWFnZV9wYXR0ZXJuIHBpZ21lbnRfcGF0dGVybgorc3luIGtleXdvcmQgcG92RGVzY3JpcHRvcnMgYW1iaWVudCBicmlsbGlhbmNlIGNvbnNlcnZlX2VuZXJneSBjcmFuZCBkaWZmdXNlIGZyZXNuZWwgaXJpZCBtZXRhbGxpYyBwaG9uZyBwaG9uZ19zaXplIHJlZnJhY3Rpb24gcmVmbGVjdGlvbiByZWZsZWN0aW9uX2V4cG9uZW50IHJvdWdobmVzcyBzcGVjdWxhcgorc3luIGtleXdvcmQgcG92RGVzY3JpcHRvcnMgY3lsaW5kZXIgZmlzaGV5ZSBvbW5pbWF4IG9ydGhvZ3JhcGhpYyBwYW5vcmFtaWMgcGVyc3BlY3RpdmUgc3BoZXJpY2FsIHVsdHJhX3dpZGVfYW5nbGUKK3N5biBrZXl3b3JkIHBvdkRlc2NyaXB0b3JzIGFnYXRlIGF2ZXJhZ2UgYnJpY2sgYm94ZWQgYm96byBidW1wcyBjZWxscyBjaGVja2VyIGNyYWNrbGUgY3lsaW5kcmljYWwgZGVudHMgZmFjZXRzIGZ1bmN0aW9uIGdyYWRpZW50IGdyYW5pdGUgaGV4YWdvbiBqdWxpYSBsZW9wYXJkIG1hZ25ldCBtYW5kZWwgbWFyYmxlIG9uaW9uIHBsYW5hciBxdWlsdGVkIHJhZGlhbCByaXBwbGVzIHNsb3BlIHNwaGVyaWNhbCBzcGlyYWwxIHNwaXJhbDIgc3BvdHRlZCB0aWxlcyB0aWxlczIgdG9yb2lkYWwgd2F2ZXMgd29vZCB3cmlua2xlcworc3luIGtleXdvcmQgcG92RGVzY3JpcHRvcnMgZGVuc2l0eV9maWxlCitzeW4ga2V5d29yZCBwb3ZEZXNjcmlwdG9ycyBhcmVhX2xpZ2h0IHNoYWRvd2xlc3Mgc3BvdGxpZ2h0IHBhcmFsbGVsCitzeW4ga2V5d29yZCBwb3ZEZXNjcmlwdG9ycyBhYnNvcnB0aW9uIGNvbmZpZGVuY2UgZGVuc2l0eSBlbWlzc2lvbiBpbnRlcnZhbHMgcmF0aW8gc2FtcGxlcyBzY2F0dGVyaW5nIHZhcmlhbmNlCitzeW4ga2V5d29yZCBwb3ZEZXNjcmlwdG9ycyBkaXN0YW5jZSBmb2dfYWx0IGZvZ19vZmZzZXQgZm9nX3R5cGUgdHVyYl9kZXB0aAorc3luIGtleXdvcmQgcG92RGVzY3JpcHRvcnMgYl9zcGxpbmUgYmV6aWVyX3NwbGluZSBjdWJpY19zcGxpbmUgZXZhbHVhdGUgZmFjZV9pbmRpY2VzIGZvcm0gbGluZWFyX3NwbGluZSBtYXhfZ3JhZGllbnQgbmF0dXJhbF9zcGxpbmUgbm9ybWFsX2luZGljZXMgbm9ybWFsX3ZlY3RvcnMgcXVhZHJhdGljX3NwbGluZSB1dl9pbmRpY2VzCitzeW4ga2V5d29yZCBwb3ZEZXNjcmlwdG9ycyB0YXJnZXQKKworIiBNb2RpZmllcnMKK3N5biBrZXl3b3JkIHBvdk1vZGlmaWVycyBjYXVzdGljcyBkaXNwZXJzaW9uIGRpc3BlcnNpb25fc2FtcGxlcyBmYWRlX2NvbG9yIGZhZGVfY29sb3VyIGZhZGVfZGlzdGFuY2UgZmFkZV9wb3dlciBpb3IKK3N5biBrZXl3b3JkIHBvdk1vZGlmaWVycyBib3VuZGVkX2J5IGRvdWJsZV9pbGx1bWluYXRlIGhpZXJhcmNoeSBob2xsb3cgbm9fc2hhZG93IG9wZW4gc21vb3RoIHN0dXJtIHRocmVzaG9sZCB3YXRlcl9sZXZlbAorc3luIGtleXdvcmQgcG92TW9kaWZpZXJzIGh5cGVyY29tcGxleCBtYXhfaXRlcmF0aW9uIHByZWNpc2lvbiBxdWF0ZXJuaW9uIHNsaWNlCitzeW4ga2V5d29yZCBwb3ZNb2RpZmllcnMgY29uaWNfc3dlZXAgbGluZWFyX3N3ZWVwCitzeW4ga2V5d29yZCBwb3ZNb2RpZmllcnMgZmxhdG5lc3MgdHlwZSB1X3N0ZXBzIHZfc3RlcHMKK3N5biBrZXl3b3JkIHBvdk1vZGlmaWVycyBhYV9sZXZlbCBhYV90aHJlc2hvbGQgYWRhcHRpdmUgZmFsbG9mZiBqaXR0ZXIgbG9va3NfbGlrZSBtZWRpYV9hdHRlbnVhdGlvbiBtZWRpYV9pbnRlcmFjdGlvbiBtZXRob2QgcG9pbnRfYXQgcmFkaXVzIHRpZ2h0bmVzcworc3luIGtleXdvcmQgcG92TW9kaWZpZXJzIGFuZ2xlIGFwZXJ0dXJlIGJsdXJfc2FtcGxlcyBjb25maWRlbmNlIGRpcmVjdGlvbiBmb2NhbF9wb2ludCBoX2FuZ2xlIGxvY2F0aW9uIGxvb2tfYXQgcmlnaHQgc2t5IHVwIHZfYW5nbGUgdmFyaWFuY2UKK3N5biBrZXl3b3JkIHBvdk1vZGlmaWVycyBhbGwgYnVtcF9zaXplIGZpbHRlciBpbnRlcnBvbGF0ZSBtYXBfdHlwZSBvbmNlIHNsb3BlX21hcCB0cmFuc21pdCB1c2VfYWxwaGEgdXNlX2NvbG9yIHVzZV9jb2xvdXIgdXNlX2luZGV4CitzeW4ga2V5d29yZCBwb3ZNb2RpZmllcnMgYmxhY2tfaG9sZSBhZ2F0ZV90dXJiIGJyaWNrX3NpemUgY29udHJvbDAgY29udHJvbDEgY3ViaWNfd2F2ZSBkZW5zaXR5X21hcCBmbGlwIGZyZXF1ZW5jeSBpbnRlcnBvbGF0ZSBpbnZlcnNlIGxhbWJkYSBtZXRyaWMgbW9ydGFyIG9jdGF2ZXMgb2Zmc2V0IG9tZWdhIHBoYXNlIHBvbHlfd2F2ZSByYW1wX3dhdmUgcmVwZWF0IHNjYWxsb3Bfd2F2ZSBzaW5lX3dhdmUgc2l6ZSBzdHJlbmd0aCB0cmlhbmdsZV93YXZlIHRoaWNrbmVzcyB0dXJidWxlbmNlIHR1cmJfZGVwdGggdHlwZSB3YXJwCitzeW4ga2V5d29yZCBwb3ZNb2RpZmllcnMgZWNjZW50cmljaXR5IGV4dGluY3Rpb24KK3N5biBrZXl3b3JkIHBvdk1vZGlmaWVycyBhcmNfYW5nbGUgZmFsbG9mZl9hbmdsZSB3aWR0aAorc3luIGtleXdvcmQgcG92TW9kaWZpZXJzIGFjY3VyYWN5IGFsbF9pbnRlcnNlY3Rpb25zIGFsdGl0dWRlIGF1dG9zdG9wIGNpcmN1bGFyIGNvbGxlY3QgY29vcmRzIGN1dGF3YXlfdGV4dHVyZXMgZGlzdF9leHAgZXhwYW5kX3RocmVzaG9sZHMgZXhwb25lbnQgZXh0ZXJpb3IgZ2F0aGVyIGdsb2JhbF9saWdodHMgbWFqb3JfcmFkaXVzIG1heF90cmFjZSBub19idW1wX3NjYWxlIG5vX2ltYWdlIG5vX3JlZmxlY3Rpb24gb3JpZW50IG9yaWVudGF0aW9uIHBhc3NfdGhyb3VnaCBwcmVjb21wdXRlIHByb2plY3RlZF90aHJvdWdoIHJhbmdlX2RpdmlkZXIgc29saWQgc3BhY2luZyBzcGxpdF91bmlvbiB0b2xlcmFuY2UKKworIiBXb3JkcyBub3QgbWFya2VkIGByZXNlcnZlZCcgaW4gZG9jdW1lbnRhdGlvbiwgYnV0Li4uCitzeW4ga2V5d29yZCBwb3ZCTVBUeXBlIGFscGhhIGdpZiBpZmYganBlZyBwZ20gcG5nIHBvdCBwcG0gc3lzIHRnYSB0aWZmIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcG92Rm9udFR5cGUgdHRmIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcG92RGVuc2l0eVR5cGUgZGYzIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcG92Q2hhcnNldCBhc2NpaSB1dGY4IGNvbnRhaW5lZAorCisiIE1hdGggZnVuY3Rpb25zIG9uIGZsb2F0cywgdmVjdG9ycyBhbmQgc3RyaW5ncworc3luIGtleXdvcmQgcG92RnVuY3Rpb25zIGFicyBhY29zIGFjb3NoIGFzYyBhc2luIGFzaW5oIGF0YW4gYXRhbjIgYXRhbmggY2VpbCBjb3MgY29zaCBkZWZpbmVkIGRlZ3JlZXMgZGltZW5zaW9ucyBkaW1lbnNpb25fc2l6ZSBkaXYgZXhwIGZpbGVfZXhpc3RzIGZsb29yIGludCBpbnRlcm5hbCBsbiBsb2cgbWF4IG1pbiBtb2QgcG93IHJhZGlhbnMgcmFuZCBzZWVkIHNlbGVjdCBzaW4gc2luaCBzcXJ0IHN0cmNtcCBzdHJsZW4gdGFuIHRhbmggdmFsIHZkb3Qgdmxlbmd0aCB2c3RyIHZ0dXJidWxlbmNlCitzeW4ga2V5d29yZCBwb3ZGdW5jdGlvbnMgbWluX2V4dGVudCBtYXhfZXh0ZW50IHRyYWNlIHZjcm9zcyB2cm90YXRlIHZheGlzX3JvdGF0ZSB2bm9ybWFsaXplIHZ0dXJidWxlbmNlCitzeW4ga2V5d29yZCBwb3ZGdW5jdGlvbnMgY2hyIGNvbmNhdCBzdWJzdHIgc3RyIHN0cnVwciBzdHJsd3IKK3N5biBrZXl3b3JkIHBvdkp1bGlhRnVuY3Rpb25zIGFjb3NoIGFzaW5oIGF0YW4gY29zaCBjdWJlIHB3ciByZWNpcHJvY2FsIHNpbmggc3FyIHRhbmgKKworIiBTcGVjaWFsaXRpZXMKK3N5biBrZXl3b3JkIHBvdkNvbnN0cyBjbG9jayBjbG9ja19kZWx0YSBjbG9ja19vbiBmaW5hbF9jbG9jayBmaW5hbF9mcmFtZSBmcmFtZV9udW1iZXIgaW5pdGlhbF9jbG9jayBpbml0aWFsX2ZyYW1lIGltYWdlX3dpZHRoIGltYWdlX2hlaWdodCBmYWxzZSBubyBvZmYgb24gcGkgdCB0cnVlIHUgdiB2ZXJzaW9uIHggeSB5ZXMgegorc3luIG1hdGNoIHBvdkRvdEl0ZW0gIlwuXEA8PVwoYmx1ZVx8Z3JlZW5cfGZpbHRlclx8cmVkXHx0cmFuc21pdFx8dFx8dVx8dlx8eFx8eVx8elwpXD4iIGRpc3BsYXkKKworIiBDb21tZW50cworc3luIHJlZ2lvbiBwb3ZDb21tZW50IHN0YXJ0PSIvXCoiIGVuZD0iXCovIiBjb250YWlucz1wb3ZUb2RvLHBvdkNvbW1lbnQKK3N5biBtYXRjaCBwb3ZDb21tZW50ICIvLy4qIiBjb250YWlucz1wb3ZUb2RvCitzeW4gbWF0Y2ggcG92Q29tbWVudEVycm9yICJcKi8iCitzeW4gc3luYyBjY29tbWVudCBwb3ZDb21tZW50CitzeW4gc3luYyBtaW5saW5lcz01MAorc3luIGtleXdvcmQgcG92VG9kbyBUT0RPIEZJWE1FIFhYWCBOT1QgY29udGFpbmVkCitzeW4gY2x1c3RlciBwb3ZQUklWQVRFIGFkZD1wb3ZUb2RvCisKKyIgTGFuZ3VhZ2UgZGlyZWN0aXZlcworc3luIG1hdGNoIHBvdkNvbmRpdGlvbmFsRGlyICIjXHMqXChlbHNlXHxlbmRcfGlmXHxpZmRlZlx8aWZuZGVmXHxzd2l0Y2hcfHdoaWxlXClcPiIKK3N5biBtYXRjaCBwb3ZMYWJlbERpciAiI1xzKlwoYnJlYWtcfGNhc2VcfGRlZmF1bHRcfHJhbmdlXClcPiIKK3N5biBtYXRjaCBwb3ZEZWNsYXJlRGlyICIjXHMqXChkZWNsYXJlXHxkZWZhdWx0XHxsb2NhbFx8bWFjcm9cfHVuZGVmXHx2ZXJzaW9uXClcPiIKK3N5biBtYXRjaCBwb3ZJbmNsdWRlRGlyICIjXHMqaW5jbHVkZVw+Igorc3luIG1hdGNoIHBvdkZpbGVEaXIgIiNccypcKGZjbG9zZVx8Zm9wZW5cfHJlYWRcfHdyaXRlXClcPiIKK3N5biBtYXRjaCBwb3ZNZXNzYWdlRGlyICIjXHMqXChkZWJ1Z1x8ZXJyb3JcfHJlbmRlclx8c3RhdGlzdGljc1x8d2FybmluZ1wpXD4iCitzeW4gcmVnaW9uIHBvdkZpbGVPcGVuIHN0YXJ0PSIjXHMqZm9wZW5cPiIgc2tpcD0rIlteIl0qIisgbWF0Y2hncm91cD1wb3ZPcGVuVHlwZSBlbmQ9Ilw8XChyZWFkXHx3cml0ZVx8YXBwZW5kXClcPiIgY29udGFpbnM9QUxMQlVULFBvdlBhcmVuRXJyb3IsUG92QnJhY2VFcnJvcixAUG92UFJJVkFURSB0cmFuc3BhcmVudCBrZWVwZW5kCisKKyIgTGl0ZXJhbCBzdHJpbmdzCitzeW4gbWF0Y2ggcG92U3BlY2lhbENoYXIgIlxcXGRcZFxkXHxcXC4iIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBwb3ZTdHJpbmcgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWlucz1wb3ZTcGVjaWFsQ2hhciBvbmVsaW5lCitzeW4gY2x1c3RlciBwb3ZQUklWQVRFIGFkZD1wb3ZTcGVjaWFsQ2hhcgorCisiIENhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXphdGlvbgorc3luIHJlZ2lvbiBwb3ZQYXJlbiBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQscG92UGFyZW5FcnJvcixAcG92UFJJVkFURSB0cmFuc3BhcmVudAorc3luIG1hdGNoIHBvdlBhcmVuRXJyb3IgIikiCitzeW4gcmVnaW9uIHBvdkJyYWNlIHN0YXJ0PSd7JyBlbmQ9J30nIGNvbnRhaW5zPUFMTEJVVCxwb3ZCcmFjZUVycm9yLEBwb3ZQUklWQVRFIHRyYW5zcGFyZW50CitzeW4gbWF0Y2ggcG92QnJhY2VFcnJvciAifSIKKworIiBOdW1iZXJzCitzeW4gbWF0Y2ggcG92TnVtYmVyICJcKF5cfFxXXClcQDw9WystXVw9XChcZFwrXClcPVwuXD1cZFwrXChbZUVdWystXVw9XGRcK1wpXD0iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworaGkgZGVmIGxpbmsgcG92Q29tbWVudCBDb21tZW50CitoaSBkZWYgbGluayBwb3ZUb2RvIFRvZG8KK2hpIGRlZiBsaW5rIHBvdk51bWJlciBOdW1iZXIKK2hpIGRlZiBsaW5rIHBvdlN0cmluZyBTdHJpbmcKK2hpIGRlZiBsaW5rIHBvdkZpbGVPcGVuIENvbnN0YW50CitoaSBkZWYgbGluayBwb3ZDb25zdHMgQ29uc3RhbnQKK2hpIGRlZiBsaW5rIHBvdkRvdEl0ZW0gQ29uc3RhbnQKK2hpIGRlZiBsaW5rIHBvdkJNUFR5cGUgcG92U3BlY2lhbAoraGkgZGVmIGxpbmsgcG92Q2hhcnNldCBwb3ZTcGVjaWFsCitoaSBkZWYgbGluayBwb3ZEZW5zaXR5VHlwZSBwb3ZTcGVjaWFsCitoaSBkZWYgbGluayBwb3ZGb250VHlwZSBwb3ZTcGVjaWFsCitoaSBkZWYgbGluayBwb3ZPcGVuVHlwZSBwb3ZTcGVjaWFsCitoaSBkZWYgbGluayBwb3ZTcGVjaWFsQ2hhciBwb3ZTcGVjaWFsCitoaSBkZWYgbGluayBwb3ZTcGVjaWFsIFNwZWNpYWwKK2hpIGRlZiBsaW5rIHBvdkNvbmRpdGlvbmFsRGlyIFByZVByb2MKK2hpIGRlZiBsaW5rIHBvdkxhYmVsRGlyIFByZVByb2MKK2hpIGRlZiBsaW5rIHBvdkRlY2xhcmVEaXIgRGVmaW5lCitoaSBkZWYgbGluayBwb3ZJbmNsdWRlRGlyIEluY2x1ZGUKK2hpIGRlZiBsaW5rIHBvdkZpbGVEaXIgUHJlUHJvYworaGkgZGVmIGxpbmsgcG92TWVzc2FnZURpciBEZWJ1ZworaGkgZGVmIGxpbmsgcG92QXBwZWFyYW5jZSBwb3ZEZXNjcmlwdG9ycworaGkgZGVmIGxpbmsgcG92T2JqZWN0cyBwb3ZEZXNjcmlwdG9ycworaGkgZGVmIGxpbmsgcG92R2xvYmFsU2V0dGluZ3MgcG92RGVzY3JpcHRvcnMKK2hpIGRlZiBsaW5rIHBvdkRlc2NyaXB0b3JzIFR5cGUKK2hpIGRlZiBsaW5rIHBvdkp1bGlhRnVuY3Rpb25zIFBvdkZ1bmN0aW9ucworaGkgZGVmIGxpbmsgcG92TW9kaWZpZXJzIHBvdkZ1bmN0aW9ucworaGkgZGVmIGxpbmsgcG92RnVuY3Rpb25zIEZ1bmN0aW9uCitoaSBkZWYgbGluayBwb3ZDb21tYW5kcyBPcGVyYXRvcgoraGkgZGVmIGxpbmsgcG92VHJhbnNmb3JtIE9wZXJhdG9yCitoaSBkZWYgbGluayBwb3ZDU0cgT3BlcmF0b3IKK2hpIGRlZiBsaW5rIHBvdlBhcmVuRXJyb3IgcG92RXJyb3IKK2hpIGRlZiBsaW5rIHBvdkJyYWNlRXJyb3IgcG92RXJyb3IKK2hpIGRlZiBsaW5rIHBvdkNvbW1lbnRFcnJvciBwb3ZFcnJvcgoraGkgZGVmIGxpbmsgcG92RXJyb3IgRXJyb3IKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicG92IgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcG92aW5pLnZpbSBiL3J1bnRpbWUvc3ludGF4L3BvdmluaS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxNjllYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3BvdmluaS52aW0KQEAgLTAsMCArMSw2MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgVGhpcyBpcyBhIEdFTkVSQVRFRCBGSUxFLiBQbGVhc2UgYWx3YXlzIHJlZmVyIHRvIHNvdXJjZSBmaWxlIGF0IHRoZSBVUkkgYmVsb3cuCisiIExhbmd1YWdlOiBQb1YtUmF5KHRtKSAzLjUgY29uZmlndXJhdGlvbi9pbml0aWFsaXphdGlvbiBmaWxlcworIiBNYWludGFpbmVyOiBEYXZpZCBOZVx2e2N9YXMgKFlldGkpIDx5ZXRpQHBoeXNpY3MubXVuaS5jej4KKyIgTGFzdCBDaGFuZ2U6IDIwMDItMDYtMDEKKyIgVVJMOiBodHRwOi8vcGh5c2ljcy5tdW5pLmN6L355ZXRpL2Rvd25sb2FkL3N5bnRheC9wb3ZpbmkudmltCisiIFJlcXVpcmVkIFZpbSBWZXJzaW9uOiA2LjAKKworIiBTZXR1cAoraWYgdmVyc2lvbiA+PSA2MDAKKyAgIiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKKyAgaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKKyAgZW5kaWYKK2Vsc2UKKyAgIiBDcm9hayB3aGVuIGFuIG9sZCBWaW0gaXMgc291cmNpbmcgdXMuCisgIGVjaG8gIlNvcnJ5LCBidXQgdGhpcyBzeW50YXggZmlsZSByZWxpZXMgb24gVmltIDYgZmVhdHVyZXMuICBFaXRoZXIgdXBncmFkZSBWaW0gb3IgdXNlYSB2ZXJzaW9uIG9mICIgLiBleHBhbmQoIjxzZmlsZT46dDpyIikgLiAiIHN5bnRheCBmaWxlIGFwcHJvcHJpYXRlIGZvciBWaW0gIiAuIHZlcnNpb24vMTAwIC4gIi4iIC4gdmVyc2lvbiAlMTAwIC4gIi4iCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyIgU3ludGF4CitzeW4gbWF0Y2ggcG92aW5pSW5jbHVkZSAiXlxzKlteWystO11cUypccyokIiBjb250YWlucz1wb3ZpbmlTZWN0aW9uCitzeW4gbWF0Y2ggcG92aW5pTGFiZWwgIl4uXHstMSx9XHplPSIgdHJhbnNwYXJlbnQgY29udGFpbnM9cG92aW5pS2V5d29yZCBuZXh0Z3JvdXA9cG92aW5pQm9vbCxwb3ZpbmlOdW1iZXIKK3N5biBrZXl3b3JkIHBvdmluaUJvb2wgT24gT2ZmIFRydWUgRmFsc2UgWWVzIE5vCitzeW4gbWF0Y2ggcG92aW5pTnVtYmVyICJcPFxkKlwuXD1cZFwrXD4iCitzeW4ga2V5d29yZCBwb3ZpbmlLZXl3b3JkIENsb2NrIEluaXRpYWxfRnJhbWUgRmluYWxfRnJhbWUgSW5pdGlhbF9DbG9jayBGaW5hbF9DbG9jayBTdWJzZXRfU3RhcnRfRnJhbWUgU3Vic2V0X0VuZF9GcmFtZSBDeWNsaWNfQW5pbWF0aW9uIEZpZWxkX1JlbmRlciBPZGRfRmllbGQKK3N5biBrZXl3b3JkIHBvdmluaUtleXdvcmQgV2lkdGggSGVpZ2h0IFN0YXJ0X0NvbHVtbiBTdGFydF9Sb3cgRW5kX0NvbHVtbiBFbmRfUm93IFRlc3RfQWJvcnQgVGVzdF9BYm9ydF9Db3VudCBDb250aW51ZV9UcmFjZSBDcmVhdGVfSW5pCitzeW4ga2V5d29yZCBwb3ZpbmlLZXl3b3JkIERpc3BsYXkgVmlkZW9fTW9kZSBQYWxldHRlIERpc3BsYXlfR2FtbWEgUGF1c2VfV2hlbl9Eb25lIFZlcmJvc2UgRHJhd19WaXN0YXMgUHJldmlld19TdGFydF9TaXplIFByZXZpZXdfRW5kX1NpemUKK3N5biBrZXl3b3JkIHBvdmluaUtleXdvcmQgT3V0cHV0X3RvX0ZpbGUgT3V0cHV0X0ZpbGVfVHlwZSBPdXRwdXRfQWxwaGEgQml0c19QZXJfQ29sb3IgT3V0cHV0X0ZpbGVfTmFtZSBCdWZmZXJfT3V0cHV0IEJ1ZmZlcl9TaXplCitzeW4ga2V5d29yZCBwb3ZpbmlLZXl3b3JkIEhpc3RvZ3JhbV9UeXBlIEhpc3RvZ3JhbV9HcmlkX1NpemUgSGlzdG9ncmFtX05hbWUKK3N5biBrZXl3b3JkIHBvdmluaUtleXdvcmQgSW5wdXRfRmlsZV9OYW1lIEluY2x1ZGVfSGVhZGVyIExpYnJhcnlfUGF0aCBWZXJzaW9uCitzeW4ga2V5d29yZCBwb3ZpbmlLZXl3b3JkIERlYnVnX0NvbnNvbGUgRmF0YWxfQ29uc29sZSBSZW5kZXJfQ29uc29sZSBTdGF0aXN0aWNfQ29uc29sZSBXYXJuaW5nX0NvbnNvbGUgQWxsX0NvbnNvbGUgRGVidWdfRmlsZSBGYXRhbF9GaWxlIFJlbmRlcl9GaWxlIFN0YXRpc3RpY19GaWxlIFdhcm5pbmdfRmlsZSBBbGxfRmlsZSBXYXJuaW5nX0xldmVsCitzeW4ga2V5d29yZCBwb3ZpbmlLZXl3b3JkIFF1YWxpdHkgUmFkaW9zaXR5IEJvdW5kaW5nIEJvdW5kaW5nX1RocmVzaG9sZCBMaWdodF9CdWZmZXIgVmlzdGFfQnVmZmVyIFJlbW92ZV9Cb3VuZHMgU3BsaXRfVW5pb25zIEFudGlhbGlhcyBTYW1wbGluZ19NZXRob2QgQW50aWFsaWFzX1RocmVzaG9sZCBKaXR0ZXIgSml0dGVyX0Ftb3VudCBBbnRpYWxpYXNfRGVwdGgKK3N5biBrZXl3b3JkIHBvdmluaUtleXdvcmQgUHJlX1NjZW5lX1JldHVybiBQcmVfRnJhbWVfUmV0dXJuIFBvc3RfU2NlbmVfUmV0dXJuIFBvc3RfRnJhbWVfUmV0dXJuIFVzZXJfQWJvcnRfUmV0dXJuIEZhdGFsX0Vycm9yX1JldHVybgorc3luIG1hdGNoIHBvdmluaVNoZWxsT3V0ICJeXHMqXChQcmVfU2NlbmVfQ29tbWFuZFx8UHJlX0ZyYW1lX0NvbW1hbmRcfFBvc3RfU2NlbmVfQ29tbWFuZFx8UG9zdF9GcmFtZV9Db21tYW5kXHxVc2VyX0Fib3J0X0NvbW1hbmRcfEZhdGFsX0Vycm9yX0NvbW1hbmRcKVw+IiBuZXh0Z3JvdXA9cG92aW5pU2hlbGxPdXRFcSBza2lwd2hpdGUKK3N5biBtYXRjaCBwb3ZpbmlTaGVsbE91dEVxICI9IiBuZXh0Z3JvdXA9cG92aW5pU2hlbGxPdXRSSFMgc2tpcHdoaXRlIGNvbnRhaW5lZAorc3luIG1hdGNoIHBvdmluaVNoZWxsT3V0UkhTICJbXjtdXCsiIHNraXB3aGl0ZSBjb250YWluZWQgY29udGFpbnM9cG92aW5pU2hlbGxPdXRTcGVjaWFsCitzeW4gbWF0Y2ggcG92aW5pU2hlbGxPdXRTcGVjaWFsICIlW29zbmtodyVdIiBjb250YWluZWQKK3N5biBrZXl3b3JkIHBvdmluaURlY2xhcmUgRGVjbGFyZQorc3luIG1hdGNoIHBvdmluaUNvbW1lbnQgIjsuKiQiCitzeW4gbWF0Y2ggcG92aW5pT3B0aW9uICJeXHMqWystXVxTKiIKK3N5biBtYXRjaCBwb3ZpbmlJbmNsdWRlTGFiZWwgIl5ccypJbmNsdWRlX0lOSVxzKj0iIG5leHRncm91cD1wb3ZpbmlJbmNsdWRlZEZpbGUgc2tpcHdoaXRlCitzeW4gbWF0Y2ggcG92aW5pSW5jbHVkZWRGaWxlICJbXjtdXCsiIGNvbnRhaW5zPXBvdmluaVNlY3Rpb24gY29udGFpbmVkCitzeW4gcmVnaW9uIHBvdmluaVNlY3Rpb24gc3RhcnQ9IlxbIiBlbmQ9IlxdIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcKK2hpIGRlZiBsaW5rIHBvdmluaVNlY3Rpb24gU3BlY2lhbAoraGkgZGVmIGxpbmsgcG92aW5pQ29tbWVudCBDb21tZW50CitoaSBkZWYgbGluayBwb3ZpbmlEZWNsYXJlIHBvdmluaUtleXdvcmQKK2hpIGRlZiBsaW5rIHBvdmluaVNoZWxsT3V0IHBvdmluaUtleXdvcmQKK2hpIGRlZiBsaW5rIHBvdmluaUluY2x1ZGVMYWJlbCBwb3ZpbmlLZXl3b3JkCitoaSBkZWYgbGluayBwb3ZpbmlLZXl3b3JkIFR5cGUKK2hpIGRlZiBsaW5rIHBvdmluaVNoZWxsT3V0U3BlY2lhbCBTcGVjaWFsCitoaSBkZWYgbGluayBwb3ZpbmlJbmNsdWRlZEZpbGUgcG92aW5pSW5jbHVkZQoraGkgZGVmIGxpbmsgcG92aW5pSW5jbHVkZSBJbmNsdWRlCitoaSBkZWYgbGluayBwb3ZpbmlPcHRpb24gS2V5d29yZAoraGkgZGVmIGxpbmsgcG92aW5pQm9vbCBDb25zdGFudAoraGkgZGVmIGxpbmsgcG92aW5pTnVtYmVyIE51bWJlcgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJwb3ZpbmkiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9wcGQudmltIGIvcnVudGltZS9zeW50YXgvcHBkLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTJmNzBjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcHBkLnZpbQpAQCAtMCwwICsxLDQ4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJUFBEIChQb3N0U2NyaXB0IHByaW50ZXIgZGVzY3JpcHRpb24pIGZpbGUKKyIgTWFpbnRhaW5lcjoJQmpvZXJuIEphY2tlIDxiamFja2VAc3VzZS5kZT4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEtMTAtMDYKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisKK3N5biBtYXRjaAlwcGRDb21tZW50CSJeXColLioiCitzeW4gbWF0Y2gJcHBkRGVmCQkiXCpbYS16QS1aMC05XVwrIgorc3luIG1hdGNoCXBwZERlZmluZQkiXCpbYS16QS1aMC05XC1fXVwrOiIKK3N5biBtYXRjaAlwcGRVSQkJIlwqW2EtekEtWl0qXChPcGVuXHxDbG9zZVwpVUkiCitzeW4gbWF0Y2gJcHBkVUlHcm91cAkiXCpbYS16QS1aXSpcKE9wZW5cfENsb3NlXClHcm91cCIKK3N5biBtYXRjaAlwcGRHVUlUZXh0CSIvLio6Igorc3luIG1hdGNoCXBwZENvbnRyYWludHMJIl4qVUlDb25zdHJhaW50czoiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2FoZGxfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfYWhkbF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisKKyAgSGlMaW5rIHBwZENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHBwZERlZmluZQkJU3RhdGVtZW50CisgIEhpTGluayBwcGRVSQkJCUZ1bmN0aW9uCisgIEhpTGluayBwcGRVSUdyb3VwCQlGdW5jdGlvbgorICBIaUxpbmsgcHBkRGVmCQkJU3RyaW5nCisgIEhpTGluayBwcGRHVUlUZXh0CQlUeXBlCisgIEhpTGluayBwcGRDb250cmFpbnRzCQlTcGVjaWFsCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInBwZCIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3Bwd2l6LnZpbSBiL3J1bnRpbWUvc3ludGF4L3Bwd2l6LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Q3YjNhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcHB3aXoudmltCkBAIC0wLDAgKzEsOTcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgUFBXaXphcmQgKHByZXByb2Nlc3NvciBieSBEZW5uaXMgQmFyZWlzKQorIiBNYWludGFpbmVyOiAgIFN0ZWZhbiBTY2h3YXJ6ZXIgPHMuc2Nod2FyemVyQG5kaC5uZXQ+CisiIFVSTDoJCQlodHRwOi8vd3d3Lm5kaC5uZXQvaG9tZS9zc2Nod2FyemVyL2Rvd25sb2FkL3Bwd2l6LnZpbQorIiBMYXN0IENoYW5nZTogIDIwMDMgTWF5IDExCisiIEZpbGVuYW1lOiAgICAgcHB3aXoudmltCisKKyIgUmVtb3ZlIG9sZCBzeW50YXggc3R1ZmYKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKK2lmICFleGlzdHMoInBwd2l6X2hpZ2hsaWdodF9kZWZzIikKKyAgICBsZXQgcHB3aXpfaGlnaGxpZ2h0X2RlZnMgPSAxCitlbmRpZgorCitpZiAhZXhpc3RzKCJwcHdpel93aXRoX2h0bWwiKQorICAgIGxldCBwcHdpel93aXRoX2h0bWwgPSAxCitlbmRpZgorCisiIGNvbW1lbnRzCitzeW4gbWF0Y2ggICBwcHdpekNvbW1lbnQgICJeOy4qJCIKK3N5biBtYXRjaCAgIHBwd2l6Q29tbWVudCAgIjs7LiokIgorIiBIVE1MCitpZiBwcHdpel93aXRoX2h0bWwgPiAwCisgICAgc3luIHJlZ2lvbiBwcHdpekhUTUwgIHN0YXJ0PSI8IiBlbmQ9Ij4iIGNvbnRhaW5zPXBwd2l6QXJnLHBwd2l6TWFjcm8KKyAgICBzeW4gbWF0Y2ggIHBwd2l6SFRNTCAgIlwmXHdcKzsiCitlbmRpZgorIiBkZWZpbmUsIGV2YWx1YXRlIGV0Yy4KK2lmIHBwd2l6X2hpZ2hsaWdodF9kZWZzID09IDEKKyAgICBzeW4gbWF0Y2ggIHBwd2l6RGVmICAgIl5ccypcI1xTXCtcc1wrXFNcKyIgY29udGFpbnM9QUxMCisgICAgc3luIG1hdGNoICBwcHdpekRlZiAgICJeXHMqXCNcKGlmXHxlbHNlXHxlbmRpZlwpIiBjb250YWlucz1BTEwKKyAgICBzeW4gbWF0Y2ggIHBwd2l6RGVmICAgIl5ccypcI1woe1x8YnJlYWtcfGNvbnRpbnVlXHx9XCkiIGNvbnRhaW5zPUFMTAorIiBlbHNlaWYgcHB3aXpfaGlnaGxpZ2h0X2RlZnMgPT0gMgorIiAgICAgc3luIHJlZ2lvbiBwcHdpekRlZiAgIHN0YXJ0PSJeXHMqXCMiIGVuZD0iW15cXF0kIiBlbmQ9Il4kIiBrZWVwZW5kIGNvbnRhaW5zPUFMTAorZWxzZQorICAgIHN5biByZWdpb24gcHB3aXpEZWYgICBzdGFydD0iXlxzKlwjIiBlbmQ9IlteXFxdJCIgZW5kPSJeJCIga2VlcGVuZCBjb250YWlucz1wcHdpekNvbnQKK2VuZGlmCitzeW4gbWF0Y2ggICBwcHdpekVycm9yICAgICJccy5cXCQiCitzeW4gbWF0Y2ggICBwcHdpekNvbnQgICAgICJcc1woWytcLSVdXHxcKVxcJCIKKyIgbWFjcm9zIHRvIGV4ZWN1dGUKK3N5biByZWdpb24gIHBwd2l6TWFjcm8gICAgc3RhcnQ9IjxcJCIgZW5kPSI+IiBjb250YWlucz1AcHB3aXpBcmdWYWwscHB3aXpDb250CisiIG1hY3JvIGFyZ3VtZW50cworc3luIHJlZ2lvbiAgcHB3aXpBcmcgICAgICBzdGFydD0ieyIgZW5kPSJ9IiBjb250YWlucz1wcHdpekVxdWFsLHBwd2l6U3RyaW5nCitzeW4gbWF0Y2ggICBwcHdpekVxdWFsICAgICI9IiBjb250YWluZWQKK3N5biBtYXRjaCAgIHBwd2l6T3BlcmF0b3IgIjw+XHw9XHw8XHw+IiBjb250YWluZWQKKyIgc3RhbmRhcmQgdmFyaWFibGVzIChidWlsdGluKQorc3luIHJlZ2lvbiAgcHB3aXpTdGRWYXIgICBzdGFydD0iPD9bXj9dIiBlbmQ9Ij4iIGNvbnRhaW5zPUBwcHdpekFyZ1ZhbAorIiBSZXh4IHZhcmlhYmxlcworc3luIHJlZ2lvbiAgcHB3aXpSZXh4VmFyICBzdGFydD0iPD8/IiBlbmQ9Ij4iIGNvbnRhaW5zPUBwcHdpekFyZ1ZhbAorIiBDb25zdGFudHMKK3N5biByZWdpb24gIHBwd2l6U3RyaW5nICAgc3RhcnQ9KyIrIGVuZD0rIisgY29udGFpbmVkIGNvbnRhaW5zPXBwd2l6TWFjcm8scHB3aXpBcmcscHB3aXpIVE1MLHBwd2l6Q29udCxwcHdpelN0ZFZhcixwcHdpelJleHhWYXIKK3N5biByZWdpb24gIHBwd2l6U3RyaW5nICAgc3RhcnQ9KycrIGVuZD0rJysgY29udGFpbmVkIGNvbnRhaW5zPXBwd2l6TWFjcm8scHB3aXpBcmcscHB3aXpIVE1MLHBwd2l6Q29udCxwcHdpelN0ZFZhcixwcHdpelJleHhWYXIKK3N5biBtYXRjaCAgIHBwd2l6SW50ZWdlciAgIlxkXCsiIGNvbnRhaW5lZAorCisiIENsdXN0ZXJzCitzeW4gY2x1c3RlciBwcHdpekFyZ1ZhbCBhZGQ9cHB3aXpTdHJpbmcscHB3aXpJbnRlZ2VyCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3Bwd2l6X3N5bl9pbml0cyIpCisgICAgaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX3Bwd2l6X3N5bl9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgIGVuZGlmCisKKyAgICBIaUxpbmsgcHB3aXpTcGVjaWFsICBTcGVjaWFsCisgICAgSGlMaW5rIHBwd2l6RXF1YWwgICAgcHB3aXpTcGVjaWFsCisgICAgSGlMaW5rIHBwd2l6T3BlcmF0b3IgcHB3aXpTcGVjaWFsCisgICAgSGlMaW5rIHBwd2l6Q29tbWVudCAgQ29tbWVudAorICAgIEhpTGluayBwcHdpekRlZiAgICAgIFByZVByb2MKKyAgICBIaUxpbmsgcHB3aXpNYWNybyAgICBTdGF0ZW1lbnQKKyAgICBIaUxpbmsgcHB3aXpBcmcgICAgICBJZGVudGlmaWVyCisgICAgSGlMaW5rIHBwd2l6U3RkVmFyICAgSWRlbnRpZmllcgorICAgIEhpTGluayBwcHdpelJleHhWYXIgIElkZW50aWZpZXIKKyAgICBIaUxpbmsgcHB3aXpTdHJpbmcgICBDb25zdGFudAorICAgIEhpTGluayBwcHdpekludGVnZXIgIENvbnN0YW50CisgICAgSGlMaW5rIHBwd2l6Q29udCAgICAgcHB3aXpTcGVjaWFsCisgICAgSGlMaW5rIHBwd2l6RXJyb3IgICAgRXJyb3IKKyAgICBIaUxpbmsgcHB3aXpIVE1MICAgICBUeXBlCisKKyAgICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHB3aXoiCisKKyIgdmltOiB0cz00CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3Byb2NtYWlsLnZpbSBiL3J1bnRpbWUvc3ludGF4L3Byb2NtYWlsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmZmYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcHJvY21haWwudmltCkBAIC0wLDAgKzEsNjcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglQcm9jbWFpbCBkZWZpbml0aW9uIGZpbGUKKyIgTWFpbnRhaW5lcjoJTWVsY2hpb3IgRlJBTlogPG1mcmFuekBhb24uYXQ+CisiIExhc3QgQ2hhbmdlOgkyMDAzIEF1ZyAxNAorIiBBdXRob3I6CVNvbmlhIEhlaW1hbm4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gbWF0Y2ggICBwcm9jbWFpbENvbW1lbnQgICAgICAiIy4qJCIgY29udGFpbnM9cHJvY21haWxUb2RvCitzeW4ga2V5d29yZCAgIHByb2NtYWlsVG9kbyAgICAgIGNvbnRhaW5lZCBUb2RvIFRCRAorCitzeW4gcmVnaW9uICBwcm9jbWFpbFN0cmluZyAgICAgICBzdGFydD0rIisgIHNraXA9K1xcIisgIGVuZD0rIisKK3N5biByZWdpb24gIHByb2NtYWlsU3RyaW5nICAgICAgIHN0YXJ0PSsnKyAgc2tpcD0rXFwnKyAgZW5kPSsnKworCitzeW4gcmVnaW9uIHByb2NtYWlsVmFyRGVjbFJlZ2lvbiBzdGFydD0iXlxzKlthLXpBLVowLTlfXVwrXHMqPSJocz1lLTEgc2tpcD0rXFwkKyBlbmQ9KyQrIGNvbnRhaW5zPXByb2NtYWlsVmFyLHByb2NtYWlsVmFyRGVjbCxwcm9jbWFpbFN0cmluZworc3luIG1hdGNoIHByb2NtYWlsVmFyRGVjbCBjb250YWluZWQgIl5ccypbYS16QS1aMC05X11cKyIKK3N5biBtYXRjaCBwcm9jbWFpbFZhciAiJFthLXpBLVowLTlfXVwrIgorCitzeW4gbWF0Y2ggcHJvY21haWxDb25kaXRpb24gY29udGFpbmVkICJeXHMqXCouKiIKKworc3luIG1hdGNoIHByb2NtYWlsQWN0aW9uRm9sZGVyIGNvbnRhaW5lZCAiXlxzKlstX2EtekEtWjAtOS9dXCsiCitzeW4gbWF0Y2ggcHJvY21haWxBY3Rpb25WYXJpYWJsZSBjb250YWluZWQgIl5ccyokW2EtekEtWl9dXCsiCitzeW4gcmVnaW9uIHByb2NtYWlsQWN0aW9uRm9yd2FyZCBzdGFydD0rXlxzKiErIHNraXA9K1xcJCsgZW5kPSskKworc3luIHJlZ2lvbiBwcm9jbWFpbEFjdGlvblBpcGUgc3RhcnQ9K15ccyp8KyBza2lwPStcXCQrIGVuZD0rJCsKK3N5biByZWdpb24gcHJvY21haWxBY3Rpb25OZXN0ZWQgc3RhcnQ9K15ccyp7KyBlbmQ9K15ccyp9KyBjb250YWlucz1wcm9jbWFpbFJlY2lwZSxwcm9jbWFpbENvbW1lbnQscHJvY21haWxWYXJEZWNsUmVnaW9uCisKK3N5biByZWdpb24gcHJvY21haWxSZWNpcGUgc3RhcnQ9K15ccyo6LiokKyBlbmQ9K15ccypcKCRcfH1cKSttZT1lLTEgY29udGFpbnM9cHJvY21haWxDb21tZW50LHByb2NtYWlsQ29uZGl0aW9uLHByb2NtYWlsQWN0aW9uRm9sZGVyLHByb2NtYWlsQWN0aW9uVmFyaWFibGUscHJvY21haWxBY3Rpb25Gb3J3YXJkLHByb2NtYWlsQWN0aW9uUGlwZSxwcm9jbWFpbEFjdGlvbk5lc3RlZCxwcm9jbWFpbFZhckRlY2xSZWdpb24KKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcHJvY21haWxfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcHJvY21haWxfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgcHJvY21haWxDb21tZW50IENvbW1lbnQKKyAgSGlMaW5rIHByb2NtYWlsVG9kbyAgICBUb2RvCisKKyAgSGlMaW5rIHByb2NtYWlsUmVjaXBlICAgU3RhdGVtZW50CisgICJIaUxpbmsgcHJvY21haWxDb25kaXRpb24gICBTdGF0ZW1lbnQKKworICBIaUxpbmsgcHJvY21haWxBY3Rpb25Gb2xkZXIJcHJvY21haWxBY3Rpb24KKyAgSGlMaW5rIHByb2NtYWlsQWN0aW9uVmFyaWFibGUgcHJvY21haWxBY3Rpb24KKyAgSGlMaW5rIHByb2NtYWlsQWN0aW9uRm9yd2FyZAlwcm9jbWFpbEFjdGlvbgorICBIaUxpbmsgcHJvY21haWxBY3Rpb25QaXBlCXByb2NtYWlsQWN0aW9uCisgIEhpTGluayBwcm9jbWFpbEFjdGlvbgkJRnVuY3Rpb24KKyAgSGlMaW5rIHByb2NtYWlsVmFyCQlJZGVudGlmaWVyCisgIEhpTGluayBwcm9jbWFpbFZhckRlY2wJSWRlbnRpZmllcgorCisgIEhpTGluayBwcm9jbWFpbFN0cmluZyBTdHJpbmcKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHJvY21haWwiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9wcm9ncmVzcy52aW0gYi9ydW50aW1lL3N5bnRheC9wcm9ncmVzcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyOTMxMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3Byb2dyZXNzLnZpbQpAQCAtMCwwICsxLDIxNSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CQkJCVByb2dyZXNzIDRHTAorIiBGaWxlbmFtZSBleHRlbnNpb25zOgkqLnAgKGNvbGxpZGVzIHdpdGggUGFzY2FsKSwKKyIJCQkJCQkqLmkgKGNvbGxpZGVzIHdpdGggYXNzZW1ibGVyKQorIgkJCQkJCSoudyAoY29sbGlkZXMgd2l0aCBjd2ViKQorIiBNYWludGFpbmVyOgkJCVBoaWxpcCBVcmVuCQkJPHBoaWx1QGNvbXB1dGVyLm9yZz4KKyIgQ29udHJpYnV0b3JzOgkJCUNocmlzIFJ1cHJlY2h0CQk8Y2hydXBAbWFjLmNvbT4KKyIJCQkJCQlQaGlsaXAgVXJlbgkJCTxwaGlsdUBjb21wdXRlci5vcmc+CisiCQkJCQkJTWlraGFpbCBLdXBlcmJsdW0JPG1pa2hhaWxAd2hhc3VwLmNvbT4KKyIgVVJMOgkJCQkJaHR0cDovL3d3dy56ZXRhLm9yZy5hdS9+cGhpbHUvdmltL3Byb2dyZXNzLnZpbQorIiBMYXN0IENoYW5nZToJCQlUaHUgTWF5ICAzIDA4OjQ5OjQ3IEVTVCAyMDAxCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisJc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKwlmaW5pc2gKK2VuZGlmCisKK2lmIHZlcnNpb24gPj0gNjAwCisgIHNldGxvY2FsIGlza2V5d29yZD1ALDQ4LTU3LF8sLSwhLCMsJCwlCitlbHNlCisgIHNldCBpc2tleXdvcmQ9QCw0OC01NyxfLC0sISwjLCQsJQorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyIgUHJvZ3Jlc3MgQmxvY2tzIG9mIGNvZGUgYW5kIG1pc21hdGNoZWQgImVuZC4iIGVycm9ycy4KK3N5biBtYXRjaCAgIFByb2dyZXNzRW5kRXJyb3IJCSJcPGVuZFw+Igorc3luIHJlZ2lvbiBQcm9ncmVzc0RvQmxvY2sgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1Qcm9ncmVzc0RvIHN0YXJ0PSJcPGRvXD4iIG1hdGNoZ3JvdXA9UHJvZ3Jlc3NEbyBlbmQ9Ilw8ZW5kXD4iIGNvbnRhaW5zPUFMTEJVVCxQcm9ncmVzc1Byb2NlZHVyZSxQcm9ncmVzc0Z1bmN0aW9uCitzeW4gcmVnaW9uIFByb2dyZXNzRm9yQmxvY2sgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1Qcm9ncmVzc0ZvciBzdGFydD0iXDxmb3JcPiIgbWF0Y2hncm91cD1Qcm9ncmVzc0ZvciBlbmQ9Ilw8ZW5kXD4iIGNvbnRhaW5zPUFMTEJVVCxQcm9ncmVzc1Byb2NlZHVyZSxQcm9ncmVzc0Z1bmN0aW9uCitzeW4gcmVnaW9uIFByb2dyZXNzUmVwZWF0QmxvY2sgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1Qcm9ncmVzc1JlcGVhdCBzdGFydD0iXDxyZXBlYXRcPiIgbWF0Y2hncm91cD1Qcm9ncmVzc1JlcGVhdCBlbmQ9Ilw8ZW5kXD4iIGNvbnRhaW5zPUFMTEJVVCxQcm9ncmVzc1Byb2NlZHVyZSxQcm9ncmVzc0Z1bmN0aW9uCitzeW4gcmVnaW9uIFByb2dyZXNzQ2FzZUJsb2NrIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9UHJvZ3Jlc3NDYXNlIHN0YXJ0PSJcPGNhc2VcPiIgbWF0Y2hncm91cD1Qcm9ncmVzc0Nhc2UgZW5kPSJcPGVuZFxzY2FzZVw+IiBjb250YWlucz1BTExCVVQsUHJvZ3Jlc3NQcm9jZWR1cmUsUHJvZ3Jlc3NGdW5jdGlvbgorCisiIFRoZXNlIGFyZSBQcm9ncmVzcyByZXNlcnZlZCB3b3JkcywKKyIgYW5kIHRoZXkgY291bGQgZ28gaW4gUHJvZ3Jlc3NSZXNlcnZlZCwKKyIgYnV0IEkgZm91bmQgaXQgbW9yZSBoZWxwZnVsIHRvIGhpZ2hsaWdodCB0aGVtIGluIGEgZGlmZmVyZW50IGNvbG9yLgorc3luIGtleXdvcmQgUHJvZ3Jlc3NDb25kaXRpb25hbAlpZiBlbHNlIHRoZW4gd2hlbiBvdGhlcndpc2UKK3N5biBrZXl3b3JkIFByb2dyZXNzRm9yCQkJCWVhY2ggd2hlcmUKKworIiBNYWtlIHRob3NlIFRPRE8gYW5kIGRlYnVnZ2luZyBub3RlcyBzdGFuZCBvdXQhCitzeW4ga2V5d29yZAlQcm9ncmVzc1RvZG8JCQljb250YWluZWQJVE9ETyBCVUcgRklYCitzeW4ga2V5d29yZCBQcm9ncmVzc0RlYnVnCQkJY29udGFpbmVkCURFQlVHCitzeW4ga2V5d29yZCBQcm9ncmVzc0RlYnVnCQkJCQkJZGVidWdnZXIKKworc3luIGtleXdvcmQgUHJvZ3Jlc3NGdW5jdGlvbglwcm9jZWR1cmUgZnVuY3Rpb24KKworc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAlhY2N1bVt1bGF0ZV0gYWN0aXZlLXdpbmRvdyBhZGQgYWxpYXMgYWxsIGFsdGVyIGFtYmlnW3VvdXNdIGFuYWx5eltlXSBhbmQgYW55IGFwcGx5IGFzIGFzY1tlbmRpbmddIGFzc2lnbiBhdCBhdHRyWy1zcGFjZV0KK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJYXV0aG9yaXphdGlvbiBhdXRvLXJldFt1cm5dIGF2YWlsW2FibGVdIGJhY2tbZ3JvdW5kXSBiZWZvcmUtaFtpZGVdIGJlZ2lucyBiZWxsIGJldHdlZW4gYmxhbmsgYnJlYWsgYnRvcyBieSBjYWxsIGNhbi1kbyBjYW4tZmluZAorc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAljZW50ZXJbZWRdIGNoZWNrIGNociBjbGVhciBjbGlwYm9hcmQgY29sIGNvbG9uIGNvbG9yIGNvbFt1bW5dIGNvbHVtbi1sYWJbZWxdIGNvbFt1bW5zXSBjb21waWxlciBjb25uZWN0ZWQgY29udHJvbCBjb3VudC1vZgorc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAljcHN0cmVhbSBjcmVhdGUgY3RvcyBjdXJyZW50IGN1cnJlbnQtY2hhbmdlZCBjdXJyZW50LWxhbmdbdWFnZV0gY3VycmVudC13aW5kb3cgY3VycmVudF9kYXRlIGN1cnNbb3JdIGRhdGFiYXNlIGRhdGFzZXJ2ZXJzCitzeW4ga2V5d29yZCBQcm9ncmVzc1Jlc2VydmVkCWRiY29kZXBhZ2UgZGJjb2xsYXRpb24gZGJuYW1lIGRicmVzdFtyaWN0aW9uc10gZGJ0YXNraWQgZGJ0eXBlIGRidmVyc1tpb25dIGRkZSBkZWJsYW5rIGRlYnVnLWxpc3QgZGVidWdnZXIgZGVjaW1hbHMgZGVjbGFyZQorc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAlkZWYgZGVmYXVsdCBkZWZhdWx0LW5veGxbYXRlXSBkZWZhdWx0LXdpbmRvdyBkZWZbaW5lXSBkZWxldGUgZGVsaW1pdGVyIGRlc2NbZW5kaW5nXSBkaWN0W2lvbmFyeV0gZGlzYWJsZSBkaXNjb25bbmVjdF0gZGlzcAorc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAlkaXNwW2xheV0gZGlzdGluY3QgZG9zIGRvd24gZHJvcCBlZGl0aW5nIGVuYWJsZSBlbmNvZGUgZW50cnkgZXJyb3Itc3RhdFt1c10gZXNjYXBlIGV0aW1lIGV4Y2VwdCBleGNsdXNpdmUKK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJZXhjbHVzaXZlWy1sb2NrXSBleGNsdXNpdmUtd2ViLXVzW2VyXSBleGlzdHMgZXhwb3J0IGZhbHNlIGZldGNoIGZpZWxkIGZpZWxkW3NdIGZpbGUtaW5mb1tybWF0aW9uXSBmaWxsIGZpbmQgZmluZC1jYXNlLXNlbnNpdGl2ZQorc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAlmaW5kLWdsb2JhbCBmaW5kLW5leHQtb2NjdXJyZW5jZSBmaW5kLXByZXYtb2NjdXJyZW5jZSBmaW5kLXNlbGVjdCBmaW5kLXdyYXAtYXJvdW5kIGZpcnN0IGZpcnN0LW9mIGZvY3VzIGZvbnQgZm9ybSBmb3JtW2F0XQorc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAlmcmFtW2VdIGZyYW1lLWNvbCBmcmFtZS1kYiBmcmFtZS1kb3duIGZyYW1lLWZpZWxkIGZyYW1lLWZpbGUgZnJhbWUtaW5kZVt4XSBmcmFtZS1saW5lIGZyYW1lLW5hbWUgZnJhbWUtcm93IGZyYW1lLXZhbFt1ZV0KK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJZnJvbSBmcm9tLWNbaGFyc10gZnJvbS1wW2l4ZWxzXSBnYXRld2F5W3NdIGdldC1ieXRlIGdldC1jb2RlcGFnZVtzXSBnZXQtY29sbFthdGlvbnNdIGdldC1rZXktdmFsW3VlXSBnZXRieXRlIGdsb2JhbCBnby1vbgorc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAlnby1wZW5kW2luZ10gZ3JhbnQgZ3JhcGhpYy1lW2RnZV0gZ3JvdXAgaGF2aW5nIGhlYWRlciBoZWxwIGhpZGUgaW1wb3J0IGluIGluZGV4IGluZGljYXRvciBpbnB1dCBpbnB1dC1vW3V0cHV0XSBpbnNlcnQKK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJaW50byBpcyBpcy1hdHRyWy1zcGFjZV0gam9pbiBrYmxhYmVsIGtleS1jb2RlIGtleS1mdW5jW3Rpb25dIGtleS1sYWJlbCBrZXljb2RlIGtleWZ1bmNbdGlvbl0ga2V5bGFiZWwga2V5cyBrZXl3b3JkIGxhYmVsCitzeW4ga2V5d29yZCBQcm9ncmVzc1Jlc2VydmVkCWxhc3QgbGFzdC1ldmVuW3RdIGxhc3Qta2V5IGxhc3Qtb2YgbGFzdGtleSBsZGJuYW1lIGxlYXZlIGxpYnJhcnkgbGlrZSBsaW5lLWNvdW50W2VyXSBsaXN0aVtuZ10gbG9ja2VkIGxvb2t1cCBtYWNoaW5lLWNsYXNzCitzeW4ga2V5d29yZCBQcm9ncmVzc1Jlc2VydmVkCW1hcCBtZW1iZXIgbWVzc2FnZSBtZXNzYWdlLWxpbmVzIG1vdXNlIG1wZSBuZXcgbmV4dCBuZXh0LXByb21wdCBubyBuby1hdHRyWy1zcGFjZV0gbm8tZXJyb3Igbm8tZltpbGxdIG5vLWhlbHAgbm8taGlkZSBuby1sYWJlbFtzXQorc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAluby1sb2NrIG5vLW1hcCBuby1tZXNbc2FnZV0gbm8tcGF1c2Ugbm8tcHJlZmVbdGNoXSBuby11bmRvIG5vLXZhbFtpZGF0ZV0gbm8td2FpdCBub3QgbnVsbCBudW0tYWxpW2FzZXNdIG51bS1kYnMgbnVtLWVudHJpZXMKK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJb2Ygb2ZmIG9sZCBvbiBvcGVuIG9wc3lzIG9wdGlvbiBvciBvcy1hcHBlbmQgb3MtY29tbWFuZCBvcy1jb3B5IG9zLWNyZWF0ZS1kaXIgb3MtZGVsZXRlIG9zLWRpciBvcy1kcml2ZVtzXSBvcy1lcnJvciBvcy1yZW5hbWUKK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJb3MyIG9zNDAwIG91dHB1dCBvdmVybGF5IHBhZ2UgcGFnZS1ib3RbdG9tXSBwYWdlLW51bVtiZXJdIHBhZ2UtdG9wIHBhcmFtW2V0ZXJdIHBhdXNlIHBkYm5hbWUgcGVyc2lzdFtlbnRdIHBpeGVscworc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAlwcmVwcm9jW2Vzc10gcHJpdmlsZWdlcyBwcm9jLWhhW25kbGVdIHByb2Mtc3RbYXR1c10gcHJvY2VzcyBwcm9ncmFtLW5hbWUgUHJvZ3Jlc3MgcHJvbXB0IHByb21wdFstZm9yXSBwcm9tc2dzIHByb3BhdGggcHJvdmVyc1tpb25dCitzeW4ga2V5d29yZCBQcm9ncmVzc1Jlc2VydmVkCXB1dCBwdXQtYnl0ZSBwdXQta2V5LXZhbFt1ZV0gcHV0Ynl0ZSBxdWVyeSBxdWVyeS10dW5pbmcgcXVpdCByLWluZGV4IHJjb2RlLWluZm9ybWF0aW9bbl0gcmVhZGtleSByZWNpZCByZWNvcmQtbGVuW2d0aF0gcmVjdFthbmdsZV0KK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJcmVsZWFzZSByZXBvc2l0aW9uIHJldGFpbiByZXRyeSByZXR1cm4gcmV0dXJuLXZhbFt1ZV0gcmV2ZXJ0IHJldm9rZSBydW4gc2F2ZSBzY2hlbWEgc2NyZWVuIHNjcmVlbi1pbyBzY3JlZW4tbGluZXMKK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJc2Nyb2xsIHNkYm5hbWUgc2VhcmNoIHNlZWsgc2VsZWN0IHNlbGYgc2Vzc2lvbiBzZXQgc2V0dXNlcltpZF0gc2hhcmVbLWxvY2tdIHNoYXJlZCBzaG93LXN0YXRbc10gc2tpcCBzb21lIHNwYWNlIHN0YXR1cyBzdHJlYW0KK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJc3RyZWFtLWlvIHN0cmluZy14cmVmIHN5c3RlbS1kaWFsb2cgdGFibGUgdGVybSB0ZXJtW2luYWxdIHRleHQgdGV4dC1jdXJzb3IgdGV4dC1zZWdbLWdyb3d0aF0gdGhpcy1wcm9jZWR1cmUgdGltZSB0aXRsZQorc3luIGtleXdvcmQgUHJvZ3Jlc3NSZXNlcnZlZAl0byB0b2RheSB0b3Atb25seSB0cmFucyB0cmFuc1thY3Rpb25dIHRyaWdnZXIgdHJpZ2dlcnMgdHJpbSB0cnVlIHVuZGVybFtpbmVdIHVuZG8gdW5mb3JtW2F0dGVkXSB1bmlvbiB1bmlxdWUgdW5peCB1cCB1cGRhdGUKK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJdXNlLWluZGV4IHVzZS1yZXZ2aWRlbyB1c2UtdW5kZXJsaW5lIHVzZXIgdXNlcltpZF0gdXNpbmcgdjZmcmFtZSB2YWx1ZSB2YWx1ZXMgdmlldyB2aWV3LWFzIHZtcyB3YWl0LWZvciB3ZWItY29uW3RleHRdCitzeW4ga2V5d29yZCBQcm9ncmVzc1Jlc2VydmVkCXdpbmRvdyB3aW5kb3ctbWF4aW1baXplZF0gd2luZG93LW1pbmltW2l6ZWRdIHdpbmRvdy1ub3JtYWwgd2l0aCB3b3JrLXRhYltsZV0gd29ya2ZpbGUgd3JpdGUgeGNvZGUgeHJlZiB5ZXMgX2NiaXQKK3N5biBrZXl3b3JkIFByb2dyZXNzUmVzZXJ2ZWQJX2NvbnRyb2wgX2xpc3QgX21lbW9yeSBfbXNnIF9wY29udHJvbCBfc2VyaWFsWy1udW1dIF90cmFjZQorCisiIFN0cmluZ3MuIEhhbmRsZXMgZW1iZWRkZWQgcXVvdGVzLgorIiBOb3RlIHRoYXQsIGZvciBzb21lIHJlYXNvbiwgUHJvZ3Jlc3MgZG9lc24ndCB1c2UgdGhlIGJhY2tzbGFzaCwgIlwiCisiIGFzIHRoZSBlc2NhcGUgY2hhcmFjdGVyOyBpdCB1c2VzIHRpbGRlLCAifiIuCitzeW4gcmVnaW9uIFByb2dyZXNzU3RyaW5nCW1hdGNoZ3JvdXA9UHJvZ3Jlc3NRdW90ZQlzdGFydD0rIisgZW5kPSsiKwlza2lwPStcfiIrCitzeW4gcmVnaW9uIFByb2dyZXNzU3RyaW5nCW1hdGNoZ3JvdXA9UHJvZ3Jlc3NRdW90ZQlzdGFydD0rJysgZW5kPSsnKwlza2lwPStcficrCisKK3N5biBtYXRjaCAgUHJvZ3Jlc3NJZGVudGlmaWVyCQkJIlw8W2EtekEtWl9dW2EtekEtWjAtOV9dKlw+KCkiCisKKyIgc3luIG1hdGNoICBQcm9ncmVzc0RlbGltaXRlcgkJCSIoKSIKKworIiBzeW4gbWF0Y2ggIFByb2dyZXNzTWF0cml4RGVsaW1pdGVyCSJbXVtdIgorCisiIElmIHlvdSBwcmVmZXIgeW91IGNhbiBoaWdobGlnaHQgdGhlIHJhbmdlCisic3luIG1hdGNoICBQcm9ncmVzc01hdHJpeERlbGltaXRlcgkJIltcZFwrXC5cLlxkXCtdIgorCitzeW4gbWF0Y2ggIFByb2dyZXNzTnVtYmVyCQkJCSJcPFxkXCtcKHVcPWxcPVx8bHVcfGZcKVw+Igorc3luIG1hdGNoICBQcm9ncmVzc0J5dGUJCQkJCSJcJFswLTlhLWZBLUZdXCsiCisKKyIgSWYgeW91IGRvbid0IGxpa2UgdGFiczoKKyJzeW4gbWF0Y2ggUHJvZ3Jlc3NTaG93VGFiICJcdCIKKyJzeW4gbWF0Y2ggUHJvZ3Jlc3NTaG93VGFiYyAiXHQiCisKK3N5biByZWdpb24gUHJvZ3Jlc3NDb21tZW50CQlzdGFydD0iL1wqIiAgZW5kPSJcKi8iIGNvbnRhaW5zPVByb2dyZXNzQ29tbWVudCxQcm9ncmVzc1RvZG8sUHJvZ3Jlc3NEZWJ1Zworc3luIG1hdGNoIFByb2dyZXNzSW5jbHVkZQkJIl5bIAldKlt7XS4qXC5pW31dIgorCitzeW4gbWF0Y2ggUHJvZ3Jlc3NTdWJzdGl0dXRlCSJeWyAJXSpbe10uKlteaV1bfV0iCitzeW4gbWF0Y2ggUHJvZ3Jlc3NQcmVQcm9jCQkiXlsgCV0qJi4qIgorCitzeW4gbWF0Y2ggUHJvZ3Jlc3NPcGVyYXRvcgkJIlshO3wpKDouPjwrKj0tXSIKKworc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcgk8PSA8PiA+PSBhYnNbb2x1dGVdIGFjY2VsZXJhdG9yIGFjcm9zcyBhZGQtZmlyc3QgYWRkLWxhc3QgYWR2aXNlIGFsZXJ0LWJveCBhbGxvdy1yZXBsaWNhdGlvbiBhbnNpLW9ubHkgYW55d2hlcmUgYXBwZW5kIGFwcGwtYWxlcnRbLWJveGVzXSBhcHBsaWNhdGlvbiBhcy1jdXJzb3IgYXNrLW92ZXJ3cml0ZQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglhdHRhY2hbbWVudF0gYXV0by1lbmQta2V5IGF1dG8tZW5ka2V5IGF1dG8tZ28gYXV0by1pbmRbZW50XSBhdXRvLXJlc2l6ZSBhdXRvLXpbYXBdIGF2YWlsYWJsZS1mb3JtYXRzIGF2ZVtyYWdlXSBhdmcgYmFja3dhcmRbc10gYmFzZS1rZXkgYmF0Y2hbLW1vZGVdIGJnY1tvbG9yXSBiaW5hcnkKK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJYmluZC13aGVyZSBibG9jay1pdGVyYXRpb24tZGlzcGxheSBib3JkZXItYm90dG9tIGJvcmRlci1ib3R0b20tY2hbYXJzXSBib3JkZXItYm90dG9tLXBpW3hlbHNdIGJvcmRlci1sZWZ0IGJvcmRlci1sZWZ0LWNoYXJbc10gYm9yZGVyLWxlZnQtcGl4ZVtsc10gYm9yZGVyLXJpZ2h0IGJvcmRlci1yaWdodC1jaGFbcnNdCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCWJvcmRlci1yaWdodC1waXhbZWxzXSBib3JkZXItdFtvcF0gYm9yZGVyLXRbb3AtY2hhcnNdIGJvcmRlci10b3AtcGl4ZWxbc10gYm90aCBib3R0b20gYm94IGJveC1zZWxlY3RbYWJsZV0gYnJvd3NlIGJyb3dzZS1oZWFkZXIgYnVmZmVyIGJ1ZmZlci1jaGFycyBidWZmZXItbGluZXMKK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJYnV0dG9uIGJ1dHRvbltzXSBieXRlIGNhY2hlIGNhY2hlLXNpemUgY2FuLXF1ZXJ5IGNhbi1zZXQgY2FuY2VsLWJyZWFrIGNhbmNlbC1idXR0b24gY2FwcyBjYXJlZnVsLXBhaW50IGNhc2Utc2Vuc2l0aXZlIGNkZWNsIGNoYXJbYWN0ZXJdIGNoYXJhY3Rlcl9sZW5ndGggY2hhcnNldAorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcgljaGVja2VkIGNob29zZSBjbGVhci1zZWxlY3RbaW9uXSBjbG9zZSBjb2RlIGNvZGVwYWdlIGNvZGVwYWdlLWNvbnZlcnQgY29sLW9mIGNvbG9uLWFsaWduW2VkXSBjb2xvci10YWJsZSBjb2x1bW4tYmdjW29sb3JdIGNvbHVtbi1kY29sb3IgY29sdW1uLWZnY1tvbG9yXSBjb2x1bW4tZm9udAorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcgljb2x1bW4tbGFiZWwtYmdjW29sb3JdIGNvbHVtbi1sYWJlbC1kY29sb3IgY29sdW1uLWxhYmVsLWZnY1tvbG9yXSBjb2x1bW4tbGFiZWwtZm9udCBjb2x1bW4tb2YgY29sdW1uLXBmY1tvbG9yXSBjb2x1bW4tc2Nbcm9sbGluZ10gY29tYm8tYm94IGNvbW1hbmQgY29tcGlsZSBjb21wbGV0ZQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcgljb25uZWN0IGNvbnN0cmFpbmVkIGNvbnRlbnRzIGNvbnRleHQgY29udGV4dC1wb3BbdXBdIGNvbnRyb2wtY29udGFpbmVbcl0gY1tvbnRyb2wtZm9ybV0gY29udmVydC10by1vZmZzZVt0XSBjb252ZXJ0IGNvdW50IGNwY2FzZSBjcGNvbGwgY3BpbnRbZXJuYWxdIGNwbG9nCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCWNwcHJpbnQgY3ByY29kZWluIGNwcmNvZGVvdXQgY3B0ZXJtIGNyYy12YWxbdWVdIGNbcmVhdGUtY29udHJvbF0gY3JlYXRlLXJlc3VsdC1saXN0LWVudHJ5IGNyZWF0ZS10ZXN0LWZpbGUgY3VycmVudC1jb2x1bW4gY3VycmVudC1lbnZpcm9ubVtlbnRdIGN1cnJlbnQtaXRlcmF0aW9uCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCWN1cnJlbnQtcmVzdWx0LXJvdyBjdXJyZW50LXJvdy1tb2RpZmllZCBjdXJyZW50LXZhbHVlIGN1cnNvci1jaGFyIGN1cnNvci1saW5lIGN1cnNvci1vZmZzZXQgZGF0YS1lbnRyeS1yZXR1cltuXSBkYXRhLXRbeXBlXSBkYXRlIGRhdGUtZltvcm1hdF0gZGF5IGRiLXJlZmVyZW5jZXMKK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJZGNvbG9yIGRkZS1lcnJvciBkZGUtaVtkXSBkZGUtaXRlbSBkZGUtbmFtZSBkZGUtdG9waWMgZGVidVtnXSBkZWNbaW1hbF0gZGVmYXVsdC1iW3V0dG9uXSBkZWZhdWx0LWV4dGVuc2lvW25dIGRlZmVyLWxvYi1mZXRjaCBkZWZpbmVkIGRlbGV0ZS1jaGFyIGRlbGV0ZS1jdXJyZW50LXJvdworc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglkZWxldGUtbGluZSBkZWxldGUtc2VsZWN0ZWQtcm93IGRlbGV0ZS1zZWxlY3RlZC1yb3dzIGRlc2VsZWN0LWZvY3VzZWQtcm93IGRlc2VsZWN0LXJvd3MgZGVzZWxlY3Qtc2VsZWN0ZWQtcm93IGRbZXNpZ24tbW9kZV0gZGlhbG9nLWJveCBkaWFsb2ctaGVscCBkaXIgZGlzYWJsZWQgZGlzcGxheS1tZXNzYWdlCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCWRpc3BsYXktdFt5cGVdIGRvdWJsZSBkcmFnLWVuYWJsZWQgZHJvcC1kb3duIGRyb3AtZG93bi1saXN0IGR1bXAgZHluYW1pYyBlY2hvIGVkZ2UgZWRnZVstY2hhcnNdIGVkZ2UtcFtpeGVsc10gZWRpdG9yIGVtcHR5IGVuZC1rZXkgZW5ka2V5IGVudGVyZWQgZXEgZXJyb3IgZXJyb3ItY29sW3Vtbl0KK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJZXJyb3Itcm93IGV2ZW50LXRbeXBlXSBldmVudFtzXSBleGNsdXNpdmUtaWQgZXhlY3V0ZSBleHAgZXhwYW5kIGV4dGVuZGVkIGV4dGVudCBleHRlcm5hbCBleHRyYWN0IGZldGNoLXNlbGVjdGVkLXJvdyBmZ2Nbb2xvcl0gZmlsZSBmaWxlLW5hbWUgZmlsZS1vZmZbc2V0XSBmaWxlLXR5cGUKK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJZmlsZW5hbWUgZmlsbC1pbiBmaWxsZWQgZmlsdGVycyBmaXJzdC1jaGlsZCBmaXJzdC1jb2x1bW4gZmlyc3QtcHJvY1tlZHVyZV0gZmlyc3QtdGFiLWlbdGVtXSBmaXhlZC1vbmx5IGZsb2F0IGZvY3VzZWQtcm93IGZvbnQtYmFzZWQtbGF5b3V0IGZvbnQtdGFibGUgZm9yY2UtZmlsZQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglmb3JlW2dyb3VuZF0gZm9ybS1pbnB1dCBmb3J3YXJkW3NdIGZyYW1lLXNwYVtjaW5nXSBmcmFtZS14IGZyYW1lLXkgZnJlcXVlbmN5IGZyb20tY3VyW3JlbnRdIGZ1bGwtaGVpZ2h0IGZ1bGwtaGVpZ2h0LWNoYXJbc10gZnVsbC1oZWlnaHQtcGl4ZVtsc10gZnVsbC1wYXRoblthbWVdCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCWZ1bGwtd2lkdGggZnVsbC13aWR0aFstY2hhcnNdIGZ1bGwtd2lkdGgtcGl4ZWxbc10gZ2UgZ2V0IGdldC1ibHVlWy12YWx1ZV0gZ1tldC1jaGFyLXByb3BlcnR5XSBnZXQtZG91YmxlIGdldC1keW5hbWljIGdldC1maWxlIGdldC1mbG9hdCBnZXQtZ3JlZW5bLXZhbHVlXQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglnZXQtaXRlcmF0aW9uIGdldC1saWNlbnNlIGdldC1sb25nIGdldC1tZXNzYWdlIGdldC1udW1iZXIgZ2V0LXBvaW50ZXItdmFsdWUgZ2V0LXJlZFstdmFsdWVdIGdldC1yZXBvc2l0aW9uZWQtcm93IGdldC1zZWxlY3RlZC13aWRbZ2V0XSBnZXQtc2hvcnQgZ2V0LXNpZ25hdHVyZSBnZXQtc2l6ZQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglnZXQtc3RyaW5nIGdldC10YWItaXRlbSBnZXQtdGV4dC1oZWlnaHQgZ2V0LXRleHQtaGVpZ2h0LWNoYXJbc10gZ2V0LXRleHQtaGVpZ2h0LXBpeGVbbHNdIGdldC10ZXh0LXdpZHRoIGdldC10ZXh0LXdpZHRoLWNbaGFyc10gZ2V0LXRleHQtd2lkdGgtcGl4ZWxbc10gZ2V0LXVuc2lnbmVkLXNob3J0CitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCWdyYXllZCBncmlkLWZhY3Rvci1ob3Jpem9udFthbF0gZ3JpZC1mYWN0b3ItdmVydFtpY2FsXSBncmlkLXNldCBncmlkLXNuYXAgZ3JpZC11bml0LWhlaWdodCBncmlkLXVuaXQtaGVpZ2h0LWNoYVtyc10gZ3JpZC11bml0LWhlaWdodC1waXhbZWxzXSBncmlkLXVuaXQtd2lkdGggZ3JpZC11bml0LXdpZHRoLWNoYXJbc10KK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJZ3JpZC11bml0LXdpZHRoLXBpeGVbbHNdIGdyaWQtdmlzaWJsZSBndCBoYW5kbGUgaGVpZ2h0IGhlaWdodFstY2hhcnNdIGhlaWdodC1wW2l4ZWxzXSBoZWxwLWNvblt0ZXh0XSBoZWxwZmlsZS1uW2FtZV0gaGlkZGVuIGhpbnQgaG9yaVt6b250YWxdIGh3bmQgaW1hZ2UgaW1hZ2UtZG93bgorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglpbWFnZS1pbnNlbnNpdGl2ZSBpbWFnZS1zaXplIGltYWdlLXNpemUtY1toYXJzXSBpbWFnZS1zaXplLXBpeGVsW3NdIGltYWdlLXVwIGltbWVkaWF0ZS1kaXNwbGF5IGluZGV4LWhpbnQgaW5kZXhlZC1yZXBvc2l0aW9uIGluZm9bcm1hdGlvbl0gaW5pdCBpbml0W2lhbF0gaW5pdGlhbC1kaXIKK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJaW5pdGlhbC1maWx0ZXIgaW5pdGlhdGUgaW5uZXIgaW5uZXItY2hhcnMgaW5uZXItbGluZXMgaW5zZXJ0LWJbYWNrdGFiXSBpbnNlcnQtZmlsZSBpbnNlcnQtcm93IGluc2VydC1zdHJpbmcgaW5zZXJ0LXRbYWJdIGludFtlZ2VyXSBpbnRlcm5hbC1lbnRyaWVzIGlzLWxlYWQtYnl0ZQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglpcy1yb3ctc2VsZWN0ZWQgaXMtc2VsZWN0ZWQgaXRlbSBpdGVtcy1wZXItcm93IGpvaW4tYnktc3FsZGIga2VlcC1mcmFtZS16LW9yZFtlcl0ga2VlcC1tZXNzYWdlcyBrZWVwLXRhYi1vcmRlciBrZXkga2V5d29yZC1hbGwgbGFiZWwtYmdjW29sb3JdIGxhYmVsLWRjW29sb3JdIGxhYmVsLWZnY1tvbG9yXQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglsYWJlbC1mb250IGxhYmVsLXBmY1tvbG9yXSBsYWJlbHMgbGFuZ3VhZ2Vbc10gbGFyZ2UgbGFyZ2UtdG8tc21hbGwgbGFzdC1jaGlsZCBsYXN0LXRhYi1pW3RlbV0gbGFzdC1wcm9jZVtkdXJlXSBsYyBsZSBsZWFkaW5nIGxlZnQgbGVmdC1hbGlnbltlZF0gbGVmdC10cmltIGxlbmd0aAorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglsaW5lIGxpc3QtZXZlbnRzIGxpc3QtaXRlbXMgbGlzdC1xdWVyeS1hdHRycyBsaXN0LXNldC1hdHRycyBsaXN0LXdpZGdldHMgbG9hZCBsW29hZC1jb250cm9sXSBsb2FkLWljb24gbG9hZC1pbWFnZSBsb2FkLWltYWdlLWRvd24gbG9hZC1pbWFnZS1pbnNlbnNpdGl2ZSBsb2FkLWltYWdlLXVwCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCWxvYWQtbW91c2UtcG9pbnRbZXJdIGxvYWQtc21hbGwtaWNvbiBsb2cgbG9naWNhbCBsb29rYWhlYWQgbG93ZXIgbHQgbWFudWFsLWhpZ2hsaWdodCBtYXJnaW4tZXh0cmEgbWFyZ2luLWhlaWdodCBtYXJnaW4taGVpZ2h0LWNoW2Fyc10gbWFyZ2luLWhlaWdodC1waVt4ZWxzXSBtYXJnaW4td2lkdGgKK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJbWFyZ2luLXdpZHRoLWNoYVtyc10gbWFyZ2luLXdpZHRoLXBpeFtlbHNdIG1hdGNoZXMgbWF4IG1heC1jaGFycyBtYXgtZGF0YS1ndWVzcyBtYXgtaGVpZ2h0IG1heC1oZWlnaHRbLWNoYXJzXSBtYXgtaGVpZ2h0LXBpeGVsW3NdIG1heC1yb3dzIG1heC1zaXplIG1heC12YWxbdWVdIG1heC13aWR0aAorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcgltYXgtd2lkdGhbLWNoYXJzXSBtYXgtd2lkdGgtcFtpeGVsc10gbWF4aW1pemUgbWF4W2ltdW1dIG1lbW9yeSBtZW51IG1lbnUtYmFyIG1lbnUtaXRlbSBtZW51LWtbZXldIG1lbnUtbVtvdXNlXSBtZW51YmFyIG1lc3NhZ2UtYXJlYSBtZXNzYWdlLWFyZWEtZm9udCBtZXNzYWdlLWxpbmUKK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJbWluIG1pbi1oZWlnaHQgbWluLWhlaWdodFstY2hhcnNdIG1pbi1oZWlnaHQtcGl4ZWxbc10gbWluLXNpemUgbWluLXZhbFt1ZV0gbWluLXdpZHRoIG1pbi13aWR0aFstY2hhcnNdIG1pbi13aWR0aC1wW2l4ZWxzXSBtaW5baW11bV0gbW9kIG1vZGlmaWVkIG1vZFt1bG9dIG1vbnRoIG1vdXNlLXBbb2ludGVyXQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcgltb3ZhYmxlIG1vdmUtYWZ0ZXItdGFiLWlbdGVtXSBtb3ZlLWJlZm9yZS10YWItW2l0ZW1dIG1vdmUtY29sW3Vtbl0gbW92ZS10by1iW290dG9tXSBtb3ZlLXRvLWVvZiBtb3ZlLXRvLXRbb3BdIG11bHRpcGxlIG11bHRpcGxlLWtleSBtdWx0aXRhc2tpbmctaW50ZXJ2YWwgbXVzdC1leGlzdAorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcgluYW1lIG5hdGl2ZSBuZSBuZXctcm93IG5leHQtY29sW3Vtbl0gbmV4dC1zaWJsaW5nIG5leHQtdGFiLWl0ZVttXSBuZXh0LXZhbHVlIG5vLWFwcGx5IG5vLWFzc2lnbiBuby1iaW5kLXdoZXJlIG5vLWJveCBuby1jb2x1bW4tc2Nyb2xsW2luZ10gbm8tY29udmVydCBuby1jdXJyZW50LXZhbHVlCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCW5vLWRlYnVnIG5vLWRyYWcgbm8tZWNobyBuby1pbmRleC1oaW50IG5vLWpvaW4tYnktc3FsZGIgbm8tbG9va2FoZWFkIG5vLXJvdy1tYXJrZXJzIG5vLXNjcm9sbGluZyBuby1zZXBhcmF0ZS1jb25uZWN0aW9uIG5vLXNlcGFyYXRvcnMgbm8tdW5kW2VybGluZV0gbm8td29yZC13cmFwCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCW5vbmUgbnVtLWJ1dFt0b25zXSBudW0tY29sW3VtbnNdIG51bS1jb3BpZXMgbnVtLWZvcm1hdHMgbnVtLWl0ZW1zIG51bS1pdGVyYXRpb25zIG51bS1saW5lcyBudW0tbG9ja2VkLWNvbHVtW25zXSBudW0tbWVzc2FnZXMgbnVtLXJlc3VsdHMgbnVtLXNlbGVjdGVkIG51bS1zZWxlY3RlZC1yb3dzCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCW51bS1zZWxlY3RlZC13aWRnZXRzIG51bS10YWJzIG51bS10by1yZXRhaW4gbnVtZXJpYyBudW1lcmljLWZbb3JtYXRdIG9jdGV0X2xlbmd0aCBvayBvay1jYW5jZWwgb24tZnJhbWVbLWJvcmRlcl0gb3JkZXJlZC1qb2luIG9yZGluYWwgb3JpZW50YXRpb24gb3MtZ2V0ZW52IG91dGVyCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCW91dGVyLWpvaW4gb3ZlcnJpZGUgb3duZXIgcGFnZS1zaXplIHBhZ2Utd2lkW3RoXSBwYWdlZCBwYXJlbnQgcGFydGlhbC1rZXkgcGFzY2FsIHBhdGhuYW1lIHBmY1tvbG9yXSBwaW5uYWJsZSBwaXhlbHMtcGVyLWNvbHVtW25dIHBpeGVscy1wZXItcm93IHBvcHVwLW1bZW51XSBwb3B1cC1vW25seV0KK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJcG9zaXRpb24gcHJlY2lzaW9uIHByZXNlbFtlY3RdIHByZXYgcHJldi1jb2xbdW1uXSBwcmV2LXNpYmxpbmcgcHJldi10YWItaVt0ZW1dIHByaW1hcnkgcHJpbnRlci1jb250cm9sLWhhbmRsZSBwcmludGVyLXNldHVwIHByaXZhdGUtZFthdGFdIHByb2ZpbGVyIFByb2dyZXNzLXNbb3VyY2VdCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCXB1Ymxpc2ggcHV0LWRvdWJsZSBwdXQtZmxvYXQgcHV0LWxvbmcgcHV0LXNob3J0IHB1dC1zdHJpbmcgcHV0LXVuc2lnbmVkLXNob3J0IHF1ZXJ5LW9mZi1lbmQgcXVlc3Rpb24gcmFkaW8tYnV0dG9ucyByYWRpby1zZXQgcmFuZG9tIHJhdyByYXctdHJhbnNmZXIgcmVhZC1maWxlIHJlYWQtb25seQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglyZWFsIHJlY3Vyc2l2ZSByZWZyZXNoIHJlZnJlc2hhYmxlIHJlcGxhY2UgcmVwbGFjZS1zZWxlY3Rpb24tdGV4dCByZXBsaWNhdGlvbi1jcmVhdGUgcmVwbGljYXRpb24tZGVsZXRlIHJlcGxpY2F0aW9uLXdyaXRlIHJlcXVlc3QgcmVzaXphW2JsZV0gcmVzaXplIHJldHJ5LWNhbmNlbAorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglyZXR1cm4taW5zW2VydGVkXSByZXR1cm4tdG8tc3RhcnQtZGlbcl0gcmV2ZXJzZS1mcm9tIHJpZ2h0IHJpZ2h0LWFsaWduW2VkXSByaWdodC10cmltIHJvdW5kIHJvdyByb3ctbWFbcmtlcnNdIHJvdy1vZiByb3dpZCBydWxlIHJ1bGUtcm93IHJ1bGUteSBzYXZlLWFzIHNhdmUtZmlsZQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglzY3JlZW4tdmFsW3VlXSBzY3JvbGwtYmFycyBzY3JvbGwtZGVsdGEgc2Nyb2xsLWhvcml6LXZhbHVlIHNjcm9sbC1vZmZzZXQgc2Nyb2xsLXRvLWN1cnJlbnQtcm93IHNjcm9sbC10by1pW3RlbV0gc2Nyb2xsLXRvLXNlbGVjdGVkLXJvdyBzY3JvbGwtdmVydC12YWx1ZSBzY3JvbGxhYmxlCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCXNjcm9sbGJhci1ob3Jpem9bbnRhbF0gc2Nyb2xsYmFyLXZlcnRpY1thbF0gc2Nyb2xsZWQtcm93LXBvc2l0aW9bbl0gc2Nyb2xsaW5nIHNlLWNoZWNrLXBvb2xzIHNlLWVuYWJsZS1vZltmXSBzZS1lbmFibGUtb24gc2UtbnVtLXBvb2xzIHNlLXVzZS1tZXNzYVtnZV0gc2VjdGlvbiBzZWxlY3QtZm9jdXNlZC1yb3cKK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJc2VsZWN0LW5leHQtcm93IHNlbGVjdC1wcmV2LXJvdyBzZWxlY3QtcmVwb3NpdGlvbmVkLXJvdyBzZWxlY3Qtcm93IHNlbGVjdGFibGUgc2VsZWN0ZWQgc2VsZWN0ZWQtaXRlbXMgc2VsZWN0aW9uLWVuZCBzZWxlY3Rpb24tbGlzdCBzZWxlY3Rpb24tc3RhcnQgc2VsZWN0aW9uLXRleHQKK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJc2VuZCBzZW5zaXRpdmUgc2VwYXJhdGUtY29ubmVjdGlvbiBzZXBhcmF0b3JzIHNldC1ibHVlWy12YWx1ZV0gc2V0LWJyZWFrIHNldC1jZWxsLWZvY3VzIHNldC1jb250ZW50cyBzZXQtZHluYW1pYyBzZXQtZ3JlZW5bLXZhbHVlXSBzZXQtbGVha3BvaW50IHNldC1wb2ludGVyLXZhbHVbZV0KK3N5biBrZXl3b3JkIFByb2dyZXNzT3BlcmF0b3IJc1tldC1wcm9wZXJ0eV0gc2V0LXJlZFstdmFsdWVdIHNldC1yZXBvc2l0aW9uZWQtcm93IHNldC1zZWxlY3Rpb24gc2V0LXNpemUgc2V0LXdhaXRbLXN0YXRlXSBzaWRlLWxhYiBzaWRlLWxhYltlXSBzaWRlLWxhYltlbF0gc2lkZS1sYWJlbC1oYW5kbFtlXSBzaWRlLWxhYltlbHNdIHNpbGVudAorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcglzaW1wbGUgc2luZ2xlIHNpemUgc2l6ZS1jW2hhcnNdIHNpemUtcFtpeGVsc10gc2xpZGVyIHNtYWxsaW50IHNvcnQgc291cmNlIHNvdXJjZS1wcm9jZWR1cmUgc3FsIHNxcnQgc3RhcnQgc3RhdHVzLWFyZWEgc3RhdHVzLWFyZWEtZm9udCBzdGF0dXMtYmFyIHN0ZGNhbGwgc3RlbmNpbGVkIHN0b3Agc3RvcHBlW2RdCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCXN0b3JlZC1wcm9jW2VkdXJlXSBzdHJpbmcgc3ViLWF2ZVtyYWdlXSBzdWItY291bnQgc3ViLW1heFtpbXVtXSBzdWItbWVbbnVdIHN1Yi1tZW51LWhlbHAgc3ViLW1pbltpbXVtXSBzdWItdG90YWwgc3Vic2NyaWJlIHN1YnN0W2l0dXRlXSBzdWJzdHJbaW5nXSBzdWJ0eXBlIHN1bSBzdXBlciBzdXBwcmVzcy13YXJuaW5nW3NdCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCXN5c3RlbS1hbGVydC1ib3hbZXNdIHN5c3RlbS1oZWxwIHRhYi1wb3NpdGlvbiB0YWJiYWJsZSB0YXJnZXQgdGFyZ2V0LXByb2NlZHVyZSB0ZW1wLWRpcltlY3RvcnldIHRlbXAtdGFibGUgdGVybWluYXRlIHRleHQtc2VsZWN0ZWQgdGhyZWUtZCB0aHJvdWdoIHRocnUgdGljLW1hcmtzIHRpbWUtc291cmNlIHRpdGxlLWJnY1tvbG9yXQorc3luIGtleXdvcmQgUHJvZ3Jlc3NPcGVyYXRvcgl0aXRsZS1kY1tvbG9yXSB0aXRsZS1mZ2Nbb2xvcl0gdGl0bGUtZm9bbnRdIHRvLXJvd2lkIHRvZ2dsZS1ib3ggdG9vbC1iYXIgdG9wIHRvcGljIHRvdGFsIHRyYWlsaW5nIHRydW5jW2F0ZV0gdHlwZSB1bmJ1ZmZbZXJlZF0gdW5pcXVlLWlkIHVubG9hZCB1bnN1YnNjcmliZSB1cHBlciB1c2UgdXNlLWRpY1t0LWV4cHNdCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCXVzZS1maWxlbmFtZSB1c2UtdGV4dCB2NmRpc3BsYXkgdmFsaWQtZXZlbnQgdmFsaWQtaGFuZGxlIHZhbGlkYXRlIHZhbGlkYXRlLWNvbmRpdGlvbiB2YWxpZGF0ZS1tZXNzYWdlIHZhcltpYWJsZV0gdmVydFtpY2FsXSB2aXJ0dWFsLWhlaWdodCB2aXJ0dWFsLWhlaWdodC1jW2hhcnNdCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCXZpcnR1YWwtaGVpZ2h0LXBpeGVsW3NdIHZpcnR1YWwtd2lkdGggdmlydHVhbC13aWR0aC1jaFthcnNdIHZpcnR1YWwtd2lkdGgtcGlbeGVsc10gdmlzaWJsZSB3YWl0IHdhcm5pbmcgd2Vla2RheSB3aWRnZXQgd2lkZ2V0LWVbbnRlcl0gd2lkZ2V0LWhbYW5kbGVdIHdpZGdldC1sW2VhdmVdCitzeW4ga2V5d29yZCBQcm9ncmVzc09wZXJhdG9yCXdpZGdldC1wb29sIHdpZHRoIHdpZHRoWy1jaGFyc10gd2lkdGgtcFtpeGVsc10gd2luZG93LW5hbWUgd2luZG93LXN0YVt0ZV0gd2luZG93LXN5c1t0ZW1dIHdvcmQtd3JhcCB4LW9mIHktb2YgeWVhciB5ZXMtbm8geWVzLW5vLWNhbmNlbCBfZGNtCisKK3N5biBrZXl3b3JkIFByb2dyZXNzVHlwZQkgICAgY2hhclthY3Rlcl0gaW50W2VnZXJdIGZvcm1hdAorc3luIGtleXdvcmQgUHJvZ3Jlc3NUeXBlCSAgICB2YXJbaWFibGVdIGxvZ1tpY2FsXSBkYVt0ZV0KKworc3luIHN5bmMgbGluZXM9ODAwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3Byb2dyZXNzX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKwlsZXQgZGlkX3Byb2dyZXNzX3N5bnRheF9pbml0cyA9IDEKKwljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuIENhbiBiZSBvdmVycmlkZGVuIGxhdGVyLgorICBIaUxpbmsgUHJvZ3Jlc3NCeXRlCQkJICAgIE51bWJlcgorICBIaUxpbmsgUHJvZ3Jlc3NDYXNlCQkJCVJlcGVhdAorICBIaUxpbmsgUHJvZ3Jlc3NDb21tZW50CQkJU3RhdHVzTGluZQorICBIaUxpbmsgUHJvZ3Jlc3NDb25kaXRpb25hbAkJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIFByb2dyZXNzRGVidWcJCQkJRGVidWcKKyAgSGlMaW5rIFByb2dyZXNzRG8JCQkJCVJlcGVhdAorICBIaUxpbmsgUHJvZ3Jlc3NFbmRFcnJvcgkJCUVycm9yCisgIEhpTGluayBQcm9ncmVzc0ZvcgkJCQlSZXBlYXQKKyAgSGlMaW5rIFByb2dyZXNzRnVuY3Rpb24JCQlQcm9jZWR1cmUKKyAgSGlMaW5rIFByb2dyZXNzSW5jbHVkZQkJCUluY2x1ZGUKKyAgSGlMaW5rIFByb2dyZXNzTGFiZWwJCQkJTGFiZWwKKyAgSGlMaW5rIFByb2dyZXNzTWF0cml4RGVsaW1pdGVyCUlkZW50aWZpZXIKKyAgSGlMaW5rIFByb2dyZXNzTW9kaWZpZXIJCQlUeXBlCisgIEhpTGluayBQcm9ncmVzc051bWJlcgkJCQlOdW1iZXIKKyAgSGlMaW5rIFByb2dyZXNzT3BlcmF0b3IJCQlGdW5jdGlvbgorICBIaUxpbmsgUHJvZ3Jlc3NQcmVQcm9jCQkJUHJlUHJvYworICBIaUxpbmsgUHJvZ3Jlc3NQcm9jZWR1cmUJCQlQcm9jZWR1cmUKKyAgSGlMaW5rIFByb2dyZXNzUXVvdGUJCQkJRGVsaW1pdGVyCisgIEhpTGluayBQcm9ncmVzc1JlcGVhdAkJCQlSZXBlYXQKKyAgSGlMaW5rIFByb2dyZXNzUmVzZXJ2ZWQJCQlJZGVudGlmaWVyCisgIEhpTGluayBQcm9ncmVzc1N0cmluZwkJCQlTdHJpbmcKKyAgSGlMaW5rIFByb2dyZXNzU3RydWN0dXJlCQkJU3RydWN0dXJlCisgIEhpTGluayBQcm9ncmVzc1N1YnN0aXR1dGUJCQlQcmVQcm9jCisgIEhpTGluayBQcm9ncmVzc1RvZG8JCQkJVG9kbworICBIaUxpbmsgUHJvZ3Jlc3NUeXBlCQkJCVN0YXRlbWVudAorICBIaUxpbmsgUHJvZ3Jlc3NVbmNsYXNzaWZpZWQJCVN0YXRlbWVudAorCisgICIgT3B0aW9uYWwgaGlnaGxpZ2h0aW5nCisgICIgSGlMaW5rIFByb2dyZXNzRGVsaW1pdGVyCQlJZGVudGlmaWVyCisgICIgSGlMaW5rIFByb2dyZXNzU2hvd1RhYgkJCUVycm9yCisgICIgSGlMaW5rIFByb2dyZXNzU2hvd1RhYmMJCQlFcnJvcgorICAiIEhpTGluayBQcm9ncmVzc0lkZW50aWZpZXIJCUlkZW50aWZpZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHJvZ3Jlc3MiCisKKyIgdmltOiB0cz00IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3Byb2xvZy52aW0gYi9ydW50aW1lL3N5bnRheC9wcm9sb2cudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYTFjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wcm9sb2cudmltCkBAIC0wLDAgKzEsMTIwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgUFJPTE9HCisiIE1haW50YWluZXJzOiBSYWxwaCBCZWNrZXQgPHJ3YWIxQGNhbS5zcmkuY28udWs+LAorIgkgICAgICAgVGhvbWFzIEtvZWhsZXIgPGplYW4tbHVjQHBpY2FyZC5mcmFua2VuLmRlPgorIiBMYXN0IENoYW5nZTogMjAwMyBNYXkgMTEKKyIgVVJMOgkgICAgICAgaHR0cDovL2plYW5sdWMtcGljYXJkLmRlL3ZpbS9zeW50YXgvcHJvbG9nLnZpbQorCisiIFRoZXJlIGFyZSB0d28gc2V0cyBvZiBoaWdobGlnaHRpbmcgaW4gaGVyZToKKyIgSWYgdGhlICJwcm9sb2dfaGlnaGxpZ2h0aW5nX2NsZWFuIiB2YXJpYWJsZSBleGlzdHMsIGl0IGlzIHJhdGhlciBzcGFyc2UuCisiIE90aGVyd2lzZSB5b3UgZ2V0IG1vcmUgaGlnaGxpZ2h0aW5nLgorCisiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFByb2xvZyBpcyBjYXNlIHNlbnNpdGl2ZS4KK3N5biBjYXNlIG1hdGNoCisKKyIgVmVyeSBzaW1wbGUgaGlnaGxpZ2h0aW5nIGZvciBjb21tZW50cywgY2xhdXNlIGhlYWRzIGFuZAorIiBjaGFyYWN0ZXIgY29kZXMuICBJdCByZXNwZWN0cyBwcm9sb2cgc3RyaW5ncyBhbmQgYXRvbXMuCisKK3N5biByZWdpb24gICBwcm9sb2dDQ29tbWVudAlzdGFydD0rL1wqKyBlbmQ9K1wqLysKK3N5biBtYXRjaCAgICBwcm9sb2dDb21tZW50CSslLiorCisKK3N5biBrZXl3b3JkICBwcm9sb2dLZXl3b3JkCW1vZHVsZSBtZXRhX3ByZWRpY2F0ZSBtdWx0aWZpbGUgZHluYW1pYworc3luIG1hdGNoICAgIHByb2xvZ0NoYXJDb2RlCSswJ1xcXD0uKworc3luIHJlZ2lvbiAgIHByb2xvZ1N0cmluZwlzdGFydD0rIisgc2tpcD0rXFwiKyBlbmQ9KyIrCitzeW4gcmVnaW9uICAgcHJvbG9nQXRvbQkJc3RhcnQ9KycrIHNraXA9K1xcJysgZW5kPSsnKworc3luIHJlZ2lvbiAgIHByb2xvZ0NsYXVzZUhlYWQgICBzdGFydD0rXlthLXpdW14oXSooKyBza2lwPStcLlteCQkJICAgIF0rIGVuZD0rOi1cfFwuJFx8XC5bCV1cfC0tPisKKworaWYgIWV4aXN0cygicHJvbG9nX2hpZ2hsaWdodGluZ19jbGVhbiIpCisKKyAgIiBzb21lIGtleXdvcmRzCisgICIgc29tZSBjb21tb24gcHJlZGljYXRlcyBhcmUgYWxzbyBoaWdobGlnaHRlZCBhcyBrZXl3b3JkcworICAiIGlzIHRoZXJlIGEgYmV0dGVyIHNvbHV0aW9uPworICBzeW4ga2V5d29yZCBwcm9sb2dLZXl3b3JkICAgYWJvbGlzaCBjdXJyZW50X291dHB1dCAgcGVla19jb2RlCisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBhcHBlbmQgIGN1cnJlbnRfcHJlZGljYXRlICAgICAgIHB1dF9ieXRlCisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBhcmcgICAgIGN1cnJlbnRfcHJvbG9nX2ZsYWcgICAgIHB1dF9jaGFyCisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBhc3NlcnRhIGZhaWwgICAgcHV0X2NvZGUKKyAgc3luIGtleXdvcmQgcHJvbG9nS2V5d29yZCAgIGFzc2VydHogZmluZGFsbCByZWFkCisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBhdF9lbmRfb2Zfc3RyZWFtCSAgICAgIGZsb2F0ICAgcmVhZF90ZXJtCisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBhdG9tICAgIGZsdXNoX291dHB1dCAgICByZXBlYXQKKyAgc3luIGtleXdvcmQgcHJvbG9nS2V5d29yZCAgIGF0b21fY2hhcnMgICAgICBmdW5jdG9yIHJldHJhY3QKKyAgc3luIGtleXdvcmQgcHJvbG9nS2V5d29yZCAgIGF0b21fY29kZXMgICAgICBnZXRfYnl0ZQkgICAgICBzZXRfaW5wdXQKKyAgc3luIGtleXdvcmQgcHJvbG9nS2V5d29yZCAgIGF0b21fY29uY2F0ICAgICBnZXRfY2hhcgkgICAgICBzZXRfb3V0cHV0CisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBhdG9tX2xlbmd0aCAgICAgZ2V0X2NvZGUJICAgICAgc2V0X3Byb2xvZ19mbGFnCisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBhdG9taWMgIGhhbHQgICAgc2V0X3N0cmVhbV9wb3NpdGlvbgorICBzeW4ga2V5d29yZCBwcm9sb2dLZXl3b3JkICAgYmFnb2YgICBpbnRlZ2VyIHNldG9mCisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBjYWxsICAgIGlzICAgICAgc3RyZWFtX3Byb3BlcnR5CisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBjYXRjaCAgIG5sICAgICAgc3ViX2F0b20KKyAgc3luIGtleXdvcmQgcHJvbG9nS2V5d29yZCAgIGNoYXJfY29kZSAgICAgICBub252YXIgIHRocm93CisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBjaGFyX2NvbnZlcnNpb24gbnVtYmVyICB0cnVlCisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBjbGF1c2UgIG51bWJlcl9jaGFycyAgICB1bmlmeV93aXRoX29jY3Vyc19jaGVjaworICBzeW4ga2V5d29yZCBwcm9sb2dLZXl3b3JkICAgY2xvc2UgICBudW1iZXJfY29kZXMgICAgdmFyCisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBjb21wb3VuZAkgICAgICBvbmNlICAgIHdyaXRlCisgIHN5biBrZXl3b3JkIHByb2xvZ0tleXdvcmQgICBjb3B5X3Rlcm0gICAgICAgb3AgICAgICB3cml0ZV9jYW5vbmljYWwKKyAgc3luIGtleXdvcmQgcHJvbG9nS2V5d29yZCAgIGN1cnJlbnRfY2hhcl9jb252ZXJzaW9uIG9wZW4gICAgd3JpdGVfdGVybQorICBzeW4ga2V5d29yZCBwcm9sb2dLZXl3b3JkICAgY3VycmVudF9pbnB1dCAgIHBlZWtfYnl0ZSAgICAgICB3cml0ZXEKKyAgc3luIGtleXdvcmQgcHJvbG9nS2V5d29yZCAgIGN1cnJlbnRfb3AgICAgICBwZWVrX2NoYXIKKworICBzeW4gbWF0Y2ggICBwcm9sb2dPcGVyYXRvciAiPVxcPVx8PTo9XHxcXD09XHw9PFx8PT1cfD49XHxcXD1cfFxcK1x8PFx8Plx8PSIKKyAgc3luIG1hdGNoICAgcHJvbG9nQXNJcyAgICAgIj09PVx8XFw9PT1cfDw9XHw9PiIKKworICBzeW4gbWF0Y2ggICBwcm9sb2dOdW1iZXIJICAgICAgIlw8WzAxMjM0NTY3ODldKlw+IgorICBzeW4gbWF0Y2ggICBwcm9sb2dDb21tZW50RXJyb3IgICAgICAiXCovIgorICBzeW4gbWF0Y2ggICBwcm9sb2dTcGVjaWFsQ2hhcmFjdGVyICAiOyIKKyAgc3luIG1hdGNoICAgcHJvbG9nU3BlY2lhbENoYXJhY3RlciAgIiEiCisgIHN5biBtYXRjaCAgIHByb2xvZ1F1ZXN0aW9uCSAgICAgICI/LS4qXC4iCWNvbnRhaW5zPXByb2xvZ051bWJlcgorCisKK2VuZGlmCisKK3N5biBzeW5jIGNjb21tZW50IG1heGxpbmVzPTUwCisKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcHJvbG9nX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3Byb2xvZ19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgICIgVGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorICBIaUxpbmsgcHJvbG9nQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgcHJvbG9nQ0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHByb2xvZ0NoYXJDb2RlCQlTcGVjaWFsCisKKyAgaWYgZXhpc3RzICgicHJvbG9nX2hpZ2hsaWdodGluZ19jbGVhbiIpCisKKyAgICBIaUxpbmsgcHJvbG9nS2V5d29yZAlTdGF0ZW1lbnQKKyAgICBIaUxpbmsgcHJvbG9nQ2xhdXNlSGVhZAlTdGF0ZW1lbnQKKworICBlbHNlCisKKyAgICBIaUxpbmsgcHJvbG9nS2V5d29yZAlLZXl3b3JkCisgICAgSGlMaW5rIHByb2xvZ0NsYXVzZUhlYWQJQ29uc3RhbnQKKyAgICBIaUxpbmsgcHJvbG9nUXVlc3Rpb24JUHJlUHJvYworICAgIEhpTGluayBwcm9sb2dTcGVjaWFsQ2hhcmFjdGVyIFNwZWNpYWwKKyAgICBIaUxpbmsgcHJvbG9nTnVtYmVyCQlOdW1iZXIKKyAgICBIaUxpbmsgcHJvbG9nQXNJcwkJTm9ybWFsCisgICAgSGlMaW5rIHByb2xvZ0NvbW1lbnRFcnJvcglFcnJvcgorICAgIEhpTGluayBwcm9sb2dBdG9tCQlTdHJpbmcKKyAgICBIaUxpbmsgcHJvbG9nU3RyaW5nCQlTdHJpbmcKKyAgICBIaUxpbmsgcHJvbG9nT3BlcmF0b3IJT3BlcmF0b3IKKworICBlbmRpZgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJwcm9sb2ciCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9wc2YudmltIGIvcnVudGltZS9zeW50YXgvcHNmLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjM3NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcHNmLnZpbQpAQCAtMCwwICsxLDEwMyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVNvZnR3YXJlIERpc3RyaWJ1dG9yIHByb2R1Y3Qgc3BlY2lmaWNhdGlvbiBmaWxlCisiCQkoUE9TSVggMTM4Ny4yLTE5OTUpLgorIiBNYWludGFpbmVyOglSZXggQmFyemVlIDxyZXhfYmFyemVlQGhwLmNvbT4KKyIgTGFzdCBjaGFuZ2U6CTI1IEFwciAyMDAxCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgIiBSZW1vdmUgYW55IG9sZCBzeW50YXggc3R1ZmYgaGFuZ2luZyBhcm91bmQKKyAgc3luIGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFByb2R1Y3Qgc3BlY2lmaWNhdGlvbiBmaWxlcyBhcmUgY2FzZSBzZW5zaXRpdmUKK3N5biBjYXNlIG1hdGNoCisKK3N5biBrZXl3b3JkIHBzZk9iamVjdCBidW5kbGUgY2F0ZWdvcnkgY29udHJvbF9maWxlIGRlcG90IGRpc3RyaWJ1dGlvbgorc3luIGtleXdvcmQgcHNmT2JqZWN0IGVuZCBmaWxlIGZpbGVzZXQgaG9zdCBpbnN0YWxsZWRfc29mdHdhcmUgbWVkaWEKK3N5biBrZXl3b3JkIHBzZk9iamVjdCBwcm9kdWN0IHJvb3Qgc3VicHJvZHVjdCB2ZW5kb3IKKworc3luIG1hdGNoICBwc2ZVbnF1b3RTdHJpbmcgK1teIiMgCV1bXiNdKisgY29udGFpbmVkCitzeW4gcmVnaW9uIHBzZlF1b3RTdHJpbmcgICBzdGFydD0rIisgc2tpcD0rXFwiKyBlbmQ9KyIrIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggIHBzZk9ialRhZyAgICAiXDxbLV8rQS1aMC05YS16XVwrXChcLlstXytBLVowLTlhLXpdXCtcKSoiIGNvbnRhaW5lZAorc3luIG1hdGNoICBwc2ZBdHRBYmJyZXYgIixcPFwoZmFcfGZyXHxbYWNscXJ2XVwpXCg8XHw+XHw8PVx8Pj1cfD1cfD09XClbXixdXCsiIGNvbnRhaW5lZAorc3luIG1hdGNoICBwc2ZPYmpUYWdzICAgIlw8Wy1fK0EtWjAtOWEtel1cK1woXC5bLV8rQS1aMC05YS16XVwrXCkqXChcc1wrXDxbLV8rQS1aMC05YS16XVwrXChcLlstXytBLVowLTlhLXpdXCtcKSpcKSoiIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggIHBzZk51bWJlciAgICAiXDxcZFwrXD4iIGNvbnRhaW5lZAorc3luIG1hdGNoICBwc2ZGbG9hdCAgICAgIlw8XGRcK1w+XChcLlw8XGRcK1w+XCkqIiBjb250YWluZWQKKworc3luIG1hdGNoICBwc2ZMb25nRGF0ZSAgIlw8XGRcZFxkXGRcZFxkXGRcZFxkXGRcZFxkXC5cZFxkXD4iIGNvbnRhaW5lZAorCitzeW4ga2V5d29yZCBwc2ZTdGF0ZSAgICBhdmFpbGFibGUgY29uZmlndXJlZCBjb3JydXB0IGluc3RhbGxlZCB0cmFuc2llbnQgY29udGFpbmVkCitzeW4ga2V5d29yZCBwc2ZQU3RhdGUgICBhcHBsaWVkIGNvbW1pdHRlZCBzdXBlcnNlZGVkIGNvbnRhaW5lZAorCitzeW4ga2V5d29yZCBwc2ZCb29sZWFuICBmYWxzZSB0cnVlIGNvbnRhaW5lZAorCisKKyJTb21lIG9mIHRoZSBhdHRyaWJ1dGVzIGNvdmVyZWQgYnkgYXR0VW5xdW90U3RyaW5nIGFuZCBhdHRRdW90U3RyaW5nOgorIiBhcmNoaXRlY3R1cmUgY2F0ZWdvcnlfdGFnIGNvbnRyb2xfZGlyZWN0b3J5IGNvcHlyaWdodAorIiBjcmVhdGVfZGF0ZSBkZXNjcmlwdGlvbiBkaXJlY3RvcnkgZmlsZV9wZXJtaXNzaW9ucyBpbnN0YWxsX3NvdXJjZQorIiBpbnN0YWxsX3R5cGUgbG9jYXRpb24gbWFjaGluZV90eXBlIG1vZF9kYXRlIG51bWJlciBvc19uYW1lIG9zX3JlbGVhc2UKKyIgb3NfdmVyc2lvbiBwb3NlX2FzX29zX25hbWUgcG9zZV9hc19vc19yZWxlYXNlIHJlYWRtZSByZXZpc2lvbgorIiBzaGFyZV9saW5rIHRpdGxlIHZlbmRvcl90YWcKK3N5biByZWdpb24gcHNmQXR0VW5xdW90U3RyaW5nIG1hdGNoZ3JvdXA9cHNmQXR0cmliIHN0YXJ0PX5eXHMqW14jIAldXCtcc1wrW14jIiAJXX5ycz1lLTEgY29udGFpbnM9cHNmVW5xdW90U3RyaW5nLHBzZkNvbW1lbnQgZW5kPX4kfiBrZWVwZW5kIG9uZWxpbmUKKworc3luIHJlZ2lvbiBwc2ZBdHRRdW90U3RyaW5nIG1hdGNoZ3JvdXA9cHNmQXR0cmliIHN0YXJ0PX5eXHMqW14jIAldXCtcc1wrIn5ycz1lLTEgY29udGFpbnM9cHNmUXVvdFN0cmluZyxwc2ZDb21tZW50IHNraXA9flxcIn4gbWF0Y2hncm91cD1wc2ZRdW90U3RyaW5nIGVuZD1+In4ga2VlcGVuZAorCisKKyIgVGhlc2UgcmVnaW9ucyBhcmUgZGVmaW5lZCBpbiBhdHRlbXB0IHRvIGRvIHN5bnRheCBjaGVja2luZyBmb3Igc29tZQorIiBvZiB0aGUgYXR0cmlidXRlcy4KK3N5biByZWdpb24gcHNmQXR0VGFnIG1hdGNoZ3JvdXA9cHNmQXR0cmliIHN0YXJ0PSJeXHMqdGFnXHNcKyIgY29udGFpbnM9cHNmT2JqVGFnLHBzZkNvbW1lbnQgZW5kPSIkIiBrZWVwZW5kIG9uZWxpbmUKKworc3luIHJlZ2lvbiBwc2ZBdHRTcGVjIG1hdGNoZ3JvdXA9cHNmQXR0cmliIHN0YXJ0PSJeXHMqXChhbmNlc3Rvclx8YXBwbGllZF9wYXRjaGVzXHxhcHBsaWVkX3RvXHxjb250ZW50c1x8Y29yZXF1aXNpdGVzXHxleHJlcXVpc2l0ZXNcfHByZXJlcXVpc2l0ZXNcfHNvZnR3YXJlX3NwZWNcfHN1cGVyc2VkZXNcfHN1cGVyc2VkZWRfYnlcKVxzXCsiIGNvbnRhaW5zPXBzZk9ialRhZyxwc2ZBdHRBYmJyZXYscHNmQ29tbWVudCBlbmQ9IiQiIGtlZXBlbmQKKworc3luIHJlZ2lvbiBwc2ZBdHRUYWdzIG1hdGNoZ3JvdXA9cHNmQXR0cmliIHN0YXJ0PSJeXHMqYWxsX2ZpbGVzZXRzXHNcKyIgY29udGFpbnM9cHNmT2JqVGFncyxwc2ZDb21tZW50IGVuZD0iJCIga2VlcGVuZAorCitzeW4gcmVnaW9uIHBzZkF0dE51bWJlciBtYXRjaGdyb3VwPXBzZkF0dHJpYiBzdGFydD0iXlxzKlwoY29tcHJlc3NlZF9zaXplXHxpbnN0YW5jZV9pZFx8bWVkaWFfc2VxdWVuY2VfbnVtYmVyXHxzZXF1ZW5jZV9udW1iZXJcfHNpemVcKVxzXCsiIGNvbnRhaW5zPXBzZk51bWJlcixwc2ZDb21tZW50IGVuZD0iJCIga2VlcGVuZCBvbmVsaW5lCisKK3N5biByZWdpb24gcHNmQXR0VGltZSBtYXRjaGdyb3VwPXBzZkF0dHJpYiBzdGFydD0iXlxzKlwoY3JlYXRlX3RpbWVcfGN0aW1lXHxtb2RfdGltZVx8bXRpbWVcfHRpbWVzdGFtcFwpXHNcKyIgY29udGFpbnM9cHNmTnVtYmVyLHBzZkNvbW1lbnQgZW5kPSIkIiBrZWVwZW5kIG9uZWxpbmUKKworc3luIHJlZ2lvbiBwc2ZBdHRGbG9hdCBtYXRjaGdyb3VwPXBzZkF0dHJpYiBzdGFydD0iXlxzKlwoZGF0YV9tb2RlbF9yZXZpc2lvblx8bGF5b3V0X3ZlcnNpb25cKVxzXCsiIGNvbnRhaW5zPXBzZkZsb2F0LHBzZkNvbW1lbnQgZW5kPSIkIiBrZWVwZW5kIG9uZWxpbmUKKworc3luIHJlZ2lvbiBwc2ZBdHRMb25nRGF0ZSBtYXRjaGdyb3VwPXBzZkF0dHJpYiBzdGFydD0iXlxzKmluc3RhbGxfZGF0ZVxzXCsiIGNvbnRhaW5zPXBzZkxvbmdEYXRlLHBzZkNvbW1lbnQgZW5kPSIkIiBrZWVwZW5kIG9uZWxpbmUKKworc3luIHJlZ2lvbiBwc2ZBdHRTdGF0ZSBtYXRjaGdyb3VwPXBzZkF0dHJpYiBzdGFydD0iXlxzKlwoc3RhdGVcKVxzXCsiIGNvbnRhaW5zPXBzZlN0YXRlLHBzZkNvbW1lbnQgZW5kPSIkIiBrZWVwZW5kIG9uZWxpbmUKKworc3luIHJlZ2lvbiBwc2ZBdHRQU3RhdGUgbWF0Y2hncm91cD1wc2ZBdHRyaWIgc3RhcnQ9Il5ccypcKHBhdGNoX3N0YXRlXClcc1wrIiBjb250YWlucz1wc2ZQU3RhdGUscHNmQ29tbWVudCBlbmQ9IiQiIGtlZXBlbmQgb25lbGluZQorCitzeW4gcmVnaW9uIHBzZkF0dEJvb2xlYW4gbWF0Y2hncm91cD1wc2ZBdHRyaWIgc3RhcnQ9Il5ccypcKGlzX2tlcm5lbFx8aXNfbG9jYXRhYmxlXHxpc19wYXRjaFx8aXNfcHJvdGVjdGVkXHxpc19yZWJvb3RcfGlzX3JlZmVyZW5jZVx8aXNfc2VjdXJlXHxpc19zcGFyc2VcKVxzXCsiIGNvbnRhaW5zPXBzZkJvb2xlYW4scHNmQ29tbWVudCBlbmQ9IiQiIGtlZXBlbmQgb25lbGluZQorCitzeW4gbWF0Y2ggIHBzZkNvbW1lbnQgIiMuKiQiCisKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcHNmX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3BzZl9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBwc2ZPYmplY3QgICAgICAgU3RhdGVtZW50CisgIEhpTGluayBwc2ZBdHRyaWIgICAgICAgVHlwZQorICBIaUxpbmsgcHNmUXVvdFN0cmluZyAgIFN0cmluZworICBIaUxpbmsgcHNmT2JqVGFnICAgICAgIElkZW50aWZpZXIKKyAgSGlMaW5rIHBzZkF0dEFiYnJldiAgICBQcmVQcm9jCisgIEhpTGluayBwc2ZPYmpUYWdzICAgICAgSWRlbnRpZmllcgorCisgIEhpTGluayBwc2ZDb21tZW50ICAgICAgQ29tbWVudAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisiIExvbmcgZGVzY3JpcHRpb25zIGFuZCBjb3B5cmlnaHRzIGNvbmZ1c2UgdGhlIHN5bnRheCBoaWdobGlnaHRpbmcsIHNvCisiIGZvcmNlIHZpbSB0byBiYWNrdXAgYXQgbGVhc3QgMTAwIGxpbmVzIGJlZm9yZSB0aGUgdG9wIHZpc2libGUgbGluZQorIiBsb29raW5nIGZvciBhIHN5bmMgbG9jYXRpb24uCitzeW4gc3luYyBsaW5lcz0xMDAKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHNmIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcHRjYXAudmltIGIvcnVudGltZS9zeW50YXgvcHRjYXAudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NTkwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wdGNhcC52aW0KQEAgLTAsMCArMSwxMDcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglwcmludGNhcC90ZXJtY2FwIGRhdGFiYXNlCisiIE1haW50YWluZXI6CUhhYWtvbiBSaWlzZXIgPGhha29ucmtAZnlzLnVpby5ubz4KKyIgVVJMOgkJaHR0cDovL2ZvbGsudWlvLm5vL2hha29ucmsvdmltL3N5bnRheC9wdGNhcC52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWF5IDE1CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3luIGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKKyIgU2luY2UgSSBvbmx5IGhpZ2hsaWdodCBiYXNlZCBvbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhYmFzZXMsIG5vdAorIiBzcGVjaWZpYyBrZXl3b3JkcywgY2FzZSBzZW5zaXRpdml0eSBpc24ndCByZXF1aXJlZAorc3luIGNhc2UgaWdub3JlCisKKyIgU2luY2UgZXZlcnl0aGluZyB0aGF0IGlzIG5vdCBjYXVnaHQgYnkgdGhlIHN5bnRheCBwYXR0ZXJucyBpcyBhc3N1bWVkCisiIHRvIGJlIGFuIGVycm9yLCB3ZSBzdGFydCBwYXJzaW5nIDIwIGxpbmVzIHVwLCB1bmxlc3Mgc29tZXRoaW5nIGVsc2UKKyIgaXMgc3BlY2lmaWVkCitpZiBleGlzdHMoInB0Y2FwX21pbmxpbmVzIikKKyAgICBleGUgInN5biBzeW5jIGxpbmVzPSIucHRjYXBfbWlubGluZXMKK2Vsc2UKKyAgICBzeW4gc3luYyBsaW5lcz0yMAorZW5kaWYKKworIiBIaWdobGlnaHQgZXZlcnl0aGluZyB0aGF0IGlzbid0IGNhdWdodCBieSB0aGUgcnVsZXMgYXMgZXJyb3JzLAorIiBleGNlcHQgYmxhbmsgbGluZXMKK3N5biBtYXRjaCBwdGNhcEVycm9yCSAgICAiXi4qXFMuKiQiCisKK3N5biBtYXRjaCBwdGNhcExlYWRCbGFuayAgICAiXlxzXCsiIGNvbnRhaW5lZAorCisiIGA6JyBhbmQgYHwnIGFyZSBkZWxpbWl0ZXJzIGZvciBmaWVsZHMgYW5kIG5hbWVzLCBhbmQgc2hvdWxkIG5vdCBiZQorIiBoaWdobGlnaHRlZC4JSGVuY2UsIHRoZXkgYXJlIGxpbmtlZCB0byBgTk9ORScKK3N5biBtYXRjaCBwdGNhcERlbGltaXRlciAgICAiWzp8XSIgY29udGFpbmVkCisKKyIgRXNjYXBlZCBjaGFyYWN0ZXJzIHJlY2VpdmUgc3BlY2lhbCBoaWdobGlnaHRpbmcKK3N5biBtYXRjaCBwdGNhcEVzY2FwZWRDaGFyICAiXFwuIiBjb250YWluZWQKK3N5biBtYXRjaCBwdGNhcEVzY2FwZWRDaGFyICAiXF4uIiBjb250YWluZWQKK3N5biBtYXRjaCBwdGNhcEVzY2FwZWRDaGFyICAiXFxcb1x7M30iIGNvbnRhaW5lZAorCisiIEEgYmFja3NsYXNoIGF0IHRoZSBlbmQgb2YgYSBsaW5lIHdpbGwgc3VwcHJlc3MgdGhlIG5ld2xpbmUKK3N5biBtYXRjaCBwdGNhcExpbmVDb250CSAgICAiXFwkIiBjb250YWluZWQKKworIiBBIG51bWJlciBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzIGFuIGludGVnZXIgaW4gQworc3luIG1hdGNoIHB0Y2FwTnVtYmVyCSAgICAiI1woK1x8LVwpXD1cZFwrImxjPTEgY29udGFpbmVkCitzeW4gbWF0Y2ggcHRjYXBOdW1iZXJFcnJvciAgIiNcZCpbXls6ZGlnaXQ6XTpcXF0ibGM9MSBjb250YWluZWQKK3N5biBtYXRjaCBwdGNhcE51bWJlcgkgICAgIiMweFx4XHsxLDh9ImxjPTEgY29udGFpbmVkCitzeW4gbWF0Y2ggcHRjYXBOdW1iZXJFcnJvciAgIiMweFxYIm1lPWUtMSxsYz0xIGNvbnRhaW5lZAorc3luIG1hdGNoIHB0Y2FwTnVtYmVyRXJyb3IgICIjMHhceFx7OX0ibGM9MSBjb250YWluZWQKK3N5biBtYXRjaCBwdGNhcE51bWJlckVycm9yICAiIzB4XHgqW15bOnhkaWdpdDpdOlxcXSJsYz0xIGNvbnRhaW5lZAorCisiIFRoZSBgQCcgb3BlcmF0b3IgY2xlYXJzIGEgZmxhZyAoaS5lLiwgc2V0cyBpdCB0byB6ZXJvKQorIiBUaGUgYCMnIG9wZXJhdG9yIGFzc2lnbnMgYSBmb2xsb3dpbmcgbnVtYmVyIHRvIHRoZSBmbGFnCisiIFRoZSBgPScgb3BlcmF0b3IgYXNzaWducyBhIHN0cmluZyB0byB0aGUgcHJlY2VkaW5nIGZsYWcKK3N5biBtYXRjaCBwdGNhcE9wZXJhdG9yCSAgICAiW0AjPV0iIGNvbnRhaW5lZAorCisiIFNvbWUgdGVybWluYWwgY2FwYWJpbGl0ZXMgaGF2ZSBzcGVjaWFsIG5hbWVzIGxpa2UgYCM1JyBhbmQgYEAxJywgYW5kIHdlCisiIG5lZWQgc3BlY2lhbCBydWxlcyB0byBtYXRjaCB0aGVzZSBwcm9wZXJseQorc3luIG1hdGNoIHB0Y2FwU3BlY2lhbENhcCAgICJcV1sjQF1cZCIgY29udGFpbnM9cHRjYXBEZWxpbWl0ZXIgY29udGFpbmVkCisKKyIgSWYgZWRpdGluZyBhIHRlcm1jYXAgZmlsZSwgYW4gZW50cnkgaW4gdGhlIGRhdGFiYXNlIGlzIHRlcm1pbmF0ZWQgYnkKKyIgYSAobm9uLWVzY2FwZWQpIG5ld2xpbmUuICBPdGhlcndpc2UsIGl0IGlzIHRlcm1pbmF0ZWQgYnkgYSBsaW5lIHdoaWNoCisiIGRvZXMgbm90IHN0YXJ0IHdpdGggYSBjb2xvbiAoOikKK2lmIGV4aXN0cygiYjpwdGNhcF90eXBlIikgJiYgYjpwdGNhcF90eXBlWzBdID09ICd0JworICAgIHN5biByZWdpb24gcHRjYXBFbnRyeSAgIHN0YXJ0PSJeXHMqW15bOnNwYWNlOl06XSIgZW5kPSJbXlxcXVwoXFxcXFwpKiQiIGVuZD0iXiQiIGNvbnRhaW5zPXB0Y2FwTmFtZXMscHRjYXBGaWVsZCxwdGNhcExlYWRCbGFuayBrZWVwZW5kCitlbHNlCisgICAgc3luIHJlZ2lvbiBwdGNhcEVudHJ5ICAgc3RhcnQ9Il5ccypbXls6c3BhY2U6XTpdIm1lPWUtMSBlbmQ9Il5ccypbXls6c3BhY2U6XTojXSJtZT1lLTEgY29udGFpbnM9cHRjYXBOYW1lcyxwdGNhcEZpZWxkLHB0Y2FwTGVhZEJsYW5rLHB0Y2FwQ29tbWVudAorZW5kaWYKK3N5biByZWdpb24gcHRjYXBOYW1lcwkgICAgc3RhcnQ9Il5ccypbXls6c3BhY2U6XTpdIiBza2lwPSJbXlxcXVwoXFxcXFwpKlxcOiIgZW5kPSI6Im1lPWUtMSBjb250YWlucz1wdGNhcERlbGltaXRlcixwdGNhcEVzY2FwZWRDaGFyLHB0Y2FwTGluZUNvbnQscHRjYXBMZWFkQmxhbmsscHRjYXBDb21tZW50IGtlZXBlbmQgY29udGFpbmVkCitzeW4gcmVnaW9uIHB0Y2FwRmllbGQJICAgIHN0YXJ0PSI6IiBza2lwPSJbXlxcXVwoXFxcXFwpKlxcJCIgZW5kPSJbXlxcXVwoXFxcXFwpKjoibWU9ZS0xIGVuZD0iJCIgY29udGFpbnM9cHRjYXBEZWxpbWl0ZXIscHRjYXBTdHJpbmcscHRjYXBOdW1iZXIscHRjYXBOdW1iZXJFcnJvcixwdGNhcE9wZXJhdG9yLHB0Y2FwTGluZUNvbnQscHRjYXBTcGVjaWFsQ2FwLHB0Y2FwTGVhZEJsYW5rLHB0Y2FwQ29tbWVudCBrZWVwZW5kIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBwdGNhcFN0cmluZwkgICAgbWF0Y2hncm91cD1wdGNhcE9wZXJhdG9yIHN0YXJ0PSI9IiBza2lwPSJbXlxcXVwoXFxcXFwpKlxcOiIgbWF0Y2hncm91cD1wdGNhcERlbGltaXRlciBlbmQ9IjoibWU9ZS0xIG1hdGNoZ3JvdXA9Tk9ORSBlbmQ9IlteXFxdXChcXFxcXCkqW15cXF0kIiBlbmQ9Il4kIiBjb250YWlucz1wdGNhcEVzY2FwZWRDaGFyLHB0Y2FwTGluZUNvbnQga2VlcGVuZCBjb250YWluZWQKK3N5biByZWdpb24gcHRjYXBDb21tZW50CSAgICBzdGFydD0iXlxzKiMiIGVuZD0iJCIgY29udGFpbnM9cHRjYXBMZWFkQmxhbmsKKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3B0Y2FwX3N5bnRheF9pbml0cyIpCisgICAgaWYgdmVyc2lvbiA8IDUwOAorCWxldCBkaWRfcHRjYXBfc3ludGF4X2luaXRzID0gMQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgICAgZWxzZQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgIGVuZGlmCisKKyAgICBIaUxpbmsgcHRjYXBDb21tZW50CQlDb21tZW50CisgICAgSGlMaW5rIHB0Y2FwRGVsaW1pdGVyCURlbGltaXRlcgorICAgICIgVGhlIGhpZ2hsaWdodGluZyBvZiAicHRjYXBFbnRyeSIgc2hvdWxkIGFsd2F5cyBiZSBvdmVycmlkZGVuIGJ5CisgICAgIiBpdHMgY29udGVudHMsIHNvIEkgdXNlIFRvZG8gaGlnaGxpZ2h0aW5nIHRvIGluZGljYXRlIHRoYXQgdGhlcmUKKyAgICAiIGlzIHdvcmsgdG8gYmUgZG9uZSB3aXRoIHRoZSBzeW50YXggZmlsZSBpZiB5b3UgY2FuIHNlZSBpdCA6LSkKKyAgICBIaUxpbmsgcHRjYXBFbnRyeQkJVG9kbworICAgIEhpTGluayBwdGNhcEVycm9yCQlFcnJvcgorICAgIEhpTGluayBwdGNhcEVzY2FwZWRDaGFyCVNwZWNpYWxDaGFyCisgICAgSGlMaW5rIHB0Y2FwRmllbGQJCVR5cGUKKyAgICBIaUxpbmsgcHRjYXBMZWFkQmxhbmsJTk9ORQorICAgIEhpTGluayBwdGNhcExpbmVDb250CVNwZWNpYWwKKyAgICBIaUxpbmsgcHRjYXBOYW1lcwkJTGFiZWwKKyAgICBIaUxpbmsgcHRjYXBOdW1iZXIJCU5PTkUKKyAgICBIaUxpbmsgcHRjYXBOdW1iZXJFcnJvcglFcnJvcgorICAgIEhpTGluayBwdGNhcE9wZXJhdG9yCU9wZXJhdG9yCisgICAgSGlMaW5rIHB0Y2FwU3BlY2lhbENhcAlUeXBlCisgICAgSGlMaW5rIHB0Y2FwU3RyaW5nCQlOT05FCisKKyAgICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHRjYXAiCisKKyIgdmltOiBzdHM9NCBzdz00IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3B1cmlmeWxvZy52aW0gYi9ydW50aW1lL3N5bnRheC9wdXJpZnlsb2cudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiY2ZiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9wdXJpZnlsb2cudmltCkBAIC0wLDAgKzEsMTE5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJcHVyaWZ5IGxvZyBmaWxlcworIiBNYWludGFpbmVyOglHYXV0YW0gSC4gTXVkdW51cmkgPGdtdWR1bnVyQGluZm9ybWF0aWNhLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBQdXJpZnkgaGVhZGVyCitzeW4gbWF0Y2ggcHVyaWZ5TG9nSGVhZGVyICAgICAgIl5cKlwqXCpcKi4qJCIKKworIiBJbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCitzeW4gbWF0Y2ggcHVyaWZ5TG9nRklVICJeRklVOi4qJCIKK3N5biBtYXRjaCBwdXJpZnlMb2dNQUYgIl5NQUY6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ01JVSAiXk1JVTouKiQiCitzeW4gbWF0Y2ggcHVyaWZ5TG9nU0lHICJeU0lHOi4qJCIKK3N5biBtYXRjaCBwdXJpZnlMb2dXUEYgIl5XUEY6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ1dQTSAiXldQTTouKiQiCitzeW4gbWF0Y2ggcHVyaWZ5TG9nV1BOICJeV1BOOi4qJCIKK3N5biBtYXRjaCBwdXJpZnlMb2dXUFIgIl5XUFI6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ1dQVyAiXldQVzouKiQiCitzeW4gbWF0Y2ggcHVyaWZ5TG9nV1BYICJeV1BYOi4qJCIKKworIiBXYXJuaW5nIG1lc3NhZ2VzCitzeW4gbWF0Y2ggcHVyaWZ5TG9nQUJSICJeQUJSOi4qJCIKK3N5biBtYXRjaCBwdXJpZnlMb2dCU1IgIl5CU1I6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ0JTVyAiXkJTVzouKiQiCitzeW4gbWF0Y2ggcHVyaWZ5TG9nRk1SICJeRk1SOi4qJCIKK3N5biBtYXRjaCBwdXJpZnlMb2dNTEsgIl5NTEs6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ01TRSAiXk1TRTouKiQiCitzeW4gbWF0Y2ggcHVyaWZ5TG9nUEFSICJeUEFSOi4qJCIKK3N5biBtYXRjaCBwdXJpZnlMb2dQTEsgIl5QTEs6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ1NCUiAiXlNCUjouKiQiCitzeW4gbWF0Y2ggcHVyaWZ5TG9nU09GICJeU09GOi4qJCIKK3N5biBtYXRjaCBwdXJpZnlMb2dVTUMgIl5VTUM6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ1VNUiAiXlVNUjouKiQiCisKKyIgQ29ycnVwdGluZyBtZXNzYWdlcworc3luIG1hdGNoIHB1cmlmeUxvZ0FCVyAiXkFCVzouKiQiCitzeW4gbWF0Y2ggcHVyaWZ5TG9nQlJLICJeQlJLOi4qJCIKK3N5biBtYXRjaCBwdXJpZnlMb2dGTVcgIl5GTVc6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ0ZOSCAiXkZOSDouKiQiCitzeW4gbWF0Y2ggcHVyaWZ5TG9nRlVNICJeRlVNOi4qJCIKK3N5biBtYXRjaCBwdXJpZnlMb2dNUkUgIl5NUkU6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ1NCVyAiXlNCVzouKiQiCisKKyIgRmF0YWwgbWVzc2FnZXMKK3N5biBtYXRjaCBwdXJpZnlMb2dDT1IgIl5DT1I6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ05QUiAiXk5QUjouKiQiCitzeW4gbWF0Y2ggcHVyaWZ5TG9nTlBXICJeTlBXOi4qJCIKK3N5biBtYXRjaCBwdXJpZnlMb2daUFIgIl5aUFI6LiokIgorc3luIG1hdGNoIHB1cmlmeUxvZ1pQVyAiXlpQVzouKiQiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3B1cmlmeUxvZ19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9wdXJpZnlMb2dfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworCUhpTGluayBwdXJpZnlMb2dGSVUgcHVyaWZ5TG9nSW5mb3JtYXRpb25hbAorCUhpTGluayBwdXJpZnlMb2dNQUYgcHVyaWZ5TG9nSW5mb3JtYXRpb25hbAorCUhpTGluayBwdXJpZnlMb2dNSVUgcHVyaWZ5TG9nSW5mb3JtYXRpb25hbAorCUhpTGluayBwdXJpZnlMb2dTSUcgcHVyaWZ5TG9nSW5mb3JtYXRpb25hbAorCUhpTGluayBwdXJpZnlMb2dXUEYgcHVyaWZ5TG9nSW5mb3JtYXRpb25hbAorCUhpTGluayBwdXJpZnlMb2dXUE0gcHVyaWZ5TG9nSW5mb3JtYXRpb25hbAorCUhpTGluayBwdXJpZnlMb2dXUE4gcHVyaWZ5TG9nSW5mb3JtYXRpb25hbAorCUhpTGluayBwdXJpZnlMb2dXUFIgcHVyaWZ5TG9nSW5mb3JtYXRpb25hbAorCUhpTGluayBwdXJpZnlMb2dXUFcgcHVyaWZ5TG9nSW5mb3JtYXRpb25hbAorCUhpTGluayBwdXJpZnlMb2dXUFggcHVyaWZ5TG9nSW5mb3JtYXRpb25hbAorCisJSGlMaW5rIHB1cmlmeUxvZ0FCUiBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ0JTUiBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ0JTVyBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ0ZNUiBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ01MSyBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ01TRSBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ1BBUiBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ1BMSyBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ1NCUiBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ1NPRiBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ1VNQyBwdXJpZnlMb2dXYXJuaW5nCisJSGlMaW5rIHB1cmlmeUxvZ1VNUiBwdXJpZnlMb2dXYXJuaW5nCisKKwlIaUxpbmsgcHVyaWZ5TG9nQUJXIHB1cmlmeUxvZ0NvcnJ1cHRpbmcKKwlIaUxpbmsgcHVyaWZ5TG9nQlJLIHB1cmlmeUxvZ0NvcnJ1cHRpbmcKKwlIaUxpbmsgcHVyaWZ5TG9nRk1XIHB1cmlmeUxvZ0NvcnJ1cHRpbmcKKwlIaUxpbmsgcHVyaWZ5TG9nRk5IIHB1cmlmeUxvZ0NvcnJ1cHRpbmcKKwlIaUxpbmsgcHVyaWZ5TG9nRlVNIHB1cmlmeUxvZ0NvcnJ1cHRpbmcKKwlIaUxpbmsgcHVyaWZ5TG9nTVJFIHB1cmlmeUxvZ0NvcnJ1cHRpbmcKKwlIaUxpbmsgcHVyaWZ5TG9nU0JXIHB1cmlmeUxvZ0NvcnJ1cHRpbmcKKworCUhpTGluayBwdXJpZnlMb2dDT1IgcHVyaWZ5TG9nRmF0YWwKKwlIaUxpbmsgcHVyaWZ5TG9nTlBSIHB1cmlmeUxvZ0ZhdGFsCisJSGlMaW5rIHB1cmlmeUxvZ05QVyBwdXJpZnlMb2dGYXRhbAorCUhpTGluayBwdXJpZnlMb2daUFIgcHVyaWZ5TG9nRmF0YWwKKwlIaUxpbmsgcHVyaWZ5TG9nWlBXIHB1cmlmeUxvZ0ZhdGFsCisKKwlIaUxpbmsgcHVyaWZ5TG9nSGVhZGVyCQlDb21tZW50CisJSGlMaW5rIHB1cmlmeUxvZ0luZm9ybWF0aW9uYWwJUHJlUHJvYworCUhpTGluayBwdXJpZnlMb2dXYXJuaW5nCQlUeXBlCisJSGlMaW5rIHB1cmlmeUxvZ0NvcnJ1cHRpbmcJRXJyb3IKKwlIaUxpbmsgcHVyaWZ5TG9nRmF0YWwJCUVycm9yCisKKwlkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHVyaWZ5bG9nIgorCisiIHZpbTp0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9weXJleC52aW0gYi9ydW50aW1lL3N5bnRheC9weXJleC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2YjJkMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3B5cmV4LnZpbQpAQCAtMCwwICsxLDY3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJUHlyZXgKKyIgTWFpbnRhaW5lcjoJTWFyY28gQmFyaXNpb25lIDxtYXJjby5iYXJpQHBlb3BsZS5pdD4KKyIgVVJMOgkJaHR0cDovL21hcmNvYmFyaS5hbHRlcnZpc3RhLm9yZy9weXJleF92aW0uaHRtbAorIiBMYXN0IENoYW5nZToJMjAwNCBNYXkgMTYKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFJlYWQgdGhlIFB5dGhvbiBzeW50YXggdG8gc3RhcnQgd2l0aAoraWYgdmVyc2lvbiA8IDYwMAorICBzbyA8c2ZpbGU+OnA6aC9weXRob24udmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9weXRob24udmltCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKK2VuZGlmCisKKyIgUHlyZXggZXh0ZW50aW9ucworc3luIGtleXdvcmQgcHlyZXhTdGF0ZW1lbnQgICAgICBjZGVmIHR5cGVkZWYgY3R5cGVkZWYgc2l6ZW9mCitzeW4ga2V5d29yZCBweXJleFR5cGUJCWludCBsb25nIHNob3J0IGZsb2F0IGRvdWJsZSBjaGFyIG9iamVjdCB2b2lkCitzeW4ga2V5d29yZCBweXJleFR5cGUJCXNpZ25lZCB1bnNpZ25lZAorc3luIGtleXdvcmQgcHlyZXhTdHJ1Y3R1cmUJc3RydWN0IHVuaW9uIGVudW0KK3N5biBrZXl3b3JkIHB5cmV4UHJlY29uZGl0CWluY2x1ZGUgY2ltcG9ydAorc3luIGtleXdvcmQgcHlyZXhBY2Nlc3MJCXB1YmxpYyBwcml2YXRlIHByb3BlcnR5IHJlYWRvbmx5IGV4dGVybgorIiBJZiBzb21lb21lIHdhbnRzIFB5dGhvbidzIGJ1aWx0LWlucyBoaWdobGlnaHRlZCBwcm9iYWJseSBoZQorIiBhbHNvIHdhbnRzIFB5cmV4J3MgYnVpbHQtaW5zIGhpZ2hsaWdodGVkCitpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMiKSB8fCBleGlzdHMoInB5cmV4X2hpZ2hsaWdodF9idWlsdGlucyIpCisgICAgc3luIGtleXdvcmQgcHlyZXhCdWlsdGluICAgIE5VTEwKK2VuZGlmCisKKyIgVGhpcyBkZWxldGVzICJmcm9tIiBmcm9tIHRoZSBrZXl3b3JkcyBhbmQgcmUtYWRkcyBpdCBhcyBhCisiIG1hdGNoIHdpdGggbG93ZXIgcHJpb3JpdHkgdGhhbiBweXJleEZvckZyb20KK3N5biBjbGVhciAgIHB5dGhvblByZUNvbmRpdAorc3luIGtleXdvcmQgcHl0aG9uUHJlQ29uZGl0ICAgICBpbXBvcnQKK3N5biBtYXRjaCAgIHB5dGhvblByZUNvbmRpdCAgICAgImZyb20iCisKKyIgV2l0aCAiZm9yW146XSpcenNmcm9tIiBWSU0gZG9lcyBub3QgbWF0Y2ggImZvciIgYW55bW9yZSwgc28KKyIgSSB1c2VkIHRoZSBzbG93ZXIgIlxAPD0iIGZvcm0KK3N5biBtYXRjaCAgIHB5cmV4Rm9yRnJvbSAgICAgICAgIlwoZm9yW146XSpcKVxAPD1mcm9tIgorCisiIERlZmF1bHQgaGlnaGxpZ2h0aW5nCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcHlyZXhfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcHlyZXhfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKyAgSGlMaW5rIHB5cmV4U3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHB5cmV4VHlwZQkJVHlwZQorICBIaUxpbmsgcHlyZXhTdHJ1Y3R1cmUJCVN0cnVjdHVyZQorICBIaUxpbmsgcHlyZXhQcmVjb25kaXQJCVByZUNvbmRpdAorICBIaUxpbmsgcHlyZXhBY2Nlc3MJCXB5cmV4U3RhdGVtZW50CisgIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyIpIHx8IGV4aXN0cygicHlyZXhfaGlnaGxpZ2h0X2J1aWx0aW5zIikKKyAgICAgIEhpTGluayBweXJleEJ1aWx0aW4JRnVuY3Rpb24KKyAgZW5kaWYKKyAgSGlMaW5rIHB5cmV4Rm9yRnJvbQkJU3RhdGVtZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInB5cmV4IgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcHl0aG9uLnZpbSBiL3J1bnRpbWUvc3ludGF4L3B5dGhvbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczZGZhNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3B5dGhvbi52aW0KQEAgLTAsMCArMSwxNzEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglQeXRob24KKyIgTWFpbnRhaW5lcjoJTmVpbCBTY2hlbWVuYXVlciA8bmFzQHB5dGhvbi5jYT4KKyIgVXBkYXRlZDoJMjAwMi0xMC0xOAorIgorIiBPcHRpb25zIHRvIGNvbnRyb2wgUHl0aG9uIHN5bnRheCBoaWdobGlnaHRpbmc6CisiCisiIEZvciBoaWdobGlnaHRlZCBudW1iZXJzOgorIgorIiAgICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzID0gMQorIgorIiBGb3IgaGlnaGxpZ2h0ZWQgYnVpbHRpbiBmdW5jdGlvbnM6CisiCisiICAgIGxldCBweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zID0gMQorIgorIiBGb3IgaGlnaGxpZ2h0ZWQgc3RhbmRhcmQgZXhjZXB0aW9uczoKKyIKKyIgICAgbGV0IHB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyA9IDEKKyIKKyIgSGlnaGxpZ2h0IGVycm9uZW91cyB3aGl0ZXNwYWNlOgorIgorIiAgICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMgPSAxCisiCisiIElmIHlvdSB3YW50IGFsbCBwb3NzaWJsZSBQeXRob24gaGlnaGxpZ2h0aW5nICh0aGUgc2FtZSBhcyBzZXR0aW5nIHRoZQorIiBwcmVjZWRpbmcgb3B0aW9ucyk6CisiCisiICAgIGxldCBweXRob25faGlnaGxpZ2h0X2FsbCA9IDEKKyIKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisKK3N5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudAlicmVhayBjb250aW51ZSBkZWwKK3N5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudAlleGNlcHQgZXhlYyBmaW5hbGx5CitzeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQJcGFzcyBwcmludCByYWlzZQorc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50CXJldHVybiB0cnkKK3N5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudAlnbG9iYWwgYXNzZXJ0CitzeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQJbGFtYmRhIHlpZWxkCitzeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQJZGVmIGNsYXNzIG5leHRncm91cD1weXRob25GdW5jdGlvbiBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHB5dGhvbkZ1bmN0aW9uCSJbYS16QS1aX11bYS16QS1aMC05X10qIiBjb250YWluZWQKK3N5biBrZXl3b3JkIHB5dGhvblJlcGVhdAlmb3Igd2hpbGUKK3N5biBrZXl3b3JkIHB5dGhvbkNvbmRpdGlvbmFsCWlmIGVsaWYgZWxzZQorc3luIGtleXdvcmQgcHl0aG9uT3BlcmF0b3IJYW5kIGluIGlzIG5vdCBvcgorc3luIGtleXdvcmQgcHl0aG9uUHJlQ29uZGl0CWltcG9ydCBmcm9tCitzeW4gbWF0Y2ggICBweXRob25Db21tZW50CSIjLiokIiBjb250YWlucz1weXRob25Ub2RvCitzeW4ga2V5d29yZCBweXRob25Ub2RvCQlUT0RPIEZJWE1FIFhYWCBjb250YWluZWQKKworIiBzdHJpbmdzCitzeW4gcmVnaW9uIHB5dGhvblN0cmluZwkJbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPScrIGVuZD0rJysgc2tpcD0rXFxcXFx8XFwnKyBjb250YWlucz1weXRob25Fc2NhcGUKK3N5biByZWdpb24gcHl0aG9uU3RyaW5nCQltYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9IisgZW5kPSsiKyBza2lwPStcXFxcXHxcXCIrIGNvbnRhaW5zPXB5dGhvbkVzY2FwZQorc3luIHJlZ2lvbiBweXRob25TdHJpbmcJCW1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD0iIiIrIGVuZD0rIiIiKyBjb250YWlucz1weXRob25Fc2NhcGUKK3N5biByZWdpb24gcHl0aG9uU3RyaW5nCQltYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9JycnKyBlbmQ9KycnJysgY29udGFpbnM9cHl0aG9uRXNjYXBlCitzeW4gcmVnaW9uIHB5dGhvblJhd1N0cmluZwltYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9W3JSXScrIGVuZD0rJysgc2tpcD0rXFxcXFx8XFwnKworc3luIHJlZ2lvbiBweXRob25SYXdTdHJpbmcJbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPVtyUl0iKyBlbmQ9KyIrIHNraXA9K1xcXFxcfFxcIisKK3N5biByZWdpb24gcHl0aG9uUmF3U3RyaW5nCW1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdIiIiKyBlbmQ9KyIiIisKK3N5biByZWdpb24gcHl0aG9uUmF3U3RyaW5nCW1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdJycnKyBlbmQ9KycnJysKK3N5biBtYXRjaCAgcHl0aG9uRXNjYXBlCQkrXFxbYWJmbnJ0diciXFxdKyBjb250YWluZWQKK3N5biBtYXRjaCAgcHl0aG9uRXNjYXBlCQkiXFxcb1x7MSwzfSIgY29udGFpbmVkCitzeW4gbWF0Y2ggIHB5dGhvbkVzY2FwZQkJIlxceFx4XHsyfSIgY29udGFpbmVkCitzeW4gbWF0Y2ggIHB5dGhvbkVzY2FwZQkJIlwoXFx1XHhcezR9XHxcXFVceFx7OH1cKSIgY29udGFpbmVkCitzeW4gbWF0Y2ggIHB5dGhvbkVzY2FwZQkJIlxcJCIKKworaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2FsbCIpCisgIGxldCBweXRob25faGlnaGxpZ2h0X251bWJlcnMgPSAxCisgIGxldCBweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zID0gMQorICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zID0gMQorICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMgPSAxCitlbmRpZgorCitpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyIpCisgICIgbnVtYmVycyAoaW5jbHVkaW5nIGxvbmdzIGFuZCBjb21wbGV4KQorICBzeW4gbWF0Y2ggICBweXRob25OdW1iZXIJIlw8MHhceFwrW0xsXVw9XD4iCisgIHN5biBtYXRjaCAgIHB5dGhvbk51bWJlcgkiXDxcZFwrW0xsakpdXD1cPiIKKyAgc3luIG1hdGNoICAgcHl0aG9uTnVtYmVyCSJcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IgorICBzeW4gbWF0Y2ggICBweXRob25OdW1iZXIJIlw8XGRcK1wuXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiIKKyAgc3luIG1hdGNoICAgcHl0aG9uTnVtYmVyCSJcPFxkXCtcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IgorZW5kaWYKKworaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zIikKKyAgIiBidWlsdGluIGZ1bmN0aW9ucywgdHlwZXMgYW5kIG9iamVjdHMsIG5vdCByZWFsbHkgcGFydCBvZiB0aGUgc3ludGF4CisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4JRWxsaXBzaXMgTm9uZSBOb3RJbXBsZW1lbnRlZCBfX2ltcG9ydF9fIGFicworICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluCWFwcGx5IGJ1ZmZlciBjYWxsYWJsZSBjaHIgY2xhc3NtZXRob2QgY21wCisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4JY29lcmNlIGNvbXBpbGUgY29tcGxleCBkZWxhdHRyIGRpY3QgZGlyIGRpdm1vZAorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluCWV2YWwgZXhlY2ZpbGUgZmlsZSBmaWx0ZXIgZmxvYXQgZ2V0YXR0ciBnbG9iYWxzCisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4JaGFzYXR0ciBoYXNoIGhleCBpZCBpbnB1dCBpbnQgaW50ZXJuIGlzaW5zdGFuY2UKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbglpc3N1YmNsYXNzIGl0ZXIgbGVuIGxpc3QgbG9jYWxzIGxvbmcgbWFwIG1heAorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluCW1pbiBvYmplY3Qgb2N0IG9wZW4gb3JkIHBvdyBwcm9wZXJ0eSByYW5nZQorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluCXJhd19pbnB1dCByZWR1Y2UgcmVsb2FkIHJlcHIgcm91bmQgc2V0YXR0cgorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluCXNsaWNlIHN0YXRpY21ldGhvZCBzdHIgc3VwZXIgdHVwbGUgdHlwZSB1bmljaHIKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbgl1bmljb2RlIHZhcnMgeHJhbmdlIHppcAorZW5kaWYKKworaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMiKQorICAiIGJ1aWx0aW4gZXhjZXB0aW9ucyBhbmQgd2FybmluZ3MKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uCUFyaXRobWV0aWNFcnJvciBBc3NlcnRpb25FcnJvciBBdHRyaWJ1dGVFcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24JRGVwcmVjYXRpb25XYXJuaW5nIEVPRkVycm9yIEVudmlyb25tZW50RXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uCUV4Y2VwdGlvbiBGbG9hdGluZ1BvaW50RXJyb3IgSU9FcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24JSW1wb3J0RXJyb3IgSW5kZW50YXRpb25FcnJvciBJbmRleEVycm9yCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbglLZXlFcnJvciBLZXlib2FyZEludGVycnVwdCBMb29rdXBFcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24JTWVtb3J5RXJyb3IgTmFtZUVycm9yIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uCU9TRXJyb3IgT3ZlcmZsb3dFcnJvciBPdmVyZmxvd1dhcm5pbmcKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uCVJlZmVyZW5jZUVycm9yIFJ1bnRpbWVFcnJvciBSdW50aW1lV2FybmluZworICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24JU3RhbmRhcmRFcnJvciBTdG9wSXRlcmF0aW9uIFN5bnRheEVycm9yCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbglTeW50YXhXYXJuaW5nIFN5c3RlbUVycm9yIFN5c3RlbUV4aXQgVGFiRXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uCVR5cGVFcnJvciBVbmJvdW5kTG9jYWxFcnJvciBVbmljb2RlRXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uCVVzZXJXYXJuaW5nIFZhbHVlRXJyb3IgV2FybmluZyBXaW5kb3dzRXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uCVplcm9EaXZpc2lvbkVycm9yCitlbmRpZgorCitpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzIikKKyAgIiB0cmFpbGluZyB3aGl0ZXNwYWNlCisgIHN5biBtYXRjaCAgIHB5dGhvblNwYWNlRXJyb3IgICBkaXNwbGF5IGV4Y2x1ZGVubCAiXFNcc1wrJCJtcz1zKzEKKyAgIiBtaXhlZCB0YWJzIGFuZCBzcGFjZXMKKyAgc3luIG1hdGNoICAgcHl0aG9uU3BhY2VFcnJvciAgIGRpc3BsYXkgIiBcK1x0IgorICBzeW4gbWF0Y2ggICBweXRob25TcGFjZUVycm9yICAgZGlzcGxheSAiXHRcKyAiCitlbmRpZgorCisiIFRoaXMgaXMgZmFzdCBidXQgY29kZSBpbnNpZGUgdHJpcGxlIHF1b3RlZCBzdHJpbmdzIHNjcmV3cyBpdCB1cC4gSXQKKyIgaXMgaW1wb3NzaWJsZSB0byBmaXggYmVjYXVzZSB0aGUgb25seSB3YXkgdG8ga25vdyBpZiB5b3UgYXJlIGluc2lkZSBhCisiIHRyaXBsZSBxdW90ZWQgc3RyaW5nIGlzIHRvIHN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gSWYKKyIgeW91IGhhdmUgYSBmYXN0IG1hY2hpbmUgeW91IGNhbiB0cnkgdW5jb21tZW50aW5nIHRoZSAic3luYyBtaW5saW5lcyIKKyIgYW5kIGNvbW1lbnRpbmcgb3V0IHRoZSByZXN0Lgorc3luIHN5bmMgbWF0Y2ggcHl0aG9uU3luYyBncm91cGhlcmUgTk9ORSAiKTokIgorc3luIHN5bmMgbWF4bGluZXM9MjAwCisic3luIHN5bmMgbWlubGluZXM9MjAwMAorCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcHl0aG9uX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPD0gNTA4CisgICAgbGV0IGRpZF9weXRob25fc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFRoZSBkZWZhdWx0IG1ldGhvZHMgZm9yIGhpZ2hsaWdodGluZy4gIENhbiBiZSBvdmVycmlkZGVuIGxhdGVyCisgIEhpTGluayBweXRob25TdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluayBweXRob25GdW5jdGlvbgkJRnVuY3Rpb24KKyAgSGlMaW5rIHB5dGhvbkNvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCisgIEhpTGluayBweXRob25SZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgcHl0aG9uU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHB5dGhvblJhd1N0cmluZwlTdHJpbmcKKyAgSGlMaW5rIHB5dGhvbkVzY2FwZQkJU3BlY2lhbAorICBIaUxpbmsgcHl0aG9uT3BlcmF0b3IJCU9wZXJhdG9yCisgIEhpTGluayBweXRob25QcmVDb25kaXQJUHJlQ29uZGl0CisgIEhpTGluayBweXRob25Db21tZW50CQlDb21tZW50CisgIEhpTGluayBweXRob25Ub2RvCQlUb2RvCisgIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzIikKKyAgICBIaUxpbmsgcHl0aG9uTnVtYmVyCU51bWJlcgorICBlbmRpZgorICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMiKQorICAgIEhpTGluayBweXRob25CdWlsdGluCUZ1bmN0aW9uCisgIGVuZGlmCisgIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zIikKKyAgICBIaUxpbmsgcHl0aG9uRXhjZXB0aW9uCUV4Y2VwdGlvbgorICBlbmRpZgorICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzIikKKyAgICBIaUxpbmsgcHl0aG9uU3BhY2VFcnJvcglFcnJvcgorICBlbmRpZgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJweXRob24iCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9xZi52aW0gYi9ydW50aW1lL3N5bnRheC9xZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5ODdhOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3FmLnZpbQpAQCAtMCwwICsxLDI0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJUXVpY2tmaXggd2luZG93CisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgY2hhbmdlOgkyMDAxIEphbiAxNQorCisiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEEgYnVuY2ggb2YgdXNlZnVsIEMga2V5d29yZHMKK3N5biBtYXRjaAlxZkZpbGVOYW1lCSJeW158XSoiIG5leHRncm91cD1xZlNlcGFyYXRvcgorc3luIG1hdGNoCXFmU2VwYXJhdG9yCSJ8IiBuZXh0Z3JvdXA9cWZMaW5lTnIgY29udGFpbmVkCitzeW4gbWF0Y2gJcWZMaW5lTnIJIltefF0qIiBjb250YWluZWQgY29udGFpbnM9cWZFcnJvcgorc3luIG1hdGNoCXFmRXJyb3IJCSJlcnJvciIgY29udGFpbmVkCisKKyIgVGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgoraGkgZGVmIGxpbmsgcWZGaWxlTmFtZQlEaXJlY3RvcnkKK2hpIGRlZiBsaW5rIHFmTGluZU5yCUxpbmVOcgoraGkgZGVmIGxpbmsgcWZFcnJvcglFcnJvcgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJxZiIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3F1YWtlLnZpbSBiL3J1bnRpbWUvc3ludGF4L3F1YWtlLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWU4YzcxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcXVha2UudmltCkBAIC0wLDAgKzEsMTYyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIFF1YWtlWzEtM10gQ29uZmlndXJhdGlvbiBGaWxlCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9zeW50YXgvcGNwL3F1YWtlLworIiBMYXRlc3QgUmV2aXNpb246ICAyMDA0LTA1LTIyCisiIGFyY2gtdGFnOgkgICAgYTk1NzkzZDctY2FiMy00NTQ0LWE3OGMtMWNlYTQ3YjU4NzBiCisiIFZhcmlhYmxlczogCXF1YWtlX2lzX3F1YWtlMSAtIHRoZSBzeW50YXggaXMgdG8gYmUgdXNlZCBmb3IgcXVha2UxIGNvbmZpZ3MKKyIgCQlxdWFrZV9pc19xdWFrZTIgLSB0aGUgc3ludGF4IGlzIHRvIGJlIHVzZWQgZm9yIHF1YWtlMiBjb25maWdzCisiIAkJcXVha2VfaXNfcXVha2UzIC0gdGhlIHN5bnRheCBpcyB0byBiZSB1c2VkIGZvciBxdWFrZTMgY29uZmlncworCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisKKyIgU2V0IGlza2V5d29yZCBzaW5jZSB3ZSBuZWVkIGAtJyAoYW5kIHBvdGVudGlhbGx5IG90aGVycykgaW4ga2V5d29yZHMuCisiIEZvciB2ZXJzaW9uIDUueDogU2V0IGl0IGdsb2JhbGx5CisiIEZvciB2ZXJzaW9uIDYueDogU2V0IGl0IGxvY2FsbHkKK2lmIHZlcnNpb24gPj0gNjAwCisgIGNvbW1hbmQgLW5hcmdzPTEgU2V0SXNrIHNldGxvY2FsIGlza2V5d29yZD08YXJncz4KK2Vsc2UKKyAgY29tbWFuZCAtbmFyZ3M9MSBTZXRJc2sgc2V0IGlza2V5d29yZD08YXJncz4KK2VuZGlmCitTZXRJc2sgNDgtNTcsNjUtOTAsOTctMTIyLCssLSxfCitkZWxjb21tYW5kIFNldElzaworCisKKyIgY29tbWVudHMKK3N5biByZWdpb24JcXVha2VDb21tZW50CWRpc3BsYXkgb25lbGluZSBzdGFydD0iLy8iIGVuZD0iJCIgZW5kPSI7IiBrZWVwZW5kIGNvbnRhaW5zPXF1YWtlVG9kbworCisiIHRvZG8KK3N5biBrZXl3b3JkCXF1YWtlVG9kbwljb250YWluZWQgVE9ETyBGSVhNRSBYWFggTk9URQorCisiIHN0cmluZyAoY2FuIGNvbnRhaW4gbnVtYmVycyAod2hpY2ggc2hvdWxkIGJlIGhpbGlnaHRlZCBhcyBzdWNoKQorc3luIHJlZ2lvbglxdWFrZVN0cmluZwlkaXNwbGF5IG9uZWxpbmUgc3RhcnQ9KyIrIHNraXA9K1xcIisgZW5kPSsiXHwkKyBjb250YWlucz1xdWFrZU51bWJlcnMsQHF1YWtlQ29tbWFuZHMKKworIiBudW1iZXIKK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoCXF1YWtlTnVtYmVycwlkaXNwbGF5IHRyYW5zcGFyZW50ICJcPFxkXHxcLlxkIiBjb250YWlucz1xdWFrZU51bWJlcixxdWFrZUZsb2F0LHF1YWtlT2N0YWxFcnJvcixxdWFrZU9jdGFsCitzeW4gbWF0Y2gJcXVha2VOdW1iZXIJZGlzcGxheSBjb250YWluZWQgIlxkXCtcPiIKKyIgRmxhZyB0aGUgZmlyc3QgemVybyBvZiBhbiBvY3RhbCBudW1iZXIgYXMgc29tZXRoaW5nIHNwZWNpYWwKK3N5biBtYXRjaAlxdWFrZU9jdGFsCWRpc3BsYXkgY29udGFpbmVkICIwXG9cK1w+IiBjb250YWlucz1xdWFrZU9jdGFsWmVybworc3luIG1hdGNoCXF1YWtlT2N0YWxaZXJvCWRpc3BsYXkgY29udGFpbmVkICJcPDAiCisiIGZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QKK3N5biBtYXRjaAlxdWFrZUZsb2F0CWRpc3BsYXkgY29udGFpbmVkICJcZFwrXC5cZCoiCisiIGZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdAorc3luIG1hdGNoCXF1YWtlRmxvYXQJZGlzcGxheSBjb250YWluZWQgIlwuXGRcK1w+IgorIiBmbGFnIGFuIG9jdGFsIG51bWJlciB3aXRoIHdyb25nIGRpZ2l0cworc3luIG1hdGNoCXF1YWtlT2N0YWxFcnJvcglkaXNwbGF5IGNvbnRhaW5lZCAiMFxvKls4OV1cZCoiCitzeW4gY2FzZSBtYXRjaAorCisiIGNvbW1hbmRzCitzeW4gY2FzZSBpZ25vcmUKK3N5biBjbHVzdGVyCXF1YWtlQ29tbWFuZHMJY29udGFpbnM9cXVha2VDb21tYW5kLHF1YWtlMUNvbW1hbmQscXVha2UxMkNvbW1hbmQsUXVha2UyQ29tbWFuZCxRdWFrZTIzQ29tbWFuZCxRdWFrZTNDb21tYW5kCisKK3N5biBrZXl3b3JkCXF1YWtlQ29tbWFuZAkrYXR0YWNrICtiYWNrICtmb3J3YXJkICtsZWZ0ICtsb29rZG93biArbG9va3VwCitzeW4ga2V5d29yZAlxdWFrZUNvbW1hbmQJK21sb29rICttb3ZlZG93biArbW92ZWxlZnQgK21vdmVyaWdodCArbW92ZXVwCitzeW4ga2V5d29yZAlxdWFrZUNvbW1hbmQJK3JpZ2h0ICtzcGVlZCArc3RyYWZlIC1hdHRhY2sgLWJhY2sgYmluZAorc3luIGtleXdvcmQJcXVha2VDb21tYW5kCWJpbmRsaXN0IGNlbnRlcnZpZXcgY2xlYXIgY29ubmVjdCBjdmFybGlzdCBkaXIKK3N5biBrZXl3b3JkCXF1YWtlQ29tbWFuZAlkaXNjb25uZWN0IGR1bXB1c2VyIGVjaG8gZXJyb3IgZXhlYyAtZm9yd2FyZAorc3luIGtleXdvcmQJcXVha2VDb21tYW5kCWdvZCBoZWFydGJlYXQgam95X2FkdmFuY2VkdXBkYXRlIGtpY2sga2lsbAorc3luIGtleXdvcmQJcXVha2VDb21tYW5kCWtpbGxzZXJ2ZXIgLWxlZnQgLWxvb2tkb3duIC1sb29rdXAgbWFwCitzeW4ga2V5d29yZAlxdWFrZUNvbW1hbmQJbWVzc2FnZW1vZGUgbWVzc2FnZW1vZGUyIC1tbG9vayBtb2RlbGxpc3QKK3N5biBrZXl3b3JkCXF1YWtlQ29tbWFuZAktbW92ZWRvd24gLW1vdmVsZWZ0IC1tb3ZlcmlnaHQgLW1vdmV1cCBwbGF5CitzeW4ga2V5d29yZAlxdWFrZUNvbW1hbmQJcXVpdCByY29uIHJlY29ubmVjdCByZWNvcmQgLXJpZ2h0IHNheSBzYXlfdGVhbQorc3luIGtleXdvcmQJcXVha2VDb21tYW5kCXNjcmVlbnNob3Qgc2VydmVyaW5mbyBzZXJ2ZXJyZWNvcmQgc2VydmVyc3RvcAorc3luIGtleXdvcmQJcXVha2VDb21tYW5kCXNldCBzaXplZG93biBzaXpldXAgc25kX3Jlc3RhcnQgc291bmRpbmZvCitzeW4ga2V5d29yZAlxdWFrZUNvbW1hbmQJc291bmRsaXN0IC1zcGVlZCBzcG1hcCBzdGF0dXMgLXN0cmFmZSBzdG9wc291bmQKK3N5biBrZXl3b3JkCXF1YWtlQ29tbWFuZAl0b2dnbGVjb25zb2xlIHVuYmluZCB1bmJpbmRhbGwgdXNlcmluZm8gcGF1c2UKK3N5biBrZXl3b3JkCXF1YWtlQ29tbWFuZAl2aWRfcmVzdGFydCB2aWV3cG9zIHdhaXQgd2VhcG5leHQgd2VhcHByZXYKKworaWYgZXhpc3RzKCJxdWFrZV9pc19xdWFrZTEiKQorc3luIGtleXdvcmQJcXVha2UxQ29tbWFuZAlzdgorZW5kaWYKKworaWYgZXhpc3RzKCJxdWFrZV9pc19xdWFrZTEiKSB8fCBleGlzdHMoInF1YWtlX2lzX3F1YWtlMiIpCitzeW4ga2V5d29yZAlxdWFrZTEyQ29tbWFuZAkra2xvb2sgYWxpYXMgY2QgaW1wdWxzZSBsaW5rIGxvYWQgc2F2ZQorc3luIGtleXdvcmQJcXVha2UxMkNvbW1hbmQJdGltZXJlZnJlc2ggY2hhbmdpbmcgaW5mbyBsb2FkaW5nCitzeW4ga2V5d29yZAlxdWFrZTEyQ29tbWFuZAlwaW5nc2VydmVycyBwbGF5ZXJsaXN0IHBsYXllcnMgc2NvcmUKK2VuZGlmCisKK2lmIGV4aXN0cygicXVha2VfaXNfcXVha2UyIikKK3N5biBrZXl3b3JkCXF1YWtlMkNvbW1hbmQJY21kIGRlbW9tYXAgK3VzZSBjb25kdW1wIGRvd25sb2FkIGRyb3AgZ2FtZW1hcAorc3luIGtleXdvcmQJcXVha2UyQ29tbWFuZAlnaXZlIGd1bl9tb2RlbCBzZXRtYXN0ZXIgc2t5IHN2X21hcGxpc3Qgd2F2ZQorc3luIGtleXdvcmQJcXVha2UyQ29tbWFuZAljbWRsaXN0IGdhbWV2ZXJzaW9uYSBndW5fbmV4dCBndW5fcHJldiBpbnZkcm9wCitzeW4ga2V5d29yZAlxdWFrZTJDb21tYW5kCWludmVuIGludm5leHQgaW52bmV4dHAgaW52bmV4dHcgaW52cHJldgorc3luIGtleXdvcmQJcXVha2UyQ29tbWFuZAlpbnZwcmV2cCBpbnZwcmV2dyBpbnZ1c2UgbWVudV9hZGRyZXNzYm9vaworc3luIGtleXdvcmQJcXVha2UyQ29tbWFuZAltZW51X2NyZWRpdHMgbWVudV9kbW9wdGlvbnMgbWVudV9nYW1lCitzeW4ga2V5d29yZAlxdWFrZTJDb21tYW5kCW1lbnVfam9pbnNlcnZlciBtZW51X2tleXMgbWVudV9sb2FkZ2FtZQorc3luIGtleXdvcmQJcXVha2UyQ29tbWFuZAltZW51X21haW4gbWVudV9tdWx0aXBsYXllciBtZW51X29wdGlvbnMKK3N5biBrZXl3b3JkCXF1YWtlMkNvbW1hbmQJbWVudV9wbGF5ZXJjb25maWcgbWVudV9xdWl0IG1lbnVfc2F2ZWdhbWUKK3N5biBrZXl3b3JkCXF1YWtlMkNvbW1hbmQJbWVudV9zdGFydHNlcnZlciBtZW51X3ZpZGVvCitzeW4ga2V5d29yZAlxdWFrZTJDb21tYW5kCW5vdGFyZ2V0IHByZWNhY2hlIHByb2cgdG9nZ2xlY2hhdCB2aWRfZnJvbnQKK3N5biBrZXl3b3JkCXF1YWtlMkNvbW1hbmQJd2VhcGxhc3QKK2VuZGlmCisKK2lmIGV4aXN0cygicXVha2VfaXNfcXVha2UyIikgfHwgZXhpc3RzKCJxdWFrZV9pc19xdWFrZTMiKQorc3luIGtleXdvcmQJcXVha2UyM0NvbW1hbmQJaW1hZ2VsaXN0IG1vZGVsbGlzdCBwYXRoIHpfc3RhdHMKK2VuZGlmCisKK2lmIGV4aXN0cygicXVha2VfaXNfcXVha2UzIikKK3N5biBrZXl3b3JkCXF1YWtlM0NvbW1hbmQJK2luZm8gK3Njb3JlcyArem9vbSBhZGRib3QgYXJlbmEgYmFuQ2xpZW50CitzeW4ga2V5d29yZAlxdWFrZTNDb21tYW5kCWJhblVzZXIgY2FsbHRlYW12b3RlIGNhbGx2b3RlIGNoYW5nZVZlY3RvcnMKK3N5biBrZXl3b3JkCXF1YWtlM0NvbW1hbmQJY2luZW1hdGljIGNsaWVudGluZm8gY2xpZW50a2ljayBjbWQgY21kbGlzdAorc3luIGtleXdvcmQJcXVha2UzQ29tbWFuZAljb25kdW1wIGNvbmZpZ3N0cmluZ3MgY3Jhc2ggY3Zhcl9yZXN0YXJ0IGRldm1hcAorc3luIGtleXdvcmQJcXVha2UzQ29tbWFuZAlmZGlyIGZvbGxvdyBmcmVlemUgZnNfb3BlbmVkTGlzdCBGc19wdXJlTGlzdAorc3luIGtleXdvcmQJcXVha2UzQ29tbWFuZAlGc19yZWZlcmVuY2VkTGlzdCBnZnhpbmZvIGdsb2JhbHNlcnZlcnMKK3N5biBrZXl3b3JkCXF1YWtlM0NvbW1hbmQJaHVua19zdGF0cyBpbl9yZXN0YXJ0IC1pbmZvIGxldmVsc2hvdAorc3luIGtleXdvcmQJcXVha2UzQ29tbWFuZAlsb2FkZGVmZXJyZWQgbG9jYWxzZXJ2ZXJzIG1hcF9yZXN0YXJ0IG1lbV9pbmZvCitzeW4ga2V5d29yZAlxdWFrZTNDb21tYW5kCW1lc3NhZ2Vtb2RlMyBtZXNzYWdlbW9kZTQgbWlkaWluZm8gbW9kZWwgbXVzaWMKK3N5biBrZXl3b3JkCXF1YWtlM0NvbW1hbmQJbW9kZWxpc3QgbmV0X3Jlc3RhcnQgbmV4dGZyYW1lIG5leHRza2luIG5vY2xpcAorc3luIGtleXdvcmQJcXVha2UzQ29tbWFuZAlub3RhcmdldCBwaW5nIHByZXZmcmFtZSBwcmV2c2tpbiByZXNldCByZXN0YXJ0CitzeW4ga2V5d29yZAlxdWFrZTNDb21tYW5kCXNfZGlzYWJsZV9hM2Qgc19lbmFibGVfYTNkIHNfaW5mbyBzX2xpc3Qgc19zdG9wCitzeW4ga2V5d29yZAlxdWFrZTNDb21tYW5kCXNjYW5zZXJ2ZXJzIC1zY29yZXMgc2NyZWVuc2hvdEpQRUcgc2VjdG9ybGlzdAorc3luIGtleXdvcmQJcXVha2UzQ29tbWFuZAlzZXJ2ZXJzdGF0dXMgc2V0YSBzZXRlbnYgc2V0cyBzZXR1IHNldHZpZXdwb3MKK3N5biBrZXl3b3JkCXF1YWtlM0NvbW1hbmQJc2hhZGVybGlzdCBzaG93aXAgc2tpbmxpc3Qgc3BkZXZtYXAgc3RhcnRPcmlidAorc3luIGtleXdvcmQJcXVha2UzQ29tbWFuZAlzdGF0cyBzdG9wZGVtbyBzdG9wcmVjb3JkIHN5c3RlbWluZm8gdG9nZ2xlbWVudQorc3luIGtleXdvcmQJcXVha2UzQ29tbWFuZAl0Y21kIHRlYW0gdGVhbXRhc2sgdGVhbXZvdGUgdGVsbCB0ZWxsX2F0dGFja2VyCitzeW4ga2V5d29yZAlxdWFrZTNDb21tYW5kCXRlbGxfdGFyZ2V0IHRlc3RndW4gdGVzdG1vZGVsIHRlc3RzaGFkZXIgdG9nZ2xlCitzeW4ga2V5d29yZAlxdWFrZTNDb21tYW5kCXRvdWNoRmlsZSB2bWluZm8gdm1wcm9maWxlIHZtdGVzdCB2b3NheQorc3luIGtleXdvcmQJcXVha2UzQ29tbWFuZAl2b3NheV90ZWFtIHZvdGUgdm90ZWxsIHZzYXkgdnNheV90ZWFtIHZzdHIKK3N5biBrZXl3b3JkCXF1YWtlM0NvbW1hbmQJdnRhdW50IHZ0ZWxsIHZ0ZWxsX2F0dGFja2VyIHZ0ZWxsX3RhcmdldCB3ZWFwb24KK3N5biBrZXl3b3JkCXF1YWtlM0NvbW1hbmQJd3JpdGVjb25maWcgLXpvb20KK3N5biBtYXRjaAlxdWFrZTNDb21tYW5kCWRpc3BsYXkgIlw8WystXWJ1dHRvblwoXGRcfDFbMC00XVwpXD4iCitlbmRpZgorCitzeW4gY2FzZSBtYXRjaAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zY3JlZW5fc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc2NyZWVuX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHF1YWtlQ29tbWVudCAJQ29tbWVudAorICBIaUxpbmsgcXVha2VUb2RvIAlUb2RvCisgIEhpTGluayBxdWFrZVN0cmluZyAJU3RyaW5nCisgIEhpTGluayBxdWFrZU51bWJlcglOdW1iZXIKKyAgSGlMaW5rIHF1YWtlT2N0YWwJTnVtYmVyCisgIEhpTGluayBxdWFrZU9jdGFsWmVybwlOdW1iZXIKKyAgSGlMaW5rIHF1YWtlRmxvYXQJTnVtYmVyCisgIEhpTGluayBxdWFrZU9jdGFsRXJyb3IJRXJyb3IKKyAgSGlMaW5rIHF1YWtlQ29tbWFuZAlxdWFrZUNvbW1hbmRzCisgIEhpTGluayBxdWFrZTFDb21tYW5kCXF1YWtlQ29tbWFuZHMKKyAgSGlMaW5rIHF1YWtlMTJDb21tYW5kCXF1YWtlQ29tbWFuZHMKKyAgSGlMaW5rIHF1YWtlMkNvbW1hbmQJcXVha2VDb21tYW5kcworICBIaUxpbmsgcXVha2UyM0NvbW1hbmQJcXVha2VDb21tYW5kcworICBIaUxpbmsgcXVha2UzQ29tbWFuZAlxdWFrZUNvbW1hbmRzCisgIEhpTGluayBxdWFrZUNvbW1hbmRzCUtleXdvcmQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvci52aW0gYi9ydW50aW1lL3N5bnRheC9yLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmVjY2E0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvci52aW0KQEAgLTAsMCArMSwxMDQgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglSIChHTlUgUykKKyIgTWFpbnRhaW5lcjoJVG9tIFBheW5lIDx0b21AdG9tcGF5bmUub3JnPgorIiBMYXN0IENoYW5nZTogIDIwMDMgTWF5IDExCisiIEZpbGVuYW1lczoJKi5yCisiIFVSTDoJCWh0dHA6Ly93d3cudG9tcGF5bmUub3JnL3ZpbS9zeW50YXgvci52aW0KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitpZiB2ZXJzaW9uID49IDYwMAorICBzZXRsb2NhbCBpc2tleXdvcmQ9QCw0OC01NyxfLC4KK2Vsc2UKKyAgc2V0IGlza2V5d29yZD1ALDQ4LTU3LF8sLgorZW5kaWYKKworc3luIGNhc2UgbWF0Y2gKKworIiBDb21tZW50CitzeW4gbWF0Y2ggckNvbW1lbnQgL1wjLiovCisKKyIgQ29uc3RhbnQKKyIgc3RyaW5nIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMKK3N5biByZWdpb24gclN0cmluZyBzdGFydD0vIi8gc2tpcD0vXFxcXFx8XFwiLyBlbmQ9LyIvCisiIHN0cmluZyBlbmNsb3NlZCBpbiBzaW5nbGUgcXVvdGVzCitzeW4gcmVnaW9uIHJTdHJpbmcgc3RhcnQ9LycvIHNraXA9L1xcXFxcfFxcJy8gZW5kPS8nLworIiBudW1iZXIgd2l0aCBubyBmcmFjdGlvbmFsIHBhcnQgb3IgZXhwb25lbnQKK3N5biBtYXRjaCByTnVtYmVyIC9cZFwrLworIiBmbG9hdGluZyBwb2ludCBudW1iZXIgd2l0aCBpbnRlZ2VyIGFuZCBmcmFjdGlvbmFsIHBhcnRzIGFuZCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoIHJGbG9hdCAvXGRcK1wuXGQqXChbRWVdWy0rXVw9XGRcK1wpXD0vCisiIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRoIG5vIGludGVnZXIgcGFydCBhbmQgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCByRmxvYXQgL1wuXGRcK1woW0VlXVstK11cPVxkXCtcKVw9LworIiBmbG9hdGluZyBwb2ludCBudW1iZXIgd2l0aCBubyBmcmFjdGlvbmFsIHBhcnQgYW5kIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggckZsb2F0IC9cZFwrW0VlXVstK11cPVxkXCsvCisKKyIgSWRlbnRpZmllcgorIiBpZGVudGlmaWVyIHdpdGggbGVhZGluZyBsZXR0ZXIgYW5kIG9wdGlvbmFsIGZvbGxvd2luZyBrZXl3b3JkIGNoYXJhY3RlcnMKK3N5biBtYXRjaCBySWRlbnRpZmllciAvXGFcayovCisiIGlkZW50aWZpZXIgd2l0aCBsZWFkaW5nIHBlcmlvZCwgb25lIG9yIG1vcmUgZGlnaXRzLCBhbmQgYXQgbGVhc3Qgb25lIG5vbi1kaWdpdCBrZXl3b3JkIGNoYXJhY3Rlcgorc3luIG1hdGNoIHJJZGVudGlmaWVyIC9cLlxkKlxLXGsqLworCisiIFN0YXRlbWVudAorc3luIGtleXdvcmQgclN0YXRlbWVudCAgIGJyZWFrIG5leHQgcmV0dXJuCitzeW4ga2V5d29yZCByQ29uZGl0aW9uYWwgaWYgZWxzZQorc3luIGtleXdvcmQgclJlcGVhdCAgICAgIGZvciBpbiByZXBlYXQgd2hpbGUKKworIiBDb25zdGFudAorc3luIGtleXdvcmQgckNvbnN0YW50IExFVFRFUlMgbGV0dGVycyBtb250aC5hYiBtb250aC5uYW1lIHBpCitzeW4ga2V5d29yZCByQ29uc3RhbnQgTlVMTAorc3luIGtleXdvcmQgckJvb2xlYW4gIEZBTFNFIFRSVUUKK3N5biBrZXl3b3JkIHJOdW1iZXIgICBOQQorCisiIFR5cGUKK3N5biBrZXl3b3JkIHJUeXBlIGFycmF5IGNhdGVnb3J5IGNoYXJhY3RlciBjb21wbGV4IGRvdWJsZSBmdW5jdGlvbiBpbnRlZ2VyIGxpc3QgbG9naWNhbCBtYXRyaXggbnVtZXJpYyB2ZWN0b3IKKworIiBTcGVjaWFsCitzeW4gbWF0Y2ggckRlbGltaXRlciAvWyw7Ol0vCisKKyIgRXJyb3IKK3N5biByZWdpb24gclJlZ2lvbiBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0vKC8gbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPS8pLyB0cmFuc3BhcmVudCBjb250YWlucz1BTExCVVQsckVycm9yLHJCcmFjZUVycm9yLHJDdXJseUVycm9yCitzeW4gcmVnaW9uIHJSZWdpb24gbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9L3svIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0vfS8gdHJhbnNwYXJlbnQgY29udGFpbnM9QUxMQlVULHJFcnJvcixyQnJhY2VFcnJvcixyUGFyZW5FcnJvcgorc3luIHJlZ2lvbiByUmVnaW9uIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PS9cWy8gbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPS9dLyB0cmFuc3BhcmVudCBjb250YWlucz1BTExCVVQsckVycm9yLHJDdXJseUVycm9yLHJQYXJlbkVycm9yCitzeW4gbWF0Y2ggckVycm9yICAgICAgL1spXF19XS8KK3N5biBtYXRjaCByQnJhY2VFcnJvciAvWyl9XS8gY29udGFpbmVkCitzeW4gbWF0Y2ggckN1cmx5RXJyb3IgL1spXF1dLyBjb250YWluZWQKK3N5biBtYXRjaCByUGFyZW5FcnJvciAvW1xdfV0vIGNvbnRhaW5lZAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9yX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3Jfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKyAgSGlMaW5rIHJDb21tZW50ICAgICBDb21tZW50CisgIEhpTGluayByQ29uc3RhbnQgICAgQ29uc3RhbnQKKyAgSGlMaW5rIHJTdHJpbmcgICAgICBTdHJpbmcKKyAgSGlMaW5rIHJOdW1iZXIgICAgICBOdW1iZXIKKyAgSGlMaW5rIHJCb29sZWFuICAgICBCb29sZWFuCisgIEhpTGluayByRmxvYXQgICAgICAgRmxvYXQKKyAgSGlMaW5rIHJTdGF0ZW1lbnQgICBTdGF0ZW1lbnQKKyAgSGlMaW5rIHJDb25kaXRpb25hbCBDb25kaXRpb25hbAorICBIaUxpbmsgclJlcGVhdCAgICAgIFJlcGVhdAorICBIaUxpbmsgcklkZW50aWZpZXIgIElkZW50aWZpZXIKKyAgSGlMaW5rIHJUeXBlCSAgICAgIFR5cGUKKyAgSGlMaW5rIHJEZWxpbWl0ZXIgICBEZWxpbWl0ZXIKKyAgSGlMaW5rIHJFcnJvciAgICAgICBFcnJvcgorICBIaUxpbmsgckJyYWNlRXJyb3IgIEVycm9yCisgIEhpTGluayByQ3VybHlFcnJvciAgRXJyb3IKKyAgSGlMaW5rIHJQYXJlbkVycm9yICBFcnJvcgorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXg9InIiCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3JhZGlhbmNlLnZpbSBiL3J1bnRpbWUvc3ludGF4L3JhZGlhbmNlLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjFiNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcmFkaWFuY2UudmltCkBAIC0wLDAgKzEsMTU5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIFJhZGlhbmNlIFNjZW5lIERlc2NyaXB0aW9uCisiIE1haW50YWluZXI6ICAgR2VvcmcgTWlzY2hsZXIgPHNjaG9yc2NoQHNjaG9yc2NoLmNvbT4KKyIgTGFzdCBjaGFuZ2U6ICAyNi4gQXByaWwuIDIwMDEKKworIiBSYWRpYW5jZSBpcyBhIGxpZ2h0aW5nIHNpbXVsYXRpb24gc29mdHdhcmUgcGFja2FnZSB3cml0dGVuCisiIGJ5IEdyZWdvcnkgV2FyZC1MYXJzb24gKCJ0aGUgY29tcHV0ZXIgYXJ0aXN0IGZvcm1lcmx5IGtub3duCisiIGFzIEdyZWcgV2FyZCIpLCB0aGVuIGF0IExCTkwuCisiCisiIGh0dHA6Ly9yYWRzaXRlLmxibC5nb3YvcmFkaWFuY2UvSE9NRS5odG1sCisiCisiIE9mIGNvdXJzZSwgdGhlcmUgaXMgYWxzbyBpbmZvcm1hdGlvbiBhdmFpbGFibGUgYWJvdXQgaXQKKyIgZnJvbSBodHRwOi8vd3d3LnNjaG9yc2NoLmNvbS8KKworCisiIFdlIHRha2UgYSBtaW5pbWFsaXN0IGFwcHJvYWNoIGhlcmUsIGhpZ2hsaWdodGluZyBqdXN0IHRoZQorIiBlc3NlbnRpYWwgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCwgaXRzIHR5cGUgYW5kIElELCBhcyB3ZWxsIGFzCisiIGNvbW1lbnRzLCBleHRlcm5hbCBjb21tYW5kIG5hbWVzIGFuZCB0aGUgbnVsbC1tb2RpZmllciAidm9pZCIuCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGFsbCBwcmludGluZyBjaGFyYWN0ZXJzIGV4Y2VwdCAnIycgYW5kICchJyBhcmUgdmFsaWQgaW4gbmFtZXMuCitpZiB2ZXJzaW9uID49IDYwMAorICBzZXRsb2NhbCBpc2tleXdvcmQ9XCIsJC1+CitlbHNlCisgIHNldCBpc2tleXdvcmQ9XCIsJC1+CitlbmRpZgorCisiIFRoZSBudWxsLW1vZGlmaWVyCitzeW4ga2V5d29yZCByYWRpYW5jZUtleXdvcmQgdm9pZAorCisiIFRoZSBkaWZmZXJlbnQga2luZHMgb2Ygc2NlbmUgZGVzY3JpcHRpb24gb2JqZWN0IHR5cGVzCisiIFJlZmVyZW5jZSB0eXBlcworc3luIGtleXdvcmQgcmFkaWFuY2VFeHRyYVR5cGUgY29udGFpbmVkIGFsaWFzIGluc3RhbmNlCisiIFN1cmZhY2UgdHlwZXMKK3N5biBrZXl3b3JkIHJhZGlhbmNlU3VyZlR5cGUgY29udGFpbmVkIHJpbmcgcG9seWdvbiBzcGhlcmUgYnViYmxlCitzeW4ga2V5d29yZCByYWRpYW5jZVN1cmZUeXBlIGNvbnRhaW5lZCBjb25lIGN1cCBjeWxpbmRlciB0dWJlIHNvdXJjZQorIiBFbWl0dGluZyBtYXRlcmlhbCB0eXBlcworc3luIGtleXdvcmQgcmFkaWFuY2VMaWdodFR5cGUgY29udGFpbmVkIGxpZ2h0IGdsb3cgaWxsdW0gc3BvdGxpZ2h0CisiIE1hdGVyaWFsIHR5cGVzCitzeW4ga2V5d29yZCByYWRpYW5jZU1hdFR5cGUgY29udGFpbmVkIG1pcnJvciBtaXN0IHByaXNtMSBwcmlzbTIKK3N5biBrZXl3b3JkIHJhZGlhbmNlTWF0VHlwZSBjb250YWluZWQgbWV0YWwgcGxhc3RpYyB0cmFucworc3luIGtleXdvcmQgcmFkaWFuY2VNYXRUeXBlIGNvbnRhaW5lZCBtZXRhbDIgcGxhc3RpYzIgdHJhbnMyCitzeW4ga2V5d29yZCByYWRpYW5jZU1hdFR5cGUgY29udGFpbmVkIG1ldGZ1bmMgcGxhc2Z1bmMgdHJhbnNmdW5jCitzeW4ga2V5d29yZCByYWRpYW5jZU1hdFR5cGUgY29udGFpbmVkIG1ldGRhdGEgcGxhc2RhdGEgdHJhbnNkYXRhCitzeW4ga2V5d29yZCByYWRpYW5jZU1hdFR5cGUgY29udGFpbmVkIGRpZWxlY3RyaWMgaW50ZXJmYWNlIGdsYXNzCitzeW4ga2V5d29yZCByYWRpYW5jZU1hdFR5cGUgY29udGFpbmVkIEJSVERmdW5jIGFudGltYXR0ZXIKKyIgUGF0dGVybiBtb2RpZmllciB0eXBlcworc3luIGtleXdvcmQgcmFkaWFuY2VQYXRUeXBlIGNvbnRhaW5lZCBjb2xvcmZ1bmMgYnJpZ2h0ZnVuYworc3luIGtleXdvcmQgcmFkaWFuY2VQYXRUeXBlIGNvbnRhaW5lZCBjb2xvcmRhdGEgY29sb3JwaWN0IGJyaWdodGRhdGEKK3N5biBrZXl3b3JkIHJhZGlhbmNlUGF0VHlwZSBjb250YWluZWQgY29sb3J0ZXh0IGJyaWdodHRleHQKKyIgVGV4dHVyZSBtb2RpZmllciB0eXBlcworc3luIGtleXdvcmQgcmFkaWFuY2VUZXhUeXBlIGNvbnRhaW5lZCB0ZXhmdW5jIHRleGRhdGEKKyIgTWl4dHVyZSB0eXBlcworc3luIGtleXdvcmQgcmFkaWFuY2VNaXhUeXBlIGNvbnRhaW5lZCBtaXhmdW5jIG1peGRhdGEgbWl4cGljdCBtaXh0ZXh0CisKKworIiBFYWNoIHR5cGUgbmFtZSBpcyBmb2xsb3dlZCBieSBhbiBJRC4KKyIgVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGlmIHRoZSBpZCBpcyBvbmUgb2YgdGhlIHR5cGUgbmFtZXMgb2YgdGhlCisiIHNhbWUgY2xhc3MgKHdoaWNoIGlzIGxlZ2FsIGZvciByYWRpYW5jZSksIGluIHdoaWNoIGNhc2UgdGhlIGlkIHdpbGwgZ2V0CisiIHR5cGUgY29sb3IgYXMgd2VsbCwgYW5kIHRoZSBpbnQgY291bnQgKG9yIGFsaWFzIHJlZmVyZW5jZSkgZ2V0cyBpZCBjb2xvci4KKworc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPGFsaWFzXD4iICAgICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZUV4dHJhVHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPGluc3RhbmNlXD4iICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZUV4dHJhVHlwZQorCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8c291cmNlXD4iICAgICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlU3VyZlR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxyaW5nXD4iCSAgICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZVN1cmZUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8cG9seWdvblw+IiAgICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlU3VyZlR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxzcGhlcmVcPiIgICAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VTdXJmVHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPGJ1YmJsZVw+IiAgICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZVN1cmZUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8Y29uZVw+IgkgICAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VTdXJmVHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPGN1cFw+IgkgICAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VTdXJmVHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPGN5bGluZGVyXD4iICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZVN1cmZUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8dHViZVw+IgkgICAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VTdXJmVHlwZQorCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8bGlnaHRcPiIgICAgICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlTGlnaHRUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8Z2xvd1w+IgkgICAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VMaWdodFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxpbGx1bVw+IiAgICAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VMaWdodFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxzcG90bGlnaHRcPiIgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VMaWdodFR5cGUKKworc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPG1pcnJvclw+IiAgICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZU1hdFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxtaXN0XD4iCSAgICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZU1hdFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxwcmlzbTFcPiIgICAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VNYXRUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8cHJpc20yXD4iICAgICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlTWF0VHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPG1ldGFsXD4iICAgICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZU1hdFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxwbGFzdGljXD4iICAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VNYXRUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8dHJhbnNcPiIgICAgICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlTWF0VHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPG1ldGFsMlw+IiAgICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZU1hdFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxwbGFzdGljMlw+IiAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VNYXRUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8dHJhbnMyXD4iICAgICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlTWF0VHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPG1ldGZ1bmNcPiIgICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZU1hdFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxwbGFzZnVuY1w+IiAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VNYXRUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8dHJhbnNmdW5jXD4iICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlTWF0VHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPG1ldGRhdGFcPiIgICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZU1hdFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxwbGFzZGF0YVw+IiAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VNYXRUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8dHJhbnNkYXRhXD4iICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlTWF0VHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPGRpZWxlY3RyaWNcPiIgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZU1hdFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxpbnRlcmZhY2VcPiIgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VNYXRUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8Z2xhc3NcPiIgICAgICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlTWF0VHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPEJSVERmdW5jXD4iICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZU1hdFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxhbnRpbWF0dGVyXD4iIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VNYXRUeXBlCisKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxjb2xvcmZ1bmNcPiIgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VQYXRUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8YnJpZ2h0ZnVuY1w+IiBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlUGF0VHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPGNvbG9yZGF0YVw+IiAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZVBhdFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxicmlnaHRkYXRhXD4iIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VQYXRUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8Y29sb3JwaWN0XD4iICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlUGF0VHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPGNvbG9ydGV4dFw+IiAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZVBhdFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxicmlnaHR0ZXh0XD4iIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VQYXRUeXBlCisKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDx0ZXhmdW5jXD4iICAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VUZXhUeXBlCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8dGV4ZGF0YVw+IiAgICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlVGV4VHlwZQorCitzeW4gcmVnaW9uIHJhZGlhbmNlSUQgc3RhcnQ9Ilw8bWl4ZnVuY1w+IiAgICBlbmQ9Ilw8XGsqXD4iIGNvbnRhaW5zPXJhZGlhbmNlTWl4VHlwZQorc3luIHJlZ2lvbiByYWRpYW5jZUlEIHN0YXJ0PSJcPG1peGRhdGFcPiIgICAgZW5kPSJcPFxrKlw+IiBjb250YWlucz1yYWRpYW5jZU1peFR5cGUKK3N5biByZWdpb24gcmFkaWFuY2VJRCBzdGFydD0iXDxtaXh0ZXh0XD4iICAgIGVuZD0iXDxcaypcPiIgY29udGFpbnM9cmFkaWFuY2VNaXhUeXBlCisKKyIgZXh0ZXJuYWwgY29tbWFuZHMgKGdlbmVyYXRvcnMsIHhmb3JtIGV0IGFsLikKK3N5biBtYXRjaCByYWRpYW5jZUNvbW1hbmQgIl5ccyohXHMqW15cc11cK1w+IgorCisiIFRoZSB1c3VhbCBzdXNwZWN0cworc3luIGtleXdvcmQgcmFkaWFuY2VUb2RvIGNvbnRhaW5lZCBUT0RPIFhYWAorc3luIG1hdGNoIHJhZGlhbmNlQ29tbWVudCAiIy4qJCIgY29udGFpbnM9cmFkaWFuY2VUb2RvCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3JhZGlhbmNlX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3JhZGlhbmNlX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisgIEhpTGluayByYWRpYW5jZUtleXdvcmQJS2V5d29yZAorICBIaUxpbmsgcmFkaWFuY2VFeHRyYVR5cGUJVHlwZQorICBIaUxpbmsgcmFkaWFuY2VTdXJmVHlwZQlUeXBlCisgIEhpTGluayByYWRpYW5jZUxpZ2h0VHlwZQlUeXBlCisgIEhpTGluayByYWRpYW5jZU1hdFR5cGUJVHlwZQorICBIaUxpbmsgcmFkaWFuY2VQYXRUeXBlCVR5cGUKKyAgSGlMaW5rIHJhZGlhbmNlVGV4VHlwZQlUeXBlCisgIEhpTGluayByYWRpYW5jZU1peFR5cGUJVHlwZQorICBIaUxpbmsgcmFkaWFuY2VDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIHJhZGlhbmNlQ29tbWFuZAlGdW5jdGlvbgorICBIaUxpbmsgcmFkaWFuY2VJRAkJU3RyaW5nCisgIEhpTGluayByYWRpYW5jZVRvZG8JCVRvZG8KKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInJhZGlhbmNlIgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9yYXRwb2lzb24udmltIGIvcnVudGltZS9zeW50YXgvcmF0cG9pc29uLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTA5NGZjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcmF0cG9pc29uLnZpbQpAQCAtMCwwICsxLDI0OSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgRmlsZW5hbWU6CXJhdHBvaXNvbi52aW0KKyIgTGFuZ3VhZ2U6CVJhdHBvaXNvbiBjb25maWd1cmF0aW9uL2NvbW1hbmRzIGZpbGUgKCAvZXRjL3JhdHBvaXNvbnJjIH4vLnJhdHBvaXNvbnJjICkKKyIgTWFpbnRhaW5lcjoJRG91ZyBLZWFybnMgPGRqa2VhMkBtdWdjYS5pdHMubW9uYXNoLmVkdS5hdT4KKyIgVVJMOgkJaHR0cDovL211Z2NhLml0cy5tb25hc2guZWR1LmF1L35kamtlYTIvdmltL3N5bnRheC9yYXRwb2lzb24udmltCisiIExhc3QgQ2hhbmdlOgkyMDA0IEFwciAyNworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBtYXRjaCAgIHJhdHBvaXNvbkNvbW1lbnQJIl5ccyojLiokIgkJY29udGFpbnM9cmF0cG9pc29uVG9kbworCitzeW4ga2V5d29yZCByYXRwb2lzb25Ub2RvCVRPRE8gTk9URSBGSVhNRSBYWFgJY29udGFpbmVkCisKK3N5biBjYXNlIGlnbm9yZQorc3luIGtleXdvcmQgcmF0cG9pc29uQm9vbGVhbkFyZwlvbiBvZmYJCQljb250YWluZWQKK3N5biBjYXNlIG1hdGNoCisKK3N5biBrZXl3b3JkIHJhdHBvaXNvbkNvbW1hbmRBcmcgYWJvcnQgYWRkaG9vayBhbGlhcyBiYW5pc2ggYmluZAkJCQkJCWNvbnRhaW5lZAorc3luIGtleXdvcmQgcmF0cG9pc29uQ29tbWFuZEFyZyBjaGRpciBjbHJ1bm1hbmFnZWQgY29sb24gY3VyZnJhbWUgZGVmYmFyYm9yZGVyCQkJCWNvbnRhaW5lZAorc3luIGtleXdvcmQgcmF0cG9pc29uQ29tbWFuZEFyZyBkZWZiYXJncmF2aXR5IGRlZmJhcnBhZGRpbmcgZGVmYmdjb2xvciBkZWZib3JkZXIgZGVmZmdjb2xvcgkJY29udGFpbmVkCitzeW4ga2V5d29yZCByYXRwb2lzb25Db21tYW5kQXJnIGRlZmZvbnQgZGVmZnJhbWVzZWxzIGRlZmluZWtleSBkZWZpbnB1dHdpZHRoIGRlZm1heHNpemVncmF2aXR5CQljb250YWluZWQKK3N5biBrZXl3b3JkIHJhdHBvaXNvbkNvbW1hbmRBcmcgZGVmcGFkZGluZyBkZWZyZXNpemV1bml0IGRlZnRyYW5zZ3Jhdml0eSBkZWZ3YWl0Y3Vyc29yIGRlZndpbmZtdAljb250YWluZWQKK3N5biBrZXl3b3JkIHJhdHBvaXNvbkNvbW1hbmRBcmcgZGVmd2luZ3Jhdml0eSBkZWZ3aW5saXN0c3R5bGUgZGVmd2lubmFtZSBkZWxldGUgZGVsa21hcAkJCWNvbnRhaW5lZAorc3luIGtleXdvcmQgcmF0cG9pc29uQ29tbWFuZEFyZyBlY2hvIGVzY2FwZSBleGVjIGZkdW1wIGZvY3VzCQkJCQkJY29udGFpbmVkCitzeW4ga2V5d29yZCByYXRwb2lzb25Db21tYW5kQXJnIGZvY3VzZG93biBmb2N1c2xhc3QgZm9jdXNsZWZ0IGZvY3VzcmlnaHQgZm9jdXN1cAkJCWNvbnRhaW5lZAorc3luIGtleXdvcmQgcmF0cG9pc29uQ29tbWFuZEFyZyBmcmVzdG9yZSBmc2VsZWN0IGdkZWxldGUgZ2V0ZW52IGdtZXJnZQkJCQkJY29udGFpbmVkCitzeW4ga2V5d29yZCByYXRwb2lzb25Db21tYW5kQXJnIGdtb3ZlIGduZXcgZ25ld2JnIGduZXh0IGdwcmV2CQkJCQkJY29udGFpbmVkCitzeW4ga2V5d29yZCByYXRwb2lzb25Db21tYW5kQXJnIGdyYXZpdHkgZ3JvdXBzIGdzZWxlY3QgaGVscCBoc3BsaXQJCQkJCWNvbnRhaW5lZAorc3luIGtleXdvcmQgcmF0cG9pc29uQ29tbWFuZEFyZyBpbmZvIGtpbGwgbGFzdG1zZyBsaWNlbnNlIGxpbmsJCQkJCQljb250YWluZWQKK3N5biBrZXl3b3JkIHJhdHBvaXNvbkNvbW1hbmRBcmcgbGlzdGhvb2sgbWV0YSBtc2d3YWl0IG5ld2ttYXAgbmV3d20JCQkJCWNvbnRhaW5lZAorc3luIGtleXdvcmQgcmF0cG9pc29uQ29tbWFuZEFyZyBuZXh0IG5leHRzY3JlZW4gbnVtYmVyIG9ubHkgb3RoZXIJCQkJCWNvbnRhaW5lZAorc3luIGtleXdvcmQgcmF0cG9pc29uQ29tbWFuZEFyZyBwcmV2IHByZXZzY3JlZW4gcXVpdCByZWFka2V5IHJlZGlzcGxheQkJCQkJY29udGFpbmVkCitzeW4ga2V5d29yZCByYXRwb2lzb25Db21tYW5kQXJnIHJlbWhvb2sgcmVtb3ZlIHJlc2l6ZSByZXN0YXJ0IHJ1ZGVuZXNzCQkJCQljb250YWluZWQKK3N5biBrZXl3b3JkIHJhdHBvaXNvbkNvbW1hbmRBcmcgc2VsZWN0IHNldGVudiBzaHJpbmsgc291cmNlIHNwbGl0CQkJCQljb250YWluZWQKK3N5biBrZXl3b3JkIHJhdHBvaXNvbkNvbW1hbmRBcmcgc3RhcnR1cF9tZXNzYWdlIHRpbWUgdGl0bGUgdG1wd20gdW5hbGlhcwkJCQljb250YWluZWQKK3N5biBrZXl3b3JkIHJhdHBvaXNvbkNvbW1hbmRBcmcgdW5iaW5kIHVubWFuYWdlIHVuc2V0ZW52IHZlcmJleGVjIHZlcnNpb24JCQkJY29udGFpbmVkCitzeW4ga2V5d29yZCByYXRwb2lzb25Db21tYW5kQXJnIHZzcGxpdCB3YXJwIHdpbmRvd3Mgc3luIGNhc2UgaWdub3JlCQkJCQljb250YWluZWQKKworc3luIG1hdGNoICAgcmF0cG9pc29uR3Jhdml0eUFyZyAiXDxcKG5cfG5vcnRoXClcPiIJY29udGFpbmVkCitzeW4gbWF0Y2ggICByYXRwb2lzb25HcmF2aXR5QXJnICJcPFwobndcfG5vcnRod2VzdFwpXD4iCWNvbnRhaW5lZAorc3luIG1hdGNoICAgcmF0cG9pc29uR3Jhdml0eUFyZyAiXDxcKG5lXHxub3J0aGVhc3RcKVw+Igljb250YWluZWQKK3N5biBtYXRjaCAgIHJhdHBvaXNvbkdyYXZpdHlBcmcgIlw8XCh3XHx3ZXN0XClcPiIJY29udGFpbmVkCitzeW4gbWF0Y2ggICByYXRwb2lzb25HcmF2aXR5QXJnICJcPFwoY1x8Y2VudGVyXClcPiIJY29udGFpbmVkCitzeW4gbWF0Y2ggICByYXRwb2lzb25HcmF2aXR5QXJnICJcPFwoZVx8ZWFzdFwpXD4iCWNvbnRhaW5lZAorc3luIG1hdGNoICAgcmF0cG9pc29uR3Jhdml0eUFyZyAiXDxcKHNcfHNvdXRoXClcPiIJY29udGFpbmVkCitzeW4gbWF0Y2ggICByYXRwb2lzb25HcmF2aXR5QXJnICJcPFwoc3dcfHNvdXRod2VzdFwpXD4iCWNvbnRhaW5lZAorc3luIG1hdGNoICAgcmF0cG9pc29uR3Jhdml0eUFyZyAiXDxcKHNlXHxzb3V0aGVhc3RcKVw+Igljb250YWluZWQKK3N5biBjYXNlIG1hdGNoCisKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPVwoRlsxLTldWzAtOV1cPVx8XChcYVx8XGRcKVwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKKworc3luIG1hdGNoICAgcmF0cG9pc29uS2V5U2VxQXJnICAiXDxcKFtDTUFTSF1cKC1bQ01BU0hdXClceyw0fS1cKVw9XChzcGFjZVx8ZXhjbGFtXHxxdW90ZWRibFwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPVwobnVtYmVyc2lnblx8ZG9sbGFyXHxwZXJjZW50XHxhbXBlcnNhbmRcKVw+IiBjb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbkNvbW1hbmRBcmcgc2tpcHdoaXRlCitzeW4gbWF0Y2ggICByYXRwb2lzb25LZXlTZXFBcmcgICJcPFwoW0NNQVNIXVwoLVtDTUFTSF1cKVx7LDR9LVwpXD1cKGFwb3N0cm9waGVcfHF1b3RlcmlnaHRcfHBhcmVubGVmdFwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPVwocGFyZW5yaWdodFx8YXN0ZXJpc2tcfHBsdXNcfGNvbW1hXClcPiIgY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25Db21tYW5kQXJnIHNraXB3aGl0ZQorc3luIG1hdGNoICAgcmF0cG9pc29uS2V5U2VxQXJnICAiXDxcKFtDTUFTSF1cKC1bQ01BU0hdXClceyw0fS1cKVw9XChtaW51c1x8cGVyaW9kXHxzbGFzaFx8Y29sb25cfHNlbWljb2xvblwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPVwobGVzc1x8ZXF1YWxcfGdyZWF0ZXJcfHF1ZXN0aW9uXHxhdFwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPVwoYnJhY2tldGxlZnRcfGJhY2tzbGFzaFx8YnJhY2tldHJpZ2h0XClcPiIgY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25Db21tYW5kQXJnIHNraXB3aGl0ZQorc3luIG1hdGNoICAgcmF0cG9pc29uS2V5U2VxQXJnICAiXDxcKFtDTUFTSF1cKC1bQ01BU0hdXClceyw0fS1cKVw9XChhc2NpaWNpcmN1bVx8dW5kZXJzY29yZVx8Z3JhdmVcKVw+IiBjb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbkNvbW1hbmRBcmcgc2tpcHdoaXRlCitzeW4gbWF0Y2ggICByYXRwb2lzb25LZXlTZXFBcmcgICJcPFwoW0NNQVNIXVwoLVtDTUFTSF1cKVx7LDR9LVwpXD1cKHF1b3RlbGVmdFx8YnJhY2VsZWZ0XHxiYXJcfGJyYWNlcmlnaHRcKVw+IiBjb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbkNvbW1hbmRBcmcgc2tpcHdoaXRlCitzeW4gbWF0Y2ggICByYXRwb2lzb25LZXlTZXFBcmcgICJcPFwoW0NNQVNIXVwoLVtDTUFTSF1cKVx7LDR9LVwpXD1cKGFzY2lpdGlsZGVcKVw+IiBjb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbkNvbW1hbmRBcmcgc2tpcHdoaXRlCisKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPVwoQmFja1NwYWNlXHxUYWJcfExpbmVmZWVkXHxDbGVhclwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPVwoUmV0dXJuXHxQYXVzZVx8U2Nyb2xsX0xvY2tcKVw+IiBjb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbkNvbW1hbmRBcmcgc2tpcHdoaXRlCitzeW4gbWF0Y2ggICByYXRwb2lzb25LZXlTZXFBcmcgICJcPFwoW0NNQVNIXVwoLVtDTUFTSF1cKVx7LDR9LVwpXD1cKFN5c19SZXFcfEVzY2FwZVx8RGVsZXRlXClcPiIgY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25Db21tYW5kQXJnIHNraXB3aGl0ZQorCitzeW4gbWF0Y2ggICByYXRwb2lzb25LZXlTZXFBcmcgICJcPFwoW0NNQVNIXVwoLVtDTUFTSF1cKVx7LDR9LVwpXD1cKEhvbWVcfExlZnRcfFVwXHxSaWdodFx8RG93blx8UHJpb3JcKVw+IiBjb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbkNvbW1hbmRBcmcgc2tpcHdoaXRlCitzeW4gbWF0Y2ggICByYXRwb2lzb25LZXlTZXFBcmcgICJcPFwoW0NNQVNIXVwoLVtDTUFTSF1cKVx7LDR9LVwpXD1cKFBhZ2VfVXBcfE5leHRcfFBhZ2VfRG93blx8RW5kXHxCZWdpblwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKKworc3luIG1hdGNoICAgcmF0cG9pc29uS2V5U2VxQXJnICAiXDxcKFtDTUFTSF1cKC1bQ01BU0hdXClceyw0fS1cKVw9XChTZWxlY3RcfFByaW50XHxFeGVjdXRlXHxJbnNlcnRcfFVuZG9cKVw+IiBjb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbkNvbW1hbmRBcmcgc2tpcHdoaXRlCitzeW4gbWF0Y2ggICByYXRwb2lzb25LZXlTZXFBcmcgICJcPFwoW0NNQVNIXVwoLVtDTUFTSF1cKVx7LDR9LVwpXD1cKFJlZG9cfE1lbnVcfEZpbmRcfENhbmNlbFx8SGVscFwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPVwoQnJlYWtcfE1vZGVfc3dpdGNoXHxzY3JpcHRfc3dpdGNoXHxOdW1fTG9ja1wpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKKworc3luIG1hdGNoICAgcmF0cG9pc29uS2V5U2VxQXJnICAiXDxcKFtDTUFTSF1cKC1bQ01BU0hdXClceyw0fS1cKVw9S1BfXChTcGFjZVx8VGFiXHxFbnRlclx8RlsxMjM0XVwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPUtQX1woSG9tZVx8TGVmdFx8VXBcfFJpZ2h0XHxEb3duXClcPiIgY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25Db21tYW5kQXJnIHNraXB3aGl0ZQorc3luIG1hdGNoICAgcmF0cG9pc29uS2V5U2VxQXJnICAiXDxcKFtDTUFTSF1cKC1bQ01BU0hdXClceyw0fS1cKVw9S1BfXChQcmlvclx8UGFnZV9VcFx8TmV4dFx8UGFnZV9Eb3duXClcPiIgY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25Db21tYW5kQXJnIHNraXB3aGl0ZQorc3luIG1hdGNoICAgcmF0cG9pc29uS2V5U2VxQXJnICAiXDxcKFtDTUFTSF1cKC1bQ01BU0hdXClceyw0fS1cKVw9S1BfXChFbmRcfEJlZ2luXHxJbnNlcnRcfERlbGV0ZVwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPUtQX1woRXF1YWxcfE11bHRpcGx5XHxBZGRcfFNlcGFyYXRvclwpXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uQ29tbWFuZEFyZyBza2lwd2hpdGUKK3N5biBtYXRjaCAgIHJhdHBvaXNvbktleVNlcUFyZyAgIlw8XChbQ01BU0hdXCgtW0NNQVNIXVwpXHssNH0tXClcPUtQX1woU3VidHJhY3RcfERlY2ltYWxcfERpdmlkZVx8XGRcKVw+IiBjb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbkNvbW1hbmRBcmcgc2tpcHdoaXRlCisKK3N5biBtYXRjaCAgIHJhdHBvaXNvbkhvb2tBcmcgICAgIlw8XChrZXlcfHN3aXRjaHdpblx8c3dpdGNoZnJhbWVcfHN3aXRjaGdyb3VwXHxxdWl0XHxyZXN0YXJ0XClcPiIgY29udGFpbmVkCisKK3N5biBtYXRjaCAgIHJhdHBvaXNvbk51bWJlckFyZyAgIlw8XGRcK1w+Igljb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbk51bWJlckFyZyBza2lwd2hpdGUKKworc3luIGtleXdvcmQgcmF0cG9pc29uU2V0QXJnCWJhcmJvcmRlcgljb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbk51bWJlckFyZworc3luIGtleXdvcmQgcmF0cG9pc29uU2V0QXJnCWJhcmdyYXZpdHkJY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25HcmF2aXR5QXJnCitzeW4ga2V5d29yZCByYXRwb2lzb25TZXRBcmcJYmFycGFkZGluZwljb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbk51bWJlckFyZworc3luIGtleXdvcmQgcmF0cG9pc29uU2V0QXJnCWJnY29sb3IKK3N5biBrZXl3b3JkIHJhdHBvaXNvblNldEFyZwlib3JkZXIJCWNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uTnVtYmVyQXJnCitzeW4ga2V5d29yZCByYXRwb2lzb25TZXRBcmcJZmdjb2xvcgorc3luIGtleXdvcmQgcmF0cG9pc29uU2V0QXJnCWZvbnQKK3N5biBrZXl3b3JkIHJhdHBvaXNvblNldEFyZwlmcmFtZXNlbHMKK3N5biBrZXl3b3JkIHJhdHBvaXNvblNldEFyZwlpbnB1dHdpZHRoCWNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uTnVtYmVyQXJnCitzeW4ga2V5d29yZCByYXRwb2lzb25TZXRBcmcJbWF4c2l6ZWdyYXZpdHkJY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25HcmF2aXR5QXJnCitzeW4ga2V5d29yZCByYXRwb2lzb25TZXRBcmcJcGFkZGluZwkJY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25OdW1iZXJBcmcKK3N5biBrZXl3b3JkIHJhdHBvaXNvblNldEFyZwlyZXNpemV1bml0CWNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uTnVtYmVyQXJnCitzeW4ga2V5d29yZCByYXRwb2lzb25TZXRBcmcJdHJhbnNncmF2aXR5CWNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uR3Jhdml0eUFyZworc3luIGtleXdvcmQgcmF0cG9pc29uU2V0QXJnCXdhaXRjdXJzb3IJY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25OdW1iZXJBcmcKK3N5biBrZXl3b3JkIHJhdHBvaXNvblNldEFyZwl3aW5mbXQJCWNvbnRhaW5lZCBuZXh0Z3JvdXA9cmF0cG9pc29uV2luRm10QXJnCitzeW4ga2V5d29yZCByYXRwb2lzb25TZXRBcmcJd2luZ3Jhdml0eQljb250YWluZWQgbmV4dGdyb3VwPXJhdHBvaXNvbkdyYXZpdHlBcmcKK3N5biBrZXl3b3JkIHJhdHBvaXNvblNldEFyZwl3aW5saXN0c3R5bGUJY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25XaW5MaXN0QXJnCitzeW4ga2V5d29yZCByYXRwb2lzb25TZXRBcmcJd2lubmFtZQkJY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25XaW5OYW1lQXJnCisKK3N5biBtYXRjaCAgIHJhdHBvaXNvbldpbkZtdEFyZyAgIiVbbnN0YWNpbF0iCQkJY29udGFpbmVkIG5leHRncm91cD1yYXRwb2lzb25XaW5GbXRBcmcgc2tpcHdoaXRlCisKK3N5biBtYXRjaCAgIHJhdHBvaXNvbldpbkxpc3RBcmcgIlw8XChyb3dcfGNvbHVtblwpXD4iCQljb250YWluZWQKKworc3luIG1hdGNoICAgcmF0cG9pc29uV2luTmFtZUFyZyAiXDxcKG5hbWVcfHRpdGxlXHxjbGFzc1wpXD4iCWNvbnRhaW5lZAorCitzeW4gbWF0Y2ggICByYXRwb2lzb25EZWZDb21tYW5kCQkiXlxzKnNldFxzKiIJCQluZXh0Z3JvdXA9cmF0cG9pc29uU2V0QXJnCitzeW4gbWF0Y2ggICByYXRwb2lzb25EZWZDb21tYW5kCQkiXlxzKmRlZmJhcmJvcmRlclxzKiIJCW5leHRncm91cD1yYXRwb2lzb25OdW1iZXJBcmcKK3N5biBtYXRjaCAgIHJhdHBvaXNvbkRlZkNvbW1hbmQJCSJeXHMqZGVmYmFyZ3Jhdml0eVxzKiIJCW5leHRncm91cD1yYXRwb2lzb25HcmF2aXR5QXJnCitzeW4gbWF0Y2ggICByYXRwb2lzb25EZWZDb21tYW5kCQkiXlxzKmRlZmJhcnBhZGRpbmdccyoiCQluZXh0Z3JvdXA9cmF0cG9pc29uTnVtYmVyQXJnCitzeW4gbWF0Y2ggICByYXRwb2lzb25EZWZDb21tYW5kCQkiXlxzKmRlZmJnY29sb3JccyoiCitzeW4gbWF0Y2ggICByYXRwb2lzb25EZWZDb21tYW5kCQkiXlxzKmRlZmJvcmRlclxzKiIJCW5leHRncm91cD1yYXRwb2lzb25OdW1iZXJBcmcKK3N5biBtYXRjaCAgIHJhdHBvaXNvbkRlZkNvbW1hbmQJCSJeXHMqZGVmZmdjb2xvclxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvbkRlZkNvbW1hbmQJCSJeXHMqZGVmZm9udFxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvbkRlZkNvbW1hbmQJCSJeXHMqZGVmZnJhbWVzZWxzXHMqIgorc3luIG1hdGNoICAgcmF0cG9pc29uRGVmQ29tbWFuZAkJIl5ccypkZWZpbnB1dHdpZHRoXHMqIgkJbmV4dGdyb3VwPXJhdHBvaXNvbk51bWJlckFyZworc3luIG1hdGNoICAgcmF0cG9pc29uRGVmQ29tbWFuZAkJIl5ccypkZWZtYXhzaXplZ3Jhdml0eVxzKiIJbmV4dGdyb3VwPXJhdHBvaXNvbkdyYXZpdHlBcmcKK3N5biBtYXRjaCAgIHJhdHBvaXNvbkRlZkNvbW1hbmQJCSJeXHMqZGVmcGFkZGluZ1xzKiIJCW5leHRncm91cD1yYXRwb2lzb25OdW1iZXJBcmcKK3N5biBtYXRjaCAgIHJhdHBvaXNvbkRlZkNvbW1hbmQJCSJeXHMqZGVmcmVzaXpldW5pdFxzKiIJCW5leHRncm91cD1yYXRwb2lzb25OdW1iZXJBcmcKK3N5biBtYXRjaCAgIHJhdHBvaXNvbkRlZkNvbW1hbmQJCSJeXHMqZGVmdHJhbnNncmF2aXR5XHMqIgluZXh0Z3JvdXA9cmF0cG9pc29uR3Jhdml0eUFyZworc3luIG1hdGNoICAgcmF0cG9pc29uRGVmQ29tbWFuZAkJIl5ccypkZWZ3YWl0Y3Vyc29yXHMqIgkJbmV4dGdyb3VwPXJhdHBvaXNvbk51bWJlckFyZworc3luIG1hdGNoICAgcmF0cG9pc29uRGVmQ29tbWFuZAkJIl5ccypkZWZ3aW5mbXRccyoiCQluZXh0Z3JvdXA9cmF0cG9pc29uV2luRm10QXJnCitzeW4gbWF0Y2ggICByYXRwb2lzb25EZWZDb21tYW5kCQkiXlxzKmRlZndpbmdyYXZpdHlccyoiCQluZXh0Z3JvdXA9cmF0cG9pc29uR3Jhdml0eUFyZworc3luIG1hdGNoICAgcmF0cG9pc29uRGVmQ29tbWFuZAkJIl5ccypkZWZ3aW5saXN0c3R5bGVccyoiCW5leHRncm91cD1yYXRwb2lzb25XaW5MaXN0QXJnCitzeW4gbWF0Y2ggICByYXRwb2lzb25EZWZDb21tYW5kCQkiXlxzKmRlZndpbm5hbWVccyoiCQluZXh0Z3JvdXA9cmF0cG9pc29uV2luTmFtZUFyZworc3luIG1hdGNoICAgcmF0cG9pc29uRGVmQ29tbWFuZAkJIl5ccyptc2d3YWl0XHMqIgkJbmV4dGdyb3VwPXJhdHBvaXNvbk51bWJlckFyZworCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzYWRkaG9va1x6ZVxzKiIJCW5leHRncm91cD1yYXRwb2lzb25Ib29rQXJnCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzYWxpYXNcemVccyoiCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzYmluZFx6ZVxzKiIJCW5leHRncm91cD1yYXRwb2lzb25LZXlTZXFBcmcKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenNjaGRpclx6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenNjb2xvblx6ZVxzKiIJCW5leHRncm91cD1yYXRwb2lzb25Db21tYW5kQXJnCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzZGVmaW5la2V5XHplXHMqIgorc3luIG1hdGNoICAgcmF0cG9pc29uU3RyaW5nQ29tbWFuZAkiXlxzKlx6c2RlbGttYXBcemVccyoiCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzZWNob1x6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenNlc2NhcGVcemVccyoiCQluZXh0Z3JvdXA9cmF0cG9pc29uS2V5U2VxQXJnCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzZXhlY1x6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenNmZHVtcFx6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenNmcmVzdG9yZVx6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenNnZGVsZXRlXHplXHMqIgorc3luIG1hdGNoICAgcmF0cG9pc29uU3RyaW5nQ29tbWFuZAkiXlxzKlx6c2dldGVudlx6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenNncmF2aXR5XHplXHMqIgkJbmV4dGdyb3VwPXJhdHBvaXNvbkdyYXZpdHlBcmcKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenNnc2VsZWN0XHplXHMqIgorc3luIG1hdGNoICAgcmF0cG9pc29uU3RyaW5nQ29tbWFuZAkiXlxzKlx6c2xpbmtcemVccyoiCQluZXh0Z3JvdXA9cmF0cG9pc29uS2V5U2VxQXJnCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzbGlzdGhvb2tcemVccyoiCQluZXh0Z3JvdXA9cmF0cG9pc29uSG9va0FyZworc3luIG1hdGNoICAgcmF0cG9pc29uU3RyaW5nQ29tbWFuZAkiXlxzKlx6c25ld2ttYXBcemVccyoiCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzbmV3d21cemVccyoiCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzbnVtYmVyXHplXHMqIgkJbmV4dGdyb3VwPXJhdHBvaXNvbk51bWJlckFyZworc3luIG1hdGNoICAgcmF0cG9pc29uU3RyaW5nQ29tbWFuZAkiXlxzKlx6c3JlYWRrZXlcemVccyoiCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzcmVtaG9va1x6ZVxzKiIJCW5leHRncm91cD1yYXRwb2lzb25Ib29rQXJnCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzcmVzaXplXHplXHMqIgkJbmV4dGdyb3VwPXJhdHBvaXNvbk51bWJlckFyZworc3luIG1hdGNoICAgcmF0cG9pc29uU3RyaW5nQ29tbWFuZAkiXlxzKlx6c3J1ZGVuZXNzXHplXHMqIgkJbmV4dGdyb3VwPXJhdHBvaXNvbk51bWJlckFyZworc3luIG1hdGNoICAgcmF0cG9pc29uU3RyaW5nQ29tbWFuZAkiXlxzKlx6c3NlbGVjdFx6ZVxzKiIJCW5leHRncm91cD1yYXRwb2lzb25OdW1iZXJBcmcKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenNzZXRlbnZcemVccyoiCitzeW4gbWF0Y2ggICByYXRwb2lzb25TdHJpbmdDb21tYW5kCSJeXHMqXHpzc291cmNlXHplXHMqIgorc3luIG1hdGNoICAgcmF0cG9pc29uU3RyaW5nQ29tbWFuZAkiXlxzKlx6c3N0YXJ0dXBfbWVzc2FnZVx6ZVxzKiIJbmV4dGdyb3VwPXJhdHBvaXNvbkJvb2xlYW5BcmcKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenN0aXRsZVx6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenN0bXB3bVx6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenN1bmFsaWFzXHplXHMqIgorc3luIG1hdGNoICAgcmF0cG9pc29uU3RyaW5nQ29tbWFuZAkiXlxzKlx6c3VuYmluZFx6ZVxzKiIJCW5leHRncm91cD1yYXRwb2lzb25LZXlTZXFBcmcKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenN1bm1hbmFnZVx6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenN1bnNldGVudlx6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenN2ZXJiZXhlY1x6ZVxzKiIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblN0cmluZ0NvbW1hbmQJIl5ccypcenN3YXJwXHplXHMqIgkJbmV4dGdyb3VwPXJhdHBvaXNvbkJvb2xlYW5BcmcKKworc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNhYm9ydFx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2JhbmlzaFx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2NscnVubWFuYWdlZFx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2N1cmZyYW1lXHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzZGVsZXRlXHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzZm9jdXNkb3duXHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzZm9jdXNsYXN0XHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzZm9jdXNsZWZ0XHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzZm9jdXNyaWdodFx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2ZvY3VzXHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzZm9jdXN1cFx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2ZzZWxlY3RcemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNnbWVyZ2VcemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNnbW92ZVx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2duZXdiZ1x6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2duZXdcemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNnbmV4dFx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2dwcmV2XHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzZ3JvdXBzXHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzaGVscFx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2hzcGxpdFx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2luZm9cemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNraWxsXHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzbGFzdG1zZ1x6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c2xpY2Vuc2VcemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNtZXRhXHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzbmV4dFx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c25leHRzY3JlZW5cemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNvbmx5XHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzb3RoZXJcemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNwcmV2XHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzcHJldnNjcmVlblx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c3F1aXRcemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNyZWRpc3BsYXlcemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNyZW1vdmVcemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenNyZXN0YXJ0XHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzc2hyaW5rXHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzc3BsaXRcemVccyokIgorc3luIG1hdGNoICAgcmF0cG9pc29uVm9pZENvbW1hbmQJIl5ccypcenN0aW1lXHplXHMqJCIKK3N5biBtYXRjaCAgIHJhdHBvaXNvblZvaWRDb21tYW5kCSJeXHMqXHpzdmVyc2lvblx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c3ZzcGxpdFx6ZVxzKiQiCitzeW4gbWF0Y2ggICByYXRwb2lzb25Wb2lkQ29tbWFuZAkiXlxzKlx6c3dpbmRvd3NcemVccyokIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9yYXRwb2lzb25fc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcmF0cG9pc29uX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHJhdHBvaXNvbkJvb2xlYW5BcmcJQm9vbGVhbgorICBIaUxpbmsgcmF0cG9pc29uQ29tbWFuZEFyZwlLZXl3b3JkCisgIEhpTGluayByYXRwb2lzb25Db21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIHJhdHBvaXNvbkRlZkNvbW1hbmQJSWRlbnRpZmllcgorICBIaUxpbmsgcmF0cG9pc29uR3Jhdml0eUFyZwlDb25zdGFudAorICBIaUxpbmsgcmF0cG9pc29uS2V5U2VxQXJnCVNwZWNpYWwKKyAgSGlMaW5rIHJhdHBvaXNvbk51bWJlckFyZwlOdW1iZXIKKyAgSGlMaW5rIHJhdHBvaXNvblNldEFyZwlLZXl3b3JkCisgIEhpTGluayByYXRwb2lzb25TdHJpbmdDb21tYW5kCUlkZW50aWZpZXIKKyAgSGlMaW5rIHJhdHBvaXNvblRvZG8JCVRvZG8KKyAgSGlMaW5rIHJhdHBvaXNvblZvaWRDb21tYW5kCUlkZW50aWZpZXIKKyAgSGlMaW5rIHJhdHBvaXNvbldpbkZtdEFyZwlTcGVjaWFsCisgIEhpTGluayByYXRwb2lzb25XaW5OYW1lQXJnCUNvbnN0YW50CisgIEhpTGluayByYXRwb2lzb25XaW5MaXN0QXJnCUNvbnN0YW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInJhdHBvaXNvbiIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3JjLnZpbSBiL3J1bnRpbWUvc3ludGF4L3JjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2ZlYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcmMudmltCkBAIC0wLDAgKzEsMjAwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJTSQgUmVzb3VyY2UgZmlsZXMgKCoucmMpCisiIE1haW50YWluZXI6CUhlaWtvIEVyaGFyZHQgPEhlaWtvLkVyaGFyZHRAbXVuaWNoLm5ldHN1cmYuZGU+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorCisiIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgYy52aW0KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIENvbW1vbiBSQyBrZXl3b3Jkcworc3luIGtleXdvcmQgcmNMYW5ndWFnZSBMQU5HVUFHRQorCitzeW4ga2V5d29yZCByY01haW5PYmplY3QgVEVYVElOQ0xVREUgVkVSU0lPTklORk8gQklUTUFQIElDT04gQ1VSU09SIENVUlNPUgorc3luIGtleXdvcmQgcmNNYWluT2JqZWN0IE1FTlUgQUNDRUxFUkFUT1JTIFRPT0xCQVIgRElBTE9HCitzeW4ga2V5d29yZCByY01haW5PYmplY3QgU1RSSU5HVEFCTEUgTUVTU0FHRVRBQkxFIFJDREFUQSBETEdJTklUIERFU0lHTklORk8KKworc3luIGtleXdvcmQgcmNTdWJPYmplY3QgUE9QVVAgTUVOVUlURU0gU0VQQVJBVE9SCitzeW4ga2V5d29yZCByY1N1Yk9iamVjdCBDT05UUk9MIExURVhUIENURVhUIEVESVRURVhUCitzeW4ga2V5d29yZCByY1N1Yk9iamVjdCBCVVRUT04gUFVTSEJVVFRPTiBERUZQVVNIQlVUVE9OIEdST1VQQk9YIExJU1RCT1ggQ09NQk9CT1gKK3N5biBrZXl3b3JkIHJjU3ViT2JqZWN0IEZJTEVWRVJTSU9OIFBST0RVQ1RWRVJTSU9OIEZJTEVGTEFHU01BU0sgRklMRUZMQUdTIEZJTEVPUworc3luIGtleXdvcmQgcmNTdWJPYmplY3QgRklMRVRZUEUgRklMRVNVQlRZUEUKKworc3luIGtleXdvcmQgcmNDYXB0aW9uUGFyYW0gQ0FQVElPTgorc3luIGtleXdvcmQgcmNQYXJhbSBDSEFSQUNURVJJU1RJQ1MgQ0xBU1MgU1RZTEUgRVhTVFlMRSBWRVJTSU9OIEZPTlQKKworc3luIGtleXdvcmQgcmNTdGF0ZW1lbnQgQkVHSU4gRU5EIEJMT0NLIFZBTFVFCisKK3N5biBrZXl3b3JkIHJjQ29tbW9uQXR0cmlidXRlIFBSRUxPQUQgTE9BRE9OQ0FMTCBGSVhFRCBNT1ZFQUJMRSBESVNDQVJEQUJMRSBQVVJFIElNUFVSRQorCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBXU19PVkVSTEFQUEVEIFdTX1BPUFVQIFdTX0NISUxEIFdTX01JTklNSVpFIFdTX1ZJU0lCTEUgV1NfRElTQUJMRUQgV1NfQ0xJUFNJQkxJTkdTCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBXU19DTElQQ0hJTERSRU4gV1NfTUFYSU1JWkUgV1NfQ0FQVElPTiBXU19CT1JERVIgV1NfRExHRlJBTUUgV1NfVlNDUk9MTCBXU19IU0NST0xMCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBXU19TWVNNRU5VIFdTX1RISUNLRlJBTUUgV1NfR1JPVVAgV1NfVEFCU1RPUCBXU19NSU5JTUlaRUJPWCBXU19NQVhJTUlaRUJPWCBXU19USUxFRAorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgV1NfSUNPTklDIFdTX1NJWkVCT1ggV1NfVElMRURXSU5ET1cgV1NfT1ZFUkxBUFBFRFdJTkRPVyBXU19QT1BVUFdJTkRPVyBXU19DSElMRFdJTkRPVworc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgV1NfRVhfRExHTU9EQUxGUkFNRSBXU19FWF9OT1BBUkVOVE5PVElGWSBXU19FWF9UT1BNT1NUIFdTX0VYX0FDQ0VQVEZJTEVTCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBXU19FWF9UUkFOU1BBUkVOVCBXU19FWF9NRElDSElMRCBXU19FWF9UT09MV0lORE9XIFdTX0VYX1dJTkRPV0VER0UgV1NfRVhfQ0xJRU5URURHRQorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgV1NfRVhfQ09OVEVYVEhFTFAgV1NfRVhfUklHSFQgV1NfRVhfTEVGVCBXU19FWF9SVExSRUFESU5HIFdTX0VYX0xUUlJFQURJTkcKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIFdTX0VYX0xFRlRTQ1JPTExCQVIgV1NfRVhfUklHSFRTQ1JPTExCQVIgV1NfRVhfQ09OVFJPTFBBUkVOVCBXU19FWF9TVEFUSUNFREdFCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBXU19FWF9BUFBXSU5ET1cgV1NfRVhfT1ZFUkxBUFBFRFdJTkRPVyBXU19FWF9QQUxFVFRFV0lORE9XCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBFU19MRUZUIEVTX0NFTlRFUiBFU19SSUdIVCBFU19NVUxUSUxJTkUgRVNfVVBQRVJDQVNFIEVTX0xPV0VSQ0FTRSBFU19QQVNTV09SRAorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgRVNfQVVUT1ZTQ1JPTEwgRVNfQVVUT0hTQ1JPTEwgRVNfTk9ISURFU0VMIEVTX09FTUNPTlZFUlQgRVNfUkVBRE9OTFkgRVNfV0FOVFJFVFVSTgorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgRVNfTlVNQkVSCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBCU19QVVNIQlVUVE9OIEJTX0RFRlBVU0hCVVRUT04gQlNfQ0hFQ0tCT1ggQlNfQVVUT0NIRUNLQk9YIEJTX1JBRElPQlVUVE9OIEJTXzNTVEFURQorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgQlNfQVVUTzNTVEFURSBCU19HUk9VUEJPWCBCU19VU0VSQlVUVE9OIEJTX0FVVE9SQURJT0JVVFRPTiBCU19PV05FUkRSQVcgQlNfTEVGVFRFWFQKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIEJTX1RFWFQgQlNfSUNPTiBCU19CSVRNQVAgQlNfTEVGVCBCU19SSUdIVCBCU19DRU5URVIgQlNfVE9QIEJTX0JPVFRPTSBCU19WQ0VOVEVSCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBCU19QVVNITElLRSBCU19NVUxUSUxJTkUgQlNfTk9USUZZIEJTX0ZMQVQgQlNfUklHSFRCVVRUT04KK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIFNTX0xFRlQgU1NfQ0VOVEVSIFNTX1JJR0hUIFNTX0lDT04gU1NfQkxBQ0tSRUNUIFNTX0dSQVlSRUNUIFNTX1dISVRFUkVDVAorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgU1NfQkxBQ0tGUkFNRSBTU19HUkFZRlJBTUUgU1NfV0hJVEVGUkFNRSBTU19VU0VSSVRFTSBTU19TSU1QTEUgU1NfTEVGVE5PV09SRFdSQVAKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIFNTX09XTkVSRFJBVyBTU19CSVRNQVAgU1NfRU5ITUVUQUZJTEUgU1NfRVRDSEVESE9SWiBTU19FVENIRURWRVJUIFNTX0VUQ0hFREZSQU1FCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBTU19UWVBFTUFTSyBTU19OT1BSRUZJWCBTU19OT1RJRlkgU1NfQ0VOVEVSSU1BR0UgU1NfUklHSFRKVVNUIFNTX1JFQUxTSVpFSU1BR0UKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIFNTX1NVTktFTiBTU19FTkRFTExJUFNJUyBTU19QQVRIRUxMSVBTSVMgU1NfV09SREVMTElQU0lTIFNTX0VMTElQU0lTTUFTSworc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgRFNfQUJTQUxJR04gRFNfU1lTTU9EQUwgRFNfTE9DQUxFRElUIERTX1NFVEZPTlQgRFNfTU9EQUxGUkFNRSBEU19OT0lETEVNU0cKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIERTX1NFVEZPUkVHUk9VTkQgRFNfM0RMT09LIERTX0ZJWEVEU1lTIERTX05PRkFJTENSRUFURSBEU19DT05UUk9MIERTX0NFTlRFUgorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgRFNfQ0VOVEVSTU9VU0UgRFNfQ09OVEVYVEhFTFAKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIExCU19OT1RJRlkgTEJTX1NPUlQgTEJTX05PUkVEUkFXIExCU19NVUxUSVBMRVNFTCBMQlNfT1dORVJEUkFXRklYRUQKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIExCU19PV05FUkRSQVdWQVJJQUJMRSBMQlNfSEFTU1RSSU5HUyBMQlNfVVNFVEFCU1RPUFMgTEJTX05PSU5URUdSQUxIRUlHSFQKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIExCU19NVUxUSUNPTFVNTiBMQlNfV0FOVEtFWUJPQVJESU5QVVQgTEJTX0VYVEVOREVEU0VMIExCU19ESVNBQkxFTk9TQ1JPTEwKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIExCU19OT0RBVEEgTEJTX05PU0VMIExCU19TVEFOREFSRAorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgQ0JTX1NJTVBMRSBDQlNfRFJPUERPV04gQ0JTX0RST1BET1dOTElTVCBDQlNfT1dORVJEUkFXRklYRUQgQ0JTX09XTkVSRFJBV1ZBUklBQkxFCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBDQlNfQVVUT0hTQ1JPTEwgQ0JTX09FTUNPTlZFUlQgQ0JTX1NPUlQgQ0JTX0hBU1NUUklOR1MgQ0JTX05PSU5URUdSQUxIRUlHSFQKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIENCU19ESVNBQkxFTk9TQ1JPTEwgQ0JTX1VQUEVSQ0FTRSBDQlNfTE9XRVJDQVNFCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBTQlNfSE9SWiBTQlNfVkVSVCBTQlNfVE9QQUxJR04gU0JTX0xFRlRBTElHTiBTQlNfQk9UVE9NQUxJR04gU0JTX1JJR0hUQUxJR04KK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIFNCU19TSVpFQk9YVE9QTEVGVEFMSUdOIFNCU19TSVpFQk9YQk9UVE9NUklHSFRBTElHTiBTQlNfU0laRUJPWCBTQlNfU0laRUdSSVAKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIENDU19UT1AgQ0NTX05PTU9WRVkgQ0NTX0JPVFRPTSBDQ1NfTk9SRVNJWkUgQ0NTX05PUEFSRU5UQUxJR04gQ0NTX0FESlVTVEFCTEUKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIENDU19OT0RJVklERVIKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIExWU19JQ09OIExWU19SRVBPUlQgTFZTX1NNQUxMSUNPTiBMVlNfTElTVCBMVlNfVFlQRU1BU0sgTFZTX1NJTkdMRVNFTCBMVlNfU0hPV1NFTEFMV0FZUworc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgTFZTX1NPUlRBU0NFTkRJTkcgTFZTX1NPUlRERVNDRU5ESU5HIExWU19TSEFSRUlNQUdFTElTVFMgTFZTX05PTEFCRUxXUkFQCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBMVlNfRURJVExBQkVMUyBMVlNfT1dORVJEQVRBIExWU19OT1NDUk9MTCBMVlNfVFlQRVNUWUxFTUFTSyAgTFZTX0FMSUdOVE9QIExWU19BTElHTkxFRlQKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIExWU19BTElHTk1BU0sgTFZTX09XTkVSRFJBV0ZJWEVEIExWU19OT0NPTFVNTkhFQURFUiBMVlNfTk9TT1JUSEVBREVSIExWU19BVVRPQVJSQU5HRQorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgVFZTX0hBU0JVVFRPTlMgVFZTX0hBU0xJTkVTIFRWU19MSU5FU0FUUk9PVCBUVlNfRURJVExBQkVMUyBUVlNfRElTQUJMRURSQUdEUk9QCitzeW4ga2V5d29yZCByY0F0dHJpYnV0ZSBUVlNfU0hPV1NFTEFMV0FZUworc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgVENTX0ZPUkNFSUNPTkxFRlQgVENTX0ZPUkNFTEFCRUxMRUZUIFRDU19UQUJTIFRDU19CVVRUT05TIFRDU19TSU5HTEVMSU5FIFRDU19NVUxUSUxJTkUKK3N5biBrZXl3b3JkIHJjQXR0cmlidXRlIFRDU19SSUdIVEpVU1RJRlkgVENTX0ZJWEVEV0lEVEggVENTX1JBR0dFRFJJR0hUIFRDU19GT0NVU09OQlVUVE9ORE9XTgorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgVENTX09XTkVSRFJBV0ZJWEVEIFRDU19UT09MVElQUyBUQ1NfRk9DVVNORVZFUgorc3luIGtleXdvcmQgcmNBdHRyaWJ1dGUgQUNTX0NFTlRFUiBBQ1NfVFJBTlNQQVJFTlQgQUNTX0FVVE9QTEFZCitzeW4ga2V5d29yZCByY1N0ZElkIElESV9BUFBMSUNBVElPTiBJRElfSEFORCBJRElfUVVFU1RJT04gSURJX0VYQ0xBTUFUSU9OIElESV9BU1RFUklTSyBJRElfV0lOTE9HTyBJRElfV0lOTE9HTworc3luIGtleXdvcmQgcmNTdGRJZCBJRElfV0FSTklORyBJRElfRVJST1IgSURJX0lORk9STUFUSU9OCitzeW4ga2V5d29yZCByY1N0ZElkIElEQ0FOQ0VMIElEQUJPUlQgSURSRVRSWSBJRElHTk9SRSBJRFlFUyBJRE5PIElEQ0xPU0UgSURIRUxQIElEQ19TVEFUSUMKKworIiBDb21tb24gUkMga2V5d29yZHMKKworIiBDb21tb24gUkMga2V5d29yZHMKK3N5biBrZXl3b3JkIHJjVG9kbyBjb250YWluZWQJVE9ETyBGSVhNRSBYWFgKKworIiBTdHJpbmcgYW5kIENoYXJhY3RlciBjb25zdGFudHMKKyIgSGlnaGxpZ2h0IHNwZWNpYWwgY2hhcmFjdGVycyAodGhvc2Ugd2hpY2ggaGF2ZSBhIGJhY2tzbGFzaCkgZGlmZmVyZW50bHkKK3N5biBtYXRjaCByY1NwZWNpYWwgY29udGFpbmVkCSJcXFswLTddWzAtN11bMC03XVw9XHxcXC4iCitzeW4gcmVnaW9uIHJjU3RyaW5nCQlzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPXJjU3BlY2lhbAorc3luIG1hdGNoIHJjQ2hhcmFjdGVyCQkiJ1teXFxdJyIKK3N5biBtYXRjaCByY1NwZWNpYWxDaGFyYWN0ZXIJIidcXC4nIgorc3luIG1hdGNoIHJjU3BlY2lhbENoYXJhY3RlcgkiJ1xcWzAtN11bMC03XSciCitzeW4gbWF0Y2ggcmNTcGVjaWFsQ2hhcmFjdGVyCSInXFxbMC03XVswLTddWzAtN10nIgorCisiY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcworc3luIHJlZ2lvbiByY1BhcmVuCQl0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQscmNQYXJlbkVycm9yLHJjSW5jbHVkZWQscmNTcGVjaWFsLHJjVG9kbworc3luIG1hdGNoIHJjUGFyZW5FcnJvcgkJIikiCitzeW4gbWF0Y2ggcmNJblBhcmVuIGNvbnRhaW5lZAkiW3t9XSIKKworImludGVnZXIgbnVtYmVyLCBvciBmbG9hdGluZyBwb2ludCBudW1iZXIgd2l0aG91dCBhIGRvdCBhbmQgd2l0aCAiZiIuCitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCByY051bWJlcgkJIlw8XGRcK1wodVw9bFw9XHxsdVx8ZlwpXD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRoIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCByY0Zsb2F0CQkiXDxcZFwrXC5cZCpcKGVbLStdXD1cZFwrXClcPVtmbF1cPVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCByY0Zsb2F0CQkiXC5cZFwrXChlWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGhvdXQgZG90LCB3aXRoIGV4cG9uZW50CitzeW4gbWF0Y2ggcmNGbG9hdAkJIlw8XGRcK2VbLStdXD1cZFwrW2ZsXVw9XD4iCisiaGV4IG51bWJlcgorc3luIG1hdGNoIHJjTnVtYmVyCQkiXDwweFswLTlhLWZdXCtcKHVcPWxcPVx8bHVcKVw+IgorInN5biBtYXRjaCByY0lkZW50aWZpZXIJIlw8W2Etel9dW2EtejAtOV9dKlw+Igorc3luIGNhc2UgbWF0Y2gKKyIgZmxhZyBhbiBvY3RhbCBudW1iZXIgd2l0aCB3cm9uZyBkaWdpdHMKK3N5biBtYXRjaCByY09jdGFsRXJyb3IJCSJcPDBbMC03XSpbODldIgorCitpZiBleGlzdHMoInJjX2NvbW1lbnRfc3RyaW5ncyIpCisgICIgQSBjb21tZW50IGNhbiBjb250YWluIHJjU3RyaW5nLCByY0NoYXJhY3RlciBhbmQgcmNOdW1iZXIuCisgICIgQnV0IGEgIiovIiBpbnNpZGUgYSByY1N0cmluZyBpbiBhIHJjQ29tbWVudCBET0VTIGVuZCB0aGUgY29tbWVudCEgIFNvIHdlCisgICIgbmVlZCB0byB1c2UgYSBzcGVjaWFsIHR5cGUgb2YgcmNTdHJpbmc6IHJjQ29tbWVudFN0cmluZywgd2hpY2ggYWxzbyBlbmRzIG9uCisgICIgIiovIiwgYW5kIHNlZXMgYSAiKiIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGFzIGNvbW1lbnQgYWdhaW4uCisgICIgVW5mb3J0dW5hdGVseSB0aGlzIGRvZXNuJ3QgdmVyeSB3ZWxsIHdvcmsgZm9yIC8vIHR5cGUgb2YgY29tbWVudHMgOi0oCisgIHN5bnRheCBtYXRjaCByY0NvbW1lbnRTa2lwCWNvbnRhaW5lZCAiXlxzKlwqXCgkXHxcc1wrXCkiCisgIHN5bnRheCByZWdpb24gcmNDb21tZW50U3RyaW5nCWNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGVuZD0rXCovK21lPXMtMSBjb250YWlucz1yY1NwZWNpYWwscmNDb21tZW50U2tpcAorICBzeW50YXggcmVnaW9uIHJjQ29tbWVudDJTdHJpbmcJY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgZW5kPSIkIiBjb250YWlucz1yY1NwZWNpYWwKKyAgc3ludGF4IHJlZ2lvbiByY0NvbW1lbnQJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPXJjVG9kbyxyY0NvbW1lbnRTdHJpbmcscmNDaGFyYWN0ZXIscmNOdW1iZXIscmNGbG9hdAorICBzeW50YXggbWF0Y2ggIHJjQ29tbWVudAkiLy8uKiIgY29udGFpbnM9cmNUb2RvLHJjQ29tbWVudDJTdHJpbmcscmNDaGFyYWN0ZXIscmNOdW1iZXIKK2Vsc2UKKyAgc3luIHJlZ2lvbiByY0NvbW1lbnQJCXN0YXJ0PSIvXCoiIGVuZD0iXCovIiBjb250YWlucz1yY1RvZG8KKyAgc3luIG1hdGNoIHJjQ29tbWVudAkJIi8vLioiIGNvbnRhaW5zPXJjVG9kbworZW5kaWYKK3N5bnRheCBtYXRjaCByY0NvbW1lbnRFcnJvcgkiXCovIgorCitzeW4gcmVnaW9uIHJjUHJlQ29uZGl0CXN0YXJ0PSJeXHMqI1xzKlwoaWZcPlx8aWZkZWZcPlx8aWZuZGVmXD5cfGVsaWZcPlx8ZWxzZVw+XHxlbmRpZlw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1yY0NvbW1lbnQscmNTdHJpbmcscmNDaGFyYWN0ZXIscmNOdW1iZXIscmNDb21tZW50RXJyb3IKK3N5biByZWdpb24gcmNJbmNsdWRlZCBjb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKworc3luIG1hdGNoIHJjSW5jbHVkZWQgY29udGFpbmVkICI8W14+XSo+Igorc3luIG1hdGNoIHJjSW5jbHVkZQkJIl5ccyojXHMqaW5jbHVkZVw+XHMqWyI8XSIgY29udGFpbnM9cmNJbmNsdWRlZAorInN5biBtYXRjaCByY0xpbmVTa2lwCSJcXCQiCitzeW4gcmVnaW9uIHJjRGVmaW5lCQlzdGFydD0iXlxzKiNccypcKGRlZmluZVw+XHx1bmRlZlw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1BTExCVVQscmNQcmVDb25kaXQscmNJbmNsdWRlZCxyY0luY2x1ZGUscmNEZWZpbmUscmNJblBhcmVuCitzeW4gcmVnaW9uIHJjUHJlUHJvYwkJc3RhcnQ9Il5ccyojXHMqXChwcmFnbWFcPlx8bGluZVw+XHx3YXJuaW5nXD5cfHdhcm5cPlx8ZXJyb3JcPlwpIiBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9QUxMQlVULHJjUHJlQ29uZGl0LHJjSW5jbHVkZWQscmNJbmNsdWRlLHJjRGVmaW5lLHJjSW5QYXJlbgorCitzeW4gc3luYyBjY29tbWVudCByY0NvbW1lbnQgbWlubGluZXM9MTAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcmNfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcmNfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgcmNDaGFyYWN0ZXIJQ2hhcmFjdGVyCisgIEhpTGluayByY1NwZWNpYWxDaGFyYWN0ZXIgcmNTcGVjaWFsCisgIEhpTGluayByY051bWJlcglOdW1iZXIKKyAgSGlMaW5rIHJjRmxvYXQJRmxvYXQKKyAgSGlMaW5rIHJjT2N0YWxFcnJvcglyY0Vycm9yCisgIEhpTGluayByY1BhcmVuRXJyb3IJcmNFcnJvcgorICBIaUxpbmsgcmNJblBhcmVuCXJjRXJyb3IKKyAgSGlMaW5rIHJjQ29tbWVudEVycm9yCXJjRXJyb3IKKyAgSGlMaW5rIHJjSW5jbHVkZQlJbmNsdWRlCisgIEhpTGluayByY1ByZVByb2MJUHJlUHJvYworICBIaUxpbmsgcmNEZWZpbmUJTWFjcm8KKyAgSGlMaW5rIHJjSW5jbHVkZWQJcmNTdHJpbmcKKyAgSGlMaW5rIHJjRXJyb3IJRXJyb3IKKyAgSGlMaW5rIHJjUHJlQ29uZGl0CVByZUNvbmRpdAorICBIaUxpbmsgcmNDb21tZW50U3RyaW5nIHJjU3RyaW5nCisgIEhpTGluayByY0NvbW1lbnQyU3RyaW5nIHJjU3RyaW5nCisgIEhpTGluayByY0NvbW1lbnRTa2lwCXJjQ29tbWVudAorICBIaUxpbmsgcmNTdHJpbmcJU3RyaW5nCisgIEhpTGluayByY0NvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgcmNTcGVjaWFsCVNwZWNpYWxDaGFyCisgIEhpTGluayByY1RvZG8JVG9kbworCisgIEhpTGluayByY0F0dHJpYnV0ZQlyY0NvbW1vbkF0dHJpYnV0ZQorICBIaUxpbmsgcmNTdGRJZAlyY1N0YXRlbWVudAorICBIaUxpbmsgcmNTdGF0ZW1lbnQJU3RhdGVtZW50CisKKyAgIiBEZWZhdWx0IGNvbG9yIG92ZXJyaWRlcworICBoaSBkZWYgcmNMYW5ndWFnZQl0ZXJtPXJldmVyc2UgY3Rlcm1iZz1SZWQgY3Rlcm1mZz1ZZWxsb3cgZ3VpYmc9UmVkIGd1aWZnPVllbGxvdworICBoaSBkZWYgcmNNYWluT2JqZWN0CXRlcm09dW5kZXJsaW5lIGN0ZXJtZmc9Qmx1ZSBndWlmZz1CbHVlCisgIGhpIGRlZiByY1N1Yk9iamVjdAljdGVybWZnPUdyZWVuIGd1aWZnPUdyZWVuCisgIGhpIGRlZiByY0NhcHRpb25QYXJhbQl0ZXJtPXVuZGVybGluZSBjdGVybWZnPURhcmtHcmVlbiBndWlmZz1HcmVlbgorICBoaSBkZWYgcmNQYXJhbQljdGVybWZnPURhcmtHcmVlbiBndWlmZz1EYXJrR3JlZW4KKyAgaGkgZGVmIHJjU3RhdGVtZW50CWN0ZXJtZmc9RGFya0dyZWVuIGd1aWZnPURhcmtHcmVlbgorICBoaSBkZWYgcmNDb21tb25BdHRyaWJ1dGUJY3Rlcm1mZz1Ccm93biBndWlmZz1Ccm93bgorCisgICJIaUxpbmsgcmNJZGVudGlmaWVyCUlkZW50aWZpZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicmMiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9yY3MudmltIGIvcnVudGltZS9zeW50YXgvcmNzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGE5MGM2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcmNzLnZpbQpAQCAtMCwwICsxLDc2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJUkNTIGZpbGUKKyIgTWFpbnRhaW5lcjoJRG1pdHJ5IFZhc2lsaWV2IDxkaW1hQGhsYWJzLnNwYi5ydT4KKyIgVVJMOgkJaHR0cDovL3d3dy5obGFicy5zcGIucnUvdmltL3Jjcy52aW0KKyIgTGFzdCBDaGFuZ2U6CSREYXRlJAorIiBGaWxlbmFtZXM6CSosdgorIiAkUmV2aXNpb24kCisiCisiIE9wdGlvbnM6CisiIHJjc19mb2xkaW5nID0gMQkJRm9yIGZvbGRpbmcgc3RyaW5ncworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcy4KKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQuCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBSQ1MgZmlsZSBtdXN0IGVuZCB3aXRoIGEgbmV3bGluZS4KK3N5biBtYXRjaCByY3NFT0ZFcnJvcgkiLlwlJCIgY29udGFpbmVkaW49QUxMCisKKyIgS2V5d29yZHMuCitzeW4ga2V5d29yZCByY3NLZXl3b3JkCWhlYWQgYnJhbmNoIGFjY2VzcyBzeW1ib2xzIGxvY2tzIHN0cmljdAorc3luIGtleXdvcmQgcmNzS2V5d29yZAljb21tZW50IGV4cGFuZCBkYXRlIGF1dGhvciBzdGF0ZSBicmFuY2hlcworc3luIGtleXdvcmQgcmNzS2V5d29yZAluZXh0IGRlc2MgbG9nCitzeW4ga2V5d29yZCByY3NLZXl3b3JkCXRleHQgbmV4dGdyb3VwPXJjc1RleHRTdHIgc2tpcHdoaXRlIHNraXBlbXB0eQorCisiIFJldmlzaW9uIG51bWJlcnMgYW5kIGRhdGVzLgorc3luIG1hdGNoIHJjc051bWJlcgkiXDxbMC05Ll1cK1w+IiBkaXNwbGF5CisKKyIgU3RyaW5ncy4KK2lmIGV4aXN0cygicmNzX2ZvbGRpbmciKSAmJiBoYXMoImZvbGRpbmciKQorICAiIEZvbGRlZCBzdHJpbmdzLgorICBzeW4gcmVnaW9uIHJjc1N0cmluZwltYXRjaGdyb3VwPXJjc1N0cmluZyBzdGFydD0iQCIgZW5kPSJAIiBza2lwPSJAQCIgZm9sZCBjb250YWlucz1yY3NTcGVjaWFsCisgIHN5biByZWdpb24gcmNzVGV4dFN0cgltYXRjaGdyb3VwPXJjc1RleHRTdHIgc3RhcnQ9IkAiIGVuZD0iQCIgc2tpcD0iQEAiIGZvbGQgY29udGFpbmVkIGNvbnRhaW5zPXJjc1NwZWNpYWwscmNzRGlmZkxpbmVzCitlbHNlCisgIHN5biByZWdpb24gcmNzU3RyaW5nCW1hdGNoZ3JvdXA9cmNzU3RyaW5nIHN0YXJ0PSJAIiBlbmQ9IkAiIHNraXA9IkBAIiBjb250YWlucz1yY3NTcGVjaWFsCisgIHN5biByZWdpb24gcmNzVGV4dFN0cgltYXRjaGdyb3VwPXJjc1RleHRTdHIgc3RhcnQ9IkAiIGVuZD0iQCIgc2tpcD0iQEAiIGNvbnRhaW5lZCBjb250YWlucz1yY3NTcGVjaWFsLHJjc0RpZmZMaW5lcworZW5kaWYKK3N5biBtYXRjaCByY3NTcGVjaWFsCSJAQCIgY29udGFpbmVkCitzeW4gbWF0Y2ggcmNzRGlmZkxpbmVzCSJbZGFdXGRcKyBcZFwrJCIgY29udGFpbmVkCisKKyIgU3luY2hyb25pemF0aW9uLgorc3luIHN5bmMgY2xlYXIKK2lmIGV4aXN0cygicmNzX2ZvbGRpbmciKSAmJiBoYXMoImZvbGRpbmciKQorICBzeW4gc3luYyBmcm9tc3RhcnQKK2Vsc2UKKyAgIiBXZSBoYXZlIGluY29ycmVjdCBmb2xkaW5nIGlmIGZvbGxvd2luZyBzeW5jIHBhdHRlcm5zIGlzIHR1cm5lZCBvbi4KKyAgc3luIHN5bmMgbWF0Y2ggcmNzU3luYwlncm91cGhlcmUgcmNzU3RyaW5nICJbMC05Ll1cK1woXHNcfFxuXClcK2xvZ1woXHNcfFxuXClcK0AibWU9ZS0xCisgIHN5biBzeW5jIG1hdGNoIHJjc1N5bmMJZ3JvdXBoZXJlIHJjc1RleHRTdHIgIkBcKFxzXHxcblwpXCt0ZXh0XChcc1x8XG5cKVwrQCJtZT1lLTEKK2VuZGlmCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeS4KKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQuCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcmNzX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPD0gNTA4CisgICAgbGV0IGRpZF9yY3Nfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgcmNzS2V5d29yZAlLZXl3b3JkCisgIEhpTGluayByY3NOdW1iZXIJSWRlbnRpZmllcgorICBIaUxpbmsgcmNzU3RyaW5nCVN0cmluZworICBIaUxpbmsgcmNzVGV4dFN0cglTdHJpbmcKKyAgSGlMaW5rIHJjc1NwZWNpYWwJU3BlY2lhbAorICBIaUxpbmsgcmNzRGlmZkxpbmVzCVNwZWNpYWwKKyAgSGlMaW5rIHJjc0VPRkVycm9yCUVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInJjcyIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3Jjc2xvZy52aW0gYi9ydW50aW1lL3N5bnRheC9yY3Nsb2cudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYWNmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9yY3Nsb2cudmltCkBAIC0wLDAgKzEsMzggQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglSQ1MgbG9nIG91dHB1dAorIiBNYWludGFpbmVyOglKb2UgS2FydGhhdXNlciA8am9lQGZyZWVic2Qub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMSBNYXkgMDkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gbWF0Y2ggcmNzbG9nUmV2aXNpb24JIl5yZXZpc2lvbi4qJCIKK3N5biBtYXRjaCByY3Nsb2dGaWxlCQkiXlJDUyBmaWxlOi4qIgorc3luIG1hdGNoIHJjc2xvZ0RhdGUJCSJeZGF0ZTogLiokIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9yY3Nsb2dfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcmNzbG9nX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHJjc2xvZ0ZpbGUJCVR5cGUKKyAgSGlMaW5rIHJjc2xvZ1JldmlzaW9uCUNvbnN0YW50CisgIEhpTGluayByY3Nsb2dEYXRlCQlJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInJjc2xvZyIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3JlYWRsaW5lLnZpbSBiL3J1bnRpbWUvc3ludGF4L3JlYWRsaW5lLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjcyMDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcmVhZGxpbmUudmltCkBAIC0wLDAgKzEsMTUyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIHJlYWRsaW5lIGNvbmZpZ3VyYXRpb24gZmlsZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vc3ludGF4L3BjcC9yZWFkbGluZS8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNS0yMgorIiBhcmNoLXRhZzoJICAgIDZkOGU3ZGE0LWIzOWMtNGJmNy04ZTZhLWQ5MTM1Zjk5MzQ1NworIiBWYXJpYWJsZXM6CisiICAgcmVhZGxpbmVfaGFzX2Jhc2ggLSBpZiBkZWZpbmVkIGFkZCBzdXBwb3J0IGZvciBiYXNoIHNwZWNpZmljCisiCQkJc2V0dGluZ3MvZnVuY3Rpb25zCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFNldCBpc2tleXdvcmQgc2luY2Ugd2UgbmVlZCBgLScgKGFuZCBwb3RlbnRpYWxseSBvdGhlcnMpIGluIGtleXdvcmRzLgorIiBGb3IgdmVyc2lvbiA1Lng6IFNldCBpdCBnbG9iYWxseQorIiBGb3IgdmVyc2lvbiA2Lng6IFNldCBpdCBsb2NhbGx5CitpZiB2ZXJzaW9uID49IDYwMAorICBjb21tYW5kIC1uYXJncz0xIFNldElzayBzZXRsb2NhbCBpc2tleXdvcmQ9PGFyZ3M+CitlbHNlCisgIGNvbW1hbmQgLW5hcmdzPTEgU2V0SXNrIHNldCBpc2tleXdvcmQ9PGFyZ3M+CitlbmRpZgorU2V0SXNrIDQ4LTU3LDY1LTkwLDk3LTEyMiwtCitkZWxjb21tYW5kIFNldElzaworCisiIGNvbW1lbnRzCitzeW4gcmVnaW9uICByZWFkbGluZUNvbW1lbnQJZGlzcGxheSBvbmVsaW5lIG1hdGNoZ3JvdXA9cmVhZGxpbmVDb21tZW50IHN0YXJ0PSJeXHMqIyIgZW5kPSIkIiBjb250YWlucz1yZWFkbGluZVRvZG8KKworIiB0b2RvCitzeW4ga2V5d29yZCByZWFkbGluZVRvZG8JY29udGFpbmVkIFRPRE8gRklYTUUgWFhYIE5PVEUKKworIiBzdHJpbmdzIChhcmdoLi4ubm90IHRoZSB3YXkgaSB3YW50IGl0LCBidXQgZmluZS4uLiIKK3N5biBtYXRjaCAgIHJlYWRsaW5lU3RyaW5nCSJeXHMqW0EtWmEtei1dXCs6Im1lPWUtMSBjb250YWlucz1yZWFkbGluZUtleXMKK3N5biByZWdpb24gIHJlYWRsaW5lU3RyaW5nCWRpc3BsYXkgb25lbGluZSBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPXJlYWRsaW5lS2V5c1R3bworCisiIHNwZWNpYWwga2V5CitzeW4gY2FzZSBpZ25vcmUKK3N5biBrZXl3b3JkIHJlYWRsaW5lS2V5cwljb250YWluZWQgQ29udHJvbCBNZXRhIERlbCBFc2MgRXNjYXBlIExGRCBOZXdsaW5lIFJldCBSZXR1cm4gUnVib3V0IFNwYWNlIFNwYyBUYWIKK3N5biBjYXNlIG1hdGNoCisKK3N5biBtYXRjaCAgIHJlYWRsaW5lS2V5c1R3bwljb250YWluZWQgK1xcXChbQ01dLVx8W2VcXCInYWJkZm5ydHZdXHxcb1x7M31cfHhceFx7M31cKSsKKworIiBrZXltYXBzCitzeW4gbWF0Y2ggICByZWFkbGluZUtleW1hcHMJY29udGFpbmVkICJlbWFjc1woLXN0YW5kYXJkXHwtbWV0YVx8LWN0bHhcKVw9Igorc3luIG1hdGNoICAgcmVhZGxpbmVLZXltYXBzCWNvbnRhaW5lZCAidmlcKC1tb3ZlXHwtY29tbWFuZFx8LWluc2VydFwpXD0iCisKKyIgYmVsbCBzdHlsZXMKK3N5biBrZXl3b3JkIHJlYWRsaW5lQmVsbFN0eWxlcwljb250YWluZWQgYXVkaWJsZSB2aXNpYmxlIG5vbmUKKworIiBudW1iZXJzCitzeW4gbWF0Y2ggICByZWFkbGluZU51bWJlcgljb250YWluZWQgIlw8XGRcK1w+IgorCisiIGJvb2xlYW5zCitzeW4gY2FzZSBpZ25vcmUKK3N5biBrZXl3b3JkIHJlYWRsaW5lQm9vbGVhbgljb250YWluZWQgb24gb2ZmCitzeW4gY2FzZSBtYXRjaAorCisiIGNvbmRpdGlvbmFscworc3luIGtleXdvcmQgcmVhZGxpbmVJZk9wcwljb250YWluZWQgbW9kZSB0ZXJtCisKK3N5biByZWdpb24gIHJlYWRsaW5lQ29uZGl0aW9uYWwgZGlzcGxheSBvbmVsaW5lIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9cmVhZGxpbmVDb25kaXRpb25hbCBzdGFydD0iXlxzKiRpZiIgZW5kPSIkIiBjb250YWlucz1yZWFkbGluZUlmT3BzLHJlYWRsaW5lS2V5bWFwcworc3luIG1hdGNoICAgcmVhZGxpbmVDb25kaXRpb25hbAkiXlxzKiRcKGVsc2VcfGVuZGlmXClcPiIKKworIiBpbmNsdWRlCitzeW4gbWF0Y2ggICByZWFkbGluZUluY2x1ZGUJIl5ccyokaW5jbHVkZVw+IgorCisiIHNldHRpbmdzCisKK3N5biByZWdpb24gIHJlYWRsaW5lU2V0CQlkaXNwbGF5IG9uZWxpbmUgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1yZWFkbGluZUtleXdvcmQgc3RhcnQ9Il5ccypzZXRcPiIgZW5kPSIkIm1lPWUtMSBjb250YWlucz1yZWFkbGluZU51bWJlcixyZWFkbGluZUJvb2xlYW4scmVhZGxpbmVLZXltYXBzLHJlYWRsaW5lQmVsbFN0eWxlcyxyZWFkbGluZVNldHRpbmdzCisKK3N5biBrZXl3b3JkIHJlYWRsaW5lU2V0dGluZ3MJY29udGFpbmVkIGJlbGwtc3R5bGUgY29tbWVudC1iZWdpbiBjb21wbGV0aW9uLWlnbm9yZS1jYXNlCitzeW4ga2V5d29yZCByZWFkbGluZVNldHRpbmdzCWNvbnRhaW5lZCBjb21wbGV0aW9uLXF1ZXJ5LWl0ZW1zIGNvbnZlcnQtbWV0YSBkaXNhYmxlLWNvbXBsZXRpb24gZWRpdGluZy1tb2RlIGVuYWJsZS1rZXlwYWQKK3N5biBrZXl3b3JkIHJlYWRsaW5lU2V0dGluZ3MJY29udGFpbmVkIGV4cGFuZC10aWxkZSBob3Jpem9udGFsLXNjcm9sbC1tb2RlIG1hcmstZGlyZWN0b3JpZXMga2V5bWFwIG1hcmstbW9kaWZpZWQtbGluZXMgbWV0YS1mbGFnCitzeW4ga2V5d29yZCByZWFkbGluZVNldHRpbmdzCWNvbnRhaW5lZCBpbnB1dC1tZXRhIG91dHB1dC1tZXRhIHByaW50LWNvbXBsZXRpb25zLWhvcml6b250YWxseSBzaG93LWFsbC1pZi1hbWJpZ3VvdXMgdmlzaWJsZS1zdGF0cworc3luIGtleXdvcmQgcmVhZGxpbmVTZXR0aW5ncwljb250YWluZWQgcHJlZmVyLXZpc2libGUtYmVsbCBibGluay1tYXRjaGluZy1wYXJlbgorc3luIGtleXdvcmQgcmVhZGxpbmVTZXR0aW5ncwljb250YWluZWQgbWF0Y2gtaGlkZGVuLWZpbGVzIGhpc3RvcnktcHJlc2VydmUtcG9pbnQgaXNlYXJjaC10ZXJtaW5hdG9ycworCisiIGJhc2ggZXh0ZW5zaW9ucworaWYgZXhpc3RzKCJyZWFkbGluZV9oYXNfYmFzaCIpCisgICJzeW4ga2V5d29yZCByZWFkbGluZVNldHRpbmdzCWNvbnRhaW5lZAorZW5kaWYKKworIiBrZXkgYmluZGluZ3MKK3N5biByZWdpb24gIHJlYWRsaW5lQmluZGluZwlkaXNwbGF5IG9uZWxpbmUgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1yZWFkbGluZUtleXdvcmQgc3RhcnQ9IjoiIGVuZD0iJCIgY29udGFpbnM9cmVhZGxpbmVLZXlzLHJlYWRsaW5lRnVuY3Rpb25zCisKK3N5biBtYXRjaCAgIHJlYWRsaW5lRnVuY3Rpb25zCWNvbnRhaW5lZCAiXDxcKGJlZ2lubmluZ1x8ZW5kXCktb2YtbGluZVw+Igorc3luIG1hdGNoICAgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkICJcPFwoYmFja3dhcmRcfGZvcndhcmRcKS1cKGNoYXJcfHdvcmRcKVw+Igorc3luIG1hdGNoICAgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkICJcPFwocHJldmlvdXNcfG5leHRcfFwoYmVnaW5uaW5nXHxlbmRcKS1vZlx8XChub24taW5jcmVtZW50YWwtXClcPVwocmV2ZXJzZVx8Zm9yd2FyZFwpLXNlYXJjaFwpLWhpc3RvcnlcPiIKK3N5biBtYXRjaCAgIHJlYWRsaW5lRnVuY3Rpb25zCWNvbnRhaW5lZCAiXDxoaXN0b3J5LXNlYXJjaC1cKGZvcndhcmRcfGJhY2t3YXJkXClcPiIKK3N5biBtYXRjaCAgIHJlYWRsaW5lRnVuY3Rpb25zCWNvbnRhaW5lZCAiXDx5YW5rLVwobnRoXHxsYXN0XCktYXJnXD4iCitzeW4gbWF0Y2ggICByZWFkbGluZUZ1bmN0aW9ucwljb250YWluZWQgIlw8XChiYWNrd2FyZC1cKVw9a2lsbC1cKFwod2hvbGUtXClcPWxpbmVcfHdvcmRcKVw+Igorc3luIG1hdGNoICAgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkICJcPFwoc3RhcnRcfGVuZFx8Y2FsbC1sYXN0XCkta2JkLW1hY3JvXD4iCitzeW4gbWF0Y2ggICByZWFkbGluZUZ1bmN0aW9ucwljb250YWluZWQgIlw8ZHVtcC1cKGZ1bmN0aW9uc1x8dmFyaWFibGVzXHxtYWNyb3NcKVw+Igorc3luIG1hdGNoICAgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkICJcPG5vbi1pbmNyZW1lbnRhbC1cKHJldmVyc2VcfGZvcndhcmRcKS1zZWFyY2gtaGlzdG9yeS1hZ2Fpblw+Igorc3luIGtleXdvcmQgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkIGNsZWFyLXNjcmVlbiByZWRyYXctY3VycmVudC1saW5lIGFjY2VwdC1saW5lIGRlbGV0ZS1jaGFyIGJhY2t3YXJkLWRlbGV0ZS1jaGFyIHF1b3RlZC1pbnNlcnQgdGFiLWluc2VydAorc3luIGtleXdvcmQgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkIHNlbGYtaW5zZXJ0IHRyYW5zcG9zZS1jaGFycyB0cmFuc3Bvc2Utd29yZHMgZG93bmNhc2Utd29yZCBjYXBpdGFsaXplLXdvcmQgdW5peC13b3JkLXJ1Ym91dAorc3luIGtleXdvcmQgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkIGRlbGV0ZS1ob3Jpem9udGFsLXNwYWNlIGtpbGwtcmVnaW9uIGNvcHktcmVnaW9uLWFzLWtpbGwgY29weS1iYWNrd2FyZC13b3JkIGNvcHktZm9yd2FyZC13b3JkIHlhbmsgeWFuay1wb3AKK3N5biBrZXl3b3JkIHJlYWRsaW5lRnVuY3Rpb25zCWNvbnRhaW5lZCBkaWdpdC1hcmd1bWVudCB1bml2ZXJzYWwtYXJndW1lbnQgY29tcGxldGUgcG9zc2libGUtY29tcGxldGlvbnMgaW5zZXJ0LWNvbXBsZXRpb25zIG1lbnUtY29tcGxldGUKK3N5biBrZXl3b3JkIHJlYWRsaW5lRnVuY3Rpb25zCWNvbnRhaW5lZCByZS1yZWFkLWluaXQtZmlsZSBhYm9ydCBkby11cHBlcmNhc2UtdmVyc2lvbiBwcmVmaXgtbWV0YSB1bmRvIHJldmVydC1saW5lIHRpbGRlLWV4cGFuZCBzZXQtbWFyaworc3luIGtleXdvcmQgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkIGV4Y2hhbmdlLXBvaW50LWFuZC1tYXJrIGNoYXJhY3Rlci1zZWFyY2ggY2hhcmFjdGVyLXNlYXJjaC1iYWNrd2FyZCBpbnNlcnQtY29tbWVudCBlbWFjcy1lZGl0aW5nLW1vZGUgdmktZWRpdGluZy1tb2RlCitzeW4ga2V5d29yZCByZWFkbGluZUZ1bmN0aW9ucwljb250YWluZWQgdW5peC1saW5lLWRpc2NhcmQgdXBjYXNlLXdvcmQgYmFja3dhcmQtZGVsZXRlLXdvcmQgdmktZW9mLW1heWJlIHZpLW1vdmVtZW50LW1vZGUgdmktbWF0Y2ggdmktdGlsZGUtZXhwYW5kCitzeW4ga2V5d29yZCByZWFkbGluZUZ1bmN0aW9ucwljb250YWluZWQgdmktY29tcGxldGUgdmktY2hhci1zZWFyY2ggdmktcmVkbyB2aS1zZWFyY2ggdmktYXJnLWRpZ2l0IHZpLWFwcGVuZC1lb2wgdmktcHJldi13b3JkIHZpLWNoYW5nZS10byB2aS1kZWxldGUtdG8KK3N5biBrZXl3b3JkIHJlYWRsaW5lRnVuY3Rpb25zCWNvbnRhaW5lZCB2aS1lbmQtd29yZCB2aS1mZXRjaC1oaXN0b3J5IHZpLWluc2VydC1iZWcgdmktc2VhcmNoLWFnYWluIHZpLXB1dCB2aS1yZXBsYWNlIHZpLXN1YnN0IHZpLXlhbmstdG8gdmktZmlyc3QtcHJpbnQKK3N5biBrZXl3b3JkIHJlYWRsaW5lRnVuY3Rpb25zCWNvbnRhaW5lZCB2aS15YW5rLWFyZyB2aS1nb3RvLW1hcmsgdmktYXBwZW5kLW1vZGUgdmktaW5zZXJ0aW9uLW1vZGUgcHJldi1oaXN0b3J5IHZpLXNldC1tYXJrIHZpLXNlYXJjaC1hZ2FpbiB2aS1wdXQgdmktY2hhbmdlLWNoYXIKK3N5biBrZXl3b3JkIHJlYWRsaW5lRnVuY3Rpb25zCWNvbnRhaW5lZCB2aS1zdWJzdCB2aS1kZWxldGUgdmkteWFuay10byB2aS1jb2x1bW4gdmktY2hhbmdlLWNhc2Ugdmktb3ZlcnN0cmlrZSB2aS1vdmVyc3RyaWtlLWRlbGV0ZQorc3luIGtleXdvcmQgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkIGRvLWxvd2VyY2FzZS12ZXJzaW9uIGRlbGV0ZS1jaGFyLW9yLWxpc3QgdHR5LXN0YXR1cyBhcnJvdy1rZXktcHJlZml4CitzeW4ga2V5d29yZCByZWFkbGluZUZ1bmN0aW9ucwljb250YWluZWQgdmktYmFjay10by1pbmRlbnQgdmktYndvcmQgdmktYldvcmQgdmktZXdvcmQgdmktZVdvcmQgdmktZndvcmQgdmktZldvcmQgdmktbmV4dC13b3JkCisKKyIgYmFzaCBleHRlbnNpb25zCitpZiBleGlzdHMoInJlYWRsaW5lX2hhc19iYXNoIikKKyAgc3luIGtleXdvcmQgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkIHNoZWxsLWV4cGFuZC1saW5lIGhpc3RvcnktZXhwYW5kLWxpbmUgbWFnaWMtc3BhY2UgYWxpYXMtZXhwYW5kLWxpbmUgaGlzdG9yeS1hbmQtYWxpYXMtZXhwYW5kLWxpbmUgaW5zZXJ0LWxhc3QtYXJndW1lbnQKKyAgc3luIGtleXdvcmQgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkIG9wZXJhdGUtYW5kLWdldC1uZXh0IGZvcndhcmQtYmFja3dhcmQtZGVsZXRlLWNoYXIgZGVsZXRlLWNoYXItb3ItbGlzdCBjb21wbGV0ZS1maWxlbmFtZSBwb3NzaWJsZS1maWxlbmFtZS1jb21wbGV0aW9ucworICBzeW4ga2V5d29yZCByZWFkbGluZUZ1bmN0aW9ucwljb250YWluZWQgY29tcGxldGUtdXNlcm5hbWUgcG9zc2libGUtdXNlcm5hbWUtY29tcGxldGlvbnMgY29tcGxldGUtdmFyaWFibGUgcG9zc2libGUtdmFyaWFibGUtY29tcGxldGlvbnMgY29tcGxldGUtaG9zdG5hbWUKKyAgc3luIGtleXdvcmQgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkIHBvc3NpYmxlLWhvc3RuYW1lLWNvbXBsZXRpb25zIGNvbXBsZXRlLWNvbW1hbmQgcG9zc2libGUtY29tbWFuZC1jb21wbGV0aW9ucyBkeW5hbWljLWNvbXBsZXRlLWhpc3RvcnkgY29tcGxldGUtaW50by1icmFjZXMKKyAgc3luIGtleXdvcmQgcmVhZGxpbmVGdW5jdGlvbnMJY29udGFpbmVkIGdsb2ItZXhwYW5kLXdvcmQgZ2xvYi1saXN0LWV4cGFuc2lvbnMgZGlzcGxheS1zaGVsbC12ZXJzaW9uCisgIHN5biBrZXl3b3JkIHJlYWRsaW5lRnVuY3Rpb25zCWNvbnRhaW5lZCBnbG9iLWNvbXBsZXRlLXdvcmQgZWRpdC1hbmQtZXhlY3V0ZS1jb21tYW5kCitlbmRpZgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9yZWFkbGluZV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9yZWFkbGluZV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayByZWFkbGluZUNvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgcmVhZGxpbmVUb2RvCQlUb2RvCisgIEhpTGluayByZWFkbGluZVN0cmluZwkJU3RyaW5nCisgIEhpTGluayByZWFkbGluZUtleXMJCVNwZWNpYWxDaGFyCisgIEhpTGluayByZWFkbGluZUtleXNUd28JU3BlY2lhbENoYXIKKyAgSGlMaW5rIHJlYWRsaW5lS2V5bWFwcwlDb25zdGFudAorICBIaUxpbmsgcmVhZGxpbmVCZWxsU3R5bGVzCUNvbnN0YW50CisgIEhpTGluayByZWFkbGluZU51bWJlcgkJTnVtYmVyCisgIEhpTGluayByZWFkbGluZUJvb2xlYW4JQm9vbGVhbgorICBIaUxpbmsgcmVhZGxpbmVJZk9wcwkJVHlwZQorICBIaUxpbmsgcmVhZGxpbmVDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgcmVhZGxpbmVJbmNsdWRlCUluY2x1ZGUKKyAgSGlMaW5rIHJlYWRsaW5lS2V5d29yZAlLZXl3b3JkCisgIEhpTGluayByZWFkbGluZVNldHRpbmdzCVR5cGUKKyAgSGlMaW5rIHJlYWRsaW5lRnVuY3Rpb25zCVR5cGUKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInJlYWRsaW5lIgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9yZWJvbC52aW0gYi9ydW50aW1lL3N5bnRheC9yZWJvbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYzOTU3NQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3JlYm9sLnZpbQpAQCAtMCwwICsxLDIxNiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVJlYm9sCisiIE1haW50YWluZXI6CU1pa2UgV2lsbGlhbXMgPG1yd0BlYW5kZW0uY28udWs+CisiIEZpbGVuYW1lczoJKi5yCisiIExhc3QgQ2hhbmdlOgkyN3RoIEp1bmUgMjAwMgorIiBVUkw6CQlodHRwOi8vd3d3LmVhbmRlbS5jby51ay9tcncvdmltCisiCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBSZWJvbCBpcyBjYXNlIGluc2Vuc2l0aXZlCitzeW4gY2FzZSBpZ25vcmUKKworIiBBcyBwZXIgY3VycmVudCB1c2VycyBkb2N1bWVudGF0aW9uCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNldCBpc2s9QCw0OC01Nyw/LCEsLiwnLCssLSwqLCYsXHwsPSxfLH4KK2Vsc2UKKyAgc2V0bG9jYWwgaXNrPUAsNDgtNTcsPywhLC4sJywrLC0sKiwmLFx8LD0sXyx+CitlbmRpZgorCisiIFllciBUT0RPIGhpZ2hsaWdodGVyCitzeW4ga2V5d29yZAlyZWJvbFRvZG8JY29udGFpbmVkIFRPRE8KKworIiBDb21tZW50cworc3luIG1hdGNoICAgICAgIHJlYm9sQ29tbWVudCAgICAiOy4qJCIgY29udGFpbnM9cmVib2xUb2RvCisKKyIgV29yZHMKK3N5biBtYXRjaCAgICAgICByZWJvbFdvcmQgICAgICAgIlxhXGsqIgorc3luIG1hdGNoICAgICAgIHJlYm9sV29yZFBhdGggICAiW15bOnNwYWNlOl1dL1teWzpzcGFjZV1dIm1zPXMrMSxtZT1lLTEKKworIiBCb29sZWFucworc3luIGtleXdvcmQgICAgIHJlYm9sQm9vbGVhbiAgICB0cnVlIGZhbHNlIG9uIG9mZiB5ZXMgbm8KKworIiBWYWx1ZXMKKyIgSW50ZWdlcnMKK3N5biBtYXRjaCAgICAgICByZWJvbEludGVnZXIgICAgIlw8WystXVw9XGRcK1woJ1xkKlwpKlw+IgorIiBEZWNpbWFscworc3luIG1hdGNoICAgICAgIHJlYm9sRGVjaW1hbCAgICAiWystXVw9XChcZFwrXCgnXGQqXCkqXClcPVssLl1cZCpcKGVbKy1dXD1cZFwrXClcPSIKK3N5biBtYXRjaCAgICAgICByZWJvbERlY2ltYWwgICAgIlsrLV1cPVxkXCtcKCdcZCpcKSpcKGVbKy1dXD1cZFwrXClcPSIKKyIgVGltZQorc3luIG1hdGNoICAgICAgIHJlYm9sVGltZSAgICAgICAiWystXVw9XChcZFwrXCgnXGQqXCkqXDpcKVx7MSwyfVxkXCtcKCdcZCpcKSpcKFsuLF1cZFwrXClcPVwoW0FQXU1cKVw9XD4iCitzeW4gbWF0Y2ggICAgICAgcmVib2xUaW1lICAgICAgICJbKy1dXD06XGRcK1woWy4sXVxkKlwpXD1cKFtBUF1NXClcPVw+IgorIiBEYXRlcworIiBERC1NTU0tWVkgJiBZWVlZIGZvcm1hdAorc3luIG1hdGNoICAgICAgIHJlYm9sRGF0ZSAgICAgICAiXGRcezEsMn1cKFsvLV1cKVwoSmFuXHxGZWJcfE1hclx8QXByXHxNYXlcfEp1blx8SnVsXHxBdWdcfFNlcFx8T2N0XHxOb3ZcfERlY1wpXDFcKFxkXHsyfVwpXHsxLDJ9XD4iCisiIERELW1vbnRoLVlZICYgWVlZWSBmb3JtYXQKK3N5biBtYXRjaCAgICAgICByZWJvbERhdGUgICAgICAgIlxkXHsxLDJ9XChbLy1dXClcKEphbnVhcnlcfEZlYnJ1YXJ5XHxNYXJjaFx8QXByaWxcfE1heVx8SnVuZVx8SnVseVx8QXVndXN0XHxTZXB0ZW1iZXJcfE9jdG9iZXJcfE5vdmVtYmVyXHxEZWNlbWJlclwpXDFcKFxkXHsyfVwpXHsxLDJ9XD4iCisiIERELU1NLVlZICYgWVkgZm9ybWF0CitzeW4gbWF0Y2ggICAgICAgcmVib2xEYXRlICAgICAgICJcZFx7MSwyfVwoWy8tXVwpXGRcezEsMn1cMVwoXGRcezJ9XClcezEsMn1cPiIKKyIgWVlZWS1NTS1ZWSBmb3JtYXQKK3N5biBtYXRjaCAgICAgICByZWJvbERhdGUgICAgICAgIlxkXHs0fS1cZFx7MSwyfS1cZFx7MSwyfVw+IgorIiBERC5NTS5ZWVlZIGZvcm1hdAorc3luIG1hdGNoICAgICAgIHJlYm9sRGF0ZSAgICAgICAiXGRcezEsMn1cLlxkXHsxLDJ9XC5cZFx7NH1cPiIKKyIgTW9uZXkKK3N5biBtYXRjaCAgICAgICByZWJvbE1vbmV5ICAgICAgIlxhKlwkXGRcK1woJ1xkKlwpKlwoWywuXVxkXCtcKVw9IgorIiBTdHJpbmdzCitzeW4gcmVnaW9uICAgICAgcmVib2xTdHJpbmcgICAgIG9uZWxpbmUgc3RhcnQ9KyIrIHNraXA9K14iKyBlbmQ9KyIrIGNvbnRhaW5zPXJlYm9sU3BlY2lhbENoYXJhY3Rlcgorc3luIHJlZ2lvbiAgICAgIHJlYm9sU3RyaW5nICAgICBzdGFydD0rW14jXXsrIGVuZD0rfSsgc2tpcD0re1tefV0qfSsgY29udGFpbnM9cmVib2xTcGVjaWFsQ2hhcmFjdGVyCisiIEJpbmFyeQorc3luIHJlZ2lvbiAgICAgIHJlYm9sQmluYXJ5ICAgICBzdGFydD0rXGQqI3srIGVuZD0rfSsgY29udGFpbnM9cmVib2xDb21tZW50CisiIEVtYWlsCitzeW4gbWF0Y2ggICAgICAgcmVib2xFbWFpbCAgICAgICJcPFxrXCtAXChca1wrXC5cKSpca1wrXD4iCisiIEZpbGUKK3N5biBtYXRjaCAgICAgICByZWJvbEZpbGUgICAgICAgIiVcKFxrXCsvXCkqXGtcK1svXVw9IiBjb250YWlucz1yZWJvbFNwZWNpYWxDaGFyYWN0ZXIKK3N5biByZWdpb24gICAgICByZWJvbEZpbGUgICAgICAgb25lbGluZSBzdGFydD0rJSIrIGVuZD0rIisgY29udGFpbnM9cmVib2xTcGVjaWFsQ2hhcmFjdGVyCisiIFVSTHMKK3N5biBtYXRjaAlyZWJvbFVSTAkiaHR0cDovL1xrXCtcKFwuXGtcK1wpKlwoOlxkXCtcKVw9XCgvXChca1wrL1wpKlwoXGtcK1wpXD1cKSoiCitzeW4gbWF0Y2gJcmVib2xVUkwJImZpbGU6Ly9ca1wrXChcLlxrXCtcKSovXChca1wrL1wpKlxrXCsiCitzeW4gbWF0Y2gJcmVib2xVUkwJImZ0cDovL1woXGtcKzpca1wrQFwpXD1ca1wrXChcLlxrXCtcKSpcKDpcZFwrXClcPS9cKFxrXCsvXCkqXGtcKyIKK3N5biBtYXRjaAlyZWJvbFVSTAkibWFpbHRvOlxrXCtcKFwuXGtcK1wpKkBca1wrXChcLlxrXCtcKSoiCisiIElzc3Vlcworc3luIG1hdGNoCXJlYm9sSXNzdWUJIiNcKFxkXCstXCkqXGRcKyIKKyIgVHVwbGVzCitzeW4gbWF0Y2gJcmVib2xUdXBsZQkiXChcZFwrXC5cKVx7Mix9IgorCisiIENoYXJhY3RlcnMKK3N5biBtYXRjaCAgICAgICByZWJvbFNwZWNpYWxDaGFyYWN0ZXIgY29udGFpbmVkICJcXlteWzpzcGFjZTpdW10iCitzeW4gbWF0Y2ggICAgICAgcmVib2xTcGVjaWFsQ2hhcmFjdGVyIGNvbnRhaW5lZCAiJVxkXCsiCisKKworIiBPcGVyYXRvcnMKKyIgTWF0aCBvcGVyYXRvcnMKK3N5biBtYXRjaCAgICAgICByZWJvbE1hdGhPcGVyYXRvciAgIlwoXCpcezEsMn1cfCtcfC1cfC9cezEsMn1cKSIKK3N5biBrZXl3b3JkICAgICByZWJvbE1hdGhGdW5jdGlvbiAgYWJzIGFic29sdXRlIGFkZCBhcmNjb3NpbmUgYXJjc2luZSBhcmN0YW5nZW50IGNvc2luZQorc3luIGtleXdvcmQgICAgIHJlYm9sTWF0aEZ1bmN0aW9uICBkaXZpZGUgZXhwIGxvZy0xMCBsb2ctMiBsb2ctZSBtYXggbWF4aW11bSBtaW4KK3N5biBrZXl3b3JkICAgICByZWJvbE1hdGhGdW5jdGlvbiAgbWluaW11bSBtdWx0aXBseSBuZWdhdGUgcG93ZXIgcmFuZG9tIHJlbWFpbmRlciBzaW5lCitzeW4ga2V5d29yZCAgICAgcmVib2xNYXRoRnVuY3Rpb24gIHNxdWFyZS1yb290IHN1YnRyYWN0IHRhbmdlbnQKKyIgQmluYXJ5IG9wZXJhdG9ycworc3luIGtleXdvcmQgICAgIHJlYm9sQmluYXJ5T3BlcmF0b3IgY29tcGxlbWVudCBhbmQgb3IgeG9yIH4KKyIgTG9naWMgb3BlcmF0b3JzCitzeW4gbWF0Y2ggICAgICAgcmVib2xMb2dpY09wZXJhdG9yICJbPD49XT1cPSIKK3N5biBtYXRjaCAgICAgICByZWJvbExvZ2ljT3BlcmF0b3IgIjw+Igorc3luIGtleXdvcmQgICAgIHJlYm9sTG9naWNPcGVyYXRvciBub3QKK3N5biBrZXl3b3JkICAgICByZWJvbExvZ2ljRnVuY3Rpb24gYWxsIGFueQorc3luIGtleXdvcmQgICAgIHJlYm9sTG9naWNGdW5jdGlvbiBoZWFkPyB0YWlsPworc3luIGtleXdvcmQgICAgIHJlYm9sTG9naWNGdW5jdGlvbiBuZWdhdGl2ZT8gcG9zaXRpdmU/IHplcm8/IGV2ZW4/IG9kZD8KK3N5biBrZXl3b3JkICAgICByZWJvbExvZ2ljRnVuY3Rpb24gYmluYXJ5PyBibG9jaz8gY2hhcj8gZGF0ZT8gZGVjaW1hbD8gZW1haWw/IGVtcHR5Pworc3luIGtleXdvcmQgICAgIHJlYm9sTG9naWNGdW5jdGlvbiBmaWxlPyBmb3VuZD8gZnVuY3Rpb24/IGludGVnZXI/IGlzc3VlPyBsb2dpYz8gbW9uZXk/CitzeW4ga2V5d29yZCAgICAgcmVib2xMb2dpY0Z1bmN0aW9uIG5hdGl2ZT8gbm9uZT8gb2JqZWN0PyBwYXJlbj8gcGF0aD8gcG9ydD8gc2VyaWVzPworc3luIGtleXdvcmQgICAgIHJlYm9sTG9naWNGdW5jdGlvbiBzdHJpbmc/IHRpbWU/IHR1cGxlPyB1cmw/IHdvcmQ/CitzeW4ga2V5d29yZCAgICAgcmVib2xMb2dpY0Z1bmN0aW9uIGV4aXN0cz8gaW5wdXQ/IHNhbWU/IHZhbHVlPworCisiIERhdGF0eXBlcworc3luIGtleXdvcmQgICAgIHJlYm9sVHlwZSAgICAgICBiaW5hcnkhIGJsb2NrISBjaGFyISBkYXRlISBkZWNpbWFsISBlbWFpbCEgZmlsZSEKK3N5biBrZXl3b3JkICAgICByZWJvbFR5cGUgICAgICAgZnVuY3Rpb24hIGludGVnZXIhIGlzc3VlISBsb2dpYyEgbW9uZXkhIG5hdGl2ZSEKK3N5biBrZXl3b3JkICAgICByZWJvbFR5cGUgICAgICAgbm9uZSEgb2JqZWN0ISBwYXJlbiEgcGF0aCEgcG9ydCEgc3RyaW5nISB0aW1lIQorc3luIGtleXdvcmQgICAgIHJlYm9sVHlwZSAgICAgICB0dXBsZSEgdXJsISB3b3JkIQorc3luIGtleXdvcmQgICAgIHJlYm9sVHlwZUZ1bmN0aW9uIHR5cGU/CisKKyIgQ29udHJvbCBzdGF0ZW1lbnRzCitzeW4ga2V5d29yZCAgICAgcmVib2xTdGF0ZW1lbnQgIGJyZWFrIGNhdGNoIGV4aXQgaGFsdCByZWR1Y2UgcmV0dXJuIHNoaWVsZAorc3luIGtleXdvcmQgICAgIHJlYm9sQ29uZGl0aW9uYWwgaWYgZWxzZQorc3luIGtleXdvcmQgICAgIHJlYm9sUmVwZWF0ICAgICBmb3IgZm9yYWxsIGZvcmVhY2ggZm9yc2tpcCBsb29wIHJlcGVhdCB3aGlsZSB1bnRpbCBkbworCisiIFNlcmllcyBzdGF0ZW1lbnRzCitzeW4ga2V5d29yZCAgICAgcmVib2xTdGF0ZW1lbnQgIGNoYW5nZSBjbGVhciBjb3B5IGZpZnRoIGZpbmQgZmlyc3QgZm9ybWF0IGZvdXJ0aCBmcmVlCitzeW4ga2V5d29yZCAgICAgcmVib2xTdGF0ZW1lbnQgIGZ1bmMgZnVuY3Rpb24gaGVhZCBpbnNlcnQgbGFzdCBtYXRjaCBuZXh0IHBhcnNlIHBhc3QKK3N5biBrZXl3b3JkICAgICByZWJvbFN0YXRlbWVudCAgcGljayByZW1vdmUgc2Vjb25kIHNlbGVjdCBza2lwIHNvcnQgdGFpbCB0aGlyZCB0cmltIGxlbmd0aD8KKworIiBDb250ZXh0CitzeW4ga2V5d29yZCAgICAgcmVib2xTdGF0ZW1lbnQgIGFsaWFzIGJpbmQgdXNlCisKKyIgT2JqZWN0CitzeW4ga2V5d29yZCAgICAgcmVib2xTdGF0ZW1lbnQgIGltcG9ydCBtYWtlIG1ha2Utb2JqZWN0IHJlYm9sIGluZm8/CisKKyIgSS9PIHN0YXRlbWVudHMKK3N5biBrZXl3b3JkICAgICByZWJvbFN0YXRlbWVudCAgZGVsZXRlIGVjaG8gZm9ybSBmb3JtYXQgaW1wb3J0IGlucHV0IGxvYWQgbW9sZCBwcmluCitzeW4ga2V5d29yZCAgICAgcmVib2xTdGF0ZW1lbnQgIHByaW50IHByb2JlIHJlYWQgc2F2ZSBzZWN1cmUgc2VuZCB3cml0ZQorc3luIGtleXdvcmQgICAgIHJlYm9sT3BlcmF0b3IgICBzaXplPyBtb2RpZmllZD8KKworIiBEZWJ1ZyBzdGF0ZW1lbnQKK3N5biBrZXl3b3JkICAgICByZWJvbFN0YXRlbWVudCAgaGVscCBwcm9iZSB0cmFjZQorCisiIE1pc2Mgc3RhdGVtZW50cworc3luIGtleXdvcmQgICAgIHJlYm9sU3RhdGVtZW50ICBmdW5jIGZ1bmN0aW9uIGZyZWUKKworIiBDb25zdGFudHMKK3N5biBrZXl3b3JkICAgICByZWJvbENvbnN0YW50ICAgbm9uZQorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3JlYm9sX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3JlYm9sX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHJlYm9sVG9kbyAgICAgVG9kbworCisgIEhpTGluayByZWJvbFN0YXRlbWVudCBTdGF0ZW1lbnQKKyAgSGlMaW5rIHJlYm9sTGFiZWwJTGFiZWwKKyAgSGlMaW5rIHJlYm9sQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHJlYm9sUmVwZWF0CVJlcGVhdAorCisgIEhpTGluayByZWJvbE9wZXJhdG9yCU9wZXJhdG9yCisgIEhpTGluayByZWJvbExvZ2ljT3BlcmF0b3IgcmVib2xPcGVyYXRvcgorICBIaUxpbmsgcmVib2xMb2dpY0Z1bmN0aW9uIHJlYm9sTG9naWNPcGVyYXRvcgorICBIaUxpbmsgcmVib2xNYXRoT3BlcmF0b3IgcmVib2xPcGVyYXRvcgorICBIaUxpbmsgcmVib2xNYXRoRnVuY3Rpb24gcmVib2xNYXRoT3BlcmF0b3IKKyAgSGlMaW5rIHJlYm9sQmluYXJ5T3BlcmF0b3IgcmVib2xPcGVyYXRvcgorICBIaUxpbmsgcmVib2xCaW5hcnlGdW5jdGlvbiByZWJvbEJpbmFyeU9wZXJhdG9yCisKKyAgSGlMaW5rIHJlYm9sVHlwZSAgICAgVHlwZQorICBIaUxpbmsgcmVib2xUeXBlRnVuY3Rpb24gcmVib2xPcGVyYXRvcgorCisgIEhpTGluayByZWJvbFdvcmQgICAgIElkZW50aWZpZXIKKyAgSGlMaW5rIHJlYm9sV29yZFBhdGggcmVib2xXb3JkCisgIEhpTGluayByZWJvbEZ1bmN0aW9uCUZ1bmN0aW9uCisKKyAgSGlMaW5rIHJlYm9sQ2hhcmFjdGVyIENoYXJhY3RlcgorICBIaUxpbmsgcmVib2xTcGVjaWFsQ2hhcmFjdGVyIFNwZWNpYWxDaGFyCisgIEhpTGluayByZWJvbFN0cmluZwlTdHJpbmcKKworICBIaUxpbmsgcmVib2xOdW1iZXIgICBOdW1iZXIKKyAgSGlMaW5rIHJlYm9sSW50ZWdlciAgcmVib2xOdW1iZXIKKyAgSGlMaW5rIHJlYm9sRGVjaW1hbCAgcmVib2xOdW1iZXIKKyAgSGlMaW5rIHJlYm9sVGltZSAgICAgcmVib2xOdW1iZXIKKyAgSGlMaW5rIHJlYm9sRGF0ZSAgICAgcmVib2xOdW1iZXIKKyAgSGlMaW5rIHJlYm9sTW9uZXkgICAgcmVib2xOdW1iZXIKKyAgSGlMaW5rIHJlYm9sQmluYXJ5ICAgcmVib2xOdW1iZXIKKyAgSGlMaW5rIHJlYm9sRW1haWwgICAgcmVib2xTdHJpbmcKKyAgSGlMaW5rIHJlYm9sRmlsZSAgICAgcmVib2xTdHJpbmcKKyAgSGlMaW5rIHJlYm9sVVJMICAgICAgcmVib2xTdHJpbmcKKyAgSGlMaW5rIHJlYm9sSXNzdWUgICAgcmVib2xOdW1iZXIKKyAgSGlMaW5rIHJlYm9sVHVwbGUgICAgcmVib2xOdW1iZXIKKyAgSGlMaW5rIHJlYm9sRmxvYXQgICAgRmxvYXQKKyAgSGlMaW5rIHJlYm9sQm9vbGVhbiAgQm9vbGVhbgorCisgIEhpTGluayByZWJvbENvbnN0YW50IENvbnN0YW50CisKKyAgSGlMaW5rIHJlYm9sQ29tbWVudAlDb21tZW50CisKKyAgSGlMaW5rIHJlYm9sRXJyb3IJRXJyb3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworaWYgZXhpc3RzKCJteV9yZWJvbF9maWxlIikKKyAgaWYgZmlsZV9yZWFkYWJsZShleHBhbmQobXlfcmVib2xfZmlsZSkpCisgICAgZXhlY3V0ZSAic291cmNlICIgLiBteV9yZWJvbF9maWxlCisgIGVuZGlmCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJyZWJvbCIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3JlZ2lzdHJ5LnZpbSBiL3J1bnRpbWUvc3ludGF4L3JlZ2lzdHJ5LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWZmOGZjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcmVnaXN0cnkudmltCkBAIC0wLDAgKzEsMTE0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJV2luZG93cyBSZWdpc3RyeSBleHBvcnQgd2l0aCByZWdlZGl0ICgqLnJlZykKKyIgTWFpbnRhaW5lcjoJRG9taW5pcXVlIFN06XBoYW4gKGRvbWluaXF1ZUBtZ2dlbi5jb20pCisiIFVSTDogaHR0cDovL3d3dy5tZ2dlbi5jb20vdmltL3N5bnRheC9yZWdpc3RyeS56aXAKKyIgTGFzdCBjaGFuZ2U6CTIwMDQgQXByIDIzCisKKyIgY2xlYXIgYW55IHVud2FudGVkIHN5bnRheCBkZWZzCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgc2h1dCBjYXNlIG9mZgorc3luIGNhc2UgaWdub3JlCisKKyIgSGVhZCBvZiByZWdlZGl0IC5yZWcgZmlsZXMsIGl0J3MgUkVHRURJVDQgb24gV2luOSMvTlQKK3N5biBtYXRjaCByZWdpc3RyeUhlYWQJCSJeUkVHRURJVFswLTldKiQiCisKKyIgQ29tbWVudAorc3luIG1hdGNoICByZWdpc3RyeUNvbW1lbnQJIl47LiokIgorCisiIFJlZ2lzdHJ5IEtleSBjb25zdGFudAorc3luIGtleXdvcmQgcmVnaXN0cnlIS0VZCUhLRVlfTE9DQUxfTUFDSElORSBIS0VZX0NMQVNTRVNfUk9PVCBIS0VZX0NVUlJFTlRfVVNFUgorc3luIGtleXdvcmQgcmVnaXN0cnlIS0VZCUhLRVlfVVNFUlMgSEtFWV9DVVJSRU5UX0NPTkZJRyBIS0VZX0RZTl9EQVRBCisiIFJlZ2lzdHJ5IEtleSBzaG9ydGN1dHMKK3N5biBrZXl3b3JkIHJlZ2lzdHJ5SEtFWQlIS0xNIEhLQ1IgSEtDVSBIS1UgSEtDQyBIS0RECisKKyIgU29tZSB2YWx1ZXMgb2Z0ZW4gZm91bmQgaW4gdGhlIHJlZ2lzdHJ5CisiIEdVSUQgKEdsb2JhbCBVbmlxdWUgSURlbnRpZmllcikKK3N5biBtYXRjaCAgIHJlZ2lzdHJ5R1VJRAkie1swLTlBLUZhLWZdXHs4fVwtWzAtOUEtRmEtZl1cezR9XC1bMC05QS1GYS1mXVx7NH1cLVswLTlBLUZhLWZdXHs0fVwtWzAtOUEtRmEtZl1cezEyfX0iIGNvbnRhaW5zPXJlZ2lzdHJ5U3BlY2lhbAorCisiIERpc2sKKyIgc3luIG1hdGNoICAgcmVnaXN0cnlEaXNrCSJbYS16QS1aXTpcXFxcIgorCisiIFNwZWNpYWwgYW5kIFNlcGFyYXRvciBjaGFyYWN0ZXJzCitzeW4gbWF0Y2ggICByZWdpc3RyeVNwZWNpYWwJIlxcIgorc3luIG1hdGNoICAgcmVnaXN0cnlTcGVjaWFsCSJcXFxcIgorc3luIG1hdGNoICAgcmVnaXN0cnlTcGVjaWFsCSJcXFwiIgorc3luIG1hdGNoICAgcmVnaXN0cnlTcGVjaWFsCSJcLiIKK3N5biBtYXRjaCAgIHJlZ2lzdHJ5U3BlY2lhbAkiLCIKK3N5biBtYXRjaCAgIHJlZ2lzdHJ5U3BlY2lhbAkiXC8iCitzeW4gbWF0Y2ggICByZWdpc3RyeVNwZWNpYWwJIjoiCitzeW4gbWF0Y2ggICByZWdpc3RyeVNwZWNpYWwJIi0iCisKKyIgU3RyaW5nCitzeW4gbWF0Y2ggICByZWdpc3RyeVN0cmluZwkiXCIuKlwiIiBjb250YWlucz1yZWdpc3RyeUdVSUQscmVnaXN0cnlTcGVjaWFsCisKKyIgUGF0aAorc3luIHJlZ2lvbiAgcmVnaXN0cnlQYXRoCQlzdGFydD0iXFsiIGVuZD0iXF0iIGNvbnRhaW5zPXJlZ2lzdHJ5SEtFWSxyZWdpc3RyeUdVSUQscmVnaXN0cnlTcGVjaWFsCisKKyIgUGF0aCB0byByZW1vdmUKKyIgbGlrZSBwcmVjZWRpbmcgcGF0aCBidXQgd2l0aCBhICItIiBhdCBiZWdpbgorc3luIHJlZ2lvbiByZWdpc3RyeVJlbW92ZQlzdGFydD0iXFtcLSIgZW5kPSJcXSIgY29udGFpbnM9cmVnaXN0cnlIS0VZLHJlZ2lzdHJ5R1VJRCxyZWdpc3RyeVNwZWNpYWwKKworIiBTdWJrZXkKK3N5biBtYXRjaCAgcmVnaXN0cnlTdWJLZXkJCSJeXCIuKlwiPSIKKyIgRGVmYXVsdCB2YWx1ZQorc3luIG1hdGNoICByZWdpc3RyeVN1YktleQkJIl5cQD0iCisKKyIgTnVtYmVycworCisiIEhleCBvciBCaW5hcnkKKyIgVGhlIGZvcm1hdCBjYW4gYmUgcHJlY2lzZWQgYmV0d2VlbiAoKSA6CisiIDAgICAgUkVHX05PTkUKKyIgMSAgICBSRUdfU1oKKyIgMiAgICBSRUdfRVhQQU5EX1NaCisiIDMgICAgUkVHX0JJTkFSWQorIiA0ICAgIFJFR19EV09SRCwgUkVHX0RXT1JEX0xJVFRMRV9FTkRJQU4KKyIgNSAgICBSRUdfRFdPUkRfQklHX0VORElBTgorIiA2ICAgIFJFR19MSU5LCisiIDcgICAgUkVHX01VTFRJX1NaCisiIDggICAgUkVHX1JFU09VUkNFX0xJU1QKKyIgOSAgICBSRUdfRlVMTF9SRVNPVVJDRV9ERVNDUklQVE9SCisiIDEwICAgUkVHX1JFU09VUkNFX1JFUVVJUkVNRU5UU19MSVNUCisiIFRoZSB2YWx1ZSBjYW4gdGFrZSBzZXZlcmFsIGxpbmVzLCBpZiBcIGVuZHMgdGhlIGxpbmUKKyIgVGhlIGxpbWl0IHRvIDk5OSBtYXRjaGVzIGlzIGFyYml0cmFyeSwgaXQgYXZvaWRzIFZpbSBjcmFzaGluZyBvbiBhIHZlcnkgbG9uZworIiBsaW5lIG9mIGhleCB2YWx1ZXMgdGhhdCBlbmRzIGluIGEgY29tbWEuCisic3luIG1hdGNoIHJlZ2lzdHJ5SGV4CQkiaGV4XCgoWzAtOV1cezAsMn0pXClcPTpcKFswLTlhLWZBLUZdXHsyfSxcKVx7MCw5OTl9XChbMC05YS1mQS1GXVx7Mn1cfFxcXCkkIiBjb250YWlucz1yZWdpc3RyeVNwZWNpYWwKK3N5biBtYXRjaCByZWdpc3RyeUhleAkJImhleFwoKFswLTldXHswLDJ9KVwpXD06XChbMC05YS1mQS1GXVx7Mn0sXCkqXChbMC05YS1mQS1GXVx7Mn1cfFxcXCkkIiBjb250YWlucz1yZWdpc3RyeVNwZWNpYWwKK3N5biBtYXRjaCByZWdpc3RyeUhleAkJIl5ccypcKFswLTlhLWZBLUZdXHsyfSxcKVx7MCw5OTl9XChbMC05YS1mQS1GXVx7Mn1cfFxcXCkkIiBjb250YWlucz1yZWdpc3RyeVNwZWNpYWwKKyIgRHdvcmQgKDMyIGJpdHMpCitzeW4gbWF0Y2ggcmVnaXN0cnlEd29yZAkJImR3b3JkOlswLTlhLWZBLUZdXHs4fSQiIGNvbnRhaW5zPXJlZ2lzdHJ5U3BlY2lhbAorCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcmVnaXN0cnlfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcmVnaXN0cnlfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICAgSGlMaW5rIHJlZ2lzdHJ5Q29tbWVudAlDb21tZW50CisgICBIaUxpbmsgcmVnaXN0cnlIZWFkCQlDb25zdGFudAorICAgSGlMaW5rIHJlZ2lzdHJ5SEtFWQkJQ29uc3RhbnQKKyAgIEhpTGluayByZWdpc3RyeVBhdGgJCVNwZWNpYWwKKyAgIEhpTGluayByZWdpc3RyeVJlbW92ZQlQcmVQcm9jCisgICBIaUxpbmsgcmVnaXN0cnlHVUlECQlJZGVudGlmaWVyCisgICBIaUxpbmsgcmVnaXN0cnlTcGVjaWFsCVNwZWNpYWwKKyAgIEhpTGluayByZWdpc3RyeVN1YktleQlUeXBlCisgICBIaUxpbmsgcmVnaXN0cnlTdHJpbmcJU3RyaW5nCisgICBIaUxpbmsgcmVnaXN0cnlIZXgJCU51bWJlcgorICAgSGlMaW5rIHJlZ2lzdHJ5RHdvcmQJCU51bWJlcgorCisgICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJyZWdpc3RyeSIKKworIiB2aW06dHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcmVtaW5kLnZpbSBiL3J1bnRpbWUvc3ludGF4L3JlbWluZC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkNTgzZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3JlbWluZC52aW0KQEAgLTAsMCArMSw2NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVJlbWluZAorIiBNYWludGFpbmVyOglEYXZpZGUgQWxiZXJhbmkgPGFsYmVyYW5pZEBiaWdmb290LmNvbT4KKyIgTGFzdCBDaGFuZ2U6CTI4IEFwciAyMDAxCisiIFZlcnNpb246CTAuMgorIiBVUkw6CQlodHRwOi8vZGlnaWxhbmRlci5pb2wuaXQvYWxiZXJhbmlkL3ZpbS9zeW50YXgvcmVtaW5kLnZpbQorIgorIiByZW1pbmQgaXMgYSBzb3BoaXN0aWNhdGVkIHJlbWluZGVyIHNlcnZpY2UKKyIgeW91IGNhbiBkb3dubG9hZCByZW1pbmQgZnJvbSBodHRwOi8vd3d3LnJvYXJpbmdwZW5ndWluLmNvbS9yZW1pbmQuaHRtbAorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBzaHV0IGNhc2Ugb2ZmCitzeW4gY2FzZSBpZ25vcmUKKworc3luIGtleXdvcmQgcmVtaW5kQ29tbWFuZHMJUkVNIE9NSVQgU0VUIEZTRVQgVU5TRVQKK3N5biBrZXl3b3JkIHJlbWluZEV4cGlyeQlVTlRJTCBTQ0FORlJPTSBTQ0FOIFdBUk4gU0NIRUQKK3N5biBrZXl3b3JkIHJlbWluZFRhZwkJUFJJT1JJVFkgVEFHCitzeW4ga2V5d29yZCByZW1pbmRUaW1lZAkJQVQgRFVSQVRJT04KK3N5biBrZXl3b3JkIHJlbWluZE1vdmUJCU9OQ0UgU0tJUCBCRUZPUkUgQUZURVIKK3N5biBrZXl3b3JkIHJlbWluZFNwZWNpYWwJSU5DTFVERSBJTkMgQkFOTkVSIFBVU0gtT01JVC1DT05URVhUIFBVU0ggQ0xFQVItT01JVC1DT05URVhUIENMRUFSIFBPUC1PTUlULUNPTlRFWFQgUE9QCitzeW4ga2V5d29yZCByZW1pbmRSdW4JCU1TRyBNU0YgUlVOIENBTCBTQVRJU0ZZIFNQRUNJQUwgUFMgUFNGSUxFIFNIQURFIE1PT04KK3N5biBrZXl3b3JkIHJlbWluZENvbmRpdGlvbmFsCUlGIEVMU0UgRU5ESUYgSUZUUklHCitzeW4gbWF0Y2ggcmVtaW5kQ29tbWVudAkJIiMuKiQiCitzeW4gcmVnaW9uIHJlbWluZFN0cmluZwkJc3RhcnQ9KycrIGVuZD0rJysgc2tpcD0rXFxcXFx8XFwnKyBvbmVsaW5lCitzeW4gcmVnaW9uIHJlbWluZFN0cmluZwkJc3RhcnQ9KyIrIGVuZD0rIisgc2tpcD0rXFxcXFx8XFwiKyBvbmVsaW5lCitzeW4ga2V5d29yZCByZW1pbmREZWJ1ZwkJREVCVUcgRFVNUFZBUlMgRFVNUCBFUlJNU0cgRkxVU0ggUFJFU0VSVkUKK3N5biBtYXRjaCByZW1pbmRWYXIJCSJcJFtfYS16QS1aXVtfYS16QS1aMC05XSoiCitzeW4gbWF0Y2ggcmVtaW5kU3Vic3QJCSIlW14gXSIKK3N5biBtYXRjaCByZW1pbmRBZHZhbmNlTnVtYmVyCSJcKFwqXHwrXHwtXHwrK1x8LS1cKVswLTldXCsiCisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9yZW1pbmRfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcmVtaW5kX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHJlbWluZENvbW1hbmRzCQlGdW5jdGlvbgorICBIaUxpbmsgcmVtaW5kRXhwaXJ5CQlSZXBlYXQKKyAgSGlMaW5rIHJlbWluZFRhZwkJTGFiZWwKKyAgSGlMaW5rIHJlbWluZFRpbWVkCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHJlbWluZE1vdmUJCVN0YXRlbWVudAorICBIaUxpbmsgcmVtaW5kU3BlY2lhbAkJSW5jbHVkZQorICBIaUxpbmsgcmVtaW5kUnVuCQlGdW5jdGlvbgorICBIaUxpbmsgcmVtaW5kQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHJlbWluZENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHJlbWluZFN0cmluZwkJU3RyaW5nCisgIEhpTGluayByZW1pbmREZWJ1ZwkJRGVidWcKKyAgSGlMaW5rIHJlbWluZFZhcgkJSWRlbnRpZmllcgorICBIaUxpbmsgcmVtaW5kU3Vic3QJCUNvbnN0YW50CisgIEhpTGluayByZW1pbmRBZHZhbmNlTnVtYmVyCU51bWJlcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJyZW1pbmQiCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3Jlc29sdi52aW0gYi9ydW50aW1lL3N5bnRheC9yZXNvbHYudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYmMyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9yZXNvbHYudmltCkBAIC0wLDAgKzEsODUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgcmVzb2x2ZXIgY29uZmlndXJhdGlvbiBmaWxlCisiIE1haW50YW5lcjogICAgUmFkdSBEaW5laXUgPGxpdHRsZWRyYWdvbkBhbHRlcm4ub3JnPgorIiBVUkw6CQlodHRwOi8vbGQueWkub3JnL3ZpbS9yZXNvbHYudmltCisiIENoYW5nZUxvZzogICAgaHR0cDovL2xkLnlpLm9yZy92aW0vcmVzb2x2LkNoYW5nZUxvZworIiBMYXN0IENoYW5nZTogIDIwMDMgTWF5IDExCisiIFZlcnNpb246ICAgICAgMC4xCisKK2lmIHZlcnNpb24gPCA2MDAKKwlzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworIiBFcnJvcnMsIGNvbW1lbnRzIGFuZCBvcGVyYXRvcnMKK3N5biBtYXRjaCByZXNvbHZFcnJvciAvLi8KK3N5biBtYXRjaCByZXNvbHZOdWxsIC9eXHMqJC8KK3N5biBtYXRjaCByZXNvbHZDb21tZW50IC9eXHMqIy4qJC8KK3N5biBtYXRjaCByZXNvbHZPcGVyYXRvciAvW1wvOl0vIGNvbnRhaW5lZAorCisiIElQCisKK3N5biBjbHVzdGVyIHJlc29sdklQQ2x1c3RlciBjb250YWlucz1yZXNvbHZJUEVycm9yLHJlc29sdklQU3BlY2lhbAorc3luIG1hdGNoIHJlc29sdklQRXJyb3IgL1wlKFxkXHs0LH1cfDI1WzYtOV1cfDJbNi05XVxkXHxbMy05XVxkXHsyfVwpW1wuMC05XSovIGNvbnRhaW5lZAorc3luIG1hdGNoIHJlc29sdklQU3BlY2lhbCAvXCUoMTI3XC5cZFx7MSwzfVwuXGRcezEsM31cLlxkXHsxLDN9XCkvIGNvbnRhaW5lZAorCisiIEdlbmVyYWwKK3N5biBtYXRjaCByZXNvbHZJUCBjb250YWluZWQgL1wlKFxkXHsxLDR9XC5cKVx7M31cZFx7MSw0fS8gY29udGFpbnM9QHJlc29sdklQQ2x1c3Rlcgorc3luIG1hdGNoIHJlc29sdklQTmV0bWFzayBjb250YWluZWQgL1wlKFxkXHsxLDR9XC5cKVx7M31cZFx7MSw0fVwlKFwvXCUoXCUoXGRcezEsNH1cLlwpXHssM31cZFx7MSw0fVwpXClcPy8gY29udGFpbnM9cmVzb2x2T3BlcmF0b3IsQHJlc29sdklQQ2x1c3Rlcgorc3luIG1hdGNoIHJlc29sdkhvc3RuYW1lIGNvbnRhaW5lZCAvXHdcey19XC5bLTAtOUEtWmEtel9cLl0qLworCisiIFBhcnRpY3VsYXIKK3N5biBtYXRjaCByZXNvbHZJUE5hbWVzZXJ2ZXIgY29udGFpbmVkIC9cJShcJShcZFx7MSw0fVwuXClcezN9XGRcezEsNH1cJShcc1x8JFwpXClcezEsM30vIGNvbnRhaW5zPUByZXNvbHZJUENsdXN0ZXIKK3N5biBtYXRjaCByZXNvbHZIb3N0bmFtZVNlYXJjaCBjb250YWluZWQgL1wlKFx3XHstfVwuWy0wLTlBLVphLXpfXC5dXHstfVwlKFxzXHwkXClcKVx7MSw2fS8KK3N5biBtYXRjaCByZXNvbHZJUE5ldG1hc2tTb3J0TGlzdCBjb250YWluZWQgL1wlKFwlKFxkXHsxLDR9XC5cKVx7M31cZFx7MSw0fVwlKFwvXCUoXCUoXGRcezEsNH1cLlwpXHssM31cZFx7MSw0fVwpXClcP1wlKFxzXHwkXClcKVx7MSwxMH0vIGNvbnRhaW5zPXJlc29sdk9wZXJhdG9yLEByZXNvbHZJUENsdXN0ZXIKKworIiBJZGVudGlmaWVycworc3luIG1hdGNoIHJlc29sdk5hbWVzZXJ2ZXIgL15uYW1lc2VydmVyIC8gbmV4dGdyb3VwPXJlc29sdklQTmFtZXNlcnZlcgorc3luIG1hdGNoIHJlc29sdkRvbWFpbiAvXmRvbWFpbiAvIG5leHRncm91cD1yZXNvbHZIb3N0bmFtZQorc3luIG1hdGNoIHJlc29sdlNlYXJjaCAvXnNlYXJjaCAvIG5leHRncm91cD1yZXNvbHZIb3N0bmFtZVNlYXJjaAorc3luIG1hdGNoIHJlc29sdlNvcnRMaXN0IC9ec29ydGxpc3QgLyBuZXh0Z3JvdXA9cmVzb2x2SVBOZXRtYXNrU29ydExpc3QKK3N5biBtYXRjaCByZXNvbHZPcHRpb25zIC9eb3B0aW9ucyAvIG5leHRncm91cD1yZXNvbHZPcHRpb24KKworIiBPcHRpb25zCitzeW4gbWF0Y2ggcmVzb2x2T3B0aW9uIC9cJShkZWJ1Z1x8bmRvdHM6XGRcKS8gY29udGFpbmVkIGNvbnRhaW5zPXJlc29sdk9wZXJhdG9yCisKKyIgQWRkaXRpb25hbCBlcnJvcnMKK3N5biBtYXRjaCByZXNvbHZFcnJvciAvXnNlYXJjaCAuXHsyNTcsfS8KK3N5biBtYXRjaCByZXNvbHZOdWxsIC9cc1x7MSx9JC8KKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2NvbmZpZ19zeW50YXhfaW5pdHMiKQorCWlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9jb25maWdfc3ludGF4X2luaXRzID0gMQorCQljb21tYW5kISAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQhIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKwllbmRpZgorCisJSGlMaW5rIHJlc29sdklQIE51bWJlcgorCUhpTGluayByZXNvbHZJUE5ldG1hc2sgTnVtYmVyCisJSGlMaW5rIHJlc29sdkhvc3RuYW1lIFN0cmluZworCUhpTGluayByZXNvbHZPcHRpb24gU3RyaW5nCisKKwlIaUxpbmsgcmVzb2x2SVBOYW1lc2VydmVyIE51bWJlcgorCUhpTGluayByZXNvbHZIb3N0bmFtZVNlYXJjaCBTdHJpbmcKKwlIaUxpbmsgcmVzb2x2SVBOZXRtYXNrU29ydExpc3QgTnVtYmVyCisKKwlIaUxpbmsgcmVzb2x2TmFtZVNlcnZlciBJZGVudGlmaWVyCisJSGlMaW5rIHJlc29sdkRvbWFpbiBJZGVudGlmaWVyCisJSGlMaW5rIHJlc29sdlNlYXJjaCBJZGVudGlmaWVyCisJSGlMaW5rIHJlc29sdlNvcnRMaXN0IElkZW50aWZpZXIKKwlIaUxpbmsgcmVzb2x2T3B0aW9ucyBJZGVudGlmaWVyCisKKwlIaUxpbmsgcmVzb2x2Q29tbWVudCBDb21tZW50CisJSGlMaW5rIHJlc29sdk9wZXJhdG9yIE9wZXJhdG9yCisJSGlMaW5rIHJlc29sdkVycm9yIEVycm9yCisJSGlMaW5rIHJlc29sdklQRXJyb3IgRXJyb3IKKwlIaUxpbmsgcmVzb2x2SVBTcGVjaWFsIFNwZWNpYWwKKworCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJyZXNvbHYiCisKKyIgdmltOiB0cz04IGZ0PXZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcmV4eC52aW0gYi9ydW50aW1lL3N5bnRheC9yZXh4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjRiMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvcmV4eC52aW0KQEAgLTAsMCArMSwxMTMgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglSZXh4CisiIE1haW50YWluZXI6CVRob21hcyBHZXVsaWcgPGdldWxpZ0BuZW50ZWMuZGU+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAyCisiIFVSTDoJCWh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwUGVvcGxlL3ZpbS9zeW50YXgvcmV4eC52aW0KKyIKKyIgU3BlY2lhbCBUaGFua3MgdG8gRGFuIFNoYXJwIDxkd3NoYXJwQGhvdG1haWwuY29tPiBmb3IgY29tbWVudHMgYW5kIGFkZGl0aW9ucworIiAoYW5kIHByb3ZpZGluZyB0aGUgd2Vic3BhY2UpCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyIgQSBLZXl3b3JkIGlzIHRoZSBmaXJzdCBzeW1ib2wgaW4gYSBjbGF1c2UuICBBIGNsYXVzZSBiZWdpbnMgYXQgdGhlIHN0YXJ0CisiIG9mIGEgbGluZSBvciBhZnRlciBhIHNlbWljb2xvbi4gIFRIRU4sIEVMU0UsIE9USEVSV0lTRSwgYW5kIGNvbG9ucyBhcmUgYWx3YXlzCisiIGZvbGxvd2VkIGJ5IGFuIGltcGxpZWQgc2VtaWNvbG9uLgorc3luIG1hdGNoIHJleHhDbGF1c2UgIlwoXlx8O1x8Olx8dGhlbiBcfGVsc2UgXHxvdGhlcndpc2UgXClccypcd1wrIiBjb250YWlucz1BTEwKKworIiBDb25zaWRlcmVkIGtleXdvcmRzIHdoZW4gdXNlZCB0b2dldGhlciBpbiBhIHBocmFzZSBhbmQgYmVnaW4gYSBjbGF1c2UKK3N5biBtYXRjaCByZXh4S2V5d29yZCBjb250YWluZWQgIlw8c2lnbmFsXCggb24gXChlcnJvclx8ZmFpbHVyZVx8aGFsdFx8bm90cmVhZHlcfG5vdmFsdWVcfHN5bnRheFx8bG9zdGRpZ2l0c1wpXChcc1wrbmFtZVwpXD1cKVw9XD4iCitzeW4gbWF0Y2ggcmV4eEtleXdvcmQgY29udGFpbmVkICJcPHNpZ25hbCBvZmYgXChlcnJvclx8ZmFpbHVyZVx8aGFsdFx8bm90cmVhZHlcfG5vdmFsdWVcfHN5bnRheFx8bG9zdGRpZ2l0c1wpXD4iCitzeW4gbWF0Y2ggcmV4eEtleXdvcmQgY29udGFpbmVkICJcPGNhbGwgb2ZmIFwoZXJyb3JcfGZhaWx1cmVcfGhhbHRcfG5vdHJlYWR5XClcPiIKK3N5biBtYXRjaCByZXh4S2V5d29yZCBjb250YWluZWQgIlw8cGFyc2UgXCh1cHBlciBcKVw9XChhcmdcfGxpbmVpblx8cHVsbFx8c291cmNlXHx2YXJcfHZhbHVlXHx2ZXJzaW9uXClcPiIKK3N5biBtYXRjaCByZXh4S2V5d29yZCBjb250YWluZWQgIlw8bnVtZXJpYyBcKGRpZ2l0c1x8Zm9ybSBcKHNjaWVudGlmaWNcfGVuZ2luZWVyaW5nXHx2YWx1ZVwpXHxmdXp6XClcPiIKK3N5biBtYXRjaCByZXh4S2V5d29yZCBjb250YWluZWQgIlw8XChhZGRyZXNzXHx0cmFjZVwpXCggdmFsdWVcKVw9XD4iCitzeW4gbWF0Y2ggcmV4eEtleXdvcmQgY29udGFpbmVkICJcPHByb2NlZHVyZVwoIGV4cG9zZVwpXD1cPiIKK3N5biBtYXRjaCByZXh4S2V5d29yZCBjb250YWluZWQgIlw8ZG9cKCBmb3JldmVyXClcPVw+IgorCisiIEFub3RoZXIga2V5d29yZCBwaHJhc2UsIHNlcGFyYXRlZCB0byBhaWQgaGlnaGxpZ2h0aW5nIGluIHJleHhGdW5jdGlvbgorc3luIG1hdGNoIHJleHhLZXl3b3JkMiBjb250YWluZWQgIlw8Y2FsbFwoIG9uIFwoZXJyb3JcfGZhaWx1cmVcfGhhbHRcfG5vdHJlYWR5XClcKFxzXCtuYW1lXClcPVwpXD1cPiIKKworIiBDb25zaWRlcmVkIGtleXdvcmRzIHdoZW4gdGhleSBiZWdpbiBhIGNsYXVzZQorc3luIG1hdGNoIHJleHhLZXl3b3JkIGNvbnRhaW5lZCAiXDxcKGFyZ1x8ZHJvcFx8ZW5kXHxleGl0XHxpZlx8aW50ZXJwcmV0XHxpdGVyYXRlXHxsZWF2ZVx8bm9wXClcPiIKK3N5biBtYXRjaCByZXh4S2V5d29yZCBjb250YWluZWQgIlw8XChvcHRpb25zXHxwdWxsXHxwdXNoXHxxdWV1ZVx8cmV0dXJuXHxzYXlcfHNlbGVjdFx8dHJhY2VcKVw+IgorCisiIENvbmRpdGlvbmFsIHBocmFzZXMKK3N5biBtYXRjaCByZXh4Q29uZGl0aW9uYWwgIlwoXlxzKlx8IFwpXCh0b1x8YnlcfGZvclx8dW50aWxcfHdoaWxlXHx0aGVuXHx3aGVuXHxvdGhlcndpc2VcfGVsc2VcKVwoIFx8XHMqJFwpIiBjb250YWlucz1BTExCVVQscmV4eENvbmRpdGlvbmFsCitzeW4gbWF0Y2ggcmV4eENvbmRpdGlvbmFsIGNvbnRhaW5lZCAiXDxcKHRvXHxieVx8Zm9yXHx1bnRpbFx8d2hpbGVcfHRoZW5cfHdoZW5cfGVsc2VcfG90aGVyd2lzZVwpXD4iCisKKyIgQXNzaWdubWVudHMgLS0gYSBrZXl3b3JkIGZvbGxvd2VkIGJ5IGFuIGVxdWFsIHNpZ24gYmVjb21lcyBhIHZhcmlhYmxlCitzeW4gbWF0Y2ggcmV4eEFzc2lnbiAiXDxcd1wrXHMqPVxzKiIgY29udGFpbnM9cmV4eFNwZWNpYWxWYXJpYWJsZQorCisiIEZ1bmN0aW9ucy9Qcm9jZWR1cmVzCitzeW4gbWF0Y2ggcmV4eEZ1bmN0aW9uCSJcPFxoXHcqXCgvXCpccypcKi9cKSooIm1lPWUtMSBjb250YWlucz1yZXh4Q29tbWVudCxyZXh4Q29uZGl0aW9uYWwscmV4eEtleXdvcmQKK3N5biBtYXRjaCByZXh4RnVuY3Rpb24JIlw8XChhcmdcfHRyYWNlXClcKC9cKlxzKlwqL1wpKigibWU9ZS0xCitzeW4gbWF0Y2ggcmV4eEZ1bmN0aW9uCSJcPGNhbGxcKCBvbiBcKGVycm9yXHxmYWlsdXJlXHxoYWx0XHxub3RyZWFkeVwpXChcc1wrbmFtZVwpXD1cKVw9XD5cc1wrXHdcK1w+IiBjb250YWlucz1yZXh4S2V5d29yZDIKKworIiBTdHJpbmcgY29uc3RhbnRzCitzeW4gcmVnaW9uIHJleHhTdHJpbmcJICBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwnKyBlbmQ9KyIrCitzeW4gcmVnaW9uIHJleHhTdHJpbmcJICBzdGFydD0rJysgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KycrCitzeW4gbWF0Y2ggIHJleHhDaGFyYWN0ZXIgICsiJ1teXFxdJyIrCisKKyIgQ2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcworc3luIHJlZ2lvbiByZXh4UGFyZW4gdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULHJleHhQYXJlbkVycm9yLHJleHhUb2RvLHJleHhVc2VyTGFiZWwscmV4eEtleXdvcmQKK3N5biBtYXRjaCByZXh4UGFyZW5FcnJvcgkgIikiCitzeW4gbWF0Y2ggcmV4eEluUGFyZW4JCSJbXFxbXFxde31dIgorCisiIENvbW1lbnRzCitzeW4gcmVnaW9uIHJleHhDb21tZW50CQlzdGFydD0iL1wqIiBlbmQ9IlwqLyIgY29udGFpbnM9cmV4eFRvZG8scmV4eENvbW1lbnQKK3N5biBtYXRjaCAgcmV4eENvbW1lbnRFcnJvcgkiXCovIgorCitzeW4ga2V5d29yZCByZXh4VG9kbyBjb250YWluZWQJVE9ETyBGSVhNRSBYWFgKKworIiBIaWdobGlnaHQgVXNlciBMYWJlbHMKK3N5biBtYXRjaCByZXh4VXNlckxhYmVsCQkgIlw8XElcaSpccyo6Im1lPWUtMQorCisiIFNwZWNpYWwgVmFyaWFibGVzCitzeW4ga2V5d29yZCByZXh4U3BlY2lhbFZhcmlhYmxlICBzaWdsIHJjIHJlc3VsdAorc3luIG1hdGNoICAgcmV4eENvbXBvdW5kVmFyaWFibGUgIlw8XHdcK1wuXHcqXD4iCisKK2lmICFleGlzdHMoInJleHhfbWlubGluZXMiKQorICBsZXQgcmV4eF9taW5saW5lcyA9IDEwCitlbmRpZgorZXhlYyAic3luIHN5bmMgY2NvbW1lbnQgcmV4eENvbW1lbnQgbWlubGluZXM9IiAuIHJleHhfbWlubGluZXMKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcmV4eF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9yZXh4X3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHJleHhVc2VyTGFiZWwJCUZ1bmN0aW9uCisgIEhpTGluayByZXh4Q2hhcmFjdGVyCQlDaGFyYWN0ZXIKKyAgSGlMaW5rIHJleHhQYXJlbkVycm9yCQlyZXh4RXJyb3IKKyAgSGlMaW5rIHJleHhJblBhcmVuCQlyZXh4RXJyb3IKKyAgSGlMaW5rIHJleHhDb21tZW50RXJyb3IJcmV4eEVycm9yCisgIEhpTGluayByZXh4RXJyb3IJCUVycm9yCisgIEhpTGluayByZXh4S2V5d29yZAkJU3RhdGVtZW50CisgIEhpTGluayByZXh4S2V5d29yZDIJCXJleHhLZXl3b3JkCisgIEhpTGluayByZXh4RnVuY3Rpb24JCUZ1bmN0aW9uCisgIEhpTGluayByZXh4U3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHJleHhDb21tZW50CQlDb21tZW50CisgIEhpTGluayByZXh4VG9kbwkJVG9kbworICBIaUxpbmsgcmV4eFNwZWNpYWxWYXJpYWJsZQlTcGVjaWFsCisgIEhpTGluayByZXh4Q29uZGl0aW9uYWwJcmV4eEtleXdvcmQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicmV4eCIKKworInZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcmliLnZpbSBiL3J1bnRpbWUvc3ludGF4L3JpYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI5ZjJiMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3JpYi52aW0KQEAgLTAsMCArMSw3MyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVJlbmRlcm1hbiBJbnRlcmZhY2UgQnl0ZXN0cmVhbQorIiBNYWludGFpbmVyOglBbmRyZXcgQnJvbWFnZSA8YWpiQHNwYW1jb3AubmV0PgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMTEKKyIKKworIiBSZW1vdmUgYW55IG9sZCBzeW50YXggc3R1ZmYgaGFuZ2luZyBhcm91bmQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3luIGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBtYXRjaAorCisiIENvbW1lbnRzCitzeW4gbWF0Y2ggICByaWJMaW5lQ29tbWVudCAgICAgICIjLiokIgorc3luIG1hdGNoICAgcmliU3RydWN0dXJlQ29tbWVudCAiIyMuKiQiCisKK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoICAgcmliQ29tbWFuZAkgICAgICAgL1tBLVpdW2EtekEtWl0qLworc3luIGNhc2UgbWF0Y2gKKworc3luIHJlZ2lvbiAgcmliU3RyaW5nCSAgICAgICBzdGFydD0vIi8gc2tpcD0vXFwiLyBlbmQ9LyIvCisKK3N5biBtYXRjaCAgIHJpYlN0cnVjdHVyZQkiW0EtWl1bYS16QS1aXSpCZWdpblw+XHxbQS1aXVthLXpBLVpdKkVuZCIKK3N5biByZWdpb24gIHJpYlNlY3Rpb25Gb2xkCXN0YXJ0PSJGcmFtZUJlZ2luIiBlbmQ9IkZyYW1lRW5kIiBmb2xkIHRyYW5zcGFyZW50IGtlZXBlbmQgZXh0ZW5kCitzeW4gcmVnaW9uICByaWJTZWN0aW9uRm9sZAlzdGFydD0iV29ybGRCZWdpbiIgZW5kPSJXb3JsZEVuZCIgZm9sZCB0cmFuc3BhcmVudCBrZWVwZW5kIGV4dGVuZAorc3luIHJlZ2lvbiAgcmliU2VjdGlvbkZvbGQJc3RhcnQ9IlRyYW5zZm9ybUJlZ2luIiBlbmQ9IlRyYW5zZm9ybUVuZCIgZm9sZCB0cmFuc3BhcmVudCBrZWVwZW5kIGV4dGVuZAorc3luIHJlZ2lvbiAgcmliU2VjdGlvbkZvbGQJc3RhcnQ9IkF0dHJpYnV0ZUJlZ2luIiBlbmQ9IkF0dHJpYnV0ZUVuZCIgZm9sZCB0cmFuc3BhcmVudCBrZWVwZW5kIGV4dGVuZAorc3luIHJlZ2lvbiAgcmliU2VjdGlvbkZvbGQJc3RhcnQ9Ik1vdGlvbkJlZ2luIiBlbmQ9Ik1vdGlvbkVuZCIgZm9sZCB0cmFuc3BhcmVudCBrZWVwZW5kIGV4dGVuZAorc3luIHJlZ2lvbiAgcmliU2VjdGlvbkZvbGQJc3RhcnQ9IlNvbGlkQmVnaW4iIGVuZD0iU29saWRFbmQiIGZvbGQgdHJhbnNwYXJlbnQga2VlcGVuZCBleHRlbmQKK3N5biByZWdpb24gIHJpYlNlY3Rpb25Gb2xkCXN0YXJ0PSJPYmplY3RCZWdpbiIgZW5kPSJPYmplY3RFbmQiIGZvbGQgdHJhbnNwYXJlbnQga2VlcGVuZCBleHRlbmQKKworc3luIHN5bmMgICAgZnJvbXN0YXJ0CisKKyJpbnRlZ2VyIG51bWJlciwgb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdpdGhvdXQgYSBkb3QgYW5kIHdpdGggImYiLgorc3luIGNhc2UgaWdub3JlCitzeW4gbWF0Y2gJcmliTnVtYmVycwkgIGRpc3BsYXkgdHJhbnNwYXJlbnQgIlstXVw9XDxcZFx8XC5cZCIgY29udGFpbnM9cmliTnVtYmVyLHJpYkZsb2F0CitzeW4gbWF0Y2gJcmliTnVtYmVyCSAgZGlzcGxheSBjb250YWluZWQgIlstXVw9XGRcK1w+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2gJcmliRmxvYXQJICBkaXNwbGF5IGNvbnRhaW5lZCAiWy1dXD1cZFwrXC5cZCpcKGVbLStdXD1cZFwrXClcPSIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2gJcmliRmxvYXQJICBkaXNwbGF5IGNvbnRhaW5lZCAiWy1dXD1cLlxkXCtcKGVbLStdXD1cZFwrXClcPVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aG91dCBkb3QsIHdpdGggZXhwb25lbnQKK3N5biBtYXRjaAlyaWJGbG9hdAkgIGRpc3BsYXkgY29udGFpbmVkICJbLV1cPVxkXCtlWy0rXVxkXCtcPiIKK3N5biBjYXNlIG1hdGNoCisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9yaWJfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfcmliX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHJpYlN0cnVjdHVyZQkJU3RydWN0dXJlCisgIEhpTGluayByaWJDb21tYW5kCQlTdGF0ZW1lbnQKKworICBIaUxpbmsgcmliU3RydWN0dXJlQ29tbWVudAlTcGVjaWFsQ29tbWVudAorICBIaUxpbmsgcmliTGluZUNvbW1lbnQJCUNvbW1lbnQKKworICBIaUxpbmsgcmliU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHJpYk51bWJlcgkJTnVtYmVyCisgIEhpTGluayByaWJGbG9hdAkJRmxvYXQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kCisKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicmliIgorCisiIE9wdGlvbnMgZm9yIHZpOiB0cz04IHN3PTIgc3RzPTIgbm93cmFwIG5vZXhwYW5kdGFiIGZ0PXZpbQpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcm5jLnZpbSBiL3J1bnRpbWUvc3ludGF4L3JuYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3OGM4YwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3JuYy52aW0KQEAgLTAsMCArMSw5NCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBSZWxheCBORyBjb21wYWN0IHN5bnRheAorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vc3ludGF4L3BjcC9ybmMvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDUtMjIKKyIgYXJjaC10YWc6CSAgICAwNjFlZTBhMi05ZWZhLTRlMmEtYjFhOS0xNGNmNTE3MmQ2NDUKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgU2V0IGlza2V5d29yZCBzaW5jZSB3ZSBuZWVkIGAtJyAoYW5kIHBvdGVudGlhbGx5IG90aGVycykgaW4ga2V5d29yZHMuCisiIEZvciB2ZXJzaW9uIDUueDogU2V0IGl0IGdsb2JhbGx5CisiIEZvciB2ZXJzaW9uIDYueDogU2V0IGl0IGxvY2FsbHkKK2lmIHZlcnNpb24gPj0gNjAwCisgIGNvbW1hbmQgLW5hcmdzPTEgU2V0SXNrIHNldGxvY2FsIGlza2V5d29yZD08YXJncz4KK2Vsc2UKKyAgY29tbWFuZCAtbmFyZ3M9MSBTZXRJc2sgc2V0IGlza2V5d29yZD08YXJncz4KK2VuZGlmCitTZXRJc2sgQCw0OC01NyxfLC0sLgorZGVsY29tbWFuZCBTZXRJc2sKKworIiBUb2RvCitzeW4ga2V5d29yZCBybmNUb2RvCSAgICBjb250YWluZWQgVE9ETyBGSVhNRSBYWFggTk9URQorCisiIENvbW1lbnRzCitzeW4gcmVnaW9uICBybmNDb21tZW50CSAgICBtYXRjaGdyb3VwPXJuY0NvbW1lbnQgc3RhcnQ9J15ccyojJyBlbmQ9JyQnIGNvbnRhaW5zPXJuY1RvZG8KKworIiBPcGVyYXRvcnMKK3N5biBtYXRjaCAgIHJuY09wZXJhdG9yCSAgICAnWy18LCYrPyp+XScKK3N5biBtYXRjaCAgIHJuY09wZXJhdG9yCSAgICAnXCUofCZcKVw9PScKK3N5biBtYXRjaCAgIHJuY09wZXJhdG9yCSAgICAnPj4nCisKKyIgTmFtZXNwYWNlcworc3luIG1hdGNoICAgcm5jTmFtZXNwYWNlICAgICdcPFxrXCs6JworCisiIFF1b3RlZCBJZGVudGlmaWVyCitzeW4gbWF0Y2ggICBybmNRdW90ZWQJICAgICdcXFxrXCtcPicKKworIiBTcGVjaWFsIENoYXJhY3RlcnMKK3N5biBtYXRjaCAgIHJuY1NwZWNpYWwJICAgICdcXHh7XHhcK30nCisKKyIgQW5ub3RhdGlvbnMKK3N5biByZWdpb24gQW5ub3RhdGlvbgkgICAgdHJhbnNwYXJlbnQgc3RhcnQ9J1xbJyBlbmQ9J1xdJyBjb250YWlucz1BTExCVVQscm5jQ29tbWVudCxybmNUb2RvCisKKyIgTGl0ZXJhbHMKK3N5biByZWdpb24gIHJuY0xpdGVyYWwJICAgIG1hdGNoZ3JvdXA9cm5jTGl0ZXJhbCBvbmVsaW5lIHN0YXJ0PSsiKyBlbmQ9KyIrIGNvbnRhaW5zPXJuY1NwZWNpYWwKK3N5biByZWdpb24gIHJuY0xpdGVyYWwJICAgIG1hdGNoZ3JvdXA9cm5jTGl0ZXJhbCBvbmVsaW5lIHN0YXJ0PSsnKyBlbmQ9KycrCitzeW4gcmVnaW9uICBybmNMaXRlcmFsCSAgICBtYXRjaGdyb3VwPXJuY0xpdGVyYWwgc3RhcnQ9KyIiIisgZW5kPSsiIiIrIGNvbnRhaW5zPXJuY1NwZWNpYWwKK3N5biByZWdpb24gIHJuY0xpdGVyYWwJICAgIG1hdGNoZ3JvdXA9cm5jTGl0ZXJhbCBzdGFydD0rJycnKyBlbmQ9KycnJysKKworIiBEZWxpbWl0ZXJzCitzeW4gbWF0Y2ggICBybmNEZWxpbWl0ZXIgICAgJ1t7fSwoKV0nCisKKyIgS2V5d29yZHMKK3N5biBrZXl3b3JkIHJuY0tleXdvcmQJICAgIGRhdGF0eXBlcyBkZWZhdWx0IGRpdiBlbXB0eSBleHRlcm5hbCBncmFtbWFyCitzeW4ga2V5d29yZCBybmNLZXl3b3JkCSAgICBpbmNsdWRlIGluaGVyaXQgbGlzdCBtaXhlZCBuYW1lIG5hbWVzcGFjZQorc3luIGtleXdvcmQgcm5jS2V5d29yZAkgICAgbm90QWxsb3dlZCBwYXJlbnQgc3RhcnQgc3RyaW5nIHRleHQgdG9rZW4KKworIiBJZGVudGlmaWVycworc3luIG1hdGNoICAgcm5jSWRlbnRpZmllciAgICdca1wrXF9zKlwlKD1cfCY9XHx8PVwpXEA9JyBuZXh0Z3JvdXA9cm5jT3BlcmF0b3IKK3N5biBrZXl3b3JkIHJuY0tleXdvcmQJICAgIG5leHRncm91cD1ybmNJZE5hbWUgc2tpcHdoaXRlIHNraXBlbXB0eSBlbGVtZW50IGF0dHJpYnV0ZQorc3luIG1hdGNoICAgcm5jSWRlbnRpZmllciAgIGNvbnRhaW5lZCAnXGtcKycKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcm5jX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3JuY19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBybmNUb2RvCVRvZG8KKyAgSGlMaW5rIHJuY0NvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgcm5jT3BlcmF0b3IJT3BlcmF0b3IKKyAgSGlMaW5rIHJuY05hbWVzcGFjZQlJZGVudGlmaWVyCisgIEhpTGluayBybmNRdW90ZWQJU3BlY2lhbAorICBIaUxpbmsgcm5jU3BlY2lhbAlTcGVjaWFsQ2hhcgorICBIaUxpbmsgcm5jTGl0ZXJhbAlTdHJpbmcKKyAgSGlMaW5rIHJuY0RlbGltaXRlcglEZWxpbWl0ZXIKKyAgSGlMaW5rIHJuY0tleXdvcmQJS2V5d29yZAorICBIaUxpbmsgcm5jSWRlbnRpZmllcglJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInJuYyIKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcm9ib3RzLnZpbSBiL3J1bnRpbWUvc3ludGF4L3JvYm90cy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2NjI4YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3JvYm90cy52aW0KQEAgLTAsMCArMSw2OSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CSJSb2JvdHMudHh0IiBmaWxlcworIiBSb2JvdHMudHh0IGZpbGVzIGluZGljYXRlIHRvIFdXVyByb2JvdHMgd2hpY2ggcGFydHMgb2YgYSB3ZWIgc2l0ZSBzaG91bGQgbm90IGJlIGFjY2Vzc2VkLgorIiBNYWludGFpbmVyOglEb21pbmlxdWUgU3TpcGhhbiAoZG9taW5pcXVlQG1nZ2VuLmNvbSkKKyIgVVJMOiBodHRwOi8vd3d3Lm1nZ2VuLmNvbS92aW0vc3ludGF4L3JvYm90cy56aXAKKyIgTGFzdCBjaGFuZ2U6CTIwMDEgTWF5IDA5CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKKworIiBzaHV0IGNhc2Ugb2ZmCitzeW4gY2FzZSBpZ25vcmUKKworIiBDb21tZW50CitzeW4gbWF0Y2ggIHJvYm90c0NvbW1lbnQJIiMuKiQiIGNvbnRhaW5zPXJvYm90c1VybCxyb2JvdHNNYWlsLHJvYm90c1N0cmluZworCisiIFN0YXIgKiAobWVhbnMgYWxsIHNwaWRlcnMpCitzeW4gbWF0Y2ggIHJvYm90c1N0YXIJCSJcKiIKKworIiA6CitzeW4gbWF0Y2ggIHJvYm90c0RlbGltaXRlcgkiOiIKKworCisiIFRoZSBrZXl3b3JkcworIiBVc2VyLWFnZW50CitzeW4gbWF0Y2ggIHJvYm90c0FnZW50CQkiXltVdV1bU3NdW0VlXVtScl1cLVtBYV1bR2ddW0VlXVtObl1bVHRdIgorIiBEaXNhbGxvdworc3luIG1hdGNoICByb2JvdHNEaXNhbGxvdwkiXltEZF1bSWldW1NzXVtBYV1bTGxdW0xsXVtPb11bV3ddIgorCisiIERpc2FsbG93OiBvciBVc2VyLUFnZW50OiBhbmQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgYmVmb3JlIGFuIGV2ZW50dWFsIGNvbW1lbnQKK3N5bnQgbWF0Y2ggcm9ib3RzTGluZQkJIlwoXltVdV1bU3NdW0VlXVtScl1cLVtBYV1bR2ddW0VlXVtObl1bVHRdXHxeW0RkXVtJaV1bU3NdW0FhXVtMbF1bTGxdW09vXVtXd11cKTpbXiNdKiIJY29udGFpbnM9cm9ib3RzQWdlbnQscm9ib3RzRGlzYWxsb3cscm9ib3RzU3Rhcixyb2JvdHNEZWxpbWl0ZXIKKworIiBTb21lIGZyZXF1ZW50IHRoaW5ncyBpbiBjb21tZW50cworc3luIG1hdGNoICByb2JvdHNVcmwJCSJodHRwW3NdXD06Ly9cUyoiCitzeW4gbWF0Y2ggIHJvYm90c01haWwJCSJcUypAXFMqIgorc3luIHJlZ2lvbiByb2JvdHNTdHJpbmcJCXN0YXJ0PStMXD0iKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisKKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3JvYm9zX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3JvYm90c19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayByb2JvdHNDb21tZW50CQlDb21tZW50CisgIEhpTGluayByb2JvdHNBZ2VudAkJVHlwZQorICBIaUxpbmsgcm9ib3RzRGlzYWxsb3cJCVN0YXRlbWVudAorICBIaUxpbmsgcm9ib3RzTGluZQkJU3BlY2lhbAorICBIaUxpbmsgcm9ib3RzU3RhcgkJT3BlcmF0b3IKKyAgSGlMaW5rIHJvYm90c0RlbGltaXRlcglEZWxpbWl0ZXIKKyAgSGlMaW5rIHJvYm90c1VybAkJU3RyaW5nCisgIEhpTGluayByb2JvdHNNYWlsCQlTdHJpbmcKKyAgSGlMaW5rIHJvYm90c1N0cmluZwkJU3RyaW5nCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicm9ib3RzIgorCisiIHZpbTogdHM9OCBzdz0yCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3JwY2dlbi52aW0gYi9ydW50aW1lL3N5bnRheC9ycGNnZW4udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZjg3ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9ycGNnZW4udmltCkBAIC0wLDAgKzEsNjMgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglycGNnZW4KKyIgTWFpbnRhaW5lcjoJRHIuIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiA8TmRyT2NoaXBTQFBjYW1wYmVsbEFmYW1pbHkuTWJpej4KKyIgTGFzdCBDaGFuZ2U6CU5vdiAxOCwgMjAwMgorIiBWZXJzaW9uOgk3CisiIFVSTDoJaHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI3ZpbWxpbmtzX3N5bnRheAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgUmVhZCB0aGUgQyBzeW50YXggdG8gc3RhcnQgd2l0aAoraWYgdmVyc2lvbiA8IDYwMAorICBzb3VyY2UgPHNmaWxlPjpwOmgvYy52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2MudmltCitlbmRpZgorCitzeW4ga2V5d29yZCBycGNQcm9ncmFtCXByb2dyYW0JCQkJc2tpcG5sIHNraXB3aGl0ZSBuZXh0Z3JvdXA9cnBjUHJvZ05hbWUKK3N5biBtYXRjaCAgIHJwY1Byb2dOYW1lCWNvbnRhaW5lZAkiXDxcaVxJKlw+Iglza2lwbmwgc2tpcHdoaXRlIG5leHRncm91cD1ycGNQcm9nWm9uZQorc3luIHJlZ2lvbiAgcnBjUHJvZ1pvbmUJY29udGFpbmVkCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJ7IiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9In1ccyo9XHMqXChcZFwrXHwweFsyM11ceFx7N31cKVxzKjsibWU9ZS0xIGNvbnRhaW5zPXJwY1ZlcnNpb24sY0NvbW1lbnQscnBjUHJvZ05tYnJFcnIKK3N5biBrZXl3b3JkIHJwY1ZlcnNpb24JY29udGFpbmVkCXZlcnNpb24JCXNraXBubCBza2lwd2hpdGUgbmV4dGdyb3VwPXJwY1ZlcnNOYW1lCitzeW4gbWF0Y2ggICBycGNWZXJzTmFtZQljb250YWluZWQJIlw8XGlcSSpcPiIJc2tpcG5sIHNraXB3aGl0ZSBuZXh0Z3JvdXA9cnBjVmVyc1pvbmUKK3N5biByZWdpb24gIHJwY1ZlcnNab25lCWNvbnRhaW5lZAltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0ieyIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSJ9XHMqPVxzKlxkXCtccyo7Im1lPWUtMSBjb250YWlucz1jVHlwZSxjU3RydWN0dXJlLGNTdG9yYWdlQ2xhc3MscnBjRGVjbCxycGNQcm9jTm1icixjQ29tbWVudAorc3luIGtleXdvcmQgcnBjRGVjbAljb250YWluZWQJc3RyaW5nCitzeW4gbWF0Y2ggICBycGNQcm9jTm1icgljb250YWluZWQJIj1ccypcZFwrOyJtZT1lLTEKK3N5biBtYXRjaCAgIHJwY1Byb2dObWJyRXJyIGNvbnRhaW5lZAkiPVxzKjB4W14yM11ceCoibXM9cysxCitzeW4gbWF0Y2ggICBycGNQYXNzVGhydQkJCSJeXHMqJS4qJCIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcnBjZ2VuX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3JwY2dlbl9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBycGNQcm9nTmFtZQlycGNOYW1lCisgIEhpTGluayBycGNQcm9ncmFtCXJwY1N0YXRlbWVudAorICBIaUxpbmsgcnBjVmVyc05hbWUJcnBjTmFtZQorICBIaUxpbmsgcnBjVmVyc2lvbglycGNTdGF0ZW1lbnQKKworICBIaUxpbmsgcnBjRGVjbAljVHlwZQorICBIaUxpbmsgcnBjUGFzc1RocnUJY0NvbW1lbnQKKworICBIaUxpbmsgcnBjTmFtZQlTcGVjaWFsCisgIEhpTGluayBycGNQcm9jTm1icglEZWxpbWl0ZXIKKyAgSGlMaW5rIHJwY1Byb2dObWJyRXJyCUVycm9yCisgIEhpTGluayBycGNTdGF0ZW1lbnQJU3RhdGVtZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInJwY2dlbiIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3JwbC52aW0gYi9ydW50aW1lL3N5bnRheC9ycGwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTA0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9ycGwudmltCkBAIC0wLDAgKzEsNDkxIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJUlBMLzIKKyIgVmVyc2lvbjoJMC4xNS4xNSBhZ2FpbnN0IFJQTC8yIHZlcnNpb24gNC4wMHByZTdpCisiIExhc3QgQ2hhbmdlOgkyMDAzIGF1Z3VzdCAyNAorIiBNYWludGFpbmVyOglKb+tsIEJFUlRSQU5EIDxycGwyQGZyZWUuZnI+CisiIFVSTDoJCWh0dHA6Ly93d3cubWFrYWxpcy5mci9+YmVydHJhbmQvcnBsMi9kb3dubG9hZC92aW0vaW5kZW50L3JwbC52aW0KKyIgQ3JlZGl0czoJTm90aGluZworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgS2V5d29yZCBjaGFyYWN0ZXJzIChub3QgdXNlZCkKKyIgc2V0IGlza2V5d29yZD0zMy0xMjcKKworIiBDYXNlIHNlbnNpdGl2ZQorc3ludGF4IGNhc2UgbWF0Y2gKKworIiBDb25zdGFudHMKK3N5bnRheCBtYXRjaCBycGxDb25zdGFudAkgICAiXCheXHxcc1wrXClcKGVcfGlcKVx6ZVwoJFx8XHNcK1wpIgorCisiIEFueSBiaW5hcnkgbnVtYmVyCitzeW50YXggbWF0Y2ggcnBsQmluYXJ5RXJyb3IJICAgIlwoXlx8XHNcK1wpI1xzKlxTXCtiXHplIgorc3ludGF4IG1hdGNoIHJwbEJpbmFyeQkJICAgIlwoXlx8XHNcK1wpI1xzKlswMV1cK2JcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxPY3RhbEVycm9yCSAgICJcKF5cfFxzXCtcKSNccypcU1wrb1x6ZSIKK3N5bnRheCBtYXRjaCBycGxPY3RhbAkJICAgIlwoXlx8XHNcK1wpI1xzKlxvXCtvXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsRGVjaW1hbEVycm9yCSAgICJcKF5cfFxzXCtcKSNccypcU1wrZFx6ZSIKK3N5bnRheCBtYXRjaCBycGxEZWNpbWFsCQkgICAiXCheXHxcc1wrXCkjXHMqXGRcK2RcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxIZXhhZGVjaW1hbEVycm9yICAgIlwoXlx8XHNcK1wpI1xzKlxTXCtoXHplIgorc3ludGF4IG1hdGNoIHJwbEhleGFkZWNpbWFsCSAgICJcKF5cfFxzXCtcKSNccypceFwraFx6ZVwoJFx8XHNcK1wpIgorCisiIENhc2UgdW5zZW5zaXRpdmUKK3N5bnRheCBjYXNlIGlnbm9yZQorCitzeW50YXggbWF0Y2ggcnBsQ29udHJvbAkJICAgIlwoXlx8XHNcK1wpYWJvcnRcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxDb250cm9sCQkgICAiXCheXHxcc1wrXClraWxsXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsQ29udHJvbAkJICAgIlwoXlx8XHNcK1wpY29udFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbENvbnRyb2wJCSAgICJcKF5cfFxzXCtcKWhhbHRcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxDb250cm9sCQkgICAiXCheXHxcc1wrXCljbWxmXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsQ29udHJvbAkJICAgIlwoXlx8XHNcK1wpc3N0XHplXCgkXHxcc1wrXCkiCisKK3N5bnRheCBtYXRjaCBycGxDb25zdGFudAkgICAiXCheXHxcc1wrXClwaVx6ZVwoJFx8XHNcK1wpIgorCitzeW50YXggbWF0Y2ggcnBsU3RhdGVtZW50CSAgICJcKF5cfFxzXCtcKXJldHVyblx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0YXRlbWVudAkgICAiXCheXHxcc1wrXClsYXN0XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RhdGVtZW50CSAgICJcKF5cfFxzXCtcKXN5emV2YWxcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdGF0ZW1lbnQJICAgIlwoXlx8XHNcK1wpd2FpdFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0YXRlbWVudAkgICAiXCheXHxcc1wrXCl0eXBlXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RhdGVtZW50CSAgICJcKF5cfFxzXCtcKWtpbmRcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdGF0ZW1lbnQJICAgIlwoXlx8XHNcK1wpZXZhbFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0YXRlbWVudAkgICAiXCheXHxcc1wrXCl1c2VcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdGF0ZW1lbnQJICAgIlwoXlx8XHNcK1wpcmVtb3ZlXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RhdGVtZW50CSAgICJcKF5cfFxzXCtcKWV4dGVybmFsXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RhdGVtZW50CSAgICJcKF5cfFxzXCtcKWR1cFwoWzJuXVx8XClcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdGF0ZW1lbnQJICAgIlwoXlx8XHNcK1wpZHJvcFwoWzJuXVx8XClcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdGF0ZW1lbnQJICAgIlwoXlx8XHNcK1wpZGVwdGhcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdGF0ZW1lbnQJICAgIlwoXlx8XHNcK1wpcm9sbFwoZFx8XClcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdGF0ZW1lbnQJICAgIlwoXlx8XHNcK1wpcGlja1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0YXRlbWVudAkgICAiXCheXHxcc1wrXClyb3RcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdGF0ZW1lbnQJICAgIlwoXlx8XHNcK1wpc3dhcFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0YXRlbWVudAkgICAiXCheXHxcc1wrXClvdmVyXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RhdGVtZW50CSAgICJcKF5cfFxzXCtcKWNsZWFyXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RhdGVtZW50CSAgICJcKF5cfFxzXCtcKXdhcnJhbnR5XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RhdGVtZW50CSAgICJcKF5cfFxzXCtcKWNvcHlyaWdodFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0YXRlbWVudAkgICAiXCheXHxcc1wrXCljb252ZXJ0XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RhdGVtZW50CSAgICJcKF5cfFxzXCtcKWRhdGVcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdGF0ZW1lbnQJICAgIlwoXlx8XHNcK1wpdGltZVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0YXRlbWVudAkgICAiXCheXHxcc1wrXCltZW1cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdGF0ZW1lbnQJICAgIlwoXlx8XHNcK1wpY2xtZlx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0YXRlbWVudAkgICAiXCheXHxcc1wrXCktPm51bVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0YXRlbWVudAkgICAiXCheXHxcc1wrXCloZWxwXHplXCgkXHxcc1wrXCkiCisKK3N5bnRheCBtYXRjaCBycGxTdG9yYWdlCQkgICAiXCheXHxcc1wrXClnZXRcKGlcfHJcfGNcfFwpXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RvcmFnZQkJICAgIlwoXlx8XHNcK1wpcHV0XChpXHxyXHxjXHxcKVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0b3JhZ2UJCSAgICJcKF5cfFxzXCtcKXJjbFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0b3JhZ2UJCSAgICJcKF5cfFxzXCtcKXB1cmdlXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RvcmFnZQkJICAgIlwoXlx8XHNcK1wpc2ludlx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0b3JhZ2UJCSAgICJcKF5cfFxzXCtcKXNuZWdcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdG9yYWdlCQkgICAiXCheXHxcc1wrXClzY29ualx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0b3JhZ2UJCSAgICJcKF5cfFxzXCtcKXN0ZXFcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxTdG9yYWdlCQkgICAiXCheXHxcc1wrXClyY2VxXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RvcmFnZQkJICAgIlwoXlx8XHNcK1wpdmFyc1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFN0b3JhZ2UJCSAgICJcKF5cfFxzXCtcKWNsdXNyXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsU3RvcmFnZQkJICAgIlwoXlx8XHNcK1wpc3RvXChbKy0vXCpdXHxcKVx6ZVwoJFx8XHNcK1wpIgorCitzeW50YXggbWF0Y2ggcnBsQWxnQ29uZGl0aW9uYWwJICAgIlwoXlx8XHNcK1wpaWZ0XChlXHxcKVx6ZVwoJFx8XHNcK1wpIgorCitzeW50YXggbWF0Y2ggcnBsT3BlcmF0b3IJICAgIlwoXlx8XHNcK1wpYW5kXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsT3BlcmF0b3IJICAgIlwoXlx8XHNcK1wpXCh4XHxcKW9yXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsT3BlcmF0b3IJICAgIlwoXlx8XHNcK1wpbm90XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsT3BlcmF0b3IJICAgIlwoXlx8XHNcK1wpc2FtZVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbE9wZXJhdG9yCSAgICJcKF5cfFxzXCtcKT09XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsT3BlcmF0b3IJICAgIlwoXlx8XHNcK1wpPD1cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxPcGVyYXRvcgkgICAiXCheXHxcc1wrXCk9PFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbE9wZXJhdG9yCSAgICJcKF5cfFxzXCtcKT0+XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsT3BlcmF0b3IJICAgIlwoXlx8XHNcK1wpPj1cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxPcGVyYXRvcgkgICAiXCheXHxcc1wrXCk8Plx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbE9wZXJhdG9yCSAgICJcKF5cfFxzXCtcKT5cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxPcGVyYXRvcgkgICAiXCheXHxcc1wrXCk8XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsT3BlcmF0b3IJICAgIlwoXlx8XHNcK1wpWystXVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbE9wZXJhdG9yCSAgICJcKF5cfFxzXCtcKVsvXCpdXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsT3BlcmF0b3IJICAgIlwoXlx8XHNcK1wpXF5cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxPcGVyYXRvcgkgICAiXCheXHxcc1wrXClcKlwqXHplXCgkXHxcc1wrXCkiCisKK3N5bnRheCBtYXRjaCBycGxCb29sZWFuCQkgICAiXCheXHxcc1wrXCl0cnVlXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsQm9vbGVhbgkJICAgIlwoXlx8XHNcK1wpZmFsc2VcemVcKCRcfFxzXCtcKSIKKworc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClzdG9yZVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClyZWNhbGxcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpXChcfHdmXHx1blwpbG9ja1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClvcGVuXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKWNsb3NlXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKWRlbGV0ZVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXCljcmVhdGVcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpZm9ybWF0XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKXJld2luZFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXCliYWNrc3BhY2VcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpXChcfHJlXCl3cml0ZVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClyZWFkXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKWlucXVpcmVcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpc3luY1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClhcHBlbmRcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpc3VwcHJlc3NcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpc2Vla1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClwclwoMVx8aW50XHxzdFx8c3RjXHxsY2RcfHZhclx8dXNyXHxtZFwpXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKXBhcGVyXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKWNyXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKWVyYXNlXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKWRpc3BcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpaW5wdXRcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpcHJvbXB0XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKWtleVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXCljbGxjZFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClcKFx8cmVcKWRyYXdcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpZHJheFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClpbmRlcFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClkZXBuZFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClyZXNcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpYXhlc1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClsYWJlbFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClwbWluXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKXBtYXhcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpY2VudHJcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpcGVyc2lzdFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXCl0aXRsZVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClcKHNsaWNlXHxhdXRvXHxsb2dcfFwpc2NhbGVcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpZXllcHRcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpXChwXHxzXClwYXJcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpZnVuY3Rpb25cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpcG9sYXJcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpc2NhdHRlclx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClwbG90dGVyXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKXdpcmVmcmFtZVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClwYXJhbWV0cmljXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKXNsaWNlXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKVwqd1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClcKmhcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxSZWFkV3JpdGUJICAgIlwoXlx8XHNcK1wpXCpkXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKVwqc1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXCktPmxjZFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXClsY2QtPlx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbFJlYWRXcml0ZQkgICAiXCheXHxcc1wrXCllZGl0XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsUmVhZFdyaXRlCSAgICJcKF5cfFxzXCtcKXZpc2l0XHplXCgkXHxcc1wrXCkiCisKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpYWJzXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWFyZ1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCljb25qXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXJlXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWltXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKW1hbnRcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpeHBvblx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCljZWlsXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWZhY3RcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpZnBcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpZmxvb3JcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpaW52XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWlwXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKW1heFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCltaW5cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpbW9kXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKW5lZ1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClyZWxheFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClzaWduXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXNxXChcfHJ0XClcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpeHJvb3RcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpY29zXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXNpblx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCl0YW5cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpdGdcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpYVwoXHxyY1wpY29zXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWFcKFx8cmNcKXNpblx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClhdGFuXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWFyY3RnXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoXHxhXCljb3NoXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoXHxhXClzaW5oXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoXHxhXCl0YW5oXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoXHxhcmdcKXRoXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWFyZ1tjc3RdaFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClcKFx8YVwpbG9nXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWxuXChcfDFcKVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClleHBcKFx8bVwpXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXRyblx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCljb25cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpaWRuXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXJkbVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClyc2RcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpY25ybVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCljcm9zc1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClkW2VvXXRcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpW2NyXXN3cFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClyY2lcKGpcfFwpXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoaW5cfGRlXCljclx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCliZXNzZWxcemVcKCRcfFxzXCtcKSIKKworc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClcKFx8Z1wpZWd2bFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClcKFx8Z1wpXChcfGxcfHJcKWVndlx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClybnJtXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoc3RkXHxmaXhcfHNjaVx8ZW5nXClcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpXChyYWRcfGRlZ1wpXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoXHxuXClyYW5kXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXJkelx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClcKFx8aVwpZmZ0XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoZGVjXHxiaW5cfG9jdFx8aGV4XClcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpcmNsZlx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClzdG9mXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVtjc11mXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWNoclx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCludW1cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpcG9zXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXN1Ylx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClzaXplXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoc3RcfHJjXCl3c1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClcKHJcfHNcKVwoclx8bFwpXChcfGJcKVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClhc1woclx8bFwpXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoaW50XHxkZXJcKVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClzdG9zXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoXHxyXCljbHNcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpZHJ3c1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClzY2xzXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKW5zXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXRvdFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCltZWFuXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoXHxwXClzZGV2XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoXHxwXCl2YXJcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpbWF4c1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCltaW5zXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVwoXHxwXCljb3ZcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpY29sc1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClzXCh4XChcfHlcfDJcKVx8eVwoXHwyXClcKVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClcKHhcfHlcKWNvbFx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCljb3JyXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXV0cFtjZm50XVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCljb21iXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXBlcm1cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpXChcfHBcKWx1XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKVtsdV1jaG9sXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXNjaHVyXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKSVcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpJWNoXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKSV0XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWhtcy0+XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKS0+aG1zXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWhtcytcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpaG1zLVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClkLT5yXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXItPmRcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpYi0+clx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClyLT5iXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWMtPnJcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpci0+Y1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXClyLT5wXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXAtPnJcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpc3RyLT5cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpLT5zdHJcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpYXJyYXktPlx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCktPmFycmF5XHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKWxpc3QtPlx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCktPmxpc3RcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpcytcemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpcy1cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpY29sLVx6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCljb2wrXHplXCgkXHxcc1wrXCkiCitzeW50YXggbWF0Y2ggcnBsSW50cmluc2ljCSAgICJcKF5cfFxzXCtcKXJvdy1cemVcKCRcfFxzXCtcKSIKK3N5bnRheCBtYXRjaCBycGxJbnRyaW5zaWMJICAgIlwoXlx8XHNcK1wpcm93K1x6ZVwoJFx8XHNcK1wpIgorc3ludGF4IG1hdGNoIHJwbEludHJpbnNpYwkgICAiXCheXHxcc1wrXCktPnFcemVcKCRcfFxzXCtcKSIKKworc3ludGF4IG1hdGNoIHJwbE9ic29sZXRlCSAgICJcKF5cfFxzXCtcKWFycnktPlx6ZVwoJFx8XHNcK1wpImhzPWUtNQorc3ludGF4IG1hdGNoIHJwbE9ic29sZXRlCSAgICJcKF5cfFxzXCtcKS0+YXJyeVx6ZVwoJFx8XHNcK1wpImhzPWUtNQorCisiIENvbmRpdGlvbmFsIHN0cnVjdHVyZXMKK3N5bnRheCBtYXRjaCBycGxDb25kaXRpb25hbEVycm9yICAgIlwoXlx8XHNcK1wpY2FzZVx6ZVwoJFx8XHNcK1wpImhzPWUtMworc3ludGF4IG1hdGNoIHJwbENvbmRpdGlvbmFsRXJyb3IgICAiXCheXHxcc1wrXCl0aGVuXHplXCgkXHxcc1wrXCkiaHM9ZS0zCitzeW50YXggbWF0Y2ggcnBsQ29uZGl0aW9uYWxFcnJvciAgICJcKF5cfFxzXCtcKWVsc2VcemVcKCRcfFxzXCtcKSJocz1lLTMKK3N5bnRheCBtYXRjaCBycGxDb25kaXRpb25hbEVycm9yICAgIlwoXlx8XHNcK1wpZWxzZWlmXHplXCgkXHxcc1wrXCkiaHM9ZS01CitzeW50YXggbWF0Y2ggcnBsQ29uZGl0aW9uYWxFcnJvciAgICJcKF5cfFxzXCtcKWVuZFx6ZVwoJFx8XHNcK1wpImhzPWUtMgorc3ludGF4IG1hdGNoIHJwbENvbmRpdGlvbmFsRXJyb3IgICAiXCheXHxcc1wrXClcKHN0ZXBcfG5leHRcKVx6ZVwoJFx8XHNcK1wpImhzPWUtMworc3ludGF4IG1hdGNoIHJwbENvbmRpdGlvbmFsRXJyb3IgICAiXCheXHxcc1wrXCl1bnRpbFx6ZVwoJFx8XHNcK1wpImhzPWUtNAorc3ludGF4IG1hdGNoIHJwbENvbmRpdGlvbmFsRXJyb3IgICAiXCheXHxcc1wrXClyZXBlYXRcemVcKCRcfFxzXCtcKSJocz1lLTUKK3N5bnRheCBtYXRjaCBycGxDb25kaXRpb25hbEVycm9yICAgIlwoXlx8XHNcK1wpZGVmYXVsdFx6ZVwoJFx8XHNcK1wpImhzPWUtNgorCisiIEZPUi8oQ1lDTEUpLyhFWElUKS9ORVhUCisiIEZPUi8oQ1lDTEUpLyhFWElUKS9TVEVQCisiIFNUQVJULyhDWUNMRSkvKEVYSVQpL05FWFQKKyIgU1RBUlQvKENZQ0xFKS8oRVhJVCkvU1RFUAorc3ludGF4IG1hdGNoIHJwbEN5Y2xlICAgICAgICAgICAgICAiXCheXHxcc1wrXClcKGN5Y2xlXHxleGl0XClcemVcKCRcfFxzXCtcKSIKK3N5bnRheCByZWdpb24gcnBsRm9yTmV4dCBtYXRjaGdyb3VwPXJwbFJlcGVhdCBzdGFydD0iXCheXHxcc1wrXClcKGZvclx8c3RhcnRcKVx6ZVwoJFx8XHNcK1wpIiBlbmQ9IlwoXlx8XHNcK1wpXChuZXh0XHxzdGVwXClcemVcKCRcfFxzXCtcKSIgY29udGFpbnM9QUxMIGtlZXBlbmQgZXh0ZW5kCisKKyIgRUxTRUlGL0VORAorc3ludGF4IHJlZ2lvbiBycGxFbHNlaWZFbmQgbWF0Y2hncm91cD1ycGxDb25kaXRpb25hbCBzdGFydD0iXCheXHxcc1wrXCllbHNlaWZcemVcKCRcfFxzXCtcKSIgZW5kPSJcKF5cfFxzXCtcKWVuZFx6ZVwoJFx8XHNcK1wpIiBjb250YWluZWQgY29udGFpbnM9QUxMQlVULHJwbEVsc2VFbmQga2VlcGVuZAorCisiIEVMU0UvRU5ECitzeW50YXggcmVnaW9uIHJwbEVsc2VFbmQgbWF0Y2hncm91cD1ycGxDb25kaXRpb25hbCBzdGFydD0iXCheXHxcc1wrXCllbHNlXHplXCgkXHxcc1wrXCkiIGVuZD0iXCheXHxcc1wrXCllbmRcemVcKCRcfFxzXCtcKSIgY29udGFpbmVkIGNvbnRhaW5zPUFMTEJVVCxycGxFbHNlRW5kLHJwbFRoZW5FbmQscnBsRWxzZWlmRW5kIGtlZXBlbmQKKworIiBUSEVOL0VORAorc3ludGF4IHJlZ2lvbiBycGxUaGVuRW5kIG1hdGNoZ3JvdXA9cnBsQ29uZGl0aW9uYWwgc3RhcnQ9IlwoXlx8XHNcK1wpdGhlblx6ZVwoJFx8XHNcK1wpIiBlbmQ9IlwoXlx8XHNcK1wpZW5kXHplXCgkXHxcc1wrXCkiIGNvbnRhaW5lZCBjb250YWluZWRpbj1ycGxJZkVuZCBjb250YWlucz1BTExCVVQscnBsVGhlbkVuZCBrZWVwZW5kCisKKyIgSUYvRU5ECitzeW50YXggcmVnaW9uIHJwbElmRW5kIG1hdGNoZ3JvdXA9cnBsQ29uZGl0aW9uYWwgc3RhcnQ9IlwoXlx8XHNcK1wpaWZcKGVyclx8XClcemVcKCRcfFxzXCtcKSIgZW5kPSJcKF5cfFxzXCtcKWVuZFx6ZVwoJFx8XHNcK1wpIiBjb250YWlucz1BTExCVVQscnBsRWxzZUVuZCxycGxFbHNlaWZFbmQga2VlcGVuZCBleHRlbmQKKyIgaWYgZW5kIGlzIGFjY2VwdGVkICEKKyIgc2VsZWN0IGVuZCB0b28gIQorCisiIENBU0UvVEhFTgorc3ludGF4IHJlZ2lvbiBycGxDYXNlVGhlbiBtYXRjaGdyb3VwPXJwbENvbmRpdGlvbmFsIHN0YXJ0PSJcKF5cfFxzXCtcKWNhc2VcemVcKCRcfFxzXCtcKSIgZW5kPSJcKF5cfFxzXCtcKXRoZW5cemVcKCRcfFxzXCtcKSIgY29udGFpbnM9QUxMQlVULHJwbENhc2VUaGVuLHJwbENhc2VFbmQscnBsVGhlbkVuZCBrZWVwZW5kIGV4dGVuZCBjb250YWluZWQgY29udGFpbmVkaW49cnBsQ2FzZUVuZAorCisiIENBU0UvRU5ECitzeW50YXggcmVnaW9uIHJwbENhc2VFbmQgbWF0Y2hncm91cD1ycGxDb25kaXRpb25hbCBzdGFydD0iXCheXHxcc1wrXCljYXNlXHplXCgkXHxcc1wrXCkiIGVuZD0iXCheXHxcc1wrXCllbmRcemVcKCRcfFxzXCtcKSIgY29udGFpbnM9QUxMQlVULHJwbENhc2VFbmQscnBsVGhlbkVuZCxycGxFbHNlRW5kIGtlZXBlbmQgZXh0ZW5kIGNvbnRhaW5lZCBjb250YWluZWRpbj1ycGxTZWxlY3RFbmQKKworIiBERUZBVUxUL0VORAorc3ludGF4IHJlZ2lvbiBycGxEZWZhdWx0RW5kIG1hdGNoZ3JvdXA9cnBsQ29uZGl0aW9uYWwgc3RhcnQ9IlwoXlx8XHNcK1wpZGVmYXVsdFx6ZVwoJFx8XHNcK1wpIiBlbmQ9IlwoXlx8XHNcK1wpZW5kXHplXCgkXHxcc1wrXCkiIGNvbnRhaW5zPUFMTEJVVCxycGxEZWZhdWx0RW5kIGtlZXBlbmQgY29udGFpbmVkIGNvbnRhaW5lZGluPXJwbFNlbGVjdEVuZAorCisiIFNFTEVDVC9FTkQKK3N5bnRheCByZWdpb24gcnBsU2VsZWN0RW5kIG1hdGNoZ3JvdXA9cnBsQ29uZGl0aW9uYWwgc3RhcnQ9IlwoXlx8XHNcK1wpc2VsZWN0XHplXCgkXHxcc1wrXCkiIGVuZD0iXCheXHxcc1wrXCllbmRcemVcKCRcfFxzXCtcKSIgY29udGFpbnM9QUxMQlVULHJwbFRoZW5FbmQga2VlcGVuZCBleHRlbmQKKyIgc2VsZWN0IGVuZCBpcyBhY2NlcHRlZCAhCisKKyIgRE8vVU5USUwvRU5ECitzeW50YXggcmVnaW9uIHJwbFVudGlsRW5kIG1hdGNoZ3JvdXA9cnBsQ29uZGl0aW9uYWwgc3RhcnQ9IlwoXlx8XHNcK1wpdW50aWxcemVcKCRcfFxzXCtcKSIgZW5kPSJcKF5cfFxzXCtcKVx6c2VuZFx6ZVwoJFx8XHNcK1wpIiBjb250YWlucz1BTExCVVQscnBsVW50aWxFbmQgY29udGFpbmVkIGNvbnRhaW5lZGluPXJwbERvVW50aWwgZXh0ZW5kIGtlZXBlbmQKK3N5bnRheCByZWdpb24gcnBsRG9VbnRpbCBtYXRjaGdyb3VwPXJwbENvbmRpdGlvbmFsIHN0YXJ0PSJcKF5cfFxzXCtcKWRvXHplXCgkXHxcc1wrXCkiIGVuZD0iXCheXHxcc1wrXCl1bnRpbFx6ZVwoJFx8XHNcK1wpIiBjb250YWlucz1BTEwga2VlcGVuZCBleHRlbmQKKworIiBXSElMRS9SRVBFQVQvRU5ECitzeW50YXggcmVnaW9uIHJwbFJlcGVhdEVuZCBtYXRjaGdyb3VwPXJwbENvbmRpdGlvbmFsIHN0YXJ0PSJcKF5cfFxzXCtcKXJlcGVhdFx6ZVwoJFx8XHNcK1wpIiBlbmQ9IlwoXlx8XHNcK1wpXHpzZW5kXHplXCgkXHxcc1wrXCkiIGNvbnRhaW5zPUFMTEJVVCxycGxSZXBlYXRFbmQgY29udGFpbmVkIGNvbnRhaW5lZGluPXJwbFdoaWxlUmVwZWF0IGV4dGVuZCBrZWVwZW5kCitzeW50YXggcmVnaW9uIHJwbFdoaWxlUmVwZWF0IG1hdGNoZ3JvdXA9cnBsQ29uZGl0aW9uYWwgc3RhcnQ9IlwoXlx8XHNcK1wpd2hpbGVcemVcKCRcfFxzXCtcKSIgZW5kPSJcKF5cfFxzXCtcKXJlcGVhdFx6ZVwoJFx8XHNcK1wpIiBjb250YWlucz1BTEwga2VlcGVuZCBleHRlbmQKKworIiBDb21tZW50cworc3ludGF4IG1hdGNoIHJwbENvbW1lbnRFcnJvciAiXCovIgorc3ludGF4IHJlZ2lvbiBycGxDb21tZW50U3RyaW5nIGNvbnRhaW5lZCBzdGFydD0rIisgZW5kPSsiKyBlbmQ9K1wqLyttZT1zLTEKK3N5bnRheCByZWdpb24gcnBsQ29tbWVudExpbmUgc3RhcnQ9IlwoXlx8XHNcK1wpLy9cemUiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1OT05FIGtlZXBlbmQgZXh0ZW5kCitzeW50YXggcmVnaW9uIHJwbENvbW1lbnQgc3RhcnQ9IlwoXlx8XHNcK1wpL1wqXHplIiBlbmQ9IlwqLyIgY29udGFpbnM9cnBsQ29tbWVudFN0cmluZyBrZWVwZW5kIGV4dGVuZAorCisiIENhdGNoIGVycm9ycyBjYXVzZWQgYnkgdG9vIG1hbnkgcmlnaHQgcGFyZW50aGVzZXMKK3N5bnRheCByZWdpb24gcnBsUGFyZW4gdHJhbnNwYXJlbnQgc3RhcnQ9IigiIGVuZD0iKSIgY29udGFpbnM9QUxMQlVULHJwbFBhcmVuRXJyb3IscnBsQ29tcGxleCxycGxJbmNsdWRlZCBrZWVwZW5kIGV4dGVuZAorc3ludGF4IG1hdGNoIHJwbFBhcmVuRXJyb3IgIikiCisKKyIgU3Vicm91dGluZXMKKyIgQ2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB0b28gbWFueSByaWdodCAnPj4nCitzeW50YXggbWF0Y2ggcnBsU3ViRXJyb3IgIlwoXlx8XHNcK1wpPj5cemVcKCRcfFxzXCtcKSJocz1lLTEKK3N5bnRheCByZWdpb24gcnBsU3ViIG1hdGNoZ3JvdXA9cnBsU3ViRGVsaW1pdG9yIHN0YXJ0PSJcKF5cfFxzXCtcKTw8XHplXCgkXHxcc1wrXCkiIGVuZD0iXCheXHxcc1wrXCk+Plx6ZVwoJFx8XHNcK1wpIiBjb250YWlucz1BTExCVVQscnBsU3ViRXJyb3IscnBsSW5jbHVkZWQscnBsRGVmYXVsdEVuZCxycGxTdG9yYWdlU3ViIGtlZXBlbmQgZXh0ZW5kCisKKyIgRXhwcmVzc2lvbnMKK3N5bnRheCByZWdpb24gcnBsRXhwciBzdGFydD0iXCheXHxcc1wrXCknIiBlbmQ9IidcemVcKCRcfFxzXCtcKSIgY29udGFpbnM9cnBsUGFyZW4scnBsUGFyZW5FcnJvcgorCisiIExvY2FsIHZhcmlhYmxlcworc3ludGF4IG1hdGNoIHJwbFN0b3JhZ2VFcnJvciAiXCheXHxcc1wrXCktPlx6ZVwoJFx8XHNcK1wpImhzPWUtMQorc3ludGF4IHJlZ2lvbiBycGxTdG9yYWdlU3ViIG1hdGNoZ3JvdXA9cnBsU3RvcmFnZSBzdGFydD0iXCheXHxcc1wrXCk8PFx6ZVwoJFx8XHNcK1wpIiBlbmQ9IlwoXlx8XHNcK1wpPj5cemVcKCRcfFxzXCtcKSIgY29udGFpbnM9QUxMQlVULHJwbFN1YkVycm9yLHJwbEluY2x1ZGVkLHJwbERlZmF1bHRFbmQscnBsU3RvcmFnZUV4cHIgY29udGFpbmVkIGNvbnRhaW5lZGluPXJwbExvY2FsU3RvcmFnZSBrZWVwZW5kIGV4dGVuZAorc3ludGF4IHJlZ2lvbiBycGxTdG9yYWdlRXhwciBtYXRjaGdyb3VwPXJwbFN0b3JhZ2Ugc3RhcnQ9IlwoXlx8XHNcK1wpJyIgZW5kPSInXHplXCgkXHxcc1wrXCkiIGNvbnRhaW5zPXJwbFBhcmVuLHJwbFBhcmVuRXJyb3IgZXh0ZW5kIGNvbnRhaW5lZCBjb250YWluZWRpbj1ycGxMb2NhbFN0b3JhZ2UKK3N5bnRheCByZWdpb24gcnBsTG9jYWxTdG9yYWdlIG1hdGNoZ3JvdXA9cnBsU3RvcmFnZSBzdGFydD0iXCheXHxcc1wrXCktPlx6ZVwoJFx8XHNcK1wpIiBlbmQ9IlwoXlx8XHNcK1wpXCg8PFx6ZVwoJFx8XHNcK1wpXHwnXCkiIGNvbnRhaW5zPXJwbFN0b3JhZ2VTdWIscnBsU3RvcmFnZUV4cHIscnBsQ29tbWVudCxycGxDb21tZW50TGluZSBrZWVwZW5kIGV4dGVuZAorCisiIENhdGNoIGVycm9ycyBjYXVzZWQgYnkgdG9vIG1hbnkgcmlnaHQgYnJhY2tldHMKK3N5bnRheCBtYXRjaCBycGxBcnJheUVycm9yICJcXSIKK3N5bnRheCBtYXRjaCBycGxBcnJheSAiXF0iIGNvbnRhaW5lZCBjb250YWluZWRpbj1ycGxBcnJheQorc3ludGF4IHJlZ2lvbiBycGxBcnJheSBtYXRjaGdyb3VwPXJwbEFycmF5IHN0YXJ0PSJcWyIgZW5kPSJcXSIgY29udGFpbnM9QUxMQlVULHJwbEFycmF5RXJyb3Iga2VlcGVuZCBleHRlbmQKKworIiBDYXRjaCBlcnJvcnMgY2F1c2VkIGJ5IHRvbyBtYW55IHJpZ2h0ICd9Jworc3ludGF4IG1hdGNoIHJwbExpc3RFcnJvciAifSIKK3N5bnRheCBtYXRjaCBycGxMaXN0ICJ9IiBjb250YWluZWQgY29udGFpbmVkaW49cnBsTGlzdAorc3ludGF4IHJlZ2lvbiBycGxMaXN0IG1hdGNoZ3JvdXA9cnBsTGlzdCBzdGFydD0ieyIgZW5kPSJ9IiBjb250YWlucz1BTExCVVQscnBsTGlzdEVycm9yLHJwbEluY2x1ZGVkIGtlZXBlbmQgZXh0ZW5kCisKKyIgY3BwIGlzIHVzZWQgYnkgUlBMLzIKK3N5bnRheCBtYXRjaCBycGxQcmVQcm9jICAgIlxfXiNccypcKGRlZmluZVx8dW5kZWZcKVw+Igorc3ludGF4IG1hdGNoIHJwbFByZVByb2MgICAiXF9eI1xzKlwod2FybmluZ1x8ZXJyb3JcKVw+Igorc3ludGF4IG1hdGNoIHJwbFByZUNvbmRpdCAiXF9eI1xzKlwoaWZcfGlmZGVmXHxpZm5kZWZcfGVsaWZcfGVsc2VcfGVuZGlmXClcPiIKK3N5bnRheCBtYXRjaCBycGxJbmNsdWRlZCBjb250YWluZWQgIlw8PFxzKlxTKlxzKj5cPiIKK3N5bnRheCBtYXRjaCBycGxJbmNsdWRlICAgIlxfXiNccyppbmNsdWRlXD5ccypbIjxdIiBjb250YWlucz1ycGxJbmNsdWRlZCxycGxTdHJpbmcKKyJzeW50YXggbWF0Y2ggcnBsRXhlY1BhdGggICJcJV5cX14jIVxzKlxTKiIKK3N5bnRheCBtYXRjaCBycGxFeGVjUGF0aCAgIlwlXlxfXiMhXHAqXF8kIgorCisiIEFueSBpbnRlZ2VyCitzeW50YXggbWF0Y2ggcnBsSW50ZWdlciAgICAiXCheXHxcc1wrXClbLStdXD1cZFwrXHplXCgkXHxcc1wrXCkiCisKKyIgRmxvYXRpbmcgcG9pbnQgbnVtYmVyCisiIFtTXVtpcF0uW2ZwXQorc3ludGF4IG1hdGNoIHJwbEZsb2F0ICAgICAgICJcKF5cfFxzXCtcKVstK11cPVwoXGQqXClcPVtcLixdXChcZCpcKVw9XHplXCgkXHxcc1wrXCkiIGNvbnRhaW5zPUFMTEJVVCxycGxQb2ludCxycGxTaWduCisiIFtTXWlwWy5mcF1FW1NdZXhwCitzeW50YXggbWF0Y2ggcnBsRmxvYXQgICAgICAgIlwoXlx8XHNcK1wpWy0rXVw9XGRcK1woW1wuLF1cZCpcKVw9W2VFXVwoWy0rXVwpXD1cZFwrXHplXCgkXHxcc1wrXCkiIGNvbnRhaW5zPUFMTEJVVCxycGxQb2ludCxycGxTaWduCisiIFtTXS5mcEVbU11leHAKK3N5bnRheCBtYXRjaCBycGxGbG9hdCAgICAgICAiXCheXHxcc1wrXClbLStdXD1cKFxkKlwpXD1bXC4sXVxkXCtbZUVdXChbLStdXClcPVxkXCtcemVcKCRcfFxzXCtcKSIgY29udGFpbnM9QUxMQlVULHJwbFBvaW50LHJwbFNpZ24KK3N5bnRheCBtYXRjaCBycGxQb2ludCAgICAgICJcPFtcLixdXD4iCitzeW50YXggbWF0Y2ggcnBsU2lnbiAgICAgICAiXDxbKy1dXD4iCisKKyIgQ29tcGxleCBudW1iZXIKKyIgKHgseSkKK3N5bnRheCBtYXRjaCBycGxDb21wbGV4ICAgICJcKF5cfFxzXCtcKShbLStdXD1cKFxkKlwpXD1cLlw9XGQqXChbZUVdWy0rXVw9XGRcK1wpXD1ccyosXHMqWy0rXVw9XChcZCpcKVw9XC5cPVxkKlwoW2VFXVstK11cPVxkXCtcKVw9KVx6ZVwoJFx8XHNcK1wpIgorIiAoeC55KQorc3ludGF4IG1hdGNoIHJwbENvbXBsZXggICAgIlwoXlx8XHNcK1wpKFstK11cPVwoXGQqXClcPSxcPVxkKlwoW2VFXVstK11cPVxkXCtcKVw9XHMqXC5ccypbLStdXD1cKFxkKlwpXD0sXD1cZCpcKFtlRV1bLStdXD1cZFwrXClcPSlcemVcKCRcfFxzXCtcKSIKKworIiBTdHJpbmdzCitzeW50YXggbWF0Y2ggcnBsU3RyaW5nR3VpbGxlcyAgICAgICAiXFxcIiIKK3N5bnRheCBtYXRjaCBycGxTdHJpbmdBbnRpc2xhc2ggICAgICJcXFxcIgorc3ludGF4IHJlZ2lvbiBycGxTdHJpbmcgc3RhcnQ9K1woXlx8XHNcK1wpIisgZW5kPSsiXHplXCgkXHxcc1wrXCkrIGNvbnRhaW5zPXJwbFN0cmluZ0d1aWxsZXMscnBsU3RyaW5nQW50aXNsYXNoCisKK3N5bnRheCBtYXRjaCBycGxUYWIgIlx0IiAgdHJhbnNwYXJlbnQKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcnBsX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3JwbF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGlnaGxpZ2h0IGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaWdobGlnaHQgZGVmYXVsdCBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgICIgVGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorCisgIEhpTGluayBycGxDb250cm9sCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHJwbFN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBycGxBbGdDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgcnBsQ29uZGl0aW9uYWwJCVJlcGVhdAorICBIaUxpbmsgcnBsQ29uZGl0aW9uYWxFcnJvcglFcnJvcgorICBIaUxpbmsgcnBsUmVwZWF0CQlSZXBlYXQKKyAgSGlMaW5rIHJwbEN5Y2xlCQlSZXBlYXQKKyAgSGlMaW5rIHJwbFVudGlsCQlSZXBlYXQKKyAgSGlMaW5rIHJwbEludHJpbnNpYwkJU3BlY2lhbAorICBIaUxpbmsgcnBsU3RvcmFnZQkJU3RvcmFnZUNsYXNzCisgIEhpTGluayBycGxTdG9yYWdlRXhwcgkJU3RvcmFnZUNsYXNzCisgIEhpTGluayBycGxTdG9yYWdlRXJyb3IJRXJyb3IKKyAgSGlMaW5rIHJwbFJlYWRXcml0ZQkJcnBsSW50cmluc2ljCisKKyAgSGlMaW5rIHJwbE9wZXJhdG9yCQlPcGVyYXRvcgorCisgIEhpTGluayBycGxMaXN0CQlTcGVjaWFsCisgIEhpTGluayBycGxBcnJheQkJU3BlY2lhbAorICBIaUxpbmsgcnBsQ29uc3RhbnQJCUlkZW50aWZpZXIKKyAgSGlMaW5rIHJwbEV4cHIJCVR5cGUKKworICBIaUxpbmsgcnBsU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHJwbFN0cmluZ0d1aWxsZXMJU3RyaW5nCisgIEhpTGluayBycGxTdHJpbmdBbnRpc2xhc2gJU3RyaW5nCisKKyAgSGlMaW5rIHJwbEJpbmFyeQkJQm9vbGVhbgorICBIaUxpbmsgcnBsT2N0YWwJCUJvb2xlYW4KKyAgSGlMaW5rIHJwbERlY2ltYWwJCUJvb2xlYW4KKyAgSGlMaW5rIHJwbEhleGFkZWNpbWFsCQlCb29sZWFuCisgIEhpTGluayBycGxJbnRlZ2VyCQlOdW1iZXIKKyAgSGlMaW5rIHJwbEZsb2F0CQlGbG9hdAorICBIaUxpbmsgcnBsQ29tcGxleAkJRmxvYXQKKyAgSGlMaW5rIHJwbEJvb2xlYW4JCUlkZW50aWZpZXIKKworICBIaUxpbmsgcnBsT2Jzb2xldGUJCVRvZG8KKworICBIaUxpbmsgcnBsUHJlQ29uZGl0CQlQcmVDb25kaXQKKyAgSGlMaW5rIHJwbEluY2x1ZGUJCUluY2x1ZGUKKyAgSGlMaW5rIHJwbEluY2x1ZGVkCQlycGxTdHJpbmcKKyAgSGlMaW5rIHJwbEluY2x1ZGUJCUluY2x1ZGUKKyAgSGlMaW5rIHJwbEV4ZWNQYXRoCQlJbmNsdWRlCisgIEhpTGluayBycGxQcmVQcm9jCQlQcmVQcm9jCisgIEhpTGluayBycGxDb21tZW50CQlDb21tZW50CisgIEhpTGluayBycGxDb21tZW50TGluZQkJQ29tbWVudAorICBIaUxpbmsgcnBsQ29tbWVudFN0cmluZwlDb21tZW50CisgIEhpTGluayBycGxTdWJEZWxpbWl0b3IJcnBsU3RvcmFnZQorICBIaUxpbmsgcnBsQ29tbWVudEVycm9yCUVycm9yCisgIEhpTGluayBycGxQYXJlbkVycm9yCQlFcnJvcgorICBIaUxpbmsgcnBsU3ViRXJyb3IJCUVycm9yCisgIEhpTGluayBycGxBcnJheUVycm9yCQlFcnJvcgorICBIaUxpbmsgcnBsTGlzdEVycm9yCQlFcnJvcgorICBIaUxpbmsgcnBsVGFiCQkJRXJyb3IKKyAgSGlMaW5rIHJwbEJpbmFyeUVycm9yCQlFcnJvcgorICBIaUxpbmsgcnBsT2N0YWxFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIHJwbERlY2ltYWxFcnJvcglFcnJvcgorICBIaUxpbmsgcnBsSGV4YWRlY2ltYWxFcnJvcglFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJycGwiCisKKyIgdmltOiB0cz04IHR3PTEzMgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcnN0LnZpbSBiL3J1bnRpbWUvc3ludGF4L3JzdC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkNDNjNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3JzdC52aW0KQEAgLTAsMCArMSwxMDcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkgICAgcmVTdHJ1Y3R1cmVkVGV4dCBEb2N1bWVudGF0aW9uIEZvcm1hdAorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vc3ludGF4L3BjcC9yc3QvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDUtMTMKKyIgYXJjaC10YWc6CSAgICA2ZmFlMDlkYS1kNWQ0LTQ5ZDgtYWVjMS1lNDkwMDhlYTIxZTYKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgdG9kbworc3luIGtleXdvcmQJcnN0VG9kbwkJY29udGFpbmVkIEZJWE1FIFRPRE8gWFhYIE5PVEUKKworc3luIGNhc2UgaWdub3JlCisKKyIgY29tbWVudHMKK3N5biByZWdpb24JcnN0Q29tbWVudCAJbWF0Y2hncm91cD1yc3RDb21tZW50IHN0YXJ0PSJeXC5cLlwlKCBcJShbYS16MC05Xy4tXVwrOjpcKVxAIVx8JFwpIiBlbmQ9Il5cc1xAISIgY29udGFpbnM9cnN0VG9kbworCitzeW4gY2x1c3Rlcglyc3RDcnVmdCAgICBjb250YWlucz1yc3RGb290bm90ZUxhYmVsLHJzdENpdGF0aW9uTGFiZWwscnN0U3Vic3RpdHV0aW9uTGFiZWwscnN0SW5saW5lLHJzdEh5cGVybGlua3MscnN0SW50ZXJuYWxUYXJnZXQKKworIiBibG9ja3MKKyIgc3luIHJlZ2lvbglyc3RCbG9jawltYXRjaGdyb3VwPXJzdERlbGltaXRlciBzdGFydD0iOlxAPCE6JCIgc2tpcD0iXiQiIGVuZD0iXlxzXEAhIiBjb250YWlucz1AcnN0Q3J1ZnQKK3N5biByZWdpb24JcnN0QmxvY2sJbWF0Y2hncm91cD1yc3REZWxpbWl0ZXIgc3RhcnQ9Ijo6JCIgc2tpcD0iXiQiIGVuZD0iXlxzXEAhIgorc3luIHJlZ2lvbglyc3REb2N0ZXN0QmxvY2sJbWF0Y2hncm91cD1yc3REZWxpbWl0ZXIgc3RhcnQ9Il4+Pj5ccyIgZW5kPSJeJCIKKworIiB0YWJsZXMKKyIgVE9ETzogdGhlc2UgbWF5IGFjdHVhbGx5IGJlIGEgYml0IHRvbyBjb21wbGljYXRlZCB0byBtYXRjaCBjb3JyZWN0bHkgYW5kCisiIHNob3VsZCBwZXJoYXBzIGJlIHJlbW92ZWQuICBXaG9uIHJlYWxseSBuZWVkcyBpdCBhbnl3YXk/CitzeW4gcmVnaW9uCXJzdFRhYmxlCXRyYW5zcGFyZW50IHN0YXJ0PSJeXG5ccyorWy09K11cKyIgZW5kPSJeJCIgY29udGFpbnM9cnN0VGFibGVMaW5lcyxAcnN0Q3J1ZnQKK3N5biBtYXRjaAlyc3RUYWJsZUxpbmVzCWNvbnRhaW5lZCAiXlxzKlt8Kz0tXVwrJCIKK3N5biByZWdpb24JcnN0U2ltcGxlVGFibGUJdHJhbnNwYXJlbnQgc3RhcnQ9Il5cblxzKlwlKD1cK1xzXCtcKVwlKD1cK1xzKlwpXCskIiBlbmQ9Il4kIiBjb250YWlucz1yc3RTaW1wbGVUYWJsZUxpbmVzLEByc3RDcnVmdAorc3luIG1hdGNoCXJzdFNpbXBsZVRhYmxlTGluZXMgY29udGFpbmVkICJeXHMqXCUoPVwrXHNcK1wpXCUoPVwrXHMqXClcKyQiCisKKyIgZm9vdG5vdGVzCitzeW4gcmVnaW9uCXJzdEZvb3Rub3RlIAltYXRjaGdyb3VwPXJzdERpcmVjdGl2ZSBzdGFydD0iXlwuXC4gXFtcJShbIypdXHxbMC05XVwrXHwjW2EtejAtOV8uLV1cK1wpXF1ccyIgZW5kPSJeXHNcQCEiIGNvbnRhaW5zPUByc3RDcnVmdAorc3luIG1hdGNoCXJzdEZvb3Rub3RlTGFiZWwgIlxbXCUoWyMqXVx8WzAtOV1cK1x8I1thLXowLTlfLi1dXCtcKVxdXyIKKworIiBjaXRhdGlvbnMKK3N5biByZWdpb24JcnN0Q2l0YXRpb24gCW1hdGNoZ3JvdXA9cnN0RGlyZWN0aXZlIHN0YXJ0PSJeXC5cLiBcW1thLXowLTlfLi1dXCtcXVxzIiBlbmQ9Il5cc1xAISIgY29udGFpbnM9QHJzdENydWZ0CitzeW4gbWF0Y2gJcnN0Q2l0YXRpb25MYWJlbCAiXFtbYS16MC05Xy4tXVwrXF1fIgorCisiIGRpcmVjdGl2ZXMKK3N5biByZWdpb24JcnN0RGlyZWN0aXZlQm9keSBtYXRjaGdyb3VwPXJzdERpcmVjdGl2ZSBzdGFydD0iXlwuXC4gW2EtejAtOV8uLV1cKzo6IiBlbmQ9Il5cc1xAISIKKworIiBzdWJzdGl0dXRpb25zCitzeW4gcmVnaW9uCXJzdFN1YnN0aXR1dGlvbiBtYXRjaGdyb3VwPXJzdERpcmVjdGl2ZSBzdGFydD0iXlwuXC4gfFthLXowLTlfLi1dfFxzW2EtejAtOV8uLV1cKzo6XHMiIGVuZD0iXlxzXEAhIiBjb250YWlucz1AcnN0Q3J1ZnQKK3N5biBtYXRjaAlyc3RTdWJzdGl0dXRpb25MYWJlbCAifFthLXowLTlfLi1dfCIKKworIiBpbmxpbmUgbWFya3VwCitzeW4gbWF0Y2gJcnN0SW5saW5lCSJcKlx7MSwyfVxTXCUoW14qXSpcU1wpXD1cKlx7MSwyfSIKK3N5biBtYXRjaAlyc3RJbmxpbmUJImBcezEsMn1cU1wlKFteYF0qXFNcKVw9YFx7MSwyfSIKKworIiBoeXBlcmxpbmtzCitzeW4gcmVnaW9uCXJzdEh5cGVybGlua3MJbWF0Y2hncm91cD1Sc3REaXJlY3RpdmUgc3RhcnQ9Il5cLlwuIF9bYS16MC05Xy4gLV1cKzpccyIgZW5kPSJeXHNcQCEiIGNvbnRhaW5zPUByc3RDcnVmdAorCitzeW4gbWF0Y2gJcnN0SHlwZXJsaW5rc0xhYmVsCSJgXFNcJShbXmBdKlxTXClcPWBfX1w9XD4iCitzeW4gbWF0Y2gJcnN0SHlwZXJsaW5rc0xhYmVsCSJcd1wrX19cPVw+IgorCisiIGludGVybmFsIHRhcmdldHMKK3N5biBtYXRjaAlyc3RJbnRlcm5hbFRhcmdldCAiX2BcU1wlKFteYF0qXFNcKVw9YCIKKworIiBsaXN0cworc3luIG1hdGNoCXJzdExpc3RJdGVtCSJeOlwlKFx3XCtccypcKVwrOiIKK3N5biBtYXRjaAlyc3RMaXN0SXRlbQkiXlxzKlstKitdXHNcKyIKKworc3luIHN5bmMgbWlubGluZXM9NTAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcnN0X3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3JzdF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayByc3RUb2RvIFRvZG8KKyAgSGlMaW5rIHJzdENvbW1lbnQgQ29tbWVudAorICBIaUxpbmsgcnN0RGVsaW1pdGVyIERlbGltaXRlcgorICBIaUxpbmsgcnN0QmxvY2sgU3RyaW5nCisgIEhpTGluayByc3REb2N0ZXN0QmxvY2sgUHJlUHJvYworICBIaUxpbmsgcnN0VGFibGVMaW5lcyBEZWxpbWl0ZXIKKyAgSGlMaW5rIHJzdFNpbXBsZVRhYmxlTGluZXMgcnN0VGFibGVMaW5lcworICBIaUxpbmsgcnN0Rm9vdG5vdGUgU3RyaW5nCisgIEhpTGluayByc3RGb290bm90ZUxhYmVsIElkZW50aWZpZXIKKyAgSGlMaW5rIHJzdENpdGF0aW9uIFN0cmluZworICBIaUxpbmsgcnN0Q2l0YXRpb25MYWJlbCBJZGVudGlmaWVyCisgIEhpTGluayByc3REaXJlY3RpdmUgS2V5d29yZAorICBIaUxpbmsgcnN0RGlyZWN0aXZlQm9keSBUeXBlCisgIEhpTGluayByc3RTdWJzdGl0dXRpb24gU3RyaW5nCisgIEhpTGluayByc3RTdWJzdGl0dXRpb25MYWJlbCBJZGVudGlmaWVyCisgIEhpTGluayByc3RIeXBlcmxpbmtzIFN0cmluZworICBIaUxpbmsgcnN0SHlwZXJsaW5rc0xhYmVsIElkZW50aWZpZXIKKyAgSGlMaW5rIHJzdExpc3RJdGVtIElkZW50aWZpZXIKKyAgaGkgZGVmIHJzdElubGluZSB0ZXJtPWl0YWxpYyBjdGVybT1pdGFsaWMgZ3VpPWl0YWxpYworICBoaSBkZWYgcnN0SW50ZXJuYWxUYXJnZXQgdGVybT1pdGFsaWMgY3Rlcm09aXRhbGljIGd1aT1pdGFsaWMKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInJzdCIKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvcnRmLnZpbSBiL3J1bnRpbWUvc3ludGF4L3J0Zi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1ZWE3MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3J0Zi52aW0KQEAgLTAsMCArMSw4OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVJpY2ggVGV4dCBGb3JtYXQKKyIJCSIqLnJ0ZiIgZmlsZXMKKyIKKyIgVGhlIFJpY2ggVGV4dCBGb3JtYXQgKFJURikgU3BlY2lmaWNhdGlvbiBpcyBhIG1ldGhvZCBvZiBlbmNvZGluZyBmb3JtYXR0ZWQKKyIgdGV4dCBhbmQgZ3JhcGhpY3MgZm9yIGVhc3kgdHJhbnNmZXIgYmV0d2VlbiBhcHBsaWNhdGlvbnMuCisiIC5obHAgKHdpbmRvd3MgaGVscCBmaWxlcykgdXNlIGNvbXBpbGVkIHJ0ZiBmaWxlcworIiBydGYgZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vbmlnaHQucHJpbWF0ZS53aXNjLmVkdS9zb2Z0d2FyZS9SVEYvCisiCisiIE1haW50YWluZXI6CURvbWluaXF1ZSBTdOlwaGFuIChkb21pbmlxdWVAbWdnZW4uY29tKQorIiBVUkw6IGh0dHA6Ly93d3cubWdnZW4uY29tL3ZpbS9zeW50YXgvcnRmLnppcAorIiBMYXN0IGNoYW5nZToJMjAwMSBNYWkgMDIKKworIiBUT0RPOiByZW5kZXIgdW5kZXJsaW5lLCBpdGFsaWMsIGJvbGQKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGNhc2Ugb24gKGFsbCBjb250cm9scyBtdXN0IGJlIGxvd2VyIGNhc2UpCitzeW4gY2FzZSBtYXRjaAorCisiIENvbnRyb2wgV29yZHMKK3N5biBtYXRjaCBydGZDb250cm9sV29yZAkiXFxbYS16XVwrW1wtXVw9WzAtOV0qIgorCisiIE5ldyBDb250cm9sIFdvcmRzIChub3QgaW4gdGhlIDE5ODcgc3BlY2lmaWNhdGlvbnMpCitzeW4gbWF0Y2ggcnRmTmV3Q29udHJvbFdvcmQJIlxcXCpcXFthLXpdXCtbXC1dXD1bMC05XSoiCisKKyIgQ29udHJvbCBTeW1ib2wgOiBhbnkgXCBwbHVzIGEgbm9uIGFscGhhIHN5bWJvbCwgKiwgXCwgeyBhbmQgfSBhbmQgJworc3luIG1hdGNoIHJ0ZkNvbnRyb2xTeW1ib2wJIlxcW15hLXpBLVpcKlx7XH1cXCddIgorCisiIHsgfSBhbmQgXCBhcmUgc3BlY2lhbCBjaGFyYWN0ZXJzLCB0byB1c2UgdGhlbQorIiB3ZSBhZGQgYSBiYWNrc2xhc2ggXAorc3luIG1hdGNoIHJ0ZkNoYXJhY3RlcgkJIlxcXFwiCitzeW4gbWF0Y2ggcnRmQ2hhcmFjdGVyCQkiXFx7Igorc3luIG1hdGNoIHJ0ZkNoYXJhY3RlcgkJIlxcfSIKKyIgRXNjYXBlZCBjaGFyYWN0ZXJzIChmb3IgOCBieXRlcyBjaGFyYWN0ZXJzIHVwcGVyIHRoYW4gMTI3KQorc3luIG1hdGNoIHJ0ZkNoYXJhY3RlcgkJIlxcJ1tBLVphLXowLTldW0EtWmEtejAtOV0iCisiIFVuaWNvZGUKK3N5biBtYXRjaCBydGZVbmljb2RlQ2hhcmFjdGVyCSJcXHVbMC05XVswLTldKiIKKworIiBDb2xvciB2YWx1ZXMsIHdlIHdpbGwgcHV0IHRoaXMgdmFsdWUgaW4gUmVkLCBHcmVlbiBvciBCbHVlCitzeW4gbWF0Y2ggcnRmUmVkCQkiXFxyZWRbMC05XVswLTldKiIKK3N5biBtYXRjaCBydGZHcmVlbgkJIlxcZ3JlZW5bMC05XVswLTldKiIKK3N5biBtYXRjaCBydGZCbHVlCQkiXFxibHVlWzAtOV1bMC05XSoiCisKKyIgU29tZSBzdHVmZiBmb3IgaGVscCBmaWxlcworc3luIG1hdGNoIHJ0ZkZvb3ROb3RlICJbIyRLK117XFxmb290bm90ZS4qfSIgY29udGFpbnM9cnRmQ29udHJvbFdvcmQscnRmTmV3Q29udHJvbFdvcmQKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcnRmX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3J0Zl9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisKKyAgIEhpTGluayBydGZDb250cm9sV29yZAkJU3RhdGVtZW50CisgICBIaUxpbmsgcnRmTmV3Q29udHJvbFdvcmQJU3BlY2lhbAorICAgSGlMaW5rIHJ0ZkNvbnRyb2xTeW1ib2wJQ29uc3RhbnQKKyAgIEhpTGluayBydGZDaGFyYWN0ZXIJCUNoYXJhY3RlcgorICAgSGlMaW5rIHJ0ZlVuaWNvZGVDaGFyYWN0ZXIJU3BlY2lhbENoYXIKKyAgIEhpTGluayBydGZGb290Tm90ZQkJQ29tbWVudAorCisgICAiIERlZmluZSBjb2xvcnMgZm9yIHRoZSBzeW50YXggZmlsZQorICAgaGkgcnRmUmVkCSAgICAgIHRlcm09dW5kZXJsaW5lIGN0ZXJtPXVuZGVybGluZSBjdGVybWZnPURhcmtSZWQgZ3VpPXVuZGVybGluZSBndWlmZz1EYXJrUmVkCisgICBoaSBydGZHcmVlbgkgICAgICB0ZXJtPXVuZGVybGluZSBjdGVybT11bmRlcmxpbmUgY3Rlcm1mZz1EYXJrR3JlZW4gZ3VpPXVuZGVybGluZSBndWlmZz1EYXJrR3JlZW4KKyAgIGhpIHJ0ZkJsdWUJICAgICAgdGVybT11bmRlcmxpbmUgY3Rlcm09dW5kZXJsaW5lIGN0ZXJtZmc9RGFya0JsdWUgZ3VpPXVuZGVybGluZSBndWlmZz1EYXJrQmx1ZQorCisgICBIaUxpbmsgcnRmUmVkCXJ0ZlJlZAorICAgSGlMaW5rIHJ0ZkdyZWVuCXJ0ZkdyZWVuCisgICBIaUxpbmsgcnRmQmx1ZQlydGZCbHVlCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicnRmIgorCisiIHZpbTp0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9ydWJ5LnZpbSBiL3J1bnRpbWUvc3ludGF4L3J1YnkudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZjE3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9ydWJ5LnZpbQpAQCAtMCwwICsxLDI4NSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CQlSdWJ5CisiIE1haW50YWluZXI6CQlEb3VnIEtlYXJucworIiBQcmV2aW91cyBNYWludGFpbmVyOglNaXJrbyBOYXNhdG8KKyIgTGFzdCBDaGFuZ2U6CQkyMDAzIE1heSAzMQorIiBVUkw6CQkJaHR0cDovL211Z2NhLml0cy5tb25hc2guZWR1LmF1L35kamtlYTIvdmltL3N5bnRheC9ydWJ5LnZpbQorCisiICRJZCQKKworIiBUaGFua3MgdG8gcGVybC52aW0gYXV0aG9ycywgYW5kIHRvIFJlaW1lciBCZWhyZW5kcy4gOi0pIChNTikKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIEV4cHJlc3Npb24gU3Vic3RpdHV0aW9uIGFuZCBCYWNrc2xhc2ggTm90YXRpb24KK3N5biBtYXRjaCBydWJ5RXhwclN1YnN0ICJcXFxcXHxcKFwoXFxNLVxcQy1cfFxcY1x8XFxDLVx8XFxNLVwpXHdcKVx8XChcXFxvXHszfVx8XFx4XHhcezJ9XHxcXFthYmVmbnJzdHZdXCkiIGNvbnRhaW5lZAorc3luIG1hdGNoIHJ1YnlFeHByU3Vic3QgIiN7W159XSp9IiBjb250YWluZWQKK3N5biBtYXRjaCBydWJ5RXhwclN1YnN0ICIjWyRAXVx3XCsiIGNvbnRhaW5lZAorCisiIE51bWJlcnMgYW5kIEFTQ0lJIENvZGVzCitzeW4gbWF0Y2ggcnVieU51bWJlciAiXHdcQDwhXCg/XChcXE0tXFxDLVx8XFxDLVxcTS1cfFxcTS1cXGNcfFxcY1xcTS1cfFxcY1x8XFxDLVx8XFxNLVwpXD1cKFxcXG9cezN9XHxcXHhceFx7Mn1cfFxcXD1cU1wpXCkiCitzeW4gbWF0Y2ggcnVieU51bWJlciAiXDxcKDB4XHhcK1x8MGJbMDFdXCtcfDBcb1wrXHwwXC5cZFwrXHwwXHxbMS05XVtcLjAtOV9dKlwpXD4iCisKKyIgSWRlbnRpZmllcnMgLSBjb25zdGFudCwgY2xhc3MgYW5kIGluc3RhbmNlLCBnbG9iYWwsIHN5bWJvbCwgaXRlcmF0b3IsIHByZWRlZmluZWQKK3N5biBtYXRjaCBydWJ5TG9jYWxWYXJpYWJsZU9yTWV0aG9kICJbX1s6bG93ZXI6XV1bX1s6YWxudW06XV0qWz8hPV1cPSIgdHJhbnNwYXJlbnQgY29udGFpbnM9Tk9ORQorCitpZiAhZXhpc3RzKCJydWJ5X25vX2lkZW50aWZpZXJzIikKKyAgc3luIG1hdGNoIHJ1YnlDb25zdGFudAkJIlwoOjpcKVw9XHpzXHVcdyoiCisgIHN5biBtYXRjaCBydWJ5Q2xhc3NWYXJpYWJsZQkJIkBAXGhcdyoiCisgIHN5biBtYXRjaCBydWJ5SW5zdGFuY2VWYXJpYWJsZQkiQFxoXHcqIgorICBzeW4gbWF0Y2ggcnVieUdsb2JhbFZhcmlhYmxlCQkiJFwoXGhcdypcfC0uXCkiCisgIHN5biBtYXRjaCBydWJ5U3ltYm9sCQkJIjpcQDwhOlwoXCRcfEBAXD1cKVw9XGhcdypbPyE9XVw9IgorICBzeW4gbWF0Y2ggcnVieUl0ZXJhdG9yCQkifFsgLGEtekEtWjAtOV8qXVwrfCIKKworICBzeW4gbWF0Y2ggcnVieVByZWRlZmluZWRWYXJpYWJsZSAiJFshIiQmJyorLC4vMDo7PD0+P0BcXF9gfjEtOV0iCisgIHN5biBtYXRjaCBydWJ5UHJlZGVmaW5lZFZhcmlhYmxlICIkLVswRklLYWRpbHB2d10iCisgIHN5biBtYXRjaCBydWJ5UHJlZGVmaW5lZFZhcmlhYmxlICIkXChkZWZvdXRcfHN0ZGVyclx8c3RkaW5cfHN0ZG91dFwpXD4iCisgIHN5biBtYXRjaCBydWJ5UHJlZGVmaW5lZFZhcmlhYmxlICIkXChERUJVR1x8RklMRU5BTUVcfEtDT0RFXHxMT0FEX1BBVEhcfFNBRkVcfFZFUkJPU0VcKVw+IgorICBzeW4gbWF0Y2ggcnVieVByZWRlZmluZWRDb25zdGFudCAiX19cKEZJTEVcfExJTkVcKV9fXD4iCisgIHN5biBtYXRjaCBydWJ5UHJlZGVmaW5lZENvbnN0YW50ICJcPFwoOjpcKVw9XHpzXChNYXRjaGluZ0RhdGFcfE5vdEltcGxlbWVudEVycm9yXHxBUkdGXHxBUkdWXHxFTlZcKVw+IgorICBzeW4gbWF0Y2ggcnVieVByZWRlZmluZWRDb25zdGFudCAiXDxcKDo6XClcPVx6c1woREFUQVx8RkFMU0VcfE5JTFx8UlVCWV9QTEFURk9STVx8UlVCWV9SRUxFQVNFX0RBVEVcKVw+IgorICBzeW4gbWF0Y2ggcnVieVByZWRlZmluZWRDb25zdGFudCAiXDxcKDo6XClcPVx6c1woUlVCWV9WRVJTSU9OXHxTVERFUlJcfFNURElOXHxTVERPVVRcfFRPUExFVkVMX0JJTkRJTkdcfFRSVUVcKVw+IgorICAiT2Jzb2xldGUgR2xvYmFsIENvbnN0YW50cworICAic3luIG1hdGNoIHJ1YnlQcmVkZWZpbmVkQ29uc3RhbnQgIlw8XCg6OlwpXD1cenNcKFBMQVRGT1JNXHxSRUxFQVNFXHxWRVJTSU9OXClcPiIKK2VuZGlmCisKKyIKKyIgQkVHSU4gQXV0b2dlbmVyYXRlZCBTdHVmZgorIgorIiBHZW5lcmFsaXplZCBSZWd1bGFyIEV4cHJlc3Npb24KK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlciEiICBlbmQ9IiFbaW9teF0qIiAgc2tpcD0iXFxcXFx8XFwhIiAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJXJcIiIgZW5kPSJcIltpb214XSoiIHNraXA9IlxcXFxcfFxcXCIiIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVyIyIgIGVuZD0iI1tpb214XSoiICBza2lwPSJcXFxcXHxcXCMiICBjb250YWlucz1ydWJ5RXhwclN1YnN0IGZvbGQKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlclwkIiBlbmQ9IlwkW2lvbXhdKiIgc2tpcD0iXFxcXFx8XFxcJCIgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJXIlIiAgZW5kPSIlW2lvbXhdKiIgIHNraXA9IlxcXFxcfFxcJSIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVyJiIgIGVuZD0iJltpb214XSoiICBza2lwPSJcXFxcXHxcXCYiICBjb250YWlucz1ydWJ5RXhwclN1YnN0IGZvbGQKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlciciICBlbmQ9IidbaW9teF0qIiAgc2tpcD0iXFxcXFx8XFwnIiAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJXJcKiIgZW5kPSJcKltpb214XSoiIHNraXA9IlxcXFxcfFxcXCoiIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVyKyIgIGVuZD0iK1tpb214XSoiICBza2lwPSJcXFxcXHxcXCsiICBjb250YWlucz1ydWJ5RXhwclN1YnN0IGZvbGQKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlci0iICBlbmQ9Ii1baW9teF0qIiAgc2tpcD0iXFxcXFx8XFwtIiAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJXJcLiIgZW5kPSJcLltpb214XSoiIHNraXA9IlxcXFxcfFxcXC4iIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVyLyIgIGVuZD0iL1tpb214XSoiICBza2lwPSJcXFxcXHxcXC8iICBjb250YWlucz1ydWJ5RXhwclN1YnN0IGZvbGQKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlcjoiICBlbmQ9IjpbaW9teF0qIiAgc2tpcD0iXFxcXFx8XFw6IiAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJXI7IiAgZW5kPSI7W2lvbXhdKiIgIHNraXA9IlxcXFxcfFxcOyIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVyPSIgIGVuZD0iPVtpb214XSoiICBza2lwPSJcXFxcXHxcXD0iICBjb250YWlucz1ydWJ5RXhwclN1YnN0IGZvbGQKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlcj8iICBlbmQ9Ij9baW9teF0qIiAgc2tpcD0iXFxcXFx8XFw/IiAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJXJAIiAgZW5kPSJAW2lvbXhdKiIgIHNraXA9IlxcXFxcfFxcQCIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVyXFwiIGVuZD0iXFxbaW9teF0qIgkJCSAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJXJcXiIgZW5kPSJcXltpb214XSoiIHNraXA9IlxcXFxcfFxcXF4iIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVyYCIgIGVuZD0iYFtpb214XSoiICBza2lwPSJcXFxcXHxcXGAiICBjb250YWlucz1ydWJ5RXhwclN1YnN0IGZvbGQKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlcnwiICBlbmQ9InxbaW9teF0qIiAgc2tpcD0iXFxcXFx8XFx8IiAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJXJcfiIgZW5kPSJcfltpb214XSoiIHNraXA9IlxcXFxcfFxcXH4iIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVyeyIgIGVuZD0ifVtpb214XSoiICBza2lwPSJcXFxcXHxcXH0iICBjb250YWlucz1ydWJ5RXhwclN1YnN0IGZvbGQKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlcjwiICBlbmQ9Ij5baW9teF0qIiAgc2tpcD0iXFxcXFx8XFw+IiAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJXJcWyIgZW5kPSJcXVtpb214XSoiIHNraXA9IlxcXFxcfFxcXF0iIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVyKCIgIGVuZD0iKVtpb214XSoiICBza2lwPSJcXFxcXHxcXCkiICBjb250YWlucz1ydWJ5RXhwclN1YnN0IGZvbGQKKworIiBHZW5lcmFsaXplZCBTaW5nbGUgUXVvdGVkIFN0cmluZyBhbmQgQXJyYXkgb2YgU3RyaW5ncworc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdISIgIGVuZD0iISIgIHNraXA9IlxcXFxcfFxcISIKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW3dxXVwiIiBlbmQ9IlwiIiBza2lwPSJcXFxcXHxcXFwiIgorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdIyIgIGVuZD0iIyIgIHNraXA9IlxcXFxcfFxcIyIKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW3dxXVwkIiBlbmQ9IlwkIiBza2lwPSJcXFxcXHxcXFwkIgorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdJSIgIGVuZD0iJSIgIHNraXA9IlxcXFxcfFxcJSIKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW3dxXSYiICBlbmQ9IiYiICBza2lwPSJcXFxcXHxcXCYiCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJVt3cV0nIiAgZW5kPSInIiAgc2tpcD0iXFxcXFx8XFwnIgorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdXCoiIGVuZD0iXCoiIHNraXA9IlxcXFxcfFxcXCoiCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJVt3cV0rIiAgZW5kPSIrIiAgc2tpcD0iXFxcXFx8XFwrIgorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdLSIgIGVuZD0iLSIgIHNraXA9IlxcXFxcfFxcLSIKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW3dxXVwuIiBlbmQ9IlwuIiBza2lwPSJcXFxcXHxcXFwuIgorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdLyIgIGVuZD0iLyIgIHNraXA9IlxcXFxcfFxcLyIKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW3dxXToiICBlbmQ9IjoiICBza2lwPSJcXFxcXHxcXDoiCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJVt3cV07IiAgZW5kPSI7IiAgc2tpcD0iXFxcXFx8XFw7Igorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdPSIgIGVuZD0iPSIgIHNraXA9IlxcXFxcfFxcPSIKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW3dxXT8iICBlbmQ9Ij8iICBza2lwPSJcXFxcXHxcXD8iCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJVt3cV1AIiAgZW5kPSJAIiAgc2tpcD0iXFxcXFx8XFxAIgorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdXFwiIGVuZD0iXFwiCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJVt3cV1cXiIgZW5kPSJcXiIgc2tpcD0iXFxcXFx8XFxcXiIKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW3dxXWAiICBlbmQ9ImAiICBza2lwPSJcXFxcXHxcXGAiCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJVt3cV18IiAgZW5kPSJ8IiAgc2tpcD0iXFxcXFx8XFx8Igorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdXH4iIGVuZD0iXH4iIHNraXA9IlxcXFxcfFxcXH4iCitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJVt3cV17IiAgZW5kPSJ9IiAgc2tpcD0iXFxcXFx8XFx9Igorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdPCIgIGVuZD0iPiIgIHNraXA9IlxcXFxcfFxcPiIKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW3dxXVxbIiBlbmQ9IlxdIiBza2lwPSJcXFxcXHxcXFxdIgorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbd3FdKCIgIGVuZD0iKSIgIHNraXA9IlxcXFxcfFxcKSIKKworIiBHZW5lcmFsaXplZCBEb3VibGUgUXVvdGVkIFN0cmluZyBhbmQgU2hlbGwgQ29tbWFuZCBPdXRwdXQKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9ISIgIGVuZD0iISIgIHNraXA9IlxcXFxcfFxcISIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9XCIiIGVuZD0iXCIiIHNraXA9IlxcXFxcfFxcXCIiIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9IyIgIGVuZD0iIyIgIHNraXA9IlxcXFxcfFxcIyIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9XCQiIGVuZD0iXCQiIHNraXA9IlxcXFxcfFxcXCQiIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9JSIgIGVuZD0iJSIgIHNraXA9IlxcXFxcfFxcJSIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9JiIgIGVuZD0iJiIgIHNraXA9IlxcXFxcfFxcJiIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9JyIgIGVuZD0iJyIgIHNraXA9IlxcXFxcfFxcJyIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9XCoiIGVuZD0iXCoiIHNraXA9IlxcXFxcfFxcXCoiIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9KyIgIGVuZD0iKyIgIHNraXA9IlxcXFxcfFxcKyIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9LSIgIGVuZD0iLSIgIHNraXA9IlxcXFxcfFxcLSIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9XC4iIGVuZD0iXC4iIHNraXA9IlxcXFxcfFxcXC4iIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9LyIgIGVuZD0iLyIgIHNraXA9IlxcXFxcfFxcLyIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9OiIgIGVuZD0iOiIgIHNraXA9IlxcXFxcfFxcOiIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9OyIgIGVuZD0iOyIgIHNraXA9IlxcXFxcfFxcOyIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKKyJzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iJVtReF1cPT0iICAgIGVuZD0iPSIgIHNraXA9IlxcXFxcfFxcPSIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XT0iICAgIGVuZD0iPSIgIHNraXA9IlxcXFxcfFxcPSIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9PyIgIGVuZD0iPyIgIHNraXA9IlxcXFxcfFxcPyIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9QCIgIGVuZD0iQCIgIHNraXA9IlxcXFxcfFxcQCIgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSIlW1F4XVw9XFwiIGVuZD0iXFwiCQkJY29udGFpbnM9cnVieUV4cHJTdWJzdAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbUXhdXD1cXiIgZW5kPSJcXiIgc2tpcD0iXFxcXFx8XFxcXiIgY29udGFpbnM9cnVieUV4cHJTdWJzdAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbUXhdXD1gIiAgZW5kPSJgIiAgc2tpcD0iXFxcXFx8XFxgIiAgY29udGFpbnM9cnVieUV4cHJTdWJzdAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbUXhdXD18IiAgZW5kPSJ8IiAgc2tpcD0iXFxcXFx8XFx8IiAgY29udGFpbnM9cnVieUV4cHJTdWJzdAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbUXhdXD1cfiIgZW5kPSJcfiIgc2tpcD0iXFxcXFx8XFxcfiIgY29udGFpbnM9cnVieUV4cHJTdWJzdAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbUXhdXD17IiAgZW5kPSJ9IiAgc2tpcD0iXFxcXFx8XFx9IiAgY29udGFpbnM9cnVieUV4cHJTdWJzdAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbUXhdXD08IiAgZW5kPSI+IiAgc2tpcD0iXFxcXFx8XFw+IiAgY29udGFpbnM9cnVieUV4cHJTdWJzdAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbUXhdXD1cWyIgZW5kPSJcXSIgc2tpcD0iXFxcXFx8XFxcXSIgY29udGFpbnM9cnVieUV4cHJTdWJzdAorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9IiVbUXhdXD0oIiAgZW5kPSIpIiAgc2tpcD0iXFxcXFx8XFwpIiAgY29udGFpbnM9cnVieUV4cHJTdWJzdAorCisiIE5vcm1hbCBTdHJpbmcgYW5kIFNoZWxsIENvbW1hbmQgT3V0cHV0CitzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0iXCIiIGVuZD0iXCIiIHNraXA9IlxcXFxcfFxcXCIiIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QKK3N5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSInIiAgZW5kPSInIiAgc2tpcD0iXFxcXFx8XFwnIgorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9ImAiICBlbmQ9ImAiICBza2lwPSJcXFxcXHxcXGAiICBjb250YWlucz1ydWJ5RXhwclN1YnN0CisiCisiIEVORCBBdXRvZ2VuZXJhdGVkIFN0dWZmCisiCisKKyIgTm9ybWFsIFJlZ3VsYXIgRXhwcmVzc2lvbgorc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9Il5ccyovIiBzdGFydD0iXDxhbmRccyovImxjPTMgc3RhcnQ9Ilw8b3JccyovImxjPTIgc3RhcnQ9Ilw8d2hpbGVccyovImxjPTUgc3RhcnQ9Ilw8dW50aWxccyovImxjPTUgc3RhcnQ9Ilw8dW5sZXNzXHMqLyJsYz02IHN0YXJ0PSJcPGlmXHMqLyJsYz0yIHN0YXJ0PSJcPGVsc2lmXHMqLyJsYz01IHN0YXJ0PSJcPHdoZW5ccyovImxjPTQgc3RhcnQ9Iltcfj0hfCYoLFtdXHMqLyJsYz0xIGVuZD0iL1tpb214XSoiIHNraXA9IlxcXFxcfFxcLyIgY29udGFpbnM9cnVieUV4cHJTdWJzdAorCisiIEhlcmUgRG9jdW1lbnQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9Kzw8LVwoXHVcezMsfVx8J1x1XHszLH0nXHwiXHVcezMsfSJcfGBcdVx7Myx9YFwpK2hzPXMrMiBlbmQ9K15ccypcdVx7Myx9JCsgZm9sZAorICBzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0rPDwtXChFT0ZcfCdFT0YnXHwiRU9GIlx8YEVPRmBcKStocz1zKzIJCSAgIGVuZD0rXlxzKkVPRiQrICAgICBjb250YWlucz1ydWJ5RXhwclN1YnN0IGZvbGQKKyAgc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9Kzw8LVwoRU9TXHwnRU9TJ1x8IkVPUyJcfGBFT1NgXCkraHM9cysyCQkgICBlbmQ9K15ccypFT1MkKyAgICAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCisgIHN5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PSs8PFwoXHVcezMsfVx8J1x1XHszLH0nXHwiXHVcezMsfSJcfGBcdVx7Myx9YFwpK2hzPXMrMiAgZW5kPSteXHVcezMsfSQrICAgIGZvbGQKKyAgc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9Kzw8XChFT0ZcfCdFT0YnXHwiRU9GIlx8YEVPRmBcKStocz1zKzIJCSAgIGVuZD0rXkVPRiQrCSAgICAgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorICBzeW4gcmVnaW9uIHJ1YnlTdHJpbmcgbWF0Y2hncm91cD1ydWJ5U3RyaW5nRGVsaW1pdCBzdGFydD0rPDxcKEVPU1x8J0VPUydcfCJFT1MiXHxgRU9TYFwpK2hzPXMrMgkJICAgZW5kPSteRU9TJCsJICAgICAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCitlbHNlCisgc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9K1woY2xhc3NccypcKVxAPCE8PFx6KFxoXHcqXClccyokK2hzPXMrMiAgZW5kPSteXHoxJCsgICAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCisgc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9K1woY2xhc3NccypcKVxAPCE8PCJceiguKlwpIlxzKiQraHM9cysyICAgZW5kPSteXHoxJCsgICAgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCisgc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9K1woY2xhc3NccypcKVxAPCE8PCdceiguKlwpJ1xzKiQraHM9cysyICAgZW5kPSteXHoxJCsgICAgZm9sZAorIHN5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PStcKGNsYXNzXHMqXClcQDwhPDxgXHooLipcKWBccyokK2hzPXMrMiAgIGVuZD0rXlx6MSQrICAgIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorCisgc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9K1woY2xhc3NccypcKVxAPCE8PC1ceihcaFx3KlwpXHMqJCtocz1zKzMgZW5kPSteXHMqXHoxJCsgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCisgc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9K1woY2xhc3NccypcKVxAPCE8PC0iXHooLipcKSJccyokK2hzPXMrMyAgZW5kPSteXHMqXHoxJCsgY29udGFpbnM9cnVieUV4cHJTdWJzdCBmb2xkCisgc3luIHJlZ2lvbiBydWJ5U3RyaW5nIG1hdGNoZ3JvdXA9cnVieVN0cmluZ0RlbGltaXQgc3RhcnQ9K1woY2xhc3NccypcKVxAPCE8PC0nXHooLipcKSdccyokK2hzPXMrMyAgZW5kPSteXHMqXHoxJCsgZm9sZAorIHN5biByZWdpb24gcnVieVN0cmluZyBtYXRjaGdyb3VwPXJ1YnlTdHJpbmdEZWxpbWl0IHN0YXJ0PStcKGNsYXNzXHMqXClcQDwhPDwtYFx6KC4qXClgXHMqJCtocz1zKzMgIGVuZD0rXlxzKlx6MSQrIGNvbnRhaW5zPXJ1YnlFeHByU3Vic3QgZm9sZAorZW5kaWYKKworIiBFeHBlbnNpdmUgTW9kZSAtIGNvbG9yaXplICplbmQqIGFjY29yZGluZyB0byBvcGVuaW5nIHN0YXRlbWVudAoraWYgIWV4aXN0cygicnVieV9ub19leHBlbnNpdmUiKQorICBzeW4gcmVnaW9uIHJ1YnlGdW5jdGlvbiAgICAgIG1hdGNoZ3JvdXA9cnVieURlZmluZSBzdGFydD0iXlxzKmRlZlxzIiBtYXRjaGdyb3VwPU5PTkUgZW5kPSJcemVcKFxzXHwoXHw7XHwkXCkiIHNraXA9IlwuXHxcKDo6XCkiIG9uZWxpbmUgZm9sZAorICBzeW4gcmVnaW9uIHJ1YnlDbGFzc09yTW9kdWxlIG1hdGNoZ3JvdXA9cnVieURlZmluZSBzdGFydD0iXlxzKlwoY2xhc3NcfG1vZHVsZVwpXHMiICAgZW5kPSI8XHwkXHw7XHxcPiJoZT1lLTEgb25lbGluZSBmb2xkCisKKyAgc3luIHJlZ2lvbiBydWJ5QmxvY2sgc3RhcnQ9Il5ccypkZWZcc1wrInJzPXMJCSAgIG1hdGNoZ3JvdXA9cnVieURlZmluZSBlbmQ9Ilw8ZW5kXD4iIGNvbnRhaW5zPUFMTEJVVCxydWJ5RXhwclN1YnN0LHJ1YnlUb2RvIG5leHRncm91cD1ydWJ5RnVuY3Rpb24gZm9sZAorICBzeW4gcmVnaW9uIHJ1YnlCbG9jayBzdGFydD0iXlxzKlwoY2xhc3NcfG1vZHVsZVwpXD4icnM9cyBtYXRjaGdyb3VwPXJ1YnlEZWZpbmUgZW5kPSJcPGVuZFw+IiBjb250YWlucz1BTExCVVQscnVieUV4cHJTdWJzdCxydWJ5VG9kbyBuZXh0Z3JvdXA9cnVieUNsYXNzT3JNb2R1bGUgZm9sZAorCisgICIgbW9kaWZpZXJzICsgcmVkdW5kYW50ICpkbyoKKyAgc3luIG1hdGNoICBydWJ5Q29udHJvbCAiXDxcKGlmXHx1bmxlc3NcfHdoaWxlXHx1bnRpbFx8ZG9cKVw+IgorCisgICIgKmRvKiByZXF1aXJpbmcgKmVuZCoKKyAgc3luIHJlZ2lvbiBydWJ5RG9CbG9jayBtYXRjaGdyb3VwPXJ1YnlDb250cm9sIHN0YXJ0PSJcPGRvXD4iIGVuZD0iXDxlbmRcPiIgY29udGFpbnM9QUxMQlVULHJ1YnlFeHByU3Vic3QscnVieVRvZG8gZm9sZAorCisgICIgKnsqIHJlcXVpcmluZyAqfSoKKyAgc3luIHJlZ2lvbiBydWJ5Q3VybHlCbG9jayBzdGFydD0ieyIgZW5kPSJ9IiBjb250YWlucz1BTExCVVQscnVieUV4cHJTdWJzdCxydWJ5VG9kbyBmb2xkCisKKyAgIiBzdGF0ZW1lbnRzIHdpdGhvdXQgKmRvKgorICBzeW4gcmVnaW9uIHJ1YnlOb0RvQmxvY2sgbWF0Y2hncm91cD1ydWJ5Q29udHJvbCBzdGFydD0iXDxcKGNhc2VcfGJlZ2luXClcPiIgc3RhcnQ9Il5ccypcKGlmXHx1bmxlc3NcKVw+IiBzdGFydD0iO1xzKlwoaWZcfHVubGVzc1wpXD4iaHM9cysxIGVuZD0iXDxlbmRcPiIgY29udGFpbnM9QUxMQlVULHJ1YnlFeHByU3Vic3QscnVieVRvZG8gZm9sZAorCisgICIgc3RhdGVtZW50IHdpdGggb3B0aW9uYWwgKmRvKgorICBzeW4gcmVnaW9uIHJ1YnlPcHREb0Jsb2NrIG1hdGNoZ3JvdXA9cnVieUNvbnRyb2wgc3RhcnQ9Ilw8Zm9yXD4iIHN0YXJ0PSJeXHMqXCh3aGlsZVx8dW50aWxcKVw+IiBzdGFydD0iO1xzKlwod2hpbGVcfHVudGlsXClcPiJocz1zKzEgZW5kPSJcPGVuZFw+IiBjb250YWlucz1BTExCVVQscnVieUV4cHJTdWJzdCxydWJ5VG9kbyxydWJ5RG9CbG9jayxydWJ5Q3VybHlCbG9jayBmb2xkCisKKyAgaWYgIWV4aXN0cygicnVieV9taW5saW5lcyIpCisgICAgbGV0IHJ1YnlfbWlubGluZXMgPSA1MAorICBlbmRpZgorICBleGVjICJzeW4gc3luYyBtaW5saW5lcz0iIC4gcnVieV9taW5saW5lcworCitlbHNlICIgbm90IEV4cGVuc2l2ZQorICBzeW4gcmVnaW9uICBydWJ5RnVuY3Rpb24gICAgICBtYXRjaGdyb3VwPXJ1YnlDb250cm9sIHN0YXJ0PSJeXHMqZGVmXHMiIG1hdGNoZ3JvdXA9Tk9ORSBlbmQ9Ilx6ZVwoXHNcfChcfDtcfCRcKSIgc2tpcD0iXC5cfFwoOjpcKSIgb25lbGluZSBmb2xkCisgIHN5biByZWdpb24gIHJ1YnlDbGFzc09yTW9kdWxlIG1hdGNoZ3JvdXA9cnVieUNvbnRyb2wgc3RhcnQ9Il5ccypcKGNsYXNzXHxtb2R1bGVcKVxzIiAgIGVuZD0iPFx8JFx8O1x8XD4iaGU9ZS0xIG9uZWxpbmUgZm9sZAorICBzeW4ga2V5d29yZCBydWJ5Q29udHJvbCBjYXNlIGJlZ2luIGRvIGZvciBpZiB1bmxlc3Mgd2hpbGUgdW50aWwgZW5kCitlbmRpZiAiIEV4cGVuc2l2ZT8KKworIiBLZXl3b3Jkcworc3luIGtleXdvcmQgcnVieUNvbnRyb2wgICB0aGVuIGVsc2UgZWxzaWYgd2hlbiBlbnN1cmUgcmVzY3VlCitzeW4ga2V5d29yZCBydWJ5Q29udHJvbCAgIGFuZCBvciBub3QgaW4gbG9vcAorc3luIGtleXdvcmQgcnVieUNvbnRyb2wgICBicmVhayByZWRvIHJldHJ5IG5leHQgcmV0dXJuCitzeW4gbWF0Y2ggICBydWJ5S2V5d29yZCAgICJcPGRlZmluZWQ/Igorc3luIGtleXdvcmQgcnVieUtleXdvcmQgICBhbGlhcyBsYW1iZGEgcHJvYyBzdXBlciB1bmRlZiB5aWVsZAorc3luIG1hdGNoICAgcnVieUluY2x1ZGUgICAiXlxzKmluY2x1ZGVcPiIKK3N5biBrZXl3b3JkIHJ1YnlJbmNsdWRlICAgbG9hZCByZXF1aXJlCitzeW4ga2V5d29yZCBydWJ5VG9kbyAgICAgIEZJWE1FIE5PVEUgVE9ETyBYWFggY29udGFpbmVkCitzeW4ga2V5d29yZCBydWJ5Qm9vbGVhbiAgIHRydWUgZmFsc2Ugc2VsZiBuaWwKK3N5biBrZXl3b3JkIHJ1YnlFeGNlcHRpb24gcmFpc2UgZmFpbCBjYXRjaCB0aHJvdworc3luIGtleXdvcmQgcnVieUJlZ2luRW5kICBCRUdJTiBFTkQKKworIiBDb21tZW50cyBhbmQgRG9jdW1lbnRhdGlvbgoraWYgdmVyc2lvbiA8IDYwMAorICBzeW4gbWF0Y2ggIHJ1YnlTaGFycEJhbmcgIiMhLioiCitlbHNlCisgIHN5biBtYXRjaCAgcnVieVNoYXJwQmFuZyAiXCVeIyEuKiIKK2VuZGlmCitzeW4gbWF0Y2ggIHJ1YnlDb21tZW50ICAgICAgICIjLioiIGNvbnRhaW5zPXJ1YnlUb2RvCitzeW4gcmVnaW9uIHJ1YnlEb2N1bWVudGF0aW9uIHN0YXJ0PSJePWJlZ2luIiBlbmQ9Il49ZW5kLiokIiBjb250YWlucz1ydWJ5VG9kbyBmb2xkCisKKyIgTm90ZTogdGhpcyBpcyBhIGhhY2sgdG8gcHJldmVudCAna2V5d29yZHMnIGJlaW5nIGhpZ2hsaWdodGVkIGFzIHN1Y2ggd2hlbiB1c2VkIGFzIG1ldGhvZCBuYW1lcworc3luIG1hdGNoIHJ1YnlLZXl3b3JkQXNNZXRob2QgIlwuXEA8IVwuXChccypcblxzKlwpKlwoYWxpYXNcfGFuZFx8YmVnaW5cfGJyZWFrXHxjYXNlXHxjYXRjaFx8Y2xhc3NcfGRlZlx8ZG9cfGVsc2lmXClcPiIgICAgICAgIHRyYW5zcGFyZW50IGNvbnRhaW5zPU5PTkUKK3N5biBtYXRjaCBydWJ5S2V5d29yZEFzTWV0aG9kICJcLlxAPCFcLlwoXHMqXG5ccypcKSpcKGVsc2VcfGZhaWxcfGZhbHNlXHxlbnN1cmVcfGZvclx8ZW5kXHxpZlx8aW5cfGluY2x1ZGVcfGxhbWJkYVwpXD4iICAgICAgICB0cmFuc3BhcmVudCBjb250YWlucz1OT05FCitzeW4gbWF0Y2ggcnVieUtleXdvcmRBc01ldGhvZCAiXC5cQDwhXC5cKFxzKlxuXHMqXCkqXChsb2FkXHxsb29wXHxtb2R1bGVcfG5leHRcfG5pbFx8bm90XHxvclx8cHJvY1x8cmFpc2VcfHJlcXVpcmVcKVw+IiAgICAgICAgdHJhbnNwYXJlbnQgY29udGFpbnM9Tk9ORQorc3luIG1hdGNoIHJ1YnlLZXl3b3JkQXNNZXRob2QgIlwuXEA8IVwuXChccypcblxzKlwpKlwocmVkb1x8cmVzY3VlXHxyZXRyeVx8cmV0dXJuXHxzZWxmXHxzdXBlclx8dGhlblx8dGhyb3dcfHRydWVcfHVubGVzc1wpXD4iIHRyYW5zcGFyZW50IGNvbnRhaW5zPU5PTkUKK3N5biBtYXRjaCBydWJ5S2V5d29yZEFzTWV0aG9kICJcLlxAPCFcLlwoXHMqXG5ccypcKSpcKHVuZGVmXHx1bnRpbFx8d2hlblx8d2hpbGVcfHlpZWxkXHxCRUdJTlx8RU5EXHxfX0ZJTEVfX1x8X19MSU5FX19cKVw+IiAgICB0cmFuc3BhcmVudCBjb250YWlucz1OT05FCisKKyIgX19FTkRfXyBEaXJlY3RpdmUKK3N5biByZWdpb24gcnVieURhdGEgbWF0Y2hncm91cD1ydWJ5RGF0YURpcmVjdGl2ZSBzdGFydD0iXl9fRU5EX18kIiBtYXRjaGdyb3VwPU5PTkUgZW5kPSIuIiBza2lwPSIuIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9ydWJ5X3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3J1Ynlfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgcnVieURlZmluZQkJCURlZmluZQorICBIaUxpbmsgcnVieUZ1bmN0aW9uCQkJRnVuY3Rpb24KKyAgSGlMaW5rIHJ1YnlDb250cm9sCQkJU3RhdGVtZW50CisgIEhpTGluayBydWJ5SW5jbHVkZQkJCUluY2x1ZGUKKyAgSGlMaW5rIHJ1YnlOdW1iZXIJCQlOdW1iZXIKKyAgSGlMaW5rIHJ1YnlCb29sZWFuCQkJQm9vbGVhbgorICBIaUxpbmsgcnVieUV4Y2VwdGlvbgkJCUV4Y2VwdGlvbgorICBIaUxpbmsgcnVieUNsYXNzT3JNb2R1bGUJCVR5cGUKKyAgSGlMaW5rIHJ1YnlJZGVudGlmaWVyCQkJSWRlbnRpZmllcgorICBIaUxpbmsgcnVieUNsYXNzVmFyaWFibGUJCXJ1YnlJZGVudGlmaWVyCisgIEhpTGluayBydWJ5Q29uc3RhbnQJCQlydWJ5SWRlbnRpZmllcgorICBIaUxpbmsgcnVieUdsb2JhbFZhcmlhYmxlCQlydWJ5SWRlbnRpZmllcgorICBIaUxpbmsgcnVieUl0ZXJhdG9yCQkJcnVieUlkZW50aWZpZXIKKyAgSGlMaW5rIHJ1YnlJbnN0YW5jZVZhcmlhYmxlCQlydWJ5SWRlbnRpZmllcgorICBIaUxpbmsgcnVieVByZWRlZmluZWRJZGVudGlmaWVyCXJ1YnlJZGVudGlmaWVyCisgIEhpTGluayBydWJ5UHJlZGVmaW5lZENvbnN0YW50CQlydWJ5UHJlZGVmaW5lZElkZW50aWZpZXIKKyAgSGlMaW5rIHJ1YnlQcmVkZWZpbmVkVmFyaWFibGUJCXJ1YnlQcmVkZWZpbmVkSWRlbnRpZmllcgorICBIaUxpbmsgcnVieVN5bWJvbAkJCXJ1YnlJZGVudGlmaWVyCisgIEhpTGluayBydWJ5U2hhcnBCYW5nCQkJUHJlUHJvYworICBIaUxpbmsgcnVieUtleXdvcmQJCQlLZXl3b3JkCisgIEhpTGluayBydWJ5QmVnaW5FbmQJCQlTdGF0ZW1lbnQKKworICBIaUxpbmsgcnVieVN0cmluZwkJCVN0cmluZworICBIaUxpbmsgcnVieVN0cmluZ0RlbGltaXQJCURlbGltaXRlcgorICBIaUxpbmsgcnVieUV4cHJTdWJzdAkJCVNwZWNpYWwKKworICBIaUxpbmsgcnVieUNvbW1lbnQJCQlDb21tZW50CisgIEhpTGluayBydWJ5RG9jdW1lbnRhdGlvbgkJQ29tbWVudAorICBIaUxpbmsgcnVieVRvZG8JCQlUb2RvCisgIEhpTGluayBydWJ5RGF0YQkJCUNvbW1lbnQKKyAgSGlMaW5rIHJ1YnlEYXRhRGlyZWN0aXZlCQlEZWxpbWl0ZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAicnVieSIKKworIiB2aW06IG5vd3JhcCB0YWJzdG9wPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NhbWJhLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NhbWJhLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGY3ZWRjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc2FtYmEudmltCkBAIC0wLDAgKzEsMTE3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJc2FtYmEgY29uZmlndXJhdGlvbiBmaWxlcyAoc21iLmNvbmYpCisiIE1haW50YWluZXI6CVJhZmFlbCBHYXJjaWEtU3VhcmV6IDxyZ2FyY2lhc3VhcmV6QGZyZWUuZnI+CisiIFVSTDoJCWh0dHA6Ly9yZ2FyY2lhc3VhcmV6LmZyZWUuZnIvdmltL3N5bnRheC9zYW1iYS52aW0KKyIgTGFzdCBjaGFuZ2U6CTIwMDIgTWF5IDA2CisKKyIgRG9uJ3QgZm9yZ2V0IHRvIHJ1biB5b3VyIGNvbmZpZyBmaWxlIHRocm91Z2ggdGVzdHBhcm0oMSkhCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKK3N5biBtYXRjaCBzYW1iYVBhcmFtZXRlciAvXlthLXpBLVogXHRdXCs9LyBjb250YWlucz1zYW1iYUtleXdvcmQKK3N5biBtYXRjaCBzYW1iYVNlY3Rpb24gL15ccypcW1thLXpBLVowLTlfXC0uIF1cK1xdLworc3luIG1hdGNoIHNhbWJhTWFjcm8gLyVbU1B1Z1VHSHZobUxNTnBSZGFJVF0vCitzeW4gbWF0Y2ggc2FtYmFNYWNybyAvJSQoW2EtekEtWjAtOV9dXCspLworc3luIG1hdGNoIHNhbWJhQ29tbWVudCAvXlxzKls7I10uKi8KK3N5biBtYXRjaCBzYW1iYUNvbnRpbnVlIC9cXCQvCitzeW4ga2V5d29yZCBzYW1iYUJvb2xlYW4gdHJ1ZSBmYWxzZSB5ZXMgbm8KKworIiBLZXl3b3JkcyBmb3IgU2FtYmEgMi4wLjVhCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIGFjY291bnQgYWNsIGFjdGlvbiBhZGQgYWRkcmVzcyBhZG1pbiBhbGlhc2VzCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIGFsbG93IGFsdGVybmF0ZSBhbHdheXMgYW5ub3VuY2UgYW5vbnltb3VzCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIGFyY2hpdmUgYXMgYXV0byBhdmFpbGFibGUgYmluZCBibG9ja2luZworc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBibXB4IGJyZWFrIGJyb3dzYWJsZSBicm93c2UgYnJvd3NlYWJsZSBjYQorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBjYWNoZSBjYXNlIGNhc2VzaWduYW1lcyBjZXJ0IGNlcnREaXIKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgY2VydEZpbGUgY2hhbmdlIGNoYXIgY2hhcmFjdGVyIGNoYXJzIGNoYXQKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgY2lwaGVycyBjbGllbnQgY2xpZW50Y2VydCBjb2RlIGNvZGluZworc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBjb21tYW5kIGNvbW1lbnQgY29tcGF0aWJpbGl0eSBjb25maWcKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgY29ubmVjdGlvbnMgY29udGVudGlvbiBjb250cm9sbGVyIGNvcHkKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgY3JlYXRlIGRlYWR0aW1lIGRlYnVnIGRlYnVnbGV2ZWwgZGVmYXVsdAorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBkZWxldGUgZGVueSBkZXNjZW5kIGRmcmVlIGRpciBkaXJlY3RvcnkKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgZGlzayBkbnMgZG9tYWluIGRvbWFpbnMgZG9udCBkb3MgZG90IGRyaXZlCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIGRyaXZlciBlbmNyeXB0IGVuY3J5cHRlZCBlcXVpdiBleGVjIGZha2UKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgZmlsZSBmaWxlcyBmaWxldGltZSBmaWxldGltZXMgZmlsdGVyIGZvbGxvdworc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBmb3JjZSBmc3R5cGUgZ2V0d2QgZ3JvdXAgZ3JvdXBzIGd1ZXN0CitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIGhpZGRlbiBoaWRlIGhvbWUgaG9tZWRpciBob3N0cyBpbmNsdWRlCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIGludGVyZmFjZXMgaW50ZXJ2YWwgaW52YWxpZCBrZWVwYWxpdmUKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQga2VybmVsIGtleSBsZGFwIGxlbmd0aCBsZXZlbCBsZXZlbDIgbGltaXQKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgbGlua3MgbGlzdCBsbSBsb2FkIGxvY2FsIGxvY2F0aW9uIGxvY2sKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgbG9ja2luZyBsb2NrcyBsb2cgbG9nb24gbG9nb25zIGxvZ3MgbHBwYXVzZQorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBscHEgbHByZXN1bWUgbHBybSBtYWNoaW5lIG1hZ2ljIG1hbmdsZQorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBtYW5nbGVkIG1hbmdsaW5nIG1hcCBtYXNrIG1hc3RlciBtYXggbWVtCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIG1lc3NhZ2UgbWluIG1vZGUgbW9kZXMgbXV4IG5hbWUgbmFtZXMKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgbmV0YmlvcyBuaXMgbm90aWZ5IG50IG51bGwgb2Zmc2V0IG9rIG9sZQorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBvbmx5IG9wZW4gb3Bsb2NrIG9wbG9ja3Mgb3B0aW9ucyBvcmRlciBvcworc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBvdXRwdXQgcGFja2V0IHBhZ2UgcGFuaWMgcGFzc3dkIHBhc3N3b3JkCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHBhc3N3b3JkcyBwYXRoIHBlcm1pc3Npb25zIHBpcGUgcG9ydAorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBwb3N0ZXhlYyBwb3N0c2NyaXB0IHByZWRpY3Rpb24gcHJlZXhlYworc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBwcmVmZXJlZCBwcmVmZXJyZWQgcHJlbG9hZCBwcmVzZXJ2ZSBwcmludAorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBwcmludGFibGUgcHJpbnRjYXAgcHJpbnRlciBwcmludGVycworc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBwcmludGluZyBwcm9ncmFtIHByb3RvY29sIHByb3h5IHB1YmxpYworc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBxdWV1ZXBhdXNlIHF1ZXVlcmVzdW1lIHJhdyByZWFkIHJlYWRvbmx5CitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHJlYWxuYW1lIHJlbW90ZSByZXF1aXJlIHJlc2lnbiByZXNvbHV0aW9uCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHJlc29sdmUgcmVzdHJpY3QgcmV2YWxpZGF0ZSByaG9zdHMgcm9vdAorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBzY3JpcHQgc2VjdXJpdHkgc2Vuc2l0aXZlIHNlcnZlciBzZXJ2ZXJjZXJ0CitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHNlcnZpY2Ugc2VydmljZXMgc2V0IHNoYXJlIHNoYXJlZCBzaG9ydAorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBzaXplIHNtYiBzbWJydW4gc29ja2V0IHNwYWNlIHNzbCBzdGFjayBzdGF0CitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHN0YXR1cyBzdHJpY3Qgc3RyaW5nIHN0cmlwIHN1ZmZpeCBzdXBwb3J0CitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHN5bWxpbmtzIHN5bmMgc3lzbG9nIHN5c3RlbSB0aW1lIHRpbWVvdXQKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgdGltZXMgdGltZXN0YW1wIHRvIHRydXN0ZWQgdHRsIHVuaXggdXBkYXRlCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHVzZSB1c2VyIHVzZXJuYW1lIHVzZXJzIHZhbGlkIHZlcnNpb24gdmV0bworc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCB2b2x1bWUgd2FpdCB3aWRlIHdpbnMgd29ya2dyb3VwIHdyaXRhYmxlCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHdyaXRlIHdyaXRlYWJsZSB4bWl0CisKKyIgTmV3IGtleXdvcmRzIGZvciBTYW1iYSAyLjAuNgorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBob29rIGhpcmVzIHBpZCB1aWQgY2xvc2Ugcm9vdHByZWV4ZWMKKworIiBOZXcga2V5d29yZHMgZm9yIFNhbWJhIDIuMC43CitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHV0bXAgd3RtcCBob3N0bmFtZSBjb25zb2xpZGF0ZQorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBpbmhlcml0IHNvdXJjZSBlbnZpcm9ubWVudAorCisiIE5ldyBrZXl3b3JkcyBmb3IgU2FtYmEgMi4yLjAKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgYWRkcHJpbnRlciBhdXRoIGJyb3dzaW5nIGRlbGV0ZXByaW50ZXIKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgZW5oYW5jZWQgZW51bXBvcnRzIGZpbGVtb2RlIGdpZCBob3N0IGpvYnMKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgbGFubWFuIG1zZGZzIG9iamVjdCBvczIgcG9zaXggcHJvY2Vzc2VzCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHNjb3BlIHNlcGFyYXRvciBzaGVsbCBzaG93IHNtYmQgdGVtcGxhdGUKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgdG90YWwgdmZzIHdpbmJpbmQgd2l6YXJkCisKKyIgTmV3IGtleXdvcmRzIGZvciBTYW1iYSAyLjIuMQorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBsYXJnZSBvYmV5IHBhbSByZWFkd3JpdGUgcmVzdHJpY3Rpb25zCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHVucmVhZGFibGUKKworIiBOZXcga2V5d29yZHMgZm9yIFNhbWJhIDIuMi4yIC0gMi4yLjQKK3N5biBrZXl3b3JkIHNhbWJhS2V5d29yZCBjb250YWluZWQgYWNscyBhbGxvY2F0ZSBieXRlcyBjb3VudCBjc2MgZGV2bW9kZQorc3luIGtleXdvcmQgc2FtYmFLZXl3b3JkIGNvbnRhaW5lZCBkaXNhYmxlIGRuIGVnZCBlbnRyb3B5IGVudW0gZXh0ZW5zaW9ucyBtbWFwCitzeW4ga2V5d29yZCBzYW1iYUtleXdvcmQgY29udGFpbmVkIHBvbGljeSBzcGluIHNwb29sc3MKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc2FtYmFfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc2FtYmFfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKyAgSGlMaW5rIHNhbWJhUGFyYW1ldGVyIE5vcm1hbAorICBIaUxpbmsgc2FtYmFLZXl3b3JkICAgVHlwZQorICBIaUxpbmsgc2FtYmFTZWN0aW9uICAgU3RhdGVtZW50CisgIEhpTGluayBzYW1iYU1hY3JvICAgICBQcmVQcm9jCisgIEhpTGluayBzYW1iYUNvbW1lbnQgICBDb21tZW50CisgIEhpTGluayBzYW1iYUNvbnRpbnVlICBPcGVyYXRvcgorICBIaUxpbmsgc2FtYmFCb29sZWFuICAgQ29uc3RhbnQKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNhbWJhIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc2FzLnZpbSBiL3J1bnRpbWUvc3ludGF4L3Nhcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlODc4OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3Nhcy52aW0KQEAgLTAsMCArMSwyMzYgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglTQVMKKyIgTWFpbnRhaW5lcjoJSmFtZXMgS2lkZCA8amFtZXMua2lkZEBjb3ZhbmNlLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CTAyIEp1biAyMDAzCisiCQlBZGRlZCBoaWdobGlnaHRpbmcgZm9yIGFkZGl0aW9uYWwga2V5d29yZHMgYW5kIHN1Y2g7CisiCQlBdHRlbXB0ZWQgdG8gbWF0Y2ggU0FTIGRlZmF1bHQgc3ludGF4IGNvbG9yczsKKyIJCUNoYW5nZWQgc3luY2luZyBzbyBpdCBkb2Vzbid0IGxvc2UgY29sb3JzIG9uIGxhcmdlIGJsb2NrczsKKyIJCU11Y2ggdGhhbmtzIHRvIEJvYiBIZWNrZWwgZm9yIGtub3dsZWRnZWFibGUgdHdlYWtpbmcuCisiICBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworc3luIHJlZ2lvbiBzYXNTdHJpbmcJc3RhcnQ9KyIrICBza2lwPStcXFxcXHxcXCIrICBlbmQ9KyIrCitzeW4gcmVnaW9uIHNhc1N0cmluZwlzdGFydD0rJysgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rJysKKworIiBXYW50IHJlZ2lvbiBmcm9tICdjYXJkczsnIHRvICc7JyB0byBiZSBjYXB0dXJlZCAoQm9iIEhlY2tlbCkKK3N5biByZWdpb24gc2FzQ2FyZHMJc3RhcnQ9Il5ccypDQVJEUy4qIiBlbmQ9Il5ccyo7XHMqJCIKK3N5biByZWdpb24gc2FzQ2FyZHMJc3RhcnQ9Il5ccypEQVRBTElORVMuKiIgZW5kPSJeXHMqO1xzKiQiCisKK3N5biBtYXRjaCBzYXNOdW1iZXIJIi1cPVw8XGQqXC5cPVswLTlfXVw+IgorCitzeW4gcmVnaW9uIHNhc0NvbW1lbnQJc3RhcnQ9Ii9cKiIgIGVuZD0iXCovIiBjb250YWlucz1zYXNUb2RvCisiIElnbm9yZSBtaXNsZWFkaW5nIC8vSkNMIFNZTlRBWC4uLiAoQm9iIEhlY2tlbCkKK3N5biByZWdpb24gc2FzQ29tbWVudAlzdGFydD0iW14vXVteL10vXCoiICBlbmQ9IlwqLyIgY29udGFpbnM9c2FzVG9kbworCisiIEFsbG93IGhpZ2hsaWdodGluZyBvZiBlbWJlZGRlZCBUT0RPcyAoQm9iIEhlY2tlbCkKK3N5biBtYXRjaCBzYXNDb21tZW50CSJeXHMqXCouKjsiIGNvbnRhaW5zPXNhc1RvZG8KKworIiBBbGxvdyBoaWdobGlnaHRpbmcgb2YgZW1iZWRkZWQgVE9ET3MgKEJvYiBIZWNrZWwpCitzeW4gbWF0Y2ggc2FzQ29tbWVudAkiO1xzKlwqLio7ImhzPXMrMSBjb250YWlucz1zYXNUb2RvCisKKyIgSGFuZGxlIG1hY3JvIGNvbW1lbnRzIHRvbyAoQm9iIEhlY2tlbCkuCitzeW4gbWF0Y2ggc2FzQ29tbWVudAkiXlxzKiUqXCouKjsiIGNvbnRhaW5zPXNhc1RvZG8KKworIiBUaGlzIGxpbmUgZGVmaW5lcyBtYWNybyB2YXJpYWJsZXMgaW4gY29kZS4gIEhpTGluayBhdCBlbmQgb2YgZmlsZQorIiBkZWZpbmVzIHRoZSBjb2xvciBzY2hlbWUuIEJlZ2luIHJlZ2lvbiB3aXRoIGFtcGVyc2FuZCBhbmQgZW5kIHdpdGgKKyIgYW55IG5vbi13b3JkIGNoYXJhY3RlciBvZmZzZXQgYnkgLTE7IHB1dCBhbXBlcnNhbmQgaW4gdGhlIHNraXAgbGlzdAorIiBqdXN0IGluIGNhc2UgaXQgaXMgdXNlZCB0byBjb25jYXRlbmF0ZSBtYWNybyB2YXJpYWJsZSB2YWx1ZXMuCisKKyIgVGhhbmtzIHRvIHJvbmFsZCBo9mxsd2FydGggZm9yIHRoaXMgZml4IHRvIGFuIGludHJhLXZlcnNpb25pbmcKKyIgcHJvYmxlbSB3aXRoIHRoaXMgbGl0dGxlIGZlYXR1cmUKKworaWYgdmVyc2lvbiA8IDYwMAorICAgc3luIHJlZ2lvbiBzYXNNYWNyb1ZhcglzdGFydD0iXCYiIHNraXA9IltfJl0iIGVuZD0iXFciaGU9ZS0xCitlbHNlCQkgIiBmb3IgdGhlIG9sZGVyIFZpbSdzIGp1c3QgZG8gaXQgdGhlaXIgd2F5IC4uLgorICAgc3luIHJlZ2lvbiBzYXNNYWNyb1ZhcglzdGFydD0iJiIgc2tpcD0iW18mXSIgZW5kPSJcVyJoZT1lLTEKK2VuZGlmCisKKworIiBJIGRvbnQgdGhpbmsgc3BlY2lmaWMgUFJPQ3MgbmVlZCB0byBiZSBsaXN0ZWQgaWYgdXNlIHRoaXMgbGluZSAoQm9iIEhlY2tlbCkuCitzeW4gbWF0Y2ggc2FzUHJvYwkJIl5ccypQUk9DIFx3XCsiCitzeW4ga2V5d29yZCBzYXNTdGVwCQlSVU4gUVVJVCBEQVRBCisKKworIiBCYXNlIFNBUyBQcm9jcyAtIHZlcnNpb24gOC4xCisKK3N5biBrZXl3b3JkIHNhc0NvbmRpdGlvbmFsCURPIEVMU0UgRU5EIElGIFRIRU4gVU5USUwgV0hJTEUKKworc3luIGtleXdvcmQgc2FzU3RhdGVtZW50CUFCT1JUIEFSUkFZIEFUVFJJQiBCWSBDQUxMIENBUkRTIENBUkRTNCBDQVROQU1FCitzeW4ga2V5d29yZCBzYXNTdGF0ZW1lbnQJQ09OVElOVUUgREFUQUxJTkVTIERBVEFMSU5FUzQgREVMRVRFIERJU1BMQVkKK3N5biBrZXl3b3JkIHNhc1N0YXRlbWVudAlETSBEUk9QIEVORFNBUyBFUlJPUiBGSUxFIEZJTEVOQU1FIEZPT1ROT1RFCitzeW4ga2V5d29yZCBzYXNTdGF0ZW1lbnQJRk9STUFUIEdPVE8gSU5GSUxFIElORk9STUFUIElOUFVUIEtFRVAKK3N5biBrZXl3b3JkIHNhc1N0YXRlbWVudAlMQUJFTCBMRUFWRSBMRU5HVEggTElCTkFNRSBMSU5LIExJU1QgTE9TVENBUkQKK3N5biBrZXl3b3JkIHNhc1N0YXRlbWVudAlNRVJHRSBNSVNTSU5HIE1PRElGWSBPUFRJT05TIE9VVFBVVCBQQUdFCitzeW4ga2V5d29yZCBzYXNTdGF0ZW1lbnQJUFVUIFJFRElSRUNUIFJFTU9WRSBSRU5BTUUgUkVQTEFDRSBSRVRBSU4KK3N5biBrZXl3b3JkIHNhc1N0YXRlbWVudAlSRVRVUk4gU0VMRUNUIFNFVCBTS0lQIFNUQVJUU0FTIFNUT1AgVElUTEUKK3N5biBrZXl3b3JkIHNhc1N0YXRlbWVudAlVUERBVEUgV0FJVFNBUyBXSEVSRSBXSU5ET1cgWCBTWVNUQVNLCisKKyIgS2V5d29yZHMgdGhhdCBhcmUgdXNlZCBpbiBQcm9jIFNRTAorIiBJIGxlZnQgdGhlbSBhcyBzdGF0ZW1lbnRzIGJlY2F1c2UgU0FTJ3MgZW5oYW5jZWQgZWRpdG9yIGhpZ2hsaWdodHMKKyIgdGhlbSB0aGUgc2FtZSBhcyBub3JtYWwgc3RhdGVtZW50cyB1c2VkIGluIGRhdGEgc3RlcHMgKEppbSBLaWRkKQorCitzeW4ga2V5d29yZCBzYXNTdGF0ZW1lbnQJQUREIEFORCBBTFRFUiBBUyBDQVNDQURFIENIRUNLIENSRUFURQorc3luIGtleXdvcmQgc2FzU3RhdGVtZW50CURFTEVURSBERVNDUklCRSBESVNUSU5DVCBEUk9QIEZPUkVJR04KK3N5biBrZXl3b3JkIHNhc1N0YXRlbWVudAlGUk9NIEdST1VQIEhBVklORyBJTkRFWCBJTlNFUlQgSU5UTyBJTgorc3luIGtleXdvcmQgc2FzU3RhdGVtZW50CUtFWSBMSUtFIE1FU1NBR0UgTU9ESUZZIE1TR1RZUEUgTk9UCitzeW4ga2V5d29yZCBzYXNTdGF0ZW1lbnQJTlVMTCBPTiBPUiBPUkRFUiBQUklNQVJZIFJFRkVSRU5DRVMKK3N5biBrZXl3b3JkIHNhc1N0YXRlbWVudAlSRVNFVCBSRVNUUklDVCBTRUxFQ1QgU0VUIFRBQkxFCitzeW4ga2V5d29yZCBzYXNTdGF0ZW1lbnQJVU5JUVVFIFVQREFURSBWQUxJREFURSBWSUVXIFdIRVJFCisKKworc3luIG1hdGNoIHNhc1N0YXRlbWVudAkiRk9PVE5PVEVcZCIgIlRJVExFXGQiCisKK3N5biBtYXRjaCBzYXNNYWNybwkiJUJRVU9URSIgIiVOUkJRVU9URSIgIiVDTVBSRVMiICIlUUNNUFJFUyIKK3N5biBtYXRjaCBzYXNNYWNybwkiJUNPTVBTVE9SIiAiJURBVEFUWVAiICIlRElTUExBWSIgIiVETyIKK3N5biBtYXRjaCBzYXNNYWNybwkiJUVMU0UiICIlRU5EIiAiJUVWQUwiICIlR0xPQkFMIgorc3luIG1hdGNoIHNhc01hY3JvCSIlR09UTyIgIiVJRiIgIiVJTkRFWCIgIiVJTlBVVCIKK3N5biBtYXRjaCBzYXNNYWNybwkiJUtFWURFRiIgIiVMQUJFTCIgIiVMRUZUIiAiJUxFTkdUSCIKK3N5biBtYXRjaCBzYXNNYWNybwkiJUxFVCIgIiVMT0NBTCIgIiVMT1dDQVNFIiAiJU1BQ1JPIgorc3luIG1hdGNoIHNhc01hY3JvCSIlTUVORCIgIiVOUkJRVU9URSIgIiVOUlFVT1RFIiAiJU5SU1RSIgorc3luIG1hdGNoIHNhc01hY3JvCSIlUFVUIiAiJVFDTVBSRVMiICIlUUxFRlQiICIlUUxPV0NBU0UiCitzeW4gbWF0Y2ggc2FzTWFjcm8JIiVRU0NBTiIgIiVRU1VCU1RSIiAiJVFTWVNGVU5DIiAiJVFUUklNIgorc3luIG1hdGNoIHNhc01hY3JvCSIlUVVPVEUiICIlUVVQQ0FTRSIgIiVTQ0FOIiAiJVNUUiIKK3N5biBtYXRjaCBzYXNNYWNybwkiJVNVQlNUUiIgIiVTVVBFUlEiICIlU1lTQ0FMTCIgIiVTWVNFVkFMRiIKK3N5biBtYXRjaCBzYXNNYWNybwkiJVNZU0VYRUMiICIlU1lTRlVOQyIgIiVTWVNHRVQiICIlU1lTTFBVVCIKK3N5biBtYXRjaCBzYXNNYWNybwkiJVNZU1BST0QiICIlU1lTUkMiICIlU1lTUlBVVCIgIiVUSEVOIgorc3luIG1hdGNoIHNhc01hY3JvCSIlVE8iICIlVFJJTSIgIiVVTlFVT1RFIiAiJVVOVElMIgorc3luIG1hdGNoIHNhc01hY3JvCSIlVVBDQVNFIiAiJVZFUklGWSIgIiVXSElMRSIgIiVXSU5ET1ciCisKKyIgU0FTIEZ1bmN0aW9ucworCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglBQlMgQUREUiBBSVJZIEFSQ09TIEFSU0lOIEFUQU4gQVRUUkMgQVRUUk4KK3N5biBrZXl3b3JkIHNhc0Z1bmN0aW9uCUJBTkQgQkVUQUlOViBCTFNISUZUIEJOT1QgQk9SIEJSU0hJRlQgQlhPUgorc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JQllURSBDREYgQ0VJTCBDRVhJU1QgQ0lOViBDTE9TRSBDTk9OQ1QgQ09MTEFURQorc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JQ09NUEJMIENPTVBPVU5EIENPTVBSRVNTIENPUyBDT1NIIENTUyBDVVJPQlMKK3N5biBrZXl3b3JkIHNhc0Z1bmN0aW9uCUNWIERBQ0NEQiBEQUNDREJTTCBEQUNDU0wgREFDQ1NZRCBEQUNDVEFCCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglEQUlSWSBEQVRFIERBVEVKVUwgREFURVBBUlQgREFURVRJTUUgREFZCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglEQ0xPU0UgREVQREIgREVQREJTTCBERVBEQlNMIERFUFNMIERFUFNMCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglERVBTWUQgREVQU1lEIERFUFRBQiBERVBUQUIgREVRVU9URSBESE1TCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglESUYgRElHQU1NQSBESU0gRElORk8gRE5VTSBET1BFTiBET1BUTkFNRQorc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JRE9QVE5VTSBEUkVBRCBEUk9QTk9URSBEU05BTUUgRVJGIEVSRkMgRVhJU1QKK3N5biBrZXl3b3JkIHNhc0Z1bmN0aW9uCUVYUCBGQVBQRU5EIEZDTE9TRSBGQ09MIEZERUxFVEUgRkVUQ0ggRkVUQ0hPQlMKK3N5biBrZXl3b3JkIHNhc0Z1bmN0aW9uCUZFWElTVCBGR0VUIEZJTEVFWElTVCBGSUxFTkFNRSBGSUxFUkVGIEZJTkZPCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglGSU5WIEZJUE5BTUUgRklQTkFNRUwgRklQU1RBVEUgRkxPT1IgRk5PTkNUCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglGTk9URSBGT1BFTiBGT1BUTkFNRSBGT1BUTlVNIEZQT0lOVCBGUE9TCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglGUFVUIEZSRUFEIEZSRVdJTkQgRlJMRU4gRlNFUCBGVVpaIEZXUklURQorc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JR0FNSU5WIEdBTU1BIEdFVE9QVElPTiBHRVRWQVJDIEdFVFZBUk4gSEJPVU5ECitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglITVMgSE9TVEhFTFAgSE9VUiBJQkVTU0VMIElOREVYIElOREVYQworc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JSU5ERVhXIElOUFVUIElOUFVUQyBJTlBVVE4gSU5UIElOVENLIElOVE5YCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglJTlRSUiBJUlIgSkJFU1NFTCBKVUxEQVRFIEtVUlRPU0lTIExBRyBMQk9VTkQKK3N5biBrZXl3b3JkIHNhc0Z1bmN0aW9uCUxFRlQgTEVOR1RIIExHQU1NQSBMSUJOQU1FIExJQlJFRiBMT0cgTE9HMTAKK3N5biBrZXl3b3JkIHNhc0Z1bmN0aW9uCUxPRzIgTE9HUERGIExPR1BNRiBMT0dTREYgTE9XQ0FTRSBNQVggTURZCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglNRUFOIE1JTiBNSU5VVEUgTU9EIE1PTlRIIE1PUEVOIE1PUlQgTgorc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JTkVUUFYgTk1JU1MgTk9STUFMIE5PVEUgTlBWIE9QRU4gT1JESU5BTAorc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JUEFUSE5BTUUgUERGIFBFRUsgUEVFS0MgUE1GIFBPSU5UIFBPSVNTT04gUE9LRQorc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JUFJPQkJFVEEgUFJPQkJOTUwgUFJPQkNISSBQUk9CRiBQUk9CR0FNCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglQUk9CSFlQUiBQUk9CSVQgUFJPQk5FR0IgUFJPQk5PUk0gUFJPQlQgUFVUCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglQVVRDIFBVVE4gUVRSIFFVT1RFIFJBTkJJTiBSQU5DQVUgUkFORVhQCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglSQU5HQU0gUkFOR0UgUkFOSyBSQU5OT1IgUkFOUE9JIFJBTlRCTCBSQU5UUkkKK3N5biBrZXl3b3JkIHNhc0Z1bmN0aW9uCVJBTlVOSSBSRVBFQVQgUkVTT0xWRSBSRVZFUlNFIFJFV0lORCBSSUdIVAorc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JUk9VTkQgU0FWSU5HIFNDQU4gU0RGIFNFQ09ORCBTSUdOIFNJTiBTSU5ICitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglTS0VXTkVTUyBTT1VOREVYIFNQRURJUyBTUVJUIFNURCBTVERFUlIgU1RGSVBTCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglTVE5BTUUgU1ROQU1FTCBTVUJTVFIgU1VNIFNZTUdFVCBTWVNHRVQgU1lTTVNHCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglTWVNQUk9EIFNZU1JDIFNZU1RFTSBUQU4gVEFOSCBUSU1FIFRJTUVQQVJUCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglUSU5WIFROT05DVCBUT0RBWSBUUkFOU0xBVEUgVFJBTldSRCBUUklHQU1NQQorc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JVFJJTSBUUklNTiBUUlVOQyBVTklGT1JNIFVQQ0FTRSBVU1MgVkFSCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglWQVJGTVQgVkFSSU5GTVQgVkFSTEFCRUwgVkFSTEVOIFZBUk5BTUUKK3N5biBrZXl3b3JkIHNhc0Z1bmN0aW9uCVZBUk5VTSBWQVJSQVkgVkFSUkFZWCBWQVJUWVBFIFZFUklGWSBWRk9STUFUCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglWRk9STUFURCBWRk9STUFURFggVkZPUk1BVE4gVkZPUk1BVE5YIFZGT1JNQVRXCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglWRk9STUFUV1ggVkZPUk1BVFggVklOQVJSQVkgVklOQVJSQVlYIFZJTkZPUk1BVAorc3luIGtleXdvcmQgc2FzRnVuY3Rpb24JVklORk9STUFURCBWSU5GT1JNQVREWCBWSU5GT1JNQVROIFZJTkZPUk1BVE5YCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglWSU5GT1JNQVRXIFZJTkZPUk1BVFdYIFZJTkZPUk1BVFggVkxBQkVMCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglWTEFCRUxYIFZMRU5HVEggVkxFTkdUSFggVk5BTUUgVk5BTUVYIFZUWVBFCitzeW4ga2V5d29yZCBzYXNGdW5jdGlvbglWVFlQRVggV0VFS0RBWSBZRUFSIFlZUSBaSVBGSVBTIFpJUE5BTUUgWklQTkFNRUwKK3N5biBrZXl3b3JkIHNhc0Z1bmN0aW9uCVpJUFNUQVRFCisKKyIgSGFuZHkgc2V0dGluZ3MgZm9yIHVzaW5nIHZpbSB3aXRoIGxvZyBmaWxlcworc3luIGtleXdvcmQgc2FzTG9nTXNnCU5PVEUKK3N5biBrZXl3b3JkIHNhc1dhcm5Nc2cJV0FSTklORworc3luIGtleXdvcmQgc2FzRXJyTXNnCUVSUk9SCisKKyIgQWx3YXlzIGNvbnRhaW5lZCBpbiBhIGNvbW1lbnQgKEJvYiBIZWNrZWwpCitzeW4ga2V5d29yZCBzYXNUb2RvCVRPRE8gVEJEIEZJWE1FIGNvbnRhaW5lZAorCisiIFRoZXNlIGRvbid0IGZpdCBhbnl3aGVyZSBlbHNlIChCb2IgSGVja2VsKS4KK3N5biBtYXRjaCBzYXNVbmRlcnNjb3JlCSJfTlVMTF8iCitzeW4gbWF0Y2ggc2FzVW5kZXJzY29yZQkiX0lORklMRV8iCitzeW4gbWF0Y2ggc2FzVW5kZXJzY29yZQkiX05fIgorc3luIG1hdGNoIHNhc1VuZGVyc2NvcmUJIl9XRUJPVVRfIgorc3luIG1hdGNoIHNhc1VuZGVyc2NvcmUJIl9OVU1FUklDXyIKK3N5biBtYXRjaCBzYXNVbmRlcnNjb3JlCSJfQ0hBUkFDVEVSXyIKK3N5biBtYXRjaCBzYXNVbmRlcnNjb3JlCSJfQUxMXyIKKworIiBFbmQgb2YgU0FTIEZ1bmN0aW9ucworCisiICBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiAgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiAgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3Nhc19zeW50YXhfaW5pdHMiKQorICAgaWYgdmVyc2lvbiA8IDUwOAorICAgICAgbGV0IGRpZF9zYXNfc3ludGF4X2luaXRzID0gMQorICAgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgIGVsc2UKKyAgICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgZW5kaWYKKworICAgIiBEZWZhdWx0IHNhcyBlbmhhbmNlZCBlZGl0b3IgY29sb3Igc3ludGF4CisJaGkgc0NvbW1lbnQJdGVybT1ib2xkIGN0ZXJtPU5PTkUgY3Rlcm1mZz1HcmVlbiBjdGVybWJnPUJsYWNrIGd1aT1OT05FIGd1aWZnPURhcmtHcmVlbiBndWliZz1XaGl0ZQorCWhpIHNDYXJkCXRlcm09Ym9sZCBjdGVybT1OT05FIGN0ZXJtZmc9QmxhY2sgY3Rlcm1iZz1ZZWxsb3cgZ3VpPU5PTkUgZ3VpZmc9QmxhY2sgZ3VpYmc9TGlnaHRZZWxsb3cKKwloaSBzRGF0ZV9UaW1lCXRlcm09Tk9ORSBjdGVybT1ib2xkIGN0ZXJtZmc9R3JlZW4gY3Rlcm1iZz1CbGFjayBndWk9Ym9sZCBndWlmZz1TZWFHcmVlbiBndWliZz1XaGl0ZQorCWhpIHNLZXl3b3JkCXRlcm09Tk9ORSBjdGVybT1OT05FIGN0ZXJtZmc9Qmx1ZSAgY3Rlcm1iZz1CbGFjayBndWk9Tk9ORSBndWlmZz1CbHVlIGd1aWJnPVdoaXRlCisJaGkgc0ZtdEluZm10CXRlcm09Tk9ORSBjdGVybT1OT05FIGN0ZXJtZmc9TGlnaHRHcmVlbiBjdGVybWJnPUJsYWNrIGd1aT1OT05FIGd1aWZnPVNlYUdyZWVuIGd1aWJnPVdoaXRlCisJaGkgc1N0cmluZwl0ZXJtPU5PTkUgY3Rlcm09Tk9ORSBjdGVybWZnPU1hZ2VudGEgY3Rlcm1iZz1CbGFjayBndWk9Tk9ORSBndWlmZz1QdXJwbGUgZ3VpYmc9V2hpdGUKKwloaSBzVGV4dAl0ZXJtPU5PTkUgY3Rlcm09Tk9ORSBjdGVybWZnPVdoaXRlIGN0ZXJtYmc9QmxhY2sgZ3VpPWJvbGQgZ3VpZmc9QmxhY2sgZ3VpYmc9V2hpdGUKKwloaSBzTnVtYmVyCXRlcm09Tk9ORSBjdGVybT1ib2xkIGN0ZXJtZmc9R3JlZW4gY3Rlcm1iZz1CbGFjayBndWk9Ym9sZCBndWlmZz1TZWFHcmVlbiBndWliZz1XaGl0ZQorCWhpIHNQcm9jCXRlcm09Tk9ORSBjdGVybT1ib2xkIGN0ZXJtZmc9Qmx1ZSBjdGVybWJnPUJsYWNrIGd1aT1ib2xkIGd1aWZnPU5hdnkgZ3VpYmc9V2hpdGUKKwloaSBzU2VjdGlvbgl0ZXJtPU5PTkUgY3Rlcm09Ym9sZCBjdGVybWZnPUJsdWUgY3Rlcm1iZz1CbGFjayBndWk9Ym9sZCBndWlmZz1OYXZ5IGd1aWJnPVdoaXRlCisJaGkgbURlZmluZQl0ZXJtPU5PTkUgY3Rlcm09Ym9sZCBjdGVybWZnPVdoaXRlIGN0ZXJtYmc9QmxhY2sgZ3VpPWJvbGQgZ3VpZmc9QmxhY2sgZ3VpYmc9V2hpdGUKKwloaSBtS2V5d29yZAl0ZXJtPU5PTkUgY3Rlcm09Tk9ORSBjdGVybWZnPUJsdWUgY3Rlcm1iZz1CbGFjayBndWk9Tk9ORSBndWlmZz1CbHVlIGd1aWJnPVdoaXRlCisJaGkgbVJlZmVyZW5jZQl0ZXJtPU5PTkUgY3Rlcm09Ym9sZCBjdGVybWZnPVdoaXRlIGN0ZXJtYmc9QmxhY2sgZ3VpPWJvbGQgZ3VpZmc9Qmx1ZSBndWliZz1XaGl0ZQorCWhpIG1TZWN0aW9uCXRlcm09Tk9ORSBjdGVybT1OT05FIGN0ZXJtZmc9Qmx1ZSBjdGVybWJnPUJsYWNrIGd1aT1ib2xkIGd1aWZnPU5hdnkgZ3VpYmc9V2hpdGUKKwloaSBtVGV4dAl0ZXJtPU5PTkUgY3Rlcm09Tk9ORSBjdGVybWZnPVdoaXRlIGN0ZXJtYmc9QmxhY2sgZ3VpPWJvbGQgZ3VpZmc9QmxhY2sgZ3VpYmc9V2hpdGUKKworIiBDb2xvcnMgdGhhdCBjbG9zZWx5IG1hdGNoIFNBUyBsb2cgY29sb3JzIGZvciBkZWZhdWx0IGNvbG9yIHNjaGVtZQorCWhpIGxFcnJvcgl0ZXJtPU5PTkUgY3Rlcm09Tk9ORSBjdGVybWZnPVJlZCBjdGVybWJnPUJsYWNrIGd1aT1ub25lIGd1aWZnPVJlZCBndWliZz1XaGl0ZQorCWhpIGxXYXJuaW5nCXRlcm09Tk9ORSBjdGVybT1OT05FIGN0ZXJtZmc9R3JlZW4gY3Rlcm1iZz1CbGFjayBndWk9bm9uZSBndWlmZz1HcmVlbiBndWliZz1XaGl0ZQorCWhpIGxOb3RlCXRlcm09Tk9ORSBjdGVybT1OT05FIGN0ZXJtZmc9Q3lhbiBjdGVybWJnPUJsYWNrIGd1aT1ub25lIGd1aWZnPUJsdWUgZ3VpYmc9V2hpdGUKKworCisgICAiIFNwZWNpYWwgaGlsaWdodGluZyBmb3IgdGhlIFNBUyBwcm9jIHNlY3Rpb24KKworCUhpTGluawlzYXNDb21tZW50CXNDb21tZW50CisJSGlMaW5rCXNhc0NvbmRpdGlvbmFsCXNLZXl3b3JkCisJSGlMaW5rCXNhc1N0ZXAJCXNTZWN0aW9uCisJSGlMaW5rCXNhc0Z1bmN0aW9uCXNLZXl3b3JkCisJSGlMaW5rCXNhc01hY3JvCW1LZXl3b3JkCisJSGlMaW5rCXNhc01hY3JvVmFyCU5vblRleHQKKwlIaUxpbmsJc2FzTnVtYmVyCXNOdW1iZXIKKwlIaUxpbmsJc2FzU3RhdGVtZW50CXNLZXl3b3JkCisJSGlMaW5rCXNhc1N0cmluZwlzU3RyaW5nCisJSGlMaW5rCXNhc1Byb2MJCXNQcm9jCisgICAiIChCb2IgSGVja2VsKQorCUhpTGluawlzYXNUb2RvCQlUb2RvCisJSGlMaW5rCXNhc0Vyck1zZwlsRXJyb3IKKwlIaUxpbmsJc2FzV2Fybk1zZwlsV2FybmluZworCUhpTGluawlzYXNMb2dNc2cJbE5vdGUKKwlIaUxpbmsJc2FzQ2FyZHMJc0NhcmQKKyAgIiAoQm9iIEhlY2tlbCkKKwlIaUxpbmsJc2FzVW5kZXJzY29yZQlQcmVQcm9jCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKKyIgU3luY3Jvbml6ZSBmcm9tIGJlZ2lubmluZyB0byBrZWVwIGxhcmdlIGJsb2NrcyBmcm9tIGxvc2luZworIiBzeW50YXggY29sb3Jpbmcgd2hpbGUgbW92aW5nIHRocm91Z2ggY29kZS4KK3N5biBzeW5jIGZyb21zdGFydAorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzYXMiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zYXRoZXIudmltIGIvcnVudGltZS9zeW50YXgvc2F0aGVyLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTk1OTFiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc2F0aGVyLnZpbQpAQCAtMCwwICsxLDEwNSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVNhdGhlci9wU2F0aGVyCisiIE1haW50YWluZXI6CUNsYXVkaW8gRmxlaW5lciA8Y2xhdWRpb0BmbGVpbmVyLmNvbT4KKyIgVVJMOgkJaHR0cDovL3d3dy5mbGVpbmVyLmNvbS92aW0vc3ludGF4L3NhdGhlci52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisKKyIgU2F0aGVyIGlzIGEgT08tbGFuZ3VhZ2UgZGV2ZWxvcHBlZCBhdCB0aGUgSW50ZXJuYXRpb25hbCBDb21wdXRlciBTY2llbmNlCisiIEluc3RpdHV0ZSAoSUNTSSkgaW4gQmVya2VsZXksIENBLiBwU2F0aGVyIGlzIGEgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIFNhdGhlci4KKyIgSG9tZXBhZ2U6IGh0dHA6Ly93d3cuaWNzaS5iZXJrZWxleS5lZHUvfnNhdGhlcgorIiBTYXRoZXIgZmlsZXMgdXNlIC5zYSBhcyBzdWZmaXgKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGtleXdvcmQgZGVmaW5pdGlvbnMKK3N5biBrZXl3b3JkIHNhdGhlckV4dGVybmFsCSBleHRlcm4KK3N5biBrZXl3b3JkIHNhdGhlckJyYW5jaAkgYnJlYWsgY29udGludWUKK3N5biBrZXl3b3JkIHNhdGhlckxhYmVsCQkgd2hlbiB0aGVuCitzeW4ga2V5d29yZCBzYXRoZXJDb25kaXRpb25hbAkgaWYgZWxzZSBlbHNpZiBlbmQgY2FzZSB0eXBlY2FzZSBhc3NlcnQgd2l0aAorc3luIG1hdGNoIHNhdGhlckNvbmRpdGlvbmFsCSAibmVhciQiCitzeW4gbWF0Y2ggc2F0aGVyQ29uZGl0aW9uYWwJICJmYXIkIgorc3luIG1hdGNoIHNhdGhlckNvbmRpdGlvbmFsCSAibmVhciAqW14oXSJoZT1lLTEKK3N5biBtYXRjaCBzYXRoZXJDb25kaXRpb25hbAkgImZhciAqW14oXSJoZT1lLTEKK3N5biBrZXl3b3JkIHNhdGhlclN5bmNocm9uaXplCSBsb2NrIGd1YXJkIHN5bmMKK3N5biBrZXl3b3JkIHNhdGhlclJlcGVhdAkgbG9vcCBwYXJsb29wIGRvCitzeW4gbWF0Y2ggc2F0aGVyUmVwZWF0CQkgIndoaWxlISIKK3N5biBtYXRjaCBzYXRoZXJSZXBlYXQJCSAiYnJlYWshIgorc3luIG1hdGNoIHNhdGhlclJlcGVhdAkJICJ1bnRpbCEiCitzeW4ga2V5d29yZCBzYXRoZXJCb29sVmFsdWUJIHRydWUgZmFsc2UKK3N5biBrZXl3b3JkIHNhdGhlclZhbHVlCQkgc2VsZiBoZXJlIGNsdXN0ZXIKK3N5biBrZXl3b3JkIHNhdGhlck9wZXJhdG9yCSBuZXcgIj09ICE9ICYgXiB8ICYmIHx8CitzeW4ga2V5d29yZCBzYXRoZXJPcGVyYXRvcgkgYW5kIG9yIG5vdAorc3luIG1hdGNoIHNhdGhlck9wZXJhdG9yCSAiWyMhXSIKK3N5biBtYXRjaCBzYXRoZXJPcGVyYXRvcgkgIjotIgorc3luIGtleXdvcmQgc2F0aGVyVHlwZQkJIHZvaWQgYXR0ciB3aGVyZQorc3luIG1hdGNoIHNhdGhlclR5cGUJICAgICAgICJuZWFyICooImhlPWUtMQorc3luIG1hdGNoIHNhdGhlclR5cGUJICAgICAgICJmYXIgKigiaGU9ZS0xCitzeW4ga2V5d29yZCBzYXRoZXJTdGF0ZW1lbnQJIHJldHVybgorc3luIGtleXdvcmQgc2F0aGVyU3RvcmFnZUNsYXNzCSBzdGF0aWMgY29uc3QKK3N5biBrZXl3b3JkIHNhdGhlckV4Y2VwdGlvbnMJIHRyeSByYWlzZSBjYXRjaAorc3luIGtleXdvcmQgc2F0aGVyTWV0aG9kRGVjbAkgaXMgcHJlIHBvc3QKK3N5biBrZXl3b3JkIHNhdGhlckNsYXNzRGVjbAkgYWJzdHJhY3QgdmFsdWUgY2xhc3MgaW5jbHVkZQorc3luIGtleXdvcmQgc2F0aGVyU2NvcGVEZWNsCSBwdWJsaWMgcHJpdmF0ZSByZWFkb25seQorCisKK3N5biBtYXRjaCAgIHNhdGhlclNwZWNpYWwJICAgIGNvbnRhaW5lZCAiXFxcZFxkXGRcfFxcLiIKK3N5biByZWdpb24gIHNhdGhlclN0cmluZwkgICAgc3RhcnQ9KyIrICBza2lwPStcXFxcXHxcXCIrICBlbmQ9KyIrICBjb250YWlucz1zYXRoZXJTcGVjaWFsCitzeW4gbWF0Y2ggICBzYXRoZXJDaGFyYWN0ZXIJICAgICInW15cXF0nIgorc3luIG1hdGNoICAgc2F0aGVyU3BlY2lhbENoYXJhY3RlciAgIidcXC4nIgorc3luIG1hdGNoICAgc2F0aGVyTnVtYmVyCSAgIi1cPVw8XGRcK0xcPVw+XHwwW3hYXVswLTlhLWZBLUZdXCtcPiIKK3N5biBtYXRjaCAgIHNhdGhlckNvbW1lbnRTa2lwCSAgY29udGFpbmVkICJeXHMqXCpcKCRcfFxzXCtcKSIKK3N5biByZWdpb24gIHNhdGhlckNvbW1lbnQyU3RyaW5nICBjb250YWluZWQgc3RhcnQ9KyIrICBza2lwPStcXFxcXHxcXCIrICBlbmQ9KyRcfCIrICBjb250YWlucz1zYXRoZXJTcGVjaWFsCitzeW4gbWF0Y2ggICBzYXRoZXJDb21tZW50CSAgIi0tLioiIGNvbnRhaW5zPXNhdGhlckNvbW1lbnQyU3RyaW5nLHNhdGhlckNoYXJhY3RlcixzYXRoZXJOdW1iZXIKKworCitzeW4gc3luYyBjY29tbWVudCBzYXRoZXJDb21tZW50CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3NhdGhlcl9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zYXRoZXJfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc2F0aGVyQnJhbmNoCQlzYXRoZXJTdGF0ZW1lbnQKKyAgSGlMaW5rIHNhdGhlckxhYmVsCQlzYXRoZXJTdGF0ZW1lbnQKKyAgSGlMaW5rIHNhdGhlckNvbmRpdGlvbmFsCXNhdGhlclN0YXRlbWVudAorICBIaUxpbmsgc2F0aGVyU3luY2hyb25pemUJc2F0aGVyU3RhdGVtZW50CisgIEhpTGluayBzYXRoZXJSZXBlYXQJCXNhdGhlclN0YXRlbWVudAorICBIaUxpbmsgc2F0aGVyRXhjZXB0aW9ucwlzYXRoZXJTdGF0ZW1lbnQKKyAgSGlMaW5rIHNhdGhlclN0b3JhZ2VDbGFzcwlzYXRoZXJEZWNsYXJhdGl2ZQorICBIaUxpbmsgc2F0aGVyTWV0aG9kRGVjbAlzYXRoZXJEZWNsYXJhdGl2ZQorICBIaUxpbmsgc2F0aGVyQ2xhc3NEZWNsCXNhdGhlckRlY2xhcmF0aXZlCisgIEhpTGluayBzYXRoZXJTY29wZURlY2wJc2F0aGVyRGVjbGFyYXRpdmUKKyAgSGlMaW5rIHNhdGhlckJvb2xWYWx1ZQlzYXRoZXJWYWx1ZQorICBIaUxpbmsgc2F0aGVyU3BlY2lhbAkJc2F0aGVyVmFsdWUKKyAgSGlMaW5rIHNhdGhlclN0cmluZwkJc2F0aGVyVmFsdWUKKyAgSGlMaW5rIHNhdGhlckNoYXJhY3RlcglzYXRoZXJWYWx1ZQorICBIaUxpbmsgc2F0aGVyU3BlY2lhbENoYXJhY3RlciBzYXRoZXJWYWx1ZQorICBIaUxpbmsgc2F0aGVyTnVtYmVyCQlzYXRoZXJWYWx1ZQorICBIaUxpbmsgc2F0aGVyU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgc2F0aGVyT3BlcmF0b3IJCVN0YXRlbWVudAorICBIaUxpbmsgc2F0aGVyQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgc2F0aGVyVHlwZQkJVHlwZQorICBIaUxpbmsgc2F0aGVyVmFsdWUJCVN0cmluZworICBIaUxpbmsgc2F0aGVyU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHNhdGhlclNwZWNpYWwJCVN0cmluZworICBIaUxpbmsgc2F0aGVyQ2hhcmFjdGVyCVN0cmluZworICBIaUxpbmsgc2F0aGVyRGVjbGFyYXRpdmUJVHlwZQorICBIaUxpbmsgc2F0aGVyRXh0ZXJuYWwJCVByZUNvbmRpdAorICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic2F0aGVyIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc2NoZW1lLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NjaGVtZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkZTM1YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NjaGVtZS52aW0KQEAgLTAsMCArMSwxODkgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglTY2hlbWUgKFI1UlMpCisiIE1haW50YWluZXI6CURpcmsgdmFuIERldW4gPGRpcmtAaWd3ZS52dWIuYWMuYmU+CisiIExhc3QgQ2hhbmdlOglBcHJpbCAzMCwgMTk5OAorCisiIFRoaXMgc2NyaXB0IGluY29ycmVjdGx5IHJlY29nbml6ZXMgc29tZSBqdW5rIGlucHV0IGFzIG51bWVyYWxzOgorIiBwYXJzaW5nIHRoZSBjb21wbGV0ZSBzeXN0ZW0gb2YgU2NoZW1lIG51bWVyYWxzIHVzaW5nIHRoZSBwYXR0ZXJuCisiIGxhbmd1YWdlIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGU6IEkgZGlkIGEgbGF4IGFwcHJveGltYXRpb24uCisKKyIgU3VnZ2VzdGlvbnMgYW5kIGJ1ZyByZXBvcnRzIGFyZSBzb2xpY2l0ZWQgYnkgdGhlIGF1dGhvci4KKworIiBJbml0aWFsaXppbmc6CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyIgRmFzY2lzdCBoaWdobGlnaHRpbmc6IGV2ZXJ5dGhpbmcgdGhhdCBkb2Vzbid0IGZpdCB0aGUgcnVsZXMgaXMgYW4gZXJyb3IuLi4KKworc3luIG1hdGNoCXNjaGVtZUVycm9yCW9uZWxpbmUgICAgIVteIFx0KCkiO10qIQorc3luIG1hdGNoCXNjaGVtZUVycm9yCW9uZWxpbmUgICAgIikiCisKKyIgUXVvdGVkIGFuZCBiYWNrcXVvdGVkIHN0dWZmCisKK3N5biByZWdpb24gc2NoZW1lUXVvdGVkIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJbJ2BdIiBlbmQ9IVsgXHQoKSI7XSFtZT1lLTEgY29udGFpbnM9QUxMQlVULHNjaGVtZVN0cnVjLHNjaGVtZVN5bnRheCxzY2hlbWVGdW5jCisKK3N5biByZWdpb24gc2NoZW1lUXVvdGVkIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJbJ2BdKCIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSIpIiBjb250YWlucz1BTExCVVQsc2NoZW1lU3RydWMsc2NoZW1lU3ludGF4LHNjaGVtZUZ1bmMKK3N5biByZWdpb24gc2NoZW1lUXVvdGVkIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJbJ2BdIygiIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iKSIgY29udGFpbnM9QUxMQlVULHNjaGVtZVN0cnVjLHNjaGVtZVN5bnRheCxzY2hlbWVGdW5jCisKK3N5biByZWdpb24gc2NoZW1lU3RydWNSZXN0cmljdGVkIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIoIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxzY2hlbWVTdHJ1YyxzY2hlbWVTeW50YXgsc2NoZW1lRnVuYworc3luIHJlZ2lvbiBzY2hlbWVTdHJ1Y1Jlc3RyaWN0ZWQgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IiMoIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxzY2hlbWVTdHJ1YyxzY2hlbWVTeW50YXgsc2NoZW1lRnVuYworCitzeW4gcmVnaW9uIHNjaGVtZVVucXVvdGUgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IiwiIGVuZD0hWyBcdCgpIjtdIW1lPWUtMSBjb250YWlucz1BTExCVVQsc2NoZW1lU3RydWMsc2NoZW1lU3ludGF4LHNjaGVtZUZ1bmMKK3N5biByZWdpb24gc2NoZW1lVW5xdW90ZSBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iLEAiIGVuZD0hWyBcdCgpIjtdIW1lPWUtMSBjb250YWlucz1BTExCVVQsc2NoZW1lU3RydWMsc2NoZW1lU3ludGF4LHNjaGVtZUZ1bmMKKworc3luIHJlZ2lvbiBzY2hlbWVVbnF1b3RlIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIsKCIgZW5kPSIpIiBjb250YWlucz1BTExCVVQsc2NoZW1lU3RydWMsc2NoZW1lU3ludGF4LHNjaGVtZUZ1bmMKK3N5biByZWdpb24gc2NoZW1lVW5xdW90ZSBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iLEAoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxzY2hlbWVTdHJ1YyxzY2hlbWVTeW50YXgsc2NoZW1lRnVuYworCitzeW4gcmVnaW9uIHNjaGVtZVVucXVvdGUgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IiwjKCIgZW5kPSIpIiBjb250YWlucz1BTExCVVQsc2NoZW1lU3RydWMsc2NoZW1lU3ludGF4LHNjaGVtZUZ1bmMKK3N5biByZWdpb24gc2NoZW1lVW5xdW90ZSBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iLEAjKCIgZW5kPSIpIiBjb250YWlucz1BTExCVVQsc2NoZW1lU3RydWMsc2NoZW1lU3ludGF4LHNjaGVtZUZ1bmMKKworIiBSNVJTIFNjaGVtZSBGdW5jdGlvbnMgYW5kIFN5bnRheDoKKworaWYgdmVyc2lvbiA8IDYwMAorICBzZXQgaXNrZXl3b3JkPTMzLDM1LTM5LDQyLTU4LDYwLTkwLDk0LDk1LDk3LTEyMiwxMjYsXworZWxzZQorICBzZXRsb2NhbCBpc2tleXdvcmQ9MzMsMzUtMzksNDItNTgsNjAtOTAsOTQsOTUsOTctMTIyLDEyNixfCitlbmRpZgorCitzeW4ga2V5d29yZCBzY2hlbWVTeW50YXggbGFtYmRhIGFuZCBvciBpZiBjb25kIGNhc2UgZGVmaW5lIGxldCBsZXQqIGxldHJlYworc3luIGtleXdvcmQgc2NoZW1lU3ludGF4IGJlZ2luIGRvIGRlbGF5IHNldCEgZWxzZSA9Pgorc3luIGtleXdvcmQgc2NoZW1lU3ludGF4IHF1b3RlIHF1YXNpcXVvdGUgdW5xdW90ZSB1bnF1b3RlLXNwbGljaW5nCitzeW4ga2V5d29yZCBzY2hlbWVTeW50YXggZGVmaW5lLXN5bnRheCBsZXQtc3ludGF4IGxldHJlYy1zeW50YXggc3ludGF4LXJ1bGVzCisKK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgbm90IGJvb2xlYW4/IGVxPyBlcXY/IGVxdWFsPyBwYWlyPyBjb25zIGNhciBjZHIgc2V0LWNhciEKK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgc2V0LWNkciEgY2FhciBjYWRyIGNkYXIgY2RkciBjYWFhciBjYWFkciBjYWRhciBjYWRkcgorc3luIGtleXdvcmQgc2NoZW1lRnVuYyBjZGFhciBjZGFkciBjZGRhciBjZGRkciBjYWFhYXIgY2FhYWRyIGNhYWRhciBjYWFkZHIKK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgY2FkYWFyIGNhZGFkciBjYWRkYXIgY2FkZGRyIGNkYWFhciBjZGFhZHIgY2RhZGFyIGNkYWRkcgorc3luIGtleXdvcmQgc2NoZW1lRnVuYyBjZGRhYXIgY2RkYWRyIGNkZGRhciBjZGRkZHIgbnVsbD8gbGlzdD8gbGlzdCBsZW5ndGgKK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgYXBwZW5kIHJldmVyc2UgbGlzdC1yZWYgbWVtcSBtZW12IG1lbWJlciBhc3NxIGFzc3YgYXNzb2MKK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgc3ltYm9sPyBzeW1ib2wtPnN0cmluZyBzdHJpbmctPnN5bWJvbCBudW1iZXI/IGNvbXBsZXg/CitzeW4ga2V5d29yZCBzY2hlbWVGdW5jIHJlYWw/IHJhdGlvbmFsPyBpbnRlZ2VyPyBleGFjdD8gaW5leGFjdD8gPSA8ID4gPD0gPj0KK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgemVybz8gcG9zaXRpdmU/IG5lZ2F0aXZlPyBvZGQ/IGV2ZW4/IG1heCBtaW4gKyAqIC0gLyBhYnMKK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgcXVvdGllbnQgcmVtYWluZGVyIG1vZHVsbyBnY2QgbGNtIG51bWVyYXRvciBkZW5vbWluYXRvcgorc3luIGtleXdvcmQgc2NoZW1lRnVuYyBmbG9vciBjZWlsaW5nIHRydW5jYXRlIHJvdW5kIHJhdGlvbmFsaXplIGV4cCBsb2cgc2luIGNvcworc3luIGtleXdvcmQgc2NoZW1lRnVuYyB0YW4gYXNpbiBhY29zIGF0YW4gc3FydCBleHB0IG1ha2UtcmVjdGFuZ3VsYXIgbWFrZS1wb2xhcgorc3luIGtleXdvcmQgc2NoZW1lRnVuYyByZWFsLXBhcnQgaW1hZy1wYXJ0IG1hZ25pdHVkZSBhbmdsZSBleGFjdC0+aW5leGFjdAorc3luIGtleXdvcmQgc2NoZW1lRnVuYyBpbmV4YWN0LT5leGFjdCBudW1iZXItPnN0cmluZyBzdHJpbmctPm51bWJlciBjaGFyPT8KK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgY2hhci1jaT0/IGNoYXI8PyBjaGFyLWNpPD8gY2hhcj4/IGNoYXItY2k+PyBjaGFyPD0/CitzeW4ga2V5d29yZCBzY2hlbWVGdW5jIGNoYXItY2k8PT8gY2hhcj49PyBjaGFyLWNpPj0/IGNoYXItYWxwaGFiZXRpYz8gY2hhcj8KK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgY2hhci1udW1lcmljPyBjaGFyLXdoaXRlc3BhY2U/IGNoYXItdXBwZXItY2FzZT8KK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgY2hhci1sb3dlci1jYXNlPworc3luIGtleXdvcmQgc2NoZW1lRnVuYyBjaGFyLT5pbnRlZ2VyIGludGVnZXItPmNoYXIgY2hhci11cGNhc2UgY2hhci1kb3duY2FzZQorc3luIGtleXdvcmQgc2NoZW1lRnVuYyBzdHJpbmc/IG1ha2Utc3RyaW5nIHN0cmluZyBzdHJpbmctbGVuZ3RoIHN0cmluZy1yZWYKK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgc3RyaW5nLXNldCEgc3RyaW5nPT8gc3RyaW5nLWNpPT8gc3RyaW5nPD8gc3RyaW5nLWNpPD8KK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgc3RyaW5nPj8gc3RyaW5nLWNpPj8gc3RyaW5nPD0/IHN0cmluZy1jaTw9PyBzdHJpbmc+PT8KK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgc3RyaW5nLWNpPj0/IHN1YnN0cmluZyBzdHJpbmctYXBwZW5kIHZlY3Rvcj8gbWFrZS12ZWN0b3IKK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgdmVjdG9yIHZlY3Rvci1sZW5ndGggdmVjdG9yLXJlZiB2ZWN0b3Itc2V0ISBwcm9jZWR1cmU/CitzeW4ga2V5d29yZCBzY2hlbWVGdW5jIGFwcGx5IG1hcCBmb3ItZWFjaCBjYWxsLXdpdGgtY3VycmVudC1jb250aW51YXRpb24KK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgY2FsbC13aXRoLWlucHV0LWZpbGUgY2FsbC13aXRoLW91dHB1dC1maWxlIGlucHV0LXBvcnQ/CitzeW4ga2V5d29yZCBzY2hlbWVGdW5jIG91dHB1dC1wb3J0PyBjdXJyZW50LWlucHV0LXBvcnQgY3VycmVudC1vdXRwdXQtcG9ydAorc3luIGtleXdvcmQgc2NoZW1lRnVuYyBvcGVuLWlucHV0LWZpbGUgb3Blbi1vdXRwdXQtZmlsZSBjbG9zZS1pbnB1dC1wb3J0CitzeW4ga2V5d29yZCBzY2hlbWVGdW5jIGNsb3NlLW91dHB1dC1wb3J0IGVvZi1vYmplY3Q/IHJlYWQgcmVhZC1jaGFyIHBlZWstY2hhcgorc3luIGtleXdvcmQgc2NoZW1lRnVuYyB3cml0ZSBkaXNwbGF5IG5ld2xpbmUgd3JpdGUtY2hhciBjYWxsL2NjCitzeW4ga2V5d29yZCBzY2hlbWVGdW5jIGxpc3QtdGFpbCBzdHJpbmctPmxpc3QgbGlzdC0+c3RyaW5nIHN0cmluZy1jb3B5CitzeW4ga2V5d29yZCBzY2hlbWVGdW5jIHN0cmluZy1maWxsISB2ZWN0b3ItPmxpc3QgbGlzdC0+dmVjdG9yIHZlY3Rvci1maWxsIQorc3luIGtleXdvcmQgc2NoZW1lRnVuYyBmb3JjZSB3aXRoLWlucHV0LWZyb20tZmlsZSB3aXRoLW91dHB1dC10by1maWxlCitzeW4ga2V5d29yZCBzY2hlbWVGdW5jIGNoYXItcmVhZHk/IGxvYWQgdHJhbnNjcmlwdC1vbiB0cmFuc2NyaXB0LW9mZiBldmFsCitzeW4ga2V5d29yZCBzY2hlbWVGdW5jIGR5bmFtaWMtd2luZCBwb3J0PyB2YWx1ZXMgY2FsbC13aXRoLXZhbHVlcworc3luIGtleXdvcmQgc2NoZW1lRnVuYyBzY2hlbWUtcmVwb3J0LWVudmlyb25tZW50IG51bGwtZW52aXJvbm1lbnQKK3N5biBrZXl3b3JkIHNjaGVtZUZ1bmMgaW50ZXJhY3Rpb24tZW52aXJvbm1lbnQKKworIiBXcml0aW5nIG91dCB0aGUgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgU2NoZW1lIG51bWVyYWxzIHdpdGhvdXQKKyIgdXNpbmcgdmFyaWFibGVzIGlzIGEgZGF5J3Mgd29yayBmb3IgYSB0cmFpbmVkIHNlY3JldGFyeS4uLgorIiBUaGlzIGlzIGEgdXNlZnVsIGxheCBhcHByb3hpbWF0aW9uOgorCitzeW4gbWF0Y2gJc2NoZW1lTnVtYmVyCW9uZWxpbmUgICAgIlstIyswLTkuXVstIysvMC05YS1mQGkuYm94ZXNmZGxdKiIKK3N5biBtYXRjaAlzY2hlbWVFcnJvcglvbmVsaW5lICAgICFbLSMrMC05Ll1bLSMrLzAtOWEtZkBpLmJveGVzZmRsXSpbXi0jKy8wLTlhLWZAaS5ib3hlc2ZkbCBcdCgpIjtdW14gXHQoKSI7XSohCisKK3N5biBtYXRjaAlzY2hlbWVPdGhlcglvbmVsaW5lICAgICFbKy1dWyBcdCgpIjtdIW1lPWUtMQorc3luIG1hdGNoCXNjaGVtZU90aGVyCW9uZWxpbmUgICAgIVsrLV0kIQorIiAuLi4gc28gdGhhdCBhIHNpbmdsZSArIG9yIC0sIGluc2lkZSBhIHF1b3RlZCBjb250ZXh0LCB3b3VsZCBub3QgYmUKKyIgaW50ZXJwcmV0ZWQgYXMgYSBudW1iZXIgKG91dHNpZGUgc3VjaCBjb250ZXh0cywgaXQncyBhIHNjaGVtZUZ1bmMpCisKK3N5biBtYXRjaAlzY2hlbWVEZWxpbWl0ZXIJb25lbGluZSAgICAhXC5bIFx0KCkiO10hbWU9ZS0xCitzeW4gbWF0Y2gJc2NoZW1lRGVsaW1pdGVyCW9uZWxpbmUgICAgIVwuJCEKKyIgLi4uIGFuZCBhIHNpbmdsZSBkb3QgaXMgbm90IGEgbnVtYmVyIGJ1dCBhIGRlbGltaXRlcgorCisiIFNpbXBsZSBsaXRlcmFsczoKKworc3luIG1hdGNoCXNjaGVtZUJvb2xlYW4Jb25lbGluZSAgICAiI1t0Zl0iCitzeW4gbWF0Y2gJc2NoZW1lRXJyb3IJb25lbGluZSAgICAhI1t0Zl1bXiBcdCgpIjtdXCshCisKK3N5biBtYXRjaAlzY2hlbWVDaGFyCW9uZWxpbmUgICAgIiNcXCIKK3N5biBtYXRjaAlzY2hlbWVDaGFyCW9uZWxpbmUgICAgIiNcXC4iCitzeW4gbWF0Y2ggICAgICAgc2NoZW1lRXJyb3IJb25lbGluZSAgICAhI1xcLlteIFx0KCkiO11cKyEKK3N5biBtYXRjaAlzY2hlbWVDaGFyCW9uZWxpbmUgICAgIiNcXHNwYWNlIgorc3luIG1hdGNoCXNjaGVtZUVycm9yCW9uZWxpbmUgICAgISNcXHNwYWNlW14gXHQoKSI7XVwrIQorc3luIG1hdGNoCXNjaGVtZUNoYXIJb25lbGluZSAgICAiI1xcbmV3bGluZSIKK3N5biBtYXRjaAlzY2hlbWVFcnJvcglvbmVsaW5lICAgICEjXFxuZXdsaW5lW14gXHQoKSI7XVwrIQorCisiIFRoaXMga2VlcHMgYWxsIG90aGVyIHN0dWZmIHVuaGlnaGxpZ2h0ZWQsIGV4Y2VwdCAqc3R1ZmYqIGFuZCA8c3R1ZmY+OgorCitzeW4gbWF0Y2gJc2NoZW1lT3RoZXIJb25lbGluZSAgICAsW2EteiEkJSYqLzo8PT4/Xl9+XVstYS16ISQlJiovOjw9Pj9eX34wLTkrLkBdKiwKK3N5biBtYXRjaAlzY2hlbWVFcnJvcglvbmVsaW5lICAgICxbYS16ISQlJiovOjw9Pj9eX35dWy1hLXohJCUmKi86PD0+P15ffjAtOSsuQF0qW14tYS16ISQlJiovOjw9Pj9eX34wLTkrLkAgXHQoKSI7XVwrW14gXHQoKSI7XSosCisKK3N5biBtYXRjaAlzY2hlbWVPdGhlcglvbmVsaW5lICAgICJcLlwuXC4iCitzeW4gbWF0Y2gJc2NoZW1lRXJyb3IJb25lbGluZSAgICAhXC5cLlwuW14gXHQoKSI7XVwrIQorIiAuLi4gYSBzcGVjaWFsIGlkZW50aWZpZXIKKworc3luIG1hdGNoCXNjaGVtZUNvbnN0YW50CW9uZWxpbmUgICAgLFwqWy1hLXohJCUmKi86PD0+P15ffjAtOSsuQF0qXCpbIFx0KCkiO10sbWU9ZS0xCitzeW4gbWF0Y2gJc2NoZW1lQ29uc3RhbnQJb25lbGluZSAgICAsXCpbLWEteiEkJSYqLzo8PT4/Xl9+MC05Ky5AXSpcKiQsCitzeW4gbWF0Y2gJc2NoZW1lRXJyb3IJb25lbGluZSAgICAsXCpbLWEteiEkJSYqLzo8PT4/Xl9+MC05Ky5AXSpcKlteLWEteiEkJSYqLzo8PT4/Xl9+MC05Ky5AIFx0KCkiO11cK1teIFx0KCkiO10qLAorCitzeW4gbWF0Y2gJc2NoZW1lQ29uc3RhbnQJb25lbGluZSAgICAsPFstYS16ISQlJiovOjw9Pj9eX34wLTkrLkBdKj5bIFx0KCkiO10sbWU9ZS0xCitzeW4gbWF0Y2gJc2NoZW1lQ29uc3RhbnQJb25lbGluZSAgICAsPFstYS16ISQlJiovOjw9Pj9eX34wLTkrLkBdKj4kLAorc3luIG1hdGNoCXNjaGVtZUVycm9yCW9uZWxpbmUgICAgLDxbLWEteiEkJSYqLzo8PT4/Xl9+MC05Ky5AXSo+W14tYS16ISQlJiovOjw9Pj9eX34wLTkrLkAgXHQoKSI7XVwrW14gXHQoKSI7XSosCisKKyIgTm9uLXF1b3RlZCBsaXN0cywgYW5kIHN0cmluZ3M6CisKK3N5biByZWdpb24gc2NoZW1lU3RydWMgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IigiIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iKSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIHNjaGVtZVN0cnVjIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIjKCIgbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSIpIiBjb250YWlucz1BTEwKKworc3luIHJlZ2lvbglzY2hlbWVTdHJpbmcJc3RhcnQ9KyIrICBza2lwPStcXFtcXCJdKyBlbmQ9KyIrCisKKyIgQ29tbWVudHM6CisKK3N5biBtYXRjaAlzY2hlbWVDb21tZW50CSI7LiokIgorCisiIFN5bmNocm9uaXphdGlvbiBhbmQgdGhlIHdyYXBwaW5nIHVwLi4uCisKK3N5biBzeW5jIG1hdGNoIG1hdGNoUGxhY2UgZ3JvdXBoZXJlIE5PTkUgIl5bXiBcdF0iCisiIC4uLiBpLmUuIHN5bmNocm9uaXplIG9uIGEgbGluZSB0aGF0IHN0YXJ0cyBhdCB0aGUgbGVmdCBtYXJnaW4KKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc2NoZW1lX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3NjaGVtZV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBzY2hlbWVTeW50YXgJCVN0YXRlbWVudAorICBIaUxpbmsgc2NoZW1lRnVuYwkJRnVuY3Rpb24KKworICBIaUxpbmsgc2NoZW1lU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHNjaGVtZUNoYXIJCUNoYXJhY3RlcgorICBIaUxpbmsgc2NoZW1lTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHNjaGVtZUJvb2xlYW4JCUJvb2xlYW4KKworICBIaUxpbmsgc2NoZW1lRGVsaW1pdGVyCURlbGltaXRlcgorICBIaUxpbmsgc2NoZW1lQ29uc3RhbnQJQ29uc3RhbnQKKworICBIaUxpbmsgc2NoZW1lQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgc2NoZW1lRXJyb3IJCUVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNjaGVtZSIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NjaWxhYi52aW0gYi9ydW50aW1lL3N5bnRheC9zY2lsYWIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZmMwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zY2lsYWIudmltCkBAIC0wLDAgKzEsMTE1IEBACisiCisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZSAgIDoJU2NpbGFiCisiIE1haW50YWluZXIgOglCZW5vaXQgSGFtZWxpbgorIiBGaWxlIHR5cGUgIDoJKi5zY2kgKHNlZSA6aGVscCBmaWxldHlwZSkKKyIgSGlzdG9yeQorIgkyOGphbjIwMDIJYmVub2l0aAkJMC4xCQlDcmVhdGlvbi4gIEFkYXB0ZWQgZnJvbSBtYXRsYWIudmltLgorIgkwNGZlYjIwMDIJYmVub2l0aAkJMC41CQlGaXhlZCBidWdzIHdpdGggY29uc3RhbnQgaGlnaGxpZ2h0aW5nLgorIgorCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworCisiIFJlc2VydmVkIHdvcmRzLgorc3luIGtleXdvcmQgc2NpbGFiU3RhdGVtZW50CQkJYWJvcnQgY2xlYXIgY2xlYXJnbG9iYWwgZW5kIGV4aXQgZ2xvYmFsIG1vZGUgcHJlZGVmIHF1aXQgcmVzdW1lCitzeW4ga2V5d29yZCBzY2lsYWJTdGF0ZW1lbnQJCQlyZXR1cm4KK3N5biBrZXl3b3JkIHNjaWxhYkZ1bmN0aW9uCQkJZnVuY3Rpb24gZW5kZnVuY3Rpb24gZnVucHRyCitzeW4ga2V5d29yZCBzY2lsYWJQcmVkaWNhdGUJCQludWxsIGlzZXJyb3IgaXNnbG9iYWwKK3N5biBrZXl3b3JkIHNjaWxhYktleXdvcmQJCQl0eXBlbmFtZQorc3luIGtleXdvcmQgc2NpbGFiRGVidWcJCQkJZGVidWcgcGF1c2Ugd2hhdCB3aGVyZSB3aGVyZWFtaSB3aGVyZWlzIHdobyB3aG9zCitzeW4ga2V5d29yZCBzY2lsYWJSZXBlYXQJCQlmb3Igd2hpbGUgYnJlYWsKK3N5biBrZXl3b3JkIHNjaWxhYkNvbmRpdGlvbmFsCQlpZiB0aGVuIGVsc2UgZWxzZWlmCitzeW4ga2V5d29yZCBzY2lsYWJNdWx0aXBsZXgJCQlzZWxlY3QgY2FzZQorCisiIFJlc2VydmVkIGNvbnN0YW50cy4KK3N5biBtYXRjaCBzY2lsYWJDb25zdGFudAkJCSJcKCVcKVswLTlBLVphLXo/ISMkXVwrIgorc3luIG1hdGNoIHNjaWxhYkJvb2xlYW4JCQkJIlwoJVwpW0ZUZnRdXD4iCisKKyIgRGVsaW1pdGVycyBhbmQgb3BlcmF0b3JzLgorc3luIG1hdGNoIHNjaWxhYkRlbGltaXRlcgkJCSJbXVs7LCgpXSIKK3N5biBtYXRjaCBzY2lsYWJDb21wYXJpc29uCQkJIls9fl09Igorc3luIG1hdGNoIHNjaWxhYkNvbXBhcmlzb24JCQkiWzw+XT1cPSIKK3N5biBtYXRjaCBzY2lsYWJDb21wYXJpc29uCQkJIjw+Igorc3luIG1hdGNoIHNjaWxhYkxvZ2ljYWwJCQkJIlsmfH5dIgorc3luIG1hdGNoIHNjaWxhYkFzc2lnbm1lbnQJCQkiPSIKK3N5biBtYXRjaCBzY2lsYWJBcml0aG1ldGljCQkJIlsrLV0iCitzeW4gbWF0Y2ggc2NpbGFiQXJpdGhtZXRpYwkJCSJcLlw9WyovXFxdXC5cPSIKK3N5biBtYXRjaCBzY2lsYWJBcml0aG1ldGljCQkJIlwuXD1eIgorc3luIG1hdGNoIHNjaWxhYlJhbmdlCQkJCSI6Igorc3luIG1hdGNoIHNjaWxhYk1saXN0QWNjZXNzCQkJIlwuIgorCitzeW4gbWF0Y2ggc2NpbGFiTGluZUNvbnRpbnVhdGlvbgkiXC5cezIsfSIKKworc3luIG1hdGNoIHNjaWxhYlRyYW5zcG9zaXRpb24JCSJbXSlhLXpBLVowLTk/IV8jJC5dJyJsYz0xCisKKyIgQ29tbWVudHMgYW5kIHRvb2xzLgorc3luIGtleXdvcmQgc2NpbGFiVG9kbwkJCQlUT0RPIHRvZG8gRklYTUUgZml4bWUgVEJEIHRiZAljb250YWluZWQKK3N5biBtYXRjaCBzY2lsYWJDb21tZW50CQkJCSIvLy4qJCIJY29udGFpbnM9c2NpbGFiVG9kbworCisiIENvbnN0YW50cy4KK3N5biBtYXRjaCBzY2lsYWJOdW1iZXIJCQkJIlswLTldXCtcKFwuWzAtOV0qXClcPVwoW0RFZGVdWystXVw9WzAtOV1cK1wpXD0iCitzeW4gbWF0Y2ggc2NpbGFiTnVtYmVyCQkJCSJcLlswLTldXCtcKFtERWRlXVsrLV1cPVswLTldXCtcKVw9Igorc3luIHJlZ2lvbiBzY2lsYWJTdHJpbmcJCQkJc3RhcnQ9KycrIHNraXA9KycnKyBlbmQ9KycrCQlvbmVsaW5lCitzeW4gcmVnaW9uIHNjaWxhYlN0cmluZwkJCQlzdGFydD0rIisgZW5kPSsiKwkJCQlvbmVsaW5lCisKKyIgSWRlbnRpZmllcnMuCitzeW4gbWF0Y2ggc2NpbGFiSWRlbnRpZmllcgkJCSJcPFtBLVphLXo/IV8jJF1bQS1aYS16MC05PyFfIyRdKlw+Igorc3luIG1hdGNoIHNjaWxhYk92ZXJsb2FkCQkJIiVbQS1aYS16MC05PyFfIyRdXCtfW0EtWmEtejAtOT8hXyMkXVwrIgorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3NjaWxhYl9zeW50YXhfaW5pdHMiKQorCWlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9zY2lsYWJfc3ludGF4X2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluawlzY2lsYWJTdGF0ZW1lbnQJCQkJU3RhdGVtZW50CisJSGlMaW5rCXNjaWxhYkZ1bmN0aW9uCQkJCUtleXdvcmQKKwlIaUxpbmsJc2NpbGFiUHJlZGljYXRlCQkJCUtleXdvcmQKKwlIaUxpbmsJc2NpbGFiS2V5d29yZAkJCQlLZXl3b3JkCisJSGlMaW5rCXNjaWxhYkRlYnVnCQkJCQlEZWJ1ZworCUhpTGluawlzY2lsYWJSZXBlYXQJCQkJUmVwZWF0CisJSGlMaW5rCXNjaWxhYkNvbmRpdGlvbmFsCQkJQ29uZGl0aW9uYWwKKwlIaUxpbmsJc2NpbGFiTXVsdGlwbGV4CQkJCUNvbmRpdGlvbmFsCisKKwlIaUxpbmsJc2NpbGFiQ29uc3RhbnQJCQkJQ29uc3RhbnQKKwlIaUxpbmsJc2NpbGFiQm9vbGVhbgkJCQlCb29sZWFuCisKKwlIaUxpbmsJc2NpbGFiRGVsaW1pdGVyCQkJCURlbGltaXRlcgorCUhpTGluawlzY2lsYWJNbGlzdEFjY2VzcwkJCURlbGltaXRlcgorCUhpTGluawlzY2lsYWJDb21wYXJpc29uCQkJT3BlcmF0b3IKKwlIaUxpbmsJc2NpbGFiTG9naWNhbAkJCQlPcGVyYXRvcgorCUhpTGluawlzY2lsYWJBc3NpZ25tZW50CQkJT3BlcmF0b3IKKwlIaUxpbmsJc2NpbGFiQXJpdGhtZXRpYwkJCU9wZXJhdG9yCisJSGlMaW5rCXNjaWxhYlJhbmdlCQkJCQlPcGVyYXRvcgorCUhpTGluawlzY2lsYWJMaW5lQ29udGludWF0aW9uCQlVbmRlcmxpbmVkCisJSGlMaW5rCXNjaWxhYlRyYW5zcG9zaXRpb24JCQlPcGVyYXRvcgorCisJSGlMaW5rCXNjaWxhYlRvZG8JCQkJCVRvZG8KKwlIaUxpbmsJc2NpbGFiQ29tbWVudAkJCQlDb21tZW50CisKKwlIaUxpbmsJc2NpbGFiTnVtYmVyCQkJCU51bWJlcgorCUhpTGluawlzY2lsYWJTdHJpbmcJCQkJU3RyaW5nCisKKwlIaUxpbmsJc2NpbGFiSWRlbnRpZmllcgkJCUlkZW50aWZpZXIKKwlIaUxpbmsJc2NpbGFiT3ZlcmxvYWQJCQkJU3BlY2lhbAorCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNjaWxhYiIKKworIkVPRgl2aW06IHRzPTQgbm9ldCB0dz0xMDAgc3c9NCBzdHM9MApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc2NyZWVuLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NjcmVlbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmNzRmMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NjcmVlbi52aW0KQEAgLTAsMCArMSw5MyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBTY3JlZW4gVmlydHVhbCBUZXJtaW5hbCBFbXVsYXRvci9NYW5hZ2VyIENvbmZpZ3VyYXRpb24gRmlsZQorIiBNYWludGFpbmVyOgkgICAgTmlrb2xhaSBXZWlidWxsIDxzb3VyY2VAcGNwcG9wcGVyLm9yZz4KKyIgVVJMOgkJICAgIGh0dHA6Ly93d3cucGNwcG9wcGVyLm9yZy92aW0vc3ludGF4L3BjcC9zY3JlZW4vCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDUtMjIKKyIgYXJjaC10YWc6CSAgICA2YTk3ZmI4Zi1mYzg4LTQ5N2YtOWM1NS1lOTQ2NzM0YmEwMzQKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgY29tbWVudHMKK3N5biByZWdpb24gIHNjcmVlbkNvbW1lbnQJbWF0Y2hncm91cD1zY3JlZW5Db21tZW50IHN0YXJ0PSIjIiBlbmQ9IiQiIGNvbnRhaW5zPXNjcmVlblRvZG8KKworIiB0b2RvCitzeW4ga2V5d29yZCBzY3JlZW5Ub2RvCQljb250YWluZWQgVE9ETyBGSVhNRSBYWFggTk9URQorCisiIHN0cmluZyAoY2FuIGNvbnRhaW4gdmFyaWFibGVzKQorc3luIHJlZ2lvbiAgc2NyZWVuU3RyaW5nCW1hdGNoZ3JvdXA9c2NyZWVuU3RyaW5nIHN0YXJ0PSciJyBza2lwPSdcXCInIGVuZD0nIlx8JCcgY29udGFpbnM9c2NyZWVuVmFyaWFibGUsc2NyZWVuU3BlY2lhbAorCisiIGxpdGVyYWwgc3RyaW5nCitzeW4gcmVnaW9uICBzY3JlZW5MaXRlcmFsCW1hdGNoZ3JvdXA9c2NyZWVuTGl0ZXJhbCBzdGFydD0iJyIgc2tpcD0iXFwnIiBlbmQ9IidcfCQiCisKKyIgZW52aXJvbm1lbnQgdmFyaWFibGVzCitzeW4gbWF0Y2ggICBzY3JlZW5WYXJpYWJsZQljb250YWluZWQgIiRcKFxoXHcqXHx7XGhcdyp9XCkiCisKKyIgYm9vbGVhbnMKK3N5biBrZXl3b3JkIHNjcmVlbkJvb2xlYW4Jb24gb2ZmCisKKyIgbnVtYmVycworc3luIG1hdGNoICAgc2NyZWVuTnVtYmVycwkiXDxcZFwrXD4iCisKKyIgc3BlY2lhbHMKK3N5biBtYXRjaCAgIHNjcmVlblNwZWNpYWxzCWNvbnRhaW5lZCAiJVwoWyVhQWREaGxtTXN0dXdXeVk/OntdXHxbMC05XSpuXHwwP2NDXCkiCisKKyIgY29tbWFuZHMKK3N5biBrZXl3b3JkIHNjcmVlbkNvbW1hbmRzCWFjbGFkZCBhY2xjaGcgYWNsZGVsIGFjbGdycCBhY2x1bWFzayBhY3Rpdml0eSBhZGRhY2wgYWxscGFydGlhbCBhdCBhdHRyY29sb3IKK3N5biBrZXl3b3JkIHNjcmVlbkNvbW1hbmRzCWF1dG9kZXRhY2ggYmVsbF9tc2cgYmluZCBiaW5ka2V5IGJ1ZmZlcmZpbGUgY2FwdGlvbiBjaGFjbCBjaGRpciBjbGVhciBjb2xvbgorc3luIGtleXdvcmQgc2NyZWVuQ29tbWFuZHMJY29tbWFuZCBjb21wYWN0aGlzdCBjb25zb2xlIGNvcHkgY29weV9yZWdjcmxmIGRlYnVnIGRldGFjaCBkaWdyYXBoIGRpbmZvIGNybGYKK3N5biBrZXl3b3JkIHNjcmVlbkNvbW1hbmRzCWRpc3BsYXlzIGR1bXB0ZXJtY2FwIGVjaG8gZXhlYyBmaXQgZm9jdXMgaGVpZ2h0IGhlbHAgaGlzdG9yeQorc3luIGtleXdvcmQgc2NyZWVuQ29tbWFuZHMJaW5mbyBraWxsIGxhc3Rtc2cgbGljZW5zZSBsb2Nrc2NyZWVuIG1hcmtrZXlzIG1ldGEgbXNnbWlud2FpdCBtc2d3YWl0CitzeW4ga2V5d29yZCBzY3JlZW5Db21tYW5kcwltdWx0aXVzZXIgbmV0aGFjayBuZXh0IG5vbmJsb2NrIG51bWJlciBvbmx5IG90aGVyIHBhcnRpYWxfc3RhdGUKK3N5biBrZXl3b3JkIHNjcmVlbkNvbW1hbmRzCXBhc3N3b3JkIHBhc3RlIHBhc3RlZm9udCBwb3dfYnJlYWsgcG93X2RldGFjaF9tc2cgcHJldiBwcmludGNtZCBwcm9jZXNzCitzeW4ga2V5d29yZCBzY3JlZW5Db21tYW5kcwlxdWl0IHJlYWRidWYgcmVhZHJlZyByZWRpc3BsYXkgcmVnaXN0ZXIgcmVtb3ZlIHJlbW92ZWJ1ZiByZXNldCByZXNpemUgc2NyZWVuCitzeW4ga2V5d29yZCBzY3JlZW5Db21tYW5kcwlzZWxlY3Qgc2Vzc2lvbm5hbWUgc2V0ZW52IHNoZWxsdGl0bGUgc2lsZW5jZXdhaXQgdmVyYm9zZQorc3luIGtleXdvcmQgc2NyZWVuQ29tbWFuZHMJc2xlZXAgc29yZW5kaXRpb24gc3BsaXQgc3RhcnR1cF9tZXNzYWdlIHN0dWZmIHN1IHN1c3BlbmQgdGltZQorc3luIGtleXdvcmQgc2NyZWVuQ29tbWFuZHMJdGl0bGUgdW1hc2sgdmVyc2lvbiB3YWxsIHdpZHRoIHdyaXRlYnVmIHhvZmYgeG9uIGRlZm1vZGUgaGFyZHN0YXR1cworc3luIGtleXdvcmQgc2NyZWVuQ29tbWFuZHMJYWx0c2NyZWVuIGJyZWFrIGJyZWFrdHlwZSBjb3B5X3JlZyBkZWZicmVha3R5cGUgZGVmZW5jb2RpbmcgZGVmbG9nIGVuY29kaW5nCitzeW4ga2V5d29yZCBzY3JlZW5Db21tYW5kcwlldmFsIGlnbm9yZWNhc2UgaW5zX3JlZyBtYXh3aW4gcGFydGlhbCBwb3dfZGV0YWNoIHNldHNpZCBzb3VyY2UgdW5zZXRlbnYKK3N5biBrZXl3b3JkIHNjcmVlbkNvbW1hbmRzCXdpbmRvd2xpc3Qgd2luZG93cworc3luIG1hdGNoICAgc2NyZWVuQ29tbWFuZHMJIlw8XChkZWZcKVw9XChhdXRvbnVrZVx8YmNlXHxjMVx8Y2hhcnNldFx8ZXNjYXBlXHxmbG93XHxrYW5qaVx8bG9naW5cfG1vbml0b3JcfGhzdGF0dXNcfG9idWZsaW1pdFwpXD4iCitzeW4gbWF0Y2ggICBzY3JlZW5Db21tYW5kcwkiXDxcKGRlZlwpXD1cKHNjcm9sbGJhY2tcfHNoZWxsXHxzaWxlbmNlXHxzbG93cGFzdGVcfHV0ZjhcfHdyYXBcfHdyaXRlbG9ja1x8em9tYmllXHxnclwpXD4iCitzeW4gbWF0Y2ggICBzY3JlZW5Db21tYW5kcwkiXDxoYXJkXChjb3B5XChfYXBwZW5kXHxkaXJcKVw9XHxzdGF0dXNcKVw+Igorc3luIG1hdGNoICAgc2NyZWVuQ29tbWFuZHMJIlw8bG9nXChmaWxlXHxpblx8dHN0YW1wXClcPVw+Igorc3luIG1hdGNoICAgc2NyZWVuQ29tbWFuZHMJIlw8bWFwXChkZWZhdWx0XHxub3RuZXh0XHx0aW1lb3V0XClcPiIKK3N5biBtYXRjaCAgIHNjcmVlbkNvbW1hbmRzCSJcPHRlcm1cKGNhcFx8aW5mb1x8Y2FwaW5mb1wpXD1cPiIKK3N5biBtYXRjaCAgIHNjcmVlbkNvbW1hbmRzCSJcPHZiZWxsXChfbXNnXHx3YWl0XClcPVw+IgorCitpZiBleGlzdHMoInNjcmVlbl9taW5saW5lcyIpCisgICAgbGV0IGI6c2NyZWVuX21pbmxpbmVzID0gc2NyZWVuX21pbmxpbmVzCitlbHNlCisgICAgbGV0IGI6c2NyZWVuX21pbmxpbmVzID0gMTAKK2VuZGlmCitleGVjICJzeW4gc3luYyBtaW5saW5lcz0iIC4gYjpzY3JlZW5fbWlubGluZXMKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc2NyZWVuX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3NjcmVlbl9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBzY3JlZW5Db21tZW50ICAgIENvbW1lbnQKKyAgSGlMaW5rIHNjcmVlblRvZG8JICBUb2RvCisgIEhpTGluayBzY3JlZW5TdHJpbmcJICBTdHJpbmcKKyAgSGlMaW5rIHNjcmVlbkxpdGVyYWwgICAgU3RyaW5nCisgIEhpTGluayBzY3JlZW5WYXJpYWJsZSAgIElkZW50aWZpZXIKKyAgSGlMaW5rIHNjcmVlbkJvb2xlYW4gICAgQm9vbGVhbgorICBIaUxpbmsgc2NyZWVuTnVtYmVycyAgICBOdW1iZXIKKyAgSGlMaW5rIHNjcmVlblNwZWNpYWxzICAgU3BlY2lhbAorICBIaUxpbmsgc2NyZWVuQ29tbWFuZHMgICBLZXl3b3JkCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzY3JlZW4iCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NkbC52aW0gYi9ydW50aW1lL3N5bnRheC9zZGwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTY1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zZGwudmltCkBAIC0wLDAgKzEsMTY3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJU0RMCisiIE1haW50YWluZXI6CU1pY2hhZWwgUGllZmVsIDxwaWVmZWxAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CisiIExhc3QgQ2hhbmdlOgkyIE1heSAyMDAxCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK2lmICFleGlzdHMoInNkbF8yMDAwIikKKyAgICBzeW50YXggY2FzZSBpZ25vcmUKK2VuZGlmCisKKyIgQSBidW5jaCBvZiB1c2VmdWwgU0RMIGtleXdvcmRzCitzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJdGFzayBlbHNlIG5leHRzdGF0ZQorc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CWluIG91dCB3aXRoIGZyb20gaW50ZXJmYWNlCitzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJdG8gdmlhIGVudiBhbmQgdXNlCitzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJcHJvY2VzcyBwcm9jZWR1cmUgYmxvY2sgc3lzdGVtIHNlcnZpY2UgdHlwZQorc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CWVuZHByb2Nlc3MgZW5kcHJvY2VkdXJlIGVuZGJsb2NrIGVuZHN5c3RlbQorc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CXBhY2thZ2UgZW5kcGFja2FnZSBjb25uZWN0aW9uIGVuZGNvbm5lY3Rpb24KK3N5biBrZXl3b3JkIHNkbFN0YXRlbWVudAljaGFubmVsIGVuZGNoYW5uZWwgY29ubmVjdAorc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CXN5bm9ueW0gZGNsIHNpZ25hbCBnYXRlIHRpbWVyIHNpZ25hbGxpc3Qgc2lnbmFsc2V0CitzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJY3JlYXRlIG91dHB1dCBzZXQgcmVzZXQgY2FsbAorc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CW9wZXJhdG9ycyBsaXRlcmFscworc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CWFjdGl2ZSBhbHRlcm5hdGl2ZSBhbnkgYXMgYXRsZWFzdCBjb25zdGFudHMKK3N5biBrZXl3b3JkIHNkbFN0YXRlbWVudAlkZWZhdWx0IGVuZGFsdGVybmF0aXZlIGVuZG1hY3JvIGVuZG9wZXJhdG9yCitzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJZW5kc2VsZWN0IGVuZHN1YnN0cnVjdHVyZSBleHRlcm5hbAorc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CWlmIHRoZW4gZmkgZm9yIGltcG9ydCBtYWNybyBtYWNyb2RlZmluaXRpb24KK3N5biBrZXl3b3JkIHNkbFN0YXRlbWVudAltYWNyb2lkIG1vZCBuYW1lY2xhc3Mgbm9kZWxheSBub3Qgb3BlcmF0b3Igb3IKK3N5biBrZXl3b3JkIHNkbFN0YXRlbWVudAlwYXJlbnQgcHJvdmlkZWQgcmVmZXJlbmNlZCByZW0KK3N5biBrZXl3b3JkIHNkbFN0YXRlbWVudAlzZWxlY3Qgc3BlbGxpbmcgc3Vic3RydWN0dXJlIHhvcgorc3luIGtleXdvcmQgc2RsTmV3U3RhdGUJCXN0YXRlIGVuZHN0YXRlCitzeW4ga2V5d29yZCBzZGxJbnB1dAkJaW5wdXQgc3RhcnQgc3RvcCByZXR1cm4gbm9uZSBzYXZlIHByaW9yaXR5CitzeW4ga2V5d29yZCBzZGxDb25kaXRpb25hbAlkZWNpc2lvbiBlbmRkZWNpc2lvbiBqb2luCitzeW4ga2V5d29yZCBzZGxWaXJ0dWFsCQl2aXJ0dWFsIHJlZGVmaW5lZCBmaW5hbGl6ZWQgYWRkaW5nIGluaGVyaXRzCitzeW4ga2V5d29yZCBzZGxFeHBvcnRlZAkJcmVtb3RlIGV4cG9ydGVkIGV4cG9ydAorCitpZiAhZXhpc3RzKCJzZGxfbm9fOTYiKQorICAgIHN5biBrZXl3b3JkIHNkbFN0YXRlbWVudAlhbGwgYXhpb21zIGNvbnN0YW50IGVuZGdlbmVyYXRvciBlbmRyZWZpbmVtZW50IGVuZHNlcnZpY2UKKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJZXJyb3IgZnBhciBnZW5lcmF0b3IgbGl0ZXJhbCBtYXAgbm9lcXVhbGl0eSBvcmRlcmluZworICAgIHN5biBrZXl3b3JkIHNkbFN0YXRlbWVudAlyZWZpbmVtZW50IHJldHVybnMgcmV2ZWFsZWQgcmV2ZXJzZSBzZXJ2aWNlIHNpZ25hbHJvdXRlCisgICAgc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CXZpZXcgdmlld2VkCisgICAgc3luIGtleXdvcmQgc2RsRXhwb3J0ZWQJaW1wb3J0ZWQKK2VuZGlmCisKK2lmIGV4aXN0cygic2RsXzIwMDAiKQorICAgIHN5biBrZXl3b3JkIHNkbFN0YXRlbWVudAlhYnN0cmFjdCBhZ2dyZWdhdGlvbiBhc3NvY2lhdGlvbiBicmVhayBjaG9pY2UgY29tcG9zaXRpb24KKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJY29udGludWUgZW5kbWV0aG9kIGhhbmRsZSBtZXRob2QKKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJb3JkZXJlZCBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMKKyAgICBzeW4ga2V5d29yZCBzZGxFeGNlcHRpb24JZXhjZXB0aW9uaGFuZGxlciBlbmRleGNlcHRpb25oYW5kbGVyIG9uZXhjZXB0aW9uCisgICAgc3luIGtleXdvcmQgc2RsRXhjZXB0aW9uCWNhdGNoIG5ldyByYWlzZQorICAgICIgVGhlIHNhbWUgaW4gdXBwZXJjYXNlCisgICAgc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CVRBU0sgRUxTRSBORVhUU1RBVEUKKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJSU4gT1VUIFdJVEggRlJPTSBJTlRFUkZBQ0UKKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJVE8gVklBIEVOViBBTkQgVVNFCisgICAgc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CVBST0NFU1MgUFJPQ0VEVVJFIEJMT0NLIFNZU1RFTSBTRVJWSUNFIFRZUEUKKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJRU5EUFJPQ0VTUyBFTkRQUk9DRURVUkUgRU5EQkxPQ0sgRU5EU1lTVEVNCisgICAgc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CVBBQ0tBR0UgRU5EUEFDS0FHRSBDT05ORUNUSU9OIEVORENPTk5FQ1RJT04KKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJQ0hBTk5FTCBFTkRDSEFOTkVMIENPTk5FQ1QKKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJU1lOT05ZTSBEQ0wgU0lHTkFMIEdBVEUgVElNRVIgU0lHTkFMTElTVCBTSUdOQUxTRVQKKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJQ1JFQVRFIE9VVFBVVCBTRVQgUkVTRVQgQ0FMTAorICAgIHN5biBrZXl3b3JkIHNkbFN0YXRlbWVudAlPUEVSQVRPUlMgTElURVJBTFMKKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJQUNUSVZFIEFMVEVSTkFUSVZFIEFOWSBBUyBBVExFQVNUIENPTlNUQU5UUworICAgIHN5biBrZXl3b3JkIHNkbFN0YXRlbWVudAlERUZBVUxUIEVOREFMVEVSTkFUSVZFIEVORE1BQ1JPIEVORE9QRVJBVE9SCisgICAgc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CUVORFNFTEVDVCBFTkRTVUJTVFJVQ1RVUkUgRVhURVJOQUwKKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJSUYgVEhFTiBGSSBGT1IgSU1QT1JUIE1BQ1JPIE1BQ1JPREVGSU5JVElPTgorICAgIHN5biBrZXl3b3JkIHNkbFN0YXRlbWVudAlNQUNST0lEIE1PRCBOQU1FQ0xBU1MgTk9ERUxBWSBOT1QgT1BFUkFUT1IgT1IKKyAgICBzeW4ga2V5d29yZCBzZGxTdGF0ZW1lbnQJUEFSRU5UIFBST1ZJREVEIFJFRkVSRU5DRUQgUkVNCisgICAgc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CVNFTEVDVCBTUEVMTElORyBTVUJTVFJVQ1RVUkUgWE9SCisgICAgc3luIGtleXdvcmQgc2RsTmV3U3RhdGUJU1RBVEUgRU5EU1RBVEUKKyAgICBzeW4ga2V5d29yZCBzZGxJbnB1dAlJTlBVVCBTVEFSVCBTVE9QIFJFVFVSTiBOT05FIFNBVkUgUFJJT1JJVFkKKyAgICBzeW4ga2V5d29yZCBzZGxDb25kaXRpb25hbAlERUNJU0lPTiBFTkRERUNJU0lPTiBKT0lOCisgICAgc3luIGtleXdvcmQgc2RsVmlydHVhbAlWSVJUVUFMIFJFREVGSU5FRCBGSU5BTElaRUQgQURESU5HIElOSEVSSVRTCisgICAgc3luIGtleXdvcmQgc2RsRXhwb3J0ZWQJUkVNT1RFIEVYUE9SVEVEIEVYUE9SVAorCisgICAgc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CUFCU1RSQUNUIEFHR1JFR0FUSU9OIEFTU09DSUFUSU9OIEJSRUFLIENIT0lDRSBDT01QT1NJVElPTgorICAgIHN5biBrZXl3b3JkIHNkbFN0YXRlbWVudAlDT05USU5VRSBFTkRNRVRIT0QgRU5ET0JKRUNUIEVORFZBTFVFIEhBTkRMRSBNRVRIT0QgT0JKRUNUCisgICAgc3luIGtleXdvcmQgc2RsU3RhdGVtZW50CU9SREVSRUQgUFJJVkFURSBQUk9URUNURUQgUFVCTElDCisgICAgc3luIGtleXdvcmQgc2RsRXhjZXB0aW9uCUVYQ0VQVElPTkhBTkRMRVIgRU5ERVhDRVBUSU9OSEFORExFUiBPTkVYQ0VQVElPTgorICAgIHN5biBrZXl3b3JkIHNkbEV4Y2VwdGlvbglDQVRDSCBORVcgUkFJU0UKK2VuZGlmCisKKyIgU3RyaW5nIGFuZCBDaGFyYWN0ZXIgY29udHN0YW50cworIiBIaWdobGlnaHQgc3BlY2lhbCBjaGFyYWN0ZXJzICh0aG9zZSB3aGljaCBoYXZlIGEgYmFja3NsYXNoKSBkaWZmZXJlbnRseQorc3luIG1hdGNoICAgc2RsU3BlY2lhbAkJY29udGFpbmVkICJcXFxkXGRcZFx8XFwuIgorc3luIHJlZ2lvbiAgc2RsU3RyaW5nCQlzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisgIGNvbnRhaW5zPWNTcGVjaWFsCitzeW4gcmVnaW9uICBzZGxTdHJpbmcJCXN0YXJ0PSsnKyAgc2tpcD0rJycrICBlbmQ9KycrCisKKyIgTm8sIHRoaXMgZG9lc24ndCBoYXBwZW4sIEkganVzdCB3YW50ZWQgdG8gc2NhcmUgeW91LiBTREwgcmVhbGx5IGFsbG93cyBhbGwKKyIgdGhlc2UgY2hhcmFjdGVycyBmb3IgaWRlbnRpZmllcnM7IGZvcnR1bmF0ZWx5LCBrZXl3b3JkcyBtYW5hZ2Ugd2l0aG91dCB0aGVtLgorIiBzZXQgaXNrZXl3b3JkPUAsNDgtNTcsXywxOTItMjE0LDIxNi0yNDYsMjQ4LTI1NSwtCisKK3N5biByZWdpb24gc2RsQ29tbWVudAkJc3RhcnQ9Ii9cKiIgIGVuZD0iXCovIgorc3luIHJlZ2lvbiBzZGxDb21tZW50CQlzdGFydD0iY29tbWVudCIgIGVuZD0iOyIKK3N5biByZWdpb24gc2RsQ29tbWVudAkJc3RhcnQ9Ii0tIiBlbmQ9Ii0tXHwkIgorc3luIG1hdGNoICBzZGxDb21tZW50RXJyb3IJIlwqLyIKKworc3luIGtleXdvcmQgc2RsT3BlcmF0b3IJCXByZXNlbnQKK3N5biBrZXl3b3JkIHNkbFR5cGUJCWludGVnZXIgcmVhbCBuYXR1cmFsIGR1cmF0aW9uIHBpZCBib29sZWFuIHRpbWUKK3N5biBrZXl3b3JkIHNkbFR5cGUJCWNoYXJhY3RlciBjaGFyc3RyaW5nIGlhNXN0cmluZworc3luIGtleXdvcmQgc2RsVHlwZQkJc2VsZiBub3cgc2VuZGVyIG9mZnNwcmluZworc3luIGtleXdvcmQgc2RsU3RydWN0dXJlCWFzbnR5cGUgZW5kYXNudHlwZSBzeW50eXBlIGVuZHN5bnR5cGUgc3RydWN0CisKK2lmICFleGlzdHMoInNkbF9ub185NiIpCisgICAgc3luIGtleXdvcmQgc2RsU3RydWN0dXJlCW5ld3R5cGUgZW5kbmV3dHlwZQorZW5kaWYKKworaWYgZXhpc3RzKCJzZGxfMjAwMCIpCisgICAgc3luIGtleXdvcmQgc2RsU3RydWN0dXJlCW9iamVjdCBlbmRvYmplY3QgdmFsdWUgZW5kdmFsdWUKKyAgICAiIFRoZSBzYW1lIGluIHVwcGVyY2FzZQorICAgIHN5biBrZXl3b3JkIHNkbFN0cnVjdHVyZQlPQkpFQ1QgRU5ET0JKRUNUIFZBTFVFIEVORFZBTFVFCisgICAgc3luIGtleXdvcmQgc2RsT3BlcmF0b3IJUFJFU0VOVAorICAgIHN5biBrZXl3b3JkIHNkbFR5cGUJCUlOVEVHRVIgTkFUVVJBTCBEVVJBVElPTiBQSUQgQk9PTEVBTiBUSU1FCisgICAgc3luIGtleXdvcmQgc2RsVHlwZQkJQ0hBUlNUUklORyBJQTVTVFJJTkcKKyAgICBzeW4ga2V5d29yZCBzZGxUeXBlCQlTRUxGIE5PVyBTRU5ERVIgT0ZGU1BSSU5HCisgICAgc3luIGtleXdvcmQgc2RsU3RydWN0dXJlCUFTTlRZUEUgRU5EQVNOVFlQRSBTWU5UWVBFIEVORFNZTlRZUEUgU1RSVUNUCitlbmRpZgorCisiIEFTTi4xIGluIFNETAorc3luIGNhc2UgbWF0Y2gKK3N5biBrZXl3b3JkIHNkbFR5cGUJCVNFVCBPRiBCT09MRUFOIElOVEVHRVIgUkVBTCBCSVQgT0NURVQKK3N5biBrZXl3b3JkIHNkbFR5cGUJCVNFUVVFTkNFIENIT0lDRQorc3luIGtleXdvcmQgc2RsVHlwZQkJU1RSSU5HIE9CSkVDVCBJREVOVElGSUVSIE5VTEwKKworc3luIHN5bmMgY2NvbW1lbnQgc2RsQ29tbWVudAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zZGxfc3luX2luaXRzIikKKyAgICBpZiB2ZXJzaW9uIDwgNTA4CisJbGV0IGRpZF9zZGxfc3luX2luaXRzID0gMQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisJY29tbWFuZCAtbmFyZ3M9KyBIaSAgICAgaGkgPGFyZ3M+CisgICAgZWxzZQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWNvbW1hbmQgLW5hcmdzPSsgSGkgICAgIGhpIGRlZiA8YXJncz4KKyAgICBlbmRpZgorCisgICAgSGlMaW5rICBzZGxFeGNlcHRpb24JTGFiZWwKKyAgICBIaUxpbmsgIHNkbENvbmRpdGlvbmFsCXNkbFN0YXRlbWVudAorICAgIEhpTGluayAgc2RsVmlydHVhbAkJc2RsU3RhdGVtZW50CisgICAgSGlMaW5rICBzZGxFeHBvcnRlZAkJc2RsRmxhZworICAgIEhpTGluayAgc2RsQ29tbWVudEVycm9yCXNkbEVycm9yCisgICAgSGlMaW5rICBzZGxPcGVyYXRvcgkJT3BlcmF0b3IKKyAgICBIaUxpbmsgIHNkbFN0cnVjdHVyZQlzZGxUeXBlCisgICAgSGkJICAgIHNkbFN0YXRlbWVudAl0ZXJtPWJvbGQgY3Rlcm1mZz00IGd1aWZnPUJsdWUKKyAgICBIaQkgICAgc2RsRmxhZwkJdGVybT1ib2xkIGN0ZXJtZmc9NCBndWlmZz1CbHVlIGd1aT1pdGFsaWMKKyAgICBIaQkgICAgc2RsTmV3U3RhdGUJCXRlcm09aXRhbGljIGN0ZXJtZmc9MiBndWlmZz1NYWdlbnRhIGd1aT11bmRlcmxpbmUKKyAgICBIaQkgICAgc2RsSW5wdXQJCXRlcm09Ym9sZCBndWlmZz1SZWQKKyAgICBIaUxpbmsgIHNkbFR5cGUJCVR5cGUKKyAgICBIaUxpbmsgIHNkbFN0cmluZwkJU3RyaW5nCisgICAgSGlMaW5rICBzZGxDb21tZW50CQlDb21tZW50CisgICAgSGlMaW5rICBzZGxTcGVjaWFsCQlTcGVjaWFsCisgICAgSGlMaW5rICBzZGxFcnJvcgkJRXJyb3IKKworICAgIGRlbGNvbW1hbmQgSGlMaW5rCisgICAgZGVsY29tbWFuZCBIaQorZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic2RsIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc2VkLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NlZC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlMzk1YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NlZC52aW0KQEAgLTAsMCArMSwxMjIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglzZWQKKyIgTWFpbnRhaW5lcjoJSGFha29uIFJpaXNlciA8aGFrb25ya0BmeXMudWlvLm5vPgorIiBVUkw6CQlodHRwOi8vZm9say51aW8ubm8vaGFrb25yay92aW0vc3ludGF4L3NlZC52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3luIGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK3N5biBtYXRjaCBzZWRFcnJvcgkiXFMiCisKK3N5biBtYXRjaCBzZWRXaGl0ZXNwYWNlICJcc1wrIiBjb250YWluZWQKK3N5biBtYXRjaCBzZWRTZW1pY29sb24JIjsiCitzeW4gbWF0Y2ggc2VkQWRkcmVzcwkiW1s6ZGlnaXQ6XSRdIgorc3luIG1hdGNoIHNlZEFkZHJlc3MJIlxkXCtcflxkXCsiCitzeW4gcmVnaW9uIHNlZEFkZHJlc3MgICBtYXRjaGdyb3VwPVNwZWNpYWwgc3RhcnQ9Ilt7LDtdXHMqL1woXFwvXClcPSJsYz0xIHNraXA9IlteXFxdXChcXFxcXCkqXFwvIiBlbmQ9Ii9JXD0iIGNvbnRhaW5zPXNlZFRhYixzZWRSZWdleHBNZXRhCitzeW4gcmVnaW9uIHNlZEFkZHJlc3MgICBtYXRjaGdyb3VwPVNwZWNpYWwgc3RhcnQ9Il5ccyovXChcXC9cKVw9IiBza2lwPSJbXlxcXVwoXFxcXFwpKlxcLyIgZW5kPSIvSVw9IiBjb250YWlucz1zZWRUYWIsc2VkUmVnZXhwTWV0YQorc3luIG1hdGNoIHNlZENvbW1lbnQJIl5ccyojLiokIgorc3luIG1hdGNoIHNlZEZ1bmN0aW9uCSJbZERnR2hIbG5OcFBxeD1dXHMqXCgkXHw7XCkiIGNvbnRhaW5zPXNlZFNlbWljb2xvbixzZWRXaGl0ZXNwYWNlCitzeW4gbWF0Y2ggc2VkTGFiZWwJIjpbXjtdKiIKK3N5biBtYXRjaCBzZWRMaW5lQ29udAkiXlwoXFxcXFwpKlxcJCIgY29udGFpbmVkCitzeW4gbWF0Y2ggc2VkTGluZUNvbnQJIlteXFxdXChcXFxcXCkqXFwkIm1zPWUgY29udGFpbmVkCitzeW4gbWF0Y2ggc2VkU3BlY2lhbAkiW3t9LCFdIgoraWYgZXhpc3RzKCJoaWdobGlnaHRfc2VkdGFicyIpCisgICAgc3luIG1hdGNoIHNlZFRhYgkiXHQiIGNvbnRhaW5lZAorZW5kaWYKKworIiBBcHBlbmQvQ2hhbmdlL0luc2VydAorc3luIHJlZ2lvbiBzZWRBQ0kJbWF0Y2hncm91cD1zZWRGdW5jdGlvbiBzdGFydD0iW2FjaV1cXCQiIG1hdGNoZ3JvdXA9Tk9ORSBlbmQ9Il4uKiQiIGNvbnRhaW5zPXNlZExpbmVDb250LHNlZFRhYgorCitzeW4gcmVnaW9uIHNlZEJyYW5jaAltYXRjaGdyb3VwPXNlZEZ1bmN0aW9uIHN0YXJ0PSJbYnRdIiBtYXRjaGdyb3VwPXNlZFNlbWljb2xvbiBlbmQ9IjtcfCQiIGNvbnRhaW5zPXNlZFdoaXRlc3BhY2UKK3N5biByZWdpb24gc2VkUlcJbWF0Y2hncm91cD1zZWRGdW5jdGlvbiBzdGFydD0iW3J3XSIgbWF0Y2hncm91cD1zZWRTZW1pY29sb24gZW5kPSI7XHwkIiBjb250YWlucz1zZWRXaGl0ZXNwYWNlCisKKyIgU3Vic3RpdHV0aW9uL3RyYW5zZm9ybSB3aXRoIHZhcmlvdXMgZGVsaW1pdGVycworc3luIHJlZ2lvbiBzZWRGbGFnd3JpdGUJICAgIG1hdGNoZ3JvdXA9c2VkRmxhZyBzdGFydD0idyIgbWF0Y2hncm91cD1zZWRTZW1pY29sb24gZW5kPSI7XHwkIiBjb250YWlucz1zZWRXaGl0ZXNwYWNlIGNvbnRhaW5lZAorc3luIG1hdGNoIHNlZEZsYWcJICAgICJbWzpkaWdpdDpdZ3BJXSp3XD0iIGNvbnRhaW5zPXNlZEZsYWd3cml0ZSBjb250YWluZWQKK3N5biBtYXRjaCBzZWRSZWdleHBNZXRhCSAgICAiWy4qXiRdIiBjb250YWluZWQKK3N5biBtYXRjaCBzZWRSZWdleHBNZXRhCSAgICAiXFwuIiBjb250YWlucz1zZWRUYWIgY29udGFpbmVkCitzeW4gbWF0Y2ggc2VkUmVnZXhwTWV0YQkgICAgIlxbLlx7LX1cXSIgY29udGFpbnM9c2VkVGFiIGNvbnRhaW5lZAorc3luIG1hdGNoIHNlZFJlZ2V4cE1ldGEJICAgICJcXHtcZFwqLFxkKlxcfSIgY29udGFpbmVkCitzeW4gbWF0Y2ggc2VkUmVnZXhwTWV0YQkgICAgIlxcKC5cey19XFwpIiBjb250YWlucz1zZWRUYWIgY29udGFpbmVkCitzeW4gbWF0Y2ggc2VkUmVwbGFjZU1ldGEgICAgIiZcfFxcXCgkXHwuXCkiIGNvbnRhaW5zPXNlZFRhYiBjb250YWluZWQKKworIiBNZXRhY2hhcmFjdGVyczogJCAqIC4gXCBeIFsgfgorIiBAIGlzIHVzZWQgYXMgZGVsaW1pdGVyIGFuZCB0cmVhdGVkIG9uIGl0cyBvd24gYmVsb3cKK2xldCBfX2F0ID0gY2hhcjJucigiQCIpCitsZXQgX19zZWRfaSA9IGNoYXIybnIoIiAiKQoraWYgaGFzKCJlYmNkaWMiKQorICAgIGxldCBfX3NlZF9sYXN0ID0gMjU1CitlbHNlCisgICAgbGV0IF9fc2VkX2xhc3QgPSAxMjYKK2VuZGlmCitsZXQgX19zZWRfbWV0YWNoYXJhY3RlcnMgPSAnJCouXF5bficKK3doaWxlIF9fc2VkX2kgPD0gX19zZWRfbGFzdAorICAgIGxldCBfX3NlZF9kZWxpbWl0ZXIgPSBlc2NhcGUobnIyY2hhcihfX3NlZF9pKSwgX19zZWRfbWV0YWNoYXJhY3RlcnMpCisJaWYgX19zZWRfaSAhPSBfX2F0CisJICAgIGV4ZSAnc3luIHJlZ2lvbiBzZWRBZGRyZXNzIG1hdGNoZ3JvdXA9U3BlY2lhbCBzdGFydD1AXFwnLl9fc2VkX2RlbGltaXRlci4nXChcXCcuX19zZWRfZGVsaW1pdGVyLidcKVw9QCBza2lwPUBbXlxcXVwoXFxcXFwpKlxcJy5fX3NlZF9kZWxpbWl0ZXIuJ0AgZW5kPUAnLl9fc2VkX2RlbGltaXRlci4nSVw9QCBjb250YWlucz1zZWRUYWInCisJICAgIGV4ZSAnc3luIHJlZ2lvbiBzZWRSZWdleHAnLl9fc2VkX2kgICdtYXRjaGdyb3VwPVNwZWNpYWwgc3RhcnQ9QCcuX19zZWRfZGVsaW1pdGVyLidcKFxcXFxcfFxcJy5fX3NlZF9kZWxpbWl0ZXIuJ1wpKkAgc2tpcD1AW15cXCcuX19zZWRfZGVsaW1pdGVyLiddXChcXFxcXCkqXFwnLl9fc2VkX2RlbGltaXRlci4nQCBlbmQ9QCcuX19zZWRfZGVsaW1pdGVyLidAbWU9ZS0xIGNvbnRhaW5zPXNlZFRhYixzZWRSZWdleHBNZXRhIGtlZXBlbmQgY29udGFpbmVkIG5leHRncm91cD1zZWRSZXBsYWNlbWVudCcuX19zZWRfaQorCSAgICBleGUgJ3N5biByZWdpb24gc2VkUmVwbGFjZW1lbnQnLl9fc2VkX2kgJ21hdGNoZ3JvdXA9U3BlY2lhbCBzdGFydD1AJy5fX3NlZF9kZWxpbWl0ZXIuJ1woXFxcXFx8XFwnLl9fc2VkX2RlbGltaXRlci4nXCkqQCBza2lwPUBbXlxcJy5fX3NlZF9kZWxpbWl0ZXIuJ11cKFxcXFxcKSpcXCcuX19zZWRfZGVsaW1pdGVyLidAIGVuZD1AJy5fX3NlZF9kZWxpbWl0ZXIuJ0AgY29udGFpbnM9c2VkVGFiLHNlZFJlcGxhY2VNZXRhIGtlZXBlbmQgY29udGFpbmVkIG5leHRncm91cD1zZWRGbGFnJworCWVuZGlmCisgICAgbGV0IF9fc2VkX2kgPSBfX3NlZF9pICsgMQorZW5kd2hpbGUKK3N5biByZWdpb24gc2VkQWRkcmVzcyBtYXRjaGdyb3VwPVNwZWNpYWwgc3RhcnQ9K1xcQFwoXFxAXClcPSsgc2tpcD0rW15cXF1cKFxcXFxcKSpcXEArIGVuZD0rQElcPSsgY29udGFpbnM9c2VkVGFiLHNlZFJlZ2V4cE1ldGEKK3N5biByZWdpb24gc2VkUmVnZXhwNjQgbWF0Y2hncm91cD1TcGVjaWFsIHN0YXJ0PStAXChcXFxcXHxcXEBcKSorIHNraXA9K1teXFxAXVwoXFxcXFwpKlxcQCsgZW5kPStAK21lPWUtMSBjb250YWlucz1zZWRUYWIsc2VkUmVnZXhwTWV0YSBrZWVwZW5kIGNvbnRhaW5lZCBuZXh0Z3JvdXA9c2VkUmVwbGFjZW1lbnQ2NAorc3luIHJlZ2lvbiBzZWRSZXBsYWNlbWVudDY0IG1hdGNoZ3JvdXA9U3BlY2lhbCBzdGFydD0rQFwoXFxcXFx8XFxAXCkqKyBza2lwPStbXlxcQF1cKFxcXFxcKSpcXEArIGVuZD0rQCsgY29udGFpbnM9c2VkVGFiLHNlZFJlcGxhY2VNZXRhIGtlZXBlbmQgY29udGFpbmVkIG5leHRncm91cD1zZWRGbGFnCisKKyIgU2luY2UgdGhlIHN5bnRheCBmb3IgdGhlIHN1YnN0aXR1aW9uIGNvbW1hbmQgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZQorIiBzeW50YXggZm9yIHRoZSB0cmFuc2Zvcm0gY29tbWFuZCwgSSB1c2UgdGhlIHNhbWUgcGF0dGVybiBtYXRjaGluZworIiBmb3IgYm90aCBjb21tYW5kcy4gIFRoZXJlIGlzIG9uZSBwcm9ibGVtIC0tIHRoZSB0cmFuc2Zvcm0gY29tbWFuZAorIiAoeSkgZG9lcyBub3QgYWxsb3cgYW55IGZsYWdzLiAgVG8gc2F2ZSBtZW1vcnksIEkgaWdub3JlIHRoaXMgcHJvYmxlbS4KK3N5biBtYXRjaCBzZWRTVAkiW3N5XSIgbmV4dGdyb3VwPXNlZFJlZ2V4cFxkXCsKKworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3NlZF9zeW50YXhfaW5pdHMiKQorICAgIGlmIHZlcnNpb24gPCA1MDgKKwlsZXQgZGlkX3NlZF9zeW50YXhfaW5pdHMgPSAxCisJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgICBlbHNlCisJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgICAgZW5kaWYKKworICAgIEhpTGluayBzZWRBZGRyZXNzCQlNYWNybworICAgIEhpTGluayBzZWRBQ0kJCU5PTkUKKyAgICBIaUxpbmsgc2VkQnJhbmNoCQlMYWJlbAorICAgIEhpTGluayBzZWRDb21tZW50CQlDb21tZW50CisgICAgSGlMaW5rIHNlZERlbGV0ZQkJRnVuY3Rpb24KKyAgICBIaUxpbmsgc2VkRXJyb3IJCUVycm9yCisgICAgSGlMaW5rIHNlZEZsYWcJCVR5cGUKKyAgICBIaUxpbmsgc2VkRmxhZ3dyaXRlCQlDb25zdGFudAorICAgIEhpTGluayBzZWRGdW5jdGlvbgkJRnVuY3Rpb24KKyAgICBIaUxpbmsgc2VkTGFiZWwJCUxhYmVsCisgICAgSGlMaW5rIHNlZExpbmVDb250CQlTcGVjaWFsCisgICAgSGlMaW5rIHNlZFB1dEhvbGRzcGMJRnVuY3Rpb24KKyAgICBIaUxpbmsgc2VkUmVwbGFjZU1ldGEJU3BlY2lhbAorICAgIEhpTGluayBzZWRSZWdleHBNZXRhCVNwZWNpYWwKKyAgICBIaUxpbmsgc2VkUlcJCUNvbnN0YW50CisgICAgSGlMaW5rIHNlZFNlbWljb2xvbgkJU3BlY2lhbAorICAgIEhpTGluayBzZWRTVAkJRnVuY3Rpb24KKyAgICBIaUxpbmsgc2VkU3BlY2lhbAkJU3BlY2lhbAorICAgIEhpTGluayBzZWRXaGl0ZXNwYWNlCU5PTkUKKyAgICBpZiBleGlzdHMoImhpZ2hsaWdodF9zZWR0YWJzIikKKwlIaUxpbmsgc2VkVGFiCQlUb2RvCisgICAgZW5kaWYKKyAgICBsZXQgX19zZWRfaSA9IDMyCisgICAgd2hpbGUgX19zZWRfaSA8PSAxMjYKKwlleGUgIkhpTGluayBzZWRSZWdleHAiLl9fc2VkX2kJCSJNYWNybyIKKwlleGUgIkhpTGluayBzZWRSZXBsYWNlbWVudCIuX19zZWRfaQkiTk9ORSIKKwlsZXQgX19zZWRfaSA9IF9fc2VkX2kgKyAxCisgICAgZW5kd2hpbGUKKworICAgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCit1bmxldCBfX3NlZF9pIF9fc2VkX2RlbGltaXRlciBfX3NlZF9tZXRhY2hhcmFjdGVycworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzZWQiCisKKyIgdmltOiBzdHM9NCBzdz00IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NlbmRwci52aW0gYi9ydW50aW1lL3N5bnRheC9zZW5kcHIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTI2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zZW5kcHIudmltCkBAIC0wLDAgKzEsMzIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiBGcmVlQlNEIHNlbmQtcHIgZmlsZQorIiBNYWludGFpbmVyOiBIZW5kcmlrIFNjaG9seiA8aGVuZHJpa0BzY2hvbHoubmV0PgorIiBMYXN0IENoYW5nZTogMjAwMiBNYXIgMjEKKyIKKyIgaHR0cDovL3JhaXNkb3JmLm5ldC9maWxlcy9taXNjL3NlbmQtcHIudmltCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIG1hdGNoIHNlbmRwckNvbW1lbnQgL15TRU5ELVBSOi8KKyIgZW1haWwgYWRkcmVzcworc3luIG1hdGNoIHNlbmRwclR5cGUgLzxbYS16QS1aMC05XC1cX1wuXSpAW2EtekEtWjAtOVwtXF9cLl0qPi8KKyIgXj4gbGluZXMKK3N5biBtYXRjaCBzZW5kcHJTdHJpbmcgL14+W2EtekEtWlwtXSo6Lworc3luIHJlZ2lvbiBzZW5kcHJMYWJlbCBzdGFydD0iXFsiIGVuZD0iXF0iCitzeW4gbWF0Y2ggc2VuZHByU3RyaW5nIC9eVG86Lworc3luIG1hdGNoIHNlbmRwclN0cmluZyAvXkZyb206Lworc3luIG1hdGNoIHNlbmRwclN0cmluZyAvXlJlcGx5LVRvOi8KK3N5biBtYXRjaCBzZW5kcHJTdHJpbmcgL15DYzovCitzeW4gbWF0Y2ggc2VuZHByU3RyaW5nIC9eWC1zZW5kLXByLXZlcnNpb246Lworc3luIG1hdGNoIHNlbmRwclN0cmluZyAvXlgtR05BVFMtTm90aWZ5Oi8KKworaGkgZGVmIGxpbmsgc2VuZHByQ29tbWVudCAgIENvbW1lbnQKK2hpIGRlZiBsaW5rIHNlbmRwclR5cGUgICAgICBUeXBlCitoaSBkZWYgbGluayBzZW5kcHJTdHJpbmcgICAgU3RyaW5nCitoaSBkZWYgbGluayBzZW5kcHJMYWJlbCAgICAgTGFiZWwKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NnbWwudmltIGIvcnVudGltZS9zeW50YXgvc2dtbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjNDZjMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NnbWwudmltCkBAIC0wLDAgKzEsMzM3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJU0dNTAorIiBNYWludGFpbmVyOglKb2hhbm5lcyBaZWxsbmVyIDxqb2hhbm5lc0B6ZWxsbmVyLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CVR1ZSwgMjcgQXByIDIwMDQgMTU6MDU6MjEgQ0VTVAorIiBGaWxlbmFtZXM6CSouc2dtbCwqLnNnbQorIiAkSWQkCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworbGV0IHM6c2dtbF9jcG9fc2F2ZSA9ICZjcG8KK3NldCBjcG8mdmltCisKK3N5biBjYXNlIG1hdGNoCisKKyIgbWFyayBpbGxlZ2FsIGNoYXJhY3RlcnMKK3N5biBtYXRjaCBzZ21sRXJyb3IgIls8Jl0iCisKKworIiB1bmljb2RlIG51bWJlcnM6CisiIHByb3ZpZGUgZGlmZmVyZW50IGhpZ2hsaXRoaW5nIGZvciB1bmljb2RlIGNoYXJhY3RlcnMKKyIgaW5zaWRlIHN0cmluZ3MgYW5kIGluIHBsYWluIHRleHQgKGNoYXJhY3RlciBkYXRhKS4KKyIKKyIgRVhBTVBMRToKKyIKKyIgXHU0ZTg4CisiCitzeW4gbWF0Y2ggICBzZ21sVW5pY29kZU51bWJlckF0dHIgICAgK1xcdVx4XHs0fSsgY29udGFpbmVkIGNvbnRhaW5zPXNnbWxVbmljb2RlU3BlY2lmaWVyQXR0cgorc3luIG1hdGNoICAgc2dtbFVuaWNvZGVTcGVjaWZpZXJBdHRyICtcXHUrIGNvbnRhaW5lZAorc3luIG1hdGNoICAgc2dtbFVuaWNvZGVOdW1iZXJEYXRhICAgICtcXHVceFx7NH0rIGNvbnRhaW5lZCBjb250YWlucz1zZ21sVW5pY29kZVNwZWNpZmllckRhdGEKK3N5biBtYXRjaCAgIHNnbWxVbmljb2RlU3BlY2lmaWVyRGF0YSArXFx1KyBjb250YWluZWQKKworCisiIHN0cmluZ3MgaW5zaWRlIGNoYXJhY3RlciBkYXRhIG9yIGNvbW1lbnRzCisiCitzeW4gcmVnaW9uICBzZ21sU3RyaW5nIGNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPXNnbWxFbnRpdHksc2dtbFVuaWNvZGVOdW1iZXJBdHRyIGRpc3BsYXkKK3N5biByZWdpb24gIHNnbWxTdHJpbmcgY29udGFpbmVkIHN0YXJ0PSsnKyBza2lwPStcXFxcXHxcXCcrIGVuZD0rJysgY29udGFpbnM9c2dtbEVudGl0eSxzZ21sVW5pY29kZU51bWJlckF0dHIgZGlzcGxheQorCisiIHB1bmN0dWF0aW9uICh3aXRoaW4gYXR0cmlidXRlcykgZS5nLiA8dGFnIHNnbWw6Zm9vLmF0dHJpYnV0ZSAuLi4+CisiCQkJCQkJXiAgIF4KK3N5biBtYXRjaCAgIHNnbWxBdHRyaWJQdW5jdCArWzouXSsgY29udGFpbmVkIGRpc3BsYXkKKworCisiIG5vIGhpZ2hsaWdodGluZyBmb3Igc2dtbEVxdWFsIChzZ21sRXF1YWwgaGFzIG5vIGhpZ2hsaWdodGluZyBncm91cCkKK3N5biBtYXRjaCAgIHNnbWxFcXVhbCArPSsKKworCisiIGF0dHJpYnV0ZSwgZXZlcnl0aGluZyBiZWZvcmUgdGhlICc9JworIgorIiBQUk9WSURFUzogQHNnbWxBdHRyaWJIb29rCisiCisiIEVYQU1QTEU6CisiCisiIDx0YWcgZm9vLmF0dHJpYnV0ZSA9ICJ2YWx1ZSI+CisiICAgICAgXl5eXl5eXl5eXl5eXgorIgorc3luIG1hdGNoICAgc2dtbEF0dHJpYgorICAgIFwgK1teLSciPF1cQDw9XDxbYS16QS1aMC05LjpdXCtcPlwoW14nIj5dXEA9XHwkXCkrCisgICAgXCBjb250YWluZWQKKyAgICBcIGNvbnRhaW5zPXNnbWxBdHRyaWJQdW5jdCxAc2dtbEF0dHJpYkhvb2sKKyAgICBcIGRpc3BsYXkKKworCisiIFVOUVVPVEVEIHZhbHVlIChub3QgaW5jbHVkaW5nIHRoZSAnPScgLS0gc2dtbEVxdWFsKQorIgorIiBQUk9WSURFUzogQHNnbWxWYWx1ZUhvb2sKKyIKKyIgRVhBTVBMRToKKyIKKyIgPHRhZyBmb28uYXR0cmlidXRlID0gdmFsdWU+CisiCQkgICAgICAgXl5eXl4KKyIKK3N5biBtYXRjaCAgIHNnbWxWYWx1ZQorICAgIFwgK1teIicgPS8hPzw+XVteID0vIT88Pl0qKworICAgIFwgY29udGFpbmVkCisgICAgXCBjb250YWlucz1zZ21sRW50aXR5LHNnbWxVbmljb2RlTnVtYmVyQXR0cixAc2dtbFZhbHVlSG9vaworICAgIFwgZGlzcGxheQorCisKKyIgUVVPVEVEIHZhbHVlIChub3QgaW5jbHVkaW5nIHRoZSAnPScgLS0gc2dtbEVxdWFsKQorIgorIiBQUk9WSURFUzogQHNnbWxWYWx1ZUhvb2sKKyIKKyIgRVhBTVBMRToKKyIKKyIgPHRhZyBmb28uYXR0cmlidXRlID0gInZhbHVlIj4KKyIJCSAgICAgICBeXl5eXl5eCisiIDx0YWcgZm9vLmF0dHJpYnV0ZSA9ICd2YWx1ZSc+CisiCQkgICAgICAgXl5eXl5eXgorIgorc3luIHJlZ2lvbiAgc2dtbFZhbHVlIGNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCisJICAgIFwgY29udGFpbnM9c2dtbEVudGl0eSxzZ21sVW5pY29kZU51bWJlckF0dHIsQHNnbWxWYWx1ZUhvb2sKK3N5biByZWdpb24gIHNnbWxWYWx1ZSBjb250YWluZWQgc3RhcnQ9KycrIHNraXA9K1xcXFxcfFxcJysgZW5kPSsnKworCSAgICBcIGNvbnRhaW5zPXNnbWxFbnRpdHksc2dtbFVuaWNvZGVOdW1iZXJBdHRyLEBzZ21sVmFsdWVIb29rCisKKworIiB2YWx1ZSwgZXZlcnl0aGluZyBhZnRlciAoYW5kIGluY2x1ZGluZykgdGhlICc9JworIiBubyBoaWdobGlnaHRpbmchCisiCisiIEVYQU1QTEU6CisiCisiIDx0YWcgZm9vLmF0dHJpYnV0ZSA9ICJ2YWx1ZSI+CisiCQkgICAgIF5eXl5eXl5eXgorIiA8dGFnIGZvby5hdHRyaWJ1dGUgPSB2YWx1ZT4KKyIJCSAgICAgXl5eXl5eXgorIgorc3luIG1hdGNoICAgc2dtbEVxdWFsVmFsdWUKKyAgICBcICs9XHMqW14gPS8hPzw+XVwrKworICAgIFwgY29udGFpbmVkCisgICAgXCBjb250YWlucz1zZ21sRXF1YWwsc2dtbFN0cmluZyxzZ21sVmFsdWUKKyAgICBcIGRpc3BsYXkKKworCisiIHN0YXJ0IHRhZworIiB1c2UgbWF0Y2hncm91cD1zZ21sVGFnIHRvIHNraXAgb3ZlciB0aGUgbGVhZGluZyAnPCcKKyIgc2VlIGFsc28gc2dtbEVtcHR5VGFnIGJlbG93LgorIgorIiBQUk9WSURFUzogQHNnbWxUYWdIb29rCisiCitzeW4gcmVnaW9uICAgc2dtbFRhZworICAgIFwgbWF0Y2hncm91cD1zZ21sVGFnIHN0YXJ0PSs8W14gLyE/IiddXEA9KworICAgIFwgbWF0Y2hncm91cD1zZ21sVGFnIGVuZD0rPisKKyAgICBcIGNvbnRhaW5lZAorICAgIFwgY29udGFpbnM9c2dtbEVycm9yLHNnbWxBdHRyaWIsc2dtbEVxdWFsVmFsdWUsQHNnbWxUYWdIb29rCisKKworIiB0YWcgY29udGVudCBmb3IgZW1wdHkgdGFncy4gVGhpcyBpcyB0aGUgc2FtZSBhcyBzZ21sVGFnCisiIGFib3ZlLCBleGNlcHQgdGhlIGBtYXRjaGdyb3VwPXNnbWxFbmRUYWcgZm9yIGhpZ2hsaWdodGluZworIiB0aGUgZW5kICcvPicgZGlmZmVyZW50bHkuCisiCisiIFBST1ZJREVTOiBAc2dtbFRhZ0hvb2sKKyIKK3N5biByZWdpb24gICBzZ21sRW1wdHlUYWcKKyAgICBcIG1hdGNoZ3JvdXA9c2dtbFRhZyBzdGFydD0rPFteIC8hPyInXVxAPSsKKyAgICBcIG1hdGNoZ3JvdXA9c2dtbEVuZFRhZyBlbmQ9Ky8+KworICAgIFwgY29udGFpbmVkCisgICAgXCBjb250YWlucz1zZ21sRXJyb3Isc2dtbEF0dHJpYixzZ21sRXF1YWxWYWx1ZSxAc2dtbFRhZ0hvb2sKKworCisiIGVuZCB0YWcKKyIgaGlnaGxpZ2h0IGV2ZXJ5dGhpbmcgYnV0IG5vdCB0aGUgdHJhaWxpbmcgJz4nIHdoaWNoCisiIHdhcyBhbHJlYWR5IGhpZ2hsaWdodGVkIGJ5IHRoZSBjb250YWluaW5nIHNnbWxSZWdpb24uCisiCisiIFBST1ZJREVTOiBAc2dtbFRhZ0hvb2sKKyIgKHNob3VsZCB3ZSBwcm92aWRlIGEgc2VwYXJhdGUgQHNnbWxFbmRUYWdIb29rID8pCisiCitzeW4gbWF0Y2ggICBzZ21sRW5kVGFnCisgICAgXCArPC9bXiAvIT8+IiddXCs+KworICAgIFwgY29udGFpbmVkCisgICAgXCBjb250YWlucz1Ac2dtbFRhZ0hvb2sKKworCisiIFstLSBTR01MIFNQRUNJRklDIC0tXQorCisiIFNHTUwgc3BlY2lmaWMKKyIgdGFnIGNvbnRlbnQgZm9yIGFiYnJldmlhdGVkIHJlZ2lvbnMKKyIKKyIgUFJPVklERVM6IEBzZ21sVGFnSG9vaworIgorc3luIHJlZ2lvbiAgIHNnbWxBYmJyVGFnCisgICAgXCBtYXRjaGdyb3VwPXNnbWxUYWcgc3RhcnQ9KzxbXiAvIT8iJ11cQD0rCisgICAgXCBtYXRjaGdyb3VwPXNnbWxUYWcgZW5kPSsvKworICAgIFwgY29udGFpbmVkCisgICAgXCBjb250YWlucz1zZ21sRXJyb3Isc2dtbEF0dHJpYixzZ21sRXF1YWxWYWx1ZSxAc2dtbFRhZ0hvb2sKKworCisiIFNHTUwgc3BlY2lmaWMKKyIganVzdCBoaWdobGlnaHQgdGhlIHRyYWlsaW5nICcvJworc3luIG1hdGNoICAgc2dtbEFiYnJFbmRUYWcgKy8rCisKKworIiBTR01MIHNwZWNpZmljCisiIGFiYnJldmlhdGVkIHJlZ2lvbnMKKyIKKyIgTm8gaGlnaGxpZ2hpbmcsIGhpZ2hsaWdoaW5nIGlzIGRvbmUgYnkgY29udGFpbmVkIGVsZW1lbnRzLgorIgorIiBQUk9WSURFUzogQHNnbWxSZWdpb25Ib29rCisiCisiIEVYQU1QTEU6CisiCisiIDxib2xkL0ltIEFuZmFuZyB3YXIgZGFzIFdvcnQvCisiCitzeW4gbWF0Y2ggICBzZ21sQWJiclJlZ2lvbgorICAgIFwgKzxbXi8hPz4iJ11cKy9cX1teL11cKy8rCisgICAgXCBjb250YWlucz1zZ21sQWJiclRhZyxzZ21sQWJickVuZFRhZyxzZ21sQ2RhdGEsc2dtbENvbW1lbnQsc2dtbEVudGl0eSxzZ21sVW5pY29kZU51bWJlckRhdGEsQHNnbWxSZWdpb25Ib29rCisKKyIgWy0tIEVORCBPRiBTR01MIFNQRUNJRklDIC0tXQorCisKKyIgcmVhbCAobm9uLWVtcHR5KSBlbGVtZW50cy4gV2UgY2Fubm90IGRvIHN5bnRheCBmb2xkaW5nCisiIGFzIGluIHhtbCwgYmVjYXVzZSBlbmQgdGFncyBtYXkgYmUgb3B0aW9uYWwgaW4gc2dtbCBkZXBlbmRpbmcKKyIgb24gdGhlIGR0ZC4KKyIgTm8gaGlnaGxpZ2hpbmcsIGhpZ2hsaWdoaW5nIGlzIGRvbmUgYnkgY29udGFpbmVkIGVsZW1lbnRzLgorIgorIiBQUk9WSURFUzogQHNnbWxSZWdpb25Ib29rCisiCisiIEVYQU1QTEU6CisiCisiIDx0YWcgaWQ9Indob29wcyI+CisiICAgPCEtLSBjb21tZW50IC0tPgorIiAgIDxhbm90aGVyLnRhZz48L2Fub3RoZXIudGFnPgorIiAgIDxhbm90aGVyLnRhZy8+CisiICAgc29tZSBkYXRhCisiIDwvdGFnPgorIgorIiBTR01MIHNwZWNpZmljOgorIiBjb21wYXJlZCB0byB4bWxSZWdpb246CisiICAgLSByZW1vdmVkIGZvbGRpbmcKKyIgICAtIGFkZGVkIGEgc2luZ2xlICcvJ2luIHRoZSBzdGFydCBwYXR0ZXJuCisiCitzeW4gcmVnaW9uICAgc2dtbFJlZ2lvbgorICAgIFwgc3RhcnQ9KzxceihbXiAvIT8+IiddXCtcKVwoXChcX1teLz5dKlteLyE/XT5cKVx8PlwpKworICAgIFwgZW5kPSs8L1x6MT4rCisgICAgXCBjb250YWlucz1zZ21sVGFnLHNnbWxFbmRUYWcsc2dtbENkYXRhLEBzZ21sUmVnaW9uQ2x1c3RlcixzZ21sQ29tbWVudCxzZ21sRW50aXR5LHNnbWxVbmljb2RlTnVtYmVyRGF0YSxAc2dtbFJlZ2lvbkhvb2sKKyAgICBcIGtlZXBlbmQKKyAgICBcIGV4dGVuZAorCisKKyIgZW1wdHkgdGFncy4gSnVzdCBhIGNvbnRhaW5lciwgbm8gaGlnaGxpZ2h0aW5nLgorIiBDb21wYXJlIHRoaXMgd2l0aCBzZ21sVGFnLgorIgorIiBFWEFNUExFOgorIgorIiA8dGFnIGlkPSJsb2xhIi8+CisiCisiIFRPRE8gdXNlIHNnbWxFbXB0eVRhZyBpbnRlYWQgb2Ygc2dtbFRhZworc3luIG1hdGNoICAgIHNnbWxFbXB0eVJlZ2lvbgorICAgIFwgKzxbXiAvIT8+IiddXChcX1teIic8Pl1cfCJcX1teIl0qIlx8J1xfW14nXSonXCkqLz4rCisgICAgXCBjb250YWlucz1zZ21sRW1wdHlUYWcKKworCisiIGNsdXN0ZXIgd2hpY2ggY29udGFpbnMgdGhlIGFib3ZlIHR3byBlbGVtZW50cworc3luIGNsdXN0ZXIgc2dtbFJlZ2lvbkNsdXN0ZXIgY29udGFpbnM9c2dtbFJlZ2lvbixzZ21sRW1wdHlSZWdpb24sc2dtbEFiYnJSZWdpb24KKworCisiICZlbnRpdGllczsgY29tcGFyZSB3aXRoIGR0ZAorc3luIG1hdGNoICAgc2dtbEVudGl0eQkJICAgICAgICImW147IFx0XSo7IiBjb250YWlucz1zZ21sRW50aXR5UHVuY3QKK3N5biBtYXRjaCAgIHNnbWxFbnRpdHlQdW5jdCAgY29udGFpbmVkICJbJi47XSIKKworCisiIFRoZSByZWFsIGNvbW1lbnRzICh0aGlzIGltcGxlbWVudHMgdGhlIGNvbW1lbnRzIGFzIGRlZmluZWQgYnkgc2dtbCwKKyIgYnV0IG5vdCBhbGwgc2dtbCBwYWdlcyBhY3R1YWxseSBjb25mb3JtIHRvIGl0LiBFcnJvcnMgYXJlIGZsYWdnZWQuCitzeW4gcmVnaW9uICBzZ21sQ29tbWVudCAgICAgICAgICAgICAgICBzdGFydD0rPCErICAgICAgICBlbmQ9Kz4rIGNvbnRhaW5zPXNnbWxDb21tZW50UGFydCxzZ21sU3RyaW5nLHNnbWxDb21tZW50RXJyb3Isc2dtbFRvZG8KK3N5biBrZXl3b3JkIHNnbWxUb2RvICAgICAgICAgY29udGFpbmVkIFRPRE8gRklYTUUgWFhYIGRpc3BsYXkKK3N5biBtYXRjaCAgIHNnbWxDb21tZW50RXJyb3IgY29udGFpbmVkICJbXj48IV0iCitzeW4gcmVnaW9uICBzZ21sQ29tbWVudFBhcnQgIGNvbnRhaW5lZCBzdGFydD0rLS0rICAgICAgICBlbmQ9Ky0tKworCisKKyIgQ0RhdGEgc2VjdGlvbnMKKyIKKyIgUFJPVklERVM6IEBzZ21sQ2RhdGFIb29rCisiCitzeW4gcmVnaW9uICAgIHNnbWxDZGF0YQorICAgIFwgc3RhcnQ9KzwhXFtDREFUQVxbKworICAgIFwgZW5kPStdXT4rCisgICAgXCBjb250YWlucz1zZ21sQ2RhdGFTdGFydCxzZ21sQ2RhdGFFbmQsQHNnbWxDZGF0YUhvb2sKKyAgICBcIGtlZXBlbmQKKyAgICBcIGV4dGVuZAorIiB1c2luZyB0aGUgZm9sbG93aW5nIGxpbmUgaW5zdGVhZCBsZWFkcyB0byBjb3JydXB0IGZvbGRpbmcgYXQgQ0RBVEEgcmVnaW9ucworIiBzeW4gbWF0Y2ggICAgc2dtbENkYXRhICAgICAgKzwhXFtDREFUQVxbXF8uXHstfV1dPisgIGNvbnRhaW5zPXNnbWxDZGF0YVN0YXJ0LHNnbWxDZGF0YUVuZCxAc2dtbENkYXRhSG9vaworc3luIG1hdGNoICAgIHNnbWxDZGF0YVN0YXJ0ICs8IVxbQ0RBVEFcWysgIGNvbnRhaW5lZCBjb250YWlucz1zZ21sQ2RhdGFDZGF0YQorc3luIGtleXdvcmQgIHNnbWxDZGF0YUNkYXRhIENEQVRBICAgICAgICAgIGNvbnRhaW5lZAorc3luIG1hdGNoICAgIHNnbWxDZGF0YUVuZCAgICtdXT4rICAgICAgICAgIGNvbnRhaW5lZAorCisKKyIgUHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMKKyIgVGhpcyBhbGxvd3MgIj8+IiBpbnNpZGUgc3RyaW5ncyAtLSBnb29kIGlkZWE/CitzeW4gcmVnaW9uICBzZ21sUHJvY2Vzc2luZyBtYXRjaGdyb3VwPXNnbWxQcm9jZXNzaW5nRGVsaW0gc3RhcnQ9Ijw/IiBlbmQ9Ij8+IiBjb250YWlucz1zZ21sQXR0cmliLHNnbWxFcXVhbFZhbHVlCisKKworIiBEVEQgLS0gd2UgdXNlIGR0ZC52aW0gaGVyZQorc3luIHJlZ2lvbiAgc2dtbERvY1R5cGUgbWF0Y2hncm91cD1zZ21sRG9jVHlwZURlY2wgc3RhcnQ9IlxjPCFET0NUWVBFImhlPXMrMixycz1zKzIgZW5kPSI+IiBjb250YWlucz1zZ21sRG9jVHlwZUtleXdvcmQsc2dtbElubGluZURURCxzZ21sU3RyaW5nCitzeW4ga2V5d29yZCBzZ21sRG9jVHlwZUtleXdvcmQgY29udGFpbmVkIERPQ1RZUEUgUFVCTElDIFNZU1RFTQorc3luIHJlZ2lvbiAgc2dtbElubGluZURURCBjb250YWluZWQgc3RhcnQ9IlxbIiBlbmQ9Il0iIGNvbnRhaW5zPUBzZ21sRFRECitzeW4gaW5jbHVkZSBAc2dtbERURCA8c2ZpbGU+OnA6aC9kdGQudmltCisKKworIiBzeW5jaHJvbml6aW5nCisiIFRPRE8gISEhIHRvIGJlIGltcHJvdmVkICEhIQorCitzeW4gc3luYyBtYXRjaCBzZ21sU3luY0RUIGdyb3VwaGVyZSAgc2dtbERvY1R5cGUgK1xfLlwoPCFET0NUWVBFXClcQD0rCisiIHN5biBzeW5jIG1hdGNoIHNnbWxTeW5jRFQgZ3JvdXB0aGVyZSAgTk9ORSAgICAgICArXT4rCisKK3N5biBzeW5jIG1hdGNoIHNnbWxTeW5jIGdyb3VwaGVyZSAgIHNnbWxSZWdpb24gICtcXy5cKDxbXiAvIT8+IiddXCtcKVxAPSsKKyIgc3luIHN5bmMgbWF0Y2ggc2dtbFN5bmMgZ3JvdXBoZXJlICBzZ21sUmVnaW9uICI8W14gLyE/PiInXSo+Igorc3luIHN5bmMgbWF0Y2ggc2dtbFN5bmMgZ3JvdXB0aGVyZSAgc2dtbFJlZ2lvbiAgKzwvW14gLyE/PiInXVwrPisKKworc3luIHN5bmMgbWlubGluZXM9MTAwCisKKworIiBUaGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCitoaSBkZWYgbGluayBzZ21sVG9kbwkJCVRvZG8KK2hpIGRlZiBsaW5rIHNnbWxUYWcJCQlGdW5jdGlvbgoraGkgZGVmIGxpbmsgc2dtbEVuZFRhZwkJCUlkZW50aWZpZXIKKyIgU0dNTCBzcGVjaWZpZworaGkgZGVmIGxpbmsgc2dtbEFiYnJFbmRUYWcJCUlkZW50aWZpZXIKK2hpIGRlZiBsaW5rIHNnbWxFbXB0eVRhZwkJRnVuY3Rpb24KK2hpIGRlZiBsaW5rIHNnbWxFbnRpdHkJCQlTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIHNnbWxFbnRpdHlQdW5jdAkJVHlwZQorCitoaSBkZWYgbGluayBzZ21sQXR0cmliUHVuY3QJCUNvbW1lbnQKK2hpIGRlZiBsaW5rIHNnbWxBdHRyaWIJCQlUeXBlCisKK2hpIGRlZiBsaW5rIHNnbWxWYWx1ZQkJCVN0cmluZworaGkgZGVmIGxpbmsgc2dtbFN0cmluZwkJCVN0cmluZworaGkgZGVmIGxpbmsgc2dtbENvbW1lbnQJCQlDb21tZW50CitoaSBkZWYgbGluayBzZ21sQ29tbWVudFBhcnQJCUNvbW1lbnQKK2hpIGRlZiBsaW5rIHNnbWxDb21tZW50RXJyb3IJCUVycm9yCitoaSBkZWYgbGluayBzZ21sRXJyb3IJCQlFcnJvcgorCitoaSBkZWYgbGluayBzZ21sUHJvY2Vzc2luZ0RlbGltCQlDb21tZW50CitoaSBkZWYgbGluayBzZ21sUHJvY2Vzc2luZwkJVHlwZQorCitoaSBkZWYgbGluayBzZ21sQ2RhdGEJCQlTdHJpbmcKK2hpIGRlZiBsaW5rIHNnbWxDZGF0YUNkYXRhCQlTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIHNnbWxDZGF0YVN0YXJ0CQlUeXBlCitoaSBkZWYgbGluayBzZ21sQ2RhdGFFbmQJCVR5cGUKKworaGkgZGVmIGxpbmsgc2dtbERvY1R5cGVEZWNsCQlGdW5jdGlvbgoraGkgZGVmIGxpbmsgc2dtbERvY1R5cGVLZXl3b3JkCQlTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIHNnbWxJbmxpbmVEVEQJCUZ1bmN0aW9uCitoaSBkZWYgbGluayBzZ21sVW5pY29kZU51bWJlckF0dHIJTnVtYmVyCitoaSBkZWYgbGluayBzZ21sVW5pY29kZVNwZWNpZmllckF0dHIJU3BlY2lhbENoYXIKK2hpIGRlZiBsaW5rIHNnbWxVbmljb2RlTnVtYmVyRGF0YQlOdW1iZXIKK2hpIGRlZiBsaW5rIHNnbWxVbmljb2RlU3BlY2lmaWVyRGF0YQlTcGVjaWFsQ2hhcgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzZ21sIgorCitsZXQgJmNwbyA9IHM6c2dtbF9jcG9fc2F2ZQordW5sZXQgczpzZ21sX2Nwb19zYXZlCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zZ21sZGVjbC52aW0gYi9ydW50aW1lL3N5bnRheC9zZ21sZGVjbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2OWZjNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NnbWxkZWNsLnZpbQpAQCAtMCwwICsxLDc5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJU0dNTCAoU0dNTCBEZWNsYXJhdGlvbiA8IVNHTUwgLi4uPikKKyIgTGFzdCBDaGFuZ2U6IGp1ZXZlcywgMjggZGUgZGljaWVtYnJlIGRlIDIwMDAsIDEzOjUxOjQ0IENMU1QKKyIgTWFpbnRhaW5lcjogIkRhbmllbCBBLiBNb2xpbmEgVy4iIDxzaWNrZEBsaW51eC1jaGlsZS5vcmc+CisiIFlvdSBjYW4gbW9kaWZ5IGFuZCBtYWludGFpbiB0aGlzIGZpbGUsIGluIG90aGVyIGNhc2Ugc2VuZCBjb21tZW50cworIiB0aGUgbWFpbnRhaW5lciBlbWFpbCBhZGRyZXNzLgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCitzeW4gcmVnaW9uCXNnbWxkZWNsRGVjbEJsb2NrCXRyYW5zcGFyZW50IHN0YXJ0PSs8IVNHTUwrIGVuZD0rPisKK3N5biByZWdpb24Jc2dtbGRlY2xUYWdCbG9jawl0cmFuc3BhcmVudCBzdGFydD0rPCsgZW5kPSs+KworCQkJCQlcIGNvbnRhaW5zPUFMTEJVVCwKKwkJCQkJXCBAc2dtbFRhZ0Vycm9yLEBzZ21sRXJySW5UYWcKK3N5biByZWdpb24Jc2dtbGRlY2xDb21tZW50CQljb250YWluZWQgc3RhcnQ9Ky0tKyBlbmQ9Ky0tKworCitzeW4ga2V5d29yZAlzZ21sZGVjbERlY2xLZXlzCVNHTUwgQ0hBUlNFVCBDQVBBQ0lUWSBTQ09QRSBTWU5UQVgKKwkJCQkJXCBGRUFUVVJFUworCitzeW4ga2V5d29yZAlzZ21sZGVjbFR5cGVzCQlCQVNFU0VUIERFU0NTRVQgRE9DVU1FTlQgTkFNSU5HIERFTElNCisJCQkJCVwgTkFNRVMgUVVBTlRJVFkgU0hVTkNIQVIgRE9DVFlQRQorCQkJCQlcIEVMRU1FTlQgRU5USVRZIEFUVExJU1QgTk9UQVRJT04KKwkJCQkJXCBUWVBFCisKK3N5biBrZXl3b3JkCXNnbWxkZWNsU3RhdGVtCQlDT05UUk9MUyBGVU5DVElPTiBOQU1FQ0FTRSBNSU5JTUlaRQorCQkJCQlcIExJTksgT1RIRVIgQVBQSU5GTyBSRUYgRU5USVRJRVMKKworc3luIGtleXdvcmQgc2dtbGRlY2xWYXJpYWJsZXMJVE9UQUxDQVAgR1JQQ0FQIEVOVENBUCBEQVRBVEFHIE9NSVRUQUcgUkFOSworCQkJCQlcIFNJTVBMRSBJTVBMSUNJVCBFWFBMSUNJVCBDT05DVVIgU1VCRE9DIEZPUk1BTCBBVFRDQVAKKwkJCQkJXCBBVFRDSENBUCBBVkdSUENBUCBFTEVNQ0FQIEVOVENIQ0FQIElEQ0FQIElEUkVGQ0FQCisJCQkJCVwgU0hPUlRUQUcKKworc3luIG1hdGNoCXNnbWxkZWNsTkNvbnN0CQljb250YWluZWQgK1swLTldXCsrCisKK3N5biByZWdpb24Jc2dtbGRlY2xTdHJpbmcJCWNvbnRhaW5lZCBzdGFydD0rIisgZW5kPSsiKworCitzeW4ga2V5d29yZAlzZ21sZGVjbEJvb2wJCVlFUyBOTworCitzeW4ga2V5d29yZAlzZ21sZGVjbFNwZWNpYWwJCVNIT1JUUkVGIFNHTUxSRUYgVU5VU0VEIE5PTkUgR0VORVJBTAorCQkJCQlcIFNFRUFMU08gQU5ZCisKK3N5biBzeW5jIGxpbmVzPTI1MAorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3NnbWxkZWNsX3N5bnRheF9pbml0IikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc2dtbGRlY2xfc3ludGF4X2luaXQgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgICAgICBIaUxpbmsJc2dtbGRlY2xEZWNsS2V5cwlLZXl3b3JkCisgICAgICBIaUxpbmsJc2dtbGRlY2xUeXBlcwkJVHlwZQorICAgICAgSGlMaW5rCXNnbWxkZWNsQ29uc3QJCUNvbnN0YW50CisgICAgICBIaUxpbmsJc2dtbGRlY2xOQ29uc3QJCUNvbnN0YW50CisgICAgICBIaUxpbmsJc2dtbGRlY2xTdHJpbmcJCVN0cmluZworICAgICAgSGlMaW5rCXNnbWxkZWNsRGVjbEJsb2NrCU5vcm1hbAorICAgICAgSGlMaW5rCXNnbWxkZWNsQm9vbAkJQm9vbGVhbgorICAgICAgSGlMaW5rCXNnbWxkZWNsU3BlY2lhbAkJU3BlY2lhbAorICAgICAgSGlMaW5rCXNnbWxkZWNsQ29tbWVudAkJQ29tbWVudAorICAgICAgSGlMaW5rCXNnbWxkZWNsU3RhdGVtCQlTdGF0ZW1lbnQKKwkgIEhpTGluawlzZ21sZGVjbFZhcmlhYmxlcwlUeXBlCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNnbWxkZWNsIgorIiB2aW06c2V0IHR3PTc4IHRzPTQ6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zZ21sbG54LnZpbSBiL3J1bnRpbWUvc3ludGF4L3NnbWxsbngudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOWU5MDQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zZ21sbG54LnZpbQpAQCAtMCwwICsxLDY4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJU0dNTC1saW51eGRvYyAoc3VwcG9ydGVkIGJ5IG9sZCBzZ21sdG9vbHMtMS54KQorIgkJKGZvciBtb3JlIGluZm9ybWF0aW9uLCB2aXNpdCB3d3cuc2dtbHRvb2xzLm9yZykKKyIgTWFpbnRhaW5lcjoJTmFtIFN1bmdIeXVuIDxuYW1zaEBrbGRwLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgQXByIDI2CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyIgdGFncworc3luIHJlZ2lvbiBzZ21sbG54RW5kVGFnCXN0YXJ0PSs8LysgICAgZW5kPSs+Kwljb250YWlucz1zZ21sbG54VGFnTixzZ21sbG54VGFnRXJyb3IKK3N5biByZWdpb24gc2dtbGxueFRhZwlzdGFydD0rPFteL10rIGVuZD0rPisJY29udGFpbnM9c2dtbGxueFRhZ04sc2dtbGxueFRhZ0Vycm9yCitzeW4gbWF0Y2ggIHNnbWxsbnhUYWdOCWNvbnRhaW5lZCArPFxzKlstYS16QS1aMC05XVwrK21zPXMrMQljb250YWlucz1zZ21sbG54VGFnTmFtZQorc3luIG1hdGNoICBzZ21sbG54VGFnTgljb250YWluZWQgKzwvXHMqWy1hLXpBLVowLTldXCsrbXM9cysyCWNvbnRhaW5zPXNnbWxsbnhUYWdOYW1lCisKK3N5biByZWdpb24gc2dtbGxueFRhZzIJc3RhcnQ9KzxccypbYS16QS1aXVwrLysga2VlcGVuZCBlbmQ9Ky8rCWNvbnRhaW5zPXNnbWxsbnhUYWdOMgorc3luIG1hdGNoICBzZ21sbG54VGFnTjIJY29udGFpbmVkICsvLiovK21zPXMrMSxtZT1lLTEKKworc3luIHJlZ2lvbiBzZ21sbG54U3BlY2lhbAlvbmVsaW5lIHN0YXJ0PSImIiBlbmQ9IjsiCisKKyIgdGFnIG5hbWVzCitzeW4ga2V5d29yZCBzZ21sbG54VGFnTmFtZSBjb250YWluZWQgYXJ0aWNsZSBhdXRob3IgZGF0ZSB0b2MgdGl0bGUgc2VjdCB2ZXJiCitzeW4ga2V5d29yZCBzZ21sbG54VGFnTmFtZSBjb250YWluZWQgYWJzdHJhY3QgdHNjcmVlbiBwIGl0ZW1pemUgaXRlbSBlbnVtCitzeW4ga2V5d29yZCBzZ21sbG54VGFnTmFtZSBjb250YWluZWQgZGVzY3JpcCBxdW90ZSBodG1sdXJsIGNvZGUgcmVmCitzeW4ga2V5d29yZCBzZ21sbG54VGFnTmFtZSBjb250YWluZWQgdHQgdGFnIGJmCitzeW4gbWF0Y2ggICBzZ21sbG54VGFnTmFtZSBjb250YWluZWQgInNlY3RcZFwrIgorCisiIENvbW1lbnRzCitzeW4gcmVnaW9uIHNnbWxsbnhDb21tZW50IHN0YXJ0PSs8IS0tKyBlbmQ9Ky0tPisKK3N5biByZWdpb24gc2dtbGxueERvY1R5cGUgc3RhcnQ9KzwhZG9jdHlwZSsgZW5kPSs+KworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zZ21sbG54X3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3NnbWxsbnhfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc2dtbGxueFRhZzIJICAgIEZ1bmN0aW9uCisgIEhpTGluayBzZ21sbG54VGFnTjIJICAgIEZ1bmN0aW9uCisgIEhpTGluayBzZ21sbG54VGFnCSAgICBTcGVjaWFsCisgIEhpTGluayBzZ21sbG54RW5kVGFnCSAgICBTcGVjaWFsCisgIEhpTGluayBzZ21sbG54UGFyZW4JICAgIFNwZWNpYWwKKyAgSGlMaW5rIHNnbWxsbnhFbnRpdHkJICAgIFR5cGUKKyAgSGlMaW5rIHNnbWxsbnhEb2NFbnQJICAgIFR5cGUKKyAgSGlMaW5rIHNnbWxsbnhUYWdOYW1lCSAgICBTdGF0ZW1lbnQKKyAgSGlMaW5rIHNnbWxsbnhDb21tZW50CSAgICBDb21tZW50CisgIEhpTGluayBzZ21sbG54U3BlY2lhbAkgICAgU3BlY2lhbAorICBIaUxpbmsgc2dtbGxueERvY1R5cGUJICAgIFByZVByb2MKKyAgSGlMaW5rIHNnbWxsbnhUYWdFcnJvciAgICBFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzZ21sbG54IgorCisiIHZpbTpzZXQgdHc9NzggdHM9OCBzdHM9MiBzdz0yIG5vZXQ6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zaC52aW0gYi9ydW50aW1lL3N5bnRheC9zaC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmNmVlMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NoLnZpbQpAQCAtMCwwICsxLDUzOCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CQlzaGVsbCAoc2gpIEtvcm4gc2hlbGwgKGtzaCkgYmFzaCAoc2gpCisiIE1haW50YWluZXI6CQlEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuICA8TmRyT2NoaXBTQFBjYW1wYmVsbEFmYW1pbHkuTWJpej4KKyIgUHJldmlvdXMgTWFpbnRhaW5lcjoJTGVubmFydCBTY2h1bHR6IDxMZW5uYXJ0LlNjaHVsdHpAZWNtd2YuaW50PgorIiBMYXN0IENoYW5nZToJCUFwciAyOCwgMjAwNAorIiBWZXJzaW9uOgkJNjgKKyIgVVJMOgkJaHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI3ZpbWxpbmtzX3N5bnRheAorIgorIiBVc2luZyB0aGUgZm9sbG93aW5nIFZJTSB2YXJpYWJsZXM6CisiIGI6aXNfa29ybnNoZWxsCWlmIGRlZmluZWQsIGVuaGFuY2Ugd2l0aCBrb3Juc2hlbGwgc3ludGF4CisiIGI6aXNfYmFzaAkJaWYgZGVmaW5lZCwgZW5oYW5jZSB3aXRoIGJhc2ggc3ludGF4CisiICAgaXNfa29ybnNoZWxsCWlmIG5laXRoZXIgYjppc19rb3Juc2hlbGwgb3IgYjppc19iYXNoIGlzCisiCQlkZWZpbmVkLCB0aGVuIGlmIGlzX2tvcm5zaGVsbCBpcyBzZXQKKyIJCWI6aXNfa29ybnNoZWxsIGlzIGRlZmF1bHQKKyIgICBpc19iYXNoCQlpZiBub25lIG9mIHRoZSBwcmV2aW91cyB0aHJlZSB2YXJpYWJsZXMgYXJlCisiCQlkZWZpbmVkLCB0aGVuIGlmIGlzX2Jhc2ggaXMgc2V0IGI6aXNfYmFzaCBpcyBkZWZhdWx0CisiIGc6c2hfZm9sZF9lbmFibGVkCWlmIG5vbi16ZXJvLCBzeW50YXggZm9sZGluZyBpcyBlbmFibGVkCisiICAgc2hfbWlubGluZXMJCXNldHMgdXAgc3luIHN5bmMgbWlubGluZXMgIChkZWZhdWx0OiAyMDApCisiICAgc2hfbWF4bGluZXMJCXNldHMgdXAgc3luIHN5bmMgbWF4bGluZXMgIChkZWZhdWx0OiB0d2ljZSBzaF9taW5saW5lcykKKyIKKyIgVGhpcyBmaWxlIGluY2x1ZGVzIG1hbnkgaWRlYXMgZnJvbSDJcmljIEJydW5ldCAoZXJpYy5icnVuZXRAZW5zLmZyKQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgYjppc19zaCBpcyBzZXQgd2hlbiAiIyEgL2Jpbi9zaCIgaXMgZm91bmQ7CisiIEhvd2V2ZXIsIGl0IG9mdGVuIGlzIGp1c3QgYSBtYXNxdWVyYWRlIGJ5IGJhc2ggKHR5cGljYWxseSBMaW51eCkKKyIgb3Iga29ybnNoZWxsICh0eXBpY2FsbHkgd29ya3N0YXRpb25zIHdpdGggUG9zaXggInNoIikuCisiIFNvLCB3aGVuIHRoZSB1c2VyIHNldHMgImlzX2Jhc2giIG9yICJpc19rb3Juc2hlbGwiLAorIiBhIGI6aXNfc2ggaXMgY29udmVydGVkIGludG8gYjppc19iYXNoL2I6aXNfa29ybnNoZWxsLAorIiByZXNwZWN0aXZlbHkuCitpZiAhZXhpc3RzKCJiOmlzX2tvcm5zaGVsbCIpICYmICFleGlzdHMoImI6aXNfYmFzaCIpCisgIGlmIGV4aXN0cygiaXNfa29ybnNoZWxsIikKKyAgICBsZXQgYjppc19rb3Juc2hlbGw9IDEKKyAgICBpZiBleGlzdHMoImI6aXNfc2giKQorICAgICAgdW5sZXQgYjppc19zaAorICAgIGVuZGlmCisgIGVsc2VpZiBleGlzdHMoImlzX2Jhc2giKQorICAgIGxldCBiOmlzX2Jhc2g9IDEKKyAgICBpZiBleGlzdHMoImI6aXNfc2giKQorICAgICAgdW5sZXQgYjppc19zaAorICAgIGVuZGlmCisgIGVsc2UKKyAgICBsZXQgYjppc19zaD0gMQorICBlbmRpZgorZW5kaWYKKworaWYgIWV4aXN0cygiZzpzaF9mb2xkX2VuYWJsZWQiKQorIGxldCBnOnNoX2ZvbGRfZW5hYmxlZD0gMAorZW5kaWYKKworIiBzaCBzeW50YXggaXMgY2FzZSBzZW5zaXRpdmUKK3N5biBjYXNlIG1hdGNoCisKKyIgQ2x1c3RlcnM6IGNvbnRhaW5zPUAuLi4gY2x1c3RlcnMKKyI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzeW4gY2x1c3RlciBzaENhc2VFc2FjTGlzdAljb250YWlucz1zaENhc2VTdGFydCxzaENhc2Usc2hDYXNlQmFyLHNoQ2FzZUluLHNoQ29tbWVudCxzaERlcmVmLHNoRGVyZWZTaW1wbGUsc2hDYXNlQ29tbWFuZFN1YixzaENhc2VTaW5nbGVRdW90ZSxzaENhc2VEb3VibGVRdW90ZSxzaFNwZWNpYWwKK3N5biBjbHVzdGVyIHNoQ2FzZUxpc3QJY29udGFpbnM9QHNoQ29tbWFuZFN1Ykxpc3Qsc2hDYXNlRXNhYyxzaENvbG9uLHNoQ29tbWFuZFN1YixzaENvbW1hbmRTdWIsc2hDb21tZW50LHNoRG8sc2hFY2hvLHNoRXhwcixzaEZvcixzaEhlcmVEb2Msc2hJZixzaFJlZGlyLHNoU2V0TGlzdCxzaFNvdXJjZSxzaFN0YXRlbWVudCxzaFZhcmlhYmxlLGJrc2hGdW5jdGlvbixzaFNwZWNpYWwKK3N5biBjbHVzdGVyIHNoQ29sb25MaXN0CWNvbnRhaW5zPUBzaENhc2VMaXN0CitzeW4gY2x1c3RlciBzaENvbW1hbmRTdWJMaXN0CWNvbnRhaW5zPXNoQXJpdGhtZXRpYyxzaERlcmVmLHNoRGVyZWZTaW1wbGUsc2hOdW1iZXIsc2hPcGVyYXRvcixzaFBvc25QYXJtLHNoU3BlY2lhbCxzaFNpbmdsZVF1b3RlLHNoRG91YmxlUXVvdGUsc2hTdGF0ZW1lbnQsc2hWYXJpYWJsZSxzaFN1YlNoLHNoQWxpYXMKK3N5biBjbHVzdGVyIHNoRGJsUXVvdGVMaXN0CWNvbnRhaW5zPXNoQ29tbWFuZFN1YixzaERlcmVmLHNoRGVyZWZTaW1wbGUsc2hTcGVjaWFsLHNoUG9zblBhcm0KK3N5biBjbHVzdGVyIHNoRGVyZWZMaXN0CWNvbnRhaW5zPXNoRGVyZWYsc2hEZXJlZlNpbXBsZSxzaERlcmVmVmFyLHNoRGVyZWZTcGVjaWFsLHNoRGVyZWZXb3JkRXJyb3IKK3N5biBjbHVzdGVyIHNoRGVyZWZWYXJMaXN0CWNvbnRhaW5zPXNoRGVyZWZPcCxzaERlcmVmVmFyQXJyYXksc2hEZXJlZk9wRXJyb3IKK3N5biBjbHVzdGVyIHNoRWNob0xpc3QJY29udGFpbnM9c2hBcml0aG1ldGljLHNoQ29tbWFuZFN1YixzaERlcmVmLHNoRGVyZWZTaW1wbGUsc2hFeHByLHNoU2luZ2xlUXVvdGUsc2hEb3VibGVRdW90ZSxzaFNwZWNpYWwKK3N5biBjbHVzdGVyIHNoRXhwckxpc3QxCWNvbnRhaW5zPXNoQ2hhckNsYXNzLHNoTnVtYmVyLHNoT3BlcmF0b3Isc2hTaW5nbGVRdW90ZSxzaERvdWJsZVF1b3RlLHNoU3BlY2lhbCxzaEV4cHIsc2hEYmxCcmFjZSxzaERlcmVmLHNoRGVyZWZTaW1wbGUKK3N5biBjbHVzdGVyIHNoRXhwckxpc3QyCWNvbnRhaW5zPUBzaEV4cHJMaXN0MSxAc2hDYXNlTGlzdAorc3luIGNsdXN0ZXIgc2hGdW5jdGlvbkxpc3QJY29udGFpbnM9QHNoQ2FzZUxpc3Qsc2hPcGVyYXRvcgorc3luIGNsdXN0ZXIgc2hIZXJlQmVnaW5MaXN0CWNvbnRhaW5zPUBzaENvbW1hbmRTdWJMaXN0CitzeW4gY2x1c3RlciBzaEhlcmVMaXN0CWNvbnRhaW5zPXNoQmVnaW5IZXJlLHNoSGVyZVBheWxvYWQKK3N5biBjbHVzdGVyIHNoSGVyZUxpc3REUQljb250YWlucz1zaEJlZ2luSGVyZSxAc2hEYmxRdW90ZUxpc3Qsc2hIZXJlUGF5bG9hZAorc3luIGNsdXN0ZXIgc2hJZExpc3QJY29udGFpbnM9c2hDb21tYW5kU3ViLHNoV3JhcExpbmVPcGVyYXRvcixzaElkV2hpdGVTcGFjZSxzaERlcmVmLHNoRGVyZWZTaW1wbGUsc2hTcGVjaWFsLHNoUmVkaXIsc2hTaW5nbGVRdW90ZSxzaERvdWJsZVF1b3RlLHNoRXhwcgorc3luIGNsdXN0ZXIgc2hMb29wTGlzdAljb250YWlucz1Ac2hDYXNlTGlzdCxzaFRlc3RPcHIsc2hFeHByLHNoRGJsQnJhY2Usc2hDb25kaXRpb25hbCxzaENhc2VFc2FjCitzeW4gY2x1c3RlciBzaFN1YlNoTGlzdAljb250YWlucz1Ac2hDYXNlTGlzdAorc3luIGNsdXN0ZXIgc2hUZXN0TGlzdAljb250YWlucz1zaENoYXJDbGFzcyxzaENvbW1lbnQsc2hDb21tYW5kU3ViLHNoRGVyZWYsc2hEZXJlZlNpbXBsZSxzaERvdWJsZVF1b3RlLHNoRXhwcixzaEV4cHIsc2hOdW1iZXIsc2hPcGVyYXRvcixzaFNpbmdsZVF1b3RlLHNoU3BlY2lhbCxzaFRlc3RPcHIKKworCisiIEVjaG86CisiID09PT0KKyIgVGhpcyBvbmUgaXMgbmVlZGVkIElOU0lERSBhIENvbW1hbmRTdWIsIHNvIHRoYXQgYGVjaG8gYmxhYCBiZSBjb3JyZWN0CitzeW4gcmVnaW9uIHNoRWNobyBtYXRjaGdyb3VwPXNoU3RhdGVtZW50IHN0YXJ0PSJcPGVjaG9cPiIgIHNraXA9IlxcJCIgbWF0Y2hncm91cD1zaE9wZXJhdG9yIGVuZD0iJCIgbWF0Y2hncm91cD1OT05FIGVuZD0iWzw+OyZ8KCldIm1lPWUtMSBlbmQ9IlxkWzw+XSJtZT1lLTIgZW5kPSIjIm1lPWUtMSBjb250YWlucz1Ac2hFY2hvTGlzdAorc3luIHJlZ2lvbiBzaEVjaG8gbWF0Y2hncm91cD1zaFN0YXRlbWVudCBzdGFydD0iXDxwcmludFw+IiBza2lwPSJcXCQiIG1hdGNoZ3JvdXA9c2hPcGVyYXRvciBlbmQ9IiQiIG1hdGNoZ3JvdXA9Tk9ORSBlbmQ9Ils8PjsmfCgpXSJtZT1lLTEgZW5kPSJcZFs8Pl0ibWU9ZS0yIGVuZD0iIyJtZT1lLTEgY29udGFpbnM9QHNoRWNob0xpc3QKKworIiBUaGlzIG11c3QgYmUgYWZ0ZXIgdGhlIHN0cmluZ3MsIHNvIHRoYXQgYmxhIFwiIGJlIGNvcnJlY3QKK3N5biByZWdpb24gc2hFbWJlZGRlZEVjaG8gY29udGFpbmVkIG1hdGNoZ3JvdXA9c2hTdGF0ZW1lbnQgc3RhcnQ9Ilw8cHJpbnRcPiIgc2tpcD0iXFwkIiBtYXRjaGdyb3VwPXNoT3BlcmF0b3IgZW5kPSIkIiBtYXRjaGdyb3VwPU5PTkUgZW5kPSJbPD47JnxgKV0ibWU9ZS0xIGVuZD0iXGRbPD5dIm1lPWUtMiBlbmQ9IiMibWU9ZS0xIGNvbnRhaW5zPXNoTnVtYmVyLHNoU2luZ2xlUXVvdGUsc2hEZXJlZixzaERlcmVmU2ltcGxlLHNoU3BlY2lhbFZhcixzaFNwZWNpYWwsc2hPcGVyYXRvcixzaERvdWJsZVF1b3RlLHNoQ2hhckNsYXNzCisKKyIgQWxpYXM6CisiID09PT09CitpZiBleGlzdHMoImI6aXNfa29ybnNoZWxsIikgfHwgZXhpc3RzKCJiOmlzX2Jhc2giKQorIHN5biBtYXRjaCBzaFN0YXRlbWVudCAiXDxhbGlhc1w+IgorIHN5biByZWdpb24gc2hBbGlhcyBtYXRjaGdyb3VwPXNoU3RhdGVtZW50IHN0YXJ0PSJcPGFsaWFzXD5cc1wrXChcd1wrXClcQD0iIHNraXA9IlxcJCIgZW5kPSJcPlx8YCIKKyBzeW4gcmVnaW9uIHNoQWxpYXMgbWF0Y2hncm91cD1zaFN0YXRlbWVudCBzdGFydD0iXDxhbGlhc1w+XHNcK1woXHdcKz1cKVxAPSIgc2tpcD0iXFwkIiBlbmQ9Ij0iCitlbmRpZgorCisiIEVycm9yIENvZGVzCisiID09PT09PT09PT09CitzeW4gbWF0Y2ggICBzaERvRXJyb3IgIlw8ZG9uZVw+Igorc3luIG1hdGNoICAgc2hJZkVycm9yICJcPGZpXD4iCitzeW4gbWF0Y2ggICBzaEluRXJyb3IgIlw8aW5cPiIKK3N5biBtYXRjaCAgIHNoQ2FzZUVycm9yICI7OyIKK3N5biBtYXRjaCAgIHNoRXNhY0Vycm9yICJcPGVzYWNcPiIKK3N5biBtYXRjaCAgIHNoQ3VybHlFcnJvciAifSIKK3N5biBtYXRjaCAgIHNoUGFyZW5FcnJvciAiKSIKK2lmIGV4aXN0cygiYjppc19rb3Juc2hlbGwiKQorIHN5biBtYXRjaCAgICAgc2hEVGVzdEVycm9yICJdXSIKK2VuZGlmCitzeW4gbWF0Y2ggICAgIHNoVGVzdEVycm9yICJdIgorCisiIE9wdGlvbnMgaW50ZXJjZXB0b3IKKyIgPT09PT09PT09PT09PT09PT09PQorc3luIG1hdGNoICAgc2hPcHRpb24gICJcc1tcLStdW2EtekEtWjAtOV1cK1w+Im1zPXMrMQorc3luIG1hdGNoICAgc2hPcHRpb24gICJccy0tXFNcKyJtcz1zKzEKKworIiBPcGVyYXRvcnM6CisiID09PT09PT09PQorc3luIG1hdGNoICAgc2hPcGVyYXRvcgkiWyEmO3xdIgorc3luIG1hdGNoICAgc2hPcGVyYXRvcgkiXFtbW146XVx8XF1dIgorc3luIG1hdGNoICAgc2hPcGVyYXRvcgkiIVw9PSIJCXNraXB3aGl0ZSBuZXh0Z3JvdXA9c2hQYXR0ZXJuCitzeW4gbWF0Y2ggICBzaFBhdHRlcm4JIlw8XFNcK1woKSlcKVxAPSIJY29udGFpbmVkIGNvbnRhaW5zPXNoU2luZ2xlUXVvdGUsc2hEb3VibGVRdW90ZSxzaERlcmVmCisKKyIgU3Vic2hlbGxzOgorIiA9PT09PT09PT0KK3N5biByZWdpb24gc2hFeHByICB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXNoRXhwclJlZ2lvbiAgc3RhcnQ9InsiIGVuZD0ifSIJY29udGFpbnM9QHNoRXhwckxpc3QyCitzeW4gcmVnaW9uIHNoU3ViU2ggdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1zaFN1YlNoUmVnaW9uIHN0YXJ0PSIoIiBlbmQ9IikiCWNvbnRhaW5zPUBzaFN1YlNoTGlzdAorCisiIFRlc3RzCisiPT09PT09Cisic3luIHJlZ2lvbiAgc2hFeHByIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9c2hSYW5nZSBzdGFydD0iXFsiIHNraXA9K1xcXFxcfFxcJCsgZW5kPSJcXSIgY29udGFpbnM9QHNoVGVzdExpc3QKK3N5biByZWdpb24gIHNoRXhwciBtYXRjaGdyb3VwPXNoUmFuZ2Ugc3RhcnQ9IlxbIiBza2lwPStcXFxcXHxcXCQrIGVuZD0iXF0iIGNvbnRhaW5zPUBzaFRlc3RMaXN0CitzeW4gcmVnaW9uICBzaEV4cHIgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1zaFN0YXRlbWVudCBzdGFydD0iXDx0ZXN0XD4iIHNraXA9K1xcXFxcfFxcJCsgbWF0Y2hncm91cD1OT05FIGVuZD0iWzsmfF0ibWU9ZS0xIGVuZD0iJCIgY29udGFpbnM9QHNoRXhwckxpc3QxCitzeW4gbWF0Y2ggICBzaFRlc3RPcHIgY29udGFpbmVkICI8PVx8Pj1cfCE9XHw9PVx8LS5cPlx8LVwobnRcfG90XHxlZlx8ZXFcfG5lXHxsdFx8bGVcfGd0XHxnZVwpXD5cfFshPTw+XSIKK2lmIGV4aXN0cygiYjppc19rb3Juc2hlbGwiKSB8fCBleGlzdHMoImI6aXNfYmFzaCIpCisgc3luIHJlZ2lvbiAgc2hEYmxCcmFjZSBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXFtcWyIgc2tpcD0rXFxcXFx8XFwkKyBlbmQ9IlxdXF0iCWNvbnRhaW5zPUBzaFRlc3RMaXN0Cisgc3luIHJlZ2lvbiAgc2hEYmxQYXJlbiBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iKCgiIHNraXA9K1xcXFxcfFxcJCsgZW5kPSIpKSIJY29udGFpbnM9QHNoVGVzdExpc3QKK2VuZGlmCisKKyIgQ2hhcmFjdGVyIENsYXNzIGluIFJhbmdlCisiID09PT09PT09PT09PT09PT09PT09PT09PQorc3luIG1hdGNoICAgc2hDaGFyQ2xhc3MJY29udGFpbmVkCSJcWzpcKGJhY2tzcGFjZVx8ZXNjYXBlXHxyZXR1cm5cfHhkaWdpdFx8YWxudW1cfGFscGhhXHxibGFua1x8Y250cmxcfGRpZ2l0XHxncmFwaFx8bG93ZXJcfHByaW50XHxwdW5jdFx8c3BhY2VcfHVwcGVyXHx0YWJcKTpcXSIKKworIiBMb29wczogZG8sIGlmLCB3aGlsZSwgdW50aWwKKyIgPT09PT0KK3N5biByZWdpb24gc2hEbwkJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD1zaENvbmRpdGlvbmFsIHN0YXJ0PSJcPGRvXD4iIG1hdGNoZ3JvdXA9c2hDb25kaXRpb25hbCBlbmQ9Ilw8ZG9uZVw+IiBjb250YWlucz1Ac2hMb29wTGlzdAorc3luIHJlZ2lvbiBzaElmCQl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXNoQ29uZGl0aW9uYWwgc3RhcnQ9Ilw8aWZcPiIgbWF0Y2hncm91cD1zaENvbmRpdGlvbmFsIGVuZD0iXDw7XF9zKnRoZW5cPiIgZW5kPSJcPGZpXD4iICAgY29udGFpbnM9QHNoTG9vcExpc3Qsc2hEYmxCcmFjZSxzaERibFBhcmVuCitzeW4gcmVnaW9uIHNoRm9yCW1hdGNoZ3JvdXA9c2hMb29wIHN0YXJ0PSJcPGZvclw+IiBlbmQ9Ilw8aW5cPiIgZW5kPSJcPGRvXD4ibWU9ZS0yCWNvbnRhaW5zPUBzaExvb3BMaXN0LHNoRGJsUGFyZW4KK2lmIGV4aXN0cygiYjppc19rb3Juc2hlbGwiKSB8fCBleGlzdHMoImI6aXNfYmFzaCIpCisgc3luIGNsdXN0ZXIgc2hDYXNlTGlzdCBhZGQ9c2hSZXBlYXQKKyBzeW4gcmVnaW9uIHNoUmVwZWF0ICAgbWF0Y2hncm91cD1zaExvb3AgICBzdGFydD0iXDx3aGlsZVw+IiBlbmQ9Ilw8aW5cPiIgZW5kPSJcPGRvXD4ibWU9ZS0yCWNvbnRhaW5zPUBzaExvb3BMaXN0LHNoRGJsUGFyZW4sc2hEYmxCcmFjZQorIHN5biByZWdpb24gc2hSZXBlYXQgICBtYXRjaGdyb3VwPXNoTG9vcCAgIHN0YXJ0PSJcPHVudGlsXD4iIGVuZD0iXDxpblw+IiBlbmQ9Ilw8ZG9cPiJtZT1lLTIJY29udGFpbnM9QHNoTG9vcExpc3Qsc2hEYmxQYXJlbixzaERibEJyYWNlCisgc3luIHJlZ2lvbiBzaENhc2VFc2FjIG1hdGNoZ3JvdXA9c2hDb25kaXRpb25hbCBzdGFydD0iXDxzZWxlY3RcPiIgbWF0Y2hncm91cD1zaENvbmRpdGlvbmFsIGVuZD0iXDxpblw+IiBlbmQ9Ilw8ZG9cPiIgY29udGFpbnM9QHNoTG9vcExpc3QKK2Vsc2UKKyBzeW4gcmVnaW9uIHNoUmVwZWF0ICAgbWF0Y2hncm91cD1zaExvb3AgICBzdGFydD0iXDx3aGlsZVw+IiBlbmQ9Ilw8ZG9cPiJtZT1lLTIJCWNvbnRhaW5zPUBzaExvb3BMaXN0Cisgc3luIHJlZ2lvbiBzaFJlcGVhdCAgIG1hdGNoZ3JvdXA9c2hMb29wICAgc3RhcnQ9Ilw8dW50aWxcPiIgZW5kPSJcPGRvXD4ibWU9ZS0yCQljb250YWlucz1Ac2hMb29wTGlzdAorZW5kaWYKKworIiBDYXNlOiBjYXNlLi4uZXNhYworIiA9PT09CitzeW4gbWF0Y2ggICBzaENhc2VCYXIJY29udGFpbmVkIHNraXB3aGl0ZSAiW158ImAnKCldXHstfXwiaHM9ZQkJbmV4dGdyb3VwPXNoQ2FzZSxzaENhc2VTdGFydCxzaENhc2VCYXIsc2hDb21tZW50LHNoQ2FzZVNpbmdsZVF1b3RlLHNoQ2FzZURvdWJsZVF1b3RlCitzeW4gbWF0Y2ggICBzaENhc2VTdGFydAljb250YWluZWQgc2tpcHdoaXRlIHNraXBubCAiKCIJCQluZXh0Z3JvdXA9c2hDYXNlLHNoQ2FzZUJhcgorc3luIHJlZ2lvbiAgc2hDYXNlCWNvbnRhaW5lZCBza2lwd2hpdGUgc2tpcG5sIG1hdGNoZ3JvdXA9c2hTbmdsQ2FzZSBzdGFydD0iW14kKCldXHstfSkibXM9cyxocz1lICBlbmQ9Ijs7IiBlbmQ9ImVzYWMibWU9cy0xIGNvbnRhaW5zPUBzaENhc2VMaXN0IG5leHRncm91cD1zaENhc2VTdGFydCxzaENhc2UsLHNoQ29tbWVudAorc3luIHJlZ2lvbiAgc2hDYXNlRXNhYwltYXRjaGdyb3VwPXNoQ29uZGl0aW9uYWwgc3RhcnQ9Ilw8Y2FzZVw+IiBlbmQ9Ilw8ZXNhY1w+Igljb250YWlucz1Ac2hDYXNlRXNhY0xpc3QKK3N5biBrZXl3b3JkIHNoQ2FzZUluCWNvbnRhaW5lZCBza2lwd2hpdGUgc2tpcG5sIGluCQkJbmV4dGdyb3VwPXNoQ2FzZSxzaENhc2VTdGFydCxzaENhc2VCYXIsc2hDb21tZW50LHNoQ2FzZVNpbmdsZVF1b3RlLHNoQ2FzZURvdWJsZVF1b3RlCitzeW4gcmVnaW9uICBzaENhc2VTaW5nbGVRdW90ZQltYXRjaGdyb3VwPXNoT3BlcmF0b3Igc3RhcnQ9KycrIHNraXA9K1xcXFxcfFxcLisgZW5kPSsnKwljb250YWlucz1zaFN0cmluZ1NwZWNpYWwJCXNraXB3aGl0ZSBza2lwbmwgbmV4dGdyb3VwPXNoQ2FzZUJhcgljb250YWluZWQKK3N5biByZWdpb24gIHNoQ2FzZURvdWJsZVF1b3RlCW1hdGNoZ3JvdXA9c2hPcGVyYXRvciBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwuKyBlbmQ9KyIrCWNvbnRhaW5zPUBzaERibFF1b3RlTGlzdCxzaFN0cmluZ1NwZWNpYWwJc2tpcHdoaXRlIHNraXBubCBuZXh0Z3JvdXA9c2hDYXNlQmFyCWNvbnRhaW5lZAorc3luIHJlZ2lvbiAgc2hDYXNlQ29tbWFuZFN1YglzdGFydD0rYCsgc2tpcD0rXFxcXFx8XFwuKyBlbmQ9K2ArCQljb250YWlucz1Ac2hDb21tYW5kU3ViTGlzdAkJc2tpcHdoaXRlIHNraXBubCBuZXh0Z3JvdXA9c2hDYXNlQmFyCWNvbnRhaW5lZAorCisiIE1pc2MKKyI9PT09PQorc3luIG1hdGNoICAgc2hXcmFwTGluZU9wZXJhdG9yICJcXCQiCitzeW4gcmVnaW9uICBzaENvbW1hbmRTdWIgICBzdGFydD0iYCIgc2tpcD0iXFxcXFx8XFwuIiBlbmQ9ImAiIGNvbnRhaW5zPUBzaENvbW1hbmRTdWJMaXN0CisKKyIgJCguLikgaXMgbm90IHN1cHBvcnRlZCBieSBzaCAoQm91cm5lIHNoZWxsKS4gIEhvd2V2ZXIsIGFwcGFyZW50bHkKKyIgc29tZSBzeXN0ZW1zIChIUD8pIGhhdmUgYXMgdGhlaXIgL2Jpbi9zaCBhIChsaW5rIHRvKSBLb3JuIHNoZWxsCisiIChpZS4gUG9zaXggY29tcGxpYW50IHNoZWxsKS4gIC9iaW4va3NoIHNob3VsZCB3b3JrIGZvciB0aG9zZQorIiBzeXN0ZW1zIHRvbywgaG93ZXZlciwgc28gdGhlIGZvbGxvd2luZyBzeW50YXggd2lsbCBmbGFnICQoLi4pIGFzCisiIGFuIEVycm9yIHVuZGVyIC9iaW4vc2guICBCeSBjb25zZW5zdXMgb2YgdmltZGV2J2VycyEKK2lmIGV4aXN0cygiYjppc19rb3Juc2hlbGwiKSB8fCBleGlzdHMoImI6aXNfYmFzaCIpCisgc3luIHJlZ2lvbiBzaENvbW1hbmRTdWIgbWF0Y2hncm91cD1zaENtZFN1YlJlZ2lvbiBzdGFydD0iXCQoIiAgc2tpcD0nXFxcXFx8XFwuJyBlbmQ9IikiICBjb250YWlucz1Ac2hDb21tYW5kU3ViTGlzdAorIHN5biByZWdpb24gc2hBcml0aG1ldGljIG1hdGNoZ3JvdXA9c2hBcml0aFJlZ2lvbiAgc3RhcnQ9IlwkKCgiIHNraXA9J1xcXFxcfFxcLicgZW5kPSIpKSIgY29udGFpbnM9QHNoQ29tbWFuZFN1Ykxpc3QKKyBzeW4gbWF0Y2ggIHNoU2tpcEluaXRXUyBjb250YWluZWQJIl5cc1wrIgorZWxzZQorIHN5biByZWdpb24gc2hDb21tYW5kU3ViIG1hdGNoZ3JvdXA9RXJyb3Igc3RhcnQ9IiQoIiBlbmQ9IikiIGNvbnRhaW5zPUBzaENvbW1hbmRTdWJMaXN0CitlbmRpZgorCitpZiBleGlzdHMoImI6aXNfYmFzaCIpCisgc3luIGNsdXN0ZXIgc2hDb21tYW5kU3ViTGlzdCBhZGQ9YmFzaFNwZWNpYWxWYXJpYWJsZXMsYmFzaFN0YXRlbWVudAorIHN5biBjbHVzdGVyIHNoQ2FzZUxpc3QgYWRkPWJhc2hBZG1pblN0YXRlbWVudCxiYXNoU3RhdGVtZW50Cisgc3luIGtleXdvcmQgYmFzaFNwZWNpYWxWYXJpYWJsZXMgY29udGFpbmVkIEJBU0ggQkFTSF9FTlYgQkFTSF9WRVJTSU5GTyBCQVNIX1ZFUlNJT04gQ0RQQVRIIERJUlNUQUNLIEVVSUQgRkNFRElUIEZJR05PUkUgR0xPQklHTk9SRSBHUk9VUFMgSElTVENNRCBISVNUQ09OVFJPTCBISVNURklMRSBISVNURklMRVNJWkUgSElTVElHTk9SRSBISVNUU0laRSBIT01FIEhPU1RGSUxFIEhPU1ROQU1FIEhPU1RUWVBFIElGUyBJR05PUkVFT0YgSU5QVVRSQyBMQU5HIExDX0FMTCBMQ19DT0xMQVRFIExDX01FU1NBR0VTIExJTkVOTyBNQUNIVFlQRSBNQUlMIE1BSUxDSEVDSyBNQUlMUEFUSCBPTERQV0QgT1BUQVJHIE9QVEVSUiBPUFRJTkQgT1NUWVBFIFBBVEggUElQRVNUQVRVUyBQUElEIFBST01QVF9DT01NQU5EIFBTMSBQUzIgUFMzIFBTNCBQV0QgUkFORE9NIFJFUExZIFNFQ09ORFMgU0hFTExPUFRTIFNITFZMIFRJTUVGT1JNQVQgVElNRU9VVCBVSUQgYXV0b19yZXN1bWUgaGlzdGNoYXJzCisgc3luIGtleXdvcmQgYmFzaFN0YXRlbWVudCBjaG1vZCBjbGVhciBjb21wbGV0ZSBkdSBlZ3JlcCBleHByIGZncmVwIGZpbmQgZ251ZmluZCBnbnVncmVwIGdyZXAgaW5zdGFsbCBsZXNzIGxzIG1rZGlyIG12IHJtIHJtZGlyIHJwbSBzZWQgc2xlZXAgc29ydCBzdHJpcCB0YWlsIHRvdWNoCisgc3luIGtleXdvcmQgYmFzaEFkbWluU3RhdGVtZW50IGRhZW1vbiBraWxsYWxsIGtpbGxwcm9jIG5pY2UgcmVsb2FkIHJlc3RhcnQgc3RhcnQgc3RhdHVzIHN0b3AKK2VuZGlmCisKK2lmIGV4aXN0cygiYjppc19rb3Juc2hlbGwiKQorIHN5biBjbHVzdGVyIHNoQ29tbWFuZFN1Ykxpc3QgYWRkPWtzaFNwZWNpYWxWYXJpYWJsZXMsa3NoU3RhdGVtZW50Cisgc3luIGNsdXN0ZXIgc2hDYXNlTGlzdCBhZGQ9a3NoU3RhdGVtZW50Cisgc3luIGtleXdvcmQga3NoU3BlY2lhbFZhcmlhYmxlcyBjb250YWluZWQgQ0RQQVRIIENPTFVNTlMgRURJVE9SIEVOViBFUlJOTyBGQ0VESVQgRlBBVEggSElTVEZJTEUgSElTVFNJWkUgSE9NRSBJRlMgTElORU5PIExJTkVTIE1BSUwgTUFJTENIRUNLIE1BSUxQQVRIIE9MRFBXRCBPUFRBUkcgT1BUSU5EIFBBVEggUFBJRCBQUzEgUFMyIFBTMyBQUzQgUFdEIFJBTkRPTSBSRVBMWSBTRUNPTkRTIFNIRUxMIFRNT1VUIFZJU1VBTAorIHN5biBrZXl3b3JkIGtzaFN0YXRlbWVudCBjYXQgY2htb2QgY2xlYXIgY3AgZHUgZWdyZXAgZXhwciBmZ3JlcCBmaW5kIGdyZXAgaW5zdGFsbCBraWxsYWxsIGxlc3MgbHMgbWtkaXIgbXYgbmljZSBwcmludGVudiBybSBybWRpciBzZWQgc29ydCBzdHJpcCBzdHR5IHRhaWwgdG91Y2ggdHB1dAorZW5kaWYKKworc3luIG1hdGNoICAgc2hTb3VyY2UJIl5cLlxzIgorc3luIG1hdGNoICAgc2hTb3VyY2UJIlxzXC5ccyIKK3N5biByZWdpb24gIHNoQ29sb24Jc3RhcnQ9Il5ccyo6IiBlbmQ9IiRcfCIgZW5kPSIjIm1lPWUtMSBjb250YWlucz1Ac2hDb2xvbkxpc3QKKworIiBTdHJpbmcgYW5kIENoYXJhY3RlciBjb25zdGFudHMKKyI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzeW4gbWF0Y2ggICBzaE51bWJlcgkiLVw9XDxcZFwrXD4iCitzeW4gbWF0Y2ggICBzaFNwZWNpYWwJIlxcXGRcZFxkXHxcXFthYmNmbnJ0djBdIgljb250YWluZWQKK3N5biByZWdpb24gIHNoU2luZ2xlUXVvdGUJbWF0Y2hncm91cD1zaE9wZXJhdG9yIHN0YXJ0PSsnKyBlbmQ9KycrCQljb250YWlucz1zaFN0cmluZ1NwZWNpYWwKK3N5biByZWdpb24gIHNoRG91YmxlUXVvdGUJbWF0Y2hncm91cD1zaE9wZXJhdG9yIHN0YXJ0PSsiKyBza2lwPStcXCIrIGVuZD0rIisJY29udGFpbnM9QHNoRGJsUXVvdGVMaXN0LHNoU3RyaW5nU3BlY2lhbAorc3luIG1hdGNoICAgc2hTdHJpbmdTcGVjaWFsCSJbXls6cHJpbnQ6XV0iCWNvbnRhaW5lZAorc3luIG1hdGNoICAgc2hTcGVjaWFsCSJcXFtcXFwiXCdgJCgpI10iCisKKyIgQ29tbWVudHMKKyI9PT09PT09PT0KK3N5biBjbHVzdGVyICAgIHNoQ29tbWVudEdyb3VwCWNvbnRhaW5zPXNoVG9kbyxAU3BlbGwKK3N5biBrZXl3b3JkICAgIHNoVG9kbwljb250YWluZWQJVE9ETworc3luIG1hdGNoICAgICAgc2hDb21tZW50CSIjLiokIiBjb250YWlucz1Ac2hDb21tZW50R3JvdXAKKworIiBGaWxlIHJlZGlyZWN0aW9uIGhpZ2hsaWdodGVkIGFzIG9wZXJhdG9ycworIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3luIG1hdGNoICAgICAgc2hSZWRpcgkiXGRcPT5cKCZbLTAtOV1cKVw9Igorc3luIG1hdGNoICAgICAgc2hSZWRpcgkiXGRcPT4+LVw9Igorc3luIG1hdGNoICAgICAgc2hSZWRpcgkiXGRcPTxcKCZbLTAtOV1cKVw9Igorc3luIG1hdGNoICAgICAgc2hSZWRpcgkiXGQ8PC1cPSIKKworIiBTaGVsbCBJbnB1dCBSZWRpcmVjdGlvbiAoSGVyZSBEb2N1bWVudHMpCitpZiB2ZXJzaW9uIDwgNjAwCisgc3luIHJlZ2lvbiBzaEhlcmVEb2MgbWF0Y2hncm91cD1zaFJlZGlyIHN0YXJ0PSI8PFxzKlwqKkVORFthLXpBLVpfMC05XSpcKioiICBtYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeRU5EW2EtekEtWl8wLTldKiQiIGNvbnRhaW5zPUBzaERibFF1b3RlTGlzdAorIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBzdGFydD0iPDwtXHMqXCoqRU5EW2EtekEtWl8wLTldKlwqKiIgbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKkVORFthLXpBLVpfMC05XSokIiBjb250YWlucz1Ac2hEYmxRdW90ZUxpc3QKKyBzeW4gcmVnaW9uIHNoSGVyZURvYyBtYXRjaGdyb3VwPXNoUmVkaXIgc3RhcnQ9Ijw8XHMqXCoqRU9GXCoqIgltYXRjaGdyb3VwPXNoUmVkaXIJZW5kPSJeRU9GJCIJY29udGFpbnM9QHNoRGJsUXVvdGVMaXN0Cisgc3luIHJlZ2lvbiBzaEhlcmVEb2MgbWF0Y2hncm91cD1zaFJlZGlyIHN0YXJ0PSI8PC1ccypcKipFT0ZcKioiIG1hdGNoZ3JvdXA9c2hSZWRpcgllbmQ9Il5ccypFT0YkIgljb250YWlucz1Ac2hEYmxRdW90ZUxpc3QKKyBzeW4gcmVnaW9uIHNoSGVyZURvYyBtYXRjaGdyb3VwPXNoUmVkaXIgc3RhcnQ9Ijw8XHMqXCoqXC5cKioiCW1hdGNoZ3JvdXA9c2hSZWRpcgllbmQ9Il5cLiQiCWNvbnRhaW5zPUBzaERibFF1b3RlTGlzdAorIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBzdGFydD0iPDwtXHMqXCoqXC5cKioiCW1hdGNoZ3JvdXA9c2hSZWRpcgllbmQ9Il5ccypcLiQiCWNvbnRhaW5zPUBzaERibFF1b3RlTGlzdAorCitlbHNlaWYgZzpzaF9mb2xkX2VuYWJsZWQKKworIGlmIHY6dmVyc2lvbiA+IDYwMiB8fCAodjp2ZXJzaW9uID09IDYwMiAmJiBoYXMoInBhdGNoMjE5IikpCisgIHN5biByZWdpb24gc2hIZXJlRG9jIGZvbGQgc3RhcnQ9IlwoPDxccypcXFw9XHooXFMqXClcKVxAPSIJCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5cejEkIgkJY29udGFpbnM9QHNoSGVyZUxpc3REUQlrZWVwZW5kCisgIHN5biByZWdpb24gc2hIZXJlRG9jIGZvbGQgc3RhcnQ9IlwoPDxccypcIlx6KFxTKlwpXCJcKVxAPSIJCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5cejEkIiIJCWNvbnRhaW5zPUBzaEhlcmVMaXN0CWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgZm9sZCBzdGFydD0iXCg8PFxzKidceihcUypcKSdcKVxAPSIJCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5cejEkIiIJCWNvbnRhaW5zPUBzaEhlcmVMaXN0CWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgZm9sZCBzdGFydD0iXCg8PFxzKlxcXF8kXF9zKlx6KFxTKlwpXClcQD0iCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5cejEkIiIJCWNvbnRhaW5zPUBzaEhlcmVMaXN0CWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgZm9sZCBzdGFydD0iXCg8PFxzKlxcXF8kXF9zKlwiXHooXFMqXClcIlwpXEA9IgltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHoxJCIiCQljb250YWlucz1Ac2hIZXJlTGlzdAlrZWVwZW5kCisgIHN5biByZWdpb24gc2hIZXJlRG9jIGZvbGQgc3RhcnQ9IlwoPDxccypcXFxfJFxfcyonXHooXFMqXCknXClcQD0iCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5cejEkIgkJY29udGFpbnM9QHNoSGVyZUxpc3QJa2VlcGVuZAorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBmb2xkIHN0YXJ0PSJcKDw8LVxzKlx6KFxTKlwpXClcQD0iCQltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHMqXHoxJCIJY29udGFpbnM9QHNoSGVyZUxpc3QJa2VlcGVuZAorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBmb2xkIHN0YXJ0PSJcKDw8LVxzKlwiXHooXFMqXClcIlwpXEA9IgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiIgljb250YWlucz1Ac2hIZXJlTGlzdERRCWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgZm9sZCBzdGFydD0iXCg8PC1ccyonXHooXFMqXCknXClcQD0iCQltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHMqXHoxJCIiCWNvbnRhaW5zPUBzaEhlcmVMaXN0CWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgZm9sZCBzdGFydD0iXCg8PC1ccypcXFxfJFxfcyonXHooXFMqXCknXClcQD0iCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5ccypcejEkIgljb250YWlucz1Ac2hIZXJlTGlzdAlrZWVwZW5kCisgIHN5biByZWdpb24gc2hIZXJlRG9jIGZvbGQgc3RhcnQ9IlwoPDwtXHMqXFxcXyRcX3MqXHooXFMqXClcKVxAPSIJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiCWNvbnRhaW5zPUBzaEhlcmVMaXN0CWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgZm9sZCBzdGFydD0iXCg8PC1ccypcXFxfJFxfcypcIlx6KFxTKlwpXCJcKVxAPSIJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiCWNvbnRhaW5zPUBzaEhlcmVMaXN0CWtlZXBlbmQKKyBlbHNlCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBmb2xkIHN0YXJ0PSI8PFxzKlx6KFxTKlwpIgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlx6MSQiCQljb250YWlucz1Ac2hEYmxRdW90ZUxpc3QKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgbWF0Y2hncm91cD1zaFJlZGlyIGZvbGQgc3RhcnQ9Ijw8XHMqXCJceihcUypcKVwiIgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlx6MSQiCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBmb2xkIHN0YXJ0PSI8PFxzKidceihcUypcKSciCQltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHoxJCIKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgbWF0Y2hncm91cD1zaFJlZGlyIGZvbGQgc3RhcnQ9Ijw8LVxzKlx6KFxTKlwpIgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiCWNvbnRhaW5zPUBzaERibFF1b3RlTGlzdAorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBtYXRjaGdyb3VwPXNoUmVkaXIgZm9sZCBzdGFydD0iPDwtXHMqXCJceihcUypcKVwiIgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBmb2xkIHN0YXJ0PSI8PC1ccyonXHooXFMqXCknIgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBmb2xkIHN0YXJ0PSI8PFxzKlxcXF8kXF9zKlx6KFxTKlwpIgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlx6MSQiCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBmb2xkIHN0YXJ0PSI8PFxzKlxcXF8kXF9zKlwiXHooXFMqXClcIiIJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlx6MSQiCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBmb2xkIHN0YXJ0PSI8PC1ccypcXFxfJFxfcyonXHooXFMqXCknIgltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHMqXHoxJCIKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgbWF0Y2hncm91cD1zaFJlZGlyIGZvbGQgc3RhcnQ9Ijw8LVxzKlxcXF8kXF9zKlx6KFxTKlwpIgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBmb2xkIHN0YXJ0PSI8PC1ccypcXFxfJFxfcypcIlx6KFxTKlwpXCIiCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5ccypcejEkIgorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBtYXRjaGdyb3VwPXNoUmVkaXIgZm9sZCBzdGFydD0iPDxccypcXFxfJFxfcyonXHooXFMqXCknIgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlx6MSQiCisgZW5kaWYKK2Vsc2UKKyBpZiB2OnZlcnNpb24gPiA2MDIgfHwgKHY6dmVyc2lvbiA9PSA2MDIgJiYgaGFzKCJwYXRjaDIxOSIpKQorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBzdGFydD0iXCg8PFxzKlxcXD1ceihcUypcKVwpXEA9IgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlx6MSQiCQljb250YWlucz1Ac2hIZXJlTGlzdAlrZWVwZW5kCisgIHN5biByZWdpb24gc2hIZXJlRG9jIHN0YXJ0PSJcKDw8XHMqXCJceihcUypcKVwiXClcQD0iCQltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHoxJCIiCQljb250YWlucz1Ac2hIZXJlTGlzdERRCWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2Mgc3RhcnQ9IlwoPDxccyonXHooXFMqXCknXClcQD0iCQltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHoxJCIiCQljb250YWlucz1Ac2hIZXJlTGlzdAlrZWVwZW5kCisgIHN5biByZWdpb24gc2hIZXJlRG9jIHN0YXJ0PSJcKDw8XHMqXFxcXyRcX3MqXHooXFMqXClcKVxAPSIJCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5cejEkIiIJCWNvbnRhaW5zPUBzaEhlcmVMaXN0CWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2Mgc3RhcnQ9IlwoPDxccypcXFxfJFxfcypcIlx6KFxTKlwpXCJcKVxAPSIJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlx6MSQiIgkJY29udGFpbnM9QHNoSGVyZUxpc3QJa2VlcGVuZAorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBzdGFydD0iXCg8PFxzKlxcXF8kXF9zKidceihcUypcKSdcKVxAPSIJCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5cejEkIgkJY29udGFpbnM9QHNoSGVyZUxpc3QJa2VlcGVuZAorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBzdGFydD0iXCg8PC1ccypceihcUypcKVwpXEA9IgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiCWNvbnRhaW5zPUBzaEhlcmVMaXN0CWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2Mgc3RhcnQ9IlwoPDwtXHMqXCJceihcUypcKVwiXClcQD0iCQltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHMqXHoxJCIiCWNvbnRhaW5zPUBzaEhlcmVMaXN0RFEJa2VlcGVuZAorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBzdGFydD0iXCg8PC1ccyonXHooXFMqXCknXClcQD0iCQltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHMqXHoxJCIiCWNvbnRhaW5zPUBzaEhlcmVMaXN0CWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2Mgc3RhcnQ9IlwoPDwtXHMqXFxcXyRcX3MqJ1x6KFxTKlwpJ1wpXEA9IgkJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiCWNvbnRhaW5zPUBzaEhlcmVMaXN0CWtlZXBlbmQKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2Mgc3RhcnQ9IlwoPDwtXHMqXFxcXyRcX3MqXHooXFMqXClcKVxAPSIJCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5ccypcejEkIgljb250YWlucz1Ac2hIZXJlTGlzdAlrZWVwZW5kCisgIHN5biByZWdpb24gc2hIZXJlRG9jIHN0YXJ0PSJcKDw8LVxzKlxcXF8kXF9zKlwiXHooXFMqXClcIlwpXEA9IgltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHMqXHoxJCIJY29udGFpbnM9QHNoSGVyZUxpc3QJa2VlcGVuZAorIGVsc2UKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgbWF0Y2hncm91cD1zaFJlZGlyIHN0YXJ0PSI8PFxzKlxcXD1ceihcUypcKSIJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlx6MSQiICAgIGNvbnRhaW5zPUBzaERibFF1b3RlTGlzdAorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBtYXRjaGdyb3VwPXNoUmVkaXIgc3RhcnQ9Ijw8XHMqXCJceihcUypcKVwiIgltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHoxJCIKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgbWF0Y2hncm91cD1zaFJlZGlyIHN0YXJ0PSI8PC1ccypceihcUypcKSIJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiIGNvbnRhaW5zPUBzaERibFF1b3RlTGlzdAorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBtYXRjaGdyb3VwPXNoUmVkaXIgc3RhcnQ9Ijw8LVxzKidceihcUypcKSciCW1hdGNoZ3JvdXA9c2hSZWRpciBlbmQ9Il5ccypcejEkIgorICBzeW4gcmVnaW9uIHNoSGVyZURvYyBtYXRjaGdyb3VwPXNoUmVkaXIgc3RhcnQ9Ijw8XHMqJ1x6KFxTKlwpJyIJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlx6MSQiCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBzdGFydD0iPDwtXHMqXCJceihcUypcKVwiIgltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHMqXHoxJCIKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgbWF0Y2hncm91cD1zaFJlZGlyIHN0YXJ0PSI8PFxzKlxcXF8kXF9zKlx6KFxTKlwpIgltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHoxJCIKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgbWF0Y2hncm91cD1zaFJlZGlyIHN0YXJ0PSI8PC1ccypcXFxfJFxfcypceihcUypcKSIJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBzdGFydD0iPDwtXHMqXFxcXyRcX3MqJ1x6KFxTKlwpJyIJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlxzKlx6MSQiCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBzdGFydD0iPDxccypcXFxfJFxfcyonXHooXFMqXCknIgltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHoxJCIKKyAgc3luIHJlZ2lvbiBzaEhlcmVEb2MgbWF0Y2hncm91cD1zaFJlZGlyIHN0YXJ0PSI8PFxzKlxcXF8kXF9zKlwiXHooXFMqXClcIiIJbWF0Y2hncm91cD1zaFJlZGlyIGVuZD0iXlx6MSQiCisgIHN5biByZWdpb24gc2hIZXJlRG9jIG1hdGNoZ3JvdXA9c2hSZWRpciBzdGFydD0iPDwtXHMqXFxcXyRcX3MqXCJceihcUypcKVwiIgltYXRjaGdyb3VwPXNoUmVkaXIgZW5kPSJeXHMqXHoxJCIKKyBlbmRpZgorIGlmIHY6dmVyc2lvbiA+IDYwMiB8fCAodjp2ZXJzaW9uID09IDYwMiAmJiBoYXMoInBhdGNoMjE5IikpCisgIHN5biBtYXRjaCAgc2hIZXJlUGF5bG9hZCAiXi4qJCIJY29udGFpbmVkCXNraXBubAluZXh0Z3JvdXA9c2hIZXJlUGF5bG9hZAljb250YWlucz1Ac2hEYmxRdW90ZUxpc3QKKyAgc3luIG1hdGNoICBzaEJlZ2luTGluZSAiLiokIgkJY29udGFpbmVkCXNraXBubAluZXh0Z3JvdXA9c2hIZXJlUGF5bG9hZAljb250YWlucz1Ac2hDb21tYW5kU3ViTGlzdAorICBzeW4gbWF0Y2ggIHNoQmVnaW5IZXJlICI8PC1cPVxzKlxTXCsiCWNvbnRhaW5lZAkJbmV4dGdyb3VwPXNoQmVnaW5MaW5lCisgZW5kaWYKKyBpZiBleGlzdHMoImI6aXNfYmFzaCIpCisgIHN5biBtYXRjaCBzaFJlZGlyICI8PDwiCisgZW5kaWYKK2VuZGlmCisKKyIgSWRlbnRpZmllcnMKKyI9PT09PT09PT09PT0KK3N5biBtYXRjaCAgc2hWYXJpYWJsZSAiXDxcKFtid2dsc2F2XTpcKVw9W2EtekEtWjAtOS4hQF8lKyxdKlx6ZT0iCW5leHRncm91cD1zaFNldElkZW50aWZpZXIKK3N5biBtYXRjaCAgc2hJZFdoaXRlU3BhY2UgIGNvbnRhaW5lZAkiXHMiCitzeW4gbWF0Y2ggIHNoU2V0SWRlbnRpZmllciBjb250YWluZWQJIj0iCW5leHRncm91cD1zaFBhdHRlcm4sc2hEZXJlZixzaERlcmVmU2ltcGxlLHNoRG91YmxlUXVvdGUsc2hTaW5nbGVRdW90ZQoraWYgZXhpc3RzKCJiOmlzX2Jhc2giKQorICBzeW4gcmVnaW9uIHNoU2V0TGlzdCBtYXRjaGdyb3VwPXNoU2V0IHN0YXJ0PSJcPFwoZGVjbGFyZVx8dHlwZXNldFx8bG9jYWxcfGV4cG9ydFx8dW5zZXRcKVw+W14vXSJtZT1lLTEgZW5kPSIkIiBtYXRjaGdyb3VwPXNoT3BlcmF0b3IgZW5kPSJbOyZdIm1lPWUtMSBtYXRjaGdyb3VwPU5PTkUgZW5kPSIjXHw9Im1lPWUtMSBjb250YWlucz1Ac2hJZExpc3QKKyAgc3luIHJlZ2lvbiBzaFNldExpc3QgbWF0Y2hncm91cD1zaFNldCBzdGFydD0iXDxzZXRcPlteL10ibWU9ZS0xIGVuZD0iJCIgZW5kPSJbfCldIm1lPWUtMQkJIG1hdGNoZ3JvdXA9c2hPcGVyYXRvciBlbmQ9Ils7Jl0ibWU9ZS0xIG1hdGNoZ3JvdXA9Tk9ORSBlbmQ9IlsjPV0ibWU9ZS0xIGNvbnRhaW5zPUBzaElkTGlzdAorICBzeW4gbWF0Y2ggIHNoU2V0ICJcPFwoZGVjbGFyZVx8dHlwZXNldFx8bG9jYWxcfGV4cG9ydFx8c2V0XHx1bnNldFwpJCIKK2Vsc2VpZiBleGlzdHMoImI6aXNfa29ybnNoZWxsIikKKyAgc3luIHJlZ2lvbiBzaFNldExpc3QgbWF0Y2hncm91cD1zaFNldCBzdGFydD0iXDxcKHR5cGVzZXRcfGV4cG9ydFx8dW5zZXRcKVw+W14vXSJtZT1lLTEgZW5kPSIkIgltYXRjaGdyb3VwPXNoT3BlcmF0b3IgZW5kPSJbOyZdIm1lPWUtMSBtYXRjaGdyb3VwPU5PTkUgZW5kPSJbIz1dIm1lPWUtMSBjb250YWlucz1Ac2hJZExpc3QKKyAgc3luIHJlZ2lvbiBzaFNldExpc3QgbWF0Y2hncm91cD1zaFNldCBzdGFydD0iXDxzZXRcPlteL10ibWU9ZS0xIGVuZD0iJCIJCQltYXRjaGdyb3VwPXNoT3BlcmF0b3IgZW5kPSJbOyZdIm1lPWUtMSBtYXRjaGdyb3VwPU5PTkUgZW5kPSJbIz1dIm1lPWUtMSBjb250YWlucz1Ac2hJZExpc3QKKyAgc3luIG1hdGNoICBzaFNldCAiXDxcKHR5cGVzZXRcfHNldFx8ZXhwb3J0XHx1bnNldFwpJCIKK2Vsc2UKKyAgc3luIHJlZ2lvbiBzaFNldExpc3QgbWF0Y2hncm91cD1zaFNldCBzdGFydD0iXDxcKHNldFx8ZXhwb3J0XHx1bnNldFwpXD5bXi9dIm1lPWUtMSBlbmQ9IiQiIGVuZD0iWyl8XSJtZT1lLTEJbWF0Y2hncm91cD1zaE9wZXJhdG9yIGVuZD0iWzsmXSIgbWF0Y2hncm91cD1OT05FIGVuZD0iWyM9XSJtZT1lLTEgY29udGFpbnM9QHNoSWRMaXN0CisgIHN5biBtYXRjaCAgc2hTdGF0ZW1lbnQgIlw8XChzZXRcfGV4cG9ydFx8dW5zZXRcKSQiCitlbmRpZgorCisiIGhhbmRsZXMgZnVuY3Rpb25zIHdoaWNoIHN0YXJ0OiAgRnVuY3Rpb24gKCkgeworIiAgIEFwcGFyZW50bHkgQm91cm5lIHNoZWxsIGFjY2VwdHMgZnVuY3Rpb25zIHRvbywKKyIgICBldmVuIHRob3VnaCBpdCBpc24ndCBkb2N1bWVudGVkIGJ5IG15IG1hbiBwYWdlcworIiAgIGZvciBpdC4KK3N5biBjbHVzdGVyIHNoQ29tbWFuZFN1Ykxpc3QgIGFkZD1ia3NoRnVuY3Rpb24KK2lmIGc6c2hfZm9sZF9lbmFibGVkCisgc3luIHJlZ2lvbiBia3NoRnVuY3Rpb25Cb2R5CXRyYW5zcGFyZW50IGZvbGQJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9Il5ccypcPFxoXHcqXD5ccyooKVxzKnsiIGVuZD0ifSIgY29udGFpbnM9YmtzaEZ1bmN0aW9uLGJrc2hGdW5jdGlvbkRlbGltLEBzaEZ1bmN0aW9uTGlzdAorZWxzZQorIHN5biByZWdpb24gYmtzaEZ1bmN0aW9uQm9keQl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXlxzKlw8XGhcdypcPlxzKigpXHMqeyIgZW5kPSJ9IiBjb250YWlucz1ia3NoRnVuY3Rpb24sYmtzaEZ1bmN0aW9uRGVsaW0sQHNoRnVuY3Rpb25MaXN0CitlbmRpZgorc3luIG1hdGNoIGJrc2hGdW5jdGlvbgkiXlxzKlw8XGhcdypcPlxzKigpIglza2lwd2hpdGUgc2tpcG5sIGNvbnRhaW5zPWJrc2hGdW5jdGlvblBhcmVuCitzeW4gbWF0Y2ggYmtzaEZ1bmN0aW9uUGFyZW4JIlsoKV0iCWNvbnRhaW5lZAorc3luIG1hdGNoIGJrc2hGdW5jdGlvbkRlbGltCSJbe31dIgljb250YWluZWQKKworIiBQYXJhbWV0ZXIgRGVyZWZlcmVuY2luZworIiA9PT09PT09PT09PT09PT09PT09PT09PQorc3luIG1hdGNoICBzaERlcmVmU2ltcGxlCSJcJFx3XCsiCitzeW4gcmVnaW9uIHNoRGVyZWYJbWF0Y2hncm91cD1QcmVQcm9jIHN0YXJ0PSJcJHsiIGVuZD0ifSIJY29udGFpbnM9QHNoRGVyZWZMaXN0LHNoRGVyZWZWYXJBcnJheQorc3luIG1hdGNoICBzaERlcmVmV29yZEVycm9yCSJbXn0kW10iCWNvbnRhaW5lZAorc3luIG1hdGNoICBzaERlcmVmU2ltcGxlCSJcJFstIypAIT9dIgorc3luIG1hdGNoICBzaERlcmVmU2ltcGxlCSJcJFwkIgoraWYgZXhpc3RzKCJiOmlzX2Jhc2giKSB8fCBleGlzdHMoImI6aXNfa29ybnNoZWxsIikKKyBzeW4gcmVnaW9uIHNoRGVyZWYJbWF0Y2hncm91cD1QcmVQcm9jIHN0YXJ0PSJcJHsjI1w9IiBlbmQ9In0iCWNvbnRhaW5zPUBzaERlcmVmTGlzdAorZW5kaWYKKworIiBiYXNoIDogJHshcHJlZml4Kn0KKyIgYmFzaCA6ICR7I3BhcmFtZXRlcn0KK2lmIGV4aXN0cygiYjppc19iYXNoIikKKyBzeW4gcmVnaW9uIHNoRGVyZWYJbWF0Y2hncm91cD1QcmVQcm9jIHN0YXJ0PSJcJHshIiBlbmQ9IlwqXD19Igljb250YWlucz1Ac2hEZXJlZkxpc3Qsc2hEZXJlZk9wCisgc3luIG1hdGNoICBzaERlcmVmVmFyCWNvbnRhaW5lZAkie1xAPD0hXHdcKyIJCW5leHRncm91cD1Ac2hEZXJlZlZhckxpc3QKK2VuZGlmCisKK3N5biBtYXRjaCAgc2hEZXJlZlNwZWNpYWwJY29udGFpbmVkCSJ7XEA8PVstKkA/MF0iCQluZXh0Z3JvdXA9c2hEZXJlZk9wLHNoRGVyZWZPcEVycm9yCitzeW4gbWF0Y2ggIHNoRGVyZWZTcGVjaWFsCWNvbnRhaW5lZAkiXCh7WyMhXVwpXEA8PVtbOmFsbnVtOl0qQF9dXCsiCW5leHRncm91cD1Ac2hEZXJlZlZhckxpc3Qsc2hEZXJlZk9wCitzeW4gbWF0Y2ggIHNoRGVyZWZWYXIJY29udGFpbmVkCSJ7XEA8PVx3XCsiCQluZXh0Z3JvdXA9QHNoRGVyZWZWYXJMaXN0CisKKyIgc2gga3NoIGJhc2ggOiAke3ZhclsuLi4gXS4uLn0gIGFycmF5IHJlZmVyZW5jZQorc3luIHJlZ2lvbiAgc2hEZXJlZlZhckFycmF5ICAgY29udGFpbmVkCW1hdGNoZ3JvdXA9c2hEZXJlZiBzdGFydD0iXFsiIGVuZD0iXSIJY29udGFpbnM9QHNoQ29tbWFuZFN1Ykxpc3QgbmV4dGdyb3VwPXNoRGVyZWZPcCxzaERlcmVmT3BFcnJvcgorCisiIHNoIGtzaCBiYXNoIDogJHtwYXJhbWV0ZXI6LXdvcmR9ICAgIHdvcmQgaXMgZGVmYXVsdCB2YWx1ZQorIiBzaCBrc2ggYmFzaCA6ICR7cGFyYW1ldGVyOj13b3JkfSAgICBhc3NpZ24gd29yZCBhcyBkZWZhdWx0IHZhbHVlCisiIHNoIGtzaCBiYXNoIDogJHtwYXJhbWV0ZXI6P3dvcmR9ICAgIGRpc3BsYXkgd29yZCBpZiBwYXJhbWV0ZXIgaXMgbnVsbAorIiBzaCBrc2ggYmFzaCA6ICR7cGFyYW1ldGVyOit3b3JkfSAgICB1c2Ugd29yZCBpZiBwYXJhbWV0ZXIgaXMgbm90IG51bGwsIG90aGVyd2lzZSBub3RoaW5nCisiICAgIGtzaCBiYXNoIDogJHtwYXJhbWV0ZXIjcGF0dGVybn0gIHJlbW92ZSBzbWFsbCBsZWZ0ICBwYXR0ZXJuCisiICAgIGtzaCBiYXNoIDogJHtwYXJhbWV0ZXIjI3BhdHRlcm59IHJlbW92ZSBsYXJnZSBsZWZ0ICBwYXR0ZXJuCisiICAgIGtzaCBiYXNoIDogJHtwYXJhbWV0ZXIlcGF0dGVybn0gIHJlbW92ZSBzbWFsbCByaWdodCBwYXR0ZXJuCisiICAgIGtzaCBiYXNoIDogJHtwYXJhbWV0ZXIlJXBhdHRlcm59IHJlbW92ZSBsYXJnZSByaWdodCBwYXR0ZXJuCitzeW4gY2x1c3RlciBzaERlcmVmUGF0dGVybkxpc3QJY29udGFpbnM9c2hEZXJlZlBhdHRlcm4sc2hEZXJlZlN0cmluZworc3luIG1hdGNoIHNoRGVyZWZPcEVycm9yCWNvbnRhaW5lZAkiOltbOnB1bmN0Ol1dIgorc3luIG1hdGNoICBzaERlcmVmT3AJY29udGFpbmVkCSI6XD1bLT0/XSIJbmV4dGdyb3VwPUBzaERlcmVmUGF0dGVybkxpc3QKK3N5biBtYXRjaCAgc2hEZXJlZk9wCWNvbnRhaW5lZAkiOlw9KyIJbmV4dGdyb3VwPUBzaERlcmVmUGF0dGVybkxpc3QKK2lmIGV4aXN0cygiYjppc19iYXNoIikgfHwgZXhpc3RzKCJiOmlzX2tvcm5zaGVsbCIpCisgc3luIG1hdGNoICBzaERlcmVmT3AJY29udGFpbmVkCSIjXHsxLDJ9IgluZXh0Z3JvdXA9QHNoRGVyZWZQYXR0ZXJuTGlzdAorIHN5biBtYXRjaCAgc2hEZXJlZk9wCWNvbnRhaW5lZAkiJVx7MSwyfSIJbmV4dGdyb3VwPUBzaERlcmVmUGF0dGVybkxpc3QKKyBzeW4gbWF0Y2ggIHNoRGVyZWZQYXR0ZXJuCWNvbnRhaW5lZAkiW157fV1cKyIJY29udGFpbnM9c2hEZXJlZixzaERlcmVmU2ltcGxlLHNoRGVyZWZQYXR0ZXJuLHNoRGVyZWZTdHJpbmcsc2hDb21tYW5kU3ViIG5leHRncm91cD1zaERlcmVmUGF0dGVybgorIHN5biByZWdpb24gc2hEZXJlZlBhdHRlcm4JY29udGFpbmVkCXN0YXJ0PSJ7IiBlbmQ9In0iCWNvbnRhaW5zPXNoRGVyZWYsc2hEZXJlZlNpbXBsZSxzaERlcmVmU3RyaW5nLHNoQ29tbWFuZFN1YiBuZXh0Z3JvdXA9c2hEZXJlZlBhdHRlcm4KK2VuZGlmCitzeW4gcmVnaW9uIHNoRGVyZWZTdHJpbmcJY29udGFpbmVkCW1hdGNoZ3JvdXA9c2hPcGVyYXRvciBzdGFydD0rJysgZW5kPSsnKwkJY29udGFpbnM9c2hTdHJpbmdTcGVjaWFsCitzeW4gcmVnaW9uIHNoRGVyZWZTdHJpbmcJY29udGFpbmVkCW1hdGNoZ3JvdXA9c2hPcGVyYXRvciBzdGFydD0rIisgc2tpcD0rXFwiKyBlbmQ9KyIrCWNvbnRhaW5zPUBzaERibFF1b3RlTGlzdCxzaFN0cmluZ1NwZWNpYWwKK3N5biBtYXRjaCAgc2hEZXJlZlN0cmluZwljb250YWluZWQJIlxcWyInXSIKKworIgliYXNoIDogJHtwYXJhbWV0ZXI6b2Zmc2V0fQorIgliYXNoIDogJHtwYXJhbWV0ZXI6b2Zmc2V0Omxlbmd0aH0KKyIJYmFzaCA6ICR7cGFyYW1ldGVyLy9wYXR0ZXJuL3N0cmluZ30KKyIJYmFzaCA6ICR7cGFyYW1ldGVyLy9wYXR0ZXJufQoraWYgZXhpc3RzKCJiOmlzX2Jhc2giKQorIHN5biByZWdpb24gc2hEZXJlZk9wCWNvbnRhaW5lZAlzdGFydD0iOlskWzphbG51bTpdX10ibWU9ZS0xIGVuZD0iOiJtZT1lLTEgZW5kPSJ9Im1lPWUtMSBjb250YWlucz1Ac2hDb21tYW5kU3ViTGlzdCBuZXh0Z3JvdXA9c2hEZXJlZlBPTAorIHN5biBtYXRjaCAgc2hEZXJlZlBPTAljb250YWluZWQJIjpbXn1dXHsxLH0iCWNvbnRhaW5zPUBzaENvbW1hbmRTdWJMaXN0Cisgc3luIG1hdGNoICBzaERlcmVmT3AJY29udGFpbmVkCSIvXHsxLDJ9IgluZXh0Z3JvdXA9c2hEZXJlZlBhdAorIHN5biBtYXRjaCAgc2hEZXJlZlBhdAljb250YWluZWQJIlteL31dXHsxLH0iCW5leHRncm91cD1zaERlcmVmUGF0U3RyaW5nT3AKKyBzeW4gbWF0Y2ggIHNoRGVyZWZQYXRTdHJpbmdPcAljb250YWluZWQJIi8iCW5leHRncm91cD1zaERlcmVmUGF0U3RyaW5nCisgc3luIG1hdGNoICBzaERlcmVmUGF0U3RyaW5nCWNvbnRhaW5lZAkiW159XVx7MSx9IgorZW5kaWYKKworIiBBIGJ1bmNoIG9mIHVzZWZ1bCBzaCBrZXl3b3Jkcworc3luIGtleXdvcmQgc2hTdGF0ZW1lbnQgYnJlYWsgY2QgY2hkaXIgY29udGludWUgZXZhbCBleGVjIGV4aXQga2lsbCBuZXdncnAgcHdkIHJlYWQgcmVhZG9ubHkgcmV0dXJuIHNoaWZ0IHRlc3QgdHJhcCB1bGltaXQgdW1hc2sgd2FpdAorc3luIGtleXdvcmQgc2hDb25kaXRpb25hbCBjb250YWluZWQgZWxpZiBlbHNlIHRoZW4KK3N5biBrZXl3b3JkIHNoQ29uZEVycm9yIGVsaWYgZWxzZSB0aGVuCisKK2lmIGV4aXN0cygiYjppc19rb3Juc2hlbGwiKSB8fCBleGlzdHMoImI6aXNfYmFzaCIpCisgc3luIGtleXdvcmQgc2hGdW5jdGlvbglmdW5jdGlvbgorIHN5biBrZXl3b3JkIHNoU3RhdGVtZW50IGF1dG9sb2FkIGJnIGZhbHNlIGZjIGZnIGZ1bmN0aW9ucyBnZXRvcHRzIGhhc2ggaGlzdG9yeSBpbnRlZ2VyIGpvYnMgbGV0IG5vaHVwIHByaW50IHByaW50ZiByIHN0b3Agc3VzcGVuZCB0aW1lIHRpbWVzIHRydWUgdHlwZSB1bmFsaWFzIHdoZW5jZQorCisgaWYgZXhpc3RzKCJiOmlzX2Jhc2giKQorICBzeW4ga2V5d29yZCBzaFN0YXRlbWVudCBiaW5kIGJ1aWx0aW4gZGlycyBkaXNvd24gZW5hYmxlIGhlbHAgbG9jYWwgbG9nb3V0IHBvcGQgcHVzaGQgc2hvcHQgc291cmNlCisgZWxzZQorICBzeW4ga2V5d29yZCBzaFN0YXRlbWVudCBsb2dpbiBuZXdncnAKKyBlbmRpZgorZW5kaWYKKworIiBTeW5jcworIiA9PT09PQoraWYgIWV4aXN0cygic2hfbWlubGluZXMiKQorICBsZXQgc2hfbWlubGluZXMgPSAyMDAKK2VuZGlmCitpZiAhZXhpc3RzKCJzaF9tYXhsaW5lcyIpCisgIGxldCBzaF9tYXhsaW5lcyA9IDIgKiBzaF9taW5saW5lcworZW5kaWYKK2V4ZWMgInN5biBzeW5jIG1pbmxpbmVzPSIgLiBzaF9taW5saW5lcyAuICIgbWF4bGluZXM9IiAuIHNoX21heGxpbmVzCitzeW4gc3luYyBtYXRjaCBzaENhc2VFc2FjU3luYwlncm91cGhlcmUJc2hDYXNlRXNhYwkiXDxjYXNlXD4iCitzeW4gc3luYyBtYXRjaCBzaENhc2VFc2FjU3luYwlncm91cHRoZXJlCXNoQ2FzZUVzYWMJIlw8ZXNhY1w+Igorc3luIHN5bmMgbWF0Y2ggc2hEb1N5bmMJZ3JvdXBoZXJlCXNoRG8JIlw8ZG9cPiIKK3N5biBzeW5jIG1hdGNoIHNoRG9TeW5jCWdyb3VwdGhlcmUJc2hEbwkiXDxkb25lXD4iCitzeW4gc3luYyBtYXRjaCBzaEZvclN5bmMJZ3JvdXBoZXJlCXNoRm9yCSJcPGZvclw+Igorc3luIHN5bmMgbWF0Y2ggc2hGb3JTeW5jCWdyb3VwdGhlcmUJc2hGb3IJIlw8aW5cPiIKK3N5biBzeW5jIG1hdGNoIHNoSWZTeW5jCWdyb3VwaGVyZQlzaElmCSJcPGlmXD4iCitzeW4gc3luYyBtYXRjaCBzaElmU3luYwlncm91cHRoZXJlCXNoSWYJIlw8ZmlcPiIKK3N5biBzeW5jIG1hdGNoIHNoVW50aWxTeW5jCWdyb3VwaGVyZQlzaFJlcGVhdAkiXDx1bnRpbFw+Igorc3luIHN5bmMgbWF0Y2ggc2hXaGlsZVN5bmMJZ3JvdXBoZXJlCXNoUmVwZWF0CSJcPHdoaWxlXD4iCisKKyIgVGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgoraGkgZGVmIGxpbmsgc2hBcml0aFJlZ2lvbglzaFNoZWxsVmFyaWFibGVzCitoaSBkZWYgbGluayBzaENhc2VCYXIJc2hDb25kaXRpb25hbAoraGkgZGVmIGxpbmsgc2hDYXNlSW4Jc2hDb25kaXRpb25hbAoraGkgZGVmIGxpbmsgc2hDYXNlQ29tbWFuZFN1YglzaENvbW1hbmRTdWIKK2hpIGRlZiBsaW5rIHNoQ2FzZURvdWJsZVF1b3RlCXNoRG91YmxlUXVvdGUKK2hpIGRlZiBsaW5rIHNoQ2FzZVNpbmdsZVF1b3RlCXNoU2luZ2xlUXVvdGUKK2hpIGRlZiBsaW5rIHNoQ2FzZVN0YXJ0CXNoQ29uZGl0aW9uYWwKK2hpIGRlZiBsaW5rIHNoQ21kU3ViUmVnaW9uCXNoU2hlbGxWYXJpYWJsZXMKK2hpIGRlZiBsaW5rIHNoQ29sb24Jc2hTdGF0ZW1lbnQKKworaGkgZGVmIGxpbmsgc2hEZXJlZglzaFNoZWxsVmFyaWFibGVzCitoaSBkZWYgbGluayBzaERlcmVmT3AJc2hPcGVyYXRvcgorCitoaSBkZWYgbGluayBzaERlcmVmVmFyCXNoRGVyZWYKK2hpIGRlZiBsaW5rIHNoRGVyZWZQT0wJc2hEZXJlZk9wCitoaSBkZWYgbGluayBzaERlcmVmUGF0U3RyaW5nCXNoRGVyZWZQYXR0ZXJuCitoaSBkZWYgbGluayBzaERlcmVmUGF0U3RyaW5nT3AJc2hEZXJlZk9wCitoaSBkZWYgbGluayBzaERlcmVmU2ltcGxlCXNoRGVyZWYKK2hpIGRlZiBsaW5rIHNoRGVyZWZTcGVjaWFsCXNoRGVyZWYKK2hpIGRlZiBsaW5rIHNoRGVyZWZTdHJpbmcJc2hEb3VibGVRdW90ZQoraGkgZGVmIGxpbmsgc2hIZXJlUGF5bG9hZAlzaEhlcmVEb2MKK2hpIGRlZiBsaW5rIHNoQmVnaW5IZXJlCXNoUmVkaXIKKworaGkgZGVmIGxpbmsgc2hEb3VibGVRdW90ZQlzaFN0cmluZworaGkgZGVmIGxpbmsgc2hFY2hvCXNoU3RyaW5nCitoaSBkZWYgbGluayBzaEVtYmVkZGVkRWNobwlzaFN0cmluZworaGkgZGVmIGxpbmsgc2hIZXJlRG9jCXNoU3RyaW5nCitoaSBkZWYgbGluayBzaExvb3AJc2hTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIHNoT3B0aW9uCXNoQ29tbWFuZFN1YgoraGkgZGVmIGxpbmsgc2hQYXR0ZXJuCXNoU3RyaW5nCitoaSBkZWYgbGluayBzaFBvc25QYXJtCXNoU2hlbGxWYXJpYWJsZXMKK2hpIGRlZiBsaW5rIHNoUmFuZ2UJc2hPcGVyYXRvcgoraGkgZGVmIGxpbmsgc2hSZWRpcglzaE9wZXJhdG9yCitoaSBkZWYgbGluayBzaFNpbmdsZVF1b3RlCXNoU3RyaW5nCitoaSBkZWYgbGluayBzaFNvdXJjZQlzaE9wZXJhdG9yCitoaSBkZWYgbGluayBzaFN0cmluZ1NwZWNpYWwJc2hTcGVjaWFsCitoaSBkZWYgbGluayBzaFN1YlNoUmVnaW9uCXNoT3BlcmF0b3IKK2hpIGRlZiBsaW5rIHNoVGVzdE9wcglzaENvbmRpdGlvbmFsCitoaSBkZWYgbGluayBzaFZhcmlhYmxlCXNoU2V0TGlzdAoraGkgZGVmIGxpbmsgc2hXcmFwTGluZU9wZXJhdG9yCXNoT3BlcmF0b3IKKworaWYgZXhpc3RzKCJiOmlzX2Jhc2giKQorICBoaSBkZWYgbGluayBiYXNoQWRtaW5TdGF0ZW1lbnQJc2hTdGF0ZW1lbnQKKyAgaGkgZGVmIGxpbmsgYmFzaFNwZWNpYWxWYXJpYWJsZXMJc2hTaGVsbFZhcmlhYmxlcworICBoaSBkZWYgbGluayBiYXNoU3RhdGVtZW50CQlzaFN0YXRlbWVudAorICBoaSBkZWYgbGluayBia3NoRnVuY3Rpb24JCUZ1bmN0aW9uCisgIGhpIGRlZiBsaW5rIGJrc2hGdW5jdGlvblBhcmVuCQlEZWxpbWl0ZXIKKyAgaGkgZGVmIGxpbmsgYmtzaEZ1bmN0aW9uRGVsaW0JCURlbGltaXRlcgorZW5kaWYKK2lmIGV4aXN0cygiYjppc19rb3Juc2hlbGwiKQorICBoaSBkZWYgbGluayBrc2hTcGVjaWFsVmFyaWFibGVzCXNoU2hlbGxWYXJpYWJsZXMKKyAgaGkgZGVmIGxpbmsga3NoU3RhdGVtZW50CQlzaFN0YXRlbWVudAorICBoaSBkZWYgbGluayBia3NoRnVuY3Rpb24JCUZ1bmN0aW9uCisgIGhpIGRlZiBsaW5rIGJrc2hGdW5jdGlvblBhcmVuCQlEZWxpbWl0ZXIKK2VuZGlmCisKK2hpIGRlZiBsaW5rIHNoQ2FzZUVycm9yCQlFcnJvcgoraGkgZGVmIGxpbmsgc2hDb25kRXJyb3IJCUVycm9yCitoaSBkZWYgbGluayBzaEN1cmx5RXJyb3IJCUVycm9yCitoaSBkZWYgbGluayBzaERlcmVmRXJyb3IJCUVycm9yCitoaSBkZWYgbGluayBzaERlcmVmT3BFcnJvcgkJRXJyb3IKK2hpIGRlZiBsaW5rIHNoRGVyZWZXb3JkRXJyb3IJCUVycm9yCitoaSBkZWYgbGluayBzaERvRXJyb3IJCUVycm9yCitoaSBkZWYgbGluayBzaEVzYWNFcnJvcgkJRXJyb3IKK2hpIGRlZiBsaW5rIHNoSWZFcnJvcgkJRXJyb3IKK2hpIGRlZiBsaW5rIHNoSW5FcnJvcgkJRXJyb3IKK2hpIGRlZiBsaW5rIHNoUGFyZW5FcnJvcgkJRXJyb3IKK2hpIGRlZiBsaW5rIHNoVGVzdEVycm9yCQlFcnJvcgoraWYgZXhpc3RzKCJiOmlzX2tvcm5zaGVsbCIpCisgIGhpIGRlZiBsaW5rIHNoRFRlc3RFcnJvcgkJRXJyb3IKK2VuZGlmCisKK2hpIGRlZiBsaW5rIHNoQXJpdGhtZXRpYwkJU3BlY2lhbAoraGkgZGVmIGxpbmsgc2hDaGFyQ2xhc3MJCUlkZW50aWZpZXIKK2hpIGRlZiBsaW5rIHNoU25nbENhc2UJCVN0YXRlbWVudAoraGkgZGVmIGxpbmsgc2hDb21tYW5kU3ViCQlTcGVjaWFsCitoaSBkZWYgbGluayBzaENvbW1lbnQJCUNvbW1lbnQKK2hpIGRlZiBsaW5rIHNoQ29uZGl0aW9uYWwJCUNvbmRpdGlvbmFsCitoaSBkZWYgbGluayBzaEV4cHJSZWdpb24JCURlbGltaXRlcgoraGkgZGVmIGxpbmsgc2hGdW5jdGlvbgkJRnVuY3Rpb24KK2hpIGRlZiBsaW5rIHNoRnVuY3Rpb25OYW1lCQlGdW5jdGlvbgoraGkgZGVmIGxpbmsgc2hOdW1iZXIJCU51bWJlcgoraGkgZGVmIGxpbmsgc2hPcGVyYXRvcgkJT3BlcmF0b3IKK2hpIGRlZiBsaW5rIHNoUmVwZWF0CQlSZXBlYXQKK2hpIGRlZiBsaW5rIHNoU2V0CQlTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIHNoU2V0TGlzdAkJSWRlbnRpZmllcgoraGkgZGVmIGxpbmsgc2hTaGVsbFZhcmlhYmxlcwkJUHJlUHJvYworaGkgZGVmIGxpbmsgc2hTcGVjaWFsCQlTcGVjaWFsCitoaSBkZWYgbGluayBzaFN0YXRlbWVudAkJU3RhdGVtZW50CitoaSBkZWYgbGluayBzaFN0cmluZwkJU3RyaW5nCitoaSBkZWYgbGluayBzaFRvZG8JCVRvZG8KK2hpIGRlZiBsaW5rIHNoQWxpYXMJCUlkZW50aWZpZXIKKworIiBDdXJyZW50IFN5bnRheAorIiA9PT09PT09PT09PT09PQoraWYgZXhpc3RzKCJiOmlzX2Jhc2giKQorIGxldCBiOmN1cnJlbnRfc3ludGF4ID0gImJhc2giCitlbHNlaWYgZXhpc3RzKCJiOmlzX2tvcm5zaGVsbCIpCisgbGV0IGI6Y3VycmVudF9zeW50YXggPSAia3NoIgorZWxzZQorIGxldCBiOmN1cnJlbnRfc3ludGF4ID0gInNoIgorZW5kaWYKKworIiB2aW06IHRzPTE2CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zaWNhZC52aW0gYi9ydW50aW1lL3N5bnRheC9zaWNhZC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzMjQ1MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NpY2FkLnZpbQpAQCAtMCwwICsxLDQxMyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBTaUNBRCAocHJvY2VkdXJlIGxhbmd1YWdlKQorIiBNYWludGFpbmVyOiAgIFpzb2x0IEJyYW55aWN6a3kgPHpicmFueWljemt5QGxtYXJrLm1neC5odT4KKyIgTGFzdCBDaGFuZ2U6ICAyMDAzIE1heSAxMQorIiBVUkw6CQlodHRwOi8vbG1hcmsubWd4Lmh1OjgxL2Rvd25sb2FkL3ZpbS9zaWNhZC52aW0KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIHVzZSBTUUwgaGlnaGxpZ2h0aW5nIGFmdGVyICdzcWwnIGNvbW1hbmQKK2lmIHZlcnNpb24gPj0gNjAwCisgIHN5biBpbmNsdWRlIEBTUUwgc3ludGF4L3NxbC52aW0KK2Vsc2UKKyAgc3luIGluY2x1ZGUgQFNRTCA8c2ZpbGU+OnA6aC9zcWwudmltCitlbmRpZgordW5sZXQgYjpjdXJyZW50X3N5bnRheAorCisiIHNwYWNlcyBhcmUgdXNlZCBpbiAoYXV0bylpbmRlbnRzIHNpbmNlIHNpY2FkIGhhdGVzIHRhYnVsYXRvciBjaGFyYWN0ZXJzCitpZiB2ZXJzaW9uID49IDYwMAorICBzZXRsb2NhbCBleHBhbmR0YWIKK2Vsc2UKKyAgc2V0IGV4cGFuZHRhYgorZW5kaWYKKworIiBpZ25vcmUgY2FzZQorc3luIGNhc2UgaWdub3JlCisKKyIgbW9zdCBpbXBvcnRhbnQgY29tbWFuZHMgLSBub3QgbGlzdGVkIGJ5IGF1c2t1CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBkZWZpbmUKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGRpYWxvZworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZG8KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGRvcCBjb250YWluZWQKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGVuZAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZW5kZG8KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGVuZHAKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGVycm9mZgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZXJyb24KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGV4aXRwCitzeW4ga2V5d29yZCBzaWNhZEdvdG8gICAgICBnb3RvIGNvbnRhaW5lZAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgaGgKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGlmCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBpbgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbXNnc3VwCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBvdXQKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHBhZGQKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHBhcmJlZworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcGFyZW5kCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBwZG9jCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBwcHJvdAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcHJvY2QKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHByb2NuCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBwc2F2CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBwc2VsCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBwc3ltYgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcHRyYWNlCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBwdHN0YXQKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHNldAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgc3FsIGNvbnRhaW5lZAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgc3RlcAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgc3lzCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB3dworCisiIGZ1bmN0aW9ucworc3luIG1hdGNoIHNpY2FkU3RhdGVtZW50ICJcPGF0YW4oIm1lPWUtMQorc3luIG1hdGNoIHNpY2FkU3RhdGVtZW50ICJcPGF0YW4yKCJtZT1lLTEKK3N5biBtYXRjaCBzaWNhZFN0YXRlbWVudCAiXDxjb3MoIm1lPWUtMQorc3luIG1hdGNoIHNpY2FkU3RhdGVtZW50ICJcPGRpc3QoIm1lPWUtMQorc3luIG1hdGNoIHNpY2FkU3RhdGVtZW50ICJcPGV4cCgibWU9ZS0xCitzeW4gbWF0Y2ggc2ljYWRTdGF0ZW1lbnQgIlw8bG9nKCJtZT1lLTEKK3N5biBtYXRjaCBzaWNhZFN0YXRlbWVudCAiXDxsb2cxMCgibWU9ZS0xCitzeW4gbWF0Y2ggc2ljYWRTdGF0ZW1lbnQgIlw8c2luKCJtZT1lLTEKK3N5biBtYXRjaCBzaWNhZFN0YXRlbWVudCAiXDxzcXJ0KCJtZT1lLTEKK3N5biBtYXRjaCBzaWNhZFN0YXRlbWVudCAiXDx0YW5oKCJtZT1lLTEKK3N5biBtYXRjaCBzaWNhZFN0YXRlbWVudCAiXDx4KCJtZT1lLTEKK3N5biBtYXRjaCBzaWNhZFN0YXRlbWVudCAiXDx5KCJtZT1lLTEKK3N5biBtYXRjaCBzaWNhZFN0YXRlbWVudCAiXDx2KCJtZT1lLTEKK3N5biBtYXRjaCBzaWNhZFN0YXRlbWVudCAiXDx4JWdcPXBbMC05XVx7MSwyfVw+Im1lPXMrMQorc3luIG1hdGNoIHNpY2FkU3RhdGVtZW50ICJcPHklZ1w9cFswLTldXHsxLDJ9XD4ibWU9cysxCisKKyIgbG9naWNhbCBvcGVyYXRvcnMKK3N5biBtYXRjaCBzaWNhZE9wZXJhdG9yICJcLmFuZFwuIgorc3luIG1hdGNoIHNpY2FkT3BlcmF0b3IgIlwubmVcLiIKK3N5biBtYXRjaCBzaWNhZE9wZXJhdG9yICJcLm5vdFwuIgorc3luIG1hdGNoIHNpY2FkT3BlcmF0b3IgIlwuZXFcLiIKK3N5biBtYXRjaCBzaWNhZE9wZXJhdG9yICJcLmdlXC4iCitzeW4gbWF0Y2ggc2ljYWRPcGVyYXRvciAiXC5ndFwuIgorc3luIG1hdGNoIHNpY2FkT3BlcmF0b3IgIlwubGVcLiIKK3N5biBtYXRjaCBzaWNhZE9wZXJhdG9yICJcLmx0XC4iCitzeW4gbWF0Y2ggc2ljYWRPcGVyYXRvciAiXC5vclwuIgorc3luIG1hdGNoIHNpY2FkT3BlcmF0b3IgIlwuZXF2XC4iCitzeW4gbWF0Y2ggc2ljYWRPcGVyYXRvciAiXC5uZXF2XC4iCisKKyIgdmFyaWFibGUgbmFtZQorc3luIG1hdGNoIHNpY2FkSWRlbnRpZmllciAiJWdcPVtpcnB0XVswLTldXHsxLDJ9XD4iCitzeW4gbWF0Y2ggc2ljYWRJZGVudGlmaWVyICIlZ1w9bFswLTldXD4iCitzeW4gbWF0Y2ggc2ljYWRJZGVudGlmaWVyICIlZ1w9W2lycHRsXSgibWU9ZS0xCitzeW4gbWF0Y2ggc2ljYWRJZGVudGlmaWVyICIlZXJyb3JcPiIKK3N5biBtYXRjaCBzaWNhZElkZW50aWZpZXIgIiVuc2VsXD4iCitzeW4gbWF0Y2ggc2ljYWRJZGVudGlmaWVyICIlbnZhclw+Igorc3luIG1hdGNoIHNpY2FkSWRlbnRpZmllciAiJXNjbFw+Igorc3luIG1hdGNoIHNpY2FkSWRlbnRpZmllciAiJXdkXD4iCitzeW4gbWF0Y2ggc2ljYWRJZGVudGlmaWVyICJcJFtpcnRdWzAtOV1cezEsMn1cPiIgY29udGFpbmVkCisKKyIgbGFiZWwKK3N5biBtYXRjaCBzaWNhZExhYmVsMSAiXiAqXC5bYS16XVthLXowLTldXHswLDd9IFwrW14gXSJtZT1lLTEKK3N5biBtYXRjaCBzaWNhZExhYmVsMSAiXiAqXC5bYS16XVthLXowLTldXHswLDd9XCoibWU9ZS0xCitzeW4gbWF0Y2ggc2ljYWRMYWJlbDIgIlw8Z290byBcLlw9W2Etel1bYS16MC05XVx7MCw3fVw+IiBjb250YWlucz1zaWNhZEdvdG8KK3N5biBtYXRjaCBzaWNhZExhYmVsMiAiXDxnb3RvXC5bYS16XVthLXowLTldXHswLDd9XD4iIGNvbnRhaW5zPXNpY2FkR290bworCisiIGJvb2xlYW4KK3N5biBtYXRjaCBzaWNhZEJvb2xlYW4gIlwuW2Z0XVwuIgorIiBpbnRlZ2VyIHdpdGhvdXQgc2lnbgorc3luIG1hdGNoIHNpY2FkTnVtYmVyICJcPFswLTldXCtcPiIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRoIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCBzaWNhZEZsb2F0ICJcPFswLTldXCtcLlswLTldKlwoZVstK11cPVswLTldXCtcKVw9XD4iCisiIGZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCBzaWNhZEZsb2F0ICJcLlswLTldXCtcKGVbLStdXD1bMC05XVwrXClcPVw+IgorIiBmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGhvdXQgZG90LCB3aXRoIGV4cG9uZW50CitzeW4gbWF0Y2ggc2ljYWRGbG9hdCAiXDxbMC05XVwrZVstK11cPVswLTldXCtcPiIKKworIiB3aXRob3V0IHRoaXMgZXh0cmFTdHJpbmcgZGVmaW5pdGlvbiBhICcgOyAgJyBjb3VsZCBzdG9wIHRoZSBjb21tZW50CitzeW4gcmVnaW9uIHNpY2FkU3RyaW5nXyB0cmFuc3BhcmVudCBzdGFydD0rJysgZW5kPSsnKyBvbmVsaW5lIGNvbnRhaW5lZAorIiBzdHJpbmcKK3N5biByZWdpb24gc2ljYWRTdHJpbmcgc3RhcnQ9KycrIGVuZD0rJysgb25lbGluZQorCisiIGNvbW1lbnRzIC0gbmFzdHkgb25lcyBpbiBzaWNhZAorCisiIC0gJyAqICBibGFibGEnIG9yICcgKiAgYmxhYmxhOycKK3N5biByZWdpb24gc2ljYWRDb21tZW50IHN0YXJ0PSJeICpcKiIgc2tpcD0nXFwgKiQnIGVuZD0iOyJtZT1lLTEgZW5kPSIkIiBjb250YWlucz1zaWNhZFN0cmluZ18KKyIgLSAnIC5MQUJFTDAzICogIGJsYWJsYScgb3IgJyAuTEFCRUwwMyAqICBibGFibGE7Jworc3luIHJlZ2lvbiBzaWNhZENvbW1lbnQgc3RhcnQ9Il4gKlwuW2Etel1bYS16MC05XVx7MCw3fSAqXCoiIHNraXA9J1xcICokJyBlbmQ9IjsibWU9ZS0xIGVuZD0iJCIgY29udGFpbnM9c2ljYWRMYWJlbDEsc2ljYWRTdHJpbmdfCisiIC0gJzsgKiBibGFibGEnIG9yICc7ICogYmxhYmxhOycKK3N5biByZWdpb24gc2ljYWRDb21tZW50IHN0YXJ0PSI7ICpcKiJtcz1zKzEgc2tpcD0nXFwgKiQnIGVuZD0iOyJtZT1lLTEgZW5kPSIkIiBjb250YWlucz1zaWNhZFN0cmluZ18KKyIgLSBjb21tZW50cyBiZXR3ZWVuIGRvY2JlZyBhbmQgZG9jZW5kCitzeW4gcmVnaW9uIHNpY2FkQ29tbWVudCBtYXRjaGdyb3VwPXNpY2FkU3RhdGVtZW50IHN0YXJ0PSJcPGRvY2JlZ1w+IiBlbmQ9Ilw8ZG9jZW5kXD4iCisKKyIgY2F0Y2ggXCBhdCB0aGUgZW5kIG9mIGxpbmUKK3N5biBtYXRjaCBzaWNhZExpbmVDb250ICJcXCAqJCIKKworIiBwYXJhbWV0ZXJzIGluIGRvcCBibG9jayAtIGZvciB0aGUgdGltZSBiZWluZyBpdCBpcyBub3QgdXNlZAorInN5biBtYXRjaCBzaWNhZFBhcmFtZXRlciAiIFthLXpdW2EtejAtOV0qWz06XSJtZT1lLTEgY29udGFpbmVkCisiIGRvcCBibG9jayAtIGZvciB0aGUgdGltZSBiZWluZyBpdCBpcyBub3QgdXNlZAorc3luIHJlZ2lvbiBzaWNhZERvcEJsb2NrIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9c2ljYWRTdGF0ZW1lbnQgc3RhcnQ9J1w8ZG9wXD4nIHNraXA9J1xcICokJyBlbmQ9JzsnbWU9ZS0xIGVuZD0nJCcgY29udGFpbnM9QUxMCisKKyIgc3FsIGJsb2NrIC0gbmV3IGhpZ2hsaWdodGluZyBtb2RlIGlzIHVzZWQgKHNlZSBzeW4gaW5jbHVkZSkKK3N5biByZWdpb24gc2ljYWRTcWxCbG9jayB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXNpY2FkU3RhdGVtZW50IHN0YXJ0PSdcPHNxbFw+JyBza2lwPSdcXCAqJCcgZW5kPSc7J21lPWUtMSBlbmQ9JyQnIGNvbnRhaW5zPUBTUUwsc2ljYWRJZGVudGlmaWVyLHNpY2FkTGluZUNvbnQKKworIiBzeW5jaHJvbml6aW5nCitzeW4gc3luYyBjbGVhciAgIiBjbGVhciBzeW5jIHVzZWQgaW4gc3FsLnZpbQorc3luIHN5bmMgbWF0Y2ggc2ljYWRTeW5jQ29tbWVudCBncm91cHRoZXJlIE5PTkUgIlw8ZG9jZW5kXD4iCitzeW4gc3luYyBtYXRjaCBzaWNhZFN5bmNDb21tZW50IGdyb3VwaGVyZSBzaWNhZENvbW1lbnQgIlw8ZG9jYmVnXD4iCisiIG5leHQgbGluZSBtdXN0IGJlIGV4YW1pbmVkIHRvbworc3luIHN5bmMgbGluZWNvbnQgIlxcICokIgorCisiIGNhdGNoIGVycm9yIGNhdXNlZCBieSB0YWJ1bGF0b3Iga2V5CitzeW4gbWF0Y2ggc2ljYWRFcnJvciAiXHQiCisiIGNhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMKKyJzeW4gcmVnaW9uIHNpY2FkUGFyZW4gdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULHNpY2FkUGFyZW5FcnJvcgorc3luIHJlZ2lvbiBzaWNhZFBhcmVuIHRyYW5zcGFyZW50IHN0YXJ0PScoJyBza2lwPSdcXCAqJCcgZW5kPScpJyBlbmQ9JyQnIGNvbnRhaW5zPUFMTEJVVCxzaWNhZFBhcmVuRXJyb3IKK3N5biBtYXRjaCBzaWNhZFBhcmVuRXJyb3IgJyknCisic3luIHJlZ2lvbiBzaWNhZEFwb3N0cm9waGUgdHJhbnNwYXJlbnQgc3RhcnQ9KycrIGVuZD0rJysgY29udGFpbnM9QUxMQlVULHNpY2FkQXBvc3Ryb3BoZUVycm9yCisic3luIG1hdGNoIHNpY2FkQXBvc3Ryb3BoZUVycm9yICsnKworIiBub3QgY2xvc2VkIGFwb3N0cm9waGUKKyJzeW4gcmVnaW9uIHNpY2FkRXJyb3Igc3RhcnQ9KycrIGVuZD0rJCsgY29udGFpbnM9QUxMQlVULHNpY2FkQXBvc3Ryb3BoZUVycm9yCisic3luIG1hdGNoIHNpY2FkQXBvc3Ryb3BoZUVycm9yICsnW14nXSokK21lPXMrMSBjb250YWluZWQKKworIiBTSUNBRCBrZXl3b3Jkcworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgYWJzdCBhZGQgYWRkc2ltIGFkcmluIGFpYgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgYWlienNuIGFpZHVtcCBhaWZnZW8gYWlzYnJrIGFsa25hbQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgYWxrbnIgYWxrc2F2IGFsa3NlbCBhbGt0cmMgYWxvcGVuCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBhbnNibyBhcmFjdGl2IGFyYXJlYSBhcmFyZWFvIGFyYXJzZnMKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGFyYnVmZmVyIGFyY2hlY2sgYXJjb212IGFyY29udCBhcmNvbnYKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGFyY29weSBhcmNvcHlvIGFyY29yciBhcmNyZWF0ZSBhcmVycm9yCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBhcmV2YWwgYXJmbGZtIGFyZmxvcCBhcmZyYXN0IGFyZ2JrZXkKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGFyZ2VuZiBhcmdyYXBoIGFyZ3JhcGhvIGFyaW50ZXJzIGFya29tcGZsCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBhcmxhc3NvIGFybGNvcHkgYXJsZ3JhcGggYXJsaW5lIGFybGluaW5nCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBhcmxpc2x5IGFybWFrZWEgYXJtZW1vIGFybmV4dCBhcm92ZXJsCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBhcm92ZXJzIGFycGFya21kIGFycGFycyBhcnJlZnAgYXJzZWxlY3QKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGFyc2V0IGFyc3RydWN0IGFydW5pZnkgYXJ1cGRhdGUgYXJ2ZWN0b3IKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGFydmVpbmZsIGFydmZsZmwgYXJ2b3JvbmkgYXVza3UgYmFzaXMKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGJhc2lzYXVzIGJhc2lzZGFyIGJhc2lzbnIgYmVib3MgYmVmbAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgYmVmbGEgYmVmbGkgYmVmbHMgYmVvIGJlb3J0YQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgYmVvcnRuIGJlcCBiZXBhbiBiZXBhcCBiZXBvbGEKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGJlcG9sbiBiZXBzbiBiZXBzcCBiZXIgYmVyaWxpCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBiZXJrIGJld3ogYmtsIGJsaSBibWEKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGJtYWt0IGJtYWt0cyBibWJtIGJtZXJrIGJtZXJ3CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBibWVyd3MgYm1pbml0IGJtayBibW9ydGggYm1vcworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgYm1vc3MgYm1wYXIgYm1zbCBibXN1bSBibXN1bXMKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGJtdmVyIGJtdmVybyBibXcgYm8gYnRhCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBidWZmZXIgYnZsIGJ3IGJ6YSBiemFwCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBiemQgYnpnZXJhIGJ6b3J0aCBjYXQgY2F0ZWwKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGNkYmRpZmYgY2UgY2dtcGFyYW0gY2xvc2UgY2xvc2VzaW0KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGNvbWdlbmVyIGNvbXAgY29tcCBjb25jbG9zZSBjb25jbG9zZSBjb25pbmZvCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBjb25vcGVuIGNvbnJlYWQgY29udG91ciBjb253cml0ZSBjb3AKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGNvcGFyIGNvcGFycCBjb3BhcnAyIGNvcGVsIGNyCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBjcyBjc3RhdCBjdXJzb3IgZCBkYQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZGFsIGRhc3AgZGFzcHMgZGF0YW91dCBkY29sCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBkZCBkZWZzciBkZWwgZGVsZWwgZGVza3JkZWYKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGRmIGRmbiBkZm5zIGRmcG9zIGRmcgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZGdkIGRnbSBkZ3AgZGdyIGRoCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBkaWFnIGRpYXVzIGRpciBkaXNic2QgZGtsCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBka3R4IGRrdXIgZGxnZml4IGRsZ2ZyZSBkbWEKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGRwcmlvIGRyIGRydXNlIGRzZWwgZHNraW5mbworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZHNyIGR2IGR2ZSBlYmEgZWJkCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBlYmRtb2QgZWJzIGVkYnNkYmluIGVkYnNzbmluIGVkYnN2dGluCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBlZHQgZWdhdXMgZWdkZWYgZWdkZWZzIGVnbGlzdAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZWdsb2UgZWdsb2VucCBlZ2xvZXMgZWd4eCBlaWIKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGVrdXIgZWt1cmFkZCBlbGVsIGVscG9zIGVwZworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZXNhdSBlc2F1YWRkIGVzZWsgZXRhIGV0YXAKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGV0YXYgZmVwYXJhbSBmaWNvbnYgZmlsc2UgZmwKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGZsaSBmbGluIGZsaW5pIGZsaW5pdCBmbGlucworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZmxrb3IgZmxuIGZsbmxpIGZsb3AgZmxvdXQKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGZsb3dlcnQgZmxwYXJhbSBmbHJhc3RlciBmbHN5IGZsc3lkCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBmbHN5bSBmbHN5bXMgZmxzeW10IGZtdGF0dCBmbXRkaWEKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGZtdGxpYiBmcGcgZ2JhZGRkYiBnYmFpbSBnYmFucnMKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGdiYXR3IGdiYXUgZ2JhdWRpdCBnYmNsb3NwIGdiY3JlZGljCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBnYmNyZWVtIGdiY3JlbGQgZ2JjcmVzZGIgZ2JjcmV0ZCBnYmRlCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBnYmRlbGRiIGdiZGVsZGljIGdiZGVsZW0gZ2JkZWxsZCBnYmRlbHJlZgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZ2JkZWx0ZCBnYmRpc2RiIGdiZGlzZW0gZ2JkaXNsZCBnYmRpc3RkCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBnYmVibiBnYmVtYXUgZ2JlcHN2IGdiZ2V0ZGV0IGdiZ2V0ZXMKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGdiZ2V0bWFzIGdiZ3FlbCBnYmdxZWxyIGdiZ3FzYSBnYmdyYW50CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBnYmltcGRpYyBnYmxlciBnYmxlcmIgZ2JsZXJmIGdibGVzCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBnYmxvY2RpYyBnYm1nbWcgZ2JtbnRkYiBnYm1vZGRiIGdibmFtCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBnYm5ldSBnYm9wZW5wIGdicG9seSBnYnBvcyBnYnBydWVmCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBnYnBydWVmZyBnYnBzIGdicWdlbCBnYnFnc2EgZ2JyZWZkaWMKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGdicmVmdGFiIGdicmVsZGljIGdicmVzZW0gZ2JyZXZva2UgZ2JzYXYKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGdic2JlZiBnYnNkZGsgZ2JzaWN1IGdic3J0IGdic3MKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGdic3RhdCBnYnN5c3AgZ2JzemF1IGdidWJwIGdidWViCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBnYnVubWRiIGdidXNlZW0gZ2J3IGdid2VnIGdid2llaAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgZ2J6dCBnZWxwIGdlcmEgZ2V0dmFyIGhndworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgaHBnIGhyMCBocmEgaHJhciBpY2NsY2hhbgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgaWNjcmVjb24gaWNkZXNjb24gaWNmcmVlIGljZ2V0Y29uIGljZ3RyZXNwCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBpY29wY2hhbiBpY3B1dGNvbiBpY3JlYWNvbiBpY3JlcWQgaWNyZXFudworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgaWNyZXF3IGljcmVzcGQgaWNyZXNydmUgaWN3cmljb24gaW1zZ2V0CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBpbXNncWVsIGltc21nZXQgaW1zcGxvdCBpbXNwcmludCBpbmNoaworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgaW5mIGluZmQgaW5zdCBrYm1sIGtibWxzCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBrYm1tIGtibW1zIGtibXQga2JtdGRwcyBrYm10cworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQga2hib2Uga2hib2wga2hkb2Iga2hlIGtoZXRhcAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQga2hmcncga2hrdGsga2hsYW5nIGtobGQga2htZnJwCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBraG1rcyBraG1zIGtocGQga2hwZmVpbCBraHBsCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBraHByb2ZpbCBraHJhbmQga2hzYSBraHNhYnMga2hzYXBoCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBraHNkIGtoc2RsIGtoc2Uga2hza2J6IGtoc25hCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBraHNudW0ga2hzb2Iga2hzcG9zIGtoc3ZwaCBraHRybgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQga2h2ZXIga2h6cGUga2h6cGwga2liIGtsZGF0CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBrbGxlZyBrbHNjaCBrbHN5bSBrbHZlcnQga21wZworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQga210bGFnZSBrbXRwIGttdHBzIGtvZGVmIGtvZGVmcAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQga29kZWZzIGtvayBrb2twIGtvbGFlIGtvbQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQga29udGx5IGtvcGFyIGtvcGFycCBrb3BnIGtvc3kKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGtwIGtyIGtyc2VrIGtydGNsb3NlIGtydG9wZW4KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGt0ayBsYWQgbGFlIGxhZXNlbCBsYW5ndWFnZQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbGFzc28gbGJkZXMgbGNzIGxkZXNrIGxkZXNrcworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbGUgbGVhayBsZWF0dGRlcyBsZWJhIGxlYmFzCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBsZWJhem5wIGxlYmQgbGVibSBsZWJ2IGxlYnZhdXMKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGxlYnZsaXN0IGxlZGUgbGVkZWwgbGVkZXBvIGxlZGVwb2wKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGxlZGVwb3MgbGVkZXIgbGVkaXN0IGxlZG0gbGVlCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBsZWVpbnMgbGVlcyBsZWdlIGxla3IgbGVrcmVuZAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbGVrd2EgbGVrd2FzIGxlbCBsZWxoIGxlbGwKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGxlbHAgbGVtIGxlbmEgbGVuZCBsZW5tCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBsZXAgbGVwZSBsZXBlZSBsZXBrbyBsZXBsCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBsZXBta28gbGVwbWtvcCBsZXBvcyBsZXBvc20gbGVxcworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbGVxc2wgbGVxc3NwIGxlcXN2IGxlcXN2b3YgbGVzCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBsZXNjaCBsZXNyIGxlc3MgbGVzdGQgbGV0CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBsZXRhdW0gbGV0bCBsZXYgbGV2bSBsZXZ0bQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbGV2dHAgbGV2dHIgbGV3IGxld20gbGV4eAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbGZzIGxpIGxpbmluZyBsbGRlcyBsbW9kZQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbG9lZGsgbG9lcGt0IGxvcCBsb3NlIGxvc2VzCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBscCBscHBnIGxwcHJ1ZWYgbHIgbHMKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGxzb3AgbHN0YSBsc3RhdCBseSBseWF1cworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbHogbHphIGx6YWUgbHpieiBsemUKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IGx6bnIgbHpvIGx6cG9zIG1hIG1hMAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbWExIG1hZCBtYXAgbWFwb2x5IG1jYXJwCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBtY2NmciBtY2NnciBtY2NsciBtY2NyZiBtY2RmCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBtY2RtYSBtY2RyIG1jZHJwIG1jZHZlIG1jZWJkCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBtY2dzZSBtY2luZm8gbWNsZHJwIG1kIG1lCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBtZWZkIG1lZmRzIG1pbm1heCBtaXBnIG1sCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBtbWNtZG1lIG1tZGJmIG1tZGVsbGIgbW1kaXIgbW1kb21lCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBtbWZzYiBtbWluZm9sYiBtbWxhcHAgbW1sYmYgbW1saXN0bGIKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IG1tbG9hZGNtIG1tbXNnIG1tcmVhZGxiIG1tc2V0bGIgbW1zaG93Y20KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IG1tc3RhdG1lIG1ucCBtcG8gbXIgbXJhCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBtcyBtc2F2IG1zZ291dCBtc2dzbmQgbXNwCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBtc3BmIG10ZCBuYXNlbCBuY29tcCBuZXcKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IG5saXN0IG5saXN0bHQgbmxpc3RseSBubGlzdG5wIG5saXN0cG8KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IG5wIG5wYSBucGRlcyBucGUgbnBlbQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgbnBpbmZhIG5wcnVlZiBucHNhdCBucHNzIG5wc3NhCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBudHogb2Egb2FuIG9kZWwgb2RmCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBvZGZ4IG9qIG9qYSBvamFkZHNrIG9qYWVkCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBvamFlZHMgb2phZWYgb2phZWZzIG9qYWVuIG9qYWsKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IG9qYWtzIG9qYWt0IG9qYWt6IG9qYWxtIG9qYXRraXMKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IG9qYXR0IG9qYXR3IG9qYnNlbCBvamNhc2VsIG9qY2tvbgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgb2pkZSBvamR0bCBvamViIG9qZWJkIG9qZWwKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IG9qZWxwYXMgb2plc2Igb2plc2JkIG9qZXggb2plemdlCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBvamtvIG9qbGIgb2psb2Ugb2psc2Igb2ptZXJrCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBvam1vcyBvam5hbSBvanBkYSBvanBvbHkgb2pwcmFlCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBvanMgb2pzYWsgb2pzb3J0IG9qc3RydWt0IG9qc3ViCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBvanRkZWYgb2p2ZWsgb2p4IG9sZCBvbGRkCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBvcCBvcGEgb3BhMSBvcGVuIG9wZW5zaW0KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IG9wbmJzZCBvcnRoIG9zYW56IG90IG90cAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgb3RyZWZwIHBhcmFtIHBhcmFuZiBwYXMgcGFzc3cKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHBjYXRjaGYgcGRhIHBkYWRkIHBnIHBnMAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcGdhdWYgcGdhdWZzZWwgcGdiIHBna28gcGdtCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBwZ3IgcGd2cyBwaWx5IHBrcGcgcGxvdAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcGxvdGYgcGxvdGZyIHBtYXAgcG1kYXRhIHBtZGkKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHBtZHAgcG1lYiBwbWVwIHBtaW5mbyBwbWxiCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBwbWxpIHBtbHAgcG1tb2QgcG5ydmVyIHBvYQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcG9zIHBvc2EgcG9zYXVzIHBvc3QgcHJpbnRmcgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcHJvdGVjdCBwcnMgcHJzc3kgcHJzeW0gcHMKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHBzYWRkIHBzY2xvc2UgcHNvcGVuIHBzcGFyYW0gcHNwcncKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHBzcmVzIHBzc3RhdCBwc3cgcHN3ciBxdWFsaWYKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHJhaG1lbiByYXN0ZXIgcmFzdGVyZCByYmJhY2t1cCByYmNoYW5nMgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcmJjaGFuZ2UgcmJjbWQgcmJjb2xkc3QgcmJjb2xvciByYmNvcHkKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHJiY3V0IHJiY3V0MiByYmRiY2wgcmJkYmxvYWQgcmJkYm9wCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCByYmRid2luIHJiZGVmcyByYmVkaXQgcmJmZGVsIHJiZmlsbAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcmJmaWxsMiByYmZsb2FkIHJiZmxvYWQyIHJiZm5ldyByYmZuZXcyCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCByYmZwYXIgcmJmcmVlIHJiZyByYmdldGNvbCByYmdldGRzdAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcmJpbmZvIHJicGFzdGUgcmJwaXhlbCByYnJzdG9yZSByYnNuYXAKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHJic3RhIHJidGlsZSByYnRycGl4IHJidnRvciByY29sCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCByZCByZGNoYW5nZSByZSByZWIgcmVibW9kCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCByZWZ1bmMgcmVuIHJlbmVsIHJrIHJrcG9zCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCByb2hyIHJvaHJwb3MgcnByIHJyIHJyMAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgcnJhIHJyYXIgcnMgc2FtdG9zZGIgc2F2CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBzYXZkIHNhdmVzaW0gc2F2eCBzY29sIHNjb3B5CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBzY29weWUgc2RidG9zYW0gc2RkayBzZHdyIHNlCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBzZWxhdXMgc2VscG9zIHNlbWFuIHNlbWkgc2VzY2gKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHNldHNjbCBzZXR2YXIgc2ZjbG50cGYgc2Zjb25uIHNmZmV0Y2hmCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBzZmZwcm9waSBzZmZ0eXBpIHNmcXVnZW9jIHNmcXV3aGNsIHNmc2VsZgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgc2ZzdGF0IHNmdGVzdCBzZ2Ugc2lkIHNpZQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgc2lnIHNpZ3Agc2trIHNra3Mgc24KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHNuMjEgc25wYSBzbnBhciBzbnBhcnAgc25wYXJwcworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgc25wYXJzIHNucGFzIHNucGQgc25waSBzbnBrb3IKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHNucGwgc25wbSBzb2Igc29iMCBzb2Jsb2UKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHNvYnMgc29mIHNvcCBzcGxpdCBzcHIKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHNxZGFkZCBzcWRsYWQgc3Fkb2xkIHNxZHNhdgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgc3Igc3JlcyBzcnQgc3NldCBzdGF0CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBzdGR0eHQgc3RyaW5nIHN0cnVrdCBzdHJ1cHJ1IHN1aW5mbAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgc3VpbmZsayBzdWluZmxzIHN1cG8gc3VwbzEgc3ZhCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBzdnIgc3kgc3lhIHN5bHkgc3lzb3V0CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCBzeXUgc3l1eCB0YWEgdGFiZWcgdGFibAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgdGFibSB0YW0gdGFuciB0YXBnIHRhcG9zCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB0YXJrZCB0YXMgdGFzZSB0YiB0YmFkZAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgdGJkIHRiZXh0IHRiZ2V0IHRiaW50IHRib3V0CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB0YnB1dCB0YnNhdCB0YnNlbCB0YnN0ciB0Y2F1eAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgdGNjYWJsZSB0Y2Noa3JlcCB0Y2NvbW0gdGNjb25kIHRjZGJnCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB0Y2dibnIgdGNncnBvcyB0Y2luaXQgdGNsY29udiB0Y21vZGVsCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB0Y253ZSB0Y3BhaXJzIHRjcGF0aCB0Y3JlY3QgdGNybWRsaQorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgdGNzY2hlbWUgdGNzY2htYXAgdGNzZSB0Y3NlbGMgdGNzdGFyCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB0Y3N0cm1hbiB0Y3N1Ym5ldCB0Y3N5bWJvbCB0Y3RhYmxlIHRjdGhyY2FiCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB0Y3RyYW5zIHRjdHN0IHRkYiB0ZGJkZWwgdGRiZ2V0CitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB0ZGJsaXN0IHRkYnB1dCB0Z21vZCB0aXRlbCB0bW9mZgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgdG1vbiB0cCB0cGEgdHBzIHRwdGEKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHRyYSB0cmFucyB0cmFuc2tkbyB0cmFuc29wdCB0cmFuc3Bybworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgdHJpYW5nbGUgdHJtIHRycGcgdHJya2QgdHJzCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB0cyB0c2EgdHggdHhhIHR4Y2hrCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB0eGNuZyB0eGp1IHR4bCB0eHAgdHhwdgorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgdHh0Y21wIHR4diB0eHogdWNrb24gdWlpbmZvCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB1aXN0YXR1cyB1bWRrIHVtZGsxIHVtZGthIHVtZ2UKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHVtZ2VzIHVtciB2ZXJibyB2ZXJmbGxpIHZlcmlmCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB2ZXJseSB2ZXJzaW5mbyB2ZmcgdnBhY3RpdmUgdnBjZW50ZXIKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHZwY3JlYXRlIHZwZGVsZXRlIHZwaW5mbyB2cG1vZGlmeSB2cHNjcm9sbAorc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgdnBzdGEgd2Fic3ltIHd6bWVyayB6ZHJoZiB6ZHJoZm4KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHpkcmhmdyB6ZHJoZnduIHplZnAgemZsIHpmbGF1cworc3luIGtleXdvcmQgc2ljYWRTdGF0ZW1lbnQgemthIHpsZWwgemxlbHMgem9ydGYgem9ydGZuCitzeW4ga2V5d29yZCBzaWNhZFN0YXRlbWVudCB6b3J0Zncgem9ydGZ3biB6b3J0cCB6b3J0cG4genBhcmIKK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHpwYXJibiB6cGFyZiB6cGFyZm4genBhcmZ3IHpwYXJmd24KK3N5biBrZXl3b3JkIHNpY2FkU3RhdGVtZW50IHpwYXJwIHpwYXJwbiB6d2lua3AgendpbmtwbgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zaWNhZF9zeW50YXhfaW5pdHMiKQorCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3NpY2FkX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHNpY2FkTGFiZWwgUHJlUHJvYworICBIaUxpbmsgc2ljYWRMYWJlbDEgc2ljYWRMYWJlbAorICBIaUxpbmsgc2ljYWRMYWJlbDIgc2ljYWRMYWJlbAorICBIaUxpbmsgc2ljYWRDb25kaXRpb25hbCBDb25kaXRpb25hbAorICBIaUxpbmsgc2ljYWRCb29sZWFuIEJvb2xlYW4KKyAgSGlMaW5rIHNpY2FkTnVtYmVyIE51bWJlcgorICBIaUxpbmsgc2ljYWRGbG9hdCBGbG9hdAorICBIaUxpbmsgc2ljYWRPcGVyYXRvciBPcGVyYXRvcgorICBIaUxpbmsgc2ljYWRTdGF0ZW1lbnQgU3RhdGVtZW50CisgIEhpTGluayBzaWNhZFBhcmFtZXRlciBzaWNhZFN0YXRlbWVudAorICBIaUxpbmsgc2ljYWRHb3RvIHNpY2FkU3RhdGVtZW50CisgIEhpTGluayBzaWNhZExpbmVDb250IHNpY2FkU3RhdGVtZW50CisgIEhpTGluayBzaWNhZFN0cmluZyBTdHJpbmcKKyAgSGlMaW5rIHNpY2FkQ29tbWVudCBDb21tZW50CisgIEhpTGluayBzaWNhZFNwZWNpYWwgU3BlY2lhbAorICBIaUxpbmsgc2ljYWRJZGVudGlmaWVyIFR5cGUKKyIgIEhpTGluayBzaWNhZElkZW50aWZpZXIgSWRlbnRpZmllcgorICBIaUxpbmsgc2ljYWRFcnJvciBFcnJvcgorICBIaUxpbmsgc2ljYWRQYXJlbkVycm9yIHNpY2FkRXJyb3IKKyAgSGlMaW5rIHNpY2FkQXBvc3Ryb3BoZUVycm9yIHNpY2FkRXJyb3IKKyAgSGlMaW5rIHNpY2FkU3RyaW5nRXJyb3Igc2ljYWRFcnJvcgorICBIaUxpbmsgc2ljYWRDb21tZW50RXJyb3Igc2ljYWRFcnJvcgorIiAgSGlMaW5rIHNxbFN0YXRlbWVudCBTcGVjaWFsICAiIG1vZGlmaWVkIGhpZ2hsaWdodCBncm91cCBpbiBzcWwudmltCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKKworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic2ljYWQiCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NpbXVsYS52aW0gYi9ydW50aW1lL3N5bnRheC9zaW11bGEudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NTJlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zaW11bGEudmltCkBAIC0wLDAgKzEsOTkgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglTaW11bGEKKyIgTWFpbnRhaW5lcjoJSGFha29uIFJpaXNlciA8aGFrb25ya0BmeXMudWlvLm5vPgorIiBVUkw6CQlodHRwOi8vZm9say51aW8ubm8vaGFrb25yay92aW0vc3ludGF4L3NpbXVsYS52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWF5IDE1CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3luIGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKKyIgTm8gY2FzZSBzZW5zaXRpdml0eSBpbiBTaW11bGEKK3N5biBjYXNlCWlnbm9yZQorCitzeW4gbWF0Y2gJc2ltdWxhQ29tbWVudAkJIl4lLiokIiBjb250YWlucz1zaW11bGFUb2RvCitzeW4gcmVnaW9uCXNpbXVsYUNvbW1lbnQJCXN0YXJ0PSIhXHxcPGNvbW1lbnRcPiIgZW5kPSI7IiBjb250YWlucz1zaW11bGFUb2RvCisKKyIgVGV4dCBiZXR3ZWVuIHRoZSBrZXl3b3JkICdlbmQnIGFuZCBlaXRoZXIgYSBzZW1pY29sb24gb3Igb25lIG9mIHRoZQorIiBrZXl3b3JkcyAnZW5kJywgJ2Vsc2UnLCAnd2hlbicgb3IgJ290aGVyd2lzZScgaXMgYWxzbyBhIGNvbW1lbnQKK3N5biByZWdpb24Jc2ltdWxhQ29tbWVudAkJc3RhcnQ9Ilw8ZW5kXD4ibGM9MyBtYXRjaGdyb3VwPVN0YXRlbWVudCBlbmQ9IjtcfFw8XChlbmRcfGVsc2VcfHdoZW5cfG90aGVyd2lzZVwpXD4iCisKK3N5biBtYXRjaAlzaW11bGFDaGFyRXJyb3IJCSInLlx7LTIsfSciCitzeW4gbWF0Y2gJc2ltdWxhQ2hhcmFjdGVyCQkiJy4nIgorc3luIG1hdGNoCXNpbXVsYUNoYXJhY3RlcgkJIichXGRcey19ISciIGNvbnRhaW5zPXNpbXVsYVNwZWNpYWxDaGFyCitzeW4gbWF0Y2gJc2ltdWxhU3RyaW5nCQknIi5cey19IicgY29udGFpbnM9c2ltdWxhU3BlY2lhbENoYXIsc2ltdWxhVG9kbworCitzeW4ga2V5d29yZAlzaW11bGFCb29sZWFuCQl0cnVlIGZhbHNlCitzeW4ga2V5d29yZAlzaW11bGFDb21wb3VuZAkJYmVnaW4gZW5kCitzeW4ga2V5d29yZAlzaW11bGFDb25kaXRpb25hbAllbHNlIGlmIG90aGVyd2lzZSB0aGVuIHVudGlsIHdoZW4KK3N5biBrZXl3b3JkCXNpbXVsYUNvbnN0YW50CQlub25lIG5vdGV4dAorc3luIGtleXdvcmQJc2ltdWxhRnVuY3Rpb24JCXByb2NlZHVyZQorc3luIGtleXdvcmQJc2ltdWxhT3BlcmF0b3IJCWVxIGVxdiBnZSBndCBpbXAgaW4gaXMgbGUgbHQgbmUgbmV3IG5vdCBxdWEKK3N5biBrZXl3b3JkCXNpbXVsYVJlcGVhdAkJd2hpbGUgZm9yCitzeW4ga2V5d29yZAlzaW11bGFSZXNlcnZlZAkJYWN0aXZhdGUgYWZ0ZXIgYXQgYmVmb3JlIGRlbGF5IGdvIGdvdG8gbGFiZWwgcHJpb3IgcmVhY3RpdmF0ZSBzd2l0Y2ggdG8KK3N5biBrZXl3b3JkCXNpbXVsYVN0YXRlbWVudAkJZG8gaW5uZXIgaW5zcGVjdCBzdGVwIHRoaXMKK3N5biBrZXl3b3JkCXNpbXVsYVN0b3JhZ2VDbGFzcwlleHRlcm5hbCBoaWRkZW4gbmFtZSBwcm90ZWN0ZWQgdmFsdWUKK3N5biBrZXl3b3JkCXNpbXVsYVN0cnVjdHVyZQkJY2xhc3MKK3N5biBrZXl3b3JkCXNpbXVsYVR5cGUJCWFycmF5IGJvb2xlYW4gY2hhcmFjdGVyIGludGVnZXIgbG9uZyByZWFsIHNob3J0IHRleHQgdmlydHVhbAorc3luIG1hdGNoCXNpbXVsYUFzc2lnbmVkCQkiXDxcaFx3KlxzKlwoKC4qKVwpXD1ccyo6XCg9XHwtXCkibWU9ZS0yCitzeW4gbWF0Y2gJc2ltdWxhT3BlcmF0b3IJCSJbJjo9PD4rXC0qL10iCitzeW4gbWF0Y2gJc2ltdWxhT3BlcmF0b3IJCSJcPGFuZFwoXHNcK3RoZW5cKVw9XD4iCitzeW4gbWF0Y2gJc2ltdWxhT3BlcmF0b3IJCSJcPG9yXChcc1wrZWxzZVwpXD1cPiIKK3N5biBtYXRjaAlzaW11bGFSZWZlcmVuY2VUeXBlCSJcPHJlZlxzKiguXHstfSkiCitzeW4gbWF0Y2gJc2ltdWxhU2VtaWNvbG9uCQkiOyIKK3N5biBtYXRjaAlzaW11bGFTcGVjaWFsCQkiWygpLC5dIgorc3luIG1hdGNoCXNpbXVsYVNwZWNpYWxDaGFyRXJyCSIhXGRcey00LH0hIiBjb250YWluZWQKK3N5biBtYXRjaAlzaW11bGFTcGVjaWFsQ2hhckVycgkiISEiIGNvbnRhaW5lZAorc3luIG1hdGNoCXNpbXVsYVNwZWNpYWxDaGFyCSIhXGRcey19ISIgY29udGFpbnM9c2ltdWxhU3BlY2lhbENoYXJFcnIgY29udGFpbmVkCitzeW4gbWF0Y2gJc2ltdWxhVG9kbwkJInh4eFwrIiBjb250YWluZWQKKworIiBJbnRlZ2VyIG51bWJlciAob3IgZmxvYXQgd2l0aG91dCBgLicpCitzeW4gbWF0Y2gJc2ltdWxhTnVtYmVyCQkiLVw9XDxcZFwrXD4iCisiIFJlYWwgd2l0aCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoCXNpbXVsYVJlYWwJCSItXD1cPFxkXCtcKFwuXGRcK1wpXD1cKCYmXD1bKy1dXD1cZFwrXClcPVw+IgorIiBSZWFsIHN0YXJ0aW5nIHdpdGggYSBgLicsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2gJc2ltdWxhUmVhbAkJIi1cPVwuXGRcK1woJiZcPVsrLV1cPVxkXCtcKVw9XD4iCisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zaW11bGFfc3ludGF4X2luaXRzIikKKyAgICBpZiB2ZXJzaW9uIDwgNTA4CisJbGV0IGRpZF9zaW11bGFfc3ludGF4X2luaXRzID0gMQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgICAgZWxzZQorCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgIGVuZGlmCisKKyAgICBIaUxpbmsgc2ltdWxhQXNzaWduZWQJCUlkZW50aWZpZXIKKyAgICBIaUxpbmsgc2ltdWxhQm9vbGVhbgkJQm9vbGVhbgorICAgIEhpTGluayBzaW11bGFDaGFyYWN0ZXIJCUNoYXJhY3RlcgorICAgIEhpTGluayBzaW11bGFDaGFyRXJyb3IJCUVycm9yCisgICAgSGlMaW5rIHNpbXVsYUNvbW1lbnQJCUNvbW1lbnQKKyAgICBIaUxpbmsgc2ltdWxhQ29tcG91bmQJCVN0YXRlbWVudAorICAgIEhpTGluayBzaW11bGFDb25kaXRpb25hbAkJQ29uZGl0aW9uYWwKKyAgICBIaUxpbmsgc2ltdWxhQ29uc3RhbnQJCUNvbnN0YW50CisgICAgSGlMaW5rIHNpbXVsYUZ1bmN0aW9uCQlGdW5jdGlvbgorICAgIEhpTGluayBzaW11bGFOdW1iZXIJCQlOdW1iZXIKKyAgICBIaUxpbmsgc2ltdWxhT3BlcmF0b3IJCU9wZXJhdG9yCisgICAgSGlMaW5rIHNpbXVsYVJlYWwJCQlGbG9hdAorICAgIEhpTGluayBzaW11bGFSZWZlcmVuY2VUeXBlCQlUeXBlCisgICAgSGlMaW5rIHNpbXVsYVJlcGVhdAkJCVJlcGVhdAorICAgIEhpTGluayBzaW11bGFSZXNlcnZlZAkJRXJyb3IKKyAgICBIaUxpbmsgc2ltdWxhU2VtaWNvbG9uCQlTdGF0ZW1lbnQKKyAgICBIaUxpbmsgc2ltdWxhU3BlY2lhbAkJU3BlY2lhbAorICAgIEhpTGluayBzaW11bGFTcGVjaWFsQ2hhcgkJU3BlY2lhbENoYXIKKyAgICBIaUxpbmsgc2ltdWxhU3BlY2lhbENoYXJFcnIJCUVycm9yCisgICAgSGlMaW5rIHNpbXVsYVN0YXRlbWVudAkJU3RhdGVtZW50CisgICAgSGlMaW5rIHNpbXVsYVN0b3JhZ2VDbGFzcwkJU3RvcmFnZUNsYXNzCisgICAgSGlMaW5rIHNpbXVsYVN0cmluZwkJCVN0cmluZworICAgIEhpTGluayBzaW11bGFTdHJ1Y3R1cmUJCVN0cnVjdHVyZQorICAgIEhpTGluayBzaW11bGFUb2RvCQkJVG9kbworICAgIEhpTGluayBzaW11bGFUeXBlCQkJVHlwZQorCisgICAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNpbXVsYSIKKyIgdmltOiBzdHM9NCBzdz00IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NpbmRhLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NpbmRhLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmRlMjY3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc2luZGEudmltCkBAIC0wLDAgKzEsMTQ2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIHNpbmRhODUsIHNpbmRhL2ZsdWludCBpbnB1dCBmaWxlCisiIE1haW50YWluZXI6ICAgQWRyaWFuIE5hZ2xlLCBhbmFnbGVAYmFsbC5jb20KKyIgTGFzdCBDaGFuZ2U6ICAyMDAzIE1heSAxMQorIiBGaWxlbmFtZXM6ICAgICouc2luCisiIFVSTDoJCWh0dHA6Ly93d3cubmFnbGVuZXQub3JnL3ZpbS9zeW50YXgvc2luZGEudmltCisiIE1BSU4gVVJMOiAgICAgaHR0cDovL3d3dy5uYWdsZW5ldC5vcmcvdmltLworCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisKKworIiBJZ25vcmUgY2FzZQorc3luIGNhc2UgaWdub3JlCisKKworCisiCisiCisiIEJlZ2luIHN5bnRheCBkZWZpbml0aW9ucyBmb3Igc2luZGEgaW5wdXQgYW5kIG91dHB1dCBmaWxlcy4KKyIKKworIiBGb3JjZSBmcmVlLWZvcm0gZm9ydHJhbiBmb3JtYXQKK2xldCBmb3J0cmFuX2ZyZWVfc291cmNlPTEKKworIiBMb2FkIEZPUlRSQU4gc3ludGF4IGZpbGUKK2lmIHZlcnNpb24gPCA2MDAKKyAgc291cmNlIDxzZmlsZT46cDpoL2ZvcnRyYW4udmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9mb3J0cmFuLnZpbQorZW5kaWYKK3VubGV0IGI6Y3VycmVudF9zeW50YXgKKworCisKKyIgRGVmaW5lIGtleXdvcmRzIGZvciBTSU5EQQorc3luIGtleXdvcmQgc2luZGFNYWNybyAgICBCVUlMRCBCVUlMREYgREVCT04gREVCT0ZGIERFRk1PRCBGU1RBUlQgRlNUT1AKKworc3luIGtleXdvcmQgc2luZGFPcHRpb25zICBUSVRMRSBQUFNBVkUgUlNJIFJTTyBPVVRQVVQgU0FWRSBRTUFQIFVTRVIxIFVTRVIyCitzeW4ga2V5d29yZCBzaW5kYU9wdGlvbnMgIE1PREVMIFBQT1VUIE5PTElTVCBNTElORSBOT0RFQlVHIERJUkVDVE9SSUVTCitzeW4ga2V5d29yZCBzaW5kYU9wdGlvbnMgIERPVUJMRVBSCisKK3N5biBrZXl3b3JkIHNpbmRhUm91dGluZSAgRk9SV1JEIEZXREJDSyBTVERTVEwgRkFTVElDCisKK3N5biBrZXl3b3JkIHNpbmRhQ29udHJvbCAgQUJTWlJPIEFDQ0VMWCBBQ0NFTFkgQUNDRUxaIEFSTFhDQSBBVE1QQ0EKK3N5biBrZXl3b3JkIHNpbmRhQ29udHJvbCAgQkFDS1VQIENTR0ZBQyBEUkxYQ0EgRFRJTUVIIERUSU1FSSBEVElNRUwKK3N5biBrZXl3b3JkIHNpbmRhQ29udHJvbCAgRFRJTUVTIERUTVBDQSBFQkFMTkEgRUJBTFNBIEVYVExJTSBJVEVST1QKK3N5biBrZXl3b3JkIHNpbmRhQ29udHJvbCAgSVRFUlhUIElUSE9MRCBOTE9PUFMgTkxPT1BUIE9VVFBVVCBPUEVJVFIKK3N5biBrZXl3b3JkIHNpbmRhQ29udHJvbCAgUEFUTU9TIFNJR01BIFRJTUVPIFRJTUVORCBVSUQKKworc3luIGtleXdvcmQgc2luZGFTdWJSb3V0aW5lICBBU0tFUlMgQURBUklOIEFEREFSWSBBRERNT0QgQVJJTkRWCitzeW4ga2V5d29yZCBzaW5kYVN1YlJvdXRpbmUgIFJZSU5WIEFSWU1QWSBBUllTVUIgQVJZVFJOIEJBUk9DCitzeW4ga2V5d29yZCBzaW5kYVN1YlJvdXRpbmUgIEJFTEFDQyBCTkREUlYgQk5ER0VUIENIRU5OQiBDSEdGTEQKK3N5biBrZXl3b3JkIHNpbmRhU3ViUm91dGluZSAgQ0hHTE1QIENIR1NVQyBDSEdWT0wgQ0hLQ0hMIENIS0NIUAorc3luIGtleXdvcmQgc2luZGFTdWJSb3V0aW5lICBDTlNUQUIgQ09NQkFMIENPTVBMUSBDT01QUlMgQ09OVFJOCitzeW4ga2V5d29yZCBzaW5kYVN1YlJvdXRpbmUgIENQUklOVCBDUkFTSCBDUlZJTlQgQ1JZVFJOIENTSUZMWAorc3luIGtleXdvcmQgc2luZGFTdWJSb3V0aW5lICBDVlRFTVAgRDExQ1lMIEMxMURBSSBEMTFESU0gRDExTUNZCitzeW4ga2V5d29yZCBzaW5kYVN1YlJvdXRpbmUgIEQxMU1EQSBEMTFNREkgRDExTURUIEQxMkNZTCBEMTJNQ1kKK3N5biBrZXl3b3JkIHNpbmRhU3ViUm91dGluZSAgRDEyTURBIEQxRDFEQSBEMUQxSU0gRDFEMVdNIEQxRDJEQQorc3luIGtleXdvcmQgc2luZGFTdWJSb3V0aW5lICBEMUQyV00gRDFERUcxIEQxREVHMiBEMURHMUkgRDFJTUQxCitzeW4ga2V5d29yZCBzaW5kYVN1YlJvdXRpbmUgIEQxSU1JTSBEMUlNV00gRDFNMURBIEQxTTJNRCBEMU0yV00KK3N5biBrZXl3b3JkIHNpbmRhU3ViUm91dGluZSAgRDFNREcxIEQxTURHMiBEMkQxV00gRDFERUcxIEQyREVHMgorc3luIGtleXdvcmQgc2luZGFTdWJSb3V0aW5lICBEMkQyCisKK3N5biBrZXl3b3JkIHNpbmRhSWRlbnRpZmllciAgQklWIENBTCBESU0gRElWIERQTSBEUFYgRFRWIEdFTiBQRVIgUElWIFBJTQorc3luIGtleXdvcmQgc2luZGFJZGVudGlmaWVyICBTSU0gU0lWIFNQTSBTUFYgVFZTIFRWRAorCisKKworIiBEZWZpbmUgbWF0Y2hlcyBmb3IgU0lOREEKK3N5biBtYXRjaCAgc2luZGFGb3J0cmFuICAgICAiXkZbMC05IF0ibWU9ZS0xCitzeW4gbWF0Y2ggIHNpbmRhTW90cmFuICAgICAgIl5NWzAtOSBdIm1lPWUtMQorCitzeW4gbWF0Y2ggIHNpbmRhQ29tbWVudCAgICAgIl5DLiokIgorc3luIG1hdGNoICBzaW5kYUNvbW1lbnQgICAgICJeUi4qJCIKK3N5biBtYXRjaCAgc2luZGFDb21tZW50ICAgICAiXCQuKiQiCisKK3N5biBtYXRjaCAgc2luZGFIZWFkZXIgICAgICAiXmhlYWRlclteLF0qIgorCitzeW4gbWF0Y2ggIHNpbmRhSW5jbHVkZUZpbGUgImluY2x1ZGUgXCtbXiBdXCsiaHM9cys4IGNvbnRhaW5zPWZvcnRyYW5JbmNsdWRlCisKK3N5biBtYXRjaCAgc2luZGFNYWNybyAgICAgICAiXlBTVEFSVCIKK3N5biBtYXRjaCAgc2luZGFNYWNybyAgICAgICAiXlBTVE9QIgorc3luIG1hdGNoICBzaW5kYU1hY3JvICAgICAgICJeRkFDIgorCitzeW4gbWF0Y2ggIHNpbmRhSW50ZWdlciAgICAgIi1cPVw8WzAtOV0qXD4iCitzeW4gbWF0Y2ggIHNpbmRhRmxvYXQgICAgICAgIi1cPVw8WzAtOV0qXC5bMC05XSoiCitzeW4gbWF0Y2ggIHNpbmRhU2NpZW50aWZpYyAgIi1cPVw8WzAtOV0qXC5bMC05XSpFWy0rXVw9WzAtOV1cK1w+IgorCitzeW4gbWF0Y2ggIHNpbmRhRW5kRGF0YQkJICJeRU5EIE9GIERBVEEiCisKK2lmIGV4aXN0cygidGhlcm1hbF90b2RvIikKKyAgZXhlY3V0ZSAnc3luIG1hdGNoICBzaW5kYVRvZG8gJyAuICciXicudGhlcm1hbF90b2RvLicuKiQiJworZWxzZQorICBzeW4gbWF0Y2ggIHNpbmRhVG9kbyAgICAgIl4/LiokIgorZW5kaWYKKworCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc2luZGFfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc2luZGFfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc2luZGFNYWNybwkJTWFjcm8KKyAgSGlMaW5rIHNpbmRhT3B0aW9ucwkJU3BlY2lhbAorICBIaUxpbmsgc2luZGFSb3V0aW5lCQlUeXBlCisgIEhpTGluayBzaW5kYUNvbnRyb2wJCVNwZWNpYWwKKyAgSGlMaW5rIHNpbmRhU3ViUm91dGluZQlGdW5jdGlvbgorICBIaUxpbmsgc2luZGFJZGVudGlmaWVyCUlkZW50aWZpZXIKKworICBIaUxpbmsgc2luZGFGb3J0cmFuCQlQcmVQcm9jCisgIEhpTGluayBzaW5kYU1vdHJhbgkJUHJlUHJvYworCisgIEhpTGluayBzaW5kYUNvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHNpbmRhSGVhZGVyCQlUeXBlZGVmCisgIEhpTGluayBzaW5kYUluY2x1ZGVGaWxlCVR5cGUKKyAgSGlMaW5rIHNpbmRhSW50ZWdlcgkJTnVtYmVyCisgIEhpTGluayBzaW5kYUZsb2F0CQlGbG9hdAorICBIaUxpbmsgc2luZGFTY2llbnRpZmljCUZsb2F0CisKKyAgSGlMaW5rIHNpbmRhRW5kRGF0YQkJTWFjcm8KKworICBIaUxpbmsgc2luZGFUb2RvCQlUb2RvCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic2luZGEiCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NpbmRhY21wLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NpbmRhY21wLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2I0ODM0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc2luZGFjbXAudmltCkBAIC0wLDAgKzEsNzQgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgc2luZGE4NSwgc2luZGEvZmx1aW50IGNvbXBhcmUgZmlsZQorIiBNYWludGFpbmVyOiAgIEFkcmlhbiBOYWdsZSwgYW5hZ2xlQGJhbGwuY29tCisiIExhc3QgQ2hhbmdlOiAgMjAwMyBNYXkgMTEKKyIgRmlsZW5hbWVzOiAgICAqLmNtcAorIiBVUkw6CQlodHRwOi8vd3d3Lm5hZ2xlbmV0Lm9yZy92aW0vc3ludGF4L3NpbmRhY21wLnZpbQorIiBNQUlOIFVSTDogICAgIGh0dHA6Ly93d3cubmFnbGVuZXQub3JnL3ZpbS8KKworCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworCisKKyIgSWdub3JlIGNhc2UKK3N5biBjYXNlIGlnbm9yZQorCisKKworIgorIiBCZWdpbiBzeW50YXggZGVmaW5pdGlvbnMgZm9yIGNvbXBhcmUgZmlsZXMuCisiCisKKyIgRGVmaW5lIGtleXdvcmRzIGZvciBzaW5kYSBjb21wYXJlIChzaW5jb21wKQorc3luIGtleXdvcmQgc2luZGFjbXBVbml0ICAgICBjZWxzaXVzIGZhaHJlbmhlaXQKKworCisKKyIgRGVmaW5lIG1hdGNoZXMgZm9yIHNpbmRhIGNvbXBhcmUgKHNpbmNvbXApCitzeW4gbWF0Y2ggIHNpbmRhY21wVGl0bGUgICAgICAgIlN0ZWFkeSBTdGF0ZSBUZW1wZXJhdHVyZSBDb21wYXJpc29uIgorCitzeW4gbWF0Y2ggIHNpbmRhY21wTGFiZWwgICAgICAgIkZpbGUgIFsxLTZdIGlzIgorCitzeW4gbWF0Y2ggIHNpbmRhY21wSGVhZGVyICAgICAgIl4gKk5vZGVcKCAqRmlsZSAgXGRcKSogKk5vZGUgRGVzY3JpcHRpb24iCisKK3N5biBtYXRjaCAgc2luZGFjbXBJbnRlZ2VyICAgICAiXiAqLVw9XDxbMC05XSpcPiIKK3N5biBtYXRjaCAgc2luZGFjbXBGbG9hdCAgICAgICAiLVw9XDxbMC05XSpcLlswLTldKiIKKworCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc2luZGFjbXBfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc2luZGFjbXBfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc2luZGFjbXBUaXRsZQkJICAgICBUeXBlCisgIEhpTGluayBzaW5kYWNtcFVuaXQJCSAgICAgUHJlUHJvYworCisgIEhpTGluayBzaW5kYWNtcExhYmVsCQkgICAgIFN0YXRlbWVudAorCisgIEhpTGluayBzaW5kYWNtcEhlYWRlcgkJICAgICBzaW5kYUhlYWRlcgorCisgIEhpTGluayBzaW5kYWNtcEludGVnZXIJICAgICBOdW1iZXIKKyAgSGlMaW5rIHNpbmRhY21wRmxvYXQJCSAgICAgU3BlY2lhbAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNpbmRhY21wIgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zaW5kYW91dC52aW0gYi9ydW50aW1lL3N5bnRheC9zaW5kYW91dC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1N2UwMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NpbmRhb3V0LnZpbQpAQCAtMCwwICsxLDEwMCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBzaW5kYTg1LCBzaW5kYS9mbHVpbnQgb3V0cHV0IGZpbGUKKyIgTWFpbnRhaW5lcjogICBBZHJpYW4gTmFnbGUsIGFuYWdsZUBiYWxsLmNvbQorIiBMYXN0IENoYW5nZTogIDIwMDMgTWF5IDExCisiIEZpbGVuYW1lczogICAgKi5vdXQKKyIgVVJMOgkJaHR0cDovL3d3dy5uYWdsZW5ldC5vcmcvdmltL3N5bnRheC9zaW5kYW91dC52aW0KKyIgTUFJTiBVUkw6ICAgICBodHRwOi8vd3d3Lm5hZ2xlbmV0Lm9yZy92aW0vCisKKworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKworCisiIElnbm9yZSBjYXNlCitzeW4gY2FzZSBtYXRjaAorCisKKworIiBMb2FkIFNJTkRBIHN5bnRheCBmaWxlCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9zaW5kYS52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L3NpbmRhLnZpbQorZW5kaWYKK3VubGV0IGI6Y3VycmVudF9zeW50YXgKKworCisKKyIKKyIKKyIgQmVnaW4gc3ludGF4IGRlZmluaXRpb25zIGZvciBzaW5kYSBvdXRwdXQgZmlsZXMuCisiCisKKyIgRGVmaW5lIGtleXdvcmRzIGZvciBzaW5kYSBvdXRwdXQKK3N5biBjYXNlIG1hdGNoCisKK3N5biBrZXl3b3JkIHNpbmRhb3V0UG9zICAgICAgIE9OIFNJCitzeW4ga2V5d29yZCBzaW5kYW91dE5lZyAgICAgICBPRkYgRU5HCisKKworCisiIERlZmluZSBtYXRjaGVzIGZvciBzaW5kYSBvdXRwdXQKK3N5biBtYXRjaCBzaW5kYW91dEZpbGUJICAgICAgICI6IFx3KlwuVEFLImhzPXMrMgorCitzeW4gbWF0Y2ggc2luZGFvdXRJbnRlZ2VyICAgICAgIlRcPVswLTldKlw+Im1zPXMrMQorCitzeW4gbWF0Y2ggc2luZGFvdXRTZWN0aW9uRGVsaW0gIlstPD5dXHs0LH0iIGNvbnRhaW5zPXNpbmRhb3V0U2VjdGlvblRpdGxlCitzeW4gbWF0Y2ggc2luZGFvdXRTZWN0aW9uRGVsaW0gIjpcPVwuXHs0LH06XD0iIGNvbnRhaW5zPXNpbmRhb3V0U2VjdGlvblRpdGxlCitzeW4gbWF0Y2ggc2luZGFvdXRTZWN0aW9uVGl0bGUgIlstPDpdIFx3WzAtOUEtWmEtel8oKSBdXCsgWy0+Ol0iaHM9cysxLG1lPWUtMQorCitzeW4gbWF0Y2ggc2luZGFvdXRIZWFkZXJEZWxpbSAgIj1cezUsfSIKK3N5biBtYXRjaCBzaW5kYW91dEhlYWRlckRlbGltICAifFx7NSx9Igorc3luIG1hdGNoIHNpbmRhb3V0SGVhZGVyRGVsaW0gICIrXHs1LH0iCisKK3N5biBtYXRjaCBzaW5kYW91dExhYmVsCQkiSW5wdXQgRmlsZToiIGNvbnRhaW5zPXNpbmRhb3V0RmlsZQorc3luIG1hdGNoIHNpbmRhb3V0TGFiZWwJCSJCZWdpbiBTb2x1dGlvbjogUm91dGluZSIKKworc3luIG1hdGNoIHNpbmRhb3V0RXJyb3IJCSI8PDwgRXJyb3IgPj4+IgorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc2luZGFvdXRfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc2luZGFvdXRfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBoaSBzaW5kYUhlYWRlckRlbGltICBjdGVybWZnPUJsYWNrIGN0ZXJtYmc9R3JlZW4JICAgICAgIGd1aWZnPUJsYWNrIGd1aWJnPUdyZWVuCisKKyAgSGlMaW5rIHNpbmRhb3V0UG9zCQkgICAgIFN0YXRlbWVudAorICBIaUxpbmsgc2luZGFvdXROZWcJCSAgICAgUHJlUHJvYworICBIaUxpbmsgc2luZGFvdXRUaXRsZQkJICAgICBUeXBlCisgIEhpTGluayBzaW5kYW91dEZpbGUJCSAgICAgc2luZGFJbmNsdWRlRmlsZQorICBIaUxpbmsgc2luZGFvdXRJbnRlZ2VyCSAgICAgc2luZGFJbnRlZ2VyCisKKyAgSGlMaW5rIHNpbmRhb3V0U2VjdGlvbkRlbGltCSAgICAgIERlbGltaXRlcgorICBIaUxpbmsgc2luZGFvdXRTZWN0aW9uVGl0bGUJICAgICBFeGNlcHRpb24KKyAgSGlMaW5rIHNpbmRhb3V0SGVhZGVyRGVsaW0JICAgICBTcGVjaWFsQ29tbWVudAorICBIaUxpbmsgc2luZGFvdXRMYWJlbAkJICAgICBJZGVudGlmaWVyCisKKyAgSGlMaW5rIHNpbmRhb3V0RXJyb3IJCSAgICAgRXJyb3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzaW5kYW91dCIKKworIiB2aW06IHRzPTggc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc2tpbGwudmltIGIvcnVudGltZS9zeW50YXgvc2tpbGwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTYwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9za2lsbC52aW0KQEAgLTAsMCArMSw1NjIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkJU0tJTEwKKyIgTWFpbnRhaW5lcjoJVG9ieSBTY2hhZmZlciA8anRzY2hhZmZAZW9zLm5jc3UuZWR1PgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMTEKKyIgQ29tbWVudHM6CQlTS0lMTCBpcyBhIExpc3AtbGlrZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBmb3IgdXNlIGluIEVEQQorIgkJCQl0b29scyBmcm9tIENhZGVuY2UgRGVzaWduIFN5c3RlbXMuIEl0IGFsbG93cyB5b3UgdG8gaGF2ZQorIgkJCQlhIHByb2dyYW1taW5nIGVudmlyb25tZW50IHdpdGhpbiB0aGUgQ2FkZW5jZSBlbnZpcm9ubWVudAorIgkJCQl0aGF0IGdpdmVzIHlvdSBhY2Nlc3MgdG8gdGhlIGNvbXBsZXRlIHRvb2wgc2V0IGFuZCBkZXNpZ24KKyIJCQkJZGF0YWJhc2UuIFRoaXMgZmlsZSBhbHNvIGRlZmluZXMgc3ludGF4IGhpZ2hsaWdodGluZyBmb3IKKyIJCQkJY2VydGFpbiBEZXNpZ24gRnJhbWV3b3JrIElJIGludGVyZmFjZSBmdW5jdGlvbnMuCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGtleXdvcmQgc2tpbGxDb25zdGFudHMJCQl0IG5pbCB1bmJvdW5kCisKKyIgZW51bWVyYXRlIGFsbCB0aGUgU0tJTEwgcmVzZXJ2ZWQgd29yZHMvZnVuY3Rpb25zCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihhYnNcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxhYnMoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoYVw9Y29zXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8YVw9Y29zKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGFkZDFcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxhZGQxKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGFkZERlZnN0cnVjdENsYXNzXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8YWRkRGVmc3RydWN0Q2xhc3MoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoYWxpYXNcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxhbGlhcygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihhbHBoYWxlc3NwXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8YWxwaGFsZXNzcCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihhbHBoYU51bUNtcFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGFscGhhTnVtQ21wKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGFwcGVuZDFcPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGFwcGVuZDFcPSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihhcHBseVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGFwcGx5KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGFycmF5cFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGFycmF5cCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihhcnJheXJlZlw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGFycmF5cmVmKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGFcPXNpblw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGFcPXNpbigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihhc3NvY1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGFzc29jKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGFzc1txdl1cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxhc3NbcXZdKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGFcPXRhblw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGFcPXRhbigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihhdG9bZmltXVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGF0b1tmaW1dKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGJjZHBcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxiY2RwKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiKGJlZ2luXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxLZXl3b3JkcyAgICAgIlw8YmVnaW4oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoYm9vbGVhbnBcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxib29sZWFucCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihib3VuZHBcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxib3VuZHAoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoYnVpbGRTdHJpbmdcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxidWlsZFN0cmluZygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihjW2FkXXsxLDN9clw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGNbYWRdezEsM31yKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbENvbmRpdGlvbmFsICAiKGNhc2VxXD1cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbENvbmRpdGlvbmFsICAiXDxjYXNlcVw9KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGNlaWxpbmdcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxjZWlsaW5nKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGNoYW5nZVdvcmtpbmdEaXJcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxjaGFuZ2VXb3JraW5nRGlyKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGNoYXJUb0ludFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGNoYXJUb0ludCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihjbGVhckV4aXRQcm9jc1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGNsZWFyRXhpdFByb2NzKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGNsb3NlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Y2xvc2UoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoY29tcGFyZVRpbWVcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxjb21wYXJlVGltZSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihjb21wcmVzc1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGNvbXByZXNzKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGNvbmNhdFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGNvbmNhdCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxDb25kaXRpb25hbCAgIihjb25kXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxDb25kaXRpb25hbCAgIlw8Y29uZCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihjb25zXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Y29ucygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihjb3B5XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Y29weSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihjb3B5RGVmc3RydWN0RGVlcFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGNvcHlEZWZzdHJ1Y3REZWVwKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGNyZWF0ZURpclw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGNyZWF0ZURpcigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihjc2hcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxjc2goImhlPWUtMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICIoZGVjbGFyZVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICJcPGRlY2xhcmUoImhlPWUtMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICIoZGVjbGFyZVwoTlx8U1FOXClcPUxhbWJkYVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICJcPGRlY2xhcmVcKE5cfFNRTlwpXD1MYW1iZGEoImhlPWUtMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICIoZGVmbWFjcm9cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiXDxkZWZtYWNybygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxLZXl3b3JkcyAgICAgIihkZWZwcm9wXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxLZXl3b3JkcyAgICAgIlw8ZGVmcHJvcCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxLZXl3b3JkcyAgICAgIihkZWZzdHJ1Y3RcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiXDxkZWZzdHJ1Y3QoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZGVmc3RydWN0cFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGRlZnN0cnVjdHAoImhlPWUtMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICIoZGVmdW5cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiXDxkZWZ1bigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxLZXl3b3JkcyAgICAgIihkZWZVc2VySW5pdFByb2NcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiXDxkZWZVc2VySW5pdFByb2MoImhlPWUtMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICIoZGVmdmFyXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxLZXl3b3JkcyAgICAgIlw8ZGVmdmFyKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGRlbGV0ZVwoRGlyXHxGaWxlXClcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiXDxkZWxldGVcKERpclx8RmlsZVwpKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGRpc3BsYXlcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxkaXNwbGF5KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGRyYWluXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8ZHJhaW4oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZHRwclw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGR0cHIoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZWRcKGlcfGxcfGl0XClcPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGVkXChpXHxsXHxpdFwpXD0oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZW52b2JqXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8ZW52b2JqKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGVxdWFsXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8ZXF1YWwoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZXF2XD1cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxlcXZcPSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihlcnJcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxlcnIoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZXJyb3JcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxlcnJvcigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihlcnJzZXRcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxlcnJzZXQoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZXJyc2V0c3RyaW5nXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8ZXJyc2V0c3RyaW5nKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGV2YWxcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxldmFsKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGV2YWxzdHJpbmdcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxldmFsc3RyaW5nKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGV2ZW5wXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8ZXZlbnAoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZXhpc3RzXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8ZXhpc3RzKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGV4aXRcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxleGl0KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGV4cFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGV4cCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihleHBhbmRNYWNyb1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGV4cGFuZE1hY3JvKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGZpbGVcKExlbmd0aFx8U2Vla1x8VGVsbFx8VGltZU1vZGlmaWVkXClcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxmaWxlXChMZW5ndGhcfFNlZWtcfFRlbGxcfFRpbWVNb2RpZmllZFwpKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGZpeHBcPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGZpeHBcPSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihmbG9hdHBcPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGZsb2F0cFw9KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGZsb29yXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Zmxvb3IoImhlPWUtMQorc3luIG1hdGNoIHNraWxsUmVwZWF0ICAgICAgICIoZm9yXChhbGxcfGVhY2hcKVw9XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxSZXBlYXQgICAgICAgIlw8Zm9yXChhbGxcfGVhY2hcKVw9KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKFtmc11cPXByaW50Zlw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPFtmc11cPXByaW50ZigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihmXD1zY2FuZlw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGZcPXNjYW5mKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGZ1bm9ialw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGZ1bm9iaigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihnY1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGdjKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGdlbnN5bVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGdlbnN5bSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihnZXRcKF9wbmFtZVx8X3N0cmluZ1wpXD1cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxnZXRcKF9wbmFtZVx8X3N0cmluZ1wpXD0oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZ2V0Y1woaGFyXClcPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGdldGNcKGhhclwpXD0oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZ2V0Q3VycmVudFRpbWVcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxnZXRDdXJyZW50VGltZSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihnZXRkXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Z2V0ZCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihnZXREaXJGaWxlc1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGdldERpckZpbGVzKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGdldEZuV3JpdGVQcm90ZWN0XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Z2V0Rm5Xcml0ZVByb3RlY3QoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZ2V0UnVuVHlwZVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGdldFJ1blR5cGUoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoZ2V0SW5zdGFsbFBhdGhcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxnZXRJbnN0YWxsUGF0aCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihnZXRxcVw9XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Z2V0cXFcPSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihnZXRzXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Z2V0cygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihnZXRTaGVsbEVudlZhclw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGdldFNoZWxsRW52VmFyKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGdldFNraWxsXChQYXRoXHxWZXJzaW9uXClcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxnZXRTa2lsbFwoUGF0aFx8VmVyc2lvblwpKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGdldFZhcldyaXRlUHJvdGVjdFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGdldFZhcldyaXRlUHJvdGVjdCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihnZXRWZXJzaW9uXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Z2V0VmVyc2lvbigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihnZXRXYXJuXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Z2V0V2FybigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihnZXRXb3JraW5nRGlyXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8Z2V0V29ya2luZ0RpcigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxSZXBlYXQgICAgICAgIihnb1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsUmVwZWF0ICAgICAgICJcPGdvKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbENvbmRpdGlvbmFsICAiKGlmXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxDb25kaXRpb25hbCAgIlw8aWYoImhlPWUtMQorc3luIGtleXdvcmQgc2tpbGxDb25kaXRpb25hbCB0aGVuIGVsc2UKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGluZGV4XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8aW5kZXgoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoaW5maWxlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8aW5maWxlKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGlucG9ydHBcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxpbnBvcnRwKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGluXChTY2hlbWVcfFNraWxsXClcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxpblwoU2NoZW1lXHxTa2lsbFwpKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGluc3RyaW5nXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8aW5zdHJpbmcoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoaW50ZWdlcnBcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxpbnRlZ2VycCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihpbnRUb0NoYXJcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxpbnRUb0NoYXIoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoaXNcKENhbGxhYmxlXHxEaXJcfEV4ZWN1dGFibGVcfEZpbGVcfEZpbGVFbmNyeXB0ZWRcfEZpbGVOYW1lXHxMaW5rXHxNYWNyb1x8V3JpdGFibGVcKVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGlzXChDYWxsYWJsZVx8RGlyXHxFeGVjdXRhYmxlXHxGaWxlXHxGaWxlRW5jcnlwdGVkXHxGaWxlTmFtZVx8TGlua1x8TWFjcm9cfFdyaXRhYmxlXCkoImhlPWUtMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICIoblw9bGFtYmRhXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxLZXl3b3JkcyAgICAgIlw8blw9bGFtYmRhKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiKGxhc3RcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiXDxsYXN0KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGxjb25jXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bGNvbmMoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIobGVuZ3RoXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bGVuZ3RoKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiKGxldFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICJcPGxldCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihsaW5lcmVhZFwoc3RyaW5nXClcPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGxpbmVyZWFkXChzdHJpbmdcKVw9KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiKGxpc3RcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiXDxsaXN0KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGxpc3RwXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bGlzdHAoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIobGlzdFRvVmVjdG9yXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bGlzdFRvVmVjdG9yKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGxvYWRpXD1cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxsb2FkaVw9KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGxvYWRzdHJpbmdcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxsb2Fkc3RyaW5nKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKGxvZ1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPGxvZygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihsb3dlckNhc2VcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxsb3dlckNhc2UoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIobWFrZVRhYmxlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bWFrZVRhYmxlKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKG1ha2VUZW1wRmlsZU5hbWVcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxtYWtlVGVtcEZpbGVOYW1lKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKG1ha2VWZWN0b3JcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxtYWtlVmVjdG9yKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKG1hcFwoY1x8Y2FuXHxjYXJcfGxpc3RcKVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPG1hcFwoY1x8Y2FuXHxjYXJcfGxpc3RcKSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihtYXhcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxtYXgoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIobWVhc3VyZVRpbWVcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxtZWFzdXJlVGltZSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihtZW1iZXJcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxtZW1iZXIoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIobWVtW3F2XVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPG1lbVtxdl0oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIobWluXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bWluKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKG1pbnVzcFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPG1pbnVzcCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihtb2RcKHVsb1wpXD1cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxtb2RcKHVsb1wpXD0oImhlPWUtMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICIoW21uXVw9cHJvY2VkdXJlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxLZXl3b3JkcyAgICAgIlw8W21uXVw9cHJvY2VkdXJlKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKG5jb25bY3NdXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bmNvbltjc10oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIobmVlZE5DZWxsc1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPG5lZWROQ2VsbHMoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIobmVnYXRpdmVwXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bmVnYXRpdmVwKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKG5lcVwodWFsXClcPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPG5lcVwodWFsXClcPSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihuZXdsaW5lXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bmV3bGluZSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihuaW5kZXhcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxuaW5kZXgoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIobm90XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bm90KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKG50aFwoY2RyXHxlbGVtXClcPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPG50aFwoY2RyXHxlbGVtXClcPSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihudWxsXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bnVsbCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihudW1iZXJwXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8bnVtYmVycCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihudW1PcGVuRmlsZXNcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxudW1PcGVuRmlsZXMoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIob2RkcFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPG9kZHAoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIob25lcFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPG9uZXAoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIob3RoZXJwXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8b3RoZXJwKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKG91dGZpbGVcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxvdXRmaWxlKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKG91dHBvcnRwXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8b3V0cG9ydHAoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIocGFpcnBcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxwYWlycCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihwYXJzZVN0cmluZ1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHBhcnNlU3RyaW5nKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHBsaXN0XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cGxpc3QoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIocGx1c3BcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxwbHVzcCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihwb3J0cFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHBvcnRwKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHBcPXByaW50XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cFw9cHJpbnQoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIocHJlcGVuZEluc3RhbGxQYXRoXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cHJlcGVuZEluc3RhbGxQYXRoKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHByaW50bFwoZXZcfG5cKVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHByaW50bFwoZXZcfG5cKSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihwcm9jZWR1cmVwXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cHJvY2VkdXJlcCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxLZXl3b3JkcyAgICAgIihwcm9nWzEybl1cPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICJcPHByb2dbMTJuXVw9KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHB1dGRcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxwdXRkKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHB1dHByb3BxXHssMn1cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxwdXRwcm9wcVx7LDJ9KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHJhbmRvbVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHJhbmRvbSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyZWFkXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmVhZCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyZWFkU3RyaW5nXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmVhZFN0cmluZygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyZWFkVGFibGVcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxyZWFkVGFibGUoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIocmVhbHBcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxyZWFscCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyZWdFeGl0XChBZnRlclx8QmVmb3JlXClcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxyZWdFeGl0XChBZnRlclx8QmVmb3JlXCkoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIocmVtYWluZGVyXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmVtYWluZGVyKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHJlbWRxXD1cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxyZW1kcVw9KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHJlbUV4aXRQcm9jXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmVtRXhpdFByb2MoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIocmVtb3ZlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmVtb3ZlKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHJlbXByb3BcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxyZW1wcm9wKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHJlbXFcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxyZW1xKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEtleXdvcmRzICAgICAiKHJldHVyblw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsS2V5d29yZHMgICAgICJcPHJldHVybigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyZXZlcnNlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmV2ZXJzZSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyZXhDb21waWxlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmV4Q29tcGlsZSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyZXhFeGVjdXRlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmV4RXhlY3V0ZSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyZXhNYWdpY1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHJleE1hZ2ljKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHJleE1hdGNoQXNzb2NMaXN0XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmV4TWF0Y2hBc3NvY0xpc3QoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIocmV4TWF0Y2hMaXN0XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmV4TWF0Y2hMaXN0KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHJleE1hdGNocFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHJleE1hdGNocCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyZXhSZXBsYWNlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmV4UmVwbGFjZSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyZXhTdWJzdGl0dXRlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8cmV4U3Vic3RpdHV0ZSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihyaW5kZXhcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxyaW5kZXgoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIocm91bmRcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxyb3VuZCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihycGxhY1thZF1cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxycGxhY1thZF0oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc2NoZW1lVG9wTGV2ZWxFbnZcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzY2hlbWVUb3BMZXZlbEVudigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzZXRcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzZXQoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc2V0YXJyYXlcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzZXRhcnJheSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzZXRjW2FkXXJcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzZXRjW2FkXXIoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc2V0Rm5Xcml0ZVByb3RlY3RcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzZXRGbldyaXRlUHJvdGVjdCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzZXRvZlw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHNldG9mKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHNldHBsaXN0XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8c2V0cGxpc3QoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc2V0cVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHNldHEoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc2V0U2hlbGxFbnZWYXJcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzZXRTaGVsbEVudlZhcigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzZXRTa2lsbFBhdGhcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzZXRTa2lsbFBhdGgoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc2V0VmFyV3JpdGVQcm90ZWN0XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8c2V0VmFyV3JpdGVQcm90ZWN0KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHNoXChlbGxcKVw9XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8c2hcKGVsbFwpXD0oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc2ltcGxpZnlGaWxlbmFtZVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHNpbXBsaWZ5RmlsZW5hbWUoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc29ydFwoY2FyXClcPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHNvcnRcKGNhclwpXD0oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc3FydFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHNxcnQoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc3JhbmRvbVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHNyYW5kb20oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc3N0YXR1c1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHNzdGF0dXMoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc3Ryblw9Y2F0XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8c3Ryblw9Y2F0KCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHN0cm5cPWNtcFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHN0cm5cPWNtcCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzdHJpbmdwXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8c3RyaW5ncCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzdHJpbmdUb1woRnVuY3Rpb25cfFN5bWJvbFx8VGltZVwpXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8c3RyaW5nVG9cKEZ1bmN0aW9uXHxTeW1ib2xcfFRpbWVcKSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzdHJsZW5cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzdHJsZW4oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc3ViMVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHN1YjEoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc3Vic3RcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzdWJzdCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzdWJzdHJpbmdcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzdWJzdHJpbmcoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc3h0ZFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHN4dGQoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc3ltYm9scFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHN5bWJvbHAoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoc3ltYm9sVG9TdHJpbmdcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzeW1ib2xUb1N0cmluZygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzeW1ldmFsXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8c3ltZXZhbCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzeW1zdHJwXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8c3ltc3RycCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIihzeXN0ZW1cPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDxzeXN0ZW0oImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIodGFibGVwXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8dGFibGVwKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHRhYmxlVG9MaXN0XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8dGFibGVUb0xpc3QoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIodGFpbHBcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDx0YWlscCgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIih0Y29uY1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHRjb25jKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHRpbWVUb1N0cmluZ1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHRpbWVUb1N0cmluZygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIih0aW1lVG9UbVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHRpbWVUb1RtKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHRtVG9UaW1lXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8dG1Ub1RpbWUoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIodHJ1bmNhdGVcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDx0cnVuY2F0ZSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIih0eXBlcFw9XD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8dHlwZXBcPSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIih1bmFsaWFzXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8dW5hbGlhcygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxDb25kaXRpb25hbCAgIih1bmxlc3NcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbENvbmRpdGlvbmFsICAiXDx1bmxlc3MoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIodXBwZXJDYXNlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8dXBwZXJDYXNlKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHZlY3RvclwoVG9MaXN0XClcPVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHZlY3RvclwoVG9MaXN0XClcPSgiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIih3YXJuXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8d2FybigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxDb25kaXRpb25hbCAgIih3aGVuXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxDb25kaXRpb25hbCAgIlw8d2hlbigiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxSZXBlYXQgICAgICAgIih3aGlsZVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsUmVwZWF0ICAgICAgICJcPHdoaWxlKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHdyaXRlXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIlw8d3JpdGUoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIod3JpdGVUYWJsZVw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHdyaXRlVGFibGUoImhlPWUtMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICIoeGNvbnNcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDx4Y29ucygiaGU9ZS0xCitzeW4gbWF0Y2ggc2tpbGxGdW5jdGlvbiAgICAgIih6ZXJvcFw+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsRnVuY3Rpb24gICAgICJcPHplcm9wKCJoZT1lLTEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiKHp4dGRcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbEZ1bmN0aW9uICAgICAiXDx6eHRkKCJoZT1lLTEKKworIiBERklJIHByb2NlZHVyYWwgaW50ZXJmYWNlIHJvdXRpbmVzCisKKyIgQ0RGIGZ1bmN0aW9ucworc3luIG1hdGNoIHNraWxsY2RmRnVuY3Rpb25zCQkJIihjZGZcdVxhXCtcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbGNkZkZ1bmN0aW9ucwkJCSJcPGNkZlx1XGFcKygiaGU9ZS0xCisiIGdyYXBoaWMgZWRpdG9yIGZ1bmN0aW9ucworc3luIG1hdGNoIHNraWxsZ2VGdW5jdGlvbnMJCQkiKGdlXHVcYVwrXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxnZUZ1bmN0aW9ucwkJCSJcPGdlXHVcYVwrKCJoZT1lLTEKKyIgaHVtYW4gaW50ZXJmYWNlIGZ1bmN0aW9ucworc3luIG1hdGNoIHNraWxsaGlGdW5jdGlvbnMJCQkiKGhpXHVcYVwrXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxoaUZ1bmN0aW9ucwkJCSJcPGhpXHVcYVwrKCJoZT1lLTEKKyIgbGF5b3V0IGVkaXRvciBmdW5jdGlvbnMKK3N5biBtYXRjaCBza2lsbGxlRnVuY3Rpb25zCQkJIihsZVx1XGFcK1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsbGVGdW5jdGlvbnMJCQkiXDxsZVx1XGFcKygiaGU9ZS0xCisiIGRhdGFiYXNlfGRlc2lnbiBlZGl0b3J8ZGVzaWduIGZsb3cgZnVuY3Rpb25zCitzeW4gbWF0Y2ggc2tpbGxkYmVmRnVuY3Rpb25zCQkiKGRbYmVmXVx1XGFcK1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsZGJlZkZ1bmN0aW9ucwkJIlw8ZFtiZWZdXHVcYVwrKCJoZT1lLTEKKyIgZGVzaWduIG1hbmFnZW1lbnQgJiBkZXNpZ24gZGF0YSBzZXJ2aWNlcyBmdW5jdGlvbnMKK3N5biBtYXRjaCBza2lsbGRkRnVuY3Rpb25zCQkJIihkZFtzXVw9XHVcYVwrXD4iaHM9cysxCitzeW4gbWF0Y2ggc2tpbGxkZEZ1bmN0aW9ucwkJCSJcPGRkW3NdXD1cdVxhXCsoImhlPWUtMQorIiBwYXJhbWV0ZXJpemVkIGNlbGwgZnVuY3Rpb25zCitzeW4gbWF0Y2ggc2tpbGxwY0Z1bmN0aW9ucwkJCSIocGNcdVxhXCtcPiJocz1zKzEKK3N5biBtYXRjaCBza2lsbHBjRnVuY3Rpb25zCQkJIlw8cGNcdVxhXCsoImhlPWUtMQorIiB0ZWNoIGZpbGUgZnVuY3Rpb25zCitzeW4gbWF0Y2ggc2tpbGx0ZWNoRnVuY3Rpb25zCQkiKFwodGVjaFx8dGNcKVx1XGFcK1w+ImhzPXMrMQorc3luIG1hdGNoIHNraWxsdGVjaEZ1bmN0aW9ucwkJIlw8XCh0ZWNoXHx0Y1wpXHVcYVwrKCJoZT1lLTEKKworIiBzdHJpbmdzCitzeW4gcmVnaW9uIHNraWxsU3RyaW5nCQkJCXN0YXJ0PSsiKyBza2lwPStcXCIrIGVuZD0rIisKKworc3luIGtleXdvcmQgc2tpbGxUb2RvIGNvbnRhaW5lZAkJVE9ETyBGSVhNRSBYWFgKK3N5biBrZXl3b3JkIHNraWxsTm90ZSBjb250YWluZWQJCU5PVEUgSU1QT1JUQU5UCisKKyIgY29tbWVudHMgYXJlIGVpdGhlciBDLXN0eWxlIG9yIGJlZ2luIHdpdGggYSBzZW1pY29sb24KK3N5biByZWdpb24gc2tpbGxDb21tZW50CQkJCXN0YXJ0PSIvXCoiIGVuZD0iXCovIiBjb250YWlucz1za2lsbFRvZG8sc2tpbGxOb3RlCitzeW4gbWF0Y2ggc2tpbGxDb21tZW50CQkJCSI7LioiIGNvbnRhaW5zPXNraWxsVG9kbyxza2lsbE5vdGUKK3N5biBtYXRjaCBza2lsbENvbW1lbnRFcnJvcgkJCSJcKi8iCisKK3N5biBzeW5jIGNjb21tZW50IHNraWxsQ29tbWVudCBtaW5saW5lcz0xMAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9za2lsbF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9za2lsbF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisJSGlMaW5rIHNraWxsY2RmRnVuY3Rpb25zCUZ1bmN0aW9uCisJSGlMaW5rIHNraWxsZ2VGdW5jdGlvbnMJCUZ1bmN0aW9uCisJSGlMaW5rIHNraWxsaGlGdW5jdGlvbnMJCUZ1bmN0aW9uCisJSGlMaW5rIHNraWxsbGVGdW5jdGlvbnMJCUZ1bmN0aW9uCisJSGlMaW5rIHNraWxsZGJlZkZ1bmN0aW9ucwlGdW5jdGlvbgorCUhpTGluayBza2lsbGRkRnVuY3Rpb25zCQlGdW5jdGlvbgorCUhpTGluayBza2lsbHBjRnVuY3Rpb25zCQlGdW5jdGlvbgorCUhpTGluayBza2lsbHRlY2hGdW5jdGlvbnMJRnVuY3Rpb24KKwlIaUxpbmsgc2tpbGxDb25zdGFudHMJCUNvbnN0YW50CisJSGlMaW5rIHNraWxsRnVuY3Rpb24JCUZ1bmN0aW9uCisJSGlMaW5rIHNraWxsS2V5d29yZHMJCVN0YXRlbWVudAorCUhpTGluayBza2lsbENvbmRpdGlvbmFsCQlDb25kaXRpb25hbAorCUhpTGluayBza2lsbFJlcGVhdAkJCVJlcGVhdAorCUhpTGluayBza2lsbFN0cmluZwkJCVN0cmluZworCUhpTGluayBza2lsbFRvZG8JCQlUb2RvCisJSGlMaW5rIHNraWxsTm90ZQkJCVRvZG8KKwlIaUxpbmsgc2tpbGxDb21tZW50CQkJQ29tbWVudAorCUhpTGluayBza2lsbENvbW1lbnRFcnJvcglFcnJvcgorCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNraWxsIgorCisiIHZpbTogdHM9NApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc2wudmltIGIvcnVudGltZS9zeW50YXgvc2wudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhM2JjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zbC52aW0KQEAgLTAsMCArMSwxMjAgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglSZW5kZXJtYW4gc2hhZGVyIGxhbmd1YWdlCisiIE1haW50YWluZXI6CURhbiBQaXBvbmkgPGRhbkB0YW5lbG9ybi5kZW1vbi5jby51az4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWF5IDA5CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBBIGJ1bmNoIG9mIHVzZWZ1bCBSZW5kZXJtYW4ga2V5d29yZHMgaW5jbHVkaW5nIHNwZWNpYWwKKyIgUmVuZGVyTWFuIGNvbnRyb2wgc3RydWN0dXJlcworc3luIGtleXdvcmQgc2xTdGF0ZW1lbnQJYnJlYWsgcmV0dXJuIGNvbnRpbnVlCitzeW4ga2V5d29yZCBzbENvbmRpdGlvbmFsCWlmIGVsc2UKK3N5biBrZXl3b3JkIHNsUmVwZWF0CQl3aGlsZSBmb3IKK3N5biBrZXl3b3JkIHNsUmVwZWF0CQlpbGx1bWluYW5jZSBpbGx1bWluYXRlIHNvbGFyCisKK3N5biBrZXl3b3JkIHNsVG9kbyBjb250YWluZWQJVE9ETyBGSVhNRSBYWFgKKworIiBTdHJpbmcgYW5kIENoYXJhY3RlciBjb25zdGFudHMKKyIgSGlnaGxpZ2h0IHNwZWNpYWwgY2hhcmFjdGVycyAodGhvc2Ugd2hpY2ggaGF2ZSBhIGJhY2tzbGFzaCkgZGlmZmVyZW50bHkKK3N5biBtYXRjaCBzbFNwZWNpYWwgY29udGFpbmVkCSJcXFswLTldWzAtOV1bMC05XVx8XFwuIgorc3luIHJlZ2lvbiBzbFN0cmluZwkJc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWlucz1zbFNwZWNpYWwKK3N5biBtYXRjaCBzbENoYXJhY3RlcgkJIidbXlxcXSciCitzeW4gbWF0Y2ggc2xTcGVjaWFsQ2hhcmFjdGVyCSInXFwuJyIKK3N5biBtYXRjaCBzbFNwZWNpYWxDaGFyYWN0ZXIJIidcXFswLTldWzAtOV0nIgorc3luIG1hdGNoIHNsU3BlY2lhbENoYXJhY3RlcgkiJ1xcWzAtOV1bMC05XVswLTldJyIKKworImNhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMKK3N5biByZWdpb24gc2xQYXJlbgkJdHJhbnNwYXJlbnQgc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULHNsUGFyZW5FcnJvcixzbEluY2x1ZGVkLHNsU3BlY2lhbCxzbFRvZG8sc2xVc2VyTGFiZWwKK3N5biBtYXRjaCBzbFBhcmVuRXJyb3IJCSIpIgorc3luIG1hdGNoIHNsSW5QYXJlbiBjb250YWluZWQJIlt7fV0iCisKKyJpbnRlZ2VyIG51bWJlciwgb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdpdGhvdXQgYSBkb3QgYW5kIHdpdGggImYiLgorc3luIGNhc2UgaWdub3JlCitzeW4gbWF0Y2ggc2xOdW1iZXIJCSJcPFswLTldXCtcKHVcPWxcPVx8bHVcfGZcKVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggc2xGbG9hdAkJIlw8WzAtOV1cK1wuWzAtOV0qXChlWy0rXVw9WzAtOV1cK1wpXD1bZmxdXD1cPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggc2xGbG9hdAkJIlwuWzAtOV1cK1woZVstK11cPVswLTldXCtcKVw9W2ZsXVw9XD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRob3V0IGRvdCwgd2l0aCBleHBvbmVudAorc3luIG1hdGNoIHNsRmxvYXQJCSJcPFswLTldXCtlWy0rXVw9WzAtOV1cK1tmbF1cPVw+IgorImhleCBudW1iZXIKK3N5biBtYXRjaCBzbE51bWJlcgkJIlw8MHhbMC05YS1mXVwrXCh1XD1sXD1cfGx1XClcPiIKKyJzeW4gbWF0Y2ggc2xJZGVudGlmaWVyCSJcPFthLXpfXVthLXowLTlfXSpcPiIKK3N5biBjYXNlIG1hdGNoCisKK2lmIGV4aXN0cygic2xfY29tbWVudF9zdHJpbmdzIikKKyAgIiBBIGNvbW1lbnQgY2FuIGNvbnRhaW4gc2xTdHJpbmcsIHNsQ2hhcmFjdGVyIGFuZCBzbE51bWJlci4KKyAgIiBCdXQgYSAiKi8iIGluc2lkZSBhIHNsU3RyaW5nIGluIGEgc2xDb21tZW50IERPRVMgZW5kIHRoZSBjb21tZW50ISAgU28gd2UKKyAgIiBuZWVkIHRvIHVzZSBhIHNwZWNpYWwgdHlwZSBvZiBzbFN0cmluZzogc2xDb21tZW50U3RyaW5nLCB3aGljaCBhbHNvIGVuZHMgb24KKyAgIiAiKi8iLCBhbmQgc2VlcyBhICIqIiBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgYXMgY29tbWVudCBhZ2Fpbi4KKyAgIiBVbmZvcnR1bmF0ZWx5IHRoaXMgZG9lc24ndCB2ZXJ5IHdlbGwgd29yayBmb3IgLy8gdHlwZSBvZiBjb21tZW50cyA6LSgKKyAgc3ludGF4IG1hdGNoIHNsQ29tbWVudFNraXAJY29udGFpbmVkICJeXHMqXCpcKCRcfFxzXCtcKSIKKyAgc3ludGF4IHJlZ2lvbiBzbENvbW1lbnRTdHJpbmcJY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgZW5kPStcKi8rbWU9cy0xIGNvbnRhaW5zPXNsU3BlY2lhbCxzbENvbW1lbnRTa2lwCisgIHN5bnRheCByZWdpb24gc2xDb21tZW50MlN0cmluZwljb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBlbmQ9IiQiIGNvbnRhaW5zPXNsU3BlY2lhbAorICBzeW50YXggcmVnaW9uIHNsQ29tbWVudAlzdGFydD0iL1wqIiBlbmQ9IlwqLyIgY29udGFpbnM9c2xUb2RvLHNsQ29tbWVudFN0cmluZyxzbENoYXJhY3RlcixzbE51bWJlcgorZWxzZQorICBzeW4gcmVnaW9uIHNsQ29tbWVudAkJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPXNsVG9kbworZW5kaWYKK3N5bnRheCBtYXRjaCBzbENvbW1lbnRFcnJvcgkiXCovIgorCitzeW4ga2V5d29yZCBzbE9wZXJhdG9yCXNpemVvZgorc3luIGtleXdvcmQgc2xUeXBlCQlmbG9hdCBwb2ludCBjb2xvciBzdHJpbmcgdmVjdG9yIG5vcm1hbCBtYXRyaXggdm9pZAorc3luIGtleXdvcmQgc2xTdG9yYWdlQ2xhc3MJdmFyeWluZyB1bmlmb3JtIGV4dGVybgorc3luIGtleXdvcmQgc2xTdG9yYWdlQ2xhc3MJbGlnaHQgc3VyZmFjZSB2b2x1bWUgZGlzcGxhY2VtZW50IHRyYW5zZm9ybWF0aW9uIGltYWdlcgorc3luIGtleXdvcmQgc2xWYXJpYWJsZQlDcyBPcyBQIGRQZHUgZFBkdiBOIE5nIHUgdiBkdSBkdiBzIHQKK3N5biBrZXl3b3JkIHNsVmFyaWFibGUgTCBDbCBPbCBFIEkgbmNvbXBzIHRpbWUgQ2kgT2kKK3N5biBrZXl3b3JkIHNsVmFyaWFibGUgUHMgYWxwaGEKK3N5biBrZXl3b3JkIHNsVmFyaWFibGUgZHRpbWUgZFBkdGltZQorCitzeW4gc3luYyBjY29tbWVudCBzbENvbW1lbnQgbWlubGluZXM9MTAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc2xfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc2xfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc2xMYWJlbAlMYWJlbAorICBIaUxpbmsgc2xVc2VyTGFiZWwJTGFiZWwKKyAgSGlMaW5rIHNsQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHNsUmVwZWF0CVJlcGVhdAorICBIaUxpbmsgc2xDaGFyYWN0ZXIJQ2hhcmFjdGVyCisgIEhpTGluayBzbFNwZWNpYWxDaGFyYWN0ZXIgc2xTcGVjaWFsCisgIEhpTGluayBzbE51bWJlcglOdW1iZXIKKyAgSGlMaW5rIHNsRmxvYXQJRmxvYXQKKyAgSGlMaW5rIHNsUGFyZW5FcnJvcglzbEVycm9yCisgIEhpTGluayBzbEluUGFyZW4Jc2xFcnJvcgorICBIaUxpbmsgc2xDb21tZW50RXJyb3IJc2xFcnJvcgorICBIaUxpbmsgc2xPcGVyYXRvcglPcGVyYXRvcgorICBIaUxpbmsgc2xTdG9yYWdlQ2xhc3MJU3RvcmFnZUNsYXNzCisgIEhpTGluayBzbEVycm9yCUVycm9yCisgIEhpTGluayBzbFN0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIHNsVHlwZQkJVHlwZQorICBIaUxpbmsgc2xDb21tZW50RXJyb3IJc2xFcnJvcgorICBIaUxpbmsgc2xDb21tZW50U3RyaW5nIHNsU3RyaW5nCisgIEhpTGluayBzbENvbW1lbnQyU3RyaW5nIHNsU3RyaW5nCisgIEhpTGluayBzbENvbW1lbnRTa2lwCXNsQ29tbWVudAorICBIaUxpbmsgc2xTdHJpbmcJU3RyaW5nCisgIEhpTGluayBzbENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgc2xTcGVjaWFsCVNwZWNpYWxDaGFyCisgIEhpTGluayBzbFRvZG8JVG9kbworICBIaUxpbmsgc2xWYXJpYWJsZQlJZGVudGlmaWVyCisgICJIaUxpbmsgc2xJZGVudGlmaWVyCUlkZW50aWZpZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic2wiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zbGFuZy52aW0gYi9ydW50aW1lL3N5bnRheC9zbGFuZy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZhODliNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NsYW5nLnZpbQpAQCAtMCwwICsxLDEwMiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVMtTGFuZworIiBNYWludGFpbmVyOglKYW4gSGxhdmFjZWsgPGxhaHZha0BtYXRoLm9oaW8tc3RhdGUuZWR1PgorIiBMYXN0IENoYW5nZToJOTgwMjE2CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGtleXdvcmQgc2xhbmdTdGF0ZW1lbnQJYnJlYWsgcmV0dXJuIGNvbnRpbnVlIEVYRUNVVEVfRVJST1JfQkxPQ0sKK3N5biBtYXRjaCBzbGFuZ1N0YXRlbWVudAkiXDxYX1VTRVJfQkxPQ0tbMC00XVw+Igorc3luIGtleXdvcmQgc2xhbmdMYWJlbAkJY2FzZQorc3luIGtleXdvcmQgc2xhbmdDb25kaXRpb25hbAkhaWYgaWYgZWxzZSBzd2l0Y2gKK3N5biBrZXl3b3JkIHNsYW5nUmVwZWF0CQl3aGlsZSBmb3IgX2ZvciBsb29wIGRvIGZvcmV2ZXIKK3N5biBrZXl3b3JkIHNsYW5nRGVmaW5pdGlvbglkZWZpbmUgdHlwZWRlZiB2YXJpYWJsZSBzdHJ1Y3QKK3N5biBrZXl3b3JkIHNsYW5nT3BlcmF0b3IJb3IgYW5kIGFuZGVsc2Ugb3JlbHNlIHNociBzaGwgeG9yIG5vdAorc3luIGtleXdvcmQgc2xhbmdCbG9jawkJRVhJVF9CTE9DSyBFUlJPUl9CTE9DSworc3luIG1hdGNoIHNsYW5nQmxvY2sJCSJcPFVTRVJfQkxPQ0tbMC00XVw+Igorc3luIGtleXdvcmQgc2xhbmdDb25zdGFudAlOVUxMCitzeW4ga2V5d29yZCBzbGFuZ1R5cGUJCUludGVnZXJfVHlwZSBEb3VibGVfVHlwZSBDb21wbGV4X1R5cGUgU3RyaW5nX1R5cGUgU3RydWN0X1R5cGUgUmVmX1R5cGUgTnVsbF9UeXBlIEFycmF5X1R5cGUgRGF0YVR5cGVfVHlwZQorCitzeW4gbWF0Y2ggc2xhbmdPY3RhbAkJIlw8MFxkXCtcPiIgY29udGFpbnM9c2xhbmdPY3RhbEVycm9yCitzeW4gbWF0Y2ggc2xhbmdPY3RhbEVycm9yCSJbODldXCsiIGNvbnRhaW5lZAorc3luIG1hdGNoIHNsYW5nSGV4CQkiXDwwW3hYXVswLTlBLUZhLWZdKlw+Igorc3luIG1hdGNoIHNsYW5nRGVjaW1hbAkJIlw8WzEtOV1cZCpcPiIKK3N5biBtYXRjaCBzbGFuZ0Zsb2F0CQkiXDxcZFwrXC4iCitzeW4gbWF0Y2ggc2xhbmdGbG9hdAkJIlw8XGRcK1wuXGRcK1woW0VlXVstK11cPVxkXCtcKVw9XD4iCitzeW4gbWF0Y2ggc2xhbmdGbG9hdAkJIlw8XGRcK1wuW0VlXVstK11cPVxkXCtcPiIKK3N5biBtYXRjaCBzbGFuZ0Zsb2F0CQkiXDxcZFwrW0VlXVstK11cPVxkXCtcPiIKK3N5biBtYXRjaCBzbGFuZ0Zsb2F0CQkiXC5cZFwrXChbRWVdWy0rXVw9XGRcK1wpXD1cPiIKK3N5biBtYXRjaCBzbGFuZ0ltYWdpbmFyeQkiXC5cZFwrXChbRWVdWy0rXVw9XGQqXClcPVtpal1cPiIKK3N5biBtYXRjaCBzbGFuZ0ltYWdpbmFyeQkiXDxcZFwrXChcLlxkKlwpXD1cKFtFZV1bLStdXD1cZFwrXClcPVtpal1cPiIKKworc3luIHJlZ2lvbiBzbGFuZ1N0cmluZyBvbmVsaW5lIHN0YXJ0PSciJyBlbmQ9JyInIHNraXA9J1xcIicKK3N5biBtYXRjaCBzbGFuZ0NoYXJhY3RlcgkiJ1teXFxdJyIKK3N5biBtYXRjaCBzbGFuZ0NoYXJhY3RlcgkiJ1xcLiciCitzeW4gbWF0Y2ggc2xhbmdDaGFyYWN0ZXIJIidcXFswLTddXHsxLDN9JyIKK3N5biBtYXRjaCBzbGFuZ0NoYXJhY3RlcgkiJ1xcZFxkXHsxLDN9JyIKK3N5biBtYXRjaCBzbGFuZ0NoYXJhY3RlcgkiJ1xceFswLTdhLWZBLUZdXHsxLDJ9JyIKKworc3luIG1hdGNoIHNsYW5nRGVsaW0JCSJbXVt7fTs6LF0iCitzeW4gbWF0Y2ggc2xhbmdPcGVyYXRvcgkJIlstJSsvJio9PD58IX5eQF0iCisKKyJjYXRjaCBlcnJvcnMgY2F1c2VkIGJ5IHdyb25nIHBhcmVudGhlc2lzCitzeW4gcmVnaW9uIHNsYW5nUGFyZW4JbWF0Y2hncm91cD1zbGFuZ0RlbGltIHRyYW5zcGFyZW50IHN0YXJ0PScoJyBlbmQ9JyknIGNvbnRhaW5zPUFMTEJVVCxzbGFuZ1BhcmVuRXJyb3IKK3N5biBtYXRjaCBzbGFuZ1BhcmVuRXJyb3IJIikiCisKK3N5biBtYXRjaCBzbGFuZ0NvbW1lbnQJCSIlLiokIgorc3luIGtleXdvcmQgc2xhbmdPcGVyYXRvcglzaXplb2YKKworc3luIHJlZ2lvbiBzbGFuZ1ByZUNvbmRpdCBzdGFydD0iXlxzKiNccypcKGlmZGVmXD5cfGlmbmRlZlw+XHxpZnRydWVcPlx8aWZuZmFsc2VcPlx8aWZmYWxzZVw+XHxpZm50cnVlXD5cfGlmXCRcfGlmblwkXHxcfGVsaWZcPlx8ZWxzZVw+XHxlbmRpZlw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1jQ29tbWVudCxzbGFuZ1N0cmluZyxzbGFuZ0NoYXJhY3RlcixzbGFuZ051bWJlcgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zbGFuZ19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zbGFuZ19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBzbGFuZ0RlZmluaXRpb24JVHlwZQorICBIaUxpbmsgc2xhbmdCbG9jawkJc2xhbmdEZWZpbml0aW9uCisgIEhpTGluayBzbGFuZ0xhYmVsCQlMYWJlbAorICBIaUxpbmsgc2xhbmdDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgc2xhbmdSZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgc2xhbmdDaGFyYWN0ZXIJQ2hhcmFjdGVyCisgIEhpTGluayBzbGFuZ0Zsb2F0CQlGbG9hdAorICBIaUxpbmsgc2xhbmdJbWFnaW5hcnkJRmxvYXQKKyAgSGlMaW5rIHNsYW5nRGVjaW1hbAkJc2xhbmdOdW1iZXIKKyAgSGlMaW5rIHNsYW5nT2N0YWwJCXNsYW5nTnVtYmVyCisgIEhpTGluayBzbGFuZ0hleAkJc2xhbmdOdW1iZXIKKyAgSGlMaW5rIHNsYW5nTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHNsYW5nUGFyZW5FcnJvcglFcnJvcgorICBIaUxpbmsgc2xhbmdPY3RhbEVycm9yCUVycm9yCisgIEhpTGluayBzbGFuZ09wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgc2xhbmdTdHJ1Y3R1cmUJU3RydWN0dXJlCisgIEhpTGluayBzbGFuZ0luY2x1ZGUJCUluY2x1ZGUKKyAgSGlMaW5rIHNsYW5nUHJlQ29uZGl0CVByZUNvbmRpdAorICBIaUxpbmsgc2xhbmdFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIHNsYW5nU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgc2xhbmdUeXBlCQlUeXBlCisgIEhpTGluayBzbGFuZ1N0cmluZwkJU3RyaW5nCisgIEhpTGluayBzbGFuZ0NvbnN0YW50CQlDb25zdGFudAorICBIaUxpbmsgc2xhbmdSYW5nZUFycmF5CXNsYW5nQ29uc3RhbnQKKyAgSGlMaW5rIHNsYW5nQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgc2xhbmdTcGVjaWFsCQlTcGVjaWFsQ2hhcgorICBIaUxpbmsgc2xhbmdUb2RvCQlUb2RvCisgIEhpTGluayBzbGFuZ0RlbGltCQlEZWxpbWl0ZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic2xhbmciCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zbGljZS52aW0gYi9ydW50aW1lL3N5bnRheC9zbGljZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmODc2YwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NsaWNlLnZpbQpAQCAtMCwwICsxLDkwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJU2xpY2UgKFplcm9DJ3MgU3BlY2lmaWNhdGlvbiBMYW5ndWFnZSBmb3IgSWNlKQorIiBNYWludGFpbmVyOglNb3JlbCBCb2RpbiA8Ym9kaW5AdHV4ZmFtaWx5Lm5ldD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgU2VwIDI0CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBUaGUgU2xpY2Uga2V5d29yZHMKKworc3luIGtleXdvcmQgc2xpY2VUeXBlCSAgICBib29sIGJ5dGUgZG91YmxlIGZsb2F0IGludCBsb25nIHNob3J0IHN0cmluZyB2b2lkCitzeW4ga2V5d29yZCBzbGljZVF1YWxpZmllciAgY29uc3QgZXh0ZW5kcyBpZGVtcG90ZW50IGltcGxlbWVudHMgbG9jYWwgbm9ubXV0YXRpbmcgb3V0IHRocm93cworc3luIGtleXdvcmQgc2xpY2VDb25zdHJ1Y3QJY2xhc3MgZW51bSBleGNlcHRpb24gZGljdGlvbm5hcnkgaW50ZXJmYWNlIG1vZHVsZSBMb2NhbE9iamVjdCBPYmplY3Qgc2VxdWVuY2Ugc3RydWN0CitzeW4ga2V5d29yZCBzbGljZVF1YWxpZmllciAgY29uc3QgZXh0ZW5kcyBpZGVtcG90ZW50IGltcGxlbWVudHMgbG9jYWwgbm9ubXV0YXRpbmcgb3V0IHRocm93cworc3luIGtleXdvcmQgc2xpY2VCb29sZWFuICAgIGZhbHNlIHRydWUKKworIiBJbmNsdWRlIGRpcmVjdGl2ZXMKK3N5biBtYXRjaCAgIHNsaWNlSW5jbHVkZWQgICBkaXNwbGF5IGNvbnRhaW5lZCAiPFtePl0qPiIKK3N5biBtYXRjaCAgIHNsaWNlSW5jbHVkZSAgICBkaXNwbGF5ICJeXHMqI1xzKmluY2x1ZGVcPlxzKlsiPF0iIGNvbnRhaW5zPXNsaWNlSW5jbHVkZWQKKworIiBEb3VibGUtaW5jbHVkZSBndWFyZHMKK3N5biByZWdpb24gIHNsaWNlR3VhcmQgICAgICBzdGFydD0iXiNcKGRlZmluZVx8aWZuZGVmXHxlbmRpZlwpIiBlbmQ9IiQiCisKKyIgU3RyaW5ncyBhbmQgY2hhcmFjdGVycworc3luIHJlZ2lvbiBzbGljZVN0cmluZwkJc3RhcnQ9KyIrICBlbmQ9KyIrCisKKyIgTnVtYmVycyAoc2hhbWVsZXNzbHkgcmlwcGVkIGZyb20gYy52aW0sIG9ubHkgc2xpZ2h0bHkgbW9kaWZpZWQpCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90IGFuZCB3aXRoICJmIi4KK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoICAgc2xpY2VOdW1iZXJzICAgIGRpc3BsYXkgdHJhbnNwYXJlbnQgIlw8XGRcfFwuXGQiIGNvbnRhaW5zPXNsaWNlTnVtYmVyLHNsaWNlRmxvYXQsc2xpY2VPY3RhbAorc3luIG1hdGNoICAgc2xpY2VOdW1iZXIgICAgIGRpc3BsYXkgY29udGFpbmVkICJcZFwrIgorImhleCBudW1iZXIKK3N5biBtYXRjaCAgIHNsaWNlTnVtYmVyICAgICBkaXNwbGF5IGNvbnRhaW5lZCAiMHhceFwrXCh1XD1sXHswLDJ9XHxsbFw9dVwpXD4iCisiIEZsYWcgdGhlIGZpcnN0IHplcm8gb2YgYW4gb2N0YWwgbnVtYmVyIGFzIHNvbWV0aGluZyBzcGVjaWFsCitzeW4gbWF0Y2ggICBzbGljZU9jdGFsICAgICAgZGlzcGxheSBjb250YWluZWQgIjBcb1wrXCh1XD1sXHswLDJ9XHxsbFw9dVwpXD4iIGNvbnRhaW5zPXNsaWNlT2N0YWxaZXJvCitzeW4gbWF0Y2ggICBzbGljZU9jdGFsWmVybyAgZGlzcGxheSBjb250YWluZWQgIlw8MCIKK3N5biBtYXRjaCAgIHNsaWNlRmxvYXQgICAgICBkaXNwbGF5IGNvbnRhaW5lZCAiXGRcK2YiCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRoIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCAgIHNsaWNlRmxvYXQgICAgICBkaXNwbGF5IGNvbnRhaW5lZCAiXGRcK1wuXGQqXChlWy0rXVw9XGRcK1wpXD1bZmxdXD0iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoICAgc2xpY2VGbG9hdCAgICAgIGRpc3BsYXkgY29udGFpbmVkICJcLlxkXCtcKGVbLStdXD1cZFwrXClcPVtmbF1cPVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aG91dCBkb3QsIHdpdGggZXhwb25lbnQKK3N5biBtYXRjaCAgIHNsaWNlRmxvYXQgICAgICBkaXNwbGF5IGNvbnRhaW5lZCAiXGRcK2VbLStdXD1cZFwrW2ZsXVw9XD4iCisiIGZsYWcgYW4gb2N0YWwgbnVtYmVyIHdpdGggd3JvbmcgZGlnaXRzCitzeW4gY2FzZSBtYXRjaAorCisKKyIgQ29tbWVudHMKK3N5biByZWdpb24gc2xpY2VDb21tZW50ICAgIHN0YXJ0PSIvXCoiICBlbmQ9IlwqLyIKK3N5biBtYXRjaCBzbGljZUNvbW1lbnQJIi8vLioiCisKK3N5biBzeW5jIGNjb21tZW50IHNsaWNlQ29tbWVudAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zbGljZV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zbGljZV9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBzbGljZUNvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgc2xpY2VDb25zdHJ1Y3QJS2V5d29yZAorICBIaUxpbmsgc2xpY2VUeXBlCVR5cGUKKyAgSGlMaW5rIHNsaWNlU3RyaW5nCVN0cmluZworICBIaUxpbmsgc2xpY2VJbmNsdWRlZAlTdHJpbmcKKyAgSGlMaW5rIHNsaWNlUXVhbGlmaWVyCUtleXdvcmQKKyAgSGlMaW5rIHNsaWNlSW5jbHVkZQlJbmNsdWRlCisgIEhpTGluayBzbGljZUd1YXJkCVByZVByb2MKKyAgSGlMaW5rIHNsaWNlQm9vbGVhbglCb29sZWFuCisgIEhpTGluayBzbGljZUZsb2F0CU51bWJlcgorICBIaUxpbmsgc2xpY2VOdW1iZXIJTnVtYmVyCisgIEhpTGluayBzbGljZU9jdGFsCU51bWJlcgorICBIaUxpbmsgc2xpY2VPY3RhbFplcm8JU3BlY2lhbAorICBIaUxpbmsgc2xpY2VOdW1iZXJFcnJvciBTcGVjaWFsCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNsaWNlIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc2xybnJjLnZpbSBiL3J1bnRpbWUvc3ludGF4L3Nscm5yYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1ZDlhZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3Nscm5yYy52aW0KQEAgLTAsMCArMSwxOTQgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglTbHJuIHNldHVwIGZpbGUgKGJhc2VkIG9uIHNscm4gMC45LjguMCkKKyIgTWFpbnRhaW5lcjoJUHJlYmVuICdQZXBwZScgR3VsZGJlcmcgPHBlcHBlLXZpbUB3aWVsZGVycy5vcmc+CisiIExhc3QgQ2hhbmdlOgkxOSBNYXkgMjAwNAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBrZXl3b3JkIHNscm5yY1RvZG8JCWNvbnRhaW5lZCBUb2RvCisKKyIgSW4gc29tZSBwbGFjZXMgd2hpdGVzcGFjZSBpcyBpbGxlZ2FsCitzeW4gbWF0Y2ggc2xybnJjU3BhY2VFcnJvcgljb250YWluZWQgIlxzIgorCitzeW4gbWF0Y2ggc2xybnJjTnVtYmVyCQljb250YWluZWQgIi1cPVw8XGRcK1w+Igorc3luIG1hdGNoIHNscm5yY051bWJlcgkJY29udGFpbmVkICsnW14nXVwrJysKKworc3luIG1hdGNoIHNscm5yY1NwZWNLZXkJCWNvbnRhaW5lZCArXChcXFtlciInXVx8XF5bXiciXVx8XFxcb1xvXG9cKSsKKworc3luIG1hdGNoICBzbHJucmNLZXkJCWNvbnRhaW5lZCAiXFNcKyIJY29udGFpbnM9c2xybnJjU3BlY0tleQorc3luIHJlZ2lvbiBzbHJucmNLZXkJCWNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFwiKyBlbmQ9KyIrIG9uZWxpbmUgY29udGFpbnM9c2xybnJjU3BlY0tleQorc3luIHJlZ2lvbiBzbHJucmNLZXkJCWNvbnRhaW5lZCBzdGFydD0rJysgc2tpcD0rXFwnKyBlbmQ9KycrIG9uZWxpbmUgY29udGFpbnM9c2xybnJjU3BlY0tleQorCitzeW4gbWF0Y2ggc2xybnJjU3BlY0NoYXIJY29udGFpbmVkICsnKworc3luIG1hdGNoIHNscm5yY1NwZWNDaGFyCWNvbnRhaW5lZCArXFxbbiJdKworc3luIG1hdGNoIHNscm5yY1NwZWNDaGFyCWNvbnRhaW5lZCAiJVtkZm1ucnMlXSIKKworc3luIG1hdGNoICBzbHJucmNTdHJpbmcJCWNvbnRhaW5lZCAvW14gXHQlIiddXCsvCWNvbnRhaW5zPXNscm5yY1NwZWNDaGFyCitzeW4gcmVnaW9uIHNscm5yY1N0cmluZwkJY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXCIrIGVuZD0rIisgb25lbGluZSBjb250YWlucz1zbHJucmNTcGVjQ2hhcgorCitzeW4gbWF0Y2ggc2xyblNsYW5nUHJlQ29uZGl0CSJeI1xzKmlmblw9XChkZWZcPlx8ZmFsc2VcPlx8dHJ1ZVw+XHxcJFwpIgorc3luIG1hdGNoIHNscm5TbGFuZ1ByZUNvbmRpdAkiXiNccyplXChsaWZcfGxzZVx8bmRpZlwpXD4iCisKK3N5biBtYXRjaCBzbHJucmNDb21tZW50CQkiJS4qJCIJY29udGFpbnM9c2xybnJjVG9kbworCitzeW4ga2V5d29yZCAgc2xybnJjVmFySW50CWNvbnRhaW5lZCBhYm9ydF91bm1vZGlmaWVkX2VkaXRzIGFydGljbGVfd2luZG93X3BhZ2Vfb3ZlcmxhcCBhdXRvX21hcmtfYXJ0aWNsZV9hc19yZWFkIGJlZXAgYnJva2VuX3hyZWYgYnJva2VuX3hyZWYgY2NfZm9sbG93dXAgY2hlY2tfbmV3X2dyb3Vwcworc3luIGtleXdvcmQgIHNscm5yY1ZhckludAljb250YWluZWQgY29sb3JfYnlfc2NvcmUgY29uZmlybV9hY3Rpb25zIGN1c3RvbV9zb3J0X2J5X3RocmVhZHMgZGlzcGxheV9jdXJzb3JfYmFyIGRyb3BfYm9ndXNfZ3JvdXBzIGVkaXRvcl91c2VzX21pbWVfY2hhcnNldCBlbXBoYXNpemVkX3RleHRfbWFzaworc3luIGtleXdvcmQgIHNscm5yY1ZhckludAljb250YWluZWQgZW1waGFzaXplZF90ZXh0X21vZGUgZm9sZF9oZWFkZXJzIGZvbGRfaGVhZGVycyBmb2xsb3d1cF9zdHJpcF9zaWduYXR1cmUgZm9yY2VfYXV0aGVudGljYXRpb24gZm9yY2VfYXV0aGVudGljYXRpb24gZ2VuZXJhdGVfZGF0ZV9oZWFkZXIKK3N5biBrZXl3b3JkICBzbHJucmNWYXJJbnQJY29udGFpbmVkIGdlbmVyYXRlX2VtYWlsX2Zyb20gZ2VuZXJhdGVfZW1haWxfZnJvbSBnZW5lcmF0ZV9tZXNzYWdlX2lkIGdyb3VwbGVuc19wb3J0IGhpZGVfcGdwc2lnbmF0dXJlIGhpZGVfcXVvdGVzIGhpZGVfc2lnbmF0dXJlCitzeW4ga2V5d29yZCAgc2xybnJjVmFySW50CWNvbnRhaW5lZCBoaWRlX3ZlcmJhdGltX21hcmtzIGhpZGVfdmVyYmF0aW1fdGV4dCBoaWdobGlnaHRfdW5yZWFkX3N1YmplY3RzIGhpZ2hsaWdodF91cmxzIGlnbm9yZV9zaWduYXR1cmUga2lsbF9zY29yZSBsaW5lc19wZXJfdXBkYXRlCitzeW4ga2V5d29yZCAgc2xybnJjVmFySW50CWNvbnRhaW5lZCBtYWlsX2VkaXRvcl9pc19tdWEgbWF4X2xvd19zY29yZSBtYXhfcXVldWVkX2dyb3VwcyBtaW5faGlnaF9zY29yZSBtb3VzZSBuZXRpcXVldHRlX3dhcm5pbmdzIG5ld19zdWJqZWN0X2JyZWFrc190aHJlYWRzIG5vX2F1dG9zYXZlCitzeW4ga2V5d29yZCAgc2xybnJjVmFySW50CWNvbnRhaW5lZCBub19iYWNrdXBzIHByZWZlcl9oZWFkIHByb2Nlc3NfdmVyYmF0aW1fbWFya3MgcXVlcnlfbmV4dF9hcnRpY2xlIHF1ZXJ5X25leHRfZ3JvdXAgcXVlcnlfcmVhZF9ncm91cF9jdXRvZmYgcmVhZF9hY3RpdmUgcmVqZWN0X2xvbmdfbGluZXMKK3N5biBrZXl3b3JkICBzbHJucmNWYXJJbnQJY29udGFpbmVkIHNjcm9sbF9ieV9wYWdlIHNob3dfYXJ0aWNsZSBzaG93X3RocmVhZF9zdWJqZWN0IHNpbXVsYXRlX2dyYXBoaWNfY2hhcnMgc21hcnRfcXVvdGUgc29ydGluZ19tZXRob2Qgc3BvaWxlcl9jaGFyIHNwb2lsZXJfY2hhcgorc3luIGtleXdvcmQgIHNscm5yY1ZhckludAljb250YWluZWQgc3BvaWxlcl9kaXNwbGF5X21vZGUgc3BvaWxlcl9kaXNwbGF5X21vZGUgc3Bvb2xfY2hlY2tfdXBfb25fbm92IHNwb29sX2NoZWNrX3VwX29uX25vdiB1bmNvbGxhcHNlX3RocmVhZHMgdW5zdWJzY3JpYmVfbmV3X2dyb3VwcyB1c2VfYmxpbmsKK3N5biBrZXl3b3JkICBzbHJucmNWYXJJbnQJY29udGFpbmVkIHVzZV9jb2xvciB1c2VfZmxvd19jb250cm9sIHVzZV9ncm91cGxlbnMgdXNlX2dyb3VwbGVucyB1c2VfaGVhZGVyX251bWJlcnMgdXNlX2luZXdzIHVzZV9pbmV3cyB1c2VfbG9jYWx0aW1lIHVzZV9tZXRhbWFpbCB1c2VfbWltZSB1c2VfbWltZQorc3luIGtleXdvcmQgIHNscm5yY1ZhckludAljb250YWluZWQgdXNlX3JlY29tbWVuZGVkX21zZ19pZCB1c2Vfc2xybnB1bGwgdXNlX3Nscm5wdWxsIHVzZV90aWxkZSB1c2VfdG1wZGlyIHVzZV91dWRldmlldyB1c2VfdXVkZXZpZXcgd2Fybl9mb2xsb3d1cF90byB3cmFwX2ZsYWdzIHdyYXBfbWV0aG9kCitzeW4ga2V5d29yZCAgc2xybnJjVmFySW50CWNvbnRhaW5lZCB3cml0ZV9uZXdzcmNfZmxhZ3MKKworIiBMaXN0ZWQgZm9yIHJlbW92YWwKK3N5biBrZXl3b3JkICBzbHJucmNWYXJJbnQJY29udGFpbmVkIGF1dGhvcl9kaXNwbGF5IGRpc3BsYXlfYXV0aG9yX3JlYWxuYW1lIGRpc3BsYXlfc2NvcmUgZ3JvdXBfZHNjX3N0YXJ0X2NvbHVtbiBwcm9jZXNzX3ZlcmJhdHVtX21hcmtzIHByb21wdF9uZXh0X2dyb3VwIHF1ZXJ5X3JlY29ubmVjdAorc3luIGtleXdvcmQgIHNscm5yY1ZhckludAljb250YWluZWQgc2hvd19kZXNjcmlwdGlvbnMgdXNlX3hndGl0bGUKKworIiBNYXRjaCBhcyBhICJzdHJpbmciIHRvbworc3luIHJlZ2lvbiAgc2xybnJjVmFySW50U3RyCWNvbnRhaW5lZCBtYXRjaGdyb3VwPXNscm5yY1ZhckludCBzdGFydD0rIisgZW5kPSsiKyBvbmVsaW5lIGNvbnRhaW5zPXNscm5yY1ZhckludCxzbHJucmNTcGFjZUVycm9yCisKK3N5biBrZXl3b3JkIHNscm5yY1ZhclN0cgljb250YWluZWQgWGJyb3dzZXIgYXJ0X2hlbHBfbGluZSBhcnRfc3RhdHVzX2xpbmUgY2Fuc2VjcmV0X2ZpbGUgY2NfcG9zdF9zdHJpbmcgY2hhcnNldCBjdXN0b21faGVhZGVycyBjdXN0b21fc29ydF9vcmRlciBkZWNvZGVfZGlyZWN0b3J5CitzeW4ga2V5d29yZCBzbHJucmNWYXJTdHIJY29udGFpbmVkIGVkaXRvcl9jb21tYW5kIGZhaWxlZF9wb3N0c19maWxlIGZvbGxvd3VwX2N1c3RvbV9oZWFkZXJzIGZvbGxvd3VwX2RhdGVfZm9ybWF0IGZvbGxvd3VwX3N0cmluZyBmb2xsb3d1cHRvX3N0cmluZyBncm91cF9oZWxwX2xpbmUKK3N5biBrZXl3b3JkIHNscm5yY1ZhclN0cgljb250YWluZWQgZ3JvdXBfc3RhdHVzX2xpbmUgZ3JvdXBsZW5zX2hvc3QgZ3JvdXBsZW5zX3BzZXVkb25hbWUgaGVhZGVyX2hlbHBfbGluZSBoZWFkZXJfc3RhdHVzX2xpbmUgaG9zdG5hbWUgaW5ld3NfcHJvZ3JhbSBtYWNyb19kaXJlY3RvcnkKK3N5biBrZXl3b3JkIHNscm5yY1ZhclN0cgljb250YWluZWQgbWFpbF9lZGl0b3JfY29tbWFuZCBtZXRhbWFpbF9jb21tYW5kIG1pbWVfY2hhcnNldCBub25fWGJyb3dzZXIgb3JnYW5pemF0aW9uIG92ZXJ2aWV3X2RhdGVfZm9ybWF0IHBvc3RfZWRpdG9yX2NvbW1hbmQgcG9zdF9vYmplY3QKK3N5biBrZXl3b3JkIHNscm5yY1ZhclN0cgljb250YWluZWQgcG9zdHBvbmVfZGlyZWN0b3J5IHByaW50ZXJfbmFtZSBxdW90ZV9zdHJpbmcgcmVhbG5hbWUgcmVwbHlfY3VzdG9tX2hlYWRlcnMgcmVwbHlfc3RyaW5nIHJlcGx5dG8gc2F2ZV9kaXJlY3Rvcnkgc2F2ZV9wb3N0cyBzYXZlX3JlcGxpZXMKK3N5biBrZXl3b3JkIHNscm5yY1ZhclN0cgljb250YWluZWQgc2NvcmVfZWRpdG9yX2NvbW1hbmQgc2NvcmVmaWxlIHNlbmRtYWlsX2NvbW1hbmQgc2VydmVyX29iamVjdCBzaWduYXR1cmUgc2lnbm9mZl9zdHJpbmcgc3Bvb2xfYWN0aXZlX2ZpbGUgc3Bvb2xfYWN0aXZldGltZXNfZmlsZQorc3luIGtleXdvcmQgc2xybnJjVmFyU3RyCWNvbnRhaW5lZCBzcG9vbF9pbm5fcm9vdCBzcG9vbF9uZXdzZ3JvdXBzX2ZpbGUgc3Bvb2xfbm92X2ZpbGUgc3Bvb2xfbm92X3Jvb3Qgc3Bvb2xfb3ZlcnZpZXdmbXRfZmlsZSBzcG9vbF9yb290IHN1cGVyc2VkZXNfY3VzdG9tX2hlYWRlcnMKK3N5biBrZXl3b3JkIHNscm5yY1ZhclN0cgljb250YWluZWQgdG9wX3N0YXR1c19saW5lIHVzZXJuYW1lCisKKyIgTGlzdGVkIGZvciByZW1vdmFsCitzeW4ga2V5d29yZCBzbHJucmNWYXJTdHIJY29udGFpbmVkIGZvbGxvd3VwIGNjX2ZvbGxvd3VwX3N0cmluZworCisiIE1hdGNoIGFzIGEgInN0cmluZyIgdG9vCitzeW4gcmVnaW9uICBzbHJucmNWYXJTdHJTdHIJY29udGFpbmVkIG1hdGNoZ3JvdXA9c2xybnJjVmFyU3RyIHN0YXJ0PSsiKyBlbmQ9KyIrIG9uZWxpbmUgY29udGFpbnM9c2xybnJjVmFyU3RyLHNscm5yY1NwYWNlRXJyb3IKKworIiBWYXJpb3VzIGNvbW1hbmRzCitzeW4gcmVnaW9uIHNscm5yY0NtZExpbmUJbWF0Y2hncm91cD1zbHJucmNDbWQgc3RhcnQ9Ilw8XChhdXRvYmF1ZFx8Y29sb3JcfGNvbXBhdGlibGVfY2hhcnNldHNcfGdyb3VwX2Rpc3BsYXlfZm9ybWF0XHxncm91cGxlbnNfYWRkXHxoZWFkZXJfZGlzcGxheV9mb3JtYXRcfGlnbm9yZV9xdW90ZXNcfGluY2x1ZGVcfGludGVycHJldFx8bW9ub1x8bm5ycGFjY2Vzc1x8cG9zdGluZ19ob3N0XHxzZXJ2ZXJcfHNldFx8c2V0a2V5XHxzdHJpcF9yZV9yZWdleHBcfHN0cmlwX3NpZ19yZWdleHBcfHN0cmlwX3dhc19yZWdleHBcfHVuc2V0a2V5XHx2aXNpYmxlX2hlYWRlcnNcKVw+IiBlbmQ9IiQiIG9uZWxpbmUgY29udGFpbnM9c2xybnJjXChTdHJpbmdcfENvbW1lbnRcKQorCisiIExpc3RlZCBmb3IgcmVtb3ZhbAorc3luIHJlZ2lvbiBzbHJucmNDbWRMaW5lCW1hdGNoZ3JvdXA9c2xybnJjQ21kIHN0YXJ0PSJcPFwoY2NfZm9sbG93dXBfc3RyaW5nXHxkZWNvZGVfZGlyZWN0b3J5XHxlZGl0b3JfY29tbWFuZFx8Zm9sbG93dXBcfGhvc3RuYW1lXHxvcmdhbml6YXRpb25cfHF1b3RlX3N0cmluZ1x8cmVhbG5hbWVcfHJlcGx5dG9cfHNjb3JlZmlsZVx8c2lnbmF0dXJlXHx1c2VybmFtZVwpXD4iIGVuZD0iJCIgb25lbGluZSBjb250YWlucz1zbHJucmNcKFN0cmluZ1x8Q29tbWVudFwpCisKKyIgU2V0dGluZyB2YXJpYWJsZXMKK3N5biBrZXl3b3JkIHNscm5yY1NldAkJY29udGFpbmVkIHNldAorc3luIG1hdGNoICAgc2xybnJjU2V0U3RyCSJeXHMqc2V0XHNcK1xTXCsiIHNraXB3aGl0ZSBuZXh0Z3JvdXA9c2xybnJjU3RyaW5nIGNvbnRhaW5zPXNscm5yY1NldCxzbHJucmNWYXJTdHJcKFN0clwpXD0KK3N5biBtYXRjaCAgIHNscm5yY1NldEludAljb250YWluZWQgIl5ccypzZXRcc1wrXFNcKyIgY29udGFpbnM9c2xybnJjU2V0LHNscm5yY1ZhckludFwoU3RyXClcPQorc3luIG1hdGNoICAgc2xybnJjU2V0SW50TGluZQkiXlxzKnNldFxzXCtcU1wrXHNcK1woLVw9XGRcK1w+XHwnW14nXVwrJ1wpIiBjb250YWlucz1zbHJucmNTZXRJbnQsc2xybnJjTnVtYmVyLHNscm5yY1ZhckludAorCisiIENvbG9yIGRlZmluaXRpb25zCitzeW4gbWF0Y2ggICBzbHJucmNDb2xvck9iagljb250YWluZWQgIlw8cXVvdGVzXGRcK1w+Igorc3luIGtleXdvcmQgc2xybnJjQ29sb3JPYmoJY29udGFpbmVkIGFydGljbGUgYXV0aG9yIGJvbGR0ZXh0IGJveCBjdXJzb3IgZGF0ZSBkZXNjcmlwdGlvbiBlcnJvciBmcmFtZSBmcm9tX215c2VsZiBncm91cCBncm91cGxlbnNfZGlzcGxheSBoZWFkZXJfbmFtZSBoZWFkZXJfbnVtYmVyIGhlYWRlcnMKK3N5biBrZXl3b3JkIHNscm5yY0NvbG9yT2JqCWNvbnRhaW5lZCBoaWdoX3Njb3JlIGl0YWxpY3N0ZXh0IG1lbnUgbWVudV9wcmVzcyBtZXNzYWdlIG5lZ19zY29yZSBub3JtYWwgcGdwc2lnbmF0dXJlIHBvc19zY29yZSBxdW90ZXMgcmVzcG9uc2VfY2hhciBzZWxlY3Rpb24gc2lnbmF0dXJlIHN0YXR1cworc3luIGtleXdvcmQgc2xybnJjQ29sb3JPYmoJY29udGFpbmVkIHN1YmplY3QgdGhyZWFkX251bWJlciB0aWxkZSB0cmVlIHVuZGVybGluZXRleHQgdW5yZWFkX3N1YmplY3QgdXJsIHZlcmJhdGltCisKKyIgTGlzdGVkIGZvciByZW1vdmFsCitzeW4ga2V5d29yZCBzbHJucmNDb2xvck9iagljb250YWluZWQgdmVyYmF0dW0KKworc3luIHJlZ2lvbiAgc2xybnJjQ29sb3JPYmpTdHIJY29udGFpbmVkIG1hdGNoZ3JvdXA9c2xybnJjQ29sb3JPYmogc3RhcnQ9KyIrIGVuZD0rIisgb25lbGluZSBjb250YWlucz1zbHJucmNDb2xvck9iaixzbHJucmNTcGFjZUVycm9yCitzeW4ga2V5d29yZCBzbHJucmNDb2xvclZhbAljb250YWluZWQgZGVmYXVsdAorc3luIGtleXdvcmQgc2xybnJjQ29sb3JWYWwJY29udGFpbmVkIGJsYWNrIGJsdWUgYnJpZ2h0Ymx1ZSBicmlnaHRjeWFuIGJyaWdodGdyZWVuIGJyaWdodG1hZ2VudGEgYnJpZ2h0cmVkIGJyb3duIGN5YW4gZ3JheSBncmVlbiBsaWdodGdyYXkgbWFnZW50YSByZWQgd2hpdGUgeWVsbG93CitzeW4gcmVnaW9uICBzbHJucmNDb2xvclZhbFN0cgljb250YWluZWQgbWF0Y2hncm91cD1zbHJucmNDb2xvclZhbCBzdGFydD0rIisgZW5kPSsiKyBvbmVsaW5lIGNvbnRhaW5zPXNscm5yY0NvbG9yVmFsLHNscm5yY1NwYWNlRXJyb3IKKyIgTWF0aGNpbmcgYSBmdW5jdGlvbiB3aXRoIHRocmVlIGFyZ3VtZW50cworc3luIGtleXdvcmQgc2xybnJjQ29sb3IJCWNvbnRhaW5lZCBjb2xvcgorc3luIG1hdGNoICAgc2xybnJjQ29sb3JJbml0CWNvbnRhaW5lZCAiXlxzKmNvbG9yXHNcK1xTXCsiIHNraXB3aGl0ZSBuZXh0Z3JvdXA9c2xybnJjQ29sb3JWYWxcKFN0clwpXD0gY29udGFpbnM9c2xybnJjQ29sb3JcKE9ialx8T2JqU3RyXClcPQorc3luIG1hdGNoICAgc2xybnJjQ29sb3JMaW5lCSJeXHMqY29sb3Jcc1wrXFNcK1xzXCtcU1wrIiBza2lwd2hpdGUgbmV4dGdyb3VwPXNscm5yY0NvbG9yVmFsXChTdHJcKVw9IGNvbnRhaW5zPXNscm5yY0NvbG9yXChJbml0XHxWYWxcfFZhbFN0clwpCisKKyIgTW9ubyBzZXR0aW5ncworc3luIGtleXdvcmQgc2xybnJjTW9ub1ZhbAljb250YWluZWQgYmxpbmsgYm9sZCBub25lIHJldmVyc2UgdW5kZXJsaW5lCitzeW4gcmVnaW9uICBzbHJucmNNb25vVmFsU3RyCWNvbnRhaW5lZCBtYXRjaGdyb3VwPXNscm5yY01vbm9WYWwgc3RhcnQ9KyIrIGVuZD0rIisgb25lbGluZSBjb250YWlucz1zbHJucmNNb25vVmFsLHNscm5yY1NwYWNlRXJyb3IKKyIgQ29sb3Igb2JqZWN0IGlzIGluaGVyaXRlZAorIiBNb25vIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudAorc3luIGtleXdvcmQgc2xybnJjTW9ubwkJY29udGFpbmVkIG1vbm8KK3N5biBtYXRjaCAgIHNscm5yY01vbm9Jbml0CWNvbnRhaW5lZCAiXlxzKm1vbm9cc1wrXFNcKyIgY29udGFpbnM9c2xybnJjTW9ubyxzbHJucmNDb2xvck9ialwoU3RyXClcPQorc3luIG1hdGNoICAgc2xybnJjTW9ub0xpbmUJIl5ccyptb25vXHNcK1xTXCtcc1wrXFMuKiIgY29udGFpbnM9c2xybnJjTW9ub1woSW5pdFx8VmFsXHxWYWxTdHJcKSxzbHJucmNDb21tZW50CisKKyIgRnVuY3Rpb25zIGluIGFydGljbGUgbW9kZQorc3luIGtleXdvcmQgc2xybnJjRnVuQXJ0CWNvbnRhaW5lZCBhcnRpY2xlX2JvYiBhcnRpY2xlX2VvYiBhcnRpY2xlX2xlZnQgYXJ0aWNsZV9saW5lX2Rvd24gYXJ0aWNsZV9saW5lX3VwIGFydGljbGVfcGFnZV9kb3duIGFydGljbGVfcGFnZV91cCBhcnRpY2xlX3JpZ2h0IGFydGljbGVfc2VhcmNoCitzeW4ga2V5d29yZCBzbHJucmNGdW5BcnQJY29udGFpbmVkIGF1dGhvcl9zZWFyY2hfYmFja3dhcmQgYXV0aG9yX3NlYXJjaF9mb3J3YXJkIGJyb3dzZV91cmwgY2FuY2VsIGNhdGNodXAgY2F0Y2h1cF9hbGwgY3JlYXRlX3Njb3JlIGRlY29kZSBkZWxldGUgZGVsZXRlX3RocmVhZCBkaWdpdF9hcmcKK3N5biBrZXl3b3JkIHNscm5yY0Z1bkFydAljb250YWluZWQgZW5sYXJnZV9hcnRpY2xlX3dpbmRvdyBldmFsdWF0ZV9jbWQgZXhjaGFuZ2VfbWFyayBleHB1bmdlIGZhc3RfcXVpdCBmb2xsb3d1cCBmb3J3YXJkIGZvcndhcmRfZGlnZXN0IGdldF9jaGlsZHJlbl9oZWFkZXJzIGdldF9wYXJlbnRfaGVhZGVyCitzeW4ga2V5d29yZCBzbHJucmNGdW5BcnQJY29udGFpbmVkIGdvdG9fYXJ0aWNsZSBnb3RvX2xhc3RfcmVhZCBncm91cGxlbnNfcmF0ZV9hcnRpY2xlIGhlYWRlcl9ib2IgaGVhZGVyX2VvYiBoZWFkZXJfbGluZV9kb3duIGhlYWRlcl9saW5lX3VwIGhlYWRlcl9wYWdlX2Rvd24gaGVhZGVyX3BhZ2VfdXAKK3N5biBrZXl3b3JkIHNscm5yY0Z1bkFydAljb250YWluZWQgaGVscCBoaWRlX2FydGljbGUgbG9jYXRlX2FydGljbGUgbWFya19zcG90IG5leHQgbmV4dF9oaWdoX3Njb3JlIG5leHRfc2FtZV9zdWJqZWN0IHBpcGUgcG9zdCBwb3N0X3Bvc3Rwb25lZCBwcmV2aW91cyBwcmludCBxdWl0IHJlZHJhdworc3luIGtleXdvcmQgc2xybnJjRnVuQXJ0CWNvbnRhaW5lZCByZXBlYXRfbGFzdF9rZXkgcmVwbHkgcmVxdWVzdCBzYXZlIHNob3dfc3BvaWxlcnMgc2hyaW5rX2FydGljbGVfd2luZG93IHNraXBfcXVvdGVzIHNraXBfdG9fbmV4dF9ncm91cCBza2lwX3RvX3ByZXZpb3VzX2dyb3VwCitzeW4ga2V5d29yZCBzbHJucmNGdW5BcnQJY29udGFpbmVkIHN1YmplY3Rfc2VhcmNoX2JhY2t3YXJkIHN1YmplY3Rfc2VhcmNoX2ZvcndhcmQgc3VwZXJzZWRlIHN1c3BlbmQgdGFnX2hlYWRlciB0b2dnbGVfY29sbGFwc2VfdGhyZWFkcyB0b2dnbGVfaGVhZGVyX2Zvcm1hdHMKK3N5biBrZXl3b3JkIHNscm5yY0Z1bkFydAljb250YWluZWQgdG9nZ2xlX2hlYWRlcl90YWcgdG9nZ2xlX2hlYWRlcnMgdG9nZ2xlX3BncHNpZ25hdHVyZSB0b2dnbGVfcXVvdGVzIHRvZ2dsZV9yb3QxMyB0b2dnbGVfc2lnbmF0dXJlIHRvZ2dsZV92ZXJiYXRpbV9tYXJrcworc3luIGtleXdvcmQgc2xybnJjRnVuQXJ0CWNvbnRhaW5lZCB0b2dnbGVfdmVyYmF0aW1fdGV4dCB1bmNhdGNodXAgdW5jYXRjaHVwX2FsbCB1bmRlbGV0ZSB1bnRhZ19oZWFkZXJzIHZpZXdfc2NvcmVzIHdyYXBfYXJ0aWNsZSB6b29tX2FydGljbGVfd2luZG93CisKKyIgTGlzdGVkIGZvciByZW1vdmFsCitzeW4ga2V5d29yZCBzbHJucmNGdW5BcnQJY29udGFpbmVkIGFydF9ib2IgYXJ0X2VvYiBhcnRfeHB1bmdlIGFydGljbGVfbGluZWRuIGFydGljbGVfbGluZXVwIGFydGljbGVfcGFnZWRuIGFydGljbGVfcGFnZXVwIGRvd24gZW5sYXJnZV93aW5kb3cgZ290b19iZWdpbm5pbmcgZ290b19lbmQgbGVmdAorc3luIGtleXdvcmQgc2xybnJjRnVuQXJ0CWNvbnRhaW5lZCBsb2NhdGVfaGVhZGVyX2J5X21zZ2lkIHBhZ2VkbiBwYWdldXAgcGlwZV9hcnRpY2xlIHByZXYgcHJpbnRfYXJ0aWNsZSByaWdodCBzY3JvbGxfZG4gc2Nyb2xsX3VwIHNocmlua193aW5kb3cgc2tpcF90b19wcmV2X2dyb3VwCitzeW4ga2V5d29yZCBzbHJucmNGdW5BcnQJY29udGFpbmVkIHRvZ2dsZV9zaG93X2F1dGhvciB1cAorCisiIEZ1bmN0aW9ucyBpbiBncm91cCBtb2RlCitzeW4ga2V5d29yZCBzbHJucmNGdW5Hcm91cAljb250YWluZWQgYWRkX2dyb3VwIGJvYiBjYXRjaHVwIGRpZ2l0X2FyZyBlb2IgZXZhbHVhdGVfY21kIGdyb3VwX3NlYXJjaCBncm91cF9zZWFyY2hfYmFja3dhcmQgZ3JvdXBfc2VhcmNoX2ZvcndhcmQgaGVscCBsaW5lX2Rvd24gbGluZV91cCBtb3ZlX2dyb3VwCitzeW4ga2V5d29yZCBzbHJucmNGdW5Hcm91cAljb250YWluZWQgcGFnZV9kb3duIHBhZ2VfdXAgcG9zdCBwb3N0X3Bvc3Rwb25lZCBxdWl0IHJlZHJhdyByZWZyZXNoX2dyb3VwcyByZXBlYXRfbGFzdF9rZXkgc2F2ZV9uZXdzcmMgc2VsZWN0X2dyb3VwIHN1YnNjcmliZSBzdXNwZW5kCitzeW4ga2V5d29yZCBzbHJucmNGdW5Hcm91cAljb250YWluZWQgdG9nZ2xlX2dyb3VwX2Zvcm1hdHMgdG9nZ2xlX2hpZGRlbiB0b2dnbGVfbGlzdF9hbGwgdG9nZ2xlX3Njb3JpbmcgdHJhbnNwb3NlX2dyb3VwcyB1bmNhdGNodXAgdW5zdWJzY3JpYmUKKworIiBMaXN0ZWQgZm9yIHJlbW92YWwKK3N5biBrZXl3b3JkIHNscm5yY0Z1bkdyb3VwCWNvbnRhaW5lZCBkb3duIGdyb3VwX2JvYiBncm91cF9lb2IgcGFnZWRvd24gcGFnZXVwIHRvZ2dsZV9ncm91cF9kaXNwbGF5IHVuY2F0Y2hfdXAgdXAKKworIiBGdW5jdGlvbnMgaW4gcmVhZGxpbmUgbW9kZSAoYWN0dWFsbHkgZnJvbSBzbGFuZydzIHNscmxpbmUuYykKK3N5biBrZXl3b3JkIHNscm5yY0Z1blJlYWQJY29udGFpbmVkIGJkZWwgYm9sIGRlbCBkZWxlb2wgZG93biBlbnRlciBlb2wgbGVmdCBxdW90ZWRfaW5zZXJ0IHJpZ2h0IHNlbGZfaW5zZXJ0IHRyaW0gdXAKKworIiBCaW5kaW5nIGtleXMKK3N5biBrZXl3b3JkIHNscm5yY1NldGtleU9iagljb250YWluZWQgYXJ0aWNsZSBncm91cCByZWFkbGluZQorc3luIHJlZ2lvbiAgc2xybnJjU2V0a2V5T2JqU3RyCWNvbnRhaW5lZCBtYXRjaGdyb3VwPXNscm5yY1NldGtleU9iaiBzdGFydD0rIisgZW5kPSsiKyBvbmVsaW5lIGNvbnRhaW5zPXNscm5yY1NldGtleU9iagorc3luIG1hdGNoICAgc2xybnJjU2V0a2V5QXJ0CWNvbnRhaW5lZCAnXCgiXD1cKVw8YXJ0aWNsZVw+XDFcc1wrXFNcKycgc2tpcHdoaXRlIG5leHRncm91cD1zbHJucmNLZXkgY29udGFpbnM9c2xybnJjU2V0S2V5T2JqXChTdHJcKVw9LHNscm5yY0Z1bkFydAorc3luIG1hdGNoICAgc2xybnJjU2V0a2V5R3JvdXAJY29udGFpbmVkICdcKCJcPVwpXDxncm91cFw+XDFcc1wrXFNcKycgc2tpcHdoaXRlIG5leHRncm91cD1zbHJucmNLZXkgY29udGFpbnM9c2xybnJjU2V0S2V5T2JqXChTdHJcKVw9LHNscm5yY0Z1bkdyb3VwCitzeW4gbWF0Y2ggICBzbHJucmNTZXRrZXlSZWFkCWNvbnRhaW5lZCAnXCgiXD1cKVw8cmVhZGxpbmVcPlwxXHNcK1xTXCsnIHNraXB3aGl0ZSBuZXh0Z3JvdXA9c2xybnJjS2V5IGNvbnRhaW5zPXNscm5yY1NldEtleU9ialwoU3RyXClcPSxzbHJucmNGdW5SZWFkCitzeW4gbWF0Y2ggICBzbHJucmNTZXRrZXkJIl5ccypzZXRrZXlcPiIgc2tpcHdoaXRlIG5leHRncm91cD1zbHJucmNTZXRrZXlBcnQsc2xybnJjU2V0a2V5R3JvdXAsc2xybnJjU2V0a2V5UmVhZAorCisiIFVuYmluZGluZyBrZXlzCitzeW4gbWF0Y2ggICBzbHJucmNVbnNldGtleQknXlxzKnVuc2V0a2V5XHNcK1woIlwpXD1cKGFydGljbGVcfGdyb3VwXHxyZWFkbGluZVwpXD5cMScgc2tpcHdoaXRlIG5leHRncm91cD1zbHJucmNLZXkgY29udGFpbnM9c2xybnJjU2V0a2V5T2JqXChTdHJcKVw9CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3Nscm5yY19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zbHJucmNfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc2xybnJjVG9kbwkJVG9kbworICBIaUxpbmsgc2xybnJjU3BhY2VFcnJvcglFcnJvcgorICBIaUxpbmsgc2xybnJjTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHNscm5yY1NwZWNLZXkJCVNwZWNpYWxDaGFyCisgIEhpTGluayBzbHJucmNLZXkJCVN0cmluZworICBIaUxpbmsgc2xybnJjU3BlY0NoYXIJCVNwZWNpYWxDaGFyCisgIEhpTGluayBzbHJucmNTdHJpbmcJCVN0cmluZworICBIaUxpbmsgc2xyblNsYW5nUHJlQ29uZGl0CVNwZWNpYWwKKyAgSGlMaW5rIHNscm5yY0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHNscm5yY1ZhckludAkJSWRlbnRpZmllcgorICBIaUxpbmsgc2xybnJjVmFyU3RyCQlJZGVudGlmaWVyCisgIEhpTGluayBzbHJucmNDbWQJCXNscm5yY1NldAorICBIaUxpbmsgc2xybnJjU2V0CQlPcGVyYXRvcgorICBIaUxpbmsgc2xybnJjQ29sb3IJCUtleXdvcmQKKyAgSGlMaW5rIHNscm5yY0NvbG9yT2JqCQlJZGVudGlmaWVyCisgIEhpTGluayBzbHJucmNDb2xvclZhbAkJU3RyaW5nCisgIEhpTGluayBzbHJucmNNb25vCQlLZXl3b3JkCisgIEhpTGluayBzbHJucmNNb25vT2JqCQlJZGVudGlmaWVyCisgIEhpTGluayBzbHJucmNNb25vVmFsCQlTdHJpbmcKKyAgSGlMaW5rIHNscm5yY0Z1bkFydAkJTWFjcm8KKyAgSGlMaW5rIHNscm5yY0Z1bkdyb3VwCQlNYWNybworICBIaUxpbmsgc2xybnJjRnVuUmVhZAkJTWFjcm8KKyAgSGlMaW5rIHNscm5yY1NldGtleU9iaglJZGVudGlmaWVyCisgIEhpTGluayBzbHJucmNTZXRrZXkJCUtleXdvcmQKKyAgSGlMaW5rIHNscm5yY1Vuc2V0a2V5CQlzbHJucmNTZXRrZXkKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic2xybnJjIgorCisiRU9GCXZpbTogdHM9OCBub2V0IHR3PTEyMCBzdz04IHN0cz0wCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zbHJuc2MudmltIGIvcnVudGltZS9zeW50YXgvc2xybnNjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjY1M2NjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc2xybnNjLnZpbQpAQCAtMCwwICsxLDg1IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJU2xybiBzY29yZSBmaWxlIChiYXNlZCBvbiBzbHJuIDAuOS44LjApCisiIE1haW50YWluZXI6CVByZWJlbiAnUGVwcGUnIEd1bGRiZXJnIDxwZXBwZS12aW1Ad2llbGRlcnMub3JnPgorIiBMYXN0IENoYW5nZToJMTkgTWF5IDIwMDQKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGNoYXJhY3RlcnMgaW4gbmV3c2dyb3VwIG5hbWVzCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNldCBpc2s9QCw0OC01NywuLC0sXywrCitlbHNlCisgIHNldGxvY2FsIGlzaz1ALDQ4LTU3LC4sLSxfLCsKK2VuZGlmCisKK3N5biBtYXRjaCBzbHJuc2NDb21tZW50CQkiJS4qJCIKK3N5biBtYXRjaCBzbHJuc2NTZWN0aW9uQ29tCSIuXS4qImxjPTIKKworc3luIG1hdGNoIHNscm5zY0dyb3VwCQljb250YWluZWQgIlwoXGtcfFwqXClcKyIKK3N5biBtYXRjaCBzbHJuc2NOdW1iZXIJCWNvbnRhaW5lZCAiXGRcKyIKK3N5biBtYXRjaCBzbHJuc2NEYXRlCQljb250YWluZWQgIlwoXGRcezEsMn1bLS9dXClcezJ9XGRcezR9Igorc3luIG1hdGNoIHNscm5zY0RlbGltCQljb250YWluZWQgIjoiCitzeW4gbWF0Y2ggc2xybnNjQ29tbWEJCWNvbnRhaW5lZCAiLCIKK3N5biBtYXRjaCBzbHJuc2NPcGVyCQljb250YWluZWQgIlx+Igorc3luIG1hdGNoIHNscm5zY0VzYwkJY29udGFpbmVkICJcXFtlY0M8Pi5dIgorc3luIG1hdGNoIHNscm5zY0VzYwkJY29udGFpbmVkICJbP15dIgorc3luIG1hdGNoIHNscm5zY0VzYwkJY29udGFpbmVkICJbXlxcXSRccyokImxjPTEKKworc3luIGtleXdvcmQgc2xybnNjSW5jbHVkZQljb250YWluZWQgaW5jbHVkZQorc3luIG1hdGNoIHNscm5zY0luY2x1ZGVMaW5lCSJeXHMqSW5jbHVkZVxzXCtcUy4qJCIKKworc3luIHJlZ2lvbiBzbHJuc2NTZWN0aW9uCW1hdGNoZ3JvdXA9c2xybnNjU2VjdGlvblN0ZCBzdGFydD0iXlxzKlxbIiBlbmQ9J1xdJyBjb250YWlucz1zbHJuc2NHcm91cCxzbHJuc2NDb21tYSxzbHJuc2NTZWN0aW9uQ29tCitzeW4gcmVnaW9uIHNscm5zY1NlY3Rpb24JbWF0Y2hncm91cD1zbHJuc2NTZWN0aW9uTm90IHN0YXJ0PSJeXHMqXFtcfiIgZW5kPSdcXScgY29udGFpbnM9c2xybnNjR3JvdXAsc2xybnNjQ29tbWFzLHNscm5zY1NlY3Rpb25Db20KKworc3luIGtleXdvcmQgc2xybnNjSXRlbQkJY29udGFpbmVkIEFnZSBCeXRlcyBEYXRlIEV4cGlyZXMgRnJvbSBIYXMtQm9keSBMaW5lcyBNZXNzYWdlLUlkIE5ld3Nncm91cCBSZWZlcmVuY2VzIFN1YmplY3QgWHJlZgorCitzeW4gbWF0Y2ggc2xybnNjU2NvcmVJdGVtCWNvbnRhaW5lZCAiJS4qJCIJCQkJCQlza2lwZW1wdHkgbmV4dGdyb3VwPXNscm5zY1Njb3JlSXRlbSBjb250YWlucz1zbHJuc2NDb21tZW50CitzeW4gbWF0Y2ggc2xybnNjU2NvcmVJdGVtCWNvbnRhaW5lZCAiXlxzKkV4cGlyZXM6XHMqXChcZFx7MSwyfVstL11cKVx7Mn1cZFx7NH1ccyokIglza2lwZW1wdHkgbmV4dGdyb3VwPXNscm5zY1Njb3JlSXRlbSBjb250YWlucz1zbHJuc2NJdGVtLHNscm5zY0RlbGltLHNscm5zY0RhdGUKK3N5biBtYXRjaCBzbHJuc2NTY29yZUl0ZW0JY29udGFpbmVkICJeXHMqXH5cPVwoQWdlXHxCeXRlc1x8SGFzLUJvZHlcfExpbmVzXCk6XHMqXGRcK1xzKiQiCXNraXBlbXB0eSBuZXh0Z3JvdXA9c2xybnNjU2NvcmVJdGVtIGNvbnRhaW5zPXNscm5zY09wZXIsc2xybnNjSXRlbSxzbHJuc2NEZWxpbSxzbHJuc2NOdW1iZXIKK3N5biBtYXRjaCBzbHJuc2NTY29yZUl0ZW1GaWxsCWNvbnRhaW5lZCAiLiokIgkJCQkJCQlza2lwZW1wdHkgbmV4dGdyb3VwPXNscm5zY1Njb3JlSXRlbSBjb250YWlucz1zbHJuc2NFc2MKK3N5biBtYXRjaCBzbHJuc2NTY29yZUl0ZW0JY29udGFpbmVkICJeXHMqXH5cPVwoRGF0ZVx8RnJvbVx8TWVzc2FnZS1JZFx8TmV3c2dyb3VwXHxSZWZlcmVuY2VzXHxTdWJqZWN0XHxYcmVmXCk6IgluZXh0Z3JvdXA9c2xybnNjU2NvcmVJdGVtRmlsbCBjb250YWlucz1zbHJuc2NPcGVyLHNscm5zY0l0ZW0sc2xybnNjRGVsaW0KK3N5biByZWdpb24gc2xybnNjU2NvcmVJdGVtCWNvbnRhaW5lZCBtYXRjaGdyb3VwPVNwZWNpYWwgc3RhcnQ9Il5ccypcflw9ezo6XD0iIGVuZD0iXlxzKn0iIHNraXBlbXB0eSBuZXh0Z3JvdXA9c2xybnNjU2NvcmVJdGVtIGNvbnRhaW5zPXNscm5zY1Njb3JlSXRlbQorCitzeW4ga2V5d29yZCBzbHJuc2NTY29yZQkJY29udGFpbmVkIFNjb3JlCitzeW4gbWF0Y2ggc2xybnNjU2NvcmVJZGVudAljb250YWluZWQgIiUuKiIKK3N5biBtYXRjaCBzbHJuU2NvcmVMaW5lCQkiXlxzKlNjb3JlOjpcPVxzXCs9XD0tXD1cZFwrXHMqXCglLipcKVw9JCIgc2tpcGVtcHR5IG5leHRncm91cD1zbHJuc2NTY29yZUl0ZW0gY29udGFpbnM9c2xybnNjU2NvcmUsc2xybnNjRGVsaW0sc2xybnNjT3BlcixzbHJuc2NOdW1iZXIsc2xybnNjU2NvcmVJZGVudAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zbHJuc2Nfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc2xybnNjX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHNscm5zY0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHNscm5zY1NlY3Rpb25Db20Jc2xybnNjQ29tbWVudAorICBIaUxpbmsgc2xybnNjR3JvdXAJCVN0cmluZworICBIaUxpbmsgc2xybnNjTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHNscm5zY0RhdGUJCVNwZWNpYWwKKyAgSGlMaW5rIHNscm5zY0RlbGltCQlEZWxpbWl0ZXIKKyAgSGlMaW5rIHNscm5zY0NvbW1hCQlTcGVjaWFsQ2hhcgorICBIaUxpbmsgc2xybnNjT3BlcgkJU3BlY2lhbENoYXIKKyAgSGlMaW5rIHNscm5zY0VzYwkJU3RyaW5nCisgIEhpTGluayBzbHJuc2NTZWN0aW9uU3RkCVR5cGUKKyAgSGlMaW5rIHNscm5zY1NlY3Rpb25Ob3QJRGVsaW1pdGVyCisgIEhpTGluayBzbHJuc2NJdGVtCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHNscm5zY1Njb3JlCQlLZXl3b3JkCisgIEhpTGluayBzbHJuc2NTY29yZUlkZW50CUlkZW50aWZpZXIKKyAgSGlMaW5rIHNscm5zY0luY2x1ZGUJCUtleXdvcmQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic2xybnNjIgorCisiRU9GCXZpbTogdHM9OCBub2V0IHR3PTIwMCBzdz04IHN0cz0wCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zbS52aW0gYi9ydW50aW1lL3N5bnRheC9zbS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxOWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NtLnZpbQpAQCAtMCwwICsxLDk2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJc2VuZG1haWwKKyIgTWFpbnRhaW5lcjoJRHIuIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiA8TmRyT2NoaXBTQFBjYW1wYmVsbEFmYW1pbHkuTWJpej4KKyIgTGFzdCBDaGFuZ2U6CVNlcCAwMiwgMjAwMworIiBWZXJzaW9uOgkzCisiIFVSTDoJaHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI3ZpbWxpbmtzX3N5bnRheAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgQ29tbWVudHMKK3N5biBtYXRjaCBzbUNvbW1lbnQJIl4jLiokIgljb250YWlucz1AU3BlbGwKKworIiBEZWZpbml0aW9ucywgQ2xhc3NlcywgRmlsZXMsIE9wdGlvbnMsIFByZWNlZGVuY2UsIFRydXN0ZWQgVXNlcnMsIE1haWxlcnMKK3N5biBtYXRjaCBzbURlZmluZQkiXltDREZdLiIKK3N5biBtYXRjaCBzbURlZmluZQkiXk9bQWFCY2REZUZmZ0hpTG1Ob1FxclNzVHR1dnhYeVl6Wl0iCitzeW4gbWF0Y2ggc21EZWZpbmUJIl5PXHMiaGU9ZS0xCitzeW4gbWF0Y2ggc21EZWZpbmUJIl5NW2EtekEtWjAtOV1cKywiaGU9ZS0xCitzeW4gbWF0Y2ggc21EZWZpbmUJIl5UIgluZXh0Z3JvdXA9c21UcnVzdGVkCitzeW4gbWF0Y2ggc21EZWZpbmUJIl5QIgluZXh0Z3JvdXA9c21NZXNnCitzeW4gbWF0Y2ggc21UcnVzdGVkCSJcU1wrJCIJCWNvbnRhaW5lZAorc3luIG1hdGNoIHNtTWVzZwkJIlxTKj0iaGU9ZS0xCWNvbnRhaW5lZCBuZXh0Z3JvdXA9c21QcmVjZWRlbmNlCitzeW4gbWF0Y2ggc21QcmVjZWRlbmNlCSItXD1bMC05XVwrIgkJY29udGFpbmVkCisKKyIgSGVhZGVyIEZvcm1hdCAgSD9saXN0LW9mLW1haWxlci1mbGFncz9uYW1lOiBmb3JtYXQKK3N5biBtYXRjaCBzbUhlYWRlclNlcCBjb250YWluZWQgIls/Ol0iCitzeW4gbWF0Y2ggc21IZWFkZXIJIl5IXCg/W2EtekEtWl1cKz9cKVw9Wy1hLXpBLVpfXVwrOiIgY29udGFpbnM9c21IZWFkZXJTZXAKKworIiBWYXJpYWJsZXMKK3N5biBtYXRjaCBzbVZhcgkJIlwkW2EtelwuXHxdIgorCisiIFJ1bGVzZXRzCitzeW4gbWF0Y2ggc21SdWxlc2V0CSJeU1xkKiIKKworIiBSZXdyaXRpbmcgUnVsZXMKK3N5biBtYXRjaCBzbVJld3JpdGUJIl5SIgkJCXNraXB3aGl0ZSBuZXh0Z3JvdXA9c21SZXdyaXRlTGhzVG9rZW4sc21SZXdyaXRlTGhzVXNlcgorCitzeW4gbWF0Y2ggc21SZXdyaXRlTGhzVXNlcgljb250YWluZWQgIlteXHQkXVwrIgkJc2tpcHdoaXRlIG5leHRncm91cD1zbVJld3JpdGVMaHNUb2tlbixzbVJld3JpdGVMaHNTZXAKK3N5biBtYXRjaCBzbVJld3JpdGVMaHNUb2tlbgljb250YWluZWQgIlwoXCRbLSorXVx8XCRbLT1dW0EtWmEtel1cfFwkWVwpXCsiCXNraXB3aGl0ZSBuZXh0Z3JvdXA9c21SZXdyaXRlTGhzVXNlcixzbVJld3JpdGVMaHNTZXAKKworc3luIG1hdGNoIHNtUmV3cml0ZUxoc1NlcAljb250YWluZWQgIlx0XCsiCQkJc2tpcHdoaXRlIG5leHRncm91cD1zbVJld3JpdGVSaHNUb2tlbixzbVJld3JpdGVSaHNVc2VyCisKK3N5biBtYXRjaCBzbVJld3JpdGVSaHNVc2VyCWNvbnRhaW5lZCAiW15cdCRdXCsiCQlza2lwd2hpdGUgbmV4dGdyb3VwPXNtUmV3cml0ZVJoc1Rva2VuLHNtUmV3cml0ZVJoc1NlcAorc3luIG1hdGNoIHNtUmV3cml0ZVJoc1Rva2VuCWNvbnRhaW5lZCAiXChcJFxkXHxcJD5cZFx8XCQjXHxcJEBcfFwkOlstX2EtekEtWl1cK1x8XCRbW1xdXVx8XCRAXHxcJDpcfFwkW0EtWmEtel1cKVwrIiBza2lwd2hpdGUgbmV4dGdyb3VwPXNtUmV3cml0ZVJoc1VzZXIsc21SZXdyaXRlUmhzU2VwCisKK3N5biBtYXRjaCBzbVJld3JpdGVSaHNTZXAJY29udGFpbmVkICJcdFwrIgkJCXNraXB3aGl0ZSBuZXh0Z3JvdXA9c21SZXdyaXRlQ29tbWVudCxzbVJld3JpdGVSaHNTZXAKK3N5biBtYXRjaCBzbVJld3JpdGVSaHNTZXAJY29udGFpbmVkICIkIgorCitzeW4gbWF0Y2ggc21SZXdyaXRlQ29tbWVudAljb250YWluZWQgIlteXHQkXSokIgorCisiIENsYXVzZXMKK3N5biBtYXRjaCBzbUNsYXVzZUVycm9yCQkiXCRcLiIKK3N5biBtYXRjaCBzbUVsc2UJCWNvbnRhaW5lZAkiXCR8Igorc3luIG1hdGNoIHNtQ2xhdXNlQ29udAljb250YWluZWQJIl5cdCIKK3N5biByZWdpb24gc21DbGF1c2UJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IlwkPy4iIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iXCRcLiIgY29udGFpbnM9c21FbHNlLHNtQ2xhdXNlLHNtVmFyLHNtQ2xhdXNlQ29udAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zbWlsX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3NtaWxfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc21DbGF1c2UJU3BlY2lhbAorICBIaUxpbmsgc21DbGF1c2VFcnJvcglFcnJvcgorICBIaUxpbmsgc21Db21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIHNtRGVmaW5lCVN0YXRlbWVudAorICBIaUxpbmsgc21FbHNlCQlEZWxpbWl0ZXIKKyAgSGlMaW5rIHNtSGVhZGVyCVN0YXRlbWVudAorICBIaUxpbmsgc21IZWFkZXJTZXAJU3RyaW5nCisgIEhpTGluayBzbU1lc2cJCVNwZWNpYWwKKyAgSGlMaW5rIHNtUHJlY2VkZW5jZQlOdW1iZXIKKyAgSGlMaW5rIHNtUmV3cml0ZQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHNtUmV3cml0ZUNvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgc21SZXdyaXRlTGhzVG9rZW4JU3RyaW5nCisgIEhpTGluayBzbVJld3JpdGVMaHNVc2VyCVN0YXRlbWVudAorICBIaUxpbmsgc21SZXdyaXRlUmhzVG9rZW4JU3RyaW5nCisgIEhpTGluayBzbVJ1bGVzZXQJUHJlcHJvYworICBIaUxpbmsgc21UcnVzdGVkCVNwZWNpYWwKKyAgSGlMaW5rIHNtVmFyCQlTdHJpbmcKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic20iCisKKyIgdmltOiB0cz0xOApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc21hcnR5LnZpbSBiL3J1bnRpbWUvc3ludGF4L3NtYXJ0eS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRkYTM2NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NtYXJ0eS52aW0KQEAgLTAsMCArMSw4NiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVNtYXJ0eSBUZW1wbGF0ZXMKKyIgTWFpbnRhaW5lcjoJTWFuZnJlZCBTdGllbnN0cmEgbWFuZnJlZC5zdGllbnN0cmFAZHdlcmcubmV0CisiIExhc3QgQ2hhbmdlOiAgTW9uIE5vdiAgNCAxMTo0MjoyMyBDRVQgMjAwMgorIiBGaWxlbmFtZXM6ICAgICoudHBsCisiIFVSTDoJCWh0dHA6Ly93d3cuZHdlcmcubmV0L3Byb2plY3RzL3ZpbS9zbWFydHkudmltCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiAhZXhpc3RzKCJtYWluX3N5bnRheCIpCisgIGlmIHZlcnNpb24gPCA2MDAKKyAgICBzeW50YXggY2xlYXIKKyAgZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKyAgbGV0IG1haW5fc3ludGF4ID0gJ3NtYXJ0eScKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCitydW50aW1lISBzeW50YXgvaHRtbC52aW0KKyJzeW4gY2x1c3RlciBodG1sUHJlcHJvYyBhZGQ9c21hcnR5VW5ab25lCisKK3N5biBtYXRjaCBzbWFydHlCbG9jayBjb250YWluZWQgIltcW1xdXSIKKworc3luIGtleXdvcmQgc21hcnR5VGFnTmFtZSBjYXB0dXJlIGNvbmZpZ19sb2FkIGluY2x1ZGUgaW5jbHVkZV9waHAKK3N5biBrZXl3b3JkIHNtYXJ0eVRhZ05hbWUgaW5zZXJ0IGlmIGVsc2VpZiBlbHNlIGxkZWxpbSByZGVsaW0gbGl0ZXJhbAorc3luIGtleXdvcmQgc21hcnR5VGFnTmFtZSBwaHAgc2VjdGlvbiBzZWN0aW9uZWxzZSBmb3JlYWNoIGZvcmVhY2hlbHNlCitzeW4ga2V5d29yZCBzbWFydHlUYWdOYW1lIHN0cmlwIGFzc2lnbiBjb3VudGVyIGN5Y2xlIGRlYnVnIGV2YWwgZmV0Y2gKK3N5biBrZXl3b3JkIHNtYXJ0eVRhZ05hbWUgaHRtbF9vcHRpb25zIGh0bWxfc2VsZWN0X2RhdGUgaHRtbF9zZWxlY3RfdGltZQorc3luIGtleXdvcmQgc21hcnR5VGFnTmFtZSBtYXRoIHBvcHVwX2luaXQgcG9wdXAgaHRtbF9jaGVja2JveGVzIGh0bWxfaW1hZ2UKK3N5biBrZXl3b3JkIHNtYXJ0eVRhZ05hbWUgaHRtbF9yYWRpb3MgaHRtbF90YWJsZSBtYWlsdG8gdGV4dGZvcm1hdAorCitzeW4ga2V5d29yZCBzbWFydHlNb2RpZmllciBjYXQgY2FwaXRhbGl6ZSBjb3VudF9jaGFyYWN0ZXJzIGNvdW50X3BhcmFncmFwaHMKK3N5biBrZXl3b3JkIHNtYXJ0eU1vZGlmaWVyIGNvdW50X3NlbnRlbmNlcyBjb3VudF93b3JkcyBkYXRlX2Zvcm1hdCBkZWZhdWx0CitzeW4ga2V5d29yZCBzbWFydHlNb2RpZmllciBlc2NhcGUgaW5kZW50IGxvd2VyIG5sMmJyIHJlZ2V4X3JlcGxhY2UgcmVwbGFjZQorc3luIGtleXdvcmQgc21hcnR5TW9kaWZpZXIgc3BhY2lmeSBzdHJpbmdfZm9ybWF0IHN0cmlwIHN0cmlwX3RhZ3MgdHJ1bmNhdGUKK3N5biBrZXl3b3JkIHNtYXJ0eU1vZGlmaWVyIHVwcGVyIHdvcmR3cmFwCisKK3N5biBrZXl3b3JkIHNtYXJ0eUluRnVuYyBuZXEgZXEKKworc3luIGtleXdvcmQgc21hcnR5UHJvcGVydHkgY29udGFpbmVkICJmaWxlPSIKK3N5biBrZXl3b3JkIHNtYXJ0eVByb3BlcnR5IGNvbnRhaW5lZCAibG9vcD0iCitzeW4ga2V5d29yZCBzbWFydHlQcm9wZXJ0eSBjb250YWluZWQgIm5hbWU9Igorc3luIGtleXdvcmQgc21hcnR5UHJvcGVydHkgY29udGFpbmVkICJpbmNsdWRlPSIKK3N5biBrZXl3b3JkIHNtYXJ0eVByb3BlcnR5IGNvbnRhaW5lZCAic2tpcD0iCitzeW4ga2V5d29yZCBzbWFydHlQcm9wZXJ0eSBjb250YWluZWQgInNlY3Rpb249IgorCitzeW4ga2V5d29yZCBzbWFydHlDb25zdGFudCAiXCRzbWFydHkiCisKK3N5biBrZXl3b3JkIHNtYXJ0eURvdCAuCisKK3N5biByZWdpb24gc21hcnR5Wm9uZSBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0ieyIgZW5kPSJ9IiBjb250YWlucz1zbWFydHlQcm9wZXJ0eSwgc21hcnR5U3RyaW5nLCBzbWFydHlCbG9jaywgc21hcnR5VGFnTmFtZSwgc21hcnR5Q29uc3RhbnQsIHNtYXJ0eUluRnVuYywgc21hcnR5TW9kaWZpZXIKKworc3luIHJlZ2lvbiAgaHRtbFN0cmluZyAgIGNvbnRhaW5lZCBzdGFydD0rIisgZW5kPSsiKyBjb250YWlucz1odG1sU3BlY2lhbENoYXIsamF2YVNjcmlwdEV4cHJlc3Npb24sQGh0bWxQcmVwcm9jLHNtYXJ0eVpvbmUKK3N5biByZWdpb24gIGh0bWxTdHJpbmcgICBjb250YWluZWQgc3RhcnQ9KycrIGVuZD0rJysgY29udGFpbnM9aHRtbFNwZWNpYWxDaGFyLGphdmFTY3JpcHRFeHByZXNzaW9uLEBodG1sUHJlcHJvYyxzbWFydHlab25lCisgIHN5biByZWdpb24gaHRtbExpbmsgc3RhcnQ9IjxhXD5cX1tePl0qXDxocmVmXD4iIGVuZD0iPC9hPiJtZT1lLTQgY29udGFpbnM9QFNwZWxsLGh0bWxUYWcsaHRtbEVuZFRhZyxodG1sU3BlY2lhbENoYXIsaHRtbFByZVByb2MsaHRtbENvbW1lbnQsamF2YVNjcmlwdCxAaHRtbFByZXByb2Msc21hcnR5Wm9uZQorCisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zbWFydHlfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc21hcnR5X3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHNtYXJ0eVRhZ05hbWUgSWRlbnRpZmllcgorICBIaUxpbmsgc21hcnR5UHJvcGVydHkgQ29uc3RhbnQKKyAgIiBpZiB5b3Ugd2FudCB0aGUgdGV4dCBpbnNpZGUgdGhlIGJyYWNlcyB0byBiZSBjb2xvcmVkLCB0aGVuCisgICIgcmVtb3ZlIHRoZSBjb21tZW50IGluIGZyb20gb2YgdGhlIG5leHQgc3RhdGVtZW50CisgICJIaUxpbmsgc21hcnR5Wm9uZSBJbmNsdWRlCisgIEhpTGluayBzbWFydHlJbkZ1bmMgRnVuY3Rpb24KKyAgSGlMaW5rIHNtYXJ0eUJsb2NrIENvbnN0YW50CisgIEhpTGluayBzbWFydHlEb3QgU3BlY2lhbENoYXIKKyAgSGlMaW5rIHNtYXJ0eU1vZGlmaWVyIEZ1bmN0aW9uCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzbWFydHkiCisKK2lmIG1haW5fc3ludGF4ID09ICdzbWFydHknCisgIHVubGV0IG1haW5fc3ludGF4CitlbmRpZgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc21pbC52aW0gYi9ydW50aW1lL3N5bnRheC9zbWlsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjUzZDhlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc21pbC52aW0KQEAgLTAsMCArMSwxNTQgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglTTUlMIChTeW5jaHJvbml6ZWQgTXVsdGltZWRpYSBJbnRlZ3JhdGlvbiBMYW5ndWFnZSkKKyIgTWFpbnRhaW5lcjoJSGVydmUgRm91Y2hlciA8SGVydmUuRm91Y2hlckBoZWxpby5vcmc+CisiIFVSTDoJCWh0dHA6Ly93d3cuaGVsaW8ub3JnL3ZpbS9zeW50YXgvc21pbC52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDExCisKKyIgVG8gbGVhcm4gbW9yZSBhYm91dCBTTUlMLCBwbGVhc2UgcmVmZXIgdG8gaHR0cDovL3d3dy53My5vcmcvQXVkaW9WaWRlby8KKyIgYW5kIHRvIGh0dHA6Ly93d3cuaGVsaW8ub3JnL3Byb2R1Y3RzL3NtaWwvdHV0b3JpYWwvCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBTTUlMIGlzIGNhc2Ugc2Vuc2l0aXZlCitzeW4gY2FzZSBtYXRjaAorCisiIGlsbGVnYWwgY2hhcmFjdGVycworc3luIG1hdGNoIHNtaWxFcnJvciAiWzw+Jl0iCitzeW4gbWF0Y2ggc21pbEVycm9yICJbKCkmXSIKKworaWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBsZXQgbWFpbl9zeW50YXggPSAnc21pbCcKK2VuZGlmCisKKyIgdGFncworc3luIG1hdGNoICAgc21pbFNwZWNpYWwgIGNvbnRhaW5lZCAiXFxcZFxkXGRcfFxcLiIKK3N5biBtYXRjaCAgIHNtaWxTcGVjaWFsICBjb250YWluZWQgIigiCitzeW4gbWF0Y2ggICBzbWlsU3BlY2lhbCAgY29udGFpbmVkICJpZCgiCitzeW4gbWF0Y2ggICBzbWlsU3BlY2lhbCAgY29udGFpbmVkICIpIgorc3luIGtleXdvcmQgc21pbFNwZWNpYWwgIGNvbnRhaW5lZCByZW1vdmUgZnJlZXplIHRydWUgZmFsc2Ugb24gb2ZmIG92ZXJkdWIgY2FwdGlvbiBuZXcgcGF1c2UgcmVwbGFjZQorc3luIGtleXdvcmQgc21pbFNwZWNpYWwgIGNvbnRhaW5lZCBmaXJzdCBsYXN0CitzeW4ga2V5d29yZCBzbWlsU3BlY2lhbCAgY29udGFpbmVkIGZpbGwgbWVldCBzbGljZSBzY3JvbGwgaGlkZGVuCitzeW4gcmVnaW9uICBzbWlsU3RyaW5nICAgY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9c21pbFNwZWNpYWwKK3N5biByZWdpb24gIHNtaWxTdHJpbmcgICBjb250YWluZWQgc3RhcnQ9KycrIHNraXA9K1xcXFxcfFxcJysgZW5kPSsnKyBjb250YWlucz1zbWlsU3BlY2lhbAorc3luIG1hdGNoICAgc21pbFZhbHVlICAgIGNvbnRhaW5lZCAiPVtcdCBdKlteJyIgXHQ+XVteIFx0Pl0qImhzPXMrMQorc3luIHJlZ2lvbiAgc21pbEVuZFRhZwkJICAgc3RhcnQ9KzwvKwkgZW5kPSs+KwkgICAgICBjb250YWlucz1zbWlsVGFnTixzbWlsVGFnRXJyb3IKK3N5biByZWdpb24gIHNtaWxUYWcJCSAgIHN0YXJ0PSs8W14vXSsgZW5kPSs+KwkgICAgICBjb250YWlucz1zbWlsVGFnTixzbWlsU3RyaW5nLHNtaWxBcmcsc21pbFZhbHVlLHNtaWxUYWdFcnJvcixzbWlsRXZlbnQsc21pbENzc0RlZmluaXRpb24KK3N5biBtYXRjaCAgIHNtaWxUYWdOICAgICBjb250YWluZWQgKzxccypbLWEtekEtWjAtOV1cKyttcz1zKzEgY29udGFpbnM9c21pbFRhZ05hbWUsc21pbFNwZWNpYWxUYWdOYW1lCitzeW4gbWF0Y2ggICBzbWlsVGFnTiAgICAgY29udGFpbmVkICs8L1xzKlstYS16QS1aMC05XVwrK21zPXMrMiBjb250YWlucz1zbWlsVGFnTmFtZSxzbWlsU3BlY2lhbFRhZ05hbWUKK3N5biBtYXRjaCAgIHNtaWxUYWdFcnJvciBjb250YWluZWQgIltePl08Im1zPXMrMQorCisiIHRhZyBuYW1lcworc3luIGtleXdvcmQgc21pbFRhZ05hbWUgY29udGFpbmVkIHNtaWwgaGVhZCBib2R5IGFuY2hvciBhIHN3aXRjaCByZWdpb24gbGF5b3V0IG1ldGEKK3N5biBtYXRjaCAgIHNtaWxUYWdOYW1lIGNvbnRhaW5lZCAicm9vdC1sYXlvdXQiCitzeW4ga2V5d29yZCBzbWlsVGFnTmFtZSBjb250YWluZWQgcGFyIHNlcQorc3luIGtleXdvcmQgc21pbFRhZ05hbWUgY29udGFpbmVkIGFuaW1hdGlvbiB2aWRlbyBpbWcgYXVkaW8gcmVmIHRleHQgdGV4dHN0cmVhbQorc3luIG1hdGNoIHNtaWxUYWdOYW1lIGNvbnRhaW5lZCAiXDxcKGhlYWRcfGJvZHlcKVw+IgorCisKKyIgbGVnYWwgYXJnIG5hbWVzCitzeW4ga2V5d29yZCBzbWlsQXJnIGNvbnRhaW5lZCBkdXIgYmVnaW4gZW5kIGhyZWYgdGFyZ2V0IGlkIGNvb3JkcyBzaG93IHRpdGxlIGFic3RyYWN0IGF1dGhvciBjb3B5cmlnaHQgYWx0CitzeW4ga2V5d29yZCBzbWlsQXJnIGNvbnRhaW5lZCBsZWZ0IHRvcCB3aWR0aCBoZWlnaHQgZml0IHNyYyBuYW1lIGNvbnRlbnQgZmlsbCBsb25nZGVzYyByZXBlYXQgdHlwZQorc3luIG1hdGNoICAgc21pbEFyZyBjb250YWluZWQgInotaW5kZXgiCitzeW4gbWF0Y2ggICBzbWlsQXJnIGNvbnRhaW5lZCAiIGVuZC1zeW5jIgorc3luIG1hdGNoICAgc21pbEFyZyBjb250YWluZWQgIiByZWdpb24iCitzeW4gbWF0Y2ggICBzbWlsQXJnIGNvbnRhaW5lZCAiYmFja2dyb3VuZC1jb2xvciIKK3N5biBtYXRjaCAgIHNtaWxBcmcgY29udGFpbmVkICJzeXN0ZW0tYml0cmF0ZSIKK3N5biBtYXRjaCAgIHNtaWxBcmcgY29udGFpbmVkICJzeXN0ZW0tY2FwdGlvbnMiCitzeW4gbWF0Y2ggICBzbWlsQXJnIGNvbnRhaW5lZCAic3lzdGVtLW92ZXJkdWItb3ItY2FwdGlvbiIKK3N5biBtYXRjaCAgIHNtaWxBcmcgY29udGFpbmVkICJzeXN0ZW0tbGFuZ3VhZ2UiCitzeW4gbWF0Y2ggICBzbWlsQXJnIGNvbnRhaW5lZCAic3lzdGVtLXJlcXVpcmVkIgorc3luIG1hdGNoICAgc21pbEFyZyBjb250YWluZWQgInN5c3RlbS1zY3JlZW4tZGVwdGgiCitzeW4gbWF0Y2ggICBzbWlsQXJnIGNvbnRhaW5lZCAic3lzdGVtLXNjcmVlbi1zaXplIgorc3luIG1hdGNoICAgc21pbEFyZyBjb250YWluZWQgImNsaXAtYmVnaW4iCitzeW4gbWF0Y2ggICBzbWlsQXJnIGNvbnRhaW5lZCAiY2xpcC1lbmQiCitzeW4gbWF0Y2ggICBzbWlsQXJnIGNvbnRhaW5lZCAic2tpcC1jb250ZW50IgorCisKKyIgU01JTCBCb3N0b24gZXh0LgorIiBUaGlzIGFyZSBuZXcgU01JTCBmdW5jdGlvbm5hbGl0aWVzIHNlZW4gb24gd3d3LnczLm9yZyBvbiBBdWd1c3QgM3JkIDE5OTkKKworIiBBbmltYXRpb24KK3N5biBrZXl3b3JkIHNtaWxUYWdOYW1lIGNvbnRhaW5lZCBhbmltYXRlIHNldCBtb3ZlCitzeW4ga2V5d29yZCBzbWlsQXJnIGNvbnRhaW5lZCBjYWxjTW9kZSBmcm9tIHRvIGJ5IGFkZGl0aXZlIHZhbHVlcyBvcmlnaW4gcGF0aAorc3luIGtleXdvcmQgc21pbEFyZyBjb250YWluZWQgYWNjdW11bGF0ZSBob2xkIGF0dHJpYnV0ZQorc3luIG1hdGNoICAgc21pbEFyZyBjb250YWluZWQgInhtbDpsaW5rIgorc3luIGtleXdvcmQgc21pbFNwZWNpYWwgY29udGFpbmVkIGRpc2NyZXRlIGxpbmVhciBzcGxpbmUgcGFyZW50IGxheW91dAorc3luIGtleXdvcmQgc21pbFNwZWNpYWwgY29udGFpbmVkIHRvcCBsZWZ0IHNpbXBsZQorCisiIExpbmtpbmcKK3N5biBrZXl3b3JkIHNtaWxUYWdOYW1lIGNvbnRhaW5lZCBhcmVhCitzeW4ga2V5d29yZCBzbWlsQXJnIGNvbnRhaW5lZCBhY3R1YXRlIGJlaGF2aW9yIGlubGluZSBzb3VyY2VWb2x1bWUKK3N5biBrZXl3b3JkIHNtaWxBcmcgY29udGFpbmVkIGRlc3RpbmF0aW9uVm9sdW1lIGRlc3RpbmF0aW9uUGxheXN0YXRlIHRhYmluZGV4CitzeW4ga2V5d29yZCBzbWlsQXJnIGNvbnRhaW5lZCBjbGFzcyBzdHlsZSBsYW5nIGRpciBvbmNsaWNrIG9uZGJsY2xpY2sgb25tb3VzZWRvd24gb25tb3VzZXVwIG9ubW91c2VvdmVyIG9ubW91c2Vtb3ZlIG9ubW91c2VvdXQgb25rZXlwcmVzcyBvbmtleWRvd24gb25rZXl1cCBzaGFwZSBub2hyZWYgYWNjZXNza2V5IG9uZm9jdXMgb25ibHVyCitzeW4ga2V5d29yZCBzbWlsU3BlY2lhbCBjb250YWluZWQgcGxheSBwYXVzZSBzdG9wIHJlY3QgY2lyYyBwb2x5IGNoaWxkIHBhciBzZXEKKworIiBNZWRpYSBPYmplY3QKK3N5biBrZXl3b3JkIHNtaWxUYWdOYW1lIGNvbnRhaW5lZCBydHBtYXAKK3N5biBrZXl3b3JkIHNtaWxBcmcgY29udGFpbmVkIHBvcnQgdHJhbnNwb3J0IGVuY29kaW5nIHBheWxvYWQgY2xpcEJlZ2luIGNsaXBFbmQKK3N5biBtYXRjaCAgIHNtaWxBcmcgY29udGFpbmVkICJmbXQtbGlzdCIKKworIiBUaW1pbmcgYW5kIFN5bmNocm9uaXphdGlvbgorc3luIGtleXdvcmQgc21pbFRhZ05hbWUgY29udGFpbmVkIGV4Y2wKK3N5biBrZXl3b3JkIHNtaWxBcmcgY29udGFpbmVkIGJlZ2luRXZlbnQgZW5kRXZlbnQgZXZlbnRSZXN0YXJ0IGVuZFN5bmMgcmVwZWF0Q291bnQgcmVwZWF0RHVyCitzeW4ga2V5d29yZCBzbWlsQXJnIGNvbnRhaW5lZCBzeW5jQmVoYXZpb3Igc3luY1RvbGVyYW5jZQorc3luIGtleXdvcmQgc21pbFNwZWNpYWwgY29udGFpbmVkIGNhblNsaXAgbG9ja2VkCisKKyIgc3BlY2lhbCBjaGFyYWN0ZXJzCitzeW4gbWF0Y2ggc21pbFNwZWNpYWxDaGFyICImW147XSo7IgorCitpZiBleGlzdHMoInNtaWxfd3JvbmdfY29tbWVudHMiKQorICBzeW4gcmVnaW9uIHNtaWxDb21tZW50CQlzdGFydD0rPCEtLSsJICBlbmQ9Ky0tPisKK2Vsc2UKKyAgc3luIHJlZ2lvbiBzbWlsQ29tbWVudAkJc3RhcnQ9KzwhKwkgIGVuZD0rPisgICBjb250YWlucz1zbWlsQ29tbWVudFBhcnQsc21pbENvbW1lbnRFcnJvcgorICBzeW4gbWF0Y2ggIHNtaWxDb21tZW50RXJyb3IgY29udGFpbmVkICJbXj48IV0iCisgIHN5biByZWdpb24gc21pbENvbW1lbnRQYXJ0ICBjb250YWluZWQgc3RhcnQ9Ky0tKwkgIGVuZD0rLS0rCitlbmRpZgorc3luIHJlZ2lvbiBzbWlsQ29tbWVudAkJICAgICAgc3RhcnQ9KzwhRE9DVFlQRSsga2VlcGVuZCBlbmQ9Kz4rCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3NtaWxfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc21pbF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBzbWlsVGFnCQkJRnVuY3Rpb24KKyAgSGlMaW5rIHNtaWxFbmRUYWcJCQlJZGVudGlmaWVyCisgIEhpTGluayBzbWlsQXJnCQkJVHlwZQorICBIaUxpbmsgc21pbFRhZ05hbWUJCQlzbWlsU3RhdGVtZW50CisgIEhpTGluayBzbWlsU3BlY2lhbFRhZ05hbWUJCUV4Y2VwdGlvbgorICBIaUxpbmsgc21pbFZhbHVlCQkJVmFsdWUKKyAgSGlMaW5rIHNtaWxTcGVjaWFsQ2hhcgkJU3BlY2lhbAorCisgIEhpTGluayBzbWlsU3BlY2lhbAkJCVNwZWNpYWwKKyAgSGlMaW5rIHNtaWxTcGVjaWFsQ2hhcgkJU3BlY2lhbAorICBIaUxpbmsgc21pbFN0cmluZwkJCVN0cmluZworICBIaUxpbmsgc21pbFN0YXRlbWVudAkJCVN0YXRlbWVudAorICBIaUxpbmsgc21pbENvbW1lbnQJCQlDb21tZW50CisgIEhpTGluayBzbWlsQ29tbWVudFBhcnQJCUNvbW1lbnQKKyAgSGlMaW5rIHNtaWxQcmVQcm9jCQkJUHJlUHJvYworICBIaUxpbmsgc21pbFZhbHVlCQkJU3RyaW5nCisgIEhpTGluayBzbWlsQ29tbWVudEVycm9yCQlzbWlsRXJyb3IKKyAgSGlMaW5rIHNtaWxUYWdFcnJvcgkJCXNtaWxFcnJvcgorICBIaUxpbmsgc21pbEVycm9yCQkJRXJyb3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic21pbCIKKworaWYgbWFpbl9zeW50YXggPT0gJ3NtaWwnCisgIHVubGV0IG1haW5fc3ludGF4CitlbmRpZgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc21pdGgudmltIGIvcnVudGltZS9zeW50YXgvc21pdGgudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNWNlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zbWl0aC52aW0KQEAgLTAsMCArMSw1MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVNNSVRICisiIE1haW50YWluZXI6CVJhZmFsIE0uIFN1bGVqbWFuIDxybXNAcG9jenRhLm9uZXQucGw+CisiIExhc3QgQ2hhbmdlOgkyMS4wNy4yMDAwCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKworc3luIG1hdGNoIHNtaXRoQ29tbWVudCAiOy4qJCIKKworc3luIG1hdGNoIHNtaXRoTnVtYmVyCQkiXDxbKy1dKlswLTldXGQqXD4iCisKK3N5biBtYXRjaCBzbWl0aFJlZ2lzdGVyCQkiUltcW10qWzAtOV0qW1xdXSoiCisKK3N5biBtYXRjaCBzbWl0aEtleXdvcmQJIkNPUlx8TU9WXHxNVUxcfE5PVFx8U1RPUFx8U1VCXHxOT1BcfEJMQVx8UkVQIgorCitzeW4gcmVnaW9uIHNtaXRoU3RyaW5nCQlzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisKKworCitzeW4gY2FzZSBtYXRjaAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zbWl0aF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zbWl0aF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBzbWl0aFJlZ2lzdGVyCUlkZW50aWZpZXIKKyAgSGlMaW5rIHNtaXRoS2V5d29yZAlLZXl3b3JkCisJSGlMaW5rIHNtaXRoQ29tbWVudCBDb21tZW50CisJSGlMaW5rIHNtaXRoU3RyaW5nIFN0cmluZworICBIaUxpbmsgc21pdGhOdW1iZXIJTnVtYmVyCisKKwlkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic21pdGgiCisKKyIgdmltOiB0cz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zbWwudmltIGIvcnVudGltZS9zeW50YXgvc21sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2MzMzViCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc21sLnZpbQpAQCAtMCwwICsxLDIzMCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBTTUwKKyIgRmlsZW5hbWVzOiAgICAqLnNtbCAqLnNpZworIiBNYWludGFpbmVyczoJTWFya3VzIE1vdHRsCQk8bWFya3VzQG9lZmFpLmF0PgorIgkJRmFicml6aW8gWmVubyBDb3JuZWxsaQk8emVub0BmaWxpYnVzdGEuY3JlbWEudW5pbWkuaXQ+CisiIFVSTDoJCWh0dHA6Ly93d3cuYWkudW5pdmllLmFjLmF0L35tYXJrdXMvdmltL3N5bnRheC9zbWwudmltCisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAxMQorIgkJMjAwMSBOb3YgMjAgLSBGaXhlZCBzbWFsbCBoaWdobGlnaHRpbmcgYnVnIHdpdGggbW9kdWxlcyAoTU0pCisiCQkyMDAxIEF1ZyAyOSAtIEZpeGVkIHNtYWxsIGhpZ2hsaWdodGluZyBidWcgIChNTSkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFNNTCBpcyBjYXNlIHNlbnNpdGl2ZS4KK3N5biBjYXNlIG1hdGNoCisKKyIgbG93ZXJjYXNlIGlkZW50aWZpZXIgLSB0aGUgc3RhbmRhcmQgd2F5IHRvIG1hdGNoCitzeW4gbWF0Y2ggICAgc21sTENJZGVudGlmaWVyIC9cPFwoXGxcfF9cKVwoXHdcfCdcKSpcPi8KKworc3luIG1hdGNoICAgIHNtbEtleUNoYXIgICAgInwiCisKKyIgRXJyb3JzCitzeW4gbWF0Y2ggICAgc21sQnJhY2VFcnIgICAifSIKK3N5biBtYXRjaCAgICBzbWxCcmFja0VyciAgICJcXSIKK3N5biBtYXRjaCAgICBzbWxQYXJlbkVyciAgICIpIgorc3luIG1hdGNoICAgIHNtbENvbW1lbnRFcnIgIlwqKSIKK3N5biBtYXRjaCAgICBzbWxUaGVuRXJyICAgICJcPHRoZW5cPiIKKworIiBFcnJvci1oaWdobGlnaHRpbmcgb2YgImVuZCIgd2l0aG91dCBzeW5jaHJvbml6YXRpb246CisiIGFzIGtleXdvcmQgb3IgYXMgZXJyb3IgKGRlZmF1bHQpCitpZiBleGlzdHMoInNtbF9ub2VuZF9lcnJvciIpCisgIHN5biBtYXRjaCAgICBzbWxLZXl3b3JkICAgICJcPGVuZFw+IgorZWxzZQorICBzeW4gbWF0Y2ggICAgc21sRW5kRXJyICAgICAiXDxlbmRcPiIKK2VuZGlmCisKKyIgU29tZSBjb252ZW5pZW50IGNsdXN0ZXJzCitzeW4gY2x1c3RlciAgc21sQWxsRXJycyBjb250YWlucz1zbWxCcmFjZUVycixzbWxCcmFja0VycixzbWxQYXJlbkVycixzbWxDb21tZW50RXJyLHNtbEVuZEVycixzbWxUaGVuRXJyCisKK3N5biBjbHVzdGVyICBzbWxBRU5vUGFyZW4gY29udGFpbnM9c21sQnJhY2VFcnIsc21sQnJhY2tFcnIsc21sQ29tbWVudEVycixzbWxFbmRFcnIsc21sVGhlbkVycgorCitzeW4gY2x1c3RlciAgc21sQ29udGFpbmVkIGNvbnRhaW5zPXNtbFRvZG8sc21sUHJlRGVmLHNtbE1vZFBhcmFtLHNtbE1vZFBhcmFtMSxzbWxQcmVNUFJlc3RyLHNtbE1QUmVzdHIsc21sTVBSZXN0cjEsc21sTVBSZXN0cjIsc21sTVBSZXN0cjMsc21sTW9kUkhTLHNtbEZ1bmNXaXRoLHNtbEZ1bmNTdHJ1Y3Qsc21sTW9kVHlwZVJlc3RyLHNtbE1vZFRSV2l0aCxzbWxXaXRoLHNtbFdpdGhSZXN0LHNtbE1vZFR5cGUsc21sRnVsbE1vZAorCisKKyIgRW5jbG9zaW5nIGRlbGltaXRlcnMKK3N5biByZWdpb24gICBzbWxFbmNsIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9c21sS2V5d29yZCBzdGFydD0iKCIgbWF0Y2hncm91cD1zbWxLZXl3b3JkIGVuZD0iKSIgY29udGFpbnM9QUxMQlVULEBzbWxDb250YWluZWQsc21sUGFyZW5FcnIKK3N5biByZWdpb24gICBzbWxFbmNsIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9c21sS2V5d29yZCBzdGFydD0ieyIgbWF0Y2hncm91cD1zbWxLZXl3b3JkIGVuZD0ifSIgIGNvbnRhaW5zPUFMTEJVVCxAc21sQ29udGFpbmVkLHNtbEJyYWNlRXJyCitzeW4gcmVnaW9uICAgc21sRW5jbCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXNtbEtleXdvcmQgc3RhcnQ9IlxbIiBtYXRjaGdyb3VwPXNtbEtleXdvcmQgZW5kPSJcXSIgY29udGFpbnM9QUxMQlVULEBzbWxDb250YWluZWQsc21sQnJhY2tFcnIKK3N5biByZWdpb24gICBzbWxFbmNsIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9c21sS2V5d29yZCBzdGFydD0iI1xbIiBtYXRjaGdyb3VwPXNtbEtleXdvcmQgZW5kPSJcXSIgY29udGFpbnM9QUxMQlVULEBzbWxDb250YWluZWQsc21sQnJhY2tFcnIKKworCisiIENvbW1lbnRzCitzeW4gcmVnaW9uICAgc21sQ29tbWVudCBzdGFydD0iKFwqIiBlbmQ9IlwqKSIgY29udGFpbnM9c21sQ29tbWVudCxzbWxUb2RvCitzeW4ga2V5d29yZCAgc21sVG9kbyBjb250YWluZWQgVE9ETyBGSVhNRSBYWFgKKworCisiIGxldAorc3luIHJlZ2lvbiAgIHNtbEVuZCBtYXRjaGdyb3VwPXNtbEtleXdvcmQgc3RhcnQ9Ilw8bGV0XD4iIG1hdGNoZ3JvdXA9c21sS2V5d29yZCBlbmQ9Ilw8ZW5kXD4iIGNvbnRhaW5zPUFMTEJVVCxAc21sQ29udGFpbmVkLHNtbEVuZEVycgorCisiIGxvY2FsCitzeW4gcmVnaW9uICAgc21sRW5kIG1hdGNoZ3JvdXA9c21sS2V5d29yZCBzdGFydD0iXDxsb2NhbFw+IiBtYXRjaGdyb3VwPXNtbEtleXdvcmQgZW5kPSJcPGVuZFw+IiBjb250YWlucz1BTExCVVQsQHNtbENvbnRhaW5lZCxzbWxFbmRFcnIKKworIiBhYnN0eXBlCitzeW4gcmVnaW9uICAgc21sTm9uZSBtYXRjaGdyb3VwPXNtbEtleXdvcmQgc3RhcnQ9Ilw8YWJzdHlwZVw+IiBtYXRjaGdyb3VwPXNtbEtleXdvcmQgZW5kPSJcPGVuZFw+IiBjb250YWlucz1BTExCVVQsQHNtbENvbnRhaW5lZCxzbWxFbmRFcnIKKworIiBiZWdpbgorc3luIHJlZ2lvbiAgIHNtbEVuZCBtYXRjaGdyb3VwPXNtbEtleXdvcmQgc3RhcnQ9Ilw8YmVnaW5cPiIgbWF0Y2hncm91cD1zbWxLZXl3b3JkIGVuZD0iXDxlbmRcPiIgY29udGFpbnM9QUxMQlVULEBzbWxDb250YWluZWQsc21sRW5kRXJyCisKKyIgaWYKK3N5biByZWdpb24gICBzbWxOb25lIG1hdGNoZ3JvdXA9c21sS2V5d29yZCBzdGFydD0iXDxpZlw+IiBtYXRjaGdyb3VwPXNtbEtleXdvcmQgZW5kPSJcPHRoZW5cPiIgY29udGFpbnM9QUxMQlVULEBzbWxDb250YWluZWQsc21sVGhlbkVycgorCisKKyIiIE1vZHVsZXMKKworIiAic3RydWN0Igorc3luIHJlZ2lvbiAgIHNtbFN0cnVjdCBtYXRjaGdyb3VwPXNtbE1vZHVsZSBzdGFydD0iXDxzdHJ1Y3RcPiIgbWF0Y2hncm91cD1zbWxNb2R1bGUgZW5kPSJcPGVuZFw+IiBjb250YWlucz1BTExCVVQsQHNtbENvbnRhaW5lZCxzbWxFbmRFcnIKKworIiAic2lnIgorc3luIHJlZ2lvbiAgIHNtbFNpZyBtYXRjaGdyb3VwPXNtbE1vZHVsZSBzdGFydD0iXDxzaWdcPiIgbWF0Y2hncm91cD1zbWxNb2R1bGUgZW5kPSJcPGVuZFw+IiBjb250YWlucz1BTExCVVQsQHNtbENvbnRhaW5lZCxzbWxFbmRFcnIsc21sTW9kdWxlCitzeW4gcmVnaW9uICAgc21sTW9kU3BlYyBtYXRjaGdyb3VwPXNtbEtleXdvcmQgc3RhcnQ9Ilw8c3RydWN0dXJlXD4iIG1hdGNoZ3JvdXA9c21sTW9kdWxlIGVuZD0iXDxcdVwoXHdcfCdcKSpcPiIgY29udGFpbmVkIGNvbnRhaW5zPUBzbWxBbGxFcnJzLHNtbENvbW1lbnQgc2tpcHdoaXRlIHNraXBlbXB0eSBuZXh0Z3JvdXA9c21sTW9kVFJXaXRoLHNtbE1QUmVzdHIKKworIiAib3BlbiIKK3N5biByZWdpb24gICBzbWxOb25lIG1hdGNoZ3JvdXA9c21sS2V5d29yZCBzdGFydD0iXDxvcGVuXD4iIG1hdGNoZ3JvdXA9c21sTW9kdWxlIGVuZD0iXDxcdVwoXHdcfCdcKSpcKFwuXHVcKFx3XHwnXCkqXCkqXD4iIGNvbnRhaW5zPUBzbWxBbGxFcnJzLHNtbENvbW1lbnQKKworIiAic3RydWN0dXJlIiAtIHNvbWV3aGF0IGNvbXBsaWNhdGVkIHN0dWZmIDstKQorc3luIHJlZ2lvbiAgIHNtbE1vZHVsZSBtYXRjaGdyb3VwPXNtbEtleXdvcmQgc3RhcnQ9Ilw8XChzdHJ1Y3R1cmVcfGZ1bmN0b3JcKVw+IiBtYXRjaGdyb3VwPXNtbE1vZHVsZSBlbmQ9Ilw8XHVcKFx3XHwnXCkqXD4iIGNvbnRhaW5zPUBzbWxBbGxFcnJzLHNtbENvbW1lbnQgc2tpcHdoaXRlIHNraXBlbXB0eSBuZXh0Z3JvdXA9c21sUHJlRGVmCitzeW4gcmVnaW9uICAgc21sUHJlRGVmIHN0YXJ0PSIuIm1lPWUtMSBtYXRjaGdyb3VwPXNtbEtleXdvcmQgZW5kPSJcbFx8PSJtZT1lLTEgY29udGFpbmVkIGNvbnRhaW5zPUBzbWxBbGxFcnJzLHNtbENvbW1lbnQsc21sTW9kUGFyYW0sc21sTW9kVHlwZVJlc3RyLHNtbE1vZFRSV2l0aCBuZXh0Z3JvdXA9c21sTW9kUHJlUkhTCitzeW4gcmVnaW9uICAgc21sTW9kUGFyYW0gc3RhcnQ9IihbXipdIiBlbmQ9IikiIGNvbnRhaW5lZCBjb250YWlucz1Ac21sQUVOb1BhcmVuLHNtbE1vZFBhcmFtMQorc3luIG1hdGNoICAgIHNtbE1vZFBhcmFtMSAiXDxcdVwoXHdcfCdcKSpcPiIgY29udGFpbmVkIHNraXB3aGl0ZSBza2lwZW1wdHkgbmV4dGdyb3VwPXNtbFByZU1QUmVzdHIKKworc3luIHJlZ2lvbiAgIHNtbFByZU1QUmVzdHIgc3RhcnQ9Ii4ibWU9ZS0xIGVuZD0iKSJtZT1lLTEgY29udGFpbmVkIGNvbnRhaW5zPUBzbWxBbGxFcnJzLHNtbENvbW1lbnQsc21sTVBSZXN0cixzbWxNb2RUeXBlUmVzdHIKKworc3luIHJlZ2lvbiAgIHNtbE1QUmVzdHIgc3RhcnQ9IjoiIGVuZD0iLiJtZT1lLTEgY29udGFpbmVkIGNvbnRhaW5zPUBzbWxDb21tZW50IHNraXB3aGl0ZSBza2lwZW1wdHkgbmV4dGdyb3VwPXNtbE1QUmVzdHIxLHNtbE1QUmVzdHIyLHNtbE1QUmVzdHIzCitzeW4gcmVnaW9uICAgc21sTVBSZXN0cjEgbWF0Y2hncm91cD1zbWxNb2R1bGUgc3RhcnQ9Ilxzc2lnXHNcPSIgbWF0Y2hncm91cD1zbWxNb2R1bGUgZW5kPSJcPGVuZFw+IiBjb250YWluZWQgY29udGFpbnM9QUxMQlVULEBzbWxDb250YWluZWQsc21sRW5kRXJyLHNtbE1vZHVsZQorc3luIHJlZ2lvbiAgIHNtbE1QUmVzdHIyIHN0YXJ0PSJcc2Z1bmN0b3JcKFxzXHwoXClcPSJtZT1lLTEgbWF0Y2hncm91cD1zbWxLZXl3b3JkIGVuZD0iLT4iIGNvbnRhaW5lZCBjb250YWlucz1Ac21sQWxsRXJycyxzbWxDb21tZW50LHNtbE1vZFBhcmFtIHNraXB3aGl0ZSBza2lwZW1wdHkgbmV4dGdyb3VwPXNtbEZ1bmNXaXRoCitzeW4gbWF0Y2ggICAgc21sTVBSZXN0cjMgIlx3XChcd1x8J1wpKlwoXC5cd1woXHdcfCdcKSpcKSoiIGNvbnRhaW5lZAorc3luIG1hdGNoICAgIHNtbE1vZFByZVJIUyAiPSIgY29udGFpbmVkIHNraXB3aGl0ZSBza2lwZW1wdHkgbmV4dGdyb3VwPXNtbE1vZFBhcmFtLHNtbEZ1bGxNb2QKK3N5biByZWdpb24gICBzbWxNb2RSSFMgc3RhcnQ9Ii4iIGVuZD0iLlx3XHwoW14qXSJtZT1lLTIgY29udGFpbmVkIGNvbnRhaW5zPXNtbENvbW1lbnQgc2tpcHdoaXRlIHNraXBlbXB0eSBuZXh0Z3JvdXA9c21sTW9kUGFyYW0sc21sRnVsbE1vZAorc3luIG1hdGNoICAgIHNtbEZ1bGxNb2QgIlw8XHVcKFx3XHwnXCkqXChcLlx1XChcd1x8J1wpKlwpKiIgY29udGFpbmVkIHNraXB3aGl0ZSBza2lwZW1wdHkgbmV4dGdyb3VwPXNtbEZ1bmNXaXRoCisKK3N5biByZWdpb24gICBzbWxGdW5jV2l0aCBzdGFydD0iKFteKl0ibWU9ZS0xIGVuZD0iKSIgY29udGFpbmVkIGNvbnRhaW5zPXNtbENvbW1lbnQsc21sV2l0aCxzbWxGdW5jU3RydWN0CitzeW4gcmVnaW9uICAgc21sRnVuY1N0cnVjdCBtYXRjaGdyb3VwPXNtbE1vZHVsZSBzdGFydD0iW15hLXpBLVpdc3RydWN0XD4iaHM9cysxIG1hdGNoZ3JvdXA9c21sTW9kdWxlIGVuZD0iXDxlbmRcPiIgY29udGFpbnM9QUxMQlVULEBzbWxDb250YWluZWQsc21sRW5kRXJyCisKK3N5biBtYXRjaCAgICBzbWxNb2RUeXBlUmVzdHIgIlw8XHdcKFx3XHwnXCkqXChcLlx3XChcd1x8J1wpKlwpKlw+IiBjb250YWluZWQKK3N5biByZWdpb24gICBzbWxNb2RUUldpdGggc3RhcnQ9IjpccyooImhzPXMrMSBlbmQ9IikiIGNvbnRhaW5lZCBjb250YWlucz1Ac21sQUVOb1BhcmVuLHNtbFdpdGgKK3N5biBtYXRjaCAgICBzbWxXaXRoICJcPFwoXHVcKFx3XHwnXCkqXC5cKSpcd1woXHdcfCdcKSpcPiIgY29udGFpbmVkIHNraXB3aGl0ZSBza2lwZW1wdHkgbmV4dGdyb3VwPXNtbFdpdGhSZXN0CitzeW4gcmVnaW9uICAgc21sV2l0aFJlc3Qgc3RhcnQ9IlteKV0iIGVuZD0iKSJtZT1lLTEgY29udGFpbmVkIGNvbnRhaW5zPUFMTEJVVCxAc21sQ29udGFpbmVkCisKKyIgInNpZ25hdHVyZSIKK3N5biByZWdpb24gICBzbWxLZXl3b3JkIHN0YXJ0PSJcPHNpZ25hdHVyZVw+IiBtYXRjaGdyb3VwPXNtbE1vZHVsZSBlbmQ9Ilw8XHdcKFx3XHwnXCkqXD4iIGNvbnRhaW5zPXNtbENvbW1lbnQgc2tpcHdoaXRlIHNraXBlbXB0eSBuZXh0Z3JvdXA9c21sTVREZWYKK3N5biBtYXRjaCAgICBzbWxNVERlZiAiPVxzKlx3XChcd1x8J1wpKlw+ImhzPXMrMSxtZT1zCisKK3N5biBrZXl3b3JkICBzbWxLZXl3b3JkICBhbmQgYW5kYWxzbyBjYXNlCitzeW4ga2V5d29yZCAgc21sS2V5d29yZCAgZGF0YXR5cGUgZWxzZSBlcXR5cGUKK3N5biBrZXl3b3JkICBzbWxLZXl3b3JkICBleGNlcHRpb24gZm4gZnVuIGhhbmRsZQorc3luIGtleXdvcmQgIHNtbEtleXdvcmQgIGluIGluZml4IGluZml4bCBpbmZpeHIKK3N5biBrZXl3b3JkICBzbWxLZXl3b3JkICBtYXRjaCBub25maXggb2Ygb3JlbHNlCitzeW4ga2V5d29yZCAgc21sS2V5d29yZCAgcmFpc2UgaGFuZGxlIHR5cGUKK3N5biBrZXl3b3JkICBzbWxLZXl3b3JkICB2YWwgd2hlcmUgd2hpbGUgd2l0aCB3aXRodHlwZQorCitzeW4ga2V5d29yZCAgc21sVHlwZSAgICAgYm9vbCBjaGFyIGV4biBpbnQgbGlzdCBvcHRpb24KK3N5biBrZXl3b3JkICBzbWxUeXBlICAgICByZWFsIHN0cmluZyB1bml0CisKK3N5biBrZXl3b3JkICBzbWxPcGVyYXRvciBkaXYgbW9kIG5vdCBvciBxdW90IHJlbQorCitzeW4ga2V5d29yZCAgc21sQm9vbGVhbiAgICAgIHRydWUgZmFsc2UKK3N5biBtYXRjaCAgICBzbWxDb25zdHJ1Y3RvciAgIihccyopIgorc3luIG1hdGNoICAgIHNtbENvbnN0cnVjdG9yICAiXFtccypcXSIKK3N5biBtYXRjaCAgICBzbWxDb25zdHJ1Y3RvciAgIiNcW1xzKlxdIgorc3luIG1hdGNoICAgIHNtbENvbnN0cnVjdG9yICAiXHVcKFx3XHwnXCkqXD4iCisKKyIgTW9kdWxlIHByZWZpeAorc3luIG1hdGNoICAgIHNtbE1vZFBhdGggICAgICAiXHVcKFx3XHwnXCkqXC4iaGU9ZS0xCisKK3N5biBtYXRjaCAgICBzbWxDaGFyYWN0ZXIgICAgKyMiLiJcfCMiXFxcZFxkXGQiKworc3luIG1hdGNoICAgIHNtbENoYXJFcnIgICAgICArIyJcXFxkXGQiXHwjIlxcXGQiKworc3luIHJlZ2lvbiAgIHNtbFN0cmluZyAgICAgICBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCisKK3N5biBtYXRjaCAgICBzbWxGdW5EZWYgICAgICAgIj0+Igorc3luIG1hdGNoICAgIHNtbFJlZkFzc2lnbiAgICAiOj0iCitzeW4gbWF0Y2ggICAgc21sVG9wU3RvcCAgICAgICI7OyIKK3N5biBtYXRjaCAgICBzbWxPcGVyYXRvciAgICAgIlxeIgorc3luIG1hdGNoICAgIHNtbE9wZXJhdG9yICAgICAiOjoiCitzeW4gbWF0Y2ggICAgc21sQW55VmFyICAgICAgICJcPF9cPiIKK3N5biBtYXRjaCAgICBzbWxLZXlDaGFyICAgICAgIiEiCitzeW4gbWF0Y2ggICAgc21sS2V5Q2hhciAgICAgICI7Igorc3luIG1hdGNoICAgIHNtbEtleUNoYXIgICAgICAiXCoiCitzeW4gbWF0Y2ggICAgc21sS2V5Q2hhciAgICAgICI9IgorCitzeW4gbWF0Y2ggICAgc21sTnVtYmVyCSAgICAgICJcPC1cPVxkXCtcPiIKK3N5biBtYXRjaCAgICBzbWxOdW1iZXIJICAgICAgIlw8LVw9MFt4fFhdXHhcK1w+Igorc3luIG1hdGNoICAgIHNtbFJlYWwJICAgICAgIlw8LVw9XGRcK1wuXGQqXChbZUVdWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKworIiBTeW5jaHJvbml6YXRpb24KK3N5biBzeW5jIG1pbmxpbmVzPTIwCitzeW4gc3luYyBtYXhsaW5lcz01MDAKKworc3luIHN5bmMgbWF0Y2ggc21sRW5kU3luYyAgICAgZ3JvdXBoZXJlICBzbWxFbmQgICAgICJcPGJlZ2luXD4iCitzeW4gc3luYyBtYXRjaCBzbWxFbmRTeW5jICAgICBncm91cHRoZXJlIHNtbEVuZCAgICAgIlw8ZW5kXD4iCitzeW4gc3luYyBtYXRjaCBzbWxTdHJ1Y3RTeW5jICBncm91cGhlcmUgIHNtbFN0cnVjdCAgIlw8c3RydWN0XD4iCitzeW4gc3luYyBtYXRjaCBzbWxTdHJ1Y3RTeW5jICBncm91cHRoZXJlIHNtbFN0cnVjdCAgIlw8ZW5kXD4iCitzeW4gc3luYyBtYXRjaCBzbWxTaWdTeW5jICAgICBncm91cGhlcmUgIHNtbFNpZyAgICAgIlw8c2lnXD4iCitzeW4gc3luYyBtYXRjaCBzbWxTaWdTeW5jICAgICBncm91cHRoZXJlIHNtbFNpZyAgICAgIlw8ZW5kXD4iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3NtbF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zbWxfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc21sQnJhY2VFcnIJIEVycm9yCisgIEhpTGluayBzbWxCcmFja0VycgkgRXJyb3IKKyAgSGlMaW5rIHNtbFBhcmVuRXJyCSBFcnJvcgorCisgIEhpTGluayBzbWxDb21tZW50RXJyCSBFcnJvcgorCisgIEhpTGluayBzbWxFbmRFcnIJIEVycm9yCisgIEhpTGluayBzbWxUaGVuRXJyCSBFcnJvcgorCisgIEhpTGluayBzbWxDaGFyRXJyCSBFcnJvcgorCisgIEhpTGluayBzbWxDb21tZW50CSBDb21tZW50CisKKyAgSGlMaW5rIHNtbE1vZFBhdGgJIEluY2x1ZGUKKyAgSGlMaW5rIHNtbE1vZHVsZQkgSW5jbHVkZQorICBIaUxpbmsgc21sTW9kUGFyYW0xCSBJbmNsdWRlCisgIEhpTGluayBzbWxNb2RUeXBlCSBJbmNsdWRlCisgIEhpTGluayBzbWxNUFJlc3RyMwkgSW5jbHVkZQorICBIaUxpbmsgc21sRnVsbE1vZAkgSW5jbHVkZQorICBIaUxpbmsgc21sTW9kVHlwZVJlc3RyIEluY2x1ZGUKKyAgSGlMaW5rIHNtbFdpdGgJIEluY2x1ZGUKKyAgSGlMaW5rIHNtbE1URGVmCSBJbmNsdWRlCisKKyAgSGlMaW5rIHNtbENvbnN0cnVjdG9yICBDb25zdGFudAorCisgIEhpTGluayBzbWxNb2RQcmVSSFMJIEtleXdvcmQKKyAgSGlMaW5rIHNtbE1QUmVzdHIyCSBLZXl3b3JkCisgIEhpTGluayBzbWxLZXl3b3JkCSBLZXl3b3JkCisgIEhpTGluayBzbWxGdW5EZWYJIEtleXdvcmQKKyAgSGlMaW5rIHNtbFJlZkFzc2lnbgkgS2V5d29yZAorICBIaUxpbmsgc21sS2V5Q2hhcgkgS2V5d29yZAorICBIaUxpbmsgc21sQW55VmFyCSBLZXl3b3JkCisgIEhpTGluayBzbWxUb3BTdG9wCSBLZXl3b3JkCisgIEhpTGluayBzbWxPcGVyYXRvcgkgS2V5d29yZAorCisgIEhpTGluayBzbWxCb29sZWFuCSBCb29sZWFuCisgIEhpTGluayBzbWxDaGFyYWN0ZXIJIENoYXJhY3RlcgorICBIaUxpbmsgc21sTnVtYmVyCSBOdW1iZXIKKyAgSGlMaW5rIHNtbFJlYWwJIEZsb2F0CisgIEhpTGluayBzbWxTdHJpbmcJIFN0cmluZworICBIaUxpbmsgc21sVHlwZQkgVHlwZQorICBIaUxpbmsgc21sVG9kbwkgVG9kbworICBIaUxpbmsgc21sRW5jbAkgS2V5d29yZAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzbWwiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zbm5zbmV0LnZpbSBiL3J1bnRpbWUvc3ludGF4L3NubnNuZXQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMjRkZTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zbm5zbmV0LnZpbQpAQCAtMCwwICsxLDc3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJU05OUyBuZXR3b3JrIGZpbGUKKyIgTWFpbnRhaW5lcjoJRGF2aWRlIEFsYmVyYW5pIDxhbGJlcmFuaWRAYmlnZm9vdC5jb20+CisiIExhc3QgQ2hhbmdlOgkyOCBBcHIgMjAwMQorIiBWZXJzaW9uOgkwLjIKKyIgVVJMOgkJaHR0cDovL2RpZ2lsYW5kZXIuaW9sLml0L2FsYmVyYW5pZC92aW0vc3ludGF4L3NubnNuZXQudmltCisiCisiIFNOTlMgaHR0cDovL3d3dy1yYS5pbmZvcm1hdGlrLnVuaS10dWViaW5nZW4uZGUvU05OUy8KKyIgaXMgYSBzaW11bGF0b3IgZm9yIG5ldXJhbCBuZXR3b3Jrcy4KKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBtYXRjaAlzbm5zbmV0VGl0bGUJIm5vXC4iCitzeW4gbWF0Y2gJc25uc25ldFRpdGxlCSJ0eXBlIG5hbWUiCitzeW4gbWF0Y2gJc25uc25ldFRpdGxlCSJ1bml0IG5hbWUiCitzeW4gbWF0Y2gJc25uc25ldFRpdGxlCSJhY3RcKCBmdW5jXClcPSIKK3N5biBtYXRjaAlzbm5zbmV0VGl0bGUJIm91dCBmdW5jIgorc3luIG1hdGNoCXNubnNuZXRUaXRsZQkic2l0ZVwoIG5hbWVcKVw9Igorc3luIG1hdGNoCXNubnNuZXRUaXRsZQkic2l0ZSBmdW5jdGlvbiIKK3N5biBtYXRjaAlzbm5zbmV0VGl0bGUJInNvdXJjZTp3ZWlnaHQiCitzeW4gbWF0Y2gJc25uc25ldFRpdGxlCSJ1bml0Tm9cLiIKK3N5biBtYXRjaAlzbm5zbmV0VGl0bGUJImRlbHRhIHgiCitzeW4gbWF0Y2gJc25uc25ldFRpdGxlCSJkZWx0YSB5Igorc3luIGtleXdvcmQJc25uc25ldFRpdGxlCXR5cGVOYW1lIHVuaXROYW1lIGJpYXMgc3QgcG9zaXRpb24gc3VibmV0IGxheWVyIHNpdGVzIG5hbWUgdGFyZ2V0IHogTExOIExVTiBUb2ZmIFNvZmYgQ3R5cGUKKworc3luIG1hdGNoCXNubnNuZXRUeXBlCSJTTk5TIG5ldHdvcmsgZGVmaW5pdGlvbiBmaWxlIFtWdl1cZC5cZC4qIiBjb250YWlucz1zbm5zbmV0TnVtYmVycworc3luIG1hdGNoCXNubnNuZXRUeXBlCSJnZW5lcmF0ZWQgYXQuKiIgY29udGFpbnM9c25uc25ldE51bWJlcnMKK3N5biBtYXRjaAlzbm5zbmV0VHlwZQkibmV0d29yayBuYW1lXHMqOiIKK3N5biBtYXRjaAlzbm5zbmV0VHlwZQkic291cmNlIGZpbGVzXHMqOiIKK3N5biBtYXRjaAlzbm5zbmV0VHlwZQkibm9cLiBvZiB1bml0c1xzKjouKiIgY29udGFpbnM9c25uc25ldE51bWJlcnMKK3N5biBtYXRjaAlzbm5zbmV0VHlwZQkibm9cLiBvZiBjb25uZWN0aW9uc1xzKjouKiIgY29udGFpbnM9c25uc25ldE51bWJlcnMKK3N5biBtYXRjaAlzbm5zbmV0VHlwZQkibm9cLiBvZiB1bml0IHR5cGVzXHMqOi4qIiBjb250YWlucz1zbm5zbmV0TnVtYmVycworc3luIG1hdGNoCXNubnNuZXRUeXBlCSJub1wuIG9mIHNpdGUgdHlwZXNccyo6LioiIGNvbnRhaW5zPXNubnNuZXROdW1iZXJzCitzeW4gbWF0Y2gJc25uc25ldFR5cGUJImxlYXJuaW5nIGZ1bmN0aW9uXHMqOiIKK3N5biBtYXRjaAlzbm5zbmV0VHlwZQkicHJ1bmluZyBmdW5jdGlvblxzKjoiCitzeW4gbWF0Y2gJc25uc25ldFR5cGUJInN1Ym9yZGluYXRlIGxlYXJuaW5nIGZ1bmN0aW9uXHMqOiIKK3N5biBtYXRjaAlzbm5zbmV0VHlwZQkidXBkYXRlIGZ1bmN0aW9uXHMqOiIKKworc3luIG1hdGNoCXNubnNuZXRTZWN0aW9uCSJ1bml0IGRlZmluaXRpb24gc2VjdGlvbiIKK3N5biBtYXRjaAlzbm5zbmV0U2VjdGlvbgkidW5pdCBkZWZhdWx0IHNlY3Rpb24iCitzeW4gbWF0Y2gJc25uc25ldFNlY3Rpb24JInNpdGUgZGVmaW5pdGlvbiBzZWN0aW9uIgorc3luIG1hdGNoCXNubnNuZXRTZWN0aW9uCSJ0eXBlIGRlZmluaXRpb24gc2VjdGlvbiIKK3N5biBtYXRjaAlzbm5zbmV0U2VjdGlvbgkiY29ubmVjdGlvbiBkZWZpbml0aW9uIHNlY3Rpb24iCitzeW4gbWF0Y2gJc25uc25ldFNlY3Rpb24JImxheWVyIGRlZmluaXRpb24gc2VjdGlvbiIKK3N5biBtYXRjaAlzbm5zbmV0U2VjdGlvbgkic3VibmV0IGRlZmluaXRpb24gc2VjdGlvbiIKK3N5biBtYXRjaAlzbm5zbmV0U2VjdGlvbgkiM0QgdHJhbnNsYXRpb24gc2VjdGlvbiIKK3N5biBtYXRjaAlzbm5zbmV0U2VjdGlvbgkidGltZSBkZWxheSBzZWN0aW9uIgorCitzeW4gbWF0Y2gJc25uc25ldE51bWJlcnMJIlxkIiBjb250YWluZWQKK3N5biBtYXRjaAlzbm5zbmV0Q29tbWVudAkiIy4qJCIgY29udGFpbnM9c25uc25ldFRvZG8KK3N5biBrZXl3b3JkCXNubnNuZXRUb2RvCVRPRE8gWFhYIEZJWE1FIGNvbnRhaW5lZAorCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc25uc25ldF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zbm5zbmV0X3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHNubnNuZXRUeXBlCQlUeXBlCisgIEhpTGluayBzbm5zbmV0Q29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgc25uc25ldE51bWJlcnMJCU51bWJlcgorICBIaUxpbmsgc25uc25ldFNlY3Rpb24JCVN0YXRlbWVudAorICBIaUxpbmsgc25uc25ldFRpdGxlCQlMYWJlbAorICBIaUxpbmsgc25uc25ldFRvZG8JCVRvZG8KKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic25uc25ldCIKKworIiB2aW06IHRzPTggc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc25uc3BhdC52aW0gYi9ydW50aW1lL3N5bnRheC9zbm5zcGF0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzA3ZmFkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc25uc3BhdC52aW0KQEAgLTAsMCArMSw2OCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVNOTlMgcGF0dGVybiBmaWxlCisiIE1haW50YWluZXI6CURhdmlkZSBBbGJlcmFuaSA8YWxiZXJhbmlkQGJpZ2Zvb3QuY29tPgorIiBMYXN0IENoYW5nZToJMjggQXByIDIwMDEKKyIgVmVyc2lvbjoJMC4yCisiIFVSTDoJCWh0dHA6Ly9kaWdpbGFuZGVyLmlvbC5pdC9hbGJlcmFuaWQvdmltL3N5bnRheC9zbm5zcGF0LnZpbQorIgorIiBTTk5TIGh0dHA6Ly93d3ctcmEuaW5mb3JtYXRpay51bmktdHVlYmluZ2VuLmRlL1NOTlMvCisiIGlzIGEgc2ltdWxhdG9yIGZvciBuZXVyYWwgbmV0d29ya3MuCisKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisKKyIgYW55dGhpbmcgdGhhdCBpc24ndCBwYXJ0IG9mIHRoZSBoZWFkZXIsIGEgY29tbWVudCBvciBhIG51bWJlcgorIiBpcyB3cm9uZworc3luIG1hdGNoCXNubnNwYXRFcnJvcgkiLioiCisiIGhvcGluZyB0aGF0IG1hdGNoZXMgYW55IGtpbmQgb2Ygbm90YXRpb24uLi4KK3N5biBtYXRjaAlzbm5zcGF0QWNjZXB0ZWQJIlwoWy0rXVw9XChcZFwrXC5cfFwuXClcPVxkXCtcKFtFZV1bLStdXD1cZFwrXClcPVwpIgorc3luIG1hdGNoCXNubnNwYXRBY2NlcHRlZCAiXHMiCitzeW4gbWF0Y2gJc25uc3BhdEJyYWMJIlxbXHMqXGRcK1woXHNcfFxkXCkqXF0iIGNvbnRhaW5zPXNubnNwYXROdW1iZXJzCisKKyIgdGhlIGFjY2VwdGVkIGZpZWxkcyBpbiB0aGUgaGVhZGVyCitzeW4gbWF0Y2gJc25uc3BhdE5vSGVhZGVyCSJOb1wuIG9mIHBhdHRlcm5zXHMqOlxzKiIgY29udGFpbmVkCitzeW4gbWF0Y2gJc25uc3BhdE5vSGVhZGVyCSJOb1wuIG9mIGlucHV0IHVuaXRzXHMqOlxzKiIgY29udGFpbmVkCitzeW4gbWF0Y2gJc25uc3BhdE5vSGVhZGVyCSJOb1wuIG9mIG91dHB1dCB1bml0c1xzKjpccyoiIGNvbnRhaW5lZAorc3luIG1hdGNoCXNubnNwYXROb0hlYWRlcgkiTm9cLiBvZiB2YXJpYWJsZSBpbnB1dCBkaW1lbnNpb25zXHMqOlxzKiIgY29udGFpbmVkCitzeW4gbWF0Y2gJc25uc3BhdE5vSGVhZGVyCSJOb1wuIG9mIHZhcmlhYmxlIG91dHB1dCBkaW1lbnNpb25zXHMqOlxzKiIgY29udGFpbmVkCitzeW4gbWF0Y2gJc25uc3BhdE5vSGVhZGVyCSJNYXhpbXVtIGlucHV0IGRpbWVuc2lvbnNccyo6XHMqIiBjb250YWluZWQKK3N5biBtYXRjaAlzbm5zcGF0Tm9IZWFkZXIJIk1heGltdW0gb3V0cHV0IGRpbWVuc2lvbnNccyo6XHMqIiBjb250YWluZWQKK3N5biBtYXRjaAlzbm5zcGF0R2VuCSJnZW5lcmF0ZWQgYXQuKiIgY29udGFpbmVkIGNvbnRhaW5zPXNubnNwYXROdW1iZXJzCitzeW4gbWF0Y2gJc25uc3BhdEdlbgkiU05OUyBwYXR0ZXJuIGRlZmluaXRpb24gZmlsZSBbVnZdXGRcLlxkIiBjb250YWluZWQgY29udGFpbnM9c25uc3BhdE51bWJlcnMKKworIiB0aGUgaGVhZGVyLCB3aGF0IGlzIG5vdCBhbiBhY2NlcHRlZCBmaWVsZCwgaXMgYW4gZXJyb3IKK3N5biByZWdpb24Jc25uc3BhdEhlYWRlcglzdGFydD0iXlNOTlMiIGVuZD0iXlxzKlstK1wuXVw9WzAtOSNdIm1lPWUtMiBjb250YWlucz1zbm5zcGF0Tm9IZWFkZXIsc25uc3BhdE51bWJlcnMsc25uc3BhdEdlbixzbm5zcGF0QnJhYworCisiIG51bWJlcnMgaW5zaWRlIHRoZSBoZWFkZXIKK3N5biBtYXRjaAlzbm5zcGF0TnVtYmVycwkiXGQiIGNvbnRhaW5lZAorc3luIG1hdGNoCXNubnNwYXRDb21tZW50CSIjLiokIiBjb250YWlucz1zbm5zcGF0VG9kbworc3luIGtleXdvcmQJc25uc3BhdFRvZG8JVE9ETyBYWFggRklYTUUgY29udGFpbmVkCisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zbm5zcGF0X3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3NubnNwYXRfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc25uc3BhdEdlbgkJU3RhdGVtZW50CisgIEhpTGluayBzbm5zcGF0SGVhZGVyCQlFcnJvcgorICBIaUxpbmsgc25uc3BhdE5vSGVhZGVyCURlZmluZQorICBIaUxpbmsgc25uc3BhdE51bWJlcnMJCU51bWJlcgorICBIaUxpbmsgc25uc3BhdENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHNubnNwYXRFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIHNubnNwYXRUb2RvCQlUb2RvCisgIEhpTGluayBzbm5zcGF0QWNjZXB0ZWQJTk9ORQorICBIaUxpbmsgc25uc3BhdEJyYWMJCU5PTkUKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic25uc3BhdCIKKworIiB2aW06IHRzPTggc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc25uc3Jlcy52aW0gYi9ydW50aW1lL3N5bnRheC9zbm5zcmVzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzFkNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc25uc3Jlcy52aW0KQEAgLTAsMCArMSw2MCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVNOTlMgcmVzdWx0IGZpbGUKKyIgTWFpbnRhaW5lcjoJRGF2aWRlIEFsYmVyYW5pIDxhbGJlcmFuaWRAYmlnZm9vdC5jb20+CisiIExhc3QgQ2hhbmdlOgkyOCBBcHIgMjAwMQorIiBWZXJzaW9uOgkwLjIKKyIgVVJMOgkJaHR0cDovL2RpZ2lsYW5kZXIuaW9sLml0L2FsYmVyYW5pZC92aW0vc3ludGF4L3NubnNyZXMudmltCisiCisiIFNOTlMgaHR0cDovL3d3dy1yYS5pbmZvcm1hdGlrLnVuaS10dWViaW5nZW4uZGUvU05OUy8KKyIgaXMgYSBzaW11bGF0b3IgZm9yIG5ldXJhbCBuZXR3b3Jrcy4KKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgdGhlIGFjY2VwdGVkIGZpZWxkcyBpbiB0aGUgaGVhZGVyCitzeW4gbWF0Y2gJc25uc3Jlc05vSGVhZGVyCSJOb1wuIG9mIHBhdHRlcm5zXHMqOlxzKiIgY29udGFpbmVkCitzeW4gbWF0Y2gJc25uc3Jlc05vSGVhZGVyCSJOb1wuIG9mIGlucHV0IHVuaXRzXHMqOlxzKiIgY29udGFpbmVkCitzeW4gbWF0Y2gJc25uc3Jlc05vSGVhZGVyCSJOb1wuIG9mIG91dHB1dCB1bml0c1xzKjpccyoiIGNvbnRhaW5lZAorc3luIG1hdGNoCXNubnNyZXNOb0hlYWRlcgkiTm9cLiBvZiB2YXJpYWJsZSBpbnB1dCBkaW1lbnNpb25zXHMqOlxzKiIgY29udGFpbmVkCitzeW4gbWF0Y2gJc25uc3Jlc05vSGVhZGVyCSJOb1wuIG9mIHZhcmlhYmxlIG91dHB1dCBkaW1lbnNpb25zXHMqOlxzKiIgY29udGFpbmVkCitzeW4gbWF0Y2gJc25uc3Jlc05vSGVhZGVyCSJNYXhpbXVtIGlucHV0IGRpbWVuc2lvbnNccyo6XHMqIiBjb250YWluZWQKK3N5biBtYXRjaAlzbm5zcmVzTm9IZWFkZXIJIk1heGltdW0gb3V0cHV0IGRpbWVuc2lvbnNccyo6XHMqIiBjb250YWluZWQKK3N5biBtYXRjaAlzbm5zcmVzTm9IZWFkZXIJInN0YXJ0cGF0dGVyblxzKjpccyoiIGNvbnRhaW5lZAorc3luIG1hdGNoCXNubnNyZXNOb0hlYWRlciAiZW5kcGF0dGVyblxzKjpccyoiIGNvbnRhaW5lZAorc3luIG1hdGNoCXNubnNyZXNOb0hlYWRlciAiaW5wdXQgcGF0dGVybnMgaW5jbHVkZWQiIGNvbnRhaW5lZAorc3luIG1hdGNoCXNubnNyZXNOb0hlYWRlciAidGVhY2hpbmcgb3V0cHV0IGluY2x1ZGVkIiBjb250YWluZWQKK3N5biBtYXRjaAlzbm5zcmVzR2VuCSJnZW5lcmF0ZWQgYXQuKiIgY29udGFpbmVkIGNvbnRhaW5zPXNubnNyZXNOdW1iZXJzCitzeW4gbWF0Y2gJc25uc3Jlc0dlbgkiU05OUyByZXN1bHQgZmlsZSBbVnZdXGRcLlxkIiBjb250YWluZWQgY29udGFpbnM9c25uc3Jlc051bWJlcnMKKworIiB0aGUgaGVhZGVyLCB3aGF0IGlzIG5vdCBhbiBhY2NlcHRlZCBmaWVsZCwgaXMgYW4gZXJyb3IKK3N5biByZWdpb24Jc25uc3Jlc0hlYWRlcglzdGFydD0iXlNOTlMiIGVuZD0iXlxzKlstK1wuXVw9WzAtOSNdIm1lPWUtMiBjb250YWlucz1zbm5zcmVzTm9IZWFkZXIsc25uc3Jlc051bWJlcnMsc25uc3Jlc0dlbgorCisiIG51bWJlcnMgaW5zaWRlIHRoZSBoZWFkZXIKK3N5biBtYXRjaAlzbm5zcmVzTnVtYmVycwkiXGQiIGNvbnRhaW5lZAorc3luIG1hdGNoCXNubnNyZXNDb21tZW50CSIjLiokIiBjb250YWlucz1zbm5zcmVzVG9kbworc3luIGtleXdvcmQJc25uc3Jlc1RvZG8JVE9ETyBYWFggRklYTUUgY29udGFpbmVkCisKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zbm5zcmVzX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3NubnNyZXNfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc25uc3Jlc0dlbgkJU3RhdGVtZW50CisgIEhpTGluayBzbm5zcmVzSGVhZGVyCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHNubnNyZXNOb0hlYWRlcglEZWZpbmUKKyAgSGlMaW5rIHNubnNyZXNOdW1iZXJzCQlOdW1iZXIKKyAgSGlMaW5rIHNubnNyZXNDb21tZW50CQlDb21tZW50CisgIEhpTGluayBzbm5zcmVzVG9kbwkJVG9kbworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzbm5zcmVzIgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zbm9ib2w0LnZpbSBiL3J1bnRpbWUvc3ludGF4L3Nub2JvbDQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NDc1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zbm9ib2w0LnZpbQpAQCAtMCwwICsxLDkzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIFNOT0JPTDQKKyIgTWFpbnRhaW5lcjogICBSYWZhbCBTdWxlam1hbiA8cm1zQHBvY3p0YS5vbmV0LnBsPgorIiBMYXN0IGNoYW5nZTogIDIwMDQgTWF5IDE2CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3ludGF4IGNhc2UgaWdub3JlCisiIFZhbmlsbGEgU25vYm9sNCBrZXl3b3Jkcworc3luIGtleXdvcmQJc25vYm9sNEtleXdvYXJkICAgYW55IGFwcGx5IGFyYiBhcmJubyBhcmcgYXJyYXkKK3N5biBrZXl3b3JkCXNub2JvbDRLZXl3b2FyZCAgIGJyZWFrCitzeW4ga2V5d29yZAlzbm9ib2w0S2V5d29hcmQgICBjaGFyIGNsZWFyIGNvZGUgY29sbGVjdCBjb252ZXJ0IGNvcHkKK3N5biBrZXl3b3JkCXNub2JvbDRLZXl3b2FyZCAgIGRhdGEgZGF0YXR5cGUgZGF0ZSBkZWZpbmUgZGV0YWNoIGRpZmZlciBkdW1wIGR1cGwKK3N5biBrZXl3b3JkCXNub2JvbDRLZXl3b2FyZCAgIGVuZGZpbGUgZXEgZXZhbAorc3luIGtleXdvcmQJc25vYm9sNEtleXdvYXJkICAgZmllbGQKK3N5biBrZXl3b3JkCXNub2JvbDRLZXl3b2FyZCAgIGdlIGd0IGlkZW50CitzeW4ga2V5d29yZAlzbm9ib2w0S2V5d29hcmQgICBpbnB1dCBpbnRlZ2VyIGl0ZW0KK3N5biBrZXl3b3JkCXNub2JvbDRLZXl3b2FyZCAgIGxlIGxlbiBsZ3QgbG9jYWwgbHBhZCBsdAorc3luIGtleXdvcmQJc25vYm9sNEtleXdvYXJkICAgbmUgbm90YW55CitzeW4ga2V5d29yZAlzbm9ib2w0S2V5d29hcmQgICBvcHN5biBvdXRwdXQKK3N5biBrZXl3b3JkCXNub2JvbDRLZXl3b2FyZCAgIHBvcyBwcm90b3R5cGUKK3N5biBrZXl3b3JkCXNub2JvbDRLZXl3b2FyZCAgIHJlbWRyIHJlcGxhY2UgcnBhZCBycG9zIHJ0YWIKK3N5biBrZXl3b3JkCXNub2JvbDRLZXl3b2FyZCAgIHNpemUgc3BhbiBzdG9wdHIKK3N5biBrZXl3b3JkCXNub2JvbDRLZXl3b2FyZCAgIHRhYiB0YWJsZSB0aW1lIHRyYWNlIHRyaW0KK3N5biBrZXl3b3JkCXNub2JvbDRLZXl3b2FyZCAgIHVubG9hZAorc3luIGtleXdvcmQJc25vYm9sNEtleXdvYXJkICAgdmFsdWUKKyIgU3BpdGJvbCBrZXl3b3JkcworIiBDU05PQk9MIGtleXdvcmRzCitzeW4ga2V5d29yZAlzbm9ib2w0S2V5d29hcmQgICBzc2V0CisKK3N5biByZWdpb24gICAgICBzbm9ib2w0U3RyaW5nICAgICAgIG1hdGNoZ3JvdXA9UXVvdGUgc3RhcnQ9KyIrIHNraXA9K1xcIisgZW5kPSsiKworc3luIHJlZ2lvbiAgICAgIHNub2JvbDRTdHJpbmcgICAgICAgbWF0Y2hncm91cD1RdW90ZSBzdGFydD0rJysgc2tpcD0rXFwnKyBlbmQ9KycrCitzeW4gbWF0Y2ggICAgICAgc25vYm9sNExhYmVsICAgICAgICAiXlteLSBcdF1bXiBcdF0qIgorc3luIG1hdGNoICAgICAgIHNub2JvbDRTdGF0ZW1lbnQgICAgIl4tW14gXVteIF0qIgorc3luIG1hdGNoICAgICAgIHNub2JvbDRDb21tZW50ICAgICAgIl4qLiokIgorc3luIG1hdGNoICAgICAgIENvbnN0YW50ICAgICAgICAgICAgIlwuW2Etel1bYS16MC05XC1dKiIKKyJzeW4gbWF0Y2ggICAgICAgc25vYm9sNExhYmVsICAgICAgICAiOlwoW3NmXSooW14pXSopXCkqIiBjb250YWlucz1BTExCVVQsc25vYm9sNFBhcmVuRXJyb3IKK3N5biByZWdpb24gICAgICAgc25vYm9sNExhYmVsICAgICAgICBzdGFydD0iOigiIGVuZD0iKSIgY29udGFpbnM9QUxMQlVULHNub2JvbDRQYXJlbkVycm9yCitzeW4gcmVnaW9uICAgICAgIHNub2JvbDRMYWJlbCAgICAgICAgc3RhcnQ9IjpmKCIgZW5kPSIpIiBjb250YWlucz1BTExCVVQsc25vYm9sNFBhcmVuRXJyb3IKK3N5biByZWdpb24gICAgICAgc25vYm9sNExhYmVsICAgICAgICBzdGFydD0iOnMoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCxzbm9ib2w0UGFyZW5FcnJvcgorc3luIG1hdGNoICAgICAgIHNub2JvbDROdW1iZXIgICAgICAgIlw8XGQqXChcLlxkXGQqXCkqXD4iCisiIFBhcmVucyBtYXRjaGluZworc3luIGNsdXN0ZXIgICAgIHNub2JvbDRQYXJlbkdyb3VwICAgY29udGFpbnM9c25vYm9sNFBhcmVuRXJyb3IKK3N5biByZWdpb24gICAgICBzbm9ib2w0UGFyZW4gICAgICAgIHRyYW5zcGFyZW50IHN0YXJ0PScoJyBlbmQ9JyknIGNvbnRhaW5zPUFMTEJVVCxAc25vYm9sNFBhcmVuR3JvdXAsc25vYm9sNEVyckluQnJhY2tldAorc3luIG1hdGNoICAgICAgIHNub2JvbDRQYXJlbkVycm9yICAgZGlzcGxheSAiW1xdKV0iCitzeW4gbWF0Y2ggICAgICAgc25vYm9sNEVyckluUGFyZW4gICBkaXNwbGF5IGNvbnRhaW5lZCAiW1xde31dXHw8JVx8JT4iCitzeW4gcmVnaW9uICAgICAgc25vYm9sNEJyYWNrZXQgICAgICB0cmFuc3BhcmVudCBzdGFydD0nXFtcfDw6JyBlbmQ9J11cfDo+JyBjb250YWlucz1BTExCVVQsQHNub2JvbDRQYXJlbkdyb3VwLHNub2JvbDRFcnJJblBhcmVuCitzeW4gbWF0Y2ggICAgICAgc25vYm9sNEVyckluQnJhY2tldCBkaXNwbGF5IGNvbnRhaW5lZCAiWyk7e31dXHw8JVx8JT4iCisKKyIgb3B0aW9uYWwgc2hlbGwgc2hlYmFuZyBsaW5lCitzeW4gbWF0Y2gJc25vYm9sNENvbW1lbnQgICAgIl5cI1whLiokIgorCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3Nub2JvbDRfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc25vYm9sNF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBzbm9ib2w0TGFiZWwJCUxhYmVsCisgIEhpTGluayBzbm9ib2w0Q29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHNub2JvbDRSZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgc25vYm9sNE51bWJlcgkJTnVtYmVyCisgIEhpTGluayBzbm9ib2w0RXJyb3IJCUVycm9yCisgIEhpTGluayBzbm9ib2w0U3RhdGVtZW50CVByZVByb2MKKyAgSGlMaW5rIHNub2JvbDRTdHJpbmcJCVN0cmluZworICBIaUxpbmsgc25vYm9sNENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHNub2JvbDRTcGVjaWFsCQlTcGVjaWFsCisgIEhpTGluayBzbm9ib2w0VG9kbwkJVG9kbworICBIaUxpbmsgc25vYm9sNEtleXdvcmQJCVN0YXRlbWVudAorICBIaUxpbmsgc25vYm9sNEZ1bmN0aW9uCVN0YXRlbWVudAorICBIaUxpbmsgc25vYm9sNEtleXdvcmQJCUtleXdvcmQKKyAgSGlMaW5rIHNub2JvbDRNYXRoc09wZXJhdG9yCU9wZXJhdG9yCisgIEhpTGluayBzbm9ib2w0UGFyZW5FcnJvciAgICAgIHNub2JvbDRFcnJvcgorICBIaUxpbmsgc25vYm9sNEVyckluUGFyZW4gICAgICBzbm9ib2w0RXJyb3IKKyAgSGlMaW5rIHNub2JvbDRFcnJJbkJyYWNrZXQgICAgc25vYm9sNEVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNub2JvbDQiCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc3BlYy52aW0gYi9ydW50aW1lL3N5bnRheC9zcGVjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZiMmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc3BlYy52aW0KQEAgLTAsMCArMSwyMzYgQEAKKyIgRmlsZW5hbWU6ICAgIHNwZWMudmltCisiIFB1cnBvc2U6ICAgICBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgIFNQRUM6IEJ1aWxkL2luc3RhbGwgc2NyaXB0cyBmb3IgTGludXggUlBNIHBhY2thZ2VzCisiIE1haW50YWluZXI6ICBEb25vdmFuIFJlYmJlY2hpIGVsZmxvcmRAcGVnYXN1cy5ydXRnZXJzLmVkdQorIiBVUkw6CSAgICAgICBodHRwOi8vcGVnYXN1cy5ydXRnZXJzLmVkdS9+ZWxmbG9yZC92aW0vc3ludGF4L3NwZWMudmltCisiIExhc3QgQ2hhbmdlOiBUdWUgT2N0ICAzIDE3OjM1OjE1IEJSU1QgMjAwMCA8YXVyZWxpb0Bjb25lY3RpdmEuY29tLmJyPgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBzeW5jIG1pbmxpbmVzPTEwMDAKKworc3luIG1hdGNoIHNwZWNTcGVjaWFsQ2hhciBjb250YWluZWQgJ1tdWyEkKClcXHw+Xjs6e31dJworc3luIG1hdGNoIHNwZWNDb2xvbiAgICAgICBjb250YWluZWQgJzonCitzeW4gbWF0Y2ggc3BlY1BlcmNlbnQgICAgIGNvbnRhaW5lZCAnJScKKworc3luIG1hdGNoIHNwZWNWYXJpYWJsZXMgICBjb250YWluZWQgJ1wkXGhcdyonIGNvbnRhaW5zPXNwZWNTcGVjaWFsVmFyaWFibGVzTmFtZXMsc3BlY1NwZWNpYWxDaGFyCitzeW4gbWF0Y2ggc3BlY1ZhcmlhYmxlcyAgIGNvbnRhaW5lZCAnXCR7XHcqfScgY29udGFpbnM9c3BlY1NwZWNpYWxWYXJpYWJsZXNOYW1lcyxzcGVjU3BlY2lhbENoYXIKKworc3luIG1hdGNoIHNwZWNNYWNyb0lkZW50aWZpZXIgY29udGFpbmVkICclXGhcdyonIGNvbnRhaW5zPXNwZWNNYWNyb05hbWVMb2NhbCxzcGVjTWFjcm9OYW1lT3RoZXIsc3BlY1BlcmNlbnQKK3N5biBtYXRjaCBzcGVjTWFjcm9JZGVudGlmaWVyIGNvbnRhaW5lZCAnJXtcdyp9JyBjb250YWlucz1zcGVjTWFjcm9OYW1lTG9jYWwsc3BlY01hY3JvTmFtZU90aGVyLHNwZWNQZXJjZW50LHNwZWNTcGVjaWFsQ2hhcgorCitzeW4gbWF0Y2ggc3BlY1NwZWNpYWxWYXJpYWJsZXMgY29udGFpbmVkICdcJFswLTldXHxcJHtbMC05XX0nCitzeW4gbWF0Y2ggc3BlY0NvbW1hbmRPcHRzICAgICAgY29udGFpbmVkICdcc1woLVx3XCtcfC0tXHdbYS16QS1aXy1dXCtcKSdtcz1zKzEKK3N5biBtYXRjaCBzcGVjQ29tbWVudCAnXlxzKiMuKiQnCisKKworc3luIGNhc2UgbWF0Y2gKKworCisibWF0Y2hlcyB3aXRoIG5vIGhpZ2hsaWdodAorc3luIG1hdGNoIHNwZWNOb051bWJlckhpbGl0ZSAnWDExXHxYMTFSNlx8W2EtekEtWl0qXC5cZFx8W2EtekEtWl1bLS9dXGQnCitzeW4gbWF0Y2ggc3BlY01hbnBhZ2VGaWxlICdbYS16QS1aXVwuMScKKworIkRheSwgTW9udGggYW5kIG1vc3QgdXNlZCBsaWNlbnNlIGFjcm9ueW1zCitzeW4ga2V5d29yZCBzcGVjTGljZW5zZSBjb250YWluZWQgR1BMIExHUEwgQlNEIE1JVCBHTlUKK3N5biBrZXl3b3JkIHNwZWNXZWVrZGF5IGNvbnRhaW5lZCBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdCBTdW4KK3N5biBrZXl3b3JkIHNwZWNNb250aCAgIGNvbnRhaW5lZCBKYW4gRmViIE1hciBBcHIgSnVuIEp1bCBBdWcgU2VwIE9jdCBOb3YgRGVjCitzeW4ga2V5d29yZCBzcGVjTW9udGggICBjb250YWluZWQgSmFudWFyeSBGZWJydWFyeSBNYXJjaCBBcHJpbCBNYXkgSnVuZSBKdWx5IEF1Z3VzdCBTZXB0ZW1iZXIgT2N0b2JlciBOb3ZlbWJlciBEZWNlbWJlcgorCisiIywgQCwgd3d3CitzeW4gbWF0Y2ggc3BlY051bWJlciAnXCheLVw9XHxbIFx0XS1cPVx8LVwpWzAtOS4tXSpbMC05XScKK3N5biBtYXRjaCBzcGVjRW1haWwgY29udGFpbmVkICI8XD1cPFtBLVphLXowLTlfLi1dXCtAXChbQS1aYS16MC05Xy1dXCtcLlwpXCtbQS1aYS16XVwrXD4+XD0iCitzeW4gbWF0Y2ggc3BlY1VSTCAgICAgIGNvbnRhaW5lZCAnXDxcKFwoaHR0cHNcezAsMX1cfGZ0cFwpOi8vXHxcKHd3d1syM11cezAsMX1cLlx8ZnRwXC5cKVwpW0EtWmEtejAtOS5fL346LCMtXVwrXD4nCitzeW4gbWF0Y2ggc3BlY1VSTE1hY3JvIGNvbnRhaW5lZCAnXDxcKFwoaHR0cHNcezAsMX1cfGZ0cFwpOi8vXHxcKHd3d1syM11cezAsMX1cLlx8ZnRwXC5cKVwpW0EtWmEtejAtOS5fL346LCMle30tXVwrXD4nIGNvbnRhaW5zPXNwZWNNYWNyb0lkZW50aWZpZXIKKworIlRPRE8gdGFrZSBzcGVjU3BlY2lhbFZhcmlhYmxlcyBvdXQgb2YgdGhlIGNsdXN0ZXIgZm9yIHRoZSBzaCogY29udGFpbnMgKEFMTEJVVCkKKyJTcGVjaWFsIHN5c3RlbSBkaXJlY3Rvcmllcworc3luIG1hdGNoIHNwZWNMaXN0ZWRGaWxlc1ByZWZpeCBjb250YWluZWQgJy9cKHVzclx8bG9jYWxcfG9wdFx8WDExUjZcfFgxMVwpLydtZT1lLTEKK3N5biBtYXRjaCBzcGVjTGlzdGVkRmlsZXNCaW4gICAgY29udGFpbmVkICcvc1w9YmluLydtZT1lLTEKK3N5biBtYXRjaCBzcGVjTGlzdGVkRmlsZXNMaWIgICAgY29udGFpbmVkICcvXChsaWJcfGluY2x1ZGVcKS8nbWU9ZS0xCitzeW4gbWF0Y2ggc3BlY0xpc3RlZEZpbGVzRG9jICAgIGNvbnRhaW5lZCAnL1wobWFuXGQqXHxkb2NcfGluZm9cKVw+Jworc3luIG1hdGNoIHNwZWNMaXN0ZWRGaWxlc0V0YyAgICBjb250YWluZWQgJy9ldGMvJ21lPWUtMQorc3luIG1hdGNoIHNwZWNMaXN0ZWRGaWxlc1NoYXJlICBjb250YWluZWQgJy9zaGFyZS8nbWU9ZS0xCitzeW4gY2x1c3RlciBzcGVjTGlzdGVkRmlsZXMgY29udGFpbnM9c3BlY0xpc3RlZEZpbGVzQmluLHNwZWNMaXN0ZWRGaWxlc0xpYixzcGVjTGlzdGVkRmlsZXNEb2Msc3BlY0xpc3RlZEZpbGVzRXRjLHNwZWNMaXN0ZWRGaWxlc1NoYXJlLHNwZWNMaXN0ZWRGaWxlc1ByZWZpeCxzcGVjVmFyaWFibGVzLHNwZWNTcGVjaWFsQ2hhcgorCisic3BlY0NvbWFuZHMKK3N5biBtYXRjaCAgIHNwZWNDb25maWd1cmUgIGNvbnRhaW5lZCAnXC4vY29uZmlndXJlJworc3luIG1hdGNoICAgc3BlY1RhckNvbW1hbmQgY29udGFpbmVkICdcPHRhclxzXCtbY3h2cHpJZl1ceyw1fVxzKicKK3N5biBrZXl3b3JkIHNwZWNDb21tYW5kU3BlY2lhbCBjb250YWluZWQgcm9vdAorc3luIGtleXdvcmQgc3BlY0NvbW1hbmQJCWNvbnRhaW5lZCBtYWtlIHhta21mIG1rZGlyIGNobW9kIGxuIGZpbmQgc2VkIHJtIHN0cmlwIG1vYyBlY2hvIGdyZXAgbHMgcm0gbXYgbWtkaXIgaW5zdGFsbCBjcCBwd2QgY2F0IHRhaWwgdGhlbiBlbHNlIGVsaWYgY2QgZ3ppcCBybWRpciBsbiBldmFsIGV4cG9ydCB0b3VjaAorc3luIGNsdXN0ZXIgc3BlY0NvbW1hbmRzIGNvbnRhaW5zPXNwZWNDb21tYW5kLHNwZWNUYXJDb21tYW5kLHNwZWNDb25maWd1cmUsc3BlY0NvbW1hbmRTcGVjaWFsCisKKyJmcmVxdWVudGx5IHVzZWQgcnBtIGVudiB2YXJzCitzeW4ga2V5d29yZCBzcGVjU3BlY2lhbFZhcmlhYmxlc05hbWVzIGNvbnRhaW5lZCBSUE1fQlVJTERfUk9PVCBSUE1fQlVJTERfRElSIFJQTV9TT1VSQ0VfRElSIFJQTV9PUFRfRkxBR1MgTERGTEFHUyBDQyBDQ19GTEFHUyBDUFBOQU1FIENGTEFHUyBDWFggQ1hYRkxBR1MgQ1BQRkxBR1MKKworInZhbGlkIG1hY3JvIG5hbWVzIGZyb20gL3Vzci9saWIvcnBtL21hY3Jvcworc3luIGtleXdvcmQgc3BlY01hY3JvTmFtZU90aGVyIGNvbnRhaW5lZCBidWlsZHJvb3QgYnVpbGRzdWJkaXIgZGlzdHJpYnV0aW9uIGRpc3R1cmwgaXg4NiBuYW1lIG5pbCBvcHRmbGFncyBwZXJsX3NpdGVhcmNoIHJlbGVhc2UgcmVxdWlyZXNfZXEgdmVuZG9yIHZlcnNpb24KK3N5biBtYXRjaCAgIHNwZWNNYWNyb05hbWVPdGhlciBjb250YWluZWQgJ1w8XChQQVRDSFx8U09VUkNFXClcZCpcPicKKworInZhbGlkIF9tYWNybyBuYW1lcyBmcm9tIC91c3IvbGliL3JwbS9tYWNyb3MKK3N5biBrZXl3b3JkIHNwZWNNYWNyb05hbWVMb2NhbCBjb250YWluZWQgX2FyY2ggX2JpbmFyeV9wYXlsb2FkIF9iaW5kaXIgX2J1aWxkIF9idWlsZF9hbGlhcyBfYnVpbGRfY3B1IF9idWlsZGRpciBfYnVpbGRfb3MgX2J1aWxkc2hlbGwgX2J1aWxkc3ViZGlyIF9idWlsZF92ZW5kb3IgX2J6aXAyYmluIF9kYXRhZGlyIF9kYnBhdGggX2RicGF0aF9yZWJ1aWxkIF9kZWZhdWx0ZG9jZGlyIF9kb2NkaXIgX2V4Y2x1ZGVkb2NzIF9leGVjX3ByZWZpeCBfZml4Z3JvdXAgX2ZpeG93bmVyIF9maXhwZXJtcyBfZnRwcG9ydCBfZnRwcHJveHkgX2dwZ19wYXRoIF9nemlwYmluIF9ob3N0IF9ob3N0X2FsaWFzIF9ob3N0X2NwdSBfaG9zdF9vcyBfaG9zdF92ZW5kb3IgX2h0dHBwb3J0IF9odHRwcHJveHkgX2luY2x1ZGVkaXIgX2luZm9kaXIgX2luc3RhbGxfbGFuZ3MgX2luc3RhbGxfc2NyaXB0X3BhdGggX2luc3RjaGFuZ2Vsb2cgX2xhbmdwYXR0IF9saWIgX2xpYmRpciBfbGliZXhlY2RpciBfbG9jYWxzdGF0ZWRpciBfbWFuZGlyIF9uZXRzaGFyZWRwYXRoIF9vbGRpbmNsdWRlZGlyIF9vcyBfcGdwYmluIF9wZ3BfcGF0aCBfcHJlZml4IF9wcmVTY3JpcHRFbnZpcm9ubWVudCBfcHJvdmlkZXMgX3JwbWRpciBfcnBtZmlsZW5hbWUgX3NiaW5kaXIgX3NoYXJlZHN0YXRlZGlyIF9zaWduYXR1cmUgX3NvdXJjZWRpciBfc291cmNlX3BheWxvYWQgX3NwZWNkaXIgX3NyY3JwbWRpciBfc3lzY29uZmRpciBfdGFyZ2V0IF90YXJnZXRfYWxpYXMgX3RhcmdldF9jcHUgX3RhcmdldF9vcyBfdGFyZ2V0X3BsYXRmb3JtIF90YXJnZXRfdmVuZG9yIF90aW1lY2hlY2sgX3RtcHBhdGggX3RvcGRpciBfdXNyIF91c3JzcmMgX3ZhciBfdmVuZG9yCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBoZXJlJ3MgaXMgYWxsIHRoZSBzcGVjIHNlY3Rpb25zIGRlZmluaXRpb25zOiBQcmVBbWJsZSwgRGVzY3JpcHRpb24sIFBhY2thZ2UsCisiICAgU2NyaXB0cywgRmlsZXMgYW5kIENoYW5nZWxvZworCisiT25lIGxpbmUgbWFjcm9zIC0gdmFsaWQgaW4gYWxsIFNjcmlwdEFyZWFzCisidGlwOiByZW1lbWJlciBkbyBpbmNsdWRlIG5ldyBpdGVucyBvbiBzcGVjU2NyaXB0QXJlYSdzIHNraXAgc2VjdGlvbgorc3luIHJlZ2lvbiBzcGVjU2VjdGlvbk1hY3JvQXJlYSBvbmVsaW5lIG1hdGNoZ3JvdXA9c3BlY1NlY3Rpb25NYWNybyBzdGFydD0nXiVcKGRlZmluZVx8cGF0Y2hcZCpcfHNldHVwXHxjb25maWd1cmVcfEdOVWNvbmZpZ3VyZVx8ZmluZF9sYW5nXHxtYWtlaW5zdGFsbFwpXD4nIGVuZD0nJCcgY29udGFpbnM9c3BlY0NvbW1hbmRPcHRzLHNwZWNNYWNyb0lkZW50aWZpZXIKK3N5biByZWdpb24gc3BlY1NlY3Rpb25NYWNyb0JyYWNrZXRBcmVhIG9uZWxpbmUgbWF0Y2hncm91cD1zcGVjU2VjdGlvbk1hY3JvIHN0YXJ0PSdeJXtcKGNvbmZpZ3VyZVx8R05VY29uZmlndXJlXHxmaW5kX2xhbmdcfG1ha2VpbnN0YWxsXCl9JyBlbmQ9JyQnIGNvbnRhaW5zPXNwZWNDb21tYW5kT3B0cyxzcGVjTWFjcm9JZGVudGlmaWVyCisKKyIlJSBGaWxlcyBTZWN0aW9uICUlCisiVE9ETyAlY29uZmlnIHZhbGlkIHBhcmFtZXRlcnM6IG1pc3Npbmdva1x8bm9yZXBsYWNlCisiVE9ETyAldmVyaWZ5IHZhbGlkIHBhcmFtZXRlcnM6IFwobm90XClcPSBcKG1kNVx8YXRpbWVcfC4uLlwpCitzeW4gcmVnaW9uIHNwZWNGaWxlc0FyZWEgbWF0Y2hncm91cD1zcGVjU2VjdGlvbiBzdGFydD0nXiVbRmZdW0lpXVtMbF1bRWVdW1NzXVw+JyBza2lwPSclXChhdHRyaWJcfGRlZmF0dHJcfGF0dHJcfGRpclx8Y29uZmlnXHxkb2NkaXJcfGRvY1x8bGFuZ1x8dmVyaWZ5XHxnaG9zdFwpXD4nIGVuZD0nXiVbYS16QS1aXSdtZT1lLTIgY29udGFpbnM9c3BlY0ZpbGVzT3B0cyxzcGVjRmlsZXNEaXJlY3RpdmUsQHNwZWNMaXN0ZWRGaWxlcyxzcGVjQ29tbWVudCxzcGVjQ29tbWFuZFNwZWNpYWwsc3BlY01hY3JvSWRlbnRpZmllcgorInRpcDogcmVtZW1iZXIgdG8gaW5jbHVkZSBuZXcgaXRlbnMgaW4gc3BlY0ZpbGVzQXJlYSBhYm92ZQorc3luIG1hdGNoICBzcGVjRmlsZXNEaXJlY3RpdmUgY29udGFpbmVkICclXChhdHRyaWJcfGRlZmF0dHJcfGF0dHJcfGRpclx8Y29uZmlnXHxkb2NkaXJcfGRvY1x8bGFuZ1x8dmVyaWZ5XHxnaG9zdFwpXD4nCisKKyJ2YWxpZCBvcHRpb25zIGZvciBjZXJ0YWluIHNlY3Rpb24gaGVhZGVycworc3luIG1hdGNoIHNwZWNEZXNjcmlwdGlvbk9wdHMgY29udGFpbmVkICdccy1bbG5dXHMqXGEnbXM9cysxLG1lPWUtMQorc3luIG1hdGNoIHNwZWNQYWNrYWdlT3B0cyAgICAgY29udGFpbmVkICAgICdccy1uXHMqXHcnbXM9cysxLG1lPWUtMQorc3luIG1hdGNoIHNwZWNGaWxlc09wdHMgICAgICAgY29udGFpbmVkICAgICdccy1mXHMqXHcnbXM9cysxLG1lPWUtMQorCisKK3N5biBjYXNlIGlnbm9yZQorCisKKyIlJSBQcmVBbWJsZSBTZWN0aW9uICUlCisiQ29weXJpZ2h0IGFuZCBTZXJpYWwgd2VyZSBkZXByZWNhdGVkIGJ5IExpY2Vuc2UgYW5kIEVwb2NoCitzeW4gcmVnaW9uIHNwZWNQcmVBbWJsZURlcHJlY2F0ZWQgb25lbGluZSBtYXRjaGdyb3VwPXNwZWNFcnJvciBzdGFydD0nXlwoQ29weXJpZ2h0XHxTZXJpYWxcKScgZW5kPSckJyBjb250YWlucz1zcGVjRW1haWwsc3BlY1VSTCxzcGVjVVJMTWFjcm8sc3BlY0xpY2Vuc2Usc3BlY0NvbG9uLHNwZWNWYXJpYWJsZXMsc3BlY1NwZWNpYWxDaGFyLHNwZWNNYWNyb0lkZW50aWZpZXIKK3N5biByZWdpb24gc3BlY1ByZUFtYmxlIG9uZWxpbmUgbWF0Y2hncm91cD1zcGVjQ29tbWFuZCBzdGFydD0nXlwoUHJlcmVxXHxTdW1tYXJ5XHxOYW1lXHxWZXJzaW9uXHxQYWNrYWdlclx8UmVxdWlyZXNcfEljb25cfFVSTFx8U291cmNlXGQqXHxQYXRjaFxkKlx8UHJlZml4XHxQYWNrYWdlclx8R3JvdXBcfExpY2Vuc2VcfFJlbGVhc2VcfEJ1aWxkUm9vdFx8RGlzdHJpYnV0aW9uXHxWZW5kb3JcfFByb3ZpZGVzXHxFeGNsdXNpdmVBcmNoXHxFeGNsdWRlQXJjaFx8RXhjbHVzaXZlT1NcfE9ic29sZXRlc1x8QnVpbGRBcmNoXHxCdWlsZEFyY2hpdGVjdHVyZXNcfEJ1aWxkUmVxdWlyZXNcfEJ1aWxkQ29uZmxpY3RzXHxCdWlsZFByZVJlcVx8Q29uZmxpY3RzXHxBdXRvUmVxdWlyZXNcfEF1dG9SZXFcfEF1dG9SZXFQcm92XHxBdXRvUHJvdlx8RXBvY2hcKScgZW5kPSckJyBjb250YWlucz1zcGVjRW1haWwsc3BlY1VSTCxzcGVjVVJMTWFjcm8sc3BlY0xpY2Vuc2Usc3BlY0NvbG9uLHNwZWNWYXJpYWJsZXMsc3BlY1NwZWNpYWxDaGFyLHNwZWNNYWNyb0lkZW50aWZpZXIKKworIiUlIERlc2NyaXB0aW9uIFNlY3Rpb24gJSUKK3N5biByZWdpb24gc3BlY0Rlc2NyaXB0aW9uQXJlYSBtYXRjaGdyb3VwPXNwZWNTZWN0aW9uIHN0YXJ0PSdeJWRlc2NyaXB0aW9uJyBlbmQ9J14lJ21lPWUtMSBjb250YWlucz1zcGVjRGVzY3JpcHRpb25PcHRzLHNwZWNFbWFpbCxzcGVjVVJMLHNwZWNOdW1iZXIsc3BlY01hY3JvSWRlbnRpZmllcixzcGVjQ29tbWVudAorCisiJSUgUGFja2FnZSBTZWN0aW9uICUlCitzeW4gcmVnaW9uIHNwZWNQYWNrYWdlQXJlYSBtYXRjaGdyb3VwPXNwZWNTZWN0aW9uIHN0YXJ0PSdeJXBhY2thZ2UnIGVuZD0nXiUnbWU9ZS0xIGNvbnRhaW5zPXNwZWNQYWNrYWdlT3B0cyxzcGVjUHJlQW1ibGUsc3BlY0NvbW1lbnQKKworIiUlIFNjcmlwdHMgU2VjdGlvbiAlJQorc3luIHJlZ2lvbiBzcGVjU2NyaXB0QXJlYSBtYXRjaGdyb3VwPXNwZWNTZWN0aW9uIHN0YXJ0PSdeJVwocHJlcFx8YnVpbGRcfGluc3RhbGxcfGNsZWFuXHxwcmVcfHBvc3R1blx8cHJldW5cfHBvc3RcKVw+JyBza2lwPSdeJXtcfF4lXChkZWZpbmVcfHBhdGNoXGQqXHxjb25maWd1cmVcfEdOVWNvbmZpZ3VyZVx8c2V0dXBcfGZpbmRfbGFuZ1x8bWFrZWluc3RhbGxcKVw+JyBlbmQ9J14lJ21lPWUtMSBjb250YWlucz1zcGVjU3BlY2lhbFZhcmlhYmxlcyxzcGVjVmFyaWFibGVzLEBzcGVjQ29tbWFuZHMsc3BlY1ZhcmlhYmxlcyxzaERvLHNoRm9yLHNoQ2FzZUVzYWMsc3BlY05vTnVtYmVySGlsaXRlLHNwZWNDb21tYW5kT3B0cyxzaENvbW1lbnQsc2hJZixzcGVjU3BlY2lhbENoYXIsc3BlY01hY3JvSWRlbnRpZmllcixzcGVjU2VjdGlvbk1hY3JvQXJlYSxzcGVjU2VjdGlvbk1hY3JvQnJhY2tldEFyZWEsc2hPcGVyYXRvcixzaFF1b3RlMSxzaFF1b3RlMgorCisiJSUgQ2hhbmdlbG9nIFNlY3Rpb24gJSUKK3N5biByZWdpb24gc3BlY0NoYW5nZWxvZ0FyZWEgbWF0Y2hncm91cD1zcGVjU2VjdGlvbiBzdGFydD0nXiVjaGFuZ2Vsb2cnIGVuZD0nXiUnbWU9ZS0xIGNvbnRhaW5zPXNwZWNFbWFpbCxzcGVjVVJMLHNwZWNXZWVrZGF5LHNwZWNNb250aCxzcGVjTnVtYmVyLHNwZWNDb21tZW50LHNwZWNMaWNlbnNlCisKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiaGVyZSdzIHRoZSBzaGVsbCBzeW50YXggZm9yIGFsbCB0aGUgU2NyaXB0IFNlY3Rpb25zCisKKworc3luIGNhc2UgbWF0Y2gKKworCisic2gtbGlrZSBjb21tZW50IHN0aWxlLCBvbmx5IHZhbGlkIGluIHNjcmlwdCBwYXJ0CitzeW4gbWF0Y2ggc2hDb21tZW50IGNvbnRhaW5lZCAnIy4qJCcKKworc3luIHJlZ2lvbiBzaFF1b3RlMSBjb250YWluZWQgbWF0Y2hncm91cD1zaFF1b3RlRGVsaW0gc3RhcnQ9KycrIHNraXA9K1xcJysgZW5kPSsnKyBjb250YWlucz1zcGVjTWFjcm9JZGVudGlmaWVyCitzeW4gcmVnaW9uIHNoUXVvdGUyIGNvbnRhaW5lZCBtYXRjaGdyb3VwPXNoUXVvdGVEZWxpbSBzdGFydD0rIisgc2tpcD0rXFwiKyBlbmQ9KyIrIGNvbnRhaW5zPXNwZWNWYXJpYWJsZXMsc3BlY01hY3JvSWRlbnRpZmllcgorCitzeW4gbWF0Y2ggc2hPcGVyYXRvciBjb250YWluZWQgJ1s+PHwhJjtdXHxbIT1dPScKK3N5biByZWdpb24gc2hEbyB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXNwZWNCbG9jayBzdGFydD0iXDxkb1w+IiBlbmQ9Ilw8ZG9uZVw+IiBjb250YWlucz1BTExCVVQsc2hGdW5jdGlvbixzaERvRXJyb3Isc2hDYXNlLHNwZWNQcmVBbWJsZSxAc3BlY0xpc3RlZEZpbGVzCisKK3N5biByZWdpb24gc3BlY0lmICBtYXRjaGdyb3VwPXNwZWNCbG9jayBzdGFydD0iJWlmb3NmXHwlaWZvc1x8JWlmbm9zXHwlaWZhcmNoXHwlaWZuYXJjaFx8JWVsc2UiICBlbmQ9JyVlbmRpZicgIGNvbnRhaW5zPUFMTEJVVCwgc3BlY0lmRXJyb3IsIHNoQ2FzZQorCitzeW4gcmVnaW9uICBzaElmIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9c3BlY0Jsb2NrIHN0YXJ0PSJcPGlmXD4iIGVuZD0iXDxmaVw+IiBjb250YWlucz1BTExCVVQsc2hGdW5jdGlvbixzaElmRXJyb3Isc2hDYXNlLEBzcGVjTGlzdGVkRmlsZXMKKworc3luIHJlZ2lvbiAgc2hGb3IgIG1hdGNoZ3JvdXA9c3BlY0Jsb2NrIHN0YXJ0PSJcPGZvclw+IiBlbmQ9Ilw8aW5cPiIgY29udGFpbnM9QUxMQlVULHNoRnVuY3Rpb24sc2hJbkVycm9yLHNoQ2FzZSxAc3BlY0xpc3RlZEZpbGVzCisKK3N5biByZWdpb24gc2hDYXNlRXNhYyB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXNwZWNCbG9jayBzdGFydD0iXDxjYXNlXD4iIG1hdGNoZ3JvdXA9Tk9ORSBlbmQ9Ilw8aW5cPiJtZT1zLTEgY29udGFpbnM9QUxMQlVULHNoRnVuY3Rpb24sc2hDYXNlRXJyb3IsQHNwZWNMaXN0ZWRGaWxlcyBuZXh0Z3JvdXA9c2hDYXNlRXNhYworc3luIHJlZ2lvbiBzaENhc2VFc2FjIG1hdGNoZ3JvdXA9c3BlY0Jsb2NrIHN0YXJ0PSJcPGluXD4iIGVuZD0iXDxlc2FjXD4iIGNvbnRhaW5zPUFMTEJVVCxzaEZ1bmN0aW9uLHNoQ2FzZUVycm9yLEBzcGVjTGlzdGVkRmlsZXNCaW4KK3N5biByZWdpb24gc2hDYXNlIG1hdGNoZ3JvdXA9c3BlY0Jsb2NrIGNvbnRhaW5lZCBzdGFydD0iKSIgIGVuZD0iOzsiIGNvbnRhaW5zPUFMTEJVVCxzaEZ1bmN0aW9uLHNoQ2FzZUVycm9yLHNoQ2FzZSxAc3BlY0xpc3RlZEZpbGVzCisKK3N5biBzeW5jIG1hdGNoIHNoRG9TeW5jICAgICAgIGdyb3VwaGVyZSAgc2hEbyAgICAgICAiXDxkb1w+Igorc3luIHN5bmMgbWF0Y2ggc2hEb1N5bmMgICAgICAgZ3JvdXB0aGVyZSBzaERvICAgICAgICJcPGRvbmVcPiIKK3N5biBzeW5jIG1hdGNoIHNoSWZTeW5jICAgICAgIGdyb3VwaGVyZSAgc2hJZiAgICAgICAiXDxpZlw+Igorc3luIHN5bmMgbWF0Y2ggc2hJZlN5bmMgICAgICAgZ3JvdXB0aGVyZSBzaElmICAgICAgICJcPGZpXD4iCitzeW4gc3luYyBtYXRjaCBzcGVjSWZTeW5jICAgICBncm91cGhlcmUgIHNwZWNJZiAgICAgIiVpZmFyY2hcfCVpZm9zXHwlaWZub3MiCitzeW4gc3luYyBtYXRjaCBzcGVjSWZTeW5jICAgICBncm91cHRoZXJlIHNwZWNJZiAgICAgIiVlbmRJZiIKK3N5biBzeW5jIG1hdGNoIHNoRm9yU3luYyAgICAgIGdyb3VwaGVyZSAgc2hGb3IgICAgICAiXDxmb3JcPiIKK3N5biBzeW5jIG1hdGNoIHNoRm9yU3luYyAgICAgIGdyb3VwdGhlcmUgc2hGb3IgICAgICAiXDxpblw+Igorc3luIHN5bmMgbWF0Y2ggc2hDYXNlRXNhY1N5bmMgZ3JvdXBoZXJlICBzaENhc2VFc2FjICJcPGNhc2VcPiIKK3N5biBzeW5jIG1hdGNoIHNoQ2FzZUVzYWNTeW5jIGdyb3VwdGhlcmUgc2hDYXNlRXNhYyAiXDxlc2FjXD4iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3NwZWNfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc3BlY19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgICJtYWluIHR5cGVzIGNvbG9yIGRlZmluaXRpb25zCisgIEhpTGluayBzcGVjU2VjdGlvbgkJCVN0cnVjdHVyZQorICBIaUxpbmsgc3BlY1NlY3Rpb25NYWNybwkJTWFjcm8KKyAgSGlMaW5rIHNwZWNXV1dsaW5rCQkJUHJlUHJvYworICBIaUxpbmsgc3BlY09wdHMJCQlPcGVyYXRvcgorCisgICJ5ZXMsIGl0J3MgdWdseSwgYnV0IHdoaXRlIGlzIHNvb28gY29vbAorICBpZiAmYmFja2dyb3VuZCA9PSAiZGFyayIKKyAgICBoaSBkZWYgc3BlY0dsb2JhbE1hY3JvCQljdGVybWZnPXdoaXRlCisgIGVsc2UKKyAgICBIaUxpbmsgc3BlY0dsb2JhbE1hY3JvCQlJZGVudGlmaWVyCisgIGVuZGlmCisKKyAgInNoIGNvbG9ycworICBIaUxpbmsgc2hDb21tZW50CQkJQ29tbWVudAorICBIaUxpbmsgc2hJZgkJCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHNoT3BlcmF0b3IJCQlTcGVjaWFsCisgIEhpTGluayBzaFF1b3RlMQkJCVN0cmluZworICBIaUxpbmsgc2hRdW90ZTIJCQlTdHJpbmcKKyAgSGlMaW5rIHNoUXVvdGVEZWxpbQkJCVN0YXRlbWVudAorCisgICJzcGVjIGNvbG9ycworICBIaUxpbmsgc3BlY0Jsb2NrCQkJRnVuY3Rpb24KKyAgSGlMaW5rIHNwZWNDb2xvbgkJCVNwZWNpYWwKKyAgSGlMaW5rIHNwZWNDb21tYW5kCQkJU3RhdGVtZW50CisgIEhpTGluayBzcGVjQ29tbWFuZE9wdHMJCXNwZWNPcHRzCisgIEhpTGluayBzcGVjQ29tbWFuZFNwZWNpYWwJCVNwZWNpYWwKKyAgSGlMaW5rIHNwZWNDb21tZW50CQkJQ29tbWVudAorICBIaUxpbmsgc3BlY0NvbmZpZ3VyZQkJCXNwZWNDb21tYW5kCisgIEhpTGluayBzcGVjRGF0ZQkJCVN0cmluZworICBIaUxpbmsgc3BlY0Rlc2NyaXB0aW9uT3B0cwkJc3BlY09wdHMKKyAgSGlMaW5rIHNwZWNFbWFpbAkJCXNwZWNXV1dsaW5rCisgIEhpTGluayBzcGVjRXJyb3IJCQlFcnJvcgorICBIaUxpbmsgc3BlY0ZpbGVzRGlyZWN0aXZlCQlzcGVjU2VjdGlvbk1hY3JvCisgIEhpTGluayBzcGVjRmlsZXNPcHRzCQkJc3BlY09wdHMKKyAgSGlMaW5rIHNwZWNMaWNlbnNlCQkJU3RyaW5nCisgIEhpTGluayBzcGVjTWFjcm9OYW1lTG9jYWwJCXNwZWNHbG9iYWxNYWNybworICBIaUxpbmsgc3BlY01hY3JvTmFtZU90aGVyCQlzcGVjR2xvYmFsTWFjcm8KKyAgSGlMaW5rIHNwZWNNYW5wYWdlRmlsZQkJTk9ORQorICBIaUxpbmsgc3BlY01vbnRoCQkJc3BlY0RhdGUKKyAgSGlMaW5rIHNwZWNOb051bWJlckhpbGl0ZQkJTk9ORQorICBIaUxpbmsgc3BlY051bWJlcgkJCU51bWJlcgorICBIaUxpbmsgc3BlY1BhY2thZ2VPcHRzCQlzcGVjT3B0cworICBIaUxpbmsgc3BlY1BlcmNlbnQJCQlTcGVjaWFsCisgIEhpTGluayBzcGVjU3BlY2lhbENoYXIJCVNwZWNpYWwKKyAgSGlMaW5rIHNwZWNTcGVjaWFsVmFyaWFibGVzCQlzcGVjR2xvYmFsTWFjcm8KKyAgSGlMaW5rIHNwZWNTcGVjaWFsVmFyaWFibGVzTmFtZXMJc3BlY0dsb2JhbE1hY3JvCisgIEhpTGluayBzcGVjVGFyQ29tbWFuZAkJCXNwZWNDb21tYW5kCisgIEhpTGluayBzcGVjVVJMCQkJc3BlY1dXV2xpbmsKKyAgSGlMaW5rIHNwZWNVUkxNYWNybwkJCXNwZWNXV1dsaW5rCisgIEhpTGluayBzcGVjVmFyaWFibGVzCQkJSWRlbnRpZmllcgorICBIaUxpbmsgc3BlY1dlZWtkYXkJCQlzcGVjRGF0ZQorICBIaUxpbmsgc3BlY0xpc3RlZEZpbGVzQmluCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHNwZWNMaXN0ZWRGaWxlc0RvYwkJU3RhdGVtZW50CisgIEhpTGluayBzcGVjTGlzdGVkRmlsZXNFdGMJCVN0YXRlbWVudAorICBIaUxpbmsgc3BlY0xpc3RlZEZpbGVzTGliCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHNwZWNMaXN0ZWRGaWxlc1ByZWZpeAkJU3RhdGVtZW50CisgIEhpTGluayBzcGVjTGlzdGVkRmlsZXNTaGFyZQkJU3RhdGVtZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNwZWMiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zcGVjbWFuLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NwZWNtYW4udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYjc3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zcGVjbWFuLnZpbQpAQCAtMCwwICsxLDE4MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVNQRUNNQU4gRS1MQU5HVUFHRQorIiBNYWludGFpbmVyOglPciBGcmV1bmQgPG9yQG1vYmlsaWFuLmNvbSA7b21mQGdteC5jby51azsgT3JNZWlyQHlhaG9vLmNvbT4KKyIgTGFzdCBVcGRhdGU6IFdlZCBPY3QgMjQgMjAwMQorCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisifCBJZiBhbnlvbmUgZm91bmQgYW4gZXJyb3Igb3IgZml4IHRoZSBwYXJlbnRoZXNpcyBwYXJ0ICB8CisifCBJIHdpbGwgYmUgaGFwcHkgdG8gaGVhciBhYm91dCBpdAkJCSB8CisifCBUaGFua3MgT3IuCQkJCQkJIHwKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIiBSZW1vdmUgYW55IG9sZCBzeW50YXggc3R1ZmYgaGFuZ2luZyBhcm91bmQKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGtleXdvcmQgIHNwZWNtYW5Ub2RvCWNvbnRhaW5lZCBUT0RPIHRvZG8gVG9EbyBGSVhNRSBYWFgKKworc3luIGtleXdvcmQgc3BlY21hblN0YXRlbWVudCAgIHZhciBpbnN0YW5jZSBvbiBjb21wdXRlIHN0YXJ0IGV2ZW50IGV4cGVjdCBjaGVjayB0aGF0IHJvdXRpbmUKK3N5biBrZXl3b3JkIHNwZWNtYW5TdGF0ZW1lbnQgICBzcGVjbWFuIGlzIGFsc28gZmlyc3Qgb25seSB3aXRoIGxpa2UKK3N5biBrZXl3b3JkIHNwZWNtYW5TdGF0ZW1lbnQgICBsaXN0IG9mIGFsbCByYWRpeCBoZXggZGVjIGJpbiBpZ25vcmUgaWxsZWdhbAorc3luIGtleXdvcmQgc3BlY21hblN0YXRlbWVudCAgIHRyYWNlYWJsZSB1bnRyYWNlYWJsZQorc3luIGtleXdvcmQgc3BlY21hblN0YXRlbWVudCAgIGNvdmVyIHVzaW5nIGNvdW50X29ubHkgdHJhY2Vfb25seSBhdF9sZWFzdCB0cmFuc2l0aW9uIGl0ZW0gcmFuZ2VzCitzeW4ga2V5d29yZCBzcGVjbWFuU3RhdGVtZW50ICAgY3Jvc3MgdGV4dCBjYWxsIHRhc2sgd2l0aGluCisKK3N5biBrZXl3b3JkIHNwZWNtYW5NZXRob2QgICAgICBpbml0aWFsaXplIG5vbl90ZXJtaW5hbCB0ZXN0Z3JvdXAgZGVsYXllZCBleGl0IGZpbmlzaAorc3luIGtleXdvcmQgc3BlY21hbk1ldGhvZCAgICAgIG91dCBhcHBlbmQgcHJpbnQgb3V0ZiBhcHBlbmRmCitzeW4ga2V5d29yZCBzcGVjbWFuTWV0aG9kICAgICAgcG9zdF9nZW5lcmF0ZSBwcmVfZ2VuZXJhdGUgc2V0dXBfdGVzdCBmaW5hbGl6ZV90ZXN0IGV4dHJhY3RfdGVzdAorc3luIGtleXdvcmQgc3BlY21hbk1ldGhvZCAgICAgIGluaXQgcnVuIGNvcHkgYXNfYSBzZXRfY29uZmlnIGR1dF9lcnJvciBhZGQgY2xlYXIgbG9jayBxdWl0CitzeW4ga2V5d29yZCBzcGVjbWFuTWV0aG9kICAgICAgbG9jayB1bmxvY2sgcmVsZWFzZSBzd2FwIHF1aXQgdG9fc3RyaW5nIHZhbHVlIHN0b3BfcnVuCitzeW4ga2V5d29yZCBzcGVjbWFuTWV0aG9kICAgICAgY3JjXzggY3JjXzMyIGNyY18zMl9mbGlwIGdldF9jb25maWcgYWRkMCBhbGxfaW5kaWNlcyBhbmRfYWxsCitzeW4ga2V5d29yZCBzcGVjbWFuTWV0aG9kICAgICAgYXBwbHkgYXZlcmFnZSBjb3VudCBkZWxldGUgZXhpc3RzIGZpcnN0X2luZGV4IGdldF9pbmRpY2VzCitzeW4ga2V5d29yZCBzcGVjbWFuTWV0aG9kICAgICAgaGFzIGluc2VydCBpc19hX3Blcm11dGF0aW9uIGlzX2VtcHR5IGtleSBrZXlfZXhpc3RzIGtleV9pbmRleAorc3luIGtleXdvcmQgc3BlY21hbk1ldGhvZCAgICAgIGxhc3QgbGFzdF9pbmRleCBtYXggbWF4X2luZGV4IG1heF92YWx1ZSBtaW4gbWluX2luZGV4CitzeW4ga2V5d29yZCBzcGVjbWFuTWV0aG9kICAgICAgbWluX3ZhbHVlIG9yX2FsbCBwb3AgcG9wMCBwdXNoIHB1c2gwIHByb2R1Y3QgcmVzaXplIHJldmVyc2UKK3N5biBrZXl3b3JkIHNwZWNtYW5NZXRob2QgICAgICBzb3J0IHNwbGl0IHN1bSB0b3AgdG9wMCB1bmlxdWUgY2xlYXIgaXNfYWxsX2l0ZXJhdGlvbnMKK3N5biBrZXl3b3JkIHNwZWNtYW5NZXRob2QgICAgICBnZXRfZW5jbG9zaW5nX3VuaXQgaGRsX3BhdGggZXhlYyBkZWVwX2NvbXBhcmUgZGVlcF9jb21wYXJlX3BoeXNpY2FsCitzeW4ga2V5d29yZCBzcGVjbWFuTWV0aG9kICAgICAgcGFjayB1bnBhY2sgd2FybmluZyBlcnJvciBmYXRhbAorc3luIG1hdGNoICAgc3BlY21hbk1ldGhvZCAgICAgICJzaXplKCkiCitzeW4ga2V5d29yZCBzcGVjbWFuUGFja2luZyAgICAgcGFja2luZyBsb3cgaGlnaAorc3luIGtleXdvcmQgc3BlY21hblR5cGUgICAgICAgIGxvY2tlciBhZGRyZXNzCitzeW4ga2V5d29yZCBzcGVjbWFuVHlwZSAgICAgICAgYm9keSBjb2RlIHZlYyBjaGFycworc3luIGtleXdvcmQgc3BlY21hblR5cGUgICAgICAgIGludGVnZXIgcmVhbCBib29sIGludCBsb25nIHVpbnQgYnl0ZSBiaXRzIGJpdCB0aW1lIHN0cmluZworc3luIGtleXdvcmQgc3BlY21hblR5cGUgICAgICAgIGJ5dGVfYXJyYXkgZXh0ZXJuYWxfcG9pbnRlcgorc3luIGtleXdvcmQgc3BlY21hbkJvb2xlYW4gICAgIFRSVUUgRkFMU0UKK3N5biBrZXl3b3JkIHNwZWNtYW5QcmVDb25kaXQgICAjaWZkZWYgI2lmbmRlZiAjZWxzZQorCitzeW4ga2V5d29yZCBzcGVjbWFuQ29uZGl0aW9uYWwgY2hvb3NlIG1hdGNoZXMKK3N5biBrZXl3b3JkIHNwZWNtYW5Db25kaXRpb25hbCBpZiB0aGVuIGVsc2Ugd2hlbiB0cnkKKworCisKK3N5biBrZXl3b3JkIHNwZWNtYW5MYWJlbCAgY2FzZSBjYXNleCBjYXNleiBkZWZhdWx0CisKK3N5biBrZXl3b3JkIHNwZWNtYW5Mb2dpY2FsICAgICBhbmQgb3Igbm90IHhvcgorCitzeW4ga2V5d29yZCBzcGVjbWFuUmVwZWF0ICAgICAgdW50aWwgcmVwZWF0IHdoaWxlIGZvciBmcm9tIHRvIHN0ZXAgZWFjaCBkbyBicmVhayBjb250aW51ZQorc3luIGtleXdvcmQgc3BlY21hblJlcGVhdCAgICAgIGJlZm9yZSBuZXh0IHNlcXVlbmNlIGFsd2F5cyAta2luZCBuZXR3b3JrCitzeW4ga2V5d29yZCBzcGVjbWFuUmVwZWF0ICAgICAgaW5kZXggaXQgbWUgaW4gbmV3IHJldHVybiByZXN1bHQgc2VsZWN0CisKK3N5biBrZXl3b3JkIHNwZWNtYW5UZW1wb3JhbCAgICBjeWNsZSBzYW1wbGUgZXZlbnRzIGZvcmV2ZXIKK3N5biBrZXl3b3JkIHNwZWNtYW5UZW1wb3JhbCAgICB3YWl0ICBjaGFuZ2UgIG5lZ2VkZ2UgcmlzZSBmYWxsIGRlbGF5IHN5bmMgc2ltIHRydWUgZGV0YWNoIGV2ZW50dWFsbHkgZW1pdAorCitzeW4ga2V5d29yZCBzcGVjbWFuQ29uc3RhbnQgICAgTUFYX0lOVCBNSU5fSU5UIE5VTEwgVU5ERUYKKworc3luIGtleXdvcmQgc3BlY21hbkRlZmluZSAgICAgICBkZWZpbmUgYXMgY29tcHV0ZWQgdHlwZSBleHRlbmQKK3N5biBrZXl3b3JkIHNwZWNtYW5EZWZpbmUgICAgICAgdmVyaWxvZyB2aGRsIHZhcmlhYmxlIGdsb2JhbCBzeXMKK3N5biBrZXl3b3JkIHNwZWNtYW5TdHJ1Y3R1cmUgICAgc3RydWN0IHVuaXQKK3N5biBrZXl3b3JkIHNwZWNtYW5JbmNsdWRlICAgICBpbXBvcnQKK3N5biBrZXl3b3JkIHNwZWNtYW5Db25zdHJhaW50ICBnZW4ga2VlcCBrZWVwaW5nIHNvZnQJYmVmb3JlCisKK3N5biBrZXl3b3JkIHNwZWNtYW5TcGVjaWFsICAgICB1bnR5cGVkIHN5bXRhYiBFQ0hPIERPRUNITworc3luIGtleXdvcmQgc3BlY21hbkZpbGUgICAgICAgIGZpbGVzIGxvYWQgbW9kdWxlIG50diBzb3VyY2VfcmVmIHNjcmlwdCByZWFkIHdyaXRlCitzeW4ga2V5d29yZCBzcGVjbWFuRlNNCSAgICAgICBpbml0aWFsIGlkbGUgb3RoZXJzIHBvc2VkZ2UgY2xvY2sgY3ljbGVzCisKKworc3luIG1hdGNoICAgc3BlY21hbk9wZXJhdG9yICAgICJbJnx+PjwhKSgqJUArLz0/Ojt9eywuXF5cLVxbXF1dIgorc3luIG1hdGNoICAgc3BlY21hbk9wZXJhdG9yICAgICIrPSIKK3N5biBtYXRjaCAgIHNwZWNtYW5PcGVyYXRvciAgICAiLT0iCitzeW4gbWF0Y2ggICBzcGVjbWFuT3BlcmF0b3IgICAgIio9IgorCitzeW4gbWF0Y2ggICBzcGVjbWFuQ29tbWVudCAgICAgIi8vLioiICBjb250YWlucz1zcGVjbWFuVG9kbworc3luIG1hdGNoICAgc3BlY21hbkNvbW1lbnQgICAgICItLS4qIgorc3luIHJlZ2lvbiAgc3BlY21hbkNvbW1lbnQgICAgIHN0YXJ0PSJeJz4iaHM9cysyIGVuZD0iXjwnImhlPWUtMgorCitzeW4gbWF0Y2ggICBzcGVjbWFuSERMCSAgICAgICAiJ1tgLmEtekEtWjAtOV9AXFtcXV1cK1w+JyIKKworCitzeW4gbWF0Y2ggICBzcGVjbWFuQ29tcGFyZSAgICAiPT0iCitzeW4gbWF0Y2ggICBzcGVjbWFuQ29tcGFyZSAgICAiIT09PSIKK3N5biBtYXRjaCAgIHNwZWNtYW5Db21wYXJlICAgICI9PT0iCitzeW4gbWF0Y2ggICBzcGVjbWFuQ29tcGFyZSAgICAiIT0iCitzeW4gbWF0Y2ggICBzcGVjbWFuQ29tcGFyZSAgICAiPj0iCitzeW4gbWF0Y2ggICBzcGVjbWFuQ29tcGFyZSAgICAiPD0iCitzeW4gbWF0Y2ggICBzcGVjbWFuTnVtYmVyICJbMC05XTpbMC05XSIKK3N5biBtYXRjaCAgIHNwZWNtYW5OdW1iZXIgIlwoXDxcZFwrXHxcKSdbYkJdXHMqWzAtMV94WHpaP11cK1w+Igorc3luIG1hdGNoICAgc3BlY21hbk51bWJlciAiMFtiQl1ccypbMC0xX3hYelo/XVwrXD4iCitzeW4gbWF0Y2ggICBzcGVjbWFuTnVtYmVyICJcKFw8XGRcK1x8XCknW29PXVxzKlswLTdfeFh6Wj9dXCtcPiIKK3N5biBtYXRjaCAgIHNwZWNtYW5OdW1iZXIgIjBbb09dXHMqWzAtOWEtZkEtRl94WHpaP11cK1w+Igorc3luIG1hdGNoICAgc3BlY21hbk51bWJlciAiXChcPFxkXCtcfFwpJ1tkRF1ccypbMC05X3hYelo/XVwrXD4iCitzeW4gbWF0Y2ggICBzcGVjbWFuTnVtYmVyICJcKFw8XGRcK1x8XCknW2hIXVxzKlswLTlhLWZBLUZfeFh6Wj9dXCtcPiIKK3N5biBtYXRjaCAgIHNwZWNtYW5OdW1iZXIgIjBbeFhdXHMqWzAtOWEtZkEtRl94WHpaP11cK1w+Igorc3luIG1hdGNoICAgc3BlY21hbk51bWJlciAiXDxbKy1dXD1bMC05X11cK1woXC5bMC05X10qXHxcKVwoZVswLTlfXSpcfFwpXD4iCisKK3N5biByZWdpb24gIHNwZWNtYW5TdHJpbmcgc3RhcnQ9KyIrICBlbmQ9KyIrCisKKworCisiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIiBJIHRvb2sgdGhpcyBzZWN0aW9uIGZyb20gYy52aW0gYnV0IEkgZGlkbnQgc3VjY2VkZWQgdG8gbWFrZSBpdCB3b3JrCisiIEFOWSBvbmUgd2hvIGRhcmUganVtcGluZyB0byB0aGlzIGRlZXAgd2F0dGVyIGlzIG1vcmUgdGhhbiB3ZWxvY29tZSEKKyIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisiImNhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXMgYW5kIGJyYWNrZXRzCisKKyJzeW4gY2x1c3RlciAgICAgc3BlY21hblBhcmVuR3JvdXAgICAgIGNvbnRhaW5zPXNwZWNtYW5QYXJlbkVycm9yCisiIiAsc3BlY21hbk51bWJlcmEsc3BlY21hbkNvbW1lbnQKKyJpZiBleGlzdHMoInNwZWNtYW5fbm9fYnJhY2tldF9lcnJvciIpCisic3luIHJlZ2lvbiAgICBzcGVjbWFuUGFyZW4JICAgICB0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsQHNwZWNtYW5QYXJlbkdyb3VwCisic3luIG1hdGNoICAgICBzcGVjbWFuUGFyZW5FcnJvciAgICAgIikiCisic3luIG1hdGNoICAgICBzcGVjbWFuRXJySW5QYXJlbiAgICAgY29udGFpbmVkICJbe31dIgorImVsc2UKKyJzeW4gcmVnaW9uICAgIHNwZWNtYW5QYXJlbgkgICAgIHRyYW5zcGFyZW50IHN0YXJ0PScoJyBlbmQ9JyknIGNvbnRhaW5zPUFMTEJVVCxAc3BlY21hblBhcmVuR3JvdXAsc3BlY21hbkVyckluQnJhY2tldAorInN5biBtYXRjaCAgICAgc3BlY21hblBhcmVuRXJyb3IgICAgICJbXF0pXSIKKyJzeW4gbWF0Y2ggICAgIHNwZWNtYW5FcnJJblBhcmVuICAgICBjb250YWluZWQgIltcXXt9XSIKKyJzeW4gcmVnaW9uICAgIHNwZWNtYW5CcmFja2V0CSAgICAgdHJhbnNwYXJlbnQgc3RhcnQ9J1xbJyBlbmQ9J10nIGNvbnRhaW5zPUFMTEJVVCxAc3BlY21hblBhcmVuR3JvdXAsc3BlY21hbkVyckluUGFyZW4KKyJzeW4gbWF0Y2ggICAgIHNwZWNtYW5FcnJJbkJyYWNrZXQgICBjb250YWluZWQgIlspO3t9XSIKKyJlbmRpZgorIgorCisiTW9kaWZ5IHRoZSBmb2xsb3dpbmcgYXMgbmVlZGVkLiAgVGhlIHRyYWRlLW9mZiBpcyBwZXJmb3JtYW5jZSB2ZXJzdXMKKyJmdW5jdGlvbmFsaXR5LgorCitzeW4gc3luYyBsaW5lcz01MAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zcGVjbWFuX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3NwZWNtYW5fc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorCUhpTGluawlzcGVjbWFuQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKwlIaUxpbmsJc3BlY21hbkNvbnN0cmFpbnQJQ29uZGl0aW9uYWwKKwlIaUxpbmsJc3BlY21hblJlcGVhdAkJUmVwZWF0CisJSGlMaW5rCXNwZWNtYW5TdHJpbmcJCVN0cmluZworCUhpTGluawlzcGVjbWFuQ29tbWVudAkJQ29tbWVudAorCUhpTGluawlzcGVjbWFuQ29uc3RhbnQJCU1hY3JvCisJSGlMaW5rCXNwZWNtYW5OdW1iZXIJCU51bWJlcgorCUhpTGluawlzcGVjbWFuQ29tcGFyZQkJT3BlcmF0b3IKKwlIaUxpbmsJc3BlY21hbk9wZXJhdG9yCQlPcGVyYXRvcgorCUhpTGluawlzcGVjbWFuTG9naWNhbAkJT3BlcmF0b3IKKwlIaUxpbmsJc3BlY21hblN0YXRlbWVudAlTdGF0ZW1lbnQKKwlIaUxpbmsJc3BlY21hbkhETAkJU3BlY2lhbENoYXIKKwlIaUxpbmsJc3BlY21hbk1ldGhvZAkJRnVuY3Rpb24KKwlIaUxpbmsJc3BlY21hbkluY2x1ZGUJCUluY2x1ZGUKKwlIaUxpbmsJc3BlY21hblN0cnVjdHVyZQlTdHJ1Y3R1cmUKKwlIaUxpbmsJc3BlY21hbkJvb2xlYW4JCUJvb2xlYW4KKwlIaUxpbmsJc3BlY21hbkZTTQkJTGFiZWwKKwlIaUxpbmsJc3BlY21hblNwZWNpYWwJCVNwZWNpYWwKKwlIaUxpbmsJc3BlY21hblR5cGUJCVR5cGUKKwlIaUxpbmsJc3BlY21hblRlbXBvcmFsCQlUeXBlCisJSGlMaW5rCXNwZWNtYW5GaWxlCQlJbmNsdWRlCisJSGlMaW5rCXNwZWNtYW5QcmVDb25kaXQJSW5jbHVkZQorCUhpTGluawlzcGVjbWFuRGVmaW5lCQlUeXBlZGVmCisJSGlMaW5rCXNwZWNtYW5MYWJlbAkJTGFiZWwKKwlIaUxpbmsJc3BlY21hblBhY2tpbmcJCWtleXdvcmQKKwlIaUxpbmsJc3BlY21hblRvZG8JCVRvZG8KKwlIaUxpbmsJc3BlY21hblBhcmVuRXJyb3IJRXJyb3IKKwlIaUxpbmsJc3BlY21hbkVyckluUGFyZW4JRXJyb3IKKwlIaUxpbmsJc3BlY21hbkVyckluQnJhY2tldAlFcnJvcgorCWRlbGNvbW1hbmQJSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzcGVjbWFuIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc3BpY2UudmltIGIvcnVudGltZS9zeW50YXgvc3BpY2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMTQzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zcGljZS52aW0KQEAgLTAsMCArMSw4NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVNwaWNlIGNpcmN1aXQgc2ltdWxhdG9yIGlucHV0IG5ldGxpc3QKKyIgTWFpbnRhaW5lcjoJTm9hbSBIYWxldnkgPE5vYW0uSGFsZXZ5Lm1vdG9yb2xhLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CTEyLzA4Lzk5CisiCisiIFRoaXMgaXMgYmFzZWQgb24gc2gudmltIGJ5IExlbm5hcnQgU2NodWx0egorIiBidXQgZ3JlYXRseSBzaW1wbGlmaWVkCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBzcGljZSBzeW50YXggaXMgY2FzZSBJTnNlbnNpdGl2ZQorc3luIGNhc2UgaWdub3JlCisKK3N5biBrZXl3b3JkCXNwaWNlVG9kbwljb250YWluZWQgVE9ETworCitzeW4gbWF0Y2ggc3BpY2VDb21tZW50ICAiXiBcPVwqLiokIgorc3luIG1hdGNoIHNwaWNlQ29tbWVudCAgIlwkLiokIgorCisiIE51bWJlcnMsIGFsbCB3aXRoIGVuZ2luZWVyaW5nIHN1ZmZpeGVzIGFuZCBvcHRpb25hbCB1bml0cworIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoIHNwaWNlTnVtYmVyICAiXDxbMC05XVwrXC5bMC05XSpcKGVbLStdXD1bMC05XVwrXClcPVwobWVnXD1cfFthZnBudW1rZ11cKVw9IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgc3RhcnRpbmcgd2l0aCBhIGRvdCwgb3B0aW9uYWwgZXhwb25lbnQKK3N5biBtYXRjaCBzcGljZU51bWJlciAgIlwuWzAtOV1cK1woZVstK11cPVswLTldXCtcKVw9XChtZWdcPVx8W2FmcG51bWtnXVwpXD0iCisiaW50ZWdlciBudW1iZXIgd2l0aCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoIHNwaWNlTnVtYmVyICAiXDxbMC05XVwrXChlWy0rXVw9WzAtOV1cK1wpXD1cKG1lZ1w9XHxbYWZwbnVta2ddXClcPSIKKworIiBNaXNjCisiPT09PT0KK3N5biBtYXRjaCAgIHNwaWNlV3JhcExpbmVPcGVyYXRvciAgICAgICAiXFwkIgorc3luIG1hdGNoICAgc3BpY2VXcmFwTGluZU9wZXJhdG9yICAgICAgICJeKyIKKworc3luIG1hdGNoICAgc3BpY2VTdGF0ZW1lbnQgICAgICAiXiBcPVwuXElcKyIKKworIiBNYXRjaGluZyBwYWlycyBvZiBwYXJlbnRoZXNlcworIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3luIHJlZ2lvbiAgc3BpY2VQYXJlbiB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXNwaWNlT3BlcmF0b3Igc3RhcnQ9IigiIGVuZD0iKSIgY29udGFpbnM9QUxMQlVULHNwaWNlUGFyZW5FcnJvcgorc3luIHJlZ2lvbiAgc3BpY2VTaW5nbGVxdW90ZSBtYXRjaGdyb3VwPXNwaWNlT3BlcmF0b3Igc3RhcnQ9KycrIGVuZD0rJysKKworIiBFcnJvcnMKKyI9PT09PT09CitzeW4gbWF0Y2ggc3BpY2VQYXJlbkVycm9yICIpIgorCisiIFN5bmNzCisiID09PT09CitzeW4gc3luYyBtaW5saW5lcz01MAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zcGljZV9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zcGljZV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBzcGljZVRvZG8JCVRvZG8KKyAgSGlMaW5rIHNwaWNlV3JhcExpbmVPcGVyYXRvcglzcGljZU9wZXJhdG9yCisgIEhpTGluayBzcGljZVNpbmdsZXF1b3RlCXNwaWNlRXhwcgorICBIaUxpbmsgc3BpY2VFeHByCQlGdW5jdGlvbgorICBIaUxpbmsgc3BpY2VQYXJlbkVycm9yCUVycm9yCisgIEhpTGluayBzcGljZVN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayBzcGljZU51bWJlcgkJTnVtYmVyCisgIEhpTGluayBzcGljZUNvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHNwaWNlT3BlcmF0b3IJCU9wZXJhdG9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNwaWNlIgorCisiIGluc2VydCB0aGUgZm9sbG93aW5nIHRvICRWSU0vc3ludGF4L3NjcmlwdHMudmltCisiIHRvIGF1dG9kZXRlY3QgSFNwaWNlIG5ldGxpc3RzIGFuZCB0ZXh0IGxpc3Rpbmcgb3V0cHV0OgorIgorIiAiIFNwaWNlIG5ldGxpc3RzIGFuZCB0ZXh0IGxpc3RpbmdzCisiIGVsc2VpZiBnZXRsaW5lKDEpID1+ICdzcGljZVw+JyB8fCBnZXRsaW5lKCIkIikgPX4gJ15cLmVuZCcKKyIgICBzbyA8c2ZpbGU+OnA6aC9zcGljZS52aW0KKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NwbGludC52aW0gYi9ydW50aW1lL3N5bnRheC9zcGxpbnQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMjgzODAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zcGxpbnQudmltCkBAIC0wLDAgKzEsMjYwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJc3BsaW50IChDIHdpdGggbGNsaW50L3NwbGludCBBbm5vdGF0aW9ucykKKyIgTWFpbnRhaW5lcjoJUmFsZiBXaWxkZW5odWVzIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorIiBTcGxpbnQgSG9tZToJaHR0cDovL3d3dy5zcGxpbnQub3JnLworIiBMYXN0IENoYW5nZToJJERhdGUkCisiICRSZXZpc2lvbiQKKworIiBOb3RlOgkJU3BsaW50IGFubm90YXRlZCBmaWxlcyBhcmUgbm90IGRldGVjdGVkIGJ5IGRlZmF1bHQuCisiCQlJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBmaWxlIGZvciBoaWdobGlnaHRpbmcgQyBjb2RlLAorIgkJcGxlYXNlIG1ha2Ugc3VyZSBzcGxpbnQudmltIGlzIHNvdXJjZWQgaW5zdGVhZCBvZiBjLnZpbSwKKyIJCWZvciBleGFtcGxlIGJ5IHB1dHRpbmcKKyIJCQkvKiB2aW06IHNldCBmaWxldHlwZT1zcGxpbnQgOiAqLworIgkJYXQgdGhlIGVuZCBvZiB5b3VyIGNvZGUgb3Igc29tZXRoaW5nIGxpa2UKKyIJCQlhdSEgQnVmUmVhZCxCdWZOZXdGaWxlICouYwlzZXRmaWxldHlwZSBzcGxpbnQKKyIJCWluIHlvdXIgdmltcmMgZmlsZSBvciBmaWxldHlwZS52aW0KKworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgUmVhZCB0aGUgQyBzeW50YXggdG8gc3RhcnQgd2l0aAoraWYgdmVyc2lvbiA8IDYwMAorICBzbyA8c2ZpbGU+OnA6aC9jLnZpbQorZWxzZQorICBydW50aW1lISBzeW50YXgvYy52aW0KK2VuZGlmCisKKworIiBGSVhNRTogdXNlcyBhbmQgY2hhbmdlcyBzZXZlcmFsIGNsdXN0ZXJzIGRlZmluZWQgaW4gYy52aW0KKyIJc28gd2F0Y2ggZm9yIGNoYW5nZXMgdGhlcmUKKworIiBUT0RPOiBtYWtlIGEgbGl0dGxlIG1vcmUgZ3JhbW1hciBleHBsaWNpdAorIgltYXRjaCBmbGFncyB3aXRoIGh5cGhlbiBhbmQgdW5kZXJzY29yZSBub3RhdGlvbgorIgltYXRjaCBmbGFnIGV4cGFuZGVkIGZvcm1zCisiCWFjY2VwdCBvdGhlciBjb21tZW50IGNoYXIgdGhhbiBACisKK3N5biBjYXNlIG1hdGNoCisiIHNwbGludCBhbm5vdGF0aW9ucyAodGFrZW4gZnJvbSAnc3BsaW50IC1oZWxwIGFubm90YXRpb25zJykKK3N5biBtYXRjaCAgIHNwbGludFN0YXRlQW5ub3QJY29udGFpbmVkICJcKHByZVx8cG9zdFwpOlwob25seVx8c2hhcmVkXHxvd25lZFx8ZGVwZW5kZW50XHxvYnNlcnZlclx8ZXhwb3NlZFx8aXNudWxsXHxub3RudWxsXCkiCitzeW4ga2V5d29yZCBzcGxpbnRTcGVjaWFsQW5ub3QgIGNvbnRhaW5lZCBzcGVjaWFsCitzeW4ga2V5d29yZCBzcGxpbnRTcGVjVGFnCWNvbnRhaW5lZCB1c2VzIHNldHMgZGVmaW5lcyBhbGxvY2F0ZWQgcmVsZWFzZXMKK3N5biBrZXl3b3JkIHNwbGludE1vZGlmaWVzCWNvbnRhaW5lZCBtb2RpZmllcworc3luIGtleXdvcmQgc3BsaW50UmVxdWlyZXMJY29udGFpbmVkIHJlcXVpcmVzIGVuc3VyZXMKK3N5biBrZXl3b3JkIHNwbGludEdsb2JhbHMJY29udGFpbmVkIGdsb2JhbHMKK3N5biBrZXl3b3JkIHNwbGludEdsb2JpdGVtCWNvbnRhaW5lZCBpbnRlcm5hbFN0YXRlIGZpbGVTeXN0ZW0KK3N5biBrZXl3b3JkIHNwbGludEdsb2Jhbm5vdAljb250YWluZWQgdW5kZWYga2lsbGVkCitzeW4ga2V5d29yZCBzcGxpbnRXYXJuaW5nCWNvbnRhaW5lZCB3YXJuCisKK3N5biBrZXl3b3JkIHNwbGludE1vZGl0ZW0JY29udGFpbmVkIGludGVybmFsU3RhdGUgZmlsZVN5c3RlbSBub3RoaW5nCitzeW4ga2V5d29yZCBzcGxpbnRSZXFpdGVtCWNvbnRhaW5lZCBNYXhTZXQgTWF4UmVhZCByZXN1bHQKK3N5biBrZXl3b3JkIHNwbGludEl0ZXIJCWNvbnRhaW5lZCBpdGVyIHlpZWxkCitzeW4ga2V5d29yZCBzcGxpbnRDb25zdAkJY29udGFpbmVkIGNvbnN0YW50CitzeW4ga2V5d29yZCBzcGxpbnRBbHQJCWNvbnRhaW5lZCBhbHQKKworc3luIGtleXdvcmQgc3BsaW50VHlwZQkJY29udGFpbmVkIGFic3RyYWN0IGNvbmNyZXRlIG11dGFibGUgaW1tdXRhYmxlIHJlZmNvdW50ZWQgbnVtYWJzdHJhY3QKK3N5biBrZXl3b3JkIHNwbGludEdsb2JhbFR5cGUJY29udGFpbmVkIHVuY2hlY2tlZCBjaGVja21vZCBjaGVja2VkIGNoZWNrZWRzdHJpY3QKK3N5biBrZXl3b3JkIHNwbGludE1lbU1nbQljb250YWluZWQgZGVwZW5kZW50IGtlZXAga2lsbHJlZiBvbmx5IG93bmVkIHNoYXJlZCB0ZW1wCitzeW4ga2V5d29yZCBzcGxpbnRBbGlhcwkJY29udGFpbmVkIHVuaXF1ZSByZXR1cm5lZAorc3luIGtleXdvcmQgc3BsaW50RXhwb3N1cmUJY29udGFpbmVkIG9ic2VydmVyIGV4cG9zZWQKK3N5biBrZXl3b3JkIHNwbGludERlZlN0YXRlCWNvbnRhaW5lZCBvdXQgaW4gcGFydGlhbCByZWxkZWYKK3N5biBrZXl3b3JkIHNwbGludEdsb2JTdGF0ZQljb250YWluZWQgdW5kZWYga2lsbGVkCitzeW4ga2V5d29yZCBzcGxpbnROdWxsU3RhdGUJY29udGFpbmVkIG51bGwgbm90bnVsbCByZWxudWxsCitzeW4ga2V5d29yZCBzcGxpbnROdWxsUHJlZAljb250YWluZWQgdHJ1ZW51bGwgZmFsc2VudWxsIG51bGx3aGVudHJ1ZSBmYWxzZXdoZW5udWxsCitzeW4ga2V5d29yZCBzcGxpbnRFeGl0CQljb250YWluZWQgZXhpdHMgbWF5ZXhpdCB0cnVlZXhpdCBmYWxzZWV4aXQgbmV2ZXJleGl0CitzeW4ga2V5d29yZCBzcGxpbnRFeGVjCQljb250YWluZWQgbm9yZXR1cm4gbWF5bm90cmV0dXJuIG5vcmV0dXJud2hlbnRydWUgbm9yZXR1cm53aGVuZmFsc2UgYWx3YXlzcmV0dXJucworc3luIGtleXdvcmQgc3BsaW50U2VmCQljb250YWluZWQgc2VmCitzeW4ga2V5d29yZCBzcGxpbnREZWNsCQljb250YWluZWQgdW51c2VkIGV4dGVybmFsCitzeW4ga2V5d29yZCBzcGxpbnRDYXNlCQljb250YWluZWQgZmFsbHRocm91Z2gKK3N5biBrZXl3b3JkIHNwbGludEJyZWFrCQljb250YWluZWQgaW5uZXJicmVhayBsb29wYnJlYWsgc3dpdGNoYnJlYWsgaW5uZXJjb250aW51ZQorc3luIGtleXdvcmQgc3BsaW50VW5yZWFjaAljb250YWluZWQgbm90cmVhY2hlZAorc3luIGtleXdvcmQgc3BsaW50U3BlY0Z1bmMJY29udGFpbmVkIHByaW50Zmxpa2Ugc2NhbmZsaWtlIG1lc3NhZ2VsaWtlCisKKyIgVE9ETzogbWFrZSB0aGVzZSByZWdpb24gb3IgbWF0Y2gKK3N5biBrZXl3b3JkIHNwbGludEVyclN1cHAJY29udGFpbmVkIGkgaWdub3JlIGVuZCB0CitzeW4gbWF0Y2ggICBzcGxpbnRFcnJTdXBwCWNvbnRhaW5lZCAiW2l0XVxkXCtcPiIKK3N5biBrZXl3b3JkIHNwbGludFR5cGVBY2MJY29udGFpbmVkIGFjY2VzcyBub2FjY2VzcworCitzeW4ga2V5d29yZCBzcGxpbnRNYWNybwkJY29udGFpbmVkIG5vdGZ1bmN0aW9uCitzeW4gbWF0Y2ggICBzcGxpbnRTcGVjVHlwZQljb250YWluZWQgIlwoXHx1bnNpZ25lZFx8c2lnbmVkXClpbnRlZ3JhbHR5cGUiCisKKyIgRmxhZ3MgdGFrZW4gZnJvbSAnc3BsaW50IC1oZWxwIGZsYWdzIGZ1bGwnIGRpdmlkZWQgaW4gbG9jYWwgYW5kIGdsb2JhbCBmbGFncworIgkJCQkgTG9jYWwgRmxhZ3M6CitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBhYnN0cmFjdCBhYnN0cmFjdGNvbXBhcmUgYWNjZXNzYWxsIGFjY2Vzc2N6ZWNoIGFjY2Vzc2N6ZWNob3Nsb3Zhaworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgYWNjZXNzZmlsZSBhY2Nlc3Ntb2R1bGUgYWNjZXNzc2xvdmFrIGFsaWFzdW5pcXVlIGFsbGJsb2NrCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBhbGxlbXB0eSBhbGxnbG9icyBhbGxpbXBvbmx5IGFsbG1hY3JvcyBhbHdheXNleGl0cworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgYW5ub3RhdGlvbmVycm9yIGFuc2k4OWxpbWl0cyBhc3NpZ25leHBvc2UgYmFkZmxhZyBiaXR3aXNlc2lnbmVkCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBib29sY29tcGFyZSBib29sZmFsc2UgYm9vbGludCBib29sb3BzIGJvb2x0cnVlCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBib29sdHlwZSBib3VuZHMgYm91bmRzY29tcGFjdGVycm9ybWVzc2FnZXMgYm91bmRzcmVhZCBib3VuZHN3cml0ZQorc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgYnJhbmNoc3RhdGUgYnVmZmVyb3ZlcmZsb3cgYnVmZmVyb3ZlcmZsb3doaWdoIGJ1Z3NsaW1pdCBjYXNlYnJlYWsKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGNhc2VpbnNlbnNpdGl2ZWZpbGVuYW1lcyBjYXN0ZXhwb3NlIGNhc3RmY25wdHIgY2hhcmluZGV4IGNoYXJpbnQKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGNoYXJpbnRsaXRlcmFsIGNoYXJ1bnNpZ25lZGNoYXIgY2hlY2tlZGdsb2JhbGlhcyBjaGVja21vZGdsb2JhbGlhcyBjaGVja3Bvc3QKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGNoZWNrc3RyaWN0Z2xvYmFsaWFzIGNoZWNrc3RyaWN0Z2xvYnMgY29kZWltcG9ubHkgY29tbWVudGNoYXIgY29tbWVudGVycm9yCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBjb21wZGVmIGNvbXBkZXN0cm95IGNvbXBtZW1wYXNzIGNvbnN0bWFjcm9zIGNvbnN0cHJlZml4CitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBjb25zdHByZWZpeGV4Y2x1ZGUgY29uc3R1c2UgY29udGludWVjb21tZW50IGNvbnRyb2xuZXN0ZGVwdGggY3BwbmFtZXMKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGNzdm92ZXJ3cml0ZSBjemVjaCBjemVjaGNvbnN0cyBjemVjaGZjbnMgY3plY2htYWNyb3MKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGN6ZWNob3Nsb3ZhayBjemVjaG9zbG92YWtjb25zdHMgY3plY2hvc2xvdmFrZmNucyBjemVjaG9zbG92YWttYWNyb3MgY3plY2hvc2xvdmFrdHlwZXMKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGN6ZWNob3Nsb3Zha3ZhcnMgY3plY2h0eXBlcyBjemVjaHZhcnMgZGVidWdmY25jb25zdHJhaW50IGRlY2x1bmRlZgorc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgZGVlcGJyZWFrIGRlcGFycmF5cyBkZXBlbmRlbnR0cmFucyBkaXN0aW5jdGV4dGVybmFsbmFtZXMgZGlzdGluY3RpbnRlcm5hbG5hbWVzCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBkdXBsaWNhdGVjYXNlcyBkdXBsaWNhdGVxdWFscyBlbHNlaWZjb21wbGV0ZSBlbXB0eXJldCBlbnVtaW5kZXgKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGVudW1pbnQgZW51bW1lbWJlcnMgZW51bW1lbXVzZSBlbnVtcHJlZml4IGVudW1wcmVmaXhleGNsdWRlCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBldmFsb3JkZXIgZXZhbG9yZGVydW5jb24gZXhpdGFyZyBleHBvcnRhbnkgZXhwb3J0Y29uc3QKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGV4cG9ydGZjbiBleHBvcnRoZWFkZXIgZXhwb3J0aGVhZGVydmFyIGV4cG9ydGl0ZXIgZXhwb3J0bG9jYWwKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGV4cG9ydG1hY3JvIGV4cG9ydHR5cGUgZXhwb3J0dmFyIGV4cG9zZXRyYW5zIGV4dGVybmFsbmFtZWNhc2VpbnNlbnNpdGl2ZQorc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgZXh0ZXJuYWxuYW1lbGVuIGV4dGVybmFscHJlZml4IGV4dGVybmFscHJlZml4ZXhjbHVkZSBmY25kZXJlZiBmY25tYWNyb3MKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGZjbnBvc3QgZmNudXNlIGZpZWxkdXNlIGZpbGVleHRlbnNpb25zIGZpbGVzdGF0aWNwcmVmaXgKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGZpbGVzdGF0aWNwcmVmaXhleGNsdWRlIGZpcnN0Y2FzZSBmaXhlZGZvcm1hbGFycmF5IGZsb2F0ZG91YmxlIGZvcmJsb2NrCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBmb3JjZWhpbnRzIGZvcmVtcHR5IGZvcmxvb3BleGVjIGZvcm1hbGFycmF5IGZvcm1hdGNvZGUKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGZvcm1hdGNvbnN0IGZvcm1hdHR5cGUgZm9yd2FyZGRlY2wgZnJlc2h0cmFucyBmdWxsaW5pdGJsb2NrCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBnbG9iYWxpYXMgZ2xvYmFscHJlZml4IGdsb2JhbHByZWZpeGV4Y2x1ZGUgZ2xvYmltcG9ubHkgZ2xvYm5vZ2xvYnMKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGdsb2JzIGdsb2JzaW1wbW9kc25vdGhpbmcgZ2xvYnN0YXRlIGdsb2J1c2UgZ251ZXh0ZW5zaW9ucworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgZ3JhbW1hciBoYXN5aWVsZCBoaW50cyBodG1sZmlsZWZvcm1hdCBpZmJsb2NrCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBpZmVtcHR5IGlnbm9yZXF1YWxzIGlnbm9yZXNpZ25zIGltbWVkaWF0ZXRyYW5zIGltcGFic3RyYWN0CitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBpbXBjaGVja2VkZ2xvYnMgaW1wY2hlY2tlZHNwZWNnbG9icyBpbXBjaGVja2Vkc3RhdGljcyBpbXBjaGVja2Vkc3RyaWN0Z2xvYnMgaW1wY2hlY2tlZHN0cmljdHNwZWNnbG9icworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgaW1wY2hlY2tlZHN0cmljdHN0YXRpY3MgaW1wY2hlY2ttb2RnbG9icyBpbXBjaGVja21vZGludGVybmFscyBpbXBjaGVja21vZHNwZWNnbG9icyBpbXBjaGVja21vZHN0YXRpY3MKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGltcGNvbmogaW1wbGVtZW50YXRpb25vcHRpb25hbCBpbXBsaWN0Y29uc3RyYWludCBpbXBvdXRzIGltcHR5cGUKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGluY2x1ZGVuZXN0IGluY29tcGxldGV0eXBlIGluY29uZGVmcyBpbmNvbmRlZnNsaWIgaW5kZW50c3BhY2VzCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBpbmZsb29wcyBpbmZsb29wc3VuY29uIGluaXRhbGxlbGVtZW50cyBpbml0c2l6ZSBpbnRlcm5hbGdsb2JzCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBpbnRlcm5hbGdsb2Jzbm9nbG9icyBpbnRlcm5hbG5hbWVjYXNlaW5zZW5zaXRpdmUgaW50ZXJuYWxuYW1lbGVuIGludGVybmFsbmFtZWxvb2thbGlrZSBpc285OWxpbWl0cworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgaXNvcmVzZXJ2ZWQgaXNvcmVzZXJ2ZWRpbnRlcm5hbCBpdGVyYmFsYW5jZSBpdGVybG9vcGV4ZWMgaXRlcnByZWZpeAorc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgaXRlcnByZWZpeGV4Y2x1ZGUgaXRlcnlpZWxkIGl0czRsb3cgaXRzNG1vZGVyYXRlIGl0czRtb3N0cmlza3kKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGl0czRyaXNreSBpdHM0dmVyeXJpc2t5IGtlZXAga2VlcHRyYW5zIGtlcHR0cmFucworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgbGVnYWN5IGxpYm1hY3JvcyBsaWtlbHlib3VuZHNyZWFkIGxpa2VseWJvdW5kc3dyaXRlIGxpa2VseWJvb2wKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGxpa2VseWJvdW5kcyBsaW1pdCBsaW5lbGVuIGxpbnRjb21tZW50cyBsb2NhbHByZWZpeAorc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgbG9jYWxwcmVmaXhleGNsdWRlIGxvY2luZGVudHNwYWNlcyBsb25naW50IGxvbmdpbnRlZ3JhbCBsb25nc2lnbmVkaW50ZWdyYWwKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIGxvbmd1bnNpZ25lZGludGVncmFsIGxvbmd1bnNpZ25lZHVuc2lnbmVkaW50ZWdyYWwgbG9vcGV4ZWMgbG9vcGxvb3BicmVhayBsb29wbG9vcGNvbnRpbnVlCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBsb29wc3dpdGNoYnJlYWsgbWFjcm9hc3NpZ24gbWFjcm9jb25zdGRlY2wgbWFjcm9kZWNsIG1hY3JvZW1wdHkKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIG1hY3JvZmNuZGVjbCBtYWNyb21hdGNobmFtZSBtYWNyb3BhcmFtcyBtYWNyb3BhcmVucyBtYWNyb3JlZGVmCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBtYWNyb3JldHVybiBtYWNyb3N0bXQgbWFjcm91bnJlY29nIG1hY3JvdmFycHJlZml4IG1hY3JvdmFycHJlZml4ZXhjbHVkZQorc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgbWFpbnR5cGUgbWF0Y2hhbnlpbnRlZ3JhbCBtYXRjaGZpZWxkcyBtYXlhbGlhc3VuaXF1ZSBtZW1jaGVja3MKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIG1lbWltcCBtZW10cmFucyBtaXNwbGFjZWRzaGFyZXF1YWwgbWlzc2Nhc2UgbW9kZmlsZXN5cworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgbW9kZ2xvYnMgbW9kZ2xvYnNub21vZHMgbW9kZ2xvYnN1bmNoZWNrZWQgbW9kaW50ZXJuYWxzdHJpY3QgbW9kbm9tb2RzCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBtb2RvYnNlcnZlciBtb2RvYnNlcnZlcnVuY29uIG1vZHMgbW9kc2ltcG5vZ2xvYnMgbW9kc3RyaWN0Z2xvYnNub21vZHMKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIG1vZHVuY29uIG1vZHVuY29ubm9tb2RzIG1vZHVuc3BlYyBtdWx0aXRocmVhZGVkIG11c3RkZWZpbmUKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIG11c3RmcmVlIG11c3RmcmVlZnJlc2ggbXVzdGZyZWVvbmx5IG11c3Rtb2QgbXVzdG5vdGFsaWFzCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBtdXRyZXAgbmFtZWNoZWNrcyBuZWVkc3BlYyBuZXN0Y29tbWVudCBuZXN0ZWRleHRlcm4KK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIG5ld2RlY2wgbmV3cmVmdHJhbnMgbmV4dGxpbmVtYWNyb3Mgbm9hY2Nlc3Mgbm9jb21tZW50cworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgbm9lZmZlY3Qgbm9lZmZlY3R1bmNvbiBub3BhcmFtcyBub3BwIG5vcmV0CitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBudWxsIG51bGxhc3NpZ24gbnVsbGRlcmVmIG51bGxpbml0IG51bGxwYXNzCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBudWxscHRyYXJpdGggbnVsbHJldCBudWxsc3RhdGUgbnVsbHRlcm1pbmF0ZWQKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIG51bWFic3RyYWN0IG51bWFic3RyYWN0Y2FzdCBudW1hYnN0cmFjdGluZGV4IG51bWFic3RyYWN0bGl0IG51bWFic3RyYWN0cHJpbnQKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIG51bWVudW1tZW1iZXJzIG51bWxpdGVyYWwgbnVtc3RydWN0ZmllbGRzIG9ic2VydmVydHJhbnMgb2J2aW91c2xvb3BleGVjCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBvbGRzdHlsZSBvbmx5dHJhbnMgb25seXVucWdsb2JhbHRyYW5zIG9yY29uc3RyYWludCBvdmVybG9hZAorc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgb3duZWR0cmFucyBwYXJhbWltcHRlbXAgcGFyYW11c2UgcGFyZW5maWxlZm9ybWF0IHBhcnRpYWwKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIHBhc3N1bmtub3duIHBvcnRhYmlsaXR5IHByZWRhc3NpZ24gcHJlZGJvb2wgcHJlZGJvb2xpbnQKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIHByZWRib29sb3RoZXJzIHByZWRib29scHRyIHByZXByb2MgcHJvdG9wYXJhbW1hdGNoIHByb3RvcGFyYW1uYW1lCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBwcm90b3BhcmFtcHJlZml4IHByb3RvcGFyYW1wcmVmaXhleGNsdWRlIHB0cmFyaXRoIHB0cmNvbXBhcmUgcHRybmVnYXRlCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBxdWlldCByZWFkb25seXN0cmluZ3MgcmVhZG9ubHl0cmFucyByZWFsY29tcGFyZSByZWRlY2wKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIHJlZGVmIHJlZHVuZGFudGNvbnN0cmFpbnRzIHJlZHVuZGFudHNoYXJlcXVhbCByZWZjb3VudHRyYW5zIHJlbGF4cXVhbHMKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIHJlbGF4dHlwZXMgcmVwZWF0dW5yZWNvZyByZXBleHBvc2UgcmV0YWxpYXMgcmV0ZXhwb3NlCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCByZXRpbXBvbmx5IHJldHZhbCByZXR2YWxib29sIHJldHZhbGludCByZXR2YWxvdGhlcgorc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgc2VmcGFyYW1zIHNlZnVuY29uIHNoYWRvdyBzaGFyZWR0cmFucyBzaGlmdGltcGxlbWVudGF0aW9uCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBzaGlmdG5lZ2F0aXZlIHNob3J0aW50IHNob3dhbGxjb25qcyBzaG93Y29sdW1uIHNob3djb25zdHJhaW50bG9jYXRpb24KK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIHNob3djb25zdHJhaW50cGFyZW5zIHNob3dkZWVwaGlzdG9yeSBzaG93ZnVuYyBzaG93bG9hZGxvYyBzaG93c2Nhbgorc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgc2hvd3NvdXJjZWxvYyBzaG93c3VtbWFyeSBzaXplb2Zmb3JtYWxhcnJheSBzaXplb2Z0eXBlIHNraXBpc29oZWFkZXJzCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBza2lwcG9zaXhoZWFkZXJzIHNsYXNoc2xhc2hjb21tZW50IHNsb3ZhayBzbG92YWtjb25zdHMgc2xvdmFrZmNucworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgc2xvdmFrbWFjcm9zIHNsb3Zha3R5cGVzIHNsb3Zha3ZhcnMgc3BlY2dsb2JpbXBvbmx5IHNwZWNpbXBvbmx5CitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBzcGVjbWFjcm9zIHNwZWNyZXRpbXBvbmx5IHNwZWNzdHJ1Y3RpbXBvbmx5IHNwZWN1bmRlY2wgc3BlY3VuZGVmCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBzdGFja3JlZiBzdGF0ZW1lcmdlIHN0YXRldHJhbnNmZXIgc3RhdGljaW5pdHRyYW5zIHN0YXRpY3RyYW5zCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBzdHJpY3RicmFuY2hzdGF0ZSBzdHJpY3RkZXN0cm95IHN0cmljdG9wcyBzdHJpY3R1c2VyZWxlYXNlZCBzdHJpbmdsaXRlcmFsbGVuCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBzdHJpbmdsaXRlcmFsbm9yb29tIHN0cmluZ2xpdGVyYWxub3Jvb21maW5hbG51bGwgc3RyaW5nbGl0ZXJhbHNtYWxsZXIgc3RyaW5nbGl0ZXJhbHRvb2xvbmcgc3RydWN0aW1wb25seQorc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgc3VwZXJ1c2VyIHN3aXRjaGxvb3BicmVhayBzd2l0Y2hzd2l0Y2hicmVhayBzeW50YXggc3lzZGlyZXJyb3JzCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCBzeXNkaXJleHBhbmRtYWNyb3Mgc3lzdW5yZWNvZyB0YWdwcmVmaXggdGFncHJlZml4ZXhjbHVkZSB0ZW1wdHJhbnMKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIHRtcGNvbW1lbnRzIHRvY3RvdSB0b3B1c2UgdHJ5dG9yZWNvdmVyIHR5cGUKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIHR5cGVwcmVmaXggdHlwZXByZWZpeGV4Y2x1ZGUgdHlwZXVzZSB1bmNoZWNrZWRnbG9iYWxpYXMgdW5jaGVja2VkbWFjcm9wcmVmaXgKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIHVuY2hlY2tlZG1hY3JvcHJlZml4ZXhjbHVkZSB1bmlvbmRlZiB1bml4c3RhbmRhcmQgdW5xdWFsaWZpZWRpbml0dHJhbnMgdW5xdWFsaWZpZWR0cmFucworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgdW5yZWFjaGFibGUgdW5yZWNvZyB1bnJlY29nY29tbWVudHMgdW5yZWNvZ2RpcmVjdGl2ZSB1bnJlY29nZmxhZ2NvbW1lbnRzCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCB1bnNpZ25lZGNvbXBhcmUgdW51c2Vkc3BlY2lhbCB1c2VkZWYgdXNlcmVsZWFzZWQgdXNldmFyYXJncworc3luIGtleXdvcmQgc3BsaW50RmxhZyBjb250YWluZWQgdmFydXNlIHZvaWRhYnN0cmFjdCB3YXJuZmxhZ3Mgd2FybmxpbnRjb21tZW50cyB3YXJubWlzc2luZ2dsb2JzCitzeW4ga2V5d29yZCBzcGxpbnRGbGFnIGNvbnRhaW5lZCB3YXJubWlzc2luZ2dsb2Jzbm9nbG9icyB3YXJucG9zaXhoZWFkZXJzIHdhcm5yYyB3YXJuc3lzZmlsZXMgd2FybnVuaXhsaWIKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIHdhcm51c2Ugd2hpbGVibG9jayB3aGlsZWVtcHR5IHdoaWxlbG9vcGV4ZWMgemVyb2Jvb2wKK3N5biBrZXl3b3JkIHNwbGludEZsYWcgY29udGFpbmVkIHplcm9wdHIKKyIJCQkJICAgICAgIEdsb2JhbCBGbGFnczoKK3N5biBrZXl3b3JkIHNwbGludEdsb2JhbEZsYWcgY29udGFpbmVkIGNzdiBkdW1wIGVycm9yc3RyZWFtIGVycm9yc3RyZWFtc3RkZXJyIGVycm9yc3RyZWFtc3Rkb3V0CitzeW4ga2V5d29yZCBzcGxpbnRHbG9iYWxGbGFnIGNvbnRhaW5lZCBleHBlY3QgZiBoZWxwIGkgaXNvbGliCitzeW4ga2V5d29yZCBzcGxpbnRHbG9iYWxGbGFnIGNvbnRhaW5lZCBsYXJjaHBhdGggbGNsZXhwZWN0IGxjbGltcG9ydGRpciBsY3MgbGgKK3N5biBrZXl3b3JkIHNwbGludEdsb2JhbEZsYWcgY29udGFpbmVkIGxvYWQgbWVzc2FnZXN0cmVhbSBtZXNzYWdlc3RyZWFtc3RkZXJyIG1lc3NhZ2VzdHJlYW1zdGRvdXQgbXRzCitzeW4ga2V5d29yZCBzcGxpbnRHbG9iYWxGbGFnIGNvbnRhaW5lZCBuZXZlcmluY2x1ZGUgbm9mIG5vbGliIHBvc2l4bGliIHBvc2l4c3RyaWN0bGliCitzeW4ga2V5d29yZCBzcGxpbnRHbG9iYWxGbGFnIGNvbnRhaW5lZCBzaG93YWxsdXNlcyBzaW5nbGVpbmNsdWRlIHNraXBzeXNoZWFkZXJzIHN0YXRzIHN0cmVhbW92ZXJ3cml0ZQorc3luIGtleXdvcmQgc3BsaW50R2xvYmFsRmxhZyBjb250YWluZWQgc3RyaWN0bGliIHN1cGNvdW50cyBzeXNkaXJzIHRpbWVkaXN0IHRtcGRpcgorc3luIGtleXdvcmQgc3BsaW50R2xvYmFsRmxhZyBjb250YWluZWQgdW5peGxpYiB1bml4c3RyaWN0bGliIHdhcm5pbmdzdHJlYW0gd2FybmluZ3N0cmVhbXN0ZGVyciB3YXJuaW5nc3RyZWFtc3Rkb3V0CitzeW4ga2V5d29yZCBzcGxpbnRHbG9iYWxGbGFnIGNvbnRhaW5lZCB3aGljaGxpYgorc3luIG1hdGNoICAgc3BsaW50RmxhZ0V4cHIgY29udGFpbmVkICJbXCtcLVw9XSIgbmV4dGdyb3VwPXNwbGludEZsYWcsc3BsaW50R2xvYmFsRmxhZworCisiIGRldGVjdCBtaXNzaW5nIC8qQCBhbmQgd3JvbmcgKi8KK3N5biBtYXRjaAlzcGxpbnRBbm5FcnJvcgkiQFwqLyIKK3N5biBjbHVzdGVyCWNDb21tZW50R3JvdXAJYWRkPXNwbGludEFubkVycm9yCitzeW4gbWF0Y2gJc3BsaW50QW5uRXJyb3IyCSJbXkBdXCovImhzPXMrMSBjb250YWluZWQKK3N5biByZWdpb24Jc3BsaW50QW5ub3RhdGlvbiBzdGFydD0iL1wqQCIgZW5kPSJAXCovIiBjb250YWlucz1Ac3BsaW50QW5ub3RFbGVtLGNUeXBlIGtlZXBlbmQKK3N5biBtYXRjaAlzcGxpbnRTaG9ydEFubgkiL1wqQFwqLyIKK3N5biBjbHVzdGVyCXNwbGludEFubm90RWxlbQljb250YWlucz1zcGxpbnRTdGF0ZUFubm90LHNwbGludFNwZWNpYWxBbm5vdCxzcGxpbnRTcGVjVGFnLHNwbGludE1vZGlmaWVzLHNwbGludFJlcXVpcmVzLHNwbGludEdsb2JhbHMsc3BsaW50R2xvYml0ZW0sc3BsaW50R2xvYmFubm90LHNwbGludFdhcm5pbmcsc3BsaW50TW9kaXRlbSxzcGxpbnRJdGVyLHNwbGludENvbnN0LHNwbGludEFsdCxzcGxpbnRUeXBlLHNwbGludEdsb2JhbFR5cGUsc3BsaW50TWVtTWdtLHNwbGludEFsaWFzLHNwbGludEV4cG9zdXJlLHNwbGludERlZlN0YXRlLHNwbGludEdsb2JTdGF0ZSxzcGxpbnROdWxsU3RhdGUsc3BsaW50TnVsbFByZWQsc3BsaW50RXhpdCxzcGxpbnRFeGVjLHNwbGludFNlZixzcGxpbnREZWNsLHNwbGludENhc2Usc3BsaW50QnJlYWssc3BsaW50VW5yZWFjaCxzcGxpbnRTcGVjRnVuYyxzcGxpbnRFcnJTdXBwLHNwbGludFR5cGVBY2Msc3BsaW50TWFjcm8sc3BsaW50U3BlY1R5cGUsc3BsaW50QW5uRXJyb3IyLHNwbGludEZsYWdFeHByCitzeW4gY2x1c3RlcglzcGxpbnRBbGxTdHVmZgljb250YWlucz1Ac3BsaW50QW5ub3RFbGVtLHNwbGludEZsYWcsc3BsaW50R2xvYmFsRmxhZworc3luIGNsdXN0ZXIJY1BhcmVuR3JvdXAJYWRkPUBzcGxpbnRBbGxTdHVmZgorc3luIGNsdXN0ZXIJY1ByZVByb2NHcm91cAlhZGQ9QHNwbGludEFsbFN0dWZmCitzeW4gY2x1c3RlcgljTXVsdGlHcm91cAlhZGQ9QHNwbGludEFsbFN0dWZmCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3NwbGludF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zcGxpbnRfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc3BsaW50U2hvcnRBbm4JCXNwbGludEFubm90YXRpb24KKyAgSGlMaW5rIHNwbGludEFubm90YXRpb24JQ29tbWVudAorICBIaUxpbmsgc3BsaW50QW5uRXJyb3IJCXNwbGludEVycm9yCisgIEhpTGluayBzcGxpbnRBbm5FcnJvcjIJc3BsaW50RXJyb3IKKyAgSGlMaW5rIHNwbGludEZsYWcJCVNwZWNpYWxDb21tZW50CisgIEhpTGluayBzcGxpbnRHbG9iYWxGbGFnCXNwbGludEVycm9yCisgIEhpTGluayBzcGxpbnRTcGVjaWFsQW5ub3QJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRTdGF0ZUFubm90CXNwbGludEFubktleQorICBIaUxpbmsgc3BsaW50U3BlY1RhZwkJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRNb2RpZmllcwkJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRSZXF1aXJlcwkJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRHbG9iYWxzCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludEdsb2JpdGVtCQlDb25zdGFudAorICBIaUxpbmsgc3BsaW50R2xvYmFubm90CXNwbGludEFubktleQorICBIaUxpbmsgc3BsaW50V2FybmluZwkJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRNb2RpdGVtCQlDb25zdGFudAorICBIaUxpbmsgc3BsaW50SXRlcgkJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRDb25zdAkJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRBbHQJCXNwbGludEFubktleQorICBIaUxpbmsgc3BsaW50VHlwZQkJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRHbG9iYWxUeXBlCXNwbGludEFubktleQorICBIaUxpbmsgc3BsaW50TWVtTWdtCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludEFsaWFzCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludEV4cG9zdXJlCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludERlZlN0YXRlCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludEdsb2JTdGF0ZQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludE51bGxTdGF0ZQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludE51bGxQcmVkCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludEV4aXQJCXNwbGludEFubktleQorICBIaUxpbmsgc3BsaW50RXhlYwkJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRTZWYJCXNwbGludEFubktleQorICBIaUxpbmsgc3BsaW50RGVjbAkJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRDYXNlCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludEJyZWFrCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludFVucmVhY2gJCXNwbGludEFubktleQorICBIaUxpbmsgc3BsaW50U3BlY0Z1bmMJCXNwbGludEFubktleQorICBIaUxpbmsgc3BsaW50RXJyU3VwcAkJc3BsaW50QW5uS2V5CisgIEhpTGluayBzcGxpbnRUeXBlQWNjCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludE1hY3JvCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludFNwZWNUeXBlCQlzcGxpbnRBbm5LZXkKKyAgSGlMaW5rIHNwbGludEFubktleQkJVHlwZQorICBIaUxpbmsgc3BsaW50RXJyb3IJCUVycm9yCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNwbGludCIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NwdXAudmltIGIvcnVudGltZS9zeW50YXgvc3B1cC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1NzczNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NwdXAudmltCkBAIC0wLDAgKzEsMjc3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIFNwZWVkdXAsIHBsYW50IHNpbXVsYXRvciBmcm9tIEFzcGVuVGVjaAorIiBNYWludGFpbmVyOiAgIFN0ZWZhbi5TY2h3YXJ6ZXIgPHMuc2Nod2FyemVyQG5kaC5uZXQ+CisiIFVSTDoJCQlodHRwOi8vd3d3Lm5kaC5uZXQvaG9tZS9zc2Nod2FyemVyL2Rvd25sb2FkL3NwdXAudmltCisiIExhc3QgQ2hhbmdlOiAgMjAwMyBNYXkgMTEKKyIgRmlsZW5hbWU6ICAgICBzcHVwLnZpbQorCisiIEJ1Z3MKKyIgLSBpbiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbnMga2V5d29yZHMgYXJlIGFsd2F5cyBoaWdobGlnaHRlZAorIiAgIGV2ZW4gaWYgdGhleSBhcmUgbm90IHVzZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbWVhbmluZzsKKyIgICBleGFtcGxlOiBpbgorIiAgICAgICBNT0RFTCBkZW1vbnN0cmF0aW9uCisiICAgICAgIFRZUEUKKyIgICAgICAqYXJlYSBBUyBhcmVhCisiICAgYm90aCAiYXJlYSIgYXJlIGhpZ2hsaWdodGVkIGFzIHNwdXBUeXBlLgorIgorIiBJZiB5b3UgZW5jb3VudGVyIHByb2JsZW1zIG9yIGhhdmUgcXVlc3Rpb25zIG9yIHN1Z2dlc3Rpb25zLCBtYWlsIG1lCisKKyIgUmVtb3ZlIG9sZCBzeW50YXggc3R1ZmYKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKKyIgZG9uJ3QgaGlnaHRsaWdodCBzZXZlcmFsIGtleXdvcmRzIGxpa2Ugc3Vic2VjdGlvbnMKKyJsZXQgc3RyaWN0X3N1YnNlY3Rpb25zID0gMQorCisiIGhpZ2hsaWdodCB0eXBlcyB1c3VhbGx5IGZvdW5kIGluIERFQ0xBUkUgc2VjdGlvbgoraWYgIWV4aXN0cygiaGlnaHRsaWdodF90eXBlcyIpCisgICAgbGV0IGhpZ2hsaWdodF90eXBlcyA9IDEKK2VuZGlmCisKKyIgb25lIGxpbmUgY29tbWVudCBzeW50YXggKCMgY29tbWVudHMpCisiIDEuIGFsbG93IGFwcGVuZGVkIGNvZGUgYWZ0ZXIgY29tbWVudCwgZG8gbm90IGNvbXBsYWluCisiIDIuIHNob3cgY29kZSBiZWdpbm5pZyB3aXRoIHRoZSBzZWNvbmQgIyBhcyBhbiBlcnJvcgorIiAzLiBzaG93IHdob2xlIGxpbmVzIHdpdGggbW9yZSB0aGFuIG9uZSAjIGFzIGFuIGVycm9yCitpZiAhZXhpc3RzKCJvbmVsaW5lX2NvbW1lbnRzIikKKyAgICBsZXQgb25lbGluZV9jb21tZW50cyA9IDIKK2VuZGlmCisKKyIgU3BlZWR1cCBTRUNUSU9OIHJlZ2lvbnMKK3N5biBjYXNlIGlnbm9yZQorc3luIHJlZ2lvbiBzcHVwQ2RpCQkgIG1hdGNoZ3JvdXA9c3B1cFNlY3Rpb24gc3RhcnQ9Il5DREkiCQkgZW5kPSJeXCpcKlwqXCoiIGNvbnRhaW5zPXNwdXBDZGlTdWJzLEBzcHVwT3JkaW5hcnkKK3N5biByZWdpb24gc3B1cENvbmRpdGlvbnMgbWF0Y2hncm91cD1zcHVwU2VjdGlvbiBzdGFydD0iXkNPTkRJVElPTlMiIGVuZD0iXlwqXCpcKlwqIiBjb250YWlucz1zcHVwQ29uZGl0aW9uc1N1YnMsQHNwdXBPcmRpbmFyeSxzcHVwQ29uZGl0aW9uYWwsc3B1cE9wZXJhdG9yLHNwdXBDb2RlCitzeW4gcmVnaW9uIHNwdXBEZWNsYXJlICAgIG1hdGNoZ3JvdXA9c3B1cFNlY3Rpb24gc3RhcnQ9Il5ERUNMQVJFIiAgICBlbmQ9Il5cKlwqXCpcKiIgY29udGFpbnM9c3B1cERlY2xhcmVTdWJzLEBzcHVwT3JkaW5hcnksc3B1cFR5cGVzLHNwdXBDb2RlCitzeW4gcmVnaW9uIHNwdXBFc3RpbWF0aW9uIG1hdGNoZ3JvdXA9c3B1cFNlY3Rpb24gc3RhcnQ9Il5FU1RJTUFUSU9OIiBlbmQ9Il5cKlwqXCpcKiIgY29udGFpbnM9c3B1cEVzdGltYXRpb25TdWJzLEBzcHVwT3JkaW5hcnkKK3N5biByZWdpb24gc3B1cEV4dGVybmFsICAgbWF0Y2hncm91cD1zcHVwU2VjdGlvbiBzdGFydD0iXkVYVEVSTkFMIiAgIGVuZD0iXlwqXCpcKlwqIiBjb250YWlucz1zcHVwRXh0ZXJuYWxTdWJzLEBzcHVwT3JkaW5hcnkKK3N5biByZWdpb24gc3B1cEZsb3dzaGVldCAgbWF0Y2hncm91cD1zcHVwU2VjdGlvbiBzdGFydD0iXkZMT1dTSEVFVCIgIGVuZD0iXlwqXCpcKlwqIiBjb250YWlucz1zcHVwRmxvd3NoZWV0U3VicyxAc3B1cE9yZGluYXJ5LHNwdXBTdHJlYW1zLEBzcHVwVGV4dHByb2MKK3N5biByZWdpb24gc3B1cEZ1bmN0aW9uICAgbWF0Y2hncm91cD1zcHVwU2VjdGlvbiBzdGFydD0iXkZVTkNUSU9OIiAgIGVuZD0iXlwqXCpcKlwqIiBjb250YWlucz1zcHVwRnVuY3Rpb25TdWJzLEBzcHVwT3JkaW5hcnksc3B1cEhlbHAsc3B1cENvZGUsc3B1cFR5cGVzCitzeW4gcmVnaW9uIHNwdXBHbG9iYWwgICAgIG1hdGNoZ3JvdXA9c3B1cFNlY3Rpb24gc3RhcnQ9Il5HTE9CQUwiICAgICBlbmQ9Il5cKlwqXCpcKiIgY29udGFpbnM9c3B1cEdsb2JhbFN1YnMsQHNwdXBPcmRpbmFyeQorc3luIHJlZ2lvbiBzcHVwSG9tb3RvcHkgICBtYXRjaGdyb3VwPXNwdXBTZWN0aW9uIHN0YXJ0PSJeSE9NT1RPUFkiICAgZW5kPSJeXCpcKlwqXCoiIGNvbnRhaW5zPXNwdXBIb21vdG9weVN1YnMsQHNwdXBPcmRpbmFyeQorc3luIHJlZ2lvbiBzcHVwTWFjcm8gICAgICBtYXRjaGdyb3VwPXNwdXBTZWN0aW9uIHN0YXJ0PSJeTUFDUk8iICAgICAgZW5kPSJeXCpcKlwqXCoiIGNvbnRhaW5zPXNwdXBNYWNyb1N1YnMsQHNwdXBPcmRpbmFyeSxAc3B1cFRleHRwcm9jLHNwdXBUeXBlcyxzcHVwU3RyZWFtcyxzcHVwT3BlcmF0b3IKK3N5biByZWdpb24gc3B1cE1vZGVsICAgICAgbWF0Y2hncm91cD1zcHVwU2VjdGlvbiBzdGFydD0iXk1PREVMIiAgICAgIGVuZD0iXlwqXCpcKlwqIiBjb250YWlucz1zcHVwTW9kZWxTdWJzLEBzcHVwT3JkaW5hcnksc3B1cENvbmRpdGlvbmFsLHNwdXBPcGVyYXRvcixzcHVwVHlwZXMsc3B1cFN0cmVhbXMsQHNwdXBUZXh0cHJvYyxzcHVwSGVscAorc3luIHJlZ2lvbiBzcHVwT3BlcmF0aW9uICBtYXRjaGdyb3VwPXNwdXBTZWN0aW9uIHN0YXJ0PSJeT1BFUkFUSU9OIiAgZW5kPSJeXCpcKlwqXCoiIGNvbnRhaW5zPXNwdXBPcGVyYXRpb25TdWJzLEBzcHVwT3JkaW5hcnksQHNwdXBUZXh0cHJvYworc3luIHJlZ2lvbiBzcHVwT3B0aW9ucyAgICBtYXRjaGdyb3VwPXNwdXBTZWN0aW9uIHN0YXJ0PSJeT1BUSU9OUyIgICAgZW5kPSJeXCpcKlwqXCoiIGNvbnRhaW5zPXNwdXBPcHRpb25zU3VicyxAc3B1cE9yZGluYXJ5CitzeW4gcmVnaW9uIHNwdXBQcm9jZWR1cmUgIG1hdGNoZ3JvdXA9c3B1cFNlY3Rpb24gc3RhcnQ9Il5QUk9DRURVUkUiICBlbmQ9Il5cKlwqXCpcKiIgY29udGFpbnM9c3B1cFByb2NlZHVyZVN1YnMsQHNwdXBPcmRpbmFyeSxzcHVwSGVscCxzcHVwQ29kZSxzcHVwVHlwZXMKK3N5biByZWdpb24gc3B1cFByb2ZpbGVzICAgbWF0Y2hncm91cD1zcHVwU2VjdGlvbiBzdGFydD0iXlBST0ZJTEVTIiAgIGVuZD0iXlwqXCpcKlwqIiBjb250YWlucz1Ac3B1cE9yZGluYXJ5LEBzcHVwVGV4dHByb2MKK3N5biByZWdpb24gc3B1cFJlcG9ydCAgICAgbWF0Y2hncm91cD1zcHVwU2VjdGlvbiBzdGFydD0iXlJFUE9SVCIgICAgIGVuZD0iXlwqXCpcKlwqIiBjb250YWlucz1zcHVwUmVwb3J0U3VicyxAc3B1cE9yZGluYXJ5LHNwdXBIZWxwLEBzcHVwVGV4dHByb2MKK3N5biByZWdpb24gc3B1cFRpdGxlICAgICAgbWF0Y2hncm91cD1zcHVwU2VjdGlvbiBzdGFydD0iXlRJVExFIiAgICAgIGVuZD0iXlwqXCpcKlwqIiBjb250YWlucz1zcHVwVGl0bGVTdWJzLHNwdXBDb21tZW50LHNwdXBDb25zdGFudCxzcHVwRXJyb3IKK3N5biByZWdpb24gc3B1cFVuaXQgICAgICAgbWF0Y2hncm91cD1zcHVwU2VjdGlvbiBzdGFydD0iXlVOSVQiICAgICAgIGVuZD0iXlwqXCpcKlwqIiBjb250YWlucz1zcHVwVW5pdFN1YnMsQHNwdXBPcmRpbmFyeQorCisiIFN1YnNlY3Rpb25zCitzeW4ga2V5d29yZCBzcHVwQ2RpU3VicwkJICAgSU5QVVQgRlJFRSBPVVRQVVQgTElORUFSVElNRSBNSU5OT05aRVJPIENBTENVTEFURSBGSUxFUyBTQ0FMSU5HIGNvbnRhaW5lZAorc3luIGtleXdvcmQgc3B1cERlY2xhcmVTdWJzICAgIFRZUEUgU1RSRUFNIGNvbnRhaW5lZAorc3luIGtleXdvcmQgc3B1cEVzdGltYXRpb25TdWJzIEVTVElNQVRFIFNTRVhQIERZTkVYUCBSRVNVTFQgY29udGFpbmVkCitzeW4ga2V5d29yZCBzcHVwRXh0ZXJuYWxTdWJzICAgVFJBTlNNSVQgUkVDRUlWRSBjb250YWluZWQKK3N5biBrZXl3b3JkIHNwdXBGbG93c2hlZXRTdWJzICBTVFJFQU0gY29udGFpbmVkCitzeW4ga2V5d29yZCBzcHVwRnVuY3Rpb25TdWJzICAgSU5QVVQgT1VUUFVUIGNvbnRhaW5lZAorc3luIGtleXdvcmQgc3B1cEdsb2JhbFN1YnMgICAgIFZBUklBQkxFUyBNQVhJTUlaRSBNSU5JTUlaRSBDT05TVFJBSU5UIGNvbnRhaW5lZAorc3luIGtleXdvcmQgc3B1cEhvbW90b3B5U3VicyAgIFZBUlkgT1BUSU9OUyBjb250YWluZWQKK3N5biBrZXl3b3JkIHNwdXBNYWNyb1N1YnMgICAgICBNT0RFTCBGTE9XU0hFRVQgY29udGFpbmVkCitzeW4ga2V5d29yZCBzcHVwTW9kZWxTdWJzICAgICAgQ0FURUdPUlkgU0VUIFRZUEUgU1RSRUFNIEVRVUFUSU9OIFBST0NFRFVSRSBjb250YWluZWQKK3N5biBrZXl3b3JkIHNwdXBPcGVyYXRpb25TdWJzICBTRVQgUFJFU0VUIElOSVRJQUwgU1NUQVRFIEZSRUUgY29udGFpbmVkCitzeW4ga2V5d29yZCBzcHVwT3B0aW9uc1N1YnMgICAgUk9VVElORVMgVFJBTlNMQVRFIEVYRUNVVElPTiBjb250YWluZWQKK3N5biBrZXl3b3JkIHNwdXBQcm9jZWR1cmVTdWJzICBJTlBVVCBPVVRQVVQgU1BBQ0UgUFJFQ0FMTCBQT1NUQ0FMTCBERVJJVkFUSVZFIFNUUkVBTSBjb250YWluZWQKKyIgbm8gc3Vic2VjdGlvbnMgZm9yIFByb2ZpbGVzCitzeW4ga2V5d29yZCBzcHVwUmVwb3J0U3VicyAgICAgU0VUIElOSVRJQUwgRklFTERTIEZJRUxETUFSSyBESVNQTEFZIFdJVEhJTiBjb250YWluZWQKK3N5biBrZXl3b3JkIHNwdXBVbml0U3VicyAgICAgICBST1VUSU5FUyBTRVQgY29udGFpbmVkCisKKyIgYWRkaXRpb25hbCBrZXl3b3JkcyBmb3Igc3Vic2VjdGlvbnMKK2lmICFleGlzdHMoICJzdHJpY3Rfc3Vic2VjdGlvbnMiICkKKyAgICBzeW4ga2V5d29yZCBzcHVwQ29uZGl0aW9uc1N1YnMgU1RPUCBQUklOVCBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwRGVjbGFyZVN1YnMgICAgVU5JVCBTRVQgQ09NUE9ORU5UUyBUSEVSTU8gT1BUSU9OUyBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwRXN0aW1hdGlvblN1YnMgVkFSWSBNRUFTVVJFIElOSVRJQUwgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgc3B1cEZsb3dzaGVldFN1YnMgIFRZUEUgRkVFRCBQUk9EVUNUIElOUFVUIE9VVFBVVCBDT05ORUNUSU9OIE9GIElTIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIHNwdXBNYWNyb1N1YnMgICAgICBDT05ORUNUSU9OIFNUUkVBTSBTRVQgSU5QVVQgT1VUUFVUIE9GIElTIEZFRUQgUFJPRFVDVCBUWVBFIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIHNwdXBNb2RlbFN1YnMgICAgICBBUyBBUlJBWSBPRiBJTlBVVCBPVVRQVVQgQ09OTkVDVElPTiBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwT3BlcmF0aW9uU3VicyAgV0lUSElOIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIHNwdXBSZXBvcnRTdWJzICAgICBMRUZUIFJJR0hUIENFTlRFUiBDRU5UUkUgVU9NIFRJTUUgREFURSBWRVJTSU9OIFJFTERBVEUgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgc3B1cFVuaXRTdWJzICAgICAgIElTIEEgY29udGFpbmVkCitlbmRpZgorCisiIFNwZWVkdXAgZGF0YSB0eXBlcworaWYgZXhpc3RzKCAiaGlnaGxpZ2h0X3R5cGVzIiApCisgICAgc3luIGtleXdvcmQgc3B1cFR5cGVzIGFjdF9jb2VmZl9saXEgYXJlYSBjb2VmZmljaWVudCBjb25jZW50cmF0aW9uIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIHNwdXBUeXBlcyBjb250cm9sX3NpZ25hbCBjb25kX2xpcSBjb25kX3ZhcCBjcF9tYXNzX2xpcSBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgY3BfbW9sX2xpcSBjcF9tb2xfdmFwIGN2X21vbF9saXEgY3ZfbW9sX3ZhcCBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgZGlmZnVzX2xpcSBkaWZmdXNfdmFwIGRlbHRhX3AgZGVuc19tYXNzIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIHNwdXBUeXBlcyBkZW5zX21hc3Nfc29sIGRlbnNfbWFzc19saXEgZGVuc19tYXNzX3ZhcCBkZW5zX21vbCBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgZGVuc19tb2xfc29sIGRlbnNfbW9sX2xpcSBkZW5zX21vbF92YXAgZW50aGZsb3cgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgc3B1cFR5cGVzIGVudGhfbWFzcyBlbnRoX21hc3NfbGlxIGVudGhfbWFzc192YXAgZW50aF9tb2wgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgc3B1cFR5cGVzIGVudGhfbW9sX3NvbCBlbnRoX21vbF9saXEgZW50aF9tb2xfdmFwIGVudHJfbW9sIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIHNwdXBUeXBlcyBlbnRyX21vbF9zb2wgZW50cl9tb2xfbGlxIGVudHJfbW9sX3ZhcCBmcmFjdGlvbiBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgZmxvd19tYXNzIGZsb3dfbWFzc19saXEgZmxvd19tYXNzX3ZhcCBmbG93X21vbCBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgZmxvd19tb2xfdmFwIGZsb3dfbW9sX2xpcSBmbG93X3ZvbCBmbG93X3ZvbF92YXAgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgc3B1cFR5cGVzIGZsb3dfdm9sX2xpcSBmdWdhX3ZhcCBmdWdhX2xpcSBmdWdhX3NvbCBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgZ2liYl9tb2xfc29sIGhlYXRfcmVhY3QgaGVhdF90cmFuc19jb2VmZiBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgaG9sZHVwX2hlYXQgaG9sZHVwX2hlYXRfbGlxIGhvbGR1cF9oZWF0X3ZhcCBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgaG9sZHVwX21hc3MgaG9sZHVwX21hc3NfbGlxIGhvbGR1cF9tYXNzX3ZhcCBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgaG9sZHVwX21vbCBob2xkdXBfbW9sX2xpcSBob2xkdXBfbW9sX3ZhcCBrX3ZhbHVlIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIHNwdXBUeXBlcyBsZW5ndGggbGVuZ3RoX2RlbHRhIGxlbmd0aF9zaG9ydCBsaXFmcmFjdGlvbiBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgbGlxbWFzc2ZyYWN0aW9uIG1hc3MgbWFzc2ZyYWN0aW9uIG1vbGVmcmFjdGlvbiBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgbW9sd2VpZ2h0IG1vbWVudF9pbmVydGlhIG5lZ2F0aXZlIG5vdHlwZSBwZXJjZW50IGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIHNwdXBUeXBlcyBwb3NpdGl2ZSBwcmVzc3VyZSBwcmVzc19kaWZmIHByZXNzX2Ryb3AgcHJlc3NfcmlzZSBjb250YWluZWQKKyAgICBzeW4ga2V5d29yZCBzcHVwVHlwZXMgcmF0aW8gcmVhY3Rpb24gcmVhY3Rpb25fbWFzcyByb3RhdGlvbiBzdXJmX3RlbnMgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgc3B1cFR5cGVzIHRlbXBlcmF0dXJlIHRlbXBlcmF0dXJlX2FicyB0ZW1wX2RpZmYgdGVtcF9kcm9wIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIHNwdXBUeXBlcyB0ZW1wX3Jpc2UgdGltZSB2YXBmcmFjdGlvbiB2YXBtYXNzZnJhY3Rpb24gY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgc3B1cFR5cGVzIHZlbG9jaXR5IHZpc2NfbGlxIHZpc2NfdmFwIHZvbHVtZSB6bW9tX3JhdGUgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgc3B1cFR5cGVzIHNlZ19yYXRlIHNtb21fcmF0ZSB0bW9tX3JhdGUgem1vbV9tYXNzIHNlZ19tYXNzIGNvbnRhaW5lZAorICAgIHN5biBrZXl3b3JkIHNwdXBUeXBlcyBzbW9tX21hc3MgdG1vbV9tYXNzIHptb21faG9sZHVwIHNlZ19ob2xkdXAgY29udGFpbmVkCisgICAgc3luIGtleXdvcmQgc3B1cFR5cGVzIHNtb21faG9sZHVwIHRtb21faG9sZHVwIGNvbnRhaW5lZAorZW5kaWYKKworIiBzdHJlYW0gdHlwZXMKK3N5biBrZXl3b3JkIHNwdXBTdHJlYW1zICBtYWluc3RyZWFtIHZhcG91ciBsaXF1aWQgY29udGFpbmVkCisKKyIgImNvbmRpdGlvbmFsIiBrZXl3b3Jkcworc3luIGtleXdvcmQgc3B1cENvbmRpdGlvbmFsICBJRiBUSEVOIEVMU0UgRU5ESUYgY29udGFpbmVkCisiIE9wZXJhdG9ycywgc3ltYm9scyBldGMuCitzeW4ga2V5d29yZCBzcHVwT3BlcmF0b3IgIEFORCBPUiBOT1QgY29udGFpbmVkCitzeW4gbWF0Y2ggc3B1cFN5bWJvbCAgIlssXC0rPTo7Ki9cIjw+QCUoKV0iIGNvbnRhaW5lZAorc3luIG1hdGNoIHNwdXBTcGVjaWFsICAiWyZcJD9dIiBjb250YWluZWQKKyIgU3VycHJpc2luZ2x5LCBTcGVlZHVwIGFsbG93cyBubyB1bmFyeSArIGluc3RlYWQgb2YgdGhlIC0KK3N5biBtYXRjaCBzcHVwRXJyb3IgICJbKD0rXC0qL11ccyorXGRcK1woW2VkXVsrLV1cPVxkXCtcKVw9XD4ibGM9MSBjb250YWluZWQKK3N5biBtYXRjaCBzcHVwRXJyb3IgICJbKD0rXC0qL11ccyorXGRcK1wuXChbZWRdWystXVw9XGRcK1wpXD1cPiJsYz0xIGNvbnRhaW5lZAorc3luIG1hdGNoIHNwdXBFcnJvciAgIlsoPStcLSovXVxzKitcZCpcLlxkXCtcKFtlZF1bKy1dXD1cZFwrXClcPVw+ImxjPTEgY29udGFpbmVkCisiIFN0cmluZworc3luIHJlZ2lvbiBzcHVwU3RyaW5nICBzdGFydD0rIisgIGVuZD0rIisgIG9uZWxpbmUgY29udGFpbmVkCitzeW4gcmVnaW9uIHNwdXBTdHJpbmcgIHN0YXJ0PSsnKyAgZW5kPSsnKyAgb25lbGluZSBjb250YWluZWQKKyIgSWRlbnRpZmllcgorc3luIG1hdGNoIHNwdXBJZGVudGlmaWVyICAiXDxbYS16XVthLXowLTlfXSpcPiIgY29udGFpbmVkCisiIFRleHRwcm9jZXNzb3IgZGlyZWN0aXZlcworc3luIG1hdGNoIHNwdXBUZXh0cHJvY0dlbmVyaWMgICI/W2Etel1bYS16MC05X10qXD4iIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBzcHVwVGV4dHByb2NFcnJvciBtYXRjaGdyb3VwPXNwdXBUZXh0cHJvY0dlbmVyaWMgc3RhcnQ9Ij9FUlJPUiIgIGVuZD0iP0VORCJoZT1zLTEgY29udGFpbmVkCisiIE51bWJlciwgd2l0aG91dCBkZWNpbWFsIHBvaW50CitzeW4gbWF0Y2ggc3B1cE51bWJlciAgIi1cPVxkXCtcKFtlZF1bKy1dXD1cZFwrXClcPSIgY29udGFpbmVkCisiIE51bWJlciwgYWxsb3dzIDEuIGJlZm9yZSBleHBvbmVudAorc3luIG1hdGNoIHNwdXBOdW1iZXIgICItXD1cZFwrXC5cKFtlZF1bKy1dXD1cZFwrXClcPSIgY29udGFpbmVkCisiIE51bWJlciBhbGxvd3MgLjEgYmVmb3JlIGV4cG9uZW50CitzeW4gbWF0Y2ggc3B1cE51bWJlciAgIi1cPVxkKlwuXGRcK1woW2VkXVsrLV1cPVxkXCtcKVw9IiBjb250YWluZWQKKyIgSGVscCBzdWJzZWN0aW9ucworc3luIHJlZ2lvbiBzcHVwSGVscCAgc3RhcnQ9Il5IRUxQImhzPWUrMSAgZW5kPSJeXCRFTkRIRUxQImhlPXMtMSBjb250YWluZWQKKyIgRm9ydHJhbiBjb2RlCitzeW4gcmVnaW9uIHNwdXBDb2RlICBzdGFydD0iXkNPREUiaHM9ZSsxICBlbmQ9Il5cJEVORENPREUiaGU9cy0xIGNvbnRhaW5lZAorIiBvbmVsaW5lIGNvbW1lbnRzCitpZiBvbmVsaW5lX2NvbW1lbnRzID4gMworICAgIG9uZWxpbmVfY29tbWVudHMgPSAyICAgIiBkZWZhdWx0CitlbmRpZgoraWYgb25lbGluZV9jb21tZW50cyA9PSAxCisgICAgc3luIG1hdGNoIHNwdXBDb21tZW50ICAiI1teI10qI1w9IgorZWxzZWlmIG9uZWxpbmVfY29tbWVudHMgPT0gMgorICAgIHN5biBtYXRjaCBzcHVwRXJyb3IgICIjLiokIgorICAgIHN5biBtYXRjaCBzcHVwQ29tbWVudCAgIiNbXiNdKiIgIG5leHRncm91cD1zcHVwRXJyb3IKK2Vsc2VpZiBvbmVsaW5lX2NvbW1lbnRzID09IDMKKyAgICBzeW4gbWF0Y2ggc3B1cENvbW1lbnQgICIjW14jXSoiCisgICAgc3luIG1hdGNoIHNwdXBFcnJvciAgIiNbXiNdKiMuKiIKK2VuZGlmCisiIG11bHRpbGluZSBjb21tZW50cworc3luIG1hdGNoIHNwdXBPcGVuQnJhY2UgInsiIGNvbnRhaW5lZAorc3luIG1hdGNoIHNwdXBFcnJvciAgIn0iCitzeW4gcmVnaW9uIHNwdXBDb21tZW50ICBtYXRjaGdyb3VwPXNwdXBDb21tZW50MiAgc3RhcnQ9InsiICBlbmQ9In0iICBrZWVwZW5kICBjb250YWlucz1zcHVwT3BlbkJyYWNlCisKK3N5biBjbHVzdGVyIHNwdXBPcmRpbmFyeSAgY29udGFpbnM9c3B1cE51bWJlcixzcHVwSWRlbnRpZmllcixzcHVwU3ltYm9sCitzeW4gY2x1c3RlciBzcHVwT3JkaW5hcnkgIGFkZD1zcHVwRXJyb3Isc3B1cFN0cmluZyxzcHVwQ29tbWVudAorc3luIGNsdXN0ZXIgc3B1cFRleHRwcm9jICBjb250YWlucz1zcHVwVGV4dHByb2NHZW5lcmljLHNwdXBUZXh0cHJvY0Vycm9yCisKKyIgZGVmaW5lIHN5bmNyb25pemluZzsgZXNwZWNpYWxseSBPUEVSQVRJT04gc2VjdGlvbnMgY2FuIGJlY29tZSB2ZXJ5IGxhcmdlCitzeW4gc3luYyBjbGVhcgorc3luIHN5bmMgbWlubGluZXM9MTAwCitzeW4gc3luYyBtYXhsaW5lcz01MDAKKworc3luIHN5bmMgbWF0Y2ggc3B1cFN5bmNPcGVyYXRpb24gIGdyb3VwaGVyZSBzcHVwT3BlcmF0aW9uICAiXk9QRVJBVElPTiIKK3N5biBzeW5jIG1hdGNoIHNwdXBTeW5jQ2RpCQkgIGdyb3VwaGVyZSBzcHVwQ2RpCQkgICAiXkNESSIKK3N5biBzeW5jIG1hdGNoIHNwdXBTeW5jQ29uZGl0aW9ucyBncm91cGhlcmUgc3B1cENvbmRpdGlvbnMgIl5DT05ESVRJT05TIgorc3luIHN5bmMgbWF0Y2ggc3B1cFN5bmNEZWNsYXJlICAgIGdyb3VwaGVyZSBzcHVwRGVjbGFyZSAgICAiXkRFQ0xBUkUiCitzeW4gc3luYyBtYXRjaCBzcHVwU3luY0VzdGltYXRpb24gZ3JvdXBoZXJlIHNwdXBFc3RpbWF0aW9uICJeRVNUSU1BVElPTiIKK3N5biBzeW5jIG1hdGNoIHNwdXBTeW5jRXh0ZXJuYWwgICBncm91cGhlcmUgc3B1cEV4dGVybmFsICAgIl5FWFRFUk5BTCIKK3N5biBzeW5jIG1hdGNoIHNwdXBTeW5jRmxvd3NoZWV0ICBncm91cGhlcmUgc3B1cEZsb3dzaGVldCAgIl5GTE9XU0hFRVQiCitzeW4gc3luYyBtYXRjaCBzcHVwU3luY0Z1bmN0aW9uICAgZ3JvdXBoZXJlIHNwdXBGdW5jdGlvbiAgICJeRlVOQ1RJT04iCitzeW4gc3luYyBtYXRjaCBzcHVwU3luY0dsb2JhbCAgICAgZ3JvdXBoZXJlIHNwdXBHbG9iYWwgICAgICJeR0xPQkFMIgorc3luIHN5bmMgbWF0Y2ggc3B1cFN5bmNIb21vdG9weSAgIGdyb3VwaGVyZSBzcHVwSG9tb3RvcHkgICAiXkhPTU9UT1BZIgorc3luIHN5bmMgbWF0Y2ggc3B1cFN5bmNNYWNybyAgICAgIGdyb3VwaGVyZSBzcHVwTWFjcm8gICAgICAiXk1BQ1JPIgorc3luIHN5bmMgbWF0Y2ggc3B1cFN5bmNNb2RlbCAgICAgIGdyb3VwaGVyZSBzcHVwTW9kZWwgICAgICAiXk1PREVMIgorc3luIHN5bmMgbWF0Y2ggc3B1cFN5bmNPcGVyYXRpb24gIGdyb3VwaGVyZSBzcHVwT3BlcmF0aW9uICAiXk9QRVJBVElPTiIKK3N5biBzeW5jIG1hdGNoIHNwdXBTeW5jT3B0aW9ucyAgICBncm91cGhlcmUgc3B1cE9wdGlvbnMgICAgIl5PUFRJT05TIgorc3luIHN5bmMgbWF0Y2ggc3B1cFN5bmNQcm9jZWR1cmUgIGdyb3VwaGVyZSBzcHVwUHJvY2VkdXJlICAiXlBST0NFRFVSRSIKK3N5biBzeW5jIG1hdGNoIHNwdXBTeW5jUHJvZmlsZXMgICBncm91cGhlcmUgc3B1cFByb2ZpbGVzICAgIl5QUk9GSUxFUyIKK3N5biBzeW5jIG1hdGNoIHNwdXBTeW5jUmVwb3J0ICAgICBncm91cGhlcmUgc3B1cFJlcG9ydCAgICAgIl5SRVBPUlQiCitzeW4gc3luYyBtYXRjaCBzcHVwU3luY1RpdGxlICAgICAgZ3JvdXBoZXJlIHNwdXBUaXRsZSAgICAgICJeVElUTEUiCitzeW4gc3luYyBtYXRjaCBzcHVwU3luY1VuaXQgICAgICAgZ3JvdXBoZXJlIHNwdXBVbml0ICAgICAgICJeVU5JVCIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc3B1cF9zeW5faW5pdHMiKQorICAgIGlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9zcHVwX3N5bl9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICAgIGVuZGlmCisKKwlIaUxpbmsgc3B1cENkaQkJCXNwdXBTZWN0aW9uCisJSGlMaW5rIHNwdXBDb25kaXRpb25zCXNwdXBTZWN0aW9uCisJSGlMaW5rIHNwdXBEZWNsYXJlCQlzcHVwU2VjdGlvbgorCUhpTGluayBzcHVwRXN0aW1hdGlvbglzcHVwU2VjdGlvbgorCUhpTGluayBzcHVwRXh0ZXJuYWwJCXNwdXBTZWN0aW9uCisJSGlMaW5rIHNwdXBGbG93c2hlZXQJc3B1cFNlY3Rpb24KKwlIaUxpbmsgc3B1cEZ1bmN0aW9uCQlzcHVwU2VjdGlvbgorCUhpTGluayBzcHVwR2xvYmFsCQlzcHVwU2VjdGlvbgorCUhpTGluayBzcHVwSG9tb3RvcHkJCXNwdXBTZWN0aW9uCisJSGlMaW5rIHNwdXBNYWNybwkJc3B1cFNlY3Rpb24KKwlIaUxpbmsgc3B1cE1vZGVsCQlzcHVwU2VjdGlvbgorCUhpTGluayBzcHVwT3BlcmF0aW9uCXNwdXBTZWN0aW9uCisJSGlMaW5rIHNwdXBPcHRpb25zCQlzcHVwU2VjdGlvbgorCUhpTGluayBzcHVwUHJvY2VkdXJlCXNwdXBTZWN0aW9uCisJSGlMaW5rIHNwdXBQcm9maWxlcwkJc3B1cFNlY3Rpb24KKwlIaUxpbmsgc3B1cFJlcG9ydAkJc3B1cFNlY3Rpb24KKwlIaUxpbmsgc3B1cFRpdGxlCQlzcHVwQ29uc3RhbnQgICIgdGhpcyBpcyBjb3JyZWN0LCB0cnVseSA7KQorCUhpTGluayBzcHVwVW5pdAkJCXNwdXBTZWN0aW9uCisKKwlIaUxpbmsgc3B1cENkaVN1YnMJCSAgc3B1cFN1YnMKKwlIaUxpbmsgc3B1cENvbmRpdGlvbnNTdWJzIHNwdXBTdWJzCisJSGlMaW5rIHNwdXBEZWNsYXJlU3VicwkgIHNwdXBTdWJzCisJSGlMaW5rIHNwdXBFc3RpbWF0aW9uU3VicyBzcHVwU3VicworCUhpTGluayBzcHVwRXh0ZXJuYWxTdWJzICAgc3B1cFN1YnMKKwlIaUxpbmsgc3B1cEZsb3dzaGVldFN1YnMgIHNwdXBTdWJzCisJSGlMaW5rIHNwdXBGdW5jdGlvblN1YnMgICBzcHVwU3VicworCUhpTGluayBzcHVwSG9tb3RvcHlTdWJzICAgc3B1cFN1YnMKKwlIaUxpbmsgc3B1cE1hY3JvU3VicwkgIHNwdXBTdWJzCisJSGlMaW5rIHNwdXBNb2RlbFN1YnMJICBzcHVwU3VicworCUhpTGluayBzcHVwT3BlcmF0aW9uU3VicyAgc3B1cFN1YnMKKwlIaUxpbmsgc3B1cE9wdGlvbnNTdWJzCSAgc3B1cFN1YnMKKwlIaUxpbmsgc3B1cFByb2NlZHVyZVN1YnMgIHNwdXBTdWJzCisJSGlMaW5rIHNwdXBSZXBvcnRTdWJzCSAgc3B1cFN1YnMKKwlIaUxpbmsgc3B1cFVuaXRTdWJzCQkgIHNwdXBTdWJzCisKKwlIaUxpbmsgc3B1cENvZGUJCQkgICBOb3JtYWwKKwlIaUxpbmsgc3B1cENvbW1lbnQJCSAgIENvbW1lbnQKKwlIaUxpbmsgc3B1cENvbW1lbnQyCQkgICBzcHVwQ29tbWVudAorCUhpTGluayBzcHVwQ29uZGl0aW9uYWwJICAgU3RhdGVtZW50CisJSGlMaW5rIHNwdXBDb25zdGFudAkJICAgQ29uc3RhbnQKKwlIaUxpbmsgc3B1cEVycm9yCQkgICBFcnJvcgorCUhpTGluayBzcHVwSGVscAkJCSAgIE5vcm1hbAorCUhpTGluayBzcHVwSWRlbnRpZmllcgkgICBJZGVudGlmaWVyCisJSGlMaW5rIHNwdXBOdW1iZXIJCSAgIENvbnN0YW50CisJSGlMaW5rIHNwdXBPcGVyYXRvcgkJICAgU3BlY2lhbAorCUhpTGluayBzcHVwT3BlbkJyYWNlCSAgIHNwdXBFcnJvcgorCUhpTGluayBzcHVwU2VjdGlvbgkJICAgU3RhdGVtZW50CisJSGlMaW5rIHNwdXBTcGVjaWFsCQkgICBzcHVwVGV4dHByb2NHZW5lcmljCisJSGlMaW5rIHNwdXBTdHJlYW1zCQkgICBUeXBlCisJSGlMaW5rIHNwdXBTdHJpbmcJCSAgIENvbnN0YW50CisJSGlMaW5rIHNwdXBTdWJzCQkJICAgU3RhdGVtZW50CisJSGlMaW5rIHNwdXBTeW1ib2wJCSAgIFNwZWNpYWwKKwlIaUxpbmsgc3B1cFRleHRwcm9jRXJyb3IgICBOb3JtYWwKKwlIaUxpbmsgc3B1cFRleHRwcm9jR2VuZXJpYyBQcmVQcm9jCisJSGlMaW5rIHNwdXBUeXBlcwkJICAgVHlwZQorCisgICAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNwdXAiCisKKyIgdmltOnRzPTQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NweWNlLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NweWNlLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDFhYTg2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc3B5Y2UudmltCkBAIC0wLDAgKzEsMTEwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgU1BZQ0UKKyIgTWFpbnRhaW5lcjoJIFJpbW9uIEJhcnIgPHJpbW9uIEFUIGFjbSBET1Qgb3JnPgorIiBVUkw6CQkgICAgIGh0dHA6Ly9zcHljZS5zb3VyY2Vmb3JnZS5uZXQKKyIgTGFzdCBDaGFuZ2U6IDIwMDMgTWF5IDExCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiB3ZSBkZWZpbmUgaXQgaGVyZSBzbyB0aGF0IGluY2x1ZGVkIGZpbGVzIGNhbiB0ZXN0IGZvciBpdAoraWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBsZXQgbWFpbl9zeW50YXg9J3NweWNlJworZW5kaWYKKworIiBSZWFkIHRoZSBIVE1MIHN5bnRheCB0byBzdGFydCB3aXRoCitsZXQgYjpkaWRfaW5kZW50ID0gMQkgICAgICIgZG9uJ3QgcGVyZm9ybSBIVE1MIGluZGVudGF0aW9uIQorbGV0IGh0bWxfbm9fcmVuZGVyaW5nID0gMSAgICAiIGRvIG5vdCByZW5kZXIgPGI+LDxpPiwgZXRjLi4uCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvIDxzZmlsZT46cDpoL2h0bWwudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9odG1sLnZpbQorICB1bmxldCBiOmN1cnJlbnRfc3ludGF4CitlbmRpZgorCisiIGluY2x1ZGUgcHl0aG9uCitzeW4gaW5jbHVkZSBAUHl0aG9uIDxzZmlsZT46cDpoL3B5dGhvbi52aW0KK3N5biBpbmNsdWRlIEBIdG1sIDxzZmlsZT46cDpoL2h0bWwudmltCisKKyIgc3B5Y2UgZGVmaW5pdGlvbnMKK3N5biBrZXl3b3JkIHNweWNlRGlyZWN0aXZlS2V5d29yZCBpbmNsdWRlIGNvbXBhY3QgbW9kdWxlIGltcG9ydCBjb250YWluZWQKK3N5biBrZXl3b3JkIHNweWNlRGlyZWN0aXZlQXJnIG5hbWUgbmFtZXMgZmlsZSBjb250YWluZWQKK3N5biByZWdpb24gIHNweWNlRGlyZWN0aXZlU3RyaW5nIHN0YXJ0PSsiKyBlbmQ9KyIrIGNvbnRhaW5lZAorc3luIG1hdGNoICAgc3B5Y2VEaXJlY3RpdmVWYWx1ZSAiPVtcdCBdKlteJyIsIFx0Pl1bXiwgXHQ+XSoiaHM9cysxIGNvbnRhaW5lZAorCitzeW4gbWF0Y2ggc3B5Y2VCZWdpbkVycm9yUyAgLFxbXFssCitzeW4gbWF0Y2ggc3B5Y2VCZWdpbkVycm9yQSAgLDwlLAorc3luIGNsdXN0ZXIgc3B5Y2VCZWdpbkVycm9yIGNvbnRhaW5zPXNweWNlQmVnaW5FcnJvclMsc3B5Y2VCZWdpbkVycm9yQQorc3luIG1hdGNoIHNweWNlRW5kRXJyb3JTICAgICxcXVxdLAorc3luIG1hdGNoIHNweWNlRW5kRXJyb3JBICAgICwlPiwKK3N5biBjbHVzdGVyIHNweWNlRW5kRXJyb3IgY29udGFpbnM9c3B5Y2VFbmRFcnJvclMsc3B5Y2VFbmRFcnJvckEKKworc3luIG1hdGNoIHNweWNlRXNjQmVnaW5TICAgICAgICxcXFxbXFssCitzeW4gbWF0Y2ggc3B5Y2VFc2NCZWdpbkEgICAgICAgLFxcPCUsCitzeW4gY2x1c3RlciBzcHljZUVzY0JlZ2luIGNvbnRhaW5zPXNweWNlRXNjQmVnaW5TLHNweWNlRXNjQmVnaW5BCitzeW4gbWF0Y2ggc3B5Y2VFc2NFbmRTCSAgICAgICAsXFxcXVxdLAorc3luIG1hdGNoIHNweWNlRXNjRW5kQQkgICAgICAgLFxcJT4sCitzeW4gY2x1c3RlciBzcHljZUVzY0VuZCBjb250YWlucz1zcHljZUVzY0VuZFMsc3B5Y2VFc2NFbmRBCitzeW4gbWF0Y2ggc3B5Y2VFc2NFbmRDb21tZW50UyAgLC0tXFxcXVxdLAorc3luIG1hdGNoIHNweWNlRXNjRW5kQ29tbWVudEEgICwtLVxcJT4sCitzeW4gY2x1c3RlciBzcHljZUVzY0VuZENvbW1lbnQgY29udGFpbnM9c3B5Y2VFc2NFbmRDb21tZW50UyxzcHljZUVzY0VuZENvbW1lbnRBCisKK3N5biByZWdpb24gc3B5Y2VTdG10UyAgICAgIG1hdGNoZ3JvdXA9c3B5Y2VTdG10RGVsaW0gc3RhcnQ9LFxbXFssIGVuZD0sXF1cXSwgY29udGFpbnM9QFB5dGhvbixzcHljZUxhbWJkYVMsc3B5Y2VMYW1iZGFBLHNweWNlQmVnaW5FcnJvciBrZWVwZW5kCitzeW4gcmVnaW9uIHNweWNlU3RtdEEgICAgICBtYXRjaGdyb3VwPXNweWNlU3RtdERlbGltIHN0YXJ0PSw8JSwgZW5kPSwlPiwgY29udGFpbnM9QFB5dGhvbixzcHljZUxhbWJkYVMsc3B5Y2VMYW1iZGFBLHNweWNlQmVnaW5FcnJvciBrZWVwZW5kCitzeW4gcmVnaW9uIHNweWNlQ2h1bmtTICAgICBtYXRjaGdyb3VwPXNweWNlQ2h1bmtEZWxpbSBzdGFydD0sXFtcW1xcLCBlbmQ9LFxdXF0sIGNvbnRhaW5zPUBQeXRob24sc3B5Y2VMYW1iZGFTLHNweWNlTGFtYmRhQSxzcHljZUJlZ2luRXJyb3Iga2VlcGVuZAorc3luIHJlZ2lvbiBzcHljZUNodW5rQSAgICAgbWF0Y2hncm91cD1zcHljZUNodW5rRGVsaW0gc3RhcnQ9LDwlXFwsIGVuZD0sJT4sIGNvbnRhaW5zPUBQeXRob24sc3B5Y2VMYW1iZGFTLHNweWNlTGFtYmRhQSxzcHljZUJlZ2luRXJyb3Iga2VlcGVuZAorc3luIHJlZ2lvbiBzcHljZUV2YWxTICAgICAgbWF0Y2hncm91cD1zcHljZUV2YWxEZWxpbSBzdGFydD0sXFtcWz0sIGVuZD0sXF1cXSwgY29udGFpbnM9QFB5dGhvbixzcHljZUxhbWJkYVMsc3B5Y2VMYW1iZGFBLHNweWNlQmVnaW5FcnJvciBrZWVwZW5kCitzeW4gcmVnaW9uIHNweWNlRXZhbEEgICAgICBtYXRjaGdyb3VwPXNweWNlRXZhbERlbGltIHN0YXJ0PSw8JT0sIGVuZD0sJT4sIGNvbnRhaW5zPUBQeXRob24sc3B5Y2VMYW1iZGFTLHNweWNlTGFtYmRhQSxzcHljZUJlZ2luRXJyb3Iga2VlcGVuZAorc3luIHJlZ2lvbiBzcHljZURpcmVjdGl2ZVMgbWF0Y2hncm91cD1zcHljZURlbGltIHN0YXJ0PSxcW1xbXC4sIGVuZD0sXF1cXSwgY29udGFpbnM9c3B5Y2VCZWdpbkVycm9yLHNweWNlRGlyZWN0aXZlS2V5d29yZCxzcHljZURpcmVjdGl2ZUFyZyxzcHljZURpcmVjdGl2ZVZhbHVlLHNweWNlRGlyZWN0aXZlU3RyaW5nIGtlZXBlbmQKK3N5biByZWdpb24gc3B5Y2VEaXJlY3RpdmVBIG1hdGNoZ3JvdXA9c3B5Y2VEZWxpbSBzdGFydD0sPCVALCBlbmQ9LCU+LCBjb250YWlucz1zcHljZUJlZ2luRXJyb3Isc3B5Y2VEaXJlY3RpdmVLZXl3b3JkLHNweWNlRGlyZWN0aXZlQXJnLHNweWNlRGlyZWN0aXZlVmFsdWUsc3B5Y2VEaXJlY3RpdmVTdHJpbmcga2VlcGVuZAorc3luIHJlZ2lvbiBzcHljZUNvbW1lbnRTICAgbWF0Y2hncm91cD1zcHljZUNvbW1lbnREZWxpbSBzdGFydD0sXFtcWy0tLCBlbmQ9LC0tXF1cXSwKK3N5biByZWdpb24gc3B5Y2VDb21tZW50QSAgIG1hdGNoZ3JvdXA9c3B5Y2VDb21tZW50RGVsaW0gc3RhcnQ9LDwlLS0sIGVuZD0sLS0lPiwKK3N5biByZWdpb24gc3B5Y2VMYW1iZGFTICAgIG1hdGNoZ3JvdXA9c3B5Y2VMYW1iZGFEZWxpbSBzdGFydD0sXFtcW3NweSFcPywgZW5kPSxcXVxdLCBjb250YWlucz1ASHRtbCxAc3B5Y2UgZXh0ZW5kCitzeW4gcmVnaW9uIHNweWNlTGFtYmRhQSAgICBtYXRjaGdyb3VwPXNweWNlTGFtYmRhRGVsaW0gc3RhcnQ9LDwlc3B5IVw/LCBlbmQ9LCU+LCBjb250YWlucz1ASHRtbCxAc3B5Y2UgZXh0ZW5kCisKK3N5biBjbHVzdGVyIHNweWNlIGNvbnRhaW5zPXNweWNlU3RtdFMsc3B5Y2VTdG10QSxzcHljZUNodW5rUyxzcHljZUNodW5rQSxzcHljZUV2YWxTLHNweWNlRXZhbEEsc3B5Y2VDb21tZW50UyxzcHljZUNvbW1lbnRBLHNweWNlRGlyZWN0aXZlUyxzcHljZURpcmVjdGl2ZUEKKworc3luIGNsdXN0ZXIgaHRtbFByZXByb2MgY29udGFpbnM9QHNweWNlCisKK2hpIGxpbmsgc3B5Y2VEaXJlY3RpdmVLZXl3b3JkCVNwZWNpYWwKK2hpIGxpbmsgc3B5Y2VEaXJlY3RpdmVBcmcJVHlwZQoraGkgbGluayBzcHljZURpcmVjdGl2ZVN0cmluZwlTdHJpbmcKK2hpIGxpbmsgc3B5Y2VEaXJlY3RpdmVWYWx1ZQlTdHJpbmcKKworaGkgbGluayBzcHljZURlbGltCQlTcGVjaWFsCitoaSBsaW5rIHNweWNlU3RtdERlbGltCQlzcHljZURlbGltCitoaSBsaW5rIHNweWNlQ2h1bmtEZWxpbQkJc3B5Y2VEZWxpbQoraGkgbGluayBzcHljZUV2YWxEZWxpbQkJc3B5Y2VEZWxpbQoraGkgbGluayBzcHljZUxhbWJkYURlbGltCXNweWNlRGVsaW0KK2hpIGxpbmsgc3B5Y2VDb21tZW50RGVsaW0JQ29tbWVudAorCitoaSBsaW5rIHNweWNlQmVnaW5FcnJvclMJRXJyb3IKK2hpIGxpbmsgc3B5Y2VCZWdpbkVycm9yQQlFcnJvcgoraGkgbGluayBzcHljZUVuZEVycm9yUwkJRXJyb3IKK2hpIGxpbmsgc3B5Y2VFbmRFcnJvckEJCUVycm9yCisKK2hpIGxpbmsgc3B5Y2VTdG10UwkJc3B5Y2UKK2hpIGxpbmsgc3B5Y2VTdG10QQkJc3B5Y2UKK2hpIGxpbmsgc3B5Y2VDaHVua1MJCXNweWNlCitoaSBsaW5rIHNweWNlQ2h1bmtBCQlzcHljZQoraGkgbGluayBzcHljZUV2YWxTCQlzcHljZQoraGkgbGluayBzcHljZUV2YWxBCQlzcHljZQoraGkgbGluayBzcHljZURpcmVjdGl2ZVMJCXNweWNlCitoaSBsaW5rIHNweWNlRGlyZWN0aXZlQQkJc3B5Y2UKK2hpIGxpbmsgc3B5Y2VDb21tZW50UwkJQ29tbWVudAoraGkgbGluayBzcHljZUNvbW1lbnRBCQlDb21tZW50CitoaSBsaW5rIHNweWNlTGFtYmRhUwkJTm9ybWFsCitoaSBsaW5rIHNweWNlTGFtYmRhQQkJTm9ybWFsCisKK2hpIGxpbmsgc3B5Y2UJCQlTdGF0ZW1lbnQKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic3B5Y2UiCitpZiBtYWluX3N5bnRheCA9PSAnc3B5Y2UnCisgIHVubGV0IG1haW5fc3ludGF4CitlbmRpZgorCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zcWwudmltIGIvcnVudGltZS9zeW50YXgvc3FsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDgzYjgxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc3FsLnZpbQpAQCAtMCwwICsxLDg5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJU1FMLCBQTC9TUUwgKE9yYWNsZSA4aSkKKyIgTWFpbnRhaW5lcjoJUGF1bCBNb29yZSA8Z3VzdGF2QG1vcnBoZXVzLmRlbW9uLmNvLnVrPgorIiBMYXN0IENoYW5nZToJMjAwMSBBcHIgMzAKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBUaGUgU1FMIHJlc2VydmVkIHdvcmRzLCBkZWZpbmVkIGFzIGtleXdvcmRzLgorCitzeW4ga2V5d29yZCBzcWxTcGVjaWFsICBmYWxzZSBudWxsIHRydWUKKworc3luIGtleXdvcmQgc3FsS2V5d29yZAlhY2Nlc3MgYWRkIGFzIGFzYyBiZWdpbiBieSBjaGVjayBjbHVzdGVyIGNvbHVtbgorc3luIGtleXdvcmQgc3FsS2V5d29yZAljb21wcmVzcyBjb25uZWN0IGN1cnJlbnQgY3Vyc29yIGRlY2ltYWwgZGVmYXVsdCBkZXNjCitzeW4ga2V5d29yZCBzcWxLZXl3b3JkCWVsc2UgZWxzaWYgZW5kIGV4Y2VwdGlvbiBleGNsdXNpdmUgZmlsZSBmb3IgZnJvbQorc3luIGtleXdvcmQgc3FsS2V5d29yZAlmdW5jdGlvbiBncm91cCBoYXZpbmcgaWRlbnRpZmllZCBpZiBpbW1lZGlhdGUgaW5jcmVtZW50CitzeW4ga2V5d29yZCBzcWxLZXl3b3JkCWluZGV4IGluaXRpYWwgaW50byBpcyBsZXZlbCBsb29wIG1heGV4dGVudHMgbW9kZSBtb2RpZnkKK3N5biBrZXl3b3JkIHNxbEtleXdvcmQJbm9jb21wcmVzcyBub3dhaXQgb2Ygb2ZmbGluZSBvbiBvbmxpbmUgc3RhcnQKK3N5biBrZXl3b3JkIHNxbEtleXdvcmQJc3VjY2Vzc2Z1bCBzeW5vbnltIHRhYmxlIHRoZW4gdG8gdHJpZ2dlciB1aWQKK3N5biBrZXl3b3JkIHNxbEtleXdvcmQJdW5pcXVlIHVzZXIgdmFsaWRhdGUgdmFsdWVzIHZpZXcgd2hlbmV2ZXIKK3N5biBrZXl3b3JkIHNxbEtleXdvcmQJd2hlcmUgd2l0aCBvcHRpb24gb3JkZXIgcGN0ZnJlZSBwcml2aWxlZ2VzIHByb2NlZHVyZQorc3luIGtleXdvcmQgc3FsS2V5d29yZAlwdWJsaWMgcmVzb3VyY2UgcmV0dXJuIHJvdyByb3dsYWJlbCByb3dudW0gcm93cworc3luIGtleXdvcmQgc3FsS2V5d29yZAlzZXNzaW9uIHNoYXJlIHNpemUgc21hbGxpbnQgdHlwZSB1c2luZworCitzeW4ga2V5d29yZCBzcWxPcGVyYXRvcglub3QgYW5kIG9yCitzeW4ga2V5d29yZCBzcWxPcGVyYXRvcglpbiBhbnkgc29tZSBhbGwgYmV0d2VlbiBleGlzdHMKK3N5biBrZXl3b3JkIHNxbE9wZXJhdG9yCWxpa2UgZXNjYXBlCitzeW4ga2V5d29yZCBzcWxPcGVyYXRvciB1bmlvbiBpbnRlcnNlY3QgbWludXMKK3N5biBrZXl3b3JkIHNxbE9wZXJhdG9yIHByaW9yIGRpc3RpbmN0CitzeW4ga2V5d29yZCBzcWxPcGVyYXRvcglzeXNkYXRlIG91dAorCitzeW4ga2V5d29yZCBzcWxTdGF0ZW1lbnQgYWx0ZXIgYW5hbHl6ZSBhdWRpdCBjb21tZW50IGNvbW1pdCBjcmVhdGUKK3N5biBrZXl3b3JkIHNxbFN0YXRlbWVudCBkZWxldGUgZHJvcCBleGVjdXRlIGV4cGxhaW4gZ3JhbnQgaW5zZXJ0IGxvY2sgbm9hdWRpdAorc3luIGtleXdvcmQgc3FsU3RhdGVtZW50IHJlbmFtZSByZXZva2Ugcm9sbGJhY2sgc2F2ZXBvaW50IHNlbGVjdCBzZXQKK3N5biBrZXl3b3JkIHNxbFN0YXRlbWVudCB0cnVuY2F0ZSB1cGRhdGUKKworc3luIGtleXdvcmQgc3FsVHlwZQlib29sZWFuIGNoYXIgY2hhcmFjdGVyIGRhdGUgZmxvYXQgaW50ZWdlciBsb25nCitzeW4ga2V5d29yZCBzcWxUeXBlCW1sc2xhYmVsIG51bWJlciByYXcgcm93aWQgdmFyY2hhciB2YXJjaGFyMiB2YXJyYXkKKworIiBTdHJpbmdzIGFuZCBjaGFyYWN0ZXJzOgorc3luIHJlZ2lvbiBzcWxTdHJpbmcJCXN0YXJ0PSsiKyAgc2tpcD0rXFxcXFx8XFwiKyAgZW5kPSsiKworc3luIHJlZ2lvbiBzcWxTdHJpbmcJCXN0YXJ0PSsnKyAgc2tpcD0rXFxcXFx8XFwnKyAgZW5kPSsnKworCisiIE51bWJlcnM6CitzeW4gbWF0Y2ggc3FsTnVtYmVyCQkiLVw9XDxcZCpcLlw9WzAtOV9dXD4iCisKKyIgQ29tbWVudHM6CitzeW4gcmVnaW9uIHNxbENvbW1lbnQgICAgc3RhcnQ9Ii9cKiIgIGVuZD0iXCovIiBjb250YWlucz1zcWxUb2RvCitzeW4gbWF0Y2ggc3FsQ29tbWVudAkiLS0uKiQiIGNvbnRhaW5zPXNxbFRvZG8KKworc3luIHN5bmMgY2NvbW1lbnQgc3FsQ29tbWVudAorCisiIFRvZG8uCitzeW4ga2V5d29yZCBzcWxUb2RvIFRPRE8gRklYTUUgWFhYIERFQlVHIE5PVEUKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc3FsX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3NxbF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBzcWxDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIHNxbEtleXdvcmQJc3FsU3BlY2lhbAorICBIaUxpbmsgc3FsTnVtYmVyCU51bWJlcgorICBIaUxpbmsgc3FsT3BlcmF0b3IJc3FsU3RhdGVtZW50CisgIEhpTGluayBzcWxTcGVjaWFsCVNwZWNpYWwKKyAgSGlMaW5rIHNxbFN0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIHNxbFN0cmluZwlTdHJpbmcKKyAgSGlMaW5rIHNxbFR5cGUJVHlwZQorICBIaUxpbmsgc3FsVG9kbwlUb2RvCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNxbCIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NxbGZvcm1zLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NxbGZvcm1zLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTViMmFlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc3FsZm9ybXMudmltCkBAIC0wLDAgKzEsMTY4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiAgICBMYW5ndWFnZTogU1FMKkZvcm1zIChPcmFjbGUgNyksIGJhc2VkIG9uIHNxbC52aW0gKHZpbTUuMCkKKyIgIE1haW50YWluZXI6IEF1c3RpbiBaaWVnbGVyIChhdXN0aW5AaGFsb3N0YXR1ZS5jYSkKKyIgTGFzdCBDaGFuZ2U6IDIwMDMgTWF5IDExCisiIFByZXYgQ2hhbmdlOiAxOTk4MDcxMAorIgkgIFVSTDogaHR0cDovL3d3dy5oYWxvc3RhdHVlLmNhL3ZpbS9zeW50YXgvcHJvYy52aW0KKyIKKyIgVE9ETyBGaW5kIGEgbmV3IG1haW50YWluZXIgd2hvIGtub3dzIFNRTCpGb3Jtcy4KKworICAgICIgRm9yIHZlcnNpb24gNS54LCBjbGVhciBhbGwgc3ludGF4IGl0ZW1zLgorICAgICIgRm9yIHZlcnNpb24gNi54LCBxdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQuCitpZiB2ZXJzaW9uIDwgNjAwCisgICAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK3N5bnRheCBjYXNlIGlnbm9yZQorCitpZiB2ZXJzaW9uID49IDYwMAorICBzZXRsb2NhbCBpc2tleXdvcmQ9YS16LEEtWiw0OC01NyxfLC4sLSw+CitlbHNlCisgIHNldCBpc2tleXdvcmQ9YS16LEEtWiw0OC01NyxfLC4sLSw+CitlbmRpZgorCisKKyAgICAiIFRoZSBTUUwgcmVzZXJ2ZWQgd29yZHMsIGRlZmluZWQgYXMga2V5d29yZHMuCitzeW50YXggbWF0Y2ggc3FsVHJpZ2dlcnMgL29uLS4qJC8KK3N5bnRheCBtYXRjaCBzcWxUcmlnZ2VycyAva2V5LS4qJC8KK3N5bnRheCBtYXRjaCBzcWxUcmlnZ2VycyAvcG9zdC0uKiQvCitzeW50YXggbWF0Y2ggc3FsVHJpZ2dlcnMgL3ByZS0uKiQvCitzeW50YXggbWF0Y2ggc3FsVHJpZ2dlcnMgL3VzZXItLiokLworCitzeW50YXgga2V5d29yZCBzcWxTcGVjaWFsIG51bGwgZmFsc2UgdHJ1ZQorCitzeW50YXgga2V5d29yZCBzcWxQcm9jZWR1cmUgYWJvcnRfcXVlcnkgYW5jaG9yX3ZpZXcgYmVsbCBibG9ja19tZW51IGJyZWFrIGNhbGwKK3N5bnRheCBrZXl3b3JkIHNxbFByb2NlZHVyZSBjYWxsX2lucHV0IGNhbGxfcXVlcnkgY2xlYXJfYmxvY2sgY2xlYXJfZW9sCitzeW50YXgga2V5d29yZCBzcWxQcm9jZWR1cmUgY2xlYXJfZmllbGQgY2xlYXJfZm9ybSBjbGVhcl9yZWNvcmQgY29tbWl0X2Zvcm0KK3N5bnRheCBrZXl3b3JkIHNxbFByb2NlZHVyZSBjb3B5IGNvdW50X3F1ZXJ5IGNyZWF0ZV9yZWNvcmQgZGVmYXVsdF92YWx1ZQorc3ludGF4IGtleXdvcmQgc3FsUHJvY2VkdXJlIGRlbGV0ZV9yZWNvcmQgZGlzcGxheV9lcnJvciBkaXNwbGF5X2ZpZWxkIGRvd24KK3N5bnRheCBrZXl3b3JkIHNxbFByb2NlZHVyZSBkdXBsaWNhdGVfZmllbGQgZHVwbGljYXRlX3JlY29yZCBlZGl0X2ZpZWxkCitzeW50YXgga2V5d29yZCBzcWxQcm9jZWR1cmUgZW50ZXIgZW50ZXJfcXVlcnkgZXJhc2UgZXhlY3V0ZV9xdWVyeQorc3ludGF4IGtleXdvcmQgc3FsUHJvY2VkdXJlIGV4ZWN1dGVfdHJpZ2dlciBleGl0X2Zvcm0gZmlyc3RfUmVjb3JkIGdvX2Jsb2NrCitzeW50YXgga2V5d29yZCBzcWxQcm9jZWR1cmUgZ29fZmllbGQgZ29fcmVjb3JkIGhlbHAgaGlkZV9tZW51IGhpZGVfcGFnZSBob3N0CitzeW50YXgga2V5d29yZCBzcWxQcm9jZWR1cmUgbGFzdF9yZWNvcmQgbGlzdF92YWx1ZXMgbG9ja19yZWNvcmQgbWVzc2FnZQorc3ludGF4IGtleXdvcmQgc3FsUHJvY2VkdXJlIG1vdmVfdmlldyBuZXdfZm9ybSBuZXh0X2Jsb2NrIG5leHRfZmllbGQgbmV4dF9rZXkKK3N5bnRheCBrZXl3b3JkIHNxbFByb2NlZHVyZSBuZXh0X3JlY29yZCBuZXh0X3NldCBwYXVzZSBwb3N0IHByZXZpb3VzX2Jsb2NrCitzeW50YXgga2V5d29yZCBzcWxQcm9jZWR1cmUgcHJldmlvdXNfZmllbGQgcHJldmlvdXNfcmVjb3JkIHByaW50IHJlZGlzcGxheQorc3ludGF4IGtleXdvcmQgc3FsUHJvY2VkdXJlIHJlcGxhY2VfbWVudSByZXNpemVfdmlldyBzY3JvbGxfZG93biBzY3JvbGxfdXAKK3N5bnRheCBrZXl3b3JkIHNxbFByb2NlZHVyZSBzZXRfZmllbGQgc2hvd19rZXlzIHNob3dfbWVudSBzaG93X3BhZ2UKK3N5bnRheCBrZXl3b3JkIHNxbFByb2NlZHVyZSBzeW5jaHJvbml6ZSB1cCB1c2VyX2V4aXQKKworc3ludGF4IGtleXdvcmQgc3FsRnVuY3Rpb24gYmxvY2tfY2hhcmFjdGVyaXN0aWMgZXJyb3JfY29kZSBlcnJvcl90ZXh0CitzeW50YXgga2V5d29yZCBzcWxGdW5jdGlvbiBlcnJvcl90eXBlIGZpZWxkX2NoYXJhY3RlcmlzdGljIGZvcm1fZmFpbHVyZQorc3ludGF4IGtleXdvcmQgc3FsRnVuY3Rpb24gZm9ybV9mYXRhbCBmb3JtX3N1Y2Nlc3MgbmFtZV9pbgorCitzeW50YXgga2V5d29yZCBzcWxQYXJhbWV0ZXJzIGhpZGUgbm9faGlkZSByZXBsYWNlIG5vX3JlcGxhY2UgYXNrX2NvbW1pdAorc3ludGF4IGtleXdvcmQgc3FsUGFyYW1ldGVycyBkb19jb21taXQgbm9fY29tbWl0IG5vX3ZhbGlkYXRlIGFsbF9yZWNvcmRzCitzeW50YXgga2V5d29yZCBzcWxQYXJhbWV0ZXJzIGZvcl91cGRhdGUgbm9fcmVzdHJpY3QgcmVzdHJpY3Qgbm9fc2NyZWVuCitzeW50YXgga2V5d29yZCBzcWxQYXJhbWV0ZXJzIGJhciBmdWxsX3NjcmVlbiBwdWxsX2Rvd24gYXV0b19oZWxwIGF1dG9fc2tpcAorc3ludGF4IGtleXdvcmQgc3FsUGFyYW1ldGVycyBmaXhlZF9sZW5ndGggZW50ZXJhYmxlIHJlcXVpcmVkIGVjaG8gcXVlcnlhYmxlCitzeW50YXgga2V5d29yZCBzcWxQYXJhbWV0ZXJzIHVwZGF0ZWFibGUgdXBkYXRlX251bGwgdXBwZXJfY2FzZSBhdHRyX29uCitzeW50YXgga2V5d29yZCBzcWxQYXJhbWV0ZXJzIGF0dHJfb2ZmIGJhc2VfdGFibGUgZmlyc3RfZmllbGQgbGFzdF9maWVsZAorc3ludGF4IGtleXdvcmQgc3FsUGFyYW1ldGVycyBkYXRhdHlwZSBkaXNwbGF5ZWQgZGlzcGxheV9sZW5ndGggZmllbGRfbGVuZ3RoCitzeW50YXgga2V5d29yZCBzcWxQYXJhbWV0ZXJzIGxpc3QgcGFnZSBwcmltYXJ5X2tleSBxdWVyeV9sZW5ndGggeF9wb3MgeV9wb3MKKworc3ludGF4IG1hdGNoIHNxbFN5c3RlbSAvc3lzdGVtXC5ibG9ja19zdGF0dXMvCitzeW50YXggbWF0Y2ggc3FsU3lzdGVtIC9zeXN0ZW1cLmN1cnJlbnRfYmxvY2svCitzeW50YXggbWF0Y2ggc3FsU3lzdGVtIC9zeXN0ZW1cLmN1cnJlbnRfZmllbGQvCitzeW50YXggbWF0Y2ggc3FsU3lzdGVtIC9zeXN0ZW1cLmN1cnJlbnRfZm9ybS8KK3N5bnRheCBtYXRjaCBzcWxTeXN0ZW0gL3N5c3RlbVwuY3VycmVudF92YWx1ZS8KK3N5bnRheCBtYXRjaCBzcWxTeXN0ZW0gL3N5c3RlbVwuY3Vyc29yX2Jsb2NrLworc3ludGF4IG1hdGNoIHNxbFN5c3RlbSAvc3lzdGVtXC5jdXJzb3JfZmllbGQvCitzeW50YXggbWF0Y2ggc3FsU3lzdGVtIC9zeXN0ZW1cLmN1cnNvcl9yZWNvcmQvCitzeW50YXggbWF0Y2ggc3FsU3lzdGVtIC9zeXN0ZW1cLmN1cnNvcl92YWx1ZS8KK3N5bnRheCBtYXRjaCBzcWxTeXN0ZW0gL3N5c3RlbVwuZm9ybV9zdGF0dXMvCitzeW50YXggbWF0Y2ggc3FsU3lzdGVtIC9zeXN0ZW1cLmxhc3RfcXVlcnkvCitzeW50YXggbWF0Y2ggc3FsU3lzdGVtIC9zeXN0ZW1cLmxhc3RfcmVjb3JkLworc3ludGF4IG1hdGNoIHNxbFN5c3RlbSAvc3lzdGVtXC5tZXNzYWdlX2xldmVsLworc3ludGF4IG1hdGNoIHNxbFN5c3RlbSAvc3lzdGVtXC5yZWNvcmRfc3RhdHVzLworc3ludGF4IG1hdGNoIHNxbFN5c3RlbSAvc3lzdGVtXC50cmlnZ2VyX2Jsb2NrLworc3ludGF4IG1hdGNoIHNxbFN5c3RlbSAvc3lzdGVtXC50cmlnZ2VyX2ZpZWxkLworc3ludGF4IG1hdGNoIHNxbFN5c3RlbSAvc3lzdGVtXC50cmlnZ2VyX3JlY29yZC8KK3N5bnRheCBtYXRjaCBzcWxTeXN0ZW0gL1wkXCRkYXRlXCRcJC8KK3N5bnRheCBtYXRjaCBzcWxTeXN0ZW0gL1wkXCR0aW1lXCRcJC8KKworc3ludGF4IGtleXdvcmQgc3FsS2V5d29yZCBhY2NlcHQgYWNjZXNzIGFkZCBhcyBhc2MgYnkgY2hlY2sgY2x1c3RlciBjb2x1bW4KK3N5bnRheCBrZXl3b3JkIHNxbEtleXdvcmQgY29tcHJlc3MgY29ubmVjdCBjdXJyZW50IGRlY2ltYWwgZGVmYXVsdAorc3ludGF4IGtleXdvcmQgc3FsS2V5d29yZCBkZXNjIGV4Y2x1c2l2ZSBmaWxlIGZvciBmcm9tIGdyb3VwCitzeW50YXgga2V5d29yZCBzcWxLZXl3b3JkIGhhdmluZyBpZGVudGlmaWVkIGltbWVkaWF0ZSBpbmNyZW1lbnQgaW5kZXgKK3N5bnRheCBrZXl3b3JkIHNxbEtleXdvcmQgaW5pdGlhbCBpbnRvIGlzIGxldmVsIG1heGV4dGVudHMgbW9kZSBtb2RpZnkKK3N5bnRheCBrZXl3b3JkIHNxbEtleXdvcmQgbm9jb21wcmVzcyBub3dhaXQgb2Ygb2ZmbGluZSBvbiBvbmxpbmUgc3RhcnQKK3N5bnRheCBrZXl3b3JkIHNxbEtleXdvcmQgc3VjY2Vzc2Z1bCBzeW5vbnltIHRhYmxlIHRvIHRyaWdnZXIgdWlkCitzeW50YXgga2V5d29yZCBzcWxLZXl3b3JkIHVuaXF1ZSB1c2VyIHZhbGlkYXRlIHZhbHVlcyB2aWV3IHdoZW5ldmVyCitzeW50YXgga2V5d29yZCBzcWxLZXl3b3JkIHdoZXJlIHdpdGggb3B0aW9uIG9yZGVyIHBjdGZyZWUgcHJpdmlsZWdlcworc3ludGF4IGtleXdvcmQgc3FsS2V5d29yZCBwdWJsaWMgcmVzb3VyY2Ugcm93IHJvd2xhYmVsIHJvd251bSByb3dzCitzeW50YXgga2V5d29yZCBzcWxLZXl3b3JkIHNlc3Npb24gc2hhcmUgc2l6ZSBzbWFsbGludCBzcWxcKmZvcm1zX3ZlcnNpb24KK3N5bnRheCBrZXl3b3JkIHNxbEtleXdvcmQgdGVyc2UgZGVmaW5lIGZvcm0gbmFtZSB0aXRsZSBwcm9jZWR1cmUgYmVnaW4KK3N5bnRheCBrZXl3b3JkIHNxbEtleXdvcmQgZGVmYXVsdF9tZW51X2FwcGxpY2F0aW9uIHRyaWdnZXIgYmxvY2sgZmllbGQKK3N5bnRheCBrZXl3b3JkIHNxbEtleXdvcmQgZW5kZGVmaW5lIGRlY2xhcmUgZXhjZXB0aW9uIHJhaXNlIHdoZW4gY3Vyc29yCitzeW50YXgga2V5d29yZCBzcWxLZXl3b3JkIGRlZmluaXRpb24gYmFzZV90YWJsZSBwcmFnbWEKK3N5bnRheCBrZXl3b3JkIHNxbEtleXdvcmQgY29sdW1uX25hbWUgZ2xvYmFsIHRyaWdnZXJfdHlwZSB0ZXh0IGRlc2NyaXB0aW9uCitzeW50YXggbWF0Y2ggc3FsS2V5d29yZCAiPDw8Igorc3ludGF4IG1hdGNoIHNxbEtleXdvcmQgIj4+PiIKKworc3ludGF4IGtleXdvcmQgc3FsT3BlcmF0b3Igbm90IGFuZCBvciBvdXQgdG9fbnVtYmVyIHRvX2RhdGUgbWVzc2FnZSBlcmFzZQorc3ludGF4IGtleXdvcmQgc3FsT3BlcmF0b3IgaW4gYW55IHNvbWUgYWxsIGJldHdlZW4gZXhpc3RzIHN1YnN0ciBudmwKK3N5bnRheCBrZXl3b3JkIHNxbE9wZXJhdG9yIGV4Y2VwdGlvbl9pbml0CitzeW50YXgga2V5d29yZCBzcWxPcGVyYXRvciBsaWtlIGVzY2FwZSB0cnVuYyBscGFkIHJwYWQgc3VtCitzeW50YXgga2V5d29yZCBzcWxPcGVyYXRvciB1bmlvbiBpbnRlcnNlY3QgbWludXMgdG9fY2hhciBncmVhdGVzdAorc3ludGF4IGtleXdvcmQgc3FsT3BlcmF0b3IgcHJpb3IgZGlzdGluY3QgZGVjb2RlIGxlYXN0IGF2Zworc3ludGF4IGtleXdvcmQgc3FsT3BlcmF0b3Igc3lzZGF0ZSB0cnVlIGZhbHNlIGZpZWxkX2NoYXJhY3RlcmlzdGljCitzeW50YXgga2V5d29yZCBzcWxPcGVyYXRvciBkaXNwbGF5X2ZpZWxkIGNhbGwgaG9zdAorCitzeW50YXgga2V5d29yZCBzcWxTdGF0ZW1lbnQgYWx0ZXIgYW5hbHl6ZSBhdWRpdCBjb21tZW50IGNvbW1pdCBjcmVhdGUKK3N5bnRheCBrZXl3b3JkIHNxbFN0YXRlbWVudCBkZWxldGUgZHJvcCBleHBsYWluIGdyYW50IGluc2VydCBsb2NrIG5vYXVkaXQKK3N5bnRheCBrZXl3b3JkIHNxbFN0YXRlbWVudCByZW5hbWUgcmV2b2tlIHJvbGxiYWNrIHNhdmVwb2ludCBzZWxlY3Qgc2V0CitzeW50YXgga2V5d29yZCBzcWxTdGF0ZW1lbnQgdHJ1bmNhdGUgdXBkYXRlIGlmIGVsc2lmIGxvb3AgdGhlbgorc3ludGF4IGtleXdvcmQgc3FsU3RhdGVtZW50IG9wZW4gZmV0Y2ggY2xvc2UgZWxzZSBlbmQKKworc3ludGF4IGtleXdvcmQgc3FsVHlwZSBjaGFyIGNoYXJhY3RlciBkYXRlIGxvbmcgcmF3IG1sc2xhYmVsIG51bWJlciByb3dpZAorc3ludGF4IGtleXdvcmQgc3FsVHlwZSB2YXJjaGFyIHZhcmNoYXIyIGZsb2F0IGludGVnZXIgYm9vbGVhbiBnbG9iYWwKKworc3ludGF4IGtleXdvcmQgc3FsQ29kZXMgc3FsY29kZSBub19kYXRhX2ZvdW5kIHRvb19tYW55X3Jvd3Mgb3RoZXJzCitzeW50YXgga2V5d29yZCBzcWxDb2RlcyBmb3JtX3RyaWdnZXJfZmFpbHVyZSBub3Rmb3VuZCBmb3VuZAorc3ludGF4IGtleXdvcmQgc3FsQ29kZXMgdmFsaWRhdGUgbm9fY29tbWl0CisKKyAgICAiIENvbW1lbnRzOgorc3ludGF4IHJlZ2lvbiBzcWxDb21tZW50ICAgIHN0YXJ0PSIvXCoiICBlbmQ9IlwqLyIKK3N5bnRheCBtYXRjaCBzcWxDb21tZW50ICAiLS0uKiIKKworICAgICIgU3RyaW5ncyBhbmQgY2hhcmFjdGVyczoKK3N5bnRheCByZWdpb24gc3FsU3RyaW5nICBzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisKK3N5bnRheCByZWdpb24gc3FsU3RyaW5nICBzdGFydD0rJysgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rJysKKworICAgICIgTnVtYmVyczoKK3N5bnRheCBtYXRjaCBzcWxOdW1iZXIgICItXD1cPFswLTldKlwuXD1bMC05X11cPiIKKworc3ludGF4IHN5bmMgY2NvbW1lbnQgc3FsQ29tbWVudAorCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc3FsZm9ybXNfc3luX2luaXRzIikKKyAgICBpZiB2ZXJzaW9uIDwgNTA4CisJbGV0IGRpZF9zcWxmb3Jtc19zeW5faW5pdHMgPSAxCisJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgICBlbHNlCisJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgICAgZW5kaWYKKworICAgIEhpTGluayBzcWxDb21tZW50IENvbW1lbnQKKyAgICBIaUxpbmsgc3FsS2V5d29yZCBTdGF0ZW1lbnQKKyAgICBIaUxpbmsgc3FsTnVtYmVyIE51bWJlcgorICAgIEhpTGluayBzcWxPcGVyYXRvciBTdGF0ZW1lbnQKKyAgICBIaUxpbmsgc3FsUHJvY2VkdXJlIFN0YXRlbWVudAorICAgIEhpTGluayBzcWxGdW5jdGlvbiBTdGF0ZW1lbnQKKyAgICBIaUxpbmsgc3FsU3lzdGVtIElkZW50aWZpZXIKKyAgICBIaUxpbmsgc3FsU3BlY2lhbCBTcGVjaWFsCisgICAgSGlMaW5rIHNxbFN0YXRlbWVudCBTdGF0ZW1lbnQKKyAgICBIaUxpbmsgc3FsU3RyaW5nIFN0cmluZworICAgIEhpTGluayBzcWxUeXBlIFR5cGUKKyAgICBIaUxpbmsgc3FsQ29kZXMgSWRlbnRpZmllcgorICAgIEhpTGluayBzcWxUcmlnZ2VycyBQcmVQcm9jCisKKyAgICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic3FsZm9ybXMiCisKKyIgdmltOiB0cz04IHN3PTQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NxbGoudmltIGIvcnVudGltZS9zeW50YXgvc3Fsai52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2NGJkZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NxbGoudmltCkBAIC0wLDAgKzEsMTAwIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJc3FsagorIiBNYWludGFpbmVyOglBbmRyZWFzIEZpc2NoYmFjaCA8YWZpc2NoQGFsdGF2aXN0YS5jb20+CisiCQlUaGlzIGZpbGUgaXMgYmFzZWQgb24gc3FsLnZpbSAmJiBqYXZhLnZpbSAodGhhbngpCisiCQl3aXRoIGEgaGFuZGZ1bCBvZiBhZGRpdGlvbmFsIHNxbCB3b3JkcyBhbmQgc3RpbGwKKyIJCWEgc3Vic2V0IG9mIHdoYXRldmVyIHN0YW5kYXJkCisiIExhc3QgY2hhbmdlOgkzMXRoIERlYyAyMDAxCisKKyIgYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc3FsaiBzbyAkVklNL3N5bnRheC9zcWxqLnZpbQorCisiIFJlbW92ZSBhbnkgb2xkIHN5bnRheCBzdHVmZiBoYW5naW5nIGFyb3VuZAoraWYgdmVyc2lvbiA8IDYwMAorICAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgIGZpbmlzaAorZW5kaWYKKworIiBSZWFkIHRoZSBKYXZhIHN5bnRheCB0byBzdGFydCB3aXRoCitzb3VyY2UgPHNmaWxlPjpwOmgvamF2YS52aW0KKworIiBTUUxKIGV4dGVudGlvbnMKKyIgVGhlIFNRTCByZXNlcnZlZCB3b3JkcywgZGVmaW5lZCBhcyBrZXl3b3Jkcy4KKworc3luIGNhc2UgaWdub3JlCitzeW4ga2V5d29yZCBzcWxqU3BlY2lhbCAgIG51bGwKKworc3luIGtleXdvcmQgc3FsaktleXdvcmQJYWNjZXNzIGFkZCBhcyBhc2MgYnkgY2hlY2sgY2x1c3RlciBjb2x1bW4KK3N5biBrZXl3b3JkIHNxbGpLZXl3b3JkCWNvbXByZXNzIGNvbm5lY3QgY3VycmVudCBkZWNpbWFsIGRlZmF1bHQKK3N5biBrZXl3b3JkIHNxbGpLZXl3b3JkCWRlc2MgZWxzZSBleGNsdXNpdmUgZmlsZSBmb3IgZnJvbSBncm91cAorc3luIGtleXdvcmQgc3FsaktleXdvcmQJaGF2aW5nIGlkZW50aWZpZWQgaW1tZWRpYXRlIGluY3JlbWVudCBpbmRleAorc3luIGtleXdvcmQgc3FsaktleXdvcmQJaW5pdGlhbCBpbnRvIGlzIGxldmVsIG1heGV4dGVudHMgbW9kZSBtb2RpZnkKK3N5biBrZXl3b3JkIHNxbGpLZXl3b3JkCW5vY29tcHJlc3Mgbm93YWl0IG9mIG9mZmxpbmUgb24gb25saW5lIHN0YXJ0CitzeW4ga2V5d29yZCBzcWxqS2V5d29yZAlzdWNjZXNzZnVsIHN5bm9ueW0gdGFibGUgdGhlbiB0byB0cmlnZ2VyIHVpZAorc3luIGtleXdvcmQgc3FsaktleXdvcmQJdW5pcXVlIHVzZXIgdmFsaWRhdGUgdmFsdWVzIHZpZXcgd2hlbmV2ZXIKK3N5biBrZXl3b3JkIHNxbGpLZXl3b3JkCXdoZXJlIHdpdGggb3B0aW9uIG9yZGVyIHBjdGZyZWUgcHJpdmlsZWdlcworc3luIGtleXdvcmQgc3FsaktleXdvcmQJcHVibGljIHJlc291cmNlIHJvdyByb3dsYWJlbCByb3dudW0gcm93cworc3luIGtleXdvcmQgc3FsaktleXdvcmQJc2Vzc2lvbiBzaGFyZSBzaXplIHNtYWxsaW50CisKK3N5biBrZXl3b3JkIHNxbGpLZXl3b3JkICBmZXRjaCBkYXRhYmFzZSBjb250ZXh0IGl0ZXJhdG9yIGZpZWxkIGpvaW4KK3N5biBrZXl3b3JkIHNxbGpLZXl3b3JkICBmb3JlaWduIG91dGVyIGlubmVyIGlzb2xhdGlvbiBsZWZ0IHJpZ2h0CitzeW4ga2V5d29yZCBzcWxqS2V5d29yZCAgbWF0Y2ggcHJpbWFyeSBrZXkKKworc3luIGtleXdvcmQgc3Fsak9wZXJhdG9yCW5vdCBhbmQgb3IKK3N5biBrZXl3b3JkIHNxbGpPcGVyYXRvcglpbiBhbnkgc29tZSBhbGwgYmV0d2VlbiBleGlzdHMKK3N5biBrZXl3b3JkIHNxbGpPcGVyYXRvcglsaWtlIGVzY2FwZQorc3luIGtleXdvcmQgc3Fsak9wZXJhdG9yIHVuaW9uIGludGVyc2VjdCBtaW51cworc3luIGtleXdvcmQgc3Fsak9wZXJhdG9yIHByaW9yIGRpc3RpbmN0CitzeW4ga2V5d29yZCBzcWxqT3BlcmF0b3IJc3lzZGF0ZQorCitzeW4ga2V5d29yZCBzcWxqT3BlcmF0b3IJbWF4IG1pbiBhdmcgc3VtIGNvdW50IGhleAorCitzeW4ga2V5d29yZCBzcWxqU3RhdGVtZW50CWFsdGVyIGFuYWx5emUgYXVkaXQgY29tbWVudCBjb21taXQgY3JlYXRlCitzeW4ga2V5d29yZCBzcWxqU3RhdGVtZW50CWRlbGV0ZSBkcm9wIGV4cGxhaW4gZ3JhbnQgaW5zZXJ0IGxvY2sgbm9hdWRpdAorc3luIGtleXdvcmQgc3FsalN0YXRlbWVudAlyZW5hbWUgcmV2b2tlIHJvbGxiYWNrIHNhdmVwb2ludCBzZWxlY3Qgc2V0CitzeW4ga2V5d29yZCBzcWxqU3RhdGVtZW50CSB0cnVuY2F0ZSB1cGRhdGUgYmVnaW4gd29yaworCitzeW4ga2V5d29yZCBzcWxqVHlwZQkJY2hhciBjaGFyYWN0ZXIgZGF0ZSBsb25nIHJhdyBtbHNsYWJlbCBudW1iZXIKK3N5biBrZXl3b3JkIHNxbGpUeXBlCQlyb3dpZCB2YXJjaGFyIHZhcmNoYXIyIGZsb2F0IGludGVnZXIKKworc3luIGtleXdvcmQgc3FsalR5cGUJCWJ5dGUgdGV4dCBzZXJpYWwKKworCisiIFN0cmluZ3MgYW5kIGNoYXJhY3RlcnM6CitzeW4gcmVnaW9uIHNxbGpTdHJpbmcJCXN0YXJ0PSsiKyAgc2tpcD0rXFxcXFx8XFwiKyAgZW5kPSsiKworc3luIHJlZ2lvbiBzcWxqU3RyaW5nCQlzdGFydD0rJysgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rJysKKworIiBOdW1iZXJzOgorc3luIG1hdGNoIHNxbGpOdW1iZXIJCSItXD1cPFxkKlwuXD1bMC05X11cPiIKKworIiBQcmVQcm9jCitzeW4gbWF0Y2ggc3FsalByZQkJIiNzcWwiCisKKyIgQ29tbWVudHM6CitzeW4gcmVnaW9uIHNxbGpDb21tZW50ICAgIHN0YXJ0PSIvXCoiICBlbmQ9IlwqLyIKK3N5biBtYXRjaCBzcWxDb21tZW50CSItLS4qIgorCitzeW4gc3luYyBjY29tbWVudCBzcWxqQ29tbWVudAorCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc3Fsal9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zcWxqX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kISAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQhIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFRoZSBkZWZhdWx0IG1ldGhvZHMgZm9yIGhpZ2hsaWdodGluZy4gQ2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIuCisgIEhpTGluayBzcWxqQ29tbWVudAlDb21tZW50CisgIEhpTGluayBzcWxqS2V5d29yZAlzcWxqU3BlY2lhbAorICBIaUxpbmsgc3Fsak51bWJlcglOdW1iZXIKKyAgSGlMaW5rIHNxbGpPcGVyYXRvcglzcWxqU3RhdGVtZW50CisgIEhpTGluayBzcWxqU3BlY2lhbAlTcGVjaWFsCisgIEhpTGluayBzcWxqU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgc3FsalN0cmluZwlTdHJpbmcKKyAgSGlMaW5rIHNxbGpUeXBlCVR5cGUKKyAgSGlMaW5rIHNxbGpQcmUJUHJlUHJvYworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic3FsaiIKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc3FyLnZpbSBiL3J1bnRpbWUvc3ludGF4L3Nxci52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0OTQ0NwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3Nxci52aW0KQEAgLTAsMCArMSwyOTUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiICAgIExhbmd1YWdlOiBTdHJ1Y3R1cmVkIFF1ZXJ5IFJlcG9ydCBXcml0ZXIgKFNRUikKKyIgIE1haW50YWluZXI6IE5hdGhhbiBTdHJhdHRvbiBUcmVhZHdheSAobmF0aGFuc3QgYXQgb250a28gZG90IGNvbSkKKyIJICBVUkw6IGh0dHA6Ly93d3cub250a28uY29tL3Nxci8jZWRpdG9yX2NvbmZpZ19maWxlcworIgorIiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyIgICAgIDIwMDItQXByLTEyOiBVcGRhdGVkIGZvciBTUVIgdjYueAorIiAgICAgMjAwMi1KdWwtMzA6IEFkZGVkIHsgYW5kIH0gdG8gaXNrZXl3b3JkIGRlZmluaXRpb24KKyIgICAgIDIwMDMtT2N0LTE1OiBBbGxvdyAiLiIgaW4gdmFyaWFibGUgbmFtZXMKKyIJCSAgIGhpZ2hsaWdodCBlbnRpcmUgb3BlbiAnLi4uIGxpdGVyYWwgd2hlbiBpdCBjb250YWlucworIgkJICAgICAgIicnIiBpbnNpZGUgaXQgKGUuZy4gIidJIGNhbicndCBzYXkiIGlzIHRyZWF0ZWQKKyIJCSAgICAgIGFzIG9uZSBvcGVuIHN0cmluZywgbm90IG9uZSB0ZXJtaW5hdGVkIGFuZCBvbmUgb3BlbikKKyIJCSAgIHt9IHZhcmlhYmxlcyBjYW4gb2NjdXIgaW5zaWRlIG9mICcuLi4nIGxpdGVyYWxzCisiCisiICBUaGFua3MgdG8gdGhlIHByZXZpb3VzIG1haW50YWluZXIgb2YgdGhpcyBmaWxlLCBKZWZmIExhbnphcm90dGE6CisiICAgIGh0dHA6Ly9sYW56YXJvdHRhLnRyaXBvZC5jb20vdmltLmh0bWwKKyIgICAgamVmZmxhbnphcm90dGEgYXQgeWFob28gZG90IGNvbQorCisiIEZvciB2ZXJzaW9uIDUueCwgY2xlYXIgYWxsIHN5bnRheCBpdGVtcy4KKyIgRm9yIHZlcnNpb24gNi54LCBxdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQuCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgdmVyc2lvbiA+PSA2MDAKKyAgc2V0bG9jYWwgaXNrZXl3b3JkPUAsNDgtNTcsXywtLCMsJCx7LH0KK2Vsc2UKKyAgc2V0IGlza2V5d29yZD1ALDQ4LTU3LF8sLSwjLCQseyx9CitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBCRUdJTiBHRU5FUkFURUQgU0VDVElPTiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisiIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV92aW1fc3ludGF4LnNxciBhdCAyMDAyLzA0LzExIDEzOjA0CisiIChiYXNlZCBvbiB0aGUgVWx0cmFFZGl0IHN5bnRheCBmaWxlIGZvciBTUVIgNi4xLjQKKyIgZm91bmQgYXQgaHR0cDovL3d3dy5vbnRrby5jb20vc3FyLyNlZGl0b3JfY29uZmlnX2ZpbGVzICkKKworc3luIGtleXdvcmQgICAgc3FyU2VjdGlvbiAgICAgYmVnaW4tZm9vdGluZyBiZWdpbi1oZWFkaW5nIGJlZ2luLXByb2NlZHVyZQorc3luIGtleXdvcmQgICAgc3FyU2VjdGlvbiAgICAgYmVnaW4tcHJvZ3JhbSBiZWdpbi1yZXBvcnQgYmVnaW4tc2V0dXAKK3N5biBrZXl3b3JkICAgIHNxclNlY3Rpb24gICAgIGVuZC1mb290aW5nIGVuZC1oZWFkaW5nIGVuZC1wcm9jZWR1cmUKK3N5biBrZXl3b3JkICAgIHNxclNlY3Rpb24gICAgIGVuZC1wcm9ncmFtIGVuZC1yZXBvcnQgZW5kLXNldHVwCisKK3N5biBrZXl3b3JkICAgIHNxclBhcmFncmFwaCAgIGFsdGVyLWNvbG9yLW1hcCBhbHRlci1jb25lY3Rpb24KK3N5biBrZXl3b3JkICAgIHNxclBhcmFncmFwaCAgIGFsdGVyLWxvY2FsZSBhbHRlci1wcmludGVyIGFsdGVyLXJlcG9ydAorc3luIGtleXdvcmQgICAgc3FyUGFyYWdyYXBoICAgYmVnaW4tZG9jdW1lbnQgYmVnaW4tZXhlY3V0ZSBiZWdpbi1zZWxlY3QKK3N5biBrZXl3b3JkICAgIHNxclBhcmFncmFwaCAgIGJlZ2luLXNxbCBkZWNsYXJlLWNoYXJ0IGRlY2xhcmUtaW1hZ2UKK3N5biBrZXl3b3JkICAgIHNxclBhcmFncmFwaCAgIGRlY2xhcmUtY29sb3ItbWFwIGRlY2xhcmUtY29uZWN0aW9uCitzeW4ga2V5d29yZCAgICBzcXJQYXJhZ3JhcGggICBkZWNsYXJlLWxheW91dCBkZWNsYXJlLXByaW50ZXIKK3N5biBrZXl3b3JkICAgIHNxclBhcmFncmFwaCAgIGRlY2xhcmUtcmVwb3J0IGRlY2xhcmUtcHJvY2VkdXJlCitzeW4ga2V5d29yZCAgICBzcXJQYXJhZ3JhcGggICBkZWNsYXJlLXRvYyBkZWNsYXJlLXZhcmlhYmxlIGVuZC1kZWNsYXJlCitzeW4ga2V5d29yZCAgICBzcXJQYXJhZ3JhcGggICBlbmQtZG9jdW1lbnQgZW5kLXNlbGVjdCBleGl0LXNlbGVjdCBlbmQtc3FsCitzeW4ga2V5d29yZCAgICBzcXJQYXJhZ3JhcGggICBsb2FkLWxvb2t1cAorCitzeW4ga2V5d29yZCAgICBzcXJSZXNlcnZlZCAgICAjY3VycmVudC1jb2x1bW4gI2N1cnJlbnQtZGF0ZSAjY3VycmVudC1saW5lCitzeW4ga2V5d29yZCAgICBzcXJSZXNlcnZlZCAgICAjZW5kLWZpbGUgI3BhZ2UtY291bnQgI3JldHVybi1zdGF0dXMKK3N5biBrZXl3b3JkICAgIHNxclJlc2VydmVkICAgICNzcWwtY291bnQgI3NxbC1zdGF0dXMgI3Nxci1tYXgtY29sdW1ucworc3luIGtleXdvcmQgICAgc3FyUmVzZXJ2ZWQgICAgI3Nxci1tYXgtbGluZXMgI3Nxci1waWQgI3Nxci10b2MtbGV2ZWwKK3N5biBrZXl3b3JkICAgIHNxclJlc2VydmVkICAgICNzcXItdG9jLXBhZ2UgJHNxci1kYXRhYmFzZSB7c3FyLWRhdGFiYXNlfQorc3luIGtleXdvcmQgICAgc3FyUmVzZXJ2ZWQgICAgJHNxci1kYmNzIHtzcXItZGJjc30gJHNxci1lbmNvZGluZworc3luIGtleXdvcmQgICAgc3FyUmVzZXJ2ZWQgICAge3Nxci1lbmNvZGluZ30gJHNxci1lbmNvZGluZy1jb25zb2xlCitzeW4ga2V5d29yZCAgICBzcXJSZXNlcnZlZCAgICB7c3FyLWVuY29kaW5nLWNvbnNvbGV9CitzeW4ga2V5d29yZCAgICBzcXJSZXNlcnZlZCAgICAkc3FyLWVuY29kaW5nLWRhdGFiYXNlCitzeW4ga2V5d29yZCAgICBzcXJSZXNlcnZlZCAgICB7c3FyLWVuY29kaW5nLWRhdGFiYXNlfQorc3luIGtleXdvcmQgICAgc3FyUmVzZXJ2ZWQgICAgJHNxci1lbmNvZGluZy1maWxlLWlucHV0CitzeW4ga2V5d29yZCAgICBzcXJSZXNlcnZlZCAgICB7c3FyLWVuY29kaW5nLWZpbGUtaW5wdXR9CitzeW4ga2V5d29yZCAgICBzcXJSZXNlcnZlZCAgICAkc3FyLWVuY29kaW5nLWZpbGUtb3V0cHV0CitzeW4ga2V5d29yZCAgICBzcXJSZXNlcnZlZCAgICB7c3FyLWVuY29kaW5nLWZpbGUtb3V0cHV0fQorc3luIGtleXdvcmQgICAgc3FyUmVzZXJ2ZWQgICAgJHNxci1lbmNvZGluZy1yZXBvcnQtaW5wdXQKK3N5biBrZXl3b3JkICAgIHNxclJlc2VydmVkICAgIHtzcXItZW5jb2RpbmctcmVwb3J0LWlucHV0fQorc3luIGtleXdvcmQgICAgc3FyUmVzZXJ2ZWQgICAgJHNxci1lbmNvZGluZy1yZXBvcnQtb3V0cHV0CitzeW4ga2V5d29yZCAgICBzcXJSZXNlcnZlZCAgICB7c3FyLWVuY29kaW5nLXJlcG9ydC1vdXRwdXR9CitzeW4ga2V5d29yZCAgICBzcXJSZXNlcnZlZCAgICAkc3FyLWVuY29kaW5nLXNvdXJjZSB7c3FyLWVuY29kaW5nLXNvdXJjZX0KK3N5biBrZXl3b3JkICAgIHNxclJlc2VydmVkICAgICRzcWwtZXJyb3IgJHNxci1ob3N0bmFtZSB7c3FyLWhvc3RuYW1lfQorc3luIGtleXdvcmQgICAgc3FyUmVzZXJ2ZWQgICAgJHNxci1sb2NhbGUgJHNxci1wbGF0Zm9ybSB7c3FyLXBsYXRmb3JtfQorc3luIGtleXdvcmQgICAgc3FyUmVzZXJ2ZWQgICAgJHNxci1wcm9ncmFtICRzcXItcmVwb3J0ICRzcXItdG9jLXRleHQKK3N5biBrZXl3b3JkICAgIHNxclJlc2VydmVkICAgICRzcXItdmVyICR1c2VybmFtZQorCitzeW4ga2V5d29yZCAgICBzcXJQcmVQcm9jICAgICAjZGVmaW5lICNlbHNlICNlbmQtaWYgI2VuZGlmICNpZiAjaWZkZWYKK3N5biBrZXl3b3JkICAgIHNxclByZVByb2MgICAgICNpZm5kZWYgI2luY2x1ZGUKKworc3luIGtleXdvcmQgICAgc3FyQ29tbWFuZCAgICAgYWRkIGFycmF5LWFkZCBhcnJheS1kaXZpZGUgYXJyYXktbXVsdGlwbHkKK3N5biBrZXl3b3JkICAgIHNxckNvbW1hbmQgICAgIGFycmF5LXN1YnRyYWN0IGFzayBicmVhayBjYWxsIGNsZWFyLWFycmF5CitzeW4ga2V5d29yZCAgICBzcXJDb21tYW5kICAgICBjbG9zZSBjb2x1bW5zIGNvbW1pdCBjb25jYXQgY29ubmVjdAorc3luIGtleXdvcmQgICAgc3FyQ29tbWFuZCAgICAgY3JlYXRlLWFycmF5IGNyZWF0ZS1jb2xvci1wYWxldHRlIGRhdGUtdGltZQorc3luIGtleXdvcmQgICAgc3FyQ29tbWFuZCAgICAgZGlzcGxheSBkaXZpZGUgZG8gZG9sbGFyLXN5bWJvbCBlbHNlIGVuY29kZQorc3luIGtleXdvcmQgICAgc3FyQ29tbWFuZCAgICAgZW5kLWV2YWx1YXRlIGVuZC1pZiBlbmQtd2hpbGUgZXZhbHVhdGUKK3N5biBrZXl3b3JkICAgIHNxckNvbW1hbmQgICAgIGV4ZWN1dGUgZXh0cmFjdCBmaW5kIGdldCBnZXQtY29sb3IgZ290bworc3luIGtleXdvcmQgICAgc3FyQ29tbWFuZCAgICAgZ3JhcGhpYyBpZiBpbnB1dCBsYXN0LXBhZ2UgbGV0IGxvb2t1cAorc3luIGtleXdvcmQgICAgc3FyQ29tbWFuZCAgICAgbG93ZXJjYXNlIG1idG9zYnMgbW9uZXktc3ltYm9sIG1vdmUKK3N5biBrZXl3b3JkICAgIHNxckNvbW1hbmQgICAgIG11bHRpcGx5IG5ldy1wYWdlIG5ldy1yZXBvcnQgbmV4dC1jb2x1bW4KK3N5biBrZXl3b3JkICAgIHNxckNvbW1hbmQgICAgIG5leHQtbGlzdGluZyBuby1mb3JtZmVlZCBvcGVuIHBhZ2UtbnVtYmVyCitzeW4ga2V5d29yZCAgICBzcXJDb21tYW5kICAgICBwYWdlLXNpemUgcG9zaXRpb24gcHJpbnQgcHJpbnQtYmFyLWNvZGUKK3N5biBrZXl3b3JkICAgIHNxckNvbW1hbmQgICAgIHByaW50LWNoYXJ0IHByaW50LWRpcmVjdCBwcmludC1pbWFnZQorc3luIGtleXdvcmQgICAgc3FyQ29tbWFuZCAgICAgcHJpbnRlci1kZWluaXQgcHJpbnRlci1pbml0IHB1dCByZWFkCitzeW4ga2V5d29yZCAgICBzcXJDb21tYW5kICAgICByb2xsYmFjayBzZWN1cml0eSBzZXQtY29sb3Igc2V0LWRlbGF5LXByaW50CitzeW4ga2V5d29yZCAgICBzcXJDb21tYW5kICAgICBzZXQtZ2VuZXJhdGlvbnMgc2V0LWxldmVscyBzZXQtbWVtYmVycworc3luIGtleXdvcmQgICAgc3FyQ29tbWFuZCAgICAgc2J0b21icyBzaG93IHN0b3Agc3RyaW5nIHN1YnRyYWN0IHRvYy1lbnRyeQorc3luIGtleXdvcmQgICAgc3FyQ29tbWFuZCAgICAgdW5zdHJpbmcgdXBwZXJjYXNlIHVzZSB1c2UtY29sdW1uCitzeW4ga2V5d29yZCAgICBzcXJDb21tYW5kICAgICB1c2UtcHJpbnRlci10eXBlIHVzZS1wcm9jZWR1cmUgdXNlLXJlcG9ydAorc3luIGtleXdvcmQgICAgc3FyQ29tbWFuZCAgICAgd2hpbGUgd3JpdGUKKworc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgM2QtZWZmZWN0cyBhZnRlciBhZnRlci1ib2xkIGFmdGVyLXBhZ2UKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIGFmdGVyLXJlcG9ydCBhZnRlci10b2MgYW5kIGFzIGF0LWVuZCBiZWZvcmUKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIGJhY2tncm91bmQgYmF0Y2gtbW9kZSBiZWVwIGJlZm9yZS1ib2xkCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBiZWZvcmUtcGFnZSBiZWZvcmUtcmVwb3J0IGJlZm9yZS10b2MgYmxpbmsKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIGJvbGQgYm9yZGVyIGJvdHRvbS1tYXJnaW4gYm94IGJyZWFrIGJ5CitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBjYXB0aW9uIGNlbnRlciBjaGFyIGNoYXItc2l6ZSBjaGFyLXdpZHRoCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBjaGFycy1pbmNoIGNoYXJ0LXNpemUgY2hlY2tzdW0gY2wKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIGNsZWFyLWxpbmUgY2xlYXItc2NyZWVuIGNvbG9yIGNvbG9yLXBhbGV0dGUKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIGNzIGNvbG9yXyBkYXRhLWFycmF5CitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBkYXRhLWFycmF5LWNvbHVtbi1jb3VudAorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgZGF0YS1hcnJheS1jb2x1bW4tbGFiZWxzCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBkYXRhLWFycmF5LXJvdy1jb3VudCBkYXRhLWxhYmVscyBkYXRlCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBkYXRlLWVkaXQtbWFzayBkYXRlLXNlcGVyYXRvcgorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgZGF5LW9mLXdlZWstY2FzZSBkYXktb2Ytd2Vlay1mdWxsCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBkYXktb2Ytd2Vlay1zaG9ydCBkZWNpbWFsIGRlY2ltYWwtc2VwZXJhdG9yCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBkZWZhdWx0LW51bWVyaWMgZGVsYXkgZGlzdGluY3QgZG90LWxlYWRlcgorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgZWRpdC1vcHRpb24tYWQgZWRpdC1vcHRpb24tYW0KK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIGVkaXQtb3B0aW9uLWJjIGVkaXQtb3B0aW9uLW5hCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBlZGl0LW9wdGlvbi1wbSBlbmNvZGluZyBlbnRyeSBlcmFzZS1wYWdlCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBleHRlbnQgZmllbGQgZmlsbCBmaXhlZCBmaXhlZF9ub2xmIGZsb2F0CitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBmb250IGZvbnQtc3R5bGUgZm9udC10eXBlIGZvb3RpbmcKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIGZvb3Rpbmctc2l6ZSBmb3JlZ3JvdW5kIGZvci1hcHBlbmQKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIGZvci1yZWFkaW5nIGZvci1yZXBvcnRzIGZvci10b2NzCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBmb3Itd3JpdGluZyBmb3JtYXQgZm9ybWZlZWQgZnJvbSBnb3RvLXRvcAorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgZ3JvdXAgaGF2aW5nIGhlYWRpbmcgaGVhZGluZy1zaXplIGhlaWdodAorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgaG9yei1saW5lIGltYWdlLXNpemUgaW4gaW5kZW50YXRpb24KK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIGluaXQtc3RyaW5nIGlucHV0LWRhdGUtZWRpdC1tYXNrIGluc2VydAorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgaW50ZWdlciBpbnRvIGl0ZW0tY29sb3IgaXRlbS1zaXplIGtleQorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgbGF5b3V0IGxlZnQtbWFyZ2luIGxlZ2VuZCBsZWdlbmQtcGxhY2VtZW50CitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBsZWdlbmQtcHJlc2VudGF0aW9uIGxlZ2VuZC10aXRsZSBsZXZlbAorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgbGluZS1oZWlnaHQgbGluZS1zaXplIGxpbmUtd2lkdGggbGluZXMtaW5jaAorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgbG9jYWwgbG9jYWxlIGxvb3BzIG1heC1jb2x1bW5zIG1heC1saW5lcworc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgbWF4bGVuIG1vbmV5IG1vbmV5LWVkaXQtbWFzayBtb25leS1zaWduCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBtb25leS1zaWduLWxvY2F0aW9uIG1vbnRocy1jYXNlIG1vbnRocy1mdWxsCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBtb250aHMtc2hvcnQgbmFtZSBuZWVkIG5ld2xpbmUgbmV3cGFnZQorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgbm8tYWR2YW5jZSBub2xmIG5vbGluZSBub3Byb21wdCBub3JtYWwgbm90CitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBub3dhaXQgbnVtYmVyIG51bWJlci1lZGl0LW1hc2sgb24tYnJlYWsKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIG9uLWVycm9yIG9yIG9yZGVyIG9yaWVudGF0aW9uIHBhZ2UtZGVwdGgKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIHBhcGVyLXNpemUgcGllLXNlZ21lbnQtZXhwbG9kZQorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgcGllLXNlZ21lbnQtcGVyY2VudC1kaXNwbGF5CitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBwaWUtc2VnbWVudC1xdWFudGl0eS1kaXNwbGF5IHBpdGNoCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBwb2ludC1tYXJrZXJzIHBvaW50LXNpemUgcHJpbnRlcgorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgcHJpbnRlci10eXBlIHF1aWV0IHJlY29yZCByZXNldC1zdHJpbmcKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIHJldHVybl92YWx1ZSByZXZlcnNlIHJpZ2h0LW1hcmdpbiByb3dzIHNhdmUKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIHNlbGVjdCBzaXplIHNraXAgc2tpcGxpbmVzIHNvcnQgc291cmNlCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICBzcXItZGF0YWJhc2Ugc3FyLXBsYXRmb3JtIHN0YXJ0dXAtZmlsZQorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgc3RhdHVzIHN0b3Agc3ViLXRpdGxlIHN5bWJvbC1zZXQgc3lzdGVtCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICB0YWJsZSB0ZXh0IHRob3VzYW5kLXNlcGVyYXRvcgorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgdGltZS1zZXBlcmF0b3IgdGltZXMgdGl0bGUgdG8gdG9jCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICB0b3AtbWFyZ2luIHR5cGUgdW5kZXJsaW5lIHVwZGF0ZSB1c2luZworc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgdmFsdWUgdmFyeSB2ZXJ0LWxpbmUgd2FpdCB3YXJuIHdoZW4KK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIHdoZW4tb3RoZXIgd2hlcmUgd2l0aCB4LWF4aXMtZ3JpZAorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgeC1heGlzLWxhYmVsIHgtYXhpcy1tYWpvci1pbmNyZW1lbnQKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIHgtYXhpcy1tYWpvci10aWNrLW1hcmtzIHgtYXhpcy1tYXgtdmFsdWUKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIHgtYXhpcy1taW4tdmFsdWUgeC1heGlzLW1pbm9yLWluY3JlbWVudAorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgeC1heGlzLW1pbm9yLXRpY2stbWFya3MgeC1heGlzLXJvdGF0ZQorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgeC1heGlzLXNjYWxlIHgtYXhpcy10aWNrLW1hcmstcGxhY2VtZW50IHhvcgorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgeS1heGlzLWdyaWQgeS1heGlzLWxhYmVsCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICB5LWF4aXMtbWFqb3ItaW5jcmVtZW50CitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICB5LWF4aXMtbWFqb3ItdGljay1tYXJrcyB5LWF4aXMtbWF4LXZhbHVlCitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICB5LWF4aXMtbWluLXZhbHVlIHktYXhpcy1taW5vci1pbmNyZW1lbnQKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIHktYXhpcy1taW5vci10aWNrLW1hcmtzIHktYXhpcy1zY2FsZQorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgeS1heGlzLXRpY2stbWFyay1wbGFjZW1lbnQgeTItdHlwZQorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgeTItZGF0YS1hcnJheSB5Mi1kYXRhLWFycmF5LXJvdy1jb3VudAorc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgeTItZGF0YS1hcnJheS1jb2x1bW4tY291bnQKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIHkyLWRhdGEtYXJyYXktY29sdW1uLWxhYmVscworc3luIGtleXdvcmQgICAgc3FyUGFyYW0gICAgICAgeTItYXhpcy1jb2xvci1wYWxldHRlIHkyLWF4aXMtbGFiZWwKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIHkyLWF4aXMtbWFqb3ItaW5jcmVtZW50CitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICB5Mi1heGlzLW1ham9yLXRpY2stbWFya3MgeTItYXhpcy1tYXgtdmFsdWUKK3N5biBrZXl3b3JkICAgIHNxclBhcmFtICAgICAgIHkyLWF4aXMtbWluLXZhbHVlIHkyLWF4aXMtbWlub3ItaW5jcmVtZW50CitzeW4ga2V5d29yZCAgICBzcXJQYXJhbSAgICAgICB5Mi1heGlzLW1pbm9yLXRpY2stbWFya3MgeTItYXhpcy1zY2FsZQorCitzeW4ga2V5d29yZCAgICBzcXJGdW5jdGlvbiAgICBhYnMgYWNvcyBhc2luIGF0YW4gYXJyYXkgYXNjaWkgYXNjaWljIGNlaWwKK3N5biBrZXl3b3JkICAgIHNxckZ1bmN0aW9uICAgIGNvcyBjb3NoIGNociBjb25kIGRlZyBkZWxldGUgZGF0ZWFkZAorc3luIGtleXdvcmQgICAgc3FyRnVuY3Rpb24gICAgZGF0ZWRpZmYgZGF0ZW5vdyBkYXRldG9zdHIgZTEwIGV4cCBlZGl0CitzeW4ga2V5d29yZCAgICBzcXJGdW5jdGlvbiAgICBleGlzdHMgZmxvb3IgZ2V0ZW52IGluc3RyIGluc3RyYiBpc2JsYW5rCitzeW4ga2V5d29yZCAgICBzcXJGdW5jdGlvbiAgICBpc251bGwgbG9nIGxvZzEwIGxlbmd0aCBsZW5ndGhiIGxlbmd0aHAKK3N5biBrZXl3b3JkICAgIHNxckZ1bmN0aW9uICAgIGxlbmd0aHQgbG93ZXIgbHBhZCBsdHJpbSBtb2QgbnZsIHBvd2VyIHJhZAorc3luIGtleXdvcmQgICAgc3FyRnVuY3Rpb24gICAgcm91bmQgcmFuZ2UgcmVwbGFjZSByb21hbiBycGFkIHJ0cmltIHJlbmFtZQorc3luIGtleXdvcmQgICAgc3FyRnVuY3Rpb24gICAgc2lnbiBzaW4gc2luaCBzcXJ0IHN1YnN0ciBzdWJzdHJiIHN1YnN0cnAKK3N5biBrZXl3b3JkICAgIHNxckZ1bmN0aW9uICAgIHN1YnN0cnQgc3RydG9kYXRlIHRhbiB0YW5oIHRydW5jIHRvX2NoYXIKK3N5biBrZXl3b3JkICAgIHNxckZ1bmN0aW9uICAgIHRvX211bHRpX2J5dGUgdG9fbnVtYmVyIHRvX3NpbmdsZV9ieXRlCitzeW4ga2V5d29yZCAgICBzcXJGdW5jdGlvbiAgICB0cmFuc2Zvcm0gdHJhbnNsYXRlIHVuaWNvZGUgdXBwZXIgd3JhcGRlcHRoCisKKyIgRU5EIEdFTkVSQVRFRCBTRUNUSU9OID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIiBWYXJpYWJsZXMKK3N5biBtYXRjaAkgIHNxclZhcmlhYmxlCS9cKFwkXHwjXHwmXClcKFxrXHxcLlwpKi8KKworCisiIERlYnVnIGNvbXBpbGVyIGRpcmVjdGl2ZXMKK3N5biBtYXRjaAkgIHNxclByZVByb2MJL1xzKiNkZWJ1Z1xhXD1cKFxzXHwkXCkvCitzeW4gbWF0Y2gJICBzcXJTdWJzdFZhcgkve1xrKn0vCisKKworIiBTdHJpbmdzCisiIE5vdGU6IGlmIGFuIHVuZG91YmxlZCAhIGlzIGZvdW5kLCB0aGlzIGlzIG5vdCBhIHZhbGlkIHN0cmluZworIiAoU1FSIHdpbGwgdHJlYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBhcyBhIGNvbW1lbnQpCitzeW4gbWF0Y2gJICBzcXJTdHJpbmcJLydcKCEhXHxbXiEnXVwpKicvICAgICAgY29udGFpbnM9c3FyU3Vic3RWYXIKK3N5biBtYXRjaAkgIHNxclN0ck9wZW4JLydcKCEhXHwnJ1x8W14hJ11cKSokLworIiBJZiB3ZSBmaW5kIGEgJyBmb2xsb3dlZCBieSBhbiB1bm1hdGNoZWQgISBiZWZvcmUgYSBtYXRjaGluZyAnLAorIiBmbGFnIHRoZSBlcnJvci4KK3N5biBtYXRjaAkgIHNxckVycm9yCS8nXCghIVx8W14nIV1cKSohW14hXS9tZT1lLTEKK3N5biBtYXRjaAkgIHNxckVycm9yCS8nXCghIVx8W14nIV1cKSohJC8KKworIiBOdW1iZXJzOgorc3luIG1hdGNoCSAgc3FyTnVtYmVyCS8tXD1cPFxkKlwuXD1bMC05X11cPi8KKworCisKKyIgQ29tbWVudHM6CisiIEhhbmRsZSBjb21tZW50cyB0aGF0IHN0YXJ0IHdpdGggIiE9IiBzcGVjaWFsbHk7IHRoZXkgYXJlIG9ubHkgdmFsaWQKKyIgaW4gdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgc291cmNlIGxpbmUuICBBbHNvLCAiISEiIGlzIG9ubHkgdHJlYXRlZAorIiBhcyBhIHN0YXJ0LWNvbW1lbnQgaWYgdGhlcmUgaXMgb25seSB3aGl0ZXNwYWNlIGFoZWFkIG9mIGl0IG9uIHRoZSBsaW5lLgorCitzeW4ga2V5d29yZAlzcXJUb2RvCQlUT0RPIEZJWE1FIFhYWCBERUJVRyBOT1RFICMjIworc3luIG1hdGNoCXNxclRvZG8JCS8/Pz8vCisKK2lmIHZlcnNpb24gPj0gNjAwCisgICIgU2VlIGFsc28gdGhlIHNxclN0cmluZyBzZWN0aW9uIGFib3ZlIGZvciBoYW5kbGluZyBvZiAhIGNoYXJhY3RlcnMKKyAgIiBpbnNpZGUgb2Ygc3RyaW5ncy4gIChUaG9zZSBwYXR0ZXJucyBvdmVycmlkZSB0aGUgb25lcyBiZWxvdy4pCisgIHN5biBtYXRjaAlzcXJDb21tZW50CS8hXEA8ISFcKFteIT1dLipcfCRcKS8gY29udGFpbnM9c3FyVG9kbworICAiCQkJCSAgdGhlICEgY2FuJ3QgYmUgcHJlY2VlZGVkIGJ5IGFub3RoZXIgISwKKyAgIgkJCQkgIGFuZCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZQorICAiCQkJCSAgY2hhcmFjdGVyIG90aGVyIHRoYW4gISBvciA9LCBvciBpbW1lZGlhdGVseQorICAiCQkJCSAgYnkgdGhlIGVuZC1vZi1saW5lCisgIHN5biBtYXRjaAlzcXJDb21tZW50CS9eIT0uKi8gY29udGFpbnM9c3FyVG9kbworICBzeW4gbWF0Y2gJc3FyQ29tbWVudAkvXiEhLiovIGNvbnRhaW5zPXNxclRvZG8KKyAgc3luIG1hdGNoCXNxckVycm9yCS9eXHNcK1x6cyE9LiovCisgICIJCQkJICBpdCdzIGFuIGVycm9yIHRvIGhhdmUgIiE9IiBwcmVjZWVkZWQgYnkKKyAgIgkJCQkgIGp1c3Qgd2hpdGVzcGFjZSBvbiB0aGUgbGluZSAoIiE9IgorICAiCQkJCSAgcHJlY2VlZGVkIGJ5IG5vbi13aGl0ZXNwYWNlIGlzIHRyZWF0ZWQKKyAgIgkJCQkgIGFzIG5laXRoZXIgYSBjb21tZW50IG5vciBhbiBlcnJvciwgc2luY2UKKyAgIgkJCQkgIGl0IGlzIG9mdGVuIGNvcnJlY3QsIGkuZS4KKyAgIgkJCQkgICAgaWYgI2NvdW50ICE9IDcKKyAgc3luIG1hdGNoCXNxckVycm9yCS8uXCtcenMhIS4qLworICAiCQkJCSAgYSAiISEiIGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICIJCQkJICB0aGUgbGluZSBpcyBhbHdheXMgYW4gZXJyb3IKK2Vsc2UgIkZvciB2ZXJzaW9ucyBiZWZvcmUgNi4wLCBzYW1lIGlkZWEgYXMgYWJvdmUgYnV0IHdlIGFyZSBsaW1pdGVkCisgICAgICJ0byBzaW1wbGUgcGF0dGVybnMgb25seS4gIEFsc28sIHRoZSBzcXJTdHJpbmcgcGF0dGVybnMgYWJvdmUKKyAgICAgImRvbid0IHNlZW0gdG8gdGFrZSBwcmVjZWRlbmNlIGluIHY1IGFzIHRoZXkgZG8gaW4gdjYsIHNvCisgICAgICJ3ZSBzcGxpdCB0aGUgbGFzdCBydWxlIHRvIGlnbm9yZSBjb21tZW50cyBmb3VuZCBpbnNpZGUgb2YKKyAgICAgInN0cmluZyBsaXRlcmFscy4KKyAgc3luIG1hdGNoCXNxckNvbW1lbnQJLyFcKFteIT1dLipcfCRcKS8gY29udGFpbnM9c3FyVG9kbworICBzeW4gbWF0Y2gJc3FyQ29tbWVudAkvXiE9LiovIGNvbnRhaW5zPXNxclRvZG8KKyAgc3luIG1hdGNoCXNxckNvbW1lbnQJL14hIS4qLyBjb250YWlucz1zcXJUb2RvCisgIHN5biBtYXRjaAlzcXJFcnJvcgkvXlxzXCshPS4qLworICBzeW4gbWF0Y2gJc3FyRXJyb3IJL15bXichXVwrISEvCisgICIJCQkJZmxhZyAhISBvbiBsaW5lcyB0aGF0IGRvbid0IGhhdmUgISBvciAnCisgIHN5biBtYXRjaAlzcXJFcnJvcgkvXlwoW14hJ10qJ1teJ10qJ1teISddKlwpXCshIS8KKyAgIgkJCQlmbGFnICEhIGZvdW5kIGFmdGVyIG1hdGNoZWQgJyAnIGNoYXJzCisgICIJCQkJKHRoYXQgYXJlbid0IGFsc28gY29tbWVudGVkKQorZW5kaWYKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllciwgb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkuCisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXIsIG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuO3QgaGF2ZSBoaWdodGxpZ2h0aW5nIHlldC4KK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zcXJfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc3FyX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHNxclNlY3Rpb24gU3RhdGVtZW50CisgIEhpTGluayBzcXJQYXJhZ3JhcGggU3RhdGVtZW50CisgIEhpTGluayBzcXJSZXNlcnZlZCBTdGF0ZW1lbnQKKyAgSGlMaW5rIHNxclBhcmFtZXRlciBTdGF0ZW1lbnQKKyAgSGlMaW5rIHNxclByZVByb2MgUHJlUHJvYworICBIaUxpbmsgc3FyU3Vic3RWYXIgUHJlUHJvYworICBIaUxpbmsgc3FyQ29tbWFuZCBTdGF0ZW1lbnQKKyAgSGlMaW5rIHNxclBhcmFtIFR5cGUKKyAgSGlMaW5rIHNxckZ1bmN0aW9uIFNwZWNpYWwKKworICBIaUxpbmsgc3FyU3RyaW5nIFN0cmluZworICBIaUxpbmsgc3FyU3RyT3BlbiBUb2RvCisgIEhpTGluayBzcXJOdW1iZXIgTnVtYmVyCisgIEhpTGluayBzcXJWYXJpYWJsZSBJZGVudGlmaWVyCisKKyAgSGlMaW5rIHNxckNvbW1lbnQgQ29tbWVudAorICBIaUxpbmsgc3FyVG9kbyBUb2RvCisgIEhpTGluayBzcXJFcnJvciBFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzcXIiCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NxdWlkLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NxdWlkLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTRiZGNhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc3F1aWQudmltCkBAIC0wLDAgKzEsMTQ5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJU3F1aWQgY29uZmlnIGZpbGUKKyIgTWFpbnRhaW5lcjoJS2xhdXMgTXV0aCA8a2xhdXNAaGFtcGZ0LmRlPgorIiBMYXN0IENoYW5nZToJMjAwNCBGZWIgMDEKKyIgVVJMOgkJaHR0cDovL3d3dy5oYW1wZnQuZGUvdmltL3N5bnRheC9zcXVpZC52aW0KKyIgVGhhbmtzVG86CUlseWEgU2hlciA8aXNvODYwMUBtYWlsLnJ1PgorCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBzcXVpZC5jb25mIHN5bnRheCBzZWVtcyB0byBiZSBjYXNlIGluc2Vuc2l0aXZlCitzeW4gY2FzZSBpZ25vcmUKKworc3luIGtleXdvcmQJc3F1aWRUb2RvCWNvbnRhaW5lZCBUT0RPCitzeW4gbWF0Y2gJc3F1aWRDb21tZW50CSIjLiokIiBjb250YWlucz1zcXVpZFRvZG8sc3F1aWRUYWcKK3N5biBtYXRjaAlzcXVpZFRhZwljb250YWluZWQgIlRBRzogLiokIgorCisiIExvdHMgJiBsb3RzIG9mIEtleXdvcmRzIQorc3luIGtleXdvcmQJc3F1aWRDb25mCWFjbCBhbHdheXNfZGlyZWN0IGFubm91bmNlX2hvc3QKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglhbm5vdW5jZV9wZXJpb2QgYW5ub3VuY2VfcG9ydCBhbm5vdW5jZV90bworc3luIGtleXdvcmQJc3F1aWRDb25mCWFub255bWl6ZV9oZWFkZXJzIGFwcGVuZF9kb21haW4KK3N5biBrZXl3b3JkCXNxdWlkQ29uZglhc193aG9pc19zZXJ2ZXIgYXV0aGVudGljYXRlX2NoaWxkcmVuCitzeW4ga2V5d29yZAlzcXVpZENvbmYJYXV0aGVudGljYXRlX3Byb2dyYW0gYXV0aGVudGljYXRlX3R0bAorc3luIGtleXdvcmQJc3F1aWRDb25mCWJyb2tlbl9wb3N0cyBidWZmZXJlZF9sb2dzIGNhY2hlX2FjY2Vzc19sb2cKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgljYWNoZV9hbm5vdW5jZSBjYWNoZV9kaXIgY2FjaGVfZG5zX3Byb2dyYW0KK3N5biBrZXl3b3JkCXNxdWlkQ29uZgljYWNoZV9lZmZlY3RpdmVfZ3JvdXAgY2FjaGVfZWZmZWN0aXZlX3VzZXIKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgljYWNoZV9ob3N0IGNhY2hlX2hvc3RfYWNsIGNhY2hlX2hvc3RfZG9tYWluCitzeW4ga2V5d29yZAlzcXVpZENvbmYJY2FjaGVfbG9nIGNhY2hlX21lbSBjYWNoZV9tZW1faGlnaAorc3luIGtleXdvcmQJc3F1aWRDb25mCWNhY2hlX21lbV9sb3cgY2FjaGVfbWdyIGNhY2hlbWdyX3Bhc3N3ZAorc3luIGtleXdvcmQJc3F1aWRDb25mCWNhY2hlX3BlZXIgY2FjaGVfc3RvcGxpc3QKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgljYWNoZV9zdG9wbGlzdF9wYXR0ZXJuIGNhY2hlX3N0b3JlX2xvZworc3luIGtleXdvcmQJc3F1aWRDb25mCWNhY2hlX3N3YXAgY2FjaGVfc3dhcF9oaWdoIGNhY2hlX3N3YXBfbG9nCitzeW4ga2V5d29yZAlzcXVpZENvbmYJY2FjaGVfc3dhcF9sb3cgY2xpZW50X2RiIGNsaWVudF9saWZldGltZQorc3luIGtleXdvcmQJc3F1aWRDb25mCWNsaWVudF9uZXRtYXNrIGNvbm5lY3RfdGltZW91dCBjb3JlZHVtcF9kaXIKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglkZWFkX3BlZXJfdGltZW91dCBkZWJ1Z19vcHRpb25zIGRlbGF5X2FjY2Vzcworc3luIGtleXdvcmQJc3F1aWRDb25mCWRlbGF5X2NsYXNzIGRlbGF5X2luaXRpYWxfYnVja2V0X2xldmVsCitzeW4ga2V5d29yZAlzcXVpZENvbmYJZGVsYXlfcGFyYW1ldGVycyBkZWxheV9wb29scyBkbnNfY2hpbGRyZW4KK3N5biBrZXl3b3JkCXNxdWlkQ29uZglkbnNfZGVmbmFtZXMgZG5zX25hbWVzZXJ2ZXJzIGRuc190ZXN0bmFtZXMKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgllbXVsYXRlX2h0dHBkX2xvZyBlcnJfaHRtbF90ZXh0CitzeW4ga2V5d29yZAlzcXVpZENvbmYJZmFrZV91c2VyX2FnZW50IGZpcmV3YWxsX2lwIGZvcndhcmRlZF9mb3IKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglmb3J3YXJkX3NubXBkX3BvcnQgZnFkbmNhY2hlX3NpemUKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglmdHBnZXRfb3B0aW9ucyBmdHBnZXRfcHJvZ3JhbSBmdHBfbGlzdF93aWR0aAorc3luIGtleXdvcmQJc3F1aWRDb25mCWZ0cF91c2VyIGhhbGZfY2xvc2VkX2NsaWVudHMKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgloaWVyYXJjaHlfc3RvcGxpc3QgaHRjcF9wb3J0IGh0dHBfYWNjZXNzCitzeW4ga2V5d29yZAlzcXVpZENvbmYJaHR0cF9hbm9ueW1pemVyIGh0dHBkX2FjY2VsIGh0dHBkX2FjY2VsX2hvc3QKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglodHRwZF9hY2NlbF9wb3J0IGh0dHBkX2FjY2VsX3VzZXNfaG9zdF9oZWFkZXIKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglodHRwZF9hY2NlbF93aXRoX3Byb3h5IGh0dHBfcG9ydAorc3luIGtleXdvcmQJc3F1aWRDb25mCWh0dHBfcmVwbHlfYWNjZXNzIGljcF9hY2Nlc3MgaWNwX2hpdF9zdGFsZQorc3luIGtleXdvcmQJc3F1aWRDb25mCWljcF9wb3J0IGljcF9xdWVyeV90aW1lb3V0IGlkZW50X2xvb2t1cAorc3luIGtleXdvcmQJc3F1aWRDb25mCWlkZW50X2xvb2t1cF9hY2Nlc3MgaWRlbnRfdGltZW91dAorc3luIGtleXdvcmQJc3F1aWRDb25mCWluY29taW5nX2h0dHBfYXZlcmFnZSBpbmNvbWluZ19pY3BfYXZlcmFnZQorc3luIGtleXdvcmQJc3F1aWRDb25mCWluc2lkZV9maXJld2FsbCBpcGNhY2hlX2hpZ2ggaXBjYWNoZV9sb3cKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglpcGNhY2hlX3NpemUgbG9jYWxfZG9tYWluIGxvY2FsX2lwCitzeW4ga2V5d29yZAlzcXVpZENvbmYJbG9nZmlsZV9yb3RhdGUgbG9nX2ZxZG4gbG9nX2ljcF9xdWVyaWVzCitzeW4ga2V5d29yZAlzcXVpZENvbmYJbG9nX21pbWVfaGRycyBtYXhpbXVtX29iamVjdF9zaXplCitzeW4ga2V5d29yZAlzcXVpZENvbmYJbWF4aW11bV9zaW5nbGVfYWRkcl90cmllcyBtY2FzdF9ncm91cHMKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgltY2FzdF9pY3BfcXVlcnlfdGltZW91dCBtY2FzdF9taXNzX2FkZHIKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgltY2FzdF9taXNzX2VuY29kZV9rZXkgbWNhc3RfbWlzc19wb3J0CitzeW4ga2V5d29yZAlzcXVpZENvbmYJbWVtb3J5X3Bvb2xzIG1pbWVfdGFibGUgbWluX2h0dHBfcG9sbF9jbnQKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgltaW5faWNwX3BvbGxfY250IG1pbmltdW1fZGlyZWN0X2hvcHMKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgltaW5pbXVtX3JldHJ5X3RpbWVvdXQgbWlzc19hY2Nlc3MKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgluZWdhdGl2ZV9kbnNfdHRsIG5lZ2F0aXZlX3R0bAorc3luIGtleXdvcmQJc3F1aWRDb25mCW5laWdoYm9yX3RpbWVvdXQgbmVpZ2hib3JfdHlwZV9kb21haW4KK3N5biBrZXl3b3JkCXNxdWlkQ29uZgluZXRkYl9oaWdoIG5ldGRiX2xvdyBuZXRkYl9waW5nX3BlcmlvZAorc3luIGtleXdvcmQJc3F1aWRDb25mCW5ldGRiX3BpbmdfcmF0ZSBub19jYWNoZSBwYXNzdGhyb3VnaF9wcm94eQorc3luIGtleXdvcmQJc3F1aWRDb25mCXBjb25uX3RpbWVvdXQgcGlkX2ZpbGVuYW1lIHBpbmdlcl9wcm9ncmFtCitzeW4ga2V5d29yZAlzcXVpZENvbmYJcG9zaXRpdmVfZG5zX3R0bCBwcmVmZXJfZGlyZWN0IHByb3h5X2F1dGgKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglwcm94eV9hdXRoX3JlYWxtIHF1ZXJ5X2ljbXAgcXVpY2tfYWJvcnQKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglxdWlja19hYm9ydCBxdWlja19hYm9ydF9tYXggcXVpY2tfYWJvcnRfbWluCitzeW4ga2V5d29yZAlzcXVpZENvbmYJcXVpY2tfYWJvcnRfcGN0IHJhbmdlX29mZnNldF9saW1pdAorc3luIGtleXdvcmQJc3F1aWRDb25mCXJlYWRfdGltZW91dCByZWRpcmVjdF9jaGlsZHJlbgorc3luIGtleXdvcmQJc3F1aWRDb25mCXJlZGlyZWN0X3Byb2dyYW0KK3N5biBrZXl3b3JkCXNxdWlkQ29uZglyZWRpcmVjdF9yZXdyaXRlc19ob3N0X2hlYWRlciByZWZlcmVuY2VfYWdlCitzeW4ga2V5d29yZAlzcXVpZENvbmYJcmVmZXJlbmNlX2FnZSByZWZyZXNoX3BhdHRlcm4gcmVsb2FkX2ludG9faW1zCitzeW4ga2V5d29yZAlzcXVpZENvbmYJcmVxdWVzdF9zaXplIHJlcXVlc3RfdGltZW91dAorc3luIGtleXdvcmQJc3F1aWRDb25mCXNodXRkb3duX2xpZmV0aW1lIHNpbmdsZV9wYXJlbnRfYnlwYXNzCitzeW4ga2V5d29yZAlzcXVpZENvbmYJc2l0ZXNlbGVjdF90aW1lb3V0IHNubXBfYWNjZXNzCitzeW4ga2V5d29yZAlzcXVpZENvbmYJc25tcF9pbmNvbWluZ19hZGRyZXNzIHNubXBfcG9ydCBzb3VyY2VfcGluZworc3luIGtleXdvcmQJc3F1aWRDb25mCXNzbF9wcm94eSBzdG9yZV9hdmdfb2JqZWN0X3NpemUKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglzdG9yZV9vYmplY3RzX3Blcl9idWNrZXQgc3RyaXBfcXVlcnlfdGVybXMKK3N5biBrZXl3b3JkCXNxdWlkQ29uZglzd2FwX2xldmVsMV9kaXJzIHN3YXBfbGV2ZWwyX2RpcnMKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgl0Y3BfaW5jb21pbmdfYWRkcmVzcyB0Y3Bfb3V0Z29pbmdfYWRkcmVzcworc3luIGtleXdvcmQJc3F1aWRDb25mCXRjcF9yZWN2X2J1ZnNpemUgdGVzdF9yZWFjaGFiaWxpdHkKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgl1ZHBfaGl0X29iaiB1ZHBfaGl0X29ial9zaXplCitzeW4ga2V5d29yZAlzcXVpZENvbmYJdWRwX2luY29taW5nX2FkZHJlc3MgdWRwX291dGdvaW5nX2FkZHJlc3MKK3N5biBrZXl3b3JkCXNxdWlkQ29uZgl1bmlxdWVfaG9zdG5hbWUgdW5saW5rZF9wcm9ncmFtCitzeW4ga2V5d29yZAlzcXVpZENvbmYJdXJpX3doaXRlc3BhY2UgdXNlcmFnZW50X2xvZyB2aXNpYmxlX2hvc3RuYW1lCitzeW4ga2V5d29yZAlzcXVpZENvbmYJd2Fpc19yZWxheSB3YWlzX3JlbGF5X2hvc3Qgd2Fpc19yZWxheV9wb3J0CisKK3N5biBrZXl3b3JkCXNxdWlkT3B0CXByb3h5LW9ubHkgd2VpZ2h0IHR0bCBuby1xdWVyeSBkZWZhdWx0CitzeW4ga2V5d29yZAlzcXVpZE9wdAlyb3VuZC1yb2JpbiBtdWx0aWNhc3QtcmVzcG9uZGVyCitzeW4ga2V5d29yZAlzcXVpZE9wdAlvbiBvZmYgYWxsIGRlbnkgYWxsb3cKKworIiBTZWN1cml0eSBBY3Rpb25zIGZvciBjYWNoZW1ncl9wYXNzd2QKK3N5biBrZXl3b3JkCXNxdWlkQWN0aW9uCXNodXRkb3duIGluZm8gcGFyYW1ldGVyIHNlcnZlcl9saXN0CitzeW4ga2V5d29yZAlzcXVpZEFjdGlvbgljbGllbnRfbGlzdAorc3luIG1hdGNoCXNxdWlkQWN0aW9uCSJzdGF0cy9cKG9iamVjdHNcfHZtX29iamVjdHNcfHV0aWxpemF0aW9uXHxpcGNhY2hlXHxmcWRuY2FjaGVcfGRuc1x8cmVkaXJlY3Rvclx8aW9cfHJlcGx5X2hlYWRlcnNcfGZpbGVkZXNjcmlwdG9yc1x8bmV0ZGJcKSIKK3N5biBtYXRjaAlzcXVpZEFjdGlvbgkibG9nXCgvXChzdGF0dXNcfGVuYWJsZVx8ZGlzYWJsZVx8Y2xlYXJcKVwpXD0iCitzeW4gbWF0Y2gJc3F1aWRBY3Rpb24JInNxdWlkXC5jb25mIgorCisiIEtleXdvcmRzIGZvciB0aGUgYWNsLWNvbmZpZworc3luIGtleXdvcmQJc3F1aWRBY2wJdXJsX3JlZ2V4IHVybHBhdGhfcmVnZXggcmVmZXJlcl9yZWdleCBwb3J0IHByb3RvCitzeW4ga2V5d29yZAlzcXVpZEFjbAlyZXFfbWltZV90eXBlIHJlcF9taW1lX3R5cGUKK3N5biBrZXl3b3JkCXNxdWlkQWNsCW1ldGhvZCBicm93c2VyIHVzZXIgc3JjIGRzdAorCitzeW4gbWF0Y2gJc3F1aWROdW1iZXIJIlw8XGRcK1w+Igorc3luIG1hdGNoCXNxdWlkSVAJCSJcPFxkXHsxLDN9XC5cZFx7MSwzfVwuXGRcezEsM31cLlxkXHsxLDN9XD4iCitzeW4gbWF0Y2gJc3F1aWRTdHIJIlwoXlxzKmFjbFxzXCtcU1wrXHNcK1woXFMqX3JlZ2V4XHxyZVtwcV1fbWltZV90eXBlXHxicm93c2VyXHxfZG9tYWluXHx1c2VyXClcK1xzXCtcKVxAPD0uKiIgY29udGFpbnM9c3F1aWRSZWdleE9wdAorc3luIG1hdGNoCXNxdWlkUmVnZXhPcHQJY29udGFpbmVkICJcKF5ccyphY2xcc1wrXFNcK1xzXCtcU1wrXChfcmVnZXhcfF9taW1lX3R5cGVcKVxzXCtcKVxAPD1bLStdaVxzXCsiCisKKyIgQWxsIGNvbmZpZyBpcyBpbiBvbmUgbGluZSwgc28gdGhpcyBoYXMgdG8gYmUgc3VmZmljaWVudAorIiBNYWtlIGl0IGZhc3QgbGlrZSBoZWxsIDopCitzeW4gc3luYyBtaW5saW5lcz0zCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3NxdWlkX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3NxdWlkX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHNxdWlkVG9kbwlUb2RvCisgIEhpTGluayBzcXVpZENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgc3F1aWRUYWcJU3BlY2lhbAorICBIaUxpbmsgc3F1aWRDb25mCUtleXdvcmQKKyAgSGlMaW5rIHNxdWlkT3B0CUNvbnN0YW50CisgIEhpTGluayBzcXVpZEFjdGlvbglTdHJpbmcKKyAgSGlMaW5rIHNxdWlkTnVtYmVyCU51bWJlcgorICBIaUxpbmsgc3F1aWRJUAlOdW1iZXIKKyAgSGlMaW5rIHNxdWlkQWNsCUtleXdvcmQKKyAgSGlMaW5rIHNxdWlkU3RyCVN0cmluZworICBIaUxpbmsgc3F1aWRSZWdleE9wdAlTcGVjaWFsCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInNxdWlkIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc3NoY29uZmlnLnZpbSBiL3J1bnRpbWUvc3ludGF4L3NzaGNvbmZpZy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkYTcyYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NzaGNvbmZpZy52aW0KQEAgLTAsMCArMSw5OSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgVGhpcyBpcyBhIEdFTkVSQVRFRCBGSUxFLiBQbGVhc2UgYWx3YXlzIHJlZmVyIHRvIHNvdXJjZSBmaWxlIGF0IHRoZSBVUkkgYmVsb3cuCisiIExhbmd1YWdlOiBPcGVuU1NIIHNlcnZlciBjb25maWd1cmF0aW9uIGZpbGUgKHNzaF9jb25maWcpCisiIE1haW50YWluZXI6IERhdmlkIE5lXHZ7Y31hcyAoWWV0aSkgPHlldGlAcGh5c2ljcy5tdW5pLmN6PgorIiBMYXN0IENoYW5nZTogMjAwMy0wNS0wNgorIiBVUkw6IGh0dHA6Ly90cmlmaWMuYXRoLmN4L0Z0cC92aW0vc3ludGF4L3NzaGNvbmZpZy52aW0KKworIiBTZXR1cAoraWYgdmVyc2lvbiA+PSA2MDAKKwlpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCQlmaW5pc2gKKwllbmRpZgorZWxzZQorCXN5bnRheCBjbGVhcgorZW5kaWYKKworaWYgdmVyc2lvbiA+PSA2MDAKKwlzZXRsb2NhbCBpc2tleXdvcmQ9XywtLGEteixBLVosNDgtNTcKK2Vsc2UKKwlzZXQgaXNrZXl3b3JkPV8sLSxhLXosQS1aLDQ4LTU3CitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBDb21tZW50cworc3luIG1hdGNoIHNzaGNvbmZpZ0NvbW1lbnQgIiMuKiQiIGNvbnRhaW5zPXNzaGNvbmZpZ1RvZG8KK3N5biBrZXl3b3JkIHNzaGNvbmZpZ1RvZG8gVE9ETyBGSVhNRSBOT1QgY29udGFpbmVkCisKKyIgQ29uc3RhbnRzCitzeW4ga2V5d29yZCBzc2hjb25maWdZZXNObyB5ZXMgbm8gYXNrCitzeW4ga2V5d29yZCBzc2hjb25maWdDaXBoZXIgYmxvd2Zpc2ggZGVzIDNkZXMKK3N5biBrZXl3b3JkIHNzaGNvbmZpZ0NpcGhlciBhZXMxMjgtY2JjIDNkZXMtY2JjIGJsb3dmaXNoLWNiYyBjYXN0MTI4LWNiYworc3luIGtleXdvcmQgc3NoY29uZmlnQ2lwaGVyIGFyY2ZvdXIgYWVzMTkyLWNiYyBhZXMyNTYtY2JjCitzeW4ga2V5d29yZCBzc2hjb25maWdNQUMgaG1hYy1tZDUgaG1hYy1zaGExIGhtYWMtcmlwZW1kMTYwIGhtYWMtc2hhMS05Ngorc3luIGtleXdvcmQgc3NoY29uZmlnTUFDIGhtYWMtbWQ1LTk2CitzeW4ga2V5d29yZCBzc2hjb25maWdIb3N0S2V5QWxnIHNzaC1yc2Egc3NoLWRzcworc3luIGtleXdvcmQgc3NoY29uZmlnUHJlZmVycmVkQXV0aCBob3N0YmFzZWQgcHVibGlja2V5IHBhc3N3b3JkCitzeW4ga2V5d29yZCBzc2hjb25maWdQcmVmZXJyZWRBdXRoIGtleWJvYXJkLWludGVyYWN0aXZlCitzeW4ga2V5d29yZCBzc2hjb25maWdMb2dMZXZlbCBRVUlFVCBGQVRBTCBFUlJPUiBJTkZPIFZFUkJPU0UKK3N5biBrZXl3b3JkIHNzaGNvbmZpZ0xvZ0xldmVsIERFQlVHIERFQlVHMSBERUJVRzIgREVCVUczCitzeW4ga2V5d29yZCBzc2hjb25maWdTeXNMb2dGYWNpbGl0eSBEQUVNT04gVVNFUiBBVVRIIExPQ0FMMCBMT0NBTDEgTE9DQUwyCitzeW4ga2V5d29yZCBzc2hjb25maWdTeXNMb2dGYWNpbGl0eSBMT0NBTDMgTE9DQUw0IExPQ0FMNSBMT0NBTDYgTE9DQUw3CitzeW4gbWF0Y2ggc3NoY29uZmlnU3BlY2lhbCAiWyo/XSIKK3N5biBtYXRjaCBzc2hjb25maWdOdW1iZXIgIlxkXCsiCitzeW4gbWF0Y2ggc3NoY29uZmlnSG9zdFBvcnQgIlw8XChcZFx7MSwzfVwuXClcezN9XGRcezEsM31cKDpcZFwrXClcP1w+Igorc3luIG1hdGNoIHNzaGNvbmZpZ0hvc3RQb3J0ICJcPFwoWy1hLXpBLVowLTldXCtcLlwpXCtbLWEtekEtWjAtOV1cezIsfVwoOlxkXCtcKVw/XD4iCitzeW4gbWF0Y2ggc3NoY29uZmlnSG9zdFBvcnQgIlw8XChceFx7LDR9OlwpXCtceFx7LDR9WzovXVxkXCtcPiIKKworIiBLZXl3b3Jkcworc3luIGtleXdvcmQgc3NoY29uZmlnSG9zdFNlY3QgSG9zdAorc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBBRlNUb2tlblBhc3NpbmcgQmF0Y2hNb2RlIEJpbmRBZGRyZXNzCitzeW4ga2V5d29yZCBzc2hjb25maWdLZXl3b3JkIENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gQ2hlY2tIb3N0SVAKK3N5biBrZXl3b3JkIHNzaGNvbmZpZ0tleXdvcmQgQ2lwaGVyIENpcGhlcnMgQ2xlYXJBbGxGb3J3YXJkaW5ncyBDb21wcmVzc2lvbgorc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBDb21wcmVzc2lvbkxldmVsIENvbm5lY3Rpb25BdHRlbXB0cworc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBEeW5hbWljRm9yd2FyZCBFc2NhcGVDaGFyIEZvcndhcmRBZ2VudCBGb3J3YXJkWDExCitzeW4ga2V5d29yZCBzc2hjb25maWdLZXl3b3JkIEdhdGV3YXlQb3J0cyBHbG9iYWxLbm93bkhvc3RzRmlsZQorc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBIb3N0YmFzZWRBdXRoZW50aWNhdGlvbiBIb3N0S2V5QWxnb3JpdGhtcworc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBIb3N0S2V5QWxpYXMgSG9zdE5hbWUgSWRlbnRpdHlGaWxlIEtlZXBBbGl2ZQorc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBLZXJiZXJvc0F1dGhlbnRpY2F0aW9uIEtlcmJlcm9zVGd0UGFzc2luZworc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBMb2NhbEZvcndhcmQgTG9nTGV2ZWwgTUFDcworc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBOb0hvc3RBdXRoZW50aWNhdGlvbkZvckxvY2FsaG9zdAorc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBOdW1iZXJPZlBhc3N3b3JkUHJvbXB0cyBQYXNzd29yZEF1dGhlbnRpY2F0aW9uCitzeW4ga2V5d29yZCBzc2hjb25maWdLZXl3b3JkIFBvcnQgUHJlZmVycmVkQXV0aGVudGljYXRpb25zIFByb3RvY29sCitzeW4ga2V5d29yZCBzc2hjb25maWdLZXl3b3JkIFByb3h5Q29tbWFuZCBQdWJrZXlBdXRoZW50aWNhdGlvbiBSZW1vdGVGb3J3YXJkCitzeW4ga2V5d29yZCBzc2hjb25maWdLZXl3b3JkIFJob3N0c0F1dGhlbnRpY2F0aW9uIFJob3N0c1JTQUF1dGhlbnRpY2F0aW9uCitzeW4ga2V5d29yZCBzc2hjb25maWdLZXl3b3JkIFJTQUF1dGhlbnRpY2F0aW9uIFNtYXJ0Y2FyZERldmljZQorc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBTdHJpY3RIb3N0S2V5Q2hlY2tpbmcgVXNlUHJpdmlsZWdlZFBvcnQgVXNlcgorc3luIGtleXdvcmQgc3NoY29uZmlnS2V5d29yZCBVc2VyS25vd25Ib3N0c0ZpbGUgWEF1dGhMb2NhdGlvbgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zc2hjb25maWdfc3ludGF4X2luaXRzIikKKwlpZiB2ZXJzaW9uIDwgNTA4CisJCWxldCBkaWRfc3NoY29uZmlnX3N5bnRheF9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWVuZGlmCisKKwlIaUxpbmsgc3NoY29uZmlnQ29tbWVudCBDb21tZW50CisJSGlMaW5rIHNzaGNvbmZpZ1RvZG8gVG9kbworCUhpTGluayBzc2hjb25maWdIb3N0UG9ydCBzc2hjb25maWdDb25zdGFudAorCUhpTGluayBzc2hjb25maWdOdW1iZXIgc3NoY29uZmlnQ29uc3RhbnQKKwlIaUxpbmsgc3NoY29uZmlnQ29uc3RhbnQgQ29uc3RhbnQKKwlIaUxpbmsgc3NoY29uZmlnWWVzTm8gc3NoY29uZmlnRW51bQorCUhpTGluayBzc2hjb25maWdDaXBoZXIgc3NoY29uZmlnRW51bQorCUhpTGluayBzc2hjb25maWdNQUMgc3NoY29uZmlnRW51bQorCUhpTGluayBzc2hjb25maWdIb3N0S2V5QWxnIHNzaGNvbmZpZ0VudW0KKwlIaUxpbmsgc3NoY29uZmlnTG9nTGV2ZWwgc3NoY29uZmlnRW51bQorCUhpTGluayBzc2hjb25maWdTeXNMb2dGYWNpbGl0eSBzc2hjb25maWdFbnVtCisJSGlMaW5rIHNzaGNvbmZpZ1ByZWZlcnJlZEF1dGggc3NoY29uZmlnRW51bQorCUhpTGluayBzc2hjb25maWdFbnVtIEZ1bmN0aW9uCisJSGlMaW5rIHNzaGNvbmZpZ1NwZWNpYWwgU3BlY2lhbAorCUhpTGluayBzc2hjb25maWdLZXl3b3JkIEtleXdvcmQKKwlIaUxpbmsgc3NoY29uZmlnSG9zdFNlY3QgVHlwZQorCWRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzc2hjb25maWciCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3NzaGRjb25maWcudmltIGIvcnVudGltZS9zeW50YXgvc3NoZGNvbmZpZy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzNDMwNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3NzaGRjb25maWcudmltCkBAIC0wLDAgKzEsOTggQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIFRoaXMgaXMgYSBHRU5FUkFURUQgRklMRS4gUGxlYXNlIGFsd2F5cyByZWZlciB0byBzb3VyY2UgZmlsZSBhdCB0aGUgVVJJIGJlbG93LgorIiBMYW5ndWFnZTogT3BlblNTSCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlIChzc2hkX2NvbmZpZykKKyIgTWFpbnRhaW5lcjogRGF2aWQgTmVcdntjfWFzIChZZXRpKSA8eWV0aUBwaHlzaWNzLm11bmkuY3o+CisiIExhc3QgQ2hhbmdlOiAyMDAzLTA1LTA2CisiIFVSTDogaHR0cDovL3RyaWZpYy5hdGguY3gvRnRwL3ZpbS9zeW50YXgvc3NoZGNvbmZpZy52aW0KKworIiBTZXR1cAoraWYgdmVyc2lvbiA+PSA2MDAKKwlpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCQlmaW5pc2gKKwllbmRpZgorZWxzZQorCXN5bnRheCBjbGVhcgorZW5kaWYKKworaWYgdmVyc2lvbiA+PSA2MDAKKwlzZXRsb2NhbCBpc2tleXdvcmQ9XywtLGEteixBLVosNDgtNTcKK2Vsc2UKKwlzZXQgaXNrZXl3b3JkPV8sLSxhLXosQS1aLDQ4LTU3CitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKKworIiBDb21tZW50cworc3luIG1hdGNoIHNzaGRjb25maWdDb21tZW50ICIjLiokIiBjb250YWlucz1zc2hkY29uZmlnVG9kbworc3luIGtleXdvcmQgc3NoZGNvbmZpZ1RvZG8gVE9ETyBGSVhNRSBOT1QgY29udGFpbmVkCisKKyIgQ29uc3RhbnRzCitzeW4ga2V5d29yZCBzc2hkY29uZmlnWWVzTm8geWVzIG5vCitzeW4ga2V5d29yZCBzc2hkY29uZmlnQ2lwaGVyIGFlczEyOC1jYmMgM2Rlcy1jYmMgYmxvd2Zpc2gtY2JjIGNhc3QxMjgtY2JjCitzeW4ga2V5d29yZCBzc2hkY29uZmlnQ2lwaGVyIGFlczE5Mi1jYmMgYWVzMjU2LWNiYworc3luIGtleXdvcmQgc3NoZGNvbmZpZ0NpcGhlciBhcmNmb3VyCitzeW4ga2V5d29yZCBzc2hkY29uZmlnTUFDIGhtYWMtbWQ1IGhtYWMtc2hhMSBobWFjLXJpcGVtZDE2MCBobWFjLXNoYTEtOTYKK3N5biBrZXl3b3JkIHNzaGRjb25maWdNQUMgaG1hYy1tZDUtOTYKK3N5biBrZXl3b3JkIHNzaGRjb25maWdSb290TG9naW4gd2l0aG91dC1wYXNzd29yZCBmb3JjZWQtY29tbWFuZHMtb25seQorc3luIGtleXdvcmQgc3NoZGNvbmZpZ0xvZ0xldmVsIFFVSUVUIEZBVEFMIEVSUk9SIElORk8gVkVSQk9TRQorc3luIGtleXdvcmQgc3NoZGNvbmZpZ0xvZ0xldmVsIERFQlVHIERFQlVHMSBERUJVRzIgREVCVUczCitzeW4ga2V5d29yZCBzc2hkY29uZmlnU3lzTG9nRmFjaWxpdHkgREFFTU9OIFVTRVIgQVVUSCBMT0NBTDAgTE9DQUwxIExPQ0FMMgorc3luIGtleXdvcmQgc3NoZGNvbmZpZ1N5c0xvZ0ZhY2lsaXR5IExPQ0FMMyBMT0NBTDQgTE9DQUw1IExPQ0FMNiBMT0NBTDcKK3N5biBtYXRjaCBzc2hkY29uZmlnU3BlY2lhbCAiWyo/XSIKK3N5biBtYXRjaCBzc2hkY29uZmlnTnVtYmVyICJcZFwrIgorc3luIG1hdGNoIHNzaGRjb25maWdIb3N0UG9ydCAiXDxcKFxkXHsxLDN9XC5cKVx7M31cZFx7MSwzfVwoOlxkXCtcKVw/XD4iCitzeW4gbWF0Y2ggc3NoZGNvbmZpZ0hvc3RQb3J0ICJcPFwoWy1hLXpBLVowLTldXCtcLlwpXCtbLWEtekEtWjAtOV1cezIsfVwoOlxkXCtcKVw/XD4iCitzeW4gbWF0Y2ggc3NoZGNvbmZpZ0hvc3RQb3J0ICJcPFwoXHhceyw0fTpcKVwrXHhceyw0fTpcZFwrXD4iCitzeW4gbWF0Y2ggc3NoZGNvbmZpZ1RpbWUgIlw8XChcZFwrW3NTbU1oSGREd1ddXClcK1w+IgorCisiIEtleXdvcmRzCitzeW4ga2V5d29yZCBzc2hkY29uZmlnS2V5d29yZCBBRlNUb2tlblBhc3NpbmcgQWxsb3dHcm91cHMgQWxsb3dUY3BGb3J3YXJkaW5nCitzeW4ga2V5d29yZCBzc2hkY29uZmlnS2V5d29yZCBBbGxvd1VzZXJzIEF1dGhvcml6ZWRLZXlzRmlsZSBCYW5uZXIKK3N5biBrZXl3b3JkIHNzaGRjb25maWdLZXl3b3JkIENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gQ2lwaGVycworc3luIGtleXdvcmQgc3NoZGNvbmZpZ0tleXdvcmQgQ2xpZW50QWxpdmVJbnRlcnZhbCBDbGllbnRBbGl2ZUNvdW50TWF4CitzeW4ga2V5d29yZCBzc2hkY29uZmlnS2V5d29yZCBDb21wcmVzc2lvbiBEZW55R3JvdXBzIERlbnlVc2VycyBHYXRld2F5UG9ydHMKK3N5biBrZXl3b3JkIHNzaGRjb25maWdLZXl3b3JkIEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uIEhvc3RLZXkgSWdub3JlUmhvc3RzCitzeW4ga2V5d29yZCBzc2hkY29uZmlnS2V5d29yZCBJZ25vcmVVc2VyS25vd25Ib3N0cyBLZWVwQWxpdmUKK3N5biBrZXl3b3JkIHNzaGRjb25maWdLZXl3b3JkIEtlcmJlcm9zQXV0aGVudGljYXRpb24gS2VyYmVyb3NPckxvY2FsUGFzc3dkCitzeW4ga2V5d29yZCBzc2hkY29uZmlnS2V5d29yZCBLZXJiZXJvc1RndFBhc3NpbmcgS2VyYmVyb3NUaWNrZXRDbGVhbnVwCitzeW4ga2V5d29yZCBzc2hkY29uZmlnS2V5d29yZCBLZXlSZWdlbmVyYXRpb25JbnRlcnZhbCBMaXN0ZW5BZGRyZXNzCitzeW4ga2V5d29yZCBzc2hkY29uZmlnS2V5d29yZCBMb2dpbkdyYWNlVGltZSBMb2dMZXZlbCBNQUNzIE1heFN0YXJ0dXBzCitzeW4ga2V5d29yZCBzc2hkY29uZmlnS2V5d29yZCBQQU1BdXRoZW50aWNhdGlvblZpYUtiZEludAorc3luIGtleXdvcmQgc3NoZGNvbmZpZ0tleXdvcmQgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiBQZXJtaXRFbXB0eVBhc3N3b3Jkcworc3luIGtleXdvcmQgc3NoZGNvbmZpZ0tleXdvcmQgUGVybWl0Um9vdExvZ2luIFBlcm1pdFVzZXJFbnZpcm9ubWVudCBQaWRGaWxlCitzeW4ga2V5d29yZCBzc2hkY29uZmlnS2V5d29yZCBQb3J0IFByaW50TGFzdExvZyBQcmludE1vdGQgUHJvdG9jb2wKK3N5biBrZXl3b3JkIHNzaGRjb25maWdLZXl3b3JkIFB1YmtleUF1dGhlbnRpY2F0aW9uIFJob3N0c0F1dGhlbnRpY2F0aW9uCitzeW4ga2V5d29yZCBzc2hkY29uZmlnS2V5d29yZCBSaG9zdHNSU0FBdXRoZW50aWNhdGlvbiBSU0FBdXRoZW50aWNhdGlvbgorc3luIGtleXdvcmQgc3NoZGNvbmZpZ0tleXdvcmQgU2VydmVyS2V5Qml0cyBTdHJpY3RNb2RlcyBTdWJzeXN0ZW0KK3N5biBrZXl3b3JkIHNzaGRjb25maWdLZXl3b3JkIFN5c2xvZ0ZhY2lsaXR5IFVzZUxvZ2luIFVzZVByaXZpbGVnZVNlcGFyYXRpb24KK3N5biBrZXl3b3JkIHNzaGRjb25maWdLZXl3b3JkIFZlcmlmeVJldmVyc2VNYXBwaW5nIFgxMURpc3BsYXlPZmZzZXQKK3N5biBrZXl3b3JkIHNzaGRjb25maWdLZXl3b3JkIFgxMUZvcndhcmRpbmcgWDExVXNlTG9jYWxob3N0IFhBdXRoTG9jYXRpb24KKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc3NoZGNvbmZpZ19zeW50YXhfaW5pdHMiKQorCWlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9zc2hkY29uZmlnX3N5bnRheF9pbml0cyA9IDEKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKwllbHNlCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCWVuZGlmCisKKwlIaUxpbmsgc3NoZGNvbmZpZ0NvbW1lbnQgQ29tbWVudAorCUhpTGluayBzc2hkY29uZmlnVG9kbyBUb2RvCisJSGlMaW5rIHNzaGRjb25maWdIb3N0UG9ydCBzc2hkY29uZmlnQ29uc3RhbnQKKwlIaUxpbmsgc3NoZGNvbmZpZ1RpbWUgc3NoZGNvbmZpZ0NvbnN0YW50CisJSGlMaW5rIHNzaGRjb25maWdOdW1iZXIgc3NoZGNvbmZpZ0NvbnN0YW50CisJSGlMaW5rIHNzaGRjb25maWdDb25zdGFudCBDb25zdGFudAorCUhpTGluayBzc2hkY29uZmlnWWVzTm8gc3NoZGNvbmZpZ0VudW0KKwlIaUxpbmsgc3NoZGNvbmZpZ0NpcGhlciBzc2hkY29uZmlnRW51bQorCUhpTGluayBzc2hkY29uZmlnTUFDIHNzaGRjb25maWdFbnVtCisJSGlMaW5rIHNzaGRjb25maWdSb290TG9naW4gc3NoZGNvbmZpZ0VudW0KKwlIaUxpbmsgc3NoZGNvbmZpZ0xvZ0xldmVsIHNzaGRjb25maWdFbnVtCisJSGlMaW5rIHNzaGRjb25maWdTeXNMb2dGYWNpbGl0eSBzc2hkY29uZmlnRW51bQorCUhpTGluayBzc2hkY29uZmlnRW51bSBGdW5jdGlvbgorCUhpTGluayBzc2hkY29uZmlnU3BlY2lhbCBTcGVjaWFsCisJSGlMaW5rIHNzaGRjb25maWdLZXl3b3JkIEtleXdvcmQKKwlkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic3NoZGNvbmZpZyIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3N0LnZpbSBiL3J1bnRpbWUvc3ludGF4L3N0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjI5ZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc3QudmltCkBAIC0wLDAgKzEsMTAyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJU21hbGx0YWxrCisiIE1haW50YWluZXI6CUFybmR0IEhlc3NlIDxoZXNzZUBzZWxmLmRlPgorIiBMYXN0IENoYW5nZToJMjAwMSBNYXkgMDkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIHNvbWUgU21hbGx0YWxrIGtleXdvcmRzIGFuZCBzdGFuZGFyZCBtZXRob2RzCitzeW4ga2V5d29yZAlzdEtleXdvcmQJc3VwZXIgc2VsZiBjbGFzcyB0cnVlIGZhbHNlIG5ldyBub3QKK3N5biBrZXl3b3JkCXN0S2V5d29yZAlub3ROaWwgaXNOaWwgaW5zcGVjdCBvdXQgbmlsCitzeW4gbWF0Y2gJc3RNZXRob2QJIlw8ZG9cPjoiCitzeW4gbWF0Y2gJc3RNZXRob2QJIlw8d2hpbGVUcnVlXD46Igorc3luIG1hdGNoCXN0TWV0aG9kCSJcPHdoaWxlRmFsc2VcPjoiCitzeW4gbWF0Y2gJc3RNZXRob2QJIlw8aWZUcnVlXD46Igorc3luIG1hdGNoCXN0TWV0aG9kCSJcPGlmRmFsc2VcPjoiCitzeW4gbWF0Y2gJc3RNZXRob2QJIlw8cHV0XD46Igorc3luIG1hdGNoCXN0TWV0aG9kCSJcPHRvXD46Igorc3luIG1hdGNoCXN0TWV0aG9kCSJcPGF0XD46Igorc3luIG1hdGNoCXN0TWV0aG9kCSJcPGFkZFw+OiIKK3N5biBtYXRjaAlzdE1ldGhvZAkiXDxuZXdcPjoiCitzeW4gbWF0Y2gJc3RNZXRob2QJIlw8Zm9yXD46Igorc3luIG1hdGNoCXN0TWV0aG9kCSJcPG1ldGhvZHNcPjoiCitzeW4gbWF0Y2gJc3RNZXRob2QJIlw8bWV0aG9kc0Zvclw+OiIKK3N5biBtYXRjaAlzdE1ldGhvZAkiXDxpbnN0YW5jZVZhcmlhYmxlTmFtZXNcPjoiCitzeW4gbWF0Y2gJc3RNZXRob2QJIlw8Y2xhc3NWYXJpYWJsZU5hbWVzXD46Igorc3luIG1hdGNoCXN0TWV0aG9kCSJcPHBvb2xEaWN0aW9uYXJpZXNcPjoiCitzeW4gbWF0Y2gJc3RNZXRob2QJIlw8c3ViY2xhc3NcPjoiCisKKyIgdGhlIGJsb2NrIG9mIGxvY2FsIHZhcmlhYmxlcyBvZiBhIG1ldGhvZAorc3luIHJlZ2lvbiBzdExvY2FsVmFyaWFibGVzCXN0YXJ0PSJeWyBcdF0qfCIgZW5kPSJ8IgorCisiIHRoZSBTbWFsbHRhbGsgY29tbWVudAorc3luIHJlZ2lvbiBzdENvbW1lbnQJc3RhcnQ9IlwiIiBlbmQ9IlwiIgorCisiIHRoZSBTbWFsbHRhbGsgc3RyaW5ncyBhbmQgc2luZ2xlIGNoYXJhY3RlcnMKK3N5biByZWdpb24gc3RTdHJpbmcJc3RhcnQ9J1wnJyBza2lwPSInJyIgZW5kPSdcJycKK3N5biBtYXRjaCAgc3RDaGFyYWN0ZXIJIiQuIgorCitzeW4gY2FzZSBpZ25vcmUKKworIiB0aGUgc3ltb2xzIHByZWZpeGVkIGJ5IGEgJyMnCitzeW4gbWF0Y2ggIHN0U3ltYm9sCSJcKCNcPFthLXpfXVthLXowLTlfXSpcPlwpIgorc3luIG1hdGNoICBzdFN5bWJvbAkiXCgjJ1teJ10qJ1wpIgorCisiIHRoZSB2YXJpYWJsZXMgaW4gYSBzdGF0ZW1lbnQgYmxvY2sgZm9yIGxvb3BzCitzeW4gbWF0Y2ggIHN0QmxvY2tWYXJpYWJsZSAiXCg6WyBcdF0qXDxbYS16X11bYS16MC05X10qXD5bIFx0XSpcKVwrfCIgY29udGFpbmVkCisKKyIgc29tZSByZXByZXNlbnRhdGlvbnMgb2YgbnVtYmVycworc3luIG1hdGNoICBzdE51bWJlcgkiXDxcZFwrXCh1XD1sXD1cfGx1XHxmXClcPiIKK3N5biBtYXRjaCAgc3RGbG9hdAkiXDxcZFwrXC5cZCpcKGVbLStdXD1cZFwrXClcPVtmbF1cPVw+Igorc3luIG1hdGNoICBzdEZsb2F0CSJcPFxkXCtlWy0rXVw9XGRcK1tmbF1cPVw+IgorCitzeW4gY2FzZSBtYXRjaAorCisiIGEgdHJ5IHRvIGhpZ2xpZ2h0IHBhcmVuIG1pc21hdGNoZXMKK3N5biByZWdpb24gc3RQYXJlbgl0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsc3RQYXJlbkVycm9yCitzeW4gbWF0Y2ggIHN0UGFyZW5FcnJvcgkiKSIKK3N5biByZWdpb24gc3RCbG9jawl0cmFuc3BhcmVudCBzdGFydD0nXFsnIGVuZD0nXF0nIGNvbnRhaW5zPUFMTEJVVCxzdEJsb2NrRXJyb3IKK3N5biBtYXRjaCAgc3RCbG9ja0Vycm9yCSJcXSIKK3N5biByZWdpb24gc3RTZXQJdHJhbnNwYXJlbnQgc3RhcnQ9J3snIGVuZD0nfScgY29udGFpbnM9QUxMQlVULHN0U2V0RXJyb3IKK3N5biBtYXRjaCAgc3RTZXRFcnJvcgkifSIKKworaGkgbGluayBzdFBhcmVuRXJyb3Igc3RFcnJvcgoraGkgbGluayBzdFNldEVycm9yIHN0RXJyb3IKK2hpIGxpbmsgc3RCbG9ja0Vycm9yIHN0RXJyb3IKKworIiBzeW5jaHJvbml6YXRpb24gZm9yIHN5bnRheCBhbmFseXNpcworc3luIHN5bmMgbWlubGluZXM9NTAKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfc3Rfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfc3Rfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc3RLZXl3b3JkCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHN0TWV0aG9kCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHN0Q29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgc3RDaGFyYWN0ZXIJCUNvbnN0YW50CisgIEhpTGluayBzdFN0cmluZwkJQ29uc3RhbnQKKyAgSGlMaW5rIHN0U3ltYm9sCQlTcGVjaWFsCisgIEhpTGluayBzdE51bWJlcgkJVHlwZQorICBIaUxpbmsgc3RGbG9hdAkJVHlwZQorICBIaUxpbmsgc3RFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIHN0TG9jYWxWYXJpYWJsZXMJSWRlbnRpZmllcgorICBIaUxpbmsgc3RCbG9ja1ZhcmlhYmxlCUlkZW50aWZpZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic3QiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zdHAudmltIGIvcnVudGltZS9zeW50YXgvc3RwLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGYwZjNiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc3RwLnZpbQpAQCAtMCwwICsxLDE2NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgICAgTGFuZ3VhZ2U6IFN0b3JlZCBQcm9jZWR1cmVzIChTVFApCisiICBNYWludGFpbmVyOiBKZWZmIExhbnphcm90dGEgKGplZmZsYW56YXJvdHRhQHlhaG9vLmNvbSkKKyIJICBVUkw6IGh0dHA6Ly9sYW56YXJvdHRhLnRyaXBvZC5jb20vdmltL3N5bnRheC9zdHAudmltLnppcAorIiBMYXN0IENoYW5nZTogTWFyY2ggMDUsIDIwMDIKKworIiBGb3IgdmVyc2lvbiA1LngsIGNsZWFyIGFsbCBzeW50YXggaXRlbXMuCisiIEZvciB2ZXJzaW9uIDYueCwgcXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkLgoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCisiIFNwZWNpYWxzLgorc3luIGtleXdvcmQgc3RwU3BlY2lhbCAgICBudWxsCisKKyIgS2V5d29yZHMuCitzeW4ga2V5d29yZCBzdHBLZXl3b3JkIGJlZ2luIGJyZWFrIGNhbGwgY2FzZSBjcmVhdGUgZGVhbGxvY2F0ZSBkeW5hbWljCitzeW4ga2V5d29yZCBzdHBLZXl3b3JkIGV4ZWN1dGUgZnJvbSBmdW5jdGlvbiBnbyBncmFudAorc3luIGtleXdvcmQgc3RwS2V5d29yZCBpbmRleCBpbnNlcnQgaW50byBsZWF2ZSBtYXggbWluIG9uIG91dHB1dCBwcm9jZWR1cmUKK3N5biBrZXl3b3JkIHN0cEtleXdvcmQgcHVibGljIHJlc3VsdCByZXR1cm4gcmV0dXJucyBzY3JvbGwgdGFibGUgdG8KK3N5biBrZXl3b3JkIHN0cEtleXdvcmQgd2hlbgorc3luIG1hdGNoICAgc3RwS2V5d29yZCAiXDxlbmRcPiIKKworIiBDb25kaXRpb25hbC4KK3N5biBrZXl3b3JkIHN0cENvbmRpdGlvbmFsIGlmIGVsc2UgZWxzZWlmIHRoZW4KK3N5biBtYXRjaCAgIHN0cENvbmRpdGlvbmFsICJcPGVuZFxzXCtpZlw+IgorCisiIFJlcGVhdHMuCitzeW4ga2V5d29yZCBzdHBSZXBlYXQgZm9yIHdoaWxlIGxvb3AKK3N5biBtYXRjaCAgIHN0cFJlcGVhdCAiXDxlbmRcc1wrbG9vcFw+IgorCisiIE9wZXJhdG9ycy4KK3N5biBrZXl3b3JkIHN0cE9wZXJhdG9yIGFzYyBub3QgYW5kIG9yIGRlc2MgZ3JvdXAgaGF2aW5nIGluIGlzIGFueSBzb21lIGFsbAorc3luIGtleXdvcmQgc3RwT3BlcmF0b3IgYmV0d2VlbiBleGlzdHMgbGlrZSBlc2NhcGUgd2l0aCB1bmlvbiBpbnRlcnNlY3QgbWludXMKK3N5biBrZXl3b3JkIHN0cE9wZXJhdG9yIG91dCBwcmlvciBkaXN0aW5jdCBzeXNkYXRlCisKKyIgU3RhdGVtZW50cy4KK3N5biBrZXl3b3JkIHN0cFN0YXRlbWVudCBhbHRlciBhbmFseXplIGFzIGF1ZGl0IGF2ZyBieSBjbG9zZSBjbHVzdGVyZWQgY29tbWVudAorc3luIGtleXdvcmQgc3RwU3RhdGVtZW50IGNvbW1pdCBjb250aW51ZSBjb3VudCBjcmVhdGUgY3Vyc29yIGRlY2xhcmUgZGVsZXRlCitzeW4ga2V5d29yZCBzdHBTdGF0ZW1lbnQgZHJvcCBleGVjIGV4ZWN1dGUgZXhwbGFpbiBmZXRjaCBmcm9tIGluZGV4IGluc2VydAorc3luIGtleXdvcmQgc3RwU3RhdGVtZW50IGludG8gbG9jayBtYXggbWluIG5leHQgbm9hdWRpdCBub25jbHVzdGVyZWQgb3Blbgorc3luIGtleXdvcmQgc3RwU3RhdGVtZW50IG9yZGVyIG91dHB1dCBwcmludCByYWlzZXJyb3IgcmVjb21waWxlIHJlbmFtZSByZXZva2UKK3N5biBrZXl3b3JkIHN0cFN0YXRlbWVudCByb2xsYmFjayBzYXZlcG9pbnQgc2VsZWN0IHNldCBzdW0gdHJhbnNhY3Rpb24KK3N5biBrZXl3b3JkIHN0cFN0YXRlbWVudCB0cnVuY2F0ZSB1bmlxdWUgdXBkYXRlIHZhbHVlcyB3aGVyZQorCisiIEZ1bmN0aW9ucy4KK3N5biBrZXl3b3JkIHN0cEZ1bmN0aW9uIGFicyBhY29zIGFzY2lpIGFzaW4gYXRhbiBhdG4yIGF2ZyBjZWlsaW5nIGNoYXJpbmRleAorc3luIGtleXdvcmQgc3RwRnVuY3Rpb24gY2hhcmxlbmd0aCBjb252ZXJ0IGNvbF9uYW1lIGNvbF9sZW5ndGggY29zIGNvdCBjb3VudAorc3luIGtleXdvcmQgc3RwRnVuY3Rpb24gY3VydW5yZXNlcnZlZHBncyBkYXRhcGdzIGRhdGFsZW5ndGggZGF0ZWFkZCBkYXRlZGlmZgorc3luIGtleXdvcmQgc3RwRnVuY3Rpb24gZGF0ZW5hbWUgZGF0ZXBhcnQgZGJfaWQgZGJfbmFtZSBkZWdyZWUgZGlmZmVyZW5jZQorc3luIGtleXdvcmQgc3RwRnVuY3Rpb24gZXhwIGZsb29yIGdldGRhdGUgaGV4dG9pbnQgaG9zdF9pZCBob3N0X25hbWUgaW5kZXhfY29sCitzeW4ga2V5d29yZCBzdHBGdW5jdGlvbiBpbnR0b2hleCBpc251bGwgbGN0X2FkbWluIGxvZyBsb2cxMCBsb3dlciBsdHJpbSBtYXgKK3N5biBrZXl3b3JkIHN0cEZ1bmN0aW9uIG1pbiBub3cgb2JqZWN0X2lkIG9iamVjdF9uYW1lIHBhdGluZGV4IHBpIHBvcyBwb3dlcgorc3luIGtleXdvcmQgc3RwRnVuY3Rpb24gcHJvY19yb2xlIHJhZGlhbnMgcmFuZCByZXBsYWNlIHJlcGxpY2F0ZSByZXNlcnZlZF9wZ3MKK3N5biBrZXl3b3JkIHN0cEZ1bmN0aW9uIHJldmVyc2UgcmlnaHQgcnRyaW0gcm93Y250IHJvdW5kIHNob3dfcm9sZSBzaWduIHNpbgorc3luIGtleXdvcmQgc3RwRnVuY3Rpb24gc291bmRleCBzcGFjZSBzcXJ0IHN0ciBzdHVmZiBzdWJzdHIgc3Vic3RyaW5nIHN1bQorc3luIGtleXdvcmQgc3RwRnVuY3Rpb24gc3VzZXJfaWQgc3VzZXJfbmFtZSB0YW4gdHNlcXVhbCB1cHBlciB1c2VkX3BncyB1c2VyCitzeW4ga2V5d29yZCBzdHBGdW5jdGlvbiB1c2VyX2lkIHVzZXJfbmFtZSB2YWxpZF9uYW1lIHZhbGlkX3VzZXIgbWVzc2FnZQorCisiIFR5cGVzLgorc3luIGtleXdvcmQgc3RwVHlwZSBiaW5hcnkgYml0IGNoYXIgZGF0ZXRpbWUgZGVjaW1hbCBkb3VibGUgZmxvYXQgaW1hZ2UKK3N5biBrZXl3b3JkIHN0cFR5cGUgaW50IGludGVnZXIgbG9uZyBtb25leSBuY2hhciBudW1lcmljIHByZWNpc2lvbiByZWFsCitzeW4ga2V5d29yZCBzdHBUeXBlIHNtYWxsZGF0ZXRpbWUgc21hbGxpbnQgc21hbGxtb25leSB0ZXh0IHRpbWUgdGlueWludAorc3luIGtleXdvcmQgc3RwVHlwZSB0aW1lc3RhbXAgdmFyYmluYXJ5IHZhcmNoYXIKKworIiBHbG9iYWxzLgorc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAY2hhcl9jb252ZXJ0Jworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAY2llbnRfY3NuYW1lJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAY2xpZW50X2NzaWQnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEBjb25uZWN0aW9ucycKK3N5biBtYXRjaCBzdHBHbG9iYWxzICdAQGNwdV9idXN5Jworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAZXJyb3InCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEBpZGVudGl0eScKK3N5biBtYXRjaCBzdHBHbG9iYWxzICdAQGlkbGUnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEBpb19idXN5Jworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAaXNvbGF0aW9uJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAbGFuZ2lkJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAbGFuZ3VhZ2UnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEBtYXhfY29ubmVjdGlvbnMnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEBtYXhjaGFybGVuJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAbmNoYXJzaXplJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAbmVzdGxldmVsJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAcGFja19yZWNlaXZlZCcKK3N5biBtYXRjaCBzdHBHbG9iYWxzICdAQHBhY2tfc2VudCcKK3N5biBtYXRjaCBzdHBHbG9iYWxzICdAQHBhY2tldF9lcnJvcnMnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEBwcm9jaWQnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEByb3djb3VudCcKK3N5biBtYXRjaCBzdHBHbG9iYWxzICdAQHNlcnZlcm5hbWUnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEBzcGlkJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAc3Fsc3RhdHVzJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAdGVzdHRzJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAdGV4dGNvbGlkJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAdGV4dGRiaWQnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEB0ZXh0b2JqaWQnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEB0ZXh0cHRyJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAdGV4dHNpemUnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEB0aHJlc2hfaHlzdGVyZXNpcycKK3N5biBtYXRjaCBzdHBHbG9iYWxzICdAQHRpbWV0aWNrcycKK3N5biBtYXRjaCBzdHBHbG9iYWxzICdAQHRvdGFsX2Vycm9yJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAdG90YWxfcmVhZCcKK3N5biBtYXRjaCBzdHBHbG9iYWxzICdAQHRvdGFsX3dyaXRlJworc3luIG1hdGNoIHN0cEdsb2JhbHMgJ0BAdHJhbmNoYWluZWQnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEB0cmFuY291bnQnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEB0cmFuc3RhdGUnCitzeW4gbWF0Y2ggc3RwR2xvYmFscyAnQEB2ZXJzaW9uJworCisiIFRvZG9zLgorc3luIGtleXdvcmQgc3RwVG9kbyBUT0RPIEZJWE1FIFhYWCBERUJVRyBOT1RFCisKKyIgU3RyaW5ncyBhbmQgY2hhcmFjdGVycy4KK3N5biBtYXRjaCBzdHBTdHJpbmdFcnJvciAiJy4qJCIKK3N5biBtYXRjaCBzdHBTdHJpbmcgIidcKFteJ11cfCcnXCkqJyIKKworIiBOdW1iZXJzLgorc3luIG1hdGNoIHN0cE51bWJlciAiLVw9XDxcZCpcLlw9WzAtOV9dXD4iCisKKyIgQ29tbWVudHMuCitzeW4gcmVnaW9uIHN0cENvbW1lbnQgc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPXN0cFRvZG8KK3N5biBtYXRjaCAgc3RwQ29tbWVudCAiLS0uKiIgY29udGFpbnM9c3RwVG9kbworc3luIHN5bmMgICBjY29tbWVudCBzdHBDb21tZW50CisKKyIgUGFyZW5zLgorc3luIHJlZ2lvbiBzdHBQYXJlbiB0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsc3RwUGFyZW5FcnJvcgorc3luIG1hdGNoICBzdHBQYXJlbkVycm9yICIpIgorCisiIFN5bnRheCBTeW5jaHJvbml6aW5nLgorc3luIHN5bmMgbWlubGluZXM9MTAgbWF4bGluZXM9MTAwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS54IGFuZCBlYXJsaWVyLCBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeS4KKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlciwgb25seSB3aGVuIGFuZCBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0LgoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3N0cF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9zdHBfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgc3RwQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHN0cENvbW1lbnQgQ29tbWVudAorICBIaUxpbmsgc3RwS2V5d29yZCBLZXl3b3JkCisgIEhpTGluayBzdHBOdW1iZXIgTnVtYmVyCisgIEhpTGluayBzdHBPcGVyYXRvciBPcGVyYXRvcgorICBIaUxpbmsgc3RwU3BlY2lhbCBTcGVjaWFsCisgIEhpTGluayBzdHBTdGF0ZW1lbnQgU3RhdGVtZW50CisgIEhpTGluayBzdHBTdHJpbmcgU3RyaW5nCisgIEhpTGluayBzdHBTdHJpbmdFcnJvciBFcnJvcgorICBIaUxpbmsgc3RwVHlwZSBUeXBlCisgIEhpTGluayBzdHBUb2RvIFRvZG8KKyAgSGlMaW5rIHN0cEZ1bmN0aW9uIEZ1bmN0aW9uCisgIEhpTGluayBzdHBHbG9iYWxzIE1hY3JvCisgIEhpTGluayBzdHBQYXJlbiBOb3JtYWwKKyAgSGlMaW5rIHN0cFBhcmVuRXJyb3IgRXJyb3IKKyAgSGlMaW5rIHN0cFNRTEtleXdvcmQgRnVuY3Rpb24KKyAgSGlMaW5rIHN0cFJlcGVhdCBSZXBlYXQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAic3RwIgorCisiIHZpbSB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3N0cmFjZS52aW0gYi9ydW50aW1lL3N5bnRheC9zdHJhY2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwY2QyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zdHJhY2UudmltCkBAIC0wLDAgKzEsNjYgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIFRoaXMgaXMgYSBHRU5FUkFURUQgRklMRS4gUGxlYXNlIGFsd2F5cyByZWZlciB0byBzb3VyY2UgZmlsZSBhdCB0aGUgVVJJIGJlbG93LgorIiBMYW5ndWFnZTogc3RyYWNlIG91dHB1dAorIiBNYWludGFpbmVyOiBEYXZpZCBOZVx2e2N9YXMgKFlldGkpIDx5ZXRpQHBoeXNpY3MubXVuaS5jej4KKyIgTGFzdCBDaGFuZ2U6IDIwMDItMTAtMTAKKyIgVVJMOiBodHRwOi8vdHJpZmljLmF0aC5jeC9GdHAvdmltL3N5bnRheC9zdHJhY2UudmltCisKKyIgU2V0dXAKK2lmIHZlcnNpb24gPj0gNjAwCisJaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKwkJZmluaXNoCisJZW5kaWYKK2Vsc2UKKwlzeW50YXggY2xlYXIKK2VuZGlmCisKK3N5biBjYXNlIG1hdGNoCisKKyIgUGFyc2UgdGhlIGxpbmUKK3N5biBtYXRjaCBzdHJhY2VTcGVjaWFsQ2hhciAiXFxcZFxkXGRcfFxcLiIgY29udGFpbmVkCitzeW4gcmVnaW9uIHN0cmFjZVN0cmluZyBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPXN0cmFjZVNwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biBtYXRjaCBzdHJhY2VOdW1iZXIgIlxXWystXVw9XChcZFwrXClcPVwuXD1cZFwrXChbZUVdWystXVw9XGRcK1wpXD0ibGM9MQorc3luIG1hdGNoIHN0cmFjZU51bWJlciAiXFcweFx4XCsibGM9MQorc3luIG1hdGNoIHN0cmFjZU51bWJlclJIUyAiXFdcKDB4XHhcK1x8LVw9XGRcK1wpImxjPTEgY29udGFpbmVkCitzeW4gbWF0Y2ggc3RyYWNlT3RoZXJSSFMgIj8iIGNvbnRhaW5lZAorc3luIG1hdGNoIHN0cmFjZUNvbnN0YW50ICJbQS1aX11cezIsfSIKK3N5biByZWdpb24gc3RyYWNlVmVyYm9zZWQgc3RhcnQ9IigiIGVuZD0iKSIgbWF0Y2hncm91cD1Ob3JtYWwgY29udGFpbmVkIG9uZWxpbmUKK3N5biByZWdpb24gc3RyYWNlUmV0dXJuZWQgc3RhcnQ9IlxzPVxzIiBlbmQ9IiQiIGNvbnRhaW5zPVN0cmFjZUVxdWFscyxzdHJhY2VOdW1iZXJSSFMsc3RyYWNlT3RoZXJSSFMsc3RyYWNlQ29uc3RhbnQsc3RyYWNlVmVyYm9zZWQgb25lbGluZSB0cmFuc3BhcmVudAorc3luIG1hdGNoIHN0cmFjZUVxdWFscyAiXHM9XHMibXM9cysxLG1lPWUtMQorc3luIG1hdGNoIHN0cmFjZVBhcmVudGhlc2lzICJbXVsoKXt9XSIKK3N5biBtYXRjaCBzdHJhY2VTeXNDYWxsICJeXHdcKyIKK3N5biBtYXRjaCBzdHJhY2VPdGhlclBJRCAiXlxbW15dXSpcXSIgY29udGFpbnM9c3RyYWNlUElELHN0cmFjZU51bWJlciBuZXh0Z3JvdXA9c3RyYWNlU3lzQ2FsbEVtYmVkIHNraXB3aGl0ZQorc3luIG1hdGNoIHN0cmFjZVN5c0NhbGxFbWJlZCAiXHdcKyIgY29udGFpbmVkCitzeW4ga2V5d29yZCBzdHJhY2VQSUQgcGlkIGNvbnRhaW5lZAorc3luIG1hdGNoIHN0cmFjZU9wZXJhdG9yICJbLSs9Ki8hJSZ8OixdIgorc3luIHJlZ2lvbiBzdHJhY2VDb21tZW50IHN0YXJ0PSIvXCoiIGVuZD0iXCovIiBvbmVsaW5lCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3N0cmFjZV9zeW50YXhfaW5pdHMiKQorCWlmIHZlcnNpb24gPCA1MDgKKwkJbGV0IGRpZF9zdHJhY2Vfc3ludGF4X2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluayBzdHJhY2VDb21tZW50IENvbW1lbnQKKwlIaUxpbmsgc3RyYWNlVmVyYm9zZWQgQ29tbWVudAorCUhpTGluayBzdHJhY2VQSUQgUHJlUHJvYworCUhpTGluayBzdHJhY2VOdW1iZXIgTnVtYmVyCisJSGlMaW5rIHN0cmFjZU51bWJlclJIUyBUeXBlCisJSGlMaW5rIHN0cmFjZU90aGVyUkhTIFR5cGUKKwlIaUxpbmsgc3RyYWNlU3RyaW5nIFN0cmluZworCUhpTGluayBzdHJhY2VDb25zdGFudCBGdW5jdGlvbgorCUhpTGluayBzdHJhY2VFcXVhbHMgVHlwZQorCUhpTGluayBzdHJhY2VTeXNDYWxsRW1iZWQgc3RyYWNlU3lzQ2FsbAorCUhpTGluayBzdHJhY2VTeXNDYWxsIFN0YXRlbWVudAorCUhpTGluayBzdHJhY2VQYXJlbnRoZXNpcyBTdGF0ZW1lbnQKKwlIaUxpbmsgc3RyYWNlT3BlcmF0b3IgTm9ybWFsCisJSGlMaW5rIHN0cmFjZVNwZWNpYWxDaGFyIFNwZWNpYWwKKwlIaUxpbmsgc3RyYWNlT3RoZXJQSUQgUHJlUHJvYworCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInN0cmFjZSIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3N2bi52aW0gYi9ydW50aW1lL3N5bnRheC9zdm4udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzMyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC9zdm4udmltCkBAIC0wLDAgKzEsNDYgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglTdWJ2ZXJzaW9uIChzdm4pIGNvbW1pdCBmaWxlCisiIE1haW50YWluZXI6CURtaXRyeSBWYXNpbGlldiA8ZGltYUBobGFicy5zcGIucnU+CisiIFVSTDoJCWh0dHA6Ly93d3cuaGxhYnMuc3BiLnJ1L3ZpbS9zdm4udmltCisiIExhc3QgQ2hhbmdlOgkkRGF0ZSQKKyIgJFJldmlzaW9uJAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcy4KKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQuCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIHJlZ2lvbiBzdm5SZWdpb24Jc3RhcnQ9Ii0tVGhpcyBsaW5lLCBhbmQgdGhvc2UgYmVsb3csIHdpbGwgYmUgaWdub3JlZC0tIiBlbmQ9IlwlJCIgY29udGFpbnM9QUxMCitzeW4gbWF0Y2ggc3ZuUmVtb3ZlZAkiXkQgICAgLiokIiBjb250YWluZWQKK3N5biBtYXRjaCBzdm5BZGRlZAkiXkFbIE1dICAgLiokIiBjb250YWluZWQKK3N5biBtYXRjaCBzdm5Nb2RpZmllZAkiXk1bIE1dICAgLiokIiBjb250YWluZWQKK3N5biBtYXRjaCBzdm5Qcm9wZXJ0eQkiXl9NICAgLiokIiBjb250YWluZWQKKworIiBTeW5jaHJvbml6YXRpb24uCitzeW4gc3luYyBjbGVhcgorc3luIHN5bmMgbWF0Y2ggc3ZuU3luYwlncm91cGhlcmUgc3ZuUmVnaW9uICItLVRoaXMgbGluZSwgYW5kIHRob3NlIGJlbG93LCB3aWxsIGJlIGlnbm9yZWQtLSJtZT1zLTEKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5LgorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldC4KK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9zdm5fc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8PSA1MDgKKyAgICBsZXQgZGlkX3N2bl9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBzdm5SZWdpb24JQ29tbWVudAorICBIaUxpbmsgc3ZuUmVtb3ZlZAlDb25zdGFudAorICBIaUxpbmsgc3ZuQWRkZWQJSWRlbnRpZmllcgorICBIaUxpbmsgc3ZuTW9kaWZpZWQJU3BlY2lhbAorICBIaUxpbmsgc3ZuUHJvcGVydHkJU3BlY2lhbAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJzdm4iCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zeW5jb2xvci52aW0gYi9ydW50aW1lL3N5bnRheC9zeW5jb2xvci52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwMDY0ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3N5bmNvbG9yLnZpbQpAQCAtMCwwICsxLDg1IEBACisiIFZpbSBzeW50YXggc3VwcG9ydCBmaWxlCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAxIFNlcCAxMgorCisiIFRoaXMgZmlsZSBzZXRzIHVwIHRoZSBkZWZhdWx0IG1ldGhvZHMgZm9yIGhpZ2hsaWdodGluZy4KKyIgSXQgaXMgbG9hZGVkIGZyb20gInN5bmxvYWQudmltIiBhbmQgZnJvbSBWaW0gZm9yICI6c3ludGF4IHJlc2V0Ii4KKyIgQWxzbyB1c2VkIGZyb20gaW5pdF9oaWdobGlnaHQoKS4KKworaWYgIWV4aXN0cygic3ludGF4X2NtZCIpIHx8IHN5bnRheF9jbWQgPT0gIm9uIgorICAiICI6c3ludGF4IG9uIiB3b3JrcyBsaWtlIGluIFZpbSA1Ljc6IHNldCBjb2xvcnMgYnV0IGtlZXAgbGlua3MKKyAgY29tbWFuZCAtbmFyZ3M9KiBTeW5Db2xvciBoaSA8YXJncz4KKyAgY29tbWFuZCAtbmFyZ3M9KiBTeW5MaW5rIGhpIGxpbmsgPGFyZ3M+CitlbHNlCisgIGlmIHN5bnRheF9jbWQgPT0gImVuYWJsZSIKKyAgICAiICI6c3ludGF4IGVuYWJsZSIga2VlcHMgYW55IGV4aXN0aW5nIGNvbG9ycworICAgIGNvbW1hbmQgLW5hcmdzPSogU3luQ29sb3IgaGkgZGVmIDxhcmdzPgorICAgIGNvbW1hbmQgLW5hcmdzPSogU3luTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZWxzZWlmIHN5bnRheF9jbWQgPT0gInJlc2V0IgorICAgICIgIjpzeW50YXggcmVzZXQiIHJlc2V0cyBhbGwgY29sb3JzIHRvIHRoZSBkZWZhdWx0CisgICAgY29tbWFuZCAtbmFyZ3M9KiBTeW5Db2xvciBoaSA8YXJncz4KKyAgICBjb21tYW5kIC1uYXJncz0qIFN5bkxpbmsgaGkhIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICAiIFVzZXIgZGVmaW5lZCBzeW5jb2xvciBmaWxlIGhhcyBhbHJlYWR5IHNldCB0aGUgY29sb3JzLgorICAgIGZpbmlzaAorICBlbmRpZgorZW5kaWYKKworIiBNYW55IHRlcm1pbmFscyBjYW4gb25seSB1c2Ugc2l4IGRpZmZlcmVudCBjb2xvcnMgKHBsdXMgYmxhY2sgYW5kIHdoaXRlKS4KKyIgVGhlcmVmb3JlIHRoZSBudW1iZXIgb2YgY29sb3JzIHVzZWQgaXMga2VwdCBsb3cuIEl0IGRvZXNuJ3QgbG9vayBuaWNlIHdpdGgKKyIgdG9vIG1hbnkgY29sb3JzIGFueXdheS4KKyIgQ2FyZWZ1bCB3aXRoICJjdGVybT1ib2xkIiwgaXQgY2hhbmdlcyB0aGUgY29sb3IgdG8gYnJpZ2h0IGZvciBzb21lIHRlcm1pbmFscy4KKyIgVGhlcmUgYXJlIHR3byBzZXRzIG9mIGRlZmF1bHRzOiBmb3IgYSBkYXJrIGFuZCBhIGxpZ2h0IGJhY2tncm91bmQuCitpZiAmYmFja2dyb3VuZCA9PSAiZGFyayIKKyAgU3luQ29sb3IgQ29tbWVudAl0ZXJtPWJvbGQgY3Rlcm09Tk9ORSBjdGVybWZnPUN5YW4gY3Rlcm1iZz1OT05FIGd1aT1OT05FIGd1aWZnPSM4MGEwZmYgZ3VpYmc9Tk9ORQorICBTeW5Db2xvciBDb25zdGFudAl0ZXJtPXVuZGVybGluZSBjdGVybT1OT05FIGN0ZXJtZmc9TWFnZW50YSBjdGVybWJnPU5PTkUgZ3VpPU5PTkUgZ3VpZmc9I2ZmYTBhMCBndWliZz1OT05FCisgIFN5bkNvbG9yIFNwZWNpYWwJdGVybT1ib2xkIGN0ZXJtPU5PTkUgY3Rlcm1mZz1MaWdodFJlZCBjdGVybWJnPU5PTkUgZ3VpPU5PTkUgZ3VpZmc9T3JhbmdlIGd1aWJnPU5PTkUKKyAgU3luQ29sb3IgSWRlbnRpZmllcgl0ZXJtPXVuZGVybGluZSBjdGVybT1ib2xkIGN0ZXJtZmc9Q3lhbiBjdGVybWJnPU5PTkUgZ3VpPU5PTkUgZ3VpZmc9IzQwZmZmZiBndWliZz1OT05FCisgIFN5bkNvbG9yIFN0YXRlbWVudAl0ZXJtPWJvbGQgY3Rlcm09Tk9ORSBjdGVybWZnPVllbGxvdyBjdGVybWJnPU5PTkUgZ3VpPWJvbGQgZ3VpZmc9I2ZmZmY2MCBndWliZz1OT05FCisgIFN5bkNvbG9yIFByZVByb2MJdGVybT11bmRlcmxpbmUgY3Rlcm09Tk9ORSBjdGVybWZnPUxpZ2h0Qmx1ZSBjdGVybWJnPU5PTkUgZ3VpPU5PTkUgZ3VpZmc9I2ZmODBmZiBndWliZz1OT05FCisgIFN5bkNvbG9yIFR5cGUJCXRlcm09dW5kZXJsaW5lIGN0ZXJtPU5PTkUgY3Rlcm1mZz1MaWdodEdyZWVuIGN0ZXJtYmc9Tk9ORSBndWk9Ym9sZCBndWlmZz0jNjBmZjYwIGd1aWJnPU5PTkUKKyAgU3luQ29sb3IgVW5kZXJsaW5lZAl0ZXJtPXVuZGVybGluZSBjdGVybT11bmRlcmxpbmUgY3Rlcm1mZz1MaWdodEJsdWUgZ3VpPXVuZGVybGluZSBndWlmZz0jODBhMGZmCisgIFN5bkNvbG9yIElnbm9yZQl0ZXJtPU5PTkUgY3Rlcm09Tk9ORSBjdGVybWZnPWJsYWNrIGN0ZXJtYmc9Tk9ORSBndWk9Tk9ORSBndWlmZz1iZyBndWliZz1OT05FCitlbHNlCisgIFN5bkNvbG9yIENvbW1lbnQJdGVybT1ib2xkIGN0ZXJtPU5PTkUgY3Rlcm1mZz1EYXJrQmx1ZSBjdGVybWJnPU5PTkUgZ3VpPU5PTkUgZ3VpZmc9Qmx1ZSBndWliZz1OT05FCisgIFN5bkNvbG9yIENvbnN0YW50CXRlcm09dW5kZXJsaW5lIGN0ZXJtPU5PTkUgY3Rlcm1mZz1EYXJrUmVkIGN0ZXJtYmc9Tk9ORSBndWk9Tk9ORSBndWlmZz1NYWdlbnRhIGd1aWJnPU5PTkUKKyAgU3luQ29sb3IgU3BlY2lhbAl0ZXJtPWJvbGQgY3Rlcm09Tk9ORSBjdGVybWZnPURhcmtNYWdlbnRhIGN0ZXJtYmc9Tk9ORSBndWk9Tk9ORSBndWlmZz1TbGF0ZUJsdWUgZ3VpYmc9Tk9ORQorICBTeW5Db2xvciBJZGVudGlmaWVyCXRlcm09dW5kZXJsaW5lIGN0ZXJtPU5PTkUgY3Rlcm1mZz1EYXJrQ3lhbiBjdGVybWJnPU5PTkUgZ3VpPU5PTkUgZ3VpZmc9RGFya0N5YW4gZ3VpYmc9Tk9ORQorICBTeW5Db2xvciBTdGF0ZW1lbnQJdGVybT1ib2xkIGN0ZXJtPU5PTkUgY3Rlcm1mZz1Ccm93biBjdGVybWJnPU5PTkUgZ3VpPWJvbGQgZ3VpZmc9QnJvd24gZ3VpYmc9Tk9ORQorICBTeW5Db2xvciBQcmVQcm9jCXRlcm09dW5kZXJsaW5lIGN0ZXJtPU5PTkUgY3Rlcm1mZz1EYXJrTWFnZW50YSBjdGVybWJnPU5PTkUgZ3VpPU5PTkUgZ3VpZmc9UHVycGxlIGd1aWJnPU5PTkUKKyAgU3luQ29sb3IgVHlwZQkJdGVybT11bmRlcmxpbmUgY3Rlcm09Tk9ORSBjdGVybWZnPURhcmtHcmVlbiBjdGVybWJnPU5PTkUgZ3VpPWJvbGQgZ3VpZmc9U2VhR3JlZW4gZ3VpYmc9Tk9ORQorICBTeW5Db2xvciBVbmRlcmxpbmVkCXRlcm09dW5kZXJsaW5lIGN0ZXJtPXVuZGVybGluZSBjdGVybWZnPURhcmtNYWdlbnRhIGd1aT11bmRlcmxpbmUgZ3VpZmc9U2xhdGVCbHVlCisgIFN5bkNvbG9yIElnbm9yZQl0ZXJtPU5PTkUgY3Rlcm09Tk9ORSBjdGVybWZnPXdoaXRlIGN0ZXJtYmc9Tk9ORSBndWk9Tk9ORSBndWlmZz1iZyBndWliZz1OT05FCitlbmRpZgorU3luQ29sb3IgRXJyb3IJCXRlcm09cmV2ZXJzZSBjdGVybT1OT05FIGN0ZXJtZmc9V2hpdGUgY3Rlcm1iZz1SZWQgZ3VpPU5PTkUgZ3VpZmc9V2hpdGUgZ3VpYmc9UmVkCitTeW5Db2xvciBUb2RvCQl0ZXJtPXN0YW5kb3V0IGN0ZXJtPU5PTkUgY3Rlcm1mZz1CbGFjayBjdGVybWJnPVllbGxvdyBndWk9Tk9ORSBndWlmZz1CbHVlIGd1aWJnPVllbGxvdworCisiIENvbW1vbiBncm91cHMgdGhhdCBsaW5rIHRvIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBZb3UgY2FuIHNwZWNpZnkgb3RoZXIgaGlnaGxpZ2h0aW5nIGVhc2lseS4KK1N5bkxpbmsgU3RyaW5nCQlDb25zdGFudAorU3luTGluayBDaGFyYWN0ZXIJQ29uc3RhbnQKK1N5bkxpbmsgTnVtYmVyCQlDb25zdGFudAorU3luTGluayBCb29sZWFuCQlDb25zdGFudAorU3luTGluayBGbG9hdAkJTnVtYmVyCitTeW5MaW5rIEZ1bmN0aW9uCUlkZW50aWZpZXIKK1N5bkxpbmsgQ29uZGl0aW9uYWwJU3RhdGVtZW50CitTeW5MaW5rIFJlcGVhdAkJU3RhdGVtZW50CitTeW5MaW5rIExhYmVsCQlTdGF0ZW1lbnQKK1N5bkxpbmsgT3BlcmF0b3IJU3RhdGVtZW50CitTeW5MaW5rIEtleXdvcmQJCVN0YXRlbWVudAorU3luTGluayBFeGNlcHRpb24JU3RhdGVtZW50CitTeW5MaW5rIEluY2x1ZGUJCVByZVByb2MKK1N5bkxpbmsgRGVmaW5lCQlQcmVQcm9jCitTeW5MaW5rIE1hY3JvCQlQcmVQcm9jCitTeW5MaW5rIFByZUNvbmRpdAlQcmVQcm9jCitTeW5MaW5rIFN0b3JhZ2VDbGFzcwlUeXBlCitTeW5MaW5rIFN0cnVjdHVyZQlUeXBlCitTeW5MaW5rIFR5cGVkZWYJCVR5cGUKK1N5bkxpbmsgVGFnCQlTcGVjaWFsCitTeW5MaW5rIFNwZWNpYWxDaGFyCVNwZWNpYWwKK1N5bkxpbmsgRGVsaW1pdGVyCVNwZWNpYWwKK1N5bkxpbmsgU3BlY2lhbENvbW1lbnQJU3BlY2lhbAorU3luTGluayBEZWJ1ZwkJU3BlY2lhbAorCitkZWxjb21tYW5kIFN5bkNvbG9yCitkZWxjb21tYW5kIFN5bkxpbmsKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3N5bmxvYWQudmltIGIvcnVudGltZS9zeW50YXgvc3lubG9hZC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxNmJjMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3N5bmxvYWQudmltCkBAIC0wLDAgKzEsNjkgQEAKKyIgVmltIHN5bnRheCBzdXBwb3J0IGZpbGUKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWF5IDIxCisKKyIgVGhpcyBmaWxlIHNldHMgdXAgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcuCisiIEl0IGlzIGxvYWRlZCBmcm9tICJzeW50YXgudmltIiBhbmQgIm1hbnVhbC52aW0iLgorIiAxLiBTZXQgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0IGdyb3Vwcy4KKyIgMi4gSW5zdGFsbCBTeW50YXggYXV0b2NvbW1hbmRzIGZvciBhbGwgdGhlIGF2YWlsYWJsZSBzeW50YXggZmlsZXMuCisKK2lmICFoYXMoInN5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBsZXQgb3RoZXJzIGtub3cgdGhhdCBzeW50YXggaGFzIGJlZW4gc3dpdGNoZWQgb24KK2xldCBzeW50YXhfb24gPSAxCisKKyIgU2V0IHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZyBjb2xvcnMuICBVc2UgYSBjb2xvciBzY2hlbWUgaWYgc3BlY2lmaWVkLgoraWYgZXhpc3RzKCJjb2xvcnNfbmFtZSIpCisgIGV4ZSAiY29sb3JzICIgLiBjb2xvcnNfbmFtZQorZWxzZQorICBydW50aW1lISBzeW50YXgvc3luY29sb3IudmltCitlbmRpZgorCisiIExpbmUgY29udGludWF0aW9uIGlzIHVzZWQgaGVyZSwgcmVtb3ZlICdDJyBmcm9tICdjcG9wdGlvbnMnCitsZXQgczpjcG9fc2F2ZSA9ICZjcG8KK3NldCBjcG8mdmltCisKKyIgRmlyc3QgcmVtb3ZlIGFsbCBvbGQgc3ludGF4IGF1dG9jb21tYW5kcy4KK2F1ISBTeW50YXgKKworYXUgU3ludGF4ICoJCWNhbGwgczpTeW5TZXQoKQorCitmdW4hIHM6U3luU2V0KCkKKyAgIiBjbGVhciBzeW50YXggZm9yIDpzZXQgc3ludGF4PU9GRiAgYW5kIGFueSBzeW50YXggbmFtZSB0aGF0IGRvZXNuJ3QgZXhpc3QKKyAgc3luIGNsZWFyCisgIGlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgICAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorICBlbmRpZgorCisgIGxldCBzID0gZXhwYW5kKCI8YW1hdGNoPiIpCisgIGlmIHMgPT0gIk9OIgorICAgICIgOnNldCBzeW50YXg9T04KKyAgICBpZiAmZmlsZXR5cGUgPT0gIiIKKyAgICAgIGVjaG9obCBFcnJvck1zZworICAgICAgZWNobyAiZmlsZXR5cGUgdW5rbm93biIKKyAgICAgIGVjaG9obCBOb25lCisgICAgZW5kaWYKKyAgICBsZXQgcyA9ICZmaWxldHlwZQorICBlbmRpZgorCisgIGlmIHMgIT0gIiIKKyAgICAiIExvYWQgdGhlIHN5bnRheCBmaWxlKHMpCisiICAgaWYgaGFzKCJtYWMiKQorIiAgICAgZXhlICJydW50aW1lISBzeW50YXg6IiAuIHMgLiAiLnZpbSIKKyIgICBlbHNlCisgICAgICBleGUgInJ1bnRpbWUhIHN5bnRheC8iIC4gcyAuICIudmltIgorIiAgIGVuZGlmCisgIGVuZGlmCitlbmRmdW4KKworCisiIFNvdXJjZSB0aGUgdXNlci1zcGVjaWZpZWQgc3ludGF4IGhpZ2hsaWdodGluZyBmaWxlCitpZiBleGlzdHMoIm15c3ludGF4ZmlsZSIpICYmIGZpbGVyZWFkYWJsZShleHBhbmQobXlzeW50YXhmaWxlKSkKKyAgZXhlY3V0ZSAic291cmNlICIgLiBteXN5bnRheGZpbGUKK2VuZGlmCisKKyIgUmVzdG9yZSAnY3BvcHRpb25zJworbGV0ICZjcG8gPSBzOmNwb19zYXZlCit1bmxldCBzOmNwb19zYXZlCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zeW50YXgudmltIGIvcnVudGltZS9zeW50YXgvc3ludGF4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjc0ZDkzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvc3ludGF4LnZpbQpAQCAtMCwwICsxLDQzIEBACisiIFZpbSBzeW50YXggc3VwcG9ydCBmaWxlCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDAxIFNlcCAwNAorCisiIFRoaXMgZmlsZSBpcyB1c2VkIGZvciAiOnN5bnRheCBvbiIuCisiIEl0IGluc3RhbGxzIHRoZSBhdXRvY29tbWFuZHMgYW5kIHN0YXJ0cyBoaWdobGlnaHRpbmcgZm9yIGFsbCBidWZmZXJzLgorCitpZiAhaGFzKCJzeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgSWYgU3ludGF4IGhpZ2hsaWdodGluZyBhcHBlYXJzIHRvIGJlIG9uIGFscmVhZHksIHR1cm4gaXQgb2ZmIGZpcnN0LCBzbyB0aGF0CisiIGFueSBsZWZ0b3ZlcnMgYXJlIGNsZWFyZWQuCitpZiBleGlzdHMoInN5bnRheF9vbiIpIHx8IGV4aXN0cygic3ludGF4X21hbnVhbCIpCisgIHNvIDxzZmlsZT46cDpoL25vc3ludGF4LnZpbQorZW5kaWYKKworIiBMb2FkIHRoZSBTeW50YXggYXV0b2NvbW1hbmRzIGFuZCBzZXQgdGhlIGRlZmF1bHQgbWV0aG9kcyBmb3IgaGlnaGxpZ2h0aW5nLgorcnVudGltZSBzeW50YXgvc3lubG9hZC52aW0KKworIiBMb2FkIHRoZSBGaWxlVHlwZSBhdXRvY29tbWFuZHMgaWYgbm90IGRvbmUgeWV0LgoraWYgZXhpc3RzKCJkaWRfbG9hZF9maWxldHlwZXMiKQorICBsZXQgczpkaWRfZnQgPSAxCitlbHNlCisgIGZpbGV0eXBlIG9uCisgIGxldCBzOmRpZF9mdCA9IDAKK2VuZGlmCisKKyIgU2V0IHVwIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gRmlsZVR5cGUgYW5kIFN5bnRheCBhdXRvY29tbWFuZHMuCisiIFRoaXMgbWFrZXMgdGhlIHN5bnRheCBhdXRvbWF0aWNhbGx5IHNldCB3aGVuIHRoZSBmaWxlIHR5cGUgaXMgZGV0ZWN0ZWQuCithdWdyb3VwIHN5bnRheHNldAorICBhdSEgRmlsZVR5cGUgKglleGUgInNldCBzeW50YXg9IiAuIGV4cGFuZCgiPGFtYXRjaD4iKQorYXVncm91cCBFTkQKKworCisiIEV4ZWN1dGUgdGhlIHN5bnRheCBhdXRvY29tbWFuZHMgZm9yIHRoZSBlYWNoIGJ1ZmZlci4KKyIgSWYgdGhlIGZpbGV0eXBlIHdhc24ndCBkZXRlY3RlZCB5ZXQsIGRvIHRoYXQgbm93LgorIiBBbHdheXMgZG8gdGhlIHN5bnRheHNldCBhdXRvY29tbWFuZHMsIGZvciBidWZmZXJzIHdoZXJlIHRoZSAnZmlsZXR5cGUnCisiIGFscmVhZHkgd2FzIHNldCBtYW51YWxseSAoZS5nLiwgaGVscCBidWZmZXJzKS4KK2RvYXV0b2FsbCBzeW50YXhzZXQgRmlsZVR5cGUKK2lmICFzOmRpZF9mdAorICBkb2F1dG9hbGwgZmlsZXR5cGVkZXRlY3QgQnVmUmVhZAorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3RhZHMudmltIGIvcnVudGltZS9zeW50YXgvdGFkcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmZmU2ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3RhZHMudmltCkBAIC0wLDAgKzEsMTg0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJVEFEUworIiBNYWludGFpbmVyOglBbWlyIEthcmdlciA8a2FyZ2VyQHBvc3QuaGFydmFyZC5lZHU+CisiICREYXRlJAorIiAkUmV2aXNpb24kCisiIFN0b2xlbiBmcm9tOiBCcmFtIE1vb2xlbmFhcidzIEMgbGFuZ3VhZ2UgZmlsZQorIiBOZXdlc3QgdmVyc2lvbiBhdDogaHR0cDovL3d3dy5oZWMudXRhaC5lZHUvfmthcmdlci92aW0vc3ludGF4L3RhZHMudmltCisiIEhpc3RvcnkgaW5mbyBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlCisKKyIgVE9ETyBsb3RzIG1vcmUga2V5d29yZHMKKyIgZ2xvYmFsLCBzZWxmLCBldGMuIGFyZSBzcGVjaWFsICpvYmplY3RzKiwgbm90IGZ1bmN0aW9ucy4gVGhleSBzaG91bGQKKyIgcHJvYmFibHkgYmUgYSBkaWZmZXJlbnQgY29sb3IgdGhhbiB0aGUgc3BlY2lhbCBmdW5jdGlvbnMKKyIgQWN0dWFsbHksIHNob3VsZCBjdnRzdHIgZXRjLiBiZSBmdW5jdGlvbnM/ISAoY2hhbmdlIHRhZHNGdW5jdGlvbikKKyIgTWFrZSBnbG9iYWwgZXRjLiBpbnRvIElkZW50aWZpZXJzLCBzaW5jZSB3ZSBkb24ndCBoYXZlIHJlZ3VsYXIgdmFyaWFibGVzPworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgQSBidW5jaCBvZiB1c2VmdWwga2V5d29yZHMKK3N5biBrZXl3b3JkIHRhZHNTdGF0ZW1lbnQJZ290byBicmVhayByZXR1cm4gY29udGludWUgcGFzcworc3luIGtleXdvcmQgdGFkc0xhYmVsCQljYXNlIGRlZmF1bHQKK3N5biBrZXl3b3JkIHRhZHNDb25kaXRpb25hbAlpZiBlbHNlIHN3aXRjaAorc3luIGtleXdvcmQgdGFkc1JlcGVhdAkJd2hpbGUgZm9yIGRvCitzeW4ga2V5d29yZCB0YWRzU3RvcmFnZUNsYXNzCWxvY2FsIGNvbXBvdW5kV29yZCBmb3JtYXRzdHJpbmcgc3BlY2lhbFdvcmRzCitzeW4ga2V5d29yZCB0YWRzQm9vbGVhbgkJbmlsIHRydWUKKworIiBUQURTIGtleXdvcmRzCitzeW4ga2V5d29yZCB0YWRzS2V5d29yZAkJcmVwbGFjZSBtb2RpZnkKK3N5biBrZXl3b3JkIHRhZHNLZXl3b3JkCQlnbG9iYWwgc2VsZiBpbmhlcml0ZWQKKyIgYnVpbHRpbiBmdW5jdGlvbnMKK3N5biBrZXl3b3JkIHRhZHNLZXl3b3JkCQljdnRzdHIgY3Z0bnVtIGNhcHMgbG93ZXIgdXBwZXIgc3Vic3RyCitzeW4ga2V5d29yZCB0YWRzS2V5d29yZAkJc2F5IGxlbmd0aAorc3luIGtleXdvcmQgdGFkc0tleXdvcmQJCXNldGl0IHNldHNjb3JlCitzeW4ga2V5d29yZCB0YWRzS2V5d29yZAkJZGF0YXR5cGUgcHJvcHR5cGUKK3N5biBrZXl3b3JkIHRhZHNLZXl3b3JkCQljYXIgY2RyCitzeW4ga2V5d29yZCB0YWRzS2V5d29yZAkJZGVmaW5lZCBpc2NsYXNzCitzeW4ga2V5d29yZCB0YWRzS2V5d29yZAkJZmluZCBmaXJzdG9iaiBuZXh0b2JqCitzeW4ga2V5d29yZCB0YWRzS2V5d29yZAkJZ2V0YXJnIGFyZ2NvdW50CitzeW4ga2V5d29yZCB0YWRzS2V5d29yZAkJaW5wdXQgeW9ybiBhc2tmaWxlCitzeW4ga2V5d29yZCB0YWRzS2V5d29yZAkJcmFuZCByYW5kb21pemUKK3N5biBrZXl3b3JkIHRhZHNLZXl3b3JkCQlyZXN0YXJ0IHJlc3RvcmUgcXVpdCBzYXZlIHVuZG8KK3N5biBrZXl3b3JkIHRhZHNFeGNlcHRpb24JYWJvcnQgZXhpdCBleGl0b2JqCisKK3N5biBrZXl3b3JkIHRhZHNUb2RvIGNvbnRhaW5lZAlUT0RPIEZJWE1FIFhYWAorCisiIFN0cmluZyBhbmQgQ2hhcmFjdGVyIGNvbnN0YW50cworIiBIaWdobGlnaHQgc3BlY2lhbCBjaGFyYWN0ZXJzICh0aG9zZSB3aGljaCBoYXZlIGEgYmFja3NsYXNoKSBkaWZmZXJlbnRseQorc3luIG1hdGNoIHRhZHNTcGVjaWFsIGNvbnRhaW5lZAkiXFwuIgorc3luIHJlZ2lvbiB0YWRzRG91YmxlU3RyaW5nCQlzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPXRhZHNTcGVjaWFsLHRhZHNFbWJlZGRlZAorc3luIHJlZ2lvbiB0YWRzU2luZ2xlU3RyaW5nCQlzdGFydD0rJysgc2tpcD0rXFxcXFx8XFwnKyBlbmQ9KycrIGNvbnRhaW5zPXRhZHNTcGVjaWFsCisiIEVtYmVkZGVkIGV4cHJlc3Npb25zIGluIHN0cmluZ3MKK3N5biByZWdpb24gdGFkc0VtYmVkZGVkIGNvbnRhaW5lZCAgICAgICBzdGFydD0iPDwiIGVuZD0iPj4iIGNvbnRhaW5zPXRhZHNLZXl3b3JkCisKKyIgVEFEUyBkb2Vzbid0IGhhdmUgXHh4eCwgcmlnaHQ/Cisic3luIG1hdGNoIGNTcGVjaWFsIGNvbnRhaW5lZAkiXFxbMC03XVswLTddWzAtN11cPVx8XFwuIgorInN5biBtYXRjaCBjU3BlY2lhbENoYXJhY3RlcgkiJ1xcWzAtN11bMC03XSciCisic3luIG1hdGNoIGNTcGVjaWFsQ2hhcmFjdGVyCSInXFxbMC03XVswLTddWzAtN10nIgorCisiY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcworInN5biByZWdpb24gY1BhcmVuCQl0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsY1BhcmVuRXJyb3IsY0luY2x1ZGVkLGNTcGVjaWFsLGNUb2RvLGNVc2VyQ29udCxjVXNlckxhYmVsCisic3luIG1hdGNoIGNQYXJlbkVycm9yCQkiKSIKKyJzeW4gbWF0Y2ggY0luUGFyZW4gY29udGFpbmVkCSJbe31dIgorc3luIHJlZ2lvbiB0YWRzQnJhY2UJCXRyYW5zcGFyZW50IHN0YXJ0PSd7JyBlbmQ9J30nIGNvbnRhaW5zPUFMTEJVVCx0YWRzQnJhY2VFcnJvcix0YWRzSW5jbHVkZWQsdGFkc1NwZWNpYWwsdGFkc1RvZG8KK3N5biBtYXRjaCB0YWRzQnJhY2VFcnJvcgkJIn0iCisKKyJpbnRlZ2VyIG51bWJlciAoVEFEUyBoYXMgbm8gZmxvYXRpbmcgcG9pbnQgbnVtYmVycykKK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoIHRhZHNOdW1iZXIJCSJcPFswLTldXCtcPiIKKyJoZXggbnVtYmVyCitzeW4gbWF0Y2ggdGFkc051bWJlcgkJIlw8MHhbMC05YS1mXVwrXD4iCitzeW4gbWF0Y2ggdGFkc0lkZW50aWZpZXIJIlw8W2Etel1bYS16MC05XyRdKlw+Igorc3luIGNhc2UgbWF0Y2gKKyIgZmxhZyBhbiBvY3RhbCBudW1iZXIgd2l0aCB3cm9uZyBkaWdpdHMKK3N5biBtYXRjaCB0YWRzT2N0YWxFcnJvcgkJIlw8MFswLTddKls4OV0iCisKKyIgUmVtb3ZlZCBjb21wbGljYXRlZCBjX2NvbW1lbnRfc3RyaW5ncworc3luIHJlZ2lvbiB0YWRzQ29tbWVudAkJc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPXRhZHNUb2RvCitzeW4gbWF0Y2ggdGFkc0NvbW1lbnQJCSIvLy4qIiBjb250YWlucz10YWRzVG9kbworc3ludGF4IG1hdGNoIHRhZHNDb21tZW50RXJyb3IJIlwqLyIKKworc3luIHJlZ2lvbiB0YWRzUHJlQ29uZGl0CXN0YXJ0PSJeXHMqI1xzKlwoaWZcPlx8aWZkZWZcPlx8aWZuZGVmXD5cfGVsaWZcPlx8ZWxzZVw+XHxlbmRpZlw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10YWRzQ29tbWVudCx0YWRzU3RyaW5nLHRhZHNOdW1iZXIsdGFkc0NvbW1lbnRFcnJvcgorc3luIHJlZ2lvbiB0YWRzSW5jbHVkZWQgY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisKK3N5biBtYXRjaCB0YWRzSW5jbHVkZWQgY29udGFpbmVkICI8W14+XSo+Igorc3luIG1hdGNoIHRhZHNJbmNsdWRlCQkiXlxzKiNccyppbmNsdWRlXD5ccypbIjxdIiBjb250YWlucz10YWRzSW5jbHVkZWQKK3N5biByZWdpb24gdGFkc0RlZmluZQkJc3RhcnQ9Il5ccyojXHMqXChkZWZpbmVcPlx8dW5kZWZcPlwpIiBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9QUxMQlVULHRhZHNQcmVDb25kaXQsdGFkc0luY2x1ZGVkLHRhZHNJbmNsdWRlLHRhZHNEZWZpbmUsdGFkc0luQnJhY2UsdGFkc0lkZW50aWZpZXIKKworc3luIHJlZ2lvbiB0YWRzUHJlUHJvYyBzdGFydD0iXlxzKiNccypcKHByYWdtYVw+XHxsaW5lXD5cfHdhcm5pbmdcPlx8d2Fyblw+XHxlcnJvclw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1BTExCVVQsdGFkc1ByZUNvbmRpdCx0YWRzSW5jbHVkZWQsdGFkc0luY2x1ZGUsdGFkc0RlZmluZSx0YWRzSW5QYXJlbix0YWRzSWRlbnRpZmllcgorCisiIEhpZ2hsaWdodCBVc2VyIExhYmVscworIiBUT0RPIGxhYmVscyBmb3IgZ290b3M/Cisic3luIHJlZ2lvbgljTXVsdGkJCXRyYW5zcGFyZW50IHN0YXJ0PSc/JyBlbmQ9JzonIGNvbnRhaW5zPUFMTEJVVCxjSW5jbHVkZWQsY1NwZWNpYWwsY1RvZG8sY1VzZXJDb250LGNVc2VyTGFiZWwsY0JpdEZpZWxkCisiIEF2b2lkIG1hdGNoaW5nIGZvbzo6YmFyKCkgaW4gQysrIGJ5IHJlcXVpcmluZyB0aGF0IHRoZSBuZXh0IGNoYXIgaXMgbm90ICc6JworInN5biBtYXRjaAljVXNlckNvbnQJIl5ccypcSVxpKlxzKjokIiBjb250YWlucz1jVXNlckxhYmVsCisic3luIG1hdGNoCWNVc2VyQ29udAkiO1xzKlxJXGkqXHMqOiQiIGNvbnRhaW5zPWNVc2VyTGFiZWwKKyJzeW4gbWF0Y2gJY1VzZXJDb250CSJeXHMqXElcaSpccyo6W146XSIgY29udGFpbnM9Y1VzZXJMYWJlbAorInN5biBtYXRjaAljVXNlckNvbnQJIjtccypcSVxpKlxzKjpbXjpdIiBjb250YWlucz1jVXNlckxhYmVsCisKKyJzeW4gbWF0Y2gJY1VzZXJMYWJlbAkiXElcaSoiIGNvbnRhaW5lZAorCisiIGlkZW50aWZpZXI6IGNsYXNzLW5hbWUgWywgY2xhc3MtbmFtZSBbLi4uXV0gW3Byb3BlcnR5LWxpc3RdIDsKKyIgRG9uJ3QgaGlnaGxpZ2h0IGNvbW1lbnQgaW4gY2xhc3MgZGVmCitzeW4gbWF0Y2ggdGFkc0NsYXNzRGVmCQkiXDxjbGFzc1w+W14vXSoiIGNvbnRhaW5zPXRhZHNPYmplY3REZWYsdGFkc0NsYXNzCitzeW4gbWF0Y2ggdGFkc0NsYXNzIGNvbnRhaW5lZCAgICJcPGNsYXNzXD4iCitzeW4gbWF0Y2ggdGFkc09iamVjdERlZiAiXDxbYS16QS1aXVthLXpBLVowLTlfJF0qXHMqOlxzKlthLXpBLVowLTlfJF1cK1woXHMqLFxzKlthLXpBLVpdW2EtekEtWjAtOV8kXSpcKSpcKFxzKjtcKVw9Igorc3luIGtleXdvcmQgdGFkc0Z1bmN0aW9uIGNvbnRhaW5lZCBmdW5jdGlvbgorc3luIG1hdGNoIHRhZHNGdW5jdGlvbkRlZgkgIlw8W2EtekEtWl1bYS16QS1aMC05XyRdKlxzKjpccypmdW5jdGlvbltee10qIiBjb250YWlucz10YWRzRnVuY3Rpb24KKyJzeW4gcmVnaW9uIHRhZHNPYmplY3QJCSAgdHJhbnNwYXJlbnQgc3RhcnQgPSAnW2EtekEtWl1bXGkkXVxzKjpccyonIGVuZD0iOyIgY29udGFpbnM9dGFkc0JyYWNlLHRhZHNPYmplY3REZWYKKworIiBIb3cgZmFyIGJhY2sgZG8gd2UgZ28gdG8gZmluZCBtYXRjaGluZyBncm91cHMKK2lmICFleGlzdHMoInRhZHNfbWlubGluZXMiKQorICBsZXQgdGFkc19taW5saW5lcyA9IDE1CitlbmRpZgorZXhlYyAic3luIHN5bmMgY2NvbW1lbnQgdGFkc0NvbW1lbnQgbWlubGluZXM9IiAuIHRhZHNfbWlubGluZXMKK2lmICFleGlzdHMoInRhZHNfc3luY19kaXN0IikKKyAgbGV0IHRhZHNfc3luY19kaXN0ID0gMTAwCitlbmRpZgorZXhlY3V0ZSAic3luIHN5bmMgbWF4bGluZXM9IiAuIHRhZHNfc3luY19kaXN0CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3RhZHNfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfdGFkc19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgICIgVGhlIGRlZmF1bHQgbWV0aG9kcyBmb3IgaGlnaGxpZ2h0aW5nLiAgQ2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIKKyAgSGlMaW5rIHRhZHNGdW5jdGlvbkRlZiBGdW5jdGlvbgorICBIaUxpbmsgdGFkc0Z1bmN0aW9uICBTdHJ1Y3R1cmUKKyAgSGlMaW5rIHRhZHNDbGFzcyAgICAgU3RydWN0dXJlCisgIEhpTGluayB0YWRzQ2xhc3NEZWYgIElkZW50aWZpZXIKKyAgSGlMaW5rIHRhZHNPYmplY3REZWYgSWRlbnRpZmllcgorIiBubyBoaWdobGlnaHQgZm9yIHRhZHNFbWJlZGRlZCwgc28gaXQgcHJpbnRzIGFzIG5vcm1hbCB0ZXh0IHcvaW4gdGhlIHN0cmluZworCisgIEhpTGluayB0YWRzT3BlcmF0b3IJT3BlcmF0b3IKKyAgSGlMaW5rIHRhZHNTdHJ1Y3R1cmUJU3RydWN0dXJlCisgIEhpTGluayB0YWRzVG9kbwlUb2RvCisgIEhpTGluayB0YWRzTGFiZWwJTGFiZWwKKyAgSGlMaW5rIHRhZHNDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgdGFkc1JlcGVhdAlSZXBlYXQKKyAgSGlMaW5rIHRhZHNFeGNlcHRpb24JRXhjZXB0aW9uCisgIEhpTGluayB0YWRzU3RhdGVtZW50CVN0YXRlbWVudAorICBIaUxpbmsgdGFkc1N0b3JhZ2VDbGFzcwlTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIHRhZHNLZXlXb3JkICAgS2V5d29yZAorICBIaUxpbmsgdGFkc1NwZWNpYWwJU3BlY2lhbENoYXIKKyAgSGlMaW5rIHRhZHNOdW1iZXIJTnVtYmVyCisgIEhpTGluayB0YWRzQm9vbGVhbglCb29sZWFuCisgIEhpTGluayB0YWRzRG91YmxlU3RyaW5nCXRhZHNTdHJpbmcKKyAgSGlMaW5rIHRhZHNTaW5nbGVTdHJpbmcJdGFkc1N0cmluZworCisgIEhpTGluayB0YWRzT2N0YWxFcnJvcgl0YWRzRXJyb3IKKyAgSGlMaW5rIHRhZHNDb21tZW50RXJyb3IJdGFkc0Vycm9yCisgIEhpTGluayB0YWRzQnJhY2VFcnJvcgl0YWRzRXJyb3IKKyAgSGlMaW5rIHRhZHNJbkJyYWNlCXRhZHNFcnJvcgorICBIaUxpbmsgdGFkc0Vycm9yCUVycm9yCisKKyAgSGlMaW5rIHRhZHNJbmNsdWRlCUluY2x1ZGUKKyAgSGlMaW5rIHRhZHNQcmVQcm9jCVByZVByb2MKKyAgSGlMaW5rIHRhZHNEZWZpbmUJTWFjcm8KKyAgSGlMaW5rIHRhZHNJbmNsdWRlZAl0YWRzU3RyaW5nCisgIEhpTGluayB0YWRzUHJlQ29uZGl0CVByZUNvbmRpdAorCisgIEhpTGluayB0YWRzU3RyaW5nCVN0cmluZworICBIaUxpbmsgdGFkc0NvbW1lbnQJQ29tbWVudAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInRhZHMiCisKKyIgQ2hhbmdlczoKKyIgMTEvMTgvOTkgQWRkZWQgYSBidW5jaCBvZiBUQURTIGZ1bmN0aW9ucywgdGFkc0V4Y2VwdGlvbgorIiAxMC8yMi85OSBNaXNzcGVsbGVkIE1vb2xlbmFhciAoc29ycnkhKSwgY19taW5saW5lcyB0byB0YWRzX21pbmxpbmVzCisiCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvdGFncy52aW0gYi9ydW50aW1lL3N5bnRheC90YWdzLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDg3YzJiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdGFncy52aW0KQEAgLTAsMCArMSw0NyBAQAorIiBMYW5ndWFnZToJCXRhZ3MKKyIgTWFpbnRhaW5lcjoJRHIuIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiAgPE5kck9jaGlwQFBjYW1wYmVsbEFmYW1pbHkuTWJpej4KKyIgTGFzdCBDaGFuZ2U6CU5vdiAxOCwgMjAwMgorIiBWZXJzaW9uOgkJMgorIiBVUkw6CWh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCN2aW1saW5rc19zeW50YXgKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gbWF0Y2gJdGFnTmFtZQkiXlteXHRdXCsiCQlza2lwd2hpdGUJbmV4dGdyb3VwPXRhZ1BhdGgKK3N5biBtYXRjaAl0YWdQYXRoCSJbXlx0XVwrIgljb250YWluZWQJc2tpcHdoaXRlCW5leHRncm91cD10YWdBZGRyCWNvbnRhaW5zPXRhZ0Jhc2VGaWxlCitzeW4gbWF0Y2gJdGFnQmFzZUZpbGUJIlthLXpBLVpfXVwrW1wuYS16QS1aXzAtOV0qXHQibWU9ZS0xCQljb250YWluZWQKK3N5biBtYXRjaAl0YWdBZGRyCSJcZCoiCWNvbnRhaW5lZCBza2lwd2hpdGUgbmV4dGdyb3VwPXRhZ0NvbW1lbnQKK3N5biByZWdpb24JdGFnQWRkcgltYXRjaGdyb3VwPXRhZ0RlbGltIHN0YXJ0PSIvIiBza2lwPSJcKFxcXFxcKSpcXC8iIG1hdGNoZ3JvdXA9dGFnRGVsaW0gZW5kPSIkXHwvIiBvbmVsaW5lIGNvbnRhaW5lZCBza2lwd2hpdGUgbmV4dGdyb3VwPXRhZ0NvbW1lbnQKK3N5biBtYXRjaAl0YWdDb21tZW50CSI7LiokIgljb250YWluZWQgY29udGFpbnM9dGFnRmllbGQKK3N5biBtYXRjaAl0YWdDb21tZW50CSJeIV9UQUdfLiokIgorc3luIG1hdGNoCXRhZ0ZpZWxkCWNvbnRhaW5lZCAiW2Etel0qOiIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfZHJjaGlwX3RhZ3NfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9kcmNoaXBfdGFnc19pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHRhZ0Jhc2VGaWxlCVByZVByb2MKKyAgSGlMaW5rIHRhZ0NvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgdGFnRGVsaW0JRGVsaW1pdGVyCisgIEhpTGluayB0YWdGaWVsZAlOdW1iZXIKKyAgSGlMaW5rIHRhZ05hbWUJSWRlbnRpZmllcgorICBIaUxpbmsgdGFnUGF0aAlQcmVQcm9jCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInRhZ3MiCisKKyIgdmltOiB0cz0xMgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvdGFrLnZpbSBiL3J1bnRpbWUvc3ludGF4L3Rhay52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxODZkYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3Rhay52aW0KQEAgLTAsMCArMSwxMzYgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgVEFLMiwgVEFLMywgVEFLMjAwMCB0aGVybWFsIG1vZGVsaW5nIGlucHV0IGZpbGUKKyIgTWFpbnRhaW5lcjogICBBZHJpYW4gTmFnbGUsIGFuYWdsZUBiYWxsLmNvbQorIiBMYXN0IENoYW5nZTogIDIwMDMgTWF5IDExCisiIEZpbGVuYW1lczogICAgKi50YWsKKyIgVVJMOgkJaHR0cDovL3d3dy5uYWdsZW5ldC5vcmcvdmltL3N5bnRheC90YWsudmltCisiIE1BSU4gVVJMOiAgICAgaHR0cDovL3d3dy5uYWdsZW5ldC5vcmcvdmltLworCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisKKworIiBJZ25vcmUgY2FzZQorc3luIGNhc2UgaWdub3JlCisKKworCisiCisiCisiIEJlZ2luIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGFrIGlucHV0IGZpbGUuCisiCisKKyIgRm9yY2UgZnJlZS1mb3JtIGZvcnRyYW4gZm9ybWF0CitsZXQgZm9ydHJhbl9mcmVlX3NvdXJjZT0xCisKKyIgTG9hZCBGT1JUUkFOIHN5bnRheCBmaWxlCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9mb3J0cmFuLnZpbQorZWxzZQorICBydW50aW1lISBzeW50YXgvZm9ydHJhbi52aW0KK2VuZGlmCit1bmxldCBiOmN1cnJlbnRfc3ludGF4CisKKworCisiIERlZmluZSBrZXl3b3JkcyBmb3IgVEFLIGFuZCBUQUtPVVQKK3N5biBrZXl3b3JkIHRha09wdGlvbnMgIEFVVE9EQU1QIENQUklOVCBDU0dEVU1QIEdQUklOVCBIUFJJTlQgTE9EVE1QCitzeW4ga2V5d29yZCB0YWtPcHRpb25zICBMT0dJQyBMUFJJTlQgTkNWUFJJTlQgUExPVFEgUVBSSU5UIFFEVU1QCitzeW4ga2V5d29yZCB0YWtPcHRpb25zICBTVU1NQVJZIFNPTFJUTiBVSUQgRElDVElPTkFSSUVTCisKK3N5biBrZXl3b3JkIHRha1JvdXRpbmUgIFNTSVRFUiBGV0RXUkQgRldEQkNLIEJDS1dSRAorCitzeW4ga2V5d29yZCB0YWtDb250cm9sICBBQlNaUk8gQkFDS1VQIERBTVAgRFRJTUVJIERUSU1FTCBEVElNRUggSUZDCitzeW4ga2V5d29yZCB0YWtDb250cm9sICBNQVhURU1QIE5MT09QUyBOTE9PUFQgTk9ERUxJU1QgT1VUUFVUIFBMT1QKK3N5biBrZXl3b3JkIHRha0NvbnRyb2wgIFNDQUxFIFNJR01BIFNTQ1JJVCBUSU1FTkQgVElNRU4gVElNRU8gVFJDUklUCitzeW4ga2V5d29yZCB0YWtDb250cm9sICBQTE9UCisKK3N5biBrZXl3b3JkIHRha1NvbGlkcyAgIFBMQVRFIENZTAorc3luIGtleXdvcmQgdGFrU29saWRzQXJnICAgSUQgTUFUTkFNIE5UWVBFIFRFTVAgWEwgWUwgWkwgSVNUUk4gSVNUUkcgTk5YCitzeW4ga2V5d29yZCB0YWtTb2xpZHNBcmcgICBOTlkgTk5aIElOQ1ggSU5DWSBJTkNaIElBSyBJQUMgRElGRiBBUklUSCBCT1VOCitzeW4ga2V5d29yZCB0YWtTb2xpZHNBcmcgICBSTUlOIFJNQVggQVhNQVggTk5SIE5OVEhFVEEgSU5DUiBJTkNUSEVUQSBFTkQKKworc3luIGNhc2UgaWdub3JlCisKK3N5biBrZXl3b3JkIHRha01hY3JvICAgIGZhYyBwc3RhcnQgcHN0b3AKK3N5biBrZXl3b3JkIHRha01hY3JvICAgIHRha2NvbW1vbiBmc3RhcnQgZnN0b3AKKworc3luIGtleXdvcmQgdGFrSWRlbnRpZmllciAgZmxxIGZseCBnZW4gbmN2IHBlciBzaW0gc2l2IHN0ZiBzdHYgdHZkIHR2cworc3luIGtleXdvcmQgdGFrSWRlbnRpZmllciAgdHZ0IHBybyB0aG0KKworCisKKyIgRGVmaW5lIG1hdGNoZXMgZm9yIFRBSworc3luIG1hdGNoICB0YWtGb3J0cmFuICAgICAiXkZbMC05IF0ibWU9ZS0xCitzeW4gbWF0Y2ggIHRha01vdHJhbiAgICAgICJeTVswLTkgXSJtZT1lLTEKKworc3luIG1hdGNoICB0YWtDb21tZW50ICAgICAiXkMuKiQiCitzeW4gbWF0Y2ggIHRha0NvbW1lbnQgICAgICJeUi4qJCIKK3N5biBtYXRjaCAgdGFrQ29tbWVudCAgICAgIlwkLiokIgorCitzeW4gbWF0Y2ggIHRha0hlYWRlciAgICAgICJeaGVhZGVyW14sXSoiCisKK3N5biBtYXRjaCAgdGFrSW5jbHVkZUZpbGUgImluY2x1ZGUgXCtbXiBdXCsiaHM9cys4IGNvbnRhaW5zPWZvcnRyYW5JbmNsdWRlCisKK3N5biBtYXRjaCAgdGFrSW50ZWdlciAgICAgIi1cPVw8WzAtOV0qXD4iCitzeW4gbWF0Y2ggIHRha0Zsb2F0ICAgICAgICItXD1cPFswLTldKlwuWzAtOV0qIgorc3luIG1hdGNoICB0YWtTY2llbnRpZmljICAiLVw9XDxbMC05XSpcLlswLTldKkVbLStdXD1bMC05XVwrXD4iCisKK3N5biBtYXRjaCAgdGFrRW5kRGF0YSAgICAgIkVORCBPRiBEQVRBIgorCitpZiBleGlzdHMoInRoZXJtYWxfdG9kbyIpCisgIGV4ZWN1dGUgJ3N5biBtYXRjaCAgdGFrVG9kbyAnIC4gJyJeJy50aGVybWFsX3RvZG8uJy4qJCInCitlbHNlCisgIHN5biBtYXRjaCAgdGFrVG9kbwkgICAgIl4/LiokIgorZW5kaWYKKworCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfdGFrX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3Rha19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB0YWtNYWNybwkJTWFjcm8KKyAgSGlMaW5rIHRha09wdGlvbnMJCVNwZWNpYWwKKyAgSGlMaW5rIHRha1JvdXRpbmUJCVR5cGUKKyAgSGlMaW5rIHRha0NvbnRyb2wJCVNwZWNpYWwKKyAgSGlMaW5rIHRha1NvbGlkcwkJU3BlY2lhbAorICBIaUxpbmsgdGFrU29saWRzQXJnCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHRha0lkZW50aWZpZXIJCUlkZW50aWZpZXIKKworICBIaUxpbmsgdGFrRm9ydHJhbgkJUHJlUHJvYworICBIaUxpbmsgdGFrTW90cmFuCQlQcmVQcm9jCisKKyAgSGlMaW5rIHRha0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHRha0hlYWRlcgkJVHlwZWRlZgorICBIaUxpbmsgdGFrSW5jbHVkZUZpbGUJCVR5cGUKKyAgSGlMaW5rIHRha0ludGVnZXIJCU51bWJlcgorICBIaUxpbmsgdGFrRmxvYXQJCUZsb2F0CisgIEhpTGluayB0YWtTY2llbnRpZmljCQlGbG9hdAorCisgIEhpTGluayB0YWtFbmREYXRhCQlNYWNybworCisgIEhpTGluayB0YWtUb2RvCQlUb2RvCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidGFrIgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90YWtjbXAudmltIGIvcnVudGltZS9zeW50YXgvdGFrY21wLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTQ2MDliCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdGFrY21wLnZpbQpAQCAtMCwwICsxLDgyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIFRBSzIsIFRBSzMsIFRBSzIwMDAgdGhlcm1hbCBtb2RlbGluZyBjb21wYXJlIGZpbGUKKyIgTWFpbnRhaW5lcjogICBBZHJpYW4gTmFnbGUsIGFuYWdsZUBiYWxsLmNvbQorIiBMYXN0IENoYW5nZTogIDIwMDMgTWF5IDExCisiIEZpbGVuYW1lczogICAgKi5jbXAKKyIgVVJMOgkJaHR0cDovL3d3dy5uYWdsZW5ldC5vcmcvdmltL3N5bnRheC90YWtjbXAudmltCisiIE1BSU4gVVJMOiAgICAgaHR0cDovL3d3dy5uYWdsZW5ldC5vcmcvdmltLworCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisKKworIiBJZ25vcmUgY2FzZQorc3luIGNhc2UgaWdub3JlCisKKworCisiCisiCisiIEJlZ2luIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgY29tcGFyZSBmaWxlcy4KKyIKKyIgRGVmaW5lIGtleXdvcmRzIGZvciBUQUsgY29tcGFyZQorICBzeW4ga2V5d29yZCB0YWtjbXBVbml0ICAgICBjZWxzaXVzIGZhaHJlbmhlaXQKKworCisKKyIgRGVmaW5lIG1hdGNoZXMgZm9yIFRBSyBjb21wYXJlCisgIHN5biBtYXRjaCAgdGFrY21wVGl0bGUgICAgICAgIlN0ZWFkeSBTdGF0ZSBUZW1wZXJhdHVyZSBDb21wYXJpc29uIgorCisgIHN5biBtYXRjaCAgdGFrY21wTGFiZWwgICAgICAgIlJ1biBEYXRlOiIKKyAgc3luIG1hdGNoICB0YWtjbXBMYWJlbCAgICAgICAiUnVuIFRpbWU6IgorICBzeW4gbWF0Y2ggIHRha2NtcExhYmVsICAgICAgICJUZW1wLiBGaWxlIFxkIFVuaXRzOiIKKyAgc3luIG1hdGNoICB0YWtjbXBMYWJlbCAgICAgICAiRmlsZW5hbWU6IgorICBzeW4gbWF0Y2ggIHRha2NtcExhYmVsICAgICAgICJPdXRwdXQgVW5pdHM6IgorCisgIHN5biBtYXRjaCAgdGFrY21wSGVhZGVyICAgICAgIl4gKk5vZGVcKCAqRmlsZSAgXGRcKSogKk5vZGUgRGVzY3JpcHRpb24iCisKKyAgc3luIG1hdGNoICB0YWtjbXBEYXRlICAgICAgICAiXGRcZFwvXGRcZFwvXGRcZCIKKyAgc3luIG1hdGNoICB0YWtjbXBUaW1lICAgICAgICAiXGRcZDpcZFxkOlxkXGQiCisgIHN5biBtYXRjaCAgdGFrY21wSW50ZWdlciAgICAgIl4gKi1cPVw8WzAtOV0qXD4iCisgIHN5biBtYXRjaCAgdGFrY21wRmxvYXQgICAgICAgIi1cPVw8WzAtOV0qXC5bMC05XSoiCisKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcKKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3Rha2NtcF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF90YWtjbXBfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgdGFrY21wVGl0bGUJCSAgIFR5cGUKKyAgSGlMaW5rIHRha2NtcFVuaXQJCSAgIFByZVByb2MKKworICBIaUxpbmsgdGFrY21wTGFiZWwJCSAgIFN0YXRlbWVudAorCisgIEhpTGluayB0YWtjbXBIZWFkZXIJCSAgIHRha0hlYWRlcgorCisgIEhpTGluayB0YWtjbXBEYXRlCQkgICBJZGVudGlmaWVyCisgIEhpTGluayB0YWtjbXBUaW1lCQkgICBJZGVudGlmaWVyCisgIEhpTGluayB0YWtjbXBJbnRlZ2VyCQkgICBOdW1iZXIKKyAgSGlMaW5rIHRha2NtcEZsb2F0CQkgICBTcGVjaWFsCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidGFrY21wIgorCisiIHZpbTogdHM9OCBzdz0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90YWtvdXQudmltIGIvcnVudGltZS9zeW50YXgvdGFrb3V0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQzNTM5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdGFrb3V0LnZpbQpAQCAtMCwwICsxLDEwMiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBUQUsyLCBUQUszLCBUQUsyMDAwIHRoZXJtYWwgbW9kZWxpbmcgb3V0cHV0IGZpbGUKKyIgTWFpbnRhaW5lcjogICBBZHJpYW4gTmFnbGUsIGFuYWdsZUBiYWxsLmNvbQorIiBMYXN0IENoYW5nZTogIDIwMDMgTWF5IDExCisiIEZpbGVuYW1lczogICAgKi5vdXQKKyIgVVJMOgkJaHR0cDovL3d3dy5uYWdsZW5ldC5vcmcvdmltL3N5bnRheC90YWtvdXQudmltCisiIE1BSU4gVVJMOiAgICAgaHR0cDovL3d3dy5uYWdsZW5ldC5vcmcvdmltLworCisKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisKKworIiBJZ25vcmUgY2FzZQorc3luIGNhc2UgbWF0Y2gKKworCisKKyIgTG9hZCBUQUsgc3ludGF4IGZpbGUKK2lmIHZlcnNpb24gPCA2MDAKKyAgc291cmNlIDxzZmlsZT46cDpoL3Rhay52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L3Rhay52aW0KK2VuZGlmCit1bmxldCBiOmN1cnJlbnRfc3ludGF4CisKKworCisiCisiCisiIEJlZ2luIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGFrIG91dHB1dCBmaWxlcy4KKyIKKworIiBEZWZpbmUga2V5d29yZHMgZm9yIFRBSyBvdXRwdXQKK3N5biBjYXNlIG1hdGNoCisKK3N5biBrZXl3b3JkIHRha291dFBvcyAgICAgICBPTiBTSQorc3luIGtleXdvcmQgdGFrb3V0TmVnICAgICAgIE9GRiBFTkcKKworCisKKyIgRGVmaW5lIG1hdGNoZXMgZm9yIFRBSyBvdXRwdXQKK3N5biBtYXRjaCB0YWtvdXRUaXRsZQkgICAgICJUQUsgSUlJIgorc3luIG1hdGNoIHRha291dFRpdGxlCSAgICAgIlJlbGVhc2UgXGQuXGRcZCIKK3N5biBtYXRjaCB0YWtvdXRUaXRsZQkgICAgICIgSyAmIEsgIEFzc29jaWF0ZXMgKlRoZXJtYWwgQW5hbHlzaXMgS2l0IElJSSAqU2VyaWFsIE51bWJlciBcZFxkLVxkXGRcZCIKKworc3luIG1hdGNoIHRha291dEZpbGUJICAgICAiOiBcdypcLlRBSyJocz1zKzIKKworc3luIG1hdGNoIHRha291dEludGVnZXIgICAgICAiVFw9WzAtOV0qXD4ibXM9cysxCisKK3N5biBtYXRjaCB0YWtvdXRTZWN0aW9uRGVsaW0gIlstPD5dXHs0LH0iIGNvbnRhaW5zPXRha291dFNlY3Rpb25UaXRsZQorc3luIG1hdGNoIHRha291dFNlY3Rpb25EZWxpbSAiOlw9XC5cezQsfTpcPSIgY29udGFpbnM9dGFrb3V0U2VjdGlvblRpdGxlCitzeW4gbWF0Y2ggdGFrb3V0U2VjdGlvblRpdGxlICJbLTw6XSBcd1swLTlBLVphLXpfKCkgXVwrIFstPjpdImhzPXMrMSxtZT1lLTEKKworc3luIG1hdGNoIHRha291dEhlYWRlckRlbGltICAiPVx7NSx9Igorc3luIG1hdGNoIHRha291dEhlYWRlckRlbGltICAifFx7NSx9Igorc3luIG1hdGNoIHRha291dEhlYWRlckRlbGltICAiK1x7NSx9IgorCitzeW4gbWF0Y2ggdGFrb3V0TGFiZWwJICAgICAiSW5wdXQgRmlsZToiIGNvbnRhaW5zPXRha291dEZpbGUKK3N5biBtYXRjaCB0YWtvdXRMYWJlbAkgICAgICJCZWdpbiBTb2x1dGlvbjogUm91dGluZSIKKworc3luIG1hdGNoIHRha291dEVycm9yCSAgICAgIjw8PCBFcnJvciA+Pj4iCisKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF90YWtvdXRfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfdGFrb3V0X3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHRha291dFBvcwkJICAgU3RhdGVtZW50CisgIEhpTGluayB0YWtvdXROZWcJCSAgIFByZVByb2MKKyAgSGlMaW5rIHRha291dFRpdGxlCQkgICBUeXBlCisgIEhpTGluayB0YWtvdXRGaWxlCQkgICB0YWtJbmNsdWRlRmlsZQorICBIaUxpbmsgdGFrb3V0SW50ZWdlcgkJICAgdGFrSW50ZWdlcgorCisgIEhpTGluayB0YWtvdXRTZWN0aW9uRGVsaW0JICAgIERlbGltaXRlcgorICBIaUxpbmsgdGFrb3V0U2VjdGlvblRpdGxlCSAgIEV4Y2VwdGlvbgorICBIaUxpbmsgdGFrb3V0SGVhZGVyRGVsaW0JICAgU3BlY2lhbENvbW1lbnQKKyAgSGlMaW5rIHRha291dExhYmVsCQkgICBJZGVudGlmaWVyCisKKyAgSGlMaW5rIHRha291dEVycm9yCQkgICBFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInRha291dCIKKworIiB2aW06IHRzPTggc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvdGFzbS52aW0gYi9ydW50aW1lL3N5bnRheC90YXNtLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2ZjMTIxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdGFzbS52aW0KQEAgLTAsMCArMSwxMjIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiBUQVNNOiB0dXJibyBhc3NlbWJsZXIgYnkgQm9ybGFuZAorIiBNYWludGFuZXI6IEZvb0xtYW4gb2YgVW5pdGVkIEZvcmNlIDxmb29sbWFuQGJpZ2Zvb3QuY29tPgorIiBMYXN0IGNoYW5nZTogMjIgYXVnIDIwMDAKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCB0YXNtTGFiZWwgIl5bXCBcdF0qW0BhLXpfJF1bYS16MC05XyRAXSpcICo6Igorc3luIGtleXdvcmQgdGFzbURpcmVjdGl2ZSBBTElBUyBBTElHTiBBUkcgQVNTVU1FICVCSU4gQ0FUU1JUIENPREVTRUcKK3N5biBtYXRjaCB0YXNtRGlyZWN0aXZlICJcPFwoYnl0ZVx8d29yZFx8ZHdvcmRcfHF3b3JkXClcIHB0clw+IgorIiBDQUxMIGV4dGVuZGVkIHN5bnRheAorc3luIGtleXdvcmQgdGFzbURpcmVjdGl2ZSBDT01NICVDT05EUyBDT05TVCAlQ1JFRiAlQ1JFRkFMTCAlQ1JFRlJFRgorc3luIGtleXdvcmQgdGFzbURpcmVjdGl2ZSAlQ1JFRlVSRUYgJUNUTFMgREFUQVNFRyBEQiBERCAlREVQVEggREYgRElTUExBWQorc3luIGtleXdvcmQgdGFzbURpcmVjdGl2ZSBET1NTRUcgRFAgRFEgRFQgRFcgRUxTRSBFTVVMIEVORCBFTkRJRgorIiBJRiBYWFhYCitzeW4ga2V5d29yZCB0YXNtRGlyZWN0aXZlIEVORE0gRU5EUCBFTkRTIEVOVU0gRVFVIEVSUiBFVkVOIEVWRU5EQVRBIEVYSVRDT0RFCitzeW4ga2V5d29yZCB0YXNtRGlyZWN0aXZlIEVYSVRNIEVYVFJOIEZBUkRBVEEgRkFTVElNVUwgRkxJUEZMQUcgR0VURklFTEQgR0xPQkFMCitzeW4ga2V5d29yZCB0YXNtRGlyZWN0aXZlIEdPVE8gR1JPVVAgSURFQUwgJUlOQ0wgSU5DTFVERSBJTkNMVURFTElCIElOU1RSIElSUAorIkpNUAorc3luIGtleXdvcmQgdGFzbURpcmVjdGl2ZSBJUlBDIEpVTVBTIExBQkVMIExBUkdFU1RBQ0sgJUxJTlVNICVMSVNUIExPQ0FMCitzeW4ga2V5d29yZCB0YXNtRGlyZWN0aXZlIExPQ0FMUyBNQUNSTyAlTUFDUyBNQVNLRkxBRyBNQVNNIE1BU001MSBNT0RFTAorc3luIGtleXdvcmQgdGFzbURpcmVjdGl2ZSBNVUxURVJSUyBOQU1FICVORVdQQUdFICVOT0NPTkRTICVOT0NSRUYgJU5PQ1RMUworc3luIGtleXdvcmQgdGFzbURpcmVjdGl2ZSBOT0VNVUwgJU5PSU5DTCBOT0pVTVBTICVOT0xJU1QgTk9MT0NBTFMgJU5PTUFDUworc3luIGtleXdvcmQgdGFzbURpcmVjdGl2ZSBOT01BU001MSBOT01VTFRFUlJTIE5PU01BUlQgJU5PU1lNUyAlTk9UUlVOQyBOT1dBUk4KK3N5biBrZXl3b3JkIHRhc21EaXJlY3RpdmUgJVBBR0VTSVpFICVQQ05UIFBOTzg3ICVQT1BMQ1RMIFBPUFNUQVRFIFBST0MgUFJPQ0RFU0MKK3N5biBrZXl3b3JkIHRhc21EaXJlY3RpdmUgUFJPQ1RZUEUgUFVCTElDIFBVQkxJQ0RMTCBQVVJHRSAlUFVTSENUTCBQVVNIU1RBVEUKKyJyZXB0LCByZXQKK3N5biBrZXl3b3JkIHRhc21EaXJlY3RpdmUgUVVJUktTIFJBRElYIFJFQ09SRCBSRVRDT0RFIFNFR01FTlQgU0VURklFTEQKK3N5biBrZXl3b3JkIHRhc21EaXJlY3RpdmUgU0VURkxBRyBTSVpFU1RSIFNNQUxMU1RBQ0sgU01BUlQgU1RBQ0sgU1RBUlRVUENPREUKK3N5biBrZXl3b3JkIHRhc21EaXJlY3RpdmUgU1RSVUMgU1VCU1RSICVTVUJUVEwgJVNZTVMgVEFCTEUgJVRBQlNJWkUgVEJMSU5JVAorc3luIGtleXdvcmQgdGFzbURpcmVjdGl2ZSBUQkxJTlNUIFRCTFBUUiBURVNURkxBRyAlVEVYVCAlVElUTEUgJVRSVU5DIFRZUEVERUYKK3N5biBrZXl3b3JkIHRhc21EaXJlY3RpdmUgVURBVEFTRUcgVUZBUkRBVEEgVU5JT04gVVNFUyBWRVJTSU9OIFdBUiBXSElMRSA/REVCVUcKKworc3luIGtleXdvcmQgdGFzbUluc3RydWN0aW9uIEFBQSBBQUQgQUFNIEFBUyBBREMgQUREIEFORCBBUlBMIEJPVU5EIEJTRiBCU1IKK3N5biBrZXl3b3JkIHRhc21JbnN0cnVjdGlvbiBCU1dBUCBCVCBCVEMgQlRSIEJUUyBDQUxMIENCVyBDTEMgQ0xEIENMSSBDTFRTCitzeW4ga2V5d29yZCB0YXNtSW5zdHJ1Y3Rpb24gQ01DIENNUCBDTVBYQ0hHIENNUFhDSEc4QiBDUFVJRCBDV0QgQ0RRIENXREUKK3N5biBrZXl3b3JkIHRhc21JbnN0cnVjdGlvbiBEQUEgREFTIERFQyBESVYgRU5URVIgUkVUTiBSRVRGIEYyWE0xCitzeW4ga2V5d29yZCB0YXNtQ29wcm9jSW5zdHIgRkFCUyBGQUREIEZBRERQIEZCTEQgRkJTVFAgRkNIRyBGQ09NIEZDT00yIEZDT01JCitzeW4ga2V5d29yZCB0YXNtQ29wcm9jSW5zdHIgRkNPTUlQIEZDT01QIEZDT01QMyBGQ09NUDUgRkNPTVBQIEZDT1MgRkRFQ1NUUAorc3luIGtleXdvcmQgdGFzbUNvcHJvY0luc3RyIEZESVNJIEZESVYgRkRJVlAgRkRJVlIgRkVOSSBGRlJFRSBGRlJFRVAgRklBREQKK3N5biBrZXl3b3JkIHRhc21Db3Byb2NJbnN0ciBGSUNPTSBGSUNPTVAgRklESVYgRklESVZSIEZJTEQgRklNVUwgRklOSVQgRklOQ1NUUAorc3luIGtleXdvcmQgdGFzbUNvcHJvY0luc3RyIEZJU1QgRklTVFAgRklTVUIgRklTVUJSIEZMRCBGTEQxIEZMRENXIEZMREVOVgorc3luIGtleXdvcmQgdGFzbUNvcHJvY0luc3RyIEZMREwyRSBGTERMMlQgRkxETEcyIEZMRExOMiBGTERQSSBGTERaIEZNVUwgRk1VTFAKK3N5biBrZXl3b3JkIHRhc21Db3Byb2NJbnN0ciBGTkNMRVggRk5JTklUIEZOT1AgRk5TQVZFIEZOU1RDVyBGTlNURU5WIEZOU1RTVworc3luIGtleXdvcmQgdGFzbUNvcHJvY0luc3RyIEZQQVRBTiBGUFJFTSBGUFJFTTEgRlBUQU4gRlJORElOVCBGUlNUT1IgRlNDQUxFCitzeW4ga2V5d29yZCB0YXNtQ29wcm9jSW5zdHIgRlNFVFBNIEZTSU4gRlNJTkNPTSBGU1FSVCBGU1QgRlNUUCBGU1RQMSBGU1RQOAorc3luIGtleXdvcmQgdGFzbUNvcHJvY0luc3RyIEZTVFA5IEZTVUIgRlNVQlAgRlNVQlIgRlNVQlJQIEZUU1QgRlVDT00gRlVDT01JCitzeW4ga2V5d29yZCB0YXNtQ29wcm9jSW5zdHIgRlVDT01QUCBGV0FJVCBGWEFNIEZYQ0ggRlhDSDQgRlhDSDcgRlhUUkFDVCBGWUwyWAorc3luIGtleXdvcmQgdGFzbUNvcHJvY0luc3RyIEZZTDJYUDEgRlNUQ1cgRkNIUyBGU0lOQ09TCitzeW4ga2V5d29yZCB0YXNtSW5zdHJ1Y3Rpb24gSURJViBJTVVMIElOIElOQyBJTlQgSU5UTyBJTlZEIElOVkxQRyBJUkVUIEpNUAorc3luIGtleXdvcmQgdGFzbUluc3RydWN0aW9uIExBSEYgTEFSIExEUyBMRUEgTEVBVkUgTEVTIExGUyBMR0RUIExHUyBMSURUIExMRFQKK3N5biBrZXl3b3JkIHRhc21JbnN0cnVjdGlvbiBMTVNXIExPQ0sgTE9EU0IgTFNMIExTUyBMVFIgTU9WIE1PVlNYIE1PVlpYIE1VTAorc3luIGtleXdvcmQgdGFzbUluc3RydWN0aW9uIE5FRyBOT1AgTk9UIE9SIE9VVCBQT1AgUE9QQSBQT1BBRCBQT1BGIFBPUEZEIFBVU0gKK3N5biBrZXl3b3JkIHRhc21JbnN0cnVjdGlvbiBQVVNIQSBQVVNIQUQgUFVTSEYgUFVTSEZEIFJDTCBSQ1IgUkRNU1IgUkRQTUMgUkRUU0MKK3N5biBrZXl3b3JkIHRhc21JbnN0cnVjdGlvbiBSRVAgUkVUIFJPTCBST1IgUlNNIFNBSEYgU0FSIFNCQiBTR0RUIFNITCBTQUwgU0hMRAorc3luIGtleXdvcmQgdGFzbUluc3RydWN0aW9uIFNIUiBTSFJEIFNJRFQgU01TVyBTVEMgU1REIFNUSSBTVFIgU1VCIFRFU1QgVkVSUgorc3luIGtleXdvcmQgdGFzbUluc3RydWN0aW9uIFZFUlcgV0JJTlZEIFdSTVNSIFhBREQgWENIRyBYTEFUIFhPUgorc3luIGtleXdvcmQgdGFzbU1NWGluc3QgICAgIEVNTVMgTU9WRCBNT1ZRIFBBQ0tTU0RXIFBBQ0tTU1dCIFBBQ0tVU1dCIFBBRERCCitzeW4ga2V5d29yZCB0YXNtTU1YaW5zdCAgICAgUEFEREQgUEFERFNCIFBBRERTQiBQQUREU1cgUEFERFVTQiBQQUREVVNXIFBBRERXCitzeW4ga2V5d29yZCB0YXNtTU1YaW5zdCAgICAgUEFORCBQQU5ETiBQQ01QRVFCIFBDTVBFUUQgUENNUEVRVyBQQ01QR1RCIFBDTVBHVEQKK3N5biBrZXl3b3JkIHRhc21NTVhpbnN0ICAgICBQQ01QR1RXIFBNQUREV0QgUE1VTEhXIFBNVUxMVyBQT1IgUFNMTEQgUFNMTFEKK3N5biBrZXl3b3JkIHRhc21NTVhpbnN0ICAgICBQU0xMVyBQU1JBRCBQU1JBVyBQU1JMRCBQU1JMUSBQU1JMVyBQU1VCQiBQU1VCRAorc3luIGtleXdvcmQgdGFzbU1NWGluc3QgICAgIFBTVUJTQiBQU1VCU1cgUFNVQlVTQiBQU1VCVVNXIFBTVUJXIFBVTlBDS0hCVworc3luIGtleXdvcmQgdGFzbU1NWGluc3QgICAgIFBVTlBDS0hCUSBQVU5QQ0tIV0QgUFVOUENLTEJXIFBVTlBDS0xEUSBQVU5QQ0tMV0QKK3N5biBrZXl3b3JkIHRhc21NTVhpbnN0ICAgICBQWE9SCisiRkNNT1YKK3N5biBtYXRjaCB0YXNtSW5zdHJ1Y3Rpb24gIlw8XChDTVBTXHxNT1ZTXHxPVVRTXHxTQ0FTXHxTVE9TXHxMT0RTXHxJTlNcKVtCV0RdIgorc3luIG1hdGNoIHRhc21JbnN0cnVjdGlvbiAiXDxcKENNT1ZcfFNFVFx8SlwpTlw9W0FCQ0dMRVNYWl1cPiIKK3N5biBtYXRjaCB0YXNtSW5zdHJ1Y3Rpb24gIlw8XChDTU9WXHxTRVRcfEpcKU5cPVtBQkdMXUVcPiIKK3N5biBtYXRjaCB0YXNtSW5zdHJ1Y3Rpb24gIlw8XChMT09QXHxSRVBcKU5cPVtFWl1cPVw+Igorc3luIG1hdGNoIHRhc21SZWdpc3RlciAiXDxbQS1EXVtMSF1cPiIKK3N5biBtYXRjaCB0YXNtUmVnaXN0ZXIgIlw8RVw9XChbQS1EXVhcfFtTRF1JXHxbQlNdUFwpXD4iCitzeW4gbWF0Y2ggdGFzbVJlZ2lzdGVyICJcPFtDLUdTXVNcPiIKK3N5biByZWdpb24gdGFzbUNvbW1lbnQgc3RhcnQ9IjsiIGVuZD0iJCIKKyJIQUNLISBjb21tZW50ID8gLi4uIHNlbGVjdGlvbgorc3luIHJlZ2lvbiB0YXNtQ29tbWVudCBzdGFydD0iY29tbWVudCBcK1wkIiBlbmQ9IlwkIgorc3luIHJlZ2lvbiB0YXNtQ29tbWVudCBzdGFydD0iY29tbWVudCBcK1x+IiBlbmQ9Ilx+Igorc3luIHJlZ2lvbiB0YXNtQ29tbWVudCBzdGFydD0iY29tbWVudCBcKyMiIGVuZD0iIyIKK3N5biByZWdpb24gdGFzbVN0cmluZyBzdGFydD0iJyIgZW5kPSInIgorc3luIHJlZ2lvbiB0YXNtU3RyaW5nIHN0YXJ0PSciJyBlbmQ9JyInCisKK3N5biBtYXRjaCB0YXNtRGVjICJcPC1cPVswLTldXCtcLlw9WzAtOV0qXD4iCitzeW4gbWF0Y2ggdGFzbUhleCAiXDxbMC05XVswLTlBLUZdKkhcPiIKK3N5biBtYXRjaCB0YXNtT2N0ICJcPFswLTddXCtPXD4iCitzeW4gbWF0Y2ggdGFzbUJpbiAiXDxbMDFdXCtCXD4iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3Rhc21fc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfdGFzbV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB0YXNtU3RyaW5nIFN0cmluZworICBIaUxpbmsgdGFzbURlYyBOdW1iZXIKKyAgSGlMaW5rIHRhc21IZXggTnVtYmVyCisgIEhpTGluayB0YXNtT2N0IE51bWJlcgorICBIaUxpbmsgdGFzbUJpbiBOdW1iZXIKKyAgSGlMaW5rIHRhc21JbnN0cnVjdGlvbiBLZXl3b3JkCisgIEhpTGluayB0YXNtQ29wcm9jSW5zdHIgS2V5d29yZAorICBIaUxpbmsgdGFzbU1NWEluc3QJS2V5d29yZAorICBIaUxpbmsgdGFzbURpcmVjdGl2ZSBQcmVQcm9jCisgIEhpTGluayB0YXNtUmVnaXN0ZXIgSWRlbnRpZmllcgorICBIaUxpbmsgdGFzbVByb2N0eXBlIFByZVByb2MKKyAgSGlMaW5rIHRhc21Db21tZW50IENvbW1lbnQKKyAgSGlMaW5rIHRhc21MYWJlbCBMYWJlbAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZXRfc3ludGF4ID0gInRhc20iCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90Y2wudmltIGIvcnVudGltZS9zeW50YXgvdGNsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDVkYTkwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdGNsLnZpbQpAQCAtMCwwICsxLDIzNSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVRDTC9USworIiBNYWludGFpbmVyOglEZWFuIENvcHNleSA8Y29wc2V5QGNzLnVjZGF2aXMuZWR1PgorIgkJKHByZXZpb3VzbHkgTWF0dCBOZXVtYW5uIDxtYXR0bmV1QHB1cnBsZXR1cnRsZS5jb20+KQorIgkJKHByZXZpb3VzbHkgQWxsYW4gS2VsbHkgPGFsbGFuQGZydWl0bG9hZi5jby51az4pCisiIE9yaWdpbmFsOglSb2JpbiBCZWNrZXIgPHJvYmluQGplc3Npa2F0LmRlbW9uLmNvLnVrPgorIiBMYXN0IENoYW5nZToJMjAwNCBNYXkgMTYKKyIKKyIgS2V5d29yZHMgVE9ETzogZm9ybWF0IGNsb2NrIGNsaWNrIGFuY2hvcgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgQSBidW5jaCBvZiB1c2VmdWwga2V5d29yZHMKK3N5biBrZXl3b3JkIHRjbFN0YXRlbWVudAlwcm9jIGdsb2JhbCByZXR1cm4gbGluZGV4CitzeW4ga2V5d29yZCB0Y2xTdGF0ZW1lbnQJbGxlbmd0aCBsYXBwZW5kIGxyZXBsYWNlIGxyYW5nZSBsaXN0IGNvbmNhdCBpbmNyCitzeW4ga2V5d29yZCB0Y2xTdGF0ZW1lbnQJdXB2YXIgc2V0CitzeW4ga2V5d29yZCB0Y2xMYWJlbAkJY2FzZSBkZWZhdWx0CitzeW4ga2V5d29yZCB0Y2xDb25kaXRpb25hbAlpZiB0aGVuIGVsc2UgZWxzZWlmIHN3aXRjaAorc3luIGtleXdvcmQgdGNsUmVwZWF0CQl3aGlsZSBmb3IgZm9yZWFjaCBicmVhayBjb250aW51ZQorc3luIGtleXdvcmQgdGNsdGtTd2l0Y2gJY29udGFpbmVkCWluc2VydCBjcmVhdGUgcG9seWdvbiBmaWxsIG91dGxpbmUgdGFnCisKKyIgV0lER0VUUworIiBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggd2lkZ2V0cworc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIGJhY2tncm91bmQgaGlnaGxpZ2h0YmFja2dyb3VuZCBpbnNlcnRvbnRpbWUgY2dldAorc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIHNlbGVjdGJvcmRlcndpZHRoIGJvcmRlcndpZHRoIGhpZ2hsaWdodGNvbG9yIGluc2VydHdpZHRoCitzeW4ga2V5d29yZCB0Y2x0a1dpZGdldFN3aXRjaCBjb250YWluZWQgc2VsZWN0Zm9yZWdyb3VuZCBjdXJzb3IgaGlnaGxpZ2h0dGhpY2tuZXNzIHBhZHggc2V0Z3JpZAorc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIGV4cG9ydHNlbGVjdGlvbiBpbnNlcnRiYWNrZ3JvdW5kIHBhZHkgdGFrZWZvY3VzCitzeW4ga2V5d29yZCB0Y2x0a1dpZGdldFN3aXRjaCBjb250YWluZWQgZm9udCBpbnNlcnRib3JkZXJ3aWR0aCByZWxpZWYgeHNjcm9sbGNvbW1hbmQKK3N5biBrZXl3b3JkIHRjbHRrV2lkZ2V0U3dpdGNoIGNvbnRhaW5lZCBmb3JlZ3JvdW5kIGluc2VydG9mZnRpbWUgc2VsZWN0YmFja2dyb3VuZCB5c2Nyb2xsY29tbWFuZAorc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIGhlaWdodCBzcGFjaW5nMSBzcGFjaW5nMiBzcGFjaW5nMworc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIHN0YXRlIHRhYnMgd2lkdGggd3JhcAorIiBidXR0b24KK3N5biBrZXl3b3JkIHRjbHRrV2lkZ2V0U3dpdGNoIGNvbnRhaW5lZCBjb21tYW5kIGRlZmF1bHQKKyIgY2FudmFzCitzeW4ga2V5d29yZCB0Y2x0a1dpZGdldFN3aXRjaCBjb250YWluZWQgY2xvc2Vlbm91Z2ggY29uZmluZSBzY3JvbGxyZWdpb24geHNjcm9sbGluY3JlbWVudCB5c2Nyb2xsaW5jcmVtZW50IG9yaWVudAorIiBjaGVja2J1dHRvbiwgcmFkaW9idXR0b24KK3N5biBrZXl3b3JkIHRjbHRrV2lkZ2V0U3dpdGNoIGNvbnRhaW5lZCBpbmRpY2F0b3JvbiBvZmZ2YWx1ZSBvbnZhbHVlIHNlbGVjdGNvbG9yIHNlbGVjdGltYWdlIHN0YXRlIHZhcmlhYmxlCisiIGVudHJ5LCBmcmFtZQorc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIHNob3cgY2xhc3MgY29sb3JtYXAgY29udGFpbmVyIHZpc3VhbAorIiBsaXN0Ym94LCBtZW51CitzeW4ga2V5d29yZCB0Y2x0a1dpZGdldFN3aXRjaCBjb250YWluZWQgc2VsZWN0bW9kZSBwb3N0Y29tbWFuZCBzZWxlY3Rjb2xvciB0ZWFyb2ZmIHRlYXJvZmZjb21tYW5kIHRpdGxlIHR5cGUKKyIgbWVudWJ1dHRvbiwgbWVzc2FnZQorc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIGRpcmVjdGlvbiBhc3BlY3QganVzdGlmeQorIiBzY2FsZQorc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIGJpZ2luY3JlbWVudCBkaWdpdHMgZnJvbSBsZW5ndGggcmVzb2x1dGlvbiBzaG93dmFsdWUgc2xpZGVybGVuZ3RoIHNsaWRlcnJlbGllZiB0aWNraW50ZXJ2YWwgdG8KKyIgc2Nyb2xsYmFyCitzeW4ga2V5d29yZCB0Y2x0a1dpZGdldFN3aXRjaCBjb250YWluZWQgYWN0aXZlcmVsaWVmIGVsZW1lbnRib3JkZXJ3aWR0aAorIiBpbWFnZQorc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIGRlbGV0ZSBuYW1lcyB0eXBlcyBjcmVhdGUKKyIgdmFyaWFibGUgcmVmZXJlbmNlCisJIiA6Om9wdGlvbmFsOjpuYW1lc3BhY2VzCitzeW4gbWF0Y2ggdGNsVmFyUmVmICIkXChcKDo6XClcP1woW1s6YWxudW06XV8uXSo6OlwpKlwpXGFbYS16QS1aMC05Xy5dKiIKKwkiICR7Li4ufSBtYXkgY29udGFpbiBhbnkgY2hhcmFjdGVyIGV4Y2VwdCAnfScKK3N5biBtYXRjaCB0Y2xWYXJSZWYgIiR7W159XSp9IgorIiBtZW51LCBtYW5lIGFkZAorc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIGFjdGl2ZSBlbmQgbGFzdCBub25lIGNhc2NhZGUgY2hlY2tidXR0b24gY29tbWFuZCByYWRpb2J1dHRvbiBzZXBhcmF0b3IKK3N5biBrZXl3b3JkIHRjbHRrV2lkZ2V0U3dpdGNoIGNvbnRhaW5lZCBhY3RpdmViYWNrZ3JvdW5kIGFjdHZlZm9yZWdyb3VuZCBhY2NlbGVyYXRvciBiYWNrZ3JvdW5kIGJpdG1hcCBjb2x1bW5icmVhaworc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIGZvbnQgZm9yZWdyb3VuZCBoaWRlbWFyZ2luIGltYWdlIGluZGljYXRvcm9uIGxhYmVsIG1lbnUgb2ZmdmFsdWUgb252YWx1ZQorc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIHNlbGVjdGNvbG9yIHNlbGVjdGltYWdlIHN0YXRlIHVuZGVybGluZSB2YWx1ZSB2YXJpYWJsZQorc3luIGtleXdvcmQgdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkIGFkZCBjbG9uZSBjb25maWd1cmUgZGVsZXRlIGVudHJ5Y2dldCBlbnRyeWNvbmZpZ3VyZSBpbmRleCBpbnNlcnQgaW52b2tlCitzeW4ga2V5d29yZCB0Y2x0a1dpZGdldFN3aXRjaCBjb250YWluZWQgcG9zdCBwb3N0Y2FzY2FkZSB0eXBlIHVucG9zdCB5cG9zaXRpb24gYWN0aXZhdGUKKyJzeW4ga2V5d29yZCB0Y2x0a1dpZGdldFN3aXRjaCBjb250YWluZWQKKyJzeW4gbWF0Y2ggdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkCitzeW4gcmVnaW9uIHRjbHRrV2lkZ2V0IG1hdGNoZ3JvdXA9dGNsdGtXaWRnZXRDb2xvciBzdGFydD0iXDxidXR0b25cPiIgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9Il1cfFteXFxdKlxzKiQiaGU9ZS0xIGNvbnRhaW5zPXRjbExpbmVDb250aW51ZSx0Y2x0a1dpZGdldFN3aXRjaCx0Y2xTdHJpbmcsdGNsdGtTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZgorc3luIHJlZ2lvbiB0Y2x0a1dpZGdldCBtYXRjaGdyb3VwPXRjbHRrV2lkZ2V0Q29sb3Igc3RhcnQ9Ilw8c2NhbGVcPiIgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9Il1cfFteXFxdKlxzKiQiaGU9ZS0xICBjb250YWlucz10Y2xMaW5lQ29udGludWUsdGNsdGtXaWRnZXRTd2l0Y2gsdGNsU3RyaW5nLHRjbHRrU3dpdGNoLHRjbE51bWJlcix0Y2xWYXJSZWYKKworc3luIHJlZ2lvbiB0Y2x0a1dpZGdldCBtYXRjaGdyb3VwPXRjbHRrV2lkZ2V0Q29sb3Igc3RhcnQ9Ilw8Y2FudmFzXD4iIG1hdGNoZ3JvdXA9Tk9ORSBza2lwPSJeXHMqJCIgZW5kPSJdXHxbXlxcXSpccyokImhlPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbHRrV2lkZ2V0U3dpdGNoLHRjbFN0cmluZyx0Y2x0a1N3aXRjaCx0Y2xOdW1iZXIsdGNsVmFyUmVmCitzeW4gcmVnaW9uIHRjbHRrV2lkZ2V0IG1hdGNoZ3JvdXA9dGNsdGtXaWRnZXRDb2xvciBzdGFydD0iXDxjaGVja2J1dHRvblw+IiBtYXRjaGdyb3VwPU5PTkUgc2tpcD0iXlxzKiQiIGVuZD0iXVx8W15cXF0qXHMqJCJoZT1lLTEgIGNvbnRhaW5zPXRjbExpbmVDb250aW51ZSx0Y2x0a1dpZGdldFN3aXRjaCx0Y2xTdHJpbmcsdGNsdGtTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZgorc3luIHJlZ2lvbiB0Y2x0a1dpZGdldCBtYXRjaGdyb3VwPXRjbHRrV2lkZ2V0Q29sb3Igc3RhcnQ9Ilw8ZW50cnlcPiIgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9Il1cfFteXFxdKlxzKiQiaGU9ZS0xICBjb250YWlucz10Y2xMaW5lQ29udGludWUsdGNsdGtXaWRnZXRTd2l0Y2gsdGNsU3RyaW5nLHRjbHRrU3dpdGNoLHRjbE51bWJlcix0Y2xWYXJSZWYKK3N5biByZWdpb24gdGNsdGtXaWRnZXQgbWF0Y2hncm91cD10Y2x0a1dpZGdldENvbG9yIHN0YXJ0PSJcPGZyYW1lXD4iIG1hdGNoZ3JvdXA9Tk9ORSBza2lwPSJeXHMqJCIgZW5kPSJdXHxbXlxcXSpccyokImhlPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbHRrV2lkZ2V0U3dpdGNoLHRjbFN0cmluZyx0Y2x0a1N3aXRjaCx0Y2xOdW1iZXIsdGNsVmFyUmVmCitzeW4gcmVnaW9uIHRjbHRrV2lkZ2V0IG1hdGNoZ3JvdXA9dGNsdGtXaWRnZXRDb2xvciBzdGFydD0iXDxpbWFnZVw+IiBtYXRjaGdyb3VwPU5PTkUgc2tpcD0iXlxzKiQiIGVuZD0iXVx8W15cXF0qXHMqJCJoZT1lLTEgIGNvbnRhaW5zPXRjbExpbmVDb250aW51ZSx0Y2x0a1dpZGdldFN3aXRjaCx0Y2xTdHJpbmcsdGNsdGtTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZgorc3luIHJlZ2lvbiB0Y2x0a1dpZGdldCBtYXRjaGdyb3VwPXRjbHRrV2lkZ2V0Q29sb3Igc3RhcnQ9Ilw8bGlzdGJveFw+IiBtYXRjaGdyb3VwPU5PTkUgc2tpcD0iXlxzKiQiIGVuZD0iXVx8W15cXF0qXHMqJCJoZT1lLTEgIGNvbnRhaW5zPXRjbExpbmVDb250aW51ZSx0Y2x0a1dpZGdldFN3aXRjaCx0Y2xTdHJpbmcsdGNsdGtTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZgorc3luIHJlZ2lvbiB0Y2x0a1dpZGdldCBtYXRjaGdyb3VwPXRjbHRrV2lkZ2V0Q29sb3Igc3RhcnQ9Ilw8bWVudWJ1dHRvblw+IiBtYXRjaGdyb3VwPU5PTkUgc2tpcD0iXlxzKiQiIGVuZD0iXVx8W15cXF0qXHMqJCJoZT1lLTEgIGNvbnRhaW5zPXRjbExpbmVDb250aW51ZSx0Y2x0a1dpZGdldFN3aXRjaCx0Y2xTdHJpbmcsdGNsdGtTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZgorc3luIHJlZ2lvbiB0Y2x0a1dpZGdldCBtYXRjaGdyb3VwPXRjbHRrV2lkZ2V0Q29sb3Igc3RhcnQ9Ilw8bWVzc2FnZVw+IiBtYXRjaGdyb3VwPU5PTkUgc2tpcD0iXlxzKiQiIGVuZD0iXVx8W15cXF0qXHMqJCJoZT1lLTEgIGNvbnRhaW5zPXRjbExpbmVDb250aW51ZSx0Y2x0a1dpZGdldFN3aXRjaCx0Y2xTdHJpbmcsdGNsdGtTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZgorc3luIHJlZ2lvbiB0Y2x0a1dpZGdldCBtYXRjaGdyb3VwPXRjbHRrV2lkZ2V0Q29sb3Igc3RhcnQ9Ilw8cmFkaW9idXR0b25cPiIgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9Il1cfFteXFxdKlxzKiQiaGU9ZS0xIGNvbnRhaW5zPXRjbExpbmVDb250aW51ZSx0Y2x0a1dpZGdldFN3aXRjaCx0Y2xTdHJpbmcsdGNsdGtTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZgorc3luIHJlZ2lvbiB0Y2x0a1dpZGdldCBtYXRjaGdyb3VwPXRjbHRrV2lkZ2V0Q29sb3Igc3RhcnQ9Ilw8c2Nyb2xsYmFyXD4iIG1hdGNoZ3JvdXA9Tk9ORSBza2lwPSJeXHMqJCIgZW5kPSJdXHxbXlxcXSpccyokImhlPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbHRrV2lkZ2V0U3dpdGNoLHRjbFN0cmluZyx0Y2x0a1N3aXRjaCx0Y2xOdW1iZXIsdGNsVmFyUmVmCisiIFRoZXNlIHdvcmRzIGFyZSBkdWFsIHB1cnBvc2UuCisiIG1hdGNoIHN3aXRjaGVzCisic3luIG1hdGNoIHRjbHRrV2lkZ2V0U3dpdGNoIGNvbnRhaW5lZCAiLXRleHQiaHM9cysxCitzeW4gbWF0Y2ggdGNsdGtXaWRnZXRTd2l0Y2ggY29udGFpbmVkICItdGV4dFwodmFyXClcPyJocz1zKzEKK3N5biBtYXRjaCB0Y2x0a1dpZGdldFN3aXRjaCBjb250YWluZWQgIi1tZW51ImhzPXMrMQorc3luIG1hdGNoIHRjbHRrV2lkZ2V0U3dpdGNoIGNvbnRhaW5lZCAiLWxhYmVsImhzPXMrMQorIiBtYXRjaCBjb21tYW5kcyAtIDIgbGluZXMgZm9yIHByZXR0eSBtYXRjaC4KKyJ2YXJpYWJsZQorIiBTcGVjaWFsIGNhc2UgLSBJZiBhIG51bWJlciBmb2xsb3dzIGEgdmFyaWFibGUgcmVnaW9uLCBpdCBtdXN0IGJlIGF0IHRoZSBlbmQgb2YKKyIgdGhlIHBhdHRlcm4sIGJ5IGRlZmluaXRpb24uIFRoZXJlZm9yZSwgKDEpIGVpdGhlciBpbmNsdWRlIGEgbnVtYmVyIGFzIHRoZSByZWdpb24KKyIgZW5kIGFuZCBleGNsdWRlIHRjbE51bWJlciBmcm9tIHRoZSBjb250YWlucyBsaXN0LCBvciAoMikgbWFrZSB2YXJpYWJsZQorIiBrZWVwZW5kLiBBcyAoMSkgd291bGQgcHV0IHZhcmlhYmxlIG91dCBvZiBzdGVwIHdpdGggZXZlcnl0aGluZyBlbHNlLCB1c2UgKDIpLgorc3luIHJlZ2lvbiB0Y2x0a0NvbW1hbmQgbWF0Y2hncm91cD10Y2x0a0NvbW1hbmRDb2xvciBzdGFydD0iXlw8dmFyaWFibGVcPiIgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9Il1cfFteXFxdKlxzKiQiaGU9ZS0xICBjb250YWlucz10Y2xMaW5lQ29udGludWUsdGNsU3RyaW5nLHRjbE51bWJlcix0Y2xWYXJSZWYsdGNsdGtDb21tYW5kCitzeW4gcmVnaW9uIHRjbHRrQ29tbWFuZCBtYXRjaGdyb3VwPXRjbHRrQ29tbWFuZENvbG9yIHN0YXJ0PSJcc1w8dmFyaWFibGVcPlx8XFtcPHZhcmlhYmxlXD4iaHM9cysxIG1hdGNoZ3JvdXA9Tk9ORSBza2lwPSJeXHMqJCIgZW5kPSJdXHxbXlxcXSpccyokImhlPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbFN0cmluZyx0Y2xOdW1iZXIsdGNsVmFyUmVmLHRjbHRrQ29tbWFuZAorIiBtZW51CitzeW4gcmVnaW9uIHRjbHRrV2lkZ2V0IG1hdGNoZ3JvdXA9dGNsdGtXaWRnZXRDb2xvciBzdGFydD0iXlw8bWVudVw+IiBtYXRjaGdyb3VwPU5PTkUgc2tpcD0iXlxzKiQiIGVuZD0iXVx8W15cXF0qXHMqJCJoZT1lLTEgIGNvbnRhaW5zPXRjbExpbmVDb250aW51ZSx0Y2x0a1dpZGdldFN3aXRjaCx0Y2xTdHJpbmcsdGNsdGtTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZgorc3luIHJlZ2lvbiB0Y2x0a1dpZGdldCBtYXRjaGdyb3VwPXRjbHRrV2lkZ2V0Q29sb3Igc3RhcnQ9IlxzXDxtZW51XD5cfFxbXDxtZW51XD4iaHM9cysxIG1hdGNoZ3JvdXA9Tk9ORSBza2lwPSJeXHMqJCIgZW5kPSJdXHxbXlxcXSpccyokImhlPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbHRrV2lkZ2V0U3dpdGNoLHRjbFN0cmluZyx0Y2x0a1N3aXRjaCx0Y2xOdW1iZXIsdGNsVmFyUmVmCisiIGxhYmVsCitzeW4gcmVnaW9uIHRjbHRrV2lkZ2V0IG1hdGNoZ3JvdXA9dGNsdGtXaWRnZXRDb2xvciBzdGFydD0iXlw8bGFiZWxcPiIgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9Il1cfFteXFxdKlxzKiQiaGU9ZS0xICBjb250YWlucz10Y2xMaW5lQ29udGludWUsdGNsdGtXaWRnZXRTd2l0Y2gsdGNsU3RyaW5nLHRjbHRrU3dpdGNoLHRjbE51bWJlcix0Y2xWYXJSZWYKK3N5biByZWdpb24gdGNsdGtXaWRnZXQgbWF0Y2hncm91cD10Y2x0a1dpZGdldENvbG9yIHN0YXJ0PSJcc1w8bGFiZWxcPlx8XFtcPGxhYmVsXD4iaHM9cysxIG1hdGNoZ3JvdXA9Tk9ORSBza2lwPSJeXHMqJCIgZW5kPSJdXHxbXlxcXSpccyokImhlPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbHRrV2lkZ2V0U3dpdGNoLHRjbFN0cmluZyx0Y2x0a1N3aXRjaCx0Y2xOdW1iZXIsdGNsVmFyUmVmCisiIHRleHQKK3N5biByZWdpb24gdGNsdGtXaWRnZXQgbWF0Y2hncm91cD10Y2x0a1dpZGdldENvbG9yIHN0YXJ0PSJeXDx0ZXh0XD4iIG1hdGNoZ3JvdXA9Tk9ORSBza2lwPSJeXHMqJCIgZW5kPSJdXHxbXlxcXSpccyokImhlPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbHRrV2lkZ2V0LHRjbHRrV2lkZ2V0U3dpdGNoLHRjbHRrU3dpdGNoLHRjbE51bWJlcix0Y2xWYXJSZWYsdGNsU3RyaW5nCitzeW4gcmVnaW9uIHRjbHRrV2lkZ2V0IG1hdGNoZ3JvdXA9dGNsdGtXaWRnZXRDb2xvciBzdGFydD0iXHNcPHRleHRcPlx8XFtcPHRleHRcPiJocz1zKzEgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9Il1cfFteXFxdKlxzKiQiaGU9ZS0xICBjb250YWlucz10Y2xMaW5lQ29udGludWUsdGNsdGtXaWRnZXQsdGNsdGtXaWRnZXRTd2l0Y2gsdGNsU3RyaW5nLHRjbHRrU3dpdGNoLHRjbE51bWJlcix0Y2xWYXJSZWYKKworIiBUaGlzIGlzbid0IGNvbnRhaW5lZCAoSSBkb24ndCB0aGluaykgc28gaXQncyBPSyB0byBqdXN0IGFzc29jaWF0ZSB3aXRoIHRoZSBDb2xvciBncm91cC4KKyIgVE9ETzogVGhpcyBjb3VsZCBiZSB3cm9uZy4KK3N5biBrZXl3b3JkIHRjbHRrV2lkZ2V0Q29sb3IJdG9wbGV2ZWwKKworCitzeW4gcmVnaW9uIHRjbHRrUGFja0NvbmYgbWF0Y2hncm91cD10Y2x0a1BhY2tDb25mQ29sb3Igc3RhcnQ9Ilw8Y29uZmlndXJlXD4iIG1hdGNoZ3JvdXA9Tk9ORSBza2lwPSJeXHMqJCIgZW5kPSJdXHxbXlxcXSpccyokImhlPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbHRrV2lkZ2V0U3dpdGNoLHRjbFN0cmluZyx0Y2x0a1N3aXRjaCx0Y2x0a1BhY2tDb25mU3dpdGNoLHRjbE51bWJlcix0Y2xWYXJSZWYga2VlcGVuZAorc3luIHJlZ2lvbiB0Y2x0a1BhY2tDb25mIG1hdGNoZ3JvdXA9dGNsdGtQYWNrQ29uZkNvbG9yIHN0YXJ0PSJcPGNnZXRcPiIgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9Il1cfFteXFxdKlxzKiQibWU9ZS0xICBjb250YWlucz10Y2xMaW5lQ29udGludWUsdGNsdGtXaWRnZXRTd2l0Y2gsdGNsU3RyaW5nLHRjbHRrU3dpdGNoLHRjbHRrUGFja0NvbmZTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZgorCisKKyIgTkFNRVNQQUNFCisiIGNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCBuYW1lc3BhY2UKK3N5biBrZXl3b3JkIHRjbHRrTmFtZXNwYWNlU3dpdGNoIGNvbnRhaW5lZCBjaGlsZHJlbiBjb2RlIGN1cnJlbnQgZGVsZXRlIGV2YWwKK3N5biBrZXl3b3JkIHRjbHRrTmFtZXNwYWNlU3dpdGNoIGNvbnRhaW5lZCBleHBvcnQgZm9yZ2V0IGltcG9ydCBpbnNjb3BlIG9yaWdpbgorc3luIGtleXdvcmQgdGNsdGtOYW1lc3BhY2VTd2l0Y2ggY29udGFpbmVkIHBhcmVudCBxdWFsaWZpZXJzIHRhaWwgd2hpY2ggY29tbWFuZCB2YXJpYWJsZQorc3luIHJlZ2lvbiB0Y2x0a0NvbW1hbmQgbWF0Y2hncm91cD10Y2x0a0NvbW1hbmRDb2xvciBzdGFydD0iXDxuYW1lc3BhY2VcPiIgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9IntcfH1cfF1cfFwiXHxbXlxcXSpccyokIm1lPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbHRrTmFtZXNwYWNlU3dpdGNoCisKKyIgRVhQUgorIiBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggZXhwcgorc3luIGtleXdvcmQgdGNsdGtNYXRocwljb250YWluZWQJYWNvcwljb3MJaHlwb3QJc2luaAorc3luIGtleXdvcmQgdGNsdGtNYXRocwljb250YWluZWQJYXNpbgljb3NoCWxvZwlzcXJ0CitzeW4ga2V5d29yZCB0Y2x0a01hdGhzCWNvbnRhaW5lZAlhdGFuCWV4cAlsb2cxMAl0YW4KK3N5biBrZXl3b3JkIHRjbHRrTWF0aHMJY29udGFpbmVkCWF0YW4yCWZsb29yCXBvdwl0YW5oCitzeW4ga2V5d29yZCB0Y2x0a01hdGhzCWNvbnRhaW5lZAljZWlsCWZtb2QJc2luCitzeW4gcmVnaW9uIHRjbHRrQ29tbWFuZCBtYXRjaGdyb3VwPXRjbHRrQ29tbWFuZENvbG9yIHN0YXJ0PSJcPGV4cHJcPiIgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9Il1cfFteXFxdKlxzKiQibWU9ZS0xICBjb250YWlucz10Y2xMaW5lQ29udGludWUsdGNsdGtNYXRocyx0Y2xOdW1iZXIsdGNsVmFyUmVmLHRjbFN0cmluZyx0Y2x0bFdpZGdldFN3aXRjaCx0Y2x0a0NvbW1hbmQsdGNsdGtQYWNrQ29uZgorCisiIGZvcm1hdAorc3luIHJlZ2lvbiB0Y2x0a0NvbW1hbmQgbWF0Y2hncm91cD10Y2x0a0NvbW1hbmRDb2xvciBzdGFydD0iXDxmb3JtYXRcPiIgbWF0Y2hncm91cD1OT05FIHNraXA9Il5ccyokIiBlbmQ9Il1cfFteXFxdKlxzKiQibWU9ZS0xICBjb250YWlucz10Y2xMaW5lQ29udGludWUsdGNsdGtNYXRocyx0Y2xOdW1iZXIsdGNsVmFyUmVmLHRjbFN0cmluZyx0Y2x0bFdpZGdldFN3aXRjaCx0Y2x0a0NvbW1hbmQsdGNsdGtQYWNrQ29uZgorCisiIFBBQ0sKKyIgY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIHBhY2sKK3N5biBrZXl3b3JkIHRjbHRrUGFja1N3aXRjaAljb250YWluZWQJZm9yZ2V0IGluZm8gcHJvcG9nYXRlIHNsYXZlcworc3luIGtleXdvcmQgdGNsdGtQYWNrQ29uZlN3aXRjaAljb250YWluZWQJYWZ0ZXIgYW5jaG9yIGJlZm9yZSBleHBhbmQgZmlsbCBpbiBpcGFkeCBpcGFkeSBwYWR4IHBhZHkgc2lkZQorc3luIHJlZ2lvbiB0Y2x0a0NvbW1hbmQgbWF0Y2hncm91cD10Y2x0a0NvbW1hbmRDb2xvciBzdGFydD0iXDxwYWNrXD4iIG1hdGNoZ3JvdXA9Tk9ORSBza2lwPSJeXHMqJCIgZW5kPSJdXHxbXlxcXSpccyokImhlPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbHRrUGFja1N3aXRjaCx0Y2x0a1BhY2tDb25mLHRjbHRrUGFja0NvbmZTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZix0Y2xTdHJpbmcsdGNsdGtDb21tYW5kIGtlZXBlbmQKKworIiBTVFJJTkcKKyIgY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIHN0cmluZworc3luIGtleXdvcmQgdGNsdGtTdHJpbmdTd2l0Y2gJY29udGFpbmVkCWNvbXBhcmUgZmlyc3QgaW5kZXggbGFzdCBsZW5ndGggbWF0Y2ggcmFuZ2UgdG9sb3dlciB0b3VwcGVyIHRyaW0gdHJpbWxlZnQgdHJpbXJpZ2h0IHdvcmRzdGFydCB3b3JkZW5kCitzeW4gcmVnaW9uIHRjbHRrQ29tbWFuZCBtYXRjaGdyb3VwPXRjbHRrQ29tbWFuZENvbG9yIHN0YXJ0PSJcPHN0cmluZ1w+IiBtYXRjaGdyb3VwPU5PTkUgc2tpcD0iXlxzKiQiIGVuZD0iXVx8W15cXF0qXHMqJCJoZT1lLTEgIGNvbnRhaW5zPXRjbExpbmVDb250aW51ZSx0Y2x0a1N0cmluZ1N3aXRjaCx0Y2xOdW1iZXIsdGNsVmFyUmVmLHRjbFN0cmluZyx0Y2x0a0NvbW1hbmQKKworIiBBUlJBWQorIiBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggYXJyYXkKK3N5biBrZXl3b3JkIHRjbHRrQXJyYXlTd2l0Y2gJY29udGFpbmVkCWFueW1vcmUgZG9uZXNlYXJjaCBleGlzdHMgZ2V0IG5hbWVzIG5leHRlbGVtZW50IHNpemUgc3RhcnRzZWFyY2ggc2V0CisiIG1hdGNoIGZyb20gY29tbWFuZCBuYW1lIHRvIF0gb3IgRU9MCitzeW4gcmVnaW9uIHRjbHRrQ29tbWFuZCBtYXRjaGdyb3VwPXRjbHRrQ29tbWFuZENvbG9yIHN0YXJ0PSJcPGFycmF5XD4iIG1hdGNoZ3JvdXA9Tk9ORSBza2lwPSJeXHMqJCIgZW5kPSJdXHxbXlxcXSpccyokImhlPWUtMSAgY29udGFpbnM9dGNsTGluZUNvbnRpbnVlLHRjbHRrQXJyYXlTd2l0Y2gsdGNsTnVtYmVyLHRjbFZhclJlZix0Y2xTdHJpbmcsdGNsdGtDb21tYW5kCisKKyIgTFNPUlQKKyIgc3dpdGNoZXMgZm9yIGxzb3J0CitzeW4ga2V5d29yZCB0Y2x0a0xzb3J0U3dpdGNoCWNvbnRhaW5lZAlhc2NpaSBkaWN0aW9uYXJ5IGludGVnZXIgcmVhbCBjb21tYW5kIGluY3JlYXNpbmcgZGVjcmVhc2luZyBpbmRleAorIiBtYXRjaCBmcm9tIGNvbW1hbmQgbmFtZSB0byBdIG9yIEVPTAorc3luIHJlZ2lvbiB0Y2x0a0NvbW1hbmQgbWF0Y2hncm91cD10Y2x0a0NvbW1hbmRDb2xvciBzdGFydD0iXDxsc29ydFw+IiBtYXRjaGdyb3VwPU5PTkUgc2tpcD0iXlxzKiQiIGVuZD0iXVx8W15cXF0qXHMqJCJoZT1lLTEgIGNvbnRhaW5zPXRjbExpbmVDb250aW51ZSx0Y2x0a0xzb3J0U3dpdGNoLHRjbE51bWJlcix0Y2xWYXJSZWYsdGNsU3RyaW5nLHRjbHRrQ29tbWFuZAorCitzeW4ga2V5d29yZCB0Y2xUb2RvIGNvbnRhaW5lZAlUT0RPCisKKworIiBTdHJpbmcgYW5kIENoYXJhY3RlciBjb250c3RhbnRzCisiIEhpZ2hsaWdodCBzcGVjaWFsIGNoYXJhY3RlcnMgKHRob3NlIHdoaWNoIGhhdmUgYSBiYWNrc2xhc2gpIGRpZmZlcmVudGx5CitzeW4gbWF0Y2ggICB0Y2xTcGVjaWFsIGNvbnRhaW5lZCAiXFxcZFxkXGRcPVx8XFwuIgorIiBBIHN0cmluZyBuZWVkcyB0aGUgc2tpcCBhcmd1bWVudCBhcyBpdCBtYXkgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gXCIuCisiIE1hdGNoIGF0IHN0YXJ0IG9mIGxpbmUKK3N5biByZWdpb24gIHRjbFN0cmluZwkJICBzdGFydD0rXiIrIGVuZD0rIisgY29udGFpbnM9dGNsU3BlY2lhbCBza2lwPStcXFxcXHxcXCIrCisiTWF0Y2ggYWxsIG90aGVyIGxlZ2FsIHN0cmluZ3MuCitzeW4gcmVnaW9uICB0Y2xTdHJpbmcJCSAgc3RhcnQ9K1teXFxdIittcz1zKzEgIGVuZD0rIisgY29udGFpbnM9dGNsU3BlY2lhbCBza2lwPStcXFxcXHxcXCIrCisKK3N5biBtYXRjaCAgIHRjbExpbmVDb250aW51ZSAiXFxccyokIgorCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90IGFuZCB3aXRoICJmIi4KK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoICB0Y2xOdW1iZXIJCSJcPFxkXCtcKHVcPWxcPVx8bHVcfGZcKVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggIHRjbE51bWJlcgkJIlw8XGRcK1wuXGQqXChlWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggIHRjbE51bWJlcgkJIlwuXGRcK1woZVstK11cPVxkXCtcKVw9W2ZsXVw9XD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRob3V0IGRvdCwgd2l0aCBleHBvbmVudAorc3luIG1hdGNoICB0Y2xOdW1iZXIJCSJcPFxkXCtlWy0rXVw9XGRcK1tmbF1cPVw+IgorImhleCBudW1iZXIKK3N5biBtYXRjaCAgdGNsTnVtYmVyCQkiMHhbMC05YS1mXVwrXCh1XD1sXD1cfGx1XClcPiIKKyJzeW4gbWF0Y2ggIHRjbElkZW50aWZpZXIJIlw8W2Etel9dW2EtejAtOV9dKlw+Igorc3luIGNhc2UgbWF0Y2gKKworc3luIHJlZ2lvbiAgdGNsQ29tbWVudAkJc3RhcnQ9Il5ccypcIyIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXRjbFRvZG8KK3N5biByZWdpb24gIHRjbENvbW1lbnQJCXN0YXJ0PS87XHMqXCMvaHM9cysxIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10Y2xUb2RvCisKKyJzeW4gc3luYyBjY29tbWVudCB0Y2xDb21tZW50CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3RjbF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF90Y2xfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgdGNsdGtTd2l0Y2gJCVNwZWNpYWwKKyAgSGlMaW5rIHRjbExhYmVsCQlMYWJlbAorICBIaUxpbmsgdGNsQ29uZGl0aW9uYWwJCUNvbmRpdGlvbmFsCisgIEhpTGluayB0Y2xSZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgdGNsTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHRjbEVycm9yCQlFcnJvcgorICBIaUxpbmsgdGNsU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgIkhpTGluayB0Y2xTdGF0ZW1lbnRDb2xvcglTdGF0ZW1lbnQKKyAgSGlMaW5rIHRjbFN0cmluZwkJU3RyaW5nCisgIEhpTGluayB0Y2xDb21tZW50CQlDb21tZW50CisgIEhpTGluayB0Y2xTcGVjaWFsCQlTcGVjaWFsCisgIEhpTGluayB0Y2xUb2RvCQlUb2RvCisgICIgQmVsb3cgaGVyZSBhcmUgdGhlIGNvbW1hbmRzIGFuZCB0aGVpciBvcHRpb25zLgorICBIaUxpbmsgdGNsdGtDb21tYW5kQ29sb3IJU3RhdGVtZW50CisgIEhpTGluayB0Y2x0a1dpZGdldENvbG9yCVN0cnVjdHVyZQorICBIaUxpbmsgdGNsTGluZUNvbnRpbnVlCVdhcm5pbmdNc2cKKyAgSGlMaW5rIHRjbHRrU3RyaW5nU3dpdGNoCVNwZWNpYWwKKyAgSGlMaW5rIHRjbHRrQXJyYXlTd2l0Y2gJU3BlY2lhbAorICBIaUxpbmsgdGNsdGtMc29ydFN3aXRjaAlTcGVjaWFsCisgIEhpTGluayB0Y2x0a1BhY2tTd2l0Y2gJU3BlY2lhbAorICBIaUxpbmsgdGNsdGtQYWNrQ29uZlN3aXRjaAlTcGVjaWFsCisgIEhpTGluayB0Y2x0a01hdGhzCQlTcGVjaWFsCisgIEhpTGluayB0Y2x0a05hbWVzcGFjZVN3aXRjaAlTcGVjaWFsCisgIEhpTGluayB0Y2x0a1dpZGdldFN3aXRjaAlTcGVjaWFsCisgIEhpTGluayB0Y2x0a1BhY2tDb25mQ29sb3IJSWRlbnRpZmllcgorICAiSGlMaW5rIHRjbHRrTHNvcnQJCVN0YXRlbWVudAorICBIaUxpbmsgdGNsVmFyUmVmCQlJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInRjbCIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3Rjc2gudmltIGIvcnVudGltZS9zeW50YXgvdGNzaC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmYmIyZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3Rjc2gudmltCkBAIC0wLDAgKzEsMTg4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJCUMtc2hlbGwgKHRjc2gpCisiIE1haW50YWlub3I6CQlHYXV0YW0gSXllciA8Z2F1dGFtQG1hdGgudWNoaWNhZ28uZWR1PgorIiBMYXN0IE1vZGlmaWVkOglNb24gMjMgRmViIDIwMDQgMDI6Mjg6NTEgUE0gQ1NUCisiCisiIERlc2NyaXB0aW9uOiBXZSBicmVhayB1cCBlYWNoIHN0YXRlbWVudCBpbnRvIGEgImNvbW1hbmQiIGFuZCBhbiAiZW5kIiBwYXJ0LgorIiBBbGwgZ3JvdXBzIGFyZSBlaXRoZXIgYSAiY29tbWFuZCIgb3IgcGFydCBvZiB0aGUgImVuZCIgb2YgYSBzdGF0ZW1lbnQgKGllCisiIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlICJjb21tYW5kIikuIFRoaXMgaXMgYmVjYXVzZSBibGluZGx5IGhpZ2hsaWdodGluZyB0Y3NoCisiIHN0YXRlbWVudHMgYXMga2V5d29yZHMgY2F1c2VkIHdheSB0b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMuIEVnOgorIgorIglzZXQgaGlzdG9yeT0yMDAKKyIKKyIgY2F1c2VzIGhpc3RvcnkgdG8gY29tZSB1cCBhcyBhIGtleXdvcmQsIHdoaWNoIHdlIHdhbnQgdG8gYXZvaWQuCisKKyIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIG1hdGNoCisKKyIgLS0tLS0gQ2x1c3RlcnMgLS0tLS0KK3N5biBjbHVzdGVyIHRjc2hNb2RpZmllcnMJY29udGFpbnM9dGNzaE1vZGlmaWVyLHRjc2hNb2RpZmllckVycm9yCitzeW4gY2x1c3RlciB0Y3NoUXVvdGVMaXN0CWNvbnRhaW5zPXRjc2hEUXVvdGUsdGNzaFNRdW90ZSx0Y3NoQlF1b3RlCitzeW4gY2x1c3RlciB0Y3NoU3RhdGVtZW50RW5kcwljb250YWlucz1AdGNzaFF1b3RlTGlzdCx0Y3NoQ29tbWVudCx0Y3NoVXNyVmFyLFRjc2hBcmd2LHRjc2hTdWJzdCx0Y3NoUmVkaXIsdGNzaE1ldGEsdGNzaEhlcmVEb2MsdGNzaFNwZWNpYWwsdGNzaEFyZ3VlbWVudAorc3luIGNsdXN0ZXIgdGNzaFN0YXRlbWVudHMJY29udGFpbnM9dGNzaEJ1aWx0aW5zLHRjc2hDb21tYW5kcyx0Y3NoU2V0LHRjc2hTZXRFbnYsdGNzaEFsaWFzLHRjc2hJZix0Y3NoV2hpbGUKK3N5biBjbHVzdGVyIHRjc2hWYXJMaXN0CQljb250YWlucz10Y3NoVXNyVmFyLHRjc2hBcmd2LHRjc2hTdWJzdAorCisiIC0tLS0tIFN0YXRlbWVudHMgLS0tLS0KKyIgVGNzaCBjb21tYW5kczogQW55IGZpbGVuYW1lIC8gbW9kaWZpYWJsZSB2YXJpYWJsZSAobXVzdCBiZSBmaXJzdCEpCitzeW4gbWF0Y2ggdGNzaENvbW1hbmRzCSdcdlthLXpBLVowLTlcXC4vXyQ6LV0rJyBjb250YWlucz10Y3NoU3BlY2lhbCx0Y3NoVXNyVmFyLHRjc2hBcmd2LHRjc2hWYXJFcnJvciBuZXh0Z3JvdXA9dGNzaFN0YXRlbWVudEVuZAorCisiIEJ1aWx0aW4gY29tbWFuZHMgZXhjZXB0ICh1bilzZXQoZW52KSwgKHVuKWFsaWFzLCBpZiwgd2hpbGUsIGVsc2UKK3N5biBrZXl3b3JkIHRjc2hCdWlsdGlucyBuZXh0Z3JvdXA9dGNzaFN0YXRlbWVudEVuZCBhbGxvYyBiZyBiaW5ka2V5IGJyZWFrIGJyZWFrc3cgYnVpbHRpbnMgYnllIGNhc2UgY2QgY2hkaXIgY29tcGxldGUgY29udGludWUgZGVmYXVsdCBkaXJzIGVjaG8gZWNob3RjIGVuZCBlbmRpZiBlbmRzdyBldmFsIGV4ZWMgZXhpdCBmZyBmaWxldGVzdCBmb3JlYWNoIGdldHNwYXRoIGdldHh2ZXJzIGdsb2IgZ290byBoYXNoc3RhdCBoaXN0b3J5IGh1cCBpbmxpYiBqb2JzIGtpbGwgbGltaXQgbG9nIGxvZ2luIGxvZ291dCBscyBscy1GIG1pZ3JhdGUgbmV3Z3JwIG5pY2Ugbm9odXAgbm90aWZ5IG9uaW50ciBwb3BkIHByaW50ZW52IHB1c2hkIHJlaGFzaCByZXBlYXQgcm9vdG5vZGUgc2NoZWQgc2V0cGF0aCBzZXRzcGF0aCBzZXR0YyBzZXR0eSBzZXR4dmVycyBzaGlmdCBzb3VyY2Ugc3RvcCBzdXNwZW5kIHN3aXRjaCB0ZWxsdGMgdGltZSB1bWFzayB1bmNvbXBsZXRlIHVuaGFzaCB1bml2ZXJzZSB1bmxpbWl0IHZlciB3YWl0IHdhcnAgd2F0Y2hsb2cgd2hlcmUgd2hpY2gKKworIiBTdGF0ZW1lbnRFbmQgaXMgYW55dGhpbmcgYWZ0ZXIgYSBidWlsdGluIC8gY29tbWFuZCB0aWxsIHRoZSBsZXhpY2FsIGVuZCBvZiBhCisiIHN0YXRlbWVudCAoOywgfCwgfHwsIHwmLCAmJiBvciBlbmQgb2YgbGluZSkKK3N5biByZWdpb24gdGNzaFN0YXRlbWVudEVuZAl0cmFuc3BhcmVudCBjb250YWluZWQgbWF0Y2hncm91cD10Y3NoQnVpbHRpbnMgc3RhcnQ9JycgZW5kPSdcdlxcQDwhKDt8XHxbfCZdP3xcJlwmfCQpJyBjb250YWlucz1AdGNzaFN0YXRlbWVudEVuZHMKKworIiBzZXQgZXhwcmVzc2lvbnMgKENvbnRhaW5zIHNoZWxsIHZhcmlhYmxlcykKK3N5biBrZXl3b3JkIHRjc2hTaGVsbFZhciBjb250YWluZWQgYWZzdXNlciBhbXBtIGFyZ3YgYXV0b2NvcnJlY3QgYXV0b2V4cGFuZCBhdXRvbGlzdCBhdXRvbG9nb3V0IGJhY2tzbGFzaF9xdW90ZSBjYXRhbG9nIGNkcGF0aCBjb2xvciBjb2xvcmNhdCBjb21tYW5kIGNvbXBsZXRlIGNvbnRpbnVlIGNvbnRpbnVlX2FyZ3MgY29ycmVjdCBjd2QgZGV4dHJhY3QgZGlyc2ZpbGUgZGlyc3RhY2sgZHNwbWJ5dGUgZHVuaXF1ZSBlY2hvIGVjaG9fc3R5bGUgZWRpdCBlbGxpcHNpcyBmaWdub3JlIGZpbGVjIGdpZCBncm91cCBoaXN0Y2hhcnMgaGlzdGR1cCBoaXN0ZmlsZSBoaXN0bGl0IGhpc3RvcnkgaG9tZSBpZ25vcmVlb2YgaW1wbGljaXRjZCBpbnB1dG1vZGUga2lsbGR1cCBraWxscmluZyBsaXN0ZmxhZ3MgbGlzdGpvYnMgbGlzdGxpbmtzIGxpc3RtYXggbGlzdG1heHJvd3MgbG9naW5zaCBsb2dvdXQgbWFpbCBtYXRjaGJlZXAgbm9iZWVwIG5vY2xvYmJlciBub2Rpbmcgbm9nbG9iIG5va2Fuamkgbm9ub21hdGNoIG5vc3RhdCBub3RpZnkgb2lkIG93ZCBwYXRoIHByaW50ZXhpdHZhbHVlIHByb21wdCBwcm9tcHQyIHByb21wdDMgcHJvbXB0Y2hhcnMgcHVzaGR0b2hvbWUgcHVzaGRzaWxlbnQgcmVjZXhhY3QgcmVjb2duaXplX29ubHlfZXhlY3V0YWJsZXMgcm1zdGFyIHJwcm9tcHQgc2F2ZWRpcnMgc2F2ZWhpc3Qgc2NoZWQgc2hlbGwgc2hsdmwgc3RhdHVzIHN5bWxpbmtzIHRjc2ggdGVybSB0aW1lIHRwZXJpb2QgdHR5IHVpZCB1c2VyIHZlcmJvc2UgdmVyc2lvbiB2aXNpYmxlYmVsbCB3YXRjaCB3aG8gd29yZGNoYXJzCitzeW4ga2V5d29yZCB0Y3NoU2V0CW5leHRncm91cD10Y3NoU2V0RW5kIHNldCB1bnNldAorc3luIHJlZ2lvbiAgdGNzaFNldEVuZAljb250YWluZWQgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD10Y3NoQnVpbHRpbnMgc3RhcnQ9Jycgc2tpcD0iXFwkIiBlbmQ9IiRcfDsiIGNvbnRhaW5zPXRjc2hTaGVsbFZhcixAdGNzaFN0YXRlbWVudEVuZHMKKworIiBzZXRlbnYgZXhwcmVzc2lvbnMgKENvbnRhaW5zIGVudmlvcmVubWVudCB2YXJpYWJsZXMpCitzeW4ga2V5d29yZCB0Y3NoRW52VmFyIGNvbnRhaW5lZCBBRlNVU0VSIENPTFVNTlMgRElTUExBWSBFRElUT1IgR1JPVVAgSE9NRSBIT1NUIEhPU1RUWVBFIEhQQVRIIExBTkcgTENfQ1RZUEUgTElORVMgTFNfQ09MT1JTIE1BQ0hUWVBFIE5PUkVCSU5EIE9TVFlQRSBQQVRIIFBXRCBSRU1PVEVIT1NUIFNITFZMIFNZU1RZUEUgVEVSTSBURVJNQ0FQIFVTRVIgVkVORE9SIFZJU1VBTAorc3luIGtleXdvcmQgdGNzaFNldEVudgluZXh0Z3JvdXA9dGNzaEVudkVuZCBzZXRlbnYgdW5zZXRlbnYKK3N5biByZWdpb24gIHRjc2hFbnZFbmQJY29udGFpbmVkIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9dGNzaEJ1aWx0aW5zIHN0YXJ0PScnIHNraXA9IlxcJCIgZW5kPSIkXHw7IiBjb250YWlucz10Y3NoRW52VmFyLEB0Y3NoU3RhdGVtZW50RW5kcworCisiIGFsaWFzIGFuZCB1bmFsaWFzIChjb250YWlucyBzcGVjaWFsIGFsaWFzZXMpCitzeW4ga2V5d29yZCB0Y3NoQWxpYXNlcyBjb250YWluZWQgYmVlbWNtZCBjd2RjbWQgam9iY21kIGhlbHBjb21tYW5kIHBlcmlvZGljIHByZWNtZCBwb3N0Y21kIHNoZWxsCitzeW4ga2V5d29yZCB0Y3NoQWxpYXMJbmV4dGdyb3VwPXRjc2hBbGlFbmQgYWxpYXMgdW5hbGlhcworc3luIHJlZ2lvbiAgdGNzaEFsaUVuZAljb250YWluZWQgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD10Y3NoQnVpbHRpbnMgc3RhcnQ9Jycgc2tpcD0iXFwkIiBlbmQ9IiRcfDsiIGNvbnRhaW5zPXRjc2hBbGlhc2VzLEB0Y3NoU3RhdGVtZW50RW5kcworCisiIGlmIHN0YXRlbWVudHMgKGNvbnRhaW5zIGV4cHJlc3Npb25zIC8gb3BlcmF0b3JzKQorc3luIGtleXdvcmQgdGNzaElmCW5leHRncm91cD10Y3NoSWZFbmQgaWYKK3N5biByZWdpb24gIHRjc2hJZkVuZAljb250YWluZWQgbWF0Y2hncm91cD10Y3NoQnVpbHRpbnMgc3RhcnQ9Jycgc2tpcD0iXFwkIiBlbmQ9Ilx2PHRoZW4+fCQiIGNvbnRhaW5zPXRjc2hPcGVyYXRvcix0Y3NoTnVtYmVyLEB0Y3NoU3RhdGVtZW50RW5kcworCisiIGVsc2Ugc3RhdGVtZW50cyAobmV4dGdyb3VwIGlmKQorc3luIGtleXdvcmQgdGNzaEVsc2UJbmV4dGdyb3VwPXRjc2hJZiBza2lwd2hpdGUgZWxzZQorCisiIHdoaWxlIHN0YXRlbWVudHMgKGNvbnRhaW5zIGV4cHJlc3Npb25zIC8gb3BlcmF0b3JzKQorc3luIGtleXdvcmQgdGNzaFdoaWxlCW5leHRncm91cD10Y3NoV2hFbmQgd2hpbGUKK3N5biByZWdpb24gIHRjc2hXaEVuZAljb250YWluZWQgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD10Y3NoQnVpbHRpbnMgc3RhcnQ9Jycgc2tpcD0iXFwkIiBlbmQ9Ilx2JCIgY29udGFpbnM9dGNzaE9wZXJhdG9yLHRjc2hOdW1iZXIsQHRjc2hTdGF0ZW1lbnRFbmRzCisKKyIgRXhwcmVzc2lvbnMgc3RhcnQgd2l0aCBALgorc3luIG1hdGNoIHRjc2hFeHByU3RhcnQgIlx2XEBccysiIG5leHRncm91cD10Y3NoRXhwclZhcgorc3luIG1hdGNoIHRjc2hFeHByVmFyCWNvbnRhaW5lZCAiXHZcaFx3KiUoXFtcZCtcXSk/IiBjb250YWlucz10Y3NoU2hlbGxWYXIsdGNzaEVudlZhciBuZXh0Z3JvdXA9dGNzaEV4cHJPcAorc3luIG1hdGNoIHRjc2hFeHByT3AJY29udGFpbmVkICIrK1x8LS0iCitzeW4gbWF0Y2ggdGNzaEV4cHJPcAljb250YWluZWQgIlx2XHMqXD0iIG5leHRncm91cD10Y3NoRXhwckVuZAorc3luIG1hdGNoIHRjc2hFeHByRW5kCWNvbnRhaW5lZCAiXHYuKiQiaHM9ZSsxIGNvbnRhaW5zPXRjc2hPcGVyYXRvcix0Y3NoTnVtYmVyLEB0Y3NoVmFyTGlzdAorc3luIG1hdGNoIHRjc2hFeHByRW5kCWNvbnRhaW5lZCAiXHYuey19OyJocz1lCWNvbnRhaW5zPXRjc2hPcGVyYXRvcix0Y3NoTnVtYmVyLEB0Y3NoVmFyTGlzdAorCisiIC0tLS0tIENvbW1lbnRzOiAtLS0tLQorc3luIG1hdGNoIHRjc2hDb21tZW50CSIjLioiIGNvbnRhaW5zPXRjc2hUb2RvLHRjc2hDb21tZW50VGksdGNzaENvbW1lbnRTcCxAU3BlbGwKK3N5biBtYXRjaCB0Y3NoU2hhcnBCYW5nICJeIyEgLiokIgorc3luIG1hdGNoIHRjc2hDb21tZW50VGkgY29udGFpbmVkICdcdiNccypcdVx3KihccytcdVx3KikqOidocz1zKzEgY29udGFpbnM9dGNzaFRvZG8KK3N5biBtYXRjaCB0Y3NoQ29tbWVudFNwIGNvbnRhaW5lZCAnXHY8XHV7Myx9PicgY29udGFpbnM9dGNzaFRvZG8KK3N5biBtYXRjaCB0Y3NoVG9kbwljb250YWluZWQgJ1x2XGM8dG9kbz4nCisKKyIgLS0tLS0gU3RyaW5ncyAtLS0tLQorIiBUY3NoIGRvZXMgbm90IGFsbG93IFwiIGluIHN0cmluZ3MgdW5sZXNzIHRoZSAiYmFja3NsYXNoX3F1b3RlIiBzaGVsbAorIiB2YXJpYWJsZSBpcyBzZXQuIFNldCB0aGUgdmltIHZhcmlhYmxlICJ0Y3NoX2JhY2tzbGFzaF9xdW90ZSIgdG8gMCBpZiB5b3UKKyIgd2FudCBWSU0gdG8gYXNzdW1lIHRoYXQgbm8gYmFja3NsYXNoIHF1b3RlIGNvbnN0cnVjdHMgZXhpc3QuCisKKyIgQmFja3F1b3RlcyBhcmUgdHJlYXRlZCBhcyBjb21tYW5kcywgYW5kIGFyZSBub3QgY29udGFpbmVkIGluIGFueXRoaW5nCitpZihleGlzdHMoInRjc2hfYmFja3NsYXNoX3F1b3RlIikgJiYgdGNzaF9iYWNrc2xhc2hfcXVvdGUgPT0gMCkKKyAgICBzeW4gcmVnaW9uIHRjc2hTUXVvdGUJa2VlcGVuZCBjb250YWluZWQgc3RhcnQ9Ilx2XFxAPCEnIiBlbmQ9IiciIGNvbnRhaW5zPUBTcGVsbAorICAgIHN5biByZWdpb24gdGNzaERRdW90ZQlrZWVwZW5kIGNvbnRhaW5lZCBzdGFydD0nXHZcXEA8ISInIGVuZD0nIicgY29udGFpbnM9QHRjc2hWYXJMaXN0LHRjc2hTcGVjaWFsLEBTcGVsbAorICAgIHN5biByZWdpb24gdGNzaEJRdW90ZQlrZWVwZW5kIHN0YXJ0PSdcdlxcQDwhYCcgZW5kPSdgJyBjb250YWlucz1AdGNzaFN0YXRlbWVudHMKK2Vsc2UKKyAgICBzeW4gcmVnaW9uIHRjc2hTUXVvdGUJY29udGFpbmVkIHN0YXJ0PSJcdlxcQDwhJyIgc2tpcD0iXHZcXFxcfFxcJyIgZW5kPSInIiBjb250YWlucz1AU3BlbGwKKyAgICBzeW4gcmVnaW9uIHRjc2hEUXVvdGUJY29udGFpbmVkIHN0YXJ0PSdcdlxcQDwhIicgZW5kPSciJyBjb250YWlucz1AdGNzaFZhckxpc3QsdGNzaFNwZWNpYWwsQFNwZWxsCisgICAgc3luIHJlZ2lvbiB0Y3NoQlF1b3RlCWtlZXBlbmQgbWF0Y2hncm91cD10Y3NoQlF1b3RlR3JwIHN0YXJ0PSdcdlxcQDwhYCcgc2tpcD0nXHZcXFxcfFxcYCcgZW5kPSdgJyBjb250YWlucz1AdGNzaFN0YXRlbWVudHMKK2VuZGlmCisKKyIgLS0tLS0gVmFyaWFibGVzIC0tLS0tCisiIFZhcmlhYmxlIEVycm9ycy4gTXVzdCBjb21lIGZpcnN0ISBcJCBjb25zdHJ1Y3RzIHdpbGwgYmUgZmxhZ2dlZCBieQorIiB0Y3NoU3BlY2lhbCwgc28gd2UgZG9uJ3QgY29uc2lkZXIgdGhlbSBoZXJlLgorc3luIG1hdGNoIHRjc2hWYXJFcnJvcgknXHZcJFxTKicJY29udGFpbmVkCisKKyIgTW9kaWZpYWJsZSBWYXJpYWJsZXMgd2l0aG91dCB7fS4KK3N5biBtYXRjaCB0Y3NoVXNyVmFyIGNvbnRhaW5lZCAiXHZcJFxoXHcqJShcW1xkKyUoLVxkKyk/XF0pPyIgbmV4dGdyb3VwPUB0Y3NoTW9kaWZpZXJzIGNvbnRhaW5zPXRjc2hTaGVsbFZhcix0Y3NoRW52VmFyCitzeW4gbWF0Y2ggdGNzaEFyZ3YgICBjb250YWluZWQgIlx2XCQlKFxkK3xcKikiIG5leHRncm91cD1AdGNzaE1vZGlmaWVycworCisiIE1vZGlmaWFibGUgVmFyaWFibGVzIHdpdGgge30uCitzeW4gbWF0Y2ggdGNzaFVzclZhciBjb250YWluZWQgIlx2XCRce1xoXHcqJShcW1xkKyUoLVxkKyk/XF0pPyUoOlxTKik/XH0iIGNvbnRhaW5zPUB0Y3NoTW9kaWZpZXJzLHRjc2hTaGVsbFZhcix0Y3NoRW52VmFyCitzeW4gbWF0Y2ggdGNzaEFyZ3YgICBjb250YWluZWQgIlx2XCRceyUoXGQrfFwqKSUoOlxTKik/XH0iIGNvbnRhaW5zPUB0Y3NoTW9kaWZpZXJzCisKKyIgVW5Nb2RpZmlhYmxlIFN1YnN0aXR1dGlvbnMuIE9yZGVyIGlzIGltcG9ydGFudCBoZXJlLgorc3luIG1hdGNoIHRjc2hTdWJzdCBjb250YWluZWQJIlx2XCRbPyMkIV88XSIgbmV4dGdyb3VwPXRjc2hNb2RpZmllckVycm9yCitzeW4gbWF0Y2ggdGNzaFN1YnN0IGNvbnRhaW5lZAkiXHZcJFslIz9dJShcaFx3KnxcZCspIiBuZXh0Z3JvdXA9dGNzaE1vZGlmaWVyRXJyb3IgY29udGFpbnM9dGNzaFNoZWxsVmFyLHRjc2hFbnZWYXIKK3N5biBtYXRjaCB0Y3NoU3Vic3QgY29udGFpbmVkCSJcdlwkXHtbJSM/XSUoXGhcdyp8XGQrKSUoOlxTKik/XH0iIGNvbnRhaW5zPXRjc2hNb2RpZmllckVycm9yIGNvbnRhaW5zPXRjc2hTaGVsbFZhcix0Y3NoRW52VmFyCisKKyIgVmFyaWFibGUgTmFtZSBFeHBhbnNpb24gTW9kaWZpZXJzIChvcmRlciBpbXBvcnRhbnQpCitzeW4gbWF0Y2ggdGNzaE1vZGlmaWVyRXJyb3IJY29udGFpbmVkICdcdjpcUyonCitzeW4gbWF0Y2ggdGNzaE1vZGlmaWVyCQljb250YWluZWQgJ1x2OlthZ10/W2h0cmV1bHMmcXhdJyBuZXh0Z3JvdXA9QHRjc2hNb2RpZmllcnMKKworIiAtLS0tLSBPcGVyYXRvcnMgLyBTcGVjaWFscyAtLS0tLQorIiBTdGFuZGFyZCByZWRpcmVjdHMgKGV4Y2VwdCA8PCkgWzwsID4sID4+LCA+PiYsID4+ISwgPj4mIV0KK3N5biBtYXRjaCB0Y3NoUmVkaXIgY29udGFpbmVkCSJcdlw8fFw+XD4/XCY/IT8iCisKKyIgTWV0YWNoYXJzCitzeW4gbWF0Y2ggdGNzaE1ldGEgIGNvbnRhaW5lZAkiXHZbXXt9Kj9bXSIKKworIiBIZXJlIERvY3VtZW50cyAoPDwpCitzeW4gcmVnaW9uIHRjc2hIZXJlRG9jIGNvbnRhaW5lZCBtYXRjaGdyb3VwPXRjc2hSZWRpciBzdGFydD0iXHZcPFw8XHMqXHooXGhcdyopIiBlbmQ9Il5cejEkIiBjb250YWlucz1AdGNzaFZhckxpc3QsdGNzaFNwZWNpYWwKK3N5biByZWdpb24gdGNzaEhlcmVEb2MgY29udGFpbmVkIG1hdGNoZ3JvdXA9dGNzaFJlZGlyIHN0YXJ0PSJcdlw8XDxccyonXHooXGhcdyopJyIgc3RhcnQ9J1x2XDxcPFxzKiJceihcaFx3KikiJCcgc3RhcnQ9Ilx2XDxcPFxzKlxcXHooXGhcdyopJCIgZW5kPSJeXHoxJCIKKworIiBPcGVyYXRvcnMKK3N5biBtYXRjaCB0Y3NoT3BlcmF0b3IJY29udGFpbmVkICImJlx8IVx+XHwhPVx8PDxcfDw9XHw9PVx8PVx+XHw+PVx8Pj5cfFwqXHxcXlx8XH5cfHx8XHwhXHwlXHwmXHwrXHwtXHwvXHw8XHw+XHx8Igorc3luIG1hdGNoIHRjc2hPcGVyYXRvcgljb250YWluZWQgIlsoKXt9XSIKKworIiBOdW1iZXJzCitzeW4gbWF0Y2ggdGNzaE51bWJlcgljb250YWluZWQgIlx2PC0/XGQrPiIKKworIiBBcmd1ZW1lbnRzCitzeW4gbWF0Y2ggdGNzaEFyZ3VlbWVudAljb250YWluZWQgIlx2XHNAPD0tKFx3fC0pKiIKKworIiBTcGVjaWFsIGNoYXJlY3RvcnMKK3N5biBtYXRjaCB0Y3NoU3BlY2lhbAljb250YWluZWQgIlx2XFxAPCFcXChcZHszfXwuKSIKKworIiAtLS0tLSBTeW5jcm9uaXNpbmcgLS0tLS0KK2lmIGV4aXN0cygidGNzaF9taW5saW5lcyIpCisgICAgZXhlYyAic3luIHN5bmMgbWlubGluZXM9IiAuIHRjc2hfbWlubGluZXMKK2Vsc2UKKyAgICBzeW4gc3luYyBtaW5saW5lcz0xNQkiIEV4Y2VwdCAnaGVyZScgZG9jdW1lbnRzLCBub3RoaW5nIGlzIGxvbmcKK2VuZGlmCisKKyIgRGVmaW5lIGhpZ2hsaWdodGluZyBvZiBzeW50YXggZ3JvdXBzCitoaSBkZWYgbGluayB0Y3NoQnVpbHRpbnMJc3RhdGVtZW50CitoaSBkZWYgbGluayB0Y3NoU2hlbGxWYXIJcHJlcHJvYworaGkgZGVmIGxpbmsgdGNzaEVudlZhcgkJdGNzaFNoZWxsVmFyCitoaSBkZWYgbGluayB0Y3NoQWxpYXNlcwkJdGNzaFNoZWxsVmFyCitoaSBkZWYgbGluayB0Y3NoQ29tbWFuZHMJaWRlbnRpZmllcgoraGkgZGVmIGxpbmsgdGNzaFNldAkJdGNzaEJ1aWx0aW5zCitoaSBkZWYgbGluayB0Y3NoU2V0RW52CQl0Y3NoQnVpbHRpbnMKK2hpIGRlZiBsaW5rIHRjc2hBbGlhcwkJdGNzaEJ1aWx0aW5zCitoaSBkZWYgbGluayB0Y3NoSWYJCXRjc2hCdWlsdGlucworaGkgZGVmIGxpbmsgdGNzaEVsc2UJCXRjc2hCdWlsdGlucworaGkgZGVmIGxpbmsgdGNzaFdoaWxlCQl0Y3NoQnVpbHRpbnMKK2hpIGRlZiBsaW5rIHRjc2hFeHByU3RhcnQJdGNzaEJ1aWx0aW5zCitoaSBkZWYgbGluayB0Y3NoRXhwclZhcgkJdGNzaFVzclZhcgoraGkgZGVmIGxpbmsgdGNzaEV4cHJPcAkJdGNzaE9wZXJhdG9yCitoaSBkZWYgbGluayB0Y3NoRXhwckVuZAkJdGNzaE9wZXJhdG9yCitoaSBkZWYgbGluayB0Y3NoQ29tbWVudAkJY29tbWVudAoraGkgZGVmIGxpbmsgdGNzaENvbW1lbnRUaQlwcmVwcm9jCitoaSBkZWYgbGluayB0Y3NoQ29tbWVudFNwCVdhcm5pbmdNc2cKK2hpIGRlZiBsaW5rIHRjc2hTaGFycEJhbmcJcHJlcHJvYworaGkgZGVmIGxpbmsgdGNzaFRvZG8JCXRvZG8KK2hpIGRlZiBsaW5rIHRjc2hTUXVvdGUJCWNvbnN0YW50CitoaSBkZWYgbGluayB0Y3NoRFF1b3RlCQl0Y3NoU1F1b3RlCitoaSBkZWYgbGluayB0Y3NoQlF1b3RlR3JwCWluY2x1ZGUKK2hpIGRlZiBsaW5rIHRjc2hWYXJFcnJvcgllcnJvcgoraGkgZGVmIGxpbmsgdGNzaFVzclZhcgkJdHlwZQoraGkgZGVmIGxpbmsgdGNzaEFyZ3YJCXRjc2hVc3JWYXIKK2hpIGRlZiBsaW5rIHRjc2hTdWJzdAkJdGNzaFVzclZhcgoraGkgZGVmIGxpbmsgdGNzaE1vZGlmaWVyCXRjc2hBcmd1ZW1lbnQKK2hpIGRlZiBsaW5rIHRjc2hNb2RpZmllckVycm9yCXRjc2hWYXJFcnJvcgoraGkgZGVmIGxpbmsgdGNzaE1ldGEJCXRjc2hTdWJzdAoraGkgZGVmIGxpbmsgdGNzaFJlZGlyCQl0Y3NoT3BlcmF0b3IKK2hpIGRlZiBsaW5rIHRjc2hIZXJlRG9jCQl0Y3NoU1F1b3RlCitoaSBkZWYgbGluayB0Y3NoT3BlcmF0b3IJb3BlcmF0b3IKK2hpIGRlZiBsaW5rIHRjc2hOdW1iZXIJCW51bWJlcgoraGkgZGVmIGxpbmsgdGNzaEFyZ3VlbWVudAlzcGVjaWFsCitoaSBkZWYgbGluayB0Y3NoU3BlY2lhbAkJc3BlY2lhbGNoYXIKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidGNzaCIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3Rlcm1pbmZvLnZpbSBiL3J1bnRpbWUvc3ludGF4L3Rlcm1pbmZvLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWM3ZmZhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdGVybWluZm8udmltCkBAIC0wLDAgKzEsMTE1IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIFRlcm1pbmZvIGRlZmluaXRpb24KKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL3N5bnRheC9wY3AvdGVybWluZm8vCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDUtMjIKKyIgYXJjaC10YWc6CSAgICA4NDY0ZGQ0Ny0wYzVhLTQ3ZDUtODdlZC1hMmFkOTllMTE5NmYKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIga2V5d29yZHMgKGRlZmluZSBmaXJzdCBhcyB0byBub3QgbWVzcyB1cCBjb21tZW50cworc3luIG1hdGNoIHRlcm1pbmZvS2V5d29yZHMJIlssPSN8XSIKKworIiB0b2RvCitzeW4ga2V5d29yZCB0ZXJtaW5mb1RvZG8JY29udGFpbmVkIFRPRE8gRklYTUUgWFhYIE5PVEUKKworIiBjb21tZW50cworc3luIHJlZ2lvbiAgdGVybWluZm9Db21tZW50CW1hdGNoZ3JvdXA9dGVybWluZm9Db21tZW50IHN0YXJ0PSJeIyIgZW5kPSIkIiBjb250YWlucz10ZXJtaW5mb1RvZG8KKworIiBudW1iZXJzCitzeW4gbWF0Y2ggICB0ZXJtaW5mb051bWJlcnMJIlw8WzAtOV1cK1w+IgorCisiIHNwZWNpYWwga2V5cworc3luIG1hdGNoICAgdGVybWluZm9TcGVjaWFsQ2hhcgkiXFxcKFxvXHszfVx8W0VlbmxydGJmc15cLDowXVwpIgorc3luIG1hdGNoICAgdGVybWluZm9TcGVjaWFsQ2hhciAiXF5cYSIKKworIiBkZWxheXMKK3N5biBtYXRjaCAgIHRlcm1pbmZvRGVsYXkJIiQ8WzAtOV1cKz4iCisKKyIgYm9vbGVhbiBjYXBhYmlsaXRpZXMKK3N5biBrZXl3b3JkIHRlcm1pbmZvQm9vbGVhbnMJYncgYW0gYmNlIGNjYyB4aHAgeGhwYSBjcGl4IGNyeHcgeHQgeGVubCBlbyBnbgorc3luIGtleXdvcmQgdGVybWluZm9Cb29sZWFucwloYyBjaHRzIGttIGRhaXN5IGhzIGhscyBpbiBscGl4IGRhIGRiIG1pciBtc2dyCitzeW4ga2V5d29yZCB0ZXJtaW5mb0Jvb2xlYW5zCW54b24geHNiIG5wYyBuZHNjciBucnJtYyBvcyBtYzVpIHhjcGEgc2FtIGVzbG9rCitzeW4ga2V5d29yZCB0ZXJtaW5mb0Jvb2xlYW5zCWh6IHVsIHhvbgorCisiIG51bWVyaWMgY2FwYWJpbGl0aWVzCitzeW4ga2V5d29yZCB0ZXJtaW5mb051bWVyaWNzCWNvbHMgaXQgbGggbHcgbGluZXMgbG0geG1jIG1hIGNvbG9ycyBwYWlycyB3bnVtCitzeW4ga2V5d29yZCB0ZXJtaW5mb051bWVyaWNzCW5jdiBubGFiIHBiIHZ0IHdzbCBiaXR3aW4gYml0eXBlIGJ1ZnN6IGJ0bnMKK3N5biBrZXl3b3JkIHRlcm1pbmZvTnVtZXJpY3MJc3Bpbmggc3BpbnYgbWFkZHIgbWp1bXAgbWNzIG5waW5zIG9yYyBvcmhpIG9ybAorc3luIGtleXdvcmQgdGVybWluZm9OdW1lcmljcwlvcnZpIGNwcyB3aWRjcworCisiIHN0cmluZyBjYXBhYmlsaXRpZXMKK3N5biBrZXl3b3JkIHRlcm1pbmZvU3RyaW5ncwlhY3NjIGNidCBiZWwgY3IgY3BpIGxwaSBjaHIgY3ZyIGNzciBybXAgdGJjIG1nYworc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCWNsZWFyIGVsMSBlbCBlZCBocGEgY21kY2ggY3dpbiBjdXAgY3VkMSBob21lCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJY2l2aXMgY3ViMSBtcmN1cCBjbm9ybSBjdWYxIGxsIGN1dTEgY3Z2aXMgZGVmYworc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCWRjaDEgZGwxIGRpYWwgZHNsIGRjbGsgaGQgZW5hY3Mgc21hY3Mgc21hbSBibGluaworc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCWJvbGQgc21jdXAgc21kYyBkaW0gc3dpZG0gc2RyZnEgc21pciBzaXRtIHNsbQorc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCXNtaWNtIHNubHEgc25ybXEgcHJvdCByZXYgaW52aXMgc3NobSBzbXNvIHNzdWJtCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJc3N1cG0gc211bCBzdW0gc214b24gZWNoIHJtYWNzIHJtYW0gc2dyMCBybWN1cAorc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCXJtZGMgcndpZG0gcm1pciByaXRtIHJsbSBybWljbSByc2htIHJtc28gcnN1Ym0KK3N5biBrZXl3b3JkIHRlcm1pbmZvU3RyaW5ncwlyc3VwbSBybXVsIHJ1bSBybXhvbiBwYXVzZSBob29rIGZsYXNoIGZmIGZzbAorc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCXdpbmdvIGh1cCBpczEgaXMyIGlzMyBpZiBpcHJvZyBpbml0YyBpbml0cCBpY2gxCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJaWwxIGlwIGthMSBrYTMga2IyIGticyBrYmVnIGtjYnQga2MxIGtjMyBrY2FuCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJa3RiYyBrY2xyIGtjbG8ga2NtZCBrY3B5IGtjcnQga2N0YWIga2RjaDEga2RsMQorc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCWtjdWQxIGtybWlyIGtlbmQga2VudCBrZWwga2VkIGtleHQKK3N5biBtYXRjaCAgIHRlcm1pbmZvU3RyaW5ncwkiXDxrZlwoWzAtOV1cfFswLTVdWzAtOV1cfDZbMC0zXVwpXD4iCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJa2ZuZCBraGxwIGtob21lIGtpY2gxIGtpbDEga2N1YjEga2xsIGttcmsKK3N5biBrZXl3b3JkIHRlcm1pbmZvU3RyaW5ncwlrbXNnIGttb3Yga254dCBrbnAga29wbiBrb3B0IGtwcCBrcHJ2IGtwcnQga3Jkbworc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCWtyZWYga3JmciBrcnBsIGtyc3Qga3JlcyBrY3VmMSBrc2F2IGtCRUcga0NBTgorc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCWtDTUQga0NQWSBrQ1JUIGtEQyBrREwga3NsdCBrRU5EIGtFT0wga0VYVCBraW5kCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJa0ZORCBrSExQIGtIT00ga0lDIGtMRlQga01TRyBrTU9WIGtOWFQga09QVCBrUFJWCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJa1BSVCBrcmkga1JETyBrUlBMIGtSSVQga1JFUyBrU0FWIGtTUEQga2h0cyBrVU5ECitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJa3NwZCBrdW5kIGtjdXUxIHJta3ggc21reCBsZjAgbGYxIGxmMTAgbGYyIGxmMworc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCWxmNCBsZjUgbGY2IGxmNyBsZjggbGY5IGZsbiBybWxuIHNtbG4gcm1tIHNtbQorc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCW1ocGEgbWN1ZDEgbWN1YjEgbWN1ZjEgbXZwYSBtY3V1MSBuZWwgcG9yZGVyIG9jCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJb3AgcGFkIGRjaCBkbCBjdWQgbWN1ZCBpY2ggaW5kbiBpbCBjdWIgbWN1YiBjdWYKK3N5biBrZXl3b3JkIHRlcm1pbmZvU3RyaW5ncwltY3VmIHJpbiBjdXUgbWNjdSBwZmtleSBwZmxvYyBwZnggcGxuIG1jMCBtYzVwCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJbWM0IG1jNSBwdWxzZSBxZGlhbCBybWNsayByZXAgcmZpIHJzMSByczIgcnMzIHJmCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJcmMgdnBhIHNjIGluZCByaSBzY3Mgc2dyIHNldGJzbWdiIHNtZ2JwIHNjbGsgc2NwCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJc2V0YiBzZXRmIHNtZ2wgc21nbHAgc21nciBzbWdycCBodHMgc21ndCBzbWd0cAorc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCXdpbmQgc2JpbSBzY3NkIHJiaW0gcmNzZCBzdWJjcyBzdXBjcyBodCBkb2NyCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJdHNsIHRvbmUgdWMgaHUKK3N5biBtYXRjaCAgIHRlcm1pbmZvU3RyaW5ncwkiXDx1WzAtOV1cPiIKK3N5biBrZXl3b3JkIHRlcm1pbmZvU3RyaW5ncwl3YWl0IHhvZmZjIHhvbmMgemVyb20KK3N5biBrZXl3b3JkIHRlcm1pbmZvU3RyaW5ncwlzY2VzYSBiaWNyIGJpbmVsIGJpcmVwIGNzbm0gY3NpbiBjb2xvcm5tIGRlZmJpCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJZGV2dCBkaXNwYyBlbmRiaSBzbXBjaCBzbXNjIHJtcGNoIHJtc2MgZ2V0bQorc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCWttb3VzIG1pbmZvIHBjdHJtIHBmeGwgcmVxbXAgc2Nlc2MgczBkcyBzMWRzCitzeW4ga2V5d29yZCB0ZXJtaW5mb1N0cmluZ3MJczJkcyBzM2RzIHNldGFiIHNldGFmIHNldGNvbG9yIHNtZ2xyIHNsaW5lcworc3luIGtleXdvcmQgdGVybWluZm9TdHJpbmdzCXNtZ3RiIGVoaGxtIGVsaGxtIGVyaGxtIGV0aGxtIGV2aGxtIHNncjEKK3N5biBrZXl3b3JkIHRlcm1pbmZvU3RyaW5ncwlzbGVuZ3Roc0wKKworIiBwYXJhbWV0ZXJpemVkIHN0cmluZ3MKK3N5biBtYXRjaCB0ZXJtaW5mb1BhcmFtZXRlcnMJIiVbJWRjc3BsKyovbUFPJnxePTw+IX5pP3RlOy1dIgorc3luIG1hdGNoIHRlcm1pbmZvUGFyYW1ldGVycwkiJVwoJ1tBLVpdJ1x8e1swLTldXHsxLDJ9fVx8cFsxLTldXHxQW2Etel1cfGdbQS1aXVwpIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF90ZXJtaW5mb19zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF90ZXJtaW5mb19zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB0ZXJtaW5mb0NvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgdGVybWluZm9Ub2RvCQlUb2RvCisgIEhpTGluayB0ZXJtaW5mb051bWJlcnMJTnVtYmVyCisgIEhpTGluayB0ZXJtaW5mb1NwZWNpYWxDaGFyCVNwZWNpYWxDaGFyCisgIEhpTGluayB0ZXJtaW5mb0RlbGF5CQlTcGVjaWFsCisgIEhpTGluayB0ZXJtaW5mb0Jvb2xlYW5zCVR5cGUKKyAgSGlMaW5rIHRlcm1pbmZvTnVtZXJpY3MJVHlwZQorICBIaUxpbmsgdGVybWluZm9TdHJpbmdzCVR5cGUKKyAgSGlMaW5rIHRlcm1pbmZvUGFyYW1ldGVycwlLZXl3b3JkCisgIEhpTGluayB0ZXJtaW5mb0tleXdvcmRzCUtleXdvcmQKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInRlcm1pbmZvIgorCisiIHZpbTogc2V0IHN0cz0yIHN3PTI6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90ZXgudmltIGIvcnVudGltZS9zeW50YXgvdGV4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWIxMzRkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdGV4LnZpbQpAQCAtMCwwICsxLDQ4MCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVRlWAorIiBNYWludGFpbmVyOglEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxOZHJPY2hpcFNAUGNhbXBiZWxsQWZhbWlseS5NYml6PgorIiBMYXN0IENoYW5nZToJSnVuIDAxLCAyMDA0CisiIFZlcnNpb246CTI0CisiIFVSTDoJCWh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCN2aW1saW5rc19zeW50YXgKKyIKKyIgTm90ZXM6IHt7ezEKKyIKKyIgMS4gSWYgeW91IGhhdmUgYSBcYmVnaW57dmVyYmF0aW19IHRoYXQgYXBwZWFycyB0byBvdmVycnVuIGl0cyBib3VuZGFyaWVzLAorIiAgICB1c2UgJXN0b3B6b25lLgorIgorIiAyLiBSdW4tb24gZXF1YXRpb25zICgkLi4kIGFuZCAkJC4uJCQsIHBhcnRpY3VsYXJseSkgY2FuIGFsc28gYmUgc3RvcHBlZAorIiAgICBieSBzdWl0YWJsZSB1c2Ugb2YgJXN0b3B6b25lLgorIgorIiAzLiBJZiB5b3UgaGF2ZSBhIHNsb3cgY29tcHV0ZXIsIHlvdSBtYXkgd2lzaCB0byBtb2RpZnkKKyIKKyIJc3luIHN5bmMgbWF4bGluZXM9MjAwCisiCXN5biBzeW5jIG1pbmxpbmVzPTUwCisiCisiICAgIHRvIHZhbHVlcyB0aGF0IGFyZSBtb3JlIHRvIHlvdXIgbGlraW5nLgorIgorIiA0LiBUaGVyZSBpcyBubyBtYXRjaC1zeW5jaW5nIGZvciAkLi4uJCBhbmQgJCQuLi4kJDsgaGVuY2UgbGFyZ2UKKyIgICAgZXF1YXRpb24gYmxvY2tzIGNvbnN0cnVjdGVkIHRoYXQgd2F5IG1heSBleGhpYml0IHN5bmNpbmcgcHJvYmxlbXMuCisiICAgICh0aGVyZSdzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBiZWdpbi9lbmQgcGF0dGVybnMpCisiCisiIDUuIElmIHlvdSBoYXZlIHRoZSB2YXJpYWJsZSAiZzp0ZXhfbm9fZXJyb3IiIGRlZmluZWQgdGhlbiBub25lIG9mIHRoZQorIiAgICBsZXhpY2FsIGVycm9yLWNoZWNraW5nIHdpbGwgYmUgZG9uZS4KKyIKKyIgICAgaWUuIGxldCBnOnRleF9ub19lcnJvcj0xCisKKyIgVmVyc2lvbiBDbGVhcnM6IHt7ezEKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLiB7e3sxCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF90ZXhfc3ludGF4X2luaXRzIikKKyBsZXQgZGlkX3RleF9zeW50YXhfaW5pdHMgPSAxCisgaWYgdmVyc2lvbiA8IDUwOAorICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorIGVsc2UKKyAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgZW5kaWYKK2VuZGlmCitpZiBleGlzdHMoImc6dGV4X3RleCIpICYmICFleGlzdHMoImc6dGV4X25vX2Vycm9yIikKKyBsZXQgZzp0ZXhfbm9fZXJyb3I9IDEKK2VuZGlmCisKKyIgRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIHVzZSAiKi5zdHkiIG1vZGUKKyIgVGhlIHVzZXIgbWF5IG92ZXJyaWRlIHRoZSBub3JtYWwgZGV0ZXJtaW5hdGlvbiBieSBzZXR0aW5nCisiICAgZzp0ZXhfc3R5bGlzaCB0byAxICAgICAgKGZvciAgICAiKi5zdHkiIG1vZGUpCisiICAgIG9yIHRvICAgICAgICAgICAwIGVsc2UgKG5vcm1hbCAiKi50ZXgiIG1vZGUpCisiIG9yIG9uIGEgYnVmZmVyLWJ5LWJ1ZmZlciBiYXNpcyB3aXRoIGI6dGV4X3N0eWxpc2gKK2xldCBiOmV4dGZuYW1lPWV4cGFuZCgiJTplIikKK2lmIGV4aXN0cygiZzp0ZXhfc3R5bGlzaCIpCisgbGV0IGI6dGV4X3N0eWxpc2g9IGc6dGV4X3N0eWxpc2gKK2Vsc2VpZiAhZXhpc3RzKCJiOnRleF9zdHlsaXNoIikKKyBpZiBiOmV4dGZuYW1lID09ICJzdHkiIHx8IGI6ZXh0Zm5hbWUgPT0gImNscyIgfHwgYjpleHRmbmFtZSA9PSAiY2xvIiB8fCBiOmV4dGZuYW1lID09ICJkdHgiIHx8IGI6ZXh0Zm5hbWUgPT0gImx0eCIKKyAgbGV0IGI6dGV4X3N0eWxpc2g9IDEKKyBlbHNlCisgIGxldCBiOnRleF9zdHlsaXNoPSAwCisgZW5kaWYKK2VuZGlmCisKKyIgKExhKVRlWCBrZXl3b3Jkczogb25seSB1c2UgdGhlIGxldHRlcnMgYS16QS1aIHt7ezEKKyIgYnV0IF8gaXMgdGhlIG9ubHkgb25lIHRoYXQgY2F1c2VzIHByb2JsZW1zLgoraWYgdmVyc2lvbiA8IDYwMAorICBzZXQgaXNrLT1fCisgIGlmIGI6dGV4X3N0eWxpc2gKKyAgICBzZXQgaXNrKz1ACisgIGVuZGlmCitlbHNlCisgIHNldGxvY2FsIGlzay09XworICBpZiBiOnRleF9zdHlsaXNoCisgICAgc2V0bG9jYWwgaXNrKz1ACisgIGVuZGlmCitlbmRpZgorCisiIENsdXN0ZXJzOiB7e3sxCisiIC0tLS0tLS0tCitzeW4gY2x1c3RlciB0ZXhDbWRHcm91cAkJY29udGFpbnM9dGV4Q21kQm9keSx0ZXhDb21tZW50LHRleERlZlBhcm0sdGV4RGVsaW1pdGVyLHRleERvY1R5cGUsdGV4SW5wdXQsdGV4TGVuZ3RoLHRleExpZ2F0dXJlLHRleE1hdGhEZWxpbSx0ZXhNYXRoT3Blcix0ZXhOZXdDbWQsdGV4TmV3RW52LHRleFJlZlpvbmUsdGV4U2VjdGlvbix0ZXhTZWN0aW9uTWFya2VyLHRleFNlY3Rpb25OYW1lLHRleFNwZWNpYWxDaGFyLHRleFN0YXRlbWVudCx0ZXhTdHJpbmcsdGV4VHlwZVNpemUsdGV4VHlwZVN0eWxlCitpZiAhZXhpc3RzKCJnOnRleF9ub19lcnJvciIpCisgc3luIGNsdXN0ZXIgdGV4Q21kR3JvdXAJYWRkPXRleE1hdGhFcnJvcgorZW5kaWYKK3N5biBjbHVzdGVyIHRleEVudkdyb3VwCQljb250YWlucz10ZXhNYXRjaGVyLHRleE1hdGhEZWxpbSx0ZXhTcGVjaWFsQ2hhcix0ZXhTdGF0ZW1lbnQKK3N5biBjbHVzdGVyIHRleE1hdGNoR3JvdXAJY29udGFpbnM9dGV4QWNjZW50LHRleEJhZE1hdGgsdGV4Q29tbWVudCx0ZXhEZWZDbWQsdGV4RGVsaW1pdGVyLHRleERvY1R5cGUsdGV4SW5wdXQsdGV4TGVuZ3RoLHRleExpZ2F0dXJlLHRleE1hdGNoZXIsdGV4TmV3Q21kLHRleE5ld0Vudix0ZXhPbmx5TWF0aCx0ZXhQYXJlbix0ZXhSZWZab25lLHRleFNlY3Rpb24sdGV4U3BlY2lhbENoYXIsdGV4U3RhdGVtZW50LHRleFN0cmluZyx0ZXhUeXBlU2l6ZSx0ZXhUeXBlU3R5bGUsdGV4Wm9uZSx0ZXhJbnB1dEZpbGUsdGV4T3B0aW9uCitpZiAhZXhpc3RzKCJ0ZXhfbm9fbWF0aCIpCisgc3luIGNsdXN0ZXIgdGV4TWF0aFpvbmVzCWNvbnRhaW5zPXRleE1hdGhab25lVix0ZXhNYXRoWm9uZVcsdGV4TWF0aFpvbmVYLHRleE1hdGhab25lWSx0ZXhNYXRoWm9uZVoKKyBzeW4gY2x1c3RlciB0ZXhNYXRjaEdyb3VwCWFkZD1AdGV4TWF0aFpvbmVzCisgc3luIGNsdXN0ZXIgdGV4TWF0aERlbGltR3JvdXAJY29udGFpbnM9dGV4TWF0aERlbGltQmFkLHRleE1hdGhEZWxpbUtleSx0ZXhNYXRoRGVsaW1TZXQxLHRleE1hdGhEZWxpbVNldDIKKyBzeW4gY2x1c3RlciB0ZXhNYXRoTWF0Y2hHcm91cAljb250YWlucz1AdGV4TWF0aFpvbmVzLHRleENvbW1lbnQsdGV4RGVmQ21kLHRleERlbGltaXRlcix0ZXhEb2NUeXBlLHRleElucHV0LHRleExlbmd0aCx0ZXhMaWdhdHVyZSx0ZXhNYXRoRGVsaW0sdGV4TWF0aE1hdGNoZXIsdGV4TWF0aE9wZXIsdGV4TmV3Q21kLHRleE5ld0Vudix0ZXhSZWZab25lLHRleFNlY3Rpb24sdGV4U3BlY2lhbENoYXIsdGV4U3RhdGVtZW50LHRleFN0cmluZyx0ZXhUeXBlU2l6ZSx0ZXhUeXBlU3R5bGUsdGV4Wm9uZQorIHN5biBjbHVzdGVyIHRleE1hdGhab25lR3JvdXAJY29udGFpbnM9dGV4Q29tbWVudCx0ZXhEZWxpbWl0ZXIsdGV4TGVuZ3RoLHRleE1hdGhEZWxpbSx0ZXhNYXRoTWF0Y2hlcix0ZXhNYXRoT3Blcix0ZXhSZWZab25lLHRleFNwZWNpYWxDaGFyLHRleFN0YXRlbWVudCx0ZXhUeXBlU2l6ZSx0ZXhUeXBlU3R5bGUKKyBpZiAhZXhpc3RzKCJnOnRleF9ub19lcnJvciIpCisgIHN5biBjbHVzdGVyIHRleE1hdGhNYXRjaEdyb3VwCWFkZD10ZXhNYXRoRXJyb3IKKyAgc3luIGNsdXN0ZXIgdGV4TWF0aFpvbmVHcm91cAlhZGQ9dGV4TWF0aEVycm9yCisgZW5kaWYKK2VuZGlmCisKKyIgVHJ5IHRvIGZsYWcge30gYW5kICgpIG1pc21hdGNoZXM6IHt7ezEKK2lmICFleGlzdHMoImc6dGV4X25vX2Vycm9yIikKKyBzeW4gcmVnaW9uIHRleE1hdGNoZXIJCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJ7IiBza2lwPSJcXFxcXHxcXFt7fV0iCWVuZD0ifSIJCWNvbnRhaW5zPUB0ZXhNYXRjaEdyb3VwLHRleEVycm9yCisgc3luIHJlZ2lvbiB0ZXhNYXRjaGVyCQltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXFsiCQkJCWVuZD0iXSIJCWNvbnRhaW5zPUB0ZXhNYXRjaEdyb3VwLHRleEVycm9yCitlbHNlCisgc3luIHJlZ2lvbiB0ZXhNYXRjaGVyCQltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0ieyIgc2tpcD0iXFxcXFx8XFxbe31dIgllbmQ9In0iCQljb250YWlucz1AdGV4TWF0Y2hHcm91cAorIHN5biByZWdpb24gdGV4TWF0Y2hlcgkJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IlxbIgkJCQllbmQ9Il0iCQljb250YWlucz1AdGV4TWF0Y2hHcm91cAorZW5kaWYKK3N5biByZWdpb24gdGV4UGFyZW4JCXN0YXJ0PSIoIgkJCQkJCWVuZD0iKSIJCWNvbnRhaW5zPUB0ZXhNYXRjaEdyb3VwCitpZiAhZXhpc3RzKCJnOnRleF9ub19lcnJvciIpCisgc3luIG1hdGNoICB0ZXhFcnJvcgkJIlt9XF0pXSIKK2VuZGlmCitpZiAhZXhpc3RzKCJ0ZXhfbm9fbWF0aCIpCisgaWYgIWV4aXN0cygiZzp0ZXhfbm9fZXJyb3IiKQorICBzeW4gbWF0Y2ggIHRleE1hdGhFcnJvcgkifSIJY29udGFpbmVkCisgZW5kaWYKKyBzeW4gcmVnaW9uIHRleE1hdGhNYXRjaGVyCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJ7IiAgc2tpcD0iXFxcXFx8XFx9IiAgZW5kPSJ9IiBlbmQ9IiVzdG9wem9uZVw+IiBjb250YWluZWQgY29udGFpbnM9QHRleE1hdGhNYXRjaEdyb3VwCitlbmRpZgorCisiIFRlWC9MYVRlWCBrZXl3b3Jkczoge3t7MQorIiBJbnN0ZWFkIG9mIHRyeWluZyB0byBiZSBBbGwgS25vd2luZywgSSBqdXN0IG1hdGNoIFwuLmFscGhhbWVyaWMuLgorIiBOb3RlIHRoYXQgKi50ZXggZmlsZXMgbWF5IG5vdCBoYXZlICJAIiBpbiB0aGVpciBcY29tbWFuZHMKK2lmIGV4aXN0cygiZzp0ZXhfdGV4IikgfHwgYjp0ZXhfc3R5bGlzaAorICBzeW4gbWF0Y2ggdGV4U3RhdGVtZW50CSJcXFthLXpBLVpAXVwrIgorZWxzZQorICBzeW4gbWF0Y2ggdGV4U3RhdGVtZW50CSJcXFxhXCsiCisgIGlmICFleGlzdHMoImc6dGV4X25vX2Vycm9yIikKKyAgIHN5biBtYXRjaCB0ZXhFcnJvcgkJIlxcXGEqQFthLXpBLVpAXSoiCisgIGVuZGlmCitlbmRpZgorCisiIFRlWC9MYVRlWCBkZWxpbWl0ZXJzOiB7e3sxCitzeW4gbWF0Y2ggdGV4RGVsaW1pdGVyCQkiJiIKK3N5biBtYXRjaCB0ZXhEZWxpbWl0ZXIJCSJcXFxcIgorCisiIFRleC9MYXRleCBPcHRpb25zOiB7e3sxCitzeW4gbWF0Y2ggdGV4T3B0aW9uCSJbXlxcXVx6cyNcZFwrXHxeI1xkXCsiCisKKyIgdGV4QWNjZW50ICh0bnggdG8gS2FyaW0gQmVsYWJhcykgYXZvaWRzIGFubm95aW5nIGhpZ2hsaWdodGluZyBmb3IgYWNjZW50czoge3t7MQoraWYgYjp0ZXhfc3R5bGlzaAorICBzeW4gbWF0Y2ggdGV4QWNjZW50CQkiXFxbYmNkdnVIXVteYS16QS1aQF0ibWU9ZS0xCisgIHN5biBtYXRjaCB0ZXhMaWdhdHVyZQkJIlxcXChbaWpvbExdXHxhZVx8b2VcfHNzXHxBQVx8QUVcfE9FXClbXmEtekEtWkBdIm1lPWUtMQorZWxzZQorICBzeW4gbWF0Y2ggdGV4QWNjZW50CQkiXFxbYmNkdnVIXVxBIm1lPWUtMQorICBzeW4gbWF0Y2ggdGV4TGlnYXR1cmUJCSJcXFwoW2lqb2xMXVx8YWVcfG9lXHxzc1x8QUFcfEFFXHxPRVwpXEEibWU9ZS0xCitlbmRpZgorc3luIG1hdGNoIHRleEFjY2VudAkJIlxcW2JjZHZ1SF0kIgorc3luIG1hdGNoIHRleEFjY2VudAkJK1xcWz1eLlx+ImAnXSsKK3N5biBtYXRjaCB0ZXhBY2NlbnQJCStcXFsnPXQnLmNedWQidmJ+SHJde1xhfSsKK3N5biBtYXRjaCB0ZXhMaWdhdHVyZQkJIlxcXChbaWpvbExdXHxhZVx8b2VcfHNzXHxBQVx8QUVcfE9FXCkkIgorCisiIFxiZWdpbnt9L1xlbmR7fSBzZWN0aW9uIG1hcmtlcnM6IHt7ezEKK3N5biBtYXRjaCAgdGV4U2VjdGlvbk1hcmtlcgkiXFxiZWdpblw+XHxcXGVuZFw+IiBuZXh0Z3JvdXA9dGV4U2VjdGlvbk5hbWUKK3N5biByZWdpb24gdGV4U2VjdGlvbk5hbWUJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9InsiIGVuZD0ifSIgIGNvbnRhaW5lZCBuZXh0Z3JvdXA9dGV4U2VjdGlvbk1vZGlmaWVyCitzeW4gcmVnaW9uIHRleFNlY3Rpb25Nb2RpZmllcgltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXFsiIGVuZD0iXSIgY29udGFpbmVkCisKKyIgXGRvY3VtZW50Y2xhc3MsIFxkb2N1bWVudHN0eWxlLCBcdXNlcGFja2FnZToge3t7MQorc3luIG1hdGNoICB0ZXhEb2NUeXBlCQkiXFxkb2N1bWVudGNsYXNzXD5cfFxcZG9jdW1lbnRzdHlsZVw+XHxcXHVzZXBhY2thZ2VcPiIJbmV4dGdyb3VwPXRleFNlY3Rpb25OYW1lLHRleERvY1R5cGVBcmdzCitzeW4gcmVnaW9uIHRleERvY1R5cGVBcmdzCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcWyIgZW5kPSJdIgkJCWNvbnRhaW5lZAluZXh0Z3JvdXA9dGV4U2VjdGlvbk5hbWUKKworIiBUZVggaW5wdXQ6IHt7ezEKK3N5biBtYXRjaCB0ZXhJbnB1dAkJIlxcaW5wdXRcc1wrW2EtekEtWi8uMC05X15dXCsiaHM9cys3CQkJCWNvbnRhaW5zPXRleFN0YXRlbWVudAorc3luIG1hdGNoIHRleElucHV0RmlsZQkJIlxcaW5jbHVkZVwoZ3JhcGhpY3NcfGxpc3RcKVw9XChcWy5cey19XF1cKVw9XHMqey5cey19fSIJY29udGFpbnM9dGV4U3RhdGVtZW50LHRleElucHV0Q3VybGllcworc3luIG1hdGNoIHRleElucHV0RmlsZQkJIlxcXChlcHNmaWdcfGlucHV0XHx1c2VwYWNrYWdlXClccypcKFxbLipcXVwpXD17Llx7LX19IgkJY29udGFpbnM9dGV4U3RhdGVtZW50LHRleElucHV0Q3VybGllcyx0ZXhJbnB1dEZpbGVPcHQKK3N5biBtYXRjaCB0ZXhJbnB1dEN1cmxpZXMJIlt7fV0iCQkJCQkJCQljb250YWluZWQKK3N5biByZWdpb24gdGV4SW5wdXRGaWxlT3B0CW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcWyIgZW5kPSJcXSIJCQljb250YWluZWQKKworIiBUeXBlIFN0eWxlcyAoTGFUZVggMi4wOSk6IHt7ezEKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXHJtXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFxlbVw+Igorc3luIG1hdGNoIHRleFR5cGVTdHlsZQkJIlxcYmZcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXGl0XD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFxzbFw+Igorc3luIG1hdGNoIHRleFR5cGVTdHlsZQkJIlxcc2ZcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXHNjXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFx0dFw+IgorCisiIFR5cGUgU3R5bGVzOiBhdHRyaWJ1dGVzLCBjb21tYW5kcywgZmFtaWxpZXMsIGV0YyAoTGFUZVgyRSk6IHt7ezEKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXHRleHRiZlw+Igorc3luIG1hdGNoIHRleFR5cGVTdHlsZQkJIlxcdGV4dGl0XD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFx0ZXh0bWRcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXHRleHRybVw+Igorc3luIG1hdGNoIHRleFR5cGVTdHlsZQkJIlxcdGV4dHNjXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFx0ZXh0c2ZcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXHRleHRzbFw+Igorc3luIG1hdGNoIHRleFR5cGVTdHlsZQkJIlxcdGV4dHR0XD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFx0ZXh0dXBcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXGVtcGhcPiIKKworc3luIG1hdGNoIHRleFR5cGVTdHlsZQkJIlxcbWF0aGJiXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFxtYXRoYmZcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXG1hdGhjYWxcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXG1hdGhmcmFrXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFxtYXRoaXRcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXG1hdGhub3JtYWxcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXG1hdGhybVw+Igorc3luIG1hdGNoIHRleFR5cGVTdHlsZQkJIlxcbWF0aHNmXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFxtYXRodHRcPiIKKworc3luIG1hdGNoIHRleFR5cGVTdHlsZQkJIlxccm1mYW1pbHlcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXHNmZmFtaWx5XD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFx0dGZhbWlseVw+IgorCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFxpdHNoYXBlXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFxzY3NoYXBlXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFxzbHNoYXBlXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFx1cHNoYXBlXD4iCisKK3N5biBtYXRjaCB0ZXhUeXBlU3R5bGUJCSJcXGJmc2VyaWVzXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVN0eWxlCQkiXFxtZHNlcmllc1w+IgorCisiIFNvbWUgdHlwZSBzaXplczoge3t7MQorc3luIG1hdGNoIHRleFR5cGVTaXplCQkiXFx0aW55XD4iCitzeW4gbWF0Y2ggdGV4VHlwZVNpemUJCSJcXHNjcmlwdHNpemVcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU2l6ZQkJIlxcZm9vdG5vdGVzaXplXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVNpemUJCSJcXHNtYWxsXD4iCitzeW4gbWF0Y2ggdGV4VHlwZVNpemUJCSJcXG5vcm1hbHNpemVcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU2l6ZQkJIlxcbGFyZ2VcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU2l6ZQkJIlxcTGFyZ2VcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU2l6ZQkJIlxcTEFSR0VcPiIKK3N5biBtYXRjaCB0ZXhUeXBlU2l6ZQkJIlxcaHVnZVw+Igorc3luIG1hdGNoIHRleFR5cGVTaXplCQkiXFxIdWdlXD4iCisKKyIgU3BhY2Vjb2RlcyAoVGVYJ2lzbXMpOiB7e3sxCisiIFxtYXRoY29kZWBcXl5APSIyMjAxICBcZGVsY29kZWBcKD0iMDI4MzAwICBcc2Zjb2RlYFwpPTAgXHVjY29kZWBYPWBYICBcbGNjb2RlYHg9YHgKK3N5biBtYXRjaCB0ZXhTcGFjZUNvZGUJCSJcXFwobWF0aFx8Y2F0XHxkZWxcfGxjXHxzZlx8dWNcKWNvZGVgIm1lPWUtMSBuZXh0Z3JvdXA9dGV4U3BhY2VDb2RlQ2hhcgorc3luIG1hdGNoIHRleFNwYWNlQ29kZUNoYXIgICAgImBcXFw9LlwoXF4uXClcPT1cKFxkXHxcIlx4XHsxLDZ9XHxgLlwpIgljb250YWluZWQKKworIiBTZWN0aW9ucywgc3Vic2VjdGlvbnMsIGV0Yzoge3t7MQorc3luIG1hdGNoIHRleFNlY3Rpb24JCSJcXFwoc3ViXCkqc2VjdGlvblwqXD1cPiIKK3N5biBtYXRjaCB0ZXhTZWN0aW9uCQkiXFxcKHRpdGxlXHxhdXRob3JcfHBhcnRcfGNoYXB0ZXJcfHBhcmFncmFwaFx8c3VicGFyYWdyYXBoXClcPiIKK3N5biBtYXRjaCB0ZXhTZWN0aW9uCQkiXFxiZWdpblxzKntccyphYnN0cmFjdFxzKn1cfFxcZW5kXHMqe1xzKmFic3RyYWN0XHMqfSIKKworIiBCYWQgTWF0aCAobWlzbWF0Y2hlZCk6IHt7ezEKK2lmICFleGlzdHMoInRleF9ub19tYXRoIikKKyBzeW4gbWF0Y2ggdGV4QmFkTWF0aAkJIlxcZW5kXHMqe1xzKlwoYXJyYXlcfGdhdGhlcmVkXHxiQnB2Vl1tYXRyaXhcfHNwbGl0XHxzdWJlcXVhdGlvbnNcfHNtYWxsbWF0cml4XHx4eGFsaWduYXRcKVxzKn0iCisgc3luIG1hdGNoIHRleEJhZE1hdGgJCSJcXGVuZFxzKntccypcKGFsaWduXHxhbGlnbmF0XHxkaXNwbGF5bWF0aFx8ZGlzcGxheW1hdGhcfGVxbmFycmF5XHxlcXVhdGlvblx8ZmxhbGlnblx8Z2F0aGVyXHxtYXRoXHxtdWx0bGluZVx8eGFsaWduYXRcKVwqXD1ccyp9IgorIHN5biBtYXRjaCB0ZXhCYWRNYXRoCQkiXFxbXF0pXSIKK2VuZGlmCisKKyIgTWF0aCBab25lczoge3t7MQoraWYgIWV4aXN0cygidGV4X25vX21hdGgiKQorICIgVGV4TmV3TWF0aFpvbmU6IGNyZWF0ZXMgYSBtYXRoem9uZSB3aXRoIHRoZSBnaXZlbiBzdWZmaXggYW5kIG1hdGh6b25lIG5hbWUuIHt7ezIKKyAiICAgICAgICAgICAgICAgICBTdGFycmVkIGZvcm1zIGFyZSBjcmVhdGVkIGlmIHN0YXJmb3JtIGlzIHRydWUuICBTdGFycmVkCisgIiAgICAgICAgICAgICAgICAgZm9ybXMgaGF2ZSBzeW50YXggZ3JvdXAgYW5kIHN5bmNocm9uaXphdGlvbiBncm91cHMgd2l0aCBhCisgIiAgICAgICAgICAgICAgICAgIlMiIGFwcGVuZGVkLiAgSGFuZGxlczogY2x1c3Rlciwgc3ludGF4LCBzeW5jLCBhbmQgSGlMaW5rLgorIGZ1biEgVGV4TmV3TWF0aFpvbmUoc2Z4LG1hdGh6b25lLHN0YXJmb3JtKQorICAgbGV0IGdycG5hbWUgID0gInRleE1hdGhab25lIi5hOnNmeAorICAgbGV0IHN5bmNuYW1lID0gInRleFN5bmNNYXRoWm9uZSIuYTpzZngKKyAgIGV4ZSAic3luIGNsdXN0ZXIgdGV4TWF0aFpvbmVzIGFkZD0iLmdycG5hbWUKKyAgIGV4ZSAnc3luIHJlZ2lvbiAnLmdycG5hbWUuJyBzdGFydD0nLiInIi4nXFxiZWdpblxzKntccyonLmE6bWF0aHpvbmUuJ1xzKn0nLiInIi4nIGVuZD0nLiInIi4nXFxlbmRccyp7XHMqJy5hOm1hdGh6b25lLidccyp9Jy4iJyIuJyBrZWVwZW5kIGNvbnRhaW5zPUB0ZXhNYXRoWm9uZUdyb3VwJworICAgZXhlICdzeW4gc3luYyBtYXRjaCAnLnN5bmNuYW1lLicgZ3JvdXBoZXJlICcuZ3JwbmFtZS4nICJcXGJlZ2luXHMqe1xzKicuYTptYXRoem9uZS4nXCpccyp9IicKKyAgIGV4ZSAnc3luIHN5bmMgbWF0Y2ggJy5zeW5jbmFtZS4nIGdyb3VwaGVyZSAnLmdycG5hbWUuJyAiXFxiZWdpblxzKntccyonLmE6bWF0aHpvbmUuJ1wqXHMqfSInCisgICBleGUgJ0hpTGluayAnLmdycG5hbWUuJyB0ZXhNYXRoJworICAgaWYgYTpzdGFyZm9ybQorICAgIGxldCBncnBuYW1lICA9ICJ0ZXhNYXRoWm9uZSIuYTpzZnguJ1MnCisgICAgbGV0IHN5bmNuYW1lID0gInRleFN5bmNNYXRoWm9uZSIuYTpzZnguJ1MnCisgICAgZXhlICJzeW4gY2x1c3RlciB0ZXhNYXRoWm9uZXMgYWRkPSIuZ3JwbmFtZQorICAgIGV4ZSAnc3luIHJlZ2lvbiAnLmdycG5hbWUuJyBzdGFydD0nLiInIi4nXFxiZWdpblxzKntccyonLmE6bWF0aHpvbmUuJ1wqXHMqfScuIiciLicgZW5kPScuIiciLidcXGVuZFxzKntccyonLmE6bWF0aHpvbmUuJ1wqXHMqfScuIiciLicga2VlcGVuZCBjb250YWlucz1AdGV4TWF0aFpvbmVHcm91cCcKKyAgICBleGUgJ3N5biBzeW5jIG1hdGNoICcuc3luY25hbWUuJyBncm91cGhlcmUgJy5ncnBuYW1lLicgIlxcYmVnaW5ccyp7XHMqJy5hOm1hdGh6b25lLidcKlxzKn0iJworICAgIGV4ZSAnc3luIHN5bmMgbWF0Y2ggJy5zeW5jbmFtZS4nIGdyb3VwaGVyZSAnLmdycG5hbWUuJyAiXFxiZWdpblxzKntccyonLmE6bWF0aHpvbmUuJ1wqXHMqfSInCisgICAgZXhlICdIaUxpbmsgJy5ncnBuYW1lLicgdGV4TWF0aCcKKyAgIGVuZGlmCisgZW5kZnVuCisKKyAiIFN0YW5kYXJkIE1hdGggWm9uZXM6IHt7ezIKKyBjYWxsIFRleE5ld01hdGhab25lKCJBIiwiYWxpZ24iLDEpCisgY2FsbCBUZXhOZXdNYXRoWm9uZSgiQiIsImFsaWduYXQiLDEpCisgY2FsbCBUZXhOZXdNYXRoWm9uZSgiQyIsImRpc3BsYXltYXRoIiwxKQorIGNhbGwgVGV4TmV3TWF0aFpvbmUoIkQiLCJlcW5hcnJheSIsMSkKKyBjYWxsIFRleE5ld01hdGhab25lKCJFIiwiZXF1YXRpb24iLDEpCisgY2FsbCBUZXhOZXdNYXRoWm9uZSgiRiIsImZsYWxpZ24iLDEpCisgY2FsbCBUZXhOZXdNYXRoWm9uZSgiRyIsImdhdGhlciIsMSkKKyBjYWxsIFRleE5ld01hdGhab25lKCJIIiwibWF0aCIsMSkKKyBjYWxsIFRleE5ld01hdGhab25lKCJJIiwibXVsdGxpbmUiLDEpCisgY2FsbCBUZXhOZXdNYXRoWm9uZSgiSiIsInN1YmVxdWF0aW9ucyIsMCkKKyBjYWxsIFRleE5ld01hdGhab25lKCJLIiwieGFsaWduYXQiLDEpCisgY2FsbCBUZXhOZXdNYXRoWm9uZSgiTCIsInh4YWxpZ25hdCIsMCkKKworICIgSW5saW5lIE1hdGggWm9uZXM6IHt7ezIKKyBzeW4gcmVnaW9uIHRleE1hdGhab25lVgltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXFwoIgltYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IlxcKVx8JXN0b3B6b25lXD4iCWtlZXBlbmQgY29udGFpbnM9QHRleE1hdGhab25lR3JvdXAKKyBzeW4gcmVnaW9uIHRleE1hdGhab25lVwltYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXFxcWyIJbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSJcXF1cfCVzdG9wem9uZVw+IglrZWVwZW5kIGNvbnRhaW5zPUB0ZXhNYXRoWm9uZUdyb3VwCisgc3luIHJlZ2lvbiB0ZXhNYXRoWm9uZVgJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IlwkIiBza2lwPSJcXFxcXHxcXFwkIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IlwkIiBlbmQ9IiVzdG9wem9uZVw+Igljb250YWlucz1AdGV4TWF0aFpvbmVHcm91cAorIHN5biByZWdpb24gdGV4TWF0aFpvbmVZCW1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcJFwkIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9IlwkXCQiIGVuZD0iJXN0b3B6b25lXD4iCWtlZXBlbmQJCWNvbnRhaW5zPUB0ZXhNYXRoWm9uZUdyb3VwCisgc3luIHJlZ2lvbiB0ZXhNYXRoWm9uZVoJbWF0Y2hncm91cD10ZXhTdGF0ZW1lbnQgc3RhcnQ9IlxcZW5zdXJlbWF0aFxzKnsiIG1hdGNoZ3JvdXA9dGV4U3RhdGVtZW50IGVuZD0ifSIgZW5kPSIlc3RvcHpvbmVcPiIJY29udGFpbnM9QHRleE1hdGhab25lR3JvdXAKKworIHN5biBtYXRjaCB0ZXhNYXRoT3BlcgkJIltfXj1dIiBjb250YWluZWQKKworICIgXGxlZnQuLnNvbWV0aGluZy4uIGFuZCBccmlnaHQuLnNvbWV0aGluZy4uIHN1cHBvcnQ6IHt7ezIKKyBzeW4gbWF0Y2ggICB0ZXhNYXRoRGVsaW1CYWQJY29udGFpbmVkCQkiXFMiCisgc3luIG1hdGNoICAgdGV4TWF0aERlbGltCWNvbnRhaW5lZAkJIlxcXChsZWZ0XHxyaWdodFx8W2JCXWlnZ1w9W2xyXVwpXD4iCXNraXB3aGl0ZSBuZXh0Z3JvdXA9dGV4TWF0aERlbGltU2V0MSx0ZXhNYXRoRGVsaW1TZXQyLHRleE1hdGhEZWxpbUJhZAorIHN5biBtYXRjaCAgIHRleE1hdGhEZWxpbQljb250YWluZWQJCSJcXFwobGVmdFx8cmlnaHRcKWFycm93XD5cfFw8XChbYUFdcnJvd1x8YnJhY2VcKVw9dmVydFw+IgorIHN5biBtYXRjaCAgIHRleE1hdGhEZWxpbQljb250YWluZWQJCSJcXGxlZnRlcW5cPiIKKyBzeW4gbWF0Y2ggICB0ZXhNYXRoRGVsaW1TZXQyCWNvbnRhaW5lZAkiXFwiCQluZXh0Z3JvdXA9dGV4TWF0aERlbGltS2V5LHRleE1hdGhEZWxpbUJhZAorIHN5biBtYXRjaCAgIHRleE1hdGhEZWxpbVNldDEJY29udGFpbmVkCSJbPD4oKVtcXXwvLl1cfFxcW3t9fF0iCisgc3luIGtleXdvcmQgdGV4TWF0aERlbGltS2V5CWNvbnRhaW5lZAliYWNrc2xhc2ggICAgICAgbGNlaWwgICAgICAgICAgIGxWZXJ0ICAgICAgICAgICByZ3JvdXAgICAgICAgICAgdXBhcnJvdworIHN5biBrZXl3b3JkIHRleE1hdGhEZWxpbUtleQljb250YWluZWQJZG93bmFycm93ICAgICAgIGxmbG9vciAgICAgICAgICByYW5nbGUgICAgICAgICAgcm1vdXN0YWNoZSAgICAgIFVwYXJyb3cKKyBzeW4ga2V5d29yZCB0ZXhNYXRoRGVsaW1LZXkJY29udGFpbmVkCURvd25hcnJvdyAgICAgICBsZ3JvdXAgICAgICAgICAgcmJyYWNlICAgICAgICAgIHJ2ZXJ0ICAgICAgICAgICB1cGRvd25hcnJvdworIHN5biBrZXl3b3JkIHRleE1hdGhEZWxpbUtleQljb250YWluZWQJbGFuZ2xlICAgICAgICAgIGxtb3VzdGFjaGUgICAgICByY2VpbCAgICAgICAgICAgclZlcnQgICAgICAgICAgIFVwZG93bmFycm93Cisgc3luIGtleXdvcmQgdGV4TWF0aERlbGltS2V5CWNvbnRhaW5lZAlsYnJhY2UgICAgICAgICAgbHZlcnQgICAgICAgICAgIHJmbG9vcgorZW5kaWYKKworIiBTcGVjaWFsIFRlWCBjaGFyYWN0ZXJzICAoIFwkIFwmIFwlIFwjIFx7IFx9IFxfIFxTIFxQICkgOiB7e3sxCitzeW4gbWF0Y2ggdGV4U3BlY2lhbENoYXIJIlxcWyQmJSN7fV9dIgoraWYgYjp0ZXhfc3R5bGlzaAorICBzeW4gbWF0Y2ggdGV4U3BlY2lhbENoYXIJIlxcW1NQQF1bXmEtekEtWkBdIm1lPWUtMQorZWxzZQorICBzeW4gbWF0Y2ggdGV4U3BlY2lhbENoYXIJIlxcW1NQQF1cQSJtZT1lLTEKK2VuZGlmCitzeW4gbWF0Y2ggdGV4U3BlY2lhbENoYXIJIlxcXFwiCitpZiAhZXhpc3RzKCJ0ZXhfbm9fbWF0aCIpCisgc3luIG1hdGNoIHRleE9ubHlNYXRoCQkiW19eXSIKK2VuZGlmCitzeW4gbWF0Y2ggdGV4U3BlY2lhbENoYXIJIlxeXF5bMC05YS1mXVx7Mn1cfFxeXF5cUyIKKworIiBDb21tZW50czoge3t7MQorIiAgICBOb3JtYWwgVGVYIExhVGVYICAgICA6ICAgJS4uLi4KKyIgICAgRG9jdW1lbnRlZCBUZVggRm9ybWF0OiAgXl5BLi4uCS1hbmQtCWxlYWRpbmcgJXMgKG9ubHkpCitzeW4gY2x1c3RlciB0ZXhDb21tZW50R3JvdXAJY29udGFpbnM9dGV4VG9kbyxAU3BlbGwKK3N5biBjYXNlIGlnbm9yZQorc3luIGtleXdvcmQgdGV4VG9kbwkJY29udGFpbmVkCQljb21iYWsJZml4bWUJdG9kbworc3luIGNhc2UgbWF0Y2gKK2lmIGI6ZXh0Zm5hbWUgPT0gImR0eCIKKyAgc3luIG1hdGNoIHRleENvbW1lbnQJCSJcXlxeQS4qJCIJY29udGFpbnM9QHRleENvbW1lbnRHcm91cAorICBzeW4gbWF0Y2ggdGV4Q29tbWVudAkJIl4lXCsiCQljb250YWlucz1AdGV4Q29tbWVudEdyb3VwCitlbHNlCisgIHN5biBtYXRjaCB0ZXhDb21tZW50CQkiJS4qJCIJCWNvbnRhaW5zPUB0ZXhDb21tZW50R3JvdXAKK2VuZGlmCisKKyIgU2VwYXJhdGUgbGluZXMgdXNlZCBmb3IgdmVyYmAgYW5kIHZlcmIjIHNvIHRoYXQgdGhlIGVuZCBjb25kaXRpb25zIHt7ezEKKyIgd2lsbCBhcHByb3ByaWF0ZWx5IHRlcm1pbmF0ZS4gIElkZWFsbHkgdmltIHdvdWxkIGxldCBtZSBzYXZlIGEKKyIgY2hhcmFjdGVyIGZyb20gdGhlIHN0YXJ0IHBhdHRlcm4gYW5kIHJlLXVzZSBpdCBpbiB0aGUgZW5kLXBhdHRlcm4uCitzeW4gcmVnaW9uIHRleFpvbmUJCXN0YXJ0PSJcXGJlZ2lue3ZlcmJhdGltfSIJCWVuZD0iXFxlbmR7dmVyYmF0aW19XHwlc3RvcHpvbmVcPiIKK2lmIHZlcnNpb24gPCA2MDAKKyBzeW4gcmVnaW9uIHRleFpvbmUJCXN0YXJ0PSJcXHZlcmJcKlw9YCIJCQllbmQ9ImBcfCVzdG9wem9uZVw+IgorIHN5biByZWdpb24gdGV4Wm9uZQkJc3RhcnQ9IlxcdmVyYlwqXD0jIgkJCWVuZD0iI1x8JXN0b3B6b25lXD4iCitlbHNlCisgIGlmIGI6dGV4X3N0eWxpc2gKKyAgICBzeW4gcmVnaW9uIHRleFpvbmUJCXN0YXJ0PSJcXHZlcmJcKlw9XHooW15cdGEtekEtWkBdXCkiCWVuZD0iXHoxXHwlc3RvcHpvbmVcPiIKKyAgZWxzZQorICAgIHN5biByZWdpb24gdGV4Wm9uZQkJc3RhcnQ9IlxcdmVyYlwqXD1ceihbXlx0YS16QS1aXVwpIgllbmQ9Ilx6MVx8JXN0b3B6b25lXD4iCisgIGVuZGlmCitlbmRpZgorCisiIFRleCBSZWZlcmVuY2UgWm9uZXM6IHt7ezEKK3N5biByZWdpb24gdGV4Wm9uZQkJc3RhcnQ9IkBzYW1weyIJCQkJZW5kPSJ9XHwlc3RvcHpvbmVcPiIKK3N5biByZWdpb24gdGV4UmVmWm9uZQkJbWF0Y2hncm91cD10ZXhTdGF0ZW1lbnQgc3RhcnQ9Ilxcbm9jaXRleyIJCWtlZXBlbmQgZW5kPSJ9XHwlc3RvcHpvbmVcPiIgIGNvbnRhaW5zPXRleENvbW1lbnQsdGV4RGVsaW1pdGVyCitzeW4gcmVnaW9uIHRleFJlZlpvbmUJCW1hdGNoZ3JvdXA9dGV4U3RhdGVtZW50IHN0YXJ0PSJcXGJpYmxpb2dyYXBoeXsiCQlrZWVwZW5kIGVuZD0ifVx8JXN0b3B6b25lXD4iICBjb250YWlucz10ZXhDb21tZW50LHRleERlbGltaXRlcgorc3luIHJlZ2lvbiB0ZXhSZWZab25lCQltYXRjaGdyb3VwPXRleFN0YXRlbWVudCBzdGFydD0iXFxjaXRlXChbdHBdXCpcPVwpXD17IglrZWVwZW5kIGVuZD0ifVx8JXN0b3B6b25lXD4iICBjb250YWlucz10ZXhDb21tZW50LHRleERlbGltaXRlcgorc3luIHJlZ2lvbiB0ZXhSZWZab25lCQltYXRjaGdyb3VwPXRleFN0YXRlbWVudCBzdGFydD0iXFxsYWJlbHsiCQlrZWVwZW5kIGVuZD0ifVx8JXN0b3B6b25lXD4iICBjb250YWlucz10ZXhDb21tZW50LHRleERlbGltaXRlcgorc3luIHJlZ2lvbiB0ZXhSZWZab25lCQltYXRjaGdyb3VwPXRleFN0YXRlbWVudCBzdGFydD0iXFxcKHBhZ2VcfGVxXClyZWZ7IglrZWVwZW5kIGVuZD0ifVx8JXN0b3B6b25lXD4iICBjb250YWlucz10ZXhDb21tZW50LHRleERlbGltaXRlcgorc3luIHJlZ2lvbiB0ZXhSZWZab25lCQltYXRjaGdyb3VwPXRleFN0YXRlbWVudCBzdGFydD0iXFx2XD1yZWZ7IgkJa2VlcGVuZCBlbmQ9In1cfCVzdG9wem9uZVw+IiAgY29udGFpbnM9dGV4Q29tbWVudCx0ZXhEZWxpbWl0ZXIKKworIiBIYW5kbGUgbmV3Y29tbWFuZCwgbmV3ZW52aXJvbm1lbnQgOiB7e3sxCitzeW4gbWF0Y2ggIHRleE5ld0NtZAkJCQkiXFxuZXdjb21tYW5kXD4iCQkJbmV4dGdyb3VwPXRleENtZE5hbWUgc2tpcHdoaXRlIHNraXBubAorc3luIHJlZ2lvbiB0ZXhDbWROYW1lIGNvbnRhaW5lZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0ieyJycz1zKzEgIGVuZD0ifSIJCW5leHRncm91cD10ZXhDbWRBcmdzLHRleENtZEJvZHkgc2tpcHdoaXRlIHNraXBubAorc3luIHJlZ2lvbiB0ZXhDbWRBcmdzIGNvbnRhaW5lZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0iXFsicnM9cysxIGVuZD0iXSIJCW5leHRncm91cD10ZXhDbWRCb2R5IHNraXB3aGl0ZSBza2lwbmwKK3N5biByZWdpb24gdGV4Q21kQm9keSBjb250YWluZWQgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9InsicnM9cysxIHNraXA9IlxcXFxcfFxcW3t9XSIJbWF0Y2hncm91cD1EZWxpbWl0ZXIgZW5kPSJ9IiBjb250YWlucz1AdGV4Q21kR3JvdXAKK3N5biBtYXRjaCAgdGV4TmV3RW52CQkJCSJcXG5ld2Vudmlyb25tZW50XD4iCQkJbmV4dGdyb3VwPXRleEVudk5hbWUgc2tpcHdoaXRlIHNraXBubAorc3luIHJlZ2lvbiB0ZXhFbnZOYW1lIGNvbnRhaW5lZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0ieyJycz1zKzEgIGVuZD0ifSIJCW5leHRncm91cD10ZXhFbnZCZ24gc2tpcHdoaXRlIHNraXBubAorc3luIHJlZ2lvbiB0ZXhFbnZCZ24gIGNvbnRhaW5lZCBtYXRjaGdyb3VwPURlbGltaXRlciBzdGFydD0ieyJycz1zKzEgIGVuZD0ifSIJCW5leHRncm91cD10ZXhFbnZFbmQgc2tpcHdoaXRlIHNraXBubCBjb250YWlucz1AdGV4RW52R3JvdXAKK3N5biByZWdpb24gdGV4RW52RW5kICBjb250YWluZWQgbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9InsicnM9cysxICBlbmQ9In0iCQlza2lwd2hpdGUgc2tpcG5sIGNvbnRhaW5zPUB0ZXhFbnZHcm91cAorCisiIERlZmluaXRpb25zL0NvbW1hbmRzOiB7e3sxCitzeW4gbWF0Y2ggdGV4RGVmQ21kCQkJCSJcXGRlZlw+IgkJCQluZXh0Z3JvdXA9dGV4RGVmTmFtZSBza2lwd2hpdGUgc2tpcG5sCitpZiBiOnRleF9zdHlsaXNoCisgIHN5biBtYXRjaCB0ZXhEZWZOYW1lIGNvbnRhaW5lZAkJIlxcW2EtekEtWkBdXCsiCQkJCW5leHRncm91cD10ZXhEZWZQYXJtcyx0ZXhDbWRCb2R5IHNraXB3aGl0ZSBza2lwbmwKKyAgc3luIG1hdGNoIHRleERlZk5hbWUgY29udGFpbmVkCQkiXFxbXmEtekEtWkBdIgkJCQluZXh0Z3JvdXA9dGV4RGVmUGFybXMsdGV4Q21kQm9keSBza2lwd2hpdGUgc2tpcG5sCitlbHNlCisgIHN5biBtYXRjaCB0ZXhEZWZOYW1lIGNvbnRhaW5lZAkJIlxcXGFcKyIJCQkJbmV4dGdyb3VwPXRleERlZlBhcm1zLHRleENtZEJvZHkgc2tpcHdoaXRlIHNraXBubAorICBzeW4gbWF0Y2ggdGV4RGVmTmFtZSBjb250YWluZWQJCSJcXFxBIgkJCQkJbmV4dGdyb3VwPXRleERlZlBhcm1zLHRleENtZEJvZHkgc2tpcHdoaXRlIHNraXBubAorZW5kaWYKK3N5biBtYXRjaCB0ZXhEZWZQYXJtcyAgY29udGFpbmVkCQkiI1tee10qIgljb250YWlucz10ZXhEZWZQYXJtCW5leHRncm91cD10ZXhDbWRCb2R5IHNraXB3aGl0ZSBza2lwbmwKK3N5biBtYXRjaCAgdGV4RGVmUGFybSAgY29udGFpbmVkCQkiI1xkXCsiCisKKyIgVGVYIExlbmd0aHM6IHt7ezEKK3N5biBtYXRjaCAgdGV4TGVuZ3RoCQkiXDxcZFwrXChcLlxkXCtcKVw9XHMqXCh0cnVlXClcPVxzKlwoYnBcfGNjXHxjbVx8ZGRcfGVtXHxleFx8aW5cfG1tXHxwY1x8cHRcfHNwXClcPiIKKworIiBUZVggU3RyaW5nIERlbGltaXRlcnM6IHt7ezEKK3N5biBtYXRjaCB0ZXhTdHJpbmcJCSJcKGBgXHwnJ1x8LCxcKSIKKworIiBMYVRlWCBzeW5jaHJvbml6YXRpb246IHt7ezEKK3N5biBzeW5jIG1heGxpbmVzPTIwMAorc3luIHN5bmMgbWlubGluZXM9NTAKKworc3luICBzeW5jIG1hdGNoIHRleFN5bmNTdG9wCQkJZ3JvdXB0aGVyZSBOT05FCQkiJXN0b3B6b25lXD4iCisKKyIgU3luY2hyb25pemF0aW9uOiB7e3sxCisiIFRoZSAkLi4kIGFuZCAkJC4uJCQgbWFrZSBmb3IgaW1wb3NzaWJsZSBzeW5jIHBhdHRlcm5zCisiIChvbmUgY2FuJ3QgdGVsbCBpZiBhICIkJCIgc3RhcnRzIG9yIHN0b3BzIGEgbWF0aCB6b25lIGJ5IGl0c2VsZikKKyIgVGhlIGZvbGxvd2luZyBncm91cHRoZXJlcyBjb3VwbGVkIHdpdGggbWlubGluZXMgYWJvdmUKKyIgaGVscCBpbXByb3ZlIHRoZSBvZGRzIG9mIGdvb2Qgc3luY2luZy4KK2lmICFleGlzdHMoInRleF9ub19tYXRoIikKKyBzeW4gc3luYyBtYXRjaCB0ZXhTeW5jTWF0aFpvbmVBCQlncm91cHRoZXJlIE5PTkUJCSJcXGVuZHthYnN0cmFjdH0iCisgc3luIHN5bmMgbWF0Y2ggdGV4U3luY01hdGhab25lQQkJZ3JvdXB0aGVyZSBOT05FCQkiXFxlbmR7Y2VudGVyfSIKKyBzeW4gc3luYyBtYXRjaCB0ZXhTeW5jTWF0aFpvbmVBCQlncm91cHRoZXJlIE5PTkUJCSJcXGVuZHtkZXNjcmlwdGlvbn0iCisgc3luIHN5bmMgbWF0Y2ggdGV4U3luY01hdGhab25lQQkJZ3JvdXB0aGVyZSBOT05FCQkiXFxlbmR7ZW51bWVyYXRlfSIKKyBzeW4gc3luYyBtYXRjaCB0ZXhTeW5jTWF0aFpvbmVBCQlncm91cHRoZXJlIE5PTkUJCSJcXGVuZHtpdGVtaXplfSIKKyBzeW4gc3luYyBtYXRjaCB0ZXhTeW5jTWF0aFpvbmVBCQlncm91cHRoZXJlIE5PTkUJCSJcXGVuZHt0YWJsZX0iCisgc3luIHN5bmMgbWF0Y2ggdGV4U3luY01hdGhab25lQQkJZ3JvdXB0aGVyZSBOT05FCQkiXFxlbmR7dGFidWxhcn0iCisgc3luIHN5bmMgbWF0Y2ggdGV4U3luY01hdGhab25lQQkJZ3JvdXB0aGVyZSBOT05FCQkiXFxcKHN1YlwpKnNlY3Rpb25cPiIKK2VuZGlmCisKKyIgSGlnaGxpZ2h0aW5nOiB7e3sxCitpZiBkaWRfdGV4X3N5bnRheF9pbml0cyA9PSAxCisgbGV0IGRpZF90ZXhfc3ludGF4X2luaXRzPSAyCisgICIgVGVYIGhpZ2hsaWdodGluZyBncm91cHMgd2hpY2ggc2hvdWxkIHNoYXJlIHNpbWlsYXIgaGlnaGxpZ2h0aW5nCisgIGlmICFleGlzdHMoImc6dGV4X25vX2Vycm9yIikKKyAgIGlmICFleGlzdHMoInRleF9ub19tYXRoIikKKyAgICBIaUxpbmsgdGV4QmFkTWF0aAkJdGV4RXJyb3IKKyAgICBIaUxpbmsgdGV4TWF0aERlbGltQmFkCXRleEVycm9yCisgICAgSGlMaW5rIHRleE1hdGhFcnJvcgkJdGV4RXJyb3IKKyAgICBpZiAhYjp0ZXhfc3R5bGlzaAorICAgICAgSGlMaW5rIHRleE9ubHlNYXRoCXRleEVycm9yCisgICAgZW5kaWYKKyAgIGVuZGlmCisgICBIaUxpbmsgdGV4RXJyb3IJCUVycm9yCisgIGVuZGlmCisKKyAgSGlMaW5rIHRleERlZkNtZAkJdGV4RGVmCisgIEhpTGluayB0ZXhEZWZOYW1lCQl0ZXhEZWYKKyAgSGlMaW5rIHRleERvY1R5cGUJCXRleENtZE5hbWUKKyAgSGlMaW5rIHRleERvY1R5cGVBcmdzCQl0ZXhDbWRBcmdzCisgIEhpTGluayB0ZXhJbnB1dEZpbGVPcHQJdGV4Q21kQXJncworICBIaUxpbmsgdGV4SW5wdXRDdXJsaWVzCXRleERlbGltaXRlcgorICBIaUxpbmsgdGV4TGlnYXR1cmUJCXRleFNwZWNpYWxDaGFyCisgIGlmICFleGlzdHMoInRleF9ub19tYXRoIikKKyAgIEhpTGluayB0ZXhNYXRoRGVsaW1TZXQxCXRleE1hdGhEZWxpbQorICAgSGlMaW5rIHRleE1hdGhEZWxpbVNldDIJdGV4TWF0aERlbGltCisgICBIaUxpbmsgdGV4TWF0aERlbGltS2V5CXRleE1hdGhEZWxpbQorICAgSGlMaW5rIHRleE1hdGhNYXRjaGVyCXRleE1hdGgKKyAgIEhpTGluayB0ZXhNYXRoWm9uZVcJCXRleE1hdGgKKyAgIEhpTGluayB0ZXhNYXRoWm9uZVgJCXRleE1hdGgKKyAgIEhpTGluayB0ZXhNYXRoWm9uZVkJCXRleE1hdGgKKyAgIEhpTGluayB0ZXhNYXRoWm9uZVoJCXRleE1hdGgKKyAgZW5kaWYKKyAgSGlMaW5rIHRleFNlY3Rpb25NYXJrZXIJdGV4Q21kTmFtZQorICBIaUxpbmsgdGV4U2VjdGlvbk5hbWUJCXRleFNlY3Rpb24KKyAgSGlMaW5rIHRleFNwYWNlQ29kZQkJdGV4U3RhdGVtZW50CisgIEhpTGluayB0ZXhUeXBlU2l6ZQkJdGV4VHlwZQorICBIaUxpbmsgdGV4VHlwZVN0eWxlCQl0ZXhUeXBlCisKKyAgICIgQmFzaWMgVGVYIGhpZ2hsaWdodGluZyBncm91cHMKKyAgSGlMaW5rIHRleENtZEFyZ3MJCU51bWJlcgorICBIaUxpbmsgdGV4Q21kTmFtZQkJU3RhdGVtZW50CisgIEhpTGluayB0ZXhDb21tZW50CQlDb21tZW50CisgIEhpTGluayB0ZXhEZWYJCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHRleERlZlBhcm0JCVNwZWNpYWwKKyAgSGlMaW5rIHRleERlbGltaXRlcgkJRGVsaW1pdGVyCisgIEhpTGluayB0ZXhJbnB1dAkJU3BlY2lhbAorICBIaUxpbmsgdGV4SW5wdXRGaWxlCQlTcGVjaWFsCisgIEhpTGluayB0ZXhMZW5ndGgJCU51bWJlcgorICBIaUxpbmsgdGV4TWF0aAkJU3BlY2lhbAorICBIaUxpbmsgdGV4TWF0aERlbGltCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHRleE1hdGhPcGVyCQlPcGVyYXRvcgorICBIaUxpbmsgdGV4TmV3Q21kCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHRleE5ld0VudgkJU3RhdGVtZW50CisgIEhpTGluayB0ZXhPcHRpb24JCU51bWJlcgorICBIaUxpbmsgdGV4UmVmWm9uZQkJU3BlY2lhbAorICBIaUxpbmsgdGV4U2VjdGlvbgkJUHJlQ29uZGl0CisgIEhpTGluayB0ZXhTcGFjZUNvZGVDaGFyCVNwZWNpYWwKKyAgSGlMaW5rIHRleFNwZWNpYWxDaGFyCQlTcGVjaWFsQ2hhcgorICBIaUxpbmsgdGV4U3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHRleFN0cmluZwkJU3RyaW5nCisgIEhpTGluayB0ZXhUb2RvCQlUb2RvCisgIEhpTGluayB0ZXhUeXBlCQlUeXBlCisgIEhpTGluayB0ZXhab25lCQlQcmVDb25kaXQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworIiBDdXJyZW50IFN5bnRheDoge3t7MQordW5sZXQgYjpleHRmbmFtZQorbGV0ICAgYjpjdXJyZW50X3N5bnRheCA9ICJ0ZXgiCisiIHZpbTogdHM9OCBmZG09bWFya2VyCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90ZXhpbmZvLnZpbSBiL3J1bnRpbWUvc3ludGF4L3RleGluZm8udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZDVkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC90ZXhpbmZvLnZpbQpAQCAtMCwwICsxLDQwOSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVRleGluZm8gKG1hY3JvIHBhY2thZ2UgZm9yIFRlWCkKKyIgTWFpbnRhaW5lcjoJU2FuZG9yIEtvcGFueWkgPHNhbmRvci5rb3BhbnlpQG1haWxib3guaHU+CisiIFVSTDoJCTwtPgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMTEKKyIKKyIgdGhlIGZpbGUgZm9sbG93cyB0aGUgVGV4aW5mbyBtYW51YWwgc3RydWN0dXJlOyB0aGlzIGZpbGUgaXMgYmFzZWQKKyIgb24gbWFudWFsIGZvciBUZXhpbmZvIHZlcnNpb24gNC4wLCAyOCBTZXB0ZW1iZXIgMTk5OQorIiBzaW5jZSBAIGNhbiBoYXZlIHNwZWNpYWwgbWVhbmluZ3MsIGV2ZXJ5dGhpbmcgaXMgJ21hdGNoJy1lZCBhbmQgJ3JlZ2lvbictZWQKKyIgKGluY2x1ZGluZyBAIGluICdpc2tleXdvcmQnIG9wdGlvbiBoYXMgdW5leHBlY3RlZCBlZmZlY3RzKQorCisiIFJlbW92ZSBhbnkgb2xkIHN5bnRheCBzdHVmZiBoYW5naW5nIGFyb3VuZCwgaWYgbmVlZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworaWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBsZXQgbWFpbl9zeW50YXggPSAndGV4aW5mbycKK2VuZGlmCisKKyJpbiBUZXhpbmZvIGNhbiBiZSByZWFsIGJpZyB0aGluZ3MsIGxpa2UgdGFibGVzOyBzeW5jIGZvciB0aGF0CitzeW4gc3luYyBsaW5lcz0yMDAKKworInNvbWUgZ2VuZXJhbCBzdHVmZgorInN5biBtYXRjaCB0ZXhpbmZvRXJyb3IgICAgICJcUyIgY29udGFpbmVkIFRPRE8KK3N5biBtYXRjaCB0ZXhpbmZvSWRlbnQJICAgICJca1wrIgkJICBjb250YWluZWQgIklERU5UaWZpZXIKK3N5biBtYXRjaCB0ZXhpbmZvQXNzaWdubWVudCAiXGtcK1xzKj1ccypca1wrXHMqJCIgY29udGFpbmVkICJhc3NpZ21lbnQgc3RhdGVtZW50ICggdmFyID0gdmFsICkKK3N5biBtYXRjaCB0ZXhpbmZvU2luZ2xlUGFyICAiXGtcK1xzKiQiCQkgIGNvbnRhaW5lZCAic2luZ2xlIHBhcmFtZXRlciAodXNlZCBmb3Igc2V2ZXJhbCBALWNvbW1hbmRzKQorc3luIG1hdGNoIHRleGluZm9JbmRleFBhciAgICJca1xrXHMqJCIJCSAgY29udGFpbmVkICJwYXJhbS4gdXNlZCBmb3IgZGlmZmVyZW50ICppbmRleCBjb21tYW5kcyAoKyBAZG9jdW1lbnRsYW5ndWFnZSBjb21tYW5kKQorCisKKyJtYXJraW5nIHdvcmRzIGFuZCBwaHJhc2VzIChjaGFwLiA5IGluIFRleGluZm8gbWFudWFsKQorIihhbG1vc3QpIGV2ZXJ5dGhpbmcgYXBwZWFycyBhcyAnY29udGFpbmVkJyB0b287IGlzIGZvciB0YWJsZXMgKEB0YWJsZSkKKworInRoaXMgY2hhcHRlciBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZmlsZSB0byBhdm9pZCBvdmVyd3JpdGluZ3MKKworc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhcgkJCQkgICAgIkBhY3JvbnltIgkJY29udGFpbmVkCitzeW4gcmVnaW9uIHRleGluZm9CcmNQcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQGFjcm9ueW17IiBlbmQ9In0iIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIJCQkJICAgICJAYiIJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkBieyIJZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyCQkJCSAgICAiQGNpdGUiCQljb250YWluZWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAY2l0ZXsiCWVuZD0ifSIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyLHRleGluZm9CcmNQcm1BdENtZAorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhcgkJCQkgICAgIkBjb2RlIgkJY29udGFpbmVkCitzeW4gcmVnaW9uIHRleGluZm9CcmNQcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQGNvZGV7IgllbmQ9In0iIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIJCQkJICAgICJAY29tbWFuZCIJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkBjb21tYW5keyIgZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyCQkJCSAgICAiQGRmbiIJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkBkZm57IgllbmQ9In0iIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIJCQkJICAgICJAZW1haWwiCQljb250YWluZWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAZW1haWx7IgllbmQ9In0iIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIJCQkJICAgICJAZW1waCIJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkBlbXBoeyIJZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyCQkJCSAgICAiQGVudiIJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkBlbnZ7IgllbmQ9In0iIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIJCQkJICAgICJAZmlsZSIJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkBmaWxleyIJZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyCQkJCSAgICAiQGkiCQljb250YWluZWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAaXsiCWVuZD0ifSIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyLHRleGluZm9CcmNQcm1BdENtZAorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhcgkJCQkgICAgIkBrYmQiCQljb250YWluZWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAa2JkeyIJZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyCQkJCSAgICAiQGtleSIJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkBrZXl7IgllbmQ9In0iIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcgorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhcgkJCQkgICAgIkBvcHRpb24iCQljb250YWluZWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAb3B0aW9ueyIJZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIJCQkJICAgICJAciIJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkByeyIJZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyCQkJCSAgICAiQHNhbXAiCQljb250YWluZWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAc2FtcHsiCWVuZD0ifSIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyLHRleGluZm9CcmNQcm1BdENtZAorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhcgkJCQkgICAgIkBzYyIJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkBzY3siCWVuZD0ifSIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyLHRleGluZm9CcmNQcm1BdENtZAorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhcgkJCQkgICAgIkBzdHJvbmciCQljb250YWluZWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAc3Ryb25neyIJZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyCQkJCSAgICAiQHQiCQljb250YWluZWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAdHsiCWVuZD0ifSIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyLHRleGluZm9CcmNQcm1BdENtZAorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhcgkJCQkgICAgIkB1cmwiCQljb250YWluZWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAdXJseyIJZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyCQkJCSAgICAiQHZhciIJCWNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkB2YXJ7IgllbmQ9In0iIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIl5Aa2JkaW5wdXRzdHlsZSIgbmV4dGdyb3VwPXRleGluZm9TaW5nbGVQYXIgc2tpcHdoaXRlCisKKworIm92ZXJ2aWV3IG9mIFRleGluZm8gKGNoYXAuIDEgaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gbWF0Y2ggdGV4aW5mb0NvbW1lbnQgICJAYyAuKiIKK3N5biBtYXRjaCB0ZXhpbmZvQ29tbWVudCAgIkBjJCIKK3N5biBtYXRjaCB0ZXhpbmZvQ29tbWVudCAgIkBjb21tZW50IC4qIgorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCBtYXRjaGdyb3VwPXRleGluZm9Db21tZW50IHN0YXJ0PSJeQGlnbm9yZVxzKiQiIGVuZD0iXkBlbmQgaWdub3JlXHMqJCIgY29udGFpbnM9QUxMCisKKworImJlZ2lubmluZyBhIFRleGluZm8gZmlsZSAoY2hhcC4gMyBpbiBUZXhpbmZvIG1hbnVhbCkKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kICAgICBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQGNlbnRlciAiCQkgc2tpcD0iXFwkIiBlbmQ9IiQiCQkgICAgICAgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyLHRleGluZm9CcmNQcm1BdENtZCBvbmVsaW5lCitzeW4gcmVnaW9uIHRleGluZm9NbHRsbkRNQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AZGV0YWlsbWVudVxzKiQiCQkgICAgZW5kPSJeQGVuZCBkZXRhaWxtZW51XHMqJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyLHRleGluZm9CcmNQcm1BdENtZAorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgICAgIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQHNldGZpbGVuYW1lICIgICAgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhciBvbmVsaW5lCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCAgICAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5Ac2V0dGl0bGUgIiAgICAgICBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kICAgICBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBzaG9ydHRpdGxlcGFnZSAiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgICAgIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQHRpdGxlICIJCSBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kICBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQHRpdGxlZm9udHsiCQkgICAgZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gcmVnaW9uIHRleGluZm9NbHRsbkF0Q21kICAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AdGl0bGVwYWdlXHMqJCIJCSAgICBlbmQ9Il5AZW5kIHRpdGxlcGFnZVxzKiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQsdGV4aW5mb01sdGxuRE1BdENtZCx0ZXhpbmZvQXRDbWQsdGV4aW5mb1BybUF0Q21kLHRleGluZm9NbHRsbkF0Q21kCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCAgICAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AdnNraXAgIgkJIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorc3luIG1hdGNoIHRleGluZm9BdENtZCAiXkBleGFtcGxlaW5kZW50IiAgICAgbmV4dGdyb3VwPXRleGluZm9TaW5nbGVQYXIgc2tpcHdoaXRlCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kICJeQGhlYWRpbmdzIgkgICAgIG5leHRncm91cD10ZXhpbmZvU2luZ2xlUGFyIHNraXB3aGl0ZQorc3luIG1hdGNoIHRleGluZm9BdENtZCAiXlxcaW5wdXQiCSAgICAgbmV4dGdyb3VwPXRleGluZm9TaW5nbGVQYXIgc2tpcHdoaXRlCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kICJeQHBhcmFncmFwaGluZGVudCIgICBuZXh0Z3JvdXA9dGV4aW5mb1NpbmdsZVBhciBza2lwd2hpdGUKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIl5Ac2V0Y2hhcHRlcm5ld3BhZ2UiIG5leHRncm91cD10ZXhpbmZvU2luZ2xlUGFyIHNraXB3aGl0ZQorCisKKyJlbmRpbmcgYSBUZXhpbmZvIGZpbGUgKGNoYXAuIDQgaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQGF1dGhvciAiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorImFsbCBiZWxvdyBAYnllIHNob3VsZCBiZSBjb21tZW50IFRPRE8KK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIl5AYnllXHMqJCIKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIl5AY29udGVudHNccyokIgorc3luIG1hdGNoIHRleGluZm9BdENtZCAiXkBwcmludGluZGV4IiBuZXh0Z3JvdXA9dGV4aW5mb0luZGV4UGFyIHNraXB3aGl0ZQorc3luIG1hdGNoIHRleGluZm9BdENtZCAiXkBzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlXHMqJCIKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIl5Ac2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlXHMqJCIKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIl5Ac2hvcnRjb250ZW50c1xzKiQiCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kICJeQHN1bW1hcnljb250ZW50c1xzKiQiCisKKworImNoYXB0ZXIgc3RydWN0dXJpbmcgKGNoYXAuIDUgaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBhcHBlbmRpeCIJCSBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGFwcGVuZGl4c2VjIgkgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhciBvbmVsaW5lCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBhcHBlbmRpeHNlY3Rpb24iCSBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGFwcGVuZGl4c3Vic2VjIgkgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhciBvbmVsaW5lCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBhcHBlbmRpeHN1YnN1YnNlYyIJIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AY2VudGVyY2hhcCIJCSBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGNoYXBoZWFkaW5nIgkgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhciBvbmVsaW5lCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBjaGFwdGVyIgkJIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AaGVhZGluZyIJCSBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQG1ham9yaGVhZGluZyIJIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5Ac2VjdGlvbiIJCSBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQHN1YmhlYWRpbmcgIgkgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhciBvbmVsaW5lCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBzdWJzZWN0aW9uIgkJIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5Ac3Vic3ViaGVhZGluZyIJIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5Ac3Vic3Vic2VjdGlvbiIJIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5Ac3VidGl0bGUiCQkgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AdW5udW1iZXJlZCIJCSBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQHVubnVtYmVyZWRzZWMiCSBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQHVubnVtYmVyZWRzdWJzZWMiCSBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQHVubnVtYmVyZWRzdWJzdWJzZWMiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorc3luIG1hdGNoICB0ZXhpbmZvQXRDbWQgIl5AbG93ZXJzZWN0aW9uc1xzKiQiCitzeW4gbWF0Y2ggIHRleGluZm9BdENtZCAiXkByYWlzZXNlY3Rpb25zXHMqJCIKKworCisibm9kZXMgKGNoYXAuIDYgaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gcmVnaW9uIHRleGluZm9CcmNQcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQGFuY2hvcnsiCQkgIGVuZD0ifSIKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kICAgIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQHRvcCIgICAgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhciBvbmVsaW5lCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCAgICBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBub2RlIiAgIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorCisKKyJtZW51cyAoY2hhcC4gNyBpbiBUZXhpbmZvIG1hbnVhbCkKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AbWVudVxzKiQiIGVuZD0iXkBlbmQgbWVudVxzKiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQsdGV4aW5mb01sdGxuRE1BdENtZAorCisKKyJjcm9zcyByZWZlcmVuY2VzIChjaGFwLiA4IGluIFRleGluZm8gbWFudWFsKQorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkBpbmZvcmVmeyIgZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gcmVnaW9uIHRleGluZm9CcmNQcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQHB4cmVmeyIgICBlbmQ9In0iIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAcmVmeyIgICAgIGVuZD0ifSIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyLHRleGluZm9CcmNQcm1BdENtZAorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkB1cmVmeyIgICAgZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gcmVnaW9uIHRleGluZm9CcmNQcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQHhyZWZ7IiAgICBlbmQ9In0iIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQKKworCisibWFya2luZyB3b3JkcyBhbmQgcGhyYXNlcyAoY2hhcC4gOSBpbiBUZXhpbmZvIG1hbnVhbCkKKyIoYWxtb3N0KSBldmVyeXRoaW5nIGFwcGVhcnMgYXMgJ2NvbnRhaW5lZCcgdG9vOyBpcyBmb3IgdGFibGVzIChAdGFibGUpCisKKyJ0aGlzIGNoYXB0ZXIgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUgdG8gYXZvaWQgb3ZlcndyaXRpbmdzCisKKworInF1b3RhdGlvbnMgYW5kIGV4YW1wbGVzIChjaGFwLiAxMCBpbiBUZXhpbmZvIG1hbnVhbCkKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AY2FydG91Y2hlXHMqJCIJICAgIGVuZD0iXkBlbmQgY2FydG91Y2hlXHMqJCIJICAgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBkaXNwbGF5XHMqJCIJICAgIGVuZD0iXkBlbmQgZGlzcGxheVxzKiQiCSAgICBjb250YWlucz1BTEwKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AZXhhbXBsZVxzKiQiCSAgICBlbmQ9Il5AZW5kIGV4YW1wbGVccyokIgkgICAgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIHRleGluZm9NbHRsbkF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGZsdXNobGVmdFxzKiQiCSAgICBlbmQ9Il5AZW5kIGZsdXNobGVmdFxzKiQiCSAgICBjb250YWlucz1BTEwKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AZmx1c2hyaWdodFxzKiQiCSAgICBlbmQ9Il5AZW5kIGZsdXNocmlnaHRccyokIgkgICAgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIHRleGluZm9NbHRsbkF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGZvcm1hdFxzKiQiCSAgICBlbmQ9Il5AZW5kIGZvcm1hdFxzKiQiCSAgICBjb250YWlucz1BTEwKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AbGlzcFxzKiQiCQkgICAgZW5kPSJeQGVuZCBsaXNwXHMqJCIJICAgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBxdW90YXRpb25ccyokIgkgICAgZW5kPSJeQGVuZCBxdW90YXRpb25ccyokIgkgICAgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIHRleGluZm9NbHRsbkF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQHNtYWxsZGlzcGxheVxzKiQiICAgICBlbmQ9Il5AZW5kIHNtYWxsZGlzcGxheVxzKiQiICAgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBzbWFsbGV4YW1wbGVccyokIiAgICAgZW5kPSJeQGVuZCBzbWFsbGV4YW1wbGVccyokIiAgICBjb250YWlucz1BTEwKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5Ac21hbGxmb3JtYXRccyokIgkgICAgZW5kPSJeQGVuZCBzbWFsbGZvcm1hdFxzKiQiICAgICBjb250YWlucz1BTEwKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5Ac21hbGxsaXNwXHMqJCIJICAgIGVuZD0iXkBlbmQgc21hbGxsaXNwXHMqJCIJICAgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgICBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBleGRlbnQiCSBza2lwPSJcXCQiIGVuZD0iJCIJCQkgICAgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIl5Abm9pbmRlbnRccyokIgorc3luIG1hdGNoIHRleGluZm9BdENtZCAiXkBzbWFsbGJvb2tccyokIgorCisKKyJsaXN0cyBhbmQgdGFibGVzIChjaGFwLiAxMSBpbiBUZXhpbmZvIG1hbnVhbCkKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIkBhc2lzIgkJICAgY29udGFpbmVkCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kICJAY29sdW1uZnJhY3Rpb25zIiAgY29udGFpbmVkCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kICJAaXRlbSIJCSAgIGNvbnRhaW5lZAorc3luIG1hdGNoIHRleGluZm9BdENtZCAiQGl0ZW14IgkJICAgY29udGFpbmVkCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kICJAdGFiIgkJICAgY29udGFpbmVkCitzeW4gcmVnaW9uIHRleGluZm9NbHRsbkF0Q21kICBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBlbnVtZXJhdGUiICBlbmQ9Il5AZW5kIGVudW1lcmF0ZVxzKiQiICBjb250YWlucz1BTEwKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGZ0YWJsZSIgICAgIGVuZD0iXkBlbmQgZnRhYmxlXHMqJCIgICAgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5OQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AaXRlbWl6ZSIgICAgZW5kPSJeQGVuZCBpdGVtaXplXHMqJCIgICAgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIHRleGluZm9NbHRsbk5BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBtdWx0aXRhYmxlIiBlbmQ9Il5AZW5kIG11bHRpdGFibGVccyokIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gdGV4aW5mb01sdGxuTkF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQHRhYmxlIiAgICAgIGVuZD0iXkBlbmQgdGFibGVccyokIiAgICAgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AdnRhYmxlIiAgICAgZW5kPSJeQGVuZCB2dGFibGVccyokIiAgICAgY29udGFpbnM9QUxMCisKKworImluZGljZXMgKGNoYXAuIDEyIGluIFRleGluZm8gbWFudWFsKQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AXChjXHxmXHxrXHxwXHx0XHx2XClpbmRleCIgICBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQC4uaW5kZXgiCQkJIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorIkBkZWZjb2RlaW5kZXggYW5kIEBkZWZpbmRleCBpcyBkZWZpbmVkIGFmdGVyIGNoYXAuIDE1J3MgQGRlZiogY29tbWFuZHMgKG90aGVyd2lzZSB0aG9zZSBvbmVzIHdpbGwgb3ZlcndyaXRlIHRoZXNlIG9uZXMpCitzeW4gbWF0Y2ggdGV4aW5mb1NJUGFyICJca1xrXHMqXGtca1xzKiQiIGNvbnRhaW5lZAorc3luIG1hdGNoIHRleGluZm9BdENtZCAiXkBzeW5jb2RlaW5kZXgiIG5leHRncm91cD10ZXhpbmZvU0lQYXIgc2tpcHdoaXRlCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kICJeQHN5bmluZGV4IiAgICAgbmV4dGdyb3VwPXRleGluZm9TSVBhciBza2lwd2hpdGUKKworInNwZWNpYWwgaW5zZXJ0aW9ucyAoY2hhcC4gMTMgaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAXCghXHw/XHxAXHxcc1wpIgorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQHsiCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAfSIKKyJhY2NlbnRzCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAPS4iCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAXCgnXHxcIlx8XF5cfGBcKVthZWlvdXlBRUlPVVldIgorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQFx+W2FlaW5vdXlBRUlOT1VZXSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBkb3RhY2NlbnR7Ln0iCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJASHsufSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkAse1tjQ119Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQEFBe30iCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAYWF7fSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBMe30iCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAbHt9Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQE97fSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBve30iCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAcmluZ2FjY2VudHsufSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkB0aWVhY2NlbnR7Li59Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQHV7Ln0iCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAdWJhcmFjY2VudHsufSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkB1ZG90YWNjZW50ey59Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQHZ7Ln0iCisibGlnYXR1cmVzCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAQUV7fSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBhZXt9Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQGNvcHlyaWdodHt9Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQGJ1bGxldCIgY29udGFpbmVkICJmb3IgdGFibGVzIGFuZCBsaXN0cworc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQGJ1bGxldHt9Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQGRvdGxlc3N7aX0iCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAZG90bGVzc3tqfSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBkb3Rze30iCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAZW5kZG90c3t9Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQGVxdWl2IiBjb250YWluZWQgImZvciB0YWJsZXMgYW5kIGxpc3RzCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAZXF1aXZ7fSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBlcnJvcnt9Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQGV4Y2xhbWRvd257fSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBleHBhbnNpb257fSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBtaW51cyIgY29udGFpbmVkICJmb3IgdGFibGVzIGFuZCBsaXN0cworc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQG1pbnVze30iCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAT0V7fSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBvZXt9Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQHBvaW50IiBjb250YWluZWQgImZvciB0YWJsZXMgYW5kIGxpc3RzCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAcG9pbnR7fSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBwb3VuZHN7fSIKK3N5biBtYXRjaCB0ZXhpbmZvU3BlY2lhbENoYXIgIkBwcmludHt9Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQHF1ZXN0aW9uZG93bnt9Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQHJlc3VsdCIgY29udGFpbmVkICJmb3IgdGFibGVzIGFuZCBsaXN0cworc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQHJlc3VsdHt9Igorc3luIG1hdGNoIHRleGluZm9TcGVjaWFsQ2hhciAiQHNze30iCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICJAVGVYe30iCisib3RoZXIKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAZG1ueyIgICAgICBlbmQ9In0iCitzeW4gcmVnaW9uIHRleGluZm9CcmNQcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQGZvb3Rub3RleyIgZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCitzeW4gcmVnaW9uIHRleGluZm9CcmNQcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQGltYWdleyIgICAgZW5kPSJ9Igorc3luIHJlZ2lvbiB0ZXhpbmZvQnJjUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9IkBtYXRoeyIgICAgIGVuZD0ifSIKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIkBmb290bm90ZXN0eWxlIiBuZXh0Z3JvdXA9dGV4aW5mb1NpbmdsZVBhciBza2lwd2hpdGUKKworCisibWFraW5nIGFuZCBwcmV2ZW50aW5nIGJyZWFrcyAoY2hhcC4gMTQgaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gbWF0Y2ggdGV4aW5mb1NwZWNpYWxDaGFyICAiQFwoXCpcfC1cfFwuXCkiCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kCSAgICAgICJeQG5lZWQiCSAgIG5leHRncm91cD10ZXhpbmZvU2luZ2xlUGFyIHNraXB3aGl0ZQorc3luIG1hdGNoIHRleGluZm9BdENtZAkgICAgICAiXkBwYWdlXHMqJCIKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQJICAgICAgIl5Ac3AiCSAgIG5leHRncm91cD10ZXhpbmZvU2luZ2xlUGFyIHNraXB3aGl0ZQorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AZ3JvdXBccyokIiAgIGVuZD0iXkBlbmQgZ3JvdXBccyokIiBjb250YWlucz1BTEwKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAaHlwaGVuYXRpb257IiBlbmQ9In0iCitzeW4gcmVnaW9uIHRleGluZm9CcmNQcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iQHd7IgkgICAgZW5kPSJ9IgkJICBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCisKKworImRlZmluaXRpb24gY29tbWFuZHMgKGNoYXAuIDE1IGluIFRleGluZm8gbWFudWFsKQorc3luIG1hdGNoIHRleGluZm9NbHRsbkF0Q21kRkxpbmUgIl5AZGVmXGtcKyIgY29udGFpbmVkCitzeW4gcmVnaW9uIHRleGluZm9NbHRsbkF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGRlZlxrXCsiIGVuZD0iXkBlbmQgZGVmXGtcKyQiICAgICAgY29udGFpbnM9QUxMCisKKyJuZXh0IDIgY29tbWFuZHMgYXJlIGZyb20gY2hhcC4gMTI7IG11c3QgYmUgZGVmaW5lZCBhZnRlciBAZGVmKiBjb21tYW5kcyBhYm92ZSB0byBvdmVyd3JpdGUgdGhlbQorc3luIG1hdGNoIHRleGluZm9BdENtZCAiQGRlZmNvZGVpbmRleCIgbmV4dGdyb3VwPXRleGluZm9JbmRleFBhciBza2lwd2hpdGUKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIkBkZWZpbmRleCIgbmV4dGdyb3VwPXRleGluZm9JbmRleFBhciBza2lwd2hpdGUKKworCisiY29uZGl0aW9uYWxseSB2aXNpYmxlIHRleHQgKGNoYXAuIDE2IGluIFRleGluZm8gbWFudWFsKQorc3luIG1hdGNoIHRleGluZm9BdENtZCAiXkBjbGVhciIgbmV4dGdyb3VwPXRleGluZm9TaW5nbGVQYXIgc2tpcHdoaXRlCitzeW4gcmVnaW9uIHRleGluZm9NbHRsbjJBdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBodG1sXHMqJCIJZW5kPSJeQGVuZCBodG1sXHMqJCIKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGlmY2xlYXIiCQllbmQ9Il5AZW5kIGlmY2xlYXJccyokIiAgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AaWZodG1sIgkJZW5kPSJeQGVuZCBpZmh0bWxccyokIgkgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AaWZpbmZvIgkJZW5kPSJeQGVuZCBpZmluZm9ccyokIgkgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AaWZub3RodG1sIgllbmQ9Il5AZW5kIGlmbm90aHRtbFxzKiQiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AaWZub3RpbmZvIgllbmQ9Il5AZW5kIGlmbm90aW5mb1xzKiQiIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AaWZub3R0ZXgiCWVuZD0iXkBlbmQgaWZub3R0ZXhccyokIiAgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIHRleGluZm9NbHRsbkF0Q21kICBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBpZnNldCIJCWVuZD0iXkBlbmQgaWZzZXRccyokIgkgIGNvbnRhaW5zPUFMTAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AaWZ0ZXgiCQllbmQ9Il5AZW5kIGlmdGV4XHMqJCIJICBjb250YWlucz1BTEwKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kICAgIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQHNldCAiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvVGV4Q21kCQkJICAgICAgc3RhcnQ9IlwkXCQiCQllbmQ9IlwkXCQiIGNvbnRhaW5lZAorc3luIHJlZ2lvbiB0ZXhpbmZvTWx0bG5BdENtZCAgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AdGV4IgkJZW5kPSJeQGVuZCB0ZXhccyokIgkgIGNvbnRhaW5zPXRleGluZm9UZXhDbWQKK3N5biByZWdpb24gdGV4aW5mb0JyY1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJAdmFsdWV7IgkJZW5kPSJ9IiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kCisKKworImludGVybmF0aW9uYWxpemF0aW9uIChjaGFwLiAxNyBpbiBUZXhpbmZvIG1hbnVhbCkKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIkBkb2N1bWVudGVuY29kaW5nIiBuZXh0Z3JvdXA9dGV4aW5mb1NpbmdsZVBhciBza2lwd2hpdGUKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIkBkb2N1bWVudGxhbmd1YWdlIiBuZXh0Z3JvdXA9dGV4aW5mb0luZGV4UGFyIHNraXB3aGl0ZQorCisKKyJkZWZpbmluZyBuZXcgdGV4aW5mbyBjb21tYW5kcyAoY2hhcC4gMTggaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kCSJAYWxpYXMiCQkgICAgICBuZXh0Z3JvdXA9dGV4aW5mb0Fzc2lnbm1lbnQgc2tpcHdoaXRlCitzeW4gbWF0Y2ggdGV4aW5mb0RJRVBhciAiXFMqXHMqLFxzKlxTKlxzKixccypcUypccyokIiBjb250YWluZWQKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQJIkBkZWZpbmZvZW5jbG9zZSIJICAgICAgbmV4dGdyb3VwPXRleGluZm9ESUVQYXIJICBza2lwd2hpdGUKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AbWFjcm8iIGVuZD0iXkBlbmQgbWFjcm9ccyokIiBjb250YWlucz1BTEwKKworCisiZm9ybWF0dGluZyBoYXJkY29weSAoY2hhcC4gMTkgaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kICJeQGFmb3VybGF0ZXhccyokIgorc3luIG1hdGNoIHRleGluZm9BdENtZCAiXkBhZm91cnBhcGVyXHMqJCIKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIl5AYWZvdXJ3aWRlXHMqJCIKK3N5biBtYXRjaCB0ZXhpbmZvQXRDbWQgIl5AZmluYWxvdXRccyokIgorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AcGFnZXNpemVzIiBlbmQ9IiQiIG9uZWxpbmUKKworCisiY3JlYXRpbmcgYW5kIGluc3RhbGxpbmcgSW5mbyBGaWxlcyAoY2hhcC4gMjAgaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCAgIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGRpcmNhdGVnb3J5IiAgc2tpcD0iXFwkIiBlbmQ9IiQiIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb01sdGxuQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AZGlyZW50cnlccyokIgkgICAgICAgZW5kPSJeQGVuZCBkaXJlbnRyeVxzKiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcgorc3luIG1hdGNoICB0ZXhpbmZvQXRDbWQgIl5Abm92YWxpZGF0ZVxzKiQiCisKKworImluY2x1ZGUgZmlsZXMgKGFwcGVuZGl4IEUgaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gbWF0Y2ggdGV4aW5mb0F0Q21kICJeQGluY2x1ZGUiIG5leHRncm91cD10ZXhpbmZvU2luZ2xlUGFyIHNraXB3aGl0ZQorCisKKyJwYWdlIGhlYWRpbmdzIChhcHBlbmRpeCBGIGluIFRleGluZm8gbWFudWFsKQorc3luIG1hdGNoIHRleGluZm9IRlNwZWNpYWxDaGFyICJAfCIJCSAgY29udGFpbmVkCitzeW4gbWF0Y2ggdGV4aW5mb1RoaXNBdENtZCAgICAgIkB0aGlzY2hhcHRlciIJICBjb250YWluZWQKK3N5biBtYXRjaCB0ZXhpbmZvVGhpc0F0Q21kICAgICAiQHRoaXNjaGFwdGVybmFtZSIgY29udGFpbmVkCitzeW4gbWF0Y2ggdGV4aW5mb1RoaXNBdENtZCAgICAgIkB0aGlzZmlsZSIJICBjb250YWluZWQKK3N5biBtYXRjaCB0ZXhpbmZvVGhpc0F0Q21kICAgICAiQHRoaXNwYWdlIgkgIGNvbnRhaW5lZAorc3luIG1hdGNoIHRleGluZm9UaGlzQXRDbWQgICAgICJAdGhpc3RpdGxlIgkgIGNvbnRhaW5lZAorc3luIG1hdGNoIHRleGluZm9UaGlzQXRDbWQgICAgICJAdG9kYXl7fSIJICBjb250YWluZWQKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGV2ZW5mb290aW5nIiAgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQsdGV4aW5mb1RoaXNBdENtZCx0ZXhpbmZvSEZTcGVjaWFsQ2hhciBvbmVsaW5lCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBldmVuaGVhZGluZyIgIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kLHRleGluZm9UaGlzQXRDbWQsdGV4aW5mb0hGU3BlY2lhbENoYXIgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5AZXZlcnlmb290aW5nIiBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyLHRleGluZm9CcmNQcm1BdENtZCx0ZXhpbmZvVGhpc0F0Q21kLHRleGluZm9IRlNwZWNpYWxDaGFyIG9uZWxpbmUKK3N5biByZWdpb24gdGV4aW5mb1BybUF0Q21kIG1hdGNoZ3JvdXA9dGV4aW5mb0F0Q21kIHN0YXJ0PSJeQGV2ZXJ5aGVhZGluZyIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQsdGV4aW5mb1RoaXNBdENtZCx0ZXhpbmZvSEZTcGVjaWFsQ2hhciBvbmVsaW5lCitzeW4gcmVnaW9uIHRleGluZm9Qcm1BdENtZCBtYXRjaGdyb3VwPXRleGluZm9BdENtZCBzdGFydD0iXkBvZGRmb290aW5nIiAgIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz10ZXhpbmZvU3BlY2lhbENoYXIsdGV4aW5mb0JyY1BybUF0Q21kLHRleGluZm9UaGlzQXRDbWQsdGV4aW5mb0hGU3BlY2lhbENoYXIgb25lbGluZQorc3luIHJlZ2lvbiB0ZXhpbmZvUHJtQXRDbWQgbWF0Y2hncm91cD10ZXhpbmZvQXRDbWQgc3RhcnQ9Il5Ab2RkaGVhZGluZyIgICBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9dGV4aW5mb1NwZWNpYWxDaGFyLHRleGluZm9CcmNQcm1BdENtZCx0ZXhpbmZvVGhpc0F0Q21kLHRleGluZm9IRlNwZWNpYWxDaGFyIG9uZWxpbmUKKworCisicmVmaWxsaW5nIHBhcmFncmFwaHMgKGFwcGVuZGl4IEggaW4gVGV4aW5mbyBtYW51YWwpCitzeW4gbWF0Y2ggIHRleGluZm9BdENtZCAiQHJlZmlsbCIKKworCitzeW4gY2x1c3RlciB0ZXhpbmZvQWxsIGNvbnRhaW5zPUFMTEJVVCx7dGV4aW5mb1RoaXNBdENtZCx0ZXhpbmZvSEZTcGVjaWFsQ2hhcn0KK3N5biBjbHVzdGVyIHRleGluZm9SZWR1Y2VkQWxsIGNvbnRhaW5zPXRleGluZm9TcGVjaWFsQ2hhcix0ZXhpbmZvQnJjUHJtQXRDbWQKKyI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyIgaGlnaGxpZ2h0aW5nCisKKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3RleGluZm9fc3luX2luaXRzIikKKworICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF90ZXhpbmZvX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHRleGluZm9TcGVjaWFsQ2hhcglTcGVjaWFsCisgIEhpTGluayB0ZXhpbmZvSEZTcGVjaWFsQ2hhcglTcGVjaWFsCisKKyAgSGlMaW5rIHRleGluZm9FcnJvcgkJRXJyb3IKKyAgSGlMaW5rIHRleGluZm9JZGVudAkJSWRlbnRpZmllcgorICBIaUxpbmsgdGV4aW5mb0Fzc2lnbm1lbnQJSWRlbnRpZmllcgorICBIaUxpbmsgdGV4aW5mb1NpbmdsZVBhcglJZGVudGlmaWVyCisgIEhpTGluayB0ZXhpbmZvSW5kZXhQYXIJSWRlbnRpZmllcgorICBIaUxpbmsgdGV4aW5mb1NJUGFyCQlJZGVudGlmaWVyCisgIEhpTGluayB0ZXhpbmZvRElFUGFyCQlJZGVudGlmaWVyCisgIEhpTGluayB0ZXhpbmZvVGV4Q21kCQlQcmVQcm9jCisKKworICBIaUxpbmsgdGV4aW5mb0F0Q21kCQlTdGF0ZW1lbnQJIkAtY29tbWFuZAorICBIaUxpbmsgdGV4aW5mb1BybUF0Q21kCVN0cmluZwkJIkAtY29tbWFuZCBpbiBvbmUgbGluZSB3aXRoIHVua25vd24gbnIuIG9mIHBhcmFtZXRlcnMKKwkJCQkJCSJpcyBTdHJpbmcgYmVjYXVzZSBpcyBmb3VuZCBhcyBhIHJlZ2lvbiBhbmQgaXMgJ21hdGNoZ3JvdXAnLWVkCisJCQkJCQkidG8gdGV4aW5mb0F0Q21kCisgIEhpTGluayB0ZXhpbmZvQnJjUHJtQXRDbWQJU3RyaW5nCQkiQC1jb21tYW5kIHdpdGggcGFyYW1ldGVyKHMpIGluIGJyYWNlcyAoe30pCisJCQkJCQkiaXMgU3RyaW5nIGJlY2F1c2UgaXMgZm91bmQgYXMgYSByZWdpb24gYW5kIGlzICdtYXRjaGdyb3VwJy1lZCB0byB0ZXhpbmZvQXRDbWQKKyAgSGlMaW5rIHRleGluZm9NbHRsbkF0Q21kRkxpbmUgIHRleGluZm9BdENtZAkicmVwZWF0ZWQgZW1iZWRkZWQgRmlyc3QgbGluZXMgaW4gQC1jb21tYW5kcworICBIaUxpbmsgdGV4aW5mb01sdGxuQXRDbWQJU3RyaW5nCQkiQC1jb21tYW5kIGluIG11bHRpcGxlIGxpbmVzCisJCQkJCQkiaXMgU3RyaW5nIGJlY2F1c2UgaXMgZm91bmQgYXMgYSByZWdpb24gYW5kIGlzICdtYXRjaGdyb3VwJy1lZCB0byB0ZXhpbmZvQXRDbWQKKyAgSGlMaW5rIHRleGluZm9NbHRsbjJBdENtZAlQcmVQcm9jCQkiQC1jb21tYW5kIGluIG11bHRpcGxlIGxpbmVzIChzYW1lIGFzIHRleGluZm9NbHRsbkF0Q21kLCBqdXN0IHdpdGggb3RoZXIgY29sb3JzKQorICBIaUxpbmsgdGV4aW5mb01sdGxuRE1BdENtZAlQcmVQcm9jCQkiQC1jb21tYW5kIGluIG11bHRpcGxlIGxpbmVzIChzYW1lIGFzIHRleGluZm9NbHRsbkF0Q21kLCBqdXN0IHdpdGggb3RoZXIgY29sb3JzOyB1c2VkIGZvciBAZGV0YWlsbWVudSwgd2hpY2ggY2FuIGJlIGluY2x1ZGVkIGluIEBtZW51KQorICBIaUxpbmsgdGV4aW5mb01sdGxuTkF0Q21kCU5vcm1hbAkJIkAtY29tbWFuZCBpbiBtdWx0aXBsZSBsaW5lcyAoc2FtZSBhcyB0ZXhpbmZvTWx0bG5BdENtZCwganVzdCB3aXRoIG90aGVyIGNvbG9ycykKKyAgSGlMaW5rIHRleGluZm9UaGlzQXRDbWQJU3RhdGVtZW50CSJALWNvbW1hbmQgdXNlZCBpbiBoZWFkZXJzIGFuZCBmb290ZXJzIChAdGhpcy4uLiBzZXJpZXMpCisKKyAgSGlMaW5rIHRleGluZm9Db21tZW50CUNvbW1lbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ0ZXhpbmZvIgorCitpZiBtYWluX3N5bnRheCA9PSAndGV4aW5mbycKKyAgdW5sZXQgbWFpbl9zeW50YXgKK2VuZGlmCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90ZXhtZi52aW0gYi9ydW50aW1lL3N5bnRheC90ZXhtZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5MTE2OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3RleG1mLnZpbQpAQCAtMCwwICsxLDg2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBUaGlzIGlzIGEgR0VORVJBVEVEIEZJTEUuIFBsZWFzZSBhbHdheXMgcmVmZXIgdG8gc291cmNlIGZpbGUgYXQgdGhlIFVSSSBiZWxvdy4KKyIgTGFuZ3VhZ2U6IFdlYjJDIFRlWCB0ZXhtZi5jbmYgY29uZmlndXJhdGlvbiBmaWxlCisiIE1haW50YWluZXI6IERhdmlkIE5lXHZ7Y31hcyAoWWV0aSkgPHlldGlAcGh5c2ljcy5tdW5pLmN6PgorIiBMYXN0IENoYW5nZTogMjAwMS0wNS0xMworIiBVUkw6IGh0dHA6Ly9waHlzaWNzLm11bmkuY3ovfnlldGkvZG93bmxvYWQvc3ludGF4L3RleG1mLnZpbQorCisiIFNldHVwCitpZiB2ZXJzaW9uID49IDYwMAorICBpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorICBlbmRpZgorZWxzZQorICBzeW50YXggY2xlYXIKK2VuZGlmCisKK3N5biBjYXNlIG1hdGNoCisKKyIgQ29tbWVudHMKK3N5biBtYXRjaCB0ZXhtZkNvbW1lbnQgIiUuLlwrJCIgY29udGFpbnM9dGV4bWZUb2RvCitzeW4gbWF0Y2ggdGV4bWZDb21tZW50ICIlXHMqJCIgY29udGFpbnM9dGV4bWZUb2RvCitzeW4ga2V5d29yZCB0ZXhtZlRvZG8gVE9ETyBGSVhNRSBYWFggTk9UIGNvbnRhaW5lZAorCisiIENvbnN0YW50cyBhbmQgcGFyYW1ldGVycworc3luIG1hdGNoIHRleG1mUGFzc2VkUGFyYW1ldGVyICJbLStdXD0lXHdcVyIKK3N5biBtYXRjaCB0ZXhtZlBhc3NlZFBhcmFtZXRlciAiWy0rXVw9JVx3JCIKK3N5biBtYXRjaCB0ZXhtZk51bWJlciAiXDxcZFwrXD4iCitzeW4gbWF0Y2ggdGV4bWZWYXJpYWJsZSAiXCRcKFx3XGsqXHx7XHdcayp9XCkiCitzeW4gbWF0Y2ggdGV4bWZTcGVjaWFsICtcXCJcfFxcJCsKK3N5biByZWdpb24gdGV4bWZTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisgc2tpcD0rXFwiXFxcXCsgY29udGFpbnM9dGV4bWZWYXJpYWJsZSx0ZXhtZlNwZWNpYWwsdGV4bWZQYXNzZWRQYXJhbWV0ZXIKKworIiBBc3NpZ25tZW50cworc3luIG1hdGNoIHRleG1mTEhTU3RhcnQgIl5ccypcd1xrKiIgbmV4dGdyb3VwPXRleG1mTEhTRG90LHRleG1mRXF1YWxzCitzeW4gbWF0Y2ggdGV4bWZMSFNWYXJpYWJsZSAiXHdcayoiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9dGV4bWZMSFNEb3QsdGV4bWZFcXVhbHMKK3N5biBtYXRjaCB0ZXhtZkxIU0RvdCAiXC4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9dGV4bWZMSFNWYXJpYWJsZQorc3luIG1hdGNoIHRleG1mRXF1YWxzICJccyo9IiBjb250YWluZWQKKworIiBTcGVjaWFsaXRpZXMKK3N5biBtYXRjaCB0ZXhtZkNvbW1hICIsIiBjb250YWluZWQKK3N5biBtYXRjaCB0ZXhtZkNvbG9ucyAiOlx8OyIKK3N5biBtYXRjaCB0ZXhtZkRvdWJsZUV4Y2xhbSAiISEiIGNvbnRhaW5lZAorCisiIENhdGNoIGVycm9ycyBjYXVzZWQgYnkgd3JvbmcgcGFyZW50aGVzaXphdGlvbgorc3luIHJlZ2lvbiB0ZXhtZkJyYWNlIG1hdGNoZ3JvdXA9dGV4bWZCcmFjZUJyYWNlIHN0YXJ0PSJ7IiBlbmQ9In0iIGNvbnRhaW5zPUFMTEJVVCx0ZXhtZlRvZG8sdGV4bWZCcmFjZUVycm9yLHRleG1mTEhTVmFyaWFibGUsdGV4bWZMSFNEb3QgdHJhbnNwYXJlbnQKK3N5biBtYXRjaCB0ZXhtZkJyYWNlRXJyb3IgIn0iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3RleG1mX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3RleG1mX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHRleG1mQ29tbWVudCBDb21tZW50CisgIEhpTGluayB0ZXhtZlRvZG8gVG9kbworCisgIEhpTGluayB0ZXhtZlBhc3NlZFBhcmFtZXRlciB0ZXhtZlZhcmlhYmxlCisgIEhpTGluayB0ZXhtZlZhcmlhYmxlIElkZW50aWZpZXIKKworICBIaUxpbmsgdGV4bWZOdW1iZXIgTnVtYmVyCisgIEhpTGluayB0ZXhtZlN0cmluZyBTdHJpbmcKKworICBIaUxpbmsgdGV4bWZMSFNTdGFydCB0ZXhtZkxIUworICBIaUxpbmsgdGV4bWZMSFNWYXJpYWJsZSB0ZXhtZkxIUworICBIaUxpbmsgdGV4bWZMSFNEb3QgdGV4bWZMSFMKKyAgSGlMaW5rIHRleG1mTEhTIFR5cGUKKworICBIaUxpbmsgdGV4bWZFcXVhbHMgTm9ybWFsCisKKyAgSGlMaW5rIHRleG1mQnJhY2VCcmFjZSB0ZXhtZkRlbGltaXRlcgorICBIaUxpbmsgdGV4bWZDb21tYSB0ZXhtZkRlbGltaXRlcgorICBIaUxpbmsgdGV4bWZDb2xvbnMgdGV4bWZEZWxpbWl0ZXIKKyAgSGlMaW5rIHRleG1mRGVsaW1pdGVyIFByZXByb2MKKworICBIaUxpbmsgdGV4bWZEb3VibGVFeGNsYW0gU3RhdGVtZW50CisgIEhpTGluayB0ZXhtZlNwZWNpYWwgU3BlY2lhbAorCisgIEhpTGluayB0ZXhtZkJyYWNlRXJyb3IgdGV4bWZFcnJvcgorICBIaUxpbmsgdGV4bWZFcnJvciBFcnJvcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ0ZXhtZiIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3RmLnZpbSBiL3J1bnRpbWUvc3ludGF4L3RmLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTlhOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdGYudmltCkBAIC0wLDAgKzEsMjA5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJdGYKKyIgTWFpbnRhaW5lcjoJTHV0eiBFeW1lcnMgPGl4dGFiQHBvbHppbi5jb20+CisiIFVSTDoJCWh0dHA6Ly93d3cuaXNwLmRlL2RhdGEvdGYudmltCisiIEVtYWlsOglzZW5kIHN5bnRheF92aW0udGd6CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAxMAorIgorIiBPcHRpb25zCWxpdGVfbWlubGluZXMgPSB4ICAgICB0byBzeW5jIGF0IGxlYXN0IHggbGluZXMgYmFja3dhcmRzCisKKyIgUmVtb3ZlIGFueSBvbGQgc3ludGF4IHN0dWZmIGhhbmdpbmcgYXJvdW5kCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgbWF0Y2gKKworaWYgIWV4aXN0cygibWFpbl9zeW50YXgiKQorICBsZXQgbWFpbl9zeW50YXggPSAndGYnCitlbmRpZgorCisiIFNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcworc3luIGtleXdvcmQgdGZWYXIgIEhPTUUgTEFORyBNQUlMIFNIRUxMIFRFUk0gVEZIRUxQIFRGTElCRElSIFRGTElCUkFSWSBUWiAgY29udGFpbmVkCitzeW4ga2V5d29yZCB0ZlZhciAgYmFja2dyb3VuZCBiYWNrc2xhc2ggIGNvbnRhaW5lZAorc3luIGtleXdvcmQgdGZWYXIgIGJhbWYgYmdfb3V0cHV0IGJvcmcgY2xlYXJmdWxsIGNsZWFyZG9uZSBjbG9jayBjb25uZWN0ICBjb250YWluZWQKK3N5biBrZXl3b3JkIHRmVmFyICBlbXVsYXRpb24gZW5kX2NvbG9yIGdhZyBnZXRob3N0YnluYW1lIGdwcmkgaG9vayBoaWxpdGUgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgdGZWYXIgIGhpbGl0ZWF0dHIgaGlzdHNpemUgaHByaSBpbnNlcnQgaXNpemUgaXN0cmlwIGtlY2hvICBjb250YWluZWQKK3N5biBrZXl3b3JkIHRmVmFyICBrcHJlZml4IGxvZ2luIGxwIGxwcXVvdGUgbWFpbGRlbGF5IG1hdGNoaW5nIG1heF9pdGVyICBjb250YWluZWQKK3N5biBrZXl3b3JkIHRmVmFyICBtYXhfcmVjdXIgbWVjaG8gbW9yZSBtcHJlZml4IG9sZHNsYXNoIHByb210X3NlYyAgY29udGFpbmVkCitzeW4ga2V5d29yZCB0ZlZhciAgcHJvbXB0X3VzZWMgcHJveHlfaG9zdCBwcm94eV9wb3J0IHB0aW1lIHFlY2hvIHFwcmVmaXggIGNvbnRhaW5lZAorc3luIGtleXdvcmQgdGZWYXIgIHF1aXRlIHF1aXRkb25lIHJlZGVmIHJlZnJlc2h0aW1lIHNjcm9sbCBzaHBhdXNlIHNuYXJmIHNvY2ttbG9hZCAgY29udGFpbmVkCitzeW4ga2V5d29yZCB0ZlZhciAgc3RhcnRfY29sb3IgdGFic2l6ZSB0ZWxvcHQgc3ViIHRpbWVfZm9ybWF0IHZpc3VhbCAgY29udGFpbmVkCitzeW4ga2V5d29yZCB0ZlZhciAgd2F0Y2hfZG9nIHdhdGNobmFtZSB3b3JkcHVuY3Qgd3JhcCB3cmFwbG9nIHdyYXBzaXplICBjb250YWluZWQKK3N5biBrZXl3b3JkIHRmVmFyICB3cmFwc3BhY2UgIGNvbnRhaW5lZAorCisiIFdvcmxkdmFyCitzeW4ga2V5d29yZCB0ZldvcmxkICB3b3JsZF9uYW1lIHdvcmxkX2NoYXJhY3RlciB3b3JsZF9wYXNzd29yZCB3b3JsZF9ob3N0IGNvbnRhaW5lZAorc3luIGtleXdvcmQgdGZXb3JsZCAgd29ybGRfcG9ydCB3b3JsZF9tZmlsZSB3b3JsZF90eXBlIGNvbnRhaW5lZAorCisiIE51bWJlcgorc3luIG1hdGNoIHRmTnVtYmVyICAiLVw9XDxcZFwrXD4iCisKKyIgRmxvYXQKK3N5biBtYXRjaCB0ZkZsb2F0ICAiXCgtXD1cPFxkK1x8LVw9XClcLlxkXCtcPiIKKworIiBPcGVyYXRvcgorc3luIG1hdGNoIHRmT3BlcmF0b3IgICJbLSs9PzomfCFdIgorc3luIG1hdGNoIHRmT3BlcmF0b3IgICIvW14qfkBdImhlPWUtMQorc3luIG1hdGNoIHRmT3BlcmF0b3IgICI6PSIKK3N5biBtYXRjaCB0Zk9wZXJhdG9yICAiW14vJV1cKiJocz1zKzEKK3N5biBtYXRjaCB0Zk9wZXJhdG9yICAiJFwrWyhbe10iaGU9ZS0xLG1lPWUtMQorc3luIG1hdGNoIHRmT3BlcmF0b3IgICJcXlxbXCsiaGU9cysxIGNvbnRhaW5zPXRmU3BlY2lhbENoYXJFc2MKKworIiBSZWxhdGlvbmFsCitzeW4gbWF0Y2ggdGZSZWxhdGlvbiAgIiYmIgorc3luIG1hdGNoIHRmUmVsYXRpb24gICJ8fCIKK3N5biBtYXRjaCB0ZlJlbGF0aW9uICAiWzw+LyE9XT0iCitzeW4gbWF0Y2ggdGZSZWxhdGlvbiAgIls8Pl0iCitzeW4gbWF0Y2ggdGZSZWxhdGlvbiAgIlshPV1cfiIKK3N5biBtYXRjaCB0ZlJlbGF0aW9uICAiWz0hXS8iCisKKworIiBSZWFkb25seSBWYXIKK3N5biBtYXRjaCB0ZlJlYWRvbmx5ICAiWyMqXSIgY29udGFpbmVkCitzeW4gbWF0Y2ggdGZSZWFkb25seSAgIlw8LVw9TFw9XGRcey19XD4iIGNvbnRhaW5lZAorc3luIG1hdGNoIHRmUmVhZG9ubHkgICJcPFBcKFxkXCtcfFJcfExcKVw+IiBjb250YWluZWQKK3N5biBtYXRjaCB0ZlJlYWRvbmx5ICAiXDxSXD4iIGNvbnRhaW5lZAorCisiIElkZW50aWZpZXIKK3N5biBtYXRjaCB0ZklkZW50aWZpZXIgIiVcK1thLXpBLVpfIyotMC05XVx3KiIgY29udGFpbnM9dGZWYXIsdGZSZWFkb25seQorc3luIG1hdGNoIHRmSWRlbnRpZmllciAiJVwrW3tdImhlPWUtMSxtZT1lLTEKK3N5biBtYXRjaCB0ZklkZW50aWZpZXIgIlwkXCt7W2EtekEtWl8jKi0wLTldXHcqfSIgY29udGFpbnM9dGZXb3JsZAorCisiIEZ1bmN0aW9uIG5hbWVzCitzeW4ga2V5d29yZCB0ZkZ1bmN0aW9ucyAgYXNjaWkgY2hhciBjb2x1bW5zIGVjaG8gZmlsZW5hbWUgZnRpbWUgZndyaXRlIGdldG9wdHMKK3N5biBrZXl3b3JkIHRmRnVuY3Rpb25zICBnZXRwaWQgaWRsZSBrYmRlbCBrYmdvdG8ga2JoZWFkIGtibGVuIGtibWF0Y2gga2Jwb2ludAorc3luIGtleXdvcmQgdGZGdW5jdGlvbnMgIGtidGFpbCBrYndvcmRsZWZ0IGtid29yZHJpZ2h0IGtleWNvZGUgbGluZXMgbW9kCitzeW4ga2V5d29yZCB0ZkZ1bmN0aW9ucyAgbW9yZXNpemUgcGFkIHJhbmQgcmVhZCByZWdtYXRjaCBzZW5kIHN0cmNhdCBzdHJjaHIKK3N5biBrZXl3b3JkIHRmRnVuY3Rpb25zICBzdHJjbXAgc3RybGVuIHN0cm5jbXAgc3RycmNociBzdHJyZXAgc3Ryc3RyIHN1YnN0cgorc3luIGtleXdvcmQgdGZGdW5jdGlvbnMgIHN5c3R5cGUgdGltZSB0b2xvd2VyIHRvdXBwZXIKKworc3luIGtleXdvcmQgdGZTdGF0ZW1lbnQgIGFkZHdvcmxkIGJhbWYgYmVlcCBiaW5kIGJyZWFrIGNhdCBjaGFuZ2VzIGNvbm5lY3QgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgdGZTdGF0ZW1lbnQgIGRjIGRlZiBkb2tleSBlY2hvIGVkaXQgZXNjYXBlIGV2YWwgZXhwb3J0IGV4cHIgZmcgZm9yICBjb250YWluZWQKK3N5biBrZXl3b3JkIHRmU3RhdGVtZW50ICBnYWcgZ2V0ZmlsZSBncmFiIGhlbHAgaGlsaXRlIGhpc3RzaXplIGhvb2sgaWYgaW5wdXQgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgdGZTdGF0ZW1lbnQgIGtpbGwgbGNkIGxldCBsaXN0IGxpc3Rzb2NrZXRzIGxpc3R3b3JsZHMgbG9hZCAgY29udGFpbmVkCitzeW4ga2V5d29yZCB0ZlN0YXRlbWVudCAgbG9jYWxlY2hvIGxvZyBub2hpbGl0ZSBub3QgcGFydGlhbCBwYXN0ZSBwcyBwdXJnZSAgY29udGFpbmVkCitzeW4ga2V5d29yZCB0ZlN0YXRlbWVudCAgcHVyZ2V3b3JsZCBwdXRmaWxlIHF1aXQgcXVvdGUgcmVjYWxsIHJlY29yZGxpbmUgc2F2ZSAgY29udGFpbmVkCitzeW4ga2V5d29yZCB0ZlN0YXRlbWVudCAgc2F2ZXdvcmxkIHNlbmQgc2ggc2hpZnQgc3ViIHN1YnN0aXR1dGUgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgdGZTdGF0ZW1lbnQgIHN1c3BlbmQgdGVsbmV0IHRlc3QgdGltZSB0b2dnbGUgdHJpZyB0cmlnZ2VyIHVuYmluZCAgY29udGFpbmVkCitzeW4ga2V5d29yZCB0ZlN0YXRlbWVudCAgdW5kZWYgdW5kZWZuIHVuZGVmdCB1bmhvb2sgIHVudHJpZyB1bndvcmxkICBjb250YWluZWQKK3N5biBrZXl3b3JkIHRmU3RhdGVtZW50ICB2ZXJzaW9uIHdhdGNoZG9nIHdhdGNobmFtZSB3aGlsZSB3b3JsZCAgY29udGFpbmVkCisKKyIgSG9va3MKK3N5biBrZXl3b3JkIHRmSG9vayAgQUNUSVZJVFkgQkFDS0dST1VORCBCQU1GIENPTkZBSUwgQ09ORkxJQ1QgQ09OTkVDVCBESVNDT05ORUNUCitzeW4ga2V5d29yZCB0Zkhvb2sgIEtJTEwgTE9BRCBMT0FERkFJTCBMT0cgTE9HSU4gTUFJTCBNT1JFIFBFTkRJTkcgUEVORElORworc3luIGtleXdvcmQgdGZIb29rICBQUk9DRVNTIFBST01QVCBQUk9YWSBSRURFRiBSRVNJWkUgUkVTVU1FIFNFTkQgU0hBRE9XIFNIRUxMCitzeW4ga2V5d29yZCB0Zkhvb2sgIFNJR0hVUCBTSUdURVJNIFNJR1VTUjEgU0lHVVNSMiBXT1JMRAorCisiIENvbmRpdGlvbmFsCitzeW4ga2V5d29yZCB0ZkNvbmRpdGlvbmFsICBpZiBlbmRpZiB0aGVuIGVsc2UgZWxzZWlmICBjb250YWluZWQKKworIiBSZXBlYXQKK3N5biBrZXl3b3JkIHRmUmVwZWF0ICB3aGlsZSBkbyBkb25lIHJlcGVhdCBmb3IgIGNvbnRhaW5lZAorCisiIFN0YXRlbWVudAorc3luIGtleXdvcmQgdGZTdGF0ZW1lbnQgIGJyZWFrIHF1aXQgY29udGFpbmVkCisKKyIgSW5jbHVkZQorc3luIGtleXdvcmQgIHRmSW5jbHVkZSByZXF1aXJlIGxvYWQgc2F2ZSBsb2FkZWQgY29udGFpbmVkCisKKyIgRGVmaW5lCitzeW4ga2V5d29yZCAgdGZEZWZpbmUgYmluZCB1bmJpbmQgZGVmIHVuZGVmIHVuZGVmbiB1bmRlZm4gcHVyZ2UgaG9vayB1bmhvb2sgdHJpZyB1bnRyaWcgIGNvbnRhaW5lZAorc3luIGtleXdvcmQgIHRmRGVmaW5lIHNldCB1bnNldCBzZXRlbnYgIGNvbnRhaW5lZAorCisiIFRvZG8KK3N5biBrZXl3b3JkICB0ZlRvZG8gVE9ETyBUb2RvIHRvZG8gIGNvbnRhaW5lZAorCisiIFNwZWNpYWxDaGFyCitzeW4gbWF0Y2ggdGZTcGVjaWFsQ2hhciAiXFxbYWJjZm5ydHl2XFxdIiBjb250YWluZWQKK3N5biBtYXRjaCB0ZlNwZWNpYWxDaGFyICJcXFxkXHszfSIgY29udGFpbmVkIGNvbnRhaW5zPXRmT2N0YWxFcnJvcgorc3luIG1hdGNoIHRmU3BlY2lhbENoYXIgIlxceFswLTlhLWZBLUZdXHsyfSIgY29udGFpbmVkCitzeW4gbWF0Y2ggdGZTcGVjaWFsQ2hhckVzYyAiXFtcKyIgY29udGFpbmVkCisKK3N5biBtYXRjaCB0Zk9jdGFsRXJyb3IgIls4OV0iIGNvbnRhaW5lZAorCisiIENvbW1lbnQKK3N5biByZWdpb24gdGZDb21tZW50CQlzdGFydD0iXjsiIGVuZD0iJCIgIGNvbnRhaW5zPXRmVG9kbworCisiIFN0cmluZworc3luIHJlZ2lvbiB0ZlN0cmluZyAgIG9uZWxpbmUgbWF0Y2hncm91cD1Ob25lIHN0YXJ0PSsnKyAgc2tpcD0rXFxcXFx8XFwnKyAgZW5kPSsnKyBjb250YWlucz10ZklkZW50aWZpZXIsdGZTcGVjaWFsQ2hhcix0ZkVzY2FwZQorc3luIHJlZ2lvbiB0ZlN0cmluZyAgIG1hdGNoZ3JvdXA9Tm9uZSBzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisgY29udGFpbnM9dGZJZGVudGlmaWVyLHRmU3BlY2lhbENoYXIsdGZFc2NhcGUKKworc3luIG1hdGNoIHRmUGFyZW50RXJyb3IgIlspfVxdXSIKKworIiBQYXJlbnRzCitzeW4gcmVnaW9uIHRmUGFyZW50IG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSIoIiBlbmQ9IikiIGNvbnRhaW5zPUFMTEJVVCx0ZlJlYWRvbmx5CitzeW4gcmVnaW9uIHRmUGFyZW50IG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJcWyIgZW5kPSJcXSIgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uIHRmUGFyZW50IG1hdGNoZ3JvdXA9RGVsaW1pdGVyIHN0YXJ0PSJ7IiBlbmQ9In0iIGNvbnRhaW5zPUFMTAorCitzeW4gbWF0Y2ggdGZFbmRDb21tYW5kICIlJVx7LX07Igorc3luIG1hdGNoIHRmSm9pbkxpbmVzICJcXCQiCisKKyIgVHlwZXMKKworc3luIG1hdGNoIHRmVHlwZSAiL1thLXpBLVpffkBdW2EtekEtWjAtOV9dKiIgY29udGFpbnM9dGZDb25kaXRpb25hbCx0ZlJlcGVhdCx0ZlN0YXRlbWVudCx0ZkluY2x1ZGUsdGZEZWZpbmUsdGZTdGF0ZW1lbnQKKworIiBDYXRjaCAvcXVvdGUgLi4gJworc3luIG1hdGNoIHRmUXVvdGVzICIvcXVvdGUgLlx7LX0nIiBjb250YWlucz1BTExCVVQsdGZTdHJpbmcKKyIgQ2F0Y2ggJCgvZXNjYXBlICAgKQorc3luIG1hdGNoIHRmRXNjYXBlICIoL2VzY2FwZSAuKikiCisKKyIgc3luYworaWYgZXhpc3RzKCJ0Zl9taW5saW5lcyIpCisgIGV4ZWMgInN5biBzeW5jIG1pbmxpbmVzPSIgLiB0Zl9taW5saW5lcworZWxzZQorICBzeW4gc3luYyBtaW5saW5lcz0xMDAKK2VuZGlmCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3RmX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3RmX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHRmQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgdGZTdHJpbmcJCVN0cmluZworICBIaUxpbmsgdGZOdW1iZXIJCU51bWJlcgorICBIaUxpbmsgdGZGbG9hdAkJRmxvYXQKKyAgSGlMaW5rIHRmSWRlbnRpZmllcgkJSWRlbnRpZmllcgorICBIaUxpbmsgdGZWYXIJCQlJZGVudGlmaWVyCisgIEhpTGluayB0ZldvcmxkCQlJZGVudGlmaWVyCisgIEhpTGluayB0ZlJlYWRvbmx5CQlJZGVudGlmaWVyCisgIEhpTGluayB0Zkhvb2sJCUlkZW50aWZpZXIKKyAgSGlMaW5rIHRmRnVuY3Rpb25zCQlGdW5jdGlvbgorICBIaUxpbmsgdGZSZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgdGZDb25kaXRpb25hbAkJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHRmTGFiZWwJCUxhYmVsCisgIEhpTGluayB0ZlN0YXRlbWVudAkJU3RhdGVtZW50CisgIEhpTGluayB0ZlR5cGUJCVR5cGUKKyAgSGlMaW5rIHRmSW5jbHVkZQkJSW5jbHVkZQorICBIaUxpbmsgdGZEZWZpbmUJCURlZmluZQorICBIaUxpbmsgdGZTcGVjaWFsQ2hhcgkJU3BlY2lhbENoYXIKKyAgSGlMaW5rIHRmU3BlY2lhbENoYXJFc2MJU3BlY2lhbENoYXIKKyAgSGlMaW5rIHRmUGFyZW50RXJyb3IJCUVycm9yCisgIEhpTGluayB0ZlRvZG8JCVRvZG8KKyAgSGlMaW5rIHRmRW5kQ29tbWFuZAkJRGVsaW1pdGVyCisgIEhpTGluayB0ZkpvaW5MaW5lcwkJRGVsaW1pdGVyCisgIEhpTGluayB0Zk9wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgdGZSZWxhdGlvbgkJT3BlcmF0b3IKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidGYiCisKK2lmIG1haW5fc3ludGF4ID09ICd0ZicKKyAgdW5sZXQgbWFpbl9zeW50YXgKK2VuZGlmCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90aWR5LnZpbSBiL3J1bnRpbWUvc3ludGF4L3RpZHkudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NTE4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC90aWR5LnZpbQpAQCAtMCwwICsxLDE1MyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgRmlsZW5hbWU6CXRpZHkudmltCisiIExhbmd1YWdlOglITVRMIFRpZHkgY29uZmlndXJhdGlvbiBmaWxlICggL2V0Yy90aWR5cmMgfi8udGlkeXJjICkKKyIgTWFpbnRhaW5lcjoJRG91ZyBLZWFybnMgPGRqa2VhMkBtdWdjYS5pdHMubW9uYXNoLmVkdS5hdT4KKyIgVVJMOgkJaHR0cDovL211Z2NhLml0cy5tb25hc2guZWR1LmF1L35kamtlYTIvdmltL3N5bnRheC90aWR5LnZpbQorIiBMYXN0IENoYW5nZToJMjAwMiBPY3QgMjQKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNldCBpc2tleXdvcmQ9QCw0OC01NywtCitlbHNlCisgIHNldGxvY2FsIGlza2V5d29yZD1ALDQ4LTU3LC0KK2VuZGlmCisKK3N5biBtYXRjaAl0aWR5Q29tbWVudAkJIl5ccyovLy4qJCIgY29udGFpbnM9dGlkeVRvZG8KK3N5biBtYXRjaAl0aWR5Q29tbWVudAkJIl5ccyojLiokIiAgY29udGFpbnM9dGlkeVRvZG8KK3N5biBrZXl3b3JkCXRpZHlUb2RvCQlUT0RPIE5PVEUgRklYTUUgWFhYIGNvbnRhaW5lZAorCitzeW4gbWF0Y2gJdGlkeUFzc2lnbm1lbnQJCSJeW2EtejAtOS1dXCs6XHMqLiokIiBjb250YWlucz10aWR5T3B0aW9uLEB0aWR5VmFsdWUsdGlkeURlbGltaXRlcgorc3luIG1hdGNoCXRpZHlEZWxpbWl0ZXIJCSI6IiBjb250YWluZWQKKworc3luIG1hdGNoCXRpZHlOZXdUYWdBc3NpZ25tZW50CSJebmV3LVxsXCstdGFnczpccyouKiQiIGNvbnRhaW5zPXRpZHlOZXdUYWdPcHRpb24sdGlkeU5ld1RhZ0RlbGltaXRlcix0aWR5TmV3VGFnVmFsdWUsdGlkeURlbGltaXRlcgorc3luIG1hdGNoCXRpZHlOZXdUYWdEZWxpbWl0ZXIJIiwiIGNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlOZXdUYWdWYWx1ZQkJIlw8XHdcK1w+IiBjb250YWluZWQKKworc3luIGNhc2UgaWdub3JlCitzeW4ga2V5d29yZAl0aWR5Qm9vbGVhbgkJdFtydWVdIGZbYWxzZV0geVtlc10gbltvXSBjb250YWluZWQKK3N5biBjYXNlIG1hdGNoCitzeW4gbWF0Y2gJdGlkeURvY3R5cGUJCSJcPG9taXRcfGF1dG9cfHN0cmljdFx8bG9vc2VcfHRyYW5zaXRpb25hbFw+IiBjb250YWluZWQKKyIgTk9URTogdXNlIG1hdGNoIHJhdGhlciB0aGFuIGtleXdvcmQgaGVyZSBzbyB0aGF0IHRpZHlFbmNvZGluZyByYXcgZG9lcyBub3QgYWx3YXlzIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRpZHlPcHRpb24gcmF3CitzeW4gbWF0Y2gJdGlkeUVuY29kaW5nCQkiXDxcKGFzY2lpXHxsYXRpbjFcfHJhd1x8dXRmOFx8aXNvMjAyMlx8bWFjXHx1dGYxNmxlXHx1dGYxNmJlXHx1dGYxNlx8d2luMTI1Mlx8YmlnNVx8c2hpZnRqaXNcKVw+IiBjb250YWluZWQKK3N5biBtYXRjaAl0aWR5TnVtYmVyCQkiXDxcZFwrXD4iIGNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlSZXBlYXQJCSJcPGtlZXAtZmlyc3RcfGtlZXAtbGFzdFw+IiBjb250YWluZWQKK3N5biByZWdpb24JdGlkeVN0cmluZwkJc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWluZWQgb25lbGluZQorc3luIHJlZ2lvbgl0aWR5U3RyaW5nCQlzdGFydD0rJysgc2tpcD0rXFxcXFx8XFwnKyBlbmQ9KycrIGNvbnRhaW5lZCBvbmVsaW5lCitzeW4gY2x1c3Rlcgl0aWR5VmFsdWUJCWNvbnRhaW5zPXRpZHlCb29sZWFuLHRpZHlEb2N0eXBlLHRpZHlFbmNvZGluZyx0aWR5TnVtYmVyLHRpZHlSZXBlYXQsdGlkeVN0cmluZworCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5hY2Nlc3NpYmlsaXR5LWNoZWNrIgkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5hZGQteG1sLWRlY2wiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5hZGQteG1sLXBpIgkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeYWRkLXhtbC1zcGFjZSIJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeYWx0LXRleHQiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5hc2NpaS1jaGFycyIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmFzc3VtZS14bWwtcHJvY2lucyIJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeYmFyZSIJCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5icmVhay1iZWZvcmUtYnIiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmNoYXItZW5jb2RpbmciCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmNsZWFuIgkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeY3NzLXByZWZpeCIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmRvY3R5cGUiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5kcm9wLWVtcHR5LXBhcmFzIgkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5kcm9wLWZvbnQtdGFncyIJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeZHJvcC1wcm9wcmlldGFyeS1hdHRyaWJ1dGVzIgljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmVuY2xvc2UtYmxvY2stdGV4dCIJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeZW5jbG9zZS10ZXh0IgkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeZXJyb3ItZmlsZSIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmVzY2FwZS1jZGF0YSIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmZpeC1iYWNrc2xhc2giCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmZpeC1iYWQtY29tbWVudHMiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmZpeC11cmkiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5mb3JjZS1vdXRwdXQiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5nbnUtZW1hY3MiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5oaWRlLWNvbW1lbnRzIgkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5oaWRlLWVuZHRhZ3MiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5pbmRlbnQiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5pbmRlbnQtYXR0cmlidXRlcyIJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeaW5kZW50LWNkYXRhIgkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeaW5kZW50LXNwYWNlcyIJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeaW5wdXQtZW5jb2RpbmciCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmlucHV0LXhtbCIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmpvaW4tY2xhc3NlcyIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmpvaW4tc3R5bGVzIgkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJea2VlcC10aW1lIgkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJebGFuZ3VhZ2UiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5saXRlcmFsLWF0dHJpYnV0ZXMiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmxvZ2ljYWwtZW1waGFzaXMiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXmxvd2VyLWxpdGVyYWxzIgkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5tYXJrdXAiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5uY3IiCQkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJebnVtZXJpYy1lbnRpdGllcyIJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeb3V0cHV0LWJvbSIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXm91dHB1dC1lbmNvZGluZyIJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJeb3V0cHV0LWh0bWwiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5vdXRwdXQteGh0bWwiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5vdXRwdXQteG1sIgkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJecXVpZXQiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5xdW90ZS1hbXBlcnNhbmQiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXnF1b3RlLW1hcmtzIgkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJecXVvdGUtbmJzcCIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXnJhdyIJCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5yZXBlYXRlZC1hdHRyaWJ1dGVzIgkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5yZXBsYWNlLWNvbG9yIgkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5zaG93LWJvZHktb25seSIJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJec2hvdy1lcnJvcnMiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5zaG93LXdhcm5pbmdzIgkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl5zbGlkZS1zdHlsZSIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXnNwbGl0IgkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJedGFiLXNpemUiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl50aWR5LW1hcmsiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl51cHBlcmNhc2UtYXR0cmlidXRlcyIJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJedXBwZXJjYXNlLXRhZ3MiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXndvcmQtMjAwMCIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXndyYXAiCQkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJed3JhcC1hc3AiCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU9wdGlvbgkJIl53cmFwLWF0dHJpYnV0ZXMiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXndyYXAtanN0ZSIJCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXndyYXAtcGhwIgkJCWNvbnRhaW5lZAorc3luIG1hdGNoCXRpZHlPcHRpb24JCSJed3JhcC1zY3JpcHQtbGl0ZXJhbHMiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXndyYXAtc2VjdGlvbnMiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5T3B0aW9uCQkiXndyaXRlLWJhY2siCQkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU5ld1RhZ09wdGlvbgkiXm5ldy1ibG9ja2xldmVsLXRhZ3MiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5TmV3VGFnT3B0aW9uCSJebmV3LWVtcHR5LXRhZ3MiCQljb250YWluZWQKK3N5biBtYXRjaAl0aWR5TmV3VGFnT3B0aW9uCSJebmV3LWlubGluZS10YWdzIgkJY29udGFpbmVkCitzeW4gbWF0Y2gJdGlkeU5ld1RhZ09wdGlvbgkiXm5ldy1wcmUtdGFncyIJCQljb250YWluZWQKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfdGlkeV9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF90aWR5X3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHRpZHlCb29sZWFuCQlCb29sZWFuCisgIEhpTGluayB0aWR5Q29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgdGlkeURlbGltaXRlcgkJU3BlY2lhbAorICBIaUxpbmsgdGlkeURvY3R5cGUJCUNvbnN0YW50CisgIEhpTGluayB0aWR5RW5jb2RpbmcJCUNvbnN0YW50CisgIEhpTGluayB0aWR5TmV3VGFnRGVsaW1pdGVyCVNwZWNpYWwKKyAgSGlMaW5rIHRpZHlOZXdUYWdPcHRpb24JSWRlbnRpZmllcgorICBIaUxpbmsgdGlkeU5ld1RhZ1ZhbHVlCUNvbnN0YW50CisgIEhpTGluayB0aWR5TnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHRpZHlPcHRpb24JCUlkZW50aWZpZXIKKyAgSGlMaW5rIHRpZHlSZXBlYXQJCUNvbnN0YW50CisgIEhpTGluayB0aWR5U3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHRpZHlUb2RvCQlUb2RvCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInRpZHkiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90aWxkZS52aW0gYi9ydW50aW1lL3N5bnRheC90aWxkZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4ODA1MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3RpbGRlLnZpbQpAQCAtMCwwICsxLDQxIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBUaGlzIGZpbGUgd29ya3Mgb25seSBmb3IgVmltNi54CisiIExhbmd1YWdlOglUaWxkZQorIiBNYWludGFpbmVyOglUb2JpYXMgUnVuZHN0cvZtIDx0b2JpQHRpbGRlc29mdHdhcmUubmV0PgorIiBVUkw6CQlodHRwOi8vd3d3LnRpbGRlc29mdHdhcmUubmV0CisiIENWUzoJCSRJZCQKKworaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisidGlsZGUgZG9zZW50IGNhcmUgLi4uCitzeW4gY2FzZSBpZ25vcmUKKworc3luIG1hdGNoCXRpbGRlRnVuY3Rpb24JIlx+W2Etel8wLTldXCsibXM9cysxCitzeW4gcmVnaW9uCXRpbGRlUGFyZW4Jc3RhcnQ9IigiIGVuZD0iKSIgY29udGFpbnM9dGlsZGVTdHJpbmcsdGlsZGVOdW1iZXIsdGlsZGVWYXJpYWJsZSx0aWxkZUZpZWxkLHRpbGRlU3ltdGFiLHRpbGRlRnVuY3Rpb24sdGlsZGVQYXJlbix0aWxkZUhleE51bWJlcix0aWxkZU9wZXJhdG9yCitzeW4gcmVnaW9uCXRpbGRlU3RyaW5nCWNvbnRhaW5lZCBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGtlZXBlbmQKK3N5biByZWdpb24JdGlsZGVTdHJpbmcJY29udGFpbmVkIHN0YXJ0PSsnKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rJysga2VlcGVuZAorc3luIG1hdGNoCXRpbGRlTnVtYmVyCSJcZCIgY29udGFpbmVkCitzeW4gbWF0Y2gJdGlsZGVPcGVyYXRvcgkib3JcfGFuZCIgY29udGFpbmVkCitzeW4gbWF0Y2gJdGlsZGVIZXhOdW1iZXIgICIweFthLXowLTldXCsiIGNvbnRhaW5lZAorc3luIG1hdGNoCXRpbGRlVmFyaWFibGUJIiRbYS16XzAtOV1cKyIgY29udGFpbmVkCitzeW4gbWF0Y2gJdGlsZGVGaWVsZAkiJVthLXpfMC05XVwrIiBjb250YWluZWQKK3N5biBtYXRjaAl0aWxkZVN5bXRhYgkiQFthLXpfMC05XVwrIiBjb250YWluZWQKK3N5biBtYXRjaAl0aWxkZUNvbW1lbnQJIl4jLioiCitzeW4gcmVnaW9uCXRpbGRlQ3VybHkJc3RhcnQ9K3srIGVuZD0rfSsgY29udGFpbmVkIGNvbnRhaW5zPXRpbGRlTEcsdGlsZGVTdHJpbmcsdGlsZGVOdW1iZXIsdGlsZGVWYXJpYWJsZSx0aWxkZUZpZWxkLHRpbGRlRnVuY3Rpb24sdGlsZGVTeW10YWIsdGlsZGVIZXhOdW1iZXIKK3N5biBtYXRjaAl0aWxkZUxHCQkiPT4iIGNvbnRhaW5lZAorCisKK2hpIGRlZiBsaW5rCXRpbGRlQ29tbWVudAlDb21tZW50CitoaSBkZWYgbGluawl0aWxkZUZ1bmN0aW9uCU9wZXJhdG9yCitoaSBkZWYgbGluawl0aWxkZU9wZXJhdG9yCU9wZXJhdG9yCitoaSBkZWYgbGluawl0aWxkZVN0cmluZwlTdHJpbmcKK2hpIGRlZiBsaW5rCXRpbGRlTnVtYmVyCU51bWJlcgoraGkgZGVmIGxpbmsJdGlsZGVIZXhOdW1iZXIJTnVtYmVyCitoaSBkZWYgbGluawl0aWxkZVZhcmlhYmxlCUlkZW50aWZpZXIKK2hpIGRlZiBsaW5rCXRpbGRlRmllbGQJSWRlbnRpZmllcgoraGkgZGVmIGxpbmsJdGlsZGVTeW10YWIJSWRlbnRpZmllcgoraGkgZGVmIGxpbmsJdGlsZGVFcnJvcglFcnJvcgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ0aWxkZSIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3RsaS52aW0gYi9ydW50aW1lL3N5bnRheC90bGkudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODVhNmMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC90bGkudmltCkBAIC0wLDAgKzEsNzEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglUZWFsSW5mbyBzb3VyY2UgZmlsZXMgKCoudGxpKQorIiBNYWludGFpbmVyOglLdXJ0IFcuIEFuZHJld3MgPGthbmRyZXdzQGZhc3RyYW5zLm5ldD4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgTWF5IDEwCisiIFZlcnNpb246ICAgICAgMS4wCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBUZWFsSW5mbyBPYmplY3RzCisKK3N5biBrZXl3b3JkIHRsaU9iamVjdCBMSVNUIFBPUExJU1QgV0lORE9XIFBPUFdJTkRPVyBPVVRMSU5FIENIRUNLTUFSSyBHT1RPCitzeW4ga2V5d29yZCB0bGlPYmplY3QgTEFCRUwgSU1BR0UgUkVDVCBUUkVTIFBBU1NXT1JEIFBPUEVESVQgUE9QSU1BR0UgQ0hFQ0tMSVNUCisKKyIgVGVhbEluZm8gRmllbGRzCisKK3N5biBrZXl3b3JkIHRsaUZpZWxkIFggWSBXIEggQlggQlkgQlcgQkggU1ggU1kgRk9OVCBCRk9OVCBDWUNMRSBERUxBWSBUQUJTCitzeW4ga2V5d29yZCB0bGlGaWVsZCBTVFlMRSBCVEVYVCBSRUNPUkQgREFUQUJBU0UgS0VZIFRBUkdFVCBERUZBVUxUIFRFWFQKK3N5biBrZXl3b3JkIHRsaUZpZWxkIExJTktTIE1BWFZBTAorCisiIFRlYWxJbmZvIFN0eWxlcworCitzeW4ga2V5d29yZCB0bGlTdHlsZSBJTlZFUlRFRCBIT1JJWl9SVUxFIFZFUlRfUlVMRSBOT19TQ1JPTEwgTk9fQk9SREVSIEJPTERfQk9SREVSCitzeW4ga2V5d29yZCB0bGlTdHlsZSBST1VORF9CT1JERVIgQUxJR05fUklHSFQgQUxJR05fQ0VOVEVSIEFMSUdOX0xFRlRfU1RBUlQgQUxJR05fUklHSFRfU1RBUlQKK3N5biBrZXl3b3JkIHRsaVN0eWxlIEFMSUdOX0NFTlRFUl9TVEFSVCBBTElHTl9MRUZUX0VORCBBTElHTl9SSUdIVF9FTkQgQUxJR05fQ0VOVEVSX0VORAorc3luIGtleXdvcmQgdGxpU3R5bGUgTE9DS09VVCBCVVRUT05fU0NST0xMIEJVVFRPTl9TRUxFQ1QgU1RST0tFX0ZJTkQgRklMTEVEIFJFR0lTVEVSCisKKyIgU3RyaW5nIGFuZCBDaGFyYWN0ZXIgY29uc3RhbnRzCisKK3N5biBtYXRjaCB0bGlTcGVjaWFsCSJAIgorc3luIHJlZ2lvbiB0bGlTdHJpbmcJc3RhcnQ9KyIrIGVuZD0rIisKKworIlRlYWxJbmZvIE51bWJlcnMsIGlkZW50aWZpZXJzIGFuZCBjb21tZW50cworCitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCB0bGlOdW1iZXIJIlxkKiIKK3N5biBtYXRjaCB0bGlJZGVudGlmaWVyCSJcPFxoXHcqXD4iCitzeW4gbWF0Y2ggdGxpQ29tbWVudAkiIy4qIgorc3luIGNhc2UgbWF0Y2gKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfdGxpX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3RsaV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB0bGlOdW1iZXIJTnVtYmVyCisgIEhpTGluayB0bGlTdHJpbmcJU3RyaW5nCisgIEhpTGluayB0bGlDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIHRsaVNwZWNpYWwJU3BlY2lhbENoYXIKKyAgSGlMaW5rIHRsaUlkZW50aWZpZXIgSWRlbnRpZmllcgorICBIaUxpbmsgdGxpT2JqZWN0ICAgICBTdGF0ZW1lbnQKKyAgSGlMaW5rIHRsaUZpZWxkICAgICAgVHlwZQorICBIaUxpbmsgdGxpU3R5bGUgICAgICBQcmVQcm9jCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInRsaSIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3RyYXN5cy52aW0gYi9ydW50aW1lL3N5bnRheC90cmFzeXMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWNjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC90cmFzeXMudmltCkBAIC0wLDAgKzEsMTc3IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIFRSQVNZUyBpbnB1dCBmaWxlCisiIE1haW50YWluZXI6ICAgQWRyaWFuIE5hZ2xlLCBhbmFnbGVAYmFsbC5jb20KKyIgTGFzdCBDaGFuZ2U6ICAyMDAzIE1heSAxMQorIiBGaWxlbmFtZXM6ICAgICouaW5wCisiIFVSTDoJCWh0dHA6Ly93d3cubmFnbGVuZXQub3JnL3ZpbS9zeW50YXgvdHJhc3lzLnZpbQorIiBNQUlOIFVSTDogICAgIGh0dHA6Ly93d3cubmFnbGVuZXQub3JnL3ZpbS8KKworCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworCisiIEZvcmNlIGZyZWUtZm9ybSBmb3J0cmFuIGZvcm1hdAorbGV0IGZvcnRyYW5fZnJlZV9zb3VyY2U9MQorCisiIExvYWQgRk9SVFJBTiBzeW50YXggZmlsZQoraWYgdmVyc2lvbiA8IDYwMAorICBzb3VyY2UgPHNmaWxlPjpwOmgvZm9ydHJhbi52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2ZvcnRyYW4udmltCitlbmRpZgordW5sZXQgYjpjdXJyZW50X3N5bnRheAorCisKKyIgSWdub3JlIGNhc2UKK3N5biBjYXNlIGlnbm9yZQorCisKKworIiBEZWZpbmUga2V5d29yZHMgZm9yIFRSQVNZUworc3luIGtleXdvcmQgdHJhc3lzT3B0aW9ucyAgICBtb2RlbCByc3JlYyBpbmZvIG1heGZsIG5vZ28gZG1wZG9jCitzeW4ga2V5d29yZCB0cmFzeXNPcHRpb25zICAgIHJzaSBydGkgcnNvIHJ0byBiY2RvdSBjbWVyZyBlbWVyZworc3luIGtleXdvcmQgdHJhc3lzT3B0aW9ucyAgICB1c2VyMSBubm1pbiBlcnBsb3QKKworc3luIGtleXdvcmQgdHJhc3lzU3VyZmFjZSAgICBpY3NuIHR4IHR5IHR6IHJvdHggcm90eSByb3R6IGluYyBiY3NuCitzeW4ga2V5d29yZCB0cmFzeXNTdXJmYWNlICAgIG5ueCBubnkgbm56IG5uYXggbm5yIG5udGggdW5ueAorc3luIGtleXdvcmQgdHJhc3lzU3VyZmFjZSAgICB1bm55IHVubnogdW5uYXggdW5uciB1bm50aCB0eXBlIGlkdXBzZgorc3luIGtleXdvcmQgdHJhc3lzU3VyZmFjZSAgICBpbWFnc2YgYWN0IGFjdGl2ZSBjb20gc2hhZGUgYnNoYWRlIGF4bWluCitzeW4ga2V5d29yZCB0cmFzeXNTdXJmYWNlICAgIGF4bWF4IHptaW4gem1heCBybWluIHJtYXggdGhtaW4gdGhtaW4KK3N5biBrZXl3b3JkIHRyYXN5c1N1cmZhY2UgICAgdGhtYXggYWxwaGEgZW1pc3MgdHJhbmkgdHJhbnMgc3ByaSBzcHJzCitzeW4ga2V5d29yZCB0cmFzeXNTdXJmYWNlICAgIHJlZm5vIHBvc2l0IGNvbSBkdXBiY3MgZGltZW5zaW9ucworc3luIGtleXdvcmQgdHJhc3lzU3VyZmFjZSAgICBkaW1lbnNpb24gcG9zaXRpb24gcHJvcCBzdXJmbgorCitzeW4ga2V5d29yZCB0cmFzeXNTdXJmYWNlVHlwZSByZWN0IHRyYXAgZGlzayBjeWwgY29uZSBzcGhlcmUgcGFyYWIKK3N5biBrZXl3b3JkIHRyYXN5c1N1cmZhY2VUeXBlIGJveDUgYm94NiBzaHBlcm8gdG9yIG9naXYgZWxlbSB0YXBlIHBvbHkKKworc3luIGtleXdvcmQgdHJhc3lzU3VyZmFjZUFyZ3MgZmYgZGkgdG9wIGJvdHRvbSBpbiBvdXQgYm90aCBubyBvbmx5CisKK3N5biBrZXl3b3JkIHRyYXN5c0FyZ3MgICAgICAgZmlnIHNtbiBub2RlYSB6ZXJvIG9ubHkgaXIgc29sCitzeW4ga2V5d29yZCB0cmFzeXNBcmdzICAgICAgIGJvdGggd2JhbmQgc3RlcG4gaW5pdGwKKworc3luIGtleXdvcmQgdHJhc3lzT3BlcmF0aW9ucyBvcmJnZW4gYnVpbGQKKworInN5biBrZXl3b3JkIHRyYXN5c1N1YlJvdXRpbmUgY2FsbAorc3luIGtleXdvcmQgdHJhc3lzU3ViUm91dGluZSBjaGdibGsgbmRhdGEgbmRhdGFzIG9kYXRhIG9kYXRhcworc3luIGtleXdvcmQgdHJhc3lzU3ViUm91dGluZSBwbGR0YSBmZmRhdGEgY21kYXRhIGFkc3VyZiByYmRhdGEKK3N5biBrZXl3b3JkIHRyYXN5c1N1YlJvdXRpbmUgcnRkYXRhIHBmZnNoZCBvcmJpdDEgb3JiaXQyIG9yaWVudAorc3luIGtleXdvcmQgdHJhc3lzU3ViUm91dGluZSBkaWR0MSBkaWR0MXMgZGlkdDIgZGlkdDJzIHNwaW4KK3N5biBrZXl3b3JkIHRyYXN5c1N1YlJvdXRpbmUgc3BpbmF2IGRpY29tcCBkaXN0YWIgZHJkYXRhIGdiZGF0YQorc3luIGtleXdvcmQgdHJhc3lzU3ViUm91dGluZSBnYmFwcnggcmtkYXRhIHJjZGF0YSBhcWRhdGEgc3RmYXEKK3N5biBrZXl3b3JkIHRyYXN5c1N1YlJvdXRpbmUgcW9kYXRhIHFvaW5pdCBtb2RhciBtb2RwciBtb2R0cgorc3luIGtleXdvcmQgdHJhc3lzU3ViUm91dGluZSBtb2RwcnMgbW9kc2hkIG1vZGRhdCByc3RvZmYgcnN0b24KK3N5biBrZXl3b3JkIHRyYXN5c1N1YlJvdXRpbmUgcnNtZXJnIGZmcmVhZCBkaXJlYWQgZmZ1c3IxIGRpdXNyMQorc3luIGtleXdvcmQgdHJhc3lzU3ViUm91dGluZSBzdXJmcCBkaWR0MyBkaWR0M3Mgcm9tYWluIHN0ZnJjCitzeW4ga2V5d29yZCB0cmFzeXNTdWJSb3V0aW5lIHJvcm50IHJvY3N0ciByb21vdmUgZmx4ZGF0YSB0aXRsZQorCitzeW4ga2V5d29yZCB0cmFzc3lQcmNzclNlZ20gIG5wbG90IG9wbG90IHBsb3QgY21jYWwgZmZjYWwgcmJjYWwKK3N5biBrZXl3b3JkIHRyYXNzeVByY3NyU2VnbSAgcnRjYWwgZGljYWwgZHJjYWwgc2ZjYWwgZ2JjYWwgcmNjYWwKK3N5biBrZXl3b3JkIHRyYXNzeVByY3NyU2VnbSAgcmtjYWwgYXFjYWwgcW9jYWwKKworCisKKyIgRGVmaW5lIG1hdGNoZXMgZm9yIFRSQVNZUworc3luIG1hdGNoICB0cmFzeXNPcHRpb25zICAgICAibGlzdCBzb3VyY2UiCitzeW4gbWF0Y2ggIHRyYXN5c09wdGlvbnMgICAgICJzYXZlIHNvdXJjZSIKK3N5biBtYXRjaCAgdHJhc3lzT3B0aW9ucyAgICAgIm5vIHByaW50IgorCisic3luIG1hdGNoICB0cmFzeXNTdXJmYWNlICAgICAiXksgKi4qIFteJF0iCisic3luIG1hdGNoICB0cmFzeXNTdXJmYWNlICAgICAiXkQgKlswLTldKlwuWzAtOV1cKyIKKyJzeW4gbWF0Y2ggIHRyYXN5c1N1cmZhY2UgICAgICJeSSAqLipbMC05XVwrXC5cPSIKKyJzeW4gbWF0Y2ggIHRyYXN5c1N1cmZhY2UgICAgICJeTiAqWzAtOV1cKyIKKyJzeW4gbWF0Y2ggIHRyYXN5c1N1cmZhY2UgICAgICJeTSAqW2EteltBLVowLTldXCsiCisic3luIG1hdGNoICB0cmFzeXNTdXJmYWNlICAgICAiXkJbQ11bU10gKlthLXpBLVowLTldKiIKKyJzeW4gbWF0Y2ggIHRyYXN5c1N1cmZhY2UgICAgICJeUyAqU1VSRk4uKlswLTldIgorc3luIG1hdGNoICB0cmFzeXNTdXJmYWNlICAgICAiUFswLTldKiAqPSJoZT1lLTEKKworc3luIG1hdGNoICB0cmFzeXNJZGVudGlmaWVyICAiXkwgImhlPWUtMQorc3luIG1hdGNoICB0cmFzeXNJZGVudGlmaWVyICAiXksgImhlPWUtMQorc3luIG1hdGNoICB0cmFzeXNJZGVudGlmaWVyICAiXkQgImhlPWUtMQorc3luIG1hdGNoICB0cmFzeXNJZGVudGlmaWVyICAiXkkgImhlPWUtMQorc3luIG1hdGNoICB0cmFzeXNJZGVudGlmaWVyICAiXk4gImhlPWUtMQorc3luIG1hdGNoICB0cmFzeXNJZGVudGlmaWVyICAiXk0gImhlPWUtMQorc3luIG1hdGNoICB0cmFzeXNJZGVudGlmaWVyICAiXkJbQ11bU10iCitzeW4gbWF0Y2ggIHRyYXN5c0lkZW50aWZpZXIgICJeUyAiaGU9ZS0xCisKK3N5biBtYXRjaCAgdHJhc3lzQ29tbWVudCAgICAgIl5DLiokIgorc3luIG1hdGNoICB0cmFzeXNDb21tZW50ICAgICAiXlIuKiQiCitzeW4gbWF0Y2ggIHRyYXN5c0NvbW1lbnQgICAgICJcJC4qJCIKKworc3luIG1hdGNoICB0cmFzeXNIZWFkZXIgICAgICAiXmhlYWRlclteLF0qIgorCitzeW4gbWF0Y2ggIHRyYXN5c01hY3JvICAgICAgICJeRkFDIgorCitzeW4gbWF0Y2ggIHRyYXN5c0ludGVnZXIgICAgICItXD1cPFswLTldKlw+Igorc3luIG1hdGNoICB0cmFzeXNGbG9hdCAgICAgICAiLVw9XDxbMC05XSpcLlswLTldKiIKK3N5biBtYXRjaCAgdHJhc3lzU2NpZW50aWZpYyAgIi1cPVw8WzAtOV0qXC5bMC05XSpFWy0rXVw9WzAtOV1cK1w+IgorCitzeW4gbWF0Y2ggIHRyYXN5c0JsYW5rICAgICAgICInIFwrJyJocz1zKzEsaGU9ZS0xCisKK3N5biBtYXRjaCAgdHJhc3lzRW5kRGF0YSAgICAgIl5FTkQgT0YgREFUQSIKKworaWYgZXhpc3RzKCJ0aGVybWFsX3RvZG8iKQorICBleGVjdXRlICdzeW4gbWF0Y2ggIHRyYXN5c1RvZG8gJyAuICciXicudGhlcm1hbF90b2RvLicuKiQiJworZWxzZQorICBzeW4gbWF0Y2ggIHRyYXN5c1RvZG8gICJePy4qJCIKK2VuZGlmCisKKworCisiIERlZmluZSByZWdpb25zIGZvciBUUkFTWVMKK3N5biByZWdpb24gdHJhc3lzQ29tbWVudCAgbWF0Y2hncm91cD10cmFzeXNIZWFkZXIgc3RhcnQ9Il5IRUFERVIgRE9DVU1FTlRBVElPTiBEQVRBIiBlbmQ9Il5IRUFERVJbXixdKiIKKworCisKKyIgRGVmaW5lIHN5bmNocm9uaXppbmcgcGF0dGVybnMgZm9yIFRSQVNZUworc3luIHN5bmMgbWF4bGluZXM9NTAwCitzeW4gc3luYyBtYXRjaCB0cmFzeXNTeW5jIGdyb3VwaGVyZSB0cmFzeXNDb21tZW50ICJeSEVBREVSIERPQ1VNRU5UQVRJT04gREFUQSIKKworCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfdHJhc3lzX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3RyYXN5c19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB0cmFzeXNPcHRpb25zCQlTcGVjaWFsCisgIEhpTGluayB0cmFzeXNTdXJmYWNlCQlTcGVjaWFsCisgIEhpTGluayB0cmFzeXNTdXJmYWNlVHlwZQlDb25zdGFudAorICBIaUxpbmsgdHJhc3lzU3VyZmFjZUFyZ3MJQ29uc3RhbnQKKyAgSGlMaW5rIHRyYXN5c0FyZ3MJCUNvbnN0YW50CisgIEhpTGluayB0cmFzeXNPcGVyYXRpb25zCVN0YXRlbWVudAorICBIaUxpbmsgdHJhc3lzU3ViUm91dGluZQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHRyYXNzeVByY3NyU2VnbQlQcmVQcm9jCisgIEhpTGluayB0cmFzeXNJZGVudGlmaWVyCUlkZW50aWZpZXIKKyAgSGlMaW5rIHRyYXN5c0NvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHRyYXN5c0hlYWRlcgkJVHlwZWRlZgorICBIaUxpbmsgdHJhc3lzTWFjcm8JCU1hY3JvCisgIEhpTGluayB0cmFzeXNJbnRlZ2VyCQlOdW1iZXIKKyAgSGlMaW5rIHRyYXN5c0Zsb2F0CQlGbG9hdAorICBIaUxpbmsgdHJhc3lzU2NpZW50aWZpYwlGbG9hdAorCisgIEhpTGluayB0cmFzeXNCbGFuawkJU3BlY2lhbENoYXIKKworICBIaUxpbmsgdHJhc3lzRW5kRGF0YQkJTWFjcm8KKworICBIaUxpbmsgdHJhc3lzVG9kbwkJVG9kbworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInRyYXN5cyIKKworIiB2aW06IHRzPTggc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvdHNhbHQudmltIGIvcnVudGltZS9zeW50YXgvdHNhbHQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZjE3NTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC90c2FsdC52aW0KQEAgLTAsMCArMSwyMTQgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglUZWxpeCAoTW9kZW0gQ29tbSBQcm9ncmFtKSBTQUxUIFNjcmlwdAorIiBNYWludGFpbmVyOglTZWFuIE0uIE1jS2VlIDxtY2tlZUBtaXNzbGluay5uZXQ+CisiIExhc3QgQ2hhbmdlOgkyMDAxIE1heSAwOQorIiBWZXJzaW9uIEluZm86IEAoIyl0c2FsdC52aW0JMS41CTk3LzEyLzE2IDA4OjExOjE1CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiB0dXJuIGNhc2UgbWF0Y2hpbmcgb2ZmCitzeW4gY2FzZSBpZ25vcmUKKworIkZVTkNUSU9OUworIiBDaGFyYWN0ZXIgSGFuZGxpbmcgRnVuY3Rpb25zCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCUlzQXNjaWkgSXNBbE51bSBJc0FscGhhIElzQ250cmwgSXNEaWdpdAorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglJc0xvd2VyIElzVXBwZXIgVG9Mb3dlciBUb1VwcGVyCisKKyIgQ29ubmVjdCBEZXZpY2UgT3BlcmF0aW9ucworc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglDYXJyaWVyIGNJbnBfQ250IGNHZXRDIGNHZXRDVCBjUHV0QyBjUHV0Tgorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbgljUHV0UyBjUHV0U19UUiBGbHVzaEJ1ZiBHZXRfQmF1ZAorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglHZXRfRGF0YUIgR2V0X1BvcnQgR2V0X1N0b3BCIEhhbmd1cAorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglLaWxsQ29ubmVjdERldmljZSBNYWtlQ29ubmVjdERldmljZQorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglTZW5kX0JyayBTZXRfQ29ubmVjdERldmljZSBTZXRfUG9ydAorCisiIEZpbGUgSW5wdXQvT3V0cHV0IE9wZXJhdGlvbnMKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JZkNsZWFyRXJyIGZDbG9zZSBmRGVsZXRlIGZFcnJvciBmRU9GIGZGbHVzaAorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglmR2V0QyBmR2V0UyBGaWxlQXR0ciBGaWxlRmluZCBGaWxlU2l6ZQorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglGaWxlVGltZSBmblN0cmlwIGZPcGVuIGZQdXRDIGZQdXRTIGZSZWFkCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCWZSZW5hbWUgZlNlZWsgZlRlbGwgZldyaXRlCisKKyIgRmlsZSBUcmFuc2ZlcnMgYW5kIExvZ3MKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JQ2FwdHVyZSBDYXB0dXJlX1N0YXQgUHJpbnRlciBSZWNlaXZlIFNlbmQKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JU2V0X0RlZlByb3QgVXNhZ2VMb2cgVXNhZ2VfU3RhdCBVU3RhbXAKKworIiBJbnB1dCBTdHJpbmcgTWF0Y2hpbmcKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JVHJhY2sgVHJhY2tfQWRkQ2hyIFRyYWNrX0ZyZWUgVHJhY2tfSGl0CitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCVdhaXRGb3IKKworIiBLZXlib2FyZCBPcGVyYXRpb25zCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCUluS2V5IEluS2V5VyBLZXlHZXQgS2V5TG9hZCBLZXlTYXZlIEtleVNldAorCisiIE1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCUNoYXRNb2RlIERvcyBEaWFsIERvc0Z1bmN0aW9uIEV4aXRUZWxpeAorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglHZXRFbnYgR2V0Rm9uIEhlbHBTY3JlZW4gTG9hZEZvbiBOZXdEaXIKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JUmFuZG9uIFJlZGlhbCBSZWRpcmVjdERPUyBSdW4KK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JU2V0X1Rlcm1pbmFsIFNob3dfRGlyZWN0b3J5IFRlbGl4VmVyc2lvbgorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglUZXJtaW5hbCBUcmFuc1RhYiBVcGRhdGVfVGVybQorCisiIFNjcmlwdCBNYW5hZ2VtZW50CitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCUFyZ0NvdW50IENhbGwgQ2FsbEQgQ29tcGlsZVNjcmlwdCBHZXRSdW5QYXRoCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCUlzX0xvYWRlZCBMb2FkX1NjciBTY3JpcHRWZXJzaW9uCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCVRlbGl4Rm9yV2luZG93cyBVbmxvYWRfU2NyCisKKyIgU291bmQgRnVuY3Rpb25zCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCUFsYXJtIFBsYXlXYXZlIFRvbmUKKworIiBTdHJpbmcgSGFuZGxpbmcKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JQ29weUNocnMgQ29weVN0ciBEZWxDaHJzIEdldFMgR2V0U1hZCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCUlucHV0Qm94IEluc0NocnMgSXRvUyBTZXRDaHIgU3RvSSBTdHJDYXQKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JU3RyQ2hyIFN0ckNvbXBJIFN0ckxlbiBTdHJMb3dlciBTdHJNYXhMZW4KK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JU3RyUG9zIFN0clBvc0kgU3RyVXBwZXIgU3ViQ2hyIFN1YkNocnMKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JU3ViU3RyCisKKyIgVGltZSwgRGF0ZSwgYW5kIFRpbWVyIE9wZXJhdGlvbnMKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JQ3VyVGltZSBEYXRlIERlbGF5IERlbGF5X1NjciBHZXRfT25saW5lVGltZQorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbgl0RGF5IHRIb3VyIHRNaW4gdE1vbnRoIHRTZWMgdFllYXIgVGltZQorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglUaW1lX1VwIFRpbWVyX0ZyZWUgVGltZV9SZXN0YXJ0CitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCVRpbWVfU3RhcnQgVGltZV9Ub3RhbAorCisiIFZpZGVvIE9wZXJhdGlvbnMKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JQm94IENOZXdMaW5lIEN1cnNvcl9Pbk9mZiBDbGVhcl9TY3IKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JR2V0VGVybUhlaWdodCBHZXRUZXJtV2lkdGggR2V0WCBHZXRZCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCUdvdG9YWSBNc2dCb3ggTmV3TGluZSBQcmludEMgUHJpbnRDX1RybQorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglQcmludE4gUHJpbnROX1RybSBQcmludFMgUHJpbnRTX1RybQorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglQcmludFNDIFBSaW50U0NfVHJtCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCVBTdHJBIFBTdHJBWFkgU2Nyb2xsIFN0YXR1c19XaW5kIHZHZXRDaHIKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JdkdldENocnMgdkdldENocnNBICB2UHV0Q2hyIHZQdXRDaHJzCitzeW4ga2V5d29yZCB0c2FsdEZ1bmN0aW9uCXZQdXRDaHJzQSB2UnN0ckFyZWEgdlNhdmVBcmVhCisKKyIgRHluYW1pYyBEYXRhIEV4Y2hhbmdlIChEREUpIE9wZXJhdGlvbnMKK3N5biBrZXl3b3JkIHRzYWx0RnVuY3Rpb24JRERFRXhlY3V0ZSBEREVJbml0YXRlIERERVBva2UgRERFUmVxdWVzdAorc3luIGtleXdvcmQgdHNhbHRGdW5jdGlvbglEREVUZXJtaW5hdGUgRERFVGVybWluYXRlQWxsCisiRU5EIEZVTkNUSU9OUworCisiUFJFREVGSU5FRCBWQVJBSUFCTEVTCitzeW4ga2V5d29yZCB0c2FsdFN5c1ZhcglfYWRkX2xmIF9hbGFybV9vbiBfYW5zd2VyYmFja19zdHIgX2FzY19yY3J0cmFucworc3luIGtleXdvcmQgdHNhbHRTeXNWYXIJX2FzY19yZW1hYm9ydCBfYXNjX3JsZnRyYW5zIF9hc2Nfc2NwYWNpbmcKK3N5biBrZXl3b3JkIHRzYWx0U3lzVmFyCV9hc2Nfc2NydHJhbnMgX2FzY19zZWNobyBfYXNjX3NscGFjaW5nCitzeW4ga2V5d29yZCB0c2FsdFN5c1ZhcglfYXNjX3NwYWNlY2hyIF9hc2Nfc3RyaXBoIF9iYWNrX2NvbG9yCitzeW4ga2V5d29yZCB0c2FsdFN5c1ZhcglfY2FwdHVyZV9mbmFtZSBfY29ubmVjdF9zdHIgX2Rlc3RfYnMKK3N5biBrZXl3b3JkIHRzYWx0U3lzVmFyCV9kaWFsX3BhdXNlIF9kaWFsX3RpbWUgX2RpYWxfcG9zdAorc3luIGtleXdvcmQgdHNhbHRTeXNWYXIJX2RpYWxfcHJlZjEgX2RpYWxfcHJlZjIgX2RpYWxfcHJlZjMKK3N5biBrZXl3b3JkIHRzYWx0U3lzVmFyCV9kaWFsX3ByZWY0IF9kaXJfcHJvZyBfZG93bl9kaXIKK3N5biBrZXl3b3JkIHRzYWx0U3lzVmFyCV9lbnRyeV9iYnN0eXBlIF9lbnRyeV9jb21tZW50IF9lbnRyeV9lbnVtCitzeW4ga2V5d29yZCB0c2FsdFN5c1ZhcglfZW50cnlfbmFtZSBfZW50cnlfbnVtIF9lbnRyeV9sb2dvbm5hbWUKK3N5biBrZXl3b3JkIHRzYWx0U3lzVmFyCV9lbnRyeV9wYXNzIF9mb3JlX2NvbG9yIF9pbWFnZV9maWxlCitzeW4ga2V5d29yZCB0c2FsdFN5c1ZhcglfbG9jYWxfZWNobyBfbWRtX2hhbmdfc3RyIF9tZG1faW5pdF9zdHIKK3N5biBrZXl3b3JkIHRzYWx0U3lzVmFyCV9ub19jb25uZWN0MSBfbm9fY29ubmVjdDIgX25vX2Nvbm5lY3QzCitzeW4ga2V5d29yZCB0c2FsdFN5c1Zhcglfbm9fY29ubmVjdDQgX25vX2Nvbm5lY3Q1IF9yZWRpYWxfc3RvcAorc3luIGtleXdvcmQgdHNhbHRTeXNWYXIJX3Njcl9jaGtfa2V5IF9zY3JpcHRfZGlyIF9zb3VuZF9vbgorc3luIGtleXdvcmQgdHNhbHRTeXNWYXIJX3N0cmlwX2hpZ2ggX3N3YXBfYnMgX3RlbGl4X2RpciBfdXBfZGlyCitzeW4ga2V5d29yZCB0c2FsdFN5c1ZhcglfdXNhZ2VfZm5hbWUgX3ptb2RhdXRvIF96bW9kX3JjcmFzaAorc3luIGtleXdvcmQgdHNhbHRTeXNWYXIJX3ptb2Rfc2NyYXNoCisiRU5EIFBSRURFRklORUQgVkFSQUlBQkxFUworCisiVFlQRQorc3luIGtleXdvcmQgdHNhbHRUeXBlCXN0ciBpbnQKKyJFTkQgVFlQRQorCisiS0VZV09SRFMKK3N5biBrZXl3b3JkIHRzYWx0U3RhdGVtZW50CWdvdG8gYnJlYWsgcmV0dXJuIGNvbnRpbnVlCitzeW4ga2V5d29yZCB0c2FsdENvbmRpdGlvbmFsCWlmIHRoZW4gZWxzZQorc3luIGtleXdvcmQgdHNhbHRSZXBlYXQJCXdoaWxlIGZvciBkbworIkVORCBLRVlXT1JEUworCitzeW4ga2V5d29yZCB0c2FsdFRvZG8gY29udGFpbmVkCVRPRE8KKworIiB0aGUgcmVzdCBpcyBwcmV0dHkgY2xvc2UgdG8gQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiIFN0cmluZyBhbmQgQ2hhcmFjdGVyIGNvbnN0YW50cworIiBIaWdobGlnaHQgc3BlY2lhbCBjaGFyYWN0ZXJzICh0aG9zZSB3aGljaCBoYXZlIGEgYmFja3NsYXNoKSBkaWZmZXJlbnRseQorc3luIG1hdGNoIHRzYWx0U3BlY2lhbAkJY29udGFpbmVkICJcXlxkXGRcZFx8XF4uIgorc3luIHJlZ2lvbiB0c2FsdFN0cmluZwkJc3RhcnQ9KyIrICBza2lwPStcXFxcXHxcXCIrICBlbmQ9KyIrICBjb250YWlucz10c2FsdFNwZWNpYWwKK3N5biBtYXRjaCB0c2FsdENoYXJhY3RlcgkiJ1teXFxdJyIKK3N5biBtYXRjaCB0c2FsdFNwZWNpYWxDaGFyYWN0ZXIJIidcXC4nIgorCisiY2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB3cm9uZyBwYXJlbnRoZXNpcworc3luIHJlZ2lvbiB0c2FsdFBhcmVuCQl0cmFuc3BhcmVudCBzdGFydD0nKCcgZW5kPScpJyBjb250YWlucz1BTExCVVQsdHNhbHRQYXJlbkVycm9yLHRzYWx0SW5jbHVkZWQsdHNhbHRTcGVjaWFsLHRzYWx0VG9kbworc3luIG1hdGNoIHRzYWx0UGFyZW5FcnJvcgkJIikiCitzeW4gbWF0Y2ggdHNhbHRJblBhcmVuCQljb250YWluZWQgIlt7fV0iCisKK2hpIGxpbmsgdHNhbHRQYXJlbkVycm9yCQl0c2FsdEVycm9yCitoaSBsaW5rIHRzYWx0SW5QYXJlbgkJdHNhbHRFcnJvcgorCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90IGFuZCB3aXRoICJmIi4KK3N5biBtYXRjaCAgdHNhbHROdW1iZXIJCSJcPFxkXCtcKHVcPWxcPVx8bHVcfGZcKVw+IgorImZsb2F0aW5nIHBvaW50IG51bWJlciwgd2l0aCBkb3QsIG9wdGlvbmFsIGV4cG9uZW50CitzeW4gbWF0Y2ggIHRzYWx0RmxvYXQJCSJcPFxkXCtcLlxkKlwoZVstK11cPVxkXCtcKVw9W2ZsXVw9XD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90LCBvcHRpb25hbCBleHBvbmVudAorc3luIG1hdGNoICB0c2FsdEZsb2F0CQkiXC5cZFwrXChlWy0rXVw9XGRcK1wpXD1bZmxdXD1cPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGhvdXQgZG90LCB3aXRoIGV4cG9uZW50CitzeW4gbWF0Y2ggIHRzYWx0RmxvYXQJCSJcPFxkXCtlWy0rXVw9XGRcK1tmbF1cPVw+IgorImhleCBudW1iZXIKK3N5biBtYXRjaCAgdHNhbHROdW1iZXIJCSIweFswLTlhLWZdXCtcKHVcPWxcPVx8bHVcKVw+IgorInN5biBtYXRjaCAgY0lkZW50aWZpZXIJIlw8W2Etel9dW2EtejAtOV9dKlw+IgorCitzeW4gcmVnaW9uIHRzYWx0Q29tbWVudAkJc3RhcnQ9Ii9cKiIgIGVuZD0iXCovIiBjb250YWlucz1jVG9kbworc3luIG1hdGNoICB0c2FsdENvbW1lbnQJCSIvLy4qIiBjb250YWlucz1jVG9kbworc3luIG1hdGNoICB0c2FsdENvbW1lbnRFcnJvcgkiXCovIgorCitzeW4gcmVnaW9uIHRzYWx0UHJlQ29uZGl0CXN0YXJ0PSJeWyBcdF0qI1sgXHRdKlwoaWZcPlx8aWZkZWZcPlx8aWZuZGVmXD5cfGVsaWZcPlx8ZWxzZVw+XHxlbmRpZlw+XCkiICBza2lwPSJcXCQiICBlbmQ9IiQiIGNvbnRhaW5zPXRzYWx0Q29tbWVudCx0c2FsdFN0cmluZyx0c2FsdENoYXJhY3Rlcix0c2FsdE51bWJlcix0c2FsdENvbW1lbnRFcnJvcgorc3luIHJlZ2lvbiB0c2FsdEluY2x1ZGVkCWNvbnRhaW5lZCBzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisKK3N5biBtYXRjaCAgdHNhbHRJbmNsdWRlZAljb250YWluZWQgIjxbXj5dKj4iCitzeW4gbWF0Y2ggIHRzYWx0SW5jbHVkZQkJIl5bIFx0XSojWyBcdF0qaW5jbHVkZVw+WyBcdF0qWyI8XSIgY29udGFpbnM9dHNhbHRJbmNsdWRlZAorInN5biBtYXRjaCAgVGVsaXhTYWx5TGluZVNraXAJIlxcJCIKK3N5biByZWdpb24gdHNhbHREZWZpbmUJCXN0YXJ0PSJeWyBcdF0qI1sgXHRdKlwoZGVmaW5lXD5cfHVuZGVmXD5cKSIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPUFMTEJVVCx0c2FsdFByZUNvbmRpdCx0c2FsdEluY2x1ZGVkLHRzYWx0SW5jbHVkZSx0c2FsdERlZmluZSx0c2FsdEluUGFyZW4KK3N5biByZWdpb24gdHNhbHRQcmVQcm9jCQlzdGFydD0iXlsgXHRdKiNbIFx0XSpcKHByYWdtYVw+XHxsaW5lXD5cfHdhcm5pbmdcPlx8d2Fyblw+XHxlcnJvclw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1BTExCVVQsdHNhbHRQcmVDb25kaXQsdHNhbHRJbmNsdWRlZCx0c2FsdEluY2x1ZGUsdHNhbHREZWZpbmUsdHNhbHRJblBhcmVuCisKKyIgSGlnaGxpZ2h0IFVzZXIgTGFiZWxzCitzeW4gcmVnaW9uIHRzYWx0TXVsdGkJdHJhbnNwYXJlbnQgc3RhcnQ9Jz8nIGVuZD0nOicgY29udGFpbnM9QUxMQlVULHRzYWx0SW5jbHVkZWQsdHNhbHRTcGVjaWFsLHRzYWx0VG9kbworCitzeW4gc3luYyBjY29tbWVudCB0c2FsdENvbW1lbnQKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF90c2FsdF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF90c2FsdF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisJSGlMaW5rIHRzYWx0RnVuY3Rpb24JCVN0YXRlbWVudAorCUhpTGluayB0c2FsdFN5c1ZhcgkJVHlwZQorCSJIaUxpbmsgdHNhbHRMaWJGdW5jCQlVc2VyRGVmRnVuYworCSJIaUxpbmsgdHNhbHRDb25zdGFudHMJCVR5cGUKKwkiSGlMaW5rIHRzYWx0RnVuY0FyZwkJVHlwZQorCSJIaUxpbmsgdHNhbHRPcGVyYXRvcgkJT3BlcmF0b3IKKwkiSGlMaW5rIHRzYWx0TGFiZWwJCUxhYmVsCisJIkhpTGluayB0c2FsdFVzZXJMYWJlbAkJTGFiZWwKKwlIaUxpbmsgdHNhbHRDb25kaXRpb25hbAkJQ29uZGl0aW9uYWwKKwlIaUxpbmsgdHNhbHRSZXBlYXQJCVJlcGVhdAorCUhpTGluayB0c2FsdENoYXJhY3RlcgkJU3BlY2lhbENoYXIKKwlIaUxpbmsgdHNhbHRTcGVjaWFsQ2hhcmFjdGVyCVNwZWNpYWxDaGFyCisJSGlMaW5rIHRzYWx0TnVtYmVyCQlOdW1iZXIKKwlIaUxpbmsgdHNhbHRGbG9hdAkJRmxvYXQKKwlIaUxpbmsgdHNhbHRDb21tZW50RXJyb3IJdHNhbHRFcnJvcgorCUhpTGluayB0c2FsdEluY2x1ZGUJCUluY2x1ZGUKKwlIaUxpbmsgdHNhbHRQcmVQcm9jCQlQcmVQcm9jCisJSGlMaW5rIHRzYWx0RGVmaW5lCQlNYWNybworCUhpTGluayB0c2FsdEluY2x1ZGVkCQl0c2FsdFN0cmluZworCUhpTGluayB0c2FsdEVycm9yCQlFcnJvcgorCUhpTGluayB0c2FsdFN0YXRlbWVudAkJU3RhdGVtZW50CisJSGlMaW5rIHRzYWx0UHJlQ29uZGl0CQlQcmVDb25kaXQKKwlIaUxpbmsgdHNhbHRUeXBlCQlUeXBlCisJSGlMaW5rIHRzYWx0U3RyaW5nCQlTdHJpbmcKKwlIaUxpbmsgdHNhbHRDb21tZW50CQlDb21tZW50CisJSGlMaW5rIHRzYWx0U3BlY2lhbAkJU3BlY2lhbAorCUhpTGluayB0c2FsdFRvZG8JCVRvZG8KKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidHNhbHQiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90c3NjbC52aW0gYi9ydW50aW1lL3N5bnRheC90c3NjbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjMThjNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3Rzc2NsLnZpbQpAQCAtMCwwICsxLDIxNyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBUU1MgKFRoZXJtYWwgU3ludGhlc2l6ZXIgU3lzdGVtKSBDb21tYW5kIExpbmUKKyIgTWFpbnRhaW5lcjogICBBZHJpYW4gTmFnbGUsIGFuYWdsZUBiYWxsLmNvbQorIiBMYXN0IENoYW5nZTogIDIwMDMgTWF5IDExCisiIEZpbGVuYW1lczogICAgKi50c3NjbAorIiBVUkw6CQlodHRwOi8vd3d3Lm5hZ2xlbmV0Lm9yZy92aW0vc3ludGF4L3Rzc2NsLnZpbQorIiBNQUlOIFVSTDogICAgIGh0dHA6Ly93d3cubmFnbGVuZXQub3JnL3ZpbS8KKworCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworCisKKyIgSWdub3JlIGNhc2UKK3N5biBjYXNlIGlnbm9yZQorCisKKworIgorIgorIiBCZWdpbiBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRzcyBnZW9tdGVyeSBmaWxlLgorIgorCisiIExvYWQgVFNTIGdlb21ldHJ5IHN5bnRheCBmaWxlCisic291cmNlICRWSU0vbXl2aW0vdHNzZ20udmltCisic291cmNlICRWSU1SVU5USU1FL3N5bnRheC9jLnZpbQorCisiIERlZmluZSBrZXl3b3JkcyBmb3IgVFNTCitzeW4ga2V5d29yZCB0c3NjbENvbW1hbmQgIGJlZ2luIHJhZGsgbGlzdCBoZWF0cmF0ZXMgYXR0ciBkcmF3CisKK3N5biBrZXl3b3JkIHRzc2NsS2V5d29yZCAgIGNlbGxzIHJheXMgZXJyb3Igbm9kZXMgbGV2ZWxzIG9iamVjdHMgY3B1CitzeW4ga2V5d29yZCB0c3NjbEtleXdvcmQgICB1bml0cyBsZW5ndGggcG9zaXRpb25zIGVuZXJneSB0aW1lIHVuaXQgc29sYXIKK3N5biBrZXl3b3JkIHRzc2NsS2V5d29yZCAgIHNvbGFyX2NvbnN0YW50IGFsYmVkbyBwbGFuZXRfcG93ZXIKKworc3luIGtleXdvcmQgdHNzY2xFbmQgICAgZXhpdAorCitzeW4ga2V5d29yZCB0c3NjbFVuaXRzICBjbSBmZWV0IG1ldGVycyBpbmNoZXMKK3N5biBrZXl3b3JkIHRzc2NsVW5pdHMgIENlbHNpdXMgS2VsdmluIEZhaHJlbmhlaXQgUmFua2luZQorCisKKworIiBEZWZpbmUgbWF0Y2hlcyBmb3IgVFNTCitzeW4gbWF0Y2ggIHRzc2NsU3RyaW5nICAgIC8iW14iXVwrIi8gY29udGFpbnM9QUxMQlVULHRzc0ludGVnZXIsdHNzY2xLZXl3b3JkLHRzc2NsQ29tbWFuZCx0c3NjbEVuZCx0c3NjbFVuaXRzCisKK3N5biBtYXRjaCAgdHNzY2xDb21tZW50ICAgICAiIy4qJCIKKworIiAgcmF0aW9uYWwgYW5kIGxvZ2ljYWwgb3BlcmF0b3JzCisiICA8ICAgICAgIExlc3MgdGhhbgorIiAgPiAgICAgICBHcmVhdGVyIHRoYW4KKyIgIDw9ICAgICAgTGVzcyB0aGFuIG9yIGVxdWFsCisiICA+PSAgICAgIEdyZWF0ZXIgdGhhbiBvciBlcXVhbAorIiAgPT0gb3IgPSBFcXVhbCB0bworIiAgIT0gICAgICBOb3QgZXF1YWwgdG8KKyIgICYmIG9yICYgTG9naWNhbCBBTkQKKyIgIHx8IG9yIHwgTG9naWNhbCBPUgorIiAgISAgICAgICBMb2dpY2FsIE5PVAorIgorIiBhbGdlYnJhaWMgb3BlcmF0b3JzOgorIiAgXiBvciAqKiBFeHBvbmVudGF0aW9uCisiICAqICAgICAgIE11bHRpcGxpY2F0aW9uCisiICAvICAgICAgIERpdmlzaW9uCisiICAlICAgICAgIFJlbWFpbmRlcgorIiAgKyAgICAgICBBZGRpdGlvbgorIiAgLSAgICAgICBTdWJ0cmFjdGlvbgorIgorc3luIG1hdGNoICB0c3NjbE9wZXIgICAgICAifHxcfHxcfCYmXHwmXHwhPVx8IVx8Pj1cfDw9XHw+XHw8XHwrXHwtXHxeXHxcKlwqXHxcKlx8L1x8JVx8PT1cfD1cfFwuIiBza2lwd2hpdGUKKworIiBDTEkgRGlyZWN0aXZlIENvbW1hbmRzLCB3aXRoIGFyZ3VtZW50cworIgorIiBCQVNJQyBDT01NQU5EIExJU1QKKyIgKkFERCBpbnB1dF9zb3VyY2UKKyIgKkFSSVRITUVUSUMgeyBbT05dIHwgT0ZGIH0KKyIgKkNMT1NFIHVuaXRfbnVtYmVyCisiICpDUFUKKyIgKkRFRklORQorIiAqRUNIT1svcXVhbGlmaWVyc10geyBbT05dIHwgT0ZGIH0KKyIgKkVMU0UgW0lGIHsgMCB8IDEgfSBdCisiICpFTkQgeyBJRiB8IFdISUxFIH0KKyIgKkVYSVQKKyIgKklGIHsgMCB8IDEgfQorIiAqTElTVC9uIGxpc3QgdmFyaWFibGUKKyIgKk9QRU5bL3IgfCAvcisgfCAvdyB8IC93KyBdIHVuaXRfbnVtYmVyIGZpbGVfbmFtZQorIiAqUFJPTVBUIHByb21wdF9zdHJpbmcgc3lib2xfbmFtZQorIiAqUkVBRC91bml0PXVuaXRfbnVtYmVyWy9MT0NBTCB8IC9HTE9CQUwgXSBzeW0xIFtzeW0yLCBbc3ltMyAuLi5dXQorIiAqUkVXSU5ECisiICpTVE9QCisiICpTVFJDTVAgc3RyaW5nXzEgc3RyaW5nXzIgZGlmZmVyZW5jZQorIiAqU1lTVEVNIGNvbW1hbmQKKyIgKlVOREVGSU5FWy9MT0NBTF1bL0dMT0JBTF0gc3ltYm9sX25hbWUKKyIgKldISUxFIHsgMCB8IDEgfQorIiAqV1JJVEVbL3VuaXQ9dW5pdF9udW1iZXJdIG91dHB1dCB0ZXh0CisiCitzeW4gbWF0Y2ggIHRzc2NsRGlyZWN0aXZlICJcKkFERCIKK3N5biBtYXRjaCAgdHNzY2xEaXJlY3RpdmUgIlwqQVJJVEhNRVRJQyBcK1woT05cfE9GRlwpIgorc3luIG1hdGNoICB0c3NjbERpcmVjdGl2ZSAiXCpDTE9TRSIKK3N5biBtYXRjaCAgdHNzY2xEaXJlY3RpdmUgIlwqQ1BVIgorc3luIG1hdGNoICB0c3NjbERpcmVjdGl2ZSAiXCpERUZJTkUiCitzeW4gbWF0Y2ggIHRzc2NsRGlyZWN0aXZlICJcKkVDSE8iCitzeW4gbWF0Y2ggIHRzc2NsQ29uZGl0aW9uYWwgIlwqRUxTRSIKK3N5biBtYXRjaCAgdHNzY2xDb25kaXRpb25hbCAiXCpFTkQgXCtcKElGXHxXSElMRVwpIgorc3luIG1hdGNoICB0c3NjbERpcmVjdGl2ZSAiXCpFWElUIgorc3luIG1hdGNoICB0c3NjbENvbmRpdGlvbmFsICJcKklGIgorc3luIG1hdGNoICB0c3NjbERpcmVjdGl2ZSAiXCpMSVNUIgorc3luIG1hdGNoICB0c3NjbERpcmVjdGl2ZSAiXCpPUEVOIgorc3luIG1hdGNoICB0c3NjbERpcmVjdGl2ZSAiXCpQUk9NUFQiCitzeW4gbWF0Y2ggIHRzc2NsRGlyZWN0aXZlICJcKlJFQUQiCitzeW4gbWF0Y2ggIHRzc2NsRGlyZWN0aXZlICJcKlJFV0lORCIKK3N5biBtYXRjaCAgdHNzY2xEaXJlY3RpdmUgIlwqU1RPUCIKK3N5biBtYXRjaCAgdHNzY2xEaXJlY3RpdmUgIlwqU1RSQ01QIgorc3luIG1hdGNoICB0c3NjbERpcmVjdGl2ZSAiXCpTWVNURU0iCitzeW4gbWF0Y2ggIHRzc2NsRGlyZWN0aXZlICJcKlVOREVGSU5FIgorc3luIG1hdGNoICB0c3NjbENvbmRpdGlvbmFsICJcKldISUxFIgorc3luIG1hdGNoICB0c3NjbERpcmVjdGl2ZSAiXCpXUklURSIKKworc3luIG1hdGNoICB0c3NjbENvbnRDaGFyICAiLSQiCisKKyIgQyBsaWJyYXJ5IGZ1bmN0b2lucworIiBCZXNzZWwgZnVuY3Rpb25zIChqbiwgeW4pCisiIEVycm9yIGFuZCBjb21wbGVtZW50YXJ5IGVycm9yIGZ1Y3Rpb25zIChlcmYsIGVyZmMpCisiIEV4cG9uZW50aWFsIGZ1bmN0aW9ucyAoZXhwKQorIiBMb2dyaXRobSAobG9nLCBsb2cxMCkKKyIgUG93ZXIgKHBvdykKKyIgU3F1YXJlIHJvb3QgKHNxcnQpCisiIEZsb29yIChmbG9vcikKKyIgQ2VpbGluZyAoY2VpbCkKKyIgRmxvYXRpbmcgcG9pbnQgcmVtYWluZGVyIChmbW9kKQorIiBGbG9hdGluZyBwb2ludCBhYnNvbHV0ZSB2YWx1ZSAoZmFicykKKyIgR2FtbWEgKGdhbW1hKQorIiBFdWNsaWRlYW4gZGlzdGFuY2UgZnVuY3Rpb24gKGh5cG90KQorIiBIcGVyYm9saWMgZnVuY3Rpb25zIChzaW5oLCBjb3NoLCB0YW5oKQorIiBUcmlnb21ldHJpYyBmdW5jdGlvbnMgaW4gcmFkaWFucyAoc2luLCBjb3MsIHRhbiwgYXNpbiwgYWNvcywgYXRhbiwgYXRhbjIpCisiIFRyaWdvbWV0cmljIGZ1bmN0aW9ucyBpbiBkZWdyZWVzIChzaW5kLCBjb3NkLCB0YW5kLCBhc2luZCwgYWNvc2QsIGF0YW5kLAorIiAgICBhdGFuMmQpCisiCisiIGxvY2FsIHZhcmlhbGJsZXM6IGNsX2FyZzEsIGNsX2FyZzIsIGV0Yy4gKGNsX2FyZyBpcyBhbiBhcnJheSBvZiBhcmd1bWVudHMpCisiIGNsX2FyZ3MgaXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMKKyIKKyIKKyIgSS9POiAqUFJPTVBULCAqV1JJVEUsICpSRUFECisiCisiIENvbmRpdGlvbmFsIGJyYW5jaGluZzoKKyIgSUYsIEVMU0UgSUYsIEVORAorIiAqSUYgdmFsdWUgICAgICAgKklGIEk9PTEwCisiICpFTFNFIElGIHZhbHVlICAqRUxTRSBJRiBJPDEwCisiICpFTFNFCQkgICpFTFNFCisiICpFTkRJRgkgICpFTkRJRgorIgorIgorIiBJdGVyYXRpdmUgbG9vcGluZzoKKyIgV0hJTEUKKyIgKldISUxFIHRlc3QKKyIgLi4uLi4KKyIgKkVORCBXSElMRQorIgorIgorIiBFWEFNUExFOgorIiAqREVGSU5FIEkgPSAxCisiICpXSElMRSAoSSA8PSAxMCkKKyIgICAgKldSSVRFIEkgPSAnSScKKyIgICAgKkRFRklORSBJID0gKEkgKyAxKQorIiAqRU5EIFdISUxFCisiCisKK3N5biBtYXRjaCAgdHNzY2xRdWFsaWZpZXIgIi9bXi8gXVwrImhzPXMrMQorc3luIG1hdGNoICB0c3NjbFN5bWJvbCAgICAiJ1xTXCsnIgorInN5biBtYXRjaCAgdHNzY2xTeW1ib2wyICAgIiBcU1wrICIgY29udGFpbmVkCisKK3N5biBtYXRjaCAgdHNzY2xJbnRlZ2VyICAgICAiLVw9XDxbMC05XSpcPiIKK3N5biBtYXRjaCAgdHNzY2xGbG9hdCAgICAgICAiLVw9XDxbMC05XSpcLlswLTldKiIKK3N5biBtYXRjaCAgdHNzY2xTY2llbnRpZmljICAiLVw9XDxbMC05XSpcLlswLTldKkVbLStdXD1bMC05XVwrXD4iCisKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcKKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3Rzc2NsX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3Rzc2NsX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHRzc2NsQ29tbWFuZAkJU3RhdGVtZW50CisgIEhpTGluayB0c3NjbEtleXdvcmQJCVNwZWNpYWwKKyAgSGlMaW5rIHRzc2NsRW5kCQlNYWNybworICBIaUxpbmsgdHNzY2xVbml0cwkJU3BlY2lhbAorCisgIEhpTGluayB0c3NjbENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHRzc2NsRGlyZWN0aXZlCQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHRzc2NsQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHRzc2NsQ29udENoYXIJCU1hY3JvCisgIEhpTGluayB0c3NjbFF1YWxpZmllcgkJVHlwZWRlZgorICBIaUxpbmsgdHNzY2xTeW1ib2wJCUlkZW50aWZpZXIKKyAgSGlMaW5rIHRzc2NsU3ltYm9sMgkJU3ltYm9sCisgIEhpTGluayB0c3NjbFN0cmluZwkJU3RyaW5nCisgIEhpTGluayB0c3NjbE9wZXIJCU9wZXJhdG9yCisKKyAgSGlMaW5rIHRzc2NsSW50ZWdlcgkJTnVtYmVyCisgIEhpTGluayB0c3NjbEZsb2F0CQlOdW1iZXIKKyAgSGlMaW5rIHRzc2NsU2NpZW50aWZpYwlOdW1iZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ0c3NjbCIKKworIiB2aW06IHRzPTggc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvdHNzZ20udmltIGIvcnVudGltZS9zeW50YXgvdHNzZ20udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC90c3NnbS52aW0KQEAgLTAsMCArMSwxMTEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgVFNTIChUaGVybWFsIFN5bnRoZXNpemVyIFN5c3RlbSkgR2VvbWV0cnkKKyIgTWFpbnRhaW5lcjogICBBZHJpYW4gTmFnbGUsIGFuYWdsZUBiYWxsLmNvbQorIiBMYXN0IENoYW5nZTogIDIwMDMgTWF5IDExCisiIEZpbGVuYW1lczogICAgKi50c3NnbQorIiBVUkw6CQlodHRwOi8vd3d3Lm5hZ2xlbmV0Lm9yZy92aW0vc3ludGF4L3Rzc2dtLnZpbQorIiBNQUlOIFVSTDogICAgIGh0dHA6Ly93d3cubmFnbGVuZXQub3JnL3ZpbS8KKworCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworCisKKyIgSWdub3JlIGNhc2UKK3N5biBjYXNlIGlnbm9yZQorCisKKworIgorIgorIiBCZWdpbiBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRzcyBnZW9tdGVyeSBmaWxlLgorIgorCisiIERlZmluZSBrZXl3b3JkcyBmb3IgVFNTCitzeW4ga2V5d29yZCB0c3NnbVBhcmFtICB1bml0cyBtaXJyb3IgcGFyYW0gYWN0aXZlIHNpZGVzIHN1Ym1vZGVsIGluY2x1ZGUKK3N5biBrZXl3b3JkIHRzc2dtUGFyYW0gIGljb25kdWN0b3IgbmJldGEgbmdhbW1hIG9wdGljcyBtYXRlcmlhbCB0aGlja25lc3MgY29sb3IKK3N5biBrZXl3b3JkIHRzc2dtUGFyYW0gIGluaXRpYWxfdGVtcAorc3luIGtleXdvcmQgdHNzZ21QYXJhbSAgaW5pdGlhbF9pZCBub2RlX2lkcyBub2RlX2FkZCBub2RlX3R5cGUKK3N5biBrZXl3b3JkIHRzc2dtUGFyYW0gIGdhbW1hX2JvdW5kYXJpZXMgZ2FtbWFfYWRkIGJldGFfYm91bmRhcmllcworc3luIGtleXdvcmQgdHNzZ21QYXJhbSAgcDEgcDIgcDMgcDQgcDUgcDYgcm90MSByb3QyIHJvdDMgdHggdHkgdHoKKworc3luIGtleXdvcmQgdHNzZ21TdXJmVHlwZSAgcmVjdGFuZ2xlIHRyYXBlem9pZCBkaXNjIGVsbGlwc2UgdHJpYW5nbGUKK3N5biBrZXl3b3JkIHRzc2dtU3VyZlR5cGUgIHBvbHlnb24gY3lsaW5kZXIgY29uZSBzcGhlcmUgZWxsaXBpYy1jb25lCitzeW4ga2V5d29yZCB0c3NnbVN1cmZUeXBlICBvZ2l2ZSB0b3J1cyBib3ggcGFyYWJvbG9pZCBoeXBlcmJvbG9pZCBlbGxpcHNvaWQKK3N5biBrZXl3b3JkIHRzc2dtU3VyZlR5cGUgIHF1YWRyaWxhdGVyYWwgdHJhcGV6aW9kCisKK3N5biBrZXl3b3JkIHRzc2dtQXJncyAgIE9VVCBJTiBET1dOIEJPVEggRE9VQkxFIE5PTkUgU0lOR0xFIFJBREsgQ0MgRkVDQworc3luIGtleXdvcmQgdHNzZ21BcmdzICAgd2hpdGUgcmVkIGJsdWUgZ3JlZW4geWVsbG93IG9yYW5nZSB2aW9sZXQgcGluaworc3luIGtleXdvcmQgdHNzZ21BcmdzICAgdHVycXVvaXNlIGdyZXkgYmxhY2sKK3N5biBrZXl3b3JkIHRzc2dtQXJncyAgIEFyaXRobWV0aWMgQm91bmRhcnkgSGVhdGVyCisKK3N5biBrZXl3b3JkIHRzc2dtRGVsaW0gIGFzc2VtYmx5CisKK3N5biBrZXl3b3JkIHRzc2dtRW5kICAgIGVuZAorCitzeW4ga2V5d29yZCB0c3NnbVVuaXRzICBjbSBmZWV0IG1ldGVycyBpbmNoZXMKK3N5biBrZXl3b3JkIHRzc2dtVW5pdHMgIENlbHNpdXMgS2VsdmluIEZhaHJlbmhlaXQgUmFua2luZQorCisKKworIiBEZWZpbmUgbWF0Y2hlcyBmb3IgVFNTCitzeW4gbWF0Y2ggIHRzc2dtRGVmYXVsdCAgICAgIl5ERUZBVUxUL0xFTkdUSCA9IFwoZnRcfGluXHxjbVx8bVwpIgorc3luIG1hdGNoICB0c3NnbURlZmF1bHQgICAgICJeREVGQVVMVC9URU1QID0gW0NLRlJdIgorCitzeW4gbWF0Y2ggIHRzc2dtQ29tbWVudCAgICAgICAvY29tbWVudCBcKz0gXCsiLioiLyBjb250YWlucz10c3NQYXJhbSx0c3NnbUNvbW1lbnRTdHJpbmcKK3N5biBtYXRjaCAgdHNzZ21Db21tZW50U3RyaW5nIC8iLioiLyBjb250YWluZWQKKworc3luIG1hdGNoICB0c3NnbVN1cmZJZGVudCAgICIgXFNcK1wuXGRcKyBcPSQiCisKK3N5biBtYXRjaCAgdHNzZ21TdHJpbmcgICAgICAvIlteIiBdXCsiL21zPXMrMSxtZT1lLTEgY29udGFpbnM9QUxMQlVULHRzc0ludGVnZXIKKworc3luIG1hdGNoICB0c3NnbUFyZ3MJICAgIC8gPSBbeHl6XSwiL21zPXMrMyxtZT1lLTIKKworc3luIG1hdGNoICB0c3NnbUludGVnZXIgICAgICItXD1cPFswLTldKlw+Igorc3luIG1hdGNoICB0c3NnbUZsb2F0ICAgICAgICItXD1cPFswLTldKlwuWzAtOV0qIgorc3luIG1hdGNoICB0c3NnbVNjaWVudGlmaWMgICItXD1cPFswLTldKlwuWzAtOV0qRVstK11cPVswLTldXCtcPiIKKworCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZworIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfdHNzZ21fc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfdHNzZ21fc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgdHNzZ21QYXJhbQkJU3RhdGVtZW50CisgIEhpTGluayB0c3NnbVN1cmZUeXBlCQlUeXBlCisgIEhpTGluayB0c3NnbUFyZ3MJCVNwZWNpYWwKKyAgSGlMaW5rIHRzc2dtRGVsaW0JCVR5cGVkZWYKKyAgSGlMaW5rIHRzc2dtRW5kCQlNYWNybworICBIaUxpbmsgdHNzZ21Vbml0cwkJU3BlY2lhbAorCisgIEhpTGluayB0c3NnbURlZmF1bHQJCVNwZWNpYWxDb21tZW50CisgIEhpTGluayB0c3NnbUNvbW1lbnQJCVN0YXRlbWVudAorICBIaUxpbmsgdHNzZ21Db21tZW50U3RyaW5nCUNvbW1lbnQKKyAgSGlMaW5rIHRzc2dtU3VyZklkZW50CQlJZGVudGlmaWVyCisgIEhpTGluayB0c3NnbVN0cmluZwkJRGVsaW1pdGVyCisKKyAgSGlMaW5rIHRzc2dtSW50ZWdlcgkJTnVtYmVyCisgIEhpTGluayB0c3NnbUZsb2F0CQlGbG9hdAorICBIaUxpbmsgdHNzZ21TY2llbnRpZmljCUZsb2F0CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidHNzZ20iCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3Rzc29wLnZpbSBiL3J1bnRpbWUvc3ludGF4L3Rzc29wLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDE2ZGYwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdHNzb3AudmltCkBAIC0wLDAgKzEsODcgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgVFNTIChUaGVybWFsIFN5bnRoZXNpemVyIFN5c3RlbSkgT3B0aWNzCisiIE1haW50YWluZXI6ICAgQWRyaWFuIE5hZ2xlLCBhbmFnbGVAYmFsbC5jb20KKyIgTGFzdCBDaGFuZ2U6ICAyMDAzIE1heSAxMQorIiBGaWxlbmFtZXM6ICAgICoudHNzb3AKKyIgVVJMOgkJaHR0cDovL3d3dy5uYWdsZW5ldC5vcmcvdmltL3N5bnRheC90c3NvcC52aW0KKyIgTUFJTiBVUkw6ICAgICBodHRwOi8vd3d3Lm5hZ2xlbmV0Lm9yZy92aW0vCisKKworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKworCisiIElnbm9yZSBjYXNlCitzeW4gY2FzZSBpZ25vcmUKKworCisKKyIKKyIKKyIgQmVnaW4gc3ludGF4IGRlZmluaXRpb25zIGZvciB0c3Mgb3B0aWNzIGZpbGUuCisiCisKKyIgRGVmaW5lIGtleXdvcmRzIGZvciBUU1MKK3N5biBrZXl3b3JkIHRzc29wUGFyYW0gIGlyX2VwcyBpcl90cmFucyBpcl9zcGVjIGlyX3RzcGVjIGlyX3JlZnJhY3QKK3N5biBrZXl3b3JkIHRzc29wUGFyYW0gIHNvbF9lcHMgc29sX3RyYW5zIHNvbF9zcGVjIHNvbF90c3BlYyBzb2xfcmVmcmFjdAorc3luIGtleXdvcmQgdHNzb3BQYXJhbSAgY29sb3IKKworInN5biBrZXl3b3JkIHRzc29wUHJvcCAgIHByb3BlcnR5CisKK3N5biBrZXl3b3JkIHRzc29wQXJncyAgIHdoaXRlIHJlZCBibHVlIGdyZWVuIHllbGxvdyBvcmFuZ2UgdmlvbGV0IHBpbmsKK3N5biBrZXl3b3JkIHRzc29wQXJncyAgIHR1cnF1b2lzZSBncmV5IGJsYWNrCisKKworCisiIERlZmluZSBtYXRjaGVzIGZvciBUU1MKK3N5biBtYXRjaCAgdHNzb3BDb21tZW50ICAgICAgIC9jb21tZW50IFwrPSBcKyIuKiIvIGNvbnRhaW5zPXRzc29wUGFyYW0sdHNzb3BDb21tZW50U3RyaW5nCitzeW4gbWF0Y2ggIHRzc29wQ29tbWVudFN0cmluZyAvIi4qIi8gY29udGFpbmVkCisKK3N5biBtYXRjaCAgdHNzb3BQcm9wCSAgICAicHJvcGVydHkgIgorc3luIG1hdGNoICB0c3NvcFByb3AJICAgICJlZGl0L29wdGljICIKK3N5biBtYXRjaCAgdHNzb3BQcm9wTmFtZSAgICAiXnByb3BlcnR5IFxTXCsiIGNvbnRhaW5zPXRzc29wUHJvcAorc3luIG1hdGNoICB0c3NvcFByb3BOYW1lICAgICJeZWRpdC9vcHRpYyBcU1wrJCIgY29udGFpbnM9dHNzb3BQcm9wCisKK3N5biBtYXRjaCAgdHNzb3BJbnRlZ2VyICAgICAiLVw9XDxbMC05XSpcPiIKK3N5biBtYXRjaCAgdHNzb3BGbG9hdCAgICAgICAiLVw9XDxbMC05XSpcLlswLTldKiIKK3N5biBtYXRjaCAgdHNzb3BTY2llbnRpZmljICAiLVw9XDxbMC05XSpcLlswLTldKkVbLStdXD1bMC05XVwrXD4iCisKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcKKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3Rzc29wX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3Rzc29wX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHRzc29wUGFyYW0JCVN0YXRlbWVudAorICBIaUxpbmsgdHNzb3BQcm9wCQlJZGVudGlmaWVyCisgIEhpTGluayB0c3NvcEFyZ3MJCVNwZWNpYWwKKworICBIaUxpbmsgdHNzb3BDb21tZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIHRzc29wQ29tbWVudFN0cmluZwlDb21tZW50CisgIEhpTGluayB0c3NvcFByb3BOYW1lCQlUeXBlZGVmCisKKyAgSGlMaW5rIHRzc29wSW50ZWdlcgkJTnVtYmVyCisgIEhpTGluayB0c3NvcEZsb2F0CQlGbG9hdAorICBIaUxpbmsgdHNzb3BTY2llbnRpZmljCUZsb2F0CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidHNzb3AiCisKKyIgdmltOiB0cz04IHN3PTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3VjLnZpbSBiL3J1bnRpbWUvc3ludGF4L3VjLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWFiMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdWMudmltCkBAIC0wLDAgKzEsMTc4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJVW5yZWFsU2NyaXB0CisiIE1haW50YWluZXI6CU1hcmsgRmVycmVsbCA8bWFqb3JAY2hhb3RpY2RyZWFtcy5vcmc+CisiIFVSTDoJCWZ0cDovL2Z0cC5jaGFvdGljZHJlYW1zLm9yZy9wdWIvdXQvdmltL3VjLnZpbQorIiBDcmVkaXRzOglCYXNlZCBvbiB0aGUgamF2YS52aW0gc3ludGF4IGZpbGUgYnkgQ2xhdWRpbyBGbGVpbmVyCisiIExhc3QgY2hhbmdlOgkyMDAzIE1heSAzMQorCisiIFBsZWFzZSBjaGVjayA6aGVscCB1Yy52aW0gZm9yIGNvbW1lbnRzIG9uIHNvbWUgb2YgdGhlIG9wdGlvbnMgYXZhaWxhYmxlLgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgc29tZSBjaGFyYWN0ZXJzIHRoYXQgY2Fubm90IGJlIGluIGEgVW5yZWFsU2NyaXB0IHByb2dyYW0gKG91dHNpZGUgYSBzdHJpbmcpCitzeW4gbWF0Y2ggdWNFcnJvciAiW1xcQGBdIgorc3luIG1hdGNoIHVjRXJyb3IgIjw8PFx8XC5cLlx8PT5cfDw+XHx8fD1cfCYmPVx8W14tXS0+XHxcKlwvIgorCisiIHdlIGRlZmluZSBpdCBoZXJlIHNvIHRoYXQgaW5jbHVkZWQgZmlsZXMgY2FuIHRlc3QgZm9yIGl0CitpZiAhZXhpc3RzKCJtYWluX3N5bnRheCIpCisgIGxldCBtYWluX3N5bnRheD0ndWMnCitlbmRpZgorCitzeW50YXggY2FzZSBpZ25vcmUKKworIiBrZXl3b3JkIGRlZmluaXRpb25zCitzeW4ga2V5d29yZCB1Y0JyYW5jaAkgICAgICBicmVhayBjb250aW51ZQorc3luIGtleXdvcmQgdWNDb25kaXRpb25hbCAgICAgaWYgZWxzZSBzd2l0Y2gKK3N5biBrZXl3b3JkIHVjUmVwZWF0CSAgICAgIHdoaWxlIGZvciBkbyBmb3JlYWNoCitzeW4ga2V5d29yZCB1Y0Jvb2xlYW4JICAgICAgdHJ1ZSBmYWxzZQorc3luIGtleXdvcmQgdWNDb25zdGFudAkgICAgICBudWxsCitzeW4ga2V5d29yZCB1Y09wZXJhdG9yCSAgICAgIG5ldyBpbnN0YW5jZW9mCitzeW4ga2V5d29yZCB1Y1R5cGUJICAgICAgYm9vbGVhbiBjaGFyIGJ5dGUgc2hvcnQgaW50IGxvbmcgZmxvYXQgZG91YmxlCitzeW4ga2V5d29yZCB1Y1R5cGUJICAgICAgdm9pZCBQYXduIHNvdW5kIHN0YXRlIGF1dG8gZXhlYyBmdW5jdGlvbiBpcGFkZHIKK3N5biBrZXl3b3JkIHVjVHlwZQkgICAgICBFTGlnaHRUeXBlIGFjdG9yIGFtbW8gZGVmYXVsdHByb3BlcnRpZXMgYm9vbAorc3luIGtleXdvcmQgdWNUeXBlCSAgICAgIG5hdGl2ZSBub2V4cG9ydCB2YXIgb3V0IHZlY3RvciBuYW1lIGxvY2FsIHN0cmluZworc3luIGtleXdvcmQgdWNUeXBlCSAgICAgIGV2ZW50CitzeW4ga2V5d29yZCB1Y1N0YXRlbWVudCAgICAgICByZXR1cm4KK3N5biBrZXl3b3JkIHVjU3RvcmFnZUNsYXNzICAgIHN0YXRpYyBzeW5jaHJvbml6ZWQgdHJhbnNpZW50IHZvbGF0aWxlIGZpbmFsCitzeW4ga2V5d29yZCB1Y01ldGhvZERlY2wgICAgICBzeW5jaHJvbml6ZWQgdGhyb3dzCisKKyIgVW5yZWFsU2NyaXB0IGRlZmluZXMgY2xhc3NlcyBpbiBzb3J0YSBmc2NrZWQgdXAgZmFzaGlvbgorc3luIG1hdGNoICAgdWNDbGFzc0RlY2wgICAgICAgIl5bQ2NdbGFzc1tccyRdKlxTKltccyRdKmV4cGFuZHNbXHMkXSpcUyo7IiBjb250YWlucz11Y1NwZWNpYWwsdWNTcGVjaWFsQ2hhcix1Y0NsYXNzS2V5cworc3luIGtleXdvcmQgdWNDbGFzc0tleXMJICAgICAgY2xhc3MgZXhwYW5kcyBleHRlbmRzCitzeW4gbWF0Y2ggICB1Y0V4dGVybmFsCSAgICAgICJeXCNleGVjLioiIGNvbnRhaW5zPXVjQ29tbWVudFN0cmluZyx1Y051bWJlcgorc3luIGtleXdvcmQgdWNTY29wZURlY2wgICAgICAgcHVibGljIHByb3RlY3RlZCBwcml2YXRlIGFic3RyYWN0CisKKyIgVW5yZWFsU2NyaXB0IEZ1bmN0aW9ucworc3luIG1hdGNoICAgdWNGdW5jRGVmCSAgICAgICJeLipmdW5jdGlvblxzKltcKF0qIiBjb250YWlucz11Y1R5cGUsdWNTdG9yYWdlQ2xhc3MKK3N5biBtYXRjaCAgIHVjRXZlbnREZWYJICAgICAgIl4uKmV2ZW50XHMqW1woXSoiIGNvbnRhaW5zPXVjVHlwZSx1Y1N0b3JhZ2VDbGFzcworc3luIG1hdGNoICAgdWNDbGFzc0xhYmVsICAgICAgIlthLXpBLVowLTldKlwnW2EtekEtWjAtOV0qXCciIGNvbnRhaW5zPXVjQ2hhcmFjdGVyCisKK3N5biByZWdpb24gIHVjTGFiZWxSZWdpb24gICAgIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9dWNMYWJlbCBzdGFydD0iXDxjYXNlXD4iIG1hdGNoZ3JvdXA9Tk9ORSBlbmQ9IjoiIGNvbnRhaW5zPXVjTnVtYmVyCitzeW4gbWF0Y2ggICB1Y1VzZXJMYWJlbCAgICAgICAiXlxzKltfJGEtekEtWl1bXyRhLXpBLVowLTlfXSpccyo6ImhlPWUtMSBjb250YWlucz11Y0xhYmVsCitzeW4ga2V5d29yZCB1Y0xhYmVsCSAgICAgIGRlZmF1bHQKKworIiBUaGUgZm9sbG93aW5nIGNsdXN0ZXIgY29udGFpbnMgYWxsIGphdmEgZ3JvdXBzIGV4Y2VwdCB0aGUgY29udGFpbmVkIG9uZXMKK3N5biBjbHVzdGVyIHVjVG9wIGNvbnRhaW5zPXVjRXh0ZXJuYWwsdWNFcnJvcix1Y0Vycm9yLHVjQnJhbmNoLHVjTGFiZWxSZWdpb24sdWNMYWJlbCx1Y0NvbmRpdGlvbmFsLHVjUmVwZWF0LHVjQm9vbGVhbix1Y0NvbnN0YW50LHVjVHlwZWRlZix1Y09wZXJhdG9yLHVjVHlwZSx1Y1R5cGUsdWNTdGF0ZW1lbnQsdWNTdG9yYWdlQ2xhc3MsdWNNZXRob2REZWNsLHVjQ2xhc3NEZWNsLHVjQ2xhc3NEZWNsLHVjQ2xhc3NEZWNsLHVjU2NvcGVEZWNsLHVjRXJyb3IsdWNFcnJvcjIsdWNVc2VyTGFiZWwsdWNDbGFzc0xhYmVsCisKKyIgQ29tbWVudHMKK3N5biBrZXl3b3JkIHVjVG9kbwkgICAgICAgY29udGFpbmVkIFRPRE8gRklYTUUgWFhYCitzeW4gcmVnaW9uICB1Y0NvbW1lbnRTdHJpbmcgICAgY29udGFpbmVkIHN0YXJ0PSsiKyBlbmQ9KyIrIGVuZD0rXCovK21lPXMtMSxoZT1zLTEgY29udGFpbnM9dWNTcGVjaWFsLHVjQ29tbWVudFN0YXIsdWNTcGVjaWFsQ2hhcgorc3luIHJlZ2lvbiAgdWNDb21tZW50MlN0cmluZyAgIGNvbnRhaW5lZCBzdGFydD0rIisgIGVuZD0rJFx8IisgIGNvbnRhaW5zPXVjU3BlY2lhbCx1Y1NwZWNpYWxDaGFyCitzeW4gbWF0Y2ggICB1Y0NvbW1lbnRDaGFyYWN0ZXIgY29udGFpbmVkICInXFxbXiddXHsxLDZcfSciIGNvbnRhaW5zPXVjU3BlY2lhbENoYXIKK3N5biBtYXRjaCAgIHVjQ29tbWVudENoYXJhY3RlciBjb250YWluZWQgIidcXCcnIiBjb250YWlucz11Y1NwZWNpYWxDaGFyCitzeW4gbWF0Y2ggICB1Y0NvbW1lbnRDaGFyYWN0ZXIgY29udGFpbmVkICInW15cXF0nIgorc3luIHJlZ2lvbiAgdWNDb21tZW50CSAgICAgICBzdGFydD0iL1wqIiAgZW5kPSJcKi8iIGNvbnRhaW5zPXVjQ29tbWVudFN0cmluZyx1Y0NvbW1lbnRDaGFyYWN0ZXIsdWNOdW1iZXIsdWNUb2RvCitzeW4gbWF0Y2ggICB1Y0NvbW1lbnRTdGFyICAgICAgY29udGFpbmVkICJeXHMqXCpbXi9dIm1lPWUtMQorc3luIG1hdGNoICAgdWNDb21tZW50U3RhciAgICAgIGNvbnRhaW5lZCAiXlxzKlwqJCIKK3N5biBtYXRjaCAgIHVjTGluZUNvbW1lbnQgICAgICAiLy8uKiIgY29udGFpbnM9dWNDb21tZW50MlN0cmluZyx1Y0NvbW1lbnRDaGFyYWN0ZXIsdWNOdW1iZXIsdWNUb2RvCitoaSBsaW5rIHVjQ29tbWVudFN0cmluZyB1Y1N0cmluZworaGkgbGluayB1Y0NvbW1lbnQyU3RyaW5nIHVjU3RyaW5nCitoaSBsaW5rIHVjQ29tbWVudENoYXJhY3RlciB1Y0NoYXJhY3RlcgorCitzeW4gY2x1c3RlciB1Y1RvcCBhZGQ9dWNDb21tZW50LHVjTGluZUNvbW1lbnQKKworIiBtYXRjaCB0aGUgc3BlY2lhbCBjb21tZW50IC8qKi8KK3N5biBtYXRjaCAgIHVjQ29tbWVudAkgICAgICAgIi9cKlwqLyIKKworIiBTdHJpbmdzIGFuZCBjb25zdGFudHMKK3N5biBtYXRjaCAgIHVjU3BlY2lhbEVycm9yICAgICBjb250YWluZWQgIlxcLiIKKyJzeW4gbWF0Y2ggICB1Y1NwZWNpYWxDaGFyRXJyb3IgY29udGFpbmVkICJbXiddIgorc3luIG1hdGNoICAgdWNTcGVjaWFsQ2hhciAgICAgIGNvbnRhaW5lZCAiXFxcKFs0LTldXGRcfFswLTNdXGRcZFx8W1wiXFwnbnRicmZdXHx1XHhcezRcfVwpIgorc3luIHJlZ2lvbiAgdWNTdHJpbmcJICAgICAgIHN0YXJ0PSsiKyBlbmQ9KyIrICBjb250YWlucz11Y1NwZWNpYWxDaGFyLHVjU3BlY2lhbEVycm9yCitzeW4gbWF0Y2ggICB1Y1N0cmluZ0Vycm9yICAgICAgKyJcKFteIlxcXVx8XFwuXCkqJCsKK3N5biBtYXRjaCAgIHVjQ2hhcmFjdGVyICAgICAgICAiJ1teJ10qJyIgY29udGFpbnM9dWNTcGVjaWFsQ2hhcix1Y1NwZWNpYWxDaGFyRXJyb3IKK3N5biBtYXRjaCAgIHVjQ2hhcmFjdGVyICAgICAgICAiJ1xcJyciIGNvbnRhaW5zPXVjU3BlY2lhbENoYXIKK3N5biBtYXRjaCAgIHVjQ2hhcmFjdGVyICAgICAgICAiJ1teXFxdJyIKK3N5biBtYXRjaCAgIHVjTnVtYmVyCSAgICAgICAiXDxcKDBbMC03XSpcfDBbeFhdXHhcK1x8XGRcK1wpW2xMXVw9XD4iCitzeW4gbWF0Y2ggICB1Y051bWJlcgkgICAgICAgIlwoXDxcZFwrXC5cZCpcfFwuXGRcK1wpXChbZUVdWy0rXVw9XGRcK1wpXD1bZkZkRF1cPSIKK3N5biBtYXRjaCAgIHVjTnVtYmVyCSAgICAgICAiXDxcZFwrW2VFXVstK11cPVxkXCtbZkZkRF1cPVw+Igorc3luIG1hdGNoICAgdWNOdW1iZXIJICAgICAgICJcPFxkXCtcKFtlRV1bLStdXD1cZFwrXClcPVtmRmREXVw+IgorCisiIHVuaWNvZGUgY2hhcmFjdGVycworc3luIG1hdGNoICAgdWNTcGVjaWFsICJcXHVcZFx7NFx9IgorCitzeW4gY2x1c3RlciB1Y1RvcCBhZGQ9dWNTdHJpbmcsdWNDaGFyYWN0ZXIsdWNOdW1iZXIsdWNTcGVjaWFsLHVjU3RyaW5nRXJyb3IKKworIiBjYXRjaCBlcnJvcnMgY2F1c2VkIGJ5IHdyb25nIHBhcmVudGhlc2lzCitzeW4gcmVnaW9uICB1Y1BhcmVuCSAgICAgICB0cmFuc3BhcmVudCBzdGFydD0iKCIgZW5kPSIpIiBjb250YWlucz1AdWNUb3AsdWNQYXJlbgorc3luIG1hdGNoICAgdWNQYXJlbkVycm9yICAgICAgICIpIgoraGkgbGluayAgICAgdWNQYXJlbkVycm9yICAgICAgIHVjRXJyb3IKKworaWYgIWV4aXN0cygidWNfbWlubGluZXMiKQorICBsZXQgdWNfbWlubGluZXMgPSAxMAorZW5kaWYKK2V4ZWMgInN5biBzeW5jIGNjb21tZW50IHVjQ29tbWVudCBtaW5saW5lcz0iIC4gdWNfbWlubGluZXMKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfdWNfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfdWNfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgdWNGdW5jRGVmCQkJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHVjRXZlbnREZWYJCQlDb25kaXRpb25hbAorICBIaUxpbmsgdWNCcmFjZXMJCQlGdW5jdGlvbgorICBIaUxpbmsgdWNCcmFuY2gJCQlDb25kaXRpb25hbAorICBIaUxpbmsgdWNMYWJlbAkJCUxhYmVsCisgIEhpTGluayB1Y1VzZXJMYWJlbAkJCUxhYmVsCisgIEhpTGluayB1Y0NvbmRpdGlvbmFsCQkJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIHVjUmVwZWF0CQkJUmVwZWF0CisgIEhpTGluayB1Y1N0b3JhZ2VDbGFzcwkJCVN0b3JhZ2VDbGFzcworICBIaUxpbmsgdWNNZXRob2REZWNsCQkJdWNTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIHVjQ2xhc3NEZWNsCQkJdWNTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIHVjU2NvcGVEZWNsCQkJdWNTdG9yYWdlQ2xhc3MKKyAgSGlMaW5rIHVjQm9vbGVhbgkJCUJvb2xlYW4KKyAgSGlMaW5rIHVjU3BlY2lhbAkJCVNwZWNpYWwKKyAgSGlMaW5rIHVjU3BlY2lhbEVycm9yCQkJRXJyb3IKKyAgSGlMaW5rIHVjU3BlY2lhbENoYXJFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIHVjU3RyaW5nCQkJU3RyaW5nCisgIEhpTGluayB1Y0NoYXJhY3RlcgkJCUNoYXJhY3RlcgorICBIaUxpbmsgdWNTcGVjaWFsQ2hhcgkJCVNwZWNpYWxDaGFyCisgIEhpTGluayB1Y051bWJlcgkJCU51bWJlcgorICBIaUxpbmsgdWNFcnJvcgkJCUVycm9yCisgIEhpTGluayB1Y1N0cmluZ0Vycm9yCQkJRXJyb3IKKyAgSGlMaW5rIHVjU3RhdGVtZW50CQkJU3RhdGVtZW50CisgIEhpTGluayB1Y09wZXJhdG9yCQkJT3BlcmF0b3IKKyAgSGlMaW5rIHVjT3ZlckxvYWRlZAkJCU9wZXJhdG9yCisgIEhpTGluayB1Y0NvbW1lbnQJCQlDb21tZW50CisgIEhpTGluayB1Y0RvY0NvbW1lbnQJCQlDb21tZW50CisgIEhpTGluayB1Y0xpbmVDb21tZW50CQkJQ29tbWVudAorICBIaUxpbmsgdWNDb25zdGFudAkJCXVjQm9vbGVhbgorICBIaUxpbmsgdWNUeXBlZGVmCQkJVHlwZWRlZgorICBIaUxpbmsgdWNUb2RvCQkJCVRvZG8KKworICBIaUxpbmsgdWNDb21tZW50VGl0bGUJCQlTcGVjaWFsQ29tbWVudAorICBIaUxpbmsgdWNEb2NUYWdzCQkJU3BlY2lhbAorICBIaUxpbmsgdWNEb2NQYXJhbQkJCUZ1bmN0aW9uCisgIEhpTGluayB1Y0NvbW1lbnRTdGFyCQkJdWNDb21tZW50CisKKyAgSGlMaW5rIHVjVHlwZQkJCQlUeXBlCisgIEhpTGluayB1Y0V4dGVybmFsCQkJSW5jbHVkZQorCisgIEhpTGluayB1Y0NsYXNzS2V5cwkJCUNvbmRpdGlvbmFsCisgIEhpTGluayB1Y0NsYXNzTGFiZWwJCQlDb25kaXRpb25hbAorCisgIEhpTGluayBodG1sQ29tbWVudAkJCVNwZWNpYWwKKyAgSGlMaW5rIGh0bWxDb21tZW50UGFydAkJU3BlY2lhbAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ1YyIKKworaWYgbWFpbl9zeW50YXggPT0gJ3VjJworICB1bmxldCBtYWluX3N5bnRheAorZW5kaWYKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3VpbC52aW0gYi9ydW50aW1lL3N5bnRheC91aWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYzRlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC91aWwudmltCkBAIC0wLDAgKzEsODUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglNb3RpZiBVSUwgKFVzZXIgSW50ZXJmYWNlIExhbmd1YWdlKQorIiBNYWludGFpbmVyOglUaG9tYXMgS29laGxlciA8amVhbi1sdWNAcGljYXJkLmZyYW5rZW4uZGU+CisiIExhc3QgQ2hhbmdlOgkyMDAyIFNlcCAyMAorIiBVUkw6CQlodHRwOi8vamVhbmx1Yy1waWNhcmQuZGUvdmltL3N5bnRheC91aWwudmltCisKKyIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgQSBidW5jaCBvZiB1c2VmdWwga2V5d29yZHMKK3N5biBrZXl3b3JkIHVpbFR5cGUJYXJndW1lbnRzCWNhbGxiYWNrcwljb2xvcgorc3luIGtleXdvcmQgdWlsVHlwZQljb21wb3VuZF9zdHJpbmcJY29udHJvbHMJZW5kCitzeW4ga2V5d29yZCB1aWxUeXBlCWV4cG9ydGVkCWZpbGUJCWluY2x1ZGUKK3N5biBrZXl3b3JkIHVpbFR5cGUJbW9kdWxlCQlvYmplY3QJCXByb2NlZHVyZQorc3luIGtleXdvcmQgdWlsVHlwZQl1c2VyX2RlZmluZWQJeGJpdG1hcGZpbGUKKworc3luIGtleXdvcmQgdWlsVG9kbyBjb250YWluZWQJVE9ETworCisiIFN0cmluZyBhbmQgQ2hhcmFjdGVyIGNvbnRzdGFudHMKKyIgSGlnaGxpZ2h0IHNwZWNpYWwgY2hhcmFjdGVycyAodGhvc2Ugd2hpY2ggaGF2ZSBhIGJhY2tzbGFzaCkgZGlmZmVyZW50bHkKK3N5biBtYXRjaCAgIHVpbFNwZWNpYWwgY29udGFpbmVkICJcXFxkXGRcZFx8XFwuIgorc3luIHJlZ2lvbiAgdWlsU3RyaW5nCQlzdGFydD0rIisgIHNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisgIGNvbnRhaW5zPXVpbFNwZWNpYWwKK3N5biBtYXRjaCAgIHVpbENoYXJhY3RlcgkiJ1teXFxdJyIKK3N5biByZWdpb24gIHVpbFN0cmluZwkJc3RhcnQ9KycrICBza2lwPStcXFxcXHxcXCIrICBlbmQ9KycrICBjb250YWlucz11aWxTcGVjaWFsCitzeW4gbWF0Y2ggICB1aWxTcGVjaWFsQ2hhcmFjdGVyCSInXFwuJyIKK3N5biBtYXRjaCAgIHVpbFNwZWNpYWxTdGF0ZW1lbnQJIlhtW14gPSgpe31dKiIKK3N5biBtYXRjaCAgIHVpbFNwZWNpYWxGdW5jdGlvbgkiTXJtTmNyZWF0ZUNhbGxiYWNrIgorc3luIG1hdGNoICAgdWlsUmVzc291cmNlCSJYbU5bXiA9KCl7fV0qIgorCitzeW4gbWF0Y2ggIHVpbE51bWJlcgkJIi1cPVw8XGQqXC5cPVxkXCtcKGVcPWZcPVx8W3VVXVw9W2xMXVw9XClcPiIKK3N5biBtYXRjaCAgdWlsTnVtYmVyCQkiMFt4WF1bMC05YS1mQS1GXVwrXD4iCisKK3N5biByZWdpb24gdWlsQ29tbWVudAkJc3RhcnQ9Ii9cKiIgIGVuZD0iXCovIiBjb250YWlucz11aWxUb2RvCitzeW4gbWF0Y2ggIHVpbENvbW1lbnQJCSIhLioiIGNvbnRhaW5zPXVpbFRvZG8KK3N5biBtYXRjaCAgdWlsQ29tbWVudEVycm9yCSJcKi8iCisKK3N5biByZWdpb24gdWlsUHJlQ29uZGl0CQlzdGFydD0iXiNccypcKGlmXD5cfGlmZGVmXD5cfGlmbmRlZlw+XHxlbGlmXD5cfGVsc2VcPlx8ZW5kaWZcPlwpIiAgc2tpcD0iXFwkIiAgZW5kPSIkIiBjb250YWlucz11aWxDb21tZW50LHVpbFN0cmluZyx1aWxDaGFyYWN0ZXIsdWlsTnVtYmVyLHVpbENvbW1lbnRFcnJvcgorc3luIG1hdGNoICB1aWxJbmNsdWRlZCBjb250YWluZWQgIjxbXj5dKj4iCitzeW4gbWF0Y2ggIHVpbEluY2x1ZGUJCSJeI1xzKmluY2x1ZGVcc1wrLiIgY29udGFpbnM9dWlsU3RyaW5nLHVpbEluY2x1ZGVkCitzeW4gbWF0Y2ggIHVpbExpbmVTa2lwCQkiXFwkIgorc3luIHJlZ2lvbiB1aWxEZWZpbmUJCXN0YXJ0PSJeI1xzKlwoZGVmaW5lXD5cfHVuZGVmXD5cKSIgZW5kPSIkIiBjb250YWlucz11aWxMaW5lU2tpcCx1aWxDb21tZW50LHVpbFN0cmluZyx1aWxDaGFyYWN0ZXIsdWlsTnVtYmVyLHVpbENvbW1lbnRFcnJvcgorCitzeW4gc3luYyBjY29tbWVudCB1aWxDb21tZW50CisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3VpbF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF91aWxfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyAgSGlMaW5rIHVpbENoYXJhY3RlcgkJdWlsU3RyaW5nCisgIEhpTGluayB1aWxTcGVjaWFsQ2hhcmFjdGVyCXVpbFNwZWNpYWwKKyAgSGlMaW5rIHVpbE51bWJlcgkJdWlsU3RyaW5nCisgIEhpTGluayB1aWxDb21tZW50RXJyb3IJdWlsRXJyb3IKKyAgSGlMaW5rIHVpbEluY2x1ZGUJCXVpbFByZUNvbmRpdAorICBIaUxpbmsgdWlsRGVmaW5lCQl1aWxQcmVDb25kaXQKKyAgSGlMaW5rIHVpbEluY2x1ZGVkCQl1aWxTdHJpbmcKKyAgSGlMaW5rIHVpbFNwZWNpYWxGdW5jdGlvbgl1aWxSZXNzb3VyY2UKKyAgSGlMaW5rIHVpbFJlc3NvdXJjZQkJSWRlbnRpZmllcgorICBIaUxpbmsgdWlsU3BlY2lhbFN0YXRlbWVudAlLZXl3b3JkCisgIEhpTGluayB1aWxFcnJvcgkJRXJyb3IKKyAgSGlMaW5rIHVpbFByZUNvbmRpdAkJUHJlQ29uZGl0CisgIEhpTGluayB1aWxUeXBlCQlUeXBlCisgIEhpTGluayB1aWxTdHJpbmcJCVN0cmluZworICBIaUxpbmsgdWlsQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgdWlsU3BlY2lhbAkJU3BlY2lhbAorICBIaUxpbmsgdWlsVG9kbwkJVG9kbworCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInVpbCIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3ZhbGdyaW5kLnZpbSBiL3J1bnRpbWUvc3ludGF4L3ZhbGdyaW5kLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjNiNzkyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdmFsZ3JpbmQudmltCkBAIC0wLDAgKzEsOTkgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiBWYWxncmluZCBNZW1vcnkgRGVidWdnZXIgT3V0cHV0CisiIE1haW50YWluZXI6IFJvZ2VyIEx1ZXRoaSA8cmxAaGVsbGdhdGUuY2g+CisiIFByb2dyYW0gVVJMOiBodHRwOi8vZGV2ZWwtaG9tZS5rZGUub3JnL35zZXdhcmRqLworIiBMYXN0IENoYW5nZTogMjAwMiBBcHIgMDcKKyIKKyIgTm90ZXM6IG1vc3RseSBiYXNlZCBvbiBzdHJhY2UudmltIGFuZCB4bWwudmltCisKKyIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgbWF0Y2gKK3N5biBzeW5jIG1pbmxpbmVzPTUwCisKK3N5biBtYXRjaCB2YWxncmluZFNwZWNMaW5lICJeWystXVx7Mn1cZFwrWystXVx7Mn0uKiQiCisKK3N5biByZWdpb24gdmFsZ3JpbmRSZWdpb24KKwlcIHN0YXJ0PStePT1ceihcZFwrXCk9PSBcdy4qJCsKKwlcIHNraXA9K149PVx6MT09XCggXHwgICAgLipcKSQrCisJXCBlbmQ9K14rCisJXCBmb2xkCisJXCBrZWVwZW5kCisJXCBjb250YWlucz12YWxncmluZFBpZENodW5rLHZhbGdyaW5kTGluZQorCitzeW4gcmVnaW9uIHZhbGdyaW5kUGlkQ2h1bmsKKwlcIHN0YXJ0PStcKF49PVwpXEA8PSsKKwlcIGVuZD0rXCg9PVwpXEA9KworCVwgY29udGFpbmVkCisJXCBjb250YWlucz12YWxncmluZFBpZDAsdmFsZ3JpbmRQaWQxLHZhbGdyaW5kUGlkMix2YWxncmluZFBpZDMsdmFsZ3JpbmRQaWQ0LHZhbGdyaW5kUGlkNSx2YWxncmluZFBpZDYsdmFsZ3JpbmRQaWQ3LHZhbGdyaW5kUGlkOCx2YWxncmluZFBpZDkKKwlcIGtlZXBlbmQKKworc3luIG1hdGNoIHZhbGdyaW5kUGlkMCAiXGRcKzA9IiBjb250YWluZWQKK3N5biBtYXRjaCB2YWxncmluZFBpZDEgIlxkXCsxPSIgY29udGFpbmVkCitzeW4gbWF0Y2ggdmFsZ3JpbmRQaWQyICJcZFwrMj0iIGNvbnRhaW5lZAorc3luIG1hdGNoIHZhbGdyaW5kUGlkMyAiXGRcKzM9IiBjb250YWluZWQKK3N5biBtYXRjaCB2YWxncmluZFBpZDQgIlxkXCs0PSIgY29udGFpbmVkCitzeW4gbWF0Y2ggdmFsZ3JpbmRQaWQ1ICJcZFwrNT0iIGNvbnRhaW5lZAorc3luIG1hdGNoIHZhbGdyaW5kUGlkNiAiXGRcKzY9IiBjb250YWluZWQKK3N5biBtYXRjaCB2YWxncmluZFBpZDcgIlxkXCs3PSIgY29udGFpbmVkCitzeW4gbWF0Y2ggdmFsZ3JpbmRQaWQ4ICJcZFwrOD0iIGNvbnRhaW5lZAorc3luIG1hdGNoIHZhbGdyaW5kUGlkOSAiXGRcKzk9IiBjb250YWluZWQKKworc3luIHJlZ2lvbiB2YWxncmluZExpbmUKKwlcIHN0YXJ0PStcKF49PVxkXCs9PSBcKVxAPD0rCisJXCBlbmQ9KyQrCisJXCBrZWVwZW5kCisJXCBjb250YWluZWQKKwlcIGNvbnRhaW5zPXZhbGdyaW5kT3B0aW9ucyx2YWxncmluZE1zZyx2YWxncmluZExvYworCitzeW4gbWF0Y2ggdmFsZ3JpbmRPcHRpb25zICJbIF1cezN9LS4qJCIgY29udGFpbmVkCisKK3N5biBtYXRjaCB2YWxncmluZE1zZyAiXFMuKiQiIGNvbnRhaW5lZAorCVwgY29udGFpbnM9dmFsZ3JpbmRFcnJvcix2YWxncmluZE5vdGUsdmFsZ3JpbmRTdW1tYXJ5CitzeW4gbWF0Y2ggdmFsZ3JpbmRFcnJvciAiXChJbnZhbGlkXHxcZFwrIGVycm9yc1x8LiogZGVmaW5pdGVseSBsb3N0XCkuKiQiIGNvbnRhaW5lZAorc3luIG1hdGNoIHZhbGdyaW5kTm90ZSAiLipzdGlsbCByZWFjaGFibGUuKiIgY29udGFpbmVkCitzeW4gbWF0Y2ggdmFsZ3JpbmRTdW1tYXJ5ICIuKlNVTU1BUlk6IiBjb250YWluZWQKKworc3luIG1hdGNoIHZhbGdyaW5kTG9jICJcc1wrXChieVx8YXRcfEFkZHJlc3NcKS4qJCIgY29udGFpbmVkCisJXCBjb250YWlucz12YWxncmluZEF0LHZhbGdyaW5kQWRkcix2YWxncmluZEZ1bmMsdmFsZ3JpbmRCaW4sdmFsZ3JpbmRTcmMKK3N5biBtYXRjaCB2YWxncmluZEF0ICJhdFxzXEA9IiBjb250YWluZWQKK3N5biBtYXRjaCB2YWxncmluZEFkZHIgIlwoXFdcKVxAPD0weFx4XCsiIGNvbnRhaW5lZAorc3luIG1hdGNoIHZhbGdyaW5kRnVuYyAiXCg6IFwpXEA8PVx3XCsiIGNvbnRhaW5lZAorc3luIG1hdGNoIHZhbGdyaW5kQmluICJcKChcKHdpdGhcfFwpaW4gXClcQDw9XFNcK1woKVwpXEA9IiBjb250YWluZWQKK3N5biBtYXRjaCB2YWxncmluZFNyYyAiXCgoXClcQDw9Lio6XGRcK1woKVwpXEA9IiBjb250YWluZWQKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nCisKK2hpIGRlZiBsaW5rIHZhbGdyaW5kU3BlY0xpbmUJVHlwZQorImhpIGRlZiBsaW5rIHZhbGdyaW5kUmVnaW9uCVNwZWNpYWwKKworaGkgZGVmIGxpbmsgdmFsZ3JpbmRQaWQwCVNwZWNpYWwKK2hpIGRlZiBsaW5rIHZhbGdyaW5kUGlkMQlDb21tZW50CitoaSBkZWYgbGluayB2YWxncmluZFBpZDIJVHlwZQoraGkgZGVmIGxpbmsgdmFsZ3JpbmRQaWQzCUNvbnN0YW50CitoaSBkZWYgbGluayB2YWxncmluZFBpZDQJTnVtYmVyCitoaSBkZWYgbGluayB2YWxncmluZFBpZDUJSWRlbnRpZmllcgoraGkgZGVmIGxpbmsgdmFsZ3JpbmRQaWQ2CVN0YXRlbWVudAoraGkgZGVmIGxpbmsgdmFsZ3JpbmRQaWQ3CUVycm9yCitoaSBkZWYgbGluayB2YWxncmluZFBpZDgJTGluZU5yCitoaSBkZWYgbGluayB2YWxncmluZFBpZDkJTm9ybWFsCisiaGkgZGVmIGxpbmsgdmFsZ3JpbmRMaW5lCVNwZWNpYWwKKworaGkgZGVmIGxpbmsgdmFsZ3JpbmRPcHRpb25zCVR5cGUKKyJoaSBkZWYgbGluayB2YWxncmluZE1zZwlTcGVjaWFsCisiaGkgZGVmIGxpbmsgdmFsZ3JpbmRMb2MJU3BlY2lhbAorCitoaSBkZWYgbGluayB2YWxncmluZEVycm9yCVNwZWNpYWwKK2hpIGRlZiBsaW5rIHZhbGdyaW5kTm90ZQlDb21tZW50CitoaSBkZWYgbGluayB2YWxncmluZFN1bW1hcnkJVHlwZQorCitoaSBkZWYgbGluayB2YWxncmluZEF0CQlTcGVjaWFsCitoaSBkZWYgbGluayB2YWxncmluZEFkZHIJTnVtYmVyCitoaSBkZWYgbGluayB2YWxncmluZEZ1bmMJVHlwZQoraGkgZGVmIGxpbmsgdmFsZ3JpbmRCaW4JCUNvbW1lbnQKK2hpIGRlZiBsaW5rIHZhbGdyaW5kU3JjCQlTdGF0ZW1lbnQKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidmFsZ3JpbmQiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC92Yi52aW0gYi9ydW50aW1lL3N5bnRheC92Yi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwN2U3ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3ZiLnZpbQpAQCAtMCwwICsxLDI3MyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVZpc3VhbCBCYXNpYworIiBNYWludGFpbmVyOglUaW0gQ2hhc2UgPHZiLnZpbUB0aW0udGhlY2hhc2VzLmNvbT4KKyIgRm9ybWVyIE1haW50YWluZXI6CVJvYmVydCBNLiBDb3J0b3Bhc3NpIDxjb3J0b3BhckBtaW5kc3ByaW5nLmNvbT4KKyIJKHRyaWVkIG11bHRpcGxlIHRpbWVzIHRvIGNvbnRhY3QsIGJ1dCBlbWFpbCBib3VuY2VkKQorIiBMYXN0IENoYW5nZToJMjAwNCBNYXkgMjUKKyIgICAyMDA0IE1heSAzMCAgQWRkZWQgYSBmZXcga2V5d29yZHMKKworIiBUaGlzIHdhcyB0aHJvd24gdG9nZXRoZXIgYWZ0ZXIgc2VlaW5nIG51bWVyb3VzIHJlcXVlc3RzIG9uIHRoZQorIiBWSU0gYW5kIFZJTS1ERVYgbWFpbGluZyBsaXN0cy4gIEl0IGlzIGJ5IG5vIG1lYW5zIGNvbXBsZXRlLgorIiBTZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucyBhbmQgcmVxdWVzdHMgdG8gdGhlIG1haW50YWluZXIuCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisJc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKwlmaW5pc2gKK2VuZGlmCisKKyIgVkIgaXMgY2FzZSBpbnNlbnNpdGl2ZQorc3luIGNhc2UgaWdub3JlCisKK3N5biBrZXl3b3JkIHZiU3RhdGVtZW50IEFsaWFzIEFwcEFjdGl2YXRlIEFzIEJhc2UgQmVlcCBDYWxsIENhc2UKK3N5biBrZXl3b3JkIHZiU3RhdGVtZW50IENoRGlyIENoRHJpdmUgQ29uc3QgRGVjbGFyZSBEZWZCb29sIERlZkJ5dGUKK3N5biBrZXl3b3JkIHZiU3RhdGVtZW50IERlZkN1ciBEZWZEYXRlIERlZkRibCBEZWZEZWMgRGVmSW50CitzeW4ga2V5d29yZCB2YlN0YXRlbWVudCBEZWZMbmcgRGVmT2JqIERlZlNuZyBEZWZTdHIgRGVmdHlwZQorc3luIGtleXdvcmQgdmJTdGF0ZW1lbnQgRGVmVmFyIERlbGV0ZVNldHRpbmcgRGltIERvIEVhY2ggRWxzZQorc3luIGtleXdvcmQgdmJTdGF0ZW1lbnQgRWxzZUlmIEVuZCBFbnVtIEVyYXNlIEV2ZW50IEV4aXQgRXhwbGljaXQKK3N5biBrZXl3b3JkIHZiU3RhdGVtZW50IEZpbGVDb3B5IEZvciBGb3JFYWNoIEZ1bmN0aW9uIEdldCBHb1N1Ygorc3luIGtleXdvcmQgdmJTdGF0ZW1lbnQgR29UbyBJZiBJbXBsZW1lbnRzIEtpbGwgTGV0IExpYiBMaW5lSW5wdXQKK3N5biBrZXl3b3JkIHZiU3RhdGVtZW50IExvY2sgTG9vcCBMU2V0IE1rRGlyIE5hbWUgTmV4dCBPbkVycm9yIE9uCitzeW4ga2V5d29yZCB2YlN0YXRlbWVudCBPcHRpb24gUHJlc2VydmUgUHJpdmF0ZSBQcm9wZXJ0eSBQdWJsaWMgUHV0CitzeW4ga2V5d29yZCB2YlN0YXRlbWVudCBSYWlzZUV2ZW50IFJhbmRvbWl6ZSBSZURpbSBSZXNldCBSZXN1bWUKK3N5biBrZXl3b3JkIHZiU3RhdGVtZW50IFJldHVybiBSbURpciBSU2V0IFNhdmVQaWN0dXJlIFNhdmVTZXR0aW5nCitzeW4ga2V5d29yZCB2YlN0YXRlbWVudCBTZW5kS2V5cyBTZWxlY3QgU2V0QXR0ciBTdGF0aWMgU3RlcCBTdWIKK3N5biBrZXl3b3JkIHZiU3RhdGVtZW50IFRoZW4gVHlwZSBVbmxvY2sgVW50aWwgV2VuZCBXaGlsZSBXaWR0aAorc3luIGtleXdvcmQgdmJTdGF0ZW1lbnQgV2l0aCBXcml0ZQorCitzeW4ga2V5d29yZCB2YkZ1bmN0aW9uIEFicyBBcnJheSBBc2MgQXNjQiBBc2NXIEF0biBBdmcgQ0Jvb2wKK3N5biBrZXl3b3JkIHZiRnVuY3Rpb24gQ0J5dGUgQ0N1ciBDRGF0ZSBDRGJsIENkZWMgQ2hvb3NlIENocgorc3luIGtleXdvcmQgdmJGdW5jdGlvbiBDaHJCIENoclcgQ0ludCBDTG5nIENvbW1hbmQgQ29zIENvdW50CitzeW4ga2V5d29yZCB2YkZ1bmN0aW9uIENyZWF0ZU9iamVjdCBDU25nIENTdHIgQ3VyRGlyIENWYXIKK3N5biBrZXl3b3JkIHZiRnVuY3Rpb24gQ1ZEYXRlIENWRXJyIERhdGVBZGQgRGF0ZURpZmYgRGF0ZVBhcnQKK3N5biBrZXl3b3JkIHZiRnVuY3Rpb24gRGF0ZVNlcmlhbCBEYXRlVmFsdWUgRGF5IEREQiBEaXIKK3N5biBrZXl3b3JkIHZiRnVuY3Rpb24gRG9FdmVudHMgRW52aXJvbiBFT0YgRXJyb3IgRXhwIEZpbGVBdHRyCitzeW4ga2V5d29yZCB2YkZ1bmN0aW9uIEZpbGVEYXRlVGltZSBGaWxlTGVuIEZpeCBGb3JtYXQgRnJlZUZpbGUKK3N5biBrZXl3b3JkIHZiRnVuY3Rpb24gRlYgR2V0QWxsU3RyaW5ncyBHZXRBdHRyCitzeW4ga2V5d29yZCB2YkZ1bmN0aW9uIEdldEF1dG9TZXJ2ZXJTZXR0aW5ncyBHZXRPYmplY3QKK3N5biBrZXl3b3JkIHZiRnVuY3Rpb24gR2V0U2V0dGluZyBIZXggSG91ciBJSWYgSU1FU3RhdHVzIElucHV0CitzeW4ga2V5d29yZCB2YkZ1bmN0aW9uIElucHV0QiBJbnB1dEJveCBJblN0ciBJbnN0QiBJbnQgSVBtdAorc3luIGtleXdvcmQgdmJGdW5jdGlvbiBJc0FycmF5IElzRGF0ZSBJc0VtcHR5IElzRXJyb3IgSXNNaXNzaW5nCitzeW4ga2V5d29yZCB2YkZ1bmN0aW9uIElzTnVsbCBJc051bWVyaWMgSXNPYmplY3QgTEJvdW5kIExDYXNlCitzeW4ga2V5d29yZCB2YkZ1bmN0aW9uIExlZnQgTGVmdEIgTGVuIExlbkIgTG9hZFBpY3R1cmUgTG9jIExPRgorc3luIGtleXdvcmQgdmJGdW5jdGlvbiBMb2cgTFRyaW0gTWF4IE1pZCBNaWRCIE1pbiBNaW51dGUgTUlSUgorc3luIGtleXdvcmQgdmJGdW5jdGlvbiBNb250aCBNc2dCb3ggTm93IE5QZXIgTlBWIE9jdCBQYXJ0aXRpb24KK3N5biBrZXl3b3JkIHZiRnVuY3Rpb24gUG10IFBQbXQgUFYgUUJDb2xvciBSYXRlIFJHQiBSaWdodAorc3luIGtleXdvcmQgdmJGdW5jdGlvbiBSaWdodEIgUm5kIFJUcmltIFNlY29uZCBTZWVrIFNnbiBTaGVsbAorc3luIGtleXdvcmQgdmJGdW5jdGlvbiBTaW4gU0xOIFNwYWNlIFNwYyBTcXIgU3REZXYgU3REZXZQIFN0cgorc3luIGtleXdvcmQgdmJGdW5jdGlvbiBTdHJDb21wIFN0ckNvbnYgU3RyaW5nIFN3aXRjaCBTdW0gU1lECitzeW4ga2V5d29yZCB2YkZ1bmN0aW9uIFRhYiBUYW4gVGltZSBUaW1lciBUaW1lU2VyaWFsIFRpbWVWYWx1ZQorc3luIGtleXdvcmQgdmJGdW5jdGlvbiBUcmltIFR5cGVOYW1lIFVCb3VuZCBVQ2FzZSBWYWwgVmFyIFZhclAKK3N5biBrZXl3b3JkIHZiRnVuY3Rpb24gVmFyVHlwZSBXZWVrZGF5IFllYXIKKworc3luIGtleXdvcmQgdmJNZXRob2RzIEFjY2VwdCBBY3RpdmF0ZSBBZGQgQWRkQ3VzdG9tIEFkZEZpbGUKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBBZGRGcm9tRmlsZSBBZGRGcm9tVGVtcGxhdGUgQWRkSXRlbQorc3luIGtleXdvcmQgdmJNZXRob2RzIEFkZE5ldyBBZGRUb0FkZEluVG9vbGJhcgorc3luIGtleXdvcmQgdmJNZXRob2RzIEFkZFRvb2xib3hQcm9nSUQgQXBwZW5kIEFwcGVuZENodW5rCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgQXJyYW5nZSBBc3NlcnQgQXN5bmNSZWFkIEJhdGNoVXBkYXRlCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgQmVnaW5UcmFucyBCaW5kIENhbmNlbCBDYW5jZWxBc3luY1JlYWQKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBDYW5jZWxCYXRjaCBDYW5jZWxVcGRhdGUKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBDYW5Qcm9wZXJ0eUNoYW5nZSBDYXB0dXJlSW1hZ2UgQ2VsbFRleHQKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBDZWxsVmFsdWUgQ2lyY2xlIENsZWFyIENsZWFyRmllbGRzCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgQ2xlYXJTZWwgQ2xlYXJTZWxDb2xzIENsb25lIENsb3NlIENscworc3luIGtleXdvcmQgdmJNZXRob2RzIENvbENvbnRhaW5pbmcgQ29sdW1uU2l6ZSBDb21taXRUcmFucworc3luIGtleXdvcmQgdmJNZXRob2RzIENvbXBhY3REYXRhYmFzZSBDb21wb3NlIENvbm5lY3QgQ29weQorc3luIGtleXdvcmQgdmJNZXRob2RzIENvcHlRdWVyeURlZiBDcmVhdGVEYXRhYmFzZQorc3luIGtleXdvcmQgdmJNZXRob2RzIENyZWF0ZURyYWdJbWFnZSBDcmVhdGVFbWJlZCBDcmVhdGVGaWVsZAorc3luIGtleXdvcmQgdmJNZXRob2RzIENyZWF0ZUdyb3VwIENyZWF0ZUluZGV4IENyZWF0ZUxpbmsKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBDcmVhdGVQcmVwYXJlZFN0YXRlbWVudCBDcmVhdGVQcm9wZXJ5CitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgQ3JlYXRlUXVlcnkgQ3JlYXRlUXVlcnlEZWYKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBDcmVhdGVSZWxhdGlvbiBDcmVhdGVUYWJsZURlZiBDcmVhdGVVc2VyCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgQ3JlYXRlV29ya3NwYWNlIEN1c3RvbWl6ZSBEZWxldGUKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBEZWxldGVDb2x1bW5MYWJlbHMgRGVsZXRlQ29sdW1ucworc3luIGtleXdvcmQgdmJNZXRob2RzIERlbGV0ZVJvd0xhYmVscyBEZWxldGVSb3dzIERvVmVyYiBEcmFnCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgRHJhdyBFZGl0IEVkaXRDb3B5IEVkaXRQYXN0ZSBFbmREb2MKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBFbnN1cmVWaXNpYmxlIEVzdGFibGlzaENvbm5lY3Rpb24KK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBFeGVjdXRlIEV4dHJhY3RJY29uIEZldGNoIEZldGNoVmVyYnMKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBGaWxlcyBGaWxsQ2FjaGUgRmluZCBGaW5kRmlyc3QgRmluZEl0ZW0KK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBGaW5kTGFzdCBGaW5kTmV4dCBGaW5kUHJldmlvdXMgRm9yd2FyZAorc3luIGtleXdvcmQgdmJNZXRob2RzIEdldEJvb2ttYXJrIEdldENodW5rIEdldENsaXBTdHJpbmcKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBHZXREYXRhIEdldEZpcnN0VmlzaWJsZSBHZXRGb3JtYXQKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBHZXRIZWFkZXIgR2V0TGluZUZyb21DaGFyIEdldE51bVRpY2tzCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgR2V0Um93cyBHZXRTZWxlY3RlZFBhcnQgR2V0VGV4dAorc3luIGtleXdvcmQgdmJNZXRob2RzIEdldFZpc2libGVDb3VudCBHb0JhY2sgR29Gb3J3YXJkIEhpZGUKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBIaXRUZXN0IEhvbGRGaWVsZHMgSWRsZSBJbml0aWFsaXplTGFiZWxzCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgSW5zZXJ0Q29sdW1uTGFiZWxzIEluc2VydENvbHVtbnMKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBJbnNlcnRPYmpEbGcgSW5zZXJ0Um93TGFiZWxzIEluc2VydFJvd3MKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBJdGVtIEtpbGxEb2MgTGF5b3V0IExpbmUgTGlua0V4ZWN1dGUKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBMaW5rUG9rZSBMaW5rUmVxdWVzdCBMaW5rU2VuZCBMaXN0ZW4KK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBMb2FkRmlsZSBMb2FkUmVzRGF0YSBMb2FkUmVzUGljdHVyZQorc3luIGtleXdvcmQgdmJNZXRob2RzIExvYWRSZXNTdHJpbmcgTG9nRXZlbnQgTWFrZUNvbXBpbGVGaWxlCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgTWFrZVJlcGxpY2EgTW9yZVJlc3VsdHMgTW92ZSBNb3ZlRGF0YQorc3luIGtleXdvcmQgdmJNZXRob2RzIE1vdmVGaXJzdCBNb3ZlTGFzdCBNb3ZlTmV4dCBNb3ZlUHJldmlvdXMKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBOYXZpZ2F0ZVRvIE5ld1BhZ2UgTmV3UGFzc3dvcmQKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBOZXh0UmVjb3Jkc2V0IE9MRURyYWcgT25BZGRpbnNVcGRhdGUKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBPbkNvbm5lY3Rpb24gT25EaXNjb25uZWN0aW9uCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgT25TdGFydHVwQ29tcGxldGUgT3BlbiBPcGVuQ29ubmVjdGlvbgorc3luIGtleXdvcmQgdmJNZXRob2RzIE9wZW5EYXRhYmFzZSBPcGVuUXVlcnlEZWYgT3BlblJlY29yZHNldAorc3luIGtleXdvcmQgdmJNZXRob2RzIE9wZW5SZXN1bHRzZXQgT3BlblVSTCBPdmVybGF5CitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgUGFpbnRQaWN0dXJlIFBhc3RlIFBhc3RTcGVjaWFsRGxnCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgUGVla0RhdGEgUGxheSBQb2ludCBQb3B1bGF0ZVBhcnRpYWwKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBQb3B1cE1lbnUgUHJpbnQgUHJpbnRGb3JtCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgUHJvcGVydHlDaGFuZ2VkIFBTZXQgUXVpdCBSYWlzZQorc3luIGtleXdvcmQgdmJNZXRob2RzIFJhbmRvbURhdGFGaWxsIFJhbmRvbUZpbGxDb2x1bW5zCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgUmFuZG9tRmlsbFJvd3MgcmRvQ3JlYXRlRW52aXJvbm1lbnQKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyByZG9SZWdpc3RlckRhdGFTb3VyY2UgUmVhZEZyb21GaWxlCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgUmVhZFByb3BlcnR5IFJlYmluZCBSZUZpbGwgUmVmcmVzaAorc3luIGtleXdvcmQgdmJNZXRob2RzIFJlZnJlc2hMaW5rIFJlZ2lzdGVyRGF0YWJhc2UgUmVsb2FkCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgUmVtb3ZlIFJlbW92ZUFkZEluRnJvbVRvb2xiYXIgUmVtb3ZlSXRlbQorc3luIGtleXdvcmQgdmJNZXRob2RzIFJlbmRlciBSZXBhaXJEYXRhYmFzZSBSZXBseSBSZXBseUFsbAorc3luIGtleXdvcmQgdmJNZXRob2RzIFJlcXVlcnkgUmVzZXRDdXN0b20gUmVzZXRDdXN0b21MYWJlbAorc3luIGtleXdvcmQgdmJNZXRob2RzIFJlc29sdmVOYW1lIFJlc3RvcmVUb29sYmFyIFJlc3luYworc3luIGtleXdvcmQgdmJNZXRob2RzIFJvbGxiYWNrIFJvbGxiYWNrVHJhbnMgUm93Qm9va21hcmsKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBSb3dDb250YWluaW5nIFJvd1RvcCBTYXZlIFNhdmVBcworc3luIGtleXdvcmQgdmJNZXRob2RzIFNhdmVGaWxlIFNhdmVUb0ZpbGUgU2F2ZVRvb2xiYXIKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBTYXZlVG9PbGUxRmlsZSBTY2FsZSBTY2FsZVggU2NhbGVZCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgU2Nyb2xsIFNlbGVjdEFsbCBTZWxlY3RQYXJ0IFNlbFByaW50CitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgU2VuZCBTZW5kRGF0YSBTZXQgU2V0QXV0b1NlcnZlclNldHRpbmdzCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgU2V0RGF0YSBTZXRGb2N1cyBTZXRPcHRpb24gU2V0U2l6ZQorc3luIGtleXdvcmQgdmJNZXRob2RzIFNldFRleHQgU2V0Vmlld3BvcnQgU2hvdyBTaG93Q29sb3IKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBTaG93Rm9udCBTaG93SGVscCBTaG93T3BlbiBTaG93UHJpbnRlcgorc3luIGtleXdvcmQgdmJNZXRob2RzIFNob3dTYXZlIFNob3dXaGF0c1RoaXMgU2lnbk9mZiBTaWduT24KK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBTaXplIFNwYW4gU3BsaXRDb250YWluaW5nIFN0YXJ0TGFiZWxFZGl0CitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgU3RhcnRMb2dnaW5nIFN0b3AgU3luY2hyb25pemUgVGV4dEhlaWdodAorc3luIGtleXdvcmQgdmJNZXRob2RzIFRleHRXaWR0aCBUb0RlZmF1bHRzIFR3aXBzVG9DaGFydFBhcnQKK3N5biBrZXl3b3JkIHZiTWV0aG9kcyBUeXBlQnlDaGFydFR5cGUgVXBkYXRlIFVwZGF0ZUNvbnRyb2xzCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgVXBkYXRlUmVjb3JkIFVwZGF0ZVJvdyBVcHRvCitzeW4ga2V5d29yZCB2Yk1ldGhvZHMgV2hhdHNUaGlzTW9kZSBXcml0ZVByb3BlcnR5IFpPcmRlcgorCitzeW4ga2V5d29yZCB2YkV2ZW50cyBBY2Nlc3NLZXlQcmVzcyBBZnRlckFkZEZpbGUKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEFmdGVyQ2hhbmdlRmlsZU5hbWUgQWZ0ZXJDbG9zZUZpbGUKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEFmdGVyQ29sRWRpdCBBZnRlckNvbFVwZGF0ZSBBZnRlckRlbGV0ZQorc3luIGtleXdvcmQgdmJFdmVudHMgQWZ0ZXJJbnNlcnQgQWZ0ZXJMYWJlbEVkaXQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEFmdGVyUmVtb3ZlRmlsZSBBZnRlclVwZGF0ZQorc3luIGtleXdvcmQgdmJFdmVudHMgQWZ0ZXJXcml0ZUZpbGUgQW1iaWVuQ2hhbmdlZAorc3luIGtleXdvcmQgdmJFdmVudHMgQXBwbHlDaGFuZ2VzIEFzc29jaWF0ZSBBc3luY1JlYWRDb21wbGV0ZQorc3luIGtleXdvcmQgdmJFdmVudHMgQXhpc0FjdGl2YXRlZCBBeGlzTGFiZWxBY3RpdmF0ZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEF4aXNMYWJlbFNlbGVjdGVkIEF4aXNMYWJlbFVwZGF0ZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEF4aXNTZWxlY3RlZCBBeGlzVGl0bGVBY3RpdmF0ZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEF4aXNUaXRsZVNlbGVjdGVkIEF4aXNUaXRsZVVwZGF0ZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEF4aXNVcGRhdGVkIEJlZm9yZUNsaWNrIEJlZm9yZUNvbEVkaXQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEJlZm9yZUNvbFVwZGF0ZSBCZWZvcmVDb25uZWN0CitzeW4ga2V5d29yZCB2YkV2ZW50cyBCZWZvcmVEZWxldGUgQmVmb3JlSW5zZXJ0CitzeW4ga2V5d29yZCB2YkV2ZW50cyBCZWZvcmVMYWJlbEVkaXQgQmVmb3JlTG9hZEZpbGUKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEJlZm9yZVVwZGF0ZSBCdXR0b25DbGljayBCdXR0b25Db21wbGV0ZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEJ1dHRvbkdvdEZvY3VzIEJ1dHRvbkxvc3RGb2N1cyBDaGFuZ2UKK3N5biBrZXl3b3JkIHZiRXZlbnRzIENoYXJ0QWN0aXZhdGVkIENoYXJ0U2VsZWN0ZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIENoYXJ0VXBkYXRlZCBDbGljayBDb2xFZGl0IENvbGxhcHNlCitzeW4ga2V5d29yZCB2YkV2ZW50cyBDb2xSZXNpemUgQ29sdW1uQ2xpY2sgQ29tcGFyZQorc3luIGtleXdvcmQgdmJFdmVudHMgQ29uZmlnQ2hhZ2VDYW5jZWxsZWQgQ29uZmlnQ2hhbmdlZAorc3luIGtleXdvcmQgdmJFdmVudHMgQ29ubmVjdGlvblJlcXVlc3QgRGF0YUFycml2YWwKK3N5biBrZXl3b3JkIHZiRXZlbnRzIERhdGFDaGFuZ2VkIERhdGFVcGRhdGVkIERibENsaWNrCitzeW4ga2V5d29yZCB2YkV2ZW50cyBEZWFjdGl2YXRlIERldmljZUFycml2YWwKK3N5biBrZXl3b3JkIHZiRXZlbnRzIERldmljZU90aGVyRXZlbnQgRGV2aWNlUXVlcnlSZW1vdmUKK3N5biBrZXl3b3JkIHZiRXZlbnRzIERldmljZVF1ZXJ5UmVtb3ZlRmFpbGVkCitzeW4ga2V5d29yZCB2YkV2ZW50cyBEZXZpY2VSZW1vdmVDb21wbGV0ZSBEZXZpY2VSZW1vdmVQZW5kaW5nCitzeW4ga2V5d29yZCB2YkV2ZW50cyBEZXZNb2RlQ2hhbmdlIERpc2Nvbm5lY3QgRGlzcGxheUNoYW5nZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIERpc3NvY2lhdGUgRG9HZXROZXdGaWxlTmFtZSBEb25lCitzeW4ga2V5d29yZCB2YkV2ZW50cyBEb25lUGFpbnRpbmcgRG93bkNsaWNrIERyYWdEcm9wIERyYWdPdmVyCitzeW4ga2V5d29yZCB2YkV2ZW50cyBEcm9wRG93biBFZGl0UHJvcGVydHkgRW50ZXJDZWxsCitzeW4ga2V5d29yZCB2YkV2ZW50cyBFbnRlckZvY3VzIEV4aXRGb2N1cyBFeHBhbmQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEZvb3Rub3RlQWN0aXZhdGVkIEZvb3Rub3RlU2VsZWN0ZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEZvb3Rub3RlVXBkYXRlZCBHb3RGb2N1cyBIZWFkQ2xpY2sKK3N5biBrZXl3b3JkIHZiRXZlbnRzIEluZm9NZXNzYWdlIEluaXRpYWxpemUgSW5pUHJvcGVydGllcworc3luIGtleXdvcmQgdmJFdmVudHMgSXRlbUFjdGl2YXRlZCBJdGVtQWRkZWQgSXRlbUNoZWNrCitzeW4ga2V5d29yZCB2YkV2ZW50cyBJdGVtQ2xpY2sgSXRlbVJlbG9hZGVkIEl0ZW1SZW1vdmVkCitzeW4ga2V5d29yZCB2YkV2ZW50cyBJdGVtUmVuYW1lZCBJdGVtU2VsZXRlY3RlZCBLZXlEb3duCitzeW4ga2V5d29yZCB2YkV2ZW50cyBLZXlQcmVzcyBLZXlVcCBMZWF2ZUNlbGwgTGVnZW5kQWN0aXZhdGVkCitzeW4ga2V5d29yZCB2YkV2ZW50cyBMZWdlbmRTZWxlY3RlZCBMZWdlbmRVcGRhdGVkIExpbmtDbG9zZQorc3luIGtleXdvcmQgdmJFdmVudHMgTGlua0Vycm9yIExpbmtOb3RpZnkgTGlua09wZW4gTG9hZAorc3luIGtleXdvcmQgdmJFdmVudHMgTG9zdEZvY3VzIE1vdXNlRG93biBNb3VzZU1vdmUgTW91c2VVcAorc3luIGtleXdvcmQgdmJFdmVudHMgTm9kZUNsaWNrIE9iamVjdE1vdmUgT0xFQ29tcGxldGVEcmFnCitzeW4ga2V5d29yZCB2YkV2ZW50cyBPTEVEcmFnRHJvcCBPTEVEcmFnT3ZlciBPTEVHaXZlRmVlZGJhY2sKK3N5biBrZXl3b3JkIHZiRXZlbnRzIE9MRVNldERhdGEgT0xFU3RhcnREcmFnIE9uQWRkTmV3IE9uQ29tbQorc3luIGtleXdvcmQgdmJFdmVudHMgUGFpbnQgUGFuZWxDbGljayBQYW5lbERibENsaWNrCitzeW4ga2V5d29yZCB2YkV2ZW50cyBQYXRoQ2hhbmdlIFBhdHRlcm5DaGFuZ2UgUGxvdEFjdGl2YXRlZAorc3luIGtleXdvcmQgdmJFdmVudHMgUGxvdFNlbGVjdGVkIFBsb3RVcGRhdGVkIFBvaW50QWN0aXZhdGVkCitzeW4ga2V5d29yZCB2YkV2ZW50cyBQb2ludExhYmVsQWN0aXZhdGVkIFBvaW50TGFiZWxTZWxlY3RlZAorc3luIGtleXdvcmQgdmJFdmVudHMgUG9pbnRMYWJlbFVwZGF0ZWQgUG9pbnRTZWxlY3RlZAorc3luIGtleXdvcmQgdmJFdmVudHMgUG9pbnRVcGRhdGVkIFBvd2VyUXVlcnlTdXNwZW5kCitzeW4ga2V5d29yZCB2YkV2ZW50cyBQb3dlclJlc3VtZSBQb3dlclN0YXR1c0NoYW5nZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIFBvd2VyU3VzcGVuZCBRdWVyeUNoYW5nZUNvbmZpZworc3luIGtleXdvcmQgdmJFdmVudHMgUXVlcnlDb21wbGV0ZSBRdWVyeUNvbXBsZXRlZAorc3luIGtleXdvcmQgdmJFdmVudHMgUXVlcnlUaW1lb3V0IFF1ZXJ5VW5sb2FkIFJlYWRQcm9wZXJ0aWVzCitzeW4ga2V5d29yZCB2YkV2ZW50cyBSZXBvc2l0aW9uIFJlcXVlc3RDaGFuZ2VGaWxlTmFtZQorc3luIGtleXdvcmQgdmJFdmVudHMgUmVxdWVzdFdyaXRlRmlsZSBSZXNpemUgUmVzdWx0c0NoYW5nZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIFJvd0NvbENoYW5nZSBSb3dDdXJyZW5jeUNoYW5nZSBSb3dSZXNpemUKK3N5biBrZXl3b3JkIHZiRXZlbnRzIFJvd1N0YXR1c0NoYW5nZWQgU2VsQ2hhbmdlCitzeW4ga2V5d29yZCB2YkV2ZW50cyBTZWxlY3Rpb25DaGFuZ2VkIFNlbmRDb21wbGV0ZQorc3luIGtleXdvcmQgdmJFdmVudHMgU2VuZFByb2dyZXNzIFNlcmllc0FjdGl2YXRlZAorc3luIGtleXdvcmQgdmJFdmVudHMgU2VyaWVzU2VsZWN0ZWQgU2VyaWVzVXBkYXRlZAorc3luIGtleXdvcmQgdmJFdmVudHMgU2V0dGluZ0NoYW5nZWQgU3BsaXRDaGFuZ2UgU3RhdGVDaGFuZ2VkCitzeW4ga2V5d29yZCB2YkV2ZW50cyBTdGF0dXNVcGRhdGUgU3lzQ29sb3JzQ2hhbmdlZCBUZXJtaW5hdGUKK3N5biBrZXl3b3JkIHZiRXZlbnRzIFRpbWVDaGFuZ2VkIFRpdGxlQWN0aXZhdGVkIFRpdGxlU2VsZWN0ZWQKK3N5biBrZXl3b3JkIHZiRXZlbnRzIFRpdGxlQWN0aXZhdGVkIFVuYm91bmRBZGREYXRhCitzeW4ga2V5d29yZCB2YkV2ZW50cyBVbmJvdW5kRGVsZXRlUm93CitzeW4ga2V5d29yZCB2YkV2ZW50cyBVbmJvdW5kR2V0UmVsYXRpdmVCb29rbWFyaworc3luIGtleXdvcmQgdmJFdmVudHMgVW5ib3VuZFJlYWREYXRhIFVuYm91bmRXcml0ZURhdGEgVW5sb2FkCitzeW4ga2V5d29yZCB2YkV2ZW50cyBVcENsaWNrIFVwZGF0ZWQgVmFsaWRhdGUgVmFsaWRhdGlvbkVycm9yCitzeW4ga2V5d29yZCB2YkV2ZW50cyBXaWxsQXNzb2NpYXRlIFdpbGxDaGFuZ2VEYXRhCitzeW4ga2V5d29yZCB2YkV2ZW50cyBXaWxsRGlzc29jaWF0ZSBXaWxsRXhlY3V0ZQorc3luIGtleXdvcmQgdmJFdmVudHMgV2lsbFVwZGF0ZVJvd3MgV3JpdGVQcm9wZXJ0aWVzCisKK3N5biBrZXl3b3JkIHZiVHlwZXMgQm9vbGVhbiBCeXRlIEN1cnJlbmN5IERhdGUgRGVjaW1hbAorc3luIGtleXdvcmQgdmJUeXBlcyBEb3VibGUgRW1wdHkgSW50ZWdlciBMb25nIFNpbmdsZSBTdHJpbmcKKworc3luIG1hdGNoIHZiT3BlcmF0b3IgIlsoKSsuLFwtLyo9Jl0iCitzeW4gbWF0Y2ggdmJPcGVyYXRvciAiWzw+XT1cPSIKK3N5biBtYXRjaCB2Yk9wZXJhdG9yICI8PiIKK3N5biBtYXRjaCB2Yk9wZXJhdG9yICJcc1wrXyQiCitzeW4ga2V5d29yZCB2Yk9wZXJhdG9yIEFuZCBPciBOb3QgWG9yIE1vZCBJbiBJcyBJbXAgRXF2CitzeW4ga2V5d29yZCB2Yk9wZXJhdG9yIFRvIEJ5VmFsIEJ5UmVmCitzeW4ga2V5d29yZCB2YkNvbnN0IFRydWUgRmFsc2UgTnVsbCBOb3RoaW5nCisKK3N5biBrZXl3b3JkIHZiVG9kbyBjb250YWluZWQgVE9ETworCisiaW50ZWdlciBudW1iZXIsIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlciB3aXRob3V0IGEgZG90Lgorc3luIG1hdGNoIHZiTnVtYmVyICJcPFxkXCtcPiIKKyJmbG9hdGluZyBwb2ludCBudW1iZXIsIHdpdGggZG90CitzeW4gbWF0Y2ggdmJOdW1iZXIgIlw8XGRcK1wuXGQqXD4iCisiZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZG90CitzeW4gbWF0Y2ggdmJOdW1iZXIgIlwuXGRcK1w+IgorCisiIFN0cmluZyBhbmQgQ2hhcmFjdGVyIGNvbnRzdGFudHMKK3N5biByZWdpb24gdmJTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisKK3N5biByZWdpb24gdmJDb21tZW50IHN0YXJ0PSJcPFJFTVw+IiBlbmQ9IiQiIGNvbnRhaW5zPXZiVG9kbworc3luIHJlZ2lvbiB2YkNvbW1lbnQgc3RhcnQ9IiciIGVuZD0iJCIgY29udGFpbnM9dmJUb2RvCitzeW4gcmVnaW9uIHZiTGluZU51bWJlcglzdGFydD0iXlxkIiBlbmQ9IlxzIgorc3luIG1hdGNoIHZiVHlwZVNwZWNpZmllciAiW2EtekEtWjAtOV1bXCQlJiEjXSJtcz1zKzEKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfdmJfc3ludGF4X2luaXRzIikKKwlpZiB2ZXJzaW9uIDwgNTA4CisJCWxldCBkaWRfdmJfc3ludGF4X2luaXRzID0gMQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorCWVsc2UKKwkJY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisJZW5kaWYKKworCUhpTGluayB2YkxpbmVOdW1iZXIJQ29tbWVudAorCUhpTGluayB2Yk51bWJlcgkJTnVtYmVyCisJSGlMaW5rIHZiQ29uc3QJCUNvbnN0YW50CisJSGlMaW5rIHZiRXJyb3IJCUVycm9yCisJSGlMaW5rIHZiU3RhdGVtZW50CVN0YXRlbWVudAorCUhpTGluayB2YlN0cmluZwkJU3RyaW5nCisJSGlMaW5rIHZiQ29tbWVudAlDb21tZW50CisJSGlMaW5rIHZiVG9kbwkJVG9kbworCUhpTGluayB2YkZ1bmN0aW9uCUlkZW50aWZpZXIKKwlIaUxpbmsgdmJNZXRob2RzCVByZVByb2MKKwlIaUxpbmsgdmJFdmVudHMJCVNwZWNpYWwKKwlIaUxpbmsgdmJUeXBlU3BlY2lmaWVyCVR5cGUKKwlIaUxpbmsgdmJUeXBlcwkJVHlwZQorCUhpTGluayB2Yk9wZXJhdG9yCU9wZXJhdG9yCisKKwlkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidmIiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC92ZXJpbG9nLnZpbSBiL3J1bnRpbWUvc3ludGF4L3Zlcmlsb2cudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDE3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC92ZXJpbG9nLnZpbQpAQCAtMCwwICsxLDEzNCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVZlcmlsb2cKKyIgTWFpbnRhaW5lcjoJTXVuIEpvaGwgPG11bl9qb2hsQHNpZXJyYWxvZ2ljLmNvbT4KKyIgTGFzdCBVcGRhdGU6ICBUdWUgTm92ICA0IDA5OjM5OjQwIFBTVCAyMDAzCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgZmluaXNoCitlbmRpZgorCisiIFNldCB0aGUgbG9jYWwgdmFsdWUgb2YgdGhlICdpc2tleXdvcmQnIG9wdGlvbgoraWYgdmVyc2lvbiA+PSA2MDAKKyAgIHNldGxvY2FsIGlza2V5d29yZD1ALDQ4LTU3LF8sMTkyLTI1NQorZWxzZQorICAgc2V0IGlza2V5d29yZD1ALDQ4LTU3LF8sMTkyLTI1NQorZW5kaWYKKworIiBBIGJ1bmNoIG9mIHVzZWZ1bCBWZXJpbG9nIGtleXdvcmRzCisKK3N5biBrZXl3b3JkIHZlcmlsb2dTdGF0ZW1lbnQgICBhbHdheXMgYW5kIGFzc2lnbiBhdXRvbWF0aWMgYnVmCitzeW4ga2V5d29yZCB2ZXJpbG9nU3RhdGVtZW50ICAgYnVmaWYwIGJ1ZmlmMSBjZWxsIGNtb3MKK3N5biBrZXl3b3JkIHZlcmlsb2dTdGF0ZW1lbnQgICBjb25maWcgZGVhc3NpZ24gZGVmcGFyYW0gZGVzaWduCitzeW4ga2V5d29yZCB2ZXJpbG9nU3RhdGVtZW50ICAgZGlzYWJsZSBlZGdlIGVuZGNvbmZpZworc3luIGtleXdvcmQgdmVyaWxvZ1N0YXRlbWVudCAgIGVuZGZ1bmN0aW9uIGVuZGdlbmVyYXRlIGVuZG1vZHVsZQorc3luIGtleXdvcmQgdmVyaWxvZ1N0YXRlbWVudCAgIGVuZHByaW1pdGl2ZSBlbmRzcGVjaWZ5IGVuZHRhYmxlIGVuZHRhc2sKK3N5biBrZXl3b3JkIHZlcmlsb2dTdGF0ZW1lbnQgICBldmVudCBmb3JjZSBmdW5jdGlvbgorc3luIGtleXdvcmQgdmVyaWxvZ1N0YXRlbWVudCAgIGdlbmVyYXRlIGdlbnZhciBoaWdoejAgaGlnaHoxIGlmbm9uZQorc3luIGtleXdvcmQgdmVyaWxvZ1N0YXRlbWVudCAgIGluY2RpciBpbmNsdWRlIGluaXRpYWwgaW5vdXQgaW5wdXQKK3N5biBrZXl3b3JkIHZlcmlsb2dTdGF0ZW1lbnQgICBpbnN0YW5jZSBpbnRlZ2VyIGxhcmdlIGxpYmxpc3QKK3N5biBrZXl3b3JkIHZlcmlsb2dTdGF0ZW1lbnQgICBsaWJyYXJ5IGxvY2FscGFyYW0gbWFjcm9tb2R1bGUgbWVkaXVtCitzeW4ga2V5d29yZCB2ZXJpbG9nU3RhdGVtZW50ICAgbW9kdWxlIG5hbmQgbmVnZWRnZSBubW9zIG5vcgorc3luIGtleXdvcmQgdmVyaWxvZ1N0YXRlbWVudCAgIG5vc2hvd2NhbmNlbGxlZCBub3Qgbm90aWYwIG5vdGlmMSBvcgorc3luIGtleXdvcmQgdmVyaWxvZ1N0YXRlbWVudCAgIG91dHB1dCBwYXJhbWV0ZXIgcG1vcyBwb3NlZGdlIHByaW1pdGl2ZQorc3luIGtleXdvcmQgdmVyaWxvZ1N0YXRlbWVudCAgIHB1bGwwIHB1bGwxIHB1bGxkb3duIHB1bGx1cAorc3luIGtleXdvcmQgdmVyaWxvZ1N0YXRlbWVudCAgIHB1bHNlc3R5bGVfb25ldmVudCBwdWxzZXN0eWxlX29uZGV0ZWN0CitzeW4ga2V5d29yZCB2ZXJpbG9nU3RhdGVtZW50ICAgcmNtb3MgcmVhbCByZWFsdGltZSByZWcgcmVsZWFzZQorc3luIGtleXdvcmQgdmVyaWxvZ1N0YXRlbWVudCAgIHJubW9zIHJwbW9zIHJ0cmFuIHJ0cmFuaWYwIHJ0cmFuaWYxCitzeW4ga2V5d29yZCB2ZXJpbG9nU3RhdGVtZW50ICAgc2NhbGFyZWQgc2hvd2NhbmNlbGxlZCBzaWduZWQgc21hbGwKK3N5biBrZXl3b3JkIHZlcmlsb2dTdGF0ZW1lbnQgICBzcGVjaWZ5IHNwZWNwYXJhbSBzdHJvbmcwIHN0cm9uZzEKK3N5biBrZXl3b3JkIHZlcmlsb2dTdGF0ZW1lbnQgICBzdXBwbHkwIHN1cHBseTEgdGFibGUgdGFzayB0aW1lIHRyYW4KK3N5biBrZXl3b3JkIHZlcmlsb2dTdGF0ZW1lbnQgICB0cmFuaWYwIHRyYW5pZjEgdHJpIHRyaTAgdHJpMSB0cmlhbmQKK3N5biBrZXl3b3JkIHZlcmlsb2dTdGF0ZW1lbnQgICB0cmlvciB0cmlyZWcgdW5zaWduZWQgdXNlIHZlY3RvcmVkIHdhaXQKK3N5biBrZXl3b3JkIHZlcmlsb2dTdGF0ZW1lbnQgICB3YW5kIHdlYWswIHdlYWsxIHdpcmUgd29yIHhub3IgeG9yCitzeW4ga2V5d29yZCB2ZXJpbG9nTGFiZWwgICAgICAgYmVnaW4gZW5kIGZvcmsgam9pbgorc3luIGtleXdvcmQgdmVyaWxvZ0NvbmRpdGlvbmFsIGlmIGVsc2UgY2FzZSBjYXNleCBjYXNleiBkZWZhdWx0IGVuZGNhc2UKK3N5biBrZXl3b3JkIHZlcmlsb2dSZXBlYXQgICAgICBmb3JldmVyIHJlcGVhdCB3aGlsZSBmb3IKKworc3luIGtleXdvcmQgdmVyaWxvZ1RvZG8gY29udGFpbmVkIFRPRE8KKworc3luIG1hdGNoICAgdmVyaWxvZ09wZXJhdG9yICJbJnx+PjwhKSgqIyVAKy89Pzo7fXssLlxeXC1cW1xdXSIKKworc3luIHJlZ2lvbiAgdmVyaWxvZ0NvbW1lbnQgc3RhcnQ9Ii9cKiIgZW5kPSJcKi8iIGNvbnRhaW5zPXZlcmlsb2dUb2RvCitzeW4gbWF0Y2ggICB2ZXJpbG9nQ29tbWVudCAiLy8uKiIgY29udGFpbnM9dmVyaWxvZ1RvZG8KKworInN5biBtYXRjaCAgIHZlcmlsb2dHbG9iYWwgImBbYS16QS1aMC05X11cK1w+Igorc3luIG1hdGNoIHZlcmlsb2dHbG9iYWwgImBjZWxsZGVmaW5lIgorc3luIG1hdGNoIHZlcmlsb2dHbG9iYWwgImBkZWZhdWx0X25ldHR5cGUiCitzeW4gbWF0Y2ggdmVyaWxvZ0dsb2JhbCAiYGRlZmluZSIKK3N5biBtYXRjaCB2ZXJpbG9nR2xvYmFsICJgZWxzZSIKK3N5biBtYXRjaCB2ZXJpbG9nR2xvYmFsICJgZWxzaWYiCitzeW4gbWF0Y2ggdmVyaWxvZ0dsb2JhbCAiYGVuZGNlbGxkZWZpbmUiCitzeW4gbWF0Y2ggdmVyaWxvZ0dsb2JhbCAiYGVuZGlmIgorc3luIG1hdGNoIHZlcmlsb2dHbG9iYWwgImBpZmRlZiIKK3N5biBtYXRjaCB2ZXJpbG9nR2xvYmFsICJgaWZuZGVmIgorc3luIG1hdGNoIHZlcmlsb2dHbG9iYWwgImBpbmNsdWRlIgorc3luIG1hdGNoIHZlcmlsb2dHbG9iYWwgImBsaW5lIgorc3luIG1hdGNoIHZlcmlsb2dHbG9iYWwgImBub3VuY29ubmVjdGVkX2RyaXZlIgorc3luIG1hdGNoIHZlcmlsb2dHbG9iYWwgImByZXNldGFsbCIKK3N5biBtYXRjaCB2ZXJpbG9nR2xvYmFsICJgdGltZXNjYWxlIgorc3luIG1hdGNoIHZlcmlsb2dHbG9iYWwgImB1bmNvbm5lY3RlZF9kcml2ZSIKK3N5biBtYXRjaCB2ZXJpbG9nR2xvYmFsICJgdW5kZWYiCitzeW4gbWF0Y2ggICB2ZXJpbG9nR2xvYmFsICIkW2EtekEtWjAtOV9dXCtcPiIKKworc3luIG1hdGNoICAgdmVyaWxvZ0NvbnN0YW50ICJcPFtBLVpdW0EtWjAtOV9dXCtcPiIKKworc3luIG1hdGNoICAgdmVyaWxvZ051bWJlciAiXChcPFxkXCtcfFwpJ1tiQl1ccypbMC0xX3hYelo/XVwrXD4iCitzeW4gbWF0Y2ggICB2ZXJpbG9nTnVtYmVyICJcKFw8XGRcK1x8XCknW29PXVxzKlswLTdfeFh6Wj9dXCtcPiIKK3N5biBtYXRjaCAgIHZlcmlsb2dOdW1iZXIgIlwoXDxcZFwrXHxcKSdbZERdXHMqWzAtOV94WHpaP11cK1w+Igorc3luIG1hdGNoICAgdmVyaWxvZ051bWJlciAiXChcPFxkXCtcfFwpJ1toSF1ccypbMC05YS1mQS1GX3hYelo/XVwrXD4iCitzeW4gbWF0Y2ggICB2ZXJpbG9nTnVtYmVyICJcPFsrLV1cPVswLTlfXVwrXChcLlswLTlfXSpcfFwpXChlWzAtOV9dKlx8XClcPiIKKworc3luIHJlZ2lvbiAgdmVyaWxvZ1N0cmluZyBzdGFydD0rIisgc2tpcD0rXFwiKyBlbmQ9KyIrIGNvbnRhaW5zPXZlcmlsb2dFc2NhcGUKK3N5biBtYXRjaCAgIHZlcmlsb2dFc2NhcGUgK1xcW250IlxcXSsgY29udGFpbmVkCitzeW4gbWF0Y2ggICB2ZXJpbG9nRXNjYXBlICJcXFxvXG9cPVxvXD0iIGNvbnRhaW5lZAorCisiIERpcmVjdGl2ZXMKK3N5biBtYXRjaCAgIHZlcmlsb2dEaXJlY3RpdmUgICAiLy9ccypzeW5vcHN5c1w+LiokIgorc3luIHJlZ2lvbiAgdmVyaWxvZ0RpcmVjdGl2ZSAgIHN0YXJ0PSIvXCpccypzeW5vcHN5c1w+IiBlbmQ9IlwqLyIKK3N5biByZWdpb24gIHZlcmlsb2dEaXJlY3RpdmUgICBzdGFydD0iLy9ccypzeW5vcHN5cyBkY19zY3JpcHRfYmVnaW5cPiIgZW5kPSIvL1xzKnN5bm9wc3lzIGRjX3NjcmlwdF9lbmRcPiIKKworc3luIG1hdGNoICAgdmVyaWxvZ0RpcmVjdGl2ZSAgICIvL1xzKlwkc1w+LiokIgorc3luIHJlZ2lvbiAgdmVyaWxvZ0RpcmVjdGl2ZSAgIHN0YXJ0PSIvXCpccypcJHNcPiIgZW5kPSJcKi8iCitzeW4gcmVnaW9uICB2ZXJpbG9nRGlyZWN0aXZlICAgc3RhcnQ9Ii8vXHMqXCRzIGRjX3NjcmlwdF9iZWdpblw+IiBlbmQ9Ii8vXHMqXCRzIGRjX3NjcmlwdF9lbmRcPiIKKworIk1vZGlmeSB0aGUgZm9sbG93aW5nIGFzIG5lZWRlZC4gIFRoZSB0cmFkZS1vZmYgaXMgcGVyZm9ybWFuY2UgdmVyc3VzCisiZnVuY3Rpb25hbGl0eS4KK3N5biBzeW5jIGxpbmVzPTUwCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3Zlcmlsb2dfc3luX2luaXRzIikKKyAgIGlmIHZlcnNpb24gPCA1MDgKKyAgICAgIGxldCBkaWRfdmVyaWxvZ19zeW5faW5pdHMgPSAxCisgICAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICAgZWxzZQorICAgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgICBlbmRpZgorCisgICAiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyAgIEhpTGluayB2ZXJpbG9nQ2hhcmFjdGVyICAgICAgIENoYXJhY3RlcgorICAgSGlMaW5rIHZlcmlsb2dDb25kaXRpb25hbCAgICAgQ29uZGl0aW9uYWwKKyAgIEhpTGluayB2ZXJpbG9nUmVwZWF0CQkgUmVwZWF0CisgICBIaUxpbmsgdmVyaWxvZ1N0cmluZwkJIFN0cmluZworICAgSGlMaW5rIHZlcmlsb2dUb2RvCQkgVG9kbworICAgSGlMaW5rIHZlcmlsb2dDb21tZW50CSBDb21tZW50CisgICBIaUxpbmsgdmVyaWxvZ0NvbnN0YW50CSBDb25zdGFudAorICAgSGlMaW5rIHZlcmlsb2dMYWJlbAkJIExhYmVsCisgICBIaUxpbmsgdmVyaWxvZ051bWJlcgkJIE51bWJlcgorICAgSGlMaW5rIHZlcmlsb2dPcGVyYXRvcgkgU3BlY2lhbAorICAgSGlMaW5rIHZlcmlsb2dTdGF0ZW1lbnQJIFN0YXRlbWVudAorICAgSGlMaW5rIHZlcmlsb2dHbG9iYWwJCSBEZWZpbmUKKyAgIEhpTGluayB2ZXJpbG9nRGlyZWN0aXZlCSBTcGVjaWFsQ29tbWVudAorICAgSGlMaW5rIHZlcmlsb2dFc2NhcGUJCSBTcGVjaWFsCisKKyAgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ2ZXJpbG9nIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvdmdyaW5kZWZzLnZpbSBiL3J1bnRpbWUvc3ludGF4L3ZncmluZGVmcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiODFiNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3ZncmluZGVmcy52aW0KQEAgLTAsMCArMSw2MSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVZncmluZGVmcworIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwMSBBcHIgMjUKKworIiBUaGUgVmdyaW5kZWZzIGZpbGUgaXMgdXNlZCB0byBzcGVjaWZ5IGEgbGFuZ3VhZ2UgZm9yIHZncmluZAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgQ29tbWVudHMKK3N5biBtYXRjaCB2Z3JpbmRlZnNDb21tZW50ICJeIy4qIgorCisiIFRoZSBmaWVsZHMgdGhhdCB2Z3JpbmQgcmVjb2duaXplcworc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6YWI9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6YWU9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6cGI9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6YmI9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6YmU9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6Y2I9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6Y2U9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6c2I9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6c2U9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6bGI9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6bGU9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6bmM9Igorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6dGwiCitzeW4gbWF0Y2ggdmdyaW5kZWZzRmllbGQgIjpvYyIKK3N5biBtYXRjaCB2Z3JpbmRlZnNGaWVsZCAiOmt3PSIKKworIiBBbHNvIGZpbmQgdGhlICc6JyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCBzbyBhbGwgJzonIGFyZSBoaWdobGlnaHRlZAorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6XFwkIgorc3luIG1hdGNoIHZncmluZGVmc0ZpZWxkICI6JCIKK3N5biBtYXRjaCB2Z3JpbmRlZnNGaWVsZCAiXFwkIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF92Z3JpbmRlZnNfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfdmdyaW5kZWZzX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBUaGUgZGVmYXVsdCBtZXRob2RzIGZvciBoaWdobGlnaHRpbmcuICBDYW4gYmUgb3ZlcnJpZGRlbiBsYXRlcgorICBIaUxpbmsgdmdyaW5kZWZzRmllbGQJCVN0YXRlbWVudAorICBIaUxpbmsgdmdyaW5kZWZzQ29tbWVudAlDb21tZW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInZncmluZGVmcyIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3ZoZGwudmltIGIvcnVudGltZS9zeW50YXgvdmhkbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmYmNkNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3ZoZGwudmltCkBAIC0wLDAgKzEsMTg0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJVkhETAorIiBNYWludGFpbmVyOglDem8gPE9saXZpZXIuU2lyb2xAbGlwNi5mcj4KKyIgQ3JlZGl0czoJU3RlcGhhbiBIZWdlbCA8c3RlcGhhbi5oZWdlbEBzbmMuc2llbWVucy5jb20uY24+CisiICRJZCQKKworIiBWSFNJQyBIYXJkd2FyZSBEZXNjcmlwdGlvbiBMYW5ndWFnZQorIiBWZXJ5IEhpZ2ggU2NhbGUgSW50ZWdyYXRlZCBDaXJjdWl0CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBUaGlzIGlzIG5vdCBWSERMLiBJIHVzZSB0aGUgQy1QcmVwcm9jZXNzb3IgY3BwIHRvIGdlbmVyYXRlIGRpZmZlcmVudCBiaW5hcmllcworIiBmcm9tIG9uZSBWSERMIHNvdXJjZSBmaWxlLiBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIHByZXByb2Nlc3NvciBmb3IgVkhETAorIiBhdmFpbGFibGUuIElmIHlvdSBkb24ndCBsaWtlIHRoaXMsIHBsZWFzZSByZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lcy4KK3N5biBtYXRjaCBjRGVmaW5lICJeI2lmZGVmWyBdXCtbQS1aYS16X11cKyIKK3N5biBtYXRjaCBjRGVmaW5lICJeI2VuZGlmIgorCisiIGNhc2UgaXMgbm90IHNpZ25pZmljYW50CitzeW4gY2FzZSBpZ25vcmUKKworIiBWSERMIGtleXdvcmRzCitzeW4ga2V5d29yZCB2aGRsU3RhdGVtZW50IGFjY2VzcyBhZnRlciBhbGlhcyBhbGwgYXNzZXJ0CitzeW4ga2V5d29yZCB2aGRsU3RhdGVtZW50IGFyY2hpdGVjdHVyZSBhcnJheSBhdHRyaWJ1dGUKK3N5biBrZXl3b3JkIHZoZGxTdGF0ZW1lbnQgYmVnaW4gYmxvY2sgYm9keSBidWZmZXIgYnVzCitzeW4ga2V5d29yZCB2aGRsU3RhdGVtZW50IGNhc2UgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gY29uc3RhbnQKK3N5biBrZXl3b3JkIHZoZGxTdGF0ZW1lbnQgZGlzY29ubmVjdCBkb3dudG8KK3N5biBrZXl3b3JkIHZoZGxTdGF0ZW1lbnQgZWxzaWYgZW5kIGVudGl0eSBleGl0CitzeW4ga2V5d29yZCB2aGRsU3RhdGVtZW50IGZpbGUgZm9yIGZ1bmN0aW9uCitzeW4ga2V5d29yZCB2aGRsU3RhdGVtZW50IGdlbmVyYXRlIGdlbmVyaWMgZ3JvdXAgZ3VhcmRlZAorc3luIGtleXdvcmQgdmhkbFN0YXRlbWVudCBpbXB1cmUgaW4gaW5lcnRpYWwgaW5vdXQgaXMKK3N5biBrZXl3b3JkIHZoZGxTdGF0ZW1lbnQgbGFiZWwgbGlicmFyeSBsaW5rYWdlIGxpdGVyYWwgbG9vcAorc3luIGtleXdvcmQgdmhkbFN0YXRlbWVudCBtYXAKK3N5biBrZXl3b3JkIHZoZGxTdGF0ZW1lbnQgbmV3IG5leHQgbnVsbAorc3luIGtleXdvcmQgdmhkbFN0YXRlbWVudCBvZiBvbiBvcGVuIG90aGVycyBvdXQKK3N5biBrZXl3b3JkIHZoZGxTdGF0ZW1lbnQgcGFja2FnZSBwb3J0IHBvc3Rwb25lZCBwcm9jZWR1cmUgcHJvY2VzcyBwdXJlCitzeW4ga2V5d29yZCB2aGRsU3RhdGVtZW50IHJhbmdlIHJlY29yZCByZWdpc3RlciByZWplY3QgcmVwb3J0IHJldHVybgorc3luIGtleXdvcmQgdmhkbFN0YXRlbWVudCBzZWxlY3Qgc2V2ZXJpdHkgc2lnbmFsIHNoYXJlZAorc3luIGtleXdvcmQgdmhkbFN0YXRlbWVudCBzdWJ0eXBlCitzeW4ga2V5d29yZCB2aGRsU3RhdGVtZW50IHRoZW4gdG8gdHJhbnNwb3J0IHR5cGUKK3N5biBrZXl3b3JkIHZoZGxTdGF0ZW1lbnQgdW5hZmZlY3RlZCB1bml0cyB1bnRpbCB1c2UKK3N5biBrZXl3b3JkIHZoZGxTdGF0ZW1lbnQgdmFyaWFibGUgd2FpdCB3aGVuIHdoaWxlIHdpdGgKK3N5biBrZXl3b3JkIHZoZGxTdGF0ZW1lbnQgbm90ZSB3YXJuaW5nIGVycm9yIGZhaWx1cmUKKworIiBTcGVjaWFsIG1hdGNoIGZvciAiaWYiIGFuZCAiZWxzZSIgc2luY2UgImVsc2UgaWYiIHNob3VsZG4ndCBiZSBoaWdobGlnaHRlZC4KKyIgVGhlIHJpZ2h0IGtleXdvcmQgaXMgImVsc2lmIgorc3luIG1hdGNoICAgdmhkbFN0YXRlbWVudCAiXDxcKGlmXHxlbHNlXClcPiIKK3N5biBtYXRjaCAgIHZoZGxOb25lICAgICAgIlw8ZWxzZVxzXCtpZlw+JCIKK3N5biBtYXRjaCAgIHZoZGxOb25lICAgICAgIlw8ZWxzZVxzXCtpZlw+XHMiCisKKyIgUHJlZGlmaW5lZCBWSERMIHR5cGVzCitzeW4ga2V5d29yZCB2aGRsVHlwZSBiaXQgYml0X3ZlY3Rvcgorc3luIGtleXdvcmQgdmhkbFR5cGUgY2hhcmFjdGVyIGJvb2xlYW4gaW50ZWdlciByZWFsIHRpbWUKK3N5biBrZXl3b3JkIHZoZGxUeXBlIHN0cmluZyBzZXZlcml0eV9sZXZlbAorIiBQcmVkaWZpbmVkIHN0YW5kYXJkIGllZWUgVkhETCB0eXBlcworc3luIGtleXdvcmQgdmhkbFR5cGUgcG9zaXRpdmUgbmF0dXJhbCBzaWduZWQgdW5zaWduZWQKK3N5biBrZXl3b3JkIHZoZGxUeXBlIGxpbmUgdGV4dAorc3luIGtleXdvcmQgdmhkbFR5cGUgc3RkX2xvZ2ljIHN0ZF9sb2dpY192ZWN0b3IKK3N5biBrZXl3b3JkIHZoZGxUeXBlIHN0ZF91bG9naWMgc3RkX3Vsb2dpY192ZWN0b3IKKyIgUHJlZGVmaW5lZCBub24gc3RhbmRhcmQgVkhETCB0eXBlcyBmb3IgTWVudG9yIEdyYXBoaWNzIFN5czEwNzYvUXVpY2tIREwKK3N5biBrZXl3b3JkIHZoZGxUeXBlIHFzaW1fc3RhdGUgcXNpbV9zdGF0ZV92ZWN0b3IKK3N5biBrZXl3b3JkIHZoZGxUeXBlIHFzaW1fMTJzdGF0ZSBxc2ltXzEyc3RhdGVfdmVjdG9yCitzeW4ga2V5d29yZCB2aGRsVHlwZSBxc2ltX3N0cmVuZ3RoCisiIFByZWRlZmluZWQgbm9uIHN0YW5kYXJkIFZIREwgdHlwZXMgZm9yIEFsbGlhbmNlIFZMU0kgQ0FECitzeW4ga2V5d29yZCB2aGRsVHlwZSBtdXhfYml0IG11eF92ZWN0b3IgcmVnX2JpdCByZWdfdmVjdG9yIHdvcl9iaXQgd29yX3ZlY3RvcgorCisiIGFycmF5IGF0dHJpYnV0ZXMKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ2hpZ2giCitzeW4gbWF0Y2ggdmhkbEF0dHJpYnV0ZSAiXCdsZWZ0Igorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwnbGVuZ3RoIgorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwnbG93Igorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwncmFuZ2UiCitzeW4gbWF0Y2ggdmhkbEF0dHJpYnV0ZSAiXCdyZXZlcnNlX3JhbmdlIgorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwncmlnaHQiCitzeW4gbWF0Y2ggdmhkbEF0dHJpYnV0ZSAiXCdhc2NlbmRpbmciCisiIGJsb2NrIGF0dHJpYnV0ZXMKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ2JlaGF2aW91ciIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ3N0cnVjdHVyZSIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ3NpbXBsZV9uYW1lIgorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwnaW5zdGFuY2VfbmFtZSIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ3BhdGhfbmFtZSIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ2ZvcmVpZ24iCisiIHNpZ25hbCBhdHRyaWJ1dGUKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ2FjdGl2ZSIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ2RlbGF5ZWQiCitzeW4gbWF0Y2ggdmhkbEF0dHJpYnV0ZSAiXCdldmVudCIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ2xhc3RfYWN0aXZlIgorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwnbGFzdF9ldmVudCIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ2xhc3RfdmFsdWUiCitzeW4gbWF0Y2ggdmhkbEF0dHJpYnV0ZSAiXCdxdWlldCIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ3N0YWJsZSIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ3RyYW5zYWN0aW9uIgorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwnZHJpdmluZyIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ2RyaXZpbmdfdmFsdWUiCisiIHR5cGUgYXR0cmlidXRlcworc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwnYmFzZSIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ2hpZ2giCitzeW4gbWF0Y2ggdmhkbEF0dHJpYnV0ZSAiXCdsZWZ0Igorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwnbGVmdG9mIgorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwnbG93Igorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwncG9zIgorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwncHJlZCIKK3N5biBtYXRjaCB2aGRsQXR0cmlidXRlICJcJ3JpZ2h0b2YiCitzeW4gbWF0Y2ggdmhkbEF0dHJpYnV0ZSAiXCdzdWNjIgorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwndmFsIgorc3luIG1hdGNoIHZoZGxBdHRyaWJ1dGUgIlwnaW1hZ2UiCitzeW4gbWF0Y2ggdmhkbEF0dHJpYnV0ZSAiXCd2YWx1ZSIKKworc3luIGtleXdvcmQgdmhkbEJvb2xlYW4gdHJ1ZSBmYWxzZQorCisiIGZvciB0aGlzIHZlY3RvciB2YWx1ZXMgY2FzZSBpcyBzaWduaWZpY2FudAorc3luIGNhc2UgbWF0Y2gKKyIgVmFsdWVzIGZvciBzdGFuZGFyZCBWSERMIHR5cGVzCitzeW4gbWF0Y2ggdmhkbFZlY3RvciAiXCdbMEwxSFhXWlVcLVw/XVwnIgorIiBWYWx1ZXMgZm9yIG5vbiBzdGFuZGFyZCBWSERMIHR5cGVzIHFzaW1fMTJzdGF0ZSBmb3IgTWVudG9yIEdyYXBoaWNzIFN5czEwNzYvUXVpY2tIREwKK3N5biBrZXl3b3JkIHZoZGxWZWN0b3IgUzBTIFMxUyBTWFMgUzBSIFMxUiBTWFIgUzBaIFMxWiBTWFogUzBJIFMxSSBTWEkKK3N5biBjYXNlIGlnbm9yZQorCitzeW4gbWF0Y2ggIHZoZGxWZWN0b3IgIkJcIlswMV9dXCtcIiIKK3N5biBtYXRjaCAgdmhkbFZlY3RvciAiT1wiWzAtN19dXCtcIiIKK3N5biBtYXRjaCAgdmhkbFZlY3RvciAiWFwiWzAtOWEtZl9dXCtcIiIKK3N5biBtYXRjaCAgdmhkbENoYXJhY3RlciAiJy4nIgorc3luIHJlZ2lvbiB2aGRsU3RyaW5nIHN0YXJ0PSsiKyAgZW5kPSsiKworCisiIGZsb2F0aW5nIG51bWJlcnMKK3N5biBtYXRjaCB2aGRsTnVtYmVyICItXD1cPFxkXCtcLlxkXCtcKEVbK1wtXVw9XGRcK1wpXD4iCitzeW4gbWF0Y2ggdmhkbE51bWJlciAiLVw9XDxcZFwrXC5cZFwrXD4iCitzeW4gbWF0Y2ggdmhkbE51bWJlciAiMCoyI1swMV9dXCtcLlswMV9dXCsjXChFWytcLV1cPVxkXCtcKVw9Igorc3luIG1hdGNoIHZoZGxOdW1iZXIgIjAqMTYjWzAtOWEtZl9dXCtcLlswLTlhLWZfXVwrI1woRVsrXC1dXD1cZFwrXClcPSIKKyIgaW50ZWdlciBudW1iZXJzCitzeW4gbWF0Y2ggdmhkbE51bWJlciAiLVw9XDxcZFwrXChFWytcLV1cPVxkXCtcKVw+Igorc3luIG1hdGNoIHZoZGxOdW1iZXIgIi1cPVw8XGRcK1w+Igorc3luIG1hdGNoIHZoZGxOdW1iZXIgIjAqMiNbMDFfXVwrI1woRVsrXC1dXD1cZFwrXClcPSIKK3N5biBtYXRjaCB2aGRsTnVtYmVyICIwKjE2I1swLTlhLWZfXVwrI1woRVsrXC1dXD1cZFwrXClcPSIKKyIgb3BlcmF0b3JzCitzeW4ga2V5d29yZCB2aGRsT3BlcmF0b3IgYW5kIG5hbmQgb3Igbm9yIHhvciB4bm9yCitzeW4ga2V5d29yZCB2aGRsT3BlcmF0b3Igcm9sIHJvciBzbGEgc2xsIHNyYSBzcmwKK3N5biBrZXl3b3JkIHZoZGxPcGVyYXRvciBtb2QgcmVtIGFicyBub3QKK3N5biBtYXRjaCAgIHZoZGxPcGVyYXRvciAiWyY+PD06K1wtKlwvfF0iCitzeW4gbWF0Y2ggICB2aGRsU3BlY2lhbCAgIlsoKS4sO10iCisiIHRpbWUKK3N5biBtYXRjaCB2aGRsVGltZSAiXDxcZFwrXHNcK1woXChbZnBudW1dc1wpXHxcKHNlY1wpXHxcKG1pblwpXHxcKGhyXClcKVw+Igorc3luIG1hdGNoIHZoZGxUaW1lICJcPFxkXCtcLlxkXCtcc1wrXChcKFtmcG51bV1zXClcfFwoc2VjXClcfFwobWluXClcfFwoaHJcKVwpXD4iCisKK3N5biBtYXRjaCB2aGRsQ29tbWVudCAiLS0uKiQiCisiIHN5biBtYXRjaCB2aGRsR2xvYmFsICJbXCckI34hJUA/XF5cW1xde31cXF0iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3ZoZGxfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfdmhkbF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayBjRGVmaW5lICAgICAgIFByZVByb2MKKyAgSGlMaW5rIHZoZGxTcGVjaWFsICAgU3BlY2lhbAorICBIaUxpbmsgdmhkbFN0YXRlbWVudCBTdGF0ZW1lbnQKKyAgSGlMaW5rIHZoZGxDaGFyYWN0ZXIgU3RyaW5nCisgIEhpTGluayB2aGRsU3RyaW5nICAgIFN0cmluZworICBIaUxpbmsgdmhkbFZlY3RvciAgICBTdHJpbmcKKyAgSGlMaW5rIHZoZGxCb29sZWFuICAgU3RyaW5nCisgIEhpTGluayB2aGRsQ29tbWVudCAgIENvbW1lbnQKKyAgSGlMaW5rIHZoZGxOdW1iZXIgICAgU3RyaW5nCisgIEhpTGluayB2aGRsVGltZSAgICAgIFN0cmluZworICBIaUxpbmsgdmhkbFR5cGUgICAgICBUeXBlCisgIEhpTGluayB2aGRsT3BlcmF0b3IgIFR5cGUKKyAgSGlMaW5rIHZoZGxHbG9iYWwgICAgRXJyb3IKKyAgSGlMaW5rIHZoZGxBdHRyaWJ1dGUgVHlwZQorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ2aGRsIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvdmltLnZpbSBiL3J1bnRpbWUvc3ludGF4L3ZpbS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhZDExMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3ZpbS52aW0KQEAgLTAsMCArMSw2NDIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglWaW0gNi4zIHNjcmlwdAorIiBNYWludGFpbmVyOglEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxOZHJPY2hpcFNAUGNhbXBiZWxsQWZhbWlseS5NYml6PgorIiBMYXN0IENoYW5nZToJTWF5IDI1LCAyMDA0CisiIFZlcnNpb246CTYuMy0wNAorIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBrZXl3b3JkIGxpc3RzOiB7e3sxCisKKyIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkIHt7ezIKK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiB2aW1Ub2RvOiBjb250YWlucyBjb21tb24gc3BlY2lhbC1ub3RpY2VzIGZvciBjb21tZW50cyB7e3syCisiIFVzZSB0aGUgdmltQ29tbWVudEdyb3VwIGNsdXN0ZXIgdG8gYWRkIHlvdXIgb3duLgorc3luIGtleXdvcmQgdmltVG9kbyBjb250YWluZWQJQ09NQkFLCU5PVAlSRUxFQVNFRAlUT0RPCVdJUAorc3luIGNsdXN0ZXIgdmltQ29tbWVudEdyb3VwCWNvbnRhaW5zPXZpbVRvZG8sQFNwZWxsCisKKyIgcmVndWxhciB2aW0gY29tbWFuZHMge3t7Mgorc3luIGtleXdvcmQgdmltQ29tbWFuZCBjb250YWluZWQJYWJbYnJldmlhdGVdIGFiY1tsZWFyXSBhYm9bdmVsZWZ0XSBhbFtsXSBhcmdhW2RkXSBhcmdkW2VsZXRlXSBhcmdkbyBhcmdlW2RpdF0gYXJnZ1tsb2JhbF0gYXJnbFtvY2FsXSBhcltnc10gYXJndVttZW50XSBhc1tjaWldIGJhZFtkXSBiYVtsbF0gYmRbZWxldGVdIGJlIGJlbFtvd3JpZ2h0XSBiZltpcnN0XSBibFthc3RdIGJtW29kaWZpZWRdIGJuW2V4dF0gYk5bZXh0XSBib1t0cmlnaHRdIGJwW3JldmlvdXNdIGJyZWFba10gYnJlYWthW2RkXSBicmVha2RbZWxdIGJyZWFrbFtpc3RdIGJyW2V3aW5kXSBicm9bd3NlXSBidWZkbyBiW3VmZmVyXSBidWZmZXJzIGJ1bltsb2FkXSBid1tpcGVvdXRdIGNhW2JicmV2XSBjYWJjW2xlYXJdIGNhbFtsXSBjYXRbY2hdIGNjIGNjbFtvc2VdIGNkIGNlW250ZXJdIGNmW2lsZV0gY2ZpcltzdF0gY2dbZXRmaWxlXSBjW2hhbmdlXSBjaGFuZ2VzIGNoZFtpcl0gY2hlW2NrcGF0aF0gY2hlY2t0W2ltZV0gY2xhW3N0XSBjbFtpc3RdIGNsb1tzZV0gY21hcGNbbGVhcl0gY25ld1tlcl0gY25bZXh0XSBjTltleHRdIGNuZltpbGVdIGNOZltpbGVdIGNub3JlYVtiYnJldl0gY29sW2Rlcl0gY29sb1tyc2NoZW1lXSBjb21jW2xlYXJdIGNvbXBbaWxlcl0gY29uZltpcm1dIGNvblt0aW51ZV0gY29wZVtuXSBjb1tweV0gY3BmW2lsZV0gY3BbcmV2aW91c10gY3FbdWl0XSBjcltld2luZF0gY3VuYVtiYnJldl0gY3Vbbm1hcF0gY3dbaW5kb3ddIGRlYnVnZ1tyZWVkeV0gZGVsY1tvbW1hbmRdIGRbZWxldGVdIERlbGV0ZUZpcnN0IGRlbGZbdW5jdGlvbl0gZGVsbVthcmtdIGRpZmZnW2V0XSBkaWZmcGF0Y2ggZGlmZnB1W3RdIGRpZmZzcGxpdCBkaWZmdGhpcyBkaWdbcmFwaHNdIGRpW3NwbGF5XSBkalt1bXBdIGRsW2lzdF0gZHJbb3BdIGRzW2VhcmNoXSBkc3BbbGl0XSBlY2hvZVtycl0gZWNob21bc2ddIGVjaG9uIGVbZGl0XSBlbFtzZV0gZWxzZWlbZl0gZW1bZW51XSBlbWVudSogZW5kZlt1bmN0aW9uXSBlbltkaWZdIGVuZHRbcnldIGVuZHdbaGlsZV0gZW5lW3ddIGV4IGV4aVt0XSBmW2lsZV0gZmlsZXMgZmlsZXR5cGUgZmluYVtsbHldIGZpbltkXSBmaW5pW3NoXSBmaXJbc3RdIGZpeFtkZWxdIGZvW2xkXSBmb2xkY1tsb3NlXSBmb2xkZG9jW2xvc2VkXSBmb2xkZFtvb3Blbl0gZm9sZG9bcGVuXSBmdVtuY3Rpb25dIGdbbG9iYWxdIGdvW3RvXSBncltlcF0gZ3JlcGFbZGRdIGhhW3JkY29weV0gaFtlbHBdIGhlbHBmW2luZF0gaGVscGdbcmVwXSBoZWxwdFthZ3NdIGhpZFtlXSBoaXNbdG9yeV0gSSBpYVtiYnJldl0gaWFiY1tsZWFyXSBpZiBpalt1bXBdIGlsW2lzdF0gaW1hcGNbbGVhcl0gaW5vcmVhW2JicmV2XSBpc1tlYXJjaF0gaXNwW2xpdF0gaXVuYVtiYnJldl0gaXVbbm1hcF0galtvaW5dIGp1W21wc10gayBrZWVwalt1bXBzXSBrZWVbcG1hcmtzXSBsYW5bZ3VhZ2VdIGxhW3N0XSBsY1tkXSBsY2hbZGlyXSBsZVtmdF0gbGVmdGFbYm92ZV0gbFtpc3RdIGxtW2FwXSBsbWFwY1tsZWFyXSBsbltvcmVtYXBdIGxvW2Fkdmlld10gbG9jW2ttYXJrc10gbHMgbHVbbm1hcF0gbWFrW2VdIG1hW3JrXSBtYXJrcyBtYXRbY2hdIG1lbnV0W3JhbnNsYXRlXSBta1tleHJjXSBta3NbZXNzaW9uXSBta3ZpZVt3XSBta3ZbaW1yY10gbW9kW2VdIG1bb3ZlXSBuZXcgbltleHRdIE5bZXh0XSBubWFwY1tsZWFyXSBub2hbbHNlYXJjaF0gbm9yZWFbYmJyZXZdIG5vcm1bYWxdIE5yZWFkIG51W21iZXJdIG51blttYXBdIE53IG9tYXBjW2xlYXJdIG9uW2x5XSBvW3Blbl0gb3B0W2lvbnNdIG91W25tYXBdIHBjW2xvc2VdIHBlZFtpdF0gcGVbcmxdIHBlcmxkW29dIHBvW3BdIHBvcHUgcG9wdVtwXSBwcFtvcF0gcHJlW3NlcnZlXSBwcmV2W2lvdXNdIHBbcmludF0gUFtyaW50XSBwcm9tcHQgcHJvbXB0ZltpbmRdIHByb21wdHJbZXBsXSBwc1tlYXJjaF0gcHRhW2ddIHB0ZltpcnN0XSBwdGpbdW1wXSBwdGxbYXN0XSBwdG5bZXh0XSBwdE5bZXh0XSBwdHBbcmV2aW91c10gcHRyW2V3aW5kXSBwdHNbZWxlY3RdIHB1W3RdIHB3W2RdIHB5ZltpbGVdIHB5W3Rob25dIHFhW2xsXSBxW3VpdF0gcXVpdGFbbGxdIHJbZWFkXSByZWNbb3Zlcl0gcmVkaVtyXSByZWRbb10gcmVkclthd10gcmVkcmF3c1t0YXR1c10gcmVnW2lzdGVyc10gcmVzW2l6ZV0gcmV0W2FiXSByZXR1W3JuXSByZXdbaW5kXSByaVtnaHRdIHJpZ2h0YltlbG93XSBydWJbeV0gcnVieWRbb10gcnVieWZbaWxlXSBydVtudGltZV0gcnZbaW1pbmZvXSBzYWxbbF0gc2Fbcmd1bWVudF0gc2F2W2Vhc10gc2JhW2xsXSBzYmZbaXJzdF0gc2JsW2FzdF0gc2JtW29kaWZpZWRdIHNibltleHRdIHNiTltleHRdIHNicFtyZXZpb3VzXSBzYnJbZXdpbmRdIHNiW3VmZmVyXSBzY3JpcHRlW25jb2RpbmddIHNjcmlwW3RuYW1lc10gc2VbdF0gc2V0ZltpbGV0eXBlXSBzZXRnW2xvYmFsXSBzZXRsW29jYWxdIHNmW2luZF0gc2ZpcltzdCBzaFtlbGxdIHNpZ24gc2lsW2VudF0gc2ltW2FsdF0gc2xhW3N0XSBzbFtlZXBdIHNtW2FnaWNdIHNuW2V4dF0gc05bZXh0XSBzbmlbZmZdIHNub1ttYWdpY10gc29bdXJjZV0gc3BbbGl0XSBzcHJbZXZpb3VzXSBzcmVbd2luZF0gc3RhW2ddIHN0YXJbdGluc2VydF0gc3RhcnRyW2VwbGFjZV0gc3RqW3VtcF0gc3Rbb3BdIHN0b3BpW25zZXJ0XSBzdHNbZWxlY3RdIHN1bltoaWRlXSBzdXNbcGVuZF0gc3ZbaWV3XSBzeW5jYmluZCB0IHRhW2ddIHRhZ3MgdGNbbF0gdGNsZFtvXSB0Y2xmW2lsZV0gdGVbYXJvZmZdIHRmW2lyc3RdIHRoZSB0aFtyb3ddIHRqW3VtcF0gdGxbYXN0XSB0bSB0bVtlbnVdIHRuW2V4dF0gdE5bZXh0XSB0b1twbGVmdF0gdHBbcmV2aW91c10gdHJbZXdpbmRdIHRyeSB0c1tlbGVjdF0gdHUgdHVbbm1lbnVdIHVuYVtiYnJldmlhdGVdIHVbbmRvXSB1bmhbaWRlXSB1bm1bYXBdIHVwW2RhdGVdIHZlcmJbb3NlXSB2ZVtyc2lvbl0gdmVydFtpY2FsXSB2W2dsb2JhbF0gdmllW3ddIHZpW3N1YWxdIHZtYXBjW2xlYXJdIHZuZVt3XSB2c1twbGl0XSB2dVtubWFwXSB3YVtsbF0gd2hbaWxlXSB3aW5jW21kXSB3aW5kbyB3aW5wW29zXSB3aW5wb3MqIHdpbltzaXplXSB3bltleHRdIHdOW2V4dF0gd3BbcmV2b3VzXSB3cSB3cWFbbGxdIHdbcml0ZV0gd3NbdmVyYl0gd3ZbaW1pbmZvXSBYIHhhW2xsXSB4W2l0XSB5W2Fua10KK3N5biBtYXRjaCAgIHZpbUNvbW1hbmQgY29udGFpbmVkCSJcPHpbLSteLj1dIgorCisiIHZpbU9wdGlvbnMgYXJlIGNhdWdodCBvbmx5IHdoZW4gY29udGFpbmVkIGluIGEgdmltU2V0IHt7ezIKK3N5biBrZXl3b3JkIHZpbU9wdGlvbiBjb250YWluZWQJOiBhY2QgYWkgYWttIGFsIGFsZXBoIGFsbG93cmV2aW5zIGFsdGtleW1hcCBhbWJpd2lkdGggYW1idyBhbnRpIGFudGlhbGlhcyBhciBhcmFiIGFyYWJpYyBhcmFiaWNzaGFwZSBhcmkgYXJzaGFwZSBhdXRvY2hkaXIgYXV0b2luZGVudCBhdXRvcmVhZCBhdXRvd3JpdGUgYXV0b3dyaXRlYWxsIGF3IGF3YSBiYWNrZ3JvdW5kIGJhY2tzcGFjZSBiYWNrdXAgYmFja3VwY29weSBiYWNrdXBkaXIgYmFja3VwZXh0IGJhY2t1cHNraXAgYmFsbG9vbmRlbGF5IGJhbGxvb25ldmFsIGJkaXIgYmRsYXkgYmV2YWwgYmV4IGJnIGJoIGJpbiBiaW5hcnkgYmlvc2sgYmlvc2tleSBiayBia2MgYmwgYm9tYiBicmVha2F0IGJyayBicm93c2VkaXIgYnMgYnNkaXIgYnNrIGJ0IGJ1ZmhpZGRlbiBidWZsaXN0ZWQgYnVmdHlwZSBjYXNlbWFwIGNiIGNjdiBjZCBjZHBhdGggY2VkaXQgY2YgY2ggY2hhcmNvbnZlcnQgY2kgY2luIGNpbmRlbnQgY2luayBjaW5rZXlzIGNpbm8gY2lub3B0aW9ucyBjaW53IGNpbndvcmRzIGNsaXBib2FyZCBjbWRoZWlnaHQgY21kd2luaGVpZ2h0IGNtcCBjbXMgY28gY29sdW1ucyBjb20gY29tbWVudHMgY29tbWVudHN0cmluZyBjb21wYXRpYmxlIGNvbXBsZXRlIGNvbmMgY29uY2VhbGxldmVsIGNvbmZpcm0gY29uc2sgY29uc2tleSBjb3B5aW5kZW50IGNwIGNwbyBjcG9wdGlvbnMgY3B0IGNyYiBjc2NvcGVwYXRoY29tcCBjc2NvcGVwcmcgY3Njb3BlcXVpY2tmaXggY3Njb3BldGFnIGNzY29wZXRhZ29yZGVyIGNzY29wZXZlcmJvc2UgY3NwYyBjc3ByZyBjc3FmIGNzdCBjc3RvIGNzdmVyYiBjdXJzb3JiaW5kIGN3aCBkZWJ1ZyBkZWNvIGRlZiBkZWZpbmUgZGVsY29tYmluZSBkZXggZGcgZGljdCBkaWN0aW9uYXJ5IGRpZmYgZGlmZmV4cHIgZGlmZm9wdCBkaWdyYXBoIGRpcCBkaXIgZGlyZWN0b3J5IGRpc3BsYXkgZHkgZWEgZWFkIGVhZGlyZWN0aW9uIGViIGVkIGVkY29tcGF0aWJsZSBlZiBlZm0gZWkgZWsgZW5jIGVuY29kaW5nIGVuZG9mbGluZSBlb2wgZXAgZXF1YWxhbHdheXMgZXF1YWxwcmcgZXJyb3JiZWxscyBlcnJvcmZpbGUgZXJyb3Jmb3JtYXQgZXNja2V5cyBldCBldmVudGlnbm9yZSBleCBleHBhbmR0YWIgZXhyYyBmY2wgZmNzIGZkYyBmZGUgZmRpIGZkbCBmZGxzIGZkbSBmZG4gZmRvIGZkdCBmZW4gZmVuYyBmZW5jcyBmZiBmZnMgZmlsZWVuY29kaW5nIGZpbGVlbmNvZGluZ3MgZmlsZWZvcm1hdCBmaWxlZm9ybWF0cyBmaWxldHlwZSBmaWxsY2hhcnMgZmsgZmttYXAgZm1sIGZtciBmbyBmb2xkY2xvc2UgZm9sZGNvbHVtbiBmb2xkZW5hYmxlIGZvbGRleHByIGZvbGRpZ25vcmUgZm9sZGxldmVsIGZvbGRsZXZlbHN0YXJ0IGZvbGRtYXJrZXIgZm9sZG1ldGhvZCBmb2xkbWlubGluZXMgZm9sZG5lc3RtYXggZm9sZG9wZW4gZm9sZHRleHQgZm9ybWF0b3B0aW9ucyBmb3JtYXRwcmcgZnAgZnQgZ2NyIGdkIGdkZWZhdWx0IGdmbSBnZm4gZ2ZzIGdmdyBnaHIgZ28gZ3AgZ3JlcGZvcm1hdCBncmVwcHJnIGd1aWN1cnNvciBndWlmb250IGd1aWZvbnRzZXQgZ3VpZm9udHdpZGUgZ3VpaGVhZHJvb20gZ3Vpb3B0aW9ucyBndWlwdHkgaGVscGZpbGUgaGVscGhlaWdodCBoZWxwbGFuZyBoZiBoaCBoaSBoaWQgaGlkZGVuIGhpZ2hsaWdodCBoaXN0b3J5IGhrIGhrbWFwIGhrbWFwcCBoa3AgaGwgaGxnIGhscyBobHNlYXJjaCBpYyBpY29uIGljb25zdHJpbmcgaWdub3JlY2FzZSBpbSBpbWFjdGl2YXRla2V5IGltYWsgaW1jIGltY21kbGluZSBpbWQgaW1kaXNhYmxlIGltaSBpbWluc2VydCBpbXMgaW1zZWFyY2ggaW5jIGluY2x1ZGUgaW5jbHVkZWV4cHIgaW5jc2VhcmNoIGluZGUgaW5kZW50ZXhwciBpbmRlbnRrZXlzIGluZGsgaW5leCBpbmYgaW5mZXJjYXNlIGluc2VydG1vZGUgaXMgaXNmIGlzZm5hbWUgaXNpIGlzaWRlbnQgaXNrIGlza2V5d29yZCBpc3AgaXNwcmludCBqb2luc3BhY2VzIGpzIGtleSBrZXltYXAga2V5bW9kZWwga2V5d29yZHByZyBrbSBrbXAga3AgbGFuZ21hcCBsYW5nbWVudSBsYXN0c3RhdHVzIGxhenlyZWRyYXcgbGJyIGxjcyBsaW5lYnJlYWsgbGluZXMgbGluZXNwYWNlIGxpc3AgbGlzcHdvcmRzIGxpc3QgbGlzdGNoYXJzIGxtIGxtYXAgbG9hZHBsdWdpbnMgbHBsIGxzIGxzcCBsdyBseiBtYSBtYWdpYyBtYWtlZWYgbWFrZXByZyBtYXQgbWF0Y2hwYWlycyBtYXRjaHRpbWUgbWF4ZnVuY2RlcHRoIG1heG1hcGRlcHRoIG1heG1lbSBtYXhtZW10b3QgbWVmIG1lbnVpdGVtcyBtZmQgbWggbWlzIG1sIG1scyBtbSBtbWQgbW10IG1vZCBtb2RlbGluZSBtb2RlbGluZXMgbW9kaWZpYWJsZSBtb2RpZmllZCBtb3JlIG1vdXNlIG1vdXNlZiBtb3VzZWZvY3VzIG1vdXNlaGlkZSBtb3VzZW0gbW91c2Vtb2RlbCBtb3VzZXMgbW91c2VzaGFwZSBtb3VzZXQgbW91c2V0aW1lIG1wIG1wcyBuZiBucmZvcm1hdHMgbnUgbnVtYmVyIG9mdCBvc2ZpbGV0eXBlIHBhIHBhcmEgcGFyYWdyYXBocyBwYXN0ZSBwYXN0ZXRvZ2dsZSBwYXRjaGV4cHIgcGF0Y2htb2RlIHBhdGggcGRldiBwZW5jIHBleCBwZXhwciBwZm4gcGhlYWRlciBwaSBwbSBwb3B0IHByZXNlcnZlaW5kZW50IHByZXZpZXdoZWlnaHQgcHJldmlld3dpbmRvdyBwcmludGRldmljZSBwcmludGVuY29kaW5nIHByaW50ZXhwciBwcmludGZvbnQgcHJpbnRoZWFkZXIgcHJpbnRvcHRpb25zIHB0IHB2aCBwdncgcmVhZG9ubHkgcmVtYXAgcmVwb3J0IHJlc3RvcmVzY3JlZW4gcmV2aW5zIHJpIHJpZ2h0bGVmdCByaWdodGxlZnRjbWQgcmwgcmxjIHJvIHJzIHJ0cCBydSBydWYgcnVsZXIgcnVsZXJmb3JtYXQgcnVudGltZXBhdGggc2Igc2JvIHNiciBzYyBzY2Igc2NyIHNjcm9sbCBzY3JvbGxiaW5kIHNjcm9sbGp1bXAgc2Nyb2xsb2ZmIHNjcm9sbG9wdCBzY3Mgc2VjdCBzZWN0aW9ucyBzZWN1cmUgc2VsIHNlbGVjdGlvbiBzZWxlY3Rtb2RlIHNlc3Npb25vcHRpb25zIHNmdCBzaCBzaGNmIHNoZWxsIHNoZWxsY21kZmxhZyBzaGVsbHBpcGUgc2hlbGxxdW90ZSBzaGVsbHJlZGlyIHNoZWxsc2xhc2ggc2hlbGx0eXBlIHNoZWxseHF1b3RlIHNoaWZ0cm91bmQgc2hpZnR3aWR0aCBzaG0gc2hvcnRtZXNzIHNob3J0bmFtZSBzaG93YnJlYWsgc2hvd2NtZCBzaG93ZnVsbHRhZyBzaG93bWF0Y2ggc2hvd21vZGUgc2hxIHNpIHNpZGVzY3JvbGwgc2lkZXNjcm9sbG9mZiBzaXNvIHNqIHNsbSBzbSBzbWFydGNhc2Ugc21hcnRpbmRlbnQgc21hcnR0YWIgc21kIHNuIHNvIHNvZnR0YWJzdG9wIHNvbCBzcCBzcGxpdGJlbG93IHNwbGl0cmlnaHQgc3ByIHNyIHNyciBzcyBzc2wgc3NvcCBzdCBzdGEgc3RhcnRvZmxpbmUgc3RhdHVzbGluZSBzdGwgc3RzIHN1IHN1YSBzdWZmaXhlcyBzdWZmaXhlc2FkZCBzdyBzd2FwZmlsZSBzd2Fwc3luYyBzd2Igc3dmIHN3aXRjaGJ1ZiBzd3Mgc3hxIHN5biBzeW50YXggdGEgdGFic3RvcCB0YWcgdGFnYnNlYXJjaCB0YWdsZW5ndGggdGFncmVsYXRpdmUgdGFncyB0YWdzdGFjayB0YiB0YmkgdGJpZGkgdGJpcyB0YnMgdGVuYyB0ZXJtIHRlcm1iaWRpIHRlcm1lbmNvZGluZyB0ZXJzZSB0ZXh0YXV0byB0ZXh0bW9kZSB0ZXh0d2lkdGggdGYgdGdzdCB0aGVzYXVydXMgdGlsZGVvcCB0aW1lb3V0IHRpbWVvdXRsZW4gdGl0bGUgdGl0bGVsZW4gdGl0bGVvbGQgdGl0bGVzdHJpbmcgdGwgdG0gdG8gdG9vbGJhciB0b29sYmFyaWNvbnNpemUgdG9wIHRyIHRzIHRzbCB0c3IgdHRpbWVvdXQgdHRpbWVvdXRsZW4gdHRtIHR0eSB0dHlidWlsdGluIHR0eWZhc3QgdHR5bSB0dHltb3VzZSB0dHlzY3JvbGwgdHR5dHlwZSB0dyB0eCB1YyB1bCB1bmRvbGV2ZWxzIHVwZGF0ZWNvdW50IHVwZGF0ZXRpbWUgdXQgdmIgdmJzIHZkaXIgdmUgdmVyYm9zZSB2aSB2aWV3ZGlyIHZpZXdvcHRpb25zIHZpbWluZm8gdmlydHVhbGVkaXQgdmlzdWFsYmVsbCB2b3Agd2Egd2FrIHdhcm4gd2Igd2Mgd2NtIHdkIHdlaXJkaW52ZXJ0IHdmaCB3aCB3aGljaHdyYXAgd2lnIHdpbGRjaGFyIHdpbGRjaGFybSB3aWxkaWdub3JlIHdpbGRtZW51IHdpbGRtb2RlIHdpbSB3aW5hbHRrZXlzIHdpbmZpeGhlaWdodCB3aW5oZWlnaHQgd2lubWluaGVpZ2h0IHdpbm1pbndpZHRoIHdpbndpZHRoIHdpdiB3aXcgd20gd21oIHdtbnUgd213IHdyYXAgd3JhcG1hcmdpbiB3cmFwc2NhbiB3cml0ZSB3cml0ZWFueSB3cml0ZWJhY2t1cCB3cml0ZWRlbGF5IHdzIHd3CisKKyIgdmltT3B0aW9uczogVGhlc2UgYXJlIHRoZSB0dXJuLW9mZiBzZXR0aW5nIHZhcmlhbnRzIHt7ezIKK3N5biBrZXl3b3JkIHZpbU9wdGlvbiBjb250YWluZWQJbm9hY2Qgbm9haSBub2FrbSBub2FsbG93cmV2aW5zIG5vYWx0a2V5bWFwIG5vYW50aSBub2FudGlhbGlhcyBub2FyIG5vYXJhYiBub2FyYWJpYyBub2FyYWJpY3NoYXBlIG5vYXJpIG5vYXJzaGFwZSBub2F1dG9jaGRpciBub2F1dG9pbmRlbnQgbm9hdXRvcmVhZCBub2F1dG93cml0ZSBub2F1dG93cml0ZWFsbCBub2F3IG5vYXdhIG5vYmFja3VwIG5vYmFsbG9vbmV2YWwgbm9iZXZhbCBub2JpbiBub2JpbmFyeSBub2Jpb3NrIG5vYmlvc2tleSBub2JrIG5vYmwgbm9ib21iIG5vYnVmbGlzdGVkIG5vY2Ygbm9jaSBub2NpbiBub2NpbmRlbnQgbm9jb21wYXRpYmxlIG5vY29uZmlybSBub2NvbnNrIG5vY29uc2tleSBub2NvcHlpbmRlbnQgbm9jcCBub2NyYiBub2NzY29wZXRhZyBub2NzY29wZXZlcmJvc2Ugbm9jc3Qgbm9jc3ZlcmIgbm9jdXJzb3JiaW5kIG5vZGVjbyBub2RlbGNvbWJpbmUgbm9kZyBub2RpZmYgbm9kaWdyYXBoIG5vZGlzYWJsZSBub2VhIG5vZWIgbm9lZCBub2VkY29tcGF0aWJsZSBub2VrIG5vZW5kb2ZsaW5lIG5vZW9sIG5vZXF1YWxhbHdheXMgbm9lcnJvcmJlbGxzIG5vZXNja2V5cyBub2V0IG5vZXggbm9leHBhbmR0YWIgbm9leHJjIG5vZmVuIG5vZmsgbm9ma21hcCBub2ZvbGRlbmFibGUgbm9nZCBub2dkZWZhdWx0IG5vZ3VpcHR5IG5vaGlkIG5vaGlkZGVuIG5vaGsgbm9oa21hcCBub2hrbWFwcCBub2hrcCBub2hscyBub2hsc2VhcmNoIG5vaWMgbm9pY29uIG5vaWdub3JlY2FzZSBub2ltIG5vaW1jIG5vaW1jbWRsaW5lIG5vaW1kIG5vaW5jc2VhcmNoIG5vaW5mIG5vaW5mZXJjYXNlIG5vaW5zZXJ0bW9kZSBub2lzIG5vam9pbnNwYWNlcyBub2pzIG5vbGF6eXJlZHJhdyBub2xiciBub2xpbmVicmVhayBub2xpc3Agbm9saXN0IG5vbG9hZHBsdWdpbnMgbm9scGwgbm9seiBub21hIG5vbWFnaWMgbm9taCBub21sIG5vbW9kIG5vbW9kZWxpbmUgbm9tb2RpZmlhYmxlIG5vbW9kaWZpZWQgbm9tb3JlIG5vbW91c2VmIG5vbW91c2Vmb2N1cyBub21vdXNlaGlkZSBub251IG5vbnVtYmVyIG5vcGFzdGUgbm9waSBub3ByZXNlcnZlaW5kZW50IG5vcHJldmlld3dpbmRvdyBub3B2dyBub3JlYWRvbmx5IG5vcmVtYXAgbm9yZXN0b3Jlc2NyZWVuIG5vcmV2aW5zIG5vcmkgbm9yaWdodGxlZnQgbm9yaWdodGxlZnRjbWQgbm9ybCBub3JsYyBub3JvIG5vcnMgbm9ydSBub3J1bGVyIG5vc2Igbm9zYyBub3NjYiBub3Njcm9sbGJpbmQgbm9zY3Mgbm9zZWN1cmUgbm9zZnQgbm9zaGVsbHNsYXNoIG5vc2hpZnRyb3VuZCBub3Nob3J0bmFtZSBub3Nob3djbWQgbm9zaG93ZnVsbHRhZyBub3Nob3dtYXRjaCBub3Nob3dtb2RlIG5vc2kgbm9zbSBub3NtYXJ0Y2FzZSBub3NtYXJ0aW5kZW50IG5vc21hcnR0YWIgbm9zbWQgbm9zbiBub3NvbCBub3NwbGl0YmVsb3cgbm9zcGxpdHJpZ2h0IG5vc3ByIG5vc3Igbm9zc2wgbm9zdGEgbm9zdGFydG9mbGluZSBub3N3YXBmaWxlIG5vc3dmIG5vdGEgbm90YWdic2VhcmNoIG5vdGFncmVsYXRpdmUgbm90YWdzdGFjayBub3RiaSBub3RiaWRpIG5vdGJzIG5vdGVybWJpZGkgbm90ZXJzZSBub3RleHRhdXRvIG5vdGV4dG1vZGUgbm90ZiBub3Rnc3Qgbm90aWxkZW9wIG5vdGltZW91dCBub3RpdGxlIG5vdG8gbm90b3Agbm90ciBub3R0aW1lb3V0IG5vdHR5YnVpbHRpbiBub3R0eWZhc3Qgbm90eCBub3ZiIG5vdmlzdWFsYmVsbCBub3dhIG5vd2FybiBub3diIG5vd2VpcmRpbnZlcnQgbm93Zmggbm93aWxkbWVudSBub3dpbmZpeGhlaWdodCBub3dpdiBub3dtbnUgbm93cmFwIG5vd3JhcHNjYW4gbm93cml0ZSBub3dyaXRlYW55IG5vd3JpdGViYWNrdXAgbm93cworCisiIHZpbU9wdGlvbnM6IFRoZXNlIGFyZSB0aGUgaW52ZXJ0aWJsZSB2YXJpYW50cyB7e3syCitzeW4ga2V5d29yZCB2aW1PcHRpb24gY29udGFpbmVkCWludmFjZCBpbnZhaSBpbnZha20gaW52YWxsb3dyZXZpbnMgaW52YWx0a2V5bWFwIGludmFudGkgaW52YW50aWFsaWFzIGludmFyIGludmFyYWIgaW52YXJhYmljIGludmFyYWJpY3NoYXBlIGludmFyaSBpbnZhcnNoYXBlIGludmF1dG9jaGRpciBpbnZhdXRvaW5kZW50IGludmF1dG9yZWFkIGludmF1dG93cml0ZSBpbnZhdXRvd3JpdGVhbGwgaW52YXcgaW52YXdhIGludmJhY2t1cCBpbnZiYWxsb29uZXZhbCBpbnZiZXZhbCBpbnZiaW4gaW52YmluYXJ5IGludmJpb3NrIGludmJpb3NrZXkgaW52YmsgaW52YmwgaW52Ym9tYiBpbnZidWZsaXN0ZWQgaW52Y2YgaW52Y2kgaW52Y2luIGludmNpbmRlbnQgaW52Y29tcGF0aWJsZSBpbnZjb25maXJtIGludmNvbnNrIGludmNvbnNrZXkgaW52Y29weWluZGVudCBpbnZjcCBpbnZjcmIgaW52Y3Njb3BldGFnIGludmNzY29wZXZlcmJvc2UgaW52Y3N0IGludmNzdmVyYiBpbnZjdXJzb3JiaW5kIGludmRlY28gaW52ZGVsY29tYmluZSBpbnZkZyBpbnZkaWZmIGludmRpZ3JhcGggaW52ZGlzYWJsZSBpbnZlYSBpbnZlYiBpbnZlZCBpbnZlZGNvbXBhdGlibGUgaW52ZWsgaW52ZW5kb2ZsaW5lIGludmVvbCBpbnZlcXVhbGFsd2F5cyBpbnZlcnJvcmJlbGxzIGludmVzY2tleXMgaW52ZXQgaW52ZXggaW52ZXhwYW5kdGFiIGludmV4cmMgaW52ZmVuIGludmZrIGludmZrbWFwIGludmZvbGRlbmFibGUgaW52Z2QgaW52Z2RlZmF1bHQgaW52Z3VpcHR5IGludmhpZCBpbnZoaWRkZW4gaW52aGsgaW52aGttYXAgaW52aGttYXBwIGludmhrcCBpbnZobHMgaW52aGxzZWFyY2ggaW52aWMgaW52aWNvbiBpbnZpZ25vcmVjYXNlIGludmltIGludmltYyBpbnZpbWNtZGxpbmUgaW52aW1kIGludmluY3NlYXJjaCBpbnZpbmYgaW52aW5mZXJjYXNlIGludmluc2VydG1vZGUgaW52aXMgaW52am9pbnNwYWNlcyBpbnZqcyBpbnZsYXp5cmVkcmF3IGludmxiciBpbnZsaW5lYnJlYWsgaW52bGlzcCBpbnZsaXN0IGludmxvYWRwbHVnaW5zIGludmxwbCBpbnZseiBpbnZtYSBpbnZtYWdpYyBpbnZtaCBpbnZtbCBpbnZtb2QgaW52bW9kZWxpbmUgaW52bW9kaWZpYWJsZSBpbnZtb2RpZmllZCBpbnZtb3JlIGludm1vdXNlZiBpbnZtb3VzZWZvY3VzIGludm1vdXNlaGlkZSBpbnZudSBpbnZudW1iZXIgaW52cGFzdGUgaW52cGkgaW52cHJlc2VydmVpbmRlbnQgaW52cHJldmlld3dpbmRvdyBpbnZwdncgaW52cmVhZG9ubHkgaW52cmVtYXAgaW52cmVzdG9yZXNjcmVlbiBpbnZyZXZpbnMgaW52cmkgaW52cmlnaHRsZWZ0IGludnJpZ2h0bGVmdGNtZCBpbnZybCBpbnZybGMgaW52cm8gaW52cnMgaW52cnUgaW52cnVsZXIgaW52c2IgaW52c2MgaW52c2NiIGludnNjcm9sbGJpbmQgaW52c2NzIGludnNlY3VyZSBpbnZzZnQgaW52c2hlbGxzbGFzaCBpbnZzaGlmdHJvdW5kIGludnNob3J0bmFtZSBpbnZzaG93Y21kIGludnNob3dmdWxsdGFnIGludnNob3dtYXRjaCBpbnZzaG93bW9kZSBpbnZzaSBpbnZzbSBpbnZzbWFydGNhc2UgaW52c21hcnRpbmRlbnQgaW52c21hcnR0YWIgaW52c21kIGludnNuIGludnNvbCBpbnZzcGxpdGJlbG93IGludnNwbGl0cmlnaHQgaW52c3ByIGludnNyIGludnNzbCBpbnZzdGEgaW52c3RhcnRvZmxpbmUgaW52c3dhcGZpbGUgaW52c3dmIGludnRhIGludnRhZ2JzZWFyY2ggaW52dGFncmVsYXRpdmUgaW52dGFnc3RhY2sgaW52dGJpIGludnRiaWRpIGludnRicyBpbnZ0ZXJtYmlkaSBpbnZ0ZXJzZSBpbnZ0ZXh0YXV0byBpbnZ0ZXh0bW9kZSBpbnZ0ZiBpbnZ0Z3N0IGludnRpbGRlb3AgaW52dGltZW91dCBpbnZ0aXRsZSBpbnZ0byBpbnZ0b3AgaW52dHIgaW52dHRpbWVvdXQgaW52dHR5YnVpbHRpbiBpbnZ0dHlmYXN0IGludnR4IGludnZiIGludnZpc3VhbGJlbGwgaW52d2EgaW52d2FybiBpbnZ3YiBpbnZ3ZWlyZGludmVydCBpbnZ3ZmggaW52d2lsZG1lbnUgaW52d2luZml4aGVpZ2h0IGludndpdiBpbnZ3bW51IGludndyYXAgaW52d3JhcHNjYW4gaW52d3JpdGUgaW52d3JpdGVhbnkgaW52d3JpdGViYWNrdXAgaW52d3MKKworIiB0ZXJtY2FwIGNvZGVzICh3aGljaCBjYW4gYWxzbyBiZSBzZXQpIHt7ezIKK3N5biBrZXl3b3JkIHZpbU9wdGlvbiBjb250YWluZWQJdF9BQiB0X0FGIHRfYWwgdF9BTCB0X2JjIHRfY2QgdF9jZSB0X2NsIHRfY20gdF9DbyB0X2NzIHRfQ1MgdF9DViB0X2RhIHRfZGIgdF9kbCB0X0RMIHRfRjEgdF9GMiB0X0YzIHRfRjQgdF9GNSB0X0Y2IHRfRjcgdF9GOCB0X0Y5IHRfZnMgdF9JRSB0X0lTIHRfazEgdF9LMSB0X2syIHRfazMgdF9LMyB0X2s0IHRfSzQgdF9rNSB0X0s1IHRfazYgdF9LNiB0X2s3IHRfSzcgdF9rOCB0X0s4IHRfazkgdF9LOSB0X0tBIHRfa2IgdF9rQiB0X0tCIHRfS0MgdF9rZCB0X2tEIHRfS0QgdF9rZSB0X0tFIHRfS0YgdF9LRyB0X2toIHRfS0ggdF9rSSB0X0tJIHRfS0ogdF9LSyB0X2tsIHRfS0wgdF9rTiB0X2tQIHRfa3IgdF9rcyB0X2t1IHRfbGUgdF9tYiB0X21kIHRfbWUgdF9tciB0X21zIHRfbmQgdF9vcCB0X1JJIHRfUlYgdF9TYiB0X3NlIHRfU2YgdF9zbyB0X3NyIHRfdGUgdF90aSB0X3RzIHRfdWUgdF91cyB0X3V0IHRfdmIgdF92ZSB0X3ZpIHRfdnMgdF9XUCB0X1dTIHRfeHMgdF9aSCB0X1pSCitzeW4gbWF0Y2ggICB2aW1PcHRpb24gY29udGFpbmVkCSJ0XyUxIgorc3luIG1hdGNoICAgdmltT3B0aW9uIGNvbnRhaW5lZAkidF8jMiIKK3N5biBtYXRjaCAgIHZpbU9wdGlvbiBjb250YWluZWQJInRfIzQiCitzeW4gbWF0Y2ggICB2aW1PcHRpb24gY29udGFpbmVkCSJ0X0A3Igorc3luIG1hdGNoICAgdmltT3B0aW9uIGNvbnRhaW5lZAkidF8qNyIKK3N5biBtYXRjaCAgIHZpbU9wdGlvbiBjb250YWluZWQJInRfJjgiCitzeW4gbWF0Y2ggICB2aW1PcHRpb24gY29udGFpbmVkCSJ0XyVpIgorc3luIG1hdGNoICAgdmltT3B0aW9uIGNvbnRhaW5lZAkidF9rOyIKKworIiB1bnN1cHBvcnRlZCBzZXR0aW5nczogdGhlc2UgYXJlIHN1cHBvcnRlZCBieSB2aSBidXQgZG9uJ3QgZG8gYW55dGhpbmcgaW4gdmltIHt7ezIKK3N5biBrZXl3b3JkIHZpbUVyclNldHRpbmcgY29udGFpbmVkCWhhcmR0YWJzIGh0IHcxMjAwIHczMDAgdzk2MDAgd2kgd2luZG93CisKKyIgQXV0b0J1ZiBFdmVudHMge3t7Mgorc3luIGNhc2UgaWdub3JlCitzeW4ga2V5d29yZCB2aW1BdXRvRXZlbnQgY29udGFpbmVkCUJ1ZkFkZCBCdWZDcmVhdGUgQnVmRGVsZXRlIEJ1ZkVudGVyIEJ1ZkZpbGVQb3N0IEJ1ZkZpbGVQcmUgQnVmSGlkZGVuIEJ1ZkxlYXZlIEJ1Zk5ldyBCdWZOZXdGaWxlIEJ1ZlJlYWQgQnVmUmVhZENtZCBCdWZSZWFkUG9zdCBCdWZSZWFkUHJlIEJ1ZlVubG9hZCBCdWZXaW5FbnRlciBCdWZXaW5MZWF2ZSBCdWZXaXBlb3V0IEJ1ZldyaXRlIEJ1ZldyaXRlQ21kIEJ1ZldyaXRlUG9zdCBCdWZXcml0ZVByZSBDbWQtZXZlbnQgQ21kd2luRW50ZXIgQ21kd2luTGVhdmUgQ3Vyc29ySG9sZCBFMTM1IEUxNDMgRTIwMCBFMjAxIEUyMDMgRTIwNCBFbmNvZGluZ0NoYW5nZWQgRmlsZUFwcGVuZENtZCBGaWxlQXBwZW5kUG9zdCBGaWxlQXBwZW5kUHJlIEZpbGVDaGFuZ2VkUk8gRmlsZUNoYW5nZWRTaGVsbCBGaWxlRW5jb2RpbmcgRmlsZVJlYWRDbWQgRmlsZVJlYWRQb3N0IEZpbGVSZWFkUHJlIEZpbGVUeXBlIEZpbGVXcml0ZUNtZCBGaWxlV3JpdGVQb3N0IEZpbGVXcml0ZVByZSBGaWx0ZXJSZWFkUG9zdCBGaWx0ZXJSZWFkUHJlIEZpbHRlcldyaXRlUG9zdCBGaWx0ZXJXcml0ZVByZSBGb2N1c0dhaW5lZCBGb2N1c0xvc3QgRnVuY1VuZGVmaW5lZCBHVUlFbnRlciBSZW1vdGVSZXBseSBTdGRpblJlYWRQb3N0IFN0ZGluUmVhZFByZSBTeW50YXggVGVybUNoYW5nZWQgVGVybVJlc3BvbnNlIFVzZXIgVXNlckdldHRpbmdCb3JlZCBWaW1FbnRlciBWaW1MZWF2ZSBWaW1MZWF2ZVByZSBXaW5FbnRlciBXaW5MZWF2ZQorCisiIEhpZ2hsaWdodCBjb21tb25seSB1c2VkIEdyb3VwbmFtZXMge3t7Mgorc3luIGtleXdvcmQgdmltR3JvdXAgY29udGFpbmVkCUNvbW1lbnQgQ29uc3RhbnQgU3RyaW5nIENoYXJhY3RlciBOdW1iZXIgQm9vbGVhbiBGbG9hdCBJZGVudGlmaWVyIEZ1bmN0aW9uIFN0YXRlbWVudCBDb25kaXRpb25hbCBSZXBlYXQgTGFiZWwgT3BlcmF0b3IgS2V5d29yZCBFeGNlcHRpb24gUHJlUHJvYyBJbmNsdWRlIERlZmluZSBNYWNybyBQcmVDb25kaXQgVHlwZSBTdG9yYWdlQ2xhc3MgU3RydWN0dXJlIFR5cGVkZWYgU3BlY2lhbCBTcGVjaWFsQ2hhciBUYWcgRGVsaW1pdGVyIFNwZWNpYWxDb21tZW50IERlYnVnIFVuZGVybGluZWQgSWdub3JlIEVycm9yIFRvZG8KKworIiBEZWZhdWx0IGhpZ2hsaWdodGluZyBncm91cHMge3t7Mgorc3luIGtleXdvcmQgdmltSExHcm91cCBjb250YWluZWQJQ29uY2VhbCBDdXJzb3IgQ3Vyc29ySU0gRGlmZkFkZCBEaWZmQ2hhbmdlIERpZmZEZWxldGUgRGlmZlRleHQgRGlyZWN0b3J5IEVycm9yTXNnIEZvbGRDb2x1bW4gRm9sZGVkIEluY1NlYXJjaCBMaW5lTnIgTWVudSBNb2RlTXNnIE1vcmVNc2cgTm9uVGV4dCBOb3JtYWwgUXVlc3Rpb24gU2Nyb2xsYmFyIFNlYXJjaCBTaWduQ29sdW1uIFNwZWNpYWxLZXkgU3RhdHVzTGluZSBTdGF0dXNMaW5lTkMgVGl0bGUgVG9vbHRpcCBWZXJ0U3BsaXQgVmlzdWFsIFZpc3VhbE5PUyBXYXJuaW5nTXNnIFdpbGRNZW51CitzeW4gY2FzZSBtYXRjaAorCisiIEZ1bmN0aW9uIE5hbWVzIHt7ezIKK3N5biBrZXl3b3JkIHZpbUZ1bmNOYW1lIGNvbnRhaW5lZAlhcHBlbmQgYXJnYyBhcmdpZHggYXJndiBicm93c2UgYnVmZXhpc3RzIGJ1Zmxpc3RlZCBidWZsb2FkZWQgYnVmbmFtZSBidWZuciBidWZ3aW5uciBieXRlMmxpbmUgY2hhcjJuciBjaW5kZW50IGNvbCBjb25maXJtIGNzY29wZV9jb25uZWN0aW9uIGN1cnNvciBkZWxldGUgZGlkX2ZpbGV0eXBlIGVzY2FwZSBldmVudGhhbmRsZXIgZXhlY3V0YWJsZSBleGlzdHMgZXhwYW5kIGZpbGVyZWFkYWJsZSBmaWxld3JpdGFibGUgZm5hbWVtb2RpZnkgZm9sZGNsb3NlZCBmb2xkY2xvc2VkZW5kIGZvbGRsZXZlbCBmb2xkdGV4dCBmb3JlZ3JvdW5kIGZ1bmN0aW9uIGdldGJ1ZnZhciBnZXRjaGFyIGdldGNoYXJtb2QgZ2V0Y21kbGluZSBnZXRjbWRwb3MgZ2V0Y3dkIGdldGZzaXplIGdldGZ0aW1lIGdldGxpbmUgZ2V0cmVnIGdldHJlZ3R5cGUgZ2V0d2lucG9zeCBnZXR3aW5wb3N5IGdldHdpbnZhciBnbG9iIGdsb2JwYXRoIGhhcyBoYXNtYXB0byBoaXN0YWRkIGhpc3RkZWwgaGlzdGdldCBoaXN0bnIgaGxleGlzdHMgaGxJRCBob3N0bmFtZSBpY29udiBpbmRlbnQgaW5wdXQgaW5wdXRkaWFsb2cgaW5wdXRyZXN0b3JlIGlucHV0c2F2ZSBpbnB1dHNlY3JldCBpc2RpcmVjdG9yeSBsaWJjYWxsIGxpYmNhbGxuciBsaW5lIGxpbmUyYnl0ZSBsaXNwaW5kZW50IGxvY2FsdGltZSBtYXBhcmcgbWFwY2hlY2sgbWF0Y2ggbWF0Y2hlbmQgbWF0Y2hzdHIgbW9kZSBuZXh0bm9uYmxhbmsgbnIyY2hhciBwcmV2bm9uYmxhbmsgcmVtb3RlX2V4cHIgcmVtb3RlX2ZvcmVncm91bmQgcmVtb3RlX3BlZWsgcmVtb3RlX3JlYWQgcmVtb3RlX3NlbmQgcmVuYW1lIHJlc29sdmUgc2VhcmNoIHNlYXJjaHBhaXIgc2VydmVyMmNsaWVudCBzZXJ2ZXJsaXN0IHNldGJ1ZnZhciBzZXRjbWRwb3Mgc2V0bGluZSBzZXRyZWcgc2V0d2ludmFyIHNpbXBsaWZ5IHN0cmZ0aW1lIHN0cmlkeCBzdHJsZW4gc3RycGFydCBzdHJyaWR4IHN0cnRyYW5zIHN1Ym1hdGNoIHN1YnN0aXR1dGUgc3luSUQgc3luSURhdHRyIHN5bklEdHJhbnMgc3lzdGVtIHRlbXBuYW1lIHRvbG93ZXIgdG91cHBlciB0eXBlIHZpcnRjb2wgdmlzdWFsbW9kZSB3aW5idWZuciB3aW5jb2wgd2luaGVpZ2h0IHdpbmxpbmUgd2lubnIgd2lucmVzdGNtZCB3aW53aWR0aAorCisiLS0tIHN5bnRheCBhYm92ZSBnZW5lcmF0ZWQgYnkgbWt2aW12aW0gLS0tCisKKyIgU3BlY2lhbCBWaW0gSGlnaGxpZ2h0aW5nIHt7ezEKKworIiBOdW1iZXJzIHt7ezEKKyIgPT09PT09PQorc3luIG1hdGNoIHZpbU51bWJlcgkiXDxcZFwrXChbbExdXHxcLlxkXCtcKVw9Igorc3luIG1hdGNoIHZpbU51bWJlcgkiLVxkXCtcKFtsTF1cfFwuXGRcK1wpXD0iCitzeW4gbWF0Y2ggdmltTnVtYmVyCSJcPDBbeFhdXHhcKyIKK3N5biBtYXRjaCB2aW1OdW1iZXIJIiNceFx7Nn0iCisKKyIgQWxsIHZpbUNvbW1hbmRzIGFyZSBjb250YWluZWQgYnkgdmltSXNDb21tYW5kcy4ge3t7MQorc3luIG1hdGNoIHZpbUNtZFNlcAkiWzp8XVwrIglza2lwd2hpdGUgbmV4dGdyb3VwPXZpbUFkZHJlc3MsdmltQXV0b0NtZCx2aW1Db21tYW5kLHZpbUV4dENtZCx2aW1GaWx0ZXIsdmltTGV0LHZpbU1hcCx2aW1NYXJrLHZpbVNldCx2aW1TeW50YXgsdmltVXNlckNtZAorc3luIG1hdGNoIHZpbUlzQ29tbWFuZAkiXDxcYVwrXD4iCWNvbnRhaW5zPXZpbUNvbW1hbmQKK3N5biBtYXRjaCB2aW1WYXIJCSJcPFtid2dsc2F2XTpcS1xrKlw+Igorc3luIG1hdGNoIHZpbVZhciBjb250YWluZWQJIlw8XEtcaypcPiIKKworIiBJbnNlcnRpb25zIEFuZCBBcHBlbmRzOiBpbnNlcnQgYXBwZW5kIHt7ezEKKyIgPT09PT09PT09PT09PT09PT09PT09PT0KK3N5biByZWdpb24gdmltSW5zZXJ0CW1hdGNoZ3JvdXA9dmltQ29tbWFuZCBzdGFydD0iXls6IFx0XSpcKFxkXCtcKCxcZFwrXClcPVwpXD1hXCVbcHBlbmRdJCIJbWF0Y2hncm91cD12aW1Db21tYW5kIGVuZD0iXlwuJCIiCitzeW4gcmVnaW9uIHZpbUluc2VydAltYXRjaGdyb3VwPXZpbUNvbW1hbmQgc3RhcnQ9Il5bOiBcdF0qXChcZFwrXCgsXGRcK1wpXD1cKVw9Y1wlW2hhbmdlXSQiCW1hdGNoZ3JvdXA9dmltQ29tbWFuZCBlbmQ9Il5cLiQiIgorc3luIHJlZ2lvbiB2aW1JbnNlcnQJbWF0Y2hncm91cD12aW1Db21tYW5kIHN0YXJ0PSJeWzogXHRdKlwoXGRcK1woLFxkXCtcKVw9XClcPWlcJVtuc2VydF0kIgltYXRjaGdyb3VwPXZpbUNvbW1hbmQgZW5kPSJeXC4kIiIKKworIiBCZWhhdmUhIHt7ezEKKyIgPT09PT09PQorc3luIG1hdGNoICAgdmltQmVoYXZlCSJcPGJlXCVbaGF2ZV1cPiIgc2tpcHdoaXRlIG5leHRncm91cD12aW1CZWhhdmVNb2RlbCx2aW1CZWhhdmVFcnJvcgorc3luIGtleXdvcmQgdmltQmVoYXZlTW9kZWwgY29udGFpbmVkCW1zd2luCXh0ZXJtCitzeW4gbWF0Y2ggICB2aW1CZWhhdmVFcnJvciBjb250YWluZWQJIlteIF1cKyIKKworIiBGaWxldHlwZXMge3t7MQorIiA9PT09PT09PT0KK3N5biBtYXRjaCAgIHZpbUZpbGV0eXBlCSJcPGZpbGV0XCVbeXBlXVwoXHNcK1xJXGkqXCkqXCh8XHwkXCkiCXNraXB3aGl0ZSBjb250YWlucz12aW1GVENtZCx2aW1GVE9wdGlvbix2aW1GVEVycm9yCitzeW4gbWF0Y2ggICB2aW1GVEVycm9yICBjb250YWluZWQJIlxJXGkqIgorc3luIGtleXdvcmQgdmltRlRDbWQgICAgY29udGFpbmVkCWZpbGV0W3lwZV0KK3N5biBrZXl3b3JkIHZpbUZUT3B0aW9uIGNvbnRhaW5lZAlkZXRlY3QgaW5kZW50IG9mZiBvbiBwbHVnaW4KKworIiBBdWdyb3VwIDogdmltQXVncm91cEVycm9yIHJlbW92ZWQgYmVjYXVzZSBsb25nIGF1Z3JvdXBzIGNhdXNlZCBzeW5jJ2luZyBwcm9ibGVtcy4ge3t7MQorIiA9PT09PT09IDogVHJhZGUtb2ZmOiBJbmNyZWFzaW5nIHN5bmNsaW5lcyB3aXRoIHNsb3dlciBlZGl0aW5nIHZzIGF1Z3JvdXAgRU5EIGVycm9yIGNoZWNraW5nLgorc3luIGNsdXN0ZXIgdmltQXVncm91cExpc3QJY29udGFpbnM9dmltSXNDb21tYW5kLHZpbUZ1bmN0aW9uLHZpbUZ1bmN0aW9uRXJyb3IsdmltTGluZUNvbW1lbnQsdmltU3BlY0ZpbGUsdmltT3Blcix2aW1OdW1iZXIsdmltQ29tbWVudCx2aW1TdHJpbmcsdmltU3Vic3QsdmltTWFyayx2aW1SZWdpc3Rlcix2aW1BZGRyZXNzLHZpbUZpbHRlcix2aW1DbXBseFJlcGVhdCx2aW1Db21tZW50LHZpbUxldCx2aW1TZXQsdmltQXV0b0NtZCx2aW1SZWdpb24sdmltU3luTGluZSx2aW1Ob3RhdGlvbix2aW1DdHJsQ2hhcix2aW1GdW5jVmFyLHZpbUNvbnRpbnVlCitzeW4gcmVnaW9uICB2aW1BdWdyb3VwCXN0YXJ0PSJcPGF1Z1wlW3JvdXBdXD5cc1wrXEtcayoiIGVuZD0iXDxhdWdcJVtyb3VwXVw+XHNcK1tlRV1bbk5dW2REXVw+Igljb250YWlucz12aW1BdWdyb3VwS2V5LHZpbUF1dG9DbWQsQHZpbUF1Z3JvdXBMaXN0IGtlZXBlbmQKK3N5biBtYXRjaCAgIHZpbUF1Z3JvdXBFcnJvcgkiXDxhdWdcJVtyb3VwXVw+XHNcK1tlRV1bbk5dW2REXVw+Igorc3luIGtleXdvcmQgdmltQXVncm91cEtleSBjb250YWluZWQJYXVnW3JvdXBdCisKKyIgRnVuY3Rpb25zIDogVGFnIGlzIHByb3ZpZGVkIGZvciB0aG9zZSB3aG8gd2lzaCB0byBoaWdobGlnaHQgdGFnZ2VkIGZ1bmN0aW9ucyB7e3sxCisiID09PT09PT09PQorc3luIGNsdXN0ZXIgdmltRnVuY0xpc3QJY29udGFpbnM9dmltRnVuY0tleSxUYWcsdmltRnVuY1NJRAorc3luIGNsdXN0ZXIgdmltRnVuY0JvZHlMaXN0CWNvbnRhaW5zPXZpbUlzQ29tbWFuZCx2aW1GdW5jdGlvbix2aW1GdW5jdGlvbkVycm9yLHZpbUZ1bmNCb2R5LHZpbUxpbmVDb21tZW50LHZpbVNwZWNGaWxlLHZpbU9wZXIsdmltTnVtYmVyLHZpbUNvbW1lbnQsdmltU3RyaW5nLHZpbVN1YnN0LHZpbU1hcmssdmltUmVnaXN0ZXIsdmltQWRkcmVzcyx2aW1GaWx0ZXIsdmltQ21wbHhSZXBlYXQsdmltQ29tbWVudCx2aW1MZXQsdmltU2V0LHZpbUF1dG9DbWQsdmltUmVnaW9uLHZpbVN5bkxpbmUsdmltTm90YXRpb24sdmltQ3RybENoYXIsdmltRnVuY1Zhcix2aW1Db250aW51ZQorc3luIG1hdGNoICAgdmltRnVuY3Rpb25FcnJvcgkiXDxmdVwlW25jdGlvbl0hXD1cc1wrXHpzXFVcaVx7LX1cemVccyooIiAgICAgICAgICAgICAgICAJY29udGFpbnM9dmltRnVuY0tleSx2aW1GdW5jQmxhbmsgbmV4dGdyb3VwPXZpbUZ1bmNCb2R5CitzeW4gbWF0Y2ggICB2aW1GdW5jdGlvbgkiXDxmdVwlW25jdGlvbl0hXD1cc1wrXCg8W3NTXVtpSV1bZERdPlx8W1NzXTpcfFx1XClcaSpcemVccyooIgljb250YWlucz1AdmltRnVuY0xpc3QgbmV4dGdyb3VwPXZpbUZ1bmNCb2R5CitzeW4gcmVnaW9uICB2aW1GdW5jQm9keSAgY29udGFpbmVkCXN0YXJ0PSIpIgllbmQ9Ilw8ZW5kZlwlW3VuY3Rpb25dIgkJY29udGFpbnM9QHZpbUZ1bmNCb2R5TGlzdAorc3luIG1hdGNoICAgdmltRnVuY1ZhciAgIGNvbnRhaW5lZAkiYTpcKFxJXGkqXHxcZFwrXCkiCitzeW4gbWF0Y2ggICB2aW1GdW5jU0lEICAgY29udGFpbmVkCSJcYzxzaWQ+XHxcPHM6Igorc3luIGtleXdvcmQgdmltRnVuY0tleSAgIGNvbnRhaW5lZAlmdVtuY3Rpb25dCitzeW4gbWF0Y2ggICB2aW1GdW5jQmxhbmsgY29udGFpbmVkCSJcc1wrIgorCitzeW4ga2V5d29yZCB2aW1QYXR0ZXJuICBjb250YWluZWQJc3RhcnQJc2tpcAllbmQKKworIiBPcGVyYXRvcnM6IHt7ezEKKyIgPT09PT09PT09CitzeW4gY2x1c3RlciB2aW1PcGVyR3JvdXAJY29udGFpbnM9dmltT3Blcix2aW1PcGVyUGFyZW4sdmltTnVtYmVyLHZpbVN0cmluZworc3luIG1hdGNoICB2aW1PcGVyICAgICAgICAgICAgICAgICAJIlwoPT1cfCE9XHw+PVx8PD1cfD1cflx8IVx+XHw+XHw8XHw9XClbPyNdXHswLDJ9Iglza2lwd2hpdGUgbmV4dGdyb3VwPXZpbVN0cmluZyx2aW1TcGVjRmlsZQorc3luIG1hdGNoICB2aW1PcGVyICAgICAgICAgICAgICAgICAJInx8XHwmJlx8Wy0rLl0iCXNraXB3aGl0ZSBuZXh0Z3JvdXA9dmltU3RyaW5nLHZpbVNwZWNGaWxlCitzeW4gcmVnaW9uIHZpbU9wZXJQYXJlbgltYXRjaGdyb3VwPXZpbU9wZXIgc3RhcnQ9IigiIGVuZD0iKSIgY29udGFpbnM9QHZpbU9wZXJHcm91cAorc3luIG1hdGNoICB2aW1PcGVyRXJyb3IJIikiCisKKyIgU3BlY2lhbCBGaWxlbmFtZXMsIE1vZGlmaWVycywgRXh0ZW5zaW9uIFJlbW92YWw6IHt7ezEKKyIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N5biBtYXRjaCB2aW1TcGVjRmlsZQkiPGNcKHdvcmRcfFdPUkRcKT4iCW5leHRncm91cD12aW1TcGVjRmlsZU1vZCx2aW1TdWJzdAorc3luIG1hdGNoIHZpbVNwZWNGaWxlCSI8XChbYWNzXWZpbGVcfGFtYXRjaFx8YWJ1ZlwpPiIJbmV4dGdyb3VwPXZpbVNwZWNGaWxlTW9kLHZpbVN1YnN0CitzeW4gbWF0Y2ggdmltU3BlY0ZpbGUJIlxzJVsgXHQ6XSJtcz1zKzEsbWU9ZS0xCW5leHRncm91cD12aW1TcGVjRmlsZU1vZCx2aW1TdWJzdAorc3luIG1hdGNoIHZpbVNwZWNGaWxlCSJccyUkIm1zPXMrMQluZXh0Z3JvdXA9dmltU3BlY0ZpbGVNb2QsdmltU3Vic3QKK3N5biBtYXRjaCB2aW1TcGVjRmlsZQkiXHMlPCJtcz1zKzEsbWU9ZS0xCW5leHRncm91cD12aW1TcGVjRmlsZU1vZCx2aW1TdWJzdAorc3luIG1hdGNoIHZpbVNwZWNGaWxlCSIjXGRcK1x8WyMlXTxcPiIJbmV4dGdyb3VwPXZpbVNwZWNGaWxlTW9kLHZpbVN1YnN0CitzeW4gbWF0Y2ggdmltU3BlY0ZpbGVNb2QJIlwoOltwaHRyZV1cKVwrIgljb250YWluZWQKKworIiBVc2VyLVNwZWNpZmllZCBDb21tYW5kczoge3t7MQorIiA9PT09PT09PT09PT09PT09PT09PT09PQorc3luIGNsdXN0ZXIgdmltVXNlckNtZExpc3QJY29udGFpbnM9dmltQWRkcmVzcyx2aW1TeW50YXgsdmltSGlnaGxpZ2h0LHZpbUF1dG9DbWQsdmltQ21wbHhSZXBlYXQsdmltQ29tbWVudCx2aW1DdHJsQ2hhcix2aW1Fc2NhcGVCcmFjZSx2aW1GaWx0ZXIsdmltRnVuYyx2aW1GdW5jdGlvbix2aW1Jc0NvbW1hbmQsdmltTWFyayx2aW1Ob3RhdGlvbix2aW1OdW1iZXIsdmltT3Blcix2aW1SZWdpb24sdmltUmVnaXN0ZXIsdmltTGV0LHZpbVNldCx2aW1TZXRFcXVhbCx2aW1TZXRTdHJpbmcsdmltU3BlY0ZpbGUsdmltU3RyaW5nLHZpbVN1YnN0LHZpbVN1YnN0UmVwLHZpbVN1YnN0UmFuZ2UsdmltU3luTGluZQorc3luIGtleXdvcmQgdmltVXNlckNvbW1hbmQJY29udGFpbmVkCWNvbVttYW5kXQorc3luIG1hdGNoICAgdmltVXNlckNtZAkiXDxjb21cJVttYW5kXSFcPVw+LiokIgljb250YWlucz12aW1Vc2VyQXR0cmIsdmltVXNlckNvbW1hbmQsQHZpbVVzZXJDbWRMaXN0CitzeW4gbWF0Y2ggICB2aW1Vc2VyQXR0cmIJY29udGFpbmVkCSItblwlW2FyZ3NdPVswMSo/K10iCWNvbnRhaW5zPXZpbVVzZXJBdHRyYktleSx2aW1PcGVyCitzeW4gbWF0Y2ggICB2aW1Vc2VyQXR0cmIJY29udGFpbmVkCSItY29tXCVbcGxldGVdPSIJY29udGFpbnM9dmltVXNlckF0dHJiS2V5LHZpbU9wZXIgbmV4dGdyb3VwPXZpbVVzZXJBdHRyYkNtcGx0LHZpbVVzZXJDbWRFcnJvcgorc3luIG1hdGNoICAgdmltVXNlckF0dHJiCWNvbnRhaW5lZAkiLXJhXCVbbmdlXVwoPSVcfD1cZFwrXClcPSIJY29udGFpbnM9dmltTnVtYmVyLHZpbU9wZXIsdmltVXNlckF0dHJiS2V5CitzeW4gbWF0Y2ggICB2aW1Vc2VyQXR0cmIJY29udGFpbmVkCSItY291XCVbbnRdPVxkXCsiCWNvbnRhaW5zPXZpbU51bWJlcix2aW1PcGVyLHZpbVVzZXJBdHRyYktleQorc3luIG1hdGNoICAgdmltVXNlckF0dHJiCWNvbnRhaW5lZAkiLWJhbmdcPVw+Igljb250YWlucz12aW1PcGVyLHZpbVVzZXJBdHRyYktleQorc3luIG1hdGNoICAgdmltVXNlckF0dHJiCWNvbnRhaW5lZAkiLWJhclw+Igljb250YWlucz12aW1PcGVyLHZpbVVzZXJBdHRyYktleQorc3luIG1hdGNoICAgdmltVXNlckF0dHJiCWNvbnRhaW5lZAkiLXJlXCVbZ2lzdGVyXVw+Igljb250YWlucz12aW1PcGVyLHZpbVVzZXJBdHRyYktleQorc3luIG1hdGNoICAgdmltVXNlckNtZEVycm9yCWNvbnRhaW5lZAkiXFNcK1w+Igorc3luIGNhc2UgaWdub3JlCitzeW4ga2V5d29yZCB2aW1Vc2VyQXR0cmJLZXkgICBjb250YWluZWQJYmFyCWJhbltnXQljb3VbbnRdCXJhW25nZV0gY29tW3BsZXRlXQluW2FyZ3NdCXJlW2dpc3Rlcl0KK3N5biBrZXl3b3JkIHZpbVVzZXJBdHRyYkNtcGx0IGNvbnRhaW5lZAlhdWdyb3VwIGJ1ZmZlciBjb21tYW5kIGRpciBlbnZpcm9ubWVudCBldmVudCBleHByZXNzaW9uIGZpbGUgZnVuY3Rpb24gaGVscCBoaWdobGlnaHQgbWFwcGluZyBtZW51IG9wdGlvbiB0YWcgdGFnX2xpc3RmaWxlcyB2YXIKK3N5biBjYXNlIG1hdGNoCitzeW4gbWF0Y2ggICB2aW1Vc2VyQXR0cmJDbXBsdCBjb250YWluZWQJImN1c3RvbSxcdVx3KiIKKworIiBFcnJvcnM6IHt7ezEKKyIgPT09PT09CitzeW4gbWF0Y2ggIHZpbUVsc2VJZkVycgkiXDxlbHNlXHNcK2lmXD4iCisKKyIgTG93ZXIgUHJpb3JpdHkgQ29tbWVudHM6IGFmdGVyIHNvbWUgdmltIGNvbW1hbmRzLi4uIHt7ezEKKyIgPT09PT09PT09PT09PT09PT09PT09PT0KK3N5biBtYXRjaCAgdmltQ29tbWVudAlleGNsdWRlbmwgK1xzIlteXC06LiUjPSpdLiokK2xjPTEJY29udGFpbnM9QHZpbUNvbW1lbnRHcm91cCx2aW1Db21tZW50U3RyaW5nCitzeW4gbWF0Y2ggIHZpbUNvbW1lbnQJK1w8ZW5kaWZcc1wrIi4qJCtsYz01CWNvbnRhaW5zPUB2aW1Db21tZW50R3JvdXAsdmltQ29tbWVudFN0cmluZworc3luIG1hdGNoICB2aW1Db21tZW50CStcPGVsc2Vcc1wrIi4qJCtsYz00CWNvbnRhaW5zPUB2aW1Db21tZW50R3JvdXAsdmltQ29tbWVudFN0cmluZworc3luIHJlZ2lvbiB2aW1Db21tZW50U3RyaW5nCWNvbnRhaW5lZCBvbmVsaW5lIHN0YXJ0PSdcU1xzXCsiJ21zPXMrMQllbmQ9JyInCisKKyIgRW52aXJvbm1lbnQgVmFyaWFibGVzOiB7e3sxCisiID09PT09PT09PT09PT09PT09PT09PQorc3luIG1hdGNoIHZpbUVudnZhcgkiXCRcSVxpKiIKK3N5biBtYXRjaCB2aW1FbnZ2YXIJIlwke1xJXGkqfSIKKworIiBJbi1TdHJpbmcgU3BlY2lhbHM6IHt7ezEKKyIgVHJ5IHRvIGNhdGNoIHN0cmluZ3MsIGlmIG5vdGhpbmcgZWxzZSBtYXRjaGVzICh0aGVyZWZvcmUgaXQgbXVzdCBwcmVjZWRlIHRoZSBvdGhlcnMhKQorIiAgdmltRXNjYXBlQnJhY2UgaGFuZGxlcyBbIl0gIFtdIl0gKGllLiAicyBkb24ndCB0ZXJtaW5hdGUgc3RyaW5nIGluc2lkZSBbXSkKK3N5biByZWdpb24gdmltRXNjYXBlQnJhY2UJb25lbGluZSBjb250YWluZWQgdHJhbnNwYXJlbnQJc3RhcnQ9IlteXFxdXChcXFxcXCkqXFtcXlw9XF1cPSIgc2tpcD0iXFxcXFx8XFxcXSIgZW5kPSJcXSJtZT1lLTEKK3N5biBtYXRjaCAgdmltUGF0U2VwRXJyCWNvbnRhaW5lZAkiXFwpIgorc3luIG1hdGNoICB2aW1QYXRTZXAJY29udGFpbmVkCSJcXHwiCitzeW4gcmVnaW9uIHZpbVBhdFNlcFpvbmUJb25lbGluZSBjb250YWluZWQgdHJhbnNwYXJlbnQgbWF0Y2hncm91cD12aW1QYXRTZXAgc3RhcnQ9IlxcJVw9KCIgc2tpcD0iXFxcXCIgZW5kPSJcXCkiCWNvbnRhaW5zPUB2aW1TdHJpbmdHcm91cAorc3luIHJlZ2lvbiB2aW1QYXRTZXBab25lCW9uZWxpbmUgY29udGFpbmVkIG1hdGNoZ3JvdXA9dmltUGF0U2VwIHN0YXJ0PSJcXCVcPSgiIHNraXA9IlxcXFwiIGVuZD0iXFwpIgljb250YWlucz1AdmltU3RyaW5nR3JvdXAKK3N5biByZWdpb24gdmltUGF0UmVnaW9uCWNvbnRhaW5lZCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXZpbVBhdFNlcCBzdGFydD0iXFxbeiVdXD0oIiBlbmQ9IlxcKSIJY29udGFpbnM9QHZpbVN1YnN0TGlzdCBvbmVsaW5lCitzeW4gbWF0Y2ggIHZpbU5vdFBhdFNlcAljb250YWluZWQJIlxcXFwiCitzeW4gY2x1c3RlciB2aW1TdHJpbmdHcm91cAljb250YWlucz12aW1Fc2NhcGVCcmFjZSx2aW1QYXRTZXAsdmltTm90UGF0U2VwLHZpbVBhdFNlcEVycix2aW1QYXRTZXBab25lCitzeW4gcmVnaW9uIHZpbVN0cmluZwlvbmVsaW5lIGtlZXBlbmQJc3RhcnQ9K1teOmEtekEtWj4hXFxdIitsYz0xIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKwljb250YWlucz1AdmltU3RyaW5nR3JvdXAKK3N5biByZWdpb24gdmltU3RyaW5nCW9uZWxpbmUga2VlcGVuZAlzdGFydD0rW146YS16QS1aPiFcXF0nK2xjPTEgZW5kPSsnKwljb250YWlucz1AdmltU3RyaW5nR3JvdXAKK3N5biByZWdpb24gdmltU3RyaW5nCW9uZWxpbmUJc3RhcnQ9Kz0hK2xjPTEJc2tpcD0rXFxcXFx8XFwhKyBlbmQ9KyErCWNvbnRhaW5zPUB2aW1TdHJpbmdHcm91cAorc3luIHJlZ2lvbiB2aW1TdHJpbmcJb25lbGluZQlzdGFydD0iPSsibGM9MQlza2lwPSJcXFxcXHxcXCsiIGVuZD0iKyIJY29udGFpbnM9QHZpbVN0cmluZ0dyb3VwCitzeW4gcmVnaW9uIHZpbVN0cmluZwlvbmVsaW5lCXN0YXJ0PSJbXlxcXStccypbXmEtekEtWjAtOS4gXHRdImxjPTEgc2tpcD0iXFxcXFx8XFwrIiBlbmQ9IisiCWNvbnRhaW5zPUB2aW1TdHJpbmdHcm91cAorc3luIHJlZ2lvbiB2aW1TdHJpbmcJb25lbGluZQlzdGFydD0iXHMvXHMqXEEibGM9MSBza2lwPSJcXFxcXHxcXCsiIGVuZD0iLyIJY29udGFpbnM9QHZpbVN0cmluZ0dyb3VwCitzeW4gbWF0Y2ggIHZpbVN0cmluZwljb250YWluZWQJKyJbXiJdKlxcJCsJc2tpcG5sIG5leHRncm91cD12aW1TdHJpbmdDb250CitzeW4gbWF0Y2ggIHZpbVN0cmluZ0NvbnQJY29udGFpbmVkCStcKFxcXFxcfC5cKVx7LX1bXlxcXSIrCisKKyIgU3Vic3RpdHV0aW9uczoge3t7MQorIiA9PT09PT09PT09PT09CitzeW4gY2x1c3RlciB2aW1TdWJzdExpc3QJY29udGFpbnM9dmltUGF0U2VwLHZpbVBhdFJlZ2lvbix2aW1QYXRTZXBFcnIsdmltU3Vic3RUd29CUyx2aW1TdWJzdFJhbmdlLHZpbU5vdGF0aW9uCitzeW4gY2x1c3RlciB2aW1TdWJzdFJlcExpc3QJY29udGFpbnM9dmltU3Vic3RTdWJzdHIsdmltU3Vic3RUd29CUyx2aW1Ob3RhdGlvbgorc3luIGNsdXN0ZXIgdmltU3Vic3RMaXN0CWFkZD12aW1Db2xsZWN0aW9uCitzeW4gbWF0Y2ggICB2aW1TdWJzdAkiXCg6XCtccypcfF5ccypcfHxccypcKVw8c1wlW3Vic3RpdHV0ZV1bOls6YWxwaGE6XV1cQCEiIG5leHRncm91cD12aW1TdWJzdFBhdAorc3luIG1hdGNoICAgdmltU3Vic3QJInNcJVt1YnN0aXR1dGVdWzpbOmFscGhhOl1dXEAhIgluZXh0Z3JvdXA9dmltU3Vic3RQYXQgY29udGFpbmVkCitzeW4gbWF0Y2ggICB2aW1TdWJzdAkiL1x6c3NcJVt1YnN0aXR1dGVdXHplLyIJbmV4dGdyb3VwPXZpbVN1YnN0UGF0CitzeW4gbWF0Y2ggICB2aW1TdWJzdDEgICAgICAgY29udGFpbmVkCSJzXCVbdWJzdGl0dXRlXVw+IgluZXh0Z3JvdXA9dmltU3Vic3RQYXQKK3N5biByZWdpb24gIHZpbVN1YnN0UGF0ICAgICBjb250YWluZWQJbWF0Y2hncm91cD12aW1TdWJzdERlbGltIHN0YXJ0PSJceihbXmEtekEtWiggXHRbXF0mXVwpInJzPXMrMSBza2lwPSJcXFxcXHxcXFx6MSIgZW5kPSJcejEicmU9ZS0xLG1lPWUtMQkgY29udGFpbnM9QHZpbVN1YnN0TGlzdAluZXh0Z3JvdXA9dmltU3Vic3RSZXA0CW9uZWxpbmUKK3N5biByZWdpb24gIHZpbVN1YnN0UmVwNCAgICBjb250YWluZWQJbWF0Y2hncm91cD12aW1TdWJzdERlbGltIHN0YXJ0PSJceiguXCkiIHNraXA9IlxcXFxcfFxcXHoxIiBlbmQ9Ilx6MSIgbWF0Y2hncm91cD12aW1Ob3RhdGlvbiBlbmQ9IjxbY0NdW3JSXT4iIGNvbnRhaW5zPUB2aW1TdWJzdFJlcExpc3QJbmV4dGdyb3VwPXZpbVN1YnN0RmxhZ0VycglvbmVsaW5lCitzeW4gcmVnaW9uICB2aW1Db2xsZWN0aW9uICAgY29udGFpbmVkIHRyYW5zcGFyZW50CXN0YXJ0PSJcXFxAPCFcWyIgc2tpcD0iXFxcWyIgZW5kPSJcXSIJY29udGFpbnM9dmltQ29sbENsYXNzCitzeW4gbWF0Y2ggICB2aW1Db2xsQ2xhc3NFcnIgY29udGFpbmVkCSJcWzouXHstXH06XF0iCitzeW4gbWF0Y2ggICB2aW1Db2xsQ2xhc3MgICAgY29udGFpbmVkIHRyYW5zcGFyZW50CSJcWzpcKGFsbnVtXHxhbHBoYVx8YmxhbmtcfGNudHJsXHxkaWdpdFx8Z3JhcGhcfGxvd2VyXHxwcmludFx8cHVuY3RcfHNwYWNlXHx1cHBlclx8eGRpZ2l0XHxyZXR1cm5cfHRhYlx8ZXNjYXBlXHxiYWNrc3BhY2VcKTpcXSIKK3N5biBtYXRjaCAgIHZpbVN1YnN0U3Vic3RyICBjb250YWluZWQJIlxcelw9XGQiCitzeW4gbWF0Y2ggICB2aW1TdWJzdFR3b0JTICAgY29udGFpbmVkCSJcXFxcIgorc3luIG1hdGNoICAgdmltU3Vic3RGbGFnRXJyIGNvbnRhaW5lZAkiW148IFx0XHJdXCsiIGNvbnRhaW5zPXZpbVN1YnN0RmxhZ3MKK3N5biBtYXRjaCAgIHZpbVN1YnN0RmxhZ3MgICBjb250YWluZWQJIlsmY2VnaUlwcl1cKyIKKworIiAnU3RyaW5nJzoge3t7MQorc3luIG1hdGNoICB2aW1TdHJpbmcJIlteKCxdJ1teJ11cey19JyJsYz0xCWNvbnRhaW5zPUB2aW1TdHJpbmdHcm91cAorCisiIE1hcmtzLCBSZWdpc3RlcnMsIEFkZHJlc3NlcywgRmlsdGVyczoge3t7MQorc3luIG1hdGNoICB2aW1NYXJrCSInW2EtekEtWjAtOV1cemVbLSssIV0iCW5leHRncm91cD12aW1PcGVyLHZpbU1hcmtOdW1iZXIsdmltU3Vic3QKK3N5biBtYXRjaCAgdmltTWFyawkiJ1s8Pl1cemVbLSssIV0iCQluZXh0Z3JvdXA9dmltT3Blcix2aW1NYXJrTnVtYmVyLHZpbVN1YnN0CitzeW4gbWF0Y2ggIHZpbU1hcmsJIixcenMnWzw+XVx6ZSIJCW5leHRncm91cD12aW1PcGVyLHZpbU1hcmtOdW1iZXIsdmltU3Vic3QKK3N5biBtYXRjaCAgdmltTWFyawkiWyEsOl1cenMnW2EtekEtWjAtOV0iCW5leHRncm91cD12aW1PcGVyLHZpbU1hcmtOdW1iZXIsdmltU3Vic3QKK3N5biBtYXRjaCAgdmltTWFyawkiXDxub3JtXCVbYWxdXHNcenMnW2EtekEtWjAtOV0iCW5leHRncm91cD12aW1PcGVyLHZpbU1hcmtOdW1iZXIsdmltU3Vic3QKK3N5biBtYXRjaCAgdmltTWFya051bWJlcgkiWy0rXVxkXCsiCQluZXh0Z3JvdXA9dmltU3Vic3QgY29udGFpbmVkIGNvbnRhaW5zPXZpbU9wZXIKK3N5biBtYXRjaCAgdmltUGxhaW5NYXJrIGNvbnRhaW5lZAkiJ1thLXpBLVowLTldIgorCitzeW4gbWF0Y2ggIHZpbVJlZ2lzdGVyCSdbXigsOy5dIlthLXpBLVowLTkuJSM6X1wtL11bXmEtekEtWl8iXSdsYz0xLG1lPWUtMQorc3luIG1hdGNoICB2aW1SZWdpc3RlcgknXDxub3JtXHNcKyJbYS16QS1aMC05XSdsYz01CitzeW4gbWF0Y2ggIHZpbVJlZ2lzdGVyCSdcPG5vcm1hbFxzXCsiW2EtekEtWjAtOV0nbGM9Nworc3luIG1hdGNoICB2aW1QbGFpblJlZ2lzdGVyIGNvbnRhaW5lZAknIlthLXpBLVowLTlcLTouJSMqKz1dJworCitzeW4gbWF0Y2ggIHZpbUFkZHJlc3MJIixbLiRdImxjPTEJc2tpcHdoaXRlIG5leHRncm91cD12aW1TdWJzdDEKK3N5biBtYXRjaCAgdmltQWRkcmVzcwkiJVxhIm1lPWUtMQlza2lwd2hpdGUgbmV4dGdyb3VwPXZpbVN0cmluZyx2aW1TdWJzdDEKKworc3luIG1hdGNoICB2aW1GaWx0ZXIgY29udGFpbmVkCSJeIS5cey19XCh8XHwkXCkiCQljb250YWlucz12aW1TcGVjRmlsZQorc3luIG1hdGNoICB2aW1GaWx0ZXIgY29udGFpbmVkCSJcQSEuXHstfVwofFx8JFwpIm1zPXMrMQljb250YWlucz12aW1TcGVjRmlsZQorCisiIENvbXBsZXggcmVwZWF0cyAoOmggY29tcGxleC1yZXBlYXQpIHt7ezEKK3N5biBtYXRjaCAgdmltQ21wbHhSZXBlYXQJJ1teYS16QS1aXy9cXF1xWzAtOWEtekEtWiJdJ2xjPTEKK3N5biBtYXRjaCAgdmltQ21wbHhSZXBlYXQJJ0BbMC05YS16Ii49QDpdXHplXCgkXHxbXmEtekEtWl1cKScKKworIiBTZXQgY29tbWFuZCBhbmQgYXNzb2NpYXRlZCBzZXQtb3B0aW9ucyAodmltT3B0aW9ucykgd2l0aCBjb21tZW50IHt7ezEKK3N5biByZWdpb24gdmltU2V0CQltYXRjaGdyb3VwPXZpbUNvbW1hbmQgc3RhcnQ9Ilw8c2V0bG9jYWxcfHNldFw+IiBlbmQ9InwibWU9ZS0xIGVuZD0iJCIgbWF0Y2hncm91cD12aW1Ob3RhdGlvbiBlbmQ9IjxbY0NdW3JSXT4iIGtlZXBlbmQgY29udGFpbnM9dmltU2V0RXF1YWwsdmltT3B0aW9uLHZpbUVyclNldHRpbmcsdmltQ29tbWVudCx2aW1TZXRTdHJpbmcsdmltU2V0TW9kCitzeW4gcmVnaW9uIHZpbVNldEVxdWFsICBjb250YWluZWQJc3RhcnQ9Ij0iCXNraXA9IlxcXFxcfFxcXHMiIGVuZD0iW3wgXHRdXHwkIm1lPWUtMSBjb250YWlucz12aW1DdHJsQ2hhcix2aW1TZXRTZXAsdmltTm90YXRpb24KK3N5biByZWdpb24gdmltU2V0U3RyaW5nIGNvbnRhaW5lZAlzdGFydD0rPSIraHM9cysxCXNraXA9K1xcXFxcfFxcIisgIGVuZD0rIisJY29udGFpbnM9dmltQ3RybENoYXIKK3N5biBtYXRjaCAgdmltU2V0U2VwICAgIGNvbnRhaW5lZAkiWyw6XSIKK3N5biBtYXRjaCAgdmltU2V0TW9kCWNvbnRhaW5lZAkiJnZpbVx8WyEmXVx8YWxsJiIKKworIiBMZXQge3t7MQorIiA9PT0KK3N5biBrZXl3b3JkIHZpbUxldAlsZXQJdW5sW2V0XQlza2lwd2hpdGUgbmV4dGdyb3VwPXZpbVZhcgorCisiIEF1dG9jbWQge3t7MQorIiA9PT09PT09CitzeW4gbWF0Y2ggICB2aW1BdXRvRXZlbnRMaXN0CWNvbnRhaW5lZAkiXCghXHNcK1wpXD1cKFxhXCssXCkqXGFcKyIJY29udGFpbnM9dmltQXV0b0V2ZW50IG5leHRncm91cD12aW1BdXRvQ21kU3BhY2UKK3N5biBtYXRjaCAgIHZpbUF1dG9DbWRTcGFjZQljb250YWluZWQJIlxzXCsiCW5leHRncm91cD12aW1BdXRvQ21kU2Z4TGlzdAorc3luIG1hdGNoICAgdmltQXV0b0NtZFNmeExpc3QJY29udGFpbmVkCSJcUyoiCitzeW4ga2V5d29yZCB2aW1BdXRvQ21kCWF1W3RvY21kXSBkb1thdXRvY21kXSBkb2F1dG9hW2xsXQlza2lwd2hpdGUgbmV4dGdyb3VwPXZpbUF1dG9FdmVudExpc3QKKworIiBFY2hvIGFuZCBFeGVjdXRlIC0tIHByZWZlciBzdHJpbmdzISB7e3sxCisiID09PT09PT09PT09PT09PT0KK3N5biByZWdpb24gIHZpbUVjaG8Jb25lbGluZSBleGNsdWRlbmwgbWF0Y2hncm91cD12aW1Db21tYW5kIHN0YXJ0PSJcPGVjXCVbaG9dXD4iIHNraXA9IlwoXFxcXFwpKlxcfCIgZW5kPSIkXHx8IiBjb250YWlucz12aW1GdW5jLHZpbVN0cmluZyx2YXJWYXIKK3N5biByZWdpb24gIHZpbUV4ZWN1dGUJb25lbGluZSBleGNsdWRlbmwgbWF0Y2hncm91cD12aW1Db21tYW5kIHN0YXJ0PSJcPGV4ZVwlW2N1dGVdXD4iIHNraXA9IlwoXFxcXFwpKlxcfCIgZW5kPSIkXHx8XHw8W2NDXVtyUl0+IiBjb250YWlucz12aW1Jc0NvbW1hbmQsdmltU3RyaW5nLHZpbU9wZXIsdmltVmFyLHZpbU5vdGF0aW9uCitzeW4gbWF0Y2ggICB2aW1FY2hvSEwJImVjaG9obFw9Iglza2lwd2hpdGUgbmV4dGdyb3VwPXZpbUdyb3VwLHZpbUhMR3JvdXAsdmltRWNob0hMTm9uZQorc3luIGNhc2UgaWdub3JlCitzeW4ga2V5d29yZCB2aW1FY2hvSExOb25lCW5vbmUKK3N5biBjYXNlIG1hdGNoCisKKyIgTWFwcyB7e3sxCisiID09PT0KK3N5biBjbHVzdGVyIHZpbU1hcEdyb3VwCWNvbnRhaW5zPXZpbU1hcEJhbmcsdmltTWFwTGhzLHZpbU1hcE1vZAorc3luIGtleXdvcmQgdmltTWFwCWNtW2FwXSBjbm9bcmVtYXBdIGltW2FwXSBpbm9bcmVtYXBdIG1hcCBubVthcF0gbm5bb3JlbWFwXSBub1tyZW1hcF0gb21bYXBdIG9ub1tyZW1hcF0gdm1bYXBdIHZuW29yZW1hcF0gc2tpcHdoaXRlIG5leHRncm91cD1AdmltTWFwR3JvdXAKK3N5biBtYXRjaCAgIHZpbU1hcExocyAgICBjb250YWluZWQJIlxTXCsiCWNvbnRhaW5zPXZpbU5vdGF0aW9uLHZpbUN0cmxDaGFyCitzeW4gbWF0Y2ggICB2aW1NYXBCYW5nICAgY29udGFpbmVkCSIhIglza2lwd2hpdGUgbmV4dGdyb3VwPXZpbU1hcExocworc3luIG1hdGNoICAgdmltTWFwTW9kICAgIGNvbnRhaW5lZAkiXGM8XChidWZmZXJcfFwobG9jYWxcKVw9bGVhZGVyXHxwbHVnXHxzY3JpcHRcfHNpZFx8dW5pcXVlXHxzaWxlbnRcKVwrPiIgc2tpcHdoaXRlIGNvbnRhaW5zPXZpbU1hcE1vZEtleSx2aW1NYXBNb2RFcnIgbmV4dGdyb3VwPUB2aW1NYXBHcm91cAorc3luIGNhc2UgaWdub3JlCitzeW4ga2V5d29yZCB2aW1NYXBNb2RLZXkgY29udGFpbmVkCWJ1ZmZlcglsZWFkZXIJbG9jYWxsZWFkZXIJcGx1ZwlzY3JpcHQJc2lkCXNpbGVudAl1bmlxdWUKK3N5biBjYXNlIG1hdGNoCisKKyIgTWVudXMge3t7MQorIiA9PT09PQorc3luIGNsdXN0ZXIgdmltTWVudUxpc3QgY29udGFpbnM9dmltTWVudUJhbmcsdmltTWVudVByaW9yaXR5LHZpbU1lbnVOYW1lLHZpbU1lbnVNb2QKK3N5biBrZXl3b3JkIHZpbUNvbW1hbmQJYW1bZW51XSBhbltvcmVtZW51XSBhdW5bbWVudV0gY21lW251XSBjbm9yZW1lW251XSBjdW5tZVtudV0gaW1lW251XSBpbm9yZW1lW251XSBpdW5tZVtudV0gbWVbbnVdIG5tZVtudV0gbm5vcmVtZVtudV0gbm9yZW1lW251XSBudW5tZVtudV0gb21lW251XSBvbm9yZW1lW251XSBvdW5tZVtudV0gdW5tZVtudV0gdm1lW251XSB2bm9yZW1lW251XSB2dW5tZVtudV0gc2tpcHdoaXRlIG5leHRncm91cD1AdmltTWVudUxpc3QKK3N5biBtYXRjaCAgIHZpbU1lbnVOYW1lCSJbXiBcdFxcPF1cKyIJY29udGFpbmVkIG5leHRncm91cD12aW1NZW51TmFtZU1vcmUsdmltTWVudU1hcAorc3luIG1hdGNoICAgdmltTWVudVByaW9yaXR5CSJcZFwrXChcLlxkXCtcKSoiCWNvbnRhaW5lZCBza2lwd2hpdGUgbmV4dGdyb3VwPXZpbU1lbnVOYW1lCitzeW4gbWF0Y2ggICB2aW1NZW51TmFtZU1vcmUJIlxjXFxcc1x8PHRhYj5cfFxcXC4iCWNvbnRhaW5lZCBuZXh0Z3JvdXA9dmltTWVudU5hbWUsdmltTWVudU5hbWVNb3JlIGNvbnRhaW5zPXZpbU5vdGF0aW9uCitzeW4gbWF0Y2ggICB2aW1NZW51TW9kICAgIGNvbnRhaW5lZAkiXGM8XChzY3JpcHRcfHNpbGVudFwpXCs+IiAgc2tpcHdoaXRlIGNvbnRhaW5zPXZpbU1hcE1vZEtleSx2aW1NYXBNb2RFcnIgbmV4dGdyb3VwPUB2aW1NZW51TGlzdAorc3luIG1hdGNoICAgdmltTWVudU1hcAkiXHMiCWNvbnRhaW5lZCBza2lwd2hpdGUgbmV4dGdyb3VwPXZpbU1lbnVSaHMKK3N5biBtYXRjaCAgIHZpbU1lbnVSaHMJIi4qJCIJY29udGFpbmVkIGNvbnRhaW5zPXZpbVN0cmluZyx2aW1Db21tZW50LHZpbUlzQ29tbWFuZAorc3luIG1hdGNoICAgdmltTWVudUJhbmcJIiEiCWNvbnRhaW5lZCBza2lwd2hpdGUgbmV4dGdyb3VwPUB2aW1NZW51TGlzdAorCisiIEFuZ2xlLUJyYWNrZXQgTm90YXRpb24gKHRueCB0byBNaWNoYWVsIEdlZGRlcykge3t7MQorIiA9PT09PT09PT09PT09PT09PT09PT09CitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCB2aW1Ob3RhdGlvbgkiXChcXFx8PGx0PlwpXD08XChbc2NhbV0tXClcezAsNH14XD1cKGZcZFx7MSwyfVx8W14gXHQ6XVx8Y3JcfGxmXHxsaW5lZmVlZFx8cmV0dXJuXHxrXD1kZWxcJVtldGVdXHxic1x8YmFja3NwYWNlXHx0YWJcfGVzY1x8cmlnaHRcfGxlZnRcfGhlbHBcfHVuZG9cfGluc2VydFx8aW5zXHxrXD1ob21lXHxrXD1lbmRcfGtwbHVzXHxrbWludXNcfGtkaXZpZGVcfGttdWx0aXBseVx8a2VudGVyXHxzcGFjZVx8a1w9XChwYWdlXClcPVwoXHxkb3duXHx1cFwpXCk+IiBjb250YWlucz12aW1CcmFja2V0CitzeW4gbWF0Y2ggdmltTm90YXRpb24JIlwoXFxcfDxsdD5cKVw9PFwoW3NjYW0yLTRdLVwpXHswLDR9XChyaWdodFx8bGVmdFx8bWlkZGxlXClcKG1vdXNlXClcPVwoZHJhZ1x8cmVsZWFzZVwpXD0+Igljb250YWlucz12aW1CcmFja2V0CitzeW4gbWF0Y2ggdmltTm90YXRpb24JIlwoXFxcfDxsdD5cKVw9PFwoYnNsYXNoXHxwbHVnXHxzaWRcfHNwYWNlXHxiYXJcfG5vcFx8bnVsXHxsdFwpPiIJY29udGFpbnM9dmltQnJhY2tldAorc3luIG1hdGNoIHZpbU5vdGF0aW9uCSdcKFxcXHw8bHQ+XClcPTxDLVI+WzAtOWEteiIlIzouXC09XSdoZT1lLTEJY29udGFpbnM9dmltQnJhY2tldAorc3luIG1hdGNoIHZpbU5vdGF0aW9uCSdcKFxcXHw8bHQ+XClcPTxcKGxpbmVbMTJdXHxjb3VudFx8YmFuZ1x8cmVnXHxhcmdzXHxsdFx8W3FmXS1hcmdzXCk+Jwljb250YWlucz12aW1CcmFja2V0CitzeW4gbWF0Y2ggdmltTm90YXRpb24JIlwoXFxcfDxsdD5cKVw9PFwoW2Nhc11maWxlXHxhYnVmXHxhbWF0Y2hcfGN3b3JkXHxjV09SRFx8Y2xpZW50XCk+Igljb250YWlucz12aW1CcmFja2V0CitzeW4gbWF0Y2ggdmltQnJhY2tldCBjb250YWluZWQJIltcXDw+XSIKK3N5biBjYXNlIG1hdGNoCisKKyIgVXNlciBGdW5jdGlvbiBIaWdobGlnaHRpbmcgKGZvbGxvd2luZyBHYXV0YW0gSXllcidzIHN1Z2dlc3Rpb24pCisiID09PT09PT09PT09PT09PT09PT09PT09PT09CitzeW4gbWF0Y2ggdmltRnVuYwkiXCUoW3NTXTpcfDxbc1NdW2lJXVtkRF0+XClcPVxJXGkqXHplXHMqKCIJCWNvbnRhaW5zPXZpbVVzZXJGdW5jLHZpbUZ1bmNOYW1lCitzeW4gbWF0Y2ggdmltVXNlckZ1bmMgIlwlKFtzU106XHw8W3NTXVtpSV1bZERdPlwpXGlcK1x8XDxcdVxpKlw+XHxcPGlmXD4iCWNvbnRhaW5lZCBjb250YWlucz12aW1Ob3RhdGlvbix2aW1Db21tYW5kCisKKyIgU3ludGF4IHt7ezEKKyI9PT09PT09CitzeW4gbWF0Y2ggICB2aW1Hcm91cExpc3QJY29udGFpbmVkCSJAXD1bXiBcdCxdKiIJY29udGFpbnM9dmltR3JvdXBTcGVjaWFsLHZpbVBhdFNlcAorc3luIG1hdGNoICAgdmltR3JvdXBMaXN0CWNvbnRhaW5lZAkiQFw9W14gXHQsXSosIgluZXh0Z3JvdXA9dmltR3JvdXBMaXN0IGNvbnRhaW5zPXZpbUdyb3VwU3BlY2lhbCx2aW1QYXRTZXAKK3N5biBrZXl3b3JkIHZpbUdyb3VwU3BlY2lhbAljb250YWluZWQJQUxMCUFMTEJVVAorc3luIG1hdGNoICAgdmltU3luRXJyb3IJY29udGFpbmVkCSJcaVwrIgorc3luIG1hdGNoICAgdmltU3luRXJyb3IJY29udGFpbmVkCSJcaVwrPSIJbmV4dGdyb3VwPXZpbUdyb3VwTGlzdAorc3luIG1hdGNoICAgdmltU3luQ29udGFpbnMJY29udGFpbmVkCSJcPGNvbnRhaW5cKHNcfGVkaW5cKT0iCW5leHRncm91cD12aW1Hcm91cExpc3QKK3N5biBtYXRjaCAgIHZpbVN5bktleUNvbnRhaW5lZGluCWNvbnRhaW5lZAkiXDxjb250YWluZWRpbj0iCW5leHRncm91cD12aW1Hcm91cExpc3QKK3N5biBtYXRjaCAgIHZpbVN5bk5leHRncm91cAljb250YWluZWQJIm5leHRncm91cD0iCW5leHRncm91cD12aW1Hcm91cExpc3QKKworc3luIG1hdGNoICAgdmltU3ludGF4CSJcPHN5XCVbbnRheF1cPiIJY29udGFpbnM9dmltQ29tbWFuZCBza2lwd2hpdGUgbmV4dGdyb3VwPXZpbVN5blR5cGUsdmltQ29tbWVudAorc3luIG1hdGNoICAgdmltQXVTeW50YXgJY29udGFpbmVkCSJccytzeVwlW250YXhdIgljb250YWlucz12aW1Db21tYW5kIHNraXB3aGl0ZSBuZXh0Z3JvdXA9dmltU3luVHlwZSx2aW1Db21tZW50CisKKyIgU3ludGF4OiBjYXNlIHt7ezEKK3N5biBrZXl3b3JkIHZpbVN5blR5cGUJY29udGFpbmVkCWNhc2UJc2tpcHdoaXRlIG5leHRncm91cD12aW1TeW5DYXNlLHZpbVN5bkNhc2VFcnJvcgorc3luIG1hdGNoICAgdmltU3luQ2FzZUVycm9yCWNvbnRhaW5lZAkiXGlcKyIKK3N5biBrZXl3b3JkIHZpbVN5bkNhc2UJY29udGFpbmVkCWlnbm9yZQltYXRjaAorCisiIFN5bnRheDogY2xlYXIge3t7MQorc3luIGtleXdvcmQgdmltU3luVHlwZQljb250YWluZWQJY2xlYXIJc2tpcHdoaXRlIG5leHRncm91cD12aW1Hcm91cExpc3QKKworIiBTeW50YXg6IGNsdXN0ZXIge3t7MQorc3luIGtleXdvcmQgdmltU3luVHlwZQljb250YWluZWQJY2x1c3Rlcglza2lwd2hpdGUgbmV4dGdyb3VwPXZpbUNsdXN0ZXJOYW1lCitzeW4gcmVnaW9uICB2aW1DbHVzdGVyTmFtZQljb250YWluZWQJbWF0Y2hncm91cD12aW1Hcm91cE5hbWUgc3RhcnQ9IlxrXCsiIHNraXA9IlxcXFxcfFxcfCIgbWF0Y2hncm91cD12aW1TZXAgZW5kPSIkXHx8IiBjb250YWlucz12aW1Hcm91cEFkZCx2aW1Hcm91cFJlbSx2aW1TeW5Db250YWlucyx2aW1TeW5FcnJvcgorc3luIG1hdGNoICAgdmltR3JvdXBBZGQJY29udGFpbmVkCSJhZGQ9IgluZXh0Z3JvdXA9dmltR3JvdXBMaXN0CitzeW4gbWF0Y2ggICB2aW1Hcm91cFJlbQljb250YWluZWQJInJlbW92ZT0iCW5leHRncm91cD12aW1Hcm91cExpc3QKKworIiBTeW50YXg6IGluY2x1ZGUge3t7MQorc3luIGtleXdvcmQgdmltU3luVHlwZQljb250YWluZWQJaW5jbHVkZQlza2lwd2hpdGUgbmV4dGdyb3VwPXZpbUdyb3VwTGlzdAorCisiIFN5bnRheDoga2V5d29yZCB7e3sxCitzeW4gY2x1c3RlciB2aW1TeW5LZXlHcm91cAljb250YWlucz12aW1TeW5OZXh0Z3JvdXAsdmltU3luS2V5T3B0LHZpbVN5bktleUNvbnRhaW5lZGluCitzeW4ga2V5d29yZCB2aW1TeW5UeXBlCWNvbnRhaW5lZAlrZXl3b3JkCXNraXB3aGl0ZSBuZXh0Z3JvdXA9dmltU3luS2V5UmVnaW9uCitzeW4gcmVnaW9uICB2aW1TeW5LZXlSZWdpb24JY29udGFpbmVkIGtlZXBlbmQJbWF0Y2hncm91cD12aW1Hcm91cE5hbWUgc3RhcnQ9IlxrXCsiIHNraXA9IlxcXFxcfFxcfCIgbWF0Y2hncm91cD12aW1TZXAgZW5kPSJ8XHwkIiBjb250YWlucz1AdmltU3luS2V5R3JvdXAKK3N5biBtYXRjaCAgIHZpbVN5bktleU9wdAljb250YWluZWQJIlw8XChjb25jZWFsXHxjb250YWluZWRcfHRyYW5zcGFyZW50XHxza2lwZW1wdHlcfHNraXB3aGl0ZVx8c2tpcG5sXClcPiIKKworIiBTeW50YXg6IG1hdGNoIHt7ezEKK3N5biBjbHVzdGVyIHZpbVN5bk10Y2hHcm91cAljb250YWlucz12aW1NdGNoQ29tbWVudCx2aW1TeW5Db250YWlucyx2aW1TeW5FcnJvcix2aW1TeW5NdGNoT3B0LHZpbVN5bk5leHRncm91cCx2aW1TeW5SZWdQYXQsdmltTm90YXRpb24KK3N5biBrZXl3b3JkIHZpbVN5blR5cGUJY29udGFpbmVkCW1hdGNoCXNraXB3aGl0ZSBuZXh0Z3JvdXA9dmltU3luTWF0Y2hSZWdpb24KK3N5biByZWdpb24gIHZpbVN5bk1hdGNoUmVnaW9uCWNvbnRhaW5lZCBrZWVwZW5kCW1hdGNoZ3JvdXA9dmltR3JvdXBOYW1lIHN0YXJ0PSJca1wrIiBtYXRjaGdyb3VwPXZpbVNlcCBlbmQ9InxcfCQiIGNvbnRhaW5zPUB2aW1TeW5NdGNoR3JvdXAKK3N5biBtYXRjaCAgIHZpbVN5bk10Y2hPcHQJY29udGFpbmVkCSJcPFwoY29uY2VhbFx8dHJhbnNwYXJlbnRcfGNvbnRhaW5lZFx8ZXhjbHVkZW5sXHxza2lwZW1wdHlcfHNraXB3aGl0ZVx8ZGlzcGxheVx8ZXh0ZW5kXHxza2lwbmxcfGZvbGRcKVw+IgoraWYgaGFzKCJjb25jZWFsIikKKyBzeW4gbWF0Y2ggICB2aW1TeW5NdGNoT3B0CWNvbnRhaW5lZAkiXDxjY2hhcj0iCW5leHRncm91cD1WaW1TeW5NdGNoQ2NoYXIKKyBzeW4gbWF0Y2ggICB2aW1TeW5NdGNoQ2NoYXIJY29udGFpbmVkCSIuIgorZW5kaWYKKworIiBTeW50YXg6IG9mZiBhbmQgb24ge3t7MQorc3luIGtleXdvcmQgdmltU3luVHlwZQljb250YWluZWQJZW5hYmxlCWxpc3QJbWFudWFsCW9mZglvbglyZXNldAorCisiIFN5bnRheDogcmVnaW9uIHt7ezEKK3N5biBjbHVzdGVyIHZpbVN5blJlZ1BhdEdyb3VwCWNvbnRhaW5zPXZpbVBhdFNlcCx2aW1Ob3RQYXRTZXAsdmltU3luUGF0UmFuZ2UsdmltU3luTm90UGF0UmFuZ2UsdmltU3Vic3RTdWJzdHIsdmltUGF0UmVnaW9uLHZpbVBhdFNlcEVycix2aW1Ob3RhdGlvbgorc3luIGNsdXN0ZXIgdmltU3luUmVnR3JvdXAJY29udGFpbnM9dmltU3luQ29udGFpbnMsdmltU3luTmV4dGdyb3VwLHZpbVN5blJlZ09wdCx2aW1TeW5SZWcsdmltU3luTXRjaEdycAorc3luIGtleXdvcmQgdmltU3luVHlwZQljb250YWluZWQJcmVnaW9uCXNraXB3aGl0ZSBuZXh0Z3JvdXA9dmltU3luUmVnaW9uCitzeW4gcmVnaW9uICB2aW1TeW5SZWdpb24JY29udGFpbmVkIGtlZXBlbmQJbWF0Y2hncm91cD12aW1Hcm91cE5hbWUgc3RhcnQ9IlxrXCsiIHNraXA9IlxcXFxcfFxcfCIgZW5kPSJ8XHwkIiBjb250YWlucz1AdmltU3luUmVnR3JvdXAKK3N5biBtYXRjaCAgIHZpbVN5blJlZ09wdAljb250YWluZWQJIlw8XChjb25jZWFsXChlbmRzXClcPVx8dHJhbnNwYXJlbnRcfGNvbnRhaW5lZFx8ZXhjbHVkZW5sXHxza2lwZW1wdHlcfHNraXB3aGl0ZVx8ZGlzcGxheVx8a2VlcGVuZFx8b25lbGluZVx8ZXh0ZW5kXHxza2lwbmxcfGZvbGRcKVw+Igorc3luIG1hdGNoICAgdmltU3luUmVnCWNvbnRhaW5lZAkiXChzdGFydFx8c2tpcFx8ZW5kXCk9ImhlPWUtMQluZXh0Z3JvdXA9dmltU3luUmVnUGF0CitzeW4gbWF0Y2ggICB2aW1TeW5NdGNoR3JwCWNvbnRhaW5lZAkibWF0Y2hncm91cD0iCW5leHRncm91cD12aW1Hcm91cCx2aW1ITEdyb3VwCitzeW4gcmVnaW9uICB2aW1TeW5SZWdQYXQJY29udGFpbmVkIGV4dGVuZAlzdGFydD0iXHooWy1gfiFAIyQlXiYqXz0rOzonIiwuLz9dXCkiICBza2lwPSJcXFxcXHxcXFx6MSIgIGVuZD0iXHoxIiAgY29udGFpbnM9QHZpbVN5blJlZ1BhdEdyb3VwIHNraXB3aGl0ZSBuZXh0Z3JvdXA9dmltU3luUGF0TW9kLHZpbVN5blJlZworc3luIG1hdGNoICAgdmltU3luUGF0TW9kCWNvbnRhaW5lZAkiXChoc1x8bXNcfG1lXHxoc1x8aGVcfHJzXHxyZVwpPVtzZV1cKFstK11cZFwrXClcPSIKK3N5biBtYXRjaCAgIHZpbVN5blBhdE1vZAljb250YWluZWQJIlwoaHNcfG1zXHxtZVx8aHNcfGhlXHxyc1x8cmVcKT1bc2VdXChbLStdXGRcK1wpXD0sIiBuZXh0Z3JvdXA9dmltU3luUGF0TW9kCitzeW4gbWF0Y2ggICB2aW1TeW5QYXRNb2QJY29udGFpbmVkCSJsYz1cZFwrIgorc3luIG1hdGNoICAgdmltU3luUGF0TW9kCWNvbnRhaW5lZAkibGM9XGRcKywiIG5leHRncm91cD12aW1TeW5QYXRNb2QKK3N5biByZWdpb24gIHZpbVN5blBhdFJhbmdlCWNvbnRhaW5lZAlzdGFydD0iXFsiCXNraXA9IlxcXFxcfFxcXSIgICBlbmQ9Il0iCitzeW4gbWF0Y2ggICB2aW1TeW5Ob3RQYXRSYW5nZQljb250YWluZWQJIlxcXFxcfFxcXFsiCitzeW4gbWF0Y2ggICB2aW1NdGNoQ29tbWVudAljb250YWluZWQJJyJbXiJdXCskJworCisiIFN5bnRheDogc3luYyB7e3sxCisiID09PT09PT09PT09PQorc3luIGtleXdvcmQgdmltU3luVHlwZQljb250YWluZWQJc3luYwlza2lwd2hpdGUJbmV4dGdyb3VwPXZpbVN5bmNDLHZpbVN5bmNMaW5lcyx2aW1TeW5jTWF0Y2gsdmltU3luY0Vycm9yLHZpbVN5bmNMaW5lY29udCx2aW1TeW5jUmVnaW9uCitzeW4gbWF0Y2ggICB2aW1TeW5jRXJyb3IJY29udGFpbmVkCSJcaVwrIgorc3luIGtleXdvcmQgdmltU3luY0MJY29udGFpbmVkCWNjb21tZW50CWNsZWFyCWZyb21zdGFydAorc3luIGtleXdvcmQgdmltU3luY01hdGNoCWNvbnRhaW5lZAltYXRjaAlza2lwd2hpdGUJbmV4dGdyb3VwPXZpbVN5bmNHcm91cE5hbWUKK3N5biBrZXl3b3JkIHZpbVN5bmNSZWdpb24JY29udGFpbmVkCXJlZ2lvbglza2lwd2hpdGUJbmV4dGdyb3VwPXZpbVN5blJlZworc3luIGtleXdvcmQgdmltU3luY0xpbmVjb250CWNvbnRhaW5lZAlsaW5lY29udAlza2lwd2hpdGUJbmV4dGdyb3VwPXZpbVN5blJlZ1BhdAorc3luIG1hdGNoICAgdmltU3luY0xpbmVzCWNvbnRhaW5lZAkiXChtaW5cfG1heFwpXD1saW5lcz0iCW5leHRncm91cD12aW1OdW1iZXIKK3N5biBtYXRjaCAgIHZpbVN5bmNHcm91cE5hbWUJY29udGFpbmVkCSJca1wrIglza2lwd2hpdGUJbmV4dGdyb3VwPXZpbVN5bmNLZXkKK3N5biBtYXRjaCAgIHZpbVN5bmNLZXkJY29udGFpbmVkCSJcPGdyb3VwdGhlcmVcfGdyb3VwaGVyZVw+Iglza2lwd2hpdGUgbmV4dGdyb3VwPXZpbVN5bmNHcm91cAorc3luIG1hdGNoICAgdmltU3luY0dyb3VwCWNvbnRhaW5lZAkiXGtcKyIJc2tpcHdoaXRlCW5leHRncm91cD12aW1TeW5SZWdQYXQsdmltU3luY05vbmUKK3N5biBrZXl3b3JkIHZpbVN5bmNOb25lCWNvbnRhaW5lZAlOT05FCisKKyIgQWRkaXRpb25hbCBJc0NvbW1hbmQsIGhlcmUgYnkgcmVhc29ucyBvZiBwcmVjZWRlbmNlIHt7ezEKKyIgPT09PT09PT09PT09PT09PT09PT0KK3N5biBtYXRjaCB2aW1Jc0NvbW1hbmQJIjxCYXI+XHMqXGFcKyIJdHJhbnNwYXJlbnQgY29udGFpbnM9dmltQ29tbWFuZCx2aW1Ob3RhdGlvbgorCisiIEhpZ2hsaWdodGluZyB7e3sxCisiID09PT09PT09PT09PQorc3luIGNsdXN0ZXIgdmltSGlnaGxpZ2h0Q2x1c3Rlcgljb250YWlucz12aW1IaUxpbmssdmltSGlDbGVhcix2aW1IaUtleUxpc3QsdmltQ29tbWVudAorc3luIG1hdGNoICAgdmltSGlnaGxpZ2h0CSJcPGhpXCVbZ2hsaWdodF1cPiIgc2tpcHdoaXRlIG5leHRncm91cD12aW1IaUJhbmcsQHZpbUhpZ2hsaWdodENsdXN0ZXIKK3N5biBtYXRjaCAgIHZpbUhpQmFuZwljb250YWluZWQJIiEiCSAgc2tpcHdoaXRlIG5leHRncm91cD1AdmltSGlnaGxpZ2h0Q2x1c3RlcgorCitzeW4gbWF0Y2ggICB2aW1IaUdyb3VwCWNvbnRhaW5lZAkiXGlcKyIKK3N5biBjYXNlIGlnbm9yZQorc3luIGtleXdvcmQgdmltSGlBdHRyaWIJY29udGFpbmVkCW5vbmUgYm9sZCBpbnZlcnNlIGl0YWxpYyByZXZlcnNlIHN0YW5kb3V0IHVuZGVybGluZQorc3luIGtleXdvcmQgdmltRmdCZ0F0dHJpYgljb250YWluZWQJbm9uZSBiZyBiYWNrZ3JvdW5kIGZnIGZvcmVncm91bmQKK3N5biBjYXNlIG1hdGNoCitzeW4gbWF0Y2ggICB2aW1IaUF0dHJpYkxpc3QJY29udGFpbmVkCSJcaVwrIgljb250YWlucz12aW1IaUF0dHJpYgorc3luIG1hdGNoICAgdmltSGlBdHRyaWJMaXN0CWNvbnRhaW5lZAkiXGlcKywiaGU9ZS0xCWNvbnRhaW5zPXZpbUhpQXR0cmliIG5leHRncm91cD12aW1IaUF0dHJpYkxpc3QKK3N5biBjYXNlIGlnbm9yZQorc3luIGtleXdvcmQgdmltSGlDdGVybUNvbG9yCWNvbnRhaW5lZAlibGFjayBibHVlIGJyb3duIGN5YW4gZGFya0JsdWUgZGFya2N5YW4gZGFya2dyYXkgZGFya2dyZWVuIGRhcmtncmV5IGRhcmttYWdlbnRhIGRhcmtyZWQgZGFya3llbGxvdyBncmF5IGdyZWVuIGdyZXkgbGlnaHRibHVlIGxpZ2h0Y3lhbiBsaWdodGdyYXkgbGlnaHRncmVlbiBsaWdodGdyZXkgbGlnaHRtYWdlbnRhIGxpZ2h0cmVkIG1hZ2VudGEgcmVkIHdoaXRlIHllbGxvdworCitzeW4gY2FzZSBtYXRjaAorc3luIG1hdGNoICAgdmltSGlGb250bmFtZQljb250YWluZWQJIlthLXpBLVpcLSpdXCsiCitzeW4gbWF0Y2ggICB2aW1IaUd1aUZvbnRuYW1lCWNvbnRhaW5lZAkiJ1thLXpBLVpcLSogXVwrJyIKK3N5biBtYXRjaCAgIHZpbUhpR3VpUmdiCWNvbnRhaW5lZAkiI1x4XHs2fSIKK3N5biBtYXRjaCAgIHZpbUhpQ3Rlcm1FcnJvcgljb250YWluZWQJIlteMC05XVxpKiIKKworIiBIaWdobGlnaHRpbmc6IGhpIGdyb3VwIGtleT1hcmcgLi4uIHt7ezEKK3N5biBjbHVzdGVyIHZpbUhpQ2x1c3RlciBjb250YWlucz12aW1IaUdyb3VwLHZpbUhpVGVybSx2aW1IaUNUZXJtLHZpbUhpU3RhcnRTdG9wLHZpbUhpQ3Rlcm1GZ0JnLHZpbUhpR3VpLHZpbUhpR3VpRm9udCx2aW1IaUd1aUZnQmcsdmltSGlLZXlFcnJvcix2aW1Ob3RhdGlvbgorc3luIHJlZ2lvbiB2aW1IaUtleUxpc3QJY29udGFpbmVkIG9uZWxpbmUgc3RhcnQ9IlxpXCsiIHNraXA9IlxcXFxcfFxcfCIgZW5kPSIkXHx8Igljb250YWlucz1AdmltSGlDbHVzdGVyCitzeW4gbWF0Y2ggIHZpbUhpS2V5RXJyb3IJY29udGFpbmVkCSJcaVwrPSJoZT1lLTEKK3N5biBtYXRjaCAgdmltSGlUZXJtCWNvbnRhaW5lZAkiXGN0ZXJtPSJoZT1lLTEJCW5leHRncm91cD12aW1IaUF0dHJpYkxpc3QKK3N5biBtYXRjaCAgdmltSGlTdGFydFN0b3AJY29udGFpbmVkCSJcY1woc3RhcnRcfHN0b3BcKT0iaGU9ZS0xCW5leHRncm91cD12aW1IaVRlcm1jYXAsdmltT3B0aW9uCitzeW4gbWF0Y2ggIHZpbUhpQ1Rlcm0JY29udGFpbmVkCSJcY2N0ZXJtPSJoZT1lLTEJCW5leHRncm91cD12aW1IaUF0dHJpYkxpc3QKK3N5biBtYXRjaCAgdmltSGlDdGVybUZnQmcJY29udGFpbmVkCSJcY2N0ZXJtW2ZiXWc9ImhlPWUtMQluZXh0Z3JvdXA9dmltTnVtYmVyLHZpbUhpQ3Rlcm1Db2xvcix2aW1GZ0JnQXR0cmliLHZpbUhpQ3Rlcm1FcnJvcgorc3luIG1hdGNoICB2aW1IaUd1aQljb250YWluZWQJIlxjZ3VpPSJoZT1lLTEJCW5leHRncm91cD12aW1IaUF0dHJpYkxpc3QKK3N5biBtYXRjaCAgdmltSGlHdWlGb250CWNvbnRhaW5lZAkiXGNmb250PSJoZT1lLTEJCW5leHRncm91cD12aW1IaUZvbnRuYW1lCitzeW4gbWF0Y2ggIHZpbUhpR3VpRmdCZwljb250YWluZWQJIlxjZ3VpW2ZiXWc9ImhlPWUtMQluZXh0Z3JvdXA9dmltSGlHcm91cCx2aW1IaUd1aUZvbnRuYW1lLHZpbUhpR3VpUmdiLHZpbUZnQmdBdHRyaWIKK3N5biBtYXRjaCAgdmltSGlUZXJtY2FwCWNvbnRhaW5lZAkiXFNcKyIJCWNvbnRhaW5zPXZpbU5vdGF0aW9uCisKKyIgSGlnaGxpZ2h0OiBjbGVhciB7e3sxCitzeW4ga2V5d29yZCB2aW1IaUNsZWFyCWNvbnRhaW5lZAljbGVhcgluZXh0Z3JvdXA9dmltSGlHcm91cAorCisiIEhpZ2hsaWdodDogbGluayB7e3sxCitzeW4gcmVnaW9uIHZpbUhpTGluawljb250YWluZWQgb25lbGluZSBtYXRjaGdyb3VwPXZpbUNvbW1hbmQgc3RhcnQ9Ilw8XChkZWZcc1wrXClcPWxpbmtcPlx8XDxkZWZcPiIgZW5kPSIkIgljb250YWlucz12aW1IaUdyb3VwLHZpbUdyb3VwLHZpbUhMR3JvdXAsdmltTm90YXRpb24KKworIiBDb250cm9sIENoYXJhY3RlcnMge3t7MQorIiA9PT09PT09PT09PT09PT09PT0KK3N5biBtYXRjaCB2aW1DdHJsQ2hhcgkiWwEtCAsPLR9dIgorCisiIEJlZ2lubmVycyAtIFBhdHRlcm5zIHRoYXQgaW52b2x2ZSBeIHt7ezEKKyIgPT09PT09PT09CitzeW4gbWF0Y2ggIHZpbUxpbmVDb21tZW50CSteWyBcdDpdKiIuKiQrCWNvbnRhaW5zPUB2aW1Db21tZW50R3JvdXAsdmltQ29tbWVudFN0cmluZyx2aW1Db21tZW50VGl0bGUKK3N5biBtYXRjaCAgdmltQ29tbWVudFRpdGxlCSciXHMqXHVcdypcKFxzXCtcdVx3KlwpKjonaHM9cysxCWNvbnRhaW5lZCBjb250YWlucz12aW1Db21tZW50VGl0bGVMZWFkZXIsdmltVG9kbyxAdmltQ29tbWVudEdyb3VwCitzeW4gbWF0Y2ggIHZpbUNvbnRpbnVlCSJeXHMqXFwiCitzeW4gcmVnaW9uIHZpbVN0cmluZwlzdGFydD0iXlxzKlxcXHooWyciXVwpIiBza2lwPSdcXFxcXHxcXFx6MScgZW5kPSJcejEiIG9uZWxpbmUga2VlcGVuZCBjb250YWlucz1AdmltU3RyaW5nR3JvdXAsdmltQ29udGludWUKK3N5biBtYXRjaCAgdmltQ29tbWVudFRpdGxlTGVhZGVyCSciXHNcKydtcz1zKzEJY29udGFpbmVkCisKKyIgU2NyaXB0cyAgOiBwZXJsLHJ1YnkgOiBCZW5vaXQgQ2VycmluYSB7e3sxCisiID09PT09PT0gICAgcHl0aG9uLHRjbDogSm9oYW5uZXMgWmVsbG5lcgorCisiIGFsbG93IHVzZXJzIHRvIHByZXZlbnQgZW1iZWRkZWQgc2NyaXB0IHN5bnRheCBoaWdobGlnaHRpbmcKKyIgd2hlbiB2aW0gZG9lc24ndCBoYXZlIHBlcmwvcHl0aG9uL3J1YnkvdGNsIHN1cHBvcnQuICBEbworIiBzbyBieSBzZXR0aW5nIGc6dmltZW1iZWRzY3JpcHQ9IDAgaW4gdGhlIHVzZXIncyA8LnZpbXJjPi4KK2lmICFleGlzdHMoImc6dmltZW1iZWRzY3JpcHQiKQorIGxldCBnOnZpbWVtYmVkc2NyaXB0PSAxCitlbmRpZgorCisiIFstLSBwZXJsIC0tXSB7e3syCitpZiAoaGFzKCJwZXJsIikgfHwgZzp2aW1lbWJlZHNjcmlwdCkgJiYgZmlsZXJlYWRhYmxlKGV4cGFuZCgiPHNmaWxlPjpwOmgiKS4iL3BlcmwudmltIikKKyB1bmxldCEgYjpjdXJyZW50X3N5bnRheAorIHN5biBpbmNsdWRlIEB2aW1QZXJsU2NyaXB0IDxzZmlsZT46cDpoL3BlcmwudmltCisgc3luIHJlZ2lvbiB2aW1QZXJsUmVnaW9uIG1hdGNoZ3JvdXA9dmltU2NyaXB0RGVsaW0gc3RhcnQ9K3BlXCVbcmxdXHMqPDxccypceiguKlwpJCsgZW5kPSteXHoxJCsgY29udGFpbnM9QHZpbVBlcmxTY3JpcHQKKyBzeW4gcmVnaW9uIHZpbVBlcmxSZWdpb24gbWF0Y2hncm91cD12aW1TY3JpcHREZWxpbSBzdGFydD0rcGVcJVtybF1ccyo8PFxzKiQrIGVuZD0rXC4kKyBjb250YWlucz1AdmltUGVybFNjcmlwdAorZW5kaWYKKworIiBbLS0gcnVieSAtLV0ge3t7MgoraWYgKGhhcygicnVieSIpIHx8IGc6dmltZW1iZWRzY3JpcHQpICYmIGZpbGVyZWFkYWJsZShleHBhbmQoIjxzZmlsZT46cDpoIikuIi9ydWJ5LnZpbSIpCisgdW5sZXQhIGI6Y3VycmVudF9zeW50YXgKKyBzeW4gaW5jbHVkZSBAdmltUnVieVNjcmlwdCA8c2ZpbGU+OnA6aC9ydWJ5LnZpbQorIHN5biByZWdpb24gdmltUnVieVJlZ2lvbiBtYXRjaGdyb3VwPXZpbVNjcmlwdERlbGltIHN0YXJ0PStydWJbeV1ccyo8PFxzKlx6KC4qXCkkKyBlbmQ9K15cejEkKyBjb250YWlucz1AdmltUnVieVNjcmlwdAorIHN5biByZWdpb24gdmltUnVieVJlZ2lvbiBtYXRjaGdyb3VwPXZpbVNjcmlwdERlbGltIHN0YXJ0PStydWJbeV1ccyo8PFxzKiQrIGVuZD0rXC4kKyBjb250YWlucz1AdmltUnVieVNjcmlwdAorZW5kaWYKKworIiBbLS0gcHl0aG9uIC0tXSB7e3syCitpZiAoaGFzKCJweXRob24iKSB8fCBnOnZpbWVtYmVkc2NyaXB0KSAmJiBmaWxlcmVhZGFibGUoZXhwYW5kKCI8c2ZpbGU+OnA6aCIpLiIvcHl0aG9uLnZpbSIpCisgdW5sZXQhIGI6Y3VycmVudF9zeW50YXgKKyBzeW4gaW5jbHVkZSBAdmltUHl0aG9uU2NyaXB0IDxzZmlsZT46cDpoL3B5dGhvbi52aW0KKyBzeW4gcmVnaW9uIHZpbVB5dGhvblJlZ2lvbiBtYXRjaGdyb3VwPXZpbVNjcmlwdERlbGltIHN0YXJ0PStweVwlW3Rob25dXHMqPDxccypceiguKlwpJCsgZW5kPSteXHoxJCsgY29udGFpbnM9QHZpbVB5dGhvblNjcmlwdAorIHN5biByZWdpb24gdmltUHl0aG9uUmVnaW9uIG1hdGNoZ3JvdXA9dmltU2NyaXB0RGVsaW0gc3RhcnQ9K3B5XCVbdGhvbl1ccyo8PFxzKiQrIGVuZD0rXC4kKyBjb250YWlucz1AdmltUHl0aG9uU2NyaXB0CitlbmRpZgorCisiIFstLSB0Y2wgLS1dIHt7ezIKK2lmIChoYXMoInRjbCIpIHx8IGc6dmltZW1iZWRzY3JpcHQpICYmIGZpbGVyZWFkYWJsZShleHBhbmQoIjxzZmlsZT46cDpoIikuIi90Y2wudmltIikKKyB1bmxldCEgYjpjdXJyZW50X3N5bnRheAorIHN5biBpbmNsdWRlIEB2aW1UY2xTY3JpcHQgPHNmaWxlPjpwOmgvdGNsLnZpbQorIHN5biByZWdpb24gdmltVGNsUmVnaW9uIG1hdGNoZ3JvdXA9dmltU2NyaXB0RGVsaW0gc3RhcnQ9K3RjW2xdXD1ccyo8PFxzKlx6KC4qXCkkKyBlbmQ9K15cejEkKyBjb250YWlucz1AdmltVGNsU2NyaXB0Cisgc3luIHJlZ2lvbiB2aW1UY2xSZWdpb24gbWF0Y2hncm91cD12aW1TY3JpcHREZWxpbSBzdGFydD0rdGNbbF1cPVxzKjw8XHMqJCsgZW5kPStcLiQrIGNvbnRhaW5zPUB2aW1UY2xTY3JpcHQKK2VuZGlmCisKKyIgU3luY2hyb25pemUgKHNwZWVkKSB7e3sxCisiPT09PT09PT09PT09CitpZiBleGlzdHMoImc6dmltX21pbmxpbmVzIikKKyBleGUgInN5biBzeW5jIG1pbmxpbmVzPSIuZzp2aW1fbWlubGluZXMKK2VuZGlmCitpZiBleGlzdHMoImc6dmltX21heGxpbmVzIikKKyBleGUgInN5biBzeW5jIG1heGxpbmVzPSIuZzp2aW1fbWF4bGluZXMKK2Vsc2UKKyBzeW4gc3luYyBtYXhsaW5lcz02MAorZW5kaWYKK3N5biBzeW5jIGxpbmVjb250CSJeXHNcK1xcIgorc3luIHN5bmMgbWF0Y2ggdmltQXVncm91cFN5bmNBCWdyb3VwdGhlcmUgTk9ORQkiXDxhdWdcJVtyb3VwXVw+XHNcK1tlRV1bbk5dW2REXSIKKworIiBIaWdobGlnaHRpbmcgU2V0dGluZ3Mge3t7MQorIiA9PT09PT09PT09PT09PT09PT09PQorCitoaSBkZWYgbGluayB2aW1BdUhpZ2hsaWdodAl2aW1IaWdobGlnaHQKK2hpIGRlZiBsaW5rIHZpbVN1YnN0MQl2aW1TdWJzdAoraGkgZGVmIGxpbmsgdmltQmVoYXZlTW9kZWwJdmltQmVoYXZlCisKK2hpIGRlZiBsaW5rIHZpbUFkZHJlc3MJdmltTWFyaworIiAgaGkgZGVmIGxpbmsgdmltQXVncm91cEVycm9yCXZpbUVycm9yCitoaSBkZWYgbGluayB2aW1BdWdyb3VwS2V5CXZpbUNvbW1hbmQKK2hpIGRlZiBsaW5rIHZpbUF1dG9DbWRPcHQJdmltT3B0aW9uCitoaSBkZWYgbGluayB2aW1BdXRvQ21kCXZpbUNvbW1hbmQKK2hpIGRlZiBsaW5rIHZpbUF1dG9TZXQJdmltQ29tbWFuZAoraGkgZGVmIGxpbmsgdmltQmVoYXZlRXJyb3IJdmltRXJyb3IKK2hpIGRlZiBsaW5rIHZpbUJlaGF2ZQl2aW1Db21tYW5kCitoaSBkZWYgbGluayB2aW1Db2xsQ2xhc3NFcnIJdmltRXJyb3IKK2hpIGRlZiBsaW5rIHZpbUNvbW1lbnRTdHJpbmcJdmltU3RyaW5nCitoaSBkZWYgbGluayB2aW1Db25kSEwJdmltQ29tbWFuZAoraGkgZGVmIGxpbmsgdmltRWNob0hMTm9uZQl2aW1Hcm91cAoraGkgZGVmIGxpbmsgdmltRWNob0hMCXZpbUNvbW1hbmQKK2hpIGRlZiBsaW5rIHZpbUVsc2VpZgl2aW1Db25kSEwKK2hpIGRlZiBsaW5rIHZpbUVyclNldHRpbmcJdmltRXJyb3IKK2hpIGRlZiBsaW5rIHZpbUZnQmdBdHRyaWIJdmltSGlBdHRyaWIKK2hpIGRlZiBsaW5rIHZpbUZUQ21kCXZpbUNvbW1hbmQKK2hpIGRlZiBsaW5rIHZpbUZURXJyb3IJdmltRXJyb3IKK2hpIGRlZiBsaW5rIHZpbUZUT3B0aW9uCXZpbVN5blR5cGUKK2hpIGRlZiBsaW5rIFZpbUZ1bmMgICAgICAgICAJdmltRXJyb3IKK2hpIGRlZiBsaW5rIHZpbUZ1bmNLZXkJdmltQ29tbWFuZAoraGkgZGVmIGxpbmsgdmltRnVuY3Rpb25FcnJvcgl2aW1FcnJvcgoraGkgZGVmIGxpbmsgdmltR3JvdXBBZGQJdmltU3luT3B0aW9uCitoaSBkZWYgbGluayB2aW1Hcm91cFJlbQl2aW1TeW5PcHRpb24KK2hpIGRlZiBsaW5rIHZpbUhpQXR0cmliTGlzdAl2aW1FcnJvcgoraGkgZGVmIGxpbmsgdmltSGlDdGVybUVycm9yCXZpbUVycm9yCitoaSBkZWYgbGluayB2aW1IaUN0ZXJtRmdCZwl2aW1IaVRlcm0KK2hpIGRlZiBsaW5rIHZpbUhpQ1Rlcm0JdmltSGlUZXJtCitoaSBkZWYgbGluayB2aW1IaWdobGlnaHQJdmltQ29tbWFuZAoraGkgZGVmIGxpbmsgdmltSGlHcm91cAl2aW1Hcm91cE5hbWUKK2hpIGRlZiBsaW5rIHZpbUhpR3VpRmdCZwl2aW1IaVRlcm0KK2hpIGRlZiBsaW5rIHZpbUhpR3VpRm9udAl2aW1IaVRlcm0KK2hpIGRlZiBsaW5rIHZpbUhpR3VpUmdiCXZpbU51bWJlcgoraGkgZGVmIGxpbmsgdmltSGlHdWkJdmltSGlUZXJtCitoaSBkZWYgbGluayB2aW1IaUtleUVycm9yCXZpbUVycm9yCitoaSBkZWYgbGluayB2aW1IaVN0YXJ0U3RvcAl2aW1IaVRlcm0KK2hpIGRlZiBsaW5rIHZpbUhMR3JvdXAJdmltR3JvdXAKK2hpIGRlZiBsaW5rIHZpbUluc2VydAl2aW1TdHJpbmcKK2hpIGRlZiBsaW5rIHZpbUtleUNvZGVFcnJvcgl2aW1FcnJvcgoraGkgZGVmIGxpbmsgdmltS2V5Q29kZQl2aW1TcGVjRmlsZQoraGkgZGVmIGxpbmsgdmltTGV0CXZpbUNvbW1hbmQKK2hpIGRlZiBsaW5rIHZpbUxpbmVDb21tZW50CXZpbUNvbW1lbnQKK2hpIGRlZiBsaW5rIHZpbU1hcEJhbmcJdmltQ29tbWFuZAoraGkgZGVmIGxpbmsgdmltTWFwTW9kRXJyCXZpbUVycm9yCitoaSBkZWYgbGluayB2aW1NYXBNb2RLZXkJdmltRnVuY1NJRAoraGkgZGVmIGxpbmsgdmltTWFwTW9kCXZpbUJyYWNrZXQKK2hpIGRlZiBsaW5rIHZpbU1hcAl2aW1Db21tYW5kCitoaSBkZWYgbGluayB2aW1NYXJrTnVtYmVyCXZpbU51bWJlcgoraGkgZGVmIGxpbmsgdmltTWVudU1vZAl2aW1NYXBNb2QKK2hpIGRlZiBsaW5rIHZpbU1lbnVOYW1lTW9yZQl2aW1NZW51TmFtZQoraGkgZGVmIGxpbmsgdmltTXRjaENvbW1lbnQJdmltQ29tbWVudAoraGkgZGVmIGxpbmsgdmltTm90RnVuYwl2aW1Db21tYW5kCitoaSBkZWYgbGluayB2aW1Ob3RQYXRTZXAJdmltU3RyaW5nCitoaSBkZWYgbGluayB2aW1QYXRTZXBFcnIJdmltUGF0U2VwCitoaSBkZWYgbGluayB2aW1QYXRTZXBab25lCXZpbVN0cmluZworaGkgZGVmIGxpbmsgdmltUGxhaW5NYXJrCXZpbU1hcmsKK2hpIGRlZiBsaW5rIHZpbVBsYWluUmVnaXN0ZXIJdmltUmVnaXN0ZXIKK2hpIGRlZiBsaW5rIHZpbVNldE1vZAl2aW1PcHRpb24KK2hpIGRlZiBsaW5rIHZpbVNldFN0cmluZwl2aW1TdHJpbmcKK2hpIGRlZiBsaW5rIHZpbVNwZWNGaWxlTW9kCXZpbVNwZWNGaWxlCitoaSBkZWYgbGluayB2aW1TdHJpbmdDb250CXZpbVN0cmluZworaGkgZGVmIGxpbmsgdmltU3Vic3RGbGFnRXJyCXZpbUVycm9yCitoaSBkZWYgbGluayB2aW1TdWJzdFR3b0JTCXZpbVN0cmluZworaGkgZGVmIGxpbmsgdmltU3Vic3QJdmltQ29tbWFuZAoraGkgZGVmIGxpbmsgdmltU3luQ2FzZUVycm9yCXZpbUVycm9yCitoaSBkZWYgbGluayB2aW1TeW5jR3JvdXBOYW1lCXZpbUdyb3VwTmFtZQoraGkgZGVmIGxpbmsgdmltU3luY0dyb3VwCXZpbUdyb3VwTmFtZQoraGkgZGVmIGxpbmsgdmltU3luQ29udGFpbnMJdmltU3luT3B0aW9uCitoaSBkZWYgbGluayB2aW1TeW5LZXlDb250YWluZWRpbgl2aW1TeW5Db250YWlucworaGkgZGVmIGxpbmsgdmltU3luS2V5T3B0CXZpbVN5bk9wdGlvbgoraGkgZGVmIGxpbmsgdmltU3luTXRjaEdycAl2aW1TeW5PcHRpb24KK2hpIGRlZiBsaW5rIHZpbVN5bk10Y2hPcHQJdmltU3luT3B0aW9uCitoaSBkZWYgbGluayB2aW1TeW5OZXh0Z3JvdXAJdmltU3luT3B0aW9uCitoaSBkZWYgbGluayB2aW1TeW5Ob3RQYXRSYW5nZQl2aW1TeW5SZWdQYXQKK2hpIGRlZiBsaW5rIHZpbVN5blBhdFJhbmdlCXZpbVN0cmluZworaGkgZGVmIGxpbmsgdmltU3luUmVnT3B0CXZpbVN5bk9wdGlvbgoraGkgZGVmIGxpbmsgdmltU3luUmVnUGF0CXZpbVN0cmluZworaGkgZGVmIGxpbmsgdmltU3ludGF4CXZpbUNvbW1hbmQKK2hpIGRlZiBsaW5rIHZpbVN5blR5cGUJdmltU3BlY2lhbAoraGkgZGVmIGxpbmsgdmltVXNlckF0dHJiQ21wbHQJdmltU3BlY2lhbAoraGkgZGVmIGxpbmsgdmltVXNlckF0dHJiS2V5CXZpbU9wdGlvbgoraGkgZGVmIGxpbmsgdmltVXNlckF0dHJiCXZpbVNwZWNpYWwKK2hpIGRlZiBsaW5rIHZpbVVzZXJDb21tYW5kCXZpbUNvbW1hbmQKK2hpIGRlZiBsaW5rIHZpbVVzZXJGdW5jCU5vcm1hbAorCitoaSBkZWYgbGluayB2aW1BdXRvRXZlbnQJVHlwZQoraGkgZGVmIGxpbmsgdmltQnJhY2tldAlEZWxpbWl0ZXIKK2hpIGRlZiBsaW5rIHZpbUNtcGx4UmVwZWF0CVNwZWNpYWxDaGFyCitoaSBkZWYgbGluayB2aW1Db21tYW5kCVN0YXRlbWVudAoraGkgZGVmIGxpbmsgdmltQ29tbWVudAlDb21tZW50CitoaSBkZWYgbGluayB2aW1Db21tZW50VGl0bGUJUHJlUHJvYworaGkgZGVmIGxpbmsgdmltQ29udGludWUJU3BlY2lhbAoraGkgZGVmIGxpbmsgdmltQ3RybENoYXIJU3BlY2lhbENoYXIKK2hpIGRlZiBsaW5rIHZpbUVsc2VJZkVycglFcnJvcgoraGkgZGVmIGxpbmsgdmltRW52dmFyCVByZVByb2MKK2hpIGRlZiBsaW5rIHZpbUVycm9yCUVycm9yCitoaSBkZWYgbGluayB2aW1Gb2xkCUZvbGRlZAoraGkgZGVmIGxpbmsgdmltRnVuY05hbWUJRnVuY3Rpb24KK2hpIGRlZiBsaW5rIHZpbUZ1bmNTSUQJU3BlY2lhbAoraGkgZGVmIGxpbmsgdmltRnVuY1ZhcglJZGVudGlmaWVyCitoaSBkZWYgbGluayB2aW1Hcm91cAlUeXBlCitoaSBkZWYgbGluayB2aW1Hcm91cFNwZWNpYWwJU3BlY2lhbAoraGkgZGVmIGxpbmsgdmltSExNb2QJUHJlUHJvYworaGkgZGVmIGxpbmsgdmltSGlBdHRyaWIJUHJlUHJvYworaGkgZGVmIGxpbmsgdmltSGlUZXJtCVR5cGUKK2hpIGRlZiBsaW5rIHZpbUtleXdvcmQJU3RhdGVtZW50CitoaSBkZWYgbGluayB2aW1NYXJrCU51bWJlcgoraGkgZGVmIGxpbmsgdmltTWVudU5hbWUJUHJlUHJvYworaGkgZGVmIGxpbmsgdmltTm90YXRpb24JU3BlY2lhbAoraGkgZGVmIGxpbmsgdmltTnVtYmVyCU51bWJlcgoraGkgZGVmIGxpbmsgdmltT3BlcglPcGVyYXRvcgoraGkgZGVmIGxpbmsgdmltT3B0aW9uCVByZVByb2MKK2hpIGRlZiBsaW5rIHZpbU9wZXJFcnJvcglFcnJvcgoraGkgZGVmIGxpbmsgdmltUGF0U2VwCVNwZWNpYWxDaGFyCitoaSBkZWYgbGluayB2aW1QYXR0ZXJuCVR5cGUKK2hpIGRlZiBsaW5rIHZpbVJlZ2lzdGVyCVNwZWNpYWxDaGFyCitoaSBkZWYgbGluayB2aW1TY3JpcHREZWxpbQlDb21tZW50CitoaSBkZWYgbGluayB2aW1TZXAJRGVsaW1pdGVyCitoaSBkZWYgbGluayB2aW1TZXRTZXAJU3RhdGVtZW50CitoaSBkZWYgbGluayB2aW1TcGVjRmlsZQlJZGVudGlmaWVyCitoaSBkZWYgbGluayB2aW1TcGVjaWFsCVR5cGUKK2hpIGRlZiBsaW5rIHZpbVN0YXRlbWVudAlTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIHZpbVN0cmluZwlTdHJpbmcKK2hpIGRlZiBsaW5rIHZpbVN1YnN0RGVsaW0JRGVsaW1pdGVyCitoaSBkZWYgbGluayB2aW1TdWJzdEZsYWdzCVNwZWNpYWwKK2hpIGRlZiBsaW5rIHZpbVN1YnN0U3Vic3RyCVNwZWNpYWxDaGFyCitoaSBkZWYgbGluayB2aW1TeW5DYXNlCVR5cGUKK2hpIGRlZiBsaW5rIHZpbVN5bkNhc2VFcnJvcglFcnJvcgoraGkgZGVmIGxpbmsgdmltU3luRXJyb3IJRXJyb3IKK2hpIGRlZiBsaW5rIHZpbVN5bk9wdGlvbglTcGVjaWFsCitoaSBkZWYgbGluayB2aW1TeW5SZWcJVHlwZQoraGkgZGVmIGxpbmsgdmltU3luY0MJVHlwZQoraGkgZGVmIGxpbmsgdmltU3luY0Vycm9yCUVycm9yCitoaSBkZWYgbGluayB2aW1TeW5jS2V5CVR5cGUKK2hpIGRlZiBsaW5rIHZpbVN5bmNOb25lCVR5cGUKK2hpIGRlZiBsaW5rIHZpbVRvZG8JVG9kbworaGkgZGVmIGxpbmsgdmltVXNlckNtZEVycm9yCUVycm9yCisKKyIgQ3VycmVudCBTeW50YXggVmFyaWFibGU6IHt7ezEKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInZpbSIKKyIgdmltOnRzPTE4ICBmZG09bWFya2VyCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC92aW1pbmZvLnZpbSBiL3J1bnRpbWUvc3ludGF4L3ZpbWluZm8udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDViODkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC92aW1pbmZvLnZpbQpAQCAtMCwwICsxLDUzIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJVmltIC52aW1pbmZvIGZpbGUKKyIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CTIwMDEgQXByIDI1CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBUaGUgbGluZXMgdGhhdCBhcmUgTk9UIHJlY29nbml6ZWQKK3N5biBtYXRjaCB2aW1pbmZvRXJyb3IgIl5bXlx0XS4qIgorCisiIFRoZSBvbmUtY2hhcmFjdGVyIG9uZS1saW5lcnMgdGhhdCBhcmUgcmVjb2duaXplZAorc3luIG1hdGNoIHZpbWluZm9TdGF0ZW1lbnQgIl5bLyYkQDo/PSUhPF0iCisKKyIgVGhlIHR3by1jaGFyYWN0ZXIgb25lLWxpbmVycyB0aGF0IGFyZSByZWNvZ25pemVkCitzeW4gbWF0Y2ggdmltaW5mb1N0YXRlbWVudCAiXlstJz4iXS4iCitzeW4gbWF0Y2ggdmltaW5mb1N0YXRlbWVudCArXiIiLisKK3N5biBtYXRjaCB2aW1pbmZvU3RhdGVtZW50ICJeXH5bLyZdIgorc3luIG1hdGNoIHZpbWluZm9TdGF0ZW1lbnQgIl5cfltoSF0iCitzeW4gbWF0Y2ggdmltaW5mb1N0YXRlbWVudCAiXlx+W21NXVtzU11bbExdW2VFXVxkXCtcflw9Wy8mXSIKKworc3luIG1hdGNoIHZpbWluZm9PcHRpb24gIl5cKi4qPSIgY29udGFpbnM9dmltaW5mb09wdGlvbk5hbWUKK3N5biBtYXRjaCB2aW1pbmZvT3B0aW9uTmFtZSAiXCpcYSoibXM9cysxIGNvbnRhaW5lZAorCisiIENvbW1lbnRzCitzeW4gbWF0Y2ggdmltaW5mb0NvbW1lbnQgIl4jLioiCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3ZpbWluZm9fc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfdmltaW5mb19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB2aW1pbmZvQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgdmltaW5mb0Vycm9yCQlFcnJvcgorICBIaUxpbmsgdmltaW5mb1N0YXRlbWVudAlTdGF0ZW1lbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidmltaW5mbyIKKworIiB2aW06IHRzPTggc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvdmlyYXRhLnZpbSBiL3J1bnRpbWUvc3ludGF4L3ZpcmF0YS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU5N2I4ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3ZpcmF0YS52aW0KQEAgLTAsMCArMSwyMTkgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglWaXJhdGEgQUNvbmZpZyBDb25maWd1cmF0aW9uIFNjcmlwdAorIiBNYWludGFpbmVyOglNYW51ZWwgTS5ILiBTdG9sCTxtbWguc3RvbEBnbXgubmV0PgorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMTEKKyIgVmltIFVSTDoJaHR0cDovL3d3dy52aW0ub3JnL2xhbmcuaHRtbAorIiBWaXJhdGEgVVJMOglodHRwOi8vd3d3Lmdsb2Jlc3BhbnZpcmF0YS5jb20vCisKKworIiBWaXJhdGEgQUNvbmZpZyBDb25maWd1cmF0aW9uIFNjcmlwdCBzeW50YXgKKyIgIENhbiBiZSBkZXRlY3RlZCBieTogMSkgRXh0ZW5zaW9uIC5odywgLnN3LCAucGtnIGFuZCAubW9kdWxlCisiCQkgICAgICAgMikgVGhlIGZpbGUgbmFtZSBwYXR0ZXJuICJtay4qXC5jZmciCisiCQkgICAgICAgMykgVGhlIHN0cmluZyAiVmlyYXRhIiBpbiB0aGUgZmlyc3QgNSBsaW5lcworCisKKyIgU2V0dXAgU3ludGF4OgoraWYgdmVyc2lvbiA8IDYwMAorICAiICBDbGVhciBvbGQgc3ludGF4IHNldHRpbmdzCisgIHN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKyIgIFZpcmF0YSBzeW50YXggaXMgY2FzZSBpbnNlbnNpdGl2ZSAobW9zdGx5KQorc3luIGNhc2UgaWdub3JlCisKKworCisiIENvbW1lbnRzOgorIiBWaXJhdGEgY29tbWVudHMgc3RhcnQgd2l0aCAlLCBidXQgJSBpcyBub3QgYSBrZXl3b3JkIGNoYXJhY3Rlcgorc3luIHJlZ2lvbiAgdmlyYXRhQ29tbWVudAlzdGFydD0iXiUiIHN0YXJ0PSJccyUibGM9MSBrZWVwZW5kIGVuZD0iJCIgY29udGFpbnM9QHZpcmF0YUdycEluQ29tbWVudHMKK3N5biByZWdpb24gIHZpcmF0YVNwY2xDb21tZW50CXN0YXJ0PSJeJSUiIHN0YXJ0PSJccyUlImxjPTEga2VlcGVuZCBlbmQ9IiQiIGNvbnRhaW5zPUB2aXJhdGFHcnBJbkNvbW1lbnRzCitzeW4ga2V5d29yZCB2aXJhdGFJbkNvbW1lbnRUb2RvCWNvbnRhaW5lZCBUT0RPIEZJWE1FIFhYWFtYWFhYWF0gUkVWSUVXIFRCRAorc3luIGNsdXN0ZXIgdmlyYXRhR3JwSW5Db21tZW50cwljb250YWlucz12aXJhdGFJbkNvbW1lbnRUb2RvCitzeW4gY2x1c3RlciB2aXJhdGFHcnBDb21tZW50cwljb250YWlucz1AdmlyYXRhR3JwSW5Db21tZW50cyx2aXJhdGFDb21tZW50LHZpcmF0YVNwY2xDb21tZW50CisKKworIiBDb25zdGFudHM6CitzeW4gbWF0Y2ggICB2aXJhdGFTdHJpbmdFcnJvcgkrWyJdKworc3luIHJlZ2lvbiAgdmlyYXRhU3RyaW5nCXN0YXJ0PSsiKyBza2lwPStcKFxcXFxcfFxcIlwpKyBlbmQ9KyIrIG9uZWxpbmUgY29udGFpbnM9dmlyYXRhU3BjbENoYXJFcnJvcix2aXJhdGFTcGNsQ2hhcixAdmlyYXRhR3JwRGVmU3Vic3RzCitzeW4gbWF0Y2ggICB2aXJhdGFDaGFyYWN0ZXIJKydbXiddXHstfScrIGNvbnRhaW5zPXZpcmF0YVNwY2xDaGFyRXJyb3IsdmlyYXRhU3BjbENoYXIKK3N5biBtYXRjaCAgIHZpcmF0YVNwY2xDaGFyCWNvbnRhaW5lZCArXFxcKHhceFwrXHxcb1x7MSwzfVx8WydcIj9cXGFiZWZucnR2XVwpKworc3luIG1hdGNoICAgdmlyYXRhTnVtYmVyRXJyb3IJIlw8XGRcey0xLH1cSVx7LTEsfVw+Igorc3luIG1hdGNoICAgdmlyYXRhTnVtYmVyRXJyb3IJIlw8MHhceCpcWFx4Klw+Igorc3luIG1hdGNoICAgdmlyYXRhTnVtYmVyRXJyb3IJIlw8XGRcK1wuXGQqXChlWystXVw9XGRcK1wpXD1cPiIKK3N5biBtYXRjaCAgIHZpcmF0YURlY051bWJlcgkiXDxcZFwrVVw9TFw9XD4iCitzeW4gbWF0Y2ggICB2aXJhdGFIZXhOdW1iZXIJIlw8MHhceFwrVVw9TFw9XD4iCitzeW4gbWF0Y2ggICB2aXJhdGFTaXplTnVtYmVyCSJcPFxkXCtbQktNXVw+ImhlPWUtMQorc3luIG1hdGNoICAgdmlyYXRhU2l6ZU51bWJlcgkiXDxcZFwrW0tNXUJcPiJoZT1lLTIKK3N5biBjbHVzdGVyIHZpcmF0YUdycE51bWJlcnMJY29udGFpbnM9dmlyYXRhTnVtYmVyRXJyb3IsdmlyYXRhRGVjTnVtYmVyLHZpcmF0YUhleE51bWJlcix2aXJhdGFTaXplTnVtYmVyCitzeW4gY2x1c3RlciB2aXJhdGFHcnBDb25zdGFudHMJY29udGFpbnM9QHZpcmF0YUdycE51bWJlcnMsdmlyYXRhU3RyaW5nRXJyb3IsdmlyYXRhU3RyaW5nLHZpcmF0YUNoYXJhY3Rlcix2aXJhdGFTcGNsQ2hhcgorCisKKyIgSWRlbnRpZmllcnM6CitzeW4gbWF0Y2ggICB2aXJhdGFJZGVudEVycm9yCWNvbnRhaW5lZCAiXDxcRFxTKlw+Igorc3luIG1hdGNoICAgdmlyYXRhSWRlbnRpZmllcgljb250YWluZWQgIlw8XElcaVx7LX1cKFwtXGlcey0xLH1cKSpcPiIgY29udGFpbnM9QHZpcmF0YUdycERlZlN1YnN0cworc3luIG1hdGNoICAgdmlyYXRhRmlsZUlkZW50CWNvbnRhaW5lZCAiXEZcZioiIGNvbnRhaW5zPUB2aXJhdGFHcnBEZWZTdWJzdHMKK3N5biBjbHVzdGVyIHZpcmF0YUdycElkZW50cwljb250YWlucz12aXJhdGFJZGVudGlmaWVyLHZpcmF0YUlkZW50RXJyb3IKK3N5biBjbHVzdGVyIHZpcmF0YUdycEZpbGVJZGVudHMJY29udGFpbnM9dmlyYXRhRmlsZUlkZW50LHZpcmF0YUlkZW50RXJyb3IKKworCisiIFN0YXRlbWVudHM6CitzeW4gbWF0Y2ggICB2aXJhdGFTdGF0ZW1lbnQJIl5ccypDb25maWdcKFwoL0tlcm5lbFwpXD1cLlwoaHNcPVx8c1wpXClcPVw+Igorc3luIG1hdGNoICAgdmlyYXRhU3RhdGVtZW50CSJeXHMqQ29uZmlnXHNcK1xJXGlcey19XChcLVxpXHstMSx9XCkqXC5cKGhzXD1cfHNcKVw+Igorc3luIG1hdGNoICAgdmlyYXRhU3RhdGVtZW50CSJeXHMqTWFrZVwuXElcaVx7LX1cKFwtXGlcey0xfVwpKlw+IiBza2lwd2hpdGUgbmV4dGdyb3VwPUB2aXJhdGFHcnBJZGVudHMKK3N5biBtYXRjaCAgIHZpcmF0YVN0YXRlbWVudAkiXlxzKk1ha2VcLmNcKGF0XClcPSsrXHMibWU9ZS0xIHNraXB3aGl0ZSBuZXh0Z3JvdXA9QHZpcmF0YUdycElkZW50cworc3luIG1hdGNoICAgdmlyYXRhU3RhdGVtZW50CSJeXHMqXChBcmNoaXRlY3R1cmVcfEdldEVudlx8UmVzZXJ2ZWRcfFwoVW5cKVw9RGVmaW5lXHxWZXJzaW9uXClcPiIgc2tpcHdoaXRlIG5leHRncm91cD1AdmlyYXRhR3JwSWRlbnRzCitzeW4gbWF0Y2ggICB2aXJhdGFTdGF0ZW1lbnQJIl5ccypcKEhhcmR3YXJlXHxNb2R1bGVTb3VyY2VcfFwoUmVsZWFzZVwpXD1QYXRoXHxTb2Z0d2FyZVwpXD4iIHNraXB3aGl0ZSBuZXh0Z3JvdXA9QHZpcmF0YUdycEZpbGVJZGVudHMKK3N5biBtYXRjaCAgIHZpcmF0YVN0YXRlbWVudAkiXlxzKlwoRGVmYXVsdFByaVx8SHlkcm9nZW5cKVw+IiBza2lwd2hpdGUgbmV4dGdyb3VwPXZpcmF0YURlY051bWJlcix2aXJhdGFOdW1iZXJFcnJvcgorc3luIG1hdGNoICAgdmlyYXRhU3RhdGVtZW50CSJeXHMqXChOb0luaXRcfFBDSVx8U3lzTGlua1wpXD4iCitzeW4gbWF0Y2ggICB2aXJhdGFTdGF0ZW1lbnQJIl5ccypBbGxvd1xzXCtcKE1vZHVsZUNvbmZpZ1wpXD4iCitzeW4gbWF0Y2ggICB2aXJhdGFTdGF0ZW1lbnQJIl5ccypOb1dhcm5cc1wrXChFeHBvcnRcfFBhcnNlXD1hYmxlXHxSZWxhdGl2ZV1cKVw+Igorc3luIG1hdGNoICAgdmlyYXRhU3RhdGVtZW50CSJeXHMqRGVidWdcc1wrT1woZmZcfG5cKVw+IgorCisiIEltcG9ydCAoUGFja2FnZSA8ZXhlYz58TW9kdWxlIDxuYW1lPiBmcm9tIDxkaXI+KQorc3luIHJlZ2lvbiAgdmlyYXRhSW1wb3J0RGVmCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9dmlyYXRhU3RhdGVtZW50IHN0YXJ0PSJeXHMqSW1wb3J0XD4iIGtlZXBlbmQgZW5kPSIkIiBjb250YWlucz12aXJhdGFJbkltcG9ydCx2aXJhdGFNb2R1bGVEZWYsdmlyYXRhTnVtYmVyRXJyb3IsdmlyYXRhU3RyaW5nRXJyb3IsQHZpcmF0YUdycERlZlN1YnN0cworc3luIG1hdGNoICAgdmlyYXRhSW5JbXBvcnQJY29udGFpbmVkICJcPFwoTW9kdWxlXHxQYWNrYWdlXHxmcm9tXClcPiIgc2tpcHdoaXRlIG5leHRncm91cD1AdmlyYXRhR3JwRmlsZUlkZW50cworIiBFeHBvcnQgKEhlYWRlciA8aGVhZGVyIGZpbGU+fFNMaWJyYXJ5IDxvYmogZmlsZT4pCitzeW4gcmVnaW9uICB2aXJhdGFFeHBvcnREZWYJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD12aXJhdGFTdGF0ZW1lbnQgc3RhcnQ9Il5ccypFeHBvcnRcPiIga2VlcGVuZCBlbmQ9IiQiIGNvbnRhaW5zPXZpcmF0YUluRXhwb3J0LHZpcmF0YU51bWJlckVycm9yLHZpcmF0YVN0cmluZ0Vycm9yLEB2aXJhdGFHcnBEZWZTdWJzdHMKK3N5biBtYXRjaCAgIHZpcmF0YUluRXhwb3J0CWNvbnRhaW5lZCAiXDxcKEhlYWRlclx8W1NVXUxpYnJhcnlcKVw+IiBza2lwd2hpdGUgbmV4dGdyb3VwPUB2aXJhdGFHcnBGaWxlSWRlbnRzCisiIFByb2Nlc3MgPG5hbWU+IGlzIDxkaXIvZXhlYz4KK3N5biByZWdpb24gIHZpcmF0YVByb2Nlc3NEZWYJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD12aXJhdGFTdGF0ZW1lbnQgc3RhcnQ9Il5ccypQcm9jZXNzXD4iIGtlZXBlbmQgZW5kPSIkIiBjb250YWlucz12aXJhdGFJblByb2Nlc3MsdmlyYXRhSW5FeGVjLHZpcmF0YU51bWJlckVycm9yLHZpcmF0YVN0cmluZ0Vycm9yLEB2aXJhdGFHcnBEZWZTdWJzdHMsQHZpcmF0YUdycElkZW50cworc3luIG1hdGNoICAgdmlyYXRhSW5Qcm9jZXNzCWNvbnRhaW5lZCAiXDxpc1w+IgorIiBJbnN0YW5jZSA8bmFtZT4gb2YgPG1vZHVsZT4KK3N5biByZWdpb24gIHZpcmF0YUluc3RhbmNlRGVmCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9dmlyYXRhU3RhdGVtZW50IHN0YXJ0PSJeXHMqSW5zdGFuY2VcPiIga2VlcGVuZCBlbmQ9IiQiIGNvbnRhaW5zPXZpcmF0YUluSW5zdGFuY2UsdmlyYXRhTnVtYmVyRXJyb3IsdmlyYXRhU3RyaW5nRXJyb3IsQHZpcmF0YUdycERlZlN1YnN0cyxAdmlyYXRhR3JwSWRlbnRzCitzeW4gbWF0Y2ggICB2aXJhdGFJbkluc3RhbmNlCWNvbnRhaW5lZCAiXDxvZlw+IgorIiBNb2R1bGUgPG5hbWU+IGZyb20gPGRpcj4KK3N5biByZWdpb24gIHZpcmF0YU1vZHVsZURlZgl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXZpcmF0YVN0YXRlbWVudCBzdGFydD0iXlxzKlwoUGFja2FnZVx8TW9kdWxlXClcPiIga2VlcGVuZCBlbmQ9IiQiIGNvbnRhaW5zPXZpcmF0YUluTW9kdWxlLHZpcmF0YU51bWJlckVycm9yLHZpcmF0YVN0cmluZ0Vycm9yLEB2aXJhdGFHcnBEZWZTdWJzdHMKK3N5biBtYXRjaCAgIHZpcmF0YUluTW9kdWxlCWNvbnRhaW5lZCAiXlxzKlBhY2thZ2VcPiJocz1lLTcgc2tpcHdoaXRlIG5leHRncm91cD1AdmlyYXRhR3JwSWRlbnRzCitzeW4gbWF0Y2ggICB2aXJhdGFJbk1vZHVsZQljb250YWluZWQgIl5ccypNb2R1bGVcPiJocz1lLTYgc2tpcHdoaXRlIG5leHRncm91cD1AdmlyYXRhR3JwSWRlbnRzCitzeW4gbWF0Y2ggICB2aXJhdGFJbk1vZHVsZQljb250YWluZWQgIlw8ZnJvbVw+IiBza2lwd2hpdGUgbmV4dGdyb3VwPUB2aXJhdGFHcnBGaWxlSWRlbnRzCisiIENvbG91ciA8bmFtZT4gZnJvbSA8ZGlyPgorc3luIHJlZ2lvbiAgdmlyYXRhQ29sb3VyRGVmCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9dmlyYXRhU3RhdGVtZW50IHN0YXJ0PSJeXHMqQ29sb3VyXD4iIGtlZXBlbmQgZW5kPSIkIiBjb250YWlucz12aXJhdGFJbkNvbG91cix2aXJhdGFOdW1iZXJFcnJvcix2aXJhdGFTdHJpbmdFcnJvcixAdmlyYXRhR3JwRGVmU3Vic3RzCitzeW4gbWF0Y2ggICB2aXJhdGFJbkNvbG91cgljb250YWluZWQgIl5ccypDb2xvdXJcPiJocz1lLTYgc2tpcHdoaXRlIG5leHRncm91cD1AdmlyYXRhR3JwSWRlbnRzCitzeW4gbWF0Y2ggICB2aXJhdGFJbkNvbG91cgljb250YWluZWQgIlw8ZnJvbVw+IiBza2lwd2hpdGUgbmV4dGdyb3VwPUB2aXJhdGFHcnBGaWxlSWRlbnRzCisiIExpbmsgezxsaW5rIGNtZHM+fQorIiBPYmplY3Qge0V4ZWN1dGFibGUgWzxFeGVjT3B0aW9ucz5dfQorc3luIG1hdGNoICAgdmlyYXRhU3RhdGVtZW50CSJeXHMqXChMaW5rXHxPYmplY3RcKSIKKyIgRXhlY3V0YWJsZSA8bmFtZT4gWzxFeGVjT3B0aW9ucz5dCitzeW4gcmVnaW9uICB2aXJhdGFFeGVjRGVmCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9dmlyYXRhU3RhdGVtZW50IHN0YXJ0PSJeXHMqRXhlY3V0YWJsZVw+IiBrZWVwZW5kIGVuZD0iJCIgY29udGFpbnM9dmlyYXRhSW5FeGVjLHZpcmF0YU51bWJlckVycm9yLHZpcmF0YVN0cmluZ0Vycm9yCitzeW4gbWF0Y2ggICB2aXJhdGFJbkV4ZWMJY29udGFpbmVkICJeXHMqRXhlY3V0YWJsZVw+IiBza2lwd2hpdGUgbmV4dGdyb3VwPUB2aXJhdGFHcnBEZWZTdWJzdHMsQHZpcmF0YUdycElkZW50cworc3luIG1hdGNoICAgdmlyYXRhSW5FeGVjCWNvbnRhaW5lZCAiXDxcKGVwaWxvZ3VlXHxwcm9cKGxvZ3VlXHxjZXNzXClcfHFoYW5kbGVyXClcPiIgc2tpcHdoaXRlIG5leHRncm91cD1AdmlyYXRhR3JwRGVmU3Vic3RzLEB2aXJhdGFHcnBJZGVudHMKK3N5biBtYXRjaCAgIHZpcmF0YUluRXhlYwljb250YWluZWQgIlw8XChwcmlvcml0eVx8c3RhY2tcKVw+IiBza2lwd2hpdGUgbmV4dGdyb3VwPUB2aXJhdGFHcnBEZWZTdWJzdHMsQHZpcmF0YUdycE51bWJlcnMKKyIgTWVzc2FnZSA8bmFtZT4gezxtc2cgZm9ybWF0Pn0KKyIgTWVzc2FnZUlkIDxudW1iZXI+CitzeW4gbWF0Y2ggICB2aXJhdGFTdGF0ZW1lbnQJIl5ccypNZXNzYWdlXChJZFwpXD1cPiIgc2tpcHdoaXRlIG5leHRncm91cD1AdmlyYXRhR3JwTnVtYmVycworIiBNYWtlUnVsZSA8bWFrZSBzdWZmaXg9ZmlsZT4gezxtYWtlIGNtZHM+fQorc3luIHJlZ2lvbiAgdmlyYXRhTWFrZURlZgl0cmFuc3BhcmVudCBtYXRjaGdyb3VwPXZpcmF0YVN0YXRlbWVudCBzdGFydD0iXlxzKk1ha2VSdWxlXD4iIGtlZXBlbmQgZW5kPSIkIiBjb250YWlucz12aXJhdGFJbk1ha2UsQHZpcmF0YUdycERlZlN1YnN0cworc3luIGNhc2UgbWF0Y2gKK3N5biBtYXRjaCAgIHZpcmF0YUluTWFrZQljb250YWluZWQgIlw8Tlw+Igorc3luIGNhc2UgaWdub3JlCisiIChBcHBlbmR8RWRpdHxDb3B5KVJ1bGUgPG1ha2Ugc3VmZml4PWZpbGU+IDxzdWJzdCBjbWQ+CitzeW4gbWF0Y2ggICB2aXJhdGFTdGF0ZW1lbnQJIl5ccypcKEFwcGVuZFx8Q29weVx8RWRpdFwpUnVsZVw+IgorIiBBbHRlclJ1bGVzIGluIDxmaWxlPiA8c3Vic3QgY21kPgorc3luIHJlZ2lvbiAgdmlyYXRhQWx0ZXJEZWYJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD12aXJhdGFTdGF0ZW1lbnQgc3RhcnQ9Il5ccypBbHRlclJ1bGVzXD4iIGtlZXBlbmQgZW5kPSIkIiBjb250YWlucz12aXJhdGFJbkFsdGVyLEB2aXJhdGFHcnBEZWZTdWJzdHMKK3N5biBtYXRjaCAgIHZpcmF0YUluQWx0ZXIJY29udGFpbmVkICJcPGluXD4iIHNraXB3aGl0ZSBuZXh0Z3JvdXA9QHZpcmF0YUdycElkZW50cworIiBDbHVzdGVyaW5nCitzeW4gY2x1c3RlciB2aXJhdGFHcnBJblN0YXRtbnRzCWNvbnRhaW5zPXZpcmF0YUluSW1wb3J0LHZpcmF0YUluRXhwb3J0LHZpcmF0YUluRXhlYyx2aXJhdGFJblByb2Nlc3MsdmlyYXRhSW5BbHRlcix2aXJhdGFJbkluc3RhbmNlLHZpcmF0YUluTW9kdWxlLHZpcmF0YUluQ29sb3VyCitzeW4gY2x1c3RlciB2aXJhdGFHcnBTdGF0ZW1lbnRzCWNvbnRhaW5zPUB2aXJhdGFHcnBJblN0YXRtbnRzLHZpcmF0YVN0YXRlbWVudCx2aXJhdGFJbXBvcnREZWYsdmlyYXRhRXhwb3J0RGVmLHZpcmF0YUV4ZWNEZWYsdmlyYXRhUHJvY2Vzc0RlZix2aXJhdGFBbHRlckRlZix2aXJhdGFJbnN0YW5jZURlZix2aXJhdGFNb2R1bGVEZWYsdmlyYXRhQ29sb3VyRGVmCisKKworIiBNa0ZsYXNoLkNmZyBGaWxlIFN0YXRlbWVudHM6CitzeW4gcmVnaW9uICB2aXJhdGFDZmdGaWxlRGVmCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9dmlyYXRhQ2ZnU3RhdGVtZW50IHN0YXJ0PSJeXHMqRGlyXD4iIHN0YXJ0PSJeXHMqXGFcey19RmlsZVw+IiBzdGFydD0iXlxzKk91dHB1dEZpbGVcZFxkXD1cPiIgc3RhcnQ9Il5ccypcYVx3XHstfVtOUF1QRmlsZVw+IiBrZWVwZW5kIGVuZD0iJCIgY29udGFpbnM9QHZpcmF0YUdycEZpbGVJZGVudHMKK3N5biByZWdpb24gIHZpcmF0YUNmZ1NpemVEZWYJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD12aXJhdGFDZmdTdGF0ZW1lbnQgc3RhcnQ9Il5ccypcYVx7LX1TaXplXD4iIHN0YXJ0PSJeXHMqQ29uZmlnSW5mb1w+IiBrZWVwZW5kIGVuZD0iJCIgY29udGFpbnM9QHZpcmF0YUdycE51bWJlcnMsQHZpcmF0YUdycERlZlN1YnN0cyx2aXJhdGFJZGVudEVycm9yCitzeW4gcmVnaW9uICB2aXJhdGFDZmdOdW1iZXJEZWYJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD12aXJhdGFDZmdTdGF0ZW1lbnQgc3RhcnQ9Il5ccypGbGFzaGNoaXBOdW1cKGJcKGVyXD1cKVw9XClcPVw+IiBzdGFydD0iXlxzKkdyYW51bGFyaXR5XD4iIGtlZXBlbmQgZW5kPSIkIiBjb250YWlucz1AdmlyYXRhR3JwTnVtYmVycyxAdmlyYXRhR3JwRGVmU3Vic3RzCitzeW4gcmVnaW9uICB2aXJhdGFDZmdNYWNBZGRyRGVmCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9dmlyYXRhQ2ZnU3RhdGVtZW50IHN0YXJ0PSJeXHMqTWFjQWRkcmVzc1w+IiBrZWVwZW5kIGVuZD0iJCIgY29udGFpbnM9dmlyYXRhTnVtYmVyRXJyb3IsdmlyYXRhU3RyaW5nRXJyb3IsdmlyYXRhSWRlbnRFcnJvcix2aXJhdGFJbk1hY0FkZHIsQHZpcmF0YUdycERlZlN1YnN0cworc3luIG1hdGNoICAgdmlyYXRhSW5NYWNBZGRyCWNvbnRhaW5lZCAiXHhbOl1ceFx7MSwyfVw+ImxjPTIKK3N5biBtYXRjaCAgIHZpcmF0YUluTWFjQWRkcgljb250YWluZWQgIlxzXHhcezEsMn1bOl1ceCJsYz0xLG1lPWUtMSxoZT1lLTIgbmV4dGdyb3VwPXZpcmF0YUluTWFjQWRkcgorc3luIG1hdGNoICAgdmlyYXRhQ2ZnU3RhdGVtZW50CSJeXHMqVGFyZ2V0XD4iIHNraXB3aGl0ZSBuZXh0Z3JvdXA9QHZpcmF0YUdycElkZW50cworc3luIGNsdXN0ZXIgdmlyYXRhR3JwQ2Zncwljb250YWlucz12aXJhdGFDZmdTdGF0ZW1lbnQsdmlyYXRhQ2ZnRmlsZURlZix2aXJhdGFDZmdTaXplRGVmLHZpcmF0YUNmZ051bWJlckRlZix2aXJhdGFDZmdNYWNBZGRyRGVmLHZpcmF0YUluTWFjQWRkcgorCisKKworIiBQcmVQcm9jZXNzb3IgSW5zdHJ1Y3Rpb25zOgorIiAgRGVmaW5lcworc3luIG1hdGNoICAgdmlyYXRhRGVmaW5lCSJeXHMqXChVblwpXD1TZXRcPiIgc2tpcHdoaXRlIG5leHRncm91cD1AdmlyYXRhR3JwSWRlbnRzCitzeW4gbWF0Y2ggICB2aXJhdGFJbmNsdWRlCSJeXHMqSW5jbHVkZVw+IiBza2lwd2hpdGUgbmV4dGdyb3VwPUB2aXJhdGFHcnBGaWxlSWRlbnRzCitzeW4gbWF0Y2ggICB2aXJhdGFEZWZTdWJzdEVycm9yCSJbXiRdXCQibGM9MQorc3luIG1hdGNoICAgdmlyYXRhRGVmU3Vic3RFcnJvcgkiXCRcKFx3XHx7XCguXHstfX1cKVw9XCkiCitzeW4gY2FzZSBtYXRjaAorc3luIG1hdGNoICAgdmlyYXRhRGVmU3Vic3QJIlwkXChcZFx8W0RJTk9SU11cfHtcSVxpXHstfVwoXC1caVx7LTEsfVwpKn1cKSIKK3N5biBjYXNlIGlnbm9yZQorIiAgQ29uZGl0aW9uYWxzCitzeW4gY2x1c3RlciB2aXJhdGFHcnBDbnRuUHJlQ29uCWNvbnRhaW5zPUFMTEJVVCxAdmlyYXRhR3JwSW5Db21tZW50cyxAdmlyYXRhR3JwRmlsZUlkZW50cyxAdmlyYXRhR3JwSW5TdGF0bW50cworc3luIHJlZ2lvbiAgdmlyYXRhUHJlQ29uRGVmCXRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9dmlyYXRhUHJlQ29uZGl0IHN0YXJ0PSJeXHMqSWZcPiIgZW5kPSJeXHMqRW5kaWZcPiIgY29udGFpbnM9QHZpcmF0YUdycENudG5QcmVDb24KK3N5biBtYXRjaCAgIHZpcmF0YVByZUNvbmRpdAljb250YWluZWQgIl5ccypFbHNlXChcc1wrSWZcKVw9XD4iCitzeW4gcmVnaW9uICB2aXJhdGFQcmVDb25EZWYJdHJhbnNwYXJlbnQgbWF0Y2hncm91cD12aXJhdGFQcmVDb25kaXQgc3RhcnQ9Il5ccypGb3JFYWNoXD4iIGVuZD0iXlxzKkRvbmVcPiIgY29udGFpbnM9QHZpcmF0YUdycENudG5QcmVDb24KKyIgIFByZS1Qcm9jZXNzb3JzCitzeW4gcmVnaW9uICB2aXJhdGFQcmVQcm9jCXN0YXJ0PSJeXHMqRXJyb3JcPiIgc3RhcnQ9Il5ccypXYXJuaW5nXD4iIG9uZWxpbmUgZW5kPSIkIiBjb250YWlucz1AdmlyYXRhR3JwQ29uc3RhbnRzLEB2aXJhdGFHcnBEZWZTdWJzdHMKK3N5biBjbHVzdGVyIHZpcmF0YUdycERlZlN1YnN0cwljb250YWlucz12aXJhdGFEZWZTdWJzdEVycm9yLHZpcmF0YURlZlN1YnN0CitzeW4gY2x1c3RlciB2aXJhdGFHcnBQcmVQcm9jcwljb250YWlucz1AdmlyYXRhR3JwRGVmU3Vic3RzLHZpcmF0YURlZmluZSx2aXJhdGFJbmNsdWRlLHZpcmF0YVByZUNvbkRlZix2aXJhdGFQcmVDb25kaXQsdmlyYXRhUHJlUHJvYworCisKKyIgU3luY2hyb25pemUgU3ludGF4Ogorc3luIHN5bmMgY2xlYXIKK3N5biBzeW5jIG1pbmxpbmVzPTUwCQkiZm9yIG11bHRpcGxlIHJlZ2lvbiBuZXN0aW5nCisKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlciAgOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3ZpcmF0YV9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF92aXJhdGFfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFN1YiBMaW5rczoKKyAgSGlMaW5rIHZpcmF0YURlZlN1YnN0RXJyb3IJdmlyYXRhUHJlUHJvY0Vycm9yCisgIEhpTGluayB2aXJhdGFEZWZTdWJzdAkJdmlyYXRhUHJlUHJvYworICBIaUxpbmsgdmlyYXRhSW5BbHRlcgkJdmlyYXRhT3BlcmF0b3IKKyAgSGlMaW5rIHZpcmF0YUluRXhlYwkJdmlyYXRhT3BlcmF0b3IKKyAgSGlMaW5rIHZpcmF0YUluRXhwb3J0CQl2aXJhdGFPcGVyYXRvcgorICBIaUxpbmsgdmlyYXRhSW5JbXBvcnQJCXZpcmF0YU9wZXJhdG9yCisgIEhpTGluayB2aXJhdGFJbkluc3RhbmNlCXZpcmF0YU9wZXJhdG9yCisgIEhpTGluayB2aXJhdGFJbk1ha2UJCXZpcmF0YU9wZXJhdG9yCisgIEhpTGluayB2aXJhdGFJbk1vZHVsZQkJdmlyYXRhT3BlcmF0b3IKKyAgSGlMaW5rIHZpcmF0YUluUHJvY2Vzcwl2aXJhdGFPcGVyYXRvcgorICBIaUxpbmsgdmlyYXRhSW5NYWNBZGRyCXZpcmF0YUhleE51bWJlcgorCisgICIgQ29tbWVudCBHcm91cDoKKyAgSGlMaW5rIHZpcmF0YUNvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHZpcmF0YVNwY2xDb21tZW50CVNwZWNpYWxDb21tZW50CisgIEhpTGluayB2aXJhdGFJbkNvbW1lbnRUb2RvCVRvZG8KKworICAiIENvbnN0YW50IEdyb3VwOgorICBIaUxpbmsgdmlyYXRhU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIHZpcmF0YVN0cmluZ0Vycm9yCUVycm9yCisgIEhpTGluayB2aXJhdGFDaGFyYWN0ZXIJQ2hhcmFjdGVyCisgIEhpTGluayB2aXJhdGFTcGNsQ2hhcgkJU3BlY2lhbAorICBIaUxpbmsgdmlyYXRhRGVjTnVtYmVyCU51bWJlcgorICBIaUxpbmsgdmlyYXRhSGV4TnVtYmVyCU51bWJlcgorICBIaUxpbmsgdmlyYXRhU2l6ZU51bWJlcglOdW1iZXIKKyAgSGlMaW5rIHZpcmF0YU51bWJlckVycm9yCUVycm9yCisKKyAgIiBJZGVudGlmaWVyIEdyb3VwOgorICBIaUxpbmsgdmlyYXRhSWRlbnRFcnJvcglFcnJvcgorCisgICIgUHJlUHJvYyBHcm91cDoKKyAgSGlMaW5rIHZpcmF0YVByZVByb2MJCVByZVByb2MKKyAgSGlMaW5rIHZpcmF0YURlZmluZQkJRGVmaW5lCisgIEhpTGluayB2aXJhdGFJbmNsdWRlCQlJbmNsdWRlCisgIEhpTGluayB2aXJhdGFQcmVDb25kaXQJUHJlQ29uZGl0CisgIEhpTGluayB2aXJhdGFQcmVQcm9jRXJyb3IJRXJyb3IKKyAgSGlMaW5rIHZpcmF0YVByZVByb2NXYXJuCVRvZG8KKworICAiIERpcmVjdGl2ZSBHcm91cDoKKyAgSGlMaW5rIHZpcmF0YVN0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIHZpcmF0YUNmZ1N0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIHZpcmF0YU9wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgdmlyYXRhRGlyZWN0aXZlCUtleXdvcmQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAidmlyYXRhIgorCisiIHZpbTp0cz04OnN3PTI6bm9ldDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3ZtYXNtLnZpbSBiL3J1bnRpbWUvc3ludGF4L3ZtYXNtLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWQwNDQxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdm1hc20udmltCkBAIC0wLDAgKzEsMjUxIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJKFZBWCkgTWFjcm8gQXNzZW1ibHkKKyIgTWFpbnRhaW5lcjoJVG9tIFVpamxkZXJ0IDx0b20udWlqbGRlcnQgW2F0XSBjbWcubmw+CisiIExhc3QgY2hhbmdlOgkyMDA0IE1heSAxNgorIgorIiBUaGlzIGlzIGluY29tcGxldGUuIEZlZWwgZnJlZSB0byBjb250cmlidXRlLi4uCisiCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKKyIgUGFydGlhbCBsaXN0IG9mIHJlZ2lzdGVyIHN5bWJvbHMKK3N5biBrZXl3b3JkIHZtYXNtUmVnCXIwIHIxIHIyIHIzIHI0IHI1IHI2IHI3IHI4IHI5IHIxMCByMTEgcjEyCitzeW4ga2V5d29yZCB2bWFzbVJlZwlhcCBmcCBzcCBwYyBpdiBkdgorCisiIEFsbCBtYXRjaGVzIC0gb3JkZXIgaXMgaW1wb3J0YW50IQorc3luIGtleXdvcmQgdm1hc21PcGNvZGUgYWRhd2kgYWR3YyBhc2hsIGFzaHEgYml0YiBiaXR3IGJpdGwgZGVjYiBkZWN3IGRlY2wKK3N5biBrZXl3b3JkIHZtYXNtT3Bjb2RlIGVkaXYgZW11bCBpbmNiIGluY3cgaW5jbCBtY29tYiBtY29tdyBtY29tbAorc3luIGtleXdvcmQgdm1hc21PcGNvZGUgbW92emJ3IG1vdnpibCBtb3Z6d2wgcG9wbCBwdXNobCByb3RsIHNid2MKK3N5biBrZXl3b3JkIHZtYXNtT3Bjb2RlIGNtcHYgY21wenYgY21wYzMgY21wYzUgbG9jYyBtYXRjaGMgbW92YzMgbW92YzUKK3N5biBrZXl3b3JkIHZtYXNtT3Bjb2RlIG1vdnRjIG1vdnR1YyBzY2FuYyBza3BjIHNwYW5jIGNyYyBleHR2IGV4dHp2CitzeW4ga2V5d29yZCB2bWFzbU9wY29kZSBmZmMgZmZzIGluc3YgYW9ibGVxIGFvYmxzcyBiYmMgYmJzIGJiY2NpIGJic3NpCitzeW4ga2V5d29yZCB2bWFzbU9wY29kZSBibGJjIGJsYnMgYnJiIGJydyBic2JiIGJzYncgY2FzZWIgY2FzZXcgY2FzZWwKK3N5biBrZXl3b3JkIHZtYXNtT3Bjb2RlIGptcCBqc2IgcnNiIHNvYmdlcSBzb2JndHIgY2FsbGcgY2FsbHMgcmV0CitzeW4ga2V5d29yZCB2bWFzbU9wY29kZSBiaWNwc3cgYmlzcHN3IGJwdCBoYWx0IGluZGV4IG1vdnBzbCBub3AgcG9wciBwdXNociB4ZmMKK3N5biBrZXl3b3JkIHZtYXNtT3Bjb2RlIGluc3FoaSBpbnNxdGkgaW5zcXVlIHJlbXFoaSByZW1xdGkgcmVtcXVlCitzeW4ga2V5d29yZCB2bWFzbU9wY29kZSBhZGRwNCBhZGRwNiBhc2hwIGNtcHAzIGNtcHA0IGN2dHBsIGN2dGxwIGN2dHBzIGN2dHB0CitzeW4ga2V5d29yZCB2bWFzbU9wY29kZSBjdnRzcCBjdnR0cCBkaXZwIG1vdnAgbXVscCBzdWJwNCBzdWJwNiBlZGl0cGMKK3N5biBrZXl3b3JkIHZtYXNtT3Bjb2RlIHByb2JlciBwcm9iZXcgcmVpIGxkcGN0eCBzdnBjdHggbWZwciBtdHByIGJ1Z3cgYnVnbAorc3luIGtleXdvcmQgdm1hc21PcGNvZGUgdmxkbCB2bGRxIHZnYXRobCB2Z2F0aHEgdnN0bCB2c3RxIHZzY2F0bCB2c2NhdHEKK3N5biBrZXl3b3JkIHZtYXNtT3Bjb2RlIHZ2Y3Z0IGlvdGEgbWZ2cCBtdHZwIHZzeW5jCitzeW4ga2V5d29yZCB2bWFzbU9wY29kZSBiZXFsW3VdIGJndHJbdV0gYmxzc1t1XQorc3luIG1hdGNoIHZtYXNtT3Bjb2RlICJcPGFkZFtid2xmZGdoXVsyM11cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDxiaVtjc11bYndsXVsyM11cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDxjbHJbYndscW9mZGdoXVw+Igorc3luIG1hdGNoIHZtYXNtT3Bjb2RlICJcPGNtcFtid2xmZGdoXVw+Igorc3luIG1hdGNoIHZtYXNtT3Bjb2RlICJcPGN2dFtid2xmZGdoXVtid2xmZGdoXVw+Igorc3luIG1hdGNoIHZtYXNtT3Bjb2RlICJcPGN2dHJbZmRnaF1sXD4iCitzeW4gbWF0Y2ggdm1hc21PcGNvZGUgIlw8ZGl2W2J3bGZkZ2hdWzIzXVw+Igorc3luIG1hdGNoIHZtYXNtT3Bjb2RlICJcPGVtb2RbZmRnaF1cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDxtbmVnW2J3bGZkZ2hdXD4iCitzeW4gbWF0Y2ggdm1hc21PcGNvZGUgIlw8bW92W2J3bHFvZmRnaF1cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDxtdWxbYndsZmRnaF1bMjNdXD4iCitzeW4gbWF0Y2ggdm1hc21PcGNvZGUgIlw8cG9seVtmZGdoXVw+Igorc3luIG1hdGNoIHZtYXNtT3Bjb2RlICJcPHN1Yltid2xmZGdoXVsyM11cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDx0c3RbYndsZmRnaF1cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDx4b3JbYndsXVsyM11cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDxtb3ZhW2J3bGZxZGdob11cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDxwdXNoW2J3bGZxZGdob11cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDxhY2JbYndsZmdkaF1cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDxiW2xuZ11lcXVcPVw+Igorc3luIG1hdGNoIHZtYXNtT3Bjb2RlICJcPGJbY3ZdW2NzXVw+Igorc3luIG1hdGNoIHZtYXNtT3Bjb2RlICJcPGJiW2NzXVtjc11cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDx2W3ZzXWFkZFtsZmRnXVw+Igorc3luIG1hdGNoIHZtYXNtT3Bjb2RlICJcPHZbdnNdY21wW2xmZGddXD4iCitzeW4gbWF0Y2ggdm1hc21PcGNvZGUgIlw8dlt2c11kaXZbZmRnXVw+Igorc3luIG1hdGNoIHZtYXNtT3Bjb2RlICJcPHZbdnNdbXVsW2xmZGddXD4iCitzeW4gbWF0Y2ggdm1hc21PcGNvZGUgIlw8dlt2c11zdWJbbGZkZ11cPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDx2W3ZzXWJpW2NzXWxcPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDx2W3ZzXXhvcmxcPiIKK3N5biBtYXRjaCB2bWFzbU9wY29kZSAiXDx2W3ZzXW1lcmdlXD4iCitzeW4gbWF0Y2ggdm1hc21PcGNvZGUgIlw8dlt2c11zW3JsXWxsXD4iCisKKyIgVmFyaW91cyBudW1iZXIgZm9ybWF0cworc3luIG1hdGNoIHZtYXNtZGVjTnVtYmVyCSJbKy1dXD1bMC05XVwrXD4iCitzeW4gbWF0Y2ggdm1hc21kZWNOdW1iZXIJIl5kWzAtOV1cK1w+Igorc3luIG1hdGNoIHZtYXNtaGV4TnVtYmVyCSJeeFswLTlhLWZdXCtcPiIKK3N5biBtYXRjaCB2bWFzbW9jdE51bWJlcgkiXm9bMC03XVwrXD4iCitzeW4gbWF0Y2ggdm1hc21iaW5OdW1iZXIJIl5iWzAxXVwrXD4iCitzeW4gbWF0Y2ggdm1hc21mbG9hdE51bWJlcgkiWy0rXVw9WzAtOV1cK0VbLStdXD1bMC05XVwrIgorc3luIG1hdGNoIHZtYXNtZmxvYXROdW1iZXIJIlstK11cPVswLTldXCtcLlswLTldKlwoRVstK11cPVswLTldXCtcKVw9IgorCisiIFZhbGlkIGxhYmVscworc3luIG1hdGNoIHZtYXNtTGFiZWwJCSJeW2Etel8kLl1bYS16MC05XyQuXVx7LDMwfTo6XD0iCitzeW4gbWF0Y2ggdm1hc21MYWJlbAkJIlw8WzAtOV1cezEsNX1cJDpcPSIgICAgICAgICAgIiBMb2NhbCBsYWJlbAorCisiIENoYXJhY3RlciBzdHJpbmcgY29uc3RhbnRzCisiICAgICAgIFRvbyBjb21wbGV4IHJlYWxseS4gQ291bGQgYmUgIjwuLi4+IiBidXQgdGhvc2UgY291bGQgYWxzbyBiZQorIiAgICAgICBleHByZXNzaW9ucy4gRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGNob3NlbiBkZWxpbWl0ZXJzCisiICAgICAgICgiXjxzZXA+Li4uPHNlcD4iKQorIiBzeW4gcmVnaW9uIHZtYXNtU3RyaW5nCQlzdGFydD0iPCIgZW5kPSI+IiBvbmVsaW5lCisKKyIgT3BlcmF0b3JzCitzeW4gbWF0Y2ggdm1hc21PcGVyYXRvcgkiWy0rKi9AJiFcXF0iCitzeW4gbWF0Y2ggdm1hc21PcGVyYXRvcgkiPSIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSI9PSIJCSIgR2xvYmFsIGFzc2lnbm1lbnQKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSIlbGVuZ3RoKC4qKSIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSIlbG9jYXRlKC4qKSIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSIlZXh0cmFjdCguKikiCitzeW4gbWF0Y2ggdm1hc21PcGVyYXRvcgkiXlthbWZjXSIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSJbYndsZ11eIgorCitzeW4gbWF0Y2ggdm1hc21PcGVyYXRvcgkiXDxcKG5vdF9cKVw9ZXF1YWxcPiIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSJcPGxlc3NfZXF1YWxcPiIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSJcPGdyZWF0ZXJcKF9lcXVhbFwpXD1cPiIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSJcPGxlc3NfdGhhblw+Igorc3luIG1hdGNoIHZtYXNtT3BlcmF0b3IJIlw8XChub3RfXClcPWRlZmluZWRcPiIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSJcPFwobm90X1wpXD1ibGFua1w+Igorc3luIG1hdGNoIHZtYXNtT3BlcmF0b3IJIlw8aWRlbnRpY2FsXD4iCitzeW4gbWF0Y2ggdm1hc21PcGVyYXRvcgkiXDxkaWZmZXJlbnRcPiIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSJcPGVxXD4iCitzeW4gbWF0Y2ggdm1hc21PcGVyYXRvcgkiXDxbZ2xddFw+Igorc3luIG1hdGNoIHZtYXNtT3BlcmF0b3IJIlw8blw9ZGZcPiIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSJcPG5cPWJcPiIKK3N5biBtYXRjaCB2bWFzbU9wZXJhdG9yCSJcPGlkblw+Igorc3luIG1hdGNoIHZtYXNtT3BlcmF0b3IJIlw8W25sZ11lXD4iCitzeW4gbWF0Y2ggdm1hc21PcGVyYXRvcgkiXDxkaWZcPiIKKworIiBTcGVjaWFsIGl0ZW1zIGZvciBjb21tZW50cworc3luIGtleXdvcmQgdm1hc21Ub2RvCQljb250YWluZWQgdG9kbworCisiIENvbW1lbnRzCitzeW4gbWF0Y2ggdm1hc21Db21tZW50CQkiOy4qIiBjb250YWlucz12bWFzbVRvZG8KKworIiBJbmNsdWRlCitzeW4gbWF0Y2ggdm1hc21JbmNsdWRlCQkiXC5saWJyYXJ5XD4iCisKKyIgTWFjcm8gZGVmaW5pdGlvbgorc3luIG1hdGNoIHZtYXNtTWFjcm8JCSJcLm1hY3JvXD4iCitzeW4gbWF0Y2ggdm1hc21NYWNybwkJIlwubWV4aXRcPiIKK3N5biBtYXRjaCB2bWFzbU1hY3JvCQkiXC5lbmRtXD4iCitzeW4gbWF0Y2ggdm1hc21NYWNybwkJIlwubWNhbGxcPiIKK3N5biBtYXRjaCB2bWFzbU1hY3JvCQkiXC5tZGVsZXRlXD4iCisKKyIgQ29uZGl0aW9uYWwgYXNzZW1ibHkKK3N5biBtYXRjaCB2bWFzbVByZUNvbmQJCSJcLmlmZlw9XD4iCitzeW4gbWF0Y2ggdm1hc21QcmVDb25kCQkiXC5pZl9mYWxzZVw+Igorc3luIG1hdGNoIHZtYXNtUHJlQ29uZAkJIlwuaWZ0Zlw9XD4iCitzeW4gbWF0Y2ggdm1hc21QcmVDb25kCQkiXC5pZl90cnVlXChfZmFsc2VcKVw9XD4iCitzeW4gbWF0Y2ggdm1hc21QcmVDb25kCQkiXC5paWZcPiIKKworIiBMb29wIGNvbnRyb2wKK3N5biBtYXRjaCB2bWFzbVJlcGVhdAkJIlwuaXJwY1w9XD4iCitzeW4gbWF0Y2ggdm1hc21SZXBlYXQJCSJcLnJlcGVhdFw+Igorc3luIG1hdGNoIHZtYXNtUmVwZWF0CQkiXC5yZXB0XD4iCitzeW4gbWF0Y2ggdm1hc21SZXBlYXQJCSJcLmVuZHJcPiIKKworIiBEaXJlY3RpdmVzCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwuYWRkcmVzc1w+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLmFsaWduXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwuYXNjaVtjZGl6XVw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLmJsa1thYmRmZ2hsb3F3XVw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLlwoc2lnbmVkX1wpXD1ieXRlXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwuXChub1wpXD1jcm9zc1w+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLmRlYnVnXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwuZGVmYXVsdCBkaXNwbGFjZW1lbnRcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5bZGZnaF1fZmxvYXRpbmdcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5kaXNhYmxlXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwuZG91YmxlXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwuZHNhYmxcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5lbmFibGVcPVw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLmVuZGNcPVw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLmVudHJ5XD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwuZXJyb3JcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5ldmVuXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwuZXh0ZXJuYWxcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5leHRyblw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLmZsb2F0XD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwuZ2xvYmFcPWxcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5pZGVudFw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLmxpbmtcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5saXN0XD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwubG9uZ1w+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLm1hc2tcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5uYXJnXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwubmNoclw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLm5saXN0XD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwubnR5cGVcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5vY3RhXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwub2RkXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwub3BkZWZcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5wYWNrZWRcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5wYWdlXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwucHJpbnRcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5wc2VjdFw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLnF1YWRcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5yZWZbMTI0OF1cPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5yZWYxNlw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLnJlc3RvcmVcKF9wc2VjdFwpXD1cPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5zYXZlXChfcHNlY3RcKVw9XD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwuc2J0dGxcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5cKG5vXClcPXNob3dcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5cKHN1YlwpXD10aXRsZVw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLnRyYW5zZmVyXD4iCitzeW4gbWF0Y2ggdm1hc21EaXJlY3RpdmUJIlwud2Fyblw+Igorc3luIG1hdGNoIHZtYXNtRGlyZWN0aXZlCSJcLndlYWtcPiIKK3N5biBtYXRjaCB2bWFzbURpcmVjdGl2ZQkiXC5cKHNpZ25lZF9cKVw9d29yZFw+IgorCitzeW4gY2FzZSBtYXRjaAorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9tYWNyb19zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF9tYWNyb19zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgICIgVGhlIGRlZmF1bHQgbWV0aG9kcyBmb3IgaGlnaGxpZ2h0aW5nLiAgQ2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIKKyAgIiBDb21tZW50IENvbnN0YW50IEVycm9yIElkZW50aWZpZXIgUHJlUHJvYyBTcGVjaWFsIFN0YXRlbWVudCBUb2RvIFR5cGUKKyAgIgorICAiIENvbnN0YW50CQlCb29sZWFuIENoYXJhY3RlciBOdW1iZXIgU3RyaW5nCisgICIgSWRlbnRpZmllcgkJRnVuY3Rpb24KKyAgIiBQcmVQcm9jCQlEZWZpbmUgSW5jbHVkZSBNYWNybyBQcmVDb25kaXQKKyAgIiBTcGVjaWFsCQlEZWJ1ZyBEZWxpbWl0ZXIgU3BlY2lhbENoYXIgU3BlY2lhbENvbW1lbnQgVGFnCisgICIgU3RhdGVtZW50CQlDb25kaXRpb25hbCBFeGNlcHRpb24gS2V5d29yZCBMYWJlbCBPcGVyYXRvciBSZXBlYXQKKyAgIiBUeXBlCQlTdG9yYWdlQ2xhc3MgU3RydWN0dXJlIFR5cGVkZWYKKworICBIaUxpbmsgdm1hc21Db21tZW50CQlDb21tZW50CisgIEhpTGluayB2bWFzbVRvZG8JCVRvZG8KKworICBIaUxpbmsgdm1hc21oZXhOdW1iZXIJCU51bWJlcgkJIiBDb25zdGFudAorICBIaUxpbmsgdm1hc21vY3ROdW1iZXIJCU51bWJlcgkJIiBDb25zdGFudAorICBIaUxpbmsgdm1hc21iaW5OdW1iZXIJCU51bWJlcgkJIiBDb25zdGFudAorICBIaUxpbmsgdm1hc21kZWNOdW1iZXIJCU51bWJlcgkJIiBDb25zdGFudAorICBIaUxpbmsgdm1hc21mbG9hdE51bWJlcglOdW1iZXIJCSIgQ29uc3RhbnQKKworIiAgSGlMaW5rIHZtYXNtU3RyaW5nCQlTdHJpbmcJCSIgQ29uc3RhbnQKKworICBIaUxpbmsgdm1hc21SZWcJCUlkZW50aWZpZXIKKyAgSGlMaW5rIHZtYXNtT3BlcmF0b3IJCUlkZW50aWZpZXIKKworICBIaUxpbmsgdm1hc21JbmNsdWRlCQlJbmNsdWRlCQkiIFByZVByb2MKKyAgSGlMaW5rIHZtYXNtTWFjcm8JCU1hY3JvCQkiIFByZVByb2MKKyAgIiBIaUxpbmsgdm1hc21NYWNyb1BhcmFtCUtleXdvcmQJCSIgU3RhdGVtZW50CisKKyAgSGlMaW5rIHZtYXNtRGlyZWN0aXZlCQlTcGVjaWFsCisgIEhpTGluayB2bWFzbVByZUNvbmQJCVNwZWNpYWwKKworCisgIEhpTGluayB2bWFzbU9wY29kZQkJU3RhdGVtZW50CisgIEhpTGluayB2bWFzbUNvbmQJCUNvbmRpdGlvbmFsCSIgU3RhdGVtZW50CisgIEhpTGluayB2bWFzbVJlcGVhdAkJUmVwZWF0CQkiIFN0YXRlbWVudAorCisgIEhpTGluayB2bWFzbUxhYmVsCQlUeXBlCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ2bWFzbSIKKworIiB2aW06IHRzPTggc3c9MgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvdnJtbC52aW0gYi9ydW50aW1lL3N5bnRheC92cm1sLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTFhMzliCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdnJtbC52aW0KQEAgLTAsMCArMSwyMzkgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkgICBWUk1MOTcKKyIgTW9kaWZpZWQgZnJvbTogICBWUk1MIDEuMEMgYnkgRGF2aWQgQnJvd24gPGRicm93bkBjZ3MuYzQuZ21lZHMuY29tPgorIiBNYWludGFpbmVyOgkgICBHcmVnb3J5IFNlaWRtYW4gPGdzZWlkbWFuQGFjbS5vcmc+CisiIFVSTDoJCSAgIGh0dHA6Ly93d3cuY3MuYnJvd24uZWR1L35nc3MvdmltL3N5bnRheC92cm1sLnZpbQorIiBMYXN0IGNoYW5nZToJICAgMjAwMyBNYXkgMTEKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGtleXdvcmQgZGVmaW5pdGlvbnMKKworc3luIGtleXdvcmQgVlJNTEZpZWxkcwkgICAgICAgYW1iaWVudEludGVuc2l0eSBhcHBlYXJhbmNlIGF0dGVudWF0aW9uCitzeW4ga2V5d29yZCBWUk1MRmllbGRzCSAgICAgICBhdXRvT2Zmc2V0IGF2YXRhclNpemUgYXhpc09mUm90YXRpb24gYmFja1VybAorc3luIGtleXdvcmQgVlJNTEZpZWxkcwkgICAgICAgYmJveENlbnRlciBiYm94U2l6ZSBiZWFtV2lkdGggYmVnaW5DYXAKK3N5biBrZXl3b3JkIFZSTUxGaWVsZHMJICAgICAgIGJvdHRvbSBib3R0b21SYWRpdXMgYm90dG9tVXJsIGNjdyBjZW50ZXIKK3N5biBrZXl3b3JkIFZSTUxGaWVsZHMJICAgICAgIGNoaWxkcmVuIGNob2ljZSBjb2xsaWRlIGNvbG9yIGNvbG9ySW5kZXgKK3N5biBrZXl3b3JkIFZSTUxGaWVsZHMJICAgICAgIGNvbG9yUGVyVmVydGV4IGNvbnZleCBjb29yZCBjb29yZEluZGV4CitzeW4ga2V5d29yZCBWUk1MRmllbGRzCSAgICAgICBjcmVhc2VBbmdsZSBjcm9zc1NlY3Rpb24gY3V0T2ZmQW5nbGUKK3N5biBrZXl3b3JkIFZSTUxGaWVsZHMJICAgICAgIGN5Y2xlSW50ZXJ2YWwgZGVzY3JpcHRpb24gZGlmZnVzZUNvbG9yCitzeW4ga2V5d29yZCBWUk1MRmllbGRzCSAgICAgICBkaXJlY3RPdXRwdXQgZGlyZWN0aW9uIGRpc2tBbmdsZQorc3luIGtleXdvcmQgVlJNTEZpZWxkcwkgICAgICAgZW1pc3NpdmVDb2xvciBlbmFibGVkIGVuZENhcCBmYW1pbHkKK3N5biBrZXl3b3JkIFZSTUxGaWVsZHMJICAgICAgIGZpZWxkT2ZWaWV3IGZvZ1R5cGUgZm9udFN0eWxlIGZyb250VXJsCitzeW4ga2V5d29yZCBWUk1MRmllbGRzCSAgICAgICBnZW9tZXRyeSBncm91bmRBbmdsZSBncm91bmRDb2xvciBoZWFkbGlnaHQKK3N5biBrZXl3b3JkIFZSTUxGaWVsZHMJICAgICAgIGhlaWdodCBob3Jpem9udGFsIGluZm8gaW50ZW5zaXR5IGp1bXAKK3N5biBrZXl3b3JkIFZSTUxGaWVsZHMJICAgICAgIGp1c3RpZnkga2V5IGtleVZhbHVlIGxhbmd1YWdlIGxlZnRUb1JpZ2h0CitzeW4ga2V5d29yZCBWUk1MRmllbGRzCSAgICAgICBsZWZ0VXJsIGxlbmd0aCBsZXZlbCBsb2NhdGlvbiBsb29wIG1hdGVyaWFsCitzeW4ga2V5d29yZCBWUk1MRmllbGRzCSAgICAgICBtYXhBbmdsZSBtYXhCYWNrIG1heEV4dGVudCBtYXhGcm9udAorc3luIGtleXdvcmQgVlJNTEZpZWxkcwkgICAgICAgbWF4UG9zaXRpb24gbWluQW5nbGUgbWluQmFjayBtaW5Gcm9udAorc3luIGtleXdvcmQgVlJNTEZpZWxkcwkgICAgICAgbWluUG9zaXRpb24gbXVzdEV2YWx1YXRlIG5vcm1hbCBub3JtYWxJbmRleAorc3luIGtleXdvcmQgVlJNTEZpZWxkcwkgICAgICAgbm9ybWFsUGVyVmVydGV4IG9mZnNldCBvbiBvcmllbnRhdGlvbgorc3luIGtleXdvcmQgVlJNTEZpZWxkcwkgICAgICAgcGFyYW1ldGVyIHBpdGNoIHBvaW50IHBvc2l0aW9uIHByaW9yaXR5CitzeW4ga2V5d29yZCBWUk1MRmllbGRzCSAgICAgICBwcm94eSByYWRpdXMgcmFuZ2UgcmVwZWF0UyByZXBlYXRUIHJpZ2h0VXJsCitzeW4ga2V5d29yZCBWUk1MRmllbGRzCSAgICAgICByb3RhdGlvbiBzY2FsZSBzY2FsZU9yaWVudGF0aW9uIHNoaW5pbmVzcworc3luIGtleXdvcmQgVlJNTEZpZWxkcwkgICAgICAgc2lkZSBzaXplIHNreUFuZ2xlIHNreUNvbG9yIHNvbGlkIHNvdXJjZQorc3luIGtleXdvcmQgVlJNTEZpZWxkcwkgICAgICAgc3BhY2luZyBzcGF0aWFsaXplIHNwZWN1bGFyQ29sb3Igc3BlZWQgc3BpbmUKK3N5biBrZXl3b3JkIFZSTUxGaWVsZHMJICAgICAgIHN0YXJ0VGltZSBzdG9wVGltZSBzdHJpbmcgc3R5bGUgdGV4Q29vcmQKK3N5biBrZXl3b3JkIFZSTUxGaWVsZHMJICAgICAgIHRleENvb3JkSW5kZXggdGV4dHVyZSB0ZXh0dXJlVHJhbnNmb3JtIHRpdGxlCitzeW4ga2V5d29yZCBWUk1MRmllbGRzCSAgICAgICB0b3AgdG9wVG9Cb3R0b20gdG9wVXJsIHRyYW5zbGF0aW9uCitzeW4ga2V5d29yZCBWUk1MRmllbGRzCSAgICAgICB0cmFuc3BhcmVuY3kgdHlwZSB1cmwgdmVjdG9yIHZpc2liaWxpdHlMaW1pdAorc3luIGtleXdvcmQgVlJNTEZpZWxkcwkgICAgICAgdmlzaWJpbGl0eVJhbmdlIHdoaWNoQ2hvaWNlIHhEaW1lbnNpb24KK3N5biBrZXl3b3JkIFZSTUxGaWVsZHMJICAgICAgIHhTcGFjaW5nIHpEaW1lbnNpb24gelNwYWNpbmcKK3N5biBtYXRjaCAgIFZSTUxGaWVsZHMJICAgICAgICJcPFtBLVphLXpfXVtBLVphLXowLTlfXSpcPiIgY29udGFpbnM9VlJNTENvbW1lbnQsVlJNTFByb3RvcyxWUk1MZlR5cGVzCisiIHN5biBtYXRjaCAgIFZSTUxGaWVsZHMJICJcPFtBLVphLXpfXVtBLVphLXowLTlfXSpcPlwoLFx8XHNcKSpcKCMuKiRcKSpcPElTXD5cKCMuKiRcKSpcKCxcfFxzXCkqXDxbQS1aYS16X11bQS1aYS16MC05X10qXD5cKCxcfFxzXCkqXCgjLiokXCkqIiBjb250YWlucz1WUk1MQ29tbWVudCxWUk1MUHJvdG9zCisiIHN5biByZWdpb24gIFZSTUxGaWVsZHMJIHN0YXJ0PSJcPFtBLVphLXpfXVtBLVphLXowLTlfXSpcPiIgZW5kPStcKCxcfCNcfFxzXCkrbWU9ZS0xIGNvbnRhaW5zPVZSTUxDb21tZW50LFZSTUxQcm90b3MKKworc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgYWRkQ2hpbGRyZW4gYW1iaWVudEludGVuc2l0eV9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBhcHBlYXJhbmNlX2NoYW5nZWQgYXR0ZW51YXRpb25fY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgYXV0b09mZnNldF9jaGFuZ2VkIGF2YXRhclNpemVfY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgYXhpc09mUm90YXRpb25fY2hhbmdlZCBiYWNrVXJsX2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIGJlYW1XaWR0aF9jaGFuZ2VkIGJpbmRUaW1lIGJvdHRvbVVybF9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBjZW50ZXJfY2hhbmdlZCBjaGlsZHJlbl9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBjaG9pY2VfY2hhbmdlZCBjb2xsaWRlVGltZSBjb2xsaWRlX2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIGNvbG9yX2NoYW5nZWQgY29vcmRfY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgY3V0T2ZmQW5nbGVfY2hhbmdlZCBjeWNsZUludGVydmFsX2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIGN5Y2xlVGltZSBkZXNjcmlwdGlvbl9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBkaWZmdXNlQ29sb3JfY2hhbmdlZCBkaXJlY3Rpb25fY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgZGlza0FuZ2xlX2NoYW5nZWQgZHVyYXRpb25fY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgZW1pc3NpdmVDb2xvcl9jaGFuZ2VkIGVuYWJsZWRfY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgZW50ZXJUaW1lIGV4aXRUaW1lIGZvZ1R5cGVfY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgZm9udFN0eWxlX2NoYW5nZWQgZnJhY3Rpb25fY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgZnJvbnRVcmxfY2hhbmdlZCBnZW9tZXRyeV9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBncm91bmRBbmdsZV9jaGFuZ2VkIGhlYWRsaWdodF9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBoaXROb3JtYWxfY2hhbmdlZCBoaXRQb2ludF9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBoaXRUZXhDb29yZF9jaGFuZ2VkIGludGVuc2l0eV9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBpc0FjdGl2ZSBpc0JvdW5kIGlzT3ZlciBqdW1wX2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIGtleVZhbHVlX2NoYW5nZWQga2V5X2NoYW5nZWQgbGVmdFVybF9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBsZW5ndGhfY2hhbmdlZCBsZXZlbF9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBsb2NhdGlvbl9jaGFuZ2VkIGxvb3BfY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgbWF0ZXJpYWxfY2hhbmdlZCBtYXhBbmdsZV9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBtYXhCYWNrX2NoYW5nZWQgbWF4RXh0ZW50X2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIG1heEZyb250X2NoYW5nZWQgbWF4UG9zaXRpb25fY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgbWluQW5nbGVfY2hhbmdlZCBtaW5CYWNrX2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIG1pbkZyb250X2NoYW5nZWQgbWluUG9zaXRpb25fY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgbm9ybWFsX2NoYW5nZWQgb2Zmc2V0X2NoYW5nZWQgb25fY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgb3JpZW50YXRpb25fY2hhbmdlZCBwYXJhbWV0ZXJfY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgcGl0Y2hfY2hhbmdlZCBwb2ludF9jaGFuZ2VkIHBvc2l0aW9uX2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHByaW9yaXR5X2NoYW5nZWQgcmFkaXVzX2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHJlbW92ZUNoaWxkcmVuIHJpZ2h0VXJsX2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHJvdGF0aW9uX2NoYW5nZWQgc2NhbGVPcmllbnRhdGlvbl9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzY2FsZV9jaGFuZ2VkIHNldF9hbWJpZW50SW50ZW5zaXR5CitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfYXBwZWFyYW5jZSBzZXRfYXR0ZW51YXRpb24KK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHNldF9hdXRvT2Zmc2V0IHNldF9hdmF0YXJTaXplCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfYXhpc09mUm90YXRpb24gc2V0X2JhY2tVcmwgc2V0X2JlYW1XaWR0aAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X2JpbmQgc2V0X2JvdHRvbVVybCBzZXRfY2VudGVyCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfY2hpbGRyZW4gc2V0X2Nob2ljZSBzZXRfY29sbGlkZQorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X2NvbG9yIHNldF9jb2xvckluZGV4IHNldF9jb29yZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X2Nvb3JkSW5kZXggc2V0X2Nyb3NzU2VjdGlvbgorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X2N1dE9mZkFuZ2xlIHNldF9jeWNsZUludGVydmFsCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfZGVzY3JpcHRpb24gc2V0X2RpZmZ1c2VDb2xvcgorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X2RpcmVjdGlvbiBzZXRfZGlza0FuZ2xlCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfZW1pc3NpdmVDb2xvciBzZXRfZW5hYmxlZCBzZXRfZm9nVHlwZQorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X2ZvbnRTdHlsZSBzZXRfZnJhY3Rpb24gc2V0X2Zyb250VXJsCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfZ2VvbWV0cnkgc2V0X2dyb3VuZEFuZ2xlIHNldF9oZWFkbGlnaHQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHNldF9oZWlnaHQgc2V0X2ludGVuc2l0eSBzZXRfanVtcCBzZXRfa2V5CitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfa2V5VmFsdWUgc2V0X2xlZnRVcmwgc2V0X2xlbmd0aAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X2xldmVsIHNldF9sb2NhdGlvbiBzZXRfbG9vcCBzZXRfbWF0ZXJpYWwKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHNldF9tYXhBbmdsZSBzZXRfbWF4QmFjayBzZXRfbWF4RXh0ZW50CitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfbWF4RnJvbnQgc2V0X21heFBvc2l0aW9uIHNldF9taW5BbmdsZQorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X21pbkJhY2sgc2V0X21pbkZyb250IHNldF9taW5Qb3NpdGlvbgorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X25vcm1hbCBzZXRfbm9ybWFsSW5kZXggc2V0X29mZnNldCBzZXRfb24KK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHNldF9vcmllbnRhdGlvbiBzZXRfcGFyYW1ldGVyIHNldF9waXRjaAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X3BvaW50IHNldF9wb3NpdGlvbiBzZXRfcHJpb3JpdHkKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHNldF9yYWRpdXMgc2V0X3JpZ2h0VXJsIHNldF9yb3RhdGlvbgorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X3NjYWxlIHNldF9zY2FsZU9yaWVudGF0aW9uIHNldF9zaGluaW5lc3MKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHNldF9zaXplIHNldF9za3lBbmdsZSBzZXRfc2t5Q29sb3IKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHNldF9zb3VyY2Ugc2V0X3NwZWN1bGFyQ29sb3Igc2V0X3NwZWVkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfc3BpbmUgc2V0X3N0YXJ0VGltZSBzZXRfc3RvcFRpbWUKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHNldF9zdHJpbmcgc2V0X3RleENvb3JkIHNldF90ZXhDb29yZEluZGV4CitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfdGV4dHVyZSBzZXRfdGV4dHVyZVRyYW5zZm9ybSBzZXRfdG9wVXJsCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzZXRfdHJhbnNsYXRpb24gc2V0X3RyYW5zcGFyZW5jeSBzZXRfdHlwZQorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc2V0X3VybCBzZXRfdmVjdG9yIHNldF92aXNpYmlsaXR5TGltaXQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHNldF92aXNpYmlsaXR5UmFuZ2Ugc2V0X3doaWNoQ2hvaWNlCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzaGluaW5lc3NfY2hhbmdlZCBzaXplX2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHNreUFuZ2xlX2NoYW5nZWQgc2t5Q29sb3JfY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgc291cmNlX2NoYW5nZWQgc3BlY3VsYXJDb2xvcl9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzcGVlZF9jaGFuZ2VkIHN0YXJ0VGltZV9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICBzdG9wVGltZV9jaGFuZ2VkIHN0cmluZ19jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICB0ZXhDb29yZF9jaGFuZ2VkIHRleHR1cmVUcmFuc2Zvcm1fY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgdGV4dHVyZV9jaGFuZ2VkIHRpbWUgdG9wVXJsX2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHRvdWNoVGltZSB0cmFja1BvaW50X2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHRyYW5zbGF0aW9uX2NoYW5nZWQgdHJhbnNwYXJlbmN5X2NoYW5nZWQKK3N5biBrZXl3b3JkIFZSTUxFdmVudHMJICAgICAgIHR5cGVfY2hhbmdlZCB1cmxfY2hhbmdlZCB2YWx1ZV9jaGFuZ2VkCitzeW4ga2V5d29yZCBWUk1MRXZlbnRzCSAgICAgICB2ZWN0b3JfY2hhbmdlZCB2aXNpYmlsaXR5TGltaXRfY2hhbmdlZAorc3luIGtleXdvcmQgVlJNTEV2ZW50cwkgICAgICAgdmlzaWJpbGl0eVJhbmdlX2NoYW5nZWQgd2hpY2hDaG9pY2VfY2hhbmdlZAorc3luIHJlZ2lvbiAgVlJNTEV2ZW50cwkgICAgICAgc3RhcnQ9IlxTK1teMC05XStcLltBLVphLXpfXSsibXM9cysxIGVuZD0iXCgsXHwkXHxcc1wpIm1lPWUtMQorCitzeW4ga2V5d29yZCBWUk1MTm9kZXMJICAgICAgIEFuY2hvciBBcHBlYXJhbmNlIEF1ZGlvQ2xpcCBCYWNrZ3JvdW5kCitzeW4ga2V5d29yZCBWUk1MTm9kZXMJICAgICAgIEJpbGxib2FyZCBCb3ggQ29sbGlzaW9uIENvbG9yCitzeW4ga2V5d29yZCBWUk1MTm9kZXMJICAgICAgIENvbG9ySW50ZXJwb2xhdG9yIENvbmUgQ29vcmRpbmF0ZQorc3luIGtleXdvcmQgVlJNTE5vZGVzCSAgICAgICBDb29yZGluYXRlSW50ZXJwb2xhdG9yIEN5bGluZGVyCitzeW4ga2V5d29yZCBWUk1MTm9kZXMJICAgICAgIEN5bGluZGVyU2Vuc29yIERpcmVjdGlvbmFsTGlnaHQKK3N5biBrZXl3b3JkIFZSTUxOb2RlcwkgICAgICAgRWxldmF0aW9uR3JpZCBFeHRydXNpb24gRm9nIEZvbnRTdHlsZQorc3luIGtleXdvcmQgVlJNTE5vZGVzCSAgICAgICBHcm91cCBJbWFnZVRleHR1cmUgSW5kZXhlZEZhY2VTZXQKK3N5biBrZXl3b3JkIFZSTUxOb2RlcwkgICAgICAgSW5kZXhlZExpbmVTZXQgSW5saW5lIExPRCBNYXRlcmlhbAorc3luIGtleXdvcmQgVlJNTE5vZGVzCSAgICAgICBNb3ZpZVRleHR1cmUgTmF2aWdhdGlvbkluZm8gTm9ybWFsCitzeW4ga2V5d29yZCBWUk1MTm9kZXMJICAgICAgIE5vcm1hbEludGVycG9sYXRvciBPcmllbnRhdGlvbkludGVycG9sYXRvcgorc3luIGtleXdvcmQgVlJNTE5vZGVzCSAgICAgICBQaXhlbFRleHR1cmUgUGxhbmVTZW5zb3IgUG9pbnRMaWdodAorc3luIGtleXdvcmQgVlJNTE5vZGVzCSAgICAgICBQb2ludFNldCBQb3NpdGlvbkludGVycG9sYXRvcgorc3luIGtleXdvcmQgVlJNTE5vZGVzCSAgICAgICBQcm94aW1pdHlTZW5zb3IgU2NhbGFySW50ZXJwb2xhdG9yCitzeW4ga2V5d29yZCBWUk1MTm9kZXMJICAgICAgIFNjcmlwdCBTaGFwZSBTb3VuZCBTcGhlcmUgU3BoZXJlU2Vuc29yCitzeW4ga2V5d29yZCBWUk1MTm9kZXMJICAgICAgIFNwb3RMaWdodCBTd2l0Y2ggVGV4dCBUZXh0dXJlQ29vcmRpbmF0ZQorc3luIGtleXdvcmQgVlJNTE5vZGVzCSAgICAgICBUZXh0dXJlVHJhbnNmb3JtIFRpbWVTZW5zb3IgVG91Y2hTZW5zb3IKK3N5biBrZXl3b3JkIFZSTUxOb2RlcwkgICAgICAgVHJhbnNmb3JtIFZpZXdwb2ludCBWaXNpYmlsaXR5U2Vuc29yCitzeW4ga2V5d29yZCBWUk1MTm9kZXMJICAgICAgIFdvcmxkSW5mbworCisiIHRoZSBmb2xsb3dpbmcgbGluZSBkb2Vzbid0IGNhdGNoIDxub2RlPjxuZXdsaW5lPjxvcGVuYnJhY2U+IHNpbmNlIFxuCisiIGRvZXNuJ3QgbWF0Y2ggYXMgYW4gYXRvbSB5ZXQgOi0oCitzeW4gbWF0Y2ggICBWUk1MTm9kZXMJICAgICAgICJbQS1aYS16X11bQS1aYS16MC05X10qXCgsXHxcc1wpKnsibWU9ZS0xCitzeW4gcmVnaW9uICBWUk1MTm9kZXMJICAgICAgIHN0YXJ0PSJcPEVYVEVSTlBST1RPXD5cKCxcfFxzXCkqW0EtWmEtel9dIm1zPWUgc3RhcnQ9Ilw8RVhURVJOUFJPVE9cPlwoLFx8XHNcKSoiIGVuZD0iW1xzXSpcWyJtZT1lLTEgY29udGFpbnM9VlJNTFByb3RvcyxWUk1MQ29tbWVudAorc3luIHJlZ2lvbiAgVlJNTE5vZGVzCSAgICAgICBzdGFydD0iUFJPVE9cPlwoLFx8XHNcKSpbQS1aYS16X10ibXM9ZSBzdGFydD0iUFJPVE9cPlwoLFx8XHNcKSoiIGVuZD0iW1xzXSpcWyJtZT1lLTEgY29udGFpbnM9VlJNTFByb3RvcyxWUk1MQ29tbWVudAorCitzeW4ga2V5d29yZCBWUk1MVHlwZXMJICAgICAgIFNGQm9vbCBTRkNvbG9yIE1GQ29sb3IgU0ZGbG9hdCBNRkZsb2F0CitzeW4ga2V5d29yZCBWUk1MVHlwZXMJICAgICAgIFNGSW1hZ2UgU0ZJbnQzMiBNRkludDMyIFNGTm9kZSBNRk5vZGUKK3N5biBrZXl3b3JkIFZSTUxUeXBlcwkgICAgICAgU0ZSb3RhdGlvbiBNRlJvdGF0aW9uIFNGU3RyaW5nIE1GU3RyaW5nCitzeW4ga2V5d29yZCBWUk1MVHlwZXMJICAgICAgIFNGVGltZSBNRlRpbWUgU0ZWZWMyZiBNRlZlYzJmIFNGVmVjM2YgTUZWZWMzZgorCitzeW4ga2V5d29yZCBWUk1MZlR5cGVzCSAgICAgICBmaWVsZCBleHBvc2VkRmllbGQgZXZlbnRJbiBldmVudE91dAorCitzeW4ga2V5d29yZCBWUk1MVmFsdWVzCSAgICAgICBUUlVFIEZBTFNFIE5VTEwKKworc3luIGtleXdvcmQgVlJNTFByb3RvcwkgICAgICAgY29udGFpbmVkIEVYVEVSTlBST1RPIFBST1RPIElTCisKK3N5biBrZXl3b3JkIFZSTUxSb3V0ZXMJICAgICAgIGNvbnRhaW5lZCBST1VURSBUTworCitpZiB2ZXJzaW9uID49IDUwMgorImNvbnRhaW5tZW50IQorICBzeW4gaW5jbHVkZSBAanNjcmlwdCAkVklNUlVOVElNRS9zeW50YXgvamF2YXNjcmlwdC52aW0KKyAgc3luIHJlZ2lvbiBWUk1MalNjcmlwdFN0cmluZyBjb250YWluZWQgc3RhcnQ9KyJcKFwoamF2YXNjcmlwdFwpXHxcKHZybWxzY3JpcHRcKVx8XChlY21hc2NyaXB0XClcKTorbXM9ZSsxIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiK21lPWUtMSBjb250YWlucz1AanNjcmlwdAorZW5kaWYKKworIiBtYXRjaCBkZWZpbml0aW9ucy4KK3N5biBtYXRjaCAgIFZSTUxTcGVjaWFsCQkgIGNvbnRhaW5lZCAiXFxbMC05XVswLTldWzAtOV1cfFxcLiIKK3N5biByZWdpb24gIFZSTUxTdHJpbmcJCSAgc3RhcnQ9KyIrICBza2lwPStcXFxcXHxcXCIrICBlbmQ9KyIrCWNvbnRhaW5zPVZSTUxTcGVjaWFsLFZSTUxqU2NyaXB0U3RyaW5nCitzeW4gbWF0Y2ggICBWUk1MQ2hhcmFjdGVyCSAgIidbXlxcXSciCitzeW4gbWF0Y2ggICBWUk1MU3BlY2lhbENoYXJhY3RlciAgIidcXC4nIgorc3luIG1hdGNoICAgVlJNTE51bWJlcgkJICAiWy0rXVw9XDxbMC05XVwrXChcLlswLTldXCtcKVw9XChbZUVdXHsxfVstK11cPVswLTldXCtcKVw9XD5cfDBbeFhdWzAtOWEtZkEtRl1cK1w+Igorc3luIG1hdGNoICAgVlJNTE51bWJlcgkJICAiMFt4WF1bMC05YS1mQS1GXVwrXD4iCitzeW4gbWF0Y2ggICBWUk1MQ29tbWVudAkJICAiIy4qJCIKKworIiBuZXdsaW5lcyBzaG91bGQgY291bnQgYXMgd2hpdGVzcGFjZSwgYnV0IHRoZXkgY2FuJ3QgYmUgbWF0Y2hlZCB5ZXQgOi0oCitzeW4gcmVnaW9uICBWUk1MUm91dGVOb2RlCSAgc3RhcnQ9IlteT11UT1woLFx8XHNcKSoiIGVuZD0iXC4ibWU9ZS0xIGNvbnRhaW5zPVZSTUxSb3V0ZXMsVlJNTENvbW1lbnQKK3N5biByZWdpb24gIFZSTUxSb3V0ZU5vZGUJICBzdGFydD0iUk9VVEVcKCxcfFxzXCkqIiBlbmQ9IlwuIm1lPWUtMSBjb250YWlucz1WUk1MUm91dGVzLFZSTUxDb21tZW50CitzeW4gcmVnaW9uICBWUk1MSW5zdE5hbWUJICBzdGFydD0iREVGXD4iaHM9ZSsxIHNraXA9IkRFRlwoLFx8XHNcKSoiIGVuZD0iW0EtWmEtejAtOV9dXChcc1x8JFx8LFwpIm1lPWUgY29udGFpbnM9VlJNTEluc3RhbmNlcyxWUk1MQ29tbWVudAorc3luIHJlZ2lvbiAgVlJNTEluc3ROYW1lCSAgc3RhcnQ9IlVTRVw+ImhzPWUrMSBza2lwPSJVU0VcKCxcfFxzXCkqIiBlbmQ9IltBLVphLXowLTlfXVwoXHNcfCRcfCxcKSJtZT1lIGNvbnRhaW5zPVZSTUxJbnN0YW5jZXMsVlJNTENvbW1lbnQKKworc3luIGtleXdvcmQgVlJNTEluc3RhbmNlcyAgICAgIGNvbnRhaW5lZCBERUYgVVNFCitzeW4gc3luYyBtaW5saW5lcz0xCisKK2lmIHZlcnNpb24gPj0gNjAwCisiRk9MRFMhCisgIHN5biBzeW5jIGZyb21zdGFydAorICBzZXRsb2NhbCBmb2xkbWV0aG9kPXN5bnRheAorICBzeW4gcmVnaW9uIGJyYWNlRm9sZCBzdGFydD0ieyIgZW5kPSJ9IiB0cmFuc3BhcmVudCBmb2xkIGNvbnRhaW5zPVRPUAorICBzeW4gcmVnaW9uIGJyYWNrZXRGb2xkIHN0YXJ0PSJcWyIgZW5kPSJdIiB0cmFuc3BhcmVudCBmb2xkIGNvbnRhaW5zPVRPUAorICBzeW4gcmVnaW9uIFZSTUxTdHJpbmcgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBmb2xkIGNvbnRhaW5zPVZSTUxTcGVjaWFsLFZSTUxqU2NyaXB0U3RyaW5nCitlbmRpZgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9WUk1MX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX1ZSTUxfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgVlJNTENoYXJhY3RlciAgVlJNTFN0cmluZworICBIaUxpbmsgVlJNTFNwZWNpYWxDaGFyYWN0ZXIgVlJNTFNwZWNpYWwKKyAgSGlMaW5rIFZSTUxOdW1iZXIgICAgIFZSTUxTdHJpbmcKKyAgSGlMaW5rIFZSTUxWYWx1ZXMgICAgIFZSTUxTdHJpbmcKKyAgSGlMaW5rIFZSTUxTdHJpbmcgICAgIFN0cmluZworICBIaUxpbmsgVlJNTFNwZWNpYWwgICAgU3BlY2lhbAorICBIaUxpbmsgVlJNTENvbW1lbnQgICAgQ29tbWVudAorICBIaUxpbmsgVlJNTE5vZGVzICAgICAgU3RhdGVtZW50CisgIEhpTGluayBWUk1MRmllbGRzICAgICBUeXBlCisgIEhpTGluayBWUk1MRXZlbnRzICAgICBUeXBlCisgIEhpTGluayBWUk1MZlR5cGVzICAgICBMaW5lTnIKKyIgIGhpICAgICBWUk1MZlR5cGVzICAgICBjdGVybWZnPTYgZ3VpZmc9QnJvd24KKyAgSGlMaW5rIFZSTUxJbnN0YW5jZXMgIFByZUNvbmRpdAorICBIaUxpbmsgVlJNTFJvdXRlcyAgICAgUHJlQ29uZGl0CisgIEhpTGluayBWUk1MUHJvdG9zICAgICBQcmVQcm9jCisgIEhpTGluayBWUk1MUm91dGVOb2RlICBJZGVudGlmaWVyCisgIEhpTGluayBWUk1MSW5zdE5hbWUgICBJZGVudGlmaWVyCisgIEhpTGluayBWUk1MVHlwZXMgICAgICBJZGVudGlmaWVyCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInZybWwiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC92c2VqY2wudmltIGIvcnVudGltZS9zeW50YXgvdnNlamNsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGYwMGM2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvdnNlamNsLnZpbQpAQCAtMCwwICsxLDQ5IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgSkNMIGpvYiBjb250cm9sIGxhbmd1YWdlIC0gRE9TL1ZTRQorIiBNYWludGFpbmVyOiAgRGF2eWQgT25kcmVqa28gPGRhdmlkLm9uZHJlamtvQHNhZmVsaXRlLmNvbT4KKyIgVVJMOgorIiBMYXN0IGNoYW5nZTogMjAwMSBNYXkgMTAKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIHRhZ3MKK3N5biBrZXl3b3JkIHZzZWpjbEtleXdvcmQgRExCTCBFWEVDIEpPQiBBU1NHTiBFT0oKK3N5biBrZXl3b3JkIHZzZWpjbEZpZWxkIEpOTSBDTEFTUyBESVNQIFVTRVIgU1lTSUQgSlNFUCBTSVpFCitzeW4ga2V5d29yZCB2c2VqY2xGaWVsZCBWU0FNCitzeW4gcmVnaW9uIHZzZWpjbENvbW1lbnQgc3RhcnQ9Il4vXCoiIGVuZD0iJCIKK3N5biByZWdpb24gdnNlamNsQ29tbWVudCBzdGFydD0iXltcKiBdXHt9JCIgZW5kPSIkIgorc3luIHJlZ2lvbiB2c2VqY2xNaXNjIHN0YXJ0PSJeICAiIGVuZD0iJCIgY29udGFpbnM9SnBhcm1zCitzeW4gbWF0Y2ggdnNlamNsU3RyaW5nIC8nLlx7LX0nLworc3luIG1hdGNoIHZzZWpjbFBhcm1zIC8oLlx7LX0pLyBjb250YWluZWQKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfdnNlamNsX3N5bnRheCIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3ZzZWpjbF9zeW50YXggPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB2c2VqY2xDb21tZW50CQlDb21tZW50CisgIEhpTGluayB2c2VqY2xGaWVsZAkJVHlwZQorICBIaUxpbmsgdnNlamNsS2V5d29yZAkJU3RhdGVtZW50CisgIEhpTGluayB2c2VqY2xPYmplY3QJCUNvbnN0YW50CisgIEhpTGluayB2c2VqY2xTdHJpbmcJCUNvbnN0YW50CisgIEhpTGluayB2c2VqY2xNaXNjCQkJU3BlY2lhbAorICBIaUxpbmsgdnNlamNsUGFybXMJCUNvbnN0YW50CisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInZzZWpjbCIKKworIiB2aW06IHRzPTQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3dkaWZmLnZpbSBiL3J1bnRpbWUvc3ludGF4L3dkaWZmLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2QwNjExCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvd2RpZmYudmltCkBAIC0wLDAgKzEsNDMgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgd0RpZmYgKHdvcmR3aXNlIGRpZmYpCisiIE1haW50YWluZXI6ICAgR2VyZnJpZWQgRnVjaHMgPGFsZmllQGlzdC5vcmc+CisiIExhc3QgQ2hhbmdlOiAgMjUgQXByIDIwMDEKKyIgVVJMOgkJaHR0cDovL2FsZmllLmlzdC5vcmcvdmltL3N5bnRheC93ZGlmZi52aW0KKyIKKyIgQ29tbWVudHMgYXJlIHZlcnkgd2VsY29tZSAtIGJ1dCBwbGVhc2UgbWFrZSBzdXJlIHRoYXQgeW91IGFyZSBjb21tZW50aW5nIG9uCisiIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGZpbGUuCisiIFNQQU0gaXMgX05PVF8gd2VsY29tZSAtIGJlIHJlYWR5IHRvIGJlIHJlcG9ydGVkIQorCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5biBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworCitzeW4gcmVnaW9uIHdkaWZmT2xkIHN0YXJ0PStcWy0rIGVuZD0rLV0rCitzeW4gcmVnaW9uIHdkaWZmTmV3IHN0YXJ0PSJ7KyIgZW5kPSIrfSIKKworCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF93ZGlmZl9zeW5faW5pdHMiKQorICBsZXQgZGlkX3dkaWZmX3N5bl9pbml0cyA9IDEKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfd2RpZmZfc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgd2RpZmZPbGQgICAgICAgU3BlY2lhbAorICBIaUxpbmsgd2RpZmZOZXcgICAgICAgSWRlbnRpZmllcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ3ZGlmZiIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3dlYi52aW0gYi9ydW50aW1lL3N5bnRheC93ZWIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YTdmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC93ZWIudmltCkBAIC0wLDAgKzEsMzkgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglXRUIKKyIgTWFpbnRhaW5lcjoJQW5kcmVhcyBTY2hlcmVyIDxhbmRyZWFzLnNjaGVyZXJAcG9ib3guY29tPgorIiBMYXN0IENoYW5nZToJQXByaWwgMzAsIDIwMDEKKworIiBEZXRhaWxzIG9mIHRoZSBXRUIgbGFuZ3VhZ2UgY2FuIGJlIGZvdW5kIGluIHRoZSBhcnRpY2xlIGJ5IERvbmFsZCBFLiBLbnV0aCwKKyIgIlRoZSBXRUIgU3lzdGVtIG9mIFN0cnVjdHVyZWQgRG9jdW1lbnRhdGlvbiIsIGluY2x1ZGVkIGFzICJ3ZWJtYW4udGV4IiBpbgorIiB0aGUgc3RhbmRhcmQgV0VCIGRpc3RyaWJ1dGlvbiwgYXZhaWxhYmxlIGZvciBhbm9ueW1vdXMgZnRwIGF0CisiIGZ0cDovL2xhYnJlYS5zdGFuZm9yZC5lZHUvcHViL3RleC93ZWIvLgorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgQWx0aG91Z2ggV0VCIGlzIHRoZSB1ci1sYW5ndWFnZSBmb3IgdGhlICJMaXRlcmF0ZSBQcm9ncmFtbWluZyIgcGFyYWRpZ20sCisiIHdlIGJhc2UgdGhpcyBzeW50YXggZmlsZSBvbiB0aGUgbW9kZXJuIHN1cGVyc2V0LCBDV0VCLiAgTm90ZTogVGhpcyBzaG9ydGN1dAorIiBtYXkgaW50cm9kdWNlIHNvbWUgaWxsZWdhbCBjb25zdHJ1Y3RzLCBlLmcuLCBDV0VCJ3MgIkBjIiBkb2VzIF9ub3RfIHN0YXJ0IGEKKyIgY29kZSBzZWN0aW9uIGluIFdFQi4gIEFueXdheSwgSSdtIG5vdCBhIFdFQiBwcm9ncmFtbWVyLgoraWYgdmVyc2lvbiA8IDYwMAorICBzb3VyY2UgPHNmaWxlPjpwOmgvY3dlYi52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2N3ZWIudmltCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKK2VuZGlmCisKKyIgUmVwbGFjZSBDL0MrKyBzeW50YXggYnkgUGFzY2FsIHN5bnRheC4KK3N5bnRheCBpbmNsdWRlIEB3ZWJJbmNsdWRlZEMgPHNmaWxlPjpwOmgvcGFzY2FsLnZpbQorCisiIERvdWJsZS1AIG1lYW5zIHNpbmdsZS1ALCBhbnl3aGVyZSBpbiB0aGUgV0VCIHNvdXJjZSAoYXMgaW4gQ1dFQikuCisiIERvbid0IG1pc2ludGVycHJldCAiQCciIGFzIHRoZSBzdGFydCBvZiBhIFBhc2NhbCBzdHJpbmcuCitzeW50YXggbWF0Y2ggd2ViSWdub3JlZFN0dWZmICJAW0AnXSIKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAid2ViIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvd2VibWFjcm8udmltIGIvcnVudGltZS9zeW50YXgvd2VibWFjcm8udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODYzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC93ZWJtYWNyby52aW0KQEAgLTAsMCArMSw4MiBAQAorIiBXZWJNYWNybyBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIFdlYk1hY3JvCisiIE1haW50YWluZXI6ICAgQ2xhdWRpbyBGbGVpbmVyIDxjbGF1ZGlvQGZsZWluZXIuY29tPgorIiBVUkw6CQlodHRwOi8vd3d3LmZsZWluZXIuY29tL3ZpbS9zeW50YXgvd2VibWFjcm8udmltCisiIExhc3QgQ2hhbmdlOiAgMjAwMyBNYXkgMTEKKworIiB3ZWJtYWNybyBpcyBhIG5pY2UgbGl0dGxlIGxhbmd1YWdlIHRoYXQgeW91IHNob3VsZAorIiBjaGVjayBvdXQgaWYgeW91IHVzZSBqYXZhIHNlcnZsZXRzLgorIiB3ZWJtYWNybzogaHR0cDovL3d3dy53ZWJtYWNyby5vcmcKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmICFleGlzdHMoIm1haW5fc3ludGF4IikKKyAgaWYgdmVyc2lvbiA8IDYwMAorICAgIHN5bnRheCBjbGVhcgorICBlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKKyAgZW5kaWYKKyAgbGV0IG1haW5fc3ludGF4ID0gJ3dlYm1hY3JvJworZW5kaWYKKworCitpZiB2ZXJzaW9uIDwgNjAwCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9odG1sLnZpbQorZWxzZQorICBydW50aW1lISBzeW50YXgvaHRtbC52aW0KKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworc3luIGNsdXN0ZXIgaHRtbFByZVByb2MgYWRkPXdlYm1hY3JvSWYsd2VibWFjcm9Vc2Usd2VibWFjcm9CcmFjZXMsd2VibWFjcm9QYXJzZSx3ZWJtYWNyb0luY2x1ZGUsd2VibWFjcm9TZXQsd2VibWFjcm9Gb3JlYWNoLHdlYm1hY3JvQ29tbWVudAorCitzeW4gbWF0Y2ggd2VibWFjcm9WYXJpYWJsZSAiXCRbYS16QS1aMC05LigpXSo7XD0iCitzeW4gbWF0Y2ggd2VibWFjcm9OdW1iZXIgIlstK11cPVxkXCtbbExdXD0iIGNvbnRhaW5lZAorc3luIGtleXdvcmQgd2VibWFjcm9Cb29sZWFuIHRydWUgZmFsc2UgY29udGFpbmVkCitzeW4gbWF0Y2ggd2VibWFjcm9TcGVjaWFsICJcXC4iIGNvbnRhaW5lZAorc3luIHJlZ2lvbiAgd2VibWFjcm9TdHJpbmcgICBjb250YWluZWQgc3RhcnQ9KyIrIGVuZD0rIisgY29udGFpbnM9d2VibWFjcm9TcGVjaWFsLHdlYm1hY3JvVmFyaWFibGUKK3N5biByZWdpb24gIHdlYm1hY3JvU3RyaW5nICAgY29udGFpbmVkIHN0YXJ0PSsnKyBlbmQ9KycrIGNvbnRhaW5zPXdlYm1hY3JvU3BlY2lhbCx3ZWJtYWNyb1ZhcmlhYmxlCitzeW4gcmVnaW9uIHdlYm1hY3JvTGlzdCBjb250YWluZWQgbWF0Y2hncm91cD1TdHJ1Y3R1cmUgc3RhcnQ9IlxbIiBtYXRjaGdyb3VwPVN0cnVjdHVyZSBlbmQ9IlxdIiBjb250YWlucz13ZWJtYWNyb1N0cmluZyx3ZWJtYWNyb1ZhcmlhYmxlLHdlYm1hY3JvTnVtYmVyLHdlYm1hY3JvQm9vbGVhbix3ZWJtYWNyb0xpc3QKKworc3luIHJlZ2lvbiB3ZWJtYWNyb0lmIHN0YXJ0PSIjaWYiIHN0YXJ0PSIjZWxzZSIgZW5kPSJ7Im1lPWUtMSBjb250YWlucz13ZWJtYWNyb1ZhcmlhYmxlLHdlYm1hY3JvTnVtYmVyLHdlYm1hY3JvU3RyaW5nLHdlYm1hY3JvQm9vbGVhbix3ZWJtYWNyb0xpc3QgbmV4dGdyb3VwPXdlYm1hY3JvQnJhY2VzCitzeW4gcmVnaW9uIHdlYm1hY3JvRm9yZWFjaCBzdGFydD0iI2ZvcmVhY2giIGVuZD0ieyJtZT1lLTEgY29udGFpbnM9d2VibWFjcm9WYXJpYWJsZSx3ZWJtYWNyb051bWJlcix3ZWJtYWNyb1N0cmluZyx3ZWJtYWNyb0Jvb2xlYW4sd2VibWFjcm9MaXN0IG5leHRncm91cD13ZWJtYWNyb0JyYWNlcworc3luIG1hdGNoIHdlYm1hY3JvU2V0ICIjc2V0IC4qJCIgY29udGFpbnM9d2VibWFjcm9WYXJpYWJsZSx3ZWJtYWNyb051bWJlcix3ZWJtYWNyb051bWJlcix3ZWJtYWNyb0Jvb2xlYW4sd2VibWFjcm9TdHJpbmcsd2VibWFjcm9MaXN0CitzeW4gbWF0Y2ggd2VibWFjcm9JbmNsdWRlICIjaW5jbHVkZSAuKiQiIGNvbnRhaW5zPXdlYm1hY3JvVmFyaWFibGUsd2VibWFjcm9OdW1iZXIsd2VibWFjcm9OdW1iZXIsd2VibWFjcm9Cb29sZWFuLHdlYm1hY3JvU3RyaW5nLHdlYm1hY3JvTGlzdAorc3luIG1hdGNoIHdlYm1hY3JvUGFyc2UgIiNwYXJzZSAuKiQiIGNvbnRhaW5zPXdlYm1hY3JvVmFyaWFibGUsd2VibWFjcm9OdW1iZXIsd2VibWFjcm9OdW1iZXIsd2VibWFjcm9Cb29sZWFuLHdlYm1hY3JvU3RyaW5nLHdlYm1hY3JvTGlzdAorc3luIHJlZ2lvbiB3ZWJtYWNyb1VzZSBtYXRjaGdyb3VwPVByZVByb2Mgc3RhcnQ9IiN1c2UgLioiIG1hdGNoZ3JvdXA9UHJlUHJvYyBlbmQ9Il4tLioiIGNvbnRhaW5zPXdlYm1hY3JvSGFzaCxASHRtbFRvcAorc3luIHJlZ2lvbiB3ZWJtYWNyb0JyYWNlcyBtYXRjaGdyb3VwPVN0cnVjdHVyZSBzdGFydD0ieyIgbWF0Y2hncm91cD1TdHJ1Y3R1cmUgZW5kPSJ9IiBjb250YWluZWQgdHJhbnNwYXJlbnQKK3N5biBtYXRjaCB3ZWJtYWNyb0JyYWNlc0Vycm9yICJbe31dIgorc3luIG1hdGNoIHdlYm1hY3JvQ29tbWVudCAiIyMuKiQiCitzeW4gbWF0Y2ggd2VibWFjcm9IYXNoICJbI3t9XCRdIiBjb250YWluZWQKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfd2VibWFjcm9fc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfd2VibWFjcm9fc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgd2VibWFjcm9Db21tZW50IENvbW1lbnRUaXRsZQorICBIaUxpbmsgd2VibWFjcm9WYXJpYWJsZSBQcmVQcm9jCisgIEhpTGluayB3ZWJtYWNyb0lmIHdlYm1hY3JvU3RhdGVtZW50CisgIEhpTGluayB3ZWJtYWNyb0ZvcmVhY2ggd2VibWFjcm9TdGF0ZW1lbnQKKyAgSGlMaW5rIHdlYm1hY3JvU2V0IHdlYm1hY3JvU3RhdGVtZW50CisgIEhpTGluayB3ZWJtYWNyb0luY2x1ZGUgd2VibWFjcm9TdGF0ZW1lbnQKKyAgSGlMaW5rIHdlYm1hY3JvUGFyc2Ugd2VibWFjcm9TdGF0ZW1lbnQKKyAgSGlMaW5rIHdlYm1hY3JvU3RhdGVtZW50IEZ1bmN0aW9uCisgIEhpTGluayB3ZWJtYWNyb051bWJlciBOdW1iZXIKKyAgSGlMaW5rIHdlYm1hY3JvQm9vbGVhbiBCb29sZWFuCisgIEhpTGluayB3ZWJtYWNyb1NwZWNpYWwgU3BlY2lhbAorICBIaUxpbmsgd2VibWFjcm9TdHJpbmcgU3RyaW5nCisgIEhpTGluayB3ZWJtYWNyb0JyYWNlc0Vycm9yIEVycm9yCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ3ZWJtYWNybyIKKworaWYgbWFpbl9zeW50YXggPT0gJ3dlYm1hY3JvJworICB1bmxldCBtYWluX3N5bnRheAorZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3dnZXQudmltIGIvcnVudGltZS9zeW50YXgvd2dldC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxZjc2ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3dnZXQudmltCkBAIC0wLDAgKzEsMTU5IEBACisiIFdnZXQgc3ludGF4IGZpbGUKKyIgRmlsZW5hbWU6ICAgICB3Z2V0LnZpbQorIiBMYW5ndWFnZTogICAgIFdnZXQgY29uZmlndXJhdGlvbiBmaWxlICggL2V0Yy93Z2V0cmMgfi8ud2dldHJjICkKKyIgTWFpbnRhaW5lcjogICBEb3VnIEtlYXJucyA8ZGprZWEyQG11Z2NhLml0cy5tb25hc2guZWR1LmF1PgorIiBVUkw6CQlodHRwOi8vbXVnY2EuaXRzLm1vbmFzaC5lZHUuYXUvfmRqa2VhMi92aW0vc3ludGF4L3dnZXQudmltCisiIExhc3QgQ2hhbmdlOiAgMjAwMyBNYXkgMTEKKworIiBUT0RPOiBhbGwgY29tbWFuZHMgYXJlIGFjdHVhbGx5IHVuZGVyc2NvcmUgYW5kIGh5cGhlbiBpbnNlbnNpdGl2ZSwgdGhvdWdoCisiICAgICAgIHRoZXkgYXJlIG5vcm1hbGx5IG5hbWVkIGFzIGxpc3RlZCBiZWxvdworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBtYXRjaCAgIHdnZXRDb21tZW50ICAgICJeXHMqIy4qJCIgY29udGFpbnM9d2dldFRvZG8KKworc3luIGtleXdvcmQgd2dldFRvZG8gICAgICAgVE9ETyBOT1RFIEZJWE1FIFhYWCBjb250YWluZWQKKworc3luIG1hdGNoICAgd2dldEFzc2lnbm1lbnQgIl5ccypbQS1aYS16Xy1dXCtccyo9XHMqLiokIiBjb250YWlucz13Z2V0Q29tbWFuZCx3Z2V0QXNzaWdubWVudE9wZXJhdG9yLHdnZXRTdHJpbmcsd2dldEJvb2xlYW4sd2dldE51bWJlcix3Z2V0VmFsdWUsd2dldFF1b3RhCisKK3N5biBtYXRjaCAgIHdnZXRBc3NpZ25tZW50T3BlcmF0b3IgIj0iIGNvbnRhaW5lZAorCitzeW4gcmVnaW9uICB3Z2V0U3RyaW5nICAgICBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5lZCBvbmVsaW5lCitzeW4gcmVnaW9uICB3Z2V0U3RyaW5nICAgICBzdGFydD0rJysgc2tpcD0rXFxcXFx8XFwnKyBlbmQ9KycrIGNvbnRhaW5lZCBvbmVsaW5lCisKKyIgTWFrZSB0aGlzIGEgbWF0Y2ggc28gdGhhdCBhbHdheXNfcmVzdCBtYXRjaGVzIHByb3Blcmx5CitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCAgIHdnZXRCb29sZWFuICAgICJcPG9uXHxvZmZcfGFsd2F5c1x8bmV2ZXJcfDFcfDBcPiIgY29udGFpbmVkCitzeW4gY2FzZSBtYXRjaAorCitzeW4gbWF0Y2ggICB3Z2V0TnVtYmVyICAgICAiXDxcZFwrXHxpbmZcPiIgICAgY29udGFpbmVkCisKK3N5biBtYXRjaCAgIHdnZXRRdW90YSAgICAgICJcPFxkXCtba0ttTV1cP1w+IiBjb250YWluZWQKKworc3luIGNhc2UgaWdub3JlCitzeW4ga2V5d29yZCB3Z2V0VmFsdWUgICAgICBkZWZhdWx0IGJpbmFyeSBtZWdhIGdpZ2EgbWljcm8gY29udGFpbmVkCitzeW4gY2FzZSBtYXRjaAorCitzeW4gY2FzZSBpZ25vcmUKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqYWNjZXB0IiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqYWRkWy1fXVw9aG9zdGRpciIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmFsd2F5c1stX11cPXJlc3QiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypiYWNrZ3JvdW5kIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqYmFja3VwWy1fXVw9Y29udmVydGVkIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqYmFja3VwcyIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmJhc2UiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypiaW5kWy1fXVw9YWRkcmVzcyIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmNhY2hlIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqY29udGludWUiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypjb252ZXJ0Wy1fXVw9bGlua3MiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypjb29raWVzIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqY3V0Wy1fXVw9ZGlycyIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmRlYnVnIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqZGVsZXRlWy1fXVw9YWZ0ZXIiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypkaXJbLV9dXD1wcmVmaXgiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypkaXJbLV9dXD1zdHJ1Y3QiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypkb21haW5zIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqZG90Wy1fXVw9Ynl0ZXMiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypkb3RzWy1fXVw9aW5bLV9dXD1saW5lIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqZG90Wy1fXVw9c3BhY2luZyIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmRvdFstX11cPXN0eWxlIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqZWdkWy1fXVw9ZmlsZSIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmV4Y2x1ZGVbLV9dXD1kaXJlY3RvcmllcyIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmV4Y2x1ZGVbLV9dXD1kb21haW5zIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqZm9sbG93Wy1fXVw9ZnRwIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqZm9sbG93Wy1fXVw9dGFncyIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmZvcmNlWy1fXVw9aHRtbCIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmZ0cFstX11cPXByb3h5IiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqZ2xvYiIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmhlYWRlciIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmh0bWxbLV9dXD1leHRlbnNpb24iIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypodG1saWZ5IiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqaHR0cFstX11cPWtlZXBbLV9dXD1hbGl2ZSIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKmh0dHBbLV9dXD1wYXNzd2QiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypodHRwWy1fXVw9cHJveHkiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypodHRwc1stX11cPXByb3h5IiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqaHR0cFstX11cPXVzZXIiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccyppZ25vcmVbLV9dXD1sZW5ndGgiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccyppZ25vcmVbLV9dXD10YWdzIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqaW5jbHVkZVstX11cPWRpcmVjdG9yaWVzIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqaW5wdXQiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypraWxsWy1fXVw9bG9uZ2VyIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqbGltaXRbLV9dXD1yYXRlIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqbG9hZFstX11cPWNvb2tpZXMiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypsb2dmaWxlIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqbG9naW4iIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccyptaXJyb3IiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypuZXRyYyIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKm5vWy1fXVw9Y2xvYmJlciIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKm5vWy1fXVw9cGFyZW50IiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqbm9bLV9dXD1wcm94eSIgY29udGFpbmVkCisiIE5vdGU6IHRoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAndHJpZXMnIGluc3RlYWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqbnVtdHJpZXMiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypvdXRwdXRbLV9dXD1kb2N1bWVudCIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnBhZ2VbLV9dXD1yZXF1aXNpdGVzIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqcGFzc2l2ZVstX11cPWZ0cCIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnBhc3N3ZCIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnByb2dyZXNzIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqcHJveHlbLV9dXD1wYXNzd2QiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypwcm94eVstX11cPXVzZXIiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypxdWlldCIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnF1b3RhIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqcmFuZG9tWy1fXVw9d2FpdCIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnJlY2xldmVsIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqcmVjdXJzaXZlIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqcmVmZXJlciIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnJlamVjdCIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnJlbGF0aXZlWy1fXVw9b25seSIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnJlbW92ZVstX11cPWxpc3RpbmciIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypyZXRyWy1fXVw9c3ltbGlua3MiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypyb2JvdHMiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypzYXZlWy1fXVw9Y29va2llcyIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnNhdmVbLV9dXD1oZWFkZXJzIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqc2VydmVyWy1fXVw9cmVzcG9uc2UiIGNvbnRhaW5lZAorIiBOb3RlOiB0aGlzIG9wdGlvbiB3YXMgcmVtb3ZlZCBpbiB3Z2V0IDEuOAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypzaW1wbGVbLV9dXD1ob3N0Wy1fXVw9Y2hlY2siIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypzcGFuWy1fXVw9aG9zdHMiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypzcGlkZXIiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccypzc2xjZXJ0ZmlsZSIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnNzbGNlcnRrZXkiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccyp0aW1lb3V0IiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqdGltZVstX11cPXN0YW1waW5nIiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqdHJpZXMiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccyp1c2VbLV9dXD1wcm94eSIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnVzZXJbLV9dXD1hZ2VudCIgY29udGFpbmVkCitzeW4gbWF0Y2ggd2dldENvbW1hbmQgICAgICAiXlxzKnZlcmJvc2UiIGNvbnRhaW5lZAorc3luIG1hdGNoIHdnZXRDb21tYW5kICAgICAgIl5ccyp3YWl0IiBjb250YWluZWQKK3N5biBtYXRjaCB3Z2V0Q29tbWFuZCAgICAgICJeXHMqd2FpdFstX11cPXJldHJ5IiBjb250YWluZWQKK3N5biBjYXNlIG1hdGNoCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3dnZXRfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfd2dldF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB3Z2V0QXNzaWdubWVudE9wZXJhdG9yIFNwZWNpYWwKKyAgSGlMaW5rIHdnZXRCb29sZWFuCQlCb29sZWFuCisgIEhpTGluayB3Z2V0Q29tbWFuZAkJSWRlbnRpZmllcgorICBIaUxpbmsgd2dldENvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHdnZXROdW1iZXIJCU51bWJlcgorICBIaUxpbmsgd2dldFF1b3RhCQlOdW1iZXIKKyAgSGlMaW5rIHdnZXRTdHJpbmcJCVN0cmluZworICBIaUxpbmsgd2dldFRvZG8JCVRvZG8KKyAgSGlMaW5rIHdnZXRWYWx1ZQkJQ29uc3RhbnQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAid2dldCIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3doaXRlc3BhY2UudmltIGIvcnVudGltZS9zeW50YXgvd2hpdGVzcGFjZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyZTMyZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3doaXRlc3BhY2UudmltCkBAIC0wLDAgKzEsMTMgQEAKKyIgU2ltcGxpc3RpYyB3YXkgdG8gbWFrZSBzcGFjZXMgYW5kIFRhYnMgdmlzaWJsZQorCisiIFRoaXMgY2FuIGJlIGFkZGVkIHRvIGFuIGFscmVhZHkgYWN0aXZlIHN5bnRheC4KKworc3luIG1hdGNoIFNwYWNlICIgIgorc3luIG1hdGNoIFRhYiAiXHQiCitpZiAmYmFja2dyb3VuZCA9PSAiZGFyayIKKyAgaGkgZGVmIFNwYWNlIGN0ZXJtYmc9ZGFya3JlZCBndWliZz0jNTAwMDAwCisgIGhpIGRlZiBUYWIgY3Rlcm1iZz1kYXJrZ3JlZW4gZ3VpYmc9IzAwMzAwMAorZWxzZQorICBoaSBkZWYgU3BhY2UgY3Rlcm1iZz1saWdodHJlZCBndWliZz0jZmZkMGQwCisgIGhpIGRlZiBUYWIgY3Rlcm1iZz1saWdodGdyZWVuIGd1aWJnPSNkMGZmZDAKK2VuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC93aW5iYXRjaC52aW0gYi9ydW50aW1lL3N5bnRheC93aW5iYXRjaC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhMmNkZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3dpbmJhdGNoLnZpbQpAQCAtMCwwICsxLDE4NyBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVdpbkJhdGNoL1dlYmJhdGNoICgqLndidCwgKi53ZWIpCisiIE1haW50YWluZXI6CWRvbWluaXF1ZUBtZ2dlbi5jb20KKyIgVVJMOgkJaHR0cDovL3d3dy5tZ2dlbi5jb20vdmltL3N5bnRheC93aW5iYXRjaC56aXAKKyIgTGFzdCBjaGFuZ2U6CTIwMDEgTWF5IDEwCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGNhc2UgaWdub3JlCisKK3N5biBrZXl3b3JkIHdpbmJhdGNoQ3RsCWlmIHRoZW4gZWxzZSBlbmRpZiBicmVhayBlbmQgcmV0dXJuIGV4aXQgbmV4dAorc3luIGtleXdvcmQgd2luYmF0Y2hDdGwgd2hpbGUgZm9yIGdvc3ViIGdvdG8gc3dpdGNoIHNlbGVjdCB0byBjYXNlCitzeW4ga2V5d29yZCB3aW5iYXRjaEN0bCBlbmRzZWxlY3QgZW5kd2hpbGUgZW5kc2VsZWN0IGVuZHN3aXRjaAorCisiIFN0cmluZworc3luIHJlZ2lvbiAgd2luYmF0Y2hWYXIJCXN0YXJ0PSslKyAgZW5kPSslKworIiAldmFyJSBpbiBzdHJpbmdzCitzeW4gcmVnaW9uICB3aW5iYXRjaFN0cmluZwlzdGFydD0rIisgIGVuZD0rIisgY29udGFpbnM9d2luYmF0Y2hWYXIKKworc3luIG1hdGNoIHdpbmJhdGNoQ29tbWVudAkiOy4qJCIKK3N5biBtYXRjaCB3aW5iYXRjaExhYmVsCQkiXlwgKjpbMC05YS16QS1aX1wtXVwrXD4iCisKKyIgY29uc3RhbnQgKGJlemdpbiBieSBAKQorc3luIG1hdGNoIHdpbmJhdGNoQ29uc3RhbnQJIkBbMF85YS16QS1aX1wtXVwrIgorCisiIG51bWJlcgorc3luIG1hdGNoIHdpbmJhdGNoTnVtYmVyCSJcPFswLTldXCtcKHVcPWxcPVx8bHVcfGZcKVw+IgorCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGFib3ZlaWNvbnMgYWNjX2F0dHJpYiBhY2NfY2huZ19udCBhY2NfY29udHJvbCBhY2NfY3JlYXRlCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGFjY19kZWxldGUgYWNjX2Z1bGxfOTUgYWNjX2Z1bGxfbnQgYWNjX2xpc3QgYWNjX3BmdWxsX250CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGFjY19wbWFuZ19udCBhY2NfcHJpbnRfbnQgYWNjX3JlYWQgYWNjX3JlYWRfOTUgYWNjX3JlYWRfbnQKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgYWNjX3dyaXRlIGFtYyBhcnJhbmdlIGFzY2VuZGluZyBhdHRyX2EgYXR0cl9hIGF0dHJfY2kgYXR0cl9jaQorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBhdHRyX2RjIGF0dHJfZGMgYXR0cl9kaSBhdHRyX2RpIGF0dHJfZG0gYXR0cl9kbSBhdHRyX2ggYXR0cl9oCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGF0dHJfaWMgYXR0cl9pYyBhdHRyX3AgYXR0cl9wIGF0dHJfcmkgYXR0cl9yaSBhdHRyX3JvIGF0dHJfcm8KK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgYXR0cl9zaCBhdHRyX3NoIGF0dHJfc3kgYXR0cl9zeSBhdHRyX3QgYXR0cl90IGF0dHJfeCBhdHRyX3gKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgYXZvZ2Fkcm8gYmFja3NjYW4gYm9sdHptYW5uIGNhbmNlbCBjYXBzbG9jayBjaGVjayBjb2x1bW5zCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGNvbW1vbmZvcm1hdCBjciBjcmxmIGN0cmwgZGVmYXVsdCBkZWZhdWx0IGRlZzJyYWQgZGVzY2VuZGluZworc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBkaXNhYmxlIGRyaXZlIGVsZWN0cmljIGVuYWJsZSBldWxlcnMgZmFsc2UgZmFyYWRheSBmbG9hdDgKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgZndkc2NhbiBnZnRzZWMgZ2xvYmFsZ3JvdXAgZ210c2VjIGdvbGRlbnJhdGlvIGdyYXZpdGF0aW9uIGhpZGRlbgorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBpY29uIGxidXR0b24gbGNsaWNrIGxkYmxjbGljayBsZiBsaWdodG1wcyBsaWdodG10cHMgbG9jYWxncm91cAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBtYWdmaWVsZCBtYWpvciBtYm9rY2FuY2VsIG1idXR0b24gbWJ5ZXNubyBtY2xpY2sgbWRibGNsaWNrIG1pbm9yCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IG1zZm9ybWF0IG11bHRpcGxlIG5jc2Fmb3JtYXQgbm8gbm9uZSBub25lIG5vcmVzaXplIG5vcm1hbAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBub3RpZnkgbm93YWl0IG51bWxvY2sgb2ZmIG9uIG9wZW4gcGFyc2VjIHBhcnNlb25seSBwaQorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBwbGFuY2tlcmdzIHBsYW5ja2pvdWxlcyBwcmludGVyIHJhZDJkZWcgcmJ1dHRvbiByY2xpY2sgcmRibGNsaWNrCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHJlZ2NsYXNzZXMgcmVnY3VycmVudCByZWdtYWNoaW5lIHJlZ3Jvb3QgcmVndXNlcnMgcm93cyBzYXZlCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHNjcm9sbGxvY2sgc2VydmVyIHNoaWZ0IHNpbmdsZSBzb3J0ZWQgc3RhY2sgc3RyaW5nIHRhYiB0aWxlCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHRydWUgdW5jaGVjayB1bnNvcnRlZCB3YWl0IHdob2xlc2VjdGlvbiB3b3JkMSB3b3JkMiB3b3JkNCB5ZXMKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgem9vbWVkIGFib3V0IGFicyBhY29zIGFkZGV4dGVuZGVyIGFwcGV4aXN0IGFwcHdhaXRjbG9zZSBhc2luCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGFza2ZpbGVuYW1lIGFza2ZpbGV0ZXh0IGFza2l0ZW1saXN0IGFza2xpbmUgYXNrcGFzc3dvcmQgYXNreWVzbm8KK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgYXRhbiBhdmVyYWdlIGJlZXAgYmluYXJ5YWxsb2MgYmluYXJ5Y29weSBiaW5hcnllb2RnZXQgYmluYXJ5ZW9kc2V0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGJpbmFyeWZyZWUgYmluYXJ5aGFzaHJlYyBiaW5hcnlpbmNyIGJpbmFyeWluY3IyIGJpbmFyeWluY3I0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGJpbmFyeWluY3JmbHQgYmluYXJ5aW5kZXggYmluYXJ5aW5kZXhuYyBiaW5hcnlvbGV0eXBlIGJpbmFyeXBlZWsKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgYmluYXJ5cGVlazIgYmluYXJ5cGVlazQgYmluYXJ5cGVla2ZsdCBiaW5hcnlwZWVrc3RyIGJpbmFyeXBva2UKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgYmluYXJ5cG9rZTIgYmluYXJ5cG9rZTQgYmluYXJ5cG9rZWZsdCBiaW5hcnlwb2tlc3RyIGJpbmFyeXJlYWQKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgYmluYXJ5c29ydCBiaW5hcnlzdHJjbnQgYmluYXJ5d3JpdGUgYm94YnV0dG9uZHJhdyBib3hidXR0b25raWxsCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGJveGJ1dHRvbnN0YXQgYm94YnV0dG9ud2FpdCBib3hjYXB0aW9uIGJveGNvbG9yCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGJveGRhdGFjbGVhciBib3hkYXRhdGFnCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGJveGRlc3Ryb3kgYm94ZHJhd2NpcmNsZSBib3hkcmF3bGluZSBib3hkcmF3cmVjdCBib3hkcmF3dGV4dAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBib3hlc3VwIGJveG1hcG1vZGUgYm94bmV3IGJveG9wZW4gYm94cGVuIGJveHNodXQgYm94dGV4dCBib3h0ZXh0Y29sb3IKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgYm94dGV4dGZvbnQgYm94dGl0bGUgYm94dXBkYXRlcyBicmVhayBidXR0b25uYW1lcyBieSBjYWxsCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGNhbGxleHQgY2VpbGluZyBjaGFyMm51bSBjbGlwYXBwZW5kIGNsaXBnZXQgY2xpcHB1dAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBjb250aW51ZSBjb3MgY29zaCBkYXRldGltZQorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBkZGVleGVjdXRlIGRkZWluaXRpYXRlIGRkZXBva2UgZGRlcmVxdWVzdCBkZGV0ZXJtaW5hdGUKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgZGRldGltZW91dCBkZWJ1ZyBkZWJ1Z2RhdGEgZGVjaW1hbHMgZGVsYXkgZGlhbG9nCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGRpYWxvZ2JveCBkaXJhdHRyZ2V0IGRpcmF0dHJzZXQgZGlyY2hhbmdlIGRpcmV4aXN0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGRpcmdldCBkaXJob21lIGRpcml0ZW1pemUgZGlybWFrZSBkaXJyZW1vdmUgZGlycmVuYW1lCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGRpcndpbmRvd3MgZGlza2V4aXN0IGRpc2tmcmVlIGRpc2tpbmZvIGRpc2tzY2FuIGRpc2tzaXplCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGRpc2t2b2xpbmZvIGRpc3BsYXkgZGxsY2FsbCBkbGxmcmVlIGRsbGhpbnN0IGRsbGh3bmQgZGxsbG9hZAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBkb3Nib3hjdXJzb3J4IGRvc2JveGN1cnNvcnkgZG9zYm94Z2V0YWxsIGRvc2JveGdldGRhdGEKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgZG9zYm94aGVpZ2h0IGRvc2JveHNjcm1vZGUgZG9zYm94dmVyc2lvbiBkb3Nib3h3aWR0aCBkb3N2ZXJzaW9uCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGRyb3AgZWRvc2dldGluZm8gZWRvc2dldHZhciBlZG9zbGlzdHZhcnMgZWRvc3BhdGhhZGQgZWRvc3BhdGhjaGsKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgZWRvc3BhdGhkZWwgZWRvc3NldHZhcgorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBlbmRzZXNzaW9uIGVudmdldGluZm8gZW52Z2V0dmFyIGVudmlyb25tZW50CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGVudmlyb25zZXQgZW52aXRlbWl6ZSBlbnZsaXN0dmFycyBlbnZwYXRoYWRkIGVudnBhdGhjaGsKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgZW52cGF0aGRlbCBlbnZzZXR2YXIgZXJyb3Jtb2RlIGV4Y2x1c2l2ZSBleGVjdXRlIGV4ZXR5cGVpbmZvCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGV4cCBmYWJzIGZpbGVhcHBlbmQgZmlsZWF0dHJnZXQgZmlsZWF0dHJzZXQgZmlsZWNsb3NlCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGZpbGVjb21wYXJlIGZpbGVjb3B5IGZpbGVkZWxldGUgZmlsZWV4aXN0IGZpbGVleHRlbnNpb24gZmlsZWZ1bGxuYW1lCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGZpbGVpdGVtaXplIGZpbGVsb2NhdGUgZmlsZW1hcG5hbWUgZmlsZW1vdmUgZmlsZW5hbWVldmFsMQorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBmaWxlbmFtZWV2YWwyIGZpbGVuYW1lbG9uZyBmaWxlbmFtZXNob3J0IGZpbGVvcGVuIGZpbGVwYXRoCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGZpbGVyZWFkIGZpbGVyZW5hbWUgZmlsZXJvb3QgZmlsZXNpemUgZmlsZXRpbWVjb2RlIGZpbGV0aW1lZ2V0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGZpbGV0aW1lc2V0IGZpbGV0aW1ldG91Y2ggZmlsZXZlcmluZm8gZmlsZXdyaXRlIGZpbGV5bWRobXMKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgZmluZHdpbmRvdyBmbG9vciBnZXRleGFjdHRpbWUgZ2V0dGlja2NvdW50CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGljb25hcnJhbmdlIGljb25yZXBsYWNlIGlnbm9yZWlucHV0IGluaWRlbGV0ZSBpbmlkZWxldGVwdnQKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgaW5paXRlbWl6ZSBpbmlpdGVtaXplcHZ0IGluaXJlYWQgaW5pcmVhZHB2dCBpbml3cml0ZSBpbml3cml0ZXB2dAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBpbnN0YWxsZmlsZSBpbnQgaW50Y29udHJvbCBpc2RlZmluZWQgaXNmbG9hdCBpc2ludCBpc2tleWRvd24KK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgaXNsaWNlbnNlZCBpc251bWJlciBpdGVtY291bnQgaXRlbWV4dHJhY3QgaXRlbWluc2VydCBpdGVtbG9jYXRlCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGl0ZW1yZW1vdmUgaXRlbXNlbGVjdCBpdGVtc29ydCBrZXl0b2dnbGVnZXQga2V5dG9nZ2xlc2V0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IGxhc3RlcnJvciBsb2cxMCBsb2dkaXNrIGxvZ2UgbWF4IG1lc3NhZ2UgbWluIG1vZCBtb3VzZWNsaWNrCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IG1vdXNlY2xpY2tidG4gbW91c2VkcmFnIG1vdXNlaW5mbyBtb3VzZW1vdmUgbXNndGV4dGdldCBuM2F0dGFjaAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBuM2NhcHR1cmVlbmQgbjNjYXB0dXJlcHJ0IG4zY2hncGFzc3dvcmQgbjNkZXRhY2ggbjNkaXJhdHRyZ2V0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IG4zZGlyYXR0cnNldCBuM2RyaXZlcGF0aCBuM2RyaXZlcGF0aDIgbjNkcml2ZXN0YXR1cyBuM2ZpbGVhdHRyZ2V0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IG4zZmlsZWF0dHJzZXQgbjNnZXRsb2dpbmlkIG4zZ2V0bWFwcGVkIG4zZ2V0bmV0YWRkciBuM2dldHVzZXIKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgbjNnZXR1c2VyaWQgbjNsb2dvdXQgbjNtYXAgbjNtYXBkZWxldGUgbjNtYXBkaXIgbjNtYXByb290IG4zbWVtYmVyZGVsCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IG4zbWVtYmVyZ2V0IG4zbWVtYmVyc2V0IG4zbXNnc2VuZCBuM21zZ3NlbmRhbGwgbjNzZXJ2ZXJpbmZvCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IG4zc2VydmVybGlzdCBuM3NldHNyY2hkcnYgbjN1c2VyZ3JvdXBzIG4zdmVyc2lvbiBuNGF0dGFjaAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBuNGNhcHR1cmVlbmQgbjRjYXB0dXJlcHJ0IG40Y2hncGFzc3dvcmQgbjRkZXRhY2ggbjRkaXJhdHRyZ2V0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IG40ZGlyYXR0cnNldCBuNGRyaXZlcGF0aCBuNGRyaXZlc3RhdHVzIG40ZmlsZWF0dHJnZXQgbjRmaWxlYXR0cnNldAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBuNGdldGxvZ2luaWQgbjRnZXRtYXBwZWQgbjRnZXRuZXRhZGRyIG40Z2V0dXNlciBuNGdldHVzZXJpZAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBuNGxvZ2luIG40bG9nb3V0IG40bWFwIG40bWFwZGVsZXRlIG40bWFwZGlyIG40bWFwcm9vdCBuNG1lbWJlcmRlbAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBuNG1lbWJlcmdldCBuNG1lbWJlcnNldCBuNG1zZ3NlbmQgbjRtc2dzZW5kYWxsIG40c2VydmVyaW5mbworc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBuNHNlcnZlcmxpc3QgbjRzZXRzcmNoZHJ2IG40dXNlcmdyb3VwcyBuNHZlcnNpb24gbmV0YWRkZHJpdmUKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgbmV0YWRkcHJpbnRlciBuZXRjYW5jZWxjb24gbmV0ZGlyZGlhbG9nIG5ldGdldGNvbiBuZXRnZXR1c2VyCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IG5ldGluZm8gbmV0cmVzb3VyY2VzIG5ldHZlcnNpb24gbnVtMmNoYXIgb2JqZWN0Y2xvc2UKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgb2JqZWN0b3BlbiBwYXJzZWRhdGEgcGF1c2UgcGxheW1lZGlhIHBsYXltaWRpIHBsYXl3YXZlZm9ybQorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBwcmludCByYW5kb20gcmVnYXBwIHJlZ2Nsb3Nla2V5IHJlZ2Nvbm5lY3QgcmVnY3JlYXRla2V5CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHJlZ2RlbGV0ZWtleSByZWdkZWx2YWx1ZSByZWdlbnRyeXR5cGUgcmVnbG9hZGhpdmUgcmVnb3BlbmtleQorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCByZWdxdWVyeWJpbiByZWdxdWVyeWR3b3JkIHJlZ3F1ZXJ5ZXggcmVncXVlcnlleHBzeiByZWdxdWVyeWl0ZW0KK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgcmVncXVlcnlrZXkgcmVncXVlcnltdWxzeiByZWdxdWVyeXZhbHVlIHJlZ3NldGJpbgorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCByZWdzZXRkd29yZCByZWdzZXRleCByZWdzZXRleHBzeiByZWdzZXRtdWxzeiByZWdzZXR2YWx1ZQorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCByZWd1bmxvYWRoaXZlIHJlbG9hZCByZWxvYWQgcnRzdGF0dXMgcnVuIHJ1bmVudmlyb24KK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgcnVuZXhpdCBydW5oaWRlIHJ1bmhpZGV3YWl0IHJ1bmljb24gcnVuaWNvbndhaXQgcnVuc2hlbGwgcnVud2FpdAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCBydW56b29tIHJ1bnpvb213YWl0IHNlbmRrZXkgc2VuZGtleXNjaGlsZCBzZW5ka2V5c3RvCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHNlbmRtZW51c3RvIHNoZWxsZXhlY3V0ZSBzaG9ydGN1dGVkaXQgc2hvcnRjdXRleHRyYSBzaG9ydGN1dGluZm8KK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgc2hvcnRjdXRtYWtlIHNpbiBzaW5oIHNuYXBzaG90IHNvdW5kcyBzcXJ0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHNyY2hmcmVlIHNyY2hpbml0IHNyY2huZXh0IHN0cmNhdCBzdHJjaGFyY291bnQgc3RyY21wCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHN0cmZpbGwgc3RyZml4IHN0cmZpeGNoYXJzIHN0cmljbXAgc3RyaW5kZXggc3RybGVuCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHN0cmxvd2VyIHN0cnJlcGxhY2Ugc3Ryc2NhbiBzdHJzdWIgc3RydHJpbSBzdHJ1cHBlcgorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB0YW4gdGFuaCB0Y3BhZGRyMmhvc3QgdGNwZnRwY2hkaXIgdGNwZnRwY2xvc2UgdGNwZnRwZ2V0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHRjcGZ0cGxpc3QgdGNwZnRwbW9kZSB0Y3BmdHBvcGVuIHRjcGZ0cHB1dCB0Y3Bob3N0MmFkZHIgdGNwaHR0cGdldAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB0Y3BodHRwcG9zdCB0Y3BwYXJtZ2V0IHRjcHBhcm1zZXQgdGNwcGluZyB0Y3BzbXRwIHRlcm1pbmF0ZQorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB0ZXh0Ym94IHRleHRib3hzb3J0IHRleHRvdXRidWZkZWwgdGV4dG91dGJ1ZmZlciB0ZXh0b3V0ZGVidWcKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgdGV4dG91dGZyZWUgdGV4dG91dGluZm8gdGV4dG91dHJlc2V0IHRleHRvdXR0cmFjayB0ZXh0b3V0dHJhY2tiCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHRleHRvdXR0cmFja3AgdGV4dG91dHdhaXQgdGV4dHNlbGVjdCB0aW1lYWRkIHRpbWVkYXRlCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHRpbWVkZWxheSB0aW1lZGlmZmRheXMgdGltZWRpZmZzZWNzIHRpbWVqdWxpYW5kYXkgdGltZWp1bHRveW1kCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHRpbWVzdWJ0cmFjdCB0aW1ld2FpdCB0aW1leW1kaG1zIHZlcnNpb24gdmVyc2lvbmRsbAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB3M2FkZGNvbiB3M2NhbmNlbGNvbiB3M2RpcmJyb3dzZSB3M2dldGNhcHMgdzNnZXRjb24gdzNuZXRkaWFsb2cKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgdzNuZXRnZXR1c2VyIHczcHJ0YnJvd3NlIHczdmVyc2lvbiB3OTVhY2Nlc3NhZGQgdzk1YWNjZXNzZGVsCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHc5NWFkZGRyaXZlIHc5NWFkZHByaW50ZXIgdzk1Y2FuY2VsY29uIHc5NWRpcmRpYWxvZyB3OTVnZXRjb24KK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgdzk1Z2V0dXNlciB3OTVyZXNvdXJjZXMgdzk1c2hhcmVhZGQgdzk1c2hhcmVkZWwgdzk1c2hhcmVzZXQKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgdzk1dmVyc2lvbiB3YWl0Zm9ya2V5IHdhbGxwYXBlciB3ZWJiYXNlY29udiB3ZWJjbG9zZWxvZworc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB3ZWJjbWRkYXRhIHdlYmNvbmRhdGEgd2ViY291bnRlciB3ZWJkYXRkYXRhIHdlYmR1bXBlcnJvciB3ZWJoYXNoY29kZQorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB3ZWJpc2xvY2FsIHdlYmxvZ2xpbmUgd2Vib3BlbmxvZyB3ZWJvdXQgd2Vib3V0ZmlsZSB3ZWJwYXJhbWRhdGEKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgd2VicGFyYW1uYW1lcyB3ZWJzZXR0aW1lb3V0IHdlYnZlcmlmeWNhcmQgd2luYWN0aXZhdGUKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgd2luYWN0aXZjaGlsZCB3aW5hcnJhbmdlIHdpbmNsb3NlIHdpbmNsb3Nlbm90IHdpbmNvbmZpZyB3aW5leGVuYW1lCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHdpbmV4aXN0IHdpbnBhcnNldCB3aW5wYXJnZXQgd2luZXhpc3RjaGlsZCB3aW5nZXRhY3RpdmUKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgd2luaGVscCB3aW5oaWRlIHdpbmljb25pemUgd2luaWRnZXQgd2luaXNkb3Mgd2luaXRlbWNoaWxkCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHdpbml0ZW1pemUgd2luaXRlbW5hbWVpZCB3aW5tZXRyaWNzIHdpbm5hbWUgd2lucGFybWdldAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB3aW5wYXJtc2V0IHdpbnBsYWNlIHdpbnBsYWNlZ2V0IHdpbnBsYWNlc2V0CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHdpbnBvc2l0aW9uIHdpbnJlc291cmNlcyB3aW5zaG93IHdpbnN0YXRlIHdpbnN5c2luZm8KK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgd2ludGl0bGUgd2ludmVyc2lvbiB3aW53YWl0Y2hpbGQgd2lud2FpdGNsb3NlIHdpbndhaXRleGlzdAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB3aW56b29tIHduYWRkY29uIHduY2FuY2VsY29uIHduY21wdHJpbmZvIHduZGlhbG9nCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHduZGxnYnJvd3NlIHduZGxnY29uIHduZGxnY29uMiB3bmRsZ2NvbjMKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgd25kbGdjb240IHduZGxnZGlzY29uIHduZGxnbm9zaGFyZSB3bmRsZ3NoYXJlIHduZ2V0Y2Fwcworc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB3bmdldGNvbiB3bmdldHVzZXIgd25uZXRuYW1lcyB3bnJlc3RvcmUgd25zZXJ2ZXJzIHduc2hhcmVjbnQKK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgd25zaGFyZW5hbWUgd25zaGFyZXBhdGggd25zaGFyZXMgd250YWNjZXNzYWRkIHdudGFjY2Vzc2RlbAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB3bnRhY2Nlc3NnZXQgd250YWRkZHJpdmUgd250YWRkcHJpbnRlciB3bnRjYW5jZWxjb24gd250ZGlyZGlhbG9nCitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHdudGdldGNvbiB3bnRnZXR1c2VyIHdudGxpc3Rncm91cHMgd250bWVtYmVyZGVsIHdudG1lbWJlcmdldAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB3bnRtZW1iZXJncnBzIHdudG1lbWJlcmxpc3Qgd250bWVtYmVyc2V0IHdudHJlc291cmNlcyB3bnRzaGFyZWFkZAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB3bnRzaGFyZWRlbCB3bnRzaGFyZXNldCB3bnR2ZXJzaW9uIHdudmVyc2lvbiB3bndya2dyb3VwcyB3d2VudnVubG9hZAorc3luIGtleXdvcmQgd2luYmF0Y2hJbXBsaWNpdCB4YmFzZWNvbnZlcnQgeGN1cnNvcnNldCB4ZGlza2xhYmVsZ2V0IHhkcml2ZXJlYWR5IHhleHRlbmRlcmluZm8KK3N5biBrZXl3b3JkIHdpbmJhdGNoSW1wbGljaXQgeGdldGNoaWxkaHduZCB4Z2V0ZWxhcHNlZCB4aGV4IHhtZW1jb21wYWN0IHhtZXNzYWdlYm94CitzeW4ga2V5d29yZCB3aW5iYXRjaEltcGxpY2l0IHhzZW5kbWVzc2FnZSB4dmVyaWZ5Y2NhcmQgeWllbGQKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfd2luYmF0Y2hfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfd2luYmF0Y2hfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgd2luYmF0Y2hMYWJlbAkJUHJlUHJvYworICBIaUxpbmsgd2luYmF0Y2hDdGwJCU9wZXJhdG9yCisgIEhpTGluayB3aW5iYXRjaFN0YXRlbWVudAlTdGF0ZW1lbnQKKyAgSGlMaW5rIHdpbmJhdGNoVG9kbwkJVG9kbworICBIaUxpbmsgd2luYmF0Y2hTdHJpbmcJCVN0cmluZworICBIaUxpbmsgd2luYmF0Y2hWYXIJCVR5cGUKKyAgSGlMaW5rIHdpbmJhdGNoQ29tbWVudAlDb21tZW50CisgIEhpTGluayB3aW5iYXRjaEltcGxpY2l0CVNwZWNpYWwKKyAgSGlMaW5rIHdpbmJhdGNoTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHdpbmJhdGNoQ29uc3RhbnQJU3RvcmFnZUNsYXNzCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIndpbmJhdGNoIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvd21sLnZpbSBiL3J1bnRpbWUvc3ludGF4L3dtbC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1NzkzMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3dtbC52aW0KQEAgLTAsMCArMSwxNzIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgV01MIC0gV2Vic2l0ZSBNZXRhTGFuZ3VhZ2UKKyIgTWFpbnRhaW5lcjogICBHZXJmcmllZCBGdWNocyA8YWxmaWVAaXN0Lm9yZz4KKyIgRmlsZW5hbWVzOiAgICAqLndtbAorIiBMYXN0IENoYW5nZTogIDA3IEZlYiAyMDAyCisiIFVSTDoJCWh0dHA6Ly9hbGZpZS5pc3Qub3JnL3NvZnR3YXJlL3ZpbS9zeW50YXgvd21sLnZpbQorIgorIiBPcmlnaW5hbCBWZXJzaW9uOiBDcmFpZyBTbWFsbCA8Y3NtYWxsQGV5ZS1uZXQuY29tLmF1PgorCisiIENvbW1lbnRzIGFyZSB2ZXJ5IHdlbGNvbWUgLSBidXQgcGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHlvdSBhcmUgY29tbWVudGluZyBvbgorIiB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBmaWxlLgorIiBTUEFNIGlzIF9OT1RfIHdlbGNvbWUgLSBiZSByZWFkeSB0byBiZSByZXBvcnRlZCEKKworIiAgSWYgeW91IGFyZSBsb29raW5nIGZvciB0aGUgIldpcmVsZXNzIE1hcmt1cCBMYW5ndWFnZSIgc3ludGF4IGZpbGUsCisiICBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhlIHdhcC52aW0gZmlsZSBkb25lIGJ5IFJhbGYgU2NoYW5kbCwgc29vbiBpbiBhCisiICB2aW0tcGFja2FnZSBhcm91bmQgeW91ciBjb3JuZXIgOikKKworCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW4gY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKworIiBBIGxvdCBvZiB0aGUgd2ViIHN0dWZmIGxvb2tzIGxpa2UgSFRNTCBzbyB3ZSBsb2FkIHRoYXQgZmlyc3QKK2lmIHZlcnNpb24gPCA2MDAKKyAgc28gPHNmaWxlPjpwOmgvaHRtbC52aW0KK2Vsc2UKKyAgcnVudGltZSEgc3ludGF4L2h0bWwudmltCitlbmRpZgordW5sZXQgYjpjdXJyZW50X3N5bnRheAorCitpZiAhZXhpc3RzKCJtYWluX3N5bnRheCIpCisgIGxldCBtYWluX3N5bnRheCA9ICd3bWwnCitlbmRpZgorCisiIHNwZWNpYWwgY2hhcmFjdGVyCitzeW4gbWF0Y2ggd21sTmV4dExpbmUJIlxcJCIKKworIiBSZWRmaW5lIGh0bWxUYWcKK3N5biBjbGVhciBodG1sVGFnCitzeW4gcmVnaW9uICBodG1sVGFnICBzdGFydD0rPFteLzxdKyBlbmQ9Kz4rICBjb250YWlucz1odG1sVGFnTixodG1sU3RyaW5nLGh0bWxBcmcsaHRtbFZhbHVlLGh0bWxUYWdFcnJvcixodG1sRXZlbnQsaHRtbENzc0RlZmluaXRpb24KKworIgorIiBBZGQgaW4gZXh0cmEgQXJndW1lbnRzIHVzZWQgYnkgd21sCitzeW4ga2V5d29yZCBodG1sVGFnTmFtZSBjb250YWluZWQgZ2ZvbnQgaW1nYmcgaW1nZG90IGxvd3NyYworc3luIGtleXdvcmQgaHRtbFRhZ05hbWUgY29udGFpbmVkIG5hdmJhcjpkZWZpbmUgbmF2YmFyOmhlYWRlcgorc3luIGtleXdvcmQgaHRtbFRhZ05hbWUgY29udGFpbmVkIG5hdmJhcjpmb290ZXIgbmF2YmFyOnByb2xvZworc3luIGtleXdvcmQgaHRtbFRhZ05hbWUgY29udGFpbmVkIG5hdmJhcjplcGlsb2cgbmF2YmFyOmJ1dHRvbgorc3luIGtleXdvcmQgaHRtbFRhZ05hbWUgY29udGFpbmVkIG5hdmJhcjpmaWx0ZXIgbmF2YmFyOmRlYnVnCitzeW4ga2V5d29yZCBodG1sVGFnTmFtZSBjb250YWluZWQgbmF2YmFyOnJlbmRlcgorc3luIGtleXdvcmQgaHRtbFRhZ05hbWUgY29udGFpbmVkIHByZWxvYWQgcm9sbG92ZXIKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBzcGFjZSBoc3BhY2UgdnNwYWNlIG92ZXIKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBwcyBkcyBwaSBlaW4gYmlnIHNjIHNwYWNlZCBoZWFkbGluZQorc3luIGtleXdvcmQgaHRtbFRhZ05hbWUgY29udGFpbmVkIHVlIHN1YmhlYWRsaW5lIHp3dWUgdmVyYmNvZGUKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBpc29sYXRpbiBwb2Qgc2RmIHRleHQgdXJsIHZlcmJhdGltCitzeW4ga2V5d29yZCBodG1sVGFnTmFtZSBjb250YWluZWQgeHRhYmxlCitzeW4ga2V5d29yZCBodG1sVGFnTmFtZSBjb250YWluZWQgY3NtYXAgZnN2aWV3IGltcG9ydCBib3gKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBjYXNlOnVwcGVyIGNhc2U6bG93ZXIKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBncmlkIGNlbGwgaW5mbyBsYW5nOiBsb2dvIHBhZ2UKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBzZXQtdmFyIHJlc3RvcmUKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCBhcnJheTpwdXNoIGFycmF5OnNob3cgc2V0LXZhciBpZmRlZgorc3luIGtleXdvcmQgaHRtbFRhZ05hbWUgY29udGFpbmVkIHNheSBtNCBzeW1ib2wgZHVtcCBlbnRlciBkaXZlcnQKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCB0b2MKK3N5biBrZXl3b3JkIGh0bWxUYWdOYW1lIGNvbnRhaW5lZCB3bWwgY2FyZCBkbyByZWZyZXNoIG9uZWV2ZW50IGNhdGNoIHNwYXduCisKKyIKKyIgVGhlIHdtbCBhcmd1bWVudHMKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIGFkanVzdCBiYWNrZ3JvdW5kIGJhc2UgYmRjb2xvciBiZHNwYWNlCitzeW4ga2V5d29yZCBodG1sQXJnIGNvbnRhaW5lZCBiZHdpZHRoIGNvbXBsZXRlIGNvcHlyaWdodCBjcmVhdGVkIGNyb3AKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIGRpcmVjdGlvbiBkZXNjcmlwdGlvbiBkb21haW5uYW1lIGVwZXJsZmlsdGVyCitzeW4ga2V5d29yZCBodG1sQXJnIGNvbnRhaW5lZCBmaWxlIGhpbnQgaW1nYmFzZSBpbWdzdGFyIGludGVyY2hhciBpbnRlcmxpbmUKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIGtlZXBociBrZWVwaW5kZXgga2V5d29yZHMgbGF5b3V0IHNwYWNpbmcKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIHBhZGRpbmcgbm9uZXRzY2FwZSBub3NjYWxlIG5vdGFnIG5vdHlwbworc3luIGtleXdvcmQgaHRtbEFyZyBjb250YWluZWQgb25sb2FkIG92ZXJzcmMgcG9zIHNlbGVjdCBzbGljZXMgc3R5bGUKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIHN1YnNlbGVjdGVkIHR4dGNvbF9zZWxlY3QgdHh0Y29sX25vcm1hbAorc3luIGtleXdvcmQgaHRtbEFyZyBjb250YWluZWQgdHh0b25seSB2aWEKK3N5biBrZXl3b3JkIGh0bWxBcmcgY29udGFpbmVkIG1vZGUgY29sdW1ucyBsb2NhbHNyYyBvcmRlcmVkCisKKworIiBMaW5lcyBzdGFydGluZyB3aXRoIGFuICMgYXJlIHVzdWFsbHkgY29tbWVudHMKK3N5biBtYXRjaCAgIHdtbENvbW1lbnQgICAgICJeXHMqIy4qIgorIiBUaGUgZGlmZmVyZW50IGV4Y2VwdGlvbnMgdG8gY29tbWVudHMKK3N5biBtYXRjaCAgIHdtbFNoYXJwQmFuZyAgICJeIyEuKiIKK3N5biBtYXRjaCAgIHdtbFVzZWQJICAgY29udGFpbmVkICJcc1xzKltBLVphLXo6Xy1dKiIKK3N5biBtYXRjaCAgIHdtbFVzZQkgICAiXlxzKiNccyp1c2Vcc1wrIiBjb250YWlucz13bWxVc2VkCitzeW4gbWF0Y2ggICB3bWxJbmNsdWRlCSAgICJeXHMqI1xzKmluY2x1ZGUuKyIKKworc3luIHJlZ2lvbiAgd21sQm9keQkgICBjb250YWluZWQgc3RhcnQ9Kzw8KyBlbmQ9Kz4+KworCitzeW4gbWF0Y2ggICB3bWxMb2NhdGlvbklkICBjb250YWluZWQgIltBLVphLXpdXCsiCitzeW4gcmVnaW9uICB3bWxMb2NhdGlvbiAgICBzdGFydD0rPDwrIGVuZD0rPj4rIGNvbnRhaW5zPXdtbExvY2F0aW9uSWQKKyJzeW4gcmVnaW9uICB3bWxMb2NhdGlvbiAgICBzdGFydD0reyMrIGVuZD0rI30rIGNvbnRhaW5zPXdtbExvY2F0aW9uSWQKKyJzeW4gcmVnaW9uICB3bWxMb2NhdGlvbmVkICBjb250YWluZWQgc3RhcnQ9Kzw8KyBlbmQ9Kz4+KyBjb250YWlucz13bWxMb2NhdGlvbklkCisKK3N5biBtYXRjaCAgIHdtbERpdmVydCAgICAgICJcLlwuW2EtekEtWl9dXCs+PiIKK3N5biBtYXRjaCAgIHdtbERpdmVydEVuZCAgICI8PFwuXC4iCisiIG5ldyB2ZXJzaW9uCisic3luIG1hdGNoICAgd21sRGl2ZXJ0ICAgICAgInsjW2EtekEtWl9dXCsjOiIKKyJzeW4gbWF0Y2ggICB3bWxEaXZlcnRFbmQgICAiOiMjfSIKKworc3luIG1hdGNoICAgd21sRGVmaW5lTmFtZSAgY29udGFpbmVkICJcc1wrW0EtWmEtei1dXCsiCitzeW4gcmVnaW9uICBodG1sVGFnTmFtZSAgICBzdGFydD0iXDxcKGRlZmluZS10YWdcfGRlZmluZS1yZWdpb25cKSIgZW5kPSJcPiIgY29udGFpbnM9d21sRGVmaW5lTmFtZQorCisiIFRoZSBwZXJsIGluY2x1ZGUgc3R1ZmYKK2lmIG1haW5fc3ludGF4ICE9ICdwZXJsJworICAiIFBlcmwgc2NyaXB0CisgIGlmIHZlcnNpb24gPCA2MDAKKyAgICBzeW4gaW5jbHVkZSBAd21sUGVybFNjcmlwdCA8c2ZpbGU+OnA6aC9wZXJsLnZpbQorICBlbHNlCisgICAgc3luIGluY2x1ZGUgQHdtbFBlcmxTY3JpcHQgc3ludGF4L3BlcmwudmltCisgIGVuZGlmCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKKworICBzeW4gcmVnaW9uIHBlcmxTY3JpcHQgICBzdGFydD0rPHBlcmw+KyBrZWVwZW5kIGVuZD0rPC9wZXJsPisgY29udGFpbnM9QHdtbFBlcmxTY3JpcHQsd21sUGVybFRhZworIiBlcGVybCBiZXR3ZWVuICc8OicgYW5kICc6PicgIC0tIEFsZmllIFsxOTk5LTEyLTI2XQorICBzeW4gcmVnaW9uIHBlcmxTY3JpcHQgICBzdGFydD0rPDorIGtlZXBlbmQgZW5kPSs6PisgY29udGFpbnM9QHdtbFBlcmxTY3JpcHQsd21sUGVybFRhZworICBzeW4gbWF0Y2ggICAgd21sUGVybFRhZyAgY29udGFpbmVkICI8LypwZXJsPiIgY29udGFpbnM9d21sUGVybFRhZ04KKyAgc3luIGtleXdvcmQgIHdtbFBlcmxUYWdOIGNvbnRhaW5lZCBwZXJsCisKKyAgaGkgbGluayAgIHdtbFBlcmxUYWcgIGh0bWxUYWcKKyAgaGkgbGluayAgIHdtbFBlcmxUYWdOIGh0bWxTdGF0ZW1lbnQKK2VuZGlmCisKKyIgdmVyYmF0aW0gdGFncyAtLSBkb24ndCBoaWdobGlnaHQgYW55dGhpbmcgaW4gYmV0d2VlbiAgLS0gQWxmaWUgWzIwMDItMDItMDddCitzeW4gcmVnaW9uICB3bWxWZXJiYXRpbVRleHQgc3RhcnQ9Kzx2ZXJiYXRpbT4rIGtlZXBlbmQgZW5kPSs8L3ZlcmJhdGltPisgY29udGFpbnM9d21sVmVyYmF0aW1UYWcKK3N5biBtYXRjaCAgIHdtbFZlcmJhdGltVGFnICBjb250YWluZWQgIjwvKnZlcmJhdGltPiIgY29udGFpbnM9d21sVmVyYmF0aW1UYWdOCitzeW4ga2V5d29yZCB3bWxWZXJiYXRpbVRhZ04gY29udGFpbmVkIHZlcmJhdGltCitoaSBsaW5rICAgICB3bWxWZXJiYXRpbVRhZyAgaHRtbFRhZworaGkgbGluayAgICAgd21sVmVyYmF0aW1UYWdOIGh0bWxTdGF0ZW1lbnQKKworaWYgbWFpbl9zeW50YXggPT0gImh0bWwiCisgIHN5biBzeW5jIG1hdGNoIHdtbEhpZ2hsaWdodCBncm91cHRoZXJlIE5PTkUgIjwvYS16QS1aXSIKKyAgc3luIHN5bmMgbWF0Y2ggd21sSGlnaGxpZ2h0IGdyb3VwdGhlcmUgcGVybFNjcmlwdCAiPHBlcmw+IgorICBzeW4gc3luYyBtYXRjaCB3bWxIaWdobGlnaHRTa2lwICJeLipbJ1wiXS4qJCIKKyAgc3luIHN5bmMgbWlubGluZXM9MTAKK2VuZGlmCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3dtbF9zeW5faW5pdHMiKQorICBsZXQgZGlkX3dtbF9zeW5faW5pdHMgPSAxCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3dtbF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB3bWxOZXh0TGluZQlTcGVjaWFsCisgIEhpTGluayB3bWxVc2UJCUluY2x1ZGUKKyAgSGlMaW5rIHdtbFVzZWQJU3RyaW5nCisgIEhpTGluayB3bWxCb2R5CVNwZWNpYWwKKyAgSGlMaW5rIHdtbERpdmVydGVkCUxhYmVsCisgIEhpTGluayB3bWxEaXZlcnQJRGVsaW1pdGVyCisgIEhpTGluayB3bWxEaXZlcnRFbmQJRGVsaW1pdGVyCisgIEhpTGluayB3bWxMb2NhdGlvbklkCUxhYmVsCisgIEhpTGluayB3bWxMb2NhdGlvbglEZWxpbWl0ZXIKKyIgSGlMaW5rIHdtbExvY2F0aW9uZWQJRGVsaW1pdGVyCisgIEhpTGluayB3bWxEZWZpbmVOYW1lCVN0cmluZworICBIaUxpbmsgd21sQ29tbWVudAlDb21tZW50CisgIEhpTGluayB3bWxJbmNsdWRlCUluY2x1ZGUKKyAgSGlMaW5rIHdtbFNoYXJwQmFuZwlQcmVQcm9jCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIndtbCIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3dzaC52aW0gYi9ydW50aW1lL3N5bnRheC93c2gudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YmExMDUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC93c2gudmltCkBAIC0wLDAgKzEsNDUgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglXaW5kb3dzIFNjcmlwdGluZyBIb3N0CisiIE1haW50YWluZXI6CVBhdWwgTW9vcmUgPGd1c3RhdkBtb3JwaGV1cy5kZW1vbi5jby51az4KKyIgTGFzdCBDaGFuZ2U6CUZyZSwgMjQgTm92IDIwMDAgMjE6NTQ6MDkgKzAxMDAKKworIiBUaGlzIHJldXNlcyB0aGUgWE1MLCBWQiBhbmQgSmF2YVNjcmlwdCBzeW50YXggZmlsZXMuIFdoaWxlIFZCIGlzIG5vdAorIiBWQlNjcmlwdCwgaXQncyBjbG9zZSBlbm91Z2ggZm9yIHVzLiBObyBhdHRlbXB0IGlzIG1hZGUgdG8gaGFuZGxlCisiIG90aGVyIGxhbmd1YWdlcy4KKyIgU2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMgYW5kIHJlcXVlc3RzIHRvIHRoZSBtYWludGFpbmVyLgorCisiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitsZXQgczp3c2hfY3BvX3NhdmUgPSAmY3BvCitzZXQgY3BvJnZpbQorCitydW50aW1lISBzeW50YXgveG1sLnZpbQordW5sZXQgYjpjdXJyZW50X3N5bnRheAorCitzeW4gY2FzZSBpZ25vcmUKK3N5biBpbmNsdWRlIEB3c2hWQlNjcmlwdCA8c2ZpbGU+OnA6aC92Yi52aW0KK3VubGV0IGI6Y3VycmVudF9zeW50YXgKK3N5biBpbmNsdWRlIEB3c2hKYXZhU2NyaXB0IDxzZmlsZT46cDpoL2phdmFzY3JpcHQudmltCit1bmxldCBiOmN1cnJlbnRfc3ludGF4CitzeW4gcmVnaW9uIHdzaFZCU2NyaXB0CisgICAgXCBtYXRjaGdyb3VwPXhtbFRhZyAgICBzdGFydD0iPHNjcmlwdFtePl0qVkJTY3JpcHRcKD5cfFtePl0qW14vPl0+XCkiCisgICAgXCBtYXRjaGdyb3VwPXhtbEVuZFRhZyBlbmQ9Ijwvc2NyaXB0PiIKKyAgICBcIGZvbGQKKyAgICBcIGNvbnRhaW5zPUB3c2hWQlNjcmlwdAorICAgIFwga2VlcGVuZAorc3luIHJlZ2lvbiB3c2hKYXZhU2NyaXB0CisgICAgXCBtYXRjaGdyb3VwPXhtbFRhZyAgICBzdGFydD0iPHNjcmlwdFtePl0qSlwoYXZhXClcPVNjcmlwdFwoPlx8W14+XSpbXi8+XT5cKSIKKyAgICBcIG1hdGNoZ3JvdXA9eG1sRW5kVGFnIGVuZD0iPC9zY3JpcHQ+IgorICAgIFwgZm9sZAorICAgIFwgY29udGFpbnM9QHdzaEphdmFTY3JpcHQKKyAgICBcIGtlZXBlbmQKKworc3luIGNsdXN0ZXIgeG1sUmVnaW9uSG9vayBhZGQ9d3NoVkJTY3JpcHQsd3NoSmF2YVNjcmlwdAorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ3c2giCisKK2xldCAmY3BvID0gczp3c2hfY3BvX3NhdmUKK3VubGV0IHM6d3NoX2Nwb19zYXZlCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC93dmRpYWwudmltIGIvcnVudGltZS9zeW50YXgvd3ZkaWFsLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzUxMzhiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvd3ZkaWFsLnZpbQpAQCAtMCwwICsxLDI4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIENvbmZpZ3VyYXRpb24gZmlsZSBmb3IgV3ZEaWFsCisiIE1haW50YWluZXI6ICAgUHJhaGxhZCBWYWlkeWFuYXRoYW4gPHNsaW1lQHZzbmwubmV0PgorIiBMYXN0IFVwZGF0ZTogIE1vbiwgMTUgT2N0IDIwMDEgMDk6Mzk6MDMgSW5kaWFuIFN0YW5kYXJkIFRpbWUKKworIiBRdWl0IGlmIHN5bnRheCBmaWxlIGlzIGFscmVhZHkgbG9hZGVkCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorCWZpbmlzaAorZW5kaWYKKworc3luIG1hdGNoICAgd3ZkaWFsQ29tbWVudCAgICJeOy4qJCJsYz0xCitzeW4gbWF0Y2ggICB3dmRpYWxDb21tZW50ICAgIlteXFxdOy4qJCJsYz0xCitzeW4gbWF0Y2ggICB3dmRpYWxTZWN0aW9uICAgIl5ccypcWy4qXF0iCitzeW4gbWF0Y2ggICB3dmRpYWxWYWx1ZSAgICAgIj0uKiQibXM9cysxCitzeW4gbWF0Y2ggICB3dmRpYWxWYWx1ZSAgICAgIlxzKlteIDsiJyBdXCsibGM9MQorc3luIG1hdGNoICAgd3ZkaWFsVmFyICAgICAgICJeXHMqXChJbmhlcml0c1x8TW9kZW1cfEJhdWRcfEluaXQuXHxQaG9uZVx8QXJlYVwgQ29kZVx8RGlhbFwgUHJlZml4XHxEaWFsXCBDb21tYW5kXHxMb2dpblx8TG9naW5cfCBQcm9tcHRcfFBhc3N3b3JkXHxQYXNzd29yZFwgUHJvbXB0XHxQUFBEXCBQYXRoXHxGb3JjZVwgQWRkcmVzc1x8UmVtb3RlXCBOYW1lXHxDYXJyaWVyXCBDaGVja1x8U3R1cGlkXCBbTW1db2RlXHxOZXdcIFBQUERcfERlZmF1bHRcIFJlcGx5XHxBdXRvXCBSZWNvbm5lY3RcfFNldFZvbHVtZVx8VXNlcm5hbWVcKSIKK3N5biBtYXRjaCAgIHd2ZGlhbEVxdWFsICAgICAiPSIKKworIiBUaGUgZGVmYXVsdCBoaWdobGlnaHRpbmcKK2hpIGRlZiBsaW5rIHd2ZGlhbENvbW1lbnQgICBDb21tZW50CitoaSBkZWYgbGluayB3dmRpYWxTZWN0aW9uICAgUHJlUHJvYworaGkgZGVmIGxpbmsgd3ZkaWFsVmFyICAgICAgIElkZW50aWZpZXIKK2hpIGRlZiBsaW5rIHd2ZGlhbFZhbHVlICAgICBTdHJpbmcKK2hpIGRlZiBsaW5rIHd2ZGlhbEVxdWFsICAgICBTdGF0ZW1lbnQKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAid3ZkaWFsIgorCisiRU9GIHZpbTogdHc9Nzg6ZnQ9dmltOnRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3hkZWZhdWx0cy52aW0gYi9ydW50aW1lL3N5bnRheC94ZGVmYXVsdHMudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZDNiNjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC94ZGVmYXVsdHMudmltCkBAIC0wLDAgKzEsMTQ1IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJWCByZXNvdXJjZXMgZmlsZXMgbGlrZSB+Ly5YZGVmYXVsdHMgKHhyZGIpCisiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgorIgkJQXV0aG9yIGFuZCBwcmV2aW91cyBtYWludGFpbmVyOgorIgkJR2F1dGFtIEguIE11ZHVudXJpIDxnbXVkdW51ckBpbmZvcm1hdGljYS5jb20+CisiIExhc3QgQ2hhbmdlOglUdWUsIDI3IEFwciAyMDA0IDE0OjU0OjU5IENFU1QKKyIgJElkJAorIgorIiBSRUZFUkVOQ0VTOgorIiAgIHhyZGIgbWFudWFsIHBhZ2UKKyIgICB4cmRiIHNvdXJjZTogZnRwOi8vZnRwLngub3JnL3B1Yi9SNi40L3hjL3Byb2dyYW1zL3hyZGIveHJkYi5jCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiB0dXJuIGNhc2Ugb24KK3N5biBjYXNlIG1hdGNoCisKKworaWYgIWV4aXN0cygieGRlZmF1bHRzX25vX2NvbG9uX2Vycm9ycyIpCisgICAgIiBtYXJrIGxpbmVzIHdoaWNoIGRvIG5vdCBjb250YWluIGEgY29sb24gYXMgZXJyb3JzLgorICAgICIgVGhpcyBkb2VzIG5vdCByZWFsbHkgY2F0Y2ggYWxsIGVycm9ycyBidXQgb25seSBsaW5lcworICAgICIgd2hpY2ggY29udGFpbiBhdCBsZWFzdCB0d28gV09SRFMgYW5kIG5vIGNvbG9uLiBUaGlzCisgICAgIiB3YXMgZG9uZSB0aGlzIHdheSBzbyB0aGF0IGEgbGluZSBpcyBub3QgbWFya2VkIGFzCisgICAgIiBlcnJvciB3aGlsZSB0eXBpbmcgKHdoaWNoIHdvdWxkIGJlIGFubm95aW5nKS4KKyAgICBzeW50YXggbWF0Y2ggeGRlZmF1bHRzRXJyb3JMaW5lICJeXHMqW2EtekEtWi4qXVwrXHNcK1teOiAJXVwrIgorZW5kaWYKKworCisiIHN5biByZWdpb24gIHhkZWZhdWx0c0xhYmVsICAgc3RhcnQ9K15bXjpdXHstfToraGU9ZS0xIHNraXA9K1xcKyBlbmQ9IiQiCitzeW4gbWF0Y2ggICB4ZGVmYXVsdHNMYWJlbCAgICtbXjpdXHstfToraGU9ZS0xICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucz14ZGVmYXVsdHNQdW5jdCx4ZGVmYXVsdHNTcGVjaWFsLHhkZWZhdWx0c0xpbmVFbmQKK3N5biByZWdpb24gIHhkZWZhdWx0c1ZhbHVlICAga2VlcGVuZCBzdGFydD0rOitsYz0xIHNraXA9K1xcKyBlbmQ9KyQrIGNvbnRhaW5zPXhkZWZhdWx0c1NwZWNpYWwseGRlZmF1bHRzTGFiZWwseGRlZmF1bHRzTGluZUVuZAorCitzeW4gbWF0Y2ggICB4ZGVmYXVsdHNTcGVjaWFsCWNvbnRhaW5lZCArI292ZXJyaWRlKworc3luIG1hdGNoICAgeGRlZmF1bHRzU3BlY2lhbAljb250YWluZWQgKyNhdWdtZW50Kworc3luIG1hdGNoICAgeGRlZmF1bHRzUHVuY3QJY29udGFpbmVkICtbLio6XSsKK3N5biBtYXRjaCAgIHhkZWZhdWx0c0xpbmVFbmQJY29udGFpbmVkICtcXCQrCitzeW4gbWF0Y2ggICB4ZGVmYXVsdHNMaW5lRW5kCWNvbnRhaW5lZCArXFxuXFwkKworc3luIG1hdGNoICAgeGRlZmF1bHRzTGluZUVuZAljb250YWluZWQgK1xcbiQrCisKKworCisiIENPTU1FTlRTCisKKyIgbm90ZSwgdGhhdCB0aGUgJyEnIG11c3QgYmUgYXQgdGhlIHZlcnkgZmlyc3QgcG9zaXRpb24gb2YgdGhlIGxpbmUKK3N5biBtYXRjaCAgIHhkZWZhdWx0c0NvbW1lbnQgIl4hLiokIiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zPXhkZWZhdWx0c1RvZG8KKworIiBsaW5lcyBzdGFydGluZyB3aXRoIGEgJyMnIG1hcmsgYW5kIHdoaWNoIGFyZSBub3QgcHJlcHJvY2Vzc29yCisiIGxpbmVzIGFyZSBza2lwcGVkLiAgVGhpcyBpcyBub3QgcGFydCBvZiB0aGUgeHJkYiBkb2N1bWVudGF0aW9uLgorIiBJdCB3YXMgcmVwb3J0ZWQgYnkgQnJhbSBNb29sZW5hYXIgYW5kIGNvdWxkIGJlIGNvbmZpcm1lZCBieQorIiBoYXZpbmcgYSBsb29rIGF0IHhyZGIuYzpHZXRFbnRyaWVzKCkKK3N5biBtYXRjaCAgIHhkZWZhdWx0c0NvbW1lbnRICQkiXiMuKiQiCisic3luIHJlZ2lvbiAgeGRlZmF1bHRzQ29tbWVudCBzdGFydD0iXiMiICBlbmQ9IiQiIGtlZXBlbmQgY29udGFpbnM9QUxMCitzeW4gcmVnaW9uICB4ZGVmYXVsdHNDb21tZW50IHN0YXJ0PSIvXCoiIGVuZD0iXCovIiAgICAgICBjb250YWlucz14ZGVmYXVsdHNUb2RvCisKK3N5bnRheCBtYXRjaCB4ZGVmYXVsdHNDb21tZW50RXJyb3IJIlwqLyIKKworc3luIGtleXdvcmQgeGRlZmF1bHRzVG9kbyBjb250YWluZWQgVE9ETyBGSVhNRSBYWFggZGlzcGxheQorCisKKworIiBQUkVQUk9DRVNTT1IgU1RVRkYKKworc3luIHJlZ2lvbgl4ZGVmYXVsdHNQcmVQcm9jCXN0YXJ0PSJeXHMqI1xzKlwoaWZcfGlmZGVmXHxpZm5kZWZcfGVsaWZcfGVsc2VcfGVuZGlmXClcPiIgc2tpcD0iXFwkIiBlbmQ9IiQiIGNvbnRhaW5zPXhkZWZhdWx0c1N5bWJvbAoraWYgIWV4aXN0cygieGRlZmF1bHRzX25vX2lmMCIpCisgIHN5biByZWdpb24JeGRlZmF1bHRzQ3BwT3V0CQlzdGFydD0iXlxzKiNccyppZlxzXCswXD4iIGVuZD0iLlx8JCIgY29udGFpbnM9eGRlZmF1bHRzQ3BwT3V0MgorICBzeW4gcmVnaW9uCXhkZWZhdWx0c0NwcE91dDIJY29udGFpbmVkIHN0YXJ0PSIwIiBlbmQ9Il5ccyojXHMqXChlbmRpZlw+XHxlbHNlXD5cfGVsaWZcPlwpIiBjb250YWlucz14ZGVmYXVsdHNDcHBTa2lwCisgIHN5biByZWdpb24JeGRlZmF1bHRzQ3BwU2tpcAljb250YWluZWQgc3RhcnQ9Il5ccyojXHMqXChpZlw+XHxpZmRlZlw+XHxpZm5kZWZcPlwpIiBza2lwPSJcXCQiIGVuZD0iXlxzKiNccyplbmRpZlw+IiBjb250YWlucz14ZGVmYXVsdHNDcHBTa2lwCitlbmRpZgorc3luIHJlZ2lvbgl4ZGVmYXVsdHNJbmNsdWRlZAljb250YWluZWQgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKworc3luIG1hdGNoCXhkZWZhdWx0c0luY2x1ZGVkCWNvbnRhaW5lZCAiPFtePl0qPiIKK3N5biBtYXRjaAl4ZGVmYXVsdHNJbmNsdWRlCSJeXHMqI1xzKmluY2x1ZGVcPlxzKlsiPF0iIGNvbnRhaW5zPXhkZWZhdWx0c0luY2x1ZGVkCitzeW4gY2x1c3Rlcgl4ZGVmYXVsdHNQcmVQcm9jR3JvdXAJY29udGFpbnM9eGRlZmF1bHRzUHJlUHJvYyx4ZGVmYXVsdHNJbmNsdWRlZCx4ZGVmYXVsdHNJbmNsdWRlLHhkZWZhdWx0c0RlZmluZQorc3luIHJlZ2lvbgl4ZGVmYXVsdHNEZWZpbmUJCXN0YXJ0PSJeXHMqI1xzKlwoZGVmaW5lXHx1bmRlZlwpXD4iIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1BTExCVVQsQHhkZWZhdWx0c1ByZVByb2NHcm91cCx4ZGVmYXVsdHNDb21tZW50SCx4ZGVmYXVsdHNFcnJvckxpbmUKK3N5biByZWdpb24JeGRlZmF1bHRzUHJlUHJvYwlzdGFydD0iXlxzKiNccypcKHByYWdtYVw+XHxsaW5lXD5cfHdhcm5pbmdcPlx8d2Fyblw+XHxlcnJvclw+XCkiIHNraXA9IlxcJCIgZW5kPSIkIiBrZWVwZW5kIGNvbnRhaW5zPUFMTEJVVCxAeGRlZmF1bHRzUHJlUHJvY0dyb3VwLHhkZWZhdWx0c0NvbW1lbnRILHhkZWZhdWx0c0Vycm9yTGluZQorCisKKworIiBzeW1ib2xzIGFzIGRlZmluZWQgYnkgeHJkYgorc3luIGtleXdvcmQgeGRlZmF1bHRzU3ltYm9sIGNvbnRhaW5lZCBTRVJWRVJIT1NUCitzeW4gbWF0Y2ggICB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkICJTUlZSX1thLXpBLVowLTlfXVwrIgorc3luIGtleXdvcmQgeGRlZmF1bHRzU3ltYm9sIGNvbnRhaW5lZCBIT1NUCitzeW4ga2V5d29yZCB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkIERJU1BMQVlfTlVNCitzeW4ga2V5d29yZCB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkIENMSUVOVEhPU1QKK3N5biBtYXRjaCAgIHhkZWZhdWx0c1N5bWJvbCBjb250YWluZWQgIkNMTlRfW2EtekEtWjAtOV9dXCsiCitzeW4ga2V5d29yZCB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkIFJFTEVBU0UKK3N5biBrZXl3b3JkIHhkZWZhdWx0c1N5bWJvbCBjb250YWluZWQgUkVWSVNJT04KK3N5biBrZXl3b3JkIHhkZWZhdWx0c1N5bWJvbCBjb250YWluZWQgVkVSU0lPTgorc3luIGtleXdvcmQgeGRlZmF1bHRzU3ltYm9sIGNvbnRhaW5lZCBWRU5ET1IKK3N5biBtYXRjaCAgIHhkZWZhdWx0c1N5bWJvbCBjb250YWluZWQgIlZORFJfW2EtekEtWjAtOV9dXCsiCitzeW4gbWF0Y2ggICB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkICJFWFRfW2EtekEtWjAtOV9dXCsiCitzeW4ga2V5d29yZCB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkIE5VTV9TQ1JFRU5TCitzeW4ga2V5d29yZCB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkIFNDUkVFTl9OVU0KK3N5biBrZXl3b3JkIHhkZWZhdWx0c1N5bWJvbCBjb250YWluZWQgQklUU19QRVJfUkdCCitzeW4ga2V5d29yZCB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkIENMQVNTCitzeW4ga2V5d29yZCB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkIFN0YXRpY0dyYXkgR3JheVNjYWxlIFN0YXRpY0NvbG9yIFBzZXVkb0NvbG9yIFRydWVDb2xvciBEaXJlY3RDb2xvcgorc3luIG1hdGNoICAgeGRlZmF1bHRzU3ltYm9sIGNvbnRhaW5lZCAiQ0xBU1NfXChTdGF0aWNHcmF5XHxHcmF5U2NhbGVcfFN0YXRpY0NvbG9yXHxQc2V1ZG9Db2xvclx8VHJ1ZUNvbG9yXHxEaXJlY3RDb2xvclwpIgorc3luIGtleXdvcmQgeGRlZmF1bHRzU3ltYm9sIGNvbnRhaW5lZCBDT0xPUgorc3luIG1hdGNoICAgeGRlZmF1bHRzU3ltYm9sIGNvbnRhaW5lZCAiQ0xBU1NfXChTdGF0aWNHcmF5XHxHcmF5U2NhbGVcfFN0YXRpY0NvbG9yXHxQc2V1ZG9Db2xvclx8VHJ1ZUNvbG9yXHxEaXJlY3RDb2xvclwpX1swLTldXCsiCitzeW4ga2V5d29yZCB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkIEhFSUdIVAorc3luIGtleXdvcmQgeGRlZmF1bHRzU3ltYm9sIGNvbnRhaW5lZCBXSURUSAorc3luIGtleXdvcmQgeGRlZmF1bHRzU3ltYm9sIGNvbnRhaW5lZCBQTEFORVMKK3N5biBrZXl3b3JkIHhkZWZhdWx0c1N5bWJvbCBjb250YWluZWQgWF9SRVNPTFVUSU9OCitzeW4ga2V5d29yZCB4ZGVmYXVsdHNTeW1ib2wgY29udGFpbmVkIFlfUkVTT0xVVElPTgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF94ZGVmYXVsdHNfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfeGRlZmF1bHRzX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisgIEhpTGluayB4ZGVmYXVsdHNMYWJlbAkJVHlwZQorICBIaUxpbmsgeGRlZmF1bHRzVmFsdWUJCUNvbnN0YW50CisgIEhpTGluayB4ZGVmYXVsdHNDb21tZW50CUNvbW1lbnQKKyAgSGlMaW5rIHhkZWZhdWx0c0NvbW1lbnRICXhkZWZhdWx0c0NvbW1lbnQKKyAgSGlMaW5rIHhkZWZhdWx0c1ByZVByb2MJUHJlUHJvYworICBIaUxpbmsgeGRlZmF1bHRzSW5jbHVkZQl4ZGVmYXVsdHNQcmVQcm9jCisgIEhpTGluayB4ZGVmYXVsdHNDcHBTa2lwCXhkZWZhdWx0c0NwcE91dAorICBIaUxpbmsgeGRlZmF1bHRzQ3BwT3V0Mgl4ZGVmYXVsdHNDcHBPdXQKKyAgSGlMaW5rIHhkZWZhdWx0c0NwcE91dAlDb21tZW50CisgIEhpTGluayB4ZGVmYXVsdHNJbmNsdWRlZAlTdHJpbmcKKyAgSGlMaW5rIHhkZWZhdWx0c0RlZmluZQlNYWNybworICBIaUxpbmsgeGRlZmF1bHRzU3ltYm9sCVN0YXRlbWVudAorICBIaUxpbmsgeGRlZmF1bHRzU3BlY2lhbAlTdGF0ZW1lbnQKKyAgSGlMaW5rIHhkZWZhdWx0c0Vycm9yTGluZQlFcnJvcgorICBIaUxpbmsgeGRlZmF1bHRzQ29tbWVudEVycm9yCUVycm9yCisgIEhpTGluayB4ZGVmYXVsdHNQdW5jdAkJTm9ybWFsCisgIEhpTGluayB4ZGVmYXVsdHNMaW5lRW5kCVNwZWNpYWwKKyAgSGlMaW5rIHhkZWZhdWx0c1RvZG8JCVRvZG8KKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAieGRlZmF1bHRzIgorCisiIHZpbTp0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC94Zjg2Y29uZi52aW0gYi9ydW50aW1lL3N5bnRheC94Zjg2Y29uZi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwZjYwNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3hmODZjb25mLnZpbQpAQCAtMCwwICsxLDIwOSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgVGhpcyBpcyBhIEdFTkVSQVRFRCBGSUxFLiBQbGVhc2UgYWx3YXlzIHJlZmVyIHRvIHNvdXJjZSBmaWxlIGF0IHRoZSBVUkkgYmVsb3cuCisiIExhbmd1YWdlOiBYRjg2Q29uZmlnIChYRnJlZTg2IGNvbmZpZ3VyYXRpb24gZmlsZSkKKyIgTWFpbnRhaW5lcjogRGF2aWQgTmVcdntjfWFzIChZZXRpKSA8eWV0aUBwaHlzaWNzLm11bmkuY3o+CisiIExhc3QgQ2hhbmdlOiAyMDAzLTA1LTAxCisiIFVSTDogaHR0cDovL3RyaWZpYy5hdGguY3gvRnRwL3ZpbS9zeW50YXgveGY4NmNvbmYudmltCisiIFJlcXVpcmVkIFZpbSBWZXJzaW9uOiA2LjAKKyIKKyIgT3B0aW9uczogbGV0IHhmODZjb25mX3hmcmVlODZfdmVyc2lvbiA9IDMgb3IgNAorIgkJCQkJCQkgdG8gZm9yY2UgWEZyZWU4NiAzLnggb3IgNC54IFhGODZDb25maWcgc3ludGF4CisKKyIgU2V0dXAKK2lmIHZlcnNpb24gPj0gNjAwCisJaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKwkJZmluaXNoCisJZW5kaWYKK2Vsc2UKKwllY2hvICJTb3JyeSwgYnV0IHRoaXMgc3ludGF4IGZpbGUgcmVsaWVzIG9uIFZpbSA2IGZlYXR1cmVzLgkgRWl0aGVyIHVwZ3JhZGUgVmltIG9yIHVzZWEgdmVyc2lvbiBvZiAiIC4gZXhwYW5kKCI8c2ZpbGU+OnQ6ciIpIC4gIiBzeW50YXggZmlsZSBhcHByb3ByaWF0ZSBmb3IgVmltICIgLiB2ZXJzaW9uLzEwMCAuICIuIiAuIHZlcnNpb24gJTEwMCAuICIuIgorCWZpbmlzaAorZW5kaWYKKworaWYgIWV4aXN0cygiYjp4Zjg2Y29uZl94ZnJlZTg2X3ZlcnNpb24iKQorCWlmIGV4aXN0cygieGY4NmNvbmZfeGZyZWU4Nl92ZXJzaW9uIikKKwkJbGV0IGI6eGY4NmNvbmZfeGZyZWU4Nl92ZXJzaW9uID0geGY4NmNvbmZfeGZyZWU4Nl92ZXJzaW9uCisJZWxzZQorCQlsZXQgYjp4Zjg2Y29uZl94ZnJlZTg2X3ZlcnNpb24gPSA0CisJZW5kaWYKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCisiIENvbW1lbnRzCitzeW4gbWF0Y2ggeGY4NmNvbmZDb21tZW50ICIjLiokIiBjb250YWlucz14Zjg2Y29uZlRvZG8KK3N5biBjYXNlIG1hdGNoCitzeW4ga2V5d29yZCB4Zjg2Y29uZlRvZG8gRklYTUUgVE9ETyBYWFggTk9UIGNvbnRhaW5lZAorc3luIGNhc2UgaWdub3JlCitzeW4gbWF0Y2ggeGY4NmNvbmZUb2RvICI/Pz8iIGNvbnRhaW5lZAorCisiIFNlY3Rpb25pbmcgZXJyb3JzCitzeW4ga2V5d29yZCB4Zjg2Y29uZlNlY3Rpb25FcnJvciBTZWN0aW9uIGNvbnRhaW5lZAorc3luIGtleXdvcmQgeGY4NmNvbmZTZWN0aW9uRXJyb3IgRW5kU2VjdGlvbgorc3luIGtleXdvcmQgeGY4NmNvbmZTdWJTZWN0aW9uRXJyb3IgU3ViU2VjdGlvbgorc3luIGtleXdvcmQgeGY4NmNvbmZTdWJTZWN0aW9uRXJyb3IgRW5kU3ViU2VjdGlvbgorc3luIGtleXdvcmQgeGY4NmNvbmZNb2RlU3ViU2VjdGlvbkVycm9yIE1vZGUKK3N5biBrZXl3b3JkIHhmODZjb25mTW9kZVN1YlNlY3Rpb25FcnJvciBFbmRNb2RlCitzeW4gY2x1c3RlciB4Zjg2Y29uZlNlY3Rpb25FcnJvcnMgY29udGFpbnM9eGY4NmNvbmZTZWN0aW9uRXJyb3IseGY4NmNvbmZTdWJTZWN0aW9uRXJyb3IseGY4NmNvbmZNb2RlU3ViU2VjdGlvbkVycm9yCisKKyIgVmFsdWVzCitpZiBiOnhmODZjb25mX3hmcmVlODZfdmVyc2lvbiA+PSA0CisJc3luIHJlZ2lvbiB4Zjg2Y29uZlN0cmluZyBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5lZCBjb250YWlucz14Zjg2Y29uZlNwZWNpYWxDaGFyLHhmODZjb25mQ29uc3RhbnQseGY4NmNvbmZPcHRpb25OYW1lIG9uZWxpbmUga2VlcGVuZCBuZXh0Z3JvdXA9eGY4NmNvbmZWYWx1ZSBza2lwd2hpdGUKK2Vsc2UKKwlzeW4gcmVnaW9uIHhmODZjb25mU3RyaW5nIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbmVkIGNvbnRhaW5zPXhmODZjb25mU3BlY2lhbENoYXIseGY4NmNvbmZPcHRpb25OYW1lIG9uZWxpbmUga2VlcGVuZAorZW5kaWYKK3N5biBtYXRjaCB4Zjg2Y29uZlNwZWNpYWxDaGFyICJcXFxkXGRcZFx8XFwuIiBjb250YWluZWQKK3N5biBtYXRjaCB4Zjg2Y29uZkRlY2ltYWxOdW1iZXIgIlwoXHNcfC1cKVx6c1xkKlwuXD1cZFwrXD4iCitzeW4gbWF0Y2ggeGY4NmNvbmZGcmVxdWVuY3kgIlwoXHNcfC1cKVx6c1xkXCtcLlw9XGQqXChIelx8a1x8a0h6XHxNXHxNSHpcKSIKK3N5biBtYXRjaCB4Zjg2Y29uZk9jdGFsTnVtYmVyICJcPDBcb1wrXD4iCitzeW4gbWF0Y2ggeGY4NmNvbmZPY3RhbE51bWJlckVycm9yICJcPDBcb1wrWzg5XVxkKlw+Igorc3luIG1hdGNoIHhmODZjb25mSGV4YWRlY2ltYWxOdW1iZXIgIlw8MHhceFwrXD4iCitzeW4gbWF0Y2ggeGY4NmNvbmZWYWx1ZSAiXHNcKy4qJCIgY29udGFpbmVkIGNvbnRhaW5zPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZlN0cmluZyx4Zjg2Y29uZkZyZXF1ZW5jeSx4Zjg2Y29uZlx3XCtOdW1iZXIseGY4NmNvbmZDb25zdGFudAorc3luIGtleXdvcmQgeGY4NmNvbmZPcHRpb24gT3B0aW9uIG5leHRncm91cD14Zjg2Y29uZlN0cmluZyBza2lwd2hpdGUKK3N5biBtYXRjaCB4Zjg2Y29uZk1vZGVMaW5lVmFsdWUgIlwiW15cIl1cK1wiXChcX3NcK1swLTkuXVwrXClcezl9IiBuZXh0Z3JvdXA9eGY4NmNvbmZTeW5jIHNraXB3aGl0ZSBza2lwbmwKKworIiBTZWN0aW9ucyBhbmQgc3Vic2VjdGlvbnMKK2lmIGI6eGY4NmNvbmZfeGZyZWU4Nl92ZXJzaW9uID49IDQKKwlzeW4gcmVnaW9uIHhmODZjb25mU2VjdGlvbiBtYXRjaGdyb3VwPXhmODZjb25mU2VjdGlvbkRlbGltIHN0YXJ0PSJeXHMqU2VjdGlvblxzXCtcIlwoRmlsZXNcfFNlcnZlcltfIF0qRmxhZ3NcfElucHV0W18gXSpEZXZpY2VcfERldmljZVx8VmlkZW9bXyBdKkFkYXB0b3JcfFNlcnZlcltfIF0qTGF5b3V0XHxEUklcfFZlbmRvclx8S2V5Ym9hcmRcfFBvaW50ZXJcKVwiIiBlbmQ9Il5ccypFbmRTZWN0aW9uXD4iIHNraXA9IiMuKiRcfFwiW15cIl0qXCIiIGNvbnRhaW5zPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZk9wdGlvbix4Zjg2Y29uZktleXdvcmQseGY4NmNvbmZTZWN0aW9uRXJyb3IKKwlzeW4gcmVnaW9uIHhmODZjb25mU2VjdGlvbk1vZHVsZSBtYXRjaGdyb3VwPXhmODZjb25mU2VjdGlvbkRlbGltIHN0YXJ0PSJeXHMqU2VjdGlvblxzXCtcIk1vZHVsZVwiIiBlbmQ9Il5ccypFbmRTZWN0aW9uXD4iIHNraXA9IiMuKiRcfFwiW15cIl0qXCIiIGNvbnRhaW5zPXhmODZjb25mU3Vic2VjdGlvbkFueSx4Zjg2Y29uZkNvbW1lbnQseGY4NmNvbmZPcHRpb24seGY4NmNvbmZLZXl3b3JkCisJc3luIHJlZ2lvbiB4Zjg2Y29uZlNlY3Rpb25Nb25pdG9yIG1hdGNoZ3JvdXA9eGY4NmNvbmZTZWN0aW9uRGVsaW0gc3RhcnQ9Il5ccypTZWN0aW9uXHNcK1wiTW9uaXRvclwiIiBlbmQ9Il5ccypFbmRTZWN0aW9uXD4iIHNraXA9IiMuKiRcfFwiW15cIl0qXCIiIGNvbnRhaW5zPXhmODZjb25mU3Vic2VjdGlvbk1vZGUseGY4NmNvbmZNb2RlTGluZSx4Zjg2Y29uZkNvbW1lbnQseGY4NmNvbmZPcHRpb24seGY4NmNvbmZLZXl3b3JkCisJc3luIHJlZ2lvbiB4Zjg2Y29uZlNlY3Rpb25Nb2RlcyBtYXRjaGdyb3VwPXhmODZjb25mU2VjdGlvbkRlbGltIHN0YXJ0PSJeXHMqU2VjdGlvblxzXCtcIk1vZGVzXCIiIGVuZD0iXlxzKkVuZFNlY3Rpb25cPiIgc2tpcD0iIy4qJFx8XCJbXlwiXSpcIiIgY29udGFpbnM9eGY4NmNvbmZTdWJzZWN0aW9uTW9kZSx4Zjg2Y29uZk1vZGVMaW5lLHhmODZjb25mQ29tbWVudAorCXN5biByZWdpb24geGY4NmNvbmZTZWN0aW9uU2NyZWVuIG1hdGNoZ3JvdXA9eGY4NmNvbmZTZWN0aW9uRGVsaW0gc3RhcnQ9Il5ccypTZWN0aW9uXHNcK1wiU2NyZWVuXCIiIGVuZD0iXlxzKkVuZFNlY3Rpb25cPiIgc2tpcD0iIy4qJFx8XCJbXlwiXSpcIiIgY29udGFpbnM9eGY4NmNvbmZTdWJzZWN0aW9uRGlzcGxheSx4Zjg2Y29uZkNvbW1lbnQseGY4NmNvbmZPcHRpb24seGY4NmNvbmZLZXl3b3JkCisJc3luIHJlZ2lvbiB4Zjg2Y29uZlN1YlNlY3Rpb25BbnkgbWF0Y2hncm91cD14Zjg2Y29uZlNlY3Rpb25EZWxpbSBzdGFydD0iXlxzKlN1YlNlY3Rpb25cc1wrXCJbXlwiXVwrXCIiIGVuZD0iXlxzKkVuZFN1YlNlY3Rpb25cPiIgc2tpcD0iIy4qJFx8XCJbXlwiXSpcIiIgY29udGFpbnM9eGY4NmNvbmZDb21tZW50LHhmODZjb25mT3B0aW9uLHhmODZjb25mS2V5d29yZCxAeGY4NmNvbmZTZWN0aW9uRXJyb3JzCisJc3luIHJlZ2lvbiB4Zjg2Y29uZlN1YlNlY3Rpb25Nb2RlIG1hdGNoZ3JvdXA9eGY4NmNvbmZTZWN0aW9uRGVsaW0gc3RhcnQ9Il5ccypNb2RlXHNcK1wiW15cIl1cK1wiIiBlbmQ9Il5ccypFbmRNb2RlXD4iIHNraXA9IiMuKiRcfFwiW15cIl0qXCIiIGNvbnRhaW5zPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZktleXdvcmQsQHhmODZjb25mU2VjdGlvbkVycm9ycworCXN5biByZWdpb24geGY4NmNvbmZTdWJTZWN0aW9uRGlzcGxheSBtYXRjaGdyb3VwPXhmODZjb25mU2VjdGlvbkRlbGltIHN0YXJ0PSJeXHMqU3ViU2VjdGlvblxzXCtcIkRpc3BsYXlcIiIgZW5kPSJeXHMqRW5kU3ViU2VjdGlvblw+IiBza2lwPSIjLiokXHxcIlteXCJdKlwiIiBjb250YWlucz14Zjg2Y29uZkNvbW1lbnQseGY4NmNvbmZPcHRpb24seGY4NmNvbmZLZXl3b3JkLEB4Zjg2Y29uZlNlY3Rpb25FcnJvcnMKK2Vsc2UKKwlzeW4gcmVnaW9uIHhmODZjb25mU2VjdGlvbiBtYXRjaGdyb3VwPXhmODZjb25mU2VjdGlvbkRlbGltIHN0YXJ0PSJeXHMqU2VjdGlvblxzXCtcIlwoRmlsZXNcfFNlcnZlcltfIF0qRmxhZ3NcfERldmljZVx8S2V5Ym9hcmRcfFBvaW50ZXJcKVwiIiBlbmQ9Il5ccypFbmRTZWN0aW9uXD4iIHNraXA9IiMuKiRcfFwiW15cIl0qXCIiIGNvbnRhaW5zPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZk9wdGlvbk5hbWUseGY4NmNvbmZPcHRpb24seGY4NmNvbmZLZXl3b3JkCisJc3luIHJlZ2lvbiB4Zjg2Y29uZlNlY3Rpb25NWCBtYXRjaGdyb3VwPXhmODZjb25mU2VjdGlvbkRlbGltIHN0YXJ0PSJeXHMqU2VjdGlvblxzXCtcIlwoTW9kdWxlXHxYaW5wdXRcKVwiIiBlbmQ9Il5ccypFbmRTZWN0aW9uXD4iIHNraXA9IiMuKiRcfFwiW15cIl0qXCIiIGNvbnRhaW5zPXhmODZjb25mU3Vic2VjdGlvbkFueSx4Zjg2Y29uZkNvbW1lbnQseGY4NmNvbmZPcHRpb25OYW1lLHhmODZjb25mT3B0aW9uLHhmODZjb25mS2V5d29yZAorCXN5biByZWdpb24geGY4NmNvbmZTZWN0aW9uTW9uaXRvciBtYXRjaGdyb3VwPXhmODZjb25mU2VjdGlvbkRlbGltIHN0YXJ0PSJeXHMqU2VjdGlvblxzXCtcIk1vbml0b3JcIiIgZW5kPSJeXHMqRW5kU2VjdGlvblw+IiBza2lwPSIjLiokXHxcIlteXCJdKlwiIiBjb250YWlucz14Zjg2Y29uZlN1YnNlY3Rpb25Nb2RlLHhmODZjb25mTW9kZUxpbmUseGY4NmNvbmZDb21tZW50LHhmODZjb25mT3B0aW9uTmFtZSx4Zjg2Y29uZk9wdGlvbix4Zjg2Y29uZktleXdvcmQKKwlzeW4gcmVnaW9uIHhmODZjb25mU2VjdGlvblNjcmVlbiBtYXRjaGdyb3VwPXhmODZjb25mU2VjdGlvbkRlbGltIHN0YXJ0PSJeXHMqU2VjdGlvblxzXCtcIlNjcmVlblwiIiBlbmQ9Il5ccypFbmRTZWN0aW9uXD4iIHNraXA9IiMuKiRcfFwiW15cIl0qXCIiIGNvbnRhaW5zPXhmODZjb25mU3Vic2VjdGlvbkRpc3BsYXkseGY4NmNvbmZDb21tZW50LHhmODZjb25mT3B0aW9uTmFtZSx4Zjg2Y29uZk9wdGlvbix4Zjg2Y29uZktleXdvcmQKKwlzeW4gcmVnaW9uIHhmODZjb25mU3ViU2VjdGlvbkFueSBtYXRjaGdyb3VwPXhmODZjb25mU2VjdGlvbkRlbGltIHN0YXJ0PSJeXHMqU3ViU2VjdGlvblxzXCtcIlteXCJdXCtcIiIgZW5kPSJeXHMqRW5kU3ViU2VjdGlvblw+IiBza2lwPSIjLiokXHxcIlteXCJdKlwiIiBjb250YWlucz14Zjg2Y29uZkNvbW1lbnQseGY4NmNvbmZPcHRpb25OYW1lLHhmODZjb25mT3B0aW9uLHhmODZjb25mS2V5d29yZCxAeGY4NmNvbmZTZWN0aW9uRXJyb3JzCisJc3luIHJlZ2lvbiB4Zjg2Y29uZlN1YlNlY3Rpb25Nb2RlIG1hdGNoZ3JvdXA9eGY4NmNvbmZTZWN0aW9uRGVsaW0gc3RhcnQ9Il5ccypNb2RlXHNcK1wiW15cIl1cK1wiIiBlbmQ9Il5ccypFbmRNb2RlXD4iIHNraXA9IiMuKiRcfFwiW15cIl0qXCIiIGNvbnRhaW5zPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZk9wdGlvbk5hbWUseGY4NmNvbmZPcHRpb24seGY4NmNvbmZLZXl3b3JkLEB4Zjg2Y29uZlNlY3Rpb25FcnJvcnMKKwlzeW4gcmVnaW9uIHhmODZjb25mU3ViU2VjdGlvbkRpc3BsYXkgbWF0Y2hncm91cD14Zjg2Y29uZlNlY3Rpb25EZWxpbSBzdGFydD0iXlxzKlN1YlNlY3Rpb25cc1wrXCJEaXNwbGF5XCIiIGVuZD0iXlxzKkVuZFN1YlNlY3Rpb25cPiIgc2tpcD0iIy4qJFx8XCJbXlwiXSpcIiIgY29udGFpbnM9eGY4NmNvbmZDb21tZW50LHhmODZjb25mT3B0aW9uTmFtZSx4Zjg2Y29uZk9wdGlvbix4Zjg2Y29uZktleXdvcmQsQHhmODZjb25mU2VjdGlvbkVycm9ycworZW5kaWYKKworIiBPcHRpb25zCitpZiBiOnhmODZjb25mX3hmcmVlODZfdmVyc2lvbiA+PSA0CisJY29tbWFuZCAtbmFyZ3M9KyBYZjg2Y29uZmRlY2xvcHQgc3luIGtleXdvcmQgeGY4NmNvbmZPcHRpb25OYW1lIDxhcmdzPiBjb250YWluZWQKK2Vsc2UKKwljb21tYW5kIC1uYXJncz0rIFhmODZjb25mZGVjbG9wdCBzeW4ga2V5d29yZCB4Zjg2Y29uZk9wdGlvbk5hbWUgPGFyZ3M+IGNvbnRhaW5lZCBuZXh0Z3JvdXA9eGY4NmNvbmZWYWx1ZSx4Zjg2Y29uZkNvbW1lbnQgc2tpcHdoaXRlCitlbmRpZgorCitYZjg2Y29uZmRlY2xvcHQgMThiaXRCdXMgQUdQRmFzdFdyaXRlIEFHUE1vZGUgQWNjZWwgQWxsb3dDbG9zZWRvd25HcmFicyBBbGxvd0RlYWN0aXZhdGVHcmFicworWGY4NmNvbmZkZWNsb3B0IEFsbG93TW91c2VPcGVuRmFpbCBBbGxvd05vbkxvY2FsTW9kSW5EZXYgQWxsb3dOb25Mb2NhbFh2aWR0dW5lIEFsd2F5c0NvcmUKK1hmODZjb25mZGVjbG9wdCBBbmdsZU9mZnNldCBBdXRvUmVwZWF0IEJhdWRSYXRlIEJlYW1UaW1lb3V0IEJlZXAgQmxhbmtUaW1lIEJsb2NrV3JpdGUgQm90dG9tWAorWGY4NmNvbmZkZWNsb3B0IEJvdHRvbVkgQnV0dG9uTnVtYmVyIEJ1dHRvblRocmVzaG9sZCBCdXR0b25zIEJ5dGVTd2FwIENhY2hlTGluZXMgQ2hvcmRNaWRkbGUKK1hmODZjb25mZGVjbG9wdCBDbGVhckRUUiBDbGVhckRUUyBDbGlja01vZGUgQ2xvbmVEaXNwbGF5IENsb25lSFN5bmMgQ2xvbmVNb2RlIENsb25lVlJlZnJlc2gKK1hmODZjb25mZGVjbG9wdCBDb2xvcktleSBDb21wb3NpdGUgQ29tcG9zaXRlU3luYyBDb3JlS2V5Ym9hcmQgQ29yZVBvaW50ZXIgQ3J0Mk1lbW9yeSBDcnRTY3JlZW4KK1hmODZjb25mZGVjbG9wdCBDcnRjTnVtYmVyIEN5YmVyU2hhZG93IEN5YmVyU3RyZXRjaCBEREMgRERDTW9kZSBETUFGb3JYdiBEUE1TIERhYzZCaXQgRGFjU3BlZWQKK1hmODZjb25mZGVjbG9wdCBEYXRhQml0cyBEZWJ1ZyBEZWJ1Z0xldmVsIERlZmF1bHRTZXJ2ZXJMYXlvdXQgRGVsdGFYIERlbHRhWSBEZXZpY2UgRGV2aWNlTmFtZQorWGY4NmNvbmZkZWNsb3B0IERpc2FibGVNb2RJbkRldiBEaXNhYmxlVmlkTW9kZUV4dGVuc2lvbiBEaXNwbGF5IERpc3BsYXkxNDAwIERvbnRWVFN3aXRjaAorWGY4NmNvbmZkZWNsb3B0IERvbnRaYXAgRG9udFpvb20gRG91YmxlU2NhbiBEb3plTW9kZSBEb3plU2NhbiBEb3plVGltZSBEcmFnTG9ja0J1dHRvbnMKK1hmODZjb25mZGVjbG9wdCBEdWFsQ291bnQgRHVhbFJlZnJlc2ggRWFybHlSYXNQcmVjaGFyZ2UgRW11bGF0ZTNCdXR0b25zIEVtdWxhdGUzVGltZW91dAorWGY4NmNvbmZkZWNsb3B0IEVtdWxhdGVXaGVlbCBFbXVsYXRlV2hlZWxCdXR0b24gRW11bGF0ZVdoZWVsSW5lcnRpYSBFbmFibGVQYWdlRmxpcCBFbnRlckNvdW50CitYZjg2Y29uZmRlY2xvcHQgRXN0aW1hdGVTaXplc0FnZ3Jlc3NpdmVseSBFeHRlcm5EaXNwIEZQQ2xvY2sxNiBGUENsb2NrMjQgRlBDbG9jazMyCitYZjg2Y29uZmRlY2xvcHQgRlBDbG9jazggRlBEaXRoZXIgRmFzdERyYW0gRmlmb0FnZ3Jlc2l2ZSBGaWZvQ29uc2VydmF0aXZlIEZpZm9Nb2RlcmF0ZQorWGY4NmNvbmZkZWNsb3B0IEZpcmVHTDMwMDAgRml4UGFuZWxTaXplIEZsYXRQYW5lbCBGbGlwWFkgRmxvd0NvbnRyb2wgRm9yY2VDUlQxIEZvcmNlQ1JUMlR5cGUKK1hmODZjb25mZGVjbG9wdCBGb3JjZUxlZ2FjeUNSVCBGb3JjZVBDSU1vZGUgRnBtVlJBTSBGcmFtZUJ1ZmZlcldDIEZ1bGxNTUlPIEdhbW1hQnJpZ2h0bmVzcworWGY4NmNvbmZkZWNsb3B0IEhXQ2xvY2tzIEhXQ3Vyc29yIEhhbmRsZVNwZWNpYWxLZXlzIEhpc3RvcnlTaXplIEludGVybGFjZSBJbnRlcmxhY2VkIEludGVybkRpc3AKK1hmODZjb25mZGVjbG9wdCBJbnZYIEludlkgSW52ZXJ0WCBJbnZlcnRZIEtlZXBTaGFwZSBMQ0RDbG9jayBMYXRlUmFzUHJlY2hhcmdlIExjZENlbnRlcgorWGY4NmNvbmZkZWNsb3B0IExlZnRBbHQgTGluZWFyIE1HQVNEUkFNIE1NSU8gTU1JT0NhY2hlIE1UVFIgTWF4WCBNYXhZIE1heGltdW1YUG9zaXRpb24KK1hmODZjb25mZGVjbG9wdCBNYXhpbXVtWVBvc2l0aW9uIE1pblggTWluWSBNaW5pbXVtWFBvc2l0aW9uIE1pbmltdW1ZUG9zaXRpb24gTm9BY2NlbAorWGY4NmNvbmZkZWNsb3B0IE5vQWxsb3dNb3VzZU9wZW5GYWlsIE5vQWxsb3dOb25Mb2NhbE1vZEluRGV2IE5vQWxsb3dOb25Mb2NhbFh2aWR0dW5lCitYZjg2Y29uZmRlY2xvcHQgTm9CbG9ja1dyaXRlIE5vQ29tcG9zaXRlU3luYyBOb0NvbXByZXNzaW9uIE5vQ3J0U2NyZWVuIE5vQ3liZXJTaGFkb3cgTm9EQ0MKK1hmODZjb25mZGVjbG9wdCBOb0REQyBOb0RhYzZCaXQgTm9EZWJ1ZyBOb0Rpc2FibGVNb2RJbkRldiBOb0Rpc2FibGVWaWRNb2RlRXh0ZW5zaW9uIE5vRG9udFphcAorWGY4NmNvbmZkZWNsb3B0IE5vRG9udFpvb20gTm9GaXJlR0wzMDAwIE5vRml4UGFuZWxTaXplIE5vRnBtVlJBTSBOb0ZyYW1lQnVmZmVyV0MgTm9IV0Nsb2NrcworWGY4NmNvbmZkZWNsb3B0IE5vSFdDdXJzb3IgTm9IYWwgTm9MY2RDZW50ZXIgTm9MaW5lYXIgTm9NR0FTRFJBTSBOb01NSU8gTm9NTUlPQ2FjaGUgTm9NVFRSCitYZjg2Y29uZmRlY2xvcHQgTm9PdmVyQ2xvY2tNZW0gTm9PdmVybGF5IE5vUEM5OCBOb1BNIE5vUGNpQnVyc3QgTm9QY2lSZXRyeSBOb1Byb2JlQ2xvY2sKK1hmODZjb25mZGVjbG9wdCBOb1NUTiBOb1NXQ3Vyc29yIE5vU2hhZG93RmIgTm9TaG93Q2FjaGUgTm9TbG93RURPRFJBTSBOb1N0cmV0Y2ggTm9TdXNwZW5kSGFjaworWGY4NmNvbmZkZWNsb3B0IE5vVGV4dHVyZWRWaWRlbyBOb1RyYXBTaWduYWxzIE5vVXNlRkJEZXYgTm9Vc2VNb2RlbGluZSBOb1VzZVZjbGsxIE5vVlRTeXNSZXEKK1hmODZjb25mZGVjbG9wdCBOb1hWaWRlbyBOdkFHUCBPU01JbWFnZUJ1ZmZlcnMgT2ZmVGltZSBPcmlnaW4gT3ZlckNsb2NrTWVtIE92ZXJsYXkKK1hmODZjb25mZGVjbG9wdCBQQzk4IFBDSUJ1cnN0IFBNIFBXTUFjdGl2ZSBQV01TbGVlcCBQYW5lbERlbGF5Q29tcGVuc2F0aW9uIFBhbmVsSGVpZ2h0CitYZjg2Y29uZmRlY2xvcHQgUGFuZWxPZmYgUGFuZWxXaWR0aCBQYXJpdHkgUGNpQnVyc3QgUGNpUmV0cnkgUGl4bWFwIFBvcnQgUHJlc3NEdXIgUHJlc3NQaXRjaAorWGY4NmNvbmZkZWNsb3B0IFByZXNzVm9sIFByb2JlQ2xvY2tzIFByb2dyYW1GUFJlZ3MgUHJvdG9jb2wgUkdCQml0cyBSZWxlYXNlRHVyIFJlbGVhc2VQaXRjaAorWGY4NmNvbmZkZWNsb3B0IFJlcG9ydGluZ01vZGUgUmVzb2x1dGlvbiBSaWdodEFsdCBSaWdodEN0bCBSb3RhdGUgU1ROIFNXQ3Vyc29yIFNhbXBsZVJhdGUKK1hmODZjb25mZGVjbG9wdCBTY3JlZW5OdW1iZXIgU2Nyb2xsTG9jayBTZW5kQ29yZUV2ZW50cyBTZW5kRHJhZ0V2ZW50cyBTZXJpYWwgU2VydmVyTnVtTG9jaworWGY4NmNvbmZkZWNsb3B0IFNldExjZENsayBTZXRNQ2xrIFNldFJlZkNsayBTaGFkb3dGYiBTaGFkb3dTdGF0dXMgU2hvd0NhY2hlIFNsZWVwTW9kZQorWGY4NmNvbmZkZWNsb3B0IFNsZWVwU2NhbiBTbGVlcFRpbWUgU2xvd0RyYW0gU2xvd0VET0RSQU0gU3RhbmRieVRpbWUgU3RvcEJpdHMgU3RyZXRjaAorWGY4NmNvbmZkZWNsb3B0IFN1c3BlbmRIYWNrIFN1c3BlbmRUaW1lIFN3YXBYWSBTeW5jT25HcmVlbiBUViBUVk91dHB1dCBUVk92ZXJzY2FuIFRWU3RhbmRhcmQKK1hmODZjb25mZGVjbG9wdCBUVlhQb3NPZmZzZXQgVFZZUG9zT2Zmc2V0IFRleHR1cmVkVmlkZW8gVGhyZXNob2xkIFRpbHQgVG9wWCBUb3BZIFRvdWNoVGltZQorWGY4NmNvbmZkZWNsb3B0IFRyYXBTaWduYWxzIFR5cGUgVVNCIFVzZUJJT1MgVXNlRkIgVXNlRkJEZXYgVXNlRmxhdFBhbmVsIFVzZU1vZGVsaW5lCitYZjg2Y29uZmRlY2xvcHQgVXNlUk9NRGF0YSBVc2VWY2xrMSBWVEluaXQgVlRTeXNSZXEgVlRpbWUgVmlkZW9LZXkgVm1pbiBYQXhpc01hcHBpbmcKK1hmODZjb25mZGVjbG9wdCBYTGVkcyBYVmlkZW8gWGFhTm9DUFVUb1NjcmVlbkNvbG9yRXhwYW5kRmlsbCBYYWFOb0NvbG9yOHg4UGF0dGVybkZpbGxSZWN0CitYZjg2Y29uZmRlY2xvcHQgWGFhTm9Db2xvcjh4OFBhdHRlcm5GaWxsVHJhcCBYYWFOb0Rhc2hlZEJyZXNlbmhhbUxpbmUgWGFhTm9EYXNoZWRUd29Qb2ludExpbmUKK1hmODZjb25mZGVjbG9wdCBYYWFOb0ltYWdlV3JpdGVSZWN0IFhhYU5vTW9ubzh4OFBhdHRlcm5GaWxsUmVjdCBYYWFOb01vbm84eDhQYXR0ZXJuRmlsbFRyYXAKK1hmODZjb25mZGVjbG9wdCBYYWFOb09mZnNjcmVlblBpeG1hcHMgWGFhTm9QaXhtYXBDYWNoZSBYYWFOb1NjYW5saW5lQ1BVVG9TY3JlZW5Db2xvckV4cGFuZEZpbGwKK1hmODZjb25mZGVjbG9wdCBYYWFOb1NjYW5saW5lSW1hZ2VXcml0ZVJlY3QgWGFhTm9TY3JlZW5Ub1NjcmVlbkNvbG9yRXhwYW5kRmlsbAorWGY4NmNvbmZkZWNsb3B0IFhhYU5vU2NyZWVuVG9TY3JlZW5Db3B5IFhhYU5vU29saWRCcmVzZW5oYW1MaW5lIFhhYU5vU29saWRGaWxsUmVjdAorWGY4NmNvbmZkZWNsb3B0IFhhYU5vU29saWRGaWxsVHJhcCBYYWFOb1NvbGlkSG9yVmVydExpbmUgWGFhTm9Tb2xpZFR3b1BvaW50TGluZSBYaW5lcmFtYQorWGY4NmNvbmZkZWNsb3B0IFhrYkNvbXBhdCBYa2JEaXNhYmxlIFhrYkdlb21ldHJ5IFhrYktleWNvZGVzIFhrYktleW1hcCBYa2JMYXlvdXQgWGtiTW9kZWwKK1hmODZjb25mZGVjbG9wdCBYa2JPcHRpb25zIFhrYlJ1bGVzIFhrYlN5bWJvbHMgWGtiVHlwZXMgWGtiVmFyaWFudCBYdkJza2V3IFh2SHN5bmMgWHZPbkNSVDIKK1hmODZjb25mZGVjbG9wdCBYdlJza2V3IFh2VnN5bmMgWUF4aXNNYXBwaW5nIFpBeGlzTWFwcGluZyBab29tT25MQ0QKKworZGVsY29tbWFuZCBYZjg2Y29uZmRlY2xvcHQKKworIiBLZXl3b3Jkcworc3luIGtleXdvcmQgeGY4NmNvbmZLZXl3b3JkIERldmljZSBEcml2ZXIgRm9udFBhdGggR3JvdXAgSWRlbnRpZmllciBMb2FkIE1vZGVsTmFtZSBNb2R1bGVQYXRoIE1vbml0b3IgUkdCUGF0aCBWZW5kb3JOYW1lIFZpZGVvQWRhcHRvciBWaXN1YWwgbmV4dGdyb3VwPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZlN0cmluZyBza2lwd2hpdGUKK3N5biBrZXl3b3JkIHhmODZjb25mS2V5d29yZCBCaW9zQmFzZSBCbGFjayBCb2FyZE5hbWUgQnVzSUQgQ2hpcElEIENoaXBSZXYgQ2hpcHNldCBuZXh0Z3JvdXA9eGY4NmNvbmZDb21tZW50LHhmODZjb25mVmFsdWUKK3N5biBrZXl3b3JkIHhmODZjb25mS2V5d29yZCBDbG9ja0NoaXAgQ2xvY2tzIERhY1NwZWVkIERlZmF1bHREZXB0aCBEZWZhdWx0RmJCcHAgbmV4dGdyb3VwPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZlZhbHVlCitzeW4ga2V5d29yZCB4Zjg2Y29uZktleXdvcmQgRGVmYXVsdENvbG9yRGVwdGggbmV4dGdyb3VwPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZlZhbHVlCitzeW4ga2V5d29yZCB4Zjg2Y29uZktleXdvcmQgRGVwdGggRGlzcGxheVNpemUgRG90Q2xvY2sgRmJCcHAgRmxhZ3MgR2FtbWEgSG9yaXpTeW5jIG5leHRncm91cD14Zjg2Y29uZkNvbW1lbnQseGY4NmNvbmZWYWx1ZQorc3luIGtleXdvcmQgeGY4NmNvbmZLZXl3b3JkIEhza2V3IEhUaW1pbmdzIElucHV0RGV2aWNlIElPQmFzZSBNZW1CYXNlIE1vZGUgbmV4dGdyb3VwPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZlZhbHVlCitzeW4ga2V5d29yZCB4Zjg2Y29uZktleXdvcmQgTW9kZXMgUmFtZGFjIFNjcmVlbiBUZXh0Q2xvY2tGcmVxIFVzZU1vZGVzIFZlbmRvck5hbWUgbmV4dGdyb3VwPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZlZhbHVlCitzeW4ga2V5d29yZCB4Zjg2Y29uZktleXdvcmQgVmVydFJlZnJlc2ggVmlkZW9SYW0gVmlld1BvcnQgVmlydHVhbCBWU2NhbiBWVGltaW5ncyBuZXh0Z3JvdXA9eGY4NmNvbmZDb21tZW50LHhmODZjb25mVmFsdWUKK3N5biBrZXl3b3JkIHhmODZjb25mS2V5d29yZCBXZWlnaHQgV2hpdGUgbmV4dGdyb3VwPXhmODZjb25mQ29tbWVudCx4Zjg2Y29uZlZhbHVlCitzeW4ga2V5d29yZCB4Zjg2Y29uZk1vZGVMaW5lIE1vZGVMaW5lIG5leHRncm91cD14Zjg2Y29uZkNvbW1lbnQseGY4NmNvbmZNb2RlTGluZVZhbHVlIHNraXB3aGl0ZSBza2lwbmwKKworIiBDb25zdGFudHMKK2lmIGI6eGY4NmNvbmZfeGZyZWU4Nl92ZXJzaW9uID49IDQKKwlzeW4ga2V5d29yZCB4Zjg2Y29uZkNvbnN0YW50IHRydWUgZmFsc2Ugb24gb2ZmIHllcyBubyBvbWl0IGNvbnRhaW5lZAorZWxzZQorCXN5biBrZXl3b3JkIHhmODZjb25mQ29uc3RhbnQgTWV0YSBDb21wb3NlIENvbnRyb2wKK2VuZGlmCitzeW4ga2V5d29yZCB4Zjg2Y29uZkNvbnN0YW50IFN0YXRpY0dyYXkgR3JheVNjYWxlIFN0YXRpY0NvbG9yIFBzZXVkb0NvbG9yIFRydWVDb2xvciBEaXJlY3RDb2xvciBjb250YWluZWQKK3N5biBrZXl3b3JkIHhmODZjb25mQ29uc3RhbnQgQWJzb2x1dGUgUmlnaHRPZiBMZWZ0T2YgQWJvdmUgQmVsb3cgUmVsYXRpdmUgU3RhdGljR3JheSBHcmF5U2NhbGUgU3RhdGljQ29sb3IgUHNldWRvQ29sb3IgVHJ1ZUNvbG9yIERpcmVjdENvbG9yIGNvbnRhaW5lZAorc3luIG1hdGNoIHhmODZjb25mU3luYyAiXChcc1wrWystXVtDSFZdXypTeW5jXClcKyIgY29udGFpbmVkCisKKyIgU3luY2hyb25pemF0aW9uCitpZiBiOnhmODZjb25mX3hmcmVlODZfdmVyc2lvbiA+PSA0CisJc3luIHN5bmMgbWF0Y2ggeGY4NmNvbmZTeW5jU2VjdGlvbiBncm91cGhlcmUgeGY4NmNvbmZTZWN0aW9uICJeXHMqU2VjdGlvblxzXCtcIlwoRmlsZXNcfFNlcnZlcltfIF0qRmxhZ3NcfElucHV0W18gXSpEZXZpY2VcfERldmljZVx8VmlkZW9bXyBdKkFkYXB0b3JcfFNlcnZlcltfIF0qTGF5b3V0XHxEUklcfFZlbmRvclx8S2V5Ym9hcmRcfFBvaW50ZXJcKVwiIgorCXN5biBzeW5jIG1hdGNoIHhmODZjb25mU3luY1NlY3Rpb25Nb2R1bGUgZ3JvdXBoZXJlIHhmODZjb25mU2VjdGlvbk1vZHVsZSAiXlxzKlNlY3Rpb25cc1wrXCJNb2R1bGVcIiIKKwlzeW4gc3luYyBtYXRjaCB4Zjg2Y29uZlN5bmNTZWN0aW9uTW9kZXMgZ3JvdXB0aGVyZSB4Zjg2Y29uZlNlY3Rpb25Nb2RlcyAiXlxzKlNlY3Rpb25cc1wrXCJNb2Rlc1wiIgorZWxzZQorCXN5biBzeW5jIG1hdGNoIHhmODZjb25mU3luY1NlY3Rpb24gZ3JvdXBoZXJlIHhmODZjb25mU2VjdGlvbiAiXlxzKlNlY3Rpb25cc1wrXCJcKEZpbGVzXHxTZXJ2ZXJbXyBdKkZsYWdzXHxEZXZpY2VcfEtleWJvYXJkXHxQb2ludGVyXClcIiIKKwlzeW4gc3luYyBtYXRjaCB4Zjg2Y29uZlN5bmNTZWN0aW9uTVggZ3JvdXBoZXJlIHhmODZjb25mU2VjdGlvbk1YICJeXHMqU2VjdGlvblxzXCtcIlwoTW9kdWxlXHxYaW5wdXRcKVwiIgorZW5kaWYKK3N5biBzeW5jIG1hdGNoIHhmODZjb25mU3luY1NlY3Rpb25Nb25pdG9yIGdyb3VwdGhlcmUgeGY4NmNvbmZTZWN0aW9uTW9uaXRvciAiXlxzKlNlY3Rpb25cc1wrXCJNb25pdG9yXCIiCitzeW4gc3luYyBtYXRjaCB4Zjg2Y29uZlN5bmNTZWN0aW9uU2NyZWVuIGdyb3VwdGhlcmUgeGY4NmNvbmZTZWN0aW9uU2NyZWVuICJeXHMqU2VjdGlvblxzXCtcIlNjcmVlblwiIgorc3luIHN5bmMgbWF0Y2ggeGY4NmNvbmZTeW5jRW5kU2VjdGlvbiBncm91cHRoZXJlIE5PTkUgIl5ccypFbmRfKlNlY3Rpb25ccyokIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcKK2hpIGRlZiBsaW5rIHhmODZjb25mQ29tbWVudCBDb21tZW50CitoaSBkZWYgbGluayB4Zjg2Y29uZlRvZG8gVG9kbworaGkgZGVmIGxpbmsgeGY4NmNvbmZTZWN0aW9uRGVsaW0gU3RhdGVtZW50CitoaSBkZWYgbGluayB4Zjg2Y29uZk9wdGlvbk5hbWUgSWRlbnRpZmllcgorCitoaSBkZWYgbGluayB4Zjg2Y29uZlNlY3Rpb25FcnJvciB4Zjg2Y29uZkVycm9yCitoaSBkZWYgbGluayB4Zjg2Y29uZlN1YlNlY3Rpb25FcnJvciB4Zjg2Y29uZkVycm9yCitoaSBkZWYgbGluayB4Zjg2Y29uZk1vZGVTdWJTZWN0aW9uRXJyb3IgeGY4NmNvbmZFcnJvcgoraGkgZGVmIGxpbmsgeGY4NmNvbmZPY3RhbE51bWJlckVycm9yIHhmODZjb25mRXJyb3IKK2hpIGRlZiBsaW5rIHhmODZjb25mRXJyb3IgRXJyb3IKKworaGkgZGVmIGxpbmsgeGY4NmNvbmZPcHRpb24geGY4NmNvbmZLZXl3b3JkCitoaSBkZWYgbGluayB4Zjg2Y29uZk1vZGVMaW5lIHhmODZjb25mS2V5d29yZAoraGkgZGVmIGxpbmsgeGY4NmNvbmZLZXl3b3JkIFR5cGUKKworaGkgZGVmIGxpbmsgeGY4NmNvbmZEZWNpbWFsTnVtYmVyIHhmODZjb25mTnVtYmVyCitoaSBkZWYgbGluayB4Zjg2Y29uZk9jdGFsTnVtYmVyIHhmODZjb25mTnVtYmVyCitoaSBkZWYgbGluayB4Zjg2Y29uZkhleGFkZWNpbWFsTnVtYmVyIHhmODZjb25mTnVtYmVyCitoaSBkZWYgbGluayB4Zjg2Y29uZkZyZXF1ZW5jeSB4Zjg2Y29uZk51bWJlcgoraGkgZGVmIGxpbmsgeGY4NmNvbmZNb2RlTGluZVZhbHVlIENvbnN0YW50CitoaSBkZWYgbGluayB4Zjg2Y29uZk51bWJlciBDb25zdGFudAorCitoaSBkZWYgbGluayB4Zjg2Y29uZlN5bmMgeGY4NmNvbmZDb25zdGFudAoraGkgZGVmIGxpbmsgeGY4NmNvbmZDb25zdGFudCBTcGVjaWFsCitoaSBkZWYgbGluayB4Zjg2Y29uZlNwZWNpYWxDaGFyIFNwZWNpYWwKK2hpIGRlZiBsaW5rIHhmODZjb25mU3RyaW5nIFN0cmluZworCitoaSBkZWYgbGluayB4Zjg2Y29uZlZhbHVlIENvbnN0YW50CisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInhmODZjb25mIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgveGh0bWwudmltIGIvcnVudGltZS9zeW50YXgveGh0bWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNmVhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC94aHRtbC52aW0KQEAgLTAsMCArMSwxMSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVhIVE1MCisiIE1haW50YWluZXI6CW5vb25lCisiIExhc3QgQ2hhbmdlOgkyMDAzIEZlYiAwNAorCisiIExvYWQgdGhlIEhUTUwgc3ludGF4IGZvciBub3cuCitydW50aW1lISBzeW50YXgvaHRtbC52aW0KKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAieGh0bWwiCisKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC94a2IudmltIGIvcnVudGltZS9zeW50YXgveGtiLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjliZmQwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgveGtiLnZpbQpAQCAtMCwwICsxLDkxIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBUaGlzIGlzIGEgR0VORVJBVEVEIEZJTEUuIFBsZWFzZSBhbHdheXMgcmVmZXIgdG8gc291cmNlIGZpbGUgYXQgdGhlIFVSSSBiZWxvdy4KKyIgTGFuZ3VhZ2U6IFhLQiAoWCBLZXlib2FyZCBFeHRlbnNpb24pIGNvbXBvbmVudHMKKyIgTWFpbnRhaW5lcjogRGF2aWQgTmVcdntjfWFzIChZZXRpKSA8eWV0aUBwaHlzaWNzLm11bmkuY3o+CisiIExhc3QgQ2hhbmdlOiAyMDAzLTA0LTEzCisiIFVSTDogaHR0cDovL3RyaWZpYy5hdGguY3gvRnRwL3ZpbS9zeW50YXgveGtiLnZpbQorCisiIFNldHVwCitpZiB2ZXJzaW9uID49IDYwMAorCWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisJCWZpbmlzaAorCWVuZGlmCitlbHNlCisJc3ludGF4IGNsZWFyCitlbmRpZgorCitzeW4gY2FzZSBtYXRjaAorc3luIHN5bmMgbWlubGluZXM9MTAwCisKKyIgQ29tbWVudHMKK3N5biByZWdpb24geGtiQ29tbWVudCBzdGFydD0iLy8iIHNraXA9IlxcJCIgZW5kPSIkIiBrZWVwZW5kIGNvbnRhaW5zPXhrYlRvZG8KK3N5biByZWdpb24geGtiQ29tbWVudCBzdGFydD0iL1wqIiBtYXRjaGdyb3VwPU5PTkUgZW5kPSJcKi8iIGNvbnRhaW5zPXhrYkNvbW1lbnRTdGFydEVycm9yLHhrYlRvZG8KK3N5biBtYXRjaCB4a2JDb21tZW50RXJyb3IgIlwqLyIKK3N5bnRheCBtYXRjaCB4a2JDb21tZW50U3RhcnRFcnJvciAiL1wqIiBjb250YWluZWQKK3N5biBzeW5jIGNjb21tZW50IHhrYkNvbW1lbnQKK3N5biBrZXl3b3JkIHhrYlRvZG8gVE9ETyBGSVhNRSBjb250YWluZWQKKworIiBMaXRlcmFsIHN0cmluZ3MKK3N5biBtYXRjaCB4a2JTcGVjaWFsQ2hhciAiXFxcZFxkXGRcfFxcLiIgY29udGFpbmVkCitzeW4gcmVnaW9uIHhrYlN0cmluZyBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrIGNvbnRhaW5zPXhrYlNwZWNpYWxDaGFyIG9uZWxpbmUKKworIiBDYXRjaCBlcnJvcnMgY2F1c2VkIGJ5IHdyb25nIHBhcmVudGhlc2l6YXRpb24KK3N5biByZWdpb24geGtiUGFyZW4gc3RhcnQ9JygnIGVuZD0nKScgY29udGFpbnM9QUxMQlVULHhrYlBhcmVuRXJyb3IseGtiU3BlY2lhbCx4a2JUb2RvIHRyYW5zcGFyZW50CitzeW4gbWF0Y2ggeGtiUGFyZW5FcnJvciAiKSIKK3N5biByZWdpb24geGtiQnJhY2Ugc3RhcnQ9J3snIGVuZD0nfScgY29udGFpbnM9QUxMQlVULHhrYkJyYWNlRXJyb3IseGtiU3BlY2lhbCx4a2JUb2RvIHRyYW5zcGFyZW50CitzeW4gbWF0Y2ggeGtiQnJhY2VFcnJvciAifSIKK3N5biByZWdpb24geGtiQnJhY2tldCBzdGFydD0nXFsnIGVuZD0nXF0nIGNvbnRhaW5zPUFMTEJVVCx4a2JCcmFja2V0RXJyb3IseGtiU3BlY2lhbCx4a2JUb2RvIHRyYW5zcGFyZW50CitzeW4gbWF0Y2ggeGtiQnJhY2tldEVycm9yICJcXSIKKworIiBQaHlzaWNhbCBrZXlzCitzeW4gbWF0Y2ggeGtiUGh5c2ljYWxLZXkgIjxcd1wrPiIKKworIiBLZXl3b3Jkcworc3luIGtleXdvcmQgeGtiUHJlcHJvYyBhdWdtZW50IGluY2x1ZGUgcmVwbGFjZQorc3luIGtleXdvcmQgeGtiQ29uc3RhbnQgRmFsc2UgVHJ1ZQorc3luIGtleXdvcmQgeGtiTW9kaWYgb3ZlcnJpZGUgcmVwbGFjZQorc3luIGtleXdvcmQgeGtiSWRlbnRpZmllciBhY3Rpb24gYWZmZWN0IGFsaWFzIGFsbG93RXhwbGljaXQgYXBwcm94IGJhc2VDb2xvciBidXR0b24gY2xlYXJMb2NrcyBjb2xvciBjb250cm9scyBjb3JuZXJSYWRpdXMgY291bnQgY3RybHMgZGVzY3JpcHRpb24gZHJpdmVza2JkIGZvbnQgZm9udFNpemUgZ2FwIGdyb3VwIGdyb3VwcyBoZWlnaHQgaW5kaWNhdG9yIGluZGljYXRvckRyaXZlc0tleWJvYXJkIGludGVycHJldCBrZXkga2V5cyBsYWJlbENvbG9yIGxhdGNoVG9Mb2NrIGxhdGNoTW9kcyBsZWZ0IGxldmVsX25hbWUgbWFwIG1heGltdW0gbWluaW11bSBtb2RpZmllcl9tYXAgbW9kaWZpZXJzIG5hbWUgb2ZmQ29sb3Igb25Db2xvciBvdXRsaW5lIHByZXNlcnZlIHByaW9yaXR5IHJlcGVhdCByb3cgc2VjdGlvbiBzZWN0aW9uIHNldE1vZHMgc2hhcGUgc2xhbnQgc29saWQgc3ltYm9scyB0ZXh0IHRvcCB0eXBlIHVzZU1vZE1hcE1vZHMgdmlydHVhbE1vZGlmaWVyIHZpcnR1YWxNb2RzIHZpcnR1YWxfbW9kaWZpZXJzIHdlaWdodCB3aGljaE1vZFN0YXRlIHdpZHRoCitzeW4ga2V5d29yZCB4a2JGdW5jdGlvbiBBbnlPZiBJU09Mb2NrIExhdGNoR3JvdXAgTGF0Y2hNb2RzIExvY2tDb250cm9scyBMb2NrR3JvdXAgTG9ja01vZHMgTG9ja1BvaW50ZXJCdXR0b24gTW92ZVB0ciBOb0FjdGlvbiBQb2ludGVyQnV0dG9uIFNldENvbnRyb2xzIFNldEdyb3VwIFNldE1vZHMgU2V0UHRyRGZsdCBUZXJtaW5hdGUKK3N5biBrZXl3b3JkIHhrYlRNb2RpZiBkZWZhdWx0IGhpZGRlbiBwYXJ0aWFsIHZpcnR1YWwKK3N5biBrZXl3b3JkIHhrYlNlY3QgYWxwaGFudW1lcmljX2tleXMgYWx0ZXJuYXRlX2dyb3VwIGZ1bmN0aW9uX2tleXMga2V5cGFkX2tleXMgbW9kaWZpZXJfa2V5cyB4a2JfY29tcGF0aWJpbGl0eSB4a2JfZ2VvbWV0cnkgeGtiX2tleWNvZGVzIHhrYl9rZXltYXAgeGtiX3NlbWFudGljcyB4a2Jfc3ltYm9scyB4a2JfdHlwZXMKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nCitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfeGtiX3N5bnRheF9pbml0cyIpCisJaWYgdmVyc2lvbiA8IDUwOAorCQlsZXQgZGlkX3hrYl9zeW50YXhfaW5pdHMgPSAxCisJCWNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisJZWxzZQorCQljb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKwllbmRpZgorCisJSGlMaW5rIHhrYk1vZGlmIHhrYlByZXByb2MKKwlIaUxpbmsgeGtiVE1vZGlmIHhrYlByZXByb2MKKwlIaUxpbmsgeGtiUHJlcHJvYyBQcmVwcm9jCisKKwlIaUxpbmsgeGtiSWRlbnRpZmllciBLZXl3b3JkCisJSGlMaW5rIHhrYkZ1bmN0aW9uIEZ1bmN0aW9uCisJSGlMaW5rIHhrYlNlY3QgVHlwZQorCUhpTGluayB4a2JQaHlzaWNhbEtleSBJZGVudGlmaWVyCisJSGlMaW5rIHhrYktleXdvcmQgS2V5d29yZAorCisJSGlMaW5rIHhrYkNvbW1lbnQgQ29tbWVudAorCUhpTGluayB4a2JUb2RvIFRvZG8KKworCUhpTGluayB4a2JDb25zdGFudCBDb25zdGFudAorCUhpTGluayB4a2JTdHJpbmcgU3RyaW5nCisKKwlIaUxpbmsgeGtiU3BlY2lhbENoYXIgeGtiU3BlY2lhbAorCUhpTGluayB4a2JTcGVjaWFsIFNwZWNpYWwKKworCUhpTGluayB4a2JQYXJlbkVycm9yIHhrYkJhbGFuY2luZ0Vycm9yCisJSGlMaW5rIHhrYkJyYWNlRXJyb3IgeGtiQmFsYW5jaW5nRXJyb3IKKwlIaUxpbmsgeGtiQnJha2V0RXJyb3IgeGtiQmFsYW5jaW5nRXJyb3IKKwlIaUxpbmsgeGtiQmFsYW5jaW5nRXJyb3IgeGtiRXJyb3IKKwlIaUxpbmsgeGtiQ29tbWVudFN0YXJ0RXJyb3IgeGtiQ29tbWVudEVycm9yCisJSGlMaW5rIHhrYkNvbW1lbnRFcnJvciB4a2JFcnJvcgorCUhpTGluayB4a2JFcnJvciBFcnJvcgorCisJZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInhrYiIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3htYXRoLnZpbSBiL3J1bnRpbWUvc3ludGF4L3htYXRoLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTk2MmZiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgveG1hdGgudmltCkBAIC0wLDAgKzEsMjM1IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJeG1hdGggKGEgc2ltdWxhdGlvbiB0b29sKQorIiBNYWludGFpbmVyOglEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxOZHJPY2hpcFNAUGNhbXBiZWxsQWZhbWlseS5NYml6PgorIiBMYXN0IENoYW5nZToJU2VwIDAyLCAyMDAzCisiIFZlcnNpb246CTMKKyIgVVJMOglodHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL2luZGV4Lmh0bWwjdmltbGlua3Nfc3ludGF4CisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBwYXJlbnRoZXNpcyBzYW5pdHkgY2hlY2tlcgorc3luIHJlZ2lvbiB4bWF0aFpvbmUJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IigiIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0iKSIgdHJhbnNwYXJlbnQgY29udGFpbnM9QUxMQlVULHhtYXRoRXJyb3IseG1hdGhCcmFjZUVycm9yLHhtYXRoQ3VybHlFcnJvcgorc3luIHJlZ2lvbiB4bWF0aFpvbmUJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9InsiIG1hdGNoZ3JvdXA9RGVsaW1pdGVyIGVuZD0ifSIgdHJhbnNwYXJlbnQgY29udGFpbnM9QUxMQlVULHhtYXRoRXJyb3IseG1hdGhCcmFjZUVycm9yLHhtYXRoUGFyZW5FcnJvcgorc3luIHJlZ2lvbiB4bWF0aFpvbmUJbWF0Y2hncm91cD1EZWxpbWl0ZXIgc3RhcnQ9IlxbIiBtYXRjaGdyb3VwPURlbGltaXRlciBlbmQ9Il0iIHRyYW5zcGFyZW50IGNvbnRhaW5zPUFMTEJVVCx4bWF0aEVycm9yLHhtYXRoQ3VybHlFcnJvcix4bWF0aFBhcmVuRXJyb3IKK3N5biBtYXRjaCAgeG1hdGhFcnJvcgkiWylcXX1dIgorc3luIG1hdGNoICB4bWF0aEJyYWNlRXJyb3IJIlspfV0iCWNvbnRhaW5lZAorc3luIG1hdGNoICB4bWF0aEN1cmx5RXJyb3IJIlspXF1dIgljb250YWluZWQKK3N5biBtYXRjaCAgeG1hdGhQYXJlbkVycm9yCSJbXF19XSIJY29udGFpbmVkCitzeW4gbWF0Y2ggIHhtYXRoQ29tbWEJIlssOzpdIgorc3luIG1hdGNoICB4bWF0aENvbW1hCSJcLlwuXC4kIgorCisiIEEgYnVuY2ggb2YgdXNlZnVsIHhtYXRoIGtleXdvcmRzCitzeW4gY2FzZSBpZ25vcmUKK3N5biBrZXl3b3JkIHhtYXRoRnVuY0NtZAlmdW5jdGlvbgllbmRmdW5jdGlvbgljb21tYW5kCWVuZGNvbW1hbmQKK3N5biBrZXl3b3JkIHhtYXRoU3RhdGVtZW50CWFib3J0CWJlZXAJZGVidWcJZGVmYXVsdAlkZWZpbmUKK3N5biBrZXl3b3JkIHhtYXRoU3RhdGVtZW50CWV4ZWN1dGUJZXhpdAlwYXVzZQlyZXR1cm4JdW5kZWZpbmUKK3N5biBrZXl3b3JkIHhtYXRoQ29uZGl0aW9uYWwJaWYJZWxzZQllbHNlaWYJZW5kaWYKK3N5biBrZXl3b3JkIHhtYXRoUmVwZWF0CXdoaWxlCWZvcgllbmR3aGlsZQllbmRmb3IKK3N5biBrZXl3b3JkIHhtYXRoQ21kCWFuaWdyYXBoCWRlbGV0ZWRhdGFzdG9yZQlrZWVwCXJlbmFtZWRhdGFzdG9yZQorc3luIGtleXdvcmQgeG1hdGhDbWQJYXV0b2NvZGUJZGVsZXRlc3RkCWxpbmtoeXBlcglyZW5hbWVzdGQKK3N5biBrZXl3b3JkIHhtYXRoQ21kCWJ1aWxkCWRlbGV0ZXN1cGVyYmxvY2sJbGlua3NpbQlyZW5hbWVzdXBlcmJsb2NrCitzeW4ga2V5d29yZCB4bWF0aENtZAljb21tZW50CWRlbGV0ZXRyYW5zaXRpb24JbGlzdHVzZXJ0eXBlCXNhdmUKK3N5biBrZXl3b3JkIHhtYXRoQ21kCWNvcHlkYXRhc3RvcmUJZGVsZXRldXNlcnR5cGUJbG9hZAlzYmFkaXNwbGF5CitzeW4ga2V5d29yZCB4bWF0aENtZAljb3B5c3RkCWRldGFpbG1vZGVsCWxvY2sJc2V0CitzeW4ga2V5d29yZCB4bWF0aENtZAljb3B5c3VwZXJibG9jawlkaXNwbGF5CW1pbm1heF9kaXNwbGF5CXNldHNiZGVmYXVsdAorc3luIGtleXdvcmQgeG1hdGhDbWQJY3JlYXRlYmxvY2sJZG9jdW1lbnRpdAltb2RpZnlibG9jawlzaG93CitzeW4ga2V5d29yZCB4bWF0aENtZAljcmVhdGVidWJibGUJZWRpdGNhdGFsb2cJbW9kaWZ5YnViYmxlCXNob3dsaWNlbnNlCitzeW4ga2V5d29yZCB4bWF0aENtZAljcmVhdGVjb25uZWN0aW9uCWVyYXNlCW1vZGlmeXN0ZAlzaG93c2JkZWZhdWx0CitzeW4ga2V5d29yZCB4bWF0aENtZAljcmVhdGVydGYJZXhwYW5kc3VwZXJidWJibGUJbW9kaWZ5c3VwZXJibG9jawlzdG9wCitzeW4ga2V5d29yZCB4bWF0aENtZAljcmVhdGVzdGQJZm9yCW1vZGlmeXRyYW5zaXRpb24Jc3RvcGNvc2ltCitzeW4ga2V5d29yZCB4bWF0aENtZAljcmVhdGVzdXBlcmJsb2NrCWdvCW1vZGlmeXVzZXJ0eXBlCXN5bnRheAorc3luIGtleXdvcmQgeG1hdGhDbWQJY3JlYXRlc3VwZXJidWJibGUJZ290bwluZXcJdW5hbGlhcworc3luIGtleXdvcmQgeG1hdGhDbWQJY3JlYXRldHJhbnNpdGlvbgloYXJkY29weQluZXh0CXVubG9jaworc3luIGtleXdvcmQgeG1hdGhDbWQJY3JlYXRldXNlcnR5cGUJaGVscAlwb2xhcmdyYXBoCXVzZXJ0eXBlCitzeW4ga2V5d29yZCB4bWF0aENtZAlkZWxldGUJaHlwZXJidWlsZAlwcmludAl3aGF0aXMKK3N5biBrZXl3b3JkIHhtYXRoQ21kCWRlbGV0ZWJsb2NrCWlmCXByaW50bW9kZWwJd2hpbGUKK3N5biBrZXl3b3JkIHhtYXRoQ21kCWRlbGV0ZWJ1YmJsZQlpZmlsdGVyCXF1aXQJd2hvCitzeW4ga2V5d29yZCB4bWF0aENtZAlkZWxldGVjb25uZWN0aW9uCWlwY3djCXJlbW92ZQl4Z3JhcGgKKworc3luIGtleXdvcmQgeG1hdGhGdW5jCWFiY2QJZXllCWlyZWEJcXVlcnlzdGRvcHRpb25zCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYWJzCWV5ZXBhdHRlcm4JaXMJcXVlcnlzdXBlcmJsb2NrCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYWNvcwlmZWVkYmFjawlJU0lECXF1ZXJ5c3VwZXJibG9ja29wdAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWFjb3NoCWZmdAlJU0lECU1vZGVscwlxdWVyeXRyYW5zaXRpb24KK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlhZGNvbnZlcnNpb24JZmZ0cGRtCWtyb25lY2tlcglxdWVyeXRyYW5zaXRpb25vcHQKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlhZmVlZGJhY2sJZmlsdGVyCWxlbmd0aAlxegorc3luIGtleXdvcmQgeG1hdGhGdW5jCWFsbAlmaW5kCWxpbWl0CXJhbXBpbnZhcgorc3luIGtleXdvcmQgeG1hdGhGdW5jCWFtYmlndWl0eQlmaXJwYXJrcwlsaW4JcmFuZG9tCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYW1kZW1vZAlmaXJyZW1leglsaW4zMAlyYW5kcGRtCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYW5hbHl0aWMJZmlyd2luZAlsaW5lYXJmbQlyYW5kcGVydAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWFuYWx5emUJZm1kZW1vZAlsaW5mbm9ybQlyYW5kc3lzCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYW55CWZvcndkaWZmCWxpbnRvZGIJcmFuaworc3luIGtleXdvcmQgeG1hdGhGdW5jCWFwcGVuZAlmcHJpbnRmCWxpc3QJcmF5bGVpZ2gKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlhcmduCWZyYWMJbG9nCXJjZXBzdHJ1bQorc3luIGtleXdvcmQgeG1hdGhGdW5jCWFyZ3YJZnJhY3JlZAlsb2cxMAlyY29uZAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWFybWEJZnJlcQlsb2dtCXJkaW50ZWdyYXRlCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYXJtYTJzcwlmcmVxY2lyY2xlCWxvZ25vcm1hbAlyZWFkCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYXJtYXgJZnJlcWNvbnQJbG9nc3BhY2UJcmVhbAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWFzY2lpCWZyZXF1ZW5jeWhvcAlsb3dwYXNzCXJlY3RpZnkKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlhc2luCWZzZXN0aQlscG9wdAlyZWRzY2h1cgorc3luIGtleXdvcmQgeG1hdGhGdW5jCWFzaW5oCWZzbHFnY29tcAlscWdjb21wCXJlZmxlY3QKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlhdGFuCWZzcmVndQlscWdsdHIJcmVndWxhdG9yCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYXRhbjIJZndscwlscwlyZXNpZHVlCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYXRhbmgJZ2Fib3IJbHMydW5jCXJpY2NhdGkKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlhdHRhY2hfYWMxMDAJZ2FyYglsczJ2YXIJcmljY2F0aV9laWcKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwliYWNrZGlmZglnYXVzc2lhbglsc2pvaW4JcmljY2F0aV9zY2h1cgorc3luIGtleXdvcmQgeG1hdGhGdW5jCWJhbGFuY2UJZ2NleHAJbHUJcmljZWFuCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYmFsbW9vcmUJZ2NvcwlseWFwdW5vdglyaWZkCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYmFuZHBhc3MJZ2RmaWxlc2VsZWN0aW9uCW1ha2Vjb250aW51b3VzCXJsaW5mbworc3luIGtleXdvcmQgeG1hdGhGdW5jCWJhbmRzdG9wCWdkbWVzc2FnZQltYWtlbWF0cml4CXJsb2N1cworc3luIGtleXdvcmQgeG1hdGhGdW5jCWJqCWdkc2VsZWN0aW9uCW1ha2Vwb2x5CXJtcworc3luIGtleXdvcmQgeG1hdGhGdW5jCWJsa25vcm0JZ2VuY29udgltYXJnaW4Jcm9vdGxvY3VzCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYm9kZQlnZXQJbWFya29mZglyb290cworc3luIGtleXdvcmQgeG1hdGhGdW5jCWJwbQlnZXRfaW5mbzMwCW1hdGNoZWRweglyb3VuZAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWJwbTJpbm4JZ2V0X2lubgltYXgJcnJlZgorc3luIGtleXdvcmQgeG1hdGhGdW5jCWJwbWpvaW4JZ2ZkbQltYXhsaWtlCXJ2ZV9nZXQKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlicG1zcGxpdAlnZnNrCW1lYW4JcnZlX2luZm8KK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlic3QJZ2Zza2VybmVsCW1lcmdlc2VnCXJ2ZV9yZXNldAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWJ1dHRjb25zdHIJZ2Z1bmN0aW9uCW1pbglydmVfdXBkYXRlCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJYnV0dGVyd29ydGgJZ2dhdXNzCW1pbmltYWwJc2FtcGxlaG9sZAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWNhbmNlbAlnaXYJbWtwZXJ0CXNjaHVyCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY2FuZm9ybQlnaXYydmFyCW1rcGhhc2UJc2RmCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY2NlcHN0cnVtCWdpdmpvaW4JbW1hCXNkcworc3luIGtleXdvcmQgeG1hdGhGdW5jCWNoYXIJZ3BzawltbWFnZXQJc2R0cnNwCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY2hlYmNvbnN0cglncHVsc2UJbW1hcHV0CXNlYworc3luIGtleXdvcmQgeG1hdGhGdW5jCWNoZWJ5c2hldglncWFtCW1vZAlzZWNoCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY2hlY2sJZ3Fwc2sJbW9kYWwJc2lnaW50ZXJwCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY2hvbGVza3kJZ3JhbXAJbW9kYWxzdGF0ZQlzaWduCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY2hvcAlnc2F3dG9vdGgJbW9kY2FycmllcglzaW0KK3N5biBrZXl3b3JkIHhtYXRoRnVuYwljaXJjb252CWdzaWdtb2lkCW1yZWR1Y2UJc2ltMzAKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwljaXJjb3JyCWdzaW4JbXR4cGx0CXNpbWluCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY2xvY2sJZ3NpbmMJbXUJc2ltaW4zMAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWNsb2N1cwlnc3Fwc2sJbXVsaGFuawlzaW1vdXQKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwljbHN5cwlnc3F1YXJld2F2ZQltdWx0aXBhdGgJc2ltb3V0MzAKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwljb2hlcmVuY2UJZ3N0ZXAJbXVzeW5maXQJc2ltdHJhbnNmb3JtCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY29sb3JpbmQJR3VpRGlhbG9nQ3JlYXRlCW14c3RyMnhtc3RyCXNpbgorc3luIGtleXdvcmQgeG1hdGhGdW5jCWNvbWJpbmVwZglHdWlEaWFsb2dEZXN0cm95CW14c3RyaW5nMnhtc3RyaW5nCXNpbmdyaWNjYXRpCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY29tbWVudG9mCUd1aUZsdXNoCW5hbWVzCXNpbmgKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwljb21wYXJlCUd1aUdldFZhbHVlCW5pY2hvbHMJc2lubQorc3luIGtleXdvcmQgeG1hdGhGdW5jCWNvbXBsZW1lbnRhcnllcmYJR3VpTWFuYWdlCW5vaXNlZmlsdAlzaXplCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY29tcGxleGVudmVsb3BlCUd1aVBsb3QJbm9uZQlzbWFyZ2luCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY29tcGxleGZyZXFzaGlmdAlHdWlQbG90R2V0CW5vcm0Jc25zMnN5cworc3luIGtleXdvcmQgeG1hdGhGdW5jCWNvbmNhdHNlZwlHdWlTZXRWYWx1ZQludW1kZW4Jc29ydAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWNvbmRpdGlvbglHdWlTaGVsbENyZWF0ZQlueXF1aXN0CXNwZWN0cmFkCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY29uaglHdWlTaGVsbERlaWNvbmlmeQlvYnNjZglzcGVjdHJ1bQorc3luIGtleXdvcmQgeG1hdGhGdW5jCWNvbm1hcAlHdWlTaGVsbERlc3Ryb3kJb2JzZXJ2YWJsZQlzcGxpbmUKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwljb25uZWN0CUd1aVNoZWxsSWNvbmlmeQlvZQlzcHJpbnRmCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY29ucGRtCUd1aVNoZWxsTG93ZXIJb25lcwlzcXJ0CitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY29uc3RlbGxhdGlvbglHdWlTaGVsbFJhaXNlCW9waGFuawlzcXJ0bQorc3luIGtleXdvcmQgeG1hdGhGdW5jCWNvbnN5cwlHdWlTaGVsbFJlYWxpemUJb3B0aW1pemUJc3Jlc2lkdWFsaXplCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY29udHJvbGxhYmxlCUd1aVNoZWxsVW5yZWFsaXplCW9wdHNjYWxlCXNzMmFybWEKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwljb252b2x2ZQlHdWlUaW1lcglvcmRlcmZpbHQJc3N0CitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY29ycmVsYXRlCUd1aVRvb2xDcmVhdGUJb3JkZXJzdGF0ZQlzc3YKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwljb3MJR3VpVG9vbERlc3Ryb3kJb3J0aAlzdGFibGUKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwljb3NoCUd1aVRvb2xFeGlzdAlvc2NtZAlzdGFpcgorc3luIGtleXdvcmQgeG1hdGhGdW5jCWNvc20JR3VpVW5tYW5hZ2UJb3Njb3BlCXN0YXJwCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY290CUd1aVdpZGdldEV4aXN0CW9zc2NhbGUJc3RlcAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWNvdGgJaDJub3JtCXBhZGNyb3AJc3RlcGludmFyCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY292YXJpYW5jZQloMnN5bglwYXJ0aWFsc3VtCXN0cmluZworc3luIGtleXdvcmQgeG1hdGhGdW5jCWNzYwloYWRhbWFyZAlwZG0Jc3RyaW5nZXgKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwljc2NoCWhhbmtlbHN2CXBkbXNsaWNlCXN1YnN0cgorc3luIGtleXdvcmQgeG1hdGhGdW5jCWNzdW0JaGVzc2VuYmVyZwlwZW0Jc3Vic3lzCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJY3RyY2YJaGlnaHBhc3MJcGVyZnBsb3RzCXN1bQorc3luIGtleXdvcmQgeG1hdGhGdW5jCWN0cmxwbG90CWhpbGJlcnQJcGVyaW9kCXN2ZAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWRhdWcJaGlsYmVydHRyYW5zZm9ybQlwZnNjYWxlCXN2cGxvdAorc3luIGtleXdvcmQgeG1hdGhGdW5jCWRidG9saW4JaGluZmNvbnRyCXBoYXNlc2hpZnQJc3dlZXAKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlkY3QJaGluZm5vcm0JcGludglzeW1ib2xtYXAKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlkZWNpbWF0ZQloaW5mc3luCXBsb3QJc3lzMnNucworc3luIGtleXdvcmQgeG1hdGhGdW5jCWRlZkZyZXFSYW5nZQloaXN0b2dyYW0JcGxvdDMwCXN5c2ljCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZGVmVGltZVJhbmdlCWlkZnJlcQlwbWRlbW9kCVN5c2lkCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZGVsYXkJaWRpbXB1bHNlCXBvaXNzb24Jc3lzdGVtCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZGVsc3Vic3RyCWlkc2ltCXBvaXNzb25pbXB1bHNlCXRhbgorc3luIGtleXdvcmQgeG1hdGhGdW5jCWRldAlpZmZ0CXBvbGVwbGFjZQl0YW5oCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZGV0cmVuZAlpbWFnCXBvbGVzCXRhcGVyCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZGh0CWltcGludmFyCXBvbGV6ZXJvCXRmaWQKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlkaWFnb25hbAlpbXBwbG90CXBvbHRyZW5kCXRvZXBsaXR6CitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZGlmZmVyZW50aWF0ZQlpbXB1bHNlCXBvbHlmaXQJdHJhY2UKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlkaXJlY3RzZXF1ZW5jZQlpbmRleAlwb2x5bm9taWFsCXRyaWwKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlkaXNjcmV0aXplCWluZGV4bGlzdAlwb2x5dmFsCXRyaW0KK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlkaXZpZGUJaW5pdGlhbAlwb2x5dmFsbQl0cmltMzAKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlkb21haW4JaW5pdG1vZGVsCXByYnMJdHJpdQorc3luIGtleXdvcmQgeG1hdGhGdW5jCWRzdAlpbml0eDAJcHJvZHVjdAl0cnNwCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZWlnCWlubjJicG0JcHNkCXRydW5jYXRlCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZWxsaXBjb25zdHIJaW5uMnBlCXB1dF9pbm4JdHVzdGluCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZWxsaXB0aWMJaW5uMnVuYwlxcG9wdAl1bmlmb3JtCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZXJmCWluc2VydHNlZwlxcgl2YWwKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwllcnJvcglpbnQJcXVhbnRpemUJdmFyaWFuY2UKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwllc3RpbWF0b3IJaW50ZWdyYXRlCXF1ZXJ5YmxvY2sJdmlkZW9saW5lcworc3luIGtleXdvcmQgeG1hdGhGdW5jCWV0ZmUJaW50ZWdyYXRlZHVtcAlxdWVyeWJsb2Nrb3B0aW9ucwl3Y2JvZGUKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlleGlzdAlpbnRlcnAJcXVlcnlidWJibGUJd2NnYWluCitzeW4ga2V5d29yZCB4bWF0aEZ1bmMJZXhwCWludGVycG9sYXRlCXF1ZXJ5YnViYmxlb3B0aW9uc3dpbmRvdworc3luIGtleXdvcmQgeG1hdGhGdW5jCWV4cG0JaW52CXF1ZXJ5Y2F0YWxvZwl3dGJhbGFuY2UKK3N5biBrZXl3b3JkIHhtYXRoRnVuYwlleHRyYWN0Y2hhbglpbnZoaWxiZXJ0CXF1ZXJ5Y29ubmVjdGlvbgl6ZXJvcworc3luIGtleXdvcmQgeG1hdGhGdW5jCWV4dHJhY3RzZWcJaXFtaXgJcXVlcnlzdGQKKworc3luIGNhc2UgbWF0Y2gKKworIiBMYWJlbHMgKHN1cHBvcnRzIHhtYXRoJ3MgZ290bykKK3N5biBtYXRjaCAgIHhtYXRoTGFiZWwJICJeXHMqPFthLXpBLVpfXVthLXpBLVowLTldKj4iCisKKyIgU3RyaW5nIGFuZCBDaGFyYWN0ZXIgY29uc3RhbnRzCisiIEhpZ2hsaWdodCBzcGVjaWFsIGNoYXJhY3RlcnMgKHRob3NlIHdoaWNoIGhhdmUgYSBiYWNrc2xhc2gpIGRpZmZlcmVudGx5CitzeW4gbWF0Y2ggICB4bWF0aFNwZWNpYWwJY29udGFpbmVkICJcXFxkXGRcZFx8XFwuIgorc3luIHJlZ2lvbiAgeG1hdGhTdHJpbmcJc3RhcnQ9KyIrICBza2lwPStcXFxcXHxcXCIrICBlbmQ9KyIrIGNvbnRhaW5zPXhtYXRoU3BlY2lhbAorc3luIG1hdGNoICAgeG1hdGhDaGFyYWN0ZXIJIidbXlxcXSciCitzeW4gbWF0Y2ggICB4bWF0aFNwZWNpYWxDaGFyCSInXFwuJyIKKworc3luIG1hdGNoICAgeG1hdGhOdW1iZXIJIi1cPVw8XGRcK0xcPVw+XHwwW3hYXVswLTlhLWZBLUZdXCtcPiIKKworIiBDb21tZW50czoKKyIgeG1hdGggc3VwcG9ydHMgIy4uLiAgKGxpa2UgVW5peCBzaGVsbHMpCisiICAgICAgIGFuZCAgICAgICN7IC4uLiB9IyBjb21tZW50IGJsb2Nrcworc3luIGtleXdvcmQgeG1hdGhUb2RvIGNvbnRhaW5lZAlUT0RPIFRvZG8gREVCVUcKK3N5biBtYXRjaCAgIHhtYXRoQ29tbWVudAkiIy4qJCIJCWNvbnRhaW5zPXhtYXRoU3RyaW5nLHhtYXRoVG9kbyxAU3BlbGwKK3N5biByZWdpb24gIHhtYXRoQ29tbWVudEJsb2NrCXN0YXJ0PSIjeyIgZW5kPSJ9IyIJY29udGFpbnM9eG1hdGhTdHJpbmcseG1hdGhUb2RvCisKKyIgc3luY2hyb25pemluZworc3luIHN5bmMgbWF0Y2ggeG1hdGhTeW5jQ29tbWVudAlncm91cGhlcmUgeG1hdGhDb21tZW50QmxvY2sgIiN7Igorc3luIHN5bmMgbWF0Y2ggeG1hdGhTeW5jQ29tbWVudAlncm91cHRoZXJlIE5PTkUgIn0jIgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF94bWF0aF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF94bWF0aF9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB4bWF0aEJyYWNlRXJyb3IJeG1hdGhFcnJvcgorICBIaUxpbmsgeG1hdGhDbWQJeG1hdGhTdGF0ZW1lbnQKKyAgSGlMaW5rIHhtYXRoQ29tbWVudEJsb2NrCXhtYXRoQ29tbWVudAorICBIaUxpbmsgeG1hdGhDdXJseUVycm9yCXhtYXRoRXJyb3IKKyAgSGlMaW5rIHhtYXRoRnVuY0NtZAl4bWF0aFN0YXRlbWVudAorICBIaUxpbmsgeG1hdGhQYXJlbkVycm9yCXhtYXRoRXJyb3IKKworICAiIFRoZSBkZWZhdWx0IG1ldGhvZHMgZm9yIGhpZ2hsaWdodGluZy4gIENhbiBiZSBvdmVycmlkZGVuIGxhdGVyCisgIEhpTGluayB4bWF0aENoYXJhY3RlcglDaGFyYWN0ZXIKKyAgSGlMaW5rIHhtYXRoQ29tbWEJRGVsaW1pdGVyCisgIEhpTGluayB4bWF0aENvbW1lbnQJQ29tbWVudAorICBIaUxpbmsgeG1hdGhDb21tZW50QmxvY2sJQ29tbWVudAorICBIaUxpbmsgeG1hdGhDb25kaXRpb25hbAlDb25kaXRpb25hbAorICBIaUxpbmsgeG1hdGhFcnJvcglFcnJvcgorICBIaUxpbmsgeG1hdGhGdW5jCUZ1bmN0aW9uCisgIEhpTGluayB4bWF0aExhYmVsCVByZVByb2MKKyAgSGlMaW5rIHhtYXRoTnVtYmVyCU51bWJlcgorICBIaUxpbmsgeG1hdGhSZXBlYXQJUmVwZWF0CisgIEhpTGluayB4bWF0aFNwZWNpYWwJVHlwZQorICBIaUxpbmsgeG1hdGhTcGVjaWFsQ2hhcglTcGVjaWFsQ2hhcgorICBIaUxpbmsgeG1hdGhTdGF0ZW1lbnQJU3RhdGVtZW50CisgIEhpTGluayB4bWF0aFN0cmluZwlTdHJpbmcKKyAgSGlMaW5rIHhtYXRoVG9kbwlUb2RvCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInhtYXRoIgorCisiIHZpbTogdHM9MTcKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3htbC52aW0gYi9ydW50aW1lL3N5bnRheC94bWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNmM2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC94bWwudmltCkBAIC0wLDAgKzEsMzQ0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJWE1MCisiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgorIgkJQXV0aG9yIGFuZCBwcmV2aW91cyBtYWludGFpbmVyOgorIgkJUGF1bCBTaWVnbWFubiA8cGF1bHNAZXVyb25ldC5ubD4KKyIgTGFzdCBDaGFuZ2U6CUZyaSwgMDQgSnVuIDIwMDQgMTA6NDE6NTQgQ0VTVAorIiBGaWxlbmFtZXM6CSoueG1sCisiICRJZCQKKworIiBDT05GSUdVUkFUSU9OOgorIiAgIHN5bnRheCBmb2xkaW5nIGNhbiBiZSB0dXJuZWQgb24gYnkKKyIKKyIgICAgICBsZXQgZzp4bWxfc3ludGF4X2ZvbGRpbmcgPSAxCisiCisiICAgYmVmb3JlIHRoZSBzeW50YXggZmlsZSBnZXRzIGxvYWRlZCAoZS5nLiBpbiB+Ly52aW1yYykuCisiICAgVGhpcyBtaWdodCBzbG93IGRvd24gc3ludGF4IGhpZ2hsaWdodGluZyBzaWduaWZpY2FudGx5LAorIiAgIGVzcGVjaWFsbHkgZm9yIGxhcmdlIGZpbGVzLgorIgorIiBDUkVESVRTOgorIiAgIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdhcyBkZXJpdmVkIGJ5IFBhdWwgU2llZ21hbm4gZnJvbQorIiAgIENsYXVkaW8gRmxlaW5lcidzIGh0bWwudmltLgorIgorIiBSRUZFUkVOQ0VTOgorIiAgIFsxXSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy14bWwtMjAwMDEwMDYKKyIgICBbMl0gaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvMDYveG1sc3BlYy1yZXBvcnQtMTk5ODA5MTAuaHRtCisiCisiICAgYXMgPGhpcmF1Y2hpQGtpd2kubmUuanA+IHBvaW50ZWQgb3V0IGFjY29yZGluZyB0byByZWZlcmVuY2UgWzFdCisiCisiICAgMi4zIENvbW1vbiBTeW50YWN0aWMgQ29uc3RydWN0cworIiAgIFs0XSAgICBOYW1lQ2hhciAgICA6Oj0gICAgTGV0dGVyIHwgRGlnaXQgfCAnLicgfCAnLScgfCAnXycgfCAnOicgfCBDb21iaW5pbmdDaGFyIHwgRXh0ZW5kZXIKKyIgICBbNV0gICAgTmFtZSAgICAgICAgOjo9ICAgIChMZXR0ZXIgfCAnXycgfCAnOicpIChOYW1lQ2hhcikqCisiCisiIE5PVEU6CisiICAgMSkgZW1wdHkgdGFnIGRlbGltaXRlcnMgIi8+IiBpbnNpZGUgYXR0cmlidXRlIHZhbHVlcyAoc3RyaW5ncykKKyIgICAgICBjb25mdXNlIHN5bnRheCBoaWdobGlnaHRpbmcuCisiICAgMikgZm9yIGxhcmdlIGZpbGVzLCBmb2xkaW5nIGNhbiBiZSBwcmV0dHkgc2xvdywgZXNwZWNpYWxseSB3aGVuCisiICAgICAgbG9hZGluZyBhIGZpbGUgdGhlIGZpcnN0IHRpbWUgYW5kIHZpZXdvcHRpb25zIGNvbnRhaW5zICdmb2xkcycKKyIgICAgICBzbyB0aGF0IGZvbGRzIG9mIHByZXZpb3VzIHNlc3Npb25zIGFyZSBhcHBsaWVkLgorIiAgICAgIERvbid0IHVzZSAnZm9sZG1ldGhvZD1zeW50YXgnIGluIHRoaXMgY2FzZS4KKworCisiIFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK2xldCBzOnhtbF9jcG9fc2F2ZSA9ICZjcG8KK3NldCBjcG8mdmltCisKK3N5biBjYXNlIG1hdGNoCisKKyIgbWFyayBpbGxlZ2FsIGNoYXJhY3RlcnMKK3N5biBtYXRjaCB4bWxFcnJvciAiWzwmXSIKKworIiBzdHJpbmdzIChpbnNpZGUgdGFncykgYWthIFZBTFVFUworIgorIiBFWEFNUExFOgorIgorIiA8dGFnIGZvby5hdHRyaWJ1dGUgPSAidmFsdWUiPgorIiAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCitzeW4gcmVnaW9uICB4bWxTdHJpbmcgY29udGFpbmVkIHN0YXJ0PSsiKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rIisgY29udGFpbnM9eG1sRW50aXR5IGRpc3BsYXkKK3N5biByZWdpb24gIHhtbFN0cmluZyBjb250YWluZWQgc3RhcnQ9KycrIHNraXA9K1xcXFxcfFxcJysgZW5kPSsnKyBjb250YWlucz14bWxFbnRpdHkgZGlzcGxheQorCisKKyIgcHVuY3R1YXRpb24gKHdpdGhpbiBhdHRyaWJ1dGVzKSBlLmcuIDx0YWcgeG1sOmZvby5hdHRyaWJ1dGUgLi4uPgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgXgorIiBzeW4gbWF0Y2ggICB4bWxBdHRyaWJQdW5jdCArWy06Ll9dKyBjb250YWluZWQgZGlzcGxheQorc3luIG1hdGNoICAgeG1sQXR0cmliUHVuY3QgK1s6Ll0rIGNvbnRhaW5lZCBkaXNwbGF5CisKKyIgbm8gaGlnaGxpZ2h0aW5nIGZvciB4bWxFcXVhbCAoeG1sRXF1YWwgaGFzIG5vIGhpZ2hsaWdodGluZyBncm91cCkKK3N5biBtYXRjaCAgIHhtbEVxdWFsICs9KyBkaXNwbGF5CisKKworIiBhdHRyaWJ1dGUsIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSAnPScKKyIKKyIgUFJPVklERVM6IEB4bWxBdHRyaWJIb29rCisiCisiIEVYQU1QTEU6CisiCisiIDx0YWcgZm9vLmF0dHJpYnV0ZSA9ICJ2YWx1ZSI+CisiICAgICAgXl5eXl5eXl5eXl5eXgorIgorc3luIG1hdGNoICAgeG1sQXR0cmliCisgICAgXCArWy0nIjxdXEA8IVw8W2EtekEtWjpfXVstLjAtOWEtekEtWjAtOTpfXSpcPlwoWyciPl1cQCFcfCRcKSsKKyAgICBcIGNvbnRhaW5lZAorICAgIFwgY29udGFpbnM9eG1sQXR0cmliUHVuY3QsQHhtbEF0dHJpYkhvb2sKKyAgICBcIGRpc3BsYXkKKworCisiIG5hbWVzcGFjZSBzcGVjCisiCisiIFBST1ZJREVTOiBAeG1sTmFtZXNwYWNlSG9vaworIgorIiBFWEFNUExFOgorIgorIiA8eHNsOmZvci1lYWNoIHNlbGVjdCA9ICJsb2xhIj4KKyIgIF5eXgorIgoraWYgZXhpc3RzKCJnOnhtbF9uYW1lc3BhY2VfdHJhbnNwYXJlbnQiKQorc3luIG1hdGNoICAgeG1sTmFtZXNwYWNlCisgICAgXCArXCg8XHw8L1wpXEA8PVteIC8hPzw+Iic6XVwrWzpdXEA9KworICAgIFwgY29udGFpbmVkCisgICAgXCBjb250YWlucz1AeG1sTmFtZXNwYWNlSG9vaworICAgIFwgdHJhbnNwYXJlbnQKKyAgICBcIGRpc3BsYXkKK2Vsc2UKK3N5biBtYXRjaCAgIHhtbE5hbWVzcGFjZQorICAgIFwgK1woPFx8PC9cKVxAPD1bXiAvIT88PiInOl1cK1s6XVxAPSsKKyAgICBcIGNvbnRhaW5lZAorICAgIFwgY29udGFpbnM9QHhtbE5hbWVzcGFjZUhvb2sKKyAgICBcIGRpc3BsYXkKK2VuZGlmCisKKworIiB0YWcgbmFtZQorIgorIiBQUk9WSURFUzogQHhtbFRhZ0hvb2sKKyIKKyIgRVhBTVBMRToKKyIKKyIgPHRhZyBmb28uYXR0cmlidXRlID0gInZhbHVlIj4KKyIgIF5eXgorIgorc3luIG1hdGNoICAgeG1sVGFnTmFtZQorICAgIFwgK1s8XVxAPD1bXiAvIT88PiInXVwrKworICAgIFwgY29udGFpbmVkCisgICAgXCBjb250YWlucz14bWxOYW1lc3BhY2UseG1sQXR0cmliUHVuY3QsQHhtbFRhZ0hvb2sKKyAgICBcIGRpc3BsYXkKKworCitpZiBleGlzdHMoJ2c6eG1sX3N5bnRheF9mb2xkaW5nJykKKworICAgICIgc3RhcnQgdGFnCisgICAgIiB1c2UgbWF0Y2hncm91cD14bWxUYWcgdG8gc2tpcCBvdmVyIHRoZSBsZWFkaW5nICc8JworICAgICIKKyAgICAiIFBST1ZJREVTOiBAeG1sU3RhcnRUYWdIb29rCisgICAgIgorICAgICIgRVhBTVBMRToKKyAgICAiCisgICAgIiA8dGFnIGlkPSJ3aG9vcHMiPgorICAgICIgc15eXl5eXl5eXl5eXl5eXmUKKyAgICAiCisgICAgc3luIHJlZ2lvbiAgIHhtbFRhZworCVwgbWF0Y2hncm91cD14bWxUYWcgc3RhcnQ9KzxbXiAvIT88PiInXVxAPSsKKwlcIG1hdGNoZ3JvdXA9eG1sVGFnIGVuZD0rPisKKwlcIGNvbnRhaW5lZAorCVwgY29udGFpbnM9eG1sRXJyb3IseG1sVGFnTmFtZSx4bWxBdHRyaWIseG1sRXF1YWwseG1sU3RyaW5nLEB4bWxTdGFydFRhZ0hvb2sKKworCisgICAgIiBoaWdobGlnaHQgdGhlIGVuZCB0YWcKKyAgICAiCisgICAgIiBQUk9WSURFUzogQHhtbFRhZ0hvb2sKKyAgICAiIChzaG91bGQgd2UgcHJvdmlkZSBhIHNlcGFyYXRlIEB4bWxFbmRUYWdIb29rID8pCisgICAgIgorICAgICIgRVhBTVBMRToKKyAgICAiCisgICAgIiA8L3RhZz4KKyAgICAiIF5eXl5eXgorICAgICIKKyAgICBzeW4gbWF0Y2ggICB4bWxFbmRUYWcKKwlcICs8L1teIC8hPzw+IiddXCs+KworCVwgY29udGFpbmVkCisJXCBjb250YWlucz14bWxOYW1lc3BhY2UseG1sQXR0cmliUHVuY3QsQHhtbFRhZ0hvb2sKKworCisgICAgIiB0YWcgZWxlbWVudHMgd2l0aCBzeW50YXgtZm9sZGluZy4KKyAgICAiIE5PVEU6IE5PIEhJR0hMSUdIVElORyAtLSBoaWdobGlnaHRpbmcgaXMgZG9uZSBieSBjb250YWluZWQgZWxlbWVudHMKKyAgICAiCisgICAgIiBQUk9WSURFUzogQHhtbFJlZ2lvbkhvb2sKKyAgICAiCisgICAgIiBFWEFNUExFOgorICAgICIKKyAgICAiIDx0YWcgaWQ9Indob29wcyI+CisgICAgIiAgIDwhLS0gY29tbWVudCAtLT4KKyAgICAiICAgPGFub3RoZXIudGFnPjwvYW5vdGhlci50YWc+CisgICAgIiAgIDxlbXB0eS50YWcvPgorICAgICIgICBzb21lIGRhdGEKKyAgICAiIDwvdGFnPgorICAgICIKKyAgICBzeW4gcmVnaW9uICAgeG1sUmVnaW9uCisJXCBzdGFydD0rPFx6KFteIC8hPzw+IiddXCtcKSsKKwlcIHNraXA9KzwhLS1cXy5cey19LS0+KworCVwgZW5kPSs8L1x6MVxfXHNcey19PisKKwlcIG1hdGNoZ3JvdXA9eG1sRW5kVGFnIGVuZD0rLz4rCisJXCBmb2xkCisJXCBjb250YWlucz14bWxUYWcseG1sRW5kVGFnLHhtbENkYXRhLHhtbFJlZ2lvbix4bWxDb21tZW50LHhtbEVudGl0eSx4bWxQcm9jZXNzaW5nLEB4bWxSZWdpb25Ib29rCisJXCBrZWVwZW5kCisJXCBleHRlbmQKKworZWxzZQorCisgICAgIiBubyBzeW50YXggZm9sZGluZzoKKyAgICAiIC0gY29udGFpbmVkIGF0dHJpYnV0ZSByZW1vdmVkCisgICAgIiAtIHhtbFJlZ2lvbiBub3QgZGVmaW5lZAorICAgICIKKyAgICBzeW4gcmVnaW9uICAgeG1sVGFnCisJXCBtYXRjaGdyb3VwPXhtbFRhZyBzdGFydD0rPFteIC8hPzw+IiddXEA9KworCVwgbWF0Y2hncm91cD14bWxUYWcgZW5kPSs+KworCVwgY29udGFpbnM9eG1sRXJyb3IseG1sVGFnTmFtZSx4bWxBdHRyaWIseG1sRXF1YWwseG1sU3RyaW5nLEB4bWxTdGFydFRhZ0hvb2sKKworICAgIHN5biBtYXRjaCAgIHhtbEVuZFRhZworCVwgKzwvW14gLyE/PD4iJ11cKz4rCisJXCBjb250YWlucz14bWxOYW1lc3BhY2UseG1sQXR0cmliUHVuY3QsQHhtbFRhZ0hvb2sKKworZW5kaWYKKworCisiICZlbnRpdGllczsgY29tcGFyZSB3aXRoIGR0ZAorc3luIG1hdGNoICAgeG1sRW50aXR5ICAgICAgICAgICAgICAgICAiJlteOyBcdF0qOyIgY29udGFpbnM9eG1sRW50aXR5UHVuY3QKK3N5biBtYXRjaCAgIHhtbEVudGl0eVB1bmN0ICBjb250YWluZWQgIlsmLjtdIgorCitpZiBleGlzdHMoJ2c6eG1sX3N5bnRheF9mb2xkaW5nJykKKworICAgICIgVGhlIHJlYWwgY29tbWVudHMgKHRoaXMgaW1wbGVtZW50cyB0aGUgY29tbWVudHMgYXMgZGVmaW5lZCBieSB4bWwsCisgICAgIiBidXQgbm90IGFsbCB4bWwgcGFnZXMgYWN0dWFsbHkgY29uZm9ybSB0byBpdC4gRXJyb3JzIGFyZSBmbGFnZ2VkLgorICAgIHN5biByZWdpb24gIHhtbENvbW1lbnQKKwlcIHN0YXJ0PSs8ISsKKwlcIGVuZD0rPisKKwlcIGNvbnRhaW5zPXhtbENvbW1lbnRQYXJ0LHhtbENvbW1lbnRFcnJvcgorCVwgZXh0ZW5kCisJXCBmb2xkCisKK2Vsc2UKKworICAgICIgbm8gc3ludGF4IGZvbGRpbmc6CisgICAgIiAtIGZvbGQgYXR0cmlidXRlIHJlbW92ZWQKKyAgICAiCisgICAgc3luIHJlZ2lvbiAgeG1sQ29tbWVudAorCVwgc3RhcnQ9KzwhKworCVwgZW5kPSs+KworCVwgY29udGFpbnM9eG1sQ29tbWVudFBhcnQseG1sQ29tbWVudEVycm9yCisJXCBleHRlbmQKKworZW5kaWYKKworc3luIGtleXdvcmQgeG1sVG9kbyAgICAgICAgIGNvbnRhaW5lZCBUT0RPIEZJWE1FIFhYWCBkaXNwbGF5CitzeW4gbWF0Y2ggICB4bWxDb21tZW50RXJyb3IgY29udGFpbmVkICJbXj48IV0iCitzeW4gcmVnaW9uICB4bWxDb21tZW50UGFydAorICAgIFwgc3RhcnQ9Ky0tKworICAgIFwgZW5kPSstLSsKKyAgICBcIGNvbnRhaW5lZAorICAgIFwgY29udGFpbnM9eG1sVG9kbyxAeG1sQ29tbWVudEhvb2sKKworCisiIENEYXRhIHNlY3Rpb25zCisiCisiIFBST1ZJREVTOiBAeG1sQ2RhdGFIb29rCisiCitzeW4gcmVnaW9uICAgIHhtbENkYXRhCisgICAgXCBzdGFydD0rPCFcW0NEQVRBXFsrCisgICAgXCBlbmQ9K11dPisKKyAgICBcIGNvbnRhaW5zPXhtbENkYXRhU3RhcnQseG1sQ2RhdGFFbmQsQHhtbENkYXRhSG9vaworICAgIFwga2VlcGVuZAorICAgIFwgZXh0ZW5kCisKKyIgdXNpbmcgdGhlIGZvbGxvd2luZyBsaW5lIGluc3RlYWQgbGVhZHMgdG8gY29ycnVwdCBmb2xkaW5nIGF0IENEQVRBIHJlZ2lvbnMKKyIgc3luIG1hdGNoICAgIHhtbENkYXRhICAgICAgKzwhXFtDREFUQVxbXF8uXHstfV1dPisgIGNvbnRhaW5zPXhtbENkYXRhU3RhcnQseG1sQ2RhdGFFbmQsQHhtbENkYXRhSG9vaworc3luIG1hdGNoICAgIHhtbENkYXRhU3RhcnQgKzwhXFtDREFUQVxbKyAgY29udGFpbmVkIGNvbnRhaW5zPXhtbENkYXRhQ2RhdGEKK3N5biBrZXl3b3JkICB4bWxDZGF0YUNkYXRhIENEQVRBICAgICAgICAgIGNvbnRhaW5lZAorc3luIG1hdGNoICAgIHhtbENkYXRhRW5kICAgK11dPisgICAgICAgICAgY29udGFpbmVkCisKKworIiBQcm9jZXNzaW5nIGluc3RydWN0aW9ucworIiBUaGlzIGFsbG93cyAiPz4iIGluc2lkZSBzdHJpbmdzIC0tIGdvb2QgaWRlYT8KK3N5biByZWdpb24gIHhtbFByb2Nlc3NpbmcgbWF0Y2hncm91cD14bWxQcm9jZXNzaW5nRGVsaW0gc3RhcnQ9Ijw/IiBlbmQ9Ij8+IiBjb250YWlucz14bWxBdHRyaWIseG1sRXF1YWwseG1sU3RyaW5nCisKKworaWYgZXhpc3RzKCdnOnhtbF9zeW50YXhfZm9sZGluZycpCisKKyAgICAiIERURCAtLSB3ZSB1c2UgZHRkLnZpbSBoZXJlCisgICAgc3luIHJlZ2lvbiAgeG1sRG9jVHlwZSBtYXRjaGdyb3VwPXhtbERvY1R5cGVEZWNsCisJXCBzdGFydD0iPCFET0NUWVBFImhlPXMrMixycz1zKzIgZW5kPSI+IgorCVwgZm9sZAorCVwgY29udGFpbnM9eG1sRG9jVHlwZUtleXdvcmQseG1sSW5saW5lRFRELHhtbFN0cmluZworZWxzZQorCisgICAgIiBubyBzeW50YXggZm9sZGluZzoKKyAgICAiIC0gZm9sZCBhdHRyaWJ1dGUgcmVtb3ZlZAorICAgICIKKyAgICBzeW4gcmVnaW9uICB4bWxEb2NUeXBlIG1hdGNoZ3JvdXA9eG1sRG9jVHlwZURlY2wKKwlcIHN0YXJ0PSI8IURPQ1RZUEUiaGU9cysyLHJzPXMrMiBlbmQ9Ij4iCisJXCBjb250YWlucz14bWxEb2NUeXBlS2V5d29yZCx4bWxJbmxpbmVEVEQseG1sU3RyaW5nCisKK2VuZGlmCisKK3N5biBrZXl3b3JkIHhtbERvY1R5cGVLZXl3b3JkIGNvbnRhaW5lZCBET0NUWVBFIFBVQkxJQyBTWVNURU0KK3N5biByZWdpb24gIHhtbElubGluZURURCBjb250YWluZWQgbWF0Y2hncm91cD14bWxEb2NUeXBlRGVjbCBzdGFydD0iXFsiIGVuZD0iXSIgY29udGFpbnM9QHhtbERURAorc3luIGluY2x1ZGUgQHhtbERURCA8c2ZpbGU+OnA6aC9kdGQudmltCit1bmxldCBiOmN1cnJlbnRfc3ludGF4CisKKworIiBzeW5jaHJvbml6aW5nCisiIFRPRE8gISEhIHRvIGJlIGltcHJvdmVkICEhIQorCitzeW4gc3luYyBtYXRjaCB4bWxTeW5jRFQgZ3JvdXBoZXJlICB4bWxEb2NUeXBlICtcXy5cKDwhRE9DVFlQRVwpXEA9KworIiBzeW4gc3luYyBtYXRjaCB4bWxTeW5jRFQgZ3JvdXB0aGVyZSAgTk9ORSAgICAgICArXT4rCisKK2lmIGV4aXN0cygnZzp4bWxfc3ludGF4X2ZvbGRpbmcnKQorICAgIHN5biBzeW5jIG1hdGNoIHhtbFN5bmMgZ3JvdXBoZXJlICAgeG1sUmVnaW9uICArXF8uXCg8W14gLyE/PD4iJ11cK1wpXEA9KworICAgICIgc3luIHN5bmMgbWF0Y2ggeG1sU3luYyBncm91cGhlcmUgIHhtbFJlZ2lvbiAiPFteIC8hPzw+IiddKj4iCisgICAgc3luIHN5bmMgbWF0Y2ggeG1sU3luYyBncm91cHRoZXJlICB4bWxSZWdpb24gICs8L1teIC8hPzw+IiddXCs+KworZW5kaWYKKworc3luIHN5bmMgbWlubGluZXM9MTAwCisKKworIiBUaGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCitoaSBkZWYgbGluayB4bWxUb2RvCQlUb2RvCitoaSBkZWYgbGluayB4bWxUYWcJCUZ1bmN0aW9uCitoaSBkZWYgbGluayB4bWxUYWdOYW1lCQlGdW5jdGlvbgoraGkgZGVmIGxpbmsgeG1sRW5kVGFnCQlJZGVudGlmaWVyCitpZiAhZXhpc3RzKCJnOnhtbF9uYW1lc3BhY2VfdHJhbnNwYXJlbnQiKQorICAgIGhpIGRlZiBsaW5rIHhtbE5hbWVzcGFjZQlUYWcKK2VuZGlmCitoaSBkZWYgbGluayB4bWxFbnRpdHkJCVN0YXRlbWVudAoraGkgZGVmIGxpbmsgeG1sRW50aXR5UHVuY3QJVHlwZQorCitoaSBkZWYgbGluayB4bWxBdHRyaWJQdW5jdAlDb21tZW50CitoaSBkZWYgbGluayB4bWxBdHRyaWIJCVR5cGUKKworaGkgZGVmIGxpbmsgeG1sU3RyaW5nCQlTdHJpbmcKK2hpIGRlZiBsaW5rIHhtbENvbW1lbnQJCUNvbW1lbnQKK2hpIGRlZiBsaW5rIHhtbENvbW1lbnRQYXJ0CUNvbW1lbnQKK2hpIGRlZiBsaW5rIHhtbENvbW1lbnRFcnJvcglFcnJvcgoraGkgZGVmIGxpbmsgeG1sRXJyb3IJCUVycm9yCisKK2hpIGRlZiBsaW5rIHhtbFByb2Nlc3NpbmdEZWxpbQlDb21tZW50CitoaSBkZWYgbGluayB4bWxQcm9jZXNzaW5nCVR5cGUKKworaGkgZGVmIGxpbmsgeG1sQ2RhdGEJCVN0cmluZworaGkgZGVmIGxpbmsgeG1sQ2RhdGFDZGF0YQlTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIHhtbENkYXRhU3RhcnQJVHlwZQoraGkgZGVmIGxpbmsgeG1sQ2RhdGFFbmQJCVR5cGUKKworaGkgZGVmIGxpbmsgeG1sRG9jVHlwZURlY2wJRnVuY3Rpb24KK2hpIGRlZiBsaW5rIHhtbERvY1R5cGVLZXl3b3JkCVN0YXRlbWVudAoraGkgZGVmIGxpbmsgeG1sSW5saW5lRFRECUZ1bmN0aW9uCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInhtbCIKKworbGV0ICZjcG8gPSBzOnhtbF9jcG9fc2F2ZQordW5sZXQgczp4bWxfY3BvX3NhdmUKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3htb2RtYXAudmltIGIvcnVudGltZS9zeW50YXgveG1vZG1hcC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyMTg4NAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3htb2RtYXAudmltCkBAIC0wLDAgKzEsMTcyIEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJICAgIHhtb2RtYXAgZGVmaW5pdGlvbiBmaWxlCisiIE1haW50YWluZXI6CSAgICBOaWtvbGFpIFdlaWJ1bGwgPHNvdXJjZUBwY3Bwb3BwZXIub3JnPgorIiBVUkw6CQkgICAgaHR0cDovL3d3dy5wY3Bwb3BwZXIub3JnL3ZpbS9zeW50YXgvcGNwL3htb2RtYXAvCisiIExhdGVzdCBSZXZpc2lvbjogIDIwMDQtMDUtMjIKKyIgYXJjaC10YWc6CSAgICA4YzM3ZWQ0MS02NTVhLTQ3OWQtODA1MC1lMTVkYzY3NzAzMzgKKworaWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKKyIgY29tbWVudHMKK3N5biByZWdpb24gIHhtb2RtYXBDb21tZW50CWRpc3BsYXkgb25lbGluZSBtYXRjaGdyb3VwPXhtb2RtYXBDb21tZW50IHN0YXJ0PS9eIS8gZW5kPS8kLyBjb250YWlucz14bW9kbWFwVG9kbworCisiIHRvZG8KK3N5biBrZXl3b3JkIHhtb2RtYXBUb2RvCQljb250YWluZWQgVE9ETyBGSVhNRSBYWFggTk9URQorCisiIG51bWJlcnMKK3N5biBjYXNlIGlnbm9yZQorc3luIG1hdGNoICAgeG1vZG1hcEludAkJZGlzcGxheSAiXDxcZFwrXD4iCitzeW4gbWF0Y2ggICB4bW9kbWFwSGV4CQlkaXNwbGF5ICJcPDB4XHhcK1w+Igorc3luIG1hdGNoICAgeG1vZG1hcE9jdGFsCWRpc3BsYXkgIlw8MFxvXCtcPiIKK3N5biBtYXRjaCAgIHhtb2RtYXBPY3RhbEVycm9yCWRpc3BsYXkgIlw8MFxvKls4OV1cZCoiCitzeW4gY2FzZSBtYXRjaAorCisiIGtleXN5bXMgKHRha2VuIGZyb20gPFgxMS9rZXlzeW1kZWYuaD4pCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCVZvaWRTeW1ib2wgQmFja1NwYWNlIFRhYiBMaW5lZmVlZCBDbGVhciBSZXR1cm4gUGF1c2UgU2Nyb2xsX0xvY2sgU3lzX1JlcSBFc2NhcGUgRGVsZXRlIE11bHRpX2tleSBDb2RlaW5wdXQgU2luZ2xlQ2FuZGlkYXRlIE11bHRpcGxlQ2FuZGlkYXRlCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCVByZXZpb3VzQ2FuZGlkYXRlIEthbmppIE11aGVua2FuIEhlbmthbl9Nb2RlIEhlbmthbiBSb21hamkgSGlyYWdhbmEgS2F0YWthbmEgSGlyYWdhbmFfS2F0YWthbmEgWmVua2FrdSBIYW5rYWt1IFplbmtha3VfSGFua2FrdSBUb3Vyb2t1IE1hc3N5byBLYW5hX0xvY2sKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JS2FuYV9TaGlmdCBFaXN1X1NoaWZ0IEVpc3VfdG9nZ2xlIEthbmppX0JhbmdvdSBaZW5fS29obyBNYWVfS29obyBIb21lIExlZnQgVXAgUmlnaHQgRG93biBQcmlvciBQYWdlX1VwIE5leHQgUGFnZV9Eb3duCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUVuZCBCZWdpbiBTZWxlY3QgUHJpbnQgRXhlY3V0ZSBJbnNlcnQgVW5kbyBSZWRvIE1lbnUgRmluZCBDYW5jZWwgSGVscCBCcmVhayBNb2RlX3N3aXRjaCBzY3JpcHRfc3dpdGNoCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCU51bV9Mb2NrIEtQX1NwYWNlIEtQX1RhYiBLUF9FbnRlciBLUF9GMSBLUF9GMiBLUF9GMyBLUF9GNCBLUF9Ib21lIEtQX0xlZnQgS1BfVXAgS1BfUmlnaHQgS1BfRG93biBLUF9QcmlvciBLUF9QYWdlX1VwCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUtQX05leHQgS1BfUGFnZV9Eb3duIEtQX0VuZCBLUF9CZWdpbiBLUF9JbnNlcnQgS1BfRGVsZXRlIEtQX0VxdWFsIEtQX011bHRpcGx5IEtQX0FkZCBLUF9TZXBhcmF0b3IgS1BfU3VidHJhY3QgS1BfRGVjaW1hbCBLUF9EaXZpZGUgS1BfMCBLUF8xCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUtQXzIgS1BfMyBLUF80IEtQXzUgS1BfNiBLUF83IEtQXzggS1BfOSBGMSBGMiBGMyBGNCBGNSBGNiBGNworc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlGOCBGOSBGMTAgRjExIEwxIEYxMiBMMiBGMTMgTDMgRjE0IEw0IEYxNSBMNSBGMTYgTDYKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JRjE3IEw3IEYxOCBMOCBGMTkgTDkgRjIwIEwxMCBGMjEgUjEgRjIyIFIyIEYyMyBSMyBGMjQKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JUjQgRjI1IFI1IEYyNiBSNiBGMjcgUjcgRjI4IFI4IEYyOSBSOSBGMzAgUjEwIEYzMSBSMTEKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JRjMyIFIxMiBGMzMgUjEzIEYzNCBSMTQgRjM1IFIxNSBTaGlmdF9MIFNoaWZ0X1IgQ29udHJvbF9MIENvbnRyb2xfUiBDYXBzX0xvY2sgU2hpZnRfTG9jayBNZXRhX0wKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JTWV0YV9SIEFsdF9MIEFsdF9SIFN1cGVyX0wgU3VwZXJfUiBIeXBlcl9MIEh5cGVyX1IgSVNPX0xvY2sgSVNPX0xldmVsMl9MYXRjaCBJU09fTGV2ZWwzX1NoaWZ0IElTT19MZXZlbDNfTGF0Y2ggSVNPX0xldmVsM19Mb2NrIElTT19Hcm91cF9TaGlmdCBJU09fR3JvdXBfTGF0Y2ggSVNPX0dyb3VwX0xvY2sKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JSVNPX05leHRfR3JvdXAgSVNPX05leHRfR3JvdXBfTG9jayBJU09fUHJldl9Hcm91cCBJU09fUHJldl9Hcm91cF9Mb2NrIElTT19GaXJzdF9Hcm91cCBJU09fRmlyc3RfR3JvdXBfTG9jayBJU09fTGFzdF9Hcm91cCBJU09fTGFzdF9Hcm91cF9Mb2NrIElTT19MZWZ0X1RhYiBJU09fTW92ZV9MaW5lX1VwIElTT19Nb3ZlX0xpbmVfRG93biBJU09fUGFydGlhbF9MaW5lX1VwIElTT19QYXJ0aWFsX0xpbmVfRG93biBJU09fUGFydGlhbF9TcGFjZV9MZWZ0IElTT19QYXJ0aWFsX1NwYWNlX1JpZ2h0CitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUlTT19TZXRfTWFyZ2luX0xlZnQgSVNPX1NldF9NYXJnaW5fUmlnaHQgSVNPX1JlbGVhc2VfTWFyZ2luX0xlZnQgSVNPX1JlbGVhc2VfTWFyZ2luX1JpZ2h0IElTT19SZWxlYXNlX0JvdGhfTWFyZ2lucyBJU09fRmFzdF9DdXJzb3JfTGVmdCBJU09fRmFzdF9DdXJzb3JfUmlnaHQgSVNPX0Zhc3RfQ3Vyc29yX1VwIElTT19GYXN0X0N1cnNvcl9Eb3duIElTT19Db250aW51b3VzX1VuZGVybGluZSBJU09fRGlzY29udGludW91c19VbmRlcmxpbmUgSVNPX0VtcGhhc2l6ZSBJU09fQ2VudGVyX09iamVjdCBJU09fRW50ZXIgZGVhZF9ncmF2ZQorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlkZWFkX2FjdXRlIGRlYWRfY2lyY3VtZmxleCBkZWFkX3RpbGRlIGRlYWRfbWFjcm9uIGRlYWRfYnJldmUgZGVhZF9hYm92ZWRvdCBkZWFkX2RpYWVyZXNpcyBkZWFkX2Fib3ZlcmluZyBkZWFkX2RvdWJsZWFjdXRlIGRlYWRfY2Fyb24gZGVhZF9jZWRpbGxhIGRlYWRfb2dvbmVrIGRlYWRfaW90YSBkZWFkX3ZvaWNlZF9zb3VuZCBkZWFkX3NlbWl2b2ljZWRfc291bmQKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JZGVhZF9iZWxvd2RvdCBkZWFkX2hvb2sgZGVhZF9ob3JuIEZpcnN0X1ZpcnR1YWxfU2NyZWVuIFByZXZfVmlydHVhbF9TY3JlZW4gTmV4dF9WaXJ0dWFsX1NjcmVlbiBMYXN0X1ZpcnR1YWxfU2NyZWVuIFRlcm1pbmF0ZV9TZXJ2ZXIgQWNjZXNzWF9FbmFibGUgQWNjZXNzWF9GZWVkYmFja19FbmFibGUgUmVwZWF0S2V5c19FbmFibGUgU2xvd0tleXNfRW5hYmxlIEJvdW5jZUtleXNfRW5hYmxlIFN0aWNreUtleXNfRW5hYmxlIE1vdXNlS2V5c19FbmFibGUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JTW91c2VLZXlzX0FjY2VsX0VuYWJsZSBPdmVybGF5MV9FbmFibGUgT3ZlcmxheTJfRW5hYmxlIEF1ZGlibGVCZWxsX0VuYWJsZSBQb2ludGVyX0xlZnQgUG9pbnRlcl9SaWdodCBQb2ludGVyX1VwIFBvaW50ZXJfRG93biBQb2ludGVyX1VwTGVmdCBQb2ludGVyX1VwUmlnaHQgUG9pbnRlcl9Eb3duTGVmdCBQb2ludGVyX0Rvd25SaWdodCBQb2ludGVyX0J1dHRvbl9EZmx0IFBvaW50ZXJfQnV0dG9uMSBQb2ludGVyX0J1dHRvbjIKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JUG9pbnRlcl9CdXR0b24zIFBvaW50ZXJfQnV0dG9uNCBQb2ludGVyX0J1dHRvbjUgUG9pbnRlcl9EYmxDbGlja19EZmx0IFBvaW50ZXJfRGJsQ2xpY2sxIFBvaW50ZXJfRGJsQ2xpY2syIFBvaW50ZXJfRGJsQ2xpY2szIFBvaW50ZXJfRGJsQ2xpY2s0IFBvaW50ZXJfRGJsQ2xpY2s1IFBvaW50ZXJfRHJhZ19EZmx0IFBvaW50ZXJfRHJhZzEgUG9pbnRlcl9EcmFnMiBQb2ludGVyX0RyYWczIFBvaW50ZXJfRHJhZzQgUG9pbnRlcl9EcmFnNQorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlQb2ludGVyX0VuYWJsZUtleXMgUG9pbnRlcl9BY2NlbGVyYXRlIFBvaW50ZXJfRGZsdEJ0bk5leHQgUG9pbnRlcl9EZmx0QnRuUHJldiAzMjcwX0R1cGxpY2F0ZSAzMjcwX0ZpZWxkTWFyayAzMjcwX1JpZ2h0MiAzMjcwX0xlZnQyIDMyNzBfQmFja1RhYiAzMjcwX0VyYXNlRU9GIDMyNzBfRXJhc2VJbnB1dCAzMjcwX1Jlc2V0IDMyNzBfUXVpdCAzMjcwX1BBMSAzMjcwX1BBMgorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQkzMjcwX1BBMyAzMjcwX1Rlc3QgMzI3MF9BdHRuIDMyNzBfQ3Vyc29yQmxpbmsgMzI3MF9BbHRDdXJzb3IgMzI3MF9LZXlDbGljayAzMjcwX0p1bXAgMzI3MF9JZGVudCAzMjcwX1J1bGUgMzI3MF9Db3B5IDMyNzBfUGxheSAzMjcwX1NldHVwIDMyNzBfUmVjb3JkIDMyNzBfQ2hhbmdlU2NyZWVuIDMyNzBfRGVsZXRlV29yZAorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQkzMjcwX0V4U2VsZWN0IDMyNzBfQ3Vyc29yU2VsZWN0IDMyNzBfUHJpbnRTY3JlZW4gMzI3MF9FbnRlciBzcGFjZSBleGNsYW0gcXVvdGVkYmwgbnVtYmVyc2lnbiBkb2xsYXIgcGVyY2VudCBhbXBlcnNhbmQgYXBvc3Ryb3BoZSBxdW90ZXJpZ2h0IHBhcmVubGVmdCBwYXJlbnJpZ2h0CitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWFzdGVyaXNrIHBsdXMgY29tbWEgbWludXMgcGVyaW9kIHNsYXNoIDAgMSAyIDMgNCA1IDYgNyA4CitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCTkgY29sb24gc2VtaWNvbG9uIGxlc3MgZXF1YWwgZ3JlYXRlciBxdWVzdGlvbiBhdCBBIEIgQyBEIEUgRiBHCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCVcgWCBZIFogYnJhY2tldGxlZnQgYmFja3NsYXNoIGJyYWNrZXRyaWdodCBhc2NpaWNpcmN1bSB1bmRlcnNjb3JlIGdyYXZlIHF1b3RlbGVmdCBhIGIgYyBkCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCXQgdSB2IHcgeCB5IHogYnJhY2VsZWZ0IGJhciBicmFjZXJpZ2h0IGFzY2lpdGlsZGUgbm9icmVha3NwYWNlIGV4Y2xhbWRvd24gY2VudCBzdGVybGluZworc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQljdXJyZW5jeSB5ZW4gYnJva2VuYmFyIHNlY3Rpb24gZGlhZXJlc2lzIGNvcHlyaWdodCBvcmRmZW1pbmluZSBndWlsbGVtb3RsZWZ0IG5vdHNpZ24gaHlwaGVuIHJlZ2lzdGVyZWQgbWFjcm9uIGRlZ3JlZSBwbHVzbWludXMgdHdvc3VwZXJpb3IKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JdGhyZWVzdXBlcmlvciBhY3V0ZSBtdSBwYXJhZ3JhcGggcGVyaW9kY2VudGVyZWQgY2VkaWxsYSBvbmVzdXBlcmlvciBtYXNjdWxpbmUgZ3VpbGxlbW90cmlnaHQgb25lcXVhcnRlciBvbmVoYWxmIHRocmVlcXVhcnRlcnMgcXVlc3Rpb25kb3duIEFncmF2ZSBBYWN1dGUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JQWNpcmN1bWZsZXggQXRpbGRlIEFkaWFlcmVzaXMgQXJpbmcgQUUgQ2NlZGlsbGEgRWdyYXZlIEVhY3V0ZSBFY2lyY3VtZmxleCBFZGlhZXJlc2lzIElncmF2ZSBJYWN1dGUgSWNpcmN1bWZsZXggSWRpYWVyZXNpcyBFVEgKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JRXRoIE50aWxkZSBPZ3JhdmUgT2FjdXRlIE9jaXJjdW1mbGV4IE90aWxkZSBPZGlhZXJlc2lzIG11bHRpcGx5IE9vYmxpcXVlIE9zbGFzaCBVZ3JhdmUgVWFjdXRlIFVjaXJjdW1mbGV4IFVkaWFlcmVzaXMgWWFjdXRlCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCVRIT1JOIFRob3JuIHNzaGFycCBhZ3JhdmUgYWFjdXRlIGFjaXJjdW1mbGV4IGF0aWxkZSBhZGlhZXJlc2lzIGFyaW5nIGFlIGNjZWRpbGxhIGVncmF2ZSBlYWN1dGUgZWNpcmN1bWZsZXggZWRpYWVyZXNpcworc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlpZ3JhdmUgaWFjdXRlIGljaXJjdW1mbGV4IGlkaWFlcmVzaXMgZXRoIG50aWxkZSBvZ3JhdmUgb2FjdXRlIG9jaXJjdW1mbGV4IG90aWxkZSBvZGlhZXJlc2lzIGRpdmlzaW9uIG9zbGFzaCBvb2JsaXF1ZSB1Z3JhdmUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JdWFjdXRlIHVjaXJjdW1mbGV4IHVkaWFlcmVzaXMgeWFjdXRlIHRob3JuIHlkaWFlcmVzaXMgQW9nb25layBicmV2ZSBMc3Ryb2tlIExjYXJvbiBTYWN1dGUgU2Nhcm9uIFNjZWRpbGxhIFRjYXJvbiBaYWN1dGUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JWmNhcm9uIFphYm92ZWRvdCBhb2dvbmVrIG9nb25layBsc3Ryb2tlIGxjYXJvbiBzYWN1dGUgY2Fyb24gc2Nhcm9uIHNjZWRpbGxhIHRjYXJvbiB6YWN1dGUgZG91YmxlYWN1dGUgemNhcm9uIHphYm92ZWRvdAorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlSYWN1dGUgQWJyZXZlIExhY3V0ZSBDYWN1dGUgQ2Nhcm9uIEVvZ29uZWsgRWNhcm9uIERjYXJvbiBEc3Ryb2tlIE5hY3V0ZSBOY2Fyb24gT2RvdWJsZWFjdXRlIFJjYXJvbiBVcmluZyBVZG91YmxlYWN1dGUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JVGNlZGlsbGEgcmFjdXRlIGFicmV2ZSBsYWN1dGUgY2FjdXRlIGNjYXJvbiBlb2dvbmVrIGVjYXJvbiBkY2Fyb24gZHN0cm9rZSBuYWN1dGUgbmNhcm9uIG9kb3VibGVhY3V0ZSB1ZG91YmxlYWN1dGUgcmNhcm9uCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCXVyaW5nIHRjZWRpbGxhIGFib3ZlZG90IEhzdHJva2UgSGNpcmN1bWZsZXggSWFib3ZlZG90IEdicmV2ZSBKY2lyY3VtZmxleCBoc3Ryb2tlIGhjaXJjdW1mbGV4IGlkb3RsZXNzIGdicmV2ZSBqY2lyY3VtZmxleCBDYWJvdmVkb3QgQ2NpcmN1bWZsZXgKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JR2Fib3ZlZG90IEdjaXJjdW1mbGV4IFVicmV2ZSBTY2lyY3VtZmxleCBjYWJvdmVkb3QgY2NpcmN1bWZsZXggZ2Fib3ZlZG90IGdjaXJjdW1mbGV4IHVicmV2ZSBzY2lyY3VtZmxleCBrcmEga2FwcGEgUmNlZGlsbGEgSXRpbGRlIExjZWRpbGxhCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUVtYWNyb24gR2NlZGlsbGEgVHNsYXNoIHJjZWRpbGxhIGl0aWxkZSBsY2VkaWxsYSBlbWFjcm9uIGdjZWRpbGxhIHRzbGFzaCBFTkcgZW5nIEFtYWNyb24gSW9nb25layBFYWJvdmVkb3QgSW1hY3Jvbgorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlOY2VkaWxsYSBPbWFjcm9uIEtjZWRpbGxhIFVvZ29uZWsgVXRpbGRlIFVtYWNyb24gYW1hY3JvbiBpb2dvbmVrIGVhYm92ZWRvdCBpbWFjcm9uIG5jZWRpbGxhIG9tYWNyb24ga2NlZGlsbGEgdW9nb25layB1dGlsZGUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JdW1hY3JvbiBCYWJvdmVkb3QgYmFib3ZlZG90IERhYm92ZWRvdCBXZ3JhdmUgV2FjdXRlIGRhYm92ZWRvdCBZZ3JhdmUgRmFib3ZlZG90IGZhYm92ZWRvdCBNYWJvdmVkb3QgbWFib3ZlZG90IFBhYm92ZWRvdCB3Z3JhdmUgcGFib3ZlZG90CitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCXdhY3V0ZSBTYWJvdmVkb3QgeWdyYXZlIFdkaWFlcmVzaXMgd2RpYWVyZXNpcyBzYWJvdmVkb3QgV2NpcmN1bWZsZXggVGFib3ZlZG90IFljaXJjdW1mbGV4IHdjaXJjdW1mbGV4IHRhYm92ZWRvdCB5Y2lyY3VtZmxleCBPRSBvZSBZZGlhZXJlc2lzCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCW92ZXJsaW5lIGthbmFfZnVsbHN0b3Aga2FuYV9vcGVuaW5nYnJhY2tldCBrYW5hX2Nsb3NpbmdicmFja2V0IGthbmFfY29tbWEga2FuYV9jb25qdW5jdGl2ZSBrYW5hX21pZGRsZWRvdCBrYW5hX1dPIGthbmFfYSBrYW5hX2kga2FuYV91IGthbmFfZSBrYW5hX28ga2FuYV95YSBrYW5hX3l1CitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWthbmFfeW8ga2FuYV90c3Uga2FuYV90dSBwcm9sb25nZWRzb3VuZCBrYW5hX0Ega2FuYV9JIGthbmFfVSBrYW5hX0Uga2FuYV9PIGthbmFfS0Ega2FuYV9LSSBrYW5hX0tVIGthbmFfS0Uga2FuYV9LTyBrYW5hX1NBCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWthbmFfU0hJIGthbmFfU1Uga2FuYV9TRSBrYW5hX1NPIGthbmFfVEEga2FuYV9DSEkga2FuYV9USSBrYW5hX1RTVSBrYW5hX1RVIGthbmFfVEUga2FuYV9UTyBrYW5hX05BIGthbmFfTkkga2FuYV9OVSBrYW5hX05FCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWthbmFfTk8ga2FuYV9IQSBrYW5hX0hJIGthbmFfRlUga2FuYV9IVSBrYW5hX0hFIGthbmFfSE8ga2FuYV9NQSBrYW5hX01JIGthbmFfTVUga2FuYV9NRSBrYW5hX01PIGthbmFfWUEga2FuYV9ZVSBrYW5hX1lPCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWthbmFfUkEga2FuYV9SSSBrYW5hX1JVIGthbmFfUkUga2FuYV9STyBrYW5hX1dBIGthbmFfTiB2b2ljZWRzb3VuZCBzZW1pdm9pY2Vkc291bmQga2FuYV9zd2l0Y2ggRmFyc2lfMCBGYXJzaV8xIEZhcnNpXzIgRmFyc2lfMyBGYXJzaV80CitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUZhcnNpXzUgRmFyc2lfNiBGYXJzaV83IEZhcnNpXzggRmFyc2lfOSBBcmFiaWNfcGVyY2VudCBBcmFiaWNfc3VwZXJzY3JpcHRfYWxlZiBBcmFiaWNfdHRlaCBBcmFiaWNfcGVoIEFyYWJpY190Y2hlaCBBcmFiaWNfZGRhbCBBcmFiaWNfcnJlaCBBcmFiaWNfY29tbWEgQXJhYmljX2Z1bGxzdG9wIEFyYWJpY18wCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUFyYWJpY18xIEFyYWJpY18yIEFyYWJpY18zIEFyYWJpY180IEFyYWJpY181IEFyYWJpY182IEFyYWJpY183IEFyYWJpY184IEFyYWJpY185IEFyYWJpY19zZW1pY29sb24gQXJhYmljX3F1ZXN0aW9uX21hcmsgQXJhYmljX2hhbXphIEFyYWJpY19tYWRkYW9uYWxlZiBBcmFiaWNfaGFtemFvbmFsZWYgQXJhYmljX2hhbXphb253YXcKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JQXJhYmljX2hhbXphdW5kZXJhbGVmIEFyYWJpY19oYW16YW9ueWVoIEFyYWJpY19hbGVmIEFyYWJpY19iZWggQXJhYmljX3RlaG1hcmJ1dGEgQXJhYmljX3RlaCBBcmFiaWNfdGhlaCBBcmFiaWNfamVlbSBBcmFiaWNfaGFoIEFyYWJpY19raGFoIEFyYWJpY19kYWwgQXJhYmljX3RoYWwgQXJhYmljX3JhIEFyYWJpY196YWluIEFyYWJpY19zZWVuCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUFyYWJpY19zaGVlbiBBcmFiaWNfc2FkIEFyYWJpY19kYWQgQXJhYmljX3RhaCBBcmFiaWNfemFoIEFyYWJpY19haW4gQXJhYmljX2doYWluIEFyYWJpY190YXR3ZWVsIEFyYWJpY19mZWggQXJhYmljX3FhZiBBcmFiaWNfa2FmIEFyYWJpY19sYW0gQXJhYmljX21lZW0gQXJhYmljX25vb24gQXJhYmljX2hhCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUFyYWJpY19oZWggQXJhYmljX3dhdyBBcmFiaWNfYWxlZm1ha3N1cmEgQXJhYmljX3llaCBBcmFiaWNfZmF0aGF0YW4gQXJhYmljX2RhbW1hdGFuIEFyYWJpY19rYXNyYXRhbiBBcmFiaWNfZmF0aGEgQXJhYmljX2RhbW1hIEFyYWJpY19rYXNyYSBBcmFiaWNfc2hhZGRhIEFyYWJpY19zdWt1biBBcmFiaWNfbWFkZGFfYWJvdmUgQXJhYmljX2hhbXphX2Fib3ZlIEFyYWJpY19oYW16YV9iZWxvdworc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlBcmFiaWNfamVoIEFyYWJpY192ZWggQXJhYmljX2tlaGVoIEFyYWJpY19nYWYgQXJhYmljX25vb25fZ2h1bm5hIEFyYWJpY19oZWhfZG9hY2hhc2htZWUgRmFyc2lfeWVoIEFyYWJpY19mYXJzaV95ZWggQXJhYmljX3llaF9iYXJlZSBBcmFiaWNfaGVoX2dvYWwgQXJhYmljX3N3aXRjaCBDeXJpbGxpY19HSEVfYmFyIEN5cmlsbGljX2doZV9iYXIgQ3lyaWxsaWNfWkhFX2Rlc2NlbmRlciBDeXJpbGxpY196aGVfZGVzY2VuZGVyCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUN5cmlsbGljX0tBX2Rlc2NlbmRlciBDeXJpbGxpY19rYV9kZXNjZW5kZXIgQ3lyaWxsaWNfS0FfdmVydHN0cm9rZSBDeXJpbGxpY19rYV92ZXJ0c3Ryb2tlIEN5cmlsbGljX0VOX2Rlc2NlbmRlciBDeXJpbGxpY19lbl9kZXNjZW5kZXIgQ3lyaWxsaWNfVV9zdHJhaWdodCBDeXJpbGxpY191X3N0cmFpZ2h0IEN5cmlsbGljX1Vfc3RyYWlnaHRfYmFyIEN5cmlsbGljX3Vfc3RyYWlnaHRfYmFyIEN5cmlsbGljX0hBX2Rlc2NlbmRlciBDeXJpbGxpY19oYV9kZXNjZW5kZXIgQ3lyaWxsaWNfQ0hFX2Rlc2NlbmRlciBDeXJpbGxpY19jaGVfZGVzY2VuZGVyIEN5cmlsbGljX0NIRV92ZXJ0c3Ryb2tlCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUN5cmlsbGljX2NoZV92ZXJ0c3Ryb2tlIEN5cmlsbGljX1NISEEgQ3lyaWxsaWNfc2hoYSBDeXJpbGxpY19TQ0hXQSBDeXJpbGxpY19zY2h3YSBDeXJpbGxpY19JX21hY3JvbiBDeXJpbGxpY19pX21hY3JvbiBDeXJpbGxpY19PX2JhciBDeXJpbGxpY19vX2JhciBDeXJpbGxpY19VX21hY3JvbiBDeXJpbGxpY191X21hY3JvbiBTZXJiaWFuX2RqZSBNYWNlZG9uaWFfZ2plIEN5cmlsbGljX2lvIFVrcmFpbmlhbl9pZQorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlVa3Jhbmlhbl9qZSBNYWNlZG9uaWFfZHNlIFVrcmFpbmlhbl9pIFVrcmFuaWFuX2kgVWtyYWluaWFuX3lpIFVrcmFuaWFuX3lpIEN5cmlsbGljX2plIFNlcmJpYW5famUgQ3lyaWxsaWNfbGplIFNlcmJpYW5fbGplIEN5cmlsbGljX25qZSBTZXJiaWFuX25qZSBTZXJiaWFuX3RzaGUgTWFjZWRvbmlhX2tqZSBVa3JhaW5pYW5fZ2hlX3dpdGhfdXB0dXJuCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUJ5ZWxvcnVzc2lhbl9zaG9ydHUgQ3lyaWxsaWNfZHpoZSBTZXJiaWFuX2R6ZSBudW1lcm9zaWduIFNlcmJpYW5fREpFIE1hY2Vkb25pYV9HSkUgQ3lyaWxsaWNfSU8gVWtyYWluaWFuX0lFIFVrcmFuaWFuX0pFIE1hY2Vkb25pYV9EU0UgVWtyYWluaWFuX0kgVWtyYW5pYW5fSSBVa3JhaW5pYW5fWUkgVWtyYW5pYW5fWUkgQ3lyaWxsaWNfSkUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JU2VyYmlhbl9KRSBDeXJpbGxpY19MSkUgU2VyYmlhbl9MSkUgQ3lyaWxsaWNfTkpFIFNlcmJpYW5fTkpFIFNlcmJpYW5fVFNIRSBNYWNlZG9uaWFfS0pFIFVrcmFpbmlhbl9HSEVfV0lUSF9VUFRVUk4gQnllbG9ydXNzaWFuX1NIT1JUVSBDeXJpbGxpY19EWkhFIFNlcmJpYW5fRFpFIEN5cmlsbGljX3l1IEN5cmlsbGljX2EgQ3lyaWxsaWNfYmUgQ3lyaWxsaWNfdHNlCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUN5cmlsbGljX2RlIEN5cmlsbGljX2llIEN5cmlsbGljX2VmIEN5cmlsbGljX2doZSBDeXJpbGxpY19oYSBDeXJpbGxpY19pIEN5cmlsbGljX3Nob3J0aSBDeXJpbGxpY19rYSBDeXJpbGxpY19lbCBDeXJpbGxpY19lbSBDeXJpbGxpY19lbiBDeXJpbGxpY19vIEN5cmlsbGljX3BlIEN5cmlsbGljX3lhIEN5cmlsbGljX2VyCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUN5cmlsbGljX2VzIEN5cmlsbGljX3RlIEN5cmlsbGljX3UgQ3lyaWxsaWNfemhlIEN5cmlsbGljX3ZlIEN5cmlsbGljX3NvZnRzaWduIEN5cmlsbGljX3llcnUgQ3lyaWxsaWNfemUgQ3lyaWxsaWNfc2hhIEN5cmlsbGljX2UgQ3lyaWxsaWNfc2hjaGEgQ3lyaWxsaWNfY2hlIEN5cmlsbGljX2hhcmRzaWduIEN5cmlsbGljX1lVIEN5cmlsbGljX0EKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JQ3lyaWxsaWNfQkUgQ3lyaWxsaWNfVFNFIEN5cmlsbGljX0RFIEN5cmlsbGljX0lFIEN5cmlsbGljX0VGIEN5cmlsbGljX0dIRSBDeXJpbGxpY19IQSBDeXJpbGxpY19JIEN5cmlsbGljX1NIT1JUSSBDeXJpbGxpY19LQSBDeXJpbGxpY19FTCBDeXJpbGxpY19FTSBDeXJpbGxpY19FTiBDeXJpbGxpY19PIEN5cmlsbGljX1BFCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUN5cmlsbGljX1lBIEN5cmlsbGljX0VSIEN5cmlsbGljX0VTIEN5cmlsbGljX1RFIEN5cmlsbGljX1UgQ3lyaWxsaWNfWkhFIEN5cmlsbGljX1ZFIEN5cmlsbGljX1NPRlRTSUdOIEN5cmlsbGljX1lFUlUgQ3lyaWxsaWNfWkUgQ3lyaWxsaWNfU0hBIEN5cmlsbGljX0UgQ3lyaWxsaWNfU0hDSEEgQ3lyaWxsaWNfQ0hFIEN5cmlsbGljX0hBUkRTSUdOCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUdyZWVrX0FMUEhBYWNjZW50IEdyZWVrX0VQU0lMT05hY2NlbnQgR3JlZWtfRVRBYWNjZW50IEdyZWVrX0lPVEFhY2NlbnQgR3JlZWtfSU9UQWRpZXJlc2lzIEdyZWVrX0lPVEFkaWFlcmVzaXMgR3JlZWtfT01JQ1JPTmFjY2VudCBHcmVla19VUFNJTE9OYWNjZW50IEdyZWVrX1VQU0lMT05kaWVyZXNpcyBHcmVla19PTUVHQWFjY2VudCBHcmVla19hY2NlbnRkaWVyZXNpcyBHcmVla19ob3JpemJhciBHcmVla19hbHBoYWFjY2VudCBHcmVla19lcHNpbG9uYWNjZW50IEdyZWVrX2V0YWFjY2VudAorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlHcmVla19pb3RhYWNjZW50IEdyZWVrX2lvdGFkaWVyZXNpcyBHcmVla19pb3RhYWNjZW50ZGllcmVzaXMgR3JlZWtfb21pY3JvbmFjY2VudCBHcmVla191cHNpbG9uYWNjZW50IEdyZWVrX3Vwc2lsb25kaWVyZXNpcyBHcmVla191cHNpbG9uYWNjZW50ZGllcmVzaXMgR3JlZWtfb21lZ2FhY2NlbnQgR3JlZWtfQUxQSEEgR3JlZWtfQkVUQSBHcmVla19HQU1NQSBHcmVla19ERUxUQSBHcmVla19FUFNJTE9OIEdyZWVrX1pFVEEgR3JlZWtfRVRBCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUdyZWVrX1RIRVRBIEdyZWVrX0lPVEEgR3JlZWtfS0FQUEEgR3JlZWtfTEFNREEgR3JlZWtfTEFNQkRBIEdyZWVrX01VIEdyZWVrX05VIEdyZWVrX1hJIEdyZWVrX09NSUNST04gR3JlZWtfUEkgR3JlZWtfUkhPIEdyZWVrX1NJR01BIEdyZWVrX1RBVSBHcmVla19VUFNJTE9OIEdyZWVrX1BISQorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlHcmVla19DSEkgR3JlZWtfUFNJIEdyZWVrX09NRUdBIEdyZWVrX2FscGhhIEdyZWVrX2JldGEgR3JlZWtfZ2FtbWEgR3JlZWtfZGVsdGEgR3JlZWtfZXBzaWxvbiBHcmVla196ZXRhIEdyZWVrX2V0YSBHcmVla190aGV0YSBHcmVla19pb3RhIEdyZWVrX2thcHBhIEdyZWVrX2xhbWRhIEdyZWVrX2xhbWJkYQorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlHcmVla19tdSBHcmVla19udSBHcmVla194aSBHcmVla19vbWljcm9uIEdyZWVrX3BpIEdyZWVrX3JobyBHcmVla19zaWdtYSBHcmVla19maW5hbHNtYWxsc2lnbWEgR3JlZWtfdGF1IEdyZWVrX3Vwc2lsb24gR3JlZWtfcGhpIEdyZWVrX2NoaSBHcmVla19wc2kgR3JlZWtfb21lZ2EgR3JlZWtfc3dpdGNoCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWxlZnRyYWRpY2FsIHRvcGxlZnRyYWRpY2FsIGhvcml6Y29ubmVjdG9yIHRvcGludGVncmFsIGJvdGludGVncmFsIHZlcnRjb25uZWN0b3IgdG9wbGVmdHNxYnJhY2tldCBib3RsZWZ0c3FicmFja2V0IHRvcHJpZ2h0c3FicmFja2V0IGJvdHJpZ2h0c3FicmFja2V0IHRvcGxlZnRwYXJlbnMgYm90bGVmdHBhcmVucyB0b3ByaWdodHBhcmVucyBib3RyaWdodHBhcmVucyBsZWZ0bWlkZGxlY3VybHlicmFjZQorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlyaWdodG1pZGRsZWN1cmx5YnJhY2UgdG9wbGVmdHN1bW1hdGlvbiBib3RsZWZ0c3VtbWF0aW9uIHRvcHZlcnRzdW1tYXRpb25jb25uZWN0b3IgYm90dmVydHN1bW1hdGlvbmNvbm5lY3RvciB0b3ByaWdodHN1bW1hdGlvbiBib3RyaWdodHN1bW1hdGlvbiByaWdodG1pZGRsZXN1bW1hdGlvbiBsZXNzdGhhbmVxdWFsIG5vdGVxdWFsIGdyZWF0ZXJ0aGFuZXF1YWwgaW50ZWdyYWwgdGhlcmVmb3JlIHZhcmlhdGlvbiBpbmZpbml0eQorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQluYWJsYSBhcHByb3hpbWF0ZSBzaW1pbGFyZXF1YWwgaWZvbmx5aWYgaW1wbGllcyBpZGVudGljYWwgcmFkaWNhbCBpbmNsdWRlZGluIGluY2x1ZGVzIGludGVyc2VjdGlvbiB1bmlvbiBsb2dpY2FsYW5kIGxvZ2ljYWxvciBwYXJ0aWFsZGVyaXZhdGl2ZSBmdW5jdGlvbgorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlsZWZ0YXJyb3cgdXBhcnJvdyByaWdodGFycm93IGRvd25hcnJvdyBibGFuayBzb2xpZGRpYW1vbmQgY2hlY2tlcmJvYXJkIGh0IGZmIGNyIGxmIG5sIHZ0IGxvd3JpZ2h0Y29ybmVyIHVwcmlnaHRjb3JuZXIKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JdXBsZWZ0Y29ybmVyIGxvd2xlZnRjb3JuZXIgY3Jvc3NpbmdsaW5lcyBob3JpemxpbmVzY2FuMSBob3JpemxpbmVzY2FuMyBob3JpemxpbmVzY2FuNSBob3JpemxpbmVzY2FuNyBob3JpemxpbmVzY2FuOSBsZWZ0dCByaWdodHQgYm90dCB0b3B0IHZlcnRiYXIgZW1zcGFjZSBlbnNwYWNlCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWVtM3NwYWNlIGVtNHNwYWNlIGRpZ2l0c3BhY2UgcHVuY3RzcGFjZSB0aGluc3BhY2UgaGFpcnNwYWNlIGVtZGFzaCBlbmRhc2ggc2lnbmlmYmxhbmsgZWxsaXBzaXMgZG91YmJhc2VsaW5lZG90IG9uZXRoaXJkIHR3b3RoaXJkcyBvbmVmaWZ0aCB0d29maWZ0aHMKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JdGhyZWVmaWZ0aHMgZm91cmZpZnRocyBvbmVzaXh0aCBmaXZlc2l4dGhzIGNhcmVvZiBmaWdkYXNoIGxlZnRhbmdsZWJyYWNrZXQgZGVjaW1hbHBvaW50IHJpZ2h0YW5nbGVicmFja2V0IG1hcmtlciBvbmVlaWdodGggdGhyZWVlaWdodGhzIGZpdmVlaWdodGhzIHNldmVuZWlnaHRocyB0cmFkZW1hcmsKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0Jc2lnbmF0dXJlbWFyayB0cmFkZW1hcmtpbmNpcmNsZSBsZWZ0b3BlbnRyaWFuZ2xlIHJpZ2h0b3BlbnRyaWFuZ2xlIGVtb3BlbmNpcmNsZSBlbW9wZW5yZWN0YW5nbGUgbGVmdHNpbmdsZXF1b3RlbWFyayByaWdodHNpbmdsZXF1b3RlbWFyayBsZWZ0ZG91YmxlcXVvdGVtYXJrIHJpZ2h0ZG91YmxlcXVvdGVtYXJrIHByZXNjcmlwdGlvbiBtaW51dGVzIHNlY29uZHMgbGF0aW5jcm9zcyBoZXhhZ3JhbQorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlmaWxsZWRyZWN0YnVsbGV0IGZpbGxlZGxlZnR0cmlidWxsZXQgZmlsbGVkcmlnaHR0cmlidWxsZXQgZW1maWxsZWRjaXJjbGUgZW1maWxsZWRyZWN0IGVub3BlbmNpcmNidWxsZXQgZW5vcGVuc3F1YXJlYnVsbGV0IG9wZW5yZWN0YnVsbGV0IG9wZW50cmlidWxsZXR1cCBvcGVudHJpYnVsbGV0ZG93biBvcGVuc3RhciBlbmZpbGxlZGNpcmNidWxsZXQgZW5maWxsZWRzcWJ1bGxldCBmaWxsZWR0cmlidWxsZXR1cCBmaWxsZWR0cmlidWxsZXRkb3duCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWxlZnRwb2ludGVyIHJpZ2h0cG9pbnRlciBjbHViIGRpYW1vbmQgaGVhcnQgbWFsdGVzZWNyb3NzIGRhZ2dlciBkb3VibGVkYWdnZXIgY2hlY2ttYXJrIGJhbGxvdGNyb3NzIG11c2ljYWxzaGFycCBtdXNpY2FsZmxhdCBtYWxlc3ltYm9sIGZlbWFsZXN5bWJvbCB0ZWxlcGhvbmUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JdGVsZXBob25lcmVjb3JkZXIgcGhvbm9ncmFwaGNvcHlyaWdodCBjYXJldCBzaW5nbGVsb3dxdW90ZW1hcmsgZG91YmxlbG93cXVvdGVtYXJrIGN1cnNvciBsZWZ0Y2FyZXQgcmlnaHRjYXJldCBkb3duY2FyZXQgdXBjYXJldCBvdmVyYmFyIGRvd250YWNrIHVwc2hvZSBkb3duc3RpbGUgdW5kZXJiYXIKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0Jam90IHF1YWQgdXB0YWNrIGNpcmNsZSB1cHN0aWxlIGRvd25zaG9lIHJpZ2h0c2hvZSBsZWZ0c2hvZSBsZWZ0dGFjayByaWdodHRhY2sgaGVicmV3X2RvdWJsZWxvd2xpbmUgaGVicmV3X2FsZXBoIGhlYnJld19iZXQgaGVicmV3X2JldGggaGVicmV3X2dpbWVsCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWhlYnJld19naW1tZWwgaGVicmV3X2RhbGV0IGhlYnJld19kYWxldGggaGVicmV3X2hlIGhlYnJld193YXcgaGVicmV3X3phaW4gaGVicmV3X3pheWluIGhlYnJld19jaGV0IGhlYnJld19oZXQgaGVicmV3X3RldCBoZWJyZXdfdGV0aCBoZWJyZXdfeW9kIGhlYnJld19maW5hbGthcGggaGVicmV3X2thcGggaGVicmV3X2xhbWVkCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCWhlYnJld19maW5hbG1lbSBoZWJyZXdfbWVtIGhlYnJld19maW5hbG51biBoZWJyZXdfbnVuIGhlYnJld19zYW1lY2ggaGVicmV3X3NhbWVraCBoZWJyZXdfYXlpbiBoZWJyZXdfZmluYWxwZSBoZWJyZXdfcGUgaGVicmV3X2ZpbmFsemFkZSBoZWJyZXdfZmluYWx6YWRpIGhlYnJld196YWRlIGhlYnJld196YWRpIGhlYnJld19xb3BoIGhlYnJld19rdWYKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JaGVicmV3X3Jlc2ggaGVicmV3X3NoaW4gaGVicmV3X3RhdyBoZWJyZXdfdGFmIEhlYnJld19zd2l0Y2ggVGhhaV9rb2thaSBUaGFpX2tob2toYWkgVGhhaV9raG9raHVhdCBUaGFpX2tob2tod2FpIFRoYWlfa2hva2hvbiBUaGFpX2tob3Jha2hhbmcgVGhhaV9uZ29uZ3UgVGhhaV9jaG9jaGFuIFRoYWlfY2hvY2hpbmcgVGhhaV9jaG9jaGFuZworc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlUaGFpX3Nvc28gVGhhaV9jaG9jaG9lIFRoYWlfeW95aW5nIFRoYWlfZG9jaGFkYSBUaGFpX3RvcGF0YWsgVGhhaV90aG90aGFuIFRoYWlfdGhvbmFuZ21vbnRobyBUaGFpX3Rob3BodXRoYW8gVGhhaV9ub25lbiBUaGFpX2RvZGVrIFRoYWlfdG90YW8gVGhhaV90aG90aHVuZyBUaGFpX3Rob3RoYWhhbiBUaGFpX3Rob3Rob25nIFRoYWlfbm9udQorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlUaGFpX2JvYmFpbWFpIFRoYWlfcG9wbGEgVGhhaV9waG9waHVuZyBUaGFpX2ZvZmEgVGhhaV9waG9waGFuIFRoYWlfZm9mYW4gVGhhaV9waG9zYW1waGFvIFRoYWlfbW9tYSBUaGFpX3lveWFrIFRoYWlfcm9ydWEgVGhhaV9ydSBUaGFpX2xvbGluZyBUaGFpX2x1IFRoYWlfd293YWVuIFRoYWlfc29zYWxhCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCVRoYWlfc29ydXNpIFRoYWlfc29zdWEgVGhhaV9ob2hpcCBUaGFpX2xvY2h1bGEgVGhhaV9vYW5nIFRoYWlfaG9ub2todWsgVGhhaV9wYWl5YW5ub2kgVGhhaV9zYXJhYSBUaGFpX21haWhhbmFrYXQgVGhhaV9zYXJhYWEgVGhhaV9zYXJhYW0gVGhhaV9zYXJhaSBUaGFpX3NhcmFpaSBUaGFpX3NhcmF1ZSBUaGFpX3NhcmF1ZWUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JVGhhaV9zYXJhdSBUaGFpX3NhcmF1dSBUaGFpX3BoaW50aHUgVGhhaV9tYWloYW5ha2F0X21haXRobyBUaGFpX2JhaHQgVGhhaV9zYXJhZSBUaGFpX3NhcmFhZSBUaGFpX3NhcmFvIFRoYWlfc2FyYWFpbWFpbXVhbiBUaGFpX3NhcmFhaW1haW1hbGFpIFRoYWlfbGFra2hhbmd5YW8gVGhhaV9tYWl5YW1vayBUaGFpX21haXRhaWtodSBUaGFpX21haWVrIFRoYWlfbWFpdGhvCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCVRoYWlfbWFpdHJpIFRoYWlfbWFpY2hhdHRhd2EgVGhhaV90aGFudGhha2hhdCBUaGFpX25pa2hhaGl0IFRoYWlfbGVrc3VuIFRoYWlfbGVrbnVuZyBUaGFpX2xla3NvbmcgVGhhaV9sZWtzYW0gVGhhaV9sZWtzaSBUaGFpX2xla2hhIFRoYWlfbGVraG9rIFRoYWlfbGVrY2hldCBUaGFpX2xla3BhZXQgVGhhaV9sZWtrYW8gSGFuZ3VsCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUhhbmd1bF9TdGFydCBIYW5ndWxfRW5kIEhhbmd1bF9IYW5qYSBIYW5ndWxfSmFtbyBIYW5ndWxfUm9tYWphIEhhbmd1bF9Db2RlaW5wdXQgSGFuZ3VsX0plb25qYSBIYW5ndWxfQmFuamEgSGFuZ3VsX1ByZUhhbmphIEhhbmd1bF9Qb3N0SGFuamEgSGFuZ3VsX1NpbmdsZUNhbmRpZGF0ZSBIYW5ndWxfTXVsdGlwbGVDYW5kaWRhdGUgSGFuZ3VsX1ByZXZpb3VzQ2FuZGlkYXRlIEhhbmd1bF9TcGVjaWFsIEhhbmd1bF9zd2l0Y2gKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JSGFuZ3VsX0tpeWVvZyBIYW5ndWxfU3NhbmdLaXllb2cgSGFuZ3VsX0tpeWVvZ1Npb3MgSGFuZ3VsX05pZXVuIEhhbmd1bF9OaWV1bkppZXVqIEhhbmd1bF9OaWV1bkhpZXVoIEhhbmd1bF9EaWtldWQgSGFuZ3VsX1NzYW5nRGlrZXVkIEhhbmd1bF9SaWV1bCBIYW5ndWxfUmlldWxLaXllb2cgSGFuZ3VsX1JpZXVsTWlldW0gSGFuZ3VsX1JpZXVsUGlldWIgSGFuZ3VsX1JpZXVsU2lvcyBIYW5ndWxfUmlldWxUaWV1dCBIYW5ndWxfUmlldWxQaGlldWYKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JSGFuZ3VsX1JpZXVsSGlldWggSGFuZ3VsX01pZXVtIEhhbmd1bF9QaWV1YiBIYW5ndWxfU3NhbmdQaWV1YiBIYW5ndWxfUGlldWJTaW9zIEhhbmd1bF9TaW9zIEhhbmd1bF9Tc2FuZ1Npb3MgSGFuZ3VsX0lldW5nIEhhbmd1bF9KaWV1aiBIYW5ndWxfU3NhbmdKaWV1aiBIYW5ndWxfQ2lldWMgSGFuZ3VsX0toaWV1cSBIYW5ndWxfVGlldXQgSGFuZ3VsX1BoaWV1ZiBIYW5ndWxfSGlldWgKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JSGFuZ3VsX0EgSGFuZ3VsX0FFIEhhbmd1bF9ZQSBIYW5ndWxfWUFFIEhhbmd1bF9FTyBIYW5ndWxfRSBIYW5ndWxfWUVPIEhhbmd1bF9ZRSBIYW5ndWxfTyBIYW5ndWxfV0EgSGFuZ3VsX1dBRSBIYW5ndWxfT0UgSGFuZ3VsX1lPIEhhbmd1bF9VIEhhbmd1bF9XRU8KK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JSGFuZ3VsX1dFIEhhbmd1bF9XSSBIYW5ndWxfWVUgSGFuZ3VsX0VVIEhhbmd1bF9ZSSBIYW5ndWxfSSBIYW5ndWxfSl9LaXllb2cgSGFuZ3VsX0pfU3NhbmdLaXllb2cgSGFuZ3VsX0pfS2l5ZW9nU2lvcyBIYW5ndWxfSl9OaWV1biBIYW5ndWxfSl9OaWV1bkppZXVqIEhhbmd1bF9KX05pZXVuSGlldWggSGFuZ3VsX0pfRGlrZXVkIEhhbmd1bF9KX1JpZXVsIEhhbmd1bF9KX1JpZXVsS2l5ZW9nCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUhhbmd1bF9KX1JpZXVsTWlldW0gSGFuZ3VsX0pfUmlldWxQaWV1YiBIYW5ndWxfSl9SaWV1bFNpb3MgSGFuZ3VsX0pfUmlldWxUaWV1dCBIYW5ndWxfSl9SaWV1bFBoaWV1ZiBIYW5ndWxfSl9SaWV1bEhpZXVoIEhhbmd1bF9KX01pZXVtIEhhbmd1bF9KX1BpZXViIEhhbmd1bF9KX1BpZXViU2lvcyBIYW5ndWxfSl9TaW9zIEhhbmd1bF9KX1NzYW5nU2lvcyBIYW5ndWxfSl9JZXVuZyBIYW5ndWxfSl9KaWV1aiBIYW5ndWxfSl9DaWV1YyBIYW5ndWxfSl9LaGlldXEKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JSGFuZ3VsX0pfVGlldXQgSGFuZ3VsX0pfUGhpZXVmIEhhbmd1bF9KX0hpZXVoIEhhbmd1bF9SaWV1bFllb3JpbkhpZXVoIEhhbmd1bF9TdW5reWVvbmdldW1NaWV1bSBIYW5ndWxfU3Vua3llb25nZXVtUGlldWIgSGFuZ3VsX1BhblNpb3MgSGFuZ3VsX0trb2dqaURhbHJpbklldW5nIEhhbmd1bF9TdW5reWVvbmdldW1QaGlldWYgSGFuZ3VsX1llb3JpbkhpZXVoIEhhbmd1bF9BcmFlQSBIYW5ndWxfQXJhZUFFIEhhbmd1bF9KX1BhblNpb3MgSGFuZ3VsX0pfS2tvZ2ppRGFscmluSWV1bmcgSGFuZ3VsX0pfWWVvcmluSGlldWgKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JS29yZWFuX1dvbiBBcm1lbmlhbl9ldGVybml0eSBBcm1lbmlhbl9saWdhdHVyZV9ldyBBcm1lbmlhbl9mdWxsX3N0b3AgQXJtZW5pYW5fdmVyamFrZXQgQXJtZW5pYW5fcGFyZW5yaWdodCBBcm1lbmlhbl9wYXJlbmxlZnQgQXJtZW5pYW5fZ3VpbGxlbW90cmlnaHQgQXJtZW5pYW5fZ3VpbGxlbW90bGVmdCBBcm1lbmlhbl9lbV9kYXNoIEFybWVuaWFuX2RvdCBBcm1lbmlhbl9taWpha2V0IEFybWVuaWFuX3NlcGFyYXRpb25fbWFyayBBcm1lbmlhbl9idXQgQXJtZW5pYW5fY29tbWEKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JQXJtZW5pYW5fZW5fZGFzaCBBcm1lbmlhbl9oeXBoZW4gQXJtZW5pYW5feWVudGFtbmEgQXJtZW5pYW5fZWxsaXBzaXMgQXJtZW5pYW5fZXhjbGFtIEFybWVuaWFuX2FtYW5hayBBcm1lbmlhbl9hY2NlbnQgQXJtZW5pYW5fc2hlc2h0IEFybWVuaWFuX3F1ZXN0aW9uIEFybWVuaWFuX3BhcnV5ayBBcm1lbmlhbl9BWUIgQXJtZW5pYW5fYXliIEFybWVuaWFuX0JFTiBBcm1lbmlhbl9iZW4gQXJtZW5pYW5fR0lNCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUFybWVuaWFuX2dpbSBBcm1lbmlhbl9EQSBBcm1lbmlhbl9kYSBBcm1lbmlhbl9ZRUNIIEFybWVuaWFuX3llY2ggQXJtZW5pYW5fWkEgQXJtZW5pYW5femEgQXJtZW5pYW5fRSBBcm1lbmlhbl9lIEFybWVuaWFuX0FUIEFybWVuaWFuX2F0IEFybWVuaWFuX1RPIEFybWVuaWFuX3RvIEFybWVuaWFuX1pIRSBBcm1lbmlhbl96aGUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0JQXJtZW5pYW5fSU5JIEFybWVuaWFuX2luaSBBcm1lbmlhbl9MWVVOIEFybWVuaWFuX2x5dW4gQXJtZW5pYW5fS0hFIEFybWVuaWFuX2toZSBBcm1lbmlhbl9UU0EgQXJtZW5pYW5fdHNhIEFybWVuaWFuX0tFTiBBcm1lbmlhbl9rZW4gQXJtZW5pYW5fSE8gQXJtZW5pYW5faG8gQXJtZW5pYW5fRFpBIEFybWVuaWFuX2R6YSBBcm1lbmlhbl9HSEFUCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUFybWVuaWFuX2doYXQgQXJtZW5pYW5fVENIRSBBcm1lbmlhbl90Y2hlIEFybWVuaWFuX01FTiBBcm1lbmlhbl9tZW4gQXJtZW5pYW5fSEkgQXJtZW5pYW5faGkgQXJtZW5pYW5fTlUgQXJtZW5pYW5fbnUgQXJtZW5pYW5fU0hBIEFybWVuaWFuX3NoYSBBcm1lbmlhbl9WTyBBcm1lbmlhbl92byBBcm1lbmlhbl9DSEEgQXJtZW5pYW5fY2hhCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUFybWVuaWFuX1BFIEFybWVuaWFuX3BlIEFybWVuaWFuX0pFIEFybWVuaWFuX2plIEFybWVuaWFuX1JBIEFybWVuaWFuX3JhIEFybWVuaWFuX1NFIEFybWVuaWFuX3NlIEFybWVuaWFuX1ZFViBBcm1lbmlhbl92ZXYgQXJtZW5pYW5fVFlVTiBBcm1lbmlhbl90eXVuIEFybWVuaWFuX1JFIEFybWVuaWFuX3JlIEFybWVuaWFuX1RTTworc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlBcm1lbmlhbl90c28gQXJtZW5pYW5fVllVTiBBcm1lbmlhbl92eXVuIEFybWVuaWFuX1BZVVIgQXJtZW5pYW5fcHl1ciBBcm1lbmlhbl9LRSBBcm1lbmlhbl9rZSBBcm1lbmlhbl9PIEFybWVuaWFuX28gQXJtZW5pYW5fRkUgQXJtZW5pYW5fZmUgQXJtZW5pYW5fYXBvc3Ryb3BoZSBBcm1lbmlhbl9zZWN0aW9uX3NpZ24gR2VvcmdpYW5fYW4gR2VvcmdpYW5fYmFuCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUdlb3JnaWFuX2dhbiBHZW9yZ2lhbl9kb24gR2VvcmdpYW5fZW4gR2VvcmdpYW5fdmluIEdlb3JnaWFuX3plbiBHZW9yZ2lhbl90YW4gR2VvcmdpYW5faW4gR2VvcmdpYW5fa2FuIEdlb3JnaWFuX2xhcyBHZW9yZ2lhbl9tYW4gR2VvcmdpYW5fbmFyIEdlb3JnaWFuX29uIEdlb3JnaWFuX3BhciBHZW9yZ2lhbl96aGFyIEdlb3JnaWFuX3JhZQorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlHZW9yZ2lhbl9zYW4gR2VvcmdpYW5fdGFyIEdlb3JnaWFuX3VuIEdlb3JnaWFuX3BoYXIgR2VvcmdpYW5fa2hhciBHZW9yZ2lhbl9naGFuIEdlb3JnaWFuX3FhciBHZW9yZ2lhbl9zaGluIEdlb3JnaWFuX2NoaW4gR2VvcmdpYW5fY2FuIEdlb3JnaWFuX2ppbCBHZW9yZ2lhbl9jaWwgR2VvcmdpYW5fY2hhciBHZW9yZ2lhbl94YW4gR2VvcmdpYW5famhhbgorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlHZW9yZ2lhbl9oYWUgR2VvcmdpYW5faGUgR2VvcmdpYW5faGllIEdlb3JnaWFuX3dlIEdlb3JnaWFuX2hhciBHZW9yZ2lhbl9ob2UgR2VvcmdpYW5fZmkgQ2NlZGlsbGFhYm92ZWRvdCBYYWJvdmVkb3QgUWFib3ZlZG90IElicmV2ZSBJRSBVTyBac3Ryb2tlIEdjYXJvbgorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlPYmFycmVkIGNjZWRpbGxhYWJvdmVkb3QgeGFib3ZlZG90IE9jYXJvbiBxYWJvdmVkb3QgaWJyZXZlIGllIHVvIHpzdHJva2UgZ2Nhcm9uIG9jYXJvbiBvYmFycmVkIFNDSFdBIHNjaHdhIExiZWxvd2RvdAorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlMc3Ryb2tlYmVsb3dkb3QgbGJlbG93ZG90IGxzdHJva2ViZWxvd2RvdCBHdGlsZGUgZ3RpbGRlIEFiZWxvd2RvdCBhYmVsb3dkb3QgQWhvb2sgYWhvb2sgQWNpcmN1bWZsZXhhY3V0ZSBhY2lyY3VtZmxleGFjdXRlIEFjaXJjdW1mbGV4Z3JhdmUgYWNpcmN1bWZsZXhncmF2ZSBBY2lyY3VtZmxleGhvb2sgYWNpcmN1bWZsZXhob29rCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCUFjaXJjdW1mbGV4dGlsZGUgYWNpcmN1bWZsZXh0aWxkZSBBY2lyY3VtZmxleGJlbG93ZG90IGFjaXJjdW1mbGV4YmVsb3dkb3QgQWJyZXZlYWN1dGUgYWJyZXZlYWN1dGUgQWJyZXZlZ3JhdmUgYWJyZXZlZ3JhdmUgQWJyZXZlaG9vayBhYnJldmVob29rIEFicmV2ZXRpbGRlIGFicmV2ZXRpbGRlIEFicmV2ZWJlbG93ZG90IGFicmV2ZWJlbG93ZG90IEViZWxvd2RvdAorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQllYmVsb3dkb3QgRWhvb2sgZWhvb2sgRXRpbGRlIGV0aWxkZSBFY2lyY3VtZmxleGFjdXRlIGVjaXJjdW1mbGV4YWN1dGUgRWNpcmN1bWZsZXhncmF2ZSBlY2lyY3VtZmxleGdyYXZlIEVjaXJjdW1mbGV4aG9vayBlY2lyY3VtZmxleGhvb2sgRWNpcmN1bWZsZXh0aWxkZSBlY2lyY3VtZmxleHRpbGRlIEVjaXJjdW1mbGV4YmVsb3dkb3QgZWNpcmN1bWZsZXhiZWxvd2RvdAorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlJaG9vayBpaG9vayBJYmVsb3dkb3QgaWJlbG93ZG90IE9iZWxvd2RvdCBvYmVsb3dkb3QgT2hvb2sgb2hvb2sgT2NpcmN1bWZsZXhhY3V0ZSBvY2lyY3VtZmxleGFjdXRlIE9jaXJjdW1mbGV4Z3JhdmUgb2NpcmN1bWZsZXhncmF2ZSBPY2lyY3VtZmxleGhvb2sgb2NpcmN1bWZsZXhob29rIE9jaXJjdW1mbGV4dGlsZGUKK3N5biBrZXl3b3JkIHhtb2RtYXBLZXlTeW0Jb2NpcmN1bWZsZXh0aWxkZSBPY2lyY3VtZmxleGJlbG93ZG90IG9jaXJjdW1mbGV4YmVsb3dkb3QgT2hvcm5hY3V0ZSBvaG9ybmFjdXRlIE9ob3JuZ3JhdmUgb2hvcm5ncmF2ZSBPaG9ybmhvb2sgb2hvcm5ob29rIE9ob3JudGlsZGUgb2hvcm50aWxkZSBPaG9ybmJlbG93ZG90IG9ob3JuYmVsb3dkb3QgVWJlbG93ZG90IHViZWxvd2RvdAorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlVaG9vayB1aG9vayBVaG9ybmFjdXRlIHVob3JuYWN1dGUgVWhvcm5ncmF2ZSB1aG9ybmdyYXZlIFVob3JuaG9vayB1aG9ybmhvb2sgVWhvcm50aWxkZSB1aG9ybnRpbGRlIFVob3JuYmVsb3dkb3QgdWhvcm5iZWxvd2RvdCBZYmVsb3dkb3QgeWJlbG93ZG90IFlob29rCitzeW4ga2V5d29yZCB4bW9kbWFwS2V5U3ltCXlob29rIFl0aWxkZSB5dGlsZGUgT2hvcm4gb2hvcm4gVWhvcm4gdWhvcm4gY29tYmluaW5nX3RpbGRlIGNvbWJpbmluZ19ncmF2ZSBjb21iaW5pbmdfYWN1dGUgY29tYmluaW5nX2hvb2sgY29tYmluaW5nX2JlbG93ZG90IEVjdVNpZ24gQ29sb25TaWduIENydXplaXJvU2lnbgorc3luIGtleXdvcmQgeG1vZG1hcEtleVN5bQlGRnJhbmNTaWduIExpcmFTaWduIE1pbGxTaWduIE5haXJhU2lnbiBQZXNldGFTaWduIFJ1cGVlU2lnbiBXb25TaWduIE5ld1NoZXFlbFNpZ24gRG9uZ1NpZ24gRXVyb1NpZ24KK3N5biBtYXRjaCAgIHhtb2RtYXBLZXlTeW0JIlw8W0EtWmEtel1cPiIKKworIiBrZXl3b3Jkcworc3luIGtleXdvcmQgeG1vZG1hcEtleXdvcmQJa2V5Y29kZSBrZXlzeW0gY2xlYXIgYWRkIHJlbW92ZSBwb2ludGVyCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3htb2RtYXBfc3luX2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfeG1vZG1hcF9zeW5faW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB4bW9kbWFwQ29tbWVudAkgICAgQ29tbWVudAorICBIaUxpbmsgeG1vZG1hcFRvZG8JICAgIFRvZG8KKyAgSGlMaW5rIHhtb2RtYXBJbnQJICAgIE51bWJlcgorICBIaUxpbmsgeG1vZG1hcEhleAkgICAgTnVtYmVyCisgIEhpTGluayB4bW9kbWFwT2N0YWwJICAgIE51bWJlcgorICBIaUxpbmsgeG1vZG1hcE9jdGFsRXJyb3IgIEVycm9yCisgIEhpTGluayB4bW9kbWFwS2V5U3ltCSAgICBDb25zdGFudAorICBIaUxpbmsgeG1vZG1hcEtleXdvcmQJICAgIEtleXdvcmQKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gInhtb2RtYXAiCisKKyIgdmltOiBzZXQgc3RzPTIgc3c9MjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3hwbS52aW0gYi9ydW50aW1lL3N5bnRheC94cG0udmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYmRhODIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC94cG0udmltCkBAIC0wLDAgKzEsMTQ0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJWCBQaXhtYXAKKyIgTWFpbnRhaW5lcjoJUm9uYWxkIFNjaGlsZCA8cnNAc2N1dHVtLmRlPgorIiBMYXN0IENoYW5nZToJMjAwMSBNYXkgMDkKKyIgVmVyc2lvbjoJNS40bi4xCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworc3luIGtleXdvcmQgeHBtVHlwZQkJY2hhcgorc3luIGtleXdvcmQgeHBtU3RvcmFnZUNsYXNzCXN0YXRpYworc3luIGtleXdvcmQgeHBtVG9kbwkJVE9ETyBGSVhNRSBYWFggIGNvbnRhaW5lZAorc3luIHJlZ2lvbiAgeHBtQ29tbWVudAkJc3RhcnQ9Ii9cKiIgIGVuZD0iXCovIiAgY29udGFpbnM9eHBtVG9kbworc3luIHJlZ2lvbiAgeHBtUGl4ZWxTdHJpbmcJc3RhcnQ9KyIrICBza2lwPStcXFxcXHxcXCIrICBlbmQ9KyIrICBjb250YWlucz1AeHBtQ29sb3JzCisKK2lmIGhhcygiZ3VpX3J1bm5pbmciKQorCitsZXQgY29sb3IgID0gIiIKK2xldCBjaGFycyAgPSAiIgorbGV0IGNvbG9ycyA9IDAKK2xldCBjcHAgICAgPSAwCitsZXQgbiAgICAgID0gMAorbGV0IGkgICAgICA9IDEKKword2hpbGUgaSA8PSBsaW5lKCIkIikJCSIgc2Nhbm5pbmcgYWxsIGxpbmVzCisKKyAgIGxldCBzID0gbWF0Y2hzdHIoZ2V0bGluZShpKSwgJyIuXHstMSx9IicpCisgICBpZiBzICE9ICIiCQkJIiBkb2VzIGxpbmUgY29udGFpbiBhIHN0cmluZz8KKworICAgICAgaWYgbiA9PSAwCQkJIiBmaXJzdCBzdHJpbmcgaXMgdGhlIFZhbHVlcyBzdHJpbmcKKworCSAiIGdldCB0aGUgM3JkIHZhbHVlOiBjb2xvcnMgPSBudW1iZXIgb2YgY29sb3JzCisJIGxldCBjb2xvcnMgPSBzdWJzdGl0dXRlKHMsICciXHMqXGRcK1xzXCtcZFwrXHNcK1woXGRcK1wpLioiJywgJ1wxJywgJycpCisJICIgZ2V0IHRoZSA0dGggdmFsdWU6IGNwcCA9IG51bWJlciBvZiBjaGFyYWN0ZXIgcGVyIHBpeGVsCisJIGxldCBjcHAgPSBzdWJzdGl0dXRlKHMsICciXHMqXGRcK1xzXCtcZFwrXHNcK1xkXCtcc1wrXChcZFwrXCkuKiInLCAnXDEnLCAnJykKKworCSAiIGhpZ2hsaWdodCB0aGUgVmFsdWVzIHN0cmluZyBhcyBub3JtYWwgc3RyaW5nIChubyBwaXhlbCBzdHJpbmcpCisJIGV4ZSAnc3luIG1hdGNoIHhwbVZhbHVlcyAvJy5zLicvJworCSBoaSBsaW5rIHhwbVZhbHVlcyBTdHJpbmcKKworCSBsZXQgbiA9IDEJCSIgbiA9IGNvbG9yIGluZGV4CisKKyAgICAgIGVsc2VpZiBuIDw9IGNvbG9ycwkiIHN0cmluZyBpcyBhIGNvbG9yIHNwZWNpZmljYXRpb24KKworCSAiIGdldCBjaGFycyA9IDxjcHA+IGxlbmd0aCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwaXhlbHMKKwkgIiAoZmlyc3QgaW5jbC4gdGhlIGZvbGxvd2luZyB3aGl0ZXNwYWNlKQorCSBsZXQgY2hhcnMgPSBzdWJzdGl0dXRlKHMsICciXCguXHsnLmNwcC4nfVxzXCkuKiInLCAnXDEnLCAnJykKKworCSAiIG5vdyBnZXQgY29sb3IsIGZpcnN0IHRyeSAnYycga2V5IGlmIGFueSAoY29sb3IgdmlzdWFsKQorCSBsZXQgY29sb3IgPSBzdWJzdGl0dXRlKHMsICciLipcc2Ncc1wrXCguXHstfVwpXHMqXChcKGc0XD1cfFttc11cKVxzLipcKSpccyoiJywgJ1wxJywgJycpCisJIGlmIGNvbG9yID09IHMKKwkgICAgIiBubyAnYycga2V5LCB0cnkgJ2cnIGtleSAoZ3JheXNjYWxlIHdpdGggbW9yZSB0aGFuIDQgbGV2ZWxzKQorCSAgICBsZXQgY29sb3IgPSBzdWJzdGl0dXRlKHMsICciLipcc2dcc1wrXCguXHstfVwpXHMqXChcKGc0XHxbbXNdXClccy4qXCkqXHMqIicsICdcMScsICcnKQorCSAgICBpZiBjb2xvciA9PSBzCisJICAgICAgICIgbmV4dCB0cnk6ICdnNCcga2V5ICg0LWxldmVsIGdyYXlzY2FsZSkKKwkgICAgICAgbGV0IGNvbG9yID0gc3Vic3RpdHV0ZShzLCAnIi4qXHNnNFxzXCtcKC5cey19XClccypcKFttc11ccy4qXCkqXHMqIicsICdcMScsICcnKQorCSAgICAgICBpZiBjb2xvciA9PSBzCisJCSAgIiBmaW5hbGx5IHRyeSAnbScga2V5IChtb25vIHZpc3VhbCkKKwkJICBsZXQgY29sb3IgPSBzdWJzdGl0dXRlKHMsICciLipcc21cc1wrXCguXHstfVwpXHMqXChzXHMuKlwpKlxzKiInLCAnXDEnLCAnJykKKwkJICBpZiBjb2xvciA9PSBzCisJCSAgICAgbGV0IGNvbG9yID0gIiIKKwkJICBlbmRpZgorCSAgICAgICBlbmRpZgorCSAgICBlbmRpZgorCSBlbmRpZgorCisJICIgVmltIGNhbm5vdCBoYW5kbGUgUkdCIGNvZGVzIHdpdGggbW9yZSB0aGFuIDYgaGV4IGRpZ2l0cworCSBpZiBjb2xvciA9fiAnI1x4XHsxMCx9JCcKKwkgICAgbGV0IGNvbG9yID0gc3Vic3RpdHV0ZShjb2xvciwgJ1woXHhceFwpXHhceCcsICdcMScsICdnJykKKwkgZWxzZWlmIGNvbG9yID1+ICcjXHhcezcsfSQnCisJICAgIGxldCBjb2xvciA9IHN1YnN0aXR1dGUoY29sb3IsICdcKFx4XHhcKVx4JywgJ1wxJywgJ2cnKQorCSAiIG5vciB3aXRoIDMgZGlnaXRzCisJIGVsc2VpZiBjb2xvciA9fiAnI1x4XHszfSQnCisJICAgIGxldCBjb2xvciA9IHN1YnN0aXR1dGUoY29sb3IsICdcKFx4XClcKFx4XClcKFx4XCknLCAnMFwxMFwyMFwzJywgJycpCisJIGVuZGlmCisKKwkgIiBlc2NhcGUgbWV0YSBjaGFyYWN0ZXJzIGluIHBhdHRlcm5zCisJIGxldCBzID0gZXNjYXBlKHMsICcvXCpeJC5+W10nKQorCSBsZXQgY2hhcnMgPSBlc2NhcGUoY2hhcnMsICcvXCpeJC5+W10nKQorCisJICIgbm93IGNyZWF0ZSBzeW50YXggaXRlbXMKKwkgIiBoaWdobGlnaHQgdGhlIGNvbG9yIHN0cmluZyBhcyBub3JtYWwgc3RyaW5nIChubyBwaXhlbCBzdHJpbmcpCisJIGV4ZSAnc3luIG1hdGNoIHhwbUNvbCcubi4nRGVmIC8nLnMuJy8gY29udGFpbnM9eHBtQ29sJy5uLidpbkRlZicKKwkgZXhlICdoaSBsaW5rIHhwbUNvbCcubi4nRGVmIFN0cmluZycKKworCSAiIGJ1dCBoaWdobGlnaHQgdGhlIGZpcnN0IHdoaXRlc3BhY2UgYWZ0ZXIgY2hhcnMgaW4gaXRzIGNvbG9yCisJIGV4ZSAnc3luIG1hdGNoIHhwbUNvbCcubi4naW5EZWYgLyInLmNoYXJzLicvaHM9cysnLihjcHArMSkuJyBjb250YWluZWQnCisJIGV4ZSAnaGkgbGluayB4cG1Db2wnLm4uJ2luRGVmIHhwbUNvbG9yJy5uCisKKwkgIiByZW1vdmUgdGhlIGZvbGxvd2luZyB3aGl0ZXNwYWNlIGZyb20gY2hhcnMKKwkgbGV0IGNoYXJzID0gc3Vic3RpdHV0ZShjaGFycywgJy4kJywgJycsICcnKQorCisJICIgYW5kIGNyZWF0ZSB0aGUgc3ludGF4IGl0ZW0gY29udGFpbmVkIGluIHRoZSBwaXhlbCBzdHJpbmdzCisJIGV4ZSAnc3luIG1hdGNoIHhwbUNvbG9yJy5uLicgLycuY2hhcnMuJy8gY29udGFpbmVkJworCSBleGUgJ3N5biBjbHVzdGVyIHhwbUNvbG9ycyBhZGQ9eHBtQ29sb3InLm4KKworCSAiIGlmIG5vIGNvbG9yIG9yIGNvbG9yID0gIk5vbmUiIHNob3cgYmFja2dyb3VuZAorCSBpZiBjb2xvciA9PSAiIiAgfHwgIHN1YnN0aXR1dGUoY29sb3IsICcuKicsICdcTCYnLCAnJykgPT0gJ25vbmUnCisJICAgIGV4ZSAnaGkgeHBtQ29sb3InLm4uJyBndWlmZz1iZycKKwkgICAgZXhlICdoaSB4cG1Db2xvcicubi4nIGd1aWJnPU5PTkUnCisJIGVsc2UKKwkgICAgZXhlICdoaSB4cG1Db2xvcicubi4iIGd1aWZnPSciLmNvbG9yLiInIgorCSAgICBleGUgJ2hpIHhwbUNvbG9yJy5uLiIgZ3VpYmc9JyIuY29sb3IuIiciCisJIGVuZGlmCisJIGxldCBuID0gbiArIDEKKyAgICAgIGVsc2UKKwkgYnJlYWsJCSIgbm8gbW9yZSBjb2xvciBzdHJpbmcKKyAgICAgIGVuZGlmCisgICBlbmRpZgorICAgbGV0IGkgPSBpICsgMQorZW5kd2hpbGUKKwordW5sZXQgY29sb3IgY2hhcnMgY29sb3JzIGNwcCBuIGkgcworCitlbmRpZgkJIiBoYXMoImd1aV9ydW5uaW5nIikKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfeHBtX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3hwbV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB4cG1UeXBlCQlUeXBlCisgIEhpTGluayB4cG1TdG9yYWdlQ2xhc3MJU3RvcmFnZUNsYXNzCisgIEhpTGluayB4cG1Ub2RvCQlUb2RvCisgIEhpTGluayB4cG1Db21tZW50CQlDb21tZW50CisgIEhpTGluayB4cG1QaXhlbFN0cmluZwlTdHJpbmcKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAieHBtIgorCisiIHZpbTogdHM9ODpzdz0zOm5vZXQ6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC94cG0yLnZpbSBiL3J1bnRpbWUvc3ludGF4L3hwbTIudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhM2RlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC94cG0yLnZpbQpAQCAtMCwwICsxLDE1NiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVggUGl4bWFwIHYyCisiIE1haW50YWluZXI6CVN0ZXZlIFdhbGwgKGhpdGNoZWQ5N0B2ZWxuZXQuY29tKQorIiBMYXN0IENoYW5nZToJMjAwMSBBcHIgMjUKKyIgVmVyc2lvbjoJNS44CisiCisiIE1hZGUgZnJvbSB4cG0udmltIGJ5IFJvbmFsZCBTY2hpbGQgPHJzQHNjdXR1bS5kZT4KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCitzeW4gcmVnaW9uICB4cG0yUGl4ZWxTdHJpbmcJc3RhcnQ9Il4iICBlbmQ9IiQiICBjb250YWlucz1AeHBtMkNvbG9ycworc3luIGtleXdvcmQgeHBtMlRvZG8JCVRPRE8gRklYTUUgWFhYICBjb250YWluZWQKK3N5biBtYXRjaCAgIHhwbTJDb21tZW50CQkiXCEuKiQiICBjb250YWlucz14cG0yVG9kbworCisKK2lmIHZlcnNpb24gPCA1MDgKKyAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgY29tbWFuZCAtbmFyZ3M9KyBIaSBoaSA8YXJncz4KK2Vsc2UKKyAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGNvbW1hbmQgLW5hcmdzPSsgSGkgaGkgZGVmIDxhcmdzPgorZW5kaWYKKworaWYgaGFzKCJndWlfcnVubmluZyIpCisKKyAgbGV0IGNvbG9yICA9ICIiCisgIGxldCBjaGFycyAgPSAiIgorICBsZXQgY29sb3JzID0gMAorICBsZXQgY3BwICAgID0gMAorICBsZXQgbiAgICAgID0gMAorICBsZXQgaSAgICAgID0gMQorCisgIHdoaWxlIGkgPD0gbGluZSgiJCIpCQkiIHNjYW5uaW5nIGFsbCBsaW5lcworCisgICAgbGV0IHMgPSBnZXRsaW5lKGkpCisgICAgaWYgbWF0Y2gocywiXCEuKiQiKSAhPSAtMQorICAgICAgbGV0IHMgPSBtYXRjaHN0cihzLCAiXlteXCFdKiIpCisgICAgZW5kaWYKKyAgICBpZiBzICE9ICIiCQkJIiBkb2VzIGxpbmUgY29udGFpbiBhIHN0cmluZz8KKworICAgICAgaWYgbiA9PSAwCQkJIiBmaXJzdCBzdHJpbmcgaXMgdGhlIFZhbHVlcyBzdHJpbmcKKworCSIgZ2V0IHRoZSAzcmQgdmFsdWU6IGNvbG9ycyA9IG51bWJlciBvZiBjb2xvcnMKKwlsZXQgY29sb3JzID0gc3Vic3RpdHV0ZShzLCAnXHMqXGRcK1xzXCtcZFwrXHNcK1woXGRcK1wpLionLCAnXDEnLCAnJykKKwkiIGdldCB0aGUgNHRoIHZhbHVlOiBjcHAgPSBudW1iZXIgb2YgY2hhcmFjdGVyIHBlciBwaXhlbAorCWxldCBjcHAgPSBzdWJzdGl0dXRlKHMsICdccypcZFwrXHNcK1xkXCtcc1wrXGRcK1xzXCtcKFxkXCtcKS4qJywgJ1wxJywgJycpCisKKwkiIGhpZ2hsaWdodCB0aGUgVmFsdWVzIHN0cmluZyBhcyBub3JtYWwgc3RyaW5nIChubyBwaXhlbCBzdHJpbmcpCisJZXhlICdzeW4gbWF0Y2ggeHBtMlZhbHVlcyAvJy5zLicvJworCUhpTGluayB4cG0yVmFsdWVzIFN0YXRlbWVudAorCisJbGV0IG4gPSAxCQkJIiBuID0gY29sb3IgaW5kZXgKKworICAgICAgZWxzZWlmIG4gPD0gY29sb3JzCQkiIHN0cmluZyBpcyBhIGNvbG9yIHNwZWNpZmljYXRpb24KKworCSIgZ2V0IGNoYXJzID0gPGNwcD4gbGVuZ3RoIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBpeGVscworCSIgKGZpcnN0IGluY2wuIHRoZSBmb2xsb3dpbmcgd2hpdGVzcGFjZSkKKwlsZXQgY2hhcnMgPSBzdWJzdGl0dXRlKHMsICdcKC5ceycuY3BwLid9XHNcK1wpLionLCAnXDEnLCAnJykKKworCSIgbm93IGdldCBjb2xvciwgZmlyc3QgdHJ5ICdjJyBrZXkgaWYgYW55IChjb2xvciB2aXN1YWwpCisJbGV0IGNvbG9yID0gc3Vic3RpdHV0ZShzLCAnLipcc2Ncc1wrXCguXHstfVwpXHMqXChcKGc0XD1cfFttc11cKVxzLipcKSpccyonLCAnXDEnLCAnJykKKwlpZiBjb2xvciA9PSBzCisJICAiIG5vICdjJyBrZXksIHRyeSAnZycga2V5IChncmF5c2NhbGUgd2l0aCBtb3JlIHRoYW4gNCBsZXZlbHMpCisJICBsZXQgY29sb3IgPSBzdWJzdGl0dXRlKHMsICcuKlxzZ1xzXCtcKC5cey19XClccypcKFwoZzRcfFttc11cKVxzLipcKSpccyonLCAnXDEnLCAnJykKKwkgIGlmIGNvbG9yID09IHMKKwkgICAgIiBuZXh0IHRyeTogJ2c0JyBrZXkgKDQtbGV2ZWwgZ3JheXNjYWxlKQorCSAgICBsZXQgY29sb3IgPSBzdWJzdGl0dXRlKHMsICcuKlxzZzRcc1wrXCguXHstfVwpXHMqXChbbXNdXHMuKlwpKlxzKicsICdcMScsICcnKQorCSAgICBpZiBjb2xvciA9PSBzCisJICAgICAgIiBmaW5hbGx5IHRyeSAnbScga2V5IChtb25vIHZpc3VhbCkKKwkgICAgICBsZXQgY29sb3IgPSBzdWJzdGl0dXRlKHMsICcuKlxzbVxzXCtcKC5cey19XClccypcKHNccy4qXCkqXHMqJywgJ1wxJywgJycpCisJICAgICAgaWYgY29sb3IgPT0gcworCQlsZXQgY29sb3IgPSAiIgorCSAgICAgIGVuZGlmCisJICAgIGVuZGlmCisJICBlbmRpZgorCWVuZGlmCisKKwkiIFZpbSBjYW5ub3QgaGFuZGxlIFJHQiBjb2RlcyB3aXRoIG1vcmUgdGhhbiA2IGhleCBkaWdpdHMKKwlpZiBjb2xvciA9fiAnI1x4XHsxMCx9JCcKKwkgIGxldCBjb2xvciA9IHN1YnN0aXR1dGUoY29sb3IsICdcKFx4XHhcKVx4XHgnLCAnXDEnLCAnZycpCisJZWxzZWlmIGNvbG9yID1+ICcjXHhcezcsfSQnCisJICBsZXQgY29sb3IgPSBzdWJzdGl0dXRlKGNvbG9yLCAnXChceFx4XClceCcsICdcMScsICdnJykKKwkiIG5vciB3aXRoIDMgZGlnaXRzCisJZWxzZWlmIGNvbG9yID1+ICcjXHhcezN9JCcKKwkgIGxldCBjb2xvciA9IHN1YnN0aXR1dGUoY29sb3IsICdcKFx4XClcKFx4XClcKFx4XCknLCAnMFwxMFwyMFwzJywgJycpCisJZW5kaWYKKworCSIgZXNjYXBlIG1ldGEgY2hhcmFjdGVycyBpbiBwYXR0ZXJucworCWxldCBzID0gZXNjYXBlKHMsICcvXCpeJC5+W10nKQorCWxldCBjaGFycyA9IGVzY2FwZShjaGFycywgJy9cKl4kLn5bXScpCisKKwkiIGNoYW5nZSB3aGl0ZXNwYWNlIHRvICJcc1wrIgorCWxldCBzID0gc3Vic3RpdHV0ZShzLCAiWyBcdF1bIFx0XSoiLCAiXFxcXHNcXFxcKyIsICJnIikKKwlsZXQgY2hhcnMgPSBzdWJzdGl0dXRlKGNoYXJzLCAiWyBcdF1bIFx0XSoiLCAiXFxcXHNcXFxcKyIsICJnIikKKworCSIgbm93IGNyZWF0ZSBzeW50YXggaXRlbXMKKwkiIGhpZ2hsaWdodCB0aGUgY29sb3Igc3RyaW5nIGFzIG5vcm1hbCBzdHJpbmcgKG5vIHBpeGVsIHN0cmluZykKKwlleGUgJ3N5biBtYXRjaCB4cG0yQ29sJy5uLidEZWYgLycucy4nLyBjb250YWlucz14cG0yQ29sJy5uLidpbkRlZicKKwlleGUgJ0hpTGluayB4cG0yQ29sJy5uLidEZWYgQ29uc3RhbnQnCisKKwkiIGJ1dCBoaWdobGlnaHQgdGhlIGZpcnN0IHdoaXRlc3BhY2UgYWZ0ZXIgY2hhcnMgaW4gaXRzIGNvbG9yCisJZXhlICdzeW4gbWF0Y2ggeHBtMkNvbCcubi4naW5EZWYgL14nLmNoYXJzLicvaHM9cysnLihjcHApLicgY29udGFpbmVkJworCWV4ZSAnSGlMaW5rIHhwbTJDb2wnLm4uJ2luRGVmIHhwbTJDb2xvcicubgorCisJIiByZW1vdmUgdGhlIGZvbGxvd2luZyB3aGl0ZXNwYWNlIGZyb20gY2hhcnMKKwlsZXQgY2hhcnMgPSBzdWJzdGl0dXRlKGNoYXJzLCAnXFxzXFwrJCcsICcnLCAnJykKKworCSIgYW5kIGNyZWF0ZSB0aGUgc3ludGF4IGl0ZW0gY29udGFpbmVkIGluIHRoZSBwaXhlbCBzdHJpbmdzCisJZXhlICdzeW4gbWF0Y2ggeHBtMkNvbG9yJy5uLicgLycuY2hhcnMuJy8gY29udGFpbmVkJworCWV4ZSAnc3luIGNsdXN0ZXIgeHBtMkNvbG9ycyBhZGQ9eHBtMkNvbG9yJy5uCisKKwkiIGlmIG5vIGNvbG9yIG9yIGNvbG9yID0gIk5vbmUiIHNob3cgYmFja2dyb3VuZAorCWlmIGNvbG9yID09ICIiICB8fCAgc3Vic3RpdHV0ZShjb2xvciwgJy4qJywgJ1xMJicsICcnKSA9PSAnbm9uZScKKwkgIGV4ZSAnSGkgeHBtMkNvbG9yJy5uLicgZ3VpZmc9YmcgZ3VpYmc9Tk9ORScKKwllbHNlCisJICBleGUgJ0hpIHhwbTJDb2xvcicubi4iIGd1aWZnPSciLmNvbG9yLiInIGd1aWJnPSciLmNvbG9yLiInIgorCWVuZGlmCisJbGV0IG4gPSBuICsgMQorICAgICAgZWxzZQorCWJyZWFrCQkJIiBubyBtb3JlIGNvbG9yIHN0cmluZworICAgICAgZW5kaWYKKyAgICBlbmRpZgorICAgIGxldCBpID0gaSArIDEKKyAgZW5kd2hpbGUKKworICB1bmxldCBjb2xvciBjaGFycyBjb2xvcnMgY3BwIG4gaSBzCisKK2VuZGlmCQkiIGhhcygiZ3VpX3J1bm5pbmciKQorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF94cG0yX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3hwbTJfc3ludGF4X2luaXRzID0gMQorICBlbmRpZgorCisgICIgVGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorICBIaUxpbmsgeHBtMlR5cGUJCVR5cGUKKyAgSGlMaW5rIHhwbTJTdG9yYWdlQ2xhc3MJU3RvcmFnZUNsYXNzCisgIEhpTGluayB4cG0yVG9kbwkJVG9kbworICBIaUxpbmsgeHBtMkNvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIHhwbTJQaXhlbFN0cmluZwlTdHJpbmcKK2VuZGlmCitkZWxjb21tYW5kIEhpTGluaworZGVsY29tbWFuZCBIaQorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ4cG0yIgorCisiIHZpbTogdHM9ODpzdz0yOm5vZXQ6CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC94cy52aW0gYi9ydW50aW1lL3N5bnRheC94cy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxMDU0YQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3hzLnZpbQpAQCAtMCwwICsxLDU0IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJWFMgKFBlcmwgZXh0ZW5zaW9uIGludGVyZmFjZSBsYW5ndWFnZSkKKyIgTWFpbnRhaW5lcjoJTWljaGFlbCBXLiBEb2RnZSA8c2FyZ2VAcG9ib3guY29tPgorIiBMYXN0IENoYW5nZToJMjAwMSBNYXkgMDkKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFJlYWQgdGhlIEMgc3ludGF4IHRvIHN0YXJ0IHdpdGgKK2lmIHZlcnNpb24gPCA2MDAKKyAgc291cmNlIDxzZmlsZT46cDpoL2MudmltCitlbHNlCisgIHJ1bnRpbWUhIHN5bnRheC9jLnZpbQorZW5kaWYKKworIiBYUyBleHRlbnRpb25zCisiIFRPRE86IEZpZ3VyZSBvdXQgaG93IHRvIGxvb2sgZm9yIHRyYWlsaW5nICc9Jy4KK3N5biBrZXl3b3JkIHhzS2V5d29yZAlNT0RVTEUgUEFDS0FHRSBQUkVGSVgKK3N5biBrZXl3b3JkIHhzS2V5d29yZAlPVVRQVVQ6IENPREU6IElOSVQ6IFBSRUlOSVQ6IElOUFVUOgorc3luIGtleXdvcmQgeHNLZXl3b3JkCVBQQ09ERTogUkVRVUlSRTogQ0xFQU5VUDogQk9PVDoKK3N5biBrZXl3b3JkIHhzS2V5d29yZAlWRVJTSU9OQ0hFQ0s6IFBST1RPVFlQRVM6IFBST1RPVFlQRToKK3N5biBrZXl3b3JkIHhzS2V5d29yZAlBTElBUzogSU5DTFVERTogQ0FTRToKKyIgVE9ETzogRmlndXJlIG91dCBob3cgdG8gbG9vayBmb3IgdHJhaWxpbmcgJygnLgorc3luIGtleXdvcmQgeHNNYWNybwlTViBFWFRFTkQgUFVTSHMKK3N5biBrZXl3b3JkIHhzVmFyaWFibGUJUkVUVkFMIE5PX0lOSVQKKyJzeW4gbWF0Y2ggeHNDYXN0CSJcPFwoY29uc3RcfHN0YXRpY1x8ZHluYW1pY1x8cmVpbnRlcnByZXRcKV9jYXN0XHMqPCJtZT1lLTEKKyJzeW4gbWF0Y2ggeHNDYXN0CSJcPFwoY29uc3RcfHN0YXRpY1x8ZHluYW1pY1x8cmVpbnRlcnByZXRcKV9jYXN0XHMqJCIKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfeHNfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfeHNfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICBIaUxpbmsgeHNLZXl3b3JkCUtleXdvcmQKKyAgSGlMaW5rIHhzTWFjcm8JTWFjcm8KKyAgSGlMaW5rIHhzVmFyaWFibGUJSWRlbnRpZmllcgorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ4cyIKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3hzZC52aW0gYi9ydW50aW1lL3N5bnRheC94c2QudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNDMxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC94c2QudmltCkBAIC0wLDAgKzEsNjEgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglYU0QgKFhNTCBTY2hlbWEpCisiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgorIiBMYXN0IENoYW5nZToJVHVlLCAyNyBBcHIgMjAwNCAxNDo1NDo1OSBDRVNUCisiIEZpbGVuYW1lczoJKi54c2QKKyIgJElkJAorCisiIFJFRkVSRU5DRVM6CisiICAgWzFdIGh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0wCisiCisKKyIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorZW5kaWYKKworcnVudGltZSBzeW50YXgveG1sLnZpbQorCitzeW4gY2x1c3RlciB4bWxUYWdIb29rIGFkZD14c2RFbGVtZW50CitzeW4gY2FzZSBtYXRjaAorCitzeW4gbWF0Y2ggeHNkRWxlbWVudCAnXCUoeHNkOlwpXEA8PWFsbCcKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9YW5ub3RhdGlvbicKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9YW55Jworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1hbnlBdHRyaWJ1dGUnCitzeW4gbWF0Y2ggeHNkRWxlbWVudCAnXCUoeHNkOlwpXEA8PWFwcEluZm8nCitzeW4gbWF0Y2ggeHNkRWxlbWVudCAnXCUoeHNkOlwpXEA8PWF0dHJpYnV0ZScKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9YXR0cmlidXRlR3JvdXAnCitzeW4gbWF0Y2ggeHNkRWxlbWVudCAnXCUoeHNkOlwpXEA8PWNob2ljZScKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9Y29tcGxleENvbnRlbnQnCitzeW4gbWF0Y2ggeHNkRWxlbWVudCAnXCUoeHNkOlwpXEA8PWNvbXBsZXhUeXBlJworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1kb2N1bWVudGF0aW9uJworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1lbGVtZW50Jworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1lbnVtZXJhdGlvbicKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9ZXh0ZW5zaW9uJworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1maWVsZCcKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9Z3JvdXAnCitzeW4gbWF0Y2ggeHNkRWxlbWVudCAnXCUoeHNkOlwpXEA8PWltcG9ydCcKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9aW5jbHVkZScKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9a2V5Jworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1rZXlyZWYnCitzeW4gbWF0Y2ggeHNkRWxlbWVudCAnXCUoeHNkOlwpXEA8PWxlbmd0aCcKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9bGlzdCcKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9bWF4SW5jbHVzaXZlJworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1tYXhMZW5ndGgnCitzeW4gbWF0Y2ggeHNkRWxlbWVudCAnXCUoeHNkOlwpXEA8PW1pbkluY2x1c2l2ZScKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9bWluTGVuZ3RoJworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1wYXR0ZXJuJworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1yZWRlZmluZScKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9cmVzdHJpY3Rpb24nCitzeW4gbWF0Y2ggeHNkRWxlbWVudCAnXCUoeHNkOlwpXEA8PXNjaGVtYScKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9c2VsZWN0b3InCitzeW4gbWF0Y2ggeHNkRWxlbWVudCAnXCUoeHNkOlwpXEA8PXNlcXVlbmNlJworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1zaW1wbGVDb250ZW50Jworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD1zaW1wbGVUeXBlJworc3luIG1hdGNoIHhzZEVsZW1lbnQgJ1wlKHhzZDpcKVxAPD11bmlvbicKK3N5biBtYXRjaCB4c2RFbGVtZW50ICdcJSh4c2Q6XClcQDw9dW5pcXVlJworCitoaSBkZWYgbGluayB4c2RFbGVtZW50IFN0YXRlbWVudAorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgveHNsdC52aW0gYi9ydW50aW1lL3N5bnRheC94c2x0LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGRkODY5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgveHNsdC52aW0KQEAgLTAsMCArMSw2MiBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVhTTFQKKyIgTWFpbnRhaW5lcjoJSm9oYW5uZXMgWmVsbG5lciA8am9oYW5uZXNAemVsbG5lci5vcmc+CisiIExhc3QgQ2hhbmdlOglTdW4sIDI4IE9jdCAyMDAxIDIxOjIyOjI0ICswMTAwCisiIEZpbGVuYW1lczoJKi54c2wKKyIgJElkJAorCisiIFJFRkVSRU5DRVM6CisiICAgWzFdIGh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQKKyIKKworIiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgICAgZmluaXNoCitlbmRpZgorCitydW50aW1lIHN5bnRheC94bWwudmltCisKK3N5biBjbHVzdGVyIHhtbFRhZ0hvb2sgYWRkPXhzbEVsZW1lbnQKK3N5biBjYXNlIG1hdGNoCisKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9YXBwbHktaW1wb3J0cycKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9YXBwbHktdGVtcGxhdGVzJworc3luIG1hdGNoIHhzbEVsZW1lbnQgJ1wlKHhzbDpcKVxAPD1hdHRyaWJ1dGUnCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PWF0dHJpYnV0ZS1zZXQnCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PWNhbGwtdGVtcGxhdGUnCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PWNob29zZScKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9Y29tbWVudCcKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9Y29weScKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9Y29weS1vZicKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9ZGVjaW1hbC1mb3JtYXQnCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PWRvY3VtZW50Jworc3luIG1hdGNoIHhzbEVsZW1lbnQgJ1wlKHhzbDpcKVxAPD1lbGVtZW50Jworc3luIG1hdGNoIHhzbEVsZW1lbnQgJ1wlKHhzbDpcKVxAPD1mYWxsYmFjaycKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9Zm9yLWVhY2gnCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PWlmJworc3luIG1hdGNoIHhzbEVsZW1lbnQgJ1wlKHhzbDpcKVxAPD1pbmNsdWRlJworc3luIG1hdGNoIHhzbEVsZW1lbnQgJ1wlKHhzbDpcKVxAPD1pbXBvcnQnCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PWtleScKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9bWVzc2FnZScKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9bmFtZXNwYWNlLWFsaWFzJworc3luIG1hdGNoIHhzbEVsZW1lbnQgJ1wlKHhzbDpcKVxAPD1udW1iZXInCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PW90aGVyd2lzZScKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9b3V0cHV0Jworc3luIG1hdGNoIHhzbEVsZW1lbnQgJ1wlKHhzbDpcKVxAPD1wYXJhbScKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9cHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9cHJlc2VydmUtc3BhY2UnCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PXNjcmlwdCcKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9c29ydCcKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9c3RyaXAtc3BhY2UnCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PXN0eWxlc2hlZXQnCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PXRlbXBsYXRlJworc3luIG1hdGNoIHhzbEVsZW1lbnQgJ1wlKHhzbDpcKVxAPD10cmFuc2Zvcm0nCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PXRleHQnCitzeW4gbWF0Y2ggeHNsRWxlbWVudCAnXCUoeHNsOlwpXEA8PXZhbHVlLW9mJworc3luIG1hdGNoIHhzbEVsZW1lbnQgJ1wlKHhzbDpcKVxAPD12YXJpYWJsZScKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9d2hlbicKK3N5biBtYXRjaCB4c2xFbGVtZW50ICdcJSh4c2w6XClcQDw9d2l0aC1wYXJhbScKKworaGkgZGVmIGxpbmsgeHNsRWxlbWVudCBTdGF0ZW1lbnQKKworIiB2aW06IHRzPTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3h4ZC52aW0gYi9ydW50aW1lL3N5bnRheC94eGQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZDU0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC94eGQudmltCkBAIC0wLDAgKzEsNDIgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOgkJYmluIHVzaW5nIHh4ZAorIiBNYWludGFpbmVyOglEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxOZHJPY2hpcFNAUGNhbXBiZWxsQWZhbWlseS5NYml6PgorIiBMYXN0IENoYW5nZToJTm92IDE4LCAyMDAyCisiIFZlcnNpb246CQk2CisiIE5vdGVzOgkJdXNlIDpoZWxwIHh4ZCAgIHRvIHNlZSBob3cgdG8gaW52b2tlIGl0CisiIFVSTDoJaHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI3ZpbWxpbmtzX3N5bnRheAorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBtYXRjaCB4eGRBZGRyZXNzCQkJIl5bMC05YS1mXVwrOiIJCWNvbnRhaW5zPXh4ZFNlcAorc3luIG1hdGNoIHh4ZFNlcAljb250YWluZWQJIjoiCitzeW4gbWF0Y2ggeHhkQXNjaWkJCQkJIiAgLlx7LDE2XH1cclw9JCJocz1zKzIJY29udGFpbnM9eHhkRG90CitzeW4gbWF0Y2ggeHhkRG90CWNvbnRhaW5lZAkiWy5ccl0iCisKKyIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KKyIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQorIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX3h4ZF9zeW50YXhfaW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF94eGRfc3ludGF4X2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworIEhpTGluayB4eGRBZGRyZXNzCUNvbnN0YW50CisgSGlMaW5rIHh4ZFNlcAkJSWRlbnRpZmllcgorIEhpTGluayB4eGRBc2NpaQlTdGF0ZW1lbnQKKworIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ4eGQiCisKKyIgdmltOiB0cz00CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC95YWNjLnZpbSBiL3J1bnRpbWUvc3ludGF4L3lhY2MudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMmEzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC95YWNjLnZpbQpAQCAtMCwwICsxLDk4IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJWWFjYworIiBNYWludGFpbmVyOglEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxOZHJPY2hpcFNAUGNhbXBiZWxsQWZhbWlseS5NYml6PgorIiBMYXN0IENoYW5nZToJTm92IDE4LCAyMDAyCisiIFZlcnNpb246CTIKKyIgVVJMOglodHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL2luZGV4Lmh0bWwjdmltbGlua3Nfc3ludGF4CisiCisiIE9wdGlvbjoKKyIgICB5YWNjX3VzZXNfY3BwIDogaWYgdGhpcyB2YXJpYWJsZSBleGlzdHMsIHRoZW4gQysrIGlzIGxvYWRlZCByYXRoZXIgdGhhbiBDCisKKyIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCisiIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBSZWFkIHRoZSBDIHN5bnRheCB0byBzdGFydCB3aXRoCitpZiB2ZXJzaW9uID49IDYwMAorICBpZiBleGlzdHMoInlhY2NfdXNlc19jcHAiKQorICAgIHJ1bnRpbWUhIHN5bnRheC9jcHAudmltCisgIGVsc2UKKyAgICBydW50aW1lISBzeW50YXgvYy52aW0KKyAgZW5kaWYKK2Vsc2VpZiBleGlzdHMoInlhY2NfdXNlc19jcHAiKQorICBzbyA8c2ZpbGU+OnA6aC9jcHAudmltCitlbHNlCisgIHNvIDxzZmlsZT46cDpoL2MudmltCitlbmRpZgorCisiIENsdXN0ZXJzCitzeW4gY2x1c3Rlcgl5YWNjQWN0aW9uR3JvdXAJY29udGFpbnM9eWFjY0RlbGltLGNJblBhcmVuLGNUb2RvLGNJbmNsdWRlZCx5YWNjRGVsaW0seWFjY0N1cmx5RXJyb3IseWFjY1VuaW9uQ3VybHkseWFjY1VuaW9uLGNVc2VyTGFiZWwsY09jdGFsWmVybyxjQ3BwT3V0MixjQ3BwU2tpcCxjRXJySW5CcmFja2V0LGNFcnJJblBhcmVuLGNPY3RhbEVycm9yLGNDb21tZW50U3RhcnRFcnJvcixjUGFyZW5FcnJvcgorc3luIGNsdXN0ZXIJeWFjY1VuaW9uR3JvdXAJY29udGFpbnM9eWFjY0tleSxjQ29tbWVudCx5YWNjQ3VybHksY1R5cGUsY1N0cnVjdHVyZSxjU3RvcmFnZUNsYXNzLHlhY2NVbmlvbkN1cmx5CisKKyIgWWFjYyBzdHVmZgorc3luIG1hdGNoCXlhY2NEZWxpbQkiXlxzKls6fDtdIgorc3luIG1hdGNoCXlhY2NPcGVyCSJAXGRcKyIKKworc3luIG1hdGNoCXlhY2NLZXkJIl5ccyolXCh0b2tlblx8dHlwZVx8bGVmdFx8cmlnaHRcfHN0YXJ0XHxpZGVudFx8bm9uYXNzb2NcKVw+Igorc3luIG1hdGNoCXlhY2NLZXkJIlxzJVwocHJlY1x8ZXhwZWN0XClcPiIKK3N5biBtYXRjaAl5YWNjS2V5CSJcJFwoPFthLXpBLVpfXVthLXpBLVpfMC05XSo+XClcPVtcJDAtOV1cKyIKK3N5biBrZXl3b3JkCXlhY2NLZXlBY3RuCXl5ZXJyb2sgeXljbGVhcmluCisKK3N5biBtYXRjaAl5YWNjVW5pb25TdGFydAkiXiV1bmlvbiIJc2tpcHdoaXRlIHNraXBubCBuZXh0Z3JvdXA9eWFjY1VuaW9uCitzeW4gcmVnaW9uCXlhY2NVbmlvbgljb250YWluZWQgbWF0Y2hncm91cD15YWNjQ3VybHkgc3RhcnQ9InsiIG1hdGNoZ3JvdXA9eWFjY0N1cmx5IGVuZD0ifSIJY29udGFpbnM9QHlhY2NVbmlvbkdyb3VwCitzeW4gcmVnaW9uCXlhY2NVbmlvbkN1cmx5CWNvbnRhaW5lZCBtYXRjaGdyb3VwPXlhY2NDdXJseSBzdGFydD0ieyIgbWF0Y2hncm91cD15YWNjQ3VybHkgZW5kPSJ9IiBjb250YWlucz1AeWFjY1VuaW9uR3JvdXAKK3N5biBtYXRjaAl5YWNjQnJrdAljb250YWluZWQgIls8Pl0iCitzeW4gbWF0Y2gJeWFjY1R5cGUJIjxbYS16QS1aX11bYS16QS1aMC05X10qPiIJY29udGFpbnM9eWFjY0Jya3QKK3N5biBtYXRjaAl5YWNjRGVmaW5pdGlvbgkiXltBLVphLXpdW0EtWmEtejAtOV9dKlsgXHRdKjoiCisKKyIgc3BlY2lhbCBZYWNjIHNlcGFyYXRvcnMKK3N5biBtYXRjaAl5YWNjU2VjdGlvblNlcAkiXlsgXHRdKiUlIgorc3luIG1hdGNoCXlhY2NTZXAJIl5bIFx0XSoleyIKK3N5biBtYXRjaAl5YWNjU2VwCSJeWyBcdF0qJX0iCisKKyIgSSdkIHJlYWxseSBsaWtlIHRvIGhpZ2hsaWdodCBqdXN0IHRoZSBvdXRlciB7fS4gIEFueSBzdWdnZXN0aW9ucz8/Pworc3luIG1hdGNoCXlhY2NDdXJseUVycm9yCSJbe31dIgorc3luIHJlZ2lvbgl5YWNjQWN0aW9uCW1hdGNoZ3JvdXA9eWFjY0N1cmx5IHN0YXJ0PSJ7IiBlbmQ9In0iIGNvbnRhaW5zPUFMTEJVVCxAeWFjY0FjdGlvbkdyb3VwCisKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfeWFjY19zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF95YWNjaGRsX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgIiBJbnRlcm5hbCB5YWNjIGhpZ2hsaWdodGluZyBsaW5rcworICBIaUxpbmsgeWFjY0Jya3QJeWFjY1N0bXQKKyAgSGlMaW5rIHlhY2NLZXkJeWFjY1N0bXQKKyAgSGlMaW5rIHlhY2NPcGVyCXlhY2NTdG10CisgIEhpTGluayB5YWNjVW5pb25TdGFydAl5YWNjS2V5CisKKyAgIiBFeHRlcm5hbCB5YWNjIGhpZ2hsaWdodGluZyBsaW5rcworICBIaUxpbmsgeWFjY0N1cmx5CURlbGltaXRlcgorICBIaUxpbmsgeWFjY0N1cmx5RXJyb3IJRXJyb3IKKyAgSGlMaW5rIHlhY2NEZWZpbml0aW9uCUZ1bmN0aW9uCisgIEhpTGluayB5YWNjRGVsaW0JRnVuY3Rpb24KKyAgSGlMaW5rIHlhY2NLZXlBY3RuCVNwZWNpYWwKKyAgSGlMaW5rIHlhY2NTZWN0aW9uU2VwCVRvZG8KKyAgSGlMaW5rIHlhY2NTZXAJRGVsaW1pdGVyCisgIEhpTGluayB5YWNjU3RtdAlTdGF0ZW1lbnQKKyAgSGlMaW5rIHlhY2NUeXBlCVR5cGUKKworICAiIHNpbmNlIEJyYW0gZG9lc24ndCBsaWtlIG15IERlbGltaXRlciA6fAorICBIaUxpbmsgRGVsaW1pdGVyCVR5cGUKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAieWFjYyIKKworIiB2aW06IHRzPTE1CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC95YW1sLnZpbSBiL3J1bnRpbWUvc3ludGF4L3lhbWwudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTU3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3N5bnRheC95YW1sLnZpbQpAQCAtMCwwICsxLDEwNSBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CSAgICBZQU1MIChZQU1MIEFpbid0IE1hcmt1cCBMYW5ndWFnZSkKKyIgTWFpbnRhaW5lcjoJICAgIE5pa29sYWkgV2VpYnVsbCA8c291cmNlQHBjcHBvcHBlci5vcmc+CisiIFVSTDoJCSAgICBodHRwOi8vd3d3LnBjcHBvcHBlci5vcmcvdmltL3N5bnRheC9wY3AveWFtbC8KKyIgTGF0ZXN0IFJldmlzaW9uOiAgMjAwNC0wNS0yMgorIiBhcmNoLXRhZzoJICAgIDAxYmY4ZWYxLTMzNWYtNDY5Mi1hMjI4LTQ4NDZjYjY0Y2QxNgorCitpZiB2ZXJzaW9uIDwgNjAwCisgIHN5bnRheCBjbGVhcgorZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGZpbmlzaAorZW5kaWYKKworIiBUb2RvCitzeW4ga2V5d29yZCB5YW1sVG9kbwljb250YWluZWQgVE9ETyBGSVhNRSBYWFggTk9URQorCisiIENvbW1lbnRzICg0LjIuMikKK3N5biByZWdpb24gIHlhbWxDb21tZW50CW1hdGNoZ3JvdXA9eWFtbENvbW1lbnQgc3RhcnQ9J1wlKF5cfFxzXCkjJyBlbmQ9JyQnIGNvbnRhaW5zPXlhbWxUb2RvCisKKyIgTm9kZSBQcm9wZXJ0aWVzICg0LjMuNCkKK3N5biBtYXRjaCAgIHlhbWxOb2RlUHJvcGVydHkJJyFcJSghW15cXF4lCSBdXCtcfFteIV1bXjovCSBdKlwpJworCisiIEFuY2hvcnMgKDQuMy42KQorc3luIG1hdGNoICAgeWFtbEFuY2hvcgknJi5cKycKKworIiBBbGlhc2VzICg0LjMuNykKK3N5biBtYXRjaCAgIHlhbWxBbGlhcwknXCouXCsnCisKKyIgT3BlcmF0b3JzLCBCbG9ja3MsIEtleXMsIGFuZCBEZWxpbWl0ZXJzCitzeW4gbWF0Y2ggICB5YW1sRGVsaW1pdGVyICAgJ1stLDpdJworc3luIG1hdGNoICAgeWFtbEJsb2NrCSAgICAnW1xbXF17fT58XScKK3N5biBtYXRjaCAgIHlhbWxPcGVyYXRvciAgICAnWz8rLV0nCitzeW4gbWF0Y2ggICB5YW1sS2V5CSAgICAnXHdcK1woXHNcK1x3XCtcKSpcemVccyo6JworCisiIFN0cmluZ3MgKDQuNi44LCA0LjYuOSkKK3N5biByZWdpb24gIHlhbWxTdHJpbmcJc3RhcnQ9KyIrIHNraXA9K1xcIisgZW5kPSsiKyBjb250YWlucz15YW1sRXNjYXBlCitzeW4gcmVnaW9uICB5YW1sU3RyaW5nCXN0YXJ0PSsnKyBza2lwPSsnJysgZW5kPSsnKyBjb250YWlucz15YW1sU2luZ2xlRXNjYXBlCitzeW4gbWF0Y2ggICB5YW1sRXNjYXBlCWNvbnRhaW5lZCArXFxbXFwiYWJlZm5ydHZeMF8gTkxQXSsKK3N5biBtYXRjaCAgIHlhbWxFc2NhcGUJY29udGFpbmVkICdcXHhceFx7Mn0nCitzeW4gbWF0Y2ggICB5YW1sRXNjYXBlCWNvbnRhaW5lZCAnXFx1XHhcezR9Jworc3luIG1hdGNoICAgeWFtbEVzY2FwZQljb250YWluZWQgJ1xcVVx4XHs4fScKKyIgVE9ETzogaG93IGRvIHdlIGdldCAweDg1LCAweDIwMjgsIGFuZCAweDIwMjkgaW50byB0aGlzPworc3luIG1hdGNoICAgeWFtbEVzY2FwZQknXFxcJShcclxuXHxbXHJcbl1cKScKK3N5biBtYXRjaCAgIHlhbWxTaW5nbGVFc2NhcGUgY29udGFpbmVkICsnJysKKworIiBOdW1iZXJzCisiIFRPRE86IHNleGFnZWNpbWFsIGFuZCBmaXhlZCAoMjA6MzAuMTUgYW5kIDEsMjMwLjE1KQorc3luIG1hdGNoICAgeWFtbE51bWJlcgknXDxbKy1dXD1cZFwrXCUoXC5cZFwrXCUoW2VFXVsrLV1cPVxkXCtcKVw9XClcPScKK3N5biBtYXRjaCAgIHlhbWxOdW1iZXIJJzBcb1wrJworc3luIG1hdGNoICAgeWFtbE51bWJlcgknMHhceFwrJworc3luIG1hdGNoICAgeWFtbE51bWJlcgknKFsrLV1cPVtpSV1uZiknCitzeW4gbWF0Y2ggICB5YW1sTnVtYmVyCScoTmFOKScKKworIiBDb25zdGFudHMKK3N5biBtYXRjaCAgIHlhbWxDb25zdGFudCAgICAnXDxbfnluXVw+Jworc3luIGtleXdvcmQgeWFtbENvbnN0YW50ICAgIHRydWUgVHJ1ZSBUUlVFIGZhbHNlIEZhbHNlIEZBTFNFCitzeW4ga2V5d29yZCB5YW1sQ29uc3RhbnQgICAgeWVzIFllcyBvbiBPTiBubyBObyBvZmYgT0ZGCitzeW4ga2V5d29yZCB5YW1sQ29uc3RhbnQgICAgbnVsbCBOdWxsIE5VTEwgbmlsIE5pbCBOSUwKKworIiBUaW1lc3RhbXBzCitzeW4gbWF0Y2ggICB5YW1sVGltZXN0YW1wICAgJ1xkXGRcZFxkLVwlKDFbMC0yXVx8XGRcKS1cJSgzWzAtMl1cfDJcZFx8MVxkXHxcZFwpXCUoIFwlKFswMV1cZFx8MlswLTNdXCk6WzAtNV1cZDpbMC01XVxkLlxkXGQgWystXVwlKFswMV1cZFx8MlswLTNdXCk6WzAtNV1cZFx8dFwlKFswMV1cZFx8MlswLTNdXCk6WzAtNV1cZDpbMC01XVxkLlxkXGRbKy1dXCUoWzAxXVxkXHwyWzAtM11cKTpbMC01XVxkXHxUXCUoWzAxXVxkXHwyWzAtM11cKTpbMC01XVxkOlswLTVdXGQuXGRaXClcPScKKworIiBEb2N1bWVudHMgKDQuMy4xKQorc3luIHJlZ2lvbiAgeWFtbERvY3VtZW50SGVhZGVyCXN0YXJ0PSctLS0nIGVuZD0nJCcgY29udGFpbnM9eWFtbERpcmVjdGl2ZQorc3luIG1hdGNoICAgeWFtbERvY3VtZW50RW5kCSdcLlwuXC4nCisKKyIgRGlyZWN0aXZlcyAoNC4zLjIpCitzeW4gbWF0Y2ggICB5YW1sRGlyZWN0aXZlICAgY29udGFpbmVkICclW146XVwrOi5cKycKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfeWFtbF9zeW5faW5pdHMiKQorICBpZiB2ZXJzaW9uIDwgNTA4CisgICAgbGV0IGRpZF95YW1sX3N5bl9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHlhbWxUb2RvCSAgICBUb2RvCisgIEhpTGluayB5YW1sQ29tbWVudAkgICAgQ29tbWVudAorICBIaUxpbmsgeWFtbERvY3VtZW50SGVhZGVyIFByZVByb2MKKyAgSGlMaW5rIHlhbWxEb2N1bWVudEVuZCAgICBQcmVQcm9jCisgIEhpTGluayB5YW1sRGlyZWN0aXZlCSAgICBLZXl3b3JkCisgIEhpTGluayB5YW1sTm9kZVByb3BlcnR5ICAgVHlwZQorICBIaUxpbmsgeWFtbEFuY2hvcgkgICAgVHlwZQorICBIaUxpbmsgeWFtbEFsaWFzCSAgICBUeXBlCisgIEhpTGluayB5YW1sRGVsaW1pdGVyCSAgICBEZWxpbWl0ZXIKKyAgSGlMaW5rIHlhbWxCbG9jawkgICAgT3BlcmF0b3IKKyAgSGlMaW5rIHlhbWxPcGVyYXRvcgkgICAgT3BlcmF0b3IKKyAgSGlMaW5rIHlhbWxLZXkJICAgIElkZW50aWZpZXIKKyAgSGlMaW5rIHlhbWxTdHJpbmcJICAgIFN0cmluZworICBIaUxpbmsgeWFtbEVzY2FwZQkgICAgU3BlY2lhbENoYXIKKyAgSGlMaW5rIHlhbWxTaW5nbGVFc2NhcGUgICBTcGVjaWFsQ2hhcgorICBIaUxpbmsgeWFtbE51bWJlcgkgICAgTnVtYmVyCisgIEhpTGluayB5YW1sQ29uc3RhbnQJICAgIENvbnN0YW50CisgIEhpTGluayB5YW1sVGltZXN0YW1wCSAgICBOdW1iZXIKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAieWFtbCIKKworIiB2aW06IHNldCBzdHM9MiBzdz0yOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvejhhLnZpbSBiL3J1bnRpbWUvc3ludGF4L3o4YS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNhOGEyYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L3o4YS52aW0KQEAgLTAsMCArMSwxMTQgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglaODAgYXNzZW1ibGVyIGFzejgwCisiIE1haW50YWluZXI6CU1pbGFuIFBpa3VsYSA8d3d3QGZvcm5heC5lbGYuc3R1YmEuc2s+CisiIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAxMQorCisiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcworIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgdmVyc2lvbiA8IDYwMAorICBzeW50YXggY2xlYXIKK2Vsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICBmaW5pc2gKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCisiIENvbW1vbiBaODAgQXNzZW1ibHkgaW5zdHJ1Y3Rpb25zCitzeW4ga2V5d29yZCB6OGFJbnN0cnVjdGlvbiBhZGMgYWRkIGFuZCBiaXQgY2NmIGNwIGNwZCBjcGRyIGNwaSBjcGlyIGNwbAorc3luIGtleXdvcmQgejhhSW5zdHJ1Y3Rpb24gZGFhIGRpIGRqbnogZWkgZXh4IGhhbHQgaW0gaW4KK3N5biBrZXl3b3JkIHo4YUluc3RydWN0aW9uIGluZCBpbmkgaW5kciBpbmlyIGpwIGpyIGxkIGxkZCBsZGRyIGxkaSBsZGlyCitzeW4ga2V5d29yZCB6OGFJbnN0cnVjdGlvbiBuZWcgbm9wIG9yIG90ZHIgb3RpciBvdXQgb3V0ZCBvdXRpCitzeW4ga2V5d29yZCB6OGFJbnN0cnVjdGlvbiByZXMgcmwgcmxhIHJsYyBybGNhIHJsZAorc3luIGtleXdvcmQgejhhSW5zdHJ1Y3Rpb24gcnIgcnJhIHJyYyBycmNhIHJyZCBzYmMgc2NmIHNldCBzbGEgc3JhCitzeW4ga2V5d29yZCB6OGFJbnN0cnVjdGlvbiBzcmwgc3ViIHhvcgorIiBzeW4ga2V5d29yZCB6OGFJbnN0cnVjdGlvbiBwdXNoIHBvcCBjYWxsIHJldCByZXRpIHJldG4gaW5jIGRlYyBleCByc3QKKworIiBBbnkgb3RoZXIgc3R1ZmYKK3N5biBtYXRjaCB6OGFJZGVudGlmaWVyCQkiW2Etel9dW2EtejAtOV9dKiIKKworIiBJbnN0cnVjdGlvbnMgY2hhbmdpbmcgc3RhY2sKK3N5biBrZXl3b3JkIHo4YVNwZWNJbnN0IHB1c2ggcG9wIGNhbGwgcmV0IHJldGkgcmV0biByc3QKK3N5biBtYXRjaCB6OGFJbnN0cnVjdGlvbiAiXDxpbmNcPiIKK3N5biBtYXRjaCB6OGFJbnN0cnVjdGlvbiAiXDxkZWNcPiIKK3N5biBtYXRjaCB6OGFJbnN0cnVjdGlvbiAiXDxleFw+Igorc3luIG1hdGNoIHo4YVNwZWNJbnN0ICJcPGluY1xzXCtzcFw+Im1lPXMrMworc3luIG1hdGNoIHo4YVNwZWNJbnN0ICJcPGRlY1xzXCtzcFw+Im1lPXMrMworc3luIG1hdGNoIHo4YVNwZWNJbnN0ICJcPGV4XHNcKyhccypzcFxzKilccyosXHMqaGxcPiJtZT1zKzIKKworIkxhYmVscworc3luIG1hdGNoIHo4YUxhYmVsCQkiW2Etel9dW2EtejAtOV9dKjoiCitzeW4gbWF0Y2ggejhhU3BlY2lhbExhYmVsCSJbYS16X11bYS16MC05X10qOjoiCisKKyIgUHJlUHJvY2Vzc29yIGNvbW1hbmRzCitzeW4gbWF0Y2ggejhhUHJlUHJvYwkiXC5vcmciCitzeW4gbWF0Y2ggejhhUHJlUHJvYwkiXC5nbG9ibCIKK3N5biBtYXRjaCB6OGFQcmVQcm9jCSJcLmRiIgorc3luIG1hdGNoIHo4YVByZVByb2MJIlwuZHciCitzeW4gbWF0Y2ggejhhUHJlUHJvYwkiXC5kcyIKK3N5biBtYXRjaCB6OGFQcmVQcm9jCSJcLmJ5dGUiCitzeW4gbWF0Y2ggejhhUHJlUHJvYwkiXC53b3JkIgorc3luIG1hdGNoIHo4YVByZVByb2MJIlwuYmxrYiIKK3N5biBtYXRjaCB6OGFQcmVQcm9jCSJcLmJsa3ciCitzeW4gbWF0Y2ggejhhUHJlUHJvYwkiXC5hc2NpaSIKK3N5biBtYXRjaCB6OGFQcmVQcm9jCSJcLmFzY2l6Igorc3luIG1hdGNoIHo4YVByZVByb2MJIlwubW9kdWxlIgorc3luIG1hdGNoIHo4YVByZVByb2MJIlwudGl0bGUiCitzeW4gbWF0Y2ggejhhUHJlUHJvYwkiXC5zYnR0bCIKK3N5biBtYXRjaCB6OGFQcmVQcm9jCSJcLmV2ZW4iCitzeW4gbWF0Y2ggejhhUHJlUHJvYwkiXC5vZGQiCitzeW4gbWF0Y2ggejhhUHJlUHJvYwkiXC5hcmVhIgorc3luIG1hdGNoIHo4YVByZVByb2MJIlwucGFnZSIKK3N5biBtYXRjaCB6OGFQcmVQcm9jCSJcLnNldGRwIgorc3luIG1hdGNoIHo4YVByZVByb2MJIlwucmFkaXgiCitzeW4gbWF0Y2ggejhhSW5jbHVkZQkiXC5pbmNsdWRlIgorc3luIG1hdGNoIHo4YVByZUNvbmRpdAkiXC5pZiIKK3N5biBtYXRjaCB6OGFQcmVDb25kaXQJIlwuZWxzZSIKK3N5biBtYXRjaCB6OGFQcmVDb25kaXQJIlwuZW5kaWYiCisKKyIgQ29tbW9uIHN0cmluZ3MKK3N5biBtYXRjaCB6OGFTdHJpbmcJCSJcIi4qXCIiCitzeW4gbWF0Y2ggejhhU3RyaW5nCQkiXCcuKlwnIgorCisiIE51bWJlcnMKK3N5biBtYXRjaCB6OGFOdW1iZXIJCSJbMC05XVwrIgorc3luIG1hdGNoIHo4YU51bWJlcgkJIjBbeFhoSF1bMC05YS1mQS1GXVwrIgorc3luIG1hdGNoIHo4YU51bWJlcgkJIjBbYkJdWzAtMV0qIgorc3luIG1hdGNoIHo4YU51bWJlcgkJIjBbb09cQHFRXVswLTddXCsiCitzeW4gbWF0Y2ggejhhTnVtYmVyCQkiMFtkRF1bMC05XVwrIgorCisiIENoYXJhY3RlciBjb25zdGFudAorc3luIG1hdGNoIHo4YVN0cmluZwkJIlwjXCcuImhzPXMrMQorCisiIENvbW1lbnRzCitzeW4gbWF0Y2ggejhhQ29tbWVudAkJIjsuKiIKKworc3luIGNhc2UgbWF0Y2gKKworIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5CisiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitpZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfejhhX3N5bnRheF9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX3o4YV9zeW50YXhfaW5pdHMgPSAxCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KKyAgZWxzZQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorICBlbmRpZgorCisgIEhpTGluayB6OGFTZWN0aW9uCQlTcGVjaWFsCisgIEhpTGluayB6OGFMYWJlbAkJTGFiZWwKKyAgSGlMaW5rIHo4YVNwZWNpYWxMYWJlbAlMYWJlbAorICBIaUxpbmsgejhhQ29tbWVudAkJQ29tbWVudAorICBIaUxpbmsgejhhSW5zdHJ1Y3Rpb24JU3RhdGVtZW50CisgIEhpTGluayB6OGFTcGVjSW5zdAkJU3RhdGVtZW50CisgIEhpTGluayB6OGFJbmNsdWRlCQlJbmNsdWRlCisgIEhpTGluayB6OGFQcmVDb25kaXQJCVByZUNvbmRpdAorICBIaUxpbmsgejhhUHJlUHJvYwkJUHJlUHJvYworICBIaUxpbmsgejhhTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHo4YVN0cmluZwkJU3RyaW5nCisKKyAgZGVsY29tbWFuZCBIaUxpbmsKK2VuZGlmCisKK2xldCBiOmN1cnJlbnRfc3ludGF4ID0gIno4YSIKKyIgdmltOiB0cz04CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC96c2gudmltIGIvcnVudGltZS9zeW50YXgvenNoLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzc2M2E2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9zeW50YXgvenNoLnZpbQpAQCAtMCwwICsxLDExOCBAQAorIiBWaW0gc3ludGF4IGZpbGUKKyIgTGFuZ3VhZ2U6CVogc2hlbGwgKHpzaCkKKyIgTWFpbnRhaW5lcjoJRmVsaXggdm9uIExlaXRuZXIgPGxlaXRuZXJAbWF0aC5mdS1iZXJsaW4uZGU+CisiIEhlYXZpbHkgYmFzZWQgb24gc2gudmltIGJ5IExlbm5hcnQgU2NodWx0egorIiBMYXN0IENoYW5nZToJMjAwMyBNYXkgMTEKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIFN0cmluZyBhbmQgQ2hhcmFjdGVyIGNvbnRzdGFudHMKKyIgSGlnaGxpZ2h0IHNwZWNpYWwgY2hhcmFjdGVycyAodGhvc2Ugd2hpY2ggaGF2ZSBhIGJhY2tzbGFzaCkgZGlmZmVyZW50bHkKK3N5biBtYXRjaCAgIHpzaFNwZWNpYWwJIlxcXGRcZFxkXHxcXFthYmNmbnJ0dlxcJ10iCitzeW4gcmVnaW9uCXpzaFNpbmdsZXF1b3RlCXN0YXJ0PSsnKyBza2lwPStcXCcrIGVuZD0rJysKKyIgQSBidW5jaCBvZiB1c2VmdWwgenNoIGtleXdvcmRzCisiIHN5biBrZXl3b3JkCXpzaEZ1bmN0aW9uCWZ1bmN0aW9uCitzeW4ga2V5d29yZAl6c2hTdGF0ZW1lbnQJYmcgYnJlYWsgY2QgY2hkaXIgY29udGludWUgZWNobyBldmFsIGV4ZWMKK3N5biBrZXl3b3JkCXpzaFN0YXRlbWVudAlleGl0IGV4cG9ydCBmZyBnZXRvcHRzIGhhc2ggam9icyBraWxsCitzeW4ga2V5d29yZAl6c2hTdGF0ZW1lbnQJcHdkIHJlYWQgcmVhZG9ubHkgcmV0dXJuIHNldCB6c2hpZnQgZnVuY3Rpb24KK3N5biBrZXl3b3JkCXpzaFN0YXRlbWVudAlzdG9wIHN1c3BlbmQgdGVzdCB0aW1lcyB0cmFwIHR5cGUgdWxpbWl0CitzeW4ga2V5d29yZAl6c2hTdGF0ZW1lbnQJdW1hc2sgdW5zZXQgd2FpdCBzZXRvcHQgY29tcGN0bCBzb3VyY2UKK3N5biBrZXl3b3JkCXpzaFN0YXRlbWVudAl3aGVuY2UgZGlzb3duIHNoaWZ0IHdoaWNoIHVuaGFzaCB1bmFsaWFzCitzeW4ga2V5d29yZAl6c2hTdGF0ZW1lbnQJYWxpYXMgZnVuY3Rpb25zIHVuZnVuY3Rpb24gZ2V0bG4gZGlzYWJsZQorc3luIGtleXdvcmQJenNoU3RhdGVtZW50CXZhcmVkIGdldG9wdCBlbmFibGUgdW5zZXRvcHQgYXV0b2xvYWQKK3N5biBrZXl3b3JkCXpzaFN0YXRlbWVudAliaW5ka2V5IHB1c2hsbiBjb21tYW5kIGxpbWl0IHVubGltaXQgZmMKK3N5biBrZXl3b3JkCXpzaFN0YXRlbWVudAlwcmludCBidWlsdGluIG5vZ2xvYiBzY2hlZCByIHRpbWUKK3N5biBrZXl3b3JkCXpzaFN0YXRlbWVudAl0eXBlc2V0IGRlY2xhcmUgbG9jYWwgaW50ZWdlcgorCitzeW4ga2V5d29yZAl6c2hDb25kaXRpb25hbAlpZiBlbHNlIGVzYWMgY2FzZSB0aGVuIGVsaWYgZmkgaW4KK3N5biBrZXl3b3JkCXpzaFJlcGVhdAl3aGlsZSBmb3IgZG8gZG9uZQorCisiIEZvbGxvd2luZyBpcyB3b3J0aCB0byBub3RpY2U6IGNvbW1hbmQgc3Vic3RpdHV0aW9uLCBmaWxlIHJlZGlyZWN0aW9uIGFuZCBmdW5jdGlvbnMgKHNvIHRoZXNlIGZlYXR1cmVzIHR1cm5zIHJlZCkKK3N5biBtYXRjaAl6c2hGdW5jdGlvbk5hbWUJIlxoXHcqXHMqKCkiCitzeW4gcmVnaW9uCXpzaENvbW1hbmRTdWIJc3RhcnQ9K2ArIHNraXA9K1xcYCsgZW5kPStgKworIiBjb250YWlucz1BTExCVVQsenNoRnVuY3Rpb24KK3N5biBtYXRjaAl6c2hSZWRpcgkiXGRcPVwoPFx8PDxcfD5cfD4+XClcKHxcfCZcZFwpXD0iCisKK3N5biBrZXl3b3JkCXpzaFRvZG8gY29udGFpbmVkIFRPRE8KKworc3luIGtleXdvcmQJenNoU2hlbGxWYXJpYWJsZXMJVVNFUiBMT0dOQU1FIEhPTUUgUEFUSCBDRFBBVEggU0hFTEwKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCUxDX1RZUEUgTENfTUVTU0FHRSBNQUlMIE1BSUxDSEVDSworc3luIGtleXdvcmQJenNoU2hlbGxWYXJpYWJsZXMJUFMxIFBTMiBJRlMgRUdJRCBFVUlEIEVSUk5PIEdJRCBVSUQKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCUhPU1QgTElORU5PIE1BQ0hUWVBFIE9MRFBXRCBPUFRBUkcKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCU9QVElORCBPU1RZUEUgUFBJRCBQV0QgUkFORE9NIFNFQ09ORFMKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCVNITFZMIFRUWSBzaWduYWxzIFRUWUlETEUgVVNFUk5BTUUKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCVZFTkRPUiBaU0hfTkFNRSBaU0hfVkVSU0lPTiBBUkdWMAorc3luIGtleXdvcmQJenNoU2hlbGxWYXJpYWJsZXMJQkFVRCBDT0xVTU5TIGNkcGF0aCBESVJTVEFDS1NJWkUKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCUZDRURJVCBmaWdub3JlIGZwYXRoIGhpc3RjaGFycyBISVNUQ0hBUlMKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCUhJU1RGSUxFIEhJU1RTSVpFIEtFWVRJTUVPVVQgTEFORworc3luIGtleXdvcmQJenNoU2hlbGxWYXJpYWJsZXMJTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfTUVTU0FHRVMKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCUxDX1RJTUUgTElORVMgTElTVE1BWCBMT0dDSEVDSyBtYWlscGF0aAorc3luIGtleXdvcmQJenNoU2hlbGxWYXJpYWJsZXMJTUFJTFBBVEggTUFOUEFUSCBtYW5wYXRoIG1vZHVsZV9wYXRoCitzeW4ga2V5d29yZAl6c2hTaGVsbFZhcmlhYmxlcwlNT0RVTEVfUEFUSCBOVUxMQ01EIHBhdGggUE9TVEVESVQKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCVBTMyBQUzQgUFJPTVBUIFBST01QVDIgUFJPTVBUMyBQUk9NUFQ0CitzeW4ga2V5d29yZAl6c2hTaGVsbFZhcmlhYmxlcwlwc3ZhciBQU1ZBUiBwcm9tcHQgUkVBRE5VTExDTUQKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCVJFUE9SVFRJTUUgUlBST01QVCBSUFMxIFNBVkVISVNUCitzeW4ga2V5d29yZAl6c2hTaGVsbFZhcmlhYmxlcwlTUFJPTVBUIFNUVFkgVElNRUZNVCBUTU9VVCBUTVBQUkVGSVgKK3N5biBrZXl3b3JkCXpzaFNoZWxsVmFyaWFibGVzCXdhdGNoIFdBVENIIFdBVENIRk1UIFdPUkRDSEFSUyBaRE9URElSCitzeW4gbWF0Y2gJenNoU3BlY2lhbFNoZWxsVmFyCSJcJFstI0AqJD8hMC05XSIKK3N5biBrZXl3b3JkCXpzaFNldFZhcmlhYmxlcwkJaWdub3JlZW9mIG5vY2xvYmJlcgorc3luIHJlZ2lvbgl6c2hEZXJlZk9wcglzdGFydD0iXCR7IiBlbmQ9In0iIGNvbnRhaW5zPXpzaFNoZWxsVmFyaWFibGVzCitzeW4gbWF0Y2gJenNoRGVyZWZJZGVudGlmaWVyCSJcJFthLXpBLVpfXVthLXpBLVowLTlfXSpcPiIKK3N5biBtYXRjaAl6c2hPcGVyYXRvcgkJIltdW317Jjt8KShdIgorCisKKworc3luIG1hdGNoICB6c2hOdW1iZXIJCSItXD1cPFxkXCtcPiIKK3N5biBtYXRjaCAgenNoQ29tbWVudAkiIy4qJCIgY29udGFpbnM9enNoTnVtYmVyLHpzaFRvZG8KKworCitzeW4gbWF0Y2ggenNoVGVzdE9wcgkiLVw8W29lYXpubGddW3RmcWV0XVw9XD5cfCFcPT1cfC1cPFtiLWdrTHByc1N0dXdqeE9HXVw+IgorInN5biByZWdpb24genNoVGVzdAkgICAgICBzdGFydD0iXFsiIHNraXA9IlxcJCIgZW5kPSJcXSIgY29udGFpbnM9enNoU3RyaW5nLHpzaFRlc3RPcHIsenNoRGVyZWZJZGVudGlmaWVyLHpzaERlcmVmT3ByCitzeW4gcmVnaW9uICB6c2hTdHJpbmcJc3RhcnQ9KyIrICBza2lwPStcXCIrICBlbmQ9KyIrICBjb250YWlucz16c2hTcGVjaWFsLHpzaE9wZXJhdG9yLHpzaERlcmVmSWRlbnRpZmllcix6c2hEZXJlZk9wcix6c2hTcGVjaWFsU2hlbGxWYXIsenNoU2luZ2xlcXVvdGUsenNoQ29tbWFuZFN1YgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF96c2hfc3ludGF4X2luaXRzIikKKyAgaWYgdmVyc2lvbiA8IDUwOAorICAgIGxldCBkaWRfenNoX3N5bnRheF9pbml0cyA9IDEKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgorICBlbHNlCisgICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CisgIGVuZGlmCisKKyAgSGlMaW5rIHpzaFNpbmdsZXF1b3RlCQl6c2hTdHJpbmcKKyAgSGlMaW5rIHpzaENvbmRpdGlvbmFsCQl6c2hTdGF0ZW1lbnQKKyAgSGlMaW5rIHpzaFJlcGVhdAkJenNoU3RhdGVtZW50CisgIEhpTGluayB6c2hGdW5jdGlvbk5hbWUJenNoRnVuY3Rpb24KKyAgSGlMaW5rIHpzaENvbW1hbmRTdWIJCXpzaE9wZXJhdG9yCisgIEhpTGluayB6c2hSZWRpcgkJenNoT3BlcmF0b3IKKyAgSGlMaW5rIHpzaFNldFZhcmlhYmxlcwl6c2hTaGVsbFZhcmlhYmxlcworICBIaUxpbmsgenNoU3BlY2lhbFNoZWxsVmFyCXpzaFNoZWxsVmFyaWFibGVzCisgIEhpTGluayB6c2hUZXN0T3ByCQl6c2hPcGVyYXRvcgorICBIaUxpbmsgenNoRGVyZWZPcHIJCXpzaFNwZWNpYWwKKyAgSGlMaW5rIHpzaERlcmVmSWRlbnRpZmllcgl6c2hTaGVsbFZhcmlhYmxlcworICBIaUxpbmsgenNoT3BlcmF0b3IJCU9wZXJhdG9yCisgIEhpTGluayB6c2hTdGF0ZW1lbnQJCVN0YXRlbWVudAorICBIaUxpbmsgenNoTnVtYmVyCQlOdW1iZXIKKyAgSGlMaW5rIHpzaFN0cmluZwkJU3RyaW5nCisgIEhpTGluayB6c2hDb21tZW50CQlDb21tZW50CisgIEhpTGluayB6c2hTcGVjaWFsCQlTcGVjaWFsCisgIEhpTGluayB6c2hUb2RvCQlUb2RvCisgIEhpTGluayB6c2hTaGVsbFZhcmlhYmxlcwlTcGVjaWFsCisiICBoaSB6c2hPcGVyYXRvcgkJdGVybT11bmRlcmxpbmUgY3Rlcm1mZz02IGd1aWZnPVB1cnBsZSBndWk9Ym9sZAorIiAgaGkgenNoU2hlbGxWYXJpYWJsZXMJdGVybT11bmRlcmxpbmUgY3Rlcm1mZz0yIGd1aWZnPVNlYUdyZWVuIGd1aT1ib2xkCisiICBoaSB6c2hGdW5jdGlvbgkJdGVybT1ib2xkIGN0ZXJtYmc9MSBndWlmZz1SZWQKKworICBkZWxjb21tYW5kIEhpTGluaworZW5kaWYKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAienNoIgorCisiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS90ZXJtY2FwIGIvcnVudGltZS90ZXJtY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NzkwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3Rlcm1jYXAKQEAgLTAsMCArMSwxMzUgQEAKKyMKKyMgRGVtb25zdHJhdGlvbiBvZiBhIHRlcm1jYXAgZmlsZSAoZm9yIHRoZSBBbWlnYSBhbmQgQXJjaGltZWRlcykKKyMKKyMgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KKyMgTGFzdCBjaGFuZ2U6CTE5OTkgRmViIDAyCisjCitzeHxhbnNpfGFueSBhbnNpIHRlcm1pbmFsIHdpdGggcGVzc2ltaXN0aWMgYXNzdW1wdGlvbnM6XAorCTpjbyM4MDpsaSMyNDpjbD01MFxFWztIXEVbMko6YnM6YW06Y209XEVbJWklZDslZEg6XAorCTpuZD1cRVtDOnVwPVxFW0E6Y2U9XEVbSzpobz1cRVtIOnB0OgorCitNdXxzdW58U3VuIE1pY3Jvc3lzdGVtcyBXb3Jrc3RhdGlvbiBjb25zb2xlOlwKKwk6YW06YnM6a206bWk6bXM6cHQ6bGkjMzQ6Y28jODA6Y2w9Xkw6Y209XEVbJWklZDslZEg6XAorCTpjZT1cRVtLOmNkPVxFW0o6XAorCTpzbz1cRVs3bTpzZT1cRVttOnVzPVxFWzRtOnVlPVxFW206cnM9XEVbczpcCisJOm1kPVxFWzFtOm1yPVxFWzdtOm1lPVxFW206XAorCTphbD1cRVtMOmRsPVxFW006aW09OmVpPTppYz1cRVtAOmRjPVxFW1A6XAorCTpBTD1cRVslZEw6REw9XEVbJWRNOklDPVxFWyVkQDpEQz1cRVslZFA6XAorCTp1cD1cRVtBOm5kPVxFW0M6a3U9XEVbQTprZD1cRVtCOmtyPVxFW0M6a2w9XEVbRDpcCisJOmsxPVxFWzIyNHo6azI9XEVbMjI1ejprMz1cRVsyMjZ6Oms0PVxFWzIyN3o6azU9XEVbMjI4ejpcCisJOms2PVxFWzIyOXo6azc9XEVbMjMwejprOD1cRVsyMzF6Oms5PVxFWzIzMno6CisKK00tfHN1bi1lfHN1bi1uaWN8c3VuZXxTdW4gTWljcm9zeXN0ZW1zIFdvcmtzdGF0aW9uIHdpdGhvdXQgaW5zZXJ0IGNoYXJhY3RlcjpcCisJOmljQDppbUA6ZWlAOnRjPXN1bjoKK011fHN1bi1zfFN1biBNaWNyb3N5c3RlbXMgV29ya3N0YXRpb24gd2luZG93IHdpdGggc3RhdHVzIGxpbmU6XAorCTpoczp0cz1cRV1sOmZzPVxFXFw6ZHM9XEVdbFxFXFw6dGM9c3VuOgorTXV8c3VuLWUtc3xzdW4tcy1lfFN1biBNaWNyb3N5c3RlbXMgV29ya3N0YXRpb24gd2l0aCBzdGF0dXMgaGFja2VkIGZvciBlbWFjczpcCisJOmhzOnRzPVxFXWw6ZnM9XEVcXDpkcz1cRV1sXEVcXDp0Yz1zdW4tZToKK00wfHN1bi00OHxTdW4gNDgtbGluZSB3aW5kb3c6XAorCTpsaSM0ODpjbyM4MDp0Yz1zdW46CitNMXxzdW4tMzR8U3VuIDM0LWxpbmUgd2luZG93OlwKKwk6bGkjMzQ6Y28jODA6dGM9c3VuOgorTTJ8c3VuLTI0fFN1biAyNC1saW5lIHdpbmRvdzpcCisJOmxpIzI0OmNvIzgwOnRjPXN1bjoKK00zfHN1bi0xN3xTdW4gMTctbGluZSB3aW5kb3c6XAorCTpsaSMxNzpjbyM4MDp0Yz1zdW46CisKK3Y5fDkyNWF8dHZpOTI1YXxUZWxlVmlkZW8gTW9kZWwgOTI1OlwKKwk6YWw9XEVFOmFtOmJzOmJ0PVxFSTpidzpjZD1cRVk6Y2U9XEVUOmNsPV5aOmNtPVxFPSUrICUrIDpjbyM4MDpkYz1cRVc6XAorCTpkbD1cRVI6ZG89XlY6ZWk9OmljPVxFUTppZj0vdXNyL3NoYXJlL2xpYi90YWJzZXQvc3RkOmltPTprYj1eSDprZD1eVjpcCisJOmtoPV5eOmtsPV5IOmtuIzEyOmtyPV5MOmt1PV5LOmxpIzI0Om5kPV5MOnB0OnNlPVxFRzA6c2cjMTpzbz1cRUc0OlwKKwk6dWU9XEVHMDp1ZyMxOnVsOnVwPV5LOnVzPVxFRzg6aXM9XEVsXAorCTp2Yj1cRWJcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDBcMjAwXDIwMFxFZDpcCisJOnZlPVxFLjQ6dnM9XEUuMjoKKworZDB8dnQxMDB8dnQxMDAtYW18dnQxMDBhbXxkZWMgdnQxMDA6XAorCTpkbz1eSjpjbyM4MDpsaSMyNDpjbD01MFxFWztIXEVbMko6c2Y9NVxFRDpcCisJOmxlPV5IOmJzOmFtOmNtPTVcRVslaSVkOyVkSDpuZD0yXEVbQzp1cD0yXEVbQTpcCisJOmNlPTNcRVtLOmNkPTUwXEVbSjpzbz0yXEVbN206c2U9MlxFW206dXM9MlxFWzRtOnVlPTJcRVttOlwKKwk6bWQ9MlxFWzFtOm1yPTJcRVs3bTptYj0yXEVbNW06bWU9MlxFW206aXM9XEVbMTsyNHJcRVsyNDsxSDpcCisJOnJmPS91c3Ivc2hhcmUvbGliL3RhYnNldC92dDEwMDpcCisJOnJzPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aDprcz1cRVs/MWhcRT06a2U9XEVbPzFsXEU+OlwKKwk6a3U9XEVPQTprZD1cRU9COmtyPVxFT0M6a2w9XEVPRDprYj1eSDpcCisJOmhvPVxFW0g6azE9XEVPUDprMj1cRU9ROmszPVxFT1I6azQ9XEVPUzpwdDpzcj01XEVNOnZ0IzM6eG46XAorCTpzYz1cRTc6cmM9XEU4OmNzPVxFWyVpJWQ7JWRyOgorCisjIEFtaWdhIHRlcm1jYXAgYnkgQnJhbSBNb29sZW5hYXIKK0FBfGFtaWdhfEFtaWdhIEFOU0k6XAorCTpjbyM4MDpsaSMyNTphbTpkbz1cRVtCOmNlPVxFW0s6Y2Q9XEVbSjpcCisJOmNsPVwwMTQ6a3U9XDIzM0E6a2Q9XDIzM0I6a2w9XDIzM0Q6a3I9XDIzM0M6a2I9Xkg6XAorCTojND1cMjMzIEE6JWk9XDIzMyBAOiUxPVwyMzM/fjpcCisJOmsxPVwyMzMwfjprMj1cMjMzMX46azM9XDIzMzJ+Oms0PVwyMzMzfjprNT1cMjMzNH46XAorCTprNj1cMjMzNX46azc9XDIzMzZ+Oms4PVwyMzM3fjprOT1cMjMzOH46azs9XDIzMzl+OlwKKwk6RjE9XDIzMzEwfjpGMj1cMjMzMTF+OkYzPVwyMzMxMn46RjQ9XDIzMzEzfjpGNT1cMjMzMTR+OlwKKwk6RjY9XDIzMzE1fjpGNz1cMjMzMTZ+OkY4PVwyMzMxN346Rjk9XDIzMzE4fjpGQT1cMjMzMTl+OlwKKwk6YWw9XEVbTDpBTD1cRVslZEw6ZGw9XEVbTTpETD1cRVslZE06bGU9Xkg6Y209XEVbJWklZDslZEg6XAorCTpuZD1cRVtDOlJJPVxFWyVkQzp1cD1cRVtBOlwKKwk6Y2U9XEVbSzpobz1cRVtIOmRjPVxFW1A6aWM9XEVbQDp2aT1cRVswIHA6dmU9XEVbMSBwOlwKKwk6c289XEVbMm06c2U9XEVbbTp1cz1cRVs0bTp1ZT1cRVttOm1yPVxFWzdtOm1iPVxFWzc7Mm06bWU9XEVbbToKKworIyBBY29ybiBWRFUKKyMgRm9yIG5vbi1ncmVlbiB0ZXh0LCBjaGFuZ2UgdGhlIF5CIGluIHRoZSA6Y2w9IGxpbmUgdG8KKyMgeW91ciBmYXZvdXJpdGUgY29udHJvbCBjb2RlLgorYTB8YWNvcm4wfEFjb3JuIFZEVSBEcml2ZXIgTW9kZSAwOlwKKwk6Y2w9XlZcMjAwXlNeQV5CXDIwMFwyMDBcMjAwOlwKKwk6aXM9XkNeRl5EXk9eVlwyMDBeU15BXkJcMjAwXDIwMFwyMDA6XAorCTp0Yz1hY29ybl9nZW5lcmljCisKK2FnfGFjb3JuX2dlbmVyaWN8QWNvcm4gR2VuZXJpYyBWRFUgZHJpdmVyOlwKKwk6bGkjMzI6XAorCTpjbyM4MDpcCisJOmFtOlwKKwk6YnM6XAorCTpidzpcCisJOmJsPV5HOlwKKwk6Y2U9XldeSF5FXkZcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDA6XAorCTpjbD1eTDpcCisJOmNtPV5fJXIlLiUuOlwKKwk6aG89Xl46XAorCTpsZT1cMDEwOlwKKwk6Y3I9XDAxNTpcCisJOm1lPV5XXlFeRVwyMDBcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDA6XAorCTptcj1eV15RXkVcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDBcMjAwOlwKKwk6c2I9XldeR15BXkJcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDA6XAorCTpzZT1eV15RXkVcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDBcMjAwOlwKKwk6c2Y9XldeR15BXkNcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDA6XAorCTpzbz1eV15RXkVcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDBcMjAwOlwKKwk6c3I9XldeR15BXkJcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDA6XAorCTp1cD1eSzpcCisJOnZiPV5SXkNeR15ZXkRcMjAwXDIwMFwyMDBcMjAwXlllXDIwMF5FXDIwMF5EXlllXDIwMFwyMDBcMjAwXDIwMDpcCisJOnZpPV5XXkFcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDBcMjAwXDIwMDpcCisJOnZlPV5XXkFeQVwyMDBcMjAwXDIwMFwyMDBcMjAwXDIwMFwyMDA6XAorCTprdT1cMzE3OlwKKwk6a2Q9XDMxNjpcCisJOmtsPVwzMTQ6XAorCTprcj1cMzE1OlwKKwk6a1A9XDMzNzpcCisJOmtOPVwzMzY6XAorCTpraD1cMDM2OlwKKwk6a0g9XDMxMzpcCisJOnN1PVwzMzc6XAorCTpzZD1cMzM2OlwKKwk6IzQ9XDMzNDpcCisJOiVpPVwzMzU6XAorCTprMT1cMzAxOlwKKwk6azI9XDMwMjpcCisJOmszPVwzMDM6XAorCTprND1cMzA0OlwKKwk6azU9XDMwNTpcCisJOms2PVwzMDY6XAorCTprNz1cMzA3OlwKKwk6azg9XDMxMDpcCisJOms5PVwzMTE6XAorCTpGMT1cMzIxOlwKKwk6RjI9XDMyMjpcCisJOkYzPVwzMjM6XAorCTpGND1cMzI0OlwKKwk6RjU9XDMyNTpcCisJOkY2PVwzMjY6XAorCTpGNz1cMzI3OlwKKwk6Rjg9XDMzMDpcCisJOkY5PVwzMzEKKworIworIyBFTkQgT0YgVEVSTUNBUAorIwpkaWZmIC0tZ2l0IGEvcnVudGltZS90b29scy5pbmZvIGIvcnVudGltZS90b29scy5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRkMTczYjAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3Rvb2xzLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS90b29scy9SRUFETUUudHh0IGIvcnVudGltZS90b29scy9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzNmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3Rvb2xzL1JFQURNRS50eHQKQEAgLTAsMCArMSwzNyBAQAorU29tZSB0b29scyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggVmltOgorCitibGluay5jOglDIHByb2dyYW0gdG8gbWFrZSB0aGUgY3Vyc29yIGJsaW5rIGluIGFuIHh0ZXJtLgorCitjY2ZpbHRlcio6CUMgcHJvZ3JhbSB0byBmaWx0ZXIgdGhlIG91dHB1dCBvZiBhIGZldyBjb21waWxlcnMgdG8gYSBjb21tb24KKwkJUXVpY2tGaXggZm9ybWF0LgorCitlZm1fZmlsdGVyLio6CVBlcmwgc2NyaXB0IHRvIGZpbHRlciBjb21waWxlciBtZXNzYWdlcyB0byBRdWlja0ZpeCBmb3JtYXQuCisKK2VmbV9wZXJsLnBsOglQZXJsIHNjcmlwdCB0byBmaWx0ZXIgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgUGVybCBpbnRlcnByZXRlcgorCQlmb3IgdXNlIHdpdGggVmltIHF1aWNrZml4IG1vZGUuCisKK212ZS4qCQlBd2sgc2NyaXB0IHRvIGZpbHRlciBlcnJvciBtZXNzYWdlcyB0byBRdWlja0ZpeCBmb3JtYXQuCisKK3BsdGFncy5wbDoJUGVybCBzY3JpcHQgdG8gY3JlYXRlIGEgdGFncyBmaWxlIGZyb20gUGVybCBzY3JpcHRzLgorCityZWY6CQlTaGVsbCBzY3JpcHQgZm9yIHRoZSBLIGNvbW1hbmQuCisKK3NodGFncy4qOglQZXJsIHNjcmlwdCB0byBjcmVhdGUgYSB0YWdzIGZpbGUgZnJvbSBhIHNoZWxsIHNjcmlwdC4KKwordGNsdGFnczoJU2hlbGwgKyBBd2sgc2NyaXB0IHRvIGNyZWF0ZSBhIHRhZ3MgZmlsZSBmcm9tIGEgVENMIGZpbGUuCisKK3ZpbTEzMjoJCVNoZWxsIHNjcmlwdCB0byBlZGl0IGluIDEzMiBjb2x1bW4gbW9kZSBvbiB2dDEwMCBjb21wYXRpYmxlCisJCXRlcm1pbmFscy4KKwordmltbToJCVNoZWxsIHNjcmlwdCB0byBzdGFydCBWaW0gb24gYSBERUMgdGVybWluYWwgd2l0aCBtb3VzZQorCQllbmFibGVkLgorCit2aW1zcGVsbC4qOglTaGVsbCBzY3JpcHQgZm9yIGhpZ2hsaWdodGluZyBzcGVsbGluZyBtaXN0YWtlcy4KKwordmltX3ZzX25ldC5jbWQ6IE1TLVdpbmRvd3MgY29tbWFuZCBmaWxlIHRvIHVzZSBWaW0gd2l0aCBNUyBWaXN1YWwgU3R1ZGlvIDcgYW5kCisJCWxhdGVyLgorCit4Y21kc3J2X2NsaWVudC5jOiAgRXhhbXBsZSBmb3IgYSBjbGllbnQgcHJvZ3JhbSB0aGF0IGNvbW11bmljYXRlcyB3aXRoIGEgVmltCisJCSAgIHNlcnZlciB0aHJvdWdoIHRoZSBYLVdpbmRvd3MgaW50ZXJmYWNlLgorCitbeHhkIChhbmQgdGVlIGZvciBPUy8yKSBjYW4gYmUgZm91bmQgaW4gdGhlIHNyYyBkaXJlY3RvcnldCmRpZmYgLS1naXQgYS9ydW50aW1lL3Rvb2xzL2JsaW5rLmMgYi9ydW50aW1lL3Rvb2xzL2JsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmZDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdG9vbHMvYmxpbmsuYwpAQCAtMCwwICsxLDIxIEBACisvKgorICogQW4gZXh0cmVtZWx5IHNpbXBsZSBwcm9ncmFtIHRvIG1ha2UgdGhlIGN1cnNvciBibGluayBpbiBhbiB4dGVybS4KKyAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIGN1cnNvciBpcyBoYXJkIHRvIHNwb3QgaW4gYSBoaWdobGlnaHRlZCBmaWxlLgorICogU3RhcnQgaW4gdGhlIGJhY2tncm91bmQ6ICJibGluayYiICBTdG9wIGJ5IGtpbGxpbmcgaXQuCisgKiBCcmFtIE1vb2xlbmFhciAgOTgwMTA5ICAoYmFzZWQgb24gYW4gaWRlYSBmcm9tIEpvaG4gTGFuZ2UpLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCittYWluKCkKK3sKKwl3aGlsZSAoMSkKKwl7CisJCXByaW50ZigiXGVbPzI1aCIpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJdXNsZWVwKDQwMDAwMCk7CQkvKiBvbiB0aW1lICovCisJCXByaW50ZigiXGVbPzI1bCIpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJdXNsZWVwKDI1MDAwMCk7CQkvKiBvZmYgdGltZSAqLworCX0KK30KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdG9vbHMvY2NmaWx0ZXIuMSBiL3J1bnRpbWUvdG9vbHMvY2NmaWx0ZXIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2RlMzhkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90b29scy9jY2ZpbHRlci4xCkBAIC0wLDAgKzEsOTMgQEAKKy5USCBjY2ZpbHRlciAxICIwMS1BcHItOTciCisuU0ggTkFNRQorY2NmaWx0ZXIgXC0gYSBjb21waWxlcidzIG91dHB1dCBmaWx0ZXIgZm9yIHZpbSBxdWlja2ZpeAorLlNIIFNZTk9QU0lTCitjY2ZpbHRlciBbCisuQiA8b3B0aW9ucz4KK10KKy5TSCBERVNDUklQVElPTgorVGhlIGNjZmlsdGVyIHV0aWxpdHkgImZpbHRlcnMiIHRoZSBvdXRwdXQgb2Ygc2V2ZXJhbCBjb21waWxlcnMKK2FuZCBtYWtlcnMgKG1ha2UvZ21ha2UpIGZyb20gc2V2ZXJhbCBwbGF0Zm9ybXMgKHNlZSBOT1RFUyBiZWxvdykKK3RvIGEgc3RhbmRhcmRpemVkIGZvcm1hdCB3aGljaCBlYXNpbHkgZml0cyBpbiB2aW0ncyBxdWlja2ZpeAorZmVhdHVyZS4gRm9yIGZ1cnRoZXIgZGV0YWlscywgc2VlIGluIHZpbSAiOmhlbHAgcXVpY2tmaXgiLgorLlBQCitjY2ZpbHRlciByZWFkcworLkIgJ3N0ZGluJworYW5kIG91dHB1dHMgdG8KKy5CICdzdGRvdXQnCitcLgorLlBQCitUaGUgbmVlZCBmb3IgY2NmaWx0ZXIgaXMgY2xlYXIsIGFzIHNvbWUgY29tcGlsZXJzIGhhdmUgaXJyZWd1bGFyCithbmQvb3IgbXVsdGlwbGUgbGluZSBlcnJvciBtZXNzYWdlcyAod2l0aCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gb24KK2xpbmUgMiksIHdoaWNoIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIHRoZSBlcnJvcmZvcm1hdCB0byBjb3JyZWN0bHkKK2Rpc3BsYXkgdGhlbSAhCisKK1doZW4gd29ya2luZyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLCBhbmQgd2l0aCBkaWZmZXJlbnQgY29tcGlsZXJzLAorY2NmaWx0ZXIgZWFzZXMgdGhlIHV0aWxpemF0aW9uIG9mIHF1aWNrZml4LCBkdWUgdG8gaXQncyBzdGFuZGFyZGl6ZWQKK291dHB1dCwgYWxsb3dpbmcgdG8gaGF2ZSBpbiAudmltcmMgYSBwbGFpbgorLmJyCisuQiBcIFwgXCBcIDpzZXRcIGVycm9yZm9ybWF0PSVmOiVsOiVjOiV0OiVtCisKKy5TSCBVU0FHRQorV2hlbiB1c2luZyBjY2ZpbHRlciwgb25lIHdvdWxkIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBsaW5lcyBpbiAudmltcmM6CisuYnIKKy5CIFwgXCBcIFwgOnNldCBzaGVsbHBpcGU9XFxcXHwmY2NmaWx0ZXJcXFxcPgorLmJyCisuQiBcIFwgXCBcIDpzZXQgZXJyb3Jmb3JtYXQ9JWY6JWw6JWM6JXQ6JW0KKworLlNIIE9QVElPTlMKKy5UUCAxNgorLWMKK0RlY3JlbWVudCBjb2x1bW4gYnkgb25lLiBUaGlzIG1heSBiZSBuZWVkZWQsIGRlcGVuZGluZyBvbgordGhlIGNvbXBpbGVyIGJlaW5nIHVzZWQuCisuVFAKKy1yCitEZWNyZW1lbnQgcm93IGJ5IG9uZS4gIFRoaXMgbWF5IGJlIG5lZWRlZCwgZGVwZW5kaW5nIG9uCit0aGUgY29tcGlsZXIgYmVpbmcgdXNlZC4KKy5UUAorLXYKK1ZlcmJvc2UgKE91dHB1dHMgYWxzbyBpbnZhbGlkIGxpbmVzKS4KK1RoaXMgb3B0aW9uIG1ha2VzIGNjZmlsdGVyIG91dHB1dCBhbHNvIHRoZSBsaW5lcyB0aGF0Citjb3VsZG4ndCBiZSBjb3JyZWN0bHkgcGFyc2VkLiBUaGlzIGlzIHVzZWQgbW9zdGx5IGZvcgorY2NmaWx0ZXIgZGVidWdnaW5nLgorLlRQCistbyA8Q09NUElMRVI+CitUcmVhdCBpbnB1dCBhcyA8Q09NUElMRVI+J3Mgb3V0cHV0LgorRXZlbiB3aGVuIGNvbmZpZ3VyaW5nIGNjZmlsdGVyIHRvIGFzc3VtZSBhIGRlZmF1bHQKK0NPTVBJTEVSLCBzb21ldGltZXMgaXQncyBoZWxwZnVsIHRvIGJlIGFibGUgdG8gc3BlY2lmeQordGhlIENPTVBJTEVSIHVzZWQgdG8gZ2VuZXJhdGUgY2NmaWx0ZXIncyBpbnB1dC4KK0ZvciBleGFtcGxlLCB3aGVuIGNyb3NzLWNvbXBpbGluZyBvbiBhIG5ldHdvcmsgZnJvbSBhCitzaW5nbGUgbWFjaGluZS4KKy5UUAorLWgKK1Nob3dzIGEgYnJpZWYgaGVscCwgZGVzY3JpYmluZyB0aGUgY29uZmlndXJlZCBkZWZhdWx0IENPTVBJTEVSCithbmQgdGhlIHZhbGlkIHBhcmFtZXRlcnMgZm9yIENPTVBJTEVSLgorCisuU0ggTk9URVMKK0N1cnJlbnRseSwgY2NmaWx0ZXIgYWNjZXB0cyBvdXRwdXQgZnJvbSBzZXZlcmFsIGNvbXBpbGVycywgYXMKK2Rlc2NyaWJlZCBiZWxvdzoKKy5UUCAxMAorR0NDCitHQ0MgY29tcGlsZXIKKy5UUAorQUlYCitBSVgncyBDIGNvbXBpbGVyCisuVFAKK0FUVAorQVQmVC9OQ1IncyBIaWdoIFBlcmZvcm1hbmNlIEMgQ29tcGlsZXIKKy5UUAorSVJJWAorSVJJWCdzIE1JUFMvTUlQU3BybyBDIGNvbXBpbGVyCisuVFAKK1NPTEFSSVMKK1NPTEFSSVMncyBTcGFyY1dvcmtzIEMgY29tcGlsZXIKKy5UUAorSFBVWAorSFBVWCdzIEMgY29tcGlsZXIKKworLlNIIEFVVEhPUgorLkIgY2NmaWx0ZXIKK3dhcyBkZXZlbG9wZWQgYnkKKy5CIFBhYmxvIEFyaWVsIEtvaGFuCisuQlIKKy5CIG1haWx0bzpwYWJsb0BtZW1jby5jby5pbApkaWZmIC0tZ2l0IGEvcnVudGltZS90b29scy9jY2ZpbHRlci5jIGIvcnVudGltZS90b29scy9jY2ZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MDMzMzkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3Rvb2xzL2NjZmlsdGVyLmMKQEAgLTAsMCArMSwzMjYgQEAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgUHJvamVjdCA6IFZJTQkJCQkJCQkgICAqLworLyogIE1vZHVsZSAgOiBjY2ZpbHRlcgkJCQkgICAgVmVyc2lvbjogMDIuMDEuMDEJICAgKi8KKy8qICBGaWxlICAgIDogY2NmaWx0ZXIuYwkJCQkJCSAgICovCisvKiAgUHVycG9zZSA6IEZpbHRlciBnbWFrZS9jYyBvdXRwdXQgaW50byBhIHN0YW5kYXJkaXplZCBmb3JtCQkgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qCSAgIENyZWF0ZWQgT246IDEyLVNlcC05NSAyMDozMgkJCQkJICAgKi8KKy8qICBMYXN0IG1vZGlmaWNhdGlvbjogMDMtRmViLTk4CQkJCQkgICAqLworLyogIC1lIG9wdGlvbiBhZGRlZCBieSBCZXJuZCBGZWlnZQkJCQkJICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgQ29weXJpZ2h0IDoJCQkJCQkJCSAgICovCisvKiAgICAgVGhpcyBzb3VyY2UgZmlsZSBpcyBjb3B5cmlnaHQgKGMpIHRvIFBhYmxvIEFyaWVsIEtvaGFuCQkgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgX19DQ0ZJTFRFUl9DX18KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBMSU5FTEVOR1RIIDIwNDgKKworLyogQ29sbGVjdG9yKHMpICovCitjaGFyCSAgICAgICBMaW5lW0xJTkVMRU5HVEhdOworY2hhcgkgICAgICAgTGluZTJbTElORUxFTkdUSF07CisvKiBDb21wb25lbnRzICovCitjaGFyCSAgICAgICBGaWxlTmFtZVsxMDI0XTsKK2NoYXIJICAgICAgIEJhc2VQYXRoWzEwMjRdOworY2hhcgkgICAgICAgQ1dEWzEwMjRdOwordW5zaWduZWQgbG9uZyAgUm93OwordW5zaWduZWQgbG9uZyAgQ29sOworY2hhcgkgICAgICAgU2V2ZXJpdHk7CitjaGFyCSAgICAgICBSZWFzb25bTElORUxFTkdUSF07CisKKyNkZWZpbmUgQ09NUElMRVJfVU5LTk9XTiAgICAwCisjZGVmaW5lIENPTVBJTEVSX0dDQwkgICAgMQorI2RlZmluZSBDT01QSUxFUl9BSVgJICAgIDIKKyNkZWZpbmUgQ09NUElMRVJfQVRUCSAgICAzCisjZGVmaW5lIENPTVBJTEVSX0lSSVgJICAgIDQKKyNkZWZpbmUgQ09NUElMRVJfU09MQVJJUyAgICA1CisjZGVmaW5lIENPTVBJTEVSX0hQVVgJICAgIDYKKworY2hhcgkqQ09NUElMRVJfTmFtZXNbXVsyXSA9CisgICAgeworICAgICAgLyogTmFtZQkJIERlc2NyaXB0aW9uICovCisgICAgICB7ICJOL0EiLAkJIiIJCQkJCQl9LAorICAgICAgeyAiR0NDIiwJCSJHQ0MgY29tcGlsZXIiCQkJCQl9LAorICAgICAgeyAiQUlYIiwJCSJBSVgncyBDIGNvbXBpbGVyIgkJCQl9LAorICAgICAgeyAiQVRUIiwJCSJBVCZUL05DUidzIEhpZ2ggUGVyZm9ybWFuY2UgQyBDb21waWxlciIJfSwKKyAgICAgIHsgIklSSVgiLAkJIklSSVgncyBNSVBTL01JUFNwcm8gQyBjb21waWxlciIJCX0sCisgICAgICB7ICJTT0xBUklTIiwJIlNPTEFSSVMncyBTcGFyY1dvcmtzIEMgY29tcGlsZXIiCQl9LAorICAgICAgeyAiSFBVWCIsCQkiSFBVWCdzIEMgY29tcGlsZXIiCQkJCX0KKyAgICB9OworI2RlZmluZSBDT01QSUxFUl9RVFkgKHNpemVvZihDT01QSUxFUl9OYW1lcykvc2l6ZW9mKENPTVBJTEVSX05hbWVzWzBdKSkKKworI2lmICAgZGVmaW5lZChfR0NDKQorIwkJCWRlZmluZSBDT01QSUxFUl9ERUZBVUxUIENPTVBJTEVSX0dDQworI2VsaWYgZGVmaW5lZChfQUlYKQorIwkJCWRlZmluZSBDT01QSUxFUl9ERUZBVUxUIENPTVBJTEVSX0FJWAorI2VsaWYgZGVmaW5lZChfQVRUKQorIwkJCWRlZmluZSBDT01QSUxFUl9ERUZBVUxUIENPTVBJTEVSX0FUVAorI2VsaWYgZGVmaW5lZChfSVJJWCkKKyMJCQlkZWZpbmUgQ09NUElMRVJfREVGQVVMVCBDT01QSUxFUl9JUklYCisjZWxpZiBkZWZpbmVkKF9TT0xBUklTKQorIwkJCWRlZmluZSBDT01QSUxFUl9ERUZBVUxUIENPTVBJTEVSX1NPTEFSSVMKKyNlbGlmIGRlZmluZWQoX0hQVVgpCisjCQkJZGVmaW5lIENPTVBJTEVSX0RFRkFVTFQgQ09NUElMRVJfSFBVWAorI2Vsc2UKKyMJCQlkZWZpbmUgQ09NUElMRVJfREVGQVVMVCBDT01QSUxFUl9VTktOT1dOCisjZW5kaWYKKworY29uc3QgY2hhciBVU0FHRVtdID0KKyJjY2ZpbHRlciAgdjIuMSAgICAgICAgICAgICAgKGMpMTk5NC0xOTk3IGJ5IFBhYmxvIEFyaWVsIEtvaGFuXG4iCisiRmlsdGVyIE91dCBjb21waWxlcidzIG91dHB1dCwgYW5kIGNvbnZlcnRzIGl0IHRvIGZpdCBWSU1cblxuIgorIlVzYWdlOlxuIgorIiAgY2NmaWx0ZXIgWzxvcHRpb25zPl1cbiIKKyJXaGVyZTogPG9wdGlvbnM+IGlzIG9uZSBvciBtb3JlIG9mOlxuIgorIiAgLWMgICAgICAgICAgICAgIERlY3JlbWVudCBjb2x1bW4gYnkgb25lXG4iCisiICAtciAgICAgICAgICAgICAgRGVjcmVtZW50IHJvdyBieSBvbmVcbiIKKyIgIC1lICAgICAgICAgICAgICBFY2hvIHN0ZGluIHRvIHN0ZGVyclxuIgorIiAgLXYgICAgICAgICAgICAgIFZlcmJvc2UgKE91dHB1dHMgYWxzbyBpbnZhbGlkIGxpbmVzKVxuIgorIiAgLW8gPENPTVBJTEVSPiAgIFRyZWF0IGlucHV0IGFzIDxDT01QSUxFUj4ncyBvdXRwdXRcbiIKKyIgICAgICAgICAgICAgICAgICBOb3RlOiBDT01QSUxFUiBtYXkgYmUgcHJlY2VkZWQgYnkgYW4gX1xuIgorIiAgLWggICAgICAgICAgICAgIFRoaXMgdXNhZ2UuXG4iOworCisKK2ludCBTaG93VXNhZ2UoIGNoYXIgKnN6RXJyb3IgKQoreyBpbnQgaTsKKworICBmcHJpbnRmKCBzdGRlcnIsIFVTQUdFICk7CisKKyAgZnByaW50Ziggc3RkZXJyLCAiQ3VycmVudCBkZWZhdWx0IDxDT01QSUxFUj46ICVzXG4iLAorCQkgICBDT01QSUxFUl9OYW1lc1tDT01QSUxFUl9ERUZBVUxUXVswXSApOworCisgIGZwcmludGYoIHN0ZGVyciwgIkFjY2VwdGFibGUgcGFyYW1ldGVycyBmb3IgPENPTVBJTEVSPiBhcmU6XG4iICk7CisgIGZvciAoaT0xOyBpIDwgQ09NUElMRVJfUVRZOyBpKyspCisgICAgICBmcHJpbnRmKCBzdGRlcnIsICIgICAgICUtMTUuMTVzICAgICAlc1xuIiwKKwkJICAgICAgIENPTVBJTEVSX05hbWVzW2ldWzBdLAorCQkgICAgICAgQ09NUElMRVJfTmFtZXNbaV1bMV0gKTsKKyAgZnByaW50ZihzdGRlcnIsIHN6RXJyb3IpOworICByZXR1cm4gMDsKK30KKworY2hhciAqZWNob2dldHMoY2hhciAqcywgaW50IGVjaG8pIHsKKyBjaGFyICogY29uc3QgcmV0dmFsPWZnZXRzKHMsIExJTkVMRU5HVEgsIHN0ZGluKTsKKyBpZiAoZWNobyE9MCAmJiByZXR2YWwhPU5VTEwpIHsKKyAgZnB1dHMocmV0dmFsLCBzdGRlcnIpOworIH0KKyByZXR1cm4gcmV0dmFsOworfQorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7IGludCAgIHJ2LCBpLCBqLCBvazsKKyAgaW50ICAgc3RheTsKKyAgaW50ICAgcHJlZmV0Y2g7CisgIGNoYXIgKnA7CisgIGludCAgIGRlY19jb2wgPSAwOyAvKiBEZWNyZW1lbnQgY29sdW1uIHZhbHVlIGJ5IDEgKi8KKyAgaW50ICAgZGVjX3JvdyA9IDA7IC8qIERlY3JlbWVudCByb3cgICAgdmFsdWUgYnkgMSAqLworICBpbnQgICBlY2hvID0gMDsgICAgLyogRWNobyBzdGRpbiB0byBzdGRlcnIgKi8KKyAgaW50ICAgdmVyYm9zZSA9IDA7IC8qIEluY2x1ZGUgQmFkIEZvcm1hdHRlZCBMaW5lcyAqLworICBpbnQgICBDV0RsZW47CisgIGludCAgIENPTVBJTEVSID0gQ09NUElMRVJfREVGQVVMVDsKKworICBnZXRjd2QoIENXRCwgc2l6ZW9mKENXRCkgKTsKKyAgQ1dEbGVuID0gc3RybGVuKENXRCk7CisKKyAgZm9yIChpPTE7IGk8YXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChhcmd2W2ldWzBdICE9ICctJykKKwlyZXR1cm4gU2hvd1VzYWdlKCIiKTsKKyAgICAgIHN3aXRjaCAoIGFyZ3ZbaV1bMV0gKQorCXsKKwkgIGNhc2UgJ2MnOgorCSAgICBkZWNfY29sID0gMTsKKwkgICAgYnJlYWs7CisJICBjYXNlICdyJzoKKwkgICAgZGVjX3JvdyA9IDE7CisJICAgIGJyZWFrOworCSAgY2FzZSAnZSc6CisJICAgIGVjaG8gPSAxOworCSAgICBicmVhazsKKwkgIGNhc2UgJ3YnOgorCSAgICB2ZXJib3NlID0gMTsKKwkgICAgYnJlYWs7CisJICBjYXNlICdvJzoKKwkgICAgICB7CisJCWlmIChpKzEgPj0gYXJnYykKKwkJICAgIHJldHVybiBTaG93VXNhZ2UoIkVycm9yOiBNaXNzaW5nIHBhcmFtZXRlciBmb3IgLW9cbiIpOworCQlpKys7CisJCUNPTVBJTEVSID0gLTE7CisJCWZvciAoaj0xOyBqPENPTVBJTEVSX1FUWTsgaisrKQorCQkgICAgaWYgKCAgKHN0cmNtcChhcmd2W2ldLCBDT01QSUxFUl9OYW1lc1tqXVswXSkgPT0gMCkgfHwKKwkJCSAgKCAoYXJndltpXVswXSA9PSAnXycpICYmCisJCQkgICAgKHN0cmNtcCgmYXJndltpXVsxXSwgQ09NUElMRVJfTmFtZXNbal1bMF0pID09IDApICkJKQorCQkJQ09NUElMRVIgPSBqOworCQlpZiAoQ09NUElMRVIgPT0gLTEpCisJCSAgICByZXR1cm4gU2hvd1VzYWdlKCJFcnJvcjogSW52YWxpZCBDT01QSUxFUiBzcGVjaWZpZWRcbiIpOworCSAgICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlICdoJzoKKwkgICAgcmV0dXJuIFNob3dVc2FnZSgiIik7CisJICBkZWZhdWx0OgorCSAgICByZXR1cm4gU2hvd1VzYWdlKCJFcnJvcjogSW52YWxpZCBvcHRpb25cbiIpOworCX0KKyAgICB9CisgIGlmIChDT01QSUxFUiA9PSAwKQorICAgICAgcmV0dXJuIFNob3dVc2FnZSgiRXJyb3I6IENPTVBJTEVSIG11c3QgYmUgc3BlY2lmaWVkIGluIHRoaXMgc3lzdGVtXG4iKTsKKworICBzdGF5CSAgID0gKCBlY2hvZ2V0cyhMaW5lLCBlY2hvKSAhPSBOVUxMICk7CisgIHByZWZldGNoID0gMDsKKworICB3aGlsZSggc3RheSApCisgICAgeworICAgICAgKkZpbGVOYW1lID0gMDsKKyAgICAgIFJvdwk9IDA7CisgICAgICBDb2wJPSAwOworICAgICAgU2V2ZXJpdHkJPSAnICc7CisgICAgICAqUmVhc29uCT0gMDsKKyAgICAgIG9rCT0gMDsKKyAgICAgIHN3aXRjaCAoQ09NUElMRVIpCisJeworCSAgY2FzZSBDT01QSUxFUl9HQ0M6CisJICAgIFNldmVyaXR5ID0gJ2UnOworI2lmZGVmIEdPVE9fRlJPTV9XSEVSRV9JTkNMVURFRAorCSAgICBydiA9IHNzY2FuZiggTGluZSwgIkluIGZpbGUgaW5jbHVkZWQgZnJvbSAlW146XToldToiLAorCQkJICAgICAgIEZpbGVOYW1lLCAmUm93ICk7CisJICAgIGlmICggcnYgPT0gMiApCisJICAgICAgeworCQlvayA9IChlY2hvZ2V0cyhSZWFzb24sIGVjaG8pICE9IE5VTEwpOworCSAgICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJICAgICAgeworCQlpZiAoKHJ2ID0gc3NjYW5mKCBMaW5lLCAiJVteOl06JXU6IHdhcm5pbmc6ICVbXlxuXSIsCisJCQkJICAgRmlsZU5hbWUsICZSb3csIFJlYXNvbiApKT09MykgeworCQkgU2V2ZXJpdHkgPSAndyc7CisJCX0gZWxzZSB7CisJCXJ2ID0gc3NjYW5mKCBMaW5lLCAiJVteOl06JXU6ICVbXlxuXSIsCisJCQkJICAgRmlsZU5hbWUsICZSb3csIFJlYXNvbiApOworCQl9CisJCW9rID0gKCBydiA9PSAzICk7CisJICAgICAgfQorCSAgICBDb2wgPSAoZGVjX2NvbCA/IDEgOiAwICk7CisJICAgIGJyZWFrOworCSAgY2FzZSBDT01QSUxFUl9BSVg6CisJICAgIHJ2ID0gc3NjYW5mKCBMaW5lLCAiXCIlW15cIl1cIiwgbGluZSAldS4ldTogJSpzICglYykgJVteXG5dIiwKKwkJCSAgICAgICBGaWxlTmFtZSwgJlJvdywgJkNvbCwgJlNldmVyaXR5LCBSZWFzb24gKTsKKwkgICAgb2sgPSAoIHJ2ID09IDUgKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIENPTVBJTEVSX0hQVVg6CisJICAgIHJ2ID0gc3NjYW5mKCBMaW5lLCAiY2M6IFwiJVteXCJdXCIsIGxpbmUgJXU6ICVjJSpbXjpdOiAlW15cbl0iLAorCQkJICAgICAgIEZpbGVOYW1lLCAmUm93LCAmU2V2ZXJpdHksIFJlYXNvbiApOworCSAgICBvayA9ICggcnYgPT0gNCApOworCSAgICBDb2wgPSAoZGVjX2NvbCA/IDEgOiAwICk7CisJICAgIGJyZWFrOworCSAgY2FzZSBDT01QSUxFUl9TT0xBUklTOgorCSAgICBydiA9IHNzY2FuZiggTGluZSwgIlwiJVteXCJdXCIsIGxpbmUgJXU6IHdhcm5pbmc6ICVbXlxuXSIsCisJCQkgICAgICAgRmlsZU5hbWUsICZSb3csIFJlYXNvbiApOworCSAgICBTZXZlcml0eSA9ICd3JzsKKwkgICAgb2sgPSAoIHJ2ID09IDMgKTsKKwkgICAgaWYgKCBydiAhPSAzICkKKwkgICAgICB7CisJCXJ2ID0gc3NjYW5mKCBMaW5lLCAiXCIlW15cIl1cIiwgbGluZSAldTogJVteXG5dIiwKKwkJCQkgICBGaWxlTmFtZSwgJlJvdywgUmVhc29uICk7CisJCVNldmVyaXR5ID0gJ2UnOworCQlvayA9ICggcnYgPT0gMyApOworCSAgICAgIH0KKwkgICAgQ29sID0gKGRlY19jb2wgPyAxIDogMCApOworCSAgICBicmVhazsKKwkgIGNhc2UgQ09NUElMRVJfQVRUOgorCSAgICBydgkgPSBzc2NhbmYoIExpbmUsICIlYyBcIiVbXlwiXVwiLEwldS9DJXUlKlteOl06JVteXG5dIiwKKwkJCQkgJlNldmVyaXR5LCBGaWxlTmFtZSwgJlJvdywgJkNvbCwgUmVhc29uICk7CisJICAgIG9rID0gKCBydiA9PSA1ICk7CisKKwkgICAgaWYgKHJ2ICE9IDUpCisJICAgICAgeyBydiAgID0gc3NjYW5mKCBMaW5lLCAiJWMgXCIlW15cIl1cIixMJXUvQyV1OiAlW15cbl0iLAorCQkJCSAgICAgJlNldmVyaXR5LCBGaWxlTmFtZSwgJlJvdywgJkNvbCwgUmVhc29uICk7CisJCW9rID0gKCBydiA9PSA1ICk7CisJICAgICAgfQorCisJICAgIGlmIChydiAhPSA1KQorCSAgICAgIHsgcnYgID0gc3NjYW5mKCBMaW5lLCAiJWMgXCIlW15cIl1cIixMJXU6ICVbXlxuXSIsCisJCQkJICAgJlNldmVyaXR5LCBGaWxlTmFtZSwgJlJvdywgUmVhc29uICk7CisJCW9rID0gKCBydiA9PSA0ICk7CisJCUNvbCA9IChkZWNfY29sID8gMSA6IDAgKTsKKwkgICAgICB9CisKKwkgICAgc3RheSA9IChlY2hvZ2V0cyhMaW5lMiwgZWNobykgIT0gTlVMTCk7CisJICAgIHdoaWxlICggc3RheSAmJiAoTGluZTJbMF0gPT0gJ3wnKSApCisJICAgICAgeyBmb3IgKHA9JkxpbmUyWzJdOyAoKnApICYmIChpc3NwYWNlKCpwKSk7IHArKyk7CisJCXN0cmNhdCggUmVhc29uLCAiOiAiICk7CisJCXN0cmNhdCggUmVhc29uLCBwICk7CisJCUxpbmUyWzBdID0gMDsKKwkJc3RheSA9IChlY2hvZ2V0cyhMaW5lMiwgZWNobykgIT0gTlVMTCk7CisJICAgICAgfQorCSAgICBwcmVmZXRjaCA9IDE7CisJICAgIHN0cmNweSggTGluZSwgTGluZTIgKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIENPTVBJTEVSX0lSSVg6CisJICAgIENvbCAgICAgICA9IDE7CisJICAgIHByZWZldGNoICA9IDA7CisJICAgIHJ2CSAgICAgID0gMDsKKwkgICAgb2sJICAgICAgPSAwOworCSAgICBpZiAoICFzdHJuY21wKExpbmUsICJjZmU6ICIsIDUpICkKKwkgICAgICB7IHAgPSAmTGluZVs1XTsKKwkJU2V2ZXJpdHkgPSB0b2xvd2VyKCpwKTsKKwkJcCA9IHN0cmNociggJkxpbmVbNV0sICc6JyApOworCQlpZiAocCA9PSBOVUxMKQorCQkgIHsgb2sgPSAwOworCQkgIH0KKwkJIGVsc2UKKwkJICB7CisJCSAgICBydiA9IHNzY2FuZiggcCsyLCAiJVteOl06ICV1OiAlW15cbl0iLAorCQkJCSBGaWxlTmFtZSwgJlJvdywgUmVhc29uICk7CisJCSAgICBpZiAocnYgIT0gMykKKwkJICAgICAgcnYgPSBzc2NhbmYoIHArMiwgIiVbXixdLCBsaW5lICV1OiAlW15cbl0iLAorCQkJCSAgIEZpbGVOYW1lLCAmUm93LCBSZWFzb24gKTsKKwkJICAgIG9rID0gKCBydiA9PSAzICk7CisJCSAgfQorCisJCWlmIChvaykKKwkJICB7IHByZWZldGNoID0gMTsKKwkJICAgIHN0YXkgPSAoZWNob2dldHMoTGluZSwgZWNobykgIT0gTlVMTCk7CisJCSAgICBpZiAoTGluZVswXSA9PSAnICcpCisJCSAgICAgIHN0YXkgPSAoZWNob2dldHMoTGluZTIsIGVjaG8pICE9IE5VTEwpOworCQkgICAgaWYgKCAgKExpbmUyWzBdID09ICcgJykgJiYKKwkJCSAgKCAoTGluZTJbMV0gPT0gJy0nKSB8fCAoTGluZTJbMV0gPT0gJ14nKSApICApCisJCSAgICAgIHsgQ29sID0gc3RybGVuKExpbmUyKS0xOworCQkJcHJlZmV0Y2ggPSAwOworCQkgICAgICB9CisJCSAgICAgZWxzZQorCQkgICAgICB7IHN0cmNhdCggTGluZSwgIlxuIiApOworCQkJc3RyY2F0KCBMaW5lLCBMaW5lMiApOworCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0KKwkgICAgYnJlYWs7CisJfQorICAgICAgaWYgKGRlY19jb2wpIENvbC0tOworICAgICAgaWYgKGRlY19yb3cpIFJvdy0tOworICAgICAgaWYgKCFvaykKKwl7CisJICBpZiAoIExpbmVbMF0gPT0gJ2cnICkKKwkgICAgICBwID0gJkxpbmVbMV07CisJICBlbHNlCisJICAgICAgcCA9ICZMaW5lWzBdOworCSAgb2sgPSBzc2NhbmYoIHAsICJtYWtlWyUqZF06IEVudGVyaW5nIGRpcmVjdG9yeSBgJVteJ10iLAorCQkgICAgICAgQmFzZVBhdGggKTsKKwkgIGlmICh2ZXJib3NlKQorCSAgICBwcmludGYoICJbJXVdPyVzXG4iLCBvaywgTGluZSApOworCX0KKyAgICAgICBlbHNlCisJeworCSAgZm9yIChwPVJlYXNvbjsgKCpwKSAmJiAoaXNzcGFjZSgqcCkpOyBwKyspOworCSAgaWYgKCBCYXNlUGF0aFtDV0RsZW5dID09IDAgKQorCSAgICAgIHByaW50ZiggIiVzOiV1OiV1OiVjOiVzXG4iLCBGaWxlTmFtZSwgUm93LCBDb2wsIFNldmVyaXR5LCBwICk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBwcmludGYoICIlcy8lczoldToldTolYzolc1xuIiwgJkJhc2VQYXRoW0NXRGxlbisxXSwgRmlsZU5hbWUsIFJvdywgQ29sLCBTZXZlcml0eSwgcCApOworCSAgICB9CisJfQorICAgICAgaWYgKCFwcmVmZXRjaCkKKwlzdGF5ID0gKCBlY2hvZ2V0cyhMaW5lLCBlY2hvKSAhPSBOVUxMICk7CisgICAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdG9vbHMvY2NmaWx0ZXJfUkVBRE1FLnR4dCBiL3J1bnRpbWUvdG9vbHMvY2NmaWx0ZXJfUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjY1OGM5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90b29scy9jY2ZpbHRlcl9SRUFETUUudHh0CkBAIC0wLDAgKzEsOTEgQEAKK0NPTVBJTElORyBBTkQgSU5TVEFMTElORzoKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gY29tcGlsZSBjY2ZpbHRlciwgeW91IGNhbiBqdXN0IGRvIGEgcGxhaW46CisgICAgY2MgY2NmaWx0ZXIuYyAtbyBjY2ZpbHRlcgorVGhvdWdoLCBpdCBtYXkgYmUgd2lzZSB0byBoYXZlIHlvdXIgZGVmYXVsdCBjb21waWxlciBkZWZpbmVkLAorc28geW91IHdvdWxkIG5vcm1hbGx5IGNvbXBpbGUgaXQgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICBjYyAtRF9HQ0MgICAgIGNjZmlsdGVyLmMgLW8gY2NmaWx0ZXIKKyAgICBjYyAtRF9BSVggICAgIGNjZmlsdGVyLmMgLW8gY2NmaWx0ZXIKKyAgICBjYyAtRF9BVFQgICAgIGNjZmlsdGVyLmMgLW8gY2NmaWx0ZXIKKyAgICBjYyAtRF9JUklYICAgIGNjZmlsdGVyLmMgLW8gY2NmaWx0ZXIKKyAgICBjYyAtRF9TT0xBUklTIGNjZmlsdGVyLmMgLW8gY2NmaWx0ZXIKKyAgICBjYyAtRF9IUFVYICAgIGNjZmlsdGVyLmMgLW8gY2NmaWx0ZXIKK1lvdSBjYW4gdGhlbiBjb3B5IGNjZmlsdGVyIHRvIGl0J3MgdGFyZ2V0IGRlc3RpbmF0aW9uIChpLmU6IC91c3IvbG9jYWwvYmluKS4KK1RoZSBtYW4gcGFnZSBjY2ZpbHRlci4xIGhhcyB0byBiZSBjb3BpZWQgdG8gc29tZXdoZXJlIGluIHlvdXIgTUFOUEFUSCwKK3VuZGVyIGEgbWFuMSBkaXJlY3RvcnkgKGkuZTogL3Vzci9sb2NhbC9tYW4vbWFuMSkuCisKKworU1VQUE9SVEVEIENPTVBJTEVSUy9QT1JUSU5HIE5PVEVTOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgc3VwcG9ydGVkIGZvcm1hdHMgZm9yIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGFyZSBkZXNjcmliZWQgYmVsb3c6CitJbiB0aGlzIHNlY3Rpb24sIG1ldGEtbmFtZXMgYXJlIHVzZWQgYXMgcGxhY2UtaG9sZGVycyBpbiB0aGUgbGluZQorZm9ybWF0czogPEZJTEU+IDxST1c+IDxDT0w+IDxTRVZFUklUWT4gPFJFQVNPTj4gPD4KK1RoZSA8PiBkZW5vdGVzIGlnbm9yZWQgdGV4dC4KK0xpbmUgZm9ybWF0cyBhcmUgZGVsaW1pdGVkIGJ5IHRoZSBeIChjYXJldCkgc3ltYm9sLgorCiswKSAgU3BlY2lhbCBjYXNlOiAiZ21ha2UgZGlyZWN0b3J5IGNoYW5nZSIgbGluZXM6CisgICAgTGluZXMgd2l0aCBhIGZvcm1hdCBsaWtlOgorICAgICAgXmdtYWtlWzxOVU0+XTogRW50ZXJpbmcgZGlyZWN0b3J5IGA8RElSPideCisgICAgYXJlIHVzZWQgdG8gZm9sbG93IHRoZSBkaXJlY3RvcnkgY2hhbmdlcyBkdXJpbmcgdGhlIG1ha2UgcHJvY2VzcywKKyAgICBwcm92aWRpbmcgaW4gdGhlIDxGSUxFPiBwYXJ0LCBhIHJlbGF0aXZlIChpZiBwb3NzaWJsZSkgZGlyZWN0b3J5CisgICAgcGF0aCB0byB0aGUgZXJyb25lb3VzIGZpbGUuCisKKworMSkgIEdDQzoKKyAgICBSZWNvZ25pemVkIGxpbmVzIGFyZSBvZiB0aGUgZm9ybWF0OgorICAgIC0gXkluIGZpbGUgaW5jbHVkZWQgZnJvbSA8RklMRT46PFJPVz46XgorICAgICAgTGluZSBmb2xsb3dpbmcgdGhpcyBvbmUgaXMgdXNlZCBhcyA8UkVBU09OPgorICAgICAgPFNFVkVSSVRZPiBpcyBhbHdheXMgJ2UnIChlcnJvcikKKyAgICAgIDxDT0w+IGlzIGFsd2F5cyAnMCcKKworICAgIC0gXjxGSUxFPjo8Uk9XPjo8UkVBU09OPl4KKyAgICAgIDxTRVZFUklUWT4gaXMgYWx3YXlzICdlJyAoZXJyb3IpCisgICAgICA8Q09MPiBpcyBhbHdheXMgJzAnCisKKworMikgIEFJWDoKKyAgICBSZWNvZ25pemVkIGxpbmVzIGFyZSBvZiB0aGUgZm9ybWF0OgorICAgIC0gXiI8RklMRT4iLCBsaW5lIDxST1c+LjxDT0w+OiA8PiAoPFNFVkVSSVRZPikgPFJFQVNPTj4iLAorCisKKzMpICBIUFVYOgorICAgIFJlY29nbml6ZWQgbGluZXMgYXJlIG9mIHRoZSBmb3JtYXQ6CisgICAgLSBeY2M6ICI8RklMRT4iLCBsaW5lIDxST1c+OiA8U0VWRVJJVFk+OiA8UkVBU09OPl4KKyAgICAgIDxDT0w+IGlzIGFsd2F5cyAnMCcKKworCis0KSAgU09MQVJJUzoKKyAgICBSZWNvZ25pemVkIGxpbmVzIGFyZSBvZiB0aGUgZm9ybWF0OgorICAgIC0gXiI8RklMRT4iLCBsaW5lIDxST1c+OiB3YXJuaW5nOiA8UkVBU09OPl4KKyAgICAgIFRoaXMgYXNzdW1lcyA8U0VWRVJJVFk+IGlzICJXIgorICAgICAgPENPTD4gaXMgYWx3YXlzICcwJworCisgICAgLSBeIjxGSUxFPiIsIGxpbmUgPFJPVz46IDxSRUFTT04+XgorICAgICAgVGhpcyBhc3N1bWVzIDxTRVZFUklUWT4gaXMgIkUiCisgICAgICA8Q09MPiBpcyBhbHdheXMgJzAnCisKKworNSkgIEFUVCAvIE5DUjoKKyAgICBSZWNvZ25pemVkIGxpbmVzIGFyZSBvZiB0aGUgZm9ybWF0OgorICAgIC0gXjxTRVZFUklUWT4gIjxGSUxFPiIsTDxST1c+L0M8Q09MPjw+OjxSRUFTT04+XgorCQkJIG9yCisgICAgLSBePFNFVkVSSVRZPiAiPEZJTEU+IixMPFJPVz4vQzxDT0w+OjxSRUFTT04+XgorICAgICAgRm9sbG93aW5nIGxpbmVzIGJlZ2lubmluZyB3aXRoIGEgcGlwZSAofCkgYXJlIGNvbnRpbnVhdGlvbgorICAgICAgbGluZXMsIGFuZCBhcmUgdGhlcmVmb3JlIGFwcGVuZGVkIHRvIHRoZSA8UkVBU09OPgorCisgICAgLSBePFNFVkVSSVRZPiAiPEZJTEU+IixMPFJPVz46PFJFQVNPTj5eCisgICAgICA8Q09MPiBpcyAnMCcKKyAgICAgIEZvbGxvd2luZyBsaW5lcyBiZWdpbm5pbmcgd2l0aCBhIHBpcGUgKHwpIGFyZSBjb250aW51YXRpb24KKyAgICAgIGxpbmVzLCBhbmQgYXJlIHRoZXJlZm9yZSBhcHBlbmRlZCB0byB0aGUgPFJFQVNPTj4KKworCis2KSAgU0dJLUlSSVg6CisgICAgUmVjb2duaXplZCBsaW5lcyBhcmUgb2YgdGhlIGZvcm1hdDoKKyAgICAtIF5jZmU6IDxTRVZFUklUWT46IDxGSUxFPjogPFJPVz46IDxSRUFTT04+XgorCQkJIG9yCisgICAgICBeY2ZlOiA8U0VWRVJJVFk+OiA8RklMRT4sIGxpbmUgPFJPVz46IDxSRUFTT04+XgorICAgICAgRm9sbG93aW5nIGxpbmVzIGJlZ2lubmluZyB3aXRoIGEgZGFzaCAoLSkgYXJlICJjb2x1bW4tYmFyIgorICAgICAgdGhhdCBlbmQgd2l0aCBhIGNhcmV0IGluIHRoZSBjb2x1bW4gb2YgdGhlIGVycm9yLiBUaGVzZSBsaW5lcworICAgICAgYXJlIGFuYWx5emVkIHRvIGdlbmVyYXRlIHRoZSA8Q09MPi4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdG9vbHMvZWZtX2ZpbHRlci5wbCBiL3J1bnRpbWUvdG9vbHMvZWZtX2ZpbHRlci5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZDFhNGYzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90b29scy9lZm1fZmlsdGVyLnBsCkBAIC0wLDAgKzEsMzkgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgVGhpcyBwcm9ncmFtIHdvcmtzIGFzIGEgZmlsdGVyIHRoYXQgcmVhZHMgZnJvbSBzdGRpbiwgY29waWVzIHRvCisjIHN0ZG91dCAqYW5kKiBjcmVhdGVzIGFuIGVycm9yIGZpbGUgdGhhdCBjYW4gYmUgcmVhZCBieSB2aW0uCisjCisjIFRoaXMgcHJvZ3JhbSBoYXMgb25seSBiZWVuIHRlc3RlZCBvbiBTR0ksIElyaXg1LjMuCisjCisjIFdyaXR0ZW4gYnkgSXZlcyBBZXJ0cyBpbiAxOTk2LiBUaGlzIGxpdHRsZSBwcm9ncmFtIGlzIG5vdCBndWFyYW50ZWVkCisjIHRvIGRvIChvciBub3QgZG8pIGFueXRoaW5nIGF0IGFsbCBhbmQgY2FuIGJlIGZyZWVseSB1c2VkIGZvcgorIyB3aGF0ZXZlciBwdXJwb3NlIHlvdSBjYW4gdGhpbmsgb2YuCisKKyRhcmdzID0gQEFSR1Y7CisKK3VubGVzcyAoJGFyZ3MgPT0gMSkgeworICBkaWUoIlVzYWdlOiB2aW1jY3BhcnNlIDxvdXRwdXQgZmlsZW5hbWU+XG4iKTsKK30KKworJGZpbGVuYW1lID0gQEFSR1ZbMF07CitvcGVuIChPVVQsICI+JGZpbGVuYW1lIikgfHwgZGllICgiQ2FuJ3Qgb3BlbiBmaWxlOiBcIiRmaWxlbmFtZVwiIik7CisKK3doaWxlICg8U1RESU4+KSB7CisgIHByaW50OworICBpZiAoICAgKC8iKC4qKSIsIGxpbmUgKFxkKyk6IChlKXJyb3JcKChcZCspXCk6LykKKyAgICAgIHx8ICgvIiguKikiLCBsaW5lIChcZCspOiAodylhcm5pbmdcKChcZCspXCk6LykgKSB7CisgICAgJGZpbGU9JDE7CisgICAgJGxpbmU9JDI7CisgICAgJGVycm9ydHlwZT0iXHUkMyI7CisgICAgJGVycm9ybnI9JDQ7CisgICAgY2hvcCgkZXJyb3Jtc2c9PFNURElOPik7CisgICAgJGVycm9ybXNnID1+IHMvXlxzKi8vOworICAgICRzb3VyY2VsaW5lPTxTVERJTj47CisgICAgJGNvbHVtbj1pbmRleCg8U1RESU4+LCAiXiIpIC0gMTsKKworICAgIHByaW50IE9VVCAiJGZpbGU+JGxpbmU6JGNvbHVtbjokZXJyb3J0eXBlOiRlcnJvcm5yOiRlcnJvcm1zZ1xuIjsKKyAgfQorfQorCitjbG9zZShPVVQpOworZXhpdCgwKTsKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdG9vbHMvZWZtX2ZpbHRlci50eHQgYi9ydW50aW1lL3Rvb2xzL2VmbV9maWx0ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjk3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3Rvb2xzL2VmbV9maWx0ZXIudHh0CkBAIC0wLDAgKzEsMzEgQEAKK1thZG9wdGVkIGZyb20gYSBtZXNzYWdlIHRoYXQgSXZlcyBwb3N0ZWQgaW4gdGhlIFZpbSBtYWlsaW5nIGxpc3RdCisKK1NvbWUgY29tcGlsZXJzIHByb2R1Y2UgYW4gZXJyb3IgbWVzc2FnZSB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIHdpdGgKKydlcnJvcmZvcm1hdCcgaW4gVmltLiAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSBQZXJsIHNjcmlwdCB0aGF0Cit0cmFuc2xhdGVzIG9uZSBlcnJvciBtZXNzYWdlIGludG8gc29tZXRoaW5nIHRoYXQgVmltIHVuZGVyc3RhbmRzLgorCisKK1RoZSBjb21waWxlciB0aGF0IGdlbmVyYXRlcyB0aGlzIGtpbmQgb2YgZXJyb3IgbWVzc2FnZXMgKDQgbGluZXMpOgorCisiL3RtcF9tbnQvY20vc3JjL2FwZXJ0b3MvTW9VL01ldGFDb3JlL01ldGFDb3JlL2NvbW1vbi9zcmMvTWV0YUNvcmVJbXBfTS5jYyIsCitsaW5lIDUwOiBlcnJvcigzMTE0KToKKwkgICBpZGVudGlmaWVyICJQUklNSVRJVkVfTSIgaXMgdW5kZWZpbmVkCisJIHJldHVybihFeGVjdXRlQ29yZShQUklNSVRJVkVfTSwKKworWW91IGNhbiBmaW5kIGEgc21hbGwgcGVybCBwcm9ncmFtIGF0IHRoZSBlbmQuCitUaGUgd2F5IEkgdXNlIGl0IGlzOgorCis6c2V0ICAgZXJyb3Jmb3JtYXQ9JWY+JWw6JWM6JXQ6JW46JW0KKzpzZXQgICBtYWtlcHJnPWNsZWFybWFrZVwgLUNcIGdudQorOnNldCAgIHNoZWxscGlwZT0yPiYxXHxcIHZpbWNjcGFyc2UKKworSWYgc29tZWJvZHkgdGhpbmtzIHRoaXMgaXMgdXNlZnVsOiBmZWVsIGZyZWUgdG8gZG8gd2hhdGV2ZXIgeW91IGNhbiB0aGluaworb2Ygd2l0aCB0aGlzIGNvZGUuCisKKy1JdmVzCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK0l2ZXMgQWVydHMgKFNXIERldmVsb3BlcikJICAgIFNvbnkgVGVsZWNvbSBFdXJvcGUKK2l2ZXNAc29ueXRlbC5iZQkJCSAgICBTdC5TdGV2ZW5zIFdvbHV3ZXN0ci4gNTUKK2BEZWF0aCBjb3VsZCBjcmVhdGUgbW9zdCB0aGluZ3MsICAgIEItMTEzMCBCcnVzc2VscywgQmVsZ2l1bQorIGV4Y2VwdCBmb3IgcGx1bWJpbmcuJwkJICAgIFBIT05FIDogKzMyIDIgNzI0IDE5IDY3CisJIChTb3VsIE11c2ljIC0gVC5QcmF0Y2hldHQpIEZBWCAgIDogKzMyIDIgNzI2IDI2IDg2CmRpZmYgLS1naXQgYS9ydW50aW1lL3Rvb2xzL2VmbV9wZXJsLnBsIGIvcnVudGltZS90b29scy9lZm1fcGVybC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NzBkNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90b29scy9lZm1fcGVybC5wbApAQCAtMCwwICsxLDE1MyBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKKyMgdmltcGFyc2UucGwgLSBSZWZvcm1hdHMgdGhlIGVycm9yIG1lc3NhZ2VzIG9mIHRoZSBQZXJsIGludGVycHJldGVyIGZvciB1c2UKKyMgd2l0aCB0aGUgcXVpY2tmaXggbW9kZSBvZiBWaW0KKyMKKyMgQ29weXJpZ2h0ICipKSAyMDAxIGJ5IEr2cmcgWmllZmxlIDxqb2VyZy56aWVmbGVAZ214LmRlPgorIyBZb3UgbWF5IHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgorIworIyBVc2FnZTogcHV0IG9uZSBvZiB0aGUgdHdvIGNvbmZpZ3VyYXRpb25zIGJlbG93IGluIHlvdXIgfi8udmltcmMgKHdpdGhvdXQgdGhlCisjIGRlc2NyaXB0aW9uIGFuZCAnIyAnKSBhbmQgZW5qb3kgKGJlIHN1cmUgdG8gYWRqdXN0IHRoZSBwYXRocyB0byB2aW1wYXJzZS5wbAorIyBiZWZvcmUpOgorIworIyBQcm9ncmFtIGlzIHJ1biBpbnRlcmFjdGl2ZWx5IHdpdGggJ3BlcmwgLXcnOgorIworIyBzZXQgbWFrZXByZz0kSE9NRS9iaW4vdmltcGFyc2UucGxcICVcICQqCisjIHNldCBlcnJvcmZvcm1hdD0lZjolbDolbQorIworIyBQcm9ncmFtIGlzIG9ubHkgY29tcGlsZWQgd2l0aCAncGVybCAtd2MnOgorIworIyBzZXQgbWFrZXByZz0kSE9NRS9iaW4vdmltcGFyc2UucGxcIC1jXCAlXCAkKgorIyBzZXQgZXJyb3Jmb3JtYXQ9JWY6JWw6JW0KKyMKKyMgVXNhZ2U6CisjCXZpbXBhcnNlLnBsIFstY10gWy1mIDxlcnJvcmZpbGU+XSA8cHJvZ3JhbWZpbGU+IFtwcm9ncmFtYXJnc10KKyMKKyMJCS1jCWNvbXBpbGUgb25seSwgZG9uJ3QgcnVuIChwZXJsIC13YykKKyMJCS1mCXdyaXRlIGVycm9ycyB0byA8ZXJyb3JmaWxlPgorIworIyBFeGFtcGxlIHVzYWdlczoKKyMJKiBGcm9tIHRoZSBjb21tYW5kIGxpbmU6CisjCQl2aW1wYXJzZS5wbCBwcm9ncmFtLnBsCisjCisjCQl2aW1wYXJzZS5wbCAtYyAtZiBlcnJvcmZpbGUgcHJvZ3JhbS5wbAorIwkJVGhlbiBydW4gdmltIC1xIGVycm9yZmlsZSB0byBlZGl0IHRoZSBlcnJvcnMgd2l0aCBWaW0uCisjCisjCSogRnJvbSBWaW06CisjCQlFZGl0IGluIFZpbSAoYW5kIHNhdmUsIGlmIHlvdSBkb24ndCBoYXZlIGF1dG93cml0ZSBvbiksIHRoZW4KKyMJCXR5cGUgJzptYWsnIG9yICc6bWFrIGFyZ3MnIChhcmdzIGJlaW5nIHRoZSBwcm9ncmFtIGFyZ3VtZW50cykKKyMJCXRvIGVycm9yIGNoZWNrLgorIworIyBWZXJzaW9uIGhpc3Rvcnk6CisjCTAuMiAoMDQvMTIvMjAwMSk6CisjCQkqIEZpcnN0IHB1YmxpYyB2ZXJzaW9uIChzZW50IHRvIEJyYW0pCisjCQkqIC1jIGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIGNvbXBpbGluZyBvbmx5CisjCQkqIGdyYW1tYXRpY2FsIGZpeDogJ1RoZXJlIHdhcyAxIGVycm9yLicKKyMJCSogYnVnIGZpeCBmb3IgbXVsdGlwbGUgYXJndW1lbnRzCisjCQkqIG1vcmUgZXJyb3IgY2hlY2tzCisjCQkqIGRvY3VtZW50YXRpb24gKHRvcCBvZiBmaWxlLCAmdXNhZ2UpCisjCQkqIG1pbm9yIGNvZGUgY2xlYW4gdXBzCisjCTAuMSAoMDIvMDIvMjAwMSk6CisjCQkqIEluaXRpYWwgdmVyc2lvbgorIwkJKiBCYXNpYyBmdW5jdGlvbmFsaXR5CisjCisjIFRvZG86CisjCSogdGVzdCBvbiBtb3JlIHN5c3RlbXMKKyMJKiB1c2UgcG9ydGFibGUgd2F5IHRvIGRldGVybWluZSB0aGUgbG9jYXRpb24gb2YgcGVybCAoJ3VzZSBDb25maWcnKQorIwkqIGluY2x1ZGUgb3B0aW9uIHRoYXQgc2hvd3MgcGVybGRpYWcgbWVzc2FnZXMgZm9yIGVhY2ggZXJyb3IKKyMJKiBhbGxvdyB0byBwYXNzIGluIHByb2dyYW0gYnkgU1RESU4KKyMJKiBtb3JlIGludHVpdGl2ZSBiZWhhdmlvdXIgaWYgbm8gZXJyb3IgaXMgZm91bmQgKHNob3cgbWVzc2FnZSkKKyMKKyMgVGVzdGVkIHVuZGVyIFN1bk9TIDUuNyB3aXRoIFBlcmwgNS42LjAuICBMZXQgbWUga25vdyBpZiBpdCdzIG5vdCB3b3JraW5nIGZvcgorIyB5b3UuCisKK3VzZSBzdHJpY3Q7Cit1c2UgR2V0b3B0OjpTdGQ7CisKK3VzZSB2YXJzIHF3LyRvcHRfYyAkb3B0X2YgJG9wdF9oLzsgIyBuZWVkZWQgZm9yIEdldG9wdCBpbiBjb21iaW5hdGlvbiB3aXRoIHVzZSBzdHJpY3QgJ3ZhcnMnCisKK3VzZSBjb25zdGFudCBWRVJTSU9OID0+IDAuMjsKKworZ2V0b3B0cygnY2Y6aCcpOworCismdXNhZ2UgaWYgJG9wdF9oOyAjIG5vdCBuZWNlc3NhcmlseSBuZWVkZWQsIGJ1dCBnb29kIGZvciBmdXJ0aGVyIGV4dGVuc2lvbgorCitpZiAoZGVmaW5lZCAkb3B0X2YpIHsKKworICAgIG9wZW4gRklMRSwgIj4gJG9wdF9mIiBvciBkbyB7CisJd2FybiAiQ291bGRuJ3Qgb3BlbiAkb3B0X2Y6ICQhLiAgVXNpbmcgU1RET1VUIGluc3RlYWQuXG4iOworCXVuZGVmICRvcHRfZjsKKyAgICB9OworCit9OworCitteSAkaGFuZGxlID0gKGRlZmluZWQgJG9wdF9mID8gXCpGSUxFIDogXCpTVERPVVQpOworCisobXkgJGZpbGUgPSBzaGlmdCkgb3IgJnVzYWdlOyAjIGRpc3BsYXkgdXNhZ2UgaWYgbm8gZmlsZW5hbWUgaXMgc3VwcGxpZWQKK215ICRhcmdzID0gKEBBUkdWID8gJyAnIC4gam9pbiAnICcsIEBBUkdWIDogJycpOworCitteSBAbGluZXMgPSBgcGVybCBAe1tkZWZpbmVkICRvcHRfYyA/ICctYyAnIDogJycgXX0gLXcgIiRmaWxlJGFyZ3MiIDI+JjFgOworCitteSAkZXJyb3JzID0gMDsKK2ZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgeworCisgICAgY2hvbXAoJGxpbmUpOworICAgIG15ICgkZmlsZSwgJGxpbmVubywgJG1lc3NhZ2UsICRyZXN0KTsKKworICAgIGlmICgkbGluZSA9fiAvXiguKilcc2F0XHMoLiopXHNsaW5lXHMoXGQrKShcLnwsXHNuZWFyXHNcIi4qXCIpJC8pIHsKKworCSgkbWVzc2FnZSwgJGZpbGUsICRsaW5lbm8sICRyZXN0KSA9ICgkMSwgJDIsICQzLCAkNCk7CisJJGVycm9ycysrOworCSRtZXNzYWdlIC49ICRyZXN0IGlmICgkcmVzdCA9fiBzL14sLy8pOworCXByaW50ICRoYW5kbGUgIiRmaWxlOiRsaW5lbm86JG1lc3NhZ2VcbiI7CisKKyAgICB9IGVsc2UgeyBuZXh0IH07CisKK30KKworaWYgKGRlZmluZWQgJG9wdF9mKSB7CisKKyAgICBteSAkbXNnOworICAgIGlmICgkZXJyb3JzID09IDEpIHsKKworCSRtc2cgPSAiVGhlcmUgd2FzIDEgZXJyb3IuXG4iOworCisgICAgfSBlbHNlIHsKKworCSRtc2cgPSAiVGhlcmUgd2VyZSAkZXJyb3JzIGVycm9ycy5cbiI7CisKKyAgICB9OworCisgICAgcHJpbnQgU1RET1VUICRtc2c7CisgICAgY2xvc2UgRklMRTsKKyAgICB1bmxpbmsgJG9wdF9mIHVubGVzcyAkZXJyb3JzOworCit9OworCitzdWIgdXNhZ2UgeworCisgICAgKGxvY2FsICQwID0gJDApID1+IHMvXi4qXC8oW15cL10rKSQvJDEvOyAjIHJlbW92ZSBwYXRoIGZyb20gbmFtZSBvZiBwcm9ncmFtCisgICAgcHJpbnQ8PEVPVDsKK1VzYWdlOgorCSQwIFstY10gWy1mIDxlcnJvcmZpbGU+XSA8cHJvZ3JhbWZpbGU+IFtwcm9ncmFtYXJnc10KKworCQktYwljb21waWxlIG9ubHksIGRvbid0IHJ1biAoZXhlY3V0ZXMgJ3BlcmwgLXdjJykKKwkJLWYJd3JpdGUgZXJyb3JzIHRvIDxlcnJvcmZpbGU+CisKK0V4YW1wbGVzOgorCSogQXQgdGhlIGNvbW1hbmQgbGluZToKKwkJJDAgcHJvZ3JhbS5wbAorCQlEaXNwbGF5cyBvdXRwdXQgb24gU1RET1VULgorCisJCSQwIC1jIC1mIGVycm9yZmlsZSBwcm9ncmFtLnBsCisJCVRoZW4gcnVuICd2aW0gLXEgZXJyb3JmaWxlJyB0byBlZGl0IHRoZSBlcnJvcnMgd2l0aCBWaW0uCisKKwkqIEluIFZpbToKKwkJRWRpdCBpbiBWaW0gKGFuZCBzYXZlLCBpZiB5b3UgZG9uJ3QgaGF2ZSBhdXRvd3JpdGUgb24pLCB0aGVuCisJCXR5cGUgJzptYWsnIG9yICc6bWFrIGFyZ3MnIChhcmdzIGJlaW5nIHRoZSBwcm9ncmFtIGFyZ3VtZW50cykKKwkJdG8gZXJyb3IgY2hlY2suCitFT1QKKworICAgIGV4aXQgMDsKKworfTsKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdG9vbHMvbXZlLmF3ayBiL3J1bnRpbWUvdG9vbHMvbXZlLmF3awpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOTZmODA2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90b29scy9tdmUuYXdrCkBAIC0wLDAgKzEsMjMgQEAKKyMhL3Vzci9iaW4vbmF3ayAtZgorIworIyBDaGFuZ2UgIm5hd2siIHRvICJhd2siIG9yICJnYXdrIiBpZiB5b3UgZ2V0IGVycm9ycy4KKyMKKyMgTWFrZSBWaW0gRXJyb3JzCisjIFByb2Nlc3NlcyBlcnJvcnMgZnJvbSBjYyBmb3IgdXNlIGJ5IFZpbSdzIHF1aWNrIGZpeCB0b29scworIyBzcGVjaWZpY2FsbHkgaXQgdHJhbnNsYXRlcyB0aGUgLS0tLS0tLS0tXiBub3RhdGlvbiB0byBhCisjIGNvbHVtbiBudW1iZXIKKyMKK0JFR0lOIHsgRlM9Ils6LF0iIH0KKworL15jZmUvIHsgZmlsZT0kMworCSBtc2c9JDUKKwkgc3BsaXQoJDQscywiICIpCisJIGxpbmU9c1syXQorfQorCisjIFlvdSBtYXkgaGF2ZSB0byBzdWJzdGl0dXRlIGEgdGFiIGNoYXJhY3RlciBmb3IgdGhlIFx0IGhlcmU6CisvXltcdC1dKlxeLyB7CisJcD1tYXRjaCgkMCwgIi4qXFxeIiApCisJY29sPVJMRU5HVEgtMgorCXByaW50ZigiJXMsIGxpbmUgJWQsIGNvbCAlZCA6ICVzXG4iLCBmaWxlLGxpbmUsY29sLG1zZykKK30KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdG9vbHMvbXZlLnR4dCBiL3J1bnRpbWUvdG9vbHMvbXZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWE1Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90b29scy9tdmUudHh0CkBAIC0wLDAgKzEsMjAgQEAKK1sgVGhlIG12ZSBhd2sgc2NyaXB0IHdhcyBwb3N0ZWQgb24gdGhlIHZpbWRldiBtYWlsaW5nIGxpc3QgXQorCitGcm9tOiBqaW1tZXJAYmFybmV5Lm1kaGMubWRjLmNvbSAoSi4gTWNHbGFzc29uKQorRGF0ZTogTW9uLCAzMSBNYXIgMTk5NyAxMzoxNjo0OSAtMDcwMCAoTWFyKQorCitNeSBjb21waWxlciAoU0dJIE1JUFNwcm8gQyBjb21waWxlciAtIElSSVggNi40KSB3b3JrcyBsaWtlIHRoaXMuCitJIGhhdmUgd3JpdHRlbiBhIHNjcmlwdCBtdmUgKG1ha2UgdmltIGVycm9ycyksIHRocm91Z2ggd2hpY2ggSSBwaXBlIG15IG1ha2UKK291dHB1dCwgd2hpY2ggdHJhbnNsYXRlcyBvdXRwdXQgb2YgdGhlIGZvbGxvd2luZyBmb3JtOgorCitjZmU6IEVycm9yOiBzeW50YXguYywgbGluZSA0OiBTeW50YXggRXJyb3IKKyAgICAgaW50IGlbMTI7CisgLS0tLS0tLS0tLS0tXgorCitpbnRvOgorCisgY2wuYywgbGluZSA0LCBjb2wgMTIgOiAgU3ludGF4IEVycm9yCisKKyhpbiB2aW0gbm90YXRpb246ICAlZiwgbGluZSAlbCwgY29sICVjIDogJW0pCisKK1lvdSBtaWdodCBiZSBhYmxlIHRvIHRhaWxvciB0aGlzIGZvciB5b3VyIGNvbXBpbGVyJ3Mgb3V0cHV0LgpkaWZmIC0tZ2l0IGEvcnVudGltZS90b29scy9wbHRhZ3MucGwgYi9ydW50aW1lL3Rvb2xzL3BsdGFncy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YTc0NjgyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90b29scy9wbHRhZ3MucGwKQEAgLTAsMCArMSwzMDAgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyBwbHRhZ3MgLSBjcmVhdGUgYSB0YWdzIGZpbGUgZm9yIFBlcmwgY29kZSwgZm9yIHVzZSBieSB2aShtKQorIworIyBEaXN0cmlidXRlZCB3aXRoIFZpbSA8aHR0cDovL3d3dy52aW0ub3JnLz4sIGxhdGVzdCB2ZXJzaW9uIGFsd2F5cyBhdmFpbGFibGUKKyMgYXQgPGh0dHA6Ly93d3cubXNjaGEuY29tL21zY2hhLmh0bWw/cGx0YWdzI3Rvb2xzPgorIworIyBWZXJzaW9uIDIuMywgMjggRmVicnVhcnkgMjAwMgorIworIyBXcml0dGVuIGJ5IE1pY2hhZWwgU2NoYWFwIDxwbHRhZ3NAbXNjaGEuY29tPi4gIFN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudAorIyBhcmUgdmVyeSB3ZWxjb21lIQorIworIyBUaGlzIHNjcmlwdCB3aWxsIG5vdCB3b3JrIHdpdGggUGVybCA0IG9yIGJlbG93IQorIworIyBSZXZpc2lvbiBoaXN0b3J5OgorIyAgMS4wICAxOTk3PyAgICAgT3JpZ2luYWwgdmVyc2lvbiwgcXVpY2tseSBoYWNrZWQgdG9nZXRoZXIKKyMgIDIuMCAgMTk5OT8gICAgIENvbXBsZXRlbHkgcmV3cml0dGVuLCBiZXR0ZXIgc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwKKyMJCSAgc3VwcG9ydCBmb3IgdmFyaWFibGVzLCBwYWNrYWdlcywgRXh1YmVyYW50IEN0YWdzIGV4dGVuc2lvbnMKKyMgIDIuMQlKdW4gMjAwMCAgRml4ZWQgY3JpdGljYWwgYnVnICh0eXBvIGluIGNvbW1lbnQpIDstKQorIwkJICBTdXBwb3J0IG11bHRpcGxlIGxldmVsIHBhY2thZ2VzIChlLmcuIEFyY2hpdmU6OlppcDo6TWVtYmVyKQorIyAgMi4yCUp1bCAyMDAxICAnR2xvYicgd2lsZGNhcmRzIC0gZXNwZWNpYWxseSB1c2VmdWwgdW5kZXIgV2luZG93cworIwkJICAodGhhbmtzIHRvIFNlcmdlIFNpdmtvdiBhbmQgSmFzb24gS2luZykKKyMJCSAgQnVnIGZpeDogcmVzZXQgcGFja2FnZSBuYW1lIGZvciBlYWNoIGZpbGUKKyMgIDIuMjEgSnVsIDIwMDEgIE9vcHMuLi4gYnVnIGluIHZhcmlhYmxlIGRldGVjdGlvbiAoL2xvY2FsLi4vIC0+IC9ebG9jYWwuLi4vKQorIyAgMi4zCUZlYiAyMDAyICBTdXBwb3J0IHZhcmlhYmxlcyBkZWNsYXJlZCB3aXRoICJvdXIiCisjCQkgICh0aGFua3MgdG8gTHV0eiBNZW5kZSkKKworIyBDb21wbGFpbiBhYm91dCB1bmRlY2xhcmVkIHZhcmlhYmxlcwordXNlIHN0cmljdDsKKworIyBVc2VkIG1vZHVsZXMKK3VzZSBHZXRvcHQ6Okxvbmc7CisKKyMgT3B0aW9ucyB3aXRoIHRoZWlyIGRlZmF1bHRzCitteSAkZG9fc3VicyA9IDE7ICAgICMgLS1zdWJzLCAtLW5vc3VicyAgICBpbmNsdWRlIHN1YnMgaW4gdGFncyBmaWxlPworbXkgJGRvX3ZhcnMgPSAxOyAgICAjIC0tdmFycywgLS1ub3ZhcnMgICAgaW5jbHVkZSB2YXJpYWJsZXMgaW4gdGFncyBmaWxlPworbXkgJGRvX3BrZ3MgPSAxOyAgICAjIC0tcGtncywgLS1ub3BrZ3MgICAgaW5jbHVkZSBwYWNrYWdlcyBpbiB0YWdzIGZpbGU/CitteSAkZG9fZXh0cyA9IDE7ICAgICMgLS1leHRlbnNpb25zLCAtLW5vZXh0ZW5zaW9ucworCQkgICAgIwkJCSAgaW5jbHVkZSBFeHViZXJhbnQgQ3RhZ3MgZXh0ZW5zaW9ucworCisjIEdsb2JhbCB2YXJpYWJsZXMKK215ICRWRVJTSU9OID0gIjIuMjEiOwkjIHBsdGFncyB2ZXJzaW9uCitteSAkc3RhdHVzID0gMDsJCSMgR2V0T3B0aW9ucyByZXR1cm4gdmFsdWUKK215ICRmaWxlID0gIiI7CQkjIEZpbGUgYmVpbmcgcHJvY2Vzc2VkCitteSBAdGFncyA9ICgpOwkJIyBMaXN0IG9mIHByb2R1Y2VkIHRhZ3MKK215ICRpc19wa2cgPSAwOwkJIyBBcmUgd2UgdGFnZ2luZyBhIHBhY2thZ2U/CitteSAkaGFzX3N1YnMgPSAwOwkjIEhhcyB0aGlzIGZpbGUgYW55IHN1YnMgeWV0PworbXkgJHBhY2thZ2VfbmFtZSA9ICIiOwkjIE5hbWUgb2YgY3VycmVudCBwYWNrYWdlCitteSAkdmFyX2NvbnRpbnVlcyA9IDA7CSMgVmFyaWFibGUgZGVjbGFyYXRpb24gY29udGludWVzIG9uIGxhc3QgbGluZQorbXkgJGxpbmUgPSAiIjsJCSMgQ3VycmVudCBsaW5lIGluIGZpbGUKK215ICRzdG10ID0gIiI7CQkjIEN1cnJlbnQgUGVybCBzdGF0ZW1lbnQKK215IEB2YXJzID0gKCk7CQkjIExpc3Qgb2YgdmFyaWFibGVzIGluIGRlY2xhcmF0aW9uCitteSAkdmFyID0gIiI7CQkjIFZhcmlhYmxlIGluIGRlY2xhcmF0aW9uCitteSAkdGFnbGluZSA9ICIiOwkjIFRhZyBmaWxlIGxpbmUKKworIyBDcmVhdGUgYSB0YWcgZmlsZSBsaW5lIGFuZCBwdXNoIGl0IG9uIHRoZSBsaXN0IG9mIGZvdW5kIHRhZ3MKK3N1YiBNYWtlVGFnKCQkJCQkKQoreworICAgIG15ICgkdGFnLAkJIyBUYWcgbmFtZQorCSR0eXBlLAkJIyBUeXBlIG9mIHRhZworCSRpc19zdGF0aWMsCSMgSXMgdGhpcyBhIHN0YXRpYyB0YWc/CisJJGZpbGUsCQkjIEZpbGUgaW4gd2hpY2ggdGFnIGFwcGVhcnMKKwkkbGluZSkgPSBAXzsJIyBMaW5lIGluIHdoaWNoIHRhZyBhcHBlYXJzCisKKyAgICBteSAkdGFnbGluZSA9ICIiOyAgICMgQ3JlYXRlZCB0YWcgbGluZQorCisgICAgIyBPbmx5IHByb2Nlc3MgdGFnIGlmIG5vdCBlbXB0eQorICAgIGlmICgkdGFnKQorICAgIHsKKwkjIEdldCByaWQgb2YgXG4sIGFuZCBlc2NhcGUgLyBhbmQgXCBpbiBsaW5lCisJY2hvbXAgJGxpbmU7CisJJGxpbmUgPX4gcy9cXC9cXFxcL2c7CisJJGxpbmUgPX4gcy9cLy9cXFwvL2c7CisKKwkjIENyZWF0ZSBhIHRhZyBsaW5lCisJJHRhZ2xpbmUgPSAiJHRhZ1x0JGZpbGVcdC9eJGxpbmVcJC8iOworCisJIyBJZiB3ZSdyZSB0b2xkIHRvIGRvIHNvLCBhZGQgZXh0ZW5zaW9ucworCWlmICgkZG9fZXh0cykKKwl7CisJICAgICR0YWdsaW5lIC49ICI7XCJcdCR0eXBlIgorCQkJICAgIC4gKCRpc19zdGF0aWMgPyAiXHRmaWxlOiIgOiAiIikKKwkJCSAgICAuICgkcGFja2FnZV9uYW1lID8gIlx0Y2xhc3M6JHBhY2thZ2VfbmFtZSIgOiAiIik7CisJfQorCisJIyBQdXNoIGl0IG9uIHRoZSBzdGFjaworCXB1c2ggKEB0YWdzLCAkdGFnbGluZSk7CisgICAgfQorfQorCisjIFBhcnNlIHBhY2thZ2UgbmFtZSBmcm9tIHN0YXRlbWVudAorc3ViIFBhY2thZ2VOYW1lKCQpCit7CisgICAgbXkgKCRzdG10KSA9IEBfOyAgICAjIFN0YXRlbWVudAorCisgICAgIyBMb29rIGZvciB0aGUgYXJndW1lbnQgdG8gInBhY2thZ2UiLiAgUmV0dXJuIGl0IGlmIGZvdW5kLCBlbHNlIHJldHVybiAiIgorICAgIGlmICgkc3RtdCA9fiAvXnBhY2thZ2VccysoW1x3Ol0rKS8pCisgICAgeworCW15ICRwa2duYW1lID0gJDE7CisKKwkjIFJlbW92ZSBhbnkgcGFyZW50IHBhY2thZ2UgbmFtZShzKQorCSRwa2duYW1lID1+IHMvLio6Ly87CisJcmV0dXJuICRwa2duYW1lOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXJldHVybiAiIjsKKyAgICB9Cit9CisKKyMgUGFyc2Ugc3ViIG5hbWUgZnJvbSBzdGF0ZW1lbnQKK3N1YiBTdWJOYW1lKCQpCit7CisgICAgbXkgKCRzdG10KSA9IEBfOyAgICAjIFN0YXRlbWVudAorCisgICAgIyBMb29rIGZvciB0aGUgYXJndW1lbnQgdG8gInN1YiIuICBSZXR1cm4gaXQgaWYgZm91bmQsIGVsc2UgcmV0dXJuICIiCisgICAgaWYgKCRzdG10ID1+IC9ec3ViXHMrKFtcdzpdKykvKQorICAgIHsKKwlteSAkc3VibmFtZSA9ICQxOworCisJIyBSZW1vdmUgYW55IHBhcmVudCBwYWNrYWdlIG5hbWUocykKKwkkc3VibmFtZSA9fiBzLy4qOi8vOworCXJldHVybiAkc3VibmFtZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlyZXR1cm4gIiI7CisgICAgfQorfQorCisjIFBhcnNlIGFsbCB2YXJpYWJsZSBuYW1lcyBmcm9tIHN0YXRlbWVudAorc3ViIFZhck5hbWVzKCQpCit7CisgICAgbXkgKCRzdG10KSA9IEBfOworCisgICAgIyBSZW1vdmUgbXkgb3IgbG9jYWwgZnJvbSBzdGF0ZW1lbnQsIGlmIHByZXNlbnQKKyAgICAkc3RtdCA9fiBzL14obXl8b3VyfGxvY2FsKVxzKy8vOworCisgICAgIyBSZW1vdmUgYW55IGFzc2lnbm1lbnQgcGllY2UKKyAgICAkc3RtdCA9fiBzL1xzKj0uKi8vOworCisgICAgIyBOb3cgZmluZCBhbGwgdmFyaWFibGUgbmFtZXMsIGkuZS4gIndvcmRzIiBwcmVjZWRlZCBieSAkLCBAIG9yICUKKyAgICBAdmFycyA9ICgkc3RtdCA9fiAvW1wkXEBcJV0oW1x3Ol0rKVxiL2cpOworCisgICAgIyBSZW1vdmUgYW55IHBhcmVudCBwYWNrYWdlIG5hbWUocykKKyAgICBtYXAocy8uKjovLywgQHZhcnMpOworCisgICAgcmV0dXJuIChAdmFycyk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyBTdGFydCAjIyMjIyMjIyMjIyMjIyMKKworcHJpbnQgIlxucGx0YWdzICRWRVJTSU9OIGJ5IE1pY2hhZWwgU2NoYWFwIDxtc2NoYVxAbXNjaGEuY29tPlxuXG4iOworCisjIEdldCBvcHRpb25zCiskc3RhdHVzID0gR2V0T3B0aW9ucygic3VicyEiID0+IFwkZG9fc3VicywKKwkJICAgICAidmFycyEiID0+IFwkZG9fdmFycywKKwkJICAgICAicGtncyEiID0+IFwkZG9fcGtncywKKwkJICAgICAiZXh0ZW5zaW9ucyEiID0+IFwkZG9fZXh0cyk7CisKKyMgVXNhZ2UgaWYgZXJyb3IgaW4gb3B0aW9ucyBvciBubyBhcmd1bWVudHMgZ2l2ZW4KK3VubGVzcyAoJHN0YXR1cyAmJiBAQVJHVikKK3sKKyAgICBwcmludCAiXG4iIHVubGVzcyAoJHN0YXR1cyk7CisgICAgcHJpbnQgIiAgVXNhZ2U6ICQwIFtvcHRpb25zXSBmaWxlbmFtZSAuLi5cblxuIjsKKyAgICBwcmludCAiICBXaGVyZSBvcHRpb25zIGNhbiBiZTpcbiI7CisgICAgcHJpbnQgIiAgICAtLXN1YnMgKC0tbm9zdWJzKSAgICAgKGRvbid0KSBpbmNsdWRlIHN1YiBkZWNsYXJhdGlvbnMgaW4gdGFnIGZpbGVcbiI7CisgICAgcHJpbnQgIiAgICAtLXZhcnMgKC0tbm92YXJzKSAgICAgKGRvbid0KSBpbmNsdWRlIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBpbiB0YWcgZmlsZVxuIjsKKyAgICBwcmludCAiICAgIC0tcGtncyAoLS1ub3BrZ3MpICAgICAoZG9uJ3QpIGluY2x1ZGUgcGFja2FnZSBkZWNsYXJhdGlvbnMgaW4gdGFnIGZpbGVcbiI7CisgICAgcHJpbnQgIiAgICAtLWV4dGVuc2lvbnMgKC0tbm9leHRlbnNpb25zKVxuIjsKKyAgICBwcmludCAiICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9uJ3QpIGluY2x1ZGUgRXh1YmVyYW50IEN0YWdzIC8gVmltIHN0eWxlXG4iOworICAgIHByaW50ICIgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMgaW4gdGFnIGZpbGVcblxuIjsKKyAgICBwcmludCAiICBEZWZhdWx0IG9wdGlvbnM6ICI7CisgICAgcHJpbnQgKCRkb19zdWJzID8gIi0tc3VicyAiIDogIi0tbm9zdWJzICIpOworICAgIHByaW50ICgkZG9fdmFycyA/ICItLXZhcnMgIiA6ICItLW5vdmFycyAiKTsKKyAgICBwcmludCAoJGRvX3BrZ3MgPyAiLS1wa2dzICIgOiAiLS1ub3BrZ3MgIik7CisgICAgcHJpbnQgKCRkb19leHRzID8gIi0tZXh0ZW5zaW9uc1xuXG4iIDogIi0tbm9leHRlbnNpb25zXG5cbiIpOworICAgIHByaW50ICIgIEV4YW1wbGU6ICQwICoucGwgKi5wbSAuLi9zaGFyZWQvKi5wbVxuXG4iOworICAgIGV4aXQ7Cit9CisKKyMgTG9vcCB0aHJvdWdoIGZpbGVzIG9uIGNvbW1hbmQgbGluZSAtICdnbG9iJyBhbnkgd2lsZGNhcmRzLCBzaW5jZSBXaW5kb3dzCisjIGRvZXNuJ3QgZG8gdGhpcyBmb3IgdXMKK2ZvcmVhY2ggJGZpbGUgKG1hcCB7IGdsb2IgfSBAQVJHVikKK3sKKyAgICAjIFNraXAgaWYgdGhpcyBpcyBub3QgYSBmaWxlIHdlIGNhbiBvcGVuLiAgQWxzbyBza2lwIHRhZ3MgZmlsZXMgYW5kIGJhY2t1cAorICAgICMgZmlsZXMKKyAgICBuZXh0IHVubGVzcyAoKC1mICRmaWxlKSAmJiAoLXIgJGZpbGUpICYmICgkZmlsZSAhfiAvdGFncyQvKQorCQkgJiYgKCRmaWxlICF+IC9+JC8pKTsKKworICAgIHByaW50ICJUYWdnaW5nIGZpbGUgJGZpbGUuLi5cbiI7CisKKyAgICAkaXNfcGtnID0gMDsKKyAgICAkcGFja2FnZV9uYW1lID0gIiI7CisgICAgJGhhc19zdWJzID0gMDsKKyAgICAkdmFyX2NvbnRpbnVlcyA9IDA7CisKKyAgICBvcGVuIChJTiwgJGZpbGUpIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBmaWxlICckZmlsZSc6ICQhIjsKKworICAgICMgTG9vcCB0aHJvdWdoIGZpbGUKKyAgICBmb3JlYWNoICRsaW5lICg8SU4+KQorICAgIHsKKwkjIFN0YXRlbWVudCBpcyBsaW5lIHdpdGggY29tbWVudHMgYW5kIHdoaXRlc3BhY2UgdHJpbW1lZAorCSgkc3RtdCA9ICRsaW5lKSA9fiBzLyMuKi8vOworCSRzdG10ID1+IHMvXlxzKi8vOworCSRzdG10ID1+IHMvXHMqJC8vOworCisJIyBOb3RoaW5nIGxlZnQ/IE5ldmVyIG1pbmQuCisJbmV4dCB1bmxlc3MgKCRzdG10KTsKKworCSMgVGhpcyBpcyBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGlmIG9uZSB3YXMgc3RhcnRlZCBvbiB0aGUgcHJldmlvdXMKKwkjIGxpbmUsIG9yIGlmIHRoaXMgbGluZSBzdGFydHMgd2l0aCBteSBvciBsb2NhbAorCWlmICgkdmFyX2NvbnRpbnVlcyBvciAoJHN0bXQgPX4vXm15XGIvKQorCQkJICAgIG9yICgkc3RtdCA9fi9eb3VyXGIvKSBvciAoJHN0bXQgPX4vXmxvY2FsXGIvKSkKKwl7CisJICAgICMgVGhlIGRlY2xhcmF0aW9uIGNvbnRpbnVlcyBpZiB0aGUgbGluZSBkb2VzIG5vdCBlbmQgd2l0aCA7CisJICAgICR2YXJfY29udGludWVzID0gKCRzdG10ICF+IC87JC8pOworCisJICAgICMgTG9vcCB0aHJvdWdoIGFsbCB2YXJpYWJsZSBuYW1lcyBpbiB0aGUgZGVjbGFyYXRpb24KKwkgICAgZm9yZWFjaCAkdmFyIChWYXJOYW1lcygkc3RtdCkpCisJICAgIHsKKwkJIyBNYWtlIGEgdGFnIGZvciB0aGlzIHZhcmlhYmxlIHVubGVzcyB3ZSdyZSB0b2xkIG5vdCB0by4gIFdlCisJCSMgYXNzdW1lIHRoYXQgYSB2YXJpYWJsZSBpcyBhbHdheXMgc3RhdGljLCB1bmxlc3MgaXQgYXBwZWFycworCQkjIGluIGEgcGFja2FnZSBiZWZvcmUgYW55IHN1Yi4JKE5vdCBuZWNlc3NhcmlseSB0cnVlLCBidXQKKwkJIyBpdCdzIG9rIGZvciBtb3N0IHB1cnBvc2VzIGFuZCBWaW0gd29ya3MgZmluZSBldmVuIGlmIGl0IGlzCisJCSMgaW5jb3JyZWN0KQorCQlpZiAoJGRvX3ZhcnMpCisJCXsKKwkJICAgIE1ha2VUYWcoJHZhciwgInYiLCAoISRpc19wa2cgb3IgJGhhc19zdWJzKSwgJGZpbGUsICRsaW5lKTsKKwkJfQorCSAgICB9CisJfQorCisJIyBUaGlzIGlzIGEgcGFja2FnZSBkZWNsYXJhdGlvbiBpZiB0aGUgbGluZSBzdGFydHMgd2l0aCBwYWNrYWdlCisJZWxzaWYgKCRzdG10ID1+L15wYWNrYWdlXGIvKQorCXsKKwkgICAgIyBHZXQgbmFtZSBvZiB0aGUgcGFja2FnZQorCSAgICAkcGFja2FnZV9uYW1lID0gUGFja2FnZU5hbWUoJHN0bXQpOworCisJICAgIGlmICgkcGFja2FnZV9uYW1lKQorCSAgICB7CisJCSMgUmVtZW1iZXIgdGhhdCB3ZSdyZSBkb2luZyBhIHBhY2thZ2UKKwkJJGlzX3BrZyA9IDE7CisKKwkJIyBNYWtlIGEgdGFnIGZvciB0aGlzIHBhY2thZ2UgdW5sZXNzIHdlJ3JlIHRvbGQgbm90IHRvLiAgQQorCQkjIHBhY2thZ2UgaXMgbmV2ZXIgc3RhdGljLgorCQlpZiAoJGRvX3BrZ3MpCisJCXsKKwkJICAgIE1ha2VUYWcoJHBhY2thZ2VfbmFtZSwgInAiLCAwLCAkZmlsZSwgJGxpbmUpOworCQl9CisJICAgIH0KKwl9CisKKwkjIFRoaXMgaXMgYSBzdWIgZGVjbGFyYXRpb24gaWYgdGhlIGxpbmUgc3RhcnRzIHdpdGggc3ViCisJZWxzaWYgKCRzdG10ID1+L15zdWJcYi8pCisJeworCSAgICAjIFJlbWVtYmVyIHRoYXQgdGhpcyBmaWxlIGhhcyBzdWJzCisJICAgICRoYXNfc3VicyA9IDE7CisKKwkgICAgIyBNYWtlIGEgdGFnIGZvciB0aGlzIHN1YiB1bmxlc3Mgd2UncmUgdG9sZCBub3QgdG8uICBXZSBhc3N1bWUKKwkgICAgIyB0aGF0IGEgc3ViIGlzIHN0YXRpYywgdW5sZXNzIGl0IGFwcGVhcnMgaW4gYSBwYWNrYWdlLiAgKE5vdAorCSAgICAjIG5lY2Vzc2FyaWx5IHRydWUsIGJ1dCBpdCdzIG9rIGZvciBtb3N0IHB1cnBvc2VzIGFuZCBWaW0gd29ya3MKKwkgICAgIyBmaW5lIGV2ZW4gaWYgaXQgaXMgaW5jb3JyZWN0KQorCSAgICBpZiAoJGRvX3N1YnMpCisJICAgIHsKKwkJTWFrZVRhZyhTdWJOYW1lKCRzdG10KSwgInMiLCAoISRpc19wa2cpLCAkZmlsZSwgJGxpbmUpOworCSAgICB9CisJfQorICAgIH0KKyAgICBjbG9zZSAoSU4pOworfQorCisjIERvIHdlIGhhdmUgYW55IHRhZ3M/ICBJZiBzbywgd3JpdGUgdGhlbSB0byB0aGUgdGFncyBmaWxlCitpZiAoQHRhZ3MpCit7CisgICAgIyBBZGQgc29tZSB0YWcgZmlsZSBleHRlbnNpb25zIGlmIHdlJ3JlIHRvbGQgdG8KKyAgICBpZiAoJGRvX2V4dHMpCisgICAgeworCXB1c2ggKEB0YWdzLCAiIV9UQUdfRklMRV9GT1JNQVRcdDJcdC9leHRlbmRlZCBmb3JtYXQvIik7CisJcHVzaCAoQHRhZ3MsICIhX1RBR19GSUxFX1NPUlRFRFx0MVx0LzA9dW5zb3J0ZWQsIDE9c29ydGVkLyIpOworCXB1c2ggKEB0YWdzLCAiIV9UQUdfUFJPR1JBTV9BVVRIT1JcdE1pY2hhZWwgU2NoYWFwXHQvbXNjaGFcQG1zY2hhLmNvbS8iKTsKKwlwdXNoIChAdGFncywgIiFfVEFHX1BST0dSQU1fTkFNRVx0cGx0YWdzXHQvLyIpOworCXB1c2ggKEB0YWdzLCAiIV9UQUdfUFJPR1JBTV9WRVJTSU9OXHQkVkVSU0lPTlx0L3N1cHBvcnRzIG11bHRpcGxlIHRhZ3MgYW5kIGV4dGVuZGVkIGZvcm1hdC8iKTsKKyAgICB9CisKKyAgICBwcmludCAiXG5Xcml0aW5nIHRhZ3MgZmlsZS5cbiI7CisKKyAgICBvcGVuIChPVVQsICI+dGFncyIpIG9yIGRpZSAiQ2FuJ3Qgb3BlbiB0YWdzIGZpbGU6ICQhIjsKKworICAgIGZvcmVhY2ggJHRhZ2xpbmUgKHNvcnQgQHRhZ3MpCisgICAgeworCXByaW50IE9VVCAiJHRhZ2xpbmVcbiI7CisgICAgfQorCisgICAgY2xvc2UgKE9VVCk7Cit9CitlbHNlCit7CisgICAgcHJpbnQgIlxuTm8gdGFncyBmb3VuZC5cbiI7Cit9CmRpZmYgLS1naXQgYS9ydW50aW1lL3Rvb2xzL3JlZiBiL3J1bnRpbWUvdG9vbHMvcmVmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc3YmZjODAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3Rvb2xzL3JlZgpAQCAtMCwwICsxLDExIEBACisjIS9iaW4vc2gKKyMKKyMgcmVmIC0gQ2hlY2sgc3BlbGxpbmcgb2YgdGhlIGFyZ3VtZW50cworIworIyBVc2FnZTogcmVmIHdvcmQgLi4KKyMKKyMgY2FuIGJlIHVzZWQgZm9yIHRoZSBLIGNvbW1hbmQgb2YgVmltCisjCitzcGVsbCA8PEVPRgorJCoKK0VPRgpkaWZmIC0tZ2l0IGEvcnVudGltZS90b29scy9zaHRhZ3MuMSBiL3J1bnRpbWUvdG9vbHMvc2h0YWdzLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0ZGY4OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdG9vbHMvc2h0YWdzLjEKQEAgLTAsMCArMSw2MSBAQAorLlRIIHNodGFncyAxICJsb2NhbCBVdGlsaXRpZXMiCisuU0ggTkFNRQorc2h0YWdzIFwtIENyZWF0ZSB0YWdzIGZvciBzaGVsbCBzY3JpcHRzCisuU0ggU1lOT1BTSVMKKy5CIHNodGFncworW1xmSS1tdndcZlBdIFtcZkktdCA8ZmlsZT5cZlBdIFtcZkktcyA8c2hlbGw+XGZQXSA8ZmlsZXM+CisuU0ggREVTQ1JJUFRJT04KK1xmQnNodGFnc1xmUCBjcmVhdGVzIGEgXGZCdmkoMSlcZlAgdGFncyBmaWxlIGZvciBzaGVsbCBzY3JpcHRzIC0gd2hpY2gKK2Vzc2VudGlhbGx5IHR1cm5zIHlvdXIgY29kZSBpbnRvIGEgaHlwZXJ0ZXh0IGRvY3VtZW50LiBcZkJzaHRhZ3NcZlAKK2F0dGVtcHRzIHRvIGNyZWF0ZSB0YWdzIGZvciBhbGwgZnVuY3Rpb24gYW5kIHZhcmlhYmxlIGRlZmluaXRpb25zLAorYWx0aG91Z2ggdGhpcyBpcyBhIGxpdHRsZSBkaWZmaWN1bHQsIGJlY2F1c2UgaW4gbW9zdCBzaGVsbCBsYW5ndWFnZXMsCit2YXJpYWJsZXMgZG9uJ3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IGRlZmluZWQsIGFuZCBhcyBzdWNoIHRoZXJlIGlzCitvZnRlbiBubyBkaXN0aW5jdCAidmFyaWFibGUgZGVmaW5pdGlvbiIuIElmIHRoaXMgaXMgdGhlIGNhc2UsCitcZkJzaHRhZ3NcZlAgc2ltcGx5IGNyZWF0ZXMgYSB0YWcgZm9yIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhIHZhcmlhYmxlCit3aGljaCBpcyBiZWluZyBzZXQgaW4gYSBzaW1wbGUgd2F5LCBpZTogXGZJc2V0IHggPSA1XGZQLgorLlNIIE9QVElPTlMKKy5JUCAiXGZCLXQgPGZpbGU+XGZQIgorTmFtZSBvZiB0YWdzIGZpbGUgdG8gY3JlYXRlLiAoZGVmYXVsdCBpcyAndGFncycpCisuSVAgIlxmQi1zIDxzaGVsbD5cZlAiCitUaGUgbmFtZSBvZiB0aGUgc2hlbGwgdXNlZCBieSB0aGUgc2NyaXB0KHMpLiBCeSBkZWZhdWx0LAorXGZCc2h0YWdzXGZQIHRyaWVzIHRvIHdvcmsgb3V0IHdoaWNoIGlzIHRoZSBhcHByb3ByaWF0ZSBzaGVsbCBmb3IgZWFjaAorZmlsZSBpbmRpdmlkdWFsbHkgYnkgbG9va2luZyBhdCB0aGUgZmlyc3QgbGluZSBvZiBlYWNoIGZpbGUuIFRoaXMgd29udAord29yayBob3dldmVyLCBpZiB0aGUgc2NyaXB0IHN0YXJ0cyBhcyBhIGJvdXJuZSBzaGVsbCBzY3JpcHQgYW5kIHRyaWVzCit0byBiZSBjbGV2ZXIgYWJvdXQgc3RhcnRpbmcgdGhlIHNoZWxsIGl0IHJlYWxseSB3YW50cy4KKy5iCitDdXJyZW50bHkgc3VwcG9ydGVkIHNoZWxscyBhcmU6CisuUlMKKy5JUCBcZkJzaFxmUAorQm91cm5lIFNoZWxsCisuSVAgXGZCcGVybFxmUAorUGVybCAodmVyc2lvbnMgNCBhbmQgNSkKKy5JUCBcZkJrc2hcZlAKK0tvcm4gU2hlbGwKKy5JUCBcZkJ0Y2xzaFxmUAorVGhlIFRDTCBzaGVsbAorLklQIFxmQndpc2hcZlAKK1RoZSBUSyBXaW5kb3dpbmcgc2hlbGwgKHNhbWUgYXMgdGNsc2gpCisuUkUKKworLklQIFxmQi12XGZQCitJbmNsdWRlIHZhcmlhYmxlIGRlZmluaXRpb25zICh2YXJpYWJsZXMgbWVudGlvbmVkIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUpCisuSVAgXGZCLVZcZlAKK1ByaW50IHZlcnNpb24gaW5mb3JtYXRpb24uCisuSVAgXGZCLXdcZlAKK1N1cHByZXNzICJkdXBsaWNhdGUgdGFnIiB3YXJuaW5nIG1lc3NhZ2VzLgorLklQIFxmQi14XGZQCitFeHBsaWNpdGx5IGNyZWF0ZSBhIG5ldyB0YWdzIGZpbGUuIE5vcm1hbGx5IG5ldyB0YWdzIGFyZSBtZXJnZWQgd2l0aAordGhlIG9sZCB0YWdzIGZpbGUuCisuUFAKK1xmQnNodGFnc1xmUCBzY2FucyB0aGUgc3BlY2lmaWVkIGZpbGVzIGZvciBzdWJyb3V0aW5lcyBhbmQgcG9zc2libHkKK3ZhcmlhYmxlIGRlZmluaXRpb25zLCBhbmQgY3JlYXRlcyBhIFxmQnZpXGZQIHN0eWxlIHRhZ3MgZmlsZS4KKy5TSCBGSUxFUworLklQIFxmQnRhZ3NcZlAKK0EgdGFncyBmaWxlIGNvbnRhaW5zIGEgc29ydGVkIGxpc3Qgb2YgdGFncywgb25lIHRhZyBwZXIgbGluZS4gVGhlCitmb3JtYXQgaXMgdGhlIHNhbWUgYXMgdGhhdCB1c2VkIGJ5IFxmQnZpXGZQKDEpCisuU0ggQVVUSE9SCitTdGVwaGVuIFJpZWhtCisuYnIKK3NyQHBjLXBsdXMuZGUKKy5TSCAiU0VFIEFMU08iCitjdGFncygxKSwgZXRhZ3MoMSksIHBlcmwoMSksIHRjbHNoKDEpLCB3aXNoKDEpLCBzaCgxKSwga3NoKDEpLgpkaWZmIC0tZ2l0IGEvcnVudGltZS90b29scy9zaHRhZ3MucGwgYi9ydW50aW1lL3Rvb2xzL3NodGFncy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OGRjZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90b29scy9zaHRhZ3MucGwKQEAgLTAsMCArMSwxNDQgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgc2h0YWdzOiBjcmVhdGUgYSB0YWdzIGZpbGUgZm9yIHBlcmwgc2NyaXB0cworIworIyBBdXRob3I6CVN0ZXBoZW4gUmllaG0KKyMgTGFzdCBDaGFuZ2VkOgk5Ni8xMS8yNyAxOTo0NjowNgorIworIyAiQCgjKSBzaHRhZ3MgMS4xIGJ5IFMuIFJpZWhtIgorIworCisjIG9idmlvdXMuLi4gOi0pCitzdWIgdXNhZ2UKKyAgICB7CisgICAgcHJpbnQgPDxfRU9VU0FHRV8gOworVVNBR0U6ICRwcm9ncmFtIFsta3Z3VnhdIFstdCA8ZmlsZT5dIDxmaWxlcz4KKyAgICAtdCA8ZmlsZT4JTmFtZSBvZiB0YWdzIGZpbGUgdG8gY3JlYXRlLiAoZGVmYXVsdCBpcyAndGFncycpCisgICAgLXMgPHNoZWxsPglOYW1lIG9mIHRoZSBzaGVsbCBsYW5ndWFnZSBpbiB0aGUgc2NyaXB0CisgICAgLXYJCUluY2x1ZGUgdmFyaWFibGUgZGVmaW5pdGlvbnMuCisJCSh2YXJpYWJsZXMgbWVudGlvbmVkIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUpCisgICAgLVYJCVByaW50IHZlcnNpb24gaW5mb3JtYXRpb24uCisgICAgLXcJCVN1cHByZXNzICJkdXBsaWNhdGUgdGFnIiB3YXJuaW5ncy4KKyAgICAteAkJRXhwbGljaXRseSBjcmVhdGUgYSBuZXcgdGFncyBmaWxlLiBOb3JtYWxseSB0YWdzIGFyZSBtZXJnZWQuCisgICAgPGZpbGVzPglMaXN0IG9mIGZpbGVzIHRvIHNjYW4gZm9yIHRhZ3MuCitfRU9VU0FHRV8KKyAgICBleGl0IDAKKyAgICB9CisKK3N1YiB2ZXJzaW9uCit7CisgICAgIworICAgICMgVmVyc2lvbiBpbmZvcm1hdGlvbgorICAgICMKKyAgICBAaWQgPSBzcGxpdCggJywgJywgJ3NjcmlwdHMvYmluL3NodGFncywgL3Vzci9sb2NhbC8sIExPQ0FMX1NDUklQVFMsIDEuMSwgOTYvMTEvMjcsIDE5OjQ2OjA2JyApOworICAgICRpZFswXSA9fiBzLC4qLywsOworICAgIHByaW50IDw8X0VPVkVSUzsKKyRpZFswXToJCSRpZFszXQorTGFzdCBNb2RpZmllZDoJQGlkWzQsNV0KK0NvbXBvbmVudDoJJGlkWzFdCitSZWxlYXNlOgkkaWRbMl0KK19FT1ZFUlMKKyAgICBleGl0KCAxICk7Cit9CisKKyMKKyMgaW5pdGlhbGlzYXRpb25zCisjCisoJHByb2dyYW0gPSAkMCkgPX4gcywuKi8sLDsKK3JlcXVpcmUgJ2dldG9wdHMucGwnOworCisjCisjIHBhcnNlIGNvbW1hbmQgbGluZQorIworJkdldG9wdHMoICJ0OnM6dlZ3eCIgKSB8fCAmdXNhZ2UoKTsKKyR0YWdzX2ZpbGUgPSAkb3B0X3QgfHwgJ3RhZ3MnOworJGV4cGxpY2l0ID0gJG9wdF94OworJHZhcmlhYmxlX3RhZ3MgPSAkb3B0X3Y7CiskYWxsb3dfd2FybmluZ3MgPSAhICRvcHRfdzsKKyZ2ZXJzaW9uCSAgaWYgJG9wdF9WOworJnVzYWdlKCkJdW5sZXNzIEBBUkdWICE9IDA7CisKKyMgc2x1cnAgdXAgdGhlIGV4aXN0aW5nIHRhZ3MuIFNvbWUgd2lsbCBiZSByZXBsYWNlZCwgdGhlIG9uZXMgdGhhdCBhcmVuJ3QKKyMgd2lsbCBiZSByZS13cml0dGVuIGV4YWN0bHkgYXMgdGhleSB3ZXJlIHJlYWQKK2lmKCAhICRleHBsaWNpdCAmJiBvcGVuKCBUQUdTLCAiPCAkdGFnc19maWxlIiApICkKKyAgICB7CisgICAgd2hpbGUoIDxUQUdTPiApCisJeworCS9eXFMrLzsKKwkkdGFnc3skJn0gPSAkXzsKKwl9CisgICAgY2xvc2UoIFRBR1MgKTsKKyAgICB9CisKKyMKKyMgZm9yIGVhY2ggbGluZSBvZiBldmVyeSBmaWxlIGxpc3RlZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBsb29rIGZvciBhCisjICdzdWInIGRlZmluaXRpb24sIG9yLCBpZiB2YXJpYWJsZXMgYXJlIHdhbnRlZCBhc3dlbGwsIGxvb2sgZm9yIGEKKyMgdmFyaWFibGUgZGVmaW5pdGlvbiBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lCisjCit3aGlsZSggPD4gKQorICAgIHsKKyAgICAmY2hlY2tfc2hlbGwoJF8pLCAoICRvbGRfZmlsZSA9ICRBUkdWICkgaWYgJEFSR1YgbmUgJG9sZF9maWxlOworICAgIG5leHQgdW5sZXNzICRzaGVsbDsKKyAgICBpZiggJHNoZWxsIGVxICJzaCIgKQorCXsKKwluZXh0CXVubGVzcyAvXlxzKigoKFx3KykpKVxzKlwoXHMqXCkvCisJCSAgICB8fCAoICR2YXJpYWJsZV90YWdzICYmIC9eKCgoXHcrKT0pKS8gKTsKKwkkbWF0Y2ggPSAkMzsKKwl9CisgICAgaWYoICRzaGVsbCBlcSAia3NoIiApCisJeworCSMga3NoCisJbmV4dAl1bmxlc3MgL15ccypmdW5jdGlvblxzKygoKFx3KykpKS8KKwkJICAgIHx8ICggJHZhcmlhYmxlX3RhZ3MgJiYgL14oKChcdyspPSkpLyApOworCSRtYXRjaCA9ICQzOworCX0KKyAgICBpZiggJHNoZWxsIGVxICJwZXJsIiApCisJeworCSMgcGVybAorCW5leHQJdW5sZXNzIC9eXHMqc3ViXHMrKFx3KygnfDo6KSk/KFx3KykvCisJCSAgICB8fCAvXlxzKigoKFx3KykpKTovCisJCSAgICB8fCAoICR2YXJpYWJsZV90YWdzICYmIC9eKChbKFxzXSpbXCRcQFwlXXsxfShcdyspLio9KSkvICk7CisJJG1hdGNoID0gJDM7CisJfQorICAgIGlmKCAkc2hlbGwgZXEgInRjbCIgKQorCXsKKwluZXh0CXVubGVzcyAvXlxzKnByb2NccysoKChcUyspKSkvCisJCSAgICB8fCAoICR2YXJpYWJsZV90YWdzICYmIC9eXHMqc2V0XHMrKCgoXHcrKVxzKSkvICk7CisJJG1hdGNoID0gJDM7CisJfQorICAgIGNob3A7CisgICAgd2FybiAiJG1hdGNoIC0gZHVwbGljYXRlIGlnbm9yZWRcbiIKKwlpZiAoICRuZXd7JG1hdGNofSsrCisJICAgIHx8ICEoICR0YWdzeyRtYXRjaH0gPSBzcHJpbnRmKCAiJXNcdCVzXHQ/XiVzXCQ/XG4iLCAkbWF0Y2gsICRBUkdWLCAkXyApICkgKQorCSAgICAmJiAkYWxsb3dfd2FybmluZ3M7CisgICAgfQorCisjIHdyaXRlIHRoZSBuZXcgdGFncyB0byB0aGUgdGFncyBmaWxlIC0gbm90ZSB0aGF0IHRoZSB3aG9sZSBmaWxlIGlzIHJld3JpdHRlbgorb3BlbiggVEFHUywgIj4gJHRhZ3NfZmlsZSIgKTsKK2ZvcmVhY2goIHNvcnQoIGtleXMgJXRhZ3MgKSApCisgICAgeworICAgIHByaW50IFRBR1MgIiR0YWdzeyRffSI7CisgICAgfQorY2xvc2UoIFRBR1MgKTsKKworc3ViIGNoZWNrX3NoZWxsCisgICAgeworICAgIGxvY2FsKCAkXyApID0gQF87CisgICAgIyByZWFkIHRoZSBmaXJzdCBsaW5lIG9mIGEgc2NyaXB0LCBhbmQgd29yayBvdXQgd2hpY2ggc2hlbGwgaXQgaXMsCisgICAgIyB1bmxlc3MgYSBzaGVsbCB3YXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAgICAjCisgICAgIyBUaGlzIHJvdXRpbmUgY2FuJ3QgaGFuZGxlIGNsZXZlciBzY3JpcHRzIHdoaWNoIHN0YXJ0IHNoIGFuZCB0aGVuCisgICAgIyB1c2Ugc2ggdG8gc3RhcnQgdGhlIHNoZWxsIHRoZXkgcmVhbGx5IHdhbnRlZC4KKyAgICBpZiggJG9wdF9zICkKKwl7CisJJHNoZWxsID0gJG9wdF9zOworCX0KKyAgICBlbHNlCisJeworCSRzaGVsbCA9ICJzaCIJaWYgL146JC8gfHwgL14jIS4qXC9iaW5cL3NoLzsKKwkkc2hlbGwgPSAia3NoIglpZiAvXiMhLipcL2tzaC87CisJJHNoZWxsID0gInBlcmwiCWlmIC9eIyEuKlwvcGVybC87CisJJHNoZWxsID0gInRjbCIgIGlmIC9eIyEuKlwvd2lzaC87CisJcHJpbnRmICJVc2luZyAkc2hlbGwgZm9yICRBUkdWXG4iOworCX0KKyAgICB9CmRpZmYgLS1naXQgYS9ydW50aW1lL3Rvb2xzL3RjbHRhZ3MgYi9ydW50aW1lL3Rvb2xzL3RjbHRhZ3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTUyNDE1MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdG9vbHMvdGNsdGFncwpAQCAtMCwwICsxLDE1OSBAQAorIyEvYmluL3NoCisjIHZpbTp0cz00OgorIyBHZW5lcmF0ZXMgYSB0YWcgZmlsZSBmb3IgVENMIGNvZGUuIFNsb3csIGJ1dCBnZXRzIHRoZSBqb2IgZG9uZS4KKyMKKyMgV3JpdHRlbiBieSBEYXJyZW4gSGllYmVydCA8ZGFycmVuQGhpZWJlcnQuY29tPgorCitwcm9ncmFtX25hbWU9YGJhc2VuYW1lICQwYAorcHJvZ3JhbV92ZXJzaW9uPSIwLjMiCitwcm9ncmFtX2F1dGhvcj0iRGFycmVuIEhpZWJlcnQiCithdXRob3JfZW1haWw9ImRhcnJlbkBoaWViZXJ0LmNvbSIKK3RtcF90YWdmaWxlPS90bXAvJHtwcm9ncmFtX25hbWV9LiQkCisKK3VzYWdlPSJcCitVc2FnZTogJHByb2dyYW1fbmFtZSBbLWF1XSBbLXtmfG99IHRhZ2ZpbGVdIFstLWZvcm1hdD1uXSBmaWxlKHMpCisgIC1hICAgICAgICAgIGFwcGVuZCB0byBjdXJyZW50IHRhZyBmaWxlCisgIC1mIHRhZ2ZpbGUgIHNwZWNpZnkgb3V0cHV0IHRhZyBmaWxlIG5hbWUgKGRlZmF1bHQ9dGFncykKKyAgLW8gICAgICAgICAgYWx0ZXJuYXRpdmUgZm9yIC1mCisgIC11ICAgICAgICAgIHVuc29ydGVkCisgIC0tZm9ybWF0PW4gIHNwZWNpZnkgdGFnIGZpbGUgZm9ybWF0IChkZWZhdWx0PTIpCisgIC0taGVscCAgICAgIHByaW50IHRoaXMgaGVscCBtZXNzYWdlCisiCisKKyMgZGVmYXVsdHMKKyMKK2FwcGVuZD0wCitmb3JtYXQ9Mgorc29ydGVkPTEKK3RhZ2ZpbGU9dGFncworZmlsZWxpc3Q9CisKKyMgcmVhZCBvcHRpb25zCisjCitnZXRwYXJhbSgpCit7CisJaWYgWyAtbiAiJDEiIF07IHRoZW4KKwkJIyBzZXQgdmFyaWFibGUgdG8gd29yZCBwYXNzZWQgaW4KKwkJZWNobyAiJDI9JyQxJzsgb3B0PSIKKwllbHNlCisJCSMgc2V0IHZhcmlhYmxlIHRvIG5leHQgd29yZCBvbiBjb21tYW5kIGxpbmUKKwkJZWNobyAiJDI9IickMSciOyBzaGlmdCIKKwlmaQorfQorCitmaW5pc2hlZD0wCit3aGlsZSBbICQjIC1ndCAwICAtYSAgJGZpbmlzaGVkIC1lcSAwIF0KK2RvCisgICAgY2FzZSAiJDEiIGluCisJCS0tKikKKwkJCW9wdD1gZWNobyAiJDEiIHwgY3V0IC1jIDMtYAorCQkJc2hpZnQKKwkJCW9wdF9uYW1lPWBlY2hvICIkb3B0IiB8IGF3ayAtRj0gJ3twcmludCAkMX0nYAorCQkJb3B0X3ZhbHVlPWBlY2hvICIkb3B0IiB8IGF3ayAtRj0gJ3twcmludCAkMn0nYAorCQkJY2FzZSAiJG9wdF9uYW1lIiBpbgorCQkJCWZvcm1hdCkgY2FzZSAiJG9wdF92YWx1ZSIgaW4KKwkJCQkJCQkxfDIpIGZvcm1hdD0kb3B0X3ZhbHVlOzsKKwkJCQkJCQkqKSBlY2hvICItLSRvcHQ6IHVuc3VwcG9ydGVkIHZhbHVlIiA+JjI7IGV4aXQgMTs7CisJCQkJCQllc2FjCisJCQkJCQk7OworCQkJCWhlbHApCWVjaG8gIiR1c2FnZSI7IGV4aXQgMDs7CisJCQkJKikJCWVjaG8gIiRvcHRfbmFtZTogdW5zdXBwb3J0ZWQgb3B0aW9uIiA+JjI7IGV4aXQgMTs7CisJCQllc2FjCisJCQk7OworCQktKikKKwkJCSMgY2hvcCBvZmYgbGVhZGluZyAnLScKKwkJCW9wdD1gZWNobyAiJDEiIHwgY3V0IC1jIDItYAorCQkJc2hpZnQKKwkJCXdoaWxlIFsgLW4gIiRvcHQiIF0KKwkJCWRvCisJCQkJb3B0X2NoYXI9YGVjaG8gIiRvcHQiIHwgY3V0IC1jIDFgCisJCQkJb3B0PWBlY2hvICIkb3B0IiB8IGN1dCAtYyAyLWAKKwkJCQljYXNlICIkb3B0X2NoYXIiIGluCisJCQkJCWEpIGFwcGVuZD0xOzsKKwkJCQkJdSkgc29ydGVkPTA7OworCQkJCQlvfGYpIGV2YWwgYGdldHBhcmFtICIkb3B0IiB0YWdmaWxlYDs7CisJCQkJCSopIGVjaG8gIiRvcHQ6IHVuc3VwcG9ydGVkIG9wdGlvbiIgPiYyOyBleGl0IDE7OworCQkJCWVzYWMKKwkJCWRvbmUKKwkJCTs7CisJCSopIGZpbGVsaXN0PSIkKiI7IGJyZWFrOzsKKyAgICBlc2FjCitkb25lCisKK2lmIFsgLXogIiRmaWxlbGlzdCIgXSA7dGhlbgorICAgIGVjaG8gIiR1c2FnZSIgPiYyOyBleGl0IDEKK2ZpCisKKyMgYXdrIHByb2dyYW0gZm9yIGdlbmVyYXRpbmcgdGFncworIworZXh0X2ZsYWdzPSIiCit0dHlwZT0iIgoraWYgWyAkZm9ybWF0IC1lcSAyIF0gO3RoZW4KKyAgICBleHRfZmxhZ3M9JztcIgklcycKKyAgICB0dHlwZT0iLCB0eXBlIgorZmkKK2F3a3ByZz0nCitmdW5jdGlvbiB0cmltX2NvbW1lbnQoc3RyaW5nKSB7CisgICAgY29tbWVudCA9IGluZGV4KHN0cmluZywgIiMiKQorICAgIGlmIChjb21tZW50ICE9IDApCisJc3RyaW5nID0gc3Vic3RyKHN0cmluZywgMCwgY29tbWVudC0xKQorICAgIHJldHVybiBzdHJpbmcKK30KK2Z1bmN0aW9uIG1ha2V0YWcodGFnbmFtZSwgcGF0dGVybiwgdHlwZSwgbGluZV9lbmQpIHsKKyAgICBnc3ViKC9cXC8sICJcXFxcIiwgcGF0dGVybikKKyAgICBnc3ViKC9cLy8sICJcXC8iLCBwYXR0ZXJuKQorICAgIGlmIChsaW5lX2VuZCkKKwl0ZXJtaW5hdG9yPSIkIgorICAgIGVsc2UKKwl0ZXJtaW5hdG9yPSIiCisgICAgcHJpbnRmKCIlc1x0JXNcdC9eJXMlcy8nIiRleHRfZmxhZ3MiJ1xuIiwgXAorCQl0YWduYW1lLCBGSUxFTkFNRSwgcGF0dGVybiwgdGVybWluYXRvciciJHR0eXBlIicpCit9CiskMSA9PSAicHJvYyIgICYmICAkMyB+IC9eey8gIHsKKyAgICBwYXR0ZXJuID0gc3Vic3RyKCQwLCAwLCBpbmRleCgkMCwgInsiKSkKKyAgICBtYWtldGFnKCQyLCBwYXR0ZXJuLCAiZiIsIDApCit9CisvXnNldFsgXHRdLyAgJiYgICQyICF+IC9cKC8geworICAgIHBhdHRlcm4gPSBzdWJzdHIoJDAsIDAsIGluZGV4KCQwLCAkMikgKyBsZW5ndGgoJDIpKQorICAgIG1ha2V0YWcoJDIsIHBhdHRlcm4sICJ2IiwgMCkKK30KKy9eYXJyYXlbIFx0XSpzZXRbIFx0XS8gICYmICAkMyAhfiAvXCgvIHsKKyAgICBwYXR0ZXJuID0gc3Vic3RyKCQwLCAwLCBpbmRleCgkMCwgJDMpICsgbGVuZ3RoKCQzKSkKKyAgICBtYWtldGFnKCQzLCBwYXR0ZXJuLCAidiIsIDApCit9JworCisjIGFkZCBvciBjb3JyZWN0IHRoZSBwc2V1ZG8gdGFncworIworaWYgWyAiJHRhZ2ZpbGUiICE9ICItIiBdIDt0aGVuCisgICAgaWYgWyAkYXBwZW5kIC1lcSAxIF07IHRoZW4KKwkjIGVuc3VyZSBleGlzdGluZyBzb3J0IGZsYWcgaXMgY29ycmVjdAorCXNlZCAtZSAiL14hX1RBR19GSUxFX1NPUlRFRC9zLwlbMDFdCS8JJHNvcnRlZAkvIiBcCisJICAgIC1lICIvXiFfVEFHX0ZJTEVfRk9STUFUL3MvCTEJLwkkZm9ybWF0CS8iIFwKKwkgICAgJHRhZ2ZpbGUgPiAkdG1wX3RhZ2ZpbGUKKyAgICBlbHNlCisJZWNobyAtbmUgIlwKKyFfVEFHX0ZJTEVfRk9STUFUCSRmb3JtYXQJL2V4dGVuZGVkIGZvcm1hdDsgLS1mb3JtYXQ9MSB3aWxsIG5vdCBhcHBlbmQgO1wiIHRvIGxpbmVzLworIV9UQUdfRklMRV9TT1JURUQJJHNvcnRlZAkvMD11bnNvcnRlZCwgMT1zb3J0ZWQvCishX1RBR19QUk9HUkFNX0FVVEhPUgkkcHJvZ3JhbV9hdXRob3IJLyRhdXRob3JfZW1haWwvCishX1RBR19QUk9HUkFNX05BTUUJJHByb2dyYW1fbmFtZQkvLworIV9UQUdfUFJPR1JBTV9WRVJTSU9OCSRwcm9ncmFtX3ZlcnNpb24JLy8KKyIgPiAkdG1wX3RhZ2ZpbGUKKyAgICBmaQorZmkKKworIyBnZW5lcmF0ZSB0YWdzCisjCithd2sgIiRhd2twcmciICRmaWxlbGlzdCA+PiAkdG1wX3RhZ2ZpbGUKKworaWYgWyAkc29ydGVkIC1lcSAxIF0gO3RoZW4KKyAgICBzb3J0IC11IC1vICR0bXBfdGFnZmlsZSAkdG1wX3RhZ2ZpbGUKK2ZpCisKK2lmIFsgIiR0YWdmaWxlIiA9ICctJyBdIDt0aGVuCisgICAgY2F0ICR0bXBfdGFnZmlsZQorZWxzZQorICAgIGNwICR0bXBfdGFnZmlsZSAkdGFnZmlsZQorZmkKK3JtICR0bXBfdGFnZmlsZQorCitleGl0IDAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdG9vbHMvdmltMTMyIGIvcnVudGltZS90b29scy92aW0xMzIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjllYTRjZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdG9vbHMvdmltMTMyCkBAIC0wLDAgKzEsMTMgQEAKKyMhL2Jpbi9jc2gKKyMKKyMgU2hlbGwgc2NyaXB0IGZvciB1c2Ugd2l0aCBVTklYCisjIFN0YXJ0cyB1cCBWaW0gd2l0aCB0aGUgdGVybWluYWwgaW4gMTMyIGNvbHVtbiBtb2RlCisjIE9ubHkgd29ya3Mgb24gVlQtMTAwIHRlcm1pbmFscyBhbmQgbG9va2FsaWtlcworIyBZb3UgbmVlZCB0byBoYXZlIGEgdGVybWNhcCBlbnRyeSAidnQxMDAtdyIuIFNhbWUgYXMgdnQxMDAgYnV0IDEzMiBjb2x1bW5zLgorIworc2V0IG9sZHRlcm09JHRlcm0KK2VjaG8gIhtbPzNoIgorc2V0ZW52IFRFUk0gdnQxMDAtdwordmltICQqCitzZXQgdGVybT0kb2xkdGVybQorZWNobyAiG1s/M2wiCmRpZmYgLS1naXQgYS9ydW50aW1lL3Rvb2xzL3ZpbV92c19uZXQuY21kIGIvcnVudGltZS90b29scy92aW1fdnNfbmV0LmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzA3ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90b29scy92aW1fdnNfbmV0LmNtZApAQCAtMCwwICsxLDI0IEBACitAcmVtCitAcmVtIFRvIHVzZSB0aGlzIHdpdGggVmlzdWFsIFN0dWRpbyAuTmV0CitAcmVtIFRvb2xzLT5FeHRlcm5hbCBUb29scy4uLgorQHJlbSBBZGQKK0ByZW0gICAgICBUaXRsZSAgICAgLSBWaW0KK0ByZW0gICAgICBDb21tYW5kICAgLSBkOlxmaWxlc1x1dGlsXHZpbV92c19uZXQuY21kCitAcmVtICAgICAgQXJndW1lbnRzIC0gKyQoQ3VyTGluZSkgJChJdGVtUGF0aCkKK0ByZW0gICAgICBJbml0IERpciAgLSBFbXB0eQorQHJlbQorQHJlbSBDb3V0ZXN5IG9mIEJyaWFuIFN0dXJrCitAcmVtCitAcmVtIC0tcmVtb3RlLXNpbGVudCArJTEgaXMgYSBjb21tYW5kICs5NTQsIG1vdmUgYWhlYWQgOTU0IGxpbmVzCitAcmVtIC0tcmVtb3RlLXNpbGVudCAlMiBmdWxsIHBhdGggdG8gZmlsZQorQHJlbSBJbiBWaW0KK0ByZW0gICAgOmggLS1yZW1vdGUtc2lsZW50IGZvciBtb3IgZGV0YWlscworQHJlbQorQHJlbSAtLXNlcnZlcm5hbWUgVlNfTkVUCitAcmVtIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdmltIGNhbGxlZCBWU19ORVQuICBTbyBpZiB5b3UKK29wZW4KK0ByZW0gbXVsdGlwbGUgZmlsZXMgZnJvbSBWUywgdGhleSB3aWxsIHVzZSB0aGUgc2FtZSBpbnN0YW5jZSBvZiBWaW0uCitAcmVtIFRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBWaW0gcnVubmluZywgYnV0IHlvdSBjYW4KK0ByZW0gY29udHJvbCB3aGljaCBvbmUgaGFzIFZTIGZpbGVzIGluIGl0LgorQHJlbQorc3RhcnQgL2IgZ3ZpbS5leGUgLS1zZXJ2ZXJuYW1lIFZTX05FVCAtLXJlbW90ZS1zaWxlbnQgIiUxIiAgIiUyIgpkaWZmIC0tZ2l0IGEvcnVudGltZS90b29scy92aW1tIGIvcnVudGltZS90b29scy92aW1tCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0MmM0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3Rvb2xzL3ZpbW0KQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKyMgZW5hYmxlIERFQyBsb2NhdG9yIGlucHV0IG1vZGVsIG9uIHJlbW90ZSB0ZXJtaW5hbAorZWNobyAgIlwwMzNbMTsyJ3pcMDMzWzE7Myd7XGMiCit2aW0gIiRAIgorIyBkaXNhYmxlIERFQyBsb2NhdG9yIGlucHV0IG1vZGVsIG9uIHJlbW90ZSB0ZXJtaW5hbAorZWNobyAgIlwwMzNbMjs0J3tcMDMzWzAnelxjIgpkaWZmIC0tZ2l0IGEvcnVudGltZS90b29scy92aW1zcGVsbC5zaCBiL3J1bnRpbWUvdG9vbHMvdmltc3BlbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDIwNzIyMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdG9vbHMvdmltc3BlbGwuc2gKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCisjCisjIFNwZWxsIGEgZmlsZSAmIGdlbmVyYXRlIHRoZSBzeW50YXggc3RhdGVtZW50cyBuZWNlc3NhcnkgdG8KKyMgaGlnaGxpZ2h0IGluIHZpbS4gIEJhc2VkIG9uIGEgcHJvZ3JhbSBmcm9tIEtyaXNobmEgR2FkZXBhbGxpCisjIDxrcmlzaG5hQHN0ZGF2aWRzLnBpY2tlci5jb20+LgorIworIyBJIHVzZSB0aGUgZm9sbG93aW5nIG1hcHBpbmdzIChpbiAudmltcmMpOgorIworIwlub3JlbWFwIDxGOD4gOnNvIGB2aW1zcGVsbC5zaCAlYDxDUj48Q1I+CisjCW5vcmVtYXAgPEY3PiA6c3ludGF4IGNsZWFyIFNwZWxsRXJyb3JzPENSPgorIworIyBOZWlsIFNjaGVtZW5hdWVyIDxuYXNjaGVtZUB1Y2FsZ2FyeS5jYT4KKyMgTWFyY2ggMTk5OQorCitJTkZJTEU9JDEKK09VVEZJTEU9L3RtcC92aW1zcGVsbC4kJAorIyBpZiB5b3UgaGF2ZSAidGVtcGZpbGUiLCB1c2UgdGhlIGZvbGxvd2luZyBsaW5lCisjT1VURklMRT1gdGVtcGZpbGVgCisKKyMKKyMgbG9jYWwgc3BlbGxpbmdzCisjCitMT0NBTF9ESUNUPSR7TE9DQUxfRElDVC0kSE9NRS9sb2NhbC9saWIvbG9jYWxfZGljdH0KKworaWYgWyAtZiAkTE9DQUxfRElDVCBdCit0aGVuCisJU1BFTExfQVJHUz0iKyRMT0NBTF9ESUNUIgorZmkKKworc3BlbGwgJFNQRUxMX0FSR1MgJElORklMRSB8IHNvcnQgLXUgfAorYXdrICcKKyAgICAgIHsKKwlwcmludGYgInN5bnRheCBtYXRjaCBTcGVsbEVycm9ycyBcIlxcPCVzXFw+XCJcbiIsICQwIDsKKyAgICAgIH0KKworRU5EICAgeworCXByaW50ZiAiaGlnaGxpZ2h0IGxpbmsgU3BlbGxFcnJvcnMgRXJyb3JNc2dcblxuIiA7CisgICAgICB9CisnID4gJE9VVEZJTEUKK2VjaG8gIiFybSAkT1VURklMRSIgPj4gJE9VVEZJTEUKK2VjaG8gJE9VVEZJTEUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdG9vbHMvdmltc3BlbGwudHh0IGIvcnVudGltZS90b29scy92aW1zcGVsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0MmFmNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdG9vbHMvdmltc3BlbGwudHh0CkBAIC0wLDAgKzEsMjIgQEAKK3ZpbXNwZWxsLnNoCis9PT09PT09PT09PQorCitUaGlzIGlzIGEgc2ltcGxlIHNjcmlwdCB0byBzcGVsbCBjaGVjayBhIGZpbGUgYW5kIGdlbmVyYXRlIHRoZSBzeW50YXgKK3N0YXRlbWVudHMgbmVjZXNzYXJ5IHRvIGhpZ2hsaWdodCB0aGUgZXJyb3JzIGluIHZpbS4gIEl0IGlzIGJhc2VkIG9uIGEKK3NpbWlsYXIgcHJvZ3JhbSBieSBLcmlzaG5hIEdhZGVwYWxsaSA8a3Jpc2huYUBzdGRhdmlkcy5waWNrZXIuY29tPi4KKworVG8gdXNlIHRoaXMgc2NyaXB0LCBmaXJzdCBwbGFjZSBpdCBpbiBhIGRpcmVjdG9yeSBpbiB5b3VyIHBhdGguICBOZXh0LAoreW91IHNob3VsZCBhZGQgc29tZSBjb252ZW5pZW50IGtleSBtYXBwaW5ncy4gIEkgdXNlIHRoZSBmb2xsb3dpbmcgKGluCisudmltcmMpOgorCisJbm9yZW1hcCA8Rjg+IDpzbyBgdmltc3BlbGwuc2ggJWA8Q1I+PENSPgorCW5vcmVtYXAgPEY3PiA6c3ludGF4IGNsZWFyIFNwZWxsRXJyb3JzPENSPgorCitUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIG9sZCBVbml4ICJzcGVsbCIgY29tbWFuZC4gIE9uIG15IERlYmlhbgorc3lzdGVtLCAic3BlbGwiIGlzIGEgd3JhcHBlciBhcm91bmQgImlzcGVsbCIuICBGb3IgYmV0dGVyIHNlY3VyaXR5LAoreW91IHNob3VsZCB1bmNvbW1lbnQgdGhlIGxpbmUgaW4gdGhlIHNjcmlwdCB0aGF0IHVzZXMgInRlbXBmaWxlIiB0bworY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUuICBBcyBhbGwgc3lzdGVtcyBkb24ndCBoYXZlICJ0ZW1wZmlsZSIgdGhlCitpbnNlY3VyZSAicGlkIG1ldGhvZCIgaXMgdXNlZC4KKworCisgICAgTmVpbCBTY2hlbWVuYXVlciA8bmFzY2hlbWVAdWNhbGdhcnkuY2E+CmRpZmYgLS1naXQgYS9ydW50aW1lL3Rvb2xzL3hjbWRzcnZfY2xpZW50LmMgYi9ydW50aW1lL3Rvb2xzL3hjbWRzcnZfY2xpZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlNjIxMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdG9vbHMveGNtZHNydl9jbGllbnQuYwpAQCAtMCwwICsxLDU4NCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICogWC1XaW5kb3dzIGNvbW11bmljYXRpb24gYnkgRmxlbW1pbmcgTWFkc2VuCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICoKKyAqIENsaWVudCBmb3Igc2VuZGluZyBjb21tYW5kcyB0byBhbiAnK3hjbWRzcnYnIGVuYWJsZWQgdmltLgorICogVGhpcyBpcyBtb3N0bHkgYSBkZS1WaW1pZmllZCB2ZXJzaW9uIG9mIGlmX3hjbWRzcnYuYyBpbiB2aW0uCisgKiBTZWUgdGhhdCBmaWxlIGZvciBhIHByb3RvY29sIHNwZWNpZmljYXRpb24uCisgKgorICogWW91IGNhbiBtYWtlIGEgdGVzdCBwcm9ncmFtIHdpdGggYSBNYWtlZmlsZSBsaWtlOgorICogIHhjbWRzcnZfY2xpZW50OiB4Y21kc3J2X2NsaWVudC5jCisgKgljYyAtbyAkQCAtZyAtRE1BSU4gLUkvdXNyL1gxMVI2L2luY2x1ZGUgLUwvdXNyL1gxMVI2L2xpYiAkPCAtbFgxMQorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1NFTEVDVAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WDExL1hhdG9tLmg+CisKKyNkZWZpbmUgX19BUkdTKHgpIHgKKworLyogQ2xpZW50IEFQSSAqLworY2hhciAqIHNlbmRUb1ZpbSBfX0FSR1MoKERpc3BsYXkgKmRweSwgY2hhciAqbmFtZSwgY2hhciAqY21kLCBpbnQgYXNLZXlzLCBpbnQgKmNvZGUpKTsKKworI2lmZGVmIE1BSU4KKy8qIEEgc2FtcGxlIHByb2dyYW0gKi8KK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGNoYXIgICAgKnJlczsKKyAgICBpbnQJICAgIGNvZGU7CisKKyAgICBpZiAoYXJnYyA9PSA0KQorICAgIHsKKwlpZiAoKHJlcyA9IHNlbmRUb1ZpbShYT3BlbkRpc3BsYXkoTlVMTCksIGFyZ3ZbMl0sIGFyZ3ZbM10sCisJCQkgICAgIGFyZ3ZbMV1bMF0gIT0gJ2UnLCAmY29kZSkpICE9IE5VTEwpCisJeworCSAgICBpZiAoY29kZSkKKwkJcHJpbnRmKCJFcnJvciBjb2RlIHJldHVybmVkOiAlZFxuIiwgY29kZSk7CisJICAgIHB1dHMocmVzKTsKKwl9CisJZXhpdCgwKTsKKyAgICB9CisgICAgZWxzZQorCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIHtrfGV9IDxzZXJ2ZXI+IDxjb21tYW5kPiIsIGFyZ3ZbMF0pOworCisgICAgZXhpdCgxKTsKK30KKyNlbmRpZgorCisvKgorICogTWF4aW11bSBzaXplIHByb3BlcnR5IHRoYXQgY2FuIGJlIHJlYWQgYXQgb25lIHRpbWUgYnkKKyAqIHRoaXMgbW9kdWxlOgorICovCisKKyNkZWZpbmUgTUFYX1BST1BfV09SRFMgMTAwMDAwCisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgcHJvY2VkdXJlcyBkZWZpbmVkIGxhdGVyIGluIHRoaXMgZmlsZToKKyAqLworCitzdGF0aWMgaW50CXhfZXJyb3JfY2hlY2sgX19BUkdTKChEaXNwbGF5ICpkcHksIFhFcnJvckV2ZW50ICplcnJvcl9ldmVudCkpOworc3RhdGljIGludAlBcHBlbmRQcm9wQ2FyZWZ1bGx5IF9fQVJHUygoRGlzcGxheSAqZGlzcGxheSwKKwkJICAgIFdpbmRvdyB3aW5kb3csIEF0b20gcHJvcGVydHksIGNoYXIgKnZhbHVlLCBpbnQgbGVuZ3RoKSk7CitzdGF0aWMgV2luZG93CUxvb2t1cE5hbWUgX19BUkdTKChEaXNwbGF5ICpkcHksIGNoYXIgKm5hbWUsCisJCSAgICBpbnQgZGVsZXRlLCBjaGFyICoqbG9vc2UpKTsKK3N0YXRpYyBpbnQJU2VuZEluaXQgX19BUkdTKChEaXNwbGF5ICpkcHkpKTsKK3N0YXRpYyBjaGFyCSpTZW5kRXZlbnRQcm9jIF9fQVJHUygoRGlzcGxheSAqZHB5LCBYRXZlbnQgKmV2ZW50UHRyLAorCQkJCSAgICAgIGludCBleHBlY3QsIGludCAqY29kZSkpOworc3RhdGljIGludAlJc1NlcmlhbE5hbWUgX19BUkdTKChjaGFyICpuYW1lKSk7CisKKy8qIFByaXZhdGUgdmFyaWFibGVzICovCitzdGF0aWMgQXRvbQlyZWdpc3RyeVByb3BlcnR5ID0gTm9uZTsKK3N0YXRpYyBBdG9tCWNvbW1Qcm9wZXJ0eSA9IE5vbmU7CitzdGF0aWMgV2luZG93CWNvbW1XaW5kb3cgPSBOb25lOworc3RhdGljIGludAlnb3RfeF9lcnJvciA9IEZBTFNFOworCisKKy8qCisgKiBzZW5kVG9WaW0gLS0KKyAqCVNlbmQgdG8gYW4gaW5zdGFuY2Ugb2YgVmltIHZpYSB0aGUgWCBkaXNwbGF5LgorICoKKyAqIFJlc3VsdHM6CisgKglBIHN0cmluZyB3aXRoIHRoZSByZXN1bHQgb3IgTlVMTC4gQ2FsbGVyIG11c3QgZnJlZSBpZiBub24tTlVMTAorICovCisKKyAgICBjaGFyICoKK3NlbmRUb1ZpbShkcHksIG5hbWUsIGNtZCwgYXNLZXlzLCBjb2RlKQorICAgIERpc3BsYXkJKmRweTsJCQkvKiBXaGVyZSB0byBzZW5kLiAqLworICAgIGNoYXIJKm5hbWU7CQkJLyogV2hlcmUgdG8gc2VuZC4gKi8KKyAgICBjaGFyCSpjbWQ7CQkJLyogV2hhdCB0byBzZW5kLiAqLworICAgIGludAkJYXNLZXlzOwkJCS8qIEludGVycHJldCBhcyBrZXlzdHJva2VzIG9yIGV4cHIgPyAqLworICAgIGludAkJKmNvZGU7CQkJLyogUmV0dXJuIGNvZGUuIDAgPT4gT0sgKi8KK3sKKyAgICBXaW5kb3cJICAgIHc7CisgICAgQXRvbQkgICAgKnBsaXN0OworICAgIFhFcnJvckhhbmRsZXIgICBvbGRfaGFuZGxlcjsKKyNkZWZpbmUgU1RBVElDX1NQQUNFIDUwMAorICAgIGNoYXIJICAgICpwcm9wZXJ0eSwgc3RhdGljU3BhY2VbU1RBVElDX1NQQUNFXTsKKyAgICBpbnQJCSAgICBsZW5ndGg7CisgICAgaW50CQkgICAgcmVzOworICAgIHN0YXRpYyBpbnQJICAgIHNlcmlhbCA9IDA7CS8qIFJ1bm5pbmcgY291bnQgb2Ygc2VudCBjb21tYW5kcy4KKwkJCQkgKiBVc2VkIHRvIGdpdmUgZWFjaCBjb21tYW5kIGEKKwkJCQkgKiBkaWZmZXJlbnQgc2VyaWFsIG51bWJlci4gKi8KKyAgICBYRXZlbnQJICAgIGV2ZW50OworICAgIFhQcm9wZXJ0eUV2ZW50ICAqZSA9IChYUHJvcGVydHlFdmVudCAqKSZldmVudDsKKyAgICB0aW1lX3QJICAgIHN0YXJ0OworICAgIGNoYXIJICAgICpyZXN1bHQ7CisgICAgY2hhcgkgICAgKmxvb3NlbmFtZSA9IE5VTEw7CisKKyAgICBpZiAoY29tbVByb3BlcnR5ID09IE5vbmUgJiYgZHB5ICE9IE5VTEwpCisgICAgeworCWlmIChTZW5kSW5pdChkcHkpIDwgMCkKKwkgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBCaW5kIHRoZSBzZXJ2ZXIgbmFtZSB0byBhIGNvbW11bmljYXRpb24gd2luZG93LgorICAgICAqCisgICAgICogRmluZCBhbnkgc3Vydml2b3Igd2l0aCBhIHNlcmlhbG5vIGF0dGFjaGVkIHRvIHRoZSBuYW1lIGlmIHRoZQorICAgICAqIG9yaWdpbmFsIHJlZ2lzdHJhbnQgb2YgdGhlIHdhbnRlZCBuYW1lIGlzIG5vIGxvbmdlciBwcmVzZW50LgorICAgICAqCisgICAgICogRGVsZXRlIGFueSBsaW5nZXJpbmcgbmFtZXMgZnJvbSBkZWFkIGVkaXRvcnMuCisgICAgICovCisKKyAgICBvbGRfaGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoeF9lcnJvcl9jaGVjayk7CisgICAgd2hpbGUgKFRSVUUpCisgICAgeworCWdvdF94X2Vycm9yID0gRkFMU0U7CisJdyA9IExvb2t1cE5hbWUoZHB5LCBuYW1lLCAwLCAmbG9vc2VuYW1lKTsKKwkvKiBDaGVjayB0aGF0IHRoZSB3aW5kb3cgaXMgaG90ICovCisJaWYgKHcgIT0gTm9uZSkKKwl7CisJICAgIHBsaXN0ID0gWExpc3RQcm9wZXJ0aWVzKGRweSwgdywgJnJlcyk7CisJICAgIFhTeW5jKGRweSwgRmFsc2UpOworCSAgICBpZiAocGxpc3QgIT0gTlVMTCkKKwkJWEZyZWUocGxpc3QpOworCSAgICBpZiAoZ290X3hfZXJyb3IpCisJICAgIHsKKwkJTG9va3VwTmFtZShkcHksIGxvb3NlbmFtZSA/IGxvb3NlbmFtZSA6IG5hbWUsCisJCQkgICAvKkRFTEVURT0qL1RSVUUsIE5VTEwpOworCQljb250aW51ZTsKKwkgICAgfQorCX0KKwlicmVhazsKKyAgICB9CisgICAgaWYgKHcgPT0gTm9uZSkKKyAgICB7CisJZnByaW50ZihzdGRlcnIsICJubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCAlc1xuIiwgbmFtZSk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKGxvb3NlbmFtZSAhPSBOVUxMKQorCW5hbWUgPSBsb29zZW5hbWU7CisKKyAgICAvKgorICAgICAqIFNlbmQgdGhlIGNvbW1hbmQgdG8gdGFyZ2V0IGludGVycHJldGVyIGJ5IGFwcGVuZGluZyBpdCB0byB0aGUKKyAgICAgKiBjb21tIHdpbmRvdyBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aW5kb3cuCisgICAgICovCisKKyAgICBsZW5ndGggPSBzdHJsZW4obmFtZSkgKyBzdHJsZW4oY21kKSArIDEwOworICAgIGlmIChsZW5ndGggPD0gU1RBVElDX1NQQUNFKQorCXByb3BlcnR5ID0gc3RhdGljU3BhY2U7CisgICAgZWxzZQorCXByb3BlcnR5ID0gKGNoYXIgKikgbWFsbG9jKCh1bnNpZ25lZCkgbGVuZ3RoKTsKKworICAgIHNlcmlhbCsrOworICAgIHNwcmludGYocHJvcGVydHksICIlYyVjJWMtbiAlcyVjLXMgJXMiLAorCQkgICAgICAwLCBhc0tleXMgPyAnaycgOiAnYycsIDAsIG5hbWUsIDAsIGNtZCk7CisgICAgaWYgKG5hbWUgPT0gbG9vc2VuYW1lKQorCWZyZWUobG9vc2VuYW1lKTsKKyAgICBpZiAoIWFzS2V5cykKKyAgICB7CisJLyogQWRkIGEgYmFjayByZWZlcmVuY2UgdG8gb3VyIGNvbW0gd2luZG93ICovCisJc3ByaW50Zihwcm9wZXJ0eSArIGxlbmd0aCwgIiVjLXIgJXggJWQiLCAwLCAodWludCkgY29tbVdpbmRvdywgc2VyaWFsKTsKKwlsZW5ndGggKz0gc3RybGVuKHByb3BlcnR5ICsgbGVuZ3RoICsgMSkgKyAxOworICAgIH0KKworICAgIHJlcyA9IEFwcGVuZFByb3BDYXJlZnVsbHkoZHB5LCB3LCBjb21tUHJvcGVydHksIHByb3BlcnR5LCBsZW5ndGggKyAxKTsKKyAgICBpZiAobGVuZ3RoID4gU1RBVElDX1NQQUNFKQorCWZyZWUocHJvcGVydHkpOworICAgIGlmIChyZXMgPCAwKQorICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBzZW5kIGNvbW1hbmQgdG8gdGhlIGRlc3RpbmF0aW9uIHByb2dyYW1cbiIpOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChhc0tleXMpIC8qIFRoZXJlIGlzIG5vIGFuc3dlciBmb3IgdGhpcyAtIEtleXMgYXJlIHNlbnQgYXN5bmMgKi8KKwlyZXR1cm4gTlVMTDsKKworCisgICAgLyoKKyAgICAgKiBFbnRlciBhIGxvb3AgcHJvY2Vzc2luZyBYIGV2ZW50cyAmIHBvb2xpbmcgY2hhcnMgdW50aWwgd2Ugc2VlIHRoZSByZXN1bHQKKyAgICAgKi8KKworI2RlZmluZSBTRU5EX01TRUNfUE9MTCA1MAorCisgICAgdGltZSgmc3RhcnQpOworICAgIHdoaWxlICgodGltZSgodGltZV90ICopIDApIC0gc3RhcnQpIDwgNjApCisgICAgeworCS8qIExvb2sgb3V0IGZvciB0aGUgYW5zd2VyICovCisjaWZuZGVmIEhBVkVfU0VMRUNUCisJc3RydWN0IHBvbGxmZCAgIGZkczsKKworCWZkcy5mZCA9IENvbm5lY3Rpb25OdW1iZXIoZHB5KTsKKwlmZHMuZXZlbnRzID0gUE9MTElOOworCWlmIChwb2xsKCZmZHMsIDEsIFNFTkRfTVNFQ19QT0xMKSA8IDApCisJICAgIGJyZWFrOworI2Vsc2UKKwlmZF9zZXQJICAgIGZkczsKKwlzdHJ1Y3QgdGltZXZhbCAgdHY7CisKKwl0di50dl9zZWMgPSAwOworCXR2LnR2X3VzZWMgPSAgU0VORF9NU0VDX1BPTEwgKiAxMDAwOworCUZEX1pFUk8oJmZkcyk7CisJRkRfU0VUKENvbm5lY3Rpb25OdW1iZXIoZHB5KSwgJmZkcyk7CisJaWYgKHNlbGVjdChDb25uZWN0aW9uTnVtYmVyKGRweSkgKyAxLCAmZmRzLCBOVUxMLCBOVUxMLCAmdHYpIDwgMCkKKwkgICAgYnJlYWs7CisjZW5kaWYKKwl3aGlsZSAoWEV2ZW50c1F1ZXVlZChkcHksIFF1ZXVlZEFmdGVyUmVhZGluZykgPiAwKQorCXsKKwkgICAgWE5leHRFdmVudChkcHksICZldmVudCk7CisJICAgIGlmIChldmVudC50eXBlID09IFByb3BlcnR5Tm90aWZ5ICYmIGUtPndpbmRvdyA9PSBjb21tV2luZG93KQorCQlpZiAoKHJlc3VsdCA9IFNlbmRFdmVudFByb2MoZHB5LCAmZXZlbnQsIHNlcmlhbCwgY29kZSkpICE9IE5VTEwpCisJCSAgICByZXR1cm4gcmVzdWx0OworCX0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworLyoKKyAqIFNlbmRJbml0IC0tCisgKglUaGlzIHByb2NlZHVyZSBpcyBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUKKyAqCWNvbW11bmljYXRpb24gY2hhbm5lbHMgZm9yIHNlbmRpbmcgY29tbWFuZHMgYW5kCisgKglyZWNlaXZpbmcgcmVzdWx0cy4KKyAqLworCisgICAgc3RhdGljIGludAorU2VuZEluaXQoZHB5KQorICAgIERpc3BsYXkgKmRweTsKK3sKKyAgICBYRXJyb3JIYW5kbGVyIG9sZF9oYW5kbGVyOworCisgICAgLyoKKyAgICAgKiBDcmVhdGUgdGhlIHdpbmRvdyB1c2VkIGZvciBjb21tdW5pY2F0aW9uLCBhbmQgc2V0IHVwIGFuCisgICAgICogZXZlbnQgaGFuZGxlciBmb3IgaXQuCisgICAgICovCisgICAgb2xkX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKHhfZXJyb3JfY2hlY2spOworICAgIGdvdF94X2Vycm9yID0gRkFMU0U7CisKKyAgICBjb21tUHJvcGVydHkgPSBYSW50ZXJuQXRvbShkcHksICJDb21tIiwgRmFsc2UpOworICAgIC8qIENoYW5nZSB0aGlzIGJhY2sgdG8gIkludGVycFJlZ2lzdHJ5IiB0byB0YWxrIHRvIHRrIHByb2Nlc3NlcyAqLworICAgIHJlZ2lzdHJ5UHJvcGVydHkgPSBYSW50ZXJuQXRvbShkcHksICJWaW1SZWdpc3RyeSIsIEZhbHNlKTsKKworICAgIGlmIChjb21tV2luZG93ID09IE5vbmUpCisgICAgeworCWNvbW1XaW5kb3cgPQorCSAgICBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSksCisJCQkJZ2V0cGlkKCksIDAsIDEwLCAxMCwgMCwKKwkJCQlXaGl0ZVBpeGVsKGRweSwgRGVmYXVsdFNjcmVlbihkcHkpKSwKKwkJCQlXaGl0ZVBpeGVsKGRweSwgRGVmYXVsdFNjcmVlbihkcHkpKSk7CisJWFNlbGVjdElucHV0KGRweSwgY29tbVdpbmRvdywgUHJvcGVydHlDaGFuZ2VNYXNrKTsKKyAgICB9CisKKyAgICBYU3luYyhkcHksIEZhbHNlKTsKKyAgICAodm9pZCkgWFNldEVycm9ySGFuZGxlcihvbGRfaGFuZGxlcik7CisKKyAgICByZXR1cm4gZ290X3hfZXJyb3IgPyAtMSA6IDA7Cit9CisKKy8qCisgKiBMb29rdXBOYW1lIC0tCisgKglHaXZlbiBhbiBpbnRlcnByZXRlciBuYW1lLCBzZWUgaWYgdGhlIG5hbWUgZXhpc3RzIGluCisgKgl0aGUgaW50ZXJwcmV0ZXIgcmVnaXN0cnkgZm9yIGEgcGFydGljdWxhciBkaXNwbGF5LgorICoKKyAqIFJlc3VsdHM6CisgKglJZiB0aGUgZ2l2ZW4gbmFtZSBpcyByZWdpc3RlcmVkLCByZXR1cm4gdGhlIElEIG9mCisgKgl0aGUgd2luZG93IGFzc29jaWF0ZWQgd2l0aCB0aGUgbmFtZS4gIElmIHRoZSBuYW1lCisgKglpc24ndCByZWdpc3RlcmVkLCB0aGVuIHJldHVybiAwLgorICovCisKKyAgICBzdGF0aWMgV2luZG93CitMb29rdXBOYW1lKGRweSwgbmFtZSwgZGVsZXRlLCBsb29zZSkKKyAgICBEaXNwbGF5ICpkcHk7CS8qIERpc3BsYXkgd2hvc2UgcmVnaXN0cnkgdG8gY2hlY2suICovCisgICAgY2hhciAqbmFtZTsJCS8qIE5hbWUgb2YgYW4gaW50ZXJwcmV0ZXIuICovCisgICAgaW50IGRlbGV0ZTsJCS8qIElmIG5vbi16ZXJvLCBkZWxldGUgaW5mbyBhYm91dCBuYW1lLiAqLworICAgIGNoYXIgKipsb29zZTsJLyogRG8gYW5vdGhlciBzZWFyY2ggbWF0Y2hpbmcgLTk5OSBpZiBub3QgZm91bmQKKwkJCSAgIFJldHVybiByZXN1bHQgaGVyZSBpZiBhIG1hdGNoIGlzIGZvdW5kICovCit7CisgICAgdW5zaWduZWQgY2hhciAgICpyZWdQcm9wLCAqZW50cnk7CisgICAgdW5zaWduZWQgY2hhciAgICpwOworICAgIGludAkJICAgIHJlc3VsdCwgYWN0dWFsRm9ybWF0OworICAgIHVuc2lnbmVkIGxvbmcgICBudW1JdGVtcywgYnl0ZXNBZnRlcjsKKyAgICBBdG9tCSAgICBhY3R1YWxUeXBlOworICAgIFdpbmRvdwkgICAgcmV0dXJuVmFsdWU7CisKKyAgICAvKgorICAgICAqIFJlYWQgdGhlIHJlZ2lzdHJ5IHByb3BlcnR5LgorICAgICAqLworCisgICAgcmVnUHJvcCA9IE5VTEw7CisgICAgcmVzdWx0ID0gWEdldFdpbmRvd1Byb3BlcnR5KGRweSwgUm9vdFdpbmRvdyhkcHksIDApLCByZWdpc3RyeVByb3BlcnR5LCAwLAorCQkJCU1BWF9QUk9QX1dPUkRTLCBGYWxzZSwgWEFfU1RSSU5HLCAmYWN0dWFsVHlwZSwKKwkJCQkmYWN0dWFsRm9ybWF0LCAmbnVtSXRlbXMsICZieXRlc0FmdGVyLAorCQkJCSZyZWdQcm9wKTsKKworICAgIGlmIChhY3R1YWxUeXBlID09IE5vbmUpCisJcmV0dXJuIDA7CisKKyAgICAvKgorICAgICAqIElmIHRoZSBwcm9wZXJ0eSBpcyBpbXByb3Blcmx5IGZvcm1lZCwgdGhlbiBkZWxldGUgaXQuCisgICAgICovCisKKyAgICBpZiAoKHJlc3VsdCAhPSBTdWNjZXNzKSB8fCAoYWN0dWFsRm9ybWF0ICE9IDgpIHx8IChhY3R1YWxUeXBlICE9IFhBX1NUUklORykpCisgICAgeworCWlmIChyZWdQcm9wICE9IE5VTEwpCisJICAgIFhGcmVlKHJlZ1Byb3ApOworCVhEZWxldGVQcm9wZXJ0eShkcHksIFJvb3RXaW5kb3coZHB5LCAwKSwgcmVnaXN0cnlQcm9wZXJ0eSk7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTY2FuIHRoZSBwcm9wZXJ0eSBmb3IgdGhlIGRlc2lyZWQgbmFtZS4KKyAgICAgKi8KKworICAgIHJldHVyblZhbHVlID0gTm9uZTsKKyAgICBlbnRyeSA9IE5VTEw7CS8qIE5vdCBuZWVkZWQsIGJ1dCBlbGltaW5hdGVzIGNvbXBpbGVyIHdhcm5pbmcuICovCisgICAgZm9yIChwID0gcmVnUHJvcDsgKHAgLSByZWdQcm9wKSA8IG51bUl0ZW1zOyApCisgICAgeworCWVudHJ5ID0gcDsKKwl3aGlsZSAoKCpwICE9IDApICYmICghaXNzcGFjZSgqcCkpKQorCSAgICBwKys7CisJaWYgKCgqcCAhPSAwKSAmJiAoc3RyY2FzZWNtcChuYW1lLCBwICsgMSkgPT0gMCkpCisJeworCSAgICBzc2NhbmYoZW50cnksICIleCIsICh1aW50KikgJnJldHVyblZhbHVlKTsKKwkgICAgYnJlYWs7CisJfQorCXdoaWxlICgqcCAhPSAwKQorCSAgICBwKys7CisJcCsrOworICAgIH0KKworICAgIGlmIChsb29zZSAhPSBOVUxMICYmIHJldHVyblZhbHVlID09IE5vbmUgJiYgIUlzU2VyaWFsTmFtZShuYW1lKSkKKyAgICB7CisJZm9yIChwID0gcmVnUHJvcDsgKHAgLSByZWdQcm9wKSA8IG51bUl0ZW1zOyApCisJeworCSAgICBlbnRyeSA9IHA7CisJICAgIHdoaWxlICgoKnAgIT0gMCkgJiYgKCFpc3NwYWNlKCpwKSkpCisJCXArKzsKKwkgICAgaWYgKCgqcCAhPSAwKSAmJiBJc1NlcmlhbE5hbWUocCArIDEpCisJCSAgICAmJiAoc3RybmNtcChuYW1lLCBwICsgMSwgc3RybGVuKG5hbWUpKSA9PSAwKSkKKwkgICAgeworCQlzc2NhbmYoZW50cnksICIleCIsICh1aW50KikgJnJldHVyblZhbHVlKTsKKwkJKmxvb3NlID0gc3RyZHVwKHAgKyAxKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgd2hpbGUgKCpwICE9IDApCisJCXArKzsKKwkgICAgcCsrOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIERlbGV0ZSB0aGUgcHJvcGVydHksIGlmIHRoYXQgaXMgZGVzaXJlZCAoY29weSBkb3duIHRoZQorICAgICAqIHJlbWFpbmRlciBvZiB0aGUgcmVnaXN0cnkgcHJvcGVydHkgdG8gb3ZlcmxheSB0aGUgZGVsZXRlZAorICAgICAqIGluZm8sIHRoZW4gcmV3cml0ZSB0aGUgcHJvcGVydHkpLgorICAgICAqLworCisgICAgaWYgKChkZWxldGUpICYmIChyZXR1cm5WYWx1ZSAhPSBOb25lKSkKKyAgICB7CisJaW50IGNvdW50OworCisJd2hpbGUgKCpwICE9IDApCisJICAgIHArKzsKKwlwKys7CisJY291bnQgPSBudW1JdGVtcyAtIChwLXJlZ1Byb3ApOworCWlmIChjb3VudCA+IDApCisJICAgIG1lbWNweShlbnRyeSwgcCwgY291bnQpOworCVhDaGFuZ2VQcm9wZXJ0eShkcHksIFJvb3RXaW5kb3coZHB5LCAwKSwgcmVnaXN0cnlQcm9wZXJ0eSwgWEFfU1RSSU5HLAorCQkJOCwgUHJvcE1vZGVSZXBsYWNlLCByZWdQcm9wLAorCQkJKGludCkgKG51bUl0ZW1zIC0gKHAtZW50cnkpKSk7CisJWFN5bmMoZHB5LCBGYWxzZSk7CisgICAgfQorCisgICAgWEZyZWUocmVnUHJvcCk7CisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCisgICAgc3RhdGljIGNoYXIgKgorU2VuZEV2ZW50UHJvYyhkcHksIGV2ZW50UHRyLCBleHBlY3RlZCwgY29kZSkKKyAgICBEaXNwbGF5CSAgICpkcHk7CisgICAgWEV2ZW50CSAgICAqZXZlbnRQdHI7CQkvKiBJbmZvcm1hdGlvbiBhYm91dCBldmVudC4gKi8KKyAgICBpbnQJCSAgICBleHBlY3RlZDsJCS8qIFRoZSBvbmUgd2VyZSB3YWl0aW5nIGZvciAqLworICAgIGludAkJICAgICpjb2RlOwkJLyogUmV0dXJuIGNvZGUuIDAgPT4gT0sgKi8KK3sKKyAgICB1bnNpZ25lZCBjaGFyICAgKnByb3BJbmZvOworICAgIHVuc2lnbmVkIGNoYXIgICAqcDsKKyAgICBpbnQJCSAgICByZXN1bHQsIGFjdHVhbEZvcm1hdDsKKyAgICBpbnQJCSAgICByZXRDb2RlOworICAgIHVuc2lnbmVkIGxvbmcgICBudW1JdGVtcywgYnl0ZXNBZnRlcjsKKyAgICBBdG9tCSAgICBhY3R1YWxUeXBlOworCisgICAgaWYgKChldmVudFB0ci0+eHByb3BlcnR5LmF0b20gIT0gY29tbVByb3BlcnR5KQorCSAgICB8fCAoZXZlbnRQdHItPnhwcm9wZXJ0eS5zdGF0ZSAhPSBQcm9wZXJ0eU5ld1ZhbHVlKSkKKyAgICB7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogUmVhZCB0aGUgY29tbSBwcm9wZXJ0eSBhbmQgZGVsZXRlIGl0LgorICAgICAqLworCisgICAgcHJvcEluZm8gPSBOVUxMOworICAgIHJlc3VsdCA9IFhHZXRXaW5kb3dQcm9wZXJ0eShkcHksIGNvbW1XaW5kb3csIGNvbW1Qcm9wZXJ0eSwgMCwKKwkJCQlNQVhfUFJPUF9XT1JEUywgVHJ1ZSwgWEFfU1RSSU5HLCAmYWN0dWFsVHlwZSwKKwkJCQkmYWN0dWFsRm9ybWF0LCAmbnVtSXRlbXMsICZieXRlc0FmdGVyLAorCQkJCSZwcm9wSW5mbyk7CisKKyAgICAvKgorICAgICAqIElmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0IG9yIGlzIGltcHJvcGVybHkgZm9ybWVkCisgICAgICogdGhlbiBpZ25vcmUgaXQuCisgICAgICovCisKKyAgICBpZiAoKHJlc3VsdCAhPSBTdWNjZXNzKSB8fCAoYWN0dWFsVHlwZSAhPSBYQV9TVFJJTkcpCisJICAgIHx8IChhY3R1YWxGb3JtYXQgIT0gOCkpCisgICAgeworCWlmIChwcm9wSW5mbyAhPSBOVUxMKQorCXsKKwkgICAgWEZyZWUocHJvcEluZm8pOworCX0KKwlyZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZXZlcmFsIGNvbW1hbmRzIGFuZCByZXN1bHRzIGNvdWxkIGFycml2ZSBpbiB0aGUgcHJvcGVydHkgYXQKKyAgICAgKiBvbmUgdGltZTsgIGVhY2ggaXRlcmF0aW9uIHRocm91Z2ggdGhlIG91dGVyIGxvb3AgaGFuZGxlcyBhCisgICAgICogc2luZ2xlIGNvbW1hbmQgb3IgcmVzdWx0LgorICAgICAqLworCisgICAgZm9yIChwID0gcHJvcEluZm87IChwIC0gcHJvcEluZm8pIDwgbnVtSXRlbXM7ICkKKyAgICB7CisJLyoKKwkgKiBJZ25vcmUgbGVhZGluZyBOVUxzOyBlYWNoIGNvbW1hbmQgb3IgcmVzdWx0IHN0YXJ0cyB3aXRoIGEKKwkgKiBOVUwgc28gdGhhdCBubyBtYXR0ZXIgaG93IGJhZGx5IGZvcm1lZCBhIHByZWNlZGluZyBjb21tYW5kCisJICogaXMsIHdlJ2xsIGJlIGFibGUgdG8gdGVsbCB0aGF0IGEgbmV3IGNvbW1hbmQvcmVzdWx0IGlzCisJICogc3RhcnRpbmcuCisJICovCisKKwlpZiAoKnAgPT0gMCkKKwl7CisJICAgIHArKzsKKwkgICAgY29udGludWU7CisJfQorCisJaWYgKCgqcCA9PSAncicpICYmIChwWzFdID09IDApKQorCXsKKwkgICAgaW50CSAgICBzZXJpYWwsIGdvdFNlcmlhbDsKKwkgICAgY2hhciAgKnJlczsKKworCSAgICAvKgorCSAgICAgKiBUaGlzIGlzIGEgcmVwbHkgdG8gc29tZSBjb21tYW5kIHRoYXQgd2Ugc2VudCBvdXQuICBJdGVyYXRlCisJICAgICAqIG92ZXIgYWxsIG9mIGl0cyBvcHRpb25zLiAgU3RvcCB3aGVuIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlCisJICAgICAqIHByb3BlcnR5IG9yIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgbG9vayBsaWtlIGFuIG9wdGlvbi4KKwkgICAgICovCisKKwkgICAgcCArPSAyOworCSAgICBnb3RTZXJpYWwgPSAwOworCSAgICByZXMgPSAiIjsKKwkgICAgcmV0Q29kZSA9IDA7CisJICAgIHdoaWxlICgoKHAtcHJvcEluZm8pIDwgbnVtSXRlbXMpICYmICgqcCA9PSAnLScpKQorCSAgICB7CisJCXN3aXRjaCAocFsxXSkKKwkJeworCQkgICAgY2FzZSAncic6CisJCQlpZiAocFsyXSA9PSAnICcpCisJCQkgICAgcmVzID0gcCArIDM7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ3MnOgorCQkJaWYgKHNzY2FuZihwICsgMiwgIiAlZCIsICZzZXJpYWwpID09IDEpCisJCQkgICAgZ290U2VyaWFsID0gMTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAnYyc6CisJCQlpZiAoc3NjYW5mKHAgKyAyLCAiICVkIiwgJnJldENvZGUpICE9IDEpCisJCQkgICAgcmV0Q29kZSA9IDA7CisJCQlicmVhazsKKwkJfQorCQl3aGlsZSAoKnAgIT0gMCkKKwkJICAgIHArKzsKKwkJcCsrOworCSAgICB9CisKKwkgICAgaWYgKCFnb3RTZXJpYWwpCisJCWNvbnRpbnVlOworCisJICAgIGlmIChjb2RlICE9IE5VTEwpCisJCSpjb2RlID0gcmV0Q29kZTsKKwkgICAgcmV0dXJuIHNlcmlhbCA9PSBleHBlY3RlZCA/IHN0cmR1cChyZXMpIDogTlVMTDsKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogRGlkbid0IHJlY29nbml6ZSB0aGlzIHRoaW5nLiAgSnVzdCBza2lwIHRocm91Z2ggdGhlIG5leHQKKwkgICAgICogbnVsbCBjaGFyYWN0ZXIgYW5kIHRyeSBhZ2Fpbi4KKwkgICAgICogQWxzbywgdGhyb3cgYXdheSBjb21tYW5kcyB0aGF0IHdlIGNhbnQgcHJvY2VzcyBhbnl3YXkuCisJICAgICAqLworCisJICAgIHdoaWxlICgqcCAhPSAwKQorCQlwKys7CisJICAgIHArKzsKKwl9CisgICAgfQorICAgIFhGcmVlKHByb3BJbmZvKTsKK30KKworLyoKKyAqIEFwcGVuZFByb3BDYXJlZnVsbHkgLS0KKyAqCisgKglBcHBlbmQgYSBnaXZlbiBwcm9wZXJ0eSB0byBhIGdpdmVuIHdpbmRvdywgYnV0IHNldCB1cAorICoJYW4gWCBlcnJvciBoYW5kbGVyIHNvIHRoYXQgaWYgdGhlIGFwcGVuZCBmYWlscyB0aGlzCisgKglwcm9jZWR1cmUgY2FuIHJldHVybiBhbiBlcnJvciBjb2RlIHJhdGhlciB0aGFuIGhhdmluZworICoJWGxpYiBwYW5pYy4KKyAqCisgKiAgUmV0dXJuOgorICoJMCBvbiBPSyAtIC0xIG9uIGVycm9yCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworICAgIHN0YXRpYyBpbnQKK0FwcGVuZFByb3BDYXJlZnVsbHkoZHB5LCB3aW5kb3csIHByb3BlcnR5LCB2YWx1ZSwgbGVuZ3RoKQorICAgIERpc3BsYXkgKmRweTsJCS8qIERpc3BsYXkgb24gd2hpY2ggdG8gb3BlcmF0ZS4gKi8KKyAgICBXaW5kb3cgd2luZG93OwkJLyogV2luZG93IHdob3NlIHByb3BlcnR5IGlzIHRvCisJCQkJICogYmUgbW9kaWZpZWQuICovCisgICAgQXRvbSBwcm9wZXJ0eTsJCS8qIE5hbWUgb2YgcHJvcGVydHkuICovCisgICAgY2hhciAqdmFsdWU7CQkvKiBDaGFyYWN0ZXJzICB0byBhcHBlbmQgdG8gcHJvcGVydHkuICovCisgICAgaW50ICBsZW5ndGg7CQkvKiBIb3cgbXVjaCB0byBhcHBlbmQgKi8KK3sKKyAgICBYRXJyb3JIYW5kbGVyIG9sZF9oYW5kbGVyOworCisgICAgb2xkX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKHhfZXJyb3JfY2hlY2spOworICAgIGdvdF94X2Vycm9yID0gRkFMU0U7CisgICAgWENoYW5nZVByb3BlcnR5KGRweSwgd2luZG93LCBwcm9wZXJ0eSwgWEFfU1RSSU5HLCA4LAorCQkgICAgUHJvcE1vZGVBcHBlbmQsIHZhbHVlLCBsZW5ndGgpOworICAgIFhTeW5jKGRweSwgRmFsc2UpOworICAgICh2b2lkKSBYU2V0RXJyb3JIYW5kbGVyKG9sZF9oYW5kbGVyKTsKKyAgICByZXR1cm4gZ290X3hfZXJyb3IgPyAtMSA6IDA7Cit9CisKKworLyoKKyAqIEFub3RoZXIgWCBFcnJvciBoYW5kbGVyLCBqdXN0IHVzZWQgdG8gY2hlY2sgZm9yIGVycm9ycy4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgaW50Cit4X2Vycm9yX2NoZWNrKGRweSwgZXJyb3JfZXZlbnQpCisgICAgRGlzcGxheSAqZHB5OworICAgIFhFcnJvckV2ZW50CSplcnJvcl9ldmVudDsKK3sKKyAgICBnb3RfeF9lcnJvciA9IFRSVUU7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBpZiAic3RyIiBsb29rcyBsaWtlIGl0IGhhZCBhIHNlcmlhbCBudW1iZXIgYXBwZW5kZWQuCisgKiBBY3R1YWxseSBqdXN0IGNoZWNrcyBpZiB0aGUgbmFtZSBlbmRzIGluIGEgZGlnaXQuCisgKi8KKyAgICBzdGF0aWMgaW50CitJc1NlcmlhbE5hbWUoc3RyKQorICAgIGNoYXIgICAqc3RyOworeworICAgIGludCBsZW4gPSBzdHJsZW4oc3RyKTsKKworICAgIHJldHVybiAobGVuID4gMSAmJiBpc2RpZ2l0KHN0cltsZW4gLSAxXSkpOworfQpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci5pbmZvIGIvcnVudGltZS90dXRvci5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4Y2VkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci9NYWtlZmlsZSBiL3J1bnRpbWUvdHV0b3IvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhNTk2MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvTWFrZWZpbGUKQEAgLTAsMCArMSwxNSBAQAorIyBNYWtlZmlsZSBmb3IgdGhlIFZpbSB0dXRvci4KKyMKKyMgVGhlIEphcGFuZXNlIHR1dG9yIGV4aXN0cyBpbiB0aHJlZSBlbmNvZGluZ3MuICBVc2UgdGhlIFVURi04IHZlcnNpb24gYXMgdGhlCisjIG9yaWdpbmFsIGFuZCBjcmVhdGUgdGhlIG90aGVycyB3aXRoIGNvbnZlcnNpb24uCisKK2FsbDogdHV0b3IuamEuc2ppcyB0dXRvci5qYS5ldWMgdHV0b3Iua28uZXVjCisKK3R1dG9yLmphLnNqaXM6IHR1dG9yLmphLnV0Zi04CisJbmtmIC1XWHMgdHV0b3IuamEudXRmLTggPiB0dXRvci5qYS5zamlzCisKK3R1dG9yLmphLmV1YzogdHV0b3IuamEudXRmLTgKKwlua2YgLVdYZSB0dXRvci5qYS51dGYtOCA+IHR1dG9yLmphLmV1YworCit0dXRvci5rby5ldWM6IHR1dG9yLmtvLnV0Zi04CisJaWNvbnYgLWYgVVRGLTggLXQgRVVDLUtSIHR1dG9yLmtvLnV0Zi04ID4gdHV0b3Iua28uZXVjCmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL1JFQURNRS5nci5jcDczNy50eHQgYi9ydW50aW1lL3R1dG9yL1JFQURNRS5nci5jcDczNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2ZjkyOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvUkVBRE1FLmdyLmNwNzM3LnR4dApAQCAtMCwwICsxLDI0IEBACiuSpiBUdXRvciCc5aSYoCCj5ZggIq6coKimpJihq6Ch4yIgp5yooOOanqmeIJqgmCCk4qasqiCuqOOpq5yqIKumrAorqaykq+Ghq54gVmltLgorCiuOoCCnnKigqanmq5yopqAgpOKmoCCuqOOpq5yqIKOnpqim56QgpJggq6Ygq5yinKDpqaaspCCpnCCioJrmq5yopiCYp+YKK6PlmCDpqJguIJKmIJinpqviopypo5ggnOWkmKAg5qugIKOnpqic5aucIKSYIKHhpJyrnCCj5ZggmKei4yCcqJqYqeWYCiucp5ylnKiamKnlmKogoZygo+KkpqwgrqieqaCjpqemoOmkq5iqIKumpCCprKSr4aGrniBWaW0uCisKK5KmIFR1dG9yIJzlpJigIOKkmCCYqK6c5aYgp6asIKecqKDirpygIKuYIKOYn+OjmKuYIKueqiCnqKanmKiYqaGcrOOqLgori6emqJzlq5wgpJggnKGrnKLiqZyrnCCYp6LhICJ2aW0gdHV0b3IiIKGYoCCjnKvhIKSYIJihpqKmrJ/jqZyrnCCroKoKK6abnprlnKogqauYIKOYn+OjmKuYLiCSmCCjmJ/jo5irmCCfmCCpmKogp6bnpJwgpJggq6imp6anpqDjqZyrnAorq6YgmKiunOWmLCCcp6aj4qTgqiCLhowgko4giYCMhJKEIJGSjiCPkJeSjpKTj44ggIySiIKQgJSOIJGAkS4KKworkZwgqeepq56jmCBVbml4IKOnpqic5aucIJyn5ameqiCkmCCuqJ6poKOmp6ag46mcq5wgq6Ygp6jmmqiYo6OYICJ2aW10dXRvciIuCiuHmCCbnqOgpqyomuOpnKAgp6jpq5gg4qSYIKeo5q6coKimIJikq+WaqJitpiCrpqwgdHV0b3IuCisKK+uu4CCpoZytq5zlIKSYIKeopqmf4qngIKecqKCpqearnKiYIKeopq7gqJ6j4qSYIKOYn+OjmKuYIJiiouEgm5ykIOKu4CCZqJygCiurpqQgmKeYqJjlq56rpiCuqOakpi4ghKSeo5yo6amrnCCjnCCnmKiYoZii6SCn6aogn5ggq6Ygn+KimKucIKGYoCCpq5zlopyrnAoro6asIKanpqCcqZvjp6arnCCZnKKroOmpnKCqIKHhpJyrnC4KKworQm9iIFdhcmUsIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcywgR29sZGVuLCBDbyA4MDQwMSwgVVNBCisoMzAzKSAyNzMtMzk4NworYndhcmVAbWluZXMuY29sb3JhZG8uZWR1IGJ3YXJlQHNsYXRlLm1pbmVzLmNvbG9yYWRvLmVkdSBid2FyZUBtaW5lcy5iaXRuZXQKKworW5KmIJiorpzlpiCYrKvmIKuopqemp6ag45+eoZwgmqCYIKumpCBWaW0gmKfmIKumpCBCcmFtIE1vb2xlbmFhcl0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvUkVBRE1FLmdyLnR4dCBiL3J1bnRpbWUvdHV0b3IvUkVBRE1FLmdyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmY1ZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci9SRUFETUUuZ3IudHh0CkBAIC0wLDAgKzEsMjQgQEAKK9TvIFR1dG9yIOXf7eHpIOzf4SAi9+Xp8e/t4er06ereIiDw5fHp3uPn8+cg4+nhIO3d7/XyIPfx3vP05fIg9O/1Civz9e303Or05yBWaW0uCisKK8/pIPDl8enz8/z05fHv6SDt3e/pIPfx3vP05fIg7PDv8e/97SDt4SD07yD05evl6f7z7/XtIPPlIOvp4/z05fHvIOHw/Aor7N/hIP7x4S4g1O8g4fDv9N3r5fPs4SDl3+3h6SD89Okg7PDv8eXf9OUg7eEg6tzt5fTlIOzf4SDh8OveIOXx4+Hz3+EKK+Xw5e7l8ePh89/h8iDq5ens3e3v9SD38efz6ezv8O/p/u304fIg9O/tIPP17fTc6vTnIFZpbS4KKwor1O8gVHV0b3Ig5d/t4ekg3e3hIOHx9+Xf7yDw7/Ug8OXx6d335ekg9OEg7OHo3uzh9OEg9OfyIPDx7/Dh8eHz6uX13vIuCivM8O/x5d/05SDt4SDl6vTl693z5fTlIOHw69wgInZpbSB0dXRvciIg6uHpIOzl9Nwg7eEg4erv6+/16N7z5fTlIPTp8gor7+Tn49/l8iDz9OEg7OHo3uzh9OEuINThIOzh6N7s4fThIOjhIPPh8iDw7/3t5SDt4SD08e/w7/Dv6d7z5fTlCiv07yDh8ffl3+8sIOXw7+zd7fnyIMzHzSDUzyDKwc3F1MUg09TPINDR2dTP1NXQzyDBzdTJw9HB1s8g08HTLgorCivT5SDz/fP05+zhIFVuaXgg7PDv8eXf9OUg5fDf8+fyIO3hIPfx5/Pp7O/w7+ne8+X05SD07yDw8fzj8eHs7OEgInZpbXR1dG9yIi4KK8jhIOTn7Onv9fHj3vPl6SDw8f704SDd7eEg8PH89+Xp8e8g4e303+Px4fbvIPTv9SB0dXRvci4KKworuPf5IPPq5fb05d8g7eEg8PHv8+jd8/kg8OXx6fPz/PTl8eEg8PHv9/nx5+zd7eEg7OHo3uzh9OEg4evr3CDk5e0g3ff5IOLx5ekKK/Tv7SDh8OHx4d/05/TvIPfx/O3vLiDF7efs5fH+8/TlIOzlIPDh8eHq4ev+IPD+8iDo4SD07yDo3evh9OUg6uHpIPP05d/r5fTlCivs7/Ug7/Dv6eXz5N7w7/TlIOLl6/Tp/vPl6fIg6tzt5fTlLgorCitCb2IgV2FyZSwgQ29sb3JhZG8gU2Nob29sIG9mIE1pbmVzLCBHb2xkZW4sIENvIDgwNDAxLCBVU0EKKygzMDMpIDI3My0zOTg3Citid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUgYndhcmVAc2xhdGUubWluZXMuY29sb3JhZG8uZWR1IGJ3YXJlQG1pbmVzLmJpdG5ldAorCitb1O8g4fH35d/vIOH19Pwg9PHv8O/w7+ne6Ofq5SDj6eEg9O/tIFZpbSDh8Pwg9O/tIEJyYW0gTW9vbGVuYWFyXQpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci9SRUFETUUudHh0IGIvcnVudGltZS90dXRvci9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDk3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL1JFQURNRS50eHQKQEAgLTAsMCArMSwyMiBAQAorVHV0b3IgaXMgYSAiaGFuZHMgb24iIHR1dG9yaWFsIGZvciBuZXcgdXNlcnMgb2YgdGhlIFZpbSBlZGl0b3IuCisKK01vc3QgbmV3IHVzZXJzIGNhbiBnZXQgdGhyb3VnaCBpdCBpbiBsZXNzIHRoYW4gb25lIGhvdXIuIFRoZSByZXN1bHQKK2lzIHRoYXQgeW91IGNhbiBkbyBhIHNpbXBsZSBlZGl0aW5nIHRhc2sgdXNpbmcgdGhlIFZpbSBlZGl0b3IuCisKK1R1dG9yIGlzIGEgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSB0dXRvcmlhbCBsZXNzb25zLiBZb3UgY2FuIHNpbXBseQorZXhlY3V0ZSAidmltIHR1dG9yIiBhbmQgdGhlbiBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgbGVzc29ucy4KK1RoZSBsZXNzb25zIHRlbGwgeW91IHRvIG1vZGlmeSB0aGUgZmlsZSwgc28gRE9OJ1QgRE8gVEhJUyBPTiBZT1VSCitPUklHSU5BTCBDT1BZLgorCitPbiBVbml4IHlvdSBjYW4gYWxzbyB1c2UgdGhlICJ2aW10dXRvciIgcHJvZ3JhbS4gIEl0IHdpbGwgbWFrZSBhCitzY3JhdGNoIGNvcHkgb2YgdGhlIHR1dG9yIGZpcnN0LgorCitJIGhhdmUgY29uc2lkZXJlZCBhZGRpbmcgbW9yZSBhZHZhbmNlZCBsZXNzb25zIGJ1dCBoYXZlIG5vdCBmb3VuZCB0aGUKK3RpbWUuIFBsZWFzZSBsZXQgbWUga25vdyBob3cgeW91IGxpa2UgaXQgYW5kIHNlbmQgYW55IGltcHJvdmVtZW50cyB5b3UKK21ha2UuCisKK0JvYiBXYXJlLCBDb2xvcmFkbyBTY2hvb2wgb2YgTWluZXMsIEdvbGRlbiwgQ28gODA0MDEsIFVTQQorKDMwMykgMjczLTM5ODcKK2J3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdSBid2FyZUBzbGF0ZS5taW5lcy5jb2xvcmFkby5lZHUgYndhcmVAbWluZXMuYml0bmV0CisKK1tUaGlzIGZpbGUgd2FzIG1vZGlmaWVkIGZvciBWaW0gYnkgQnJhbSBNb29sZW5hYXJdCmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL1JFQURNRS50eHQuaW5mbyBiL3J1bnRpbWUvdHV0b3IvUkVBRE1FLnR4dC5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzOGIxMWYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL1JFQURNRS50eHQuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yIGIvcnVudGltZS90dXRvci90dXRvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGE0NmYwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci90dXRvcgpAQCAtMCwwICsxLDgwOCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICBXIGUgbCBjIG8gbSBlICAgdCBvICAgdCBoIGUgICBWIEkgTSAgIFQgdSB0IG8gciAgICAtICAgIFZlcnNpb24gMS41ICAgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgIFZpbSBpcyBhIHZlcnkgcG93ZXJmdWwgZWRpdG9yIHRoYXQgaGFzIG1hbnkgY29tbWFuZHMsIHRvbyBtYW55IHRvCisgICAgIGV4cGxhaW4gaW4gYSB0dXRvciBzdWNoIGFzIHRoaXMuICBUaGlzIHR1dG9yIGlzIGRlc2lnbmVkIHRvIGRlc2NyaWJlCisgICAgIGVub3VnaCBvZiB0aGUgY29tbWFuZHMgdGhhdCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGVhc2lseSB1c2UgVmltIGFzCisgICAgIGFuIGFsbC1wdXJwb3NlIGVkaXRvci4KKworICAgICBUaGUgYXBwcm94aW1hdGUgdGltZSByZXF1aXJlZCB0byBjb21wbGV0ZSB0aGUgdHV0b3IgaXMgMjUtMzAgbWludXRlcywKKyAgICAgZGVwZW5kaW5nIHVwb24gaG93IG11Y2ggdGltZSBpcyBzcGVudCB3aXRoIGV4cGVyaW1lbnRhdGlvbi4KKworICAgICBUaGUgY29tbWFuZHMgaW4gdGhlIGxlc3NvbnMgd2lsbCBtb2RpZnkgdGhlIHRleHQuICBNYWtlIGEgY29weSBvZiB0aGlzCisgICAgIGZpbGUgdG8gcHJhY3Rpc2Ugb24gKGlmIHlvdSBzdGFydGVkICJ2aW10dXRvciIgdGhpcyBpcyBhbHJlYWR5IGEgY29weSkuCisKKyAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhpcyB0dXRvciBpcyBzZXQgdXAgdG8gdGVhY2ggYnkKKyAgICAgdXNlLiAgVGhhdCBtZWFucyB0aGF0IHlvdSBuZWVkIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmRzIHRvIGxlYXJuIHRoZW0KKyAgICAgcHJvcGVybHkuICBJZiB5b3Ugb25seSByZWFkIHRoZSB0ZXh0LCB5b3Ugd2lsbCBmb3JnZXQgdGhlIGNvbW1hbmRzIQorCisgICAgIE5vdywgbWFrZSBzdXJlIHRoYXQgeW91ciBTaGlmdC1Mb2NrIGtleSBpcyBOT1QgZGVwcmVzc2VkIGFuZCBwcmVzcworICAgICB0aGUgICBqICAga2V5IGVub3VnaCB0aW1lcyB0byBtb3ZlIHRoZSBjdXJzb3Igc28gdGhhdCBMZXNzb24gMS4xCisgICAgIGNvbXBsZXRlbHkgZmlsbHMgdGhlIHNjcmVlbi4KK35+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+fgorCQkJTGVzc29uIDEuMTogIE1PVklORyBUSEUgQ1VSU09SCisKKworICAgKiogVG8gbW92ZSB0aGUgY3Vyc29yLCBwcmVzcyB0aGUgaCxqLGssbCBrZXlzIGFzIGluZGljYXRlZC4gKioKKwkgICAgIF4KKwkgICAgIGsJCSAgICBIaW50OiAgVGhlIGgga2V5IGlzIGF0IHRoZSBsZWZ0IGFuZCBtb3ZlcyBsZWZ0LgorICAgICAgIDwgaAkgbCA+CQkgICBUaGUgbCBrZXkgaXMgYXQgdGhlIHJpZ2h0IGFuZCBtb3ZlcyByaWdodC4KKwkgICAgIGoJCQkgICBUaGUgaiBrZXkgbG9va3MgbGlrZSBhIGRvd24gYXJyb3cKKwkgICAgIHYKKyAgMS4gTW92ZSB0aGUgY3Vyc29yIGFyb3VuZCB0aGUgc2NyZWVuIHVudGlsIHlvdSBhcmUgY29tZm9ydGFibGUuCisKKyAgMi4gSG9sZCBkb3duIHRoZSBkb3duIGtleSAoaikgdW50aWwgaXQgcmVwZWF0cy4KKy0tLT4gTm93IHlvdSBrbm93IGhvdyB0byBtb3ZlIHRvIHRoZSBuZXh0IGxlc3Nvbi4KKworICAzLiBVc2luZyB0aGUgZG93biBrZXksIG1vdmUgdG8gTGVzc29uIDEuMi4KKworTm90ZTogSWYgeW91IGFyZSBldmVyIHVuc3VyZSBhYm91dCBzb21ldGhpbmcgeW91IHR5cGVkLCBwcmVzcyA8RVNDPiB0byBwbGFjZQorICAgICAgeW91IGluIE5vcm1hbCBtb2RlLiAgVGhlbiByZXR5cGUgdGhlIGNvbW1hbmQgeW91IHdhbnRlZC4KKworTm90ZTogVGhlIGN1cnNvciBrZXlzIHNob3VsZCBhbHNvIHdvcmsuICBCdXQgdXNpbmcgaGprbCB5b3Ugd2lsbCBiZSBhYmxlIHRvCisgICAgICBtb3ZlIGFyb3VuZCBtdWNoIGZhc3Rlciwgb25jZSB5b3UgZ2V0IHVzZWQgdG8gaXQuCisKK35+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+fgorCQkgICAgIExlc3NvbiAxLjI6IEVOVEVSSU5HIEFORCBFWElUSU5HIFZJTQorCisKKyAgISEgTk9URTogQmVmb3JlIGV4ZWN1dGluZyBhbnkgb2YgdGhlIHN0ZXBzIGJlbG93LCByZWFkIHRoaXMgZW50aXJlIGxlc3NvbiEhCisKKyAgMS4gUHJlc3MgdGhlIDxFU0M+IGtleSAodG8gbWFrZSBzdXJlIHlvdSBhcmUgaW4gTm9ybWFsIG1vZGUpLgorCisgIDIuIFR5cGU6CQkJOnEhIDxFTlRFUj4uCisKKy0tLT4gVGhpcyBleGl0cyB0aGUgZWRpdG9yIFdJVEhPVVQgc2F2aW5nIGFueSBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUuCisgICAgIElmIHlvdSB3YW50IHRvIHNhdmUgdGhlIGNoYW5nZXMgYW5kIGV4aXQgdHlwZToKKwkJCQk6d3EgIDxFTlRFUj4KKworICAzLiBXaGVuIHlvdSBzZWUgdGhlIHNoZWxsIHByb21wdCwgdHlwZSB0aGUgY29tbWFuZCB0aGF0IGdvdCB5b3UgaW50byB0aGlzCisgICAgIHR1dG9yLiAgVGhhdCBjb3VsZCBiZToJdmltdHV0b3IgPEVOVEVSPgorICAgICBOb3JtYWxseSB5b3Ugd291bGQgdXNlOgl2aW0gdHV0b3IgPEVOVEVSPgorCistLS0+ICd2aW0nIG1lYW5zIGVudGVyIHRoZSB2aW0gZWRpdG9yLCAndHV0b3InIGlzIHRoZSBmaWxlIHlvdSB3aXNoIHRvIGVkaXQuCisKKyAgNC4gSWYgeW91IGhhdmUgdGhlc2Ugc3RlcHMgbWVtb3JpemVkIGFuZCBhcmUgY29uZmlkZW50LCBleGVjdXRlIHN0ZXBzCisgICAgIDEgdGhyb3VnaCAzIHRvIGV4aXQgYW5kIHJlLWVudGVyIHRoZSBlZGl0b3IuICBUaGVuIG1vdmUgdGhlIGN1cnNvciBkb3duCisgICAgIHRvIExlc3NvbiAxLjMuCit+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+fn4KKwkJICAgICBMZXNzb24gMS4zOiBURVhUIEVESVRJTkcgLSBERUxFVElPTgorCisKKyoqIFdoaWxlIGluIE5vcm1hbCBtb2RlIHByZXNzCXggIHRvIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuICoqCisKKyAgMS4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsaW5lIGJlbG93IG1hcmtlZCAtLS0+LgorCisgIDIuIFRvIGZpeCB0aGUgZXJyb3JzLCBtb3ZlIHRoZSBjdXJzb3IgdW50aWwgaXQgaXMgb24gdG9wIG9mIHRoZQorICAgICBjaGFyYWN0ZXIgdG8gYmUgZGVsZXRlZC4KKworICAzLiBQcmVzcyB0aGUJeCAga2V5IHRvIGRlbGV0ZSB0aGUgdW53YW50ZWQgY2hhcmFjdGVyLgorCisgIDQuIFJlcGVhdCBzdGVwcyAyIHRocm91Z2ggNCB1bnRpbCB0aGUgc2VudGVuY2UgaXMgY29ycmVjdC4KKworLS0tPiBUaGUgY2NvdyBqdW1wZWRkIG92dmVyciB0aGhlIG1vb29uLgorCisgIDUuIE5vdyB0aGF0IHRoZSBsaW5lIGlzIGNvcnJlY3QsIGdvIG9uIHRvIExlc3NvbiAxLjQuCisKK05PVEU6IEFzIHlvdSBnbyB0aHJvdWdoIHRoaXMgdHV0b3IsIGRvIG5vdCB0cnkgdG8gbWVtb3JpemUsIGxlYXJuIGJ5IHVzYWdlLgorCisKKworfn5+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+CisJCSAgICAgTGVzc29uIDEuNDogVEVYVCBFRElUSU5HIC0gSU5TRVJUSU9OCisKKworCSAqKiBXaGlsZSBpbiBOb3JtYWwgbW9kZSBwcmVzcyAgaSAgdG8gaW5zZXJ0IHRleHQuICoqCisKKyAgMS4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBsaW5lIGJlbG93IG1hcmtlZCAtLS0+LgorCisgIDIuIFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCwgbW92ZSB0aGUgY3Vyc29yIG9uIHRvcAorICAgICBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIEFGVEVSIHdoZXJlIHRoZSB0ZXh0IGlzIHRvIGJlIGluc2VydGVkLgorCisgIDMuIFByZXNzICBpICBhbmQgdHlwZSBpbiB0aGUgbmVjZXNzYXJ5IGFkZGl0aW9ucy4KKworICA0LiBBcyBlYWNoIGVycm9yIGlzIGZpeGVkIHByZXNzIDxFU0M+IHRvIHJldHVybiB0byBOb3JtYWwgbW9kZS4KKyAgICAgUmVwZWF0IHN0ZXBzIDIgdGhyb3VnaCA0IHRvIGNvcnJlY3QgdGhlIHNlbnRlbmNlLgorCistLS0+IFRoZXJlIGlzIHRleHQgbWlzbmcgdGhpcyAuCistLS0+IFRoZXJlIGlzIHNvbWUgdGV4dCBtaXNzaW5nIGZyb20gdGhpcyBsaW5lLgorCisgIDUuIFdoZW4geW91IGFyZSBjb21mb3J0YWJsZSBpbnNlcnRpbmcgdGV4dCBtb3ZlIHRvIHRoZSBzdW1tYXJ5IGJlbG93LgorCisKKworfn5+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+CisJCQkgICAgICAgTEVTU09OIDEgU1VNTUFSWQorCisKKyAgMS4gVGhlIGN1cnNvciBpcyBtb3ZlZCB1c2luZyBlaXRoZXIgdGhlIGFycm93IGtleXMgb3IgdGhlIGhqa2wga2V5cy4KKwkgaCAobGVmdCkJaiAoZG93bikgICAgICAgayAodXApCSAgICBsIChyaWdodCkKKworICAyLiBUbyBlbnRlciBWaW0gKGZyb20gdGhlICUgcHJvbXB0KSB0eXBlOiAgdmltIEZJTEVOQU1FIDxFTlRFUj4KKworICAzLiBUbyBleGl0IFZpbSB0eXBlOgkgICA8RVNDPiAgIDpxIQkgPEVOVEVSPiAgdG8gdHJhc2ggYWxsIGNoYW5nZXMuCisJICAgICBPUiB0eXBlOgkgICA8RVNDPiAgIDp3cQkgPEVOVEVSPiAgdG8gc2F2ZSB0aGUgY2hhbmdlcy4KKworICA0LiBUbyBkZWxldGUgYSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciBpbiBOb3JtYWwgbW9kZSB0eXBlOiAgeAorCisgIDUuIFRvIGluc2VydCB0ZXh0IGF0IHRoZSBjdXJzb3Igd2hpbGUgaW4gTm9ybWFsIG1vZGUgdHlwZToKKwkgaSAgICAgdHlwZSBpbiB0ZXh0CTxFU0M+CisKK05PVEU6IFByZXNzaW5nIDxFU0M+IHdpbGwgcGxhY2UgeW91IGluIE5vcm1hbCBtb2RlIG9yIHdpbGwgY2FuY2VsCisgICAgICBhbiB1bndhbnRlZCBhbmQgcGFydGlhbGx5IGNvbXBsZXRlZCBjb21tYW5kLgorCitOb3cgY29udGludWUgd2l0aCBMZXNzb24gMi4KKworCit+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+fn4KKwkJCUxlc3NvbiAyLjE6IERFTEVUSU9OIENPTU1BTkRTCisKKworCSAgICAqKiBUeXBlICBkdyAgdG8gZGVsZXRlIHRvIHRoZSBlbmQgb2YgYSB3b3JkLiAqKgorCisgIDEuIFByZXNzICA8RVNDPiAgdG8gbWFrZSBzdXJlIHlvdSBhcmUgaW4gTm9ybWFsIG1vZGUuCisKKyAgMi4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsaW5lIGJlbG93IG1hcmtlZCAtLS0+LgorCisgIDMuIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIGEgd29yZCB0aGF0IG5lZWRzIHRvIGJlIGRlbGV0ZWQuCisKKyAgNC4gVHlwZSAgIGR3CSB0byBtYWtlIHRoZSB3b3JkIGRpc2FwcGVhci4KKworICBOT1RFOiBUaGUgbGV0dGVycyBkdyB3aWxsIGFwcGVhciBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBzY3JlZW4gYXMgeW91IHR5cGUKKwl0aGVtLiBJZiB5b3UgdHlwZWQgc29tZXRoaW5nIHdyb25nLCBwcmVzcyAgPEVTQz4gIGFuZCBzdGFydCBvdmVyLgorCistLS0+IFRoZXJlIGFyZSBhIHNvbWUgd29yZHMgZnVuIHRoYXQgZG9uJ3QgYmVsb25nIHBhcGVyIGluIHRoaXMgc2VudGVuY2UuCisKKyAgNS4gUmVwZWF0IHN0ZXBzIDMgYW5kIDQgdW50aWwgdGhlIHNlbnRlbmNlIGlzIGNvcnJlY3QgYW5kIGdvIHRvIExlc3NvbiAyLjIuCisKKworCit+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+fn4KKwkJICAgICAgTGVzc29uIDIuMjogTU9SRSBERUxFVElPTiBDT01NQU5EUworCisKKwkgICAqKiBUeXBlICBkJAl0byBkZWxldGUgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gKioKKworICAxLiBQcmVzcyAgPEVTQz4gIHRvIG1ha2Ugc3VyZSB5b3UgYXJlIGluIE5vcm1hbCBtb2RlLgorCisgIDIuIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbGluZSBiZWxvdyBtYXJrZWQgLS0tPi4KKworICAzLiBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgY29ycmVjdCBsaW5lIChBRlRFUiB0aGUgZmlyc3QgLiApLgorCisgIDQuIFR5cGUgICAgZCQgICAgdG8gZGVsZXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisKKy0tLT4gU29tZWJvZHkgdHlwZWQgdGhlIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuCisKKworICA1LiBNb3ZlIG9uIHRvIExlc3NvbiAyLjMgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGhhcHBlbmluZy4KKworCisKKworCit+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+fn4KKwkJICAgICBMZXNzb24gMi4zOiBPTiBDT01NQU5EUyBBTkQgT0JKRUNUUworCisKKyAgVGhlIGZvcm1hdCBmb3IgdGhlICBkICBkZWxldGUgY29tbWFuZCBpcyBhcyBmb2xsb3dzOgorCisJIFtudW1iZXJdICAgZAlvYmplY3QJICAgIE9SCSAgICAgZAkgW251bWJlcl0gICBvYmplY3QKKyAgV2hlcmU6CisgICAgbnVtYmVyIC0gaXMgaG93IG1hbnkgdGltZXMgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAob3B0aW9uYWwsIGRlZmF1bHQ9MSkuCisgICAgZCAtIGlzIHRoZSBjb21tYW5kIHRvIGRlbGV0ZS4KKyAgICBvYmplY3QgLSBpcyB3aGF0IHRoZSBjb21tYW5kIHdpbGwgb3BlcmF0ZSBvbiAobGlzdGVkIGJlbG93KS4KKworICBBIHNob3J0IGxpc3Qgb2Ygb2JqZWN0czoKKyAgICB3IC0gZnJvbSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIHdvcmQsIGluY2x1ZGluZyB0aGUgc3BhY2UuCisgICAgZSAtIGZyb20gdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSB3b3JkLCBOT1QgaW5jbHVkaW5nIHRoZSBzcGFjZS4KKyAgICAkIC0gZnJvbSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisKK05PVEU6ICBGb3IgdGhlIGFkdmVudHVyb3VzLCBwcmVzc2luZyBqdXN0IHRoZSBvYmplY3Qgd2hpbGUgaW4gTm9ybWFsIG1vZGUKKyAgICAgICB3aXRob3V0IGEgY29tbWFuZCB3aWxsIG1vdmUgdGhlIGN1cnNvciBhcyBzcGVjaWZpZWQgaW4gdGhlIG9iamVjdCBsaXN0LgorCisKKworCit+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+fn4KKwkJTGVzc29uIDIuNDogQU4gRVhDRVBUSU9OIFRPICAnQ09NTUFORC1PQkpFQ1QnCisKKworCSAgICAgICAqKiBUeXBlCSBkZCAgIHRvIGRlbGV0ZSBhIHdob2xlIGxpbmUuICoqCisKKyAgRHVlIHRvIHRoZSBmcmVxdWVuY3kgb2Ygd2hvbGUgbGluZSBkZWxldGlvbiwgdGhlIGRlc2lnbmVycyBvZiBWaSBkZWNpZGVkCisgIGl0IHdvdWxkIGJlIGVhc2llciB0byBzaW1wbHkgdHlwZSB0d28gZCdzIGluIGEgcm93IHRvIGRlbGV0ZSBhIGxpbmUuCisKKyAgMS4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBzZWNvbmQgbGluZSBpbiB0aGUgcGhyYXNlIGJlbG93LgorICAyLiBUeXBlICBkZCAgdG8gZGVsZXRlIHRoZSBsaW5lLgorICAzLiBOb3cgbW92ZSB0byB0aGUgZm91cnRoIGxpbmUuCisgIDQuIFR5cGUgICAyZGQgICAocmVtZW1iZXIgIG51bWJlci1jb21tYW5kLW9iamVjdCkgdG8gZGVsZXRlIHRoZSB0d28gbGluZXMuCisKKyAgICAgIDEpICBSb3NlcyBhcmUgcmVkLAorICAgICAgMikgIE11ZCBpcyBmdW4sCisgICAgICAzKSAgVmlvbGV0cyBhcmUgYmx1ZSwKKyAgICAgIDQpICBJIGhhdmUgYSBjYXIsCisgICAgICA1KSAgQ2xvY2tzIHRlbGwgdGltZSwKKyAgICAgIDYpICBTdWdhciBpcyBzd2VldAorICAgICAgNykgIEFuZCBzbyBhcmUgeW91LgorCisKK35+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+fgorCQkJIExlc3NvbiAyLjU6IFRIRSBVTkRPIENPTU1BTkQKKworCisgICAqKiBQcmVzcyAgdQl0byB1bmRvIHRoZSBsYXN0IGNvbW1hbmRzLCAgIFUJIHRvIGZpeCBhIHdob2xlIGxpbmUuICoqCisKKyAgMS4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsaW5lIGJlbG93IG1hcmtlZCAtLS0+IGFuZCBwbGFjZSBpdCBvbiB0aGUKKyAgICAgZmlyc3QgZXJyb3IuCisgIDIuIFR5cGUgIHggIHRvIGRlbGV0ZSB0aGUgZmlyc3QgdW53YW50ZWQgY2hhcmFjdGVyLgorICAzLiBOb3cgdHlwZSAgdSAgdG8gdW5kbyB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgorICA0LiBUaGlzIHRpbWUgZml4IGFsbCB0aGUgZXJyb3JzIG9uIHRoZSBsaW5lIHVzaW5nIHRoZSAgeCAgY29tbWFuZC4KKyAgNS4gTm93IHR5cGUgYSBjYXBpdGFsICBVICB0byByZXR1cm4gdGhlIGxpbmUgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLgorICA2LiBOb3cgdHlwZSAgdSAgYSBmZXcgdGltZXMgdG8gdW5kbyB0aGUgIFUgIGFuZCBwcmVjZWRpbmcgY29tbWFuZHMuCisgIDcuIE5vdyB0eXBlIENUUkwtUiAoa2VlcGluZyBDVFJMIGtleSBwcmVzc2VkIHdoaWxlIGhpdHRpbmcgUikgYSBmZXcgdGltZXMKKyAgICAgdG8gcmVkbyB0aGUgY29tbWFuZHMgKHVuZG8gdGhlIHVuZG8ncykuCisKKy0tLT4gRmlpeCB0aGUgZXJyb3JzIG9vbiB0aGhpcyBsaW5lIGFuZCByZWVwbGFjZSB0aGVtIHdpdHRoIHVuZG8uCisKKyAgOC4gVGhlc2UgYXJlIHZlcnkgdXNlZnVsIGNvbW1hbmRzLiAgTm93IG1vdmUgb24gdG8gdGhlIExlc3NvbiAyIFN1bW1hcnkuCisKKworCisKK35+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+fgorCQkJICAgICAgIExFU1NPTiAyIFNVTU1BUlkKKworCisgIDEuIFRvIGRlbGV0ZSBmcm9tIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiBhIHdvcmQgdHlwZTogICAgZHcKKworICAyLiBUbyBkZWxldGUgZnJvbSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgYSBsaW5lIHR5cGU6ICAgIGQkCisKKyAgMy4gVG8gZGVsZXRlIGEgd2hvbGUgbGluZSB0eXBlOiAgICBkZAorCisgIDQuIFRoZSBmb3JtYXQgZm9yIGEgY29tbWFuZCBpbiBOb3JtYWwgbW9kZSBpczoKKworICAgICAgIFtudW1iZXJdICAgY29tbWFuZCAgIG9iamVjdCAgICAgT1IgICAgIGNvbW1hbmQJW251bWJlcl0gICBvYmplY3QKKyAgICAgd2hlcmU6CisgICAgICAgbnVtYmVyIC0gaXMgaG93IG1hbnkgdGltZXMgdG8gcmVwZWF0IHRoZSBjb21tYW5kCisgICAgICAgY29tbWFuZCAtIGlzIHdoYXQgdG8gZG8sIHN1Y2ggYXMgIGQgIGZvciBkZWxldGUKKyAgICAgICBvYmplY3QgLSBpcyB3aGF0IHRoZSBjb21tYW5kIHNob3VsZCBhY3QgdXBvbiwgc3VjaCBhcyAgdyAod29yZCksCisJCSQgKHRvIHRoZSBlbmQgb2YgbGluZSksIGV0Yy4KKworICA1LiBUbyB1bmRvIHByZXZpb3VzIGFjdGlvbnMsIHR5cGU6CSAgICAgdQkgKGxvd2VyY2FzZSB1KQorICAgICBUbyB1bmRvIGFsbCB0aGUgY2hhbmdlcyBvbiBhIGxpbmUgdHlwZTogVQkgKGNhcGl0YWwgVSkKKyAgICAgVG8gdW5kbyB0aGUgdW5kbydzIHR5cGU6CQkgICAgIENUUkwtUgorCit+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+fn4KKwkJCSBMZXNzb24gMy4xOiBUSEUgUFVUIENPTU1BTkQKKworCisgICAgICAgKiogVHlwZQlwICB0byBwdXQgdGhlIGxhc3QgZGVsZXRpb24gYWZ0ZXIgdGhlIGN1cnNvci4gKioKKworICAxLiBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGxpbmUgaW4gdGhlIHNldCBiZWxvdy4KKworICAyLiBUeXBlICBkZCAgdG8gZGVsZXRlIHRoZSBsaW5lIGFuZCBzdG9yZSBpdCBpbiBWaW0ncyBidWZmZXIuCisKKyAgMy4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsaW5lIEFCT1ZFIHdoZXJlIHRoZSBkZWxldGVkIGxpbmUgc2hvdWxkIGdvLgorCisgIDQuIFdoaWxlIGluIE5vcm1hbCBtb2RlLCB0eXBlICAgIHAJIHRvIHJlcGxhY2UgdGhlIGxpbmUuCisKKyAgNS4gUmVwZWF0IHN0ZXBzIDIgdGhyb3VnaCA0IHRvIHB1dCBhbGwgdGhlIGxpbmVzIGluIGNvcnJlY3Qgb3JkZXIuCisKKyAgICAgZCkgQ2FuIHlvdSBsZWFybiB0b28/CisgICAgIGIpIFZpb2xldHMgYXJlIGJsdWUsCisgICAgIGMpIEludGVsbGlnZW5jZSBpcyBsZWFybmVkLAorICAgICBhKSBSb3NlcyBhcmUgcmVkLAorCisKKworfn5+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+CisJCSAgICAgICBMZXNzb24gMy4yOiBUSEUgUkVQTEFDRSBDT01NQU5ECisKKworICAqKiBUeXBlICByICBhbmQgYSBjaGFyYWN0ZXIgdG8gcmVwbGFjZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuICoqCisKKyAgMS4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBsaW5lIGJlbG93IG1hcmtlZCAtLS0+LgorCisgIDIuIE1vdmUgdGhlIGN1cnNvciBzbyB0aGF0IGl0IGlzIG9uIHRvcCBvZiB0aGUgZmlyc3QgZXJyb3IuCisKKyAgMy4gVHlwZSAgIHIJYW5kIHRoZW4gdGhlIGNoYXJhY3RlciB3aGljaCBzaG91bGQgcmVwbGFjZSB0aGUgZXJyb3IuCisKKyAgNC4gUmVwZWF0IHN0ZXBzIDIgYW5kIDMgdW50aWwgdGhlIGZpcnN0IGxpbmUgaXMgY29ycmVjdC4KKworLS0tPiAgV2hhbiB0aGlzIGxpbWUgd2FzIHR1b2VkIGluLCBzb21lb25lIHByZXNzd2Qgc29tZSB3cm9qZyBrZXlzIQorLS0tPiAgV2hlbiB0aGlzIGxpbmUgd2FzIHR5cGVkIGluLCBzb21lb25lIHByZXNzZWQgc29tZSB3cm9uZyBrZXlzIQorCisgIDUuIE5vdyBtb3ZlIG9uIHRvIExlc3NvbiAzLjIuCisKK05PVEU6IFJlbWVtYmVyIHRoYXQgeW91IHNob3VsZCBiZSBsZWFybmluZyBieSB1c2UsIG5vdCBtZW1vcml6YXRpb24uCisKKworCit+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+fn4KKwkJCUxlc3NvbiAzLjM6IFRIRSBDSEFOR0UgQ09NTUFORAorCisKKwkgICAqKiBUbyBjaGFuZ2UgcGFydCBvciBhbGwgb2YgYSB3b3JkLCB0eXBlICBjdyAuICoqCisKKyAgMS4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBsaW5lIGJlbG93IG1hcmtlZCAtLS0+LgorCisgIDIuIFBsYWNlIHRoZSBjdXJzb3Igb24gdGhlIHUgaW4gbHVidy4KKworICAzLiBUeXBlICBjdyAgYW5kIHRoZSBjb3JyZWN0IHdvcmQgKGluIHRoaXMgY2FzZSwgdHlwZSAgJ2luZScuKQorCisgIDQuIFByZXNzIDxFU0M+IGFuZCBtb3ZlIHRvIHRoZSBuZXh0IGVycm9yICh0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIGJlIGNoYW5nZWQuKQorCisgIDUuIFJlcGVhdCBzdGVwcyAzIGFuZCA0IHVudGlsIHRoZSBmaXJzdCBzZW50ZW5jZSBpcyB0aGUgc2FtZSBhcyB0aGUgc2Vjb25kLgorCistLS0+IFRoaXMgbHVidyBoYXMgYSBmZXcgd3B0ZmQgdGhhdCBtcnJmIGNoYW5naW5nIHVzZiB0aGUgY2hhbmdlIGNvbW1hbmQuCistLS0+IFRoaXMgbGluZSBoYXMgYSBmZXcgd29yZHMgdGhhdCBuZWVkIGNoYW5naW5nIHVzaW5nIHRoZSBjaGFuZ2UgY29tbWFuZC4KKworTm90aWNlIHRoYXQgIGN3ICBub3Qgb25seSByZXBsYWNlcyB0aGUgd29yZCwgYnV0IGFsc28gcGxhY2VzIHlvdSBpbiBpbnNlcnQuCisKKworCit+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+fn4KKwkJICAgICAgIExlc3NvbiAzLjQ6IE1PUkUgQ0hBTkdFUyBVU0lORyBjCisKKworICAgICAqKiBUaGUgY2hhbmdlIGNvbW1hbmQgaXMgdXNlZCB3aXRoIHRoZSBzYW1lIG9iamVjdHMgYXMgZGVsZXRlLiAqKgorCisgIDEuIFRoZSBjaGFuZ2UgY29tbWFuZCB3b3JrcyBpbiB0aGUgc2FtZSB3YXkgYXMgZGVsZXRlLiAgVGhlIGZvcm1hdCBpczoKKworICAgICAgIFtudW1iZXJdICAgYyAgIG9iamVjdAkgICBPUgkgICAgYwlbbnVtYmVyXSAgIG9iamVjdAorCisgIDIuIFRoZSBvYmplY3RzIGFyZSBhbHNvIHRoZSBzYW1lLCBzdWNoIGFzICAgdyAod29yZCksICQgKGVuZCBvZiBsaW5lKSwgZXRjLgorCisgIDMuIE1vdmUgdG8gdGhlIGZpcnN0IGxpbmUgYmVsb3cgbWFya2VkIC0tLT4uCisKKyAgNC4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBlcnJvci4KKworICA1LiBUeXBlICBjJCAgdG8gbWFrZSB0aGUgcmVzdCBvZiB0aGUgbGluZSBsaWtlIHRoZSBzZWNvbmQgYW5kIHByZXNzIDxFU0M+LgorCistLS0+IFRoZSBlbmQgb2YgdGhpcyBsaW5lIG5lZWRzIHNvbWUgaGVscCB0byBtYWtlIGl0IGxpa2UgdGhlIHNlY29uZC4KKy0tLT4gVGhlIGVuZCBvZiB0aGlzIGxpbmUgbmVlZHMgdG8gYmUgY29ycmVjdGVkIHVzaW5nIHRoZSAgYyQgIGNvbW1hbmQuCisKKworCit+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+fn4KKwkJCSAgICAgICBMRVNTT04gMyBTVU1NQVJZCisKKworICAxLiBUbyByZXBsYWNlIHRleHQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0ZWQsIHR5cGUgICBwIC4JVGhpcyBQdXRzIHRoZQorICAgICBkZWxldGVkIHRleHQgQUZURVIgdGhlIGN1cnNvciAoaWYgYSBsaW5lIHdhcyBkZWxldGVkIGl0IHdpbGwgZ28gb24gdGhlCisgICAgIGxpbmUgYmVsb3cgdGhlIGN1cnNvcikuCisKKyAgMi4gVG8gcmVwbGFjZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IsIHR5cGUgICByICAgYW5kIHRoZW4gdGhlCisgICAgIGNoYXJhY3RlciB3aGljaCB3aWxsIHJlcGxhY2UgdGhlIG9yaWdpbmFsLgorCisgIDMuIFRoZSBjaGFuZ2UgY29tbWFuZCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc3BlY2lmaWVkIG9iamVjdCBmcm9tIHRoZQorICAgICBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0LiAgZWcuIFR5cGUgIGN3ICB0byBjaGFuZ2UgZnJvbSB0aGUKKyAgICAgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIHdvcmQsIGMkCXRvIGNoYW5nZSB0byB0aGUgZW5kIG9mIGEgbGluZS4KKworICA0LiBUaGUgZm9ybWF0IGZvciBjaGFuZ2UgaXM6CisKKwkgW251bWJlcl0gICBjCW9iamVjdAkgICAgICBPUgljICAgW251bWJlcl0gICBvYmplY3QKKworTm93IGdvIG9uIHRvIHRoZSBuZXh0IGxlc3Nvbi4KKworCisKK35+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+fgorCQkgICAgIExlc3NvbiA0LjE6IExPQ0FUSU9OIEFORCBGSUxFIFNUQVRVUworCisKKyAgKiogVHlwZSBDVFJMLWcgdG8gc2hvdyB5b3VyIGxvY2F0aW9uIGluIHRoZSBmaWxlIGFuZCB0aGUgZmlsZSBzdGF0dXMuCisgICAgIFR5cGUgU0hJRlQtRyB0byBtb3ZlIHRvIGEgbGluZSBpbiB0aGUgZmlsZS4gKioKKworICBOb3RlOiBSZWFkIHRoaXMgZW50aXJlIGxlc3NvbiBiZWZvcmUgZXhlY3V0aW5nIGFueSBvZiB0aGUgc3RlcHMhIQorCisgIDEuIEhvbGQgZG93biB0aGUgQ3RybCBrZXkgYW5kIHByZXNzICBnIC4gIEEgc3RhdHVzIGxpbmUgd2lsbCBhcHBlYXIgYXQgdGhlCisgICAgIGJvdHRvbSBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWxlbmFtZSBhbmQgdGhlIGxpbmUgeW91IGFyZSBvbi4gIFJlbWVtYmVyCisgICAgIHRoZSBsaW5lIG51bWJlciBmb3IgU3RlcCAzLgorCisgIDIuIFByZXNzIHNoaWZ0LUcgdG8gbW92ZSB5b3UgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmlsZS4KKworICAzLiBUeXBlIGluIHRoZSBudW1iZXIgb2YgdGhlIGxpbmUgeW91IHdlcmUgb24gYW5kIHRoZW4gc2hpZnQtRy4gIFRoaXMgd2lsbAorICAgICByZXR1cm4geW91IHRvIHRoZSBsaW5lIHlvdSB3ZXJlIG9uIHdoZW4geW91IGZpcnN0IHByZXNzZWQgQ3RybC1nLgorICAgICAoV2hlbiB5b3UgdHlwZSBpbiB0aGUgbnVtYmVycywgdGhleSB3aWxsIE5PVCBiZSBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi4pCisKKyAgNC4gSWYgeW91IGZlZWwgY29uZmlkZW50IHRvIGRvIHRoaXMsIGV4ZWN1dGUgc3RlcHMgMSB0aHJvdWdoIDMuCisKKworCit+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+fn4KKwkJCUxlc3NvbiA0LjI6IFRIRSBTRUFSQ0ggQ09NTUFORAorCisKKyAgICAgKiogVHlwZSAgLyAgZm9sbG93ZWQgYnkgYSBwaHJhc2UgdG8gc2VhcmNoIGZvciB0aGUgcGhyYXNlLiAqKgorCisgIDEuIEluIE5vcm1hbCBtb2RlIHR5cGUgdGhlICAvICBjaGFyYWN0ZXIuICBOb3RpY2UgdGhhdCBpdCBhbmQgdGhlIGN1cnNvcgorICAgICBhcHBlYXIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuIGFzIHdpdGggdGhlICA6CWNvbW1hbmQuCisKKyAgMi4gTm93IHR5cGUgJ2VycnJvb3InIDxFTlRFUj4uICBUaGlzIGlzIHRoZSB3b3JkIHlvdSB3YW50IHRvIHNlYXJjaCBmb3IuCisKKyAgMy4gVG8gc2VhcmNoIGZvciB0aGUgc2FtZSBwaHJhc2UgYWdhaW4sIHNpbXBseSB0eXBlICBuIC4KKyAgICAgVG8gc2VhcmNoIGZvciB0aGUgc2FtZSBwaHJhc2UgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiwgdHlwZSAgU2hpZnQtTiAuCisKKyAgNC4gSWYgeW91IHdhbnQgdG8gc2VhcmNoIGZvciBhIHBocmFzZSBpbiB0aGUgYmFja3dhcmRzIGRpcmVjdGlvbiwgdXNlIHRoZQorICAgICBjb21tYW5kICA/ICBpbnN0ZWFkIG9mIC8uCisKKy0tLT4gImVycnJvb3IiIGlzIG5vdCB0aGUgd2F5IHRvIHNwZWxsIGVycm9yOyAgZXJycm9vciBpcyBhbiBlcnJvci4KKworTm90ZTogV2hlbiB0aGUgc2VhcmNoIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgZmlsZSBpdCB3aWxsIGNvbnRpbnVlIGF0IHRoZQorICAgICAgc3RhcnQuCisKKworfn5+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+CisJCSAgIExlc3NvbiA0LjM6IE1BVENISU5HIFBBUkVOVEhFU0VTIFNFQVJDSAorCisKKwkgICAgICAqKiBUeXBlICAlICB0byBmaW5kIGEgbWF0Y2hpbmcgKSxdLCBvciB9IC4gKioKKworICAxLiBQbGFjZSB0aGUgY3Vyc29yIG9uIGFueSAoLCBbLCBvciB7IGluIHRoZSBsaW5lIGJlbG93IG1hcmtlZCAtLS0+LgorCisgIDIuIE5vdyB0eXBlIHRoZSAgJSAgY2hhcmFjdGVyLgorCisgIDMuIFRoZSBjdXJzb3Igc2hvdWxkIGJlIG9uIHRoZSBtYXRjaGluZyBwYXJlbnRoZXNpcyBvciBicmFja2V0LgorCisgIDQuIFR5cGUgICUgIHRvIG1vdmUgdGhlIGN1cnNvciBiYWNrIHRvIHRoZSBmaXJzdCBicmFja2V0IChieSBtYXRjaGluZykuCisKKy0tLT4gVGhpcyAoIGlzIGEgdGVzdCBsaW5lIHdpdGggKCdzLCBbJ3MgXSBhbmQgeydzIH0gaW4gaXQuICkpCisKK05vdGU6IFRoaXMgaXMgdmVyeSB1c2VmdWwgaW4gZGVidWdnaW5nIGEgcHJvZ3JhbSB3aXRoIHVubWF0Y2hlZCBwYXJlbnRoZXNlcyEKKworCisKKworCisKK35+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+fgorCQkgICAgICBMZXNzb24gNC40OiBBIFdBWSBUTyBDSEFOR0UgRVJST1JTCisKKworCSoqIFR5cGUgIDpzL29sZC9uZXcvZyAgdG8gc3Vic3RpdHV0ZSAnbmV3JyBmb3IgJ29sZCcuICoqCisKKyAgMS4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsaW5lIGJlbG93IG1hcmtlZCAtLS0+LgorCisgIDIuIFR5cGUgIDpzL3RoZWUvdGhlIDxFTlRFUj4gLiAgTm90ZSB0aGF0IHRoaXMgY29tbWFuZCBvbmx5IGNoYW5nZXMgdGhlCisgICAgIGZpcnN0IG9jY3VycmVuY2Ugb24gdGhlIGxpbmUuCisKKyAgMy4gTm93IHR5cGUJIDpzL3RoZWUvdGhlL2cJICAgbWVhbmluZyBzdWJzdGl0dXRlIGdsb2JhbGx5IG9uIHRoZSBsaW5lLgorICAgICBUaGlzIGNoYW5nZXMgYWxsIG9jY3VycmVuY2VzIG9uIHRoZSBsaW5lLgorCistLS0+IHRoZWUgYmVzdCB0aW1lIHRvIHNlZSB0aGVlIGZsb3dlcnMgaXMgaW4gdGhlZSBzcHJpbmcuCisKKyAgNC4gVG8gY2hhbmdlIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgYSBjaGFyYWN0ZXIgc3RyaW5nIGJldHdlZW4gdHdvIGxpbmVzLAorICAgICB0eXBlICAgOiMsI3Mvb2xkL25ldy9nICAgIHdoZXJlICMsIyBhcmUgdGhlIG51bWJlcnMgb2YgdGhlIHR3byBsaW5lcy4KKyAgICAgVHlwZSAgIDolcy9vbGQvbmV3L2cgICAgdG8gY2hhbmdlIGV2ZXJ5IG9jY3VycmVuY2UgaW4gdGhlIHdob2xlIGZpbGUuCisKKworCisKK35+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+fgorCQkJICAgICAgIExFU1NPTiA0IFNVTU1BUlkKKworCisgIDEuIEN0cmwtZyAgZGlzcGxheXMgeW91ciBsb2NhdGlvbiBpbiB0aGUgZmlsZSBhbmQgdGhlIGZpbGUgc3RhdHVzLgorICAgICBTaGlmdC1HICBtb3ZlcyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgQSBsaW5lIG51bWJlciBmb2xsb3dlZAorICAgICBieSAgU2hpZnQtRyAgbW92ZXMgdG8gdGhhdCBsaW5lIG51bWJlci4KKworICAyLiBUeXBpbmcgIC8JZm9sbG93ZWQgYnkgYSBwaHJhc2Ugc2VhcmNoZXMgRk9SV0FSRCBmb3IgdGhlIHBocmFzZS4KKyAgICAgVHlwaW5nICA/CWZvbGxvd2VkIGJ5IGEgcGhyYXNlIHNlYXJjaGVzIEJBQ0tXQVJEIGZvciB0aGUgcGhyYXNlLgorICAgICBBZnRlciBhIHNlYXJjaCB0eXBlICBuICB0byBmaW5kIHRoZSBuZXh0IG9jY3VycmVuY2UgaW4gdGhlIHNhbWUgZGlyZWN0aW9uCisgICAgIG9yICBTaGlmdC1OICB0byBzZWFyY2ggaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4KKworICAzLiBUeXBpbmcgICUJd2hpbGUgdGhlIGN1cnNvciBpcyBvbiBhICAoLCksWyxdLHssIG9yIH0gIGxvY2F0ZXMgaXRzCisgICAgIG1hdGNoaW5nIHBhaXIuCisKKyAgNC4gVG8gc3Vic3RpdHV0ZSBuZXcgZm9yIHRoZSBmaXJzdCBvbGQgb24gYSBsaW5lIHR5cGUgICAgOnMvb2xkL25ldworICAgICBUbyBzdWJzdGl0dXRlIG5ldyBmb3IgYWxsICdvbGQncyBvbiBhIGxpbmUgdHlwZQkgICA6cy9vbGQvbmV3L2cKKyAgICAgVG8gc3Vic3RpdHV0ZSBwaHJhc2VzIGJldHdlZW4gdHdvIGxpbmUgIydzIHR5cGUJICAgOiMsI3Mvb2xkL25ldy9nCisgICAgIFRvIHN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIGluIHRoZSBmaWxlIHR5cGUJICAgOiVzL29sZC9uZXcvZworICAgICBUbyBhc2sgZm9yIGNvbmZpcm1hdGlvbiBlYWNoIHRpbWUgYWRkICdjJwkJICAgOiVzL29sZC9uZXcvZ2MKKworCit+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+fn4KKwkJTGVzc29uIDUuMTogSE9XIFRPIEVYRUNVVEUgQU4gRVhURVJOQUwgQ09NTUFORAorCisKKyAgICoqIFR5cGUgIDohCWZvbGxvd2VkIGJ5IGFuIGV4dGVybmFsIGNvbW1hbmQgdG8gZXhlY3V0ZSB0aGF0IGNvbW1hbmQuICoqCisKKyAgMS4gVHlwZSB0aGUgZmFtaWxpYXIgY29tbWFuZAk6ICB0byBzZXQgdGhlIGN1cnNvciBhdCB0aGUgYm90dG9tIG9mIHRoZQorICAgICBzY3JlZW4uICBUaGlzIGFsbG93cyB5b3UgdG8gZW50ZXIgYSBjb21tYW5kLgorCisgIDIuIE5vdyB0eXBlIHRoZSAgISAgKGV4Y2xhbWF0aW9uIHBvaW50KSBjaGFyYWN0ZXIuICBUaGlzIGFsbG93cyB5b3UgdG8KKyAgICAgZXhlY3V0ZSBhbnkgZXh0ZXJuYWwgc2hlbGwgY29tbWFuZC4KKworICAzLiBBcyBhbiBleGFtcGxlIHR5cGUgICBscyAgIGZvbGxvd2luZyB0aGUgISBhbmQgdGhlbiBoaXQgPEVOVEVSPi4gIFRoaXMKKyAgICAgd2lsbCBzaG93IHlvdSBhIGxpc3Rpbmcgb2YgeW91ciBkaXJlY3RvcnksIGp1c3QgYXMgaWYgeW91IHdlcmUgYXQgdGhlCisgICAgIHNoZWxsIHByb21wdC4gIE9yIHVzZSAgIDohZGlyICBpZiBscyBkb2Vzbid0IHdvcmsuCisKK05vdGU6ICBJdCBpcyBwb3NzaWJsZSB0byBleGVjdXRlIGFueSBleHRlcm5hbCBjb21tYW5kIHRoaXMgd2F5LgorCitOb3RlOiAgQWxsICA6ICBjb21tYW5kcyBtdXN0IGJlIGZpbmlzaGVkIGJ5IGhpdHRpbmcgPEVOVEVSPgorCisKKworCit+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+fn4KKwkJICAgICAgTGVzc29uIDUuMjogTU9SRSBPTiBXUklUSU5HIEZJTEVTCisKKworICAgICAqKiBUbyBzYXZlIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUsIHR5cGUgIDp3IEZJTEVOQU1FLiAqKgorCisgIDEuIFR5cGUgIDohZGlyICBvciAgOiFscyAgdG8gZ2V0IGEgbGlzdGluZyBvZiB5b3VyIGRpcmVjdG9yeS4KKyAgICAgWW91IGFscmVhZHkga25vdyB5b3UgbXVzdCBoaXQgPEVOVEVSPiBhZnRlciB0aGlzLgorCisgIDIuIENob29zZSBhIGZpbGVuYW1lIHRoYXQgZG9lcyBub3QgZXhpc3QgeWV0LCBzdWNoIGFzIFRFU1QuCisKKyAgMy4gTm93IHR5cGU6CSA6dyBURVNUICAgKHdoZXJlIFRFU1QgaXMgdGhlIGZpbGVuYW1lIHlvdSBjaG9zZS4pCisKKyAgNC4gVGhpcyBzYXZlcyB0aGUgd2hvbGUgZmlsZQkoVmltIFR1dG9yKSAgdW5kZXIgdGhlIG5hbWUgVEVTVC4KKyAgICAgVG8gdmVyaWZ5IHRoaXMsIHR5cGUgICAgOiFkaXIgICBhZ2FpbiB0byBzZWUgeW91ciBkaXJlY3RvcnkKKworTm90ZTogSWYgeW91IHdlcmUgdG8gZXhpdCBWaW0gYW5kIGVudGVyIGFnYWluIHdpdGggdGhlIGZpbGVuYW1lIFRFU1QsIHRoZSBmaWxlCisgICAgICB3b3VsZCBiZSBhbiBleGFjdCBjb3B5IG9mIHRoZSB0dXRvciB3aGVuIHlvdSBzYXZlZCBpdC4KKworICA1LiBOb3cgcmVtb3ZlIHRoZSBmaWxlIGJ5IHR5cGluZyAoTVMtRE9TKTogICAgOiFkZWwgVEVTVAorCQkJCW9yIChVbml4KToJOiFybSBURVNUCisKKworfn5+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+CisJCSAgICBMZXNzb24gNS4zOiBBIFNFTEVDVElWRSBXUklURSBDT01NQU5ECisKKworCSoqIFRvIHNhdmUgcGFydCBvZiB0aGUgZmlsZSwgdHlwZSAgIDojLCMgdyBGSUxFTkFNRSAqKgorCisgIDEuIE9uY2UgYWdhaW4sIHR5cGUgIDohZGlyICBvciAgOiFscyAgdG8gb2J0YWluIGEgbGlzdGluZyBvZiB5b3VyIGRpcmVjdG9yeQorICAgICBhbmQgY2hvb3NlIGEgc3VpdGFibGUgZmlsZW5hbWUgc3VjaCBhcyBURVNULgorCisgIDIuIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgdG9wIG9mIHRoaXMgcGFnZSBhbmQgdHlwZSAgQ3RybC1nICB0byBmaW5kIHRoZQorICAgICBudW1iZXIgb2YgdGhhdCBsaW5lLiAgUkVNRU1CRVIgVEhJUyBOVU1CRVIhCisKKyAgMy4gTm93IG1vdmUgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhbmQgdHlwZSAgQ3RybC1nIGFnYWluLiAgUkVNRU1CRVIgVEhJUworICAgICBMSU5FIE5VTUJFUiBBTFNPIQorCisgIDQuIFRvIHNhdmUgT05MWSBhIHNlY3Rpb24gdG8gYSBmaWxlLCB0eXBlICAgOiMsIyB3IFRFU1QgICB3aGVyZSAjLCMgYXJlCisgICAgIHRoZSB0d28gbnVtYmVycyB5b3UgcmVtZW1iZXJlZCAodG9wLGJvdHRvbSkgYW5kIFRFU1QgaXMgeW91ciBmaWxlbmFtZS4KKworICA1LiBBZ2Fpbiwgc2VlIHRoYXQgdGhlIGZpbGUgaXMgdGhlcmUgd2l0aCAgOiFkaXIgIGJ1dCBETyBOT1QgcmVtb3ZlIGl0LgorCisKKworCit+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+fn4KKwkJICAgTGVzc29uIDUuNDogUkVUUklFVklORyBBTkQgTUVSR0lORyBGSUxFUworCisKKyAgICAgICAqKiBUbyBpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSwgdHlwZSAgIDpyIEZJTEVOQU1FICoqCisKKyAgMS4gVHlwZSAgIDohZGlyICAgdG8gbWFrZSBzdXJlIHlvdXIgVEVTVCBmaWxlbmFtZSBpcyBwcmVzZW50IGZyb20gYmVmb3JlLgorCisgIDIuIFBsYWNlIHRoZSBjdXJzb3IgYXQgdGhlIHRvcCBvZiB0aGlzIHBhZ2UuCisKK05PVEU6ICBBZnRlciBleGVjdXRpbmcgU3RlcCAzIHlvdSB3aWxsIHNlZSBMZXNzb24gNS4zLglUaGVuIG1vdmUgRE9XTiB0bworICAgICAgIHRoaXMgbGVzc29uIGFnYWluLgorCisgIDMuIE5vdyByZXRyaWV2ZSB5b3VyIFRFU1QgZmlsZSB1c2luZyB0aGUgY29tbWFuZCAgIDpyIFRFU1QgICB3aGVyZSBURVNUIGlzCisgICAgIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorCitOT1RFOiAgVGhlIGZpbGUgeW91IHJldHJpZXZlIGlzIHBsYWNlZCBzdGFydGluZyB3aGVyZSB0aGUgY3Vyc29yIGlzIGxvY2F0ZWQuCisKKyAgNC4gVG8gdmVyaWZ5IHRoYXQgYSBmaWxlIHdhcyByZXRyaWV2ZWQsIGN1cnNvciBiYWNrIGFuZCBub3RpY2UgdGhhdCB0aGVyZQorICAgICBhcmUgbm93IHR3byBjb3BpZXMgb2YgTGVzc29uIDUuMywgdGhlIG9yaWdpbmFsIGFuZCB0aGUgZmlsZSB2ZXJzaW9uLgorCisKKworfn5+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+CisJCQkgICAgICAgTEVTU09OIDUgU1VNTUFSWQorCisKKyAgMS4gIDohY29tbWFuZCAgZXhlY3V0ZXMgYW4gZXh0ZXJuYWwgY29tbWFuZC4KKworICAgICAgU29tZSB1c2VmdWwgZXhhbXBsZXMgYXJlOgorCSAoTVMtRE9TKQkgIChVbml4KQorCSAgOiFkaXIJCSAgIDohbHMJCSAgIC0gIHNob3dzIGEgZGlyZWN0b3J5IGxpc3RpbmcuCisJICA6IWRlbCBGSUxFTkFNRSAgIDohcm0gRklMRU5BTUUgICAtICByZW1vdmVzIGZpbGUgRklMRU5BTUUuCisKKyAgMi4gIDp3IEZJTEVOQU1FICB3cml0ZXMgdGhlIGN1cnJlbnQgVmltIGZpbGUgdG8gZGlzayB3aXRoIG5hbWUgRklMRU5BTUUuCisKKyAgMy4gIDojLCN3IEZJTEVOQU1FICBzYXZlcyB0aGUgbGluZXMgIyB0aHJvdWdoICMgaW4gZmlsZSBGSUxFTkFNRS4KKworICA0LiAgOnIgRklMRU5BTUUgIHJldHJpZXZlcyBkaXNrIGZpbGUgRklMRU5BTUUgYW5kIGluc2VydHMgaXQgaW50byB0aGUKKyAgICAgIGN1cnJlbnQgZmlsZSBmb2xsb3dpbmcgdGhlIGN1cnNvciBwb3NpdGlvbi4KKworCisKKworCisKK35+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+fgorCQkJIExlc3NvbiA2LjE6IFRIRSBPUEVOIENPTU1BTkQKKworCisgKiogVHlwZSAgbyAgdG8gb3BlbiBhIGxpbmUgYmVsb3cgdGhlIGN1cnNvciBhbmQgcGxhY2UgeW91IGluIEluc2VydCBtb2RlLiAqKgorCisgIDEuIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbGluZSBiZWxvdyBtYXJrZWQgLS0tPi4KKworICAyLiBUeXBlICBvIChsb3dlcmNhc2UpIHRvIG9wZW4gdXAgYSBsaW5lIEJFTE9XIHRoZSBjdXJzb3IgYW5kIHBsYWNlIHlvdSBpbgorICAgICBJbnNlcnQgbW9kZS4KKworICAzLiBOb3cgY29weSB0aGUgbGluZSBtYXJrZWQgLS0tPiBhbmQgcHJlc3MgPEVTQz4gdG8gZXhpdCBJbnNlcnQgbW9kZS4KKworLS0tPiBBZnRlciB0eXBpbmcgIG8gIHRoZSBjdXJzb3IgaXMgcGxhY2VkIG9uIHRoZSBvcGVuIGxpbmUgaW4gSW5zZXJ0IG1vZGUuCisKKyAgNC4gVG8gb3BlbiB1cCBhIGxpbmUgQUJPVkUgdGhlIGN1cnNvciwgc2ltcGx5IHR5cGUgYSBjYXBpdGFsCU8gLCByYXRoZXIKKyAgICAgdGhhbiBhIGxvd2VyY2FzZSAgby4gIFRyeSB0aGlzIG9uIHRoZSBsaW5lIGJlbG93LgorT3BlbiB1cCBhIGxpbmUgYWJvdmUgdGhpcyBieSB0eXBpbmcgU2hpZnQtTyB3aGlsZSB0aGUgY3Vyc29yIGlzIG9uIHRoaXMgbGluZS4KKworCisKKworCit+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+fn4KKwkJCUxlc3NvbiA2LjI6IFRIRSBBUFBFTkQgQ09NTUFORAorCisKKwkgICAgICoqIFR5cGUgIGEgIHRvIGluc2VydCB0ZXh0IEFGVEVSIHRoZSBjdXJzb3IuICoqCisKKyAgMS4gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGxpbmUgYmVsb3cgbWFya2VkIC0tLT4gYnkKKyAgICAgdHlwaW5nICAkCWluIE5vcm1hbCBtb2RlLgorCisgIDIuIFR5cGUgYW4gIGEgIChsb3dlcmNhc2UpIHRvIGFwcGVuZCB0ZXh0IEFGVEVSIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlCisgICAgIGN1cnNvci4gIChVcHBlcmNhc2UgIEEgIGFwcGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4pCisKK05vdGU6IFRoaXMgYXZvaWRzIHR5cGluZyAgaSAsIHRoZSBsYXN0IGNoYXJhY3RlciwgdGhlIHRleHQgdG8gaW5zZXJ0LCA8RVNDPiwKKyAgICAgIGN1cnNvci1yaWdodCwgYW5kIGZpbmFsbHksIHggLCBqdXN0IHRvIGFwcGVuZCB0byB0aGUgZW5kIG9mIGEgbGluZSEKKworICAzLiBOb3cgY29tcGxldGUgdGhlIGZpcnN0IGxpbmUuICBOb3RlIGFsc28gdGhhdCBhcHBlbmQgaXMgZXhhY3RseSB0aGUgc2FtZQorICAgICBhcyBJbnNlcnQgbW9kZSwgZXhjZXB0IGZvciB0aGUgbG9jYXRpb24gd2hlcmUgdGV4dCBpcyBpbnNlcnRlZC4KKworLS0tPiBUaGlzIGxpbmUgd2lsbCBhbGxvdyB5b3UgdG8gcHJhY3RpY2UKKy0tLT4gVGhpcyBsaW5lIHdpbGwgYWxsb3cgeW91IHRvIHByYWN0aWNlIGFwcGVuZGluZyB0ZXh0IHRvIHRoZSBlbmQgb2YgYSBsaW5lLgorCisKKworfn5+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+CisJCSAgICBMZXNzb24gNi4zOiBBTk9USEVSIFZFUlNJT04gT0YgUkVQTEFDRQorCisKKyAgICAgICoqIFR5cGUgYSBjYXBpdGFsICBSICB0byByZXBsYWNlIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyLiAqKgorCisgIDEuIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgbGluZSBiZWxvdyBtYXJrZWQgLS0tPi4KKworICAyLiBQbGFjZSB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHdvcmQgdGhhdCBpcyBkaWZmZXJlbnQKKyAgICAgZnJvbSB0aGUgc2Vjb25kIGxpbmUgbWFya2VkIC0tLT4gKHRoZSB3b3JkICdsYXN0JykuCisKKyAgMy4gTm93IHR5cGUgIFIgIGFuZCByZXBsYWNlIHRoZSByZW1haW5kZXIgb2YgdGhlIHRleHQgb24gdGhlIGZpcnN0IGxpbmUgYnkKKyAgICAgdHlwaW5nIG92ZXIgdGhlIG9sZCB0ZXh0IHRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZC4KKworLS0tPiBUbyBtYWtlIHRoZSBmaXJzdCBsaW5lIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG9uIHRoaXMgcGFnZSB1c2UgdGhlIGtleXMuCistLS0+IFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCwgdHlwZSBSIGFuZCB0aGUgbmV3IHRleHQuCisKKyAgNC4gTm90ZSB0aGF0IHdoZW4geW91IHByZXNzIDxFU0M+IHRvIGV4aXQsIGFueSB1bmFsdGVyZWQgdGV4dCByZW1haW5zLgorCisKKworCisKK35+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+fgorCQkJICAgIExlc3NvbiA2LjQ6IFNFVCBPUFRJT04KKworCSAgKiogU2V0IGFuIG9wdGlvbiBzbyBhIHNlYXJjaCBvciBzdWJzdGl0dXRlIGlnbm9yZXMgY2FzZSAqKgorCisgIDEuIFNlYXJjaCBmb3IgJ2lnbm9yZScgYnkgZW50ZXJpbmc6CisgICAgIC9pZ25vcmUKKyAgICAgUmVwZWF0IHNldmVyYWwgdGltZXMgYnkgaGl0dGluZyB0aGUgbiBrZXkKKworICAyLiBTZXQgdGhlICdpYycgKElnbm9yZSBjYXNlKSBvcHRpb24gYnkgdHlwaW5nOgorICAgICA6c2V0IGljCisKKyAgMy4gTm93IHNlYXJjaCBmb3IgJ2lnbm9yZScgYWdhaW4gYnkgZW50ZXJpbmc6IG4KKyAgICAgUmVwZWF0IHNlYXJjaCBzZXZlcmFsIG1vcmUgdGltZXMgYnkgaGl0dGluZyB0aGUgbiBrZXkKKworICA0LiBTZXQgdGhlICdobHNlYXJjaCcgYW5kICdpbmNzZWFyY2gnIG9wdGlvbnM6CisgICAgIDpzZXQgaGxzIGlzCisKKyAgNS4gTm93IGVudGVyIHRoZSBzZWFyY2ggY29tbWFuZCBhZ2FpbiwgYW5kIHNlZSB3aGF0IGhhcHBlbnM6CisgICAgIC9pZ25vcmUKKworICA2LiBUbyByZW1vdmUgdGhlIGhpZ2hsaWdodGluZyBvZiBtYXRjaGVzLCB0eXBlOgorICAgICA6bm9obHNlYXJjaAorfn5+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+CisJCQkgICAgICAgTEVTU09OIDYgU1VNTUFSWQorCisKKyAgMS4gVHlwaW5nICBvCW9wZW5zIGEgbGluZSBCRUxPVyB0aGUgY3Vyc29yIGFuZCBwbGFjZXMgdGhlIGN1cnNvciBvbiB0aGUgb3BlbgorICAgICBsaW5lIGluIEluc2VydCBtb2RlLgorICAgICBUeXBpbmcgYSBjYXBpdGFsICBPICBvcGVucyB0aGUgbGluZSBBQk9WRSB0aGUgbGluZSB0aGUgY3Vyc29yIGlzIG9uLgorCisgIDIuIFR5cGUgYW4gIGEgIHRvIGluc2VydCB0ZXh0IEFGVEVSIHRoZSBjaGFyYWN0ZXIgdGhlIGN1cnNvciBpcyBvbi4KKyAgICAgVHlwaW5nIGEgY2FwaXRhbCAgQSAgYXV0b21hdGljYWxseSBhcHBlbmRzIHRleHQgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKworICAzLiBUeXBpbmcgYSBjYXBpdGFsICBSICBlbnRlcnMgUmVwbGFjZSBtb2RlIHVudGlsICA8RVNDPiAgaXMgcHJlc3NlZCB0byBleGl0LgorCisgIDQuIFR5cGluZyAiOnNldCB4eHgiIHNldHMgdGhlIG9wdGlvbiAieHh4IgorCisKKworCisKKworCisKKworfn5+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+CisJCSAgICAgICBMRVNTT04gNzogT04tTElORSBIRUxQIENPTU1BTkRTCisKKworCQkgICAgICAqKiBVc2UgdGhlIG9uLWxpbmUgaGVscCBzeXN0ZW0gKioKKworICBWaW0gaGFzIGEgY29tcHJlaGVuc2l2ZSBvbi1saW5lIGhlbHAgc3lzdGVtLiAgVG8gZ2V0IHN0YXJ0ZWQsIHRyeSBvbmUgb2YKKyAgdGhlc2UgdGhyZWU6CisJLSBwcmVzcyB0aGUgPEhFTFA+IGtleSAoaWYgeW91IGhhdmUgb25lKQorCS0gcHJlc3MgdGhlIDxGMT4ga2V5IChpZiB5b3UgaGF2ZSBvbmUpCisJLSB0eXBlICAgOmhlbHAgPEVOVEVSPgorCisgIFR5cGUgICA6cSA8RU5URVI+ICAgdG8gY2xvc2UgdGhlIGhlbHAgd2luZG93LgorCisgIFlvdSBjYW4gZmluZCBoZWxwIG9uIGp1c3QgYWJvdXQgYW55IHN1YmplY3QsIGJ5IGdpdmluZyBhbiBhcmd1bWVudCB0byB0aGUKKyAgIjpoZWxwIiBjb21tYW5kLiAgVHJ5IHRoZXNlIChkb24ndCBmb3JnZXQgcHJlc3NpbmcgPEVOVEVSPik6CisKKwk6aGVscCB3CisJOmhlbHAgY188VAorCTpoZWxwIGluc2VydC1pbmRleAorCTpoZWxwIHVzZXItbWFudWFsCisKKworfn5+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+CisJCSAgICAgICBMRVNTT04gODogQ1JFQVRFIEEgU1RBUlRVUCBTQ1JJUFQKKworCQkJICAqKiBTd2l0Y2ggb24gVmltIGZlYXR1cmVzICoqCisKKyAgVmltIGhhcyBtYW55IG1vcmUgZmVhdHVyZXMgdGhhbiBWaSwgYnV0IG1vc3Qgb2YgdGhlbSBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgVG8gc3RhcnQgdXNpbmcgbW9yZSBmZWF0dXJlcyB5b3UgaGF2ZSB0byBjcmVhdGUgYSAidmltcmMiIGZpbGUuCisKKyAgMS4gU3RhcnQgZWRpdGluZyB0aGUgInZpbXJjIiBmaWxlLCB0aGlzIGRlcGVuZHMgb24geW91ciBzeXN0ZW06CisJOmVkaXQgfi8udmltcmMJCQlmb3IgVW5peAorCTplZGl0ICRWSU0vX3ZpbXJjCQlmb3IgTVMtV2luZG93cworCisgIDIuIE5vdyByZWFkIHRoZSBleGFtcGxlICJ2aW1yYyIgZmlsZSB0ZXh0OgorCisJOnJlYWQgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0KKworICAzLiBXcml0ZSB0aGUgZmlsZSB3aXRoOgorCisJOndyaXRlCisKKyAgVGhlIG5leHQgdGltZSB5b3Ugc3RhcnQgVmltIGl0IHdpbGwgdXNlIHN5bnRheCBoaWdobGlnaHRpbmcuCisgIFlvdSBjYW4gYWRkIGFsbCB5b3VyIHByZWZlcnJlZCBzZXR0aW5ncyB0byB0aGlzICJ2aW1yYyIgZmlsZS4KKworfn5+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+CisKKyAgVGhpcyBjb25jbHVkZXMgdGhlIFZpbSBUdXRvci4gIEl0IHdhcyBpbnRlbmRlZCB0byBnaXZlIGEgYnJpZWYgb3ZlcnZpZXcgb2YKKyAgdGhlIFZpbSBlZGl0b3IsIGp1c3QgZW5vdWdoIHRvIGFsbG93IHlvdSB0byB1c2UgdGhlIGVkaXRvciBmYWlybHkgZWFzaWx5LgorICBJdCBpcyBmYXIgZnJvbSBjb21wbGV0ZSBhcyBWaW0gaGFzIG1hbnkgbWFueSBtb3JlIGNvbW1hbmRzLiAgUmVhZCB0aGUgdXNlcgorICBtYW51YWwgbmV4dDogIjpoZWxwIHVzZXItbWFudWFsIi4KKworICBGb3IgZnVydGhlciByZWFkaW5nIGFuZCBzdHVkeWluZywgdGhpcyBib29rIGlzIHJlY29tbWVuZGVkOgorCVZpbSAtIFZpIEltcHJvdmVkIC0gYnkgU3RldmUgT3VhbGxpbmUKKwlQdWJsaXNoZXI6IE5ldyBSaWRlcnMKKyAgVGhlIGZpcnN0IGJvb2sgY29tcGxldGVseSBkZWRpY2F0ZWQgdG8gVmltLiAgRXNwZWNpYWxseSB1c2VmdWwgZm9yIGJlZ2lubmVycy4KKyAgVGhlcmUgYXJlIG1hbnkgZXhhbXBsZXMgYW5kIHBpY3R1cmVzLgorICBTZWUgaHR0cDovL2ljY2YtaG9sbGFuZC5vcmcvY2xpY2s1Lmh0bWwKKworICBUaGlzIGJvb2sgaXMgb2xkZXIgYW5kIG1vcmUgYWJvdXQgVmkgdGhhbiBWaW0sIGJ1dCBhbHNvIHJlY29tbWVuZGVkOgorCUxlYXJuaW5nIHRoZSBWaSBFZGl0b3IgLSBieSBMaW5kYSBMYW1iCisJUHVibGlzaGVyOiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMgSW5jLgorICBJdCBpcyBhIGdvb2QgYm9vayB0byBnZXQgdG8ga25vdyBhbG1vc3QgYW55dGhpbmcgeW91IHdhbnQgdG8gZG8gd2l0aCBWaS4KKyAgVGhlIHNpeHRoIGVkaXRpb24gYWxzbyBpbmNsdWRlcyBpbmZvcm1hdGlvbiBvbiBWaW0uCisKKyAgVGhpcyB0dXRvcmlhbCB3YXMgd3JpdHRlbiBieSBNaWNoYWVsIEMuIFBpZXJjZSBhbmQgUm9iZXJ0IEsuIFdhcmUsCisgIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcyB1c2luZyBpZGVhcyBzdXBwbGllZCBieSBDaGFybGVzIFNtaXRoLAorICBDb2xvcmFkbyBTdGF0ZSBVbml2ZXJzaXR5LiAgRS1tYWlsOiBid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUuCisKKyAgTW9kaWZpZWQgZm9yIFZpbSBieSBCcmFtIE1vb2xlbmFhci4KKworfn5+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+CmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLmNhIGIvcnVudGltZS90dXRvci90dXRvci5jYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDNhMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci90dXRvci5jYQpAQCAtMCwwICsxLDgwNyBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICBCIGUgbiB2IGkgbiBnIHUgdCBzICAgYSBsICAgdCB1IHQgbyByICAgZCBlIGwgICBWIEkgTSAgIC0gICBWZXJzafMgMS41ICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBFbCBWaW0g6XMgdW4gZWRpdG9yIG1vbHQgcG90ZW50IHF1ZSB06SBtb2x0ZXMgb3JkcmVzLCBtYXNzZXMgY29tIHBlcgorICAgZXhwbGljYXItbGVzIHRvdGVzIHVuIHR1dG9yIGNvbSBhcXVlc3QuIEFxdWVzdCB0dXRvciBlc3TgIGRpc3NlbnlhdAorICAgcGVyIGRlc2NyaXVyZSBsZXMgb3JkcmVzIGLgc2lxdWVzIHF1ZSB1cyBwZXJtZXRpbiBmZXIgc2VydmlyIGVsIFZpbSBjb20KKyAgIGEgZWRpdG9yIGRlIHByb3Dyc2l0IGdlbmVyYWwuCisKKyAgIEVsIHRlbXBzIGFwcm94aW1hdCBkZSBzZWd1aXIgZWwgdHV0b3IgY29tcGxldCDpcyBkJ3VucyAyNSBvIDMwIG1pbnV0cworICAgZGVwZW5lbnQgZGUgcXVhbnQgdGVtcHMgZGVkaXF1ZXUgYSBleHBlcmltZW50YXIuCisKKyAgIEZldSB1bmEgY/JwaWEgZCdhcXVlc3QgZml0eGVyIHBlciBwcmFjdGljYXItaGkgKHNpIGhldSBjb21lbudhdCBhbWIgZWwKKyAgIHByb2dyYW1hIHZpbXR1dG9yIGFpePIgcXVlIGVzdGV1IGxsZWdpbnQgamEg6XMgdW5hIGPycGlhKS4KKworICAgyXMgaW1wb3J0YW50IHJlY29yZGFyIHF1ZSBhcXVlc3QgdHV0b3IgZXN04CBwZW5zYXQgcGVyIGVuc2VueWFyCisgICBwcmFjdGljYW50LiDJcyBhIGRpciwgcXVlIGhhdXJldSBkJ2V4ZWN1dGFyIGxlcyBvcmRyZXMgc2kgbGVzIHZvbGV1CisgICBhcHJlbmRyZS4gU2kgbm9t6XMgbGxlZ2l1IGVsIHRleHQgZWwgbelzIHByb2JhYmxlIOlzIHF1ZSBsZXMgb2JsaWRldS4KKworICAgQXJhIGFzc2VndXJldS12b3MgcXVlIGxhIHRlY2xhIGRlIGJsb3F1ZWlnIGRlIG1havpzY3VsZXMgbm8gZXN04AorICAgYWN0aXZhZGEgaSBwcmVtZXUgbGEgdGVjbGEgICBqICAgcGVyIG1vdXJlIGVsIGN1cnNvciBhdmFsbCwgZmlucyBxdWUKKyAgIGxhIGxsaefzIDEuMSBvY3VwaSBjb21wbGV0YW1lbnQgbGEgcGFudGFsbGEuCit+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+fn4KKwkJCSBMbGnn8yAxLjE6ICBNT1VSRSBFTCBDVVJTT1IKKworCisgICoqIFBlciBtb3VyZSBlbCBjdXJzb3IgcHJlbWV1IGxlcyB0ZWNsZXMgaCxqLGssbCB0YWwgY29tIGVzdOAgaW5kaWNhdC4gKioKKyAgICAgICBeCisgICAgICAgawlQaXN0YTogTGEgaCDpcyBhIGwnZXNxdWVycmEgaSBtb3UgZWwgY3Vyc29yIGNhcCBhIGwnZXNxdWVycmEuCisgIDwgaAkgIGwgPgkgICAgICAgTGEgbCDpcyBhIGxhIGRyZXRhIGkgbW91IGVsIGN1cnNvciBjYXAgYSBsYSBkcmV0YS4KKyAgICAgICBqCSAgICAgICBMYSBqIHNlbWJsYSB1bmEgZmxldHhhIGNhcCBhdmFsbC4KKyAgICAgICB2CisgIDEuIE1vdmV1IGVsIGN1cnNvciBwZXIgbGEgcGFudGFsbGEgZmlucyBxdWUgdXMgc2VudGl1IGNvbmZvcnRhYmxlcy4KKworICAyLiBNYW50aW5ndWV1IHByZW11ZGEgbGEgdGVjbGEgYXZhbGwgKGopIHVuYSBlc3RvbmEuCistLS0+IEFyYSBzYWJldSBjb20gbW91cmUtdXMgZmlucyBhIGxhIHBy8nhpbWEgbGxp5/MuCisKKyAgMy4gVXNhbnQgbGEgdGVjbGEgYXZhbGwsIGFuZXUgYSBsYSBsbGnn8yAxLjIuCisKK05vdGE6IFNpIG5vIGVzdGV1IHNlZ3VycyBkZSBsYSB0ZWNsYSBxdWUgaGV1IHByZW11dCwgcHJlbWV1IDxFU0M+IHBlciB0b3JuYXIKKyAgICAgIGFsIG1vZGUgTm9ybWFsLiBMbGF2b3JzIHRvcm5ldSBhIHRlY2xlamFyIGwnb3JkcmUgcXVlIHZvbO1ldS4KKworTm90YTogTGVzIHRlY2xlcyBkZSBtb3ZpbWVudCBkZWwgY3Vyc29yIChmbGV0eGVzKSB0YW1i6SBmdW5jaW9uZW4uIFBlcvIgdXNhbnQKKyAgICAgIGhqa2wgYW5pcmV1IG3pcyBy4HBpZCwgcXVhbiB1cyBoaSBo4GdpdSBhY29zdHVtYW50LgorCit+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+fn4KKwkJICAgICBMbGnn8yAxLjI6IEVOVFJBUiBJIFNPUlRJUiBERUwgVklNCisKKworICAhISBOT1RBOiBBYmFucyBkZSBzZWd1aXIgZWxzIHBhc3NvcyBzZWf8ZW50cyBsbGVnaXUgKnRvdGEqIGxhIGxsaefzISEKKworICAxLiBQcmVtZXUgPEVTQz4gKHBlciBlc3RhciBzZWd1cnMgcXVlIGVzdGV1IGVuIGVsIG1vZGUgTm9ybWFsKS4KKworICAyLiBUZWNsZWdldToJCQk6cSEgPEVOVFJBUj4uCisKKy0tLT4gQW1iIGFpePIgc29ydGlyZXUgZGUgbCdlZGl0b3IgU0VOU0UgZGVzYXIgZWxzIGNhbnZpcyBxdWUgaOBnaXUgcG9ndXQKKyAgICAgZmVyLiBTaSB2b2xldSBkZXNhciBlbHMgY2FudmlzIHRlY2xlZ2V1OgorCQkJCTp3cSAgPEVOVFJBUj4KKworICAzLiBRdWFuIHZlZ2V1IGwnaW50cm9kdWN0b3IgZGUgbGEgc2hlbGwgZXNjcml2aXUgbCdvcmRyZSBhbWIgbGEgcXVhbCBoZXUKKyAgICAgYXJyaWJhdCBhIGFxdWVzdCB0dXRvci4gUG9kcmlhIHNlcjogICB2aW10dXRvciA8RU5UUkFSPgorCQkJICAgICBPIGLpOgkgICB2aW0gdHV0b3IgPEVOVFJBUj4KKworLS0tPiAndmltJyDpcyBsJ2VkaXRvciB2aW0sIGkgJ3R1dG9yJyDpcyBlbCBmaXR4ZXIgcXVlIHZvbGV1IGVkaXRhci4KKworICA0LiBTaSBoZXUgbWVtb3JpdHphdCBsZXMgb3JkcmVzLCBmZXUgZWxzIHBhc3NvcyBhbnRlcmlvcnMsIGRlIGwnMSBhbCAzLAorICAgICBwZXIgc29ydGlyIGkgdG9ybmFyIGEgZW50cmFyIGEgbCdlZGl0b3IuIExsYXZvcnMgbW92ZXUgZWwgY3Vyc29yIGF2YWxsCisgICAgIGZpbnMgbGEgbGxp5/MgMS4zLgorfn5+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+CisJCSAgICAgIExsaefzIDEuMzogRURJVEFSIFRFWFQgLSBFU0JPUlJBUgorCisKKyAgKiogRW4gbW9kZSBOb3JtYWwgcHJlbWV1ICB4ICBwZXIgZXNib3JyYXIgZWwgY2Fy4GN0ZXIgZGUgc290YSBlbCBjdXJzb3IuICoqCisKKyAgMS4gTW92ZXUgZWwgY3Vyc29yIGZpbnMgbGEgbO1uaWEgcXVlIGhpIGhhIG3pcyBhdmFsbCBtYXJjYWRhIGFtYiAtLS0+LgorCisgIDIuIFBvc2V1IGVsIGN1cnNvciBhIHNvYnJlIGVsIGNhcuBjdGVyIHF1ZSBjYWwgZXNib3JyYXIsIHBlciBjb3JyZWdpciBlbHMKKyAgICAgZXJyb3JzLgorCisgIDMuIFByZW1ldSBsYSB0ZWNsYSAgIHggICBwZXIgZXNib3JyYXIgZWwgY2Fy4GN0ZXIuCisKKyAgNC4gUmVwZXRpdSBlbHMgcGFzc29zIDIgaSAzIGZpbnMgcXVlIGxhIGZyYXNlIHNpZ3VpIGNvcnJlY3RhLgorCistLS0+IFVubmEgdmFhY2EgdnZhIHNhbHR0YXIgc29iYnJlZSBsYSBsbGx1bmEuCisKKyAgNS4gQXJhIHF1ZSBsYSBs7W5pYSDpcyBjb3JyZWN0YSwgYW5ldSBhIGxhIGxsaefzIDEuNC4KKworTk9UQTogTWVudHJlIGFuZXUgZmVudCBubyB0cmFjdGV1IGRlIG1lbW9yaXR6YXIsIHByYWN0aXF1ZXUgaSBwcm91LgorCisKKworfn5+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+CisJCSAgICAgTGxp5/MgMS40OiBFRElUQVIgVEVYVCAtIElOU0VSSVIKKworCisJICAgICoqIEVuIG1vZGUgTm9ybWFsIHByZW1ldSAgIGkgICBwZXIgaW5zZXJpciB0ZXh0LiAqKgorCisgIDEuIE1vdmV1IGVsIGN1cnNvciBhdmFsbCBmaW5zIGxhIHByaW1lcmEgbO1uaWEgbWFyY2FkYSBhbWIgLS0tPi4KKworICAyLiBQZXIgZmVyIGxhIHByaW1lcmEgbO1uaWEgaWd1YWwgcXVlIGxhIHNlZ29uYSBwb3NldSBlbCBjdXJzb3Igc29icmUgZWwKKyAgICAgcHJpbWVyIGNhcuBjdGVyIFBPU1RFUklPUiBhbCB0ZXh0IHF1ZSBzJ2hhIGQnaW5zZXJpci4KKworICAzLiBQcmVtZXUgbGEgdGVjbGEgIGkgIGkgZXNjcml2aXUgZWwgdGV4dCBxdWUgZmFsdGEuCisKKyAgNC4gUXVhbiBo4GdpdSBhY2FiYXQgcHJlbWV1IDxFU0M+IHBlciB0b3JuYXIgYWwgbW9kZSBOb3JtYWwuIFJlcGV0aXUKKyAgICAgZWxzIHBhc3NvcyAyLCAzIGkgNCBwZXIgY29ycmVnaXIgbGEgZnJhc2UuCisKKy0tLT4gRmFsdGVuIGNhcmN0cnMgZW4gYXF1ZXN0YSAuCistLS0+IEZhbHRlbiBhbGd1bnMgY2Fy4GN0ZXJzIGVuIGFxdWVzdGEgbO1uaWEuCisKKyAgNS4gUXVhbiB1cyB0cm9iZXUgY/Jtb2RlcyBpbnNlcmludCB0ZXh0IGFuZXUgYWwgc3VtYXJpIGRlIGJhaXguCisKKworCit+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+fn4KKwkJCSAgICAgTExJx9MgMSBTVU1BUkkKKworCisgIDEuIEVsIGN1cnNvciBlcyBtb3UgYW1iIGxlcyBmbGV0eGVzIG8gYukgYW1iIGxlcyB0ZWNsZXMgaGprbC4KKwkgaCAoZXNxdWVycmEpCWogKGF2YWxsKSAgICAgICBrIChhbXVudCkgICAgbCAoZHJldGEpCisKKyAgMi4gUGVyIGVudHJhciBhbCBWaW0gKGRlcyBkZSBsYSBzaGVsbCkgZXNjcml2aXU6ICB2aW0gRklUWEVSIDxFTlRSQVI+CisKKyAgMy4gUGVyIHNvcnRpciB0ZWNsZWdldTogICA8RVNDPiAgIDpxIQkgPEVOVFJBUj4gIHBlciBkZXNjYXJ0YXIgZWxzIGNhbnZpcy4KKwkgICBPIELJIHRlY2xlZ2V1OiAgIDxFU0M+ICAgOndxCSA8RU5UUkFSPiAgcGVyIGRlc2FyIGVscyBjYW52aXMuCisKKyAgNC4gUGVyIGVzYm9ycmFyIGVsIGNhcuBjdGVyIGRlIHNvdGEgZWwgY3Vyc29yIGVuIGVsIG1vZGUgTm9ybWFsIHByZW1ldTogIHgKKworICA1LiBQZXIgaW5zZXJpciB0ZXh0IG9uIGhpIGhhIGVsIGN1cnNvciwgZW4gbW9kZSBOb3JtYWwsIHByZW1ldToKKwkgaSAgICAgZXNjcml2aXUgZWwgdGV4dCAgICA8RVNDPgorCitOT1RBOiBMYSB0ZWNsYSA8RVNDPiB1cyBwb3J0YXLgIGFsIG1vZGUgTm9ybWFsIG8gY2FuY2Vst2xhcuAgdW5hIG9yZHJlCisgICAgICBxdWUgZXN0aWd1aSBhIG1pdGdlcy4KKworQXJhIGNvbnRpbnVldSBhbWIgbGEgbGxp5/MgMi4KKworCit+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+fn4KKwkJICAgICBMbGnn8yAyLjE6IE9SRFJFUyBQRVIgRVNCT1JSQVIKKworCisgICAgICAgKiogVGVjbGVnZXUgIGR3ICBwZXIgZXNib3JyYXIgZmlucyBhbCBmaW5hbCBkJ3VuYSBwYXJhdWxhLiAqKgorCisgIDEuIFByZW1ldSAgPEVTQz4gIHBlciBlc3RhciBzZWd1cnMgcXVlIGVzdGV1IGVuIG1vZGUgbm9ybWFsLgorCisgIDIuIE1vdmV1IGVsIGN1cnNvciBhdmFsbCBmaW5zIGxhIGztbmlhIG1hcmNhZGEgYW1iIC0tLT4uCisKKyAgMy4gTW92ZXUgZWwgY3Vyc29yIGZpbnMgZWwgcHJpbmNpcGkgZGUgbGEgcGFyYXVsYSBxdWUgcydoYSBkJ2VzYm9ycmFyLgorCisgIDQuIFRlY2xlZ2V1ICAgZHcgIHBlciBmZXIgZGVzYXBhcuhpeGVyIGxhIHBhcmF1bGEuCisKK05PVEE6IExlcyBsbGV0cmVzIGR3IGFwYXJlaXhlcmFuIGEgbGEgbO1uaWEgZGUgYmFpeCBkZSBsYSBwYW50YWxsYSBtZW50cmUKKyAgICAgIGxlcyBhbmV1IGVzY3JpdmludC4gU2kgdXMgZXF1aXZvcXVldSBwcmVtZXUgPEVTQz4gaSB0b3JuZXUgYSBjb21lbudhci4KKworLS0tPiBIaSBoYW4gYWxndW5lcyBwYXJhdWxlcyBkaXZlcnRpdCBxdWUgbm8gcGVydGFueWVuIHBhcGVyIGEgYXF1ZXN0YSBmcmFzZS4KKworICA1LiBSZXBldGl1IGVsIHBhc3NvcyAzIGkgNCBmaW5zIHF1ZSBsYSBmcmFzZSBzaWd1aSBjb3JyZWN0YSBpIGNvbnRpbnVldSBhCisgICAgIGxhIGxsaefzIDIuMi4KKworCit+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+fn4KKwkJICAgIExsaefzIDIuMjogTclTIE9SRFJFUyBQRVIgRVNCT1JSQVIKKworCisJKiogRXNjcml2aXUgIGQkICBwZXIgZXNib3JyYXIgZmlucyBhbCBmaW5hbCBkZSBsYSBs7W5pYS4gKioKKworICAxLiBQcmVtZXUgIDxFU0M+ICBwZXIgZXN0YXIgc2VndXJzIHF1ZSBlc3RldSBlbiBlbCBtb2RlIE5vcm1hbC4KKworICAyLiBNb3ZldSBlbCBjdXJzb3IgYXZhbGwgZmlucyBhIGxhIGztbmlhIG1hcmNhZGEgYW1iIC0tLT4uCisKKyAgMy4gTW92ZXUgZWwgY3Vyc29yIGZpbnMgZWwgZmluYWwgZGUgbGEgbO1uaWEgY29ycmVjdGEKKyAgICAgKERFU1BSyVMgZGVsIHByaW1lciAuICkuCisKKyAgNC4gVGVjbGVnZXUgICBkJCAgIHBlciBlc2JvcnJhciBmaW5zIGFsIGZpbmFsIGRlIGxhIGztbmlhLgorCistLS0+IEFsZ/ogaGEgZXNjcml0IGVsIGZpbmFsIGQnYXF1ZXN0YSBs7W5pYSBkb3MgY29wcy4gbO1uaWEgZG9zIGNvcHMuCisKKyAgNS4gQW5ldSBhIGxhIGxsaefzIDIuMyBwZXIgZW50ZW5kcmUgcXXoIGVzdOAgcGFzc2FudC4KKworCisKKworCit+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+fn4KKwkJICAgICBMbGnn8yAyLjM6IFNPQlJFIE9SRFJFUyBJIE9CSkVDVEVTCisKKworICBFbCBmb3JtYXQgZGUgbCdvcmRyZSBkJ2VzYm9ycmFyICBkICDpcyBlbCBzZWf8ZW50OgorCisJIFtub21icmVdICAgZAlvYmplY3RlCSAgICBPIELJICAgICBkCSBbbm9tYnJlXSAgIG9iamVjdGUKKyAgT246CisgICAgbm9tYnJlICAtIOlzIGVsIG5vbWJyZSBkZSBjb3BzIHF1ZSBzJ2hhIGQnZXhlY3V0YXIgKG9wY2lvbmFsLCBvbWlzc2nzPTEpLgorICAgIGQgICAgICAgLSDpcyBsJ29yZHJlIHBlciBlc2JvcnJhci4KKyAgICBvYmplY3RlIC0g6XMgbGEgY29zYSBhbWIgbGEgcXVhbCBvcGVyYXIgKGxsaXN0YSBhIGJhaXgpLgorCisgIFVuYSBwZXRpdGEgbGxpc3RhIGQnb2JqZWN0ZXM6CisgICAgdyAtIGRlcyBkZWwgY3Vyc29yIGZpbnMgYWwgZmluYWwgZGUgbGEgcGFyYXVsYSwgaW5jbG9lbnQtaGkgbCdlc3BhaS4KKyAgICBlIC0gZGVzIGRlbCBjdXJzb3IgZmlucyBhbCBmaW5hbCBkZSBsYSBwYXJhdWxhLCBTRU5TRSBpbmNsb3VyZSBsJ2VzcGFpLgorICAgICQgLSBkZXMgZGVsIGN1cnNvciBmaW5zIGFsIGZpbmFsIGRlIGxhIGztbmlhLgorCitOT1RBOiAgUGVyIGFscyBhdmVudHVyZXJzOiBzaSB0ZWNsZWdldSBub23pcyBsJ29iamVjdGUsIGVuIGVsIG1vZGUgTm9ybWFsLAorICAgICAgIHNlbnNlIGNhcCBvcmRyZSwgZWwgY3Vyc29yIGVzIG1vdXLgIHRhbCBjb20gZXN04CBlc3BlY2lmaWNhdCBhIGxhCisgICAgICAgbGxpc3RhIGQnb2JqZWN0ZXMuCisKKworCit+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+fn4KKwkJICBMbGnn8yAyLjQ6IFVOQSBFWENFUENJ0yBBICdPUkRSRS1PQkpFQ1RFJworCisKKwkgICAgICAgKiogVGVjbGVnZXUgICBkZCAgIGVzYm9ycmFyIHRvdGEgbGEgbO1uaWEuICoqCisKKyAgQ29tIHF1ZSBtb2x0IHNvdmludCBzJ2hhbiBkJ2VsaW1pbmFyIGztbmllcyBzZW5jZXJlcyBlbHMgZGlzc2VueWFkb3JzIGRlbAorICBWaSB2YW4gY3JldXJlIHF1ZSBzZXJpYSBt6XMgZuBjaWwgdGVjbGVqYXIgZGQgcGVyIGVzYm9ycmFyIHRvdGEgbGEgbO1uaWEuCisKKyAgMS4gTW92ZXUgZWwgY3Vyc29yIGEgbGEgc2Vnb25hIGztbmlhIGRlIGxhIGZyYXNlIGRlIGJhaXguCisgIDIuIFRlY2xlZ2V1ICBkZCAgcGVyIGVzYm9ycmFyIGxhIGztbmlhLgorICAzLiBBcmEgYW5ldSBhIGxhIHF1YXJ0YSBs7W5pYS4KKyAgNC4gVGVjbGVnZXUgIDJkZCAgcGVyIGVzYm9ycmFyIGR1ZXMgbO1uaWVzIChyZWNvcmRldSBub21icmUtb3JkcmUtb2JqZWN0ZSkuCisKKyAgICAgIDEpICBMZXMgcm9zZXMgc/NuIHZlcm1lbGxlcywKKyAgICAgIDIpICBFbCBmYW5nIOlzIGRpdmVydGl0LAorICAgICAgMykgIExlcyB2aW9sZXRlcyBz824gYmxhdmVzLAorICAgICAgNCkgIFRpbmMgdW4gY290eGUsCisgICAgICA1KSAgRWxzIHJlbGxvdGdlcyBkaXVlbiBsJ2hvcmEsCisgICAgICA2KSAgRWwgc3VjcmUg6XMgZG9s5ywKKyAgICAgIDcpICBJZ3VhbCBxdWUgdHUuCisKKworfn5+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+CisJCQkgIExsaefzIDIuNTogTCdPUkRSRSBERVNGRVIKKworCisgKiogUHJlbWV1ICB1ICBwZXIgZGVzZmVyIGVscyD6bHRpbXMgY2FudmlzLCAgVSAgcGVyIGFycmVnbGFyIHRvdGEgbGEgbO1uaWEuICoqCisKKyAgMS4gTW92ZXUgZWwgY3Vyc29yIHNvYnJlIGVsIHByaW1lciBlcnJvciBkZSBs7W5pYSBkZSBiYWl4IG1hcmNhZGEgYW1iIC0tLT4KKyAgMi4gUHJlbWV1ICB4ICBwZXIgZXNib3JyYXIgZWwgY2Fy4GN0ZXIgbm8gZGVzaXRqYXQuCisgIDMuIEFyYSBwcmVtZXUgIHUgIHBlciBkZXNmZXIgbCf6bHRpbWEgb3JkcmUgZXhlY3V0YWRhLgorICA0LiBBcXVlc3QgY29wIGNvcnJlZ2l1IHRvdHMgZWxzIGVycm9ycyBkZSBsYSBs7W5pYSBhbWIgbCdvcmRyZSAgeC4KKyAgNS4gQXJhIHByZW1ldSAgVSAgcGVyIHJlc3RhYmxpciBsYSBs7W5pYSBhbCBzZXUgZXN0YXQgb3JpZ2luYWwuCisgIDYuIEFyYSBwcmVtZXUgIHUgIHVucyBxdWFudHMgY29wcyBwZXIgZGVzZmVyICBVICBpIGxlcyBvcmRyZXMgYW50ZXJpb3JzLgorICA3LiBBcmEgcHJlbWV1ICBDT05UUk9MLVIgIChsZXMgZHVlcyB0ZWNsZXMgYWwgbWF0ZWl4IHRlbXBzKSB1bnMgcXVhbnRzIGNvcHMKKyAgICAgcGVyIHJlZmVyIGxlcyBvcmRyZXMuCisKKy0tLT4gQ29ycmVlZ2l1IGVscyBlcnJvcnMgZCdhcXF1ZXN0YSBs7W5pYSBpIGRlc3NmZXUtbG9zIGFhbWIgZGVzZmVyLgorCisgIDguIEFxdWVzdGVzIG9yZHJlcyBz824gbW9sdCD6dGlscy4gQXJhIGFuZXUgYWwgc3VtYXJpIGRlIGxhIGxsaefzIDIuCisKKworCisKK35+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+fgorCQkJICAgICAgIExMScfTIDIgU1VNQVJJCisKKworICAxLiBQZXIgZXNib3JyYXIgZGVsIGN1cnNvciBhbCBmaW5hbCBkZSBsYSBwYXJhdWxhIHRlY2xlZ2V1OiAgICAgZHcKKworICAyLiBQZXIgZXNib3JyYXIgZGVsIGN1cnNvciBhbCBmaW5hbCBkZSBsYSBs7W5pYSB0ZWNsZWdldTogICAgICAgZCQKKworICAzLiBQZXIgZXNib3JyYXIgdW5hIGztbmlhIHNlbmNlcmEgdGVjbGVnZXU6ICAgICBkZAorCisgIDQuIEVsIGZvcm1hdCBkZSBxdWFsc2V2b2wgb3JkcmUgZGVsIG1vZGUgTm9ybWFsIOlzOgorCisgICAgICAgW25vbWJyZV0gICBvcmRyZSAgIG9iamVjdGUgICAgIE8gQskgICAgIG9yZHJlCVtub21icmVdICAgb2JqZWN0ZQorICAgICBvbjoKKyAgICAgICBub21icmUgIC0g6XMgcXVhbnRzIGNvcHMgcmVwZXRpciBsJ29yZHJlCisgICAgICAgb3JkcmUgICAtIOlzIHF16CBmZXIsIGNvbSBhcmEgIGQgIHBlciBlc2JvcnJhcgorICAgICAgIG9iamVjdGUgLSDpcyBhbWIgcXXoIHMnaGEgZCdhY3R1YXIsIGNvbSBhcmEgIHcgIChwYXJhdWxhKSwKKwkJICQgKGZpbnMgYSBmaW5hbCBkZSBs7W5pYSksIGV0Yy4KKworICA1LiBQZXIgZGVzZmVyIGxlcyBhY2Npb25zIGFudGVyaW9ycyBwcmVtZXU6CQl1CisgICAgIFBlciBkZXNmZXIgdG90cyBlbCBjYW52aXMgZW4gdW5hIGztbmlhIHByZW1ldToJVQorICAgICBQZXIgZGVzZmVyIGwnb3JkcmUgZGVzZmVyIHByZW1ldToJCQlDVFJMLVIKKworfn5+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+CisJCQlMbGnn8yAzLjE6IEwnT1JEUkUgJ1BPU0FSJworCisKKyAqKiBQcmVtZXUgIHAgIHBlciBwb3NhciBsJ/psdGltYSBjb3NhIHF1ZSBoZXUgZXNib3JyYXQgZGVzcHLpcyBkZWwgY3Vyc29yLiAqKgorCisKKyAgMS4gTW92ZXUgZWwgY3Vyc29yIGEgbGEgcHJpbWVyYSBs7W5pYSBkZSBsbGlzdGEgZGUgYmFpeC4KKworICAyLiBUZWNsZWdldSAgZGQgIHBlciBlc2JvcnJhciBsYSBs7W5pYSBpIGRlc2FyLWxhIGEgbGEgbWVt8nJpYS4KKworICAzLiBNb3ZldSBlbCBjdXJzb3IgYSBsYSBs7W5pYSBBTlRFUklPUiBvbiBoYXVyaWEgZCdhbmFyLgorCisgIDQuIEVuIG1vZGUgTm9ybWFsLCBwcmVtZXUgIHAgIHBlciBpbnNlcmlyIGxhIGztbmlhLgorCisgIDUuIFJlcGV0aXUgZWxzIHBhc3NvcyAyLCAzIGkgNCBwZXIgb3JkZW5hciBsZXMgbO1uaWVzIGNvcnJlY3RhbWVudC4KKworICAgICBkKSBQb3RzIGFwcmVuZHJlIHR1PworICAgICBiKSBMZXMgdmlvbGV0ZXMgc/NuIGJsYXZlcywKKyAgICAgYykgTCdpbnRlbLdsaWfobmNpYSBzJ2FwcuhuLAorICAgICBhKSBMZXMgcm9zZXMgc/NuIHZlcm1lbGxlcywKKworCit+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+fn4KKwkJICAgICAgIExsaefzIDMuMjogTCdPUkRSRSBTVUJTVElUVUlSCisKKworICoqIFByZW1ldSAgciAgaSB1biBjYXLgY3RlciBwZXIgc3Vic3RpdHVpciBlbCBjYXLgY3RlciBkZSBzb3RhIGVsIGN1cnNvci4gKioKKworICAxLiBNb3ZldSBlbCBjdXJzb3IgYSBsYSBwcmltZXJhIGztbmlhIGRlIHNvdGEgbWFyY2FkYSBhbWIgLS0tPi4KKworICAyLiBNb3ZldSBlbCBjdXJzb3IgYSBzb2JyZSBkZWwgcHJpbWVyIGNhcuBjdGVyIGVxdWl2b2NhdC4KKworICAzLiBQcmVtZXUgIHIgIGkgdG90IHNlZ3VpdCBlbCBjYXLgY3RlciBjb3JyZWN0ZSBwZXIgY29ycmVnaXIgbCdlcnJvci4KKworICA0LiBSZXBldGl1IGVscyBwYXNzb3MgMiBpIDMgZmlucyBxdWUgbGEgbO1uaWEgc2lndWkgY29ycmVjdGEuCisKKy0tLT4gIFF1ZW4gdmFuIGVzY3JvdXJlIGFxdWVydGEgbO1uaWEsIGFsZ2ggdmEgYXByZXRhciB0aWtsZXMgZXF1aXZvY2FkZXMhCistLS0+ICBRdWFuIHZhbiBlc2NyaXVyZSBhcXVlc3RhIGztbmlhLCBhbGf6IHZhIGFwcmV0YXIgdGVjbGVzIGVxdWl2b2NhZGVzIQorCisgIDUuIEFyYSBjb250aW51ZXUgYSBsYSBsbGnn8yAzLjIuCisKK05PVEE6IFJlY29yZGV1IHF1ZSBoZXUgZGUgcHJhY3RpY2FyLCBubyBtZW1vcml0emFyLgorCisKKworfn5+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+CisJCQkgTGxp5/MgMy4zOiBMJ09SRFJFIENBTlZJQVIKKworCisJKiogUGVyIGNhbnZpYXIgdW5hIHBhcnQgbyB0b3RhIGxhIHBhcmF1bGEsIGVzY3Jpdml1ICBjdyAuICoqCisKKyAgMS4gTW92ZXUgZWwgY3Vyc29yIGEgbGEgcHJpbWVyYSBs7W5pYSBkZSBzb3RhIG1hcmNhZGEgYW1iIC0tLT4uCisKKyAgMi4gUG9zZXUgZWwgY3Vyc29yIHNvYnJlIGxhIHUgZGUgJ2x1Z2hjJy4KKworICAzLiBUZWNsZWdldSAgY3cgIGkgY29ycmVnaXUgbGEgcGFyYXVsYSAoZW4gYXF1ZXN0IGNhcyBlc2NyaXZpdSAn7W5pYScuKQorCisgIDQuIFByZW1ldSA8RVNDPiBpIGFuZXUgYWwgc2Vn/GVudCBlcnJvci4KKworICA1LiBSZXBldGl1IGVscyBwYXNzb3MgMyBpIDQgZmlucyBxdWUgbGVzIGR1ZXMgZnJhc2VzIHNpZ3VpbiBpZ3VhbHMuCisKKy0tLT4gQXF1ZXN0YSBsdWdoYyB06SBhbGd1bmVzIHBhcmFkc2tsIHF1ZSBzJ2hhbiBkZSBjZGRkZi4KKy0tLT4gQXF1ZXN0YSBs7W5pYSB06SBhbGd1bmVzIHBhcmF1bGVzIHF1ZSBzJ2hhbiBkZSBjYW52aWFyLgorCitOb3RldSBxdWUgIGN3ICBubyBub23pcyBjYW52aWEgbGEgcGFyYXVsYSwgdGFtYukgdXMgcG9zYSBlbiBtb2RlIGQnaW5zZXJjafMuCisKKworCit+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+fn4KKwkJCUxsaefzIDMuNDogTclTIENBTlZJUyBBTUIgYworCisKKyAqKiBMJ29yZHJlIGNhbnZpYXIgcyd1c2EgYW1iIGVscyBtYXRlaXhvcyBvYmplY3RlcyBxdWUgbCdvcmRyZSBlc2JvcnJhci4gKioKKworICAxLiBMJ29yZHJlIGNhbnZpYXIgZnVuY2lvbmEgaWd1YWwgcXVlIGxhIGQnZXNib3JyYXIuIEVsIGZvcm1hdCDpczoKKworICAgICAgIFtub21icmVdICAgYyAgIG9iamVjdGUJICBPIELJCSAgICBjCVtub21icmVdICAgb2JqZWN0ZQorCisgIDIuIEVscyBvYmplY3RlcyBz824gZWxzIG1hdGVpeG9zLCBjb20gIHcgIChwYXJhdWxhKSwgJCAoZmluYWwgZGUgbO1uaWEpLCBldGMuCisKKyAgMy4gTW92ZXUgZWwgY3Vyc29yIGZpbnMgbGEgcHJpbWVyYSBs7W5pYSBtYXJjYWRhIGFtYiAtLS0+LgorCisgIDQuIEF2YW5jZXUgZmlucyBhbCBwcmltZXIgZXJyb3IuCisKKyAgNS4gUHJlbWV1ICBjJCAgcGVyIGZlciBsYSBs7W5pYSBpZ3VhbCBxdWUgbGEgc2Vnb25hIGkgcHJlbWV1IDxFU0M+LgorCistLS0+IEVsIGZpbmFsIGQnYXF1ZXN0YSBs7W5pYSBuZWNlc3NpdGEgY2FudmlzIHBlciBzZXIgaWd1YWwgcXVlIGxhIHNlZ29uYS4KKy0tLT4gRWwgZmluYWwgZCdhcXVlc3RhIGztbmlhIHMnaGEgZGUgY29ycmVnaXIgYW1iIGwnb3JkcmUgYyQuCisKKworCit+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+fn4KKwkJCQlMTEnH0yAzIFNVTUFSSQorCisKKyAgMS4gUGVyIHRvcm5hciBhIHBvc2FyIGVsIHRleHQgcXVlIHMnaGEgZXNib3JyYXQsIHByZW1ldSAgcCAuIEFpePIgcG9zYSBlbAorICAgICB0ZXh0IGVzYm9ycmF0IERFU1BSyVMgZGVsIGN1cnNvciAoc2kgaGV1IGVzYm9ycmF0IHVuYSBs7W5pYSBhbmly4CBhCisgICAgIHBhcmFyIGEgbGEgbO1uaWEgU0VH3EVOVCBkJ29uIGhpIGhhIGVsIGN1cnNvcikuCisKKyAgMi4gUGVyIHN1YnN0aXR1aXIgZWwgY2Fy4GN0ZXIgZGUgc290YSBlbCBjdXJzb3IsIHByZW1ldSAgciAgaSB0b3Qgc2VndWl0CisgICAgIGVsIGNhcuBjdGVyIHF1ZSBoYSBkZSByZWVtcGxh52FyIGwnb3JpZ2luYWwuCisKKyAgMy4gTCdvcmRyZSBjYW52aWFyIHBlcm1ldCBjYW52aWFyIGwnb2JqZWN0ZSBlc3BlY2lmaWNhdCBkZXMgZGVsIGN1cnNvcgorICAgICBmaW5zIGVsIGZpbmFsIGRlIGwnb2JqZWN0ZS4gUGVyIGV4ZW1wbGUsICBjdyAgY2FudmlhIGVsIHF1ZSBoaSBoYSBkZXMKKyAgICAgZGVsIGN1cnNvciBmaW5zIGFsIGZpbmFsIGRlIGxhIHBhcmF1bGEsIGkgIGMkICBmaW5zIGFsIGZpbmFsIGRlIGztbmlhLgorCisgIDQuIEVsIGZvcm1hdCBkZSBsJ29yZHJlIGNhbnZpYXIg6XM6CisKKwkgW25vbWJyZV0gICBjCW9iamVjdGUJICAgICAgTyBCyQljICAgW25vbWJyZV0gICBvYmplY3RlCisKK0FyYSBhbmV1IGEgbGEgcHLyeGltYSBsbGnn8y4KKworCisKK35+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+fgorCQkgICAgTGxp5/MgNC4xOiBTSVRVQUNJ0yBJIEVTVEFUIERFTCBGSVRYRVIKKworCisgICoqIFByZW1ldSBDVFJMLWcgcGVyIHZldXJlIGxhIHNpdHVhY2nzIGRpbnMgZGVsIGZpdHhlciBpIGVsIHNldSBlc3RhdC4KKyAgICAgUHJlbWV1IFNISUZULUcgcGVyIGFuYXIgYSB1bmEgbO1uaWEgZGV0ZXJtaW5hZGEuICoqCisKKyAgTm90YTogTm8gcHJvdmV1IHJlcyBmaW5zIHF1ZSBo4GdpdSBsbGVnaXQgVE9UQSBsYSBsbGnn8yEhCisKKyAgMS4gTWFudGluZ3VldSBwcmVtdWRhIGxhIHRlY2xhIENvbnRyb2wgaSBwcmVtZXUgIGcgLiBBIGxhIHBhcnQgZGUgYmFpeCBkZQorICAgICBsYSBw4GdpbmEgYXBhcmVpeGVy4CB1biBs7W5pYSBhbWIgZWwgbm9tIGRlbCBmaXR4ZXIgaSBsYSBs7W5pYSBlbiBsYQorICAgICBxdWFsIHVzIHRyb2JldS4gUmVjb3JkZXUgZWwgbvptZXJvIGRlIGxhIGztbmlhIHBlbCBQYXMgMy4KKworICAyLiBQcmVtZXUgU2hpZnQtRyBwZXIgYW5hciBhbCBmaW5hbCBkZSB0b3QgZGVsIGZpdHhlci4KKworICAzLiBUZWNsZWdldSBlbCBu+m1lcm8gZGUgbGEgbO1uaWEgb24g6XJldSBpIGRlc3By6XMgcHJlbWV1IFNoaWZ0LUcuIEFpePIKKyAgICAgdXMgdG9ybmFy4CBhIGxhIGztbmlhIG9uIOlyZXUgcXVhbiBoZXUgcHJlbXV0IHBlciBwcmltZXIgY29wIEN0cmwtZy4KKyAgICAgKFF1YW4gdGVjbGVnZXUgZWwgbvptZXJvIE5PIGVzIHZldXLgIGEgbGEgcGFudGFsbGEuKQorCisgIDQuIEFyYSBleGVjdXRldSBlbHMgcGFzc29zIGRlIGwnMSBhbCAzLgorCisKKworfn5+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+CisJCQkgIExsaefzIDQuMjogTCdPUkRSRSBDRVJDQVIKKworCisJICAgKiogUHJlbWV1ICAvICBzZWd1aXQgZGUgbGEgZnJhc2UgcXVlIHZ1bGd1ZXUgY2VyY2FyLiAqKgorCisgIDEuIEVuIGVsIG1vZGUgTm9ybWFsIHByZW1ldSBlbCBjYXLgY3RlciAgLyAuIE5vdGV1IHF1ZSBlbCBjdXJzb3IgYXBhcmVpeAorICAgICBhIGxhIHBhcnQgZGUgYmFpeCBkZSBsYSBwYW50YWxsYSBpZ3VhbCBxdWUgYW1iIGwnb3JkcmUgIDogLgorCisgIDIuIEFyYSBlc2NyaXZpdSAnZXJycm9vcicgPEVOVFJBUj4uIEFxdWVzdGEg6XMgbGEgcGFyYXVsYSBxdWUgdm9sZXUKKyAgICAgY2VyY2FyLgorCisgIDMuIFBlciB0b3JuYXIgYSBjZXJjYXIgbGEgbWF0ZWl4YSBmcmFzZSwgcHJlbWV1ICBuIC4KKyAgICAgUGVyIGNlcmNhciBsYSBtYXRlaXhhIGZyYXNlIGVuIGRpcmVjY2nzIGNvbnRyYXJpYSwgcHJlbWV1IFNoaWZ0LU4gLgorCisgIDQuIFNpIHZvbGV1IGNlcmNhciB1bmEgZnJhc2UgZW4gZGlyZWNjafMgYXNjZW5kZW50LCB1c2V1IGwnb3JkcmUgID8gIGVuCisgICAgIGxsb2MgZGUgLy4KKworLS0tPiAiZXJycm9vciIgbm8g6XMgY29tIHMnZXNjcml1IGVycm9yOyBlcnJyb29yIOlzIHVuIGVycm9yLgorCitOb3RlOiBRdWFuIGxhIGNlcmNhIGFycmliaSBhbCBmaW5hbCBkZWwgZml0eGVyIGNvbnRpbnVhcuAgYSBsJ2luaWNpLgorCisKK35+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+fgorCQkgICAgICAgTGxp5/MgNC4zOiBDRVJDQSBERSBQQVLITlRFU0lTCisKKworCSAgICoqIFByZW1ldSAgJSAgcGVyIGNlcmNhciBlbCApLF0sIG8gfSBjb3JyZXNwb25lbnQuICoqCisKKyAgMS4gUG9zZXUgZWwgY3Vyc29yIGVuIHF1YWxzZXZvbCAoLCBbLCBvIHsgZGUgbGEgbO1uaWEgbWFyY2FkYSBhbWIgLS0tPi4KKworICAyLiBBcmEgcHJlbWV1IGVsIGNhcuBjdGVyICAlIC4KKworICAzLiBFbCBjdXJzb3IgaGF1cmlhIGQnYW5hciBhIGxhIGNsYXUgbyBwYXLobnRlc2lzIGNvcnJlc3BvbmVudC4KKworICA0LiBQcmVtZXUgICUgIHBlciB0b3JuYXIgZWwgY3Vyc29yIGFsIHByaW1lciBwYXLobnRlc2kuCisKKy0tLT4gQWl48iAoIOlzIHVuYSBs7W5pYSBhbWIgY2Fy4GN0ZXJzICgsIFsgXSBpIHsgfSBkZSBwcm92YS4gKSkKKworTm90YTogQWl48iDpcyBtb2x0IPp0aWwgcGVyIHRyb2JhciBlcnJvcnMgZW4gcHJvZ3JhbWVzIGluZm9ybeB0aWNzIQorCisKKworCisKKworfn5+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+CisJCSAgTGxp5/MgNC40OiBVTkEgTUFORVJBIERFIENBTlZJQVIgRVJST1JTCisKKworICAgICAgICoqIEVzY3Jpdml1ICA6cy92ZWxsL25vdS9nICBwZXIgc3Vic3RpdHVpciAndmVsbCcgcGVyICdub3UnLiAqKgorCisgIDEuIE1vdmV1IGVsIGN1cnNvciBhIGxhIGztbmlhIGRlIHNvdGEgbWFyY2FkYSBhbWIgLS0tPi4KKworICAyLiBFc2NyaXZpdSAgOnMvbGFhL2xhIDxFTlRSQVI+IC4gQXF1ZXN0YSBvcmRyZSBub23pcyBjYW52aWEgbGEgcHJpbWVyYQorICAgICBjb2luY2lk6G5jaWEgcXVlIGVzIHRyb2JpIGEgbGEgbO1uaWEuCisKKyAgMy4gQXJhIGVzY3Jpdml1ICA6cy9sYWEvbGEvZyAgcGVyIGZlciB1bmEgc3Vic3RpdHVjafMgZ2xvYmFsLiBBaXjyCisgICAgIGNhbnZpYXLgIHRvdGVzIGxlcyBjb2luY2lk6G5jaWVzIHF1ZSBlcyB0cm9iaW4gYSBsYSBs7W5pYS4KKworLS0tPiBsYWEgbWlsbG9yIOhwb2NhIHBlciB2ZXVyZSBsYWEgZmxvciDpcyBsYWEgcHJpbWF2ZXJhLgorCisgIDQuIFBlciBjYW52aWFyIHRvdGVzIGxlcyBjb2luY2lk6G5jaWVzIGQndW5hIGNhZGVuYSBlbnRyZSBkdWVzIGztbmllcywKKyAgICAgZXNjcml2aXUgIDojLCNzL3ZlbGwvbm91L2cgIG9uICMsIyBz824gZWxzIG5vbWJyZXMgZGUgbGVzIGztbmllcy4KKyAgICAgRXNjcml2aXUgIDolcy92ZWxsL25vdS9nICBwZXIgc3Vic3RpdHVpciBsYSBjYWRlbmEgYSB0b3QgZWwgZml0eGVyLgorCisKKworCit+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+fn4KKwkJCSAgICAgICBMTEnH0yA0IFNVTUFSSQorCisKKyAgMS4gQ3RybC1nIG1vc3RyYSBsYSBwb3NpY2nzIGRpbnMgZGVsIGZpdHhlciBpIGwnZXN0YXQgZGVsIG1hdGVpeC4KKyAgICAgU2hpZnQtRyB1cyBwb3J0YSBhbCBmaW5hbCBkZWwgZml0eGVyLiBVbiBu+m1lcm8gc2VndWl0IGRlIFNoaWZ0LUcKKyAgICAgdXMgcG9ydGEgYSBsYSBs7W5pYSBjb3JyZXNwb25lbnQuCisKKyAgMi4gTCdvcmRyZSAgLyAgc2VndWlkYSBkJ3VuYSBmcmFzZSBjZXJjYSBsYSBmcmFzZSBFTkRBVkFOVC4KKyAgICAgTCdvcmRyZSAgPyAgc2VndWlkYSBkJ3VuYSBmcmFzZSBjZXJjYSBsYSBmcmFzZSBFTkRBUlJFUkUuCisgICAgIERlc3By6XMgZCd1bmEgY2VyY2EgcHJlbWV1ICBuICBwZXIgdHJvYmFyIGxhIHBy8nhpbWEgY29pbmNpZOhuY2lhIGVuCisgICAgIGxhIG1hdGVpeGEgZGlyZWNjafMsIG8gIFNoaWZ0LU4gIHBlciBjZXJjYXIgZW4gbGEgZGlyZWNjafMgY29udHLgcmlhLgorCisgIDMuIEwnb3JkcmUgICUgIHF1YW4gZWwgY3Vyc29yIOlzIGEgc29icmUgdW4gKCwpLFssXSx7LCBvIH0gdHJvYmEgbGEKKyAgICAgcGFyZWxsYSBjb3JyZXNwb25lbnQuCisKKyAgNC4gUGVyIHN1YnN0aXR1aXIgZWwgcHJpbWVyICd2ZWxsJyBwZXIgJ25vdScgZW4gdW5hIGztbmlhICAgOnMvdmVsbC9ub3UKKyAgICAgUGVyIHN1YnN0aXR1aXIgdG90cyBlbHMgJ3ZlbGwnIHBlciAnbm91JyBlbiB1bmEgbO1uaWEgICAgOnMvdmVsbC9ub3UvZworICAgICBQZXIgc3Vic3RpdHVpciBmcmFzZXMgZW50cmUgbGVzIGztbmllcyAjIGkgIwkgICAgICA6Iywjcy92ZWxsL25vdS9nCisgICAgIFBlciBzdWJzdGl0dWlyIHRvdGVzIGxlcyBjb2luY2lk6G5jaWVzIGVuIGVsIGZpdHhlciAgICAgIDolcy92ZWxsL25vdS9nCisgICAgIFBlciBkZW1hbmFyIGNvbmZpcm1hY2nzIGNhZGEgY29wIGFmZWdpdSAnYycJICAgICAgOiVzL3ZlbGwvbm91L2djCisKKworfn5+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+CisJCSBMbGnn8yA1LjE6IENPTSBFWEVDVVRBUiBVTkEgT1JEUkUgRVhURVJOQQorCisKKyAgICAgICAqKiBUZWNsZWdldSAgOiEgIHNlZ3VpdCBkJ3VuYSBvcmRyZSBleHRlcm5hIHBlciBleGVjdXRhci1sYS4gKioKKworICAxLiBQcmVtZXUgZWwgZmFtaWxpYXIgIDogIHBlciBjb2y3bG9jYXIgZWwgY3Vyc29yIGEgbGEgcGFydCBkZSBiYWl4IGRlCisgICAgIGxhIHBhbnRhbGxhLiAgQWl48iB1cyBwZXJtZXQgZW50cmFyIHVuYSBvcmRyZS4KKworICAyLiBBcmEgdGVjbGVnZXUgZWwgY2Fy4GN0ZXIgICEgIChzaWduZSBkJ2V4Y2xhbWFjafMpLiBBaXjyIHVzIHBlcm1ldAorICAgICBleGVjdXRhciBxdWFsc2V2b2wgb3JkcmUgZGUgbGEgc2hlbGwuCisKKyAgMy4gQ29tIGEgZXhlbXBsZSBlc2NyaXZpdSAgbHMgIGkgdG90IHNlZ3VpdCBwcmVtZXUgPEVOVFJBUj4uIEFpePIgdXMKKyAgICAgbW9zdHJhcuAgZWwgY29udGluZ3V0IGRlbCBkaXJlY3RvcmksIHRhbCBjb20gc2kgZXN0aWd16XNzaXUgYSBsYQorICAgICBs7W5pYSBkJ29yZHJlcy4gRmV1IHNlcnZpciAgOiFkaXIgIHNpIGxzIG5vIGZ1bmNpb25hLgorCitOb3RhOiAgRCdhcXVlc3RhIG1hbmVyYSBlcyBwb3QgZXhlY3V0YXIgcXVhbHNldm9sIG9yZHJlIGV4dGVybmEuCisKK05vdGE6ICBUb3RlcyBsZXMgb3JkcmVzICA6ICBzJ2hhbiBkJ2FjYWJhciBhbWIgbGEgdGVjbGEgPEVOVFJBUj4KKworCisKKworfn5+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+CisJICAgICAgIExsaefzIDUuMjogTclTIFNPQlJFIEwnRVNDUklQVFVSQSBERSBGSVRYRVJTCisKKworCSAgKiogUGVyIGRlc2FyIGVscyBjYW52aXMgZmV0cywgZXNjcml2aXUgIDp3ICBGSVRYRVIuICoqKgorCisgIDEuIEVzY3Jpdml1ICA6IWRpciAgbyBi6SAgOiFscyAgcGVyIG9idGVuaXIgdW4gbGxpc3RhdCBkZWwgZGlyZWN0b3JpLgorICAgICBKYSBzYWJldSBxdWUgaGV1IGRlIHBy6W1lciA8RU5UUkFSPiBkZXNwculzIGQnYWl48i4KKworICAyLiBUcmlldSB1biBub20gZGUgZml0eGVyIHF1ZSBubyBleGlzdGVpeGksIGNvbSBhcmEgUFJPVkEuCisKKyAgMy4gQXJhIGZldTogIDp3IFBST1ZBICAob24gUFJPVkEg6XMgZWwgbm9tIHF1ZSBoZXUgdHJpYXQuKQorCisgIDQuIEFpePIgZGVzYSB0b3QgZWwgZml0eGVyIGFtYiBlbCBub20gZGUgUFJPVkEuIFBlciBjb21wcm92YXItaG8KKyAgICAgZXNjcml2aXUgIDohZGlyICBwZXIgdmV1cmUgZWwgY29udGluZ3V0IGRlbCBkaXJlY3RvcmkuCisKK05vdGU6IFNpIHNvcnRpdSBkZWwgVmltIGkgZW50cmV1IHVuYSBhbHRyYSB2ZWdhZGEgYW1iIGVsIGZpdHhlciBQUk9WQSwgZWwKKyAgICAgIGZpdHhlciBzZXLgIHVuYSBj8nBpYSBleGFjdGEgZGVsIHR1dG9yIHF1ZSBoZXUgZGVzYXQuCisKKyAgNS4gQXJhIGVzYm9ycmV1IGVsIGZpdHhlciB0ZWNsZWphbnQgKE1TLURPUyk6ICAgOiFkZWwgUFJPVkEKKwkJCQkgICBvIGLpIChVbml4KTogICA6IXJtIFBST1ZBCisKKworfn5+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+CisJCSBMbGnn8yA1LjM6IFVOQSBPUkRSRSBTRUxFQ1RJVkEgUEVSIERFU0FSCisKKworCSoqIFBlciBkZXNhciB1bmEgcGFydCBkZWwgZml0eGVyLCBlc2NyaXZpdSAgOiMsIyB3IEZJVFhFUiAqKgorCisgIDEuIFVuIGFsdHJlIGNvcCwgZmV1ICA6IWRpciAgbyAgOiFscyAgcGVyIG9idGVuaXIgdW4gbGxpc3RhdCBkZWwgZGlyZWN0b3JpCisgICAgIGkgdHJpZXUgdW4gbm9tIGRlIGZpdHhlciBhZGVxdWF0IGNvbSBhcmEgUFJPVkEuCisKKyAgMi4gTW92ZXUgZWwgY3Vyc29yIGEgZGFsdCBkZSB0b3QgZGUgbGEgcOBnaW5hIGkgcHJlbWV1ICBDdHJsLWcgIHBlcgorICAgICBzYWJlciBlbCBu+m1lcm8gZGUgbGEgbO1uaWEuICBSRUNPUkRFVSBBUVVFU1QgTtpNRVJPIQorCisgIDMuIEFyYSBhbmV1IGEgYmFpeCBkZSB0b3QgZGUgbGEgcOBnaW5hIGkgdG9ybmV1IGEgcHLpbWVyICBDdHJsLWcuCisgICAgIFJFQ09SREVVIEFRVUVTVCBO2k1FUk8gVEFNQskhCisKKyAgNC4gUGVyIGRlc2FyIE5PTclTIHVuYSBzZWNjafMgZW4gdW4gZml0eGVyLCBlc2NyaXZpdSAgOiMsIyB3IFBST1ZBICBvbgorICAgICAjLCMgc/NuIGVscyBkb3MgbvptZXJvcyBxdWUgaGV1IHJlY29yZGF0IChkYWx0LGJhaXgpIGkgUFJPVkEgZWwgbm9tCisgICAgIGRlbCBmaXR4ZXIuCisKKyAgNS4gTWlyZXUgcXVlIGVsIGZpdHhlciBub3UgaGkgc2lndWkgYW1iICA6IWRpciAgcGVy8iBubyBsJ2VzYm9ycmV1LgorCisKKworfn5+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+CisJCSAgICBMbGnn8yA1LjQ6IE9CVEVOSVIgSSBBSlVOVEFSIEZJVFhFUlMKKworCisJICoqIFBlciBpbnNlcmlyIGVsIGNvbnRpbmd1dCBkJ3VuIGZpdHhlciwgZmV1ICA6ciBGSVRYRVIgKioKKworICAxLiBBc3NlZ3VyZXUtdm9zLCBhbWIgbCdvcmRyZSAgOiFkaXIgLCBxdWUgZWwgZml0eGVyIFBST1ZBIGVuY2FyYSBoaSDpcy4KKworICAyLiBQb3NldSBlbCBjdXJzb3IgYSBkYWx0IGRlIHRvdCBkJ2FxdWVzdGEgcOBnaW5hLgorCitOT1RBOiAgRGVzcHLpcyBkJ2V4ZWN1dGFyIGVsIFBhcyAzIHZldXJldSBsYSBsbGnn8yA1LjMuIEFsZXNob3JlcyBtb3ZldS12b3MKKyAgICAgICBjYXAgYXZhbGwgZmlucyBhIGFxdWVzdGEgbGxp5/MgdW4gYWx0cmUgY29wLgorCisgIDMuIEFyYSBvYnRpbmd1ZXUgZWwgZml0eGVyIFBST1ZBIGFtYiBsJ29yZHJlICA6ciBQUk9WQSAgb24gUFJPVkEg6XMgZWwKKyAgICAgbm9tIGRlbCBmaXR4ZXIuCisKK05PVEE6ICBFbCBmaXR4ZXIgcXVlIG9idGluZ3VldSBlcyBwb3NhIGVuIGVsIGxsb2Mgb24gaGkgaGFnaSBlbCBjdXJzb3IuCisKKyAgNC4gUGVyIGNvbXByb3ZhciBxdWUgcydoYSBvYnRpbmd1dCBlbCBmaXR4ZXIgdGlyZXUgZW5yZXJlIGkgbWlyZXUgY29tCisgICAgIGFyYSBoaSBoYW4gZHVlcyBj8nBpZXMgZGUgbGEgbGxp5/MgNS4zOiBsJ29yaWdpbmFsIGkgbGEgZGVsIGZpdHhlci4KKworCisKK35+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+fgorCQkJCUxMScfTIDUgU1VNQVJJCisKKworICAxLiAgOiFvcmRyZSAgZXhlY3V0YSB1bmEgb3JkcmUgZXh0ZXJuYS4KKworICAgICAgQWxndW5zIGV4ZW1wbGVzIPp0aWxzIHPzbjoKKwkgKE1TLURPUykJICAoVW5peCkKKwkgIDohZGlyCQkgICA6IWxzCQkgLSAgbW9zdHJhIHVuIGxsaXN0YXQgZGVsIGRpcmVjdG9yaQorCSAgOiFkZWwgRklUWEVSICAgICA6IXJtIEZJVFhFUiAgIC0gIGVzYm9ycmEgZWwgZml0eGVyIEZJVFhFUgorCisgIDIuICA6dyBGSVRYRVIgIGVzY3JpdSBlbCBmaXR4ZXIgZWRpdGF0IGFsIGRpc2MgZHVyLCBhbWIgZWwgbm9tIEZJVFhFUi4KKworICAzLiAgOiMsI3cgRklUWEVSICBkZXNhIGxlcyBs7W5pZXMgZGUgIyBhICMgZW4gZWwgZml0eGVyIEZJVFhFUi4KKworICA0LiAgOnIgRklUWEVSICBsbGVnZWl4IGVsIGZpdHhlciBGSVRYRVIgZGVsIGRpc2MgZHVyIGkgbCdpbnNlcmVpeCBlbiBlbAorICAgICAgZml0eGVyIGVkaXRhdCBhIGxhIHBvc2ljafMgb24gaGkgaGEgZWwgY3Vyc29yLgorCisKKworCisKKworfn5+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+CisJCQkgIExsaefzIDYuMTogTCdPUkRSRSBPQlJJUgorCisKKyoqIFByZW1ldSAgbyAgcGVyIG9icmlyIHVuYSBs7W5pYSBzb3RhIGVsIGN1cnNvciBpIGVudHJhciBlbiBtb2RlIGluc2VyY2nzLiAqKgorCisgIDEuIE1vdmV1IGVsIGN1cnNvciBhIGxhIGztbmlhIGRlIHNvdGEgbWFyY2FkYSBhbWIgLS0tPi4KKworICAyLiBQcmVtZXUgIG8gIChtaW76c2N1bGEpIHBlciBvYnJpciB1bmEgbO1uaWEgU09UQSBlbCBjdXJzb3IgaSBzaXR1YXItdm9zCisgICAgIGVuIG1vZGUgZCdpbnNlcmNp8y4KKworICAzLiBBcmEgY29waWV1IGxhIGztbmlhIG1hcmNhZGEgYW1iIC0tLT4gaSBwcmVtZXUgPEVTQz4gcGVyIHRvcm5hciBhbCBtb2RlCisgICAgIG5vcm1hbC4KKworLS0tPiBEZXNwculzIGRlIHBy6W1lciAgbyAgZWwgY3Vyc29yIGVzIHNpdHVhIGEgbGEgbO1uaWEgbm92YSBlbiBtb2RlIGluc2VyY2nzLgorCisgIDQuIFBlciBvYnJpciB1bmEgbO1uaWEgU09CUkUgZWwgY3Vyc29yLCBwcmVtZXUgbGEgIE8gIG1havpzY3VsYSwgZW4gbGxvYworICAgICBkZSBsYSBtaW76c2N1bGEuIFByb3ZldS1obyBhbWIgbGEgbO1uaWEgZGUgc290YS4KK09icml1IHVuYSBs7W5pYSBzb2JyZSBhcXVlc3RhIGFtYiBTaGlmdC1PIGFtYiBlbCBjdXJzb3IgZW4gYXF1ZXN0YSBs7W5pYS4KKworCisKKworfn5+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+CisJCQlMbGnn8yA2LjI6IEwnT1JEUkUgQUZFR0lSCisKKworCSAgICAqKiBQcmVtZXUgIGEgIHBlciBhZmVnaXIgdGV4dCBERVNQUslTIGRlbCBjdXJzb3IuICoqCisKKyAgMS4gTW92ZXUgZWwgY3Vyc29yIGFsIGZpbmFsIGRlIGxhIHByaW1lcmEgbO1uaWEgZGUgc290YSBtYXJjYWRhCisgICAgIGFtYiAtLS0+IHByZW1lbnQgICQgIGVuIGVsIG1vZGUgTm9ybWFsLgorCisgIDIuIFByZW1ldSBsYSBsbGV0cmEgIGEgIChtaW76c2N1bGEpIHBlciBhZmVnaXIgdGV4dCBERVNQUslTIGRlbCBjYXLgY3RlcgorICAgICBzb3RhIGVsIGN1cnNvci4gIChMYSAgQSAgbWFq+nNjdWxhIGFmZWdlaXggdGV4dCBhbCBmaW5hbCBkZSBs7W5pYS4pCisKK05vdGE6IEFpeO0gcydldml0YSBoYXZlciBkZSBwcultZXIgIGkgLCBsJ/psdGltIGNhcuBjdGVyLCBlbCB0ZXh0IGEgaW5zZXJpciwKKyAgICAgIGxhIHRlY2xhIDxFU0M+LCBjdXJzb3IgYSBsYSBkcmV0YSwgaSBmaW5hbG1lbnQgIHggLCBub23pcyBwZXIgYWZlZ2lyCisgICAgICB0ZXh0IGEgZmluYWwgZGUgbO1uaWEuCisKKyAgMy4gQXJhIGNvbXBsZXRldSBsYSBwcmltZXJhIGztbmlhLiBUaW5ndWV1IGVuIGNvbXB0ZSBxdWUgYXF1ZXN0YSBvcmRyZQorICAgICDpcyBleGFjdGFtZW50IGlndWFsIHF1ZSBsYSBkJ2luc2VyaXIsIGV4Y2VwdGUgcGVsIHF1ZSBmYSBhbCBsbG9jIG9uCisgICAgIHMnaW5zZXJlaXggZWwgdGV4dC4KKworLS0tPiBBcXVlc3RhIGztbmlhIHVzIHBlcm1ldHLgIHByYWN0aWNhcgorLS0tPiBBcXVlc3RhIGztbmlhIHVzIHBlcm1ldHLgIHByYWN0aWNhciBhZmVnaXIgdGV4dCBhIGZpbmFsIGRlIGztbmlhLgorCit+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+fn4KKwkJICBMbGnn8yA2LjM6IFVOQSBBTFRSQSBNQU5FUkEgREUgU1VCU1RJVFVJUgorCisKKyAgICAgICoqIFRlY2xlZ2V1IHVuYSAgUiAgbWFq+nNjdWxhIHBlciBzdWJzdGl0dWlyIG3pcyBkJ3VuIGNhcuBjdGVyLiAqKgorCisgIDEuIE1vdmV1IGVsIGN1cnNvciBhIGxhIGztbmlhIGRlIHNvdGEgbWFyY2FkYSBhbWIgLS0tPi4KKworICAyLiBQb3NldSBlbCBjdXJzb3IgYWwgcHJpbmNpcGkgZGUgbGEgcHJpbWVyYSBwYXJhdWxhIHF1ZSBlcyBkaWZlcmVudAorICAgICByZXNwZWN0ZSBhIGxhIHNlZ29uYSBs7W5pYSBtYXJjYWRhIGFtYiAtLS0+IChsYSBwYXJhdWxhICJsJ/psdGltYSIpLgorCisgIDMuIEFyYSBwcmVtZXUgIFIgIGkgc3Vic3RpdHXvdSBlbCBxdWUgcXVlZGEgZGUgdGV4dCBhIGxhIHByaW1lcmEgbO1uaWEKKyAgICAgZXNjcml2aW50IHNvYnJlIGVsIHRleHQgdmVsbCwgcGVyIGZlci1sYSBpZ3VhbCBxdWUgbGEgc2Vnb25hLgorCistLS0+IFBlciBmZXIgYXF1ZXN0YSBs7W5pYSBpZ3VhbCBxdWUgbCf6bHRpbWEgdXNldSBsZXMgdGVjbGVzLgorLS0tPiBQZXIgZmVyIGFxdWVzdGEgbO1uaWEgaWd1YWwgcXVlIGxhIHNlZ29uYSwgcHJlbWV1IFIgaSBlbCB0ZXh0IG5vdS4KKworICA0LiBUaW5ndWV1IGVuIGNvbXB0ZSBxdWUgZW4gcHLpbWVyIDxFU0M+IHBlciBzb3J0aXIsIGVsIHRleHQgcXVlIG5vCisgICAgIHMnaGFnaSBhbHRlcmF0IGVzIG1hbnTpLgorCisKKworCit+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+fn4KKwkJCUxsaefzIDYuNDogRVNUQUJMSVIgT1BDSU9OUworCisgICAgICAqKiBGZXUgcXVlIGxlcyBvcmRyZXMgY2VyY2FyIG8gc3Vic3RpdHVpciBpZ25vcmluIGxlcyBkaWZlcuhuY2llcworCQkgICAgIGVudHJlIG1havpzY3VsZXMgaSBtaW76c2N1bGVzICoqCisKKyAgMS4gQ2VycXVldSBsYSBwYXJhdWxhICdpZ25vcmFyJyBhbWI6IC9pZ25vcmFyCisgICAgIFJlcGV0aXUtaG8gdW5zIHF1YW50cyBjb3BzIGFtYiBsYSB0ZWNsYSBuLgorCisgIDIuIEVzdGFibGl1IGwnb3BjafMgJ2ljJyAoSWdub3JhciBDYXBpdGFscykgZXNjcml2aW50OgorICAgICA6c2V0IGljCisKKyAgMy4gQXJhIGNlcnF1ZXUgJ2lnbm9yYXInIHVuIGFsdHJlIGNvcCBhbWIgbGEgdGVjbGEgbi4KKyAgICAgUmVwZXRpdS1obyB1bnMgcXVhbnRzIGNvcHMgbelzLgorCisgIDQuIEVzdGFibGl1IGxlcyBvcGNpb25zICdobHNlYXJjaCcgaSAnaW5jc2VhcmNoJzoKKyAgICAgOnNldCBobHMgaXMKKworICA1LiBBcmEgdG9ybmV1IGEgZXhlY3V0YXIgdW5hIG9yZHJlIGRlIGNlcmNhLCBpIG1pcmV1IHF16CBwYXNzYToKKyAgICAgL2lnbm9yYXIKKworICA2LiBQZXIgdHJldXJlIGVsIHJlc3NhbHQgZGVscyByZXN1bHRhdHMsIGZldToKKyAgICAgOm5vaGxzZWFyY2gKK35+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+fgorCQkJICAgICAgTExJx9MgNiBTVU1BUkkKKworCisgIDEuIEwnb3JkcmUgIG8gIG9icmUgdW5hIGztbmlhIFNPVEEgbGEgZGVsIGN1cnNvciBpIG1vdSBlbCBjdXJzb3IgYSBsYSBub3ZhCisgICAgIGztbmlhLCBlbiBtb2RlIEluc2VyY2nzLgorICAgICBMYSAgTyAgbWFq+nNjdWxhIG9icmUgbGEgbO1uaWEgYSBTT0JSRSBsYSBxdWUgaGkgaGEgZWwgY3Vyc29yLgorCisgIDIuIFByZW1ldSB1bmEgIGEgIHBlciBhZmVnaXIgdGV4dCBERVNQUslTIGRlbCBjYXLgY3RlciBzb3RhIGVsIGN1cnNvci4KKyAgICAgTGEgIEEgIG1havpzY3VsYSBhZmVnZWl4IGF1dG9t4HRpY2FtZW50IGVsIHRleHQgYSBmaW5hbCBkZSBs7W5pYS4KKworICAzLiBMJ29yZHJlICBSICBtYWr6c2N1bGEgdXMgcG9zYSBlbiBtb2RlIHN1YnN0aXR1Y2nzIGZpbnMgcXVlIHByZW1ldSA8RVNDPi4KKworICA0LiBFc2NyaXZpdSAiOnNldCB4eHgiIHBlciBlc3RhYmxpciBsJ29wY2nzICJ4eHgiCisKKworCisKKworCisKKworCit+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+fn4KKwkJCSAgTExJx9MgNzogT1JEUkVTIEQnQUpVREEKKworCisJCSAqKiBVdGlsaXR6ZXUgZWwgc2lzdGVtYSBpbnRlcm4gZCdhanVkYSAqKgorCisgIEVsIFZpbSB06SB1biBleHRlbnMgc2lzdGVtYSBkJ2FqdWRhLiBQZXIgbGxlZ2lyIHVuYSBpbnRyb2R1Y2Np8yBwcm92ZXUgdW5hCisgIGQnYXF1ZXN0ZXMgdHJlcyBjb3NlczoKKwktIHByZW1ldSBsYSB0ZWNsYSA8QUpVREE+IChzaSBlbiB0ZW5pdSBhbGd1bmEpCisJLSBwcmVtZXUgbGEgdGVjbGEgPEYxPiAoc2kgZW4gdGVuaXUgYWxndW5hKQorCS0gZXNjcml2aXUgICA6aGVscCA8RU5UUkFSPgorCisgIFRlY2xlZ2V1ICA6cSA8RU5UUkFSPiAgcGVyIHRhbmNhciBsYSBmaW5lc3RyYSBkJ2FqdWRhLgorCisgIFBvZGV1IHRyb2JhciBhanVkYSBzb2JyZSBwcuBjdGljYW1lbnQgcXVhbHNldm9sIHRlbWEgZG9uYW50IHVuIGFyZ3VtZW50CisgIGEgbCdvcmRyZSAiOmhlbHAiLiBQcm92ZXUgYWl48iAobm8gb2JsaWRldSBwcultZXIgPEVOVFJBUj4pOgorCisJOmhlbHAgdworCTpoZWxwIGNfPFQKKwk6aGVscCBpbnNlcnQtaW5kZXgKKwk6aGVscCB1c2VyLW1hbnVhbAorCisKK35+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+fgorCQkgICAgICAgTExJx9MgODogQ1JFQVIgVU4gU0NSSVBUIEQnSU5JQ0kKKworCQkgICAgICoqIEFjdGl2YXIgZnVuY2lvbnMgYXV0b23gdGljYW1lbnQgKioKKworIEVsIFZpbSB06SBtb2x0ZXMgbelzIGZ1bmNpb25zIHF1ZSBlbCBWaSwgcGVy8iBtb2x0ZXMgZXN0YW4gZGVzYWN0aXZhZGVzIHBlcgorIG9taXNzafMuIFBlciBjb21lbudhciBhIHV0aWxpdHphciBt6XMgZnVuY2lvbnMgaGV1IGRlIGNyZWFyIHVuIGZpdHhlciAidmltcmMiLgorCisgIDEuIENvbWVuY2V1IGEgZWRpdGFyIGVsIGZpdHhlciAidmltcmMiLCBkZXBlbmVudCBkZWwgc2lzdGVtYQorCTplZGl0IH4vLnZpbXJjCQkJcGVyIFVuaXgKKwk6ZWRpdCAkVklNL192aW1yYwkJcGVyIE1TLVdpbmRvd3MKKworICAyLiBBcmEgbGxlZ2l1IGVsIGZpdHhlciAidmltcmMiIGQnZXhlbXBsZToKKworCTpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4gRGVzZXUgZWwgZml0eGVyIGFtYjoKKworCTp3cml0ZQorCisgRWwgcHLyeGltIGNvcCBxdWUgZXhlY3V0ZXUgZWwgVmltIHVzYXLgIHJlc3NhbHQgZGUgc2ludGF4aS4KKyBQb2RldSBhZmVnaXIgZWxzIGFqdXN0b3MgcXVlIHZ1bGd1ZXUgZW4gYXF1ZXN0IGZpdHhlciAidmltcmMiLgorCit+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+fn4KKworICBBcXXtIGNvbmNsb3UgZWwgVHV0b3IgZGVsIFZpbS4gSGEgc2lndXQgdW4gaW50ZW50IGRlIGZlci12b3MgdW5hIGJyZXUKKyAgaW50cm9kdWNjafMgYSBsJ2VkaXRvciBWaW0sIHN1ZmljaWVudCBjb20gcGVyIHF16CBlbCBwdWd1ZXUgY29tZW7nYXIgYSBmZXIKKyAgc2VydmlyLiBFc3TgIGxsdW55IGRlIHNlciBjb21wbGV0IHBlcnF16CBlbCBWaW0gdOkgbW9sdGVzIG3pcyBvcmRyZXMuCisgIExsZWdpdSBlbCBtYW51YWwgZGUgbCd1c3Vhcmk6ICI6aGVscCB1c2VyLW1hbnVhbCIuCisKKyAgUGVyIHVuIGVzdHVkaSBt6XMgcHJvZnVuZCB1cyByZWNvbWFuZW0gZWwgc2Vn/GVudCBsbGlicmU6CisJVmltIC0gVmkgSW1wcm92ZWQgLSBkZSBTdGV2ZSBPdWFsbGluZQorCUVkaXRvcmlhbDogTmV3IFJpZGVycworICDJcyBlbCBwcmltZXIgbGxpYnJlIGRlZGljYXQgY29tcGxldGFtZW50IGFsIFZpbSwgZXNwZWNpYWxtZW50IPp0aWwgcGVyIGEKKyAgdXN1YXJpcyBub3ZlbGxzLiBU6SBtb2x0cyBleGVtcGxlcyBpIGRpYnVpeG9zLgorICBWZWdldSBodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy9jbGljazUuaHRtbAorCisgIEFxdWVzdCBhbHRyZSDpcyBt6XMgdmVsbCBpIHRyYWN0YSBt6XMgc29icmUgZWwgVmkgcXVlIHNvYnJlIGVsIFZpbToKKwlMZWFybmluZyB0aGUgVmkgRWRpdG9yIC0gZGUgTGluZGEgTGFtYgorCUVkaXRvcmlhbDogTydSZWlsbHkgJiBBc3NvY2lhdGVzIEluYy4KKyAgyXMgdW4gYm9uIGxsaWJyZSBwZXIgc2FiZXIgcXVhbHNldm9sIGNvc2EgcXVlIGRlc2l0Z2V1IHNvYnJlIGVsIFZpLgorICBMYSBzaXNlbmEgZWRpY2nzIHRhbWLpIGluY2xvdSBpbmZvcm1hY2nzIHNvYnJlIGVsIFZpbS4KKworICBBcXVlc3QgdHV0b3JpYWwgaGEgZXN0YXQgZXNjcml0IHBlciBNaWNoYWVsIEMuIFBpZXJjZSBpIFJvYmVydCBLLiBXYXJlLAorICBDb2xvcmFkbyBTY2hvb2wgb2YgTWluZXMgYW1iIGxhIGNvbLdsYWJvcmFjafMgZGUgQ2hhcmxlcyBTbWl0aCwKKyAgQ29sb3JhZG8gU3RhdGUgVW5pdmVyc2l0eS4gRS1tYWlsOiBid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUuCisKKyAgTW9kaWZpY2F0IHBlbCBWaW0gcGVyIEJyYW0gTW9vbGVuYWFyLgorCit+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+fn4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvdHV0b3IuZGUgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOGYwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmRlCkBAIC0wLDAgKzEsODQ5IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9ICAgIFcgaSBsIGwgayBvIG0gbSBlIG4gICB6IHUgbSAgIFYgSSBNICAgVCB1IHQgbyByICAgIC0gICAgVmVyc2lvbiAxLjVEICAgICA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIFZpbSBpc3QgZWluIHNlaHIgbeRjaHRpZ2VyIEVkaXRvciwgZGVyIHZpZWxlIEJlZmVobGUgYmVyZWl0c3RlbGx0OworICAgenUgdmllbGUsIHVtIGFsbGUgaW4gZWluZW0gVHV0b3Igd2llIGRpZXNlbSB6dSBlcmts5HJlbi4KKyAgIERpZXNlciBUdXRvciBpc3Qgc28gZ2VzdGFsdGV0LCB1bSBnZW51ZyBCZWZlaGxlIHZvcnp1c3RlbGxlbiwgc28gZGFzcyBEdQorICAgZGllIEbkaGlna2VpdCBlcmxhbmdzdCwgVmltIG1pdCBMZWljaHRpZ2tlaXQgYWxzIGVpbmVuIEFsbHp3ZWNrLUVkaXRvcgorICAgenUgYmVudXR6ZW4uCisKKyAgIERpZSBaZWl0IGb8ciBkYXMgRHVyY2hhcmJlaXRlbiBkaWVzZXMgVHV0b3JzIGJldHLkZ3QgY2EuIDI1LTMwIE1pbnV0ZW4sCisgICBhYmjkbmdpZyBkYXZvbiwgd2llIHZpZWwgWmVpdCBEdSBtaXQgRXhwZXJpbWVudGllcmVuIHZlcmJyaW5nc3QuCisKKyAgIERpZSBpbiBkZW4gTGVrdGlvbmVuIGFuZ2V3ZW5kZXRlbiBLb21tYW5kb3Mgd2VyZGVuIGRlbiBUZXh0IG1vZGlmaXppZXJlbi4KKyAgIEVyc3RlbGxlIGVpbmUgS29waWUgZGllc2VyIERhdGVpLCBpbiBkZXIgRHUg/GJlbiB3aWxsc3QKKyAgIChmYWxscyBEdSAidmltdHV0b3IuYmF0IiBhdWZnZXJ1ZmVuIGhhc3QsIGlzdCBkaWVzIGJlcmVpdHMgZWluZSBLb3BpZSkuCisKKyAgIEVzIGlzdCB3aWNodGlnLCBzaWNoIHp1IHZlcmdlZ2Vud+RydGlnZW4sIGRhc3MgZGllc2VyIFR1dG9yIGFuZ2VsZWd0IGlzdCwKKyAgIHVtIPxiZXIgZGFzIEFud2VuZGVuIHp1IGxlaHJlbi4gRGFzIGJlZGV1dGV0LCBkYXNzIER1IGRpZSBCZWZlaGxlIGF1c2b8aHJlbgorICAgbXVzc3QsIHVtIHNpZSByaWNodGlnIHp1IGxlcm5lbi4gV2VubiBEdSBudXIgZGVuIFRleHQgbGllc3QsIHZlcmdpc3N0IER1IGRpZQorICAgQmVmZWhsZSEKKworICAgSmV0enQgc3RlbGxlIHNpY2hlciwgZGFzcyBEZWluZSBVbXN0ZWxsdGFzdGUgTklDSFQgZ2Vkcvxja3QgaXN0LCB1bmQKKyAgIGJldOR0aWdlIGRpZSAgIGogICBUYXN0ZSBnZW78Z2VuZCBNYWxlLCB1bSBkZW4gQ3Vyc29yIG5hY2ggdW50ZW4KKyAgIHp1IGJld2VnZW4sIHNvIGRhc3MgTGVrdGlvbiAxLjEgZGVuIEJpbGRzY2hpcm0gdm9sbGtvbW1lbiBhdXNm/GxsdC4KKworCit+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+fn4KKwkJCUxla3Rpb24gMS4xOiBCRVdFR0VOIERFUyBDVVJTT1JTCisKKworICAqKiBVbSBkZW4gQ3Vyc29yIHp1IGJld2VnZW4sIGRy/GNrZSBkaWUgaCxqLGssbCBUYXN0ZW4gd2llIHVudGVuIGdlemVpZ3QuICoqCisKKwkgICAgIF4JCSBIaWxmZXN0ZWxsdW5nOgorCSAgICAgawkJIERpZSBoIFRhc3RlIGJlZmluZGV0IHNpY2ggbGlua3MgdW5kIGJld2VndCBuYWNoIGxpbmtzLgorICAgICAgIDwgaAkgbCA+CSBEaWUgbCBUYXN0ZSBsaWVndCByZWNodHMgdW5kIGJld2VndCBuYWNoIHJlY2h0cy4KKwkgICAgIGoJCSBEaWUgaiBUYXN0ZSDkaG5lbHQgZWluZW0gUGZlaWwgbmFjaCB1bnRlbi4KKwkgICAgIHYKKyAgMS4gQmV3ZWdlIGRlbiBDdXJzb3IgYXVmIGRlbSBCaWxkc2NoaXJtIGhlcnVtLCBiaXMgRHUgRGljaCBzaWNoZXIgZvxobHN0LgorCisgIDIuIEhhbHRlIGRpZSBOYWNoLVVudGVuLVRhc3RlIChqKSBnZWRy/GNrdCwgYmlzIHNpZSBzaWNoIHdpZWRlcmhvbHQuCistLS0+IEpldHp0IHdlad90IER1LCB3aWUgRHUgRGljaCB6dXIgbuRjaHN0ZW4gTGVrdGlvbiBiZXdlZ2VuIGthbm5zdC4KKworICAzLiBCZW51dHplIGRpZSBOYWNoLVVudGVuLVRhc3RlLCB1bSBEaWNoIHp1IExla3Rpb24gMS4yIHp1IGJld2VnZW4uCisKK0JlbWVya3VuZzogSW1tZXIsIHdlbm4gRHUgRGlyIHVuc2ljaGVyIGJpc3Qg/GJlciBkYXMsIHdhcyBEdSBnZXRpcHB0IGhhc3QsCisJICAgZHL8Y2tlIDxFU0M+ICwgdW0gRGljaCBpbiBkZW4gTm9ybWFsLU1vZHVzIHp1IGJlZ2ViZW4uCisJICAgRGFubiBnaWIgZGFzIGdld/xuc2NodGUgS29tbWFuZG8gbm9jaCBlaW5tYWwgZWluLgorCitCZW1lcmt1bmc6IERpZSBDdXJzb3ItVGFzdGVuIHNvbGx0ZW4gZWJlbmZhbGxzIGZ1bmt0aW9uaWVyZW4uICBBYmVyIHdlbm4gRHUKKwkgICBoamtsIGJlbnV0enQsIHdpcnN0IER1IGluIGRlciBMYWdlIHNlaW4sIERpY2ggc2VociB2aWVsIHNjaG5lbGxlcgorCSAgIHVtaGVyenViZXdlZ2VuLCB3ZW5uIER1IERpY2ggZXJzdCBlaW5tYWwgZGFyYW4gZ2V39mhudCBoYXN0LgorCisKK35+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+fgorCQkgICBMZWt0aW9uIDEuMjogU1RBUlRFTiBVTkQgVkVSTEFTU0VOIFZPTiBWSU0KKworCisgICEhIEFDSFRVTkc6IEJldm9yIER1IGVpbmVuIGRlciB1bnRlbiBhdWZnZWb8aHJ0ZW4gU2Nocml0dGUgYXVzZvxocnN0LCBsaWVzCisgICAgIGRpZXNlIGdlc2FtdGUgTGVrdGlvbiEhCisKKyAgMS4gRHL8Y2tlIGRpZSA8RVNDPiBUYXN0ZSAodW0gc2ljaGVyenVzdGVsbGVuLCBkYXNzIER1IGltIE5vcm1hbC1Nb2R1cyBiaXN0KS4KKworICAyLiBUaXBwZToJCQk6cSEgPEVOVEVSPi4KKworLS0tPiBEaWVzIGJlZW5kZXQgZGVuIEVkaXRvciBPSE5FIGplZHdlbGNoZSDEbmRlcnVuZ2VuLCBkaWUgRHUgZ2VtYWNodCBoYXN0LgorICAgICBXZW5uIER1IGRpZSDEbmRlcnVuZ2VuIHNwZWljaGVybiB1bmQgYmVlbmRlbiB3aWxsc3QsIHRpcHBlOgorCQkJCTp3cSAgPEVOVEVSPgorCisgIDMuIFdlbm4gRHUgZGllIEVpbmdhYmVhdWZmb3JkZXJ1bmcgc2llaHN0LCB0aXBwZSBkYXMgS29tbWFuZG8sIGRhc3MgRGljaCB6dQorICAgICBkaWVzZW0gVHV0b3IgZ2Vm/GhydCBoYXQuIERhcyBr9m5udGUgc2VpbjogdmltdHV0b3IgPEVOVEVSPgorICAgICBJbSBOb3JtYWxmYWxsIHf8cmRlc3QgRHUgZWluZ2ViZW4JCQlWaW0gdHV0b3IgPEVOVEVSPgorCistLS0+ICdWaW0nIGlzdCBkZXIgQXVmcnVmIGRlcyBFZGl0b3JzLCAndHV0b3InIGlzdCBkaWUgenUgZWRpdGllcmVuZGUgRGF0ZWkuCisKKyAgNC4gV2VubiBEdSBEaXIgZGllc2UgU2Nocml0dGUgZWluZ2VwcuRndCBoYXN0IHVuZCBEdSBEaWNoIHNpY2hlciBnZW51ZyBm/Ghsc3QsCisgICAgIGb8aHJlIFNjaHJpdHRlIDEgYmlzIDMgYXVzLCB1bSBkZW4gRWRpdG9yIHp1IHZlcmxhc3NlbiB1bmQgd2llZGVyCisgICAgIGhpbmVpbnp1Z2VsYW5nZW4uIERhbm4gYmV3ZWdlIGRlbiBDdXJzb3IgbmFjaCB1bnRlbiB6dXIgTGVrdGlvbiAxLjMuCisKKworfn5+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+CisJCSAgICAgTGVrdGlvbiAxLjM6IFRFWFQgRURJVElFUkVOIC0gTNZTQ0hFTgorCisKKyAqKiBJbSBOb3JtYWwtTW9kdXMsIGRy/GNrZSAgeCAgdW0gZGFzIFplaWNoZW4gdW50ZXIgZGVtIEN1cnNvciB6dSBs9nNjaGVuLiAqKgorCisgIDEuIEJld2VnZSBkZW4gQ3Vyc29yIHp1IGRlciBtaXQgLS0tPiBtYXJraWVydGVuIFplaWxlIHVudGVuLgorCisgIDIuIFVtIGRpZSBGZWhsZXIgenUgYmVoZWJlbiwgYmV3ZWdlIGRlbiBDdXJzb3IsIGJpcyBlciBhdWYgZGVtIFplaWNoZW4gc3RlaHQsCisgICAgIGRhcyBnZWz2c2NodCB3ZXJkZW4gc29sbC4KKworICAzLiBEcvxja2UgZGllICB4ICBUYXN0ZSwgdW0gZGFzIPxiZXJmbPxzc2lnZSBaZWljaGVuIHp1IGz2c2NoZW4uCisKKyAgNC4gV2llZGVyaG9sZSBkaWUgU2Nocml0dGUgMiBiaXMgNCwgYmlzIGRlciBTYXR6IGtvcnJla3QgaXN0LgorCistLS0+IERpZSBLa3VoIHNwcmFuZ2cg/GJiZXIgZGVlbiBNb29uZC4KKworICA1LiBXZW5uIG51biBkaWUgWmVpbGUga29ycmVrdCBpc3QsIGdlaGUgd2VpdGVyIHp1ciBMZWt0aW9uIDEuNC4KKworQW5tZXJrdW5nOiBX5GhyZW5kIER1IGR1cmNoIGRpZXNlbiBUdXRvciBnZWhzdCwgdmVyc3VjaGUgbmljaHQsIGF1c3dlbmRpZyB6dQorICAgIGxlcm5lbiwgbGVybmUgdmllbG1laHIgZHVyY2ggQW53ZW5kZW4uCisKKworfn5+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+CisJCSAgICAgTGVrdGlvbiAxLjQ6IFRFWFQgRURJVElFUkVOIC0gRUlORtxHRU4KKworCisgICAgICoqIFfkaHJlbmQgRHUgaW0gTm9ybWFsLU1vZHVzIGJpc3QsIGRy/GNrZSAgaSAgLCB1bSBUZXh0IGVpbnp1ZvxnZW4uICoqCisKKyAgMS5CZXdlZ2UgZGVuIEN1cnNvciB6dSBkZXIgbWl0IC0tLT4gbWFya2llcnRlbiBaZWlsZSB1bnRlbi4KKworICAyLiBVbSBkaWUgZXJzdGUgWmVpbGUgbWl0IGRlciB6d2VpdGVuIGdsZWljaHp1bWFjaGVuLCBiZXdlZ2UgZGVuIEN1cnNvciBhdWYKKyAgICAgZGFzIGVyc3RlIFplaWNoZW4gTkFDSCBkZXIgU3RlbGxlLCB3byBkZXIgVGV4dCBlaW5nZWb8Z3Qgd2VyZGVuIHNvbGwuCisKKyAgMy4gRHL8Y2tlICBpICB1bmQgZ2liIGRpZSBub3R3ZW5kaWdlIEVyZ+RuenVuZyBlaW4uCisKKyAgNC4gV2VubiBqZXdlaWxzIGVpbiBGZWhsZXIgYmVzZWl0aWd0IGlzdCwgZHL8Y2tlIDxFU0M+ICwgdW0genVtIE5vcm1hbC1Nb2R1cworICAgICB6dXL8Y2t6dWtlaHJlbi4KKyAgICAgV2llZGVyaG9sZSBkaWUgU2Nocml0dGUgMiBiaXMgNCwgdW0gZGVuIFNhdHogenUga29ycmlnaWVyZW4uCisKKy0tLT4gSW4gZGllc2VyIGZ0IGV0d2FzIC4KKy0tLT4gSW4gZGllc2VyIFplaWxlIGZlaGx0IGV0d2FzIFRleHQuCisKKyAgNS4gV2VubiBEdSBEaWNoIG1pdCBkZW0gRWluZvxnZW4gdm9uIFRleHQgc2ljaGVyIGb8aGxzdCwgYmV3ZWdlIGRlbiBDdXJzb3IgenVyCisgICAgIHVudGVuc3RlaGVuZGVuIFp1c2FtbWVuZmFzc3VuZy4KKworCit+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+fn4KKwkJCSAgIFpVU0FNTUVORkFTU1VORyBWT04gTEVLVElPTiAxCisKKworICAxLiBEZXIgQ3Vyc29yIHdpcmQgYmV3ZWd0LCBpbmRlbSBtYW4gZW50d2VkZXIgZGllIFBmZWlsdGFzdGVuIG9kZXIgZGllCisgICAgIGhqa2wgVGFzdGVuIGJlbnV0enQuCisJIGggKGxpbmtzKSAgICAgaiAodW50ZW4pICAgICBrIChhdWZ35HJ0cykgICAgbCAocmVjaHRzKQorCisgIDIuIFVtIFZpbSBhdWZ6dXJ1ZmVuICh2b20gJSBwcm9tcHQpIHRpcHBlOiAgdmltIERBVEVJTkFNRSA8RU5URVI+CisKKyAgMy4gVW0gVmltIHp1IHZlcmxhc3NlbiwgdGlwcGU6CTxFU0M+ICA6cSEgIDxFTlRFUj4gLAorCSB1bSBhbGxlIMRuZGVydW5nZW4genUgdmVyd2VyZmVuLgorICAgICBPREVSIHRpcHBlOgkJCTxFU0M+ICA6d3EgIDxFTlRFUj4gLAorCSB1bSBkaWUgxG5kZXJ1bmdlbiB6dSBzcGVpY2hlcm4uCisKKyAgNC4gVW0gZWluIFplaWNoZW4gaW0gTm9ybWFsLU1vZHVzIHp1IGz2c2NoZW4sIHRpcHBlOgl4CisKKyAgNS4gVW0gVGV4dCBiZWltIEN1cnNvciBlaW56dWdlYmVuLCB35GhyZW5kIER1IGltIE5vcm1hbC1Nb2R1cyBiaXN0LCB0aXBwZToKKwkgaSAgICAgVGV4dCBlaW5nZWJlbgk8RVNDPgorCitCZW1lcmt1bmc6IERy/GNrZW4gdm9uIDxFU0M+IGJyaW5ndCBEaWNoIGluIGRlbiBOb3JtYWwtTW9kdXMgb2RlciBicmljaHQgZWluCisgICAgIHVuZ2V3b2xsdGVzLCBlcnN0IHRlaWx3ZWlzZSBlaW5nZWdlYmVuZXMgS29tbWFuZG8gYWIuCisKK051biBmYWhyZSBtaXQgTGVrdGlvbiAyIGZvcnQuCisKKworfn5+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+CisJCQkgIExla3Rpb24gMi4xOiBM1lNDSEtPTU1BTkRPUworCisKKwkgICAgKiogVGlwcGUgIGR3ICAsIHVtIGJpcyB6dW0gRW5kZSBkZXMgV29ydGVzIHp1IGz2c2NoZW4gKioKKworICAxLiBEcvxja2UgIDxFU0M+ICB1bSBzaWNoZXJ6dXN0ZWxsZW4sIGRhc3MgRHUgaW0gTm9ybWFsLU1vZHVzIGJpc3QuCisKKyAgMi4gQmV3ZWdlIGRlbiBDdXJzb3IgenUgZGVyIG1pdCAtLS0+IG1hcmtpZXJ0ZW4gWmVpbGUgdW50ZW4uCisKKyAgMy4gQmV3ZWdlIGRlbiBDdXJzb3IgenVtIEFuZmFuZyBlaW5lcyBXb3J0ZXMsIGRhcyBnZWz2c2NodCB3ZXJkZW4gc29sbC4KKworICA0LiBUaXBwZSAgIGR3ICwgdW0gZGFzIFdvcnQgenUgZW50ZmVybmVuLgorCisgIEJlbWVya3VuZzogRGllIEJ1Y2hzdGFiZW4gIGR3ICBlcnNjaGVpbmVuIGF1ZiBkZXIgbGV0enRlbiBaZWlsZSBkZXMKKyAgICAgQmlsZHNjaGlybXMsIHdlbm4gRHUgc2llIGVpbmdpYnN0LiBXZW5uIER1IGV0d2FzIGZhbHNjaCBlaW5nZXRpcHB0IGhhc3QsCisgICAgIGRy/GNrZSA8RVNDPiB1bmQgZmFocmUgZm9ydC4KKworLS0tPiBFaW5pZ2UgV/ZydGVyIGx1c3RpZyBnZWj2cmVuIG5pY2h0IFBhcGllciBpbiBkaWVzZW4gU2F0ei4KKworICA1LiBXaWVkZXJob2xlIGRpZSBTY2hyaXR0ZSAzIHVuZCA0LCBiaXMgZGVyIFNhdHoga29ycmVrdCBpc3QgdW5kIGdlaGUKKyAgICAgZGFuYWNoIHp1ciBMZWt0aW9uIDIuMi4KKworCit+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+fn4KKwkJICAgICAgTGVrdGlvbiAyLjI6IFdFSVRFUkUgTNZTQ0hLT01NQU5ET1MKKworCisJICAgICoqIFRpcHBlICBkJCAgLCB1bSBiaXMgenVtIEVuZGUgZGVyIFplaWxlIHp1IGz2c2NoZW4uICoqCisKKyAgMS4gRHL8Y2tlIDxFU0M+ICx1bSBzaWNoZXJ6dXN0ZWxsZW4sIGRhc3MgRHUgaW0gTm9ybWFsLU1vZHVzIGJpc3QuCisKKyAgMi4gQmV3ZWdlIGRlbiBDdXJzb3IgenUgZGVyIG1pdCAtLS0+IG1hcmtpZXJ0ZW4gWmVpbGUgdW50ZW4uCisKKyAgMy4gQmV3ZWdlIGRlbiBDdXJzb3IgenVtIEVuZGUgZGVyIGtvcnJla3RlbiBaZWlsZSAoTkFDSCBkZW0gZXJzdGVuIC4gKS4KKworICA0LiBUaXBwZSAgICBkJCAgLHVtIGJpcyB6dW0gRW5kZSBkZXIgWmVpbGUgenUgbPZzY2hlbi4KKworLS0tPiBKZW1hbmQgaGF0IGRhcyBFbmRlIGRlciBaZWlsZSBkb3BwZWx0IGVpbmdlZ2ViZW4uIGRvcHBlbHQgZWluZ2VnZWJlbi4KKworCisgIDUuIEdlaGUgd2VpdGVyIHp1ciBMZWt0aW9uIDIuMyAsIHVtIHp1IHZlcnN0ZWhlbiwgd2FzIGhpZXJiZWkgcGFzc2llcnQuCisKKworfn5+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+CisJCSAgICBMZWt0aW9uIDIuMzog3EJFUiBLT01NQU5ET1MgVU5EIE9CSkVLVEUKKworCisgIERhcyBGb3JtYXQgZvxyIGRhcyBM9nNjaGtvbW1hbmRvICBkICBpc3QgZm9sZ2VuZGVybWHfZW46CisKKwkgW051bW1lcl0gICBkCU9iamVrdAkgICAgIE9ERVIJZCAgIFtOdW1tZXJdICAgT2JqZWt0CisKKyAgV29iZWk6CisgICBOdW1tZXIgLSBnaWJ0IGFuLCB3aWUgdmllbGUgTWFsZSBkYXMgS29tbWFuZG8gYXVzZ2Vm/GhydCB3ZXJkZW4gc29sbAorCQkJCSAgICAgICAob3B0aW9uYWwsIHN0YW5kYXJkbeTfaWcgMSkuCisgICBkIC0gaXN0IGRhcyBM9nNjaGtvbW1hbmRvLgorICAgT2JqZWt0IC0gYmVkZXV0ZXQsIHdvcmF1ZiBkYXMgS29tbWFuZG8gYW5nZXdlbmRldCB3aXJkICh1bnRlbiBhdWZnZWb8aHJ0KS4KKworICBFaW5lIGt1cnplIExpc3RlIHZvbiBPYmpla3RlbjoKKyAgICB3IC0gdm9tIEN1cnNvciBhbiBiaXMgenVtIEVuZGUgZGVzIFdvcnRlcywgaW5rbHVzaXZlIGRlbSBMZWVyemVpY2hlbi4KKyAgICBlIC0gdm9tIEN1cnNvciBhbiBiaXMgenVtIEVuZGUgZGVzIFdvcnRlcywgT0hORSBkYXMgTGVlcnplaWNoZW4uCisgICAgJCAtIHZvbSBDdXJzb3IgYW4gYmlzIHp1bSBFbmRlIGRlciBaZWlsZS4KKworQmVtZXJrdW5nOiAgRvxyIGRpZSBXYWdlbXV0aWdlbjogZGllIEVpbmdhYmUgbGVkaWdsaWNoIGRlcyBPYmpla3QtVGVpbHMgaW0KKyAgICBOb3JtYWwtTW9kdXMgb2huZSBlaW4gS29tbWFuZG8gYmV3ZWd0IGRlbiBDdXJzb3Igc28sCisgICAgd2llIGluIGRlciBPYmpla3RsaXN0ZSBhbmdlZ2ViZW4gaXN0LgorCisKK35+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+fgorCQlMZWt0aW9uIDIuNDogRUlORSBBVVNOQUhNRSBaVSAnS09NTUFORE8tT0JKRUtUJworCisKKwkgICAgICAgKiogVGlwcGUgIGRkICAsIHVtIGVpbmUgZ2FuemUgWmVpbGUgenUgbPZzY2hlbi4gKioKKworICBXZWdlbiBkZXIgSOR1Zmlna2VpdCwgZGFzcyBtYW4gZ2FuemUgWmVpbGVuIGz2c2NodCwga2FtZW4gZGllCisgIEVudHdpY2tsZXIgdm9uIFZpbSBkYXJhdWYsIGRhc3MgZXMgbGVpY2h0ZXIgd+RyZSwgendlaSBkJ3MgaGludGVyZWluYW5kZXIKKyAgZWluenVnZWJlbiwgdW0gZWluZSBaZWlsZSB6dSBs9nNjaGVuLgorCisgIDEuIEJld2VnZSBkZW4gQ3Vyc29yIHp1ciB6d2VpdGVuIFplaWxlIGluIGRlciB1bnRlbiBzdGVoZW5kZW4gUmVkZXdlbmR1bmcuCisgIDIuIFRpcHBlICBkZCAgLCB1bSBkaWUgWmVpbGUgenUgbPZzY2hlbi4KKyAgMy4gTnVuIGJld2VnZSBEaWNoIHp1ciB2aWVydGVuIFplaWxlLgorICA0LiBUaXBwZSAgIDJkZCAgIChlcmlubmVyZSBEaWNoIGFuICBOdW1tZXItS29tbWFuZG8tT2JqZWt0KSwKKyAgICAgdW0gZGllIPxiZXJmbPxzc2lnZW4gWmVpbGVuIHp1IGz2c2NoZW4uCisKKyAgICAgIDEpICBSb3NlbiBzaW5kIHJvdCwKKyAgICAgIDIpICBNYXRzY2ggaXN0IGx1c3RpZywKKyAgICAgIDMpICBWZWlsY2hlbiBzaW5kIGJsYXUsCisgICAgICA0KSAgSWNoIGhhYmUgZWluIEF1dG8sCisgICAgICA1KSAgRGllIFVociBzYWd0IGRpZSBaZWl0LAorICAgICAgNikgIFp1Y2tlciBpc3Qgc/zfLAorICAgICAgNykgIFNvIHdpZSBEdSBhdWNoLgorCisKK35+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+fgorCQkJIExla3Rpb24gMi41OiBS3ENLR8ROR0lHIE1BQ0hFTiAoVU5ETykKKworCisJICoqIFRpcHBlIHUgLCB1bSBkaWUgbGV0enRlbiBLb21tYW5kb3Mgcvxja2fkbmdpZyB6dSBtYWNoZW4gKioKKwkgICAgICAqKiBvZGVyIFUgdW0gZWluZSBnYW56ZSBaZWlsZSB3aWVkZXJoZXJ6dXN0ZWxsZW4uICoqCisKKyAgMS4gQmV3ZWdlIGRlbiBDdXJzb3IgenUgZGVyIG1pdCAtLS0+IG1hcmtpZXJ0ZW4gWmVpbGUgdW50ZW4KKyAgICAgdW5kIHNldHplIGlobiBhdWYgZGVuIGVyc3RlbiBGZWhsZXIuCisgIDIuIFRpcHBlICB4ICAsIHVtIGRhcyBlcnN0ZSD8YmVyZmz8c3NpZ2UgWmVpY2hlbiB6dSBs9nNjaGVuLgorICAzLiBOdW4gdGlwcGUgIHUgIHVtIGRhcyBzb2ViZW4gYXVzZ2Vm/GhydGUgS29tbWFuZG8gcvxja2fkbmdpZyB6dSBtYWNoZW4uCisgIDQuIERpZXNlcyBNYWwgYmVoZWJlIGFsbGUgRmVobGVyIGF1ZiBkZXIgWmVpbGUsIGluZGVtIER1IGRhcyAgeCAgS29tbWFuZG8KKyAgICAgYW53ZW5kZXN0LgorICA1LiBOdW4gdGlwcGUgZWluIGdyb99lcyAgVSAsIHVtIGRpZSBaZWlsZSBpbiBpaHJlbiBVcnNwcnVuZ3N6dXN0YW5kCisgICAgIHdpZWRlcmhlcnp1c3RlbGxlbi4KKyAgNi4gTnVuIHRpcHBlICB1ICBtZWhyZXJlIE1hbGUsIHVtIGRhcyBVIHVuZCBkaWUgdm9yaGVyZ2VoZW5kZW4gS29tbWFuZG9zCisgICAgIHL8Y2tn5G5naWcgenUgbWFjaGVuLgorICA3LiBOdW4gdGlwcGUgQ1RSTC1SIChoYWx0ZSBkaWUgQ1RSTC1UYXN0ZSBnZWRy/GNrdCB1bmQgZHL8Y2tlIFIgKQorICAgICBtZWhyZXJlIE1hbGUsIHVtIGRpZSBLb21tYW5kb3Mgcvxja2fkbmdpZyB6dSBtYWNoZW4KKyAgICAgKGRpZSBS/GNrZ+RuZ2lnbWFjaHVuZ2VuIHL8Y2tn5G5naWcgbWFjaGVuKS4KKworLS0tPiBCZWVoZWJlIGRpZSBGZWhsbGVyIGRpZXNzZXIgWmVpbGUgdW5kIHN0dGVsbGUgc2llIG1pdHQgJ3VuZG8nIHdpZWRlciBoZXIuCisKKyAgOC4gRGllc2VzIHNpbmQgc2VociBu/HR6bGljaGUgS29tbWFuZG9zLgorICAgICBOdW4gZ2VoZSB3ZWl0ZXIgenVyIFp1c2FtbWVuZmFzc3VuZyB2b24gTGVrdGlvbiAyLgorCisKK35+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+fgorCQkJICAgWlVTQU1NRU5GQVNTVU5HIFZPTiBMRUtUSU9OIDIKKworCisgIDEuIFVtIHZvbSBDdXJzb3IgYmlzIHp1bSBFbmRlIGVpbmVzIFdvcnRlcyB6dSBs9nNjaGVuLCB0aXBwZTogICAgZHcKKworICAyLiBVbSB2b20gQ3Vyc29yIGJpcyB6dW0gRW5kZSBlaW5lciBaZWlsZSB6dSBs9nNjaGVuLCB0aXBwZTogICAgIGQkCisKKyAgMy4gVW0gZWluZSBnYW56ZSBaZWlsZSB6dSBs9nNjaGVuLCB0aXBwZTogICAgZGQKKworICA0LiBEYXMgRm9ybWF0IGb8ciBlaW4gS29tbWFuZG9zIGltIE5vcm1hbC1Nb2R1cyBpc3Q6CisKKyAgICAgICBbTnVtbWVyXSAgIEtvbW1hbmRvICAgT2JqZWt0ICAgICBPREVSICAgICBLb21tYW5kbyAgIFtOdW1tZXJdICAgT2JqZWt0CisJIHdvYmVpOgorICAgICAgIE51bW1lciAtIGdpYnQgYW4sIHdpZSBvZnQgZGFzIEtvbW1hbmRvIHdpZWRlcmhvbHQgd2lyZAorICAgICAgIEtvbW1hbmRvIC0gZ2lidCBhbiwgd2FzIGdldGFuIHdlcmRlbiBzb2xsLCB6dW0gQmVpc3BpZWwJZCAgZvxyIGRlbGV0ZQorICAgICAgIE9iamVrdCAtIGdpYnQgYW4sIHdvcmF1ZiBkYXMgS29tbWFuZG8gYW5nZXdlbmRldCB3ZXJkZW4gc29sbCwKKwkgenVtIEJlaXNwaWVsIHcgKFdvcnQpLCAkICh6dW0gRW5kZSBkZXIgWmVpbGUpLCBldGMuCisKKyAgNS4gVW0gdm9yaGVyaWdlIEFrdGlvbmVuIHL8Y2tn5G5naWcgenUgbWFjaGVuLCB0aXBwZToJCXUgKGtsZWluZXMgdSkKKyAgICAgVW0gYWxsZSDEbmRlcnVuZ2VuIGF1ZiBlaW5lciBaZWlsZSBy/GNrZ+RuZ2lnIHp1IG1hY2hlbjogICBVIChncm/fZXMgVSkKKyAgICAgVW0gZGllIFL8Y2tn5G5naWdtYWNodW5nZW4gcvxja2fkbmdpZyB6dSBtYWNoZW4sIHRpcHBlOiAgICBDVFJMLVIKKworCit+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+fn4KKwkJCSAgIExla3Rpb24gMy4xOiBBTkbcR0VOIChQVVQpCisKKworICAgICAgICoqIFRpcHBlIHAgLHVtIGRhcyB6dWxldHp0IEdlbPZzY2h0ZSBuYWNoIGRlbSBDdXJzb3IgYW56dWb8Z2VuLiAqKgorCisgIDEuIEJld2VnZSBkZW4gQ3Vyc29yIHp1ciBlcnN0ZW4gWmVpbGUgZGVzIHVudGVuIHN0ZWhlbmRlbiBTaW5uc3BydWNocy4KKworICAyLiBUaXBwZSAgZGQgICwgdW0gZGllIFplaWxlIHp1IGz2c2NoZW4gdW5kIHNpZSBpbSBWaW1zIFB1ZmZlciB6dSBzcGVpY2hlcm4uCisKKyAgMy4gQmV3ZWdlIGRlbiBDdXJzb3IgenVyIFplaWxlINxCRVIgZGVyamVuaWdlbiwKKyAgICAgd28gZGllIGdlbPZzY2h0ZSBaZWlsZSBwbGF0emllcnQgd2VyZGVuIHNvbGwuCisKKyAgNC4gSW0gTm9ybWFsLU1vZHVzLCB0aXBwZSAgICBwICAgICwgIHVtIGRpZSBaZWlsZSB6dSBwbGF0emllcmVuLgorCisgIDUuIFdpZWRlcmhvbGUgZGllIFNjaHJpdHRlIDIgYmlzIDQsIHVtIGFsbGUgWmVpbGVuIGluIGRpZSByaWNodGlnZSBSZWloZW5mb2xnZQorICAgICB6dSBicmluZ2VuLgorCisgICAgIGQpIEthbm5zdCBEdSBkYXMgYXVjaD8KKyAgICAgYikgVmVpbGNoZW4gc2luZCBibGF1LAorICAgICBjKSBJbnRlbGxpZ2VueiBpc3QgZXJsZXJuYmFyLAorICAgICBhKSBSb3NlbiBzaW5kIHJvdCwKKworCit+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+fn4KKwkJCUxla3Rpb24gMy4yOiBFUlNFVFpFTiAoUkVQTEFDRSkKKworCisgKiogVGlwcGUgIHIgIHVuZCBlaW4gWmVpY2hlbiwgdW0gZGFzIFplaWNoZW4gdW50ZXIgZGVtIEN1cnNvciB6dSBlcnNldHplbi4gKioKKworICAxLiBCZXdlZ2UgZGVuIEN1cnNvciB6dXIgZXJzdGVuIHVudGVuIHN0ZWhlbmRlbiwgbWl0IC0tLT4gbWFya2llcnRlbiBaZWlsZS4KKworICAyLiBCZXdlZ2UgZGVuIEN1cnNvciwgYmlzIGVyIHNpY2ggYXVmIGRlbSBlcnN0ZW4gRmVobGVyIGJlZmluZGV0LgorCisgIDMuIFRpcHBlICByICB1bmQgYW5zY2hsaWXfZW5kIGRhcyBaZWljaGVuLCB3ZWxjaGVzIGRlbiBGZWhsZXIgYmVoZWJlbiBzb2xsdGUuCisKKyAgNC4gV2llZGVyaG9sZSBkaWUgU2Nocml0dGUgMiB1bmQgMywgYmlzIGRpZSBlcnN0ZSBaZWlsZSBrb3JyZWt0IGlzdC4KKworLS0tPiAgQWxzIGRpZXNlIFplaXRlIGVpbmdlZ29iZW4gd3VyZGUsIHd1cmRlbiBlaW5pa2UgZmFsc2NoZSBUYXN0ZW4gZ2VsaXBwdC4KKy0tLT4gIEFscyBkaWVzZSBaZWlsZSBlaW5nZWdlYmVuIHd1cmRlLCB3dXJkZW4gZWluaWdlIGZhbHNjaGUgVGFzdGVuIGdldGlwcHQuCisKKyAgNS4gTnVuIGZhaHJlIGZvcnQgbWl0IExla3Rpb24gMy4yLgorCitCZW1lcmt1bmc6IEVyaW5uZXJlIERpY2gsIGRhc3MgRHUgZHVyY2ggQW53ZW5kZW4gbGVybmVuIHNvbGx0ZXN0LCBuaWNodCBkdXJjaAorICAgICBBdXN3ZW5kaWdsZXJuZW4uCisKKworfn5+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+CisJCQkgIExla3Rpb24gMy4zOiDETkRFUk4gKENIQU5HRSkKKworCisgICAgICAgKiogVW0gZWluIFdvcnR0ZWlsIG9kZXIgZWluIGdhbnplcyBXb3J0IHp1IORuZGVybiwgdGlwcGUgIGN3IC4gKioKKworICAxLiBCZXdlZ2UgZGVuIEN1cnNvciB6dXIgZXJzdGVuIHVudGVuIHN0ZWhlbmRlbiwgbWl0IC0tLT4gbWFya2llcnRlbiBaZWlsZS4KKworICAyLiBQbGF6aWVyZSBkZW4gQ3Vyc29yIGF1ZiBkYXMgcyB2b24gV3N0d3IuCisKKyAgMy4gVGlwcGUgIGN3ICB1bmQgZGllIFdvcnRrb3JyZWt0dXIgZWluIChpbiBkaWVzZW0gRmFsbCwgdGlwcGUgICf2cnRlcicuKQorCisgIDQuIERy/GNrZSA8RVNDPiB1bmQgYmV3ZWdlIGRlbiBDdXJzb3IgenVtIG7kY2hzdGVuIEZlaGxlcgorICAgIChEYXMgZXJzdGUgenUg5G5kZXJuZGUgWmVpY2hlbi4pCisKKyAgNS4gV2llZGVyaG9sZSBTY2hyaXR0ZSAzIHVuZCA0IGJpcyBkZXIgZXJzdGUgU2F0eiBnbGVpY2ggZGVtIHp3ZWl0ZW4gaXN0LgorCistLS0+IEVpbmlnZSBXc3R3ciBkaWVzZXIgWmxhd3cgbGFzZGpsYWYgbWl0IGRlbSDEbmRlcm4tS29tbWFuZG8gZ2FhYXV1IHdlcmRlbi4KKy0tLT4gRWluaWdlIFf2cnRlciBkaWVzZXIgWmVpbGUgc29sbGVuIG1pdCBkZW0gxG5kZXJuLUtvbW1hbmRvIGdl5G5kZXJ0IHdlcmRlbi4KKworQmVtZXJrZSwgZGFzcyAgY3cgIG5pY2h0IG51ciBkYXMgV29ydCBlcnNldHp0LCBzb25kZXJuIERpY2ggYXXfZXJkZW0gaW4gZGVuCisgICAgIEVpbmdhYmVtb2R1cyB2ZXJzZXR6dC4KKworCit+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+fn4KKwkJICAgICBMZWt0aW9uIDMuNDogTUVIUiDETkRFUlVOR0VOIE1JVFRFTFMgYworCisKKyAgICAgKiogRGFzIGNoYW5nZS1Lb21tYW5kbyBhcmJlaXRldCBtaXQgZGVuc2VsYmVuIE9iamVrdGVuIHdpZSBkZWxldGUgICoqCisKKyAgMS4gRGFzIGNoYW5nZSBLb21tYW5kbyBhcmJlaXRldCBnbGVpY2hlciBXZWlzZSB3aWUgZGVsZXRlLiBEYXMgRm9ybWF0IGlzdDoKKworICAgICAgIFtOdW1tZXJdICAgYyAgIE9iamVrdCAgICAgICBPREVSICAgICAgIGMgICBbTnVtbWVyXSAgIE9iamVrdAorCisgIDIuIEF1Y2ggc2luZCBkaWUgT2JqZWt0ZSBnbGVpY2gsIHNvIHdpZSAgdyAgKFdvcnQpLCAkIChFbmRlIGRlciBaZWlsZSksIGV0Yy4KKworICAzLiBCZXdlZ2UgZGVuIEN1cnNvciB6dXIgZXJzdGVuIHVudGVuIHN0ZWhlbmRlbiwgbWl0IC0tLT4gbWFya2llcnRlbiBaZWlsZS4KKworICA0LiBCZXdlZ2UgZGVuIEN1cnNvciB6dW0gZXJzdGVuIFVudGVyc2NoaWVkIHp1ciBhbmRlcmVuIFplaWxlLgorCisgIDUuIFRpcHBlICBjJCAgLCB1bSBkZW4gUmVzdCBkZXIgWmVpbGUgYW4gZGllIHp3ZWl0ZSBhbnp1Z2xlaWNoZW4KKyAgICAgdW5kIGRy/GNrZSBhYnNjaGxpZd9lbmQgPEVTQz4gLgorCistLS0+IERhcyBFbmRlIGRpZXNlciBaZWlsZSBzb2xsdGUgYW4gZGllIHp3ZWl0ZSBaZWlsZSBhbmdlZ2xpY2hlbiB3ZXJkZW4uCistLS0+IERhcyBFbmRlIGRpZXNlciBaZWlsZSBzb2xsdGUgbWl0IGRlbSAnYyQnIEtvbW1hbmRvIGtvcnJpZ2llcnQgd2VyZGVuLgorCisKK35+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+fgorCQkJICAgWlVTQU1NRU5GQVNTVU5HIFZPTiBMRUtUSU9OIDMKKworCisgIDEuIFVtIGVpbmVuIHZvcmhlciBnZWz2c2NodGVuIFRleHQgYW56dWb8Z2VuLCB0aXBwZSAgcCAgLiBEaWVzZSBm/Gd0IGRlbgorICAgICBnZWz2c2NodGVuIFRleHQgTkFDSCBkZW0gQ3Vyc29yIGFuICh3ZW5uIGVzIHNpY2ggdW0gZWluZSBnYW56ZSBaZWlsZQorICAgICBoYW5kZWx0LCB3aXJkIGFiIGRlciBaZWlsZSB1bnRlciBkZW0gQ3Vyc29yIGVpbmdlZvxndCkuCisKKyAgMi4gVW0gZGFzIFplaWNoZW4gdW50ZXIgZGVtIEN1cnNvciB6dSBlcnNldHplbiwgdGlwcGUgICByICA7IGRhcyBkYW5hY2gKKyAgICAgZWluZ2VnZWJlbmUgWmVpY2hlbiBlcnNldHp0IGRhcyBPcmlnaW5hbC4KKworICAzLiBEYXMgxG5kZXJ1bmdzLSAoY2hhbmdlKSBLb21tYW5kbyBlcmxhdWJ0LCBkYXMgYW5nZWdlYmVuZSBPYmpla3Qgdm9tIEN1cnNvcgorICAgICBiaXMgenVtIEVuZGUgZGVzIE9iamVrdGVzIHp1IORuZGVybi4gVGlwcGUgei5CLiBjdyAsIHVtIGVpbmUgxG5kZXJ1bmcgdm9tCisgICAgIEN1cnNvciBiaXMgenVtIEVuZGUgZGVzIFdvcnRlcyB2b3J6dW5laG1lbjsgYyQgYmlzIHp1bSBFbmRlIGRlciBaZWlsZS4KKworICA0LiBEYXMgRm9ybWF0IGb8ciBjaGFuZ2UgaXN0OgorCisJIFtOdW1tZXJdICAgYwlPYmpla3QJICAgICBPREVSCWMgICBbTnVtbWVyXSAgIE9iamVrdAorCitOdW4gZmFocmUgbWl0IGRlciBu5GNoc3RlbiBMZWt0aW9uIGZvcnQuCisKKworfn5+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+CisJCSAgIExla3Rpb24gNC4xOiBEQVRFSVBPU0lUSU9OIFVORCBEQVRFSVNUQVRVUworCisKKyAqKiBUaXBwZSBDVFJMLWcgLCB1bSBEZWluZSBEYXRlaXBvc2l0aW9uIHNvd2llIGRlbiBEYXRlaXN0YXR1cyBhbnp1emVpZ2VuLiAqKgorICAgICAqKiBUaXBwZSBTSElGVC1HICwgdW0gRGljaCB6dSBlaW5lciBaZWlsZSBpbiBkZXIgRGF0ZWkgenUgYmV3ZWdlbi4gKioKKworIEJlbWVya3VuZzogTGllcyBkaWVzZSBnZXNhbXRlIExla3Rpb24sIGJldm9yIER1IGlyZ2VuZGVpbmVuIFNjaHJpdHQgYXVzZvxocnN0ISEKKworICAxLiBIYWx0ZSBkaWUgQ3RybCBUYXN0ZSB1bnRlbiB1bmQgZHL8Y2tlICBnIC4gIEVpbmUgU3RhdHVzemVpbGUgZXJzY2hlaW50IGluCisgICAgIGRlciB1bnRlcnN0ZW4gWmVpbGUgZGVzIEZlbnN0ZXJzIG1pdCBkZW0gRGF0ZWluYW1lbiB1bmQgZGVyIFplaWxlLAorICAgICBhdWYgZGVyIER1IERpY2ggYmVmaW5kZXN0LiBQcuRnZSBEaXIgZGllIFplaWxlbm51bW1lciBm/HIgU2Nocml0dCAzIGVpbi4KKworICAyLiBEcvxja2UgU2hpZnQtRyAsIHVtIERpY2ggenVtIEVuZGUgZGVyIERhdGVpIHp1IGJlZ2ViZW4uCisKKyAgMy4gR2liIGRpZSBOdW1tZXIgZGVyIFplaWxlIGVpbiwgYXVmIGRlciBEdSB2b3JoZXIgd2Fyc3QsIGdlZm9sZ3Qgdm9uIFNoaWZ0LUcuCisgICAgIERpZXNlcyBicmluZ3QgRGljaCB6dXL8Y2sgenUgZGVyIFplaWxlLCBhdWYgZGVyIER1IGdlc3RhbmRlbiBoYXN0LCBhbHMgRHUKKyAgICAgZGFzIGVyc3RlIE1hbCBDdHJsLWcgZ2Vkcvxja3QgaGFzdC4KKyAgICAgKFdlbm4gRHUgZGllIFppZmZlcm4gZWluZ2lic3QsIHdlcmRlbiBzaWUgTklDSFQgYXVmIGRlbSBTY2hpcm0gYW5nZXplaWd0LikKKworICA0LiBXZW5uIER1IHNpY2hlciBnZW51ZyBm/Ghsc3QsIGb8aHJlIGRpZSBTY2hyaXR0ZSAxIGJpcyAzIGF1cy4KKworCit+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+fn4KKwkJICAgICAgIExla3Rpb24gNC4yOiBEQVMgU1VDSEVOIC0gS09NTUFORE8KKworCisgICoqIFRpcHBlICAvICBnZWZvbGd0IHZvbiBlaW5lbSBBdXNkcnVjaywgdW0gbmFjaCBkZW0gQXVzZHJ1Y2sgenUgc3VjaGVuLiAqKgorCisgIDEuIFdlbm4gRHUgaW0gTm9ybWFsLU1vZHVzIGJpc3QsIHRpcHBlIGRhcyAgLyAgWmVpY2hlbi4gIEJlYWNodGUsIGRhc3MgZGFzICAvCisgICAgIHVuZCBkZXIgQ3Vyc29yIGF1ZiBkZXIgdW50ZXJzdGVuIFplaWxlIGRlcyBTY2hpcm1zIGVyc2NoZWluZW4sCisgICAgIHNvIHdpZSBiZWltICA6ICBLb21tYW5kby4KKworICAyLiBOdW4gdGlwcGUgJ0ZlaGhsZXInIDxFTlRFUj4uICBEaWVzIGlzdCBkYXMgV29ydCwgbmFjaCBkZW0gRHUgc3VjaGVuIHdpbGxzdC4KKworICAzLiBVbSBuYWNoIGRlbXNlbGJlbiBBdXNkcnVjayB3ZWl0ZXJ6dXN1Y2hlbiwgdGlwcGUgZWluZmFjaCAgbiAoZvxyICpuKmV4dCkuCisgICAgIFVtIG5hY2ggZGVtc2VsYmVuIEF1c2RydWNrIGluIGRlciBhbmRlcmVuIFJpY2h0dW5nIHp1IHN1Y2hlbiwgU2hpZnQtTiAuCisKKyAgNC4gV2VubiBEdSBuYWNoIGVpbmVtIEF1c2RydWNrIHL8Y2t35HJ0cyBpbiBkZXIgRGF0ZWkgc3VjaGVuIHdpbGxzdCwKKyAgICAgYmVudXR6ZSBkYXMgS29tbWFuZG8gID8gIHN0YXR0ICAvIC4KKworLS0tPiBXZW5uIGRpZSBTdWNoZSBkYXMgRGF0ZWllbmRlIGVycmVpY2h0IGhhdCwgd2lyZCBzaWUgYW0gQW5mYW5nIGZvcnRnZXNldHp0LgorCisgIEZlaGxlciBzY2hyZWlidCBzaWNoIG5pY2h0ICJGZWhobGVyIjsgIkZlaGhsZXIiIGlzdCBlaW4gRmVobGVyCisKKworfn5+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+CisJCSAgICAgTGVrdGlvbiA0LjM6IFBBU1NFTkRFIEtMQU1NRVJOIEZJTkRFTgorCisKKyAgICoqIFRpcHBlICAlICwgdW0gZWluZSBrb3JyZXNwb25kaWVyZW5kZSBLbGFtbWVyICksXSwgb2RlciB9IHp1IGZpbmRlbi4gKioKKworICAxLiBQbGF6aWVyZSBkZW4gQ3Vyc29yIGF1ZiBpcmdlbmRlaW5lbSBkZXIgWmVpY2hlbiAoLCBbLCBvZGVyIHsKKyAgICAgaW4gZGVyIHVudGVuIHN0ZWhlbmRlbiBaZWlsZSwgZGllIG1pdCAtLS0+IG1hcmtpZXJ0IGlzdC4KKworICAyLiBOdW4gdGlwcGUgZGFzICAlICBaZWljaGVuLgorCisgIDMuIERlciBDdXJzb3Igc29sbHRlIHNpY2ggbnVuIGF1ZiBkZXIgZ2VnZW78YmVybGllZ2VuZGVuIEtsYW1tZXIgYmVmaW5kZW4uCisKKyAgNC4gVGlwcGUgICUgLCB1bSBkZW4gQ3Vyc29yIHp1cvxjayBhdWYgZGllIGVyc3RlIEdlZ2Vua2xhbW1lciB6dXL8Y2t6dWJld2VnZW4uCisKKy0tLT4gRGllcyAoIGlzdCBlaW5lIFRlc3R6ZWlsZSBtaXQgKCB2ZXJzY2hpZWRlbmVuIFsgS2xhbW1lcm4gXSB7IHh4IH0gZGFyaW4uICkpCisKK0JlbWVya3VuZzogRGllc2UgRnVua3Rpb25hbGl05HQgaXN0IHNlaHIgbvx0emxpY2ggYmVpIGRlciBGZWhsZXJzdWNoZSBpbiBlaW5lbQorICAgICBQcm9ncmFtbXRleHQsIGluIGRlbSBlaW5lIHBhc3NlbmRlIEtsYW1tZXIgZmVobHQhCisKKworfn5+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+CisJCSAgIExla3Rpb24gNC40OiBXRUdFLCBVTSBGRUhMRVIgWlUgQkVIRUJFTgorCisKKwkgKiogVGlwcGUgOnMvYWx0L25ldS9nCSwgdW0gJ2FsdCcgZHVyY2ggJ25ldScgenUgZXJzZXR6ZW4uICoqCisKKyAgMS4gQmV3ZWdlIGRlbiBDdXJzb3IgenUgZGVyIHVudGVuIHN0ZWhlbmRlbiBtaXQgLS0tPiBtYXJraWVydGVuIFplaWxlLgorCisgIDIuIFRpcHBlICA6cy9kaWVlL2RpZSA8RU5URVI+IC4gIEJlbWVya2UsIGRhc3MgZGVyIEJlZmVobCBudXIgZGFzIGVyc3RlCisgICAgIFZvcmtvbW1lbiBhdWYgZGVyIFplaWxlIGVyc2V0enQuCisKKyAgMy4gTnVuIHRpcHBlICAgOnMvZGllZS9kaWUvZyAgICAsIHdlbGNoZXMgYmVkZXV0ZXQsIGVpbmUgemVpbGVud2VpdGUKKyAgICAgKCpnKmxvYmFsZSkgRXJzZXR6dW5nIHZvcnp1bmVobWVuLgorICAgICBEaWVzIGVyc2V0enQgYWxsZSBWb3Jrb21tZW4gYXVmIGRlciBaZWlsZS4KKworLS0tPiBkaWVlIHNjaPZuc3RlIFplaXQsIHVtIGRpZWUgQmx1bWVuIGFuenVzY2hhdWVuLCBpc3QgZGllZSBGcvxobGluZ3N6ZWl0LgorCisgIDQuIFVtIGFsbGUgVm9ya29tbWVuIGVpbmVyIFplaWNoZW5rZXR0ZSB6d2lzY2hlbiB6d2VpIFplaWxlbiB6dSDkbmRlcm4sCisgICAgIHRpcHBlICA6Iywjcy9hbHQvbmV1L2cgICwgd29iZWkgIywjIGRpZSB6d2VpIE51bW1lcm4gZGVyIFplaWxlbiBzaW5kLgorICAgICBUaXBwZSAgOiVzL2FsdC9uZXUvZyAsIHVtIGFsbGUgVm9ya29tbWVuIGluIGRlciBnZXNhbXRlbiBEYXRlaSB6dSDkbmRlcm4uCisKKworfn5+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+CisJCQkgICBaVVNBTU1FTkZBU1NVTkcgVk9OIExFS1RJT04gNAorCisKKyAgMS4gQ3RybC1nICB6ZWlndCBkaWUgYWt0dWVsbGUgRGF0ZWlwb3NpdGlvbiBzb3dpZSBkZW4gRGF0ZWlzdGF0dXMuCisgICAgIFNoaWZ0LUcgYnJpbmd0IERpY2ggYmlzIHp1bSBFbmRlIGRlciBEYXRlaS4gIEVpbmUgWmVpbGVubnVtbWVyCisgICAgIGdlZm9sZ3Qgdm9uIFNoaWZ0LUcgYmV3ZWd0IGRlbiBDdXJzb3IgenUgZGVyIFplaWxlbm51bW1lci4KKworICAyLiBEaWUgRWluZ2FiZSB2b24gIC8gZ2Vmb2xndCB2b24gZWluZW0gQXVzZHJ1Y2sgc3VjaHQgVk9SV8RSVFMgbmFjaCBkZW0KKyAgICAgQXVzZHJ1Y2suCisgICAgIERpZSBFaW5nYWJlIHZvbiAgPyAgICAgZ2Vmb2xndCB2b24gZWluZW0gQXVzZHJ1Y2sgc3VjaHQgUtxDS1fEUlRTIG5hY2ggZGVtCisgICAgIEF1c2RydWNrLgorICAgICBUaXBwZSBuYWNoIGVpbmVyIFN1Y2hlICBuICAsIHVtIGRhcyBu5GNoc3RlIFZvcmtvbW1lbiBpbiBkZXIgZ2xlaWNoZW4KKyAgICAgUmljaHR1bmcgenUgZmluZGVuOyBvZGVyIFNoaWZ0LU4gLCB1bSBpbiBkZXIgZW50Z2VnZW5nZXNldHp0ZW4gUmljaHR1bmcKKyAgICAgenUgc3VjaGVuLgorCisgIDMuIERpZSBFaW5nYWJlIHZvbiAgJSAgLCB3ZW5uIGRlciBDdXJzb3Igc2ljaCBhdWYgICgsKSxbLF0seywgb2RlciB9CisgICAgIGJlZmluZGV0LCBmaW5kZXQgZGllIGtvcnJlc3BvbmRpZXJlbmRlIEdlZ2Vua2xhbW1lci4KKworICA0LiBVbSBkYXMgRVJTVEUgVm9ya29tbWVuIHZvbiBhbHQgaW4gZWluZSBaZWlsZSBkdXJjaCBuZXUgenUgZXJzZXR6ZW4sIHRpcHBlCisJCTpzL2FsdC9uZXUKKyAgICAgVW0gQUxMRSBWb3Jrb21tZW4gdm9uIGFsdCBpbiBlaW5lIFplaWxlIGR1cmNoIG5ldSB6dSBlcnNldHplbiwgdGlwcGUKKwkJOnMvYWx0L25ldS9nCisgICAgIFVtIEF1c2Ry/GNrZSBpbm5lcmhhbGIgdm9uIHp3ZWkgWmVpbGVuIHp1IGVyc2V0emVuLCB0aXBwZQorCQk6Iywjcy9hbHQvbmV1L2cKKyAgICAgVW0gYWxsZSBWb3Jrb21tZW4gaW4gZGVyIGdhbnplbiBEYXRlaSB6dSBlcnNldHplbiwgdGlwcGUKKwkJOiVzL2FsdC9uZXUvZworICAgICBVbSBqZWRlcyBNYWwgbmFjaCBlaW5lciBCZXN05HRpZ3VuZyBnZWZyYWd0IHp1IHdlcmRlbiwgZvxnZSAnYycgaGluenUuCisJCTolcy9hbHQvbmV1L2djCQkoKmMqb25maXJtKQorCisKK35+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+fgorCQlMZWt0aW9uIDUuMTogQVVTRtxIUkVOIEVJTkVTIEVYVEVSTkVOIEtPTU1BTkRPUworCisKKyAgKiogR2liICA6ISAsIGdlZm9sZ3Qgdm9uIGVpbmVtIGV4dGVybmVuIEtvbW1hbmRvIGVpbiwgdW0gZXMgYXVzenVm/GhyZW4uICoqCisKKyAgMS4gVGlwcGUgZGFzIHZlcnRyYXV0ZSBLb21tYW5kbyAgOiAgLCB1bSBkZW4gQ3Vyc29yIGF1ZiBkaWUgdW50ZXJzdGUgWmVpbGUKKyAgICAgZGVzIEZlbnN0ZXJzIHp1IHNldHplbi4gRGllcyBlcmxhdWJ0IERpciwgZWluIEtvbW1hbmRvIGVpbnp1Z2ViZW4uCisKKyAgMi4gTnVuIHRpcHBlIGVpbiAgISAgKEF1c3J1ZmV6ZWljaGVuKS4gIERpZXNlcyBlcm32Z2xpY2h0IERpciwgZWluCisgICAgIGJlbGllYmlnZXMsIGV4dGVybmVzIFNoZWxsa29tbWFuZG8gYXVzenVm/GhyZW4uCisKKyAgMy4gQWxzIEJlaXNwaWVsIHRpcHBlICAgbHMgICBuYWNoIGRlbSAgISAgdW5kIGRy/GNrZSA8RU5URVI+LiBEaWVzIHplaWd0CisgICAgIGVpbmUgQXVmbGlzdHVuZyBEZWluZXMgVmVyemVpY2huaXNzZXM7IGdlbmF1c28sIGFscyB3ZW5uIER1IGF1ZiBkZXIKKyAgICAgRWluZ2FiZWF1ZmZvcmRlcnVuZyB35HJzdC4KKyAgICAgVmVyd2VuZGUgIDohZGlyICAsIGZhbGxzIGxzIG5pY2h0IGZ1bmt0aW9uaWVydC4KKworLS0tPiBCZW1lcmt1bmc6ICBNaXQgZGllc2VyIE1ldGhvZGUga2FubiBqZWRlcyBiZWxpZWJpZ2UgZXh0ZXJuZSBLb21tYW5kbworICAgICBhdXNnZWb8aHJ0IHdlcmRlbi4KKworLS0tPiBCZW1lcmt1bmc6ICBBbGxlICA6ICBLb21tYW5kb3Mgbfxzc2VuIGR1cmNoIEVpbmdhYmUgdm9uIDxFTlRFUj4KKyAgICAgYWJnZXNjaGxvc3NlbiB3ZXJkZW4uCisKKworfn5+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+CisJCUxla3Rpb24gNS4yOiBNRUhSINxCRVIgREFTIFNDSFJFSUJFTiBWT04gREFURUlFTgorCisKKyoqIFVtIGFuIGRlciBEYXRlaSBkdXJjaGdlZvxocnRlIMRuZGVydW5nZW4gIHp1IHNpY2hlcm4gLCB0aXBwZSA6dyBEQVRFSU5BTUUuICoqCisKKyAgMS4gVGlwcGUgIDohbHMgIG9kZXIgOiFkaXIgICwgdW0gZWluZSBBdWZsaXN0dW5nIERlaW5lcyBWZXJ6ZWljaG5pc3NlcworICAgICB6dSBlcmhhbHRlbi4KKyAgICAgRHUgd2Vp33QgbnVuIGJlcmVpdHMsIGRhc3MgRHUgZGFuYWNoIDxFTlRFUj4gZWluZ2ViZW4gbXVzc3QuCisKKyAgMi4gV+RobGUgZWluZW4gRGF0ZWluYW1lbiwgZGVyIGRvcnQgbm9jaCBuaWNodCBleGlzdGllcnQsIHouQi4gVEVTVC4KKworICAzLiBOdW4gdGlwcGU6ICA6dyBURVNUICAgKHdvYmVpIFRFU1QgZGVyIGdld+RobHRlIERhdGVpbmFtZSBpc3QuKQorCisgIDQuIERpZXNlcyBzcGVpY2hlcnQgZGllc2UgZ2FuemUgRGF0ZWkgIChWaW0gVHV0b3IpICB1bnRlciBkZW0gTmFtZW4gVEVTVC4KKyAgICAgVW0gZGllc2VzIHp1IPxiZXJwcvxmZW4sIHRpcHBlIG5vY2htYWxzICA6IWxzICBiencuICAhZGlyLAorICAgICB1bSBEZWluZW4gVmVyemVpY2huaXNpbmhhbHQgenUgc2VoZW4uCisKKy0tLT4gQmVhY2h0ZTogd/xyZGVzdCBEdSBWaW0gamV0enQgYmVlbmRlbiB1bmQgZGFuYWNoIHdpZWRlciBtaXQgZGVtIERhdGVpbmFtZW4KKyAgICAgVEVTVCD2ZmZuZW4sIGRhbm4gd+RyZSBkaWVzZSBEYXRlaSBlaW5lIGV4YWt0ZSBLb3BpZSBkZXMgVHV0b3JzIHp1IGRlbQorICAgICBaZWl0cHVua3QsIGFscyBEdSBpaG4gZ2VzcGVpY2hlcnQgaGFzdC4KKworICA1LiBOdW4gZW50ZmVybmUgZGllIERhdGVpIGR1cmNoIEVpbmdhYmUgdm9uICAgOiFybSBURVNUICAgYnp3LiAgIDohZGVsIFRFU1QuCisKKworfn5+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+CisJCSBMZWt0aW9uIDUuMzogU0VMRUtUSVZFUyBTQ0hSRUlCRU4gVk9OIERBVEVJRU4KKworCisgICAgKiogVW0gZWluZW4gQWJzY2huaXR0IGRlciBEYXRlaSB6dSBzcGVpY2hlcm4gdGlwcGUgICA6IywjIHcgREFURUlOQU1FICoqCisKKyAgMS4gR2liIG5vY2htYWxzICA6IWxzICBiencgIDohZGlyICBlaW4sIHVtIGVpbmUgQXVmbGlzdHVuZyBEZWluZXMKKyAgICAgVmVyemVpY2huaXNzZXMgenUgZXJoYWx0ZW4gdW5kIHfkaGxlIGVpbmVuIGdlZWlnbmV0ZW4gRGF0ZWluYW1lbiB3aWUgVEVTVC4KKworICAyLiBCZXdlZ2UgZGVuIEN1cnNvciB6dW0gQW5mYW5nIGRpZXNlcyBLYXBpdGVscyB1bmQgdGlwcGUgIEN0cmwtZyAgLCB1bSBkaWUKKyAgICAgTnVtbWVyIGRpZXNlciBaZWlsZSB6dSBlcmhhbHRlbi4gUFLER0UgRElSIERJRVNFIE5VTU1FUiBFSU4hCisKKyAgMy4gTnVuIGJld2VnZSBEaWNoIHp1bSBFbmRlIGRpZXNlcyBLYXBpdGVscyB1bmQgdGlwcGUgd2llZGVyIEN0cmwtZyAuCisgICAgIFBSxEdFIERJUiBBVUNIIERJRVNFIFpFSUxFTk5VTU1FUiBFSU4hCisKKyAgNC4gVW0gTlVSIGVpbmVuIEFic2Nobml0dCBlaW5lciBEYXRlaSB6dSBzcGVpY2hlcm4sIHRpcHBlICAgOiMsIyB3IFRFU1QKKyAgICAgd29iZWkgIywjIGRpZSB6d2VpIE51bW1lcm4gc2luZCwgZGllIER1IGltIEdlZORjaHRuaXMgaGFzdCAob2JlbiwgdW50ZW4pOworICAgICB1bmQgVEVTVCBEZWluIERhdGVpbmFtZSBpc3QuCisKKyAgNS4g3GJlcnBy/GZlIHdpZWRlcnVtIG1pdCAgOiFscyAgIG9kZXIgIDohZGlyICAgbmFjaCwgZGFzcyBkaWUgRGF0ZWkKKyAgICAgZXhpc3RpZXJ0LCBhYmVyIGz2c2NoZSBzaWUgTklDSFQuCisKKworfn5+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+CisJICAgICAgTGVrdGlvbiA1LjQ6IEVJTkxFU0VOIFVORCBaVVNBTU1FTkbcSFJFTiBWT04gREFURUlFTgorCisKKwkgKiogVW0gZGVuIEluaGFsdCBlaW5lciBEYXRlaSBlaW56dWxlc2VuLCB0aXBwZSA6ciBEQVRFSU5BTUUgKioKKworICAxLiBUaXBwZSAgIDohbHMgICBiencuICAgIWRpciAsICB1bSBzaWNoZXJ6dXN0ZWxsZW4sIGRhc3MgRGVpbmUgRGF0ZWkgVEVTVAorICAgICB2b24gdm9yaGluIHZvcmhhbmRlbiBpc3QuCisKKyAgMi4gUGxhemllcmUgZGVuIEN1cnNvciBhdWYgZGVyIGVyc3RlbiBaZWlsZSBkaWVzZXMgS2FwaXRlbHMuCisKK0JFQUNIVEU6ICBOYWNoZGVtIER1IFNjaHJpdHQgMyBhdXNnZWb8aHJ0IGhhc3QsIHdpcnN0IER1IExla3Rpb24gNS4zICBzZWhlbi4KKwkgIEFuIGRpZXNlbSBQdW5rdCBiZXdlZ2UgRGljaCB3aWVkZXIgQUJXxFJUUyB6dSBkaWVzZXIgTGVrdGlvbi4KKworICAzLiBOdW4gbGllcyBEZWluZSBEYXRlaSBURVNUIGVpbiBpbmRlbSBEdSBkYXMgS29tbWFuZG8gOnIgVEVTVCAgYXVzZvxocnN0LAorICAgICB3b2JlaSBURVNUIGRlciBOYW1lIGRlciBEYXRlaSBpc3QuCisKK0JFTUVSS1VORzogIERpZSBEYXRlaSwgZGllIER1IGVpbmxpZXN0LCB3aXJkIGFuIGRlciBTdGVsbGUgZWluZ2Vm/Gd0LCBhbiBkZXIKKyAgICBzaWNoIGRlciBDdXJzb3IgYmVmaW5kZXQuCisKKyAgNC4gVW0genUg/GJlcnBy/GZlbiwgZGFzcyBlaW5lIERhdGVpIGVpbmdlbGVzZW4gd3VyZGUsIGdlaGUgenVy/GNrIHVuZAorICAgICBzZWhlLCBkYXNzIGVzIGpldHp0IHp3ZWkgS29waWVuIHZvbiBMZWt0aW9uIDUuMyBnaWJ0LCBkYXMgT3JpZ2luYWwgdW5kIGRpZQorICAgICBlaW5nZWb8Z3RlIFZlcnNpb24uCisKKworfn5+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+CisJCQkgWlVTQU1NRU5GQVNTVU5HIFZPTiBMZWt0aW9uIDUKKworCisgIDEuICA6IUtvbW1hbmRvICBm/GhydCBlaW4gZXh0ZXJuZXMgKFNoZWxsLSlLb21tYW5kbyBhdXMuCisKKyAgICAgIEVpbmlnZSBu/HR6bGljaGUgQmVpc3BpZWxlIHNpbmQKKyAgICAgIFVOSVg6CisJICA6IWxzCQkgIC0gICAgQXVmbGlzdHVuZyBkZXMgYWt0dWVsbGVuIFZlcnplaWNobmlzc2VzCisJICA6IXJtIERBVEVJTkFNRSAgLSAgICBlbnRmZXJudCBEYXRlaSBEQVRFSU5BTUUKKyAgICAgIE1TLURPUy9XaW5kb3dzOgorCSAgOiFkaXIJCSAgLSAgICBBdWZsaXN0dW5nIGRlcyBha3R1ZWxsZW4gVmVyemVpY2huaXNzZXMKKwkgIDohZGVsIERBVEVJTkFNRSAtICAgIGVudGZlcm50IERhdGVpIERBVEVJTkFNRQorCisgIDIuICA6dyBEQVRFSU5BTUUgIHNjaHJlaWJ0IGRpZSBha3R1ZWxsZSBWaW0tRGF0ZWkgYWxzIERBVEVJTkFNRSBhdWYgZGllCisgICAgICAgUGxhdHRlLgorCisgIDMuICA6IywjdyBEQVRFSU5BTUUgIHNwZWljaGVydCBkaWUgWmVpbGVuICMgYmlzICMgaW4gZGVyIERhdGVpIERBVEVJTkFNRS4KKworICA0LiAgOnIgREFURUlOQU1FICBs5GR0IGRpZSBEYXRlaSBEQVRFSU5BTUUgdm9uIGRlciBQbGF0dGUgdW5kIGb8Z3Qgc2llIGluCisgICAgICAgZGllIGFrdHVlbGxlIERhdGVpIG5hY2ggZGVyIEN1cnNvcnBvc2l0aW9uIGVpbi4KKworCit+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+fn4KKwkJICAgICAgIExla3Rpb24gNi4xOiBaRUlMRU4g1kZGTkVOIChPUEVOKQorCisKKyAgICoqIFRpcHBlICBvCSwgdW0gZWluZSBaZWlsZSB1bnRlciBkZW0gQ3Vyc29yIHp1IPZmZm5lbiB1bmQgRGljaCBpbiBkZW4gKioKKwkJCSAqKiBFaW5m/GdlbW9kdXMgenUgYmVnZWJlbi4gKioKKworICAxLiBCZXdlZ2UgZGVuIEN1cnNvciB6dSBkZXIgdW50ZW4gc3RlaGVuZGVuIFplaWxlLCBkaWUgbWl0IC0tLT4gbWFya2llcnQgaXN0LgorCisgIDIuIFRpcHBlIG8gKGtsZWluIGdlc2NocmllYmVuKSwgdW0gZWluZSBaZWlsZSBVTlRFUiBkZW0gQ3Vyc29yIGF1Znp1bWFjaGVuCisgICAgIHVuZCBEaWNoIGluIGRlbiBFaW5m/GdlbW9kdXMgenUgYmVnZWJlbi4KKworICAzLiBOdW4gdGlwcGUgZGVuIFRleHQgZGVyIG1pdCAtLS0+IG1hcmtpZXJ0ZSBaZWlsZSBhYiB1bmQgZHL8Y2tlIDxFU0M+ICwgdW0KKyAgICAgZGVuIEVpbmb8Z2Vtb2R1cyB6dSB2ZXJsYXNzZW4uCisKKy0tLT4gTWl0ICBvICB3aXJkIGRlciBDdXJzb3IgYXVmIGRlciBnZfZmZm5ldGVuIFplaWxlIGltIEVpbmdhYmVtb2R1cyBwbGF0emllcnQuCisKKyAgNC4gVW0gZWluZSBaZWlsZSDcQkVSIGRlbSBDdXJzb3IgYXVmenVtYWNoZW4sIGdpYiBlaW5mYWNoIGVpbiBncm/fZXMgIE8KKyAgICAgYW5zdGVsbGUgZWluZXMga2xlaW5lbiAgbyAgZWluLiBWZXJzdWNoZSBkaWVzIGF1ZiBkZXIgdW50ZW4gc3RlaGVuZGVuCisgICAgIFplaWxlLgor1mZmbmUgZWluZSBaZWlsZSD8YmVyIGRpZXNlciBtaXQgU2hpZnQtTyAsIHdlbm4gZGVyIEN1cnNvciBhdWYgZGllc2VyIFplaWxlIGlzdC4KKworCit+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+fn4KKwkJICAgICAgIExla3Rpb24gNi4yOiBURVhUIEFORtxHRU4gKEFQUEVORCkKKworCisJICAgICAgKiogVGlwcGUgYSAgLCB1bSBUZXh0IE5BQ0ggZGVtIEN1cnNvciBlaW56dWb8Z2VuLiAqKgorCisgIDEuIEJld2VnZSBkZW4gQ3Vyc29yIHp1bSBFbmRlIGRlciB1bnRlbiBzdGVoZW5kZW4gWmVpbGUsIGRpZSBtaXQgLS0tPgorICAgICBtYXJraWVydCBpc3QsIGluZGVtIER1IGltIE5vcm1hbC1Nb2R1cyAgJCAgIGVpbmdpYnN0LgorCisgIDIuIFRpcHBlIGVpbiAgYSAgKGtsZWluIGdlc2NocmllYmVuKSwgdW0gVGV4dCBOQUNIIGRlbSBaZWljaGVuIHVudGVyIGRlbQorICAgICBDdXJzb3IgZWluenVnZWJlbi4gIChFaW4gZ3Jv32VzIEEgZvxndCBuYWNoIGRlbSBFbmRlIGRlciBaZWlsZSBhbi4pCisKK0JlbWVya3VuZzogRGllcyBtYWNodCBlcyD8YmVyZmz8c3NpZywgZXJzdCBpIHp1IHRpcHBlbiwgZGFubiBkYXMgbGV0enRlCisJICAgWmVpY2hlbiwgZGVuIGFuenVo5G5nZW5kZW4gVGV4dCwgPEVTQz4sIEN1cnNvci1SZWNodHMsCisJICAgdW5kIHNjaGxpZd9saWNoLCB4LCBudXIgdW0gVGV4dCBhbiBlaW5lIFplaWxlIGFuenVo5G5nZW4hCisKKyAgMy4gTnVuIHZlcnZvbGxzdORuZGlnZSBkaWUgZXJzdGUgWmVpbGUuICBCZWFjaHRlIGF132VyZGVtICwgZGFzcyBBbmb8Z2VuCisgICAgIChBcHBlbmQpIGdlbmF1IGRhcyBnbGVpY2hlIGlzdCwgd2llIGRlciBFaW5m/GdlLSAoSW5zZXJ0LSkgTW9kdXMsCisgICAgIGFiZ2VzZWhlbiB2b24gZGVyIFN0ZWxsZSwgYW4gZGVtIGRlciBUZXh0IGVpbmdlZvxndCB3aXJkLgorCistLS0+IERpZXNlIFplaWxlIGJpZXRldCBHZWxlZ2VuaGVpdAorLS0tPiBEaWVzZSBaZWlsZSBiaWV0ZXQgR2VsZWdlbmhlaXQsIFRleHQgYW4gaWhyIEVuZGUgYW56dWb8Z2VuLgorCisKK35+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+fgorCSAgICBMZWt0aW9uIDYuMzogRUlORSBBTkRFUkUgVkVSU0lPTiBERVMgRVJTRVRaRU5TIChSRVBMQUNFKQorCisKKyAgICAgICAqKiBUaXBwZSBlaW4gZ3Jv32VzICBSICAsIHVtIG1laHIgYWxzIGVpbiBaZWljaGVuIHp1IGVyc2V0emVuLiAqKgorCisgIDEuIEJld2VnZSBkZW4gQ3Vyc29yIHp1ciBlcnN0ZW4gdW50ZW4gc3RlaGVuZGVuLCBtaXQgLS0tPiBtYXJraWVydGVuIFplaWxlLgorCisgIDIuIFBsYXppZXJlIGRlbiBDdXJzb3IgYXVmIGRlbiBBbmZhbmcgZGVzIGVyc3RlbiBXb3J0ZXMsIHdlbGNoZXMgc2ljaCB2b24KKyAgICAgZGVyIHp3ZWl0ZW4gbWl0IC0tLT4gbWFya2llcnRlbiBaZWlsZSB1bnRlcnNjaGVpZGV0IChkYXMgV29ydCAnYmVudXR6ZScpLgorCisgIDMuIE51biBnaWIgZWluIFIgIGVpbiwgdW5kIGVyc2V0emUgZGVuIFJlc3QgZGVzIFRleHRlcyBhdWYgZGVyIGVyc3RlbgorICAgICBaZWlsZSwgdW0gZGllc2UgZ2xlaWNoIGRlciB6d2VpdGVuIHp1IG1hY2hlbiwgaW5kZW0gRHUgZGVuIGFsdGVuIFRleHQKKyAgICAg/GJlcnNjaHJlaWJzdC4KKworLS0tPiBVbSBkaWUgZXJzdGUgWmVpbGUgZ2xlaWNoIGRlciB6d2VpdGVuIHp1IG1hY2hlbiwgYmVudXR6ZSBkaWUgVGFzdGF0dXIuCistLS0+IFVtIGRpZSBlcnN0ZSBaZWlsZSBnbGVpY2ggZGVyIHp3ZWl0ZW4genUgbWFjaGVuLCB0aXBwZSBSIHVuZCBuZXVlbiBUZXh0LgorCisgIDQuIEJlYWNodGUsIGRhc3MsIHdlbm4gRHUgenVtIFZlcmxhc3NlbiA8RVNDPiBkcvxja3N0LCBz5G10bGljaGVyCisgICAgIHVuZ2XkbmRlcnRlIFRleHQgYmVzdGVoZW4gYmxlaWJ0LgorCisKK35+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+fgorCQkJICBMZWt0aW9uIDYuNDogT1BUSU9ORU4gU0VUWkVOCisKKworICAgICAgKiogU2V0emUgZWluZSBPcHRpb24gc28sIGRhc3MgZWluZSBTdWNoZSBvZGVyIGVpbmUgRXJzZXR6dW5nIEdyb98tICoqCisJCSAgICAgICoqIHVuZCBLbGVpbnNjaHJlaWJ1bmcgaWdub3JpZXJ0ICoqCisKKworICAxLiBTdWNoZSBuYWNoICdpZ25vJywgaW5kZW0gRHUgICAgL2lnbm8gICBlaW5naWJzdC4KKyAgICAgV2llZGVyaG9sZSBkaWUgU3VjaGUgZWluaWdlIE1hbGUsIGluZGVtIER1IGRpZSBuIC0gVGFzdGUgZHL8Y2tzdC4KKworICAyLiBTZXR6ZSBkaWUgJ2ljJyAoaWdub3JlY2FzZTsgSWdub3JpZXJlIEdyb98tL0tsZWluc2NocmVpYnVuZykgLSBPcHRpb24sCisgICAgIGluZGVtIER1ICAgOnNldCBpYyAgIGVpbmdpYnN0LgorCisgIDMuIE51biBzdWNoZSB3aWVkZXIgbmFjaCAnaWdubycsIGluZGVtIER1IG4gdGlwcHN0LgorICAgICBXaWVkZXJob2xlIGRpZXNlcyBub2NoIGVpbmlnZSBNYWxlLCBpbmRlbSBEdSBkaWUgbiBUYXN0ZSBkcvxja3N0LgorCisgIDQuIFNldHplIGRpZSAnaGxzZWFyY2gnIChTdWNoZSBoZXJ2b3JoZWJlbikgdW5kICdpbmNzZWFyY2gnIChJbmtyZW1lbnRlbGxlCisgICAgIFN1Y2hlKSAtIE9wdGlvbmVuOgorICAgICA6c2V0IGhscyBpcworCisgIDUuIEpldHp0IGdpYiBkZW4gU3VjaGVuLUJlZmVobCBub2NoIGVpbm1hbCBlaW4gdW5kIGJlb2JhY2h0ZSwgd2FzIHBhc3NpZXJ0OgorICAgICAvaWdubworCisKK35+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+fgorCQkJIFpVU0FNTUVORkFTU1VORyBWT04gTGVrdGlvbiA2CisKKworICAxLiBEaWUgRWluZ2FiZSB2b24gIG8gIG1hY2h0IGVpbmUgWmVpbGUgVU5URVIgZGVtIEN1cnNvciBhdWYgdW5kCisgICAgIHBsYXR6aWVydCBkZW4gQ3Vyc29yIGF1ZiBkZXIgZ2X2ZmZuZXRlbiBaZWlsZSBpbSBFaW5m/GdlbW9kdXMuCisgICAgIERpZSBFaW5nYWJlIGVpbmVzIGdyb99lbiAgTyAg9mZmbmV0IGVpbmUgWmVpbGUg3EJFUiBkZXJqZW5pZ2VuLAorICAgICBhdWYgZGVyIHNpY2ggZGVyIEN1cnNvciBiZWZpbmRldC4KKworICAyLiBHaWIgZWluICBhICBlaW4sIHVtIFRleHQgTkFDSCBkZW0gWmVpY2hlbiwgYXVmIGRlbSBzaWNoIGRlciBDdXJzb3IKKyAgICAgYmVmaW5kZXQsIGVpbnp1ZvxnZW4uCisgICAgIERpZSBFaW5nYWJlIGVpbmVzIGdyb99lbiAgQSAgZXJsYXVidCBkYXMgQW5m/GdlbiB2b24gVGV4dCBuYWNoIGRlbQorICAgICBFbmRlIGRlciBaZWlsZS4KKworICAzLiBEaWUgRWluZ2FiZSBlaW5lcyBncm/fZW4gIFIgIHdlY2hzZWx0IGluIGRlbiBFcnNldHp1bmdzLShSZXBsYWNlKS1Nb2R1cywKKyAgICAgYmlzIHp1bSBWZXJsYXNzZW4gPEVTQz4gZWluZ2VnZWJlbiB3aXJkLgorCisgIDQuIERpZSBFaW5nYWJlIHZvbiAiOnNldCB4eHgiIHNldHp0IGRpZSBPcHRpb24gInh4eCIKKworCit+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+fn4KKwkJCSAgTGVrdGlvbiA3IDogRElFIE9OTElORS1ISUxGRQorCisJCSAgICAgKiogTnV0emUgZGFzIGVpbmdlYmF1dGUgSGlsZmVzeXN0ZW0gKioKKworICBWaW0gYmVzaXR6dCBlaW4gdW1mYXNzZW5kZXMgZWluZ2ViYXV0ZXMgSGlsZmVzeXN0ZW0uICBG/HIgZGVuIEFuZmFuZyBwcm9iaWVyZQorICBlaW5zIGRlciBkcmVpIGZvbGdlbmRlbiBEaW5nZSBhdXM6CisJLSBEcvxja2UgZGllIDxIaWxmZT4gLSBUYXN0ZSAoZmFsbHMgRHUgZWluZSBiZXNpdHp0KQorCS0gRHL8Y2tlIGRpZSA8RjE+IFRhc3RlIChmYWxscyBEdSBlaW5lIGJlc2l0enQpCisJLSBUaXBwZSAgIDpoZWxwIDxFTlRFUj4KKworICBUaXBwZSAgIDpxIDxFTlRFUj4gICwgdW0gZGFzIEhpbGZlZmVuc3RlciB6dSBzY2hsaWXfZW4uCisKKyAgRHUga2FubnN0IEhpbGZlIPxiZXIgcHJha3Rpc2NoIGplZGVzIFRoZW1hIGZpbmRlbiwgaW5kZW0gRHUgZGVtICI6aGVscCIKKyAgS29tbWFuZG8gZWluIEFyZ3VtZW50IGdpYnN0LiAgUHJvYmllcmUgZm9sZ2VuZGVzICg8RU5URVI+IG5pY2h0IHZlcmdlc3Nlbik6CisKKyAgOmhlbHAgdworICA6aGVscCBjXzxUCisgIDpoZWxwIGluc2VydC1pbmRleAorICA6aGVscCB1c2VyLW1hbnVhbAorCisKK35+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+fgorCQkgICAgICBMZWt0aW9uIDg6IEVSU1RFTExFIEVJTiBTVEFSVC1TS1JJUFQKKworCQkgKiogIEFrdGl2aWVyZSBkaWUgRnVua3Rpb25hbGl05HRlbiB2b24gVmltICoqCisKKyAgVmltIGJlc2l0enQgdmllbGUgRnVua3Rpb25hbGl05HRlbiwgZGllIPxiZXIgVmkgaGluYXVzZ2VoZW4sIGFiZXIgZGllIG1laXN0ZW4KKyAgdm9uIGlobmVuIHNpbmQgc3RhbmRhcmRt5N9pZyBkZWFrdGl2aWVydC4KKyAgVW0gZGllc2UgenUgYWt0aXZpZXJlbiwgbXVzc3QgRHUgZWluZSAidmltcmMiIC0gRGF0ZWkgZXJzdGVsbGVuLgorCisxLiBTdGFydGUgZGFzIEVkaXRpZXJlbiBkZXIgInZpbXJjIi1EYXRlaSwgZGllcyBpc3Qgdm9uIERlaW5lbSBTeXN0ZW0gYWJo5G5naWc6CisJOmVkaXQgfi8udmltcmMJCQlm/HIgVW5peAorCTplZGl0ICRWSU0vX3ZpbXJjCQlm/HIgTVMtV2luZG93cworCisyLiBOdW4gbGllcyBkaWUgQmVpc3BpZWwgLSAidmltcmMiIGVpbjoKKworCTpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKzMuIFNwZWljaGVyZSBkaWUgRGF0ZWkgbWl0OgorCisJOndyaXRlCisKK0RhcyBu5GNoc3RlIE1hbCwgd2VubiBEdSBWaW0gc3RhcnRlc3QsIHdpcmQgZGllIFN5bnRheC1IZXJ2b3JoZWJ1bmcKK2FrdGl2aWVydCBzZWluLgorRHUga2FubnN0IGFsbCBEZWluZSBMaWVibGluZ3NvcHRpb25lbiB6dSBkaWVzZXIgInZpbXJjIiAtIERhdGVpIHp1ZvxnZW4uCisKKworfn5+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+CisKKyAgRGFtaXQgaXN0IGRlciBWaW0gVHV0b3IgYmVlbmRldC4gIERpZSBJbnRlbnRpb24gd2FyLCBlaW5lbiBrdXJ6ZW4gdW5kCisgIGL8bmRpZ2VuINxiZXJibGljayD8YmVyIGRlbiBWaW0gRWRpdG9yIHp1IGxpZWZlcm47IGdlcmFkZSBnZW51ZywgdW0gcmVsYXRpdgorICBsZWljaHQgbWl0IGlobSB1bWdlaGVuIHp1IGv2bm5lbi4KKyAgRGVyIFZpbSBUdXRvciBoYXQgbmljaHQgZGVuIGdlcmluZ3N0ZW4gQW5zcHJ1Y2ggYXVmIFZvbGxzdORuZGlna2VpdDsKKyAgVmltIGhhdCBub2NoIHdlaXRhdXMgbWVociBLb21tYW5kb3MuCisgIFdhZ2UgRGljaCBhbHMgbuRjaHN0ZXMgYW4gZGFzIFVzZXIgTWFudWFsOiAiOmhlbHAgdXNlci1tYW51YWwiLgorCisgIEb8ciB3ZWl0ZXJlcyBMZXNlbiB1bmQgTGVybmVuIGthbm4gZm9sZ2VuZGVzIEJ1Y2ggZW1wZm9obGVuIHdlcmRlbjoKKwlWaW0gLSBWaSBJbXByb3ZlZCAtIHZvbiBTdGV2ZSBPdWFsbGluZQorCVZlcmxhZzogTmV3IFJpZGVycworICBEYXMgZXJzdGUgQnVjaCwgZGFzcyBkdXJjaGfkbmdpZyBWaW0gZ2V3aWRtZXQgaXN0LiAgQmVzb25kZXJzIG78dHpsaWNoCisgIGb8ciBBbmbkbmdlci4KKyAgVmllbGUgQmVpc3BpZWxlIHVuZCBCaWxkZXIgc2luZCBlbnRoYWx0ZW4uCisgIFNpZWhlIGh0dHA6Ly93d3cuaWNjZi5ubC9jbGljazUuaHRtbAorCisgIEZvbGdlbmRlcyBCdWNoIGlzdCDkbHRlciB1bmQgbWVociD8YmVyIFZpIGFscyBWaW0sIGFiZXIgYXVjaCBlbXBmZWhsZW5zd2VydDoKKwlMaW5kYSBMYW1iIHVuZCBBcm5vbGQgUm9iYmlucworCVRleHRiZWFyYmVpdHVuZyBtaXQgZGVtIHZpLUVkaXRvcgorCVZlcmxhZyBPJ1JlaWxseSAtIElTQk46IDM4OTcyMTEyNjIKKyAgSW4gZGllc2VtIEJ1Y2gga2FubiBtYW4gZmFzdCBhbGxlcyBmaW5kZW4sIHdhcyBtYW4gbWl0IFZpIHR1biBt9mNodGUuCisgIERpZSBzZWNoc3RlIEF1c2dhYmUgZW50aORsdCBhdWNoIEluZm9ybWF0aW9uZW4g/GJlciBWaW0uCisKKyAgRGllc2VzIFR1dG9yaWFsIHd1cmRlIGdlc2NocmllYmVuIHZvbiBNaWNoYWVsIEMuIFBpZXJjZSBhbmQgUm9iZXJ0IEsuIFdhcmUsCisgIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcy4gRXMgYmVudXR6dCBJZGVlbiwgZGllIENoYXJsZXMgU21pdGgsCisgIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHksIHp1ciBWZXJm/Gd1bmcgc3RlbGx0ZS4KKyAgRS1tYWlsOiBid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUuCisKKyAgQmVhcmJlaXRldCBm/HIgVmltIHZvbiBCcmFtIE1vb2xlbmFhci4KKworICBEZXV0c2NoZSDcYmVyc2V0enVuZyB2b24gSm9hY2hpbSBIb2ZtYW5uLCBTZXB0ZW1iZXIgMjAwMi4KKyAgRS1tYWlsOiBKb2FjaGltLkhvZkBnbXguZGUKK35+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+fgpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci90dXRvci5lcyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkYjEzZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuZXMKQEAgLTAsMCArMSw3NjkgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAgIEIgaSBlIG4gdiBlIG4gaSBkIG8gICBhIGwgICB0IHUgdCBvIHIgICBkIGUgICBWIEkgTSAgLSAgVmVyc2nzbiAxLjQgICAgID0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICBWaW0gZXMgdW4gZWRpdG9yIG11eSBwb3RlbnRlIHF1ZSBkaXNwb25lIGRlIG11Y2hvcyBtYW5kYXRvcywgZGVtYXNpYWRvcworICAgICBwYXJhIHNlciBleHBsaWNhZG9zIGVuIHVuIHR1dG9yIGNvbW8g6XN0ZS4gRXN0ZSB0dXRvciBlc3ThIGRpc2XxYWRvCisgICAgIHBhcmEgZGVzY3JpYmlyIHN1ZmljaWVudGVzIG1hbmRhdG9zIHBhcmEgcXVlIHVzdGVkIHNlYSBjYXBheiBkZQorICAgICBhcHJlbmRlciBm4WNpbG1lbnRlIGEgdXNhciBWaW0gY29tbyB1biBlZGl0b3IgZGUgcHJvcPNzaXRvIGdlbmVyYWwuCisKKyAgICAgRWwgdGllbXBvIG5lY2VzYXJpbyBwYXJhIGNvbXBsZXRhciBlbCB0dXRvciBlcyBhcHJveGltYWRhbWVudGUgZGUgMjUtMzAKKyAgICAgbWludXRvcywgZGVwZW5kaWVuZG8gZGUgY3VhbnRvIHRpZW1wbyBzZSBkZWRpcXVlIGEgbGEgZXhwZXJpbWVudGFjafNuLgorCisgICAgIExvcyBtYW5kYXRvcyBkZSBlc3RhcyBsZWNjaW9uZXMgbW9kaWZpY2Fy4W4gZWwgdGV4dG8uIEhhZ2EgdW5hIGNvcGlhIGRlCisgICAgIGVzdGUgZmljaGVybyBwYXJhIHByYWN0aWNhciAoY29uIKt2aW10dXRvcrsgZXN0byB5YSBlcyB1bmEgY29waWEpLgorCisgICAgIEVzIGltcG9ydGFudGUgcmVjb3JkYXIgcXVlIGVzdGUgdHV0b3IgZXN04SBwZW5zYWRvIHBhcmEgZW5zZfFhciBjb24KKyAgICAgbGEgcHLhY3RpY2EuIEVzdG8gc2lnbmlmaWNhIHF1ZSBlcyBuZWNlc2FyaW8gZWplY3V0YXIgbG9zIG1hbmRhdG9zCisgICAgIHBhcmEgYXByZW5kZXJsb3MgYWRlY3VhZGFtZW50ZS4gU2kg+m5pY2FtZW50ZSBzZSBsZWUgZWwgdGV4dG8sIHNlCisgICAgIG9sdmlkYXLhbiBsb3MgbWFuZGF0b3MuCisKKyAgICAgQWhvcmEsIGFzZWf6cmVzZSBkZSBxdWUgbGEgdGVjbGEgZGUgYmxvcXVlbyBkZSBtYXn6c2N1bGFzIG5vIGVzdOEKKyAgICAgYWN0aXZhZGEgeSBwdWxzZSBsYSB0ZWNsYQlqICBsbyBzdWZpY2llbnRlIHBhcmEgbW92ZXIgZWwgY3Vyc29yCisgICAgIGRlIGZvcm1hIHF1ZSBsYSBMZWNjafNuIDEuMSBvY3VwZSBjb21wbGV0YW1lbnRlIGxhIHBhbnRhbGxhLgorfn5+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+CisJCSAgICAgTGVjY2nzbiAxLjE6IE1PVklNSUVOVE9TIERFTCBDVVJTT1IKKworICoqIFBhcmEgbW92ZXIgZWwgY3Vyc29yLCBwdWxzZSBsYXMgdGVjbGFzIGgsaixrLGwgZGUgbGEgZm9ybWEgcXVlIHNlIGluZGljYS4gKioKKyAgICAgIF4KKyAgICAgIGsgICAgICAgSW5kaWNhY2nzbjogTGEgdGVjbGEgaCBlc3ThIGEgbGEgaXpxdWllcmRhIHkgbXVldmUgYSBsYSBpenF1aWVyZGEuCisgPCBoCSBsID4JCSAgTGEgdGVjbGEgbCBlc3ThIGEgbGEgZGVyZWNoYSB5IG11ZXZlIGEgbGEgZGVyZWNoYS4KKyAgICAgIGoJCQkgIExhIHRlY2xhIGogcGFyZWNlIHVuYSBmbGVjaGEgcXVlIGFwdW50YSBoYWNpYSBhYmFqby4KKyAgICAgIHYKKworICAxLiBNdWV2YSBlbCBjdXJzb3IgcG9yIGxhIHBhbnRhbGxhIGhhc3RhIHF1ZSBzZSBzaWVudGEgY/Ntb2RvIGNvbiBlbGxvLgorCisgIDIuIE1hbnRlbmdhIHB1bHNhZGEgbGEgdGVjbGEJaiAgaGFzdGEgcXVlIHNlIHJlcGl0YSCrYXV0b23hZ2ljYW1lbnRluy4KKy0tLT4gQWhvcmEgeWEgc2FiZSBjb21vIGxsZWdhciBhIGxhIGxlY2Np824gc2lndWllbnRlLgorCisgIDMuIFV0aWxpemFuZG8gbGEgdGVjbGEgYWJham8sIHZheWEgYSBsYSBMZWNjafNuIDEuMi4KKworTm90YTogU2kgYWxndW5hIHZleiBubyBlc3ThIHNlZ3VybyBzb2JyZSBhbGdvIHF1ZSBoYSB0ZWNsZWFkbywgcHVsc2UgPEVTQz4KKyAgICAgIHBhcmEgc2l0dWFyc2UgZW4gbW9kbyBOb3JtYWwuIEx1ZWdvIHZ1ZWx2YSBhIHRlY2xlYXIgbGEgb3JkZW4gcXVlIGRlc2VhYmEuCisKK05vdGE6IExhcyB0ZWNsYXMgZGUgbW92aW1pZW50byBkZWwgY3Vyc29yIHRhbWJp6W4gZnVuY2lvbmFuLiBQZXJvIHVzYW5kbworICAgICAgaGprbCBwb2Ry4SBtb3ZlcnNlIG11Y2hvIG3hcyBy4XBpZG8gdW5hIHZleiBxdWUgc2UgYWNvc3R1bWJyZSBhIGVsbG8uCisKK35+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+fgorCQkgICAgTGVjY2nzbiAxLjI6IEVOVFJBTkRPIFkgU0FMSUVORE8gREUgVklNCisKKyAgoaEgTk9UQTogQW50ZXMgZGUgZWplY3V0YXIgYWxndW5vIGRlIGxvcyBwYXNvcyBzaWd1aWVudGVzIGxlYSBwcmltZXJvCisJICAgbGEgbGVjY2nzbiBlbnRlcmEhIQorCisgIDEuIFB1bHNlIGxhIHRlY2xhIDxFU0M+IChwYXJhIGFzZWd1cmFyc2UgZGUgcXVlIGVzdOEgZW4gbW9kbyBOb3JtYWwpLgorCisgIDIuIEVzY3JpYmE6CQkJOnEhIDxJTlRSTz4KKworLS0tPiBFc3RvIHByb3ZvY2EgbGEgc2FsaWRhIGRlbCBlZGl0b3IgU0lOIGd1YXJkYXIgbmluZ/puIGNhbWJpbyBxdWUgc2UgaGF5YQorICAgICBoZWNoby4gU2kgcXVpZXJlIGd1YXJkYXIgbG9zIGNhbWJpb3MgeSBzYWxpciBlc2NyaWJhOgorCQkJCTp3cSA8SU5UUk8+CisKKyAgMy4gQ3VhbmRvIHZlYSBlbCBz7W1ib2xvIGRlbCBzaXN0ZW1hLCBlc2NyaWJhIGVsIG1hbmRhdG8gcXVlIGxlIHRyYWpvIGEgZXN0ZQorICAgICB0dXRvci4gyXN0ZSBwdWVkZSBoYWJlciBzaWRvOiAgIHZpbXR1dG9yIDxJTlRSTz4KKyAgICAgTm9ybWFsbWVudGUgc2UgdXNhcu1hOgkgICAgIHZpbSB0dXRvciA8SU5UUk8+CisKKy0tLT4gJ3ZpbScgc2lnbmlmaWNhIGVudHJhciBhbCBlZGl0b3IsICd0dXRvcicgZXMgZWwgZmljaGVybyBhIGVkaXRhci4KKworICA0LiBTaSBoYSBtZW1vcml6YWRvIGVzdG9zIHBhc29zIHkgc2Ugc2Ugc2llbnRlIGNvbiBjb25maWFuemEsIGVqZWN1dGUgbG9zCisgICAgIHBhc29zIDEgYSAzIHBhcmEgc2FsaXIgeSB2b2x2ZXIgYSBlbnRyYXIgYWwgZWRpdG9yLiBEZXNwdelzIG11ZXZhIGVsCisgICAgIGN1cnNvciBoYXN0YSBsYSBMZWNjafNuIDEuMy4KK35+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+fgorCQkgICBMZWNjafNuIDEuMzogRURJQ0nTTiBERSBURVhUTyAtIEJPUlJBRE8KKworKiogRXN0YW5kbyBlbiBtb2RvIE5vcm1hbCBwdWxzZSAgeCAgcGFyYSBib3JyYXIgZWwgY2Fy4WN0ZXIgc29icmUgZWwgY3Vyc29yLiAqKmoKKworCisgIDEuIE11ZXZhIGVsIGN1cnNvciBhIGxhIGztbmVhIGRlIGFiYWpvIHNl8WFsYWRhIGNvbiAtLS0+LgorCisgIDIuIFBhcmEgY29ycmVnaXIgbG9zIGVycm9yZXMsIG11ZXZhIGVsIGN1cnNvciBoYXN0YSBxdWUgZXN06SBiYWpvIGVsCisgICAgIGNhcuFjdGVyIHF1ZSB2YSBhc2VyIGJvcnJhZG8uCisKKyAgMy4gUHVsc2UgbGEgdGVjbGEgIHgJcGFyYSBib3JyYXIgZWwgY2Fy4WN0ZXIgc29icmFudGUuCisKKyAgNC4gUmVwaXRhIGxvcyBwYXNvcyAyIGEgNCBoYXN0YSBxdWUgbGEgZnJhc2Ugc2VhIGxhIGNvcnJlY3RhLgorCistLS0+IExhIHZ2YWNhIHNhbHTz8yBzb29icmVlIGxhYSBsdXV1dW5hLgorCisgIDUuIEFob3JhIHF1ZSBsYSBs7W5lYSBlc3RhIGNvcnJlY3RhLCBjb250aW76ZSBjb24gbGEgTGVjY2nzbiAxLjQuCisKKworTk9UQTogQSBtZWRpZGEgcXVlIHZheWEgYXZhbnphbmRvIGVuIGVzdGUgdHV0b3Igbm8gaW50ZW50ZSBtZW1vcml6YXIsCisgICAgICBhcHJlbmRhIHByYWN0aWNhbmRvLgorCit+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+fn4KKwkJICAgTGVjY2nzbiAxLjQ6IEVESUNJ004gREUgVEVYVE8gLSBJTlNFUkNJ004KKworICAgICAgKiogRXN0YW5kbyBlbiBtb2RvIE5vcm1hbCBwdWxzZSAgaSAgcGFyYSBpbnNlcnRhciB0ZXh0by4gKioKKworCisgIDEuIE11ZXZhIGVsIGN1cnNvciBhIGxhIHByaW1lcmEgbO1uZWEgZGUgYWJham8gc2XxYWxhZGEgY29uIC0tLT4uCisKKyAgMi4gUGFyYSBxdWUgbGEgcHJpbWVyYSBs7W5lYSBzZSBpZ3VhbCBhIGxhIHNlZ3VuZGEgbXVldmEgZWwgY3Vyc29yIGJham8gZWwKKyAgICAgcHJpbWVyIGNhcuFjdGVyIHF1ZSBzaWd1ZSBhbCB0ZXh0byBxdWUgaGEgZGUgc2VyIGluc2VydGFkby4KKworICAzLiBQdWxzZSAgaSAgeSBlc2NyaWJhIGxvcyBjYXJhY3RlcmVzIGEgYfFhZGlyLgorCisgIDQuIEEgbWVkaWRhIHF1ZSBzZWEgY29ycmVnaWRvIGNhZGEgZXJyb3IgcHVsc2UgPEVTQz4gcGFyYSB2b2x2ZXIgYWwgbW9kbworICAgICBOb3JtYWwuIFJlcGl0YSBsb3MgcGFzb3MgMiBhIDQgcGFyYSBjb3JyZWdpciBsYSBmcmFzZS4KKworLS0tPiBGbHRhIHRleHRvIGVuIGVzdGEgLgorLS0tPiBGYWx0YSBhbGdvIGRlIHRleHRvIGVuIGVzdGEgbO1uZWEuCisKKyAgNS4gQ3VhbmRvIHNlIHNpZW50YSBj821vZG8gaW5zZXJ0YW5kbyB0ZXh0byBwYXNlIGFsIHJlc3VtZW4gcXVlIGVzdGEgbeFzCisgICAgIGFiYWpvLgorCisKK35+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+fgorCQkJICAgIFJFU1VNRU4gREUgTEEgTEVDQ0nTTiAxCisKKworICAxLiBFbCBjdXJzb3Igc2UgbXVldmUgdXRpbGl6YW1kbyBsYXMgdGVjbGFzIGRlIGxhcyBmbGVjaGFzIG8gbGFzIHRlY2xhcyBoamtsLgorCSBoIChpenF1aWVyZGEpCSAgIGogKGFiYWpvKQkgIGsgKGFycmliYSkJICBsIChkZXJlY2hhKQorCisgIDIuIFBhcmEgYWNjZWRlciBhIFZpbSAoZGVzZGUgZWwgc+1tYm9sbyBkZWwgc2lzdGVtYSAlKSBlc2NyaWJhOgorICAgICB2aW4gRklMRU5BTUUgPElOVFJPPgorCisgIDMuIFBhcmEgc2FsaXIgZGUgVmltIGVzY3JpYmE6IDxFU0M+IDpxISA8SU5UUk8+IHBhcmEgZWxpbWluYXIgdG9kb3MKKyAgICAgbG9zIGNhbWJpb3MuCisKKyAgNC4gUGFyYSBib3JyYXIgdW4gY2Fy4WN0ZXIgc29icmUgZWwgY3Vyc29yIGVuIG1vZG8gTm9ybWFsIHB1bHNlOiAgeAorCisgIDUuIFBhcmEgaW5zZXJ0YXIgdGV4dG8gZW4gbGEgcG9zaWNp824gZGVsIGN1cnNvciBlc3RhbmRvIGVuIG1vZG8gTm9ybWFsOgorCSAgcHVsc2UgICBpICAgZXNjcmliYSBlbCB0ZXh0bwkgcHVsc2UgPEVTQz4KKworTk9UQTogUHVsc2FuZG8gPEVTQz4gc2UgdnVlbHZlIGFsIG1vZG8gTm9ybWFsIG8gY2FuY2VsYSB1biBtYW5kYXRvIG5vIGRlc2VhZG8KKyAgICAgIG8gaW5jb21wbGV0by4KKworQWhvcmEgY29udGlu+mUgY29uIGxhIExlY2Np824gMi4KKworfn5+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+CisJCSAgICAgTGVjY2nzbiAyLjE6ICBNQU5EQVRPUyBQQVJBIEJPUlJBUgorCisKKyAgICAgICAqKiBFc2NyaWJhIGR3IHBhcmEgYm9ycmFyIGhhc3RhIGVsIGZpbmFsIGRlIHVuYSBwYWxhYnJhICoqCisKKworICAxLiBQdWxzZSA8RVNDPiBwYXJhIGFzZWd1cmFyc2UgZGUgcXVlIGVzdOEgZW4gZWwgbW9kbyBOb3JtYWwuCisKKyAgMi4gTXVldmEgZWwgY3Vyc29yIGEgbGEgbO1uZWEgZGUgYWJham8gc2XxYWxhZGEgY29uIC0tLT4uCisKKyAgMy4gTXVldmEgZWwgY3Vyc29yIGFsIGNvbWllbnpvIGRlIHVuYSBwYWxhYnJhIHF1ZSBkZXNlZSBib3JyYXIuCisKKyAgNC4gUHVsc2UgICBkdyAgIHBhcmEgaGFjZXIgcXVlIGxhIHBhbGFicmEgZGVzYXBhcmV6Y2EuCisKKworICBOT1RBOiBMYXMgbGV0cmFzICAgZHcgICBhcGFyZWNlcuFuIGVuIGxhIPpsdGltYSBs7W5lYSBkZSBsYSBwYW50YWxsYSBjdWFuZG8KKwlsYXMgZXNjcmliYS4gU2kgZXNjcmliZSBhbGdvIGVxdWl2b2NhZG8gcHVsc2UgPEVTQz4geSBjb21pZW5jZSBkZSBudWV2by4KKworCistLS0+IEhheSBhbGd1bmFzIHBhbGFicmFzIHDhc2FsbyBiaWVuIHF1ZSBubyBwZXJ0ZW5lY2VuIHBhcGVsIGEgZXN0YSBmcmFzZS4KKworCit+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+fn4KKwkJICAgIExlY2Np824gMi4yOiBNwVMgTUFOREFUT1MgUEFSQSBCT1JSQVIKKworCisJICAqKiBFc2NyaWJhICBkJCAgcGFyYSBib3JyYXIgaGFzdGEgZWwgZmluYWwgZGUgbGEgbO1uZWEuICoqCisKKworICAxLiBQdWxzZSAgPEVTQz4gIHBhcmEgYXNlZ3VyYXJzZSBkZSBxdWUgZXN04SBlbiBlbCBtb2RvIE5vcm1hbC4KKworICAyLiBNdWV2YSBlbCBjdXJzb3IgYSBsYSBs7W5lYSBkZSBhYmFqbyBzZfFhbGFkYSBjb24gLS0tPi4KKworICAzLiBNdWV2YSBlbCBjdXJzb3IgYWwgZmluYWwgZGUgbGEgbO1uZWEgY29ycmVjdGEgKERFU1BVyVMgZGVsIHByaW1lciAuICkuCisKKyAgNC4gRXNjcmliYSAgZCQgIHBhcmEgYm9ycmFyIGhhc3RhIGVsIGZpbmFsIGRlIGxhIGztbmVhLgorCistLS0+IEFsZ3VpZW4gaGEgZXNjcml0byBlbCBmaW5hbCBkZSBlc3RhIGztbmVhIGRvcyB2ZWNlcy4gZXN0YSBs7W5lYSBkb3MgdmVjZXMuCisKKworCisKKworCisKK35+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+fgorCQkgICAgTGVjY2nzbiAyLjM6IFNPQlJFIE1BTkRBVE9TIFkgT0JKRVRPUworCisKKyAgRWwgZm9ybWF0byBkZWwgbWFuZGF0byBkZSBib3JyYXIgICBkCSBlcyBjb21vIHNpZ3VlOgorCisJIFtu+m1lcm9dICAgZAlvYmpldG8JICAgIE8JICAgICBkCSBbbvptZXJvXSAgIG9iamV0bworICBkb25kZToKKyAgIG76bWVybyAtIGVzIGN14W50YXMgdmVjZXMgc2UgaGEgZGUgZWplY3V0YXIgZWwgbWFuZGF0byAob3BjaW9uYWwsIGRlZmVjdG89MSkuCisgICBkIC0gZXMgZWwgbWFuZGF0byBwYXJhIGJvcnJhci4KKyAgIG9iamV0byAtIGVzIHNvYnJlIGxvIHF1ZSBlbCBtYW5kYXRvIHZhIGEgb3BlcmFyIChsaXN0YSwgYWJham8pLgorCisgIFVuYSBsaXN0YSBjb3J0YSBkZSBvYmpldG9zOgorICAgdyAtIGRlc2RlIGVsIGN1cnNvciBoYXN0YSBlbCBmaW5hbCBkZSBsYSBwYWxhYnJhLCBpbmNsdXllbmRvIGVsIGVzcGFjaW8uCisgICBlIC0gZGVzZGUgZWwgY3Vyc29yIGhhc3RhIGVsIGZpbmFsIGRlIGxhIHBhbGFicmEsIFNJTiBpbmNsdWlyIGVsIGVzcGFjaW8uCisgICAkIC0gZGVzZGUgZWwgY3Vyc29yIGhhc3RhIGVsIGZpbmFsIGRlIGxhIGztbmVhLgorCitOT1RFOiBQYXJhIGxvcyBhdmVudHVyZXJvcywgcHVsc2FuZG8gc/NsbyBlbCBvYmpldG8gZXN0YW5kbyBlbiBtb2RvIE5vcm1hbAorICAgICAgc2luIHVuIG1hbmRhdG8gbW92ZXLhIGVsIGN1cnNvciBjb21vIHNlIGVzcGVjaWZpY2EgZW4gbGEgbGlzdGEgZGUgb2JqZXRvcy4KKworCisKK35+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+fgorCSAgICAgICBMZWNjafNuIDIuNDogVU5BIEVYQ0VQQ0nTTiBBTCAnTUFOREFUTy1PQkpFVE8nCisKKwkgICAqKiBFc2NyaWJhCWRkICAgcGFyYSBib3JyYXIgdW5hIGztbmVhIGVudGVyYS4gKioKKworICBEZWJpZG8gYSBsYSBmcmVjdWVuY2lhIGNvbiBxdWUgc2UgYm9ycmFuIGztbmVhcyBlbnRlcmFzLCBsb3MgZGlzZfFhZG9yZXMKKyAgZGUgVmltIGRlY2lkaWVyb24gcXVlIHNlcu1hIG3hcyBm4WNpbCBlbCBlc2NyaWJpciBzaW1wbGVtZW50ZSBkb3MgZGVzIGVuCisgIHVuYSBmaWxhIHBhcmEgYm9ycmFyCXVuYSBs7W5lYS4KKworICAxLiBNdWV2YSBlbCBjdXJzb3IgYSBsYSBzZWd1bmRhIGztbmVhIGRlIGxhIGxpc3RhIGRlIGFiYWpvLgorICAyLiBFc2NyaWJhICBkZCAgcGFyYSBib3JyYXIgbGEgbO1uZWEuCisgIDMuIE116XZhc2UgYWhvcmEgYSBsYSBjdWFydGEgbO1uZWEuCisgIDQuIEVzY3JpYmEgICAyZGQgICAocmVjdWVyZGUJbvptZXJvLW1hbmRhdG8tb2JqZXRvKSBwYXJhIGJvcnJhciBsYXMgZG9zCisgICAgIGztbmVhcy4KKworICAgICAgMSkgTGFzIHJvc2FzIHNvbiByb2phcywKKyAgICAgIDIpIEVsIGJhcnJvIGVzIGRpdmVydGlkbywKKyAgICAgIDMpIEVsIGNpZWxvIGVzIGF6dWwsCisgICAgICA0KSBZbyB0ZW5nbyB1biBjb2NoZSwKKyAgICAgIDUpIExvcyByZWxvamVzIG1hcmNhbiBsYSBob3JhLAorICAgICAgNikgRWwgYXp1Y2FyIGVzIGR1bGNlLAorICAgICAgNykgWSBhc+0gZXJlcyB0dS4KKworfn5+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+CisJCSAgICAgICBMZWNjafNuIDIuNTogRUwgTUFOREFUTyBERVNIQUNFUgorCisKKyAgICoqIFB1bHNlICB1CXBhcmEgZGVzaGFjZXIgbG9zIPpsdGltb3MgbWFuZGF0b3MsCisJICAgICBVCXBhcmEgZGVzaGFjZXIgdW5hIGztbmVhIGVudGVyYS4gICAgICAgKioKKworICAxLiBNdWV2YSBlbCBjdXJzb3IgYSBsYSBs7W5lYSBkZSBhYmFqbyBzZfFhbGFkYSBjb24gLS0tPiB5IHNpdPplbG8gYmFqbyBlbAorICAgICBwcmltZXIgZXJyb3IuCisgIDIuIFB1bHNlICB4ICBwYXJhIGJvcnJhciBlbCBwcmltZXIgY2Fy4XRlciBlcnLzbmVvLgorICAzLiBQdWxzZSBhaG9yYSAgdSAgcGFyYSBkZXNoYWNlciBlbCD6bHRpbW8gbWFuZGF0byBlamVjdXRhZG8uCisgIDQuIEFob3JhIGNvcnJpamEgdG9kb3MgbG9zIGVycm9yZXMgZGUgbGEgbO1uZWEgdXNhbmRvIGVsIG1hbmRhdG8gIHguCisgIDUuIFB1bHNlIGFob3JhICBVICBtYXn6c2N1bGEgcGFyYSBkZXZvbHZlciBsYSBs7W5lYSBhIHN1IGVzdGFkbyBvcmlnaW5hbC4KKyAgNi4gUHVsc2UgYWhvcmEgIHUgIHVuYXMgcG9jYXMgdmVjZXMgcGFyYSBkZXNoYWNlciBsbyBoZWNobyBwb3IgIFUgIHkgbG9zCisgICAgIG1hbmRhdG9zIHByZXZpb3MuCisgIDcuIEFob3JhIHB1bHNlIENUUkwtUiAobWFudGVuZ2EgcHVsc2FkYSBsYSB0ZWNsYSBDVFJMIHkgcHVsc2UgUikgdW5hcworICAgICBwb2NhcyB2ZWNlcyBwYXJhIHZvbHZlciBhIGVqZWN1dGFyIGxvcyBtYW5kYXRvcyAoZGVzaGFjZXIgbG8gZGVzaGVjaG8pLgorCistLS0+IENvcnJyaWphIGxvcyBlcnJvcmVzIGRlZSBlc3R0dGEgbO1uZWEgeSB2dXVlbHZhIGEgcG9uZXJsb3MgY29vbiBkZXNoYWNlci4KKworICA4LiBFc3RvcyBtYW5kYXRvcyBzb24gbXV5IPp0aWxlcy4gQWhvcmEgcGFzZSBhbCByZXN1bWVuIGRlIGxhIExlY2Np824gMi4KKworfn5+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+CisJCQkgICAgUkVTVU1FTiBERSBMQSBMRUNDSdNOIDIKKworICAxLiBQYXJhIGJvcnJhciBkZXNkZSBlbCBjdXJzb3IgaGFzdGEgZWwgZmluYWwgZGUgdW5hIHBhbGFicmEgcHVsc2U6CWR3CisKKyAgMi4gUGFyYSBib3JyYXIgZGVzZGUgZWwgY3Vyc29yIGhhc3RhIGVsIGZpbmFsIGRlIHVuYSBs7W5lYSBwdWxzZToJZCQKKworICAzLiBQYXJhIGJvcnJhciB1bmEgbO1uZWEgZW50ZXIgcHVsc2U6ICAgIGRkCisKKyAgNC4gRWwgZm9ybWF0byBkZSB1biBtYW5kYXRvIGVuIG1vZG8gTm9ybWFsIGVzOgorCisgICAgICAgW276bWVyb10gICBtYW5kYXRvICAgb2JqZXRvICAgTwkgbWFuZGF0byAgIFtu+m1lcm9dICAgb2JqZXRvCisgICAgIGRvbmRlOgorICAgICAgIG76bWVybyAtIGVzIGN14W50YXMgdmVjZXMgc2UgaGEgZGUgZWplY3V0YXIgZWwgbWFuZGF0bworICAgICAgIG1hbmRhdG8gLSBlcyBsbyBxdWUgaGF5IHF1ZSBoYWNlciwgcG9yIGVqZW1wbG8sIGQgcGFyYSBib3JyYXIKKyAgICAgICBvYmpldG8gLSBlcyBzb2JyZSBsbyBxdWUgZWwgbWFuZGF0byB2YSBhIG9wZXJhciwgcG9yIGVqZW1wbG8KKwkJdyAocGFsYWJyYSksICQgKGhhc3RhIGVsIGZpbmFsIGRlIGxhIGztbmVhKSwgZXRjLgorCisgIDUuIFBhcmEgZGVzaGFjZXIgYWNjaW9uZXMgcHJldmlhcyBwdWxzZToJCSB1ICh1IG1pbvpzY3VsYSkKKyAgICAgUGFyYSBkZXNoYWNlciB0b2RvcyBsb3MgY2FtYmlvcyBkZSB1bmEgbO1uZWEgcHVsc2U6IFUgKFUgbWF5+nNjdWxhKQorICAgICBQYXJhIGRlc2hhY2VyIGxvIGRlc2hlY2hvIHB1bHNlOgkJCSBDVFJMLVIKKworCit+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+fn4KKwkJCSBMZWNjafNuIDMuMTogRUwgTUFOREFUTyCrUFVUuyAocG9uZXIpCisKKyAgKiogUHVsc2UgcCBwYXJhIHBvbmVyIGxvIPpsdGltbyBxdWUgaGEgYm9ycmFkbyBkZXNwdelzIGRlbCBjdXJzb3IuICoqCisKKyAgMS4gTXVldmEgZWwgY3Vyc29yIGFsIGZpbmFsIGRlIGxhIGxpc3RhIGRlIGFiYWpvLgorCisgIDIuIEVzY3JpYmEgIGRkICBwYXJhIGJvcnJhciBsYSBs7W5lYSB5IGFsbWFjZW5hcmxhIGVuIGVsIGJ1ZmZlciBkZSBWaW0uCisKKyAgMy4gTXVldmEgZWwgY3Vyc29yIGEgbGEgbO1uZWEgcXVlIGRlYmUgcXVlZGFyIHBvciBkZWJham8gZGUgbGEKKyAgICAgbO1uZWEgYSBtb3Zlci4KKworICA0LiBFc3RhbmRvIGVuIG1vZCBOb3JtYWwsIHB1bHNlICAgcAlwYXJhIHJlc3RpdHVpciBsYSBs7W5lYSBib3JyYWRhLgorCisgIDUuIFJlcGl0YSBsb3MgcGFzb3MgMiBhIDQgcGFyYSBwb25lciB0b2RhcyBsYXMgbO1uZWFzIGVuIGVsIG9yZGVuIGNvcnJlY3RvLgorCisgICAgIGQpIL9QdWVkZXMgYXByZW5kZXJsYSB0dT8KKyAgICAgYikgTGFzIHZpb2xldGFzIHNvbiBhenVsZXMsCisgICAgIGMpIExhIGludGVsaWdlbmNpYSBzZSBhcHJlbmRlLAorICAgICBhKSBMYXMgcm9zYXMgc29uIHJvamFzLAorCit+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+fn4KKwkJICAgICAgIExlY2Np824gMy4yOiBFTCBNQU5EQVRPIKtSRVBMQUNFuyAocmVtcGxhemFyKQorCisKKyAgKiogUHVsc2UgIHIgIHkgdW4gY2Fy4WN0ZXIgcGFyYSBzdXN0aXR1aXIgZWwgY2Fy4WN0ZXIgc29icmUgZWwgY3Vyc29yLiAqKgorCisKKyAgMS4gTXVldmEgZWwgY3Vyc29yIGEgbGEgcHJpbWVyYSBs7W5lYSBkZSBhYmFqbyBzZfFhbGFkYSBjb24gLS0tPi4KKworICAyLiBNdWV2YSBlbCBjdXJzb3IgcGFyYSBzaXR1YXJsbyBiYWpvIGVsIHByaW1lciBlcnJvci4KKworICAzLiBQdWxzZSAgIHIJIHkgZWwgY2Fy4WN0ZXIgcXVlIGRlYmUgc3VzdGl0dWlyIGFsIGVycvNuZW8uCisKKyAgNC4gUmVwaXRhIGxvcyBwYXNvcyAyIHkgMyBoYXN0YSBxdWUgbGEgcHJpbWVyYSBs7W5lYSBlc3TpIGNvcnJlZ2lkYS4KKworLS0tPiChQ3VlbmRvIGVzdGEgbO1uZWEgZnVlIHJzY3JpdGEgYWxndWllbiBwdWxzbyBhbGd1bmFzIHRlY2xhcyBlcXVpYm9jYWRhcyEKKy0tLT4goUN1YW5kbyBlc3RhIGztbmVhIGZ1ZSBlc2NyaXRhIGFsZ3VpZW4gcHVsc/MgYWxndW5hcyB0ZWNsYXMgZXF1aXZvY2FkYXMhCisKKworCisKKworCit+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+fn4KKwkJCUxlY2Np824gMy4zOiBFTCBNQU5EQVRPIKtDSEFOR0W7IChjYW1iaWFyKQorCisKKyAgICAgKiogUGFyYSBjYW1iaWFyIHBhcnRlIGRlIHVuYSBwYWxhYnJhIG8gdG9kYSBlbGxhIGVzY3JpYmEgIGN3IC4gKioKKworCisgIDEuIE11ZXZhIGVsIGN1cnNvciBhIGxhIHByaW1lcmEgbO1uZWEgZGUgYWJham8gc2XxYWxhZGEgY29uIC0tLT4uCisKKyAgMi4gU2l0+mUgZWwgY3Vyc29yIGVuIGxhIHUgZGUgbHVicnMuCisKKyAgMy4gRXNjcmliYSAgY3cgIHkgY29ycmlqYSBsYSBwYWxhYnJhIChlbiBlc3RlIGNhc28sIGVzY3JpYmEgJ+1uZWEnKS4KKworICA0LiBQdWxzZSA8RVNDPiB5IG11ZXZhIGVsIGN1cnNvciBhbCBlcnJvciBzaWd1aWVudGUgKGVsIHByaW1lciBjYXLhY3RlcgorICAgICBxdWUgZGViYSBjYW1iaWFyc2UpLgorCisgIDUuIFJlcGl0YSBsb3MgcGFzb3MgMyB5IDQgaGFzdGEgcXVlIGxhIHByaW1lcmEgZnJhc2Ugc2VhIGlndWFsIGEgbGEgc2VndW5kYS4KKworLS0tPiBFc3RhIGx1YnJzIHRpZW5lIHVuYXMgcG9jYXMgcHNrYXZ0YWQgcXVlIGNvcnJlZ2lyIHVzZW0gZWwgbWFuZGF0byBjaGFuZ2UuCistLS0+IEVzdGEgbO1uZWEgdGllbmUgdW5hcyBwb2NhcyBwYWxhYnJhcyBxdWUgY29ycmVnaXIgdXNhbmRvIGVsIG1hbmRhdG8gY2hhbmdlLgorCisKK35+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+fgorCQkgICAgICBMZWNjafNuIDMuNDogTcFTIENBTUJJT1MgVVNBTkRPIGMKKworICAgKiogRWwgbWFuZGF0byBjaGFuZ2Ugc2UgdXRpbGl6YSBjb24gbG9zIG1pc21vcyBvYmpldG9zIHF1ZSBkZWxldGUuICoqCisKKyAgMS4gRWwgbWFuZGF0byBjaGFuZ2UgZnVuY2lvbmEgZGUgbGEgbWlzbWEgZm9ybWEgcXVlIGRlbGV0ZS4gRWwgZm9ybWF0byBlczoKKworICAgICAgIFtu+m1lcm9dICAgYyAgIG9iamV0bwkgICBPCSAgICBjCVtu+m1lcm9dICAgb2JqZXRvCisKKyAgMi4gTG9zIG9iamV0b3Mgc29uIHRhbWJp6W0gbG9zIG1pc21vcywgdGFsZXMgY29tbyAgdyAocGFsYWJyYSksICQgKGZpbiBkZQorICAgICBsYSBs7W5lYSksIGV0Yy4KKworICAzLiBNdWV2YSBlbCBjdXJzb3IgYSBsYSBwcmltZXJhIGztbmVhIGRlIGFiYWpvIHNl8WFsYWRhIGNvbiAtLS0+LgorCisgIDQuIE11ZXZhIGVsIGN1cnNvciBhbCBwcmltZXIgZXJyb3IuCisKKyAgNS4gRXNjcmliYSAgYyQgIHBhcmEgaGFjZXIgcXVlIGVsIHJlc3RvIGRlIGxhIGztbmVhIHNlYSBjb21vIGxhIHNlZ3VuZGEKKyAgICAgeSBwdWxzZSA8RVNDPi4KKworLS0tPiBFbCBmaW5hbCBkZSBlc3RhIGztbmVhIG5lY2VzaXRhIGFsZ3VuYSBheXVkYSBwYXJhIHF1ZSBzZWEgY29tbyBsYSBzZWd1bmRhLgorLS0tPiBFbCBmaW5hbCBkZSBlc3RhIGztbmVhIG5lY2VzaXRhIHNlciBjb3JyZWdpZG8gdXNhbmRvIGVsIG1hbmRhdG8gIGMkLgorCit+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+fn4KKwkJCSAgICBSRVNVTUVOIERFIExBIExFQ0NJ004gMworCisKKyAgMS4gUGFyYSBzdXN0aXR1aXIgdGV4dG8gcXVlIGhhIHNpZG8gYm9ycmFkbywgcHVsc2UgIHAgLiBFc3RvIFBvbmUgZWwgdGV4dG8KKyAgICAgYm9ycmFkbyBERVNQVclTIGRlbCBjdXJzb3IgKHNpIGxvIHF1ZSBzZSBoYSBib3JyYWRvIGVzIHVuYSBs7W5lYSBzZQorICAgICBzaXR1YXLhIHNvYnJlIGxhIGztbmVhIHF1ZSBlc3ThIHNvYnJlIGVsIGN1cnNvcikuCisKKyAgMi4gUGFyYSBzdXN0aXR1aXIgZWwgY2Fy4WN0ZXIgYmFqbyBlbCBjdXJzb3IsIHB1bHNlCXIgICB5IGx1ZWdvIGVsCisgICAgIGNhcuFjdGVyIHF1ZSBzdXN0aXR1aXLhIGFsIG9yaWdpbmFsLgorCisgIDMuIEVsIG1hbmRhdG8gY2hhbmdlIGxlIHBlcm1pdGUgY2FtYmlhciBlbCBvYmpldG8gZXNwZWNpZmljYWRvIGRlc2RlIGxhCisgICAgIHBvc2ljafNuIGRlbCBjdXJzb3IgaGFzdGEgZWwgZmluYWwgZGVsIG9iamV0bzsgZS5nLiBQdWxzZQljdyAgcGFyYQorICAgICBjYW1iaWFyIGRlc2RlIGVsIGN1cnNvciBoYXN0YSBlbCBmaW5hbCBkZSBsYSBwYWxhYnJhLCBjJCAgcGFyYSBjYW1iaWFyCisgICAgIGhhc3RhIGVsIGZpbmFsIGRlIGxhIGztbmVhLgorCisgIDQuIEVsIGZvcm1hdG8gcGFyYSBjaGFuZ2UgZXM6CisKKwkgW276bWVyb10gICBjCW9iamV0bwkgICAgICBPCQljICAgW276bWVyb10gICBvYmpldG8KKworICBQYXNlIGFob3JhIGEgbGEgbGVjY2nzbiBzaWd1aWVudGUuCisKKworfn5+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+CisJICAgICAgIExlY2Np824gNC4xOiBTSVRVQUNJ004gRU4gRUwgRklDSEVSTyBZIFNVIEVTVEFETworCisKKyAqKiBQdWxzZSBDVFJMLWcgcGFyYSBtb3N0cmFyIHN1IHNpdHVhY2nzbiBlbiBlbCBmaWNoZXJvIHkgc3UgZXN0YWRvLgorICAgIFB1bHNlIE1BWVUtRyBwYXJhIG1vdmVyc2UgYSB1bmEgZGV0ZXJtaW5hZGEgbO1uZWEgZGVsIGZpY2hlcm8uICoqCisKKyAgTm90YTogoaFMZWEgZXN0YSBsZWNjafNuIGVudGVyYSBhbnRlcyBkZSBlamVjdXRhciBhbGd1bm8gZGUgbG9zIHBhc29zISEKKworCisgIDEuIE1hbnRlbmdhIHB1bHNhZGEgbGEgdGVjbGEgQ3RybCB5IHB1bHNlICBnIC4gQXBhcmVjZSB1bmEgbO1uZWEgZGUgZXN0YWRvCisgICAgIGFsIGZpbmFsIGRlIGxhIHBhbnRhbGxhIGNvbiBlbCBub21icmUgZGVsIGZpY2hlcm8geSBsYSBs7W5lYSBlbiBsYSBxdWUKKyAgICAgZXN04SBzaXR1YWRvLiBSZWN1ZXJkZSBlbCBu+m1lcm8gZGUgbGEgbO1uZWEgcGFyYSBlbCBQYXNvIDMuCisKKyAgMi4gUHVsc2UgTWF5dS1HIHBhcmEgaXIgYWwgZmluYWwgZGVsIGZpY2hlcm8uCisKKyAgMy4gRXNjcmliYSBlbCBu+m1lcm8gZGUgbGEgbO1uZWEgZW4gbGEgcXVlIGVzdGFiYSB5IGRlc3D6ZXMgTWF5dS1HLiBFc3RvCisgICAgIGxlIHZvbHZlcuEgYSBsYSBs7W5lYSBlbiBsYSBxdWUgZXN0YWJhIGN1YW5kbyBwdWxz8yBDdHJsLWcuCisgICAgIChDdWFuZG8gZXNjcmliYSBsb3MgbvptZXJvcyBOTyBzZSBtb3N0cmFy4W4gZW4gbGEgcGFudGFsbGEpLgorCisgIDQuIFNpIHNlIHNpZW50ZSBjb25maWFkbyBlbiBwb2RlciBoYWNlciBlc3RvIGVqZWN1dGUgbG9zIHBhc29zIDEgYSAzLgorCit+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+fn4KKwkJCUxlY2Np824gNC4yOiBFTCBNQU5EQVRPIKtTRUFSQ0i7IChidXNjYXIpCisKKyAgICAgKiogRXNjcmliYSAgLyAgc2VndWlkbyBkZSB1bmEgZnJhc2UgcGFyYSBidXNjYXIgbGEgZnJhc2UuICoqCisKKyAgMS4gRW4gbW9kbyBOb3JtYWwgcHVsc2UgZWwgY2Fy4WN0ZXIgIC8gLiBG7Wplc2UgcXVlIHRhbnRvIGVsIGNhcuFjdGVyICAvCisgICAgIGNvbW8gZWwgY3Vyc29yIGFwYXJlY2VuIGVuIGxhIPpsdGltYSBs7W5lYSBkZSBsYSBwYW50YWxsYSwgbG8gbWlzbW8KKyAgICAgcXVlIGVsIG1hbmRhdG8gIDogLgorCisgIDIuIEVzY3JpYmEgYWhvcmEgICBlcnJyb29yICAgPElOVFJPPi4gRXN0YSBlcyBsYSBwYWxhYnJhIHF1ZSBxdWllcmUgYnVzY2FyLgorCisgIDMuIFBhcmEgcmVwZXRpciBsYSBi+nNxdWVkYSwgc2ltcGxlbWVudGUgcHVsc2UgIG4gLgorICAgICBQYXJhIGJ1c2FjYXIgbGEgbWlzbWEgZnJhc2UgZW4gbGEgZGlyZWNjafNuIG9wdWVzdGEsIHB1bHNlIE1heXUtTiAuCisKKyAgNC4gU2kgcXVpZXJlIGJ1c2NhciB1bmEgZnJhc2UgZW4gbGEgZGlyZWNjafNuIG9wdWVzdGEgKGhhY2lhIGFycmliYSksCisgICAgIHV0aWxpY2UgZWwgbWFuZGF0byAgPyAgZW4gbHVnYXIgZGUgIC8gLgorCistLS0+IEN1YW5kbyBsYSBi+nNxdWVkYSBhbGNhbnphIGVsIGZpbmFsIGRlbCBmaWNoZXJvIGNvbnRpbnVhcuEgZGVzZGUgZWwKKyAgICAgcHJpbmNpcGlvLgorCisgIKtlcnJyb29yuyBubyBlcyBsYSBmb3JtYSBkZSBkZWxldHJlYXIgZXJyb3I7IGVycnJvb3IgZXMgdW4gZXJyb3IuCisKK35+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+fgorCSAgICAgICBMZWNjafNuIDQuMzogQtpTUVVFREEgUEFSQSBDT01QUk9CQVIgUEFSyU5URVNJUworCisgICAqKiBQdWxzZSAlICBwYXJhIGVuY29udHJhciBlbCBwYXLpbnRlc2lzIGNvcnJlc3BvbmRpZW50ZSBhICksXSBvIH0gLiAqKgorCisKKyAgMS4gU2l0+mUgZWwgY3Vyc29yIGVuIGN1YWxxdWllcmEgZGUgbG9zIGNhcmFjdGVyZXMgKSwgXSBvIH0gZW4gbGEgbO1uZWEgZGUKKyAgICAgYWJham8gc2XxYWxhZGEgY29uIC0tLT4uCisKKyAgMi4gUHVsc2UgYWhvcmEgZWwgY2Fy4WN0ZXIgICUgIC4KKworICAzLiBFbCBjdXJzb3IgZGViZXLtYSBzaXR1YXJzZSBlbiBlbCBwYXLpbnRlc2lzICgsIGNvcmNoZXRlIFsgbyBsbGF2ZSB7CisgICAgIGNvcnJlc3BvbmRpZW50ZS4KKworICA0LiBQdWxzZSAgJSAgcGFyYSBtb3ZlciBkZSBudWV2byBlbCBjdXJzb3IgYWwgcGFy6W50ZXNpcywgY29yY2hldGUgbyBsbGF2ZQorICAgICBjb3JyZXNwb25kaWVudGUuCisKKy0tLT4gRXN0byAoIGVzIHVuYSBs7W5lYSBkZSBwcnVlYmEgY29uICgsIFssIF0sIHssIHkgfSBlbiBlbGxhLiApKS4KKworTm90YTogoUVzdG8gZXMgbXV5IPp0aWwgZW4gbGEgZGV0ZWNjafNuIGRlIGVycm9yZXMgZW4gdW4gcHJvZ3JhbWEgY29uCisgICAgICBwYXLpbnRlc2lzLCBjb3JjaGV0ZXMgbyBsbGF2ZXMgZGlzcGFyZWpvcy4KKworfn5+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+CisJCSAgTGVjY2nzbiA0LjQ6IFVOQSBGT1JNQSBERSBDQU1CSUFSIEVSUk9SRVMKKworCisgICAgKiogRXNjcmliYQk6cy92aWVqby9udWV2by9nIHBhcmEgc3VzdGl0dWlyICd2aWVqbycgcG9yICdudWV2bycuICoqCisKKworICAxLiBNdWV2YSBlbCBjdXJzb3IgYSBsYSBs7W5lYSBkZSBhYmFqbyBzZfFhbGFkYSBjb24gLS0tPi4KKworICAyLiBFc2NyaWJhICA6cy9sYWFzL2xhcy8gIDxJTlRSTz4gLiBUZW5nYSBlbiBjdWVudGEgcXVlIGVzdGUgbWFuZGF0byBjYW1iaWEKKyAgICAgc/NsbyBsYSBwcmltZXJhIGFwYXJpY2nzbiBlbiBsYSBs7W5lYSBkZSBsYSBleHByZXNp824gYSBjYW1iaWFyLgorCistLS0+IExhYXMgbWVqb3JlcyDpcG9jYXMgcGFyYSB2ZXIgbGFhcyBmbG9yZXMgc29uIGxhYXMgcHJpbWF2ZXJhcy4KKworICA0LiBQYXJhIGNhbWJpYXIgdG9kYXMgbGFzIGFwYXJpY2lvbmVzIGRlIHVuYSBleHByZXNp824gZW50ZSBkb3MgbO1uZWFzCisgICAgIGVzY3JpYmEgICA6Iywjcy92aWVqby9udWV2by9nICAgZG9uZGUgIywjIHNvbiBsb3MgbvptZXJvcyBkZSBsYXMgZG9zCisgICAgIGztbmVhcy4gRXNjcmliYSAgIDolcy92aWVqby9udWV2by9nICAgcGFyYSBoYWNlciBsb3MgY2FtYmlvcyBlbiB0b2RvCisgICAgIGVsIGZpY2hlcm8uCisKKworCisKKworfn5+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+CisJCQkgICAgUkVTVU1FTiBERSBMQSBMRUNDSdNOIDQKKworCisgIDEuIEN0cmwtZyAgbXVlc3RyYSBsYSBwb3NpY2nzbiBkZWwgY3Vyc29yIGVuIGVsIGZpY2hlcm8geSBzdSBlc3RhZG8uCisgICAgIE1heXUtRyBtdWV2ZSBlbCBjdXJzb3IgYWwgZmluYWwgZGVsIGZpY2hlcm8uIFVuIG76bWVybyBkZSBs7W5lYQorICAgICBzZXdndWlkbyBkZSBNYXl1LUcgbXVldmUgZWwgY3Vyc29yIGEgbGEgbO1uZWEgY29uIGVzZSBu+m1lcm8uCisKKyAgMi4gUHVsc2FuZG8gIC8gIHNlZ3VpZG8gZGUgdW5hIGZyYXNlIGJ1c2NhIGxhIGZyYXNlIGhhY2lhIEFERUxBTlRFLgorICAgICBQdWxzYW5kbyAgPyAgc2VndWlkbyBkZSB1bmEgZnJhc2UgYnVzY2EgbGEgZnJhc2UgaGFjaWEgQVRSwVMuCisgICAgIERlc3B16XMgZGUgdW5hIGL6c3F1ZWRhIHB1bHNlICBuICBwYXJhIGVuY29udHJhciBsYSBhcGFyaWNp824KKyAgICAgc2lndWllbnRlIGVuIGxhIG1pc21hIGRpcmVjY2nzbi4KKworICAzLiBQdWxzYW5kbyAgJSAgY3VhbmRvIGVsIGN1cnNvciBlc3RhIHNvYnJlICgsKSwgWyxdLCB7IG8gfSBsb2NhbGl6YQorICAgICBsYSBwYXJlamEgY29ycmVzcG9uZGllbnRlLgorCisgIDQuIFBhcmEgY2FtYmlhciB2aWVqbyBwb3IgbnVldm8gZW4gdW5hIGztbmVhIHB1bHNlCSAgICAgIDpzL3ZpZWpvL251ZXZvCisgICAgIFBhcmEgY2FtYmlhciB0b2RvcyBsb3Mgdmllam8gcG9yIG51ZXZvIGVuIHVuYSBs7W5lYSBwdWxzZSA6cy92aWVqby9udWV2by9nCisgICAgIFBhcmEgY2FtYmlhciBmcmFzZXMgZW50cmUgZG9zIG76bWVyb3MgZGUgbO1uZWFzIHB1bHNlICA6Iywjcy92aWVqby9udWV2by9nCisgICAgIFBhcmEgY2FtYmlhciB2aWVqbyBwb3IgbnVldm8gZW4gdG9kbyBlbCBmaWNoZXJvIHB1bHNlICA6JXMvdmllam8vbnVldm8vZworICAgICBQYXJhIHBlZGlyIGNvbmZpcm1hY2nzbiBlbiBjYWRhIGNhc28gYfFhZGEgICdjJwkgICAgOiVzL3ZpZWpvL251ZXZvL2djCisKKworfn5+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+CisJCUxlY2Np824gNS4xOiBD001PIEVKRUNVVEFSIFVOIE1BTkRBVE8gRVhURVJOTworCisKKyAgKiogRXNjcmliYSAgOiEgIHNlZ3VpZG8gZGUgdW4gbWFuZGF0byBleHRlcm5vIHBhcmEgZWplY3V0YXIgZXNlIG1hbmRhdG8uICoqCisKKworICAxLiBFc2NyaWJhIGVsIGNvbm9jaWRvIG1hbmRhdG8gIDogIHBhcmEgc2l0dWFyIGVsIGN1cnNvciBhbCBmaW5hbCBkZSBsYQorICAgICBwYW50YWxsYS4gRXN0byBsZSBwZXJtaXRpcuEgaW50cm9kdWNpciB1biBtYW5kYXRvLgorCisgIDIuIEFob3JhIGVzY3JpYmEgZWwgY2Fy4WN0ZXIgISAoc2lnbm8gZGUgYWRtaXJhY2nzbikuIEVzdG8gbGUgcGVybWl0aXLhCisgICAgIGVqZWN1dGFyIGN1YWxxdWllciBtYW5kYXRvIGRlbCBzaXN0ZW1hLgorCisgIDMuIENvbW8gZWplbXBsbyBlc2NyaWJhICAgbHMJIGRlc3B16XMgZGVsICEgeSBsdWVnbyBwdWxzZSA8SU5UUk8+LiBFc3RvCisgICAgIGxlIG1vc3RyYXLhIHVuYSBsaXN0YSBkZSBzdSBkaXJlY3RvcmlvLCBpZ3VhbCBxdWUgc2kgZXN0dXZpZXJhIGVuIGVsCisgICAgIHPtbWJvbG8gZGVsIHNpc3RlbWEuIFNpICBscyAgbm8gZnVuY2lvbmEgdXRpbGljZQkhOmRpcgkuCisKKy0tLT5Ob3RhOiBEZSBlc3RhIG1hbmVyYSBlcyBwb3NpYmxlIGVqZWN1dGFyIGN1YWxxdWllciBtYW5kYXRvIGV4dGVybm8uCisKKy0tLT5Ob3RhOiBUb2RvcyBsb3MgbWFuZGF0b3MgICA6ICAgZGViZW4gZmluYWxpemFyc2UgcHVsc2FuZG8gPElOVFJPPi4KKworCit+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+fgorCQkgICAgIExlY2Np824gNS4yOiBNwVMgU09CUkUgR1VBUkRBUiBGSUNIRVJPUworCisKKyAgICAgKiogUGFyYSBndWFyZGFyIGxvcyBjYW1iaW9zIGhlY2hvcyBlbiB1biBmaWNoZXJvLAorCWVzY3JpYmEgIDp3IE5PTUJSRV9ERV9GSUNIRVJPLiAqKgorCisKKyAgMS4gRXNjcmliYSAgOiFkaXIgIG8JOiFscyAgcGFyYSB2ZXIgdW5hIGxpc3RhIGRlIHN1IGRpcmVjdG9yaW8uCisgICAgIFlhIHNhYmUgcXVlIGRlYmUgcHVsc2FyIDxJTlRSTz4gZGVzcHXpcyBkZSBlbGxvLgorCisgIDIuIEVsaWphIHVuIG5vbWJyZSBkZSBmaWNoZXJvIHF1ZSB0b2Rhdu1hIG5vIGV4aXN0YSwgY29tbyBURVNULgorCisgIDMuIEFob3JhIGVzY3JpYmEgICA6dyBURVNUICAoZG9uZGUgVEVTVCBlcyBlbCBub21icmUgZGUgZmljaGVybyBlbGVnaWRvKS4KKworICA0LiBFc3RhIGFjY2nzbiBndWFyZGEgdG9kbyBlbCBmaWNoZXJvICAoVmltIFR1dG9yKSAgYmFqbyBlbCBub21icmUgVEVTVC4KKyAgICAgUGFyYSBjb21wcm9iYXJsbyBlc2NyaWJhCTohZGlyCWRlIG51ZXZvIHkgdmVhIHN1IGRpcmVjdG9yaW8uCisKKy0tLT4gVGVuZ2EgZW4gY3VlbnRhIHF1ZSBzaSBzYWxlIGRlIFZpbSB5ICBlbnRyYSBkZSBudWV2byBjb24gZWwgbm9tYnJlIGRlCisgICAgIGZpY2hlcm8gVEVTVCwgZWwgZmljaGVybyBzZXLtYSB1bmEgY29waWEgZXhhY3RhIGRlbCB0dXRvciBjdWFuZG8gbG8KKyAgICAgaGEgZ3VhcmRhZG8uCisKK35+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+fgorCSAgICAgICBMZWNjafNuIDUuMzogVU4gTUFOREFUTyBERSBFU0NSSVRVUkEgU0VMRUNUSVZPCisKKyAgICoqIFBhcmEgZ3VhcmRhciBwYXJ0ZSBkZWwgZnVjaGVybyBlc2NyaWJhICAgOiMsIyBOT01CUkVfREVMX0ZJQ0hFUk8gKioKKworCisgIDEuIEVzY3JpYmEgZGUgbnVldm8sIHVuYSB2ZXogbeFzLCAgOiFkaXIgIG8gIDohbHMgIHBhcmEgb2J0ZW5lciB1bmEgbGlzdGEKKyAgICAgZGUgc3UgZGlyZWN0b3JpbyB5IGVsaWphIG5vbWJyZSBkZSBmaWNoZXJvIGFkZWN1YWRvLCBjb21vIFRFU1QuCisKKyAgMi4gTXVldmEgZWwgY3Vyc29yIGFsIHByaW5jaXBpbyBkZSBsYSBwYW50YWxsYSB5IHB1bHNlICBDdHJsLWcgIHBhcmEgc2FiZXIKKyAgICAgZWwgbvptZXJvIGRlIGxhIGztbmVhIGNvcnJlc3BvbmRpZW50ZS4goVJFQ1VFUkRFIEVTVEUgTtpNRVJPIQorCisgIDMuIEFob3JhIG11ZXZhIGVsIGN1cnNvciBhIGxhIPpsdGltYSBs7W5lYSBkZSBsYSBwYW50YWxsYSB5IHB1bHNlIEN0cmwtZworICAgICBkZSBudWV2by4goVJFQ1VFUkRFIFRBTUJJyU4gRVNURSBO2k1FUk8hCisKKyAgNC4gUGFyYSBndWFyZGFyIFNPTEFNRU5URSB1bmEgcGFydGUgZGUgdW4gZmljaGVybywgZXNjcmliYSAgOiMsIyB3IFRFU1QKKyAgICAgZG9uZGUgIywjIHNvbiBsb3MgbvptZXJvcyBxdWUgdXN0ZWQgaGEgcmVjb3JkYWRvIChwcmltZXJhIGztbmVhLAorICAgICD6bHRpbWEgbO1uZWEpIHkgVEVTVCBlcyBzdSBub21icmUgZGUgZGljaGVyby4KKworICA1LiBEZSBudWV2bywgdmVhIHF1ZSBlbCBmaWNoZXJvIGVzdGEgYWjtIGNvbgk6IWRpciAgcGVybyBOTyBsbyBib3JyZS4KKworCit+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+fn4KKwkJTGVjY2nzbiA1LjQ6IFJFQ1VQRVJBTkRPIFkgTUVaQ0xBTkRPIEZJQ0hFUk9TCisKKyAqKiBQYXJhIGluc2VydGFyIGVsIGNvbnRlbmlkbyBkZSB1biBmaWNoZXJvIGVzY3JpYmEgOnIgTk9NQlJFX0RFTF9GSUNIRVJPICoqCisKKyAgMS4gRXNjcmliYSAgIDohZGlyICAgcGFyYSBhc2VndXJhcnNlIGRlIHF1ZSBzdSBmaWNoZXJvIFRFU1QgZGVsIGVqZXJjaWNpbworICAgICBhbnRlcmlvciBlc3ThIHByZXNlbnRlLgorCisgIDIuIFNpdHVlIGVsIGN1cnNvciBhbCBwcmluY2lwaW8gZGUgZXN0YSBwYW50YWxsYS4KKworTk9UQTogRGVzcHXpcyBkZSBlamVjdXRhciBlbCBwYXNvIDMgc2UgdmVy4SBsYSBMZWNjafNuIDUuMy4gTHVlZ28gbXXpdmFzZQorICAgICAgaGFjaWEgQUJBSk8gcGFyYSB2ZXIgZXN0YSBsZWNjafNuIGRlIG51ZXZvLgorCisgIDMuIEFob3JhIHJlY3VwZXJlIGVsIGZpY2hlcm8gVEVTVCB1dGlsaXphbmRvIGVsIG1hbmRhdG8gIDpyIFRFU1QgIGRvbmRlCisgICAgIFRFU1QgZXMgZWwgbm9tYnJlIGRlbCBmaWNoZXJvLgorCitOT1RBOiBFbCBmaWNoZXJvIHJlY3VwZXJhZG8gc2Ugc2l0+mEgYSBwYXJ0aXIgZGUgbGEgcG9zaWNp824gZGVsIGN1cnNvci4KKworICA0LiBQYXJhIHZlcmlmaWNhciBxdWUgZWwgZmljaGVybyBoYSBzaWRvIHJlY3VwZXJhZG8sIG11ZXZhIGVsIGN1cnNvciBoYWNpYQorICAgICBhcnJpYmEgeSB2ZWEgcXVlIGhheSBkb3MgY29waWFzIGRlIGxhIExlY2Np824gNS4zLCBsYSBvcmlnaW5hbCB5IGxhCisgICAgIHZlcnNp824gZGVsIGZpY2hlcm8uCisKK35+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+fgorCQkJICAgUkVTVU1FTiBERSBMQSBMRUNDSdNOIDUKKworCisgIDEuICA6IW1hbmRhdG8gIGVqZWN1dGEgdW4gbWFuZGF0byBleHRlcm5vLgorCisgICAgICBBbGd1bm9zIGVqZW1wbG9zIPp0aWxlcyBzb246CisJICA6IWRpciAtIG11ZXN0cmEgZWwgY29udGVuaWRvIGRlIHVuIGRpcmVjdG9yaW8uCisJICA6IWRlbCBOT01CUkVfREVfRklDSEVSTyAgLSAgYm9ycmEgZWwgZmljaGVybyBOT01CUkVfREUgRklDSEVSTy4KKworICAyLiAgOiMsI3cgTk9NQlJFX0RFIF9GSUNIRVJPICBndWFyZGEgZGVzZGUgbGFzIGztbmVhcyAjIGhhc3RhIGxhICMgZW4gZWwKKyAgICAgZmljaGVybyBOT01CUkVfREVfRklDSEVSTy4KKworICAzLiAgOnIgTk9NQlJFX0RFIF9GSUNIRVJPICByZWN1cGVyYSBlbCBmaWNoZXJvIGRlbCBkaXNjbyBOT01CUkVfREUgRklDSEVSTworICAgICB5IGxvIGluc2VydGEgZW4gZWwgZmljaGVybyBlbiBjdXJzbyBhIHBhcnRpciBkZSBsYSBwb3NpY2nzbiBkZWwgY3Vyc29yLgorCisKKworCisKKworCit+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+fn4KKwkJCSBMZWNjafNuIDYuMTogRUwgTUFOREFUTyCrT1BFTrsgKGFicmlyKQorCisKKwkgKiogUHVsc2UgIG8gIHBhcmEgYWJyaXIgdW5hIGztbmVhIGRlYmFqbyBkZWwgY3Vyc29yCisJICAgIHkgc2l0dWFybGUgZW4gbW9kbyBJbnNlcnQgKioKKworCisgIDEuIE11ZXZhIGVsIGN1cnNvciBhIGxhIGztbmVhIGRlIGFiYWpvIHNl8WFsYWRhIGNvbiAtLS0+LgorCisgIDIuIFB1bHNlICBvIChtaW76c2N1bGEpIHBhcmEgYWJyaXIgdW5hIGztbmVhIHBvciBERUJBSk8gZGVsIGN1cnNvcgorICAgICB5IHNpdHVhcmxlIGVuIG1vZG8gSW5zZXJ0LgorCisgIDMuIEFob3JhIGNvcGllIGxhIGztbmVhIHNl8WFsYWRhIGNvbiAtLS0+IHkgcHVsc2UgPEVTQz4gcGFyYSBzYWxpciBkZWwKKyAgICAgbW9kbyBJbnNlcnQuCisKKy0tLT4gTHVlZ28gZGUgcHVsc2FyICBvICBlbCBjdXJzb3Igc2Ugc2l0+mEgZW4gbGEgbO1uZWEgYWJpZXJ0YSBlbiBtb2RvIEluc2VydC4KKworICA0LiBQYXJhIGFicmlyIHVuYSBs7W5lYSBwb3IgZW5jaW1hIGRlbCBjdXJzb3IsIHNpbXBsZW1lbnRlIHB1bHNlIHVuYSBPCisgICAgIG1hefpzY3VsYSwgZW4gbHVnYXIgZGUgdW5hIG8gbWlu+nNjdWxhLiBQcnVlYmUgZXN0ZSBlbiBsYSBs7W5lYSBzaWd1aWVudGUuCitBYnJhIHVuYSBs7W5lYSBzb2JyZSDpc3RhIHB1bHNhbmRvIE1heXUtTyBjdWFuZG8gZWwgY3Vyc28gZXN04SBlbiBlc3RhIGztbmVhLgorCit+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+fn4KKwkJCUxlY2Np824gNi4yOiBFTCBNQU5EQVRPIKtBUFBFTkS7IChh8WFkaXIpCisKKwkgKiogUHVsc2UgIGEgIHBhcmEgaW5zZXJ0YXIgdGV4dG8gREVTUFXJUyBkZWwgY3Vyc29yLiAqKgorCisKKyAgMS4gTXVldmEgZWwgY3Vyc29yIGFsIGZpbmFsIGRlIGxhIHByaW1lcmEgbO1uZWEgZGUgYWJham8gc2XxYWxhZGEgY29uIC0tLT4KKyAgICAgcHVsc2FuZG8gICQgIGVuIG1vZG8gTm9ybWFsLgorCisgIDIuIEVzY3JpYmEgdW5hICBhICAobWlu+nNjdWxhKSBwYXJhIGHxYWRpciB0ZXh0byBERVNQVclTIGRlbCBjYXLhY3RlcgorICAgICBxdWUgZXN04SBzb2JyZSBlbCBjdXJzb3IuIChBIG1hefpzY3VsYSBh8WFkZSB0ZXh0byBhbCBmaW5hbCBkZSBsYSBs7W5lYSkuCisKK05vdGE6IKFFc3RvIGV2aXRhIGVsIHB1bHNhciAgaSAsIGVsIPpsdGltbyBjYXLhY3RlciwgZWwgdGV4dG8gYSBpbnNlcnRhciwKKyAgICAgIDxFU0M+LCBjdXJzb3IgYSBsYSBkZXJlY2hhIHksIGZpbmFsbWVudGUsIHggLCBz82xvIHBhcmEgYfFhZGlyIGFsZ28KKyAgICAgIGFsIGZpbmFsIGRlIHVuYSBs7W5lYSEKKworICAzLiBDb21wbGV0ZSBhaG9yYSBsYSBwcmltZXJhIGztbmVhLiBO83Rlc2UgcXVlIGFwcGVuZCBlcyBleGFjdGFtZW50ZSBsbworICAgICBtaXNtbyBxdWUgbW9kbyBJbnNlcnQsIGV4Y2VwdG8gcG9yIGVsIGx1Z2FyIGRvbmRlIHNlIGluc2VydGEgZWwgdGV4dG8uCisKKy0tLT4gRXN0YSBs7W5lYSBsZSBwZXJtaXRpcuEgcHJhdGljYXIKKy0tLT4gRXN0YSBs7W5lYSBsZSBwZXJtaXRpcuEgcHJhdGljYXIgZWwgYfFhZGlkbyBkZSB0ZXh0byBhbCBmaW5hbCBkZSB1bmEgbO1uZWEuCisKK35+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+fgorCQkgICAgIExlY2Np824gNi4zOiBPVFJBIFZFUlNJ004gREUgq1JFUExBQ0W7IChyZW1wbGF6YXIpCisKKyAgICAqKiBQdWxzZSB1bmEgIFIgIG1hefpzY3VsYSBwYXJhIHN1c3RpdHVpciBt4XMgZGUgdW4gY2Fy4WN0ZXIuICoqCisKKworICAxLiBNdWV2YSBlbCBjdXJzb3IgYSBsYSBwcmltZXJhIGztbmVhIGRlIGFiYWpvIHNl8WFsYWRhIGNvbiAtLS0+LgorCisgIDIuIFNpdPplIGVsIGN1cnNvciBhbCBjb21pZW56byBkZSBsYSBwcmltZXJhIHBhbGFicmEgcXVlIHNlYSBkaWZlcmVudGUKKyAgICAgZGUgbGFzIGRlIGxhIHNlZ3VuZGEgbO1uZWEgbWFyY2FkYSBjb24gLS0tPiAobGEgcGFsYWJyYSAnYW50ZXJpb3InKS4KKworICAzLiBBaG9yYSBwdWxzZSAgUiAgeSBzdXN0aXR1eWEgZWwgcmVzdG8gZGVsIHRleHRvIGRlIGxhIHByaW1lcmEgbO1uZWEKKyAgICAgZXNjcmliaWVuZG8gc29icmUgZWwgdmllam8gdGV4dG8gcGFyYSBxdWUgbGEgcHJpbWVyYSBs7W5lYSBzZWEgaWd1YWwKKyAgICAgcXVlIGxhIHByaW1lcmEuCisKKy0tLT4gUGFyYSBoYWNlciBxdWUgZXN0YSBs7W5lYSBzZWEgaWd1YWwgcXVlIGxhIGFudGVyaW9yIHVzZSBsYXMgdGVjbGFzLgorLS0tPiBQYXJhIGhhY2VyIHF1ZSBlc3RhIGztbmVhIHNlYSBpZ3VhbCBxdWUgbGEgc2lndWllbnRlIGVzY3JpYmEgUiB5IGVsIHRleHRvLgorCisgIDQuIE7zdGVzZSBxdWUgY3VhbmRvIHB1bHNlIDxFU0M+IHBhcmEgc2FsaXIsIGVsIHRleHRvIG5vIGFsdGVyYWRvIHBlcm1hbmVjZS4KKworCisKK35+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+fgorCQkJIExlY2Np824gNi40OiBGSUpBUiBPUENJT05FUworCisgKiogRmlqYXIgdW5hIG9wY2nzbiBkZSBmb3JtYSBxdWUgdW5hIGL6c3F1ZWRhIG8gc3VzdGl0dWNp824gaWdub3JlIGxhIGNhamEgKioKKyAgKFBhcmEgZWwgY29uY2VwdG8gZGUgY2FqYSBkZSB1bmEgbGV0cmEsIHbpYXNlIGxhIG5vdGEgYWwgZmluYWwgZGVsIGZpY2hlcm8pCisKKworICAxLiBCdXNxdWUgJ2lnbm9yYXInIGludHJvZHVjaWVuZG86CisgICAgIC9pZ25vcmFyCisgICAgIFJlcGl0YSB2YXJpYXMgdmVjZXMgbGEgYvpzcXVlIHB1bHNhbmRvIGxhIHRlY2xhIG4KKworICAyLiBGaWplIGxhIG9wY2nzbiAnaWMnIChJZ25vcmFyIGxhIGNhamEgZGUgbGEgbGV0cmEpIGVzY3JpYmllbmRvOgorICAgICA6c2V0IGljCisKKyAgMy4gQWhvcmEgYnVzcXVlICdpZ25vcmFyJyBkZSBudWV2byBwdWxzYW5kbyBuCisgICAgIFJlcGl0YSBsYSBi+nNxdWVkYSB2YXJpYXMgdmVjZXMgbeFzIHB1bHNhbmRvIGxhIHRlY2xhIG4KKworICA0LiBGaWplIGxhcyBvcGNpb25lcyAnaGxzZWFyY2gnIHkgJ2luc2VhcmNoJzoKKyAgICAgOnNldCBobHMgaXMKKworICA1LiBBaG9yYSBpbnRyb2R1emNhIGxhIG9yZGVuIGRlIGL6c3F1ZWRhIG90cmEgdmV6LCB5IHZlYSBxdekgcGFzYToKKyAgICAgL2lnbm9yZQorCit+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+fn4KKwkJCSAgIFJFU1VNRU4gREUgTEEgTEVDQ0nTTiA2CisKKworICAxLiBQdWxzYW5kbyAgbyAgYWJyZSB1bmEgbO1uZWEgcG9yIERFQkFKTyBkZWwgY3Vyc29yIHkgc2l0+mEgZWwgY3Vyc29yIGVuCisgICAgIGxhIGztbmVhIGFiaWVydGEgZW4gbW9kbyBJbnNlcnQuCisgICAgIFB1bHNhbmRvIHVuYSBPIG1hefpzY3VsYSBzZSBhYnJlIHVuYSBs7W5lYSBTT0JSRSBsYSBxdWUgZXN04SBlbCBjdXJzb3IuCisKKyAgMi4gUHVsc2UgdW5hCWEgIHBhcmEgaW5zZXJ0YXIgdGV4dG8gREVTUFXJUyBkZWwgY2Fy4WN0ZXIgc29icmUgZWwgY3Vyc29yLgorICAgICBQdWxzYW5kbyB1bmEgIEEgIG1hefpzY3VsYSBh8WFkZSBhdXRvbeF0aWNhbWVudGUgdGV4dG8gYWwgZmluYWwgZGUgbGEKKyAgICAgbO1uZWEuCisKKyAgMy4gUHVsc2FuZG8gdW5hICBSICBtYXn6c2N1bGEgc2UgZW50cmEgZW4gbW9kbyBSZXBsYWNlIGhhc3RhIHF1ZSwgcGFyYSBzYWxpciwKKyAgICAgc2UgcHVsc2UgPEVTQz4uCisKKyAgNC4gRXNjcmliaWVuZG8gqzpzZXQgeHh4uyBmaWphIGxhIG9wY2nzbiCreHh4uworCisKKworCisKKworCit+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+fn4KKwkJICBMZWNjafNuIDc6IE1BTkRBVE9TIFBBUkEgTEEgQVlVREEgRU4gTM1ORUEKKworCQkgKiogVXRpbGljZSBlbCBzaXN0ZW1hIGRlIGF5dWRhIGVuIGztbmVhICoqCisKKworICBWaW0gZGlzcG9uZSBkZSB1biBzaXN0ZW1hIGRlIGF5dWRhIGVuIGztbmVhLiBQYXJhIGFjdGl2YXJsbywgcHJ1ZWJlIHVuYQorICBkZSBlc3RhcyB0cmVzIGZvcm1hczoKKwktIHB1bHNlIGxhIHRlY2xhIDxBWVVEQT4gKHNpIGRpc3BvbmUgZGUgZWxsYSkKKwktIHB1bHNlIGxhIHRlY2xhIDxGMT4gKHNpIGRpc3BvbmUgZGUgZWxsYSkKKwktIGVzY3JpYmEgICA6aGVscCA8SU5UUk8+CisKKyAgRXNjcmliYSAgIDpxIDxJTlRSTz4JIHBhcmEgY2VycmFyIGxhIHZlbnRhbmEgZGUgYXl1ZGEuCisKKyAgUHVlZGUgZW5jb250cmFyIGF5dWRhIGVuIGNhc2kgY3VhbHF1aWVyIHRlbWEgYfFhZGllbmRvIHVuIGFyZ3VtZW50byBhbAorICBtYW5kYXRvIKs6aGVscLsgbWFuZGF0by4gUHJ1ZWJlIOlzdG9zOgorCisgIDpoZWxwIHcgPElOVFJPPgorICA6aGVscCBjXzxUIDxJTlRSTz4KKyAgOmhlbHAgaW5zZXJ0LWluZGV4IDxJTlRSTz4KKworCit+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+fn4KKworICBBcXXtIGNvbmNsdXllIGVsIHR1dG9yIGRlIFZpbS4gRXN04SBwZW5zYWRvIHBhcmEgZGFyIHVuYSB2aXNp824gYnJldmUgZGVsCisgIGVkaXRvciBWaW0sIGxvIHN1ZmljaWVudGUgcGFyYSBwZXJtaXRpcmxlIHVzYXIgZWwgZWRpdG9yIGRlIGZvcm1hIGJhc3RhbnRlCisgIHNlbmNpbGxhLiBFc3ThIG11eSBsZWpvcyBkZSBlc3RhciBjb21wbGV0byBwdWVzIFZpbSB0aWVuZSBtdWNo7XNpbW9zIG3hcworICBtYW5kYXRvcy4KKworICBQYXJhIGxlY3R1cmFzIHkgZXN0dWRpb3MgcG9zdGVyaW9yZXMgc2UgcmVjb21pZW5kYSBlbCBsaWJybzoKKwlMZWFybmluZyB0aGUgVmkgRWRpdG9yIC0gcG9yIExpbmRhIExhbWIKKwlFZGl0b3JpYWw6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcyBJbmMuCisgIEVzIHVuIGJ1ZW4gbGlicm8gcGFyYSBsbGVnYXIgYSBzYWJlciBjYXNpIHRvZG8gbG8gcXVlIGRlc2VlIGhhY2VyIGNvbiBWaS4KKyAgTGEgc2V4dGEgZWRpY2nzbiBpbmNsdXllIHRhbWJp6W4gaW5mb3JtYWNp824gc29icmUgVmltLgorCisgIEVzdGUgdHV0b3JpYWwgaGEgc2lkbyBlc2NyaXRvIHBvciBNaWNoYWVsIEMuIFBpZXJjZSB5IFJvYmVydCBLLiBXYXJlLAorICBDb2xvcmFkbyBTY2hvb2wgb2YgTWluZXMgdXRpbGl6YW5kbyBpZGVhcyBzdW1pbmlzdHJhZGFzIHBvciBDaGFybGVzIFNtaXRoLAorICBDb2xvcmFkbyBTdGF0ZSBVbml2ZXJzaXR5LgorICBFLW1haWw6IGJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdS4KKworICBNb2RpZmljYWRvIHBhcmEgVmltIHBvciBCcmFtIE1vb2xlbmFhci4KKworfn5+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+CisKKyAgVHJhZHVjaWRvIGRlbCBpbmds6XMgcG9yOgorCisgIEVkdWFyZG8gRi4gQW1hdHJpYQorICBDb3JyZW8gZWxlY3Ry825pY286IGVmZXJuYTFAcGxhdGVhLnBudGljLm1lYy5lcworCit+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+fn4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvdHV0b3IuZnIgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmZyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTY2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmZyCkBAIC0wLDAgKzEsODA5IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9IEIgaSBlIG4gdiBlIG4gdSBlICBkYW5zIGxlICBUIHUgdCBvIHIgaSBlIGwgIGRlICBWIEkgTSAgLSAgVmVyc2lvbiAxLjUuZnIuMiA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgVmltIGVzdCB1biDpZGl0ZXVyIHRy6HMgcHVpc3NhbnQgcXVpIGEgdHJvcCBkZSBjb21tYW5kZXMgcG91ciBwb3V2b2lyCisgICAgIHRvdXRlcyBsZXMgZXhwbGlxdWVyIGRhbnMgdW4gY291cnMgY29tbWUgY2VsdWktY2ksIHF1aSBlc3QgY29u53UgcG91ciBlbgorICAgICBk6WNyaXJlIHN1ZmZpc2FtbWVudCBhZmluIGRlIHZvdXMgcGVybWV0dHJlIGQndXRpbGlzZXIgc2ltcGxlbWVudCBWaW0uCisKKyAgICAgTGUgdGVtcHMgcmVxdWlzIHBvdXIgc3VpdnJlIGNlIGNvdXJzIGVzdCBkJ2Vudmlyb24gMjUg4CAzMCBtaW51dGVzLCBzZWxvbgorICAgICBsZSB0ZW1wcyBxdWUgdm91cyBwYXNzZXJleiDgIGV4cOlyaW1lbnRlci4gIExlcyBjb21tYW5kZXMgdXRpbGlz6WVzIGRhbnMKKyAgICAgbGVzIGxl529ucyBtb2RpZmllcm9udCBsZSB0ZXh0ZS4gRmFpdGVzIHVuZSBjb3BpZSBkZSBjZSBmaWNoaWVyIGFmaW4gZGUKKyAgICAgdm91cyBlbnRyYe5uZXIgZGVzc3VzIChzaSB2b3VzIGF2ZXogbGFuY+kgInZpbXR1dG9yIiBjZWNpIGVzdCBk6WrgIHVuZQorICAgICBjb3BpZSkuCisKKyAgICAgSWwgZXN0IGltcG9ydGFudCBkZSBnYXJkZXIgZW4gdOp0ZSBxdWUgY2UgY291cnMgZXN0IGNvbud1IHBvdXIgYXBwcmVuZHJlCisgICAgIHBhciBsYSBwcmF0aXF1ZS4gIENlbGEgc2lnbmlmaWUgcXVlIHZvdXMgZGV2ZXogZXjpY3V0ZXIgbGVzIGNvbW1hbmRlcworICAgICBwb3VyIGxlcyBhcHByZW5kcmUgY29ycmVjdGVtZW50LiAgU2kgdm91cyB2b3VzIGNvbnRlbnRleiBkZSBsaXJlIGxlCisgICAgIHRleHRlLCB2b3VzIG91YmxpZXJleiBsZXMgY29tbWFuZGVzICEKKworICAgICBNYWludGVuYW50LCB26XJpZmlleiBxdWUgdm90cmUgY2xhdmllciBuJ2VzdCBQQVMgdmVyb3VpbGzpIGVuIG1hanVzY3VsZXMsCisgICAgIGV0IGFwcHV5ZXogbGEgdG91Y2hlICBqICBsZSBub21icmUgZGUgZm9pcyBzdWZmaXNhbnQgcG91ciBxdWUgbGEgbGXnb24KKyAgICAgMS4xIHJlbXBsaXNzZSBjb21wbOh0ZW1lbnQgbCfpY3Jhbi4KK35+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+fgorCQkgICAgICBMZedvbiAxLjEgOiBEyVBMQUNFTUVOVCBEVSBDVVJTRVVSCisKKworICAqKiBQb3VyIGTpcGxhY2VyIGxlIGN1cnNldXIsIGFwcHV5ZXogbGVzIHRvdWNoZXMgaCxqLGssbCBjb21tZSBpbmRpcXXpLiAqKgorCSAgICBeCisJICAgIGsJICAgICBBc3R1Y2U6ICBMYSB0b3VjaGUgaCBlc3Qg4CBnYXVjaGUgZXQgZOlwbGFjZSDgIGdhdWNoZS4KKyAgICAgIDwgaCAgICAgIGwgPgkgICAgICBMYSB0b3VjaGUgbCBlc3Qg4CBkcm9pdGUgZXQgZOlwbGFjZSDgIGRyb2l0ZS4KKwkgICBqCQkgICAgICBMYSB0b3VjaGUgaiByZXNzZW1ibGUg4CB1bmUgZmzoY2hlIHZlcnMgbGUgYmFzLgorCSAgIHYKKyAgMS4gROlwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbCfpY3JhbiBqdXNxdSfgIHZvdXMgc2VudGlyIOAgbCdhaXNlLgorCisgIDIuIE1haW50ZW5leiBsYSB0b3VjaGUgQmFzIChqKSBlbmZvbmPpZSBqdXNxdSfgIGNlIHF1J2VsbGUgc2Ugculw6HRlLgorLS0tPiBNYWludGVuYW50IHZvdXMg6nRlcyBjYXBhYmxlIGRlIHZvdXMgZOlwbGFjZXIganVzcXUn4CBsYSBsZedvbiBzdWl2YW50ZS4KKworICAzLiBFbiB1dGlsaXNhbnQgbGEgdG91Y2hlIEJhcywgYWxsZXog4CBsYSBMZedvbiAxLjIuCisKK05vdGU6IFNpIGphbWFpcyB2b3VzIGRvdXRleiBkZSBjZSBxdWUgdm91cyB2ZW5leiBkZSB0YXBlciwgYXBwdXlleiA8yWNoYXA+CisgICAgICBwb3VyIHJldmVuaXIgZW4gbW9kZSBOb3JtYWwuIFB1aXMgcmV0YXBleiBsYSBjb21tYW5kZSBxdWUgdm91cyB2b3VsaWV6LgorCitOb3RlOiBMZXMgdG91Y2hlcyBmbOljaOllcyBkZXZyYWllbnQg6WdhbGVtZW50IGZvbmN0aW9ubmVyLiBNYWlzIGVuIHV0aWxpc2FudAorICAgICAgaGprbCB2b3VzIHBvdXJyZXogdm91cyBk6XBsYWNlciBiZWF1Y291cCBwbHVzIHJhcGlkZW1lbnQsIHVuZSBmb2lzIHF1ZQorICAgICAgdm91cyBhdXJleiBwcmlzIGwnaGFiaXR1ZGUuCit+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+fn4KKwkJICAgICBMZedvbiAxLjIgOiBFTlRSyUUgRVQgU09SVElFIERFIFZJTQorCisKKyAhISBOT1RFOiBBdmFudCBkJ2VmZmVjdHVlciBsZXMg6XRhcGVzIGNpLWRlc3NvdXMsIGxpc2V6IHRvdXRlIGNldHRlIGxl529uICEhCisKKyAgMS4gQXBwdXlleiBsYSB0b3VjaGUJPMljaGFwPiAgKHBvdXIg6nRyZSBz+3IgZCfqdHJlIGVuIG1vZGUgTm9ybWFsKS4KKworICAyLiBUYXBlejoJCQk6cSEgPEVudHLpZT4KKworLS0tPiBDZWNpIHF1aXR0ZSBsJ+lkaXRldXIgU0FOUyBzYXV2ZXIgbGVzIGNoYW5nZW1lbnRzIHF1ZSB2b3VzIGF2ZXogZmFpdHMuCisgICAgIFNpIHZvdXMgdm91bGV6IGVucmVnaXN0cmVyIGxlcyBjaGFuZ2VtZW50cyBldCBzb3J0aXIsIHRhcGV6OgorCQkJCTp3cSA8RW50cullPgorCisgIDMuIExvcnNxdWUgbCdpbnZpdGUgZHUgJ3NoZWxsJyB2b3VzIHNlcmEgcHLpc2VudOllLCB0YXBleiBsYSBjb21tYW5kZSBxdWkKKyAgICAgdm91cyBhIGFtZW7pIGRhbnMgY2UgdHV0b3JpZWwuICBDZWxhIHBvdXJyYWl0IOp0cmU6ICAgIHZpbXR1dG9yIDxFbnRy6WU+CisgICAgIE5vcm1hbGVtZW50LCB2b3VzIHV0aWxpc2VyaWV6OgkJCSAgICB2aW0gdHV0b3IgPEVudHLpZT4KKworLS0tPiAndmltJyBsYW5jZSBsJ+lkaXRldXIsICd0dXRvcicgZXN0IGxlIGZpY2hpZXIgcXVlIHZvdXMgc291aGFpdGV6IOlkaXRlci4KKworICA0LiBTaSB2b3VzIGF2ZXogbeltb3Jpc+kgY2VzIOl0YXBlcyBldCDqdGVzIGNvbmZpYW50LCBlZmZlY3R1ZXogbGVzIOl0YXBlcworICAgICAxIOAgMyBwb3VyIHNvcnRpciBwdWlzIHJlbnRyZXIgZGFucyBsJ+lkaXRldXIuICBE6XBsYWNleiBlbnN1aXRlIGxlCisgICAgICBjdXJzZXVyIGp1c3F1J+AgbGEgTGXnb24gMS4zLgorfn5+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+CisJCSAgTGXnb24gMS4zIDogyURJVElPTiBERSBURVhURSAtIEVGRkFDRU1FTlQKKworCisgKiogRW4gbW9kZSBOb3JtYWwsIGFwcHV5ZXogIHgJcG91ciBlZmZhY2VyIGxlIGNhcmFjdOhyZSBzb3VzIGxlIGN1cnNldXIuICoqCisKKyAgMS4gROlwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGEgbGlnbmUgbWFycXXpZSAtLS0+IGNpLWRlc3NvdXMuCisKKyAgMi4gUG91ciBjb3JyaWdlciBsZXMgZXJyZXVycywgZOlwbGFjZXogbGUgY3Vyc2V1ciBqdXNxdSfgIGNlIHF1J2lsIHNvaXQKKyAgICAgc3VyIHVuIGNhcmFjdOhyZSDgIGVmZmFjZXIuCisKKyAgMy4gQXBwdXlleiBsYSB0b3VjaGUJeCAgcG91ciBlZmZhY2VyIGxlIGNhcmFjdOhyZSByZWRvbmRhbnQuCisKKyAgNC4gUulw6XRleiBsZXMg6XRhcGVzIDIg4CA0IGp1c3F1J+AgY2UgcXVlIGxhIHBocmFzZSBzb2l0IGNvcnJlY3RlLgorCistLS0+IExhIHZ2YWNoZSDgIHNhdXTp6SBhdS1kZGVzc3VzIGRkZSBsYSBsdXVuZS4KKworICA1LiBNYWludGVuYW50IHF1ZSBsYSBsaWduZSBlc3QgY29ycmVjdGUsIHBhc3NleiDgIGxhIGxl529uIDEuNC4KKworTk9URTogRW4gYXZhbudhbnQgZGFucyBjZSBjb3Vycywgbidlc3NheWV6IHBhcyBkZSBt6W1vcmlzZXIsIGFwcHJlbmV6IHBhcgorICAgICAgbGEgcHJhdGlxdWUuCisKKworfn5+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+CisJCSAgIExl529uIDEuNCA6IMlESVRJT04gREUgVEVYVEUgLSBJTlNFUlRJT04KKworCisJICAgKiogRW4gbW9kZSBOb3JtYWwsIGFwcHV5ZXogIGkgIHBvdXIgaW5z6XJlciBkdSB0ZXh0ZS4gKioKKworICAxLiBE6XBsYWNleiBsZSBjdXJzZXVyIHN1ciBsYSBwcmVtaehyZSBsaWduZSBtYXJxdellIC0tLT4gY2ktZGVzc291cy4KKworICAyLiBQb3VyIHJlbmRyZSBsYSBwcmVtaehyZSBsaWduZSBpZGVudGlxdWUg4CBsYSBzZWNvbmRlLCBtZXR0ZXogbGUgY3Vyc2V1cgorICAgICBzdXIgbGUgcHJlbWllciBjYXJhY3TocmUgQVBSyFMgbCdlbmRyb2l0IG/5IGluc+lyZXIgbGUgdGV4dGUuCisKKyAgMy4gQXBwdXlleiAgaSAgZXQgdGFwZXogbGVzIGNhcmFjdOhyZXMgcXVpIG1hbnF1ZW50LgorCisgIDQuIFVuZSBmb2lzIHF1J3VuZSBlcnJldXIgZXN0IGNvcnJpZ+llLCBhcHB1eWV6IDzJY2hhcD4gcG91ciByZXZlbmlyIGVuIG1vZGUKKyAgICAgTm9ybWFsLiBS6XDpdGV6IGxlcyDpdGFwZXMgMiDgIDQgcG91ciBjb3JyaWdlciBsYSBwaHJhc2UuCisKKy0tLT4gSWwgbW5xZSBjYXJhY3TocmVzIGNldHRlIC4KKy0tLT4gSWwgbWFucXVlIGRlcyBjYXJhY3TocmVzIGRhbnMgY2V0dGUgbGlnbmUuCisKKyAgNS4gVW5lIGZvaXMgcXVlIHZvdXMg6nRlcyDgIGwnYWlzZSBhdmVjIGwnaW5zZXJ0aW9uIGRlIHRleHRlLCBhbGxleiBhdQorICAgICBy6XN1bekgY2ktZGVzc291cy4KKworCit+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+fn4KKwkJCSAgICAgUslTVU3JIERFIExBIExFx09OIDEKKworICAxLiBMZSBjdXJzZXVyIHNlIGTpcGxhY2UgYXZlYyBsZXMgdG91Y2hlcyBmbOljaOllcyBvdSBsZXMgdG91Y2hlcyBoamtsLgorCSBoIChnYXVjaGUpCWogKGJhcykgICAgICAgIGsgKGhhdXQpICAgICAgIGwgKGRyb2l0ZSkKKworICAyLiBQb3VyIGVudHJlciBkYW5zIFZpbSAo4CBsJ2ludml0ZSAlKSB0YXBlejogIHZpbSBGSUNISUVSIDxFbnRy6WU+CisKKyAgMy4gUG91ciBxdWl0dGVyIFZpbSB0YXBlejogIDzJY2hhcD4gOnEhIDxFbnRy6WU+ICBwb3VyIHBlcmRyZSB0b3VzIGxlcworCQkJCQkJICAgIGNoYW5nZW1lbnRzLgorCQkgICBPVSB0YXBlejogIDzJY2hhcD4gOndxIDxFbnRy6WU+ICBwb3VyIGVucmVnaXN0cmVyIGxlcworCQkJCQkJICAgIGNoYW5nZW1lbnRzLgorCisgIDQuIFBvdXIgZWZmYWNlciB1biBjYXJhY3TocmUgc291cyBsZSBjdXJzZXVyIGVuIG1vZGUgTm9ybWFsIHRhcGV6OiAgeAorCisgIDUuIFBvdXIgaW5z6XJlciBkdSB0ZXh0ZSBhdSBuaXZlYXUgZHUgY3Vyc2V1ciBlbiBtb2RlIE5vcm1hbCB0YXBlejoKKwkgaSAgIHRhcGV6IGxlIHRleHRlICAgPMljaGFwPgorCitOT1RFOiBBcHB1eWVyICA8yWNoYXA+CXZvdXMgcGxhY2UgZW4gbW9kZSBOb3JtYWwgb3UgYW5udWxlIHVuZSBjb21tYW5kZQorICAgICAgcGFydGllbGxlbWVudCB0YXDpZSBkb250IHZvdXMgbmUgdm91ZHJpZXogcGx1cy4KKworUGFzc2V6IG1haW50ZW5hbnQg4CBsYSBMZedvbiAyLgorCit+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+fn4KKwkJCSAgIExl529uIDIuMSA6IEVGRkFDRU1FTlRTCisKKworCSAgICAqKiBUYXBleiAgZHcgIHBvdXIgZWZmYWNlciBqdXNxdSfgIGxhIGZpbiBkJ3VuIG1vdC4gKioKKworICAxLiBBcHB1eWV6ICA8yWNoYXA+ICBwb3VyIOp0cmUgc/tyIGQn6nRyZSBlbiBtb2RlIE5vcm1hbC4KKworICAyLiBE6XBsYWNleiBsZSBjdXJzZXVyIHN1ciBsYSBsaWduZSBtYXJxdellIC0tLT4gY2ktZGVzc291cy4KKworICAzLiBQbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGUgZOlidXQgZCd1biBtb3QgcXVpIGEgYmVzb2luIGQn6nRyZSBlZmZhY+kuCisKKyAgNC4gVGFwZXogIGR3CXBvdXIgZmFpcmUgZGlzcGFyYe50cmUgY2UgbW90LgorCitOT1RFOiBMZXMgbGV0dHJlcyAgZHcgIGFwcGFyYe50cm9udCBzdXIgbGEgZGVybmnocmUgbGlnbmUgZGUgbCfpY3JhbiBsb3JzIGRlCisgICAgICB2b3RyZSBmcmFwcGUuIFNpIHZvdXMgYXZleiBtYWwgdGFw6SBxdWVscXVlIGNob3NlLCBhcHB1eWV6IDzJY2hhcD4gZXQKKyAgICAgIHJlY29tbWVuY2V6LgorCistLS0+IElsIHkgYSBxdWVscXVlcyBkcvRsZSBtb3RzIHF1aSBuJ29udCByaWVuIOAgZmFpcmUgcGFwaWVyIHN1ciBjZXR0ZSBsaWduZS4KKworICA1LiBS6XDpdGV6IGxlcyDpdGFwZXMgMyBldCA0IGp1c3F1J+AgY2UgcXVlIGxhIHBocmFzZSBzb2l0IGNvcnJlY3RlIGV0IGFsbGV6CisgICAgIOAgbGEgTGXnb24gMi4yLgorCit+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+fn4KKwkJCUxl529uIDIuMiA6IFBMVVMgRCdFRkZBQ0VNRU5UUworCisKKwkgICoqIFRhcGV6ICBkJAlwb3VyIGVmZmFjZXIganVzcXUn4CBsYSBmaW4gZGUgbGEgbGlnbmUuICoqCisKKyAgMS4gQXBwdXlleiAgPMljaGFwPiAgcG91ciDqdHJlIHP7ciBkJ+p0cmUgZW4gbW9kZSBOb3JtYWwuCisKKyAgMi4gROlwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGEgbGlnbmUgbWFycXXpZSAtLS0+IGNpLWRlc3NvdXMuCisKKyAgMy4gROlwbGFjZXogbGUgY3Vyc2V1ciBqdXNxdSfgIGxhIGZpbiBjb3JyZWN0ZSBkZSBsYSBsaWduZQorICAgICAoQVBSyFMgbGUgcHJlbWllciAuICkuCisKKyAgNC4gVGFwZXogIGQkCXBvdXIgZWZmYWNlciBqdXNxdSfgIGxhIGZpbiBkZSBsYSBsaWduZS4KKworLS0tPiBRdWVscXUndW4gYSB0YXDpIGxhIGZpbiBkZSBjZXR0ZSBsaWduZSBkZXV4IGZvaXMuIGNldHRlIGxpZ25lIGRldXggZm9pcy4KKworICA1LiBBbGxleiDgIGxhIExl529uIDIuMyBwb3VyIGNvbXByZW5kcmUgY2UgcXVpIHNlIHBhc3NlLgorCisKKworCisKK35+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+fgorCQkgICBMZedvbiAyLjMgOiBERVMgQ09NTUFOREVTIEVUIERFUyBPQkpFVFMKKworCisgIExlIGZvcm1hdCBkZSBsYSBjb21tYW5kZSBkJ2VmZmFjZW1lbnQgIGQgIGVzdCBsZSBzdWl2YW50OgorCisJIFtub21icmVdICBkICBvYmpldAkgICBPVQkgICAgIGQJW25vbWJyZV0gIG9iamV0CisgIG/5OgorICAgIG5vbWJyZSAtIGVzdCBjb21iaWVuIGRlIGZvaXMgZXjpY3V0ZXIgbGEgY29tbWFuZGUgKG9wdGlvbm5lbCwgZOlmYXV0OiAxKS4KKyAgICBkIC0gZXN0IGxhIGNvbW1hbmRlIGQnZWZmYWNlbWVudC4KKyAgICBvYmpldCAtIGVzdCBjZSBzdXIgcXVvaSBsYSBjb21tYW5kZSB2YSBvcOlyZXIgKGxpc3RlIGNpLWRlc3NvdXMpLgorCisgIFVuZSBjb3VydGUgbGlzdGUgZCdvYmpldHM6CisgICAgdyAtIGR1IGN1cnNldXIganVzcXUn4CBsYSBmaW4gZHUgbW90LCB5IGNvbXByaXMgbCdlc3BhY2UgcXVpIHN1aXQuCisgICAgZSAtIGR1IGN1cnNldXIganVzcXUn4CBsYSBmaW4gZHUgbW90LCBTQU5TIGwnZXNwYWNlIHF1aSBzdWl0LgorICAgICQgLSBkdSBjdXJzZXVyIGp1c3F1J+AgbGEgZmluIGRlIGxhIGxpZ25lLgorCitOT1RFOiBQb3VyIGxlcyBhdmVudHVyZXV4LCBsZSBzZXVsIGFwcHVpIGQnIG9iamV0ICBlbiBtb2RlIE5vcm1hbCwgc2FucworICAgICAgY29tbWFuZGUsIGTpcGxhY2UgbGUgY3Vyc2V1ciBjb21tZSBpbmRpcXXpIGRhbnMgbGEgbGlzdGUgZGVzIG9iamV0cy4KKworCisKKworfn5+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+CisJCSBMZedvbiAyLjQgOiBVTkUgRVhDRVBUSU9OIMAgJ0NPTU1BTkRFLU9CSkVUJworCisJICAgICAgKiogVGFwZXoJZGQgIHBvdXIgZWZmYWNlciB1bmUgbGlnbmUgY29tcGzodGUuICoqCisKKyAgVnUgbGUgbm9tYnJlIGRlIGZvaXMgb/kgbCdvbiBlZmZhY2UgZGVzIGxpZ25lcyBjb21wbOh0ZXMsIGxlcyBjb25jZXB0ZXVycworICBkZSBWaSBvbnQgZOljaWTpIHF1J2lsIHNlcmFpdCBwbHVzIGZhY2lsZSBkZSB0YXBlciBzaW1wbGVtZW50IGRldXggZCDgIGxhCisgIHN1aXRlIHBvdXIgZWZmYWNlciB1bmUgbGlnbmUuCisKKyAgMS4gUGxhY2V6IGxlIGN1cnNldXIgc3VyIGxhIHNlY29uZGUgbGlnbmUgZGUgbGEgcGhyYXNlIGNpLWRlc3NvdXMuCisgIDIuIFRhcGV6ICBkZAlwb3VyIGVmZmFjZXIgbGEgbGlnbmUuCisgIDMuIE1haW50ZW5hbnQgYWxsZXog4CBsYSBxdWF0cmnobWUgbGlnbmUuCisgIDQuIFRhcGV6ICAyZGQgIChyYXBwZWxlei12b3VzLCBub21icmUtY29tbWFuZGUtb2JqZXQpIHBvdXIgZWZmYWNlciBsZXMKKyAgICAgZGV1eCBsaWduZXMuCisKKyAgICAgIDEpICBMZXMgcm9zZXMgc29udCByb3VnZXMsCisgICAgICAyKSAgTGEgYm91ZSBjJ2VzdCBkcvRsZSwKKyAgICAgIDMpICBMZXMgdmlvbGV0dGVzIHNvbnQgYmxldWVzLAorICAgICAgNCkgIEonYWkgdW5lIHZvaXR1cmUsCisgICAgICA1KSAgTGVzIGhvcmxvZ2VzIGRvbm5lbnQgbCdoZXVyZSwKKyAgICAgIDYpICBMZSBzdWNyZSBlc3QgZG91eAorICAgICAgNykgIFRvdXQgY29tbWUgdm91cy4KKworfn5+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+CisJCQkgICAgTGXnb24gMi41IDogTCdBTk5VTEFUSU9OCisKKwkgICAgKiogVGFwZXogIHUgIHBvdXIgYW5udWxlciBsZXMgZGVybmnocmVzIGNvbW1hbmRlcy4gKioKKwkgICAgICAgKiogVGFwZXogIFUgIHBvdXIgculjdXDpcmVyIHRvdXRlIHVuZSBsaWduZS4gKioKKworICAxLiBE6XBsYWNleiBsZSBjdXJzZXVyIHN1ciBsYSBsaWduZSBtYXJxdellIC0tLT4gY2ktZGVzc291cyBldCBwbGFjZXotbGUgc3VyCisgICAgIGxhIHByZW1p6HJlIGVycmV1ci4KKyAgMi4gVGFwZXogIHggIHBvdXIgZWZmYWNlciBsZSBwcmVtaWVyIGNhcmFjdOhyZSByZWRvbmRhbnQuCisgIDMuIFB1aXMgdGFwZXogIHUgIHBvdXIgYW5udWxlciBsYSBkZXJuaehyZSBjb21tYW5kZSBleOljdXTpZS4KKyAgNC4gQ2V0dGUgZm9pcywgY29ycmlnZXogdG91dGVzIGxlcyBlcnJldXJzIGRlIGxhIGxpZ25lIGF2ZWMgbGEgY29tbWFuZGUgIHggLgorICA1LiBQdWlzIHRhcGV6IHVuICBVICBtYWp1c2N1bGUgcG91ciByZW1ldHRyZSBsYSBsaWduZSBkYW5zIHNvbiDpdGF0IGluaXRpYWwuCisgIDYuIFB1aXMgdGFwZXogIHUgIGRldXgtdHJvaXMgZm9pcyBwb3VyIGFubnVsZXIgbGUgIFUJZXQgbGVzIGNvbW1hbmRlcworICAgICBwculj6WRlbnRlcy4KKyAgNy4gTWFpbnRlbmFudCB0YXBleiAgQ3RybC1SICAobWFpbnRlbmV6IGxhIHRvdWNoZSBDdHJsIGVuZm9uY+llIHBlbmRhbnQgcXVlCisgICAgIHZvdXMgYXBwdXlleiBzdXIgUikgZGV1eC10cm9pcyBmb2lzIHBvdXIgcmVmYWlyZSBsZXMgY29tbWFuZGVzIChhbm51bGVyCisgICAgIGxlcyBhbm51bGF0aW9ucykuCisKKy0tLT4gQ29vcnJpZ2V6IGxlcyBlcnJldXJzIHN1dXIgY2NldHRlIGxpZ25lIGV0IHJlZW1ldHRlei1sZXMgYXZ2ZWMgJ2FubnVsZXInLgorCisgIDguIENlIHNvbnQgZGVzIGNvbW1hbmRlcyB0cuhzIHV0aWxlcy4gTWFpbnRlbmFudCwgYWxsZXogYXUgculzdW3pIGRlIGxhCisgICAgIExl529uIDIuCisKK35+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+fgorCQkJICAgICBSyVNVTckgREUgTEEgTEXHT04gMgorCisKKyAgMS4gUG91ciBlZmZhY2VyIGR1IGN1cnNldXIganVzcXUn4CBsYSBmaW4gZCd1biBtb3QgdGFwZXo6CWR3CisKKyAgMi4gUG91ciBlZmZhY2VyIGR1IGN1cnNldXIganVzcXUn4CBsYSBmaW4gZCd1bmUgbGlnbmUgdGFwZXo6CWQkCisKKyAgMy4gUG91ciBlZmZhY2VyIHRvdXRlIHVuZSBsaWduZSB0YXBlejogIGRkCisKKyAgNC4gTGUgZm9ybWF0IGQndW5lIGNvbW1hbmRlIGVuIG1vZGUgTm9ybWFsIGVzdDoKKworICAgICAgIFtub21icmVdICBjb21tYW5kZSAgb2JqZXQgICAgIE9VICAgICBjb21tYW5kZSAgW25vbWJyZV0Jb2JqZXQKKyAgICAgb/k6CisgICAgICAgbm9tYnJlIC0gZXN0IGNvbWJpZW4gZGUgZm9pcyBy6XDpdGVyIGxhIGNvbW1hbmRlCisgICAgICAgY29tbWFuZGUgLSBlc3QgY2UgcXUnaWwgZmF1dCBmYWlyZSwgcGFyIGV4ZW1wbGUJZCAgcG91ciBlZmZhY2VyCisgICAgICAgb2JqZXQgLSBlc3QgY2Ugc3VyIHF1b2kgbGEgY29tbWFuZGUgZGV2cmFpdCBhZ2lyLCBwYXIgZXhlbXBsZSB3IChtb3QpLAorCSAgICAgICAkIChqdXNxdSfgIGxhIGZpbiBkZSBsYSBsaWduZSksIGV0Yy4KKworICA1LiBQb3VyIGFubnVsZXIgZGVzIGFjdGlvbnMgcHLpY+lkZW50ZXMsIHRhcGV6OgkgICAgIHUJKHUgbWludXNjdWxlKQorICAgICBQb3VyIGFubnVsZXIgdG91cyBsZXMgY2hhbmdlbWVudHMgc3VyIHVuZSBsaWduZSB0YXBlejogIFUJKFUgbWFqdXNjdWxlKQorICAgICBQb3VyIGFubnVsZXIgbCdhbm51bGF0aW9uIHRhcGV6OgkJCSAgICAgQ3RybC1SCisKK35+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+fgorCQkJICAgICBMZedvbiAzLjEgOiBMRSBDT0xMQUdFCisKKworICAgKiogVGFwZXogIHAJcG91ciBwbGFjZXIgYXBy6HMgbGUgY3Vyc2V1ciBjZSBxdWkgdmllbnQgZCfqdHJlIGVmZmFj6S4gKioKKworICAxLiBQbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGEgcHJlbWnocmUgbGlnbmUgZHUgInBv6G1lIiBjaS1kZXNzb3VzLgorCisgIDIuIFRhcGV6ICBkZAlwb3VyIGVmZmFjZXIgbGEgbGlnbmUgZXQgbGEgcGxhY2VyIGRhbnMgbGUgdGFtcG9uIGRlIFZpbS4KKworICAzLiBE6XBsYWNleiBsZSBjdXJzZXVyIHN1ciBsYSBsaWduZSBxdWkgUFLJQ8hERSBsJ2VuZHJvaXQgb/kgdm91cyB2b3VsZXoKKyAgICAgcmVtZXR0cmUgbGEgbGlnbmUgZWZmYWPpZS4KKworICA0LiBFbiBtb2RlIE5vcm1hbCwgdGFwZXogIHAgIHBvdXIgcmVtZXR0cmUgbGEgbGlnbmUuCisKKyAgNS4gUulw6XRleiBsZXMg6XRhcGVzIDIg4CA0IHBvdXIgbWV0dHJlIHRvdXRlcyBsZXMgbGlnbmVzIGRhbnMgbGUgYm9uIG9yZHJlLgorCisgICAgIGQpIEV0IHZvdXMsIHF1J2FwcHJlbmV6LXZvdXMgPworICAgICBiKSBMZXMgdmlvbGV0dGVzIHNvbnQgYmxldWVzLAorICAgICBjKSBMJ2ludGVsbGlnZW5jZSBzJ2FwcHJlbmQsCisgICAgIGEpIExlcyByb3NlcyBzb250IHJvdWdlcywKKworCit+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+fn4KKwkJCSBMZedvbiAzLjIgOiBMRSBSRU1QTEFDRU1FTlQKKworCisgKiogVGFwZXogIHIgIGV0IHVuIGNhcmFjdOhyZSBwb3VyIHJlbXBsYWNlciBsZSBjYXJhY3TocmUgc291cyBsZSBjdXJzZXVyLiAqKgorCisgIDEuIETpcGxhY2V6IGxlIGN1cnNldXIgc3VyIGxhIHByZW1p6HJlIGxpZ25lIG1hcnF16WUgLS0tPiBjaS1kZXNzb3VzLgorCisgIDIuIFBsYWNleiBsZSBjdXJzZXVyIGRlIG1hbmnocmUg4CBjZSBxdSdpbCBzdXJwbG9tYmUgbGEgcHJlbWnocmUgZXJyZXVyLgorCisgIDMuIFRhcGV6ICByICBzdWl2aSBkdSBjYXJhY3TocmUgcXVpIGRvaXQgY29ycmlnZXIgbCdlcnJldXIuCisKKyAgNC4gUulw6XRleiBsZXMg6XRhcGVzIDIgZXQgMyBqdXNxdSfgIGNlIHF1ZSBsYSBwcmVtaehyZSBsaWduZSBzb2l0IGNvcnJlY3RlLgorCistLS0+ICBRdWFuZCBjZXR0ZSBsaWduZSBhIOl06SBzYXV2aWUsIHF1ZWxxdSd1biBhIGxhaXQgZGVzIGZhdW5lcyBkZSBmcmFwcGUgIQorLS0tPiAgUXVhbmQgY2V0dGUgbGlnbmUgYSDpdOkgc2Fpc2llLCBxdWVscXUndW4gYSBmYWl0IGRlcyBmYXV0ZXMgZGUgZnJhcHBlICEKKworICA1LiBNYWludGVuYW50LCBhbGxleiDgIGxhIExl529uIDMuMy4KKworTk9URTogTidvdWJsaWV6IHBhcyBxdWUgdm91cyBkZXZyaWV6IGFwcHJlbmRyZSBwYXIgbGEgcHJhdGlxdWUsIHBhcyBwYXIKKyAgICAgIG3pbW9yaXNhdGlvbi4KKworCit+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+fn4KKwkJCSAgTGXnb24gMy4zIDogTEUgQ0hBTkdFTUVOVAorCisKKwkgICAgKiogUG91ciBjaGFuZ2VyIHRvdXQgb3UgcGFydGllIGQndW4gbW90LCB0YXBleiAgY3cgLioqCisKKyAgMS4gROlwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGEgcHJlbWnocmUgbGlnbmUgbWFycXXpZSAtLS0+IGNpLWRlc3NvdXMuCisKKyAgMi4gUGxhY2V6IGxlIGN1cnNldXIgc3VyIGxlIHUgZGUgbHVoa28uCisKKyAgMy4gVGFwZXogIGN3CWV0IGNvcnJpZ2V6IGxlIG1vdCAoZGFucyBub3RyZSBjYXMsIHRhcGV6ICAnaWduZScuKQorCisgIDQuIEFwcHV5ZXogPMljaGFwPiBldCBwbGFjZXotdm91cyBzdXIgbCdlcnJldXIgc3VpdmFudGUgKGxlIHByZW1pZXIKKyAgICAgY2FyYWN06HJlIHF1aSBkb2l0IOp0cmUgY2hhbmfpKS4KKworICA1LiBS6XDpdGV6IGxlcyDpdGFwZXMgMyBldCA0IGp1c3F1J+AgY2UgcXVlIGxhIHByZW1p6HJlIHBocmFzZSBzb2l0CisgICAgIGlkZW50aXF1ZSDgIGxhIHNlY29uZGUuCisKKy0tLT4gQ2V0dGUgbHVoa28gY29udGllbnQgcXVlbHF1ZXMgbXlxYSBxdWkgb250IHJpY25lIGQn6nRyZSBjaGFudHVmaXAuCistLS0+IENldHRlIGxpZ25lIGNvbnRpZW50IHF1ZWxxdWVzIG1vdHMgcXVpIG9udCBiZXNvaW4gZCfqdHJlIGNoYW5n6XMuCisKK05vdGV6IHF1ZSAgY3cgIGVmZmFjZSBsZSBtb3QgZXQgdm91cyBwbGFjZSBlbnN1aXRlIGVuIG1vZGUgSW5zZXJ0aW9uLgorCit+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+fn4KKwkJICAgIExl529uIDMuNCA6IFBMVVMgREUgQ0hBTkdFTUVOVFMgQVZFQyBjCisKKworICAgICoqIExlIGNoYW5nZW1lbnQgZm9uY3Rpb25uZSBhdmVjIGxlcyBt6m1lcyBvYmpldHMgcXVlIGwnZWZmYWNlbWVudC4gKioKKworICAxLiBMZSBjaGFuZ2VtZW50IGZvbmN0aW9ubmUgZGUgbGEgbeptZSBtYW5p6HJlIHF1ZSBsJ2VmZmFjZW1lbnQuCisgICAgIExlIGZvcm1hdCBlc3Q6CisKKwkgW25vbWJyZV0gIGMgIG9iamV0CSAgIE9VCSAgICAgYwlbbm9tYnJlXSAgb2JqZXQKKworICAyLiBMZXMgb2JqZXRzIHNvbnQg6WdhbGVtZW50IGxlcyBt6m1lczogIHcgKG1vdCksICQgKGZpbiBkZSBsaWduZSksIGV0Yy4KKworICAzLiBE6XBsYWNlei12b3VzIOAgbGEgcHJlbWnocmUgbGlnbmUgbWFycXXpZSAtLS0+IGNpLWRlc3NvdXMuCisKKyAgNC4gUGxhY2V6IGxlIGN1cnNldXIgc3VyIGxhIHByZW1p6HJlIGVycmV1ci4KKworICA1LiBUYXBleiAgYyQJcG91ciBjaGFuZ2VyIGxhIGZpbiBkZSBsYSBsaWduZSwgcmVuZGV6LWzgIGlkZW50aXF1ZSDgIGxhCisgICAgIHNlY29uZGUgbGlnbmUsIHB1aXMgdGFwZXogPMljaGFwPi4KKworLS0tPiBMYSBmaW4gZGUgY2V0dGUgbGlnbmUgZG9pdCDqdHJlIHJlbmR1ZSBpZGVudGlxdWUg4CBsYSBzZWNvbmRlLgorLS0tPiBMYSBmaW4gZGUgY2V0dGUgbGlnbmUgZG9pdCDqdHJlIGNvcnJpZ+llIGF2ZWMgbGEgY29tbWFuZGUJYyQgLgorCit+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+fn4KKwkJCSAgICAgUslTVU3JIERFIExBIExFx09OIDMKKworCisgIDEuIFBvdXIgcmVtZXR0cmUgZHUgdGV4dGUgcXVpIHZpZW50IGQn6nRyZSBlZmZhY+ksIHRhcGV6ICBwIC4gQ2VsYSBQbGFjZSBsZQorICAgICB0ZXh0ZSBlZmZhY+kgQVBSyFMgbGUgY3Vyc2V1ciAoc2kgdW5lIGxpZ25lIGNvbXBs6HRlIGEg6XTpIGVmZmFj6WUsIGVsbGUKKyAgICAgc2VyYSBwbGFj6WUgc291cyBsYSBsaWduZSBkdSBjdXJzZXVyKS4KKworICAyLiBQb3VyIHJlbXBsYWNlciBsZSBjYXJhY3TocmUgc291cyBsZSBjdXJzZXVyLCB0YXBleiAgciAgc3VpdmkgZHUgY2FyYWN06HJlCisgICAgIHF1aSByZW1wbGFjZXJhIGwnb3JpZ2luYWwuCisKKyAgMy4gTGUgY2hhbmdlbWVudCB2b3VzIHBlcm1ldCBkZSBjaGFuZ2VyIGwnb2JqZXQgc3DpY2lmaeksIGR1IGN1cnNldXIganVzcXUn4AorICAgICBsYSBmaW4gZGUgbCdvYmpldC4gUGFyIGV4ZW1wbGUsIHRhcGV6ICBjdwlwb3VyIGNoYW5nZXIgZHUgY3Vyc2V1cgorICAgICBqdXNxdSfgIGxhIGZpbiBkdSBtb3QsICBjJCAgcG91ciBjaGFuZ2VyIGp1c3F1J+AgbGEgZmluIGQndW5lIGxpZ25lLgorCisgIDQuIExlIGZvcm1hdCBwb3VyIGxlIGNoYW5nZW1lbnQgZXN0OgorCisJIFtub21icmVdICBjICBvYmpldAkgICBPVQkgICAgIGMJW25vbWJyZV0gIG9iamV0CisKK1Bhc3NleiBtYWludGVuYW50IOAgbGEgbGXnb24gc3VpdmFudGUuCisKKworCit+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+fn4KKwkJICAgTGXnb24gNC4xIDogUE9TSVRJT04gRVQgyVRBVCBEVSBGSUNISUVSCisKKworICAqKiBUYXBleiBDdHJsLUcgcG91ciBhZmZpY2hlciB2b3RyZSBwb3NpdGlvbiBkYW5zIGxlIGZpY2hpZXIgZXQgc29uIOl0YXQuCisgICAgIFV0aWxpc2V6IE1hai1HIHBvdXIgdm91cyByZW5kcmUg4CB1bmUgbGlnbmUgZG9ubullIGR1IGZpY2hpZXIuICoqCisKKyAgTm90ZTogTGlzZXogdG91dGUgY2V0dGUgbGXnb24gYXZhbnQgZCdlZmZlY3R1ZXIgbCd1bmUgZGVzIOl0YXBlcyAhCisKKyAgMS4gTWFpbnRlbmV6IGVuZm9uY+llIGxhIHRvdWNoZSBDdHJsIGV0IGFwcHV5ZXogc3VyICBHIC4gIFVuZSBsaWduZSBkJ+l0YXQKKyAgICAgdmEgYXBwYXJh7nRyZSBlbiBiYXMgZGUgbCfpY3JhbiBhdmVjIGxlIG5vbSBkdSBmaWNoaWVyIGV0IGxlIG51belybyBkZSBsYQorICAgICBsaWduZSBv+SB2b3VzIOp0ZXMuICBOb3RleiBjZSBudW3pcm8sIGlsIHNlcnZpcmEgbG9ycyBkZSBsJ+l0YXBlIDMuCisKKyAgMi4gVGFwZXogIEcgIG1hanVzY3VsZSAoTWFqLUcpIHBvdXIgdm91cyByZW5kcmUg4CBsYSBmaW4gZHUgZmljaGllci4KKworICAzLiBUYXBleiBsZSBudW3pcm8gZGUgbGEgbGlnbmUgb/kgdm91cyDpdGlleiBzdWl2aSBkZSBNYWotRy4JQ2VsYSB2b3VzCisgICAgIHJhbehuZXJhIOAgbGEgbGlnbmUgb/kgdm91cyDpdGlleiBhdSBk6XBhcnQuCisgICAgIChMb3JzcXVlIHZvdXMgdGFwZXogbGVzIGNoaWZmcmVzLCBpbHMgbidhcHBhcmFpc3NlbnQgUEFTIOAgbCfpY3JhbikuCisKKyAgNC4gU2kgdm91cyB2b3VzIHNlbnRleiBwcup0IOAgZmFpcmUgY2VjaSwgZWZmZWN0dWV6IGxlcyDpdGFwZXMgMSDgIDMuCisKKworCit+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+fn4KKwkJCSAgICBMZedvbiA0LjIgOiBMQSBSRUNIRVJDSEUKKworCisJICAqKiBUYXBleiAgLyAgc3VpdmkgZCd1biB0ZXh0ZSBwb3VyIHJlY2hlcmNoZXIgY2UgdGV4dGUuICoqCisKKyAgMS4gVGFwZXogbGUgY2FyYWN06HJlICAvICBlbiBtb2RlIE5vcm1hbC4gTm90ZXogcXVlIGNlbHVpLWNpIGV0IGxlIGN1cnNldXIKKyAgICAgYXBwYXJhaXNzZW50IGVuIGJhcyBkZSBsJ+ljcmFuLCBjb21tZSBsb3JzcXVlIGwnb24gdXRpbGlzZSAgOiAuCisKKyAgMi4gUHVpcyB0YXBleiAnZXJycmV1dXInIDxFbnRy6WU+LiAgQydlc3QgbGUgbW90IHF1ZSB2b3VzIHZvdWxleiByZWNoZXJjaGVyLgorCisgIDMuIFBvdXIgcmVjaGVyY2hlciDgIG5vdXZlYXUgbGUgbeptZSB0ZXh0ZSwgdGFwZXogc2ltcGxlbWVudAluIC4KKyAgICAgUG91ciByZWNoZXJjaGVyIGxlIG3qbWUgdGV4dGUgZGFucyBsYSBkaXJlY3Rpb24gb3Bwb3PpZSwgdGFwZXogIE1hai1OIC4KKworICA0LiBTaSB2b3VzIHZvdWxleiByZWNoZXJjaGVyIHVuIHRleHRlIHZlcnMgbGUgaGF1dCBkdSBmaWNoaWVyLCB1dGlsaXNleiAgPworICAgICDgIGxhIHBsYWNlIGRlICAvIC4KKworLS0tPiBlcnJldXIgbmUgcyfpY3JpdCBwYXMgImVycnJldXVyIjsgZXJycmV1dXIgZXN0IHVuZSBlcnJldXIuCisKK05vdGU6IFF1YW5kIGxhIHJlY2hlcmNoZSBhdHRlaW50IGxhIGZpbiBkdSBmaWNoaWVyLCBlbGxlIHJlcHJlbmQgYXUgZOlidXQuCisKKworCit+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+fn4KKwkgICAgTGXnb24gNC4zIDogUkVDSEVSQ0hFIERFUyBQQVJFTlRIyFNFUyBDT1JSRVNQT05EQU5URVMKKworCisJICAgKiogVGFwZXogICUJcG91ciB0cm91dmVyIGRlcyApLCBdIG91IH0gY29ycmVzcG9uZGFudHMuICoqCisKKyAgMS4gUGxhY2V6IGxlIGN1cnNldXIgc3VyIGwndW4gZGVzICgsIFsgb3UgeyBkZSBsYSBsaWduZSBtYXJxdellIC0tLT4KKyAgICAgY2ktZGVzc291cy4KKworICAyLiBQdWlzIHRhcGV6IGxlIGNhcmFjdOhyZSAgJSAuCisKKyAgMy4gTGUgY3Vyc2V1ciBkZXZyYWl0IHNlIHBsYWNlciBzdXIgbGEgcGFyZW50aOhzZSBjb3JyZXNwb25kYW50ZS4KKworICA0LiBUYXBleiAgJSAgcG91ciByZXBsYWNlciBsZSBjdXJzZXVyIHN1ciBsJ2F1dHJlIHBhcmVudGjoc2UuCisKKy0tLT4gVm9pY2kgKCB1bmUgbGlnbmUgZGUgdGVzdCBjb250ZW5hbnQgZGVzICgsIGRlcyBbIF0gZXQgZGVzIHsgfSApKS4KKworTm90ZTogQ2V0dGUgZm9uY3Rpb25uYWxpdOkgZXN0IHRy6HMgdXRpbGUgbG9ycyBkdSBk6WJvZ2FnZSBkJ3VuIHByb2dyYW1tZSBxdWkKKyAgICAgIGNvbnRpZW50IGRlcyBwYXJlbnRo6HNlcyBk6XPpcXVpbGlicullcyAhCisKKworCisKK35+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+fgorCSAgICAgICBMZedvbiA0LjQgOiBVTkUgTUFOSchSRSBERSBDT1JSSUdFUiBMRVMgRVJSRVVSUworCisKKyAgKiogVGFwZXogIDpzL2FuY2llbi9ub3V2ZWF1L2cgIHBvdXIgcmVtcGxhY2VyICdhbmNpZW4nIHBhciAnbm91dmVhdScuICAqKgorCisgIDEuIETpcGxhY2V6IGxlIGN1cnNldXIgc3VyIGxhIGxpZ25lIG1hcnF16WUgLS0tPiBjaS1kZXNzb3VzLgorCisgIDIuIFRhcGV6ICA6cy9sZWUvbGUgPEVudHLpZT4gLiBOb3RleiBxdWUgY2V0dGUgY29tbWFuZGUgY2hhbmdlIHNldWxlbWVudCBsYQorICAgICBwcmVtaehyZSBvY2N1cmVuY2Ugc3VyIGxhIGxpZ25lLgorCisgIDMuIFB1aXMgdGFwZXogIDpzL2xlZS9sZS9nICBxdWkgb3Jkb25uZSBkZSBmYWlyZSB1bmUgc3Vic3RpdHV0aW9uIGdsb2JhbGUKKyAgICAgc3VyIGxhIGxpZ25lLiBDZWxhIGNoYW5nZSB0b3V0ZXMgbGVzIG9jY3VyZW5jZXMgc3VyIGxhIGxpZ25lCisKKy0tLT4gbGVlIG1laWxsZXVyIG1vbWVudCBwb3VyIHJlZ2FyZGVyIGxlZXMgZmxldXJzIGVzdCBwZW5kYW50IGxlZSBQcmludGVtcHMuCisKKyAgNC4gUG91ciBjaGFuZ2VyIHRvdXRlcyBsZXMgb2NjdXJlbmNlcyBkJ3VuIHRleHRlLCBlbnRyZSBkZXV4IGxpZ25lcywKKyAgICAgdGFwZXogIDojLCNzL2FuY2llbi9ub3V2ZWF1L2cgIG/5ICMsIyBzb250IGxlcyBudW3pcm9zIGRlcyBkZXV4IGxpZ25lcy4KKyAgICAgVGFwZXogIDolcy9hbmNpZW4vbm91dmVhdS9nICAgIHBvdXIgY2hhbmdlciBjaGFxdWUgb2NjdXJlbmNlIGRhbnMgdG91dAorCQkJCSAgICBsZSBmaWNoaWVyLgorCisKKworfn5+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+CisJCQkgICAgIFLJU1VNySBERSBMQSBMRcdPTiA0CisKKworICAxLiBDdHJsLUcgIGFmZmljaGUgdm90cmUgcG9zaXRpb24gZGFucyBsZSBmaWNoaWVyIGV0IGwn6XRhdCBkZSBjZWx1aS1jaS4KKyAgICAgTWFqLUcgIHZvdXMgcGxhY2Ug4CBsYSBmaW4gZHUgZmljaGllci4gVW4gbnVt6XJvIGRlIGxpZ25lIHN1aXZpIGRlIE1hai1HCisgICAgIHZvdXMgcGxhY2Ug4CBjZXR0ZSBsaWduZS4KKworICAyLiBUYXBlciAgLyAgc3VpdmkgZCd1biB0ZXh0ZSByZWNoZXJjaGUgY2UgdGV4dGUgdmVycyBsJ0FWQU5ULgorICAgICBUYXBlciAgPyAgc3VpdmkgZCd1biB0ZXh0ZSByZWNoZXJjaGUgY2UgdGV4dGUgdmVycyBsJ0FSUknIUkUuCisgICAgIEFwcuhzIHVuZSByZWNoZXJjaGUgdGFwZXoJbiAgcG91ciB0cm91dmVyIGwnb2NjdXJlbmNlIHN1aXZhbnRlIGRhbnMgbGEKKyAgICAgbeptZSBkaXJlY3Rpb24gb3UJTWFqLU4gIHBvdXIgcmVjaGVyY2hlciBkYW5zIGxhIGRpcmVjdGlvbiBvcHBvc+llLgorCisgIDMuIFRhcGVyICAlICBsb3JzcXVlIGxlIGN1cnNldXIgZXN0IHN1ciAgKCwgKSwgWywgXSwgeyBvdSB9ICBk6XBsYWNlCisgICAgIGNlbHVpLWNpIHN1ciBsZSBjYXJhY3TocmUgY29ycmVzcG9uZGFudC4KKworICA0LiBQb3VyIHJlbXBsYWNlciBsZSBwcmVtaWVyIGFhIHBhciBiYiBzdXIgdW5lIGxpZ25lIHRhcGV6CSA6cy9hYS9iYgorICAgICBQb3VyIHJlbXBsYWNlciB0b3VzIGxlcyBhYSBwYXIgYmIgc3VyIHVuZSBsaWduZSB0YXBlegkgOnMvYWEvYmIvZworICAgICBQb3VyIHJlbXBsYWNlciBkdSB0ZXh0ZSBlbnRyZSBkZXV4IG51belyb3MgZGUgbGlnbmUgdGFwZXoJIDojLCNzL2FhL2JiL2cKKyAgICAgUG91ciByZW1wbGFjZXIgdG91dGVzIGxlcyBvY2N1cmVuY2VzIGRhbnMgbGUgZmljaGllciB0YXBleiAgOiVzL2FhL2JiL2cKKyAgICAgUG91ciBkZW1hbmRlciB1bmUgY29uZmlybWF0aW9uIOAgY2hhcXVlIGZvaXMgYWpvdXRleiAnYycJIDolcy9hYS9iYi9nYworCisKK35+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+fgorCSAgICAgIExl529uIDUuMSA6IENPTU1FTlQgRVjJQ1VURVIgVU5FIENPTU1BTkRFIEVYVEVSTkUKKworCisgKiogVGFwZXogIDohICBzdWl2aSBkJ3VuZSBjb21tYW5kZSBleHRlcm5lIHBvdXIgZXjpY3V0ZXIgY2V0dGUgY29tbWFuZGUuICoqCisKKyAgMS4gVGFwZXogbGUgIDogIGZhbWlsaWVyIHBvdXIgbWV0dHJlIGxlIGN1cnNldXIgZW4gYmFzIGRlIGwn6WNyYW4uIENlbGEgdm91cworICAgICBwZXJtZXQgZGUgc2Fpc2lyIHVuZSBjb21tYW5kZS4KKworICAyLiBQdWlzIHRhcGV6IHVuICAhICAocG9pbnQgZCdleGNsYW1hdGlvbikuIENlbGEgdm91cyBwZXJtZXQgZCdleOljdXRlcgorICAgICBuJ2ltcG9ydGUgcXVlbGxlIGNvbW1hbmRlIHZhbGlkZSBwb3VyIHZvdHJlIGludGVycHLpdGV1ciAoc2hlbGwpLgorCisgIDMuIFBhciBleGVtcGxlLCB0YXBleiAgbHMgIGFwcuhzIGxlICAhICBldCBhcHB1eWV6IDxFbnRy6WU+LiBDZWNpIGFmZmljaGVyYQorICAgICBsYSBsaXN0ZSBkZXMgZmljaGllcnMgZHUgZG9zc2llciBjb3VyYW50LCBjb21tZSBzaSB2b3VzIGF2aWV6IHRhcOkgbGEKKyAgICAgY29tbWFuZGUg4CBsJ2ludml0ZSBkdSBzaGVsbC4gVXRpbGlzZXogIDohZGlyICBzaQk6IWxzICBuZSBtYXJjaGUgcGFzLgorCitOb3RlOiAgSWwgZXN0IHBvc3NpYmxlIGQnZXjpY3V0ZXIgbidpbXBvcnRlIHF1ZWxsZSBjb21tYW5kZSBleHRlcm5lIGRlIGNldHRlCisgICAgICAgbWFuaehyZS4KKworTm90ZTogIFRvdXRlcyBsZXMgY29tbWFuZGVzICA6ICBkb2l2ZW50IGZpbmlyIHBhciBsYSBmcmFwcGUgZGUgPEVudHLpZT4uCisKKworCit+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+fn4KKwkgTGXnb24gNS4yIDogUExVUyBERSBEyVRBSUxTIFNVUiBMJ0VOUkVHSVNUUkVNRU5UIERFIEZJQ0hJRVJTCisKKworICoqIFBvdXIgZW5yZWdpc3RyZXIgbGVzIGNoYW5nZW1lbnRzIGZhaXRzIGF1IGZpY2hpZXIsIHRhcGV6ICA6dyBGSUNISUVSIC4gKioKKworICAxLiBUYXBleiAgOiFkaXIgIG91ICA6IWxzICBwb3VyIGF2b2lyIGxhIGxpc3RlIGRlcyBmaWNoaWVycyBkdSBkb3NzaWVyCisgICAgIGNvdXJhbnQuIFZvdXMgc2F2ZXogZOlq4CBxdSdpbCBmYXV0IGFwcHV5ZXIgPEVudHLpZT4gYXBy6HMgY2VsYS4KKworICAyLiBDaG9pc2lzc2V6IHVuIG5vbSBkZSBmaWNoaWVyIHF1aSBuJ2V4aXN0ZSBwYXMgZW5jb3JlLCBwYXIgZXhlbXBsZSBURVNULgorCisgIDMuIFB1aXMgdGFwZXogIDp3IFRFU1QgIChv+SBURVNUIGVzdCBsZSBub20gcXVlIHZvdXMgYXZleiBjaG9pc2kpLgorCisgIDQuIENlbGEgc2F1dmVnYXJkZSB0b3V0IGxlIGZpY2hpZXIgKFR1dG9yaWVsIFZpbSkgc291cyBsZSBub20gVEVTVC4KKyAgICAgUG91ciBsZSB26XJpZmllciwgdGFwZXogIDohZGlyICBwb3VyIHJldmlzdWFsaXNlciBsZSBjb250ZW51IGR1IGRvc3NpZXIuCisKK05vdGV6IHF1ZSBzaSB2b3VzIHF1aXR0ZXogVmltIGV0IHkgcmV0b3VybmV6IGF2ZWMgbGUgZmljaGllciBURVNULCBjZWx1aS1jaQorc2VyYSB1bmUgY29waWUgZXhhY3RlIGR1IGNvdXJzIGF1IG1vbWVudCBv+SB2b3VzIGwnYXZleiBzYXV26S4KKworICA1LiBNYWludGVuYW50LCBlZmZhY2V6IGxlIGZpY2hpZXIgZW4gdGFwYW50IChNUy1ET1MpOiAgICA6IWRlbCBURVNUCisJCQkJCSAgIG91IChVbml4KToJICAgOiFybSBURVNUCisKKworfn5+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+CisJCSAgICBMZedvbiA1LjMgOiBVTiBFTlJFR0lTVFJFTUVOVCBTyUxFQ1RJRgorCisKKyAgICAgKiogUG91ciBlbnJlZ2lzdHJlciB1bmUgcG9ydGlvbiBkZSBmaWNoaWVyLCB0YXBlegk6IywjdyBGSUNISUVSICoqCisKKyAgMS4gVGFwZXog4CBub3V2ZWF1ICA6IWRpciAgb3UgIDohbHMgIHBvdXIgdmlzdWFsaXNlciBsZSBjb250ZW51IGR1IGRvc3NpZXIKKyAgICAgY291cmFudCBldCBjaG9pc2lzc2V6IHVuIG5vbSBkZSBmaWNoaWVyLCB0ZWwgcXVlIFRFU1QuCisKKyAgMi4gROlwbGFjZXogbGUgY3Vyc2V1ciBqdXNxdSdlbiBoYXV0IGRlIGNldHRlIHBhZ2UgZXQgdGFwZXogIEN0cmwtRyAgcG91cgorICAgICBjb25uYe50cmUgbGUgbnVt6XJvIGRlIGNldHRlIGxpZ25lLiBOT1RFWiBDRSBOVU3JUk8gIQorCisgIDMuIFB1aXMgcmVuZGV6LXZvdXMgYXUgYmFzIGRlIGNldHRlIHBhZ2UgZXQgdGFwZXog4CBub3V2ZWF1ICBDdHJsLUcgLgorICAgICBOT1RFWiDJR0FMRU1FTlQgQ0UgTlVNyVJPICEKKworICA0LiBQb3VyIGVucmVnaXN0cmVyIFNFVUxFTUVOVCB1bmUgcG9ydGlvbiBkJ3VuIGZpY2hpZXIsIHRhcGV6ICA6IywjdyBURVNUCisgICAgIG/5ICMsIyBzb250IGxlcyBkZXV4IG51belyb3MgcXVlIHZvdXMgYXZleiBub3TpcyAoaGF1dCxiYXMpIGV0IFRFU1QgZXN0CisgICAgIGxlIG5vbSBkdSBmaWNoaWVyLgorCisgIDUuIFVuZSBmb2lzIGVuY29yZSwgdulyaWZpZXogbGEgcHLpc2VuY2UgZHUgZmljaGllciBhdmVjICA6IWRpciAgbWFpcyBORQorICAgICBMJ0VGRkFDRVogUEFTLgorCisKK35+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+fgorCQkgTGXnb24gNS40IDogUslDVVDJUkFUSU9OIEVUIEZVU0lPTiBERSBGSUNISUVSUworCisKKwkqKiBQb3VyIGluc+lyZXIgbGUgY29udGVudSBkJ3VuIGZpY2hpZXIsIHRhcGV6CTpyIEZJQ0hJRVIgKioKKworICAxLiBUYXBleiAgOiFkaXIgIHBvdXIgdulyaWZpZXIgcXVlIHZvdHJlIGZpY2hpZXIgVEVTVCBlc3QgZW5jb3JlIGzgLgorCisgIDIuIFBsYWNleiBsZSBjdXJzZXVyIGVuIGhhdXQgZGUgY2V0dGUgcGFnZS4KKworTk9URTogIEFwcuhzIGF2b2lyIHN1aXZpIGwn6XRhcGUgMyB2b3VzIHZlcnJleiDgIGwn6WNyYW4gbGEgTGXnb24gNS4zLgorICAgICAgIETpcGxhY2V6LXZvdXMgdmVycyBsZSBiYXMganVzcXUn4CByZXZlbmlyIOAgY2V0dGUgbGXnb24uCisKKyAgMy4gTWFpbnRlbmFudCBy6WN1cOlyZXogdm90cmUgZmljaGllciBURVNUIGVuIHV0aWxpc2FudCBsYSBjb21tYW5kZSAgOnIgVEVTVAorICAgICBv+SBURVNUIGVzdCBsZSBub20gZGUgdm90cmUgZmljaGllci4KKworTk9URTogIExlIGZpY2hpZXIgcXVlIHZvdXMgculjdXDpcmV6IGVzdCBwbGFj6SBs4CBv+SBzZSB0cm91dmUgbGUgY3Vyc2V1ci4KKworICA0LiBQb3VyIHbpcmlmaWVyIHF1ZSBsZSBmaWNoaWVyIGEgYmllbiDpdOkgaW5z6XLpLCByZW1vbnRleiBldCB26XJpZmllegorICAgICBxdSdpbCB5IGEgbWFpbnRlbmFudCBkZXV4IGNvcGllcyBkZSBsYSBMZedvbiA1LjMsIGwnb3JpZ2luYWxlIGV0IGNlbGxlCisgICAgIGNvbnRlbnVlIGRhbnMgbGUgZmljaGllci4KKworCit+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+fn4KKwkJCSAgICAgUslTVU3JIERFIExBIExFx09OIDUKKworCisgIDEuICA6IWNvbW1hbmRlICBleOljdXRlIHVuZSBjb21tYW5kZSBleHRlcm5lLgorCisgICAgICBRdWVscXVlcyBleGVtcGxlcyBwcmF0aXF1ZXM6CisJKE1TLURPUykJKFVuaXgpCisJIDohZGlyCQkgOiFscwkJIGFmZmljaGUgbGUgY29udGVudSBkdSBkb3NzaWVyIGNvdXJhbnQuCisJIDohZGVsIEZJQ0hJRVIgICA6IXJtIEZJQ0hJRVIgICAgZWZmYWNlIEZJQ0hJRVIuCisKKyAgMi4gIDp3IEZJQ0hJRVIgIGVucmVnaXN0cmUgbGUgZmljaGllciBWaW0gY291cmFudCBzdXIgbGUgZGlzcXVlIGF2ZWMgcG91cgorCQkgIG5vbSBGSUNISUVSLgorCisgIDMuICA6IywjdyBGSUNISUVSICBlbnJlZ2lzdHJlIGxlcyBsaWduZXMgIyDgICMgZGFucyBsZSBmaWNoaWVyIEZJQ0hJRVIuCisKKyAgNC4gIDpyIEZJQ0hJRVIgIHLpY3Vw6HJlIGxlIGZpY2hpZXIgRklDSElFUiBldCBsJ2luc+hyZSBkYW5zIGxlIGZpY2hpZXIKKwkJICBjb3VyYW50IOAgcGFydGlyIGRlIGxhIHBvc2l0aW9uIGR1IGN1cnNldXIuCisKKworCisKKworfn5+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+CisJCQkgICAgTGXnb24gNi4xIDogTCdPVVZFUlRVUkUKKworCisqKiBUYXBleiAgbyAgcG91ciBvdXZyaXIgdW5lIGxpZ25lIHNvdXMgbGUgY3Vyc2V1ciBldCB5IGFsbGVyIGVuIEluc2VydGlvbi4gKioKKworICAxLiBE6XBsYWNleiBsZSBjdXJzZXVyIHN1ciBsYSBsaWduZSBtYXJxdellIC0tLT4gY2ktZGVzc291cy4KKworICAyLiBUYXBleiAgbyAgKG1pbnVzY3VsZSkgcG91ciBvdXZyaXIgdW5lIGxpZ25lIFNPVVMgbGUgY3Vyc2V1ciBldCB2b3VzIHkKKyAgICAgcGxhY2VyIGVuIG1vZGUgSW5zZXJ0aW9uLgorCisgIDMuIFB1aXMgcmVjb3BpZXogbGEgbGlnbmUgbWFycXXpZSAtLS0+IGV0IGFwcHV5ZXogc3VyIDzJY2hhcD4gcG91ciBxdWl0dGVyCisgICAgIGxlIG1vZGUgSW5zZXJ0aW9uLgorCistLS0+IEVuIHRhcGFudAlvICBsZSBjdXJzZXVyIHNlIG1ldCBzdXIgbGEgbGlnbmUgb3V2ZXJ0ZSwgZW4gbW9kZSBJbnNlcnRpb24uCisKKyAgNC4gUG91ciBvdXZyaXIgdW5lIGxpZ25lIGF1IERFU1NVUyBkdSBjdXJzZXVyLCB0YXBleiBzaW1wbGVtZW50IHVuICBPCisgICAgIG1hanVzY3VsZSwgcGx1dPR0IHF1J3VuICBvICBtaW51c2N1bGUuIEZhaXRlcyB1biBlc3NhaSBzdXIgbGEgbGlnbmUKKyAgICAgY2ktZGVzc291cy4KK091dnJleiB1bmUgbGlnbmUgY2ktZGVzc3VzIGVuIHRhcGFudCBNQUotTyBsb3JzcXVlIGxlIGN1cnNldXIgZXN0IGljaS4KKworCisKK35+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+fgorCQkJICAgICAgTGXnb24gNi4yIDogTCdBSk9VVAorCisKKwkgICAgKiogVGFwZXogIGEgIHBvdXIgaW5z6XJlciBkdSB0ZXh0ZSBBUFLIUyBsZSBjdXJzZXVyLiAqKgorCisgIDEuIFBsYWNleiBsZSBjdXJzZXVyIOAgbGEgZmluIGRlIGxhIHByZW1p6HJlIGxpZ25lIG1hcnF16WUgLS0tPiBjaS1kZXNzb3VzCisgICAgIGVuIHRhcGFudAkkICBlbiBtb2RlIE5vcm1hbC4KKworICAyLiBUYXBleiB1biAgYSAgKG1pbnVzY3VsZSkgcG91ciBham91dGVyIGR1IHRleHRlIEFQUshTIGxlIGNhcmFjdOhyZSBzaXR16QorICAgICBzb3VzIGxlIGN1cnNldXIuICggQSAgbWFqdXNjdWxlIGFqb3V0ZSBkdSB0ZXh0ZSDgIGxhIGZpbiBkZSBsYSBsaWduZSkuCisKK05vdGU6IENlY2kg6XZpdGUgZGUgdGFwZXIgIGkgLCBsZSBkZXJuaWVyIGNhcmFjdOhyZSwgbGUgdGV4dGUg4CBpbnPpcmVyLAorICAgICAgPMljaGFwPiwgY3Vyc2V1ci3gLWRyb2l0ZSwgZXQgZmluYWxlbWVudAl4ICwganVzdGUgcG91ciBham91dGVyIGR1CisgICAgICB0ZXh0ZSDgIGxhIGZpbiBkJ3VuZSBsaWduZSAhCisKKyAgMy4gTWFpbnRlbmFudCwgY29tcGzpdGV6IGxhIHByZW1p6HJlIGxpZ25lLiBOb3RleiDpZ2FsZW1lbnQgcXVlIGwnYWpvdXQgZXN0CisgICAgIGlkZW50aXF1ZSBhdSBtb2RlIEluc2VydGlvbiwgaG9ybWlzIGxhIHBvc2l0aW9uIG/5IGxlIHRleHRlIGVzdCBpbnPpcukuCisKKy0tLT4gQ2V0dGUgbGlnbmUgdm91cyBwZXJtZXQgZGUgcHJhdGlxdWVyCistLS0+IENldHRlIGxpZ25lIHZvdXMgcGVybWV0IGRlIHByYXRpcXVlciBsJ2Fqb3V0IGRlIHRleHRlIGVuIGZpbiBkZSBsaWduZS4KKworCit+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+fn4KKwkJTGXnb24gNi4zIDogVU5FIEFVVFJFIFZFUlNJT04gRFUgUkVNUExBQ0VNRU5UCisKKworICAgICAgICoqIFRhcGV6IHVuICBSICBtYWp1c2N1bGUgcG91ciByZW1wbGFjZXIgcGx1cyBkJ3VuIGNhcmFjdOhyZS4gKioKKworICAxLiBE6XBsYWNleiBsZSBjdXJzZXVyIHN1ciBsYSBwcmVtaehyZSBsaWduZSBtYXJxdellIC0tLT4gY2ktZGVzc291cy4KKworICAyLiBQbGFjZXogbGUgY3Vyc2V1ciBhdSBk6WJ1dCBkdSBwcmVtaWVyIG1vdCBxdWkgZGlmZuhyZSBkZSBsYSBzZWNvbmRlIGxpZ25lCisgICAgIG1hcnF16WUgLS0tPiAobGUgbW90ICdjZWxsZScpLgorCisgIDMuIFB1aXMgdGFwZXogIFIgIGV0IHJlbXBsYWNleiBsZSByZXN0ZSBkdSB0ZXh0ZSBkZSBsYSBwcmVtaehyZSBsaWduZSBlbgorICAgICB0YXBhbnQgcGFyIGRlc3N1cyBjZWx1aS1jaSwgZGUgbWFuaehyZSDgIHJlbmRyZSBsYSBwcmVtaehyZSBsaWduZQorICAgICBpZGVudGlxdWUg4CBsYSBzZWNvbmRlLgorCistLS0+IFBvdXIgcmVuZHJlIGNldHRlIGxpZ25lIGlkZW50aXF1ZSDgIGNlbGxlIGR1IGRlc3NvdXMgdXRpbGlzZXogbGUgY2xhdmllci4KKy0tLT4gUG91ciByZW5kcmUgY2V0dGUgbGlnbmUgaWRlbnRpcXVlIOAgbGEgc2Vjb25kZSwgdGFwZXogUiBldCBsYSBjb3JyZWN0aW9uLgorCisgIDQuIE5vdGV6IHF1ZSBsb3JzcXVlIHZvdXMgYXBwdXlleiA8yWNoYXA+LCBsZSB0ZXh0ZSBxdWkgbidhIHBhcyBlbmNvcmUg6XTpCisgICAgIHJlbXBsYWPpIHJlc3RlLgorCisKKworfn5+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+CisJCSAgICAgICBMZedvbiA2LjQgOiBSyUdMQUdFIERFUyBPUFRJT05TCisKKworICAqKiBS6Wdsb25zIHVuZSBvcHRpb24gYWZpbiBxdWUgbGEgcmVjaGVyY2hlIGV0IGxhIHN1YnN0aXR1dGlvbiBpZ25vcmVudCBsYQorICAgICBjYXNzZSBkZXMgY2FyYWN06HJlcy4gKioKKworICAxLiBSZWNoZXJjaGV6ICdpZ25vcmUnIGVuIHRhcGFudCAgL2lnbm9yZSAuCisgICAgIFLpcOl0ZXogY2VjaSBwbHVzaWV1cnMgZm9pcyBlbiB1dGlsaXNhbnQgbGEgdG91Y2hlICBuIC4KKworICAyLiBBY3RpdmV6IGwnb3B0aW9uICdpYycgKElnbm9yZXIgY2Fzc2UpIGVuIHRhcGFudCAgOnNldCBpYyAuCisKKyAgMy4gUHVpcyBwb3Vyc3VpdmV6IHZvdHJlIHJlY2hlcmNoZSBlbiB1dGlsaXNhbnQgIG4gLgorICAgICBS6XDpdGV6IGNldHRlIHJlY2hlcmNoZSBwbHVzaWV1cnMgZm9pcyBhdmVjIGxhIHRvdWNoZSAgbiAuCisKKyAgNC4gQWN0aXZleiBsZXMgb3B0aW9ucyAnaGxzZWFyY2gnIGV0ICdpbmNzZWFyY2gnIGF2ZWMgIDpzZXQgaGxzIGlzIC4KKworICA1LiBQdWlzIHJlY29tbWVuY2V6IHVuZSByZWNoZXJjaGUsIGV0IGZhaXRlcyBiaWVuIGF0dGVudGlvbiDgIGNlIHF1aSBzZQorICAgICBwcm9kdWl0OiAgL2lnbm9yZSAuCisKKyAgNi4gUG91ciBpbnRlcnJvbXByZSBsYSBtaXNlIGVuIHN1cmJyaWxsYW5jZSBkZXMgculzdWx0YXRzLCB0YXBlejoKKyAgICAgOm5vaGxzZWFyY2gKKworfn5+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+CisJCQkgICAgIFLJU1VNySBERSBMQSBMRcdPTiA2CisKKworICAxLiBUYXBlciAgbyAgb3V2cmUgdW5lIGxpZ25lIFNPVVMgbGUgY3Vyc2V1ciBldCB5IHBsYWNlIGNlbHVpLWNpIGVuIG1vZGUKKyAgICAgSW5zZXJ0aW9uLiBUYXBlciB1biAgTyAgbWFqdXNjdWxlIG91dnJlIHVuZSBsaWduZSBhdSBERVNTVVMgZGUgbGEgbGlnbmUKKyAgICAgb/kgc2UgdHJvdXZlIGxlIGN1cnNldXIuCisKKyAgMi4gVGFwZXogdW4gIGEgIHBvdXIgaW5z6XJlciBkdSB0ZXh0ZSBBUFLIUyBsZSBjYXJhY3TocmUgb/kgc2UgdHJvdXZlIGxlCisgICAgIGN1cnNldXIuIFRhcGVyIHVuCUEgIG1hanVzY3VsZSBham91dGUgZHUgdGV4dGUgYXV0b21hdGlxdWVtZW50IOAgbGEgZmluCisgICAgIGRlIGxhIGxpZ25lLgorCisgIDMuIFRhcGVyIHVuICBSICBtYWp1c2N1bGUgYWN0aXZlIGxlIG1vZGUgUmVtcGxhY2VtZW50IGp1c3F1J+AgY2UgcXVlIGxhCisgICAgIHRvdWNoZSAgPMljaGFwPiAgc29pdCBhcHB1eellIHBvdXIgZW4gc29ydGlyLgorCisgIDQuIFRhcGVyICA6c2V0IHh4eCAgYWN0aXZlIGwnb3B0aW9uICd4eHgnLgorCisKKworCisKKworCit+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+fn4KKwkJICAgICBMZedvbiA3IDogQUNDyURFUiDAIEwnQUlERSBFTiBMSUdORQorCisJCSAgKiogVXRpbGlzZXIgbGUgc3lzdOhtZSBkJ2FpZGUgZW4gbGlnbmUuICoqCisKKyAgVmltIGEgdW4gc3lzdOhtZSBjb21wbGV0IGQnYWlkZSBlbiBsaWduZS4gIFBvdXIgeSBhY2PpZGVyLCBlc3NheWV6IGwndW5lIGRlCisgIGNlcyB0cm9pcyBt6XRob2RlczoKKwktIGFwcHV5ZXogbGEgdG91Y2hlIDxIZWxwPiAoc2kgdm91cyBlbiBhdmV6IHVuZSkKKwktIGFwcHV5ZXogbGEgdG91Y2hlIDxGMT4gKHNpIHZvdXMgZW4gYXZleiB1bmUpCisJLSB0YXBleiAgOmhlbHAgPEVudHLpZT4KKworICBUYXBleiAgOnEgPEVudHLpZT4gIHBvdXIgZmVybWVyIGxhIGZlbup0cmUgZCdhaWRlLgorCisgIFZvdXMgcG91dmV6IGFjY+lkZXIg4CBsJ2FpZGUgc3VyIOAgcGV1IHBy6HMgbidpbXBvcnRlIHF1ZWwgc3VqZXQgZW4gZG9ubmFudAorICBkZXMgYXJndW1lbnRzIOAgbGEgY29tbWFuZGUgIDpoZWxwIC4gRXNzYXlleiBwYXIgZXhlbXBsZSAobidvdWJsaWV6IHBhcworICBkJ2FwcHV5ZXIgc3VyIDxFbnRy6WU+KToKKworCTpoZWxwIHcKKwk6aGVscCBjXzxUCisJOmhlbHAgaW5zZXJ0LWluZGV4CisJOmhlbHAgdXNlci1tYW51YWwKKworCit+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+fn4KKwkJICAgIExl529uIDggOiBDUslFUiBVTiBTQ1JJUFQgREUgRMlNQVJSQUdFCisKKwkJICAqKiBBY3RpdmVyIGxlcyBmb25jdGlvbm5hbGl06XMgZGUgVmltLiAqKgorCisgIFZpbSBhIGJlYXVjb3VwIHBsdXMgZGUgZm9uY3Rpb25uYWxpdOlzIHF1ZSBWaSwgbWFpcyBsYSBwbHVwYXJ0IGRlIGNlbGxlcy1jaQorICBzb250IGTpc2FjdGl26WVzIHBhciBk6WZhdXQuICBQb3VyIGNvbW1lbmNlciDgIGxlcyB1dGlsaXNlciwgdm91cyBkZXZlegorICBjcullciB1biBmaWNoaWVyICJ2aW1yYyIuCisKKyAgMS4gQ29tbWVuY2V6IOAg6WRpdGVyIGxlIGZpY2hpZXIgInZpbXJjIi4gQ2VjaSBk6XBlbmQgZGUgdm90cmUgc3lzdOhtZToKKwk6ZWRpdCB+Ly52aW1yYwkJCXBvdXIgVW5peAorCTplZGl0ICRWSU0vX3ZpbXJjCQlwb3VyIE1TLVdpbmRvd3MKKworICAyLiBJbnTpZ3JleiBtYWludGVuYW50IGxlIHRleHRlIGR1IGZpY2hpZXIgInZpbXJjIiBkJ2V4ZW1wbGU6CisJOnJlYWQgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0KKworICAzLiBFbnJlZ2lzdHJleiBsZSBmaWNoaWVyIGF2ZWM6CisJOndyaXRlCisKKyAgTGEgcHJvY2hhaW5lIGZvaXMgcXVlIHZvdXMgZOltYXJyZXJleiBWaW0sIGxlIHN1cmxpZ25hZ2Ugc3ludGFjdGlxdWUgc2VyYQorICBhY3RpdukuIFZvdXMgcG91dmV6IGFqb3V0ZXIgdG91cyB2b3MgculnbGFnZXMgcHLpZuly6XMgZGFucyBjZSBmaWNoaWVyLgorCisKK35+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+fgorCisgIENlY2kgY29uY2x1dCBsZSBUdXRvcmllbCBWaW0uICBMZSBidXQg6XRhaXQgZGUgdm91cyBkb25uZXIgdW4gYnJlZiBhcGVy53UgZGUKKyAgbCfpZGl0ZXVyIFZpbSwganVzdGUgYXNzZXogcG91ciB2b3VzIHBlcm1ldHRyZSBkJ3V0aWxpc2VyIGwn6WRpdGV1cgorICByZWxhdGl2ZW1lbnQgZmFjaWxlbWVudC4gIElsIGVzdCBsb2luIGQn6nRyZSBjb21wbGV0LCB2dSBxdWUgVmltIGEgYmVhdWNvdXAKKyAgYmVhdWNvdXAgcGx1cyBkZSBjb21tYW5kZXMuICBVbiBNYW51ZWwgZGUgbCd1dGlsaXNhdGV1ciBlc3QgZGlzcG9uaWJsZSBlbgorICBhbmdsYWlzOiAgOmhlbHAgdXNlci1tYW51YWwgLgorCisgIFBvdXIgY29udGludWVyIOAgZOljb3V2cmlyIGV0IOAgYXBwcmVuZHJlIFZpbSwgaWwgZXhpc3RlIHVuIGxpdnJlIHRyYWR1aXQgZW4KKyAgZnJhbudhaXMuIElsIHBhcmxlIHBsdXMgZGUgVmkgcXVlIGRlIFZpbSwgbWFpcyBwb3VycmEgdm91cyDqdHJlIHV0aWxlLgorCUwn6WRpdGV1ciBWaSAtIENvbGxlY3Rpb24gUHLpY2lzIGV0IGNvbmNpcyAtIHBhciBBcm5vbGQgUm9iYmlucworCclkaXRldXI6IE8nUmVpbGx5IEZyYW5jZQorCUlTQk46IDItODQxNzctMTAyLTQKKworICBEZXV4IGxpdnJlcyBlbiBhbmdsYWlzIHNvbnQg6WdhbGVtZW50IG1lbnRpb25u6XMgZGFucyBsYSB2ZXJzaW9uIG9yaWdpbmFsZQorICBkZSBjZSB0dXRvcmllbCwgZG9udCB1biBxdWkgdHJhaXRlIHNw6WNpZmlxdWVtZW50IGRlIFZpbS4gTWVyY2kgZGUgdm91cyB5CisgIHLpZulyZXIgc2kgdm91cyDqdGVzIGludOlyZXNz6S4KKworICBDZSB0dXRvcmllbCBhIOl06SDpY3JpdCBwYXIgTWljaGFlbCBDLiBQaWVyY2UgZXQgUm9iZXJ0IEsuIFdhcmUgZGUgbCfJY29sZQorICBkZXMgTWluZXMgZHUgQ29sb3JhZG8gZXQgcmVwcmVuZCBkZXMgaWTpZXMgZm91cm5pZXMgcGFyIENoYXJsZXMgU21pdGgsCisgIFVuaXZlcnN06SBkJ8l0YXQgZHUgQ29sb3JhZG8uICBFLW1haWw6IGJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdS4KKworICBNb2RpZmnpIHBvdXIgVmltIHBhciBCcmFtIE1vb2xlbmFyLgorCisgIFRyYWR1aXQgZW4gRnJhbudhaXMgcGFyIEFkcmllbiBCZWF1LCBlbiBhdnJpbCAyMDAxLgorICBFLW1haWw6CXZlcnNpb24uZnJhbmNhaXNlQGZyZWUuZnIKKyAgTGFzdCBDaGFuZ2U6CTIwMDMgTWF5IDI5Cit+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+fn4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvdHV0b3IuZ3IgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmdyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyODk3N2IKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmdyCkBAIC0wLDAgKzEsODE1IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9ICAgIMog4esg+SDzIN4g8SDoIOEg9CDlICAgIPMg9CDvICAgViBJIE0gICBUIHUgdCBvIHIgICAgLSAgICC46uTv8+cgMS41ICAgICA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgzyBWaW0g5d/t4ekg3e3h8iDw4e3f8/f18e/yIPP17fTc6vTn8iDw7/Ug3ffl6SDw7+vr3fIg5e307+vd8iwg8Nzx4QorICAgICDw7+vr3fIg4+nhIO3hIOXu5+Pe8+/17OUg8+Ug7N/hIPDl8ene4+fz5yD88PnyIOH19N4uIMH19N4g5yDw5fHp3uPn8+cKKyAgICAg8/fl5Onc8/Tn6uUg4+nhIO3hIPDl8enj8dz45ekg6erh7e/w7+nn9Onq3CD06fIg5e307+vd8iDw7/Ug6OEg8+HyCisgICAgIOrc7e/17SDt4SD38efz6ezv8O/p5d/05SDl/erv6+Eg9O/tIFZpbSDz4e0g3e3h7SDj5e3p6t7yIPfx3vPn8iDz9e303Or05y4KKworICAgICDPIOrh9Nwg8PHv893j4+nz5yD38fzt7/Ig8O/1IOHw4en05d/04ekg4+nhIO3hIO/r7+rr5/H+8+X05SD05+0g8OXx6d7j5/PnCisgICAgIOXf7eHpIDI1LTMwIOvl8PTcLCDl7uHx9P7t9OHyIOHw/CD07yDw/PPvIPfx/O3vIOjhIO7v5N345fTlIOPp4QorICAgICDw5enx4ezh9Onz7O/98i4KKworICAgICDP6SDl7fTv693yIPP04SDs4eje7OH04SDo4SD08e/w7/Dv6d7z7/XtIPTvIOrl3+zl7e8uIMTn7Onv9fHj3vP05SDd7eEKKyAgICAg4e303+Px4fbvIOH19O/9IPTv9SDh8ffl3+/1IOPp4SDt4SDl7uHz6ufo5d/05SAo4e0g7uXq6e3e8+H05SD07worICAgICAiVmltdHV0b3IiIOH19Pwg5d/t4ekg3uTnIN3t4SDh7fTf4/Hh9u8pLgorCisgICAgIMXf7eHpIPPn7OHt9Onq/CDt4SDo9ezc8/TlIPz06SDh9fTeIOcg8OXx6d7j5/PnIOXf7eHpIO/x4+Ht+ezd7ecg3fTz6QorICAgICD+8/TlIO3hIOTp5Nzz6uXpIOzd8/kg9OfyIPfx3vPn8i4gwfX0/CDz5+zh3+3l6SD89Okg9/Hl6dzm5fTh6SDt4QorICAgICDl6vTl6+Xf9OUg9OnyIOXt9O/r3fIg4+nhIO3hIPTp8iDs3Ojl9OUg8/nz9NwuIMHtIOTp4eLc5uX05SDs/O3vIPTvCisgICAgIOrl3+zl7e8sIOjhIPTp8iDu5ffc8+X05SEKKworICAgICDU/vHhLCDi5eLh6fno5d/05SD89Okg9O8g8Ove6vTx7yBTaGlmdC1Mb2NrIMTFzSDl3+3h6SDw4fTn7N3t7yDq4ekKKyAgICAg8OH03vP05SD07yDw697q9PHvIGog4fHq5fTd8iD27/Hd8iDj6eEg7eEg7OX04erp7d7z5fTlIPTv7SDk8e/s3eEg3fTz6QorICAgICD+8/TlIPTvIMzc6Ofs4SAxLjEg7eEg4+Xs3/Pl6SDw697x+fIg9OftIO/o/O3nLgorCit+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+fn5+CisJCSAgICAgIMzc6Ofs4SAxLjE6ICDMxdTBysnNz83UwdMg1M/NIMTRz8zFwQorCisgICoqIMPp4SDt4SDq6e3e8+X05SD07+0g5PHv7N3hLCDw4fTe8/TlIPThIPDr3ur08eEgaCxqLGssbCD88PnyIOTl3/ft5fTh6S4gKioKKwkgICAgIF4KKwkgICAgIGsJICAgICAgSGludDog1O8g8Ove6vTx7yBoIOXf7eHpIOHx6fP05fHcIOrh6SDq6e3l3yDz9Ccg4fHp8/Tl8dwuCisgICAgICAgPCBoCSBsID4JICAgINTvIPDr3ur08e8gbCDl3+3h6SDk5e7p3CDq4ekg6unt5d8g8/ThIOTl7uncLgorCSAgICAgagkJICAgINTvIPDr3ur08e8gaiDs7+nc5uXpIOzlIOLl69zq6SDw8e/yIPThIOrc9PkuCisJICAgICB2CisKKyAgMS4gzOX04erp7eXf8/TlIPTv7SDk8e/s3eEg9PHp4/3x+SDz9OftIO/o/O3nIOzd9/HpIO3hIO3v6f7o5fTlINzt5fThLgorCisgIDIuIMrx4fTe8/TlIPDh9Ofs3e3vIPTvIOrc9Pkg8Ove6vTx7yAoaikg7N338ekg7eEg5fDh7eHr5/bo5d8uCistLS0+INT+8eEg7t3x5fTlIPD+8iDt4SDs5fTh6unt5+jl3/TlIPP07yDl8Pzs5e3vIOzc6Ofs4S4KKworICAzLiDX8efz6ezv8O/p/u304fIg9O8g6tz0+SDw697q9PHvLCDs5fTh6unt5+jl3/TlIPP07yDM3Ojn7OEgMS4yLgorCivT5+zl3/nz5zogwe0g4ez26eLc6+vl9OUg4+nhIOrc9Okg8O/1IPDh9N7z4fTlLCDw4fTe8/TlIDxFU0M+IOPp4SDt4SDi8eXo5d/05QorCSAg8/Tn7SDK4e3v7enq3iDK4fTc8/Th8+cuIMzl9Nwg8OH03vP05SDu4e3cIPTn7SDl7fTv694g8O/1IOjd6+H05S4KKwor0+fs5d/58+c6INThIPDr3ur08eEg9O/1IOTx7+zd4SDo4SDw8d3w5ekg5fDf8+fyIO3hIOTv9evl/e/17S4gwevr3CDs5SD04SBoamtsCisJICDo4SDs8O/x5d/05SDt4SDq6e3n6OXf9OUg8O/r/SDj8efj7/H89OXx4Swg7Pzr6fIg9OEg8/Xt5+jf8+X05S4KKworfn5+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+fgorCQnM3Ojn7OEgMS4yOiAgzNDByc3PzdTB0yDKwckgwsPByc3PzdTB0yDT1M/NIFZJTQorCisgICEhINPHzMXJ2dPHOiDQ8entIOXq9OXr3fPl9OUg6tzw7+nvIOHw/CD04SDi3uzh9OEsIOTp4eLc8/TlIPzr7yD07yDs3Ojn7OEhIQorCisgIDEuINDh9N7z9OUg9O8g8Ove6vTx7yA8RVNDPiAo4+nhIO3hIOXf8/TlIPPf4+/18eEg8/Tn7SDK4e3v7enq3iDK4fTc8/Th8+cpLgorCisgIDIuINDr5+r08e/r7+Pe8/TlOgkJOnEhIDxFTlRFUj4uCisKKy0tLT4gwfX0/CDl7t3x9+X04ekg4fD8IPTv7SDz9e303Or05yDX2dHJ0yDt4SDz/vPl6SD88O/p5fIg4evr4ePd8iDd9+X05SDq3O3l6S4KKyAgICAgwe0g6N3r5fTlIO3hIPP+8+X05SD06fIg4evr4ePd8iDq4ekg7eEg5e7d8ejl9OUg8Ovn6vTx7+vv497z9OU6CisJICAgICAgOndxIDxFTlRFUj4KKworICAzLiC89OHtIOTl3/TlIPTn7SDw8e/08e/w3iD07/Ug9uvv6e/9LCDw6+fq9PHv6+/j3vP05SD05+0g5e307+veIOzlIPTn7SDv8O/f4QorICAgICDs8N7q4fTlIPPlIOH19N7tIPTn7SDw5fHp3uPn8+cuIMzw7/Hl3yDt4SDl3+3h6ToJdmltdHV0b3IgPEVOVEVSPgorICAgICDK4e3v7enq3CDo4SD38efz6ezv8O/p7/3z4fTlOgkJCXZpbSB0dXRvciA8RU5URVI+CisKKy0tLT4gJ3ZpbScg8+fs4d/t5ekg5enz4eP5494g8/Tv7SDz9e303Or05yB2aW0sICd0dXRvcicg5d/t4ekg9O8g4fH35d/vIPDv9QorICAgICDo3evv9ezlIO3hIOTp7/Ho/vPv9ezlLgorCisgIDQuIMHtIN335fTlIOHw7+zt5+zv7eX98+XpIOH19Nwg9OEg4t7s4fThIOrh6SDd9+X05SDh9fTv8OXw79/o5/PnLCDl6vTl693z9OUKKyAgICAg9OEg4t7s4fThIDEg3fnyIDMg4+nhIO3hIOLj5d/05SDq4ekg7eEg7PDl3/TlIO7h7dwg8/Tv7SDz9e303Or05y4gzOX03AorICAgICDs5fTh6unt3vP05SD07+0g5PHv7N3hIOrc9Pkg8/TvIMzc6Ofs4SAxLjMuCit+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+fn5+CisJCSAgIMzc6Ofs4SAxLjM6ICDEyc/RyNnTxyDKxcnMxc3P1SAtIMTJwcPRwdbHCisKKyAgICoqILzz7yDl3/P05SDz9OftIMrh7e/t6ereIMrh9Nzz9OHz5yDw4fTe8/TlICB4ICDj6eEg7eEg5Onh4/Hc+OX05SD07+0KKyAgICAgIPfh8eHq9N7x4SDq3PT5IOHw/CD07+0g5PHv7N3hLiAqKgorCisgIDEuIMzl9OHq6e3l3/P05SD07+0g5PHv7N3hIPP05+0g8OHx4erc9Pkg4/Hh7OzeIPPn7OXp+ezd7ecg7OUgLS0tPi4KKworICAyLiDD6eEg7eEg5Onv8ej+8+X05SD04SDr3OjnLCDq6e3l3/P05SD07+0g5PHv7N3hIOzd9/HpIO3hIOXf7eHpIPDc7fkg4fD8CisgICAgIPTv7SD34fHh6vTe8eEg8O/1IOjhIOTp4ePx4fbl3y4KKworICAzLiDQ4fTe8/TlIPTvIPDr3ur08e8geCDj6eEg7eEg5Onh4/Hc+OX05SD07+0g4e3l8Ono/ezn9O8g9+Hx4er03vHhLgorCisgIDQuIMXw4e3h69zi5fTlIPThIOLe7OH04SAyIOzd9/HpIDQg7N338ekg5yDw8fz04fPnIO3hIOXf7eHpIPP58/TeLgorCistLS0+IFRoZSBjY293IGp1bXBlZGQgb3Z2ZXJyIHRoaGUgbW9vb24uCisKKyAgNS4g1P7x4SDw7/Ug5yDj8eHs7N4g5d/t4ekg8/nz9N4sIPDn4+Hf7fTlIPP07yDM3Ojn7OEgMS40LgorCivTx8zFydnTxzogyuHo/vIg5Onh9PHd9+X05SDh9fTe7SD05+0g8OXx6d7j5/PnLCDw8e/z8OHo3vP05SDt4SDs5+0KKwkgIOHw7+zt5+zv7eX95fTlLCDs4ejh3+3l9OUg7OUg9Ocg9/He8+cuCisKK35+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+fn4KKwkJICAgzNzo5+zhIDEuNDogxMnP0cjZ08cgysXJzMXNz9UgLSDQwdHFzMLPy8cKKworICoqILzz7yDl3/P05SDz5SDK4e3v7enq3iDK4fTc8/Th8+cg8OH03vP05SAgaSAg4+nhIO3hIPDh8eXs4tzr6+X05SDq5d/s5e3vLiAqKgorCisgIDEuIMzl9OHq6e3l3/P05SD07+0g5PHv7N3hIOzd9/HpIPTn7SDw8f705yDj8eHs7N4g8OHx4erc9Pkg8+fs5en57N3t5yDs5SAtLS0+LgorCisgIDIuIMPp4SDt4SDq3O3l9OUg9OftIPDx/vTnIOPx4ezs3iDf5OnhIOzlIPTn7SDk5f305fHnLCDs5fTh6unt5d/z9OUg9O/tCisgICAgIOTx7+zd4SDw3O35IPP07+0g8PH+9O8g9+Hx4er03vHhIMzF1MEg4fD8IPzw7/Ug6OEg8OHx5ezi6+fo5d8g9O8g6uXf7OXt7y4KKworICAzLiDQ4fTe8/TlIPTvICBpICDq4ekg8Ovn6vTx7+vv497z9OUg9OnyIOHw4fHh3/Tn9OXyIPDx7/Po3url8i4KKworICA0LiDK4ej+8iDk6e/x6P7t5fTlIOrc6OUg69zo7/Ig8OH03vP05SA8RVNDPiDj6eEg7eEg5fDp8/Tx3fjl9OUg8/Tn7QorICAgICDK4e3v7enq3iDK4fTc8/Th8+cuIMXw4e3h69zi5fTlIPThIOLe7OH04SAyIOzd9/HpIDQg4+nhIO3hIOTp7/Ho/vPl9OUKKyAgICAg9OftIPDx/PTh8+cuCisKKy0tLT4gVGhlcmUgaXMgdGV4dCBtaXNuZyB0aGlzIC4KKy0tLT4gVGhlcmUgaXMgc29tZSB0ZXh0IG1pc3NpbmcgZnJvbSB0aGlzIGxpbmUuCisKKyAgNS4gvPTh7SDl3/P05SDc7eX07+kg7OUg9OftIPDh8eXs4u/r3iDq5ens3e3v9SDs5fTh6unt5+jl3/TlIPP05+0KKyAgICAg8OHx4erc9Pkg8OXx3+vn+OcuCisKK35+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+fn4KKwkJCSAgICAgICDMwcjHzMEgMSDQxdHJy8fYxworCisKKyAgMS4gzyDk8e/s3eHyIOrp7eXf9OHpIPfx5/Pp7O/w7+n+7fTh8iDl3/TlIPThIPDr3ur08eEg5PHv7N3hIN4g9OEgaGprbC4KKwkgaCAo4fHp8/Td8eEpCWogKOrc9PkpCWsgKPDc7fkpCWwgKOTl7uncKQorCisgIDIuIMPp4SDt4SDs8OXf9OUg8/Tv7SBWaW0gKOHw/CD05+0g8PHv9PHv8N4gJSkg4/Hc+PTlOiAgdmltIMHR18XJzyA8RU5URVI+CisKKyAgMy4gw+nhIO3hIOLj5d/05SDj8dz49OU6ICA8RVNDPiAgIDpxISAgIDxFTlRFUj4gICDj6eEg4fD88fHp+Ocg9PntIOHr6+Hj/u0uCisJCSC5IOPx3Pj05TogIDxFU0M+ICAgOndxICAgPEVOVEVSPiAgIOPp4SDh8O/o3url9fPnIPT57SDh6+vh4/7tLgorCisgIDQuIMPp4SDt4SDk6eHj8dz45fTlIN3t4e0g9+Hx4er03vHhIOrc9Pkg4fD8IPTv7SDk8e/s3eEg8+UKKyAgICAgyuHt7+3p6t4gyuH03PP04fPnIPDh9N7z9OU6ICB4CisKKyAgNS4gw+nhIO3hIOXp89zj5fTlIOrl3+zl7e8g8/Tv7SDk8e/s3eEg/PPvIOXf8/TlIPPlIMrh7e/t6ereIMrh9Nzz9OHz5yDj8dz49OU6CisJIGkgICAgIPDr5+r08e/r7+Pe8/TlIPTvIOrl3+zl7e8JPEVTQz4KKwor08fMxcnZ08c6INDh9P7t9OHyIDxFU0M+IOjhIPTv8O/o5fTn6OXf9OUg8/Tn7SDK4e3v7enq3iDK4fTc8/Th8+cg3iDo4QorCSAg4er18f7z5fTlIOzf4SDh7eXw6ej97Of05yDq4ekg7OXx6er+8iDv6+/q6+fx+ezd7ecg5e307+veLgorCivU/vHhIPP17eX33/P05SDs5SD07yDM3Ojn7OEgMi4KKworfn5+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+fgorCQkJIMzc6Ofs4SAyLjE6IMXN1M/LxdMgxMnBw9HB1sfTCisKKwkgKiogw/Hc+PTlICBkdyAg4+nhIO3hIOTp4ePx3Pjl9OUg7N338ekg9O8g9N3r7/Ig7N/h8iDr3e7n8i4gKioKKworICAxLiDQ4fTe8/TlICA8RVNDPiAg4+nhIO3hIOLl4uHp+ejl3/TlIPz06SDl3/P05SDz9OftIMrh7e/t6ereIMrh9Nzz9OHz5y4KKworICAyLiDM5fTh6unt5d/z9OUg9O/tIOTx7+zd4SDz9OftIPDh8eHq3PT5IOPx4ezs3iDz5+zl6fns3e3nIOzlIC0tLT4uCisKKyAgMy4g0Ofj4d/t5fTlIPTv7SDk8e/s3eEg8/Tn7SDh8ffeIPTn8iDr3e7n8iDw7/Ug8PHd8OXpIO3hIOTp4ePx4fbl3y4KKworICA0LiDD8dz49OUgIGR3ICDj6eEg7eEg6tzt5fTlIPTn7SDr3e7nIO3hIOXu4fbh7enz9OXfLgorCivTx8zFydnTxzog1OEg4/Hc7Ozh9OEgZHcg6OEg5ez24e3p8/Tv/e0g8/Tn7SD05evl9fTh3+Eg4/Hh7OzeIPTn8iDv6Pzt5/Ig/PPvCisJICD04SDw6+fq9PHv6+/j5d/05S4gwe0g4/Hc+OH05SDq3PTpIOvc6O/yLCDw4fTe8/TlICA8RVNDPiAg6uHpCisJICDu5erp7d7z9OUg4fD8IPTn7SDh8ffeLgorCistLS0+IFRoZXJlIGFyZSBhIHNvbWUgd29yZHMgZnVuIHRoYXQgZG9uJ3QgYmVsb25nIHBhcGVyIGluIHRoaXMgc2VudGVuY2UuCisKKyAgNS4gxfDh7eHr3OLl9OUg9OEg4t7s4fThIDMg6uHpIDQg7N338ekg5yDw8fz04fPnIO3hIOXf7eHpIPP58/TeIOrh6QorICAgICDw5+Ph3+3l9OUg8/TvIMzc6Ofs4SAyLjIuCisKK35+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+fn4KKwkJICAgzNzo5+zhIDIuMjog0MXRydPTz9TF0cXTIMXN1M/LxdMgxMnBw9HB1sfTCisKKyAgICAqKiDQ6+fq9PHv6+/j3vP05SAgZCQgIOPp4SDt4SDk6eHj8dz45fTlIOzd9/HpIPTvIPTd6+/yIPTn8iDj8eHs7N7yLiAqKgorCisgIDEuINDh9N7z9OUgIDxFU0M+ICDj6eEg7eEg4uXi4en56OXf9OUg/PTpIOXf8/TlIPP05+0gyuHt7+3p6t4gyuH03PP04fPnLgorCisgIDIuIMzl9OHq6e3l3/P05SD07+0g5PHv7N3hIPP05+0g8OHx4erc9Pkg4/Hh7OzeIPPn7OXp+ezd7ecg7OUgLS0tPi4KKworICAzLiDM5fTh6unt5d/z9OUg9O/tIOTx7+zd4SDz9O8g9N3r7/Ig9OfyIPP58/Te8iDj8eHs7N7yICjMxdTBIPTn7SDw8f705yAuICkuCisKKyAgNC4g0OH03vP05SAgIGQkICAg4+nhIO3hIOTp4ePx3Pjl9OUg7N338ekg9O8g9N3r7/Ig9OfyIOPx4ezs3vIuCisKKy0tLT4gU29tZWJvZHkgdHlwZWQgdGhlIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuCisKKyAgNS4g0Ofj4d/t5fTlIPP07yDM3Ojn7OEgMi4zIOPp4SDt4SDq4fTh69zi5fTlIPTpIPP17OLh3+3l6S4KKworCisKKworCisKKworfn5+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+fgorCQkgICDM3Ojn7OEgMi4zOiDQxdHJIMXN1M/L2c0gysHJIMHN1MnKxcnMxc3ZzQorCisKK8cg7O/x9t4g9OfyIOXt9O/r3vIg5Onh4/Hh9t7yICBkICDl3+3h6SD58iDl7t7yOgorCisJIFvh8eno7PzyXSAgIGQgICDh7fTp6uXf7OXt7wm5CWQgICBb4fHp6Oz88l0gICDh7fTp6uXf7OXt7worICC88O/1OgorICAgIOHx6ejs/PIgLSDw/PPl8iD27/Hd8iDo4SDl6vTl6+Xz9OXfIOcg5e307+veICjw8e/h6fHl9Onq/Cwg5e4nIO/x6fPs7/09MSkuCisgICAgZCAtIOcg5e307+veIPTn8iDk6eHj8eH23vIuCisgICAg4e306erl3+zl7e8gLSDw3O35IPPlIPTpIOjhIOvl6fTv9fHj3vPl6SDnIOXt9O/r3iAo8OHx4erc9Pkg69/z9OEpLgorCisgIMzf4SDs6erx3iDr3/P04SDh8Pwg4e306erl3+zl7eE6CisgICAgdyAtIOHw/CD07+0g5PHv7N3hIOzd9/HpIPTvIPTd6+/yIPTn8iDr3e7n8iwg8OXx6evh7OLc7e/t9OHyIPTvIOTp3PP05+zhLgorICAgIGUgLSDh8Pwg9O/tIOTx7+zd4SDs3ffx6SD07yD03evv8iD05/Ig693u5/IsINfZ0cnTIPTvIOTp3PP05+zhLgorICAgICQgLSDh8Pwg9O/tIOTx7+zd4SDs3ffx6SD07yD03evv8iD05/Ig4/Hh7Oze8i4KKwor08fMxcnZ08c6ICDD6eEg9O/18iD0/fDv9fIg9OfyIPDl8enw3fTl6eHyLCDw4fT+7fTh8iDh8Ov+8iD07yDh7fTp6uXf7OXt7yD88+8KKwkgICDl3/P05SDz9OftIMrh7e/t6ereIMrh9Nzz9OHz5yD3+fHf8iDq3PDv6eEg5e307+veIOjhIOzl9OHq6e3e8+X05QorCSAgIPTv7SDk8e/s3eEg/PD58iDq4ejv8d/m5fTh6SDz9OftIOvf8/ThIOHt9Onq5ens3e357S4KKworCisKK35+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+fn4KKwkgICAgICAgzNzo5+zhIDIuNDogzMnBIMXOwcnRxdPHINPUx80gJ8XN1M/Lxy3BzdTJysXJzMXNzycKKworCSAgICoqINDr5+r08e/r7+Pe8/TlICBkZCAg4+nhIO3hIOTp4ePx3Pjl9OUg/OvnIPTnIOPx4ezs3i4gKioKKworICDF7uHp9N/h8iD05/Ig8/X37fz05/Th8iD05/Ig5Onh4/Hh9t7yIO/r/Orr5/Hn8iDj8eHs7N7yLCDv6SDz9+Xk6eHz9N3yCisgIPTv9SBWaW0g4fDv9tzz6fPh7SD89Okg6OEg3vTh7SDl9erv6/z05fHvIO3hIOPx3Pbl9OUg4fDr/vIg5P3vIGQg8/TnCisgIPPl6fHcIOPp4SDt4SDk6eHj8dz45fTlIOzf4SDj8eHs7N4uCisKKyAgMS4gzOX04erp7eXf8/TlIPTv7SDk8e/s3eEg8/TnIOTl/fTl8ecg4/Hh7OzeIPTn8iDw4fHh6tz0+SD28dzz5/IuCisgIDIuIMPx3Pj05SAgZGQgIOPp4SDt4SDk6eHj8dz45fTlIPTnIOPx4ezs3i4KKyAgMy4g1P7x4SDs5fTh6unt5+jl3/TlIPP05+0g9N304fH05yDj8eHs7N4uCisgIDQuIMPx3Pj05SAgMmRkICAo6PXs5+jl3/TlICDh8eno7PzyLeXt9O/r3i3h7fTp6uXf7OXt7ykg4+nhIO3hCisgICAgIOTp4ePx3Pjl9OUg5P3vIOPx4ezs3fIuCisKKyAgICAgIDEpICBSb3NlcyBhcmUgcmVkLAorICAgICAgMikgIE11ZCBpcyBmdW4sCisgICAgICAzKSAgVmlvbGV0cyBhcmUgYmx1ZSwKKyAgICAgIDQpICBJIGhhdmUgYSBjYXIsCisgICAgICA1KSAgQ2xvY2tzIHRlbGwgdGltZSwKKyAgICAgIDYpICBTdWdhciBpcyBzd2VldAorICAgICAgNykgIEFuZCBzbyBhcmUgeW91LgorCit+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+fn5+CisJCQkgzNzo5+zhIDIuNTogxyDFzdTPy8cgwc3BydHF08fTCisKKwkgICAgKiog0OH03vP05SAgdSAg4+nhIO3hIOHt4enx3fPl9OUg9OnyIPTl6+X19OHf5fIg5e307+vd8iwKKwkgICAgICAgVSDj6eEg7eEg5Onv8ej+8+X05SD86+cg9Ocg4/Hh7OzeLiAqKgorCisgIDEuIMzl9OHq6e3l3/P05SD07+0g5PHv7N3hIPP05+0g8OHx4erc9Pkg4/Hh7OzeIPPn7OXp+ezd7ecg7OUgLS0tPiDq4ekKKyAgICAg9O/w7+jl9N7z9OUg9O/tIPDc7fkg8/TvIPDx/vTvIOvc6O/yLgorICAyLiDQ4fTe8/TlICB4ICDj6eEg7eEg5Onh4/Hc+OX05SD07+0g8PH+9O8g4e3l8Ono/ezn9O8g9+Hx4er03vHhLgorICAzLiDU/vHhIPDh9N7z9OUgIHUgIOPp4SDt4SDh7eHp8d3z5fTlIPTn7SD05evl9fTh3+Eg5er05evl8+zd7ecg5e307+veLgorICA0LiDB9fTeIPTnIPbv8dwg5Onv8ej+8/TlIPzr4SD04SDr3OjnIPP05yDj8eHs7N4g9/Hn8+ns7/Dv6f7t9OHyIPTn7SDl7fTv694geC4KKyAgNS4g1P7x4SDw4fTe8/TlIN3t4SDq5fbh6+Hf7yAgVSAg4+nhIO3hIOXw6fP08d345fTlIPTnIOPx4ezs3iDz9OftIOHx9+nq3gorICAgICD05/Ig6uH03PP04fPnLgorICA2LiDU/vHhIPDh9N7z9OUgIHUgIOzl8enq3fIg9u/x3fIg4+nhIO3hIOHt4enx3fPl9OUg9OftICBVICDq4ekKKyAgICAg8PHv5+Pv/ezl7eXyIOXt9O/r3fIuCisgIDcuINT+8eEg8OH03vP05SBDVFJMLVIgKOrx4fT+7fTh8iDw4fTn7N3t7yD07yDw697q9PHvIENUUkwg6uHo/vIg8OH03PTlIPTvIFIpCisgICAgIOzl8enq3fIg9u/x3fIg4+nhIO3hIOXw4e3h9t3x5fTlIPTp8iDl7fTv693yICjh7eHf8eXz5yD0+e0g4e3h6fHd8+X57SkuCisKKy0tLT4gRmlpeCB0aGUgZXJyb3JzIG9vbiB0aGhpcyBsaW5lIGFuZCByZWVwbGFjZSB0aGVtIHdpdHRoIHVuZG8uCisKKyAgOC4gwfX03fIg5d/t4ekg8O/r/SD38d7z6ezl8iDl7fTv693yLiAg1P7x4SDw5+Ph3+3l9OUg8/Tn7QorICAgICDQ5fHf6+f45yD07/UgzOHo3uzh9O/yIDIuCisKK35+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+fn4KKwkJCSAgICAgICDMwcjHzMEgMiDQxdHJy8fYxworCisKKyAgMS4gw+nhIO3hIOTp4ePx3Pjl9OUg4fD8IPTv7SDk8e/s3eEg7N338ekg9O8g9N3r7/Ig693u5/Ig4/Hc+PTlOiAgICAgIGR3CisKKyAgMi4gw+nhIO3hIOTp4ePx3Pjl9OUg4fD8IPTv7SDk8e/s3eEg7N338ekg9O8g9N3r7/Ig4/Hh7Oze8iDj8dz49OU6ICAgIGQkCisKKyAgMy4gw+nhIO3hIOTp4ePx3Pjl9OUg7+v86uvn8ecg9Ocg4/Hh7OzeIOPx3Pj05TogICAgZGQKKworICA0LiDHIOzv8fbeIOPp4SDs3+Eg5e307+veIPP05+0gyuHt7+3p6t4gyuH03PP04fPnIOXf7eHpOgorCisgICAgICBb4fHp6Oz88l0gICDl7fTv694gICDh7fTp6uXf7OXt7yAgICC5ICAgIOXt9O/r3iAgIFvh8eno7PzyXSAgIOHt9Onq5d/s5e3vCisgICAgIPzw7/U6CisgICAgICAg4fHp6Oz88iAtIPD88+XyIPbv8d3yIO3hIOXw4e3h6+f26OXfIOcg5e307+veCisgICAgICAg5e307+veIC0g9Okg7eEg49/t5eksIPzw+fIg5yAgZCAg4+nhIOTp4ePx4fbeCisgICAgICAg4e306erl3+zl7e8gLSDw3O35IPPlIPTpIO3hIOXt5fHj3vPl6SDnIOXt9O/r3iwg/PD58iAgdyAgKOvd7ucpLAorCQkgICAgICQgKPTd6+/yIPTn8iDj8eHs7N7yKSwg6vTrLgorCisgIDUuIMPp4SDt4SDh7eHp8d3z5fTlIPDx7+fj7/3s5e3l8iDl7d3x4+Xp5fIsIPDh9N7z9OU6ICAgICAgICB1ICAgKPDl5vwgdSkKKyAgICAgw+nhIO3hIOHt4enx3fPl9OUg/Ovl8iD06fIg4evr4ePd8iDz9Ocg4/Hh7OzeLCDw4fTe8/TlOiAgVSAgKOrl9uHr4d/vIFUpCisgICAgIMPp4SDt4SDh7eHp8d3z5fTlIPTp8iDh7eHp8d3z5enyLCDw4fTe8/TlOiAgICAgICAgICAgICAgIENUUkwtUgorCit+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+fn5+CisJCQnM3Ojn7OEgMy4xOiDHIMXN1M/LxyDUz9DPyMXUx9PH0worCisKKyAgKiog0OH03vP05SAgcCAg4+nhIO3hIPTv8O/o5fTe8+X05SD05+0g9OXr5fX04d/hIOTp4ePx4fbeIOzl9Nwg9O/tIOTx7+zd4S4gICoqCisKKyAgMS4gzOX04erp7eXf8/TlIPTv7SDk8e/s3eEg8/Tn7SDw8f705yDj8eHs7N4g9OfyIPDh8eHq3PT5IO/s3OTh8i4KKworICAyLiDQ4fTe8/TlICBkZCAg4+nhIO3hIOTp4ePx3Pjl9OUg9Ocg4/Hh7OzeIOrh6SDt4SD05+0g4fDv6Ofq5f3z5fTlIPPlCisgICAgIPDx7/P58ent3iDs7d7s5yD07/UgVmltLgorCisgIDMuIMzl9OHq6e3l3/P05SD07+0g5PHv7N3hIPP05yDj8eHs7N4g0MHN2SDh8Pwg5erl3yDw7/Ug6OEg8PHd8OXpIO3hIPDc5ekKKyAgICAg5yDk6eHj8eHs7N3t5yDj8eHs7N4uCisKKyAgNC4gvPPvIOXf8/TlIPPlIMrh7e/t6ereIMrh9Nzz9OHz5ywg8OH03vP05SAgcCAg4+nhIO3hIOLc6+X05SD05yDj8eHs7N4uCisKKyAgNS4gxfDh7eHr3OLl9OUg9OEg4t7s4fThIDIg3fnyIDQg4+nhIO3hIOLc6+X05SD86+XyIPTp8iDj8eHs7N3yIPP05worICAgICDz+fP03iDz5enx3C4KKworICAgICBkKSBDYW4geW91IGxlYXJuIHRvbz8KKyAgICAgYikgVmlvbGV0cyBhcmUgYmx1ZSwKKyAgICAgYykgSW50ZWxsaWdlbmNlIGlzIGxlYXJuZWQsCisgICAgIGEpIFJvc2VzIGFyZSByZWQsCisKK35+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+fn4KKwkJICAgICAgzNzo5+zhIDMuMjogxyDFzdTPy8cgwc3UycrB1MHT1MHTx9MKKworCisgICAgKiog0OH03vP05SAgciAg6uHpIPfh8eHq9N7x4SDj6eEg7eEg4evr3O7l9OUg4fX0/O0g8O/1IOXf7eHpCisgICAgICAg6tz0+SDh8Pwg9O/tIOTx7+zd4S4gKioKKworICAxLiDM5fTh6unt5d/z9OUg9O/tIOTx7+zd4SDz9OftIPDx/vTnIOPx4ezs3iDw4fHh6tz0+SDz5+zl6fns3e3nIOzlIC0tLT4uCisKKyAgMi4gzOX04erp7eXf8/TlIPTv7SDk8e/s3eEg3fTz6SD+8/TlIO3hIOXf7eHpIPDc7fkg8/TvIPDx/vTvIOvc6O/yLgorCisgIDMuINDh9N7z9OUgIHIgIOrh6SDs5fTcIPTv7SD34fHh6vTe8eEg7yDv8O/f7/Ig5Onv8ej+7eXpIPTvIOvc6O/yLgorCisgIDQuIMXw4e3h69zi5fTlIPThIOLe7OH04SAyIOrh6SAzIOzd9/HpIO3hIOXf7eHpIPP58/TeIOcg8PH+9Ocg4/Hh7OzeLgorCistLS0+ICBXaGFuIHRoaXMgbGltZSB3YXMgdHVvZWQgaW4sIHNvbWVvbmUgcHJlc3N3ZCBzb21lIHdyb2pnIGtleXMhCistLS0+ICBXaGVuIHRoaXMgbGluZSB3YXMgdHlwZWQgaW4sIHNvbWVvbmUgcHJlc3NlZCBzb21lIHdyb25nIGtleXMhCisKKyAgNS4g1P7x4SDw5+Ph3+3l9OUg8/TvIMzc6Ofs4SAzLjIuCisKK9PHzMXJ2dPHOiDN4SDo9ezc8/TlIPz06SDw8d3w5ekg7eEg7OHo4d/t5fTlIOzlIPTnIPfx3vPnLCDq4ekg/PfpIOzlCisJICD05+0g4fDv7O3n7Pzt5fXz5y4KKworfn5+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+fgorCQkJICDM3Ojn7OEgMy4zOiDHIMXN1M/LxyDBy8vBw8fTCisKKwkgICAqKiDD6eEg7eEg4evr3O7l9OUg9Oze7OEg3iD86+cg9Ocg693u5ywg8OH03vP05SAgY3cgIC4gKioKKworICAxLiDM5fTh6unt5d/z9OUg9O/tIOTx7+zd4SDz9OftIPDx/vTnIOPx4ezs3iDw4fHh6tz0+SDz5+zl6fns3e3nIOzlIC0tLT4uCisKKyAgMi4g1O/w7+jl9N7z9OUg9O/tIOTx7+zd4SDw3O35IPP07yB1IPTn8iDr3e7n8iBsdWJ3LgorCisgIDMuINDh9N7z9OUgIGN3ICDq4ekg9Ocg8/nz9N4g693u5yAo8/Tn7SDw5fHf8PT58+cg4fX03iwg4/Hc+PTlICAnaW5lJy4pCisKKyAgNC4g0OH03vP05SA8RVNDPiDq4ekg8Ofj4d/t5fTlIPP07yDl8Pzs5e3vIOvc6O/yICjz9O/tIPDx/vTvCisgICAgIPfh8eHq9N7x4SDw8e/yIOHr6+Hj3ikuCisKKyAgNS4gxfDh7eHr3OLl9OUg9OEg4t7s4fThIDMg6uHpIDQg7N338enyIPz07/Ug5yDw8f705yDw8fz04fPnIO3hIOXf7eHpCisgICAgIN/k6eEg7OUg9Ocg5OX99OXx5y4KKworLS0tPiBUaGlzIGx1YncgaGFzIGEgZmV3IHdwdGZkIHRoYXQgbXJyZiBjaGFuZ2luZyB1c2YgdGhlIGNoYW5nZSBjb21tYW5kLgorLS0tPiBUaGlzIGxpbmUgaGFzIGEgZmV3IHdvcmRzIHRoYXQgbmVlZCBjaGFuZ2luZyB1c2luZyB0aGUgY2hhbmdlIGNvbW1hbmQuCisKK9Dh8eH05/Hl3/P05SD89Okg5yAgY3cgIPz36SDs/O3vIOHt9Onq4ejp8/Tc5ekg9Ocg693u5ywg4evr3CDz4fIg5enz3OPl6Qor5fDf8+fyIPPlIPDh8eXs4u/r3i4KKworfn5+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+fgorCQkgICAgIMzc6Ofs4SAzLjQ6INDF0cnT08/UxdHF0yDBy8vBw8XTIMzFIGMKKworCisgICoqIMcg5e307+veIOHr6+Hj3vIg9/Hn8+ns7/Dv6eXf9OHpIOzlIPThIN/k6eEg4e306erl3+zl7eEg9OfyIOTp4ePx4fbe8i4gKioKKworCisgIDEuIMcg5e307+veIOHr6+Hj3vIg5O/16+X95ekg7OUg9O/tIN/k6e8g9PH88O8g/PD58iDnIOTp4ePx4fbeLiDHIOzv8fbeIOXf7eHpOgorCisgICAgICAgW+Hx6ejs/PJdICAgYyAgIOHt9Onq5d/s5e3vICAgICC5ICAgICBjICAgW+Hx6ejs/PJdICAg4e306erl3+zl7e8KKworICAyLiDU4SDh7fTp6uXf7OXt4SDl3+3h6SDw3OvpIPThIN/k6eEsIPzw+fIgdyAo693u5yksICQgKPTd6+/yIOPx4ezs3vIpLCDq9OsuCisKKyAgMy4gzOX04erp7efo5d/05SDz9OftIPDx/vTnIOPx4ezs3iDw4fHh6tz0+SDz5+zl6fns3e3nIOzlIC0tLT4uCisKKyAgNC4gzOX04erp7eXf8/TlIPTv7SDk8e/s3eEg8/TvIPDx/vTvIOvc6O/yLgorCisgIDUuIMPx3Pj05SAgYyQgIOPp4SDt4SDq3O3l9OUg9O8g9fD86+/p8O8g9OfyIOPx4ezs3vIg3+Tp7yDs5SD05yDk5f305fHnCisgICAgIOrh6SDw4fTe8/TlIDxFU0M+LgorCistLS0+IFRoZSBlbmQgb2YgdGhpcyBsaW5lIG5lZWRzIHNvbWUgaGVscCB0byBtYWtlIGl0IGxpa2UgdGhlIHNlY29uZC4KKy0tLT4gVGhlIGVuZCBvZiB0aGlzIGxpbmUgbmVlZHMgdG8gYmUgY29ycmVjdGVkIHVzaW5nIHRoZSAgYyQgIGNvbW1hbmQuCisKKworfn5+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+fgorCQkJICAgICAgIMzByMfMwSAzINDF0cnLx9jHCisKKworICAxLiDD6eEg7eEg9O/w7+jl9N7z5fTlIOrl3+zl7e8g8O/1IOz86+nyIN335ekg5Onh4/Hh9uXfLCDw4fTe8/TlICBwIC4KKyAgICAgwfX0/CD07/Dv6OX05d8g9O8g5Onh4/Hh7Ozd7e8g6uXf7OXt7yDMxdTBIPTv7SDk8e/s3eEgKOHtIOTp4ePx3Pb05+rlCisgICAgIOPx4ezs3iDo4SDw3OXpIOzl9Nwg8/TnIOPx4ezs3iDq3PT5IOHw/CD07+0g5PHv7N3hLgorCisgIDIuIMPp4SDt4SDh7fTp6uH04fP03vPl9OUg9O/tIPfh8eHq9N7x4SDq3PT5IOHw/CD07+0g5PHv7N3hLCDw4fTe8/TlICByCisgICAgIOrh6SDs5fTcIPTv7SD34fHh6vTe8eEg8O/1IOjhIOHt9Onq4fTh8/Te8+XpIPTv7SDh8ffp6vwuCisKKyAgMy4gxyDl7fTv694g4evr4ePe8iDz4fIg5fDp9PHd8OXpIO3hIOHr69zu5fTlIPTvIOrh6O/x6fPs3e3vIOHt9Onq5d/s5e3vCisgICAgIOHw/CD07+0g5PHv7N3hIOzd9/HpIPTvIPTd6+/yIPTv9SDh7fTp6uXf7OXt7y4g0C73LiDj8dz49OUgIGN3ICDj6eEg7eEKKyAgICAg4evr3O7l9OUg4fD8IPTv7SDk8e/s3eEg7N338ekg9O8g9N3r7/Ig9OfyIOvd7ufyLCBjJCDj6eEg7eEg4evr3O7l9OUKKyAgICAg7N338ekg9O8g9N3r7/Ig4/Hh7Oze8i4KKworICA0LiDHIOzv8fbeIOPp4SD05+0g4evr4ePeIOXf7eHpOgorCisJIFvh8eno7PzyXSAgIGMgICDh7fTp6uXf7OXt7yAgICAguSAgICAgYyAgIFvh8eno7PzyXSAgIOHt9Onq5d/s5e3vCisKK9T+8eEg8/Xt5fff8/TlIOzlIPTvIOXw/Ozl7e8g7Nzo5+zhLgorCisKK35+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+fn4KKwkJICAgICDM3Ojn7OEgNC4xOiDIxdPHIMrBySDKwdTB09TB08cgwdHXxcnP1QorCisKKyAqKiDQ4fTe8/TlIENUUkwtZyDj6eEg7eEg5ez24e3p8/Tl3yDnIOjd8+cg8+HyIPP07yDh8ffl3+8g6uHpIOcg6uH03PP04fPeIPTv9S4KKyAgICDQ4fTe8/TlIFNISUZULUcg4+nhIO3hIPDc9OUg8+Ug7N/hIOPx4ezs3iDz9O8g4fH35d/vLiAqKgorCisgINPn7OXf+fPnOiDE6eHi3PP05SDv6/zq6+fx7yD07yDs3Ojn7OEg8PHp7SDl6vTl693z5fTlIOrc8O/p7yDh8Pwg9OEg4t7s4fThISEKKworICAxLiDK8eH03vP05SDw4fTn7N3t7yD07yDw697q9PHvIEN0cmwg6uHpIPDh9N7z9OUgIGcgLiDM3+Eg4/Hh7OzeIOrh9Nzz9OHz5/IKKyAgICAg6OEg5ez24e3p8/Tl3yDz9O8g6tz0+SDs3fHv8iD05/Ig8+Xr3+Th8iDs5SD07yD87e/s4SDh8ffl3+/1IOrh6SD05worICAgICDj8eHs7N4g8O/1IOXf8/TlLiDI9ezn6OXf9OUg9O/tIOHx6ejs/CDj8eHs7N7yIOPp4SD07yDC3uzhIDMuCisKKyAgMi4g0OH03vP05SBzaGlmdC1HIOPp4SDt4SDs5fTh6unt5+jl3/TlIPP07yD03evv8iD07/Ug4fH35d/v9S4KKworICAzLiDQ4fTe8/TlIPTv7SDh8eno7Pwg9OfyIOPx4ezs3vIg8O/1IN7z4fP04e0g6uHpIOzl9Nwgc2hpZnQtRy4gwfX0/CDo4QorICAgICDz4fIg5fDp8/Tx3fjl6SDz9Ocg4/Hh7OzeIPDv9SDe8+Hz9OHtIPDx6e0g8OH03vPl9OUg4+nhIPDx/vTnIPbv8dwgQ3RybC1nLgorICAgICAovPTh7SDw6+fq9PHv6+/j5d/05SD07/XyIOHx6ejs7/3yLCDExc0g6OEg5ez24e3f5u/t9OHpIPP05+0g7+j87ecpLgorCisgIDQuIMHtIO3v6f7o5fTlIPPf4+/18e/yIOPp4SDh9fT8LCDl6vTl693z9OUg9OEg4t7s4fThIDEg3fnyIDMuCisKKworCit+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+fn5+CisJCQnM3Ojn7OEgNC4yOiDHIMXN1M/LxyDBzcHGx9TH08fTCisKKworCSAgKiog0OH03vP05SAgIC8gICDh6u/r7/Xo7/3s5e3vIOHw/CD05yD28dzz5yDw7/Ug+Nz37eX05S4gKioKKworICAxLiDT5SDK4e3v7enq3iDK4fTc8/Th8+cg8OH03vP05SD07+0g9+Hx4er03vHhICAvIC4g0OHx4fTn8d7z9OUg/PTpIOH19PzyIOrh6QorICAgICDvIOTx7+zd4fIg5ez24e3f5u/t9OHpIPP07yDq3PT5IOzd8e/yIPTn8iDv6Pzt5/Ig/PD58iDs5SD05+0g5e307+veICA6IC4KKworICAyLiDU/vHhIOPx3Pj05SAnZXJycm9vcicgPEVOVEVSPi4gwfX03iDl3+3h6SDnIOvd7ucg8O/1IOjd6+X05SDt4SD43O7l9OUuCisKKyAgMy4gw+nhIO3hIPjc7uX05SDu4e3cIOPp4SD05+0g3+Tp4SD28dzz5ywg8OH03vP05SDh8Ov+8iAgbiAuCisgICAgIMPp4SDt4SD43O7l9OUg9OftIN/k6eEg9vHc8+cg8/Tn7SDh7fTf6OX05yDq4fTl/ej17fPnLCDw4fTe8/TlICBTaGlmdC1OIC4KKworICA0LiDB7SDo3evl9OUg7eEg+Nzu5fTlIOPp4SDs3+Eg9vHc8+cg8PHv8iD04SDw3/P5LCD38efz6ezv8O/p3vP05SD05+0g5e307+veICA/ICDh7fTfIPTn8iAgLyAuCisKKy0tLT4gvPTh7SDnIOHt4ebe9Ofz5yD29Nzz5ekg8/TvIPTd6+/yIPTv9SDh8ffl3+/1IOjhIPP17eX33/Pl6SDh8Pwg9OftIOHx994uCisKKyAgImVycnJvb3IiIGlzIG5vdCB0aGUgd2F5IHRvIHNwZWxsIGVycm9yOyAgZXJycm9vciBpcyBhbiBlcnJvci4KKworCisKK35+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+fn4KKwkJICAgzNzo5+zhIDQuMzogxdXRxdPHINTBydHJwdPU2c0g0MHRxc3IxdPF2c0KKworCisJICAqKiDQ4fTe8/TlICAgJSAgIOPp4SDt4SDi8eXf9OUg9OftIOHt9N/z9O/p9+cgKSwgXSwg3iB9IC4gKioKKworICAxLiDU7/Dv6OX03vP05SD07+0g5PHv7N3hIPPlIOrc8O/p4SAoLCBbLCDeIHsg8/Tn7SDw4fHh6tz0+SDj8eHs7N4KKyAgICAg8+fs5en57N3t5yDs5SAtLS0+LgorCisgIDIuINT+8eEg8OH03vP05SD07+0g9+Hx4er03vHhICAlIC4KKworICAzLiDPIOTx7+zd4fIg6OEg8PHd8OXpIO3hIOXf7eHpIPP05+0g4e303/P07+n35yDw4fHd7ejl8+cg3iDh4+r96+cuCisKKyAgNC4g0OH03vP05SAgJSAg4+nhIO3hIOzl9OHq6e3e8+X05SD07+0g5PHv7N3hIPDf8/kg8/Tn7SDw8f705yDh4+r96+cKKyAgICAo9O/1IObl9ePh8env/SkuCisKKy0tLT4gVGhpcyAoIGlzIGEgdGVzdCBsaW5lIHdpdGggKCdzLCBbJ3MgXSBhbmQgeydzIH0gaW4gaXQuICkpCisKK9PHzMXJ2dPHOiDB9fT8IOXf7eHpIPDv6/0g9/He8+ns7yDz9OftIOHw7/P24evs3PT58+cg5e388iDw8e/j8dzs7OH07/IKKwkgIOzlIOznIPTh6fHp4fP03fIg8OHx5e3o3fPl6fIhCisKKworCit+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+fn5+CisJCSAgICDM3Ojn7OEgNC40OiDFzcHTINTRz9DP0yDDycEgwcvLwcPHIMvByNnNCisKKworICAgICAgICoqIMPx3Pj05SAgOnMvb2xkL25ldy9nICDj6eEg7eEg4evr3O7l9OUg9O8gJ25ldycg7OUg9O8gJ29sZCcuICoqCisKKyAgMS4gzOX04erp7eXf8/TlIPTv7SDk8e/s3eEg8/Tn7SDw4fHh6tz0+SDj8eHs7N4g8+fs5en57N3t5yDs5SAtLS0+LgorCisgIDIuIMPx3Pj05SAgOnMvdGhlZS90aGUgPEVOVEVSPiAuINPn7OXp/vP05SD89Okg4fX03iDnIOXt9O/r3iDh6+vc5uXpIOz87e8KKyAgICAg9OftIPDx/vTnIOXs9tzt6fPnIPP05yDj8eHs7N4uCisKKyAgMy4g1P7x4SDj8dz49OUgICA6cy90aGVlL3RoZS9nICAgIOXt7e/+7fTh8iDj5e3p6t4g4e306erh9Nzz9OHz5yDz9OcKKyAgICAg4/Hh7OzeLiDB9fT8IOHr69zm5ekg/Ovl8iD06fIg5ez24e3f8+Xp8iDl8N8g9OfyIOPx4ezs3vIuCisKKy0tLT4gdGhlZSBiZXN0IHRpbWUgdG8gc2VlIHRoZWUgZmxvd2VycyBpcyBpbiB0aGVlIHNwcmluZy4KKworICA0LiDD6eEg7eEg4evr3O7l9OUg6tzo5SDl7Pbc7enz5yDs3+HyIPP17OLv6+/z5enx3PIg7OX04e79IOT97yDj8eHs7P7tLAorICAgICDj8dz49OUgICA6Iywjcy9vbGQvbmV3L2cgICD88O/1ICMsIyDv6SDh8eno7O/fIPT57SDk/e8g4/Hh7Oz+7S4KKyAgICAgw/Hc+PTlICAgOiVzL29sZC9uZXcvZyAgICAg4+nhIO3hIOHr69zu5fTlIOrc6OUg5ez23O3p8+cg8+Ug/OvvIPTvIOHx9+Xf7y4KKworCisKKworfn5+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+fgorCQkJICAgICAgIMzByMfMwSA0INDF0cnLx9jHCisKKworICAxLiDU7yAgQ3RybC1nICDl7Pbh7d/m5ekg9Ocg6N3z5yDz4fIg8/TvIOHx9+Xf7yDq4ekg9OftIOrh9Nzz9OHz3iD07/UuCisgICAgINTvICBTaGlmdC1HICDw5+Ph3+3l6SDz9O8g9N3r7/Ig9O/1IOHx9+Xf7/UuILjt4fIg4fHp6Oz88iDj8eHs7N7yCisgICAgIOHq7+vv9ejv/ezl7e/yIOHw/CAgU2hpZnQtRyAg8Ofj4d/t5ekg8+Ug5erl3+3nIPTnIOPx4ezs3i4KKworICAyLiDD8dz27+304fIgIC8gIOHq7+vv9ejv/ezl7e8g4fD8IOzf4SD28dzz5yD43Pft5ekg8PHv8iD04SDM0NHP09TBIOPp4QorICAgICD05yD28dzz5y4gw/Hc9u/t9OHyICA/ICDh6u/r7/Xo7/3s5e3vIOHw/CDs3+Eg9vHc8+cg+Nz37eXpIPDx7/Ig9OEg0MnT2QorICAgICDj6eEg9Ocg9vHc8+cuIMzl9Nwg4fD8IOzf4SDh7eHm3vTn8+cg8OH03vP05SAgbiAg4+nhIO3hIOLx5d/05SD05+0KKyAgICAg5fD87OXt5yDl7Pbc7enz5yDw8e/yIPTn7SDf5OnhIOrh9OX96PXt8+cg3iAgU2hpZnQtTiAg4+nhIO3hIPjc7uX05QorICAgICDw8e/yIPTn7SDh7fTf6OX05yDq4fTl/ej17fPnLgorCisgIDMuINDh9P7t9OHyICAlICD88+8g7yDk8e/s3eHyIOXf7eHpIPDc7fkg8+Ug7N/hICgsKSxbLF0seywg3iB9ICDl7fTv8N/m5ekKKyAgICAg9O8g4e303/P07+n37yD04d/x6SD07/Ug5uX14+Hx6e/9LgorCisgIDQuIMPp4SDh7fTp6uH03PP04fPnIOzlIG5ldyD07/Ug8PH+9O/1IG9sZCDz9Ocg4/Hh7OzeIOPx3Pj05SAgOnMvb2xkL25ldworICAgICDD6eEg4e306erh9Nzz9OHz5yDs5SBuZXcg/Ov57SD0+e0gJ29sZCcg8/TnIOPx4ezs3iDj8dz49OUgIDpzL29sZC9uZXcvZworICAgICDD6eEg4e306erh9Nzz9OHz5yD28dzz5fntIOzl9OHu/SDk/e8gIyDj8eHs7P7tIOPx3Pj05SAgICAgIDojLCNzL29sZC9uZXcvZworICAgICDD6eEg4e306erh9Nzz9OHz5yD86/ntIPT57SDl7Pbh7d/z5fntIPP07yDh8ffl3+8g4/Hc+PTlICAgIDolcy9vbGQvbmV3L2cKKyAgICAgw+nhIOXx/vTn8+cg5fDp4uXi4d/58+fyIOrc6OUg9u/x3CDw8e/z6N3z9OUg3e3hICdjJyAgICAgICAiJXMvb2xkL25ldy9nYworCit+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+fn5+CisJCSAgzNzo5+zhIDUuMTog0NnTIMXK1MXL2SDMycEgxc7Z1MXRycrHIMXN1M/LxworCisKKyoqIMPx3Pj05SAgOiEgIOHq7+vv9ejv/ezl7e8g4fD8IOzf4SDl7vn05fHp6t4g5e307+veIOPp4SDt4SD05+0g5er05evd8+X05S4gKioKKworICAxLiDQ4fTe8/TlIPTn7SDv6erl3+Eg5e307+veICA6ICDj6eEg7eEg6N3z5fTlIPTv7SDk8e/s3eEg8/TvIOrc9Pkg7N3x7/IKKyAgICAg9OfyIO/o/O3n8i4gwfX0/CDz4fIg5fDp9PHd8OXpIO3hIOT+8+X05SDs3+Eg5e307+veLgorCisgIDIuINT+8eEg8OH03vP05SAg9O8gICEgICjo4fXs4fP06er8KS4gwfX0/CDz4fIg5fDp9PHd8OXpIO3hIOXq9OXr3fPl9OUKKyAgICAg7/Dv6eHk3vDv9OUg5e759OXx6ereIOXt9O/r3iD07/Ug9uvv6e/9LgorCisgIDMuINPh7SDw4fHc5OXp4+zhIOPx3Pj05SAgbHMgIOzl9Nwg4fD8IPTvICEg6uHpIPDh9N7z9OUgPEVOVEVSPi4gwfX0/CDo4QorICAgICDz4fIg5ez24e3f8+XpIOzf4SDr3/P04SD07/Ug6uH04ev84+/1IPPh8iwg4erx6eL+8iDz4e0g7eEg3vPh8/Th7SDz9OftCisgICAgIPDx7/Tx7/DeIPTv9SD26+/p7/0uILkg9/Hn8+ns7/Dv6d7z9OUgIDohZGlyICDh7SD07yBscyDk5e0g5O/16+X95ekuCisKKy0tLT4g0+fs5d/58+c6IMXf7eHpIOT17eH0/O0g7eEg5er05evd8+X05SDv8O/p4eTe8O/05SDl7vn05fHp6t4g5e307+veCisgICAgIOzlIOH19PztIPTv7SD08fzw7y4KKworLS0tPiDT5+zl3/nz5zogvOvl8iDv6SDl7fTv693yICA6ICDw8d3w5ekg7eEg9OXx7OH03+bv7fTh6SDw4fT+7fTh8iD07yA8RU5URVI+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+fgorCQkgzNzo5+zhIDUuMjog0MXRydPTz9TF0cEg0MXRySDFw8PRwdbH0yDB0dfFydnNCisKKworICAgKiogw+nhIO3hIPP+8+X05SD06fIg4evr3OPl8iDw7/Ug6tzt4fTlIPP07yDh8ffl3+8sIOPx3Pj05SAgOncgwdHXxcnPLiAgKioKKworICAxLiDD8dz49OUgIDohZGlyICDeICA6IWxzICDj6eEg7eEg8Nzx5fTlIOzf4SDr3/P04SD07/Ug6uH04ev84+/1IPPh8i4KKyAgICAgueTnIO7d8eX05SD89Okg8PHd8OXpIO3hIPDh9N7z5fTlIDxFTlRFUj4g7OX03CDh8Pwg4fX0/C4KKworICAyLiDE6eHr3e705SDd7eEg/O3v7OEg4fH35d/v9SDw7/Ug5OXtIPXw3PH35ekg4er87OEsIPzw+fIg9O8gVEVTVC4KKworICAzLiDU/vHhIOPx3Pj05TogIDp3IFRFU1QgICj88O/1IFRFU1Qg5d/t4ekg9O8g/O3v7OEg4fH35d/v9SDw7/Ug5Onh693u4fTlKS4KKworICA0LiDB9fT8IPP+5uXpIPzr7yD07yDh8ffl3+8gKHZpbSBUdXRvcikg7OUg9O8g/O3v7OEgVEVTVC4gw+nhIO3hIPTvCisgICAgIOXw4evn6OX98+X05Swg4/Hc+PTlIO7h7dwgIDohZGlyIOPp4SDt4SDk5d/05SD07+0g6uH03Ovv4/wg8+HyLgorCistLS0+INPn7OXp/vP05SD89Okg4e0g4uPh3+3h9OUg4fD8IPTv7SBWaW0g6uHpIOzw4d/t4fTlIO7h7dwg7OUg9O8g/O3v7OEKKyAgICAg4fH35d/v9SBURVNULCD07yDh8ffl3+8g6OEg3vTh7SDh6vHp4t3yIOHt9N/j8eH27yD07/UgdHV0b3Ig/PTh7SD07yDz/vPh9OUuCisKKyAgNS4g1P7x4SDk6eHj8dz49OUg9O8g4fH35d/vIOPx3Pbv7fTh8iAoTVMtRE9TKTogICAgICA6IWRlbCBURVNUCisKKworCit+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+fn5+CisJCSAgICAgzNzo5+zhIDUuMzogxdDJy8XK1MnKxyDFzdTPy8cgxcPD0cHWx9MKKworCisJICAqKiDD6eEg7eEg8/7z5fTlIPTs3uzhIPTv9SDh8ffl3+/1LCDj8dz49OUgIDojLCMgdyDB0dfFyc8gKioKKworICAxLiCi6+vnIOzp4SD27/HcLCDj8dz49OUgIDohZGlyICDeICA6IWxzICDj6eEg7eEg8Nzx5fTlIOzf4SDr3/P04SDh8Pwg9O/tCisgICAgIOrh9Nzr7+P8IPPh8iDq4ekg5Onh693u9OUg3e3hIOrh9Nzr6+fr7yD87e/s4SDh8ffl3+/1IPzw+fIg9O8gVEVTVC4KKworICAyLiDM5fTh6unt5d/z9OUg9O/tIOTx7+zd4SDz9O8g8Nzt+SDs3fHv8iDh9fTe8iD05/Ig8+Xr3+Th8iDq4ekg8OH03vP05QorICAgICBDdHJsLWcgIOPp4SDt4SDi8eXf9OUg9O/tIOHx6ejs/CDh9fTe8iD05/Ig4/Hh7Oze8i4KKyAgICAgzcEgyNXMwdPUxSDB1dTPzSDUz80gwdHJyMzPIQorCisgIDMuINT+8eEg8Ofj4d/t5fTlIPP07yDq3PT5IOzd8e/yIPTn8iDz5evf5OHyIOrh6SDw4fTe8/TlICBDdHJsLWcgIO7h7dwuCisgICAgIM3BIMjVzMHT1MUgysHJIMHV1M/NINTPzSDB0cnIzM8hCisKKyAgNC4gw+nhIO3hIPP+8+X05SDMz83PIN3t4SD07N7s4SDz5SDh8ffl3+8sIOPx3Pj05SAgIDojLCMgdyBURVNUCisgICAgIPzw7/UgIywjIO/pIOT97yDh8eno7O/fIPDv9SDh8O/s7efs7+3l/fPh9OUgKPDc7fks6tz0+Skg6uHpIFRFU1Qg9O8KKyAgICAg/O3v7OEg9O/1IOHx9+Xf7/Ug8+HyLgorCisgIDUuIM7h7dwsIOTl3/TlIPz06SD07yDh8ffl3+8g5d/t4ekg5erl3yDs5SD05+0gIDohZGlyIOHr69wgzMfNIPTvIOTp4ePx3Pjl9OUuCisKKworfn5+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+fgorCQkgIMzc6Ofs4SA1LjQ6IMHNwcrU2c3UwdMgysHJIMXN2c3PzdTB0yDB0dfFycEKKworCisgICAgICoqIMPp4SDt4SDl6fPc4+X05SD04SDw5fHp5ff87OXt4SDl7fzyIOHx9+Xf7/UsIOPx3Pj05SAgIDpyIMHR18XJzyAqKgorCisgIDEuIMPx3Pj05SAgOiFkaXIgIOPp4SDt4SDi5eLh6fno5d/05SD89Okg9O8gVEVTVCD18Nzx9+XpIOHw/CDw8entLgorCisgIDIuINTv8O/o5fTe8/TlIPTv7SDk8e/s3eEg8/TvIPDc7fkg7N3x7/Ig9OfyIPPl69/k4fIuCisKK9PHzMXJ2dPHOiAgwfb89O/1IOXq9OXr3fPl9OUg9O8gwt7s4SAzIOjhIOTl3/TlIPTvIMzc6Ofs4SA1LjMuCisJICAgzOX03CDq6e3n6OXf9OUgysHU2SDu4e3cIPDx7/Ig9O8g7Nzo5+zhIOH19PwuCisKKyAgMy4g1P7x4SDh7eHq9N7z9OUg9O8g4fH35d/vIPPh8iBURVNUIPfx5/Pp7O/w7+n+7fTh8iD05+0g5e307+veICA6ciBURVNUCisgICAgIPzw7/UgVEVTVCDl3+3h6SD07yD87e/s4SD07/Ug4fH35d/v9S4KKwor08fMxcnZ08c6ICDU7yDh8ffl3+8g8O/1IOHt4er03PTlIPTv8O/o5fTl3/Th6SDu5erp7f7t9OHyIOXq5d8g8O/1IOLx3/Pq5fTh6QorCSAgIO8g5PHv7N3h8i4KKworICA0LiDD6eEg7eEg5fDh6+fo5f3z5fTlIPz06SD07yDh8ffl3+8g4e3h6vTe6Ofq5Swg8N/z+SD07+0g5PHv7N3hIOrh6QorICAgICDw4fHh9Ofx3vP05SD89Okg9fDc8ffv9e0g9P7x4SDk/e8g4e303+Px4fbhIPTv9SDM4eje7OH07/IgNS4zLCD07worICAgICDh8ffp6vwg6uHpIOcg3erk7/PnIPTv9SDh8ffl3+/1LgorCit+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+fn5+CisJCQkgICAgICAgzMHIx8zBIDUg0MXRycvH2McKKworCisgIDEuICA6IeXt9O/r3iAg5er05evl3yDs3+Eg5e759OXx6ereIOXt9O/r3i4KKworICAgICAgzOXx6ercIPfx3vPp7OEg8OHx4eTl3+Ps4fThIOXf7eHpIChNUy1ET1MpOgorICAgICAgOiFkaXIgICAgICAgICAgICAtIOXs9tzt6fPnIOvf8/Th8iDl7fzyIOrh9OHr/OPv9S4KKyAgICAgIDohZGVsIMHR18XJzyAgICAgLSDk6eHj8dz25ekg9O8gwdHXxcnPLgorCisgIDIuICA6dyDB0dfFyc8gICDj8dz25ekg9O8g9PHd9/ntIOHx9+Xf7yD07/UgVmltIPP07yDk3/Pq7yDs5SD87e/s4SDB0dfFyc8uCisKKyAgMy4gIDojLCN3IMHR18XJzyAgIPP+5uXpIPTp8iDj8eHs7N3yIOHw/CAjIOzd9/HpICMg8/TvIMHR18XJzy4KKworICA0LiAgOnIgwdHXxcnPICDh7eHq9OXfIPTvIOHx9+Xf7yDk3/Pq7/UgwdHXxcnPIOrh6SD07yDw4fHl7OLc6+vl6SDs3fPhCisgICAgICDz9O8g9PHd9+/tIOHx9+Xf7yDs5fTcIOHw/CD05yDo3fPnIPTv9SDk8e/s3eEuCisKKworCisKKworCisKK35+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+fn4KKwkJCczc6Ofs4SA2LjE6IMcgxc3Uz8vHIMHNz8nDzMHUz9MKKworCisgICAgICAqKiDQ4fTe8/TlICBvICDj6eEg7eEg4e3v3+7l9OUg7N/hIOPx4ezs3iDq3PT5IOHw/CD07+0g5PHv7N3hIOrh6SDt4QorCSDi8eXo5d/05SDz5SDK4fTc8/Th8+cgyuXp7N3t7/UuICoqCisKKyAgMS4gzOX04erp7eXf8/TlIPTv7SDk8e/s3eEg8/Tn7SDw4fHh6tz0+SDj8eHs7N4g8+fs5en57N3t5yDs5SAtLS0+LgorCisgIDIuINDh9N7z9OUgIG8gKPDl5vwpIOPp4SDt4SDh7e/f7uX05SDs3+Eg4/Hh7OzeIMrB1Nkg4fD8IPTv7SDk8e/s3eEg6uHpIO3hCisgICAgIOLx5ejl3/TlIPPlIMrh9Nzz9OHz5yDK5ens3e3v9S4KKworICAzLiDU/vHhIOHt9Onj8dz49OUg9Ocg8+fs5en57N3t5yDs5SAtLS0+IOPx4ezs3iAg6uHpIPDh9N7z9OUgPEVTQz4g4+nhIO3hCisgICAgIOLj5d/05SDh8Pwg9OftIMrh9Nzz9OHz5yDK5ens3e3v9S4KKworLS0tPiBBZnRlciB0eXBpbmcgIG8gIHRoZSBjdXJzb3IgaXMgcGxhY2VkIG9uIHRoZSBvcGVuIGxpbmUgaW4gSW5zZXJ0IG1vZGUuCisKKyAgNC4gw+nhIO3hIOHt79/u5fTlIOzf4SDj8eHs7N4g0MHN2SDh8Pwg9O/tIOTx7+zd4Swg8OH03vP05SDh8OvcIN3t4SDq5fbh6+Hf7worICAgICBPLCDh7fTfIOPp4SDd7eEg8OXm/CAgby4gIMTv6uns3PP05SD07yDz9OftIPDh8eHq3PT5IOPx4ezs3i4KK8Ht79/j5fTlIOPx4ezs3iDw3O35IOHw/CDh9fTe7SDw4fT+7fTh8iBTaGlmdC1PIPzz7yDvIOTx7+zd4fIg5d/t4ekg8/TnIOPx4ezs3gorCisKKworfn5+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+fgorCQkJIMzc6Ofs4SA2LjI6IMcgxc3Uz8vHINDRz9PIx8rH0worCisJICAqKiDQ4fTe8/TlICAgYSAgIOPp4SDt4SDl6fPc4+X05SDq5d/s5e3vIMzF1KIg9O/tIOTx7+zd4S4gKioKKworICAxLiDM5fTh6unt5d/z9OUg9O/tIOTx7+zd4SDz9O8g9N3r7/Ig9OfyIPDx/vTn8iDj8eHs7N7yIPDh8eHq3PT5CisgICAgIPPn7OXp+ezd7ecg7OUgLS0tPiDw4fT+7fTh8iAgJCAg8/Tn7SDK4e3v7enq3iDK4fTc8/Th8+cuCisKKyAgMi4g0OH03vP05SDd7eEgIGEgICjw5eb8KSDj6eEg7eEg8PHv8+jd8+X05SDq5d/s5e3vIMzF1MEg4fD8IPTv7SD34fHh6vTe8eEKKyAgICAg8O/1IOXf7eHpIOrc9Pkg4fD8IPTv7SDk8e/s3eEuICAo1O8g6uX24evh3+8gIEEgIPDx7/Po3fTl6SDz9O8g9N3r7/IKKyAgICAg9OfyIOPx4ezs3vIpLgorCivT5+zl3/nz5zogwfX0/CDh8O/25f3j5ekg9O8g8Nz05+zhIPTv9SAgaSAsIPTv7SD05evl9fTh3+8g9+Hx4er03vHhLCD07worCSAg6uXf7OXt7yD05/Ig5enz4eP5497yLCA8RVNDPiwg5PHv7N3hLeTl7uncLCDq4ekg9N3r7/IsIHgsIOz87e8g6uHpCisJICDs/O3vIOPp4SDt4SDw8e/z6N3z5fTlIPP07yD03evv8iD05/Ig4/Hh7Oze8iEKKworICAzLiDT9ezw6+fx/vP05SD0/vHhIPTn7SDw8f705yDj8eHs7N4uINPn7OXp/vP05SDl8N/z5/Ig/PTpIOcg8PHv8+je6ucg5d/t4ekKKyAgICAg4erx6eL+8iDf5OnhIPP05+0gyuH03PP04fPnIMrl6ezd7e/1IOzlIPTn7SDK4fTc8/Th8+cgxenz4eP5497yLCDl6vT88gorICAgICDh8Pwg9Ocg6N3z5yDw7/Ug5enz3OPl9OHpIPTvIOrl3+zl7e8uCisKKy0tLT4gVGhpcyBsaW5lIHdpbGwgYWxsb3cgeW91IHRvIHByYWN0aWNlCistLS0+IFRoaXMgbGluZSB3aWxsIGFsbG93IHlvdSB0byBwcmFjdGljZSBhcHBlbmRpbmcgdGV4dCB0byB0aGUgZW5kIG9mIGEgbGluZS4KKworfn5+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+fgorCQkgICDM3Ojn7OEgNi4zOiDBy8vHIMXKxM/TxyDUx9Mgwc3UycrB1MHT1MHTx9MKKworCisgKiog0OH03vP05SDq5fbh6+Hf7yAgUiAg4+nhIO3hIOHr69zu5fTlIPDl8enz8/z05fHv9fIg4fD8IN3t4e0g9+Hx4er03vHl8i4gKioKKworICAxLiDM5fTh6unt5d/z9OUg9O/tIOTx7+zd4SDz9OftIPDx/vTnIOPx4ezs3iDw4fHh6tz0+SDz5+zl6fns3e3nIOzlIC0tLT4uCisKKyAgMi4g1O/w7+jl9N7z9OUg9O/tIOTx7+zd4SDz9OftIOHx994g9OfyIPDx/vTn8iDr3e7n8iDw7/Ug5d/t4ekg5Onh9u/x5fTp6t4KKyAgICAg4fD8IPTnIOTl/fTl8ecg4/Hh7OzeIPPn7OXp+ezd7ecg7OUgLS0tPiAo5yDr3e7nICdsYXN0JykuCisKKyAgMy4g0OH03vP05SD0/vHhICBSICAg6uHpIOHr69zu9OUg9O8g9fD86+/p8O8g9O/1IOrl6ezd7e/1IPP05+0g8PH+9Ocg4/Hh7OzeCisgICAgIOPx3Pbv7fTh8iDw3O35IOHw/CD07yDw4evp/CDq5d/s5e3vIP7z9OUg7eEg6tzt5fTlIPTn7SDw8f705yDj8eHs7N4g3+Tp4QorICAgICDs5SD05yDk5f305fHnLgorCistLS0+IFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIGxhc3Qgb24gdGhpcyBwYWdlIHVzZSB0aGUga2V5cy4KKy0tLT4gVG8gbWFrZSB0aGUgZmlyc3QgbGluZSB0aGUgc2FtZSBhcyB0aGUgc2Vjb25kLCB0eXBlIFIgYW5kIHRoZSBuZXcgdGV4dC4KKworICA0LiDT5+zl6f7z9OUg/PTpIPz04e0g8OH03PTlIDxFU0M+IOPp4SDt4SDi4+Xf9OUsIPDh8eHs3e3l6SDv8O/p7+Te8O/05QorICAgICDh7eHr6+/f+fTvIOrl3+zl7e8uCisKKworCit+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+fn5+CisJCQkgIMzc6Ofs4SA2LjQ6INHVyMzJ08cgxdDJy8/Dx9MKKworCisgICAqKiDR9ejs3/P05SDs3+Eg5fDp6+/j3iDd9PPpIP7z9OUg5yDh7eHm3vTn8+cg3iDnIOHt9Onq4fTc8/Th8+cg7eEg4ePt7+XfCisgICAgICD05yDk6eH27/HcIPDl5v7tLerl9uHr4d/57SAqKgorCisgIDEuINjc7vTlIOPp4SAnaWdub3JlJyDl6fPc4+/t9OHyOgorICAgICAvaWdub3JlCisgICAgINP17eX33/P05SDh8erl9N3yIPbv8d3yIPDh9P7t9OHyIPTvIPDr3ur08e8gbi4KKworICAyLiDI3fP05SD05+0g5fDp6+/j3iAnaWMnIChJZ25vcmUgY2FzZSkg4/Hc9u/t9OHyOgorICAgICA6c2V0IGljCisKKyAgMy4g2Nzu9OUg9P7x4SDu4e3cIOPp4SAnaWdub3JlJyDw4fT+7fTh8jogbgorICAgICDT9e3l99/z9OUg9OftIOHt4ebe9Ofz5yDs5fHp6t3yIOHq/OzhIPbv8d3yIPDh9P7t9OHyIPTvIPDr3ur08e8gbgorCisgIDQuIMjd8/TlIPTp8iDl8Onr7+Pd8iAnaGxzZWFyY2gnIOrh6SAnaW5jc2VhcmNoJzoKKyAgICAgOnNldCBobHMgaXMKKworICA1LiDF6fPc4+X05SD0/vHhIO7h7dwg9OftIOXt9O/r3iDh7eHm3vTn8+fyLCDq4ekg5OXf9OUg9Okg8/Xs4uHf7eXpCisgICAgIC9pZ25vcmUKKworfn5+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+fgorCQkJICAgICAgIMzByMfMwSA2INDF0cnLx9jHCisKKworICAxLiDQ4fT+7fTh8iAgbyAg4e3v3+Pl6SDs3+Eg4/Hh7OzeIMrB1Nkg4fD8IPTv7SDk8e/s3eEg6uHpIPTv8O/o5fTl3yD07+0KKyAgICAg5PHv7N3hIPP05+0g4e3v6ff03iDj8eHs7N4g8+UgyuH03PP04fPnIMrl6ezd7e/1LgorCisgIDIuINDh9N7z9OUgIGEgIOPp4SDt4SDl6fPc4+X05SDq5d/s5e3vIMzF1MEg9O/tIPfh8eHq9N7x4SDz9O/tIO/w79/vIOXf7eHpCisgICAgIO8g5PHv7N3h8i4g0OH0/u304fIg6uX24evh3+8gIEEgIOH19Pzs4fThIPDx7/Po3fTl6SDq5d/s5e3vIPP07yD03evv8gorICAgICD05/Ig4/Hh7Oze8i4KKworICAzLiDQ4fT+7fTh8iDq5fbh6+Hf7yAgUiAg5enz3fH35fTh6SDz9OftIMrh9Nzz9OHnIMHt9Onq4fTc8/Th8+fyIOzd9/HpIO3hCisgICAgIPDh9Ofo5d8g9O8gPEVTQz4g6uHpIO3hIOXu3evo5ekuCisKKyAgNC4gw/Hc9u/t9OHyICI6c2V0IHh4eCIg8fXo7N/m5ekg9OftIOXw6evv494gInh4eCIuCisKKworCisKKworCisKKworfn5+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+fgorCQkgICAgICAgzMHIx8zBIDc6IE9OLUxJTkUgxc3Uz8vF0yDCz8fIxcnB0worCisKKwkJKiog1/Hn8+ns7/Dv6d7z9OUg9O8gb24tbGluZSDz/fP05+zhIOLv3ujl6eHyICoqCisKKyAgzyBWaW0g3ffl6SDd7eEg8OXx6eXq9Onq/CBvbi1saW5lIPP98/Tn7OEg4u/e6OXp4fIuIMPp4SDt4SDu5erp7d7z5eksCisgIOTv6uns3PP05SDq3PDv6e8g4fD8IPThIPTx3+E6CisJLSDw4fTe8/TlIPTvIPDr3ur08e8gPEhFTFA+ICjh7SDd9+X05SDq3PDv6e8pCisJLSDw4fTe8/TlIPTvIPDr3ur08e8gPEYxPiAo4e0g3ffl9OUg6tzw7+nvKQorCS0g4/Hc+PTlICAgOmhlbHAgPEVOVEVSPgorCisgIMPx3Pj05SAgOnEgPEVOVEVSPiAgIOPp4SDt4SDq6+Xf8+X05SD07yDw4fHc6PXx7yD05/Ig4u/e6OXp4fIuCisKKyAgzPDv8eXf9OUg7eEg4vHl3/TlIOLv3ujl6eEg8Nzt+SDz5SDq3OjlIOHt9Onq5d/s5e3vLCDk3+3v7fTh8iDs3+Eg8OHx3Ozl9PHvCisgIPP05+0g5e307+veICI6aGVscCIuICDE7+rp7Nzz9OUg4fX03CAo7OftIO7l9+3c9OUg7eEg8OH03PTlIDxFTlRFUj4pOgorCisJOmhlbHAgdworCTpoZWxwIGNfPFQKKwk6aGVscCBpbnNlcnQtaW5kZXgKKwk6aGVscCB1c2VyLW1hbnVhbAorCisKK35+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+fn4KKwkJICDMwcjHzMEgODogxMfMyc/V0cPH09TFIMXNwSBTQ1JJUFQgxcrKyc3H08fTCisKKwkJICAgKiogxe3l8ePv8O/p3vP05SD34fHh6vTn8enz9Onq3CD07/UgVmltICoqCisKKyAgzyBWaW0g3ffl6SDw7+vr3CDw5fHp8/P89OXx4SD34fHh6vTn8enz9Onq3CDh8Ccg/Cz06SDvIFZpLCDh6+vcIPThCisgIPDl8enz8/z05fHhIOXf7eHpIOHx9+nq3CDh8OXt5fHj7/Dv6efs3e3hLiDD6eEg7eEg4fH33/Pl9OUg7eEg9/Hn8+ns7/Dv6eXf9OUKKyAg8OXx6fPz/PTl8eEg9+Hx4er05/Hp8/Tp6twg8PHd8OXpIO3hIPb06dzu5fTlIN3t4SDh8ffl3+8gInZpbXJjIi4KKworICAxLiDB8fff8/TlIOTp7/Ho/u3v7fTh8iD07yDh8ffl3+8gInZpbXJjIiwg4fX0/CDl7uHx9Nz04ekg4fD8IPTvIPP98/Tn7Nwg8+HyOgorCTplZGl0IH4vLnZpbXJjICAgICAgICAgICAgICAg4+nhIFVuaXgKKwk6ZWRpdCAkVklNL192aW1yYyAgICAgICAgICAgIOPp4SBNUy1XaW5kb3dzCisKKyAgMi4g1P7x4SDl6fPc4+X05SD07yDq5d/s5e3vIPDh8eHk5d/j7OH07/Ig4+nhIOHx9+Xf7yAidmltcmMiOgorCTpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4gw/Hc+PTlIPTvIOHx9+Xf7yDs5SD05+06CisJOndyaXRlCisKKyAg1OftIOXw/Ozl7ecg9u/x3CDw7/Ug6OEg7uXq6e3e8+X05SD07+0gVmltIOjhIPfx5/Pp7O/w7+ne8+XpIPb59Onz7PwKKyAg8/3t9OHu5/IuICDM8O/x5d/05SDt4SDw8e/z6N3z5fTlIPzr5fIg9OnyIPDx7/Tp7P7s5e3l8iDl8Onr7+Pd8iDzJyDh9fT8CisgIPTvIOHx9+Xf7yAidmltcmMiLgorCit+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+fn5+CisKKyAgxeT+IO/r7+rr5/H+7eX04ekg9O8gVmltIFR1dG9yLiDT6u/w/PIg9O/1IN704e0g7eEg5P7z5ekg7N/hIPP97fTv7OcKKyAg8OXx3+vn+Ocg9O/1IPP17fTc6vTnIFZpbSwg9O/169z36fP07+0g9Pzz5yD+8/TlIO3hIPPh8iDl8On08d345ekg7eEKKyAg9/Hn8+ns7/Dv6d7z5fTlIPTv7SDz9e303Or05yDh8erl9Nwg5f3q7+vhLiDB8N335ekg8O/r/SDh8Pwg7N/hCisgIO/r7+rr5/H57N3t5yDw4fHv9fPf4fPnIOrh6P7yIO8gVmltIN335ekg8Nzx4SDw7+vr3fIg5e307+vd8i4gxOnh4tzz9OUKKyAg6uH0/PDp7SD07yDl4/fl6fHf5OnvIPfx3vPn8joKKwkiOmhlbHAgdXNlci1tYW51YWwiLgorCisgIMPp4SDw5fHh6fTd8fkg5Onc4uHz7OEg6uHpIOzl69305ywg8/Xz9N7t5fTh6SDh9fT8IPTvIOLp4uvf7zoKKwlWaW0gLSBWaSBJbXByb3ZlZCAtIGJ5IFN0ZXZlIE91YWxsaW5lCisJUHVibGlzaGVyOiBOZXcgUmlkZXJzCisJ1O8g8PH+9O8g4uni69/vIPDr3vH58iDh9unl8fns3e3vIPP07+0gVmltLgorCcnk6eHf9OXx4SD38d7z6ezvIOPp4SDh8ffc8env9fIuCisJ1fDc8ffv9e0g8O/r69wg8OHx4eTl3+Ps4fThIOrh6SDl6er87eXyLgorCcTl3/TlIPTn7SBodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy9jbGljazUuaHRtbAorCisgIMH19Pwg9O8g4uni69/vIOXf7eHpIPDh6+n89OXx7yDq4ekg8OXx6fPz/PTl8e8g4+nhIPTv7SBWaSDw4fHcIOPp4SD07+0gVmltLAorICDh6+vcIOXw3/Pn8iDz9e3p8/T+7OXt7zoKKwlMZWFybmluZyB0aGUgVmkgRWRpdG9yIC0gYnkgTGluZGEgTGFtYgorCVB1Ymxpc2hlcjogTydSZWlsbHkgJiBBc3NvY2lhdGVzIEluYy4KKwnF3+3h6SDd7eEg6uHr/CDi6eLr3+8g4+nhIO3hIOzc6OX05SDz9+Xk/O0g9OEg8Nzt9OEg8O/1IOjd6+X05QorCe3hIOrc7eX05SDs5SD07+0gVmkuCisJxyDd6vTnIN3q5O/z5yDw5fHp3ffl6SDh6vzs4SDw6+fx7/bv8d/l8iDj6eEg9O/tIFZpbS4KKworICDB9fTeIOcg8OXx6d7j5/PnIOPx3Pb05+rlIOHw/CD07/XyIE1pY2hhZWwgQy4gUGllcmNlIOrh6SBSb2JlcnQgSy4gV2FyZSwKKyAgQ29sb3JhZG8gU2Nob29sIG9mIE1pbmVzIPfx5/Pp7O/w7+n+7fTh8iDp5N3l8iDh8Pwg9O/tIENoYXJsZXMgU21pdGgsCisgIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHkuICBFLW1haWw6IGJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdS4KKworICDQ8e/z4fHs7+PeIOPp4SD07+0gVmltIOHw/CD07+0gQnJhbSBNb29sZW5hYXIuCisKK35+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+fn4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvdHV0b3IuZ3IuY3A3MzcgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmdyLmNwNzM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZDM3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmdyLmNwNzM3CkBAIC0wLDAgKzEsODE1IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9ICAgIIkgmKIg4CCpIOMgqCCfIJggqyCcICAgIKkgqyCmICAgViBJIE0gICBUIHUgdCBvIHIgICAgLSAgICDroZumqZ4gMS41ICAgICA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgjiBWaW0gnOWkmKAg4qSYqiCnmKTlqa6sqKaqIKmspKvhoaueqiCnpqwg4q6coCCnpqKi4qognKSrpqLiqiwgp+GomAorICAgICCnpqKi4qogmqCYIKSYIJylnprjqaaso5wgqZwgo+WYIKecqKDjmp6pniDmp+CqIJisq+MuIICsq+MgniCnnKig45qeqZ4KKyAgICAgqa6cm6DhqaueoZwgmqCYIKSYIKecqKCaqOGvnKAgoKGYpKanpqCeq6Ch4SCroKognKSrpqLiqiCnpqwgn5ggqZiqCisgICAgIKHhpKaspCCkmCCuqJ6poKOmp6agnOWrnCCc56Gmopggq6akIFZpbSCpmKQg4qSYpCCanKSgoeOqIK6o46meqiCprKSr4aGrni4KKworICAgICCOIKGYq+Egp6imqeKamqCpniCuqOakpqogp6asIJinmKCrnOWrmKAgmqCYIKSYIKaipqGinqjpqZyrnCCrnqQgp5yooOOanqmeCisgICAgIJzlpJigIDI1LTMwIKKcp6vhLCCcpZioq+mkq5iqIJin5iCrpiCn5qmmIK6o5qSmIJ+YIKWmm+KvnKucIJqgmAorICAgICCnnKComKOYq6Cpo6bnqi4KKworICAgICCOoCCcpKumouKqIKmrmCCjmJ/jo5irmCCfmCCrqKanpqemoOOppqykIKumIKGc5aOcpKYuIIOeo6CmrKia46mrnCDipJgKKyAgICAgmKSr5ZqomK2mIJisq6bnIKumrCCYqK6c5aasIJqgmCCkmCCcpZipoZ6fnOWrnCAomKQgpZyhoKTjqZirnCCrpgorICAgICAiVmltdHV0b3IiIJisq+YgnOWkmKAg45ueIOKkmCCYpKvlmqiYraYpLgorCisgICAgIITlpJigIKmeo5ikq6Ch5iCkmCCfrKPhqaucIOaroCCYrKvjIJ4gp5yooOOanqmeIJzlpJigIKaompik4KPipJ4g4qupoAorICAgICDpqaucIKSYIJugm+GpoZygIKPiqeAgq56qIK6o46meqi4ggKyr5iCpnqOY5aScoCDmq6AgrqicoOGdnKuYoCCkmAorICAgICCcoaucopzlq5wgq6CqIJykq6ai4qogmqCYIKSYIKugqiCj4Z+cq5wgqeCpq+EuIICkIJugmJnhnZyrnCCj5qSmIKumCisgICAgIKGc5aOcpKYsIJ+YIKugqiClnK7hqZyrnCEKKworICAgICCS6aiYLCCZnJmYoOCfnOWrnCDmq6Agq6Ygp6LjoauopiBTaGlmdC1Mb2NrIIOEjCCc5aSYoCCnmKueo+KkpiChmKAKKyAgICAgp5ir46mrnCCrpiCnouOhq6imIGogmKihnKviqiCtpqjiqiCaoJggpJggo5yrmKGgpOOpnKucIKumpCCbqKaj4pgg4qupoAorICAgICDpqaucIKumIIvhn56jmCAxLjEgpJggmpyj5amcoCCnouOo4Kogq56kIKaf5qSeLgorCit+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+fn5+CisJCSAgICAgIIvhn56jmCAxLjE6ICCLhJKAiYiMjoySgJEgko6MIIOQjouEgAorCisgICoqIIKgmCCkmCChoKTjqZyrnCCrpqQgm6imo+KYLCCnmKvjqaucIKuYIKei46GrqJggaCxqLGssbCDmp+CqIJuc5a6knKuYoC4gKioKKwkgICAgIF4KKwkgICAgIGsJICAgICAgSGludDogkqYgp6LjoauopiBoIJzlpJigIJiooKmrnKjhIKGYoCChoKSc5SCpqycgmKigqaucqOEuCisgICAgICAgPCBoCSBsID4JICAgIJKmIKei46GrqKYgbCCc5aSYoCCbnKWg4SChmKAgoaCknOUgqauYIJucpaDhLgorCSAgICAgagkJICAgIJKmIKei46GrqKYgaiCjpqDhnZygIKOcIJmcouGhoCCnqKaqIKuYIKHhq+AuCisJICAgICB2CisKKyAgMS4gi5yrmKGgpJzlqaucIKumpCCbqKaj4pggq6igmueo4CCpq56kIKaf5qSeIKPirqigIKSYIKSmoOmfnKucIOGknKuYLgorCisgIDIuIImomKvjqaucIKeYq56j4qSmIKumIKHhq+Agp6LjoauopiAoaikgo+KuqKAgpJggnKeYpJiinq2fnOUuCistLS0+IJLpqJggpeKonKucIKfpqiCkmCCjnKuYoaCknp+c5aucIKmrpiCcp+ajnKSmIKPhn56jmC4KKworICAzLiCVqJ6poKOmp6ag6aSrmKogq6YgoeGr4CCnouOhq6imLCCjnKuYoaCknp+c5aucIKmrpiCL4Z+eo5ggMS4yLgorCiuRnqOc5eCpnjoggKQgmKOtoJnhoqKcq5wgmqCYIKHhq6Agp6asIKeYq+OpmKucLCCnmKvjqaucIDxFU0M+IJqgmCCkmCCZqJyfnOWrnAorCSAgqauepCCJmKSmpKCh4yCJmKvhqauYqZ4uIIucq+Egp5ir46mrnCClmKThIKuepCCcpKumouMgp6asIJ/iopirnC4KKworkZ6jnOXgqZ46IJKYIKei46GrqJggq6asIJuopqPimCCfmCCnqOKnnKAgnKflqZ6qIKSYIJumrKKc56aspC4ggKKi4SCjnCCrmCBoamtsCisJICCfmCCjp6aonOWrnCCkmCChoKSen5zlq5wgp6ai5yCaqJ6apqjmq5yomCwgo+aioKogq5ggqayknp/lqZyrnC4KKworfn5+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+fgorCQmL4Z+eo5ggMS4yOiAgi4+AiIyOjJKAkSCJgIgggYKAiIyOjJKAkSCRko6MIFZJTQorCisgICEhIJGGi4SIl5GGOiCPqKCkIJyhq5yi4qmcq5wgoeGnpqCmIJin5iCrmCCZ46OYq5gsIJugmJnhqaucIOaipiCrpiCj4Z+eo5ghIQorCisgIDEuII+Yq+Opq5wgq6Ygp6LjoauopiA8RVNDPiAomqCYIKSYIJzlqaucIKnlmqasqJggqauepCCJmKSmpKCh4yCJmKvhqauYqZ4pLgorCisgIDIuII+inqGrqKaipprjqaucOgkJOnEhIDxFTlRFUj4uCisKKy0tLT4ggKyr5iCcpeKorpyrmKAgmKfmIKumpCCprKSr4aGrniCVl5CIkSCkmCCp6amcoCDmp6agnKogmKKimJriqiDirpyrnCCh4aScoC4KKyAgICAggKQgn+KinKucIKSYIKnpqZyrnCCroKogmKKimJriqiChmKAgpJggnKXiqJ+cq5wgp6KeoauopqKmmuOpq5w6CisJICAgICAgOndxIDxFTlRFUj4KKworICAzLiDuq5ikIJuc5aucIKuepCCnqKarqKan4yCrpqwgraKmoKbnLCCnop6hq6imoqaa46mrnCCrnqQgnKSrpqLjIKOcIKuepCCmp6blmAorICAgICCjp+OhmKucIKmcIJisq+OkIKuepCCnnKig45qeqZ4uIIunpqic5SCkmCCc5aSYoDoJdmltdHV0b3IgPEVOVEVSPgorICAgICCJmKSmpKCh4SCfmCCuqJ6poKOmp6agpuepmKucOgkJCXZpbSB0dXRvciA8RU5URVI+CisKKy0tLT4gJ3ZpbScgqZ6jmOWknKAgnKCpmJrgmuMgqaumpCCprKSr4aGrniB2aW0sICd0dXRvcicgnOWkmKAgq6YgmKiunOWmIKemrAorICAgICCf4qKmrKOcIKSYIJugpqif6ammrKOcLgorCisgIDQuIICkIOKunKucIJinpqOknqOmpJznqZygIJisq+Egq5ggmeOjmKuYIKGYoCDirpyrnCCYrKump5ynpuWfnqmeLCCcoaucouKpq5wKKyAgICAgq5ggmeOjmKuYIDEg4uCqIDMgmqCYIKSYIJmanOWrnCChmKAgpJggo6ec5aucIKWYpOEgqaumpCCprKSr4aGrni4gi5yr4QorICAgICCjnKuYoaCk46mrnCCrpqQgm6imo+KYIKHhq+AgqaumIIvhn56jmCAxLjMuCit+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+fn5+CisJCSAgIIvhn56jmCAxLjM6ICCDiI6Qh5eRhiCJhIiLhIyOkyAtIIOIgIKQgJSGCisKKyAgICoqIO6ppiCc5amrnCCpq56kIImYpKakoKHjIImYq+Gpq5ipniCnmKvjqaucICB4ICCaoJggpJggm6CYmqjhr5yrnCCrpqQKKyAgICAgIK6YqJihq+OomCCh4avgIJin5iCrpqQgm6imo+KYLiAqKgorCisgIDEuIIucq5ihoKSc5amrnCCrpqQgm6imo+KYIKmrnqQgp5iomKHhq+AgmqiYo6PjIKmeo5yg4KPipJ4go5wgLS0tPi4KKworICAyLiCCoJggpJggm6CmqJ/pqZyrnCCrmCCi4Z+eLCChoKSc5amrnCCrpqQgm6imo+KYIKPirqigIKSYIJzlpJigIKfhpOAgmKfmCisgICAgIKumpCCumKiYoavjqJggp6asIJ+YIJugmJqomK2c5S4KKworICAzLiCPmKvjqaucIKumIKei46GrqKYgeCCaoJggpJggm6CYmqjhr5yrnCCrpqQgmKScp6Cf56Oeq6YgrpiomKGr46iYLgorCisgIDQuIISnmKSYouGZnKucIKuYIJnjo5irmCAyIKPirqigIDQgo+KuqKAgniCnqOarmKmeIKSYIJzlpJigIKngqavjLgorCistLS0+IFRoZSBjY293IGp1bXBlZGQgb3Z2ZXJyIHRoaGUgbW9vb24uCisKKyAgNS4gkumomCCnpqwgniCaqJijo+MgnOWkmKAgqeCpq+MsIKeempjlpJyrnCCpq6Ygi+GfnqOYIDEuNC4KKworkYaLhIiXkYY6IImYn+mqIJugmKuo4q6cq5wgmKyr46Qgq56kIKecqKDjmp6pniwgp6imqaeYn+Opq5wgpJggo56kCisJICCYp6ajpJ6jpqSc55yrnCwgo5ifmOWknKucIKOcIKueIK6o46meLgorCit+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+fn5+CisJCSAgIIvhn56jmCAxLjQ6IIOIjpCHl5GGIImEiIuEjI6TIC0gj4CQhIuBjoqGCisKKyAqKiDuqaYgnOWpq5wgqZwgiZikpqSgoeMgiZir4amrmKmeIKeYq+Opq5wgIGkgIJqgmCCkmCCnmKico5nhoqKcq5wgoZzlo5ykpi4gKioKKworICAxLiCLnKuYoaCknOWpq5wgq6akIJuopqPimCCj4q6ooCCrnqQgp6jpq54gmqiYo6PjIKeYqJih4avgIKmeo5yg4KPipJ4go5wgLS0tPi4KKworICAyLiCCoJggpJggoeGknKucIKuepCCnqOmrniCaqJijo+Mg5ZugmCCjnCCrnqQgm5znq5yoniwgo5yrmKGgpJzlqaucIKumpAorICAgICCbqKaj4pggp+Gk4CCpq6akIKeo6aumIK6YqJihq+OomCCLhJKAIJin5iDmp6asIJ+YIKeYqJyjmaKen5zlIKumIKGc5aOcpKYuCisKKyAgMy4gj5ir46mrnCCrpiAgaSAgoZigIKeinqGrqKaipprjqaucIKugqiCYp5iomOWrnqucqiCnqKapn+OhnKouCisKKyAgNC4giZif6aogm6CmqJ/ppJyrnCCh4Z+cIKLhn6aqIKeYq+Opq5wgPEVTQz4gmqCYIKSYIJynoKmrqOKvnKucIKmrnqQKKyAgICAgiZikpqSgoeMgiZir4amrmKmeLiCEp5ikmKLhmZyrnCCrmCCZ46OYq5ggMiCj4q6ooCA0IJqgmCCkmCCboKaon+mpnKucCisgICAgIKuepCCnqOarmKmeLgorCistLS0+IFRoZXJlIGlzIHRleHQgbWlzbmcgdGhpcyAuCistLS0+IFRoZXJlIGlzIHNvbWUgdGV4dCBtaXNzaW5nIGZyb20gdGhpcyBsaW5lLgorCisgIDUuIO6rmKQgnOWpq5wg4aScq6agIKOcIKuepCCnmKico5mmouMgoZygo+Kkpqwgo5yrmKGgpJ6fnOWrnCCpq56kCisgICAgIKeYqJih4avgIKecqOWinq+eLgorCit+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+fn5+CisJCQkgICAgICAgi4CHhouAIDEgj4SQiIqGloYKKworCisgIDEuII4gm6imo+KYqiChoKSc5auYoCCuqJ6poKOmp6ag6aSrmKognOWrnCCrmCCnouOhq6iYIJuopqPimCDjIKuYIGhqa2wuCisJIGggKJiooKmr4qiYKQlqICih4avgKQlrICin4aTgKQlsICibnKWg4SkKKworICAyLiCCoJggpJggo6ec5aucIKmrpqQgVmltICiYp+Ygq56kIKeopquopqfjICUpIJqo4a+rnDogIHZpbSCAkJWEiI4gPEVOVEVSPgorCisgIDMuIIKgmCCkmCCZmpzlq5wgmqjhr6ucOiAgPEVTQz4gICA6cSEgICA8RU5URVI+ICAgmqCYIJin5qiooK+eIKvgpCCYoqKYmumkLgorCQkg7CCaqOGvq5w6ICA8RVNDPiAgIDp3cQk8RU5URVI+ICAgmqCYIJinpp/joZysqZ4gq+CkIJiiopia6aQuCisKKyAgNC4ggqCYIKSYIJugmJqo4a+cq5wg4qSYpCCumKiYoavjqJggoeGr4CCYp+Ygq6akIJuopqPimCCpnAorICAgICCJmKSmpKCh4yCJmKvhqauYqZ4gp5ir46mrnDogIHgKKworICA1LiCCoJggpJggnKCp4Zqcq5wgoZzlo5ykpiCpq6akIJuopqPimCDmqaYgnOWpq5wgqZwgiZikpqSgoeMgiZir4amrmKmeIJqo4a+rnDoKKwkgaSAgICAgp6KeoauopqKmmuOpq5wgq6YgoZzlo5ykpgk8RVNDPgorCiuRhouEiJeRhjogj5ir6aSrmKogPEVTQz4gn5ggq6anpp+cq56fnOWrnCCpq56kIImYpKakoKHjIImYq+Gpq5ipniDjIJ+YCisJICCYoayo6amcq5wgo+WYIJiknKegn+ejnqueIKGYoCCjnKigoemqIKaipqGinqjgo+KkniCcpKumouMuCisKK5LpqJggqayknK7lqaucIKOcIKumIIvhn56jmCAyLgorCit+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+fn5+CisJCQkgi+GfnqOYIDIuMToghIySjoqEkSCDiICCkICUhpEKKworCSAqKiCCqOGvq5wgIGR3ICCaoJggpJggm6CYmqjhr5yrnCCj4q6ooCCrpiCr4qKmqiCj5ZiqIKLipZ6qLiAqKgorCisgIDEuII+Yq+Opq5wgIDxFU0M+ICCaoJggpJggmZyZmKDgn5zlq5wg5qugIJzlqaucIKmrnqQgiZikpqSgoeMgiZir4amrmKmeLgorCisgIDIuIIucq5ihoKSc5amrnCCrpqQgm6imo+KYIKmrnqQgp5iomKHhq+AgmqiYo6PjIKmeo5yg4KPipJ4go5wgLS0tPi4KKworICAzLiCPnpqY5aScq5wgq6akIJuopqPimCCpq56kIJioruMgq56qIKLipZ6qIKemrCCnqOKnnKAgpJggm6CYmqiYrZzlLgorCisgIDQuIIKo4a+rnCAgZHcgIJqgmCCkmCCh4aScq5wgq56kIKLipZ4gpJggnKWYrZikoKmrnOUuCisKK5GGi4SIl5GGOiCSmCCaqOGjo5irmCBkdyCfmCCco62YpKCpq6bnpCCpq56kIKucopysq5jlmCCaqJijo+Mgq56qIKaf5qSeqiDmqaYKKwkgIKuYIKeinqGrqKaippqc5aucLiCApCCaqOGvmKucIKHhq6AgouGfpqosIKeYq+Opq5wgIDxFU0M+ICChmKAKKwkgIKWcoaCk46mrnCCYp+Ygq56kIJioruMuCisKKy0tLT4gVGhlcmUgYXJlIGEgc29tZSB3b3JkcyBmdW4gdGhhdCBkb24ndCBiZWxvbmcgcGFwZXIgaW4gdGhpcyBzZW50ZW5jZS4KKworICA1LiCEp5ikmKLhmZyrnCCrmCCZ46OYq5ggMyChmKAgNCCj4q6ooCCeIKeo5quYqZ4gpJggnOWkmKAgqeCpq+MgoZigCisgICAgIKeempjlpKucIKmrpiCL4Z+eo5ggMi4yLgorCit+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+fn5+CisJCSAgIIvhn56jmCAyLjI6II+EkIiRkY6ShJCEkSCEjJKOioSRIIOIgIKQgJSGkQorCisgICAgKiogj6KeoauopqKmmuOpq5wgIGQkICCaoJggpJggm6CYmqjhr5yrnCCj4q6ooCCrpiCr4qKmqiCrnqogmqiYo6Pjqi4gKioKKworICAxLiCPmKvjqaucICA8RVNDPiAgmqCYIKSYIJmcmZig4J+c5aucIOaroCCc5amrnCCpq56kIImYpKakoKHjIImYq+Gpq5ipni4KKworICAyLiCLnKuYoaCknOWpq5wgq6akIJuopqPimCCpq56kIKeYqJih4avgIJqomKOj4yCpnqOcoOCj4qSeIKOcIC0tLT4uCisKKyAgMy4gi5yrmKGgpJzlqaucIKumpCCbqKaj4pggqaumIKvioqaqIKueqiCp4Kmr46ogmqiYo6PjqiAoi4SSgCCrnqQgp6jpq54gLiApLgorCisgIDQuII+Yq+Opq5wgICBkJCAgIJqgmCCkmCCboJiaqOGvnKucIKPirqigIKumIKvioqaqIKueqiCaqJijo+OqLgorCistLS0+IFNvbWVib2R5IHR5cGVkIHRoZSBlbmQgb2YgdGhpcyBsaW5lIHR3aWNlLiBlbmQgb2YgdGhpcyBsaW5lIHR3aWNlLgorCisgIDUuII+empjlpJyrnCCpq6Ygi+GfnqOYIDIuMyCaoJggpJggoZirmKLhmZyrnCCroCCprKOZmOWknKAuCisKKworCisKKworCisKK35+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+fn4KKwkJICAgi+GfnqOYIDIuMzogj4SQiCCEjJKOipeMIImAiCCAjJKIiYSIi4SMl4wKKworCiuGIKOmqK3jIKueqiCcpKumouOqIJugmJqomK3jqiAgZCAgnOWkmKAg4KognKXjqjoKKworCSBbmKign6Pmql0gICBkICAgmKSroKGc5aOcpKYJ7AlkICAgW5iooJ+j5qpdICAgmKSroKGc5aOcpKYKKyAg7qemrDoKKyAgICCYqKCfo+aqIC0gp+apnKograao4qogn5ggnKGrnKKcqauc5SCeIJykq6ai4yAop6immKConKugoeYsIJylJyCmqKCpo6bnPTEpLgorICAgIGQgLSCeIJykq6ai4yCrnqogm6CYmqiYreOqLgorICAgIJikq6ChnOWjnKSmIC0gp+Gk4CCpnCCroCCfmCCinKCrpqyomuOpnKAgniCcpKumouMgKKeYqJih4avgIKLlqauYKS4KKworICCL5Zggo6ChqOMgouWpq5ggmKfmIJikq6ChnOWjnKSYOgorICAgIHcgLSCYp+Ygq6akIJuopqPimCCj4q6ooCCrpiCr4qKmqiCrnqogouKlnqosIKecqKCimKOZ4aSmpKuYqiCrpiCboOGpq56jmC4KKyAgICBlIC0gmKfmIKumpCCbqKaj4pggo+KuqKAgq6Ygq+Kipqogq56qIKLipZ6qLCCVl5CIkSCrpiCboOGpq56jmC4KKyAgICAkIC0gmKfmIKumpCCbqKaj4pggo+KuqKAgq6Ygq+Kipqogq56qIJqomKOj46ouCisKK5GGi4SIl5GGOiAggqCYIKumrKogq+enpqyqIKueqiCnnKigp+KrnKCYqiwgp5ir6aSrmKogmKei6aogq6YgmKSroKGc5aOcpKYg5qmmCisJICAgnOWpq5wgqauepCCJmKSmpKCh4yCJmKvhqauYqZ4gruCo5aogoeGnpqCYIJykq6ai4yCfmCCjnKuYoaCk46mcq5wKKwkgICCrpqQgm6imo+KYIOan4KogoZifpqjlnZyrmKAgqauepCCi5amrmCCYpKugoZygo+Kk4KQuCisKKworCit+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+fn5+CisJICAgICAgIIvhn56jmCAyLjQ6IIuIgCCEjYCIkISRhiCRkoaMICeEjJKOioYtgIySiImEiIuEjI4nCisKKwkgICAqKiCPop6hq6imoqaa46mrnCAgZGQgIJqgmCCkmCCboJiaqOGvnKucIOainiCrniCaqJijo+MuICoqCisKKyAghKWYoKvlmKogq56qIKmsrqTmq56rmKogq56qIJugmJqomK3jqiCmouahop6onqogmqiYo6PjqiwgpqAgqa6cm6CYqaviqgorICCrpqwgVmltIJinpq3hqaCpmKQg5qugIJ+YIOOrmKQgnKyhpqLmq5yopiCkmCCaqOGtnKucIJinoumqIJvnpiBkIKmrngorICCpnKCo4SCaoJggpJggm6CYmqjhr5yrnCCj5ZggmqiYo6PjLgorCisgIDEuIIucq5ihoKSc5amrnCCrpqQgm6imo+KYIKmrniCbnOernKieIJqomKOj4yCrnqogp5iomKHhq+AgrajhqZ6qLgorICAyLiCCqOGvq5wgIGRkICCaoJggpJggm6CYmqjhr5yrnCCrniCaqJijo+MuCisgIDMuIJLpqJggo5yrmKGgpJ6fnOWrnCCpq56kIKviq5ioq54gmqiYo6PjLgorICA0LiCCqOGvq5wgIDJkZCAgKJ+so56fnOWrnCAgmKign6Pmqi2cpKumouMtmKSroKGc5aOcpKYpIJqgmCCkmAorICAgICCboJiaqOGvnKucIJvnpiCaqJijo+KqLgorCisgICAgICAxKSAgUm9zZXMgYXJlIHJlZCwKKyAgICAgIDIpICBNdWQgaXMgZnVuLAorICAgICAgMykgIFZpb2xldHMgYXJlIGJsdWUsCisgICAgICA0KSAgSSBoYXZlIGEgY2FyLAorICAgICAgNSkgIENsb2NrcyB0ZWxsIHRpbWUsCisgICAgICA2KSAgU3VnYXIgaXMgc3dlZXQKKyAgICAgIDcpICBBbmQgc28gYXJlIHlvdS4KKworfn5+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+fgorCQkJIIvhn56jmCAyLjU6IIYghIySjoqGIICMgIiQhJGGkQorCisJICAgICoqII+Yq+Opq5wgIHUgIJqgmCCkmCCYpJigqOKpnKucIKugqiCrnKKcrKuY5ZyqIJykq6ai4qosCisJICAgICAgIFUgmqCYIKSYIJugpqif6amcq5wg5qKeIKueIJqomKOj4y4gKioKKworICAxLiCLnKuYoaCknOWpq5wgq6akIJuopqPimCCpq56kIKeYqJih4avgIJqomKOj4yCpnqOcoOCj4qSeIKOcIC0tLT4goZigCisgICAgIKump6afnKvjqaucIKumpCCn4aTgIKmrpiCnqOmrpiCi4Z+mqi4KKyAgMi4gj5ir46mrnCAgeCAgmqCYIKSYIJugmJqo4a+cq5wgq6akIKeo6aumIJiknKegn+ejnqumIK6YqJihq+OomC4KKyAgMy4gkumomCCnmKvjqaucICB1ICCaoJggpJggmKSYoKjiqZyrnCCrnqQgq5yinKyrmOWYIJyhq5yinKmj4qSeIJykq6ai4y4KKyAgNC4ggKyr4yCrniCtpqjhIJugpqif6amrnCDmopggq5ggouGfniCpq54gmqiYo6PjIK6onqmgo6anpqDppKuYqiCrnqQgnKSrpqLjIHguCisgIDUuIJLpqJggp5ir46mrnCDipJggoZytmKKY5aYgIFUgIJqgmCCkmCCcp6Cpq6jir5yrnCCrniCaqJijo+MgqauepCCYqK6goeMKKyAgICAgq56qIKGYq+Gpq5ipni4KKyAgNi4gkumomCCnmKvjqaucICB1ICCjnKigoeKqIK2mqOKqIJqgmCCkmCCYpJigqOKpnKucIKuepCAgVSAgoZigCisgICAgIKeopp6apuejnKScqiCcpKumouKqLgorICA3LiCS6aiYIKeYq+Opq5wgQ1RSTC1SICihqJir6aSrmKogp5irnqPipKYgq6Ygp6LjoauopiBDVFJMIKGYn+mqIKeYq+GrnCCrpiBSKQorICAgICCjnKigoeKqIK2mqOKqIJqgmCCkmCCcp5ikmK3iqJyrnCCroKognKSrpqLiqiAomKSY5aicqZ4gq+CkIJikmKCo4qmc4KQpLgorCistLS0+IEZpaXggdGhlIGVycm9ycyBvb24gdGhoaXMgbGluZSBhbmQgcmVlcGxhY2UgdGhlbSB3aXR0aCB1bmRvLgorCisgIDguIICsq+KqIJzlpJigIKemoucgrqjjqaCjnKognKSrpqLiqi4gIJLpqJggp56amOWknKucIKmrnqQKKyAgICAgj5yo5aKer54gq6asIIuYn+OjmKumqiAyLgorCit+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+fn5+CisJCQkgICAgICAgi4CHhouAIDIgj4SQiIqGloYKKworCisgIDEuIIKgmCCkmCCboJiaqOGvnKucIJin5iCrpqQgm6imo+KYIKPirqigIKumIKvioqaqIKLipZ6qIJqo4a+rnDogICAgICBkdworCisgIDIuIIKgmCCkmCCboJiaqOGvnKucIJin5iCrpqQgm6imo+KYIKPirqigIKumIKvioqaqIJqomKOj46ogmqjhr6ucOiAgICBkJAorCisgIDMuIIKgmCCkmCCboJiaqOGvnKucIKai5qGinqieIKueIJqomKOj4yCaqOGvq5w6ICAgIGRkCisKKyAgNC4ghiCjpqit4yCaoJggo+WYIJykq6ai4yCpq56kIImYpKakoKHjIImYq+Gpq5ipniCc5aSYoDoKKworICAgICAgW5iooJ+j5qpdICAgnKSrpqLjICAgmKSroKGc5aOcpKYgICAg7CAgICCcpKumouMgICBbmKign6Pmql0gICCYpKugoZzlo5ykpgorICAgICDmp6asOgorICAgICAgIJiooJ+j5qogLSCn5qmcqiCtpqjiqiCkmCCcp5ikmKKerZ+c5SCeIJykq6ai4worICAgICAgIJykq6ai4yAtIKugIKSYIJrlpJygLCDmp+CqIJ4gIGQgIJqgmCCboJiaqJit4worICAgICAgIJikq6ChnOWjnKSmIC0gp+Gk4CCpnCCroCCkmCCcpJyomuOpnKAgniCcpKumouMsIOan4KogIHcgICii4qWeKSwKKwkJICAgICAkICir4qKmqiCrnqogmqiYo6PjqiksIKGroi4KKworICA1LiCCoJggpJggmKSYoKjiqZyrnCCnqKaemqbno5yknKognKTiqJqcoJyqLCCnmKvjqaucOiAgICAgICAgdSAgICinnJ3mIHUpCisgICAgIIKgmCCkmCCYpJigqOKpnKucIOainKogq6CqIJiiopia4qogqaueIJqomKOj4ywgp5ir46mrnDogIFUgICihnK2YopjlpiBVKQorICAgICCCoJggpJggmKSYoKjiqZyrnCCroKogmKSYoKjiqZygqiwgp5ir46mrnDogICAgICAgICAgICAgICBDVFJMLVIKKworfn5+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+fgorCQkJi+GfnqOYIDMuMToghiCEjJKOioYgko6PjoeEkoaRhpEKKworICAqKiCPmKvjqaucICBwICCaoJggpJggq6anpp+cq+OpnKucIKuepCCrnKKcrKuY5Zggm6CYmqiYreMgo5yr4SCrpqQgm6imo+KYLiAgKioKKworICAxLiCLnKuYoaCknOWpq5wgq6akIJuopqPimCCpq56kIKeo6aueIJqomKOj4yCrnqogp5iomKHhq+AgpqPhm5iqLgorCisgIDIuII+Yq+Opq5wgIGRkICCaoJggpJggm6CYmqjhr5yrnCCrniCaqJijo+MgoZigIKSYIKuepCCYp6afnqGc56mcq5wgqZwKKyAgICAgp6imqeCooKTjIKOk46OeIKumrCBWaW0uCisKKyAgMy4gi5yrmKGgpJzlqaucIKumpCCbqKaj4pggqaueIJqomKOj4yCPgIyXIJin5iCcoZzlIKemrCCfmCCnqOKnnKAgpJggp+GcoAorICAgICCeIJugmJqomKOj4qSeIJqomKOj4y4KKworICA0LiDuqaYgnOWpq5wgqZwgiZikpqSgoeMgiZir4amrmKmeLCCnmKvjqaucICBwICCaoJggpJggmeGinKucIKueIJqomKOj4y4KKworICA1LiCEp5ikmKLhmZyrnCCrmCCZ46OYq5ggMiDi4KogNCCaoJggpJggmeGinKucIOainKogq6CqIJqomKOj4qogqaueCisgICAgIKngqavjIKmcoKjhLgorCisgICAgIGQpIENhbiB5b3UgbGVhcm4gdG9vPworICAgICBiKSBWaW9sZXRzIGFyZSBibHVlLAorICAgICBjKSBJbnRlbGxpZ2VuY2UgaXMgbGVhcm5lZCwKKyAgICAgYSkgUm9zZXMgYXJlIHJlZCwKKworfn5+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+fgorCQkgICAgICCL4Z+eo5ggMy4yOiCGIISMko6KhiCAjJKIiYCSgJGSgJGGkQorCisKKyAgICAqKiCPmKvjqaucICByICChmKAgrpiomKGr46iYIJqgmCCkmCCYoqLhpZyrnCCYrKvmpCCnpqwgnOWkmKAKKyAgICAgICCh4avgIJin5iCrpqQgm6imo+KYLiAqKgorCisgIDEuIIucq5ihoKSc5amrnCCrpqQgm6imo+KYIKmrnqQgp6jpq54gmqiYo6PjIKeYqJih4avgIKmeo5yg6aOcpJ4go5wgLS0tPi4KKworICAyLiCLnKuYoaCknOWpq5wgq6akIJuopqPimCDiq6mgIOmpq5wgpJggnOWkmKAgp+Gk4CCpq6Ygp6jpq6YgouGfpqouCisKKyAgMy4gj5ir46mrnCAgciAgoZigIKOcq+Egq6akIK6YqJihq+OomCCmIKanpuWmqiCboKaon+mknKAgq6YgouGfpqouCisKKyAgNC4ghKeYpJii4Zmcq5wgq5ggmeOjmKuYIDIgoZigIDMgo+KuqKAgpJggnOWkmKAgqeCpq+MgniCnqOmrniCaqJijo+MuCisKKy0tLT4gIFdoYW4gdGhpcyBsaW1lIHdhcyB0dW9lZCBpbiwgc29tZW9uZSBwcmVzc3dkIHNvbWUgd3Jvamcga2V5cyEKKy0tLT4gIFdoZW4gdGhpcyBsaW5lIHdhcyB0eXBlZCBpbiwgc29tZW9uZSBwcmVzc2VkIHNvbWUgd3Jvbmcga2V5cyEKKworICA1LiCS6aiYIKeempjlpJyrnCCpq6Ygi+GfnqOYIDMuMi4KKworkYaLhIiXkYY6IIyYIJ+so+Gpq5wg5qugIKeo4qecoCCkmCCjmJ+Y5aScq5wgo5wgq54grqjjqZ4sIKGYoCDmrqAgo5wKKwkgIKuepCCYp6ajpJ6j5qScrKmeLgorCit+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+fn5+CisJCQkgIIvhn56jmCAzLjM6IIYghIySjoqGIICKioCChpEKKworCSAgICoqIIKgmCCkmCCYoqLhpZyrnCCro+OjmCDjIOainiCrniCi4qWeLCCnmKvjqaucICBjdyAgLiAqKgorCisgIDEuIIucq5ihoKSc5amrnCCrpqQgm6imo+KYIKmrnqQgp6jpq54gmqiYo6PjIKeYqJih4avgIKmeo5yg4KPipJ4go5wgLS0tPi4KKworICAyLiCSpqemn5yr46mrnCCrpqQgm6imo+KYIKfhpOAgqaumIHUgq56qIKLipZ6qIGx1YncuCisKKyAgMy4gj5ir46mrnCAgY3cgIKGYoCCrniCp4Kmr4yCi4qWeICipq56kIKecqOWnq+CpniCYrKvjLCCaqOGvq5wgICdpbmUnLikKKworICA0LiCPmKvjqaucIDxFU0M+IKGYoCCnnpqY5aScq5wgqaumIJyn5qOcpKYgouGfpqogKKmrpqQgp6jpq6YKKyAgICAgrpiomKGr46iYIKeopqogmKKimJrjKS4KKworICA1LiCEp5ikmKLhmZyrnCCrmCCZ46OYq5ggMyChmKAgNCCj4q6ooKog5qumrCCeIKeo6aueIKeo5quYqZ4gpJggnOWkmKAKKyAgICAg5ZugmCCjnCCrniCbnOernKieLgorCistLS0+IFRoaXMgbHVidyBoYXMgYSBmZXcgd3B0ZmQgdGhhdCBtcnJmIGNoYW5naW5nIHVzZiB0aGUgY2hhbmdlIGNvbW1hbmQuCistLS0+IFRoaXMgbGluZSBoYXMgYSBmZXcgd29yZHMgdGhhdCBuZWVkIGNoYW5naW5nIHVzaW5nIHRoZSBjaGFuZ2UgY29tbWFuZC4KKworj5iomKueqJzlqaucIOaroCCeICBjdyAg5q6gIKPmpKYgmKSroKGYn6Cpq+GcoCCrniCi4qWeLCCYoqLhIKmYqiCcoKnhmpygCiucp+WpnqogqZwgp5ionKOZpqLjLgorCit+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+fn5+CisJCSAgICAgi+GfnqOYIDMuNDogj4SQiJGRjpKEkISRIICKioCChJEgi4QgYworCisKKyAgKioghiCcpKumouMgmKKimJrjqiCuqJ6poKOmp6agnOWrmKAgo5wgq5gg5ZugmCCYpKugoZzlo5ykmCCrnqogm6CYmqiYreOqLiAqKgorCisKKyAgMS4ghiCcpKumouMgmKKimJrjqiCbpqyinOecoCCjnCCrpqQg5ZugpiCrqOanpiDmp+CqIJ4gm6CYmqiYreMuIIYgo6aoreMgnOWkmKA6CisKKyAgICAgICBbmKign6Pmql0gICBjICAgmKSroKGc5aOcpKYgICAgIOwgICAgIGMgICBbmKign6Pmql0gICCYpKugoZzlo5ykpgorCisgIDIuIJKYIJikq6ChnOWjnKSYIJzlpJigIKfhoqAgq5gg5ZugmCwg5qfgqiB3ICii4qWeKSwgJCAoq+KipqogmqiYo6PjqiksIKGroi4KKworICAzLiCLnKuYoaCknp+c5aucIKmrnqQgp6jpq54gmqiYo6PjIKeYqJih4avgIKmeo5yg4KPipJ4go5wgLS0tPi4KKworICA0LiCLnKuYoaCknOWpq5wgq6akIJuopqPimCCpq6Ygp6jpq6YgouGfpqouCisKKyAgNS4ggqjhr6ucICBjJCAgmqCYIKSYIKHhpJyrnCCrpiCsp+aipqCnpiCrnqogmqiYo6PjqiDlm6CmIKOcIKueIJuc56ucqJ4KKyAgICAgoZigIKeYq+Opq5wgPEVTQz4uCisKKy0tLT4gVGhlIGVuZCBvZiB0aGlzIGxpbmUgbmVlZHMgc29tZSBoZWxwIHRvIG1ha2UgaXQgbGlrZSB0aGUgc2Vjb25kLgorLS0tPiBUaGUgZW5kIG9mIHRoaXMgbGluZSBuZWVkcyB0byBiZSBjb3JyZWN0ZWQgdXNpbmcgdGhlICBjJCAgY29tbWFuZC4KKworCit+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+fn5+CisJCQkgICAgICAgi4CHhouAIDMgj4SQiIqGloYKKworCisgIDEuIIKgmCCkmCCrpqemn5yr46mcq5wgoZzlo5ykpiCnpqwgo+aioKog4q6coCCboJiaqJitnOUsIKeYq+Opq5wgIHAgLgorICAgICCArKvmIKump6afnKuc5SCrpiCboJiaqJijo+KkpiChnOWjnKSmIIuEkoAgq6akIJuopqPimCAomKQgm6CYmqjhraueoZwKKyAgICAgmqiYo6PjIJ+YIKfhnKAgo5yr4SCpq54gmqiYo6PjIKHhq+AgmKfmIKumpCCbqKaj4pguCisKKyAgMi4ggqCYIKSYIJikq6ChmKuYqavjqZyrnCCrpqQgrpiomKGr46iYIKHhq+AgmKfmIKumpCCbqKaj4pgsIKeYq+Opq5wgIHIKKyAgICAgoZigIKOcq+Egq6akIK6YqJihq+OomCCnpqwgn5ggmKSroKGYq5ipq+OpnKAgq6akIJiorqCh5i4KKworICAzLiCGIJykq6ai4yCYoqKYmuOqIKmYqiCcp6CrqOKnnKAgpJggmKKi4aWcq5wgq6YgoZifpqigqaPipKYgmKSroKGc5aOcpKYKKyAgICAgmKfmIKumpCCbqKaj4pggo+KuqKAgq6Ygq+Kipqogq6asIJikq6ChnOWjnKSmLiCPLq4uIJqo4a+rnCAgY3cgIJqgmCCkmAorICAgICCYoqLhpZyrnCCYp+Ygq6akIJuopqPimCCj4q6ooCCrpiCr4qKmqiCrnqogouKlnqosIGMkIJqgmCCkmCCYoqLhpZyrnAorICAgICCj4q6ooCCrpiCr4qKmqiCaqJijo+OqLgorCisgIDQuIIYgo6aoreMgmqCYIKuepCCYoqKYmuMgnOWkmKA6CisKKwkgW5iooJ+j5qpdICAgYyAgIJikq6ChnOWjnKSmICAgICDsICAgICBjICAgW5iooJ+j5qpdICAgmKSroKGc5aOcpKYKKworkumomCCprKScruWpq5wgo5wgq6YgnKfmo5ykpiCj4Z+eo5guCisKKworfn5+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+fgorCQkgICAgIIvhn56jmCA0LjE6IIeEkYYgiYCIIImAkoCRkoCRhiCAkJWEiI6TCisKKworICoqII+Yq+Opq5wgQ1RSTC1nIJqgmCCkmCCco62YpKCpq5zlIJ4gn+KpniCpmKogqaumIJiorpzlpiChmKAgniChmKvhqauYqeMgq6asLgorICAgII+Yq+Opq5wgU0hJRlQtRyCaoJggpJggp+GrnCCpnCCj5ZggmqiYo6PjIKmrpiCYqK6c5aYuICoqCisKKyAgkZ6jnOXgqZ46IIOgmJnhqaucIKai5qGinqimIKumIKPhn56jmCCnqKCkIJyhq5yi4qmcq5wgoeGnpqCmIJin5iCrmCCZ46OYq5ghIQorCisgIDEuIImomKvjqaucIKeYq56j4qSmIKumIKei46GrqKYgQ3RybCChmKAgp5ir46mrnCAgZyAuIIvlmCCaqJijo+MgoZir4amrmKmeqgorICAgICCfmCCco62YpKCpq5zlIKmrpiCh4avgIKPiqKaqIKueqiCpnKLlm5iqIKOcIKumIOakpqOYIJiorpzlpqwgoZigIKueCisgICAgIJqomKOj4yCnpqwgnOWpq5wuIIeso56fnOWrnCCrpqQgmKign6PmIJqomKOj46ogmqCYIKumIIHjo5ggMy4KKworICAyLiCPmKvjqaucIHNoaWZ0LUcgmqCYIKSYIKOcq5ihoKSen5zlq5wgqaumIKvioqaqIKumrCCYqK6c5aasLgorCisgIDMuII+Yq+Opq5wgq6akIJiooJ+j5iCrnqogmqiYo6PjqiCnpqwg46mYqauYpCChmKAgo5yr4SBzaGlmdC1HLiCArKvmIJ+YCisgICAgIKmYqiCcp6Cpq6jir5ygIKmrniCaqJijo+Mgp6asIOOpmKmrmKQgp6igpCCnmKvjqZyrnCCaoJggp6jpq54graao4SBDdHJsLWcuCisgICAgICjuq5ikIKeinqGrqKaippqc5aucIKumrKogmKign6Om56osIIOEjCCfmCCco62YpOWdpqSrmKAgqauepCCmn+aknikuCisKKyAgNC4ggKQgpKag6Z+cq5wgqeWapqyopqogmqCYIJisq+YsIJyhq5yi4qmrnCCrmCCZ46OYq5ggMSDi4KogMy4KKworCisKK35+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+fn4KKwkJCYvhn56jmCA0LjI6IIYghIySjoqGIICMgIWGkoaRhpEKKworCisJICAqKiCPmKvjqaucICAgLyAgIJihpqKmrJ+m56OcpKYgmKfmIKueIK2o4ameIKemrCCv4a6knKucLiAqKgorCisgIDEuIJGcIImYpKakoKHjIImYq+Gpq5ipniCnmKvjqaucIKumpCCumKiYoavjqJggIC8gLiCPmKiYq56o46mrnCDmq6AgmKyr5qogoZigCisgICAgIKYgm6imo+KYqiCco62YpOWdpqSrmKAgqaumIKHhq+Ago+Kopqogq56qIKaf5qSeqiDmp+CqIKOcIKuepCCcpKumouMgIDogLgorCisgIDIuIJLpqJggmqjhr6ucICdlcnJyb29yJyA8RU5URVI+LiCArKvjIJzlpJigIJ4gouKlniCnpqwgn+KinKucIKSYIK/hpZyrnC4KKworICAzLiCCoJggpJggr+GlnKucIKWYpOEgmqCYIKuepCDlm6CYIK2o4ameLCCnmKvjqaucIJinoumqICBuIC4KKyAgICAggqCYIKSYIK/hpZyrnCCrnqQg5ZugmCCtqOGpniCpq56kIJikq+WfnKueIKGYq5znn6ykqZ4sIKeYq+Opq5wgIFNoaWZ0LU4gLgorCisgIDQuIICkIJ/iopyrnCCkmCCv4aWcq5wgmqCYIKPlmCCtqOGpniCnqKaqIKuYIKflqeAsIK6onqmgo6anpqDjqaucIKuepCCcpKumouMgID8gIJikq+Ugq56qICAvIC4KKworLS0tPiDuq5ikIJ4gmKSYneOrnqmeIK2r4amcoCCpq6Ygq+Kipqogq6asIJiorpzlpqwgn5ggqayknK7lqZygIJin5iCrnqQgmKiu4y4KKworICAiZXJycm9vciIgaXMgbm90IHRoZSB3YXkgdG8gc3BlbGwgZXJyb3I7ICBlcnJyb29yIGlzIGFuIGVycm9yLgorCisKKworfn5+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+fgorCQkgICCL4Z+eo5ggNC4zOiCEk5CEkYYgkoCIkIiAkZKXjCCPgJCEjIeEkYSXjAorCisKKwkgICoqII+Yq+Opq5wgICAlICAgmqCYIKSYIJmonOWrnCCrnqQgmKSr5amrpqCuniApLCBdLCDjIH0gLiAqKgorCisgIDEuIJKmp6afnKvjqaucIKumpCCbqKaj4pggqZwgoeGnpqCYICgsIFssIOMgeyCpq56kIKeYqJih4avgIJqomKOj4worICAgICCpnqOcoOCj4qSeIKOcIC0tLT4uCisKKyAgMi4gkumomCCnmKvjqaucIKumpCCumKiYoavjqJggICUgLgorCisgIDMuII4gm6imo+KYqiCfmCCnqOKnnKAgpJggnOWkmKAgqauepCCYpKvlqaumoK6eIKeYqOKkn5ypniDjIJiaoeeini4KKworICA0LiCPmKvjqaucICAlICCaoJggpJggo5yrmKGgpOOpnKucIKumpCCbqKaj4pggp+Wp4CCpq56kIKeo6aueIJiaoeeingorICAgICirpqwgnZysmpiooKbnKS4KKworLS0tPiBUaGlzICggaXMgYSB0ZXN0IGxpbmUgd2l0aCAoJ3MsIFsncyBdIGFuZCB7J3MgfSBpbiBpdC4gKSkKKworkYaLhIiXkYY6IICsq+YgnOWkmKAgp6ai5yCuqOOpoKOmIKmrnqQgmKemqa2YoqPhq+CpniCcpOaqIKeoppqo4aOjmKumqgorCSAgo5wgo54gq5igqKCYqaviqiCnmKicpJ/iqZygqiEKKworCisKK35+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+fn4KKwkJICAgIIvhn56jmCA0LjQ6IISMgJEgkpCOj46RIIKIgCCAioqAgoYgioCHl4wKKworCisgICAgICAgKioggqjhr6ucICA6cy9vbGQvbmV3L2cgIJqgmCCkmCCYoqLhpZyrnCCrpiAnbmV3JyCjnCCrpiAnb2xkJy4gKioKKworICAxLiCLnKuYoaCknOWpq5wgq6akIJuopqPimCCpq56kIKeYqJih4avgIJqomKOj4yCpnqOcoOCj4qSeIKOcIC0tLT4uCisKKyAgMi4ggqjhr6ucICA6cy90aGVlL3RoZSA8RU5URVI+IC4gkZ6jnKDpqaucIOaroCCYrKvjIJ4gnKSrpqLjIJiiouGdnKAgo+akpgorICAgICCrnqQgp6jpq54gnKOt4aSgqZ4gqaueIJqomKOj4y4KKworICAzLiCS6aiYIJqo4a+rnCAgIDpzL3RoZWUvdGhlL2cgICAgnKSkpumkq5iqIJqcpKCh4yCYpKugoZir4amrmKmeIKmrngorICAgICCaqJijo+MuIICsq+YgmKKi4Z2coCDmopyqIKugqiCco62YpOWpnKCqIJyn5SCrnqogmqiYo6Pjqi4KKworLS0tPiB0aGVlIGJlc3QgdGltZSB0byBzZWUgdGhlZSBmbG93ZXJzIGlzIGluIHRoZWUgc3ByaW5nLgorCisgIDQuIIKgmCCkmCCYoqLhpZyrnCCh4Z+cIJyjreGkoKmeIKPlmKogqayjmaaipqmcoKjhqiCjnKuYpecgm+emIJqomKOj6aQsCisgICAgIJqo4a+rnCAgIDojLCNzL29sZC9uZXcvZyAgIOanpqwgIywjIKagIJiooJ+jpuUgq+CkIJvnpiCaqJijo+mkLgorICAgICCCqOGvq5wgICA6JXMvb2xkL25ldy9nICAgICCaoJggpJggmKKi4aWcq5wgoeGfnCCco63hpKCpniCpnCDmoqYgq6YgmKiunOWmLgorCisKKworCit+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+fn5+CisJCQkgICAgICAgi4CHhouAIDQgj4SQiIqGloYKKworCisgIDEuIJKmICBDdHJsLWcgIJyjrZik5Z2coCCrniCf4qmeIKmYqiCpq6YgmKiunOWmIKGYoCCrnqQgoZir4amrmKnjIKumrC4KKyAgICAgkqYgIFNoaWZ0LUcgIKeempjlpJygIKmrpiCr4qKmqiCrpqwgmKiunOWmrC4g66SYqiCYqKCfo+aqIJqomKOj46oKKyAgICAgmKGmoqasn6bno5ykpqogmKfmICBTaGlmdC1HICCnnpqY5aScoCCpnCCcoZzlpJ4gq54gmqiYo6PjLgorCisgIDIuIIKo4a2mpKuYqiAgLyAgmKGmoqasn6bno5ykpiCYp+Ygo+WYIK2o4ameIK/hrqScoCCnqKaqIKuYIIuPkI6RkoAgmqCYCisgICAgIKueIK2o4ameLiCCqOGtpqSrmKogID8gIJihpqKmrJ+m56OcpKYgmKfmIKPlmCCtqOGpniCv4a6knKAgp6imqiCrmCCPiJGXCisgICAgIJqgmCCrniCtqOGpni4gi5yr4SCYp+Ygo+WYIJikmJ3jq56pniCnmKvjqaucICBuICCaoJggpJggmaic5aucIKuepAorICAgICCcp+ajnKSeIJyjreGkoKmeIKeopqogq56kIOWboJggoZirnOefrKSpniDjICBTaGlmdC1OICCaoJggpJggr+GlnKucCisgICAgIKeopqogq56kIJikq+WfnKueIKGYq5znn6ykqZ4uCisKKyAgMy4gj5ir6aSrmKogICUgIOappiCmIJuopqPimKognOWkmKAgp+Gk4CCpnCCj5ZggKCwpLFssXSx7LCDjIH0gIJykq6an5Z2coAorICAgICCrpiCYpKvlqaumoK6mIKuY5aigIKumrCCdnKyamKigpucuCisKKyAgNC4ggqCYIJikq6ChmKvhqauYqZ4go5wgbmV3IKumrCCnqOmrpqwgb2xkIKmrniCaqJijo+Mgmqjhr6ucICA6cy9vbGQvbmV3CisgICAgIIKgmCCYpKugoZir4amrmKmeIKOcIG5ldyDmouCkIKvgpCAnb2xkJyCpq54gmqiYo6PjIJqo4a+rnCAgOnMvb2xkL25ldy9nCisgICAgIIKgmCCYpKugoZir4amrmKmeIK2o4amc4KQgo5yrmKXnIJvnpiAjIJqomKOj6aQgmqjhr6ucICAgICAgOiMsI3Mvb2xkL25ldy9nCisgICAgIIKgmCCYpKugoZir4amrmKmeIOai4KQgq+CkIJyjrZik5amc4KQgqaumIJiorpzlpiCaqOGvq5wgICAgOiVzL29sZC9uZXcvZworICAgICCCoJggnKjpq56pniCcp6CZnJmY5eCpnqogoeGfnCCtpqjhIKeopqmf4qmrnCDipJggJ2MnICAgICAgICIlcy9vbGQvbmV3L2djCisKK35+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+fn4KKwkJICCL4Z+eo5ggNS4xOiCPl5EghImShIqXIIuIgCCEjZeShJCIiYYghIySjoqGCisKKworKioggqjhr6ucICA6ISAgmKGmoqasn6bno5ykpiCYp+Ygo+WYIJyl4KucqKCh4yCcpKumouMgmqCYIKSYIKuepCCcoaucouKpnKucLiAqKgorCisgIDEuII+Yq+Opq5wgq56kIKagoZzlmCCcpKumouMgIDogIJqgmCCkmCCf4qmcq5wgq6akIJuopqPimCCpq6YgoeGr4CCj4qimqgorICAgICCrnqogpp/mpJ6qLiCArKvmIKmYqiCcp6CrqOKnnKAgpJggm+mpnKucIKPlmCCcpKumouMuCisKKyAgMi4gkumomCCnmKvjqaucICCrpiAgISAgKJ+YrKOYqaugoeYpLiCArKvmIKmYqiCcp6CrqOKnnKAgpJggnKGrnKLiqZyrnAorICAgICCmp6agmJvjp6arnCCcpeCrnKigoeMgnKSrpqLjIKumrCCtoqagpucuCisKKyAgMy4gkZikIKeYqOGbnKCao5ggmqjhr6ucICBscyAgo5yr4SCYp+Ygq6YgISChmKAgp5ir46mrnCA8RU5URVI+LiCArKvmIJ+YCisgICAgIKmYqiCco62YpOWpnKAgo+WYIKLlqauYIKumrCChmKuYouaapqwgqZiqLCCYoaigmemqIKmYpCCkmCDjqZipq5ikIKmrnqQKKyAgICAgp6imq6imp+Mgq6asIK2ipqCm5y4g7CCuqJ6poKOmp6ag46mrnCAgOiFkaXIgIJikIKumIGxzIJucpCCbpqyinOecoC4KKworLS0tPiCRnqOc5eCpnjoghOWkmKAgm6ykmKvmpCCkmCCcoaucouKpnKucIKanpqCYm+OnpqucIJyl4KucqKCh4yCcpKumouMKKyAgICAgo5wgmKyr5qQgq6akIKuo5qemLgorCistLS0+IJGeo5zl4KmeOiDuopyqIKagIJykq6ai4qogIDogIKeo4qecoCCkmCCrnKijmKvlnaakq5igIKeYq+mkq5iqIKumIDxFTlRFUj4uCisKKworCit+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+fn5+CisJCSCL4Z+eo5ggNS4yOiCPhJCIkZGOkoSQgCCPhJCIIISCgpCAlIaRIICQlYSIl4wKKworCisgICAqKiCCoJggpJggqempnKucIKugqiCYoqLhmpyqIKemrCCh4aSYq5wgqaumIJiorpzlpiwgmqjhr6ucICA6dyCAkJWEiI4uICAqKgorCisgIDEuIIKo4a+rnCAgOiFkaXIgIOMgIDohbHMgIJqgmCCkmCCn4aicq5wgo+WYIKLlqauYIKumrCChmKuYouaapqwgqZiqLgorICAgICDsm54gpeKonKucIOaroCCnqOKnnKAgpJggp5ir46mcq5wgPEVOVEVSPiCjnKvhIJin5iCYrKvmLgorCisgIDIuIIOgmKLipaucIOKkmCDmpKajmCCYqK6c5aasIKemrCCbnKQgrKfhqK6coCCYoeajmCwg5qfgqiCrpiBURVNULgorCisgIDMuIJLpqJggmqjhr6ucOiAgOncgVEVTVCAgKOanpqwgVEVTVCCc5aSYoCCrpiDmpKajmCCYqK6c5aasIKemrCCboJii4qWYq5wpLgorCisgIDQuIICsq+YgqemdnKAg5qKmIKumIJiorpzlpiAodmltIFR1dG9yKSCjnCCrpiDmpKajmCBURVNULiCCoJggpJggq6YKKyAgICAgnKeYop6fnOepnKucLCCaqOGvq5wgpZik4SAgOiFkaXIgmqCYIKSYIJuc5aucIKumpCChmKvhoqaa5iCpmKouCisKKy0tLT4gkZ6jnKDpqaucIOaroCCYpCCZmpjlpJirnCCYp+Ygq6akIFZpbSChmKAgo6eY5aSYq5wgpZik4SCjnCCrpiDmpKajmAorICAgICCYqK6c5aasIFRFU1QsIKumIJiorpzlpiCfmCDjq5ikIJihqKCZ4qogmKSr5ZqomK2mIKumrCB0dXRvciDmq5ikIKumIKnpqZirnC4KKworICA1LiCS6aiYIJugmJqo4a+rnCCrpiCYqK6c5aYgmqjhraakq5iqIChNUy1ET1MpOiAgICAgIDohZGVsIFRFU1QKKworCisKK35+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+fn4KKwkJICAgICCL4Z+eo5ggNS4zOiCEj4iKhImSiImGIISMko6KhiCEgoKQgJSGkQorCisKKwkgICoqIIKgmCCkmCCp6amcq5wgq6Pjo5ggq6asIJiorpzlpqwsIJqo4a+rnCAgOiMsIyB3IICQlYSIjiAqKgorCisgIDEuIOqiop4go6CYIK2mqOEsIJqo4a+rnCAgOiFkaXIgIOMgIDohbHMgIJqgmCCkmCCn4aicq5wgo+WYIKLlqauYIJin5iCrpqQKKyAgICAgoZir4aKmmuYgqZiqIKGYoCCboJii4qWrnCDipJggoZir4aKinqKmIOakpqOYIJiorpzlpqwg5qfgqiCrpiBURVNULgorCisgIDIuIIucq5ihoKSc5amrnCCrpqQgm6imo+KYIKmrpiCn4aTgIKPiqKaqIJisq+OqIKueqiCpnKLlm5iqIKGYoCCnmKvjqaucCisgICAgIEN0cmwtZyAgmqCYIKSYIJmonOWrnCCrpqQgmKign6PmIJisq+OqIKueqiCaqJijo+OqLgorICAgICCMgCCHk4uAkZKEIICTko6MIJKOjCCAkIiHi44hCisKKyAgMy4gkumomCCnnpqY5aScq5wgqaumIKHhq+Ago+Kopqogq56qIKmcouWbmKogoZigIKeYq+Opq5wgIEN0cmwtZyAgpZik4S4KKyAgICAgjIAgh5OLgJGShCCJgIgggJOSjowgko6MIICQiIeLjiEKKworICA0LiCCoJggpJggqempnKucIIuOjI4g4qSYIKuj46OYIKmcIJiorpzlpiwgmqjhr6ucICAgOiMsIyB3IFRFU1QKKyAgICAg5qemrCAjLCMgpqAgm+emIJiooJ+jpuUgp6asIJinpqOknqOmpJznqZirnCAop+Gk4Cyh4avgKSChmKAgVEVTVCCrpgorICAgICDmpKajmCCrpqwgmKiunOWmrCCpmKouCisKKyAgNS4gjZik4Swgm5zlq5wg5qugIKumIJiorpzlpiCc5aSYoCCcoZzlIKOcIKuepCAgOiFkaXIgmKKi4SCLhowgq6Ygm6CYmqjhr5yrnC4KKworCit+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+fn5+CisJCSAgi+GfnqOYIDUuNDoggIyAiZKXjJKAkSCJgIgghIyXjI6MkoCRIICQlYSIgAorCisKKyAgICAgKioggqCYIKSYIJygqeGanKucIKuYIKecqKCcruajnKSYIJyk5qogmKiunOWmrCwgmqjhr6ucICAgOnIggJCVhIiOICoqCisKKyAgMS4ggqjhr6ucICA6IWRpciAgmqCYIKSYIJmcmZig4J+c5aucIOaroCCrpiBURVNUIKyn4aiunKAgmKfmIKeooKQuCisKKyAgMi4gkqanpp+cq+Opq5wgq6akIJuopqPimCCpq6Ygp+Gk4CCj4qimqiCrnqogqZyi5ZuYqi4KKworkYaLhIiXkYY6ICCArearpqwgnKGrnKLiqZyrnCCrpiCB46OYIDMgn5ggm5zlq5wgq6Ygi+GfnqOYIDUuMy4KKwkgICCLnKvhIKGgpJ6fnOWrnCCJgJKXIKWYpOEgp6imqiCrpiCj4Z+eo5ggmKyr5i4KKworICAzLiCS6aiYIJikmKGr46mrnCCrpiCYqK6c5aYgqZiqIFRFU1QgrqieqaCjpqemoOmkq5iqIKuepCCcpKumouMgIDpyIFRFU1QKKyAgICAg5qemrCBURVNUIJzlpJigIKumIOakpqOYIKumrCCYqK6c5aasLgorCiuRhouEiJeRhjogIJKmIJiorpzlpiCnpqwgmKSYoavhq5wgq6anpp+cq5zlq5igIKWcoaCk6aSrmKognKGc5SCnpqwgmajlqaGcq5igCisJICAgpiCbqKaj4piqLgorCisgIDQuIIKgmCCkmCCcp5iinp+c56mcq5wg5qugIKumIJiorpzlpiCYpJihq+OfnqGcLCCn5angIKumpCCbqKaj4pggoZigCisgICAgIKeYqJirnqjjqaucIOaroCCsp+GorqaspCCr6aiYIJvnpiCYpKvlmqiYrZggq6asIIuYn+OjmKumqiA1LjMsIKumCisgICAgIJiorqCh5iChmKAgniDioZumqZ4gq6asIJiorpzlpqwuCisKK35+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+fn4KKwkJCSAgICAgICCLgIeGi4AgNSCPhJCIioaWhgorCisKKyAgMS4gIDohnKSrpqLjICCcoaucopzlIKPlmCCcpeCrnKigoeMgnKSrpqLjLgorCisgICAgICCLnKigoeEgrqjjqaCjmCCnmKiYm5zlmqOYq5ggnOWkmKAgKE1TLURPUyk6CisgICAgICA6IWRpcgkgICAgICAgLSCco63hpKCpniCi5amrmKognKTmqiChmKuYouaapqwuCisgICAgICA6IWRlbCCAkJWEiI4gICAgIC0gm6CYmqjhrZygIKumIICQlYSIji4KKworICAyLiAgOncggJCVhIiOICAgmqjhrZygIKumIKuo4q7gpCCYqK6c5aYgq6asIFZpbSCpq6Ygm+WpoaYgo5wg5qSmo5gggJCVhIiOLgorCisgIDMuICA6IywjdyCAkJWEiI4gICCp6Z2coCCroKogmqiYo6PiqiCYp+YgIyCj4q6ooCAjIKmrpiCAkJWEiI4uCisKKyAgNC4gIDpyIICQlYSIjiAgmKSYoauc5SCrpiCYqK6c5aYgm+WpoaasIICQlYSIjiChmKAgq6Ygp5ionKOZ4aKinKAgo+KpmAorICAgICAgqaumIKuo4q6mpCCYqK6c5aYgo5yr4SCYp+Ygq54gn+KpniCrpqwgm6imo+KYLgorCisKKworCisKKworCit+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+fn5+CisJCQmL4Z+eo5ggNi4xOiCGIISMko6KhiCAjI6IgouAko6RCisKKworICAgICAgKiogj5ir46mrnCAgbyAgmqCYIKSYIJikpuWlnKucIKPlmCCaqJijo+MgoeGr4CCYp+Ygq6akIJuopqPimCChmKAgpJgKKwkgmaicn5zlq5wgqZwgiZir4amrmKmeIImcoKPipKasLiAqKgorCisgIDEuIIucq5ihoKSc5amrnCCrpqQgm6imo+KYIKmrnqQgp5iomKHhq+AgmqiYo6PjIKmeo5yg4KPipJ4go5wgLS0tPi4KKworICAyLiCPmKvjqaucICBvICinnJ3mKSCaoJggpJggmKSm5aWcq5wgo+WYIJqomKOj4yCJgJKXIJin5iCrpqQgm6imo+KYIKGYoCCkmAorICAgICCZqJyfnOWrnCCpnCCJmKvhqauYqZ4giZygo+KkpqwuCisKKyAgMy4gkumomCCYpKugmqjhr6ucIKueIKmeo5yg4KPipJ4go5wgLS0tPiCaqJijo+MgIKGYoCCnmKvjqaucIDxFU0M+IJqgmCCkmAorICAgICCZmpzlq5wgmKfmIKuepCCJmKvhqauYqZ4giZygo+KkpqwuCisKKy0tLT4gQWZ0ZXIgdHlwaW5nICBvICB0aGUgY3Vyc29yIGlzIHBsYWNlZCBvbiB0aGUgb3BlbiBsaW5lIGluIEluc2VydCBtb2RlLgorCisgIDQuIIKgmCCkmCCYpKblpZyrnCCj5ZggmqiYo6PjII+AjJcgmKfmIKumpCCbqKaj4pgsIKeYq+Opq5wgmKei4SDipJggoZytmKKY5aYKKyAgICAgTywgmKSr5SCaoJgg4qSYIKecneYgIG8uICCDpqGgo+Gpq5wgq6YgqauepCCnmKiYoeGr4CCaqJijo+MuCiuApKblmpyrnCCaqJijo+Mgp+Gk4CCYp+YgmKyr46Qgp5ir6aSrmKogU2hpZnQtTyDmqaYgpiCbqKaj4piqIJzlpJigIKmrniCaqJijo+MKKworCisKK35+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+fn4KKwkJCSCL4Z+eo5ggNi4yOiCGIISMko6KhiCPkI6Rh4aJhpEKKworCSAgKiogj5ir46mrnCAgIGEgICCaoJggpJggnKCp4Zqcq5wgoZzlo5ykpiCLhJLqIKumpCCbqKaj4pguICoqCisKKyAgMS4gi5yrmKGgpJzlqaucIKumpCCbqKaj4pggqaumIKvioqaqIKueqiCnqOmrnqogmqiYo6PjqiCnmKiYoeGr4AorICAgICCpnqOcoOCj4qSeIKOcIC0tLT4gp5ir6aSrmKogICQgIKmrnqQgiZikpqSgoeMgiZir4amrmKmeLgorCisgIDIuII+Yq+Opq5wg4qSYICBhICAop5yd5ikgmqCYIKSYIKeopqmf4qmcq5wgoZzlo5ykpiCLhJKAIJin5iCrpqQgrpiomKGr46iYCisgICAgIKemrCCc5aSYoCCh4avgIJin5iCrpqQgm6imo+KYLiAgKJKmIKGcrZiimOWmICBBICCnqKapn+KrnKAgqaumIKvioqaqCisgICAgIKueqiCaqJijo+OqKS4KKworkZ6jnOXgqZ46IICsq+YgmKemrZznmpygIKumIKfhq56jmCCrpqwgIGkgLCCrpqQgq5yinKyrmOWmIK6YqJihq+OomCwgq6YKKwkgIKGc5aOcpKYgq56qIJygqZia4JrjqiwgPEVTQz4sIJuopqPimC2bnKWg4SwgoZigIKvioqaqLCB4LCCj5qSmIKGYoAorCSAgo+akpiCaoJggpJggp6imqZ/iqZyrnCCpq6Ygq+Kipqogq56qIJqomKOj46ohCisKKyAgMy4gkayjp6KeqOmpq5wgq+momCCrnqQgp6jpq54gmqiYo6PjLiCRnqOcoOmpq5wgnKflqZ6qIOaroCCeIKeopqmf46GeIJzlpJigCisgICAgIJihqKCZ6aog5ZugmCCpq56kIImYq+Gpq5ipniCJnKCj4qSmrCCjnCCrnqQgiZir4amrmKmeIISgqZia4JrjqiwgnKGr5qoKKwkgIJin5iCrniCf4qmeIKemrCCcoKnhmpyrmKAgq6YgoZzlo5ykpi4KKworLS0tPiBUaGlzIGxpbmUgd2lsbCBhbGxvdyB5b3UgdG8gcHJhY3RpY2UKKy0tLT4gVGhpcyBsaW5lIHdpbGwgYWxsb3cgeW91IHRvIHByYWN0aWNlIGFwcGVuZGluZyB0ZXh0IHRvIHRoZSBlbmQgb2YgYSBsaW5lLgorCit+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+fn5+CisJCSAgIIvhn56jmCA2LjM6IICKioYghImDjpGGIJKGkSCAjJKIiYCSgJGSgJGGkQorCisKKyAqKiCPmKvjqaucIKGcrZiimOWmICBSICCaoJggpJggmKKi4aWcq5wgp5yooKmp5qucqKasqiCYp+Yg4qSYpCCumKiYoavjqJyqLiAqKgorCisgIDEuIIucq5ihoKSc5amrnCCrpqQgm6imo+KYIKmrnqQgp6jpq54gmqiYo6PjIKeYqJih4avgIKmeo5yg4KPipJ4go5wgLS0tPi4KKworICAyLiCSpqemn5yr46mrnCCrpqQgm6imo+KYIKmrnqQgmKiu4yCrnqogp6jpq56qIKLipZ6qIKemrCCc5aSYoCCboJitpqicq6Ch4worICAgICCYp+Ygq54gm5znq5yoniCaqJijo+MgqZ6jnKDgo+KkniCjnCAtLS0+ICieIKLipZ4gJ2xhc3QnKS4KKworICAzLiCPmKvjqaucIKvpqJggIFIgICChmKAgmKKi4aWrnCCrpiCsp+aipqCnpiCrpqwgoZygo+KkpqwgqauepCCnqOmrniCaqJijo+MKKyAgICAgmqjhraakq5iqIKfhpOAgmKfmIKumIKeYoqDmIKGc5aOcpKYg6amrnCCkmCCh4aScq5wgq56kIKeo6aueIJqomKOj4yDlm6CYCisgICAgIKOcIKueIJuc56ucqJ4uCisKKy0tLT4gVG8gbWFrZSB0aGUgZmlyc3QgbGluZSB0aGUgc2FtZSBhcyB0aGUgbGFzdCBvbiB0aGlzIHBhZ2UgdXNlIHRoZSBrZXlzLgorLS0tPiBUbyBtYWtlIHRoZSBmaXJzdCBsaW5lIHRoZSBzYW1lIGFzIHRoZSBzZWNvbmQsIHR5cGUgUiBhbmQgdGhlIG5ldyB0ZXh0LgorCisgIDQuIJGeo5yg6amrnCDmq6Ag5quYpCCnmKvhq5wgPEVTQz4gmqCYIKSYIJmanOWrnCwgp5iomKPipJygIKanpqCmm+OnpqucCisgICAgIJikmKKipuXgq6YgoZzlo5ykpi4KKworCisKK35+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+fn4KKwkJCSAgi+GfnqOYIDYuNDogkJOHi4iRhiCEj4iKjoKGkQorCisKKyAgICoqIJCsn6PlqaucIKPlmCCcp6CipprjIOKrqaAg6amrnCCeIJikmJ3jq56pniDjIJ4gmKSroKGYq+Gpq5ipniCkmCCYmqSmnOUKKyAgICAgIKueIJugmK2mqOEgp5yd6aQtoZytmKKY5eCkICoqCisKKyAgMS4gluGlq5wgmqCYICdpZ25vcmUnIJygqeGapqSrmKo6CisgICAgIC9pZ25vcmUKKyAgICAgkayknK7lqaucIJiooZyr4qograao4qogp5ir6aSrmKogq6Ygp6LjoauopiBuLgorCisgIDIuIIfiqaucIKuepCCcp6CipprjICdpYycgKElnbm9yZSBjYXNlKSCaqOGtpqSrmKo6CisgICAgIDpzZXQgaWMKKworICAzLiCW4aWrnCCr6aiYIKWYpOEgmqCYICdpZ25vcmUnIKeYq+mkq5iqOiBuCisgICAgIJGspJyu5amrnCCrnqQgmKSYneOrnqmeIKOcqKCh4qogmKHmo5ggraao4qogp5ir6aSrmKogq6Ygp6LjoauopiBuCisKKyAgNC4gh+Kpq5wgq6CqIJynoKKmmuKqICdobHNlYXJjaCcgoZigICdpbmNzZWFyY2gnOgorICAgICA6c2V0IGhscyBpcworCisgIDUuIISgqeGanKucIKvpqJggpZik4SCrnqQgnKSrpqLjIJikmJ3jq56pnqosIKGYoCCbnOWrnCCroCCprKOZmOWknKAKKyAgICAgL2lnbm9yZQorCit+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+fn5+CisJCQkgICAgICAgi4CHhouAIDYgj4SQiIqGloYKKworCisgIDEuII+Yq+mkq5iqICBvICCYpKblmpygIKPlmCCaqJijo+MgiYCSlyCYp+Ygq6akIJuopqPimCChmKAgq6anpp+cq5zlIKumpAorICAgICCbqKaj4pggqauepCCYpKagrqvjIJqomKOj4yCpnCCJmKvhqauYqZ4giZygo+KkpqwuCisKKyAgMi4gj5ir46mrnCAgYSAgmqCYIKSYIJygqeGanKucIKGc5aOcpKYgi4SSgCCrpqQgrpiomKGr46iYIKmrpqQgpqem5aYgnOWkmKAKKyAgICAgpiCbqKaj4piqLiCPmKvppKuYqiChnK2YopjlpiAgQSAgmKyr5qOYq5ggp6imqZ/iq5ygIKGc5aOcpKYgqaumIKvioqaqCisgICAgIKueqiCaqJijo+OqLgorCisgIDMuII+Yq+mkq5iqIKGcrZiimOWmICBSICCcoKniqK6cq5igIKmrnqQgiZir4amrmJ4ggKSroKGYq+Gpq5ipnqogo+KuqKAgpJgKKyAgICAgp5irnp+c5SCrpiA8RVNDPiChmKAgpJggnKXiop+coC4KKworICA0LiCCqOGtpqSrmKogIjpzZXQgeHh4IiCorJ+j5Z2coCCrnqQgnKegoqaa4yAieHh4Ii4KKworCisKKworCisKKworCit+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+fn5+CisJCSAgICAgICCLgIeGi4AgNzogT04tTElORSCEjJKOioSRIIGOhoeEiICRCisKKworCQkqKiCVqJ6poKOmp6ag46mrnCCrpiBvbi1saW5lIKnnqaueo5ggmabjn5ygmKogKioKKworICCOIFZpbSDirpygIOKkmCCnnKignKGroKHmIG9uLWxpbmUgqeepq56jmCCZpuOfnKCYqi4ggqCYIKSYIKWcoaCk46mcoCwKKyAgm6ahoKPhqaucIKHhp6agpiCYp+Ygq5ggq6jlmDoKKwktIKeYq+Opq5wgq6Ygp6LjoauopiA8SEVMUD4gKJikIOKunKucIKHhp6agpikKKwktIKeYq+Opq5wgq6Ygp6LjoauopiA8RjE+ICiYpCDirpyrnCCh4aemoKYpCisJLSCaqOGvq5wgICA6aGVscCA8RU5URVI+CisKKyAggqjhr6ucICA6cSA8RU5URVI+ICAgmqCYIKSYIKGinOWpnKucIKumIKeYqOGfrKimIKueqiCZpuOfnKCYqi4KKworICCLp6aonOWrnCCkmCCZqJzlq5wgmabjn5ygmCCn4aTgIKmcIKHhn5wgmKSroKGc5aOcpKYsIJvlpKakq5iqIKPlmCCnmKjho5yrqKYKKyAgqauepCCcpKumouMgIjpoZWxwIi4gIIOmoaCj4amrnCCYrKvhICijnqQgpZyupOGrnCCkmCCnmKvhq5wgPEVOVEVSPik6CisKKwk6aGVscCB3CisJOmhlbHAgY188VAorCTpoZWxwIGluc2VydC1pbmRleAorCTpoZWxwIHVzZXItbWFudWFsCisKKworfn5+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+fgorCQkgIIuAh4aLgCA4OiCDhouIjpOQgoaRkoQghIyAIFNDUklQVCCEiYmIjIaRhpEKKworCQkgICAqKiCEpJyomqanpqDjqaucIK6YqJihq56ooKmroKHhIKumrCBWaW0gKioKKworICCOIFZpbSDirpygIKemoqLhIKecqKCpqearnKiYIK6YqJihq56ooKmroKHhIJinJyDmLKugIKYgVmksIJiiouEgq5gKKyAgp5yooKmp5qucqJggnOWkmKAgmKiuoKHhIJinnKScqJqmp6agnqPipJguIIKgmCCkmCCYqK7lqZyrnCCkmCCuqJ6poKOmp6agnOWrnAorICCnnKigqanmq5yomCCumKiYoaueqKCpq6Ch4SCnqOKnnKAgpJggraug4aWcq5wg4qSYIJiorpzlpiAidmltcmMiLgorCisgIDEuIICoruWpq5wgm6CmqJ/ppKakq5iqIKumIJiorpzlpiAidmltcmMiLCCYrKvmIJylmKir4auYoCCYp+Ygq6Ygqeepq56j4SCpmKo6CisJOmVkaXQgfi8udmltcmMgICAgICAgICAgICAgICCaoJggVW5peAorCTplZGl0ICRWSU0vX3ZpbXJjICAgICAgICAgICAgmqCYIE1TLVdpbmRvd3MKKworICAyLiCS6aiYIJygqeGanKucIKumIKGc5aOcpKYgp5iomJuc5ZqjmKumqiCaoJggmKiunOWmICJ2aW1yYyI6CisJOnJlYWQgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0KKworICAzLiCCqOGvq5wgq6YgmKiunOWmIKOcIKuepDoKKwk6d3JpdGUKKworICCSnqQgnKfmo5ykniCtpqjhIKemrCCfmCClnKGgpOOpnKucIKumpCBWaW0gn5ggrqieqaCjpqemoOOpnKAgreCroKmj5gorICCp56SrmKWeqi4gIIunpqic5aucIKSYIKeopqmf4qmcq5wg5qKcqiCroKogp6imq6Cj6aOcpJyqIJynoKKmmuKqIKknIJisq+YKKyAgq6YgmKiunOWmICJ2aW1yYyIuCisKK35+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+fn4KKworICCEm+kgpqKmoaKeqOmknKuYoCCrpiBWaW0gVHV0b3IuIJGhpqfmqiCrpqwg46uYpCCkmCCb6amcoCCj5Zggqeekq6ajngorICCnnKjlop6vniCrpqwgqaykq+Ghq54gVmltLCCrpqyi4a6gqaumpCCr5qmeIOmpq5wgpJggqZiqIJynoKuo4q+coCCkmAorICCuqJ6poKOmp6ag46mcq5wgq6akIKmspKvhoaueIJiooZyr4SCc56GmopguIICn4q6coCCnpqLnIJin5iCj5ZgKKyAgpqKmoaKeqOCj4qSeIKeYqKasqeWYqZ4goZif6aogpiBWaW0g4q6coCCn4aiYIKemoqLiqiCcpKumouKqLiCDoJiZ4amrnAorICChmKvmp6CkIKumIJyarpygqOWboKYgrqjjqZ6qOgorCSI6aGVscCB1c2VyLW1hbnVhbCIuCisKKyAggqCYIKecqJigq+Ko4CCboOGZmKmjmCChmKAgo5yi4queLCCprKmr46Scq5igIJisq+Ygq6YgmaCZouWmOgorCVZpbSAtIFZpIEltcHJvdmVkIC0gYnkgU3RldmUgT3VhbGxpbmUKKwlQdWJsaXNoZXI6IE5ldyBSaWRlcnMKKwmSpiCnqOmrpiCZoJmi5aYgp6LjqOCqIJitoJyo4KPipKYgqaumpCBWaW0uCisJiJugmOWrnKiYIK6o46mgo6YgmqCYIJioruGooKasqi4KKwmTp+GorqaspCCnpqKi4SCnmKiYm5zlmqOYq5ggoZigIJygoeaknKouCisJg5zlq5wgq56kIGh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnL2NsaWNrNS5odG1sCisKKyAggKyr5iCrpiCZoJmi5aYgnOWkmKAgp5iioOarnKimIKGYoCCnnKigqanmq5yopiCaoJggq6akIFZpIKeYqOEgmqCYIKumpCBWaW0sCisgIJiiouEgnKflqZ6qIKmspKCpq+mjnKSmOgorCUxlYXJuaW5nIHRoZSBWaSBFZGl0b3IgLSBieSBMaW5kYSBMYW1iCisJUHVibGlzaGVyOiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMgSW5jLgorCYTlpJigIOKkmCChmKLmIJmgmaLlpiCaoJggpJggo+GfnKucIKmunJvmpCCrmCCn4aSrmCCnpqwgn+KinKucCisJpJggoeGknKucIKOcIKumpCBWaS4KKwmGIOKhq54g4qGbpqmeIKecqKDirpygIJih5qOYIKeinqimraao5ZyqIJqgmCCrpqQgVmltLgorCisgIICsq+MgniCnnKig45qeqZ4gmqjhraueoZwgmKfmIKumrKogTWljaGFlbCBDLiBQaWVyY2UgoZigIFJvYmVydCBLLiBXYXJlLAorICBDb2xvcmFkbyBTY2hvb2wgb2YgTWluZXMgrqieqaCjpqemoOmkq5iqIKCb4pyqIJin5iCrpqQgQ2hhcmxlcyBTbWl0aCwKKyAgQ29sb3JhZG8gU3RhdGUgVW5pdmVyc2l0eS4gIEUtbWFpbDogYndhcmVAbWluZXMuY29sb3JhZG8uZWR1LgorCisgII+opqmYqKOmmuMgmqCYIKumpCBWaW0gmKfmIKumpCBCcmFtIE1vb2xlbmFhci4KKworfn5+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+fgorCmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLmluZm8gYi9ydW50aW1lL3R1dG9yL3R1dG9yLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNjZjRiZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLml0IGIvcnVudGltZS90dXRvci90dXRvci5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2I3MGRlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci90dXRvci5pdApAQCAtMCwwICsxLDgwNSBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICBCZW52ZW51dG8gIGFsbGEgICBHIHUgaSBkIGEgICAgYWxsJ0VkaXRvciAgIFYgSSBNICAgLSAgICBWZXJzaW9uZSAxLjUgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgIFZpbSDoIHVuIEVkaXRvciBtb2x0byBwb3RlbnRlIGVkIGhhIHBhcmVjY2hpIGNvbWFuZGksIHRyb3BwaSBwZXIKKyAgICAgc3BpZWdhcmxpIHR1dHRpIGluIHVuYSBndWlkYSBjb21lIHF1ZXN0YS4gIFF1ZXN0YSBndWlkYSBzZXJ2ZSBhCisgICAgIGRlc2NyaXZlcmUgcXVlaSBjb21hbmRpIGNoZSB0aSBwZXJtZXR0b25vIGRpIHVzYXJlIGZhY2lsbWVudGUKKyAgICAgVmltIGNvbWUgRWRpdG9yIGRpIHVzbyBnZW5lcmFsZS4KKworICAgICBJbCB0ZW1wbyBuZWNlc3NhcmlvIHBlciBjb21wbGV0YXJlIGxhIGd1aWRhIOggY2lyY2EgMjUtMzAgbWludXRpLAorICAgICBhIHNlY29uZGEgZGkgcXVhbnRvIHRlbXBvIGRlZGljaGkgYWxsYSBzcGVyaW1lbnRhemlvbmUuCisKKyAgICAgSSBjb21hbmRpIG5lbGxlIGxlemlvbmkgbW9kaWZpY2FubyBxdWVzdG8gdGVzdG8uIEZhaSB1bmEgY29waWEgZGkgcXVlc3RvCisgICAgIGZpbGUgcGVyIGVzZXJjaXRhcnRpIChzZSBoYWkgdXNhdG8gInZpbXR1dG9yIiwgc3RhaSBnaeAgdXNhbmRvIHVuYSBjb3BpYSkuCisKKyAgICAgRScgaW1wb3J0YW50ZSBub24gc2NvcmRhcmUgY2hlIHF1ZXN0YSBndWlkYSB2dW9sZSBpbnNlZ25hcmUgdHJhbWl0ZQorICAgICBsJ3Vzby4gUXVlc3RvIHZ1b2wgZGlyZSBjaGUgZGV2aSBlc2VndWlyZSBpIGNvbWFuZGkgcGVyIGltcGFyYXJsaQorICAgICBkYXZ2ZXJvLiBTZSBsZWdnaSBpbCB0ZXN0byBlIGJhc3RhLCBkaW1lbnRpY2hlcmFpIHByZXN0byBpIGNvbWFuZGkhCisKKyAgICAgQWRlc3NvLCBhc3NpY3VyYXRpIGNoZSBpbCB0YXN0byBCTE9DQ0EtTUFJVVNDT0xPIG5vbiBzaWEgc2NoaWFjY2lhdG8KKyAgICAgZSBwcmVtaSBpbCB0YXN0byAgICBqICAgIHRhbnRvIGRhIG11b3ZlcmUgaWwgY3Vyc29yZSBmaW5vIGEgY2hlIGxhCisgICAgIExlemlvbmUgMS4xIHJpZW1waWEgY29tcGxldGFtZW50ZSBsbyBzY2hlcm1vLgorfn5+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+CisJCQlMZXppb25lIDEuMTogIE1PVklNRU5USSBERUwgQ1VSU09SRQorCisKKyAgICoqIFBlciBtdW92ZXJlIGlsIGN1cnNvcmUsIHByZW1pIGkgdGFzdGkgaCxqLGssbCBjb21lIGluZGljYXRvLiAqKgorCSAgICAgXgorCSAgICAgawkJICAgIE5PVEE6ICBJbCB0YXN0byBoIOggYSBzaW5pc3RyYSBlIG11b3ZlIGEgc2luaXN0cmEuCisgICAgICAgPCBoCSBsID4JCSAgIElsIHRhc3RvIGwg6CBhIGRlc3RyYSBlIG11b3ZlIGEgZGVzdHJhLgorCSAgICAgagkJCSAgIElsIHRhc3RvIGogcmljb3JkYSB1bmEgZnJlY2NpYSBpbiBnafkuCisJICAgICB2CisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgc3VsbG8gc2NoZXJtbyBmaW5jaOkgbm9uIHRpIHNlbnRpIGEgdHVvIGFnaW8uCisKKyAgMi4gVGllbmkgc2NoaWFjY2lhdG8gaWwgdGFzdG8gImdp+SIgKGopIGZpbmNo6SBub24gc2kgcmlwZXRlIGlsIG1vdmltZW50by4KKy0tLT4gQWRlc3NvIHNhaSBjb21lIGFycml2YXJlIGZpbm8gYWxsYSBsZXppb25lIHN1Y2Nlc3NpdmEuCisKKyAgMy4gVXNhbmRvIGlsIHRhc3RvICJnafkiIHNwb3N0YXRpIGFsbGEgTGV6aW9uZSAxLjIuCisKK05PVEE6IFF1YW5kbyBub24gc2VpIHNpY3VybyBkZWwgdGFzdG8gY2hlIGhhaSBwcmVtdXRvLCBwcmVtaSA8RVNDPiBwZXIgYW5kYXJlCisgICAgICBpbiBNb2RhbGl04CBOb3JtYWxlIFtOb3JtYWwgTW9kZV0uIFBvaSByaS1pbW1ldHRpIGlsIGNvbWFuZG8gY2hlIHZvbGV2aS4KKworTk9UQTogSSB0YXN0aSBjb24gbGUgZnJlY2NlIGZhbm5vIGxvIHN0ZXNzbyBzZXJ2aXppby4gTWEgdXNhbmRvIGhqa2wgcmllc2NpCisgICAgICBhIG11b3ZlcnRpIG1vbHRvIHBp+SByYXBpZGFtZW50ZSwgdW5hIHZvbHRhIHByZXNhIGwnYWJpdHVkaW5lLgorCit+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+fn4KKwkJICAgICBMZXppb25lIDEuMjogRU5UUkFSRSBFIFVTQ0lSRSBEQSBWSU0KKworCisgICEhIE5PVEE6IFByaW1hIGRpIGVzZWd1aXJlIHF1YW50byByaWNoaWVzdG8sIGxlZ2dpIGxhIExlemlvbmUgcGVyIGludGVybyEhCisKKyAgMS4gUHJlbWkgaWwgdGFzdG8gPEVTQz4gKHBlciBhc3NpY3VyYXJ0aSBkaSBlc3NlcmUgaW4gTW9kYWxpdOAgTm9ybWFsZSkuCisKKyAgMi4gQmF0dGk6CQkJOnEhIDxJTlZJTz4uCisKKy0tLT4gQ29z7CBlc2NpIGRhbGwnRWRpdG9yIFNFTlpBIFNBTFZBUkUgYWxjdW5hIG1vZGlmaWNhIGZhdHRhLgorICAgICBTZSB2dW9pIHVzY2lyZSBTQUxWQU5ETyBsZSBtb2RpZmljaGUgYmF0dGk6CisJCQkJOndxIDxJTlZJTz4KKworICAzLiBRdWFuZG8gdmVkaSBpbCBQUk9NUFQgZGVsbGEgU2hlbGwsIGJhdHRpIGlsIGNvbWFuZG8gY29uIGN1aSBzZWkgYXJyaXZhdG8KKyAgICAgcXVpLiAgUG90cmViYmUgZXNzZXJlOgl2aW10dXRvciA8SU5WSU8+CisgICAgIE5vcm1hbG1lbnRlICB1c2VyZXN0aToJdmltIHR1dG9yIDxJTlZJTz4KKworLS0tPiAndmltJyBpbmRpY2EgbCdFZGl0b3IgdmltLCAndHV0b3InIOggaWwgbm9tZSBkZWwgZmlsZSBjaGUgdHUgdnVvaSBhcHJpcmUuCisKKyAgNC4gU2UgaGFpIG1lbW9yaXp6YXRvIHF1ZXN0aSBjb21hbmRpIGUgdGkgc2VudGkgcHJvbnRvLCBlc2VndWkgaSBwYXNzaQorICAgICBkYSAxIGEgMyBwZXIgdXNjaXJlIGUgcmllbnRyYXJlIG5lbGwnRWRpdG9yLiAgUG9pIG11b3ZpIGlsIGN1cnNvcmUgaW4gZ2n5CisgICAgIGZpbm8gYWxsYSBMZXppb25lIDEuMy4KK35+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+fgorCQkgICAgIExlemlvbmUgMS4zOiBFRElUSU5HIERJIFRFU1RJIC0gQ0FOQ0VMTEFaSU9ORQorCisKKyoqIEluIE1vZGFsaXTgIE5vcm1hbGUgcHJlbWkgIHggIHBlciBjYW5jZWxsYXJlIGlsIGNhcmF0dGVyZSBzb3R0byBhbCBjdXJzb3JlICoqCisKKyAgMS4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIGxpbmVhIHBp+SBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPgorCisgIDIuIFBlciBjb3JyZWdnZXJlIGVycm9yaSwgbXVvdmkgaWwgY3Vyc29yZSBmaW5vIGEgcG9zaXppb25hcmxvIHNvcHJhIGlsCisgICAgIGNhcmF0dGVyZSBkYSBjYW5jZWxsYXJlLgorCisgIDMuIFByZW1pIGlsIHRhc3RvCXggICAgIHBlciBjYW5jZWxsYXJlIGlsIGNhcmF0dGVyZSBzYmFnbGlhdG8uCisKKyAgNC4gUmlwZXRpIGkgcGFzc2kgZGEgMiBhIDQgZmluY2jpIGxhIGZyYXNlIOggY29ycmV0dGEuCisKKy0tLT4gTGEgbW11Y2NhIHNhbHTy8iBmaW5ub28gYWxsYWEgbHVubm5hLgorCisgIDUuIE9yYSBjaGUgbGEgbGluZWEg6CBjb3JyZXR0YSwgdmFpIGFsbGEgTGV6aW9uZSAxLjQKKworTk9UQTogTWVudHJlIHNlZ3VpIHF1ZXN0YSBndWlkYSwgbm9uIGNlcmNhcmUgZGkgaW1wYXJhcmUgYSBtZW1vcmlhLAorCQkJCSBtYSBpbXBhcmEgZmFjZW5kbyBwcmF0aWNhLgorCisKK35+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+fgorCQkgICAgIExlemlvbmUgMS40OiBFRElUSU5HIERJIFRFU1RJIC0gSU5TRVJJTUVOVE8KKworCisgICAgICAgKiogUXVhbmRvIHNlaSBpbiBNb2RhbGl04CBOb3JtYWxlIHByZW1pICBpICBwZXIgaW5zZXJpcmUgdGVzdG8uICoqCisKKyAgMS4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIHByaW1hIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPgorCisgIDIuIFBlciByZW5kZXJlIGxhIHByaW1hIGxpbmVhIHVndWFsZSBhbGxhIHNlY29uZGEsIG11b3ZpIGlsIGN1cnNvcmUgc29wcmEKKyAgICAgaWwgcHJpbW8gY2FyYXR0ZXJlIERPUE8gbGEgcG9zaXppb25lIGluIGN1aSBpbCB0ZXN0byB2YSBpbnNlcml0by4KKworICAzLiBQcmVtaSAgaSAgZSBiYXR0aSBsZSBhZ2dpdW50ZSBvcHBvcnR1bmUuCisKKyAgNC4gUXVhbmRvIHVuIGVycm9yZSDoIGNvcnJldHRvLCBwcmVtaSA8RVNDPiBwZXIgdG9ybmFyZSBpbiBNb2RhbGl04CBOb3JtYWxlLgorICAgICBSaXBldGkgaSBwYXNzaSBkYSAyIGEgNCBmaW5vIGEgY29tcGxldGFyZSBsYSBjb3JyZXppb25lIGRlbGxhIGZyYXNlLgorCistLS0+IEMnZXJhIGRlbCB0c3RvIG1uY250IHF1ZXN0YSAuCistLS0+IEMnZXJhIGRlbCB0ZXN0byBtYW5jYW50ZSBkYSBxdWVzdGEgbGluZWEuCisKKyAgNS4gUXVhbmRvIHNlaSBhIHR1byBhZ2lvIG5lbGwnaW5zZXJpbWVudG8gZGkgdGVzdG8gdmFpIGFsIHNvbW1hcmlvIHNvdHRvLgorCisKKworfn5+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+CisJCQkgICAgICAgTGV6aW9uZSAxIFNPTU1BUklPCisKKworICAxLiBJbCBjdXJzb3JlIHNpIG11b3ZlIHVzYW5kbyBpIHRhc3RpIGNvbiBsZSBmcmVjY2UgbyBpIHRhc3RpIGhqa2wuCisJIGggKHNpbmlzdHJhKQlqIChnafkpICAgICAgIGsgKHN1KQkgICAgbCAoZGVzdHJhKQorCisgIDIuIFBlciBlc2VndWlyZSBWaW0gKGRhbCBwcm9tcHQgJSkgYmF0dGk6ICB2aW0gTk9NRUZJTEUgPElOVklPPgorCisgIDMuIFBlciB1c2NpcmUgZGEgVmltIGJhdHRpOiA8RVNDPiA6cSEgPElOVklPPiBwZXIgdXNjaXJlIHNlbnphIHNhbHZhcmUuCisJCW9wcHVyZSBiYXR0aTogPEVTQz4gOndxIDxJTlZJTz4gcGVyIHVzY2lyZSBzYWx2YW5kbyBtb2RpZmljaGUuCisKKyAgNC4gUGVyIGNhbmNlbGxhcmUgaWwgY2FyYXR0ZXJlIHNvdHRvIGFsIGN1cnNvcmUgaW4gTW9kYWxpdOAgTm9ybWFsZSBiYXR0aTogeAorCisgIDUuIFBlciBpbnNlcmlyZSB0ZXN0byBzdWJpdG8gcHJpbWEgZGVsIGN1cnNvcmUgaW4gTW9kYWxpdOAgTm9ybWFsZSBiYXR0aToKKwkgaSAgICAgYmF0dGkgZGVsIHRlc3RvCTxFU0M+CisKK05PVEE6IHByZW1lbmRvIDxFU0M+IHJpdG9ybmVyYWkgaW4gTW9kYWxpdOAgTm9ybWFsZSBvIGFubnVsbGVyYWkKKyAgICAgIHVuIGNvbWFuZG8gZXJyYXRvIGNoZSBwdW9pIGF2ZXIgaW5zZXJpdG8gaW4gcGFydGUuCisKK09yYSBjb250aW51YSBjb24gbGEgTGV6aW9uZSAyLgorCisKK35+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+fgorCQkJTGV6aW9uZSAyLjE6IENPTUFOREkgREkgQ0FOQ0VMTEFaSU9ORQorCisKKwkgICoqIEJhdHRpICBkdyAgcGVyIGNhbmNlbGxhcmUgZmlubyBhIGZpbmUgcGFyb2xhLiAqKgorCisgIDEuIFByZW1pICA8RVNDPiAgcGVyIGFjY2VydGFydGkgZGkgZXNzZXJlIGluIE1vZGFsaXTgIE5vcm1hbGUuCisKKyAgMi4gTXVvdmkgaWwgY3Vyc29yZSBmaW5vIGFsbGEgbGluZWEgcXVpIHNvdHRvLCBpbmRpY2F0YSBkYSAtLS0+CisKKyAgMy4gTXVvdmkgaWwgY3Vyc29yZSBhbGwnaW5pemlvIGRpIHVuYSBwYXJvbGEgY2hlIHZ1b2kgY2FuY2VsbGFyZS4KKworICA0LiBCYXR0aSAgIGR3ICAgcGVyIGNhbmNlbGxhcmUgbGEgcGFyb2xhLgorCitOT1RBOiBMZSBsZXR0ZXJlICBkdyAgc2FyYW5ubyB2aXNpYmlsaSBzdWxsJ3VsdGltYSBsaW5lYSBkZWxsbyBzY2hlcm1vIG1lbnRyZSBsZQorICAgICAgYmF0dGkuIFNlIGhhaSBiYXR0dXRvIHF1YWxjb3NhIGRpIHNiYWdsaWF0bywgcHJlbWkgIDxFU0M+ICBlIHJpY29taW5jaWEuCisKKy0tLT4gQ2kgc29ubyBsZSBhbGN1bmUgcGFyb2xlIGdpb2lhIGNoZSBub24gYydlbnRyYW5vIGNhcnRhIGluIHF1ZXN0YSBmcmFzZS4KKworICA1LiBSaXBldGkgaSBwYXNzaSAzIGUgNCBmaW5jaOkgbGEgZnJhc2Ug6CBjb3JyZXR0YSwgcG9pIHZhaSBhbGxhIExlemlvbmUgMi4yLgorCisKKworfn5+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+CisJCSAgICAgIExlemlvbmUgMi4yOiBBTFRSSSBDT01BTkRJIERJIENBTkNFTExBWklPTkUKKworCisJICAgKiogQmF0dGkgIGQkCXBlciBjYW5jZWxsYXJlIGZpbm8gYSBmaW5lIGxpbmVhLiAqKgorCisgIDEuIFByZW1pICA8RVNDPiAgcGVyIGFjY2VydGFydGkgZGkgZXNzZXJlIGluIE1vZGFsaXTgIE5vcm1hbGUuCisKKyAgMi4gTXVvdmkgaWwgY3Vyc29yZSBmaW5vIGFsbGEgbGluZWEgcXVpIHNvdHRvLCBpbmRpY2F0YSBkYSAtLS0+CisKKyAgMy4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIGZpbmUgZGVsbGEgbGluZWEgY29ycmV0dGEgKERPUE8gaWwgcHJpbW8gLiApLgorCisgIDQuIEJhdHRpICAgIGQkICAgIHBlciBjYW5jZWxsYXJlIGZpbm8gYSBmaW5lIGxpbmVhLgorCistLS0+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+CisJCSAgICAgTGV6aW9uZSAyLjM6IENPTUFOREkgRSBPR0dFVFRJCisKKworICBJbCBmb3JtYXRvIGRlbCBjb21hbmRvICBkICBbZGVsZXRlXSBjYW5jZWxsYSDoIGlsIHNlZ3VlbnRlOgorCisJIFtudW1lcm9dICAgZAlvZ2dldHRvCSAgICBPUFBVUkUgICAgIGQgW251bWVyb10gICBvZ2dldHRvCisgIERvdmU6CisgICAgbnVtZXJvIC0gaW5kaWNhIHF1YW50ZSB2b2x0ZSB2YSBlc2VndWl0byBpbCBjb21hbmRvIChzZSBvbWVzc28sIHZhbGUgMSkuCisgICAgZCAtIOggaWwgY29tYW5kbyBkaSBjYW5jZWxsYXppb25lLgorICAgIG9nZ2V0dG8gLSBpbmRpY2EgZG92ZSBpbCBjb21hbmRvIHZhIGFwcGxpY2F0byAobGlzdGEgcXVpIHNvdHRvKS4KKworICBCcmV2ZSBsaXN0YSBkaSBvZ2dldHRpOgorICAgIHcgLSBkYWwgY3Vyc29yZSBhbGxhIGZpbmUgZGVsbGEgcGFyb2xhLCBpbmNsdXNvIGxvIHNwYXppby4KKyAgICBlIC0gZGFsIGN1cnNvcmUgYWxsYSBmaW5lIGRlbGxhIHBhcm9sYSwgRVNDTFVTTyBsbyBzcGF6aW8uCisgICAgJCAtIGRhbCBjdXJzb3JlIGZpbm8gYSBmaW5lIGxpbmVhLgorCitOT1RBOiBQZXIgYW1hbnRpIGRlbGwnYXZ2ZW50dXJhOiBwcmVtZW5kbyBzb2xvIGlsIHRhc3RvIGNoZSBpbmRpY2EgbCdvZ2dldHRvCisgICAgICBtZW50cmUgc2lldGUgaW4gTW9kYWxpdOAgTm9ybWFsZSwgc2VuemEgZGFyZSB1biBjb21hbmRvLCBzcG9zdGEKKyAgICAgIGlsIGN1cnNvcmUgY29tZSBzcGVjaWZpY2F0byBuZWxsYSAibGlzdGEgZGkgb2dnZXR0aSIgcXVpIHNvcHJhLgorCisKKworfn5+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+CisJCUxlemlvbmUgMi40OiBVTkEgRUNDRVpJT05FIEEgJ0NPTUFORE8tT0dHRVRUTycKKworCSAgICAqKiBCYXR0aQkgZGQgICBwZXIgY2FuY2VsbGFyZSB1bidpbnRlcmEgbGluZWEuICoqCisKKyAgUGVyIGxhIGZyZXF1ZW56YSBjb24gY3VpIGNhcGl0YSBkaSBjYW5jZWxsYXJlIGxpbmVlIGludGVyZSwgY2hpCisgIGhhIHByb2dldHRhdG8gVmkgaGEgZGVjaXNvIGNoZSBzYXJlYmJlIHN0YXRvIHBp+SBzZW1wbGljZQorICBiYXR0ZXJlIGR1ZSBkIGNvbnNlY3V0aXZlIHBlciBjYW5jZWxsYXJlIHVuYSBsaW5lYS4KKworICAxLiBNdW92aSBpbCBjdXJzb3JlIGFsbGEgbGluZWEgMikgbmVsbGEgZnJhc2UgcXVpIHNvdHRvLgorICAyLiBCYXR0aSAgZGQgIHBlciBjYW5jZWxsYXJlIGxhIGxpbmVhLgorICAzLiBPcmEgc3Bvc3RhdGkgYWxsYSBsaW5lYSA0KS4KKyAgNC4gQmF0dGkgICAyZGQgICAocmljb3JkYTogIG51bWVyby1jb21hbmRvLW9nZ2V0dG8pIHBlciBjYW5jZWxsYXJlIGR1ZSBsaW5lZS4KKworICAgICAgMSkgIExlIHJvc2Ugc29ubyByb3NzZSwKKyAgICAgIDIpICBOZWwgZmFuZ28gY2kgc2kgZGl2ZXJ0ZSwKKyAgICAgIDMpICBMZSB2aW9sZSBzb25vIGJsdSwKKyAgICAgIDQpICBJbyBobyB1bidhdXRvbW9iaWxlLAorICAgICAgNSkgIEdsaSBvcm9sb2dpIHNlZ25hbm8gaWwgdGVtcG8sCisgICAgICA2KSAgSWwgbWllbGUg6CBkb2xjZSwKKyAgICAgIDcpICBFIGxvIHNlaSBhbmNoZSB0dS4KKworCit+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+fn4KKwkJCSBMZXppb25lIDIuNTogSUwgQ09NQU5ETyBVTkRPIFtBTk5VTExBXQorCisgICAgKiogUHJlbWkgIHUJCXBlciBhbm51bGxhcmUgZ2xpIHVsdGltaSBjb21hbmRpIGVzZWd1aXRpLiAgKioKKyAgICAqKiBQcmVtaSAgVQkJcGVyIGFubnVsbGFyZSBsZSBtb2RpZmljaGUgYWxsJ3VsdGltYSBsaW5lYS4gICAqKgorCisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgZmlubyBhbGxhIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPgorICAgICBlIHBvc2l6aW9uYXRpIHN1bCBwcmltbyBlcnJvcmUuCisgIDIuIEJhdHRpICB4ICBwZXIgY2FuY2VsbGFyZSBpbCBwcmltbyBjYXJhdHRlcmUgc2JhZ2xpYXRvLgorICAzLiBBZGVzc28gYmF0dGkgIHUgIHBlciBhbm51bGxhcmUgbCd1bHRpbW8gY29tYW5kbyBlc2VndWl0by4KKyAgNC4gT3JhIGludmVjZSwgY29ycmVnZ2kgdHV0dGkgZ2xpIGVycm9yaSBzdWxsYSBsaW5lYSB1c2FuZG8gaWwgY29tYW5kbyAgeCAuCisgIDUuIEFkZXNzbyBiYXR0aSB1bmEgVSBNYWl1c2NvbGEgcGVyIHJpcG9ydGFyZSBsYSBsaW5lYSBhbCBzdW8gc3RhdG8gb3JpZ2luYWxlLgorICA2LiBBZGVzc28gYmF0dGkgIHUgIHBp+SB2b2x0ZSBwZXIgYW5udWxsYXJlIGxhICBVICBlIGkgY29tYW5kaSBwcmVjZWRlbnRpLgorICA3LiBBZGVzc28gYmF0dGkgcGn5IHZvbHRlIENUUkwtciAodGVuZW5kbyBpbCB0YXN0byBDVFJMIHNjaGlhY2NpYXRvCisgICAgIG1lbnRyZSBiYXR0aSByKSBwZXIgcmlmYXJlIGkgY29tYW5kaSAoYW5udWxsYXJlIGwnYW5udWxsYW1lbnRvKS4KKworLS0tPiBDb3JyZWVnZ2kgZ2xpIGVycm9yaSBzc3UgcXV1ZXN0YSBsaW5lYSBlIHJpaW1waWF6emFsaSBjb29uICJ1bmRvIi4KKworICA4LiBRdWVzdGkgY29tYW5kaSBzb25vIG1vbHRvIHV0aWxpLiBPcmEgc3Bvc3RhdGkgYWwgU29tbWFyaW8gZGVsbGEgTGV6aW9uZSAyLgorCisKKworCit+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+fn4KKwkJCSAgICAgICBMZXppb25lIDIgU09NTUFSSU8KKworCisgIDEuIFBlciBjYW5jZWxsYXJlIGRhbCBjdXJzb3JlIGZpbm8gYWxsYSBmaW5lIGRpIHVuYSBwYXJvbGEgYmF0dGk6ICAgIGR3CisKKyAgMi4gUGVyIGNhbmNlbGxhcmUgZGFsIGN1cnNvcmUgZmlubyBhbGxhIGZpbmUgZGVsbGEgbGluZWEgICBiYXR0aTogICAgZCQKKworICAzLiBQZXIgY2FuY2VsbGFyZSB1bidpbnRlcmEgbGluZWEgYmF0dGk6ICAgIGRkCisKKyAgNC4gSWwgZm9ybWF0byBwZXIgdW4gY29tYW5kbyBpbiBNb2RhbGl04CBOb3JtYWxlIOg6CisKKyAgICAgICBbbnVtZXJvXSAgY29tYW5kbyAgb2dnZXR0byAgIE9QUFVSRSAgIGNvbWFuZG8gIFtudW1lcm9dICBvZ2dldHRvCisgICAgIERvdmU6CisgICAgICAgbnVtZXJvIC0gaW5kaWNhIHF1YW50ZSB2b2x0ZSB2YSBlc2VndWl0byBpbCBjb21hbmRvIChzZSBvbWVzc28sIHZhbGUgMSkuCisgICAgICAgY29tYW5kbyAtIOggaWwgY29tYW5kbyBkYSBlc2VndWlyZSwgYWQgZXMuICBkICBwZXIgW2RlbGV0ZV0gY2FuY2VsbGFyZS4KKyAgICAgICBvZ2dldHRvIC0gaW5kaWNhIGRvdmUgaWwgY29tYW5kbyB2YSBhcHBsaWNhdG8sIGFkIGVzLiAgdyBbd29yZF0gcGFyb2xhLAorCQkkIChmaW5vIGFsbGEgZmluZSBkZWxsYSBsaW5lYSksIGV0Yy4KKworICA1LiBQZXIgYW5udWxsYXJlIGkgY29tYW5kaSBwcmVjZWRlbnRpLAkgIGJhdHRpOgkgIHUgKHUgbWludXNjb2xhKQorICAgICBQZXIgYW5udWxsYXJlIHR1dHRlIGxlIG1vZGlmaWNoZSBhIHVuYSBsaW5lYSBiYXR0aTogICAgVSAoVSBNYWl1c2NvbGEpCisgICAgIFBlciBhbm51bGxhcmUgbCdhbm51bGxhbWVudG8gW2dsaSAidW5kbyJdCSAgICAgIGJhdHRpOgkgIENUUkwtcgorCit+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+fn4KKwkJCSBMZXppb25lIDMuMTogSUwgQ09NQU5ETyBQVVQgW01FVFRJLCBQT05JXQorCisKKyAgICoqIEJhdHRpICBwICBwZXIgcG9ycmUgW3B1dF0gbCd1bHRpbWEgY2FuY2VsbGF6aW9uZSBkb3BvIGlsIGN1cnNvcmUuICoqCisKKyAgMS4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIHByaW1hIGxpbmVhIGZyYSBxdWVsbGUgcXVpIGluIGJhc3NvLgorCisgIDIuIEJhdHRpICBkZCAgcGVyIGNhbmNlbGxhcmUgbGEgbGluZWEgZSBkZXBvc2l0YXJsYSBuZWwgYnVmZmVyIGRpIFZpbS4KKworICAzLiBNdW92aSBpbCBjdXJzb3JlIGZpbm8gYWxsYSBsaW5lYSBTT1BSQSBxdWVsbGEgZG92ZSBhbmRyZWJiZSBzcG9zdGF0YQorICAgICBsYSBsaW5lYSBjaGUgaGFpIGFwcGVuYSBjYW5jZWxsYXRvLgorCisgIDQuIE1lbnRyZSBzZWkgaW4gTW9kYWxpdOAgTm9ybWFsZSwgYmF0dGkgIHAgIHBlciByZWluc2VyaXJlIGxhIGxpbmVhLgorCisgIDUuIFJpcGV0aSBpIHBhc3NpIGRhIDIgYSA0IHBlciBtZXR0ZXJlIHR1dHRlIGxlIGxpbmVlIG5lbCBjb3JyZXR0byBvcmRpbmUuCisKKyAgICAgZCkgIFJpZXNjaSBhIGltcGFyYXJsYSB0dT8KKyAgICAgYikgIExlIHZpb2xlIHNvbm8gYmx1LAorICAgICBjKSAgTGEgc2FnZ2V6emEgc2kgaW1wYXJhLAorICAgICBhKSAgTGUgcm9zZSBzb25vIHJvc3NlLAorCisKK35+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+fgorCQkgIExlemlvbmUgMy4yOiBJTCBDT01BTkRPIFJFUExBQ0UgW1JJTVBJQVpaQV0KKworCisgICoqIEJhdHRpICByICBlIHVuYSBsZXR0ZXJhIHBlciByaW1waWF6emFyZSBpbCBjYXJhdHRlcmUgc290dG8gYWwgY3Vyc29yZS4gKioKKworICAxLiBNdW92aSBpbCBjdXJzb3JlIGFsbGEgcHJpbWEgbGluZWEgcXVpIHNvdHRvLCBpbmRpY2F0YSBkYSAtLS0+CisKKyAgMi4gTXVvdmkgaWwgY3Vyc29yZSBmaW5vIGEgcG9zaXppb25hcmxvIHNvcHJhIGlsIHByaW1vIGVycm9yZS4KKworICAzLiBCYXR0aSAgIHIJZSBwb2kgaWwgY2FyYXR0ZXJlIGNoZSBkb3ZyZWJiZSByaW1waWF6emFyZSBsJ2Vycm9yZS4KKworICA0LiBSaXBldGkgaSBwYXNzaSAyIGUgMyBmaW5jaOkgbGEgcHJpbWEgbGluZWEg6CBjb3JyZXR0YS4KKworLS0tPiAgSW1tYXR0ZW5kbyBxdWV0dGEgbGliZWEsIHF1YWxjdW5vIGhvIHByZWRhdG8gYWxjdW5pIHRvc3RpIHNiYWxsaWF0aSEKKy0tLT4gIEltbWV0dGVuZG8gcXVlc3RhIGxpbmVhLCBxdWFsY3VubyBoYSBwcmVtdXRvIGFsY3VuaSB0YXN0aSBzYmFnbGlhdGkhCisKKyAgNS4gT3JhIHBhc3NhIGFsbGEgTGV6aW9uZSAzLjIuCisKK05PVEE6IFJpY29yZGF0aSBjaGUgZG92cmVzdGkgaW1wYXJhcmUgY29uIGxhIHByYXRpY2EsIG5vbiBzb2xvIGxlZ2dlbmRvLgorCisKKworfn5+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+CisJCUxlemlvbmUgMy4zOiBJTCBDT01BTkRPIENIQU5HRSBbQ0FNQklBXQorCisKKyAgICAgKiogUGVyIGNhbWJpYXJlIHVuYSBwYXJvbGEgaW4gdHV0dG8gbyBpbiBwYXJ0ZSwgYmF0dGkgIGN3IC4gKioKKworICAxLiBNdW92aSBpbCBjdXJzb3JlIGFsbGEgcHJpbWEgbGluZWEgcXVpIHNvdHRvLCBpbmRpY2F0YSBkYSAtLS0+CisKKyAgMi4gUG9zaXppb25hIGlsIGN1cnNvcmUgYWxsYSB1IGluIGx1YncuCisKKyAgMy4gQmF0dGkgIGN3ICBlIGxhIHBhcm9sYSBjb3JyZXR0YSAoaW4gcXVlc3RvIGNhc28sIGJhdHRpICBpbmVhICAgICkuCisKKyAgNC4gUHJlbWkgPEVTQz4gZSB2YWkgc3VsbCdlcnJvcmUgc2VndWVudGUgKHN1bCBwcmltbyBjYXJhdHRlcmUgZGEgbW9kaWZpY2FyZSkuCisKKyAgNS4gUmlwZXRpIGkgcGFzc2kgMyBlIDQgZmluY2jpIGxhIHByaW1hIGZyYXNlIOggdWd1YWxlIGFsbGEgc2Vjb25kYS4KKworLS0tPiBRdWVzdGEgbHVidyBoYSBhbGN1bmUgcHB0ZmQgZGEgYXNkZXJ0IHVzZ2ZrIGlsIGNvbWFuZG8gQ0hBTkdFLgorLS0tPiBRdWVzdGEgbGluZWEgaGEgYWxjdW5lIHBhcm9sZSBkYSBjYW1iaWFyZSB1c2FuZG8gaWwgY29tYW5kbyBDSEFOR0UuCisKK05vdGEgY2hlICBjdyAgbm9uIHNvbG8gcmltcGlhenphIGxhIHBhcm9sYSwgbWEgdGkgbWV0dGUgYW5jaGUgaW4gTW9kYWxpdOAKK0luc2VyaW1lbnRvIFtJbnNlcnQgTW9kZV0KKworCit+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+fn4KKwkJICAgICAgIExlemlvbmUgMy40OiBBTFRSSSBDQU1CSUFNRU5USSBVU0FORE8gYworCisKKyoqIElsIGNvbWFuZG8gYyBbQ0hBTkdFXSBhZ2lzY2Ugc3VnbGkgc3Rlc3NpIG9nZ2V0dGkgZGVsIGNvbWFuZG8gZCBbREVMRVRFXSAqKgorCisgIDEuIElsIGNvbWFuZG8gQ0hBTkdFIHNpIGNvbXBvcnRhIGNvbWUgREVMRVRFLiAgSWwgZm9ybWF0byDoOgorCisgICAgICAgW251bWVyb10gICBjICAgb2dnZXR0bwkgT1BQVVJFICAgIGMJW251bWVyb10gICBvZ2dldHRvCisKKyAgMi4gR2xpIG9nZ2V0dGkgc29ubyBnbGkgc3Rlc3NpLCBhZCBlcy4gdyAod29yZCwgcGFyb2xhKSwgJCAoZmluZSBsaW5lYSksIGV0Yy4KKworICAzLiBNdW92aSBpbCBjdXJzb3JlIGFsbGEgcHJpbWEgbGluZWEgcXVpIHNvdHRvLCBpbmRpY2F0YSBkYSAtLS0+CisKKyAgNC4gUG9zaXppb25hIGlsIGN1cnNvcmUgYWwgcHJpbW8gZXJyb3JlLgorCisgIDUuIEJhdHRpICBjJCAgcGVyIG1vZGlmaWNhcmUgaWwgcmVzdG8gZGVsbGEgbGluZWEgc2Vjb25kbyBpbCBtb2RlbGxvIGRlbGxhCisgICAgIGxpbmVhIHN1Y2Nlc3NpdmEsIGUgcXVhbmRvIGhhaSBmaW5pdG8gcHJlbWkgPEVTQz4KKworLS0tPiBMYSBmaW5lIGRpIHF1ZXN0YSBsaW5lYSBkZXZlIGVzc2VyZSBhaXV0YXRhIGEgZGl2ZW5pcmUgY29tZSBsYSBzZWd1ZW50ZS4KKy0tLT4gTGEgZmluZSBkaSBxdWVzdGEgbGluZWEgZGV2ZSBlc3NlcmUgY29ycmV0dGEgdXNhbmRvIGlsIGNvbWFuZG8gIGMkICAuCisKKworfn5+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+CisJCQkgICAgICAgTGV6aW9uZSAzIFNPTU1BUklPCisKKworICAxLiBQZXIgcmVpbnNlcmlyZSB0ZXN0byBjaGUgaGFpIGFwcGVuYSBjYW5jZWxsYXRvLCBiYXR0aSAgIHAgICAuICBRdWVzdG8KKyAgICAgaW5zZXJpc2NlIFtwb25lXSBpbCB0ZXN0byBjYW5jZWxsYXRvIERPUE8gaWwgY3Vyc29yZSAoc2UgZXJhIHN0YXRhIHRvbHRhCisgICAgIHVuYSBsaW5lYSBpbnRlcmEsIHF1ZXN0YSB2ZXJy4CBtZXNzYSBuZWxsYSBsaW5lYSBTT1RUTyBpbCBjdXJzb3JlKS4KKworICAyLiBQZXIgcmltcGlhenphcmUgaWwgY2FyYXR0ZXJlIHNvdHRvIGlsIGN1cnNvcmUsIGJhdHRpICAgciAgIGUgcG9pIGlsCisgICAgIGNhcmF0dGVyZSBzb3N0aXR1dGl2by4KKworICAzLiBJbCBjb21hbmRvIENIQU5HRSB0aSBwZXJtZXR0ZSBkaSBjYW1iaWFyZSBsJ29nZ2V0dG8gc3BlY2lmaWNhdG8gZGFsCisgICAgIGN1cnNvcmUgZmlubyBhbGxhIGZpbmUgZGVsbCdvZ2dldHRvLiBBZCBlcy4gQmF0dGkgIGN3ICBwZXIgY2FtYmlhcmUgZGFsCisgICAgIGN1cnNvcmUgYWxsYSBmaW5lIGRlbGxhIHBhcm9sYSwgIGMkICBwZXIgY2FtYmlhcmUgZmlubyBhIGZpbmUgbGluZWEuCisKKyAgNC4gSWwgZm9ybWF0byBkZWwgY29tYW5kbyBDSEFOR0Ug6DoKKworCSBbbnVtZXJvXSAgIGMJb2dnZXR0bwkgICAgICBPUFBVUkUJYyAgIFtudW1lcm9dICAgb2dnZXR0bworCitPcmEgdmFpIGFsbGEgcHJvc3NpbWEgTGV6aW9uZS4KKworCisKK35+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+fgorCQkgICAgIExlemlvbmUgNC4xOiBQT1NJWklPTkFNRU5URSBFIFNJVFVBWklPTkUgRklMRQorCisKKyAgKiogQmF0dGkgQ1RSTC1nIHBlciB2ZWRlcmUgYSBjaGUgcHVudG8gc2VpIG5lbCBmaWxlIGUgbGEgc2l0dWF6aW9uZSBkZWwgZmlsZS4KKyAgICAgQmF0dGkgW251bWVyb10gRyAgcGVyIHJhZ2dpdW5nZXJlIGlsIG51bWVybyBkZWxsYSBsaW5lYSBbbnVtZXJvXSBuZWwgZmlsZS4KKyAgICAgQmF0dGkgW251bWVyb10gJSAgcGVyIHBvc2l6aW9uYXJ0aSBhbGxhIHBlcmNlbnR1YWxlIFtudW1lcm9dIG5lbCBmaWxlICoqCisKKyAgTk9UQTogTGVnZ2kgbCdpbnRlcmEgTGV6aW9uZSBwcmltYSBkaSBlc2VndWlyZSB1biBxdWFsdW5xdWUgY29tYW5kbyEhCisKKyAgMS4gVGllbmkgcHJlbXV0byBpbCB0YXN0byBDVFJMIGUgYmF0dGkgIGcgIC4gIFVuYSBsaW5lYSBkaSBzaXR1YXppb25lCisgICAgIHNhcuAgdmlzaWJpbGUgaW4gZm9uZG8gYWxsYSBwYWdpbmEgY29uIGlsIE5PTUUgRklMRSBlIGxhIGxpbmVhCisgICAgIGluIGN1aSBzZWkgcG9zaXppb25hdG8uICBSaWNvcmRhdGkgaWwgbnVtZXJvIGRlbGxhIGxpbmVhIHBlciBpbCBQYXNzbyAzLgorCisgIDIuIFByZW1pICBHICBbRyBNYWl1c2NvbG9dIHBlciBwb3NpemlvbmFydGkgYWxsYSBmaW5lIGRlbCBmaWxlLgorCisgIDMuIEJhdHRpIGlsIG51bWVybyBkZWxsYSBsaW5lYSBpbiBjdWkgdGkgdHJvdmF2aSBlIHBvaSAgRyAgLiAgUXVlc3RvIHRpCisgICAgIHJpcG9ydGVy4CBmaW5vIGFsbGEgbGluZWEgaW4gY3VpIHRpIHRyb3ZhdmkgcXVhbmRvIGF2ZXZpIGJhdHR1dG8gQ1RSTC1nLgorICAgICAoTWVudHJlIGJhdHRpIGkgbnVtZXJpLCBxdWVzdGkgTk9OIHNhcmFubm8gdmlzdWFsaXp6YXRpIHN1bGxvIHNjaGVybW8uKQorCisgIDQuIFNlIHRpIHNlbnRpIHNpY3VybyBuZWwgZmFybG8sIGVzZWd1aSBpIHBhc3NpIGRhIDEgYSAzLgorCisKK35+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+fgorCQlMZXppb25lIDQuMjogSUwgQ09NQU5ETyBTRUFSQ0ggW1JJQ0VSQ0FdCisKKworICAgICAqKiBCYXR0aSAgLyAgc2VndWl0byBkYSB1bmEgZnJhc2UgcGVyIHJpY2VyY2FyZSBxdWVsbGEgZnJhc2UuICoqCisKKyAgMS4gaW4gTW9kYWxpdOAgTm9ybWFsZSBiYXR0aSBpbCBjYXJhdHRlcmUgIC8gIC4gTm90YSBjaGUgbGEgIi8iIGUgaWwgY3Vyc29yZQorICAgICBzb25vIHZpc2liaWxpIGluIGZvbmRvIGRlbGxvIHNjaGVybW8gY29tZSBxdWFuZG8gc2kgdXNhIGlsIGNvbWFuZG8gIDogLgorCisgIDIuIEFkZXNzbyBiYXR0aSAnZXJycm9vcmUnIDxJTlZJTz4uIFF1ZXN0YSDoIGxhIHBhcm9sYSBjaGUgdnVvaSByaWNlcmNhcmUuCisKKyAgMy4gUGVyIHJpY2VyY2FyZSBhbmNvcmEgbGEgc3Rlc3NhIGZyYXNlLCBiYXR0aSBzb2x0YW50byAgICAgICBuICAuCisgICAgIFBlciByaWNlcmNhcmUgbGEgc3Rlc3NhIGZyYXNlIGluIGRpcmV6aW9uZSBvcHBvc3RhLCBiYXR0aSAgTiAgLgorCisgIDQuIFNlIHZ1b2kgcmljZXJjYXJlIHVuYSBmcmFzZSBpbiBkaXJlemlvbmUgb3Bwb3N0YSAoaW4gc3UpLCB1c2EgaWwKKyAgICAgY29tYW5kbyAgID8gICBpbnZlY2UgY2hlICAgLyAgLgorCistLS0+IFF1YW5kbyBsYSByaWNlcmNhIGFycml2YSBhIGZpbmUgZmlsZSwgcmljb21pbmNpYSBkYWxsJ2luaXppbyBkZWwgZmlsZS4KKworICAiZXJycm9vcmUiIG5vbiDoIGlsIG1vZG8gZ2l1c3RvIGRpIGRpZ2l0YXJlIGVycm9yZTsgZXJycm9vcmUg6CB1biBlcnJvcmUuCisKKworCit+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+fn4KKwkJICAgTGV6aW9uZSA0LjM6IFJJQ0VSQ0EgREkgUEFSRU5URVNJIENPUlJJU1BPTkRFTlRJCisKKworCSAqKiBCYXR0aSAgJSAgcGVyIHRyb3ZhcmUgdW5hICApLF0sIG8gfSAgY29ycmlwb25kZW50aS4gKioKKworICAxLiBQb3NpemlvbmEgaWwgY3Vyc29yZSBzdSB1biAoLCBbLCBvciB7IG5lbGxhIGxpbmVhLCBpbmRpY2F0YSBkYSAtLS0+CisKKyAgMi4gQWRlc3NvIGJhdHRpIGlsIGNhcmF0dGVyZSAgICUgIC4KKworICAzLiBJbCBjdXJzb3JlIGRvdnJlYmJlIG9yYSB0cm92YXJzaSBzdWxsYSBwYXJlbnRlc2kgY29ycmlzcG9uZGVudGUuCisKKyAgNC4gQmF0dGkgICUgIHBlciBtdW92ZXJlIGlsIGN1cnNvcmUgYWxsYSBwYXJlbnRlc2kgZGkgcHJpbWEgKGNvcnJpc3BvbmRlbnRlKQorCistLS0+IFF1ZXN0YSAoIOggdW5hIGxpbmVhIGRpIHRlc3QgY29uICgsIFsgXSBlIHsgfSBhbCBzdW8gaW50ZXJuby4gKSkKKworTk9UQTogUXVlc3RvIOggbW9sdG8gdXRpbGUgbmVsICJkZWJ1ZyIgZGkgdW4gcHJvZ3JhbW1hIGNvbiBwYXJlbnRlc2kgZXJyYXRlIQorCisKKworCisKKworfn5+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+CisJCSAgICAgIExlemlvbmUgNC40OiBVTiBNT0RPIFBFUiBDT1JSRUdHRVJFIEdMSSBFUlJPUkkKKworCisgICoqIEJhdHRpICA6cy92ZWNjaGlvL251b3ZvL2cgIHBlciBzb3N0aXR1aXJlICdudW92bycgYSAndmVjY2hpbycuICoqCisKKyAgMS4gTXVvdmkgaWwgY3Vyc29yZSBmaW5vIGFsbGEgbGluZWEgcXVpIHNvdHRvLCBpbmRpY2F0YSBkYSAtLS0+LgorCisgIDIuIEJhdHRpICA6cy9sbGEvbGEgPElOVklPPiAuICBOb3RhIGNoZSBxdWVzdG8gY29tYW5kbyBjYW1iaWEgc29sbworICAgICBMQSBQUklNQSBvY2NvcnJlbnphIGRpICJsbGEiIHN1bGxhIGxpbmVhLgorCisgIDMuIEFkZXNzbyBiYXR0aSAgOnMvbGxhL2xhL2cgIGRvdmUgImciIHN0YSBwZXIgImdsb2JhbG1lbnRlIiBzdWxsYSBsaW5lYS4KKyAgICAgUXVlc3RvIGNhbWJpYSBUVVRURSBsZSBvY2NvcnJlbnplIGRpICJsbGEiIHN1bGxhIGxpbmVhLgorCistLS0+IGxsYSBzdGFnaW9uZSBtaWdsaW9yZSBwZXIgbGxhIGZpb3JpdHVyYSDoIGxsYSBwcmltYXZlcmEuCisKKyAgNC4gUGVyIGNhbWJpYXJlIG9nbmkgcmljb3JyZW56YSBkaSB1bmEgc3RyaW5nYSBkaSBjYXJhdHRlcmkgdHJhIGR1ZSBsaW5lZSwKKyAgICAgYmF0dGkgOiMsI3MvdmVjY2hpby9udW92by9nICBkb3ZlICMsIyBzb25vIGkgbnVtZXJpIGRlbGxlIGR1ZSBsaW5lZS4KKyAgICAgQmF0dGkgOiVzL3ZlY2NoaW8vbnVvdm8vZyAgICBwZXIgY2FtYmlhcmUgb2duaSBvY2NvcnJlbnphIG5lbGwnaW50ZXJvIGZpbGUuCisKKworCisKK35+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+fgorCQkJICAgICAgIExlemlvbmUgNCBTT01NQVJJTworCisKKzEuIENUUkwtZyAgdmlzdWFsaXp6YSBhIGNoZSBwdW50byBzZWkgbmVsIGZpbGUgZSBsYSBzaXR1YXppb25lIGRlbCBmaWxlLgorICAgRyAgICAgICBbRyBNYWl1c2NvbG9dIHRpIHBvcnRhIGFsbGEgZmluZSBkZWwgZmlsZS4gVW4gbnVtZXJvIGRpIGxpbmVhCisgICBzZWd1aXRvIGRhICBHICBbRyBNYWl1c2NvbG9dIHRpIHBvcnRhIGEgcXVlbCBudW1lcm8gZGkgbGluZWEgbmVsIGZpbGUuCisKKzIuIEJhdHRlbmRvICAvICBzZWd1aXRvIGRhIHVuYSBmcmFzZSByaWNlcmNhIElOIEFWQU5USSBxdWVsbGEgZnJhc2UuCisgICBCYXR0ZW5kbyAgPyAgc2VndWl0byBkYSB1bmEgZnJhc2UgcmljZXJjYSBBTEwnSU5ESUVUUk8gcXVlbGxhIGZyYXNlLgorICAgRE9QTyB1bmEgcmljZXJjYSBiYXR0aSAgICBuICAgcGVyIHRyb3ZhcmUgbGEgcHJvc3NpbWEgb2Njb3JyZW56YSBuZWxsYQorICAgc3Rlc3NhIGRpcmV6aW9uZSwgb3BwdXJlICBOICAgcGVyIGNlcmNhcmUgaW4gZGlyZXppb25lIG9wcG9zdGEuCisKKzMuIEJhdHRlbmRvICAlICBtZW50cmUgaWwgY3Vyc29yZSBzaSB0cm92YSBzdSAgKCwpLFssXSx7LCBvcHB1cmUgfQorICAgdGkgcG9zaXppb25pIHN1bGxhIGNvcnJpc3BvbmRlbnRlIHBhcmVudGVzaS4KKworNC4gUGVyIHNvc3RpdHVpcmUgIm51b3ZvIiBhbCBwcmltbyAidmVjY2hpbyIgaW4gMSBsaW5lYSBiYXR0aSA6cy92ZWNjaGlvL251b3ZvCisgICBQZXIgc29zdGl0dWlyZSAibnVvdm8iIGFkIG9nbmkgICJ2ZWNjaGlvIiBpbiAxIGxpbmVhIGJhdHRpIDpzL3ZlY2NoaW8vbnVvdm8vZworICAgUGVyIHNvc3RpdHVpcmUgZnJhc2kgdHJhIDIgbnVtZXJpIGRpIGxpbmVhIFsjXSAgYmF0dGkgICA6Iywjcy92ZWNjaGlvL251b3ZvL2cKKyAgIFBlciBzb3N0aXR1aXJlIHR1dHRlIGxlIG9jY29ycmVuemUgbmVsIGZpbGUgYmF0dGkJICAgICA6JXMvdmVjY2hpby9udW92by9nCisgICBQZXIgY2hpZWRlcmUgY29uZmVybWEgb2duaSB2b2x0YSBhZ2dpdW5naSAnYycJICAgIDolcy92ZWNjaGlvL251b3ZvL2djCisKKworfn5+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+CisJCUxlemlvbmUgNS4xOiBDT01FIEVTRUdVSVJFIFVOIENPTUFORE8gRVNURVJOTworCisKKyAgICoqIEJhdHRpICA6IQlzZWd1aXRvIGRhIHVuIGNvbWFuZG8gZXN0ZXJubyBwZXIgZXNlZ3VpcmUgaWwgY29tYW5kby4gKioKKworICAxLiBCYXR0aSBpbCBjb21hbmRvICAgOiAgIFBlciBwb3NpemlvbmFyZSBpbCBjdXJzb3JlIGluIGZvbmRvIGFsbG8gc2NoZXJtby4KKyAgICAgQ2nyIHRpIHBlcm1ldHRlIGRpIGltbWV0dGVyZSB1biBjb21hbmRvLgorCisgIDIuIEFkZXNzbyBiYXR0aSBpbCBjYXJhdHRlcmUgICEgIChwdW50byBlc2NsYW1hdGl2bykuICBDafIgdGkgcGVybWV0dGUgZGkKKyAgICAgZXNlZ3VpcmUgcXVhbHNpYXNpIGNvbWFuZG8gZXN0ZXJubyBjaGUgc2kgcHXyIGVzZWd1aXJlIG5lbGxhICJzaGVsbCIuCisKKyAgMy4gQWQgZXNlbXBpbyBiYXR0aSAgIGxzICAgZG9wbyBpbCAhIGUgcG9pIHByZW1pIDxJTlZJTz4uICBRdWVzdG8KKyAgICAgdmlzdWFsaXp6YSB1bmEgbGlzdGEgZGVsbGEgdHVhIGRpcmVjdG9yeSwgcHJvcHJpbyBjb21lIHNlIGZvc3NpIGluIHVuYQorICAgICAic2hlbGwiLiBVc2EgICA6IWRpciAgc2UgIGxzICBub24gZnVuemlvbmEuICAgW1VuaXg6bHMgIE1TRE9TOmRpcl0KKworLS0tPiBOT1RBOiAgRScgcG9zc2liaWxlIGluIHF1ZXN0byBtb2RvIGVzZWd1aXJlIHVuIGNvbWFuZG8gYSBwaWFjZXJlLgorCistLS0+IE5PVEE6ICBUdXR0aSBpIGNvbWFuZGkgIDogIGRldm9ubyBlc3NlcmUgdGVybWluYXRpIHByZW1lbmRvIDxJTlZJTz4KKworCisKKworfn5+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+CisJCUxlemlvbmUgNS4yOiBBTkNPUkEgU1VMTEEgU0NSSVRUVVJBIERFSSBGSUxFUworCisKKyAgICAgKiogUGVyIHNhbHZhcmUgbGUgbW9kaWZpY2hlIGFwcG9ydGF0ZSBhIHVuIGZpbGUgYmF0dGkgOncgTk9NRUZJTEUuICoqCisKKyAgMS4gQmF0dGkgIDohZGlyICBvciAgOiFscyAgcGVyIHByb2N1cmFydGkgdW5hIGxpc3RhIGRlbGxhIHR1YSBkaXJlY3RvcnkuCisgICAgIEdp4CBzYWkgY2hlIGRldmkgcHJlbWVyZSA8SU5WSU8+IGRvcG8gYXZlciBzY3JpdHRvIGlsIGNvbWFuZG8uCisKKyAgMi4gU2NlZ2xpIHVuIE5PTUVGSUxFIGNoZSBhbmNvcmEgbm9uIGVzaXN0YSwgYWQgZXMuIFRFU1QgICAuCisKKyAgMy4gQWRlc3NvIGJhdHRpOgkgOncgVEVTVCAgIChkb3ZlIFRFU1Qg6CBpbCBOT01FRklMRSBjaGUgaGFpIHNjZWx0bykuCisKKyAgNC4gUXVlc3RvIHNhbHZhIGwnaW50ZXJvIGZpbGUgKCJ0dXRvci5pdCIpICBjb24gaWwgbm9tZSBkaSBURVNULgorICAgICBQZXIgdW5hIHZlcmlmaWNhIGJhdHRpIGFuY29yYSAgOiFkaXIgICBwZXIgbGlzdGFyZSBsYSB0dWEgZGlyZWN0b3J5LgorCistLS0+IE5vdGEgY2hlIHNlIGVzY2kgZGEgVmltIGUgcmllc2VndWkgVmltIHVzYW5kbyBjb21lIE5PTUVGSUxFIFRFU1QsCisgICAgIGlsIGZpbGUgc2Fy4CB1bmEgY29waWEgZXNhdHRhIGRpICJ0dXRvci5pdCIgYWwgbW9tZW50byBkZWwgc2FsdmF0YWdnaW8uCisKKyAgNS4gT3JhIGNhbmNlbGxhIGlsIGZpbGUgYmF0dGVuZG86ICAgOiFybSAgICAgIFRFU1QgICAgW3NvdHRvIFVuaXhdIG9wcHVyZQorCQkJCSAgICAgIDohZGVsCVRFU1QJW3NvdHRvIE1TRE9TXQorCisKK35+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+fgorCQkgICAgTGV6aW9uZSA1LjM6IFNDUklWRVJFIElOIE1BTklFUkEgU0VMRVRUSVZBCisKKworICAgICAqKiBQZXIgc2FsdmFyZSB1bmEgcG9yemlvbmUgZGVsIGZpbGUsIGJhdHRpICAgOiMsIyB3IE5PTUVGSUxFICoqCisKKyAgMS4gQmF0dGkgYW5jb3JhICA6IWRpciAgbyAgOiFscyAgcGVyIHByb2N1cmFydGkgdW5hIGxpc3RhIGRlbGxhIHR1YSBkaXJlY3RvcnkKKyAgICAgZSBzY2VnbGkgdW4gTk9NRUZJTEUgYWRhdHRvLCBjb21lIGFkIGVzLiAgVEVTVCAgLgorCisgIDIuIE11b3ZpIGlsIGN1cnNvcmUgaW4gY2ltYSBhIHF1ZXN0YSBwYWdpbmEgZSBiYXR0aSAgQ1RSTC1nICBwZXIgcHJvY3VyYXJ0aQorICAgICBpbCBudW1lcm8gZGkgbGluZWEuICBSSUNPUkRBVEkgUVVFU1RPIE5VTUVSTyEKKworICAzLiBPcmEgc3Bvc3RhdGkgaW4gZm9uZG8gYWxsYSBwYWdpbmEgZSBiYXR0aSAgQ1RSTC1nIGFnYWluLgorICAgICBSSUNPUkRBVEkgQU5DSEUgUVVFU1RPIE5VTUVSTyEKKworICA0LiBQZXIgc2FsdmFyZSBTT0xPIHVuYSBwYXJ0ZSBpbiB1biBmaWxlLCBiYXR0aSAgIDojLCMgdyBURVNUCisgICAgIGRvdmUgICMsIyAgc29ubyBpIGR1ZSBudW1lcmkgY2hlIGhhaSBtZW1vcml6emF0byAoY2ltYSxmb25kbykgZSBURVNUCisgICAgIOggaWwgdHVvIE5PTUVGSUxFLgorCisgIDUuIEFuY29yYSB1bmEgdm9sdGEsIGNvbnRyb2xsYSBjaGUgaWwgZmlsZSBlc2lzdGEgY29uIGlsIGNvbWFuZG8gOiFkaXIKKyAgICAgbWEgTk9OIENBTkNFTExBUkxPLgorCisKK35+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+fgorCQkgICBMZXppb25lIDUuNDogSU5TRVJJUkUgRSBSSVVOSVJFIEZJTEUKKworCisgICAqKiBQZXIgaW5zZXJpcmUgaWwgY29udGVudXRvIGRpIHVuIGZpbGUsIGJhdHRpICAgOnIgTk9NRUZJTEUgKioKKworICAxLiBCYXR0aSAgOiFkaXIgIHBlciBhY2NlcnRhcnRpIGNoZSBpbCB0dW8gTk9NRUZJTEUgVEVTVCBzaWEgYW5jb3JhIHByZXNlbnRlLgorCisgIDIuIFBvc2l6aW9uYSBpbCBjdXJzb3JlIGFsbCdpbml6aW8gZGkgcXVlc3RhIHBhZ2luYS4KKworTk9UQTogRE9QTyBhdmVyIGVzZWd1aXRvIGlsIFBhc3NvIDMgdmVkcmFpIGFuY29yYSBsYSBMZXppb25lIDUuMy4KKyAgICAgIFF1aW5kaSBzcG9zdGF0aSBJTiBHSVUnIHBlciB0b3JuYXJlIGFuY29yYSBhIHF1ZXN0YSBMZXppb25lLgorCisgIDMuIE9yYSBpbnNlcmlzY2kgaWwgdHVvIGZpbGUgVEVTVCBjb24gaWwgY29tYW5kbyAgIDpyIFRFU1QgICBkb3ZlIFRFU1Qg6AorICAgICBpbCBub21lIGRlbCBmaWxlLgorCitOT1RBOiBJbCBmaWxlIGNoZSB0dSByaWNoaWVkaSDoIGluc2VyaXRvIGEgcGFydGlyZSBkYSBkb3ZlIHNpIHRyb3ZhIGlsIGN1cnNvcmUuCisKKyAgNC4gUGVyIHZlcmlmaWNhcmUgY2hlIHVuIGZpbGUg6CBzdGF0byBpbnNlcml0bywgdG9ybmEgaW5kaWV0cm8gY29sIGN1cnNvcmUKKyAgICAgZSBub3RhIGNoZSBjaSBzb25vIG9yYSAyIGNvcGllIGRlbGxhIExlemlvbmUgNS4zLCBxdWVsbGEgb3JpZ2luYWxlIGUgcXVlbGxhCisgICAgIGRhIHRlIGluc2VyaXRhLgorCisKK35+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+fgorCQkJICAgICAgIExlemlvbmUgNSBTT01NQVJJTworCisKKyAgMS4gIDohY29tYW5kbyAgZXNlZ3VlIHVuIGNvbWFuZG8gZXN0ZXJuby4KKworICAgICAgQWxjdW5pIGVzZW1waSB1dGlsaSBzb25vIFtpbiBNU0RPU106CisJICA6IWRpcgkJICAgICAtCXZpc3VhbGl6emEgbGlzdGEgZGlyZWN0b3J5CisJICA6IWRlbCBOT01FRklMRSAgICAgLQljYW5jZWxsYSBmaWxlIE5PTUVGSUxFLgorCisgIDIuICA6dyBOT01FRklMRSAgc2NyaXZlIHN1IGRpc2NvIGlsIGZpbGUgY2hlIHN0YWkgZWRpdGFuZG8gY29uIG5vbWUgTk9NRUZJTEUuCisKKyAgMy4gIDojLCN3IE5PTUVGSUxFICBzYWx2YSBsZSBsaW5lZSBkYSAjIGEgIyBuZWwgZmlsZSBOT01FRklMRS4KKworICA0LiAgOnIgTk9NRUZJTEUgIGxlZ2dlIGlsIGZpbGUgTk9NRUZJTEUgZGEgZGlzY28gZSBsbyBpbnNlcmlzY2UgbmVsCisgICAgICBmaWxlIGNoZSBzdGFpIGVkaXRhbmRvLCBkb3BvIGlsIHB1bnRvIGRvdmUg6CBwb3NpemlvbmF0byBpbCBjdXJzb3JlLgorCisKKworCisKKworCit+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+fn4KKwkJCSBMZXppb25lIDYuMTogSUwgQ09NQU5ETyBPUEVOIFtBUFJJXQorCisKKyAgKiogQmF0dGkgICBvICAgcGVyIGFwcmlyZSB1bmEgbGluZWEgc290dG8gaWwgY3Vyc29yZSBlIHBlciBwYXNzYXJlIGluCisgICAgIE1vZGFsaXTgIEluc2VyaW1lbnRvLiAqKgorCisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgZmlubyBhbGxhIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPi4KKworICAyLiBCYXR0aSAgIG8gICAobWludXNjb2xvKSBwZXIgYXByaXJlIHVuYSBsaW5lYSBzb3R0byBpbCBjdXJzb3JlIGUgcGVyCisgICAgIHBhc3NhcmUgaW4gTW9kYWxpdOAgSW5zZXJpbWVudG8uCisKKyAgMy4gQWRlc3NvIHJpY29waWEgbGEgbGluZWEgaW5kaWNhdGEgZGEgLS0tPgorICAgICBlIHByZW1pIDxFU0M+IHBlciB1c2NpcmUgZGFsbGEgTW9kYWxpdOAgSW5zZXJpbWVudG8uCisKKy0tLT4gRG9wbyBiYXR0dXRvICBvICBpbCBjdXJzb3JlIOggc3VsbGEgbGluZWEgYXBlcnRhIChpbiBNb2RhbGl04CBJbnNlcmltZW50bykKKworICA0LiBQZXIgYXByaXJlIHVuYSBsaW5lYSBTT1BSQSBpbCBjdXJzb3JlLCBiYXR0aSAgIE8gIFtNYWl1c2NvbGFdLCBpbnZlY2UKKyAgICAgY2hlIHVuYSAgIG8gICBtaW51c2NvbGEuIFByb3ZhIHN1bGxhIGxpbmVhIHN1Yml0byBzb3R0by4KK0FwcmkgdW5hIGxpbmVhIFNPUFJBIHF1ZXN0YSBiYXR0ZW5kbyAgTyAgcXVhbmRvIGlsIGN1cnNvcmUg6CBzdSBxdWVzdGEgbGluZWEuCisKKworCit+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+fn4KKwkJTGV6aW9uZSA2LjI6IElMIENPTUFORE8gQVBQRU5EIFtBR0dJVU5HSV0KKworCisJICAgICAqKiBCYXR0aSAgIGEgICBwZXIgaW5zZXJpcmUgdGVzdG8gRE9QTyBpbCBjdXJzb3JlLiAqKgorCisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgYWxsYSBmaW5lIGRlbGxhIHByaW1hIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPgorICAgICBiYXR0ZW5kbyAgJCAgbWVudHJlIHNlaSBpbiBNb2RhbGl04CBOb3JtYWxlLgorCisgIDIuIEJhdHRpIHVuYSAgYSAgKG1pbnVzY29sYSkgcGVyIGFnZ2l1bmdlcmUgdGVzdG8gRE9QTyBpbCBjYXJhdHRlcmUgc290dG8KKyAgICAgaWwgY3Vyc29yZS4gICAoQSBNYWl1c2NvbGEgYWdnaXVuZ2UgYWxsYSBmaW5lIGRlbGxhIGxpbmVhKS4KKworTk9UQTogRXZpdGkgY29z7CBkaSBiYXR0ZXJlICAgaSAgICwgbCd1bHRpbW8gY2FyYXR0ZXJlLCBpbCB0ZXN0byBkYSBhZ2dpdW5nZXJlLAorICAgICAgPEVTQz4sIHNwb3N0YXJlIGlsIGN1cnNvcmUgYSBzaW5pc3RyYSBlIGJhdHRlcmUgICB4ICBzb2xvIHBlciBhZ2dpdW5nZXJlCisgICAgICBxdWFsY29zYSBhbGxhIGZpbmUgZGVsbGEgbGluZWEhCisKKyAgMy4gQWRlc3NvIGNvbXBsZXRhIGxhIHByaW1hIGxpbmVhLiAgTm90YSBhbmNoZSBjaGUgbCdhZ2dpdW50YSBmdW56aW9uYSBjb21lCisgICAgIGxhIE1vZGFsaXTgIEluc2VyaW1lbnRvLCB0cmFubmUgY2hlIHBlciBpbCBsdW9nbyBkb3ZlIGlsIHRlc3RvIOggaW5zZXJpdG8uCisKKy0tLT4gUXVlc3RhIGxpbmVhIHRpIHBlcm1ldHRlcuAgZGkgZXNlcmNpdGFydGkKKy0tLT4gUXVlc3RhIGxpbmVhIHRpIHBlcm1ldHRlcuAgZGkgZXNlcmNpdGFydGkgYWQgYWdnaXVuZ2VyZSB0ZXN0byBhIGZpbmUgbGluZWEuCisKKworfn5+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+CisJICAgTGV6aW9uZSA2LjM6IFVOJ0FMVFJBIFZBUklBTlRFIERJIFJFUExBQ0UgW1JJTVBJQVpaQV0KKworCisgICAgICoqIEJhdHRpIHVuYSAgUiAgTWFpdXNjb2xhIHBlciByaW1waWF6emFyZSBwafkgZGkgdW4gY2FyYXR0ZXJlLiAqKgorCisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgYWxsYSBwcmltYSBsaW5lYSBxdWkgc290dG8sIGluZGljYXRhIGRhIC0tLT4uCisKKyAgMi4gUG9zaXppb25hIGlsIGN1cnNvcmUgYWxsJ2luaXppbyBkZWxsYSBwcmltYSBwYXJvbGEgZGlmZmVyZW50ZQorICAgICBkYWxsYSBzZWNvbmRhIGxpbmVhIGluZGljYXRhIGRhIC0tLT4gKGxhIHBhcm9sYSAiJ3VsdGltYSIpLgorCisgIDMuIEFkZXNzbyBiYXR0aSAgUiAgZSByaW1waWF6emEgaWwgcmVzdG8gZGVsIHRlc3RvIHN1bGxhIHByaW1hIGxpbmVhIGJhdHRlbmRvCisgICAgIHNvcHJhIGlsIHRlc3RvIHByZWVzaXN0ZW50ZSBwZXIgcmVuZGVyZSBsYSBwcmltYSBsaW5lYSB1Z3VhbGUgYWxsYSBzZWNvbmRhLgorCistLS0+IFBlciByZW5kZXJlIGxhIHByaW1hIGxpbmVhIHVndWFsZSBhbGxhIHVsdGltYSBzdSBxdWVzdGEgcGFnaW5hIHVzYSBpIHRhc3RpLgorLS0tPiBQZXIgcmVuZGVyZSBsYSBwcmltYSBsaW5lYSB1Z3VhbGUgYWxsYSBzZWNvbmRhLCBiYXR0aSBSIGUgaWwgbnVvdm8gdGVzdG8uCisKKyAgNC4gTm90YSBjaGUgcXVhbmRvIHByZW1pIDxFU0M+IHBlciB1c2NpcmUsIG9nbmkgdGVzdG8gbm9uIHRvY2NhdG8gcmVzdGEKKyAgICAgdWd1YWxlLgorCisKKworCit+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+fn4KKwkJICBMZXppb25lIDYuNDogU0VUIFtJTVBPU1RBXSBVTidPUFpJT05FCisKKyAgICAgICoqIEltcG9zdGEgdW4nb3B6aW9uZSBwZXIgaWdub3JhcmUgbWFpdXNjb2xlL21pbnVzY29sZQorCSBkdXJhbnRlIGxhIHJpY2VyY2Evc29zdGl0dXppb25lICoqCisKKyAxLiBSaWNlcmNhICdpZ25vcmEnIGJhdHRlbmRvOgorICAgIC9pZ25vcmEKKyAgICBSaXBldGkgbGEgcmljZXJjYSBwafkgdm9sdGUgdXNhbmRvIGlsIHRhc3RvICAgbgorCisgMi4gSW1wb3N0YSBsJ29wemlvbmUgJ2ljJyAoSWdub3JlIGNhc2UsIFtJZ25vcmEgTWFpdXNjb2xvL21pbnVzY29sb10pIGJhdHRlbmRvOgorICAgIDpzZXQgaWMKKworIDMuIEFkZXNzbyByaWNlcmNhIGFuY29yYSAnaWdub3JhJyBwcmVtZW5kbyBpbCB0YXN0byAgICBuCisgICAgUmlwZXRpIGxhIHJpY2VyY2EgcGn5IHZvbHRlIHVzYW5kbyBpbCB0YXN0byAgIG4KKworIDQuIEltcG9zdGEgbGUgb3B6aW9uaSAnaGxzZWFyY2gnIGUgJ2luY3NlYXJjaCcgW2V2aWRlbnppYV9yaWNlcmNhIHN1Yml0b10KKyAgICA6c2V0IGhscyBpcworCisgNS4gQWRlc3NvIHJpYmF0dGkgYW5jb3JhIGlsIGNvbWFuZG8gZGkgcmljZXJjYSwgZSBndWFyZGEgY29zYSBzdWNjZWRlOgorICAgIC9pZ25vcmUKKworCit+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+fn4KKwkJCSAgICAgICBMZXppb25lIDYgU09NTUFSSU8KKworCisgIDEuIEJhdHRlbmRvICBvICBhZ2dpdW5naSB1bmEgbGluZWEgU09UVE8gaWwgY3Vyc29yZSBlZCBpbCBjdXJzb3JlCisgICAgIHNpIHBvc2l6aW9uYSBzdWxsYSBsaW5lYSBhcHBlbmEgYXBlcnRhLCBpbiBNb2RhbGl04CBJbnNlcmltZW50by4KKyAgICAgQmF0dGVuZG8gIE8gIFtNYWl1c2NvbGFdIGFwcmkgbGEgbGluZWEgU09QUkEgbGEgbGluZWEgc3UgY3VpIOggaWwgY3Vyc29yZS4KKworICAyLiBCYXR0aSB1bmEgIGEgIHBlciBpbnNlcmlyZSB0ZXN0byBET1BPIGlsIGNhcmF0dGVyZSBzdSBjdWkg6CBpbCBjdXJzb3JlLgorICAgICBCYXR0ZW5kbyAgIEEgIFtNYWl1c2NvbGFdIGFnZ2l1bmdpIHRlc3RvIGFsbGEgZmluZSBkZWxsYSBsaW5lYS4KKworICAzLiBCYXR0ZW5kbyAgIFIgIFtNYWl1c2NvbGFdIGVudHJpIGluIE1vZGFsaXTgIFJpbXBpYXp6byBbUmVwbGFjZSBtb2RlXQorICAgICBlIGNpIHJlc3RpIGZpbmNo6SBub24gcHJlbWkgPEVTQz4gcGVyIHVzY2lybmUuCisKKyAgNC4gQmF0dGVuZG8gIjpzZXQgeHh4IiBpbXBvc3RpIGwnb3B6aW9uZSAieHh4IgorICAgICBCYXR0ZW5kbyAiOmggICB4eHgiIHZlZGkgbGEgZG9jdW1lbnRhemlvbmUgW2luZ2xlc2VdIHBlciBsJ29wemlvbmUgInh4eCIKKworCisKKworCisKKworfn5+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+CisJCSAgICAgICBMZXppb25lIDc6IENPTUFOREkgREkgQUlVVE8gT04tTElORQorCisKKwkJICAgICAgKiogVXNhIGlsIHNpc3RlbWEgZGkgaGVscCBvbi1saW5lICoqCisKKyAgVmltIGhhIHVuIGVzYXVyaWVudGUgc2lzdGVtYSBkaSBhaXV0byBvbi1saW5lLiAgUGVyIGNvbWluY2lhcmUsIHByb3ZhIHVuYSBkaQorICBxdWVzdGUgYWx0ZXJuYXRpdmU6CisJLSBwcmVtaSBpbCB0YXN0byA8QUlVVE8+IChzZSBjZSBuJ+ggdW5vKQorCS0gcHJlbWkgaWwgdGFzdG8gPEYxPiAgICAoc2UgY2UgbifoIHVubykKKwktIGJhdHRpICAgOmhlbHAgIDxJTlZJTz4gIE9QUFVSRSAgIDpoIDxJTlZJTz4KKworICBCYXR0aSAgIDpxIDxJTlZJTz4gICBwZXIgY2hpdWRlcmUgbGEgZmluZXN0cmEgZGkgaGVscC4KKworICBQdW9pIHRyb3ZhcmUgYWl1dG8gc3UgcXVhc2kgdHV0dG8sIGRhbmRvIHVuIGFyZ29tZW50byBhbCBjb21hbmRvICI6aGVscCIKKyAgUHJvdmEgcXVlc3RpIChub24gZGltZW50aWNhcmUgZGkgcHJlbWVyZSA8SU5WSU8+KToKKworCTpoZWxwIHcKKwk6aGVscCBjXzxUCisJOmhlbHAgaW5zZXJ0LWluZGV4CisJOmhlbHAgdXNlci1tYW51YWwKKworCit+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+fn4KKwkJICAgICAgIExFWklPTkUgODogUFJFUEFSQSBVTk8gU0NSSVBUIElOSVpJQUxFCisKKwkJCSAgKiogQXR0aXZhIGxlIG9wemlvbmkgVmltICoqCisKKyAgVmltIGhhIG1vbHRlIHBp+SBvcHppb25pIGRpIFZpLCBtYSBtb2x0ZSBkaSBlc3NlIHNvbm8gcHJlZGVmaW5pdGUgaW5hdHRpdmUuCisgIFBlciBjb21pbmNpYXJlIGEgdXNhcmUgcGn5IG9wemlvbmksIGRldmkgcHJlcGFyYXJlIHVuIGZpbGUgInZpbXJjIi4KKworICAxLiBDb21pbmNpYSBhIGVkaXRhcmUgaWwgZmlsZSAidmltcmMiLCBhIHNlY29uZGEgZGVsIHR1byBzaXN0ZW1hIG9wZXJhdGl2bzoKKwk6ZWRpdCB+Ly52aW1yYwkJCXBlciBVbml4CisJOmVkaXQgJFZJTS9fdmltcmMJCXBlciBNUy1XaW5kb3dzCisKKyAgMi4gT3JhIGluc2VyaXNjaSBpbCBmaWxlICJ2aW1yYyIgZCdlc2VtcGlvOgorCisJOnJlYWQgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0KKworICAzLiBTY3JpdmkgaWwgZmlsZSBjb246CisKKwk6d3JpdGUKKworICBMYSBwcm9zc2ltYSB2b2x0YSBjaGUgYXByaSBWaW0sIHZlZHJhaSBpbiB1c28gbGEgY29sb3JhemlvbmUgc2ludGF0dGljYS4KKyAgUHVvaSBhZ2dpdW5nZXJlIGEgcXVlc3RvIGZpbGUgInZpbXJjIiB0dXR0ZSBsZSB0dWUgaW1wb3N0YXppb25pIHByZWZlcml0ZS4KKworfn5+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+CisgIFF1aSBmaW5pc2NlIGxhIEd1aWRhIGEgVmltLiAgSWwgc3VvIGludGVudG8g6CBkaSBmb3JuaXJlIHVuYSBicmV2ZSBwYW5vcmFtaWNhCisgIGRlbGwnRWRpdG9yIFZpbSwgY2hlIHRpIGNvbnNlbnRhIGRpIHVzYXJlIGwnRWRpdG9yIGFiYmFzdGFuemEgZmFjaWxtZW50ZS4KKyAgUXVlc3RhIGd1aWRhIOggbGFyZ2FtZW50ZSBpbmNvbXBsZXRhIHBvaWNo6SBWaW0gaGEgbW9sdGlzc2ltaSBhbHRyaSBjb21hbmRpLgorICBQdW9pIGFuY2hlIGxlZ2dlcmUgaWwgbWFudWFsZSB1dGVudGU6ICI6aGVscCB1c2VyLW1hbnVhbCIuCisKKyAgUGVyIHVsdGVyaW9yZSBsZXR0dXJhIGUgc3R1ZGlvLCByYWNjb21hbmRpYW1vOgorCVZpbSAtIFZpIEltcHJvdmVkIC0gZGkgU3RldmUgT3VhbGxpbmUgICAgIEVkaXRvcmU6IE5ldyBSaWRlcnMKKyAgSWwgcHJpbW8gbGlicm8gY29tcGxldGFtZW50ZSBkZWRpY2F0byBhIFZpbS4gVXRpbGUgc3BlY2llIHBlciBwcmluY2lwaWFudGkuCisgIENvbnRpZW5lIG1vbHRpIGVzZW1waSBlIGZpZ3VyZS4KKyAgVmVkaSBodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy9jbGljazUuaHRtbAorCisgIFF1ZXN0J2FsdHJvIGxpYnJvIOggcGn5IHN1IFZpIGNoZSBzdSBWaW0sIG1hIOggcHVyZSBjb25zaWdsaWF0bzoKKwlMZWFybmluZyB0aGUgVmkgRWRpdG9yIC0gZGkgTGluZGEgTGFtYiBlIEFybm9sZCBSb2JiaW5zCisJRWRpdG9yZTogTydSZWlsbHkgJiBBc3NvY2lhdGVzIEluYy4KKyAgRScgdW4gYnVvbiBsaWJybyBwZXIgaW1wYXJhcmUgcXVhc2kgdHV0dG8gY2nyIGNoZSBwdW9pIHZvbGVyIGZhcmUgY29uIFZpLgorICBOZSBlc2lzdGUgdW5hIHRyYWR1emlvbmUgaXRhbGlhbmEsIGJhc2F0YSBzdSB1bmEgdmVjY2hpYSBlZGl6aW9uZS4KKworICBRdWVzdGEgZ3VpZGEg6CBzdGF0YSBzY3JpdHRhIGRhIE1pY2hhZWwgQy4gUGllcmNlIGUgUm9iZXJ0IEsuIFdhcmUsCisgIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcywgdXNhbmRvIGlkZWUgZm9ybml0ZSBkYSBDaGFybGVzIFNtaXRoLAorICBDb2xvcmFkbyBTdGF0ZSBVbml2ZXJzaXR5IC0gRS1tYWlsOiBid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUKKyAgTW9kaWZpY2F0byBwZXIgVmltIGRhIEJyYW0gTW9vbGVuYWFyLgorICBTZWduYWxhcmUgcmVmdXNpIGFkIEFudG9uaW8gQ29sb21ibyAtIEUtbWFpbDogYW50b25pby5jb2xvbWJvQGpyYy5pdAorfn5+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+CmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLmphLmV1YyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuamEuZXVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzUzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmphLmV1YwpAQCAtMCwwICsxLDgxMSBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICBWIEkgTSC2tSDL3CAopcGl5aG8pcil6qWipespIKTYIKToIKSmIKSzIKS9ICAgICAgICAtICAgIFZlcnNpb24gMS41ICAgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgIFZpbSCkz6GipLOkzqXBpeWhvKXIpeqloqXrpMfA4szApLmk66TLpM/Cv6S5pK6k68T4pM6ls6XepfOlyaTyyPekqKS/CisgICAgIMjzvu+ky7avzs+kyqWopcelo6W/obykx6S5oaOks6TOpcGl5aG8pcil6qWipeukz6GipKKkyqS/pKwgVmltCisgICAgIKTyy/zHvaWopcelo6W/obykyKS3pMa7yKSkpLOkyqS7pOuk6KSmpMukyqTrpM6ky729yqykyqWzpd6l86XJpMukxKSkpMYKKyAgICAgwOLMwKTypLmk66TopKakyqTDpMakpKTepLmhoworCisgICAgIKXBpeWhvKXIpeqloqXrpPK0sM67pLmk66TOpMvJrM3XpMq7/rTWpM+horPQpKikv6Wzpd6l86XJpPK77qS5pM6ky6TJpOwKKyAgICAgpMCksbv+tNak8rvIpKakzqSrpMuk4qTopOqk3qS5pKyhoqSqpOikvTI1ocEzMMqspMekuaGjCisKKyAgICAgs9ik1qWzpd6l86XJpMukz6SzpM7KuL7PpPLK0bm5pLmk66TipM6k4qSipOqk3qS5oaPO/b2spPK7z6ThpOvBsKTLpbMKKyAgICAgpdShvKTyuu7ArqS3pN6kt6TnpKYoInZpbXR1dG9yIqS3pL+kyqTppNChorT7pMuls6XUobyktaTspMakpKTepLkpoaMKKworICAgICCks6TOpcGl5aG8pcil6qWipeukrKGiu8ikpqSzpMikx7PQpKik6aTspOu7xcHIpN+ky6TKpMOkxqSkpOuks6TIpPKhor+0CisgICAgIKS3pMakqqSrpMqksaTspNCkyqTqpN6ku6TzoaPAtaS3pK+z2L2spLmk66TLpM+ls6XepfOlyaTyvMK63aTLu+6ktaTKpLEKKyAgICAgpOyk0KTKpOmkyqSkpM6kx6S5oaPKuL7PpPLGyaTzpMCkwKSxpMqk6aTQoaKkraTDpMjLuqTspMakt6TepKSk3qS5IaGjCisKKyAgICAgpLWkoaGiQ2Fwc6XtpcOlryhTaGlmdC1Mb2NrKaWtobykrLKhpLWk7KTGpKSkyqSkpLOkyKTys87Hp6S3pL+45aGiCisgICAgILLozMyky6XspcOluaXzMS4xIKSswbTJ9Mm9vKiktaTspOukyKSzpO2k3qTHoaJqIKWtobyk8rKhpLekxqWrobylvaXrpPIKKyAgICAgsNzGsKS3pN6kt6TnpKahoworfn5+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+CisJCQkgpeylw6W5pfMgMS4xOiAgpauhvKW9peukzrDcxrAKKworCisgICAgICAgKiogpauhvKW9peuk8rDcxrCkuaTrpMukz6GivKiktaTspOvNzaTLIGgsaixrLGwgpPKyoaS3pN6kuSAqKgorCSAgICAgXgorCSAgICAgawkJICAgIKXSpfOlyDogIGggpa2hvKTPurjK/bj+pMuw3MawpLek3qS5oaMKKyAgICAgICA8IGgJIGwgPgkJICAgICBsIKWtobykz7Gmyv24/qTLsNzGsKS3pN6kuaGjCisJICAgICBqCQkJICAgICBqIKWtobykz7K8zPCw9aWtobykzqTopKakyqWtobykx6S5oaMKKwkgICAgIHYKKyAgMS4gsNzGsKTLtLek7KTrpN6kx6Gipbmlr6Xqobyl86THpauhvKW9peuw3MawpLWku6TepLek56SmoaMKKworICAyLiCyvKTYpM6lraG8KGoppPKyoaS3pMSkxaSxpOukyKGiz6LCs6S3pMaw3MawpMekraTepLmhoworLS0tPiCks6TspMe8oaTOpeylw6W5pfOky7DcxrCkuaTryv3LoaSspO+kq6TqpN6kt6S/pM2howorCisgIDMuILK8pNikzqWtobyk8rvIpMOkxqGipeylw6W5pfMxLjIgpMuw3MawpLek3qS3pOekpqGjCisKK05PVEU6ILK/pPKlv6Wkpdekt6TGpKSk66SryL2k6aTKpK+kyqTDpL+k6aGiPEVTQz6k8rKhpLekxqXOobyl3qXrpeKhvKXJpMukt6TeCisgICAgICCkuaGjpL2k7KSrpOnG/s7PpLek6KSmpMikt6TGpKSkv6Wzpd6l86XJpPK6xsb+zs+kt6TepLek56SmoaMKKworTk9URTogpauhvKW9peulraG8pMek4rDcxrCkx6StpN6kuaGjpLekq6S3IGhqa2wgpPK7yM3RpLmk66SzpMiky7Dsxdm0t6TspMakt6TeCisgICAgICCkqKTQoaKkz6TrpKuky8KupK+w3MawpLmk66SzpMikrKTHpK2k66THpLek56SmoaMKKworfn5+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+CisJCQkgpeylw6W5pfMgMS4yOiBWSU0gpM61r8awpMi9qs67CisKKworICAhISBOT1RFOiCwyrK8pM6koqTppOak66W5pcalw6XXpPK51KSmwbCky6GipLOkzqXspcOluaXzpPLGyaTfpN6kt6TnpKYhIQorCisgIDEuIDxFU0M+pa2hvKTysqGkt6TepLek56SmoaMos868wqTLpc6hvKXepeul4qG8pcmky6S5pOukv6ThKQorCisgIDIuILyhpM6k6KSmpMulv6Wkpdc6CQk6cSEgPEVOVEVSPgorCistLS0+IKSzpOyky6TopOrK1L24pLekv8bizcak8srdwriku6S6pMulqKXHpaOlv6SsvarOu6S3pN6kuaGjCisgICAgIMrUvbjG4s3GpPLK3cK4pLekxr2qzrukuaTrpMikraTPvKGkzqTopKaky6W/paSl16S3pN6kuToKKwkJCQk6d3EgIDxFTlRFUj4KKworICAzLiClt6Wnpeul16XtpfOl16XIpKuk6aXBpeWhvKXIpeqloqXrpPK7z6ThpOuky6TPpbOl3qXzpcmk8qW/paSl16S3pN6kuaGjCisgICAgIKS9pM6ls6XepfOlyaTPOgkJdmltdHV0b3IgPEVOVEVSPgorICAgICDEzL7vpM+ks6SmpMekt6TnpKY6CXZpbSB0dXRvciA8RU5URVI+CisKKy0tLT4gJ3ZpbScgpM8gVmltIKWopcelo6W/pM61r8awpPKhoid0dXRvcicgpM/K1L24pLekv6SkpdWloaWkpeuk8rDVzKOkt6TepLmhoworCisgIDQuIKSzpOyk3qTHpM6luaXGpcOl16Tys9CkqLyrv66krKTEpKSkv6TKpOmk0KGipbmlxqXDpdcgMSCkq6TpIDMgpN6kx6TyvMIKKyAgICAgut2ky7vupLekxqGiVmltIKTyMcXZvarOu6S3pMakq6Tpusak07WvxrCkt6TepLek56SmoaOkvaTspKuk6aXspcOluaXzCisgICAgIDEuM6TepMelq6G8pb2l66TysNzGsKS1pLuk3qS3pOekpqGjCit+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+fn4KKwkJICAgICAgIKXspcOluaXzIDEuMzogpcalraW5pcjK1L24IC0guu+9/AorCisKKyAgICAqKiClzqG8pd6l66XiobylyaTLpMalq6G8pb2l66TOsrykzsq4u/qk8rrvvfykuaTrpMukzyB4IKTysqGkt6TepLkgKioKKworICAxLiCwyrK8pM4gLS0tPiCkyLWtpLWk7KS/pLWk7KS/udSky6WrobylvaXrpPKw3MawpLek3qS3pOekpqGjCisKKyAgMi4gtNaw46SkpPK9pMC1pLmk66S/pOGky6Giuu+9/KS5pOu6x73ppM7KuLv6pN6kx6WrobylvaXrpPKw3MawpLek3qS5oaMKKworICAzLiDJ1Mmszdekysq4u/qk8iB4IKTysqGkt6TGuu+9/KS3pN6kt6TnpKahoworCisgIDQuIMq4pKzAtaS3pK+kyqTrpN6kxyCluaXGpcOl1yAyIKSrpOkgNCCk8rerpOrK1qS3pN6kt6TnpKahoworCistLS0+IKS9pM4gpKakpqS1pK4gpM8gpMSkxKStpK0gpPIgpLOkqKSopMakxiCkyKTTpM+kzaS/pL8KKworICA1LiC51KSswLWkt6SvpMqkw6S/pOmhoqXspcOluaXzIDEuNCCky7DcpOqk3qS3pOekpqGjCisKK05PVEU6IMG0pMakzqXspcOluaXzpPLEzKS4pMahorPQpKik6KSmpMikuaTrpM6kx6TPpMqkr7zCut2ky6TkpMOkxqTfpN6kt6TnpKahoworCisKKworCit+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+fn4KKwkJICAgICAgIKXspcOluaXzIDEuNDogpcalraW5pcjK1L24IC0gwd7G/gorCisKKwkgKiogpc6hvKXepeul4qG8pcmky6TGpcalraW5pcik8sHexv6kuaTrpMukzyBpIKTysqGkt6TepLkgKioKKworICAxLiCwyrK8pM4gLS0tPiCkyLWtpLWk7KS/pLWk7KS/use96aTOudSky6WrobylvaXrpPKw3MawpLek3qS3pOekpqGjCisKKyAgMi4gMbnUzNyk8jK51MzcpMjGsaS4zc2ky6S5pOukv6ThpMuhoqXGpa2luaXIpPLB3sb+pLekyqSxpOyk0KTKpOmkyqSksMwKKyAgICAgw9akzryhpM7KuLv6pMulq6G8pb2l66TysNzGsKS3pN6kuaGjCisKKyAgMy4gaSClraG8pPKyoaS3pMakq6TpoaLEybLDpKzJrM3XpMrKuLv6pPKlv6Wkpdekt6TepLek56SmoaMKKworICA0LiC01rDjpKSk8r2kwLWkt6S/pOkgPEVTQz4gpPKyoaS3pMals6XepfOlyaXiobylyaTLzOGk6qGiwLWkt6SkyrikyworICAgICCkyqTrzc2ky6W5pcalw6XXIDIgpKuk6SA0IKTyt6uk6srWpLek3qS3pOekpqGjCisKKy0tLT4gpLOkziCky6TPIMKtpOqkyqSkIKXGpa2luaXIIKSipOuhoworLS0tPiCks6TOILnUIKTLpM8gtPakxKSrIMKtpOqkyqSkIKXGpa2luaXIIKSsIKSipOuhoworCisgIDUuIMHexv6kzsr9y6GkrKTvpKukw6S/pOmyvKTOpeylw6W5pfMxpM7N18zzpPK4q6TepLek56SmoaMKKworCisKK35+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+fgorCQkJCaXspcOluaXzIDEgzdfM8worCisKKyAgMS4gpauhvKW9peukz8zwsPWlraG8pOKkt6SvpM8gaGprbCClraG8pMew3MawpLek3qS5oaMKKwkgaCAourgpCQlqICiyvCkgICAgICAgICBrICi+5SkJICAgIGwgKLGmKQorCisgIDIuIFZpbSCk8rWvxrCkuaTrpMukz6XXpe2l86XXpcikq6TpIHZpbSCl1aWhpaSl68y+IDxFTlRFUj4gpMilv6Wkpdekt6TepLmhoworCisgIDMuIFZpbSCk8r2qzrukuaTrpMukzwkgICA8RVNDPiA6cSEJIDxFTlRFUj4gIKTIpb+lpKXXpLek3qS5KMrRubmk8sfLtP4poaMKKyAgICAgICAgICAgICAgIKTipLekr6TPCSAgIDxFU0M+IDp3cQkgPEVOVEVSPiAgpMilv6Wkpdekt6TepLkoytG5uaTyyt3CuCmhoworCisgIDQuIKWrobylvaXrpM6yvKTOyri7+qTyuu+9/KS5pOuky6TPoaKlzqG8pd6l66XiobylyaTHIHggpMilv6Wkpdekt6TepLmhoworCisgIDUuIKWrobylvaXrpM6wzMPWpMvKuLv6pPLB3sb+pLmk66TLpM+hoqXOobyl3qXrpeKhvKXJpMcgaSCkyKW/paSl16S3pN6kuaGjCisJIGkgICAgIKXGpa2luaXIpM6lv6WkpdcJPEVTQz4KKworTk9URTogPEVTQz4gpa2hvKTysqGkuaTIpc6hvKXepeul4qG8pcmky7DcudSkt6TepLmho6S9pM663aGitNaw46TDpL+k6sb+zs/F08PmCisgICAgICCkzqWzpd6l86XJpPK86KTqvsOkuaSzpMikrKTHpK2k3qS5oaMKKworpLWkxqGiwrOksaTGpeylw6W5pfMgMiCk8rvPpOGk3qS3pOekpqGjCisKKworfn5+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+CisJCQkgICCl7KXDpbml8yAyLjE6ILrvvfyls6XepfOlyQorCisKKwkgICAgKiogw7G47KTOy/bI+KTepMek8rrvvfykuaTrpMukzyBkdyCkyKW/paSl16S3pN6kt6TnpKYgKioKKworICAxLiClzqG8pd6l66XiobylyaTHpKKk66SzpMik8rPOx6ekuaTrpL+k4aTLIDxFU0M+IKTysqGkt6TepLek56SmoaMKKworICAyLiCwyrK8pM4gLS0tPiCkyLWtpLWk7KS/pLWk7KS/udSky6WrobylvaXrpPKw3MawpLek3qS3pOekpqGjCisKKyAgMy4gvsOkt6S/pKTDsbjspM7A6MaspMulq6G8pb2l66TysNzGsKS3pN6kt6TnpKahoworCisgIDQuIMOxuOyk8rrvvfykuaTrpL+k4aTLIGR3IKTIpb+lpKXXpLek3qS3pOekpqGjCisKKyAgTk9URTogpb+lpKXXpLmk66TIoaJkdyCkyKSkpKbKuLv6pKyluaWvpeqhvKXzpM66x7K8udSky7i9pO+k7KTepLmhoworICAgICAgICClv6Wkpdek8rTWsOOkw6TGpLek3qTDpL+7/qTLpM8gPEVTQz4gpPKyoaS3pMak5KTqxL6kt6TepLek56SmoaMKKworLS0tPiCks6TOIMq4ILvmIKTLpM8gpKSkr6TEpKukziCkv6TOpLekpCDJrM3XpM6kyqSkIMOxuOwgpKwgtN6k3qTspMYgpKSk3qS5oaMKKworICA1LiAzIKSrpOkgNCCk3qTHpPLKuKSswLWkt6SvpMqk66TepMe3q6Tqytakt6Gipeylw6W5pfMgMi4yIKTLsNyk6qTepLek56SmoaMKKworCisKK35+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+fgorCQkgICAgICAgpeylw6W5pfMgMi4yOiCkvaTOwr6kzrrvvfyls6XepfOlyQorCisKKwkgICAgICoqILnUpM7L9sj4pN6kx6Tyuu+9/KS5pOuky6TPIGQkIKTIpb+lpKXXpLek3qS3pOekpiAqKgorCisgIDEuIKXOobyl3qXrpeKhvKXJpMekoqTrpLOkyKTys87Hp6S5pOukzqTLIDxFU0M+IKTysqGkt6TepLek56SmoaMKKworICAyLiCwyrK8pM4gLS0tPiCkyLWtpLWk7KS/pLWk7KS/udSky6WrobylvaXrpPKw3MawpLek3qS3pOekpqGjCisKKyAgMy4gwLWkt6Skyrikzsv2yPik2KWrobylvaXrpPKw3MawpLek3qS3pOekpii6x73ppM4gLiCkzrjlpMekuSmhoworCisgIDQuILnUy/ak3qTHuu+9/KS5pOukzqTLIGQkIKTIpb+lpKXXpLek3qS3pOekpqGjCisKKy0tLT4gw6+kq6SspLOkzrnUpM66x7jlpPIyxdmlv6Wkpdekt6TepLekv6GjIDLF2aW/paSl16S3pN6kt6S/oaMKKworCisgIDUuIKTJpKakpKSmpLOkyKSrzf2y8qS5pOukv6ThpMuhoqXspcOluaXzIDIuMyCk2LDcpOqk3qS3pOekpqGjCisKKworCisKKworfn5+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+CisJCSAgICAgICBMZXNzb24gMi4zOiCls6XepfOlyaTIzNzFqrjsCisKKworICC67738pbOl3qXzpckgZCCkzrfBvLCkz7yhpM7NzaTLpMqkw6TGpKSk3qS5OgorCisJIFuy87/0XSAgIGQgICDM3MWquOwgICAgICCk4qS3pK+kzyAgICAgIGQgICBbsvO/9F0gICDM3MWquOwKKyAgpL2k7KS+pOw6CisgICAgsvO/9CAgIC0gpL2kzqWzpd6l86XJpPKyv7Lzt6uk6srWpLmkqyi+ys6sssTHvSwgvsrOrKS3pL+7/qTPID0xKaGjCisgICAgZCAgICAgIC0guu+9/KWzpd6l86XJoaMKKyAgICDM3MWquOwgLSCyv6TLwtCkt6TGxq+kraSrpLGk66SrKLDKsryky7XzpLKk3qS5KaGjCisKKyAgzNzFqrjssOzN9zoKKyAgICB3IC0gpauhvKW9peuwzMPWpKuk6bb1x/Kk8rTepODDsbjspM7L9sj4pN6kx6GjCisgICAgZSAtIKWrobylvaXrsMzD1qSrpOm29cfypPK03qTepMqkpMOxuOykzsv2yPik3qTHoaMKKyAgICAkIC0gpauhvKW9peuwzMPWpKuk6bnUy/ak3qTHoaMKKworTk9URTogy8G4saS3pL+kpL/NpM+hoqXOobyl3qXrpeKhvKXJpMukxqWzpd6l86XJpMqkt6TLzNzFqrjspPKyoaS3pMYKKyAgICAgIKTfpN6kt6TnpKaho6WrobylvaXrpKzM3MWquOyw7M33pMe8qKS1pOyk67DMw9aky7DcxrCkuaTrpM+kuqTHpLmhoworCisKKworCit+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+fn4KKwkJICAgICAgpeylw6W5pfMgMi40OiCkvaTssMqzsKTOt8GkzqWzpd6l86XJCisKKworCQkqKiC51MG0ws6k8rrvvfykuaTrpMukzyBkZCCkyKW/paSl16S3pN6kt6TnpKYgKioKKworICC51MG0ws6kzrrvvfykz8nRyMuky7nUpMqkprrutsikyqTOpMeholZpbSCkzsDft9e81KTPudSk8rrvvfykuaTrpM6ky6TPoaIKKyAgw7Gky87zxuKky6TGMrLzIGQgpPKlv6WkpdekuaTryv2krLTKw7GkwKTtpKakyMi9w8ekt6TepLekv6GjCisKKyAgMS4gsryky6SipOuw7M+ipM6l1aXsobyluqTOMrnUzNyky6WrobylvaXrpPKw3MawpLek3qS3pOekpqGjCisgIDIuIGRkICCkyKW/paSl16S3pMa51KTyuu+9/KS3pN6kt6TnpKahoworICAzLiCkx6TPNLnUzNyky7DcxrCkt6TGpN+k3qS3pOekpqGjCisgIDQuIDJkZCAgpMilv6Wkpdekt6TGMrnUuu+9/KS3pMak36TepLek56SmoaMKKyAgICAgKLLzv/QtpbOl3qXzpcktzNzFqrjsICCkzrfBvLCk8rvXpKS90KS3pN6kt6TnpKYpCisKKyAgICAgIDEpICCl0KXppM/A1qSkoaIKKyAgICAgIDIpICCkxKTepOmkyqSkpOKkzqTPs9qkt6SkoaIKKyAgICAgIDMpICCluaXfpeykz8DEpKShogorICAgICAgNCkgILvkpM+81qTypOKkw6TGpKSk66GiCisgICAgICA1KSAgu/6316Ssu/6576TyufCksqTroaIKKyAgICAgIDYpICC6vcX8pM+0xaSkCisgICAgICA3KSAgpaql3qWopeKlyqG8CisKK35+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+fgorCQkJIKXspcOluaXzIDIuNTogpOSk6sS+pLels6XepfOlyQorCisKKyAgKioguse45aTOpbOl3qXzpcmk8rzopOq+w6S5pMukzyB1IKTysqGkt6TepLmho1UgpM+51MG0ws6kzrzovsOkx6S5oaMgKioKKworICAxLiCwyrK8pM4gLS0tPiCkyLWtpLWk7KS/pLWk7KS/udSky6WrobylvaXrpPKw3MawpLehorrHvemkzrTWsOOkpKTLpauhvKW9pesKKyAgICAgpPKw3MawpLek3qS3pOekpqGjCisgIDIuIHggpPKlv6Wkpdekt6TGpKSk6aTKpKTA6MaspM7KuLv6pPK67738pLek3qS3pOekpqGjCisgIDMuIKS1pKGhonUgpPKlv6Wkpdekt6TGuse45aTLvMK51KS3pL+ls6XepfOlyaTyvOik6r7DpLek3qS3pOekpqGjCisgIDQuILqjxdmkz6GieCCk8rvIzdGkt6TGuO2k6qTywbSkxr2kwLWkt6TepLek56SmoaMKKyAgNS4gwufKuLv6pM4gVSCk8qW/paSl16S3pMahornUpPK4taTOvvXC1qTLzOGkt6TepLek56SmoaMKKyAgNi4gdSCk8qW/paSl16S3pMbEvsGwpM4gVSCls6XepfOlyaTyvOi+w6S3pN6kt6TnpKahoworICA3LiCkx6TPpbOl3qXzpcmk8rrGvMK51KS5pOukzqTLIENUUkwtUiAoQ1RSTCCk8rKhpLekv6TepN4gUiCk8sLHpMQppPIKKyAgICAgv/Sy86W/paSl16S3pMak36TepLek56SmKLzovsOkzrzovsMpoaMKKworLS0tPiCks6TOpM651KTOpM601rDjpKSk8r2kwLWhuaS3oaK45aTHpL2k7KTppM69pMC1pPKk8rzovsOkt6TepN6kuaS5oaMKKworICA4LiCks6TspM+kyKTGpOLK2M34pMqls6XepfOlyaTHpLmho6S1pKGl7KXDpbml8yAyIM3XzPOky7DcpOqk3qS3pOekpqGjCisKKworCisKK35+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+fgorCQkJCaXspcOluaXzIDIgzdfM8worCisKKyAgMS4gpauhvKW9peuwzMPWpKuk6cOxuOykzsv2yPik3qTHpPK67738pLmk66TLpM8gZHcgpMilv6Wkpdekt6TepLmhoworCisgIDIuIKWrobylvaXrsMzD1qSrpOm51KTOy/bI+KTepMek8rrvvfykuaTrpMukzyBkJCCkyKW/paSl16S3pN6kuaGjCisKKyAgMy4gudTBtMLOpPK67738pLmk66TLpM8gZGQgpMilv6Wkpdekt6TepLmhoworCisgIDQuIKXOobyl3qXrpeKhvKXJpMekzqWzpd6l86XJt8G8sKTPCisKKyAgIFuy87/0XSAgIKWzpd6l86XJICAgzNzFqrjsICAgICCk4qS3pK+kzyAgICCls6XepfOlySAgIFuy87/0XSAgIMzcxaq47AorICAgICCkvaTspL6k7DoKKyAgICAgICCy87/0ICAgICAtIKS9pM6ls6XepfOlyaTysr+y87erpOrK1qS5pKuhoworICAgICAgIKWzpd6l86XJIC0guu+9/CBkIKTOzuCkx7K/pPKkuaTrpKuhoworICAgICAgIMzcxaq47CAgIC0gw7G47CB3IKTkudTL9iAkIKTKpMmkzs7gpMeyv6TLwtCkt6TGxq+kraSrpLGk66SroaMKKworICA1LiDBsLLzpM7GsLrupPK86L7DpLk6CXUgICAovq7KuLv6IHUpCisgICAgILnUwbTCzqTOytG5uaTyvOi+w6S5OglVICAgKMLnyri7+iBVKQorICAgICC86L7DpLekzrzovsOktzoJCUNUUkwtUgorCisKK35+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+fgorCQkJICAgpeylw6W5pfMgMy4xOiDFvaTqydWksaWzpd6l86XJCisKKworICAgICoqILrHuOWky7rvvfyktaTspL+51KTypauhvKW9peukzrjlpMvFvaTqydWksaTrpMukzyBwIKTypb+lpKXXpLek3qS5ICoqCisKKyAgMS4gsMqyvKTOw8rN7qTOuse96aTOudSky6WrobylvaXrpPKw3MawpLek3qS3pOekpqGjCisKKyAgMi4gZGQgIKTIpb+lpKXXpLekxrnUpPK67738pLeholZpbSCkzqXQpcOl1aWhpMuzyse8pLek3qS3pOekpqGjCisKKyAgMy4guu+9/KS3pL+51KSsy9zN6KSipOuk2aStsMzD1qTOvuWkzrnUpN6kx6GipauhvKW9peuk8rDcxrCktaS7pN6kt6TnpKahoworCisgIDQuIKXOobyl3qXrpeKhvKXJpMcgcCCk8qW/paSl16S3pMazyse8pLekv7nUpPKy6MzMpMvM4aS3pN6kuaGjCisKKyAgNS4gvefI1qSswLWkt6SvpMqk683NpMuluaXGpcOl1yAyIKSrpOkgNCCk8rerpOrK1qS3pN6kt6TnpKahoworCisgICAgIGQpILWuyv2k4rPYpNaks6TIpKykx6StpOs/CisgICAgIGIpIKW5pd+l7KTPwMSkpKGiCisgICAgIGMpIMPOt8OkyKTPs9ik1qTipM6hogorICAgICBhKSCl0KXppM/A1qSkoaIKKworCisKK35+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+fgorCQkJIKXspcOluaXzIDMuMjogw9akrbS5pKils6XepfOlyQorCisKKwkgICAqKiClq6G8pb2l66TOsrykzsq4u/qk8sPWpK20uaSopOuky6TPIHIgpPKlv6Wkpdekt6TepLkgKioKKworICAxLiCwyrK8pM4gLS0tPiCkyLWtpLWk7KS/pLWk7KS/use96aTOudSky6WrobylvaXrpPKw3MawpLek3qS3pOekpqGjCisKKyAgMi4guse96aTOtNaw46SkpM7A6MaspMulq6G8pb2l66TysNzGsKS3pN6kt6TnpKahoworCisgIDMuIHIgpMilv6Wkpdekt6GitNaw46TDpMakpKTryri7+qTyw9akrbS5pKik66GiwLWkt6Skyri7+qTypb+lpKXXpLek3qS3pOekpqGjCisKKyAgNC4guse96aTOudSkrMC1pLekr6TKpOuk3qTHpbmlxqXDpdcgMiCkq6TpIDMgpPK3q6Tqytakt6TepLek56SmoaMKKworLS0tPiAgpLOkzrnnpPK/zc7PpLekv7v+pM2hoqS9pM6/zaTPtPakxKSrzOSw46TDpL+lraG8pPKyoaS3pOKkt6S/IQorLS0tPiAgpLOkzrnUpPLG/s7PpLekv7v+pMuhoqS9pM6/zaTPtPakxKSrtNaw46TDpL+lraG8pPKyoaS3pN6kt6S/IQorCisgIDUuIKS1pKGhoqXspcOluaXzIDMuMiCky7DcpOqk3qS3pOekpqGjCisKK05PVEU6ILzCut2ky7vupLek3qS3pOekpqGjt+ikt6TGs9CkqKTrpMCksaTLpM+kt6TKpKSks6TIoaMKKworCisKK35+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+fgorCQkJpeylw6W5pfMgMy4zOiDK0bm5pbOl3qXzpckKKworCisJICoqIMOxuOykzrDsyfShoqTipLekr6TPwbTCzqTyytG5uaS5pOuky6TPIGN3IKTIpb+lpKXXpLek3qS5ICoqCisKKyAgMS4gsMqyvKTOIC0tLT4gpMi1raS1pOykv6S1pOykv7rHvemkzrnUpMulq6G8pb2l66TysNzGsKS3pN6kt6TnpKahoworCisgIDIuIGx1YncgpM4gdSCkzrDMw9aky6WrobylvaXrpPKw3MawpLek3qS3pOekpqGjCisKKyAgMy4gY3cgpMilv6Wkpdekt6GiwLWkt6Skw7G47KTypb+lpKXXpLek3qS3pOekpiiks6TOvuy55yAnaW5lJyCkyKW/paSl1ymhoworCisgIDQuILyhpM601rDjpKQoytG5uaS5pNmkrcq4u/qkzsDoxqwppMuw3MawpLmk66S/pOGkyyA8RVNDPiCk8qW/paSl16S3pN6kuaGjCisKKyAgNS4guse96aTOudSkrLyhpM651KTOzc2ky6TKpOuk3qTHpbmlxqXDpdcgMyCkyCA0IKTyt6uk6srWpLek3qS5oaMKKworLS0tPiBUaGlzIGx1YncgaGFzIGEgZmV3IHdwdGZkIHRoYXQgbXJyZiBjaGFuZ2luZyB1c2YgdGhlIGNoYW5nZSBjb21tYW5kLgorLS0tPiBUaGlzIGxpbmUgaGFzIGEgZmV3IHdvcmRzIHRoYXQgbmVlZCBjaGFuZ2luZyB1c2luZyB0aGUgY2hhbmdlIGNvbW1hbmQuCisKK2N3IKTPw7G47KTyytG5uaS5pOukwKSxpMekyqSvoaLB3sb+pOK51KSopOuks6TIpMvD7bDVpLek3qS3pOekpqGjCisKKworCit+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+fn4KKwkJICAgICCl7KXDpbml8yAzLjQ6IGMgpPK7yM3RpLekv6S9pM7CvqTOytG5uQorCisKKyAgICAgKiogytG5uaWzpd6l86XJpM+horrvvfyls6XepfOlyaTIxrGkuM3NpMulqqXWpbilp6Wvpcik8rvIzdGkt6TepLkgKioKKworCisgIDEuIMrRubmls6XepfOlyaTPoaK67738pbOl3qXzpcmkyMaxpLik6KSmpMrGsLrupPKkt6TepLmho6S9pM63wbywpM8KKworCSBbsvO/9F0gICBjICAgzNzFqrjsICAgICAgpOKkt6SvpM8gICAgICBjICAgW7Lzv/RdICAgzNzFqrjsCisKKyAgMi4gpaql1qW4paelr6XIpOLGsaS4pMehoncgpM/DsbjsoaIgJCCkz7nUy/akyqTJpMikpKTDpL+k4qTOpMekuaGjCisKKyAgMy4gsMqyvKTOIC0tLT4gpMi1raS1pOykv6S1pOykv7nUpMulq6G8pb2l66TysNzGsKS3pN6kt6TnpKahoworCisgIDQuILrHvemkzrTWsOOkpKTYpauhvKW9peuk8rDcxrCkt6TepLek56SmoaMKKworICA1LiBjJCCkyKW/paSl16S3pMa51KTOu8Sk6qTyo7K51MzcpM7NzaTLpLehojxFU0M+IKTysqGkt6TepLek56SmoaMKKworLS0tPiBUaGUgZW5kIG9mIHRoaXMgbGluZSBuZWVkcyBzb21lIGhlbHAgdG8gbWFrZSBpdCBsaWtlIHRoZSBzZWNvbmQuCistLS0+IFRoZSBlbmQgb2YgdGhpcyBsaW5lIG5lZWRzIHRvIGJlIGNvcnJlY3RlZCB1c2luZyB0aGUgIGMkICBjb21tYW5kLgorCisKK35+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+fgorCQkJCaXspcOluaXzIDMgzdfM8worCisKKyAgMS4gtPuky7rvvfyktaTspL+lxqWtpbmlyKTyusbH28PWpLmk66TLpM+honAgpPKlv6Wkpdekt6TepLmho6SzpOykz7rvvfyktQorICAgICCk7KS/pcalraW5pcik8qWrobylvaXrpM645aTLwd7G/qS3pN6kuSi51MOxsMykx7rvvfyktaTspL+kzqTKpOmk0KGipauhvAorICAgICClvaXrpM6koqTrvKGkzrnUpMvB3sb+pLWk7KTepLkpoaMKKworICAyLiClq6G8pb2l66TOsrykzsq4u/qk8sPWpK20uaSopOuky6TPoaJyIKTypb+lpKXXpLekv7jloaKkvaTspPLD1qSttLmkqKTrCisgICAgIMq4u/qk8qW/paSl16S3pN6kuaGjCisKKyAgMy4gytG5uaWzpd6l86XJpMekz6WrobylvaXrsMzD1qSrpOnGw8TqpM7M3MWquOykx7vYxOqktaTspOu9qsO8pN6kx6TyytG5uQorICAgICCkuaTrpLOkyKSsssTHvaTHpLmho87jpKik0CBjdyCkyqTppNClq6G8pb2l67DMw9akq6Tpw7G47KTOvaqk76TqpN6kx6GiCisgICAgIGMkIKTKpOmk0LnUpM69qqTvpOqk3qTHpPLK0bm5pLek3qS5oaMKKworICA0LiDK0bm5pbOl3qXzpcmkzrfBvLCkzworCisJIFuy87/0XSAgIGMgICDM3MWquOwgICAgICCk4qS3pK+kzyAgICAgIGMgICBbsvO/9F0gICDM3MWquOwKKworpLWkoaGivKGkzqXspcOluaXzpMuw3KTqpN6kt6TnpKahoworCisKKworfn5+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+CisJCSAgICAgpeylw6W5pfMgNC4xOiCwzMPWpMil1aWhpaSl66TOvvDK8worCisKKyAgKiogpdWloaWkpevG4qTHpM6wzMPWpMil1aWhpaSl66TOvvXC1qTyyb28qKS5pOuky6TPIENUUkwtZyCk8qW/paSl16S3pN6kuaGjCisgICAgIKXVpaGlpKXrxuKkzqSipOu51KTLsNzGsKS5pOuky6TPIFNISUZULUcgpPKlv6Wkpdekt6TepLkgKioKKworICAgICBOT1RFOiCluaXGpcOl16TyvMK51KS5pOvBsKTLoaKks6TOpeylw6W5pfPBtKTGpMvM3KTyxMykt6TepLek56SmISEKKworICAxLiBDVFJMIKTysqGkt6S/pN6k3iBnIKTysqGkt6TepLek56SmoaOl2qG8pbikzrDsyNayvKTLpKKk66W5pcahvKW/pbm51AorICAgICCky6XVpaGlpKXrzL6kyLnUpKzJvbyopLWk7KTrpM+kuqTHpLmhoyCluaXGpcOl1yAzIKTOpL+k4aTLudTI1rnmpPIKKyAgICAgs9CkqKTGpKqkraTepLek56SmoaMozPW81MPtOqXrobyl6aG8pKykoqTrvuy556TPpL2kwaTppMvD7czcKQorCisgIDIuILrHsry51KTLsNzGsKS5pOukv6ThpMsgc2hpZnQtRyCkyKW/paSl16S3pN6kt6TnpKahoworCisgIDMuIMDopNukyaTOudSkzsjWueak8qW/paSl16S3oaIgc2hpZnQtRyCk8qW/paSl16S3pN6kt6TnpKahoworICAgICC6x73ppMsgQ3RybC1nIKTysqGkt6S/udSky8zhpMOkxs3opOukz6S6pMekuaGjCisgICAgICi/9Lv6pPKlv6Wkpdekt6TGpKSk66TIpK2ky6TPsujMzKTLyb28qKS1pOyk3qS7pPMpCisKKyAgNC4gvKu/rqSsu/2kxqS/pOmluaXGpcOl1yAxIKSrpOkgMyCk8rzCudSkt6TepLek56SmoaMKKworCisKK35+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+fgorCQkJICAgpeylw6W5pfMgNC4yOiC4obr3pbOl3qXzpckKKworCisJICoqILjstuek8rihuvekuaTrpMukzyAvIKTIoaLBsMr9uKG696S5pOu47LbnpPKlv6Wkpdekt6TepLmhoyoqCisKKyAgMS4gpc6hvKXepeul4qG8pcmkxyAvIKTIpKSkpsq4u/qk8qW/paSl16S3pN6kuaGjsujMzLDsyNayvKTLIDogpbOl3qXzpckKKyAgICAgpMjGsaS4zc2kyyAvIKSsuL2k7KTrpLOkyKTLtaSkxaSvpMekt6TnpKahoworCisgIDIuIKTHpM+hoidlcnJyb29yJyA8RU5URVI+IKTIpb+lpKXXpLek3qS3pOekpqGjpLOk7KSsuKG696S3pL+kpMOxuOykx6S5oaMKKworICAzLiDGsaS4uOyk8qTipKaw7MXZuKG696S5pOukyKStpM8gw7GkyyBuIKTypb+lpKXXpLek3qS5oaMKKyAgICAgtdXK/bj+pMu47LbnpPK4obr3pLmk66TIpK2kzyBOIKTypb+lpKXXpLek3qS5oaMKKworICA0LiC11cr9uP6ky7jstuek8rihuvekt6S/pKS+7LnnpM+hoi8gpbOl3qXzpcmkzqSrpO+k6qTLID8gpbOl3qXzpcmk8rvIzdGktworICAgICCk3qS5oaMKKworLS0tPiAiZXJycm9vciIgaXMgbm90IHRoZSB3YXkgdG8gc3BlbGwgZXJyb3I7ICBlcnJyb29yIGlzIGFuIGVycm9yLgorCiu4obr3pKyl1aWhpaSl66TOvaqk76TqpMvDo6S5pOukyKGipdWloaWkpeukzsDoxqykq6TpuKG696TywrO51KS3pN6kuaGjCisKKworCit+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+fn4KKwkJICAgICAgpeylw6W5pfMgNC4zOiDC0LH+pLmk67PnuMyk8rihuvcKKworCisJICAgICoqIMLQsf6kuaTrICksXSCk5CB9IKTyuKG696S5pOuky6TPICUgpPKlv6Wkpdekt6TepLkgKioKKworICAxLiCwyrK8pM4gLS0tPiCkyLWtpLWk7KS/pLWk7KS/udSkxyAoLFsgpKsgeyCkzqTJpOykq6TLpauhvKW9peuk8rDcxrAKKyAgICAgpLek3qS3pOekpqGjCisKKyAgMi4gpL2ks6THICUgpMilv6Wkpdekt6TepLek56SmoaMKKworICAzLiClq6G8pb2l66TPwtCx/qS5pOuz57jMpMuw3MawpLmk66TPpLqkx6S5oaMKKworICA0LiC6x73ppM6z57jMpMuw3MawpLmk66TLpM8gJSCkyKW/paSl16S3pN6kt6TnpKahoworCistLS0+IFRoaXMgKCBpcyBhIHRlc3QgbGluZSB3aXRoICgncywgWydzIF0gYW5kIHsncyB9IGluIGl0LiApKQorCitOT1RFOiCks6TOtaHHvaTPs+e4zKSssOzD16S3pMakpKTKpKSl16XtpbCl6aXgpPKlx6XQpcOlsKS5pOukzqTLpMikxqTizPLOqaTBCisgICAgICCk3qS5oaMKKworCisKKworfn5+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+CisJCSAgICAgICCl7KXDpbml8yA0LjQ6ILTWsOOkpKTyytG5uaS5pOvK/cuhCisKKworCSoqICdvbGQnIKTyICduZXcnIKTLw9a0uaS5pOuky6TPIDpzL29sZC9uZXcvZyCkyKW/paSl16S3pN6kuSAqKgorCisgIDEuILDKsrykziAtLS0+IKTIta2ktaTspL+ktaTspL+51KTLpauhvKW9peuk8rDcxrCkt6TepLek56SmoaMKKworICAyLiA6cy90aGVlL3RoZSA8RU5URVI+IKTIpb+lpKXXpLek3qS3pOekpqGjpLOkzqWzpd6l86XJpM+kvaTOudSkx7rHvemky7irCisgICAgIKTEpKukw6S/pOKkzqTLpMCksbnUpMqk76TspOuks6TIpMu1pKTypMSksaTepLek56SmoaMKKworICAzLiCkx6TPIDpzL3RoZWUvdGhlL2cJpMilv6Wkpdekt6TepLek56SmoaO51MG0ws6k8sPWtLmkuaTrpLOkyKTysNXMo6S3pN6kuaGjCisgICAgIKSzpM7K0bm5pM+kvaTOudSkx7irpMSkq6TDpL/BtKTGpM6y1b3qpMvC0KS3pMa51KTKpO+k7KTepLmhoworCistLS0+IHRoZWUgYmVzdCB0aW1lIHRvIHNlZSB0aGVlIGZsb3dlcnMgaXMgaW4gdGhlZSBzcHJpbmcuCisKKyAgNC4gyqO/9LnUpKuk6birpMSkq6Tryri7+qTyytG5uaS5pOuky6TPCisgICAgIDojLCNzL29sZC9uZXcvZyAgICAjLCMgpM+jsrnUpM651MjWueak8rvYpLek3qS5oaMKKyAgICAgOiVzL29sZC9uZXcvZyAgICAgIKXVpaGlpKXrwbTCzqTHuKukxKSrpOuk4qTOpMvC0KS3pMbK0bm5pLmk66GjCisKKworCisKK35+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+fgorCQkJCaXspcOluaXzIDQgzdfM8worCisKKyAgMS4gQ3RybC1nIKTPpdWloaWkpeukx6TOsMzD1qTIpdWloaWkpeukzr7cutmk8sm9vKikt6TepLmhoworICAgICBTaGlmdC1HIKTPpdWloaWkpeukzrrHsry51KTLsNzGsKS3pN6kuaGjudTI1rnmuOWkyyBTaGlmdC1HIKTIpLmk66TICisgICAgIKS9pM651KTLsNzGsKS3pN6kuaGjCisKKyAgMi4gLyCkzrjlpMu47LbnpPKlv6WkpdekuaTrpMjBsMr9pMu47LbnpPK4obr3pLek3qS5oaMKKyAgICAgPyCkzrjlpMu47LbnpPKlv6WkpdekuaTrpMi45cr9pMu47LbnpPK4obr3pLek3qS5oaMKKyAgICAguKG696TOuOUgbiCkx6GixrHK/bj+pMu4obr3pPK6xqTTudSkpKGipN6kvyBOIKTHtdXK/bj+pMu4obr3pPK51KTKpKSk3gorICAgICCkuaGjCisKKyAgMy4gKCwpLFssXSx7LCBvciB9IL7lpMulq6G8pb2l66SspKKk6771wtakxyAlIKTypb+lpKXXpLmk66TICisgICAgIMLQsf6kt6S/wtCky7DcxrCkt6TepLmhoworCisgIDQuILi9ut+51KTOuse96aTOIG9sZCCk8iBuZXcgpMvD1rS5pLmk66GjCTpzL29sZC9uZXcKKyAgICAguL2637nUpM7BtKTGpM4gb2xkIKTyIG5ldyCky8PWtLmkuaTroaMJOnMvb2xkL25ldy9nCisgICAgIDKkxKTOICMgtNakx7jstuek8sPWtLmkuaTroaMJCTojLCNzL29sZC9uZXcvZworICAgICCl1aWhpaSl66TOw+akzsG0pMakzrihuve47LbnpPLD1rS5pLmk66GjCTolcy9vbGQvbmV3L2cKKyAgICAgJ2MnIKTyssOkqKTrpMjD1rS5pM7F2aTLs87Hp6TyteGk4aTroaMJOiVzL29sZC9uZXcvZ2MKKworCit+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+fn4KKwkJICAgIKXspcOluaXzIDUuMTogs7DJ9KWzpd6l86XJpPK8wrnUpLmk68r9y6EKKworCisJICAgICAqKiA6ISCkzrjlpMu8wrnUpLmk67OwyfSls6XepfOlyaTypb+lpKXXpLek3qS5ICoqCisKKyAgMS4gsujMzKTOuseyvMn0pMulq6G8pb2l66SssNzGsKS5pOuk6KSmoaK0t6Tsv8akt6TzpMAgOiCk8qW/paSl16S3pN6kt6TnpKahoworICAgICCks6TspMels6XepfOlyaSspb+lpKXXpMekraTrzc2ky6TKpOqk3qS5oaMKKworICAyLiCks6SzpMcgISCkyKSkpKbKuLv6KLS2w7LJ5Cmk8qW/paSl16S3pN6kt6TnpKahoworICAgICCks6TspMezsMn0pbelp6XrpbOl3qXzpcmkrLzCudSkx6StpOvNzaTLpMqk6qTepLmhoworCisgIDMuIM7jpMikt6TGICEgpMvCs6SxpMYgbHMgpMilv6WkpdektyA8RU5URVI+IKTysqGkt6TepLek56SmoaMKKyAgICAgpbelp6Xrpdel7aXzpdelyKTOpOikpqTLpcelo6Xspa+lyKXqpM6w7M33pKzJvbyopLWk7KTrpM+kuqTHpLmhoworICAgICCk4qS3pK+kzyBscyCkrMawpKukyqSkpMqk6aTQIDohZGlyIKTyu8jN0aS3pN6kt6TnpKahoworCistLS0+IE5PVEU6ICCks6TOyv3LoaTLpOikw6TGpKKk6aTmpOuls6XepfOlyaSsvMK51KS5pOuks6TIpKykx6StpN6kuaGjCisKKy0tLT4gTk9URTogIMG0pMakziA6IKWzpd6l86XJpM8gPEVOVEVSPiCk8rKhpLekxr2qzrukt6TKpLGk7KTQpMqk6qTepLuk86GjCisKKworCisKK35+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+fgorCQkgICAgpeylw6W5pfMgNS4yOiCkvaTOwr6kzqXVpaGlpKXrpNi98aStuf6k3worCisKKwkqKiCl1aWhpaSl66TYytG5uaTyyt3CuKS5pOuky6TPIDp3IKXVpaGlpKXrzL4gpMilv6Wkpdekt6TepLkgKioKKworICAxLiClx6Wjpeylr6XIpeqkzrDszfek8sbApOukv6ThpMsgOiFkaXIgpOKkt6SvpM8gOiFscyCkyKW/paSl16S3pN6kt6TnpKahoworICAgICCks6TOpKKkyCA8RU5URVI+IKTysqGkuaTOpM+0+6TLpLTCuMPOpMekuaTNoaMKKworICAyLiBURVNUIKTOpOikpqTLoaKkvaTOpcelo6Xspa+lyKXqpMvMtaSkpdWloaWkpevMvqTysOykxMGqpNOk3qS5oaMKKworICAzLiCkx6TPIDp3IFRFU1QgpMilv6Wkpdekt6TepLek56SmIChURVNUIKTPoaLBqqTzpMCl1aWhpaSl68y+pMekuSmhoworCisgIDQuIKSzpOyky6TopOql1aWhpaSl68G0ws6krCBURVNUIKTIpKSkpsy+wbCkx8rdwriktaTspN6kuaGjCisgICAgIKTipKaw7MXZIDohZGlyIKTIpb+lpKXXpLekxrPOx6ekt6TGpN+k3qS3pOekpqGjCisKKy0tLT4gpLOks6THIFZpbSCk8r2qzrukt6GipdWloaWkpevMviBURVNUIKTItqaky7WvxrCkuaTrpMihosrdwrikt6S/u/6kzgorICAgICClwaXlobylyKXqpaKl66TOyqPAvaSspMekrb7lpKyk66TPpLqkx6S5oaMKKworICA1LiCkx6TPoaIgOiFkZWwgVEVTVCCkyKW/paSl16S3pMal1aWhpaSl66Tyuu+9/KS3pMak36TepLek56SmoaMKKworCisKK35+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+fgorCQkJIKXspcOluaXzIDUuMzogwarC8qS3pL+98aStuf6k3worCisKKwkgICoqIMn0yqzFqqTLyt3CuKS5pOuky6TPIDojLCMgdyCl1aWhpaSl68y+IKTIpb+lpKXXpLek3qS5ICoqCisKKyAgMS4gpOKkprDsxdmlx6Wjpeylr6XIpeqkzrDszfek8rzoxsCkuaTrpL+k4aTLIDohbHMgpMilv6Wkpdekt6GiVEVTVCCkzs3NpMsKKyAgICAgpdWloaWkpeuk8rDspMTBqqTzpMek36TepLek56SmoaMKKworICAyLiCks6TOpdqhvKW4pM67z6ThpN6kx6WrobylvaXrpPKw3MawpLehoqXVpaGlpKXrpM651L/0pPLDzqTrpL+k4aTLIEN0cmwtZyCkyAorICAgICClv6Wkpdekt6TepLek56SmoaOkvaTOudTI1rnmpPKysaSopMakqqStpN6kt6TnpKahoworCisgIDMuIKS9pLekxqXaobyluKTOvaqk6qTepMew3MawpLehorrGxdkgQ3RybC1nIKTyudSkpKTepLmhoworICAgICCks6TOudTI1rnmpOKysaSopMakqqStpN6kt6TnpKahoworCisgIDQuIKSipOvJ9MqspMCksaTyIFRFU1QgpMikpKSmzL6kx8rdwrikuaTrpL+k4aTLoaI6IywjIHcgVEVTVCCkyKW/paSl16S3pN6kuaGjCisgICAgIKSzpM4gIywjIKTPs9CkqKTGpKqkpKS/o7KkxKTOyNa55ii+5cO8LLK8w7wpIKTHpKKk6qGiIFRFU1QgpKyl1aWhpaSl68y+CisgICAgIKTIpMqk6qTepLmhoworCisgIDUuILrGxdmhoqXVpaGlpKXrpKzCuLrfpLmk66SzpMik8rPOx6ekuaTrpL+k4aTLIDohZGlyIKTIpb+lpKXXpLek3qS3pOekpqGjCisgICAgIKS/pMCkt6SzpM6l1aWhpaSl66TPvsOkt6TGpM+kpKSxpN6ku6TzoaMKKworCit+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+fn4KKwkJICAgICAgIKXspcOluaXzIDUuNDogpdWloaWkpeukzrzouf6kyLnnyrsKKworCisJKiogpdWloaWkpeukzsPmv8ik8sHexv6kuaTrpMukzyA6ciCl1aWhpaSl68y+IKTIpb+lpKXXpLek3qS5ICoqCisKKyAgMS4gwOik26TJpM4gVEVTVCCkyKSkpKal1aWhpaSl66Sswri636S5pOuks6TIpPKzzqSrpOGk66S/pOGkyyA6IWRpciCkyAorICAgICClv6Wkpdekt6TepLek56SmoaMKKworICAyLiClq6G8pb2l66TypLOkzqXaobyluKTOwOjGrKTLsNzGsKS3pN6kuaGjCisKK05PVEU6IKW5pcalw6XXIDMgpPK8wrnUpLmk66TIoaKy6MzMpMsgpeylw6W5pfMgNS4zIKSsuL2k76TspOukzqTHoaKlq6G8pb2l66TyCisgICAgsryky7DcxrCkt6SzpM6l7KXDpbml86TepMfM4aTqpN6kt6TnpKahoworCisgIDMuIKTHpM+hojpyIFRFU1QgpMilv6Wkpdekt6TGIFRFU1QgpdWloaWkpeuk8rzouf6k36TepLek56SmoaOks6TOIFRFU1QgpM8KKyAgICAgpdWloaWkpevMvqTHpLmhoworCitOT1RFOiAgpdWloaWkpeukzrzouf6k36TPpauhvKW9peukzrDMw9akq6TpudSk76TspN6kuaGjCisKKyAgNC4gvOi5/qTzpMCl1aWhpaSl66Tys87Hp6S3pMak36TepLek56SmoaOlq6G8pb2l66TyzOGkuaTIoaKl7KXDpbml8zUuMyCkzgorICAgICClqqXqpbilyqXrpMil1aWhpaSl66TLpOik66TipM6kzjKkxKSspKKk66SzpMikrKTvpKuk6qTepLmhoworCisKK35+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+fgorCQkJICAgICAgIKXspcOluaXzIDUgzdfM8worCisKKyAgMS4gIDohY29tbWFuZCAgpMuk6KTDpMYgs7DJ9KWzpd6l86XJpPK8wrnUpLek3qS5oaMKKworICAgICCk6KSvu8ikps7jOgorCSAgOiFscyAgICAgICAgICAgICAgICAtICClx6Wjpeylr6XIpeqkzqXVpaGlpKXrsOzN96TyuKuk66GjCisJICA6IWRlbCCl1aWhpaSl68y+ICAgIC0gIKXVpaGlpKXrzL6kyKSkpKal1aWhpaSl66TOuu+9/KS5pOuhoworCisgIDIuICA6dyCl1aWhpaSl68y+IKTLpOikw6TGpdWloaWkpevMvqTIpKSkpqXVpaGlpKXrpKylx6Wjpbmlr6TLvfGkrbn+pN6k7KTroaMKKworICAzLiAgOiMsIyB3IKXVpaGlpKXrzL4gpMuk6KTDpMYgIyCkq6TpICMgpN6kx6Tyyt3CuKS5pOuhoworCisgIDQuICA6ciCl1aWhpaSl68y+IKTLpOik6qXVpaGlpKXrzL6kyKSkpKal1aWhpaSl66Sspcelo6W5pa+k6KTqvOi5/qTepOyhogorICAgICAgpauhvKW9peuwzMPWpM6yvKTLwd7G/qS1pOyk66GjCisKKworCisKKworCisKK35+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+fgorCQkJIKXspcOluaXzIDYuMTogpaqhvKXXpfOls6XepfOlyQorCisKKyAgICAqKiBvIKTypb+lpKXXpLmk66TIoaKlq6G8pb2l66TOsrykzrnUpKyzq6StoaLB3sb+peKhvKXJpMvG/qTqpN6kuSAqKgorCisgIDEuILDKsrykziAtLS0+IKTIta2ktaTspL+ktaTspL+51KTLpauhvKW9peuk8rDcxrCkt6TepLek56SmoaMKKworICAyLiBvICi+rsq4u/opIKTypb+lpKXXpLekxqGipauhvKW9peukzrK8pM651KTys6ukraGiwd7G/qXiobylyaTLxv6k6qTepLmhoworCisgIDMuIC0tLT4gpMi1raS1pOykv7nUpPK8zKS3oaI8RVNDPiCkyKW/paSl16S3pMbEybLDpeKhvKXJpPK9qs67pLek3qS3pOekpqGjCisKKy0tLT4gbyAgpPKlv6WkpdekuaTrpMilq6G8pb2l66TPs6ukpKS/udSk2LDcxrCkt8Hexv6l4qG8pcmky8b+pOqk3qS5oaMKKworICA0LiClq6G8pb2l66TOvuWkzrnUpMvB3sb+pLmk66TLpM+hor6uyri7+qTOIG8gpMekz6TKpK+hosOxveOky8Lnyri7+qTOIE8KKyAgICAgpPKlv6Wkpdekt6TepLmho7yhpM651KTHu+6kt6TGpN+k3qS3pOekpqGjCiuks6TOudSkzr7lpNjB3sb+pLmk66TLpM+hoqSzpM651KTYpauhvKW9peuk8sPWpKSkxiBTaGlmdC1PIKTypb+lpKXXpLek3qS5oaMKKworCisKKworCisKK35+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+fgorCQkJpeylw6W5pfMgNi4yOiDEybLDpbOl3qXzpckKKworCisgICAgICAqKiClq6G8pb2l66TOvKGkzrDMw9akq6TppcalraW5pcik8sTJssOkuaTrpMukzyBhIKTIpb+lpKXXpLek3qS5ICoqCisKKyAgMS4gpc6hvKXepeul4qG8pcmky6S3pMawyrK8pM4gLS0tPiCkyLWtpLWk7KS/pLWk7KS/use96aTOudSkxyAkIKTypb+lpKXXpLcKKyAgICAgpMahor2qw7yky6WrobylvaXrpPKw3MawpLek3qS3pOekpqGjCisKKyAgMi4gpauhvKW9peukzsq4u/qkzrjlpO2ky6XGpa2luaXIpPLEybLDpLmk66S/pOGkyyBhICi+rsq4u/opIKTypb+lpKXXpLek3gorICAgICCkuaGjCisKK05PVEU6IKSzpOykz7rHuOWkzsq4u/qky6TGpcalraW5pcik8sHexv6kt6GiPEVTQz4gpPKlv6Wkpdekt6TGpauhvKW9peuk8rGmpMsKKyAgICAgILDcxrCkt6Giuse45aTLIHggpb+lpKXXpLekxrnUy/aky8TJssOkuaTrpMikpKTDpL+k6KSmpMogaSCkzqW/paSl16TyCisgICAgICDI8qSxpOuks6TIpKykraTepLmhoworCisgIDMuIKS1pMa6x73ppM651KTytLDArqS3pN6kt6TnpKaho6XGpa2luaXIpKzB3sb+pLWk7KTrsMzD1qTyvfyksaTQoaIKKyAgICAgxMmyw6Wzpd6l86XJpM/B3sb+peKhvKXJpMik3qTDpL+kr8axpLikx6S5oaMKKworLS0tPiCks6TOudSkx6GiudTL9qTLyri+z6TyxMmyw6S5pOsKKy0tLT4gpLOkzrnUpMehornUy/aky8q4vs+k8sTJssOkuaTrzv29rKTypLmk66SzpMikrKTHpK2k66THpLek56SmoaMKKworCit+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+fn4KKwkJCSAgIKXspcOluaXzIDYuMzogpL2kzsK+pM7D1rS5CisKKworCSAgKiogMcq4u/qwyr7lpPLD1qSttLmkqKTrpMukz8Lnyri7+qTOIFIgpMilv6Wkpdekt6TepLek56SmICoqCisKKyAgMS4gsMqyvKTOIC0tLT4gpMi1raS1pOykv6S1pOykv7nUpMulq6G8pb2l66TysNzGsKS3pN6kt6TnpKahoworCisgIDIuIC0tLT4gpMi1raS1pOykv6OyudTM3KTIsOOkpqGiuse96aTOw7G47KTOwOjGrKTLpauhvKW9peuk8rDcxrCkt6TepLek56SmoaMKKyAgICAgKMOxuOwgJ2xhc3QnKQorCisgIDMuIKSzpLOkxyBSIKTypb+lpKXXpLekxqGiuse96aTOudSkyLyhpM651KSsxrGkuKTLpMqk66TopKaky7T7wrikzqXGpa2luaXICisgICAgIKTYvuW98aStpb+lpKXXpLehoqOxudTM3KTOu8Sk6qTOyfTKrKTyvfGkrbS5pKik3qS3pOekpqGjCisKKy0tLT4gVG8gbWFrZSB0aGUgZmlyc3QgbGluZSB0aGUgc2FtZSBhcyB0aGUgbGFzdCBvbiB0aGlzIHBhZ2UgdXNlIHRoZSBrZXlzLgorLS0tPiBUbyBtYWtlIHRoZSBmaXJzdCBsaW5lIHRoZSBzYW1lIGFzIHRoZSBzZWNvbmQsIHR5cGUgUiBhbmQgdGhlIG5ldyB0ZXh0LgorCisgIDQuIKXiobylyaTyyLSksaTrpL+k4aTLIDxFU0M+IKTypb+lpKXXpLmk66TIoaLK0bm5pLekxqSkpMqkpMn0yqykrLvEpOuks6TICisgICAgIKTLw+2w1aS3pN6kt6TnpKahoworCisKKworCit+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+fn4KKwkJICAgICAgIKXspcOluaXzIDYuNDogpaql16W3peel86TOwN/E6gorCisKKyAgKioguKG696Tkw9a0uaTOut2ky8Lnyri7+qTIvq7KuLv6pPLMtbvrpLmk683NpMulqqXXpbel56XzpPLA38TqpLek3qS5ICoqCisKKworICAxLiCwyrK8pM7NzaTLpb+lpKXXpLekxiAnaWdub3JlJyCk8rihuvekt6TepLek56SmOgorICAgICAgIC9pZ25vcmUKKyAgICAgbiCk8rKhpLekxrK/xdmkq7ihuvek8rerpOrK1qS3pN6kuaGjCisKKyAgMi4gsMqyvKTOzc2ky6W/paSl16S3pMYgJ2ljJyAoSWdub3JlIENhc2UgpM7OrKTHpLkpIKWqpdelt6XnpfOk8sDfxOqkt6TepLmhoworICAgICAgIDpzZXQgaWMKKworICAzLiCkx6TPIG4gpMuk6KTDpMak4qSmMcXZICdpZ25vcmUnIKTyuKG696S3pN6kuaGjCisgICAgIG4gpPKyoaS3pMaktaTppMu/9LLzuKG696Tyt6uk6srWpLek3qS3pOekpqGjCisKKyAgNC4gJ2hsc2VhcmNoJyCkyCAnaW5jc2VhcmNoJyClqqXXpbel56XzpPKwyrK8pM7NzaTLwN/E6qS3pN6kt6TnpKahoworICAgICAgIDpzZXQgaGxzIGlzCisKKyAgNS4gpOKkprDsxdm4obr3pbOl3qXzpcmk8sb+zs+kt6TGoaKyv6Ssta+ks6TrpKu4q6TGpN+k3qS3pOekpjoKKyAgICAgICAvaWdub3JlCisKK35+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+fgorCQkJCaXspcOluaXzIDYgzdfM8worCisKKyAgMS4gbyCk8qW/paSl16S5pOukyKWrobylvaXrpM6yvKTOudSk8rOrpLGkxqGipL2ks6THwd7G/qXiobylyaTLpMqk66GjCisgICAgIE8gKMLnyri7+ikgpPKlv6WkpdekuaTrpMilq6G8pb2l66TOvuWkzrnUpMfB3sb+peKhvKXJpMukyqTroaMKKworICAyLiClq6G8pb2l677lpM7KuLv6pM68oaSrpOmlxqWtpbmlyKTyxMmyw6S5pOuky6TPIGEgpMilv6WkpdekuaTroaMKKyAgICAgudTL9qTLvKvGsKTHpcalraW5pcik8sHexv6kuaTrpMukz8Lnyri7+iBBIKTypb+lpKXXpLmk66GjCisKKyAgMy4gwufKuLv6pM4gUiCk8qW/paSl16S5pOukyMPWtLml4qG8pcmky8b+pOqhojxFU0M+pPKyoaS5pMjItKSxpOuhoworCisgIDQuICI6c2V0IHh4eCIgpMilv6WkpdekuaTrpMilqqXXpbel56XzICJ4eHgiIKSswN/E6qS1pOyk66GjCisKKworCisKKworCisKKworCisKK35+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+fgorCQkgICAgIKXspcOluaXzIDc6IKWqpfOl6aWkpfOl2KXrpdels6XepfOlyQorCisJCSAgICAgKiogpaql86XppaSl86XYpeul16Tyu8jN0aS3pN6kt6TnpKYgKioKKworICBWaW0gpMukz7mtyM+ky6TvpL+k66WqpfOl6aWkpfOl2KXrpdelt6W5pcal4KSspKKk6qTepLmhoworICCl2KXrpdek8rOru8+kuaTrpMukz6GipLOk7KTpM6TEpM6kyaTspKsxpMSk8rvupLekxqTfpN6kt6TnpKY6CisJLSCl2KXrpdelraG8IDxIRUxQPiCk8rKhpLkopOKkt6SipOukyqTppNApoaMKKwktIDxGMT4gpa2hvKTysqGkuSik4qS3pKKk66TKpOmk0CmhoworCS0gOmhlbHAgPEVOVEVSPiCkyKW/paSl16S5pOuhoworCisgIKXYpeul16WmpaOl86XJpaak8srEpLik66TLpM8gOnEgPEVOVEVSPiCkyKW/paSl16S3pN6kuaGjCisKKyAgIjpoZWxwIiCls6XepfOlyaTLsPq/9KTyzb+kqKTrpLOkyKTLpOik6qGipKKk6aTmpOvC6sy+pM6l2KXrpdek8rirpMSksaTrCisgIKSzpMikrKTHpK2k3qS5oaOks6TspOmk8rvupLekxqTfpN6kt6TnpKYoPEVOVEVSPiCk8qW/paSl16S3y7qk7KTKpKSk6KSmpMspOgorCisgIDpoZWxwIHcKKyAgOmhlbHAgY188VAorICA6aGVscCBpbnNlcnQtaW5kZXgKKyAgOmhlbHAgdXNlci1tYW51YWwKKworCisKK35+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+fgorCQkgICAgICCl7KXDpbml8yA4OiC1r8awpbmlr6XqpdelyKTOuu7ArgorCisJCQkgKiogVmltIKTOxsPEp6TyyK+0+KS5pOsgKioKKworICBWaW0gpMukzyBWaSCk6KTqpOLCv6SvpM7Gw8SnpPLGp6TepKikxqSkpN6krKGipL2kzqTbpMik86TJpM+96bT8vvXC1qTLpMYKKyAgu8jN0cnUssSkyKTKpMOkxqSkpN6kuaGjpOik6sK/pK+kzsbDxKek8rvIpKSkz6S4pOGk66TLpM8gInZpbXJjIiCl1aWhpaSl6worICCk8rruwK6kt6TepLmhoworCisgIDEuICJ2aW1yYyIgpdWloaWkpeukzsrUvbik8rOru8+kuaTroaOks6TspM+lt6W5pcal4KTLsM3CuKS3pN6kuaGjCisJOmVkaXQgfi8udmltcmMJCQlVTklYILj+pLEKKwk6ZWRpdCAkVklNL192aW1yYwkJTVMtV2luZG93cyC4/qSxCisKKyAgMi4gpLOks6THpbWl86XXpeukziAidmltcmMiIKTyxsmk37n+pN+k3qS5oaMKKworCTpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4gsMqyvKTOpOikpqTLpdWloaWkpeuk2L3xpK25/qTfpN6kuaGjCisKKwk6d3JpdGUKKworICC8obLzIFZpbSCk8rWvxrCkuaTrpMihor+npMWksbm9yrikrLvIpKik66TopKaky6TKpOukx6S3pOekpqGjCisgIKSzpM4gInZpbXJjIiCl1aWhpaSl66TYoaKkqrmlpN+kzsDfxOqk8sTJssOkuaTrpLOkyKSspMekraTepLmhoworfn5+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+CisKKyAgpLOk7KTLpMYgVmltIKTOpcGl5aG8pcil6qWipeuk8r2qpO+k6qTepLmho6Wopcelo6W/pPK0ysOxpMuhoqS3pKuk4r28yqykyworICC7yKSmpLOkyKSspMekraTrpOikpqTLpMiholZpbSCkzrv9pMSztcewpM7N18XApM6k36TyxcGkqKTopKakyKS3pN6kt6S/oaMKKyAgVmltIKTLpM+ktaTppMvCv6SvpM6ls6XepfOlyaSspKKk6qGipLOks6THwbSkxqTywOLMwKS5pOuks6TIpM+kx6StpN6ku6TzoaMKKyAgsMq536TPpeahvKW2pd6ly6XlpaKl66Tyu7K+yKSvpMCktaSkOiAiaGVscCA6dXNlci1tYW51YWwiCisKKyAgpLOk7LDKuOWkzrPYvaykzqS/pOGky6GivKGkzsvcpPK/5MGmpLek3qS5oaMKKwlWaW0gLSBWaSBJbXByb3ZlZCAtIGJ5IFN0ZXZlIE91YWxsaW5lCisJvdDIx7zSOiBOZXcgUmlkZXJzCisgILrHvemkzsvcpM+0sMG0pMsgVmltIKTOpL+k4aTLvfGkq6TspN6kt6S/oaOkyKTqpO+ksb3pv7S81KTLpM+kqr6ppOGkx6S5oaMKKyAgwr+kr6TOzuPC6qTkv97Ix6Sst8e63KS1pOykxqSkpN6kuaGjCisgILyhpM5VUkyk8ruyvsikt6TGsryktaSkIGh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnL2NsaWNrNS5odG1sCisKKyAgvKGkzyBWaW0gpOik6qTiIFZpIKTLpMSkpKTGvfGkq6TspL+4xaSky9ykx6S5pKy/5MGmpLek3qS5OgorCUxlYXJuaW5nIHRoZSBWaSBFZGl0b3IgLSBieSBMaW5kYSBMYW1iCisJvdDIx7zSOiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMgSW5jLgorICBWaSCkx6TkpOqkv6SkpMi716SmpLOkyKTbpNzBtKTGpPLDzqTrpLOkyKSspMekraTrzsm98aTHpLmhoworICDC6DbIx6THpM+holZpbSCky6TEpKSkxqTOvvDK86TitN6k3qTspMakpKTepLmhoworCisgIKSzpM6lwaXlobylyKXqpaKl66TPIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHkgpM4gQ2hhcmxlcyBTbWl0aCCkzqWipaSlx6WiCisgIKTytPCky6GiQ29sb3JhZG8gU2Nob29sIG9mIE1pbmVzIKTOIE1pY2hhZWwgQy4gUGllcmNlIKTIIFJvYmVydCBLLiBXYXJlIKTOCisgIM6+zL6ky6TopMOkxr3xpKuk7KTepLekv6GjIEUtbWFpbDogYndhcmVAbWluZXMuY29sb3JhZG8uZWR1LgorCisgIE1vZGlmaWVkIGZvciBWaW0gYnkgQnJhbSBNb29sZW5hYXIuCisKKyAgxvzL3LjszPUgIL6+y9zC2bmwICBFLW1haWw6bWF0dG5AbWFpbC5nb28ubmUuanAKKworfn5+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+Cisgdmk6c2V0IHRzPTggc3RzPTQgc3c9NCB0dz03NjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvdHV0b3IuamEuc2ppcyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuamEuc2ppcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM4YTRjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci90dXRvci5qYS5zamlzCkBAIC0wLDAgKzEsODExIEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9ICAgIFYgSSBNIIuzIJZ7ICiDYIOFgVuDZ4OKg0GDiykggtYgguYggqQggrEggrsgICAgICAgIC0gICAgVmVyc2lvbiAxLjUgICAgICA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgVmltIILNgUGCsYLMg2CDhYFbg2eDioNBg4uCxZDglr6Ct4LpgsmCzZG9greCrILpkvaCzINSg32Dk4NogvCU9YKmgr0KKyAgICAglPGP7YLJi62XzYLIg0eDZoNCg16BW4LFgreBQoKxgsyDYIOFgVuDZ4OKg0GDi4LNgUGCoILIgr2CqiBWaW0KKyAgICAggvCWnJRcg0eDZoNCg16BW4LGgrWCxI5ngqKCsYLIgrmC6YLmgqSCyYLIgumCzILJj1yVqoLIg1KDfYOTg2iCyYLCgqKCxAorICAgICCQ4Ja+gvCCt4LpguaCpILIgsGCxIKigtyCt4FCCisKKyAgICAgg2CDhYFbg2eDioNBg4uC8Iqul7mCt4LpgsyCyZVLl3aCyI6eitSCzYFBim+CpoK9g1KDfYOTg2iC8I6OgreCzILJgseC6gorICAgICCCvoKvjp6K1ILwjmeCpILMgqmCyYLgguaC6ILcgreCqoFBgqiC5oK7MjWBYDMwlaqCxYK3gUIKKworICAgICCKd4LUg1KDfYOTg2iCyYLNgrGCzJW2j82C8JXPjViCt4LpguCCzILggqCC6ILcgreBQpf7j0uC8I5ugt+C6ZFPgsmDUgorICAgICCDc4FbgvCN7JCsgrWC3IK1guWCpCgidmltdHV0b3IigrWCvYLIgueCzoFBivmCyYNSg3OBW4KzguqCxIKigtyCtymBQgorCisgICAgIIKxgsyDYIOFgVuDZ4OKg0GDi4KqgUGOZ4KkgrGCxoLFim+CpoLnguqC6Y5kkWeC3YLJgsiCwYLEgqKC6YKxgsaC8IFBkFMKKyAgICAggrWCxIKogqmCyIKvguqCzoLIguiC3IK5gvGBQpCzgrWCrYp3j0uCt4LpgsmCzYNSg32Dk4NogvCOwI3bgsmOjoKzgsiCrworICAgICCC6oLOgsiC54LIgqKCzILFgreBQpW2j82C8JPHgvGCvoK+gq+CyILngs6BQYKrgsGCxpZZguqCxIK1gtyCooLcgrchgUIKKworICAgICCCs4KfgUFDYXBzg42DYoNOKFNoaWZ0LUxvY2spg0yBW4KqiZ+Cs4LqgsSCooLIgqKCsYLGgvCKbZRGgrWCvYzjgUEKKyAgICAgieaWyoLJg4yDYoNYg5MxLjEggqqRU5WUlVyOpoKzguqC6YLGgrGC64LcgsWBQWogg0yBW4LwiZ+CtYLEg0qBW4Ncg4uC8AorICAgICCI2pOugrWC3IK1guWCpIFCCit+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+fn4KKwkJCSCDjINig1iDkyAxLjE6ICCDSoFbg1yDi4LMiNqTrgorCisKKyAgICAgICAqKiCDSoFbg1yDi4LwiNqTroK3gumCyYLNgUGOpoKzguqC6ZdsgskgaCxqLGssbCCC8ImfgrWC3IK3ICoqCisJICAgICBeCisJICAgICBrCQkgICAgg3GDk4NnOiAgaCCDTIFbgs2NtpX7jPyCyYjak66CtYLcgreBQgorICAgICAgIDwgaAkgbCA+CQkgICAgIGwgg0yBW4LNiUWV+4z8gsmI2pOugrWC3IK3gUIKKwkgICAgIGoJCQkgICAgIGogg0yBW4LNibqW7ojzg0yBW4LMguaCpILIg0yBW4LFgreBQgorCSAgICAgdgorICAxLiCI2pOugsmKtYLqgumC3ILFgUGDWINOg4qBW4OTgsWDSoFbg1yDi4jak66Cs4K5gtyCtYLlgqSBQgorCisgIDIuIIm6gtaCzINMgVsoaimC8ImfgrWCwoLDgq+C6YLGgUGYQZGxgrWCxIjak66CxYKrgtyCt4FCCistLS0+IIKxguqCxY6fgsyDjINig1iDk4LJiNqTroK3gumV+5ZAgqqC7YKpguiC3IK1gr2Cy4FCCisKKyAgMy4gibqC1oLMg0yBW4LwjmeCwYLEgUGDjINig1iDkzEuMiCCyYjak66CtYLcgrWC5YKkgUIKKworTk9URTogib2C8INeg0ODdoK1gsSCooLpgqmUu4LngsiCrYLIgsGCvYLngUE8RVNDPoLwiZ+CtYLEg22BW4N9g4uDgoFbg2iCyYK1gtwKKyAgICAgIIK3gUKCu4LqgqmC55P8l82CtYLmgqSCxoK1gsSCooK9g1KDfYOTg2iC8I3Ek/yXzYK1gtyCtYLlgqSBQgorCitOT1RFOiCDSoFbg1yDi4NMgVuCxYLgiNqTroLFgquC3IK3gUKCtYKpgrUgaGprbCCC8I5nl3CCt4LpgrGCxoLJiOqTeIq1guqCxIK1gtwKKyAgICAgIIKmgs6BQYLNgumCqYLJkayCrYjak66Ct4LpgrGCxoKqgsWCq4LpgsWCtYLlgqSBQgorCit+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+fn4KKwkJCSCDjINig1iDkyAxLjI6IFZJTSCCzItOk66Cxo9Jl7kKKworCisgICEhIE5PVEU6IIjIibqCzIKggueC5ILpg1iDZYNig3aC8I1zgqSRT4LJgUGCsYLMg4yDYoNYg5OC8JPHgt2C3IK1guWCpCEhCisKKyAgMS4gPEVTQz6DTIFbgvCJn4K1gtyCtYLlgqSBQiiKbY7AgsmDbYFbg32Di4OCgVuDaILJgreC6YK9gt8pCisKKyAgMi4gjp+CzILmgqSCyYNeg0ODdjoJCTpxISA8RU5URVI+CisKKy0tLT4ggrGC6oLJguaC6JXSj1eCtYK9k+CXZYLwlduRtoK5griCyYNHg2aDQoNegqqPSZe5grWC3IK3gUIKKyAgICAgldKPV5Pgl2WC8JXbkbaCtYLEj0mXuYK3gumCxoKrgs2On4LMguaCpILJg16DQ4N2grWC3IK3OgorCQkJCTp3cSAgPEVOVEVSPgorCisgIDMuIINWg0aDi4N2g42Dk4N2g2eCqYLng2CDhYFbg2eDioNBg4uC8I5ugt+C6YLJgs2DUoN9g5ODaILwg16DQ4N2grWC3IK3gUIKKyAgICAggruCzINSg32Dk4Nogs06CQl2aW10dXRvciA8RU5URVI+CisgICAgIJLKj+2CzYKxgqSCxYK1guWCpDoJdmltIHR1dG9yIDxFTlRFUj4KKworLS0tPiAndmltJyCCzSBWaW0gg0eDZoNCg16CzItOk66C8IFBJ3R1dG9yJyCCzZXSj1eCtYK9gqKDdINAg0ODi4LwiNOWoYK1gtyCt4FCCisKKyAgNC4ggrGC6oLcgsWCzINYg2WDYoN2gvCKb4KmjqmQTYKqgsKCooK9gsiC54LOgUGDWINlg2KDdiAxIIKpgucgMyCC3ILFgvCOwAorICAgICCN24LJjo6CtYLEgUFWaW0ggvAxk3iPSZe5grWCxIKpgueNxILRi06TroK1gtyCtYLlgqSBQoK7guqCqYLng4yDYoNYg5MKKyAgICAgMS4zgtyCxYNKgVuDXIOLgvCI2pOugrOCuYLcgrWC5YKkgUIKK35+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+fgorCQkgICAgICAgg4yDYoNYg5MgMS4zOiCDZYNMg1iDZ5XSj1cgLSCN7Y+cCisKKworICAgICoqIINtgVuDfYOLg4KBW4NogsmCxINKgVuDXIOLgsyJuoLMlbaOmoLwje2PnIK3gumCyYLNIHgggvCJn4K1gtyCtyAqKgorCisgIDEuIIjIibqCzCAtLS0+IILGi0yCs4Lqgr2Cs4Lqgr2Nc4LJg0qBW4Ncg4uC8Ijak66CtYLcgrWC5YKkgUIKKworICAyLiCK1IjhgqKC8I9DkLOCt4Lpgr2C34LJgUGN7Y+cgreC6Y3Fj4mCzJW2jpqC3ILFg0qBW4Ncg4uC8Ijak66CtYLcgreBQgorCisgIDMuIJVzlUuXdoLIlbaOmoLwIHgggvCJn4K1gsSN7Y+cgrWC3IK1guWCpIFCCisKKyAgNC4glbaCqpCzgrWCrYLIgumC3ILFIINYg2WDYoN2IDIggqmC5yA0IILwjEqC6JXUgrWC3IK1guWCpIFCCisKKy0tLT4ggruCzCCCpIKkgrOCrCCCzSCCwoLCgquCqyCC8CCCsYKmgqaCxILEIILGgtGCzYLLgr2CvQorCisgIDUuII1zgqqQs4K1gq2CyILBgr2C54FBg4yDYoNYg5MgMS40IILJiNqC6ILcgrWC5YKkgUIKKworTk9URTogkVOCxILMg4yDYoNYg5OC8JLKgraCxIFBim+CpoLmgqSCxoK3gumCzILFgs2CyIKtjsCN24LJguKCwYLEgt2C3IK1guWCpIFCCisKKworCisKK35+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+fgorCQkgICAgICAgg4yDYoNYg5MgMS40OiCDZYNMg1iDZ5XSj1cgLSCRfZP8CisKKworCSAqKiCDbYFbg32Di4OCgVuDaILJgsSDZYNMg1iDZ4LwkX2T/IK3gumCyYLNIGkggvCJn4K1gtyCtyAqKgorCisgIDEuIIjIibqCzCAtLS0+IILGi0yCs4Lqgr2Cs4Lqgr2NxY+JgsyNc4LJg0qBW4Ncg4uC8Ijak66CtYLcgrWC5YKkgUIKKworICAyLiAxjXOW2oLwMo1zltqCxpOvgraXbILJgreC6YK9gt+CyYFBg2WDTINYg2eC8JF9k/yCtYLIgq+C6oLOgsiC54LIgqKIygorICAgICCSdYLMjp+CzJW2jpqCyYNKgVuDXIOLgvCI2pOugrWC3IK3gUIKKworICAzLiBpIINMgVuC8ImfgrWCxIKpgueBQZLHicGCqpVLl3aCyJW2jpqC8INeg0ODdoK1gtyCtYLlgqSBQgorCisgIDQuIIrUiOGCooLwj0OQs4K1gr2C5yA8RVNDPiCC8ImfgrWCxINSg32Dk4Nog4KBW4NogsmW34LogUGQs4K1gqKVtoLJCisgICAgIILIgumXbILJg1iDZYNig3YgMiCCqYLnIDQggvCMSoLoldSCtYLcgrWC5YKkgUIKKworLS0tPiCCsYLMIILJgs0gkauC6ILIgqIgg2WDTINYg2cggqCC6YFCCistLS0+IIKxgswgjXMggsmCzSCK9ILCgqkgkauC6ILIgqIgg2WDTINYg2cggqoggqCC6YFCCisKKyAgNS4gkX2T/ILMlfuWQIKqgu2CqYLBgr2C54m6gsyDjINig1iDkzGCzJd2lvGC8IypgtyCtYLlgqSBQgorCisKKworfn5+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+CisJCQkJg4yDYoNYg5MgMSCXdpbxCisKKworICAxLiCDSoFbg1yDi4LNlu6I84NMgVuC4IK1gq2CzSBoamtsIINMgVuCxYjak66CtYLcgreBQgorCSBoICiNtikJCWogKIm6KSAgICAgICAgIGsgKI/jKQkgICAgbCAoiUUpCisKKyAgMi4gVmltIILwi06TroK3gumCyYLNg3aDjYOTg3aDZ4KpgucgdmltIIN0g0CDQ4OLlrwgPEVOVEVSPiCCxoNeg0ODdoK1gtyCt4FCCisKKyAgMy4gVmltIILwj0mXuYK3gumCyYLNCSAgIDxFU0M+IDpxIQkgPEVOVEVSPiAggsaDXoNDg3aCtYLcgrcolc+NWILwlGqK/CmBQgorICAgICAgICAgICAgICAgguCCtYKtgs0JICAgPEVTQz4gOndxCSA8RU5URVI+ICCCxoNeg0ODdoK1gtyCtyiVz41YgvCV25G2KYFCCisKKyAgNC4gg0qBW4Ncg4uCzIm6gsyVto6agvCN7Y+cgreC6YLJgs2BQYNtgVuDfYOLg4KBW4NogsUgeCCCxoNeg0ODdoK1gtyCt4FCCisKKyAgNS4gg0qBW4Ncg4uCzIjKknWCyZW2jpqC8JF9k/yCt4LpgsmCzYFBg22BW4N9g4uDgoFbg2iCxSBpIILGg16DQ4N2grWC3IK3gUIKKwkgaSAgICAgg2WDTINYg2eCzINeg0ODdgk8RVNDPgorCitOT1RFOiA8RVNDPiCDTIFbgvCJn4K3gsaDbYFbg32Di4OCgVuDaILJiNqNc4K1gtyCt4FCgruCzI3bgUGK1IjhgsGCvYLok/yXzZNykoYKKyAgICAgIILMg1KDfYOTg2iC8I7mguiPwYK3grGCxoKqgsWCq4LcgreBQgorCiuCs4LEgUGRsYKvgsSDjINig1iDkyAyIILwjm6C34LcgrWC5YKkgUIKKworCit+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+fn4KKwkJCSAgIIOMg2KDWIOTIDIuMTogje2PnINSg32Dk4NoCisKKworCSAgICAqKiCSUIzqgsyWlpT2gtyCxYLwje2PnIK3gumCyYLNIGR3IILGg16DQ4N2grWC3IK1guWCpCAqKgorCisgIDEuIINtgVuDfYOLg4KBW4NogsWCoILpgrGCxoLwim2URoK3gumCvYLfgskgPEVTQz4ggvCJn4K1gtyCtYLlgqSBQgorCisgIDIuIIjIibqCzCAtLS0+IILGi0yCs4Lqgr2Cs4Lqgr2Nc4LJg0qBW4Ncg4uC8Ijak66CtYLcgrWC5YKkgUIKKworICAzLiCPwYK1gr2CopJQjOqCzJDmk6qCyYNKgVuDXIOLgvCI2pOugrWC3IK1guWCpIFCCisKKyAgNC4gklCM6oLwje2PnIK3gumCvYLfgskgZHcggsaDXoNDg3aCtYLcgrWC5YKkgUIKKworICBOT1RFOiCDXoNDg3aCt4LpgsaBQWR3IILGgqKCpJW2jpqCqoNYg06DioFbg5OCzI3FibqNc4LJjLuC7YLqgtyCt4FCCisgICAgICAgIINeg0ODdoLwitSI4YLBgsSCtYLcgsGCvY6egsmCzSA8RVNDPiCC8ImfgrWCxILiguiSvIK1gtyCtYLlgqSBQgorCistLS0+IIKxgswglbYgjoYggsmCzSCCooKtgsKCqYLMIIK9gsyCtYKiIJVLl3aCzILIgqIgklCM6iCCqiCK3ILcguqCxCCCooLcgreBQgorCisgIDUuIDMggqmC5yA0IILcgsWC8JW2gqqQs4K1gq2CyILpgtyCxYxKguiV1IK1gUGDjINig1iDkyAyLjIggsmI2oLogtyCtYLlgqSBQgorCisKKworfn5+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+CisJCSAgICAgICCDjINig1iDkyAyLjI6IIK7gsyRvILMje2PnINSg32Dk4NoCisKKworCSAgICAgKiogjXOCzJaWlPaC3ILFgvCN7Y+cgreC6YLJgs0gZCQggsaDXoNDg3aCtYLcgrWC5YKkICoqCisKKyAgMS4gg22BW4N9g4uDgoFbg2iCxYKggumCsYLGgvCKbZRGgreC6YLMgskgPEVTQz4ggvCJn4K1gtyCtYLlgqSBQgorCisgIDIuIIjIibqCzCAtLS0+IILGi0yCs4Lqgr2Cs4Lqgr2Nc4LJg0qBW4Ncg4uC8Ijak66CtYLcgrWC5YKkgUIKKworICAzLiCQs4K1gqKVtoLMlpaU9oLWg0qBW4Ncg4uC8Ijak66CtYLcgrWC5YKkKI3Fj4mCzCAuIILMjOOCxYK3KYFCCisKKyAgNC4gjXOWloLcgsWN7Y+cgreC6YLMgskgZCQggsaDXoNDg3aCtYLcgrWC5YKkgUIKKworLS0tPiCSToKpgqqCsYLMjXOCzI3FjOOC8DKTeINeg0ODdoK1gtyCtYK9gUIgMpN4g16DQ4N2grWC3IK1gr2BQgorCisKKyAgNS4ggseCpIKigqSCsYLGgqmXnYnwgreC6YK9gt+CyYFBg4yDYoNYg5MgMi4zIILWiNqC6ILcgrWC5YKkgUIKKworCisKKworCit+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+fn4KKwkJICAgICAgIExlc3NvbiAyLjM6IINSg32Dk4NogsaW2pNJjOoKKworCisgII3tj5yDUoN9g5ODaCBkIILMjGCOroLNjp+CzJdsgsmCyILBgsSCooLcgrc6CisKKwkgW4nxkJRdICAgZCAgIJbak0mM6iAgICAgIILggrWCrYLNICAgICAgZCAgIFuJ8ZCUXSAgIJbak0mM6gorICCCu4LqgryC6joKKyAgICCJ8ZCUICAgLSCCu4LMg1KDfYOTg2iC8Im9ifGMSoLoldSCt4KpKI/Il6qJwpRcLCCPyJeqgrWCvY6egs0gPTEpgUIKKyAgICBkICAgICAgLSCN7Y+cg1KDfYOTg2iBQgorICAgIJbak0mM6iAtIIm9gsmRzoK1gsSTrYKrgqmCr4LpgqkoiMiJuoLJi5OCsILcgrcpgUIKKworICCW2pNJjOqI6peXOgorICAgIHcgLSCDSoFbg1yDi4jKknWCqYLni/OUkoLwityC3pJQjOqCzJaWlPaC3ILFgUIKKyAgICBlIC0gg0qBW4Ncg4uIypJ1gqmC54vzlJKC8IrcgtyCyIKiklCM6oLMlpaU9oLcgsWBQgorICAgICQgLSCDSoFbg1yDi4jKknWCqYLnjXOWloLcgsWBQgorCitOT1RFOiCWYIyvgrWCvYKikGyCzYFBg22BW4N9g4uDgoFbg2iCyYLEg1KDfYOTg2iCyIK1gsmW2pNJjOqC8ImfgrWCxAorICAgICAggt2C3IK1guWCpIFCg0qBW4Ncg4uCqpbak0mM6ojql5eCxY6mgrOC6oLpiMqSdYLJiNqTroK3gumCzYK4gsWCt4FCCisKKworCisKK35+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+fgorCQkgICAgICCDjINig1iDkyAyLjQ6IIK7guqIyIpPgsyMYILMg1KDfYOTg2gKKworCisJCSoqII1zkVORzILwje2PnIK3gumCyYLNIGRkIILGg16DQ4N2grWC3IK1guWCpCAqKgorCisgII1zkVORzILMje2PnILNlXCUyYLJjXOCyIKkjeyLxoLIgsyCxYFBVmltIILMkN2Mdo7Sgs2Nc4Lwje2PnIK3gumCzILJgs2BQQorICCSUILJl/GT4ILJgsQyifEgZCCC8INeg0ODdoK3gumV+4KqisiSUIK+guuCpILGlLuSZoK1gtyCtYK9gUIKKworICAxLiCJuoLJgqCC6YjqmEGCzIN0g4yBW4NZgswyjXOW2oLJg0qBW4Ncg4uC8Ijak66CtYLcgrWC5YKkgUIKKyAgMi4gZGQgIILGg16DQ4N2grWCxI1zgvCN7Y+cgrWC3IK1guWCpIFCCisgIDMuIILFgs00jXOW2oLJiNqTroK1gsSC3YLcgrWC5YKkgUIKKyAgNC4gMmRkICCCxoNeg0ODdoK1gsQyjXON7Y+cgrWCxILdgtyCtYLlgqSBQgorICAgICAoifGQlC2DUoN9g5ODaC2W2pNJjOogIILMjGCOroLwjnaCoo9vgrWC3IK1guWCpCkKKworICAgICAgMSkgIINvg4mCzZDUgqKBQQorICAgICAgMikgIILCgtyC54LIgqKC4ILMgs2KeYK1gqKBQQorICAgICAgMykgIINYg36DjILNkMKCooFBCisgICAgICA0KSAgjoSCzY7UgvCC4ILBgsSCooLpgUEKKyAgICAgIDUpICCOnox2gqqOno2PgvCNkIKwgumBQQorICAgICAgNikgII27k5yCzYrDgqIKKyAgICAgIDcpICCDSYN9g0eDgoNpgVsKKworfn5+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+CisJCQkgg4yDYoNYg5MgMi41OiCC4oLokryCtYNSg32Dk4NoCisKKworICAqKiCNxYzjgsyDUoN9g5ODaILwjuaC6I/BgreCyYLNIHUggvCJn4K1gtyCt4FCVSCCzY1zkVORzILMjuaPwYLFgreBQiAqKgorCisgIDEuIIjIibqCzCAtLS0+IILGi0yCs4Lqgr2Cs4Lqgr2Nc4LJg0qBW4Ncg4uC8Ijak66CtYFBjcWPiYLMitSI4YKigsmDSoFbg1yDiworICAgICCC8Ijak66CtYLcgrWC5YKkgUIKKyAgMi4geCCC8INeg0ODdoK1gsSCooLngsiCopDmk6qCzJW2jpqC8I3tj5yCtYLcgrWC5YKkgUIKKyAgMy4ggrOCn4FBdSCC8INeg0ODdoK1gsSNxYzjgsmOwI1zgrWCvYNSg32Dk4NogvCO5oLoj8GCtYLcgrWC5YKkgUIKKyAgNC4gjaGTeILNgUF4IILwjmeXcIK1gsSM64LogvCRU4LEj0OQs4K1gtyCtYLlgqSBQgorICA1LiCR5ZW2jpqCzCBVIILwg16DQ4N2grWCxIFBjXOC8IyzgsyP85HUgsmW34K1gtyCtYLlgqSBQgorICA2LiB1IILwg16DQ4N2grWCxJK8kU+CzCBVIINSg32Dk4NogvCO5o/BgrWC3IK1guWCpIFCCisgIDcuIILFgs2DUoN9g5ODaILwjcSOwI1zgreC6YLMgskgQ1RSTC1SIChDVFJMIILwiZ+CtYK9gtyC3CBSIILwkcWCwimC8AorICAgICCQlInxg16DQ4N2grWCxILdgtyCtYLlgqQojuaPwYLMjuaPwSmBQgorCistLS0+IIKxgsyCzI1zgsyCzIrUiOGCooLwj0OQs4FYgrWBQYzjgsWCu4LqgueCzI9DkLOC8ILwjuaPwYK1gtyC3IK3greBQgorCisgIDguIIKxguqCzYLGgsSC4JXWl5iCyINSg32Dk4NogsWCt4FCgrOCn4OMg2KDWIOTIDIgl3aW8YLJiNqC6ILcgrWC5YKkgUIKKworCisKKworfn5+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+CisJCQkJg4yDYoNYg5MgMiCXdpbxCisKKworICAxLiCDSoFbg1yDi4jKknWCqYLnklCM6oLMlpaU9oLcgsWC8I3tj5yCt4LpgsmCzSBkdyCCxoNeg0ODdoK1gtyCt4FCCisKKyAgMi4gg0qBW4Ncg4uIypJ1gqmC541zgsyWlpT2gtyCxYLwje2PnIK3gumCyYLNIGQkIILGg16DQ4N2grWC3IK3gUIKKworICAzLiCNc5FTkcyC8I3tj5yCt4LpgsmCzSBkZCCCxoNeg0ODdoK1gtyCt4FCCisKKyAgNC4gg22BW4N9g4uDgoFbg2iCxYLMg1KDfYOTg2iMYI6ugs0KKworICAgW4nxkJRdICAgg1KDfYOTg2ggICCW2pNJjOogICAgIILggrWCrYLNICAgIINSg32Dk4NoICAgW4nxkJRdICAgltqTSYzqCisgICAgIIK7guqCvILqOgorICAgICAgIInxkJQgICAgIC0ggruCzINSg32Dk4NogvCJvYnxjEqC6JXUgreCqYFCCisgICAgICAgg1KDfYOTg2ggLSCN7Y+cIGQggsyX3oLFib2C8IK3gumCqYFCCisgICAgICAgltqTSYzqICAgLSCSUIzqIHcgguKNc5aWICQggsiCx4LMl96CxYm9gsmRzoK1gsSTrYKrgqmCr4LpgqmBQgorCisgIDUuIJFPifGCzJOujeyC8I7mj8GCtzoJdSAgICiPrJW2jpogdSkKKyAgICAgjXORU5HMgsyVz41YgvCO5o/Bgrc6CVUgICAokeWVto6aIFUpCisgICAgII7mj8GCtYLMjuaPwYK1OgkJQ1RSTC1SCisKKworfn5+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+CisJCQkgICCDjINig1iDkyAzLjE6IJNcguiVdIKvg1KDfYOTg2gKKworCisgICAgKiogjcWM44LJje2PnIKzguqCvY1zgvCDSoFbg1yDi4LMjOOCyZNcguiVdIKvgumCyYLNIHAggvCDXoNDg3aCtYLcgrcgKioKKworICAxLiCIyIm6gsySaZeOgsyNxY+JgsyNc4LJg0qBW4Ncg4uC8Ijak66CtYLcgrWC5YKkgUIKKworICAyLiBkZCAggsaDXoNDg3aCtYLEjXOC8I3tj5yCtYFBVmltIILMg2+DYoN0g0CCyYpplFuCtYLcgrWC5YKkgUIKKworICAzLiCN7Y+cgrWCvY1zgqqWe5eIgqCC6YLXgquIypJ1gsyP44LMjXOC3ILFgUGDSoFbg1yDi4LwiNqTroKzgrmC3IK1guWCpIFCCisKKyAgNC4gg22BW4N9g4uDgoFbg2iCxSBwIILwg16DQ4N2grWCxIpplFuCtYK9jXOC8InmlsqCyZbfgrWC3IK3gUIKKworICA1LiCPh5TUgqqQs4K1gq2CyILpl2yCyYNYg2WDYoN2IDIggqmC5yA0IILwjEqC6JXUgrWC3IK1guWCpIFCCisKKyAgICAgZCkgi02V+4LgineC1IKxgsaCqoLFgquC6T8KKyAgICAgYikgg1iDfoOMgs2QwoKigUEKKyAgICAgYykgkm2MYoLGgs2Kd4LUguCCzIFBCisgICAgIGEpIINvg4mCzZDUgqKBQQorCisKKworfn5+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+CisJCQkgg4yDYoNYg5MgMy4yOiCSdYKrireCpoNSg32Dk4NoCisKKworCSAgICoqIINKgVuDXIOLgsyJuoLMlbaOmoLwknWCq4q3gqaC6YLJgs0gciCC8INeg0ODdoK1gtyCtyAqKgorCisgIDEuIIjIibqCzCAtLS0+IILGi0yCs4Lqgr2Cs4Lqgr2NxY+JgsyNc4LJg0qBW4Ncg4uC8Ijak66CtYLcgrWC5YKkgUIKKworICAyLiCNxY+JgsyK1IjhgqKCzJDmk6qCyYNKgVuDXIOLgvCI2pOugrWC3IK1guWCpIFCCisKKyAgMy4gciCCxoNeg0ODdoK1gUGK1IjhgsGCxIKigumVto6agvCSdYKrireCpoLpgUGQs4K1gqKVto6agvCDXoNDg3aCtYLcgrWC5YKkgUIKKworICA0LiCNxY+JgsyNc4KqkLOCtYKtgsiC6YLcgsWDWINlg2KDdiAyIIKpgucgMyCC8IxKguiV1IK1gtyCtYLlgqSBQgorCistLS0+ICCCsYLMjYeC8JBsl82CtYK9jp6Cy4FBgruCzJBsgs2K9ILCgqmW4ojhgsGCvYNMgVuC8ImfgrWC4IK1gr0hCistLS0+ICCCsYLMjXOC8JP8l82CtYK9jp6CyYFBgruCzJBsgs2K9ILCgqmK1IjhgsGCvYNMgVuC8ImfgrWC3IK1gr0hCisKKyAgNS4ggrOCn4FBg4yDYoNYg5MgMy4yIILJiNqC6ILcgrWC5YKkgUIKKworTk9URTogjsCN24LJjo6CtYLcgrWC5YKkgUKMiIK1gsSKb4KmgumCvoKvgsmCzYK1gsiCooKxgsaBQgorCisKKworfn5+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+CisJCQmDjINig1iDkyAzLjM6IJXPjViDUoN9g5ODaAorCisKKwkgKiogklCM6oLMiOqVlIFBguCCtYKtgs2RU5HMgvCVz41YgreC6YLJgs0gY3cggsaDXoNDg3aCtYLcgrcgKioKKworICAxLiCIyIm6gswgLS0tPiCCxotMgrOC6oK9grOC6oK9jcWPiYLMjXOCyYNKgVuDXIOLgvCI2pOugrWC3IK1guWCpIFCCisKKyAgMi4gbHVidyCCzCB1IILMiMqSdYLJg0qBW4Ncg4uC8Ijak66CtYLcgrWC5YKkgUIKKworICAzLiBjdyCCxoNeg0ODdoK1gUGQs4K1gqKSUIzqgvCDXoNDg3aCtYLcgrWC5YKkKIKxgsyP6o2HICdpbmUnIILGg16DQ4N2KYFCCisKKyAgNC4gjp+CzIrUiOGCoiiVz41YgreC14KrlbaOmoLMkOaTqimCyYjak66Ct4Lpgr2C34LJIDxFU0M+IILwg16DQ4N2grWC3IK3gUIKKworICA1LiCNxY+JgsyNc4Kqjp+CzI1zgsyXbILJgsiC6YLcgsWDWINlg2KDdiAzIILGIDQggvCMSoLoldSCtYLcgreBQgorCistLS0+IFRoaXMgbHVidyBoYXMgYSBmZXcgd3B0ZmQgdGhhdCBtcnJmIGNoYW5naW5nIHVzZiB0aGUgY2hhbmdlIGNvbW1hbmQuCistLS0+IFRoaXMgbGluZSBoYXMgYSBmZXcgd29yZHMgdGhhdCBuZWVkIGNoYW5naW5nIHVzaW5nIHRoZSBjaGFuZ2UgY29tbWFuZC4KKworY3cggs2SUIzqgvCVz41YgreC6YK+gq+CxYLIgq2BQZF9k/yC4I1zgqaC6YKxgsaCyZKNiNOCtYLcgrWC5YKkgUIKKworCisKK35+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+fgorCQkgICAgIIOMg2KDWIOTIDMuNDogYyCC8I5nl3CCtYK9gruCzJG8gsyVz41YCisKKworICAgICAqKiCVz41Yg1KDfYOTg2iCzYFBje2PnINSg32Dk4NogsaTr4K2l2yCyYNJg3WDV4NGg06DZ4LwjmeXcIK1gtyCtyAqKgorCisKKyAgMS4glc+NWINSg32Dk4Nogs2BQY3tj5yDUoN9g5ODaILGk6+CtoLmgqSCyJOujeyC8IK1gtyCt4FCgruCzIxgjq6CzQorCisJIFuJ8ZCUXSAgIGMgICCW2pNJjOogICAgICCC4IK1gq2CzSAgICAgIGMgICBbifGQlF0gICCW2pNJjOoKKworICAyLiCDSYN1g1eDRoNOg2eC4JOvgraCxYFBdyCCzZJQjOqBQSAkIILNjXOWloLIgseCxoKigsGCvYLggsyCxYK3gUIKKworICAzLiCIyIm6gswgLS0tPiCCxotMgrOC6oK9grOC6oK9jXOCyYNKgVuDXIOLgvCI2pOugrWC3IK1guWCpIFCCisKKyAgNC4gjcWPiYLMitSI4YKigtaDSoFbg1yDi4LwiNqTroK1gtyCtYLlgqSBQgorCisgIDUuIGMkIILGg16DQ4N2grWCxI1zgsyOY4LogvCCUY1zltqCzJdsgsmCtYFBPEVTQz4ggvCJn4K1gtyCtYLlgqSBQgorCistLS0+IFRoZSBlbmQgb2YgdGhpcyBsaW5lIG5lZWRzIHNvbWUgaGVscCB0byBtYWtlIGl0IGxpa2UgdGhlIHNlY29uZC4KKy0tLT4gVGhlIGVuZCBvZiB0aGlzIGxpbmUgbmVlZHMgdG8gYmUgY29ycmVjdGVkIHVzaW5nIHRoZSAgYyQgIGNvbW1hbmQuCisKKworfn5+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+CisJCQkJg4yDYoNYg5MgMyCXdpbxCisKKworICAxLiCK+YLJje2PnIKzguqCvYNlg0yDWINngvCNxJR6knWCt4LpgsmCzYFBcCCC8INeg0ODdoK1gtyCt4FCgrGC6oLNje2PnIKzCisgICAgIILqgr2DZYNMg1iDZ4Lwg0qBW4Ncg4uCzIzjgsmRfZP8grWC3IK3KI1zklCIyoLFje2PnIKzguqCvYLMgsiC54LOgUGDSoFbCisgICAgIINcg4uCzIKggumOn4LMjXOCyZF9k/yCs4LqgtyCtymBQgorCisgIDIuIINKgVuDXIOLgsyJuoLMlbaOmoLwknWCq4q3gqaC6YLJgs2BQXIggvCDXoNDg3aCtYK9jOOBQYK7guqC8JJ1gquKt4KmgukKKyAgICAglbaOmoLwg16DQ4N2grWC3IK3gUIKKworICAzLiCVz41Yg1KDfYOTg2iCxYLNg0qBW4Ncg4uIypJ1gqmC55PBkuiCzJbak0mM6oLFjneS6IKzguqC6Y9JkluC3ILFgvCVz41YCisgICAgIIK3gumCsYLGgqqJwpRcgsWCt4FCl+GCpoLOIGN3IILIgueCzoNKgVuDXIOLiMqSdYKpgueSUIzqgsyPSYLtguiC3ILFgUEKKyAgICAgYyQggsiC54LOjXOCzI9Jgu2C6ILcgsWC8JXPjViCtYLcgreBQgorCisgIDQuIJXPjViDUoN9g5ODaILMjGCOroLNCisKKwkgW4nxkJRdICAgYyAgIJbak0mM6iAgICAgIILggrWCrYLNICAgICAgYyAgIFuJ8ZCUXSAgIJbak0mM6gorCiuCs4KfgUGOn4LMg4yDYoNYg5OCyYjaguiC3IK1guWCpIFCCisKKworCit+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+fn4KKwkJICAgICCDjINig1iDkyA0LjE6IIjKknWCxoN0g0CDQ4OLgsyP7pXxCisKKworICAqKiCDdINAg0ODi5PggsWCzIjKknWCxoN0g0CDQ4OLgsyP85HUgvCVXI6mgreC6YLJgs0gQ1RSTC1nIILwg16DQ4N2grWC3IK3gUIKKyAgICAgg3SDQINDg4uT4ILMgqCC6Y1zgsmI2pOugreC6YLJgs0gU0hJRlQtRyCC8INeg0ODdoK1gtyCtyAqKgorCisgICAgIE5PVEU6IINYg2WDYoN2gvCOwI1zgreC6ZFPgsmBQYKxgsyDjINig1iDk5FTgsSCyZbagvCSyoK1gtyCtYLlgqQhIQorCisgIDEuIENUUkwggvCJn4K1gr2C3ILcIGcggvCJn4K1gtyCtYLlgqSBQoN5gVuDV4LMiOqU1Im6gsmCoILpg1iDZYFbg16DWI1zCisgICAgIILJg3SDQINDg4uWvILGjXOCqpVcjqaCs4LqgumCzYK4gsWCt4FCIINYg2WDYoN2IDMggsyCvYLfgsmNc5TUjYaC8AorICAgICCKb4KmgsSCqIKrgtyCtYLlgqSBQiiW847Sko06g4uBW4OJgVuCqoKggumP6o2Hgs2Cu4K/gueCyZKNltopCisKKyAgMi4gjcWJuo1zgsmI2pOugreC6YK9gt+CySBzaGlmdC1HIILGg16DQ4N2grWC3IK1guWCpIFCCisKKyAgMy4gkOaC2YLHgsyNc4LMlNSNhoLwg16DQ4N2grWBQSBzaGlmdC1HIILwg16DQ4N2grWC3IK1guWCpIFCCisgICAgII3Fj4mCySBDdHJsLWcggvCJn4K1gr2Nc4LJlt+CwYLEl4iC6YLNgriCxYK3gUIKKyAgICAgKJCUjpqC8INeg0ODdoK1gsSCooLpgsaCq4LJgs2J5pbKgsmVXI6mgrOC6oLcgrmC8SkKKworICA0LiCOqZBNgqqOnYLEgr2C54NYg2WDYoN2IDEggqmC5yAzIILwjsCNc4K1gtyCtYLlgqSBQgorCisKKworfn5+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+CisJCQkgICCDjINig1iDkyA0LjI6IIyfjfWDUoN9g5ODaAorCisKKwkgKiogjOqL5YLwjJ+N9YK3gumCyYLNIC8ggsaBQZFPlfuMn431greC6Yzqi+WC8INeg0ODdoK1gtyCt4FCKioKKworICAxLiCDbYFbg32Di4OCgVuDaILFIC8ggsaCooKklbaOmoLwg16DQ4N2grWC3IK3gUKJ5pbKiOqU1Im6gskgOiCDUoN9g5ODaAorICAgICCCxpOvgraXbILJIC8ggqqMu4LqgumCsYLGgsmLQ4LDgq2CxYK1guWCpIFCCisKKyAgMi4ggsWCzYFBJ2VycnJvb3InIDxFTlRFUj4ggsaDXoNDg3aCtYLcgrWC5YKkgUKCsYLqgqqMn431grWCvYKiklCM6oLFgreBQgorCisgIDMuIJOvgraM6oLwguCCpIjqk3iMn431greC6YLGgquCzSCSUILJIG4ggvCDXoNDg3aCtYLcgreBQgorICAgICCLdJX7jPyCyYzqi+WC8IyfjfWCt4LpgsaCq4LNIE4ggvCDXoNDg3aCtYLcgreBQgorCisgIDQuIIt0lfuM/ILJjOqL5YLwjJ+N9YK1gr2Coo/qjYeCzYFBLyCDUoN9g5ODaILMgqmC7YLogskgPyCDUoN9g5ODaILwjmeXcIK1CisgICAgIILcgreBQgorCistLS0+ICJlcnJyb29yIiBpcyBub3QgdGhlIHdheSB0byBzcGVsbCBlcnJvcjsgIGVycnJvb3IgaXMgYW4gZXJyb3IuCisKK4yfjfWCqoN0g0CDQ4OLgsyPSYLtguiCyZJCgreC6YLGgUGDdINAg0ODi4LMkOaTqoKpgueMn431gvCRsY1zgrWC3IK3gUIKKworCisKK35+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+fgorCQkgICAgICCDjINig1iDkyA0LjM6IJHOiZ6Ct4LpioeMyoLwjJ+N9QorCisKKwkgICAgKiogkc6JnoK3gukgKSxdIILiIH0ggvCMn431greC6YLJgs0gJSCC8INeg0ODdoK1gtyCtyAqKgorCisgIDEuIIjIibqCzCAtLS0+IILGi0yCs4Lqgr2Cs4Lqgr2Nc4LFICgsWyCCqSB7IILMgseC6oKpgsmDSoFbg1yDi4LwiNqTrgorICAgICCCtYLcgrWC5YKkgUIKKworICAyLiCCu4KxgsUgJSCCxoNeg0ODdoK1gtyCtYLlgqSBQgorCisgIDMuIINKgVuDXIOLgs2RzomegreC6YqHjMqCyYjak66Ct4Lpgs2CuILFgreBQgorCisgIDQuII3Fj4mCzIqHjMqCyYjak66Ct4LpgsmCzSAlIILGg16DQ4N2grWC3IK1guWCpIFCCisKKy0tLT4gVGhpcyAoIGlzIGEgdGVzdCBsaW5lIHdpdGggKCdzLCBbJ3MgXSBhbmQgeydzIH0gaW4gaXQuICkpCisKK05PVEU6IIKxgsyLQJRcgs2Kh4zKgqqI6pJ2grWCxIKigsiCooN2g42DT4OJg4CC8INmg2+DYoNPgreC6YLMgsmCxoLEguCW8Jengr8KKyAgICAgIILcgreBQgorCisKKworCit+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+fn4KKwkJICAgICAgIIOMg2KDWIOTIDQuNDogitSI4YKigvCVz41YgreC6ZX7lkAKKworCisJKiogJ29sZCcggvAgJ25ldycggsmSdYq3greC6YLJgs0gOnMvb2xkL25ldy9nIILGg16DQ4N2grWC3IK3ICoqCisKKyAgMS4giMiJuoLMIC0tLT4ggsaLTIKzguqCvYKzguqCvY1zgsmDSoFbg1yDi4LwiNqTroK1gtyCtYLlgqSBQgorCisgIDIuIDpzL3RoZWUvdGhlIDxFTlRFUj4ggsaDXoNDg3aCtYLcgrWC5YKkgUKCsYLMg1KDfYOTg2iCzYK7gsyNc4LFjcWPiYLJjKkKKyAgICAggsKCqYLBgr2C4ILMgsmCvoKvjXOCyILtguqC6YKxgsaCyYtDgvCCwoKvgtyCtYLlgqSBQgorCisgIDMuIILFgs0gOnMvdGhlZS90aGUvZwmCxoNeg0ODdoK1gtyCtYLlgqSBQo1zkVORzILwknWKt4K3gumCsYLGgvCI05ahgrWC3IK3gUIKKyAgICAggrGCzJXPjViCzYK7gsyNc4LFjKmCwoKpgsGCvZFTgsSCzInTj4qCyZHOgrWCxI1zgsiC7YLqgtyCt4FCCisKKy0tLT4gdGhlZSBiZXN0IHRpbWUgdG8gc2VlIHRoZWUgZmxvd2VycyBpcyBpbiB0aGVlIHNwcmluZy4KKworICA0LiCVoZCUjXOCqYLnjKmCwoKpgumVto6agvCVz41YgreC6YLJgs0KKyAgICAgOiMsI3Mvb2xkL25ldy9nICAgICMsIyCCzYJRjXOCzI1zlNSNhoLwjneCtYLcgreBQgorICAgICA6JXMvb2xkL25ldy9nICAgICAgg3SDQINDg4uRU5HMgsWMqYLCgqmC6YLggsyCyZHOgrWCxJXPjViCt4LpgUIKKworCisKKworfn5+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+CisJCQkJg4yDYoNYg5MgNCCXdpbxCisKKworICAxLiBDdHJsLWcggs2DdINAg0ODi4LFgsyIypJ1gsaDdINAg0ODi4LMj9qN14LwlVyOpoK1gtyCt4FCCisgICAgIFNoaWZ0LUcggs2DdINAg0ODi4LMjcWJuo1zgsmI2pOugrWC3IK3gUKNc5TUjYaM44LJIFNoaWZ0LUcggsaCt4LpgsYKKyAgICAggruCzI1zgsmI2pOugrWC3IK3gUIKKworICAyLiAvIILMjOOCyYzqi+WC8INeg0ODdoK3gumCxpFPlfuCyYzqi+WC8IyfjfWCtYLcgreBQgorICAgICA/IILMjOOCyYzqi+WC8INeg0ODdoK3gumCxozjlfuCyYzqi+WC8IyfjfWCtYLcgreBQgorICAgICCMn431gsyM4yBuIILFgUGTr5X7jPyCyYyfjfWC8I3EgtGNc4KigUGC3IK9IE4ggsWLdJX7jPyCyYyfjfWC8I1zgsiCooLcCisgICAgIIK3gUIKKworICAzLiAoLCksWyxdLHssIG9yIH0gj+OCyYNKgVuDXIOLgqqCoILpj/OR1ILFICUggvCDXoNDg3aCt4LpgsYKKyAgICAgkc6JnoK1gr2RzoLJiNqTroK1gtyCt4FCCisKKyAgNC4gjLuN3Y1zgsyNxY+Jgswgb2xkIILwIG5ldyCCyZJ1ireCt4LpgUIJOnMvb2xkL25ldworICAgICCMu43djXOCzJFTgsSCzCBvbGQggvAgbmV3IILJknWKt4K3gumBQgk6cy9vbGQvbmV3L2cKKyAgICAgMoLCgswgIyCK1ILFjOqL5YLwknWKt4K3gumBQgkJOiMsI3Mvb2xkL25ldy9nCisgICAgIIN0g0CDQ4OLgsyShoLMkVOCxILMjJ+N9Yzqi+WC8JJ1ireCt4LpgUIJOiVzL29sZC9uZXcvZworICAgICAnYycggvCJwYKmgumCxpJ1ireCzJN4gsmKbZRGgvCLgYLfgumBQgk6JXMvb2xkL25ldy9nYworCisKK35+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+fgorCQkgICAgg4yDYoNYg5MgNS4xOiCKT5WUg1KDfYOTg2iC8I7AjXOCt4LplfuWQAorCisKKwkgICAgICoqIDohIILMjOOCyY7AjXOCt4Lpik+VlINSg32Dk4NogvCDXoNDg3aCtYLcgrcgKioKKworICAxLiCJ5pbKgsyNxYm6lZSCyYNKgVuDXIOLgqqI2pOugreC6YLmgqSBQYq1guqQZYK1gvGCviA6IILwg16DQ4N2grWC3IK1guWCpIFCCisgICAgIIKxguqCxYNSg32Dk4NogqqDXoNDg3aCxYKrgumXbILJgsiC6ILcgreBQgorCisgIDIuIIKxgrGCxSAhIILGgqKCpJW2jpooirSSUZWEKYLwg16DQ4N2grWC3IK1guWCpIFCCisgICAgIIKxguqCxYpPlZSDVoNGg4uDUoN9g5ODaIKqjsCNc4LFgquC6ZdsgsmCyILogtyCt4FCCisKKyAgMy4gl+GCxoK1gsQgISCCyZGxgq+CxCBscyCCxoNeg0ODdoK1IDxFTlRFUj4ggvCJn4K1gtyCtYLlgqSBQgorICAgICCDVoNGg4uDdoONg5ODdoNngsyC5oKkgsmDZoNCg4yDToNng4qCzIjql5eCqpVcjqaCs4LqgumCzYK4gsWCt4FCCisgICAgIILggrWCrYLNIGxzIIKqk66CqYLIgqKCyILngs4gOiFkaXIggvCOZ5dwgrWC3IK1guWCpIFCCisKKy0tLT4gTk9URTogIIKxgsyV+5ZAgsmC5oLBgsSCoILnguSC6YNSg32Dk4NogqqOwI1zgreC6YKxgsaCqoLFgquC3IK3gUIKKworLS0tPiBOT1RFOiAgkVOCxILMIDogg1KDfYOTg2iCzSA8RU5URVI+IILwiZ+CtYLEj0mXuYK1gsiCr4Lqgs6CyILogtyCuYLxgUIKKworCisKKworfn5+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+CisJCSAgICCDjINig1iDkyA1LjI6IIK7gsyRvILMg3SDQINDg4uC1o+RgquNnoLdCisKKworCSoqIIN0g0CDQ4OLgtaVz41YgvCV25G2greC6YLJgs0gOncgg3SDQINDg4uWvCCCxoNeg0ODdoK1gtyCtyAqKgorCisgIDEuIINmg0KDjINOg2eDioLMiOqXl4Lwk76C6YK9gt+CySA6IWRpciCC4IK1gq2CzSA6IWxzIILGg16DQ4N2grWC3IK1guWCpIFCCisgICAgIIKxgsyCoILGIDxFTlRFUj4ggvCJn4K3gsyCzYr5gsmCspG2km2CxYK3gsuBQgorCisgIDIuIFRFU1QggsyC5oKkgsmBQYK7gsyDZoNCg4yDToNng4qCyZazgqKDdINAg0ODi5a8gvCI6oLCkUmC0YLcgreBQgorCisgIDMuIILFgs0gOncgVEVTVCCCxoNeg0ODdoK1gtyCtYLlgqQgKFRFU1Qggs2BQZFJgvGCvoN0g0CDQ4OLlryCxYK3KYFCCisKKyAgNC4ggrGC6oLJguaC6IN0g0CDQ4OLkVORzIKqIFRFU1QggsaCooKklryRT4LFlduRtoKzguqC3IK3gUIKKyAgICAgguCCpIjqk3ggOiFkaXIggsaDXoNDg3aCtYLEim2URoK1gsSC3YLcgrWC5YKkgUIKKworLS0tPiCCsYKxgsUgVmltIILwj0mXuYK1gUGDdINAg0ODi5a8IFRFU1QggsaLpILJi06TroK3gumCxoFBlduRtoK1gr2OnoLMCisgICAgIINgg4WBW4Nng4qDQYOLgsyVoZC7gqqCxYKrj+OCqoLpgs2CuILFgreBQgorCisgIDUuIILFgs2BQSA6IWRlbCBURVNUIILGg16DQ4N2grWCxIN0g0CDQ4OLgvCN7Y+cgrWCxILdgtyCtYLlgqSBQgorCisKKworfn5+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+CisJCQkgg4yDYoNYg5MgNS4zOiCRSZHwgrWCvY+RgquNnoLdCisKKworCSAgKioglZSVqpNJgsmV25G2greC6YLJgs0gOiMsIyB3IIN0g0CDQ4OLlrwggsaDXoNDg3aCtYLcgrcgKioKKworICAxLiCC4IKkiOqTeINmg0KDjINOg2eDioLMiOqXl4LwjuaTvoK3gumCvYLfgskgOiFscyCCxoNeg0ODdoK1gUFURVNUIILMl2yCyQorICAgICCDdINAg0ODi4LwiOqCwpFJgvGCxYLdgtyCtYLlgqSBQgorCisgIDIuIIKxgsyDeYFbg1eCzI5ugt+C3ILFg0qBW4Ncg4uC8Ijak66CtYFBg3SDQINDg4uCzI1zkJSC8JJtgumCvYLfgskgQ3RybC1nIILGCisgICAgIINeg0ODdoK1gtyCtYLlgqSBQoK7gsyNc5TUjYaC8ImvgqaCxIKogquC3IK1guWCpIFCCisKKyAgMy4ggruCtYLEg3mBW4NXgsyPSYLogtyCxYjak66CtYFBjcSTeCBDdHJsLWcggvCNc4KigtyCt4FCCisgICAgIIKxgsyNc5TUjYaC4ImvgqaCxIKogquC3IK1guWCpIFCCisKKyAgNC4ggqCC6ZWUlaqCvoKvgvAgVEVTVCCCxoKigqSWvILFlduRtoK3gumCvYLfgsmBQTojLCMgdyBURVNUIILGg16DQ4N2grWC3IK3gUIKKyAgICAggrGCzCAjLCMggs2Kb4KmgsSCqIKigr2CUYLCgsyU1I2GKI/jklssibqSWykggsWCoILogUEgVEVTVCCCqoN0g0CDQ4OLlrwKKyAgICAggsaCyILogtyCt4FCCisKKyAgNS4gjcSTeIFBg3SDQINDg4uCqpG2jd2Ct4LpgrGCxoLwim2URoK3gumCvYLfgskgOiFkaXIggsaDXoNDg3aCtYLcgrWC5YKkgUIKKyAgICAggr2CvoK1grGCzIN0g0CDQ4OLgs2PwYK1gsSCzYKigq+C3IK5gvGBQgorCisKK35+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+fgorCQkgICAgICAgg4yDYoNYg5MgNS40OiCDdINAg0ODi4LMjuaNnoLGjYeVuQorCisKKwkqKiCDdINAg0ODi4LMkoaQZ4LwkX2T/IK3gumCyYLNIDpyIIN0g0CDQ4OLlrwggsaDXoNDg3aCtYLcgrcgKioKKworICAxLiCQ5oLZgseCzCBURVNUIILGgqKCpIN0g0CDQ4OLgqqRto3dgreC6YKxgsaC8IptgqmC34Lpgr2C34LJIDohZGlyIILGCisgICAgIINeg0ODdoK1gtyCtYLlgqSBQgorCisgIDIuIINKgVuDXIOLgvCCsYLMg3mBW4NXgsyQ5pOqgsmI2pOugrWC3IK3gUIKKworTk9URTogg1iDZYNig3YgMyCC8I7AjXOCt4LpgsaBQYnmlsqCySCDjINig1iDkyA1LjMggqqMu4LtguqC6YLMgsWBQYNKgVuDXIOLgvAKKyAgICCJuoLJiNqTroK1grGCzIOMg2KDWIOTgtyCxZbfguiC3IK1guWCpIFCCisKKyAgMy4ggsWCzYFBOnIgVEVTVCCCxoNeg0ODdoK1gsQgVEVTVCCDdINAg0ODi4LwjuaNnoLdgtyCtYLlgqSBQoKxgswgVEVTVCCCzQorICAgICCDdINAg0ODi5a8gsWCt4FCCisKK05PVEU6ICCDdINAg0ODi4LMjuaNnoLdgs2DSoFbg1yDi4LMiMqSdYKpgueNc4LtguqC3IK3gUIKKworICA0LiCO5o2egvGCvoN0g0CDQ4OLgvCKbZRGgrWCxILdgtyCtYLlgqSBQoNKgVuDXIOLgvCW34K3gsaBQYOMg2KDWIOTNS4zIILMCisgICAgIINJg4qDV4Npg4uCxoN0g0CDQ4OLgsmC5oLpguCCzILMMoLCgqqCoILpgrGCxoKqgu2CqYLogtyCt4FCCisKKworfn5+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+CisJCQkgICAgICAgg4yDYoNYg5MgNSCXdpbxCisKKworICAxLiAgOiFjb21tYW5kICCCyYLmgsGCxCCKT5WUg1KDfYOTg2iC8I7AjXOCtYLcgreBQgorCisgICAgIILmgq2OZ4Kkl+E6CisJICA6IWxzICAgICAgICAgICAgICAgIC0gIINmg0KDjINOg2eDioLMg3SDQINDg4uI6peXgvCMqYLpgUIKKwkgIDohZGVsIIN0g0CDQ4OLlrwgICAgLSAgg3SDQINDg4uWvILGgqKCpIN0g0CDQ4OLgsyN7Y+cgreC6YFCCisKKyAgMi4gIDp3IIN0g0CDQ4OLlrwggsmC5oLBgsSDdINAg0ODi5a8gsaCooKkg3SDQINDg4uCqoNmg0KDWINOgsmPkYKrjZ6C3ILqgumBQgorCisgIDMuICA6IywjIHcgg3SDQINDg4uWvCCCyYLmgsGCxCAjIIKpgucgIyCC3ILFgvCV25G2greC6YFCCisKKyAgNC4gIDpyIIN0g0CDQ4OLlrwggsmC5oLog3SDQINDg4uWvILGgqKCpIN0g0CDQ4OLgqqDZoNCg1iDToLmguiO5o2egtyC6oFBCisgICAgICCDSoFbg1yDi4jKknWCzIm6gsmRfZP8grOC6oLpgUIKKworCisKKworCisKKworfn5+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+CisJCQkgg4yDYoNYg5MgNi4xOiCDSYFbg3aDk4NSg32Dk4NoCisKKworICAgICoqIG8ggvCDXoNDg3aCt4LpgsaBQYNKgVuDXIOLgsyJuoLMjXOCqopKgquBQZF9k/yDgoFbg2iCyZP8guiC3IK3ICoqCisKKyAgMS4giMiJuoLMIC0tLT4ggsaLTIKzguqCvYKzguqCvY1zgsmDSoFbg1yDi4LwiNqTroK1gtyCtYLlgqSBQgorCisgIDIuIG8gKI+slbaOmikggvCDXoNDg3aCtYLEgUGDSoFbg1yDi4LMibqCzI1zgvCKSoKrgUGRfZP8g4KBW4NogsmT/ILogtyCt4FCCisKKyAgMy4gLS0tPiCCxotMgrOC6oK9jXOC8I7KgrWBQTxFU0M+IILGg16DQ4N2grWCxJLHicGDgoFbg2iC8I9Jl7mCtYLcgrWC5YKkgUIKKworLS0tPiBvICCC8INeg0ODdoK3gumCxoNKgVuDXIOLgs2KSoKigr2Nc4LWiNqTroK1kX2T/IOCgVuDaILJk/yC6ILcgreBQgorCisgIDQuIINKgVuDXIOLgsyP44LMjXOCyZF9k/yCt4LpgsmCzYFBj6yVto6agswgbyCCxYLNgsiCrYFBklCPg4LJkeWVto6agswgTworICAgICCC8INeg0ODdoK1gtyCt4FCjp+CzI1zgsWOjoK1gsSC3YLcgrWC5YKkgUIKK4KxgsyNc4LMj+OC1pF9k/yCt4LpgsmCzYFBgrGCzI1zgtaDSoFbg1yDi4LwknWCooLEIFNoaWZ0LU8ggvCDXoNDg3aCtYLcgreBQgorCisKKworCisKKworfn5+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+CisJCQmDjINig1iDkyA2LjI6IJLHicGDUoN9g5ODaAorCisKKyAgICAgICoqIINKgVuDXIOLgsyOn4LMiMqSdYKpgueDZYNMg1iDZ4LwkseJwYK3gumCyYLNIGEggsaDXoNDg3aCtYLcgrcgKioKKworICAxLiCDbYFbg32Di4OCgVuDaILJgrWCxIjIibqCzCAtLS0+IILGi0yCs4Lqgr2Cs4Lqgr2NxY+JgsyNc4LFICQggvCDXoNDg3aCtQorICAgICCCxIFBj0mSW4LJg0qBW4Ncg4uC8Ijak66CtYLcgrWC5YKkgUIKKworICAyLiCDSoFbg1yDi4LMlbaOmoLMjOOC64LJg2WDTINYg2eC8JLHicGCt4Lpgr2C34LJIGEgKI+slbaOmikggvCDXoNDg3aCtYLcCisgICAgIIK3gUIKKworTk9URToggrGC6oLNjcWM44LMlbaOmoLJgsSDZYNMg1iDZ4LwkX2T/IK1gUE8RVNDPiCC8INeg0ODdoK1gsSDSoFbg1yDi4LwiUWCyQorICAgICAgiNqTroK1gUGNxYzjgskgeCCDXoNDg3aCtYLEjXOWloLJkseJwYK3gumCxoKigsGCvYLmgqSCyCBpIILMg16DQ4N2gvAKKyAgICAgIJTwgq+C6YKxgsaCqoKrgtyCt4FCCisKKyAgMy4ggrOCxI3Fj4mCzI1zgvCKrpCsgrWC3IK1guWCpIFCg2WDTINYg2eCqpF9k/yCs4LqgumIypJ1gvCPnIKvgs6BQQorICAgICCSx4nBg1KDfYOTg2iCzZF9k/yDgoFbg2iCxoLcgsGCvYKtk6+CtoLFgreBQgorCistLS0+IIKxgsyNc4LFgUGNc5aWgsmVto/NgvCSx4nBgreC6QorLS0tPiCCsYLMjXOCxYFBjXOWloLJlbaPzYLwkseJwYK3gumX+49LgvCCt4LpgrGCxoKqgsWCq4LpgsWCtYLlgqSBQgorCisKK35+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+fgorCQkJICAgg4yDYoNYg5MgNi4zOiCCu4LMkbyCzJJ1ircKKworCisJICAqKiAxlbaOmojIj+OC8JJ1gquKt4KmgumCyYLNkeWVto6agswgUiCCxoNeg0ODdoK1gtyCtYLlgqQgKioKKworICAxLiCIyIm6gswgLS0tPiCCxotMgrOC6oK9grOC6oK9jXOCyYNKgVuDXIOLgvCI2pOugrWC3IK1guWCpIFCCisKKyAgMi4gLS0tPiCCxotMgrOC6oK9glGNc5bagsaI4YKkgUGNxY+JgsySUIzqgsyQ5pOqgsmDSoFbg1yDi4LwiNqTroK1gtyCtYLlgqSBQgorICAgICAoklCM6iAnbGFzdCcpCisKKyAgMy4ggrGCsYLFIFIggvCDXoNDg3aCtYLEgUGNxY+JgsyNc4LGjp+CzI1zgqqTr4K2gsmCyILpguaCpILJivmRtoLMg2WDTINYg2cKKyAgICAggtaP44+RgquDXoNDg3aCtYFBglCNc5bagsyOY4LogsyVlJWqgvCPkYKrireCpoLcgrWC5YKkgUIKKworLS0tPiBUbyBtYWtlIHRoZSBmaXJzdCBsaW5lIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG9uIHRoaXMgcGFnZSB1c2UgdGhlIGtleXMuCistLS0+IFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCwgdHlwZSBSIGFuZCB0aGUgbmV3IHRleHQuCisKKyAgNC4gg4KBW4NogvCUsoKvgumCvYLfgskgPEVTQz4ggvCDXoNDg3aCt4LpgsaBQZXPjViCtYLEgqKCyIKilZSVqoKqjmOC6YKxgsYKKyAgICAggsmSjYjTgrWC3IK1guWCpIFCCisKKworCisKK35+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+fgorCQkgICAgICAgg4yDYoNYg5MgNi40OiCDSYN2g1aDh4OTgsyQ3ZLoCisKKworICAqKiCMn431guKSdYq3gsyN24LJkeWVto6agsaPrJW2jpqC8JazjouCt4Lpl2yCyYNJg3aDVoOHg5OC8JDdkuiCtYLcgrcgKioKKworCisgIDEuIIjIibqCzJdsgsmDXoNDg3aCtYLEICdpZ25vcmUnIILwjJ+N9YK1gtyCtYLlgqQ6CisgICAgICAgL2lnbm9yZQorICAgICBuIILwiZ+CtYLEib2TeIKpjJ+N9YLwjEqC6JXUgrWC3IK3gUIKKworICAyLiCIyIm6gsyXbILJg16DQ4N2grWCxCAnaWMnIChJZ25vcmUgQ2FzZSCCzJeqgsWCtykgg0mDdoNWg4eDk4LwkN2S6IK1gtyCt4FCCisgICAgICAgOnNldCBpYworCisgIDMuIILFgs0gbiCCyYLmgsGCxILggqQxk3ggJ2lnbm9yZScggvCMn431grWC3IK3gUIKKyAgICAgbiCC8ImfgrWCxIKzgueCyZCUifGMn431gvCMSoLoldSCtYLcgrWC5YKkgUIKKworICA0LiAnaGxzZWFyY2gnIILGICdpbmNzZWFyY2gnIINJg3aDVoOHg5OC8IjIibqCzJdsgsmQ3ZLogrWC3IK1guWCpIFCCisgICAgICAgOnNldCBobHMgaXMKKworICA1LiCC4IKkiOqTeIyfjfWDUoN9g5ODaILwk/yXzYK1gsSBQYm9gqqLToKxgumCqYypgsSC3YLcgrWC5YKkOgorICAgICAgIC9pZ25vcmUKKworfn5+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+CisJCQkJg4yDYoNYg5MgNiCXdpbxCisKKworICAxLiBvIILwg16DQ4N2greC6YLGg0qBW4Ncg4uCzIm6gsyNc4LwikqCr4LEgUGCu4KxgsWRfZP8g4KBW4NogsmCyILpgUIKKyAgICAgTyAokeWVto6aKSCC8INeg0ODdoK3gumCxoNKgVuDXIOLgsyP44LMjXOCxZF9k/yDgoFbg2iCyYLIgumBQgorCisgIDIuIINKgVuDXIOLj+OCzJW2jpqCzI6fgqmC54Nlg0yDWINngvCSx4nBgreC6YLJgs0gYSCCxoNeg0ODdoK3gumBQgorICAgICCNc5aWgsmOqZOugsWDZYNMg1iDZ4LwkX2T/IK3gumCyYLNkeWVto6aIEEggvCDXoNDg3aCt4LpgUIKKworICAzLiCR5ZW2jpqCzCBSIILwg16DQ4N2greC6YLGknWKt4OCgVuDaILJk/yC6IFBPEVTQz6C8ImfgreCxpSygq+C6YFCCisKKyAgNC4gIjpzZXQgeHh4IiCCxoNeg0ODdoK3gumCxoNJg3aDVoOHg5MgInh4eCIggqqQ3ZLogrOC6oLpgUIKKworCisKKworCisKKworCisKKworfn5+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+CisJCSAgICAgg4yDYoNYg5MgNzogg0mDk4OJg0ODk4N3g4uDdoNSg32Dk4NoCisKKwkJICAgICAqKiCDSYOTg4mDQ4OTg3eDi4N2gvCOZ5dwgrWC3IK1guWCpCAqKgorCisgIFZpbSCCyYLNjUyUzYLJgu2CvYLpg0mDk4OJg0ODk4N3g4uDdoNWg1iDZYOAgqqCoILogtyCt4FCCisgIIN3g4uDdoLwikqOboK3gumCyYLNgUGCsYLqguczgsKCzILHguqCqTGCwoLwjo6CtYLEgt2C3IK1guWCpDoKKwktIIN3g4uDdoNMgVsgPEhFTFA+IILwiZ+CtyiC4IK1gqCC6YLIgueCzimBQgorCS0gPEYxPiCDTIFbgvCJn4K3KILggrWCoILpgsiC54LOKYFCCisJLSA6aGVscCA8RU5URVI+IILGg16DQ4N2greC6YFCCisKKyAgg3eDi4N2g0WDQoOTg2iDRYLwlcKCtoLpgsmCzSA6cSA8RU5URVI+IILGg16DQ4N2grWC3IK3gUIKKworICAiOmhlbHAiIINSg32Dk4NogsmI+JCUgvCXXoKmgumCsYLGgsmC5oLogUGCoILnguSC6ZHolryCzIN3g4uDdoLwjKmCwoKvgukKKyAggrGCxoKqgsWCq4LcgreBQoKxguqC54Lwjo6CtYLEgt2C3IK1guWCpCg8RU5URVI+IILwg16DQ4N2grWWWYLqgsiCooLmgqSCySk6CisKKyAgOmhlbHAgdworICA6aGVscCBjXzxUCisgIDpoZWxwIGluc2VydC1pbmRleAorICA6aGVscCB1c2VyLW1hbnVhbAorCisKKworfn5+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+CisJCSAgICAgIIOMg2KDWIOTIDg6IItOk66DWINOg4qDdoNngsyN7JCsCisKKwkJCSAqKiBWaW0ggsyTwZKlgvCUrYr2greC6SAqKgorCisgIFZpbSCCyYLNIFZpIILmguiC4JG9gq2CzJPBkqWC8JOlgtyCpoLEgqKC3IKqgUGCu4LMgtmCxoLxgseCzY+JivqP85HUgsmCxAorICCOZ5dwlXOJwoLGgsiCwYLEgqKC3IK3gUKC5oLokb2CrYLMk8GSpYLwjmeCooLNgraC34LpgsmCzSAidmltcmMiIIN0g0CDQ4OLCisgIILwjeyQrIK1gtyCt4FCCisKKyAgMS4gInZpbXJjIiCDdINAg0ODi4LMldKPV4LwikqOboK3gumBQoKxguqCzYNWg1iDZYOAgsmIy5G2grWC3IK3gUIKKwk6ZWRpdCB+Ly52aW1yYwkJCVVOSVggjPyCrworCTplZGl0ICRWSU0vX3ZpbXJjCQlNUy1XaW5kb3dzIIz8gq8KKworICAyLiCCsYKxgsWDVIOTg3aDi4LMICJ2aW1yYyIggvCTx4LdjZ6C3YLcgreBQgorCisJOnJlYWQgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0KKworICAzLiCIyIm6gsyC5oKkgsmDdINAg0ODi4LWj5GCq42egt2C3IK3gUIKKworCTp3cml0ZQorCisgII6fifEgVmltIILwi06TroK3gumCxoFBkEaCw4KvjVyVtoKqjmeCpoLpguaCpILJgsiC6YLFgrWC5YKkgUIKKyAggrGCzCAidmltcmMiIIN0g0CDQ4OLgtaBQYKojUSC3YLMkN2S6ILwkseJwYK3gumCsYLGgqqCxYKrgtyCt4FCCit+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+fn4KKworICCCsYLqgsmCxCBWaW0ggsyDYIOFgVuDZ4OKg0GDi4Lwj0mC7YLogtyCt4FCg0eDZoNCg16C8IrIklCCyYFBgrWCqYLgj1uVqoLJCisgII5ngqSCsYLGgqqCxYKrgumC5oKkgsmCxoFBVmltIILMjp2CwopUlE+CzJd2k1+CzILdgvCTYIKmguaCpILGgrWC3IK1gr2BQgorICBWaW0ggsmCzYKzgueCyZG9gq2CzINSg32Dk4NogqqCoILogUGCsYKxgsWRU4LEgvCQ4Ja+greC6YKxgsaCzYLFgquC3IK5gvGBQgorICCIyI1+gs2DhoFbg1WDfYNqg4WDQYOLgvCOUY/Ggq2CvoKzgqI6ICJoZWxwIDp1c2VyLW1hbnVhbCIKKworICCCsYLqiMiM44LMinePS4LMgr2C34LJgUGOn4LMlnuC8JCEkUWCtYLcgreBQgorCVZpbSAtIFZpIEltcHJvdmVkIC0gYnkgU3RldmUgT3VhbGxpbmUKKwmPb5TFjtA6IE5ldyBSaWRlcnMKKyAgjcWPiYLMlnuCzYqukVOCySBWaW0ggsyCvYLfgsmPkYKpguqC3IK1gr2BQoLGguiC7YKvj4mQU47SgsmCzYKoj6eC34LFgreBQgorICCRvYKtgsyX4ZHoguKQfZTFgqqMZo3agrOC6oLEgqKC3IK3gUIKKyAgjp+CzFVSTILwjlGPxoK1gsSJuoKzgqIgaHR0cDovL2ljY2YtaG9sbGFuZC5vcmcvY2xpY2s1Lmh0bWwKKworICCOn4LNIFZpbSCC5oLoguAgVmkggsmCwoKigsSPkYKpguqCvYzDgqKWe4LFgreCqpCEkUWCtYLcgrc6CisJTGVhcm5pbmcgdGhlIFZpIEVkaXRvciAtIGJ5IExpbmRhIExhbWIKKwmPb5TFjtA6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcyBJbmMuCisgIFZpIILFguKC6IK9gqKCxo52gqSCsYLGgtmC2pFTgsSC8JJtgumCsYLGgqqCxYKrgumXx4+RgsWCt4FCCisgIJHmNpTFgsWCzYFBVmltIILJgsKCooLEgsyP7pXxguCK3ILcguqCxIKigtyCt4FCCisKKyAggrGCzINgg4WBW4Nng4qDQYOLgs0gQ29sb3JhZG8gU3RhdGUgVW5pdmVyc2l0eSCCzCBDaGFybGVzIFNtaXRoIILMg0GDQ4Nmg0EKKyAggvCK7oLJgUFDb2xvcmFkbyBTY2hvb2wgb2YgTWluZXMggswgTWljaGFlbCBDLiBQaWVyY2UggsYgUm9iZXJ0IEsuIFdhcmUggswKKyAgl7yWvILJguaCwYLEj5GCqYLqgtyCtYK9gUIgRS1tYWlsOiBid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUuCisKKyAgTW9kaWZpZWQgZm9yIFZpbSBieSBCcmFtIE1vb2xlbmFhci4KKworICCT+pZ7jOqW8yAgj7yWe5HXjU8gIEUtbWFpbDptYXR0bkBtYWlsLmdvby5uZS5qcAorCit+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+fn4KKyB2aTpzZXQgdHM9OCBzdHM9NCBzdz00IHR3PTc2OgpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci90dXRvci5qYS51dGYtOCBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuamEudXRmLTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1Njc3YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuamEudXRmLTgKQEAgLTAsMCArMSw4MTEgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAgViBJIE0g5pWZIOacrCAo44OB44Ol44O844OI44Oq44Ki44OrKSDjgbgg44KIIOOBhiDjgZMg44GdICAgICAgICAtICAgIFZlcnNpb24gMS41ICAgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgIFZpbSDjga/jgIHjgZPjga7jg4Hjg6Xjg7zjg4jjg6rjgqLjg6vjgafoqqzmmI7jgZnjgovjgavjga/lpJrjgZnjgY7jgovnqIvjga7jgrPjg57jg7Pjg4njgpLlgpnjgYjjgZ8KKyAgICAg6Z2e5bi444Gr5by35Yqb44Gq44Ko44OH44Kj44K/44O844Gn44GZ44CC44GT44Gu44OB44Ol44O844OI44Oq44Ki44Or44Gv44CB44GC44Gq44Gf44GMIFZpbQorICAgICDjgpLkuIfog73jgqjjg4fjgqPjgr/jg7zjgajjgZfjgabkvb/jgYTjgZPjgarjgZvjgovjgojjgYbjgavjgarjgovjga7jgavljYHliIbjgarjgrPjg57jg7Pjg4njgavjgaTjgYTjgaYKKyAgICAg6Kqs5piO44KS44GZ44KL44KI44GG44Gq44Gj44Gm44GE44G+44GZ44CCCisKKyAgICAg44OB44Ol44O844OI44Oq44Ki44Or44KS5a6M5LqG44GZ44KL44Gu44Gr5b+F6KaB44Gq5pmC6ZaT44Gv44CB6Kaa44GI44Gf44Kz44Oe44Oz44OJ44KS6Kmm44GZ44Gu44Gr44Gp44KMCisgICAgIOOBoOOBkeaZgumWk+OCkuS9v+OBhuOBruOBi+OBq+OCguOCiOOCiuOBvuOBmeOBjOOAgeOBiuOCiOOBnTI144CcMzDliIbjgafjgZnjgIIKKworICAgICDlrabjgbbjgrPjg57jg7Pjg4njgavjga/jgZPjga7mlofnq6DjgpLlpInmm7TjgZnjgovjgoLjga7jgoLjgYLjgorjgb7jgZnjgILnt7Tnv5LjgpLlp4vjgoHjgovliY3jgavjgrMKKyAgICAg44OU44O844KS5L2c5oiQ44GX44G+44GX44KH44GGKCJ2aW10dXRvciLjgZfjgZ/jgarjgonjgbDjgIHml6LjgavjgrPjg5Tjg7zjgZXjgozjgabjgYTjgb7jgZkp44CCCisKKyAgICAg44GT44Gu44OB44Ol44O844OI44Oq44Ki44Or44GM44CB5L2/44GG44GT44Go44Gn6Kaa44GI44KJ44KM44KL5LuV57WE44G/44Gr44Gq44Gj44Gm44GE44KL44GT44Go44KS44CB5b+DCisgICAgIOOBl+OBpuOBiuOBi+OBquOBkeOCjOOBsOOBquOCiuOBvuOBm+OCk+OAguato+OBl+OBj+Wtpue/kuOBmeOCi+OBq+OBr+OCs+ODnuODs+ODieOCkuWun+mam+OBq+ippuOBleOBquOBkQorICAgICDjgozjgbDjgarjgonjgarjgYTjga7jgafjgZnjgILmlofnq6DjgpLoqq3jgpPjgaDjgaDjgZHjgarjgonjgbDjgIHjgY3jgaPjgajlv5jjgozjgabjgZfjgb7jgYTjgb7jgZkh44CCCisKKyAgICAg44GV44GB44CBQ2Fwc+ODreODg+OCryhTaGlmdC1Mb2NrKeOCreODvOOBjOaKvOOBleOCjOOBpuOBhOOBquOBhOOBk+OBqOOCkueiuuiqjeOBl+OBn+W+jOOAgQorICAgICDnlLvpnaLjgavjg6zjg4Pjgrnjg7MxLjEg44GM5YWo6YOo6KGo56S644GV44KM44KL44Go44GT44KN44G+44Gn44CBaiDjgq3jg7zjgpLmirzjgZfjgabjgqvjg7zjgr3jg6vjgpIKKyAgICAg56e75YuV44GX44G+44GX44KH44GG44CCCit+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+fn4KKwkJCSDjg6zjg4Pjgrnjg7MgMS4xOiAg44Kr44O844K944Or44Gu56e75YuVCisKKworICAgICAgICoqIOOCq+ODvOOCveODq+OCkuenu+WLleOBmeOCi+OBq+OBr+OAgeekuuOBleOCjOOCi+anmOOBqyBoLGosayxsIOOCkuaKvOOBl+OBvuOBmSAqKgorCSAgICAgXgorCSAgICAgawkJICAgIOODkuODs+ODiDogIGgg44Kt44O844Gv5bem5pa55ZCR44Gr56e75YuV44GX44G+44GZ44CCCisgICAgICAgPCBoCSBsID4JCSAgICAgbCDjgq3jg7zjga/lj7PmlrnlkJHjgavnp7vli5XjgZfjgb7jgZnjgIIKKwkgICAgIGoJCQkgICAgIGog44Kt44O844Gv5LiL55+i5Y2w44Kt44O844Gu44KI44GG44Gq44Kt44O844Gn44GZ44CCCisJICAgICB2CisgIDEuIOenu+WLleOBq+aFo+OCjOOCi+OBvuOBp+OAgeOCueOCr+ODquODvOODs+OBp+OCq+ODvOOCveODq+enu+WLleOBleOBm+OBvuOBl+OCh+OBhuOAggorCisgIDIuIOS4i+OBuOOBruOCreODvChqKeOCkuaKvOOBl+OBpOOBpeOBkeOCi+OBqOOAgemAo+e2muOBl+OBpuenu+WLleOBp+OBjeOBvuOBmeOAggorLS0tPiDjgZPjgozjgafmrKHjga7jg6zjg4Pjgrnjg7Pjgavnp7vli5XjgZnjgovmlrnms5XjgYzjgo/jgYvjgorjgb7jgZfjgZ/jga3jgIIKKworICAzLiDkuIvjgbjjga7jgq3jg7zjgpLkvb/jgaPjgabjgIHjg6zjg4Pjgrnjg7MxLjIg44Gr56e75YuV44GX44G+44GX44KH44GG44CCCisKK05PVEU6IOS9leOCkuOCv+OCpOODl+OBl+OBpuOBhOOCi+OBi+WIpOOCieOBquOBj+OBquOBo+OBn+OCieOAgTxFU0M+44KS5oq844GX44Gm44OO44O844Oe44Or44Oi44O844OJ44Gr44GX44G+CisgICAgICDjgZnjgILjgZ3jgozjgYvjgonlhaXlipvjgZfjgojjgYbjgajjgZfjgabjgYTjgZ/jgrPjg57jg7Pjg4njgpLlho3lhaXlipvjgZfjgb7jgZfjgofjgYbjgIIKKworTk9URTog44Kr44O844K944Or44Kt44O844Gn44KC56e75YuV44Gn44GN44G+44GZ44CC44GX44GL44GXIGhqa2wg44KS5L2/55So44GZ44KL44GT44Go44Gr5LiA5bqm5oWj44KM44Gm44GX44G+CisgICAgICDjgYjjgbDjgIHjga/jgovjgYvjgavpgJ/jgY/np7vli5XjgZnjgovjgZPjgajjgYzjgafjgY3jgovjgafjgZfjgofjgYbjgIIKKworfn5+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+CisJCQkg44Os44OD44K544OzIDEuMjogVklNIOOBrui1t+WLleOBqOe1guS6hgorCisKKyAgISEgTk9URTog5Lul5LiL44Gu44GC44KJ44KG44KL44K544OG44OD44OX44KS6KGM44GG5YmN44Gr44CB44GT44Gu44Os44OD44K544Oz44KS6Kqt44G/44G+44GX44KH44GGISEKKworICAxLiA8RVNDPuOCreODvOOCkuaKvOOBl+OBvuOBl+OCh+OBhuOAgijnorrlrp/jgavjg47jg7zjg57jg6vjg6Ljg7zjg4njgavjgZnjgovjgZ/jgoEpCisKKyAgMi4g5qyh44Gu44KI44GG44Gr44K/44Kk44OXOgkJOnEhIDxFTlRFUj4KKworLS0tPiDjgZPjgozjgavjgojjgornt6jpm4bjgZfjgZ/lhoXlrrnjgpLkv53lrZjjgZvjgZrjgavjgqjjg4fjgqPjgr/jgYzntYLkuobjgZfjgb7jgZnjgIIKKyAgICAg57eo6ZuG5YaF5a6544KS5L+d5a2Y44GX44Gm57WC5LqG44GZ44KL44Go44GN44Gv5qyh44Gu44KI44GG44Gr44K/44Kk44OX44GX44G+44GZOgorCQkJCTp3cSAgPEVOVEVSPgorCisgIDMuIOOCt+OCp+ODq+ODl+ODreODs+ODl+ODiOOBi+OCieODgeODpeODvOODiOODquOCouODq+OCkuWni+OCgeOCi+OBq+OBr+OCs+ODnuODs+ODieOCkuOCv+OCpOODl+OBl+OBvuOBmeOAggorICAgICDjgZ3jga7jgrPjg57jg7Pjg4njga86CQl2aW10dXRvciA8RU5URVI+CisgICAgIOmAmuW4uOOBr+OBk+OBhuOBp+OBl+OCh+OBhjoJdmltIHR1dG9yIDxFTlRFUj4KKworLS0tPiAndmltJyDjga8gVmltIOOCqOODh+OCo+OCv+OBrui1t+WLleOCkuOAgSd0dXRvcicg44Gv57eo6ZuG44GX44Gf44GE44OV44Kh44Kk44Or44KS5oSP5ZGz44GX44G+44GZ44CCCisKKyAgNC4g44GT44KM44G+44Gn44Gu44K544OG44OD44OX44KS6Kaa44GI6Ieq5L+h44GM44Gk44GE44Gf44Gq44KJ44Gw44CB44K544OG44OD44OXIDEg44GL44KJIDMg44G+44Gn44KS5a6fCisgICAgIOmam+OBq+ippuOBl+OBpuOAgVZpbSDjgpIx5bqm57WC5LqG44GX44Gm44GL44KJ5YaN44Gz6LW35YuV44GX44G+44GX44KH44GG44CC44Gd44KM44GL44KJ44Os44OD44K544OzCisgICAgIDEuM+OBvuOBp+OCq+ODvOOCveODq+OCkuenu+WLleOBleOBm+OBvuOBl+OCh+OBhuOAggorfn5+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+CisJCSAgICAgICDjg6zjg4Pjgrnjg7MgMS4zOiDjg4bjgq3jgrnjg4jnt6jpm4YgLSDliYrpmaQKKworCisgICAgKiog44OO44O844Oe44Or44Oi44O844OJ44Gr44Gm44Kr44O844K944Or44Gu5LiL44Gu5paH5a2X44KS5YmK6Zmk44GZ44KL44Gr44GvIHgg44KS5oq844GX44G+44GZICoqCisKKyAgMS4g5Lul5LiL44GuIC0tLT4g44Go6KiY44GV44KM44Gf44GV44KM44Gf6KGM44Gr44Kr44O844K944Or44KS56e75YuV44GX44G+44GX44KH44GG44CCCisKKyAgMi4g6ZaT6YGV44GE44KS5L+u5q2j44GZ44KL44Gf44KB44Gr44CB5YmK6Zmk44GZ44KL5pyA5Yid44Gu5paH5a2X44G+44Gn44Kr44O844K944Or44KS56e75YuV44GX44G+44GZ44CCCisKKyAgMy4g5LiN5b+F6KaB44Gq5paH5a2X44KSIHgg44KS5oq844GX44Gm5YmK6Zmk44GX44G+44GX44KH44GG44CCCisKKyAgNC4g5paH44GM5q2j44GX44GP44Gq44KL44G+44GnIOOCueODhuODg+ODlyAyIOOBi+OCiSA0IOOCkue5sOOCiui/lOOBl+OBvuOBl+OCh+OBhuOAggorCistLS0+IOOBneOBriDjgYbjgYbjgZXjgY4g44GvIOOBpOOBpOOBjeOBjSDjgpIg44GT44GI44GI44Gm44GmIOOBqOOBs+OBr+OBreOBn+OBnworCisgIDUuIOihjOOBjOato+OBl+OBj+OBquOBo+OBn+OCieOAgeODrOODg+OCueODsyAxLjQg44Gr56e744KK44G+44GX44KH44GG44CCCisKK05PVEU6IOWFqOOBpuOBruODrOODg+OCueODs+OCkumAmuOBmOOBpuOAgeimmuOBiOOCiOOBhuOBqOOBmeOCi+OBruOBp+OBr+OBquOBj+Wun+mam+OBq+OChOOBo+OBpuOBv+OBvuOBl+OCh+OBhuOAggorCisKKworCit+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+fn4KKwkJICAgICAgIOODrOODg+OCueODsyAxLjQ6IOODhuOCreOCueODiOe3qOmbhiAtIOaMv+WFpQorCisKKwkgKiog44OO44O844Oe44Or44Oi44O844OJ44Gr44Gm44OG44Kt44K544OI44KS5oy/5YWl44GZ44KL44Gr44GvIGkg44KS5oq844GX44G+44GZICoqCisKKyAgMS4g5Lul5LiL44GuIC0tLT4g44Go6KiY44GV44KM44Gf44GV44KM44Gf5pyA5Yid44Gu6KGM44Gr44Kr44O844K944Or44KS56e75YuV44GX44G+44GX44KH44GG44CCCisKKyAgMi4gMeihjOebruOCkjLooYznm67jgajlkIzjgZjmp5jjgavjgZnjgovjgZ/jgoHjgavjgIHjg4bjgq3jgrnjg4jjgpLmjL/lhaXjgZfjgarjgZHjgozjgbDjgarjgonjgarjgYTkvY0KKyAgICAg572u44Gu5qyh44Gu5paH5a2X44Gr44Kr44O844K944Or44KS56e75YuV44GX44G+44GZ44CCCisKKyAgMy4gaSDjgq3jg7zjgpLmirzjgZfjgabjgYvjgonjgIHov73liqDjgYzlv4XopoHjgarmloflrZfjgpLjgr/jgqTjg5fjgZfjgb7jgZfjgofjgYbjgIIKKworICA0LiDplpPpgZXjgYTjgpLkv67mraPjgZfjgZ/jgokgPEVTQz4g44KS5oq844GX44Gm44Kz44Oe44Oz44OJ44Oi44O844OJ44Gr5oi744KK44CB5q2j44GX44GE5paH44GrCisgICAgIOOBquOCi+anmOOBq+OCueODhuODg+ODlyAyIOOBi+OCiSA0IOOCkue5sOOCiui/lOOBl+OBvuOBl+OCh+OBhuOAggorCistLS0+IOOBk+OBriDjgavjga8g6Laz44KK44Gq44GEIOODhuOCreOCueODiCDjgYLjgovjgIIKKy0tLT4g44GT44GuIOihjCDjgavjga8g5bm+44Gk44GLIOi2s+OCiuOBquOBhCDjg4bjgq3jgrnjg4gg44GMIOOBguOCi+OAggorCisgIDUuIOaMv+WFpeOBruaWueazleOBjOOCj+OBi+OBo+OBn+OCieS4i+OBruODrOODg+OCueODszHjga7opoHntITjgpLopovjgb7jgZfjgofjgYbjgIIKKworCisKK35+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+fgorCQkJCeODrOODg+OCueODsyAxIOimgee0hAorCisKKyAgMS4g44Kr44O844K944Or44Gv55+i5Y2w44Kt44O844KC44GX44GP44GvIGhqa2wg44Kt44O844Gn56e75YuV44GX44G+44GZ44CCCisJIGggKOW3pikJCWogKOS4iykgICAgICAgICBrICjkuIopCSAgICBsICjlj7MpCisKKyAgMi4gVmltIOOCkui1t+WLleOBmeOCi+OBq+OBr+ODl+ODreODs+ODl+ODiOOBi+OCiSB2aW0g44OV44Kh44Kk44Or5ZCNIDxFTlRFUj4g44Go44K/44Kk44OX44GX44G+44GZ44CCCisKKyAgMy4gVmltIOOCkue1guS6huOBmeOCi+OBq+OBrwkgICA8RVNDPiA6cSEJIDxFTlRFUj4gIOOBqOOCv+OCpOODl+OBl+OBvuOBmSjlpInmm7TjgpLnoLTmo4Qp44CCCisgICAgICAgICAgICAgICDjgoLjgZfjgY/jga8JICAgPEVTQz4gOndxCSA8RU5URVI+ICDjgajjgr/jgqTjg5fjgZfjgb7jgZko5aSJ5pu044KS5L+d5a2YKeOAggorCisgIDQuIOOCq+ODvOOCveODq+OBruS4i+OBruaWh+Wtl+OCkuWJiumZpOOBmeOCi+OBq+OBr+OAgeODjuODvOODnuODq+ODouODvOODieOBpyB4IOOBqOOCv+OCpOODl+OBl+OBvuOBmeOAggorCisgIDUuIOOCq+ODvOOCveODq+OBruS9jee9ruOBq+aWh+Wtl+OCkuaMv+WFpeOBmeOCi+OBq+OBr+OAgeODjuODvOODnuODq+ODouODvOODieOBpyBpIOOBqOOCv+OCpOODl+OBl+OBvuOBmeOAggorCSBpICAgICDjg4bjgq3jgrnjg4jjga7jgr/jgqTjg5cJPEVTQz4KKworTk9URTogPEVTQz4g44Kt44O844KS5oq844GZ44Go44OO44O844Oe44Or44Oi44O844OJ44Gr56e76KGM44GX44G+44GZ44CC44Gd44Gu6Zqb44CB6ZaT6YGV44Gj44Gf44KK5YWl5Yqb6YCU5LitCisgICAgICDjga7jgrPjg57jg7Pjg4njgpLlj5bjgormtojjgZnjgZPjgajjgYzjgafjgY3jgb7jgZnjgIIKKwor44GV44Gm44CB57aa44GR44Gm44Os44OD44K544OzIDIg44KS5aeL44KB44G+44GX44KH44GG44CCCisKKworfn5+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+CisJCQkgICDjg6zjg4Pjgrnjg7MgMi4xOiDliYrpmaTjgrPjg57jg7Pjg4kKKworCisJICAgICoqIOWNmOiqnuOBruacq+WwvuOBvuOBp+OCkuWJiumZpOOBmeOCi+OBq+OBryBkdyDjgajjgr/jgqTjg5fjgZfjgb7jgZfjgofjgYYgKioKKworICAxLiDjg47jg7zjg57jg6vjg6Ljg7zjg4njgafjgYLjgovjgZPjgajjgpLnorroqo3jgZnjgovjgZ/jgoHjgasgPEVTQz4g44KS5oq844GX44G+44GX44KH44GG44CCCisKKyAgMi4g5Lul5LiL44GuIC0tLT4g44Go6KiY44GV44KM44Gf44GV44KM44Gf6KGM44Gr44Kr44O844K944Or44KS56e75YuV44GX44G+44GX44KH44GG44CCCisKKyAgMy4g5raI44GX44Gf44GE5Y2Y6Kqe44Gu5YWI6aCt44Gr44Kr44O844K944Or44KS56e75YuV44GX44G+44GX44KH44GG44CCCisKKyAgNC4g5Y2Y6Kqe44KS5YmK6Zmk44GZ44KL44Gf44KB44GrIGR3IOOBqOOCv+OCpOODl+OBl+OBvuOBl+OCh+OBhuOAggorCisgIE5PVEU6IOOCv+OCpOODl+OBmeOCi+OBqOOAgWR3IOOBqOOBhOOBhuaWh+Wtl+OBjOOCueOCr+ODquODvOODs+OBruacgOS4i+ihjOOBq+ePvuOCj+OCjOOBvuOBmeOAggorICAgICAgICDjgr/jgqTjg5fjgpLplpPpgZXjgaPjgabjgZfjgb7jgaPjgZ/mmYLjgavjga8gPEVTQz4g44KS5oq844GX44Gm44KE44KK55u044GX44G+44GX44KH44GG44CCCisKKy0tLT4g44GT44GuIOaWhyDntJkg44Gr44GvIOOBhOOBj+OBpOOBi+OBriDjgZ/jga7jgZfjgYQg5b+F6KaB44Gu44Gq44GEIOWNmOiqniDjgYwg5ZCr44G+44KM44GmIOOBhOOBvuOBmeOAggorCisgIDUuIDMg44GL44KJIDQg44G+44Gn44KS5paH44GM5q2j44GX44GP44Gq44KL44G+44Gn57mw44KK6L+U44GX44CB44Os44OD44K544OzIDIuMiDjgavnp7vjgorjgb7jgZfjgofjgYbjgIIKKworCisKK35+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+fgorCQkgICAgICAg44Os44OD44K544OzIDIuMjog44Gd44Gu5LuW44Gu5YmK6Zmk44Kz44Oe44Oz44OJCisKKworCSAgICAgKiog6KGM44Gu5pyr5bC+44G+44Gn44KS5YmK6Zmk44GZ44KL44Gr44GvIGQkIOOBqOOCv+OCpOODl+OBl+OBvuOBl+OCh+OBhiAqKgorCisgIDEuIOODjuODvOODnuODq+ODouODvOODieOBp+OBguOCi+OBk+OBqOOCkueiuuiqjeOBmeOCi+OBruOBqyA8RVNDPiDjgpLmirzjgZfjgb7jgZfjgofjgYbjgIIKKworICAyLiDku6XkuIvjga4gLS0tPiDjgajoqJjjgZXjgozjgZ/jgZXjgozjgZ/ooYzjgavjgqvjg7zjgr3jg6vjgpLnp7vli5XjgZfjgb7jgZfjgofjgYbjgIIKKworICAzLiDmraPjgZfjgYTmlofjga7mnKvlsL7jgbjjgqvjg7zjgr3jg6vjgpLnp7vli5XjgZfjgb7jgZfjgofjgYYo5pyA5Yid44GuIC4g44Gu5b6M44Gn44GZKeOAggorCisgIDQuIOihjOacq+OBvuOBp+WJiumZpOOBmeOCi+OBruOBqyBkJCDjgajjgr/jgqTjg5fjgZfjgb7jgZfjgofjgYbjgIIKKworLS0tPiDoqrDjgYvjgYzjgZPjga7ooYzjga7mnIDlvozjgpIy5bqm44K/44Kk44OX44GX44G+44GX44Gf44CCIDLluqbjgr/jgqTjg5fjgZfjgb7jgZfjgZ/jgIIKKworCisgIDUuIOOBqeOBhuOBhOOBhuOBk+OBqOOBi+eQhuino+OBmeOCi+OBn+OCgeOBq+OAgeODrOODg+OCueODsyAyLjMg44G456e744KK44G+44GX44KH44GG44CCCisKKworCisKKworfn5+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+CisJCSAgICAgICBMZXNzb24gMi4zOiDjgrPjg57jg7Pjg4njgajnm67nmoToqp4KKworCisgIOWJiumZpOOCs+ODnuODs+ODiSBkIOOBruW9ouW8j+OBr+asoeOBruanmOOBq+OBquOBo+OBpuOBhOOBvuOBmToKKworCSBb5Zue5pWwXSAgIGQgICDnm67nmoToqp4gICAgICDjgoLjgZfjgY/jga8gICAgICBkICAgW+WbnuaVsF0gICDnm67nmoToqp4KKyAg44Gd44KM44Ge44KMOgorICAgIOWbnuaVsCAgIC0g44Gd44Gu44Kz44Oe44Oz44OJ44KS5L2V5Zue57mw44KK6L+U44GZ44GLKOecgeeVpeWPr+iDvSwg55yB55Wl44GX44Gf5pmC44GvID0xKeOAggorICAgIGQgICAgICAtIOWJiumZpOOCs+ODnuODs+ODieOAggorICAgIOebrueahOiqniAtIOS9leOBq+WvvuOBl+OBpuWDjeOBjeOBi+OBkeOCi+OBiyjku6XkuIvjgavmjJnjgZLjgb7jgZkp44CCCisKKyAg55uu55qE6Kqe5LiA6KanOgorICAgIHcgLSDjgqvjg7zjgr3jg6vkvY3nva7jgYvjgonnqbrnmb3jgpLlkKvjgoDljZjoqp7jga7mnKvlsL7jgb7jgafjgIIKKyAgICBlIC0g44Kr44O844K944Or5L2N572u44GL44KJ56m655m944KS5ZCr44G+44Gq44GE5Y2Y6Kqe44Gu5pyr5bC+44G+44Gn44CCCisgICAgJCAtIOOCq+ODvOOCveODq+S9jee9ruOBi+OCieihjOacq+OBvuOBp+OAggorCitOT1RFOiDlhpLpmbrjgZfjgZ/jgYTkurrjga/jgIHjg47jg7zjg57jg6vjg6Ljg7zjg4njgavjgabjgrPjg57jg7Pjg4njgarjgZfjgavnm67nmoToqp7jgpLmirzjgZfjgaYKKyAgICAgIOOBv+OBvuOBl+OCh+OBhuOAguOCq+ODvOOCveODq+OBjOebrueahOiqnuS4gOimp+OBp+ekuuOBleOCjOOCi+S9jee9ruOBq+enu+WLleOBmeOCi+OBr+OBmuOBp+OBmeOAggorCisKKworCit+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+fn4KKwkJICAgICAg44Os44OD44K544OzIDIuNDog44Gd44KM5Lul5aSW44Gu5b2i44Gu44Kz44Oe44Oz44OJCisKKworCQkqKiDooYzlhajkvZPjgpLliYrpmaTjgZnjgovjgavjga8gZGQg44Go44K/44Kk44OX44GX44G+44GX44KH44GGICoqCisKKyAg6KGM5YWo5L2T44Gu5YmK6Zmk44Gv6aC757mB44Gr6KGM44Gq44GG5L2c5qWt44Gq44Gu44Gn44CBVmltIOOBruioreioiOiAheOBr+ihjOOCkuWJiumZpOOBmeOCi+OBruOBq+OBr+OAgQorICDljZjjgavliJflhoXjgavjgaYy5ZueIGQg44KS44K/44Kk44OX44GZ44KL5pa544GM57Ch5Y2Y44Gg44KN44GG44Go5Yik5pat44GX44G+44GX44Gf44CCCisKKyAgMS4g5LiL44Gr44GC44KL5LiA6YCj44Gu44OV44Os44O844K644GuMuihjOebruOBq+OCq+ODvOOCveODq+OCkuenu+WLleOBl+OBvuOBl+OCh+OBhuOAggorICAyLiBkZCAg44Go44K/44Kk44OX44GX44Gm6KGM44KS5YmK6Zmk44GX44G+44GX44KH44GG44CCCisgIDMuIOOBp+OBrzTooYznm67jgavnp7vli5XjgZfjgabjgb/jgb7jgZfjgofjgYbjgIIKKyAgNC4gMmRkICDjgajjgr/jgqTjg5fjgZfjgaYy6KGM5YmK6Zmk44GX44Gm44G/44G+44GX44KH44GG44CCCisgICAgICjlm57mlbAt44Kz44Oe44Oz44OJLeebrueahOiqniAg44Gu5b2i5byP44KS5oCd44GE5Ye644GX44G+44GX44KH44GGKQorCisgICAgICAxKSAg44OQ44Op44Gv6LWk44GE44CBCisgICAgICAyKSAg44Gk44G+44KJ44Gq44GE44KC44Gu44Gv5qW944GX44GE44CBCisgICAgICAzKSAg44K544Of44Os44Gv6Z2S44GE44CBCisgICAgICA0KSAg56eB44Gv6LuK44KS44KC44Gj44Gm44GE44KL44CBCisgICAgICA1KSAg5pmC6KiI44GM5pmC5Yi744KS5ZGK44GS44KL44CBCisgICAgICA2KSAg56CC57OW44Gv55SY44GECisgICAgICA3KSAg44Kq44Oe44Ko44Oi44OK44O8CisKK35+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+fgorCQkJIOODrOODg+OCueODsyAyLjU6IOOChOOCiuebtOOBl+OCs+ODnuODs+ODiQorCisKKyAgKiog5pyA5b6M44Gu44Kz44Oe44Oz44OJ44KS5Y+W44KK5raI44GZ44Gr44GvIHUg44KS5oq844GX44G+44GZ44CCVSDjga/ooYzlhajkvZPjga7lj5bmtojjgafjgZnjgIIgKioKKworICAxLiDku6XkuIvjga4gLS0tPiDjgajoqJjjgZXjgozjgZ/jgZXjgozjgZ/ooYzjgavjgqvjg7zjgr3jg6vjgpLnp7vli5XjgZfjgIHmnIDliJ3jga7plpPpgZXjgYTjgavjgqvjg7zjgr3jg6sKKyAgICAg44KS56e75YuV44GX44G+44GX44KH44GG44CCCisgIDIuIHgg44KS44K/44Kk44OX44GX44Gm44GE44KJ44Gq44GE5YWI6aCt44Gu5paH5a2X44KS5YmK6Zmk44GX44G+44GX44KH44GG44CCCisgIDMuIOOBleOBgeOAgXUg44KS44K/44Kk44OX44GX44Gm5pyA5b6M44Gr5a6f6KGM44GX44Gf44Kz44Oe44Oz44OJ44KS5Y+W44KK5raI44GX44G+44GX44KH44GG44CCCisgIDQuIOS7iuW6puOBr+OAgXgg44KS5L2/55So44GX44Gm6Kqk44KK44KS5YWo44Gm5L+u5q2j44GX44G+44GX44KH44GG44CCCisgIDUuIOWkp+aWh+Wtl+OBriBVIOOCkuOCv+OCpOODl+OBl+OBpuOAgeihjOOCkuWFg+OBrueKtuaFi+OBq+aIu+OBl+OBvuOBl+OCh+OBhuOAggorICA2LiB1IOOCkuOCv+OCpOODl+OBl+OBpuebtOWJjeOBriBVIOOCs+ODnuODs+ODieOCkuWPlua2iOOBl+OBvuOBl+OCh+OBhuOAggorICA3LiDjgafjga/jgrPjg57jg7Pjg4njgpLlho3lrp/ooYzjgZnjgovjga7jgasgQ1RSTC1SIChDVFJMIOOCkuaKvOOBl+OBn+OBvuOBviBSIOOCkuaJk+OBpCnjgpIKKyAgICAg5pWw5Zue44K/44Kk44OX44GX44Gm44G/44G+44GX44KH44GGKOWPlua2iOOBruWPlua2iCnjgIIKKworLS0tPiDjgZPjga7jga7ooYzjga7jga7plpPpgZXjgYTjgpLkv67mraPjgIXjgZfjgIHlvozjgafjgZ3jgozjgonjga7kv67mraPjgpLjgpLlj5bmtojjgZfjgb7jgb7jgZnjgZnjgIIKKworICA4LiDjgZPjgozjga/jgajjgabjgoLkvr/liKnjgarjgrPjg57jg7Pjg4njgafjgZnjgILjgZXjgYHjg6zjg4Pjgrnjg7MgMiDopoHntITjgavnp7vjgorjgb7jgZfjgofjgYbjgIIKKworCisKKworfn5+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+CisJCQkJ44Os44OD44K544OzIDIg6KaB57SECisKKworICAxLiDjgqvjg7zjgr3jg6vkvY3nva7jgYvjgonljZjoqp7jga7mnKvlsL7jgb7jgafjgpLliYrpmaTjgZnjgovjgavjga8gZHcg44Go44K/44Kk44OX44GX44G+44GZ44CCCisKKyAgMi4g44Kr44O844K944Or5L2N572u44GL44KJ6KGM44Gu5pyr5bC+44G+44Gn44KS5YmK6Zmk44GZ44KL44Gr44GvIGQkIOOBqOOCv+OCpOODl+OBl+OBvuOBmeOAggorCisgIDMuIOihjOWFqOS9k+OCkuWJiumZpOOBmeOCi+OBq+OBryBkZCDjgajjgr/jgqTjg5fjgZfjgb7jgZnjgIIKKworICA0LiDjg47jg7zjg57jg6vjg6Ljg7zjg4njgafjga7jgrPjg57jg7Pjg4nlvaLlvI/jga8KKworICAgW+WbnuaVsF0gICDjgrPjg57jg7Pjg4kgICDnm67nmoToqp4gICAgIOOCguOBl+OBj+OBryAgICDjgrPjg57jg7Pjg4kgICBb5Zue5pWwXSAgIOebrueahOiqngorICAgICDjgZ3jgozjgZ7jgow6CisgICAgICAg5Zue5pWwICAgICAtIOOBneOBruOCs+ODnuODs+ODieOCkuS9leWbnue5sOOCiui/lOOBmeOBi+OAggorICAgICAgIOOCs+ODnuODs+ODiSAtIOWJiumZpCBkIOOBrumhnuOBp+S9leOCkuOBmeOCi+OBi+OAggorICAgICAgIOebrueahOiqniAgIC0g5Y2Y6KqeIHcg44KE6KGM5pyrICQg44Gq44Gp44Gu6aGe44Gn5L2V44Gr5a++44GX44Gm5YON44GN44GL44GR44KL44GL44CCCisKKyAgNS4g5YmN5Zue44Gu5YuV5L2c44KS5Y+W5raI44GZOgl1ICAgKOWwj+aWh+WtlyB1KQorICAgICDooYzlhajkvZPjga7lpInmm7TjgpLlj5bmtojjgZk6CVUgICAo5aSn5paH5a2XIFUpCisgICAgIOWPlua2iOOBl+OBruWPlua2iOOBlzoJCUNUUkwtUgorCisKK35+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+fgorCQkJICAg44Os44OD44K544OzIDMuMTog6LK844KK5LuY44GR44Kz44Oe44Oz44OJCisKKworICAgICoqIOacgOW+jOOBq+WJiumZpOOBleOCjOOBn+ihjOOCkuOCq+ODvOOCveODq+OBruW+jOOBq+iyvOOCiuS7mOOBkeOCi+OBq+OBryBwIOOCkuOCv+OCpOODl+OBl+OBvuOBmSAqKgorCisgIDEuIOS7peS4i+OBruauteiQveOBruacgOWIneOBruihjOOBq+OCq+ODvOOCveODq+OCkuenu+WLleOBl+OBvuOBl+OCh+OBhuOAggorCisgIDIuIGRkICDjgajjgr/jgqTjg5fjgZfjgabooYzjgpLliYrpmaTjgZfjgIFWaW0g44Gu44OQ44OD44OV44Kh44Gr5qC857SN44GX44G+44GX44KH44GG44CCCisKKyAgMy4g5YmK6Zmk44GX44Gf6KGM44GM5pys5p2l44GC44KL44G544GN5L2N572u44Gu5LiK44Gu6KGM44G+44Gn44CB44Kr44O844K944Or44KS56e75YuV44GV44Gb44G+44GX44KH44GG44CCCisKKyAgNC4g44OO44O844Oe44Or44Oi44O844OJ44GnIHAg44KS44K/44Kk44OX44GX44Gm5qC857SN44GX44Gf6KGM44KS55S76Z2i44Gr5oi744GX44G+44GZ44CCCisKKyAgNS4g6aCG55Wq44GM5q2j44GX44GP44Gq44KL5qeY44Gr44K544OG44OD44OXIDIg44GL44KJIDQg44KS57mw44KK6L+U44GX44G+44GX44KH44GG44CCCisKKyAgICAgZCkg6LK05pa544KC5a2m44G244GT44Go44GM44Gn44GN44KLPworICAgICBiKSDjgrnjg5/jg6zjga/pnZLjgYTjgIEKKyAgICAgYykg55+l5oG144Go44Gv5a2m44G244KC44Gu44CBCisgICAgIGEpIOODkOODqeOBr+i1pOOBhOOAgQorCisKKworfn5+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+CisJCQkg44Os44OD44K544OzIDMuMjog572u44GN5o+b44GI44Kz44Oe44Oz44OJCisKKworCSAgICoqIOOCq+ODvOOCveODq+OBruS4i+OBruaWh+Wtl+OCkue9ruOBjeaPm+OBiOOCi+OBq+OBryByIOOCkuOCv+OCpOODl+OBl+OBvuOBmSAqKgorCisgIDEuIOS7peS4i+OBriAtLS0+IOOBqOiomOOBleOCjOOBn+OBleOCjOOBn+acgOWIneOBruihjOOBq+OCq+ODvOOCveODq+OCkuenu+WLleOBl+OBvuOBl+OCh+OBhuOAggorCisgIDIuIOacgOWIneOBrumWk+mBleOBhOOBruWFiOmgreOBq+OCq+ODvOOCveODq+OCkuenu+WLleOBl+OBvuOBl+OCh+OBhuOAggorCisgIDMuIHIg44Go44K/44Kk44OX44GX44CB6ZaT6YGV44Gj44Gm44GE44KL5paH5a2X44KS572u44GN5o+b44GI44KL44CB5q2j44GX44GE5paH5a2X44KS44K/44Kk44OX44GX44G+44GX44KH44GG44CCCisKKyAgNC4g5pyA5Yid44Gu6KGM44GM5q2j44GX44GP44Gq44KL44G+44Gn44K544OG44OD44OXIDIg44GL44KJIDMg44KS57mw44KK6L+U44GX44G+44GX44KH44GG44CCCisKKy0tLT4gIOOBk+OBruWQiOOCkuS6uuWKm+OBl+OBn+aZguOBreOAgeOBneOBruS6uuOBr+W5vuOBpOOBi+WVj+mBleOBo+OBn+OCreODvOOCkuaKvOOBl+OCguOBl+OBnyEKKy0tLT4gIOOBk+OBruihjOOCkuWFpeWKm+OBl+OBn+aZguOBq+OAgeOBneOBruS6uuOBr+W5vuOBpOOBi+mWk+mBleOBo+OBn+OCreODvOOCkuaKvOOBl+OBvuOBl+OBnyEKKworICA1LiDjgZXjgYHjgIHjg6zjg4Pjgrnjg7MgMy4yIOOBq+enu+OCiuOBvuOBl+OCh+OBhuOAggorCitOT1RFOiDlrp/pmpvjgavoqabjgZfjgb7jgZfjgofjgYbjgILmsbrjgZfjgabopprjgYjjgovjgaDjgZHjgavjga/jgZfjgarjgYTjgZPjgajjgIIKKworCisKK35+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+fgorCQkJ44Os44OD44K544OzIDMuMzog5aSJ5pu044Kz44Oe44Oz44OJCisKKworCSAqKiDljZjoqp7jga7kuIDpg6jjgIHjgoLjgZfjgY/jga/lhajkvZPjgpLlpInmm7TjgZnjgovjgavjga8gY3cg44Go44K/44Kk44OX44GX44G+44GZICoqCisKKyAgMS4g5Lul5LiL44GuIC0tLT4g44Go6KiY44GV44KM44Gf44GV44KM44Gf5pyA5Yid44Gu6KGM44Gr44Kr44O844K944Or44KS56e75YuV44GX44G+44GX44KH44GG44CCCisKKyAgMi4gbHVidyDjga4gdSDjga7kvY3nva7jgavjgqvjg7zjgr3jg6vjgpLnp7vli5XjgZfjgb7jgZfjgofjgYbjgIIKKworICAzLiBjdyDjgajjgr/jgqTjg5fjgZfjgIHmraPjgZfjgYTljZjoqp7jgpLjgr/jgqTjg5fjgZfjgb7jgZfjgofjgYYo44GT44Gu5aC05ZCIICdpbmUnIOOBqOOCv+OCpOODlynjgIIKKworICA0LiDmrKHjga7plpPpgZXjgYQo5aSJ5pu044GZ44G544GN5paH5a2X44Gu5YWI6aCtKeOBq+enu+WLleOBmeOCi+OBn+OCgeOBqyA8RVNDPiDjgpLjgr/jgqTjg5fjgZfjgb7jgZnjgIIKKworICA1LiDmnIDliJ3jga7ooYzjgYzmrKHjga7ooYzjga7mp5jjgavjgarjgovjgb7jgafjgrnjg4bjg4Pjg5cgMyDjgaggNCDjgpLnubDjgorov5TjgZfjgb7jgZnjgIIKKworLS0tPiBUaGlzIGx1YncgaGFzIGEgZmV3IHdwdGZkIHRoYXQgbXJyZiBjaGFuZ2luZyB1c2YgdGhlIGNoYW5nZSBjb21tYW5kLgorLS0tPiBUaGlzIGxpbmUgaGFzIGEgZmV3IHdvcmRzIHRoYXQgbmVlZCBjaGFuZ2luZyB1c2luZyB0aGUgY2hhbmdlIGNvbW1hbmQuCisKK2N3IOOBr+WNmOiqnuOCkuWkieabtOOBmeOCi+OBoOOBkeOBp+OBquOBj+OAgeaMv+WFpeOCguihjOOBiOOCi+OBk+OBqOOBq+azqOaEj+OBl+OBvuOBl+OCh+OBhuOAggorCisKKworfn5+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+CisJCSAgICAg44Os44OD44K544OzIDMuNDogYyDjgpLkvb/nlKjjgZfjgZ/jgZ3jga7ku5bjga7lpInmm7QKKworCisgICAgICoqIOWkieabtOOCs+ODnuODs+ODieOBr+OAgeWJiumZpOOCs+ODnuODs+ODieOBqOWQjOOBmOanmOOBq+OCquODluOCuOOCp+OCr+ODiOOCkuS9v+eUqOOBl+OBvuOBmSAqKgorCisKKyAgMS4g5aSJ5pu044Kz44Oe44Oz44OJ44Gv44CB5YmK6Zmk44Kz44Oe44Oz44OJ44Go5ZCM44GY44KI44GG44Gq5YuV5L2c44KS44GX44G+44GZ44CC44Gd44Gu5b2i5byP44GvCisKKwkgW+WbnuaVsF0gICBjICAg55uu55qE6KqeICAgICAg44KC44GX44GP44GvICAgICAgYyAgIFvlm57mlbBdICAg55uu55qE6KqeCisKKyAgMi4g44Kq44OW44K444Kn44Kv44OI44KC5ZCM44GY44Gn44CBdyDjga/ljZjoqp7jgIEgJCDjga/ooYzmnKvjgarjganjgajjgYTjgaPjgZ/jgoLjga7jgafjgZnjgIIKKworICAzLiDku6XkuIvjga4gLS0tPiDjgajoqJjjgZXjgozjgZ/jgZXjgozjgZ/ooYzjgavjgqvjg7zjgr3jg6vjgpLnp7vli5XjgZfjgb7jgZfjgofjgYbjgIIKKworICA0LiDmnIDliJ3jga7plpPpgZXjgYTjgbjjgqvjg7zjgr3jg6vjgpLnp7vli5XjgZfjgb7jgZfjgofjgYbjgIIKKworICA1LiBjJCDjgajjgr/jgqTjg5fjgZfjgabooYzjga7mrovjgorjgpLvvJLooYznm67jga7mp5jjgavjgZfjgIE8RVNDPiDjgpLmirzjgZfjgb7jgZfjgofjgYbjgIIKKworLS0tPiBUaGUgZW5kIG9mIHRoaXMgbGluZSBuZWVkcyBzb21lIGhlbHAgdG8gbWFrZSBpdCBsaWtlIHRoZSBzZWNvbmQuCistLS0+IFRoZSBlbmQgb2YgdGhpcyBsaW5lIG5lZWRzIHRvIGJlIGNvcnJlY3RlZCB1c2luZyB0aGUgIGMkICBjb21tYW5kLgorCisKK35+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+fgorCQkJCeODrOODg+OCueODsyAzIOimgee0hAorCisKKyAgMS4g5pei44Gr5YmK6Zmk44GV44KM44Gf44OG44Kt44K544OI44KS5YaN6YWN572u44GZ44KL44Gr44Gv44CBcCDjgpLjgr/jgqTjg5fjgZfjgb7jgZnjgILjgZPjgozjga/liYrpmaTjgZUKKyAgICAg44KM44Gf44OG44Kt44K544OI44KS44Kr44O844K944Or44Gu5b6M44Gr5oy/5YWl44GX44G+44GZKOihjOWNmOS9jeOBp+WJiumZpOOBleOCjOOBn+OBruOBquOCieOBsOOAgeOCq+ODvAorICAgICDjgr3jg6vjga7jgYLjgovmrKHjga7ooYzjgavmjL/lhaXjgZXjgozjgb7jgZkp44CCCisKKyAgMi4g44Kr44O844K944Or44Gu5LiL44Gu5paH5a2X44KS572u44GN5o+b44GI44KL44Gr44Gv44CBciDjgpLjgr/jgqTjg5fjgZfjgZ/lvozjgIHjgZ3jgozjgpLnva7jgY3mj5vjgYjjgosKKyAgICAg5paH5a2X44KS44K/44Kk44OX44GX44G+44GZ44CCCisKKyAgMy4g5aSJ5pu044Kz44Oe44Oz44OJ44Gn44Gv44Kr44O844K944Or5L2N572u44GL44KJ54m55a6a44Gu55uu55qE6Kqe44Gn5oyH5a6a44GV44KM44KL57WC56uv44G+44Gn44KS5aSJ5pu0CisgICAgIOOBmeOCi+OBk+OBqOOBjOWPr+iDveOBp+OBmeOAguS+i+OBiOOBsCBjdyDjgarjgonjgbDjgqvjg7zjgr3jg6vkvY3nva7jgYvjgonljZjoqp7jga7ntYLjgo/jgorjgb7jgafjgIEKKyAgICAgYyQg44Gq44KJ44Gw6KGM44Gu57WC44KP44KK44G+44Gn44KS5aSJ5pu044GX44G+44GZ44CCCisKKyAgNC4g5aSJ5pu044Kz44Oe44Oz44OJ44Gu5b2i5byP44GvCisKKwkgW+WbnuaVsF0gICBjICAg55uu55qE6KqeICAgICAg44KC44GX44GP44GvICAgICAgYyAgIFvlm57mlbBdICAg55uu55qE6KqeCisKK+OBleOBgeOAgeasoeOBruODrOODg+OCueODs+OBq+enu+OCiuOBvuOBl+OCh+OBhuOAggorCisKKworfn5+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+CisJCSAgICAg44Os44OD44K544OzIDQuMTog5L2N572u44Go44OV44Kh44Kk44Or44Gu5oOF5aCxCisKKworICAqKiDjg5XjgqHjgqTjg6vlhoXjgafjga7kvY3nva7jgajjg5XjgqHjgqTjg6vjga7nirbmhYvjgpLooajnpLrjgZnjgovjgavjga8gQ1RSTC1nIOOCkuOCv+OCpOODl+OBl+OBvuOBmeOAggorICAgICDjg5XjgqHjgqTjg6vlhoXjga7jgYLjgovooYzjgavnp7vli5XjgZnjgovjgavjga8gU0hJRlQtRyDjgpLjgr/jgqTjg5fjgZfjgb7jgZkgKioKKworICAgICBOT1RFOiDjgrnjg4bjg4Pjg5fjgpLlrp/ooYzjgZnjgovliY3jgavjgIHjgZPjga7jg6zjg4Pjgrnjg7Plhajjgabjgavnm67jgpLpgJrjgZfjgb7jgZfjgofjgYYhIQorCisgIDEuIENUUkwg44KS5oq844GX44Gf44G+44G+IGcg44KS5oq844GX44G+44GX44KH44GG44CC44Oa44O844K444Gu5LiA55Wq5LiL44Gr44GC44KL44K544OG44O844K/44K56KGMCisgICAgIOOBq+ODleOCoeOCpOODq+WQjeOBqOihjOOBjOihqOekuuOBleOCjOOCi+OBr+OBmuOBp+OBmeOAgiDjgrnjg4bjg4Pjg5cgMyDjga7jgZ/jgoHjgavooYznlarlj7fjgpIKKyAgICAg6Kaa44GI44Gm44GK44GN44G+44GX44KH44GG44CCKOios+iAheazqDrjg6vjg7zjg6njg7zjgYzjgYLjgovloLTlkIjjga/jgZ3jgaHjgonjgavms6jnm64pCisKKyAgMi4g5pyA5LiL6KGM44Gr56e75YuV44GZ44KL44Gf44KB44GrIHNoaWZ0LUcg44Go44K/44Kk44OX44GX44G+44GX44KH44GG44CCCisKKyAgMy4g5YWI44G744Gp44Gu6KGM44Gu55Wq5Y+344KS44K/44Kk44OX44GX44CBIHNoaWZ0LUcg44KS44K/44Kk44OX44GX44G+44GX44KH44GG44CCCisgICAgIOacgOWIneOBqyBDdHJsLWcg44KS5oq844GX44Gf6KGM44Gr5oi744Gj44Gm5p2l44KL44Gv44Ga44Gn44GZ44CCCisgICAgICjmlbDlrZfjgpLjgr/jgqTjg5fjgZfjgabjgYTjgovjgajjgY3jgavjga/nlLvpnaLjgavooajnpLrjgZXjgozjgb7jgZvjgpMpCisKKyAgNC4g6Ieq5L+h44GM5oyB44Gm44Gf44KJ44K544OG44OD44OXIDEg44GL44KJIDMg44KS5a6f6KGM44GX44G+44GX44KH44GG44CCCisKKworCit+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+fn4KKwkJCSAgIOODrOODg+OCueODsyA0LjI6IOaknOe0ouOCs+ODnuODs+ODiQorCisKKwkgKiog6Kqe5Y+l44KS5qSc57Si44GZ44KL44Gr44GvIC8g44Go44CB5YmN5pa55qSc57Si44GZ44KL6Kqe5Y+l44KS44K/44Kk44OX44GX44G+44GZ44CCKioKKworICAxLiDjg47jg7zjg57jg6vjg6Ljg7zjg4njgacgLyDjgajjgYTjgYbmloflrZfjgpLjgr/jgqTjg5fjgZfjgb7jgZnjgILnlLvpnaLkuIDnlarkuIvjgasgOiDjgrPjg57jg7Pjg4kKKyAgICAg44Go5ZCM44GY5qeY44GrIC8g44GM54++44KM44KL44GT44Go44Gr5rCX44Gl44GP44Gn44GX44KH44GG44CCCisKKyAgMi4g44Gn44Gv44CBJ2VycnJvb3InIDxFTlRFUj4g44Go44K/44Kk44OX44GX44G+44GX44KH44GG44CC44GT44KM44GM5qSc57Si44GX44Gf44GE5Y2Y6Kqe44Gn44GZ44CCCisKKyAgMy4g5ZCM44GY6Kqe44KS44KC44GG5LiA5bqm5qSc57Si44GZ44KL44Go44GN44GvIOWNmOOBqyBuIOOCkuOCv+OCpOODl+OBl+OBvuOBmeOAggorICAgICDpgIbmlrnlkJHjgavoqp7lj6XjgpLmpJzntKLjgZnjgovjgajjgY3jga8gTiDjgpLjgr/jgqTjg5fjgZfjgb7jgZnjgIIKKworICA0LiDpgIbmlrnlkJHjgavoqp7lj6XjgpLmpJzntKLjgZfjgZ/jgYTloLTlkIjjga/jgIEvIOOCs+ODnuODs+ODieOBruOBi+OCj+OCiuOBqyA/IOOCs+ODnuODs+ODieOCkuS9v+eUqOOBlworICAgICDjgb7jgZnjgIIKKworLS0tPiAiZXJycm9vciIgaXMgbm90IHRoZSB3YXkgdG8gc3BlbGwgZXJyb3I7ICBlcnJyb29yIGlzIGFuIGVycm9yLgorCivmpJzntKLjgYzjg5XjgqHjgqTjg6vjga7ntYLjgo/jgorjgavpgZTjgZnjgovjgajjgIHjg5XjgqHjgqTjg6vjga7lhYjpoK3jgYvjgonmpJzntKLjgpLntprooYzjgZfjgb7jgZnjgIIKKworCisKK35+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+fgorCQkgICAgICDjg6zjg4Pjgrnjg7MgNC4zOiDlr77lv5zjgZnjgovmi6zlvKfjgpLmpJzntKIKKworCisJICAgICoqIOWvvuW/nOOBmeOCiyApLF0g44KEIH0g44KS5qSc57Si44GZ44KL44Gr44GvICUg44KS44K/44Kk44OX44GX44G+44GZICoqCisKKyAgMS4g5Lul5LiL44GuIC0tLT4g44Go6KiY44GV44KM44Gf44GV44KM44Gf6KGM44GnICgsWyDjgYsgeyDjga7jganjgozjgYvjgavjgqvjg7zjgr3jg6vjgpLnp7vli5UKKyAgICAg44GX44G+44GX44KH44GG44CCCisKKyAgMi4g44Gd44GT44GnICUg44Go44K/44Kk44OX44GX44G+44GX44KH44GG44CCCisKKyAgMy4g44Kr44O844K944Or44Gv5a++5b+c44GZ44KL5ous5byn44Gr56e75YuV44GZ44KL44Gv44Ga44Gn44GZ44CCCisKKyAgNC4g5pyA5Yid44Gu5ous5byn44Gr56e75YuV44GZ44KL44Gr44GvICUg44Go44K/44Kk44OX44GX44G+44GX44KH44GG44CCCisKKy0tLT4gVGhpcyAoIGlzIGEgdGVzdCBsaW5lIHdpdGggKCdzLCBbJ3MgXSBhbmQgeydzIH0gaW4gaXQuICkpCisKK05PVEU6IOOBk+OBruapn+iDveOBr+aLrOW8p+OBjOS4gOiHtOOBl+OBpuOBhOOBquOBhOODl+ODreOCsOODqeODoOOCkuODh+ODkOODg+OCsOOBmeOCi+OBruOBq+OBqOOBpuOCguW9ueeri+OBoQorICAgICAg44G+44GZ44CCCisKKworCisKK35+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+fgorCQkgICAgICAg44Os44OD44K544OzIDQuNDog6ZaT6YGV44GE44KS5aSJ5pu044GZ44KL5pa55rOVCisKKworCSoqICdvbGQnIOOCkiAnbmV3JyDjgavnva7mj5vjgZnjgovjgavjga8gOnMvb2xkL25ldy9nIOOBqOOCv+OCpOODl+OBl+OBvuOBmSAqKgorCisgIDEuIOS7peS4i+OBriAtLS0+IOOBqOiomOOBleOCjOOBn+OBleOCjOOBn+ihjOOBq+OCq+ODvOOCveODq+OCkuenu+WLleOBl+OBvuOBl+OCh+OBhuOAggorCisgIDIuIDpzL3RoZWUvdGhlIDxFTlRFUj4g44Go44K/44Kk44OX44GX44G+44GX44KH44GG44CC44GT44Gu44Kz44Oe44Oz44OJ44Gv44Gd44Gu6KGM44Gn5pyA5Yid44Gr6KaLCisgICAgIOOBpOOBi+OBo+OBn+OCguOBruOBq+OBoOOBkeihjOOBquOCj+OCjOOCi+OBk+OBqOOBq+awl+OCkuOBpOOBkeOBvuOBl+OCh+OBhuOAggorCisgIDMuIOOBp+OBryA6cy90aGVlL3RoZS9nCeOBqOOCv+OCpOODl+OBl+OBvuOBl+OCh+OBhuOAguihjOWFqOS9k+OCkue9ruaPm+OBmeOCi+OBk+OBqOOCkuaEj+WRs+OBl+OBvuOBmeOAggorICAgICDjgZPjga7lpInmm7Tjga/jgZ3jga7ooYzjgafopovjgaTjgYvjgaPjgZ/lhajjgabjga7nrofmiYDjgavlr77jgZfjgabooYzjgarjgo/jgozjgb7jgZnjgIIKKworLS0tPiB0aGVlIGJlc3QgdGltZSB0byBzZWUgdGhlZSBmbG93ZXJzIGlzIGluIHRoZWUgc3ByaW5nLgorCisgIDQuIOikh+aVsOihjOOBi+OCieimi+OBpOOBi+OCi+aWh+Wtl+OCkuWkieabtOOBmeOCi+OBq+OBrworICAgICA6Iywjcy9vbGQvbmV3L2cgICAgIywjIOOBr++8kuihjOOBruihjOeVquWPt+OCkuaMh+OBl+OBvuOBmeOAggorICAgICA6JXMvb2xkL25ldy9nICAgICAg44OV44Kh44Kk44Or5YWo5L2T44Gn6KaL44Gk44GL44KL44KC44Gu44Gr5a++44GX44Gm5aSJ5pu044GZ44KL44CCCisKKworCisKK35+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+fgorCQkJCeODrOODg+OCueODsyA0IOimgee0hAorCisKKyAgMS4gQ3RybC1nIOOBr+ODleOCoeOCpOODq+OBp+OBruS9jee9ruOBqOODleOCoeOCpOODq+OBruips+e0sOOCkuihqOekuuOBl+OBvuOBmeOAggorICAgICBTaGlmdC1HIOOBr+ODleOCoeOCpOODq+OBruacgOS4i+ihjOOBq+enu+WLleOBl+OBvuOBmeOAguihjOeVquWPt+W+jOOBqyBTaGlmdC1HIOOBqOOBmeOCi+OBqAorICAgICDjgZ3jga7ooYzjgavnp7vli5XjgZfjgb7jgZnjgIIKKworICAyLiAvIOOBruW+jOOBq+iqnuWPpeOCkuOCv+OCpOODl+OBmeOCi+OBqOWJjeaWueOBq+iqnuWPpeOCkuaknOe0ouOBl+OBvuOBmeOAggorICAgICA/IOOBruW+jOOBq+iqnuWPpeOCkuOCv+OCpOODl+OBmeOCi+OBqOW+jOaWueOBq+iqnuWPpeOCkuaknOe0ouOBl+OBvuOBmeOAggorICAgICDmpJzntKLjga7lvowgbiDjgafjgIHlkIzmlrnlkJHjgavmpJzntKLjgpLlho3jgbPooYzjgYTjgIHjgb7jgZ8gTiDjgafpgIbmlrnlkJHjgavmpJzntKLjgpLooYzjgarjgYTjgb4KKyAgICAg44GZ44CCCisKKyAgMy4gKCwpLFssXSx7LCBvciB9IOS4iuOBq+OCq+ODvOOCveODq+OBjOOBguOCi+eKtuaFi+OBpyAlIOOCkuOCv+OCpOODl+OBmeOCi+OBqAorICAgICDlr77lv5zjgZfjgZ/lr77jgavnp7vli5XjgZfjgb7jgZnjgIIKKworICA0LiDnj77lnKjooYzjga7mnIDliJ3jga4gb2xkIOOCkiBuZXcg44Gr572u5o+b44GZ44KL44CCCTpzL29sZC9uZXcKKyAgICAg54++5Zyo6KGM44Gu5YWo44Gm44GuIG9sZCDjgpIgbmV3IOOBq+e9ruaPm+OBmeOCi+OAggk6cy9vbGQvbmV3L2cKKyAgICAgMuOBpOOBriAjIOmWk+OBp+iqnuWPpeOCkue9ruaPm+OBmeOCi+OAggkJOiMsI3Mvb2xkL25ldy9nCisgICAgIOODleOCoeOCpOODq+OBruS4reOBruWFqOOBpuOBruaknOe0ouiqnuWPpeOCkue9ruaPm+OBmeOCi+OAggk6JXMvb2xkL25ldy9nCisgICAgICdjJyDjgpLliqDjgYjjgovjgajnva7mj5vjga7luqbjgavnorroqo3jgpLmsYLjgoHjgovjgIIJOiVzL29sZC9uZXcvZ2MKKworCit+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+fn4KKwkJICAgIOODrOODg+OCueODsyA1LjE6IOWklumDqOOCs+ODnuODs+ODieOCkuWun+ihjOOBmeOCi+aWueazlQorCisKKwkgICAgICoqIDohIOOBruW+jOOBq+Wun+ihjOOBmeOCi+WklumDqOOCs+ODnuODs+ODieOCkuOCv+OCpOODl+OBl+OBvuOBmSAqKgorCisgIDEuIOeUu+mdouOBruacgOS4i+mDqOOBq+OCq+ODvOOCveODq+OBjOenu+WLleOBmeOCi+OCiOOBhuOAgeaFo+OCjOimquOBl+OCk+OBoCA6IOOCkuOCv+OCpOODl+OBl+OBvuOBl+OCh+OBhuOAggorICAgICDjgZPjgozjgafjgrPjg57jg7Pjg4njgYzjgr/jgqTjg5fjgafjgY3jgovmp5jjgavjgarjgorjgb7jgZnjgIIKKworICAyLiDjgZPjgZPjgacgISDjgajjgYTjgYbmloflrZco5oSf5ZiG56ymKeOCkuOCv+OCpOODl+OBl+OBvuOBl+OCh+OBhuOAggorICAgICDjgZPjgozjgaflpJbpg6jjgrfjgqfjg6vjgrPjg57jg7Pjg4njgYzlrp/ooYzjgafjgY3jgovmp5jjgavjgarjgorjgb7jgZnjgIIKKworICAzLiDkvovjgajjgZfjgaYgISDjgavntprjgZHjgaYgbHMg44Go44K/44Kk44OX44GXIDxFTlRFUj4g44KS5oq844GX44G+44GX44KH44GG44CCCisgICAgIOOCt+OCp+ODq+ODl+ODreODs+ODl+ODiOOBruOCiOOBhuOBq+ODh+OCo+ODrOOCr+ODiOODquOBruS4gOimp+OBjOihqOekuuOBleOCjOOCi+OBr+OBmuOBp+OBmeOAggorICAgICDjgoLjgZfjgY/jga8gbHMg44GM5YuV44GL44Gq44GE44Gq44KJ44GwIDohZGlyIOOCkuS9v+eUqOOBl+OBvuOBl+OCh+OBhuOAggorCistLS0+IE5PVEU6ICDjgZPjga7mlrnms5XjgavjgojjgaPjgabjgYLjgonjgobjgovjgrPjg57jg7Pjg4njgYzlrp/ooYzjgZnjgovjgZPjgajjgYzjgafjgY3jgb7jgZnjgIIKKworLS0tPiBOT1RFOiAg5YWo44Gm44GuIDog44Kz44Oe44Oz44OJ44GvIDxFTlRFUj4g44KS5oq844GX44Gm57WC5LqG44GX44Gq44GR44KM44Gw44Gq44KK44G+44Gb44KT44CCCisKKworCisKK35+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+fgorCQkgICAg44Os44OD44K544OzIDUuMjog44Gd44Gu5LuW44Gu44OV44Kh44Kk44Or44G45pu444GN6L6844G/CisKKworCSoqIOODleOCoeOCpOODq+OBuOWkieabtOOCkuS/neWtmOOBmeOCi+OBq+OBryA6dyDjg5XjgqHjgqTjg6vlkI0g44Go44K/44Kk44OX44GX44G+44GZICoqCisKKyAgMS4g44OH44Kj44Os44Kv44OI44Oq44Gu5LiA6Kan44KS5b6X44KL44Gf44KB44GrIDohZGlyIOOCguOBl+OBj+OBryA6IWxzIOOBqOOCv+OCpOODl+OBl+OBvuOBl+OCh+OBhuOAggorICAgICDjgZPjga7jgYLjgaggPEVOVEVSPiDjgpLmirzjgZnjga7jga/ml6LjgavjgZTlrZjnn6XjgafjgZnjga3jgIIKKworICAyLiBURVNUIOOBruOCiOOBhuOBq+OAgeOBneOBruODh+OCo+ODrOOCr+ODiOODquOBq+eEoeOBhOODleOCoeOCpOODq+WQjeOCkuS4gOOBpOmBuOOBs+OBvuOBmeOAggorCisgIDMuIOOBp+OBryA6dyBURVNUIOOBqOOCv+OCpOODl+OBl+OBvuOBl+OCh+OBhiAoVEVTVCDjga/jgIHpgbjjgpPjgaDjg5XjgqHjgqTjg6vlkI3jgafjgZkp44CCCisKKyAgNC4g44GT44KM44Gr44KI44KK44OV44Kh44Kk44Or5YWo5L2T44GMIFRFU1Qg44Go44GE44GG5ZCN5YmN44Gn5L+d5a2Y44GV44KM44G+44GZ44CCCisgICAgIOOCguOBhuS4gOW6piA6IWRpciDjgajjgr/jgqTjg5fjgZfjgabnorroqo3jgZfjgabjgb/jgb7jgZfjgofjgYbjgIIKKworLS0tPiDjgZPjgZPjgacgVmltIOOCkue1guS6huOBl+OAgeODleOCoeOCpOODq+WQjSBURVNUIOOBqOWFseOBq+i1t+WLleOBmeOCi+OBqOOAgeS/neWtmOOBl+OBn+aZguOBrgorICAgICDjg4Hjg6Xjg7zjg4jjg6rjgqLjg6vjga7opIfoo73jgYzjgafjgY3kuIrjgYzjgovjga/jgZrjgafjgZnjgIIKKworICA1LiDjgafjga/jgIEgOiFkZWwgVEVTVCDjgajjgr/jgqTjg5fjgZfjgabjg5XjgqHjgqTjg6vjgpLliYrpmaTjgZfjgabjgb/jgb7jgZfjgofjgYbjgIIKKworCisKK35+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+fgorCQkJIOODrOODg+OCueODsyA1LjM6IOmBuOaKnuOBl+OBn+abuOOBjei+vOOBvworCisKKwkgICoqIOmDqOWIhueahOOBq+S/neWtmOOBmeOCi+OBq+OBryA6IywjIHcg44OV44Kh44Kk44Or5ZCNIOOBqOOCv+OCpOODl+OBl+OBvuOBmSAqKgorCisgIDEuIOOCguOBhuS4gOW6puODh+OCo+ODrOOCr+ODiOODquOBruS4gOimp+OCkuWPluW+l+OBmeOCi+OBn+OCgeOBqyA6IWxzIOOBqOOCv+OCpOODl+OBl+OAgVRFU1Qg44Gu5qeY44GrCisgICAgIOODleOCoeOCpOODq+OCkuS4gOOBpOmBuOOCk+OBp+OBv+OBvuOBl+OCh+OBhuOAggorCisgIDIuIOOBk+OBruODmuODvOOCuOOBruWni+OCgeOBvuOBp+OCq+ODvOOCveODq+OCkuenu+WLleOBl+OAgeODleOCoeOCpOODq+OBruihjOaVsOOCkuefpeOCi+OBn+OCgeOBqyBDdHJsLWcg44GoCisgICAgIOOCv+OCpOODl+OBl+OBvuOBl+OCh+OBhuOAguOBneOBruihjOeVquWPt+OCkuaGtuOBiOOBpuOBiuOBjeOBvuOBl+OCh+OBhuOAggorCisgIDMuIOOBneOBl+OBpuODmuODvOOCuOOBrue1guOCiuOBvuOBp+enu+WLleOBl+OAgeWGjeW6piBDdHJsLWcg44KS6KGM44GE44G+44GZ44CCCisgICAgIOOBk+OBruihjOeVquWPt+OCguaGtuOBiOOBpuOBiuOBjeOBvuOBl+OCh+OBhuOAggorCisgIDQuIOOBguOCi+mDqOWIhuOBoOOBkeOCkiBURVNUIOOBqOOBhOOBhuWQjeOBp+S/neWtmOOBmeOCi+OBn+OCgeOBq+OAgTojLCMgdyBURVNUIOOBqOOCv+OCpOODl+OBl+OBvuOBmeOAggorICAgICDjgZPjga4gIywjIOOBr+immuOBiOOBpuOBiuOBhOOBn++8kuOBpOOBrueVquWPtyjkuIrnq68s5LiL56uvKSDjgafjgYLjgorjgIEgVEVTVCDjgYzjg5XjgqHjgqTjg6vlkI0KKyAgICAg44Go44Gq44KK44G+44GZ44CCCisKKyAgNS4g5YaN5bqm44CB44OV44Kh44Kk44Or44GM5a2Y5Zyo44GZ44KL44GT44Go44KS56K66KqN44GZ44KL44Gf44KB44GrIDohZGlyIOOBqOOCv+OCpOODl+OBl+OBvuOBl+OCh+OBhuOAggorICAgICDjgZ/jgaDjgZfjgZPjga7jg5XjgqHjgqTjg6vjga/mtojjgZfjgabjga/jgYTjgZHjgb7jgZvjgpPjgIIKKworCit+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+fn4KKwkJICAgICAgIOODrOODg+OCueODsyA1LjQ6IOODleOCoeOCpOODq+OBruWPlui+vOOBqOWQiOS9tQorCisKKwkqKiDjg5XjgqHjgqTjg6vjga7kuK3ouqvjgpLmjL/lhaXjgZnjgovjgavjga8gOnIg44OV44Kh44Kk44Or5ZCNIOOBqOOCv+OCpOODl+OBl+OBvuOBmSAqKgorCisgIDEuIOWFiOOBu+OBqeOBriBURVNUIOOBqOOBhOOBhuODleOCoeOCpOODq+OBjOWtmOWcqOOBmeOCi+OBk+OBqOOCkueiuuOBi+OCgeOCi+OBn+OCgeOBqyA6IWRpciDjgagKKyAgICAg44K/44Kk44OX44GX44G+44GX44KH44GG44CCCisKKyAgMi4g44Kr44O844K944Or44KS44GT44Gu44Oa44O844K444Gu5YWI6aCt44Gr56e75YuV44GX44G+44GZ44CCCisKK05PVEU6IOOCueODhuODg+ODlyAzIOOCkuWun+ihjOOBmeOCi+OBqOOAgeeUu+mdouOBqyDjg6zjg4Pjgrnjg7MgNS4zIOOBjOePvuOCj+OCjOOCi+OBruOBp+OAgeOCq+ODvOOCveODq+OCkgorICAgIOS4i+OBq+enu+WLleOBl+OBk+OBruODrOODg+OCueODs+OBvuOBp+aIu+OCiuOBvuOBl+OCh+OBhuOAggorCisgIDMuIOOBp+OBr+OAgTpyIFRFU1Qg44Go44K/44Kk44OX44GX44GmIFRFU1Qg44OV44Kh44Kk44Or44KS5Y+W6L6844G/44G+44GX44KH44GG44CC44GT44GuIFRFU1Qg44GvCisgICAgIOODleOCoeOCpOODq+WQjeOBp+OBmeOAggorCitOT1RFOiAg44OV44Kh44Kk44Or44Gu5Y+W6L6844G/44Gv44Kr44O844K944Or44Gu5L2N572u44GL44KJ6KGM44KP44KM44G+44GZ44CCCisKKyAgNC4g5Y+W6L6844KT44Gg44OV44Kh44Kk44Or44KS56K66KqN44GX44Gm44G/44G+44GX44KH44GG44CC44Kr44O844K944Or44KS5oi744GZ44Go44CB44Os44OD44K544OzNS4zIOOBrgorICAgICDjgqrjg6rjgrjjg4rjg6vjgajjg5XjgqHjgqTjg6vjgavjgojjgovjgoLjga7jga4y44Gk44GM44GC44KL44GT44Go44GM44KP44GL44KK44G+44GZ44CCCisKKworfn5+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+CisJCQkgICAgICAg44Os44OD44K544OzIDUg6KaB57SECisKKworICAxLiAgOiFjb21tYW5kICDjgavjgojjgaPjgaYg5aSW6YOo44Kz44Oe44Oz44OJ44KS5a6f6KGM44GX44G+44GZ44CCCisKKyAgICAg44KI44GP5L2/44GG5L6LOgorCSAgOiFscyAgICAgICAgICAgICAgICAtICDjg4fjgqPjg6zjgq/jg4jjg6rjga7jg5XjgqHjgqTjg6vkuIDopqfjgpLopovjgovjgIIKKwkgIDohZGVsIOODleOCoeOCpOODq+WQjSAgICAtICDjg5XjgqHjgqTjg6vlkI3jgajjgYTjgYbjg5XjgqHjgqTjg6vjga7liYrpmaTjgZnjgovjgIIKKworICAyLiAgOncg44OV44Kh44Kk44Or5ZCNIOOBq+OCiOOBo+OBpuODleOCoeOCpOODq+WQjeOBqOOBhOOBhuODleOCoeOCpOODq+OBjOODh+OCo+OCueOCr+OBq+abuOOBjei+vOOBvuOCjOOCi+OAggorCisgIDMuICA6IywjIHcg44OV44Kh44Kk44Or5ZCNIOOBq+OCiOOBo+OBpiAjIOOBi+OCiSAjIOOBvuOBp+OCkuS/neWtmOOBmeOCi+OAggorCisgIDQuICA6ciDjg5XjgqHjgqTjg6vlkI0g44Gr44KI44KK44OV44Kh44Kk44Or5ZCN44Go44GE44GG44OV44Kh44Kk44Or44GM44OH44Kj44K544Kv44KI44KK5Y+W6L6844G+44KM44CBCisgICAgICDjgqvjg7zjgr3jg6vkvY3nva7jga7kuIvjgavmjL/lhaXjgZXjgozjgovjgIIKKworCisKKworCisKKworfn5+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+CisJCQkg44Os44OD44K544OzIDYuMTog44Kq44O844OX44Oz44Kz44Oe44Oz44OJCisKKworICAgICoqIG8g44KS44K/44Kk44OX44GZ44KL44Go44CB44Kr44O844K944Or44Gu5LiL44Gu6KGM44GM6ZaL44GN44CB5oy/5YWl44Oi44O844OJ44Gr5YWl44KK44G+44GZICoqCisKKyAgMS4g5Lul5LiL44GuIC0tLT4g44Go6KiY44GV44KM44Gf44GV44KM44Gf6KGM44Gr44Kr44O844K944Or44KS56e75YuV44GX44G+44GX44KH44GG44CCCisKKyAgMi4gbyAo5bCP5paH5a2XKSDjgpLjgr/jgqTjg5fjgZfjgabjgIHjgqvjg7zjgr3jg6vjga7kuIvjga7ooYzjgpLplovjgY3jgIHmjL/lhaXjg6Ljg7zjg4njgavlhaXjgorjgb7jgZnjgIIKKworICAzLiAtLS0+IOOBqOiomOOBleOCjOOBn+ihjOOCkuWGmeOBl+OAgTxFU0M+IOOBqOOCv+OCpOODl+OBl+OBpui/veWKoOODouODvOODieOCkue1guS6huOBl+OBvuOBl+OCh+OBhuOAggorCistLS0+IG8gIOOCkuOCv+OCpOODl+OBmeOCi+OBqOOCq+ODvOOCveODq+OBr+mWi+OBhOOBn+ihjOOBuOenu+WLleOBl+aMv+WFpeODouODvOODieOBq+WFpeOCiuOBvuOBmeOAggorCisgIDQuIOOCq+ODvOOCveODq+OBruS4iuOBruihjOOBq+aMv+WFpeOBmeOCi+OBq+OBr+OAgeWwj+aWh+Wtl+OBriBvIOOBp+OBr+OBquOBj+OAgeWNmOe0lOOBq+Wkp+aWh+Wtl+OBriBPCisgICAgIOOCkuOCv+OCpOODl+OBl+OBvuOBmeOAguasoeOBruihjOOBp+ippuOBl+OBpuOBv+OBvuOBl+OCh+OBhuOAggor44GT44Gu6KGM44Gu5LiK44G45oy/5YWl44GZ44KL44Gr44Gv44CB44GT44Gu6KGM44G444Kr44O844K944Or44KS572u44GE44GmIFNoaWZ0LU8g44KS44K/44Kk44OX44GX44G+44GZ44CCCisKKworCisKKworCit+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+fn4KKwkJCeODrOODg+OCueODsyA2LjI6IOi/veWKoOOCs+ODnuODs+ODiQorCisKKyAgICAgICoqIOOCq+ODvOOCveODq+OBruasoeOBruS9jee9ruOBi+OCieODhuOCreOCueODiOOCkui/veWKoOOBmeOCi+OBq+OBryBhIOOBqOOCv+OCpOODl+OBl+OBvuOBmSAqKgorCisgIDEuIOODjuODvOODnuODq+ODouODvOODieOBq+OBl+OBpuS7peS4i+OBriAtLS0+IOOBqOiomOOBleOCjOOBn+OBleOCjOOBn+acgOWIneOBruihjOOBpyAkIOOCkuOCv+OCpOODl+OBlworICAgICDjgabjgIHntYLnq6/jgavjgqvjg7zjgr3jg6vjgpLnp7vli5XjgZfjgb7jgZfjgofjgYbjgIIKKworICAyLiDjgqvjg7zjgr3jg6vjga7mloflrZfjga7lvozjgo3jgavjg4bjgq3jgrnjg4jjgpLov73liqDjgZnjgovjgZ/jgoHjgasgYSAo5bCP5paH5a2XKSDjgpLjgr/jgqTjg5fjgZfjgb4KKyAgICAg44GZ44CCCisKK05PVEU6IOOBk+OCjOOBr+acgOW+jOOBruaWh+Wtl+OBq+OBpuODhuOCreOCueODiOOCkuaMv+WFpeOBl+OAgTxFU0M+IOOCkuOCv+OCpOODl+OBl+OBpuOCq+ODvOOCveODq+OCkuWPs+OBqworICAgICAg56e75YuV44GX44CB5pyA5b6M44GrIHgg44K/44Kk44OX44GX44Gm6KGM5pyr44Gr6L+95Yqg44GZ44KL44Go44GE44Gj44Gf44KI44GG44GqIGkg44Gu44K/44Kk44OX44KSCisgICAgICDpgb/jgZHjgovjgZPjgajjgYzjgY3jgb7jgZnjgIIKKworICAzLiDjgZXjgabmnIDliJ3jga7ooYzjgpLlrozmiJDjgZfjgb7jgZfjgofjgYbjgILjg4bjgq3jgrnjg4jjgYzmjL/lhaXjgZXjgozjgovkvY3nva7jgpLpmaTjgZHjgbDjgIEKKyAgICAg6L+95Yqg44Kz44Oe44Oz44OJ44Gv5oy/5YWl44Oi44O844OJ44Go44G+44Gj44Gf44GP5ZCM44GY44Gn44GZ44CCCisKKy0tLT4g44GT44Gu6KGM44Gn44CB6KGM5pyr44Gr5paH56ug44KS6L+95Yqg44GZ44KLCistLS0+IOOBk+OBruihjOOBp+OAgeihjOacq+OBq+aWh+eroOOCkui/veWKoOOBmeOCi+e3tOe/kuOCkuOBmeOCi+OBk+OBqOOBjOOBp+OBjeOCi+OBp+OBl+OCh+OBhuOAggorCisKK35+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+fgorCQkJICAg44Os44OD44K544OzIDYuMzog44Gd44Gu5LuW44Gu572u5o+bCisKKworCSAgKiogMeaWh+Wtl+S7peS4iuOCkue9ruOBjeaPm+OBiOOCi+OBq+OBr+Wkp+aWh+Wtl+OBriBSIOOBqOOCv+OCpOODl+OBl+OBvuOBl+OCh+OBhiAqKgorCisgIDEuIOS7peS4i+OBriAtLS0+IOOBqOiomOOBleOCjOOBn+OBleOCjOOBn+ihjOOBq+OCq+ODvOOCveODq+OCkuenu+WLleOBl+OBvuOBl+OCh+OBhuOAggorCisgIDIuIC0tLT4g44Go6KiY44GV44KM44Gf77yS6KGM55uu44Go6YGV44GG44CB5pyA5Yid44Gu5Y2Y6Kqe44Gu5YWI6aCt44Gr44Kr44O844K944Or44KS56e75YuV44GX44G+44GX44KH44GG44CCCisgICAgICjljZjoqp4gJ2xhc3QnKQorCisgIDMuIOOBk+OBk+OBpyBSIOOCkuOCv+OCpOODl+OBl+OBpuOAgeacgOWIneOBruihjOOBqOasoeOBruihjOOBjOWQjOOBmOOBq+OBquOCi+OCiOOBhuOBq+aXouWtmOOBruODhuOCreOCueODiAorICAgICDjgbjkuIrmm7jjgY3jgr/jgqTjg5fjgZfjgIHvvJHooYznm67jga7mrovjgorjga7pg6jliIbjgpLmm7jjgY3mj5vjgYjjgb7jgZfjgofjgYbjgIIKKworLS0tPiBUbyBtYWtlIHRoZSBmaXJzdCBsaW5lIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG9uIHRoaXMgcGFnZSB1c2UgdGhlIGtleXMuCistLS0+IFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCwgdHlwZSBSIGFuZCB0aGUgbmV3IHRleHQuCisKKyAgNC4g44Oi44O844OJ44KS5oqc44GR44KL44Gf44KB44GrIDxFU0M+IOOCkuOCv+OCpOODl+OBmeOCi+OBqOOAgeWkieabtOOBl+OBpuOBhOOBquOBhOmDqOWIhuOBjOaui+OCi+OBk+OBqAorICAgICDjgavms6jmhI/jgZfjgb7jgZfjgofjgYbjgIIKKworCisKKworfn5+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+CisJCSAgICAgICDjg6zjg4Pjgrnjg7MgNi40OiDjgqrjg5fjgrfjg6fjg7Pjga7oqK3lrpoKKworCisgICoqIOaknOe0ouOChOe9ruaPm+OBrumam+OBq+Wkp+aWh+Wtl+OBqOWwj+aWh+Wtl+OCkueEoeimluOBmeOCi+anmOOBq+OCquODl+OCt+ODp+ODs+OCkuioreWumuOBl+OBvuOBmSAqKgorCisKKyAgMS4g5Lul5LiL44Gu5qeY44Gr44K/44Kk44OX44GX44GmICdpZ25vcmUnIOOCkuaknOe0ouOBl+OBvuOBl+OCh+OBhjoKKyAgICAgICAvaWdub3JlCisgICAgIG4g44KS5oq844GX44Gm5L2V5bqm44GL5qSc57Si44KS57mw44KK6L+U44GX44G+44GZ44CCCisKKyAgMi4g5Lul5LiL44Gu5qeY44Gr44K/44Kk44OX44GX44GmICdpYycgKElnbm9yZSBDYXNlIOOBrueVpeOBp+OBmSkg44Kq44OX44K344On44Oz44KS6Kit5a6a44GX44G+44GZ44CCCisgICAgICAgOnNldCBpYworCisgIDMuIOOBp+OBryBuIOOBq+OCiOOBo+OBpuOCguOBhjHluqYgJ2lnbm9yZScg44KS5qSc57Si44GX44G+44GZ44CCCisgICAgIG4g44KS5oq844GX44Gm44GV44KJ44Gr5pWw5Zue5qSc57Si44KS57mw44KK6L+U44GX44G+44GX44KH44GG44CCCisKKyAgNC4gJ2hsc2VhcmNoJyDjgaggJ2luY3NlYXJjaCcg44Kq44OX44K344On44Oz44KS5Lul5LiL44Gu5qeY44Gr6Kit5a6a44GX44G+44GX44KH44GG44CCCisgICAgICAgOnNldCBobHMgaXMKKworICA1LiDjgoLjgYbkuIDluqbmpJzntKLjgrPjg57jg7Pjg4njgpLlhaXlipvjgZfjgabjgIHkvZXjgYzotbfjgZPjgovjgYvopovjgabjgb/jgb7jgZfjgofjgYY6CisgICAgICAgL2lnbm9yZQorCit+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+fn4KKwkJCQnjg6zjg4Pjgrnjg7MgNiDopoHntIQKKworCisgIDEuIG8g44KS44K/44Kk44OX44GZ44KL44Go44Kr44O844K944Or44Gu5LiL44Gu6KGM44KS6ZaL44GR44Gm44CB44Gd44GT44Gn5oy/5YWl44Oi44O844OJ44Gr44Gq44KL44CCCisgICAgIE8gKOWkp+aWh+Wtlykg44KS44K/44Kk44OX44GZ44KL44Go44Kr44O844K944Or44Gu5LiK44Gu6KGM44Gn5oy/5YWl44Oi44O844OJ44Gr44Gq44KL44CCCisKKyAgMi4g44Kr44O844K944Or5LiK44Gu5paH5a2X44Gu5qyh44GL44KJ44OG44Kt44K544OI44KS6L+95Yqg44GZ44KL44Gr44GvIGEg44Go44K/44Kk44OX44GZ44KL44CCCisgICAgIOihjOacq+OBq+iHquWLleOBp+ODhuOCreOCueODiOOCkuaMv+WFpeOBmeOCi+OBq+OBr+Wkp+aWh+WtlyBBIOOCkuOCv+OCpOODl+OBmeOCi+OAggorCisgIDMuIOWkp+aWh+Wtl+OBriBSIOOCkuOCv+OCpOODl+OBmeOCi+OBqOe9ruaPm+ODouODvOODieOBq+WFpeOCiuOAgTxFU0M+44KS5oq844GZ44Go5oqc44GR44KL44CCCisKKyAgNC4gIjpzZXQgeHh4IiDjgajjgr/jgqTjg5fjgZnjgovjgajjgqrjg5fjgrfjg6fjg7MgInh4eCIg44GM6Kit5a6a44GV44KM44KL44CCCisKKworCisKKworCisKKworCisKK35+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+fgorCQkgICAgIOODrOODg+OCueODsyA3OiDjgqrjg7Pjg6njgqTjg7Pjg5jjg6vjg5fjgrPjg57jg7Pjg4kKKworCQkgICAgICoqIOOCquODs+ODqeOCpOODs+ODmOODq+ODl+OCkuS9v+eUqOOBl+OBvuOBl+OCh+OBhiAqKgorCisgIFZpbSDjgavjga/luoPnr4Tjgavjgo/jgZ/jgovjgqrjg7Pjg6njgqTjg7Pjg5jjg6vjg5fjgrfjgrnjg4bjg6DjgYzjgYLjgorjgb7jgZnjgIIKKyAg44OY44Or44OX44KS6ZaL5aeL44GZ44KL44Gr44Gv44CB44GT44KM44KJM+OBpOOBruOBqeOCjOOBizHjgaTjgpLoqabjgZfjgabjgb/jgb7jgZfjgofjgYY6CisJLSDjg5jjg6vjg5fjgq3jg7wgPEhFTFA+IOOCkuaKvOOBmSjjgoLjgZfjgYLjgovjgarjgonjgbAp44CCCisJLSA8RjE+IOOCreODvOOCkuaKvOOBmSjjgoLjgZfjgYLjgovjgarjgonjgbAp44CCCisJLSA6aGVscCA8RU5URVI+IOOBqOOCv+OCpOODl+OBmeOCi+OAggorCisgIOODmOODq+ODl+OCpuOCo+ODs+ODieOCpuOCkumWieOBmOOCi+OBq+OBryA6cSA8RU5URVI+IOOBqOOCv+OCpOODl+OBl+OBvuOBmeOAggorCisgICI6aGVscCIg44Kz44Oe44Oz44OJ44Gr5byV5pWw44KS5LiO44GI44KL44GT44Go44Gr44KI44KK44CB44GC44KJ44KG44KL6aGM5ZCN44Gu44OY44Or44OX44KS6KaL44Gk44GR44KLCisgIOOBk+OBqOOBjOOBp+OBjeOBvuOBmeOAguOBk+OCjOOCieOCkuippuOBl+OBpuOBv+OBvuOBl+OCh+OBhig8RU5URVI+IOOCkuOCv+OCpOODl+OBl+W/mOOCjOOBquOBhOOCiOOBhuOBqyk6CisKKyAgOmhlbHAgdworICA6aGVscCBjXzxUCisgIDpoZWxwIGluc2VydC1pbmRleAorICA6aGVscCB1c2VyLW1hbnVhbAorCisKKworfn5+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+CisJCSAgICAgIOODrOODg+OCueODsyA4OiDotbfli5Xjgrnjgq/jg6rjg5fjg4jjga7kvZzmiJAKKworCQkJICoqIFZpbSDjga7nibnlvrTjgpLnmbrmj67jgZnjgosgKioKKworICBWaW0g44Gr44GvIFZpIOOCiOOCiuOCguWkmuOBj+OBrueJueW+tOOCkui4j+OBvuOBiOOBpuOBhOOBvuOBjOOAgeOBneOBruOBu+OBqOOCk+OBqeOBr+WIneacn+eKtuaFi+OBq+OBpgorICDkvb/nlKjkuI3lj6/jgajjgarjgaPjgabjgYTjgb7jgZnjgILjgojjgorlpJrjgY/jga7nibnlvrTjgpLkvb/jgYTjga/jgZjjgoHjgovjgavjga8gInZpbXJjIiDjg5XjgqHjgqTjg6sKKyAg44KS5L2c5oiQ44GX44G+44GZ44CCCisKKyAgMS4gInZpbXJjIiDjg5XjgqHjgqTjg6vjga7nt6jpm4bjgpLplovlp4vjgZnjgovjgILjgZPjgozjga/jgrfjgrnjg4bjg6Djgavkvp3lrZjjgZfjgb7jgZnjgIIKKwk6ZWRpdCB+Ly52aW1yYwkJCVVOSVgg5ZCR44GRCisJOmVkaXQgJFZJTS9fdmltcmMJCU1TLVdpbmRvd3Mg5ZCR44GRCisKKyAgMi4g44GT44GT44Gn44K144Oz44OX44Or44GuICJ2aW1yYyIg44KS6Kqt44G/6L6844G/44G+44GZ44CCCisKKwk6cmVhZCAkVklNUlVOVElNRS92aW1yY19leGFtcGxlLnZpbQorCisgIDMuIOS7peS4i+OBruOCiOOBhuOBq+ODleOCoeOCpOODq+OBuOabuOOBjei+vOOBv+OBvuOBmeOAggorCisJOndyaXRlCisKKyAg5qyh5ZueIFZpbSDjgpLotbfli5XjgZnjgovjgajjgIHoibLjgaXjgZHmp4vmlofjgYzkvb/jgYjjgovjgojjgYbjgavjgarjgovjgafjgZfjgofjgYbjgIIKKyAg44GT44GuICJ2aW1yYyIg44OV44Kh44Kk44Or44G444CB44GK5aW944G/44Gu6Kit5a6a44KS6L+95Yqg44GZ44KL44GT44Go44GM44Gn44GN44G+44GZ44CCCit+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+fn4KKworICDjgZPjgozjgavjgaYgVmltIOOBruODgeODpeODvOODiOODquOCouODq+OCkue1guOCj+OCiuOBvuOBmeOAguOCqOODh+OCo+OCv+OCkuewoeWNmOOBq+OAgeOBl+OBi+OCguWFheWIhuOBqworICDkvb/jgYbjgZPjgajjgYzjgafjgY3jgovjgojjgYbjgavjgajjgIFWaW0g44Gu5oyB44Gk5qaC5b+144Gu6KaB54K544Gu44G/44KS5Lyd44GI44KI44GG44Go44GX44G+44GX44Gf44CCCisgIFZpbSDjgavjga/jgZXjgonjgavlpJrjgY/jga7jgrPjg57jg7Pjg4njgYzjgYLjgorjgIHjgZPjgZPjgaflhajjgabjgpLoqqzmmI7jgZnjgovjgZPjgajjga/jgafjgY3jgb7jgZvjgpPjgIIKKyAg5Lul6ZmN44Gv44Om44O844K244Oe44OL44Ol44Ki44Or44KS5Y+C54Wn44GP44Gg44GV44GEOiAiaGVscCA6dXNlci1tYW51YWwiCisKKyAg44GT44KM5Lul5b6M44Gu5a2m57+S44Gu44Gf44KB44Gr44CB5qyh44Gu5pys44KS5o6o6Jam44GX44G+44GZ44CCCisJVmltIC0gVmkgSW1wcm92ZWQgLSBieSBTdGV2ZSBPdWFsbGluZQorCeWHuueJiOekvjogTmV3IFJpZGVycworICDmnIDliJ3jga7mnKzjga/lrozlhajjgasgVmltIOOBruOBn+OCgeOBq+abuOOBi+OCjOOBvuOBl+OBn+OAguOBqOOCiuOCj+OBkeWIneW/g+iAheOBq+OBr+OBiuWlqOOCgeOBp+OBmeOAggorICDlpJrjgY/jga7kvovpoYzjgoTlm7PniYjjgYzmjrLovInjgZXjgozjgabjgYTjgb7jgZnjgIIKKyAg5qyh44GuVVJM44KS5Y+C54Wn44GX44Gm5LiL44GV44GEIGh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnL2NsaWNrNS5odG1sCisKKyAg5qyh44GvIFZpbSDjgojjgorjgoIgVmkg44Gr44Gk44GE44Gm5pu444GL44KM44Gf5Y+k44GE5pys44Gn44GZ44GM5o6o6Jam44GX44G+44GZOgorCUxlYXJuaW5nIHRoZSBWaSBFZGl0b3IgLSBieSBMaW5kYSBMYW1iCisJ5Ye654mI56S+OiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMgSW5jLgorICBWaSDjgafjgoTjgorjgZ/jgYTjgajmgJ3jgYbjgZPjgajjgbvjgbzlhajjgabjgpLnn6XjgovjgZPjgajjgYzjgafjgY3jgovoia/mm7jjgafjgZnjgIIKKyAg56ysNueJiOOBp+OBr+OAgVZpbSDjgavjgaTjgYTjgabjga7mg4XloLHjgoLlkKvjgb7jgozjgabjgYTjgb7jgZnjgIIKKworICDjgZPjga7jg4Hjg6Xjg7zjg4jjg6rjgqLjg6vjga8gQ29sb3JhZG8gU3RhdGUgVW5pdmVyc2l0eSDjga4gQ2hhcmxlcyBTbWl0aCDjga7jgqLjgqTjg4fjgqIKKyAg44KS5Z+644Gr44CBQ29sb3JhZG8gU2Nob29sIG9mIE1pbmVzIOOBriBNaWNoYWVsIEMuIFBpZXJjZSDjgaggUm9iZXJ0IEsuIFdhcmUg44GuCisgIOS4oeWQjeOBq+OCiOOBo+OBpuabuOOBi+OCjOOBvuOBl+OBn+OAgiBFLW1haWw6IGJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdS4KKworICBNb2RpZmllZCBmb3IgVmltIGJ5IEJyYW0gTW9vbGVuYWFyLgorCisgIOaXpeacrOiqnuiosyAg5p2+5pys5rOw5byYICBFLW1haWw6bWF0dG5AbWFpbC5nb28ubmUuanAKKworfn5+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+Cisgdmk6c2V0IHRzPTggc3RzPTQgc3c9NCB0dz03NjoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvdHV0b3Iua28uZXVjIGIvcnVudGltZS90dXRvci90dXRvci5rby5ldWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmYzVhYwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvdHV0b3Iua28uZXVjCkBAIC0wLDAgKzEsODEyIEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9ICAgILr2ILHmwOLAzCAoVklNIFR1dG9yKSC/oSC/wL3FILDNwLsgyK+/tcfVtM+02SAgICAtICAgICAgVmVyc2lvbiAxLjUgICAgICA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAguvYoVmltKcC6IMDMILHmwOLAzL+hvK0gtNkgvLO47cfSILz2IL74wLsguLjFrSC4ucC6ILjtt8nAuyCwocH4CisgICAgILjFv+wgsK23wsfRIMbtwf2x4sDUtM+02S4gwMwgsebA4sDMtMIguvbAuyC9sbDUIMD8w7XIxCDG7cH9seK3ziC757/rx9IKKyAgICAgvPYgwNa1tbfPIMPmutDH0SC47bfJv6EgtOvH2CC8s7jtx8+w7SDA1r3AtM+02S4KKworICAgICDAzCCx5sDiwMy4piC2vLTCILWlv6G0wiC9x73Ax8+0wiC1pb+hIL7zuLazqiC9w7CjwLsgvrK0wiCwob+hILX7tvO8rQorICAgICAyNS0zMCC60CDBpLW1sKEgsMm4s7TPtNkuCisKKyAgICAgwMwgv6y9wL+hIMb3x9S1yCC47bfJwLogs7u/68C7ILDtxKi0z7TZLiDAzCDGxMDPwMcgurm757q7wLsguLi16b7uvK0KKyAgICAgv6y9wMfPvLy/5C4gKHZpbXR1dG9yILimIMXrx9ggvcPA28fftNm46SwgwMy5zCC6ubvnurvAuyC757/rx8+0wgorICAgICDB38DUtM+02S4pCisKKyAgICAgwd+/5MfRILDNwLosIMDMILHmwOLAzLChIMH3waIgveG6uLjpvK0guei/7LW1t88gsO23wbXHvu4gwNa02bTCILDNwNS0z7TZLgorICAgICC47bfJwLsgwaa067fOIMDNyPe3wbjpLCDB98GiIL3Hx+DH2Lq4tMIgsM3AzCDHyr/kx9W0z7TZLiCzu7/rwLsgwNC0wgorICAgICCwzbi4wLi3zrTCLCC47bfJwLsgwNi+7rn2uK6w1CC1ySCwzcDUtM+02S4KKworICAgICDA2iDAzMGmLCBDYXBzIExvY2soU2hpZnQtTG9jaykgxbCwoSC0rbfBwNbB9iC+ysC6wfYgyK7AzsfYuri9w7DtLCBqIMWwuKYKKyAgICAgw+a60Mj3ILStt6+8rSBMZXNzb24gMS4xwMwgyK246b+hILChteYgwve1tbfPIL/ywfe/qbq+vcO02S4KK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgTGVzc29uIDEuMTogIMS/vK0gv/LB98DMseIKKworICAgKiogxL+8rbimIL/ywffAzLfBuOksIMelvcO1yCC067fOIGgsaixrLGwgxbC4piC0qbijvcq9w7/ALiAqKgorICAgICAgICAgICAgIF4KKyAgICAgICAgICAgICBrICAgICAgICAgICAgICDI+cauOiAgaCDFsLTCIL/ewsq/oSDA1sC4uOcsIL/ewsrAuLfOIL/ywffA1LTPtNkuCisgICAgICAgPCBoICAgICAgIGwgPiAgICAgICAgICAgICAgIGwgxbC0wiC/wLilwsq/oSDA1sC4uOcsIL/AuKXCysC4t84KKyAgICAgICAgICAgICBqICAgICAgICAgICAgICAgICAgICAgv/LB98DUtM+02S4KKyAgICAgICAgICAgICB2ICAgICAgICAgICAgICAgICAgICAgaiDFsLTCIL7Gt6G55sfiIMitu+zHpcOzt7Mgu/2w5b3AtM+02S4KKworICAxLiDAzbz3x9jB+iC2p7HuwfYgxL+8rbimIL26xam4sCC787+hvK0gv/LB97+pILq4vcq9w7/ALgorCisgIDIuIL7Gt6EguebH4sWwIChqKbimILndurnA1LfCwMwgtckgtqex7sH2ILSpuKOw7SCw6L3KvcO/wC4KKy0tLT4gwMzBpiC02cC9IGxlc3NvbsC4t84gsKG0wiC55rn9wLsgvsuw1CC1x776vcC0z7TZLgorCisgIDMuIL7Gt6EguebH4sWwuKYgwMy/68fPv6ksIExlc3NvbiAxLjIgt84gsKG9yr3Dv8AuCisKK8L8sO06IL/4x8/B9iC+yrTCILmrvvCwobChIMDUt8LAzCC1x776tNm46SwgPEVTQz64piC0rbevvK0sILjtt8kguPC15bfOCisgICAgICC1ub7GsKG9yr3Dv8AuILHXIMjEv6Egv/jHz7TCILjtt8nAuyC02b3DIMDUt8LHz73KvcO/wC4KKworwvyw7TogxL+8rcWwILbHx9EgwNu1v8fSILDNwNS0z7TZLiDHz8H2uLggaGprbL+hIMDNvPfH2MH2uOksIMS/vK3FsLq4tNkKKyAgICAgIMjOvsAguvy4o7DUIMDMtb/H0iC89iDA1sC7ILDNwNS0z7TZLgorCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgIExlc3NvbiAxLjI6ILr2wLsgvcPA28fPsO0gs6Gzu7HiCisKKworICAhISDB1sDHOiC+xrehIMDWtMIgtNyw6LimIL3Hx+DHz7HiIMD8v6EsIMDMIGxlc3NvbiDA/MO8uKYgwNDAuL3KvcO/wCEhCisKKyAgMS4gPEVTQz4gxbC4piC0rbevvK0gyK69x8fPsNQguO23ySC48LXlt84guvzBriCzqr/JtM+02S4KKworICAyLiC02cC9sPogsLDAzCDA1LfCx9W0z7TZOiAgICA6cSEgPEVOVEVSPgorCistLS0+IMDMt7iw1CDHz7jpLCC52bLvILO7v+vAuyAqwPrA5cfPwfYgvsqw7Sogxu3B/bHiuKYguvzBrrOqsKm0z7TZLgorICAgICDA+sDlx9EgyMQguvzBrrOqsKG3wbjpILTZwL2w+iCwsMDMIMDUt8LH1bTPtNk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp3cSA8RU5URVI+CisKKyAgMy4gvakgx8G30sfBxq6woSC6uMDOtNm46SwgtNm9wyCx5sDiwMy3ziC1ub7Gv8Cx4iDAp8fYILTZwL2w+iCwsMDMCisgICAgIMDUt8LH1bTPtNkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpbXR1dG9yIDxFTlRFUj4KKyAgICAgtse0wiC02cC9sPogsLDAuyC89rW1IMDWvcC0z7TZLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aW0gdHV0b3Iua28gPEVOVEVSPgorCistLS0+ICd2aW0nIMC6ILr2IMbtwf2x4rfOILXpvu6wobTCILDNwLsgtubHz7jnLCAndHV0b3Iua28ntMIgxu3B/cfPt8G0wgorICAgICDGxMDPwLsgtubH1bTPtNkuCisKKyAgNC4gwKe/obytIMDMvt+x4sfRILTcsOi4piCx4r7vx8+/tMC4uOcsIMiuvcXAzCC8rbjpLCAxv6G8rSAzse7B9rimCisgICAgILz2x+DHz7+pIMbtwf2x4rimILOqsKy02bChILTZvcMgtem+7r/Nuri9yr3Dv8AuICCx1yDIxCDEv7ytuKYgvsa3obfOCisgICAgIL/ywfe/qSBMZXNzb24gMS4zIMC4t84gsKG9yr3Dv8AuCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgIExlc3NvbiAxLjM6IMXYvbrGriDG7cH9IC0gwfa/7LHiCisKKworKioguO23ySC48LXlv6G8rSAgIHggILimILSpuKO46SDEv7ytsKEgwKfEocfRILD3wMcgsdvA2rimIMH2v+8gvPYgwNa9wLTPtNkuICoqCisKKyAgMS4gLS0tLT4gt84gx6W9w7XIILD3wLi3ziDEv7ytuKYgv8Ww3Lq4vcq9w7/ALgorCisgIDIuIL/Axbi4piC89sGkx8+x4iDAp8fYLCDEv7ytuKYgwfa/7yCx28DaIMCnt84gv/LB97+pILq4vcq9w7/ALgorCisgIDMuIHggIMWwuKYgtK23r7ytIMH2v/a+38fSILHbwNq4piDB9r/svcq9w7/ALgorCisgIDQuIDK/obytIDSx7sH2uKYgud26ucfPv6kgua7A5cDMIL/Dudm4o7DUILXHtbW3zyDHz7+pILq4vcq9w7/ALgorCistLS0+IFRoZSBjY293IGp1bXBlZGQgb3Z2ZXJyIHRoaGUgbW9vb24uCisKKyAgNS4gua7A5cDMIMGkyK7H2MGztNm46SwgTGVzc29uIDEuNLfOILChvcq9w7/ALgorCivB1sDHOiDAzCCx5sDiwMy4piC6uLjpvK0gv9y/7LfBsO0gx8/B9ri7sO0sIMH3waIgu+e/68fYuri46bytIMDNyPex5gorICAgICAgudm2+LTPtNkuCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgTGVzc29uIDEuNDogxdi9usauIMbtwf0gLSC78MDUIChJTlNFUlRJT04pCisKKyAgCisgICAgICAgKioguO23ySC48LXlv6G8rSAgIGkgILimILSpuKO46SDF2L26xq64piDA1LfCx9IgvPYgwNa9wLTPtNkuICoqCisKKyAgMS4gxL+8rbimIMO5ufjCsCAtLS0+ILfOIMelvcO1yCDB2bfOIL/ywffA1LTPtNkuCisKKyAgMi4gw7m5+MKwIMHZwLsgtc65+MKwIMHZsPogtsiwsMDMILi4temwzcDUtM+02S4gxdi9usausKEgtem+7rChvt/H0gorICAgICCw9yC02cC9us7FzSDDubn4wrAgsdvA2iDAp7+hIMS/vK24piC/xbDcILP1vcC0z7TZLgorCisgIDMuIGkgIMWwuKYgtKm4pSDIxCwgx8q/5MfRILO7v+vAuyDA1LfCx9W0z7TZLgorCisgIDQuILz2waTH0SDIxL+htMIgPEVTQz4guKYgtK23r7ytILjtt8kguPC15bfOILW5vsawqbTPtNkuCisgICAgILmuwOXAuyC/w7nZuKOw1CC4uLXpseIgwKfH2CAyv6G8rSA0wMcgsPrBpMC7ILndurnH1bTPtNkuCisKKy0tLT4gVGhlcmUgaXMgdGV4dCBtaXNuZyB0aGlzIC4KKy0tLT4gVGhlcmUgaXMgc29tZSB0ZXh0IG1pc3NpbmcgZnJvbSB0aGlzIGxpbmUuCisKKyAgNS4gxdi9usauuKYgu/DA1MfPtMIgtaW/oSDAzbz3x9jBs7TZuOksIL/kvuDAuyC6wcHWvcq9w7/ALgorCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFU1NPTiAxIL/kvuAKKworCisgIDEuIMS/vK24piC/8sH3wM8gtqe/obTCIMitu+zHpSDFsLOqIGhqa2wgxbC4piDAzL/rx9W0z7TZLgorICAgICAgICAgaCAov97CyikgICAgICAgaiAovsa3oSkgICAgICAgayAowKcpICAgICAgIGwgKL/AuKXCyikKKworICAyLiC9qSDHwbfSx8HGrr+hvK0guvbAuyC9w8Dbx8+3wbjpIHZpbSBGSUxFTkFNRSA8RU5URVI+CisKKyAgMy4gvPbBpMfRILO7v+vAuyC5q73Dx9Egw6S3ziC69r+hvK0guvzBrrOqsKG3wbjpICAgPEVTQz4gICA6cSEgICA8RU5URVI+CisgICAgICAgICAgICAgICAgICAgICDA+sDlx9EgyMQguva/obytILr8wa6zqrCht8G46SAgIDxFU0M+ICAgOndxICAgPEVOVEVSPgorCisgIDQuILjtt8kguPC15b+hvK0gxL+8rbChIMCnxKHH0SCw98DHILHbwNq4piDB9r/st8G46SAgIHggILimIMDUt8LH1bTPtNkuCisKKyAgNS4guO23ySC48LXlv6G8rSDEv7ytsKEgwKfEocfRILD3v6Egxdi9usauuKYgu/DA1MfPt8G46QorICAgICAgICAgaSAgILimILSpuKUgyMQgxdi9usauuKYgwNS3wsfPsO0gIDxFU0M+ILimILSpuKi0z7TZLgorCivC/LDtOiA8RVNDPrTCILjtt8kguPC15bfOILW5vsawobTCILWlIL6yuOcsIL/4xKEgvsq0wiC47bfJwMyzqiC/z8D8yPcgwNS3wrXHwfYKKyAgICAgIL7KwLoguO23ycC7IMPrvNLHz7TCILWlv6G1tSC+ubTPtNkuCisKK7HXt7MgTGVzc29uIDK4piC9w8Dbx9W9w7TZLgorCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgIExlc3NvbiAyLjE6ILvowaYoREVMRVRJT04pILjtt8kKKworCisgICAgICAgICAgICAqKiDH0SC03L7uuKYgs6Gx7sH2IMH2v+y3wbjpICBkdyAgtvOw7SDEobjpILXLtM+02S4gKioKKworICAxLiA8RVNDPiDFsLimILStt6+8rSDIrr3Hx8+w1CC47bfJILjwteW3ziC6/MGuILOqv8m0z7TZLgorCisgIDIuIL7Gt6G/oSAtLS0+ILfOIMelvcO1yCDB2SCx7sH2IMS/vK24piC/xbHptM+02S4KKworICAzLiDB9r/2vt/H0iC03L7uwMcgw7PAvcC4t84gxL+8rbimIL/Fsem0z7TZLgorCisgIDQuIGR3ICC287DtIMPEvK0gsdcgtNy+7rimIMH2v/O0z7TZLgorCisgIMHWwMc6IMCnv6G8rSC4u8fRtOu3ziDHz7jpIMituOnAxyC4tsH2uLcgwdm/oSBkdyC287TCILHbwNqwoSDHpb3Dtcu0z7TZLgorICAgICAgICDA37j4IMPGtNm46SwgIDxFU0M+ILimILStt6+8rSC02b3DIL3DwNvHz73KvcO/wC4KKworLS0tPiBUaGVyZSBhcmUgYSBzb21lIHdvcmRzIGZ1biB0aGF0IGRvbid0IGJlbG9uZyBwYXBlciBpbiB0aGlzIHNlbnRlbmNlLgorCisgIDUuIDMsIDS5+CCw+sGkwLsgtNm9wyDHz7+pILmuwOXAuyDBpMiux8+w1CC4uLXnILXaIExlc3NvbiAyLjK3ziCwob3KvcO/wC4KKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgIExlc3NvbiAyLjI6ILTZuKUgu+jBpiC47bfJCisKKyAgICAgICAgICAgICAgKiogIGQkILbzsO0gxKG46SCx1yDB2SCzobHuwfYgwfa/9sH9tM+02S4gKioKKworICAxLiA8RVNDPiDFsLimILStt6+8rSDIrr3Hx8+w1CC47bfJILjwteW3ziC6/MGuILOqv8m0z7TZLgorCisgIDIuIL7Gt6G/oSAtLS0+ILfOIMelvcO1yCDB2SCx7sH2IMS/vK24piC/xbHptM+02S4KKworICAzLiC/w7nZuKUgwdnAxyCzocC4t84gxL+8rbimIL/Fsem0z7TZLiAow7m5+MKwt84gs6q/wLTCIC4gtNnAvcDUtM+02S4pCisKKyAgNC4gZCQgILbzsO0gw8S8rSDB2SCzobHuwfYgwfa/87TPtNkuCisKKy0tLT4gU29tZWJvZHkgdHlwZWQgdGhlIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuCisKKworICA1LiC+7rayIMDPwMwgwM++7rO1tMLB9iDAzMfYx8+x4iDAp8fYIExlc3NvbiAyLjMgwLi3ziCwob3KvcO/wC4KKworCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgIExlc3NvbiAyLjM6ILjtt8mw+iDA+7/rILTru/O/oSC068fYCisKKworICC76MGmILjtt8kgZMDHIMf8vcTAuiC02cC9sPogsLC9wLTPtNkuCisKKyAgICAgICAgIFvIvbz2XSAgIGQgICC067vzICAgICAgtse0wiAgICAgIGQgICBbyL289l0gICC067vzCisgIL+pseK8rQorICAgIMi9vPYgLSC47bfJwLsguO4gufggvPbH4MfSIMH2ICi/ybzHLCCx4rq7sKo9MSkuCisgICAgZCAgICAtIMH2v+y0wiC47bfJCisgICAgtOu78yAtIL7Gt6G/oSDBpr3DtcggtOu787+hILTrx9gguO23ycC7ILz2x+AKKworICDA+7/rILChtMnH0SC067vzwMcgwb63+ToKKyAgICB3IC0gxL+8rb+hvK0gsdcgtNy+7sDHILOhse7B9iAosPi56SDG98fULikKKyAgICBlIC0gxL+8rb+hvK0gsdcgtNy+7sDHILOhse7B9iAosPi56cC7IMb3x9THz8H2IL7KwL0uKQorICAgICQgLSDEv7ytv6G8rSCx1yDB2cDHILOhse7B9gorCivC/LDtOiAgyKOx4r3JwMwgwNa02bjpLCC47bfJILjwteW/obytILjtt8kgvvjAzCC067vzwLsgwNS3wsfYuri9yr3Dv8AuCisgICAgICAgwKe/obytIMDMvt+x4sfRILTru/PAxyC48bfPv6Egtfu28yDEv7ytsKEgv/LB98DMsNQgtcu0z7TZLgorCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgTGVzc29uIDIuNDogJ7jtt8kttOu78ycgv6EgtOvH0SC/ub/cCisKKworICAgICAgICAgICAgICAgKiogIGRkICC287DtIMShuOkgwdkgwPzDvLimIMH2v/O0z7TZLiAqKgorCisgIMHZIMD8w7y4piDB9r/stMIgwM/AzCDA5rHiILanua6/oSwgVmm4piC18MDawM4gx9Egu+e297XpwLosILCjtNzI9yBkuKYKKyAgtc65+CC/rLTevsYgxKG46SDH0SDB2cC7IMH2v+8gvPYgwNa1tbfPIMfPv7S9wLTPtNkuCisKKyAgMS4gxL+8rbimIL7Gt6Egs6q/wiC03Lb0wMcgtc65+MKwIMHZt84gsKHBrrChvcq9w7/ALgorICAyLiBkZCC4piDA1LfCx8+/qSCx1yDB2cC7IMH2v+y9yr3Dv8AuCisgIDMuILHXt7EgtNnAvSCz17n4wrAgwdm3ziCwob3KvcO/wC4KKyAgNC4gMmRkILbzsO0gwNS3wsfPv6kgtc7B2cC7IMH2v/O0z7TZLiAoIMi9vPYtuO23yS2067vzwLsgseK+78fPvLy/5C4gKQorCisgICAgICAxKSAgUm9zZXMgYXJlIHJlZCwKKyAgICAgIDIpICBNdWQgaXMgZnVuLAorICAgICAgMykgIFZpb2xldHMgYXJlIGJsdWUsCisgICAgICA0KSAgSSBoYXZlIGEgY2FyLAorICAgICAgNSkgIENsb2NrcyB0ZWxsIHRpbWUsCisgICAgICA2KSAgU3VnYXIgaXMgc3dlZXQKKyAgICAgIDcpICBBbmQgc28gYXJlIHlvdS4KKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgICBMZXNzb24gMi41OiDD67zSKFVORE8pILjtt8kKKworCisgICAqKiAgdSAguKYgtKm4o7jpILi2wfa4tyC47bfJwMwgw+u80rXHuOcsICBVILTCIMHZIMD8w7y4piC89sGkx9W0z7TZLiAqKgorCisgIDEuIMS/vK24piAtLS0+ILfOIMelvcO1yCDB2bfOIMDMtb/H0SDIxCDDubn4wrAgwN+4+LXIILrOutAgwKe3ziC/xbHptM+02S4KKyAgMi4gIHggILimIMDUt8LHz7+pIMO5ufjCsCDA37j4tcggsdvA2rimIMH2v/O0z7TZLgorICAzLiCx17ezIMDMwaYgIHUguKYgwNS3wsfPv6kguLbB9ri3wLi3ziC89sfgtcgguO23ycC7IMPrvNLH1bTPtNkuCisgIDQuIMDMufi/obTCICB4ICC47bfJwLsgwMy/68fPv6kgsdcgwdnAxyC48LXnIL+ht6+4piC89sGkx9i6vr3DtNkuCisgIDUuILTrua7A2iAgVSAguKYgtK23r7ytILHXIMHZwLsgv/i3oSC788XCt84gtbm3wbP1vsYguri9yr3Dv8AuCisgIDYuIMDMufi/obTCICB1ILimILjuILn4ILStt6+8rSAgVSC/zSDAzMD8ILjtt8nAuyDD67zSx9i6vr3DtNkuCisgIDcuIENUUkwtUiAoQ1RSTCDFsLimILSpuKUgu/PFwr+hvK0gUsC7ILSpuKO0wiCwzSkgwLsguO4gufggtK23r7ytCisgICAgILjtt8nAuyC02b3DIL3Hx+DH2Lq+vcO02S4gKMPrvNLH0SCwzcC7IMPrvNLH1C4pCisKKy0tLT4gRmlpeCB0aGUgZXJyb3JzIG9vbiB0aGhpcyBsaW5lIGFuZCByZWVwbGFjZSB0aGVtIHdpdHRoIHVuZG8uCisKKyAgOC4gwMwguO23ycC6ILjFv+wgwK+/68fVtM+02S4gILHXt7MgTGVzc29uIDIgv+S+4MC4t84gs9G+7rChtbW3zyDH1b3DtNkuCisKKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFU1NPTiAyIL/kvuAKKworCisgIDEuIMS/vK2woSDAp8Shx9EgsPe6zsXNILTcvu7AxyCzobHuwfYgwfa/7LfBuOk6ICAgIGR3CisKKyAgMi4gxL+8rbChIMCnxKHH0SCw97rOxc0gwdkgs6Gx7sH2IMH2v+y3wbjpOiAgICBkJAorCisgIDMuIMHZIMD8w7y4piDB9r/st8G46TogICAgZGQKKworICA0LiC47bfJILjwteW/obytILO7uK60wiC47bfJwMcgx/y9xMC6ILTZwL2w+iCwsL3AtM+02ToKKworICAgICAgIFvIvbz2XSAgILjtt8kgICC067vzICAgILbHtMIgICAguO23ySAgIFvIvbz2XSAgILTru/MKKyAgICAgv6mx4rytOgorICAgICAgIMi9vPYgLSCx1yC47bfJwLsguO4gufggud26ucfSILDNwM6woQorICAgICAgILjtt8kgLSC+7rayILjtt8nAuyCzu7ixILDNwM6woSAoIL+5uKYgtem+7iwgu+jBpsDOILDmv+y0wiBkICkKKyAgICAgICC067vzIC0guO23ycDMILW/wNvH0iC067vzLCC/ubimILXpvu4gdyAotNy+7iksICQgKMHZwMcgs6EpILXuLgorCisgIDUuIMDMwPwgx+C1v8C7IMPrvNLHz7fBuOk6ICAgICAgICAgICAgICAgICB1ICAgKLzSua7A2iB1KQorICAgICDH0SDB2b+hvK0gvPbBpMfRILDNwLsguPC1ziDD67zSx8+3wbjpOiAgVSAgICi067muwNogVSkKKyAgICAgw+u80sfRILDNwLsgtNm9wyC9x8fgx8+3wbjpOiAgICAgICAgICAgIENUUkwtUgorCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgIExlc3NvbiAzLjE6ILrZwMyx4ihQVVQpILjtt8kKKworCisgICAgICAqKiAgcCC4piDA1LfCx8+/qSC4tsH2uLfAuLfOIMH2v+4gs7u/68C7IMS/vK0gtdq/oSC62cDUtM+02S4gKioKKworICAxLiC+xrehv6EgwNa0wiC5rrTcwMcgw7kgwdm3ziDEv7ytuKYgv/LB98DMvcq9w7/ALgorCisgIDIuICBkZCAguKYgwNS3wsfPv6kgsdcgwdnAuyDB9r/2vK0guvbAxyC59sbbv6EgwPrA5cfVtM+02S4KKworICAzLiC+xrHuIMH2v+4gwdnAzCCwob7fx9IgwKfEocDHICrArcHZt84qIMS/vK24piC/xbHptM+02S4KKworICA0LiC47bfJILjwteW/obytLCAgcCAguKYgwNS3wsfPv6kgsdcgwdnAuyDBprTrt84gtcggwNq4rrfOIL/Fsem0z7TZLgorCisgIDUuIDK/obytIDS4piC53bq5x8+/qSC48LXnIMHZwMcgvPi8rbimILnZt84gwOLAuL3KvcO/wC4KKworICAgICBkKSBDYW4geW91IGxlYXJuIHRvbz8KKyAgICAgYikgVmlvbGV0cyBhcmUgYmx1ZSwKKyAgICAgYykgSW50ZWxsaWdlbmNlIGlzIGxlYXJuZWQsCisgICAgIGEpIFJvc2VzIGFyZSByZWQsCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgIExlc3NvbiAzLjI6IMShyK8oUkVQTEFDRSkguO23yQorCisKKyAgKiogxL+8rSC+xrehwMcgsdvA2iDHz7OquKYgudmy2bfBuOksIHIgwLsgtKm4pSDIxCC52bLcILHbwNq4piDA1LfCx9W0z7TZLiAqKgorCisgIDEuIMS/vK24piAtLS0+ILfOIMelvcO1yCDDuSDB2bfOIL/Fsem0z7TZLgorCisgIDIuIMS/vK24piDA37j4tcggw7kgus660MC4t84gv8Wx6bTPtNkuCisKKyAgMy4gIHIgIMC7ILSpuKUgyMQsIMDfuPi1yCC6zrrQwLsgsO3DxCC+tSCx28DauKYgwNS3wsfVtM+02S4KKworICA0LiAyv6G8rSAzwMcgsPrBpMC7ILndurnHz7+pLCDDuSDB2cDHIL/At/m4piC89sGkx8+9yr3Dv8AuCisKKy0tLT4gIFdoYW4gdGhpcyBsaW1lIHdhcyB0dW9lZCBpbiwgc29tZW9uZSBwcmVzc3dkIHNvbWUgd3Jvamcga2V5cyEKKy0tLT4gIFdoZW4gdGhpcyBsaW5lIHdhcyB0eXBlZCBpbiwgc29tZW9uZSBwcmVzc2VkIHNvbWUgd3Jvbmcga2V5cyEKKworICA1LiBMZXNzb24gMy4yILfOIMDMtb/H1b3DtNkuCisKK8HWwMc6IL/cv+zB9iC4u7DtLCDB98GiIMfYuri46bytIMDNx/S+3yDH0bTZtMIgsM3AuyDA2MH2ILi2vcq9w7/ALgorCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgICAgICBMZXNzb24gMy4zOiC6r8ivKENIQU5HRSkguO23yQorCisKKyAgICAgICAgICAgKiogx9EgtNy+7sDHIMDPus6zqiDA/MO8uKYgudmy2bfBuOksICBjdyAguKYgxKG9yr3Dv8AuICoqCisKKyAgMS4gxL+8rbimIC0tLT4gt84gx6W9w7XIIMO5wdm3ziC/xbHptM+02S4KKworICAyLiDEv7ytuKYgbHVidyC/obytIHUgwKe/oSC/w7fBs/W9wLTPtNkuCisKKyAgMy4gY3cgtvOw7SC47bfJx9EgyMQgtNy+7rimIMGkyK7Hz7DUILz2waTH1bTPtNkuICjAzCCw5r/sLCAgJ2luZScguKYgxKi0z7TZLikKKworICA0LiA8RVNDPiC4piC0qbilIMjEILTZwL0gv6G3r7fOILCptM+02SAovPbBpLXHvu6+38fSIMO5ILHbwNq3ziCwqbTPtNkuKQorCisgIDUuIDO/obytIDTAxyCw+sGkwLsgud26ucfPv6kgw7m5+MKwILmuwOXAuyC1zrn4wrAgua7A5bD6ILCwtbW3zyC4uLXstM+02S4KKworLS0tPiBUaGlzIGx1YncgaGFzIGEgZmV3IHdwdGZkIHRoYXQgbXJyZiBjaGFuZ2luZyB1c2YgdGhlIGNoYW5nZSBjb21tYW5kLgorLS0tPiBUaGlzIGxpbmUgaGFzIGEgZmV3IHdvcmRzIHRoYXQgbmVlZCBjaGFuZ2luZyB1c2luZyB0aGUgY2hhbmdlIGNvbW1hbmQuCisKK2N3ILTCILTcvu64piDEocivx8+0wiCwzSC707i4IL7GtM+28ywgs7u/68C7ILvwwNTH0iC89iDA1rW1t88gx9G02bTCILDNv6EKK8HWwMfH1b3DtNkuCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgTGVzc29uIDMuNDogYyC4piDAzL/rx9EgtNm4pSC6r8ivILjtt8kKKworCisgICAgICoqILqvyK8guO23ycC6ILvowabH0iC2pyDAzL/rx9EgtOu787+hILTrx9ggwPu/68fSILz2IMDWvcC0z7TZLiAqKgorCisgIDEuILqvyK8guO23ycC6ILvowaa/zSC1v8DPx9Eguea9xMC4t84gtb/A28fVtM+02S4gx/y9xMC6ILTZwL2w+iCwsL3AtM+02ToKKworICAgICAgIFvIvbz2XSAgIGMgICC067vzICAgICAgtse0wiAgICAgICBjICAgW8i9vPZdICAgtOu78worCisgIDIuIMD7v+sgsKG0ycfRILTru/Mgv6q9wyCwsL3AtM+02S4gIHcgKLTcvu4pLCAgJCAowdnAxyCzoSkgte7AzCDA1r3AtM+02S4KKworICAzLiAtLS0+ILfOIMelvcO1yCDDucHZt84gwMy1v8fVtM+02S4KKworICA0LiDDuSC/obevIMCnt84gxL+8rbimIL/Fsem0z7TZLgorCisgIDUuIGMkILimIMDUt8LHz7+pLCCx1yDB2cDHILOquNPB9rChILXOufjCsCDB2cOzt7Mgtce1tbfPILz2waTH0SDIxCA8RVNDPiC4pgorICAgICC0qbijvcq9w7/ALgorCistLS0+IFRoZSBlbmQgb2YgdGhpcyBsaW5lIG5lZWRzIHNvbWUgaGVscCB0byBtYWtlIGl0IGxpa2UgdGhlIHNlY29uZC4KKy0tLT4gVGhlIGVuZCBvZiB0aGlzIGxpbmUgbmVlZHMgdG8gYmUgY29ycmVjdGVkIHVzaW5nIHRoZSAgYyQgIGNvbW1hbmQuCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRVNTT04gMyC/5L7gCisKKworICAxLiDAzLnMIMH2v+4gs7u/68C7ILXHtbm4rrfBuOksICBwICC4piC0qbijvcq9w7/ALiDAzCC47bfJwLogxL+8rSAqtNnAvb+hKgorICAgICDB9r/2wfggs7u/68C7ILrZwNS0z7TZKFBVVCkuICjH0SDB2cC7IMH2v+4gsOa/7L+htMIgxL+8rSC02cC9IMHZv6EKKyAgICAgwfa/9sH4ILO7v+vAzCC62b3AtM+02S4pCisKKyAgMi4gxL+8rSC+xrehwMcgsdvA2rimIMShyK/Hz7fBuOkoUkVQTEFDRSksICByICDAuyC0qbilIMjEIL/4t6EgsdvA2iC0673FCisgICAgILnZstm+7iCz1sC7ILHbwNq4piDA1LfCx9W0z7TZLgorCisgIDMuILqvyK8guO23yShDSEFOR0UpwLogxL+8rb+hvK0gus7FzSDB9sGkx9EgtOu788DHILOhse7B9iC52bLcILz2IMDWtMIKKyAgICAguO23ycDUtM+02S4gv7m4piC16b7uLCDEv7ytIMCnxKG/obytILTcvu7AxyCzobHuwfYgudmy2bfBuOksICBjdyAguKYKKyAgICAgwNS3wsfPuOkgtce45ywgIGMkICC0wiDB2SCzobHuwfYgudmy2bTCILWlIL6ywNS0z7TZLgorCisgIDQuILqvyK8guO23ycDHIMf8vcTAuiC02cC9sPogsLC9wLTPtNk6CisKKyAgICAgICAgIFvIvbz2XSAgIGMgICC067vzICAgICAgILbHtMIgICAgICAgYyAgIFvIvbz2XSAgILTru/MKKworsOi808fYvK0gtNnAvSBMZXNzb24gwLsgwfjH4MfVvcO02S4KKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgTGVzc29uIDQuMTogwKfEob/NIMbEwM/AxyC788XCCisKKworICAqKiAgQ1RSTC1nILimILSpuKO46SDGxMDPILO7v6G8rcDHIMf2wOcgwKfEob/NIMbEwM/AxyC788XCuKYgurwgvPYgwNa9wLTPtNkuCisgICAgICBTSElGVC1HILimILSpuKO46SDGxMDPILO7wMcgwdm3ziDAzLW/x9W0z7TZLiAqKgorCisgIMHWwMc6IL7Gt6HAxyC03LDouKYgtfu288fPseIgwPy/oSwgwMwgTGVzc29uIMD8w7y4piC41cD6IMDQwLi9yr3Dv8AuCisKKyAgMS4gQ1RSTCDFsLimILSpuKUgu/PFwr+hvK0gZyC4piC0qbiotM+02S4gxsTAzyDAzLinsPogx/bA5yDAp8Shx9EgwdnAzAorICAgICDHpb3Dtcggu/PFwsHZwMwgyK246SC+xrehv6Egx6W9w7XJILDNwNS0z7TZLiAzufjCsCC03LDouKYgwKfH2CCx1worICAgICDB2SC5+MijuKYgseK+78fPsO0gsOi9yr3Dv8AuCisKKyAgMi4gU0hJRlQtRyC4piC0qbijuOkgxsTAz8DHILi2wfa4t8C4t84gwMy1v8fVtM+02S4KKworICAzLiC+xrHuILHivu/H37T4IMHZILn4yKO4piDA1LfCx9EgyMQgU0hJRlQtRyC4piC0qbijvcq9w7/ALiDAzLe4sNQgx8+46QorICAgICDDs8C9v6EgQ1RSTC1nILimILStt7a0+CDA5bzSt84gtce1ub7GsKGw1CC1ySCwzcDUtM+02S4KKyAgICAgKLn4yKO4piDA1LfCx9IgtqcsIMDMsM3AuiDIrbjpv6Egx6W9w7XHwfYgvsq9wLTPtNkuKQorCisgIDQuIMDavcXAzCC7/bDltNm46SwgMb+hvK0gM7Huwfa4piC9x8fgx9i6uL3KvcO/wC4KKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgTGVzc29uIDQuMjogw6Ox4iC47bfJCisKKworICAgICAgICAgICAgICAqKiAgLyAguKYgtKm4pSDIxCCwy7v2x9Igua6xuLimIMDUt8LHz73KvcO/wC4gKioKKworICAxLiC47bfJILjwteW/obytICAvICC4piDA1LfCx8+9yr3Dv8AuICA6ILjtt8m/obytv80guLbC+bChwfa3ziwgIMituOkgvsa3ob+hCisgICAgIC8gv80gxL+8rbChIMelvcO1ySCwzcDUtM+02S4KKworICAyLiAnZXJycm9vcicgtvOw7SDEoyDIxCA8RU5URVI+ILimIMShvcq9w7/ALiDAzCC03L7uuKYgw6PAuLfBsO0gx9W0z7TZLgorCisgIDMuILCwwLogua6xuLimILTZvcMgw6PAuLfBuOksILCjtNzI9yAgbiAgwLsgwNS3wsfPvcq9w7/ALgorICAgICCwsMC6ILmusbi4piC53bTrILnmx+LAuLfOIMOjwLi3wbjpLCAgU2hpZnQtTiDAuyDA1LfCx8+9yr3Dv8AuCisKKyAgNC4gua6xuLimIL+quebH4sC4t84gw6PAuLfBuOksICAvICC0673FICA/ILimIMDMv+vHz7jpILXLtM+02S4KKworLS0tPiAiZXJycm9vciIgaXMgbm90IHRoZSB3YXkgdG8gc3BlbGwgZXJyb3I7ICBlcnJyb29yIGlzIGFuIGVycm9yLgorCivC/LDtOiDDo7TCIMHfv6EgxsTAz8DHILOhv6EgtNm02bijsNQgtce46SwgxsTAz8DHIMOzwL26zsXNILTZvcMgw6Ow1CC1y7TPtNkuCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgTGVzc29uIDQuMzogsP3Io8DHIMKmIMOjseIKKworCisgICAgICAgICAgICAgICoqICUgILimILStt6+8rSAgKSwgXSwgfSDAxyDCpsC7IMOjvcC0z7TZLiAqKgorCisgIDEuIMS/vK24piAtLS0+ILfOIMelvcO1yCDB2cDHICgsIFssIHsgwd8gx8+zqr+hILChwa602SCz9b3AtM+02S4KKworICAyLiAgJSC4piDA1LfCx9ggur69w7TZLgorCisgIDMuIMS/vK2woSDCpsDMILjCtMIgsP3Io7fOIMDMtb/H0iCwzcDUtM+02S4KKworICA0LiAgJSC4piDA1LfCx8+/qSwgwMzA/CCw/cijt84gtce1ub7GIL/JvcO02S4KKworLS0tPiBUaGlzICggaXMgYSB0ZXN0IGxpbmUgd2l0aCAoJ3MsIFsncyBdIGFuZCB7J3MgfSBpbiBpdC4gKSkKKworwvyw7TogwqbAzCC4wsH2IL7KtMIgsP3Io7ChIMDWtMIgx8G3zrHXt6XAuyC18Ln2sevH0iC2p7+hILjFv+wgwK+/68fVtM+02SEKKworCisKKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgIExlc3NvbiA0LjQ6IL+ht6+4piC89sGkx8+0wiC55rn9CisKKworICAgICAqKiAgOnMvb2xkL25ldy9nICDHz7jpICdvbGQnILimICAnbmV3JyC3ziDEocivKFNVQlRJVFVURSnH1bTPtNkuICoqCisKKyAgMS4gxL+8rbimIC0tLT4gt84gx6W9w7XIIMHZv6EgsKHBrrTZILP1vcC0z7TZLgorCisgIDIuICA6cy90aGVlL3RoZSC4piDA1LfCx9EgyMQgPEVOVEVSPiC4piDEqLTPtNkuICDAzCC47bfJwLogsdcgwdm/obytCisgICAgIMOzwL3AuLfOILnfsN+1yCCwzbi4ILnZstu02bTCILDNv6EgwdbAx8fPvcq9w7/ALgorCisgIDMuIMDMufi/obTCICA6cy90aGVlL3RoZS9nICC4piDA1LfCx9W0z7TZLiDAzLTCILHXIMHZIMD8w7woZ2xvYmFsbHkpuKYKKyAgICAgxKHIr8fRtNm0wiCwzcC7IMDHuczH1bTPtNkuCisKKy0tLT4gdGhlZSBiZXN0IHRpbWUgdG8gc2VlIHRoZWUgZmxvd2VycyBpcyBpbiB0aGVlIHNwcmluZy4KKworICA0LiC1ziDB2SC758DMwMcguPC15yC5rsDav62/oSC068fYIMShyK/Hz7fBuOkgtNnAvbD6ILCwwMwgx9W0z7TZLAorICAgICAgOiMsI3Mvb2xkL25ldy9nICAgICMsIyC0wiC1ziDB2cDHIMHZufjIo7imILbmx9W0z7TZLgorICAgICAgOiVzL29sZC9uZXcvZyAgICAgIMbEwM8gwPzDvL+hvK0gud+w37XIILjwtecgsM3AuyDEocivx8+0wiCw5r/swNS0z7TZLgorCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRVNTT04gNCC/5L7gCisKKworICAxLiBDVFJMLWcgILTCIMbEwM/AxyC788XCv80gxsTAzyCzu7+hvK3AxyDH9sDnIMCnxKG4piDHpb3Dx9W0z7TZLgorICAgICBTSElGVC1HICC0wiDGxMDPwMcgs6HAuLfOIMDMtb/H1bTPtNkuIMHZufjIo7imIMDUt8LH0SDIxCBTSElGVC1HuKYKKyAgICAgwNS3wsfPuOksILHXIMHZt84gwMy1v8fVtM+02S4KKworICAyLiAgLyC4piDA1LfCx9EgyMQgua6xuLimIMDUt8LHz7jpILHXILmusbi4piC+xrenuebH4sC4t84gw6O9wLTPtNkuCisgICAgICA/ILimIMDUt8LH0SDIxCC5rrG4uKYgwNS3wsfPuOkgwK255sfiwLi3ziDDo73AtM+02S4KKyAgICAgsMu79iDIxCwgbiDAuyDA1LfCx8+46SCwsMC6ILnmx+LAuLfOILTZwL0gua6xuLimIMOjwLi45ywKKyAgICAgU2hpZnQtTiDAuyDA1LfCx8+46SC53bTrILnmx+LAuLfOIMOjvcC0z7TZLgorCisgIDMuIMS/vK2woSAoLCksWyxdLHssfSDAp7+hIMDWwLsgtqe/oSAgJSC4piDA1LfCx8+46SC788DAx8+0wiDCpsC7CisgICAgIMOjvsawqbTPtNkuCisKKyAgNC4gvu62siDB2b+hIMOzwL0gte7A5cfPtMIgb2xkuKYgbmV3t84gudmy2bfBuOkgICAgICAgICAgOnMvb2xkL25ldworICAgICDH0SDB2b+hILXuwOXHz7TCILjwtecgb2xkuKYgbmV3t84gudmy2bfBuOkgICAgICAgICAgICA6cy9vbGQvbmV3L2cKKyAgICAgtc4gwdkgIywjILvnwMy/obytIMShyK/AuyDHz7fBuOkgICAgICAgICAgICAgICAgICAgICAgOiMsI3Mvb2xkL25ldy9nCisgICAgIMbEwM8gs7vAxyC48LXnILmusbi4piDEocivx8+3wbjpICAgICAgICAgICAgICAgICAgICAgIDolcy9vbGQvbmV3L2cKKyAgICAgudmy3CC2p7i2tNkgyK7AzsC7ILDFxKG3wbjpICdjJ7imILrZv6m8rSAgICAgICAgICAgICAgOiVzL29sZC9uZXcvZ2MKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICBMZXNzb24gNS4xOiC/3LrOILjtt8kgvcfH4MfPtMIguea5/QorCisKKyAgICAgICAgICoqICAgOiEgIMC7IMDUt8LH0SDIxCC9x8fgx8+3wbTCILjtt8nAuyDA1LfCx8+9yr3Dv8AuICoqCisKKyAgMS4gxKO898fRILjtt8nAziAgOiAguKYgwNS3wsfPuOkgxL+8rbChIMituOkgvsa3obfOIMDMtb/H1bTPtNkuILjtt8nAuworICAgICDA1LfCx9IgvPYgwNaw1CC1y7TPtNkuCisKKyAgMi4gwMzBpiAgISAotMCzpselKSC4piDA1LfCx8+9yr3Dv8AuIMDMt7iw1CDHz7jpIL/cus4gvakguO23ycC7IL3Hx+DH0gorICAgICC89iDA1r3AtM+02S4KKworICAzLiC9w8fou+++xiAhILTZwL2/oSAgbHMgILimIMDUt8LH0SDIxCA8RU5URVI+ILimIMPEuri9yr3Dv8AuIL2pIMfBt9LHwcauCisgICAgIL+hvK3Ds7ezILXwt7rF5LiuwMcguPG3z8DMIMPit8K1ySCwzcDUtM+02S4gIGxzICCwoSC1v8Dbx8/B9iC+yrTCtNm46QorICAgICA6IWRpciDAuyC9w7W1x9gguri9yr3Dv8AuCisKK8L8sO06ICC+7rayIL/cus4guO23ybW1IMDMILnmuf3AuLfOIL3Hx+DH0iC89iDA1r3AtM+02S4KKworwvyw7TogILjwtecgIDogILjtt8nAuiA8RU5URVI+ILimIMPEvt8guLa5q7iuILXLtM+02S4KKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICBMZXNzb24gNS4yOiC6uLTZIMDavLzH0SDGxMDPIMD6wOUKKworCisgICAgICoqILz2waS1yCCzu7/rwLsgxsTAz7fOIMD6wOXHz7fBuOksICA6dyAgRklMRU5BTUUgIMfPvcq9w7/ALiAqKgorCisgIDEuICA6IWRpciC2x7TCICA6IWxzICC4piDA1LfCx8+/qSC18Le6xeS4rsDHILiuvbrGrrimIL7yvu6/ybTPtNkuCisgICAgIMCnwMcguO23ySDIxCA8RU5URVI+uKYgw8S+38fRtNm0wiCwzcC6IMDMucwgvsuw7SDA1sC7ILDNwNS0z7TZLgorCisgIDIuIFRFU1Qgw7O3syDBuMDnx8/B9iC+yrTCIMbEwM8gwMy4p8C7IMfPs6ogsO24o73KvcO/wC4KKworICAzLiDAzMGmICA6dyBURVNUILbzsO0gwNS3wsfPvcq9w7/ALiAgKFRFU1S0wiC0573FwMwgvLHFw8fRIMbEwM8gwMy4p8DUtM+02S4pCisKKyAgNC4gwMy3uLDUIMfPuOkguvYgsebA4sDMIMbEwM8gwPzDvLimIFRFU1S287TCIMDMuKfAuLfOIMD6wOXH1bTPtNkuCisgICAgIMiuwM7Hz7fBuOksICA6IWRpciDAuyC02b3DIMDUt8LHz7+pLCC18Le6xeS4rrimILvsxuy6uL3KvcO/wC4KKworwvyw7ToguvbAuyDBvrfhx9EgyMQsILr2wLsgtNm9wyC9x8fgx8+/qSBURVNUtvO0wiDGxMDPwLsgv6246SwgsdcgxsTAz8C6CisgICAgICDA+sDlx9/AuyC2p7/NIL/Puq7I9yCwsMC6ILq5u+e6u8DPILDNwNS0z7TZLgorCisgIDUuIMDMwaYgsdcgxsTAz8C7IMH2v/O9w7TZLgorICAgICAoTVMtRE9Tv6G8rSk6ICAgIWRlbCBURVNUCisgICAgIChVbml4v6G8rSk6ICAgICAhcm0gVEVTVAorCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICBMZXNzb24gNS4zOiC8scXDwPvAuLfOIMD6wOXHz7TCILjtt8kKKworCisgICAgICAgICoqIMbEwM/AxyDAz7rOuKYgwPrA5cfPt8G46SwgIDojLCMgdyBGSUxFTkFNRSAgx8+9yr3Dv8AuICoqCisKKyAgMS4gtNm9wyDH0bn4LCAgOiFkaXIgIMDMs6ogICFscyC4piDA1LfCx8+/qSC18Le6xeS4rsDHILjxt8/AuyC53r7Gv8IgyMQKKyAgICAgVEVTVCCwsMC6IMD7x9XH0SDAzLinwLsgvLHFw8fVtM+02S4KKworICAyLiDEv7ytuKYgwMwgxuTAzMH2wMcgw7PAvcC4t84gv8Wx5CDIxCwgQ3RybC1nILimIMDUt8LHz7+pILHXIMHZwMcgwdm5+MijuKYKKyAgICAgvsu+xrPAtM+02S4gwMwgufjIo7imILHivu/Hz73KvcO/wCEKKworICAzLiDAzMGmIMDMIMbkwMzB9sDHILi2wfa4t8C4t84gsKG8rSAgQ3RybC1nILimILTZvcMgwNS3wsfPvcq9w7/ALiDAzCDB2cDHCisgICAgIMHZufjIoyC2x8fRILHivu/Hz73KvcO/wCEKKworICA0LiC+7rayILy9vMe4uCDGxMDPt84gwPrA5cfPt8G46SwgIDojLCMgdyBURVNUICC4piDA1LfCx8+46SC1y7TPtNkuIMDMILanCisgICAgICMsIyC0wiC+xrHuILHivu/H37T4IL3DwNuw+iCzoSDB2bn4yKMgwNS0z7TZLiBURVNUtMIgxsTAzyDAzLinwNS0z7TZLgorCisgIDUuIDohZGlyIMC7IMDMv+vHz7+pIMbEwM/AzCC4uLXpvu7Bs7TCwfYgyK7AzsfPvcq9w7/ALiDB9r/swfa0wiC4tr3KvcO/wC4KKworCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgTGVzc29uIDUuNDogxsTAzyDA0L7utenAzLHiLCDH1cShseIKKworCisgICAgICAgKiogvu62siDGxMDPwMcgs7u/68C7ILvwwNTHz7fBuOksICA6ciBGSUxFTkFNRSAgx8+9yr3Dv8AgKioKKworICAxLiAgOiFkaXIgwLsgwNS3wsfPv6kgvsax7iC4uLXnIFRFU1QgxsTAz8DMILHXtOu3ziDA1rTCwfYgyK7AzsfPvcq9w7/ALgorCisgIDIuIMS/vK24piDAzCDG5MDMwfbAxyDDs8C9wLi3ziC/8sH3wMy9yr3Dv8AuCisKK8HWwMc6ICAzufjCsCC03LDouKYgvcfH4MfPuOksIExlc3NvbiA1LjMgwLsguriw1CC1ySCwzcDUtM+02S4gsde3uLDUILXHuOkKKyAgICAgICDAzCBsZXNzb27AuLfOILTZvcMgs7u3wb/Avcq9w7/ALgorCisgIDMuIMDMwaYgVEVTVCDGxMDPwLsgwNC+7rXpwNS9w7TZLiAgOnIgVEVTVCAguO23ycC7ILvnv+vHz73KvcO/wC4gVEVTVCC0wgorICAgICDGxMDPwMcgwMy4p8DUtM+02S4KKworwvyw7TogIMDQvu616cDOIMbEwM/AuiDEv7ytsKEgwKfEocfRIMH2waG/obytus7FzSCz9cDMsNQgtcu0z7TZLgorCisgIDQuIMbEwM/AzCDA0L7utem/qcH4ILDNwLsgyK7AzsfPseIgwKfH2Cwgtdq3ziDAzLW/x9i8rSCx4sG4ILn2wPyw+iDGxMDPv6G8rQorICAgICDA0L7utenAziC59sD8LCDAzLe4sNQgTGVzc29uIDUuMyDAzCC1zrn4ILndurm1x776wL3AuyDIrsDOx8+9yr3Dv8AuCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRVNTT04gNSC/5L7gCisKKworICAxLiAgOiFjb21tYW5kICC4piDAzL/rx8+/qSC/3LrOILjtt8nAuyC9x8fgx9W0z7TZLgorCisgICAgICDAr7/rx9Egv7k6CisgICAgICAgICAoTVMtRE9TKSAgICAgICAgIChVbml4KQorICAgICAgICAgIDohZGlyICAgICAgICAgICAgOiFscyAgICAgICAgICAgIC0gILXwt7rF5LiuwMcguPG3z8C7ILq4v6nB2LTZLgorICAgICAgICAgIDohZGVsIEZJTEVOQU1FICAgOiFybSBGSUxFTkFNRSAgIC0gIEZJTEVOQU1FwMy287TCIMbEwM/AuyDB9r/utNkuCisKKyAgMi4gIDp3IEZJTEVOQU1FICDHz7jpIMf2wOcguva/obytILvnv+vHz7TCIMbEwM/AuyBGSUxFTkFNRcDMtvO0wiDAzLinwLi3zgorICAgICAgtfC9usWpv6EgwPrA5cfVtM+02S4KKworICAzLiAgOiMsI3cgRklMRU5BTUUgIMfPuOkgI7rOxc0gI7HuwfbAxyDB2cC7IEZJTEVOQU1FwMy287TCIMbEwM+3ziDA+sDlx9W0z7TZLgorCisgIDQuICA6ciBGSUxFTkFNRSAgwLogtfC9usWpv6G8rSBGSUxFTkFNRcDMtvO0wiDGxMDPwLsgutK3r7Xpv6m8rSDEv7ytIMCnxKEKKyAgICAgILXav6Egx/bA5yDGxMDPwLsgwf2+7rPWvcC0z7TZLgorCisKKworCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgIExlc3NvbiA2LjE6ILv1IMHZIL+tseIoT1BFTikguO23yQorCisKKyAgICAgICAqKiAgbyAguKYgtKm4o7jpIMS/vK0gvsa3ob+hIMHZwLsguLi16bDtIMbtwf0guPC15bChILXLtM+02S4gKioKKworICAxLiC+xrehv6EgLS0tPiC3ziDHpb3Dtcggwdm3ziDEv7ytuKYgv8Wx4r3KvcO/wC4KKworICAyLiAgbyAovNK5rsDaKbimIMPEvK0gxL+8rSAqvsa3ob+hKiDB2cC7IMfPs6ogv6m9yr3Dv8AuIMbtwf0guPC15bChILXLtM+02S4KKyAgICAgSW5zZXJ0IG1vZGUuCisKKyAgMy4gLS0tPiC3ziDHpb3DtcggwdnAuyC6ubvnx9EgyMQgIDxFU0M+ILimILStt6+8rSDG7cH9ILjwteW/obytILOqv8C9yr3Dv8AuCisKKy0tLT4gQWZ0ZXIgdHlwaW5nICBvICB0aGUgY3Vyc29yIGlzIHBsYWNlZCBvbiB0aGUgb3BlbiBsaW5lIGluIEluc2VydCBtb2RlLgorCisgIDQuIMS/vK0gKsCnv6EqIMHZwLsgx8+zqiC4uLXlt8G46SwgvNK5rsDaICBvILTrvcUgtOu5rsDaICBPICC4piDEobjpILXLtM+02S4KKyAgICAgvsa3oSDA1rTCIMHZv6EgtOvH2CDAzCC47bfJwLsgs7u3wbq4vcq9w7/ALgorT3BlbiB1cCBhIGxpbmUgYWJvdmUgdGhpcyBieSB0eXBpbmcgU2hpZnQtTyB3aGlsZSB0aGUgY3Vyc29yIGlzIG9uIHRoaXMgbGluZS4KKworCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgIExlc3NvbiA2LjI6IMPfsKEoQVBQRU5EKSC47bfJCisKKworICAgICAgICAgICoqICBhILimILSpuKO46SDEv7ytICq02cC9v6EqILHbwLsgwNS3wsfSILz2IMDWvcC0z7TZLiAqKgorCisgIDEuIMS/vK24piAtLS0+ILfOIMelvcO1yCDDubn4wrAgwdnAxyCzocC4t84gv8Wx6bTPtNkuICC47bfJILjwteW/obytCisgICAgICQguKYgwMy/68fPvcq9w7/ALgorCisgIDIuICC80rmuwNogYSC4piDEv7ytIL7Gt6EgsdvA2iAqtNnAvSq/oSCx28C7IMPfsKHH0iC89iDA1r3AtM+02S4KKyAgICAgKLTrua7A2iBBtMIgsdcgwdnAxyCzob+hIMPfsKHH1bTPtNkuKQorCivC/LDtOiCx17e4sNQgx8+9w7jpILDtwNsgwdnAxyCzob+hIMPfsKG4piDHz7HiIMCnx9ggabimILSpuKOw7SwgxL+8rSC+xrehv6EKKyAgICAgIMDWtPggsdvA2rimILndurnHz7DtLCCx28C7ILOiv/az1rDtLCA8RVNDPrimILStt68guO23ySC48LXlt84gtbm+xr/NvK0sCisgICAgICDEv7ytuKYgv8C4pcLKwLi3ziC/xbHisO0guLbB9ri3wLi3ziB4se7B9iC0rbevvt8gx8+0wiC5+LDFt86/8sC7IMfHx8+9xworICAgICAgvPYgwNa9wLTPtNkuCisKKyAgMy4gwMzBpiDDuSDB2cC7IL/PvLrHz73KvcO/wC4gw9+woSC47bfJwLogxdi9usausKEgwNS3wrXHtMIgwKfEoSC/3L+htMIKKyAgICAgxu3B/SC48LXlv80gv8/A/Mj3ILCwtNm0wiCwzcC7IMCvs+THz73KvcO/wC4KKworLS0tPiBUaGlzIGxpbmUgd2lsbCBhbGxvdyB5b3UgdG8gcHJhY3RpY2UKKy0tLT4gVGhpcyBsaW5lIHdpbGwgYWxsb3cgeW91IHRvIHByYWN0aWNlIGFwcGVuZGluZyB0ZXh0IHRvIHRoZSBlbmQgb2YgYSBsaW5lLgorCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgTGVzc29uIDYuMzogxKHIryhSRVBMQUNFKSDAxyC02bilILn2wPwKKworCisgICAgICAqKiAgtOu5rsDaIFIgwLsgwNS3wsfPuOkgx8+zqiDAzLvzwMcgsdvA2rimILnZstwgvPYgwNa9wLTPtNkuICoqCisKKyAgMS4gxL+8rbimIC0tLT4gt84gx6W9w7XIIMO5ufjCsCDB2bfOIL/FseK9yr3Dv8AuCisKKyAgMi4gxL+8rbimIC0tLT4gt84gx6W9w7XIILXOufjCsCDB2bD6ILTZuKUgw7m5+MKwILTcvu4gwKe3ziC/xbHivcq9w7/ALgorICAgICAoJ2xhc3QnIMDUtM+02S4pCisKKyAgMy4gIFIgIMC7IMDUt8LH0SDIxCDDubn4wrAgwdnAxyC/ucD8IMXYvbrGriDAp7+hILv1t86/7iCx28C7IMDUt8LHz7+pCisgICAgILOquNPB9iCzu7/rwMwgtc65+MKwIMHZsPogsLC+xsH2tbW3zyC52bLfvcO02S4KKworLS0tPiBUbyBtYWtlIHRoZSBmaXJzdCBsaW5lIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG9uIHRoaXMgcGFnZSB1c2UgdGhlIGtleXMuCistLS0+IFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCwgdHlwZSBSIGFuZCB0aGUgbmV3IHRleHQuCisKKyAgNC4gPEVTQz4guKYgtK23r7ytILOqsKG46Swgudmy7sH2IL7KwLogxdi9usautMIgsde067fOILOysNQgtcu0z7TZLgorCisKKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgIExlc3NvbiA2LjQ6IL/JvMcgvLPBpChTRVQpCisKKyAgICAgICoqIMOjseKzqiC52bLZseK/obytILTrvNK5rsDaILG4utDAuyC++L7WseIgwKfH2CC/ybzHwLsgvLPBpMfVtM+02SAqKgorCisgIDEuILTZwL3AuyDA1LfCx8+/qSAnaWdub3JlJyC4piDDo8C4vcq9w7/AOgorICAgICAvaWdub3JlCisgICAgICBuIMWwuKYgwMy/68fPv6kgv6m3r7n4ILndurnHz73KvcO/wC4KKworICAyLiAnaWMnICi067zSua7A2iCxuLqwIL7Ix9QsIElnbm9yZSBjYXNlKSC/ybzHwLsgvLPBpMfPvcq9w7/AOgorICAgICA6c2V0IGljCisKKyAgMy4gIG4gxbC4piC0rbevvK0gJ2lnbm9yZScguKYgtNm9wyDDo77Guri9yr3Dv8AuCisgICAgIG4gxbC4piCw6LzTILStt6+8rSC/qbevufggw6PAuL3KvcO/wC4KKworICA0LiAnaGxzZWFyY2gnIL/NICdpbmNzZWFyY2gnIL/JvMfAuyC8s8Gkx9W9w7TZLgorICAgICA6c2V0IGhscyBpcworCisgIDUuIMOjseIguO23ycC7ILTZvcMgwNS3wsfPv6ksIL7utrIgwM/AzCDAz77us6q0wsH2IMiuwM7H2CC6uL3KvcO/wDoKKyAgICAgL2lnbm9yZQorCisgIDYuIMOjwLogs7u/68DMILCtwbYoSElHSExJR0hUKbXIILDNwLsgvvi+1rfBuOksILTZwL2w+iCwsMDMIMDUt8LH1bTPtNk6CisgICAgIDpub2hsc2VhcmNoCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRVNTT04gNiC/5L7gCisKKworICAxLiAgbyC4piDA1LfCx8+46SDEv7ytICq+xrehv6EqIMfRIMHZwMwgv624rrjnLCDEv7yttMIgxu3B/SC48LXlt84KKyAgICAgv624sCDB2SDAp7+hIMCnxKHHz7DUILXLtM+02S4KKyAgICAgtOu5rsDaICBPICC4piDA1LfCx8+46SDEv7ytsKEgwNa0wiDB2cDHICrAp7fOKiC79SDB2cC7IL+tsNQgtcu0z7TZLgorCisgIDIuICBhILimIMDUt8LHz7jpIMS/vK0gKrTZwL2/oSogsdvAuyDA1LfCx9IgvPYgwNa9wLTPtNkuCisgICAgILTrua7A2iAgQSAguKYgwNS3wsfPuOkgwNq1v8C4t84gsdcgwdnAxyCzob+hILHbwNq4piDD37Chx8+w1CC1y7TPtNkuCisKKyAgMy4gtOu5rsDaICBSICDAuyDA1LfCx8+46SA8RVNDPiC4piC0rbevvK0gs6qwobHiIMD8se7B9iC52bLZseIguPC15bChILXLtM+02S4KKworICA0LiAiOnNldCB4eHgiILimIMfPuOkgInh4eCIgv8m8x8DMILyzwaS1y7TPtNkuCisKKworCisKKworCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgTEVTU09OIDc6IL/CtvPAziC1tb/yuLsguO23yQorCisKKyAgICAgICAgICAgICAgICAgICAgICAqKiC/wrbzwM4gtbW/8ri7IL3DvbrF2yC757/rx8+x4iAqKgorCisgILr2wLogxvggs9DAuiC/wrbzwM4gtbW/8ri7IL3DvbrF28C7IMGmsPjH1bTPtNkuICC1tb/yuLvAuyC6uLfBuOksCisgILTZwL0gvLywocH2IMHfIMfPs6q4piC9w7W1x9i6uL3KvcO/wDoKKyAgICAgICAgLSA8SEVMUD4gxbC4piC0qbiltNkuICjFsLChIMDWtMIgsOa/7CkKKyAgICAgICAgLSA8RjE+IMWwuKYgtKm4pbTZLiAoxbCwoSDA1rTCILDmv+wpCisgICAgICAgIC0gOmhlbHAgPEVOVEVSPiAgILbzsO0gwNS3wsfRtNkuCisKKyAgtbW/8ri7IMOiwLsgtN3AuLfBuOkgIDpxIDxFTlRFUj4gILbzsO0gwNS3wsfPvcq9w7/ALgorCisgICI6aGVscCIgtvO0wiC47bfJv6EgwM7A2rimIMHWuOkgvu62siDB1sGmv6EgsPzH0SC1tb/yuLvAuyDDo8C7ILz2IMDWvcC0z7TZLgorICC02cC9ILjtt8nAuyCzu7fBILq4vcq9w7/ALiAoIDxFTlRFUj4gxbC4piC0qbijtMIgsM3AuyDA2MH2ILi2vcq9w7/ALikKKworICAgICAgICA6aGVscCB3CisgICAgICAgIDpoZWxwIGNfPFQKKyAgICAgICAgOmhlbHAgaW5zZXJ0LWluZGV4CisgICAgICAgIDpoZWxwIHVzZXItbWFudWFsCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgICAgIExFU1NPTiA4OiC9w8DbIL26xam4s8auILi4temx4gorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioguvbAxyCx4rTJIMTRseIgKioKKworICC69sC6IFZpILq4tNkgyM6+wCC4ucC6ILHitMnAuyCwocH2sO0gwNbB9ri4LCC067rOutDAuiCx4rq7wPvAuLfOIMDbtb/Hz8H2CisgIL7KvcC0z7TZLiC09SC4ucC6ILHitMnAuyC94bq4t8G46SwgInZpbXJjIiC287TCIMbEwM/AuyC4uLXpvu6+3yDH1bTPtNkuCisKKyAgMS4gInZpbXJjIiDGxMDPwLsgvPbBpMfVvcO02S4gwMwgxsTAz8C6ILvnv+vHz7TCIL3DvbrF27+hILX7tvMgtNm4qLTPtNk6CisgIDEuIFN0YXJ0IGVkaXRpbmcgdGhlICJ2aW1yYyIgZmlsZSwgdGhpcyBkZXBlbmRzIG9uIHlvdXIgc3lzdGVtOgorICAgICAgICA6ZWRpdCB+Ly52aW1yYyAgICAgICAgICAgICAgICAgIFVuaXjAxyCw5r/sCisgICAgICAgIDplZGl0ICRWSU0vX3ZpbXJjICAgICAgICAgICAgICAgTVMtV2luZG93c8DHILDmv+wKKworICAyLiDAzMGmICJ2aW1yYyLAxyC/ucGmuKYgwNC+7rXpwNS0z7TZOgorCisgICAgICAgIDpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4gtNnAvbD6ILCwwMwgx8+/qSDGxMDPwLsgwPrA5cfVtM+02ToKKworICAgICAgICA6d3JpdGUKKworICC02cC9ILn4v6EguvbAuyC9w8Dbx8+46Swgsbi5riCwrcG2KHN5bnRheCBoaWdobGlnaHRpbmcpwMwgu+e/67XJILDNwNS0z7TZLgorICC48LXnIL/4x8+0wiC8s8GkwLsgwMwgInZpbXJjIiDGxMDPv6Egs9a+7rXRILz2IMDWvcC0z7TZLgorCit+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+fn4KKworICDAzLDNwLi3ziC69iCx5sDiwMy4piC4tsSotM+02S4gIMDMILHmwOLAzLTCILr2IMbtwf2x4r+hILTrx9EgsKO3q8fRILCzv+S4pgorICC6uL+pwdax4iDAp8fRIMDHtbW3ziDBpsDbtce++sC4uOcsIMDMIMbtwf2x4rimIMGkuLsgsKO03Mj3ILvnv+vHz7Hiv6EKKyAgw+a60MfSILvTwNS0z7TZLiAguva/obTCIMDMILHmwOLAzL/NtMIguvGxs8fSILz2IL74wLsguLjFrSDIzr7AILi5wLoguO23ycDMCisgIMDWvcC0z7TZLiAgtNnAvSC757/rwNoguMW0ur7zwLsgwNDAuL3KvcO/wDogIjpoZWxwIHVzZXItbWFudWFsIgorCisgILq4tNkgwNq8vMj3IMDQsO0gsPi6zsfPt8G46SwgtNnAvSDDpcC7IMPfw7XH2CC15biztM+02ToKKyAgICAgICAgVmltIC0gVmkgSW1wcm92ZWQgLSBieSBTdGV2ZSBPdWFsbGluZQorICAgICAgICDD4sbHu+c6IE5ldyBSaWRlcnMKKyAgwMwgw6XAuiC/z8D8yPcguva/oSC068fYvK24uCC02bfnsO0gwNa9wLTPtNkuICDGr8j3IMPKurjA2rXpv6Gw1CDAr7/rx9W0z7TZLgorICC4ucC6IL+5waa/zSCx17iywMwgwNa9wLTPtNkuCisgILTZwL3AuyDC/LDtx8+9yr3Dv8A6ICBodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy9jbGljazUuaHRtbAorCisgILTZwL0gw6XAuiDBuyC/wLehtcggw6XAuLfOILr2uri02bTCIFZpv6EgtOvH2CC02bfnsO0gwNbB9ri4LCC/qr3DIMPfw7XH0iC4uAorICDH1bTPtNk6CisgICAgICAgIExlYXJuaW5nIHRoZSBWaSBFZGl0b3IgLSBieSBMaW5kYSBMYW1iCisgICAgICAgIMPixse75zogTydSZWlsbHkgJiBBc3NvY2lhdGVzIEluYy4KKyAgVmm3ziDHz7DtIL3NwLogsMXAxyC48LXnILDNv6EgtOvH2CC+yyC89iDA1rTCIMHBwLogw6XA1LTPtNkuCisgIL+pvLi5+MKwILCzwaTGx8C6ILr2v6EgsPzH0SCzu7/rwLsgxvfH1MfPsO0gwNa9wLTPtNkuCisKKyAgwMwgsebA4sDMtMIgIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lc8DHIE1pY2hhZWwgQy4gUGllcmNlIL/NCisgIFJvYmVydCBLLiBXYXJlILChIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHnAxyBDaGFybGVzIFNtaXRoIMDHIL7GwMy18L7uv6EKKyAgwvi+yMfPv6kgvei9wLTPtNkuCisgIC4gIEUtbWFpbDogYndhcmVAbWluZXMuY29sb3JhZG8uZWR1LgorCisgIE1vZGlmaWVkIGZvciBWaW0gYnkgQnJhbSBNb29sZW5hYXIuCisKKyAgwMwgua68rcDHIMfRsbm+7iC59sD8v6EgsPzH0SC5rsDHtMIgtNnAvSC758DMxq63ziDH2MHWvcq9w7/ALgorICBodHRwOi8vd2lraS5rbGRwLm9yZy93aWtpLnBocC9WaW1UdXRvcktvCit+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+fn4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvdHV0b3Iua28udXRmLTggYi9ydW50aW1lL3R1dG9yL3R1dG9yLmtvLnV0Zi04Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OThjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmtvLnV0Zi04CkBAIC0wLDAgKzEsODEyIEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9ICAgIOu5lCDquLjsnqHsnbQgKFZJTSBUdXRvcikg7JeQIOyYpOyLoCDqsoPsnYQg7ZmY7JiB7ZWp64uI64ukICAgIC0gICAgICBWZXJzaW9uIDEuNSAgICAgID0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICDruZQoVmltKeydgCDsnbQg6ri47J6h7J207JeQ7IScIOuLpCDshKTrqoXtlaAg7IiYIOyXhuydhCDrp4ztgbwg66eO7J2AIOuqheugueydhCDqsIDsp4QKKyAgICAg66ek7JqwIOqwleugpe2VnCDtjrjsp5HquLDsnoXri4jri6QuIOydtCDquLjsnqHsnbTripQg67mU7J2EIOyJveqyjCDsoITsspztm4Qg7Y647KeR6riw66GcIOyCrOyaqe2VoAorICAgICDsiJgg7J6I64+E66GdIOy2qeu2hO2VnCDrqoXroLnsl5Ag64yA7ZW0IOyEpOuqhe2VmOqzoCDsnojsirXri4jri6QuCisKKyAgICAg7J20IOq4uOyeoeydtOulvCDrlrzripQg642w7JeQ64qUIOyLpOyKte2VmOuKlCDrjbDsl5Ag7Ja866eI64KYIOyLnOqwhOydhCDsk7DripQg6rCA7JeQIOuUsOudvOyEnAorICAgICAyNS0zMCDrtoQg7KCV64+E6rCAIOqxuOumveuLiOuLpC4KKworICAgICDsnbQg7Jew7Iq17JeQIO2PrO2VqOuQnCDrqoXroLnsnYAg64K07Jqp7J2EIOqzoOy5qeuLiOuLpC4g7J20IO2MjOydvOydmCDrs7Xsgqzrs7jsnYQg66eM65Ok7Ja07IScCisgICAgIOyXsOyKte2VmOyEuOyalC4gKHZpbXR1dG9yIOulvCDthrXtlbQg7Iuc7J6R7ZaI64uk66m0LCDsnbTrr7gg67O17IKs67O47J2EIOyCrOyaqe2VmOuKlAorICAgICDspJHsnoXri4jri6QuKQorCisgICAgIOykkeyalO2VnCDqsoPsnYAsIOydtCDquLjsnqHsnbTqsIAg7KeB7KCRIOyNqOuztOuptOyEnCDrsLDsmrDrj4TroZ0g6rOg66Ck65CY7Ja0IOyeiOuLpOuKlCDqsoPsnoXri4jri6QuCisgICAgIOuqheugueydhCDsoJzrjIDroZwg7J217Z6I66Ck66m0LCDsp4HsoJEg7Iuk7ZaJ7ZW067O064qUIOqyg+ydtCDtlYTsmpTtlanri4jri6QuIOuCtOyaqeydhCDsnb3ripQKKyAgICAg6rKD66eM7Jy866Gc64qULCDrqoXroLnsnYQg7J6K7Ja067KE66as6rKMIOuQoCDqsoPsnoXri4jri6QuCisKKyAgICAg7J6QIOydtOygnCwgQ2FwcyBMb2NrKFNoaWZ0LUxvY2spIO2CpOqwgCDriIzroKTsnojsp4Ag7JWK7J2A7KeAIO2ZleyduO2VtOuztOyLnOqzoCwgaiDtgqTrpbwKKyAgICAg7Lap67aE7Z6IIOuIjOufrOyEnCBMZXNzb24gMS4x7J20IO2ZlOuptOyXkCDqsIDrk50g7LCo64+E66GdIOybgOyngeyXrOu0heyLnOuLpC4KK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgTGVzc29uIDEuMTogIOy7pOyEnCDsm4Dsp4HsnbTquLAKKworICAgKiog7Luk7ISc66W8IOybgOyngeydtOugpOuptCwg7ZGc7Iuc65CcIOuMgOuhnCBoLGosayxsIO2CpOulvCDriITrpbTsi63si5zsmKQuICoqCisgICAgICAgICAgICAgXgorICAgICAgICAgICAgIGsgICAgICAgICAgICAgIO2ejO2KuDogIGgg7YKk64qUIOyZvOyqveyXkCDsnojsnLzrqbAsIOyZvOyqveycvOuhnCDsm4Dsp4HsnoXri4jri6QuCisgICAgICAgPCBoICAgICAgIGwgPiAgICAgICAgICAgICAgIGwg7YKk64qUIOyYpOuluOyqveyXkCDsnojsnLzrqbAsIOyYpOuluOyqveycvOuhnAorICAgICAgICAgICAgIGogICAgICAgICAgICAgICAgICAgICDsm4Dsp4HsnoXri4jri6QuCisgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAgIGog7YKk64qUIOyVhOuemOuwqe2WpSDtmZTsgrTtkZzsspjrn7wg7IOd6rK87Iq164uI64ukLgorCisgIDEuIOydteyIme2VtOyniCDrlYzquYzsp4Ag7Luk7ISc66W8IOyKpO2BrOumsCDsg4Hsl5DshJwg7JuA7KeB7JesIOuztOyLreyLnOyYpC4KKworICAyLiDslYTrnpgg67Cp7Zal7YKkIChqKeulvCDrsJjrs7XsnoXroKXsnbQg65CgIOuVjOq5jOyngCDriITrpbTqs6Ag6rOE7Iut7Iuc7JikLgorLS0tPiDsnbTsoJwg64uk7J2MIGxlc3NvbuycvOuhnCDqsIDripQg67Cp67KV7J2EIOyVjOqyjCDrkJjsl4jsirXri4jri6QuCisKKyAgMy4g7JWE656YIOuwqe2Wpe2CpOulvCDsnbTsmqntlZjsl6wsIExlc3NvbiAxLjIg66GcIOqwgOyLreyLnOyYpC4KKwor7LC46rOgOiDsm5DtlZjsp4Ag7JWK64qUIOustOyWuOqwgOqwgCDsnoXroKXsnbQg65CY7JeI64uk66m0LCA8RVNDPuulvCDriIzrn6zshJwsIOuqheuguSDrqqjrk5zroZwKKyAgICAgIOuPjOyVhOqwgOyLreyLnOyYpC4g6re4IO2bhOyXkCDsm5DtlZjripQg66qF66C57J2EIOuLpOyLnCDsnoXroKXtlZjsi63si5zsmKQuCisKK+ywuOqzoDog7Luk7ISc7YKkIOuYkO2VnCDsnpHrj5ntlaAg6rKD7J6F64uI64ukLiDtlZjsp4Drp4wgaGprbOyXkCDsnbXsiJntlbTsp4DrqbQsIOy7pOyEnO2CpOuztOuLpAorICAgICAg7Zuo7JSsIOu5oOultOqyjCDsnbTrj5ntlaAg7IiYIOyeiOydhCDqsoPsnoXri4jri6QuCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgTGVzc29uIDEuMjog67mU7J2EIOyLnOyeke2VmOqzoCDrgZ3rgrTquLAKKworCisgICEhIOyjvOydmDog7JWE656YIOyeiOuKlCDri6jqs4Trpbwg7Iuk7ZaJ7ZWY6riwIOyghOyXkCwg7J20IGxlc3NvbiDsoITssrTrpbwg7J297Jy87Iut7Iuc7JikISEKKworICAxLiA8RVNDPiDtgqTrpbwg64iM65+s7IScIO2ZleyLpO2VmOqyjCDrqoXroLkg66qo65Oc66GcIOu5oOyguCDrgpjsmLXri4jri6QuCisKKyAgMi4g64uk7J2M6rO8IOqwmeydtCDsnoXroKXtlanri4jri6Q6ICAgIDpxISA8RU5URVI+CisKKy0tLT4g7J2066CH6rKMIO2VmOuptCwg67CU64CQIOuCtOyaqeydhCAq7KCA7J6l7ZWY7KeAIOyViuqzoCog7Y647KeR6riw66W8IOu5oOyguOuCmOqwkeuLiOuLpC4KKyAgICAg7KCA7J6l7ZWcIO2bhCDruaDsoLjrgpjqsIDroKTrqbQg64uk7J2M6rO8IOqwmeydtCDsnoXroKXtlanri4jri6Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp3cSA8RU5URVI+CisKKyAgMy4g7ImYIO2UhOuhrO2UhO2KuOqwgCDrs7Tsnbjri6TrqbQsIOuLpOyLnCDquLjsnqHsnbTroZwg64+M7JWE7Jik6riwIOychO2VtCDri6TsnYzqs7wg6rCZ7J20CisgICAgIOyeheugpe2VqeuLiOuLpC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmltdHV0b3IgPEVOVEVSPgorICAgICDrmJDripQg64uk7J2M6rO8IOqwmeydhCDsiJjrj4Qg7J6I7Iq164uI64ukLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aW0gdHV0b3Iua28gPEVOVEVSPgorCistLS0+ICd2aW0nIOydgCDruZQg7Y647KeR6riw66GcIOuTpOyWtOqwgOuKlCDqsoPsnYQg65y77ZWY66mwLCAndHV0b3Iua28n64qUIO2OuOynke2VmOugpOuKlAorICAgICDtjIzsnbzsnYQg65y77ZWp64uI64ukLgorCisgIDQuIOychOyXkOyEnCDsnbTslbzquLDtlZwg64uo6rOE66W8IOq4sOyWte2VmOyYgOycvOupsCwg7ZmV7Iug7J20IOyEnOuptCwgMeyXkOyEnCAz6rmM7KeA66W8CisgICAgIOyImO2Wie2VmOyXrCDtjrjsp5HquLDrpbwg64KY6rCU64uk6rCAIOuLpOyLnCDrk6TslrTsmYDrs7Tsi63si5zsmKQuICDqt7gg7ZuEIOy7pOyEnOulvCDslYTrnpjroZwKKyAgICAg7JuA7KeB7JesIExlc3NvbiAxLjMg7Jy866GcIOqwgOyLreyLnOyYpC4KK35+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+fgorICAgICAgICAgICAgICAgICAgICAgTGVzc29uIDEuMzog7YWN7Iqk7Yq4IO2OuOynkSAtIOyngOyasOq4sAorCisKKyoqIOuqheuguSDrqqjrk5zsl5DshJwgICB4ICDrpbwg64iE66W066m0IOy7pOyEnOqwgCDsnITsuZjtlZwg6rOz7J2YIOq4gOyekOulvCDsp4Dsmrgg7IiYIOyeiOyKteuLiOuLpC4gKioKKworICAxLiAtLS0tPiDroZwg7ZGc7Iuc65CcIOqzs+ycvOuhnCDsu6TshJzrpbwg7Jiu6rKo67O07Iut7Iuc7JikLgorCisgIDIuIOyYpO2DgOulvCDsiJjsoJXtlZjquLAg7JyE7ZW0LCDsu6TshJzrpbwg7KeA7Jq4IOq4gOyekCDsnITroZwg7JuA7KeB7JesIOuztOyLreyLnOyYpC4KKworICAzLiB4ICDtgqTrpbwg64iM65+s7IScIOyngOybjOyVvO2VoCDquIDsnpDrpbwg7KeA7Jqw7Iut7Iuc7JikLgorCisgIDQuIDLsl5DshJwgNOq5jOyngOulvCDrsJjrs7XtlZjsl6wg66y47J6l7J20IOyYrOuwlOultOqyjCDrkJjrj4TroZ0g7ZWY7JesIOuztOyLreyLnOyYpC4KKworLS0tPiBUaGUgY2NvdyBqdW1wZWRkIG92dmVyciB0aGhlIG1vb29uLgorCisgIDUuIOusuOyepeydtCDsoJXtmZXtlbTsoYzri6TrqbQsIExlc3NvbiAxLjTroZwg6rCA7Iut7Iuc7JikLgorCivso7zsnZg6IOydtCDquLjsnqHsnbTrpbwg67O066m07IScIOyZuOyasOugpOqzoCDtlZjsp4Drp5Dqs6AsIOyngeygkSDsgqzsmqntlbTrs7TrqbTshJwg7J217Z6I6ri4CisgICAgICDrsJTrno3ri4jri6QuCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgTGVzc29uIDEuNDog7YWN7Iqk7Yq4IO2OuOynkSAtIOyCveyehSAoSU5TRVJUSU9OKQorCisgIAorICAgICAgICoqIOuqheuguSDrqqjrk5zsl5DshJwgICBpICDrpbwg64iE66W066m0IO2FjeyKpO2KuOulvCDsnoXroKXtlaAg7IiYIOyeiOyKteuLiOuLpC4gKioKKworICAxLiDsu6TshJzrpbwg7LKr67KI7Ke4IC0tLT4g66GcIO2RnOyLnOuQnCDspITroZwg7JuA7KeB7J6F64uI64ukLgorCisgIDIuIOyyq+uyiOynuCDspITsnYQg65GQ67KI7Ke4IOykhOqzvCDrmJHqsJnsnbQg66eM65Ok6rKD7J6F64uI64ukLiDthY3siqTtirjqsIAg65Ok7Ja06rCA7JW87ZWgCisgICAgIOqzsyDri6TsnYzrtoDthLAg7LKr67KI7Ke4IOq4gOyekCDsnITsl5Ag7Luk7ISc66W8IOyYruqyqCDrhpPsirXri4jri6QuCisKKyAgMy4gaSAg7YKk66W8IOuIhOuluCDtm4QsIO2VhOyalO2VnCDrgrTsmqnsnYQg7J6F66Cl7ZWp64uI64ukLgorCisgIDQuIOyImOygle2VnCDtm4Tsl5DripQgPEVTQz4g66W8IOuIjOufrOyEnCDrqoXroLkg66qo65Oc66GcIOuPjOyVhOqwkeuLiOuLpC4KKyAgICAg66y47J6l7J2EIOyYrOuwlOultOqyjCDrp4zrk6TquLAg7JyE7ZW0IDLsl5DshJwgNOydmCDqs7zsoJXsnYQg67CY67O17ZWp64uI64ukLgorCistLS0+IFRoZXJlIGlzIHRleHQgbWlzbmcgdGhpcyAuCistLS0+IFRoZXJlIGlzIHNvbWUgdGV4dCBtaXNzaW5nIGZyb20gdGhpcyBsaW5lLgorCisgIDUuIO2FjeyKpO2KuOulvCDsgr3snoXtlZjripQg642w7JeQIOydteyIme2VtOyhjOuLpOuptCwg7JqU7JW97J2EIOu0kOyjvOyLreyLnOyYpC4KKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRVNTT04gMSDsmpTslb0KKworCisgIDEuIOy7pOyEnOulvCDsm4Dsp4Hsnbwg65WM7JeQ64qUIO2ZlOyCtO2RnCDtgqTrgpggaGprbCDtgqTrpbwg7J207Jqp7ZWp64uI64ukLgorICAgICAgICAgaCAo7Jm87Kq9KSAgICAgICBqICjslYTrnpgpICAgICAgIGsgKOychCkgICAgICAgbCAo7Jik66W47Kq9KQorCisgIDIuIOyJmCDtlITroaztlITtirjsl5DshJwg67mU7J2EIOyLnOyeke2VmOugpOuptCB2aW0gRklMRU5BTUUgPEVOVEVSPgorCisgIDMuIOyImOygle2VnCDrgrTsmqnsnYQg66y07Iuc7ZWcIOyxhOuhnCDruZTsl5DshJwg67mg7KC464KY6rCA66Ck66m0ICAgPEVTQz4gICA6cSEgICA8RU5URVI+CisgICAgICAgICAgICAgICAgICAgICDsoIDsnqXtlZwg7ZuEIOu5lOyXkOyEnCDruaDsoLjrgpjqsIDroKTrqbQgICA8RVNDPiAgIDp3cSAgIDxFTlRFUj4KKworICA0LiDrqoXroLkg66qo65Oc7JeQ7IScIOy7pOyEnOqwgCDsnITsuZjtlZwg6rOz7J2YIOq4gOyekOulvCDsp4DsmrDroKTrqbQgICB4ICDrpbwg7J6F66Cl7ZWp64uI64ukLgorCisgIDUuIOuqheuguSDrqqjrk5zsl5DshJwg7Luk7ISc6rCAIOychOy5mO2VnCDqs7Psl5Ag7YWN7Iqk7Yq466W8IOyCveyehe2VmOugpOuptAorICAgICAgICAgaSAgIOulvCDriITrpbgg7ZuEIO2FjeyKpO2KuOulvCDsnoXroKXtlZjqs6AgIDxFU0M+IOulvCDriITrpoXri4jri6QuCisKK+ywuOqzoDogPEVTQz7ripQg66qF66C5IOuqqOuTnOuhnCDrj4zslYTqsIDripQg642wIOyTsOupsCwg7JuQ7LmYIOyViuuKlCDrqoXroLnsnbTrgpgg7JmE7KCE7Z6IIOyeheugpeuQmOyngAorICAgICAg7JWK7J2AIOuqheugueydhCDst6jshoztlZjripQg642w7JeQ64+EIOyUgeuLiOuLpC4KKwor6re465+8IExlc3NvbiAy66W8IOyLnOyeke2VqeyLnOuLpC4KKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICBMZXNzb24gMi4xOiDsgq3soJwoREVMRVRJT04pIOuqheuguQorCisKKyAgICAgICAgICAgICoqIO2VnCDri6jslrTrpbwg64Gd6rmM7KeAIOyngOyasOugpOuptCAgZHcgIOudvOqzoCDsuZjrqbQg65Cp64uI64ukLiAqKgorCisgIDEuIDxFU0M+IO2CpOulvCDriIzrn6zshJwg7ZmV7Iuk7ZWY6rKMIOuqheuguSDrqqjrk5zroZwg67mg7KC4IOuCmOyYteuLiOuLpC4KKworICAyLiDslYTrnpjsl5AgLS0tPiDroZwg7ZGc7Iuc65CcIOykhCDquYzsp4Ag7Luk7ISc66W8IOyYruq5geuLiOuLpC4KKworICAzLiDsp4Dsm4zslbztlaAg64uo7Ja07J2YIOyymOydjOycvOuhnCDsu6TshJzrpbwg7Jiu6rmB64uI64ukLgorCisgIDQuIGR3ICDrnbzqs6Ag7LOQ7IScIOq3uCDri6jslrTrpbwg7KeA7JuB64uI64ukLgorCisgIOyjvOydmDog7JyE7JeQ7IScIOunkO2VnOuMgOuhnCDtlZjrqbQg7ZmU66m07J2YIOuniOyngOuniSDspITsl5AgZHcg652864qUIOq4gOyekOqwgCDtkZzsi5zrkKnri4jri6QuCisgICAgICAgIOyemOuquyDss6Tri6TrqbQsICA8RVNDPiDrpbwg64iM65+s7IScIOuLpOyLnCDsi5zsnpHtlZjsi63si5zsmKQuCisKKy0tLT4gVGhlcmUgYXJlIGEgc29tZSB3b3JkcyBmdW4gdGhhdCBkb24ndCBiZWxvbmcgcGFwZXIgaW4gdGhpcyBzZW50ZW5jZS4KKworICA1LiAzLCA067KIIOqzvOygleydhCDri6Tsi5wg7ZWY7JesIOusuOyepeydhCDsoJXtmZXtlZjqsowg66eM65OgIOuSpCBMZXNzb24gMi4y66GcIOqwgOyLreyLnOyYpC4KKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgIExlc3NvbiAyLjI6IOuLpOuluCDsgq3soJwg66qF66C5CisKKyAgICAgICAgICAgICAgKiogIGQkIOudvOqzoCDsuZjrqbQg6re4IOykhCDrgZ3quYzsp4Ag7KeA7JuM7KeR64uI64ukLiAqKgorCisgIDEuIDxFU0M+IO2CpOulvCDriIzrn6zshJwg7ZmV7Iuk7ZWY6rKMIOuqheuguSDrqqjrk5zroZwg67mg7KC4IOuCmOyYteuLiOuLpC4KKworICAyLiDslYTrnpjsl5AgLS0tPiDroZwg7ZGc7Iuc65CcIOykhCDquYzsp4Ag7Luk7ISc66W8IOyYruq5geuLiOuLpC4KKworICAzLiDsmKzrsJTrpbgg7KSE7J2YIOuBneycvOuhnCDsu6TshJzrpbwg7Jiu6rmB64uI64ukLiAo7LKr67KI7Ke466GcIOuCmOyYpOuKlCAuIOuLpOydjOyeheuLiOuLpC4pCisKKyAgNC4gZCQgIOudvOqzoCDss5DshJwg7KSEIOuBneq5jOyngCDsp4Dsm4Hri4jri6QuCisKKy0tLT4gU29tZWJvZHkgdHlwZWQgdGhlIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuCisKKworICA1LiDslrTrlqQg7J287J20IOydvOyWtOuCrOuKlOyngCDsnbTtlbTtlZjquLAg7JyE7ZW0IExlc3NvbiAyLjMg7Jy866GcIOqwgOyLreyLnOyYpC4KKworCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgIExlc3NvbiAyLjM6IOuqheugueqzvCDsoIHsmqkg64yA7IOB7JeQIOuMgO2VtAorCisKKyAg7IKt7KCcIOuqheuguSBk7J2YIO2YleyLneydgCDri6TsnYzqs7wg6rCZ7Iq164uI64ukLgorCisgICAgICAgICBb7Zqf7IiYXSAgIGQgICDrjIDsg4EgICAgICDrmJDripQgICAgICBkICAgW+2an+yImF0gICDrjIDsg4EKKyAg7Jes6riw7IScCisgICAg7Zqf7IiYIC0g66qF66C57J2EIOuqhyDrsogg7IiY7ZaJ7ZWgIOyngCAo7Ji17IWYLCDquLDrs7jqsJI9MSkuCisgICAgZCAgICAtIOyngOyasOuKlCDrqoXroLkKKyAgICDrjIDsg4EgLSDslYTrnpjsl5Ag7KCc7Iuc65CcIOuMgOyDgeyXkCDrjIDtlbQg66qF66C57J2EIOyImO2WiQorCisgIOyggeyaqSDqsIDriqXtlZwg64yA7IOB7J2YIOyiheulmDoKKyAgICB3IC0g7Luk7ISc7JeQ7IScIOq3uCDri6jslrTsnZgg64Gd6rmM7KeAICjqs7XrsLEg7Y+s7ZWoLikKKyAgICBlIC0g7Luk7ISc7JeQ7IScIOq3uCDri6jslrTsnZgg64Gd6rmM7KeAICjqs7XrsLHsnYQg7Y+s7ZWo7ZWY7KeAIOyViuydjC4pCisgICAgJCAtIOy7pOyEnOyXkOyEnCDqt7gg7KSE7J2YIOuBneq5jOyngAorCivssLjqs6A6ICDtmLjquLDsi6zsnbQg7J6I64uk66m0LCDrqoXroLkg66qo65Oc7JeQ7IScIOuqheuguSDsl4bsnbQg64yA7IOB7J2EIOyeheugpe2VtOuztOyLreyLnOyYpC4KKyAgICAgICDsnITsl5DshJwg7J207JW86riw7ZWcIOuMgOyDgeydmCDrqqnroZ3sl5Ag65Sw6528IOy7pOyEnOqwgCDsm4Dsp4HsnbTqsowg65Cp64uI64ukLgorCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgTGVzc29uIDIuNDogJ+uqheuguS3rjIDsg4EnIOyXkCDrjIDtlZwg7JiI7Jm4CisKKworICAgICAgICAgICAgICAgKiogIGRkICDrnbzqs6Ag7LmY66m0IOykhCDsoITssrTrpbwg7KeA7JuB64uI64ukLiAqKgorCisgIOykhCDsoITssrTrpbwg7KeA7Jqw64qUIOydvOydtCDsnqbquLAg65WM66y47JeQLCBWaeulvCDrlJTsnpDsnbgg7ZWcIOyCrOuejOuTpOydgCwg6rCE64uo7Z6IIGTrpbwKKyAg65GQ67KIIOyXsOuLrOyVhCDsuZjrqbQg7ZWcIOykhOydhCDsp4Dsmrgg7IiYIOyeiOuPhOuhnSDtlZjsmIDsirXri4jri6QuCisKKyAgMS4g7Luk7ISc66W8IOyVhOuemCDrgpjsmKgg64uo65297J2YIOuRkOuyiOynuCDspITroZwg6rCA7KC46rCA7Iut7Iuc7JikLgorICAyLiBkZCDrpbwg7J6F66Cl7ZWY7JesIOq3uCDspITsnYQg7KeA7Jqw7Iut7Iuc7JikLgorICAzLiDqt7jrn7Ag64uk7J2MIOuEpOuyiOynuCDspITroZwg6rCA7Iut7Iuc7JikLgorICA0LiAyZGQg65286rOgIOyeheugpe2VmOyXrCDrkZDspITsnYQg7KeA7JuB64uI64ukLiAoIO2an+yImC3rqoXroLkt64yA7IOB7J2EIOq4sOyWte2VmOyEuOyalC4gKQorCisgICAgICAxKSAgUm9zZXMgYXJlIHJlZCwKKyAgICAgIDIpICBNdWQgaXMgZnVuLAorICAgICAgMykgIFZpb2xldHMgYXJlIGJsdWUsCisgICAgICA0KSAgSSBoYXZlIGEgY2FyLAorICAgICAgNSkgIENsb2NrcyB0ZWxsIHRpbWUsCisgICAgICA2KSAgU3VnYXIgaXMgc3dlZXQKKyAgICAgIDcpICBBbmQgc28gYXJlIHlvdS4KKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgICBMZXNzb24gMi41OiDst6jshowoVU5ETykg66qF66C5CisKKworICAgKiogIHUgIOulvCDriITrpbTrqbQg66eI7KeA66eJIOuqheugueydtCDst6jshozrkJjrqbAsICBVIOuKlCDspIQg7KCE7LK066W8IOyImOygle2VqeuLiOuLpC4gKioKKworICAxLiDsu6TshJzrpbwgLS0tPiDroZwg7ZGc7Iuc65CcIOykhOuhnCDsnbTrj5ntlZwg7ZuEIOyyq+uyiOynuCDsnpjrqrvrkJwg67aA67aEIOychOuhnCDsmK7quYHri4jri6QuCisgIDIuICB4ICDrpbwg7J6F66Cl7ZWY7JesIOyyq+uyiOynuCDsnpjrqrvrkJwg6riA7J6Q66W8IOyngOybgeuLiOuLpC4KKyAgMy4g6re465+8IOydtOygnCAgdSDrpbwg7J6F66Cl7ZWY7JesIOuniOyngOunieycvOuhnCDsiJjtlonrkJwg66qF66C57J2EIOy3qOyGjO2VqeuLiOuLpC4KKyAgNC4g7J2067KI7JeQ64qUICB4ICDrqoXroLnsnYQg7J207Jqp7ZWY7JesIOq3uCDspITsnZgg66qo65OgIOyXkOufrOulvCDsiJjsoJXtlbTrtIXsi5zri6QuCisgIDUuIOuMgOusuOyekCAgVSAg66W8IOuIjOufrOyEnCDqt7gg7KSE7J2EIOybkOuemCDsg4Htg5zroZwg64+M66Ck64aT7JWEIOuztOyLreyLnOyYpC4KKyAgNi4g7J2067KI7JeQ64qUICB1IOulvCDrqocg67KIIOuIjOufrOyEnCAgVSDsmYAg7J207KCEIOuqheugueydhCDst6jshoztlbTrtIXsi5zri6QuCisgIDcuIENUUkwtUiAoQ1RSTCDtgqTrpbwg64iE66W4IOyDge2DnOyXkOyEnCBS7J2EIOuIhOultOuKlCDqsoMpIOydhCDrqocg67KIIOuIjOufrOyEnAorICAgICDrqoXroLnsnYQg64uk7IucIOyLpO2Wie2VtOu0heyLnOuLpC4gKOy3qOyGjO2VnCDqsoPsnYQg7Leo7IaM7ZWoLikKKworLS0tPiBGaWl4IHRoZSBlcnJvcnMgb29uIHRoaGlzIGxpbmUgYW5kIHJlZXBsYWNlIHRoZW0gd2l0dGggdW5kby4KKworICA4LiDsnbQg66qF66C57J2AIOunpOyasCDsnKDsmqntlanri4jri6QuICDqt7jrn7wgTGVzc29uIDIg7JqU7JW97Jy866GcIOuEmOyWtOqwgOuPhOuhnSDtlansi5zri6QuCisKKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFU1NPTiAyIOyalOyVvQorCisKKyAgMS4g7Luk7ISc6rCAIOychOy5mO2VnCDqs7PrtoDthLAg64uo7Ja07J2YIOuBneq5jOyngCDsp4DsmrDroKTrqbQ6ICAgIGR3CisKKyAgMi4g7Luk7ISc6rCAIOychOy5mO2VnCDqs7PrtoDthLAg7KSEIOuBneq5jOyngCDsp4DsmrDroKTrqbQ6ICAgIGQkCisKKyAgMy4g7KSEIOyghOyytOulvCDsp4DsmrDroKTrqbQ6ICAgIGRkCisKKyAgNC4g66qF66C5IOuqqOuTnOyXkOyEnCDrgrTrpqzripQg66qF66C57J2YIO2YleyLneydgCDri6TsnYzqs7wg6rCZ7Iq164uI64ukOgorCisgICAgICAgW+2an+yImF0gICDrqoXroLkgICDrjIDsg4EgICAg65iQ64qUICAgIOuqheuguSAgIFvtmp/siJhdICAg64yA7IOBCisgICAgIOyXrOq4sOyEnDoKKyAgICAgICDtmp/siJggLSDqt7gg66qF66C57J2EIOuqhyDrsogg67CY67O17ZWgIOqyg+yduOqwgAorICAgICAgIOuqheuguSAtIOyWtOuWpCDrqoXroLnsnYQg64K066a0IOqyg+yduOqwgCAoIOyYiOulvCDrk6TslrQsIOyCreygnOyduCDqsr3smrDripQgZCApCisgICAgICAg64yA7IOBIC0g66qF66C57J20IOuPmeyeke2VoCDrjIDsg4EsIOyYiOulvCDrk6TslrQgdyAo64uo7Ja0KSwgJCAo7KSE7J2YIOuBnSkg65OxLgorCisgIDUuIOydtOyghCDtlonrj5nsnYQg7Leo7IaM7ZWY66Ck66m0OiAgICAgICAgICAgICAgICAgdSAgICjshozrrLjsnpAgdSkKKyAgICAg7ZWcIOykhOyXkOyEnCDsiJjsoJXtlZwg6rKD7J2EIOuqqOuRkCDst6jshoztlZjroKTrqbQ6ICBVICAgKOuMgOusuOyekCBVKQorICAgICDst6jshoztlZwg6rKD7J2EIOuLpOyLnCDsi6TtlontlZjroKTrqbQ6ICAgICAgICAgICAgQ1RSTC1SCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgTGVzc29uIDMuMTog67aZ7J206riwKFBVVCkg66qF66C5CisKKworICAgICAgKiogIHAg66W8IOyeheugpe2VmOyXrCDrp4jsp4Drp4nsnLzroZwg7KeA7Jq0IOuCtOyaqeydhCDsu6TshJwg65Kk7JeQIOu2meyeheuLiOuLpC4gKioKKworICAxLiDslYTrnpjsl5Ag7J6I64qUIOusuOuLqOydmCDssqsg7KSE66GcIOy7pOyEnOulvCDsm4Dsp4HsnbTsi63si5zsmKQuCisKKyAgMi4gIGRkICDrpbwg7J6F66Cl7ZWY7JesIOq3uCDspITsnYQg7KeA7JuM7IScIOu5lOydmCDrsoTtjbzsl5Ag7KCA7J6l7ZWp64uI64ukLgorCisgIDMuIOyVhOq5jCDsp4DsmrQg7KSE7J20IOqwgOyVvO2VoCDsnITsuZjsnZggKuycl+ykhOuhnCog7Luk7ISc66W8IOyYruq5geuLiOuLpC4KKworICA0LiDrqoXroLkg66qo65Oc7JeQ7IScLCAgcCAg66W8IOyeheugpe2VmOyXrCDqt7gg7KSE7J2EIOygnOuMgOuhnCDrkJwg7J6Q66as66GcIOyYruq5geuLiOuLpC4KKworICA1LiAy7JeQ7IScIDTrpbwg67CY67O17ZWY7JesIOuqqOuToCDspITsnZgg7Iic7ISc66W8IOuwlOuhnCDsnqHsnLzsi63si5zsmKQuCisKKyAgICAgZCkgQ2FuIHlvdSBsZWFybiB0b28/CisgICAgIGIpIFZpb2xldHMgYXJlIGJsdWUsCisgICAgIGMpIEludGVsbGlnZW5jZSBpcyBsZWFybmVkLAorICAgICBhKSBSb3NlcyBhcmUgcmVkLAorCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgICAgICBMZXNzb24gMy4yOiDsuZjtmZgoUkVQTEFDRSkg66qF66C5CisKKworICAqKiDsu6TshJwg7JWE656Y7J2YIOq4gOyekCDtlZjrgpjrpbwg67CU6r6466Ck66m0LCByIOydhCDriITrpbgg7ZuEIOuwlOq/gCDquIDsnpDrpbwg7J6F66Cl7ZWp64uI64ukLiAqKgorCisgIDEuIOy7pOyEnOulvCAtLS0+IOuhnCDtkZzsi5zrkJwg7LKrIOykhOuhnCDsmK7quYHri4jri6QuCisKKyAgMi4g7Luk7ISc66W8IOyemOuqu+uQnCDssqsg67aA67aE7Jy866GcIOyYruq5geuLiOuLpC4KKworICAzLiAgciAg7J2EIOuIhOuluCDtm4QsIOyemOuqu+uQnCDrtoDrtoTsnYQg6rOg7LOQIOyTuCDquIDsnpDrpbwg7J6F66Cl7ZWp64uI64ukLgorCisgIDQuIDLsl5DshJwgM+ydmCDqs7zsoJXsnYQg67CY67O17ZWY7JesLCDssqsg7KSE7J2YIOyYpOulmOulvCDsiJjsoJXtlZjsi63si5zsmKQuCisKKy0tLT4gIFdoYW4gdGhpcyBsaW1lIHdhcyB0dW9lZCBpbiwgc29tZW9uZSBwcmVzc3dkIHNvbWUgd3Jvamcga2V5cyEKKy0tLT4gIFdoZW4gdGhpcyBsaW5lIHdhcyB0eXBlZCBpbiwgc29tZW9uZSBwcmVzc2VkIHNvbWUgd3Jvbmcga2V5cyEKKworICA1LiBMZXNzb24gMy4yIOuhnCDsnbTrj5ntlansi5zri6QuCisKK+yjvOydmDog7Jm47Jqw7KeAIOunkOqzoCwg7KeB7KCRIO2VtOuztOuptOyEnCDsnbXtmIDslbwg7ZWc64uk64qUIOqyg+ydhCDsnorsp4Ag66eI7Iut7Iuc7JikLgorCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgICAgICBMZXNzb24gMy4zOiDrs4DtmZgoQ0hBTkdFKSDrqoXroLkKKworCisgICAgICAgICAgICoqIO2VnCDri6jslrTsnZgg7J2867aA64KYIOyghOyytOulvCDrsJTqvrjroKTrqbQsICBjdyAg66W8IOy5mOyLreyLnOyYpC4gKioKKworICAxLiDsu6TshJzrpbwgLS0tPiDroZwg7ZGc7Iuc65CcIOyyq+ykhOuhnCDsmK7quYHri4jri6QuCisKKyAgMi4g7Luk7ISc66W8IGx1Yncg7JeQ7IScIHUg7JyE7JeQIOyYrOugpOuGk+yKteuLiOuLpC4KKworICAzLiBjdyDrnbzqs6Ag66qF66C57ZWcIO2bhCDri6jslrTrpbwg7KCV7ZmV7ZWY6rKMIOyImOygle2VqeuLiOuLpC4gKOydtCDqsr3smrAsICAnaW5lJyDrpbwg7Lmp64uI64ukLikKKworICA0LiA8RVNDPiDrpbwg64iE66W4IO2bhCDri6TsnYwg7JeQ65+s66GcIOqwkeuLiOuLpCAo7IiY7KCV65CY7Ja07JW87ZWgIOyyqyDquIDsnpDroZwg6rCR64uI64ukLikKKworICA1LiAz7JeQ7IScIDTsnZgg6rO87KCV7J2EIOuwmOuzte2VmOyXrCDssqvrsojsp7gg66y47J6l7J2EIOuRkOuyiOynuCDrrLjsnqXqs7wg6rCZ64+E66GdIOunjOuTreuLiOuLpC4KKworLS0tPiBUaGlzIGx1YncgaGFzIGEgZmV3IHdwdGZkIHRoYXQgbXJyZiBjaGFuZ2luZyB1c2YgdGhlIGNoYW5nZSBjb21tYW5kLgorLS0tPiBUaGlzIGxpbmUgaGFzIGEgZmV3IHdvcmRzIHRoYXQgbmVlZCBjaGFuZ2luZyB1c2luZyB0aGUgY2hhbmdlIGNvbW1hbmQuCisKK2N3IOuKlCDri6jslrTrpbwg7LmY7ZmY7ZWY64qUIOqygyDrv5Drp4wg7JWE64uI6528LCDrgrTsmqnsnYQg7IK97J6F7ZWgIOyImCDsnojrj4TroZ0g7ZWc64uk64qUIOqyg+yXkAor7KO87J2Y7ZWp7Iuc64ukLgorCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgICAgIExlc3NvbiAzLjQ6IGMg66W8IOydtOyaqe2VnCDri6Trpbgg67OA7ZmYIOuqheuguQorCisKKyAgICAgKiog67OA7ZmYIOuqheugueydgCDsgq3soJztlaAg65WMIOydtOyaqe2VnCDrjIDsg4Hsl5Ag64yA7ZW0IOyggeyaqe2VoCDsiJgg7J6I7Iq164uI64ukLiAqKgorCisgIDEuIOuzgO2ZmCDrqoXroLnsnYAg7IKt7KCc7JmAIOuPmeydvO2VnCDrsKnsi53snLzroZwg64+Z7J6R7ZWp64uI64ukLiDtmJXsi53snYAg64uk7J2M6rO8IOqwmeyKteuLiOuLpDoKKworICAgICAgIFvtmp/siJhdICAgYyAgIOuMgOyDgSAgICAgIOuYkOuKlCAgICAgICBjICAgW+2an+yImF0gICDrjIDsg4EKKworICAyLiDsoIHsmqkg6rCA64ql7ZWcIOuMgOyDgSDsl63si5wg6rCZ7Iq164uI64ukLiAgdyAo64uo7Ja0KSwgICQgKOykhOydmCDrgZ0pIOuTseydtCDsnojsirXri4jri6QuCisKKyAgMy4gLS0tPiDroZwg7ZGc7Iuc65CcIOyyq+ykhOuhnCDsnbTrj5ntlanri4jri6QuCisKKyAgNC4g7LKrIOyXkOufrCDsnITroZwg7Luk7ISc66W8IOyYruq5geuLiOuLpC4KKworICA1LiBjJCDrpbwg7J6F66Cl7ZWY7JesLCDqt7gg7KSE7J2YIOuCmOuouOyngOqwgCDrkZDrsojsp7gg7KSE7LKY65+8IOuQmOuPhOuhnSDsiJjsoJXtlZwg7ZuEIDxFU0M+IOulvAorICAgICDriITrpbTsi63si5zsmKQuCisKKy0tLT4gVGhlIGVuZCBvZiB0aGlzIGxpbmUgbmVlZHMgc29tZSBoZWxwIHRvIG1ha2UgaXQgbGlrZSB0aGUgc2Vjb25kLgorLS0tPiBUaGUgZW5kIG9mIHRoaXMgbGluZSBuZWVkcyB0byBiZSBjb3JyZWN0ZWQgdXNpbmcgdGhlICBjJCAgY29tbWFuZC4KKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFU1NPTiAzIOyalOyVvQorCisKKyAgMS4g7J2066+4IOyngOyatCDrgrTsmqnsnYQg65CY64+M66as66Ck66m0LCAgcCAg66W8IOuIhOultOyLreyLnOyYpC4g7J20IOuqheugueydgCDsu6TshJwgKuuLpOydjOyXkCoKKyAgICAg7KeA7JuM7KeEIOuCtOyaqeydhCDrtpnsnoXri4jri6QoUFVUKS4gKO2VnCDspITsnYQg7KeA7Jq0IOqyveyasOyXkOuKlCDsu6TshJwg64uk7J2MIOykhOyXkAorICAgICDsp4Dsm4zsp4Qg64K07Jqp7J20IOu2meyKteuLiOuLpC4pCisKKyAgMi4g7Luk7IScIOyVhOuemOydmCDquIDsnpDrpbwg7LmY7ZmY7ZWY66Ck66m0KFJFUExBQ0UpLCAgciAg7J2EIOuIhOuluCDtm4Qg7JuQ656YIOq4gOyekCDrjIDsi6AKKyAgICAg67CU6r647Ja0IOuEo+ydhCDquIDsnpDrpbwg7J6F66Cl7ZWp64uI64ukLgorCisgIDMuIOuzgO2ZmCDrqoXroLkoQ0hBTkdFKeydgCDsu6TshJzsl5DshJwg67aA7YSwIOyngOygle2VnCDrjIDsg4HsnZgg64Gd6rmM7KeAIOuwlOq/gCDsiJgg7J6I64qUCisgICAgIOuqheugueyeheuLiOuLpC4g7JiI66W8IOuTpOyWtCwg7Luk7IScIOychOy5mOyXkOyEnCDri6jslrTsnZgg64Gd6rmM7KeAIOuwlOq+uOugpOuptCwgIGN3ICDrpbwKKyAgICAg7J6F66Cl7ZWY66m0IOuQmOupsCwgIGMkICDripQg7KSEIOuBneq5jOyngCDrsJTqvrjripQg642wIOyTsOyeheuLiOuLpC4KKworICA0LiDrs4DtmZgg66qF66C57J2YIO2YleyLneydgCDri6TsnYzqs7wg6rCZ7Iq164uI64ukOgorCisgICAgICAgICBb7Zqf7IiYXSAgIGMgICDrjIDsg4EgICAgICAg65iQ64qUICAgICAgIGMgICBb7Zqf7IiYXSAgIOuMgOyDgQorCivqs4Tsho3tlbTshJwg64uk7J2MIExlc3NvbiDsnYQg7KeE7ZaJ7ZWp7Iuc64ukLgorCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgICBMZXNzb24gNC4xOiDsnITsuZjsmYAg7YyM7J287J2YIOyDge2DnAorCisKKyAgKiogIENUUkwtZyDrpbwg64iE66W066m0IO2MjOydvCDrgrTsl5DshJzsnZgg7ZiE7J6sIOychOy5mOyZgCDtjIzsnbzsnZgg7IOB7YOc66W8IOuzvCDsiJgg7J6I7Iq164uI64ukLgorICAgICAgU0hJRlQtRyDrpbwg64iE66W066m0IO2MjOydvCDrgrTsnZgg7KSE66GcIOydtOuPme2VqeuLiOuLpC4gKioKKworICDso7zsnZg6IOyVhOuemOydmCDri6jqs4Trpbwg65Sw65287ZWY6riwIOyghOyXkCwg7J20IExlc3NvbiDsoITssrTrpbwg66i87KCAIOydveycvOyLreyLnOyYpC4KKworICAxLiBDVFJMIO2CpOulvCDriITrpbgg7IOB7YOc7JeQ7IScIGcg66W8IOuIhOumheuLiOuLpC4g7YyM7J28IOydtOumhOqzvCDtmITsnqwg7JyE7LmY7ZWcIOykhOydtAorICAgICDtkZzsi5zrkJwg7IOB7YOc7KSE7J20IO2ZlOuptCDslYTrnpjsl5Ag7ZGc7Iuc65CgIOqyg+yeheuLiOuLpC4gM+uyiOynuCDri6jqs4Trpbwg7JyE7ZW0IOq3uAorICAgICDspIQg67KI7Zi466W8IOq4sOyWte2VmOqzoCDqs4Tsi63si5zsmKQuCisKKyAgMi4gU0hJRlQtRyDrpbwg64iE66W066m0IO2MjOydvOydmCDrp4jsp4Drp4nsnLzroZwg7J2064+Z7ZWp64uI64ukLgorCisgIDMuIOyVhOq5jCDquLDslrXtlojrjZgg7KSEIOuyiO2YuOulvCDsnoXroKXtlZwg7ZuEIFNISUZULUcg66W8IOuIhOultOyLreyLnOyYpC4g7J2066CH6rKMIO2VmOuptAorICAgICDsspjsnYzsl5AgQ1RSTC1nIOulvCDriIzroIDrjZgg7J6l7IaM66GcIOuQmOuPjOyVhOqwgOqyjCDrkKAg6rKD7J6F64uI64ukLgorICAgICAo67KI7Zi466W8IOyeheugpe2VoCDrlYwsIOydtOqyg+ydgCDtmZTrqbTsl5Ag7ZGc7Iuc65CY7KeAIOyViuyKteuLiOuLpC4pCisKKyAgNC4g7J6Q7Iug7J20IOyDneqyvOuLpOuptCwgMeyXkOyEnCAz6rmM7KeA66W8IOyLpO2Wie2VtOuztOyLreyLnOyYpC4KKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgTGVzc29uIDQuMjog7LC+6riwIOuqheuguQorCisKKyAgICAgICAgICAgICAgKiogIC8gIOulvCDriITrpbgg7ZuEIOqygOyDie2VoCDrrLjqtazrpbwg7J6F66Cl7ZWY7Iut7Iuc7JikLiAqKgorCisgIDEuIOuqheuguSDrqqjrk5zsl5DshJwgIC8gIOulvCDsnoXroKXtlZjsi63si5zsmKQuICA6IOuqheugueyXkOyEnOyZgCDrp4jssKzqsIDsp4DroZwsICDtmZTrqbQg7JWE656Y7JeQCisgICAgIC8g7JmAIOy7pOyEnOqwgCDtkZzsi5zrkKAg6rKD7J6F64uI64ukLgorCisgIDIuICdlcnJyb29yJyDrnbzqs6Ag7LmcIO2bhCA8RU5URVI+IOulvCDsuZjsi63si5zsmKQuIOydtCDri6jslrTrpbwg7LC+7Jy866Ck6rOgIO2VqeuLiOuLpC4KKworICAzLiDqsJnsnYAg66y46rWs66W8IOuLpOyLnCDssL7snLzroKTrqbQsIOqwhOuLqO2eiCAgbiAg7J2EIOyeheugpe2VmOyLreyLnOyYpC4KKyAgICAg6rCZ7J2AIOusuOq1rOulvCDrsJjrjIAg67Cp7Zal7Jy866GcIOywvuycvOugpOuptCwgIFNoaWZ0LU4g7J2EIOyeheugpe2VmOyLreyLnOyYpC4KKworICA0LiDrrLjqtazrpbwg7Jet67Cp7Zal7Jy866GcIOywvuycvOugpOuptCwgIC8gIOuMgOyLoCAgPyDrpbwg7J207Jqp7ZWY66m0IOuQqeuLiOuLpC4KKworLS0tPiAiZXJycm9vciIgaXMgbm90IHRoZSB3YXkgdG8gc3BlbGwgZXJyb3I7ICBlcnJyb29yIGlzIGFuIGVycm9yLgorCivssLjqs6A6IOywvuuKlCDspJHsl5Ag7YyM7J287J2YIOuBneyXkCDri6Tri6TrpbTqsowg65CY66m0LCDtjIzsnbzsnZgg7LKY7J2M67aA7YSwIOuLpOyLnCDssL7qsowg65Cp64uI64ukLgorCisKK35+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+fgorICAgICAgICAgICAgICAgICAgIExlc3NvbiA0LjM6IOq0hO2YuOydmCDsp50g7LC+6riwCisKKworICAgICAgICAgICAgICAqKiAlICDrpbwg64iM65+s7IScICApLCBdLCB9IOydmCDsp53snYQg7LC+7Iq164uI64ukLiAqKgorCisgIDEuIOy7pOyEnOulvCAtLS0+IOuhnCDtkZzsi5zrkJwg7KSE7J2YICgsIFssIHsg7KSRIO2VmOuCmOyXkCDqsIDsoLjri6Qg64aT7Iq164uI64ukLgorCisgIDIuICAlIOulvCDsnoXroKXtlbQg67SF7Iuc64ukLgorCisgIDMuIOy7pOyEnOqwgCDsp53snbQg66ee64qUIOq0hO2YuOuhnCDsnbTrj5ntlaAg6rKD7J6F64uI64ukLgorCisgIDQuICAlIOulvCDsnoXroKXtlZjsl6wsIOydtOyghCDqtITtmLjroZwg65CY64+M7JWEIOyYteyLnOuLpC4KKworLS0tPiBUaGlzICggaXMgYSB0ZXN0IGxpbmUgd2l0aCAoJ3MsIFsncyBdIGFuZCB7J3MgfSBpbiBpdC4gKSkKKwor7LC46rOgOiDsp53snbQg66ee7KeAIOyViuuKlCDqtITtmLjqsIAg7J6I64qUIO2UhOuhnOq3uOueqOydhCDrlJTrsoTquYXtlaAg65WM7JeQIOunpOyasCDsnKDsmqntlanri4jri6QhCisKKworCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICBMZXNzb24gNC40OiDsl5Drn6zrpbwg7IiY7KCV7ZWY64qUIOuwqeuylQorCisKKyAgICAgKiogIDpzL29sZC9uZXcvZyAg7ZWY66m0ICdvbGQnIOulvCAgJ25ldycg66GcIOy5mO2ZmChTVUJUSVRVVEUp7ZWp64uI64ukLiAqKgorCisgIDEuIOy7pOyEnOulvCAtLS0+IOuhnCDtkZzsi5zrkJwg7KSE7JeQIOqwgOyguOuLpCDrhpPsirXri4jri6QuCisKKyAgMi4gIDpzL3RoZWUvdGhlIOulvCDsnoXroKXtlZwg7ZuEIDxFTlRFUj4g66W8IOy5qeuLiOuLpC4gIOydtCDrqoXroLnsnYAg6re4IOykhOyXkOyEnAorICAgICDsspjsnYzsnLzroZwg67Cc6rKs65CcIOqyg+unjCDrsJTqvrzri6TripQg6rKD7JeQIOyjvOydmO2VmOyLreyLnOyYpC4KKworICAzLiDsnbTrsojsl5DripQgIDpzL3RoZWUvdGhlL2cgIOulvCDsnoXroKXtlanri4jri6QuIOydtOuKlCDqt7gg7KSEIOyghOyytChnbG9iYWxseSnrpbwKKyAgICAg7LmY7ZmY7ZWc64uk64qUIOqyg+ydhCDsnZjrr7jtlanri4jri6QuCisKKy0tLT4gdGhlZSBiZXN0IHRpbWUgdG8gc2VlIHRoZWUgZmxvd2VycyBpcyBpbiB0aGVlIHNwcmluZy4KKworICA0LiDrkZAg7KSEIOyCrOydtOydmCDrqqjrk6Ag66y47J6Q7Je07JeQIOuMgO2VtCDsuZjtmZjtlZjroKTrqbQg64uk7J2M6rO8IOqwmeydtCDtlanri4jri6QsCisgICAgICA6Iywjcy9vbGQvbmV3L2cgICAgIywjIOuKlCDrkZAg7KSE7J2YIOykhOuyiO2YuOulvCDrnLvtlanri4jri6QuCisgICAgICA6JXMvb2xkL25ldy9nICAgICAg7YyM7J28IOyghOyytOyXkOyEnCDrsJzqsqzrkJwg66qo65OgIOqyg+ydhCDsuZjtmZjtlZjripQg6rK97Jqw7J6F64uI64ukLgorCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRVNTT04gNCDsmpTslb0KKworCisgIDEuIENUUkwtZyAg64qUIO2MjOydvOydmCDsg4Htg5zsmYAg7YyM7J28IOuCtOyXkOyEnOydmCDtmITsnqwg7JyE7LmY66W8IO2RnOyLnO2VqeuLiOuLpC4KKyAgICAgU0hJRlQtRyAg64qUIO2MjOydvOydmCDrgZ3snLzroZwg7J2064+Z7ZWp64uI64ukLiDspITrsojtmLjrpbwg7J6F66Cl7ZWcIO2bhCBTSElGVC1H66W8CisgICAgIOyeheugpe2VmOuptCwg6re4IOykhOuhnCDsnbTrj5ntlanri4jri6QuCisKKyAgMi4gIC8g66W8IOyeheugpe2VnCDtm4Qg66y46rWs66W8IOyeheugpe2VmOuptCDqt7gg66y46rWs66W8IOyVhOueq+uwqe2WpeycvOuhnCDssL7sirXri4jri6QuCisgICAgICA/IOulvCDsnoXroKXtlZwg7ZuEIOusuOq1rOulvCDsnoXroKXtlZjrqbQg7JyX67Cp7Zal7Jy866GcIOywvuyKteuLiOuLpC4KKyAgICAg6rKA7IOJIO2bhCwgbiDsnYQg7J6F66Cl7ZWY66m0IOqwmeydgCDrsKntlqXsnLzroZwg64uk7J2MIOusuOq1rOulvCDssL7snLzrqbAsCisgICAgIFNoaWZ0LU4g7J2EIOyeheugpe2VmOuptCDrsJjrjIAg67Cp7Zal7Jy866GcIOywvuyKteuLiOuLpC4KKworICAzLiDsu6TshJzqsIAgKCwpLFssXSx7LH0g7JyE7JeQIOyeiOydhCDrlYzsl5AgICUg66W8IOyeheugpe2VmOuptCDsg4HsnZHtlZjripQg7Ked7J2ECisgICAgIOywvuyVhOqwkeuLiOuLpC4KKworICA0LiDslrTrlqQg7KSE7JeQIOyymOydjCDrk7HsnqXtlZjripQgb2xk66W8IG5ld+uhnCDrsJTqvrjroKTrqbQgICAgICAgICAgOnMvb2xkL25ldworICAgICDtlZwg7KSE7JeQIOuTseyepe2VmOuKlCDrqqjrk6Agb2xk66W8IG5ld+uhnCDrsJTqvrjroKTrqbQgICAgICAgICAgICA6cy9vbGQvbmV3L2cKKyAgICAg65GQIOykhCAjLCMg7IKs7J207JeQ7IScIOy5mO2ZmOydhCDtlZjroKTrqbQgICAgICAgICAgICAgICAgICAgICAgOiMsI3Mvb2xkL25ldy9nCisgICAgIO2MjOydvCDrgrTsnZgg66qo65OgIOusuOq1rOulvCDsuZjtmZjtlZjroKTrqbQgICAgICAgICAgICAgICAgICAgICAgOiVzL29sZC9uZXcvZworICAgICDrsJTqv4Ag65WM66eI64ukIO2ZleyduOydhCDqsbDsuZjroKTrqbQgJ2Mn66W8IOu2meyXrOyEnCAgICAgICAgICAgICAgOiVzL29sZC9uZXcvZ2MKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICBMZXNzb24gNS4xOiDsmbjrtoAg66qF66C5IOyLpO2Wie2VmOuKlCDrsKnrspUKKworCisgICAgICAgICAqKiAgIDohICDsnYQg7J6F66Cl7ZWcIO2bhCDsi6TtlontlZjroKTripQg66qF66C57J2EIOyeheugpe2VmOyLreyLnOyYpC4gKioKKworICAxLiDsuZzsiJntlZwg66qF66C57J24ICA6ICDrpbwg7J6F66Cl7ZWY66m0IOy7pOyEnOqwgCDtmZTrqbQg7JWE656Y66GcIOydtOuPme2VqeuLiOuLpC4g66qF66C57J2ECisgICAgIOyeheugpe2VoCDsiJgg7J6I6rKMIOuQqeuLiOuLpC4KKworICAyLiDsnbTsoJwgICEgKOuKkOuCjO2RnCkg66W8IOyeheugpe2VmOyLreyLnOyYpC4g7J2066CH6rKMIO2VmOuptCDsmbjrtoAg7ImYIOuqheugueydhCDsi6TtlontlaAKKyAgICAg7IiYIOyeiOyKteuLiOuLpC4KKworICAzLiDsi5ztl5jsgrzslYQgISDri6TsnYzsl5AgIGxzICDrpbwg7J6F66Cl7ZWcIO2bhCA8RU5URVI+IOulvCDss5Drs7Tsi63si5zsmKQuIOyJmCDtlITroaztlITtirgKKyAgICAg7JeQ7ISc7LKY65+8IOuUlOugie2GoOumrOydmCDrqqnroZ3snbQg7Lac66Cl65CgIOqyg+yeheuLiOuLpC4gIGxzICDqsIAg64+Z7J6R7ZWY7KeAIOyViuuKlOuLpOuptAorICAgICA6IWRpciDsnYQg7Iuc64+E7ZW0IOuztOyLreyLnOyYpC4KKwor7LC46rOgOiAg7Ja065akIOyZuOu2gCDrqoXroLnrj4Qg7J20IOuwqeuyleycvOuhnCDsi6TtlontlaAg7IiYIOyeiOyKteuLiOuLpC4KKwor7LC46rOgOiAg66qo65OgICA6ICDrqoXroLnsnYAgPEVOVEVSPiDrpbwg7LOQ7JW8IOuniOustOumrCDrkKnri4jri6QuCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgTGVzc29uIDUuMjog67O064ukIOyekOyEuO2VnCDtjIzsnbwg7KCA7J6lCisKKworICAgICAqKiDsiJjsoJXrkJwg64K07Jqp7J2EIO2MjOydvOuhnCDsoIDsnqXtlZjroKTrqbQsICA6dyAgRklMRU5BTUUgIO2VmOyLreyLnOyYpC4gKioKKworICAxLiAgOiFkaXIg65iQ64qUICA6IWxzICDrpbwg7J6F66Cl7ZWY7JesIOuUlOugie2GoOumrOydmCDrpqzsiqTtirjrpbwg7Ja77Ja07Ji164uI64ukLgorICAgICDsnITsnZgg66qF66C5IO2bhCA8RU5URVI+66W8IOyzkOyVvO2VnOuLpOuKlCDqsoPsnYAg7J2066+4IOyVjOqzoCDsnojsnYQg6rKD7J6F64uI64ukLgorCisgIDIuIFRFU1Qg7LKY65+8IOyhtOyerO2VmOyngCDslYrripQg7YyM7J28IOydtOumhOydhCDtlZjrgpgg6rOg66W07Iut7Iuc7JikLgorCisgIDMuIOydtOygnCAgOncgVEVTVCDrnbzqs6Ag7J6F66Cl7ZWY7Iut7Iuc7JikLiAgKFRFU1TripQg64u57Iug7J20IOyEoO2Dne2VnCDtjIzsnbwg7J2066aE7J6F64uI64ukLikKKworICA0LiDsnbTroIfqsowg7ZWY66m0IOu5lCDquLjsnqHsnbQg7YyM7J28IOyghOyytOulvCBURVNU652864qUIOydtOumhOycvOuhnCDsoIDsnqXtlanri4jri6QuCisgICAgIO2ZleyduO2VmOugpOuptCwgIDohZGlyIOydhCDri6Tsi5wg7J6F66Cl7ZWY7JesLCDrlJTroInthqDrpqzrpbwg7IK07Y6067O07Iut7Iuc7JikLgorCivssLjqs6A6IOu5lOydhCDsooXro4ztlZwg7ZuELCDruZTsnYQg64uk7IucIOyLpO2Wie2VmOyXrCBURVNU652864qUIO2MjOydvOydhCDsl7TrqbQsIOq3uCDtjIzsnbzsnYAKKyAgICAgIOyggOyepe2WiOydhCDrlYzsmYAg7JmE67K97Z6IIOqwmeydgCDrs7Xsgqzrs7jsnbwg6rKD7J6F64uI64ukLgorCisgIDUuIOydtOygnCDqt7gg7YyM7J287J2EIOyngOybgeyLnOuLpC4KKyAgICAgKE1TLURPU+yXkOyEnCk6ICAgIWRlbCBURVNUCisgICAgIChVbml47JeQ7IScKTogICAgICFybSBURVNUCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgIExlc3NvbiA1LjM6IOyEoO2DneyggeycvOuhnCDsoIDsnqXtlZjripQg66qF66C5CisKKworICAgICAgICAqKiDtjIzsnbzsnZgg7J2867aA66W8IOyggOyepe2VmOugpOuptCwgIDojLCMgdyBGSUxFTkFNRSAg7ZWY7Iut7Iuc7JikLiAqKgorCisgIDEuIOuLpOyLnCDtlZzrsogsICA6IWRpciAg7J2064KYICAhbHMg66W8IOyeheugpe2VmOyXrCDrlJTroInthqDrpqzsnZgg66qp66Gd7J2EIOuwm+yVhOyYqCDtm4QKKyAgICAgVEVTVCDqsJnsnYAg7KCB7ZWp7ZWcIOydtOumhOydhCDshKDtg53tlanri4jri6QuCisKKyAgMi4g7Luk7ISc66W8IOydtCDtjpjsnbTsp4DsnZgg7LKY7J2M7Jy866GcIOyYruq4tCDtm4QsIEN0cmwtZyDrpbwg7J6F66Cl7ZWY7JesIOq3uCDspITsnZgg7KSE67KI7Zi466W8CisgICAgIOyVjOyVhOuDheuLiOuLpC4g7J20IOuyiO2YuOulvCDquLDslrXtlZjsi63si5zsmKQhCisKKyAgMy4g7J207KCcIOydtCDtjpjsnbTsp4DsnZgg66eI7KeA66eJ7Jy866GcIOqwgOyEnCAgQ3RybC1nIOulvCDri6Tsi5wg7J6F66Cl7ZWY7Iut7Iuc7JikLiDsnbQg7KSE7J2YCisgICAgIOykhOuyiO2YuCDrmJDtlZwg6riw7Ja17ZWY7Iut7Iuc7JikIQorCisgIDQuIOyWtOuWpCDshLnshZjrp4wg7YyM7J2866GcIOyggOyepe2VmOugpOuptCwgIDojLCMgdyBURVNUICDrpbwg7J6F66Cl7ZWY66m0IOuQqeuLiOuLpC4g7J20IOuVjAorICAgICAjLCMg64qUIOyVhOq5jCDquLDslrXtlojrjZgg7Iuc7J6R6rO8IOuBnSDspITrsojtmLgg7J6F64uI64ukLiBURVNU64qUIO2MjOydvCDsnbTrpoTsnoXri4jri6QuCisKKyAgNS4gOiFkaXIg7J2EIOydtOyaqe2VmOyXrCDtjIzsnbzsnbQg66eM65Ok7Ja07KGM64qU7KeAIO2ZleyduO2VmOyLreyLnOyYpC4g7KeA7Jqw7KeA64qUIOuniOyLreyLnOyYpC4KKworCisKKworfn5+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+CisgICAgICAgICAgICAgICAgICAgTGVzc29uIDUuNDog7YyM7J28IOydveyWtOuTpOydtOq4sCwg7ZWp7LmY6riwCisKKworICAgICAgICoqIOyWtOuWpCDtjIzsnbzsnZgg64K07Jqp7J2EIOyCveyehe2VmOugpOuptCwgIDpyIEZJTEVOQU1FICDtlZjsi63si5zsmKQgKioKKworICAxLiAgOiFkaXIg7J2EIOyeheugpe2VmOyXrCDslYTquYwg66eM65OgIFRFU1Qg7YyM7J287J20IOq3uOuMgOuhnCDsnojripTsp4Ag7ZmV7J247ZWY7Iut7Iuc7JikLgorCisgIDIuIOy7pOyEnOulvCDsnbQg7Y6Y7J207KeA7J2YIOyymOydjOycvOuhnCDsm4Dsp4HsnbTsi63si5zsmKQuCisKK+yjvOydmDogIDPrsojsp7gg64uo6rOE66W8IOyLpO2Wie2VmOuptCwgTGVzc29uIDUuMyDsnYQg67O06rKMIOuQoCDqsoPsnoXri4jri6QuIOq3uOugh+qyjCDrkJjrqbQKKyAgICAgICDsnbQgbGVzc29u7Jy866GcIOuLpOyLnCDrgrTroKTsmKTsi63si5zsmKQuCisKKyAgMy4g7J207KCcIFRFU1Qg7YyM7J287J2EIOydveyWtOuTpOyeheyLnOuLpC4gIDpyIFRFU1QgIOuqheugueydhCDsgqzsmqntlZjsi63si5zsmKQuIFRFU1Qg64qUCisgICAgIO2MjOydvOydmCDsnbTrpoTsnoXri4jri6QuCisKK+ywuOqzoDogIOydveyWtOuTpOyduCDtjIzsnbzsnYAg7Luk7ISc6rCAIOychOy5mO2VnCDsp4DsoJDsl5DshJzrtoDthLAg64aT7J206rKMIOuQqeuLiOuLpC4KKworICA0LiDtjIzsnbzsnbQg7J297Ja065Ok7Jes7KeEIOqyg+ydhCDtmZXsnbjtlZjquLAg7JyE7ZW0LCDrkqTroZwg7J2064+Z7ZW07IScIOq4sOyhtCDrsoTsoITqs7wg7YyM7J287JeQ7IScCisgICAgIOydveyWtOuTpOyduCDrsoTsoIQsIOydtOugh+qyjCBMZXNzb24gNS4zIOydtCDrkZDrsogg67CY67O165CY7JeI7J2M7J2EIO2ZleyduO2VmOyLreyLnOyYpC4KKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFU1NPTiA1IOyalOyVvQorCisKKyAgMS4gIDohY29tbWFuZCAg66W8IOydtOyaqe2VmOyXrCDsmbjrtoAg66qF66C57J2EIOyLpO2Wie2VqeuLiOuLpC4KKworICAgICAg7Jyg7Jqp7ZWcIOyYiDoKKyAgICAgICAgIChNUy1ET1MpICAgICAgICAgKFVuaXgpCisgICAgICAgICAgOiFkaXIgICAgICAgICAgICA6IWxzICAgICAgICAgICAgLSAg65SU66CJ7Yag66as7J2YIOuqqeuhneydhCDrs7Tsl6zspIDri6QuCisgICAgICAgICAgOiFkZWwgRklMRU5BTUUgICA6IXJtIEZJTEVOQU1FICAgLSAgRklMRU5BTUXsnbTrnbzripQg7YyM7J287J2EIOyngOyatOuLpC4KKworICAyLiAgOncgRklMRU5BTUUgIO2VmOuptCDtmITsnqwg67mU7JeQ7IScIOyCrOyaqe2VmOuKlCDtjIzsnbzsnYQgRklMRU5BTUXsnbTrnbzripQg7J2066aE7Jy866GcCisgICAgICDrlJTsiqTtgazsl5Ag7KCA7J6l7ZWp64uI64ukLgorCisgIDMuICA6IywjdyBGSUxFTkFNRSAg7ZWY66m0ICPrtoDthLAgI+q5jOyngOydmCDspITsnYQgRklMRU5BTUXsnbTrnbzripQg7YyM7J2866GcIOyggOyepe2VqeuLiOuLpC4KKworICA0LiAgOnIgRklMRU5BTUUgIOydgCDrlJTsiqTtgazsl5DshJwgRklMRU5BTUXsnbTrnbzripQg7YyM7J287J2EIOu2iOufrOuTpOyXrOyEnCDsu6TshJwg7JyE7LmYCisgICAgICDrkqTsl5Ag7ZiE7J6sIO2MjOydvOydhCDsp5HslrTrhKPsirXri4jri6QuCisKKworCisKKworCit+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+fn4KKyAgICAgICAgICAgICAgICAgICAgTGVzc29uIDYuMTog7IOIIOykhCDsl7TquLAoT1BFTikg66qF66C5CisKKworICAgICAgICoqICBvICDrpbwg64iE66W066m0IOy7pOyEnCDslYTrnpjsl5Ag7KSE7J2EIOunjOuTpOqzoCDtjrjsp5Eg66qo65Oc6rCAIOuQqeuLiOuLpC4gKioKKworICAxLiDslYTrnpjsl5AgLS0tPiDroZwg7ZGc7Iuc65CcIOykhOuhnCDsu6TshJzrpbwg7Jiu6riw7Iut7Iuc7JikLgorCisgIDIuICBvICjshozrrLjsnpAp66W8IOyzkOyEnCDsu6TshJwgKuyVhOuemOyXkCog7KSE7J2EIO2VmOuCmCDsl6zsi63si5zsmKQuIO2OuOynkSDrqqjrk5zqsIAg65Cp64uI64ukLgorICAgICBJbnNlcnQgbW9kZS4KKworICAzLiAtLS0+IOuhnCDtkZzsi5zrkJwg7KSE7J2EIOuzteyCrO2VnCDtm4QgIDxFU0M+IOulvCDriIzrn6zshJwg7Y647KeRIOuqqOuTnOyXkOyEnCDrgpjsmKTsi63si5zsmKQuCisKKy0tLT4gQWZ0ZXIgdHlwaW5nICBvICB0aGUgY3Vyc29yIGlzIHBsYWNlZCBvbiB0aGUgb3BlbiBsaW5lIGluIEluc2VydCBtb2RlLgorCisgIDQuIOy7pOyEnCAq7JyE7JeQKiDspITsnYQg7ZWY64KYIOunjOuTnOugpOuptCwg7IaM66y47J6QICBvIOuMgOyLoCDrjIDrrLjsnpAgIE8gIOulvCDsuZjrqbQg65Cp64uI64ukLgorICAgICDslYTrnpgg7J6I64qUIOykhOyXkCDrjIDtlbQg7J20IOuqheugueydhCDrgrTroKTrs7Tsi63si5zsmKQuCitPcGVuIHVwIGEgbGluZSBhYm92ZSB0aGlzIGJ5IHR5cGluZyBTaGlmdC1PIHdoaWxlIHRoZSBjdXJzb3IgaXMgb24gdGhpcyBsaW5lLgorCisKKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgTGVzc29uIDYuMjog7LaU6rCAKEFQUEVORCkg66qF66C5CisKKworICAgICAgICAgICoqICBhIOulvCDriITrpbTrqbQg7Luk7IScICrri6TsnYzsl5AqIOq4gOydhCDsnoXroKXtlaAg7IiYIOyeiOyKteuLiOuLpC4gKioKKworICAxLiDsu6TshJzrpbwgLS0tPiDroZwg7ZGc7Iuc65CcIOyyq+uyiOynuCDspITsnZgg64Gd7Jy866GcIOyYruq5geuLiOuLpC4gIOuqheuguSDrqqjrk5zsl5DshJwKKyAgICAgJCDrpbwg7J207Jqp7ZWY7Iut7Iuc7JikLgorCisgIDIuICDshozrrLjsnpAgYSDrpbwg7Luk7IScIOyVhOuemCDquIDsnpAgKuuLpOydjCrsl5Ag6riA7J2EIOy2lOqwgO2VoCDsiJgg7J6I7Iq164uI64ukLgorICAgICAo64yA66y47J6QIEHripQg6re4IOykhOydmCDrgZ3sl5Ag7LaU6rCA7ZWp64uI64ukLikKKwor7LC46rOgOiDqt7jroIfqsowg7ZWY7Iuc66m0IOqzoOyekSDspITsnZgg64Gd7JeQIOy2lOqwgOulvCDtlZjquLAg7JyE7ZW0IGnrpbwg64iE66W06rOgLCDsu6TshJwg7JWE656Y7JeQCisgICAgICDsnojrjZgg6riA7J6Q66W8IOuwmOuzte2VmOqzoCwg6riA7J2EIOuBvOybjOuEo+qzoCwgPEVTQz7rpbwg64iM65+sIOuqheuguSDrqqjrk5zroZwg64+M7JWE7JmA7IScLAorICAgICAg7Luk7ISc66W8IOyYpOuluOyqveycvOuhnCDsmK7quLDqs6Ag66eI7KeA66eJ7Jy866GcIHjquYzsp4Ag64iM65+s7JW8IO2VmOuKlCDrsojqsbDroZzsm4DsnYQg7ZS87ZWY7IukCisgICAgICDsiJgg7J6I7Iq164uI64ukLgorCisgIDMuIOydtOygnCDssqsg7KSE7J2EIOyZhOyEse2VmOyLreyLnOyYpC4g7LaU6rCAIOuqheugueydgCDthY3siqTtirjqsIAg7J6F66Cl65CY64qUIOychOy5mCDsmbjsl5DripQKKyAgICAg7Y647KeRIOuqqOuTnOyZgCDsmYTsoITtnogg6rCZ64uk64qUIOqyg+ydhCDsnKDrhZDtlZjsi63si5zsmKQuCisKKy0tLT4gVGhpcyBsaW5lIHdpbGwgYWxsb3cgeW91IHRvIHByYWN0aWNlCistLS0+IFRoaXMgbGluZSB3aWxsIGFsbG93IHlvdSB0byBwcmFjdGljZSBhcHBlbmRpbmcgdGV4dCB0byB0aGUgZW5kIG9mIGEgbGluZS4KKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgIExlc3NvbiA2LjM6IOy5mO2ZmChSRVBMQUNFKSDsnZgg64uk66W4IOuyhOyghAorCisKKyAgICAgICoqICDrjIDrrLjsnpAgUiDsnYQg7J6F66Cl7ZWY66m0IO2VmOuCmCDsnbTsg4HsnZgg6riA7J6Q66W8IOuwlOq/gCDsiJgg7J6I7Iq164uI64ukLiAqKgorCisgIDEuIOy7pOyEnOulvCAtLS0+IOuhnCDtkZzsi5zrkJwg7LKr67KI7Ke4IOykhOuhnCDsmK7quLDsi63si5zsmKQuCisKKyAgMi4g7Luk7ISc66W8IC0tLT4g66GcIO2RnOyLnOuQnCDrkZDrsojsp7gg7KSE6rO8IOuLpOuluCDssqvrsojsp7gg64uo7Ja0IOychOuhnCDsmK7quLDsi63si5zsmKQuCisgICAgICgnbGFzdCcg7J6F64uI64ukLikKKworICAzLiAgUiAg7J2EIOyeheugpe2VnCDtm4Qg7LKr67KI7Ke4IOykhOydmCDsmIjsoIQg7YWN7Iqk7Yq4IOychOyXkCDsg4jroZzsmrQg6riA7J2EIOyeheugpe2VmOyXrAorICAgICDrgpjrqLjsp4Ag64K07Jqp7J20IOuRkOuyiOynuCDspITqs7wg6rCZ7JWE7KeA64+E66GdIOuwlOq/ieyLnOuLpC4KKworLS0tPiBUbyBtYWtlIHRoZSBmaXJzdCBsaW5lIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG9uIHRoaXMgcGFnZSB1c2UgdGhlIGtleXMuCistLS0+IFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCwgdHlwZSBSIGFuZCB0aGUgbmV3IHRleHQuCisKKyAgNC4gPEVTQz4g66W8IOuIjOufrOyEnCDrgpjqsIDrqbQsIOuwlOuAjOyngCDslYrsnYAg7YWN7Iqk7Yq464qUIOq3uOuMgOuhnCDrgqjqsowg65Cp64uI64ukLgorCisKKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICAgIExlc3NvbiA2LjQ6IOyYteyFmCDshKTsoJUoU0VUKQorCisgICAgICAqKiDssL7quLDrgpgg67CU6r646riw7JeQ7IScIOuMgOyGjOusuOyekCDqtazrtoTsnYQg7JeG7JWg6riwIOychO2VtCDsmLXshZjsnYQg7ISk7KCV7ZWp64uI64ukICoqCisKKyAgMS4g64uk7J2M7J2EIOyeheugpe2VmOyXrCAnaWdub3JlJyDrpbwg7LC+7Jy87Iut7Iuc7JikOgorICAgICAvaWdub3JlCisgICAgICBuIO2CpOulvCDsnbTsmqntlZjsl6wg7Jes65+s67KIIOuwmOuzte2VmOyLreyLnOyYpC4KKworICAyLiAnaWMnICjrjIDshozrrLjsnpAg6rWs67OEIOyViO2VqCwgSWdub3JlIGNhc2UpIOyYteyFmOydhCDshKTsoJXtlZjsi63si5zsmKQ6CisgICAgIDpzZXQgaWMKKworICAzLiAgbiDtgqTrpbwg64iM65+s7IScICdpZ25vcmUnIOulvCDri6Tsi5wg7LC+7JWE67O07Iut7Iuc7JikLgorICAgICBuIO2CpOulvCDqs4Tsho0g64iM65+s7IScIOyXrOufrOuyiCDssL7snLzsi63si5zsmKQuCisKKyAgNC4gJ2hsc2VhcmNoJyDsmYAgJ2luY3NlYXJjaCcg7Ji17IWY7J2EIOyEpOygle2VqeyLnOuLpC4KKyAgICAgOnNldCBobHMgaXMKKworICA1LiDssL7quLAg66qF66C57J2EIOuLpOyLnCDsnoXroKXtlZjsl6wsIOyWtOuWpCDsnbzsnbQg7J287Ja064KY64qU7KeAIO2ZleyduO2VtCDrs7Tsi63si5zsmKQ6CisgICAgIC9pZ25vcmUKKworICA2LiDssL7snYAg64K07Jqp7J20IOqwleyhsChISUdITElHSFQp65CcIOqyg+ydhCDsl4bslaDroKTrqbQsIOuLpOydjOqzvCDqsJnsnbQg7J6F66Cl7ZWp64uI64ukOgorICAgICA6bm9obHNlYXJjaAorfn5+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+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVTU09OIDYg7JqU7JW9CisKKworICAxLiAgbyDrpbwg7J6F66Cl7ZWY66m0IOy7pOyEnCAq7JWE656Y7JeQKiDtlZwg7KSE7J20IOyXtOumrOupsCwg7Luk7ISc64qUIO2OuOynkSDrqqjrk5zroZwKKyAgICAg7Je066awIOykhCDsnITsl5Ag7JyE7LmY7ZWY6rKMIOuQqeuLiOuLpC4KKyAgICAg64yA66y47J6QICBPICDrpbwg7J6F66Cl7ZWY66m0IOy7pOyEnOqwgCDsnojripQg7KSE7J2YICrsnITroZwqIOyDiCDspITsnYQg7Je06rKMIOuQqeuLiOuLpC4KKworICAyLiAgYSDrpbwg7J6F66Cl7ZWY66m0IOy7pOyEnCAq64uk7J2M7JeQKiDquIDsnYQg7J6F66Cl7ZWgIOyImCDsnojsirXri4jri6QuCisgICAgIOuMgOusuOyekCAgQSAg66W8IOyeheugpe2VmOuptCDsnpDrj5nsnLzroZwg6re4IOykhOydmCDrgZ3sl5Ag6riA7J6Q66W8IOy2lOqwgO2VmOqyjCDrkKnri4jri6QuCisKKyAgMy4g64yA66y47J6QICBSICDsnYQg7J6F66Cl7ZWY66m0IDxFU0M+IOulvCDriIzrn6zshJwg64KY6rCA6riwIOyghOq5jOyngCDrsJTqvrjquLAg66qo65Oc6rCAIOuQqeuLiOuLpC4KKworICA0LiAiOnNldCB4eHgiIOulvCDtlZjrqbQgInh4eCIg7Ji17IWY7J20IOyEpOygleuQqeuLiOuLpC4KKworCisKKworCisKKworCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICBMRVNTT04gNzog7Jio65287J24IOuPhOybgOunkCDrqoXroLkKKworCisgICAgICAgICAgICAgICAgICAgICAgKiog7Jio65287J24IOuPhOybgOunkCDsi5zsiqTthZwg7IKs7Jqp7ZWY6riwICoqCisKKyAg67mU7J2AIO2PrSDrhJPsnYAg7Jio65287J24IOuPhOybgOunkCDsi5zsiqTthZzsnYQg7KCc6rO17ZWp64uI64ukLiAg64+E7JuA66eQ7J2EIOuztOugpOuptCwKKyAg64uk7J2MIOyEuOqwgOyngCDspJEg7ZWY64KY66W8IOyLnOuPhO2VtOuztOyLreyLnOyYpDoKKyAgICAgICAgLSA8SEVMUD4g7YKk66W8IOuIhOuluOuLpC4gKO2CpOqwgCDsnojripQg6rK97JqwKQorICAgICAgICAtIDxGMT4g7YKk66W8IOuIhOuluOuLpC4gKO2CpOqwgCDsnojripQg6rK97JqwKQorICAgICAgICAtIDpoZWxwIDxFTlRFUj4gICDrnbzqs6Ag7J6F66Cl7ZWc64ukLgorCisgIOuPhOybgOunkCDssL3snYQg64ur7Jy866Ck66m0ICA6cSA8RU5URVI+ICDrnbzqs6Ag7J6F66Cl7ZWY7Iut7Iuc7JikLgorCisgICI6aGVscCIg652864qUIOuqheugueyXkCDsnbjsnpDrpbwg7KO866m0IOyWtOuWpCDso7zsoJzsl5Ag6rSA7ZWcIOuPhOybgOunkOydhCDssL7snYQg7IiYIOyeiOyKteuLiOuLpC4KKyAg64uk7J2MIOuqheugueydhCDrgrTroKQg67O07Iut7Iuc7JikLiAoIDxFTlRFUj4g7YKk66W8IOuIhOultOuKlCDqsoPsnYQg7J6K7KeAIOuniOyLreyLnOyYpC4pCisKKyAgICAgICAgOmhlbHAgdworICAgICAgICA6aGVscCBjXzxUCisgICAgICAgIDpoZWxwIGluc2VydC1pbmRleAorICAgICAgICA6aGVscCB1c2VyLW1hbnVhbAorCisKK35+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+fgorICAgICAgICAgICAgICAgICAgICAgICBMRVNTT04gODog7Iuc7J6RIOyKpO2BrOumve2KuCDrp4zrk6TquLAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqIOu5lOydmCDquLDriqUg7Lyc6riwICoqCisKKyAg67mU7J2AIFZpIOuztOuLpCDtm6jslKwg66eO7J2AIOq4sOuKpeydhCDqsIDsp4Dqs6Ag7J6I7KeA66eMLCDrjIDrtoDrtoTsnYAg6riw67O47KCB7Jy866GcIOyekeuPme2VmOyngAorICDslYrsirXri4jri6QuIOuNlCDrp47snYAg6riw64ql7J2EIOyNqOuztOugpOuptCwgInZpbXJjIiDrnbzripQg7YyM7J287J2EIOunjOuTpOyWtOyVvCDtlanri4jri6QuCisKKyAgMS4gInZpbXJjIiDtjIzsnbzsnYQg7IiY7KCV7ZWp7Iuc64ukLiDsnbQg7YyM7J287J2AIOyCrOyaqe2VmOuKlCDsi5zsiqTthZzsl5Ag65Sw6528IOuLpOumheuLiOuLpDoKKyAgMS4gU3RhcnQgZWRpdGluZyB0aGUgInZpbXJjIiBmaWxlLCB0aGlzIGRlcGVuZHMgb24geW91ciBzeXN0ZW06CisgICAgICAgIDplZGl0IH4vLnZpbXJjICAgICAgICAgICAgICAgICAgVW5peOydmCDqsr3smrAKKyAgICAgICAgOmVkaXQgJFZJTS9fdmltcmMgICAgICAgICAgICAgICBNUy1XaW5kb3dz7J2YIOqyveyasAorCisgIDIuIOydtOygnCAidmltcmMi7J2YIOyYiOygnOulvCDsnb3slrTrk6TsnoXri4jri6Q6CisKKyAgICAgICAgOnJlYWQgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0KKworICAzLiDri6TsnYzqs7wg6rCZ7J20IO2VmOyXrCDtjIzsnbzsnYQg7KCA7J6l7ZWp64uI64ukOgorCisgICAgICAgIDp3cml0ZQorCisgIOuLpOydjCDrsojsl5Ag67mU7J2EIOyLnOyeke2VmOuptCwg6rWs66y4IOqwleyhsChzeW50YXggaGlnaGxpZ2h0aW5nKeydtCDsgqzsmqnrkKAg6rKD7J6F64uI64ukLgorICDrqqjrk6Ag7JuQ7ZWY64qUIOyEpOygleydhCDsnbQgInZpbXJjIiDtjIzsnbzsl5Ag64Sj7Ja065GYIOyImCDsnojsirXri4jri6QuCisKK35+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+fgorCisgIOydtOqyg+ycvOuhnCDruZQg6ri47J6h7J2066W8IOuniOy5qeuLiOuLpC4gIOydtCDquLjsnqHsnbTripQg67mUIO2OuOynkeq4sOyXkCDrjIDtlZwg6rCE65617ZWcIOqwnOyalOulvAorICDrs7Tsl6zso7zquLAg7JyE7ZWcIOydmOuPhOuhnCDsoJzsnpHrkJjsl4jsnLzrqbAsIOydtCDtjrjsp5HquLDrpbwg7KCV66eQIOqwhOuLqO2eiCDsgqzsmqntlZjquLDsl5AKKyAg7Lap67aE7ZWgIOu/kOyeheuLiOuLpC4gIOu5lOyXkOuKlCDsnbQg6ri47J6h7J207JmA64qUIOu5hOq1kO2VoCDsiJgg7JeG7J2EIOunjO2BvCDtm6jslKwg66eO7J2AIOuqheugueydtAorICDsnojsirXri4jri6QuICDri6TsnYwg7IKs7Jqp7J6QIOunpOuJtOyWvOydhCDsnb3snLzsi63si5zsmKQ6ICI6aGVscCB1c2VyLW1hbnVhbCIKKworICDrs7Tri6Qg7J6Q7IS47Z6IIOydveqzoCDqs7XrtoDtlZjroKTrqbQsIOuLpOydjCDssYXsnYQg7LaU7LKc7ZW0IOuTnOumveuLiOuLpDoKKyAgICAgICAgVmltIC0gVmkgSW1wcm92ZWQgLSBieSBTdGV2ZSBPdWFsbGluZQorICAgICAgICDstpztjJDsgqw6IE5ldyBSaWRlcnMKKyAg7J20IOyxheydgCDsmYTsoITtnogg67mU7JeQIOuMgO2VtOyEnOunjCDri6Tro6jqs6Ag7J6I7Iq164uI64ukLiAg7Yq57Z6IIOy0iOuztOyekOuTpOyXkOqyjCDsnKDsmqntlanri4jri6QuCisgIOunjuydgCDsmIjsoJzsmYAg6re466a87J20IOyeiOyKteuLiOuLpC4KKyAg64uk7J2M7J2EIOywuOqzoO2VmOyLreyLnOyYpDogIGh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnL2NsaWNrNS5odG1sCisKKyAg64uk7J2MIOyxheydgCDsooAg7Jik656Y65CcIOyxheycvOuhnCDruZTrs7Tri6TripQgVmnsl5Ag64yA7ZW0IOuLpOujqOqzoCDsnojsp4Drp4wsIOyXreyLnCDstpTsspztlaAg66eMCisgIO2VqeuLiOuLpDoKKyAgICAgICAgTGVhcm5pbmcgdGhlIFZpIEVkaXRvciAtIGJ5IExpbmRhIExhbWIKKyAgICAgICAg7Lac7YyQ7IKsOiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMgSW5jLgorICBWaeuhnCDtlZjqs6Ag7Iu27J2AIOqxsOydmCDrqqjrk6Ag6rKD7JeQIOuMgO2VtCDslYwg7IiYIOyeiOuKlCDsoovsnYAg7LGF7J6F64uI64ukLgorICDsl6zshK/rsojsp7gg6rCc7KCV7YyQ7J2AIOu5lOyXkCDqtIDtlZwg64K07Jqp7J2EIO2PrO2VqO2VmOqzoCDsnojsirXri4jri6QuCisKKyAg7J20IOq4uOyeoeydtOuKlCAgQ29sb3JhZG8gU2Nob29sIG9mIE1pbmVz7J2YIE1pY2hhZWwgQy4gUGllcmNlIOyZgAorICBSb2JlcnQgSy4gV2FyZSDqsIAgQ29sb3JhZG8gU3RhdGUgVW5pdmVyc2l0eeydmCBDaGFybGVzIFNtaXRoIOydmCDslYTsnbTrlJTslrTsl5AKKyAg7LCp7JWI7ZWY7JesIOyNvOyKteuLiOuLpC4KKyAgLiAgRS1tYWlsOiBid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUuCisKKyAgTW9kaWZpZWQgZm9yIFZpbSBieSBCcmFtIE1vb2xlbmFhci4KKworICDsnbQg66y47ISc7J2YIO2VnOq1reyWtCDrsoTsoITsl5Ag6rSA7ZWcIOusuOydmOuKlCDri6TsnYwg7IKs7J207Yq466GcIO2VtOyjvOyLreyLnOyYpC4KKyAgaHR0cDovL3dpa2kua2xkcC5vcmcvd2lraS5waHAvVmltVHV0b3JLbworfn5+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+CmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLm5vIGIvcnVudGltZS90dXRvci90dXRvci5ubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTAzNjA0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci90dXRvci5ubwpAQCAtMCwwICsxLDgxMCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSBWIGUgbCBrIG8gbSBtIGUgbiAgIHQgaSBsICAgaSBuIG4gZiD4IHIgaSBuIGcgZSBuICAgaSAgIFYgaSBtICAtLSAgVmVyLiAxLjUgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgIFZpbSBlciBlbiBtZWdldCBrcmFmdGlnIGVkaXRvciBtZWQgbWFuZ2Uga29tbWFuZG9lciwgYWx0IGZvciBtYW5nZQorICAgICB0aWwg5SBrdW5uZSBn5SBnamVubm9tIGFsbGUgaSBlbiBpbm5m+HJpbmcgc29tIGRlbm5lLiBEZW4gZXIgYmVyZWduZXQKKyAgICAgcOUg5SBzZXR0ZSBkZWcgaW5uIGkgYnJ1a2VuIGF2IG5vayBrb21tYW5kb2VyIHPlIGR1IHZpbCB25nJlIGkgc3RhbmQKKyAgICAgdGlsIGxldHQg5SBrdW5uZSBicnVrZSBWaW0gc29tIGVuIGVkaXRvciB0aWwgYWxsZSBmb3Jt5WwuCisKKyAgICAgVGlkZW4gc29tIGtyZXZlcyBmb3Ig5SBn5SBnamVubm9tIGRlbm5lIGlubmb4cmluZ2VuIHRhciBjYS4gMjUtMzAKKyAgICAgbWludXR0ZXIsIGF2aGVuZ2lnIGF2IGh2b3IgbXllIHRpZCBkdSBicnVrZXIgdGlsIGVrc3BlcmltZW50ZXJpbmcuCisKKyAgICAgS29tbWFuZG9lbmUgaSBsZWtzam9uZW5lIHZpbCBtb2RpZmlzZXJlIHRla3N0ZW4uIExhZyBlbiBrb3BpIGF2IGRlbm5lCisgICAgIGZpbGVuIHNvbSBkdSBrYW4g+HZlIGRlZyBw5SAoaHZpcyBkdSBravhydGUgq3ZpbXR1dG9yuy1rb21tYW5kb2VuLCBlcgorICAgICBkZXR0ZSBhbGxlcmVkZSBlbiBrb3BpKS4KKworICAgICBEZXQgZXIgdmlrdGlnIOUgaHVza2UgYXQgZGVubmUgaW5uZvhyaW5nZW4gZXIgYmVyZWduZXQgcOUgbOZyaW5nCisgICAgIGdqZW5ub20gYnJ1ay4gRGV0IGJldHlyIGF0IGR1IG3lIHV0ZvhyZSBrb21tYW5kb2VuZSBmb3Ig5SBs5nJlIGRlbQorICAgICBza2lra2VsaWcuIEh2aXMgZHUgYmFyZSBsZXNlciB0ZWtzdGVuLCB2aWwgZHUgZ2xlbW1lIGtvbW1hbmRvZW5lIQorCisgICAgIEb4cnN0IGF2IGFsdCwgc2pla2sgYXQgq0NhcHMgTG9ja7sgSUtLRSBlciBha3RpdiBvZyB0cnlrayCrarstdGFzdGVuCisgICAgIGhlbHQgdGlsIGxla3Nqb24gMS4xIGZ5bGxlciBza2plcm1lbi4KK35+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+fgorCQkgICAgICBMZWtzam9uIDEuMTogIEZMWVRUSU5HIEFWIE1BUkvYUkVOCisKKworICAgICAgICoqIEZvciDlIGZseXR0ZSBtYXJr+HJlbiwgdHJ5a2sgdGFzdGVuZSBoLCBqLCBrLCBsIHNvbSB2aXN0LiAqKgorCSAgICAgXgorCSAgICAgawkJVGlwczogaC10YXN0ZW4gZXIgdGlsIHZlbnN0cmUgb2cgZmx5dHRlciB0aWwgdmVuc3RyZS4KKyAgICAgICA8IGgJIGwgPgkgICAgICBsLXRhc3RlbiBlciB0aWwgaPh5cmUgb2cgZmx5dHRlciB0aWwgaPh5cmUuCisJICAgICBqCQkgICAgICBqLXRhc3RlbiBzZXIgdXQgc29tIGVuIHBpbCBzb20gcGVrZXIgbmVkb3Zlci4KKwkgICAgIHYKKyAgMS4gRmx5dHQgbWFya/hyZW4gcnVuZHQgcOUgc2tqZXJtZW4gdGlsIGR1IGhhciBm5XR0IGRldCBpbm4gaSBmaW5ncmVuZS4KKworICAyLiBIb2xkIGlubmUgbmVkb3ZlcnRhc3RlbiAoaikgdGlsIGRlbiByZXBldGVyZXIuCistLS0+IE7lIHZldCBkdSBodm9yZGFuIGR1IGJldmVnZXIgZGVnIHRpbCBuZXN0ZSBsZWtzam9uLgorCisgIDMuIEflIHRpbCBsZWtzam9uIDEuMiB2ZWQgaGplbHAgYXYgbmVkb3ZlcnRhc3Rlbi4KKworTUVSSzogSHZpcyBkdSBibGlyIHVzaWtrZXIgcOUgbm9lIGR1IGhhciBza3JldmV0LCB0cnlrayA8RVNDPiBmb3Ig5SBn5SB0aWwKKyAgICAgIG5vcm1hbG1vZHVzLiBTa3JpdiBkZXJldHRlciBrb21tYW5kb2VuIGR1IPhuc2tldC4KKworTUVSSzogUGlsdGFzdGVuZSBza2FsIG9nc+Ugdmlya2UuIE1lbiB2ZWQg5SBicnVrZSBoamtsIHZpbCBkdSB25nJlIGkgc3RhbmQgdGlsCisgICAgICDlIGJldmVnZSBtYXJr+HJlbiBteWUgcmFza2VyZSBu5XIgZHUgZXIgYmxpdHQgdmFudCB0aWwgZGV0LgorCit+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+fn4KKwkJICBMZWtzam9uIDEuMjogT1BQU1RBUlQgT0cgQVZTTFVUTklORyBBViBWSU0KKworCisgICEhIE1FUks6IEb4ciBkdSB1dGb4cmVyIG5vZW4gYXYgcHVua3RlbmUgbmVkZW5mb3IsIGxlcyBoZWxlIGxla3Nqb25lbiEKKworICAxLiBUcnlrayA8RVNDPi10YXN0ZW4gKGZvciDlIGZvcnNpa3JlIGRlZyBvbSBhdCBkdSBlciBpIG5vcm1hbG1vZHVzKS4KKworICAyLiBTa3JpdjogIDpxISA8RU5URVI+CisKKy0tLT4gRGV0dGUgYXZzbHV0dGVyIGVkaXRvcmVuIFVURU4gYXQgZW5kcmluZ2VyIGJsaXIgbGFncmV0LgorICAgICBIdmlzIGR1IHZpbCBsYWdyZSBlbmRyaW5nZW5lIG9nIGF2c2x1dHRlLCBza3JpdmVyIGR1OgorCSAgICAgOndxIDxFTlRFUj4KKworICAzLiBO5XIgZHUgc2VyIGtvbW1hbmRvbGluamVuIGkgc2thbGxldCwgc2tyaXYga29tbWFuZG9lbiBzb20gc3RhcnRldCBkZW5uZQorICAgICBpbm5m+HJpbmdlbi4gRGV0IGthbiB25nJlOiAgdmltdHV0b3IgPEVOVEVSPgorICAgICBOb3JtYWx0IHZpbCBkdSBicnVrZToJIHZpbSB0dXRvciA8RU5URVI+CisKKy0tLT4gTWVkIKt2aW27IG1lbmVzIFZpbS1lZGl0b3Jlbiwgq3R1dG9yuyBlciBmaWxlbiBzb20gZHUgdmlsIHJlZGlnZXJlLgorCisgIDQuIEh2aXMgZHUgZXIgc2lra2VyIHDlIGF0IGR1IGh1c2tlciBkZXR0ZSwgdXRm+HIgcHVua3RlbmUgMSB0aWwgMyBmb3Ig5QorICAgICBhdnNsdXR0ZSBvZyBzdGFydGUgZWRpdG9yZW4gcOUgbnl0dC4gRGVyZXR0ZXIgZmx5dHRlciBkdSBtYXJr+HJlbiBuZWQgdGlsCisgICAgIGxla3Nqb24gMS4zLgorfn5+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+CisJCSBMZWtzam9uIDEuMzogUkVESUdFUklORyBBViBURUtTVCAtLSBTTEVUVElORworCisKKwkgICoqIFRyeWtrIHRhc3RlbiAgeCAgZm9yIOUgc2xldHRlIHRlZ25ldCB1bmRlciBtYXJr+HJlbi4gKioKKworICAxLiBGbHl0dCBtYXJr+HJlbiB0aWwgZGVuIGb4cnN0ZSBsaW5qZW4gbWVya2V0IG1lZCAgLS0tPiAgLgorCisgIDIuIEZvciDlIG9yZG5lIGZlaWxlbmUgcOUgbGluamVuLCBmbHl0dCBtYXJr+HJlbiB0aWwgZGVuIGVyIG9wcOUgdGVnbmV0IHNvbQorICAgICBza2FsIHNsZXR0ZXMuCisKKyAgMy4gVHJ5a2sgdGFzdGVuICB4ICBmb3Ig5SBzbGV0dGUgZGV0IHX4bnNrZWRlIHRlZ25ldC4KKworICA0LiBSZXBldGVyIHB1bmt0IDIgdGlsIDQgdGlsIHNldG5pbmdlbiBlciBsaWsgZGVuIHNvbSBlciB1bmRlci4KKworLS0tPiBLa3VhIGhvcHBldHQgb3Z2ZXJyIG3l5eXlbmVubi4KKy0tLT4gS3VhIGhvcHBldCBvdmVyIG3lbmVuLgorCisgIDUuIE7lIHNvbSBsaW5qZW4gZXIga29ycmVrdCwgZ+UgdGlsIGxla3Nqb24gMS40LgorCitIVVNLOiBO5XIgZHUgZ+VyIGdqZW5ub20gaW5uZvhyaW5nZW4sIGlra2UgYmFyZSBwcvh2IOUgaHVza2Uga29tbWFuZG9lbmUsIG1lbgorICAgICAgYnJ1ayBkZW0gaGVsdCB0aWwgZGUgc2l0dGVyLgorCit+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+fn4KKwkJTGVrc2pvbiAxLjQ6IFJFRElHRVJJTkcgQVYgVEVLU1QgLS0gSU5OU0VUVElORworCisKKyAgICAgICAqKiBO5XIgZHUgZXIgaSBub3JtYWxtb2R1cywgdHJ5a2sgIGkgIGZvciDlIHNldHRlIGlubiB0ZWtzdC4gKioKKworICAxLiBGbHl0dCBtYXJr+HJlbiB0aWwgZGVuIGb4cnN0ZSBsaW5qZW4gc29tIGVyIG1lcmtldCBtZWQgIC0tLT4gIC4KKworICAyLiBGb3Ig5SBnavhyZSBkZW4gZvhyc3RlIGxpbmplbiBsaWsgZGVuIGFuZHJlLCBmbHl0dCBtYXJr+HJlbiB0aWwgZGVuIHN05XIKKyAgICAgcOUgdGVnbmV0IEVUVEVSIHBvc2lzam9uZW4gZGVyIHRla3N0ZW4gc2thbCBzZXR0ZXMgaW5uLgorCisgIDMuIFRyeWtrICBpICBvZyBza3JpdiBpbm4gdGVrc3RlbiBzb20gbWFuZ2xlci4KKworICA0LiBFdHRlcmh2ZXJ0IHNvbSBodmVyIGZlaWwgZXIgZmlrc2V0LCB0cnlrayA8RVNDPiBmb3Ig5SByZXR1cm5lcmUgdGlsCisgICAgIG5vcm1hbG1vZHVzLiBSZXBldGVyIHB1bmt0IDIgdGlsIDQgdGlsIHNldG5pbmdlbiBlciBrb3JyZWt0LgorCistLS0+IERldCBlciB0a3N0IHNvbSBtbmdsciAuCistLS0+IERldCBlciBnYW5za2UgbXllIHRla3N0IHNvbSBtYW5nbGVyIGhlci4KKworICA1LiBO5XIgZHUgZvhsZXIgZGVnIGtvbWZvcnRhYmVsIG1lZCDlIHNldHRlIGlubiB0ZWtzdCwgZ+UgdGlsIG9wcHN1bW1lcmluZ2VuCisgICAgIG5lZGVuZm9yLgorCisKK35+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+fgorCQkJICBPUFBTVU1NRVJJTkcgQVYgTEVLU0pPTiAxCisKKworICAxLiBNYXJr+HJlbiBiZXZlZ2VzIHZlZCBoamVscCBhdiBwaWx0YXN0ZW5lIGVsbGVyIGhqa2wtdGFzdGVuZS4KKwkgaCAodmVuc3RyZSkJIGogKG5lZCkgICAgIGsgKG9wcCkJIGwgKGj4eXJlKQorCisgIDIuIEZvciDlIHN0YXJ0ZSBWaW0gKGZyYSBza2FsbC1rb21tYW5kb2xpbmplbiksIHNrcml2OiAgdmltIEZJTE5BVk4gPEVOVEVSPgorCisgIDMuIEZvciDlIGF2c2x1dHRlIFZpbSwgc2tyaXY6ICA8RVNDPiA6cSEgPEVOVEVSPiAgZm9yIOUgZm9ya2FzdGUgZm9yYW5kcmluZ2VyLgorCQkgICBFTExFUiBza3JpdjogIDxFU0M+IDp3cSA8RU5URVI+ICBmb3Ig5SBsYWdyZSBmb3JhbmRyaW5nZW5lLgorCisgIDQuIEZvciDlIHNsZXR0ZSBldCB0ZWduIHVuZGVyIG1hcmv4cmVuIG7lciBkdSBlciBpIG5vcm1hbG1vZHVzLCB0cnlrayAgeAorCisgIDUuIEZvciDlIHNldHRlIGlubiB0ZWtzdCB2ZWQgbWFya/hyZW4gbuVyIGR1IGVyIGkgbm9ybWFsbW9kdXMsIHRyeWtrOgorCSBpICAgIFtza3JpdiBpbm4gdGVrc3Rlbl0gICAgPEVTQz4KKworTUVSSzogTuVyIGR1IHRyeWtrZXIgPEVTQz4gZ+VyIGR1IHRpbCBub3JtYWxtb2R1cyBlbGxlciBkdSBhdmJyeXRlciBlbiB1+G5za2V0CisgICAgICBvZyBkZWx2aXMgZnVsbGb4cnQga29tbWFuZG8uCisKKyAgTuUga2FuIGR1IGflIHZpZGVyZSB0aWwgbGVrc2pvbiAyLgorCisKK35+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+fgorCQkJTGVrc2pvbiAyLjE6IFNMRVRURUtPTU1BTkRPRVIKKworCisJICAgICAqKiBUcnlrayAgZHcgIGZvciDlIHNsZXR0ZSB0aWwgc2x1dHRlbiBhdiBldCBvcmQuICoqCisKKyAgMS4gVHJ5a2sgPEVTQz4gZm9yIOUgduZyZSBzaWtrZXIgcOUgYXQgZHUgZXIgaSBub3JtYWxtb2R1cy4KKworICAyLiBGbHl0dCBtYXJr+HJlbiB0aWwgZGVuIGb4cnN0ZSBsaW5qZW4gbmVkZW5mb3IgbWVya2V0ICAtLS0+ICAuCisKKyAgMy4gRmx5dHQgbWFya/hyZW4gdGlsIGJlZ3lubmVsc2VuIGF2IG9yZGV0IHNvbSBza2FsIHNsZXR0ZXMuCisKKyAgNC4gVHJ5a2sgIGR3CW9nIG9yZGV0IHZpbCBmb3JzdmlubmUuCisKK01FUks6IEJva3N0YXZlbmUgdmlsIGtvbW1lIHRpbCBzeW5lIHDlIGRlbiBuZWRlcnN0ZSBsaW5qZW4gcOUgc2tqZXJtZW4KKyAgICAgIGV0dGVyaHZlcnQgc29tIGR1IHNrcml2ZXIgZGVtLiBIdmlzIGR1IHNrcml2ZXIgZmVpbCwgdHJ5a2sgPEVTQz4gb2cKKyAgICAgIHN0YXJ0IHDlIG55dHQuCisKKy0tLT4gRGV0IGVyIGFndXJrIHRyZSBvcmQgZXBsZSBzb20gaWtrZSBo+HJlciBw5nJlIGhqZW1tZSBpIGRlbm5lIHNldG5pbmdlbi4KKy0tLT4gRGV0IGVyIHRyZSBvcmQgc29tIGlra2UgaPhyZXIgaGplbW1lIGkgZGVubmUgc2V0bmluZ2VuLgorCisgIDUuIFJlcGV0ZXIgcHVua3QgMyBvZyA0IHRpbCBkZW4gZvhyc3RlIHNldG5pbmdlbiBlciBsaWsgZGVuIGFuZHJlLiBH5QorICAgICBkZXJldHRlciB0aWwgbGVrc2pvbiAyLjIuCit+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+fn4KKwkJICAgICBMZWtzam9uIDIuMjogRkxFUkUgU0xFVFRFS09NTUFORE9FUgorCisKKwkgICAgICoqIFRyeWtrICBkJCAgZm9yIOUgc2xldHRlIHRpbCBzbHV0dGVuIGF2IGxpbmplbi4gKioKKworICAxLiBUcnlrayA8RVNDPiBmb3Ig5SB25nJlIHNpa2tlciBw5SBhdCBkdSBlciBpIG5vcm1hbG1vZHVzLgorCisgIDIuIEZseXR0IG1hcmv4cmVuIHRpbCBsaW5qZW4gbmVkZW5mb3IgbWVya2V0CS0tLT4gIC4KKworICAzLiBGbHl0dCBtYXJr+HJlbiB0aWwgcHVua3RldCBkZXIgbGluamVuIHNrYWwga3V0dGVzIChFVFRFUiBm+HJzdGUgcHVua3R1bSkuCisKKyAgNC4gVHJ5a2sgIGQkCWZvciDlIHNsZXR0ZSBhbHQgdGlsIHNsdXR0ZW4gYXYgbGluamVuLgorCistLS0+IE5vZW4gc2tyZXYgc2x1dHRlbiBw5SBsaW5qZW4gZW4gZ2FuZyBmb3IgbXllLiBw5SBsaW5qZW4gZW4gZ2FuZyBmb3IgbXllLgorCisgIDUuIEflIHRpbCBsZWtzam9uIDIuMyBmb3Ig5SBmb3JzdOUgaHZhIHNvbSBza2plci4KKworCisKKworCisKK35+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+fgorCQkgICAgTGVrc2pvbiAyLjM6IE9NIEtPTU1BTkRPRVIgT0cgT0JKRUtURVIKKworCisgIEZvcm1hdGV0IGZvciBzbGV0dGVrb21tYW5kb2VuICBkICBlciBzb20gZvhsZ2VyOgorCisJW251bW1lcl0gIGQgIG9iamVrdAlFTExFUgkgIGQgIFtudW1tZXJdICBvYmpla3QKKworICBEZXI6CisgICAgbnVtbWVyIC0tIGh2b3IgbWFuZ2UgZ2FuZ2VyIGtvbW1hbmRvZW4gdXRm+HJlcyAodmFsZ2ZyaSwgc3RhbmRhcmQ9MSkuCisgICAgZAkgICAtLSBzZWx2ZSBzbGV0dGVrb21tYW5kb2VuLgorICAgIG9iamVrdCAtLSBodmEga29tbWFuZG9lbiB2aWwgb3BlcmVyZSBw5SAobGlzdGV0IHV0IG5lZGVuZm9yKS4KKworICBFbiBrb3J0IGxpc3RlIG1lZCBvYmpla3RlcjoKKyAgICB3IC0tIGZyYSBtYXJr+HJlbiB0aWwgc2x1dHRlbiBhdiBvcmRldCwgaW5rbHVkZXJ0IG1lbGxvbXJvbS4KKyAgICBlIC0tIGZyYSBtYXJr+HJlbiB0aWwgc2x1dHRlbiBhdiBvcmRldCwgSUtLRSBpbmtsdWRlcnQgbWVsbG9tcm9tLgorICAgICQgLS0gZnJhIG1hcmv4cmVuIHRpbCBzbHV0dGVuIGF2IGxpbmplbi4KKworTUVSSzogRm9yIGRlbiBldmVudHlybHlzdG5lOiBTa3JpdmluZyBhdiBrdW4gb2JqZWt0ZXQgaSBub3JtYWxtb2R1cyB1dGVuIGVuCisgICAgICBrb21tYW5kbyB2aWwgZmx5dHRlIG1hcmv4cmVuIHRpbCBvYmpla3RldCBpIGxpc3Rlbi4KKworCisKK35+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+fgorCSAgICAgTGVrc2pvbiAyLjQ6IEVUIFVOTlRBSyBGUkEgq0tPTU1BTkRPLU9CSkVLVLstUkVHRUxFTgorCisKKwkJICoqIFRyeWtrICBkZCAgZm9yIOUgc2xldHRlIGVuIGhlbCBsaW5qZS4gKioKKworICBQ5SBncnVubiBhdiBhdCBzbGV0dGluZyBhdiBsaW5qZXIgZXIgbXllIGJydWt0LCBmYW50IHV0dmlrbGVybmUgYXYgVmkgdXQgYXQKKyAgZGV0IHZpbCB25nJlIGxldHRlcmUg5SByZXR0IG9nIHNsZXR0IHRyeWtrZSB0byCrZLstZXIgZXR0ZXIgaHZlcmFuZHJlIGZvciDlCisgIHNsZXR0ZSBlbiBsaW5qZS4KKworICAxLiBGbHl0dCBtYXJr+HJlbiB0aWwgZGVuIGFuZHJlIGxpbmplbiBpIHZlcnNldCBuZWRlbmZvci4KKyAgMi4gVHJ5a2sgIGRkCWZvciDlIHNsZXR0ZSBsaW5qZW4uCisgIDMuIEZseXR0IGRlcmV0dGVyIHRpbCBkZW4gZmplcmRlIGxpbmplbi4KKyAgNC4gVHJ5a2sgIDJkZCAgKGh1c2sgq251bW1lci1rb21tYW5kby1vYmpla3S7KSBmb3Ig5SBzbGV0dGUgZGlzc2UgdG8KKyAgICAgbGluamVuZS4KKworICAgICAgIDEpIFJvc2VyIGVyIHL4ZGUKKyAgICAgICAyKSBHavhybWUgZXIgZ/h5LAorICAgICAgIDMpIEZpb2xlciBlciBibOUsCisgICAgICAgNCkgSmVnIGhhciBlbiBiaWwsCisgICAgICAgNSkgS2xva2tlciB2aXNlciB0aWRlbiwKKyAgICAgICA2KSBEcnVlciBlciBz+HRlCisgICAgICAgNykgT2cgZHUgZXIgbGlrZXPlLgorfn5+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+CisJCQlMZWtzam9uIDIuNTogQU5HUkUtS09NTUFORE9FTgorCisKKyAgKiogVHJ5a2sgIHUgIGZvciDlIGFuZ3JlIHNpc3RlIGtvbW1hbmRvLCAgVSAgZm9yIOUgZmlrc2UgZW4gaGVsIGxpbmplLiAqKgorCisgIDEuIEZseXR0IG1hcmv4cmVuIHRpbCBsaW5qZW4gbmVkZW5mb3IgbWVya2V0CS0tLT4gIG9nIHBsYXNzZXIgZGVuIHDlIGRlbgorICAgICBm+HJzdGUgZmVpbGVuLgorICAyLiBUcnlrayAgeCAgZm9yIOUgc2xldHRlIGRldCBm+HJzdGUgdfhuc2tlZGUgdGVnbmV0LgorICAzLiBUcnlrayBz5SAgdSAgZm9yIOUgYW5ncmUgZGVuIHNpc3RlIHV0ZvhydGUga29tbWFuZG9lbi4KKyAgNC4gRGVyZXR0ZXIgb3JkbmVyIGR1IGFsbGUgZmVpbGVuZSBw5SBsaW5qZW5lIHZlZCDlIGJydWtlICB4CWtvbW1hbmRvZW4uCisgIDUuIFRyeWtrIG7lIGVuIHN0b3IgIFUgIGZvciDlIHNldHRlIGxpbmplbiB0aWxiYWtlIHRpbCBkZXQgZGVuIHZhci4KKyAgNi4gVHJ5a2sgIHUgIG5vZW4gZ2FuZ2VyIGZvciDlIGFuZ3JlCVUgIG9nIGZvcmVn5WVuZGUga29tbWFuZG9lci4KKyAgNy4gRGVyZXR0ZXIgdHJ5a2tlciBkdSAgQ3RybC1yICAoaG9sZCBDdHJsIG5lZGUgbWVucyBkdSB0cnlra2VyIKtyuykgbm9lbgorICAgICBnYW5nZXIgZm9yIOUgZ2plbm9wcHJldHRlIGtvbW1hbmRvZW5lIChvbWdq+HJlIGFuZ3Jla29tbWFuZG9lbmUpLgorCistLS0+IFJSZXBhcmVyIGZlaWlsZW5lIHDl5SBkZW5uZSBsaW5ubmplbiBvb2cgZXJzc3N0YXR0IGRlbSBtZWVkIGFuZ3JlLgorCisgIDguIERldHRlIGVyIG1lZ2V0IG55dHRpZ2Uga29tbWFuZG9lci4gTuUga2FuIGR1IGflIHRpbCBvcHBzdW1tZXJpbmdlbiBhdgorICAgICBsZWtzam9uIDIuCisKKworCit+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+fn4KKwkJCSAgT1BQU1VNTUVSSU5HIEFWIExFS1NKT04gMgorCisKKyAgMS4gRm9yIOUgc2xldHRlIGZyYSBtYXJr+HJlbiB0aWwgc2x1dHRlbiBhdiBldCBvcmQsIHRyeWtrOiAgZHcKKworICAyLiBGb3Ig5SBzbGV0dGUgZnJhIG1hcmv4cmVuIHRpbCBzbHV0dGVuIGF2IGVuIGxpbmplLCB0cnlrazoJZCQKKworICAzLiBGb3Ig5SBzbGV0dGUgZW4gaGVsIGxpbmplLCB0cnlrazoJZGQKKworICA0LiBGb3JtYXRldCBmb3IgZW4ga29tbWFuZG8gaSBub3JtYWxtb2R1cyBlcjoKKworICAgICAgIFtudW1tZXJdICBrb21tYW5kbyAgb2JqZWt0ICAgIEVMTEVSICAgIGtvbW1hbmRvCVtudW1tZXJdICBvYmpla3QKKyAgICAgZGVyOgorICAgICAgIG51bW1lcgktLSBodm9yIG1hbmdlIGdhbmdlciBrb21tYW5kb2VuIHNrYWwgcmVwZXRlcmVzCisgICAgICAga29tbWFuZG8gLS0gaHZhIHNvbSBza2FsIGdq+HJlcywgZi5la3MuCWQgIGZvciDlIHNsZXR0ZQorICAgICAgIG9iamVrdAktLSBodmEga29tbWFuZG9lbiBza2FsIG9wZXJlcmUgcOUsIGVrc2VtcGVsdmlzCXcgIChvcmQpLAorCQkgICAkICAodGlsIHNsdXR0ZW4gYXYgbGluamVuKSBvZyBz5SB2aWRlcmUuCisKKyAgNS4gRm9yIOUgYW5ncmUgdGlkbGlnZXJlIGtvbW1hbmRvZXIsIHNrcml2ICB1ICAobGl0ZW4gdSkKKyAgICAgRm9yIOUgYW5ncmUgYWxsZSBmb3JhbmRyaW5nZXIgcOUgZW4gbGluamUsIHNrcml2ICBVICAoc3RvciBVKQorICAgICBGb3Ig5SBvbWdq+HJlIGFuZ3JpbmdlbiwgdHJ5a2sgIEN0cmwtcgorCit+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+fn4KKwkJICAgICAgTGVrc2pvbiAzLjE6IKtMSU0gSU5Ouy1LT01NQU5ET0VOCisKKworICAgKiogVHJ5a2sgIHAJZm9yIOUgbGltZSBpbm4gZGVuIHNpc3RlIHNsZXR0ZWRlIHRla3N0ZW4gZXR0ZXIgbWFya/hyZW4gKioKKworICAxLiBGbHl0dCBtYXJr+HJlbiB0aWwgZGVuIGb4cnN0ZSBsaW5qZW4gaSBsaXN0ZW4gbmVkZW5mb3IuCisKKyAgMi4gVHJ5a2sgIGRkCWZvciDlIHNsZXR0ZSBsaW5qZW4gb2cgbGFncmUgZGVuIGkgdXRrbGlwcHN0YXZsZW4gdGlsIFZpbS4KKworICAzLiBGbHl0dCBtYXJr+HJlbiB0aWwgbGluamVuIE9WRVIgcG9zaXNqb25lbiBsaW5qZW4gc2thbCBzZXR0ZXMgaW5uLgorCisgIDQuIE1lbnMgZHUgZXIgaSBub3JtYWxtb2R1cywgdHJ5a2sgIHAgIGZvciDlIGVyc3RhdHRlIGxpbmplbi4KKworICA1LiBSZXBldGVyIHB1bmt0IDIgdGlsIDQgaGVsdCB0aWwgbGluamVuZSBlciBpIHJpa3RpZyByZWtrZWb4bGdlLgorCisgICAgICAgZCkgS2FuIGR1IG9nc+UgbOZyZT8KKyAgICAgICBiKSBGaW9sZXIgZXIgYmzlLAorICAgICAgIGMpIEludGVsbGlnZW5zIG3lIGzmcmVzLAorICAgICAgIGEpIFJvc2VyIGVyIHL4ZGUsCisKKworCit+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+fn4KKwkJICAgICAgTGVrc2pvbiAzLjI6IKtFUlNUQVRUuy1LT01NQU5ET0VOCisKKworICAgICAgICoqIFRyeWtrICByICBvZyBldCB0ZWduIGZvciDlIGVyc3RhdHRlIHRlZ25ldCB1bmRlciBtYXJr+HJlbi4gKioKKworICAxLiBGbHl0dCBtYXJr+HJlbiB0aWwgZGVuIGb4cnN0ZSBsaW5qZW4gbmVkZW5mb3IgbWVya2V0ICAtLS0+ICAuCisKKyAgMi4gRmx5dHQgbWFya/hyZW4gc+UgZGVuIHN05XIgb3Bw5SBkZW4gZvhyc3RlIGZlaWxlbi4KKworICAzLiBUcnlrayAgciAgb2cgZGVyZXR0ZXIgdGVnbmV0IHNvbSBza2FsIGVyc3RhdHRlIGRldCBzb20gZXIgZmVpbC4KKworICA0LiBSZXBldGVyIHB1bmt0IDIgb2cgMyB0aWwgZGVuIGb4cnN0ZSBsaW5qZW4gZXIga29ycmVrdC4KKworLS0tPiBEYSBkZm5uZSBseW5qeG4gYmxlIHprcmV2ZXQsIHZhciBkZXQgbvhlbiBzb20gdHJ5a2tldCBmZWl0ZSB0YXN0ZXIhCistLS0+IERhIGRlbm5lIGxpbmplbiBibGUgc2tyZXZldCwgdmFyIGRldCBub2VuIHNvbSB0cnlra2V0IGZlaWxlIHRhc3RlciEKKworICA1LiBH5SB2aWRlcmUgdGlsIGxla3Nqb24gMy4yLgorCitNRVJLOiBIdXNrIGF0IGR1IGL4ciBs5nJlIHZlZCDlIEJSVUtFLCBpa2tlIHB1Z2dlLgorCisKKworfn5+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+CisJCSAgICAgIExla3Nqb24gMy4zOiCrRk9SQU5EUkW7LUtPTU1BTkRPRU4KKworCisJKiogRm9yIOUgZm9yYW5kcmUgZW4gZGVsIGF2IGVsbGVyIGV0IGhlbHQgb3JkLCB0cnlrayAgY3cgIC4gKioKKworICAxLiBGbHl0dCBtYXJr+HJlbiB0aWwgZGVuIGb4cnN0ZSBsaW5qZW4gbmVkZW5mb3Igc29tIGVyIG1lcmtldCAgLS0tPgkuCisKKyAgMi4gUGxhc3NlciBtYXJr+HJlbiBw5SCrdbstZW4gaSCrbHViandyuy4KKworICAzLiBUcnlrayAgY3cJb2cgZGV0IGtvcnJla3RlIG9yZGV0IChpIGRldHRlIHRpbGZlbGxldCwgc2tyaXYgq2luamVuuy4pCisKKyAgNC4gVHJ5a2sgPEVTQz4gb2cgZ+UgdGlsIGRlbiBuZXN0ZSBmZWlsZW4gKGRldCBm+HJzdGUgdGVnbmV0IHNvbSBza2FsCisgICAgIGZvcmFuZHJlcykuCisKKyAgNS4gUmVwZXRlciBwdW5rdCAzIG9nIDQgaGVsdCB0aWwgZGVuIGb4cnN0ZSBzZXRuaW5nZW4gZXIgbGlrIGRlbiBhbmRyZS4KKworLS0tPiBEZW5uZSBsdWJqd3IgaGFyIG5vZW4gd2doIHNvbSBt5SBmb3Jrd+VwIG1lZCCrZm9y5mt6cnlhc7sta29tbWFuZG9lbi4KKy0tLT4gRGVubmUgbGluamVuIGhhciBub2VuIG9yZCBzb20gbeUgZm9yYW5kcmVzIG1lZCCrZm9yYW5kcmW7LWtvbW1hbmRvZW4uCisKKyAgVuZyIG9wcG1lcmtzb20gcOUgYXQJY3cgIGlra2UgYmFyZSBmb3JhbmRyZXIgb3JkZXQsIG1lbiBvZ3PlIGflciBpbm4gaQorICBpbm5zZXR0aW5nc21vZHVzLgorCit+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+fn4KKwkJTGVrc2pvbiAzLjQ6IEZMRVJFIEZPUkFORFJJTkdFUiBWRUQgQlJVSyBBViBjCisKKworICAqKiCrRm9yYW5kcmW7LWtvbW1hbmRvZW4gYmxpciBicnVrdCBtZWQgZGUgc2FtbWUgb2JqZWt0ZW5lIHNvbSCrc2xldHS7LiAqKgorCisgIDEuIKtGb3JhbmRyZbsta29tbWFuZG9lbiBmdW5nZXJlciBw5SBzYW1tZSBt5XRlIHNvbSCrc2xldHS7LiBGb3JtYXRldCBlcjoKKworICAgICAgIFtudW1tZXJdICBjICBvYmpla3QgICAgRUxMRVIgICAgYyAgW251bW1lcl0gIG9iamVrdAorCisgIDIuIE9iamVrdGVuZSBlciBvZ3PlIGRlIHNhbW1lLCBzb20gZm9yIGVrc2VtcGVsICB3ICAob3JkKSwgICQgIChzbHV0dGVuIGF2CisgICAgIGVuIGxpbmplKSBvZyBz5SB2aWRlcmUuCisKKyAgMy4gR+UgdGlsIGRlbiBm+HJzdGUgbGluamVuIG5lZGVuZm9yIHNvbSBlciBtZXJrZXQgIC0tLT4gIC4KKworICA0LiBGbHl0dCBtYXJr+HJlbiB0aWwgZGVuIGb4cnN0ZSBmZWlsZW4uCisKKyAgNS4gU2tyaXYgIGMkCWZvciDlIGZvcmFuZHJlIHJlc3RlbiBhdiBsaW5qZW4gbGlrIGRlbiBhbmRyZSBvZyB0cnlrayA8RVNDPi4KKworLS0tPiBTbHV0dGVuIHDlIGRlbm5lIGxpbmplbiB0cmVuZ2VyIGxpdHQgaGplbHAgZm9yIOUgZ2r4cmUgZGVuIGxpayBkZW4gbmVzdGUuCistLS0+IFNsdXR0ZW4gcOUgZGVubmUgbGluamVuIHRyZW5nZXIg5SBibGkgcmV0dGV0IHZlZCBicnVrIGF2IKtjJLsta29tbWFuZG9lbi4KKworCit+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+fn4KKwkJCSAgT1BQU1VNTUVSSU5HIEFWIExFS1NKT04gMworCisKKyAgMS4gRm9yIOUgZXJzdGF0dGUgdGVrc3Qgc29tIGFsbGVyZWRlIGVyIGJsaXR0IHNsZXR0ZXQsIHRyeWtrCXAgIC4gRGV0dGUKKyAgICAgbGltZXIgaW5uIGRlbiBzbGV0dGVkZSB0ZWtzdGVuIEVUVEVSIG1hcmv4cmVuIChodmlzIGVuIGxpbmplIGJsZSBzbGV0dGV0CisgICAgIHZpbCBkZW4gYmxpIGxpbXQgaW5uIHDlIGxpbmplbiB1bmRlciBtYXJr+HJlbikuCisKKyAgMi4gRm9yIOUgZXJzdGF0dGUgZXQgdGVnbiB1bmRlciBtYXJr+HJlbiwgdHJ5a2sgIHIgIG9nIGRlcmV0dGVyIHRlZ25ldCBzb20KKyAgICAgc2thbCBlcnN0YXR0ZSBkZXQgb3JpZ2luYWxlIHRlZ25ldC4KKworICAzLiCrRm9yYW5kcmW7LWtvbW1hbmRvZW4gbGFyIGRlZyBmb3JhbmRyZSBkZXQgc3Blc2lmaXNlcnRlIG9iamVrdGV0IGZyYQorICAgICBtYXJr+HJlbiB0aWwgc2x1dHRlbiBhdiBvYmpla3RldCwgZi5la3MuOiBUcnlrayAgY3cgIGZvciDlIGZvcmFuZHJlIGZyYQorICAgICBtYXJr+HJlbiB0aWwgc2x1dHRlbiBhdiBvcmRldCwgIGMkICBmb3Ig5SBmb3JhbmRyZSB0aWwgc2x1dHRlbiBhdiBsaW5qZW4uCisKKyAgNC4gRm9ybWF0ZXQgZm9yIKtmb3JhbmRyZbsgZXI6CisKKwkgW251bW1lcl0gIGMgIG9iamVrdAlFTExFUgkgYyAgW251bW1lcl0gIG9iamVrdAorCisgIE7lIGthbiBkdSBn5SB0aWwgbmVzdGUgbGVrc2pvbi4KKworCisKK35+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+fgorCQkgICAgICBMZWtzam9uIDQuMTogUE9TSVNKT04gT0cgRklMU1RBVFVTCisKKworICoqIFRyeWtrIEN0cmwtZyBmb3Ig5SB2aXNlIHBvc2lzam9uZW4gaSBmaWxlbiBvZyBmaWxzdGF0dXNlbi4KKyAgICBUcnlrayBTaGlmdC1HIGZvciDlIGflIHRpbCBlbiBzcGVzaWZpa2sgbGluamUgaSBmaWxlbi4gKioKKworTUVSSzogTGVzIGhlbGUgbGVrc2pvbmVuIGb4ciBkdSB1dGb4cmVyIG5vZW4gYXYgcHVua3RlbmUhCisKKyAgMS4gSG9sZCBuZWRlIEN0cmwtdGFzdGVuIG9nIHRyeWtrICBnCS4gRW4gc3RhdHVzbGluamUgdmlsIGtvbW1lIHRpbCBzeW5lIHDlCisgICAgIGJ1bm5lbiBhdiBza2plcm1lbiBtZWQgZmlsbmF2bmV0IG9nIGh2aWxrZW4gbGluamUgbWFya/hyZW4gZXIgcOUuIEh1c2sKKyAgICAgbGluamVudW1tZXJldCBmb3IgYnJ1ayBpIHN0ZWcgMy4KKworICAyLiBUcnlrayBTaGlmdC1HIGZvciDlIGflIHRpbCBidW5uZW4gYXYgZmlsZW4uCisKKyAgMy4gU2tyaXYgaW5uIGxpbmplbnVtbWVyZXQgZHUgdmFyIHDlIG9nIGRlcmV0dGVyIFNoaWZ0LUcuIERldHRlIHZpbCBm+HJlIGRlZworICAgICB0aWxiYWtlIHRpbCBsaW5qZW4gZHUgdmFyIHDlIGRhIGR1IHRyeWtrZXQgQ3RybC1nLiAoTuVyIGR1IHNrcml2ZXIgaW5uCisgICAgIG51bW1lcmV0LCB2aWwgZGV0IElLS0UgYmxpIHZpc3QgcOUgc2tqZXJtZW4uKQorCisgIDQuIFV0ZvhyIHN0ZWcgMSB0aWwgMyBodmlzIGR1IGb4bGVyIGRlZyBzaWtrZXIgcOUgcHJvc2VkeXJlbi4KKworCisKK35+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+fgorCQkJIExla3Nqb24gNC4yOiBT2EtFS09NTUFORE9FTgorCisKKyAgICAgICoqIFNrcml2CS8gIGV0dGVyZnVsZ3QgYXYgZW4gc/hrZXN0cmVuZyBzb20gZHUgdmlsIGxldGUgZXR0ZXIuICoqCisKKyAgMS4gVHJ5a2sgIC8gIG7lciBkdSBlciBpIG5vcm1hbG1vZHVzZW4uIExlZ2cgbWVya2UgdGlsIGF0IHNrcuVzdHJla2VuIG9nCisgICAgIG1hcmv4cmVuIGtvbW1lciB0aWwgc3luZSBw5SBidW5uZW4gYXYgc2tqZXJtZW4gaSBsaWtoZXQgbWVkCisgICAgIKs6uy1rb21tYW5kb2VuZS4KKworICAyLiBTa3JpdiAgZmVlZWlpbCAgb2cgdHJ5a2sgRU5URVIuIERldHRlIGVyIHRla3N0ZW4gZHUgdmlsIGxldGUgZXR0ZXIuCisKKyAgMy4gRm9yIOUgZmlubmUgbmVzdGUgZm9yZWtvbXN0IGF2IHP4a2VzdHJlbmdlbiwgdHJ5a2sgIG4gIC4gRm9yIOUgbGV0ZSBldHRlcgorICAgICBzYW1tZSBz+GtldGVrc3RlbiBpIG1vdHNhdHQgcmV0bmluZywgdHJ5a2sgIFNoaWZ0LU4gIC4KKworICA0LiBIdmlzIGR1IHZpbCBsZXRlIGV0dGVyIGVuIHRla3N0IGJha292ZXIgaSBmaWxlbiwgYnJ1ayBrb21tYW5kb2VuICA/CisgICAgIGlzdGVkZW5mb3IgIC8gIC4KKworTUVSSzogTuVyIHP4a2V0IHRyZWZmZXIgc2x1dHRlbiBhdiBmaWxlbiB2aWwgZGV0IGZvcnRzZXR0ZSBmcmEgZGVuIGFuZHJlIGVuZGVuCisgICAgICBhdiBmaWxlbi4KKworLS0tPiCrZmVlZWlpbLsgZXIgaWtrZSBt5XRlbiDlIHNrcml2ZSCrZmVpbLsgcOUsIGZlZWVpaWwgZXIgaGVsdCBmZWlsLgorCit+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+fn4KKwkJICAgTGVrc2pvbiA0LjM6IEZJTk4gU0FNU1ZBUkVOREUgUEFSRU5URVNFUgorCisKKwkgICoqIFRyeWtrICAlICBmb3Ig5SBmaW5uZSBlbiBzYW1zdmFyZW5kZSApLCBdIGVsbGVyIH0gLiAqKgorCisgIDEuIFBsYXNzZXIgbWFya/hyZW4gcOUgZW4gKCwgWyBlbGxlciB7IHDlIGxpbmplbiBuZWRlbmZvciBtZXJrZXQgIC0tLT4gIC4KKworICAyLiBUcnlrayAgJSAgLgorCisgIDMuIE1hcmv4cmVuIGZseXR0ZXIgc2VnIG7lIHRpbCBwYXJlbnRlc2VuIHNvbSBzYW1zdmFyZXIgbWVkIGRlbiBkdSBzdG9kIHDlLgorCisgIDQuIFRyeWtrICAlICBmb3Ig5SBmbHl0dGUgbWFya/hyZW4gdGlsYmFrZSB0aWwgZGVuIGb4cnN0ZSBwYXJlbnRlc2VuLgorCistLS0+IERldHRlICggZXIgZW4gdGVzdGxpbmplIG1lZCAoLCBbIF0gb2cgeyB9IGkgZGVuICkpCisKK01FUks6IERldHRlIGVyIG1lZ2V0IGdvZCBoamVscCB0aWwgZmVpbHP4a2luZyBpIHByb2dyYW1tZXIgc29tIGhhciB1YmFsYW5zZXJ0CisgICAgICBhbnRhbGwgcGFyZW50ZXNlciEKKworCisKKworCit+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+fn4KKwkJICBMZWtzam9uIDQuNDogRU4gTcVURSDFIFJFVFRFIFNLUklWRUZFSUwgUMUKKworCisJKiogU2tyaXYgIDpzL2dhbW1lbC9ueS9nICBmb3Ig5SBlcnN0YXR0ZSCrZ2FtbWVsuyBtZWQgq255uy4gKioKKworICAxLiBGbHl0dCBtYXJr+HJlbiB0aWwgbGluamVuIG5lZGVuZm9yIHNvbSBiZWd5bm5lciBtZWQgIC0tLT4JLgorCisgIDIuIFNrcml2ICA6cy9kZWVuL2Rlbi8gPEVOVEVSPiAgLiBMZWdnIG1lcmtlIHRpbCBhdCBkZW5uZSBrb21tYW5kb2VuIGJhcmUKKyAgICAgZm9yYW5kcmVyIGRlbiBm+HJzdGUgZm9yZWtvbXN0ZW4gYXYgb3JkZXQgcOUgbGluamVuLgorCisgIDMuIFNrcml2ICA6cy9kZWVuL2Rlbi9nICBzb20gYmV0eXIgZ2xvYmFsIGVyc3RhdG5pbmcgcOUgbGluamVuLiBEZXR0ZSB2aWwKKyAgICAgZXJzdGF0dGUgYWxsZSBmb3Jla29tc3RlciBhdiBz+GtldGVrc3RlbiBw5SBsaW5qZW4gZHUgc3TlciBw5S4KKworLS0tPiBkZWVuIGJlc3RlIGVyIGRlZW4gc29tIGthbiBrYXN0ZSBkZWVuIHR5bmdzdGUgc3RlaW5lbiBsZW5nc3QKKworICA0LiBTa3JpdiAgOiMsI3MvZ2FtbWVsL255L2cgIGZvciDlIGVyc3RhdHRlIHRla3N0IG1lbGxvbSB0byBsaW5qZXIsIGRlciAjLCMKKwkJCSAgICAgICBlciBsaW5qZW51bXJlbmUgcOUgZGUgdG8gbGluamVuZS4KKyAgICAgU2tyaXYgIDolcy9nYW1tZWwvbnkvZyAgICBmb3Ig5SBlcnN0YXR0ZSB0ZWtzdCBpIGhlbGUgZmlsZW4uCisKKworCisKK35+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+fgorCQkJICBPUFBTVU1NRVJJTkcgQVYgTEVLU0pPTiA0CisKKworICAxLiBDdHJsLWcgdmlzZXIgbuV25nJlbmRlIHBvc2lzam9uIGkgZmlsZW4gb2cgZmlsc3RhdHVzZW4uIFNoaWZ0LUcgZ+VyIHRpbAorICAgICBzbHV0dGVuIGF2IGZpbGVuLiBFdCBsaW5qZW51bW1lciBldHRlcmZ1bGd0IGF2IFNoaWZ0LUcgZ+VyIHRpbCBkZW5uZQorICAgICBsaW5qZW4uCisKKyAgMi4gU2tyaXYgIC8gIGV0dGVyZnVsZ3QgYXYgZW4gc/hrZXRla3N0IGZvciDlIGxldGUgRlJBTU9WRVIgZXR0ZXIgdGVrc3Rlbi4KKyAgICAgU2tyaXYgID8gIGV0dGVyZnVsZ3QgYXYgZW4gc/hrZXRla3N0IGZvciDlIGxldGUgQkFLT1ZFUiBldHRlciB0ZWtzdGVuLgorICAgICBFdHRlciBldCBz+Gsga2FuIGR1IHRyeWtrZSAgbiAgZm9yIOUgZmlubmUgbmVzdGUgZm9yZWtvbXN0IGkgZGVuIHNhbW1lCisgICAgIHJldG5pbmdlbiBlbGxlciBTaGlmdC1OIGZvciDlIGxldGUgaSBtb3RzYXR0IHJldG5pbmcuCisKKyAgMy4gU2tyaXYgICUgIG7lciBtYXJr+HJlbiBzdOVyIHDlIGVuICgsICksIFssIF0sIHsgZWxsZXIgfSBmb3Ig5SBmaW5uZQorICAgICBwYXJlbnRlc3RlbiBzb20gc2Ftc3ZhcmVyIG1lZCBkZW4gbWFya/hyZW4gc3TlciBw5S4KKworICA0LiBFcnN0YXR0ZSCrZ2FtbWVsuyBtZWQgZvhyc3RlIKtuebsgcOUgZW4gbGluamU6ICA6cy9nYW1tZWwvbnkKKyAgICAgRXJzdGF0dGUgYWxsZSCrZ2FtbWVsuyBtZWQgq255uyBw5SBlbiBsaW5qZTogICAgOnMvZ2FtbWVsL255L2cKKyAgICAgRXJzdGF0dGUgdGVrc3QgbWVsbG9tIHRvIGxpbmplbnVtcmU6CSAgICAgOiMsI3MvZ2FtbWVsL255L2cKKyAgICAgRXJzdGF0dGUgYWxsZSBmb3Jla29tc3RlciBpIGVuIGZpbDoJICAgICA6JXMvZ2FtbWVsL255L2cKKyAgICAgRm9yIOUgZ29ka2plbm5lIGh2ZXIgZXJzdGF0bmluZywgbGVnZyB0aWwgq2O7OiAgOiVzL2dhbW1lbC9ueS9nYworCisKK35+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+fgorCSAgICAgICBMZWtzam9uIDUuMTogSFZPUkRBTiBVVEbYUkUgRU4gRUtTVEVSTiBLT01NQU5ETworCisKKyAgICAqKiBTa3JpdiAgOiEgIGV0dGVyZnVsZ3QgYXYgZW4gZWtzdGVybiBrb21tYW5kbyBmb3Ig5SB1dGb4cmUgZGVubmUuICoqCisKKyAgMS4gU2tyaXYgZGVuIHZlbGtqZW50ZSBrb21tYW5kb2VuICA6CSBmb3Ig5SBwbGFzc2VyZSBtYXJr+HJlbiBw5SBidW5uZW4gYXYKKyAgICAgc2tqZXJtZW4uIERldHRlIGxhciBkZWcgc2tyaXZlIGVuIGtvbW1hbmRvLgorCisgIDIuIE7lIGthbiBkdSBza3JpdmUgdGVnbmV0ICEJLiBEZXR0ZSBsYXIgZGVnIHV0ZvhyZSBlbiBodmlsa2VuIHNvbSBoZWxzdAorICAgICBla3N0ZXJuIGtvbW1hbmRvLgorCisgIDMuIFNvbSBldCBla3NlbXBlbCwgc2tyaXYgIGxzICBldHRlciB1dHJvcHN0ZWduZXQgb2cgdHJ5a2sgPEVOVEVSPi4gRHUgdmlsCisgICAgIG7lIGblIGVuIGxpc3RlIG92ZXIgZmlsZW5lIGkga2F0YWxvZ2VuLCBha2t1cmF0IHNvbSBvbSBkdSBoYWRkZSBravhydAorICAgICBrb21tYW5kb2VuIGRpcmVrdGUgZnJhIHNrYWxsZXQuIEVsbGVyIGJydWsgIDohZGlyCWh2aXMgq2xzuyBpa2tlIHZpcmtlci4KKworLS0tPiBNRVJLOiBEZXQgZXIgbXVsaWcg5SBravhyZSBhbGxlIG11bGlnZSBla3N0ZXJuZSBrb21tYW5kb2VyIHDlIGRlbm5lCisgICAgIG3ldGVuLgorCistLS0+IE1FUks6IEFsbGUgqzq7LWtvbW1hbmRvZXIgbeUgYXZzbHV0dGVzIG1lZCA8RU5URVI+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+CisJCSAgICAgTGVrc2pvbiA1LjI6IE1FUiBPTSBMQUdSSU5HIEFWIEZJTEVSCisKKworICAgICAqKiBGb3Ig5SBsYWdyZSBlbmRyaW5nZW5lIGdqb3J0IGkgZW4gZmlsLCBza3JpdiAgOncgRklMTkFWTiAgLiAqKgorCisgIDEuIFNrcml2ICA6IWRpciAgZWxsZXIgIDohbHMJZm9yIOUgZuUgZW4gbGlzdGUgb3ZlciBmaWxlbmUgaSBrYXRhbG9nZW4uIER1CisgICAgIHZldCBhbGxlcmVkZSBhdCBkdSBt5SB0cnlra2UgPEVOVEVSPiBldHRlciBkZXR0ZS4KKworICAyLiBWZWxnIGV0IGZpbG5hdm4gcOUgZW4gZmlsIHNvbSBpa2tlIGZpbm5lcywgc29tIGZvciBla3NlbXBlbCAgVEVTVAkuCisKKyAgMy4gU2tyaXYgIDp3IFRFU1QgIChkZXIgVEVTVCBlciBmaWxuYXZuZXQgZHUgdmVsZ2VyKS4KKworICA0LiBEZXR0ZSBsYWdyZXIgaGVsZSBmaWxlbiAoZGVubmUgaW5uZvhyaW5nZW4pIHVuZGVyIG5hdm5ldCBURVNUIC4gRm9yIOUKKyAgICAgc2pla2tlIGRldHRlLCBza3JpdiAgOiFkaXIgIGlnamVuIGZvciDlIHNlIGlubmhvbGRldCBhdiBrYXRhbG9nZW4uCisKKy0tLT4gSHZpcyBkdSBu5SBoYWRkZSBhdnNsdXR0ZXQgVmltIG9nIHN0YXJ0ZXQgcOUgbnl0dCBpZ2plbiBtZWQgZmlsbmF2bmV0CisgICAgIFRFU1QsIHZpbGxlIGZpbGVuIHbmcnQgZW4gZWtzYWt0IGtvcGkgYXYgaW5uZvhyaW5nZW4gZGEgZHUgbGFncmV0IGRlbi4KKworICA1LiBGamVybiBmaWxlbiB2ZWQg5SBza3JpdmUgIDohcm0gVEVTVCAgaHZpcyBkdSBlciBw5SBldCBVTklYLWxpZ25lbmRlCisgICAgIG9wZXJhdGl2c3lzdGVtLCBlbGxlciAgOiFkZWwgVEVTVAlodmlzIGR1IGJydWtlciBNUy1ET1MuCisKKworfn5+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+CisJCSAgICBMZWtzam9uIDUuMzogREVMVklTIExBR1JJTkcgQVYgRU4gRklMCisKKworCSAgKiogRm9yIOUgbGFncmUgZW4gZGVsIGF2IGVuIGZpbCwgc2tyaXYgIDojLCMgdyBGSUxOQVZOICAqKgorCisgIDEuIEVuIGdhbmcgdGlsOiBTa3JpdiAgOiFkaXIJZWxsZXIgIDohbHMgIGZvciDlIGblIGVuIGxpc3RlIG92ZXIgZmlsZW5lIGkKKyAgICAga2F0YWxvZ2VuLiBWZWxnIGV0IHBhc3NlbmRlIGZpbG5hdm4sIHNvbSAgVEVTVCAgLgorCisgIDIuIEZseXR0IG1hcmv4cmVuIHRpbCB0b3BwZW4gYXYgZGVubmUgc2lkZW4gb2cgdHJ5a2sgQ3RybC1nIGZvciDlIGZpbm5lCisgICAgIG51bW1lcmV0IHDlIGRlbm5lIGxpbmplbi4gSFVTSyBERVRURSBOVU1NRVJFVCEKKworICAzLiBH5SB0aWwgbmVkZXJzdGUgbGluamUgcOUgc2tqZXJtZW4gb2cgdHJ5a2sgQ3RybC1nIGlnamVuLiBIVVNLIERFVFRFCisgICAgIExJTkpFTlVNTUVSRVQgT0dTxSEKKworICA0LiBGb3Ig5SBsYWdyZSBCQVJFIGVuIGRlbCBhdiBmaWxlbiwgc2tyaXYgIDojLCMgdyBURVNUICBodm9yICMsIyBlciBkZSB0bworICAgICBudW1yZW5lIGR1IHNrdWxsZSBodXNrZSAodG9wcCBvZyBidW5uKSBvZwlURVNUICBlciBmaWxuYXZuZXQuCisKKyAgNS4gU2pla2sgbWVkCTohZGlyICBvbSBmaWxlbiBlciBkZXIsIG1lbiBJS0tFIHNsZXR0IGRlbi4KKworCisKKworfn5+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+CisJCUxla3Nqb24gNS40OiBIRU5USU5HIE9HIFNBTU1FTlNMxUlORyBBViBGSUxFUgorCisKKyoqIEZvciDlIGxlc2UgaW5uIGVuIGFubmVuIGZpbCBpbm4gaSBu5XbmcmVuZGUgYnVmZmVyLCBza3JpdiAgOnIgRklMTkFWTiAgLiAqKgorCisgIDEuIFNrcml2ICA6IWRpciAgZm9yIOUgZm9yc2lrcmUgZGVnIG9tIGF0IGZpbGVuICBURVNUICBmaW5uZXMuCisKKyAgMi4gUGxhc3NlciBtYXJr+HJlbiBw5SB0b3BwZW4gYXYgZGVubmUgc2lkZW4uCisKK01FUks6ICBFdHRlciBhdCBkdSBoYXIgdXRm+HJ0IHN0ZWcgMyB2aWwgZHUgc2UgbGVrc2pvbiA1LjMuIEflIG5lZG92ZXIgZm9yYmkKKyAgICAgICBkZW4gb2cgdGlsIGRlbm5lIHBvc2lzam9uZW4gaWdqZW4uCisKKyAgMy4gSGVudCCrVEVTVLstZmlsZW4gZGluIG1lZCBrb21tYW5kb2VuICA6ciBURVNUICBkZXIgVEVTVCBlciBuYXZuZXQgcOUKKyAgICAgZmlsZW4uCisKK01FUks6IEZpbGVuIGR1IGhlbnRlciB2aWwgYmxpIHBsYXNzZXJ0IGRlciBtYXJr+HJlbiBzdOVyLgorCisgIDQuIEZvciDlIHNqZWtrZSBhdCBmaWxlbiBibGUgaGVudGV0LCBn5SB0aWxiYWtlIG9nIHNlIGF0IGRldCBlciB0byBrb3BpZXIgYXYKKyAgICAgbGVrc2pvbiA1LjMsIG9yaWdpbmFsZW4gb2cgZGVubmUgdmVyc2pvbmVuLgorCisKKworfn5+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+CisJCQkgIE9QUFNVTU1FUklORyBBViBMRUtTSk9OIDUKKworCisgIDEuICA6IUtPTU1BTkRPICB1dGb4cmVyIGVuIGVrc3Rlcm4ga29tbWFuZGlvLgorCisJTm9lbiBueXR0aWdlIGVrc2VtcGxlciBlcjoKKwkgICAgKE1TLURPUykJKFVuaXgpCisJICAgICA6IWRpcgkgOiFscwkgICAgLS0gTGlzdCBmaWxlbmUgaSBrYXRhbG9nZW4KKwkgICAgIDohZGVsIEZJTAkgOiFybSBGSUwgICAtLSBTbGV0dCBmaWxlbiAgRklMCisKKyAgMi4gIDp3IEZJTE5BVk4gIHNrcml2ZXIgZGVuIGZpbGVuIGR1IHN05XIgaSB0aWwgZGlza2VuIG1lZCBuYXZuZXQgRklMTkFWTiAuCisKKyAgMy4gIDojLCN3IEZJTE5BVk4gIGxhZ3JlciBsaW5qZW5lICMgdGlsICMgdGlsIGZpbGVuIEZJTE5BVk4gLgorCisgIDQuICA6ciBGSUxOQVZOICBoZW50ZXIgaW5uIGVuIGFubmVuIGZpbCBvZyBsZWdnZXIgZGVuIGlubiBsaWtlIGV0dGVyCisgICAgICBtYXJr+HJlbi4KKworCisKKworCisKK35+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+fgorCQkJTGVrc2pvbiA2LjE6IKvFUE5FIExJTkpFuy1LT01NQU5ET0VOCisKKworICAgICAqKiBTa3JpdiAgbyAgZm9yIOUgq+VwbmUgb3BwuyBmb3IgZW4gbnkgbGluamUgZXR0ZXIgbWFya/hyZW4gb2cgZ+UgaQorCWlubnNldHRpbmdzbW9kdXMgKioKKworICAxLiBGbHl0dCBtYXJr+HJlbiB0aWwgbGluamVuIG5lZGVuZm9yIG1lcmtldAktLS0+ICAuCisKKyAgMi4gU2tyaXYgIG8gIChsaXRlbiBvKSBmb3Ig5SBzdGFydGUgcOUgZW4gbnkgbGluamUgbmVkZW5mb3IgbWFya/hyZW4gb2cgZ+UKKyAgICAgb3ZlciB0aWwgaW5uc2V0dGluZ3Ntb2R1cy4KKworICAzLiBLb3BpZXIgbGluamVuIHNvbSBlciBtZXJrZXQgIC0tLT4Jb2cgdHJ5a2sgPEVTQz4gZm9yIOUgYXZzbHV0dGUKKyAgICAgaW5uc2V0dGluZ3Ntb2R1c2VuLgorCistLS0+IEV0dGVyIGF0ICBvICBlciBza3JldmV0IGJsaXIgbWFya/hyZW4gcGxhc3NlcnQgcOUgZGVuIHRvbW1lIGxpbmplbi4KKworICA0LiBGb3Ig5SBsYWdlIGVuIG55IGxpbmplIE9WRVIgbWFya/hyZW4sIHRyeWtrIHJldHQgb2cgc2xldHQgZW4gc3RvciBPCisgICAgIGlzdGVkZW5mb3IgZW4gbGl0ZW4gbyAuIFBy+HYgZGV0dGUgcOUgbGluamVuIG5lZGVuZm9yLgorLS0tPiBMYWcgZW4gbnksIHRvbSBsaW5qZSBvdmVyIGRlbm5lIG1lZCBTaGlmdC1PIG1lbnMgbWFya/hyZW4gc3TlciBw5SBkZW4uCisKKworCit+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+fn4KKwkJICAgICAgTGVrc2pvbiA2LjI6IKtMRUdHIFRJTLstS09NTUFORE9FTgorCisKKwkgICAgKiogU2tyaXYgIGEgIGZvciDlIGxlZ2dlIHRpbCB0ZWtzdCBFVFRFUiBtYXJr+HJlbi4gKioKKworICAxLiBGbHl0dCBtYXJr+HJlbiB0aWwgc2x1dHRlbiBhdiBkZW4gZvhyc3RlIGxpbmplbiBtZXJrZXQgIC0tLT4gIHZlZCDlCisgICAgIHRyeWtrZSAgJAlpIG5vcm1hbG1vZHVzZW4uCisKKyAgMi4gVHJ5a2sgIGEgIChsaXRlbiBhKSBmb3Ig5SBsZWdnZSB0aWwgdGVrc3QgRVRURVIgdGVnbmV0IHVuZGVyIG1hcmv4cmVuLgorICAgICAoU3RvciBBIGxlZ2dlciB0aWwgcOUgc2x1dHRlbiBhdiBsaW5qZW4uKQorCitNRVJLOiBEZXR0ZSBnavhyIGF0IGR1IHNsaXBwZXIg5SB0cnlra2UgIGkgICwgZGV0IHNpc3RlIHRlZ25ldCwgdGVrc3RlbiBzb20KKyAgICAgIHNrYWwgc2V0dGVzIGlubiwgPEVTQz4sIGj4eXJlcGlsIG9nIHRpbCBzaXN0LCAgeAliYXJlIGZvciDlIGxlZ2dlIHRpbAorICAgICAgcOUgc2x1dHRlbiBhdiBlbiBsaW5qZSEKKworICAzLiBHavhyIGZlcmRpZyBkZW4g+HZlcnN0ZSBsaW5qZW4uIExlZ2cgbWVya2UgdGlsIGF0IKtsZWdnIHRpbLsgZXIgZGV0IHNhbW1lCisgICAgIHNvbSBpbm5zZXR0aW5nc21vZHVzZW4sIG1lZCBkZW4gZm9yc2tqZWxsZW4gaHZvciB0ZWtzdGVuIHNldHRlcyBpbm4uCisKKy0tLT4gUOUgZGVubmUgbGluamVuIG3lIGRldCBsZWdnZXMKKy0tLT4gUOUgZGVubmUgbGluamVuIG3lIGRldCBsZWdnZXMgdGlsIHRla3N0IHDlIHNsdXR0ZW4uCisKKworfn5+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+CisJCSAgTGVrc2pvbiA2LjM6IEVOIEFOTkVOIFZFUlNKT04gQVYgq0VSU1RBVFS7CisKKworCSAgICoqIFNrcml2ICBSCWZvciDlIGVyc3RhdHRlIG1lciBlbm4gZXR0IHRlZ24uICoqCisKKyAgMS4gRmx5dHQgbWFya/hyZW4gdGlsIGRlbiBm+HJzdGUgbGluamVuIG5lZGVuZm9yIG1lcmtldCAgLS0tPiAgLgorCisgIDIuIFBsYXNzZXIgbWFya/hyZW4gcOUgYmVneW5uZWxzZW4gYXYgZGV0IGb4cnN0ZSBvcmRldCBzb20gZXIgZm9yc2tqZWxsaWcKKyAgICAgZnJhIGRlbiBhbmRyZSBsaW5qZW4gbWVya2V0ICAtLS0+CShvcmRldCCrc2lzdGW7KS4KKworICAzLiBUcnlrayAgUiAgb2cgZXJzdGF0dCByZXN0ZW4gYXYgbGluamVuIG1lZCBkZW4gc2FtbWUgdGVrc3RlbiBzb20gc3TlciBw5QorICAgICBkZW4gYW5kcmUgbGluamVuLgorCistLS0+IEZvciDlIGdq+HJlIGRlbiBm+HJzdGUgbGluamVuIGxpayBkZW4gYW5kcmUsIG3lIGJva3N0YXZlbiBzdG9yIFIgYnJ1a2VzLgorLS0tPiBGb3Ig5SBnavhyZSBkZW4gZvhyc3RlIGxpbmplbiBsaWsgZGVuIGFuZHJlLCB0cnlrayBSIG9nIGRlbiBueWUgdGVrc3Rlbi4KKworICA0LiBMZWdnIG1lcmtlIHRpbCBhdCBu5XIgZHUgdHJ5a2tlciA8RVNDPiBmb3Ig5SBhdnNsdXR0ZSwgYmV2YXJlcyB0ZWtzdGVuCisgICAgIHNvbSBpa2tlIGVyIHJlZGlnZXJ0LgorCisKKworCit+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+fn4KKwkJCSAgICBMZWtzam9uIDYuNDogU0VUVCBWQUxHCisKKworICoqIFNldHQgZXQgdmFsZyBz5SBldCBz+GsgZWxsZXIgZXJzdGF0bmluZyBpZ25vcmVyZXIgc3RvcmUvc23lIGJva3N0YXZlci4gKioKKworICAxLiBMZXQgZXR0ZXIgq2lnbm9yZbsgdmVkIOUgc2tyaXZlOgorICAgICAvaWdub3JlIDxFTlRFUj4KKyAgICAgUmVwZXRlciBmbGVyZSBnYW5nZXIgdmVkIOUgdHJ5a2tlCW4gIC4KKworICAyLiBTZXR0IKtpY7stdmFsZ2V0IChJZ25vcmUgQ2FzZSkgdmVkIOUgc2tyaXZlOgorICAgICA6c2V0IGljCisKKyAgMy4gTGV0IGV0dGVyIKtpZ25vcmW7IGlnamVuIHZlZCDlIHNrcml2ZTogIG4KKyAgICAgUmVwZXRlciBz+GtldCBmbGVyZSBnYW5nZXIgdmVkIOUgdHJ5a2tlICBuICAuCisKKyAgNC4gU2V0dCCraGxzZWFyY2i7LSBvZyCraW5jc2VhcmNouy12YWxnZW5lOgorICAgICA6c2V0IGhscyBpcworCisgIDUuIFNrcml2IHP4a2Vrb21tYW5kb2VuIGlnamVuLCBvZyBzZSBodmEgc29tIHNramVyOgorICAgICAvaWdub3JlIDxFTlRFUj4KKworICA2LiBIdmlzIGR1IHZpbCBzbOUgYXYgdXRoZXZpbmdlbiBw5SBz+GtldGVrc3Rlbiwgc2tyaXYgIDpub2hsc2VhcmNoCit+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+fn4KKwkJCSAgT1BQU1VNTUVSSU5HIEFWIExFS1NKT04gNgorCisKKyAgMS4gVHJ5a2sgIG8gIGZvciDlIGxlZ2dlIHRpbCBlbiBsaW5qZSBORURFTkZPUiBtYXJr+HJlbiBvZyBwbGFzc2VyZSBtYXJr+HJlbgorICAgICBw5SBkZW4gbnllIGxpbmplbiBpIGlubnNldHRpbmdzbW9kdXMuCisgICAgIEh2aXMgZHUgdHJ5a2tlciBlbiBzdG9yIE8g5XBuZXMgbGluamVuIE9WRVIgbGluamVuIG1hcmv4cmVuIHN05XIgcOUuCisKKyAgMi4gU2tyaXYgZW4gIGEgIGZvciDlIHNldHRlIGlubiB0ZWtzdCBFVFRFUiB0ZWduZXQgbWFya/hyZW4gZXIgcOUuCisgICAgIEVuIHN0b3IgQSB2aWwgbGVnZ2UgdGlsIHRla3N0IHDlIHNsdXR0ZW4gYXYgbGluamVuLgorCisgIDMuIFZlZCDlIHRyeWtrZSAgUiAgZm9yIGflciBpbm4gaSBlcnN0YXRuaW5nc21vZHVzIGhlbHQgdGlsIDxFU0M+IHRyeWtrZXMKKyAgICAgZm9yIOUgYXZzbHV0dGUgbW9kdXNlbi4KKworICA0LiBTa3JpdiAgOnNldCB4eHggIGZvciDlIHNldHRlIHZhbGdldCCreHh4uy4KKworCisKKworCisKKworCit+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+fn4KKwkJICBMRUtTSk9OIDc6IFRJTEdKRU5HRUxJR0UgSEpFTFBFS09NTUFORE9FUgorCisKKwkJICAqKiBCcnVrIGRldCBpbm5lYnlnZ2VkZSBoamVscGVzeXN0ZW1ldC4gKioKKworICBWaW0gaGFyIGV0IG9tZmF0dGVuZGUgaW5uZWJ5Z2dldCBoamVscGVzeXN0ZW0uIEZvciDlIHN0YXJ0ZSBkZXQsIHBy+HYgZW4gYXYKKyAgZGlzc2UgbeV0ZW5lOgorICAgIC0gVHJ5a2sgSGplbHAtdGFzdGVuIChodmlzIGR1IGhhciBub2VuKQorICAgIC0gVHJ5a2sgRjEtdGFzdGVuIChodmlzIGR1IGhhciBub2VuKQorICAgIC0gU2tyaXYgIDpoZWxwIDxFTlRFUj4KKworICBTa3JpdiAgOnEgPEVOVEVSPiAgZm9yIOUgbHVra2UgaGplbHBldmluZHVldC4KKworICBEdSBrYW4gZuUgaGplbHAgcOUgb210cmVudCBhbGxlIHRlbWFlciBvbSBWaW0gdmVkIOUgc2tyaXZlIGV0IHBhcmFtZXRlciB0aWwKKyAgqzpoZWxwuy1rb21tYW5kb2VuLiBQcvh2IGRpc3NlIChpa2tlIGdsZW0gRW50ZXIgZXR0ZXIgaHZlcik6CisKKyAgICA6aGVscCB3CisgICAgOmhlbHAgYzxUCisgICAgOmhlbHAgaW5zZXJ0LWluZGV4CisgICAgOmhlbHAgdXNlci1tYW51YWwKKworCit+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+fn4KKwkJICAgICAgTEVLU0pPTiA4OiBMQUcgRVQgT1BQU1RBUlRTU0tSSVBUCisKKworCQkJKiogU2zlIHDlIGZ1bmtzam9uZXIgaSBWaW0uICoqCisKKyAgVmltIGhhciBtYW5nZSBmbGVyZSBmdW5rc2pvbmVyIGVubiBWaSwgbWVuIGZsZXN0ZXBhcnRlbiBhdiBkZW0gZXIgc2zldHQgYXYKKyAgc29tIHN0YW5kYXJkLiBGb3Ig5SBiZWd5bm5lIOUgYnJ1a2UgZGVtIGthbiBkdSBsYWdlIGVuIKt2aW1yY7stZmlsLgorCisgIDEuIFN0YXJ0IHJlZGlnZXJpbmdlbiBhdiCrdmltcmO7LWZpbGVuLCBkZXR0ZSBhdmhlbmdlciBhdiBzeXN0ZW1ldCBkaXR0OgorICAgICAgIDplZGl0IH4vLnZpbXJjCSAgZm9yIFVOSVgKKyAgICAgICA6ZWRpdCAkVklNL192aW1yYyAgZm9yIE1TIFdpbmRvd3MKKworICAyLiBMZXMgaW5uIGVrc2VtcGVsZmlsZW4gZm9yIKt2aW1yY7s6CisgICAgICAgOnJlYWQgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0KKworICAzLiBMYWdyZSBmaWxlbiBtZWQ6CisgICAgICAgOndyaXRlCisKKyAgTmVzdGUgZ2FuZyBkdSBzdGFydGVyIFZpbSB2aWwgZGVuIGJydWtlIGZhcmdlciBvZyB1dGhldmluZyBpIGhlbmhvbGQgdGlsCisgIHN5bnRha3NlbiBpIGZpbGVuLiBWZWQg5SBsZWdnZSBpbm4gZm9yc2tqZWxsaWdlIHZhbGcgaSCrdmltcmO7LWZpbGVuLCBrYW4gZHUKKyAgZm9yYW5kcmUgb3Bwc2V0dGV0IGkgVmltIHRpbCBkZXQgZHUgZm9yZXRyZWtrZXIuCisKK35+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+fgorICBIZXIgc2x1dHRlciBpbm5m+HJpbmdlbiBpIFZpbS4gRGVuIHZhciBtZW50IHNvbSBlbiByYXNrIG92ZXJzaWt0IG92ZXIKKyAgZWRpdG9yZW4sIGFra3VyYXQgbm9rIHRpbCDlIGxhIGRlZyBzZXR0ZSBpIGdhbmcgbWVkIGVua2VsIGJydWsuIERlbiBlciBw5QorICBsYW5ndCBu5nIga29tcGxldHQsIGRhIFZpbSBoYXIgbWFuZ2UgZmxlcmUga29tbWFuZG9lci4gTGVzIGJydWtzYW52aXNuaW5nZW4KKyAgdmVkIOUgc2tyaXZlCTpoZWxwIHVzZXItbWFudWFsICAuCisKKyAgRm9yIHZpZGVyZSBsZXNpbmcgb2cgc3R1ZGllciwga2FuIGRlbm5lIGJva2VuIGFuYmVmYWxlczoKKyAgICAgIKtWaW0gLSBWaSBJbXByb3ZlZLsgYXYgU3RldmUgT3VhbGxpbmUKKyAgICAgIFV0Z2l2ZXI6IE5ldyBSaWRlcnMKKyAgRGVuIGb4cnN0bmV2bnRlIGJva2VuIGVyIGZ1bGx0IG9nIGhlbHQgZGVkaWtlcnQgdGlsIFZpbS4gU3Blc2llbHQgbnl0dGlnCisgIGZvciBueWJlZ3lubmVyZS4gSW5uZWhvbGRlciBtYW5nZSBla3NlbXBsZXIgb2cgaWxsdXN0cmFzam9uZXIuCisgIFNlIGh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnL2NsaWNrNS5odG1sCisKKyAgRGVubmUgYm9rZW4gZXIgZWxkcmUgb2cgaGFuZGxlciBtZXIgb20gVmkgZW5uIFZpbSwgbWVuIGFuYmVmYWxlcyBvZ3PlOgorICAgICAgq0xlYXJuaW5nIHRoZSBWaSBFZGl0b3K7IGF2IExpbmRhIExhbWIKKyAgICAgIFV0Z2l2ZXI6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcyBJbmMuCisgIERldCBlciBlbiBnb2QgYm9rIGZvciDlIGblIHZpdGUgb210cmVudCBodmEgc29tIGhlbHN0IG9tIFZpLgorICBEZW4gc2pldHRlIHV0Z2F2ZW4gaW5uZWhvbGRlciBvZ3PlIGluZm9ybWFzam9uIG9tIFZpbS4KKworICBEZW5uZSBpbm5m+HJpbmdlbiBlciBza3JldmV0IGF2IE1pY2hhZWwgQy4gUGllcmNlIG9nIFJvYmVydCBLLiBXYXJlLAorICBDb2xvcmFkbyBTY2hvb2wgb2YgTWluZXMgbWVkIGlk6WVyIGF2IENoYXJsZXMgU21pdGgsIENvbG9yYWRvIFN0YXRlCisgIFVuaXZlcnNpdHkuIEVtYWlsOiBid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUgLgorCisgIE1vZGlmaXNlcnQgZm9yIFZpbSBhdiBCcmFtIE1vb2xlbmFhci4KKyAgT3ZlcnNhdHQgYXYg2Hl2aW5kIEEuIEhvbG0gLS0gc3VubnkgX0FUXyBzdW5iYXNlLm9yZworICB0dXRvci5ubyAyNzkgMjAwNC0wNS0xMiAwOToyMTo1M1ogc3VubnkKKworfn5+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+Cit2aW06IHNldCB0cz04IDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvdHV0b3IucGwgYi9ydW50aW1lL3R1dG9yL3R1dG9yLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjY2I4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3R1dG9yLnBsCkBAIC0wLDAgKzEsODMwIEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9ICAgIFcgaSB0IGEgaiAgIHcgICB0IHUgdCBvIHIgaSBhIGwgdSAgIFYgSSBNIC0gYSAgICAgIC0gICAgV2Vyc2phICAxLjUuICAgICA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgVmltIHRvIHBvdOq/bnkgZWR5dG9yLCBrdPNyeSBwb3NpYWRhIHdpZWxlIHBvbGVjZfEsIHpieXQgZHW/byBieQorICAgICB3eWphtm5p5iBqZSB3c3p5c3RraWUgdyB0eW0gdHV0b3JpYWx1LiBUZW4gcHJ6ZXdvZG5payBtYSBuYXVjennmCisgICAgIENp6iBwb3OzdWdpd2HmIHNp6iB3eXN0YXJjemFqsWNvIHdpZWxvbWEga29tZW5kYW1pIGJ5tiBt82ezILNhdHdvCisgICAgIHW/eXdh5iBWaW0tYSBqYWtvIGVkeXRvcmEgb2fzbG5lZ28gcHJ6ZXpuYWN6ZW5pYS4KKworICAgICBDemFzIHBvdHJ6ZWJueSBuYSB1a2/xY3plbmllIHR1dG9yaWFsYSB0byAyNSBkbyAzMCBtaW51dCBpIHphbGW/eQorICAgICBvZCB0ZWdvIGphayB3aWVsZSBjemFzdSBzcOpkemlzeiBuYSBla3NwZXJ5bWVudG93YW5pdS4gIFBvbGVjZW5pYQorICAgICB3eWtvbnl3YW5lIHcgY3phc2llIGxla2NqaSB6bW9keWZpa3VqsSB0ZWtzdC4gWnLzYiB3Y3pltm5pZWoga29waeoKKyAgICAgdGVnbyBwbGlrdSBkbyDmd2ljemXxIChqZbZsaSB6YWN6sbNltiBrb21lbmSxICJ2aW10dXRvciIgdG8ganW/CisgICAgIHByYWN1amVzeiBuYSBrb3BpaSkuCisKKyAgICAgV2G/bmUgamVzdCwgYnm2IHBhbWnqdGGzLCC/ZSBwcnpld29kbmlrIHRlbiB6b3N0YbMgemFwcm9qZWt0b3dhbnkgZG8KKyAgICAgbmF1a2kgcG9wcnpleiDmd2ljemVuaWEuIFRvIG96bmFjemEsIL9lIG11c2lzeiB3eWtvbnl3YeYgcG9sZWNlbmlhCisgICAgIGJ5IG5hdWN6eeYgc2nqIGljaCBwcmF3aWSzb3dvLiBKZbZsaSBi6mR6aWVzeiBqZWR5bmllIGN6eXRhsyB0ZWtzdAorICAgICBzenlia28gemFwb21uaXN6IHdpZWxlIHBvbGVjZfEhCisKKyAgICAgVGVyYXogdXBld25paiBzaeosIL9lIG5pZSBtYXN6IHdjabZuaep0ZWdvIENhcHNMb2NrYSBpIHdjaXNrYWogIGoKKyAgICAgdGFrIGSzdWdvIGRvcPNraSBMZWtjamEgMS4xLiBuaWUgd3lwZbNuaSBjYbNrb3dpY2llIGVrcmFudS4KKworfn5+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+CisJCSAgICAgIExla2NqYSAxLjEuOiBQT1JVU1pBTklFIFNJyiBLVVJTT1JFTQorCisgICAgICAgKiogQnkgd3lrb25h5iBydWNoIGt1cnNvcmVtLCB3Y2m2bmlqIGgsIGosIGssIGwgamFrIHBva2F6YW5vLiAqKgorCisJICAgICAgIF4KKwkgICAgICAgawkJICAgICAgV3NrYXrzd2thOiAgaCBqZXN0IHBvIGxld2VqCisJICA8IGgJICBsID4JCQkJICBsIGplc3QgcG8gcHJhd2VqCisJICAgICAgIGoJCQkJICBqIHd5Z2yxZGEgamFrIHN0cnphs2thIHcgZPOzCisJICAgICAgIHYKKyAgMS4gUG9ydXN6YWoga3Vyc29yZW0gZG9w82tpIG5pZSBi6mR6aWVzeiBwZXdpZW4sIL9lIHBhbWnqdGFzeiBwb2xlY2VuaWEuCisKKyAgMi4gVHJ6eW1haiAgaiAgdGFrIGSzdWdvIGG/IGLqZHppZSBzaeogcG93dGFyemGzLgorLS0tPiBUZXJheiB3aWVzeiBqYWsgZG9qtuYgZG8gbmFzdOpwbmVqIGxla2NqaS4KKworICAzLiBVv3l3YWqxYyBzdHJ6YbNraSB3IGTzsyBwcnplamS8IGRvIG5hc3TqcG5laiBsZWtjamkuCisKK1V3YWdhOiBKZbZsaSBuaWUgamVzdGW2IHBld2llbiBjemVnb7YgY28gd3Bpc2GzZbYsIHdjabZuaWogPEVTQz4gYnkgd3LzY2nmIGRvCisgICAgICAgdHJ5YnUgTm9ybWFsLiBXdGVkeSBwb3d083J6IHBvbGVjZW5pZS4KKworVXdhZ2E6IEtsYXdpc3plIGt1cnNvcmEgdGFrv2UgcG93aW5ueSBkemlhs2HmLCBhbGUgdb95d2FqsWMgIGhqa2wgIGLqZHppZXN6CisgICAgICAgdyBzdGFuaWUgcG9ydXN6YeYgc2nqIG8gd2llbGUgc3p5YmNpZWogamFrIHNp6iB0eWxrbyBwcnp5end5Y3phaXN6LgorCit+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+fn4KKwkJIExla2NqYSAxLjIuOiBXQ0hPRFpFTklFIEkgV1lDSE9EWkVOSUUgWiBWSU0tYQorCisgISEgVVdBR0E6IFByemVkIHd5a29uYW5pZW0gamFraWVnb2tvbHdpZWsgcG9sZWNlbmlhIHByemVjenl0YWogY2GzsSBsZWtjauouISEKKworICAxLiBXY2m2bmlqIDxFU0M+IChhYnkgdXBld25p5iBzaeosIL9lIGplc3RltiB3IHRyeWJpZSBOb3JtYWwpLgorICAyLiBXcGlzejoJCQk6cSE8RU5URVI+LgorCistLS0+IFRvIHNwb3dvZHVqZSB3eWq2Y2llIHogZWR5dG9yYSBCRVogemFwYW1p6nR5d2FuaWEgem1pYW4gamFraWUKKyAgICAgemSxv3mzZbYgenJvYmnmLiBKZbZsaSBjaGNlc3ogemFwYW1p6nRh5iB6bWlhbnkgaSB3eWq25gorICAgICB3cGlzejoJCQk6d3E8RU5URVI+CisKKyAgMy4gS2llZHkgd2lkemlzeiB6bmFrIHphY2jqdHkgcG93s29raSB3cGlzeiBrb21lbmTqLCC/ZWJ5IHdy82Np5gorICAgICBkbyB0dXRvcmlhbGEuCisgICAgIFBvd2luaWVuaWW2IHdwaXNh5joJdmltdHV0b3I8RU5URVI+CisgICAgIE5vcm1hbG5pZSB1v3mzYnm2OgkJdmltIHR1dG9yPEVOVEVSPgorCistLS0+ICd2aW0nIG96bmFjemEgZWR5dG9yIHZpbSwgJ3R1dG9yJyBqZXN0IHBsaWtlbSwga3TzcnkgY2hjaWGzYnm2CisgICAgIGVkeXRvd2HmLgorCisgIDQuIEpltmxpIGNoY2VzeiB6YXBhbWnqdGHmIHBvbGVjZW5pYSwgd3lrb25haiBrcm9raSAxLiBkbyAzLiBhYnkKKyAgICAgd3lqtuYgaSB3cvNjaeYgZG8gZWR5dG9yYS4gUG90ZW0gcHJ6ZW5pZbYgc2nqIGRvIExla2NqaSAxLjMuCisKK35+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+fgorCQkgICAgTGVrY2phIDEuMy46IEVEWUNKQSBURUtTVFUgLSBLQVNPV0FOSUUKKworCisJKiogVyB0cnliaWUgTm9ybWFsIHdjabZuaWogeCBhYnkgdXN1brHmIHpuYWsgcG9kIGt1cnNvcmVtLiAqKgorCisgIDEuIFByemVuaWW2IGt1cnNvciBkbyBsaW5paSBwb25pv2VqIG96bmFjem9uZWogLS0tPi4KKworICAyLiBCeSBwb3ByYXdp5iBis+pkeSwgbmFwcm93YWS8IGt1cnNvciBuYSB6bmFrIGRvIHVzdW5p6mNpYS4KKworICAzLiBXY2m2bmlqICB4ICBhYnkgdXN1brHmIG5pZWNoY2lhbnkgem5hay4KKworICA0LiBQb3d0YXJ6YWoga3Jva2kgMi4gZG8gNC4gZG9w82tpIHpkYW5pZSBuaWUgamVzdCBwb3ByYXduZS4KKworLS0tPiBLa3Jvd2EgcHJyemVza29jenmzYSBwcnJ6ZXoga3Npaeq/eWNjLgorCisgIDUuIFRlcmF6IGtpZWR5IHpkYW5pZSBqZXN0IHBvcHJhd2lvbmUgcHJ6ZWpkvCBkbyBMZWtjamkgMS40LgorCitVV0FHQTogVWN6IHNp6iBwcnpleiDmd2ljemVuaWUsIG5pZSB3a3V3YW5pZS4KKworCisKKworfn5+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+CisJICAgICAgIExla2NqYSAxLjQuOiBFRFlDSkEgVEVLU1RVIC0gSU5TRVJUICh3cHJvd2FkemFuaWUpCisKKworCSAgICAgICoqIFcgdHJ5YmllIE5vcm1hbCB3Y2m2bmlqICBpICBhYnkgd3N0YXdp5iB0ZWtzdC4gKioKKworICAxLiBQcnplbmlltiBrdXJzb3IgZG8gcGllcndzemVqIGxpbmlpIHBvbmm/ZWogb3puYWN6b25laiAtLS0+LgorCisgIDIuIEFieSBwb3ByYXdp5iBwaWVyd3N6eSB3aWVyc3osIHVzdGF3IGt1cnNvciBuYSBwaWVyd3N6eW0gem5ha3UgUE8gdHltCisgICAgIGdkemllIHRla3N0IG1hIGJ55iB3c3Rhd2lvbnkuCisKKyAgMy4gV2Nptm5paiAgaSAgYSBuYXN06nBuaWUgd3Bpc3oga29uaWVjem5lIHBvcHJhd2tpLgorCisgIDQuIFBvIHBvcHJhd2llbml1IGKz6mR1IHdjabZuaWogPEVTQz4gYnkgd3LzY2nmIGRvIHRyeWJ1IE5vcm1hbC4KKyAgICAgUG93dGFyemFqIGtyb2tpIDIuIGRvIDQuIGFieSBwb3ByYXdp5iBjYbNlIHpkYW5pZS4KKworLS0tPiBXIHRlaiBicmtqZSB0cm9jaOogLgorLS0tPiBXIHRlaiBsaW5paSBicmFrdWplIHRyb2No6iB0ZWtzdHUuCisKKyAgNS4gS2llZHkgY3p1amVzeiBzaeogc3dvYm9kbmllIHdzdGF3aWFqsWMgdGVrc3QgcHJ6ZWpkvCBkbworICAgICBwb2RzdW1vd2FuaWEgcG9uab9lai4KKworCit+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+fn4KKwkJCSAgICAgTEVLQ0pBIDEuIFBPRFNVTU9XQU5JRQorCisgIDEuIFBvcnVzemFzeiBrdXJzb3JlbSB1v3l3YWqxYyAic3RyemGzZWsiIGkga2xhd2lzenkgIGhqa2wgLgorICAgICAgIGggKHcgbGV3bykJIGogKHcgZPOzKQkgayAoZG8gZ/NyeSkJCWwgKHcgcHJhd28pCisKKyAgMi4gQnkgd2VqtuYgZG8gVmltLWEgKG9kIHpuYWt1IHphY2jqdHkpIHdwaXN6OgorCQkJICAgIHZpbSBOQVpXQV9QTElLVTxFTlRFUj4KKworICAzLiBCeSB3eWq25iB6IFZpbS1hIHdwaXN6OgorCQkJICAgIDxFU0M+IDpxITxFTlRFUj4gIGJ5IHVzdW6xYyB3c3p5c3RraWUgem1pYW55LgorCSAgICAgTFVCOgkgICAgPEVTQz4gOndxPEVOVEVSPiAgYnkgem1pYW55IHphY2hvd2HmLgorCisgIDQuIEJ5IHVzdW6x5iB6bmFrIHBvZCBrdXJzb3JlbSB3IHRyeWJpZSBOb3JtYWw6ICB4CisKKyAgNS4gQnkgd3N0YXdp5iB0ZWtzdCBwcnplZCBrdXJzb3JlbSB3IHRyeWJpZSBOb3JtYWw6CisJCQkgICAgaQkgIHR5cGUgaW4gdGV4dAkgICAgICA8RVNDPgorCitVV0FHQTogV2Nptm5p6mNpZSA8RVNDPiBwcnplbmllc2llIENp6iB6IHBvd3JvdGVtIGRvIHRyeWJ1IE5vcm1hbAorbHViIG9kd2+zYSBuaWVjaGNpYW5lIGx1YiBjeuq2Y2lvd28gd3Byb3dhZHpvbmUgcG9sZWNlbmlhLgorCitUZXJheiBtb79lbXkga29udHludW93YeYgaSBwcnplarbmIGRvIExla2NqaSAyLgorCit+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+fn4KKwkJICBMZWtjamEgMi4xLjogUE9MRUNFTklFIERFTEVURSAodXN1d2FuaWUpCisKKworCSAgICAgICAqKiBXcGlzeiAgZHcgIGJ5IHVzdW6xYyB0ZWtzdCBkbyBrb/FjYSB3eXJhenUuICoqCisKKyAgMS4gV2Nptm5paiAgPEVTQz4gIGJ5IHVwZXduaeYgc2nqLCC/ZSBqZXN0ZbYgdyB0cnliaWUgTm9ybWFsLgorCisgIDIuIFByemVuaWW2IGt1cnNvciBkbyBsaW5paSBwb25pv2VqIG96bmFjem9uZWogLS0tPi4KKworICAzLiBQcnplc3XxIGt1cnNvciBuYSBwb2N6sXRlayB3eXJhenUsIGt083JlIGNoY2VzeiB1c3VuseYuCisKKyAgNC4gV3Bpc3ogICBkdyAgIGJ5IHVzdW6xYyB3eXJhei4KKworICBVV0FHQTogTGl0ZXJ5ICBkdyAgYupksSBzaeogcG9qYXdpYeYgbmEgZG9sZSBla3JhbnUgdyBtaWFy6gorCSB3cGlzeXdhbmlhLiAgSmW2bGkgd3Bpc2GzZbYgY2+2ILxsZSB3Y2m2bmlqIDxFU0M+IGkgemFjem5paiBvZAorCSBwb2N6sXRrdS4KKworLS0tPiBKZXN0IHR1IHBhcuogcGFwaWVyIHd5cmF683csIGt083JlIGthbWll8SBuaWUgbmFsZb+xIGRvIG5vv3ljZSB0ZWdvIHpkYW5pYS4KKworICA1LiBQb3d0YXJ6YWoga3Jva2kgMy4gaSA0LiBkb3Dza2kgemRhbmllIG5pZSBi6mR6aWUgcG9wcmF3bmUsIHBvdGVtCisgIHByemVqZLwgZG8gTGVrY2ppIDIuMi4KKworfn5+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+CisJCSAgICBMZWtjamEgMi4yLjogV0nKQ0VKIFBPTEVDRdEgVVNVV0FKoUNZQ0gKKworCisJICAgICAgKiogV3Bpc3oJZCQgIGFieSB1c3VuseYgdGVrc3QgZG8ga2/xY2EgbGluaWkuICoqCisKKyAgMS4gV2Nptm5paiAgPEVTQz4gIGFieSBzaeogdXBld25p5iwgv2UgamVzdGW2IHcgdHJ5YmllIE5vcm1hbC4KKworICAyLiBQcnplbmlltiBrdXJzb3IgZG8gbGluaWkgcG9uab9laiBvem5hY3pvbmVqIC0tLT4uCisKKyAgMy4gUHJ6ZW5pZbYga3Vyc29yIGRvIGtv8WNhIHBvcHJhd25lZ28gemRhbmlhIChQTyBwaWVyd3N6ZWogIC4gKS4KKworICA0LiBXcGlzeiAgZCQgIGFieSB1c3VuseYgcmVzenTqIGxpbmlpLgorCistLS0+IEt0b7Ygd3Bpc2GzIGtvbmllYyB0ZWdvIHpkYW5pYSBkd3Vrcm90bmllLiB6ZGFuaWEgZHd1a3JvdG5pZS4KKworCisgIDUuIFByemVqZLwgZG8gTGVrY2ppIDIuMy4gYnkgenJvenVtaWXmIGNvIHNp6iBzdGGzby4KKworCisKKworCit+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+fn4KKwkJICAgICBMZWtjamEgMi4zLjogTyBQT0xFQ0VOSUFDSCBJIE9CSUVLVEFDSAorCisKKyAgRm9ybWF0IGRsYSBwb2xlY2VuaWEgdXN1d2FqsWNlZ28gIGQgIGplc3QgdGFraToKKworCSAgICBbbGljemJhXSAgZCAgb2JpZWt0ICAgICAgTFVCICAgICAgZCAgW2xpY3piYV0gIG9iaWVrdAorCisgIEdkemllOgorICAgbGljemJhIC0gaWxlIHJhenkgcG9sZWNlbmllIG1hIGJ55iB3eWtvbmFuZSAob3Bjam9uYWxuZSwgZG9tebZsbmE9MSkuCisgICBkICAgICAgLSBwb2xlY2VuaWUgdXN1d2FqsWNlLgorICAgb2JpZWt0IC0gbmEgY3p5bSBwb2xlY2VuaWUgYupkemllIHd5a29ueXdhbmUgKGxpc3RhIHBvbmm/ZWopLgorCisgIEty83RrYSBsaXN0YSBvYmlla3TzdzoKKyAgICB3IC0gb2Qga3Vyc29yYSBkbyBrb/FjYSB3eXJhenUgd7OxY3pharFjIHNwYWNq6i4KKyAgICBlIC0gb2Qga3Vyc29yYSBkbyBrb/FjYSB3eXJhenUgTklFIHezsWN6YWqxYyBzcGFjamkuCisgICAgJCAtIG9kIGt1cnNvcmEgZG8ga2/xY2EgbGluaWkuCisKK1VXQUdBOiBEbGEgY2lla2F3c2tpY2gsIHd5YmllcmFuaWUgb2JpZWt0dSB3IHRyeWJpZSBOb3JtYWwgYmV6IHBvbGVjYW5pYQorICAgICAgIHBvbGVjZW5pYSBwcnplbmllc2llIGt1cnNvciB0YWsgamFrIG9waXNhbm8gdyBsabZjaWUgb2JpZWt083cuCisKKworCit+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+fn4KKwkJICAgTGVrY2phIDIuNC46IFdZSqFURUsgRE8gJ1BPTEVDRU5JRS1PQklFS1QnCisKKworCQkgICAgKiogV3Bpc3ogIGRkICAgYnkgdXN1brFjIGNhs7EgbGluaeouICoqCisKKyAgWiBwb3dvZHUgY3rqc3RvtmNpIHVzdXdhbmlhIGNhs3ljaCBsaW5paSwgcHJvamVrdGFuY2kgVmltLWEgemRlY3lkb3dhbGksIL9lCisgIGLqZHppZSCzYXR3aWVqIHdwaXNh5iBkd2EgcmF6eSBwb2QgcnqxZCBkIGFieSB1c3VuseYgbGluaeouCisKKyAgMS4gUHJ6ZW5pZbYga3Vyc29yIGRvIHpkYW5pYSBwb25pv2VqLgorICAyLiBXcGlzeiAgZGQgIGFieSB1c3VusWMgd2llcnN6LgorICAzLiBUZXJheiBwcnplbmlltiBzaeogZG8gY3p3YXJ0ZWdvIHdpZXJzemEuCisgIDQuIFdwaXN6ICAyZGQgIChwYW1p6nRhaiAgbGljemJhLXBvbGVjZW5pZS1vYmlla3QpIGFieSB1c3VusWMgZHdpYSB3aWVyc3plLgorCisgICAgICAxKSAgUvO/ZSBzsSBjemVyd29uZSwKKyAgICAgIDIpICBCs290byBqZXN0IGZham5lLAorICAgICAgMykgIEZpb7NraSBzsSBuaWViaWVza2llLAorICAgICAgNCkgIE1hbSBzYW1vY2jzZCwKKyAgICAgIDUpICBaZWdhciBwb2RhamUgY3phcywKKyAgICAgIDYpICBDdWtpZXIgamVzdCBzs29ka2ksCisgICAgICA3KSAgSSB0eSB0Zb8uCisKKworfn5+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+CisJCSAgICAgIExla2NqYSAyLjUuOiBQT0xFQ0VOSUUgVU5ETyAoY29mbmlqKQorCisKKwkgICoqIFdjabZuaWogIHUgIGFieSBjb2ZuseYgc2t1dGtpIG9zdGF0bmllZ28gcG9sZWNlbmlhLgorCQkgVSB6YbYsIGJ5IGNvZm6x5iBza3V0a2kgZGxhIGNhs2VqIGxpbmlpLiAqKgorCisgIDEuIFByemVuaWW2IGt1cnNvciBkbyB6ZGFuaWEgcG9uab9laiBvem5hY3pvbmVnbyAtLS0+IGkgdW1pZbbmIGdvIG5hCisgICAgIHBpZXJ3c3p5bSBis+pkemllLgorICAyLiBXcGlzeiAgeCAgYWJ5IHVzdW6x5iBwaWVyd3N6eSBuaWVjaGNpYW55IHpuYWsuCisgIDMuIFRlcmF6IHdjabZuaWogIHUgIGFieSBjb2ZuseYgc2t1dGtpIG9zdGF0bmllZ28gcG9sZWNlbmlhLgorICA0LiBUeW0gcmF6ZW0gcG9wcmF3IHdzenlzdGtpZSBis+pkeSB3IGxpbmlpIHW/eXdharFjIHBvbGVjZW5pYSAgeCAuCisgIDUuIFRlcmF6IHdjabZuaWogd2llbGtpZSBVIGFieSBwcnp5d3LzY2nmIGxpbmnqIGRvIG9yeWdpbmFsbmVnbyBzdGFudS4KKyAgNi4gVGVyYXogd2Nptm5paiAgdSAga2lsa2EgcmF6eSBieSBjb2ZuseYgIFUgIGkgcG9wcnplZG5pZSBwb2xlY2VuaWEuCisgIDcuIFRlcmF6IHdwc3ogQ1RSTC1SICh0cnp5bWFqIHLzd25vY3pltm5pZSB3Y2m2bmnqdGUga2xhd2lzemUgQ1RSTCBpIFIpCisgICAgIGtpbGthIHJhenksIGJ5IGNvZm6x5iBjb2ZuaepjaWEuCisKKy0tLT4gUG9vcHJhdyBibOpkeXl5IHcgdGVlaiBsaW5paWkgaSB6YWFtaWll8SBqZSBwcnJ6ZXogY29vZm5pai4KKworICA4LiBUbyBzsSBiYXJkem8gcG+/eXRlY3puZSBwb2xlY2VuaWEuCisKKyAgICAgUHJ6ZWpkvCB0ZXJheiBkbyBwb2RzdW1vd2FuaWEgTGVrY2ppIDIuCisKK35+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+fgorCQkJICAgICBMRUtDSkEgMi4gUE9EU1VNT1dBTklFCisKKyAgMS4gQnkgdXN1brHmIHpuYWtpIG9kIGt1cnNvcmEgZG8ga2/xY2Egd3lyYXp1IHdwaXN6OiAgIGR3CisKKyAgMi4gQnkgdXN1brHmIHpuYWtpIG9kIGt1cnNvcmEgZG8ga2/xY2EgbGluaWkgd3Bpc3o6ICAgIGQkCisKKyAgMy4gQnkgdXN1brHmIGNhs7EgbGluaeo6ICAgIGRkCisKKyAgNC4gRm9ybWF0IHBvbGVjZW5pYSB3IHRyeWJpZSBOb3JtYWw6CisKKyAgICBbbGljemJhXSAgcG9sZWNlbmllICBvYmlla3QgICAgICBMVUIgICAgICBwb2xlY2VuaWUgIFtsaWN6YmFdICBvYmlla3QKKworICBHZHppZToKKyAgIGxpY3piYSAgICAtIGlsZSByYXp5IHBvbGVjZW5pZSBtYSBieeYgd3lrb25hbmUKKyAgIHBvbGVjZW5pZSAtIHRvIGNvIHRyemViYSB6cm9iaeYgKG5wLiAgZCAgZGxhIHVzdXdhbmlhKQorICAgb2JpZWt0ICAgIC0gbmEgY3p5bSBwb2xlY2VuaWUgYupkemllIHd5a29ueXdhbmUsIHRha2llIGphayAgdyAgKHd5cmF6KSwKKwkgICAgICAgJCAgKGRvIGtv8WNhIGxpbmlpKSwgZXRjLgorCisgIDUuIEJ5IGNvZm6x5iBwb3ByemVkbmllIHBvbGVjZW5pZSwgd3Bpc3o6CSAgdSAobWGzZSB1KQorICAgICBCeSBjb2ZuseYgd3N6eXN0a2llIHptaWFueSB3IGxpbmlpIHdwaXN6OgkgIFUgKHdpZWxraWUgVSkKKyAgICAgQnkgY29mbrHmIGNvZm5p6mNpYSB3cGlzejoJCQkgIENUUkwtUgorCit+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+fn4KKwkJCSBMZWtjamEgMy4xLjogUE9MRUNFTklFIFBVVCAod3N0YXcpCisKKworCSAgKiogV3Bpc3ogIHAgIGJ5IHdzdGF3aeYgb3N0YXRuaWUgdXN1bmnqY2lhIHBvIGt1cnNvcnplLiAqKgorCisgIDEuIFByemVuaWW2IGt1cnNvciBkbyBwaWVyd3N6ZWogbGluaWkgdyB6ZXN0YXdpZSBwb25pv2VqLgorCisgIDIuIFdwaXN6ICBkZCAgYWJ5IHVzdW6x5iBsaW5p6iBpIHByemVjaG93YeYgarEgdyBidWZvcnplIFZpbS1hLgorCisgIDMuIFByemVuaWW2IGt1cnNvciBkbyBsaW5paSBQT1dZr0VKIHRlaiBnZHppZSB1c3Vuaep0YSBsaW5pYSBwb3dpbm5hCisgICAgIHNp6iB6bmFqZG93YeYuCisKKyAgNC4gVyB0cnliaWUgTm9ybWFsLCB3Y2m2bmlqICBwICBieSB3c3Rhd2nmIGxpbmnqLgorCisgIDUuIFBvd3RhaiBrcm9raSAyLiBkbyA0LiBhvyB6bmFqZLEgc2nqIHcgb2Rwb3dpZWRuaW0gcG9yerFka3UuCisKKyAgICAgZCkgSmFrIGR3YSBhbmlvs2tpLgorICAgICBiKSBOYSBkb2xlIGZpb7NraSwKKyAgICAgYykgQSBteSBzaeoga29jaGFteSwKKyAgICAgYSkgTmEgZ/NyemUgcvO/ZSwKKworCit+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+fn4KKwkJICAgIExla2NqYSAzLjIuOiBQT0xFQ0VOSUUgUkVQTEFDRSAoemFzdLFwKQorCisKKyAgICAgICAqKiBXcGlzeiAgciAgYSBuYXN06nBuaWUgem5hayBieSB6YXN0sXBp5iB6bmFrIHBvZCBrdXJzb3JlbS4gKioKKworICAxLiBQcnplbmlltiBrdXJzb3IgZG8gcGllcndzemVqIGxpbmlpIHBvbmm/ZWogb3puYWN6b25laiAtLS0+CisKKyAgMi4gVXN0YXcga3Vyc29yIG5hIHBpZXJ3c3p5bSBis+pkemllLgorCisgIDMuIFdwaXN6ICByICBhIHBvdGVtIHpuYWsgamFraSBwb3dpbmllbiB6YXN0sXBp5iBis+pkbnkuCisKKyAgNC4gUG93dGFyemFqIGtyb2tpIDIuIGkgMy4gZG9w82tpIHBpZXJ3c3phIGxpbmlhIG5pZSBi6mR6aWUgcG9wcmF3bmEuCisKKy0tLT4gIEtqZWR5IHRlbiB3aWVyc3ogYmmzIHdzdPNraXdhbnkga3RvtiB3Y2l6brGzIHBlcuogerN5Y2gga2xhd2lyenkhCistLS0+ICBLaWVkeSB0ZW4gd2llcnN6IGJ5syB3c3R1a2l3YW55IGt0b7Ygd2Npc26xsyBwYXLqIHqzeWNoIGtsYXdpc3p5IQorCisgIDUuIFRlcmF6IGN6YXMgbmEgTGVrY2rqIDMuMy4KKworCitVV0FHQTogUGFtaep0YWogYnkgdWN6eeYgc2nqIOZ3aWN6sWMsIGEgbmllIHBhbWnqY2lvd28uCisKKworfn5+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+CisJCSAgICAgTGVrY2phIDMuMy46IFBPTEVDRU5JRSBDSEFOR0UgKHptaWXxKQorCisgICAgICoqIEJ5IHptaWVuaeYgY2GzZSBzs293byBsdWIgamVnbyBjeuq25iB3cGlzeiAgY3cgIChjaGFuZ2Ugd29yZCkuICoqCisKKyAgMS4gUHJ6ZW5pZbYga3Vyc29yIGRvIHBpZXJ3c3plaiBsaW5paSBwb25pv2VqIG96bmFjem9uZWogLS0tPi4KKworICAyLiBVbWlltuYga3Vyc29yIG5hICB1ICB3IGx1bm9zLgorCisgIDMuIFdwaXN6ICBjdyAgaSBwb3ByYXcgd3lyYXogKHcgdHltIHd5cGFka3Ugd3N0YXcgJ2luaWEnKS4KKworICA0LiBXY2m2bmlqIDxFU0M+IGkgcHJ6ZWpkvCBkbyBuYXN06nBuZWdvIGKz6mR1IChwaWVyd3N6eSB6bmFrLCBrdPNyeSBtYQorICAgICB1bGVjIHptaWFuaWUpLgorCisgIDUuIFBvd3RhcnphaiBrcm9raSAzLiBpIDQuIGRvcPNraSBwaWVyd3N6ZSB6ZGFuaWUgbmllIGLqZHppZSB0YWtpZSBzYW1lCisgICAgIGphayBkcnVnaWUuCisKKy0tLT4gVGEgbHVub3MgbWEgcGlyZSBzs/N3LCBrdPNyZSB0v2luYSB6Ym5pYyB1v2lmYWpvbmMgcGNtYXp1IHptaWXxLgorLS0tPiBUYSBsaW5pYSBtYSBwYXLqIHOz83csIGt083JlIHRyemViYSB6bWllbmnmIHW/eXdharFjIHBvbGVjZW5pYSB6bWll8S4KKworICBaYXV3Yb8sIL9lICBjdyAgbmllIHR5bGtvIHphbWllbmlhIHd5cmF6LCBhbGUgdGFrv2Ugem1pZW5pYSB0cnliIG5hCisgIEluc2VydCAod3Byb3dhZHphbmllKS4KKworfn5+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+CisJCSAgICAgIExla2NqYSAzLjQuOiBXScpDRUogWk1JQU4gVa9ZV0FKoUMgYworCisKKyAgICAgICAqKiBQb2xlY2VuaWUgY2hhbmdlIHW/eXdhIHRha2ljaCBzYW15Y2ggb2JpZWt083cgamFrIGRlbGV0ZS4gKioKKworICAxLiBQb2xlY2VuaWUgY2hhbmdlIGR6aWGzYSB0YWsgc2FtbyBqYWsgZGVsZXRlLiBGb3JtYXQgd3lnbLFkYSB0YWs6CisKKwkgICAgW2xpY3piYV0gIGMgIG9iaWVrdCAgICAgIExVQiAgICAgIGMgIFtsaWN6YmFdICBvYmlla3QKKworICAyLiBPYmlla3R5IHOxIHRha79lIHRha2llIHNhbWUsIG5wLjogIHcgICh3eXJheiksICAkICAoa29uaWVjIGxpbmlpKSwgZXRjLgorCisgIDMuIFByemVuaWW2IHNp6iBkbyBwaWVyd3N6ZWogbGluaWkgcG9uab9laiBvem5hY3pvbmVqIC0tLT4KKworICA0LiBVc3RhdyBrdXJzb3IgbmEgcGllcndzenltIGKz6mR6aWUuCisKKyAgNS4gV3Bpc3ogIGMkICwgcG9wcmF3IGtvbmllYyB3aWVyc3phIGkgd2Nptm5paiA8RVNDPi4KKworLS0tPiBLb25pZWMgdGVnbyB3aWVyc3phIG11c2kgYnnmIHBvcHJhd2lvbnkgYWJ5IHd5Z2yxZGFsIHRhayBqYWsgZHJ1Z2kuCistLS0+IEtvbmllYyB0ZWdvIHdpZXJzemEgbXVzaSBieeYgcG9wcmF3aW9ueSB1v3l3YWqxYyBwb2xlY2VuaWEgIGMkIC4KKworCisKK35+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+fgorCQkJICAgICBMRUtDSkEgMy4gUE9EU1VNT1dBTklFCisKKworICAxLiBBYnkgd3N0YXdp5iB0ZWtzdCwga3Tzcnkgem9zdGGzIHdjemW2bmllaiB1c3Vuaep0eSB3Y2m2bmlqICBwIC4gVG8KKyAgICAgcG9sZWNlbmllIHdzdGF3aWEgc2thc293YW55IHRla3N0IFBPIGt1cnNvcnplIChqZbZsaSBjYbNhIGxpbmlhCisgICAgIHpvc3Rhs2EgdXN1bmnqdGEsIHpvc3RhbmllIG9uYSB1bWllc3pjem9uYSB3IGxpbmlpIHBvbmm/ZWoga3Vyc29yYSkuCisKKyAgMi4gQnkgemFtaWVuaeYgem5hayBwb2Qga3Vyc29yZW0gd2Nptm5paiAgciAgYSBwb3RlbSB6bmFrLCBrdPNyeSBtYSB6YXN0sXBp5gorICAgICBvcnlnaW5hbG55LgorCisgIDMuIFBvbGVjZW5pZSBjaGFuZ2UgcG96d2FsYSBDaSBuYSB6YXN0sXBpZW5pZSB3eXN6Y3plZ/NsbmlvbmVnbyBvYmlla3R1CisgICAgIG9kIGt1cnNvcmEgZG8ga2/xY2Egb2JpZWt0dS4gTnAuIHdwaXN6ICBjdyAgYWJ5IHphbWllbmnmIHRla3N0IG9kCisgICAgIGt1cnNvcmEgZG8ga2/xY2Egd3lyYXp1LCAgYyQgIGFieSB6bWllbmnmIHRla3N0IGRvIGtv8WNhIGxpbmlpLgorCisgIDQuIEZvcm1hdCBkbyBwb2xlY2VuaWEgY2hhbmdlICh6bWll8Sk6CisKKwkgICAgW2xpY3piYV0gIGMgIG9iaWVrdCAgICAgIExVQiAgICAgIGMgIFtsaWN6YmFdICBvYmlla3QKKworICAgICBUZXJheiBwcnplamS8IGRvIG5hc3TqcG5laiBsZWtjamkuCisKKworCit+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+fn4KKwkJICAgTGVrY2phIDQuMS46IExPS0FMSVpBQ0pBIE9SQVogU1RBVFVTIFBMSUtVCisKKyAgICAgICAqKiBOYWNptm5paiBDVFJMLUcgYWJ5IHpvYmFjennmIHN3b2plIHBvs2+/ZW5pZSB3IHBsaWt1IGkgc3RhdHVzCisJICBwbGlrdS4gTmFjabZuaWogU0hJRlQtRyBhYnkgcHJ6ZWq25iBkbyBsaW5paSB3IHBsaWt1LiAqKgorCisgIFVXQUdBOiBQcnplY3p5dGFqIGNhs7EgbGVrY2rqIHphbmltIHd5a29uYXN6IGpha2lltiBwb2xlY2VuaWEhISEKKworICAxLiBQcnp5dHJ6eW1haiBrbGF3aXN6IENUUkwgaSB3Y2m2bmlqICBnIC4gTmEgZG9sZSBzdHJvbnkgcG9qYXdpIHNp6iBwYXNlaworICAgICBzdGF0dXN1IHogbmF6d7EgcGxpa3UgaSBudW1lcmVtIGxpbmlpLCB3IGt083JlaiBqZXN0ZbYuIFphcGFtaep0YWogbnVtZXIKKyAgICAgbGluaWkgZGxhIHBvdHJ6ZWIga3Jva3UgMy4KKworICAyLiBXY2m2bmlqIFNISUZULUcgYWJ5IHByemVqtuYgbmEga29uaWVjIHBsaWt1LgorCisgIDMuIFdwaXN6IG51bWVyIGxpbmlpLCB3IGt083JlaiBiebNltiBhIHBvdGVtIFNISUZULUcuICBUbyBwcnplbmllc2llIENp6gorICAgICB6IHBvd3JvdGVtIGRvIGxpbmlpLCB3IGt083JlaiBiebNltiBraWVkeSB3Y2lzbrGzZbYgQ1RSTC1HIChraWVkeQorICAgICB3cGlzdWplc3ogbnVtZXJ5IE5JRSBwb2phd2lharEgc2nqIG9uZSBuYSBla3JhbmllKS4KKworICA0LiBKZbZsaSBjenVqZXN6IHNp6iB3eXN0YXJjemFqsWNvIHBld25pZSwgd3lrb25haiBrcm9raSAxLTMuCisKKworCisKK35+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+fgorCQkJIExla2NqYSA0LjIuOiBQT0xFQ0VOSUUgU1pVS0FKCisKKworCSAgICAgKiogV3Bpc3ogIC8gIGEgbmFzdOpwbmllIHd5cmG/ZW5pZSBhYnkgamUgem5hbGW85i4gKioKKworICAxLiBXIHRyeWJpZSBOb3JtYWwgd3Bpc3ogIC8gLiBaYXV3Yb8sIL9lIHpuYWsgdGVuLCBvcmF6IGt1cnNvciBwb2phd2mxCisgICAgIHNp6iBuYSBkb2xlIGVrcmFudSB0YWsgc2FtbyBqYWsgcG9sZWNlbmllICA6IC4KKworICAyLiBUZXJheiB3cGlzeiAgYrNvbmQ8RU5URVI+IC4gIFRvIGplc3Qgc7Nvd28sIGt083JlZ28gY2hjZXN6IHN6dWth5i4KKworICAzLiBCeSBzenVrYeYgdGVqIHNhbWVqIGZyYXp5IHBvbm93bmllLCBwbyBwcm9zdHUgd2Nptm5paiAgbiAuCisgICAgIEFieSBzenVrYeYgdGVqIGZyYXp5IHcgcHJ6ZWNpd255bSwga2llcnVua3Ugd2Nptm5paiBTSElGVC1OLgorCisgIDQuIEpltmxpIGNoY2VzeiBzenVrYeYgZnJhenkgZG8gdHmzdSwgdb95aiBwb2xlY2VuaWEgID8gIHphbWlhc3QgIC8gLgorCistLS0+IEtpZWR5IHBvbGVjZW5pZSAnc3p1a2FqJyBvc2mxZ25pZSBrb25pZWMgcGxpa3UsIHByemVzenVraXdhbmllCisgICAgIHphY3puaWUgc2nqIG9kIHBvY3qxdGt1IHBsaWt1LgorCisgICdis29uZCcgdG8gbmllIGplc3QgbWV0b2RhIGJ5IHByemVsaXRlcm93YeYgYrOxZDsgJ2Kzb25kJyB0byBis7FkLgorCisKKworfn5+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+CisJCUxla2NqYSA0LjMuOiBXIFBPU1pVS0lXQU5JVSBQQVJVSqFDWUNIIE5BV0lBU9NXCisKKworCQkqKiBXcGlzeiAgJSAgYnkgem5hbGW85iBwYXN1arFjeSApLF0sIGx1YiB9IC4gKioKKworICAxLiBVbWlltuYga3Vyc29yIG5hIGt083J5bbYgeiAoLCBbLCBsdWIgeyB3IGxpbmlpIHBvbmm/ZWogb3puYWN6b25laiAtLS0+LgorCisgIDIuIFRlcmF6IHdwaXN6IHpuYWsgICUgLgorCisgIDMuIEt1cnNvciBwb3dpbmllbiBzaeogem5hbGW85iBuYSBwYXJ1arFjeW0gbmF3aWFzaWUuCisKKyAgNC4gV2Nptm5paiAgJSAgYWJ5IHByemVuaWW25iBrdXJzb3IgeiBwb3dyb3RlbSBkbyBwYXJ1arFjZWdvIG5hd2lhc3UuCisKKy0tLT4gVG8gKCBqZXN0IGxpbmlhIHRlc3Rvd2EgeiAoLCBbLCBdIGkgeywgfSAuICkpCisKK1VXQUdBOiBUYSBmdW5rY2phIGplc3QgYmFyZHpvIHW/eXRlY3puYSB3IGRlYnVnZ293YW5pdSBwcm9ncmFtdQorICAgICAgIHogbmllc3Bhcm93YW55bWkgbmF3aWFzYW1pIQorCisKKworCisKK35+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+fgorCQkgIExla2NqYSA0LjQuOiBJTk5BIE1FVE9EQSBQT1BSQVdJQU5JQSBCo8pE01cKKworCisJICoqIFdwaXN6ICA6cy9zdGFyeS9ub3d5L2cgIGFieSB6YW1pZW5p5iAnc3RhcnknIG5hICdub3d5Jy4gKioKKworICAxLiBQcnplbmlltiBrdXJzb3IgZG8gbGluaWkgcG9uab9laiBvem5hY3pvbmVqIC0tLT4uCisKKyAgMi4gV3Bpc3ogIDpzL2N6YWFzL2N6YXM8RU5URVI+IC4gIFphdXdhvywgv2UgdG8gcG9sZWNlbmllIHptaWVuaWEKKyAgICAgdHlsa28gcGllcndzemUgd3lzdLFwaWVuaWUgJ2N6YWFzJyB3IGxpbmlpLgorCisgIDMuIFRlcmF6IHdwaXN6ICA6cy9jemFhcy9jemFzL2cgIG96bmFjemEgemFtaWFu6iAoc3Vic3R5dHVjauopCisgICAgIGdsb2JhbG5pZSB3IGNhs2VqIGxpbmlpLiAgWm1pZW5pYSB3c3p5c3RraWUgd3lzdLFwaWVuaWEgdyBsaW5paS4KKworLS0tPiBOYWpsZXBzenkgY3phYXMgbmEgem9iYWN6ZW5pZSBuYWqzYWRuaWVqc3p5Y2gga3dpYXTzdyB0byBjemFhcyB3aW9zbnkuCisKKyAgNC4gQWJ5IHptaWVuaeYgd3N6eXN0a2llIHd5c3SxcGllbmlhILNh8WN1Y2hhIHpuYWvzdyBwb21p6mR6eSBkd29tYSBsaW5pYW1pLAorICAgICB3cGlzejogOiMsI3Mvc3RhcmUvbm93ZS9nIGdkemllICMsIyBzsSBudW1lcmFtaSBkd/NjaCBsaW5paS4KKyAgICAgV3Bpc3ogIDolcy9zdGFyZS9ub3dlL2cgICBieSB6bWllbmnmIHdzenlzdGtpZSB3eXN0sXBpZW5pYSB3IGNhs3ltIHBsaWt1LgorCisKKworCit+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+fn4KKwkJCSAgICAgTEVLQ0pBIDQuIFBPRFNVTU9XQU5JRQorCisKKyAgMS4gQ1RSTC1HICBwb2thv2UgVHdvarEgcG96eWNq6iB3IHBsaWt1IGkgc3RhdHVzIHBsaWt1LiAgU0hJRlQtRyBwcnplbm9zaQorICAgICBDaeogZG8ga2/xY2EgcGxpa3UuICBTSElGVC1HIHBvcHJ6ZWR6b255IGxpY3pisSBwcnplbm9zaSBDaeogZG8gbGluaWkKKyAgICAgbyB0eW0gbnVtZXJ6ZS4KKworICAyLiBXcGlzYW5pZSAgLyAgYSBuYXN06nBuaWUgs2HxY3VjaGEgem5ha/N3IHN6dWthILNh8WN1Y2hhIERPIFBSWk9EVS4KKyAgICAgV3Bpc2FuaWUgID8gIGEgbmFzdOpwbmllILNh8WN1Y2hhIHpuYWvzdyBzenVrYSCzYfFjdWNoYSBETyBUWaNVLgorICAgICBQbyB3eXN6dWtpd2FuaXUgd2Nptm5paiAgbiAgYnkgem5hbGW85iBuYXN06nBuZSB3eXN0sXBpZW5pZSBzenVrYW5lagorICAgICBmcmF6eSB0eW0gc2FteW0ga2llcnVua3UgbHViIFNoaWZ0LU4gYnkgc3p1a2HmIHcga2llcnVua3UgcHJ6ZWNpd255bS4KKworICAzLiBXcGlzYW5pZSAgJSAgZ2R5IGt1cnNvciB6bmFqZHVqZSBzaeogbmEgKCwpLFssXSx7LCBsdWIgfSBsb2thbGl6dWplCisgICAgIHBhcnVqsWN5IHpuYWsuCisKKyAgNC4gQnkgemFtaWVuaeYgcGllcndzenkgc3RhcnkgbmEgbm93eSB3IGxpbmlpIHdwaXN6ICAgICAgOnMvc3Rhcnkvbm93eQorICAgICBCeSB6YW1pZW5p5iB3c3p5c3RraWUgc3RhcnkgbmEgbm93eSB3IGxpbmlpIHdwaXN6ICAgICA6cy9zdGFyeS9ub3d5L2cKKyAgICAgQnkgemFtaWVuaeYgZnJhenkgcG9taepkenkgZHdvbWEgbGluaWFtaSAjIHdwaXN6ICAgICAgOiMsI3Mvc3Rhcnkvbm93eS9nCisgICAgIEJ5IHphbWllbmnmIHdzenlzdGtpZSB3eXN0sXBpZW5pYSB3IHBsaWt1IHdwaXN6ICAgICAgIDolcy9zdGFyeS9ub3d5L2cKKyAgICAgQnkgVmltIHByb3NpsyBDaeogbyBwb3R3aWVyZHppZW5pZSBkb2RhaiAnYycJICAgOiVzL3N0YXJ5L25vd3kvZ2MKKworCit+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+fn4KKwkJIExla2NqYSA1LjEuOiBKQUsgV1lLT05BxiBQT0xFQ0VOSUEgWkVXTspUUlpORQorCisKKwkqKiBXcGlzeiAgOiEgIGEgbmFzdOpwbmllIHpld27qdHJ6bmUgcG9sZWNlbmllIGJ5IGplIHd5a29uYeYuICoqCisKKyAgMS4gV3Bpc3ogem5ham9tZSBwb2xlY2VuaWUgIDogIGJ5IHVzdGF3aeYga3Vyc29yIG5hIGRvbGUgZWtyYW51LiBUbyBwb3p3YWxhCisgICAgIG5hIHdwcm93YWR6ZW5pZSBwb2xlY2VuaWEuCisKKyAgMi4gVGVyYXogd3N0YXcgICEgICh3eWtyenlrbmlrKS4gVG8gdW1vv2xpd2kgQ2kgd3lrb25hbmllIGRvd29sbmVnbworICAgICB6ZXdu6nRyem5lZ28gcG9sZWNlbmlhIHBvd7Nva2kuCisKKyAgMy4gSmFrbyBwcnp5a7NhZCB3cGlzeiAgbHMgIHphICAhICBhIG5hc3TqcG5pZSB3Y2m2bmlqIDxFTlRFUj4uIFRvIHBvbGVjZW5pZQorICAgICBwb2thv2Ugc3BpcyBwbGlr83cgdyBUd29pbSBrYXRhbG9ndSwgdGFrIGpha2J5tiBiebMgcHJ6eSB6bmFrdSB6YWNo6nR5CisgICAgIHBvd7Nva2kuIE1vv2VzeiB0Zb8gdb955iAgOiFkaXIgIGpltmxpICBscyAgbmllIGR6aWGzYS4KKworLS0tPiBVd2FnYTogIFcgdGVuIHNwb3PzYiBtb79uYSB3eWtvbmHmIHdzenlzdGtpZSBwb2xlY2VuaWEgcG93s29raS4KKy0tLT4gVXdhZ2E6ICBXc3p5c3RraWUgcG9sZWNlbmlhICA6ICBtdXN6sSBieeYgemFrb/Fjem9uZSA8RU5URVI+LgorCisKKworCisKK35+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+fgorCQkgICAgTGVrY2phIDUuMi46IFdJykNFSiBPIFpBUElTWVdBTklVIFBMSUvTVworCisKKwkgICAgKiogQnkgemFjaG93YeYgem1pYW55IHcgcGxpa3Ugd3Bpc3ogOncgTkFaV0FfUExJS1UgLiAqKgorCisgIDEuIFdwaXN6ICA6IWRpciAgbHViICA6IWxzICBieSB6b2JhY3p55iBzcGlzIHBsaWvzdyB3IGthdGFsb2d1LgorICAgICBKdb8gd2llc3osIL9lIG11c2lzeiB3Y2lzbrHmIDxFTlRFUj4gcG8gdHltLgorCisgIDIuIFd5YmllcnogbmF6d+ogcGxpa3UgamFrYSBqZXN6Y3plIG5pZSBpc3RuaWVqZSwgbnAuIFRFU1QuCisKKyAgMy4gVGVyYXogd3Bpc3o6ICAgOncgVEVTVCAgIChnZHppZSBURVNUIGplc3QgbmF6d7EgcGxpa3UgamFrsSB3eWJyYbNlti4pCisKKyAgNC4gVG8gcG9sZWNlbmllIHphcGFtaep0YSBjYbN5IHBsaWsgKFZpbSBUdXRvcikgcG9kIG5henexIFRFU1QuCisgICAgIEJ5IHRvIHNwcmF3ZHpp5iB3cGlzeiAgOiFkaXIgLCC/ZWJ5IHpub3d1IHpvYmFjennmIGxpc3TqIHBsaWvzdy4KKworLS0tPiBaYXV3Yb8sIL9lIGdkeWJ5tiB0ZXJheiB3eXN6ZWSzIHogVmltLWEsIGEgbmFzdOpwbmllIHdzemVksyBwb25vd25pZQorICAgICBrb21lbmSxICB2aW0gVEVTVCAsIHBsaWsgYnmzYnkgZG9rs2FkbrEga29wabEgdHV0b3JpYWxhIGtpZWR5IGdvCisgICAgIHphcGlzeXdhs2W2LgorCisgIDUuIFRlcmF6IHVzdfEgcGxpayB3cGlzdWqxYzoJCSAgIDohcm0gVEVTVAorCisKK35+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+fgorCQlMZWtjamEgNS4zLjogU0VMRUtUWVdORSBQT0xFQ0VOSUUgV1JJVEUgKHphcGlzeikKKworCisJICAgICoqIEJ5IHphY2hvd2HmIGN66rbmIHBsaWt1IHdwaXN6ICA6IywjIHcgTkFaV0FfUExJS1UgKioKKworICAxLiBKZXN6Y3plIHJheiB3cGlzeiAgOiFkaXIgIGx1YiAgOiFscyAgYnkgdXp5c2th5iBsaXN06iBwbGlr83cKKyAgICAgdyBrYXRhbG9ndSBpIHd5Ymllcnogb2Rwb3dpZWRuabEgbmF6d+ogdGFrsSBqYWsgVEVTVC4KKworICAyLiBQcnplbmlltiBrdXJzb3IgbmEgZ/NyZSB0ZWogc3Ryb255IGkgd2Nptm5paiBDVFJMLUcgYnkgdXp5c2th5gorICAgICBudW1lciBsaW5paS4gWkFQQU1JylRBSiBUyiBMSUNaQsohCisKKyAgMy4gVGVyYXogcHJ6ZW5pZbYgc2nqIG5hIGTzsyBzdHJvbnkgaSB3cGlzeiAgQ1RSTC1HIHpub3d1LiAgWkFQQU1JylRBSgorICAgICBOVU1FUiBUQUuvRSBURUogTElOSUkhCisKKyAgNC4gQnkgemFjaG93YeYgSkVEWU5JRSBjeuq25iBwbGlrdSB3cGlzeiAgOiMsIyB3IFRFU1QgICBnZHppZSAgIywjIHRvCisgICAgIGR3aWUgbGljemJ5IGpha2llIHphcGFtaep0YbNltiAoZ/NyYSwgZPOzIGVrcmFudSksIGEgVEVTVCB0byBuYXp3YQorICAgICBUd29qZWdvIHBsaWt1LgorCisgIDUuIFBvbm93bmllIHNwcmF3ZLwgY3p5IHRlbiBwbGlrIHRhbSBqZXN0ICggOiFkaXIgKSwgYWxlIE5JRSB1c3V3YWogZ28uCisKKworCit+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+fn4KKwkJICAgTGVrY2phIDUuNC46IFdTVEFXSUFOSUUgSSCjoUNaRU5JRSBQTElL01cKKworCisJICAgICoqIEJ5IHdzdGF3aeYgemF3YXJ0b7bmIHBsaWt1IHdwaXN6ICAgOnIgTkFaV0FfUExJS1UgKioKKworICAxLiBXcGlzeiAgOiFkaXIgIGJ5IHNp6iB1cGV3bmnmLCB6ZSBUd/NqIHBsaWsgVEVTVCB6b3N0YbMgcG9wcmF3bmllCisgICAgIHphcGFtaep0YW55LgorCisgIDIuIFVtaWW25iBrdXJzb3IgbmEgZ/NyemUgc3Ryb255LgorCitVV0FHQTogUG8gd3lrb25hbml1IGtyb2t1IDMuIHBvbm93bmllIHpvYmFjenlzeiBMZWtjauogNS4zLiBQb3RlbSBwcnplamS8CisgICAgICAgZG8gRE+jVSBieSB6b2JhY3p55iBwb25vd25pZSB06iBsZWtjauouCisKKyAgMy4gVGVyYXogd2N6eXRhaiBwbGlrIFRFU1Qgdb95d2FqsWMgcG9sZWNlbmlhICA6ciBURVNUICwgZ2R6aWUgVEVTVAorICAgICBqZXN0IG5henexIHBsaWt1LgorCitVV0FHQTogUGxpaywga3Tzcnkgd2N6eXR1amVzeiBqZXN0IHdzdGF3aWFueSB0YW0gZ2R6aWUgYnmzIGt1cnNvci4KKworICA0LiBCeSBzcHJhd2R6aeYgY3p5IHBsaWsgem9zdGGzIHdjenl0YW55IGNvZm5paiBrdXJzb3IgaSB6b2JhY3osIL9lCisgICAgIHRlcmF6IHOxIGR3aWUga29waWUgTGVrY2ppIDUuMy4sIG9yeWdpbmGzIGkga29waWEgeiBwbGlrdS4KKworCit+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+fn4KKwkJCSAgICAgTEVLQ0pBIDUuIFBPRFNVTU9XQU5JRQorCisKKyAgMS4gIDohcG9sZWNlbmllIHd5a29udWplIHBvbGVjZW5pZSB6ZXdu6nRyem5lLgorCisgICAgICBVv3l0ZWN6bnltaSBwcnp5a7NhZGFtaSBzsToKKworCSAgOiFkaXIgIC0gIHBva2F6dWplIHNwaXMgcGxpa/N3IHcga2F0YWxvZ3UuCisKKwkgIDohcm0gTkFaV0FfUExJS1UgIC0gIHVzdXdhIHBsaWsgTkFaV0FfUExJS1UuCisKKyAgMi4gIDp3IE5BWldBX1BMSUtVICB6YXBpc3VqZSBvYmVjbnkgcGxpayBWaW0tYSBuYSBkeXNrIHogbmF6d7EgTkFaV0FfUExJS1UuCisKKyAgMy4gIDojLCN3IE5BWldBX1BMSUtVICB6YXBpc3VqZSBsaW5pZSBvZCAjIGRvICMgdyBwbGlrdSBOQVpXQV9QTElLVS4KKworICA0LiAgOnIgTkFaV0FfUExJS1UgIHdjenl0dWplIHogZHlza3UgcGxpayBOQVpXQV9QTElLVSBpIHdzdGF3aWEgZ28gZG8KKyAgICAgIGJpZb+xY2VnbyBwbGlrdSBwbyBrdXJzb3J6ZS4KKworCisKKworCit+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+fn4KKwkJICAgICAgTGVrY2phIDYuMS46IFBPTEVDRU5JRSBPUEVOIChvdHfzcnopCisKKworICAgICAgKiogV3Bpc3ogIG8gIGJ5IG90d29yennmIGxpbmnqIHBvbmm/ZWoga3Vyc29yYSBpIHByemVuaWW25iBzaeogZG8KKwkgdHJ5YnUgSW5zZXJ0ICh3cHJvd2FkemFuaWUpLiAqKgorCisgIDEuIFByemVuaWW2IGt1cnNvciBkbyBsaW5paSBwb25pv2VqIG96bmFjem9uZWogLS0tPi4KKworICAyLiBXcGlzeiAgbyAgKG1hs2UpIGJ5IG90d29yennmIGxpbmnqIFBPTkmvRUoga3Vyc29yYSBpIHByemVuaWW25iBzaeoKKyAgICAgZG8gdHJ5YnUgSW5zZXJ0ICh3cHJvd2FkemFuaWUpLgorCisgIDMuIFRlcmF6IHByemVwaXN6IGxpbmnqIG96bmFjem9usSAtLS0+IGkgd2Nptm5paiA8RVNDPiBieSB3eWq25gorICAgICB6IHRyeWJ1IEluc2VydCAod3Byb3dhZHphbmllKS4KKworLS0tPiBQbyB3Y2m2bmnqY2l1ICBvICBrdXJzb3Igem5hamR6aWUgc2nqIHcgb3R3YXJ0ZWogbGluaWkgdyB0cnliaWUKKyAgICAgSW5zZXJ0ICh3cHJvd2FkemFuaWUpLgorCisgIDQuIEJ5IG90d29yennmIGxpbmnqIFBPV1mvRUoga3Vyc29yYSB3Y2m2bmlqIHdpZWxraWUgIE8gIHphbWlhc3QgbWGzZWdvCisgICAgIG8gLiBXeXBy82J1aiB0byBuYSBsaW5paSBwb25pv2VqLgorCisgT3R383J6IGxpbmnqIHBvd3m/ZWogd2Npc2tharFjIFNISUZULU8gZ2R5IGt1cnNvciBi6mR6aWUgbmEgdGVqIGxpbmlpLgorCit+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+fn4KKwkJICAgICBMZWtjamEgNi4yLjogUE9MRUNFTklFIEFQUEVORCAoZG9kYWopCisKKworCQkgICoqIFdwaXN6ICBhICBieSBkb2Rh5iB0ZWtzdCBaQSBrdXJzb3JlbS4gKioKKworICAxLiBQcnplbmlltiBrdXJzb3IgZG8ga2/xY2EgcGllcndzemVqIGxpbmlpIHBvbmm/ZWogb3puYWN6b25laiAtLS0+CisgICAgIFpy82IgdG8gd2Npc2tharFjICAkICB3IHRyeWJpZSBOb3JtYWwuCisKKyAgMi4gV3Bpc3ogIGEgIChtYbNlKSBhYnkgZG9kYeYgdGVrc3QgWkEgem5ha2llbSBwb2Qga3Vyc29yZW0uCisgICAgIFdpZWxraWUgQSBkb2RhamUgdGVrc3QgbmEga2/xY3UgbGluaWkuCisKK1V3YWdhOiBUbyBvc3pjeupkemEgd3Bpc2FuaWE6IG9zdGF0bmkgem5hayAoICQgKSwgIGkgLCB0ZWtzdCBkbyBkb2RhbmlhLAorICAgICAgIDxFU0M+LCBzdHJ6YbNrYSB3IHByYXdvIGkgb3N0YXRlY3puaWUgIHggLCB0eWxrbyBwbyB0byBieSBkb2Rh5gorICAgICAgIHRla3N0IG5hIGtv8WN1IGxpbmlpLgorCisgIDMuIFRlcmF6IGRva2/xY3ogcGllcndzerEgbGluaeouIFphdXdhvyB0YWu/ZSwgv2UgIGFwcGVuZCAgKGRvZGFqKQorICAgICBkemlhs2EgdGFrIHNhbW8gamFrIHRyeWIgSW5zZXJ0ICh3cHJvd2FkemFuaWUpIHogd3lqsXRraWVtIHRlZ28gZ2R6aWUKKyAgICAgdGVrc3QgamVzdCB3c3Rhd2lhbnkuCisKKy0tLT4gVGEgbGluaWEgcG96d29saSBDaSDmd2ljennmCistLS0+IFRhIGxpbmlhIHBvendvbGkgQ2kg5ndpY3p55iBkb2Rhd2FuaWUgdGVrc3R1IGRvIGtv8WNhIGxpbmlpLgorCit+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+fn4KKwkJICAgTGVrY2phIDYuMy46IElOTkEgV0VSU0pBIFJFUExBQ0UgKHphbWlhbmEpCisKKworCSAgICoqIFdwaXN6IHdpZWxraWUgIFIgIGJ5IHphbWllbmnmIHdp6mNlaiBuab8gamVkZW4gem5hay4gKioKKworICAxLiBQcnplbmlltiBrdXJzb3IgZG8gcGllcndzemVqIGxpbmlpIHBvbmm/ZWogb3puYWN6b25laiAtLS0+LgorCisgIDIuIFVtaWW25iBrdXJzb3IgbmEgcG9jerF0a3UgcGllcndzemVnbyB3eXJhenUsIGt083J5IHLzem5pIHNp6iBvZAorICAgICBkcnVnaWVqIGxpbmlpIG96bmFjem9uZWogLS0tPiAod3lyYXogJ29zdGF0bmknKS4KKworICAzLiBUZXJheiB3cGlzeiAgUiAgaSB6YW1pZfEgcmVzenTqIHRla3N0dSB3IHBpZXJ3c3plaiBsaW5paSBwcnplegorICAgICBuYWRwaXNhbmllIG5hZCBzdGFyeW0gdGVrc3RlbSB0YWsgYWJ5IHBpZXJ3c3phIGxpbmlhIGJyem1pYbNhIHRhayBzYW1vCisgICAgIGphayBkcnVnYS4KKworLS0tPiBUbyBtYWtlIHRoZSBmaXJzdCBsaW5lIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG9uIHRoaXMgcGFnZSB1c2UgdGhlIGtleXMuCistLS0+IFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCwgdHlwZSBSIGFuZCB0aGUgbmV3IHRleHQuCisKKyAgNC4gWmF1d2G/LCC/ZSBraWVkeSB3Y2m2bmllc3ogPEVTQz4gYWJ5IHd5arbmIG5pZXptaWVuaW9ueSB0ZWtzdAorICAgICBwb3pvc3RhamUuCisKKworCit+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+fn4KKwkJCSBMZWtjamEgNi40LjogVVNUQVdJQU5JRSBPUENKSQorCisKKyoqIFVzdGF3aWFuaWUgb3BjamkgdGFrIGJ5IHN6dWthaiBsdWIgc3Vic3R5dHVjamEgaWdub3Jvd2GzeSB3aWVsa2+25iBsaXRlciAqKgorCisgIDEuIFN6dWthaiAnaWdub3JlJyB3cGlzdWqxYyAodyB0cnliaWUgTm9ybWFsKToKKyAgICAgL2lnbm9yZQorICAgICBQb3d083J6IHN6dWthbmllIGtpbGthIHJhenkgbmFjaXNrYWqxYyBrbGF3aXN6ICBuIC4KKworICAyLiBVc3RhdyBvcGNq6iAnaWMnIChJZ25vcmUgY2FzZSAtLSBpZ25vcnVqIHdpZWxrb7bmIGxpdGVyKSBwb3ByemV6CisgICAgIHdwaXNhbmllOgkJOnNldCBpYworCisgIDMuIFRlcmF6IHN6dWthaiAnaWdub3JlJyBwb25vd25pZSB3Y2lza3VqsWM6IG4KKyAgICAgUG93dPNyeiBzenVrYW5pZSBraWxrYSByYXp5IG5hY2lza2FqsWMga2xhd2lzeiAgbiAuCisKKyAgNC4gVXN0YXcgb3BjamUgJ2hsc2VhcmNoJyBpICdpbmNzZWFyY2gnOgorICAgICA6c2V0IGhscyBpcworCisgIDUuIFRlcmF6IHdwcm93YWS8IHBvbGVjZW5pZSBzenVrYWogcG9ub3duaWUgaSB6b2JhY3ogY28gc2nqIHpkYXJ6eToKKyAgICAgL2lnbm9yZQorCisKK35+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+fgorCQkJICAgICBMRUtDSkEgNi4gUE9EU1VNT1dBTklFCisKKworICAxLiBXcGlzYW5pZSAgbyAgb3R3aWVyYSBsaW5p6iBQT05Jr0VKIGt1cnNvcmEgaSB1bWllc3pjemEga3Vyc29yCisgICAgIHcgb3R3YXJ0ZWogbGluaWkgdyB0cnliaWUgSW5zZXJ0ICh3cHJvd2FkemFuaWUpLgorICAgICBXcGlzYW5pZSB3aWVsa2llZ28gIE8gIG90d2llcmEgbGluaeogUE9XWa9FSiBsaW5paSwgdyBrdPNyZWoKKyAgICAgem5hamR1amUgc2nqIGt1cnNvci4KKworICAyLiBXcGlzeiAgYSAgYnkgd3N0YXdp5iB0ZWtzdCBaQSB6bmFraWVtIG5hLCBrdPNyeW0gamVzdCBrdXJzb3IuCisgICAgIFdwaXNhbmllIHdpZWxraWVnbyAgQSAgYXV0b21hdHljem5pZSBkb2RhamUgdGVrc3QgbmEga2/xY3UgbGluaWkuCisKKyAgMy4gV3Bpc2FuaWUgd2llbGtpZWdvICBSICB3cHJvd2FkemEgdyB0cnliIFJlcGxhY2UgKHphbWlhbmEpIGRvcPNraQorICAgICBuaWUgem9zdGFuaWUgd2Nptm5p6nR5IDxFU0M+LgorCisgIDQuIFdwaXNhbmllICI6c2V0IHh4eCIgdXN0YXdpYSBvcGNq6iAieHh4Ii4KKworCisKKworCisKKworfn5+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+CisJCSAgICAgICBMRUtDSkEgNy4gUE9MRUNFTklBIFBPTU9DWSBPTi1MSU5FCisKKworCQkgICAgICAqKiBVv3ljaWUgc3lzdGVtdSBwb21vY3kgb24tbGluZSAqKgorCisgIFZpbSBwb3NpYWRhIGJhcmR6byBkb2JyeSBzeXN0ZW0gcG9tb2N5IG9uLWxpbmUuIEJ5IHphY3qx5iBzcHLzYnVqIGplZG5lagorICB6IHRyemVjaCBtb79saXdvtmNpOgorCisJLSB3Y2m2bmlqIGtsYXdpc3ogPEhFTFA+IChqZbZsaSB0YWtvd3kgcG9zaWFkYXN6KQorCS0gd2Nptm5paiBrbGF3aXN6IDxGMT4gKGpltmxpIHRha293eSBwb3NpYWRhc3opCisJLSB3cGlzeiAgIDpoZWxwPEVOVEVSPgorCisgIFdwaXN6ICAgOnE8RU5URVI+ICAgYnkgemFta26xYyBva25vIHBvbW9jeS4KKworICBNb79lc3ogdGW/IHpuYWxlvOYgcG9tb2MgbmEga2G/ZHkgdGVtYXQgcG9kYWqxYyBhcmd1bWVudCBwb2xlY2VuaWEgIjpoZWxwIi4KKyAgU3By82J1aiB0eWNoIChuaWUgemFwb21uaWogd2Npc26x5iA8RU5URVI+KToKKworICA6aGVscCB3CisgIDpoZWxwIGNfPFQKKyAgOmhlbHAgaW5zZXJ0LWluZGV4CisgIDpoZWxwIHVzZXItbWFudWFsCisKK35+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+fgorCQkgICAgIExFS0NKQSA4LiBUV09SWkVOSUUgU0tSWVBUVSBTVEFSVE9XRUdPCisKKwkJCSoqIFezsWN6YW5pZSBtb79saXdvtmNpIFZpbS1hICoqCisKKyAgVmltIG1hIG8gd2llbGUgd2nqY2VqIG1vv2xpd2+2Y2kgbmm/IFZpLCBhbGUgd2nqa3N6b7bmIHogbmljaCBqZXN0IGRvbXm2bG5pZQorICB3ebOxY3pvbmEuIEpltmxpIGNoY2VzeiB3s7FjennmIHRlIG1vv2xpd2+2Y2kgbmEgc3RhcmNpZSBtdXNpc3ogdXR3b3J6eeYKKyAgcGxpayAidmltcmMiLgorCisgIDEuIFBvY3qxdGVrIGVkeWNqaSBwbGlrdSAidmltcmMiIHphbGW/eSBvZCBUd29qZWdvIHN5c3RlbXU6CisgICAgIDplZGl0IH4vLnZpbXJjCSAgICAgZGxhIFVuaXhhCisgICAgIDplZGl0ICRWSU0vX3ZpbXJjICAgICAgIGRsYSBNUy1XaW5kb3dzCisKKyAgMi4gVGVyYXogd2N6eXRhaiBwcnp5a7NhZG93eSBwbGlrICJ2aW1yYyI6CisgICAgIDpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4gWmFwaXN6IHBsaWs6CisgICAgIDp3cml0ZQorCisgIE5hc3TqcG55bSByYXplbSBnZHkgemFjem5pZXN6IHByYWPqIHcgVmltaWUgYupkemllIG9uIHW/eXdh5iBwb2S2d2lldGxhbmlhCisgIHNrs2FkbmkuIE1vv2VzeiBkb2Rh5iB3c3p5c3RraWUgc3dvamUgdWx1YmlvbmUgdXN0YXdpZW5pYSBkbyB0ZWdvIHBsaWt1CisgICJ2aW1yYyIuCisKK35+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+fgorCisgIFR1dGFqIHNp6iBrb/FjenkgdHV0b3JpYWwgVmltLWEuIFpvc3RhsyBvbiBwb215tmxhbnkgdGFrIGFieSBkYeYga3LzdGtpCisgIHByemVnbLFkIGplZ28gbW+/bGl3b7ZjaSwgd3lzdGFyY3pharFjeSBiebYgbfNnsyBnbyB1v3l3YeYuIEplc3Qgb24KKyAgZGFsZWtpIG9kIGtvbXBsZXRub7ZjaSBwb25pZXdhvyBWaW0gbWEgbyB3aWVsZSwgd2llbGUgd2nqY2VqIHBvbGVjZfEuCisKKyAgRGxhIGRhbHN6ZWogbmF1a2kgcmVrb21lbmR1amVteSBrc2mxv2vqOgorCVZpbSAtIFZpIEltcHJvdmVkIC0gYXV0b3IgU3RldmUgT3VhbGxpbmUKKwlXeWRhd2NhOiBOZXcgUmlkZXJzCisgIFBpZXJ3c3phIGtzabF6a2EgY2Gza293aWNpZSBwb7Z3aepjb25hIFZpbS1vd2kuIFW/eXRlY3puYSB6d7Nhc3pjemEgZGxhCisgIHBvY3qxdGt1arFjeWNoLiBaYXdpZXJhIHdpZWxlIHByenlrs2Fk83cgaSBpbHVzdHJhY2ppLgorICBab2JhY3ogaHR0cDovL2ljY2YtaG9sbGFuZC5vcmcuL2NsaWNrNS5odG1sCisKKyAgVGEga3Npsb9rYSBqZXN0IHN0YXJzemEgaSBiYXJkemllaiBvIFZpIG5pvyBvIFZpbS1pZSwgYWxlIHRha79lIHdhcnRhCisgIHBvbGVjZW5pYToKKwlMZWFybmluZyB0aGUgVmkgRWRpdG9yIC0gYXV0b3IgTGluZGEgTGFtYgorCVd5ZGF3Y2E6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcyBJbmMuCisgIFRvIGRvYnJhIGtzabG/a2EgYnkgZG93aWVkemll5iBzaeogbmllbWFsIHdzenlzdGtpZWdvIGNvIGNoY2lhs2J5tiB6cm9iaeYKKyAgeiBWaS4gU3rzc3RhIGVkeWNqYSB6YXdpZXJhIHRlvyBpbmZvcm1hY2plIG8gVmltLWllLgorCisgIFBvIHBvbHNrdSB3eWRhbm86CisJRWR5dG9yIHZpLiBMZWtzeWtvbiBraWVzem9ua293eSAtIGF1dG9yIEFybm9sZCBSb2JiaW5zCisJV3lkYXdjYTogSGVsaW9uIDIwMDEgKE8nUmVpbGx5KS4KKwlJU0JOOiA4My03MTk3LTQ3Mi04CisJaHR0cDovL2hlbGlvbi5wbC9rc2lhemtpL3ZpbGVrLmh0bQorICBKZXN0IHRvIGtzabG/ZWN6a2EgemF3aWVyYWqxY2Egc3BpcyBwb2xlY2XxIHZpIGkgamVnbyBuYWp3Yb9uaWVqc3p5Y2gKKyAga2xvbvN3IChtaepkenkgaW5ueW1pIFZpbS1hKS4KKworCUVkeXRvciB2aSAtIGF1dG9yenkgTGluZGEgTGFtYiBpIEFybm9sZCBSb2JiaW5zCisJV3lkYXdjYTogSGVsaW9uIDIwMDEgKE8nUmVpbGx5KSAtIHdnIDYgYW5nLiB3eWRhbmlhCisJSVNCTjogODMtNzE5Ny01MzktMgorCWh0dHA6Ly9oZWxpb24ucGwva3NpYXpraS92aWVkeXQuaHRtCisgIFJvenN6ZXJ6b25hIHdlcnNqYSBMZWFybmluZyB0aGUgVmkgRWRpdG9yIHcgcG9sc2tpbSB0s3VtYWN6ZW5pdS4KKworICBUZW4gdHV0b3JpYWwgem9zdGGzIG5hcGlzYW55IHByemV6IE1pY2hhZWxhIEMuIFBpZXJjZSdhIGkgUm9iZXJ0YSBLLiBXYXJlJ2EsCisgIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcyBrb3J6eXN0YWqxYyB6IHBvbW9jeSBDaGFybGVzYSBTbWl0aGEsCisgIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHkuCisgIEUtbWFpbDogYndhcmVAbWluZXMuY29sb3JhZG8uZWR1LgorCisgIFptb2R5Zmlrb3dhbmUgZGxhIFZpbS1hIHByemV6IEJyYW1hIE1vb2xlbmFhcmEuCisKK35+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+fgorCisgIFByemV0s3VtYWN6b25lIHByemV6IE1pa2+zYWphIE1hY2hvd3NraWVnbywKKyAgU2llcnBpZfEgMjAwMSwKKyAgcmV2LiBNYXJ6ZWMgMjAwMgorICBXc3plbGtpZSB1d2FnaSBwcm9zeuoga2llcm93YeYgbmE6IG1pa21hY2hAd3AucGwKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci90dXRvci5wbC5jcDEyNTAgYi9ydW50aW1lL3R1dG9yL3R1dG9yLnBsLmNwMTI1MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQyYzljCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci90dXRvci5wbC5jcDEyNTAKQEAgLTAsMCArMSw4MzAgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAgVyBpIHQgYSBqCSB3ICAgdCB1IHQgbyByIGkgYSBsIHUJIFYgSSBNIC0gYQktICAgIFdlcnNqYSAgMS41LiAgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgIFZpbSB0byBwb3Tqv255IGVkeXRvciwga3TzcnkgcG9zaWFkYSB3aWVsZSBwb2xlY2XxLCB6Ynl0IGR1v28gYnkKKyAgICAgd3lqYZxuaeYgamUgd3N6eXN0a2llIHcgdHltIHR1dG9yaWFsdS4gVGVuIHByemV3b2RuaWsgbWEgbmF1Y3p55gorICAgICBDaeogcG9zs3VnaXdh5iBzaeogd3lzdGFyY3pharljbyB3aWVsb21hIGtvbWVuZGFtaSBieZwgbfNnsyCzYXR3bworICAgICB1v3l3YeYgVmltLWEgamFrbyBlZHl0b3JhIG9n82xuZWdvIHByemV6bmFjemVuaWEuCisKKyAgICAgQ3phcyBwb3RyemVibnkgbmEgdWtv8WN6ZW5pZSB0dXRvcmlhbGEgdG8gMjUgZG8gMzAgbWludXQgaSB6YWxlv3kKKyAgICAgb2QgdGVnbyBqYWsgd2llbGUgY3phc3Ugc3DqZHppc3ogbmEgZWtzcGVyeW1lbnRvd2FuaXUuICBQb2xlY2VuaWEKKyAgICAgd3lrb255d2FuZSB3IGN6YXNpZSBsZWtjamkgem1vZHlmaWt1arkgdGVrc3QuIFpy82Igd2N6ZZxuaWVqIGtvcGnqCisgICAgIHRlZ28gcGxpa3UgZG8g5ndpY3pl8SAoamWcbGkgemFjermzZZwga29tZW5kuSAidmltdHV0b3IiIHRvIGp1vworICAgICBwcmFjdWplc3ogbmEga29waWkpLgorCisgICAgIFdhv25lIGplc3QsIGJ5nCBwYW1p6nRhsywgv2UgcHJ6ZXdvZG5payB0ZW4gem9zdGGzIHphcHJvamVrdG93YW55IGRvCisgICAgIG5hdWtpIHBvcHJ6ZXog5ndpY3plbmlhLiBUbyBvem5hY3phLCC/ZSBtdXNpc3ogd3lrb255d2HmIHBvbGVjZW5pYQorICAgICBieSBuYXVjennmIHNp6iBpY2ggcHJhd2lks293by4gSmWcbGkgYupkemllc3ogamVkeW5pZSBjenl0YbMgdGVrc3QKKyAgICAgc3p5YmtvIHphcG9tbmlzeiB3aWVsZSBwb2xlY2XxIQorCisgICAgIFRlcmF6IHVwZXduaWogc2nqLCC/ZSBuaWUgbWFzeiB3Y2mcbmnqdGVnbyBDYXBzTG9ja2EgaSB3Y2lza2FqCWoKKyAgICAgdGFrIGSzdWdvIGRvcPNraSBMZWtjamEgMS4xLiBuaWUgd3lwZbNuaSBjYbNrb3dpY2llIGVrcmFudS4KKworfn5+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+CisJCSAgICAgIExla2NqYSAxLjEuOiBQT1JVU1pBTklFIFNJyiBLVVJTT1JFTQorCisgICAgICAgKiogQnkgd3lrb25h5iBydWNoIGt1cnNvcmVtLCB3Y2mcbmlqIGgsIGosIGssIGwgamFrIHBva2F6YW5vLiAqKgorCisJICAgICAgIF4KKwkgICAgICAgawkJICAgICAgV3NrYXrzd2thOiAgaCBqZXN0IHBvIGxld2VqCisJICA8IGgJICBsID4JCQkJICBsIGplc3QgcG8gcHJhd2VqCisJICAgICAgIGoJCQkJICBqIHd5Z2y5ZGEgamFrIHN0cnphs2thIHcgZPOzCisJICAgICAgIHYKKyAgMS4gUG9ydXN6YWoga3Vyc29yZW0gZG9w82tpIG5pZSBi6mR6aWVzeiBwZXdpZW4sIL9lIHBhbWnqdGFzeiBwb2xlY2VuaWEuCisKKyAgMi4gVHJ6eW1haiAgaiAgdGFrIGSzdWdvIGG/IGLqZHppZSBzaeogcG93dGFyemGzLgorLS0tPiBUZXJheiB3aWVzeiBqYWsgZG9qnOYgZG8gbmFzdOpwbmVqIGxla2NqaS4KKworICAzLiBVv3l3YWq5YyBzdHJ6YbNraSB3IGTzsyBwcnplamSfIGRvIG5hc3TqcG5laiBsZWtjamkuCisKK1V3YWdhOiBKZZxsaSBuaWUgamVzdGWcIHBld2llbiBjemVnb5wgY28gd3Bpc2GzZZwsIHdjaZxuaWogPEVTQz4gYnkgd3LzY2nmIGRvCisgICAgICAgdHJ5YnUgTm9ybWFsLiBXdGVkeSBwb3d083J6IHBvbGVjZW5pZS4KKworVXdhZ2E6IEtsYXdpc3plIGt1cnNvcmEgdGFrv2UgcG93aW5ueSBkemlhs2HmLCBhbGUgdb95d2FquWMgIGhqa2wgIGLqZHppZXN6CisgICAgICAgdyBzdGFuaWUgcG9ydXN6YeYgc2nqIG8gd2llbGUgc3p5YmNpZWogamFrIHNp6iB0eWxrbyBwcnp5end5Y3phaXN6LgorCit+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+fn4KKwkJIExla2NqYSAxLjIuOiBXQ0hPRFpFTklFIEkgV1lDSE9EWkVOSUUgWiBWSU0tYQorCisgISEgVVdBR0E6IFByemVkIHd5a29uYW5pZW0gamFraWVnb2tvbHdpZWsgcG9sZWNlbmlhIHByemVjenl0YWogY2GzuSBsZWtjauouISEKKworICAxLiBXY2mcbmlqIDxFU0M+IChhYnkgdXBld25p5iBzaeosIL9lIGplc3RlnCB3IHRyeWJpZSBOb3JtYWwpLgorICAyLiBXcGlzejoJCQk6cSE8RU5URVI+LgorCistLS0+IFRvIHNwb3dvZHVqZSB3eWqcY2llIHogZWR5dG9yYSBCRVogemFwYW1p6nR5d2FuaWEgem1pYW4gamFraWUKKyAgICAgemS5v3mzZZwgenJvYmnmLiBKZZxsaSBjaGNlc3ogemFwYW1p6nRh5iB6bWlhbnkgaSB3eWqc5gorICAgICB3cGlzejoJCQk6d3E8RU5URVI+CisKKyAgMy4gS2llZHkgd2lkemlzeiB6bmFrIHphY2jqdHkgcG93s29raSB3cGlzeiBrb21lbmTqLCC/ZWJ5IHdy82Np5gorICAgICBkbyB0dXRvcmlhbGEuCisgICAgIFBvd2luaWVuaWWcIHdwaXNh5joJICAgdmltdHV0b3I8RU5URVI+CisgICAgIE5vcm1hbG5pZSB1v3mzYnmcOgkgICB2aW0gdHV0b3I8RU5URVI+CisKKy0tLT4gJ3ZpbScgb3puYWN6YSBlZHl0b3IgdmltLCAndHV0b3InIGplc3QgcGxpa2VtLCBrdPNyeSBjaGNpYbNieZwKKyAgICAgZWR5dG93YeYuCisKKyAgNC4gSmWcbGkgY2hjZXN6IHphcGFtaep0YeYgcG9sZWNlbmlhLCB3eWtvbmFqIGtyb2tpIDEuIGRvIDMuIGFieQorICAgICB3eWqc5iBpIHdy82Np5iBkbyBlZHl0b3JhLiBQb3RlbSBwcnplbmllnCBzaeogZG8gTGVrY2ppIDEuMy4KKworfn5+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+CisJCSAgICAgTGVrY2phIDEuMy46IEVEWUNKQSBURUtTVFUgLSBLQVNPV0FOSUUKKworCisJKiogVyB0cnliaWUgTm9ybWFsIHdjaZxuaWogeCBhYnkgdXN1brnmIHpuYWsgcG9kIGt1cnNvcmVtLiAqKgorCisgIDEuIFByemVuaWWcIGt1cnNvciBkbyBsaW5paSBwb25pv2VqIG96bmFjem9uZWogLS0tPi4KKworICAyLiBCeSBwb3ByYXdp5iBis+pkeSwgbmFwcm93YWSfIGt1cnNvciBuYSB6bmFrIGRvIHVzdW5p6mNpYS4KKworICAzLiBXY2mcbmlqICB4ICBhYnkgdXN1brnmIG5pZWNoY2lhbnkgem5hay4KKworICA0LiBQb3d0YXJ6YWoga3Jva2kgMi4gZG8gNC4gZG9w82tpIHpkYW5pZSBuaWUgamVzdCBwb3ByYXduZS4KKworLS0tPiBLa3Jvd2EgcHJyemVza29jenmzYSBwcnJ6ZXoga3Npaeq/eWNjLgorCisgIDUuIFRlcmF6IGtpZWR5IHpkYW5pZSBqZXN0IHBvcHJhd2lvbmUgcHJ6ZWpknyBkbyBMZWtjamkgMS40LgorCitVV0FHQTogVWN6IHNp6iBwcnpleiDmd2ljemVuaWUsIG5pZSB3a3V3YW5pZS4KKworCisKKworfn5+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+CisJICAgICAgIExla2NqYSAxLjQuOiBFRFlDSkEgVEVLU1RVIC0gSU5TRVJUICh3cHJvd2FkemFuaWUpCisKKworCSAgICAqKiBXIHRyeWJpZSBOb3JtYWwgd2NpnG5paiAgaSAgYWJ5IHdzdGF3aeYgdGVrc3QuICoqCisKKyAgMS4gUHJ6ZW5pZZwga3Vyc29yIGRvIHBpZXJ3c3plaiBsaW5paSBwb25pv2VqIG96bmFjem9uZWogLS0tPi4KKworICAyLiBBYnkgcG9wcmF3aeYgcGllcndzenkgd2llcnN6LCB1c3RhdyBrdXJzb3IgbmEgcGllcndzenltIHpuYWt1IFBPIHR5bQorICAgICBnZHppZSB0ZWtzdCBtYSBieeYgd3N0YXdpb255LgorCisgIDMuIFdjaZxuaWogIGkgIGEgbmFzdOpwbmllIHdwaXN6IGtvbmllY3puZSBwb3ByYXdraS4KKworICA0LiBQbyBwb3ByYXdpZW5pdSBis+pkdSB3Y2mcbmlqIDxFU0M+IGJ5IHdy82Np5iBkbyB0cnlidSBOb3JtYWwuCisgICAgIFBvd3RhcnphaiBrcm9raSAyLiBkbyA0LiBhYnkgcG9wcmF3aeYgY2GzZSB6ZGFuaWUuCisKKy0tLT4gVyB0ZWogYnJramUgdHJvY2jqIC4KKy0tLT4gVyB0ZWogbGluaWkgYnJha3VqZSB0cm9jaOogdGVrc3R1LgorCisgIDUuIEtpZWR5IGN6dWplc3ogc2nqIHN3b2JvZG5pZSB3c3Rhd2lharljIHRla3N0IHByemVqZJ8gZG8KKyAgICAgcG9kc3Vtb3dhbmlhIHBvbmm/ZWouCisKKworfn5+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+CisJCQkgICAgIExFS0NKQSAxLiBQT0RTVU1PV0FOSUUKKworICAxLiBQb3J1c3phc3oga3Vyc29yZW0gdb95d2FquWMgInN0cnphs2VrIiBpIGtsYXdpc3p5CWhqa2wgLgorICAgICAgIGggKHcgbGV3bykJIGogKHcgZPOzKQkgayAoZG8gZ/NyeSkJCWwgKHcgcHJhd28pCisKKyAgMi4gQnkgd2VqnOYgZG8gVmltLWEgKG9kIHpuYWt1IHphY2jqdHkpIHdwaXN6OgorCQkJICAgIHZpbSBOQVpXQV9QTElLVTxFTlRFUj4KKworICAzLiBCeSB3eWqc5iB6IFZpbS1hIHdwaXN6OgorCQkJICAgIDxFU0M+IDpxITxFTlRFUj4gIGJ5IHVzdW65YyB3c3p5c3RraWUgem1pYW55LgorCSAgICAgTFVCOgkgICAgPEVTQz4gOndxPEVOVEVSPiAgYnkgem1pYW55IHphY2hvd2HmLgorCisgIDQuIEJ5IHVzdW655iB6bmFrIHBvZCBrdXJzb3JlbSB3IHRyeWJpZSBOb3JtYWw6ICB4CisKKyAgNS4gQnkgd3N0YXdp5iB0ZWtzdCBwcnplZCBrdXJzb3JlbSB3IHRyeWJpZSBOb3JtYWw6CisJCQkgICAgaQkgIHR5cGUgaW4gdGV4dAkgICAgICA8RVNDPgorCitVV0FHQTogV2NpnG5p6mNpZSA8RVNDPiBwcnplbmllc2llIENp6iB6IHBvd3JvdGVtIGRvIHRyeWJ1IE5vcm1hbAorbHViIG9kd2+zYSBuaWVjaGNpYW5lIGx1YiBjeuqcY2lvd28gd3Byb3dhZHpvbmUgcG9sZWNlbmlhLgorCitUZXJheiBtb79lbXkga29udHludW93YeYgaSBwcnplapzmIGRvIExla2NqaSAyLgorCit+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+fn4KKwkJICAgIExla2NqYSAyLjEuOiBQT0xFQ0VOSUUgREVMRVRFICh1c3V3YW5pZSkKKworCisJICAgICAgICoqIFdwaXN6ICBkdyAgYnkgdXN1brljIHRla3N0IGRvIGtv8WNhIHd5cmF6dS4gKioKKworICAxLiBXY2mcbmlqICA8RVNDPglieSB1cGV3bmnmIHNp6iwgv2UgamVzdGWcIHcgdHJ5YmllIE5vcm1hbC4KKworICAyLiBQcnplbmllnCBrdXJzb3IgZG8gbGluaWkgcG9uab9laiBvem5hY3pvbmVqIC0tLT4uCisKKyAgMy4gUHJ6ZXN18SBrdXJzb3IgbmEgcG9jerl0ZWsgd3lyYXp1LCBrdPNyZSBjaGNlc3ogdXN1brnmLgorCisgIDQuIFdwaXN6ICAgZHcgICBieSB1c3VuuWMgd3lyYXouCisKKyAgVVdBR0E6IExpdGVyeSAgZHcgIGLqZLkgc2nqIHBvamF3aWHmIG5hIGRvbGUgZWtyYW51IHcgbWlhcuoKKwkgd3Bpc3l3YW5pYS4gIEplnGxpIHdwaXNhs2WcIGNvnCCfbGUgd2NpnG5paiA8RVNDPiBpIHphY3puaWogb2QKKwkgcG9jerl0a3UuCisKKy0tLT4gSmVzdCB0dSBwYXLqIHBhcGllciB3eXJhevN3LCBrdPNyZSBrYW1pZfEgbmllIG5hbGW/uSBkbyBub795Y2UgdGVnbyB6ZGFuaWEuCisKKyAgNS4gUG93dGFyemFqIGtyb2tpIDMuIGkgNC4gZG9w82tpIHpkYW5pZSBuaWUgYupkemllIHBvcHJhd25lLCBwb3RlbQorICBwcnplamSfIGRvIExla2NqaSAyLjIuCisKK35+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+fgorCQkgICAgTGVrY2phIDIuMi46IFdJykNFSiBQT0xFQ0XRIFVTVVdBSqVDWUNICisKKworCSAgICAgICAqKiBXcGlzeiAgZCQgIGFieSB1c3VuueYgdGVrc3QgZG8ga2/xY2EgbGluaWkuICoqCisKKyAgMS4gV2NpnG5paiAgPEVTQz4JYWJ5IHNp6iB1cGV3bmnmLCC/ZSBqZXN0ZZwgdyB0cnliaWUgTm9ybWFsLgorCisgIDIuIFByemVuaWWcIGt1cnNvciBkbyBsaW5paSBwb25pv2VqIG96bmFjem9uZWogLS0tPi4KKworICAzLiBQcnplbmllnCBrdXJzb3IgZG8ga2/xY2EgcG9wcmF3bmVnbyB6ZGFuaWEgKFBPIHBpZXJ3c3plaiAgLiApLgorCisgIDQuIFdwaXN6ICBkJAlhYnkgdXN1brnmIHJlc3p06iBsaW5paS4KKworLS0tPiBLdG+cIHdwaXNhsyBrb25pZWMgdGVnbyB6ZGFuaWEgZHd1a3JvdG5pZS4gemRhbmlhIGR3dWtyb3RuaWUuCisKKworICA1LiBQcnplamSfIGRvIExla2NqaSAyLjMuIGJ5IHpyb3p1bWll5iBjbyBzaeogc3Rhs28uCisKKworCisKKworfn5+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+CisJCSAgICAgTGVrY2phIDIuMy46IE8gUE9MRUNFTklBQ0ggSSBPQklFS1RBQ0gKKworCisgIEZvcm1hdCBkbGEgcG9sZWNlbmlhIHVzdXdharljZWdvICBkICBqZXN0IHRha2k6CisKKwkgICAgW2xpY3piYV0gIGQgIG9iaWVrdCAgICAgIExVQiAgICAgIGQgIFtsaWN6YmFdICBvYmlla3QKKworICBHZHppZToKKyAgIGxpY3piYSAtIGlsZSByYXp5IHBvbGVjZW5pZSBtYSBieeYgd3lrb25hbmUgKG9wY2pvbmFsbmUsIGRvbXmcbG5hPTEpLgorICAgZAkgIC0gcG9sZWNlbmllIHVzdXdharljZS4KKyAgIG9iaWVrdCAtIG5hIGN6eW0gcG9sZWNlbmllIGLqZHppZSB3eWtvbnl3YW5lIChsaXN0YSBwb25pv2VqKS4KKworICBLcvN0a2EgbGlzdGEgb2JpZWt083c6CisgICAgdyAtIG9kIGt1cnNvcmEgZG8ga2/xY2Egd3lyYXp1IHezuWN6YWq5YyBzcGFjauouCisgICAgZSAtIG9kIGt1cnNvcmEgZG8ga2/xY2Egd3lyYXp1IE5JRSB3s7ljemFquWMgc3BhY2ppLgorICAgICQgLSBvZCBrdXJzb3JhIGRvIGtv8WNhIGxpbmlpLgorCitVV0FHQTogRGxhIGNpZWthd3NraWNoLCB3eWJpZXJhbmllIG9iaWVrdHUgdyB0cnliaWUgTm9ybWFsIGJleiBwb2xlY2FuaWEKKyAgICAgICBwb2xlY2VuaWEgcHJ6ZW5pZXNpZSBrdXJzb3IgdGFrIGphayBvcGlzYW5vIHcgbGmcY2llIG9iaWVrdPN3LgorCisKKworfn5+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+CisJCSAgIExla2NqYSAyLjQuOiBXWUqlVEVLIERPICdQT0xFQ0VOSUUtT0JJRUtUJworCisKKwkJICAgICoqIFdwaXN6ICBkZCAgIGJ5IHVzdW65YyBjYbO5IGxpbmnqLiAqKgorCisgIFogcG93b2R1IGN66nN0b5xjaSB1c3V3YW5pYSBjYbN5Y2ggbGluaWksIHByb2pla3RhbmNpIFZpbS1hIHpkZWN5ZG93YWxpLCC/ZQorICBi6mR6aWUgs2F0d2llaiB3cGlzYeYgZHdhIHJhenkgcG9kIHJ6uWQgZCBhYnkgdXN1brnmIGxpbmnqLgorCisgIDEuIFByemVuaWWcIGt1cnNvciBkbyB6ZGFuaWEgcG9uab9lai4KKyAgMi4gV3Bpc3ogIGRkCWFieSB1c3VuuWMgd2llcnN6LgorICAzLiBUZXJheiBwcnplbmllnCBzaeogZG8gY3p3YXJ0ZWdvIHdpZXJzemEuCisgIDQuIFdwaXN6ICAyZGQgIChwYW1p6nRhaiAgbGljemJhLXBvbGVjZW5pZS1vYmlla3QpIGFieSB1c3VuuWMgZHdpYSB3aWVyc3plLgorCisgICAgICAxKSAgUvO/ZSBzuSBjemVyd29uZSwKKyAgICAgIDIpICBCs290byBqZXN0IGZham5lLAorICAgICAgMykgIEZpb7NraSBzuSBuaWViaWVza2llLAorICAgICAgNCkgIE1hbSBzYW1vY2jzZCwKKyAgICAgIDUpICBaZWdhciBwb2RhamUgY3phcywKKyAgICAgIDYpICBDdWtpZXIgamVzdCBzs29ka2ksCisgICAgICA3KSAgSSB0eSB0Zb8uCisKKworfn5+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+CisJCSAgICAgIExla2NqYSAyLjUuOiBQT0xFQ0VOSUUgVU5ETyAoY29mbmlqKQorCisKKwkgICoqIFdjaZxuaWogIHUgIGFieSBjb2ZuueYgc2t1dGtpIG9zdGF0bmllZ28gcG9sZWNlbmlhLgorCQkgVSB6YZwsIGJ5IGNvZm655iBza3V0a2kgZGxhIGNhs2VqIGxpbmlpLiAqKgorCisgIDEuIFByemVuaWWcIGt1cnNvciBkbyB6ZGFuaWEgcG9uab9laiBvem5hY3pvbmVnbyAtLS0+IGkgdW1pZZzmIGdvIG5hCisgICAgIHBpZXJ3c3p5bSBis+pkemllLgorICAyLiBXcGlzeiAgeCAgYWJ5IHVzdW655iBwaWVyd3N6eSBuaWVjaGNpYW55IHpuYWsuCisgIDMuIFRlcmF6IHdjaZxuaWogIHUgIGFieSBjb2ZuueYgc2t1dGtpIG9zdGF0bmllZ28gcG9sZWNlbmlhLgorICA0LiBUeW0gcmF6ZW0gcG9wcmF3IHdzenlzdGtpZSBis+pkeSB3IGxpbmlpIHW/eXdharljIHBvbGVjZW5pYSAgeCAuCisgIDUuIFRlcmF6IHdjaZxuaWogd2llbGtpZSBVIGFieSBwcnp5d3LzY2nmIGxpbmnqIGRvIG9yeWdpbmFsbmVnbyBzdGFudS4KKyAgNi4gVGVyYXogd2NpnG5paiAgdSAga2lsa2EgcmF6eSBieSBjb2ZuueYJVSAgaSBwb3ByemVkbmllIHBvbGVjZW5pYS4KKyAgNy4gVGVyYXogd3BzeiBDVFJMLVIgKHRyenltYWogcvN3bm9jemWcbmllIHdjaZxuaep0ZSBrbGF3aXN6ZSBDVFJMIGkgUikKKyAgICAga2lsa2EgcmF6eSwgYnkgY29mbrnmIGNvZm5p6mNpYS4KKworLS0tPiBQb29wcmF3IGJs6mR5eXkgdyB0ZWVqIGxpbmlpaSBpIHphYW1paWXxIGplIHBycnpleiBjb29mbmlqLgorCisgIDguIFRvIHO5IGJhcmR6byBwb795dGVjem5lIHBvbGVjZW5pYS4KKworICAgICBQcnplamSfIHRlcmF6IGRvIHBvZHN1bW93YW5pYSBMZWtjamkgMi4KKworfn5+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+CisJCQkgICAgIExFS0NKQSAyLiBQT0RTVU1PV0FOSUUKKworICAxLiBCeSB1c3VuueYgem5ha2kgb2Qga3Vyc29yYSBkbyBrb/FjYSB3eXJhenUgd3Bpc3o6CSBkdworCisgIDIuIEJ5IHVzdW655iB6bmFraSBvZCBrdXJzb3JhIGRvIGtv8WNhIGxpbmlpIHdwaXN6OgkgZCQKKworICAzLiBCeSB1c3VuueYgY2GzuSBsaW5p6jogICAgZGQKKworICA0LiBGb3JtYXQgcG9sZWNlbmlhIHcgdHJ5YmllIE5vcm1hbDoKKworICAgIFtsaWN6YmFdICBwb2xlY2VuaWUgIG9iaWVrdCAgICAgIExVQiAgICAgIHBvbGVjZW5pZSAgW2xpY3piYV0gIG9iaWVrdAorCisgIEdkemllOgorICAgbGljemJhICAgIC0gaWxlIHJhenkgcG9sZWNlbmllIG1hIGJ55iB3eWtvbmFuZQorICAgcG9sZWNlbmllIC0gdG8gY28gdHJ6ZWJhIHpyb2Jp5iAobnAuICBkICBkbGEgdXN1d2FuaWEpCisgICBvYmlla3QgICAgLSBuYSBjenltIHBvbGVjZW5pZSBi6mR6aWUgd3lrb255d2FuZSwgdGFraWUgamFrICB3ICAod3lyYXopLAorCSAgICAgICAkICAoZG8ga2/xY2EgbGluaWkpLCBldGMuCisKKyAgNS4gQnkgY29mbrnmIHBvcHJ6ZWRuaWUgcG9sZWNlbmllLCB3cGlzejoJICB1IChtYbNlIHUpCisgICAgIEJ5IGNvZm655iB3c3p5c3RraWUgem1pYW55IHcgbGluaWkgd3Bpc3o6CSAgVSAod2llbGtpZSBVKQorICAgICBCeSBjb2ZuueYgY29mbmnqY2lhIHdwaXN6OgkJCSAgQ1RSTC1SCisKK35+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+fgorCQkgICAgICAgTGVrY2phIDMuMS46IFBPTEVDRU5JRSBQVVQgKHdzdGF3KQorCisKKwkgICoqIFdwaXN6ICBwICBieSB3c3Rhd2nmIG9zdGF0bmllIHVzdW5p6mNpYSBwbyBrdXJzb3J6ZS4gKioKKworICAxLiBQcnplbmllnCBrdXJzb3IgZG8gcGllcndzemVqIGxpbmlpIHcgemVzdGF3aWUgcG9uab9lai4KKworICAyLiBXcGlzeiAgZGQJYWJ5IHVzdW655iBsaW5p6iBpIHByemVjaG93YeYgarkgdyBidWZvcnplIFZpbS1hLgorCisgIDMuIFByemVuaWWcIGt1cnNvciBkbyBsaW5paSBQT1dZr0VKIHRlaiBnZHppZSB1c3Vuaep0YSBsaW5pYSBwb3dpbm5hCisgICAgIHNp6iB6bmFqZG93YeYuCisKKyAgNC4gVyB0cnliaWUgTm9ybWFsLCB3Y2mcbmlqICBwICBieSB3c3Rhd2nmIGxpbmnqLgorCisgIDUuIFBvd3RhaiBrcm9raSAyLiBkbyA0LiBhvyB6bmFqZLkgc2nqIHcgb2Rwb3dpZWRuaW0gcG9yerlka3UuCisKKyAgICAgZCkgSmFrIGR3YSBhbmlvs2tpLgorICAgICBiKSBOYSBkb2xlIGZpb7NraSwKKyAgICAgYykgQSBteSBzaeoga29jaGFteSwKKyAgICAgYSkgTmEgZ/NyemUgcvO/ZSwKKworCit+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+fn4KKwkJICAgIExla2NqYSAzLjIuOiBQT0xFQ0VOSUUgUkVQTEFDRSAoemFzdLlwKQorCisKKyAgICAgICAqKiBXcGlzeiAgciAgYSBuYXN06nBuaWUgem5hayBieSB6YXN0uXBp5iB6bmFrIHBvZCBrdXJzb3JlbS4gKioKKworICAxLiBQcnplbmllnCBrdXJzb3IgZG8gcGllcndzemVqIGxpbmlpIHBvbmm/ZWogb3puYWN6b25laiAtLS0+CisKKyAgMi4gVXN0YXcga3Vyc29yIG5hIHBpZXJ3c3p5bSBis+pkemllLgorCisgIDMuIFdwaXN6ICByICBhIHBvdGVtIHpuYWsgamFraSBwb3dpbmllbiB6YXN0uXBp5iBis+pkbnkuCisKKyAgNC4gUG93dGFyemFqIGtyb2tpIDIuIGkgMy4gZG9w82tpIHBpZXJ3c3phIGxpbmlhIG5pZSBi6mR6aWUgcG9wcmF3bmEuCisKKy0tLT4gIEtqZWR5IHRlbiB3aWVyc3ogYmmzIHdzdPNraXdhbnkga3RvnCB3Y2l6brmzIHBlcuogerN5Y2gga2xhd2lyenkhCistLS0+ICBLaWVkeSB0ZW4gd2llcnN6IGJ5syB3c3R1a2l3YW55IGt0b5wgd2Npc265syBwYXLqIHqzeWNoIGtsYXdpc3p5IQorCisgIDUuIFRlcmF6IGN6YXMgbmEgTGVrY2rqIDMuMy4KKworCitVV0FHQTogUGFtaep0YWogYnkgdWN6eeYgc2nqIOZ3aWN6uWMsIGEgbmllIHBhbWnqY2lvd28uCisKKworfn5+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+CisJCSAgICAgTGVrY2phIDMuMy46IFBPTEVDRU5JRSBDSEFOR0UgKHptaWXxKQorCisgICAgICoqIEJ5IHptaWVuaeYgY2GzZSBzs293byBsdWIgamVnbyBjeuqc5iB3cGlzeiAgY3cgIChjaGFuZ2Ugd29yZCkuICoqCisKKyAgMS4gUHJ6ZW5pZZwga3Vyc29yIGRvIHBpZXJ3c3plaiBsaW5paSBwb25pv2VqIG96bmFjem9uZWogLS0tPi4KKworICAyLiBVbWllnOYga3Vyc29yIG5hICB1ICB3IGx1bm9zLgorCisgIDMuIFdwaXN6ICBjdwlpIHBvcHJhdyB3eXJheiAodyB0eW0gd3lwYWRrdSB3c3RhdyAnaW5pYScpLgorCisgIDQuIFdjaZxuaWogPEVTQz4gaSBwcnplamSfIGRvIG5hc3TqcG5lZ28gYrPqZHUgKHBpZXJ3c3p5IHpuYWssIGt083J5IG1hCisgICAgIHVsZWMgem1pYW5pZSkuCisKKyAgNS4gUG93dGFyemFqIGtyb2tpIDMuIGkgNC4gZG9w82tpIHBpZXJ3c3plIHpkYW5pZSBuaWUgYupkemllIHRha2llIHNhbWUKKyAgICAgamFrIGRydWdpZS4KKworLS0tPiBUYSBsdW5vcyBtYSBwaXJlIHOz83csIGt083JlIHS/aW5hIHpibmljIHW/aWZham9uYyBwY21henUgem1pZfEuCistLS0+IFRhIGxpbmlhIG1hIHBhcuogc7Pzdywga3TzcmUgdHJ6ZWJhIHptaWVuaeYgdb95d2FquWMgcG9sZWNlbmlhIHptaWXxLgorCisgIFphdXdhvywgv2UgIGN3ICBuaWUgdHlsa28gemFtaWVuaWEgd3lyYXosIGFsZSB0YWu/ZSB6bWllbmlhIHRyeWIgbmEKKyAgSW5zZXJ0ICh3cHJvd2FkemFuaWUpLgorCit+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+fn4KKwkJICAgICAgTGVrY2phIDMuNC46IFdJykNFSiBaTUlBTiBVr1lXQUqlQyBjCisKKworICAgICAgICoqIFBvbGVjZW5pZSBjaGFuZ2Ugdb95d2EgdGFraWNoIHNhbXljaCBvYmlla3TzdyBqYWsgZGVsZXRlLiAqKgorCisgIDEuIFBvbGVjZW5pZSBjaGFuZ2UgZHppYbNhIHRhayBzYW1vIGphayBkZWxldGUuIEZvcm1hdCB3eWdsuWRhIHRhazoKKworCSAgICBbbGljemJhXSAgYyAgb2JpZWt0ICAgICAgTFVCICAgICAgYyAgW2xpY3piYV0gIG9iaWVrdAorCisgIDIuIE9iaWVrdHkgc7kgdGFrv2UgdGFraWUgc2FtZSwgbnAuOgl3ICAod3lyYXopLCAgJAkoa29uaWVjIGxpbmlpKSwgZXRjLgorCisgIDMuIFByemVuaWWcIHNp6iBkbyBwaWVyd3N6ZWogbGluaWkgcG9uab9laiBvem5hY3pvbmVqIC0tLT4KKworICA0LiBVc3RhdyBrdXJzb3IgbmEgcGllcndzenltIGKz6mR6aWUuCisKKyAgNS4gV3Bpc3ogIGMkICwgcG9wcmF3IGtvbmllYyB3aWVyc3phIGkgd2NpnG5paiA8RVNDPi4KKworLS0tPiBLb25pZWMgdGVnbyB3aWVyc3phIG11c2kgYnnmIHBvcHJhd2lvbnkgYWJ5IHd5Z2y5ZGFsIHRhayBqYWsgZHJ1Z2kuCistLS0+IEtvbmllYyB0ZWdvIHdpZXJzemEgbXVzaSBieeYgcG9wcmF3aW9ueSB1v3l3YWq5YyBwb2xlY2VuaWEgIGMkIC4KKworCisKK35+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+fgorCQkJICAgICBMRUtDSkEgMy4gUE9EU1VNT1dBTklFCisKKworICAxLiBBYnkgd3N0YXdp5iB0ZWtzdCwga3Tzcnkgem9zdGGzIHdjemWcbmllaiB1c3Vuaep0eSB3Y2mcbmlqICBwIC4gVG8KKyAgICAgcG9sZWNlbmllIHdzdGF3aWEgc2thc293YW55IHRla3N0IFBPIGt1cnNvcnplIChqZZxsaSBjYbNhIGxpbmlhCisgICAgIHpvc3Rhs2EgdXN1bmnqdGEsIHpvc3RhbmllIG9uYSB1bWllc3pjem9uYSB3IGxpbmlpIHBvbmm/ZWoga3Vyc29yYSkuCisKKyAgMi4gQnkgemFtaWVuaeYgem5hayBwb2Qga3Vyc29yZW0gd2NpnG5paiAgciAgYSBwb3RlbSB6bmFrLCBrdPNyeSBtYSB6YXN0uXBp5gorICAgICBvcnlnaW5hbG55LgorCisgIDMuIFBvbGVjZW5pZSBjaGFuZ2UgcG96d2FsYSBDaSBuYSB6YXN0uXBpZW5pZSB3eXN6Y3plZ/NsbmlvbmVnbyBvYmlla3R1CisgICAgIG9kIGt1cnNvcmEgZG8ga2/xY2Egb2JpZWt0dS4gTnAuIHdwaXN6ICBjdyAgYWJ5IHphbWllbmnmIHRla3N0IG9kCisgICAgIGt1cnNvcmEgZG8ga2/xY2Egd3lyYXp1LCAgYyQgIGFieSB6bWllbmnmIHRla3N0IGRvIGtv8WNhIGxpbmlpLgorCisgIDQuIEZvcm1hdCBkbyBwb2xlY2VuaWEgY2hhbmdlICh6bWll8Sk6CisKKwkgICAgW2xpY3piYV0gIGMgIG9iaWVrdCAgICAgIExVQiAgICAgIGMgIFtsaWN6YmFdICBvYmlla3QKKworICAgICBUZXJheiBwcnplamSfIGRvIG5hc3TqcG5laiBsZWtjamkuCisKKworCit+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+fn4KKwkJICAgTGVrY2phIDQuMS46IExPS0FMSVpBQ0pBIE9SQVogU1RBVFVTIFBMSUtVCisKKyAgICAgICAqKiBOYWNpnG5paiBDVFJMLUcgYWJ5IHpvYmFjennmIHN3b2plIHBvs2+/ZW5pZSB3IHBsaWt1IGkgc3RhdHVzCisJICBwbGlrdS4gTmFjaZxuaWogU0hJRlQtRyBhYnkgcHJ6ZWqc5iBkbyBsaW5paSB3IHBsaWt1LiAqKgorCisgIFVXQUdBOiBQcnplY3p5dGFqIGNhs7kgbGVrY2rqIHphbmltIHd5a29uYXN6IGpha2llnCBwb2xlY2VuaWEhISEKKworICAxLiBQcnp5dHJ6eW1haiBrbGF3aXN6IENUUkwgaSB3Y2mcbmlqICBnIC4gTmEgZG9sZSBzdHJvbnkgcG9qYXdpIHNp6iBwYXNlaworICAgICBzdGF0dXN1IHogbmF6d7kgcGxpa3UgaSBudW1lcmVtIGxpbmlpLCB3IGt083JlaiBqZXN0ZZwuIFphcGFtaep0YWogbnVtZXIKKyAgICAgbGluaWkgZGxhIHBvdHJ6ZWIga3Jva3UgMy4KKworICAyLiBXY2mcbmlqIFNISUZULUcgYWJ5IHByemVqnOYgbmEga29uaWVjIHBsaWt1LgorCisgIDMuIFdwaXN6IG51bWVyIGxpbmlpLCB3IGt083JlaiBiebNlnCBhIHBvdGVtIFNISUZULUcuICBUbyBwcnplbmllc2llIENp6gorICAgICB6IHBvd3JvdGVtIGRvIGxpbmlpLCB3IGt083JlaiBiebNlnCBraWVkeSB3Y2lzbrmzZZwgQ1RSTC1HIChraWVkeQorICAgICB3cGlzdWplc3ogbnVtZXJ5IE5JRSBwb2phd2lharkgc2nqIG9uZSBuYSBla3JhbmllKS4KKworICA0LiBKZZxsaSBjenVqZXN6IHNp6iB3eXN0YXJjemFquWNvIHBld25pZSwgd3lrb25haiBrcm9raSAxLTMuCisKKworCisKK35+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+fgorCQkJIExla2NqYSA0LjIuOiBQT0xFQ0VOSUUgU1pVS0FKCisKKworCSAgICAqKiBXcGlzeiAgLyAgYSBuYXN06nBuaWUgd3lyYb9lbmllIGFieSBqZSB6bmFsZZ/mLiAqKgorCisgIDEuIFcgdHJ5YmllIE5vcm1hbCB3cGlzeiAgLyAuIFphdXdhvywgv2Ugem5hayB0ZW4sIG9yYXoga3Vyc29yIHBvamF3abkKKyAgICAgc2nqIG5hIGRvbGUgZWtyYW51IHRhayBzYW1vIGphayBwb2xlY2VuaWUJOiAuCisKKyAgMi4gVGVyYXogd3Bpc3ogIGKzb25kPEVOVEVSPiAuICBUbyBqZXN0IHOzb3dvLCBrdPNyZWdvIGNoY2VzeiBzenVrYeYuCisKKyAgMy4gQnkgc3p1a2HmIHRlaiBzYW1laiBmcmF6eSBwb25vd25pZSwgcG8gcHJvc3R1IHdjaZxuaWogIG4gLgorICAgICBBYnkgc3p1a2HmIHRlaiBmcmF6eSB3IHByemVjaXdueW0sIGtpZXJ1bmt1IHdjaZxuaWogU0hJRlQtTi4KKworICA0LiBKZZxsaSBjaGNlc3ogc3p1a2HmIGZyYXp5IGRvIHR5s3UsIHW/eWogcG9sZWNlbmlhICA/ICB6YW1pYXN0ICAvIC4KKworLS0tPiBLaWVkeSBwb2xlY2VuaWUgJ3N6dWthaicgb3NpuWduaWUga29uaWVjIHBsaWt1LCBwcnplc3p1a2l3YW5pZQorICAgICB6YWN6bmllIHNp6iBvZCBwb2N6uXRrdSBwbGlrdS4KKworICAnYrNvbmQnIHRvIG5pZSBqZXN0IG1ldG9kYSBieSBwcnplbGl0ZXJvd2HmIGKzuWQ7ICdis29uZCcgdG8gYrO5ZC4KKworCisKK35+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+fgorCQlMZWtjamEgNC4zLjogVyBQT1NaVUtJV0FOSVUgUEFSVUqlQ1lDSCBOQVdJQVPTVworCisKKwkgICAgICAqKiBXcGlzegklICBieSB6bmFsZZ/mIHBhc3VquWN5ICksXSwgbHViIH0gLiAqKgorCisgIDEuIFVtaWWc5iBrdXJzb3IgbmEga3TzcnltnCB6ICgsIFssIGx1YiB7IHcgbGluaWkgcG9uab9laiBvem5hY3pvbmVqIC0tLT4uCisKKyAgMi4gVGVyYXogd3Bpc3ogem5hayAgJSAuCisKKyAgMy4gS3Vyc29yIHBvd2luaWVuIHNp6iB6bmFsZZ/mIG5hIHBhcnVquWN5bSBuYXdpYXNpZS4KKworICA0LiBXY2mcbmlqICAlICBhYnkgcHJ6ZW5pZZzmIGt1cnNvciB6IHBvd3JvdGVtIGRvIHBhcnVquWNlZ28gbmF3aWFzdS4KKworLS0tPiBUbyAoIGplc3QgbGluaWEgdGVzdG93YSB6ICgsIFssIF0gaSB7LCB9IC4gKSkKKworVVdBR0E6IFRhIGZ1bmtjamEgamVzdCBiYXJkem8gdb95dGVjem5hIHcgZGVidWdnb3dhbml1IHByb2dyYW11CisgICAgICAgeiBuaWVzcGFyb3dhbnltaSBuYXdpYXNhbWkhCisKKworCisKKworfn5+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+CisJCSAgTGVrY2phIDQuNC46IElOTkEgTUVUT0RBIFBPUFJBV0lBTklBIEKjykTTVworCisKKwkgKiogV3Bpc3ogIDpzL3N0YXJ5L25vd3kvZyAgYWJ5IHphbWllbmnmICdzdGFyeScgbmEgJ25vd3knLiAqKgorCisgIDEuIFByemVuaWWcIGt1cnNvciBkbyBsaW5paSBwb25pv2VqIG96bmFjem9uZWogLS0tPi4KKworICAyLiBXcGlzeiAgOnMvY3phYXMvY3phczxFTlRFUj4gLiAgWmF1d2G/LCC/ZSB0byBwb2xlY2VuaWUgem1pZW5pYQorICAgICB0eWxrbyBwaWVyd3N6ZSB3eXN0uXBpZW5pZSAnY3phYXMnIHcgbGluaWkuCisKKyAgMy4gVGVyYXogd3Bpc3ogIDpzL2N6YWFzL2N6YXMvZyAgb3puYWN6YSB6YW1pYW7qIChzdWJzdHl0dWNq6ikKKyAgICAgZ2xvYmFsbmllIHcgY2GzZWogbGluaWkuICBabWllbmlhIHdzenlzdGtpZSB3eXN0uXBpZW5pYSB3IGxpbmlpLgorCistLS0+IE5hamxlcHN6eSBjemFhcyBuYSB6b2JhY3plbmllIG5harNhZG5pZWpzenljaCBrd2lhdPN3IHRvIGN6YWFzIHdpb3NueS4KKworICA0LiBBYnkgem1pZW5p5iB3c3p5c3RraWUgd3lzdLlwaWVuaWEgs2HxY3VjaGEgem5ha/N3IHBvbWnqZHp5IGR3b21hIGxpbmlhbWksCisgICAgIHdwaXN6OiA6Iywjcy9zdGFyZS9ub3dlL2cgZ2R6aWUgIywjIHO5IG51bWVyYW1pIGR382NoIGxpbmlpLgorICAgICBXcGlzeiAgOiVzL3N0YXJlL25vd2UvZyAgIGJ5IHptaWVuaeYgd3N6eXN0a2llIHd5c3S5cGllbmlhIHcgY2GzeW0gcGxpa3UuCisKKworCisKK35+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+fgorCQkJICAgICBMRUtDSkEgNC4gUE9EU1VNT1dBTklFCisKKworICAxLiBDVFJMLUcgIHBva2G/ZSBUd29quSBwb3p5Y2rqIHcgcGxpa3UgaSBzdGF0dXMgcGxpa3UuICBTSElGVC1HIHByemVub3NpCisgICAgIENp6iBkbyBrb/FjYSBwbGlrdS4gIFNISUZULUcgcG9wcnplZHpvbnkgbGljemK5IHByemVub3NpIENp6iBkbyBsaW5paQorICAgICBvIHR5bSBudW1lcnplLgorCisgIDIuIFdwaXNhbmllICAvICBhIG5hc3TqcG5pZSCzYfFjdWNoYSB6bmFr83cgc3p1a2Egs2HxY3VjaGEgRE8gUFJaT0RVLgorICAgICBXcGlzYW5pZSAgPyAgYSBuYXN06nBuaWUgs2HxY3VjaGEgem5ha/N3IHN6dWthILNh8WN1Y2hhIERPIFRZo1UuCisgICAgIFBvIHd5c3p1a2l3YW5pdSB3Y2mcbmlqICBuICBieSB6bmFsZZ/mIG5hc3TqcG5lIHd5c3S5cGllbmllIHN6dWthbmVqCisgICAgIGZyYXp5IHR5bSBzYW15bSBraWVydW5rdSBsdWIgU2hpZnQtTiBieSBzenVrYeYgdyBraWVydW5rdSBwcnplY2l3bnltLgorCisgIDMuIFdwaXNhbmllICAlICBnZHkga3Vyc29yIHpuYWpkdWplIHNp6iBuYSAoLCksWyxdLHssIGx1YiB9IGxva2FsaXp1amUKKyAgICAgcGFydWq5Y3kgem5hay4KKworICA0LiBCeSB6YW1pZW5p5iBwaWVyd3N6eSBzdGFyeSBuYSBub3d5IHcgbGluaWkgd3Bpc3oJICAgOnMvc3Rhcnkvbm93eQorICAgICBCeSB6YW1pZW5p5iB3c3p5c3RraWUgc3RhcnkgbmEgbm93eSB3IGxpbmlpIHdwaXN6CSAgIDpzL3N0YXJ5L25vd3kvZworICAgICBCeSB6YW1pZW5p5iBmcmF6eSBwb21p6mR6eSBkd29tYSBsaW5pYW1pICMgd3Bpc3oJICAgOiMsI3Mvc3Rhcnkvbm93eS9nCisgICAgIEJ5IHphbWllbmnmIHdzenlzdGtpZSB3eXN0uXBpZW5pYSB3IHBsaWt1IHdwaXN6CSAgIDolcy9zdGFyeS9ub3d5L2cKKyAgICAgQnkgVmltIHByb3NpsyBDaeogbyBwb3R3aWVyZHppZW5pZSBkb2RhaiAnYycJICAgOiVzL3N0YXJ5L25vd3kvZ2MKKworCit+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+fn4KKwkJIExla2NqYSA1LjEuOiBKQUsgV1lLT05BxiBQT0xFQ0VOSUEgWkVXTspUUlpORQorCisKKwkqKiBXcGlzeiAgOiEgIGEgbmFzdOpwbmllIHpld27qdHJ6bmUgcG9sZWNlbmllIGJ5IGplIHd5a29uYeYuICoqCisKKyAgMS4gV3Bpc3ogem5ham9tZSBwb2xlY2VuaWUgIDogIGJ5IHVzdGF3aeYga3Vyc29yIG5hIGRvbGUgZWtyYW51LiBUbyBwb3p3YWxhCisgICAgIG5hIHdwcm93YWR6ZW5pZSBwb2xlY2VuaWEuCisKKyAgMi4gVGVyYXogd3N0YXcgICEgICh3eWtyenlrbmlrKS4gVG8gdW1vv2xpd2kgQ2kgd3lrb25hbmllIGRvd29sbmVnbworICAgICB6ZXdu6nRyem5lZ28gcG9sZWNlbmlhIHBvd7Nva2kuCisKKyAgMy4gSmFrbyBwcnp5a7NhZCB3cGlzeiAgbHMgIHphICAhICBhIG5hc3TqcG5pZSB3Y2mcbmlqIDxFTlRFUj4uIFRvIHBvbGVjZW5pZQorICAgICBwb2thv2Ugc3BpcyBwbGlr83cgdyBUd29pbSBrYXRhbG9ndSwgdGFrIGpha2J5nCBiebMgcHJ6eSB6bmFrdSB6YWNo6nR5CisgICAgIHBvd7Nva2kuIE1vv2VzeiB0Zb8gdb955iAgOiFkaXIgIGplnGxpCWxzICBuaWUgZHppYbNhLgorCistLS0+IFV3YWdhOiAgVyB0ZW4gc3Bvc/NiIG1vv25hIHd5a29uYeYgd3N6eXN0a2llIHBvbGVjZW5pYSBwb3ezb2tpLgorLS0tPiBVd2FnYTogIFdzenlzdGtpZSBwb2xlY2VuaWEgIDogIG11c3q5IGJ55iB6YWtv8WN6b25lIDxFTlRFUj4uCisKKworCisKKworfn5+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+CisJCSAgICBMZWtjamEgNS4yLjogV0nKQ0VKIE8gWkFQSVNZV0FOSVUgUExJS9NXCisKKworCSAgICAqKiBCeSB6YWNob3dh5iB6bWlhbnkgdyBwbGlrdSB3cGlzeiA6dyBOQVpXQV9QTElLVSAuICoqCisKKyAgMS4gV3Bpc3ogIDohZGlyICBsdWIJOiFscyAgYnkgem9iYWN6eeYgc3BpcyBwbGlr83cgdyBrYXRhbG9ndS4KKyAgICAgSnW/IHdpZXN6LCC/ZSBtdXNpc3ogd2Npc2655iA8RU5URVI+IHBvIHR5bS4KKworICAyLiBXeWJpZXJ6IG5henfqIHBsaWt1IGpha2EgamVzemN6ZSBuaWUgaXN0bmllamUsIG5wLiBURVNULgorCisgIDMuIFRlcmF6IHdwaXN6OiAgIDp3IFRFU1QgICAoZ2R6aWUgVEVTVCBqZXN0IG5hene5IHBsaWt1IGpha7kgd3licmGzZZwuKQorCisgIDQuIFRvIHBvbGVjZW5pZSB6YXBhbWnqdGEgY2GzeSBwbGlrIChWaW0gVHV0b3IpIHBvZCBuYXp3uSBURVNULgorICAgICBCeSB0byBzcHJhd2R6aeYgd3Bpc3ogIDohZGlyICwgv2VieSB6bm93dSB6b2JhY3p55iBsaXN06iBwbGlr83cuCisKKy0tLT4gWmF1d2G/LCC/ZSBnZHlieZwgdGVyYXogd3lzemVksyB6IFZpbS1hLCBhIG5hc3TqcG5pZSB3c3plZLMgcG9ub3duaWUKKyAgICAga29tZW5kuSAgdmltIFRFU1QgLCBwbGlrIGJ5s2J5IGRva7NhZG65IGtvcGm5IHR1dG9yaWFsYSBraWVkeSBnbworICAgICB6YXBpc3l3YbNlnC4KKworICA1LiBUZXJheiB1c3XxIHBsaWsgd3Bpc3VquWM6CQkgICA6IXJtIFRFU1QKKworCit+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+fn4KKwkJTGVrY2phIDUuMy46IFNFTEVLVFlXTkUgUE9MRUNFTklFIFdSSVRFICh6YXBpc3opCisKKworCSAgICoqIEJ5IHphY2hvd2HmIGN66pzmIHBsaWt1IHdwaXN6CTojLCMgdyBOQVpXQV9QTElLVSAqKgorCisgIDEuIEplc3pjemUgcmF6IHdwaXN6CTohZGlyICBsdWIgIDohbHMgIGJ5IHV6eXNrYeYgbGlzdOogcGxpa/N3CisgICAgIHcga2F0YWxvZ3UgaSB3eWJpZXJ6IG9kcG93aWVkbmm5IG5henfqIHRha7kgamFrIFRFU1QuCisKKyAgMi4gUHJ6ZW5pZZwga3Vyc29yIG5hIGfzcmUgdGVqIHN0cm9ueSBpIHdjaZxuaWogQ1RSTC1HIGJ5IHV6eXNrYeYKKyAgICAgbnVtZXIgbGluaWkuIFpBUEFNScpUQUogVMogTElDWkLKIQorCisgIDMuIFRlcmF6IHByemVuaWWcIHNp6iBuYSBk87Mgc3Ryb255IGkgd3Bpc3ogIENUUkwtRyB6bm93dS4gIFpBUEFNScpUQUoKKyAgICAgTlVNRVIgVEFLr0UgVEVKIExJTklJIQorCisgIDQuIEJ5IHphY2hvd2HmIEpFRFlOSUUgY3rqnOYgcGxpa3Ugd3Bpc3ogIDojLCMgdyBURVNUICAgZ2R6aWUgICMsIyB0bworICAgICBkd2llIGxpY3pieSBqYWtpZSB6YXBhbWnqdGGzZZwgKGfzcmEsIGTzsyBla3JhbnUpLCBhIFRFU1QgdG8gbmF6d2EKKyAgICAgVHdvamVnbyBwbGlrdS4KKworICA1LiBQb25vd25pZSBzcHJhd2SfIGN6eSB0ZW4gcGxpayB0YW0gamVzdCAoIDohZGlyICksIGFsZSBOSUUgdXN1d2FqIGdvLgorCisKKworfn5+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+CisJCSAgIExla2NqYSA1LjQuOiBXU1RBV0lBTklFIEkgo6VDWkVOSUUgUExJS9NXCisKKworCSAgICoqIEJ5IHdzdGF3aeYgemF3YXJ0b5zmIHBsaWt1IHdwaXN6ICAgOnIgTkFaV0FfUExJS1UgKioKKworICAxLiBXcGlzeiAgOiFkaXIgIGJ5IHNp6iB1cGV3bmnmLCB6ZSBUd/NqIHBsaWsgVEVTVCB6b3N0YbMgcG9wcmF3bmllCisgICAgIHphcGFtaep0YW55LgorCisgIDIuIFVtaWWc5iBrdXJzb3IgbmEgZ/NyemUgc3Ryb255LgorCitVV0FHQTogUG8gd3lrb25hbml1IGtyb2t1IDMuIHBvbm93bmllIHpvYmFjenlzeiBMZWtjauogNS4zLiBQb3RlbSBwcnplamSfCisgICAgICAgZG8gRE+jVSBieSB6b2JhY3p55iBwb25vd25pZSB06iBsZWtjauouCisKKyAgMy4gVGVyYXogd2N6eXRhaiBwbGlrIFRFU1Qgdb95d2FquWMgcG9sZWNlbmlhICA6ciBURVNUICwgZ2R6aWUgVEVTVAorICAgICBqZXN0IG5hene5IHBsaWt1LgorCitVV0FHQTogUGxpaywga3Tzcnkgd2N6eXR1amVzeiBqZXN0IHdzdGF3aWFueSB0YW0gZ2R6aWUgYnmzIGt1cnNvci4KKworICA0LiBCeSBzcHJhd2R6aeYgY3p5IHBsaWsgem9zdGGzIHdjenl0YW55IGNvZm5paiBrdXJzb3IgaSB6b2JhY3osIL9lCisgICAgIHRlcmF6IHO5IGR3aWUga29waWUgTGVrY2ppIDUuMy4sIG9yeWdpbmGzIGkga29waWEgeiBwbGlrdS4KKworCit+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+fn4KKwkJCSAgICAgICBMRUtDSkEgNS4gUE9EU1VNT1dBTklFCisKKworICAxLiAgOiFwb2xlY2VuaWUgd3lrb251amUgcG9sZWNlbmllIHpld27qdHJ6bmUuCisKKyAgICAgIFW/eXRlY3pueW1pIHByenlrs2FkYW1pIHO5OgorCisJICA6IWRpciAgLSAgcG9rYXp1amUgc3BpcyBwbGlr83cgdyBrYXRhbG9ndS4KKworCSAgOiFybSBOQVpXQV9QTElLVSAgLSAgdXN1d2EgcGxpayBOQVpXQV9QTElLVS4KKworICAyLiAgOncgTkFaV0FfUExJS1UgIHphcGlzdWplIG9iZWNueSBwbGlrIFZpbS1hIG5hIGR5c2sgeiBuYXp3uSBOQVpXQV9QTElLVS4KKworICAzLiAgOiMsI3cgTkFaV0FfUExJS1UgIHphcGlzdWplIGxpbmllIG9kICMgZG8gIyB3IHBsaWt1IE5BWldBX1BMSUtVLgorCisgIDQuICA6ciBOQVpXQV9QTElLVSAgd2N6eXR1amUgeiBkeXNrdSBwbGlrIE5BWldBX1BMSUtVIGkgd3N0YXdpYSBnbyBkbworICAgICAgYmllv7ljZWdvIHBsaWt1IHBvIGt1cnNvcnplLgorCisKKworCisKK35+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+fgorCQkgICAgICBMZWtjamEgNi4xLjogUE9MRUNFTklFIE9QRU4gKG90d/NyeikKKworCisgICAgICAqKiBXcGlzeglvICBieSBvdHdvcnp55iBsaW5p6iBwb25pv2VqIGt1cnNvcmEgaSBwcnplbmllnOYgc2nqIGRvCisJIHRyeWJ1IEluc2VydCAod3Byb3dhZHphbmllKS4gKioKKworICAxLiBQcnplbmllnCBrdXJzb3IgZG8gbGluaWkgcG9uab9laiBvem5hY3pvbmVqIC0tLT4uCisKKyAgMi4gV3Bpc3ogIG8gIChtYbNlKSBieSBvdHdvcnp55iBsaW5p6iBQT05Jr0VKIGt1cnNvcmEgaSBwcnplbmllnOYgc2nqCisgICAgIGRvIHRyeWJ1IEluc2VydCAod3Byb3dhZHphbmllKS4KKworICAzLiBUZXJheiBwcnplcGlzeiBsaW5p6iBvem5hY3pvbrkgLS0tPiBpIHdjaZxuaWogPEVTQz4gYnkgd3lqnOYKKyAgICAgeiB0cnlidSBJbnNlcnQgKHdwcm93YWR6YW5pZSkuCisKKy0tLT4gUG8gd2NpnG5p6mNpdSAgbyAga3Vyc29yIHpuYWpkemllIHNp6iB3IG90d2FydGVqIGxpbmlpIHcgdHJ5YmllCisgICAgIEluc2VydCAod3Byb3dhZHphbmllKS4KKworICA0LiBCeSBvdHdvcnp55iBsaW5p6iBQT1dZr0VKIGt1cnNvcmEgd2NpnG5paiB3aWVsa2llICBPICB6YW1pYXN0IG1hs2VnbworICAgICBvIC4gV3lwcvNidWogdG8gbmEgbGluaWkgcG9uab9lai4KKworIE90d/NyeiBsaW5p6iBwb3d5v2VqIHdjaXNrYWq5YyBTSElGVC1PIGdkeSBrdXJzb3IgYupkemllIG5hIHRlaiBsaW5paS4KKworfn5+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+CisJCSAgICAgTGVrY2phIDYuMi46IFBPTEVDRU5JRSBBUFBFTkQgKGRvZGFqKQorCisKKwkJICAqKiBXcGlzeiAgYSAgYnkgZG9kYeYgdGVrc3QgWkEga3Vyc29yZW0uICoqCisKKyAgMS4gUHJ6ZW5pZZwga3Vyc29yIGRvIGtv8WNhIHBpZXJ3c3plaiBsaW5paSBwb25pv2VqIG96bmFjem9uZWogLS0tPgorICAgICBacvNiIHRvIHdjaXNrYWq5YwkkICB3IHRyeWJpZSBOb3JtYWwuCisKKyAgMi4gV3Bpc3ogIGEgIChtYbNlKSBhYnkgZG9kYeYgdGVrc3QgWkEgem5ha2llbSBwb2Qga3Vyc29yZW0uCisgICAgIFdpZWxraWUgQSBkb2RhamUgdGVrc3QgbmEga2/xY3UgbGluaWkuCisKK1V3YWdhOiBUbyBvc3pjeupkemEgd3Bpc2FuaWE6IG9zdGF0bmkgem5hayAoICQgKSwgIGkgLCB0ZWtzdCBkbyBkb2RhbmlhLAorICAgICAgIDxFU0M+LCBzdHJ6YbNrYSB3IHByYXdvIGkgb3N0YXRlY3puaWUgIHggLCB0eWxrbyBwbyB0byBieSBkb2Rh5gorICAgICAgIHRla3N0IG5hIGtv8WN1IGxpbmlpLgorCisgIDMuIFRlcmF6IGRva2/xY3ogcGllcndzerkgbGluaeouIFphdXdhvyB0YWu/ZSwgv2UgIGFwcGVuZCAgKGRvZGFqKQorICAgICBkemlhs2EgdGFrIHNhbW8gamFrIHRyeWIgSW5zZXJ0ICh3cHJvd2FkemFuaWUpIHogd3lquXRraWVtIHRlZ28gZ2R6aWUKKyAgICAgdGVrc3QgamVzdCB3c3Rhd2lhbnkuCisKKy0tLT4gVGEgbGluaWEgcG96d29saSBDaSDmd2ljennmCistLS0+IFRhIGxpbmlhIHBvendvbGkgQ2kg5ndpY3p55iBkb2Rhd2FuaWUgdGVrc3R1IGRvIGtv8WNhIGxpbmlpLgorCit+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+fn4KKwkJICAgTGVrY2phIDYuMy46IElOTkEgV0VSU0pBIFJFUExBQ0UgKHphbWlhbmEpCisKKworCSAgICoqIFdwaXN6IHdpZWxraWUgIFIJYnkgemFtaWVuaeYgd2nqY2VqIG5pvyBqZWRlbiB6bmFrLiAqKgorCisgIDEuIFByemVuaWWcIGt1cnNvciBkbyBwaWVyd3N6ZWogbGluaWkgcG9uab9laiBvem5hY3pvbmVqIC0tLT4uCisKKyAgMi4gVW1pZZzmIGt1cnNvciBuYSBwb2N6uXRrdSBwaWVyd3N6ZWdvIHd5cmF6dSwga3TzcnkgcvN6bmkgc2nqIG9kCisgICAgIGRydWdpZWogbGluaWkgb3puYWN6b25laiAtLS0+ICh3eXJheiAnb3N0YXRuaScpLgorCisgIDMuIFRlcmF6IHdwaXN6ICBSICBpIHphbWll8SByZXN6dOogdGVrc3R1IHcgcGllcndzemVqIGxpbmlpIHByemV6CisgICAgIG5hZHBpc2FuaWUgbmFkIHN0YXJ5bSB0ZWtzdGVtIHRhayBhYnkgcGllcndzemEgbGluaWEgYnJ6bWlhs2EgdGFrIHNhbW8KKyAgICAgamFrIGRydWdhLgorCistLS0+IFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIGxhc3Qgb24gdGhpcyBwYWdlIHVzZSB0aGUga2V5cy4KKy0tLT4gVG8gbWFrZSB0aGUgZmlyc3QgbGluZSB0aGUgc2FtZSBhcyB0aGUgc2Vjb25kLCB0eXBlIFIgYW5kIHRoZSBuZXcgdGV4dC4KKworICA0LiBaYXV3Yb8sIL9lIGtpZWR5IHdjaZxuaWVzeiA8RVNDPiBhYnkgd3lqnOYgbmllem1pZW5pb255IHRla3N0CisgICAgIHBvem9zdGFqZS4KKworCisKK35+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+fgorCQkJIExla2NqYSA2LjQuOiBVU1RBV0lBTklFIE9QQ0pJCisKKworKiogVXN0YXdpYW5pZSBvcGNqaSB0YWsgYnkgc3p1a2FqIGx1YiBzdWJzdHl0dWNqYSBpZ25vcm93YbN5IHdpZWxrb5zmIGxpdGVyICoqCisKKyAgMS4gU3p1a2FqICdpZ25vcmUnIHdwaXN1arljICh3IHRyeWJpZSBOb3JtYWwpOgorICAgICAvaWdub3JlCisgICAgIFBvd3Tzcnogc3p1a2FuaWUga2lsa2EgcmF6eSBuYWNpc2tharljIGtsYXdpc3ogIG4gLgorCisgIDIuIFVzdGF3IG9wY2rqICdpYycgKElnbm9yZSBjYXNlIC0tIGlnbm9ydWogd2llbGtvnOYgbGl0ZXIpIHBvcHJ6ZXoKKyAgICAgd3Bpc2FuaWU6CQk6c2V0IGljCisKKyAgMy4gVGVyYXogc3p1a2FqICdpZ25vcmUnIHBvbm93bmllIHdjaXNrdWq5YzogbgorICAgICBQb3d083J6IHN6dWthbmllIGtpbGthIHJhenkgbmFjaXNrYWq5YyBrbGF3aXN6ICBuIC4KKworICA0LiBVc3RhdyBvcGNqZSAnaGxzZWFyY2gnIGkgJ2luY3NlYXJjaCc6CisgICAgIDpzZXQgaGxzIGlzCisKKyAgNS4gVGVyYXogd3Byb3dhZJ8gcG9sZWNlbmllIHN6dWthaiBwb25vd25pZSBpIHpvYmFjeiBjbyBzaeogemRhcnp5OgorICAgICAvaWdub3JlCisKKworfn5+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+CisJCQkgICAgIExFS0NKQSA2LiBQT0RTVU1PV0FOSUUKKworCisgIDEuIFdwaXNhbmllICBvICBvdHdpZXJhIGxpbmnqIFBPTkmvRUoga3Vyc29yYSBpIHVtaWVzemN6YSBrdXJzb3IKKyAgICAgdyBvdHdhcnRlaiBsaW5paSB3IHRyeWJpZSBJbnNlcnQgKHdwcm93YWR6YW5pZSkuCisgICAgIFdwaXNhbmllIHdpZWxraWVnbyAgTyAgb3R3aWVyYSBsaW5p6iBQT1dZr0VKIGxpbmlpLCB3IGt083JlagorICAgICB6bmFqZHVqZSBzaeoga3Vyc29yLgorCisgIDIuIFdwaXN6ICBhICBieSB3c3Rhd2nmIHRla3N0IFpBIHpuYWtpZW0gbmEsIGt083J5bSBqZXN0IGt1cnNvci4KKyAgICAgV3Bpc2FuaWUgd2llbGtpZWdvICBBICBhdXRvbWF0eWN6bmllIGRvZGFqZSB0ZWtzdCBuYSBrb/FjdSBsaW5paS4KKworICAzLiBXcGlzYW5pZSB3aWVsa2llZ28gIFIgIHdwcm93YWR6YSB3IHRyeWIgUmVwbGFjZSAoemFtaWFuYSkgZG9w82tpCisgICAgIG5pZSB6b3N0YW5pZSB3Y2mcbmnqdHkgPEVTQz4uCisKKyAgNC4gV3Bpc2FuaWUgIjpzZXQgeHh4IiB1c3Rhd2lhIG9wY2rqICJ4eHgiLgorCisKKworCisKKworCit+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+fn4KKwkJICAgICAgIExFS0NKQSA3LiBQT0xFQ0VOSUEgUE9NT0NZIE9OLUxJTkUKKworCisJCSAgICAgICoqIFW/eWNpZSBzeXN0ZW11IHBvbW9jeSBvbi1saW5lICoqCisKKyAgVmltIHBvc2lhZGEgYmFyZHpvIGRvYnJ5IHN5c3RlbSBwb21vY3kgb24tbGluZS4gQnkgemFjernmIHNwcvNidWogamVkbmVqCisgIHogdHJ6ZWNoIG1vv2xpd2+cY2k6CisKKwktIHdjaZxuaWoga2xhd2lzeiA8SEVMUD4gKGplnGxpIHRha293eSBwb3NpYWRhc3opCisJLSB3Y2mcbmlqIGtsYXdpc3ogPEYxPiAoamWcbGkgdGFrb3d5IHBvc2lhZGFzeikKKwktIHdwaXN6ICAgOmhlbHA8RU5URVI+CisKKyAgV3Bpc3ogICA6cTxFTlRFUj4gICBieSB6YW1rbrljIG9rbm8gcG9tb2N5LgorCisgIE1vv2VzeiB0Zb8gem5hbGWf5iBwb21vYyBuYSBrYb9keSB0ZW1hdCBwb2RharljIGFyZ3VtZW50IHBvbGVjZW5pYSAiOmhlbHAiLgorICBTcHLzYnVqIHR5Y2ggKG5pZSB6YXBvbW5paiB3Y2lzbrnmIDxFTlRFUj4pOgorCisgIDpoZWxwIHcKKyAgOmhlbHAgY188VAorICA6aGVscCBpbnNlcnQtaW5kZXgKKyAgOmhlbHAgdXNlci1tYW51YWwKKworfn5+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+CisJCSAgICAgTEVLQ0pBIDguIFRXT1JaRU5JRSBTS1JZUFRVIFNUQVJUT1dFR08KKworCQkgICAgICAqKiBXs7ljemFuaWUgbW+/bGl3b5xjaSBWaW0tYSAqKgorCisgIFZpbSBtYSBvIHdpZWxlIHdp6mNlaiBtb79saXdvnGNpIG5pvyBWaSwgYWxlIHdp6mtzem+c5iB6IG5pY2ggamVzdCBkb215nGxuaWUKKyAgd3mzuWN6b25hLiBKZZxsaSBjaGNlc3ogd7O5Y3p55iB0ZSBtb79saXdvnGNpIG5hIHN0YXJjaWUgbXVzaXN6IHV0d29yennmCisgIHBsaWsgInZpbXJjIi4KKworICAxLiBQb2N6uXRlayBlZHljamkgcGxpa3UgInZpbXJjIiB6YWxlv3kgb2QgVHdvamVnbyBzeXN0ZW11OgorICAgICA6ZWRpdCB+Ly52aW1yYwkgICAgIGRsYSBVbml4YQorICAgICA6ZWRpdCAkVklNL192aW1yYwkgICAgIGRsYSBNUy1XaW5kb3dzCisKKyAgMi4gVGVyYXogd2N6eXRhaiBwcnp5a7NhZG93eSBwbGlrICJ2aW1yYyI6CisgICAgIDpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4gWmFwaXN6IHBsaWs6CisgICAgIDp3cml0ZQorCisgIE5hc3TqcG55bSByYXplbSBnZHkgemFjem5pZXN6IHByYWPqIHcgVmltaWUgYupkemllIG9uIHW/eXdh5iBwb2Scd2lldGxhbmlhCisgIHNrs2FkbmkuIE1vv2VzeiBkb2Rh5iB3c3p5c3RraWUgc3dvamUgdWx1YmlvbmUgdXN0YXdpZW5pYSBkbyB0ZWdvIHBsaWt1CisgICJ2aW1yYyIuCisKK35+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+fgorCisgIFR1dGFqIHNp6iBrb/FjenkgdHV0b3JpYWwgVmltLWEuIFpvc3RhsyBvbiBwb215nGxhbnkgdGFrIGFieSBkYeYga3LzdGtpCisgIHByemVnbLlkIGplZ28gbW+/bGl3b5xjaSwgd3lzdGFyY3pharljeSBieZwgbfNnsyBnbyB1v3l3YeYuIEplc3Qgb24KKyAgZGFsZWtpIG9kIGtvbXBsZXRub5xjaSBwb25pZXdhvyBWaW0gbWEgbyB3aWVsZSwgd2llbGUgd2nqY2VqIHBvbGVjZfEuCisKKyAgRGxhIGRhbHN6ZWogbmF1a2kgcmVrb21lbmR1amVteSBrc2m5v2vqOgorCVZpbSAtIFZpIEltcHJvdmVkIC0gYXV0b3IgU3RldmUgT3VhbGxpbmUKKwlXeWRhd2NhOiBOZXcgUmlkZXJzCisgIFBpZXJ3c3phIGtzabl6a2EgY2Gza293aWNpZSBwb5x3aepjb25hIFZpbS1vd2kuIFW/eXRlY3puYSB6d7Nhc3pjemEgZGxhCisgIHBvY3q5dGt1arljeWNoLiBaYXdpZXJhIHdpZWxlIHByenlrs2Fk83cgaSBpbHVzdHJhY2ppLgorICBab2JhY3ogaHR0cDovL2ljY2YtaG9sbGFuZC5vcmcuL2NsaWNrNS5odG1sCisKKyAgVGEga3Npub9rYSBqZXN0IHN0YXJzemEgaSBiYXJkemllaiBvIFZpIG5pvyBvIFZpbS1pZSwgYWxlIHRha79lIHdhcnRhCisgIHBvbGVjZW5pYToKKwlMZWFybmluZyB0aGUgVmkgRWRpdG9yIC0gYXV0b3IgTGluZGEgTGFtYgorCVd5ZGF3Y2E6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcyBJbmMuCisgIFRvIGRvYnJhIGtzabm/a2EgYnkgZG93aWVkemll5iBzaeogbmllbWFsIHdzenlzdGtpZWdvIGNvIGNoY2lhs2J5nCB6cm9iaeYKKyAgeiBWaS4gU3rzc3RhIGVkeWNqYSB6YXdpZXJhIHRlvyBpbmZvcm1hY2plIG8gVmltLWllLgorCisgIFBvIHBvbHNrdSB3eWRhbm86CisJRWR5dG9yIHZpLiBMZWtzeWtvbiBraWVzem9ua293eSAtIGF1dG9yIEFybm9sZCBSb2JiaW5zCisJV3lkYXdjYTogSGVsaW9uIDIwMDEgKE8nUmVpbGx5KS4KKwlJU0JOOiA4My03MTk3LTQ3Mi04CisJaHR0cDovL2hlbGlvbi5wbC9rc2lhemtpL3ZpbGVrLmh0bQorICBKZXN0IHRvIGtzabm/ZWN6a2EgemF3aWVyYWq5Y2Egc3BpcyBwb2xlY2XxIHZpIGkgamVnbyBuYWp3Yb9uaWVqc3p5Y2gKKyAga2xvbvN3IChtaepkenkgaW5ueW1pIFZpbS1hKS4KKworCUVkeXRvciB2aSAtIGF1dG9yenkgTGluZGEgTGFtYiBpIEFybm9sZCBSb2JiaW5zCisJV3lkYXdjYTogSGVsaW9uIDIwMDEgKE8nUmVpbGx5KSAtIHdnIDYgYW5nLiB3eWRhbmlhCisJSVNCTjogODMtNzE5Ny01MzktMgorCWh0dHA6Ly9oZWxpb24ucGwva3NpYXpraS92aWVkeXQuaHRtCisgIFJvenN6ZXJ6b25hIHdlcnNqYSBMZWFybmluZyB0aGUgVmkgRWRpdG9yIHcgcG9sc2tpbSB0s3VtYWN6ZW5pdS4KKworICBUZW4gdHV0b3JpYWwgem9zdGGzIG5hcGlzYW55IHByemV6IE1pY2hhZWxhIEMuIFBpZXJjZSdhIGkgUm9iZXJ0YSBLLiBXYXJlJ2EsCisgIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcyBrb3J6eXN0YWq5YyB6IHBvbW9jeSBDaGFybGVzYSBTbWl0aGEsCisgIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHkuCisgIEUtbWFpbDogYndhcmVAbWluZXMuY29sb3JhZG8uZWR1LgorCisgIFptb2R5Zmlrb3dhbmUgZGxhIFZpbS1hIHByemV6IEJyYW1hIE1vb2xlbmFhcmEuCisKK35+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+fgorCisgIFByemV0s3VtYWN6b25lIHByemV6IE1pa2+zYWphIE1hY2hvd3NraWVnbywKKyAgU2llcnBpZfEgMjAwMSwKKyAgcmV2LiBNYXJ6ZWMgMjAwMgorICBXc3plbGtpZSB1d2FnaSBwcm9zeuoga2llcm93YeYgbmE6IG1pa21hY2hAd3AucGwKKwpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci90dXRvci5ydSBiL3J1bnRpbWUvdHV0b3IvdHV0b3IucnUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkNzRjZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IucnUKQEAgLTAsMCArMSw4MzQgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAg5CDPIMIg0iDPICAg0CDPINYgwSDMIM8g1yDBINQg2CAgINcgICDVIN4gxSDCIM4gySDLICAgVklNICAtICD3xdLTydEgMS41ID0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgVmltIC0tLSDc1M8gz97Fztggzc/dztnKINLFxMHL1M/SLCDJzcXA3cnKIM3Oz9bF09TXzyDLz83BzsQsINPMydvLz80KKyAgICAgzc7Px88gxMzRINTPx88sIN7Uz8LZIMnIINfTxSDNz9bOzyDC2czPIM/QydPB1Ngg1yDUwcvPzSDV3sXCzsnLxSwgy8HLCisgICAgINzUz9QuIPzUz9Qg1d7Fws7JyyDQ0sna18HOIM/C39HTzsnU2CDEz9PUwdTP3s7PxSDeydPMzyDLz83BzsQgxMzRINTPx88sCisgICAgIN7Uz8LZIPfZIM3Px8zJINMgzMXHy8/T1NjAIMnT0M/M2NrP18HU2CBWaW0g1yDLwd7F09TXxSDSxcTBy9TP0sEgz8LdxcfPCisgICAgIM7B2s7B3sXOydEuCisKKyAgICAg98HNINDP1NLFwtXF1NPRINDSycLMydrJ1MXM2M7PIDI1LTMwIM3JztXUIM7BIM/T18/FzsnFIMTBzs7Px88g1d7Fws7Jy8Eg1worICAgICDawdfJ08nNz9PUySDP1CDUz8fPLCDTy8/M2MvPINfSxc3Fzskg99kg0M/U0sHUydTFIM7BINzL09DF0snNxc7U2S4KKworICAgICDrz83BzsTZINcg1dLPy8HIIMLVxNXUIM3PxMnGycPJ0s/XwdTYINTFy9PULiDzz9rEwcrUxSDLz9DJwCDc1M/HzyDGwcrMwSwKKyAgICAg3tTPwtkg0M/Q0sHL1MnLz9fB1NjT0SDOwSDOxcogKMXTzMkg99kg2sHQ1dPUyczJICJ2aW10dXRvciIsINTPINzUzyDV1sUKKyAgICAgy8/QydEpLgorCisgICAgIPfB1s7PINDPzc7J1NgsIN7UzyDc1M/UINXexcLOycsg0NLFxM7B2s7B3sXOIMTM0SDPwtXexc7J0SDXINDSz8PF09PFCisgICAgIMnT0M/M2NrP18HOydEuIPzUzyDP2s7B3sHF1Cwg3tTPIPfZIMTPzNbO2SDawdDV08vB1Nggy8/Nwc7E2SDEzNEg1M/HzywKKyAgICAg3tTPwtkgy8HLINPMxcTVxdQgycggydrV3snU2C4g5dPMySD32SDQ0s/T1M8g0NLP3snUwcXUxSDUxcvT1Cwg1M8KKyAgICAg2sHC1cTF1MUgy8/Nwc7E2SEKKworICAgICD0xdDF0tgg1cLFxMnUxdPYINcg1M/NLCDe1M8gy8zB18nbwSBDYXBzTG9jayDOxSDXy8zA3sXOwSDJIM7B1s3J1MUKKyAgICAgy8zB18nb1SAgIGogICDOxdPLz8zYy88g0sHaLCDUwcssIN7Uz8LZIPXSz8sgMS4xINDPzM7P09TYwCDQz83F09TJzNPRIM7BCisgICAgINzL0sHOxS4KK35+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+fgorCQkJ9dLPyyAxLjE6ICDw5fLl7eX95e7p5SDr9fLz7/LhCisKKyoqIOTM0SDQxdLFzcXdxc7J0SDL1dLTz9LBIM7B1s3J1MUgy8zB18nbySBoLGosayxsINTByywgy8HLINDPy8Hawc7PIM7J1sUuICoqCisJICAgICBeCisJICAgICBrCQnzz9fF1Nk6CevMwdfJ28EgaCDOwcjPxMnU09Eg08zF18EgySDQxdLFzcXdwcXUINfMxdfPLgorICAgICAgIDwgaAkgbCA+CQnrzMHXydvBIGwgzsHIz8TJ1NPRINPQ0sHXwSDJINDF0sXNxd3BxdQg19DSwdfPLgorCSAgICAgagkJCevMwdfJ28EgaiDQz8jP1sEgzsEg09TSxczL1SBg187J2icuCisJICAgICB2CisgIDEuIPDPxNfJx8HK1MUgy9XS08/SINDPINzL0sHO1Swg0M/LwSDOxSDQz97V19PU19XF1MUg08XC0SDV18XSxc7Ozy4KKworICAyLiDuwcTB18nUxSDLzMHXydvVIGDXzsnaJyAoaikg0M/LwSDPzsEgzsUgzsHezsXUINDP19TP0tHU2NPRLgorLS0tPiD0xdDF0tgg99kg2s7BxdTFLCDLwcsg0MXSxcrUySDLINPMxcTVwN3FzdUg1dLPy9UuCisKKyAgMy4g6dPQz8zY2tXRIMvMwdfJ29UgYNfOydonINDF0sXKxMnUxSDLIPXSz8vVIDEuMi4KKwor+sHNxd7BzsnFOiDl08zJINfZINDPy8EgzsUg1dfF0sXO2SDXINTPzSwg3tTPIM7BwsnSwcXUxSwgzsHWzcnUxSA8RVNDPiDEzNEKKwkgICDQxdLFyM/EwSDXIM/C2d7O2cog0sXWyc0gKE5vcm1hbCBtb2RlKS4g8M/TzMUg3NTPx88g0MXSxc7BwsXSydTFCisJICAg1NLFwtXFzdXAIMvPzcHOxNUuCisKK/rBzcXewc7JxTog78LZ3s7ZxSDLzMHXydvJINXQ0sHXzMXOydEgy9XS08/Sz80gKNPU0sXMy8kpINTBy9bFIMTPzNbO2QorCSAgINLBws/UwdTYLiDvxM7By88sIMvMwdfJ28kgaGprbCDQz9rXz8zR1CD3wc0g0MXSxc3F3cHU2NPRCisJICAg2s7B3snUxczYzs8gwtnT1NLFxSwgy8HLINTPzNjLzyD32SDOwdXeydTF09ggyc3JINDPzNjaz9fB1NjT0S4KK35+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+fgorCQkgIPXSz8sgMS4yOiD64fD18+sg6SD64ffl8vvl7unlIPLh4u/0+SDzIFZJTQorCishISD37unt4e7p5SEg8NLF1sTFLCDexc0g19nQz8zO0dTYIMzAws/KIMnaIM/QydPBzs7ZyCDOydbFINvBx8/XLCDQ0s/e1MnUxQorCQkJICAgICAgINXSz8sgw8XMycvPzSAhIQorCisgIDEuIO7B1s3J1MUgy8zB18nb1SA8RVNDPiAoxMzRINTPx88sIN7Uz8LZINXEz9PUz9fF0snU2NPRLCDe1M8g99kg1yDPwtnezs/NCisgICAgINLF1snNxSAoTm9ybWFsIG1vZGUpKS4KKworICAyLiDuwcLF0snUxToJCQk6cSEgPEVOVEVSPi4KKworLS0tPiD81M8g0M/a18/MydQg98HNINfZytTJIMnaINLFxMHL1M/SwSDi5fog8+/o8uHu5e7p8SDMwMLZyCDTxMXMwc7O2cgKKyAgICAgydrNxc7FzsnKLiDl08zJIPfZIMjP1MnUxSDTz8jSwc7J1NggydrNxc7FzsnRIMkg19nK1Mk6CisJCQkJOndxICA8RU5URVI+CisKKyAgMy4g68/HxMEg99kg1dfJxMnUxSDQ0snHzMHbxc7JxSDLz83BzsTOz8ogz8LPzM/ey8ksIM7BwsXSydTFIMvPzcHOxNUsCisgICAgIMvP1M/SwdEg0NLJ18XMwSD3wdMg1yDc1M/UINXexcLOycsuIPzUzyDNz9bF1CDC2dTYCisJCQkJdmltdHV0b3IgcnUgPEVOVEVSPgorICAgICDvwtnezs8gzc/Wzs8gydPQz8zY2s/XwdTYOgl2aW0gdHV0b3IucnUgPEVOVEVSPgorCistLS0+ICd2aW0nINDP2tfPzNHF1CDawdDV09TJ1Ngg0sXEwcvUz9IgdmltLCAndHV0b3IucnUnIC0tLSDc1M8gxsHKzCwgy8/Uz9LZygorICAgICD32SDC1cTF1MUg0sXEwcvUydLP18HU2C4KKworICA0LiDl08zJIPfZINXXxdLFztkg1yDUz80sIN7UzyDawdDPzc7JzMkg3NTJINvBx8ksINfZ0M/MzsnUxSDbwcfJIM/UIDEgxM8gMworICAgICDe1M/C2SDX2crUySDTzs/XwSDawdDV09TJ1Ngg0sXEwcvUz9IuIPrB1MXNINDF0sXNxdPUydTFIMvV0tPP0iDXzsnaIMsKKyAgICAg9dLPy9UgMS4zLgorfn5+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+CisJCSAg9dLPyyAxLjM6IPLl5OHr9Ony7/fh7unlIPTl6/P04SAtIPXk4ezl7unlCisKKworKiog7sHIz8TR09gg1yDPwtnezs/NINLF1snNxSDOwdbNydTFIHgsIN7Uz8LZINXEwczJ1Ngg08nN18/MINDPxCDL1dLTz9LPzS4gKioKKworICAxLiDwxdLFzcXT1MnUxSDL1dLTz9IgyyDT1NLPy8Ug187J2tUsINDPzcXexc7Oz8ogLS0tPi4KKworICAyLiDkzNEgydPQ0sHXzMXOydEgz9vJws/LLCDQxdLFzcXT1MnUxSDL1dLTz9IsINDPy8Egz84gzsUgz8vB1sXU09EgzsHECisgICAgINXEwczRxc3ZzSDTyc3Xz8zPzS4KKworICAzLiDuwdbNydTFIMvMwdfJ29UgeCDEzNEg1cTBzMXOydEg1NLFwtXFzc/HzyDTyc3Xz8zBLgorCisgIDQuIPDP19TP0snUxSDbwcfJIDItLTQg0M/LwSDT1NLPy8EgzsUgwtXExdQgydPQ0sHXzMXOwS4KKworLS0tPiDv1CDU1NTP0M/UwSDLz9DZ1NQg0NDQ2czYINDQzyDQ0NDPzMAgzMXU1MnU1C4KKworICA1LiD0xdDF0tgsIMvPx8TBINPU0s/LwSDP1MvP0tLFy9TJ0s/Xwc7BLCDQxdLFyM/EydTFIMsg1dLPy9UgMS40LgorCiv64e3l/uHu6eU6IPcgyM/ExSDP09fPxc7J0SDc1M/HzyDV3sXCzsnLwSDOxSDQ2dTBytTF09gg2sHQz83JzsHU2Cwg1d7J1MUKKwkgICDXINDSz8PF09PFIMnT0M/M2NrP18HOydEuCisKKworfn5+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+CisJCSAg9dLPyyAxLjQ6IPLl5OHr9Ony7/fh7unlIPTl6/P04SAtIPfz9OH36+EKKworCisgKiog7sHIz8TR09gg1yDPwtnezs/NINLF1snNxSAoTm9ybWFsIG1vZGUpLCDOwdbNydTFIGkgxMzRINfT1MHXy8kg1MXL09TBLiAqKgorCisgIDEuIPDF0sXNxdPUydTFIMvV0tPP0iDLINDF0tfPyiDT1NLPy8Ug187J2tUsINDPzcXexc7Oz8ogLS0tPi4KKworICAyLiDkzNEg1M/Hzywg3tTPwtkg08TFzMHU2CDQxdLX1cAg09TSz8vVIMnExc7Uyd7Oz8og19TP0s/KLCDQz83F09TJ1MUKKyAgICAgy9XS08/SIM7BINPJzdfPzCDw5fLl5CDLz9TP0tnNINPMxcTVxdQg19PUwdfJ1Ngg1MXL09QuCisKKyAgMy4g7sHWzcnUxSBpIMkgzsHCxdLJ1MUg1NLFwtXFzdnFIMTPwsHXzMXOydEuCisKKyAgNC4g8M/TzMUgydPQ0sHXzMXOydEg19PFyCDP28nCz8sgzsHWzcnUxSA8RVNDPiDEzNEg18/a19LB1MEg1yDPwtneztnKINLF1snNLgorICAgICDwz9fUz9LJ1MUg28HHySAyLS00LCDQz8vBIMbSwdrBIM7FIMLVxMXUIMnT0NLB18zFzsEg0M/Mzs/T1NjALgorCistLS0+IP7B09TYINTFy9PUwSDXINPU0s/LxSDCxdPMxcTOzyAuCistLS0+IP7B09TYINTFy9PUwSDXINzUz8og09TSz8vFIMLF09PMxcTOzyDQ0s/QwczBLgorCisgIDUuIOvPx8TBIM/T18/J1MUg19PUwdfL1SDUxcvT1MEsINDF0sXIz8TJ1MUgxMHM2NvFIMsg8sXawM3FLgorCisKKworfn5+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+CisJCQkJ8uX64O3lIPXy7+vhIDEKKworICAxLiDr1dLTz9Ig0MXSxc3F3cHF1NPRIMzJws8gy8zB18nbwc3JINPPINPU0sXMy8HNySwgzMnCzyDLzMHXydvBzckgaGprbC4KKwkgaCAo18zF188pCWogKNfOydopICAgICAgIGsgKNfXxdLIKQkgICAgbCAo19DSwdfPKQorCisgIDIuIOTM0SDawdDV08vBIFZpbSAoydog0NLJx8zB28XOydEgJSDLz83BzsTOz8ogz8LPzM/ey8kpIM7BwsXSydTFOgorICAgICB2aW0g6e3xX+bh6uzhIDxFTlRFUj4KKworICAzLiDkzNEg2sHXxdLbxc7J0SDSwcLP1Nkg0yBWaW0gzsHCxdLJ1MU6CisgICAgIDxFU0M+ICAgOnEhCSA8RU5URVI+ICDe1M/C2SDP1MvB2sHU2NPRIM/UINPPyNLBzsXOydEgydrNxc7FzsnKLgorICAgICDpzMkgzsHCxdLJ1MU6CisgICAgIDxFU0M+ICAgOndxCSA8RU5URVI+ICDe1M/C2SDTz8jSwc7J1NggydrNxc7FzsnRLgorCisgIDQuIOTM0SDVxMHMxc7J0SDTyc3Xz8zBINDPxCDL1dLTz9LPzSDXIM/C2d7Oz80g0sXWyc3FLCDOwcLF0snUxTogeAorCisgIDUuIP7Uz8LZINfT1MHXydTYINTFy9PUINDF0sXEIMvV0tPP0s/NINcgz8LZ3s7PzSDSxdbJzcUsIM7BwsXSydTFOgorCSBpICAgICDX18/EydTFINTFy9PUCTxFU0M+CisKK/rh7eX+4e7p5Tog7sHWwdTJxSA8RVNDPiDQxdLFzcXT1MnUIPfB0yDXIM/C2d7O2cog0sXWyc0gKE5vcm1hbCBtb2RlKSDMycLPCisJICAg0NLF0tfF1CDOxdbFzMHUxczYztXAIMkg3sHT1Mnezs8g2sHXxdLbxc7O1cAgy8/Nwc7E1S4KKwor9MXQxdLYINDF0sXIz8TJzSDLIPXSz8vVIDIuCisKK35+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+fgorCQkJICD10s/LIDIuMTog6+/t4e7k+SD15OHs5e7p8QorCisKKwkqKiDuwcLF0snUxSBkdyDEzNEg1cTBzMXOydEg1d7B09TLwSDUxcvT1MEgxM8gy8/Ow8Eg08zP18EuICoqCisKKyAgMS4g7sHWzcnUxSA8RVNDPiwg3tTPwtkg0MXSxcrUySDXIM/C2d7O2cog0sXWyc0uCisKKyAgMi4g8MXSxc3F09TJ1MUgy9XS08/SINfOydosIMsg09TSz8vFLCDQz83F3sXOzs/KIC0tLT4uCisKKyAgMy4g8MXSxc3F09TJ1MUgy9XS08/SINcgzsHewczPINPMz9fBLCDLz9TP0s/FINPMxcTVxdQg1cTBzMnU2C4KKworICA0LiDuwcLF0snUxSAgZHcgLCDe1M/C2SDVxMHMydTYINzUzyDTzM/Xzy4KKwor+uHt5f7h7unlOiD3zyDX0sXN0SDOwcLP0sEgwtXL19kgZHcg0M/R19HU09Eg1yDQz9PMxcTOxcog09TSz8vFINzL0sHOwS4g5dPMyQorCSAgIPfZIN7Uzy3UzyDOwcLF0sXUxSDOxdDSwdfJzNjOzywgzsHWzcnUxSA8RVNDPiDJIM7B3s7J1MUg087B3sHMwS4KKworLS0tPiDuxdPLz8zYy88g08zP1yDSwcbJzsHEINcg3NTPzSDQ0sXEzM/Wxc7JySDB19TPy9LBziDJ2szJ287JLgorCisgIDUuIPDP19TP0snUxSDbwcfJIDMgySA0LCDQz8vBIM7FIMnT0NLB18nUxSDX08Ugz9vJwsvJIMkg0MXSxcjPxMnUxSDLCisgICAgIPXSz8vVIDIuMi4KKworCit+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+fn4KKwkJICD10s/LIDIuMjog5O/w7+zu6fTl7Pju+eUg6+/t4e7k+SD15OHs5e7p8QorCisKKwkgICAgKiog7sHCxdLJ1MUgZCQgxMzRINXEwczFzsnRINTFy9PUwSDEzyDLz87DwSDT1NLPy8kuICoqCisKKyAgMS4g7sHWzcnUxSA8RVNDPiwg3tTPwtkg0MXSxcrUySDXIM/C2d7O2cog0sXWyc0uCisKKyAgMi4g8MXSxc3F09TJ1MUgy9XS08/SINfOydosIMsg09TSz8vFLCDQz83F3sXOzs/KIC0tLT4uCisKKyAgMy4g8MXSxc3F09TJ1MUgy9XS08/SIMsgy8/Ow9Ug0NLB18nM2M7PyiDT1NLPy8kgKPDv8+zlINDF0tfPyiAuICkuCisKKyAgNC4g/tTPwtkg1cTBzMnU2CDP09TB1M/LINPU0s/LySwgzsHCxdLJ1MUgIGQkIC4KKworLS0tPiDr1M8t1M8gzsHC0sHMIM/Lz87ewc7JxSDc1M/KINPU0s/LySDE18HWxNkuIM/Lz87ewc7JxSDc1M/KINPU0s/LySDE18HWxNkuCisKKworICA1Lv7Uz8LZIMzV3tvFINLB2s/C0sHU2NPRINcg3NTPzSwg0MXSxcjPxMnUxSDLIPXSz8vVIDIuMy4KKworCisKKworCit+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+fn4KKwkJCSD10s/LIDIuMzog6+/t4e7k+SDpIO/i/+Xr9PkKKworCisgIObP0s3B1CDLz83BzsTZIGDVxMHMxc7JxScgZCDUwcvP1zoKKworCSBb3snTzM9dICAgZAnPwt/Fy9QJICAgIOns6QkgICAgIGQJIFveydPMz10gICDPwt/Fy9QKKyAg+sTF09g6CisgICAg3snTzM8gIC0g08vPzNjLzyDSwdogydPQz8zOydTYIMvPzcHOxNUgKM7Fz8LR2sHUxczYzs8sINDPINXNz8zewc7JwD0xKS4KKyAgICBkICAgICAgLSDLz83BzsTBINXEwczFzsnRLgorICAgIM/C38XL1CAtINMg3sXNIMvPzcHOxMEgxM/M1s7BIMLZ1Ngg19nQz8zOxc7BICjQxdLF3snTzMXOzyDOydbFKS4KKworICDr0sHUy8nKINPQydPPyyDPwt/Fy9TP1zoKKyAgICB3IC0gz9Qgy9XS08/SwSDEzyDLz87DwSDTzM/XwSwg18vMwN7B0SDawdfF0tvBwN3JyiDQ0s/CxcwuCisgICAgZSAtIM/UIMvV0tPP0sEgxM8gy8/Ow8Eg08zP18EsIO7lINfLzMDewdEg2sHXxdLbwcDdycog0NLPwsXMLgorICAgICQgLSDP1CDL1dLTz9LBIMTPIMvPzsPBINPU0s/LyS4KKyAgICBeIC0gz9Qgy9XS08/SwSDEzyDOwd7BzMEg09TSz8vJLgorCiv64e3l/uHu6eU6IPDSz9PUz8UgzsHWwdTJxSDOwSDTyc3Xz8wgz8LfxcvUwSDXIM/C2d7Oz80g0sXWyc3FIChOb3JtYWwgbW9kZSkKKwkgICDCxdogxM/Qz8zOydTFzNjO2cggy8/Nwc7EINDF0sXE18nOxdQgy9XS08/SINTByywgy8HLINXLwdrBzs8g1worCSAgINPQydPLxSDPwt/Fy9TP1y4KKworCisKK35+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+fgorCSAgICAgICD10s/LIDIuNDog6fPr7OD+5e7p5SDp+iDw8uH36ezhIGDr7+3h7uThLe/i/+Xr9CcKKworCisJCSAqKiDuwcLF0snUxSBkZCDEzNEg1cTBzMXOydEg19PFyiDT1NLPy8kuICoqCisKKyAg99PMxcTT1NfJxSDewdPUz8fPINDSyc3FzsXOydEgz9DF0sHDyckg1cTBzMXOydEg19PFyiDT1NLPy8ksINLB2tLBws/U3snLyQorICBWaW0g0sXbyczJLCDe1M8gxMzRINzUz8fPINDSz93FINfTxcfPINDSz9PUzyDOwcLSwdTYIGQgxNfB1sTZLgorCisgIDEuIPDF0sXNxdPUydTFIMvV0tPP0iDXzsnaLCDLzyDX1M/Sz8og09TSz8vFIMbSwdrZLgorICAyLiDuwcLF0snUxSBkZCDEzNEg1cTBzMXOydEg09TSz8vJLgorICAzLiD0xdDF0tgg0MXSxc3F09TJ1MXT2CDLIN7F1NfF0tTPyiDT1NLPy8UuCisgIDQuIO7BwsXSydTFIDJkZCAo19PQz83OydTFINDSwdfJzM8gYN7J08zPLcvPzcHOxMEtz8LfxcvUJyksIN7Uz8LZINXEwczJ1NgKKyAgICAgxNfFINPU0s/LyS4KKworICAgICAgMSkgIOzF1M/NINEgyM/W1SDOwSDT1MHEyc/OLAorICAgICAgMikgIO8sIMvByyDXzsXawdDOzyDLz87eyczT0SDEydfBziEKKyAgICAgIDMpICDxIMLPzMXAINrBIGBg+sXOydQnJywgYGD6xc7J1CcnIC0tLSDexc3Qyc/OIQorICAgICAgNCkgIPDF3sHM2M7PINEgx8zR1tUgzsEgzsHbxSDQz8vPzMXOycUhCisgICAgICA1KSAg5cfPIMfS0cTV3cXFIMnM2CDQ1dPUzyDJzNgg1MXNzs8uLi4KKyAgICAgIDYpICDxINPJ1tUgzsEg08vBzcXKy8Ug1yDMz9bFIGDiJworICAgICAgNykgIOkgycfSwcAgzsEgws/M2NvPyiDWxdPU0c7PyiDU0tXCxS4KKworfn5+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+CisJCQkgIPXSz8sgMi41OiDr7+3h7uThIGDv9Ovh9CcKKworCisgICoqIO7B1s3J1MUgdQnEzNEgz9TNxc7ZINLF2tXM2NTB1MEg0sHCz9TZINDSxcTZxNXdxcogy8/Nwc7E2SwgVSDEzNEgz9TNxc7ZCisJCQnJ09DSwdfMxc7JyiDXzyDX08XKINPU0s/LxS4gKioKKworICAxLiDwxdLFzcXT1MnUxSDL1dLTz9Ig187J2iwgyyDT1NLPy8UsINDPzcXexc7Oz8ogLS0tPiDJINXT1MHOz9fJ1MUgxcfPIM7BCisgICAgINDF0tfVwCDP28nCy9UuCisgIDIuIO7B1s3J1MUgeCDEzNEg1cTBzMXOydEg0MXS18/HzyDOxdDSwdfJzNjOz8fPINPJzdfPzMEuCisgIDMuIPTF0MXS2CDOwdbNydTFIHUgxMzRIM/UzcXO2SAoz9TLwdTBKSDQz9PMxcTOxcog19nQz8zOxc7Oz8ogy8/Nwc7E2S4KKyAgNC4g6dPQ0sHX2NTFINfTxSDP28nCy8kg1yDT1NLPy8UsIMnT0M/M2NrV0SDLz83BzsTVIHggLgorICA1LiD0xdDF0tggzsHWzcnUxSDawcfMwdfO1cAgVSDEzNEg1M/Hzywg3tTPwtkg18XSztXU2CDX08Ag09TSz8vVINcgydPIz8TOz8UKKyAgICAg08/T1M/RzsnFLgorICA2LiDuwdbNydTFIHUgzsXTy8/M2MvPINLB2iDEzNEgz9TNxc7ZIMvPzcHOxNkgVSDJINDSxcTZxNXdycggy8/Nwc7ELgorICA3LiDuwdbNydTFINTF0MXS2CBDVFJMLVIgKNXExdLWydfBytTFIMvMwdfJ29UgQ1RSTCDOwdbB1M/KINcgzc/Nxc7UIM7B1sHUydEKKyAgUikgICAgIM7F08vPzNjLzyDSwdogxMzRINfP2tfSwdTBIMvPzcHOxCAoz9TLwdQgz9TLwdTBKS4KKworLS0tPiDp09DS0sHX2NTFIM/P28nCy8kg1yDc1M/KyiDT1NLPy8UgySDXxdLOydTUxSDJyCDT0yDQz83P3djYwCBgz9TLwdTBJy4KKworICA4LiD81M8gwtnMySDP3sXO2CDQz8zF2s7ZxSDLz83BzsTZLiDkwczFxSDQxdLFyM/EydTFIMsg8sXawM3FIPXSz8vBIDIuCisKKworfn5+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+CisJCQkJ8uX64O3lIPXy7+vhIDIKKworCisgIDEuIOTM0SDVxMHMxc7J0SDUxcvT1MEgz9Qgy9XS08/SwSDEzyDLz87DwSDTzM/XwSDOwcLF0snUxTogICAgZHcKKworICAyLiDkzNEg1cTBzMXOydEg1MXL09TBIM/UIMvV0tPP0sEgxM8gy8/Ow8Eg09TSz8vJIM7BwsXSydTFOiAgICBkJAorCisgIDMuIOTM0SDVxMHMxc7J0SDX08XKINPU0s/LySDOwcLF0snUxTogICAgZGQKKworICA0LiDmz9LNwdQgy8/Nwc7E2SDXIM/C2d7Oz80g0sXWyc3FIMnNxcXUINfJxDoKKworICAgICAgIFveydPMz10gICDLz83BzsTBICAgz8LfxcvUICAgICDp7OkgICAgIMvPzcHOxMEJW97J08zPXSAgIM/C38XL1AorICAgICDHxMU6CisgICAgICAg3snTzM8gICAtINPLz8zYy88g0sHaINDP19TP0snU2CDX2dDPzM7FzsnFIMvPzcHOxNkKKyAgICAgICDLz83BzsTBIC0g3tTPINfZ0M/MzsnU2CwgzsHQ0snNxdIgZCDEzNEg1cTBzMXOydEKKyAgICAgICDPwt/Fy9QgIC0gzsEg3tTPIMTPzNbOwSDXz9rExcrT1NfP18HU2CDLz83BzsTBLCDOwdDSyc3F0iB3ICjTzM/XzyksCisJCSQgKMTPIMvPzsPBINPU0s/LySksIMkg1C7ELgorCisgIDUuIOTM0SDP1M3FztkgKM/Uy8HUwSkg0NLFxNvF09TX1cDdycggxMXK09TXycogzsHCxdLJ1MU6ICB1ICjT1NLP3s7B0SB1KQorICAgICDkzNEgz9TNxc7ZICjP1MvB1MEpINfTxcggydrNxc7FzsnKINcg09TSz8vFIM7BwsXSydTFOiAgVSAo0NLP0MnTzsHRIFUpCisgICAgIOTM0SDP1M3Fztkgz9TLwdTBIM7BwsXSydTFOiAgQ1RSTC1SCisKK35+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+fgorCQkJICD10s/LIDMuMTog6+/t4e7k4SD38/Th9+vpCisKKworICAgKiog7sHCxdLJ1MUgcCDEzNEg19PUwdfLySDQz9PMxcTOxcfPINXEwczFzs7Px88g1MXL09TBINDP08zFIMvV0tPP0sEuICoqCisKKyAgMS4g8MXSxc3F09TJ1MUgy9XS08/SINfOydogyyDQz9PMxcTOxcog09TSz8vFIMnaIM7Bws/SwS4KKworICAyLiDuwcLF0snUxSBkZCDEzNEg1cTBzMXOydEg09TSz8vJIMkgxcUg08/I0sHOxc7J0SDXIMLVxsXSxSBWaW0nwS4KKworICAzLiDwxdLFzcXT1MnUxSDL1dLTz9IgyyDT1NLPy8Ug7uHkINTFzSDNxdPUz80sIMvVxMEg08zFxNXF1CDX09TB18nU2AorICAgICDVxMHMxc7O1cAg09TSz8vVLgorCisgIDQuIO7ByM/E0dPYINcgz8LZ3s7PzSDSxdbJzcUgzsHCxdLJ1MUgcCDEzNEg2sHNxc7ZINPU0s/LyS4KKworICA1LiDwz9fUz9LJ1MUg28HHySAyLS00LCDQz8vBIM7FINLB09PUwdfJ1MUg19PFINPU0s/LySDXIM7V1s7PzSDQz9LRxMvFLgorCisgICAgIMcpIOkgzNXe28Ug19nE1c3B1NggzsUgzc/HLgorICAgICDCKSDrz8fEwSDOxSDXINvV1MvVINrBzsXNz8csCisgICAgINcpIO/OINXXwdbB1Ngg08XC0SDawdPUwdfJzAorICAgICDBKSDtz8ogxNHE0SDTwc3ZyCDexdPUztnIINDSwdfJzAorCisKK35+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+fgorCQkgICAgICAg9dLPyyAzLjI6IOvv7eHu5OEg+uHt5e75CisKKworCSAgKiog7sHCxdLJ1MUgciDJINPJzdfPzCwg2sHNxc7RwN3JyiDTyc3Xz8wg0M/EIMvV0tPP0s/NLiAqKgorCisgIDEuIPDF0sXNxdPUydTFIMvV0tPP0iDXzsnaLCDLINPU0s/LxSwg0M/Nxd7Fzs7PyiAtLS0+LgorCisgIDIuIPXT1MHOz9fJ1MUgy9XS08/SINTByywg3tTPwtkgz84gzsHIz8TJzNPRIM7BxCDQxdLXz8ogz9vJwsvPyi4KKworICAzLiDuwcLF0snUxSByCckg2sHUxc0g08nN18/MLCDJ09DSwdfM0cDdycogz9vJwsvVLgorCisgIDQuIPDP19TP0snUxSDbwcfJIDIgySAzLCDQz8vBINDF0tfB0SDT1NLPy8EgzsUgwtXExdQgydPQ0sHXzMXOwS4KKworLS0tPiAg9yDNz83Fx9QgzsHC1NLBINzUz8og3tTSz8vJIMvPxTDL1M8g0yDU0tXEz80g0M/Q18TBzCDQzyDLzNfBydvBzSEKKy0tLT4gIPcgzc/Nxc7UIM7Bws/SwSDc1M/KINPU0s/LySDLz8Uty9TPINMg1NLVxM/NINDP0MHEwcwg0M8gy8zB18nbwc0hCisKKyAgNS4g9MXQxdLYINDF0sXIz8TJ1MUgyyD10s/L1SAzLjIuCisKK/rh7eX+4e7p5Tog8M/NzsnUxSwg3tTPINfZIMTPzNbO2SDV3snU2NPRINcg0NLPw8XT08Ug0sHCz9TZLCDBIM7FINDSz9PUzworCSAgINrB0M/Nyc7B0S4KKworCit+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+fn4KKwkJCSD10s/LIDMuMzog6+/t4e7k4SDp+u3l7uXu6fEKKworCisJCSoqIOTM0SDJ2s3FzsXOydEg3sHT1Mkg08zP18EgzsHCxdLJ1MUgY3cgLiAqKgorCisgIDEuIPDF0sXNxdPUydTFIMvV0tPP0iDXzsnaLCDLINPU0s/LxSwg0M/Nxd7Fzs7PyiAtLS0+LgorCisgIDIuIPLB09DPzM/WydTFIMvV0tPP0iDOwcQgwtXL18/KIGBvJyDXINPMz9fFIGDTz8zBJy4KKworICAzLiDuwcLF0snUxSBjdyDJIMnT0NLB19jUxSDTzM/XzyAo1yDEwc7Oz80g08zV3sHFLCDOwcLF0snUxSBgzM/XJy4pCisKKyAgNC4g7sHWzcnUxSA8RVNDPiDJINDF0sXIz8TJ1MUgyyDTzMXE1cDdxcogz9vJwsvFICjLINDF0tfPzdUg08nN18/M1Swgy8/Uz9LZygorICAgICDOwcTPIMnazcXOydTYLikKKworICA1LiDwz9fUz9LJ1MUg28HHySAzLS00INDPy8Eg0MXS18/FINDSxcTMz9bFzsnFIM7FINPUwc7F1CDJxMXO1MneztnNINfUz9LPzdUuCisKKy0tLT4g7sXTy8/M2MvPINPPzMEg1yDc2MfDINPU0s/LxSDU0Mfbw8LYINLFxMHM2svVwMnF09fILgorLS0tPiDuxdPLz8zYy88g08zP1yDXINzUz8og09TSz8vFINTSxcLVwNQg0sXEwcvUydLP18HOydEuCisKK+/C0sHUydTFINfOyc3BzsnFLCDe1M8gY3cgzsUg1M/M2MvPINrBzcXO0cXUINPMz9fPLCDOzyDJINDF0sXXz8TJ1CDXwdMg1yDSxdbJzQor19PUwdfLyS4KKworCit+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+fn4KKwkJICD10s/LIDMuNDog8PLv5O/s9uHl7SDp+u3l7vH0+CDzIOvv7eHu5O/qIGMKKworCisqKiDrz83BzsTBINrBzcXO2SDJ09DPzNja1cXU09Eg0yDUxc3JINbFIM/C38XL1MHNySwg3tTPIMkgy8/Nwc7EwSDVxMHMxc7J0S4gKioKKworICAxLiDrz83BzsTBIMnazcXOxc7J0SDQ0snNxc7RxdTT0SDUwcvJzSDWxSDPwtLB2s/NLCDLwcsgySDLz83BzsTBINXEwczFzsnRLgorICAgICDlxSDGz9LNwdQg1MHLz9c6CisKKyAgICAgICBb3snTzM9dICAgYyAgIM/C38XL1AkgICDp7OkJICAgIGMJW97J08zPXSAgIM/C38XL1AorCisgIDIuIO/C38XL1Nkg1MHL1sUg08/X0MHEwcDUOiB3ICjTzM/XzyksICQgKMvPzsXDINPU0s/LySkgySDULtAuCisKKyAgMy4g8MXSxc3F09TJ1MUgy9XS08/SINfOydosIMsg09TSz8vFLCDQz83F3sXOzs/KIC0tLT4uCisKKyAgNC4g8MXSxcrEydTFIMsg0MXS18/KIM/bycLLxS4KKworICA1LiDuwcLF0snUxSBjJCDJIM/U0sXEwcvUydLVytTFINDF0tfVwCDT1NLPy9Ug1MHLLCDe1M/C2SDPzsEg08/X0MHEwczBINPPCisgICAgINfUz9LPyiwg0M/TzMUg3sXHzyDOwdbNydTFIDxFU0M+LgorCistLS0+IOvPzsXDINzUz8og09TSz8vJIM7V1sTBxdTT0SDXINDPzc/dySwg3tTPwtkg09TB1Ngg0M/Iz9bJzSDOwSDX1M/Sz8ouCistLS0+IOvPzsXDINzUz8og09TSz8vJIM7V1sTBxdTT0SDXINDPzc/dySDLz83BzsTZIGMkIC4KKworCit+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+fn4KKwkJCQny5frg7eUg9fLv6+EgMworCisKKyAgMS4g5MzRINfT1MHXy8kg1MXL09TBLCDLz9TP0tnKINTPzNjLzyDe1M8gwtnMINXEwczFziwgzsHCxdLJ1MUgcCAuIPzUwQorICAgICDLz83BzsTBINfT1MHXydQg1cTBzMXOztnKINTFy9PUIPDv8+zlIMvV0tPP0sEgKMXTzMkgwtnMwSDVxMHMxc7BINPU0s/LwSwKKyAgICAg1M8gz87BIMLVxMXUINDPzcXdxc7BINcg09TSz8vFINDPxCDL1dLTz9LPzSkuCisKKyAgMi4g5MzRINrBzcXO2SDTyc3Xz8zBINDPxCDL1dLTz9LPzSDOwcLF0snUxSByIMkg2sHUxc0g2sHNxc7RwN3JyiDTyc3Xz8wuCisKKyAgMy4g68/Nwc7EwSDJ2s3FzsXOydEg0M/a18/M0cXUIPfBzSDJ2s3FzsnU2CDVy8Hawc7O2cogz8LfxcvUIM/UIMvV0tPP0sEgxM8KKyAgICAgy8/Ow8Eg3NTPx88gz8LfxcvUwS4g7sHQ0snNxdIsIM7BwsXSydTFIGN3IMTM0SDawc3Fztkgz9Qgy9XS08/SwSDEzworICAgICDLz87DwSDTzM/XwSwgYyQgxMzRIMnazcXOxc7J0SDEzyDLz87DwSDT1NLPy8kuCisKKyAgNC4g5s/SzcHUIMvPzcHOxNkgydrNxc7FzsnRINTBy8/XOgorCisJIFveydPMz10gICBjCc/C38XL1AkgICAgICDp7OkJYyAgIFveydPMz10gICDPwt/Fy9QKKwor9MXQxdLYIM/U0NLB18zRytTF09ggyyDTzMXE1cDdxc3VINXSz8vVLgorCisKKworCisKK35+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+fgorCSAgICAgIPXSz8sgNC4xOiDp7ubv8u3h4+nxIO8g5uHq7OUg6SDy4fPw7+zv9uXu6eUg9yDu5e0KKworCisgKiog7sHCxdLJ1MUgQ1RSTC1nIN7Uz8LZINXXycTF1Ngg98HbxSDNxdPUz9LB09DPzM/Wxc7JxSDXIMbByszFIMkgyc7Gz9LNwcPJwAorCQkJCSAgICDPIM7FzS4KKwnuwcLF0snUxSBTSElGVC1HIMTM0SDQxdLFzcXdxc7J0SDLINrBxMHOzs/KINPU0s/LxSDXIMbByszFLiAqKgorCisgIPrBzcXewc7JxTog8NLP3snUwcrUxSDXxdPYINXSz8sg0NLF1sTFIN7FzSDX2dDPzM7R1NggzMDC2cUgy8/Nwc7E2SEhCisKKyAgMS4g9cTF0tbJ18HRIMvMwdfJ29UgQ3RybCDOwdbNydTFIGcgLiD3zsna1SDcy9LBzsEg0M/R18nU09Eg09TSz8vBINPUwdTV08Eg0worICAgICDJzcXOxc0gxsHKzMEgySDOz83F0s/NINPU0s/LySwg1yDLz9TP0s/KIPfZIM7ByM/EydTF09guIPrB0M/NzsnUxSDOz83F0gorICAgICDT1NLPy8ksIM/OINDP1NLFwtXF1NPRIM7BIPvBx8UgMy4KKworICAyLiDuwdbNydTFIHNoaWZ0LUcgxMzRINDF0sXNxd3FzsnRIMsgy8/Ow9UgxsHKzMEuCisKKyAgMy4g7sHCxdLJ1MUgzs/NxdIg09TSz8vJLCDXIMvP1M/Sz8og19kgzsHIz8TJzMnT2CDJINrB1MXNIHNoaWZ0LUcuIPzUzworICAgICDXxdLOxdQg98HTIMsg09TSz8vFLCDXIMvP1M/Sz8og99kgwtnMySwgy8/HxMEg1yDQxdLX2cog0sHaIM7B1sHMySBDdHJsLWcuCisgICAgICjrz8fEwSD32SDC1cTF1MUgzsHCydLB1Nggw8nG0tksIM/OySDu5SDP1M/C0sHa0dTT0SDOwSDcy9LBzsUuKQorCisgIDQuIOXTzMkg99kg2sHQz83OyczJINfTxSDX2dvF08vB2sHOzs/FLCDX2dDPzM7J1MUg28HHySAxLS0zLgorCisKK35+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+fgorCQkJICAg9dLPyyA0LjI6IOvv7eHu5OEg8O/p8+vhCisKKwkgICAgICAqKiDuwcLF0snUxSAgLyAgySDawdTFzSDX18XEydTFIMnTy8/N1cAgxtLB2tUuICoqCisKKyAgMS4g9yDPwtnezs/NINLF1snNxSAoTm9ybWFsIG1vZGUpIM7BwsXSydTFINPJzdfPzCAgLyAuIO/C0sHUydTFINfOyc3BzsnFLAorICAgICDe1M8gz84g183F09TFINMgy9XS08/Sz80g0M/R18nU09Eg187J2tUg3MvSwc7BLCDLwcsg3NTPINDSz8nTyM/EydQg0worICAgICDLz83BzsTPyiA6CS4KKworICAyLiD0xdDF0tggzsHCxdLJ1MUgJ8/b29vJwsvBJyA8RU5URVI+LiD81M8g1M8g08zP188sIMvP1M/Sz8Ug99kgwtXExdTFCisgICAgIMnTy8HU2C4KKworICAzLiDkzNEg1M/Hzywg3tTPwtkg0M/X1M/SydTYINDPydPLLCDQ0s/T1M8gzsHWzcnUxSBuIC4KKyAgICAg5MzRINDPydPLwSDc1M/KIMbSwdrZINcgz8LSwdTOz80gzsHQ0sHXzMXOycksIM7B1s3J1MUgU2hpZnQtTiAuCisKKyAgNC4g5dPMySD32SDWxczBxdTFINPSwdrVIMnTy8HU2CDXIM/C0sHUzs/NIM7B0NLB18zFzsnJLCDJ09DPzNja1crUxQorICAgICDLz83BzsTVID8g183F09TPIC8gLgorCistLS0+IOvPx8TBIPfZINDSySDQz8nTy8UgxM/T1MnHzsXUxSDLz87DwSDGwcrMwSwg0M/J08sgwtXExdQg0NLPxM/M1sXOINMKKyAgICAgzsHewczBLgorCisgICLP29vbycLLwSIg3NTPIM7FINPQz9PPwiDQ0s/J2s7F08XOydEg08zP18EgYM/bycLLwSc7ICDP29vbycLLwSDc1M8gz9vJwsvBLgorCit+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+fn4KKwkJCfXSz8sgNC4zOiDw7+nz6yDw4fLu+egg8+vv4u/rCisKKworCQkqKiDuwcLF0snUxSAlIMTM0SDQz8nTy8Eg0MHSztnIICksXSDJzMkgfSAuICoqCisKKyAgMS4g8M/NxdPUydTFIMvV0tPP0iDOwcQgzMDCz8ogydogKCwgWyDJzMkgeyDXINPU0s/LxSDXzsna1Swg0M/Nxd7Fzs7PyiAtLS0+LgorCisgIDIuIPTF0MXS2CDOwcLF0snUxSDTyc3Xz8wgJSAuCisKKyAgMy4g69XS08/SIMTPzNbFziDQxdLF08vP3snU2CDOwSDQwdLO1cAg08vPwsvVLgorCisgIDQuIO7BwsXSydTFICUgxMzRINfP2tfSwdTBIMvV0tPP0sEgzsHawcQgyyDQxdLXz8og08vPwsvFLgorCistLS0+IPzUzyAoINPU0s/LwSwg08/ExdLWwd3B0SDUwcvJxSAoLCDUwcvJxSBbIF0gySDUwcvJxSB7IH0g08vPwsvJLiApKQorCiv6wc3F3sHOycU6IPzUzyDP3sXO2CDVxM/Czs8g0NLJIM/UzMHEy8Ug0NLPx9LBzc0g0yDQ0s/Q1d3Fzs7Zzckg08vPwsvBzckhCisKKworCisKKworCit+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+fn4KKwkJICAgICAg9dLPyyA0LjQ6IPPw7/Pv4iDp8/Dy4ffs5e7p8SDv++ni7+sKKworCisJICoqIO7BwsXSydTFIDpzL8LZzM8v09TBzM8vZyDEzNEg2sHNxc7ZICfC2czPJyDOwSAn09TBzM8nLiAqKgorCisgIDEuIPDF0sXNxdPUydTFIMvV0tPP0iDXzsnaLCDLINPU0s/LxSwg0M/Nxd7Fzs7PyiAtLS0+LgorCisgIDIuIO7BwsXSydTFIDpzL9XXz8TAL9XXz9bVIDxFTlRFUj4gLiDvwtLB1MnUxSDXzsnNwc7JxSDOwSDUzywg3tTPINzUwSDLz83BzsTBCisgICAgINrBzcXOydQg1M/M2MvPINDF0tfPxSDOwcrExc7Oz8Ug18jP1sTFzsnFINcg09TSz8vFLgorCisgIDMuIPTF0MXS2CDOwcLF0snUxSA6cy/V18/EwC/V18/W1S9nICwgz9rOwd7BwN3FxSDQz8TT1MHOz9fL1SDHzM/CwczYzs8g188KKyAgICAg19PFyiDT1NLPy8UuIPzUzyDawc3FzsnUINfTxSDOwcrExc7O2cUg1yDT1NLPy8Ug18jP1sTFzsnRLgorCistLS0+IPEg1dfPxMAgyyDP1NfF0tbFzs7ZzSDTxczFztjRzSwg0SDV18/EwCDTy9fP2tgg18XLz9fF3s7ZyiDT1M/OLCDRINXXz8TAIMsKKyAgICAg2sHC2dTZzSDQz8vPzMXO2NHNLgorCisgIDQuIOTM0SDawc3Fztkg19PFyCDXyM/WxMXOycog0M/TzMXEz9fB1MXM2M7P09TJINPJzdfPzM/XIM3F1sTVIMTX1c3RCisgICAgINPU0s/Lwc3JLAorICAgICDOwcLF0snUxSA6Iywjcy/C2czPL9PUwczPL2cgIMfExSAjLCMgLS0tIM7PzcXSwSDc1MnIINPU0s/LLgorICAgICDuwcLF0snUxSA6JXMvwtnMzy/T1MHMzy9nICAgIMTM0SDawc3Fztkg19PFyCDXyM/WxMXOycog188g19PFzSDGwcrMxS4KKworCit+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+fn4KKwkJCQny5frg7eUg9fLv6+EgNAorICAxLiBDdHJsLWcg0M/LwdrZ18HF1CDXwdvFINDPzM/Wxc7JxSDXIMbByszFIMkgyc7Gz9LNwcPJwCDPIM7FzS4KKyAgICAgU2hpZnQtRyDQxdLFzcXdwcXUIPfB0yDXIMvPzsXDIMbByszBLiDuz83F0iwg2sEgy8/Uz9LZzSDTzMXE1cXUIFNoaWZ0LUcKKyAgICAg0M/a18/M0cXUINDF0sXK1MkgyyDT1NLPy8Ug0yDc1MnNIM7PzcXSz80uCisKKyAgMi4g7sHWwdTJxSAvIMkg2sHUxc0g19fPxCDT1NLPy8kg0M/a18/M0cXUINDSz8na18XT1Mkg0M/J08sg3NTPyiDT1NLPy8kKKyAgICAg9/Dl8uXkINDPINTFy9PU1S4KKyAgICAg7sHWwdTJxSA/IMkg2sHUxc0g19fPxCDT1NLPy8kg0M/a18/M0cXUINDSz8na18XT1Mkg0M/J08sg3NTPyiDT1NLPy8kKKyAgICAg7uH64eQg0M8g1MXL09TVLgorICAgICDwz9PMxSDQz8nTy8EgzsHCxdLJ1MUgbiDEzNEg0MXSxcjPxMEgyyDTzMXE1cDdxc3VINfIz9bExc7JwCDJ08vPzc/KCisgICAgINPU0s/LySDXINTPzSDWxSDOwdDSwdfMxc7JySDJzMkgU2hpZnQtTiDEzNEg0MXSxcjPxMEg1yDQ0s/UydfP0M/Mz9bOz80KKyAgICAgzsHQ0sHXzMXOyckuCisKKyAgMy4g7sHWwdTJxSAlICwgy8/HxMEgy9XS08/SIM7ByM/EydTT0SDOwSAoLCksWyxdLHssIMnMySB9INDP2tfPzNHF1CDOwcrUyQorICAgICDQwdLO1cAg08vPwsvVLgorCisgIDQuIOTM0SDQz8TT1MHOz9fLySBg09TBzM8nINfNxdPUzyDQxdLXz8fPIGDC2czPJyDXINPU0s/LxSwgzsHCxdLJ1MUKKyAgICAgOnMvb2xkL25ldworICAgICDkzNEg0M/E09TBzs/Xy8kgYNPUwczPJyDXzcXT1M8g19PFyCBgwtnMzycg1yDT1NLPy8UsIM7BwsXSydTFCisgICAgIDpzL29sZC9uZXcvZworICAgICDkzNEg2sHNxc7ZINcgyc7UxdLXwczFIM3F1sTVIMTX1c3RINPU0s/Lwc3JLCDOwcLF0snUxQorICAgICA6Iywjcy9vbGQvbmV3L2cKKyAgICAg5MzRINrBzcXO2SDX08XIINfIz9bExc7JyiBgwtnMzycgzsEgYNPUwczPJyDXIMbByszFLCDOwcLF0snUxQorICAgICA6JXMvb2xkL25ldy9nCisgICAgIP7Uz8LZINLFxMHL1M/SIMvB1sTZyiDSwdog2sHQ0sHbydfBzCDQz8TU18XS1sTFzsnFLCDEz8LB19jUxSAnYycKKyAgICAgOiVzL29sZC9uZXcvZ2MKK35+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+fgorCQkgICD10s/LIDUuMTog6+HrIPf58O/s7un0+CD37uX77uDgIOvv7eHu5PUKKworCisgICAgKiog7sHCxdLJ1MUgOiEgySDawdTFzSDXzsXbzsDAIMvPzcHOxNUsIMvP1M/S1cAg08zFxNXF1CDX2dDPzM7J1NguICoqCisKKyAgMS4g7sHCxdLJ1MUg1dbFINrOwcvPzdXAIPfBzSDLz83BzsTVIDogxMzRINXT1MHOz9fLySDL1dLTz9LBINcgy8/Nwc7EztXACisgICAgINPU0s/L1SDSxcTBy9TP0sEuIPzUzyDQz9rXz8zJ1CD3wc0g19fF09TJIMvPzcHOxNUuCisKKyAgMi4g9MXQxdLYIM7BwsXSydTFINPJzdfPzCAhICjXz9PLzMnDwdTFzNjO2cog2s7ByykuIPTF0MXS2CDNz9bOzyDJ09DPzM7J1NgKKyAgICAg187F287AwCDLz83BzsTVLCDJ09DPzNja1dEgy8/Nwc7EztXAIM/Cz8zP3svVLgorCisgIDMuIOTM0SDQ0snNxdLBIM7BwsXSydTFIGxzINDP08zFICEgySDOwdbNydTFIDxFTlRFUj4uIPzUwSDLz83BzsTBINfZ18XExdQKKyAgICAg09DJ08/LIMbByszP1yDXINTFy9Xdxc0gy8HUwczPx8UsINTP3s7PINTBy9bFLCDLwcsgxdPMySDC2SD32SDX18XMySDc1NUKKyAgICAgy8/Nwc7E1SDXINDSycfMwdvFzsnJIM/Cz8zP3svJLiDpzMkg0M/Q0s/C1crUxSA6IWRpciAsIMXTzMkg0NLFxNnE1d3B0QorICAgICDLz83BzsTBIM7FINPSwcLP1MHMwS4KKworLS0tPiD6wc3F3sHOycU6IPTBy8nNINPQz9PPws/NIM3P1s7PINfZ0M/MzsnU2CDMwMLVwCDXzsXbzsDAIMvPzcHOxNUuCisKKy0tLT4g+sHNxd7BzsnFOiD308Ugy8/Nwc7E2SwgzsHeyc7BwN3JxdPRINMgOiAsIMTPzNbO2SDawdfF0tvB1NjT0SDOwdbB1MnFzQorICAgICA8RU5URVI+LgorCisKK35+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+fgorCQkJIPXSz8sgNS4yOiDr4esg+uHw6fPh9Pgg5uHq7AorCisKKyoqIOTM0SDTz8jSwc7FzsnRIMnazcXOxc7Jyiwg0NLPydrXxcTFzs7ZyCDXIMbByszFLCDOwcLF0snUxSA6dyDp7fFf5uHq7OEuICoqCisKKyAgMS4g7sHCxdLJ1MUgOiFkaXIgyczJIDohbHMgxMzRINDPzNXexc7J0SDT0MnTy8EgxsHKzM/XINcg1MXL1d3FzSDLwdTBzM/HxS4KKyAgICAg68HLIPfBzSDV1sUgydrXxdPUzs8sIPfZIMTPzNbO2SDOwdbB1NggPEVOVEVSPiDQz9PMxSDX18/EwSDc1MnIIMvPzcHOxC4KKworICAyLiDw0snE1c3BytTFIM7B2tfBzsnFIMTM0SDGwcrMwSwgy8/Uz9LPxSDF3cUgzsUg09XdxdPU19XF1CwgzsHQ0snNxdIgVEVTVC4KKworICAzLiD0xdDF0tggzsHCxdLJ1MUgOncgVEVTVCAox8TFIFRFU1QgLS0tINzUzyDJzdEgxsHKzMEsINDSycTVzcHOzs/FIPfBzckuKQorCisgIDQuIPzUwSDLz83BzsTBINPPyNLBzsnUINfF09ggxsHKzCAo9d7Fws7JyyDQzyBWaW0pINDPxCDJzcXOxc0gVEVTVC4g/tTPwtkKKyAgICAg1cTP09TP18XSydTY09Eg1yDc1M/NLCDTzs/XwSDOwcLF0snUxSA6IWRpciDJINDSz9PNz9TSydTFIMvB1MHMz8cuCisKKy0tLT4g+sHNxdTY1MUsIN7UzyDF08zJIPfZINfZysTF1MUgydogVmltIMkg2sHUxc0g2sHQ1dPUydTFIMXHzyDTzs/XwSDTCisgICAgIMbByszPzSBURVNULCDc1M/UIMbByswgwtXExdQg1M/ezs/KIMvP0MnFyiDV3sXCzsnLwSDXINTP1CDNz83FztQsIMvPx8TBCisgICAgIPfZIMXHzyDTz8jSwc7JzMkuCisKKyAgNS4g9MXQxdLYINXEwczJ1MUg3NTP1CDGwcrMLCDOwcLSwdcgOiFkZWwgVEVTVAorCisKK35+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+fgorCQkgICAgICAg9dLPyyA1LjM6IPf54u/y7/7u7+Ug8+/o8uHu5e7p5QorCisKKwkgKiog5MzRINPPyNLBzsXOydEg3sHT1MkgxsHKzMEsIM7BwsXSydTFIDojLCMgdyDp7fFf5uHq7OEgKioKKworICAxLiDl3cUg0sHaIM7BwsXSydTFIDohZGlyIMnMySA6IWxzIMTM0SDQz8zV3sXOydEg09DJ08vBIMbByszP1yDXINTFy9Xdxc0KKyAgICAgy8HUwczPx8UgySDX2cLF0snUxSDQz8TIz8TR3cXFIMnN0SwgzsHQ0snNxdIgVEVTVC4KKworICAyLiDwxdLFzcXT1MnUxSDL1dLTz9IgyyDOwd7BzNUg3NTPyiDT1NLBzsnD2SDJIM7B1s3J1MUgQ3RybC1nIMTM0SDOwcjP1sTFzsnRCisgICAgIM7PzcXSwSDT1NLPy8l0by4g+uHw7+3u6fTlIPz07/Qg7u/t5fIhCisKKyAgMy4g9MXQxdLYINDF0sXNxdPUydTF09gg1yDLz87FwyDT1NLBzsnD2SDJINfOz9fYIM7BwsXSydTFIEN0cmwtZy4g+uHw7+3u6fTlCisgICAgIOkg/PTv9CDu7+3l8iD07/blIQorCisgIDQuIOTM0SDTz8jSwc7FzsnRIPTv7Pjr7yD+4fP06SDGwcrMwSDOwcLF0snUxSA6IywjIHcgVEVTVCAsIMfExSAjLCMgLS0tINzUzworICAgICDOz83F0sEsIMvP1M/S2cUg99kg2sHQz83OyczJICjOwd7BzM8sIMvPzsXDKSwgwSBURVNUIC0tLSDJzdEg18HbxcfPIMbByszBLgorCisgIDUuIOvByyDJINDSxdbExSwg1cLFxMnUxdPYINcgzsHMyd7JySDc1M/HzyDGwcrMwSDLz83BzsTPyiA6IWRpciAsIM7PIO7lCisgICAgIPXk4ezx6vTlIMXHzy4KKworCisKK35+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+fgorCQkgICAg9dLPyyA1LjQ6IP705e7p5SDpIO/i/+Xk6e7l7unlIObh6uzv9worCisJICAqKiDkzNEg19PUwdfLySDTz8TF0tbJzc/HzyDGwcrMwSwgzsHCxdLJ1MUgIDpyIEZJTEVOQU1FICoqCisKKyAgMS4g7sHCxdLJ1MUgOiFkaXIgxMzRINTPx88sIN7Uz8LZINXCxcTJ1NjT0SDXINTPzSwg3tTPIMbByswgVEVTVCDX08Ugxd3FCisgICAgINPV3cXT1NfVxdQuCisKKyAgMi4g9dPUwc7P18nUxSDL1dLTz9Ig1yDXxdLIzsXKIN7B09TJINzUz8og09TSwc7Jw9kuCisKK/rBzcXewc7JxTog8M/TzMUg19nQz8zOxc7J0SDbwcfBIDMg99kg1dfJxMnUxSD10s/LIDUuMy4J8M/TzMUg3NTPx88KKwkgICDQxdLFzcXdwcrUxdPYIPfu6fosINPOz9fBIMsg3NTPzdUg1dLPy9UuCisKKyAgMy4g9MXQxdLYINDSz97J1MHK1MUg98HbIMbByswgVEVTVCwgydPQz8zY2tXRIMvPzcHOxNUgOnIgVEVTVCAsIMfExQorICAgICBURVNUIC0tLSDc1M8gyc3RIMbByszBLgorCiv6wc3F3sHOycU6IPDSz97J1MHOztnKIPfBzckgxsHKzCDC1cTF1CDX09TB18zFziDXINTPzSDNxdPUxSwgx8TFIM7ByM/EydTT0QorCSAgIMvV0tPP0i4KKworICA0LiD+1M/C2SDVwsXEydTY09Eg1yDUz80sIN7UzyDGwcrMINDSz97J1MHOLCDQxdLFzcXT1MnUxdPYIM7Fzc7Px88gzsHawcQg0M8KKyAgICAg1MXL09TVIMkgG1tBG1tC2sHNxdTY1MUsIN7UzyDUxdDF0tgg09XdxdPU19XA1CDE18Ugy8/Qyckg9dLPy8EgNS4zLCDJ08jPxM7B0QorICAgICDJINDPzNXexc7OwdEgydogxsHKzMEuCisKK35+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+fgorCQkJCfLl+uDt5SD18u/r4SA1CisKKworICAxLiAgOiHLz83BzsTBICDJ09DPzM7RxdQg187F287AwCDLz83BzsTVLgorCisgICAgICDuxcvP1M/S2cUg0M/MxdrO2cUg0NLJzcXS2ToKKwkgIDohZGlyIC0tLSDX2dfPxMnUINPQydPPyyDGwcrMz9cg1yDLwdTBzM/HxS4KKwkgIDohZGVsIEZJTEVOQU1FIC0tLSDVxMHM0cXUIMbByswgRklMRU5BTUUuCisKKyAgMi4gIDp3IEZJTEVOQU1FINrB0MnT2dfBxdQg1MXL1d3JyiDSxcTBy9TJ0tXFzdnKIMbByswgzsEgxMnTyworICAgICAg0M/EIMnNxc7FzSBGSUxFTkFNRS4KKworICAzLiAgOiMsI3cgRklMRU5BTUUg08/I0sHO0cXUINPU0s/LySDP1CAjIMTPICMg1yDGwcrMIEZJTEVOQU1FLgorCisgIDQuICA6ciBGSUxFTkFNRSDT3snU2dfBxdQg0yDEydPLwSDGwcrMIEZJTEVOQU1FIMkg0M/Nxd3BxdQgxcfPINcg1MXL1d3JygorICAgICAgxsHKzCDTzMXEz80g2sEg0M/aycPJxcogy9XS08/SwS4KKworCisKKworCisKKworfn5+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+CisJCQkgIPXSz8sgNi4xOiDr7+3h7uThIPPv+uTh7unxCisKKworICoqIO7BwsXSydTFIG8g3tTPwtkg08/axMHU2CDQ1dPU1cAg09TSz8vVINDPxCDL1dLTz9LPzSDJINDF0sXK1Mkg1yDSxdbJzQorCQkJICAg19PUwdfLySAoSW5zZXJ0IG1vZGUpICoqCisKKyAgMS4g8MXSxc3F09TJ1MUgy9XS08/SINfOydosIMsg09TSz8vFLCDQz83F3sXOzs/KIC0tLT4uCisKKyAgMi4g7sHCxdLJ1MUgbyAo1yDOydbOxc0g0sXHydPU0sUpIMTM0SDUz8fPLCDe1M/C2SDTz9rEwdTYINDV09TVwCDT1NLPy9UKKyAgICAg7un25SDL1dLTz9LBIMkg0MXSxcrUySDXINLF1snNINfT1MHXy8kgKEluc2VydCBtb2RlKS4KKworICAzLiD0xdDF0tgg08vP0MnS1crUxSDQz83F3sXOztXAIC0tLT4g09TSz8vVIMkgzsHWzcnUxSA8RVNDPiDEzNEg19nIz8TBIMnaCisgICAgINLF1snNwSDX09TB18vJLgorCistLS0+IPDP08zFIM7B1sHUydEgbyDL1dLTz9Ig0MXSxcrExdQgzsEgzs/X1cAg0NXT1NXAINPU0s/L1SDXINLF1snNxSDX09TB18vJLgorCisgIDQuIOTM0SDTz9rEwc7J0SDT1NLPy8kg9/n75SDL1dLTz9LBLCDQ0s/T1M8gzsHCxdLJ1MUg2sHHzMHXztXAIE8sINfNxdPUzworICAgICDT1NLP3s7PyiBvLiDwz9DSz8LVytTFINDSz8TFzMHU2CDc1M8g0yDOydbF08zFxNXA3cXKINPU0s/Lz8ouCivzz9rEwcrUxSDOz9fVwCDT1NLPy9UgzsHEINzUz8osIM7B1sHXIFNoaWZ0LU8sINDPzcXT1MnXIMvV0tPP0iDOwSDc1NUg09TSz8vVLgorCisKKworCit+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+fn4KKwkJCSD10s/LIDYuMjog6+/t4e7k4SDk7+Lh9+zl7unxCisKKwkgICAgKiog7sHCxdLJ1MUgYSAsIN7Uz8LZINfT1MHXydTYINTFy9PUIPDv8+zlIMvV0tPP0sEuICoqCisKKyAgMS4g8MXSxc3F09TJ1MUgy9XS08/SINfOydosINcgy8/OxcMg0MXS18/KINPU0s/LySwg0M/Nxd7Fzs7PyiAtLS0+ICwKKyAgICAgzsHC0sHXICQg1yDPwtnezs/NINLF1snNxSAoTm9ybWFsIG1vZGUpLgorCisgIDIuIO7BwsXSydTFIGEgKNcgzsnWzsXNINLFx8nT1NLFKSDEzNEgxM/CwdfMxc7J0SDUxcvT1MEg8O/z7OUg08nN18/MwSwKKyAgICAgzsHIz8TR3cXHz9PRINDPxCDL1dLTz9LPzS4gKPrBx8zB187B0SBBINDP2tfPzNHF1CDEz8LB18nU2CDXIMvPzsXDCisgICAgINPU0s/LyS4pCisKK/rBzcXewc7JxTog/NTPINDP2tfPzNHF1CDJ2sLF1sHU2CDOwdbB1MnRIGkgLCDQz9PMxcTOxcfPINPJzdfPzMEsINTFy9PUwSDEzNEKKwkgICDX09TB18vJLCA8RVNDPiwgy9XS08/SLdfQ0sHXzywgySwgzsHLz87FwywgeCAsINDSz9PUzyDEzNEg1M/HzywKKwkgICDe1M/C2SDEz8LB18nU2CDUxdPUINcgy8/OxcMg09TSz8vJIQorCisgIDMuIPTF0MXS2CDawdfF0tvJ1MUg0MXS19XAINPU0s/L1S4g+sHNxdTY1MUg1MHL1sUsIN7UzyDEz8LB18zFzsnFINzUzyDXCisgICAgINTP3s7P09TJINTPINbFINPBzc/FLCDe1M8gySDSxdbJzSDX09TB18vJLCDawSDJ08vMwN7FzsnFzSDQz9rJw8nJLCDXCisgICAgIMvP1M/S1cAgwtXExdQg19PUwdfMxc4g1MXL09QuCisKKy0tLT4g/NTBINPU0s/ey8Eg0M/a18/MydQg98HNINDP0NLBy9TJy8/XwdTY09EKKy0tLT4g/NTBINPU0s/ey8Eg0M/a18/MydQg98HNINDP0NLBy9TJy8/XwdTY09Eg1yDEz8LB18zFzsnJINTFy9PUwSDXIMvPzsXDCisgICAgINPU0s/LyS4KK35+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+fgorCQkgICAgICAg9dLPyyA2LjM6IOX95SDv5OnuIPPw7/Pv4iD64e3l7vkKKworCisgICAgICAgKiog7sHCxdLJ1MUg2sHHzMHXztXAIFIgxMzRINrBzcXO2SDCz8zFxSwg3sXNIM/Ezs/HzyDTyc3Xz8zBLiAqKgorCisgIDEuIPDF0sXNxdPUydTFIMvV0tPP0iDXzsnaLCDLINPU0s/LxSwg0M/Nxd7Fzs7PyiAtLS0+LgorCisgIDIuIPLB09DPzM/WydTFIMvV0tPP0iDXIM7B3sHMxSDQxdLXz8fPINPMz9fBLCDP1MzJ3sHA3cXHz9PRIM/UCisgICAgINPPz9TXxdTT1NfVwN3Fx88g1yDTzMXE1cDdxcog09TSz8vFLCDQz83F3sXOzs/KIC0tLT4gKNPMz9fPICfQz9PMxcTOxconKS4KKworICAzLiD0xdDF0tggzsHCxdLJ1MUgUiDJINrBzcXOydTFIM/T1MHUz8sg1MXL09TBINcg0MXS18/KINPU0s/LxSwgzsHC0sHXCisgICAgINDP18XSyCDT1MHSz8fPINTFy9PUwSDUwcssIN7Uz8LZIM/CxSDT1NLPy8kg09TBzMkgz8TJzsHLz9fZzckuCisKKy0tLT4g8MXS19XAINPU0s/L1SDNz9bOzyDT0sHXztHU2CDTINDP08zFxM7FyiwgydPQz8zY2tXRIMvMwdfJ28kuCistLS0+IPDF0tfVwCDT1NLPy9Ugzc/Wzs8g09LB187R1Ngg0yDX1M/Sz8osIMnT0M/M2NrV0SBSIMkgzsHC0sHXIM7P19nKINTFy9PULgorCisgIDQuIO/C0sHUydTFINfOyc3BzsnFLCDe1M8g0NLJIM7B1sHUyckgPEVTQz4gxMzRINrB18XS28XOydEsIMzAws/KCisgICAgIM7FIMnazcXOxc7O2cog1MXL09Qg08/I0sHOydTT0S4KKworCisKKworfn5+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+CisJCQn10s/LIDYuNDog9fP04e7v9+vhIPDh8uHt5fTy7/cKKworCisqKiD109TBzs/Xyc0g0MHSwc3F1NLZINTByywg3tTPwtkgycfOz9LJ0s/XwdTYINLFx8nT1NIg0NLJINDPydPLxSDJzMkg2sHNxc7FICoqCisKKworICAxLiDwz8ndydTFINPMz9fPICfJx87P0snSz9fB1NgnLCDOwcLSwdc6CisgICAgIC/Jx87P0snSz9fB1NgKKyAgICAg8M/X1M/SydTFINDPydPLIM7F08vPzNjLzyDSwdosIM7B1snNwdEgy8zB18nb1SBuCisKKyAgMi4g98vMwN7J1MUg0MHSwc3F1NIgJ2ljJyAo6cfOz9LJ0s/XwdTYINLFx8nT1NIpLCDOwcLSwdc6CisgICAgIDpzZXQgaWMKKworICAzLiD0xdDF0tgg087P18Eg08TFzMHK1MUg0M/J08sg08zP18EgJ8nHzs/SydLP18HU2CcsIM7B1sHXOiBuCisgICAgIPDP19TP0snUxSDQz8nTyyDOxdPLz8zYy88g0sHaLCDOwdbJzcHRIMvMwdfJ29UgbgorCisgIDQuIPfLzMDeydTFINDB0sHNxdTS2SAnaGxzZWFyY2gnIMkgJ2luY3NlYXJjaCc6CisgICAgIDpzZXQgaGxzIGlzCisKKyAgNS4g9MXQxdLYIM/Q0dTYINfXxcTJ1MUgy8/Nwc7E1SDQz8nTy8EgySDQz9PNz9TSydTFLCDe1M8g0M/M1d7J1NPROgorICAgICAvycfOz9LJ0s/XwdTYCisKKworCit+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+fn4KKwkJCQny5frg7eUg9fLv6+EgNgorCisKKyAgMS4g7sHWwdTJxSBvINPP2sTBxdQg09TSz8vVIO7p9uUgy9XS08/SwSDJINDF0sXNxd3BxdQgy9XS08/SINcgzsXFINcg0sXWyc3FCisgICAgINfT1MHXy8kuCisgICAgIO7B1sHUycUg2sHHzMHXzs/KIE8g08/axMHF1CDT1NLPy9Ug9/n75SDT1NLPy8ksINcgy8/Uz9LPyiDOwcjPxMnU09EKKyAgICAgy9XS08/SLgorCisgIDIuIO7BwsXSydTFIGEgxMzRINfT1MHXy8kg1MXL09TBIPDv8+zlINPJzdfPzMEsIM7BIMvP1M/Sz80gzsHIz8TJ1NPRIMvV0tPP0i4KKyAgICAg7sHWwdTJxSDawcfMwdfOz8ogQSDB19TPzcHUyd7F08vJINDF0sXNxd3BxdQg98HTIMTM0SDEz8LB18zFzsnRINTFy9PUwQorICAgICDXIMvPzsXDINPU0s/LyS4KKworICAzLiDuwdbB1MnFINrBx8zB187PyiBSINDF0sXXz8TJ1CD3wdMg1yDSxdbJzSDawc3FztkgxM8g1MXIINDP0iwg0M/LwSDOxQorICAgICDC1cTF1CDOwdbB1MEgy8zB18nbwSA8RVNDPiDEzNEg2sHXxdLbxc7J0S4KKworICA0LiDuwcLSwdcgIjpzZXQgeHh4IiDX2SDTzc/WxdTFINfLzMDeydTYINDB0sHNxdTSICJ4eHgiCisKKworCisKKworCisKK35+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+fgorCQkg9dLPyyA3OiDr7+3h7uT5IPDv7PX+5e7p8SD38/Ty7+Xu7u/qIPPw8uH36+kKKworCSAgICAgICAqKiDp09DPzNja1crUxSDX09TSz8XOztXAINPQ0sHXz97O1cAg08nT1MXN1SAqKgorCisgIFZpbSDPwszBxMHF1CDNz93Oz8og19PU0s/Fzs7PyiDT0NLB18/ezs/KINPJ09TFzc/KLiDkzNEgzsHewczBINDP0NLPwtXK1MUKKyAgz8TJziDJ2iDU0sXIINfB0snBztTP1zoKKwktIM7B1s3J1MUgy8zB18nb1SA8SEVMUD4gKMXTzMkg1MHLz9fB0SDJzcXF1NPRIM7BIMvMwdfJwdTV0sUpCisJLSDOwdbNydTFIMvMwdfJ29UgPEYxPiAoxdPMySDUwcvP18HRIMnNxcXU09EgzsEgy8zB18nB1NXSxSkKKwktIM7BwsXSydTFICAgOmhlbHAgPEVOVEVSPgorCisgIO7BwsXSydTFICAgOnEgPEVOVEVSPiAgIN7Uz8LZINrBy9LZ1Nggz8vOzyDT0NLB18vJLgorCisgIPfZIM3P1sXUxSDOwcrUySDT0NLB18vVIMTM0SDMwMLPx88g0M/O0dTJ0SDJzMkgy8/Nwc7E2Swg0NLP09TPINrBxMHXCisgINPPz9TXxdTT1NfVwN3JyiDB0sfVzcXO1CDLz83BzsTFICI6aGVscCIuIPDP0NLPwtXK1MUg08zFxNXA3cXFICjOxSDawcLVxNjUxQorICDOwdbB1NggPEVOVEVSPik6CisKKyAgOmhlbHAgdworICA6aGVscCBjXzxUCisgIDpoZWxwIGluc2VydC1pbmRleAorCisKKworCisKK35+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+fgorCQkgICAgIPXSz8sgODog8+/65OHu6eUg8/Th8vTv9+/n7yDz6/Lp8PThCisKKwkJCSoqIPfLzMDeyc0g18/azc/Wzs/T1MkgVmltICoqCisKKyAgVmltIMnNxcXUIM7Bzc7Px88gws/M2NvFINfP2s3P1s7P09TFyiwg3sXNIFZpLCDPxM7By88gws/M2NvJztPU18HPIMnaIM7JyAorICDX2cvMwN7Fztkg0M8g1c3PzN7BzsnALiDkzNEg1M/Hzywg3tTPwtkgzsHewdTYIMnT0M/M2NrP18HU2CDOz9fZxQorICDXz9rNz9bOz9PUySD3wc0g08zFxNXF1CDTz9rEwdTYIMbByswgInZpbXJjIi4KKworICAxLiDv1NLFxMHL1MnS1crUxSDGwcrMICJ2aW1yYyIsIMXHzyDSwdPQz8zP1sXOycUg2sHXydPJ1CDP1CDJ09DPzNja1cXNz8oKKyAgICAg08nT1MXN2ToKKworICAgICAgIDplZGl0IH4vLnZpbXJjCQkJxMzRIFVuaXgKKyAgICAgICA6ZWRpdCAkVklNL192aW1yYwkJxMzRIE1TLVdpbmRvd3MKKworICAyLiD0xdDF0tgg0NLP3snUwcrUxSDQ0snNxdIgxsHKzMEgInZpbXJjIjoKKworICAgICAgIDpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4g+sHQydvJ1MUgxsHKzDoKKworICAgICAgIDp3cml0ZQorCisgIPTF0MXS2CDQ0skg08zFxNXA3cXNINrB0NXTy8UgVmltIMLVxMXUINfLzMDexc7BINDPxNPXxdTLwSDTyc7UwcvTydPBLiD308UKKyAgzsHT1NLPysvJLCDQ0sXE0M/eydTBxc3ZxSD3wc3JLCDNz8fV1CDC2dTYIMTPwsHXzMXO2SDXIMbByswgInZpbXJjIi4KKworfn5+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+CisgIO7BINzUz80g2sHXxdLbwcXU09Eg9d7Fws7JyyBWaW0uIO/OIMLZzCDQ0sXEzsHazsHexc4gxMzRINTPx88sIN7Uz8LZIMTB1NgKKyAgz8LdxcUg0NLFxNPUwdfMxc7JxSDPINLFxMHL1M/SxSBWaW0sIMTP09TB1M/ezs/FIMTM0SDUz8fPLCDe1M/C2SDTIMzFx8vP09TYwAorICDJ09DPzNjaz9fB1NggxcfPLiD13sXCzsnLIMTBzMXLIM/UINDPzM7P1NksINDP08vPzNjL1SBWaW0gyc3FxdQgz97Fztggzc7Px88KKyAgy8/Nwc7ELiDw0s/eydTBytTFINTF0MXS2CDS1cvP18/E09TXzyDQz8zY2s/XwdTFzNE6ICI6aGVscCB1c2VyLW1hbnVhbCIuCisKKyAg5MzRIMTBzNjOxcrbxcfPIN7Uxc7J0SDSxcvPzcXOxNXF1NPRIMvOycfBOgorCVZpbSAtIFZpIEltcHJvdmVkIC0g4dfUz9I6IFN0ZXZlIE91YWxsaW5lCisJ6drEwdTFzNg6IE5ldyBSaWRlcnMKKyAg/NTBIMvOycfBINDPzM7P09TYwCDQz9PX0d3FzsEgVmltLiDv08/Cxc7OzyDQz8zF2s7BIM7P18ney8HNLiDzz8TF0tbJ1AorICDNzs/WxdPU188g0NLJzcXSz9cgySDJzMzA09TSwcPJyi4KKyAg99rHzNHOydTFIM7BIFNlZSBodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy9jbGljazUuaHRtbAorCisgIPPMxcTVwN3B0SDLzsnHwSDCz8zFxSDQz97Uxc7Oz8fPINfP2tLB09TBIMkg0M/T19Hdxc7BIMLPzNjbxSBWaSwg3sXNIFZpbSwKKyAgz8TOwcvPINTBy9bFINLFy8/Nxc7E1cXU09E6CisJTGVhcm5pbmcgdGhlIFZpIEVkaXRvciAtIOHX1M/SOiBMaW5kYSBMYW1iCisJ6drEwdTFzNg6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcyBJbmMuCisgIPzUzyDIz9LP28HRIMvOycfBIMTM0SDUz8fPLCDe1M/C2SDV2s7B1Ngg19PFLCDe1M8g1M/M2MvPIM3P1s7PINDSz8TFzNnXwdTYINMKKyAgVmkuIPvF09TPxSDJ2sTBzsnFINTBy9bFINfLzMDewcXUIMnOxs/SzcHDycAgzyBWaW0uCisKKyAg/NTP1CDV3sXCzsnLIMLZzCDOwdDJ08HOIE1pY2hhZWwgQy4gUGllcmNlIMkgUm9iZXJ0IEsuIFdhcmUsIENvbG9yYWRvIFNjaG9vbAorICBvZiBNaW5lcyDTIMnT0M/M2NrP18HOycXNIMnExcosINDSxcTMz9bFzs7ZyCBDaGFybGVzIFNtaXRoLCBDb2xvcmFkbyBTdGF0ZQorICBVbml2ZXJzaXR5LiBFLW1haWw6IGJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdS4KKworICDkz9LBws/Uwc7PIMTM0SBWaW0gQnJhbSBNb29sZW5hYXIuCisKKyAg8MXSxdfPxDog4c7E0sXKIOvJ08XMxdcgPGFfa2lzc2VsQGV1ZG9yYW1haWwuY29tPiwgMjAwMi4KKyAgVHJhbnNsYXRvcjogQW5kcmV5IEtpc2VsZXYgPGFfa2lzc2VsQGV1ZG9yYW1haWwuY29tPiwgMjAwMi4KK35+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+fgpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci90dXRvci5ydS5jcDEyNTEgYi9ydW50aW1lL3R1dG9yL3R1dG9yLnJ1LmNwMTI1MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjRjYTUyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci90dXRvci5ydS5jcDEyNTEKQEAgLTAsMCArMSw4MzQgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAgxCDuIOEg8CDuICAg7yDuIOYg4CDrIO4g4iDgIPIg/CAgIOIgICDzIPcg5SDhIO0g6CDqICAgVklNICAtICDC5fDx6P8gMS41ID0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgVmltIC0tLSD98u4g7vfl7fwg7O757fvpIPDl5ODq8u7wLCDo7OX++ejpIOzt7ubl8fLi7iDq7uzg7eQsIPHr6Pjq7uwKKyAgICAg7O3u4+4g5Ov/IPLu4+4sIPfy7uH7IOj1IOLx5SDs7ubt7iDh++vuIO7v6PHg8vwg4iDy4Oru7CDz9+Xh7ejq5Swg6uDqCisgICAgIP3y7vIuIN3y7vIg8/fl4e3o6iDv8Ojn4uDtIO7h+v/x7ejy/CDk7vHy4PLu9+3u5SD36PHr7iDq7uzg7eQg5Ov/IPLu4+4sCisgICAgIPfy7uH7IML7IOzu4+voIPEg6+Xj6u7x8vz+IOjx7+7r/Ofu4uDy/CBWaW0g4iDq4Pfl8fLi5SDw5eTg6vLu8OAg7uH55ePuCisgICAgIO3g5+3g9+Xt6P8uCisKKyAgICAgwuDsIO/u8vDl4fPl8vH/IO/w6OHr6Ofo8uXr/O3uIDI1LTMwIOzo7fPyIO3gIO7x4u7l7ejlIOTg7e3u4+4g8/fl4e3o6uAg4gorICAgICDn4OLo8ejs7vHy6CDu8iDy7uPuLCDx6u7r/OruIOLw5ezl7eggwvsg7+7y8ODy6PLlIO3gIP3q8e/l8Ojs5e3y+y4KKworICAgICDK7uzg7eT7IOIg8/Du6uD1IOHz5PPyIOzu5Oj06Pbo8O7i4PL8IPLl6vHyLiDR7ufk4Ony5SDq7u/o/iD98u7j7iD04Onr4CwKKyAgICAg9/Lu4fsg7+7v8ODq8ujq7uLg8vzx/yDt4CDt5ekgKOXx6+ggwvsg5+Dv8/Hy6OvoICJ2aW10dXRvciIsIPLuIP3y7iDz5uUKKyAgICAg6u7v6P8pLgorCisgICAgIMLg5u3uIO/u7O3o8vwsIPfy7iD98u7yIPP35eHt6Oog7/Dl5O3g5+3g9+XtIOTr/yDu4fP35e3o/yDiIO/w7vbl8fHlCisgICAgIOjx7+7r/Ofu4uDt6P8uIN3y7iDu5+3g9+Dl8iwg9/LuIML7IOTu6+bt+yDn4O/z8erg8vwg6u7s4O3k+yDk6/8g8u7j7iwKKyAgICAg9/Lu4fsg6uDqIPHr5eTz5fIg6PUg6Ofz9+jy/C4gxfHr6CDC+yDv8O7x8u4g7/Du9+jy4OXy5SDy5erx8iwg8u4KKyAgICAg5+Dh8+Tl8uUg6u7s4O3k+yEKKworICAgICDS5e/l8Pwg8+Hl5Ojy5fH8IOIg8u7sLCD38u4g6uvg4uj44CBDYXBzTG9jayDt5SDi6uv+9+Xt4CDoIO3g5uzo8uUKKyAgICAg6uvg4uj48yAgIGogICDt5fHq7uv86u4g8ODnLCDy4OosIPfy7uH7INPw7uogMS4xIO/u6+3u8fL8/iDv7uzl8fLo6/H/IO3gCisgICAgIP3q8ODt5S4KK35+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+fgorCQkJ0/Du6iAxLjE6ICDPxdDFzMXZxc3IxSDK09DRztDACisKKyoqIMTr/yDv5fDl7OX55e3o/yDq8/Dx7vDgIO3g5uzo8uUg6uvg4uj46CBoLGosayxsIPLg6iwg6uDqIO/u6uDn4O3uIO3o5uUuICoqCisJICAgICBeCisJICAgICBrCQnR7uLl8vs6Ccrr4OLo+OAgaCDt4PXu5Ojy8f8g8evl4uAg6CDv5fDl7OX54OXyIOLr5eLuLgorICAgICAgIDwgaAkgbCA+CQnK6+Di6PjgIGwg7eD17uTo8vH/IPHv8ODi4CDoIO/l8OXs5fng5fIg4u/w4OLuLgorCSAgICAgagkJCcrr4OLo+OAgaiDv7vXu5uAg7eAg8fLw5evq8yBg4u3o5ycuCisJICAgICB2CisgIDEuIM/u5OLo4+Dp8uUg6vPw8e7wIO/uIP3q8ODt8ywg7+7q4CDt5SDv7vfz4vHy4vPl8uUg8eXh/yDz4uXw5e3t7i4KKworICAyLiDN4OTg4ujy5SDq6+Di6PjzIGDi7ejnJyAoaikg7+7q4CDu7eAg7eUg7eD37eXyIO/u4vLu8P/y/PH/LgorLS0tPiDS5e/l8Pwgwvsg5+3g5fLlLCDq4Oog7+Xw5eny6CDqIPHr5eTz/vnl7PMg8/Du6vMuCisKKyAgMy4gyPHv7uv85/P/IOrr4OLo+PMgYOLt6OcnIO/l8OXp5Ojy5SDqINPw7urzIDEuMi4KKworx+Ds5ffg7ejlOiDF8evoIOL7IO/u6uAg7eUg8+Ll8OXt+yDiIPLu7Cwg9/LuIO3g4ejw4OXy5Swg7eDm7Ojy5SA8RVNDPiDk6/8KKwkgICDv5fDl9e7k4CDiIO7h+/ft++kg8OXm6OwgKE5vcm1hbCBtb2RlKS4gz+7x6+Ug/fLu4+4g7+Xw5e3g4eXw6PLlCisJICAg8vDl4fPl7PP+IOru7ODt5PMuCisKK8fg7OX34O3o5TogzuH79+375SDq6+Di6PjoIPPv8ODi6+Xt6P8g6vPw8e7w7uwgKPHy8OXr6ugpIPLg6ublIOTu6+bt+worCSAgIPDg4e7y4PL8LiDO5O3g6u4sIOrr4OLo+OggaGprbCDv7ufi7uv/8iDC4Owg7+Xw5ezl+eDy/PH/CisJICAg5+3g9+jy5ev87e4g4fvx8vDl5Swg6uDqIPLu6/zq7iDC+yDt4PP36PLl8fwg6OzoIO/u6/zn7uLg8vzx/y4KK35+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+fgorCQkgINPw7uogMS4yOiDHwM/T0cogyCDHwMLF0NjFzcjFINDAwc7S2yDRIFZJTQorCishISDCzcjMwM3IxSEgz/Dl5uTlLCD35ewg4vvv7uvt//L8IOv+4e7pIOjnIO7v6PHg7e379SDt6OblIPjg4+7iLCDv8O738ujy5QorCQkJICAgICAgIPPw7uog9uXr6Oru7CAhIQorCisgIDEuIM3g5uzo8uUg6uvg4uj48yA8RVNDPiAo5Ov/IPLu4+4sIPfy7uH7IPPk7vHy7uLl8Ojy/PH/LCD38u4gwvsg4iDu4fv37e7sCisgICAgIPDl5ujs5SAoTm9ybWFsIG1vZGUpKS4KKworICAyLiDN4OHl8Ojy5ToJCQk6cSEgPEVOVEVSPi4KKworLS0tPiDd8u4g7+7n4u7r6PIgwuDsIOL76fLoIOjnIPDl5ODq8u7w4CDBxccg0c7V0MDNxc3I3yDr/uH79SDx5OXr4O3t+/UKKyAgICAg6Ofs5e3l7ejpLiDF8evoIML7IPXu8ujy5SDx7vXw4O3o8vwg6Ofs5e3l7ej/IOgg4vvp8ug6CisJCQkJOndxICA8RU5URVI+CisKKyAgMy4gyu7j5OAgwvsg8+Lo5Ojy5SDv8Ojj6+D45e3o5SDq7uzg7eTt7ukg7uHu6+736ugsIO3g4eXw6PLlIOru7ODt5PMsCisgICAgIOru8u7w4P8g7/Do4uXr4CDC4PEg4iD98u7yIPP35eHt6OouIN3y7iDs7ubl8iDh+/L8CisJCQkJdmltdHV0b3IgcnUgPEVOVEVSPgorICAgICDO4fv37e4g7O7m7e4g6PHv7uv85+7i4PL8Ogl2aW0gdHV0b3IucnUgPEVOVEVSPgorCistLS0+ICd2aW0nIO/u5+Lu6//l8iDn4O/z8fLo8vwg8OXk4Ory7vAgdmltLCAndHV0b3IucnUnIC0tLSD98u4g9ODp6ywg6u7y7vD76QorICAgICDC+yDh8+Tl8uUg8OXk4Ory6PDu4uDy/C4KKworICA0LiDF8evoIML7IPPi5fDl7fsg4iDy7uwsIPfy7iDn4O/u7O3o6+gg/fLoIPjg4+gsIOL77+7r7ejy5SD44OPoIO7yIDEg5O4gMworICAgICD38u7h+yDi++ny6CDx7e7i4CDn4O/z8fLo8vwg8OXk4Ory7vAuIMfg8uXsIO/l8OXs5fHy6PLlIOrz8PHu8CDi7ejnIOoKKyAgICAg0/Du6vMgMS4zLgorfn5+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+CisJCSAg0/Du6iAxLjM6INDFxMDK0sjQzsLAzcjFINLFytHSwCAtINPEwMvFzcjFCisKKworKiogzeD17uT/8fwg4iDu4fv37e7sIPDl5ujs5SDt4Obs6PLlIHgsIPfy7uH7IPPk4Ovo8vwg8ejs4u7rIO/u5CDq8/Dx7vDu7C4gKioKKworICAxLiDP5fDl7OXx8ujy5SDq8/Dx7vAg6iDx8vDu6uUg4u3o5/MsIO/u7OX35e3t7ukgLS0tPi4KKworICAyLiDE6/8g6PHv8ODi6+Xt6P8g7vjo4e7qLCDv5fDl7OXx8ujy5SDq8/Dx7vAsIO/u6uAg7u0g7eUg7urg5uXy8f8g7eDkCisgICAgIPPk4Ov/5ez77CDx6Ozi7uvu7C4KKworICAzLiDN4Obs6PLlIOrr4OLo+PMgeCDk6/8g8+Tg6+Xt6P8g8vDl4fPl7O7j7iDx6Ozi7uvgLgorCisgIDQuIM/u4vLu8Ojy5SD44OPoIDItLTQg7+7q4CDx8vDu6uAg7eUg4fPk5fIg6PHv8ODi6+Xt4C4KKworLS0tPiDO8iDy8vLu7+7y4CDq7u/78vIg7+/v++v8IO/v7iDv7+/u6/4g6+Xy8ujy8i4KKworICA1LiDS5e/l8PwsIOru4+TgIPHy8O7q4CDu8uru8PDl6vLo8O7i4O3gLCDv5fDl9e7k6PLlIOog8/Du6vMgMS40LgorCivHwMzF18DNyMU6IMIg9e7k5SDu8eLu5e3o/yD98u7j7iDz9+Xh7ejq4CDt5SDv+/Lg6fLl8fwg5+Dv7uzo7eDy/Cwg8/fo8uUKKwkgICDiIO/w7vbl8fHlIOjx7+7r/Ofu4uDt6P8uCisKKworfn5+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+CisJCSAg0/Du6iAxLjQ6INDFxMDK0sjQzsLAzcjFINLFytHSwCAtIMLR0sDCysAKKworCisgKiogzeD17uT/8fwg4iDu4fv37e7sIPDl5ujs5SAoTm9ybWFsIG1vZGUpLCDt4Obs6PLlIGkg5Ov/IOLx8uDi6ugg8uXq8fLgLiAqKgorCisgIDEuIM/l8OXs5fHy6PLlIOrz8PHu8CDqIO/l8OLu6SDx8vDu6uUg4u3o5/MsIO/u7OX35e3t7ukgLS0tPi4KKworICAyLiDE6/8g8u7j7iwg9/Lu4fsg8eTl6+Dy/CDv5fDi8/4g8fLw7urzIOjk5e3y6Pft7ukg4vLu8O7pLCDv7uzl8fLo8uUKKyAgICAg6vPw8e7wIO3gIPHo7OLu6yDPxdDFxCDq7vLu8PvsIPHr5eTz5fIg4vHy4OLo8vwg8uXq8fIuCisKKyAgMy4gzeDm7Ojy5SBpIOgg7eDh5fDo8uUg8vDl4fPl7PvlIOTu4eDi6+Xt6P8uCisKKyAgNC4gz+7x6+Ug6PHv8ODi6+Xt6P8g4vHl9SDu+Ojh7uog7eDm7Ojy5SA8RVNDPiDk6/8g4u7n4vDg8uAg4iDu4fv37fvpIPDl5ujsLgorICAgICDP7uLy7vDo8uUg+ODj6CAyLS00LCDv7urgIPTw4OfgIO3lIOHz5OXyIOjx7/Dg4uvl7eAg7+7r7e7x8vz+LgorCistLS0+INfg8fL8IPLl6vHy4CDiIPHy8O7q5SDh5fHr5eTt7iAuCistLS0+INfg8fL8IPLl6vHy4CDiIP3y7ukg8fLw7urlIOHl8fHr5eTt7iDv8O7v4OvgLgorCisgIDUuIMru4+TgIO7x4u7o8uUg4vHy4OLq8yDy5erx8uAsIO/l8OX17uTo8uUg5ODr/PjlIOog0OXn/uzlLgorCisKKworfn5+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+CisJCQkJ0MXH3szFINPQzsrAIDEKKworICAxLiDK8/Dx7vAg7+Xw5ezl+eDl8vH/IOvo4e4g6uvg4uj44OzoIPHuIPHy8OXr6uDs6Cwg6+jh7iDq6+Di6Pjg7OggaGprbC4KKwkgaCAo4uvl4u4pCWogKOLt6OcpICAgICAgIGsgKOLi5fD1KQkgICAgbCAo4u/w4OLuKQorCisgIDIuIMTr/yDn4O/z8ergIFZpbSAo6Ocg7/Do4+vg+OXt6P8gJSDq7uzg7eTt7ukg7uHu6+736ugpIO3g4eXw6PLlOgorICAgICB2aW0gyMzfX9TAycvAIDxFTlRFUj4KKworICAzLiDE6/8g5+Di5fD45e3o/yDw4OHu8vsg8SBWaW0g7eDh5fDo8uU6CisgICAgIDxFU0M+ICAgOnEhCSA8RU5URVI+ICD38u7h+yDu8urg5+Dy/PH/IO7yIPHu9fDg7eXt6P8g6Ofs5e3l7ejpLgorICAgICDI6+gg7eDh5fDo8uU6CisgICAgIDxFU0M+ICAgOndxCSA8RU5URVI+ICD38u7h+yDx7vXw4O3o8vwg6Ofs5e3l7ej/LgorCisgIDQuIMTr/yDz5ODr5e3o/yDx6Ozi7uvgIO/u5CDq8/Dx7vDu7CDiIO7h+/ft7uwg8OXm6OzlLCDt4OHl8Ojy5TogeAorCisgIDUuINfy7uH7IOLx8uDi6PL8IPLl6vHyIO/l8OXkIOrz8PHu8O7sIOIg7uH79+3u7CDw5ebo7OUsIO3g4eXw6PLlOgorCSBpICAgICDi4u7k6PLlIPLl6vHyCTxFU0M+CisKK8fAzMXXwM3IxTogzeDm4PLo5SA8RVNDPiDv5fDl7OXx8ujyIMLg8SDiIO7h+/ft++kg8OXm6OwgKE5vcm1hbCBtb2RlKSDr6OHuCisJICAg7/Dl8OLl8iDt5ebl6+Dy5ev87fP+IOgg9+Dx8uj37e4g5+Di5fD45e3t8/4g6u7s4O3k8y4KKwor0uXv5fD8IO/l8OX17uTo7CDqINPw7urzIDIuCisKK35+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+fgorCQkJICDT8O7qIDIuMTogys7MwM3E2yDTxMDLxc3I3worCisKKwkqKiDN4OHl8Ojy5SBkdyDk6/8g8+Tg6+Xt6P8g8/fg8fLq4CDy5erx8uAg5O4g6u7t9uAg8evu4uAuICoqCisKKyAgMS4gzeDm7Ojy5SA8RVNDPiwg9/Lu4fsg7+Xw5eny6CDiIO7h+/ft++kg8OXm6OwuCisKKyAgMi4gz+Xw5ezl8fLo8uUg6vPw8e7wIOLt6OcsIOog8fLw7urlLCDv7uzl9+Xt7e7pIC0tLT4uCisKKyAgMy4gz+Xw5ezl8fLo8uUg6vPw8e7wIOIg7eD34OvuIPHr7uLgLCDq7vLu8O7lIPHr5eTz5fIg8+Tg6+jy/C4KKworICA0LiDN4OHl8Ojy5SAgZHcgLCD38u7h+yDz5ODr6PL8IP3y7iDx6+7i7i4KKworx8DMxdfAzcjFOiDC7iDi8OXs/yDt4OHu8OAg4fPq4vsgZHcg7+7/4v/y8f8g4iDv7vHr5eTt5ekg8fLw7urlIP3q8ODt4C4gxfHr6AorCSAgIML7IPfy7i3y7iDt4OHl8OXy5SDt5e/w4OLo6/zt7iwg7eDm7Ojy5SA8RVNDPiDoIO3g9+3o8uUg8e3g9+Dr4C4KKworLS0tPiDN5fHq7uv86u4g8evu4iDw4PTo7eDkIOIg/fLu7CDv8OXk6+7m5e3o6CDg4vLu6vDg7SDo5+vo+O3oLgorCisgIDUuIM/u4vLu8Ojy5SD44OPoIDMg6CA0LCDv7urgIO3lIOjx7/Dg4ujy5SDi8eUg7vjo4eroIOgg7+Xw5fXu5Ojy5SDqCisgICAgINPw7urzIDIuMi4KKworCit+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+fn4KKwkJICDT8O7qIDIuMjogxM7PzsvNyNLFy9zN28Ugys7MwM3E2yDTxMDLxc3I3worCisKKwkgICAgKiogzeDh5fDo8uUgZCQg5Ov/IPPk4Ovl7ej/IPLl6vHy4CDk7iDq7u324CDx8vDu6uguICoqCisKKyAgMS4gzeDm7Ojy5SA8RVNDPiwg9/Lu4fsg7+Xw5eny6CDiIO7h+/ft++kg8OXm6OwuCisKKyAgMi4gz+Xw5ezl8fLo8uUg6vPw8e7wIOLt6OcsIOog8fLw7urlLCDv7uzl9+Xt7e7pIC0tLT4uCisKKyAgMy4gz+Xw5ezl8fLo8uUg6vPw8e7wIOog6u7t9vMg7/Dg4ujr/O3u6SDx8vDu6uggKM/O0cvFIO/l8OLu6SAuICkuCisKKyAgNC4g1/Lu4fsg8+Tg6+jy/CDu8fLg8u7qIPHy8O7q6Cwg7eDh5fDo8uUgIGQkIC4KKworLS0tPiDK8u4t8u4g7eDh8ODrIO7q7u334O3o5SD98u7pIPHy8O7q6CDk4uDm5PsuIO7q7u334O3o5SD98u7pIPHy8O7q6CDk4uDm5PsuCisKKworICA1Ltfy7uH7IOvz9/jlIPDg5+7h8ODy/PH/IOIg/fLu7Cwg7+Xw5fXu5Ojy5SDqINPw7urzIDIuMy4KKworCisKKworCit+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+fn4KKwkJCSDT8O7qIDIuMzogys7MwM3E2yDIIM7B2sXK0tsKKworCisgINTu8Ozg8iDq7uzg7eT7IGDz5ODr5e3o5ScgZCDy4Oru4joKKworCSBb9+jx6+5dICAgZAnu4frl6vIJICAgIMjLyAkgICAgIGQJIFv36PHr7l0gICDu4frl6vIKKyAgx+Tl8fw6CisgICAg9+jx6+4gIC0g8eru6/zq7iDw4Ocg6PHv7uvt6PL8IOru7ODt5PMgKO3l7uH/5+Dy5ev87e4sIO/uIPPs7uv34O3o/j0xKS4KKyAgICBkICAgICAgLSDq7uzg7eTgIPPk4Ovl7ej/LgorICAgIO7h+uXq8iAtIPEg9+XsIOru7ODt5OAg5O7r5u3gIOH78vwg4vvv7uvt5e3gICjv5fDl9+jx6+Xt7iDt6OblKS4KKworICDK8ODy6ujpIPHv6PHu6iDu4frl6vLu4joKKyAgICB3IC0g7vIg6vPw8e7w4CDk7iDq7u324CDx6+7i4Cwg4urr/vfg/yDn4OLl8Pjg/vno6SDv8O7h5esuCisgICAgZSAtIO7yIOrz8PHu8OAg5O4g6u7t9uAg8evu4uAsIM3FIOLq6/734P8g5+Di5fD44P756Okg7/Du4eXrLgorICAgICQgLSDu8iDq8/Dx7vDgIOTuIOru7fbgIPHy8O7q6C4KKyAgICBeIC0g7vIg6vPw8e7w4CDk7iDt4Pfg6+Ag8fLw7uroLgorCivHwMzF18DNyMU6IM/w7vHy7uUg7eDm4PLo5SDt4CDx6Ozi7usg7uH65ery4CDiIO7h+/ft7uwg8OXm6OzlIChOb3JtYWwgbW9kZSkKKwkgICDh5ecg5O7v7uvt6PLl6/zt+/Ug6u7s4O3kIO/l8OXk4ujt5fIg6vPw8e7wIPLg6iwg6uDqIPPq4Ofg7e4g4gorCSAgIPHv6PHq5SDu4frl6vLu4i4KKworCisKK35+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+fgorCSAgICAgICDT8O7qIDIuNDogyNHKy97Xxc3IxSDIxyDP0MDCyMvAIGDKzszAzcTALc7B2sXK0icKKworCisJCSAqKiDN4OHl8Ojy5SBkZCDk6/8g8+Tg6+Xt6P8g4vHl6SDx8vDu6uguICoqCisKKyAgwvHr5eTx8uLo5SD34PHy7uPuIO/w6Ozl7eXt6P8g7u/l8OD26Ogg8+Tg6+Xt6P8g4vHl6SDx8vDu6ugsIPDg5/Dg4e7y9+jq6AorICBWaW0g8OX46OvoLCD38u4g5Ov/IP3y7uPuIO/w7vnlIOLx5ePuIO/w7vHy7iDt4OHw4PL8IGQg5OLg5uT7LgorCisgIDEuIM/l8OXs5fHy6PLlIOrz8PHu8CDi7ejnLCDq7iDi8u7w7ukg8fLw7urlIPTw4Of7LgorICAyLiDN4OHl8Ojy5SBkZCDk6/8g8+Tg6+Xt6P8g8fLw7uroLgorICAzLiDS5e/l8Pwg7+Xw5ezl8fLo8uXx/CDqIPfl8uLl8PLu6SDx8vDu6uUuCisgIDQuIM3g4eXw6PLlIDJkZCAo4vHv7uzt6PLlIO/w4OLo6+4gYPfo8evuLeru7ODt5OAt7uH65eryJyksIPfy7uH7IPPk4Ovo8vwKKyAgICAg5OLlIPHy8O7q6C4KKworICAgICAgMSkgIMvl8u7sIP8g9e7m8yDt4CDx8uDk6O7tLAorICAgICAgMikgIM4sIOrg6iDi7eXn4O/t7iDq7u336Ovx/yDk6OLg7SEKKyAgICAgIDMpICDfIOHu6+X+IOfgIGBgx+Xt6PInJywgYGDH5e3o8icnIC0tLSD35ezv6O7tIQorICAgICAgNCkgIM/l9+Dr/O3uIP8g4+v/5vMg7eAg7eD45SDv7uru6+Xt6OUhCisgICAgICA1KSAgxePuIOPw/+Tz+eXlIOjr/CDv8/Hy7iDo6/wg8uXs7e4uLi4KKyAgICAgIDYpICDfIPHo5vMg7eAg8erg7OXp6uUg4iDr7ublIGDBJworICAgICAgNykgIMgg6OPw4P4g7eAg4e7r/Pju6SDm5fHy/+3u6SDy8PPh5S4KKworfn5+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+CisJCQkgINPw7uogMi41OiDKzszAzcTAIGDO0srA0icKKworCisgICoqIM3g5uzo8uUgdQnk6/8g7vLs5e37IPDl5/Pr/PLg8uAg8ODh7vL7IO/w5eT75PP55ekg6u7s4O3k+ywgVSDk6/8g7vLs5e37CisJCQno8e/w4OLr5e3o6SDi7iDi8eXpIPHy8O7q5S4gKioKKworICAxLiDP5fDl7OXx8ujy5SDq8/Dx7vAg4u3o5ywg6iDx8vDu6uUsIO/u7OX35e3t7ukgLS0tPiDoIPPx8uDt7uLo8uUg5ePuIO3gCisgICAgIO/l8OLz/iDu+Ojh6vMuCisgIDIuIM3g5uzo8uUgeCDk6/8g8+Tg6+Xt6P8g7+Xw4u7j7iDt5e/w4OLo6/zt7uPuIPHo7OLu6+AuCisgIDMuINLl7+Xw/CDt4Obs6PLlIHUg5Ov/IO7y7OXt+yAo7vLq4PLgKSDv7vHr5eTt5ekg4vvv7uvt5e3t7ukg6u7s4O3k+y4KKyAgNC4gyPHv8ODi/PLlIOLx5SDu+Ojh6ugg4iDx8vDu6uUsIOjx7+7r/Ofz/yDq7uzg7eTzIHggLgorICA1LiDS5e/l8Pwg7eDm7Ojy5SDn4OPr4OLt8/4gVSDk6/8g8u7j7iwg9/Lu4fsg4uXw7fPy/CDi8f4g8fLw7urzIOIg6PH17uTt7uUKKyAgICAg8e7x8u7/7ejlLgorICA2LiDN4Obs6PLlIHUg7eXx6u7r/OruIPDg5yDk6/8g7vLs5e37IOru7ODt5PsgVSDoIO/w5eT75PP56PUg6u7s4O3kLgorICA3LiDN4Obs6PLlIPLl7+Xw/CBDVFJMLVIgKPPk5fDm6OLg6fLlIOrr4OLo+PMgQ1RSTCDt4Obg8u7pIOIg7O7s5e3yIO3g5uDy6P8KKyAgUikgICAgIO3l8eru6/zq7iDw4Ocg5Ov/IOLu5+Lw4PLgIOru7ODt5CAo7vLq4PIg7vLq4PLgKS4KKworLS0tPiDI8e/w8ODi/PLlIO7u+Ojh6ugg4iD98u7p6SDx8vDu6uUg6CDi5fDt6PLy5SDo9SDx8SDv7uzu+fz8/iBg7vLq4PLgJy4KKworICA4LiDd8u4g4fvr6CDu9+Xt/CDv7uvl5+375SDq7uzg7eT7LiDE4Ovl5SDv5fDl9e7k6PLlIOog0OXn/uzlINPw7urgIDIuCisKKworfn5+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+CisJCQkJ0MXH3szFINPQzsrAIDIKKworCisgIDEuIMTr/yDz5ODr5e3o/yDy5erx8uAg7vIg6vPw8e7w4CDk7iDq7u324CDx6+7i4CDt4OHl8Ojy5TogICAgZHcKKworICAyLiDE6/8g8+Tg6+Xt6P8g8uXq8fLgIO7yIOrz8PHu8OAg5O4g6u7t9uAg8fLw7uroIO3g4eXw6PLlOiAgICBkJAorCisgIDMuIMTr/yDz5ODr5e3o/yDi8eXpIPHy8O7q6CDt4OHl8Ojy5TogICAgZGQKKworICA0LiDU7vDs4PIg6u7s4O3k+yDiIO7h+/ft7uwg8OXm6OzlIOjs5eXyIOLo5DoKKworICAgICAgIFv36PHr7l0gICDq7uzg7eTgICAg7uH65eryICAgICDIy8ggICAgIOru7ODt5OAJW/fo8evuXSAgIO7h+uXq8gorICAgICDj5OU6CisgICAgICAg9+jx6+4gICAtIPHq7uv86u4g8ODnIO/u4vLu8Ojy/CDi++/u6+3l7ejlIOru7ODt5PsKKyAgICAgICDq7uzg7eTgIC0g9/LuIOL77+7r7ejy/Cwg7eDv8Ojs5fAgZCDk6/8g8+Tg6+Xt6P8KKyAgICAgICDu4frl6vIgIC0g7eAg9/LuIOTu6+bt4CDi7ufk5enx8uLu4uDy/CDq7uzg7eTgLCDt4O/w6Ozl8CB3ICjx6+7i7iksCisJCSQgKOTuIOru7fbgIPHy8O7q6CksIOgg8i7kLgorCisgIDUuIMTr/yDu8uzl7fsgKO7y6uDy4Ckg7/Dl5Pjl8fLi8/756PUg5OXp8fLi6Okg7eDh5fDo8uU6ICB1ICjx8vDu9+3g/yB1KQorICAgICDE6/8g7vLs5e37ICju8urg8uApIOLx5fUg6Ofs5e3l7ejpIOIg8fLw7urlIO3g4eXw6PLlOiAgVSAo7/Du7+jx7eD/IFUpCisgICAgIMTr/yDu8uzl7fsg7vLq4PLgIO3g4eXw6PLlOiAgQ1RSTC1SCisKK35+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+fgorCQkJICDT8O7qIDMuMTogys7MwM3EwCDC0dLAwsrICisKKworICAgKiogzeDh5fDo8uUgcCDk6/8g4vHy4OLq6CDv7vHr5eTt5ePuIPPk4Ovl7e3u4+4g8uXq8fLgIO/u8evlIOrz8PHu8OAuICoqCisKKyAgMS4gz+Xw5ezl8fLo8uUg6vPw8e7wIOLt6Ocg6iDv7vHr5eTt5ekg8fLw7urlIOjnIO3g4e7w4C4KKworICAyLiDN4OHl8Ojy5SBkZCDk6/8g8+Tg6+Xt6P8g8fLw7uroIOgg5eUg8e718ODt5e3o/yDiIOHz9OXw5SBWaW0n4C4KKworICAzLiDP5fDl7OXx8ujy5SDq8/Dx7vAg6iDx8vDu6uUgzcDEIPLl7CDs5fHy7uwsIOrz5OAg8evl5PPl8iDi8fLg4ujy/AorICAgICDz5ODr5e3t8/4g8fLw7urzLgorCisgIDQuIM3g9e7k//H8IOIg7uH79+3u7CDw5ebo7OUg7eDh5fDo8uUgcCDk6/8g5+Ds5e37IPHy8O7q6C4KKworICA1LiDP7uLy7vDo8uUg+ODj6CAyLS00LCDv7urgIO3lIPDg8fHy4OLo8uUg4vHlIPHy8O7q6CDiIO3z5u3u7CDv7vD/5OrlLgorCisgICAgIOMpIMgg6/P3+OUg4vvk8+zg8vwg7eUg7O7jLgorICAgICDhKSDK7uPk4CDt5SDiIPjz8urzIOfg7eXs7uMsCisgICAgIOIpIM7tIPPi4Obg8vwg8eXh/yDn4PHy4OLo6worICAgICDgKSDM7ukg5P/k/yDx4Oz79SD35fHy7fv1IO/w4OLo6worCisKK35+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+fgorCQkgICAgICAg0/Du6iAzLjI6IMrOzMDNxMAgx8DMxc3bCisKKworCSAgKiogzeDh5fDo8uUgciDoIPHo7OLu6ywg5+Ds5e3//vno6SDx6Ozi7usg7+7kIOrz8PHu8O7sLiAqKgorCisgIDEuIM/l8OXs5fHy6PLlIOrz8PHu8CDi7ejnLCDqIPHy8O7q5Swg7+7s5ffl7e3u6SAtLS0+LgorCisgIDIuINPx8uDt7uLo8uUg6vPw8e7wIPLg6iwg9/Lu4fsg7u0g7eD17uTo6/H/IO3g5CDv5fDi7ukg7vjo4eru6S4KKworICAzLiDN4OHl8Ojy5SByCegg5+Dy5ewg8ejs4u7rLCDo8e/w4OLr//756Okg7vjo4erzLgorCisgIDQuIM/u4vLu8Ojy5SD44OPoIDIg6CAzLCDv7urgIO/l8OLg/yDx8vDu6uAg7eUg4fPk5fIg6PHv8ODi6+Xt4C4KKworLS0tPiAgwiDs7uzl4/Ig7eDh8vDgIP3y7ukg9/Lw7uroIOru5TDq8u4g8SDy8PPk7uwg7+7v4uTg6yDv7iDq6+Lg6Pjg7CEKKy0tLT4gIMIg7O7s5e3yIO3g4e7w4CD98u7pIPHy8O7q6CDq7uUt6vLuIPEg8vDz5O7sIO/u7+Dk4Osg7+4g6uvg4uj44OwhCisKKyAgNS4g0uXv5fD8IO/l8OX17uTo8uUg6iDT8O7q8yAzLjIuCisKK8fAzMXXwM3IxTogz+7s7ejy5Swg9/LuIOL7IOTu6+bt+yDz9+jy/PH/IOIg7/Du9uXx8eUg8ODh7vL7LCDgIO3lIO/w7vHy7gorCSAgIOfg7+7s6O3g/y4KKworCit+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+fn4KKwkJCSDT8O7qIDMuMzogys7MwM3EwCDIx8zFzcXNyN8KKworCisJCSoqIMTr/yDo5+zl7eXt6P8g9+Dx8ugg8evu4uAg7eDh5fDo8uUgY3cgLiAqKgorCisgIDEuIM/l8OXs5fHy6PLlIOrz8PHu8CDi7ejnLCDqIPHy8O7q5Swg7+7s5ffl7e3u6SAtLS0+LgorCisgIDIuINDg8e/u6+7m6PLlIOrz8PHu8CDt4OQg4fPq4u7pIGBvJyDiIPHr7uLlIGDx7uvgJy4KKworICAzLiDN4OHl8Ojy5SBjdyDoIOjx7/Dg4vzy5SDx6+7i7iAo4iDk4O3t7uwg8evz9+DlLCDt4OHl8Ojy5SBg6+7iJy4pCisKKyAgNC4gzeDm7Ojy5SA8RVNDPiDoIO/l8OX17uTo8uUg6iDx6+Xk8/755ekg7vjo4erlICjqIO/l8OLu7PMg8ejs4u7r8ywg6u7y7vD76QorICAgICDt4OTuIOjn7OXt6PL8LikKKworICA1LiDP7uLy7vDo8uUg+ODj6CAzLS00IO/u6uAg7+Xw4u7lIO/w5eTr7ubl7ejlIO3lIPHy4O3l8iDo5OXt8uj37fvsIOLy7vDu7PMuCisKKy0tLT4gzeXx6u7r/OruIPHu6+Ag4iD9/OP2IPHy8O7q5SDy7+P49uH8IPDl5ODr5+rz/ujl8eL1LgorLS0tPiDN5fHq7uv86u4g8evu4iDiIP3y7ukg8fLw7urlIPLw5eHz/vIg8OXk4Ory6PDu4uDt6P8uCisKK87h8ODy6PLlIOLt6Ozg7ejlLCD38u4gY3cg7eUg8u7r/OruIOfg7OXt/+XyIPHr7uLuLCDt7iDoIO/l8OXi7uTo8iDi4PEg4iDw5ebo7Aor4vHy4OLq6C4KKworCit+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+fn4KKwkJICDT8O7qIDMuNDogz9DOxM7LxsDFzCDIx8zFzd/S3CDRIMrOzMDNxM7JIGMKKworCisqKiDK7uzg7eTgIOfg7OXt+yDo8e/u6/zn8+Xy8f8g8SDy5ezoIOblIO7h+uXq8uDs6Cwg9/LuIOgg6u7s4O3k4CDz5ODr5e3o/y4gKioKKworICAxLiDK7uzg7eTgIOjn7OXt5e3o/yDv8Ojs5e3/5fLx/yDy4Oro7CDm5SDu4fDg5+7sLCDq4Oog6CDq7uzg7eTgIPPk4Ovl7ej/LgorICAgICDF5SD07vDs4PIg8uDq7uI6CisKKyAgICAgICBb9+jx6+5dICAgYyAgIO7h+uXq8gkgICDIy8gJICAgIGMJW/fo8evuXSAgIO7h+uXq8gorCisgIDIuIM7h+uXq8vsg8uDq5uUg8e7i7+Dk4P7yOiB3ICjx6+7i7iksICQgKOru7eX2IPHy8O7q6Ckg6CDyLu8uCisKKyAgMy4gz+Xw5ezl8fLo8uUg6vPw8e7wIOLt6OcsIOog8fLw7urlLCDv7uzl9+Xt7e7pIC0tLT4uCisKKyAgNC4gz+Xw5enk6PLlIOog7+Xw4u7pIO746OHq5S4KKworICA1LiDN4OHl8Ojy5SBjJCDoIO7y8OXk4Ory6PDz6fLlIO/l8OLz/iDx8vDu6vMg8uDqLCD38u7h+yDu7eAg8e7i7+Dk4OvgIPHuCisgICAgIOLy7vDu6Swg7+7x6+Ug9+Xj7iDt4Obs6PLlIDxFU0M+LgorCistLS0+IMru7eX2IP3y7ukg8fLw7uroIO3z5uTg5fLx/yDiIO/u7O756Cwg9/Lu4fsg8fLg8vwg7+717ubo7CDt4CDi8u7w7ukuCistLS0+IMru7eX2IP3y7ukg8fLw7uroIO3z5uTg5fLx/yDiIO/u7O756CDq7uzg7eT7IGMkIC4KKworCit+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+fn4KKwkJCQnQxcfezMUg09DOysAgMworCisKKyAgMS4gxOv/IOLx8uDi6ugg8uXq8fLgLCDq7vLu8PvpIPLu6/zq7iD38u4g4fvrIPPk4Ovl7Swg7eDh5fDo8uUgcCAuIN3y4AorICAgICDq7uzg7eTgIOLx8uDi6PIg8+Tg6+Xt7fvpIPLl6vHyIM/O0cvFIOrz8PHu8OAgKOXx6+gg4fvr4CDz5ODr5e3gIPHy8O7q4CwKKyAgICAg8u4g7u3gIOHz5OXyIO/u7OX55e3gIOIg8fLw7urlIO/u5CDq8/Dx7vDu7CkuCisKKyAgMi4gxOv/IOfg7OXt+yDx6Ozi7uvgIO/u5CDq8/Dx7vDu7CDt4OHl8Ojy5SByIOgg5+Dy5ewg5+Ds5e3//vno6SDx6Ozi7usuCisKKyAgMy4gyu7s4O3k4CDo5+zl7eXt6P8g7+7n4u7r/+XyIMLg7CDo5+zl7ejy/CDz6uDn4O3t++kg7uH65eryIO7yIOrz8PHu8OAg5O4KKyAgICAg6u7t9uAg/fLu4+4g7uH65ery4C4gzeDv8Ojs5fAsIO3g4eXw6PLlIGN3IOTr/yDn4Ozl7fsg7vIg6vPw8e7w4CDk7gorICAgICDq7u324CDx6+7i4CwgYyQg5Ov/IOjn7OXt5e3o/yDk7iDq7u324CDx8vDu6uguCisKKyAgNC4g1O7w7ODyIOru7ODt5Psg6Ofs5e3l7ej/IPLg6u7iOgorCisJIFv36PHr7l0gICBjCe7h+uXq8gkgICAgICDIy8gJYyAgIFv36PHr7l0gICDu4frl6vIKKwor0uXv5fD8IO7y7/Dg4uv/6fLl8fwg6iDx6+Xk8/755ezzIPPw7urzLgorCisKKworCisKK35+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+fgorCSAgICAgINPw7uogNC4xOiDIzdTO0MzA1sjfIM4g1MDJy8UgyCDQwNHPzsvOxsXNyMUgwiDNxcwKKworCisgKiogzeDh5fDo8uUgQ1RSTC1nIPfy7uH7IPPi6OTl8vwgwuD45SDs5fHy7vDg8e/u6+7m5e3o5SDiIPTg6evlIOgg6O307vDs4Pbo/gorCQkJCSAgICDuIO3l7C4KKwnN4OHl8Ojy5SBTSElGVC1HIOTr/yDv5fDl7OX55e3o/yDqIOfg5ODt7e7pIPHy8O7q5SDiIPTg6evlLiAqKgorCisgIMfg7OX34O3o5Togz/Du9+jy4Ony5SDi5fH8IPPw7uog7/Dl5uTlIPfl7CDi++/u6+3/8vwg6/7h++Ug6u7s4O3k+yEhCisKKyAgMS4g0+Tl8Obo4uD/IOrr4OLo+PMgQ3RybCDt4Obs6PLlIGcgLiDC7ejn8yD96vDg7eAg7+7/4ujy8f8g8fLw7urgIPHy4PLz8eAg8QorICAgICDo7OXt5ewg9ODp6+Ag6CDt7uzl8O7sIPHy8O7q6Cwg4iDq7vLu8O7pIML7IO3g9e7k6PLl8fwuIMfg7+7s7ejy5SDt7uzl8AorICAgICDx8vDu6ugsIO7tIO/u8vDl4fPl8vH/IO3gINjg4+UgMy4KKworICAyLiDN4Obs6PLlIHNoaWZ0LUcg5Ov/IO/l8OXs5fnl7ej/IOog6u7t9vMg9ODp6+AuCisKKyAgMy4gzeDh5fDo8uUg7e7s5fAg8fLw7uroLCDiIOru8u7w7ukg4vsg7eD17uTo6+jx/CDoIOfg8uXsIHNoaWZ0LUcuIN3y7gorICAgICDi5fDt5fIgwuDxIOog8fLw7urlLCDiIOru8u7w7ukgwvsg4fvr6Cwg6u7j5OAg4iDv5fDi++kg8ODnIO3g5uDr6CBDdHJsLWcuCisgICAgICjK7uPk4CDC+yDh8+Tl8uUg7eDh6PDg8vwg9uj08PssIO7t6CDNxSDu8u7h8ODn//Lx/yDt4CD96vDg7eUuKQorCisgIDQuIMXx6+ggwvsg5+Dv7uzt6OvoIOLx5SDi+/jl8erg5+Dt7e7lLCDi++/u6+3o8uUg+ODj6CAxLS0zLgorCisKK35+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+fgorCQkJICAg0/Du6iA0LjI6IMrOzMDNxMAgz87I0crACisKKwkgICAgICAqKiDN4OHl8Ojy5SAgLyAg6CDn4PLl7CDi4uXk6PLlIOjx6u7s8/4g9PDg5/MuICoqCisKKyAgMS4gwiDu4fv37e7sIPDl5ujs5SAoTm9ybWFsIG1vZGUpIO3g4eXw6PLlIPHo7OLu6yAgLyAuIM7h8ODy6PLlIOLt6Ozg7ejlLAorICAgICD38u4g7u0g4uzl8fLlIPEg6vPw8e7w7uwg7+7/4ujy8f8g4u3o5/Mg/erw4O3gLCDq4Oog/fLuIO/w7ujx9e7k6PIg8QorICAgICDq7uzg7eTu6SA6CS4KKworICAyLiDS5e/l8Pwg7eDh5fDo8uUgJ+74+Pjo4ergJyA8RU5URVI+LiDd8u4g8u4g8evu4u4sIOru8u7w7uUgwvsg4fPk5fLlCisgICAgIOjx6uDy/C4KKworICAzLiDE6/8g8u7j7iwg9/Lu4fsg7+7i8u7w6PL8IO/u6PHqLCDv8O7x8u4g7eDm7Ojy5SBuIC4KKyAgICAgxOv/IO/u6PHq4CD98u7pIPTw4Of7IOIg7uHw4PLt7uwg7eDv8ODi6+Xt6OgsIO3g5uzo8uUgU2hpZnQtTiAuCisKKyAgNC4gxfHr6CDC+yDm5evg5fLlIPHw4OfzIOjx6uDy/CDiIO7h8ODy7e7sIO3g7/Dg4uvl7ejoLCDo8e/u6/zn8+ny5QorICAgICDq7uzg7eTzID8g4uzl8fLuIC8gLgorCistLS0+IMru4+TgIML7IO/w6CDv7ujx6uUg5O7x8ujj7eXy5SDq7u324CD04Onr4Cwg7+7o8eog4fPk5fIg7/Du5O7r5uXtIPEKKyAgICAg7eD34OvgLgorCisgICLu+Pj46OHq4CIg/fLuIO3lIPHv7vHu4SDv8O7o5+3l8eXt6P8g8evu4uAgYO746OHq4Cc7ICDu+Pj46OHq4CD98u4g7vjo4ergLgorCit+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+fn4KKwkJCdPw7uogNC4zOiDPzsjRyiDPwNDN29Ug0crOwc7KCisKKworCQkqKiDN4OHl8Ojy5SAlIOTr/yDv7ujx6uAg7+Dw7fv1ICksXSDo6+ggfSAuICoqCisKKyAgMS4gz+7s5fHy6PLlIOrz8PHu8CDt4OQg6/7h7ukg6OcgKCwgWyDo6+ggeyDiIPHy8O7q5SDi7ejn8ywg7+7s5ffl7e3u6SAtLS0+LgorCisgIDIuINLl7+Xw/CDt4OHl8Ojy5SDx6Ozi7usgJSAuCisKKyAgMy4gyvPw8e7wIOTu6+bl7SDv5fDl8eru9+jy/CDt4CDv4PDt8/4g8eru4erzLgorCisgIDQuIM3g4eXw6PLlICUg5Ov/IOLu5+Lw4PLgIOrz8PHu8OAg7eDn4OQg6iDv5fDi7ukg8eru4erlLgorCistLS0+IN3y7iAoIPHy8O7q4Cwg8e7k5fDm4Png/yDy4Oro5SAoLCDy4Oro5SBbIF0g6CDy4Oro5SB7IH0g8eru4eroLiApKQorCivH4Ozl9+Dt6OU6IN3y7iDu9+Xt/CDz5O7h7e4g7/DoIO7y6+Dk6uUg7/Du4/Dg7Owg8SDv8O7v8/nl7e377Ogg8eru4erg7OghCisKKworCisKKworCit+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+fn4KKwkJICAgICAg0/Du6iA0LjQ6INHPztHOwSDI0c/QwMLLxc3I3yDO2MjBzsoKKworCisJICoqIM3g4eXw6PLlIDpzL+H76+4v8fLg6+4vZyDk6/8g5+Ds5e37ICfh++vuJyDt4CAn8fLg6+4nLiAqKgorCisgIDEuIM/l8OXs5fHy6PLlIOrz8PHu8CDi7ejnLCDqIPHy8O7q5Swg7+7s5ffl7e3u6SAtLS0+LgorCisgIDIuIM3g4eXw6PLlIDpzL/Pi7uT+L/Pi7ubzIDxFTlRFUj4gLiDO4fDg8ujy5SDi7ejs4O3o5SDt4CDy7iwg9/LuIP3y4CDq7uzg7eTgCisgICAgIOfg7OXt6PIg8u7r/OruIO/l8OLu5SDt4Onk5e3t7uUg4vXu5uTl7ejlIOIg8fLw7urlLgorCisgIDMuINLl7+Xw/CDt4OHl8Ojy5SA6cy/z4u7k/i/z4u7m8y9nICwg7uft4Pfg/vnl5SDv7uTx8uDt7uLq8yDj6+7h4Ov87e4g4u4KKyAgICAg4vHl6SDx8vDu6uUuIN3y7iDn4Ozl7ejyIOLx5SDt4Onk5e3t++Ug4iDx8vDu6uUg4vXu5uTl7ej/LgorCistLS0+IN8g8+Lu5P4g6iDu8uLl8Obl7e377CDx5evl7fz/7Cwg/yDz4u7k/iDx6uLu5/wg4uXq7uLl9+376SDx8u7tLCD/IPPi7uT+IOoKKyAgICAg5+Dh+/L77CDv7uru6+Xt/P/sLgorCisgIDQuIMTr/yDn4Ozl7fsg4vHl9SDi9e7m5OXt6Okg7+7x6+Xk7uLg8uXr/O3u8fLoIPHo7OLu6+7iIOzl5uTzIOTi8+z/CisgICAgIPHy8O7q4OzoLAorICAgICDt4OHl8Ojy5SA6Iywjcy/h++vuL/Hy4OvuL2cgIOPk5SAjLCMgLS0tIO3u7OXw4CD98uj1IPHy8O7qLgorICAgICDN4OHl8Ojy5SA6JXMv4fvr7i/x8uDr7i9nICAgIOTr/yDn4Ozl7fsg4vHl9SDi9e7m5OXt6Okg4u4g4vHl7CD04Onr5S4KKworCit+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+fn4KKwkJCQnQxcfezMUg09DOysAgNAorICAxLiBDdHJsLWcg7+7q4Of74uDl8iDi4PjlIO/u6+7m5e3o5SDiIPTg6evlIOgg6O307vDs4Pbo/iDuIO3l7C4KKyAgICAgU2hpZnQtRyDv5fDl7OX54OXyIMLg8SDiIOru7eX2IPTg6evgLiDN7uzl8Cwg5+Ag6u7y7vD77CDx6+Xk8+XyIFNoaWZ0LUcKKyAgICAg7+7n4u7r/+XyIO/l8OXp8ugg6iDx8vDu6uUg8SD98ujsIO3u7OXw7uwuCisKKyAgMi4gzeDm4PLo5SAvIOgg5+Dy5ewg4uLu5CDx8vDu6ugg7+7n4u7r/+XyIO/w7ujn4uXx8ugg7+7o8eog/fLu6SDx8vDu6ugKKyAgICAgws/F0MXEIO/uIPLl6vHy8y4KKyAgICAgzeDm4PLo5SA/IOgg5+Dy5ewg4uLu5CDx8vDu6ugg7+7n4u7r/+XyIO/w7ujn4uXx8ugg7+7o8eog/fLu6SDx8vDu6ugKKyAgICAgzcDHwMQg7+4g8uXq8fLzLgorICAgICDP7vHr5SDv7ujx6uAg7eDh5fDo8uUgbiDk6/8g7+Xw5fXu5OAg6iDx6+Xk8/755ezzIOL17ubk5e3o/iDo8eru7O7pCisgICAgIPHy8O7q6CDiIPLu7CDm5SDt4O/w4OLr5e3o6CDo6+ggU2hpZnQtTiDk6/8g7+Xw5fXu5OAg4iDv8O7y6OLu7+7r7ubt7uwKKyAgICAg7eDv8ODi6+Xt6OguCisKKyAgMy4gzeDm4PLo5SAlICwg6u7j5OAg6vPw8e7wIO3g9e7k6PLx/yDt4CAoLCksWyxdLHssIOjr6CB9IO/u5+Lu6//l8iDt4Ony6AorICAgICDv4PDt8/4g8eru4erzLgorCisgIDQuIMTr/yDv7uTx8uDt7uLq6CBg8fLg6+4nIOLs5fHy7iDv5fDi7uPuIGDh++vuJyDiIPHy8O7q5Swg7eDh5fDo8uUKKyAgICAgOnMvb2xkL25ldworICAgICDE6/8g7+7k8fLg7e7i6uggYPHy4OvuJyDi7OXx8u4g4vHl9SBg4fvr7icg4iDx8vDu6uUsIO3g4eXw6PLlCisgICAgIDpzL29sZC9uZXcvZworICAgICDE6/8g5+Ds5e37IOIg6O3y5fDi4OvlIOzl5uTzIOTi8+z/IPHy8O7q4OzoLCDt4OHl8Ojy5QorICAgICA6Iywjcy9vbGQvbmV3L2cKKyAgICAgxOv/IOfg7OXt+yDi8eX1IOL17ubk5e3o6SBg4fvr7icg7eAgYPHy4OvuJyDiIPTg6evlLCDt4OHl8Ojy5QorICAgICA6JXMvb2xkL25ldy9nCisgICAgINfy7uH7IPDl5ODq8u7wIOrg5uT76SDw4Ocg5+Dv8OD46OLg6yDv7uTy4uXw5uTl7ejlLCDk7uHg4vzy5SAnYycKKyAgICAgOiVzL29sZC9uZXcvZ2MKK35+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+fgorCQkgICDT8O7qIDUuMTogysDKIMLbz87LzcjS3CDCzcXYzd7eIMrOzMDNxNMKKworCisgICAgKiogzeDh5fDo8uUgOiEg6CDn4PLl7CDi7eX47f7+IOru7ODt5PMsIOru8u7w8/4g8evl5PPl8iDi++/u6+3o8vwuICoqCisKKyAgMS4gzeDh5fDo8uUg8+blIOft4Oru7PP+IMLg7CDq7uzg7eTzIDog5Ov/IPPx8uDt7uLq6CDq8/Dx7vDgIOIg6u7s4O3k7fP+CisgICAgIPHy8O7q8yDw5eTg6vLu8OAuIN3y7iDv7ufi7uvo8iDC4Owg4uLl8fLoIOru7ODt5PMuCisKKyAgMi4g0uXv5fD8IO3g4eXw6PLlIPHo7OLu6yAhICji7vHq6+j24PLl6/zt++kg5+3g6ikuINLl7+Xw/CDs7ubt7iDo8e/u6+3o8vwKKyAgICAg4u3l+O3+/iDq7uzg7eTzLCDo8e/u6/zn8/8g6u7s4O3k7fP+IO7h7uvu9+rzLgorCisgIDMuIMTr/yDv8Ojs5fDgIO3g4eXw6PLlIGxzIO/u8evlICEg6CDt4Obs6PLlIDxFTlRFUj4uIN3y4CDq7uzg7eTgIOL74uXk5fIKKyAgICAg8e/o8e7qIPTg6evu4iDiIPLl6vP55ewg6uDy4Ovu4+UsIPLu9+3uIPLg6ublLCDq4Oog5fHr6CDh+yDC+yDi4uXr6CD98vMKKyAgICAg6u7s4O3k8yDiIO/w6OPr4Pjl7ejoIO7h7uvu9+roLiDI6+gg7+7v8O7h8+ny5SA6IWRpciAsIOXx6+gg7/Dl5Pvk8/ng/worICAgICDq7uzg7eTgIO3lIPHw4OHu8uDr4C4KKworLS0tPiDH4Ozl9+Dt6OU6INLg6ujsIPHv7vHu4e7sIOzu5u3uIOL77+7r7ejy/CDr/uHz/iDi7eX47f7+IOru7ODt5PMuCisKKy0tLT4gx+Ds5ffg7ejlOiDC8eUg6u7s4O3k+ywg7eD36O3g/vno5fH/IPEgOiAsIOTu6+bt+yDn4OLl8Pjg8vzx/yDt4Obg8ujl7AorICAgICA8RU5URVI+LgorCisKK35+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+fgorCQkJINPw7uogNS4yOiDKwMogx8DPyNHA0twg1MDJyworCisKKyoqIMTr/yDx7vXw4O3l7ej/IOjn7OXt5e3o6Swg7/Du6Ofi5eTl7e379SDiIPTg6evlLCDt4OHl8Ojy5SA6dyDIzN9f1MDJy8AuICoqCisKKyAgMS4gzeDh5fDo8uUgOiFkaXIg6OvoIDohbHMg5Ov/IO/u6/P35e3o/yDx7+jx6uAg9ODp6+7iIOIg8uXq8/nl7CDq4PLg6+7j5S4KKyAgICAgyuDqIMLg7CDz5uUg6Ofi5fHy7e4sIML7IOTu6+bt+yDt4Obg8vwgPEVOVEVSPiDv7vHr5SDi4u7k4CD98uj1IOru7ODt5C4KKworICAyLiDP8Ojk8+zg6fLlIO3g5+Lg7ejlIOTr/yD04Onr4Cwg6u7y7vDu5SDl+eUg7eUg8fP55fHy4vPl8iwg7eDv8Ojs5fAgVEVTVC4KKworICAzLiDS5e/l8Pwg7eDh5fDo8uUgOncgVEVTVCAo4+TlIFRFU1QgLS0tIP3y7iDo7P8g9ODp6+AsIO/w6OTz7ODt7e7lIMLg7OguKQorCisgIDQuIN3y4CDq7uzg7eTgIPHu9fDg7ejyIOLl8fwg9ODp6yAo0/fl4e3o6iDv7iBWaW0pIO/u5CDo7OXt5ewgVEVTVC4g1/Lu4fsKKyAgICAg8+Tu8fLu4uXw6PL88f8g4iD98u7sLCDx7e7i4CDt4OHl8Ojy5SA6IWRpciDoIO/w7vHs7vLw6PLlIOrg8uDr7uMuCisKKy0tLT4gx+Ds5fL88uUsIPfy7iDl8evoIML7IOL76eTl8uUg6OcgVmltIOgg5+Dy5ewg5+Dv8/Hy6PLlIOXj7iDx7e7i4CDxCisgICAgIPTg6evu7CBURVNULCD98u7yIPTg6esg4fPk5fIg8u737e7pIOru7+jl6SDz9+Xh7ejq4CDiIPLu8iDs7uzl7fIsIOru4+TgCisgICAgIML7IOXj7iDx7vXw4O3o6+guCisKKyAgNS4g0uXv5fD8IPPk4Ovo8uUg/fLu8iD04OnrLCDt4OHw4OIgOiFkZWwgVEVTVAorCisKK35+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+fgorCQkgICAgICAg0/Du6iA1LjM6IMLbwc7QztfNzsUg0c7V0MDNxc3IxQorCisKKwkgKiogxOv/IPHu9fDg7eXt6P8g9+Dx8ugg9ODp6+AsIO3g4eXw6PLlIDojLCMgdyDIzN9f1MDJy8AgKioKKworICAxLiDF+eUg8ODnIO3g4eXw6PLlIDohZGlyIOjr6CA6IWxzIOTr/yDv7uvz9+Xt6P8g8e/o8ergIPTg6evu4iDiIPLl6vP55ewKKyAgICAg6uDy4Ovu4+Ug6CDi++Hl8Ojy5SDv7uT17uT/+eXlIOjs/ywg7eDv8Ojs5fAgVEVTVC4KKworICAyLiDP5fDl7OXx8ujy5SDq8/Dx7vAg6iDt4Pfg6/Mg/fLu6SDx8vDg7ej2+yDoIO3g5uzo8uUgQ3RybC1nIOTr/yDt4PXu5uTl7ej/CisgICAgIO3u7OXw4CDx8vDu6uh0by4gx8DPzszNyNLFIN3SztIgzc7MxdAhCisKKyAgMy4g0uXv5fD8IO/l8OXs5fHy6PLl8fwg4iDq7u3l9iDx8vDg7ej2+yDoIOLt7uL8IO3g4eXw6PLlIEN0cmwtZy4gx8DPzszNyNLFCisgICAgIMgg3dLO0iDNzszF0CDSzsbFIQorCisgIDQuIMTr/yDx7vXw4O3l7ej/INLOy9zKziDXwNHSyCD04Onr4CDt4OHl8Ojy5SA6IywjIHcgVEVTVCAsIOPk5SAjLCMgLS0tIP3y7gorICAgICDt7uzl8OAsIOru8u7w++Ugwvsg5+Dv7uzt6OvoICjt4Pfg6+4sIOru7eX2KSwg4CBURVNUIC0tLSDo7P8g4uD45ePuIPTg6evgLgorCisgIDUuIMrg6iDoIO/w5ebk5Swg8+Hl5Ojy5fH8IOIg7eDr6Pfo6CD98u7j7iD04Onr4CDq7uzg7eTu6SA6IWRpciAsIO3uIM3FCisgICAgINPEwMvfydLFIOXj7i4KKworCisKK35+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+fgorCQkgICAg0/Du6iA1LjQ6INfSxc3IxSDIIM7B2sXEyM3FzcjFINTAycvOwgorCisJICAqKiDE6/8g4vHy4OLq6CDx7uTl8Obo7O7j7iD04Onr4Cwg7eDh5fDo8uUgIDpyIEZJTEVOQU1FICoqCisKKyAgMS4gzeDh5fDo8uUgOiFkaXIg5Ov/IPLu4+4sIPfy7uH7IPPh5eTo8vzx/yDiIPLu7Cwg9/LuIPTg6esgVEVTVCDi8eUg5fnlCisgICAgIPHz+eXx8uLz5fIuCisKKyAgMi4g0/Hy4O3u4ujy5SDq8/Dx7vAg4iDi5fD17eXpIPfg8fLoIP3y7ukg8fLw4O3o9vsuCisKK8fg7OX34O3o5Togz+7x6+Ug4vvv7uvt5e3o/yD44OPgIDMgwvsg8+Lo5Ojy5SDT8O7qIDUuMy4Jz+7x6+Ug/fLu4+4KKwkgICDv5fDl7OX54Ony5fH8IMLNyMcsIPHt7uLgIOog/fLu7PMg8/Du6vMuCisKKyAgMy4g0uXv5fD8IO/w7vfo8uDp8uUgwuD4IPTg6esgVEVTVCwg6PHv7uv85/P/IOru7ODt5PMgOnIgVEVTVCAsIOPk5QorICAgICBURVNUIC0tLSD98u4g6Oz/IPTg6evgLgorCivH4Ozl9+Dt6OU6IM/w7vfo8uDt7fvpIMLg7Ogg9ODp6yDh8+Tl8iDi8fLg4uvl7SDiIPLu7CDs5fHy5Swg4+TlIO3g9e7k6PLx/worCSAgIOrz8PHu8C4KKworICA0LiDX8u7h+yDz4eXk6PL88f8g4iDy7uwsIPfy7iD04OnrIO/w7vfo8uDtLCDv5fDl7OXx8ujy5fH8IO3l7O3u4+4g7eDn4OQg7+4KKyAgICAg8uXq8fLzIOggG1tBG1tC5+Ds5fL88uUsIPfy7iDy5e/l8Pwg8fP55fHy4vP+8iDk4uUg6u7v6Ogg0/Du6uAgNS4zLCDo8fXu5O3g/worICAgICDoIO/u6/P35e3t4P8g6Ocg9ODp6+AuCisKK35+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+fgorCQkJCdDFx97MxSDT0M7KwCA1CisKKworICAxLiAgOiHq7uzg7eTgICDo8e/u6+3/5fIg4u3l+O3+/iDq7uzg7eTzLgorCisgICAgICDN5eru8u7w++Ug7+7r5eft++Ug7/Do7OXw+zoKKwkgIDohZGlyIC0tLSDi++Lu5OjyIPHv6PHu6iD04Onr7uIg4iDq4PLg6+7j5S4KKwkgIDohZGVsIEZJTEVOQU1FIC0tLSDz5ODr/+XyIPTg6esgRklMRU5BTUUuCisKKyAgMi4gIDp3IEZJTEVOQU1FIOfg7+jx++Lg5fIg8uXq8/no6SDw5eTg6vLo8PPl7PvpIPTg6esg7eAg5Ojx6gorICAgICAg7+7kIOjs5e3l7CBGSUxFTkFNRS4KKworICAzLiAgOiMsI3cgRklMRU5BTUUg8e718ODt/+XyIPHy8O7q6CDu8iAjIOTuICMg4iD04OnrIEZJTEVOQU1FLgorCisgIDQuICA6ciBGSUxFTkFNRSDx9+jy++Lg5fIg8SDk6PHq4CD04OnrIEZJTEVOQU1FIOgg7+7s5fng5fIg5ePuIOIg8uXq8/no6QorICAgICAg9ODp6yDx6+Xk7uwg5+Ag7+7n6Pbo5ekg6vPw8e7w4C4KKworCisKKworCisKKworfn5+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+CisJCQkgINPw7uogNi4xOiDKzszAzcTAINHOx8TAzcjfCisKKworICoqIM3g4eXw6PLlIG8g9/Lu4fsg8e7n5ODy/CDv8/Hy8/4g8fLw7urzIO/u5CDq8/Dx7vDu7CDoIO/l8OXp8ugg4iDw5ebo7AorCQkJICAg4vHy4OLq6CAoSW5zZXJ0IG1vZGUpICoqCisKKyAgMS4gz+Xw5ezl8fLo8uUg6vPw8e7wIOLt6OcsIOog8fLw7urlLCDv7uzl9+Xt7e7pIC0tLT4uCisKKyAgMi4gzeDh5fDo8uUgbyAo4iDt6Obt5ewg8OXj6PHy8OUpIOTr/yDy7uPuLCD38u7h+yDx7ufk4PL8IO/z8fLz/iDx8vDu6vMKKyAgICAgzcjGxSDq8/Dx7vDgIOgg7+Xw5eny6CDiIPDl5ujsIOLx8uDi6uggKEluc2VydCBtb2RlKS4KKworICAzLiDS5e/l8Pwg8eru7+jw8+ny5SDv7uzl9+Xt7fP+IC0tLT4g8fLw7urzIOgg7eDm7Ojy5SA8RVNDPiDk6/8g4vv17uTgIOjnCisgICAgIPDl5ujs4CDi8fLg4uroLgorCistLS0+IM/u8evlIO3g5uDy6P8gbyDq8/Dx7vAg7+Xw5enk5fIg7eAg7e7i8/4g7/Px8vP+IPHy8O7q8yDiIPDl5ujs5SDi8fLg4uroLgorCisgIDQuIMTr/yDx7ufk4O3o/yDx8vDu6uggwtvYxSDq8/Dx7vDgLCDv8O7x8u4g7eDh5fDo8uUg5+Dj6+Di7fP+IE8sIOLs5fHy7gorICAgICDx8vDu9+3u6SBvLiDP7u/w7uHz6fLlIO/w7uTl6+Dy/CD98u4g8SDt6Obl8evl5PP++eXpIPHy8O7q7ukuCivR7ufk4Ony5SDt7uLz/iDx8vDu6vMg7eDkIP3y7uksIO3g5uDiIFNoaWZ0LU8sIO/u7OXx8ujiIOrz8PHu8CDt4CD98vMg8fLw7urzLgorCisKKworCit+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+fn4KKwkJCSDT8O7qIDYuMjogys7MwM3EwCDEzsHAwsvFzcjfCisKKwkgICAgKiogzeDh5fDo8uUgYSAsIPfy7uH7IOLx8uDi6PL8IPLl6vHyIM/O0cvFIOrz8PHu8OAuICoqCisKKyAgMS4gz+Xw5ezl8fLo8uUg6vPw8e7wIOLt6OcsIOIg6u7t5fYg7+Xw4u7pIPHy8O7q6Cwg7+7s5ffl7e3u6SAtLS0+ICwKKyAgICAg7eDh8ODiICQg4iDu4fv37e7sIPDl5ujs5SAoTm9ybWFsIG1vZGUpLgorCisgIDIuIM3g4eXw6PLlIGEgKOIg7ejm7eXsIPDl4+jx8vDlKSDk6/8g5O7h4OLr5e3o/yDy5erx8uAgz87Ry8Ug8ejs4u7r4CwKKyAgICAg7eD17uT/+eXj7vH/IO/u5CDq8/Dx7vDu7C4gKMfg4+vg4u3g/yBBIO/u5+Lu6//l8iDk7uHg4ujy/CDiIOru7eX2CisgICAgIPHy8O7q6C4pCisKK8fg7OX34O3o5Tog3fLuIO/u5+Lu6//l8iDo5+Hl5uDy/CDt4Obg8uj/IGkgLCDv7vHr5eTt5ePuIPHo7OLu6+AsIPLl6vHy4CDk6/8KKwkgICDi8fLg4uroLCA8RVNDPiwg6vPw8e7wLeLv8ODi7iwg6Cwg7eDq7u3l9iwgeCAsIO/w7vHy7iDk6/8g8u7j7iwKKwkgICD38u7h+yDk7uHg4ujy/CDy5fHyIOIg6u7t5fYg8fLw7uroIQorCisgIDMuINLl7+Xw/CDn4OLl8Pjo8uUg7+Xw4vP+IPHy8O7q8y4gx+Ds5fL88uUg8uDq5uUsIPfy7iDk7uHg4uvl7ejlIP3y7iDiCisgICAgIPLu9+3u8fLoIPLuIOblIPHg7O7lLCD38u4g6CDw5ebo7CDi8fLg4uroLCDn4CDo8err/vfl7ejl7CDv7ufo9ujoLCDiCisgICAgIOru8u7w8/4g4fPk5fIg4vHy4OLr5e0g8uXq8fIuCisKKy0tLT4g3fLgIPHy8O736uAg7+7n4u7r6PIgwuDsIO/u7/Dg6vLo6u7i4PL88f8KKy0tLT4g3fLgIPHy8O736uAg7+7n4u7r6PIgwuDsIO/u7/Dg6vLo6u7i4PL88f8g4iDk7uHg4uvl7ejoIPLl6vHy4CDiIOru7eX2CisgICAgIPHy8O7q6C4KK35+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+fgorCQkgICAgICAg0/Du6iA2LjM6IMXZxSDOxMjNINHPztHOwSDHwMzFzdsKKworCisgICAgICAgKiogzeDh5fDo8uUg5+Dj6+Di7fP+IFIg5Ov/IOfg7OXt+yDh7uvl5Swg9+XsIO7k7e7j7iDx6Ozi7uvgLiAqKgorCisgIDEuIM/l8OXs5fHy6PLlIOrz8PHu8CDi7ejnLCDqIPHy8O7q5Swg7+7s5ffl7e3u6SAtLS0+LgorCisgIDIuINDg8e/u6+7m6PLlIOrz8PHu8CDiIO3g9+Dr5SDv5fDi7uPuIPHr7uLgLCDu8uvo9+D++eXj7vH/IO7yCisgICAgIPHu7vLi5fLx8uLz/vnl4+4g4iDx6+Xk8/755ekg8fLw7urlLCDv7uzl9+Xt7e7pIC0tLT4gKPHr7uLuICfv7vHr5eTt5eknKS4KKworICAzLiDS5e/l8Pwg7eDh5fDo8uUgUiDoIOfg7OXt6PLlIO7x8uDy7uog8uXq8fLgIOIg7+Xw4u7pIPHy8O7q5Swg7eDh8ODiCisgICAgIO/u4uXw9SDx8uDw7uPuIPLl6vHy4CDy4OosIPfy7uH7IO7h5SDx8vDu6ugg8fLg6+gg7uTo7eDq7uL77OguCisKKy0tLT4gz+Xw4vP+IPHy8O7q8yDs7ubt7iDx8ODi7f/y/CDxIO/u8evl5O3l6Swg6PHv7uv85/P/IOrr4OLo+OguCistLS0+IM/l8OLz/iDx8vDu6vMg7O7m7e4g8fDg4u3/8vwg8SDi8u7w7uksIOjx7+7r/Ofz/yBSIOgg7eDh8ODiIO3u4vvpIPLl6vHyLgorCisgIDQuIM7h8ODy6PLlIOLt6Ozg7ejlLCD38u4g7/DoIO3g5uDy6OggPEVTQz4g5Ov/IOfg4uXw+OXt6P8sIOv+4e7pCisgICAgIO3lIOjn7OXt5e3t++kg8uXq8fIg8e718ODt6PLx/y4KKworCisKKworfn5+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+CisJCQnT8O7qIDYuNDog09HSwM3OwsrAIM/A0MDMxdLQzsIKKworCisqKiDT8fLg7e7i6Owg7+Dw4Ozl8vD7IPLg6iwg9/Lu4fsg6OPt7vDo8O7i4PL8IPDl4+jx8vAg7/DoIO/u6PHq5SDo6+gg5+Ds5e3lICoqCisKKworICAxLiDP7uj56PLlIPHr7uLuICfo4+3u8Ojw7uLg8vwnLCDt4OHw4OI6CisgICAgIC/o4+3u8Ojw7uLg8vwKKyAgICAgz+7i8u7w6PLlIO/u6PHqIO3l8eru6/zq7iDw4OcsIO3g5ujs4P8g6uvg4uj48yBuCisKKyAgMi4gwurr/vfo8uUg7+Dw4Ozl8vAgJ2ljJyAoyOPt7vDo8O7i4PL8IPDl4+jx8vApLCDt4OHw4OI6CisgICAgIDpzZXQgaWMKKworICAzLiDS5e/l8Pwg8e3u4uAg8eTl6+Dp8uUg7+7o8eog8evu4uAgJ+jj7e7w6PDu4uDy/CcsIO3g5uDiOiBuCisgICAgIM/u4vLu8Ojy5SDv7ujx6iDt5fHq7uv86u4g8ODnLCDt4Obo7OD/IOrr4OLo+PMgbgorCisgIDQuIMLq6/736PLlIO/g8ODs5fLw+yAnaGxzZWFyY2gnIOggJ2luY3NlYXJjaCc6CisgICAgIDpzZXQgaGxzIGlzCisKKyAgNS4g0uXv5fD8IO7v//L8IOLi5eTo8uUg6u7s4O3k8yDv7ujx6uAg6CDv7vHs7vLw6PLlLCD38u4g7+7r8/fo8vH/OgorICAgICAv6OPt7vDo8O7i4PL8CisKKworCit+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+fn4KKwkJCQnQxcfezMUg09DOysAgNgorCisKKyAgMS4gzeDm4PLo5SBvIPHu5+Tg5fIg8fLw7urzIM3IxsUg6vPw8e7w4CDoIO/l8OXs5fng5fIg6vPw8e7wIOIg7eXlIOIg8OXm6OzlCisgICAgIOLx8uDi6uguCisgICAgIM3g5uDy6OUg5+Dj6+Di7e7pIE8g8e7n5ODl8iDx8vDu6vMgwtvYxSDx8vDu6ugsIOIg6u7y7vDu6SDt4PXu5Ojy8f8KKyAgICAg6vPw8e7wLgorCisgIDIuIM3g4eXw6PLlIGEg5Ov/IOLx8uDi6ugg8uXq8fLgIM/O0cvFIPHo7OLu6+AsIO3gIOru8u7w7uwg7eD17uTo8vH/IOrz8PHu8C4KKyAgICAgzeDm4PLo5SDn4OPr4OLt7ukgQSDg4vLu7ODy6Pfl8eroIO/l8OXs5fng5fIgwuDxIOTr/yDk7uHg4uvl7ej/IPLl6vHy4AorICAgICDiIOru7eX2IPHy8O7q6C4KKworICAzLiDN4Obg8ujlIOfg4+vg4u3u6SBSIO/l8OXi7uTo8iDC4PEg4iDw5ebo7CDn4Ozl7fsg5O4g8uX1IO/u8Cwg7+7q4CDt5QorICAgICDh8+Tl8iDt4Obg8uAg6uvg4uj44CA8RVNDPiDk6/8g5+Di5fD45e3o/y4KKworICA0LiDN4OHw4OIgIjpzZXQgeHh4IiDi+yDx7O7m5fLlIOLq6/736PL8IO/g8ODs5fLwICJ4eHgiCisKKworCisKKworCisKK35+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+fgorCQkg0/Du6iA3OiDKzszAzcTbIM/Oy9PXxc3I3yDC0dLQzsXNzc7JINHP0MDCysgKKworCSAgICAgICAqKiDI8e/u6/zn8+ny5SDi8fLw7uXt7fP+IPHv8ODi7vft8/4g8ejx8uXs8yAqKgorCisgIFZpbSDu4evg5ODl8iDs7vnt7ukg4vHy8O7l7e3u6SDx7/Dg4u737e7pIPHo8fLl7O7pLiDE6/8g7eD34OvgIO/u7/Du4fPp8uUKKyAg7uTo7SDo5yDy8OX1IOLg8Ojg7fLu4joKKwktIO3g5uzo8uUg6uvg4uj48yA8SEVMUD4gKOXx6+gg8uDq7uLg/yDo7OXl8vH/IO3gIOrr4OLo4PLz8OUpCisJLSDt4Obs6PLlIOrr4OLo+PMgPEYxPiAo5fHr6CDy4Oru4uD/IOjs5eXy8f8g7eAg6uvg4ujg8vPw5SkKKwktIO3g4eXw6PLlICAgOmhlbHAgPEVOVEVSPgorCisgIM3g4eXw6PLlICAgOnEgPEVOVEVSPiAgIPfy7uH7IOfg6vD78vwg7urt7iDx7/Dg4uroLgorCisgIML7IOzu5uXy5SDt4Ony6CDx7/Dg4urzIOTr/yDr/uHu4+4g7+7t//Lo/yDo6+gg6u7s4O3k+ywg7/Du8fLuIOfg5ODiCisgIPHu7vLi5fLx8uLz/vno6SDg8OPz7OXt8iDq7uzg7eTlICI6aGVscCIuIM/u7/Du4fPp8uUg8evl5PP++eXlICjt5SDn4OHz5Pzy5QorICDt4Obg8vwgPEVOVEVSPik6CisKKyAgOmhlbHAgdworICA6aGVscCBjXzxUCisgIDpoZWxwIGluc2VydC1pbmRleAorCisKKworCisKK35+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+fgorCQkgICAgINPw7uogODog0c7HxMDNyMUg0dLA0NLOws7DziDRytDIz9LACisKKwkJCSoqIMLq6/736Owg4u7n7O7m7e7x8uggVmltICoqCisKKyAgVmltIOjs5eXyIO3g7O3u4+4g4e7r/PjlIOLu5+zu5u3u8fLl6Swg9+XsIFZpLCDu5O3g6u4g4e7r/Pjo7fHy4uDuIOjnIO3o9QorICDi++rr/vfl7fsg7+4g8+zu6/fg7ej+LiDE6/8g8u7j7iwg9/Lu4fsg7eD34PL8IOjx7+7r/Ofu4uDy/CDt7uL75QorICDi7ufs7ubt7vHy6CDC4Owg8evl5PPl8iDx7ufk4PL8IPTg6esgInZpbXJjIi4KKworICAxLiDO8vDl5ODq8ujw8+ny5SD04OnrICJ2aW1yYyIsIOXj7iDw4PHv7uvu5uXt6OUg5+Di6PHo8iDu8iDo8e/u6/zn8+Xs7ukKKyAgICAg8ejx8uXs+zoKKworICAgICAgIDplZGl0IH4vLnZpbXJjCQkJ5Ov/IFVuaXgKKyAgICAgICA6ZWRpdCAkVklNL192aW1yYwkJ5Ov/IE1TLVdpbmRvd3MKKworICAyLiDS5e/l8Pwg7/Du9+jy4Ony5SDv8Ojs5fAg9ODp6+AgInZpbXJjIjoKKworICAgICAgIDpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4gx+Dv6Pjo8uUg9ODp6zoKKworICAgICAgIDp3cml0ZQorCisgINLl7+Xw/CDv8Ogg8evl5PP++eXsIOfg7/Px6uUgVmltIOHz5OXyIOLq6/735e3gIO/u5PHi5fLq4CDx6O3y4Orx6PHgLiDC8eUKKyAg7eDx8vDu6eroLCDv8OXk7+736PLg5ez75SDC4OzoLCDs7uPz8iDh+/L8IOTu4eDi6+Xt+yDiIPTg6esgInZpbXJjIi4KKworfn5+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+CisgIM3gIP3y7uwg5+Di5fD44OXy8f8g0/fl4e3o6iBWaW0uIM7tIOH76yDv8OXk7eDn7eD35e0g5Ov/IPLu4+4sIPfy7uH7IOTg8vwKKyAg7uH55eUg7/Dl5PHy4OLr5e3o5SDuIPDl5ODq8u7w5SBWaW0sIOTu8fLg8u737e7lIOTr/yDy7uPuLCD38u7h+yDxIOvl4+ru8fL8/gorICDo8e/u6/zn7uLg8vwg5ePuLiDT9+Xh7ejqIOTg6+XqIO7yIO/u6+3u8vssIO/u8eru6/zq8yBWaW0g6Ozl5fIg7vfl7fwg7O3u4+4KKyAg6u7s4O3kLiDP8O736PLg6fLlIPLl7+Xw/CDw8+ru4u7k8fLi7iDv7uv85+7i4PLl6/86ICI6aGVscCB1c2VyLW1hbnVhbCIuCisKKyAgxOv/IOTg6/zt5en45ePuIPfy5e3o/yDw5eru7OXt5PPl8vH/IOrt6OPgOgorCVZpbSAtIFZpIEltcHJvdmVkIC0gwOLy7vA6IFN0ZXZlIE91YWxsaW5lCisJyOfk4PLl6/w6IE5ldyBSaWRlcnMKKyAg3fLgIOrt6OPgIO/u6+3u8fL8/iDv7vHi//nl7eAgVmltLiDO8e7h5e3t7iDv7uvl5+3gIO3u4uj36uDsLiDR7uTl8Obo8gorICDs7e7m5fHy4u4g7/Do7OXw7uIg6CDo6+v+8fLw4Pbo6S4KKyAgwufj6//t6PLlIO3gIFNlZSBodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy9jbGljazUuaHRtbAorCisgINHr5eTz/vng/yDq7ejj4CDh7uvl5SDv7vfy5e3t7uPuIOLu5/Dg8fLgIOgg7+7x4v/55e3gIOHu6/z45SBWaSwg9+XsIFZpbSwKKyAg7uTt4OruIPLg6ublIPDl6u7s5e3k8+Xy8f86CisJTGVhcm5pbmcgdGhlIFZpIEVkaXRvciAtIMDi8u7wOiBMaW5kYSBMYW1iCisJyOfk4PLl6/w6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcyBJbmMuCisgIN3y7iD17vDu+OD/IOrt6OPgIOTr/yDy7uPuLCD38u7h+yDz5+3g8vwg4vHlLCD38u4g8u7r/OruIOzu5u3uIO/w7uTl6/vi4PL8IPEKKyAgVmkuINjl8fLu5SDo5+Tg7ejlIPLg6ublIOLq6/734OXyIOjt9O7w7OD26P4g7iBWaW0uCisKKyAg3fLu8iDz9+Xh7ejqIOH76yDt4O/o8eDtIE1pY2hhZWwgQy4gUGllcmNlIOggUm9iZXJ0IEsuIFdhcmUsIENvbG9yYWRvIFNjaG9vbAorICBvZiBNaW5lcyDxIOjx7+7r/Ofu4uDt6OXsIOjk5eksIO/w5eTr7ubl7e379SBDaGFybGVzIFNtaXRoLCBDb2xvcmFkbyBTdGF0ZQorICBVbml2ZXJzaXR5LiBFLW1haWw6IGJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdS4KKworICDE7vDg4e7y4O3uIOTr/yBWaW0gQnJhbSBNb29sZW5hYXIuCisKKyAgz+Xw5eLu5DogwO3k8OXpIMro8eXr5eIgPGFfa2lzc2VsQGV1ZG9yYW1haWwuY29tPiwgMjAwMi4KKyAgVHJhbnNsYXRvcjogQW5kcmV5IEtpc2VsZXYgPGFfa2lzc2VsQGV1ZG9yYW1haWwuY29tPiwgMjAwMi4KK35+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+fgpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci90dXRvci5zayBiL3J1bnRpbWUvdHV0b3IvdHV0b3Iuc2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzNDkzYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvdHV0b3Iuc2sKQEAgLTAsMCArMSw4MjEgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAgViBpIHQgYSBqIHQgZSAgIHYgbyAgIFYgSSBNICAgVCB1IHQgbyByIGkgYSBsIGkgICAgLSAgICBWZXJ6aWEgMS41ICAgICAgID0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICBWaW0gamUgdmW1bWkgdv1rb25u/SBlZGl0b3IsIGt0b3L9IG3hIHBy7WxpviB2ZbVhIHBy7Wthem92IG5hIHRvIGFieQorICAgICBtb2hsaSBieXQgdrlldGt5IHBvcO1zYW7pIHZvIHb9dWtlIGFrb3UgamUgdOF0by4gVOF0byB2/XVrYQorICAgICBwb3Bpc3VqZSBkb3N0YXRv6G7pIG1ub75zdHZvIHBy7Wthem92IG5hdG8gYWJ5IGJvbG8gbW++bukgcG91vu12YbsKKyAgICAgVmltIGFrbyB2aWFj+uhlbG92/SBlZGl0b3IuCisKKyAgICAgUHJpYmxpvm79IOhhcyBwb3RyZWJu/SBuYSBwcmVicmF0aWUgdGVqdG8gdv11a3kgamUgMjUtMzAgbWlu+nQsCisgICAgIHrhdmlz7SBuYSB0b20sIGtvtWtvIGplIHN0cuF2ZW7paG8g6GFzdSBzIHByZXNr+rlhdmFu7W0uCisKKyAgICAgUHLta2F6eSB2IGxla2Np4WNoIG1vZGlmaWt1avogdGV4dC4gVnl0dm9yIGvzcGl1IHRvaHRvIHP6Ym9ydSBhYnkKKyAgICAgc2EgbW9obG8gcHJlY3Zp6G92YbsgbmEg8m9tIChwcmkguXRhcnRlICJ2aW10dXRvciIgamUgdG90byBr83BpYSkuCisKKyAgICAgSmUgZPRsZb5pdOkgemFwYW3kdGG7IHNpLCC+ZSB04XRvIHb9dWthIGplIHZ5dHZvcmVu4SBwcmUgdv11a3UKKyAgICAgcG91vu12YW7tbS4gVG8gem5hbWVu4SwgvmUgamUgcG90cmVibukgc2kgcHLta2F6eSB2eXNr+rlhuywgYWJ5IGJvbG8KKyAgICAgdehlbmllIHNwcuF2bmUuIEFrIGxlbiDoaXRhcyB0ZXh0LCBwcu1rYXp5IHphYnVkbmW5IQorCisgICAgIFByZXN2ZWToIHNhLCC+ZSBTaGlmdC1Mb2NrIE5JRUpFIHN0bGHoZW79IGEgc3RsYeh0IGts4XZlc3UKKyAgICAgaiAgbmlla2+1a28ga3LhdCwgYWJ5IHNhIGt1cnpvciBwb3N1bnVsIG5hdG+1a28sIL5lIGxla2NpYSAxLjEKKyAgICAgY2Vsa29tIHphcGxu7SBvYnJhem92a3UuCit+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+fn4KKwkJCUxla2NpYSAxLjE6ICBQT0hZQiBLVVJaT1JPTQorCisKKyAgICoqIFByZSBwb2h5YiBrdXJ6b3J1bSBzdGxh6CBrbOF2ZXN5IGgsaixrLGwgYWtvIGplIHpu4Xpvcm5lbukuICoqCisJICAgICBeCisJICAgICBrCQkgRnVua2NpYTogS2zhdmVzYSBoIGplIG5htWF2byBhIHZ5a29u4SBwb2h5YiBkb7VhdmEuCisgICAgICAgPCBoCSBsICAgPgkgS2zhdmVzYSBsIGplIG5hcHJhdm8gYSB2eWtvbuEgcG9oeWIgZG9wcmF2YS4KKwkgICAgIGoJCSBLbOF2ZXNhIGogdnl6ZXLhIGFrbyC57XBrYSBkb2xlCisJICAgICB2CisgIDEuIFBvaHlidWoga3Vyem9yb20gcG8gb2JyYXpvdmtlLCBr/W0gc2kgbmEgdG8gbmV6dnlrbmW5LgorCisgIDIuIERyviBzdGxh6GVu+iBrbOF2ZXN1IHByZSBwb2h5YiBkb2xlIChqKSwga/1tIHNhIGplaiBmdW5rY2lhIG5lem9wYWt1amUuCistLS0+IFRlcmF6IHNhIHW+IHZpZbkgcG9oeWJvdmG7IG5hIG5hc2xlZHVq+mN1IGxla2NpdS4KKworICAzLiBQb3W+aXTtbSBrbOF2ZXN5IHByZSBwb2h5YiBkb2xlIHByZWpkaSBuYSBMZWtjaXUgMS4yLgorCitQb3pu4W1rYTogQWsgc2kgbmllc2kgaXN0/SB0/W0g6G8gc2kgbmFw7XNhbCwgc3RsYeggPEVTQz4KKwkgIG5hIHByZWNob2QgZG8gbm9ybeFsbmVobyBt82R1LgorCitQb3pu4W1rYTogS3Vyem9yb3bpIGts4XZlc3kgc/ogdGllviBmdW5r6G7pLiBBbGUgcG91vu12YW7tbSBoamtsIHNhIGJ1ZGW5CisJICBzY2hvcG79IHBvaHlib3ZhuyBy/WNobGVquWllLCBrZe8gc2kgenZ5a25luSBpY2ggcG91vu12YbsuCisKK35+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+fgorCQkgICAgIExFS0NJQSAxLjI6IFNQ2qmrQU5JRSBBIFpBVFbBUkFOSUUgVklNVQorCisgICEhIFBPWk7BTUtBOiBQcmVkIHZ5a29uYW7tbSB0/WNodG8ga3Jva292IHNpIHByZejtdGFqIGNlbPogdPp0byBsZWtjaXUgISEKKworICAxLiBTdGxh6CBrbOF2ZXN1IDxFU0M+IChhYnkgc2kgc2EgdehpdGUgbmFjaOFkemFsIHYgbm9ybeFsbm9tIG3zZGUpCisKKyAgMi4gTmFw7bk6CQkJOnEhIDxFTlRFUj4uCisKKy0tLT4gVP1tIHVrb27o7bkgcHLhY3UgcyBlZGl0b3JvbSBCRVogdWxvvmVuaWEgem1pZW4sIGt0b3LpIHNpIHZ5a29uYWwuCisgICAgIEFrIGNoY2W5IHVsb75puyB2eWtvbmFu6SB6bWVueSBhIHVrb27oabsgcHLhY3UgcyBlZGl0b3JvbSBuYXDtuToKKwkJCQk6d3EgICA8RU5URVI+CisKKyAgMy4gS2XvIHNhIGRvc3RhbmW5IG5hIHBy7Wthem92/SByaWFkb2ssIG5hcO25IHBy7Wtheiwga3Rvcv1tIHNhIGRvc3RhbmW5CisgICAgIHNwZbsgZG8gdGVqdG8gdv11a3kuIFRvIG30vmUgYnm7Ogl2aW10dXRvciA8RU5URVI+CisgICAgIFp2eehham5lIHNhIHBvdb7tdmE6CQl2aW0gdHV0b3IgPEVOVEVSPgorCistLS0+ICd2aW0nIHpuYW1lbuEgc3B1c3RlbmllIGVkaXRvcmEgdmltLCAndHV0b3InIGplIG7hem92IHP6Ym9ydSwga3Rvcv0KKyAgICAgY2hjZbkgZWRpdG92YbsuCisKKyAgNC4gQWsgc2kgc2kgdGlldG8ga3Jva3kgc3BvtWFobGl2byB6YXBhbeR0YWwsIHZ5a29uYWoga3Jva3kgMSBhviAzLCBwcmUKKyAgICAgdWtvbuhlbmllIGEgem5vdnUgc3B1c3RlbmllIGVkaXRvcmEuIFBvdG9tIHByZXN18iBrdXJ6b3IgZG9sZSBuYQorICAgICBsZWtjaXUgMS4zLgorfn5+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+CisJCSAgICAgIExla2NpYSAxLjM6IEVESVTBQ0lBIFRFWFRVIC0gTUFaQU5JRQorCisKKyoqIFN0bGHoZW5pZSBrbOF2ZXN5ICB4ICB2IG5vcm3hbG5vbSBt82RlIHptYb5lIHpuYWsgbmEgbWllc3RlIGt1cnpvcmEuICoqCisKKyAgMS4gUHJlc3XyIGt1cnpvciBuab65aWUgbmEgcmlhZG9rIG96bmHoZW79IHpuYehrb3UgLS0tPi4KKworICAyLiBBYnkgc2kgbW9ob2wgb2RzdHLhbmm7IGNoeWJ5LCBwb2h5YnVqIGt1cnpvcm9tIGv9bSBuZXByZWpkZSBuYSB6bmFrLAorICAgICBrdG9y/SBjaGNluSB6bWF6YbsuCisKKyAgMy4gU3RsYegga2zhdmVzdSAgeCAgYWJ5IHNhIHptYXphbCBuZWNoY2Vu/SB6bmFrLgorCisgIDQuIFpvcGFrdWoga3Jva3kgMiBhviA0IGG+IGv9bSB2ZXRhIG5pZWplIHNwcuF2bmEuCisKKy0tLT4gS3JhYXZhIHNrb2/oaWxsYSBjY2V6eiBtZXNpaWFjLgorCisgIDUuIEFrIGplIHZldGEgc3By4XZuYSwgcHJlamRpIG5hIGxla2NpdSAxLjQuCisKK1BPWk7BTUtBOiBOZXNr+rlhaiBzaSB6YXBhbWV05Lsgb2JzYWggdGVqdG8gdv11a3ksIGFsZSBzYSB16CBwb3W+7XZhbu1tLgorCisKKworfn5+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+CisJCSAgICAgTGVrY2lhIDEuNDogRURJVMFDSUEgVEVYVFUgLSBWS0xBREFOSUUKKworCisgICAgKiogU3RsYehlbmllIGts4XZlc3kgIGkgIHYgbm9ybeFsbm9tIG3zZGUgdW1vvvJ1amUgdmtsYWRhbmllIHRleHR1LiAqKgorCisgIDEuIFByZXN18iBrdXJ6b3Igbmm+uWllIG5hIHBydv0gcmlhZG9rIHphIHpuYehrdSAtLS0+LgorCisgIDIuIFByZSB1cHJhdmVuaWUgcHJ26WhvIHJpYWRrdSBkbyByb3ZuYWvpaG8gdHZhcnUgYWtvIGplIGRydWj9IHJpYWRvaywKKyAgICAgcHJlc3XyIGt1cnpvciBuYSBwcnb9IHpuYWsgemEgbWlzdG8sIGtkZSBt4SBiebsgdGV4dCB2bG++ZW79LgorCisgIDMuIFN0bGHoIGts4XZlc3UgIGkgIGEgbmFw7bkgcG90cmVibv0gdGV4dC4KKworICA0LiBQbyBvcHJhdmVu7SBrYb5kZWogY2h5YnksIHN0bGHoIDxFU0M+IHByZSBu4XZyYXQgZG8gbm9ybeFsbmVobyBt82R1LgorICAgICBab3Bha3VqIGtyb2t5IDIgYb4gNCBr/W0gbmllamUgdmV0YSBzcHLhdm5hLgorCistLS0+IFR1IGplIHRleHQgY2j9YmFq+mNpIHRlanRvLgorLS0tPiBUdSBqZSBuZWpha/0gdGV4dCBjaP1iYWr6Y2kgb2QgdGVqdG8g6GlhcnkuCisKKyAgNS4gS2XvIHNhIGRvc3RhdG/obmUgbmF16O25IHZrbGFkYbsgdGV4dCwgcHJlamRpIG5hIG5hc2xlZHVq+mNlIHpocm51dGllLgorCisKKworfn5+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+CisJCQkgICAgICAgWkhSTlVUSUUgTEVLQ0lFIDEKKworCisgIDEuIEt1cnpvciBzYSBwb2h5YnVqZSBwb3W+aXTtbSBrbOF2ZXMgc28gue1wa2FtaSBhbGVibyBrbOF2ZXNtaSBoamtsLgorCSAgaCAoZG8gbGF2YSkJaiAoZG9sZSkJayAoaG9yZSkJbCAoZG9wcmF2YSkKKworICAyLiBQcmUgc3B1c3RlbmllIFZpbXUgKHogcHLta2F6b3bpaG8gcmlhZGt1KSBuYXDtuTogdmltIEZJTEVOQU1FIDxFTlRFUj4KKworICAzLiBOYSB1a29u6GVuaWUgVmltdSBuYXDtuTogPEVTQz4gIDpxISAgPEVOVEVSPiBwcmUgenJ1uWVuaWUgdrlldGv9Y2ggem1pZW4KKyAgICAgICBhbGVibyBuYXDtuTogICA8RVNDPiAgIDp3cSAgIDxFTlRFUj4gICAgcHJlIHVsb75lbmllIHptaWVuLgorCisgIDQuIE5hIHptYXphbmllIHpuYWt1IG5hIG1pZXN0ZSBrdXJ6b3JhIG5hcO25IHYgbm9ybeFsbm9tIG3zZGU6ICB4CisKKyAgNS4gUHJlIHZsb75lbmllIHRleHR1IG5hIG1pZXN0ZSBrdXJ6b3JhIHYgbm9ybeFsbm9tIG3zZGUgbmFw7bk6CisJIGkgICAgIHZrbGFkYW79IHRleHQJPEVTQz4KKworUE9aTsFNS0E6IFN0bGHoZW5pZSA8RVNDPiC7YSBwcmVtaWVzdG7tIGRvIG5vcm3hbG5laG8gbfNkdSBhbGVibyB6cnW57QorCSAgbmVqYWv9IG5lY2hjZW79IGEg6Glhc3Rv6G5lIGRva29u6GVu/SBwcu1rYXouCisKK1RlcmF6IHBva3Jh6HVqIGxla2Npb3UgMi4KKworCit+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+fn4KKwkJCUxla2NpYSAyLjE6IE1hemFjaWUgcHLta2F6eQorCisKKwkgKiogTmFw7XNhbmllIHBy7WthenUgIGR3ICB6bWG+ZSB6bmFreSBkbyBrb25jYSBzbG92YS4gKioKKworMS4gU3RsYeggIDxFU0M+ICBhYnkgc2kgYm9sIGJlenBl6G5lIHYgbm9ybeFsbm9tIG3zZGUuCisKKzIuIFByZXN18iBrdXJ6b3Igbmm+uWllIG5hIHJpYWRvayBvem5h6GVu/SB6bmHoa291IC0tLT4uCisKKzMuIFByZXN18iBrdXJ6b3IgbmEgemHoaWF0b2sgc2xvdmEsIGt0b3LpIGplIHBvdHJlYm7pIHptYXphuy4KKworNC4gTmFw7bkgIGR3ICBhYnkgc2xvdm8gem1pemxvLgorCitQT1pOwU1LQTogUO1zbWVu4SBkdyBzYSB6b2JyYXppYSBuYSBwb3NsZWRub20gcmlhZGt1IG9icmF6b3ZreSB0YWsgYWtvIGljaAorCSAgcO25ZbkuIEFrIHDtuWW5IG5pZehvIHpsZSwgc3RsYeggIDxFU0M+ICBhIHph6G5pIHpub3ZhLgorCistLS0+IFR1IGplIG5pZWtvtWtvIHNsb3YgeuFiYXZhLCBrdG9y6SBuaWUgcGF0cmlhIGxpc3QgZG8gdGVqdG8gdmV0eS4KKworNS4gWm9wYWt1aiBrcm9reSAzIGG+IDQga/1tIHZldGEgbmllamUgc3By4XZuYSBhIHByZWpkaSBuYSBsZWtjaXUgMi4yLgorCisKKworfn5+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+CisJCSAgICAgIExla2NpYSAyLjI6IFZJQUMgTUFaQUPNQ0ggUFLNS0FaT1YKKworCisJICoqIE5hcO1zYW5pZSBwcu1rYXp1IGQkICB6bWG+ZSB6bmFreSBkbyBrb25jYSByaWFka3UgKioKKworMS4gU3RsYeggIDxFU0M+ICBhYnkgc2kgYm9sIGJlenBl6G5lIHYgbm9ybeFsbm9tIG3zZGUuCisKKzIuIFByZXN18iBrdXJ6b3Igbmm+uWllIG5hIHJpYWRvayBvem5h6GVu/SB6bmHoa291IC0tLT4uCisKKzMuIFByZXN18iBrdXJ6b3IgbmEga29uaWVjIHNwcuF2bmVqIHZldHkgKFpBIHBydvogYm9ka3UpLgorCis0LiBOYXDtuSAgICBkJCAgICBhYnkgc2Egem1hemFsaSB6bmFreSBkbyBrb25jYSByaWFka3UuCisKKy0tLT4gTmlla3RvIG5hcO1zYWwga29uaWVjIHRvaHRvIHJpYWRrdSBkdmFrcuF0LiBrb25pZWMgdG9ob3QgcmlhZGt1IGR2YWty4XQuCisKKworNS4gUHJlamRpIG5hIGxla2NpdSAyLjMgcHJlIHBvY2hvcGVuaWUgdG9obyDobyBzYSBzdGFsby4KKworCisKKworCit+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+fn4KKwkJICAgICBMZWtjaWEgMi4zOiBST1qpSVJPVkFDSUUgUFLNS0FaWSBBIE9CSkVLVFkKKworCisgIEZvcm3hdCBtYXphY2llaG8gcHLta2F6dSAgZCAgamUgbmFzbGVkb3Zu/ToKKworICAgW+jtc2xvXSAgIGQgb2JqZWt0ICAgICAgIEFMRUJPICAgICAgZCAgIFvo7XNsb10gICAgb2JqZWt0CisgIEtkZToKKyAgICDo7XNsbyAtIHVk4XZhIGtvtWtvIGty4XQgc2EgcHLta2F6IHZ5a29u4SAodm9saXRltW7pLCBpbXBsaWNpdG5lPTEpCisgICAgZCAtIGplIHBy7WtheiBwcmUgbWF6YW5pZQorICAgIG9iamVrdCAtIHVk4XZhIG5hIOhvbSBzYSBwcu1rYXogdnlrb27hdmEgKHZ5cO1zYW7pIG5pvrlpZSkKKworICBLcuF0a3kgdv1waXMgb2JqZWt0b3Y6CisgICAgdyAtIG9kIGt1cnpvcmEgZG8ga29uY2Egc2xvdmEsIHZy4XRhbmllIG1lZHppZXIKKyAgICBlIC0gb2Qga3Vyem9yYSBkbyBrb25jYSBzbG92YSwgQkVaIG1lZHppZXIKKyAgICAkIC0gb2Qga3Vyem9yYSBkbyBrb25jYSByaWFka3UuCisKK1BPWk7BTUtBOiBBayBzdGxh6O25IGts4XZlc3Ugb2JqZWt0dSB2IG5vcm3hbG5vbSBt82RlIGJleiBwcu1rYXp1LCBrdXJ6b3IKKwkgIHNhIHByZXN1bmllIG5hIG1pZXN0byC5cGVjaWZpa292YW7pIHZvIHb9cGlzZSBvYmpla3Rvdi4KKworCisKKworfn5+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+CisJCUxla2NpYSAyLjQ6IFbdTklNS0EgViAnUFLNS0FaT1ZPTSBPQkpFS1RFJworCisKKwkgICAgKiogTmFw7XNhbmllIHBy7WthenUgICBkZCAgIHptYb5lIGNlbP0gcmlhZG9rLiAqKgorCitWemi1YWRvbSBuYSBmcmVrdmVuY2l1IG1hemFuaWEgY2Vs6WhvIHJpYWRrdSwgc2EgYXV0b3JpIFZpbXUgcm96aG9kbGksCiu+ZSBidWRlIGplZG5vZHVjaLlpZSBtYXphuyBjZWz9IHJpYWRvayBuYXDtc2Fu7W0gZHZvY2ggcO1zbWVuIGQuCisKKzEuIFByZXN18iBrdXJ6b3IgbmEgZHJ1aP0gcmlhZG9rIHYgdGV4dGUgbmEgc3BvZHUuCisyLiBOYXDtuSAgZGQgIGFieSBzaSB6bWF6YWwgcmlhZG9rLgorMy4gUHJlamRpIG5hILl0dnJ0/SByaWFkb2suCis0LiBOYXDtuSAgIDJkZCAgIChwYW1ldGFqIHNpICDo7XNsby1wcu1rYXotb2JqZWt0KSBhYnkgc2kgem1hemFsIGR2YSByaWFka3kuCisKKyAgICAxKSAgUnW+ZSBz+iDoZXJ2ZW7pLAorICAgIDIpICBCbGF0byBqZSB64WJhdm7pLAorICAgIDMpICBGaWFsa3kgc/ogbW9kcuksCisgICAgNCkgIE3hbSBhdXRvLAorICAgIDUpICBIb2Rpbmt5IHVrYXp1avog6GFzLAorICAgIDYpICBDdWtvciBqZSBzbGFka/0sCisgICAgNykgIEEgdG8gc2kgdHkuCisKKworfn5+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+CisJCQlMZWtjaWEgMi41OiBQUs1LQVogVU5ETworCisKKyoqIFN0bGHoICB1ICBwcmUgdnLhdGVuaWUgcG9zbGVkbulobyBwcu1rYXp1LCAgVSAgcHJlIPpwcmF2dSBjZWzpaG8gcmlhZGt1LiAqKgorCisxLiBQcmVzdfIga3Vyem9yIG5pvrlpZSBuYSByaWFkb2sgb3puYehlbv0gem5h6GtvdSAtLS0+IGEgcHJlbWllc3RuaSBobyBuYQorICAgcHJ2+iBjaHlidS4KKzIuIE5hcO25ICB4ICBwcmUgem1hemFuaWUgcHJ26WhvIG5lY2hjZW7paG8gcmlhZGt1LgorMy4gVGVyYXogbmFw7bkgIHUgIOjtbSB2cuF07bkgc3DkuyBwb3NsZWRuZSB2eWtvbmFu/SBwcu1rYXouCis0LiBUZXJheiBvcHJhdiB2uWV0a3kgY2h5YnkgbmEgcmlhZGt1IHBvdb5pdO1tIHBy7WthenUgIHggIC4KKzUuIFRlcmF6IG5hcO25IHZltWvpICAgVSAg6O1tIHZy4XTtuSByaWFkb2sgZG8gcPR2b2Ru6WhvIHN0YXZ1LgorNi4gVGVyYXogbmFw7bkgIHUgIG5pZWtvtWtvIGty4XQsIOjtbSB2cuF07bkgc3DkuyBwcu1rYXogVS4KKzcuIFRlcmF6IG5hcO25IENUUkwtUiAoZHK+IGts4XZlc3UgQ1RSTCBzdGxh6GVu+iBr/W0gc3Rs4ehhuSBSKSBuaWVrb7VrbworICAga3LhdCwg6O1tIHZy4XTtuSBzcOS7IHByZWR0/W0gdnLhdGVu6SBwcu1rYXp5IChyZWRvKS4KKworLS0tPiBPcHByYXYgY2h5YmJ5IG5uYSB0b29tdG8gcmlhZGt1IGEgem1lZfIgaWNoIHBvbW1vY291IHVuZG8uCisKKyAgOC4gVGlldG8gcHLta2F6eSBz+iDoYXN0byBwb3W+7XZhbukuIFRlcmF6IHByZWpkaSBuYSB6aHJudXRpZSBsZWtjaWUgMi4KKworCisKKworfn5+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+CisJCQkgICAgICAgTEVLQ0lBIDIgWkhSTlVUSUUKKworCisgIDEuIFByZSB6bWF6YW5pZSB6bmFrb3Ygb2Qga3Vyem9yYSBkbyBrb25jYSBzbG92YSBuYXDtuTogICBkdworCisgIDIuIFByZSB6bWF6YW5pZSB6bmFrb3Ygb2Qga3Vyem9yYSBkbyBrb25jYSByaWFka3UgbmFw7bk6ICAgZCQKKworICAzLiBQcmUgem1hemFuaWUgY2Vs6WhvIHJpYWRrdSBuYXDtuTogICBkZAorCisgIDQuIEZvcm3hdCBwcmUgcO1rYXogdiBub3LhbG5vbSBt82RlIGplOgorCisgICAgICAgW+jtc2xvXSAgIHBy7WtheiAgIG9iamVrdCAgICBBTEVCTyAgIHBy7WtheiBb6O1zbG9dICAgb2JqZWt0CisgICAgIGtkZToKKyAgICAgICDo7XNsbyAtIHVk4XZhIGtvtWtvIGty4XQgc2EgcHLta2F6IHpvcGFrdWplCisgICAgICAgcHLta2F6IC0gdWThdmEgdnlrb27hdmFu/SBwcu1rYXosIGFrbyBuYXBy7WtsYWQgIGQgIHByZSBtYXphbmllCisgICAgICAgb2JqZWt0IC0gdWThdmEgcm96c2FoIHBy7WthenUsIGFrbyBuYXBy7WtsYWQgIHcoc2xvdm8pLAorCQkkIChkbyBrb25jYSByaWFka3UpLCBhdO8uCisKKyAgNS4gUHJlIHZy4XRlbmllIHNw5LsgcHJlZG+5bGVqIG9wZXLhY2llIG5hcO25OiAgICAgdQkgKG1hbOkgdSkKKyAgICAgUHJlIHZy4XRlbmllIHa5ZXRr/WNoIPpwcmF2IG5hIHJpYWRrdSBuYXDtuTogICAgVQkgKHZltWvpIFUpCisgICAgIFByZSB2cuF0ZW5pZSB2cuF0ZW79Y2gg+nByYXYgbmFw7bk6CSAgICAgQ1RSTC1SCisKK35+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+fgorCQkJIExla2NpYSAzLjE6IFBSzUtBWiBWTE+uSasKKworCisJICAqKiBOYXDtc2FuaWUgcHLta2F6dSAgcCAgdmxvvu0gcHNsZWRu/SB2/W1heiB6YSBrdXJ6b3IuICoqCisKKyAgMS4gUHJlc3XyIGt1cnpvciBuab65aWUgbmEgcHJ2/SByaWFkb2sgdGV4dHUuCisKKyAgMi4gTmFw7bkgIGRkICDo7W0gem1hvmW5IHJpYWRvayBhIHVsb77tuSBobyBkbyBidWZmZXJhIGVkaXRvcmEgVmltLgorCisgIDMuIFByZXN18iBrdXJ6b3Igdnm5uWllIHRhbSwga2FtIHptYXphbv0gcmlhZG9rIHBhdHLtLgorCisgIDQuIEFrIG5hcO25ZbkgdiBub3Jt4Wxub20gbfNkZSAgIHAgICB6bWF6YW79IHJpYWRrIHNhIHZsb77tLgorCisgIDUuIFpvcGFrdWoga3Jva3kgMiBhviA0LCBr/W0gcmlhZGt5IG5pZXP6IHYgc3By4XZub20gcG9yYWTtLgorCisgICAgIGQpIFRpZb4gc2EgZG9r4b5luSB2emRlbOF2Ybs/CisgICAgIGIpIEZpYWxreSBz+iBtb2Ry6SwKKyAgICAgYykgSW50ZWxpZ2VuY2lhIHNhIHZ6ZGVs4XZhLAorICAgICBhKSBSdb5lIHP6IOhlcnZlbuksCisKKworCit+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+fn4KKwkJICAgICAgIExla2NpYSAzLjI6IFBSzUtBWiBOQUhSQURFTklBCisKKworICAgICAqKiBOYXDtc2Fu7W0gIHIgIGEgem5ha3Ugc2EgbmFocmFk7SB6bmFrIG5hIG1pZXN0ZSBrdXJ6b3JhLiAqKgorCisgIDEuIFByZXN18iBrdXJ6b3Igbmm+uWllIG5hIHBydu0gcmlhZG9rIHRleHR1IG96bmHoZW7paG8gem5h6GtvdSAtLS0+LgorCisgIDIuIFByZXN18iBrdXJ6b3IgbmEgemHoaWF0b2sgcHJ2ZWogY2h5YnkuCisKKyAgMy4gbmFw7bkgIHIgIGEgcG90b20gem5haywga3Rvcv0gbmFocmFk7SBjaHlidS4KKworICA0LiBab3Bha3VqIGtyb2t5IDIgYSAzLCBr/W0gcHJ2/SByaWFkb2sgbmllamUgc3By4XZueS4KKworLS0tPiBLYe8gYm9sIHRlbnRvIHJpYXNvayBw7WFhbv0sIG5pZWtybyBzdGxhuWlsIG5lc3By4WJuZSBrbOF2ZXN5IQorLS0tPiBLZe8gYm9sIHRlbnRvIHJpYWRvayBw7XNhbv0sIG5pZWt0byBzdGxh6GlsIG5lc3By4XZuZSBrbOF2ZXN5IQorCisgIDUuIFRlcmF6IHByZWpkaSBuYSBsZWtjaXUgMy4yLgorCitQT1pOwU1LQTogUGFt5HRhaiBzaSwgvmUgbmF16Gm7IHNhIG30vmW5IGxlbiBwb3W+7XZhbmltLCBuaWUgcGFt5HRhbu1tLgorCisKKworfn5+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+CisJCSAgICAgICBMZWtjaWEgMy4zLiBQUs1LQVog2lBSQVZZCisKKworICAgICAqKiBBayBjaGNluSB6bWVuabsg6GFzuyBzbG92YSBhbGVibyBjZWzpIHNsb3ZvLCBuYXDtuSAgY3cgLiAqKgorCisgIDEuIFByZXN18iBrdXJ6b3Igbmm+uWllIG5hIHBydv0gcmlhZG9rIG96bmHoZW79IHpuYehrb3UgLS0tPi4KKworICAyLiBVbWllc3RuaSBrdXJ6b3IgbmEgcO1zbWVubyBvIHYgc2xvdmUgcm9zZnBsLgorCisgIDMuIE5hcO25ICBjdyAgYSBvcHJhdiBzbG92byAodiB0b210byBwcu1wYWRlIG5hcO25ICdpYWRvaycuKQorCisgIDQuIFN0bGHoIDxFU0M+IGEgcHJlamRpIG5hIO9hbLlpdSBjaHlidSAocHJ2/SB6bmFrLCBrdG9y/SB0cmViYSB6bWVuabsuKQorCisgIDUuIFpvcGFrdWoga3Jva3kgMyBhIDQsIGv9bSBwcnbhIHZldGEgbmllamUgcm92bmFr4SBha28gZHJ1aOEuCisKKy0tLT4gVGVudG8gcm9zZnBsIG3hIG5pZWtvtWtvIHNraWMsIGt0b3LpIGplIHBpcmV3dmLtIHptZW5puyBwaXm7dejhbiBwcu1rYXp1LgorLS0tPiBUZW50byByaWFkb2sgbeEgbmlla2+1a28gc2xvdiwga3RvcukgamUgcG90cmVibukgem1lbmm7IHBvdb5pdO1tIHBy7WthenUuCisKK1Bvem7hbWthLCC+ZSAgY3cgIG5pZWxlbiBuYWhy4WR6YSBzbG92bywgYWxlILthIGFqIHByZW1pZXN0bu0gZG8gdmtsYWRhbmlhLgorCisKKworfn5+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+CisJCSAgICAgICBMZWtjaWEgMy40OiBWSUFDIFpNSUVOIFBPVa5JVM1NIGMKKworCisgICAqKiBQcu1rYXogcHJlIPpwcmF2eSBzYSBwb3W+7XZhIHMgcm92bmFr/W1pIG9iamVrdGFtaSBha28gcHJlIG1hemFuaWUgKioKKworICAxLiBQcu1rYXogcHJlIPpwcmF2eSBwcmFjdWplIHJvdm5ha28gYWtvIHByZSBtYXphbmllLiBGb3Jt4XQgamU6CisKKyAgICBb6O1zbG9dICAgYyAgIG9iamVrdCAgICAgICBBTEVCTyAgICAgICBjIFvo7XNsb10gICBvYmpla3QKKworICAyLiBPYmpla3R5IHP6IHJvdm5ha+ksIGFrbyBuYXBy7WtsYWQgIHcgKHNsb3ZvKSwgJCAoa29uaWVjIHJpYWRrdSksIGF07y4KKworICAzLiBQcmVzdfIga3Vyem9yIG5pvrlpZSBuYSBwcnb9IHJpYWRvayBvem5h6GVu/SB6bmHoa291IC0tLT4uCisKKyAgNC4gUHJlc3XyIGt1cnpvciBuYSBwcnb6IGNoeWJ1LgorCisgIDUuIG5hcO25ICBjJCAgYWJ5IHNpIG1vaG9sIHVwcmF2absgenZ5uW9rIHJpYWRrdSBwb2S1YSBkcnVo6WhvCisgICAgIGEgc3RsYeggPEVTQz4uCisKKy0tLT4gS29uaWVjIHRvaHRvIHJpYWRrdSBwb3RyZWJ1amUgcG9tb2MsIGFieSBib2wgYWtvIGRydWh5LgorLS0tPiBLb25pZWMgdG9odG8gcmlhZGt1IHBvdHJlYnVqZSBvcHJhdmm7IHBvdb5pdO1tIHBy7WthenUgIGMkIC4KKworCisKK35+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+fgorCQkJICAgICAgIExFS0NJQSAzIFpIUk5VVElFCisKKworICAxLiBOYSB2bG++ZW5pZSB0ZXh0dSwga3Rvcv0gdb4gYm9sIHptYXphbv0sIG5hcO25ICBwIC4gVG8gdmxvvu0gem1hemFu/QorICAgICB0ZXh0IFpBIGt1cnpvciAoYWsgYm9sIHJpYWRvayB6bWF6YW79IHByZWpkZSBuYSByaWFkb2sgcG9kIGt1cnpvcm9tKS4KKworICAyLiBQcmUgbmFyYWRlbmllIHpuYWt1IG5hIG1pZXN0ZSBrdXJ6b3JhLCBuYXDtuSAgciAgYSBwb3RvbSB6bmFrLCBrdG9y/QorICAgICBuYWhyYWTtIHD0dm9kbv0gem5hay4KKworICAzLiBQcu1rYXogbmEgdXByYXZlbmllIHVtb77ydWplIHptZW5puyC5cGVjaWZpa292YW79IG9iamVrdCBvZCBrdXJ6b3JhCisgICAgIGG+IHBvIGtvbmllYyBvYmpla3R1LiAgbmFwci4gTmFw7bkgIGN3ICDo7W0gem1u7bkgdGV4dCBvZCBwb3rtY2llCisgICAgIGt1cnpvcmEgZG8ga29uY2Egc2xvdmEsIGMkICB6bWVu7SB0ZXh0IGRvIGtvbmNhIHJpYWRrdS4KKworICA0LiBGb3JtYXQgcHJlIG5haHJhZGVuaWUgamU6CisKKwlb6O1zbG9dICAgYyBvYmpla3QJIEFMRUJPCSAgICAgYwkgW+jtc2xvXSAgICBvYmpla3QKKworCitUZXJheiBwcmVqZGkgbmEgbmFsc2VkdWr6Y3UgbGVrY2l1LgorCisKKworfn5+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+CisJCSAgICAgTGVrY2lhIDQuMTogUE9azUNJQSBBIFNUQVRVUyBT2kJPUlUKKworCisgICoqIFN0bGHoIENUUkwtZyBwcmUgem9icmF6ZW5pZSBzdm9qZWogcG967WNpZSB2IHP6Ym9yZSBhIHN0YXR1c3Ugc/pib3J1LgorICAgICBTdGxh6CBTSElGVC1HIHByZSBwcmVjaG9kIG5hIHJpYWRvayB2IHP6Ym9yZS4gKioKKworICBQb3pu4W1rYTogUHJl6O10YWogc2kgY2Vs+iB0+nRvIGxla2NpdSBza/RyIGFrbyB6YehuZbkgdnlrb27hdmG7IGtyb2t5ISEKKworICAxLiBEcr4gc3RsYehlbvoga2zhdmVzdSBDdHJsIGEgc3RsYeggIGcgLiBOYSBzcG9kdSBvYnJhem92a3kgc2Egem9icmF67QorICAgICBzdGF2b3b9IHJpYWRvayBzIG7henZvbSBz+mJvcnUgYSByaWFka29tIG5hIGt0b3JvbSBwcuF2ZSBzaS4gWmFwYW3kdGFqCisgICAgIHNpIHNpIOjtc2xvIHJpYWRrdSBwcmUga3JvayAzLgorCisgIDIuIFN0bGHoIFNoaWZ0LUcg6O1tIHNhIGRvc3RhbmW5IG5hIHNwb2RvayBz+mJvcnUuCisKKyAgMy4gTmFw7bkg6O1zbG8gcmlhZGt1IG5hIGt0b3JvbSBzaSBzYSBuYWNo4WR6YWwgYSBzdGxh6CBTaGlmdC1HLiBUbyC7YQorICAgICB2cuF0aSBuYSByaWFkb2ssIG5hIGt0b3JvbSBzaSBwcnb9IGty4XQgc3RsYehpbCBDdHJsLWcuCisgICAgIChLZe8gcO25Zbkg6O1zbGEsIHRpZXRvIHNhIG5lem9icmF6dWr6IG5hIG9icmF6b3ZrZS4pCisKKyAgNC4gQWsgc2EgY+107bkgc2Nob3Bu/SB2eWtvbmG7IHRldG8ga3Jva3ksIHZ5a29uYWoga3Jva3kgMSBhviAzLgorCisKKworfn5+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+CisJCQlMZWtjaWEgNC4yOiBQUs1LQVogVllIpUFEwVZBTklBCisKKworICAqKiBOYXDtuSAgLyAgbmFzbGVkb3ZhbukgcmW7YXpjb20gcHJlIHZ5aLVhZGFuaWUgcHLtc2x1uW7paG8gcmW7YXpjYS4gKioKKworICAxLiBOYXDtuSB6bmFrICAvICB2IG5vcm3hbG5vbSBt82RlLiBQb3pu4W1rYSwgvmUgdGVudG8gem5hayBzYSBzcG9sdQorICAgICBzIGt1cnpvcm9tIHpvYnJheu0gdiBkb2xuZWog6GFzdGkgb2JyYXpvdmt5IGFrbyBzICA6ICBwcu1rYXpvbS4KKworICAyLiBUZXJheiBuYXDtuSAnZXJycm9vcicgPEVOVEVSPi4gVG8gamUgc2xvdm8sIGt0b3LpIGNoY2W5IHZ5aLVhZGG7LgorCisgIDMuIFByZSB2eWi1YWRhbmllIO9hbLlpZWhvIHb9c2t5dHUgcm92bmFr6WhvIHJlu2F6Y2EsIHN0bGHoIGplZG5vZHVjaG8gIG4uCisgICAgIFByZSB2eWi1YWRhbmllIO9hbLlpZWhvIHb9c2t5dHUgcm92bmFr6WhvIHJlu2F6Y2Egb3Bh6G79bSBzbWVyb20sCisgICAgIG5hcO25IFNoaWZ0LU4uCisKKyAgNC4gQWsgY2hjZbkgdnlotWFkYbsgcmW7YXplYyB2IHNw5HRub20gc21lcmUsIHBvdb7tIHBy7WtheiAgPyAgbWllc3RvCisgICAgIHBy7WthenUgLy4KKworIC0tLT4gS2XvIHZ5aLVhZOF2YW5pZSBkb3NpYWhuZSBrb25pZWMgdG9odG8gc/pib3J1LCBidWRlIHBva3Jh6G92YbsgbmEKKyAgICAgIHph6GlhdGt1LgorCisgICJlcnJyb29yIiBuaWUgamUgc3D0c29iIGFrbyBuYWhyYWRpuyBlcnJvcjsgZXJycm9vciBqZSBlcnJvci4KKworUE9aTsFNS0E6IEtl7yB2eWi1YWThdmFuaWUgZG9zaWFobmUga29uaWVjIHP6Ym9ydSwgYnVkZSBwb2tyYehvdmG7IG5hIGplaG8KKwkgIHph6GlhdGt1LgorCisKK35+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+fgorCSAgICAgTGVrY2lhIDQuMzogVllIpUFEwVZBTklFIFpPRFBPVkVEQUraQ0lDSCBawVRBVk9SSUVLCisKKworCSAqKiBOYXDtuSAgJSAgcHJlIHZ5aLVhZGFuaWUgcHLtc2x1uW7paG8gem5ha3UgKSxdLCBhbGVibyB9IC4gKioKKworICAxLiBQcmVtaWVzdG5pIGt1cnpvciBuYSBob2Nha/0gem8gem5ha292ICgsIFssIGFsZWJvIHsgdiByaWFka3Ugbmm+uWllCisgICAgIG96bmHoZW7paG8gem5h6GtvdSAtLS0+LgorCisgIDIuIFRlcmF6IG5hcO25IHpuYWsgICUgLgorCisgIDMuIEt1cnpvciBzYSBwcmVtaWVzdG5pIG5hIHpvZHBvdmVkYWr6Y3UgeuF0dm9ya3UuCisKKyAgNC4gTmFw7bkgICUgIHByZSBwcmVzdW4ga3Vyem9ydSBzcOS7IG5hIG90duFyYWr6Y3UgeuF0dm9ya3UuCisKKy0tLT4gVG90byAoIGplIHRlc3RvdmFj7SByaWFkb2sgcyAoJ3MsIFsncyBdIGEgeydzIH0gdiByaWFka3UuICkpCisKK1Bvem7hbWthOiBUb3RvIGplIHZltW1pIHb9aG9kbukgcG91vu27IHByaSBsYWRlbu0gcHJvZ3JhbXUgcyBjaP1iYWr6Y2ltaQorCSAgdXphdHbhcmFq+mNpbWkgeuF0dm9ya2FtaS4KKworCisKKworfn5+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+CisJCSAgICAgIExla2NpYSA0LjQ6IFNQT1NPQiBBS08gWk1FTkmrIENIWUJZCisKKworICoqIE5hcO25ICAgOnMvc3Rhcv0vbm92/S9nICBwcmUgbmFocmFkZW5pZSBzbG92YSAnc3Rhcv0nIHphIHNsb3ZvICdub3b9Jy4gKioKKworICAxLiBQcmVzdfIga3Vyem9yIG5pvrlpZSBuYSByaWFkb2sgb3puYehlbv0gem5h6GtvdSAtLS0+LgorCisgIDIuIE5hcO25ICA6cy90aGVlL3RoZSA8RU5URVI+IC4gUG96bmFta2EsIL5lIHRlbnRvIHBy7WtheiB6bWVu7SBsZW4gcHJ2/QorICAgICB2/XNreXQgdiByaWFka3UuCisKKyAgMy4gVGVyYXogbmFw7bkgICA6cy90aGVlL3RoZS9nICAg6G8gem5hbWVu4SBjZWxrb3bpIG5haHJhZGVuaWUgdiByaWFka3UuCisgICAgIFRvdG8gbmFocmFk7SB2uWV0a3kgdv1za3l0eSB2IHJpYWRrdS4KKworLS0tPiBUaGVlIGJlc3QgdGltZSB0byBzZWUgdGhlZSBmbG93ZXJzIGluIHRoZWUgc3ByaW5nLgorCisgIDQuIFByZSB6bWVudSB2uWV0a/1jaCB2/XNreXRvdiBkYW7paG8gcmW7YXpjYSBtZWR6aSBkdm9taSByaWRha2FtaSwKKyAgICAgbmFw7bkgIDojLCNzL3N0YXL9L25vdv0vZyAga2RlICMsIyBz+iDo7XNsYSBkdm9jaCByaWFka292LgorICAgICBuYXDtuSAgOiVzL3N0YXL9L25vdv0vZyAgICBwcmUgem1lbnUgdrlldGv9Y2ggdv1za3l0b3YgdiBjZWxvbSByaWFka3UKKworCisKKworfn5+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+CisJCQkgICAgICAgTEVLQ0lBIDQgWkhSTlVUSUUKKworCisgIDEuIEN0cmwtZyAgdnlw7bllIHR2b2p1IHBveu1jaXUgdiBz+mJvcmUgYSBzdGF0dXMgc/pib3J1LgorICAgICBTaGlmdC1nICC7YSBwcmVtaWVzdG5pIG5hIGtvbmllYyByaWFka3UuIMjtc2xvIHJpYWRrdSBuYXNsZWRvdmFu6QorICAgICBTaGlmdC1nICC7YSBwcmVzdW5pZSBuYSBkYW7pIOjtc2xvIHJpYWRrdS4KKworICAyLiBOYXDtc2FuaWUgIC8gIG5hc2xlZG92YW7pIHJlu2F6Y29tIHZ5aLVhZOEgcmW7YXplYyBzbWVyb20gRE9QUkVEVS4KKyAgICAgTmFw7XNhbmllICA/ICBuYXNsZWRvdmFu6SByZbthemNvbSB2eWi1YWRhIHJlu2F6ZWMgc21lcm9tIERPWkFEVS4KKyAgICAgTmFw7XNhbmllICBuICBwbyB2eWi1YWThdmFu7SwgdnlotWFk4SBuYXNsZWR1avpjaSB2/XNreXQgcmW7YXpjYQorICAgICB2IHJvdm5ha29tIHNtZXJlLCBwcmnob20gIFNoaWZ0LU4gIHZ5aLVhZOEgdiBvcGHobm9tIHNtZXJlLgorCisgIDMuIE5hcO1zYW5pZSAgJSAga2XvIGt1cnpvciBqZSBuYSAoLCksWyxdLHssIGFsZWJvIH0gbuFqZGUgem9kcG92ZGFq+mN1CisgICAgIHDhcvogeuF0dm9ya3UuCisKKyAgNC4gUHJlIG5haHJhZGVuaWUgbm926WhvIHphIHBydv0gc3Rhcv0gdiByaWFka3UgbmFw7bkgICAgOnMvbm92/S9zdGFy/QorICAgICBQcmUgbmFocmFkZW5pZSBub3bpaG8gemEgdrlldGt5IHN0YXLpIHYgcmlhZGt1IG5hcO25ICA6cy9ub3b9L3N0YXL9L2cKKyAgICAgUHJlIG5haHJhZGVuaWUgcmW7YXpjb3YgbWVkemkgZHZvbWEgcmlhZGthbWkgMyBuYXDtuSAgOiMsIy9ub3b9L3N0YXL9L2cKKyAgICAgUHJlIG5haHJhZGVuaWUgdrlldGv9Y2ggdv1za3l0b3YgdiBz+mJvcmUgbmFw7bkgICAgICAgOiVzL3N0YXL9L25vdv0vZworICAgICBQcmUgcG90dnJkZW5pZSBrYb5k6WhvIG5haHJhZGVuaWEgcHJpZGFqICdjJwkgICA6JXMvbm92/S9zdGFy/S9nYworCisKK35+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+fgorCQlMZWtjaWEgNS4xIEFLTyBTUFVTVEmrIFZPTktBSqnNIFBSzUtBWgorCisKKyAqKiBOYXDtuSBwcu1rYXogIDohICBuYXNsZWRvdmFu/SB2b25rYWq57W0gcHLta2F6b20gcHJlIHNwdXN0ZW5pZSBwcu1rYXp1ICoqCisKKyAgMS4gTmFw7bkgb2J2eWts/SBw7WtheiAgOiAga3Rvcv0gbmFzdGF27SBrdXJ6b3IgbmEgc3BvZG9rIG9icmF6b3ZreS4KKyAgICAgVG8gdW1vvm7tIG5hcO1zYbsgcHLta2F6LgorCisgIDIuIFRlcmF6IG5hcO25ICAhICAodv1rcmnobu1rKS4gVG8gdW1vvm7tIHNwdXN0absgaG9jaWFr/SB2b25rYWq57SBwcu1rYXoKKyAgICAgeiBwcu1rYXpvdulobyByaWFka3UuCisKKyAgMy4gQWtvIHBy7WtsYWQgbmFw7bkgIGxzICB6YSAhIGEgc3RsYeggPEVOVEVSPi4gVGVudG8gcHLta2F6CisgICAgIHpvYnJheu0gb2JzYWggdHZvamhvIGFkcmVz4XJhIHJvdm5ha28gYWtvIG5hIHBy7Wthem92b20gcmlhZGt1LgorICAgICBBbGVibyBwb3W+aSAgOiFkaXIgIGFrIGxzIG5lZnVuZ3VqZS4KKworUG96buFta2E6ICBUYWt0byBqZSBtb75u6SBzcHVzdGm7IGhvY2lha/0gdm9ua2Fque0gcHLta2F6LgorUG96buFta2E6ICBWuWV0a3kgcHLta2F6eSAgOiAgbXVzaWEgYnm7IGRva29u6GVu6SBzdGxh6GVu7W0gPEVOVEVSPgorCisKKworCit+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+fn4KKwkJICAgICAgTGVrY2lhIDUuMjogVklBQyBPIFVLTEFEQU7NIFPaQk9ST1YKKworCisgICAgICoqIFByZSB1bG++ZW5pZSB6bWllbiB2IHP6Ym9yZSwgbmFw7bkgIDp3IEZJTEVOQU1FLiAqKgorCisgIDEuIE5hcO25ICA6IWRpciAgYWxlYm8gIDohbHMgIHByZSB2/XBpcyBha3R14WxuZWhvIGFkcmVz4XJhLgorICAgICBVviB2aWW5LCC+ZSBtdXPtuSB6YSB0/W10byBzdGxh6Gm7IDxFTlRFUj4gLgorCisgIDIuIFZ5YmVyIG7hem92IHP6Ym9ydSwga3Rvcv0gRalURSBuZWV4aXN0dWplLgorCisgIDMuIFRlcmF6IG5hcO25OiAgIDp3IFRFU1QgICAoa2RlIFRFU1QgamUgbuF6b3YgdnlicmF06WhvIHP6Ym9ydS4pCisKKyAgNC4gVG8gdWxvvu0gY2Vs/SBz+mJvciAgKFZpbSBUdXRvcikgIHBvZCBu4Xpvdm0gVEVTVC4KKyAgICAgUHJlIG92ZXJlbmllIG5hcO25ICAgOiFkaXIgICAsIOjtbSAgem9icmF67bkgb2JzYWggYWRyZXPhcmEuCisKK1Bvem7hbWthOiC+ZSBhayB1a29u6O25IHBy4WN1IHMgZWRpdG9yb20gVmltIGEgem5vdnUgaG8gc3B1c3TtuSBzIG7henZvbQorCSAgc/pib3J1IFRFU1QsIHP6Ym9yIGJ1ZGUga/NwaWEgdv11a3ksIGtl7yBzaSBobyB1bG++aWwuCisKKyAgNS4gVGVyYXogb2RzdHLh8iBz+mJvciBuYXDtc2Fu7W0gKE1TLURPUyk6ICAgOiFkZWwgVEVTVAorCQkJICAgICBhbGVibyAoVW5peCk6ICAgICA6IXJtIFRFU1QKKworCit+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+fn4KKwkJICAgIExla2NpYSA1LjMgVt1CRVJPVt0gUFLNS0FaIFBSRSBVTE+uRU5JRQorCisKKyAgKiogUHJlIHVsb75lbmllIOhhc3RpIHP6Ym9ydSwgbmFw7bkgICA6IywjIHcgRklMRU5BTUUgKioKKworICAxLiBabm92dSBuYXDtuSAgOiFkaXIgIGFsZWJvICA6IWxzICBwcmUgem9icmF6ZW5pZSBvYnNhaHUgYWt0deFsbmVobworICAgICBhZHJlc+FyYSBhIHZ5YmVyIHZob2Ru/SBz+mJvciBha28gVEVTVC4KKworICAyLiBQcmVzdfIga3Vyem9yIG5hIHZyY2ggdGVqdG8gc3RyYW55IGEgbmFw7bkgIEN0cmwtZyAgcHJlIHZ5aLVhZGFuaWUg6O1zbGEKKyAgICAgdG9odG8gcmlhZGt1LiAgUEFNRVRBSiBTSSBUT1RPIMjNU0xPIQorCisgIDMuIFRlcmF6IHByZWpkaSBuYSBzcG9kb2sgc3RyYW55IGEgbmFw7bkgIEN0cmwtZyAgem5vdnUuIFpBUEFNRVRBSiBTSSDIzVNMTworICAgICBBSiBUT0hUTyBSSUFES1UhCisKKyAgNC4gUHJlIHVsb75lbmllIExFTiDoYXN0aSBz+mJvcnUsIG5hcO25ICAgOiMsIyB3IFRFU1QgIGtkZSAjLCMgc/ogZHZlIOjtc2xhCisgICAgIHphcGFt5HRhbv1jaCByaWFka292ICh2cmNoLCBzcG9kb2spIGEgVEVTVCBqZSBu4XpvdiBz+mJvcnUuCisKKyAgNS4gWm5vdmEgc2EgcG96cmksIOhpIHRhbSB0ZW4gc/pib3IgamUgcG9tb2NvdSBwcu1rYXp1ICAgOiFkaXIgYWxlCisgICAgIE5FT0RTVFJB0lVKIGhvLgorCisKKworfn5+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+CisJCSAgIExla2NpYSA1LjQ6IFbdQkVSIEEgWkxVyE9WQU5JRSBT2kJPUk9WCisKKworCSoqIFByZSB2bG++ZW5pZSBvYnNhaHUgc/pib3J1LCBuYXDtuSAgIDpyIEZJTEVOQU1FICoqCisKKyAgMS4gTmFw7bkgICA6IWRpciAgIGFieSBzaSBzYSBwcmVzdmVk6GlsLCC+ZSBz+mJvciBURVNUIHN04WxlIGV4aXN0dWplLgorCisgIDIuIFByZXN18iBrdXJ6b3IgbmEgdnJjaCB0ZWp0byBzdHJhbnkuCisKK1BPWk7BTUtBOiAgUG8gdnlrb25hbu0ga3Jva3UgMyB1dmlk7bkgTGVrY2l1IDUuMy4gUG90b20gc2EgcHJlc3XyIGRvbGUKKwkgICBuYSB0+nRvIGxla2NpdS4KKworICAzLiBUZXJheiB2bG++IHP6Ym9yIFRFU1QgcG91vml07W0gcHLta2F6dSAgIDpyIFRFU1QgICBrZGUgVEVTVCBqZSBu4XpvdgorICAgICBz+mJvcnUuCisKK1BPWk7BTUtBOiAgU/pib3IsIGt0b3L9IHNpIHZsb75pbCBzYSB2bG++7SBvZCBtaWVzdGEsIGtkZSBzYSBuYWNo4WR6YSBrdXJ6b3IuCisKKyAgNC4gUHJlIGtvbnRyb2x1IHZsb75lbmlhIHP6Ym9ydSwgcHJlc3XyIGt1cnpvciBzcOS7IGEgdrlpbW5pIHNpLCC+ZSB0ZXJhegorICAgICBt4bkgZHZlIGvzcGllIGxla2NpZSA1LjMsIG9yaWdpbuFsIGEgc/pib3JvdvogdmVyeml1LgorCisKKworfn5+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+CisJCQkgICAgICAgTEVLQ0lBIDUgWkhSTlVUSUUKKworCisgIDEuICA6IXBy7WtheiAgc3B1c3TtIHZvbmtharntIHBy7Wthei4KKworICAgICAgTmlla3Rvcukgdnl1vml0ZbVu6SBwcu1rbGFkeSBz+joKKwkoTVNfRE9TKQkgIChVTklYKQorCSA6IWRpcgkJICAgOiFscwkJICAgIC0gIHpvYnJheu0gb2JzYWggYWRyZXPhcmEKKwkgOiFkZWwgRklMRU5BTUUgICAgOiFybSBGSUxFTkFNRSAgICAtICBvZHN0cuFuaSBz+mJvciBGSUxFTkFNRQorCisgIDIuICA6dyBGSUxFTkFNRSAgdWxvvu0gYWt0deFsbnkgc/pib3IgbmEgZGlzayBwb2QgbWVub20gRklMRU5BTUUuCisKKyAgMy4gIDojLCN3IEZJTEVOQU1FICB1bG++7SByaWFka3kgb2QgIyBkbyAjIGRvIHP6Ym9ydSBGSUxFTkFNRS4KKworICA0LiAgOnIgRklMRU5BTUUgIHZ5YmVyaWUgeiBkaXNrdSBz+mJvciBGSUxFTkFNRSBhIHZsb77tIGhvIGRvIGFrdHXhbG5laG8KKyAgICAgIHP6Ym9ydSB6YSBwb3rtY2lvdSBrdXJ6b3JhLgorCisKKworCisKKworCit+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+fn4KKwkJCSBMZWtjaWEgNi4xOiBQUs1LQVogT1RWT1JJqworCisKKyoqIE5hcO25ICBvICBwcmUgdmxvvmVuaWUgcmlhZGt1IHBvZCBrdXJ6b3IgYSBwcmVwbnV0aWUgZG8gdmtsYWRhY2llaG8gbfNkdSAqKgorCisgIDEuIFByZXN18iBrdXJ6b3Igbmm+uWllIG5hIHJpYWRvayBvem5h6GVu/SB6bmHoa291IC0tLT4uCisKKyAgMi4gTmFw7bkgbyAobWFs6SBw7XNtZW5vKSBwcmUgdmxvvmVuaWUg6GlzdOlobyByaWFka3UgcG9kIGt1cnpvcm0KKyAgICAgYSBwcmVwbnV0aWUgZG8gdmtsYWRhY2llaG8gbfNkdS4KKworICAzLiBUZXJheiBza29w7XJ1aiByaWFkb2sgb3puYehlbv0gLS0tPiBhIHN0bGHoIDxFU0M+IHByZSB1a29u6GVuaWUKKyAgICAgdmtsYWRhY2llaG8gbfNkdS4KKworLS0tPiBQbyBuYXDtc2Fu7SAgbyAgc2Ega3Vyem9yIHByZW1pZXN0bu0gbmEgdmxvvmVu/SByaWFkb2sgZG8gdmtsYWRhY2llaG8KKyAgICAgbfNkdS4KKworICA0LiBQcmUgb3R2b3JlbmllIHJpYWRrdSBuYWQga3Vyem9yb20sIGplZG5vdHVjaG8gbmFw7bkgdmW1a+kgIE8gLCBuYW1pZXN0bworICAgICBtYWzpaG8gby4gVnlza/q5YWogc2kgdG8gbmEgbmFzbGVkdWr6Y29tIHJpYWRrdS4KK1Zsb74gcmlhZG9rIG5hZCB0/W10byBuYXDtc2Fu7W0gU2hpZnQtTywga2XvIGt1cnpvciBqZSBuYSB0b210byByaWFka3UuCisKKworCit+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+fgorCQkJTGVrY2lhIDYuMjogUFLNS0FaIFBSSURBqworCisKKwkgICAqKiBOYXDtuSAgYSAgcHJlIHZsb75lbmllIHRleHR1IFpBIGt1cnpvci4gKioKKworICAxLiBQcmVzdfIga3Vyem9yIG5pvrlpZSBuYSBrb25pZWMgcHJ26WhvIHJpYWRrdSBvem5h6GVu6WhvIHpuYehrb3UgLS0tPgorICAgICBuYXDtc2Fu7W0gICQgIHYgbm9ybeFsbm9tIG3zZGUuCisKKyAgMi4gTmFw7bkgIGEgIChtYWzpIHDtc21lbm8pIHByZSBwcmlkYW5pZSB0ZXh0dSBaQSB6bmFrb20gbmEgbWllc3RlCisgICAgIGt1cnpvcmEuIChWZbVr6SBBIHByaWThIG5hIGtvbmllYyByaWFka3UuKQorCitQb3pu4W1rYTogVG90byBvYmNo4WR6YSBw7XNhbmllICBpICwgcG9zbGVkbv0gem5haywgdGV4dCBuYSB2bG++ZW5pZSwgPEVTQz4sCisJICBrdXJ6b3IgZG9wcmF2YSwgYSBuYWtvbmllYywgeCAsIG5hIHByaWThdmFuaWUgbmEga29uaWVjIHJpYWRrdSEKKworICAzLiBUZXJheiBkb2tvbuhpIHBydv0gcmlhZG9rLiBQb3pu4W1rYSwgvmUgcHJpZOF2YW5pZSBqZSB2bGFzdG5lIHJvdm5ha+kKKyAgICAgYWtvIHZrbGFkYWPtIG3zZCwgb2tyZW0gbWllc3RhLCBrZGUgc2EgdGV4dCB2a2xhZOEuCisKKy0tLT4gVGVudG8gcmlhZG9rIHRpIGRvdm+1dWplIG7hY3ZpaworLS0tPiBUZW50byByaWFkb2sgdGkgZG92b7V1amUgbuFjdmlrIHByaWThdmFuaWEgdGV4dHUgbmEga29uaWVjIHJpYWRrdS4KKworCisKK35+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+fgorCQkgICAgTGVrY2lhIDYuMzogSU7dIFNQT1NPQiBOQUhSQURaT1ZBTklBCisKKworICAgICAgKiogTmFw7bkgdmW1a+kgUiBwcmUgbmFocmFkZW5pZSB2aWFjIGFrbyBqZWRu6WhvIHpuYWt1LiAqKgorCisgIDEuIFByZXN18iBrdXJ6b3Igbmm+uWllIG5hIHBydv0gcmlhZG9rIG96bmHoZW79IHpuYehrb3UgLS0tPi4KKworICAyLiBQcmVtaWVzdG5pIGt1cnpvciBuYSB6YehpYXRvayBwcnbpaG8gc2xvdmEsIGt0b3LpIGplIG9kbGm5bukgb2QgZHJ1aOlobworICAgICByaWFka3Ugb3puYehlbulobyAtLS0+IChzbG92byAncG9zbGVkbuEnKS4KKworICAzLiBUZXJheiBuYXDtuSAgUiAgYSBuYWhyYe8genZ5uW9rIHRleHR1IG5hIHBydm9tIHJpYWRrdSBw7XNhbu1tIGNleiBzdGFy/QorICAgICB0ZXh0IHRhaywgYWJ5IHBydv0gcmlhZG9rIGJvbCByb3ZuYWv9IGFrbyBkcnVo/S4KKworLS0tPiBOYSD6cHJhdnUgcHJ26WhvIHJpYWRrdSBkbyB0dmFydSBha28gamUgcG9zbGVkbv0gbmEgc3RyYW5lIHBvdb5pIGts4XZlc3kuCistLS0+IE5hIPpwcmF2dSBwcnbpaG8gcmlhZGt1IGRvIHRhdnJ1IGFrbyBqZSBkcnVo/SwgbmFw7bkgUiBhIG5vdv0gdGV4dC4KKworICA0LiBQb3pu4W1rYSwgvmUgYWsgc3RsYejtuSA8RVNDPiBwcmUgdWtvbuhlbmllLCB2uWV0b2sgbmV6bWVuZW79IHRleHQKKyAgICAgem9zdGFuZS4KKworCisKK35+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+fgorCQkJIExla2NpYSA2LjQ6IE5BU1RBVkVOSUUgTU+uTk9TVM0KKworCisqKiBOYXN0YXYgbW++bm9zdGksIHRha75lIHZ5aLVhZOF2YW5pZSBhbGVibyBuYWhyYWR6b3ZhbmllIGlnbm9ydWplCisgICByb3psablvdmFuaWUgKioKKworCisgIDEuIFZ5aLVhZGFqIHJlu2F6ZWMgJ2lnbm9yZScgbmFw7XNhbu1tOgorICAgICAvaWdub3JlCisgICAgIFpvcGFrdWogdnlotWFk4XZhbmllIG5pZWtvtWtvIGty4XQgc3RsYehlbu1tIGts4XZlc3kgbgorCisgIDIuIE5hc3RhdiBtb75ub3O7ICdpYycgKElnbm9yZSBjYXNlKSBuYXDtc2Fu7W0gcHLta2F6dToKKyAgICAgOnNldCBpYworCisgIDMuIFRlcmF6IHZ5aLVhZGFqIHJlu2F6ZWMgJ2luZ29yZScgem5vdmEgc3RsYehlbu1tIGts4XZlc3k6IG4KKyAgICAgWm9wYWt1aiB2eWi1YWThdmFuaWUgbmlla2+1a28ga3LhdCBzdGxh6GVu7W0ga2zhdmVzeSBuCisKKyAgNC4gTmFzdGF2IG1vvm5vc7tpICdobHNlYXJjaCcgYSAnaW5jc2VhcmNoJzoKKyAgICAgOnNldCBobHMgaXMKKworICA1LiBUZXJheiBzcHVzdGkgdnlotWFk4XZhY+0gcHLta2F6IHpub3Z1LCBhIHBvenJpIOhvIHNhIHN0YWxvOgorICAgICAvaWdub3JlCisKKyAgNi4gTmEgb2RzdHLhbmVuaWUgenb9cmF6bmVuaWEgdv1yYXpvdiBuYXDtuToKKyAgICAgOm5vaGxzZWFyY2gKKworfn5+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+CisJCQkgICAgICBMRUtDSUEgNiBaSFJOVVRJRQorCisKKyAgMS4gTmFw7XNhbu1tICBvICBzYSBvdHZvcu0gbm92/SByaWFkb2sgcG9kIGt1cnpvcm9tIGEgcHJlbWllc3RuaSBzYSBrdXJ6b3IKKyAgICAgbmEgdmxvvmVu/SByaWFkb2sgZG8gdmtsYWRhY2llaG8gbfNkdS4KKyAgICAgbmFw7XNhbu1tIHZltWvpaG8gIE8gIHNhIG90dm9y7SByaWFkb2sgbmFkIGFrdHXhbG55bSByaWFka29tIHMga3Vyem9yb20uCisKKyAgMi4gTmFw7bkgIGEgIHByZSB2a2xhZGFuaWUgdGV4dHUgWkEgem5hayBuYSBwb3rtY2lpIGt1cnpvcnUuCisgICAgIE5hcO1zYW7tbSB2ZbVr6WhvICBBICBzYSB0ZXh0IGF1dG9tYXRpY2v9IHByaWThdmEgbmEga29uaWVjIHJpYWRrdS4KKworICAzLiBOYXDtc2FuaWUgdmW1a+lobyAgUiAgcHJlcG5lIGRvIG5haHJhZHpvdmFjaWVobyBt82R1LCBr/W0gbmllamUKKyAgICAgc3RsYehlbukgPEVTQz4gcHJlIHVrb27oZW5pZSBuYWhyYWR6b3ZhY2llaG8gbfNkdS4KKworICA0LiBOYXDtc2FuaWUgIjpzZXQgeHh4IiBuYXN0YXbtIG1vvm5vc7sgInh4eCIuCisKKworCisKKworCisKKworfn5+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+CisJCSAgICBMRUtDSUEgNzogUFLNS0FaWSBPTi1MSU5FIE7BUE9WRURZCisKKworCSAgKiogUG91vu12YWogb24tbGluZSBzeXN06W0gbuFwb3ZlZHkgKioKKworICBWaW0gbeEgb2JzaWFobHkgb24tbGluZSBzeXN06W0gbuFwb3ZlZHkuIFByZSBvZLl0YXJ0b3ZhbmllLCB2eXNr+rlhaiBqZWRlbgorICB6IHT9Y2h0byB0cm9jaDoKKwktIHN0bGHoIGts4XZlc3UgPEhFTFA+IChhayBuZWpha/ogbeG5KQorCS0gc3RsYegga2zhdmVzdSA8RjE+IChhayBuZWpha/ogbeG5KQorCS0gbmFw7bkgIDpoZWxwIDxFTlRFUj4KKworICBOYXDtuSAgOnEgPEVOVEVSPiAg6O1tIHphdHZvcu25IG9rbm8gbuFwb3ZlZHkuCisKKyAgTfS+ZbkgbuFqc7sgaGVscCBrdSBob2NpYWtlaiB06W1lIHByaWRhbu1tIGFyZ3VtZW50dSBrdSBwcu1rYXp1ICI6aGVscCIuCisgIFZ5c2v6uWFqIHRpZXRvIChuZXphYnVkbmkgc3RsYehpuyA8RU5URVI+KToKKworCTpoZWxwIHcKKwk6aGVscCBjXzxUCisJOmhlbHAgaW5zZXJ0LWluZGV4CisJOmhlbHAgdXNlci1tYW51YWwKKworCit+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+fn4KKwkJIExFS0NJQSA4OiBWWVRWT1JFTklFIKlUQVJUT1ZBQ0lFSE8gU0tSSVBUVQorCisJCSAgICAgICAqKiBaYXBuaSBmdW5rY2llIGVkaXRvcmEgVmltICoqCisKKyAgVmltIG3hIG9tbm9obyB2aWFjIGZ1bmtjaWkgbmW+IFZpLCBhbGUgdmXouWluYSB6IG5pY2ggamUgaW1wbGljaXRuZQorICB2eXBudXThLiBQcmUgcG91vu12YW5pZSB2aWFjIFZpbSBmdW5rY2lpIHZ5dHZvciAidmltcmMiIHP6Ym9yLgorCisgIDEuIFph6G5pIGVkaXRvdmG7ICJ2aW1yYyIgc/pib3IsIHRvIHrhdmlz7SBuYSBwb3W+aXRvbSBzeXN06W1lOgorCTplZGl0IH4vLnZpbXJjICAgICAgcHJlIFVuaXgKKwk6ZWRpdCAkVklNL192aW1yYyAgIHByZSBNUy1XaW5kb3dzCisKKyAgMi4gVGVyYXogc2kgcHJl6O10YWogdGV4dCBwcu1rbGFkdSAidmltcmMiIHP6Ym9ydToKKworCTpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4gVWxvviBz+mJvcjoKKworCTp3cml0ZQorCisgIFByaSBuYXNsZWR1avpjb20guXRhcnRlIGVkaXRvcmEgVmltIHNhIHBvdb5pamUgenb9cmF68m92YW5pZSBzeW50YXhlLgorICBEbyAidmltcmMiIHP6Ym9ydSBt9L5luSBwcmlkYbsgdrlldGt5IHN2b2plIHVwcmVkbm9zdPJvdmFu6SBuYXN0YXZlbmlhLgorCit+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+fn4KKworICBUb3RvIHZ5bWVkenVqZSB2/XVrdSBWaW11LiBUb3RvIGplIHVy6GVu6SBwcmUgc3RydWNu/SBwcmVotWFkIG8gZWRpdG9yZQorICBWaW0sIPpwbG5lIHBvc3Rh6HVq+mNlIHByZSC1YWhr6SBhIG9ic3Rvam7pIHBvdb7tdmFuaWUgdG9odG8gZWRpdG9yYS4KKyAgVOF0byB2/XVrYSBqZSDvYWxla28gb2Qga29tcGxldG5vc3RpLCBwcmV0b75lIFZpbSBt4SBvbW5vaG8gdmlhY2VqIHBy7Wthem92LgorICBBa28g72FsuWllIHNpIHByZejtdGFqIHW+7XZhdLVza/0gbWFudeFsOiAiOmhlbHAgdXNlci1tYW51YWwiLgorCisgIFByZSDvYWy5aWUg6O10YW5pZSBhILl0+mRpdW0gamUgb2Rwb3L66GFu4SBrbmloYToKKyAgVmltIC0gVmkgSW1wcm92ZWQgLSBvZCBTdGV2ZSBPdWFsbGluZQorICBWeWRhdmF0ZbU6IE5ldyBSaWRlcnMKKyAgUHJ24SBrbmloYSB1cuhlbuEgcHJlIFZpbS4gqXBlY2nhbG5lIHZob2Ru4SBwcmUgemHoaWF0b+hu7Wtvdi4KKyAgT2JzYWh1amUgbW5vvnN0dm8gcHLta2xhZG92IGEgb2Jy4Xprb3YuCisgIFBvenJpIG5hIGh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnL2NsaWNrNS5odG1sCisKKyAgVOF0byBrbmloYSBqZSBzdGFyuWlhIGEgamUgdmlhYyBvIFZpIGFrbyBvIFZpbSwgYWxlIGplIHRpZb4gb2Rwb3L66GFu4ToKKyAgTGVhcm5pbmcgdGhlIFZpIEVkaXRvciAtIG9kIExpbmRhIExhbWIKKyAgVnlkYXZhdGW1OiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMgSW5jLgorICBKZSB0byBkb2Jy4SBrbmloYSBwcmUgeu1za2FuaWUgdmVkb21vc3TtIG8gcHLhY2kgcyBlZGl0b3JvbSBWaS4KKyAgqWllc3RlIHZ5ZGFuaWUgb2JzYWh1amUgdGllviBpbmZvcm3hY2llIG8gZWRpdG9yZSBWaW0uCisKKyAgVOF0byB2/XVrYSBib2xhIG5hcO1zYW7hIGF1dG9ybWkgTWljaGFlbCBDLiBQaWVyY2UgYSBSb2JlcnQgSy4gV2FyZSwKKyAgQ29sb3JhZG8gU2Nob29sIG9mIE1pbmVzIHMgcG91vml07W0gbXm5bGllbm9rIGRvZGFu/W1pIG9kIENoYXJsZXMgU21pdGgsCisgIENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHkuICBFLW1haWw6IGJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdS4KKworICBNb2RpZmlrb3ZhbukgcHJlIFZpbSBvZCBCcmFtIE1vb2xlbmFhci4KKworfn5+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+CisKKyAgUHJla2xhZCBkbyBTbG92ZW7oaW55OiCldWJvuSDIZWxrbworICBlLW1haWw6ICAgICAgIGNlbGJvc0Bpbm1haWwuc2sKKyAgTGFzdCBDaGFuZ2U6ICAyMDA0IEFwciAyOQorICBFbmNvZGluZzoJaXNvODg1OS0yCmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLnN2IGIvcnVudGltZS90dXRvci90dXRvci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmYzZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci90dXRvci5zdgpAQCAtMCwwICsxLDgzMCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSBWIOQgbCBrIG8gbSBtIGUgbiAgdCBpIGwgbCAgaCBhIG4gZCBsIGUgZCBuIGkgbiBnIGUgbiAgaSAgViBpIG0gIC0gVmVyLiAxLjUgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgIFZpbSDkciBlbiB25GxkaWd0IGtyYWZ0ZnVsbCByZWRpZ2VyYXJlIHNvbSBoYXIgbeVuZ2Ega29tbWFuZG9uLCBhbGx0ZvZyCisgICAgIG3lbmdhIGF0dCBm9nJrbGFyYSBpIGVuIGhhbmRsZWRuaW5nIHNvbSBkZW5uYS4gRGVuIGjkciBoYW5kbGVkbmluZ2VuIORyCisgICAgIGdqb3JkIGb2ciBhdHQgZvZya2xhcmEgdGlsbHLkY2tsaWd0IG3lbmdhIGtvbW1hbmRvbiBz5SBhdHQgZHUgZW5rZWx0IHNrYQorICAgICBrdW5uYSBhbnbkbmRhIFZpbSBzb20gZW4gcmVkaWdlcmFyZSBm9nIgYWxsYSDkbmRhbeVsLgorCisgICAgIERlbiBiZXLka25hZGUgdGlkZW4gZvZyIGF0dCBzbHV0ZvZyYSBkZW5uYSBoYW5kbGVkbmluZyDkciAyNS0zMCBtaW51dGVyLAorICAgICBiZXJvZW5kZSBw5SBodXIgbXlja2V0IHRpZCBzb20gbORnZ3MgbmVkIHDlIGV4cGVyaW1lbnRlcmluZy4KKworICAgICBLb21tYW5kb25hIGkgbGVrdGlvbmVybmEga29tbWVyIGF0dCBtb2RpZmllcmEgdGV4dGVuLiBH9nIgZW4ga29waWEgYXYgZGVuCisgICAgIGjkciBmaWxlbiBhdHQg9nZhIHDlIChvbSBkdSBzdGFydGFkZSAidmltdHV0b3Ig5HIgZGV0IGjkciByZWRhbiBlbiBrb3BpYSkuCisKKyAgICAgRGV0IORyIHZpa3RpZ3QgYXR0IGtvbW1hIGlo5WcgYXR0IGRlbiBo5HIgaGFuZGxlZG5pbmdlbiDkciBrb25zdHJ1ZXJhZAorICAgICBhdHQgbORyYSB2aWQgYW525G5kbmluZy4gRGV0IGJldHlkZXIgYXR0IGR1IG3lc3RlIGv2cmEga29tbWFuZG9uYSBm9nIgYXR0CisgICAgIGzkcmEgZGlnIGRlbSBvcmRlbnRsaWd0LiBPbSBkdSBiYXJhIGzkc2VyIHRleHRlbiBz5SBrb21tZXIgZHUgYXR0IGds9m1tYQorICAgICBrb21tYW5kb25hIQorCisgICAgIEb2cnPka3JhIGRpZyBudSBvbSBhdHQgZGluIENhcHMtTG9jayB0YW5nZW50IElOVEUg5HIgYWt0aXYgb2NoIHRyeWNrIHDlCisgICAgIGotdGFuZ2VudGVuIHRpbGxy5GNrbGlndCBt5W5nYSBn5W5nZW4gZvZyIGF0dCBm9nJmbHl0dGEgbWFya/ZyZW4gc+UgYXR0CisgICAgIExla3Rpb24gMS4xIGZ5bGxlciBza+RybWVuIHNr5HJtZW4gaGVsdC4KK35+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+fgorCQkJTGVrdGlvbiAxLjE6IEZMWVRUQSBNQVJL1lJFTgorCisKKyAgICoqIEb2ciBhdHQgZmx5dHRhIG1hcmv2cmVuLCB0cnljayBw5SB0YW5nZW50ZXJuYSBoLGosayxsIHNvbSBpbmRpa2VyYXQuICoqCisJICAgICBeCisJICAgICBrCQlUaXBzOgorICAgICAgIDwgaAkgbCA+CWgtdGFuZ2VudGVuIORyIHRpbGwgduRuc3RlciBvY2ggZmx5dHRhciB0aWxsIHbkbnN0ZXIuCisJICAgICBqCQlsLXRhbmdlbnRlbiDkciB0aWxsIGj2Z2VyIG9jaCBmbHl0dGFyIHRpbGwgaPZnZXIuCisJICAgICB2CQlqLXRhbmdlbnRlbiBzZXIgdXQgc29tIGVuIHBpbCBuZWQuCisgIDEuIEZseXR0YSBydW50IG1hcmv2cmVuIHDlIHNr5HJtZW4gdGlsbHMgZHUga+RubmVyIGRpZyBiZWt25G0uCisKKyAgMi4gSOVsbCBuZWQgdGFuZ2VudGVuIHBpbCBuZWQgKGopIHRpbGxzIGF0dCBkZW4gcmVwZXRlcmFyLgorLS0tPiBOdSB2ZXQgZHUgaHVyIGR1IHRhciBkaWcgdGlsbCBu5HN0YSBsZWt0aW9uLgorCisgIDMuIEZseXR0YSB0aWxsIExla3Rpb24gMS4yLCBtZWQgaGrkbHAgYXYgbmVkIHRhbmdlbnRlbi4KKworTm90ZXJhOiBPbSBkdSDkciBvc+RrZXIgcOUgbuVnb250aW5nIGR1IHNrcmV2LCB0cnljayA8RVNDPiBm9nIgYXR0IHBsYWNlcmEgZGlnCisJZGlnIGkgTm9ybWFsLWzkZ2UuIFNrcml2IHNlZGFuIG9tIGtvbW1hbmRvdC4KKworTm90ZXJhOiBQaWx0YW5nZW50ZXJuYSBib3JkZSBvY2tz5SBmdW5nZXJhLiAgTWVuIG9tIGR1IGFuduRuZGVyIGhqa2wgc+Uga29tbWVyCisJZHUgYXR0IGt1bm5hIGZseXR0YSBvbWtyaW5nIG15Y2tldCBzbmFiYmFyZSwgbuRyIGR1IHbkbCB2YW50IGRpZyB2aWQKKwlkZXQuCisKK35+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+fgorCQkgICAgIExla3Rpb24gMS4yOiBTVEFSVEEgT0NIIEFWU0xVVEEgVklNCisKKworICAhISBOT1RFUkE6IElubmFuIGR1IHV0ZvZyIG7lZ29uIGF2IHB1bmt0ZXJuYSBuZWRhbiwgbORzIGhlbGEgbGVrdGlvbmVuISEKKworICAxLiBUcnljayA8RVNDPi10YW5nZW50ZW4gKGb2ciBhdHQgc2UgdGlsbCBhdHQgZHUg5HIgaSBOb3JtYWwtbORnZSkuCisKKyAgMi4gU2tyaXY6CQkJOnEhIDxFTlRFUj4uCisKKy0tLT4gRGV0dGEgYXZzbHV0YXIgcmVkaWdlcmFyZW4gVVRBTiBhdHQgc3BhcmEgbuVncmEg5G5kcmluZ2FyIGR1IGdqb3J0LgorICAgICBPbSBkdSB2aWxsIHNwYXJhIORuZHJpbmdhcm5hIG9jaCBhdnNsdXRhIHNrcml2OgorCQkJCTp3cSAgPEVOVEVSPgorCisgIDMuIE7kciBkdSBzZXIgc2thbC1wcm9tcHRlbiwgc2tyaXYga29tbWFuZG90IHNvbSB0b2cgZGlnIGluIGkgZGVuIGjkcgorICAgICBoYW5kbGVkbmluZ2VuLiAgRGV0IGthbiB2YXJhOgl2aW10dXRvciA8RU5URVI+CisgICAgIE5vcm1hbHQgdmlsbCBkdSBhbnbkbmRhOgkJdmltIHR1dG9yIDxFTlRFUj4KKworLS0tPiAndmltJyBiZXR5ZGVyIPZwcG5hIHJlZGlnZXJhcmVuIHZpbSwgJ3R1dG9yJyDkciBmaWxlbiBkdSB2aWxsIHJlZGlnZXJhLgorCisgIDQuIE9tIGR1IGhhciBtZW1vcmVyYXQgZGVzc2Egc3RlZyBvY2gga+RubmVyIGRpZyBzauRsdnPka2VyLCBr9nIgZOUgc3RlZ2VuCisgICAgIDEgdGlsbCAzIGb2ciBhdHQgYXZzbHV0YSBvY2ggc3RhcnRhIG9tIHJlZGlnZXJhcmVuLiBGbHl0dGEgc2VkYW4gbmVkCisgICAgIG1hcmv2cmVuIHRpbGwgTGVrdGlvbiAxLjMuCit+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+fn4KKwkJICAgICBMZWt0aW9uIDEuMzogVEVYVCBSRURJR0VSSU5HIC0gQk9SVFRBR05JTkcKKworCisqKiBO5HIgZHUg5HIgaSBOb3JtYWwtbORnZSB0cnljayAgeCAgZvZyIGF0dCB0YSBib3J0IHRlY2tuZXQgdW5kZXIgbWFya/ZyZW4uICoqCisKKyAgMS4gRmx5dHRhIG1hcmv2cmVuIHRpbGwgcmFkZW4gbmVkYW4gbWVkIG1hcmtlcmluZ2VuIC0tLT4uCisKKyAgMi4gRvZyIGF0dCBy5HR0YSBmZWxlbiwgZmx5dHRhIG1hcmv2cmVuIHRpbGxzIGRlbiBzdOVyIHDlIHRlY2tuZXQgc29tIHNrYQorICAgICB0YXMgYm9ydC4gZml4IHRoZSBlcnJvcnMsIG1vdmUgdGhlIGN1cnNvciB1bnRpbCBpdCBpcyBvbiB0b3Agb2YgdGhlCisKKyAgMy4gVHJ5Y2sgcOUJeC10YW5nZW50ZW4gZvZyIGF0dCB0YSBib3J0IGRldCBmZWxha3RpZ2EgdGVja25ldC4KKworICA0LiBVcHByZXBhIHN0ZWcgMiB0aWxsIDQgdGlsbHMgbWVuaW5nZW4g5HIga29ycmVrdC4KKworLS0tPiBLa29uIGhvcHBhZGVlIPZ2dmVyciBt5eVuZW4uCisKKyAgNS4gTnUgbuRyIHJhZGVuIORyIGtvcnJla3QsIGflIHRpbGwgTGVrdGlvbiAxLjQuCisKK05PVEVSQTogTuRyIGR1IGflciBpZ2Vub20gZGVuIGjkciBoYW5kbGVkbmluZ2VuLCBm9nJz9msgaW50ZSBhdHQgbWVtb3JlcmEsIGzkcgorCWdlbm9tIGFuduRuZG5pbmcuCisKKworCit+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+fn4KKwkJICAgICBMZWt0aW9uIDEuNDogVEVYVCBSRURJR0VSSU5HIC0gSU5GT0dOSU5HCisKKworCSAqKiBO5HIgZHUg5HIgaSBOb3JtYWwtbORnZSB0cnljayAgaSAgZvZyIGF0dCBpbmZvZ2EgdGV4dC4gKioKKworICAxLiBGbHl0dGEgbWFya/ZyZW4gdGlsbCBkZW4gZvZyc3RhIHJhZGVuIG5lZGFuIG1lZCBtYXJrZXJpbmdlbiAtLS0+LgorCisgIDIuIEb2ciBhdHQgZ/ZyYSBkZW4gZvZyc3RhIHJhZGVuIGxpa2FkYW4gc29tIGRlbiBhbmRyYSwgZmx5dHRhIG1hcmv2cmVuIHRpbGwKKyAgICAgZGV0IGb2cnN0YSB0ZWNrbmV0IEVGVEVSIGTkciB0ZXh0IHNrYSBpbmZvZ2FzLgorCisgIDMuIFRyeWNrICBpICBvY2ggc2tyaXYgaW4gZGV0IHNvbSBzYWtuYXMuCisKKyAgNC4gTuRyIGR1IHLkdHRhdCBldHQgZmVsIHRyeWNrIDxFU0M+IGb2ciBhdHQg5XRlcmflIHRpbGwgTm9ybWFsLWzkZ2UuCisgICAgIFVwcHJlcGEgc3RlZyAyIHRpbGwgNCBm9nIgYXR0IHLkdHRhIG1lbmluZ2VuLgorCistLS0+IERldCBzYWtucyBo5HIgLgorLS0tPiBEZXQgc2FrbmFzIGxpdGUgdGV4dCBmcuVuIGRlbiBo5HIgcmFkZW4uCisKKyAgNS4gTuRyIGR1IGvkbm5lciBkaWcgYmVrduRtIG1lZCBhdHQgaW5mb2dhIHRleHQsIGflIHRpbGwgc2FtbWFuZmF0dG5pbmdlbgorICAgICBuZWRhbi4KKworCisKK35+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+fgorCQkJICAgICAgIExFS1RJT04gMSBTQU1NQU5GQVRUTklORworCisKKyAgMS4gTWFya/ZyZW4gZmx5dHRhcyBnZW5vbSBhdHQgYW525G5kYSBwaWx0YW5nZW50ZXJuYSBlbGxlciBoamtsLXRhbmdlbnRlcm5hLgorCSBoICh25G5zdGVyKQlqIChuZWQpICAgICAgIGsgKHVwcCkJICAgIGwgKGj2Z2VyKQorCisgIDIuIEb2ciBhdHQgc3RhcnRhIFZpbSAoZnLlbiAlLXByb21wdGVuKSBza3JpdjogIHZpbSBGSUxOQU1OIDxFTlRFUj4KKworICAzLiBG9nIgYXR0IGF2c2x1dGEgVmltIHNrcml2OiAgPEVTQz4gIDpxISAgPEVOVEVSPiAgZvZyIGF0dCBrYXN0YSDkbmRyaW5nYXIuCisJCSAgIEVMTEVSIHNrcml2OiAgPEVTQz4JOndxICA8RU5URVI+ICBm9nIgYXR0IHNwYXJhIORuZHJpbmdhci4KKworICA0LiBG9nIgYXR0IHRhIGJvcnQgdGVja25ldCB1bmRlciBtYXJr9nJlbiBpIE5vcm1hbC1s5GdlIHNrcml2OiAgeAorCisgIDUuIEb2ciBhdHQgaW5mb2dhIHRleHQgdmlkIG1hcmv2cmVuIGkgTm9ybWFsLWzkZ2Ugc2tyaXY6CisJIGkgICAgIHNrcml2IGluIHRleHQJPEVTQz4KKworTk9URVJBOiBHZW5vbSBhdHQgdHJ5Y2thIDxFU0M+IGtvbW1lciBkdSBhdHQgcGxhY2VyYXMgaSBOb3JtYWwtbORnZSBlbGxlcgorCWF2YnJ5dGEgZXR0IGRlbHZpcyBm5HJkaWdza3JpdmV0IGtvbW1hbmRvLgorCitGb3J0c+R0dCBudSBtZWQgTGVrdGlvbiAyLgorCisKK35+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+fgorCQkJTGVrdGlvbiAyLjE6IEJPUlRUQUdOSU5HU0tPTU1BTkRPTgorCisKKwkgICAgKiogU2tyaXYgIGR3ICBm9nIgYXR0IHJhZGVyYSB0aWxsIHNsdXRldCBhdiBldHQgb3JkLiAqKgorCisgIDEuIFRyeWNrICA8RVNDPiAgZvZyIGF0dCBm9nJz5GtyYSBkaWcgb20gYXR0IGR1IORyIGkgTm9ybWFsLWzkZ2UuCisKKyAgMi4gRmx5dHRhIG1hcmv2cmVuIHRpbGwgcmFkZW4gbmVkYW4gbWFya2VyYWQgLS0tPi4KKworICAzLiBGbHl0dGEgbWFya/ZyZW4gdGlsbCBi9nJqYW4gYXYgZXR0IG9yZCBzb20gbeVzdGUgcmFkZXJhcy4KKworICA0LiBTa3JpdiAgIGR3CSBm9nIgYXR0IHJhZGVyYSBvcmRldC4KKworICBOT1RFUkE6IEJva3N05HZlcm5hIGR3IGtvbW1lciBhdHQgc3luYXMgcOUgZGVuIHNpc3RhIHJhZGVuIHDlIHNr5HJtZW4gbuRyCisJZHUgc2tyaXZlciBkZW0uIE9tIGR1IHNrcmV2IG7lZ290IGZlbCwgdHJ5Y2sgIDxFU0M+ICBvY2ggYvZyamEgb20uCisKKy0tLT4gRGV0IORyIGV0dCBu5WdyYSBvcmQgcm9saWdhIGF0dCBzb20gaW50ZSBo9nIgaGVtbWEgaSBkZW4gaORyIG1lbmluZ2VuLgorCisgIDUuIFVwcHJlcGEgc3RlZ2VuIDMgb2NoIDQgdGlsbHMgbWVuaW5nZW4g5HIga29ycmVrdCBvY2ggZ+UgdGlsbCBMZWt0aW9uIDIuMi4KKworCisKK35+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+fgorCQkgICAgICBMZWt0aW9uIDIuMjogRkxFUiBCT1JUVEFHTklOR1NLT01NQU5ET04KKworCisJICAgKiogU2tyaXYgIGQkCWb2ciBhdHQgcmFkZXJhIHRpbGwgc2x1dGV0IHDlIHJhZGVuLiAqKgorCisgIDEuIFRyeWNrICA8RVNDPiAgZvZyIGF0dCBm9nJz5GtyYSBkaWcgb20gYXR0IGR1IORyIGkgTm9ybWFsLWzkZ2UuCisKKyAgMi4gRmx5dHRhIG1hcmv2cmVuIHRpbGwgcmFkZW4gbmVkYW4gbWFya2VyYWQgLS0tPi4KKworICAzLiBGbHl0dGEgbWFya/ZyZW4gdGlsbCBzbHV0ZXQgcOUgZGVuIHLkdHRhIHJhZGVuIChFRlRFUiBkZW4gZvZyc3RhIC4gKS4KKworICA0LiBTa3JpdiAgICBkJCAgICBm9nIgYXR0IHJhZGVyYSB0aWxsIHNsdXRldCBw5SByYWRlbi4KKworLS0tPiBO5WdvbiBza3JldiBzbHV0ZXQgcOUgZGVuIGjkciByYWRlbiB0duUgZ+VuZ2VyLiBkZW4gaORyIHJhZGVuIHR25SBn5W5nZXIuCisKKworICA1LiBH5SB2aWRhcmUgdGlsbCBMZWt0aW9uIDIuMyBm9nIgYXR0IGb2cnN05SB2YWQgZGV0IORyIHNvbSBo5G5kZXIuCisKKworCisKKworfn5+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+CisJCSAgICAgTGVzc29uIDIuMzogS09NTUFORE9OIE9DSCBPQkpFS1QKKworCisgIFN5bnRheGVuIGb2ciAgZCAgcmFkZXJpbmdza29tbWFuZG90IORyIGb2bGphbmRlOgorCisJIFtudW1tZXJdICAgZAlvYmpla3QJICAgIEVMTEVSCSAgICAgZAkgW251bW1lcl0gICBvYmpla3QKKyAgVmFyOgorICAgIG51bW1lciAtIORyIGFudGFsZXQgdXBwcmVwbmluZ2FyIGF2IGtvbW1hbmRvdCAodmFsZnJpdHQsIHN0YW5kYXJkPTEpLgorICAgIGQgLSDkciBrb21tYW5kb3QgZvZyIGF0dCByYWRlcmEuCisgICAgb2JqZWt0IC0g5HIgdmFkIGtvbW1hbmRvdCBrb21tZXIgYXR0IG9wZXJlcmEgcOUgKGxpc3RhZGUgbmVkYW4pLgorCisgIEVuIGtvcnQgbGlzdGEg9nZlciBvYmpla3Q6CisgICAgdyAtIGZy5W4gbWFya/ZyZW4gdGlsbCBzbHV0ZXQgYXYgb3JkZXQsIGlua2x1c2l2ZSBibGFua3N0ZWdldC4KKyAgICBlIC0gZnLlbiBtYXJr9nJlbiB0aWxsIHNsdXRldCBhdiBvcmRldCwgRUogaW5rbHVzaXZlIGJsYW5rc3RlZ2V0LgorICAgICQgLSBmcuVuIG1hcmv2cmVuIHRpbGwgc2x1dGV0IHDlIHJhZGVuLgorCitOT1RFUkE6ICBG9nIgZGVuIOR2ZW50eXJzbHlzdG5lLCBnZW5vbSBhdHQgYmFyYSB0cnlja2EgcOUgb2JqZWt0ZXQgaQorCSBOb3JtYWwtbORnZSAodXRhbiBrb21tYW5kbykgc+Uga29tbWVyIG1hcmv2cmVuIGF0dCBmbHl0dGFzIHNvbQorCSBhbmdpdmV0IGkgb2JqZWt0bGlzdGFuLgorCisKKworCit+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+fn4KKwkJTGVrdGlvbiAyLjQ6IEVUVCBVTkRBTlRBRyBUSUxMICdLT01NQU5ETy1PQkpFS1QnCisKKworCSAgICAgICAqKiBTa3JpdgkgZGQgICBm9nIgYXR0IHJhZGVyYSBoZWxhIHJhZGVuLiAqKgorCisgIFDlIGdydW5kIGF2IGh1ciB2YW5saWd0IGRldCDkciBhdHQgdGEgYm9ydCBoZWxhIHJhZGVyLCB2YWxkZSB1cHBob3ZzbWFubmVuCisgIHRpbGwgVmkgYXR0IGRldCBza3VsbGUgdmFyYSBlbmtsYXJlIGF0dCBiYXJhIHRyeWNrYSBkIHR25SBn5W5nZXIgaSByYWQgZvZyCisgIGF0dCB0YSBib3J0IGVuIHJhZC4KKworICAxLiBGbHl0dGEgbWFya/ZyZW4gdGlsbCBkZW4gYW5kcmEgcmFkZW4gaSBmcmFzZW4gbmVkYW4uCisgIDIuIFNrcml2ICBkZCAgZvZyIGF0dCByYWRlcmEgcmFkZW4uCisgIDMuIEZseXR0YSBudSB0aWxsIGRlbiBmauRyZGUgcmFkZW4uCisgIDQuIFNrcml2ICAgMmRkICAgKGtvbSBpaOVnOiAgbnVtbWVyLWtvbW1hbmRvLW9iamVrdCkgZvZyIGF0dCByYWRlcmEgZGUgdHblCisgICAgIHJhZGVybmEuCisKKyAgICAgIDEpICBSb3NlcyBhcmUgcmVkLAorICAgICAgMikgIE11ZCBpcyBmdW4sCisgICAgICAzKSAgVmlvbGV0cyBhcmUgYmx1ZSwKKyAgICAgIDQpICBJIGhhdmUgYSBjYXIsCisgICAgICA1KSAgQ2xvY2tzIHRlbGwgdGltZSwKKyAgICAgIDYpICBTdWdhciBpcyBzd2VldAorICAgICAgNykgIEFuZCBzbyBhcmUgeW91LgorCisKK35+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+fgorCQkJIExla3Rpb24gMi41OiDFTkdSQS1LT01NQU5ET1QKKworCisqKiBTa3JpdiAgdSBm9nIgYXR0IOVuZ3JhIGRldCBzZW5hc3RlIGtvbW1hbmRvbmEsICBVIGb2ciBhdHQgZml4YSBlbiBoZWwgcmFkLiAqKgorCisgIDEuIEZseXR0YSBtYXJr9nJlbiB0aWxsIHNsdXRldCBhdiByYWRlbiBuZWRhbiBtYXJrZXJhZCAtLS0+IG9jaCBwbGFjZXJhIGRlbgorICAgICBw5SBkZXQgZvZyc3RhIGZlbGV0LgorICAyLiBTa3JpdiAgeCAgZvZyIGF0dCByYWRlcmEgZGVuIGb2cnN0YSBmZWxha3RpZ2EgdGVja25ldC4KKyAgMy4gU2tyaXYgbnUgIHUgIGb2ciBhdHQg5W5ncmEgZGV0IHNlbmFzdGUga/ZyZGEga29tbWFuZG90LgorICA0LiBS5HR0YSBkZW4gaORyIGflbmdlbiBhbGxhIGZlbGVuIHDlIHJhZGVuIG1lZCAgeC1rb21tYW5kb3QuCisgIDUuIFNrcml2IG51ICBVICBm9nIgYXR0IOV0ZXJzdORsbGEgcmFkZW4gdGlsbCBkZXNzIHVyc3BydW5nbGlnYSB1dHNlZW5kZS4KKyAgNi4gU2tyaXYgbnUgIHUgIG7lZ3JhIGflbmdlciBm9nIgYXR0IOVuZ3JhICBVICBvY2ggdGlkaWdhcmUga29tbWFuZG9uLgorICA3LiBUcnljayBudSBDVFJMLVIgKGjlbGwgaW5uZSBDVFJMIHNhbXRpZGlndCBzb20gZHUgdHJ5Y2tlciBSKSBu5WdyYSBn5W5nZXIKKyAgICAgZvZyIGF0dCB1cHByZXBhIGtvbW1hbmRvbmEgKOVuZ3JhIOVuZ3Jpbmdhcm5hKS4KKworLS0tPiBGaWl4YSBmZWxlbiBwcOUgZGVlbiBo5ORyIG1lbmluZ2VuIG9jaCDldGVyc2thcGEgZGVtIG1lZCDlbmdyYS4KKworICA4LiBEZXQgaORyIORyIHbkbGRpZ3QgYW525G5kYmFyYSBrb21tYW5kb24uICBH5SBudSB2aWRhcmUgdGlsbAorICAgICBMZWt0aW9uIDIgU2FtbWFuZmF0dG5pbmcuCisKKworCisKK35+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+fgorCQkJICAgICAgIExFS1RJT04gMiBTQU1NQU5GQVRUTklORworCisKKyAgMS4gRvZyIGF0dCByYWRlcmEgZnLlbiBtYXJr9nJlbiB0aWxsIHNsdXRldCBhdiBldHQgb3JkIHNrcml2OiAgICBkdworCisgIDIuIEb2ciBhdHQgcmFkZXJhIGZy5W4gbWFya/ZyZW4gdGlsbCBzbHV0ZXQgYXYgZW4gcmFkIHNrcml2OiAgICBkJAorCisgIDMuIEb2ciBhdHQgcmFkZXJhIGVuIGhlbCByYWQgc2tyaXY6ICAgIGRkCisKKyAgNC4gU3ludGF4ZW4gZvZyIGV0dCBrb21tYW5kbyBpIE5vcm1hbC1s5GdlIORyOgorCisgICAgICAgW251bW1lcl0gICBrb21tYW5kbyAgIG9iamVrdCAgIEVMTEVSICAga29tbWFuZG8gICBbbnVtbWVyXSAgIG9iamVrdAorICAgICBk5HI6CisgICAgICAgbnVtbWVyIC0g5HIgaHVyIG3lbmdhIGflbmdlciBrb21tYW5kb3Qga29tbWFuZG90IHNrYSByZXBldGVyYXMKKyAgICAgICBrb21tYW5kbyAtIORyIHZhZCBzb20gc2thIGf2cmFzLCB0LmV4LiAgZCAgZvZyIGF0dCByYWRlcmEKKyAgICAgICBvYmpla3QgLSDkciB2YWQga29tbWFuZG90IHNrYSBvcGVyZXJhIHDlLCBzb20gdC5leC4gIHcgKG9yZCksCisJCSQgKHRpbGwgc2x1dGV0IGF2IHJhZGVuKSwgZXRjLgorCisgIDUuIEb2ciBhdHQg5W5ncmEgdGlkaWdhcmUga29tbWFuZG9uLCBza3JpdjogIHUgKGxpdGV0IHUpCisgICAgIEb2ciBhdHQg5W5ncmEgYWxsYSB0aWRpZ2FyZSDkbmRyaW5nYXIgcOUgZW4gcmFkIHNrcml2OiAgVSAoc3RvcnQgVSkKKyAgICAgRvZyIGF0dCDlbmdyYSDlbmdyaW5nYXIgdHJ5Y2s6ICBDVFJMLVIKKworfn5+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+CisJCQkgTGVrdGlvbiAzLjE6IEtMSVNUUkEgSU4tS09NTUFORE9UCisKKworICAgKiogU2tyaXYgIHAgIGb2ciBhdHQga2xpc3RyYSBpbiBkZW4gc2VuYXN0ZSByYWRlcmluZ2VuIGVmdGVyIG1hcmv2cmVuLiAqKgorCisgIDEuIEZseXR0YSBtYXJr9nJlbiB0aWxsIGRlbiBm9nJzdGEgcmFkZW4gaSBsaXN0YW4gbmVkYW4uCisKKyAgMi4gU2tyaXYgIGRkICBm9nIgYXR0IHJhZGVyYSByYWRlbiBvY2ggbGFncmEgZGVuIGkgVmltcyBidWZmZXJ0LgorCisgIDMuIEZseXR0YSBtYXJr9nJlbiB0aWxsIHJhZGVuIE9WQU5G1lIgZORyIGRlbiByYWRlcmFkZSByYWRlbiBib3JkZSB2YXJhLgorCisgIDQuIE7kciBkdSDkciBpIE5vcm1hbC1s5GdlLCBza3JpdiAgICBwCSBm9nIgYXR0IGJ5dGEgdXQgcmFkZW4uCisKKyAgNS4gUmVwZXRlcmEgc3RlZ2VuIDIgdGlsbCA0IGb2ciBhdHQga2xpc3RyYSBpbiBhbGxhIHJhZGVyIGkgcuR0dCBvcmRuaW5nLgorCisgICAgIGQpIEthbiBkdSBs5HJhIGRpZyBvY2tz5T8KKyAgICAgYikgVmlvbGV0dGVyIORyIGJs5SwKKyAgICAgYykgSW50ZWxsaWdlbnMgZuVzIGdlbm9tIGzkcmRvbSwKKyAgICAgYSkgUm9zb3Ig5HIgcvZkYSwKKworCisKK35+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+fgorCQkgICAgICAgTGVzc29uIDMuMjogRVJTxFRULUtPTU1BTkRPVAorCisKKyAgKiogU2tyaXYgIHIgIG9jaCBldHQgdGVja2VuIGb2ciBhdHQgZXJz5HR0YSB0ZWNrbmV0IHVuZGVyIG1hcmv2cmVuLiAqKgorCisgIDEuIEZseXR0YSBtYXJr9nJlbiB0aWxsIGRlbiBm9nJzdGEgcmFkZW4gbmVkYW4gbWFya2VyYWQgLS0tPi4KKworICAyLiBGbHl0dGEgbWFya/ZyZW4gc+UgYXR0IGRlbiBzdOVyIHDlIGRldCBm9nJzdGEgZmVsZXQuCisKKyAgMy4gU2tyaXYgICByCW9jaCBzZWRhbiBkZXQgdGVja2VuIHNvbSBib3JkZSBlcnPkdHRhIGZlbGV0LgorCisgIDQuIFJlcGV0ZXJhIHN0ZWcgMiBvY2ggMyB0aWxscyBkZW4gZvZyc3RhIHJhZGVuIORyIGtvcnJla3QuCisKKy0tLT4gIE7kciBkcm4gaORyIHJ1ZGVuIHNrcmV2cywgdHJpY2t0ZSBu5WdvbiBw5SBmaWwga25hcHBhciEKKy0tLT4gIE7kciBkZW4gaORyIHJhZGVuIHNrcmV2cywgdHJ5Y2t0ZSBu5WdvbiBw5SBmZWwga25hcHBhciEKKworICA1LiBH5SBudSB2aWRhcmUgdGlsbCBMZWt0aW9uIDMuMi4KKworTk9URVJBOiBLb20gaWjlZyBhdHQgZHUgc2thbGwgbORyYSBkaWcgZ2Vub20gYW525G5kbmluZywgaW50ZSBnZW5vbSBtZW1vcmVyaW5nLgorCisKKworfn5+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+CisJCQlMZWt0aW9uIDMuMzogxE5EUkEtS09NTUFORE9UCisKKworCSAgICoqIEb2ciBhdHQg5G5kcmEgZW4gZGVsIGVsbGVyIGV0dCBoZWx0IG9yZCwgc2tyaXYgIGN3IC4gKioKKworICAxLiBGbHl0dGEgbWFya/ZyZW4gdGlsbCBkZW4gZvZyc3RhIHJlZGFuIG5lZGFuIG1hcmtlcmFkIC0tLT4uCisKKyAgMi4gUGxhY2VyYSBtYXJr9nJlbiBw5SBkIGkgcmRydG4uCisKKyAgMy4gU2tyaXYgIGN3ICBvY2ggZGV0IHLkdHRhIG9yZGV0IChpIGRldCBo5HIgZmFsbGV0LCBza3JpdiAiYWRlbiIuKQorCisgIDQuIFRyeWNrIDxFU0M+IG9jaCBmbHl0dGEgbWFya/ZyZW4gdGlsbCBu5HN0YSBmZWwgKGRldCBm9nJzdGEgdGVja25ldCBzb20KKyAgICAgc2thIORuZHJhcy4pCisKKyAgNS4gUmVwZXRlcmEgc3RlZyAzIG9jaCA0IHRpbGxzIGRlbiBm9nJzdGEgcmFkZW4g5HIgbGlrYWRhbiBzb20gZGVuIGFuZHJhLgorCistLS0+IERlbiBo5HIgcmRydG4gaGFyIG7lZ3JhIG90ZiBzb20gYnJob3RydCDkbmRyYXMgbXJmIORuZHJhLWtvbWplbmRpdC4KKy0tLT4gRGVuIGjkciByYWRlbiBoYXIgbuVncmEgb3JkIHNvbSBiZWj2dmVyIORuZHJhcyBtZWQg5G5kcmEta29tbWFuZG90LgorCitOb3RlcmEgYXR0ICBjdyAgaW50ZSBiYXJhIORuZHJhciBvcmRldCwgdXRhbiDkdmVuIHBsYWNlcmFyIGRpZyBpIGluZm9nbmluZ3Ns5GdlLgorCisKKworfn5+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+CisJCSAgICAgICBMZWt0aW9uIDMuNDogRkxFUiDETkRSSU5HQVIgTUVEIGMKKworCisgICAgICoqIMRuZHJhLWtvbW1hbmRvdCBhbnbkbmRzIHDlIHNhbW1hIG9iamVrdCBzb20gcmFkZXJhLiAqKgorCisgIDEuIMRuZHJhLWtvbW1hbmRvdCBmdW5nZXJhciBw5SBzYW1tYSBz5HR0IHNvbSByYWRlcmEuIFN5bnRheGVuIORyOgorCisgICAgICAgW251bW1lcl0gICBjICAgb2JqZWt0CSAgIEVMTEVSCSAgICBjCVtudW1tZXJdICAgb2JqZWt0CisKKyAgMi4gT2JqZWt0ZW4g5HIgb2Nrc+UgZGUgc2FtbWEsIHNvbSB0LmV4LiAgIHcgKG9yZCksICQgKHNsdXRldCBhdiByYWRlbiksIGV0Yy4KKworICAzLiBGbHl0dGEgdGlsbCBkZW4gZvZyc3RhIHJhZGVuIG5lZGFuIG1hcmtlcmFkIC0tPi4KKworICA0LiBGbHl0dGEgbWFya/ZyZW4gdGlsbCBkZXQgZvZyc3RhIGZlbGV0LgorCisgIDUuIFNrcml2ICBjJCAgZvZyIGF0dCBn9nJhIHJlc3RlbiBhdiByYWRlbiBsaWthZGFuIHNvbSBkZW4gYW5kcmEgb2NoIHRyeWNrCisgICAgIDxFU0M+LgorCistLS0+IFNsdXRldCBw5SBkZW4gaORyIHJhZGVuIGJlaPZ2ZXIgaGrkbHAgbWVkIGF0dCBm5SBkZW4gYXR0IGxpa25hIGRlbiBhbmRyYS4KKy0tLT4gU2x1dGV0IHDlIGRlbiBo5HIgcmFkZW4gYmVo9nZlciBy5HR0YXMgdGlsbCBtZWQgIGMkLWtvbW1hbmRvdC4KKworCisKK35+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+fgorCQkJICAgICAgIExFS1RJT04gMyBTQU1NQU5GQVRUTklORworCisKKyAgMS4gRvZyIGF0dCBlcnPkdHRhIHRleHQgc29tIHJlZGFuIGhhciBibGl2aXQgcmFkZXJhZCwgc2tyaXYgICBwIC4KKyAgICAgRGV0dGEga2xpc3RyYXIgaW4gZGVuIHJhZGVyYWRlIHRleHRlbiBFRlRFUiBtYXJr9nJlbiAob20gZW4gcmFkIHJhZGVyYWRlcworICAgICBrb21tZXIgZGVuIGF0dCBoYW1uYSBw5SByYWRlbiB1bmRlciBtYXJr9nJlbi4KKworICAyLiBG9nIgYXR0IGVyc+R0dGEgdGVja25ldCB1bmRlciBtYXJr9nJlbiwgc2tyaXYgICByICAgb2NoIHNlZGFuIHRlY2tuZXQgc29tCisgICAgIGtvbW1lciBhdHQgZXJz5HR0YSBvcmdpbmFsZXQuCisKKyAgMy4gxG5kcmEta29tbWFuZG90IGzldGVyIGRpZyDkbmRyYSBkZXQgYW5naXZuYSBvYmpla3RldCBmcuVuIG1hcmv2cmVuIHRpbGwKKyAgICAgc2x1dGV0IHDlIG9iamVrdGV0LiBlZy4gU2tyaXYgIGN3ICBm9nIgYXR0IORuZHJhIGZy5W4gbWFya/ZyZW4gdGlsbCBzbHV0ZXQKKyAgICAgcOUgb3JkZXQsIGMkCWb2ciBhdHQg5G5kcmEgdGlsbCBzbHV0ZXQgcOUgZW4gcmFkLgorCisgIDQuIFN5bnRheGVuIGb2ciDkbmRyYS1rb21tYW5kb3Qg5HI6CisKKwkgW251bW1lcl0gICBjCW9iamVrdAkgICAgICBFTExFUgljICAgW251bW1lcl0gICBvYmpla3QKKworR+UgbnUgdGlsbCBu5HN0YSBsZWt0aW9uLgorCisKKworfn5+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+CisJCSAgICAgTGVrdGlvbiA0LjE6IFBPU0lUSU9OIE9DSCBGSUxTVEFUVVMKKworCisgICoqIFRyeWNrIENUUkwtZyBm9nIgYXR0IHZpc2EgZGluIHBvc2l0aW9uIGkgZmlsZW4gb2NoIGZpbHN0YXR1c2VuLgorICAgICBUcnljayBTSElGVC1HIGb2ciBhdHQgZmx5dHRhIHRpbGwgZW4gcmFkIGkgZmlsZW4uICoqCisKKyAgTm90ZXJhOiBM5HNhIGhlbGEgZGVuIGxla3Rpb24gaW5uYW4gZHUgdXRm9nIgbuVnb3QgYXYgc3RlZ2VuISEKKworICAxLiBI5WxsIG5lZCBDdHJsLXRhbmdlbnRlbiBvY2ggdHJ5Y2sgIGcgLiBFbiBzdGF0dXNyYWQgbWVkIGZpbG5hbW4gb2NoIHJhZGVuCisgICAgIGR1IGJlZmlubmVyIGRpZyBw5SBrb21tZXIgYXR0IHN5bmFzLiBLb20gaWjlZyByYWRudW1tcmV0IHRpbGwgU3RlZyAzLgorCisgIDIuIFRyeWNrIHNoaWZ0LUcgZvZyIGF0dCBmbHl0dGEgbWFya/ZyZW4gdGlsbCBzbHV0ZXQgcOUgZmlsZW4uCisKKyAgMy4gU2tyaXYgaW4gbnVtbXJldCBw5SByYWRlbiBkdSB2YXIgcOUgb2NoIHRyeWNrIHNlZGFuIHNoaWZ0LUcuIERldHRhIGtvbW1lcgorICAgICBhdHQgdGEgZGlnIHRpbGxiYWthIHRpbGwgcmFkZW4gZHUgdmFyIHDlIG7kciBkdSBm9nJzdCB0cnlja3RlIEN0cmwtZy4KKyAgICAgKE7kciBkdSBza3JpdmVyIGluIG51bW1yZW4sIGtvbW1lciBkZSBJTlRFIGF0dCB2aXNhcyBw5SBza+RybWVuLikKKworICA0LiBPbSBkdSBr5G5uZXIgZGlnIHPka2VyIHDlIGRldCBo5HIsIHV0ZvZyIHN0ZWcgMSB0aWxsIDMuCisKKworCit+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+fn4KKwkJCUxla3Rpb24gNC4yOiBT1kstS09NTUFORE9UCisKKworICAgICAqKiBTa3JpdiAgLyAgZvZsanQgYXYgZW4gZnJhcyBm9nIgYXR0IHP2a2EgZWZ0ZXIgZnJhc2VuLiAqKgorCisgIDEuIEkgTm9ybWFsLWzkZ2Ugc2tyaXYgLy10ZWNrbmV0LiBOb3RlcmEgYXR0IGRldCBvY2ggbWFya/ZyZW4gYmxpciBzeW5saWcKKyAgICAgbORuZ3N0IG5lZCBw5SBza+RybWVuIHByZWNpcyBzb20gbWVkIDota29tbWFuZG90LgorCisgIDIuIFNrcml2IG51ICJmZWVlbCIgPEVOVEVSPi4gRGV0IGjkciDkciBvcmRldCBkdSB2aWxsIHP2a2EgZWZ0ZXIuCisKKyAgMy4gRvZyIGF0dCBz9mthIGVmdGVyIHNhbW1hIGZyYXMgaWdlbiwgdHJ5Y2sgaGVsdCBlbmtlbHQgIG4gLgorICAgICBG9nIgYXR0IHP2a2EgZWZ0ZXIgc2FtbWEgZnJhcyBpZ2VuIGkgbW90c2F0dCByaWt0bmluZywgdHJ5Y2sgIFNoaWZ0LU4gLgorCisgIDQuIE9tIGR1IHZpbGwgc/ZrYSBlZnRlciBlbiBmcmFzIGJha+V0IGkgZmlsZW4sIGFuduRuZCBrb21tYW5kb3QgID8gIGlzdORsbGV0CisgICAgIGb2ciAvLgorCistLS0+ICJmZWVlbCIg5HIgaW50ZSBy5HR0IHPkdHQgYXR0IHN0YXZhIGZlbDogZmVlZWwg5HIgZXR0IGZlbC4KKworTm90ZXJhOiBO5HIgc/ZrbmluZ2VuIG7lciBzbHV0ZXQgcOUgZmlsZW4ga29tbWVyIGRlbiBhdHQgZm9ydHPkdHRhIHZpZCBi9nJqYW4uCisKKworfn5+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+CisJCSAgIExla3Rpb24gNC4zOiBT1ktOSU5HIEVGVEVSIE1BVENIQU5ERSBQQVJFTlRFU0VSCisKKworCSAgICAgICoqIFNrcml2ICAlICBm9nIgYXR0IGhpdHRhIGVuIG1hdGNoYW5kZSApLF0sIG9yIH0gLiAqKgorCisgIDEuIFBsYWNlcmEgbWFya/ZyZW4gcOUgbuVnb24gYXYgKCwgWywgb3IgeyBw5SByYWRlbiBuZWRhbiBtYXJrZXJhZCAtLS0+LgorCisgIDIuIFNrcml2IG51ICUtdGVja25ldC4KKworICAzLiBNYXJr9nJlbiBib3JkZSB2YXJhIHDlIGRlbiBtYXRjaGFuZGUgcGFyZW50ZXNlbiBlbGxlciBoYWtwYXJlbnRlc2VuLgorCisgIDQuIFNrcml2ICAlICBm9nIgYXR0IGZseXR0YSBtYXJr9nJlbiB0aWxsYmFrYSB0aWxsIGRlbiBm9nJzdGEgaGFrcGFyZW50ZXNlbgorICAgICAobWVkIG1hdGNobmluZykuCisKKy0tLT4gRGV0ICggaORyIORyIGVuIHRlc3RyYWQgbWVkICgsIFsgXSBvY2ggeyB9IGkgZGVuLiApKQorCitOb3RlcmE6IERldCBo5HIg5HIgduRsZGlndCBhbnbkbmRiYXJ0IHZpZCBhdmx1c25pbmcgYXYgZXR0IHByb2dyYW0gbWVkIGlja2UKKwltYXRjaGFuZGUgcGFyZW50ZXNlciEKKworCisKKworCisKK35+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+fgorCQkgICAgICBMZWt0aW9uIDQuNDogRVRUIFPEVFQgQVRUIMRORFJBIEZFTAorCisKKwkqKiBTa3JpdiAgOnMvZ2FtbWFsdC9ueXR0L2cgIGb2ciBhdHQgZXJz5HR0YSAiZ2FtbWFsdCIgbWVkICJueXR0Ii4gKioKKworICAxLiBGbHl0dGEgbWFya/ZyZW4gdGlsbCByYWRlbiBuZWRhbiBtYXJrZXJhZCAtLS0+LgorCisgIDIuIFNrcml2ICA6cy9kZW5uL2RlbiA8RU5URVI+IC4gTm90ZXJhIGF0dCBkZXQgaORyIGtvbW1hbmRvdCBiYXJhIORuZHJhciBkZW4KKyAgICAgZvZyc3RhIGb2cmVrb21zdGVuIHDlIHJhZGVuLgorCisgIDMuIFNrcml2IG51CSA6cy9kZW5uL2Rlbi9nCSAgIHZpbGtldCBiZXR5ZGVyIGVyc+R0dCBnbG9iYWx0IHDlIHJhZGVuLgorICAgICBEZXQg5G5kcmFyIGFsbGEgZvZyZWtvbXN0ZXIgcOUgcmFkZW4uCisKKy0tLT4gZGVubiBi5HN0YSB0aWRlbiBhdHQgc2UgYmxvbW1vciBibG9tbWEg5HIgZGVubiBw5SB25XJlbi4KKworICA0LiBG9nIgYXR0IORuZHJhIGFsbGEgZvZyZWtvbXN0ZXIgYXYgZW4gdGVja2Vuc3Ry5G5nIG1lbGxhbiB0duUgcmFkZXIsCisgICAgIHNrcml2ICA6Iywjcy9nYW1tYWx0L255dHQvZyAgICBk5HIgIywjIORyIGRlIHR25SByYWRlcm5hcyByYWRudW1tZXIuCisgICAgIFNrcml2ICA6JXMvZ2FtbXRsL255dHQvZyAgICBm9nIgYXR0IORuZHJhIHZhcmplIGb2cmVrb21zdCBpIGhlbGEgZmlsZW4uCisKKworCisKK35+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+fgorCQkJICAgICAgIExFS1RJT04gNCBTQU1NQU5GQVRUTklORworCisKKyAgMS4gQ3RybC1nICB2aXNhciBkaW4gcG9zaXRpb24gaSBmaWxlbiBvY2ggZmlsc3RhdHVzZW4uCisgICAgIFNoaWZ0LUcgIGZseXR0YXIgdGlsbCBzbHV0ZXQgYXYgZmlsZW4uIEV0dCByYWRudW1tZXIgZvZsanQgIFNoaWZ0LUcKKyAgICAgZmx5dHRhciB0aWxsIGRldCByYWRudW1tcmV0LgorCisgIDIuIFNrcml2ZXIgbWFuICAvCWb2bGp0IGF2IGVuIGZyYXMgc/ZrcyBkZXQgRlJBTU3FVCBlZnRlciBmcmFzZW4uCisgICAgIFNrcml2ZXIgbWFuICA/CWb2bGp0IGF2IGVuIGZyYXMgc/ZrcyBkZXQgQkFLxVQgZWZ0ZXIgZnJhc2VuLgorICAgICBFZnRlciBlbiBz9mtuaW5nIHNrcml2ICBuICBm9nIgYXR0IGhpdHRhIG7kc3RhIGb2cmVrb21zdCBpIHNhbW1hIHJpa3RuaW5nCisgICAgIGVsbGVyICBTaGlmdC1OICBm9nIgYXR0IHP2a2EgaSBkZW4gbW90c2F0dGEgcmlrdG5pbmdlbi4KKworICAzLiBTa3JpdmVyIG1hbiAgJQlu5HIgbWFya/ZyZW4g5HIgcOUgZXR0ICAoLCksWyxdLHssIGVsbGVyIH0gIGhpdHRhcyBkZXNzCisgICAgIG1hdGNoYW5kZSBwYXIuCisKKyAgNC4gRvZyIGF0dCBlcnPkdHRhIGRlbiBm9nJzdGEgZ2FtbWFsdCBtZWQgbnl0dCBw5SBlbiByYWQgc2tyaXYgIDpzL2dhbW1sdC9ueXR0CisgICAgIEb2ciBhdHQgZXJz5HR0YSBhbGxhIGdhbW1sdCBtZWQgbnl0dCBw5SBlbiByYWQgc2tyaXYgIDpzL2dhbW1sdC9ueXR0L2cKKyAgICAgRvZyIGF0dCBlcnPkdHRhIGZyYXNlciBtZWxsYW4gcmFkICMgb2NoIHJhZCAjIHNrcml2ICA6Iywjcy9nYW1tbHQvbnl0dC9nCisgICAgIEb2ciBhdHQgZXJz5HR0YSBhbGxhIGb2cmVrb21zdGVyIGkgZmlsZW4gc2tyaXYgIDolcy9nYW1tbHQvbnl0dC9nCisgICAgIEb2ciBhdHQgYmVrcuRmdGEgdmFyamUgZ+VuZyBs5GdnIHRpbGwgImMiICA6JXMvZ2FtbWx0L255dHQvZ2MKKworCit+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+fn4KKwkJTGVrdGlvbiA1LjE6IEhVUiBNQU4gS9ZSIEVUVCBFWFRFUk5UIEtPTU1BTkRPCisKKworICAgKiogU2tyaXYgIDohCWb2bGp0IGF2IGV0dCBleHRlcm50IGtvbW1hbmRvIGb2ciBhdHQga/ZyYSBkZXQga29tbWFuZG90LiAqKgorCisgIDEuIFNrcml2IGRldCB25GxiZWthbnRhIGtvbW1hbmRvdAk6ICBm9nIgYXR0IHBsYWNlcmEgbWFya/ZyZW4gbORuZ3N0IG5lZAorICAgICBw5SBza+RybWVuIHDlIHNr5HJtZW4uIERldHRhIGzldGVyIGRpZyBza3JpdmEgaW4gZXR0IGtvbW1hbmRvLgorCisgIDIuIFNrcml2IG51ICAhICAodXRyb3BzdGVja2VuKS4gIERldHRhIGzldGVyIGRpZyBr9nJhIGV0dCBnb2R0eWNrbGlndCBleHRlcm50CisgICAgIHNrYWxrb21tYW5kby4KKworICAzLiBTb20gZXR0IGV4ZW1wZWwgc2tyaXYgICBscyAgIGVmdGVyICEgb2NoIHRyeWNrIHNlZGFuIDxFTlRFUj4uIERldHRhIGtvbW1lcgorICAgICBhdHQgdmlzYSBkaWcgZW4gbGlzdG5pbmcgYXYgZGluIGthdGFsb2csIHByZWNpcyBzb20gb20gZHUga/ZydCBkZXQgdmlkCisgICAgIHNrYWxwcm9tcHRlbi4gQW525G5kICA6IWRpciAgb20gbHMgaW50ZSBmdW5nZXJhci4KKworTm90ZXJhOiAgRGV0IORyIG32amxpZ3QgYXR0IGv2cmEgdmlsa2V0IGV4dGVybnQga29tbWFuZG8gc29tIGhlbHN0IHDlIGRldCBo5HIKKwkgc+R0dGV0LgorCitOb3RlcmE6ICBBbGxhICA6LWtvbW1hbmRvbiBt5XN0ZSBhdnNsdXRhcyBtZWQgYXR0IHRyeWNrYSBw5SA8RU5URVI+CisKKworCisKK35+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+fgorCQkgICAgICBMZWt0aW9uIDUuMjogTUVSIE9NIEFUVCBTUEFSQSBGSUxFUgorCisKKyAgICAgKiogRvZyIGF0dCBzcGFyYSDkbmRyaW5nYXIgZ2pvcmRhIGkgZW4gZmlsLCBza3JpdiAgOncgRklMTkFNTi4gKioKKworICAxLiBTa3JpdiAgOiFkaXIgIGVsbGVyICA6IWxzICBm9nIgYXR0IGblIGVuIGxpc3RuaW5nIGF2IGRpbiBrYXRhbG9nLgorICAgICBEdSB2ZXQgcmVkYW4gYXR0IGR1IG3lc3RlIHRyeWNrYSA8RU5URVI+IGVmdGVyIGRldCBo5HIuCisKKyAgMi4gVuRsaiBldHQgZmlsbmFtbiBzb20gaW50ZSByZWRhbiBleGlzdGVyYXIsIHNvbSB0LmV4LiBURVNULgorCisgIDMuIFNrcml2IG51OgkgOncgVEVTVCAgIChk5HIgVEVTVCDkciBmaWxuYW1uZXQgZHUgdmFsdC4pCisKKyAgNC4gRGV0IGjkciBzcGFyYXIgaGVsYSBmaWxlbgkoVmltIGhhbmRsZWRuaW5nZW4pICB1bmRlciBuYW1uZXQgVEVTVC4KKyAgICAgRvZyIGF0dCB2ZXJpZmllcmEgZGV0dGEsIHNrcml2ICAgIDohZGlyICAgaWdlbiBm9nIgYXR0IHNlIGRpbiBrYXRhbG9nCisKK05vdGVyYTogT20gZHUgc2t1bGxlIGF2c2x1dGEgVmltIG9jaCBzZWRhbiD2cHBuYSBpZ2VuIG1lZCBmaWxuYW1uZXQgVEVTVCBz5QorCXNrdWxsZSBmaWxlbiB2YXJhIGVuIGV4YWt0IGtvcGlhIGF2IGhhbmRsZWRuaW5nZW4gbuRyIGR1IHNwYXJhZGUgZGVuLgorCisgIDUuIFRhIG51IGJvcnQgZmlsZW4gZ2Vub20gYXR0IHNrcml2YSAoTVMtRE9TKTogIDohZGVsIFRFU1QKKwkJCQkgICBlbGxlciAoVW5peCk6ICA6IXJtIFRFU1QKKworCit+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+fn4KKwkJICAgIExla3Rpb24gNS4zOiBFVFQgU0VMRUtUSVZUIFNQQVJBLUtPTU1BTkRPCisKKworCSoqIEb2ciBhdHQgc3BhcmEgZW4gZGVsIGF2IGVuIGZpbCwgc2tyaXYgICA6IywjIHcgRklMTkFNTiAqKgorCisgIDEuIMRubnUgZW4gZ+VuZywgc2tyaXYgIDohZGlyICBlbGxlciAgOiFscyAgZvZyIGF0dCBm5SBlbiBsaXN0bmluZyBhdiBkaW4KKyAgICAga2F0YWxvZyBvY2ggduRsaiBldHQgcGFzc2FuZGUgZmlsbmFtbiBzb20gdC5leC4gVEVTVC4KKworICAyLiBGbHl0dGEgbWFya/ZyZW4gaPZnc3QgdXBwIHDlIGRlbiBo5HIgc2lkYW4gb2NoIHRyeWNrICBDdHJsLWcgIGb2ciBhdHQgZuUKKyAgICAgcmVkYSBw5SByYWRudW1yZXQgcOUgZGVuIHJhZGVuLiBLT00gSUjFRyBERVQgTlVNTVJFVCEKKworICAzLiBGbHl0dGEgbnUgbORuZ3N0IG5lZCBw5SBzaWRhbiBvY2ggc2tyaXYgIEN0cmwtZyBpZ2VuLgorICAgICBLT00gSUjFRyBERVQgUkFETlVNTVJFVCBPQ0tTxSEKKworICA0LiBG9nIgYXR0IEJBUkEgc3BhcmEgZW4gc2VrdGlvbiB0aWxsIGVuIGZpbCwgc2tyaXYgICA6IywjIHcgVEVTVAorICAgICBk5HIgIywjIORyIGRlIHR25SBudW1tcmVuIGR1IGtvbSBpaOVnICh0b3BwZW4sIGJvdHRlbikgb2NoIFRFU1Qg5HIKKyAgICAgZGl0dCBmaWxuYW1uLgorCisgIDUuIMRubnUgZW4gZ+VuZywga29sbGEgc+UgYXR0IGZpbGVuIORyIGTkciBtZWQgIDohZGlyICBtZW4gcmFkZXJhIGRlbiBJTlRFLgorCisKKworCit+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+fn4KKwkJICAgTGVrdGlvbiA1LjQ6IFRBIEVNT1QgT0NIIEbWUkVOQSBGSUxFUgorCisKKyAgICAgICAqKiBG9nIgYXR0IGluZm9nYSBpbm5laOVsbGV0IGF2IGVuIGZpbCwgc2tyaXYgICA6ciBGSUxOQU1OICoqCisKKyAgMS4gU2tyaXYgICA6IWRpciAgIGb2ciBhdHQgZvZyc+RrcmEgZGlnIG9tIGF0dCBURVNULWZpbGVuIGZy5W4gdGlkaWdhcmUKKyAgICAgZm9ydGZhcmFuZGUg5HIga3Zhci4KKworICAyLiBQbGFjZXJhIG1hcmv2cmVuIGj2Z3N0IHVwcCBw5SBkZW4gaORyIHNpZGFuLgorCitOT1RFUkE6ICBFZnRlciBhdHQgZHUga/ZydCBTdGVnIDMga29tbWVyIGR1IGF0dCBzZSBMZWt0aW9uIDUuMy4KKwkgRmx5dHRhIGTlIE5FRCB0aWxsIGRlbiBo5HIgbGVrdGlvbmVuIGlnZW4uCisKKyAgMy4gVGEgbnUgZW1vdCBkaW4gVEVTVC1maWwgbWVkIGtvbW1hbmRvdCAgIDpyIFRFU1QgICBk5HIgVEVTVCDkciBuYW1uZXQgcOUKKyAgICAgZmlsZW4uCisKK05PVEVSQTogIEZpbGVuIGR1IHRhciBlbW90IHBsYWNlcmFzIGTkciBtYXJr9nJlbiDkciBwbGFjZXJhZC4KKworICA0LiBG9nIgYXR0IHZlcmlmaWVyYSBhdHQgZmlsZW4gdG9ncyBlbW90LCBn5SB0aWxsYmFrYSBvY2ggbm90ZXJhIGF0dCBkZXQgbnUKKyAgICAgZmlubnMgdHblIGtvcGlvciBhdiBMZWt0aW9uIDUuMywgb3JnaW5hbGV0IG9jaCBmaWx2ZXJzaW9uZW4uCisKKworCit+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+fn4KKwkJCSAgICAgICBMRUtUSU9OIDUgU0FNTUFORkFUVE5JTkcKKworCisgIDEuICA6IWtvbW1hbmRvICBr9nIgZXR0IGV4dGVybnQga29tbWFuZG8uCisKKyAgICAgIE7lZ3JhIGFuduRuZGJhcmEgZXhlbXBlbCDkcjoKKwkgKE1TLURPUykJICAoVW5peCkKKwkgIDohZGlyCQkgICA6IWxzCQkgIC0gIHZpc2FyIGVuIGthdGFsb2dsaXN0bmluZy4KKwkgIDohZGVsIEZJTE5BTU4gICAgOiFybSBGSUxOQU1OICAgLSAgdGFyIGJvcnQgZmlsZW4gRklMTkFNTi4KKworICAyLiAgOncgRklMTkFNTiAgc3BhcmFyIGRlbiBha3R1ZWxsYSBWaW0tZmlsZW4gbWVkIG5hbW5ldCBGSUxOQU1OLgorCisgIDMuICA6IywjdyBGSUxOQU1OICBzcGFyYXIgcmFkZXJuYSAjIHRpbGwgIyAgaSBmaWxlbiBGSUxOQU1OLgorCisgIDQuICA6ciBGSUxOQU1OICB0YXIgZW1vdCBmaWxlbiBGSUxOQU1OIG9jaCBpbmZvZ2FyIGRlbiBpIGRlbiBha3R1ZWxsYSBmaWxlbgorICAgICAgZWZ0ZXIgbWFya/ZyZW4uCisKKworCisKKworCit+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+fn4KKwkJCSBMZWt0aW9uIDYuMTog1lBQTkEtS09NTUFORE9UCisKKworICoqIFNrcml2ICBvICBm9nIgYXR0IPZwcG5hIGVuIHJhZCB1bmRlciBtYXJr9nJlbiBvY2ggcGxhY2VyYSBkaWcgaQorICAgIEluZm9nYS1s5GdlLiAqKgorCisgIDEuIEZseXR0YSBtYXJr9nJlbiB0aWxsIHJhZGVuIG5lZGFuIG1hcmtlcmFkIC0tLT4uCisKKyAgMi4gU2tyaXYgIG8gKGxpdGV0IG8pIGb2ciBhdHQg9nBwbmEgdXBwIGVuIHJhZCBORURBTkbWUiBtYXJr9nJlbiBvY2ggcGxhY2VyYQorICAgICBkaWcgaSBJbmZvZ2EtbW9kZS4KKworICAzLiBLb3BpZXJhIG51IHJhZGVuIG1hcmtlcmFkIC0tLT4gb2NoIHRyeWNrIDxFU0M+IGb2ciBhdHQgYXZzbHV0YQorICAgICBJbmZvZ2EtbORnZXQuCisKKy0tLT4gRWZ0ZXIgZHUgc2tyaXZpdCAgbyAgcGxhY2VyYWQgbWFya/ZyZW4gcOUgZW4g9nBwZW4gcmFkIGkgSW5mb2dhLWzkZ2UuCisKKyAgNC4gRvZyIGF0dCD2cHBuYSB1cHAgZW4gcmFkIE9WQU5G1lIgbWFya/ZyZW4sIHNrcml2IGV0dCBzdG9ydCAgTyAsIGlzdORsbGV0CisgICAgIGb2ciBldHQgbGl0ZXQgIG8uIFBy9nZhIGRldHRhIHDlIHJhZGVuIG5lZGFuLgor1nBwbmEgdXBwIGVuIHJhZCBvdmFuZvZyIGRlbm5hIGdlbm9tIGF0dCB0cnlja2EgU2hpZnQtTyBu5HIgbWFya/ZyZW4gc3TlciBo5HIuCisKKworCisKKworfn5+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+CisJCQlMZWt0aW9uIDYuMjogTMRHRyBUSUxMLUtPTU1BTkRPVAorCisKKwkgICAgICoqIFNrcml2ICBhICBm9nIgYXR0IGluZm9nYSB0ZXh0IEVGVEVSIG1hcmv2cmVuLiAqKgorCisgIDEuIEZseXR0YSBtYXJr9nJlbiB0aWxsIHNsdXRldCBhdiBkZW4gZvZyc3RhIHJhZGVuIG5lZGFuIG1hcmtlcmFkIC0tLT4gZ2Vub20KKyAgICAgYXR0IHNrcml2ICAkCWkgTm9ybWFsLWzkZ2UuCisKKyAgMi4gU2tyaXYgZXR0ICBhICAobGl0ZXQgYSkgZvZyIGF0dCBs5GdnYSB0aWxsIHRleHQgRUZURVIgdGVja25ldCB1bmRlcgorICAgICBtYXJr9nJlbi4gIChTdG9ydCAgQSAgbORnZ2VyIHRpbGwgaSBzbHV0ZXQgYXYgcmFkZW4uKQorCitOb3RlcmE6IERldHRhIHVuZHZpa2VyIGF0dCBiZWj2dmEgc2tyaXZhICBpICwgZGV0IHNpc3RhIHRlY2tuZXQsIHRleHRlbiBhdHQKKwlpbmZvZ2EsIDxFU0M+LCBo9mdlcnBpbCwgb2NoIHNsdXRsaWdlbiwgeCwgYmFyYSBm9nIgYXR0IGzkZ2dhIHRpbGwgaQorCXNsdXRldCBw5SBlbiByYWQhCisKKyAgMy4gR/ZyIG51IGbkcmRpZ3QgZGVuIGb2cnN0YSByYWRlbi4gTm90ZXJhIG9ja3PlIGF0dCBs5GdnYSB0aWxsIORyIGxpa2FkYW50CisgICAgICBzb20gSW5mb2dhLWzkZ2UsIGVuZGEgc2tpbGxuYWRlbiDkciBwb3NpdGlvbmVuIGTkciB0ZXh0ZW4gYmxpciBpbmZvZ2FkLgorCistLS0+IEjkciBrYW4gZHUgdHLkbmEKKy0tLT4gSORyIGthbiBkdSB0cuRuYSBw5SBhdHQgbORnZ2EgdGlsbCB0ZXh0IGkgc2x1dGV0IHDlIGVuIHJhZC4KKworCisKK35+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+fgorCQkgICAgTGVrdGlvbiA2LjM6IEVOIEFOTkFOIFZFUlNJT04gQVYgRVJTxFRUCisKKworICAgICAgKiogU2tyaXYgZXR0IHN0b3J0ICBSICBm9nIgYXR0IGVyc+R0dGEgZmxlciDkbiBldHQgdGVja2VuLiAqKgorCisgIDEuIEZseXR0YSBtYXJr9nJlbiB0aWxsIGRlbiBm9nJzdGEgcmFkZW4gbmVkYW4gbWFya2VyYWQgLS0tPi4KKworICAyLiBQbGFjZXJhIG1hcmv2cmVuIHZpZCBi9nJqYW4gYXYgZGV0IGb2cnN0YSBvcmRldCBzb20g5HIgYW5ub3JsdW5kYSBq5G1m9nJ0CisgICAgIG1lZCBkZW4gYW5kcmEgcmFkZW4gbWFya2VyYWQgLS0tPiAob3JkZXQgInNpc3RhIikuCisKKyAgMy4gU2tyaXYgbnUgIFIgIG9jaCBlcnPkdHQgcmVzdGVuIGF2IHRleHRlbiBw5SBkZW4gZvZyc3RhIHJhZGVuIGdlbm9tIGF0dAorICAgICBza3JpdmEg9nZlciBkZW4gZ2FtbGEgdGV4dGVuIHPlIGF0dCBkZW4gZvZyc3RhIHJhZGVuIGJsaXIgbGlrYWRhbiBzb20KKyAgICAgZGVuIGFuZHJhLgorCistLS0+IEb2ciBhdHQgZuUgZGVuIGb2cnN0YSByYWRlbiBsaWthIHNvbSBkZW4gc2lzdGEsIGFuduRuZCB0YW5nZW50ZXJuYS4KKy0tLT4gRvZyIGF0dCBm5SBkZW4gZvZyc3RhIHJhZGVuIGxpa2Egc29tIGRlbiBhbmRyYSwgc2tyaXYgUiBvY2ggZGVuIG55YSB0ZXh0ZW4uCisKKyAgNC4gTm90ZXJhIGF0dCBu5HIgZHUgdHJ5Y2tlciA8RVNDPiBm9nIgYXR0IGF2c2x1dGEsIHPlIGJsaXIgZXZlbnR1ZWxsCisgICAgIG9m9nLkbmRyYWQgdGV4dCBrdmFyLgorCisKKworCisKK35+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+fgorCQkJICAgIExla3Rpb24gNi40OiBTxFRUIEZMQUdHT1IKKworICAqKiBT5HR0IGVuIGZsYWdnYSBz5SBhdHQgZW4gc/ZrbmluZyBlbGxlciBlcnPkdHRuaW5nIGlnbm9yZXJhciBzdG9ybGVrICoqCisKKyAgMS4gU/ZrIGVmdGVyICJpZ25vcmUiIGdlbm9tIGF0dCBza3JpdmE6CisgICAgIC9pZ25vcmUKKyAgICAgUmVwZXRlcmEgZmxlcmEgZ+VuZ2VyIGdlbm9tIGF0dCB0cnlja2EgcOUgbi10YW5nZW50ZW4KKworICAyLiBT5HR0ICdpYycgKElnbm9yZSBDYXNlKSBmbGFnZ2FuIGdlbm9tIGF0dCBza3JpdmE6CisgICAgIDpzZXQgaWMKKworICAzLiBT9msgbnUgZWZ0ZXIgImlnbm9yZSIgaWdlbiBnZW5vbSBhdHQgdHJ5Y2thOiBuCisgICAgIFJlcGVhdCBzZWFyY2ggc2V2ZXJhbCBtb3JlIHRpbWVzIGJ5IGhpdHRpbmcgdGhlIG4ga2V5CisKKyAgNC4gU+R0dCAnaGxzZWFyY2gnIGFuZCAnaW5jc2VhcmNoJyBmbGFnZ29ybmE6CisgICAgIDpzZXQgaGxzIGlzCisKKyAgNS4gU2tyaXYgbnUgaW4gc/ZrLWtvbW1hbmRvdCBpZ2VuLCBvY2ggc2UgdmFkIHNvbSBo5G5kZXI6CisgICAgIC9pZ25vcmUKKworICA2LiBG9nIgYXR0IHRhIGJvcnQgZnJhbWjkdm5pbmdlbiBhdiB0cuRmZmFyLCBza3JpdgorICAgICA6bm9obHNlYXJjaAorfn5+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+CisJCQkgICAgICAgTEVLVElPTiA2IFNBTU1BTkZBVFROSU5HCisKKworICAxLiBHZW5vbSBhdHQgc2tyaXZhICBvICD2cG5uYXMgZW4gcmFkIE5FREFORtZSIG1hcmv2cmVuIG9jaCBtYXJr9nJlbiBwbGFjZXJhcworICAgICBw5SBkZW4g9nBwbmEgcmFkZW4gaSBJbmZvZ2EtbORnZS4KKyAgICAgR2Vub20gYXR0IHNrcml2YSBldHQgc3RvcnQgIE8gIPZwcG5hcyByYWRlbiBPVkFORtZSIHJhZGVuIHNvbSBtYXJr9nJlbiDkcgorICAgICBw5S4KKworICAyLiBTa3JpdiBldHQgIGEgIGb2ciBhdHQgaW5mb2dhIHRleHQgRUZURVIgdGVja25ldCBzb20gbWFya/ZyZW4gc3TlciBw5S4KKyAgICAgR2Vub20gYXR0IHNrcml2YSBldHQgc3RvcnQgIEEgIGzkZ2dzIHRleHQgYXV0b21hdGlza3QgdGlsbCBpIHNsdXRldCBw5QorICAgICByYWRlbi4KKworICAzLiBHZW5vbSBhdHQgc2tyaXZhIGV0dCBzdG9ydCAgUiAgaGFtbmFyIGR1IGkgRXJz5HR0LWzkZ2UgdGlsbCAgPEVTQz4gIHRyeWNrcworICAgICBm9nIgYXR0IGF2c2x1dGEuCisKKyAgNC4gR2Vub20gYXR0IHNrcml2YSAiOnNldCB4eHgiIHPkdHRzIGZsYWdnYW4gInh4eCIKKworCisKKworCisKKworCisKK35+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+fgorCQkgICAgICAgTEVLVElPTiA3OiBPTi1MSU5FIEhKxExQLUtPTU1BTkRPTgorCisKKwkJICAgICAgKiogQW525G5kIG9uLWxpbmUgaGrkbHBzeXN0ZW1ldCAqKgorCisgIFZpbSBoYXIgZXR0IG9tZmF0dGFuZGUgb24tbGluZSBoauRscHN5c3RlbS4gRvZyIGF0dCBrb21tYSBpZ+VuZyBwcvZ2YSBldHQgYXYKKyAgZGVzc2EgdHJlOgorCS0gdHJ5Y2sgPEhFTFA+IHRhbmdlbnRlbiAob20gZHUgaGFyIG7lZ29uKQorCS0gdHJ5Y2sgPEYxPiB0YW5nZW50ZW4gKG9tIGR1IGhhciBu5WdvbikKKwktIHNrcml2ICAgOmhlbHAgPEVOVEVSPgorCisgIFNrcml2ICAgOnEgPEVOVEVSPiAgIGb2ciBhdHQgc3Ry5G5nYSBoauRscGb2bnN0cmV0LgorCisgIER1IGthbiBoaXR0YSBoauRscCBvbSBu5HN0YW4gYWxsdGluZywgZ2Vub20gYXR0IGdlIGV0dCBhcmd1bWVudCB0aWxsCisgICI6aGVscCIga29tbWFuZG90LiBQcvZ2YSBkZXNzYSAoZ2z2bSBpbnRlIGF0dCB0cnlja2EgPEVOVEVSPik6CisKKwk6aGVscCB3CisJOmhlbHAgY188VAorCTpoZWxwIGluc2VydC1pbmRleAorCTpoZWxwIHVzZXItbWFudWFsCisKKworfn5+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+CisJCSAgICAgICBMRUtUSU9OIDg6IFNLQVBBIEVUVCBVUFBTVEFSVFNTS1JJUFQKKworCQkJICAqKiBBa3RpdmVyYSBWaW0tIGZ1bmt0aW9uZXIgKioKKworICBWaW0gaGFyIG3lbmdhIGZsZXIgZnVua3Rpb25lciDkbiBWaSwgbWVuIGRlIGZsZXN0YSBhdiBkZW0g5HIgaW5ha3RpdmVyYWRlIHNvbQorICBzdGFuZGFyZC4gRvZyIGF0dCBi9nJqYSBhbnbkbmRhIGZsZXIgZnVua3Rpb25lciBt5XN0ZSBkdSBza2FwYSBlbiAidmltcmMiLWZpbC4KKworICAxLiBC9nJqYSByZWRpZ2VyYSAidmltcmMiLWZpbGVuLCBkZXR0YSBiZXJvciBw5SBkaXR0IHN5c3RlbToKKwk6ZWRpdCB+Ly52aW1yYwkJCWb2ciBVbml4CisJOmVkaXQgJFZJTS9fdmltcmMJCWb2ciBNUy1XaW5kb3dzCisKKyAgMi4gTORzIG51IHRleHRlbiBpIGV4ZW1wZWwgInZpbXJjIi1maWxlbjoKKworCTpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4gU3BhcmEgZmlsZW4gbWVkOgorCisJOndyaXRlCisKKyAgTuRzdGEgZ+VuZyBkdSBzdGFydGFyIFZpbSBrb21tZXIgZGVuIGF0dCBhbnbkbmRhIHN5bnRheGZyYW1o5HZuaW5nLgorICBEdSBrYW4gbORnZ2EgdGlsbCBhbGxhIGluc3TkbGxuaW5nYXIgZHUgZvZyZWRyYXIgdGlsbCBkZW4gaORyICJ2aW1yYyItZmlsZW4uCisKK35+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+fgorCisgIERldHRhIGF2c2x1dGFyIGhhbmRsZWRuaW5nZW4gaSBWaW0uIERlbiB2YXIgYXZzZWRkIGF0dCBnZSBlbiBrb3J0IPZ2ZXJzaWt0IGF2CisgIHJlZGlnZXJhcmVuIFZpbSwgYmFyYSB0aWxscuRja2xpZ3QgZvZyIGF0dCBkdSBza2Ega3VubmEgYW525G5kYSByZWRpZ2VyYXJlbgorICByZWxhdGl2dCBlbmtlbHQuIERlbiDkciBs5W5ndCBpZnLlbiBrb21wbGV0dCBlZnRlcnNvbSBWaW0gaGFyIG3lbmdhIG3lbmdhIGZsZXIKKyAga29tbWFuZG9uLiBM5HMgYW525G5kYXJtYW51YWxlbiBo5HJu5HN0OiAiOmhlbHAgdXNlci1tYW51YWwiLgorCisgIEb2ciB2aWRhcmUgbORzbmluZyByZWtvbW1lbmRlcmFzIGRlbiBo5HIgYm9rZW46CisJVmltIC0gVmkgSW1wcm92ZWQgLSBhdiBTdGV2ZSBPdWFsbGluZQorCUb2cmxhZzogTmV3IFJpZGVycworICBEZW4gZvZyc3RhIGJva2VuIHNvbSDkciBlbmRhc3QgYmVoYW5kbGFyIFZpbS4gU3BlY2llbGx0IGFuduRuZGJhciBm9nIKKyAgbnli9nJqYXJlLiBEZXQgZmlubnMgbeVuZ2EgZXhlbXBlbCBvY2ggYmlsZGVyLgorICBTZSBodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy9jbGljazUuaHRtbAorCisgIERlbiBo5HIgYm9rZW4g5HIg5GxkcmUgb2NoIGJlaGFuZGxhciBtZXIgVmkg5G4gVmltLCBtZW4gcmVrb21tZW5kZXJhcyBvY2tz5ToKKwlMZWFybmluZyB0aGUgVmkgRWRpdG9yIC0gYXYgTGluZGEgTGFtYgorCUb2cmxhZzogTydSZWlsbHkgJiBBc3NvY2lhdGVzIEluYy4KKyAgRGV0IORyIGVuIGJyYSBib2sgZvZyIGF0dCBs5HJhIHNpZyBu5HN0YW4gYWxsdCBzb20gZHUgdmlsbCBrdW5uYSBn9nJhIG1lZCBWaS4KKyAgRGVuIHNq5HR0ZSB1cHBsYWdhbiBpbmtsdWRlcmFyIG9ja3PlIGluZm9ybWF0aW9uIG9tIFZpbS4KKworICBEZW4gaORyIGhhbmRsZWRuaW5nZW4g5HIgc2tyaXZlbiBhdiBNaWNoYWVsIEMuIFBpZXJjZSBvY2ggUm9iZXJ0IEsuIFdhcmUsCisgIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcyBtZWQgaWTpZXIgZnLlbiBDaGFybGVzIFNtaXRoLAorICBDb2xvcmFkbyBTdGF0ZSBVbml2ZXJzaXR5LiAgRS1wb3N0OiBid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUuCisKKyAgTW9kaWZpZXJhZCBm9nIgVmltIGF2IEJyYW0gTW9vbGVuYWFyLgorICDWdmVyc2F0dCBhdiBKb2hhbiBTdmVkYmVyZyA8am9oYW5Ac3ZlZGJlcmcucHAuc2U+CisKK35+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+fgpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci90dXRvci52aW0gYi9ydW50aW1lL3R1dG9yL3R1dG9yLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWRiZjYxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci90dXRvci52aW0KQEAgLTAsMCArMSwxMTkgQEAKKyIgVmltIHR1dG9yIHN1cHBvcnQgZmlsZQorIiBBdXRob3I6IEVkdWFyZG8gRi4gQW1hdHJpYSA8ZWZlcm5hMUBwbGF0ZWEucG50aWMubWVjLmVzPgorIiBMYXN0IENoYW5nZToJMjAwNCBKdW4gMDMKKworIiBUaGlzIHNtYWxsIHNvdXJjZSBmaWxlIGlzIHVzZWQgZm9yIGRldGVjdGluZyBpZiBhIHRyYW5zbGF0aW9uIG9mIHRoZQorIiB0dXRvciBmaWxlIGV4aXN0LCBpLmUuLCBhIHR1dG9yLnh4IGZpbGUsIHdoZXJlIHh4IGlzIHRoZSBsYW5ndWFnZS4KKyIgSWYgdGhlIHRyYW5zbGF0aW9uIGRvZXMgbm90IGV4aXN0LCBvciBubyBleHRlbnNpb24gaXMgZ2l2ZW4sCisiIGl0IGRlZmF1bHRzIHRvIHRoZSBlbmdsaXNoIHZlcnNpb24uCisKKyIgSXQgaXMgaW52b2tlZCBieSB0aGUgdmltdHV0b3Igc2hlbGwgc2NyaXB0LgorCisiIDEuIEJ1aWxkIHRoZSBleHRlbnNpb24gb2YgdGhlIGZpbGUsIGlmIGFueToKK2xldCBzOmV4dCA9ICIiCitpZiBzdHJsZW4oJHh4KSA+IDEKKyAgbGV0IHM6ZXh0ID0gIi4iIC4gJHh4CitlbHNlCisgIGxldCBzOmxhbmcgPSAiIgorICBpZiBleGlzdHMoInY6bGFuZyIpICYmIHY6bGFuZyAhPSAiQyIKKyAgICBsZXQgczpsYW5nID0gdjpsYW5nCisgIGVsc2VpZiBzdHJsZW4oJExBTkcpID4gMCAmJiAkTEFORyAhPSAiQyIKKyAgICBsZXQgczpsYW5nID0gJExBTkcKKyAgZW5kaWYKKyAgaWYgczpsYW5nICE9ICIiCisgICAgIiBSZW1vdmUgIkBldXJvIiAoaWdub3JpbmcgY2FzZSksIGl0IG1heSBiZSBhdCB0aGUgZW5kCisgICAgbGV0IHM6bGFuZyA9IHN1YnN0aXR1dGUoczpsYW5nLCAnXGNAZXVybycsICcnLCAnJykKKyAgICAiIE9uIE1TLVdpbmRvd3MgaXQgbWF5IGJlIEdlcm1hbl9HZXJtYW55LjEyNTIgb3IgUG9saXNoX1BvbGFuZC4xMjUwLiAgSG93CisgICAgIiBhYm91dCBvdGhlciBsYW5ndWFnZXM/CisgICAgaWYgczpsYW5nID1+ICJHZXJtYW4iCisgICAgICBsZXQgczpleHQgPSAiLmRlIgorICAgIGVsc2VpZiBzOmxhbmcgPX4gIlBvbGlzaCIKKyAgICAgIGxldCBzOmV4dCA9ICIucGwiCisgICAgZWxzZWlmIHM6bGFuZyA9fiAiU2xvdmFrIgorICAgICAgbGV0IHM6ZXh0ID0gIi5zayIKKyAgICBlbHNlCisgICAgICBsZXQgczpleHQgPSAiLiIgLiBzdHJwYXJ0KHM6bGFuZywgMCwgMikKKyAgICBlbmRpZgorICBlbmRpZgorZW5kaWYKKworIiBUaGUgamFwYW5lc2UgdHV0b3IgaXMgYXZhaWxhYmxlIGluIHR3byBlbmNvZGluZ3MsIGd1ZXNzIHdoaWNoIG9uZSB0byB1c2UKKyIgVGhlICJzamlzIiBvbmUgaXMgYWN0dWFsbHkgImNwOTMyIiwgaXQgZG9lc24ndCBtYXR0ZXIgZm9yIHRoaXMgdGV4dC4KK2lmIHM6ZXh0ID1+PyAnXC5qYScKKyAgaWYgJmVuYyA9fiAiZXVjIgorICAgIGxldCBzOmV4dCA9ICIuamEuZXVjIgorICBlbHNlaWYgJmVuYyA9fiAidXRmLTgkIgorICAgIGxldCBzOmV4dCA9ICIuamEudXRmLTgiCisgIGVsc2UKKyAgICBsZXQgczpleHQgPSAiLmphLnNqaXMiCisgIGVuZGlmCitlbmRpZgorCisiIFRoZSBrb3JlYW4gdHV0b3IgaXMgYXZhaWxhYmxlIGluIHR3byBlbmNvZGluZ3MsIGd1ZXNzIHdoaWNoIG9uZSB0byB1c2UKK2lmIHM6ZXh0ID1+PyAnXC5rbycKKyAgaWYgJmVuYyA9fiAidXRmLTgkIgorICAgIGxldCBzOmV4dCA9ICIua28udXRmLTgiCisgIGVsc2UKKyAgICBsZXQgczpleHQgPSAiLmtvLmV1YyIKKyAgZW5kaWYKK2VuZGlmCisKKyIgVGhlIENoaW5lc2UgdHV0b3IgaXMgYXZhaWxhYmxlIGluIHR3byBlbmNvZGluZ3MsIGd1ZXNzIHdoaWNoIG9uZSB0byB1c2UKKyIgVGhpcyBzZWdtZW50IGlzIGZyb20gdGhlIGFib3ZlIGxpbmVzIGFuZCBtb2RpZmllZCBieQorIiBNZW5kZWwgTCBDaGFuIDxiZW9zQHR1cmJvbGludXguY29tLmNuPiBmb3IgQ2hpbmVzZSB2aW0gdHV0b3JpYWwKK2lmIHM6ZXh0ID1+PyAnXC56aCcKKyAgaWYgJmVuYyA9fiAnYmlnNVx8Y3A5NTAnCisgICAgbGV0IHM6ZXh0ID0gIi56aC5iaWc1IgorICBlbHNlCisgICAgbGV0IHM6ZXh0ID0gIi56aC5ldWMiCisgIGVuZGlmCitlbmRpZgorCisiIFRoZSBQb2xpc2ggdHV0b3IgaXMgYXZhaWxhYmxlIGluIHR3byBlbmNvZGluZ3MsIGd1ZXNzIHdoaWNoIG9uZSB0byB1c2UuCitpZiBzOmV4dCA9fj8gJ1wucGwnICYmICZlbmMgPX4gMTI1MAorICBsZXQgczpleHQgPSAiLnBsLmNwMTI1MCIKK2VuZGlmCisKKyIgVGhlIEdyZWVrIHR1dG9yIGlzIGF2YWlsYWJsZSBpbiB0d28gZW5jb2RpbmdzLCBndWVzcyB3aGljaCBvbmUgdG8gdXNlCitpZiBzOmV4dCA9fj8gJ1wuZ3InICYmICZlbmMgPX4gNzM3CisgIGxldCBzOmV4dCA9ICIuZ3IuY3A3MzciCitlbmRpZgorCisiIFRoZSBTbG92YWsgdHV0b3IgaXMgYXZhaWxhYmxlIGluIHR3byBlbmNvZGluZ3MsIGd1ZXNzIHdoaWNoIG9uZSB0byB1c2UKK2lmIHM6ZXh0ID1+PyAnXC5zaycgJiYgJmVuYyA9fiAxMjUwCisgIGxldCBzOmV4dCA9ICIuc2suY3AxMjUwIgorZW5kaWYKKworIiBUaGUgUnVzc2lhbiB0dXRvciBpcyBhdmFpbGFibGUgaW4gdHdvIGVuY29kaW5ncywgZ3Vlc3Mgd2hpY2ggb25lIHRvIHVzZS4KKyIgVGhpcyBzZWdtZW50IGlzIGZyb20gdGhlIGFib3ZlIGxpbmVzIGFuZCBtb2RpZmllZCBieQorIiBBbGV4ZXkgSS4gRnJvbG9mZiA8cmFvcm5AYWx0bGludXgub3JnPiBmb3IgUnVzc2lhbiB2aW0gdHV0b3JpYWwKK2lmIHM6ZXh0ID1+PyAnXC5ydScgJiYgJmVuYyA9fiAxMjUxCisgIGxldCBzOmV4dCA9ICIucnUuY3AxMjUxIgorZW5kaWYKKworIiBTb21laG93ICIuZ2UiIChHZXJtYW55KSBpcyBzb21ldGltZXMgdXNlZCBmb3IgIi5kZSIgKERldXRzY2gpLgoraWYgczpleHQgPX4/ICdcLmdlJworICBsZXQgczpleHQgPSAiLmRlIgorZW5kaWYKKworaWYgczpleHQgPX4/ICdcLmVuJworICBsZXQgczpleHQgPSAiIgorZW5kaWYKKworIiAyLiBCdWlsZCB0aGUgbmFtZSBvZiB0aGUgZmlsZToKK2xldCBzOnR1dG9yZmlsZSA9ICIvdHV0b3IvdHV0b3IiCitsZXQgczp0dXRvcnh4ID0gJFZJTVJVTlRJTUUgLiBzOnR1dG9yZmlsZSAuIHM6ZXh0CisKKyIgMy4gRmluZGluZyB0aGUgZmlsZToKK2lmIGZpbGVyZWFkYWJsZShzOnR1dG9yeHgpCisgIGxldCAkVFVUT1IgPSBzOnR1dG9yeHgKK2Vsc2UKKyAgbGV0ICRUVVRPUiA9ICRWSU1SVU5USU1FIC4gczp0dXRvcmZpbGUKKyAgZWNobyAiVGhlIGZpbGUgIiAuIHM6dHV0b3J4eCAuICIgZG9lcyBub3QgZXhpc3QuXG4iCisgIGVjaG8gIkNvcHlpbmcgRW5nbGlzaCB2ZXJzaW9uOiAiIC4gJFRVVE9SCisgIDRzbGVlcAorZW5kaWYKKworIiA0LiBNYWtpbmcgdGhlIGNvcHkgYW5kIGV4aXRpbmcgVmltOgorZSAkVFVUT1IKK3dxISAkVFVUT1JDT1BZCmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLnpoLmJpZzUgYi9ydW50aW1lL3R1dG9yL3R1dG9yLnpoLmJpZzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhYWQ2NAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuemguYmlnNQpAQCAtMCwwICsxLDg1MiBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICAgIMV3ICAgICCq7yAgICAgvlwgICAgIMWqICAgoW0gViBJIE0gILHQICC1eyChbiAgIKJ3oncgICAgIKqppbsgMS41ICAgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICB2aW0grE+kQK3TqOOms6vcpmipUqVPqrqlXK/gq0SxYLFqpGqqur1zv+i+uaFDra2kX71ntFShQaZipbux0LV7t+2kpAorICAgICCko7ROuNSy06S2stCkRqFDpbux0LV7qrqzXa1wpdi80KxPwb+teqRAqMelsq1uqrqw8qW7qVKlT6FBptO0eLSkpm6zbworICAgICCox6lSpU+hQbF6tE6v4LD3q9yuZan2sU52aW237adApECt07Nxpc6qurhVr+C9c7/ovrmo06jPpc6kRqFDCisKKyAgICAgp7mmqKW7sdC1e6q6pLquZaRqrPm73a1uMjUtMzCkwMTBoUGo+qhNpF+xerBWvW2quq7JtqGhQworCisgICAgIKhDpEC4YKq6qVKlT77ep0CxTrd8p/On76W7pOWhQ7HAwsuxerRfqO6lu6TlqrqkQK3TsMalu6FBtU2r4aZisMalu6RXCisgICAgILZppuawVr1tKKZwqkexeqxPs3G5TCJ2aW10dXRvciKo07HSsMqx0LV7qrqhQai6u/Klu6TltE6kd7hnrE+wxqW7pEYpoUMKKworICAgICCkwbBPpEDCSaFKpbux0LV7qrqzXa1wq+S49KxPpmKoz6XOpKS2aabmvsey36q6oUOkXbROrE+7oaFBsXq73a1us3G5TAorICAgICCw9abmqVKlT6jTvsey36Wmrcylu6itqrqlv71Upc6qa6FDpnCqR7F6pXWsT75cxaqm06Sjvt6nQKFBqLq78rF6pWmv4AorICAgICC3fKvcp9a/8qfRs2+ox6lSpU+quqFJCisKKyAgICAgpm6kRqFBsnumYr3QvVSpd7F6qrpTaGlmdC1Mb2NrKKRqpHC8Z8LqqXfB5CnB2ahTprOr9qRVoUG1Tavhq/bB5L1MpFcKKyAgICAgqrqmcqXAweQgaiCorLD3pmiquqa4vMao07K+sMql+rzQoUGqvajsssSkQLhgqrqkuq5lr+Cw96e5pf6lUrqhq8y59aFDCisKK35+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+fgorCQkJssSkQMG/ssSkQLhgoUqyvrDKpfq80AorCisKKyAgIKGwobAgrW6yvrDKpfq80KFBvdCozLfTu6Gp+qTAp0+r9qRVIGihQmqhQmuhQmwgweShQyChsKGwCisKKwkgICAgIF4KKwkgICAgIGsJCSAgICC0o6XcoUogaCCqusHkpuykX6Wqw+ShQahDprir9qRVtE63fKZWpaqyvrDKoUMKKyAgICAgICA8IGgJIGwgPgkJICAgbCCqusHkpuykX6Vrw+ShQahDprir9qRVtE63fKZWpWuyvrDKoUMKKwkgICAgIGoJCQkgICBqIMHkrN2wX6jTq9y2SKRApOSmebrdpOimVrTCpFWqur1iwFmhQworCSAgICAgdgorCisgIDEuIL3QwEi3TqZiq8y59aS6sr6wyqX6vNChQaq9ptyxesSxsW+1zqpBrLCk7qFDCisKKyAgMi4gq/akVaRVpubB5ChqKaFBqr2o7KVYsnul+rzQrau0X6RVpuahQworCistLS0+ILJ7pmKxesCzuNOkd7hnvse3fKZwpvOyvrDKqOykVaRAwb+nYaFDCisKKyAgMy4gsnumYr3QqM+lzqRVpubB5KFBsU6l+rzQsr6wyqjsssSkR8G/oUMKKwortKOl3KFKpnCqR7F6pKO0sb1UqXexeqnSq/akVaq6pnKlwKFBvdCr9qRVPEVTQz7B5KZeqOylv7FgKE5vcm1hbCm80qahoUMKKyAgICAgILVNq+GmQaa4sXHB5L1Mv+mkSrF6t1Gtbqq6qVKlT6FDCisKK7SjpdyhSqX6vNDB5MCzt+2kXa/gpb+xYKR1p0CquqFDpv2sT6jPpc5oamtsweShQaZist+6RKSnq+GxerROr+Cw96fWs3QKKyAgICAgIKZhpmKrzLn1pLqlfLNCsr6wyqX6vNCkRqFDCisKK35+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+fgorCQkJssSkQMG/ssSkR7hgoUpWSU2qurZppEqpTbBopVgKKworCisgICEhIK9Tp0+0o6XcoUq3cb3QvlzFqqe5vuOlu6RAuGCquqS6rmWhQbVNq+Gkfq/gsPWm5qVIpFWp0sG/uNGquqlSpU+hQworCisgIDEuIL3Qq/Y8RVNDPsHkKLNvrE+ssKRGvVSrT7F6s0KmYqW/sWC80qahKaFDCisKKyAgMi4gtU2r4b/ppEqhSgkJCTpxISA8pl6orj4KKworLS0tPiCzb7rYpOimoaq6sGilWL1zv+i+ubW0pKO3fKtPpnOxerZppEq9c7/ovrmlSKjTqdKwtaq6p++wyqFDCisgICAgIKZwqkexerdRq0+mc6fzp++mQbBopVihQb3Qv+mkSqFKCisJCQkJOndxICA8pl6orj4KKworICAzLiCmcKpHsXqs3ajspEapUqVPpua0o6XcssWhQb3Qv+mkSq/gsPexYbF6pl6o7KW7sdC1e6q6qVKlT6FBqLq0TqxPoUoKKworCQl2aW10dXRvciA8pl6orj4KKworICAgICCzcbFgsaGqcKRVsXqkXaVppUilzrNvutik6KahoUoKKworCQl2aW0gdHV0b3IgPKZeqK4+CisKKy0tLT4gs2+4zKq6ICd2aW0nIKrtpdy2aaRKdmltvXO/6L65oUGm0yAndHV0b3Inq2isT7F6t8ezxq1uvXO/6Kq6pOWl86FDCisKKyAgNC4gpnCqR7F6pturSKR3uGeoY6hjsE+m7aRGs2+ox6hCxkqqurjcoUG90LFxqELGSjGw9abmqOyoQsZKM7BopVihQbVNCisgICAgIKvhpkGmuLZppEq9c7/ovrmhQ7G1tduxTqX6vNCyvrDKqOyyxKRAwb+yxKRUuGCo08R+xPKn2q3Mqrqx0LV7wb+40aFDCisKK35+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+fgorCQkJssSkQMG/ssSkVLhgoUqk5aW7vXO/6KSnp1KwoworCisKKyAgICoqIKZipb+xYChOb3JtYWwpvNKmoaRVoUGlaaVIq/akVSB4IMHkqNOnUrCjpfq80KnSpmKm7LhtqrqmcrLFoUMqKgorCisgIDEuIL3QsU6l+rzQsr6wyqjspbu4YKSkpFWtsbzQsE+msyAtLS0+IKq6qLqkQKbmoUMKKworICAyLiCssKRGrdelv7/ppEq/+bt+oUG90LFOpfq80LK+pty3x7PGp1Kwo6q6pnKyxaq6puy4bbNCoUMKKworICAzLiC1Tavhq/akVSB4IMHksU6/+bt+pnKyxadSsKOxvKFDCisKKyAgNC4grau0X6hCxkoyqOyoQsZKNKFBqr2o7KV5pGyt16W/rLCk7qFDCisKKy0tLT4gVGhlIGNjb3cganVtcGVkZCBvdnZlcnIgdGhoZSBtb29vbi4KKworICA1LiCmbqRGoUG406bmpHe4Z63Xpb+kRqFBpFWkQLhgpLquZaxPssSkQMG/ssSlfLhgoUMKKworr1OnT7SjpdyhSqZisXrCc8T9pbux0LV7rsmhQaSjrW6xaqbmsE++0KFDsE+m7aRAwkmhSqZiqM+lzqSkvsey36FDCisKKworCit+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+fn4KKwkJICAgICCyxKRAwb+yxKV8uGChSqTlpbu9c7/opKe0oaRKCisKKworCSAqKiCmYqW/sWC80qahpFWhQaVppUir9qRVIGkgweSo07ShpEqk5aW7oUMqKgorCisgIDEuIL3QsU6l+rzQsr6wyqjspbu4YKSkpFWtsbzQsE+msyAtLS0+IKq6ssSkQKbmoUMKKworICAyLiCssKRGqM+xb7LEpECm5qS6rmW5cKZQpF+yxKRHpuahQb3QsU6l+rzQsr6m3KTlpbuyxKRArdOmcrLFt8ezxrShpEoKKyAgICAgqrqm7LhtoUMKKworICAzLiC1Tavhq/akVSBpIMHkoUGxtbXbv+mkSqWyrW6quqTlpbumcrLFoUMKKworICA0LiCp0qazpOWlu7Ojrdelv6e5sqahQb3Qq/akVSA8RVNDPiDB5Krwpl6lv7FgvNKmoaFDCisgICAgIK2rtF+oQsZKMqbcqELGSjSlSKtLrdelv6V5pGyhQworCistLS0+IFRoZXJlIGlzIHRleHQgbWlzbmcgdGhpcyAuCistLS0+IFRoZXJlIGlzIHNvbWUgdGV4dCBtaXNzaW5nIGZyb20gdGhpcyBsaW5lLgorCisgIDUuIKZwqkexernvpOWlu7ShpEq+3qdApHe4Z6vcuqG3TqFBvdCxtbXbvlzFqqRVrbGquqRwtbKhQworCisKKworfn5+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+CisJCQkgICAgICAgssSkQMG/pHC1sgorCisKKyAgMS4gpfq80KZiq8y59aTlpbukpKq6sr6wyqxKpWmlSKXOvWLAWcHkoUGkXaVppUioz6XOIGhqa2wgpnKlwMHkoUMKKwkgaCAopaqyvikJaiAopFWm5ikgICAgICAgayAopFem5ikJICAgIGwgKKVrsr4pCisKKyAgMi4gsf22aaRKdmltvXO/6L65KLFxqVKlT6bmtKOl3LLFKaFBvdC/6aRKoUp2aW0gpOWl86ZXIDymXqiuPgorCisgIDMuILH9sGilWHZpbb1zv+i+uaFBvdC/6aRKpUikValSpU+p8bHzqdKms63Xp++hSgorCisJPEVTQz4gICA6cSEJIDymXqiuPgorCisgICAgIKnOqsy/6aRKpUikValSpU+rT6ZzqdKms63Xp++hSgorCisJPEVTQz4gICA6d3EJIDymXqiuPgorCisgIDQuIKZipb+xYLzSpqGkVadSsKOl+rzQqdKmYqbsuG2quqZyssWhQb3Qq/ahSiB4CisKKyAgNS4gpmKlv7FgvNKmoaRVrW6mYqX6vNCp0qZipuy4bbZ9qWy0oaRKpOWlu6FBvdCr9qFKCisKKwkgaSAgICAgv+mkSqWyrW6k5aW7CTxFU0M+CisKK69Tp0+0o6XcoUqr9qRVIDxFU0M+IMHkt3yxYbF6pl6o7KW/sWC80qahqc6qzKj6rvikQK3TpKO0wbHmqc6qzLOhpMCnuaaoCiuquqlSpU+hQworCiumbqRGoUGyxKRAwb+o7Ka5tbKn9KFDpFWtsbG1pFWo08R+xPKyxKRHwb+quqS6rmWhQworCisKK35+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+fgorCQkJssSkR8G/ssSkQLhgoUqnUrCjw/6pUqVPCisKKworCSAgICAqKiC/6aRKIGR3IKVppUixcaX6vNCzQqdSsKOm3KRArdOz5qZyL7PmtfyquqW9p8ChQyoqCisKKyAgMS4gvdCr9qRVIDxFU0M+IMHkvVSrT7F6s0KkX6W/sWC80qahoUMKKworICAyLiC90LFOpfq80LK+sMqo7KW7uGCkpKRVrbG80LBPprMgLS0tPiCquqi6pECm5qFDCisKKyAgMy4gvdCxTqX6vNCyvqbct8ezxq1up1Kwo6q6s+a1/Kq6tn2pbKFDCisKKyAgNC4gsbW127/ppEogZHcgp1Kwo7G8uNOz5rX8oUMKKworICCvU6dPtKOl3KFKsXqp0r/ppEqquiBkdyC3fKZisXq/6aRKqrqmUK7JpViye6Ziq8y59aq6s8yr4aRApuahQ6Zwqkexer/pCisgIKRKprO7fqFBvdCr9qRVIDxFU0M+IMHkqPqu+KFBtU2r4a2rt3OmQajToUMKKworLS0tPiBUaGVyZSBhcmUgYSBzb21lIHdvcmRzIGZ1biB0aGF0IGRvbid0IGJlbG9uZyBwYXBlciBpbiB0aGlzIHNlbnRlbmNlLgorCisgIDUuIK2rtF+oQsZKM6bcqELGSjShQaq9ptyleaRsrdelv6e5sqahQ7G1tdvEfsTyssSkR8G/ssSkR7hgpLquZaFDCisKKworCit+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+fn4KKwkJICAgICAgssSkR8G/ssSkR7hgoUqo5KVMp1Kwo8P+qVKlTworCisKKwkJICAgKiogv+mkSiBkJCCxcbftq2Wl+rzQp1Kwo6jspualvaFDKioKKworICAxLiC90Kv2pFUgPEVTQz4gweS9VKtPsXqzQqRfpb+xYLzSpqGhQworCisgIDIuIL3QsU6l+rzQsr6wyqjspbu4YKSkpFWtsbzQsE+msyAtLS0+IKq6qLqkQKbmoUMKKworICAzLiC90LFOpfq80LK+sMqo7LjTpuaquqfAs6EopF20TqxPpmKyxKRArdPCSbi5oaUuoaar4a2xKaFDCisKKyAgNC4gtU2r4b/ppEogZCQgsXGl+rzQs0KnUqbct+2rZabmp8CzoaFDCisKKy0tLT4gU29tZWJvZHkgdHlwZWQgdGhlIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuCisKKworICA1LiC90MR+xPK+x7LfssSkR8G/ssSkVLhgtE6qvrlErE+r57vypl6oxqRGoUMKKworCisKKworCit+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+fn4KKwkJICAgICCyxKRHwb+yxKRUuGChSsP2pF+pUqVPqU2577ZICisKKworICCnUrCjqVKlTyBkIKq6ruamoaZwpFWhSgorCisJIFtudW1iZXJdICAgZAlvYmplY3QJICAgIKnOqswgICAgIGQJIFtudW1iZXJdICAgb2JqZWN0CisKKyAgqOS3TqZwpFWhSgorICAgIG51bWJlciAtIKVOqu2w9abmqVKlT6q6pri8xiilab/vtrWhQa/KrNmzXbhtrLAgMSApoUMKKyAgICBkIC0gpU6q7adSsKOhQworICAgIG9iamVjdCAtIKVOqu2pUqVPqdKtbr7ep0CqurnvtkgopFWtsaazrNvD9qS2stApoUMKKworICCkQK3TwrK1daq6ue+2SKZDqu2hSgorICAgIHcgLSCxcbftq2Wl+rzQt+2rZabsuG2qvajss+amci+z5rX8pb2nwKFBpV2sQarFruahQworICAgIGUgLSCxcbftq2Wl+rzQt+2rZabsuG2qvajss+amci+z5rX8pb2nwKFBpv2sTyAqpKMqIKVdrEGqxa7moUMKKyAgICAkIC0gsXG37atlpfq80Lftq2Wm7Lhtqr2o7Lftq2Wm5qW9oUMKKworr1OnT7SjpdyhSgorICAgILnvpF+raaRfsbSvwarMoUG90KZipb+xYLzSpqGkVa2xtsir9qVOqu2s28Czue+2SKq6weSm06SjqM+lzqlSpU+hQatoCisgICAgsU6s3ajspfq80Kq6sr6wyqW/pnCkV62xqrq577ZIpkOq7anSpU6q7aq6pEC8y6FDCisKKworCisKK35+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+fgorCQmyxKRHwb+yxKV8uGChSrnvtkipUqVPqrqvU67tsaGqcAorCisKKwkgICAgICAgKiogv+mkSiBkZCClaaVIp1Kwo77jpECt07ftq2Wm5qFDICoqCisKKyAgxbOkX77jpuanUrCjqrqwqsBXq9ehQVZJTSCqurNdrXCqzKhNqXetbsKypMa+46bmp1Kwo6FBtsi73a1upmKmUKRApuakVworICDAu6W0qOKmuCBkILROpWmlSKdSsKOxvKX6vNCp0qZiqrq+46bmpEahQworCisgIDEuIL3QsU6l+rzQsr6wyqjspbu4YKSkpFWtsaq6tXWleaxxuKikpKq6ssSkR6bmoUMKKyAgMi4gv+mkSiBkZCCnUrCjuNOm5qFDCisgIDMuILVNq+GyvrDKqOyyxKV8puahQworICA0LiCxtbXbv+mkSiAyZGQgKMHZsE+xb6tlrbHBv7lMqrogbnVtYmVyLWNvbW1hbmQtb2JqZWN0ILbcoUgpIKdSsKOo4qbmoUMKKworICAgICAgMSkgIFJvc2VzIGFyZSByZWQsCisgICAgICAyKSAgTXVkIGlzIGZ1biwKKyAgICAgIDMpICBWaW9sZXRzIGFyZSBibHVlLAorICAgICAgNCkgIEkgaGF2ZSBhIGNhciwKKyAgICAgIDUpICBDbG9ja3MgdGVsbCB0aW1lLAorICAgICAgNikgIFN1Z2FyIGlzIHN3ZWV0CisgICAgICA3KSAgQW5kIHNvIGFyZSB5b3UuCisKKworfn5+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+CisJCQkgssSkR8G/ssSkrbhgoUq6Ta74w/6pUqVPCisKKworCSAqKiC/6aRKIHUgqNO6Ta74s8yr4bD1puaquqlSpU+hQb/ppEogVSCo063Xpb++46bmoUMqKgorCisgIDEuIL3QsU6l+rzQsr6wyqjspbu4YKSkpFWtsbzQsE+msyAtLS0+IKq6qLqkQKbmoUGow7FOqOS4baRfssSkQK3Tv/m7fgorICAgICCzQqFDCisgIDIuIL/ppEogeCCnUrCjssSkQK3TpKO3UatPr2SquqZypcChQworICAzLiC1Tavhv+mkSiB1ILpNrvizzKvhsPWm5qq6KKRAprgpqVKlT6FDCisgIDQuILNvpritbqjPpc4geCCt16W/pbum5qq6qdKms7/5u36hQworICA1LiCye6Ziv+mkSqRArdOkarxnqrogVSChQavstF+o7LjTpuaquq3sqWyqrLpBoUMKKyAgNi4gsbW126Zopri/6aRKIHUgpUi6Ta74IFUgpUikzqfzq2WquqlSpU+hQworICA3LiC1TavhpmimuL/ppEogQ1RSTC1SICil/av2pFUgQ1RSTCDB5KSjqfG2faFBsbW127/ppEogUiDB5CkgoUGzb7zLtE4KKyAgICAgpWmlSLD1puar7LRfqVKlT6FBpF20TqxPuk2u+LG8uk2u+KlSpU+hQworCistLS0+IEZpaXggdGhlIGVycm9ycyBvb24gdGhoaXMgbGluZSBhbmQgcmVlcGxhY2UgdGhlbSB3aXR0aCB1bmRvLgorCisgIDguILNvqMezo6xPq0SxYKazpc6quqlSpU+hQ6RVrbGsT7LEpEfBv6q6pHC1sqRGoUMKKworCisKKworfn5+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+CisJCQkgICAgICAgssSkR8G/pHC1sgorCisKKyAgMS4gsf2xcbftq2Wl+rzQp1Kwo6bcs+amci+z5rX8pb2nwKFBvdC/6aRKoUpkdworCisgIDIuILH9sXG37atlpfq80KdSsKOm3Lftq2Wm5qW9p8ChQb3Qv+mkSqFKZCQKKworICAzLiCx/adSsKO+46bmoUG90L/ppEqhSmRkCisKKyAgNC4gpmKlv7FgvNKmoaRVpECt06lSpU+quq7mpqGsT6FKCisKKyAgICAgICBbbnVtYmVyXSAgIGNvbW1hbmQgICBvYmplY3QgICAgIKnOqswgICAgIGNvbW1hbmQJW251bWJlcl0gICBvYmplY3QKKyAgICAgqOS3TqxPoUoKKyAgICAgICBudW1iZXIgLSClTqrtqrqsT6lSpU+w9abmqrqmuLzGCisgICAgICAgY29tbWFuZCAtIKVOqu2tbrC1qrqoxrGhoUGk8aZwIGQgpU6q7adSsKMKKyAgICAgICBvYmplY3QgLSClTqrtrW6+3qdAqrq577ZIoUGk8aZwIHcgpU6q7bPmpnIvs+a1/KFBJCClTqrtqOym5qW9taW1paFDCisJCSQgKHRvIHRoZSBlbmQgb2YgbGluZSksIGV0Yy4KKworICA1LiCx/bpNrvilSKtlqrq+3qdAoUG90L/ppEqhSnUgKKRwvGequnUpCisgICAgILH9uk2u+KZipECm5qSkqdKwtaq6p++wyqFBvdC/6aRKoUpVICikarxnqrpVKQorICAgICCx/bpNrvilSKtlqrq6Ta74qVKlT6FBq+y0X6VIq2Wqur7ep0C1sqpHoUG90L/ppEqhSkNUUkwtUgorCit+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+fn4KKwkJCSCyxKRUwb+yxKRAuGChSrhtpErD/qlSpU8KKworCisJICAgICAgICoqIL/ppEogcCCxTrPMq+GkQKa4p1Kwo6q6pLquZbhtpEql+rzQpKer4SAqKgorCisgIDEuIL3QsU6l+rzQsr6wyqjspbu4YKSkpFWtsaXcrVOscbioqrqtuqbmoUMKKworICAyLiC/6aRKIGRkILFOuNOm5qdSsKOhQbNvvMu3fLFOuNOm5qtPpnOo7HZpbaq6vXeoUrDPpKShQworCisgIDMuILG1tduxTqX6vNCyvrDKqOy3x7PGuG2kSqq6puy4baq6pFek6KFDsE+m7aFKrE+kV6TorkChQworCisgIDQuILVNq+GmYqW/sWC80qahpFUoPEVTQz7B5LZppEopoUG/6aRKIHAgsU6406bm1t+2S7htpEqhQworCisgIDUuIK2rtF+oQsZKMqbcqELGSjShQbFOqdKms6q6puaozKfHqfG4bajspb+9VKq6puy4baRXoUMKKworICAgICBkKSBDYW4geW91IGxlYXJuIHRvbz8KKyAgICAgYikgVmlvbGV0cyBhcmUgYmx1ZSwKKyAgICAgYykgSW50ZWxsaWdlbmNlIGlzIGxlYXJuZWQsCisgICAgIGEpIFJvc2VzIGFyZSByZWQsCisKKworCit+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+fn4KKwkJICAgICAgILLEpFTBv7LEpEe4YKFKtMC0q8P+qVKlTworCisKKwkgICoqIL/ppEogciCpTaRArdOmcrLFtMC0q6X6vNCp0qZipuy4baq6pnKyxaFDKioKKworICAxLiC90LFOpfq80LK+sMqo7KW7uGCkpKRVrbG80LBPprMgLS0tPiCqurLEpECm5qFDCisKKyAgMi4gvdCyvrDKpfq80KjsssSkQK3Tv/m7fqq6vkG37absuG2hQworCisgIDMuILG1tdu/6aRKIHIgoUGzb7zLtE6v4LFOv/m7frTAtKuxvKRGoUMKKworICA0LiCtq7RfqELGSjKpTahCxkozoUGqvajsssSkQKbmpHe4Z63Xp++nubKmoUMKKworLS0tPiAgV2hhbiB0aGlzIGxpbWUgd2FzIHR1b2VkIGluLCBzb21lb25lIHByZXNzd2Qgc29tZSB3cm9qZyBrZXlzIQorLS0tPiAgV2hlbiB0aGlzIGxpbmUgd2FzIHR5cGVkIGluLCBzb21lb25lIHByZXNzZWQgc29tZSB3cm9uZyBrZXlzIQorCisgIDUuILVNq+Gn2q3MxH7E8r7HrtWyxKRUwb+yxKRUuGChQworCiuvU6dPtKOl3KFKpMGwT7F6rW6mYqjPpc6kpL7Hst+hQabTpKOsT6ZisE++0KSkvsey36FDCisKKworCit+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+fn4KKwkJCbLEpFTBv7LEpFS4YKFKp/On78P+qVKlTworCisKKwkgICAqKiCtbqfvxdykQK3Ts+amci+z5rX8qrqzoaTAqc6qzKX+s6GhQb3Qv+mkSiBjdyAqKgorCisgIDEuIL3QsU6l+rzQsr6wyqjspbu4YKSkpFWtsbzQsE+msyAtLS0+IKq6ssSkQKbmoUMKKworICAyLiCxtbXbp+Kl+rzQqfGmYrPmtfwgbHVidyCquqZypcAgdSCquqbsuG2ourjMoUMKKworICAzLiC1Tavhv+mkSiBjdyC0TqVppUit16W/uNOz5rX8pEYopmKlu6jSs2+4zKxPv+mkSiBpbmUgoUMpCisKKyAgNC4gs8yr4av2IDxFU0M+IMHkoUG1Tavhpfq80Kl3puyo7KRVpECt07/5u36yxKRArdO3x7PGp/On76q6pnKlwLNCoUMKKworICA1LiCtq7RfqELGSjOpTahCxko0oUGqvajsssSkQK3TpXmkbKe5pf65cKZQssSkR63TpXmkbKFDCisKKy0tLT4gVGhpcyBsdWJ3IGhhcyBhIGZldyB3cHRmZCB0aGF0IG1ycmYgY2hhbmdpbmcgdXNmIHRoZSBjaGFuZ2UgY29tbWFuZC4KKy0tLT4gVGhpcyBsaW5lIGhhcyBhIGZldyB3b3JkcyB0aGF0IG5lZWQgY2hhbmdpbmcgdXNpbmcgdGhlIGNoYW5nZSBjb21tYW5kLgorCiu0o6XcoUq90Kpgt04gY3cgqVKlT6Sjtsi2yKxPtMC0q6RGpECt07PmtfyhQaRdxf2xerZppEqk5aW7tKGkSqqsukGkRqFDCisKKworCit+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+fn4KKwkJICAgICAgILLEpFTBv7LEpXy4YKFKqM+lzmOr/KVPqrqo5KVMp/On78P+qVKlTworCisKKwkgICAgICoqIKfzp+/D/qv8pU+laaVIqM+lzqZQp1Kwo8P+qVKlT6nSqM+lzqq6ue+2SLDRvMahQyoqCisKKyAgMS4gp/On78P+q/ylT6q6pHWnQKTopqG48qdSsKPD/qlSpU+sT6RArVCquqFDvt6nQK7mpqGsT6FKCisKKyAgICAgICBbbnVtYmVyXSAgIGMgICBvYmplY3QJICAgqc6qzAkgICAgYwlbbnVtYmVyXSAgIG9iamVjdAorCisgIDIuILnvtkiw0bzGpF2sT6RAvMuquqFBpPGmcCB3IKVOqu2z5qZyL7PmtfyhQSSlTqrtpualvbWltaWhQworCisgIDMuIL3QsU6l+rzQsr6wyqjspbu4YKSkpFWtsbzQsE+msyAtLS0+IKq6ssSkQKbmoUMKKworICA0LiCxtbXbsU6l+rzQsr6wyqjsssSkQK3Tv/m7frNCoUMKKworICA1LiC1Tavhv+mkSiBjJCCoz7FvuNOm5rPRpFWqurOhpMCn86W/sW+mULLEpEem5qRAvMuhQ7PMq+Gr9iA8RVNDPiDB5KFDCisKKy0tLT4gVGhlIGVuZCBvZiB0aGlzIGxpbmUgbmVlZHMgc29tZSBoZWxwIHRvIG1ha2UgaXQgbGlrZSB0aGUgc2Vjb25kLgorLS0tPiBUaGUgZW5kIG9mIHRoaXMgbGluZSBuZWVkcyB0byBiZSBjb3JyZWN0ZWQgdXNpbmcgdGhlICBjJCAgY29tbWFuZC4KKworCisKK35+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+fgorCQkJICAgICAgILLEpFTBv6RwtbIKKworCisgIDEuIK1urau3c7htpEqkd7hnp1Kwo6q6pOWlu6S6rmWhQb3Qv+mkSqRwvGemcqXAIHChQ7jTvt6nQKVppUixTqR3p1KwoworICAgICCquqTlpbukuq5luG2kX6X6vNCkp6vhoUOmcKpHs8yr4aRAprinUrCjqrqsT6RArdO+46bmoUGourvyuNOm5rFOuG0KKyAgICAgpF+37atlpfq80KnSpmKm5qq6pFWkQKbmoUMKKworICAyLiCtbrTAtKul+rzQqdKmYqbsuG2quqZyssWhQb3Qv+mkSqRwvGequiByIKlNrW60wLSrsbyt7KbsuG2mcrLFqrq3c6ZyCisgICAgILLFp1mlaaFDCisKKyAgMy4gp/On78P+qVKlT6S5s1yxeqfvxdyr/Kl3qrq577ZIoUGxcbftq2Wl+rzQqdKmYqbsuG2qvajsue+2SKq6pb2nwKFDCisgICAgIKTxpnC/6aRKIGN3IKVppUi0wLSrt+2rZaX6vNCo7LPmtfyquqW9p8CquqS6rmWhRr/ppEogYyQgpWmlSLTAtKu37QorICAgICCrZaX6vNCo7Kbmpb2quqS6rmWhQworCisgIDQuIKfzp+/D/qlSpU+quq7mpqGsT6FKCisKKwkgW251bWJlcl0gICBjCW9iamVjdAkgICAgICCpzqrMCWMgICBbbnVtYmVyXSAgIG9iamVjdAorCiukVa2xp9qtzMR+xPK+x7LfpFWkQMG/oUMKKworCisKK35+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+fgorCQkgICAgILLEpXzBv7LEpEC4YKFKqXem7KTOpOWl86qsukEKKworCisgICoqIL/ppEogQ1RSTC1nIMXjpdy37atlvXO/6KTlpfOkpLftq2Wl+rzQqdKmYqbmpuy4baVIpM6k5aXzqqy6QatIrqehQworICAgICC/6aRKIFNISUZULUcgq2iqvbG1uPXC4KjspOWl86SkqrqsWaRAq/ypd6bmoUMqKgorCisgILSjpdyhSqTBsE+tbqX9s3HFqqW7uGCkuq5loUGkp6vhpH6laaVIsPWm5qVIpFWoQsZKISEhCisKKyAgMS4gq/akVSBDVFJMIMHkpKOp8bZ9tU2r4av2IGcgweShQ7VNq+G0Trd8rN2o7K22rbGzzKmzs6GlWLJ7pECt06qsukGrSAorICAgICCup6bmoUHF46Xcqrqkuq5lrE+37atlvXO/6Kq6pOWl86ZXqU2k5aXzqrrBYKbmvMahQ73QsE+m7ahCxkozqrqm5ri5oUMKKworICAyLiCr9qRVIFNISUZULUcgweSlaaVIqM+xb7ftq2Wl+rzQqr2xtbj1wuCo7KTlpfOzzKvhpECm5qFDCisKKyAgMy4gv+mkSrF6tL+wsa9kqrqm5ri5oUG1Tavhq/akVSBTSElGVC1HoUOzb7zLtE6laaVIqvCmXqjssXqyxKRAprir9qRVCisgICAgIENUUkwtZyCuyanSpmKquqbmpm6kRqFDqmC3TqFKv+mkSqbmuLmuyaFBpua4uaxPpKO3fKZiq8y59aRXxeOl3KVYqNMKKyAgICAgqrqhQworCisgIDQuIKZwqkfEQLdOoUGxeqVppUjEfsTysPWm5qhCxkoxptyoQsZKpFShQworCisKKworfn5+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+CisJCQmyxKV8wb+yxKRHuGChSrdqr8HD/qlSpU8KKworCisgICAgICoqIL/ppEogLyClSKTOp8DASKq6pnKyxabqpWmlSKXOpUimYrftq2Wk5aXzpKSsZKfkuNOmcrLFpuqhQyoqCisKKyAgMS4gpmKlv7FgvNKmoaRVv+mkSiAvIKZyssWhQ7F6prmuybd8qmC3TqjsuNOmcrLFqU2l+rzQs6O3fKVYsnumYqvMufWpsworICAgICCzoaFBs2+48iA6IKlSpU+sT6RAvMuquqFDCisKKyAgMi4gsbW127/ppEogZXJycm9vciA8pl6orj6hQ6i6rdNlcnJyb29ytE6sT7F6rW6sZKfkqrqmcrLFpuqhQworCisgIDMuIK1urGSn5KZQpFekQKa4qrqmcrLFpuqhQaV1u92tbqv2IG4gweShQ61uplas26TPpOimVqxkp+SmUKRXpECmuKq6pnIKKyAgICAgssWm6qFBvdC/6aRKIFNoaWZ0LU4gp1mlaaFDCisKKyAgNC4gpnCqR7F6t1GwZqZWrGSn5KZyssWm6qFBvdCoz6XOID8gpU60wCAvILZppuahQworCistLS0+IFdoZW4gdGhlIHNlYXJjaCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGZpbGUgaXQgd2lsbCBjb250aW51ZSBhdCB0aGUgc3RhcnQuCisKKyAgImVycnJvb3IiIGlzIG5vdCB0aGUgd2F5IHRvIHNwZWxsIGVycm9yOyAgZXJycm9vciBpcyBhbiBlcnJvci4KKworICC0o6XcoUqmcKpHrGSn5KR3uGeo7LlGpOWl86W9p8ChQaxkp+S3fKbbsMqxcaTlpfPAWbOhxH7E8qxkp+ShQworCisKKworfn5+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+CisJCSAgILLEpXzBv7LEpFS4YKFKsHS576xBuLmquqxkp+QKKworCisJICAgICAgKiogq/YgJSClaaVIrGSn5LB0ue+quqxBuLkgKaFCXaFCfaFDKioKKworICAxLiCn4qX6vNCp8aZipbu4YKRVrbG80LBPprMgLS0+IKi6pECm5qSkqrql9KbzpECt0yAooUJbIKnOIHsgs0KhQworCisgIDIuILG1tdur9iAlIKZyssWhQworCisgIDMuIKa5rsml+rzQqrqm7LhtwLO37axPpmKwdLnvqrqsQbi5s0KhQworCisgIDQuIKZBprir9iAlILROpWmlSLj1pl6wdLnvqrqyxKRArdOsQbi5s0KhQworCistLS0+IFRoaXMgKCBpcyBhIHRlc3QgbGluZSB3aXRoICgncywgWydzIF0gYW5kIHsncyB9IGluIGl0LiApKQorCiu0o6XcoUqmYrV7p8e91bjVrsmhQbNvrdOlXK/gpc6o06xkp+Sko7B0ue+quqxBuLmsT6vcprOlzqq6oUMKKworCisKKworCisKK35+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+fgorCQkgICAgICCyxKV8wb+yxKV8uGChSq3Xpb+/+bt+qrqk6KprpKekQAorCisKKwkJKiogv+mkSiA6cy9vbGQvbmV3L2cgpWmlSLTAtKsgb2xkIKywIG5ld6FDKioKKworICAxLiC90LFOpfq80LK+sMqo7KW7uGCkpKRVrbG80LBPprMgLS0tPiCquqi6pECm5qFDCisKKyAgMi4gv+mkSiA6cy90aGVlL3RoZSA8pl6orj4goUO90Kpgt06406lSpU+ldafvxdyl+rzQqdKmYqbmqrqyxKRArdOkx7B0CisgICAgIKbqoUMKKworICAzLiC/6aRKIDpzL3RoZWUvdGhlL2cJq2isT7TAtKul/qbmqrqkx7B0puqhQworCistLS0+IHRoZSBiZXN0IHRpbWUgdG8gc2VlIHRoZWUgZmxvd2VycyBpcyBpbiB0aGVlIHNwcmluZy4KKworICA0LiCtbrTAtKuo4qbmpKe2oaVYsnuquqhDrdOkx7B0puqhQb3Qv+mkSiA6Iywjcy9vbGQvbmV3L2cgKCMsI6VOqu2quqxPCisgICAgIKjipuaquqbmuLkpoUO/6aRKIDolcy9vbGQvbmV3L2cgq2isT7TAtKu+463TpOWl86SkqrqoQ63TpMewdKbqoUMKKworCisKKworfn5+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+CisJCQkgICAgICAgssSlfMG/pHC1sgorCisKKyAgMS4gQ3RybC1nIKXOpF/F46Xct+2rZaX6vNCp0qZipuy4balNpOWl86qsukGrSK6noUNTaGlmdC1HIKXOpF+xTqX6vNC49QorICAgICDC4KbcpOWl87PMq+GkQKbmoUOl/bpWpEqkQK3Tpua4ubVNq+Gr9iBTaGlmdC1HIKtorE+xTqX6vNCyvrDKpty406bmCisgICAgILi5pU6q7aq6puahQworCisgIDIuIL/ppEogLyC1TavhuvLASKRArdOmcrLFpuqsT6torE+mYrftq2Wp0r1zv+iquqTlwMmkpKZWq+GsZKfkuNOmcrLFpuqhQworICAgICC/6aRKsN24uSA/ILVNq+G68sBIpECt06ZyssWm6qxPq2isT6Zit+2rZanSvXO/6Kq6pOXAyaSkplarZaxkp+S406ZyCisgICAgILLFpuqhQ6e5pqikQKa4rGSn5KSnq+Gr9iBuIMHkq2isT62rtF+kV6RApriquqlSpU+hQaVppmKmUKRApOimVqRXrGQKKyAgICAgp+SkVaRArdOmcrLFpuqp0qZioUapzqrMq/YgU2hpZnQtTiCmVqzbpM+k6KZWrGSn5KRVuNOmcrLFpuqp0qZioUMKKworICAzLiCmcKpHpfq80Lftq2Wm7LhtrE+sQbi5KKFCKaFCW6FCXaFCe6FCfaFBq/YgJSClaaVIsU6l+rzQsr6wyqjssHS576q6CisgICAgIKxBuLmkV6FDCisKKyAgNC4gpmKkQKbmpLq0wLSrwFmkQK3TpnKyxabqIG9sZCCssLdzqrqmcrLFpuogbmV3oUG90L/ppEogIDpzL29sZC9uZXcKKyAgICAgpmKkQKbmpLq0wLSrqdKms6q6pnKyxabqIG9sZCCssLdzqrqmcrLFpuogbmV3oUG90L/ppEogIDpzL29sZC9uZXcvZworICAgICCmYqjipuakurTAtKup0qazqrqmcrLFpuogb2xkIKywt3OquqZyssWm6iBuZXehQb3Qv+mkSiAgOiMsI3Mvb2xkL25ldy9nCisgICAgIKZipOWl86S6tMC0q6nSprOquqZyssWm6iBvbGQgrLC3c6q6pnKyxabqIG5ld6FBvdC/6aRKICA6JXMvb2xkL25ldy9nCisgICAgILZppual/qTltMC0q67JuN+w3aXOpOG9VLt7qEOt07TAtKu73bJLpVsgYyC/77a1oUG90L/ppEogOiVzL29sZC9uZXcvZ2MKKworCit+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+fn4KKwkJssSkrcG/ssSkQLhgoUqmYiBWSU0gpLqw9abmpX6zoalSpU+quqToqmsKKworCisJICAgKiogv+mkSiA6ISC1TavhuvLASLXbv+mkSqRArdOlfrOhqVKlT6VppUiw9abmuNOlfrOhqVKlT6FDKioKKworICAxLiCr9qRVp9qtzKnSvPSxeKq6IDogqVKlT7NduG2l+rzQqOyrzLn1qbOzoaFDs2+8y7ROpWmlSMX9sXq/6aRKqVKlT6RGoUMKKworICAyLiCxtbXbv+mkSrdQucS4uSAhILNvrdOmcrLFoUGzb7zLtE6kubNcsXqw9abmpX6zoaq6IHNoZWxsIKlSpU+kRqFDCisKKyAgMy4gp9qtzKVIIGxzIKlSpU+ssKjSoUO/6aRKICFscyA8pl6orj4goUO406lSpU+0Trd8pkPBfKVYsXq37atlpdi//aq6CisgICAgIKS6rmWhQbROpnCmULF6pmKpUqVPpua0o6XcssWkVb/ppEogbHMgqVKlT6q6tbKqR6RAvMuhQ6ZwqkcgIWxzIKhTsF8KKyAgICAgp0ClzqFBsXqlaaVIuNW41SA6IWRpciCs3azdoUMKKworLS0tPiC0o6XcoUogqdKms6q6pX6zoalSpU+zo6VppUilSLNvutik6KahsPWm5qFDCisKKy0tLT4gtKOl3KFKIKnSprOquiA6IKlSpU+zo6WytrelSCA8pl6orj4gp2my16FDCisKKworCisKK35+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+fgorCQkgICAgICCyxKStwb+yxKRHuGChSsP2pF+rT6ZzpOWl86q6p/OmaKtIrqcKKworCisJICAgICAqKiCtbrFOue+k5aXzqrqn77DKq0+mc6jspOWl86SkoUG90L/ppEogOncgRklMRU5BTUUgKioKKworICAxLiC/6aRKIDohZGlyIKnOqswgOiFscyDA8qq+t+2rZaXYv/2quqS6rmWhQ7F6wLO37aR3qr65RLPMq+HB2bFvulYKKyAgICAgPKZeqK4+IKdhoUMKKworICAyLiC/777cpECt06l8pbymc6ZipOWl86ZXoUGk8aZwIFRFU1QgoUMKKworICAzLiCxtbXbv+mkSiA6dyBURVNUICAoprmzQiBURVNUIKxPsXqp0r/vvtyquqTlpfOmV6FDKQorCisgIDQuILjTqVKlT7d8pUggVEVTVCCssKTlpfOmV6tPpnO+463TpOWl8yAoVklNILHQtXspoUOssKRGvVSrT6W/vVSrT6ZzoUEKKyAgICAgvdCmQaa4v+mkSiA6IWRpciCsZKzdsXqquqXYv/2mQ6rtpLquZaFDCisKKy0tLT4gvdCqYLdOoUqmcKpHsXqwaKVYIFZJTSC1TavhpmKlSKTlpfOmVyBURVNUIKywsNG8xrZppEqhQai6u/K406TlpfOkugorICAgICCuZcCzuNOmULF6q0+mc67Jqrqk5aXzpLquZaxPp7ml/qRAvMuquqFDCisKKyAgNS4gsnumYrF6pWmlSLNxuUy/6aRKIDohcm0gVEVTVCCo06dSsKMgVEVTVCCk5aXzpEahQworCisKKworfn5+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+CisJCSAgICCyxKStwb+yxKRUuGChSqRArdOo46azv+++3KnKqrqrT6ZzqVKlTworCisKKwkJKiogrW6rT6ZzpOWl86q6s6GkwKS6rmWhQb3Qv+mkSiA6IywjIHcgRklMRU5BTUUgKioKKworICAxLiCmQajTsPWm5qRAprggOiFkaXIgqc6qzCA6IWxzIMDyqr637atlpdi//aq6pLquZaFBtU2r4b/vvtykQK3Tpli+Qaq6CisgICAgIKSjraumV6q6pOWl86ZXoUGk8aZwIFRFU1QgoUMKKworICAyLiCxtbXbsU6l+rzQsr6wyqbcpbuttqq6s8yzu7rdoUG1Tavhq/YgQ1RSTC1nIKfkqOy406bmqrqm5ri5oUOnT6fRpEYKKyAgICAgpua4ua5AoUMKKworICAzLiCxtbXbp+Kl+rzQsr6wyqbcpbuttqq6s8yps7rdoUGmQav2pECmuCBDVFJMLWcgoUOkXadPp9GkRrNvrdOm5qZurkChQworCisgIDQuIKywpEaldatPpnOk5bO5qrqsWa3Ts6GkwKFBvdC/6aRKIDojLCMgdyBURVNUIKFDs2+4zKq6ICMsIyC0TqxPpFetsQorICAgICCtbqhEsXqwT6btqrqm5ri5KLO7ut2m5ri5LKmzut2m5ri5KaFBptMgVEVTVCC0TqxPv++pd6q6pOWl86ZXoUMKKworICA1LiCzzKvhoUGlziA6IWRpciC9VLt7pOWl86xPp1+lv71Uq0+mc6FDpv2sT7Nvpril/adPp1Kwo7G8oUMKKworCisKKworfn5+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+CisJCSAgILLEpK3Bv7LEpXy4YKFKtKOo+qlNpliow6TlpfMKKworCisgICAgICAgKiogrW6mVrftq2Wk5aXzpKS0oaRKpXSlfqq6pOWl86q6pLquZaFBvdC/6aRKIDpyIEZJTEVOQU1FICoqCisKKyAgMS4gvdDB5KRKIDohZGlyIL1Uu3uxeqtlrbGz0KvYqrogVEVTVCCk5aXzwdmmYqFDCisKKyAgMi4gtU2r4bFOpfq80LK+sMqm3Lftq2Wttq2xqrqzu7rdoUMKKworr1OnT7SjpdyhSiCw9abmqELGSjOkp6vhsXqxTqzdqOyyxKStwb+yxKRUuGChQb3QqaGuyaZBqbmkVbK+sMqmXqjss2+4zKjToUMKKworICAzLiCxtbXbs3G5TCA6ciBURVNUILFOq2WtsbPQq9iquqZXrLAgVEVTVCCquqTlpfO0o6j6tmmo06FDCisKK69Tp0+0o6XcoUqxeqnStKOo+rZpqNOquqTlpfOxTrFxpfq80KnSpmKm7Lhts0K2falsuG2kSqFDCisKKyAgNC4grLCkRr1Uu3uk5aXzpHe4Z7SjqPqmqKVcoUGyvrDKpfq80KZeqOyt7KjTqrqm7LhttE6laaVIqmC3TqazqOKl97LECisgICAgIKStwb+yxKRUuGChQaRApfesT63spbuhQaV0pX6kQKX3rE+o06bbpOWl86q6sMalu6FDCisKKworCit+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+fn4KKwkJCSAgICAgICCyxKStwb+kcLWyCisKKworICAxLiA6IWNvbW1hbmQgpc6kX7D1puakQK3TpX6zoalSpU8gY29tbWFuZKFDCisKKyAgICAgvdCs3aRAqMe56rvaqNKkbKFKCisJIDohZGlyCQktICClzqRfxeOl3Lftq2Wl2L/9qrqkuq5loUMKKwkgOiFybSBGSUxFTkFNRQktICClzqRfp1Kwo6ZXrLAgRklMRU5BTUUgqrqk5aXzoUMKKworICAyLiA6dyBGSUxFTkFNRSAgpWmxTrftq2UgVklNIKSkpb+mYr1zv+iquqTlpfOrT6ZzqOymV6ywIEZJTEVOQU1FCisgICAgIKq6pOWl86SkoUMKKworICAzLiA6IywjdyBGSUxFTkFNRSClabFOt+2rZb1zv+ik5aXzssQgIyCm5qbcssQgIyCm5qq6pLquZatPpnOo7KTlpfMKKyAgICAgRklMRU5BTUUgpKShQworCisgIDQuIDpyIEZJTEVOQU1FIKVptKOo+rrPvUyk5aXzIEZJTEVOQU1FIKjDsU6o5LShpEqo7Lftq2Wk5aXzqrql+rzQpuy4bQorICAgICCr4a2xoUMKKworCisKKworCisKKworfn5+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+CisJCQkgssSku8G/ssSkQLhgoUqltLZ9w/6pUqVPCisKKworCSAqKiC/6aRKIG8gsU6mYqX6vNCquqRVpOiltLZ9t3OquqRApuaow7ZppEq0oaRKvNKmoaFDKioKKworICAxLiC90LFOpfq80LK+sMqo7KW7uGCkpKRVrbG80LBPprMgLS0tPiCquqi6pECm5qFDCisKKyAgMi4gsbW127/ppEqkcLxnqrogbyCmYqX6vNAgKqRVpOgqIKW0tn23c6q6pECm5qjDtmmkSrShpEq80qahoUMKKworICAzLiC1TavhtF+o7rzQsE+msyAtLS0+IKq6puaow6v2IDxFU0M+IMHksGilWLShpEq80qahptO2aaRKpb+xYLzSpqGhQworCistLS0+IEFmdGVyIHR5cGluZyAgbyAgdGhlIGN1cnNvciBpcyBwbGFjZWQgb24gdGhlIG9wZW4gbGluZSBpbiBJbnNlcnQgbW9kZS4KKworICA0LiCssKRGpmKl+rzQICqkV6ToKiCltLZ9t3OquqRApuahQaV1u92tbr/ppEqkarxnqrogTyCm06SjrE+kcLxnqrogbworICAgICC0TqVppUikRqFDvdCmYqRVpua0+rjVpECkVadhoUO37aX6vNCzQqZipmK406bmpFeuyaFBq/YgU2hpZnQtT6VppUgKKyAgICAgpmK406bmpFek6Ldztn2kQKbmoUMKKworT3BlbiB1cCBhIGxpbmUgYWJvdmUgdGhpcyBieSB0eXBpbmcgU2hpZnQtTyB3aGlsZSB0aGUgY3Vyc29yIGlzIG9uIHRoaXMgbGluZS4KKworCisKKworCit+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+fn4KKwkJCbLEpLvBv7LEpEe4YKFKpfq80KvhtKGkSsP+qVKlTworCisKKwkJICAgICAqKiC/6aRKIGEgsU6laaZipfq80KSnq+G0oaRKpOWlu6FDICoqCisKKyAgMS4gvdCmYqW/sWC80qahpFWzcblMv+mkSiAkILFOpfq80LK+sMqo7KW7uGCkpKRVrbG80LBPprMgLS0tPiCqurLEpECm5gorICAgICCquqW9p8ChQworCisgIDIuILG1tdu/6aRKpHC8Z6q6IGEgq2ilaaZipfq80KSnq+G0oaRKpOWlu6RGoUOkarxnqrogQSCraKVppUiqvbG1pmKm5gorICAgICClvbShpEqk5aW7oUMKKwortKOl3KFKv+mkSqRqvGcgQSCqur7ep0Ck6KprpWmlSKZipualvbShpEqk5aW7oUHB16dLpEa/6aRKIGmhQaX6vNCpd6bsqOwKKyAgICAgILPMq+GkQK3TpnKyxaFBv+mkSqq6pOWlu6FBPEVTQz4gpl60X6W/sWC80qahoUG9YsBZpWvB5LK+sMql+rzQpUikzgorICAgICAgeCCnUrCjt+2rZaX6vNCp0qZipuy4baZyssW1pbWlvdGmaMFjwviqur7ep0ChQworCisgIDMuIL7ep0Ckp6vhssSkQKbmtE6laaVIuMmlUqe5vuOkRqFDvdCqYLdOpfq80KvhtKGkSqTlpbu7ULShpEq80qahrE+w8gorICAgICClu6e5pf6kQK1QqrqhQaV1rE+k5aW7tKGkSqq6puy4bal3puy1eaazpKOmUL19pEahQworCistLS0+IFRoaXMgbGluZSB3aWxsIGFsbG93IHlvdSB0byBwcmFjdGljZQorLS0tPiBUaGlzIGxpbmUgd2lsbCBhbGxvdyB5b3UgdG8gcHJhY3RpY2UgYXBwZW5kaW5nIHRleHQgdG8gdGhlIGVuZCBvZiBhIGxpbmUuCisKKworCit+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+fn4KKwkJICAgILLEpLvBv7LEpFS4YKFKpXSlfqRArdO4bbSrw/6pUqVPqrqqqaW7CisKKworCQkgICAgICAqKiC/6aRKpGq8Z6q6IFIgpWmzc8TytMC0q6ZordOmcrLFoUMqKgorCisgIDEuIL3QsU6l+rzQsr6wyqjspbu4YKSkpFWtsbzQsE+msyAtLS0+IKq6ssSkQKbmoUMKKworICAyLiCyvrDKpfq80KjsssSkQKbmpKSko6ZQpF+80KazIC0tLT4gqrqyxKRHpuaqurLEpECt07PmtfyqurZ9qWyhQadZs+YKKyAgICAgtfwgbGFzdCCzQqFDCisKKyAgMy4gtU2r4b/ppEqkarxnqrogUiC2falsp+KyxKRApuakpKq6pKOmUKRfssSkR6bmqrqz0adFpnKyxbN2pEC/6aRKoUG0TgorICAgICClaaVIpf6zobTAtKuxvK3sprOquqZyssWm06jPsW+yxKRApuanuaX+uXCmULLEpEem5qRGoUMKKworLS0tPiBUbyBtYWtlIHRoZSBmaXJzdCBsaW5lIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG9uIHRoaXMgcGFnZSB1c2UgdGhlIGtleXMuCistLS0+IFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCwgdHlwZSBSIGFuZCB0aGUgbmV3IHRleHQuCisKKyAgNC4gvdCqYLdOoUqmcKpHsXqr9iA8RVNDPiCwaKVYuG20q7zSpqGmXrRfpb+xYLzSpqGhQal8pby0wLSrqrqk5aW7sU6ktAorICAgICC1TatPq/mt7KqsoUMKKworCisKKworCit+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+fn4KKwkJCSAgICCyxKS7wb+yxKV8uGChSrNduG3D/qlSpU+qur/vtrUKKworCisJCSAgKiogs124baVpqM+sZKfkqc6qzLTAtKulaam/sqSkaqRwvGequr/vtrUgKioKKworCisgIDEuIK1urGSn5LPmtfwgaWdub3JlIKVppmKlv7FgvNKmoaRVv+mkSiAvaWdub3JlIKFDrW6tq7RfrGSn5LjTtfyhQaVppUgKKyAgICAgrau0X6v2IG4gweShQworCisgIDIuILVNq+GzXbhtIGljIL/vtrUoaWO0TqxPrV6k5am/sqSkaqRwvGdJZ25vcmUgQ2FzZaq6rbqmcqXAwVm8Z7X8KaFBp1kKKyAgICAgv+mkSqFKCisJOnNldCBpYworCisgIDMuILJ7pmKlaaVIs3G5TMHkpEogbiDB5KZBprisZKfks+a1/CBpZ25vcmWhQ62rtF+sZKfkpWmlSK2rtF/B5KRKIG4gweShQworCisgIDQuILVNq+GzXbhtIGhsc2VhcmNoIKlNIGluY3NlYXJjaCCzb6jirdO/77a1oUG/6aRKpUikVaS6rmWhSgorICAgICA6c2V0IGhscyBpcworCisgIDUuILJ7pmKlaaVIpkGmuL/ppEqsZKfkqVKlT6FBrN2s3bd8prOksLvyrsSqR6FKCisgICAgIC9pZ25vcmUKKworfn5+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+CisJCQkgICAgICAgssSku8G/pHC1sgorCisKKyAgMS4gv+mkSqRwvGequiBvIKVppUimYqX6vNCkVaTopbS2fbdzqrqkQKbmqMOxTqX6vNC4baRft3O2faq6puatuqFBtmmkSgorICAgICC0oaRKvNKmoaFDCisgICAgIL/ppEqkarxnqrogTyClaaVIpmKl+rzQpFek6KW0tn23c6q6pECm5qjDsU6l+rzQuG2kX7dztn2quqbmrbqhQbZppEoKKyAgICAgtKGkSrzSpqGhQworCisgIDIuIL/ppEqkcLxnqrogYSClaaVIpmKl+rzQqdKmYqbsuG2kp6vhtKGkSqTlpbuhQworICAgICC/6aRKpGq8Z6q6IEEgpWmlSKZipfq80KnSpmKm5qq6pualvaSnq+G0oaRKpOWlu6FDCisKKyAgMy4gv+mkSqRqvGequiBSILFOtmmkSrTAtKu80qahoUGqvabcq/YgPEVTQz4gweSwaKVYtMC0q7zSpqGm07ZppEqlv7FgCisgICAgILzSpqGhQworCisgIDQuIL/ppEogOnNldCB4eHggpWmlSLNduG0geHh4IL/vtrWhQworCisKKworCisKKworCisKKworfn5+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+CisJCSAgICAgICCyxKRDwb+hSqZivXXAsKdVqVKlTworCisJCSAgICAgICoqIKjPpc6mYr11wLCnVah0ss4gKioKKworICBWaW0gvtams6RArdOy061Qpf6tsaq6pmK9dcCwp1WodLLOoUOtbrHSsMq408Cwp1WodLLOoUG90L/vvtymcKRVpFS62KToCisgIKprpKekQKFKCisJLSCr9qRVIDxIRUxQPiDB5CAopnCqR8HkvUykV6azqrq43CkKKwktIKv2pFUgPEYxPiDB5CAopnCqR8HkvUykV6azqrq43CkKKwktIL/ppEoJOmhlbHAgPKZeqK4+CisKKyAgv+mkSiA6cSA8pl6orj4gpWmlSMP2s6zAsKdVtaGkZqFDCisKKyAgtKOo0aRArdOlv71Uqrqw0bzGtbkiOmhlbHAiqVKlT6FBsXqlaaVIp+So7MP2pF+406VEw0SqusCwp1WhQ73QuNXF56VICisgIKRVsNG8xiilaadPp9GkRqv2pl6orsHkrkChQzopoUoKKworCSAgOmhlbHAgdyA8pl6orj4KKwkgIDpoZWxwIGNfPFQgPKZeqK4+CisJICA6aGVscCBpbnNlcnQtaW5kZXggPKZeqK4+CisJICA6aGVscCB1c2VyLW1hbnVhbCA8pl6orj4KKworCisKKworfn5+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+CisJCSAgICAgILLEpEvBv6FKs9Cr2KRArdOx0rDKuH2luworCisJCQkgKiogsdKlznZpbaq6pVyv4CAqKgorCisgIFZpbaq6pVyv4K9TqcqtbqTxdmmmaLFvpmihQab9pGqzoaTApVyv4LOjqFOms6/KrNm/RayhoUOssKRGsdKwyqfzpmiqugorICClXK/goUGxerFvs9Cr2KRArdN2aW1yY6TlpfOhQworCisgIDEuILZ9qWy9c7/odmltcmOk5aXzoUGzb6j6qE2kX7F6qdKoz6XOqrq+3qdAqHSyzqFKCisKKyAgICAgOmVkaXQgfi8udmltcmMJCbNvrE9Vbml4qHSyzqnSqM+lzqq6qVKlTworICAgICA6ZWRpdCAkVklNL192aW1yYwkJs2+sT1dpbmRvd3OodLLOqdKoz6XOqrqpUqVPCisKKyAgMi4gsbW1277JpEp2aW1yY61TqNKk5aXzoUoKKworICAgICA6cmVhZCAkVklNUlVOVElNRS92aW1yY19leGFtcGxlLnZpbQorCisgIDMuIKtPpnOk5aXzoUGpUqVPrLChSgorCisgICAgIDp3cml0ZQorCisgIKZipFWmuLF6sdKwynZpbaq6rsmt1KFBvXO/6L65tE63fKazpEa7eaprsKqrR6q6pVyv4KFDsXqlaaVIxH7E8qfisXqz3worICDFd6q6qOSlpqVcr+CzXbhtskulW6jss2+t03ZpbXJjpOWl86SkoUMKKworfn5+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+CisKKyAgdmltILHQtXuo7Ka5tbKn9KFDpbux0LV7pXWsT6ywpEbCsqn6pmGktrLQpECkVXZpbb1zv+i+uaFBpv2kd6ispUjF/bF6CisgIKvcrmWp9r7Ht3yoz6XOpbu9c7/ovrmkRqFDpPCxZb3ousOhQXZpbcHZprOr3KZoq9ymaKq6qVKlT6FBpbux0LV7qdKktgorICCy0Kq6wdmudLFvu7e126lPoUOp0qVIsXqtbrrrs3GqurjcoUHB2bHmxH7E8qdWpE+uQKFDpFWkQKhCsXqlaaVIvlzFqgorICB2aW2k4qVVoUGoz6XOqrqpUqVPrE+hSgorCTpoZWxwIHVzZXItbWFudWFsCisKKyAgrLCkRqfztmmkQKhCqrqw0abSqU2+x7LfoUGlSKRVs2+lu67Rrcixb7HAwsuhSgorCisJVmltIC0gVmkgSW1wcm92ZWQgLSCnQKrMoUpTdGV2ZSBPdWFsbGluZQorCaVYqqmqwKFKTmV3IFJpZGVycworCisgILNvrE+yxKRApbunuaX+wb+40XZpbaq6rtHEeaFDue+kX6rsvseqzK9Tp0+ms6XOoUOo5KSkwdmlXad0prOkarZxueqo0gorICCpTbnPpdyhQ7H9qr641LGhoUG90LNYsN0gaHR0cDovL2ljY2YtaG9sbGFuZC5vcmcvY2xpY2s1Lmh0bWwKKworICClSKRVs2+lu67RpPG4+6bRpEam06VCpLquZaVErW6sT3ZpptOko6xPdmltoUGm/axPpF2tyLFvscDCy6FKCisKKwlMZWFybmluZyB0aGUgVmkgRWRpdG9yIC0gp0CqzKFKTGluZGEgTGFtYgorCaVYqqmqwKFKTydSZWlsbHkgJiBBc3NvY2lhdGVzIEluYy4KKworICCzb6xPpEClu6Sjv/mquq7RoUGzcblMpaaxerRYpUev4LD3pEa40ajspf6zoXZpr+Cw97C1qOyquqjGsaGhQ6a5rtGqurLECisgIKS7rdOqqaW7pF2lXad0pEakQKjHw/akX3Zpbaq6q0iup6FDCisKKyAgpbux0LV7rE+l0ajTpttDYWxvcmFkbyBTY2hvb2wgb2YgTWluZXNlqrpNaWNoYWVsIEMuIFBpZXJjZaFCUm9iZXJ0IEsuCisgIFdhcmUgqdK9c7xnqrqhQajkpKSo06bbQ29sb3JhZG8gU3RhdGUgVW5pdmVyc2l0eaq6Q2hhcmxlcyBTbWl0aLSjqNGkRgorICCr3KZos9C3TqFDvXOqzLNxq0imYad9rE+hSgorCisJYndhcmVAbWluZXMuY29sb3JhZG8uZWR1CisKKyAgpbux0LV7pHel0UJyYW0gTW9vbGVuYWFysU2ssHZpbbZppuat161xoUMKKworCisKKyAgxLao7qrMqv6opaFKCisgID09PT09PT09PT09CisgICAgICDCssXppKSk5bHQtXvCvcS2qqmkp8S2qO6qzKywseep9671IDxiZW9zQHR1cmJvbGludXguY29tLmNuPqFBwdmmsworICAgICAgpXSlfqRArdPBcKh0pmGnfaFKbGludXhyYXRAZ251Y2hpbmEub3JnoUMKKworICAgICAgwWPF6aSkpOWx0LV7rE+xccKyxemkpKTlsdC1e8K9xLaqqajPpc4gRGViaWFuIEdOVS9MaW51eCCkpKTltrWl2KRwCisgICAgICCy1aq6pF+8c733pf2lzb1zvGequqSkpOW6fqZywuC9WL65ICBhdXRvY29udmVydCDC4LSrptOmqKq6oUGow7nvwuAKKyAgICAgILSrqrq1sqpHsLWkRqRAqMey07hgqrqn77DKoUMKKworICDF3KfzsE+//aFKCisgID09PT09PT09PQorICAgICAgMjAwMqZ+MDik6zMwpOkgseep9671IDxiZW9zQHR1cmJvbGludXguY29tLmNuPgorICAgICAgt1DBwiBSTVNAU01USCCquqv8pb+hQbFOpmizQr/5u36t16W/oUMKKworICAgICAgMjAwMqZ+MDSk6zIypOkgseep9671IDxsaW51eHJhdEBnbnVjaGluYS5vcmc+CisgICAgICC3UMHCIHh1YW5kb25nQHNoMTYzLm5ldCCquqv8pb+hQbFOqOKzQr/5p0+mcq3Xpb+hQworCisgICAgICAyMDAypn4wM6TrMTik6SCx56n3rvUgPGxpbnV4cmF0QGdudWNoaW5hLm9yZz4KKyAgICAgIK7avtpCcmFtIE1vbGVuYWFypf2lzaZiMjAwMqZ+MDOk6zE2pOmquqjTq0itbqhEoUGxTnZpbXR1dG9yMS40pKTEtgorICAgICAgqqmkya/FqOx2aW10dXRvcjEuNaFDCisKKyAgICAgIDIwMDGmfjExpOsxNaTpILHnqfeu9SA8bGludXhyYXRAZ251Y2hpbmEub3JnPgorICAgICAgsU52aW10dXRvcjEuNKSkxLaqqbSjpea1uUJyYW0gTW9sZW5hYXKpTVN2ZW4gR3Vja2VzoUMKKworfn5+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+CmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLnpoLmV1YyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuemguZXVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmODBmNjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3R1dG9yLnpoLmV1YwpAQCAtMCwwICsxLDg1MSBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICAgILu2ICAgICDTrSAgICAg1MQgICAgILbBICAgobYgViBJIE0gIL3MICCzzCChtyAgIKGqoaogICAgILDmsb4gMS41ICAgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICB2aW0gysfSu7j2vt/T0LrctuDD/MHutcS5psTct8ezo8e/tPO1xLHgvK3G96Gjz97T2saqt/mjrNTasb69zLPMtbHW0AorICAgICC+zbK7z+rPuL3pydzBy6Gjsb69zLPMtcTJ6LzGxL+x6srHvbLK9tK70Kmx2NKqtcS7+bG+w/zB7qOstvjVxs7VusPV4gorICAgICDQqcP8we6jrMT6vs3E3Lm7utzI3dLXvat2aW21sdf30ru49s2o08O1xM3yxNyx4LytxvfAtMq508PBy6GjCisKKyAgICAgzeqzybG+vcyzzLXExNrI3bTz1LzQ6NKqMjUtMzC31tbTo6zIob7209rE+tG1wbe1xMqxvOShoworCisgICAgIMO/0ru92rXEw/zB7rLZ1/e9q7vhuPy4xLG+zsSho83GvPbE+ri01saxvs7EtcTSu7j2uLGxvqOsyLu689TauLGxvsnPCisgICAgIL340NDRtcG3KMjnufvE+srHzai5/SJ2aW10dXRvciLAtMb0tq+9zLPMtcSjrMTHw7Sxvs7Evs3S0b6tyse4sbG+wcspoaMKKworICAgICDH0LzH0ru146HDsb69zLPMtcTJ6LzGy7zCt8rH1NrKudPD1tC9+NDQ0afPsLXEoaPSsr7NysfLtaOsxPrQ6NKqzai5/QorICAgICDWtNDQw/zB7sC00afPsMv8w8exvsnttcTV/ci308O3qKGjyOe5+8T61rvKx9TEtsG2+LK7stnX96OsxMfDtMT6v8nE3AorICAgICC74brcv+zSxc381eLQqcP8we61xKOhCisKKyAgICAgusPBy6Osz9bU2sfryLe2qMT6tcRTaGlmdC1Mb2NrKLTz0KHQtMv4tqi8/Cm7ucO709CwtM/Co6zIu7rzsLS8/MXMyc8KKyAgICAgtcTX1sS4vPwgaiDX47m7tuC1xLTOyv3AtNLGtq+54rHqo6zWsbW9tdrSu73atcTE2sjdxNy5u83qyKuz5ML6xsHEu6GjCisKK35+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+fgorCQkJtdrSu72ytdrSu73aocPSxravueKx6gorCisKKyAgIKH5ofkg0qrSxravueKx6qOsx+vSwNXVy7XD97fWsfCwtM/CIGihomqhomuhomwgvPyhoyCh+aH5CisKKwkgICAgIF4KKwkgICAgIGsJCSAgICDM4cq+ocMgaCC1xLz8zrvT2tfzsd+jrMO/tM6wtM/Cvs274c/y1/PSxravoaMKKyAgICAgICA8IGgJIGwgPgkJICAgbCC1xLz8zrvT2tPSsd+jrMO/tM6wtM/Cvs274c/y09LSxravoaMKKwkgICAgIGoJCQkgICBqILz8v7TG8MC0utzP89K71qe84rbLt73P8rOvz8K1xLz9zbehoworCSAgICAgdgorCisgIDEuIMfry+bS4tTaxsHEu8Ta0sa2r7niseqjrNax1sHE+r71tcPK5rf+zqrWuaGjCisKKyAgMi4gsLTPws/C0NC8/ChqKaOs1rG1vbP2z9a54rHq1ti4tM/C0NChoworCistLS0+IM/W1NrE+tOmuMPS0b6t0ae74cjnus7Sxravtb3PwtK7vbKwyaGjCisKKyAgMy4gz9bU2sfryrnTw8/C0NC8/KOsvau54rHq0sa2r7W9tdq2/r2yoaMKKworzOHKvqHDyOe5+8T6sru40si3tqjE+sv5sLTPwrXE19bEuKOsx+uwtM/CPEVTQz68/LvYtb3V/bOjKE5vcm1hbCnEo8q9oaMKKyAgICAgIMi7uvPU2bTOtNO8/MXMyuTI68T6z+vSqrXEw/zB7qGjCisKK8zhyr6hw7niseq8/NOmtbHSssTc1f2zo7mk1/e1xKGjtavKx8q508NoamtsvPyjrNTaz7C539auuvPE+r7NxNy5u7/sy9kKKyAgICAgILXY1NrGwcS7xNrLxLSm0sa2r7niserBy6GjCisKK35+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+fgorCQkJtdrSu72ytdq2/r3aocNWSU21xL34yOu6zc3Ls/YKKworCisgICEhIMzYsfDM4cq+ocO+tMfr1MS2wc3q1fuxvtK7vdq1xMTayN2jrMi7uvOyxcTc1rTQ0NLUz8LL+b2yveK1xMP8we6howorCisgIDEuIMfrsLQ8RVNDPrz8KNXiysfOqsHLyLexo8T6tKbU2tX9s6PEo8q9KaGjCisKKyAgMi4gyLu688rkyOuhwwkJCTpxISA8u9iztT4KKworLS0tPiDV4tbWt73KvbXEzcuz9rHgvK3G9774sru74bGjtObE+r34yOux4LytxvfS1MC0y/nX9rXEuMS2r6GjCisgICAgIMjnufvE+s/rsaO05rj8uMTU2c3Ls/ajrMfryuTI66HDCisJCQkJOndxICA8u9iztT4KKworICAzLiDI57n7xPq/tLW9wcvD/MHu0NDM4cq+t/ujrMfryuTI68Tcubu0+MT6u9i1vbG+vcyzzLXEw/zB7qOsxMe+zcrHocMKKworCQl2aW10dXRvciA8u9iztT4KKworICAgICDNqLOjx+m/9s/CxPrSsr/J0tTTw9Xi1ta3vcq9ocMKKworCQl2aW0gdHV0b3IgPLvYs7U+CisKKy0tLT4g1eLA77XEICd2aW0nILHtyr69+MjrdmltseC8rcb3o6y2+CAndHV0b3In1PLKx8T617yxuNKqseC8rbXEzsS8/qGjCisKKyAgNC4gyOe5+8T619TQxdLRvq3AzsDOvMfXocHL1eLQqbK91ui1xLuwo6zH67TTsr3W6DHWtNDQtb2yvdboM83Ls/ajrMi7CisgICAgILrz1Nm0zr34yOux4Lytxveho73T18W9q7niserSxravtb212tK7vbK12sj9vdrAtLzM0PjO0sPHtcS9zLPMvbK94qGjCisKK35+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+fgorCQkJtdrSu72ytdrI/b3aocPOxLG+seC8rdauyb6z/QorCisKKyAgICoqINTa1f2zoyhOb3JtYWwpxKPKvc/Co6y/ydLUsLTPwiB4ILz8wLTJvrP9ueKx6sv51NrOu9bDtcTX1rf7oaMqKgorCisgIDEuIMfrvau54rHq0sa2r7W9sb692tbQz8LD5rHqvMfT0CAtLS0+ILXExMfSu9DQoaMKKworICAyLiDOqsHL0N7V/crkyOu07c7zo6zH672rueKx6tLG1sHXvLG4yb6z/bXE19a3+7XEzrvWw7SmoaMKKworICAzLiDIu7rzsLTPwiB4ILz8vau07c7z19a3+8m+s/219KGjCisKKyAgNC4g1ti4tLK91ugytb2yvdboNKOs1rG1vb7k19PQ3tX9zqrWuaGjCisKKy0tLT4gVGhlIGNjb3cganVtcGVkZCBvdnZlcnIgdGhoZSBtb29vbi4KKworICA1LiC6w8HLo6y4w9DQ0tG+rdDe1f3By6Osz8LSu73axNrI3crHtdrSu72ytdrLxL3aoaMKKworzNix8Mzhyr6hw9TaxPrkr8DAsb69zLPMyrGjrLK70qrHv9DQvMfS5KGjvMfXodK7teOhw9TayrnTw9bQ0afPsKGjCisKKworCit+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+fn4KKwkJICAgICC12tK7vbK12svEvdqhw87Esb6x4Lyt1q6y5cjrCisKKworCSAqKiDU2tX9s6PEo8q9z8KjrL/J0tSwtM/CIGkgvPzAtLLlyOvOxLG+oaMqKgorCisgIDEuIMfrvau54rHq0sa2r7W9sb692tbQz8LD5rHqvMfT0CAtLS0+ILXEtdrSu9DQoaMKKworICAyLiDOqsHLyrm1w7Xa0rvQ0MTayN3A182s09q12rb+0NCjrMfrvau54rHq0sbWwc7Esb612tK7uPbX1rf717yxuLLlyOsKKyAgICAgtcTOu9bDoaMKKworICAzLiDIu7rzsLTPwiBpILz8o6y909fFyuTI67HY0qq1xM7Esb7X1rf7oaMKKworICA0LiDL+dPQzsSxvra80N7V/c3qsc+jrMfrsLTPwiA8RVNDPiC8/Le1u9jV/bOjxKPKvaGjCisgICAgINbYuLSyvdboMtbBsr3W6DTS1LHj0N7V/b7k19OhoworCistLS0+IFRoZXJlIGlzIHRleHQgbWlzbmcgdGhpcyAuCistLS0+IFRoZXJlIGlzIHNvbWUgdGV4dCBtaXNzaW5nIGZyb20gdGhpcyBsaW5lLgorCisgIDUuIMjnufvE+rbUzsSxvrLlyOuy2df30tG+rbrcwvrS4qOsx+u909fF1MS2wc/Cw+a1xNChveGhoworCisKKworfn5+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+CisJCQkgICAgICAgtdrSu72y0KG94QorCisKKyAgMS4gueKx6tTaxsHEu87Esb7W0LXE0sa2r7zIv8nS1NPDvP3Nt7z8o6zSsr/J0tTKudPDIGhqa2wg19bEuLz8oaMKKwkgaCAo1/PSxikJaiAoz8LQ0CkgICAgICAgayAoyc/Q0CkJICAgIGwgKNPS0sYpCisKKyAgMi4g0/u9+MjrdmltseC8rcb3KLTTw/zB7tDQzOHKvrf7KaOsx+vK5MjrocN2aW0gzsS8/sP7IDy72LO1PgorCisgIDMuINP7zcuz9nZpbbHgvK3G96Osx+vK5Mjr0tTPwsP8we63xcb6y/nT0NDeuMShwworCisJPEVTQz4gICA6cSEJIDy72LO1PgorCisgICAgILvy1d/K5Mjr0tTPwsP8we6xo7Tmy/nT0NDeuMShwworCisJPEVTQz4gICA6d3EJIDy72LO1PgorCisgIDQuINTa1f2zo8Sjyr3Pwsm+s/254rHqy/nU2s671sO1xNfWt/ujrMfrsLShwyB4CisKKyAgNS4g1NrV/bOjxKPKvc/C0qrU2rniserL+dTazrvWw7+qyryy5cjrzsSxvqOsx+uwtKHDCisKKwkgaSAgICAgyuTI67HY0qrOxLG+CTxFU0M+CisKK8zYsfDM4cq+ocOwtM/CIDxFU0M+ILz8u+G0+MT6u9i1vdX9s6PEo8q9u/LV38ihz/vSu7j2srvG2s37u/LV37K/t9bN6rPJCiu1xMP8we6howorCiu6w8HLo6y12tK7vbK1vbTLveHK+KGjz8LD5r3Tz8LAtLzM0Pi12rb+vbK1xMTayN2howorCisKK35+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+fgorCQkJtdq2/r2ytdrSu73aocPJvrP9wODD/MHuCisKKworCSAgICAqKiDK5MjrIGR3IL/J0tS007niseq0psm+s/3WwdK7uPa1pdfWL7WltMq1xMSpzrKhoyoqCisKKyAgMS4gx+uwtM/CIDxFU0M+ILz8yLexo8T6tKbT2tX9s6PEo8q9oaMKKworICAyLiDH672rueKx6tLGtq+1vbG+vdrW0M/Cw+ax6rzH09AgLS0tPiC1xMTH0rvQ0KGjCisKKyAgMy4gx+u9q7niserSxtbB17yxuNKqyb6z/bXEtaW0yrXEv6rKvKGjCisKKyAgNC4gvdPXxcrkyOsgZHcgyb6z/bX0uMO1pbTKoaMKKworICDM2LHwzOHKvqHDxPrL+crkyOu1xCBkdyC74dTaxPrK5MjrtcTNrMqxs/bP1tTaxsHEu7XE1+6689K70NCho8jnufvE+srkCisgIMjr09DO86Osx+uwtM/CIDxFU0M+ILz8yKHP+6OsyLu689bY0MLU2cC0oaMKKworLS0tPiBUaGVyZSBhcmUgYSBzb21lIHdvcmRzIGZ1biB0aGF0IGRvbid0IGJlbG9uZyBwYXBlciBpbiB0aGlzIHNlbnRlbmNlLgorCisgIDUuINbYuLSyvdboM9bBsr3W6DSjrNax1sG+5NfT0N7V/c3qsc+ho73T18W8zND4tdq2/r2ytdq2/r3axNrI3aGjCisKKworCit+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+fn4KKwkJICAgICAgtdq2/r2ytdq2/r3aocPG5Mv7yb6z/cDgw/zB7gorCisKKwkJICAgKiogyuTI6yBkJCC007Wxx7C54rHqyb6z/bW90NDEqaGjKioKKworICAxLiDH67C0z8IgPEVTQz4gvPzIt7GjxPq0ptPa1f2zo8Sjyr2howorCisgIDIuIMfrvau54rHq0sa2r7W9sb692tbQz8LD5rHqvMfT0CAtLS0+ILXExMfSu9DQoaMKKworICAzLiDH672rueKx6tLGtq+1vbjD0NC1xM6ysr8o0rK+zcrH1Nq12tK7uPa147rFoa4uoa+688PmKaGjCisKKyAgNC4gyLu688rkyOsgZCQgtNO54rHqtKbJvtbBtbHHsNDQzrKyv6GjCisKKy0tLT4gU29tZWJvZHkgdHlwZWQgdGhlIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuIGVuZCBvZiB0aGlzIGxpbmUgdHdpY2UuCisKKworICA1LiDH67zM0PjRp8+wtdq2/r2ytdrI/b3avs3WqrXAysfU9cO0u9jKwsHLoaMKKworCisKKworCit+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+fn4KKwkJICAgICC12rb+vbK12sj9vdqhw7nY09rD/MHuus221M/zCisKKworICDJvrP9w/zB7iBkILXEuPHKvcjnz8KhwworCisJIFtudW1iZXJdICAgZAlvYmplY3QJICAgILvy1d8gICAgIGQJIFtudW1iZXJdICAgb2JqZWN0CisKKyAgxuTS4sjnz8KhwworICAgIG51bWJlciAtILT6se3WtNDQw/zB7rXEtM7K/Si/ydGhz+6jrMixyqHJ6NbDzqogMSApoaMKKyAgICBkIC0gtPqx7cm+s/2howorICAgIG9iamVjdCAtILT6se3D/MHuy/nSqrLZ1/e1xLbUz/Moz8LD5tPQz+C52L3pydwpoaMKKworICDSu7j2vPK2zLXEttTP88HQse2hwworICAgIHcgLSC007Wxx7C54rHqtbHHsM671sPWsbW9taXX1i+1pbTKxKnOsqOssPzAqL/VuPGhoworICAgIGUgLSC007Wxx7C54rHqtbHHsM671sPWsbW9taXX1i+1pbTKxKnOsqOstavKxyAqsrsqILD8wKi/1bjxoaMKKyAgICAkIC0gtNO1scewueKx6rWxx7DOu9bD1rG1vbWxx7DQ0MSpoaMKKworzNix8Mzhyr6hwworICAgILbU09rTwtPazL3L99Xfo6zH69Ta1f2zo8Sjyr3PwsPmvfawtLT6se3P4NOmttTP87XEvPy2+LK7yrnTw8P8we6jrNTyCisgICAgvau/tLW9ueKx6rXE0sa2r9X9yOfJz8PmtcS21M/zwdCx7cv5tPqx7bXE0rvR+aGjCisKKworCisKK35+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+fgorCQm12rb+vbK12svEvdqhw7bUz/PD/MHutcTM2Mrix+m/9gorCisKKwkgICAgICAgKiogyuTI6yBkZCC/ydLUyb6z/dX70ru49rWxx7DQ0KGjICoqCisKKyAgvPjT2tX70NDJvrP9tcS438a1tsijrFZJTSC1xMnovMbV3772tqjSqrzyu6/V+9DQyb6z/aOsvfbQ6NKq1NrNrNK70NDJzworICC797Tywb20ziBkIL7Nv8nS1Mm+s/219LniserL+dTatcTV+9DQwcuhoworCisgIDEuIMfrvau54rHq0sa2r7W9sb692tbQz8LD5rXEtsy+5LbOwuTW0LXEtdq2/tDQoaMKKyAgMi4gyuTI6yBkZCDJvrP9uMPQ0KGjCisgIDMuIMi7uvPSxravtb212svE0NChoworICA0LiC909fFyuTI6yAyZGQgKLu5vMe1w8eww+a9srn9tcQgbnVtYmVyLWNvbW1hbmQtb2JqZWN0IMLwo78pIMm+s/3BvdDQoaMKKworICAgICAgMSkgIFJvc2VzIGFyZSByZWQsCisgICAgICAyKSAgTXVkIGlzIGZ1biwKKyAgICAgIDMpICBWaW9sZXRzIGFyZSBibHVlLAorICAgICAgNCkgIEkgaGF2ZSBhIGNhciwKKyAgICAgIDUpICBDbG9ja3MgdGVsbCB0aW1lLAorICAgICAgNikgIFN1Z2FyIGlzIHN3ZWV0CisgICAgICA3KSAgQW5kIHNvIGFyZSB5b3UuCisKKworfn5+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+CisJCQkgtdq2/r2ytdrO5b3aocOzt8/7wODD/MHuCisKKworCSAqKiDK5MjrIHUgwLSzt8/71+6689a00NC1xMP8we6jrMrkyOsgVSDAtNDe1f3V+9DQoaMqKgorCisgIDEuIMfrvau54rHq0sa2r7W9sb692tbQz8LD5rHqvMfT0CAtLS0+ILXExMfSu9DQo6yyor2rxuTWw9PatdrSu7j2tO3O8worICAgICC0pqGjCisgIDIuIMrkyOsgeCDJvrP9tdrSu7j2srvP67GjwfS1xNfWxLihoworICAzLiDIu7rzyuTI6yB1ILO3z/vX7rrz1rTQ0LXEKNK7tM4pw/zB7qGjCisgIDQuINXitM7Sqsq508MgeCDQ3tX9sb7Q0LXEy/nT0LTtzvOhoworICA1LiDP1tTayuTI69K7uPa089C0tcQgVSCjrLvWuLS1vbjD0NC1xNStyrzXtMysoaMKKyAgNi4gvdPXxbbgtM7K5MjrIHUg0tSzt8/7IFUg0tS8sLj8x7C1xMP8we6howorICA3LiDIu7rztuC0zsrkyOsgQ1RSTC1SICjPyLC0z8IgQ1RSTCC8/LK7t8W/qqOsvdPXxcrkyOsgUiC8/Ckgo6zV4tH5vs0KKyAgICAgv8nS1Na00NC71ri0w/zB7qOs0rK+zcrHs7fP+7X0s7fP+8P8we6howorCistLS0+IEZpaXggdGhlIGVycm9ycyBvb24gdGhoaXMgbGluZSBhbmQgcmVlcGxhY2UgdGhlbSB3aXR0aCB1bmRvLgorCisgIDguINXi0Km2vMrHt8ezo9PQ08O1xMP8we6ho8/Cw+bKx7Xatv69srXE0KG94cHLoaMKKworCisKKworfn5+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+CisJCQkgICAgICAgtdq2/r2y0KG94QorCisKKyAgMS4g0/u007Wxx7C54rHqyb6z/dbBtaXX1i+1pbTKxKnOsqOsx+vK5MjrocNkdworCisgIDIuINP7tNO1scewueKx6sm+s/3WwbWxx7DQ0MSpzrKjrMfryuTI66HDZCQKKworICAzLiDT+8m+s/3V+9DQo6zH68rkyOuhw2RkCisKKyAgNC4g1NrV/bOjxKPKvc/C0ru49sP8we61xLjxyr3Kx6HDCisKKyAgICAgICBbbnVtYmVyXSAgIGNvbW1hbmQgICBvYmplY3QgICAgILvy1d8gICAgIGNvbW1hbmQJW251bWJlcl0gICBvYmplY3QKKyAgICAgxuTS4srHocMKKyAgICAgICBudW1iZXIgLSC0+rHttcTKx8P8we7WtNDQtcS0zsr9CisgICAgICAgY29tbWFuZCAtILT6se3Sqtf2tcTKwsfpo6yxyMjnIGQgtPqx7cm+s/0KKyAgICAgICBvYmplY3QgLSC0+rHt0qqy2df3tcS21M/zo6yxyMjnIHcgtPqx7bWl19YvtaW0yqOsJCC0+rHttb3Q0MSptci1yKGjCisJCSQgKHRvIHRoZSBlbmQgb2YgbGluZSksIGV0Yy4KKworICA1LiDT+7O3z/vS1MewtcSy2df3o6zH68rkyOuhw3UgKNCh0LS1xHUpCisgICAgINP7s7fP+9Ta0rvQ0NbQy/nX9rXEuMS2r6Osx+vK5MjrocNVICi089C0tcRVKQorICAgICDT+7O3z/vS1MewtcSzt8/7w/zB7qOsu9a4tNLUx7C1xLLZ1/e94bn7o6zH68rkyOuhw0NUUkwtUgorCit+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+fn4KKwkJCSC12sj9vbK12tK7vdqhw9bDyOvA4MP8we4KKworCisJICAgICAgICoqIMrkyOsgcCC9q9fuuvPSu7TOyb6z/bXExNrI3dbDyOu54rHq1q668yAqKgorCisgIDEuIMfrvau54rHq0sa2r7W9sb692tbQz8LD5sq+t7a2zsLktcTK19DQoaMKKworICAyLiDK5MjrIGRkIL2ruMPQ0Mm+s/2jrNXi0fm74b2ruMPQ0LGjtOa1vXZpbbXEu7qz5cf41tChoworCisgIDMuIL3T18W9q7niserSxravtb3XvLG41sPI67XEzrvWw7XEyc+3vaGjvMfXoaHDysfJz7e9xbahoworCisgIDQuIMi7uvPU2tX9s6PEo8q9z8IoPEVTQz68/L34yOspo6zK5MjrIHAgvau4w9DQ1bPM+dbDyOuhoworCisgIDUuINbYuLSyvdboMtbBsr3W6DSjrL2ry/nT0LXE0NDSwNDyt8XWw7W91f3It7XEzrvWw8nPoaMKKworICAgICBkKSBDYW4geW91IGxlYXJuIHRvbz8KKyAgICAgYikgVmlvbGV0cyBhcmUgYmx1ZSwKKyAgICAgYykgSW50ZWxsaWdlbmNlIGlzIGxlYXJuZWQsCisgICAgIGEpIFJvc2VzIGFyZSByZWQsCisKKworCit+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+fn4KKwkJICAgICAgILXayP29srXatv692qHDzOa7u8Dgw/zB7gorCisKKwkgICoqIMrkyOsgciC6zdK7uPbX1rf7zOa7u7niserL+dTazrvWw7XE19a3+6GjKioKKworICAxLiDH672rueKx6tLGtq+1vbG+vdrW0M/Cw+ax6rzH09AgLS0tPiC1xLXa0rvQ0KGjCisKKyAgMi4gx+vSxravueKx6rW9tdrSu7j2tO3O87XEysq1sc671sOhoworCisgIDMuIL3T18XK5MjrIHIgo6zV4tH5vs3E3L2rtO3O88zmu7u19MHLoaMKKworICA0LiDW2Li0sr3W6DK6zbK91ugzo6zWsbW9tdrSu9DQ0tG+rdDeuMTN6rHPoaMKKworLS0tPiAgV2hhbiB0aGlzIGxpbWUgd2FzIHR1b2VkIGluLCBzb21lb25lIHByZXNzd2Qgc29tZSB3cm9qZyBrZXlzIQorLS0tPiAgV2hlbiB0aGlzIGxpbmUgd2FzIHR5cGVkIGluLCBzb21lb25lIHByZXNzZWQgc29tZSB3cm9uZyBrZXlzIQorCisgIDUuIMi7uvPO0sPHvMzQ+NGn0KO12sj9vbK12sj9vdqhoworCivM2LHwzOHKvqHDx9C8x8T60qrU2sq508PW0NGnz7CjrLb4srvKx9TavMfS5NbQ0afPsKGjCisKKworCit+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+fn4KKwkJCbXayP29srXayP292qHDuPy4xMDgw/zB7gorCisKKwkgICAqKiDSqrjEseTSu7j2taXX1i+1pbTKtcSyv7fWu/LV38irsr+jrMfryuTI6yBjdyAqKgorCisgIDEuIMfrvau54rHq0sa2r7W9sb692tbQz8LD5rHqvMfT0CAtLS0+ILXEtdrSu9DQoaMKKworICAyLiC909fFsNG54rHqt8XU2rWltMogbHVidyC1xNfWxLggdSC1xM671sPEx8DvoaMKKworICAzLiDIu7rzyuTI6yBjdyC+zb/J0tTQ3tX9uMO1pbTKwcso1NqxvsD91eLA78rHyuTI6yBpbmUgoaMpCisKKyAgNC4g1+6687C0IDxFU0M+ILz8o6zIu7rzueKx6raozru1vc/C0ru49rTtzvO12tK7uPbXvLG4uPy4xLXE19bEuLSmoaMKKworICA1LiDW2Li0sr3W6DO6zbK91ug0o6zWsbW9tdrSu7j2vuTX083qyKvA182stdq2/rj2vuTX06GjCisKKy0tLT4gVGhpcyBsdWJ3IGhhcyBhIGZldyB3cHRmZCB0aGF0IG1ycmYgY2hhbmdpbmcgdXNmIHRoZSBjaGFuZ2UgY29tbWFuZC4KKy0tLT4gVGhpcyBsaW5lIGhhcyBhIGZldyB3b3JkcyB0aGF0IG5lZWQgY2hhbmdpbmcgdXNpbmcgdGhlIGNoYW5nZSBjb21tYW5kLgorCivM4cq+ocPH69ei0uIgY3cgw/zB7rK7vfa99srHzOa7u8HL0ru49rWltMqjrNKyyMPE+r34yOvOxLG+suXI69e0zKzBy6GjCisKKworCit+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+fn4KKwkJICAgICAgILXayP29srXay8S92qHDyrnTw2PWuMHutcTG5Mv7uPy4xMDgw/zB7gorCisKKwkgICAgICoqILj8uMTA4Na4we6/ydLUyrnTw82syb6z/cDgw/zB7sv5yrnTw7XEttTP87LOyv2hoyoqCisKKyAgMS4guPy4xMDg1rjB7rXEuaTX97e9yr24+sm+s/3A4MP8we7Kx9K71sK1xKGjstnX97jxyr3Kx6HDCisKKyAgICAgICBbbnVtYmVyXSAgIGMgICBvYmplY3QJICAgu/LV3wkgICAgYwlbbnVtYmVyXSAgIG9iamVjdAorCisgIDIuILbUz/Oyzsr90rLKx9K70fm1xKOsscjI5yB3ILT6se21pdfWL7WltMqjrCS0+rHt0NDEqbXItcihoworCisgIDMuIMfrvau54rHq0sa2r7W9sb692tbQz8LD5rHqvMfT0CAtLS0+ILXEtdrSu9DQoaMKKworICA0LiC909fFvau54rHq0sa2r7W9tdrSu7j2tO3O87SmoaMKKworICA1LiDIu7rzyuTI6yBjJCDKubXDuMPQ0Mqjz8K1xLK/t9a4/NX9tcPNrLXatv7Q0NK70fmho9fuuvOwtCA8RVNDPiC8/KGjCisKKy0tLT4gVGhlIGVuZCBvZiB0aGlzIGxpbmUgbmVlZHMgc29tZSBoZWxwIHRvIG1ha2UgaXQgbGlrZSB0aGUgc2Vjb25kLgorLS0tPiBUaGUgZW5kIG9mIHRoaXMgbGluZSBuZWVkcyB0byBiZSBjb3JyZWN0ZWQgdXNpbmcgdGhlICBjJCAgY29tbWFuZC4KKworCisKK35+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+fgorCQkJICAgICAgILXayP29stChveEKKworCisgIDEuINKq1tjQwtbDyOvS0b6tyb6z/bXEzsSxvsTayN2jrMfryuTI69Ch0LTX1sS4IHCho7jDstnX97/J0tS9q9LRyb6z/QorICAgICC1xM7Esb7E2sjd1sPT2rniserWrrrzoaPI57n71+6689K7tM7JvrP9tcTKx9K7uPbV+9DQo6zEx8O0uMPQ0L2r1sMKKyAgICAg09q1scewueKx6sv51NrQ0LXEz8LSu9DQoaMKKworICAyLiDSqszmu7u54rHqy/nU2s671sO1xNfWt/ujrMfryuTI69Ch0LS1xCByILrN0qrM5ru7tfTUrc671sPX1rf7tcTQwtfWCisgICAgILf7vLS/yaGjCisKKyAgMy4guPy4xMDgw/zB7tTK0O3E+rjEseTWuLaotcS21M/zo6y007Wxx7C54rHqy/nU2s671sPWsbW9ttTP87XExKnOsqGjCisgICAgILHIyOfK5MjrIGN3IL/J0tTM5ru7tbHHsLniseq1vbWltMq1xMSpzrK1xMTayN2ju8rkyOsgYyQgv8nS1Mzmu7u1sQorICAgICDHsLniseq1vdDQxKm1xMTayN2howorCisgIDQuILj8uMTA4MP8we61xLjxyr3Kx6HDCisKKwkgW251bWJlcl0gICBjCW9iamVjdAkgICAgICC78tXfCWMgICBbbnVtYmVyXSAgIG9iamVjdAorCivPwsPmztLDx7zM0PjRp8+wz8LSu72yoaMKKworCisKK35+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+fgorCQkgICAgILXay8S9srXa0ru92qHDtqjOu7ywzsS8/te0zKwKKworCisgICoqIMrkyOsgQ1RSTC1nIM/Uyr61scewseC8rc7EvP7W0LWxx7C54rHqy/nU2tDQzrvWw9LUvLDOxLz+17TMrNDFz6KhoworICAgICDK5MjrIFNISUZULUcg1PLWsb3TzPjXqrW9zsS8/tbQtcTEs9K71ri2qNDQoaMqKgorCisgIMzhyr6hw8fQvMfSqs/Izai2wbG+vdrE2sjdo6zWrrrzssW/ydLU1rTQ0NLUz8KyvdboISEhCisKKyAgMS4gsLTPwiBDVFJMILz8sru3xb+qyLu687C0IGcgvPyho8i7uvO+zbvhv7S1vdKzw+bX7rXXsr+z9s/W0ru49te0zKzQxQorICAgICDPotDQo6zP1Mq+tcTE2sjdyse1scewseC8rbXEzsS8/sP7us3OxLz+tcTX3NDQyv2ho8frvMfXobK91ugztcTQ0LrFoaMKKworICAyLiCwtM/CIFNISUZULUcgvPy/ydLUyrm1w7Wxx7C54rHq1rG908z416q1vc7EvP7X7rrz0rvQ0KGjCisKKyAgMy4gyuTI68T61PjNo8H0tcTQ0LrFo6zIu7rzsLTPwiBTSElGVC1HoaPV4tH5vs2/ydLUt7W72LW9xPq12tK7tM6wtM/CCisgICAgIENUUkwtZyDKscv51Nq1xNDQusPBy6Gj16LS4qHDyuTI69DQusXKsaOs0NC6xcrHsru74dTaxsHEu8nPz9TKvrP2wLQKKyAgICAgtcShoworCisgIDQuIMjnufvUuNLio6zE+r/J0tS8zND41rTQ0LK91ugx1sGyvdboyP2howorCisKKworfn5+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+CisJCQm12svEvbK12rb+vdqhw8vRy/fA4MP8we4KKworCisgICAgICoqIMrkyOsgLyDS1LywzrLL5rXE19a3+7Suv8nS1NPD0tTU2rWxx7DOxLz+1tCy6dXSuMPX1rf7tK6hoyoqCisKKyAgMS4g1NrV/bOjxKPKvc/CyuTI6yAvINfWt/uho8T6tMvKsbvh16LS4rW9uMPX1rf7us254rHqtry74bP2z9bU2sbBxLu11worICAgICCyv6Os1eK4+iA6IMP8we7Kx9K70fm1xKGjCisKKyAgMi4gvdPXxcrkyOsgZXJycm9vciA8u9iztT6ho8THuPZlcnJyb29yvs3Kx8T60qqy6dXStcTX1rf7tK6howorCisgIDMuINKqsunV0s2syc/Su7TOtcTX1rf7tK6jrNa70OjSqrC0IG4gvPyho9Kqz/LP4Le0t73P8rLp1dLNrMnP0ru0zrXE19YKKyAgICAgt/u0rqOsx+vK5MjrIFNoaWZ0LU4gvLS/yaGjCisKKyAgNC4gyOe5+8T6z+vE5s/ysunV0tfWt/u0rqOsx+vKudPDID8gtPrM5iAvIL340NChoworCistLS0+IFdoZW4gdGhlIHNlYXJjaCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGZpbGUgaXQgd2lsbCBjb250aW51ZSBhdCB0aGUgc3RhcnQuCisKKyAgImVycnJvb3IiIGlzIG5vdCB0aGUgd2F5IHRvIHNwZWxsIGVycm9yOyAgZXJycm9vciBpcyBhbiBlcnJvci4KKworICDM4cq+ocPI57n7sunV0tLRvq21vbTvzsS8/sSpzrKjrLLp1dK74dfUtq+0087EvP7Nt7K/vMzQ+LLp1dKhoworCisKKworfn5+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+CisJCSAgILXay8S9srXayP292qHDxeS21MCousW1xLLp1dIKKworCisJICAgICAgKiogsLQgJSC/ydLUsunV0sXkttS1xMCousUgKaGiXaGifaGjKioKKworICAxLiCw0bniseq3xdTasb692s/Cw+ax6rzH09AgLS0+IMTH0rvQ0NbQtcTIzrrO0ru49iAooaJbILvyIHsgtKahoworCisgIDIuIL3T18WwtCAlINfWt/uhoworCisgIDMuILTLyrG54rHqtcTOu9bD06a1scrH1NrF5LbUtcTAqLrFtKahoworCisgIDQuINTZtM6wtCAlIL7Nv8nS1Mz4u9jF5LbUtcS12tK7uPbAqLrFtKahoworCistLS0+IFRoaXMgKCBpcyBhIHRlc3QgbGluZSB3aXRoICgncywgWydzIF0gYW5kIHsncyB9IGluIGl0LiApKQorCivM4cq+ocPU2rPM0PK198rUyrGjrNXiuPa5psTc08PAtLLp1dKyu8XkttS1xMCousXKx7rc09DTw7XEoaMKKworCisKKworCisKK35+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+fgorCQkgICAgICC12svEvbK12svEvdqhw9De1f207c7ztcS3vbeo1q7SuworCisKKwkJKiogyuTI6yA6cy9vbGQvbmV3L2cgv8nS1Mzmu7sgb2xkIM6qIG5ld6GjKioKKworICAxLiDH672rueKx6tLGtq+1vbG+vdrW0M/Cw+ax6rzH09AgLS0tPiC1xMTH0rvQ0KGjCisKKyAgMi4gyuTI6yA6cy90aGVlL3RoZSA8u9iztT4goaPH69ei0uK4w8P8we7Wu7jEseS54rHqy/nU2tDQtcS12tK7uPbGpcXkCisgICAgILSuoaMKKworICAzLiDK5MjrIDpzL3RoZWUvdGhlL2cJ1PLKx8zmu7vIq9DQtcTGpcXktK6howorCistLS0+IHRoZSBiZXN0IHRpbWUgdG8gc2VlIHRoZWUgZmxvd2VycyBpcyBpbiB0aGVlIHNwcmluZy4KKworICA0LiDSqszmu7vBvdDQ1q685LP2z9a1xMO/uPbGpcXktK6jrMfryuTI6yA6Iywjcy9vbGQvbmV3L2cgKCMsI7T6se21xMrHCisgICAgIMG90NC1xNDQusUpoaPK5MjrIDolcy9vbGQvbmV3L2cg1PLKx8zmu7vV+7j2zsS8/tbQtcTDv7j2xqXF5LSuoaMKKworCisKKworfn5+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+CisJCQkgICAgICAgtdrLxL2y0KG94QorCisKKyAgMS4gQ3RybC1nINPD09rP1Mq+tbHHsLniserL+dTazrvWw7rNzsS8/te0zKzQxc+ioaNTaGlmdC1HINPD09q9q7niserM+AorICAgICDXqtbBzsS8/tfuuvPSu9DQoaPPyMfDyOvSu7j20NC6xci7uvOwtCBTaGlmdC1HINTyyse9q7niserSxrav1sG4w9DQCisgICAgILrFtPqx7bXE0NChoworCisgIDIuIMrkyOsgLyDIu7rzvfTL5tK7uPbX1rf7tK7Kx9TyysfU2rWxx7DL+bHgvK21xM7EtbXW0M/yuvOy6dXSuMPX1rf7tK6howorICAgICDK5Mjrzsq6xSA/IMi7uvO99Mvm0ru49tfWt/u0rsrH1PLKx9TatbHHsMv5seC8rbXEzsS1tdbQz/LHsLLp1dK4w9fWCisgICAgILf7tK6ho83qs8nSu7TOsunV0tauuvOwtCBuILz81PLKx9bYuLTJz9K7tM61xMP8we6jrL/J1NrNrNK7t73P8snPsukKKyAgICAg1dLPwtK7uPbX1rf7tK7L+dTao7u78tXfsLQgU2hpZnQtTiDP8s/gt7S3vc/ysunV0s/CuMPX1rf7tK7L+dTaoaMKKworICAzLiDI57n7ueKx6rWxx7DOu9bDysfAqLrFKKGiKaGiW6GiXaGie6GifaOssLQgJSC/ydLUvau54rHq0sa2r7W9xeS21LXECisgICAgIMCousXJz6GjCisKKyAgNC4g1NrSu9DQxNrM5ru7zbfSu7j219a3+7SuIG9sZCDOqtDCtcTX1rf7tK4gbmV3o6zH68rkyOsgIDpzL29sZC9uZXcKKyAgICAg1NrSu9DQxNrM5ru7y/nT0LXE19a3+7SuIG9sZCDOqtDCtcTX1rf7tK4gbmV3o6zH68rkyOsgIDpzL29sZC9uZXcvZworICAgICDU2sG90NDE2szmu7vL+dPQtcTX1rf7tK4gb2xkIM6q0MK1xNfWt/u0riBuZXejrMfryuTI6yAgOiMsI3Mvb2xkL25ldy9nCisgICAgINTazsS8/sTazOa7u8v509C1xNfWt/u0riBvbGQgzqrQwrXE19a3+7SuIG5ld6Osx+vK5MjrICA6JXMvb2xkL25ldy9nCisgICAgIL340NDIq87EzOa7u8qx0a/OytPDu6fIt8jPw7+49szmu7vQ6MztvNMgYyDRoc/uo6zH68rkyOsgOiVzL29sZC9uZXcvZ2MKKworCit+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+fn4KKwkJtdrO5b2ytdrSu73aocPU2iBWSU0gxNrWtNDQzeKyv8P8we61xLe9t6gKKworCisJICAgKiogyuTI6yA6ISDIu7rzvfTL5tb4yuTI69K7uPbN4rK/w/zB7r/J0tTWtNDQuMPN4rK/w/zB7qGjKioKKworICAxLiCwtM/CztLDx8v5yuzPpLXEIDogw/zB7sno1sO54rHqtb3GwcS7tdeyv6Gj1eLR+b7Nv8nS1MjDxPrK5Mjrw/zB7sHLoaMKKworICAyLiC909fFyuTI67jQzL66xSAhINXiuPbX1rf7o6zV4tH5vs3UytDtxPrWtNDQzeKyv7XEIHNoZWxsIMP8we7By6GjCisKKyAgMy4gztLDx9LUIGxzIMP8we7OqsD9oaPK5MjrICFscyA8u9iztT4goaO4w8P8we6+zbvhwdC+2bP2xPq1scewxL/CvLXECisgICAgIMTayN2jrL7NyOfNrMT61NrD/MHu0NDM4cq+t/vPwsrkyOsgbHMgw/zB7rXEveG5+9K70fmho8jnufsgIWxzIMO7xvAKKyAgICAg1/fTw6OsxPq/ydLUytTK1CA6IWRpciC/tL+0oaMKKworLS0tPiDM4cq+ocMgy/nT0LXEzeKyv8P8we62vL/J0tTS1NXi1ta3vcq91rTQ0KGjCisKKy0tLT4gzOHKvqHDIMv509C1xCA6IMP8we62vLHY0OvS1CA8u9iztT4guObW1aGjCisKKworCisKK35+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+fgorCQkgICAgICC12s7lvbK12rb+vdqhw7nY09qxo7TmzsS8/rXEuPy24NDFz6IKKworCisJICAgICAqKiDSqr2rttTOxLz+tcS4xLavsaO05rW9zsS8/tbQo6zH68rkyOsgOncgRklMRU5BTUUgoaMqKgorCisgIDEuIMrkyOsgOiFkaXIgu/LV3yA6IWxzILvx1qq1scewxL/CvLXExNrI3aGjxPrTprWx0tHWqrXA1+6687u5tcPHwworICAgICA8u9iztT4gsMmhoworCisgIDIuINGh1PHSu7j2ydDOtLTm1NrOxLz+w/ujrLHIyOcgVEVTVCChoworCisgIDMuIL3T18XK5MjrIDp3IFRFU1QgICi0y7SmIFRFU1QgysfE+sv50aHU8bXEzsS8/sP7oaMpCisKKyAgNC4guMPD/MHuu+HS1CBURVNUIM6qzsS8/sP7saO05tX7uPbOxLz+IChWSU0gvcyzzCmho86qwcvIt7Gj1f3It7GjtOajrAorICAgICDH69TZtM7K5MjrIDohZGlyILLpv7TE+rXExL/CvMHQse3E2sjdoaMKKworLS0tPiDH69ei0uKhw8jnufvE+s3Ls/YgVklNIMi7uvPU2tLUzsS8/sP7IFRFU1Qgzqqyzsr9vfjI66OsxMfDtLjDzsS8/sTaCisgICAgIMjd06a4w82sxPqxo7TmyrG1xM7EvP7E2sjdysfN6sir0rvR+bXEoaMKKworICA1LiDP1tTaxPq/ydLUzai5/crkyOsgOiFybSBURVNUIMC0yb6z/SBURVNUIM7EvP7By6GjCisKKworCit+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+fn4KKwkJICAgILXazuW9srXayP292qHD0ru49r7f09DRodTx0NS1xLGjtObD/MHuCisKKworCQkqKiDSqrGjtObOxLz+tcSyv7fWxNrI3aOsx+vK5MjrIDojLCMgdyBGSUxFTkFNRSAqKgorCisgIDEuINTZwLTWtNDQ0ru0ziA6IWRpciC78tXfIDohbHMgu/HWqrWxx7DEv8K8tcTE2sjdo6zIu7rz0aHU8dK7uPa6z8rKtcQKKyAgICAgsrvW2MP7tcTOxLz+w/ujrLHIyOcgVEVTVCChoworCisgIDIuIL3T18W9q7niserSxrav1sGxvtKztcTX7raltsujrMi7uvOwtCBDVFJMLWcg1dK1vbjD0NC1xNDQusWho7HwzfzByworICAgICDQ0LrFxbahoworCisgIDMuIL3T18Ww0bniserSxrav1sGxvtKztcTX7rXXtsujrNTZsLTSu7TOIENUUkwtZyCho9KysfDN/MHL1eK49tDQusPFtqGjCisKKyAgNC4gzqrBy9a7saO05s7E1cK1xMSzuPayv7fWo6zH68rkyOsgOiMsIyB3IFRFU1QgoaPV4sDvtcQgIywjIL7NysfJz8PmCisgICAgINKqx/PE+rzH16G1xNDQusUotqW2y9DQusUstde2y9DQusUpo6y2+CBURVNUIL7NysfRobaotcTOxLz+w/uhoworCisgIDUuINfuuvOjrNPDIDohZGlyIMi3yM/OxLz+yse38dX9yLexo7TmoaO1q8rH1eK0zs/IsfDJvrP9tfShoworCisKKworCit+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+fn4KKwkJICAgtdrO5b2ytdrLxL3aocPM4cihus26z7KizsS8/gorCisKKyAgICAgICAqKiDSqs/ytbHHsM7EvP7W0LLlyOvB7c3itcTOxLz+tcTE2sjdo6zH68rkyOsgOnIgRklMRU5BTUUgKioKKworICAxLiDH67z8yOsgOiFkaXIgyLfIz8T6x7DD5rS0vai1xCBURVNUIM7EvP67udTaoaMKKworICAyLiDIu7rzvau54rHq0sa2r9bBtbHHsNKzw+a1xLaltsuhoworCivM2LHwzOHKvqHDINa00NCyvdboM9auuvPE+r2rv7S1vbXazuW9srXayP292qOsx+u97Mqx1NnN+c/C0sa2r7vYtb3V4sDvwLShoworCisgIDMuIL3T18XNqLn9IDpyIFRFU1QgvavHsMPmtLS9qLXEw/vOqiBURVNUILXEzsS8/szhyKG9+MC0oaMKKworzNix8Mzhyr6hw8T6y/nM4cihvfjAtLXEzsS8/r2rtNO54rHqy/nU2s671sO0pr+qyrzWw8jroaMKKworICA0LiDOqsHLyLfIz87EvP7S0b6tzOHIobPJuaajrNLGtq+54rHqu9i1vdStwLS1xM671sO+zb/J0tTXotLi09DBvbfdtdoKKyAgICAgzuW9srXayP292qOs0ru33crH1K2xvqOswe3N4tK7t93Kx8C019TOxLz+tcS4sbG+oaMKKworCisKK35+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+fgorCQkJICAgICAgILXazuW9stChveEKKworCisgIDEuIDohY29tbWFuZCDTw9Pa1rTQ0NK7uPbN4rK/w/zB7iBjb21tYW5koaMKKworICAgICDH67+00rvQqcq1vMrA/dfTocMKKwkgIDohZGlyICAtICDTw9Paz9TKvrWxx7DEv8K8tcTE2sjdoaMKKwkgIDohcm0gRklMRU5BTUUgIC0J08PT2sm+s/3D+86qIEZJTEVOQU1FILXEzsS8/qGjCisKKyAgMi4gOncgRklMRU5BTUUgIL/Jvau1scewIFZJTSDW0NX91Nqx4LyttcTOxLz+saO05rW9w/vOqiBGSUxFTkFNRSC1xM7ECisgICAgILz+1tChoworCisgIDMuIDojLCN3IEZJTEVOQU1FIL/Jvau1scewseC8rc7EvP612iAjINDQ1sG12iAjINDQtcTE2sjdsaO05rW9zsS8/gorICAgICBGSUxFTkFNRSDW0KGjCisKKyAgNC4gOnIgRklMRU5BTUUgv8nM4cihtMXFzM7EvP4gRklMRU5BTUUgsqK9q8bksuXI67W9tbHHsM7EvP61xLniserOu9bDCisgICAgILrzw+ahoworCisKKworCisKKworCit+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+fn4KKwkJCSC12sH5vbK12tK7vdqhw7Tyv6rA4MP8we4KKworCisJICoqIMrkyOsgbyC9q9TaueKx6rXEz8K3vbTyv6rQwrXE0rvQ0LKivfjI67LlyOvEo8q9oaMqKgorCisgIDEuIMfrvau54rHq0sa2r7W9sb692tbQz8LD5rHqvMfT0CAtLS0+ILXExMfSu9DQoaMKKworICAyLiC909fFyuTI69Ch0LS1xCBvINTaueKx6iAqz8K3vSogtPK/qtDCtcTSu9DQsqK9+MjrsuXI68Sjyr2howorCisgIDMuIMi7uvO4tNbGseq8x9PQIC0tLT4gtcTQ0LKisLQgPEVTQz4gvPzNy7P2suXI68Sjyr22+L34yOvV/bOjxKPKvaGjCisKKy0tLT4gQWZ0ZXIgdHlwaW5nICBvICB0aGUgY3Vyc29yIGlzIHBsYWNlZCBvbiB0aGUgb3BlbiBsaW5lIGluIEluc2VydCBtb2RlLgorCisgIDQuIM6qwcvU2rniseogKsnPt70qILTyv6rQwrXE0rvQ0KOs1rvQ6NKqyuTI67Tz0LS1xCBPILb4srvKx9Ch0LS1xCBvCisgICAgIL7Nv8nS1MHLoaPH69Taz8LQ0LLiytTSu8/CsMmho7WxueKx6rSm1NrU2rjD0NDJz8qxo6ywtCBTaGlmdC1Pv8nS1AorICAgICDU2rjD0NDJz7e90MK/qtK70NChoworCitPcGVuIHVwIGEgbGluZSBhYm92ZSB0aGlzIGJ5IHR5cGluZyBTaGlmdC1PIHdoaWxlIHRoZSBjdXJzb3IgaXMgb24gdGhpcyBsaW5lLgorCisKKworCisKK35+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+fgorCQkJtdrB+b2ytdq2/r3aocO54rHquvOy5cjrwODD/MHuCisKKworCQkgICAgICoqIMrkyOsgYSC9q7/J1Nq54rHq1q6687LlyOvOxLG+oaMgKioKKworICAxLiDH69Ta1f2zo8Sjyr3Pws2ouf3K5MjrICQgvau54rHq0sa2r7W9sb692tbQz8LD5rHqvMfT0CAtLS0+ILXEtdrSu9DQCisgICAgILXExKnOsqGjCisKKyAgMi4gvdPXxcrkyOvQodC0tcQgYSDU8r/J1Nq54rHq1q6687LlyOvOxLG+wcuho7Tz0LS1xCBBINTyv8nS1NaxvdPU2tDQCisgICAgIMSpsuXI687Esb6howorCivM4cq+ocPK5MjrtPPQtCBBILXEstnX97e9t6i/ydLU1NrQ0MSpsuXI687Esb6jrLHcw+LBy8rkyOsgaaOsueKx6raozru1vQorICAgICAg1+6689K7uPbX1rf7o6zK5MjrtcTOxLG+o6w8RVNDPiC72Li01f2zo8Sjyr2jrLz9zbfT0rz80sa2r7niserS1LywCisgICAgICB4IMm+s/21scewueKx6sv51NrOu9bD19a3+7XItcjW7rbgt7HU07XEstnX96GjCisKKyAgMy4gstnX99auuvO12tK70NC+zb/J0tSyubPkzerV+8HLoaPH69ei0uK54rHquvOy5cjrzsSxvtPrsuXI68Sjyr3Kx7v5CisgICAgILG+zerIq9K71sK1xKOs1rvKx87Esb6y5cjrtcTOu9bDtqjOu8nU09Cyu82ssNXBy6GjCisKKy0tLT4gVGhpcyBsaW5lIHdpbGwgYWxsb3cgeW91IHRvIHByYWN0aWNlCistLS0+IFRoaXMgbGluZSB3aWxsIGFsbG93IHlvdSB0byBwcmFjdGljZSBhcHBlbmRpbmcgdGV4dCB0byB0aGUgZW5kIG9mIGEgbGluZS4KKworCisKK35+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+fgorCQkgICAgtdrB+b2ytdrI/b3aocPB7c3i0ru49tbDu7vA4MP8we61xLDmsb4KKworCisJCSAgICAgICoqIMrkyOu089C0tcQgUiC/ycGs0PjM5ru7tuC49tfWt/uhoyoqCisKKyAgMS4gx+u9q7niserSxravtb2xvr3a1tDPwsPmseq8x9PQIC0tLT4gtcS12tK70NChoworCisgIDIuINLGtq+54rHqtb212tK70NDW0LK7zazT2rHq09AgLS0tPiC1xLXatv7Q0LXEtdrSu7j2taW0yrXEv6rKvKOsvLS1pQorICAgICC0yiBsYXN0ILSmoaMKKworICAzLiDIu7rzyuTI67Tz0LS1xCBSIL+qyryw0bXa0rvQ0NbQtcSyu82s09q12rb+0NC1xMqj0+DX1rf71vDSu8rkyOujrL7NCisgICAgIL/J0tTIq7K/zOa7u7X01K3T0LXE19a3+7b4yrm1w7Xa0rvQ0M3qyKvA182stdq2/tDQwcuhoworCistLS0+IFRvIG1ha2UgdGhlIGZpcnN0IGxpbmUgdGhlIHNhbWUgYXMgdGhlIGxhc3Qgb24gdGhpcyBwYWdlIHVzZSB0aGUga2V5cy4KKy0tLT4gVG8gbWFrZSB0aGUgZmlyc3QgbGluZSB0aGUgc2FtZSBhcyB0aGUgc2Vjb25kLCB0eXBlIFIgYW5kIHRoZSBuZXcgdGV4dC4KKworICA0LiDH69ei0uKhw8jnufvE+rC0IDxFU0M+IM3Ls/bWw7u7xKPKvbvYuLTV/bOjxKPKvaOsydDOtMzmu7u1xM7Esb69q8jUCisgICAgIMi7saOz1tSt17ShoworCisKKworCisKK35+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+fgorCQkJICAgILXawfm9srXay8S92qHDyejWw8Dgw/zB7rXE0aHP7gorCisKKwkJICAqKiDJ6NbDv8nKubLp1dK78tXfzOa7u7/JuvbC1LTz0KHQtLXE0aHP7iAqKgorCisKKyAgMS4g0qqy6dXStaW0yiBpZ25vcmUgv8nU2tX9s6PEo8q9z8LK5MjrIC9pZ25vcmUgoaPSqtbYuLSy6dXSuMO0yqOsv8nS1AorICAgICDW2Li0sLQgbiC8/KGjCisKKyAgMi4gyLu688no1sMgaWMg0aHP7ihpY77NysfTos7EuvbC1LTz0KHQtElnbm9yZSBDYXNltcTK19fWxLjL9dC0tMopo6y8tAorICAgICDK5MjrocMKKwk6c2V0IGljCisKKyAgMy4gz9bU2r/J0tTNqLn9vPzI6yBuILz81Nm0zrLp1dK1pbTKIGlnbm9yZaGj1ti4tLLp1dK/ydLU1ti4tLz8yOsgbiC8/KGjCisKKyAgNC4gyLu688no1sMgaGxzZWFyY2ggus0gaW5jc2VhcmNoINXiwb249tGhz+6jrMrkyOvS1M/CxNrI3aHDCisgICAgIDpzZXQgaGxzIGlzCisKKyAgNS4gz9bU2r/J0tTU2bTOyuTI67Lp1dLD/MHuo6y/tL+0u+HT0Mqyw7TQp7n7ocMKKyAgICAgL2lnbm9yZQorCit+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+fn4KKwkJCSAgICAgICC12sH5vbLQob3hCisKKworICAxLiDK5Mjr0KHQtLXEIG8gv8nS1NTaueKx6s/Ct7208r+q0MK1xNK70NCyor2rueKx6tbD09rQwr+qtcTQ0MrXo6y9+MjrCisgICAgILLlyOvEo8q9oaMKKyAgICAgyuTI67Tz0LS1xCBPIL/J0tTU2rniserJz7e9tPK/qtDCtcTSu9DQsqK9q7niserWw9Pa0MK/qrXE0NDK16OsvfjI6worICAgICCy5cjrxKPKvaGjCisKKyAgMi4gyuTI69Ch0LS1xCBhIL/J0tTU2rniserL+dTazrvWw9auuvOy5cjrzsSxvqGjCisgICAgIMrkyOu089C0tcQgQSC/ydLU1Nq54rHqy/nU2tDQtcTQ0MSp1q6687LlyOvOxLG+oaMKKworICAzLiDK5MjrtPPQtLXEIFIgvau9+MjrzOa7u8Sjyr2jrNax1sGwtCA8RVNDPiC8/M3Ls/bM5ru7xKPKvbb4vfjI69X9s6MKKyAgICAgxKPKvaGjCisKKyAgNC4gyuTI6yA6c2V0IHh4eCC/ydLUyejWwyB4eHgg0aHP7qGjCisKKworCisKKworCisKKworCit+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+fn4KKwkJICAgICAgILXaxt+9sqHD1NrP37Dv1vrD/MHuCisKKwkJICAgICAgKiogyrnTw9Taz9+w79b6z7XNsyAqKgorCisgIFZpbSDTtdPQ0ru49s+41sLIq8PmtcTU2s/fsO/W+s+1zbOho9KqxvS2r7jDsO/W+s+1zbOjrMfr0aHU8cjnz8LI/dbWt70KKyAgt6jWrtK7ocMKKwktILC0z8IgPEhFTFA+ILz8ICjI57n7vPzFzMnP09C1xLuwKQorCS0gsLTPwiA8RjE+ILz8ICjI57n7vPzFzMnP09C1xLuwKQorCS0gyuTI6wk6aGVscCA8u9iztT4KKworICDK5MjrIDpxIDy72LO1PiC/ydLUudix1bDv1vq0sL/aoaMKKworICDM4bmp0ru49tX9yLe1xLLOyv24+CI6aGVscCLD/MHuo6zE+r/J0tTV0rW9udjT2rjD1vfM4rXEsO/W+qGjx+vK1NHp0tQKKyAgz8Kyzsr9KL/JsfDN/MHLsLS72LO1vPzFtqGjOimhwworCisJICA6aGVscCB3IDy72LO1PgorCSAgOmhlbHAgY188VCA8u9iztT4KKwkgIDpoZWxwIGluc2VydC1pbmRleCA8u9iztT4KKwkgIDpoZWxwIHVzZXItbWFudWFsIDy72LO1PgorCisKKworCit+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+fn4KKwkJICAgICAgILXasMu9sqHDtLS9qNK7uPbG9LavvcWxvgorCisJCQkgICoqIMb008N2aW21xLmmxNwgKioKKworICBWaW21xLmmxNzM2NDU0qqxyHZptuC1w7bgo6y1q7Tzsr+31rmmxNy2vMO709DIscqhvKS77qGjzqrBy8b0tq+4/LbgtcQKKyAguabE3KOsxPq1w7S0vajSu7j2dmltcmPOxLz+oaMKKworICAxLiC/qsq8seC8rXZpbXJjzsS8/qOs1eLIob7209rE+sv5yrnTw7XEstnX98+1zbOhwworCisgICAgIDplZGl0IH4vLnZpbXJjCQnV4srHVW5peM+1zbPL+cq508O1xMP8we4KKyAgICAgOmVkaXQgJFZJTS9fdmltcmMJCdXiysdXaW5kb3dzz7XNs8v5yrnTw7XEw/zB7gorCisgIDIuIL3T18W1vMjrdmltcmO3tsD9zsS8/qHDCisKKyAgICAgOnJlYWQgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0KKworICAzLiCxo7TmzsS8/qOsw/zB7s6qocMKKworICAgICA6d3JpdGUKKworICDU2s/CtM7E+sb0tq92aW21xMqxuvKjrLHgvK3G977Nu+HT0MHL0++3qLjfwcG1xLmmxNyho8T6v8nS1LzM0Piw0cT6z7IKKyAgu7a1xMbky/y5psTcyejWw8ztvNO1vdXiuPZ2aW1yY87EvP7W0KGjCisKK35+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+fgorCisgIHZpbSC9zLPMtb20y73hyviho7G+vcyzzNa7ysfOqsHLvPLD97XYvenJ3NK7z8J2aW2x4LytxvejrLWr0tHX49LUyMPE+gorICC63Mjd0tfRp7vhyrnTw7G+seC8rcb3wcuho87j07nWytLJo6x2aW27udPQuty24LrctuC1xMP8we6jrLG+vcyzzMv5vekKKyAgydy1xLu5su61w9S21vjE2KGjy/nS1MT60qq+q82otcS7sKOsu7nN+7zM0PjFrMGmxbaho8/C0ruyvcT6v8nS1NTEtsEKKyAgdmltytay4aOsyrnTw7XEw/zB7srHocMKKwk6aGVscCB1c2VyLW1hbnVhbAorCisgIM6qwcu4/L340ruyvbXEss6/vLrN0afPsKOs0tTPwtXisb7K6da1tcPNxrz2ocMKKworCVZpbSAtIFZpIEltcHJvdmVkIC0g1/fV36HDU3RldmUgT3VhbGxpbmUKKwmz9rDmyeehw05ldyBSaWRlcnMKKworICDV4srHtdrSu7G+zerIq72yveJ2aW21xMrpvK6ho7bU09qz9dGn1d/M2LHw09DTw6GjxuTW0Lu5sPy6rNPQtPPBv8q1wP0KKyAgus3NvMq+oaPT+9aqz+rH6aOsx+u3w87KIGh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnL2NsaWNrNS5odG1sCisKKyAg0tTPwtXisb7K6bHIvc/Az8HLtvjH0sTayN3W99Kqysd2abb4srvKx3ZpbaOstavKx9Ky1rW1w83GvPahwworCisJTGVhcm5pbmcgdGhlIFZpIEVkaXRvciAtINf31d+hw0xpbmRhIExhbWIKKwmz9rDmyeehw08nUmVpbGx5ICYgQXNzb2NpYXRlcyBJbmMuCisKKyAg1eLKx9K7sb6yu7TttcTK6aOszai5/cv8xPq8uLr1xNy5u8HLveK1vcirsr92acTcubvX9rW9tcTKwsfpoaO0y8rptcS12gorICDB+bj2sOaxvtKysPy6rMHL0rvQqbnY09p2aW21xNDFz6KhoworCisgILG+vcyzzMrH08nAtNfUQ2Fsb3JhZG8gU2Nob29sIG9mIE1pbmVzZbXETWljaGFlbCBDLiBQaWVyY2WholJvYmVydCBLLgorICBXYXJlIMv5seDQtLXEo6zG5NbQwLTX1ENvbG9yYWRvIFN0YXRlIFVuaXZlcnNpdHm1xENoYXJsZXMgU21pdGjM4bmpwcsKKyAguty24LS00uKho7Hg1d/NqNDFtdjWt8rHocMKKworCWJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdQorCisgILG+vcyzzNLR08lCcmFtIE1vb2xlbmFhcteozqp2aW29+NDQ0N62qaGjCisKKworCisgINLr1sbV37i90dShwworICA9PT09PT09PT09PQorICAgICAgvPLM5dbQzsS9zLPMt63S67Dm1q7S69bG1d/OqsG6sv3MqSA8YmVvc0B0dXJib2xpbnV4LmNvbS5jbj6jrLu509AKKyAgICAgIMHtzeLSu7j2warPtbXY1rehw2xpbnV4cmF0QGdudWNoaW5hLm9yZ6GjCisKKyAgICAgILexzOXW0M7EvcyzzMrHtNO88szl1tDOxL3Ms8y3rdLrsObKudPDIERlYmlhbiBHTlUvTGludXgg1tDOxM/uxL/QoQorICAgICAg1+m1xNPaueO71M/Iyfqx4NC0tcTW0M7EurrX1teqwuvG9yAgYXV0b2NvbnZlcnQg16q7u7b4s8m1xKOssqK21NeqCisgICAgICC7u7XEveG5+9f2wcvSu9Cpz7i92rXEuMS2r6GjCisKKyAgseS4/LzHwryhwworICA9PT09PT09PT0KKyAgICAgIDIwMDLE6jA41MIzMMjVIMG6sv3MqSA8YmVvc0B0dXJib2xpbnV4LmNvbS5jbj4KKyAgICAgILjQ0LsgUk1TQFNNVEggtcTWuNX9o6y9q7bgtKa07c7z0N7V/aGjCisKKyAgICAgIDIwMDLE6jA01MIyMsjVIMG6sv3MqSA8bGludXhyYXRAZ251Y2hpbmEub3JnPgorICAgICAguNDQuyB4dWFuZG9uZ0BzaDE2My5uZXQgtcTWuNX9o6y9q8G9tKa07bHw19bQ3tX9oaMKKworICAgICAgMjAwMsTqMDPUwjE4yNUgwbqy/cypIDxsaW51eHJhdEBnbnVjaGluYS5vcmc+CisgICAgICC4+b7dQnJhbSBNb2xlbmFhcs/IyfrU2jIwMDLE6jAz1MIxNsjVtcTAtNDF0qrH86Osvat2aW10dXRvcjEuNNbQ0usKKyAgICAgILDmyf28trW9dmltdHV0b3IxLjWhoworCisgICAgICAyMDAxxOoxMdTCMTXI1SDBurL9zKkgPGxpbnV4cmF0QGdudWNoaW5hLm9yZz4KKyAgICAgIL2rdmltdHV0b3IxLjTW0NLrsObM4b27uPhCcmFtIE1vbGVuYWFyus1TdmVuIEd1Y2tlc6GjCit+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+fn4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdmltMTZ4MTYuZ2lmIGIvcnVudGltZS92aW0xNngxNi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1YTg1NQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdmltMTZ4MTYuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdmltMTZ4MTYucG5nIGIvcnVudGltZS92aW0xNngxNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0NWQyMgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdmltMTZ4MTYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdmltMTZ4MTYueHBtIGIvcnVudGltZS92aW0xNngxNi54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3NWI3MQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdmltMTZ4MTYueHBtCkBAIC0wLDAgKzEsMjcgQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKiB2aW0xNngxNltdID0geworIjE2IDE2IDggMSIsCisiIAljIE5vbmUiLAorIi4JYyAjMDAwMDAwIiwKKyIrCWMgIzAwMDA4MCIsCisiQAljICMwMDgwMDAiLAorIiMJYyAjMDBGRjAwIiwKKyIkCWMgIzgwODA4MCIsCisiJQljICNDMEMwQzAiLAorIiYJYyAjRkZGRkZGIiwKKyIgIC4uLi4uIy4gLi4uLiAgIiwKKyIgLiYmJiYmLkAuJiYmJi4gIiwKKyIgLiUlJSUlJC4uJSUlJSQuIiwKKyIgIC4lJSUkLkAuJiUlJC4gIiwKKyIgIC4lJSUkLi4mJSUkLiAgIiwKKyIgIC4lJSUkLiYlJSQuLiAgIiwKKyIgIy4lJSUkJiUlJC5AQC4gIiwKKyIjQC4lJSUmJSUkLkBAQEAuIiwKKyIuQC4lJSUlJS4uQEBAQCsgIiwKKyIgLi4lJSUlLiUuLi5ALiAgIiwKKyIgIC4lJSUlLi4uJSUuJS4gIiwKKyIgIC4lJSUuJSUuJSUlJSUuIiwKKyIgIC4lJSQuLiUuJS4lLiUuIiwKKyIgIC4lJC5ALiUuJS4lLiUuIiwKKyIgICAuLiAuJSUuJS4lLiUuIiwKKyIgICAgICAgLi4gLiAuIC4gIn07CmRpZmYgLS1naXQgYS9ydW50aW1lL3ZpbTMyeDMyLmdpZiBiL3J1bnRpbWUvdmltMzJ4MzIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMzgyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ZpbTMyeDMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL3ZpbTMyeDMyLnBuZyBiL3J1bnRpbWUvdmltMzJ4MzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZTA0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ZpbTMyeDMyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL3ZpbTMyeDMyLnhwbSBiL3J1bnRpbWUvdmltMzJ4MzIueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTNhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ZpbTMyeDMyLnhwbQpAQCAtMCwwICsxLDQzIEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdmltMzJ4MzJbXSA9IHsKKyIzMiAzMiA4IDEiLAorIiAJYyBOb25lIiwKKyIuCWMgIzAwMDAwMCIsCisiKwljICMwMDAwODAiLAorIkAJYyAjMDA4MDAwIiwKKyIjCWMgIzAwRkYwMCIsCisiJAljICM4MDgwODAiLAorIiUJYyAjQzBDMEMwIiwKKyImCWMgI0ZGRkZGRiIsCisiICAgICAgICAgICAgICAgLi4gICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgLiMjLiAgICAgICAgICAgICAgIiwKKyIgICAuLi4uLi4uLi4uLiNAQCMuIC4uLi4uLi4uLiAgICIsCisiICAuJiYmJiYmJiYmJiYuQEBAIy4mJiYmJiYmJiYuICAiLAorIiAgLiYlJSUlJSUlJSUlJS5AQEAuJiUlJSUlJSUlJS4gIiwKKyIgICAuJSUlJSUlJSUlJSQuQEBAQC4lJSUlJSUlJSQuICIsCisiICAgIC4kJSUlJSUlJCQuQEBAQEBALiQlJSUlJSQkLiAiLAorIiAgICAuJiUlJSUlJSQuQEBAQEBALiYlJSUlJSQkLiAgIiwKKyIgICAgLiYlJSUlJSUkLkBAQEBALiYmJSUlJSQkLiAgICIsCisiICAgIC4mJSUlJSUlJC5AQEBALiYmJSUlJSQkLiAgICAiLAorIiAgICAuJiUlJSUlJSQuQEBALiYmJSUlJSQkLiAgICAgIiwKKyIgICAgLiYlJSUlJSUkLkBALiYmJSUlJSQkLiMuICAgICIsCisiICAgLi4mJSUlJSUlJC5ALiYmJSUlJSQkLkBAIy4gICAiLAorIiAgLiMuJiUlJSUlJSQuLiYmJSUlJSQkLkBAQEAjLiAgIiwKKyIgLiNALiYlJSUlJSUkLiYmJSUlJSQkLkBAQEBAQCMuICIsCisiLiNAQC4mJSUlJSUlJCYmJSUlJSQkLkBAQEBAQEBAIy4iLAorIi4rQEAuJiUlJSUlJSQmJSUlJSQkLkBAQEBAQEBAQCsuIiwKKyIgLitALiYlJSUlJSUkJSUlJSQkLkBAQEBAQEBAQCsuICIsCisiICAuKy4mJSUlJSUlJSUlJS4uLkBAQEBAQEBAQCsuICAiLAorIiAgIC4uJiUlJSUlJSUlJS4lJS5AQEBAQEBAQCsuICAgIiwKKyIgICAgLiYlJSUlJSUlJSUuJSUuQEBAQEBAQCsuICAgICIsCisiICAgIC4mJSUlJSUlJSUkLi4uQC4uLkAuLi4uLi4gICAiLAorIiAgICAuJiUlJSUlJSUkLiUlJS4lJSUuJSUlLiUlLiAgIiwKKyIgICAgLiYlJSUlJSUkJC4uJSUuLiUlJSUlJSUlJSUuICIsCisiICAgIC4mJSUlJSUkJC4uJSUuLi4lJSsrJSUuLiUuICAiLAorIiAgICAuJiUlJSUkJC5ALiUlLi4lJSsuJSUuLiUlLiAgIiwKKyIgICAgLiYlJSUkJC5AQC4lJS4uJSUuLiUlLi4lJS4gICIsCisiICAgIC4mJSUkJC4uKy4lJS4uJSUuLiUlLi4lJS4gICAiLAorIiAgICAgLiUkJC4gIC4uJSUlLiUlLi4lJS4uJSUlLiAgIiwKKyIgICAgICAuLi4gICAgLi4uLisuLiAgLi4gIC4uLiAgICIsCisiICAgICAgICAgICAgICAuKysuICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgIC4uICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9ydW50aW1lL3ZpbTQ4eDQ4LmdpZiBiL3J1bnRpbWUvdmltNDh4NDguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZTE4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ZpbTQ4eDQ4LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL3ZpbTQ4eDQ4LnBuZyBiL3J1bnRpbWUvdmltNDh4NDgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYWM2N2UKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ZpbTQ4eDQ4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ydW50aW1lL3ZpbTQ4eDQ4LnhwbSBiL3J1bnRpbWUvdmltNDh4NDgueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZmRkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ZpbTQ4eDQ4LnhwbQpAQCAtMCwwICsxLDU5IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogdmltNDh4NDhbXSA9IHsKKyI0OCA0OCA4IDEiLAorIiAJYyBOb25lIiwKKyIuCWMgIzAwMDAwMCIsCisiKwljICMwMDAwODQiLAorIkAJYyAjMDA4MjAwIiwKKyIjCWMgIzAwRkYwMCIsCisiJAljICM4NDgyODQiLAorIiYJYyAjQzZDM0M2IiwKKyIqCWMgI0ZGRkZGRiIsCisiICAgICAgICAgICAgICAgICAgICAgICAuLiAgICAgICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAgICAgLiMjLiAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgIC4jQEAjLiAgICAgICAgICAgICAgICAgICAgICIsCisiICAgICAgLi4uLi4uLi4uLi4uLi4uI0BAQEAjLiAgIC4uLi4uLi4uLi4uLi4uLiAgIiwKKyIgICAgIC4qKioqKioqKioqKioqKiouQEBAQEAjLiAuKioqKioqKioqKioqKioqLiAiLAorIiAgICAuKiomJiYmJiYmJiYmJiYmJiQuQEBAQEAjLioqJiYmJiYmJiYmJiYmJiYkLiIsCisiICAgIC4qJiYmJiYmJiYmJiYmJiYmJC5AQEBAQEAuKiYmJiYmJiYmJiYmJiYmJiQuIiwKKyIgICAgLiokJiYmJiYmJiYmJiYmJiYkLkBAQEBAQC4qJCYmJiYmJiYmJiYmJiYmJC4iLAorIiAgICAgLiQkJCYmJiYmJiYmJiQkJC5AQEBAQEBAQC4kJCQmJiYmJiYmJiYmJiQkLiIsCisiICAgICAgLi4qJiYmJiYmJiYmJCQuQEBAQEBAQEBAQC4uKiYmJiYmJiYmJiYkJC4gIiwKKyIgICAgICAgLiomJiYmJiYmJiYkJC5AQEBAQEBAQEBALioqJiYmJiYmJiYmJCQuICAiLAorIiAgICAgICAuKiYmJiYmJiYmJiQkLkBAQEBAQEBAQC4qKiYmJiYmJiYmJiQkLiAgICIsCisiICAgICAgIC4qJiYmJiYmJiYmJCQuQEBAQEBAQEAuKiomJiYmJiYmJiYkJC4gICAgIiwKKyIgICAgICAgLiomJiYmJiYmJiYkJC5AQEBAQEBALioqJiYmJiYmJiYmJCQuICAgICAiLAorIiAgICAgICAuKiYmJiYmJiYmJiQkLkBAQEBAQC4qKiYmJiYmJiYmJiQkLiAgICAgICIsCisiICAgICAgIC4qJiYmJiYmJiYmJCQuQEBAQEAuKiomJiYmJiYmJiYkJC4gICAgICAgIiwKKyIgICAgICAgLiomJiYmJiYmJiYkJC5AQEBALioqJiYmJiYmJiYmJCQuLiAgICAgICAiLAorIiAgICAgIC4uKiYmJiYmJiYmJiQkLkBAQC4qKiYmJiYmJiYmJiQkLkAjLiAgICAgICIsCisiICAgICAuIy4qJiYmJiYmJiYmJCQuQEAuKiomJiYmJiYmJiYkJC5AQEAjLiAgICAgIiwKKyIgICAgLiNALiomJiYmJiYmJiYkJC5ALioqJiYmJiYmJiYmJCQuQEBAQEAjLiAgICAiLAorIiAgIC4jQEAuKiYmJiYmJiYmJiQkLi4qKiYmJiYmJiYmJiQkLkBAQEBAQEAjLiAgICIsCisiICAuI0BAQC4qJiYmJiYmJiYmJCQuKiomJiYmJiYmJiYkJC5AQEBAQEBAQEAjLiAgIiwKKyIgLiNAQEBALiomJiYmJiYmJiYkJCoqJiYmJiYmJiYmJCQuQEBAQEBAQEBAQEAjLiAiLAorIi4jK0BAQEAuKiYmJiYmJiYmJiQkKiYmJiYmJiYmJiQkLkBAQEBAQEBAQEBAQEAjLiIsCisiIC4rK0BAQC4qJiYmJiYmJiYmJComJiYmJiYmJiYkJC5AQEBAQEBAQEBAQEBAKysuIiwKKyIgIC4rK0BALiomJiYmJiYmJiYkJiYmJiYmJiYmJCQuQEBAQEBAQEBAQEBAQCsrLiAiLAorIiAgIC4rK0AuKiYmJiYmJiYmJiYmJiYmJiYmJiQkLkBAQEBAQEBAQEBAQEArKy4gICIsCisiICAgIC4rKy4qJiYmJiYmJiYmJiYmJiYmJi4uLi5AQEBAQEBAQEBAQEBAKysuICAgIiwKKyIgICAgIC4rLiomJiYmJiYmJiYmJiYmJiYuJiYmLkBAQEBAQEBAQEBAQCsrKyAgICAiLAorIiAgICAgIC4uKiYmJiYmJiYmJiYmJiYmJi4mJiYuQEBAQEBAQEBAQEArKy4gICAgICIsCisiICAgICAgIC4qJiYmJiYmJiYmJiYmJiYmLiYmJi5AQEBAQEBAQEBAKysuICAgICAgIiwKKyIgICAgICAgLiomJiYmJiYmJiYmJiYmJiQkLi4uQEBAQEBAQEBAQCsrLiAgICAgICAiLAorIiAgICAgICAuKiYmJiYmJiYmJiYmJiYkJC4uLkBALi4uLkBALi4uLisuLi4uICAgICIsCisiICAgICAgIC4qJiYmJiYmJiYmJiYmJCQuLiYmLi4mJiYmLi4mJiYmLi4mJiYuICAgIiwKKyIgICAgICAgLiomJiYmJiYmJiYmJiQkLi4mJiYuQC4mJiYmJiYmJiYmJiYmJiYuICAiLAorIiAgICAgICAuKiYmJiYmJiYmJiYkJC5ALiYmJi5ALiYmJiYmJiYmJiYmJiYmJi4gICIsCisiICAgICAgIC4qJiYmJiYmJiYmJCQuQEAuJiYuQEAuJiYuLi4uJiYuLi4uJiYuICAgIiwKKyIgICAgICAgLiomJiYmJiYmJiQkLkBALiYmJi5ALiYmJi4rLiYmJi4gLiYmJi4gICAiLAorIiAgICAgICAuKiYmJiYmJiYkJC5AQEAuJiYuQEAuJiYuKysuJiYuICAuJiYuICAgICIsCisiICAgICAgIC4qJiYmJiYmJCQuQEBALiYmJi5ALiYmJi4rLiYmJi4gLiYmJi4gICAgIiwKKyIgICAgICAgLiomJiYmJiQkLisrQEAuJiYuQEAuJiYuLiAuJiYuICAuJiYuICAgICAiLAorIiAgICAgICAuKiYmJiYkJC4gLisrLiYmJi5ALiYmJi4gLiYmJi4gLiYmJi4gICAgICIsCisiICAgICAgICAuJCQkJCQuICAgLisuJiYmJi4uJiYmJi4uJiYmJi4uJiYmJi4gICAgIiwKKyIgICAgICAgICAuLi4uLiAgICAgLisuLi4uQCsuLi4uICAuLi4uICAuLi4uICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgLisrQEArKy4gICAgICAgICAgICAgICAgICAgICIsCisiICAgICAgICAgICAgICAgICAgICAgLisrKysuICAgICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAgICAgLisrLiAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgLi4gICAgICAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvcnVudGltZS92aW1sb2dvLmVwcyBiL3J1bnRpbWUvdmltbG9nby5lcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmNDVmZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdmltbG9nby5lcHMKQEAgLTAsMCArMSw3OTEgQEAKKyUhUFMtQWRvYmUtMy4wIEVQU0YtMy4wDQorJSVCb3VuZGluZ0JveDogMTQ3IDc0IDQyOSAzNTYgDQorJSVMYW5ndWFnZUxldmVsOiAxDQorJSVDcmVhdG9yOiBDb3JlbERSQVcgMTENCislJVRpdGxlOiB2aW1sb2dvLmVwcw0KKyUlQ3JlYXRpb25EYXRlOiBNb24gRmViIDAyIDE0OjM1OjE2IDIwMDQNCislJURvY3VtZW50UHJvY2Vzc0NvbG9yczogQ3lhbiBZZWxsb3cgQmxhY2sgDQorJSVEb2N1bWVudFN1cHBsaWVkUmVzb3VyY2VzOiAoYXRlbmQpDQorJSVFbmRDb21tZW50cw0KKyUlQmVnaW5Qcm9sb2cNCisvQXV0b0ZsYXRuZXNzIGZhbHNlIGRlZg0KKy9BdXRvU3RlcHMgMCBkZWYNCisvQ01ZS01hcmtzIHRydWUgZGVmDQorL1VzZUxldmVsIDEgZGVmDQorJUJ1aWxkOiBDb3JlbERSQVcgMTEgVmVyc2lvbiAxMS42MzMNCislQ29sb3IgcHJvZmlsZTogIEdlbmVyaWMgb2Zmc2V0IHNlcGFyYXRpb25zIHByb2ZpbGUNCisvQ29yZWxJc0VQUyB0cnVlIGRlZg0KKyUlQmVnaW5SZXNvdXJjZTogcHJvY3NldCB3Q29yZWwxMURpY3QgMTEuMCAwDQorL3dDb3JlbDExRGljdCAzMDAgZGljdCBkZWYgd0NvcmVsMTFEaWN0IGJlZ2luCislIENvcHlyaWdodCAoYykxOTkyLTIwMDIgQ29yZWwgQ29ycG9yYXRpb24NCislIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICB2MTEuMCByMC4wDQorL2Jke2JpbmQgZGVmfWJpbmQgZGVmL2xke2xvYWQgZGVmfWJkL3hke2V4Y2ggZGVmfWJkL18gbnVsbCBkZWYvcnB7e3BvcH1yZXBlYXR9DQorYmQvQGNwL2Nsb3NlcGF0aCBsZC9AZ3MvZ3NhdmUgbGQvQGdyL2dyZXN0b3JlIGxkL0BucC9uZXdwYXRoIGxkL1RsL3RyYW5zbGF0ZSBsZA0KKy8kc3YgMCBkZWYvQHN2ey8kc3Ygc2F2ZSBkZWZ9YmQvQHJzeyRzdiByZXN0b3JlfWJkL3NwZy9zaG93cGFnZSBsZC9zaG93cGFnZXt9DQorYmQgY3VycmVudHNjcmVlbi9AZHNwIHhkLyRkc3AvQGRzcCBkZWYvJGRzYSB4ZC8kZHNmIHhkLyRzZGYgZmFsc2UgZGVmLyRTREYNCitmYWxzZSBkZWYvJFNjcmEgMCBkZWYvU2V0U2NyL3NldHNjcmVlbiBsZC9Ac3N7MiBpbmRleCAwIGVxeyRkc2YgMyAxIHJvbGwgNCAtMQ0KK3JvbGwgcG9wfWlmIGV4Y2ggJFNjcmEgYWRkIGV4Y2ggbG9hZCBTZXRTY3J9YmQvU2VwTW9kZV81IHdoZXJle3BvcH17L1NlcE1vZGVfNQ0KKzAgZGVmfWlmZWxzZS9Db3JlbElzU2VwcyB3aGVyZXtwb3B9ey9Db3JlbElzU2VwcyBmYWxzZSBkZWZ9aWZlbHNlDQorL0NvcmVsSXNJblJJUFNlcHMgd2hlcmV7cG9wfXsvQ29yZWxJc0luUklQU2VwcyBmYWxzZSBkZWZ9aWZlbHNlL0NvcmVsSXNFUFMNCit3aGVyZXtwb3B9ey9Db3JlbElzRVBTIGZhbHNlIGRlZn1pZmVsc2UvQ3VycmVudElua05hbWVfNSB3aGVyZXtwb3B9DQorey9DdXJyZW50SW5rTmFtZV81KENvbXBvc2l0ZSlkZWZ9aWZlbHNlLyRpbmtfNSB3aGVyZXtwb3B9ey8kaW5rXzUgLTEgZGVmfQ0KK2lmZWxzZS8kYyAwIGRlZi8kbSAwIGRlZi8keSAwIGRlZi8kayAwIGRlZi8kdCAxIGRlZi8kbiBfIGRlZi8kbyAwIGRlZi8kZmlsIDANCitkZWYvJEMgMCBkZWYvJE0gMCBkZWYvJFkgMCBkZWYvJEsgMCBkZWYvJFQgMSBkZWYvJE4gXyBkZWYvJE8gMCBkZWYvJFBGIGZhbHNlDQorZGVmL3MxYyAwIGRlZi9zMW0gMCBkZWYvczF5IDAgZGVmL3MxayAwIGRlZi9zMXQgMCBkZWYvczFuIF8gZGVmLyRia2cgZmFsc2UgZGVmDQorL1NLIDAgZGVmL1NNIDAgZGVmL1NZIDAgZGVmL1NDIDAgZGVmLyRvcCBmYWxzZSBkZWYgbWF0cml4IGN1cnJlbnRtYXRyaXgvJGN0bSB4ZA0KKy8kcHRtIG1hdHJpeCBkZWYvJHR0bSBtYXRyaXggZGVmLyRzdG0gbWF0cml4IGRlZi8kZmZwbnQgdHJ1ZSBkZWYNCisvQ29yZWxEcmF3UmVlbmNvZGVWZWN0WzE2IzAvZ3JhdmUgMTYjNS9icmV2ZSAxNiM2L2RvdGFjY2VudCAxNiM4L3JpbmcNCisxNiNBL2h1bmdhcnVtbGF1dCAxNiNCL29nb25layAxNiNDL2Nhcm9uIDE2I0QvZG90bGVzc2kgMTYjMjcvcXVvdGVzaW5nbGUNCisxNiM2MC9ncmF2ZSAxNiM3Qy9iYXINCisxNiM4Mi9xdW90ZXNpbmdsYmFzZS9mbG9yaW4vcXVvdGVkYmxiYXNlL2VsbGlwc2lzL2RhZ2dlci9kYWdnZXJkYmwNCisxNiM4OC9jaXJjdW1mbGV4L3BlcnRob3VzYW5kL1NjYXJvbi9ndWlsc2luZ2xsZWZ0L09FDQorMTYjOTEvcXVvdGVsZWZ0L3F1b3RlcmlnaHQvcXVvdGVkYmxsZWZ0L3F1b3RlZGJscmlnaHQvYnVsbGV0L2VuZGFzaC9lbWRhc2gNCisxNiM5OC90aWxkZS90cmFkZW1hcmsvc2Nhcm9uL2d1aWxzaW5nbHJpZ2h0L29lIDE2IzlGL1lkaWVyZXNpcw0KKzE2I0ExL2V4Y2xhbWRvd24vY2VudC9zdGVybGluZy9jdXJyZW5jeS95ZW4vYnJva2VuYmFyL3NlY3Rpb24NCisxNiNhOC9kaWVyZXNpcy9jb3B5cmlnaHQvb3JkZmVtaW5pbmUvZ3VpbGxlbW90bGVmdC9sb2dpY2Fsbm90L21pbnVzL3JlZ2lzdGVyZWQvbWFjcm9uDQorMTYjYjAvZGVncmVlL3BsdXNtaW51cy90d29zdXBlcmlvci90aHJlZXN1cGVyaW9yL2FjdXRlL211L3BhcmFncmFwaC9wZXJpb2RjZW50ZXJlZA0KKzE2I2I4L2NlZGlsbGEvb25lc3VwZXJpb3Ivb3JkbWFzY3VsaW5lL2d1aWxsZW1vdHJpZ2h0L29uZXF1YXJ0ZXIvb25laGFsZi90aHJlZXF1YXJ0ZXJzL3F1ZXN0aW9uZG93bg0KKzE2I2MwL0FncmF2ZS9BYWN1dGUvQWNpcmN1bWZsZXgvQXRpbGRlL0FkaWVyZXNpcy9BcmluZy9BRS9DY2VkaWxsYQ0KKzE2I2M4L0VncmF2ZS9FYWN1dGUvRWNpcmN1bWZsZXgvRWRpZXJlc2lzL0lncmF2ZS9JYWN1dGUvSWNpcmN1bWZsZXgvSWRpZXJlc2lzDQorMTYjZDAvRXRoL050aWxkZS9PZ3JhdmUvT2FjdXRlL09jaXJjdW1mbGV4L090aWxkZS9PZGllcmVzaXMvbXVsdGlwbHkNCisxNiNkOC9Pc2xhc2gvVWdyYXZlL1VhY3V0ZS9VY2lyY3VtZmxleC9VZGllcmVzaXMvWWFjdXRlL1Rob3JuL2dlcm1hbmRibHMNCisxNiNlMC9hZ3JhdmUvYWFjdXRlL2FjaXJjdW1mbGV4L2F0aWxkZS9hZGllcmVzaXMvYXJpbmcvYWUvY2NlZGlsbGENCisxNiNlOC9lZ3JhdmUvZWFjdXRlL2VjaXJjdW1mbGV4L2VkaWVyZXNpcy9pZ3JhdmUvaWFjdXRlL2ljaXJjdW1mbGV4L2lkaWVyZXNpcw0KKzE2I2YwL2V0aC9udGlsZGUvb2dyYXZlL29hY3V0ZS9vY2lyY3VtZmxleC9vdGlsZGUvb2RpZXJlc2lzL2RpdmlkZQ0KKzE2I2Y4L29zbGFzaC91Z3JhdmUvdWFjdXRlL3VjaXJjdW1mbGV4L3VkaWVyZXNpcy95YWN1dGUvdGhvcm4veWRpZXJlc2lzXWRlZg0KKy9MMj8vbGFuZ3VhZ2VsZXZlbCB3aGVyZXtwb3AgbGFuZ3VhZ2VsZXZlbCAyIGdlfXtmYWxzZX1pZmVsc2UgZGVmL0NvbXA/ew0KKy9MdW1TZXBzRGljdCB3aGVyZXtwb3AgZmFsc2V9ey9BbGR1c1NlcHNEaWN0IHdoZXJle3BvcCBmYWxzZX17MSAwIDAgMCBAZ3MNCitzZXRjbXlrY29sb3IgY3VycmVudGNteWtjb2xvciBAZ3IgYWRkIGFkZCBhZGQgMCBuZSAwIDEgMCAwIEBncyBzZXRjbXlrY29sb3INCitjdXJyZW50Y215a2NvbG9yIEBnciBhZGQgYWRkIGFkZCAwIG5lIDAgMCAxIDAgQGdzIHNldGNteWtjb2xvciBjdXJyZW50Y215a2NvbG9yDQorQGdyIGFkZCBhZGQgYWRkIDAgbmUgMCAwIDAgMSBAZ3Mgc2V0Y215a2NvbG9yIGN1cnJlbnRjbXlrY29sb3IgQGdyIGFkZCBhZGQgYWRkDQorMCBuZSBhbmQgYW5kIGFuZH1pZmVsc2V9aWZlbHNlfWJkL0BQTHsvTFYgd2hlcmV7cG9wIExWIDIgZ2UgTDI/IG5vdCBhbmR7QG5wDQorL0NvdXJpZXIgZmluZGZvbnQgMTIgc2NhbGVmb250IHNldGZvbnQgNzIgMTQ0IG0NCisoVGhlIFBvc3RTY3JpcHQgbGV2ZWwgc2V0IGluIHRoZSBDb3JlbCBhcHBsaWNhdGlvbiBpcyBoaWdoZXIgdGhhbilzaG93IDcyIDEzMiBtDQorKHRoZSBQb3N0U2NyaXB0IGxldmVsIG9mIHRoaXMgZGV2aWNlLiBDaGFuZ2UgdGhlIFBTIExldmVsIGluIHRoZSBDb3JlbClzaG93IDcyDQorMTIwIG0oYXBwbGljYXRpb24gdG8gTGV2ZWwgMSBieSBzZWxlY3RpbmcgdGhlIFBvc3RTY3JpcHQgdGFiIGluIHRoZSBwcmludClzaG93DQorNzIgMTA4IG0oZGlhbG9nLCBhbmQgc2VsZWN0aW5nIExldmVsIDEgZnJvbSB0aGUgQ29tcGF0aWJpbGl0eSBkcm9wIGRvd24gbGlzdC4pDQorc2hvdyBmbHVzaCBzcGcgcXVpdH1pZn1pZn1iZC9AQmVnaW5TeXNDb3JlbERpY3R7c3lzdGVtZGljdC9Db3JlbDMwRGljdCBrbm93bg0KK3tzeXN0ZW1kaWN0L0NvcmVsMzBEaWN0IGdldCBleGVjfWlmIHN5c3RlbWRpY3QvQ29yZWxMZXhEaWN0IGtub3duezEgc3lzdGVtZGljdA0KKy9Db3JlbExleERpY3QgZ2V0IGV4ZWN9aWZ9YmQvQEVuZFN5c0NvcmVsRGljdHtzeXN0ZW1kaWN0L0NvcmVsMzBEaWN0IGtub3duDQore2VuZH1pZi9FbmRDb3JlbExleERpY3Qgd2hlcmV7cG9wIEVuZENvcmVsTGV4RGljdH1pZn1iZCBBdXRvRmxhdG5lc3N7L0BpZmx7ZHVwDQorY3VycmVudGZsYXQgZXhjaCBzdWIgMTAgZ3R7DQorKFtFcnJvcjogUGF0aFRvb0NvbXBsZXg7IE9mZmVuZGluZ0NvbW1hbmQ6IEFueVBhaW50aW5nT3BlcmF0b3JdXG4pcHJpbnQgZmx1c2gNCitAbnAgZXhpdH17Y3VycmVudGZsYXQgMiBhZGQgc2V0ZmxhdH1pZmVsc2V9YmQvQGZpbGwvZmlsbCBsZC9maWxse2N1cnJlbnRmbGF0ew0KK3tAZmlsbH1zdG9wcGVke0BpZmx9e2V4aXR9aWZlbHNlfWJpbmQgbG9vcCBzZXRmbGF0fWJkL0Blb2ZpbGwvZW9maWxsIGxkL2VvZmlsbA0KK3tjdXJyZW50ZmxhdHt7QGVvZmlsbH1zdG9wcGVke0BpZmx9e2V4aXR9aWZlbHNlfWJpbmQgbG9vcCBzZXRmbGF0fWJkL0BjbGlwDQorL2NsaXAgbGQvY2xpcHtjdXJyZW50ZmxhdHt7QGNsaXB9c3RvcHBlZHtAaWZsfXtleGl0fWlmZWxzZX1iaW5kIGxvb3Agc2V0ZmxhdH0NCitiZC9AZW9jbGlwL2VvY2xpcCBsZC9lb2NsaXB7Y3VycmVudGZsYXR7e0Blb2NsaXB9c3RvcHBlZHtAaWZsfXtleGl0fWlmZWxzZX0NCitiaW5kIGxvb3Agc2V0ZmxhdH1iZC9Ac3Ryb2tlL3N0cm9rZSBsZC9zdHJva2V7Y3VycmVudGZsYXR7e0BzdHJva2V9c3RvcHBlZA0KK3tAaWZsfXtleGl0fWlmZWxzZX1iaW5kIGxvb3Agc2V0ZmxhdH1iZH1pZiBMMj97L0Bzc2F7dHJ1ZSBzZXRzdHJva2VhZGp1c3R9YmR9ew0KKy9Ac3Nhe31iZH1pZmVsc2UvZC9zZXRkYXNoIGxkL2ovc2V0bGluZWpvaW4gbGQvSi9zZXRsaW5lY2FwIGxkL00vc2V0bWl0ZXJsaW1pdA0KK2xkL3cvc2V0bGluZXdpZHRoIGxkL097LyRvIHhkfWJkL1J7LyRPIHhkfWJkL1cvZW9jbGlwIGxkL2MvY3VydmV0byBsZC9DL2MgbGQvbA0KKy9saW5ldG8gbGQvTC9sIGxkL3JsL3JsaW5ldG8gbGQvbS9tb3ZldG8gbGQvbi9uZXdwYXRoIGxkL04vbmV3cGF0aCBsZC9QezExIHJwfQ0KK2JkL3V7fWJkL1V7fWJkL0F7cG9wfWJkL3EvQGdzIGxkL1EvQGdyIGxkLyZ7fWJkL0Bqe0BzdiBAbnB9YmQvQEp7QHJzfWJkL2d7MQ0KK2V4Y2ggc3ViLyRrIHhkLyRjIDAgZGVmLyRtIDAgZGVmLyR5IDAgZGVmLyR0IDEgZGVmLyRuIF8gZGVmLyRmaWwgMCBkZWZ9YmQvR3sxDQorc3ViIG5lZy8kSyB4ZCBfIDEgMCAwIDAvJEMgeGQvJE0geGQvJFkgeGQvJFQgeGQvJE4geGR9YmQva3sxIGluZGV4IHR5cGUNCisvc3RyaW5ndHlwZSBlcXsvJHQgeGQvJG4geGR9ey8kdCAwIGRlZi8kbiBfIGRlZn1pZmVsc2UvJGsgeGQvJHkgeGQvJG0geGQvJGMgeGQNCisvJGZpbCAwIGRlZn1iZC9LezEgaW5kZXggdHlwZS9zdHJpbmd0eXBlIGVxey8kVCB4ZC8kTiB4ZH17LyRUIDAgZGVmLyROIF8gZGVmfQ0KK2lmZWxzZS8kSyB4ZC8kWSB4ZC8kTSB4ZC8kQyB4ZH1iZC94L2sgbGQvWC9LIGxkL3NmezEgaW5kZXggdHlwZS9zdHJpbmd0eXBlIGVxew0KKy9zMXQgeGQvczFuIHhkfXsvczF0IDAgZGVmL3MxbiBfIGRlZn1pZmVsc2UvczFrIHhkL3MxeSB4ZC9zMW0geGQvczFjIHhkfWJkL2l7DQorZHVwIDAgbmV7c2V0ZmxhdH17cG9wfWlmZWxzZX1iZC92ezQgLTIgcm9sbCAyIGNvcHkgNiAtMiByb2xsIGN9YmQvVi92IGxkL3l7Mg0KK2NvcHkgY31iZC9ZL3kgbGQvQHd7bWF0cml4IHJvdGF0ZS8kcHRtIHhkIG1hdHJpeCBzY2FsZSAkcHRtIGR1cCBjb25jYXRtYXRyaXgNCisvJHB0bSB4ZCAxIGVxeyRwdG0gZXhjaCBkdXAgY29uY2F0bWF0cml4LyRwdG0geGR9aWYgMSB3fWJkL0BnezEgZXEgZHVwLyRzZGYgeGQNCit7LyRzY3AgeGQvJHNjYSB4ZC8kc2NmIHhkfWlmfWJkL0BHezEgZXEgZHVwLyRTREYgeGR7LyRTQ1AgeGQvJFNDQSB4ZC8kU0NGIHhkfQ0KK2lmfWJkL0BEezIgaW5kZXggMCBlcXskZHNmIDMgMSByb2xsIDQgLTEgcm9sbCBwb3B9aWYgMyBjb3B5IGV4Y2ggJFNjcmEgYWRkIGV4Y2gNCitsb2FkIFNldFNjci8kZHNwIHhkLyRkc2EgeGQvJGRzZiB4ZH1iZC8kbmd4eyRTREZ7JFNDRiBTZXBNb2RlXzUgMCBlcXskU0NBfQ0KK3skZHNhfWlmZWxzZSAkU0NQIEBzc31pZn1iZC9ATU57MiBjb3B5IGxle3BvcH17ZXhjaCBwb3B9aWZlbHNlfWJkL0BNWHsyIGNvcHkgZ2UNCit7cG9wfXtleGNoIHBvcH1pZmVsc2V9YmQvSW5SYW5nZXszIC0xIHJvbGwgQE1OIEBNWH1iZC9Ac3Fye2R1cCAwIHJsIGR1cCAwIGV4Y2gNCitybCBuZWcgMCBybCBAY3B9YmQvY3VycmVudHNjYWxlezEgMCBkdHJhbnNmb3JtIG1hdHJpeCBkZWZhdWx0bWF0cml4IGlkdHJhbnNmb3JtDQorZHVwIG11bCBleGNoIGR1cCBtdWwgYWRkIHNxcnQgMCAxIGR0cmFuc2Zvcm0gbWF0cml4IGRlZmF1bHRtYXRyaXggaWR0cmFuc2Zvcm0NCitkdXAgbXVsIGV4Y2ggZHVwIG11bCBhZGQgc3FydH1iZC9AdW5zY2FsZXt9YmQvd0RzdENoY2t7MiAxIHJvbGwgZHVwIDMgLTEgcm9sbA0KK2VxezEgYWRkfWlmfWJkL0Bkb3R7ZHVwIG11bCBleGNoIGR1cCBtdWwgYWRkIDEgZXhjaCBzdWJ9YmQvQGxpbntleGNoIHBvcCBhYnMgMQ0KK2V4Y2ggc3VifWJkL2NteWsycmdiezN7ZHVwIDUgLTEgcm9sbCBhZGQgMSBleGNoIHN1YiBkdXAgMCBsdHtwb3AgMH1pZiBleGNofQ0KK3JlcGVhdCBwb3B9YmQvcmdiMmNteWt7M3sxIGV4Y2ggc3ViIDMgMSByb2xsfXJlcGVhdCAzIGNvcHkgQE1OIEBNTiAze2R1cCA1IC0xDQorcm9sbCBzdWIgbmVnIGV4Y2h9cmVwZWF0fWJkL3JnYjJnezIgaW5kZXggLjI5OSBtdWwgMiBpbmRleCAuNTg3IG11bCBhZGQgMSBpbmRleA0KKy4xMTQgbXVsIGFkZCA0IDEgcm9sbCBwb3AgcG9wIHBvcH1iZC9XYWxkb0NvbG9yXzUgd2hlcmV7cG9wfXsvU2V0UmdiDQorL3NldHJnYmNvbG9yIGxkL0dldFJnYi9jdXJyZW50cmdiY29sb3IgbGQvU2V0R3J5L3NldGdyYXkgbGQvR2V0R3J5L2N1cnJlbnRncmF5DQorbGQvU2V0UmdiMiBzeXN0ZW1kaWN0L3NldHJnYmNvbG9yIGdldCBkZWYvR2V0UmdiMiBzeXN0ZW1kaWN0L2N1cnJlbnRyZ2Jjb2xvcg0KK2dldCBkZWYvU2V0SHNiIHN5c3RlbWRpY3Qvc2V0aHNiY29sb3IgZ2V0IGRlZi9HZXRIc2Igc3lzdGVtZGljdA0KKy9jdXJyZW50aHNiY29sb3IgZ2V0IGRlZi9yZ2IyaHNie1NldFJnYjIgR2V0SHNifWJkL2hzYjJyZ2J7MyAtMSByb2xsIGR1cCBmbG9vcg0KK3N1YiAzIDEgcm9sbCBTZXRIc2IgR2V0UmdiMn1iZC9zZXRjbXlrY29sb3Igd2hlcmV7cG9wL0x1bVNlcHNEaWN0IHdoZXJle3BvcA0KKy9TZXRDbXlrXzV7THVtU2Vwc0RpY3Qvc2V0Y215a2NvbG9yIGdldCBleGVjfWRlZn17L0FsZHVzU2Vwc0RpY3Qgd2hlcmV7cG9wDQorL1NldENteWtfNXtBbGR1c1NlcHNEaWN0L3NldGNteWtjb2xvciBnZXQgZXhlY31kZWZ9ey9TZXRDbXlrXzUvc2V0Y215a2NvbG9yIGxkDQorfWlmZWxzZX1pZmVsc2V9ey9TZXRDbXlrXzV7Y215azJyZ2IgU2V0UmdifWJkfWlmZWxzZS9jdXJyZW50Y215a2NvbG9yIHdoZXJlew0KK3BvcC9HZXRDbXlrL2N1cnJlbnRjbXlrY29sb3IgbGR9ey9HZXRDbXlre0dldFJnYiByZ2IyY215a31iZH1pZmVsc2UNCisvc2V0b3ZlcnByaW50IHdoZXJle3BvcH17L3NldG92ZXJwcmludHsvJG9wIHhkfWJkfWlmZWxzZS9jdXJyZW50b3ZlcnByaW50IHdoZXJlDQore3BvcH17L2N1cnJlbnRvdmVycHJpbnR7JG9wfWJkfWlmZWxzZS9AdGNfNXs1IC0xIHJvbGwgZHVwIDEgZ2V7cG9wfXs0e2R1cCA2IC0xDQorcm9sbCBtdWwgZXhjaH1yZXBlYXQgcG9wfWlmZWxzZX1iZC9AdHJwe2V4Y2ggcG9wIDUgMSByb2xsIEB0Y181fWJkDQorL3NldHByb2Nlc3Njb2xvcl81e1NlcE1vZGVfNSAwIGVxe1NldENteWtfNX17MCA0ICRpbmtfNSBzdWIgaW5kZXggZXhjaCBwb3AgNSAxDQorcm9sbCBwb3AgcG9wIHBvcCBwb3AgU2Vwc0NvbG9yIHRydWUgZXF7JGlua181IDMgZ3R7MSBzdWIgbmVnIFNldEdyeX17MCAwIDAgNA0KKyRpbmtfNSByb2xsIFNldENteWtfNX1pZmVsc2V9ezEgc3ViIG5lZyBTZXRHcnl9aWZlbHNlfWlmZWxzZX1iZA0KKy9maW5kY215a2N1c3RvbWNvbG9yIHdoZXJle3BvcH17L2ZpbmRjbXlrY3VzdG9tY29sb3J7NSBhcnJheSBhc3RvcmV9YmR9aWZlbHNlDQorL0NvcmVsc2V0Y3VzdG9tY29sb3JfZXhpc3RzIGZhbHNlIGRlZi9zZXRjdXN0b21jb2xvciB3aGVyZXtwb3ANCisvQ29yZWxzZXRjdXN0b21jb2xvcl9leGlzdHMgdHJ1ZSBkZWZ9aWYgQ29yZWxJc1NlcHMgdHJ1ZSBlcSBDb3JlbElzSW5SSVBTZXBzDQorZmFsc2UgZXEgYW5key9Db3JlbHNldGN1c3RvbWNvbG9yX2V4aXN0cyBmYWxzZSBkZWZ9aWYNCitDb3JlbHNldGN1c3RvbWNvbG9yX2V4aXN0cyBmYWxzZSBlcXsvc2V0Y3VzdG9tY29sb3J7ZXhjaCBhbG9hZCBwb3AgU2VwTW9kZV81IDANCitlcXtwb3AgQHRjXzUgc2V0cHJvY2Vzc2NvbG9yXzV9e0N1cnJlbnRJbmtOYW1lXzUgZXF7NCBpbmRleH17MH1pZmVsc2UgNiAxIHJvbGwNCis1IHJwIDEgc3ViIG5lZyBTZXRHcnl9aWZlbHNlfWJkfWlmL0BzY2NfNXtkdXAgdHlwZS9ib29sZWFudHlwZSBlcXtkdXANCitjdXJyZW50b3ZlcnByaW50IG5le3NldG92ZXJwcmludH17cG9wfWlmZWxzZX17MSBlcSBzZXRvdmVycHJpbnR9aWZlbHNlIGR1cCBfIGVxDQore3BvcCBzZXRwcm9jZXNzY29sb3JfNSBwb3B9e2ZpbmRjbXlrY3VzdG9tY29sb3IgZXhjaCBzZXRjdXN0b21jb2xvcn1pZmVsc2UNCitTZXBNb2RlXzUgMCBlcXt0cnVlfXtHZXRHcnkgMSBlcSBjdXJyZW50b3ZlcnByaW50IGFuZCBub3R9aWZlbHNlfWJkL2NvbG9yaW1hZ2UNCit3aGVyZXtwb3AvQ29sb3JJbWFnZXtjb2xvcmltYWdlfWRlZn17L0NvbG9ySW1hZ2V7L25jb2xvcnMgeGQvJG11bHRpIHhkICRtdWx0aQ0KK3RydWUgZXF7bmNvbG9ycyAzIGVxey9kYXFCIHhkL2RhcUcgeGQvZGFxUiB4ZCBwb3AgcG9wIGV4Y2ggcG9wIGFic3tkYXFSIHBvcA0KK2RhcUcgcG9wIGRhcUIgcG9wfXJlcGVhdH17L2RhcUsgeGQvZGFxWSB4ZC9kYXFNIHhkL2RhcUMgeGQgcG9wIHBvcCBleGNoIHBvcCBhYnMNCit7ZGFxQyBwb3AgZGFxTSBwb3AgZGFxWSBwb3AgZGFxSyBwb3B9cmVwZWF0fWlmZWxzZX17L2RhdGFhcSB4ZHtkYXRhYXEgbmNvbG9ycw0KK2R1cCAzIGVxey8kZGF0IHhkIDAgMSAkZGF0IGxlbmd0aCAzIGRpdiAxIHN1YntkdXAgMyBtdWwgJGRhdCAxIGluZGV4IGdldCAyNTUNCitkaXYgJGRhdCAyIGluZGV4IDEgYWRkIGdldCAyNTUgZGl2ICRkYXQgMyBpbmRleCAyIGFkZCBnZXQgMjU1IGRpdiByZ2IyZyAyNTUgbXVsDQorY3ZpIGV4Y2ggcG9wICRkYXQgMyAxIHJvbGwgcHV0fWZvciAkZGF0IDAgJGRhdCBsZW5ndGggMyBpZGl2IGdldGludGVydmFsIHBvcH17DQorNCBlcXsvJGRhdCB4ZCAwIDEgJGRhdCBsZW5ndGggNCBkaXYgMSBzdWJ7ZHVwIDQgbXVsICRkYXQgMSBpbmRleCBnZXQgMjU1IGRpdg0KKyRkYXQgMiBpbmRleCAxIGFkZCBnZXQgMjU1IGRpdiAkZGF0IDMgaW5kZXggMiBhZGQgZ2V0IDI1NSBkaXYgJGRhdCA0IGluZGV4IDMNCithZGQgZ2V0IDI1NSBkaXYgY215azJyZ2IgcmdiMmcgMjU1IG11bCBjdmkgZXhjaCBwb3AgJGRhdCAzIDEgcm9sbCBwdXR9Zm9yICRkYXQNCiswICRkYXQgbGVuZ3RoIG5jb2xvcnMgaWRpdiBnZXRpbnRlcnZhbH1pZn1pZmVsc2V9aW1hZ2V9aWZlbHNlfWJkfWlmZWxzZQ0KKy9zZXRjbXlrY29sb3J7MSA1IDEgcm9sbCBfIGN1cnJlbnRvdmVycHJpbnQgQHNjY181LyRmZnBudCB4ZH1iZA0KKy9jdXJyZW50Y215a2NvbG9ye0dldENteWt9YmQvc2V0cmdiY29sb3J7cmdiMmNteWsgc2V0Y215a2NvbG9yfWJkDQorL2N1cnJlbnRyZ2Jjb2xvcntjdXJyZW50Y215a2NvbG9yIGNteWsycmdifWJkL3NldGhzYmNvbG9ye2hzYjJyZ2Igc2V0cmdiY29sb3J9DQorYmQvY3VycmVudGhzYmNvbG9ye2N1cnJlbnRyZ2Jjb2xvciByZ2IyaHNifWJkL3NldGdyYXl7ZHVwIGR1cCBzZXRyZ2Jjb2xvcn1iZA0KKy9jdXJyZW50Z3JheXtjdXJyZW50cmdiY29sb3IgcmdiMmd9YmQvSW5zaWRlRENTIGZhbHNlIGRlZi9JTUFHRS9pbWFnZSBsZC9pbWFnZQ0KK3tJbnNpZGVEQ1N7SU1BR0V9ey9FUFNEaWN0IHdoZXJle3BvcCBTZXBNb2RlXzUgMCBlcXtJTUFHRX17ZHVwIHR5cGUvZGljdHR5cGUgZXENCit7ZHVwL0ltYWdlVHlwZSBnZXQgMSBuZXtJTUFHRX17ZHVwIGR1cC9CaXRzUGVyQ29tcG9uZW50IGdldCA4IGVxIGV4Y2gNCisvQml0c1BlckNvbXBvbmVudCBnZXQgMSBlcSBvciBjdXJyZW50Y29sb3JzcGFjZSAwIGdldC9EZXZpY2VHcmF5IGVxIGFuZHsNCitDdXJyZW50SW5rTmFtZV81KEJsYWNrKWVxe0lNQUdFfXtkdXAvRGF0YVNvdXJjZSBnZXQvVENDIHhkL0hlaWdodCBnZXQgYWJze1RDQw0KK3BvcH1yZXBlYXR9aWZlbHNlfXtJTUFHRX1pZmVsc2V9aWZlbHNlfXsyIGluZGV4IDEgbmV7Q3VycmVudElua05hbWVfNShCbGFjayllcQ0KK3tJTUFHRX17L1RDQyB4ZCBwb3AgcG9wIGV4Y2ggcG9wIGFic3tUQ0MgcG9wfXJlcGVhdH1pZmVsc2V9e0lNQUdFfWlmZWxzZX0NCitpZmVsc2V9aWZlbHNlfXtJTUFHRX1pZmVsc2V9aWZlbHNlfWJkfWlmZWxzZS9XYWxkb0NvbG9yXzUgdHJ1ZSBkZWYvJGZtIDAgZGVmDQorL3dmaWxsezEgJGZtIGVxe2ZpbGx9e2VvZmlsbH1pZmVsc2V9YmQvQFBme0BzdiBTZXBNb2RlXzUgMCBlcSAkUHNjIDAgbmUgb3INCiskaW5rXzUgMyBlcSBvcnswIEogMCBqW10wIGQgJHQgJGMgJG0gJHkgJGsgJG4gJG8gQHNjY181IHBvcCAkY3RtIHNldG1hdHJpeCA3Mg0KKzEwMDAgZGl2IGR1cCBtYXRyaXggc2NhbGUgZHVwIGNvbmNhdCBkdXAgQmJ1cnggZXhjaCBCYnVyeSBleGNoIGl0cmFuc2Zvcm0NCitjZWlsaW5nIGN2aS9CYnVyeSB4ZCBjZWlsaW5nIGN2aS9CYnVyeCB4ZCBCYmxseCBleGNoIEJibGx5IGV4Y2ggaXRyYW5zZm9ybQ0KK2Zsb29yIGN2aS9CYmxseSB4ZCBmbG9vciBjdmkvQmJsbHggeGQgJFBybSBhbG9hZCBwb3AgJFBzbiBsb2FkIGV4ZWN9ezEgU2V0R3J5DQord2ZpbGx9aWZlbHNlIEBycyBAbnB9YmQvRnttYXRyaXggY3VycmVudG1hdHJpeCAkc2RmeyRzY2YgJHNjYSAkc2NwIEBzc31pZiAkZmlsDQorMSBlcXtDb3JlbFB0cm5Eb0ZpbGx9eyRmaWwgMiBlcXtAZmZ9eyRmaWwgMyBlcXtAUGZ9eyRmaWwgNCBlcQ0KK3tDb3JlbFNoZmlsbERvRmlsbH17JHQgJGMgJG0gJHkgJGsgJG4gJG8gQHNjY181e3dmaWxsfXtAbnB9aWZlbHNlfWlmZWxzZX0NCitpZmVsc2V9aWZlbHNlfWlmZWxzZSAkc2RmeyRkc2YgJGRzYSAkZHNwIEBzc31pZiBzZXRtYXRyaXh9YmQvZntAY3AgRn1iZC9Tew0KK21hdHJpeCBjdXJyZW50bWF0cml4ICRjdG0gc2V0bWF0cml4ICRTREZ7JFNDRiAkU0NBICRTQ1AgQHNzfWlmICRUICRDICRNICRZICRLDQorJE4gJE8gQHNjY181e21hdHJpeCBjdXJyZW50bWF0cml4ICRwdG0gY29uY2F0IHN0cm9rZSBzZXRtYXRyaXh9e0BucH1pZmVsc2UgJFNERg0KK3skZHNmICRkc2EgJGRzcCBAc3N9aWYgc2V0bWF0cml4fWJkL3N7QGNwIFN9YmQvQntAZ3MgRiBAZ3IgU31iZC9ie0BjcCBCfWJkL19Few0KKzUgYXJyYXkgYXN0b3JlIGV4Y2ggY3ZsaXQgeGR9YmQvQGNje2N1cnJlbnRmaWxlICRkYXQgcmVhZGhleHN0cmluZyBwb3B9YmQvQHNtew0KKy8kY3RtICRjdG0gY3VycmVudG1hdHJpeCBkZWZ9YmQvQEV7L0JidXJ5IHhkL0JidXJ4IHhkL0JibGx5IHhkL0JibGx4IHhkfWJkL0Bjew0KK0BjcH1iZC9AUHsvJGZpbCAzIGRlZi8kUHNuIHhkLyRQc2MgeGQgYXJyYXkgYXN0b3JlLyRQcm0geGR9YmQvdGNje0BjY31kZWYvQEJ7DQorQGdzIFMgQGdyIEZ9YmQvQGJ7QGNwIEBCfWJkL0BzZXB7Q3VycmVudElua05hbWVfNShDb21wb3NpdGUpZXF7LyRpbmtfNSAtMSBkZWZ9DQore0N1cnJlbnRJbmtOYW1lXzUoQ3lhbillcXsvJGlua181IDAgZGVmfXtDdXJyZW50SW5rTmFtZV81KE1hZ2VudGEpZXF7LyRpbmtfNSAxDQorZGVmfXtDdXJyZW50SW5rTmFtZV81KFllbGxvdyllcXsvJGlua181IDIgZGVmfXtDdXJyZW50SW5rTmFtZV81KEJsYWNrKWVxDQorey8kaW5rXzUgMyBkZWZ9ey8kaW5rXzUgNCBkZWZ9aWZlbHNlfWlmZWxzZX1pZmVsc2V9aWZlbHNlfWlmZWxzZX1iZC9Ad2hpe0Bncw0KKy03MjAwMCBkdXAgbSAtNzIwMDAgNzIwMDAgbCA3MjAwMCBkdXAgbCA3MjAwMCAtNzIwMDAgbCBAY3AgMSBTZXRHcnkgZmlsbCBAZ3J9DQorYmQvQG5lZ3tbezEgZXhjaCBzdWJ9L2V4ZWMgY3Z4IGN1cnJlbnR0cmFuc2Zlci9leGVjIGN2eF1jdnggc2V0dHJhbnNmZXIgQHdoaX0NCitiZC9kZWZsZXZlbCAwIGRlZi9Ac2F4ey9kZWZsZXZlbCBkZWZsZXZlbCAxIGFkZCBkZWZ9YmQvQGVheHsvZGVmbGV2ZWwgZGVmbGV2ZWwNCitkdXAgMCBndHsxIHN1Yn1pZiBkZWYgZGVmbGV2ZWwgMCBndHsvZWF4IGxvYWR9e2VheH1pZmVsc2V9YmQvZWF4e3tleGVjfWZvcmFsbH0NCitiZC9AcmF4e2RlZmxldmVsIDAgZXF7QHJzIEBzdn1pZn1iZCBzeXN0ZW1kaWN0L3BkZm1hcmsga25vd24gbm90ey9wZGZtYXJrDQorL2NsZWFydG9tYXJrIGxkfWlmL3djbGlwezEgJGZtIGVxe2NsaXB9e2VvY2xpcH1pZmVsc2V9YmQNCislIENvcHlyaWdodCAoYykxOTkyLTIwMDIgQ29yZWwgQ29ycG9yYXRpb24NCislIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICB2MTEuMCByMC4wDQorL0BpaXtjb25jYXQgMyBpbmRleCAzIGluZGV4IG0gMyBpbmRleCAxIGluZGV4IGwgMiBjb3B5IGwgMSBpbmRleCAzIGluZGV4IGwgMw0KK2luZGV4IDMgaW5kZXggbCBjbGlwIHBvcCBwb3AgcG9wIHBvcH1iZC9AaXtAc20gQGdzIEBpaSA2IGluZGV4IDEgbmV7LyRmcmcgdHJ1ZQ0KK2RlZiBwb3AgcG9wfXsxIGVxe3MxdCBzMWMgczFtIHMxeSBzMWsgczFuICRPIEBzY2NfNS8kZnJnIHhkfXsvJGZyZyBmYWxzZSBkZWZ9DQoraWZlbHNlIDEgZXF7QGdzICRjdG0gc2V0bWF0cml4IEYgQGdyfWlmfWlmZWxzZSBAbnAvJHVyeSB4ZC8kdXJ4IHhkLyRsbHkgeGQNCisvJGxseCB4ZC8kYnRzIHhkLyRoZWkgeGQvJHdpZCB4ZC8kZGF0ICR3aWQgJGJ0cyBtdWwgOCBkaXYgY2VpbGluZyBjdmkgc3RyaW5nDQorZGVmICRia2cgJGZyZyBvcnskU0RGeyRTQ0YgJFNDQSAkU0NQIEBzc31pZiAkbGx4ICRsbHkgVGwgJHVyeCAkbGx4IHN1YiAkdXJ5DQorJGxseSBzdWIgc2NhbGUgJGJrZ3skdCAkYyAkbSAkeSAkayAkbiAkbyBAc2NjXzUgcG9wfWlmICR3aWQgJGhlaSBhYnMgJGJ0cyAxIGVxDQoreyRia2d9eyRidHN9aWZlbHNlWyR3aWQgMCAwICRoZWkgbmVnIDAgJGhlaSAwIGd0eyRoZWl9ezB9aWZlbHNlXS90Y2MgbG9hZCAkYnRzDQorMSBlcXtpbWFnZW1hc2t9e2ltYWdlfWlmZWxzZSAkU0RGeyRkc2YgJGRzYSAkZHNwIEBzc31pZn17JGhlaSBhYnN7dGNjIHBvcH0NCityZXBlYXR9aWZlbHNlIEBnciAkY3RtIHNldG1hdHJpeH1iZC9ASXtAc20gQGdzIEBpaSBAbnAvJHVyeSB4ZC8kdXJ4IHhkLyRsbHkgeGQNCisvJGxseCB4ZC8kbmNsIHhkLyRidHMgeGQvJGhlaSB4ZC8kd2lkIHhkICRuZ3ggJGxseCAkbGx5IFRsICR1cnggJGxseCBzdWIgJHVyeQ0KKyRsbHkgc3ViIHNjYWxlICR3aWQgJGhlaSBhYnMgJGJ0c1skd2lkIDAgMCAkaGVpIG5lZyAwICRoZWkgMCBndHskaGVpfXswfWlmZWxzZQ0KK10kbXNpbWFnZSBmYWxzZSBlcSAkbmNsIDEgZXEgb3J7LyRkYXQgJHdpZCAkYnRzIG11bCAkbmNsIG11bCA4IGRpdiBjZWlsaW5nIGN2aQ0KK3N0cmluZyBkZWYvQGNjIGxvYWQgZmFsc2UgJG5jbCBDb2xvckltYWdlfXskd2lkICRidHMgbXVsIDggZGl2IGNlaWxpbmcgY3ZpICRuY2wNCiszIGVxe2R1cCBkdXAvJGRhdDEgZXhjaCBzdHJpbmcgZGVmLyRkYXQyIGV4Y2ggc3RyaW5nIGRlZi8kZGF0MyBleGNoIHN0cmluZyBkZWYNCisvQGNjMSBsb2FkL0BjYzIgbG9hZC9AY2MzIGxvYWR9e2R1cCBkdXAgZHVwLyRkYXQxIGV4Y2ggc3RyaW5nIGRlZi8kZGF0MiBleGNoDQorc3RyaW5nIGRlZi8kZGF0MyBleGNoIHN0cmluZyBkZWYvJGRhdDQgZXhjaCBzdHJpbmcgZGVmL0BjYzEgbG9hZC9AY2MyIGxvYWQNCisvQGNjMyBsb2FkL0BjYzQgbG9hZH1pZmVsc2UgdHJ1ZSAkbmNsIENvbG9ySW1hZ2V9aWZlbHNlICRTREZ7JGRzZiAkZHNhICRkc3ANCitAc3N9aWYgQGdyICRjdG0gc2V0bWF0cml4fWJkL0BjYzF7Y3VycmVudGZpbGUgJGRhdDEgcmVhZGhleHN0cmluZyBwb3B9YmQvQGNjMnsNCitjdXJyZW50ZmlsZSAkZGF0MiByZWFkaGV4c3RyaW5nIHBvcH1iZC9AY2Mze2N1cnJlbnRmaWxlICRkYXQzIHJlYWRoZXhzdHJpbmcgcG9wDQorfWJkL0BjYzR7Y3VycmVudGZpbGUgJGRhdDQgcmVhZGhleHN0cmluZyBwb3B9YmQvJG1zaW1hZ2UgZmFsc2UgZGVmL0NPTVAgMCBkZWYNCisvTWFza2VkSW1hZ2UgZmFsc2UgZGVmIEwyP3svQElfMntAc20gQGdzIEBpaSBAbnAvJHVyeSB4ZC8kdXJ4IHhkLyRsbHkgeGQvJGxseA0KK3hkLyRuY2wgeGQvJGJ0cyB4ZC8kaGVpIHhkLyR3aWQgeGQvJGRhdCAkd2lkICRidHMgbXVsICRuY2wgbXVsIDggZGl2IGNlaWxpbmcNCitjdmkgc3RyaW5nIGRlZiAkbmd4ICRuY2wgMSBlcXsvRGV2aWNlR3JheX17JG5jbCAzIGVxey9EZXZpY2VSR0J9ey9EZXZpY2VDTVlLfQ0KK2lmZWxzZX1pZmVsc2Ugc2V0Y29sb3JzcGFjZSAkbGx4ICRsbHkgVGwgJHVyeCAkbGx4IHN1YiAkdXJ5ICRsbHkgc3ViIHNjYWxlIDgNCitkaWN0IGJlZ2luL0ltYWdlVHlwZSAxIGRlZi9XaWR0aCAkd2lkIGRlZi9IZWlnaHQgJGhlaSBhYnMgZGVmL0JpdHNQZXJDb21wb25lbnQNCiskYnRzIGRlZi9EZWNvZGUgJG5jbCAxIGVxe1swIDFdfXskbmNsIDMgZXF7WzAgMSAwIDEgMCAxXX17WzAgMSAwIDEgMCAxIDAgMV19DQoraWZlbHNlfWlmZWxzZSBkZWYvSW1hZ2VNYXRyaXhbJHdpZCAwIDAgJGhlaSBuZWcgMCAkaGVpIDAgZ3R7JGhlaX17MH1pZmVsc2VdZGVmDQorL0RhdGFTb3VyY2UgY3VycmVudGZpbGUvQVNDSUk4NURlY29kZSBmaWx0ZXIgQ09NUCAxIGVxey9EQ1REZWNvZGUgZmlsdGVyfXtDT01QDQorMiBlcXsvUnVuTGVuZ3RoRGVjb2RlIGZpbHRlcn1pZn1pZmVsc2UgZGVmIGN1cnJlbnRkaWN0IGVuZCBpbWFnZSAkU0RGeyRkc2YgJGRzYQ0KKyRkc3AgQHNzfWlmIEBnciAkY3RtIHNldG1hdHJpeH1iZH17L0BJXzJ7fWJkfWlmZWxzZS9ASV8ze0BzbSBAZ3MgQGlpIEBucC8kdXJ5DQoreGQvJHVyeCB4ZC8kbGx5IHhkLyRsbHggeGQvJG5jbCB4ZC8kYnRzIHhkLyRoZWkgeGQvJHdpZCB4ZC8kZGF0ICR3aWQgJGJ0cyBtdWwNCiskbmNsIG11bCA4IGRpdiBjZWlsaW5nIGN2aSBzdHJpbmcgZGVmICRuZ3ggJG5jbCAxIGVxey9EZXZpY2VHcmF5fXskbmNsIDMgZXENCit7L0RldmljZVJHQn17L0RldmljZUNNWUt9aWZlbHNlfWlmZWxzZSBzZXRjb2xvcnNwYWNlICRsbHggJGxseSBUbCAkdXJ4ICRsbHggc3ViDQorJHVyeSAkbGx5IHN1YiBzY2FsZS9JbWFnZURhdGFEaWN0IDggZGljdCBkZWYgSW1hZ2VEYXRhRGljdCBiZWdpbi9JbWFnZVR5cGUgMQ0KK2RlZi9XaWR0aCAkd2lkIGRlZi9IZWlnaHQgJGhlaSBhYnMgZGVmL0JpdHNQZXJDb21wb25lbnQgJGJ0cyBkZWYvRGVjb2RlICRuY2wgMQ0KK2Vxe1swIDFdfXskbmNsIDMgZXF7WzAgMSAwIDEgMCAxXX17WzAgMSAwIDEgMCAxIDAgMV19aWZlbHNlfWlmZWxzZSBkZWYNCisvSW1hZ2VNYXRyaXhbJHdpZCAwIDAgJGhlaSBuZWcgMCAkaGVpIDAgZ3R7JGhlaX17MH1pZmVsc2VdZGVmL0RhdGFTb3VyY2UNCitjdXJyZW50ZmlsZS9BU0NJSTg1RGVjb2RlIGZpbHRlciBDT01QIDEgZXF7L0RDVERlY29kZSBmaWx0ZXJ9e0NPTVAgMiBlcXsNCisvUnVuTGVuZ3RoRGVjb2RlIGZpbHRlcn1pZn1pZmVsc2UgZGVmIGVuZC9NYXNrZWRJbWFnZURpY3QgNyBkaWN0IGRlZg0KK01hc2tlZEltYWdlRGljdCBiZWdpbi9JbWFnZVR5cGUgMyBkZWYvSW50ZXJsZWF2ZVR5cGUgMyBkZWYvTWFza0RpY3QNCitJbWFnZU1hc2tEaWN0IGRlZi9EYXRhRGljdCBJbWFnZURhdGFEaWN0IGRlZiBlbmQgTWFza2VkSW1hZ2VEaWN0IGltYWdlICRTREYNCit7JGRzZiAkZHNhICRkc3AgQHNzfWlmIEBnciAkY3RtIHNldG1hdHJpeH1iZC9AU2V0TWFza3svJG1idHMgeGQvJG1oZWkgeGQvJG13aWQNCit4ZC9JbWFnZU1hc2tEaWN0IDggZGljdCBkZWYgSW1hZ2VNYXNrRGljdCBiZWdpbi9JbWFnZVR5cGUgMSBkZWYvV2lkdGggJG13aWQgZGVmDQorL0hlaWdodCAkbWhlaSBhYnMgZGVmL0JpdHNQZXJDb21wb25lbnQgJG1idHMgZGVmL0RhdGFTb3VyY2UgbWFza3N0cmVhbSBkZWYNCisvSW1hZ2VNYXRyaXhbJG13aWQgMCAwICRtaGVpIG5lZyAwICRtaGVpIDAgZ3R7JG1oZWl9ezB9aWZlbHNlXWRlZi9EZWNvZGVbMSAwXQ0KK2RlZiBlbmR9YmQvQGRhcXtkdXAgdHlwZS9hcnJheXR5cGUgZXF7e31mb3JhbGx9aWZ9YmQvQEJNUHsvQGNjIHhkIFVzZUxldmVsIDMgZXENCitNYXNrZWRJbWFnZSB0cnVlIGVxIGFuZHs3IC0yIHJvbGwgcG9wIHBvcCBASV8zfXsxMiBpbmRleCAxIGd0IFVzZUxldmVsIDIgZXENCitVc2VMZXZlbCAzIGVxIG9yIGFuZHs3IC0yIHJvbGwgcG9wIHBvcCBASV8yfXsxMSBpbmRleCAxIGVxezEyIC0xIHJvbGwgcG9wIEBpfXsNCis3IC0yIHJvbGwgcG9wIHBvcCBASX1pZmVsc2V9aWZlbHNlfWlmZWxzZX1iZA0KKyUgQ29weXJpZ2h0IChjKTE5OTItMjAwMiBDb3JlbCBDb3Jwb3JhdGlvbg0KKyUgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgIHYxMS4wIHIwLjANCisvQHB7LyRmaWwgMSBkZWYgMSBlcSBkdXAvJHZlY3RwYXQgeGR7LyRwZnJnIHRydWUgZGVmfXtAZ3MgJHQgJGMgJG0gJHkgJGsgJG4gJG8NCitAc2NjXzUvJHBmcmcgeGQgQGdyfWlmZWxzZS8kcG0geGQvJHBzeSB4ZC8kcHN4IHhkLyRweWYgeGQvJHB4ZiB4ZC8kcG4geGR9YmQNCisvQ29yZWxQdHJuRG9GaWxse0BncyAkY3RtIHNldG1hdHJpeCAkcG0gY29uY2F0IENvcmVsUHRyblNldEJCb3ggd2NsaXAgQHN2IEJidXJ4DQorQmJ1cnkgJHBtIGl0cmFuc2Zvcm0vJHR1cnkgeGQvJHR1cnggeGQgQmJsbHggQmJsbHkgJHBtIGl0cmFuc2Zvcm0vJHRsbHkgeGQNCisvJHRsbHggeGQgbmV3cGF0aCAkdGxseCAkdGxseSBtICR0bGx4ICR0dXJ5IGwgJHR1cnggJHR1cnkgbCAkdHVyeCAkdGxseSBsICR0bGx4DQorJHRsbHkgbSBAY3AgcGF0aGJib3ggQHJzLyR0dXJ5IHhkLyR0dXJ4IHhkLyR0bGx5IHhkLyR0bGx4IHhkLyR3aWQgJHR1cnggJHRsbHgNCitzdWIgZGVmLyRoZWkgJHR1cnkgJHRsbHkgc3ViIGRlZiBAZ3MgJHZlY3RwYXR7MSAwIDAgMCAwIF8gJG8gQHNjY181e3dmaWxsfWlmfXsNCiskdCAkYyAkbSAkeSAkayAkbiAkbyBAc2NjXzV7U2VwTW9kZV81IDAgZXEgJHBmcmcgb3J7JHRsbHggJHRsbHkgVGwgJHdpZCAkaGVpDQorc2NhbGUgPDAwPiA4IDEgZmFsc2VbOCAwIDAgMSAwIDBde31pbWFnZW1hc2t9ey8kYmtnIHRydWUgZGVmfWlmZWxzZX1pZn1pZmVsc2UNCitAZ3IgJHdpZCAwIGd0ICRoZWkgMCBndCBhbmR7JHBuIGN2bGl0IGxvYWQgYWxvYWQgcG9wLyRwZCB4ZCAzIC0xIHJvbGwgc3ViDQorLyRwaGVpIHhkIGV4Y2ggc3ViLyRwd2lkIHhkICR3aWQgJHB3aWQgZGl2IGNlaWxpbmcgMSBhZGQvJHRseCB4ZCAkaGVpICRwaGVpIGRpdg0KK2NlaWxpbmcgMSBhZGQvJHRseSB4ZCBjdXJyZW50ZGljdC9Db3JlbFB0cm5MMlBhdHRlcm4ga25vd24gJHBzeSAwIGVxIGFuZCAkcHN4IDANCitlcSBhbmR7Q29yZWxQdHJuTDJQYXR0ZXJufXskcHN4IDAgZXF7Q29yZWxQdHJuVGlsZVZlcml0Y2FsfXtDb3JlbFB0cm5UaWxlSG9yaXoNCit9aWZlbHNlfWlmZWxzZX1pZiBAZ3IgQG5wLyRia2cgZmFsc2UgZGVmfWJkL0NvcmVsUHRyblNldEJCb3h7cGF0aGJib3gvJHVyeSB4ZA0KKy8kdXJ4IHhkLyRsbHkgeGQvJGxseCB4ZH1iZC9Db3JlbFB0cm5TZXRGaXJzdFRpbGV7JHRsbHggJHB4ZiBhZGQgZHVwICR0bGx4IGd0DQoreyRwd2lkIHN1Yn1pZi8kdHggeGQgJHR1cnkgJHB5ZiBzdWIgZHVwICR0dXJ5IGx0eyRwaGVpIGFkZH1pZi8kdHkgeGR9YmQvcHsvJHBtDQoreGQgNyBycC8kcHlmIHhkLyRweGYgeGQvJHBuIHhkLyRmaWwgMSBkZWZ9YmQvQ29yZWxQdHJuRHJhd3tAZXB9YmQNCisvQ29yZWxQdHJuUHV0VGlsZXtAc3YvJGluIHRydWUgZGVmIDIgY29weSBkdXAgJGxseSBsZXsvJGluIGZhbHNlIGRlZn1pZiAkcGhlaQ0KK3N1YiAkdXJ5IGdley8kaW4gZmFsc2UgZGVmfWlmIGR1cCAkdXJ4IGdley8kaW4gZmFsc2UgZGVmfWlmICRwd2lkIGFkZCAkbGx4IGxlew0KKy8kaW4gZmFsc2UgZGVmfWlmICRpbntAbnAgMiBjb3B5IG0gJHB3aWQgMCBybCAwICRwaGVpIG5lZyBybCAkcHdpZCBuZWcgMCBybCAwDQorJHBoZWkgcmwgY2xpcCBAbnAgJHBuIGN2bGl0IGxvYWQgYWxvYWQgcG9wIDcgLTEgcm9sbCA1IGluZGV4IHN1YiA3IC0xIHJvbGwgMw0KK2luZGV4IHN1YiBUbCBtYXRyaXggY3VycmVudG1hdHJpeC8kY3RtIHhkIENvcmVsUHRybkRyYXcgcG9wIHBvcCBwb3AgcG9wfXtwb3ANCitwb3B9aWZlbHNlIEByc31iZC9Db3JlbFB0cm5UaWxlSG9yaXp7Q29yZWxQdHJuU2V0Rmlyc3RUaWxlIDAgMSAkdGx5IDEgc3Vie2R1cA0KKyRwc3ggbXVsICR0eCBhZGR7ZHVwICRsbHggZ3R7JHB3aWQgc3VifXtleGl0fWlmZWxzZX1sb29wIGV4Y2ggJHBoZWkgbXVsICR0eQ0KK2V4Y2ggc3ViIDAgMSAkdGx4IDEgc3VieyRwd2lkIG11bCAzIGNvcHkgMyAtMSByb2xsIGFkZCBleGNoIENvcmVsUHRyblB1dFRpbGUNCitwb3B9Zm9yIHBvcCBwb3B9Zm9yfWJkL0NvcmVsUHRyblRpbGVWZXJpdGNhbHtDb3JlbFB0cm5TZXRGaXJzdFRpbGUgMCAxICR0bHggMQ0KK3N1YntkdXAgJHB3aWQgbXVsICR0eCBhZGQgZXhjaCAkcHN5IG11bCAkdHkgZXhjaCBzdWJ7ZHVwICR1cnkgbHR7JHBoZWkgYWRkfQ0KK3tleGl0fWlmZWxzZX1sb29wIDAgMSAkdGx5IDEgc3VieyRwaGVpIG11bCAzIGNvcHkgc3ViIENvcmVsUHRyblB1dFRpbGUgcG9wfWZvcg0KK3BvcCBwb3B9Zm9yfWJkIEwyPyBVc2VMZXZlbCAyIGdlIGFuZHsvQ29yZWxQdHJuTDJQYXR0ZXJue0BzdlskcG4gY3ZsaXQgbG9hZA0KK2Fsb2FkIHBvcCBwb3BdJHB3aWQgJHBoZWkgJHBuIGN2bGl0IGxvYWQgYWxvYWQgcG9wIHBvcCBwb3AgcG9wIHBhdGhiYm94IHBvcCBwb3ANCisyIGluZGV4IHN1YiBleGNoIDMgaW5kZXggc3ViIDQgLTIgcm9sbCBwb3AgcG9wIGV4Y2ggbWF0cml4IGlkZW50bWF0cml4DQordHJhbnNsYXRlL1BhdHRlcm5NYXRyaXggeGQvUGF0dGVybllTdGVwIHhkL1BhdHRlcm5YU3RlcCB4ZC9QYXR0ZXJuQkJveCB4ZA0KK2N1cnJlbnRkaWN0L1BhdHRlcm5NYWluRGljdCB4ZCA8PC9QYWludFR5cGUgMS9QYXR0ZXJuVHlwZSAxL1RpbGluZ1R5cGUgMS9CQm94DQorUGF0dGVybkJCb3gvWFN0ZXAgUGF0dGVyblhTdGVwL1lTdGVwIFBhdHRlcm5ZU3RlcC9QYWludFByb2N7YmVnaW4NCitQYXR0ZXJuTWFpbkRpY3QgYmVnaW4gJGN0bSBjdXJyZW50bWF0cml4IHBvcCAwIENvcmVsUHRybkRyYXcgZW5kIGVuZH1iaW5kID4+DQorUGF0dGVybk1hdHJpeCBtYWtlcGF0dGVybiBzZXRwYXR0ZXJuIGZpbGwgQHJzfWRlZn1pZg0KK2VuZAorJSVFbmRSZXNvdXJjZQ0KKyUlRW5kUHJvbG9nDQorJSVCZWdpblNldHVwDQord0NvcmVsMTFEaWN0IGJlZ2luDQorQEJlZ2luU3lzQ29yZWxEaWN0DQorMi42MTMxIHNldG1pdGVybGltaXQNCisxLjAwIHNldGZsYXQNCisvJGZzdCAxMjggZGVmDQorJSVFbmRTZXR1cA0KKw0KKyUlUGFnZTogMSAxDQorJUxvZ2ljYWxQYWdlOiAxDQorJSVCZWdpblBhZ2VTZXR1cA0KK0Bzdg0KK0BzbQ0KK0Bzdg0KKyUlRW5kUGFnZVNldHVwDQorQHJheCAlTm90ZTogT2JqZWN0DQorMTQ3LjgxNjAwIDc0LjY2NDAwIDQyOC40NzIwMCAzNTUuMzIwMDAgQEUNCisgMCBPIDAgQGcNCiswLjAwIDAuMDAgMC4wMCAxLjAwIGsNCiswIEogMCBqIFtdIDAgZCAwIFIgMCBARw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgSw0KKzAgMC4yMTYwMCAwLjIxNjAwIDAuMDAwMDAgQHcNCisvJGZtIDAgZGVmDQorNDI4LjQ3MjAwIDIxNi40MzIwMCBtDQorMjg2LjcwNDAwIDM1NS4zMjAwMCBMDQorMTQ3LjgxNjAwIDIxMy42MjQwMCBMDQorMjg2LjcwNDAwIDc0LjY2NDAwIEwNCis0MjguNDcyMDAgMjE2LjQzMjAwIEwNCitAYw0KK0INCisNCitAcmF4ICVOb3RlOiBPYmplY3QNCisyODYuNzA0MDAgODAuMzUyMDAgNDIyLjc4NDAwIDIxNi40MzIwMCBARQ0KKyAwIE8gMCBAZw0KKzAuNjAgMC4wMCAwLjQwIDAuNTggaw0KKzAgSiAwIGogW10gMCBkIDAgUiAwIEBHDQorMC4wMCAwLjAwIDAuMDAgMS4wMCBLDQorMCAwLjIxNjAwIDAuMjE2MDAgMC4wMDAwMCBAdw0KKy8kZm0gMCBkZWYNCis0MTQuMjg4MDAgMjE2LjQzMjAwIG0NCis0MjIuNzg0MDAgMjE2LjQzMjAwIEwNCisyODYuNzA0MDAgODAuMzUyMDAgTA0KKzI4Ni43MDQwMCA4OC44NDgwMCBMDQorNDE0LjI4ODAwIDIxNi40MzIwMCBMDQorQGMNCitCDQorDQorQHJheCAlTm90ZTogT2JqZWN0DQorMTUzLjUwNDAwIDgwLjM1MjAwIDI4Ni43MDQwMCAyMTMuNjI0MDAgQEUNCisgMCBPIDAgQGcNCiswLjYwIDAuMDAgMC40MCAwLjUxIGsNCiswIEogMCBqIFtdIDAgZCAwIFIgMCBARw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgSw0KKzAgMC4yMTYwMCAwLjIxNjAwIDAuMDAwMDAgQHcNCisvJGZtIDAgZGVmDQorMTUzLjUwNDAwIDIxMy42MjQwMCBtDQorMTYyLjAwMDAwIDIxMy42MjQwMCBMDQorMjg2LjcwNDAwIDg4Ljg0ODAwIEwNCisyODYuNzA0MDAgODAuMzUyMDAgTA0KKzE1My41MDQwMCAyMTMuNjI0MDAgTA0KK0BjDQorQg0KKw0KK0ByYXggJU5vdGU6IE9iamVjdA0KKzE1My41MDQwMCAyMTMuNjI0MDAgMjg2LjcwNDAwIDM0OS42MzIwMCBARQ0KKyAwIE8gMCBAZw0KKzAuNjAgMC4wMCAwLjQwIDAuMDAgaw0KKzAgSiAwIGogW10gMCBkIDAgUiAwIEBHDQorMC4wMCAwLjAwIDAuMDAgMS4wMCBLDQorMCAwLjIxNjAwIDAuMjE2MDAgMC4wMDAwMCBAdw0KKy8kZm0gMCBkZWYNCisyODYuNzA0MDAgMzQxLjIwODAwIG0NCisyODYuNzA0MDAgMzQ5LjYzMjAwIEwNCisxNTMuNTA0MDAgMjEzLjYyNDAwIEwNCisxNjIuMDAwMDAgMjEzLjYyNDAwIEwNCisyODYuNzA0MDAgMzQxLjIwODAwIEwNCitAYw0KK0INCisNCitAcmF4ICVOb3RlOiBPYmplY3QNCisyODYuNzA0MDAgMjE2LjQzMjAwIDQyMi43ODQwMCAzNDkuNjMyMDAgQEUNCisgMCBPIDAgQGcNCiswLjczIDAuMDAgMC45OSAwLjAwIGsNCiswIEogMCBqIFtdIDAgZCAwIFIgMCBARw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgSw0KKzAgMC4yMTYwMCAwLjIxNjAwIDAuMDAwMDAgQHcNCisvJGZtIDAgZGVmDQorMjg2LjcwNDAwIDM0OS42MzIwMCBtDQorMjg2LjcwNDAwIDM0MS4yMDgwMCBMDQorNDE0LjI4ODAwIDIxNi40MzIwMCBMDQorNDIyLjc4NDAwIDIxNi40MzIwMCBMDQorMjg2LjcwNDAwIDM0OS42MzIwMCBMDQorQGMNCitCDQorDQorQHJheCAlTm90ZTogT2JqZWN0DQorMTYyLjAwMDAwIDg4Ljg0ODAwIDQxNC4yODgwMCAzNDEuMjA4MDAgQEUNCisgMCBPIDAgQGcNCiswLjYwIDAuMDAgMC40MCAwLjQwIGsNCiswIEogMCBqIFtdIDAgZCAwIFIgMCBARw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgSw0KKzAgMC4yMTYwMCAwLjIxNjAwIDAuMDAwMDAgQHcNCisvJGZtIDAgZGVmDQorMjg2LjcwNDAwIDg4Ljg0ODAwIG0NCis0MTQuMjg4MDAgMjE2LjQzMjAwIEwNCisyODYuNzA0MDAgMzQxLjIwODAwIEwNCisxNjIuMDAwMDAgMjEzLjYyNDAwIEwNCisyODYuNzA0MDAgODguODQ4MDAgTA0KK0BjDQorQg0KKw0KK0ByYXggJU5vdGU6IE9iamVjdA0KKzE2NS44MTYwMCAxMDMuMDMyMDAgNDIzLjcyMDAwIDM0NC4wMTYwMCBARQ0KKyAwIE8gMCBAZw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgaw0KKzAgSiAwIGogW10gMCBkIDAgUiAwIEBHDQorMC4wMCAwLjAwIDAuMDAgMS4wMCBLDQorMCAwLjIxNjAwIDAuMjE2MDAgMC4wMDAwMCBAdw0KKy8kZm0gMCBkZWYNCiszMTMuMjAwMDAgMzEyLjg0MDAwIG0NCiszMjEuNjk2MDAgMzA0LjI3MjAwIEwNCiszMjEuNjk2MDAgMzA0LjI3MjAwIEwNCisyNjMuMDg4MDAgMjQ0LjgwMDAwIEwNCisyNjMuMDg4MDAgMzA0LjI3MjAwIEwNCisyNjguNzc2MDAgMzA0LjI3MjAwIEwNCisyNzcuMjcyMDAgMzEyLjg0MDAwIEwNCisyNzcuMjcyMDAgMzM1LjQ0ODAwIEwNCisyNjguNzc2MDAgMzQ0LjAxNjAwIEwNCisxNzQuMzEyMDAgMzQ0LjAxNjAwIEwNCisxNjUuODE2MDAgMzM1LjQ0ODAwIEwNCisxNjUuODE2MDAgMzEyLjg0MDAwIEwNCisxNzQuMzEyMDAgMzA0LjI3MjAwIEwNCisxODAuOTM2MDAgMzA0LjI3MjAwIEwNCisxODAuOTM2MDAgMTExLjUyODAwIEwNCisxOTEuMzA0MDAgMTAzLjAzMjAwIEwNCisyMjAuNjA4MDAgMTAzLjAzMjAwIEwNCis0MjMuNzIwMDAgMzEyLjg0MDAwIEwNCis0MjMuNzIwMDAgMzM1LjQ0ODAwIEwNCis0MTUuMjI0MDAgMzQ0LjAxNjAwIEwNCiszMjIuNjMyMDAgMzQ0LjAxNjAwIEwNCiszMTMuMjAwMDAgMzM1LjQ0ODAwIEwNCiszMTMuMjAwMDAgMzEyLjg0MDAwIEwNCitAYw0KK0INCisNCitAcmF4ICVOb3RlOiBPYmplY3QNCisxNzEuNDMyMDAgMzA5Ljk2MDAwIDI3MS41ODQwMCAzMzguNDAwMDAgQEUNCisgMCBPIDAgQGcNCiswLjAwIDAuMDAgMC4wMCAwLjAwIGsNCiswIEogMCBqIFtdIDAgZCAwIFIgMCBARw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgSw0KKzAgMC4yMTYwMCAwLjIxNjAwIDAuMDAwMDAgQHcNCisvJGZtIDAgZGVmDQorMTc3LjEyMDAwIDMwOS45NjAwMCBtDQorMTcxLjQzMjAwIDMxNS42NDgwMCBMDQorMTcxLjQzMjAwIDMzMi42NDAwMCBMDQorMTc3LjEyMDAwIDMzOC4zMjgwMCBMDQorMjY1Ljk2ODAwIDMzOC40MDAwMCBMDQorMjcxLjU4NDAwIDMzMi42NDAwMCBMDQorMjY1Ljk2ODAwIDMyOS45MDQwMCBMDQorMjYzLjA4ODAwIDMzMi42NDAwMCBMDQorMTc3LjEyMDAwIDMxOC41MjgwMCBMDQorMTc3LjEyMDAwIDMwOS45NjAwMCBMDQorQGMNCitCDQorDQorQHJheCAlTm90ZTogT2JqZWN0DQorMTg3LjQ4ODAwIDEwOC43MjAwMCAxOTQuMTEyMDAgMzE1LjY0ODAwIEBFDQorIDAgTyAwIEBnDQorMC4wMCAwLjAwIDAuMDAgMC4wMCBrDQorMCBKIDAgaiBbXSAwIGQgMCBSIDAgQEcNCiswLjAwIDAuMDAgMC4wMCAxLjAwIEsNCiswIDAuMjE2MDAgMC4yMTYwMCAwLjAwMDAwIEB3DQorLyRmbSAwIGRlZg0KKzE5NC4xMTIwMCAxMDguNzIwMDAgbQ0KKzE4Ny40ODgwMCAxMTQuNDA4MDAgTA0KKzE4Ny40ODgwMCAzMTAuMDMyMDAgTA0KKzE5NC4xMTIwMCAzMTUuNjQ4MDAgTA0KKzE5NC4xMTIwMCAxMDguNzIwMDAgTA0KK0BjDQorQg0KKw0KK0ByYXggJU5vdGU6IE9iamVjdA0KKzI0Ny4wMzIwMCAyMDcuOTM2MDAgMzQxLjU2ODAwIDMxNS42NDgwMCBARQ0KKyAwIE8gMCBAZw0KKzAuMDAgMC4wMCAwLjAwIDAuMDAgaw0KKzAgSiAwIGogW10gMCBkIDAgUiAwIEBHDQorMC4wMCAwLjAwIDAuMDAgMS4wMCBLDQorMCAwLjIxNjAwIDAuMjE2MDAgMC4wMDAwMCBAdw0KKy8kZm0gMCBkZWYNCiszMzUuODgwMDAgMzA5Ljk2MDAwIG0NCiszNDEuNTY4MDAgMzE1LjY0ODAwIEwNCiszNDEuNTY4MDAgMzA0LjI3MjAwIEwNCisyNDcuMDMyMDAgMjA3LjkzNjAwIEwNCisyNTcuNDcyMDAgMjMwLjYxNjAwIEwNCiszMzUuODgwMDAgMzA5Ljk2MDAwIEwNCitAYw0KK0INCisNCitAcmF4ICVOb3RlOiBPYmplY3QNCisxNzcuMTIwMDAgMzA5Ljk2MDAwIDE5Ni4wNTYwMCAzMjEuMzM2MDAgQEUNCisgMCBPIDAgQGcNCiswLjAwIDAuMDAgMC4wMCAwLjUwIGsNCiswIEogMCBqIFtdIDAgZCAwIFIgMCBARw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgSw0KKzAgMC4yMTYwMCAwLjIxNjAwIDAuMDAwMDAgQHcNCisvJGZtIDAgZGVmDQorMTk2LjA1NjAwIDMxOC40NTYwMCBtDQorMTk0LjExMjAwIDMxNS42NDgwMCBMDQorMTg3LjQ4ODAwIDMwOS45NjAwMCBMDQorMTc3LjEyMDAwIDMwOS45NjAwMCBMDQorMTc3LjEyMDAwIDMyMS4zMzYwMCBMDQorMTk2LjA1NjAwIDMxOC40NTYwMCBMDQorQGMNCitCDQorDQorQHJheCAlTm90ZTogT2JqZWN0DQorMjQ3LjAzMjAwIDIwOC4wMDgwMCAyNzEuNTg0MDAgMzMyLjY0MDAwIEBFDQorIDAgTyAwIEBnDQorMC4wMCAwLjAwIDAuMDAgMC41MCBrDQorMCBKIDAgaiBbXSAwIGQgMCBSIDAgQEcNCiswLjAwIDAuMDAgMC4wMCAxLjAwIEsNCiswIDAuMjE2MDAgMC4yMTYwMCAwLjAwMDAwIEB3DQorLyRmbSAwIGRlZg0KKzI1Ny40NzIwMCAzMDkuOTYwMDAgbQ0KKzI1Ny40NzIwMCAyMzAuNjE2MDAgTA0KKzI0Ny4wMzIwMCAyMDguMDA4MDAgTA0KKzI0Ny4wMzIwMCAzMTUuNzIwMDAgTA0KKzI2My4wODgwMCAzMTUuNzIwMDAgTA0KKzI2NS45NjgwMCAzMTguNTI4MDAgTA0KKzI2My4wODgwMCAzMzIuNjQwMDAgTA0KKzI3MS41ODQwMCAzMzIuNjQwMDAgTA0KKzI3MS41ODQwMCAzMTUuNjQ4MDAgTA0KKzI2NS45NjgwMCAzMDkuOTYwMDAgTA0KKzI1Ny40NzIwMCAzMDkuOTYwMDAgTA0KK0BjDQorQg0KKw0KK0ByYXggJU5vdGU6IE9iamVjdA0KKzMxOC44ODgwMCAzMDkuOTYwMDAgNDE4LjEwNDAwIDMzOC4zMjgwMCBARQ0KKyAwIE8gMCBAZw0KKzAuMDAgMC4wMCAwLjAwIDAuMDAgaw0KKzAgSiAwIGogW10gMCBkIDAgUiAwIEBHDQorMC4wMCAwLjAwIDAuMDAgMS4wMCBLDQorMCAwLjIxNjAwIDAuMjE2MDAgMC4wMDAwMCBAdw0KKy8kZm0gMCBkZWYNCiszMjQuNTA0MDAgMzA5Ljk2MDAwIG0NCiszMTguODg4MDAgMzE1LjY0ODAwIEwNCiszMTguODg4MDAgMzMyLjY0MDAwIEwNCiszMjUuNDQwMDAgMzM4LjMyODAwIEwNCis0MTEuNDgwMDAgMzM4LjMyODAwIEwNCis0MTguMTA0MDAgMzMyLjY0MDAwIEwNCis0MDguNjAwMDAgMzI0LjE0NDAwIEwNCiszMjQuNTA0MDAgMzE4LjUyODAwIEwNCiszMjQuNTA0MDAgMzA5Ljk2MDAwIEwNCitAYw0KK0INCisNCitAcmF4ICVOb3RlOiBPYmplY3QNCisxOTQuMTEyMDAgMTA4LjcyMDAwIDQxOC4xMDQwMCAzMzIuNjQwMDAgQEUNCisgMCBPIDAgQGcNCiswLjAwIDAuMDAgMC4wMCAwLjUwIGsNCiswIEogMCBqIFtdIDAgZCAwIFIgMCBARw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgSw0KKzAgMC4yMTYwMCAwLjIxNjAwIDAuMDAwMDAgQHcNCisvJGZtIDAgZGVmDQorNDE4LjEwNDAwIDMxNS42NDgwMCBtDQorMjE4LjY2NDAwIDEwOC43MjAwMCBMDQorMTk0LjExMjAwIDEwOC43MjAwMCBMDQorMTk0LjExMjAwIDExNy4yMTYwMCBMDQorMjEyLjExMjAwIDExNy4yMTYwMCBMDQorNDExLjQ4MDAwIDMyMS4zMzYwMCBMDQorNDA4LjYwMDAwIDMzMi42NDAwMCBMDQorNDE4LjEwNDAwIDMzMi42NDAwMCBMDQorNDE4LjEwNDAwIDMxNS42NDgwMCBMDQorQGMNCitCDQorDQorQHJheCAlTm90ZTogT2JqZWN0DQorMzI0LjUwNDAwIDMwOS45NjAwMCAzNDMuNDQwMDAgMzIxLjMzNjAwIEBFDQorIDAgTyAwIEBnDQorMC4wMCAwLjAwIDAuMDAgMC41MCBrDQorMCBKIDAgaiBbXSAwIGQgMCBSIDAgQEcNCiswLjAwIDAuMDAgMC4wMCAxLjAwIEsNCiswIDAuMjE2MDAgMC4yMTYwMCAwLjAwMDAwIEB3DQorLyRmbSAwIGRlZg0KKzM0My40NDAwMCAzMTguNDU2MDAgbQ0KKzM0MS40OTYwMCAzMTUuNjQ4MDAgTA0KKzMzNS44ODAwMCAzMDkuOTYwMDAgTA0KKzMyNC41MDQwMCAzMDkuOTYwMDAgTA0KKzMyNC41MDQwMCAzMjEuMzM2MDAgTA0KKzM0My40NDAwMCAzMTguNDU2MDAgTA0KK0BjDQorQg0KKw0KK0ByYXggJU5vdGU6IE9iamVjdA0KKzE3Ny4xMjAwMCAxMTQuNDA4MDAgNDEyLjQxNjAwIDMzMi43MTIwMCBARQ0KKyAwIE8gMCBAZw0KKzAuMDAgMC4wMCAwLjAwIDAuMjAgaw0KKzAgSiAwIGogW10gMCBkIDAgUiAwIEBHDQorMC4wMCAwLjAwIDAuMDAgMS4wMCBLDQorMCAwLjIxNjAwIDAuMjE2MDAgMC4wMDAwMCBAdw0KKy8kZm0gMCBkZWYNCisyNDcuMDMyMDAgMjA4LjAwODAwIG0NCisyNDcuMDMyMDAgMzE1LjcyMDAwIEwNCisyNjMuMDg4MDAgMzE1LjcyMDAwIEwNCisyNjUuOTY4MDAgMzE4LjUyODAwIEwNCisyNjUuOTY4MDAgMzI5LjkwNDAwIEwNCisyNjMuMDg4MDAgMzMyLjcxMjAwIEwNCisxNzkuOTI4MDAgMzMyLjcxMjAwIEwNCisxNzcuMTIwMDAgMzI5LjkwNDAwIEwNCisxNzcuMTIwMDAgMzE4LjUyODAwIEwNCisxNzkuOTI4MDAgMzE1LjcyMDAwIEwNCisxOTQuMTEyMDAgMzE1LjcyMDAwIEwNCisxOTQuMTEyMDAgMTE3LjIxNjAwIEwNCisxOTcuNzg0MDAgMTE0LjQwODAwIEwNCisyMTMuOTg0MDAgMTE0LjQwODAwIEwNCis0MTIuNDE2MDAgMzIxLjMzNjAwIEwNCis0MTIuNDE2MDAgMzI5LjQ3MjAwIEwNCis0MDkuNTM2MDAgMzMyLjcxMjAwIEwNCiszMjcuMzg0MDAgMzMyLjcxMjAwIEwNCiszMjQuNTA0MDAgMzI5LjkwNDAwIEwNCiszMjQuNTA0MDAgMzE4LjQ1NjAwIEwNCiszMjcuMzg0MDAgMzE1LjY0ODAwIEwNCiszNDEuNTY4MDAgMzE1LjY0ODAwIEwNCiszNDEuNTY4MDAgMzA0LjI3MjAwIEwNCisyNDcuMDMyMDAgMjA4LjAwODAwIEwNCitAYw0KK0INCisNCitAcmF4ICVOb3RlOiBPYmplY3QNCisyOTIuODk2MDAgMTg1LjE4NDAwIDMyNi45NTIwMCAyMTMuNTUyMDAgQEUNCisgMCBPIDAgQGcNCiswLjAwIDAuMDAgMC4wMCAxLjAwIGsNCiswIEogMCBqIFtdIDAgZCAwIFIgMCBARw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgSw0KKzAgMC4yMTYwMCAwLjIxNjAwIDAuMDAwMDAgQHcNCisvJGZtIDAgZGVmDQorMjk4LjU4NDAwIDIwNy44NjQwMCBtDQorMzA1LjIwODAwIDIxMy41NTIwMCBMDQorMzIyLjIwMDAwIDIxMy41NTIwMCBMDQorMzI2Ljk1MjAwIDIwNy44NjQwMCBMDQorMzIxLjI2NDAwIDE5MC44NzIwMCBMDQorMzE0LjcxMjAwIDE4NS4xODQwMCBMDQorMjk3LjcyMDAwIDE4NS4xODQwMCBMDQorMjkyLjg5NjAwIDE5MC44NzIwMCBMDQorMjk4LjU4NDAwIDIwNy44NjQwMCBMDQorQGMNCitCDQorDQorQHJheCAlTm90ZTogT2JqZWN0DQorMzA0LjI3MjAwIDExNC4zMzYwMCA0MjQuMjI0MDAgMTgyLjM3NjAwIEBFDQorIDAgTyAwIEBnDQorMC4wMCAwLjAwIDAuMDAgMS4wMCBrDQorMCBKIDAgaiBbXSAwIGQgMCBSIDAgQEcNCiswLjAwIDAuMDAgMC4wMCAxLjAwIEsNCiswIDAuMjE2MDAgMC4yMTYwMCAwLjAwMDAwIEB3DQorLyRmbSAwIGRlZg0KKzMwNC4yNzIwMCAxMTQuMzM2MDAgbQ0KKzMyMS4zMzYwMCAxNjUuMzEyMDAgTA0KKzMxNS42NDgwMCAxNjUuMzEyMDAgTA0KKzMyMS4zMzYwMCAxODIuMzc2MDAgTA0KKzM0Ni43NTIwMCAxODIuMzc2MDAgTA0KKzM1Mi40NDAwMCAxNzYuNjg4MDAgTA0KKzM1Ni4yNTYwMCAxNzYuNjg4MDAgTA0KKzM2MS44NzIwMCAxODIuMzc2MDAgTA0KKzM4MC44MDgwMCAxODIuMzc2MDAgTA0KKzM4Ni40OTYwMCAxNzYuNjg4MDAgTA0KKzM5MC4yNDAwMCAxNzYuNjg4MDAgTA0KKzM5NS45MjgwMCAxODIuMzc2MDAgTA0KKzQxNi42NjQwMCAxODIuMzc2MDAgTA0KKzQyNC4yMjQwMCAxNzEuMDAwMDAgTA0KKzQxMS44NDAwMCAxMzAuNjgwMDAgTA0KKzQxNy40NTYwMCAxMzAuNjgwMDAgTA0KKzQxMS45ODQwMCAxMTQuMzM2MDAgTA0KKzM3Ny45MjgwMCAxMTQuMzM2MDAgTA0KKzM5MS4yNDgwMCAxNTQuMDA4MDAgTA0KKzM4Mi43NTIwMCAxNTQuMDA4MDAgTA0KKzM3NC45MDQwMCAxMzAuODI0MDAgTA0KKzM4MC41MjAwMCAxMzAuODI0MDAgTA0KKzM3NS4xOTIwMCAxMTQuMzM2MDAgTA0KKzM0MS4xMzYwMCAxMTQuMzM2MDAgTA0KKzM1NC4zODQwMCAxNTQuMDA4MDAgTA0KKzM0NS44ODgwMCAxNTQuMDA4MDAgTA0KKzMzNy45NjgwMCAxMzAuNjgwMDAgTA0KKzM0My42NTYwMCAxMzAuNjgwMDAgTA0KKzMzOC4zMjgwMCAxMTQuMzM2MDAgTA0KKzMwNC4yNzIwMCAxMTQuMzM2MDAgTA0KK0BjDQorQg0KKw0KK0ByYXggJU5vdGU6IE9iamVjdA0KKzMxMS44MzIwMCAxMjAuMDI0MDAgNDE4LjQ2NDAwIDE3Ni42ODgwMCBARQ0KKyAwIE8gMCBAZw0KKzAuMDAgMC4wMCAwLjAwIDAuMjAgaw0KKzAgSiAwIGogW10gMCBkIDAgUiAwIEBHDQorMC4wMCAwLjAwIDAuMDAgMS4wMCBLDQorMCAwLjIxNjAwIDAuMjE2MDAgMC4wMDAwMCBAdw0KKy8kZm0gMCBkZWYNCis0MTQuMDcyMDAgMTc2LjY4ODAwIG0NCis0MTguNDY0MDAgMTcwLjQyNDAwIEwNCis0MDQuNDk2MDAgMTI1LjY0MDAwIEwNCis0MTAuMTEyMDAgMTI1LjY0MDAwIEwNCis0MDguMjQwMDAgMTIwLjAyNDAwIEwNCiszODUuNTYwMDAgMTIwLjAyNDAwIEwNCiszOTguODA4MDAgMTU5LjY5NjAwIEwNCiszNzguOTM2MDAgMTU5LjY5NjAwIEwNCiszNjcuNjMyMDAgMTI1LjY0MDAwIEwNCiszNzMuMjQ4MDAgMTI1LjY0MDAwIEwNCiszNzEuMzc2MDAgMTIwLjAyNDAwIEwNCiszNDguNjk2MDAgMTIwLjAyNDAwIEwNCiszNjEuOTQ0MDAgMTU5LjY5NjAwIEwNCiszNDIuMDcyMDAgMTU5LjY5NjAwIEwNCiszMzAuNzY4MDAgMTI1LjY0MDAwIEwNCiszMzYuNDU2MDAgMTI1LjY0MDAwIEwNCiszMzQuNTEyMDAgMTIwLjAyNDAwIEwNCiszMTEuODMyMDAgMTIwLjAyNDAwIEwNCiszMjguODk2MDAgMTcxLjAwMDAwIEwNCiszMjMuMjA4MDAgMTcxLjAwMDAwIEwNCiszMjUuMDgwMDAgMTc2LjY4ODAwIEwNCiszNDUuODg4MDAgMTc2LjY4ODAwIEwNCiszNTEuNTc2MDAgMTcxLjAwMDAwIEwNCiszNTcuMTkyMDAgMTcxLjAwMDAwIEwNCiszNjIuODgwMDAgMTc2LjY4ODAwIEwNCiszNzkuODcyMDAgMTc2LjY4ODAwIEwNCiszODUuNTYwMDAgMTcxLjAwMDAwIEwNCiszOTEuMjQ4MDAgMTcxLjAwMDAwIEwNCiszOTYuOTM2MDAgMTc2LjY4ODAwIEwNCis0MTQuMDcyMDAgMTc2LjY4ODAwIEwNCitAYw0KK0INCisNCitAcmF4ICVOb3RlOiBPYmplY3QNCisyNjcuNDA4MDAgMTE0LjMzNjAwIDMxOC40NTYwMCAxODIuMzc2MDAgQEUNCisgMCBPIDAgQGcNCiswLjAwIDAuMDAgMC4wMCAxLjAwIGsNCisvJGZtIDAgZGVmDQorMzE4LjQ1NjAwIDE4Mi4zNzYwMCBtDQorMzAxLjEwNDAwIDEzMC43NTIwMCBMDQorMzA3LjAwODAwIDEzMC43NTIwMCBMDQorMzAxLjM5MjAwIDExNC4zMzYwMCBMDQorMjY3LjQwODAwIDExNC4zMzYwMCBMDQorMjg0LjQwMDAwIDE2NS4zMTIwMCBMDQorMjc4LjcxMjAwIDE2NS4zMTIwMCBMDQorMzE4LjQ1NjAwIDE4Mi4zNzYwMCBMDQorQGMNCisyNzguNzEyMDAgMTY1LjMxMjAwIG0NCisyODQuNDAwMDAgMTgyLjM3NjAwIEwNCiszMTguNDU2MDAgMTgyLjM3NjAwIEwNCitAYw0KK0YNCisNCitAcmF4ICVOb3RlOiBPYmplY3QNCisyNjcuNDA4MDAgMTE0LjMzNjAwIDMxOC40NTYwMCAxODIuMzc2MDAgQEUNCiswIEogMCBqIFtdIDAgZCAwIFIgMCBARw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgSw0KKzAgMC4yMTYwMCAwLjIxNjAwIDAuMDAwMDAgQHcNCisvJGZtIDAgZGVmDQorMzE4LjQ1NjAwIDE4Mi4zNzYwMCBtDQorMzAxLjEwNDAwIDEzMC43NTIwMCBMDQorMzA3LjAwODAwIDEzMC43NTIwMCBMDQorMzAxLjM5MjAwIDExNC4zMzYwMCBMDQorMjY3LjQwODAwIDExNC4zMzYwMCBMDQorMjg0LjQwMDAwIDE2NS4zMTIwMCBMDQorMjc4LjcxMjAwIDE2NS4zMTIwMCBMDQorQGMNCisyNzguNzEyMDAgMTY1LjMxMjAwIG0NCisyODQuNDAwMDAgMTgyLjM3NjAwIEwNCiszMTguNDU2MDAgMTgyLjM3NjAwIEwNCitAYw0KK1MNCisNCitAcmF4ICVOb3RlOiBPYmplY3QNCisyNzQuOTY4MDAgMTIwLjAyNDAwIDMxMC44OTYwMCAxNzYuNjg4MDAgQEUNCisgMCBPIDAgQGcNCiswLjAwIDAuMDAgMC4wMCAwLjIwIGsNCiswIEogMCBqIFtdIDAgZCAwIFIgMCBARw0KKzAuMDAgMC4wMCAwLjAwIDEuMDAgSw0KKzAgMC4yMTYwMCAwLjIxNjAwIDAuMDAwMDAgQHcNCisvJGZtIDAgZGVmDQorMjk3LjY0ODAwIDEyMC4wMjQwMCBtDQorMjk5LjUyMDAwIDEyNS42NDAwMCBMDQorMjkzLjgzMjAwIDEyNS42NDAwMCBMDQorMzEwLjg5NjAwIDE3Ni42ODgwMCBMDQorMjg3LjI4MDAwIDE3Ni42ODgwMCBMDQorMjg1LjMzNjAwIDE3MS4wMDAwMCBMDQorMjkxLjk2MDAwIDE3MS4wMDAwMCBMDQorMjc0Ljk2ODAwIDEyMC4wMjQwMCBMDQorMjk3LjY0ODAwIDEyMC4wMjQwMCBMDQorQGMNCitCDQorDQorQHJheCAlTm90ZTogT2JqZWN0DQorMjk5LjUyMDAwIDE5MC44NzIwMCAzMjAuMzI4MDAgMjA3Ljg2NDAwIEBFDQorIDAgTyAwIEBnDQorMC4wMCAwLjAwIDAuMDAgMC4yMCBrDQorMCBKIDAgaiBbXSAwIGQgMCBSIDAgQEcNCiswLjAwIDAuMDAgMC4wMCAxLjAwIEsNCiswIDAuMjE2MDAgMC4yMTYwMCAwLjAwMDAwIEB3DQorLyRmbSAwIGRlZg0KKzMxNi41MTIwMCAxOTMuNjgwMDAgbQ0KKzMyMC4zMjgwMCAyMDUuMDU2MDAgTA0KKzMxOC40NTYwMCAyMDcuODY0MDAgTA0KKzMwNy4wODAwMCAyMDcuODY0MDAgTA0KKzMwMy4zMzYwMCAyMDUuMDU2MDAgTA0KKzI5OS41MjAwMCAxOTMuNjgwMDAgTA0KKzMwMS40NjQwMCAxOTAuODcyMDAgTA0KKzMxMi44NDAwMCAxOTAuODcyMDAgTA0KKzMxNi41MTIwMCAxOTMuNjgwMDAgTA0KK0BjDQorQg0KKw0KKyUlUGFnZVRyYWlsZXINCitAcnMNCitAcnMNCislJVRyYWlsZXINCitARW5kU3lzQ29yZWxEaWN0DQorZW5kDQorJSVEb2N1bWVudFN1cHBsaWVkUmVzb3VyY2VzOiBwcm9jc2V0IHdDb3JlbDExRGljdCAxMS4wIDANCislJUVPRg0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdmltbG9nby5naWYgYi9ydW50aW1lL3ZpbWxvZ28uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YzRjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ZpbWxvZ28uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdmltbG9nby5wZGYgYi9ydW50aW1lL3ZpbWxvZ28ucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YWQ2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ZpbWxvZ28ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdmltbG9nby54cG0gYi9ydW50aW1lL3ZpbWxvZ28ueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZTBkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3ZpbWxvZ28ueHBtCkBAIC0wLDAgKzEsNzUgQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKnZpbWxvZ29bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBudW1fY29sb3JzIGNoYXJzX3Blcl9waXhlbCAqLworIiAgIDEyNSAgICA2MCAgICAgICAgOCAgICAgICAgICAgIDEiLAorLyogY29sb3JzICovCisiLiBjICMwMDAwMDAiLAorIiMgYyAjMDAwMDdmIiwKKyJhIGMgIzAwN2YwMCIsCisiYiBjICM3ZjdmN2YiLAorImMgYyAjMDBmZjAwIiwKKyJkIGMgI2JmYmZiZiIsCisiZSBjICNmZmZmZmYiLAorImYgYyBOb25lIiwKKy8qIHBpeGVscyAqLworImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlLi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlLmNjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlLmNjY2MuZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmVlZWVlZWVlZWVlZWVlZWVlZWVlLmNjYWFjYy5lZWZmZWVlZWVlZWVlZWVlZWVlZWVlZWVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmVlLi4uLi4uLi4uLi4uLi4uLi4uLi5jYWFhYWNjLmVlZWUuLi4uLi4uLi4uLi4uLi4uLi4uZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmVlLmRlZWVlZWVlZWVlZWVlZWVlZWViLmFhYWFhY2MuZWUuZGVlZWVlZWVlZWVlZWVlZWVlYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZlLmRlZGRkZGRkZGRkZGRkZGRkZGRkZGIuYWFhYWFjYy4uZGVkZGRkZGRkZGRkZGRkZGRkZGQuYmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZS5lZGRkZGRkZGRkZGRkZGRkZGRkZGRiLmFhYWFhYWNjLmVkZGRkZGRkZGRkZGRkZGRkZGRkYi5lZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmUuZWRkZGRkZGRkZGRkZGRkZGRkZGRkYi5hYWFhYWFhYy5lZGRkZGRkZGRkZGRkZGRkZGRkZGIuZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZlLmVkZGRkZGRkZGRkZGRkZGRkZGRkYmIuYWFhYWFhYWEuZWRkZGRkZGRkZGRkZGRkZGRkZGJiLmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZS5iYmRkZGRkZGRkZGRkZGRkZGRkYmJiLmFhYWFhYWFhLmJiZGRkZGRkZGRkZGRkZGRkZGJiLmJlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWVlZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmVlLmJiYmJkZGRkZGRkZGRkZGRiYmJiLmFhYWFhYWFhYWEuYmJiYmRkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmVlZWVlZWVlZWVlZWUuLi5lZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZWUuLmJlZGRkZGRkZGRkZGRkYmJiLmFhYWFhYWFhYWFhYS4uZGVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZlLi4uLi4uLi4uLmVlLi4uZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZlZWUuZWRkZGRkZGRkZGRkZGJiLmFhYWFhYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZS4uLi4uLi4uLi5lZWUuLmVlZWVlZWZmZmVlZWVlZWVmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZlLmVkZGRkZGRkZGRkZGRiYi5hYWFhYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmUuLmVlLi5lZS4uZWZlLi5lLi4uLmVlZmVlLi4uLi5lZWZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRkZGRkYmIuYWFhYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZlLi5lZS4uZWUuLmVmZS4uLi4uLi4uZWVlLi4uLi4uLmVlZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRkZGRkZGJiLmFhYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZS4uZWUuLmVlLi5lZmUuLi5lZWUuLmVlLi5lZWVlZS4uZWZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZlLmVkZGRkZGRkZGRkZGRiYi5hYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlZWVlLi5lZWVlZWZlLi5lZWZlLi5lZS4uLi4uLi4uLmVmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRkZGRkYmIuYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZS4uZWZmZmZmZS4uZWZmZS4uZWUuLi4uLi4uLi5lZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRkZGRkZGJiLmFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUuLmVmZmZmZmUuLmVmZmUuLmVlLi5lZWVlZWVlZWZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmVlLmVkZGRkZGRkZGRkZGRiYi5hYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWVlLi5lZWVmZmVlLi5lZWVlLi5lZS4uLmVlZWUuLmVmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmVlLi5lZGRkZGRkZGRkZGRkYmIuYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5jLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUuLi4uLi5lZmZlLi4uLmVlLi4uLmVlLi4uLi4uLi5lZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmVlLmMuZWRkZGRkZGRkZGRkZGJiLmFhYWEuZWVkZGRkZGRkZGRkZGJiYi5hY2MuZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlLi4uLi4uZWZmZS4uLi5lZS4uLi5lZWUuLi4uLi5lZWZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmVlLmNjLmVkZGRkZGRkZGRkZGRiYi5hYWEuZWVkZGRkZGRkZGRkZGJiYi5hYWFjYy5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWVlZWVlZWVmZmVlZWVlZWVlZWVlZWZlZWVlZWVlZWZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmVlLmNjYS5lZGRkZGRkZGRkZGRkYmIuYWEuZWVkZGRkZGRkZGRkZGJiYi5hYWFhYWNjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmVlLmNjYWEuZWRkZGRkZGRkZGRkZGJiLmEuZWVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhY2MuZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmVlLmNjYWFhLmVkZGRkZGRkZGRkZGRiYi4uZWVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFjYy5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImVlLmNjYWFhYS5lZGRkZGRkZGRkZGRkYmIuZWVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWNjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJlLmNjYWFhYWEuZWRkZGRkZGRkZGRkZGJiZWVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhY2MuZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiLi4uYWFhYWFhLmVkZGRkZGRkZGRkZGRiZGVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFjYy5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImUuIyNhYWFhYS5lZGRkZGRkZGRkZGRkYmVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFhYS4uLmVmZmZmZmZmZmZmZmZmZmZmZWVlZWVmZmZmZWVlZWZmZmZmZWVlZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJlZS4jI2FhYWEuZWRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZmZmZmZmZmZmZmZmZmUuLi5lZmZmZmUuLmVmZmZmZmUuLmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmVlLiMjYWFhLmVkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZmZmZmZmZmZmZmZmZmZlLi4uZWZmZmZlLi5lZmZmZmZlLi5lZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZWUuIyNhYS5lZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZWVlZWVlZWZmZmZlZWVlZWUuLmVmZWVlZWVlZWZmZmVlZS4uZWVlZWVmZmZlZWVlZWVlZmZlZWVlZWVlZWVlIiwKKyJmZmZlZS4jI2EuZWRkZGRkZGRkZGRkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZWUuLi4uLmVlZmZlZS4uLi5lLi5lZmUuLi4uLmVmZmZlLi4uLi4uLi5lZmZlZS4uLi4uZWVmZS4uLi5lLi4uZSIsCisiZmZmZmVlLiMjLmVkZGRkZGRkZGRkZGRkZGRkZGRkZC4uLi5hYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZWUuLi4uLi4uZWVlZS4uLi4uLi4uZWZlLi4uLi5lZmZmZS4uLi4uLi4uZWZlZS4uLi4uLi5lZWUuLi4uLi4uLi4iLAorImZmZmZmZWUuIy5lZGRkZGRkZGRkZGRkZGRkZGRkZC5kYmIuYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZmUuLmVlZWVlLi5lZS4uLmVlZS4uLmVmZWVlZS4uZWZmZmVlZS4uZWVlZWVmZS4uLmVlZS4uLmVlZWUuLi5lZS4uIiwKKyJmZmZmZmZlZS4uZWRkZGRkZGRkZGRkZGRkZGRkZGQuZGRiLmFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZmZlLi4uLi4uLi4uZWUuLmVlZmVlLi5lZmZmZmUuLmVmZmZmZmUuLmVmZmZmZmUuLmVlZmVlLi5lZmZlLi5lZWVlZSIsCisiZmZmZmZmZmVlLmVkZGRkZGRkZGRkZGRkZGRkZGRiLmJiYi5hYWFhYWFhYWFhYWFhYSMjLmVlZmZmZmZmZS4uLi4uLi4uLmVlLi5lZmZmZS4uZWZmZmZlLi5lZmZmZmZlLi5lZmZmZmZlLi5lZmZmZS4uZWZmZS4uZWZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRkZGRkZGRkZGRiYmIuLi5hYWFhYWFhYWFhYWFhYSMjLmVlZWVlZWVmZmUuLmVlZWVlZWVlZS4uZWVmZWUuLmVmZmZmZS4uZWZmZmZmZS4uZWZlZWVlZS4uZWVmZWUuLmVmZmUuLmVmZmZmIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRkZGRkZGRkZGRiYi4uLi4uLmFhLi4uLi5hYS4uLi4uIy4uLi4uLmJlZWZlLi4uZWVlZS4uZWUuLi5lZWUuLi5lZWVlZWUuLmVlZWVmZmUuLmVlZS4uZWUuLi5lZWUuLi5lZWVlLi5lZWVlZSIsCisiZmZmZmZmZmZlLmVkZGRkZGRkZGRkZGRkZGRiYmIuZGJiYi5hYS5kYmJiLi5kYmJiYi4uZGJiYmIuYmVmZWUuLi4uLi4uLmVlZS4uLi4uLi4uLmVlLi4uLi4uLi5lZmZlLi4uLi4uLmVlZS4uLi4uLi5lZWUuLi4uLi4uLmUiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRkZGRkZGRiYmIuLmJkZC5hYWEuYmRkZGJiZGRkZGRiYmRkZGRkYi5lZmZlZS4uLi4uLmVlZmVlLi4uLmUuLi5lZS4uLi4uLi4uZWZmZWUuLi4uZWVlZmVlLi4uLi5lZWZlLi4uLi4uLi5lIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRkZGRkZGRiYmIuYS5kZGIuYWFhLmRkZGRkZGRkZGRkZGRkZGRkZGIuZWZmZmVlZWVlZWVlZmZmZWVlZWVlZWVlZWVlZWVlZWVlZWVmZmZlZWVlZWVmZmZmZWVlZWVlZWZmZWVlZWVlZWVlZSIsCisiZmZmZmZmZmZlLmVkZGRkZGRkZGRkZGRiYmIuYS5iZGRiLmFhLmJkZGRiYmJiZGRkZGJiYmJkZGRiLmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRkZGRiYmIuYWEuYmRkLmFhYS5iZGRiLi4uLmJkZGIuLi4uYmRkLmJlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRkZGRiYmIuYWFhLmRkYi5hYWEuZGRiLiMjYi5kZGIuZWViLmRkYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZlLmVkZGRkZGRkZGRiYmIuLmFhLmJkZGIuYWEuYmRkYi4jZS5iZGRiLmVlLmJkZGIuZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRiYmIuLmFhYS5iZGQuYWFhLmJkZC4jZWUuYmRkLmJlZS5iZGQuYmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRiYmIuYWFhYWEuZGRiLmFhYS5kZGIuZWViLmRkYi5lZWIuZGRiLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZlLmVkZGRkZGRiYmIuIyNhYWEuYmRkYi5hYS5iZGRiLmVlLmJkZGIuZWUuYmRkYi5lZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRiYmIuZS4jI2FhLmJkZC5hYWEuYmRkLmJlZS5iZGQuYmVlLmJkZC5iZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmUuYmRkZGRiYmIuZWVlLiMjYS5kZGIuYWFhLmRkYi5lZWIuZGRiLmVlYi5kZGIuZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZlZS4uYmJiYi4uZWVmZWUuIy5iYmJiYi5hLmJiYmJiLmUuYmJiYmIuZS5iYmJiYi5lZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZmVlYi4uLi5iZWVmZmZlZS4uLi4uLi4uYS4uLi4uLi5lLi4uLi4uLmUuLi4uLi4uZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmZmZWVlZWVlZWVmZmZmZmVlLiMjYWFhYSMjLmVlZWVlZWVlZWVlZWVlZWVlZWVlZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWUuIyNhYSMjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZS4jIyMjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlLiMjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWUuLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiCit9OwpkaWZmIC0tZ2l0IGEvcnVudGltZS92aW1yY19leGFtcGxlLnZpbSBiL3J1bnRpbWUvdmltcmNfZXhhbXBsZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5ZTNkNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdmltcmNfZXhhbXBsZS52aW0KQEAgLTAsMCArMSw4MSBAQAorIiBBbiBleGFtcGxlIGZvciBhIHZpbXJjIGZpbGUuCisiCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgY2hhbmdlOgkyMDAyIFNlcCAxOQorIgorIiBUbyB1c2UgaXQsIGNvcHkgaXQgdG8KKyIgICAgIGZvciBVbml4IGFuZCBPUy8yOiAgfi8udmltcmMKKyIJICAgICAgZm9yIEFtaWdhOiAgczoudmltcmMKKyIgIGZvciBNUy1ET1MgYW5kIFdpbjMyOiAgJFZJTVxfdmltcmMKKyIJICAgIGZvciBPcGVuVk1TOiAgc3lzJGxvZ2luOi52aW1yYworCisiIFdoZW4gc3RhcnRlZCBhcyAiZXZpbSIsIGV2aW0udmltIHdpbGwgYWxyZWFkeSBoYXZlIGRvbmUgdGhlc2Ugc2V0dGluZ3MuCitpZiB2OnByb2duYW1lID1+PyAiZXZpbSIKKyAgZmluaXNoCitlbmRpZgorCisiIFVzZSBWaW0gc2V0dGluZ3MsIHJhdGhlciB0aGVuIFZpIHNldHRpbmdzIChtdWNoIGJldHRlciEpLgorIiBUaGlzIG11c3QgYmUgZmlyc3QsIGJlY2F1c2UgaXQgY2hhbmdlcyBvdGhlciBvcHRpb25zIGFzIGEgc2lkZSBlZmZlY3QuCitzZXQgbm9jb21wYXRpYmxlCisKKyIgYWxsb3cgYmFja3NwYWNpbmcgb3ZlciBldmVyeXRoaW5nIGluIGluc2VydCBtb2RlCitzZXQgYmFja3NwYWNlPWluZGVudCxlb2wsc3RhcnQKKworaWYgaGFzKCJ2bXMiKQorICBzZXQgbm9iYWNrdXAJCSIgZG8gbm90IGtlZXAgYSBiYWNrdXAgZmlsZSwgdXNlIHZlcnNpb25zIGluc3RlYWQKK2Vsc2UKKyAgc2V0IGJhY2t1cAkJIiBrZWVwIGEgYmFja3VwIGZpbGUKK2VuZGlmCitzZXQgaGlzdG9yeT01MAkJIiBrZWVwIDUwIGxpbmVzIG9mIGNvbW1hbmQgbGluZSBoaXN0b3J5CitzZXQgcnVsZXIJCSIgc2hvdyB0aGUgY3Vyc29yIHBvc2l0aW9uIGFsbCB0aGUgdGltZQorc2V0IHNob3djbWQJCSIgZGlzcGxheSBpbmNvbXBsZXRlIGNvbW1hbmRzCitzZXQgaW5jc2VhcmNoCQkiIGRvIGluY3JlbWVudGFsIHNlYXJjaGluZworCisiIEZvciBXaW4zMiBHVUk6IHJlbW92ZSAndCcgZmxhZyBmcm9tICdndWlvcHRpb25zJzogbm8gdGVhcm9mZiBtZW51IGVudHJpZXMKKyIgbGV0ICZndWlvcHRpb25zID0gc3Vic3RpdHV0ZSgmZ3Vpb3B0aW9ucywgInQiLCAiIiwgImciKQorCisiIERvbid0IHVzZSBFeCBtb2RlLCB1c2UgUSBmb3IgZm9ybWF0dGluZworbWFwIFEgZ3EKKworIiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRoYXQgYWxzbyB3b3JrcyBpbiBibG9jayBtb2RlLCBidXQgdGhlIGRlbGV0ZWQKKyIgdGV4dCBpcyBsb3N0IGFuZCBpdCBvbmx5IHdvcmtzIGZvciBwdXR0aW5nIHRoZSBjdXJyZW50IHJlZ2lzdGVyLgorInZub3JlbWFwIHAgIl9kcAorCisiIFN3aXRjaCBzeW50YXggaGlnaGxpZ2h0aW5nIG9uLCB3aGVuIHRoZSB0ZXJtaW5hbCBoYXMgY29sb3JzCisiIEFsc28gc3dpdGNoIG9uIGhpZ2hsaWdodGluZyB0aGUgbGFzdCB1c2VkIHNlYXJjaCBwYXR0ZXJuLgoraWYgJnRfQ28gPiAyIHx8IGhhcygiZ3VpX3J1bm5pbmciKQorICBzeW50YXggb24KKyAgc2V0IGhsc2VhcmNoCitlbmRpZgorCisiIE9ubHkgZG8gdGhpcyBwYXJ0IHdoZW4gY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBhdXRvY29tbWFuZHMuCitpZiBoYXMoImF1dG9jbWQiKQorCisgICIgRW5hYmxlIGZpbGUgdHlwZSBkZXRlY3Rpb24uCisgICIgVXNlIHRoZSBkZWZhdWx0IGZpbGV0eXBlIHNldHRpbmdzLCBzbyB0aGF0IG1haWwgZ2V0cyAndHcnIHNldCB0byA3MiwKKyAgIiAnY2luZGVudCcgaXMgb24gaW4gQyBmaWxlcywgZXRjLgorICAiIEFsc28gbG9hZCBpbmRlbnQgZmlsZXMsIHRvIGF1dG9tYXRpY2FsbHkgZG8gbGFuZ3VhZ2UtZGVwZW5kZW50IGluZGVudGluZy4KKyAgZmlsZXR5cGUgcGx1Z2luIGluZGVudCBvbgorCisgICIgUHV0IHRoZXNlIGluIGFuIGF1dG9jbWQgZ3JvdXAsIHNvIHRoYXQgd2UgY2FuIGRlbGV0ZSB0aGVtIGVhc2lseS4KKyAgYXVncm91cCB2aW1yY0V4CisgIGF1IQorCisgICIgRm9yIGFsbCB0ZXh0IGZpbGVzIHNldCAndGV4dHdpZHRoJyB0byA3OCBjaGFyYWN0ZXJzLgorICBhdXRvY21kIEZpbGVUeXBlIHRleHQgc2V0bG9jYWwgdGV4dHdpZHRoPTc4CisKKyAgIiBXaGVuIGVkaXRpbmcgYSBmaWxlLCBhbHdheXMganVtcCB0byB0aGUgbGFzdCBrbm93biBjdXJzb3IgcG9zaXRpb24uCisgICIgRG9uJ3QgZG8gaXQgd2hlbiB0aGUgcG9zaXRpb24gaXMgaW52YWxpZCBvciB3aGVuIGluc2lkZSBhbiBldmVudCBoYW5kbGVyCisgICIgKGhhcHBlbnMgd2hlbiBkcm9wcGluZyBhIGZpbGUgb24gZ3ZpbSkuCisgIGF1dG9jbWQgQnVmUmVhZFBvc3QgKgorICAgIFwgaWYgbGluZSgiJ1wiIikgPiAwICYmIGxpbmUoIidcIiIpIDw9IGxpbmUoIiQiKSB8CisgICAgXCAgIGV4ZSAibm9ybWFsIGdgXCIiIHwKKyAgICBcIGVuZGlmCisKKyAgYXVncm91cCBFTkQKKworZWxzZQorCisgIHNldCBhdXRvaW5kZW50CQkiIGFsd2F5cyBzZXQgYXV0b2luZGVudGluZyBvbgorCitlbmRpZiAiIGhhcygiYXV0b2NtZCIpCmRpZmYgLS1naXQgYS9zcmMuaW5mbyBiL3NyYy5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhYjdjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvSU5TVEFMTCBiL3NyYy9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYWE2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvSU5TVEFMTApAQCAtMCwwICsxLDQyNyBAQAorSU5TVEFMTCAtIEluc3RhbGxhdGlvbiBvZiBWaW0gb24gZGlmZmVyZW50IG1hY2hpbmVzLgorCitUaGlzIGZpbGUgY29udGFpbnMgaW5zdHJ1Y3Rpb25zIGZvciBjb21waWxpbmcgVmltLiBJZiB5b3UgYWxyZWFkeSBoYXZlIGFuCitleGVjdXRhYmxlIHZlcnNpb24gb2YgVmltLCB5b3UgZG9uJ3QgbmVlZCB0aGlzLgorCitDb250ZW50czoKKzEuIEdlbmVyaWMKKzIuIFVuaXgKKzMuIFJJU0MgT1MKKzQuIE1hY2ludG9zaAorNS4gT1MvMiAod2l0aCBFTVggMC45YikKKzYuIEF0YXJpIE1pTlQKKworRm9yIE9TLzM5MCBVbml4IHNlZSAuLi9ydW50aW1lL2RvYy9vc18zOTAudHh0CitGb3IgQmVCb3ggc2VlIC4uL3J1bnRpbWUvZG9jL29zX2Jlb3MudHh0LgorRm9yIEFtaWdhIHNlZSBJTlNUQUxMYW1pLnR4dAorRm9yIFBDIChNUy1ET1MsIFdpbmRvd3MgTlQsIFdpbmRvd3MgOTUpIHNlZSBJTlNUQUxMcGMudHh0CitGb3IgTWFjaW50b3NoIHNlZSBJTlNUQUxMbWFjLnR4dAorCisKKzEuIEdlbmVyaWMKKz09PT09PT09PT0KKworSWYgeW91IGNvbXBpbGUgVmltIHdpdGhvdXQgc3BlY2lmeWluZyBhbnl0aGluZywgeW91IHdpbGwgZ2V0IHRoZSBkZWZhdWx0CitiZWhhdmlvdXIgYXMgaXMgZG9jdW1lbnRlZCwgd2hpY2ggc2hvdWxkIGJlIGZpbmUgZm9yIG1vc3QgcGVvcGxlLgorCitGb3IgZmVhdHVyZXMgdGhhdCB5b3UgY2FuJ3QgZW5hYmxlL2Rpc2FibGUgaW4gYW5vdGhlciB3YXksIHlvdSBjYW4gZWRpdCB0aGUKK2ZpbGUgImZlYXR1cmUuaCIgdG8gbWF0Y2ggeW91ciBwcmVmZXJlbmNlcy4KKworCisyLiBVbml4Cis9PT09PT09CisKK1N1bW1hcnk6CisxLiBtYWtlCQkJcnVuIGNvbmZpZ3VyZSwgY29tcGlsZSBhbmQgbGluaworMi4gbWFrZSBpbnN0YWxsCQlpbnN0YWxsYXRpb24gaW4gL3Vzci9sb2NhbAorCitUaGlzIHdpbGwgaW5jbHVkZSB0aGUgR1VJIGFuZCBYMTEgbGlicmFyaWVzLCBpZiB5b3UgaGF2ZSB0aGVtLiAgSWYgeW91IHdhbnQgYQordmVyc2lvbiBvZiBWaW0gdGhhdCBpcyBzbWFsbCBhbmQgc3RhcnRzIHVwIHF1aWNrbHksIHNlZSB0aGUgTWFrZWZpbGUgZm9yIGhvdwordG8gZGlzYWJsZSB0aGUgR1VJIGFuZCBYMTEuICBJZiB5b3UgZG9uJ3QgaGF2ZSBNb3RpZiBhbmQvb3IgWDExLCB0aGVzZQorZmVhdHVyZXMgd2lsbCBiZSBkaXNhYmxlZCBhdXRvbWF0aWNhbGx5LgorCitTZWUgdGhlIHN0YXJ0IG9mIE1ha2VmaWxlIGZvciBtb3JlIGRldGFpbGVkIGluc3RydWN0aW9ucyBhYm91dCBob3cgdG8gY29tcGlsZQorVmltLgorCitJZiB5b3UgbmVlZCBleHRyYSBjb21waWxlciBhbmQvb3IgbGlua2VyIGFyZ3VtZW50cywgc2V0ICRDRkxBR1MgYW5kL29yICRMSUJTCitiZWZvcmUgc3RhcnRpbmcgY29uZmlndXJlLiAgRXhhbXBsZToKKworCWVudiAgQ0ZMQUdTPS1JL3Vzci9sb2NhbC9pbmNsdWRlICBMSUJTPS1sbSAgbWFrZQorCitUaGlzIGlzIG9ubHkgbmVlZGVkIGZvciB0aGluZ3MgdGhhdCBjb25maWd1cmUgZG9lc24ndCBvZmZlciBhIHNwZWNpZmljIGFyZ3VtZW50Citmb3Igb3IgZmlndXJlcyBvdXQgYnkgaXRzZWxmLiAgRmlyc3QgdHJ5IHJ1bm5pbmcgY29uZmlndXJlIHdpdGhvdXQgZXh0cmEKK2FyZ3VtZW50cy4KKworR05VIEF1dG9jb25mIGFuZCBhIGZldyBvdGhlciB0b29scyBoYXZlIGJlZW4gdXNlZCB0byBtYWtlIFZpbSB3b3JrIG9uIG1hbnkKK2RpZmZlcmVudCBVbml4IHN5c3RlbXMuICBUaGUgYWR2YW50YWdlIG9mIHRoaXMgaXMgdGhhdCBWaW0gc2hvdWxkIGNvbXBpbGUKK29uIG1vc3Qgc3l0ZW1zIHdpdGhvdXQgYW55IGFkanVzdG1lbnRzLiAgVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IHdoZW4KK2FkanVzdG1lbnRzIGFyZSByZXF1aXJlZCwgaXQgdGFrZXMgc29tZSB0aW1lIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBoYXBwZW5pbmcuCisKK0lmIGNvbmZpZ3VyZSBmaW5kcyBhbGwgbGlicmFyeSBmaWxlcyBhbmQgdGhlbiBjb21wbGFpbnMgd2hlbiBsaW5raW5nIHRoYXQgc29tZQorb2YgdGhlbSBjYW4ndCBiZSBmb3VuZCwgeW91ciBsaW5rZXIgZG9lc24ndCByZXR1cm4gYW4gZXJyb3IgY29kZSBmb3IgbWlzc2luZworbGlicmFyaWVzLiAgVmltIHNob3VsZCBiZSBsaW5rZWQgZmluZSBhbnl3YXksIG1vc3RseSB5b3UgY2FuIGp1c3QgaWdub3JlIHRoZXNlCitlcnJvcnMuCisKK0lmIHlvdSBydW4gY29uZmlndXJlIGJ5IGhhbmQgKG5vdCB1c2luZyB0aGUgTWFrZWZpbGUpLCByZW1lbWJlciB0aGF0IGFueQorY2hhbmdlcyBpbiB0aGUgTWFrZWZpbGUgaGF2ZSBubyBpbmZsdWVuY2Ugb24gY29uZmlndXJlLiAgVGhpcyBtYXkgYmUgd2hhdCB5b3UKK3dhbnQsIGJ1dCBtYXliZSBub3QhCisKK1RoZSBhZHZhbnRhZ2Ugb2YgcnVubmluZyBjb25maWd1cmUgc2VwYXJhdGVseSwgaXMgdGhhdCB5b3UgY2FuIHdyaXRlIGEgc2NyaXB0Cit0byBidWlsZCBWaW0sIHdpdGhvdXQgY2hhbmdpbmcgdGhlIE1ha2VmaWxlIG9yIGZlYXR1cmUuaC4gIEV4YW1wbGUgKHVzaW5nIHNoKToKKworCUNGTEFHUz0tRENPTVBJTEVSX0ZMQUcgLi9jb25maWd1cmUgLS1lbmFibGUtZ3VpPW1vdGlmCisKK09uZSB0aGluZyB0byB3YXRjaCBvdXQgZm9yOiBJZiB0aGUgY29uZmlndXJlIHNjcmlwdCBpdHNlbGYgY2hhbmdlcywgcnVubmluZworIm1ha2UiIHdpbGwgZXhlY3V0ZSBpdCBhZ2FpbiwgYnV0IHdpdGhvdXQgeW91ciBhcmd1bWVudHMuICBEbyAibWFrZSBjbGVhbiIgYW5kCitydW4gY29uZmlndXJlIGFnYWluLgorCitJZiB5b3UgYXJlIGNvbXBpbGluZyBWaW0gZm9yIHNldmVyYWwgbWFjaGluZXMsIGZvciBlYWNoIG1hY2hpbmU6CisgIGEuICAgIG1ha2Ugc2hhZG93CisgIGIuICAgIG12IHNoYWRvdyBtYWNoaW5lX25hbWUKKyAgYy4gICAgY2QgbWFjaGluZV9uYW1lCisgIGQuICAgIG1ha2U7IG1ha2UgaW5zdGFsbAorCitbRG9uJ3QgdXNlIGEgcGF0aCBmb3IgbWFjaGluZV9uYW1lLCBqdXN0IGEgZGlyZWN0b3J5IG5hbWUsIG90aGVyd2lzZSB0aGUgbGlua3MKK3RoYXQgIm1ha2Ugc2hhZG93IiBjcmVhdGVzIHdvbid0IHdvcmsuXQorCisKK1VuaXg6IENPTVBJTElORyBXSVRIL1dJVEhPVVQgR1VJCisKK1RoZXNlIGNvbmZpZ3VyZSBhcmd1bWVudHMgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHdoaWNoIEdVSSB0byB1c2U6CistLWVuYWJsZS1ndWk9CWd0aywgbW90aWYsIGF0aGVuYSBvciBhdXRvCistLWRpc2FibGUtZ3RrLWNoZWNrCistLWRpc2FibGUtbW90aWYtY2hlY2sKKy0tZGlzYWJsZS1hdGhlbmEtY2hlY2sKKworLS1lbmFibGUtZ3VpIGRlZmF1bHRzIHRvICJhdXRvIiwgc28gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGxvb2sgZm9yIGEgR1VJIChpbgordGhlIG9yZGVyIG9mIEdUSywgTW90aWYsIHRoZW4gQXRoZW5hKS4gIElmIG9uZSBpcyBmb3VuZCwgdGhlbiBpcyB1c2VzIGl0IGFuZAorZG9lcyBub3QgcHJvY2VlZCB0byBjaGVjayBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzLiAgT3RoZXJ3aXNlLCBpdCBtb3ZlcyBvbgordG8gdGhlIG5leHQgb25lLgorCistLWVuYWJsZS17Z3RrLG1vdGlmLGF0aGVuYX0tY2hlY2sgYWxsIGRlZmF1bHQgdG8gInllcyIsIHN1Y2ggdGhhdCBpZgorLS1lbmFibGUtZ3VpIGlzICJhdXRvIiAod2hpY2ggaXQgaXMgYnkgZGVmYXVsdCksIEdUSywgTW90aWYsIGFuZCBBdGhlbmEgd2lsbAorYmUgY2hlY2tlZCBmb3IuICBJZiB5b3Ugd2FudCB0byAqZXhjbHVkZSogYSBjZXJ0YWluIGNoZWNrLCB0aGVuIHlvdSB1c2UKKy0tZGlzYWJsZS17Z3RrLG1vdGlmLGF0aGVuYX0tY2hlY2suCisKK0ZvciBleGFtcGxlLCBpZiAtLWVuYWJsZS1ndWkgaXMgc2V0IHRvICJhdXRvIiwgYnV0IHlvdSBkb24ndCB3YW50IGl0IGxvb2sgZm9yCitNb3RpZiwgeW91IHRoZW4gYWxzbyBzcGVjaWZ5IC0tZGlzYWJsZS1tb3RpZi1jaGVjay4gIFRoaXMgcmVzdWx0cyBpbiBvbmx5CitjaGVja2luZyBmb3IgR1RLIGFuZCBBdGhlbmEuCisKK0xhc3RseSwgaWYgeW91IGtub3cgd2hpY2ggb25lIHlvdSB3YW50IHRvIHVzZSwgdGhlbiB5b3UgY2FuIGp1c3QgZG8KKy0tZW5hYmxlLWd1aT17Z3RrLG1vdGlmLGF0aGVuYX0uICBTbyBpZiB5b3Ugd2FudGVkIHRvIG9ubHkgdXNlIE1vdGlmLCB0aGVuCit5b3UnZCBzcGVjaWZ5IC0tZW5hYmxlLWd1aT1tb3RpZi4gIE9uY2UgeW91IHNwZWNpZnkgd2hhdCB5b3Ugd2FudCwgdGhlCistLWVuYWJsZS17Z3RrLG1vdGlmLGF0aGVuYX0tY2hlY2sgb3B0aW9ucyBhcmUgaWdub3JlZC4KKworRm9yIGNvbXBpbGluZyB3aXRoIHRoZSBHVEsrIEdVSSwgeW91IG5lZWQgYSByZWNlbnQgdmVyc2lvbiBvZiBnbGliIGFuZCBndGsrLgorQ29uZmlndXJlIGNoZWNrcyBmb3IgYXQgbGVhc3QgdmVyc2lvbiAxLjEuMTYsIGJ1dCBiZWxvdyAyLjAuICBBbiBvbGRlciB2ZXJzaW9ucworaXMgbm90IHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuICBJZiB5b3Ugd2FudCB0byB1c2UgaXQgYW55d2F5LCBydW4gY29uZmlndXJlCit3aXRoICItLWRpc2FibGUtZ3RrdGVzdCIuICBHVEsgMi4wIGRvZXNuJ3Qgd29yayB5ZXQuCitHVEsgcmVxdWlyZXMgYW4gQU5TSSBDIGNvbXBpbGVyLiAgSWYgeW91IGZhaWwgdG8gY29tcGlsZSBWaW0gd2l0aCBHVEsrIChpdAoraXMgdGhlIHByZWZlcnJlZCBjaG9pY2UpLCB0cnkgc2VsZWN0aW5nIGFub3RoZXIgb25lIGluIHRoZSBNYWtlZmlsZS4KK0lmIHlvdSBhcmUgc3VyZSB5b3UgaGF2ZSBHVEsgaW5zdGFsbGVkLCBidXQgZm9yIHNvbWUgcmVhc29uIGNvbmZpZ3VyZSBzYXlzIHlvdQorZG8gbm90LCB5b3UgbWF5IGhhdmUgbGVmdC1vdmVyIGhlYWRlciBmaWxlcyBhbmQvb3IgbGlicmFyeSBmaWxlcyBmcm9tIGFuIG9sZGVyCisoYW5kIGluY29tcGF0aWJsZSkgdmVyc2lvbiBvZiBHVEsuICBpZiB0aGlzIGlzIHRoZSBjYXNlLCBwbGVhc2UgY2hlY2sKK2F1dG8vY29uZmlnLmxvZyBmb3IgYW55IGVycm9yIG1lc3NhZ2VzIHRoYXQgbWF5IGdpdmUgeW91IGEgaGludCBhcyB0byB3aGF0J3MKK2hhcHBlbmluZy4KKworVW5peDogQ09NUElMSU5HIFdJVEggTVVMVEktQllURQorCitXaGVuIHlvdSB3YW50IHRvIGNvbXBpbGUgd2l0aCB0aGUgbXVsdGktYnl0ZSBmZWF0dXJlcyBlbmFibGVkLCBtYWtlIHN1cmUgeW91Citjb21waWxlIG9uIGEgbWFjaGluZSB3aGVyZSB0aGUgbG9jYWxlIHNldHRpbmdzIGFjdHVhbGx5IHdvcmsuICBvdGhlcndpc2UgdGhlCitjb25maWd1cmUgdGVzdHMgbWF5IGZhaWwuICBZb3UgbmVlZCB0byBjb21waWxlIHdpdGggImJpZyIgZmVhdHVyZXM6CisKKyAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtZmVhdHVyZXM9YmlnCisKK1VuaXg6IENPTVBJTElORyBPTiBMSU5VWAorCitPbiBMaW51eCwgd2hlbiB1c2luZyAtZyB0byBjb21waWxlICh3aGljaCBpcyBkZWZhdWx0IGZvciBnY2MpLCB0aGUgZXhlY3V0YWJsZQord2lsbCBwcm9iYWJseSBiZSBzdGF0aWNhbGx5IGxpbmtlZC4gIElmIHlvdSBkb24ndCB3YW50IHRoaXMsIHJlbW92ZSB0aGUgLWcKK29wdGlvbiBmcm9tIENGTEFHUy4KKworVW5peDogUFVUVElORyB2aW1yYyBJTiAvZXRjCisKK1NvbWUgTGludXggZGlzdHJpYnV0aW9ucyBwcmVmZXIgdG8gcHV0IHRoZSBnbG9iYWwgdmltcmMgZmlsZSBpbiAvZXRjLCBhbmQgdGhlCitWaW0gcnVudGltZSBmaWxlcyBpbiAvdXNyLiAgVGhpcyBjYW4gYmUgZG9uZSB3aXRoOgorCS4vY29uZmlndXJlIC0tcHJlZml4PS91c3IKKwltYWtlIFZJTVJDTE9DPS9ldGMgVklNUlVOVElNRURJUj0vdXNyL3NoYXJlL3ZpbSBNQUtFPSJtYWtlIC1lIgorCitVbml4OiBDT01QSUxJTkcgT04gTmVYVAorCitBZGQgdGhlICItcG9zaXgiIGFyZ3VtZW50IHRvIHRoZSBjb21waWxlciBieSB1c2luZyBvbmUgb2YgdGhlc2UgY29tbWFuZHM6CisJc2V0ZW52IENDICdjYyAtcG9zaXgnIChjc2gpCisJZXhwb3J0IENDPSdjYyAtcG9zaXgnIChzaCkKK0FuZCBydW4gY29uZmlndXJlIHdpdGggIi0tZGlzYWJsZS1tb3RpZi1jaGVjayIuCisKKworMy4gUklTQyBPUworPT09PT09PT09PT09PQorCitNdWNoIGZpbGUgcmVuYW1pbmcgaXMgbmVlZGVkIGJlZm9yZSB5b3UgY2FuIGNvbXBpbGUgYW55dGhpbmcuCitZb3UnbGwgbmVlZCBVbml4TGliIHRvIGxpbmsgYWdhaW5zdCwgR0NDIGFuZCBHTlUgbWFrZS4KKworSSBzdWdnZXN0IHlvdSBnZXQgdGhlIFJJU0MgT1MgYmluYXJ5IGRpc3RyaWJ1dGlvbiwgd2hpY2ggaW5jbHVkZXMgdGhlCitUZW1wbGF0ZXMgZmlsZSBhbmQgdGhlIGxvYWRlci4KKworVHJ5IGhlcmU6IGh0dHA6Ly93d3cuZWNzLnNvdG9uLmFjLnVrL350YWwxOTcKKworRG8KKyAgICA6aGVscCByaXNjb3MKKword2l0aGluIHRoZSBlZGl0b3IgZm9yIG1vcmUgaW5mb3JtYXRpb24sIG9yIHJlYWQgdGhlIG9zX3Jpc2Nvcy50eHQgaGVscCBmaWxlLgorCisKKzQuIE1hY2ludG9zaAorPT09PT09PT09PT09CisKK1ZpbSBzaG91bGQgd29yayBvbiB0aGUgTWFjaW50b3NoLCBidXQgSSBkb24ndCBoYXZlIGEgbWFrZWZpbGUgZm9yIGl0LgorV29yayBpcyBiZWluZyBkb25lIHRvIHVwZGF0ZSB0aGUgTWFjaW50b3NoIHBvcnQuICBJdCdzIGEgbG90IG9mIHdvcms7IGRvbid0CitleHBlY3QgaXQgc29vbi4KKworCis1LiBPUy8yCis9PT09PT09CisKK1N1bW1hcnk6CityZW4gTWFrZWZpbGUgTWFrZWZpbGUudW5peAorcmVuIG1ha2VmaWxlLm9zMiBNYWtlZmlsZQorbWFrZQorCitUaGlzIHBvcnQgb2YgVmltIHRvIE9TLzIgaXMgYmFzZWQgb24gdGhlIGVteCBlbnZpcm9ubWVudCB0b2dldGhlcgord2l0aCBHTlUgQy4gVGhlIG1haW4gZGVzaWduIGdvYWwgb2YgZW14IGlzIHRvIHNpbXBsaWZ5IHBvcnRpbmcgVW5peAorc29mdHdhcmUgdG8gT1MvMiBhbmQgRE9TLiBCZWNhdXNlIG9mIHRoaXMsIGFsbW9zdCBhbGwgdGhlIFVuaXggZGVmaW5lcworZXRjLiBhbHJlYWR5IGV4aXN0aW5nIGluIHRoZSBWaW0gc291cmNlIGNvZGUgY291bGQgYmUgcmV1c2VkLiBPbmx5IHdoZXJlCitPUy8yIHNwZWNpZmljcyBjYW1lIGludG8gcGxheSB3ZXJlIGFkZGl0aW9uYWwgY2hhbmdlcyBuZWNlc3NhcnkuIFRob3NlCitwbGFjZXMgY2FuIGJlIGZvdW5kIGJ5IHNlYXJjaGluZyBmb3IgIk9TMiIgYW5kICJfX0VNWF9fIiAoSSd2ZSB0cmllZCB0bwora2VlcCBlbXgtc3BlY2lmaWMgdGhpbmdzIHNlcGFyYXRlIGZyb20gZ2VuZXJpYyBPUy8yIHN0dWZmKS4KKworTm90ZTogVGhpcyBPUy8yIHBvcnQgd29ya3Mgd2VsbCBmb3IgbWUgYW5kIGFuIGFkZGl0aW9uYWwgT1MvMiB1c2VyIG9uCisgICAgICB0aGUgVmltIGRldmVsb3BtZW50IHRlYW0gKEthcnN0ZW4gU2lldmVydCk7IGhvd2V2ZXIsIHNpbmNlIEkKKyAgICAgIGhhdmVuJ3QgaGFkIGFueSBvdGhlciBmZWVkYmFjayBmcm9tIG90aGVyIHBlb3BsZSwgdGhhdCBlaXRoZXIKKyAgICAgIG1lYW5zIG5vIChPUy8yLXNwZWNpZmljKSBidWdzIGV4aXN0LCBvciBubyBvbmUgaGFzIHlldCBjcmVhdGVkCisgICAgICBhIHNpdHVhdGlvbiBpbiB3aGljaCBhbnkgYnVncyBhcmUgYXBwYXJlbnQuCisgICAgICBSZXBvcnQgYW55IHByb2JsZW1zIG9yIG90aGVyIGNvbW1lbnRzIHRvIHBhdWxAd2F1Lm1pcy5haC5ubAorICAgICAgKGVtYWlsIHZhbGlkIHVwIHRvIGF0IGxlYXN0IFNlcHRlbWJlciAxOTk2LCBhZnRlciB0aGF0IHRyeQorICAgICAgcGF1bEB3dXJ0ZWwuaG9iYnkubmwsIHBhdWxAbXVycGh5Lm5sLCBvciBwYXVsU0B0b2Vjb21wc3QubmwpLgorICAgICAgVGV4dG1vZGUvbm90ZXh0bW9kZSBhbmQgYmluYXJ5IG1vZGUgYm90aCBzZWVtIHRvIHdvcmsgd2VsbC4KKworUHJlcmVxdWlzaXRlczoKKy0gVG8gY29tcGlsZSwgeW91IG5lZWQgdGhlIGVteCBlbnZpcm9ubWVudCAoYXQgbGVhc3QgcmV2LiAwLjliKSwgR0NDLAorICBzb21lIG1ha2UgdXRpbGl0eSAoR05VIG1ha2Ugd29ya3MgZmluZSkuIFRoZXNlIGFyZSBnZW5lcmFsbHkKKyAgYXZhaWxhYmxlIGFzIChhc2sgQXJjaGllIGFib3V0IHRoZW0pOgorICAgIGVteHJ0LnppcCAgICAgZW14IHJ1bnRpbWUgcGFja2FnZQorICAgIGVteGRldi56aXAgICAgZW14IGRldmVsb3BtZW50IHN5c3RlbSAod2l0aG91dCBjb21waWxlcikKKyAgR05VIHByb2dyYW1zIGNvbXBpbGVkIGZvciBlbXgsIHBhdGNoZXMgYW5kIHBhdGNoZWQgc291cmNlczoKKyAgICBnbnVkZXYxLnppcCAgIEdOVSBkZXZlbG9wbWVudCB0b29scyBjb21waWxlZCBmb3IgZW14IChwYXJ0IDEpCisgICAgZ251ZGV2Mi56aXAgICBHTlUgZGV2ZWxvcG1lbnQgdG9vbHMgY29tcGlsZWQgZm9yIGVteCAocGFydCAyKQorICAgIGdudW1ha2UuemlwICAgR05VIG1ha2UKKy0gRG9uJ3Qgc2V0IGEgVEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZTsgVmltIGRlZmF1bHRzIHRvIG9zMmFuc2kKKyAgd2hpY2ggaXMgYXZhaWxhYmxlIGFzIGEgYnVpbHRpbiB0ZXJtY2FwIGVudHJ5LiBVc2luZyBvdGhlciB2YWx1ZXMKKyAgbWF5IGdpdmUgcHJvYmxlbXMhIChPUy8yIEFOU0kgZW11bGF0aW9uIGlzIHF1aXRlIGxpbWl0ZWQuKSBJZiB5b3UKKyAgbmVlZCB0byBzZXQgVEVSTSBmb3Igb3RoZXIgcHJvZ3JhbXMsIHlvdSBtYXkgY29uc2lkZXIgcHV0dGluZworICBzZXQgdGVybT1vczJhbnNpIGluIHRoZSB2aW1yYyBmaWxlLgorCitDaGVjayB2aW1fb3MyLnR4dCBmb3IgYWRkaXRpb25hbCBpbmZvIG9uIHJ1bm5pbmcgVmltLgorCisKKzYuIEF0YXJpIE1pTlQKKz09PT09PT09PT09PT0KKworCitUbyBjb21waWxlIFZpbSBmb3IgTWlOVCB5b3UgbWF5IGVpdGhlciBjb3B5IG1ha2VmaWxlLm1pbnQgdG8gTWFrZWZpbGUgb3IgdXNlCit0aGUgVW5peCBNYWtlZmlsZSBhZGFwdGVkIGZvciB0aGUgTWlOVCBjb25maWd1cmF0aW9uLgorCitOb3cgcHJvY2VlZCBhcyBkZXNjcmliZWQgaW4gdGhlIFVuaXggc2VjdGlvbi4KKworUHJlcmVxdWlzaXRlczoKKworWW91IG5lZWQgYSBjdXJzZXMgb3IgdGVybWNhcCBsaWJyYXJ5IHRoYXQgc3VwcG9ydHMgbm9uLWFscGhhbnVtZXJpYwordGVybWNhcCBuYW1lcy4gSWYgeW91IGRvbid0IGhhdmUgYW55LCBsaW5rIHdpdGggdGVybWxpYi5vLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIElOU1RBTEwgZmlsZSB0aGF0IGNvbWVzIHdpdGggR05VCithdXRvY29uZiAyLjEyLiBOb3QgZXZlcnl0aGluZyBhcHBsaWVzIHRvIFZpbS4gUmVhZCBNYWtlZmlsZSB0b28hCisKKworQmFzaWMgSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT09PT0KKworICAgVGhlc2UgYXJlIGdlbmVyaWMgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KKworICAgVGhlIGBjb25maWd1cmUnIHNoZWxsIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBjb3JyZWN0IHZhbHVlcyBmb3IKK3ZhcmlvdXMgc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24uICBJdCB1c2VzCit0aG9zZSB2YWx1ZXMgdG8gY3JlYXRlIGEgYE1ha2VmaWxlJyBpbiBlYWNoIGRpcmVjdG9yeSBvZiB0aGUgcGFja2FnZS4KK0l0IG1heSBhbHNvIGNyZWF0ZSBvbmUgb3IgbW9yZSBgLmgnIGZpbGVzIGNvbnRhaW5pbmcgc3lzdGVtLWRlcGVuZGVudAorZGVmaW5pdGlvbnMuICBGaW5hbGx5LCBpdCBjcmVhdGVzIGEgc2hlbGwgc2NyaXB0IGBjb25maWcuc3RhdHVzJyB0aGF0Cit5b3UgY2FuIHJ1biBpbiB0aGUgZnV0dXJlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGEgZmlsZQorYGNvbmZpZy5jYWNoZScgdGhhdCBzYXZlcyB0aGUgcmVzdWx0cyBvZiBpdHMgdGVzdHMgdG8gc3BlZWQgdXAKK3JlY29uZmlndXJpbmcsIGFuZCBhIGZpbGUgYGNvbmZpZy5sb2cnIGNvbnRhaW5pbmcgY29tcGlsZXIgb3V0cHV0CisodXNlZnVsIG1haW5seSBmb3IgZGVidWdnaW5nIGBjb25maWd1cmUnKS4KKworICAgSWYgeW91IG5lZWQgdG8gZG8gdW51c3VhbCB0aGluZ3MgdG8gY29tcGlsZSB0aGUgcGFja2FnZSwgcGxlYXNlIHRyeQordG8gZmlndXJlIG91dCBob3cgYGNvbmZpZ3VyZScgY291bGQgY2hlY2sgd2hldGhlciB0byBkbyB0aGVtLCBhbmQgbWFpbAorZGlmZnMgb3IgaW5zdHJ1Y3Rpb25zIHRvIHRoZSBhZGRyZXNzIGdpdmVuIGluIHRoZSBgUkVBRE1FJyBzbyB0aGV5IGNhbgorYmUgY29uc2lkZXJlZCBmb3IgdGhlIG5leHQgcmVsZWFzZS4gIElmIGF0IHNvbWUgcG9pbnQgYGNvbmZpZy5jYWNoZScKK2NvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0IHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKworICAgVGhlIGZpbGUgYGNvbmZpZ3VyZS5pbicgaXMgdXNlZCB0byBjcmVhdGUgYGNvbmZpZ3VyZScgYnkgYSBwcm9ncmFtCitjYWxsZWQgYGF1dG9jb25mJy4gIFlvdSBvbmx5IG5lZWQgYGNvbmZpZ3VyZS5pbicgaWYgeW91IHdhbnQgdG8gY2hhbmdlCitpdCBvciByZWdlbmVyYXRlIGBjb25maWd1cmUnIHVzaW5nIGEgbmV3ZXIgdmVyc2lvbiBvZiBgYXV0b2NvbmYnLgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIGNvbXBpbGUgdGhpcyBwYWNrYWdlIGlzOgorCisgIDEuIGBjZCcgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBwYWNrYWdlJ3Mgc291cmNlIGNvZGUgYW5kIHR5cGUKKyAgICAgYC4vY29uZmlndXJlJyB0byBjb25maWd1cmUgdGhlIHBhY2thZ2UgZm9yIHlvdXIgc3lzdGVtLiAgSWYgeW91J3JlCisgICAgIHVzaW5nIGBjc2gnIG9uIGFuIG9sZCB2ZXJzaW9uIG9mIFN5c3RlbSBWLCB5b3UgbWlnaHQgbmVlZCB0byB0eXBlCisgICAgIGBzaCAuL2NvbmZpZ3VyZScgaW5zdGVhZCB0byBwcmV2ZW50IGBjc2gnIGZyb20gdHJ5aW5nIHRvIGV4ZWN1dGUKKyAgICAgYGNvbmZpZ3VyZScgaXRzZWxmLgorCisgICAgIFJ1bm5pbmcgYGNvbmZpZ3VyZScgdGFrZXMgYXdoaWxlLiAgV2hpbGUgcnVubmluZywgaXQgcHJpbnRzIHNvbWUKKyAgICAgbWVzc2FnZXMgdGVsbGluZyB3aGljaCBmZWF0dXJlcyBpdCBpcyBjaGVja2luZyBmb3IuCisKKyAgMi4gVHlwZSBgbWFrZScgdG8gY29tcGlsZSB0aGUgcGFja2FnZS4KKworICAzLiBPcHRpb25hbGx5LCB0eXBlIGBtYWtlIGNoZWNrJyB0byBydW4gYW55IHNlbGYtdGVzdHMgdGhhdCBjb21lIHdpdGgKKyAgICAgdGhlIHBhY2thZ2UuCisKKyAgNC4gVHlwZSBgbWFrZSBpbnN0YWxsJyB0byBpbnN0YWxsIHRoZSBwcm9ncmFtcyBhbmQgYW55IGRhdGEgZmlsZXMgYW5kCisgICAgIGRvY3VtZW50YXRpb24uCisKKyAgNS4gWW91IGNhbiByZW1vdmUgdGhlIHByb2dyYW0gYmluYXJpZXMgYW5kIG9iamVjdCBmaWxlcyBmcm9tIHRoZQorICAgICBzb3VyY2UgY29kZSBkaXJlY3RvcnkgYnkgdHlwaW5nIGBtYWtlIGNsZWFuJy4gIFRvIGFsc28gcmVtb3ZlIHRoZQorICAgICBmaWxlcyB0aGF0IGBjb25maWd1cmUnIGNyZWF0ZWQgKHNvIHlvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IKKyAgICAgYSBkaWZmZXJlbnQga2luZCBvZiBjb21wdXRlciksIHR5cGUgYG1ha2UgZGlzdGNsZWFuJy4gIFRoZXJlIGlzCisgICAgIGFsc28gYSBgbWFrZSBtYWludGFpbmVyLWNsZWFuJyB0YXJnZXQsIGJ1dCB0aGF0IGlzIGludGVuZGVkIG1haW5seQorICAgICBmb3IgdGhlIHBhY2thZ2UncyBkZXZlbG9wZXJzLiAgSWYgeW91IHVzZSBpdCwgeW91IG1heSBoYXZlIHRvIGdldAorICAgICBhbGwgc29ydHMgb2Ygb3RoZXIgcHJvZ3JhbXMgaW4gb3JkZXIgdG8gcmVnZW5lcmF0ZSBmaWxlcyB0aGF0IGNhbWUKKyAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitDb21waWxlcnMgYW5kIE9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PQorCisgICBTb21lIHN5c3RlbXMgcmVxdWlyZSB1bnVzdWFsIG9wdGlvbnMgZm9yIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgdGhhdAordGhlIGBjb25maWd1cmUnIHNjcmlwdCBkb2VzIG5vdCBrbm93IGFib3V0LiAgWW91IGNhbiBnaXZlIGBjb25maWd1cmUnCitpbml0aWFsIHZhbHVlcyBmb3IgdmFyaWFibGVzIGJ5IHNldHRpbmcgdGhlbSBpbiB0aGUgZW52aXJvbm1lbnQuICBVc2luZworYSBCb3VybmUtY29tcGF0aWJsZSBzaGVsbCwgeW91IGNhbiBkbyB0aGF0IG9uIHRoZSBjb21tYW5kIGxpbmUgbGlrZQordGhpczoKKyAgICAgQ0M9Yzg5IENGTEFHUz0tTzIgTElCUz0tbHBvc2l4IC4vY29uZmlndXJlCisKK09yIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZSBgZW52JyBwcm9ncmFtLCB5b3UgY2FuIGRvIGl0IGxpa2UgdGhpczoKKyAgICAgZW52IENQUEZMQUdTPS1JL3Vzci9sb2NhbC9pbmNsdWRlIExERkxBR1M9LXMgLi9jb25maWd1cmUKKworQ29tcGlsaW5nIEZvciBNdWx0aXBsZSBBcmNoaXRlY3R1cmVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgWW91IGNhbiBjb21waWxlIHRoZSBwYWNrYWdlIGZvciBtb3JlIHRoYW4gb25lIGtpbmQgb2YgY29tcHV0ZXIgYXQgdGhlCitzYW1lIHRpbWUsIGJ5IHBsYWNpbmcgdGhlIG9iamVjdCBmaWxlcyBmb3IgZWFjaCBhcmNoaXRlY3R1cmUgaW4gdGhlaXIKK293biBkaXJlY3RvcnkuICBUbyBkbyB0aGlzLCB5b3UgbXVzdCB1c2UgYSB2ZXJzaW9uIG9mIGBtYWtlJyB0aGF0CitzdXBwb3J0cyB0aGUgYFZQQVRIJyB2YXJpYWJsZSwgc3VjaCBhcyBHTlUgYG1ha2UnLiAgYGNkJyB0byB0aGUKK2RpcmVjdG9yeSB3aGVyZSB5b3Ugd2FudCB0aGUgb2JqZWN0IGZpbGVzIGFuZCBleGVjdXRhYmxlcyB0byBnbyBhbmQgcnVuCit0aGUgYGNvbmZpZ3VyZScgc2NyaXB0LiAgYGNvbmZpZ3VyZScgYXV0b21hdGljYWxseSBjaGVja3MgZm9yIHRoZQorc291cmNlIGNvZGUgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IGBjb25maWd1cmUnIGlzIGluIGFuZCBpbiBgLi4nLgorCisgICBJZiB5b3UgaGF2ZSB0byB1c2UgYSBgbWFrZScgdGhhdCBkb2VzIG5vdCBzdXBwb3J0cyB0aGUgYFZQQVRIJwordmFyaWFibGUsIHlvdSBoYXZlIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG9uZSBhcmNoaXRlY3R1cmUgYXQgYSB0aW1lCitpbiB0aGUgc291cmNlIGNvZGUgZGlyZWN0b3J5LiAgQWZ0ZXIgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBwYWNrYWdlIGZvcgorb25lIGFyY2hpdGVjdHVyZSwgdXNlIGBtYWtlIGRpc3RjbGVhbicgYmVmb3JlIHJlY29uZmlndXJpbmcgZm9yIGFub3RoZXIKK2FyY2hpdGVjdHVyZS4KKworSW5zdGFsbGF0aW9uIE5hbWVzCis9PT09PT09PT09PT09PT09PT0KKworICAgQnkgZGVmYXVsdCwgYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIHRoZSBwYWNrYWdlJ3MgZmlsZXMgaW4KK2AvdXNyL2xvY2FsL2JpbicsIGAvdXNyL2xvY2FsL21hbicsIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeSBhbgoraW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIGAvdXNyL2xvY2FsJyBieSBnaXZpbmcgYGNvbmZpZ3VyZScgdGhlCitvcHRpb24gYC0tcHJlZml4PVBBVEgnLgorCisgICBZb3UgY2FuIHNwZWNpZnkgc2VwYXJhdGUgaW5zdGFsbGF0aW9uIHByZWZpeGVzIGZvcgorYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzIGFuZCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMuICBJZiB5b3UKK2dpdmUgYGNvbmZpZ3VyZScgdGhlIG9wdGlvbiBgLS1leGVjLXByZWZpeD1QQVRIJywgdGhlIHBhY2thZ2Ugd2lsbCB1c2UKK1BBVEggYXMgdGhlIHByZWZpeCBmb3IgaW5zdGFsbGluZyBwcm9ncmFtcyBhbmQgbGlicmFyaWVzLgorRG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZGF0YSBmaWxlcyB3aWxsIHN0aWxsIHVzZSB0aGUgcmVndWxhciBwcmVmaXguCisKKyAgIEluIGFkZGl0aW9uLCBpZiB5b3UgdXNlIGFuIHVudXN1YWwgZGlyZWN0b3J5IGxheW91dCB5b3UgY2FuIGdpdmUKK29wdGlvbnMgbGlrZSBgLS1iaW5kaXI9UEFUSCcgdG8gc3BlY2lmeSBkaWZmZXJlbnQgdmFsdWVzIGZvciBwYXJ0aWN1bGFyCitraW5kcyBvZiBmaWxlcy4gIFJ1biBgY29uZmlndXJlIC0taGVscCcgZm9yIGEgbGlzdCBvZiB0aGUgZGlyZWN0b3JpZXMKK3lvdSBjYW4gc2V0IGFuZCB3aGF0IGtpbmRzIG9mIGZpbGVzIGdvIGluIHRoZW0uCisKKyAgIElmIHRoZSBwYWNrYWdlIHN1cHBvcnRzIGl0LCB5b3UgY2FuIGNhdXNlIHByb2dyYW1zIHRvIGJlIGluc3RhbGxlZAord2l0aCBhbiBleHRyYSBwcmVmaXggb3Igc3VmZml4IG9uIHRoZWlyIG5hbWVzIGJ5IGdpdmluZyBgY29uZmlndXJlJyB0aGUKK29wdGlvbiBgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVgnIG9yIGAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCcuCisKK09wdGlvbmFsIEZlYXR1cmVzCis9PT09PT09PT09PT09PT09PQorCisgICBTb21lIHBhY2thZ2VzIHBheSBhdHRlbnRpb24gdG8gYC0tZW5hYmxlLUZFQVRVUkUnIG9wdGlvbnMgdG8KK2Bjb25maWd1cmUnLCB3aGVyZSBGRUFUVVJFIGluZGljYXRlcyBhbiBvcHRpb25hbCBwYXJ0IG9mIHRoZSBwYWNrYWdlLgorVGhleSBtYXkgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGAtLXdpdGgtUEFDS0FHRScgb3B0aW9ucywgd2hlcmUgUEFDS0FHRQoraXMgc29tZXRoaW5nIGxpa2UgYGdudS1hcycgb3IgYHgnIChmb3IgdGhlIFggV2luZG93IFN5c3RlbSkuICBUaGUKK2BSRUFETUUnIHNob3VsZCBtZW50aW9uIGFueSBgLS1lbmFibGUtJyBhbmQgYC0td2l0aC0nIG9wdGlvbnMgdGhhdCB0aGUKK3BhY2thZ2UgcmVjb2duaXplcy4KKworICAgRm9yIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIGBjb25maWd1cmUnIGNhbiB1c3VhbGx5CitmaW5kIHRoZSBYIGluY2x1ZGUgYW5kIGxpYnJhcnkgZmlsZXMgYXV0b21hdGljYWxseSwgYnV0IGlmIGl0IGRvZXNuJ3QsCit5b3UgY2FuIHVzZSB0aGUgYGNvbmZpZ3VyZScgb3B0aW9ucyBgLS14LWluY2x1ZGVzPURJUicgYW5kCitgLS14LWxpYnJhcmllcz1ESVInIHRvIHNwZWNpZnkgdGhlaXIgbG9jYXRpb25zLgorCitTcGVjaWZ5aW5nIHRoZSBTeXN0ZW0gVHlwZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgVGhlcmUgbWF5IGJlIHNvbWUgZmVhdHVyZXMgYGNvbmZpZ3VyZScgY2FuIG5vdCBmaWd1cmUgb3V0CithdXRvbWF0aWNhbGx5LCBidXQgbmVlZHMgdG8gZGV0ZXJtaW5lIGJ5IHRoZSB0eXBlIG9mIGhvc3QgdGhlIHBhY2thZ2UKK3dpbGwgcnVuIG9uLiAgVXN1YWxseSBgY29uZmlndXJlJyBjYW4gZmlndXJlIHRoYXQgb3V0LCBidXQgaWYgaXQgcHJpbnRzCithIG1lc3NhZ2Ugc2F5aW5nIGl0IGNhbiBub3QgZ3Vlc3MgdGhlIGhvc3QgdHlwZSwgZ2l2ZSBpdCB0aGUKK2AtLWhvc3Q9VFlQRScgb3B0aW9uLiAgVFlQRSBjYW4gZWl0aGVyIGJlIGEgc2hvcnQgbmFtZSBmb3IgdGhlIHN5c3RlbQordHlwZSwgc3VjaCBhcyBgc3VuNCcsIG9yIGEgY2Fub25pY2FsIG5hbWUgd2l0aCB0aHJlZSBmaWVsZHM6CisgICAgIENQVS1DT01QQU5ZLVNZU1RFTQorCitTZWUgdGhlIGZpbGUgYGNvbmZpZy5zdWInIGZvciB0aGUgcG9zc2libGUgdmFsdWVzIG9mIGVhY2ggZmllbGQuICBJZgorYGNvbmZpZy5zdWInIGlzbid0IGluY2x1ZGVkIGluIHRoaXMgcGFja2FnZSwgdGhlbiB0aGlzIHBhY2thZ2UgZG9lc24ndAorbmVlZCB0byBrbm93IHRoZSBob3N0IHR5cGUuCisKKyAgIElmIHlvdSBhcmUgYnVpbGRpbmcgY29tcGlsZXIgdG9vbHMgZm9yIGNyb3NzLWNvbXBpbGluZywgeW91IGNhbiBhbHNvCit1c2UgdGhlIGAtLXRhcmdldD1UWVBFJyBvcHRpb24gdG8gc2VsZWN0IHRoZSB0eXBlIG9mIHN5c3RlbSB0aGV5IHdpbGwKK3Byb2R1Y2UgY29kZSBmb3IgYW5kIHRoZSBgLS1idWlsZD1UWVBFJyBvcHRpb24gdG8gc2VsZWN0IHRoZSB0eXBlIG9mCitzeXN0ZW0gb24gd2hpY2ggeW91IGFyZSBjb21waWxpbmcgdGhlIHBhY2thZ2UuCisKK1NoYXJpbmcgRGVmYXVsdHMKKz09PT09PT09PT09PT09PT0KKworICAgSWYgeW91IHdhbnQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBgY29uZmlndXJlJyBzY3JpcHRzIHRvIHNoYXJlLAoreW91IGNhbiBjcmVhdGUgYSBzaXRlIHNoZWxsIHNjcmlwdCBjYWxsZWQgYGNvbmZpZy5zaXRlJyB0aGF0IGdpdmVzCitkZWZhdWx0IHZhbHVlcyBmb3IgdmFyaWFibGVzIGxpa2UgYENDJywgYGNhY2hlX2ZpbGUnLCBhbmQgYHByZWZpeCcuCitgY29uZmlndXJlJyBsb29rcyBmb3IgYFBSRUZJWC9zaGFyZS9jb25maWcuc2l0ZScgaWYgaXQgZXhpc3RzLCB0aGVuCitgUFJFRklYL2V0Yy9jb25maWcuc2l0ZScgaWYgaXQgZXhpc3RzLiAgT3IsIHlvdSBjYW4gc2V0IHRoZQorYENPTkZJR19TSVRFJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlIHNpdGUgc2NyaXB0LgorQSB3YXJuaW5nOiBub3QgYWxsIGBjb25maWd1cmUnIHNjcmlwdHMgbG9vayBmb3IgYSBzaXRlIHNjcmlwdC4KKworT3BlcmF0aW9uIENvbnRyb2xzCis9PT09PT09PT09PT09PT09PT0KKworICAgYGNvbmZpZ3VyZScgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29udHJvbCBob3cgaXQKK29wZXJhdGVzLgorCitgLS1jYWNoZS1maWxlPUZJTEUnCisgICAgIFVzZSBhbmQgc2F2ZSB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdHMgaW4gRklMRSBpbnN0ZWFkIG9mCisgICAgIGAuL2NvbmZpZy5jYWNoZScuICBTZXQgRklMRSB0byBgL2Rldi9udWxsJyB0byBkaXNhYmxlIGNhY2hpbmcsIGZvcgorICAgICBkZWJ1Z2dpbmcgYGNvbmZpZ3VyZScuCisKK2AtLWhlbHAnCisgICAgIFByaW50IGEgc3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0byBgY29uZmlndXJlJywgYW5kIGV4aXQuCisKK2AtLXF1aWV0JworYC0tc2lsZW50JworYC1xJworICAgICBEbyBub3QgcHJpbnQgbWVzc2FnZXMgc2F5aW5nIHdoaWNoIGNoZWNrcyBhcmUgYmVpbmcgbWFkZS4gIFRvCisgICAgIHN1cHByZXNzIGFsbCBub3JtYWwgb3V0cHV0LCByZWRpcmVjdCBpdCB0byBgL2Rldi9udWxsJyAoYW55IGVycm9yCisgICAgIG1lc3NhZ2VzIHdpbGwgc3RpbGwgYmUgc2hvd24pLgorCitgLS1zcmNkaXI9RElSJworICAgICBMb29rIGZvciB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGluIGRpcmVjdG9yeSBESVIuICBVc3VhbGx5CisgICAgIGBjb25maWd1cmUnIGNhbiBkZXRlcm1pbmUgdGhhdCBkaXJlY3RvcnkgYXV0b21hdGljYWxseS4KKworYC0tdmVyc2lvbicKKyAgICAgUHJpbnQgdGhlIHZlcnNpb24gb2YgQXV0b2NvbmYgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYGNvbmZpZ3VyZScKKyAgICAgc2NyaXB0LCBhbmQgZXhpdC4KKworYGNvbmZpZ3VyZScgYWxzbyBhY2NlcHRzIHNvbWUgb3RoZXIsIG5vdCB3aWRlbHkgdXNlZnVsLCBvcHRpb25zLgpkaWZmIC0tZ2l0IGEvc3JjL0lOU1RBTExhbWkudHh0IGIvc3JjL0lOU1RBTExhbWkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhY2Q2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvSU5TVEFMTGFtaS50eHQKQEAgLTAsMCArMSwzNCBAQAorSU5TVEFMTGFtaS50eHQgLSBJbnN0YWxsYXRpb24gb2YgVmltIGZyb20gc291cmNlIG9uIEFtaWdhCisKK1RoaXMgZmlsZSBjb250YWlucyBpbnN0cnVjdGlvbnMgZm9yIGNvbXBpbGluZyBWaW0uIElmIHlvdSBhbHJlYWR5IGhhdmUgYW4KK2V4ZWN1dGFibGUgdmVyc2lvbiBvZiBWaW0sIHlvdSBkb24ndCBuZWVkIHRoaXMuCisKK1RoZSBmaWxlICJmZWF0dXJlLmgiIGNhbiBiZSBlZGl0ZWQgdG8gbWF0Y2ggeW91ciBwcmVmZXJlbmNlcy4gWW91IGNhbiBza2lwCit0aGlzLCB0aGVuIHlvdSB3aWxsIGdldCB0aGUgZGVmYXVsdCBiZWhhdmlvciBhcyBpcyBkb2N1bWVudGVkLCB3aGljaCBzaG91bGQKK2JlIGZpbmUgZm9yIG1vc3QgcGVvcGxlLgorCisKK1N1bW1hcnk6CittYWtlIC1mIE1ha2VfbWFueC5tYWsJCU1hbnggQworbWFrZSAtZiBNYWtlX3Nhcy5tYWsJCUxhdHRpY2UvU0FTIEMKK21ha2UgLWYgTWFrZV9kaWNlLm1hawkJRElDRQorCitUaGUgTWFueCBjb21waWxlciBpcyBwcmVmZXJyZWQsIGl0IHdhcyB1c2VkIHRvIHByb2R1Y2UgdGhlIEFtaWdhIGV4ZWN1dGFibGUKK2FuZCBoYXMgYmVlbiB0ZXN0ZWQgbW9zdC4gWW91IHNob3VsZCBub3QgZ2V0IGFueSBlcnJvcnMgb3Igd2FybmluZ3MuCisKK1RoZSBTQVMgY29tcGlsZXIgY2FuIGJlIHVzZWQuIE9sZGVyIHZlcnNpb25zICg2LjAgdG8gNi4zKSBkb24ndCB3b3JrIHdpdGggdGhlCitvcHRpbWl6ZXIgc3dpdGNoZWQgb24uIFRoaXMgc2VlbXMgdG8gYmUgZml4ZWQgd2l0aCA2LjUgb3IgNi41NiwgYnV0IHRoaXMgaGFzCitub3QgYmVlbiB0ZXN0ZWQgbXVjaC4gIEFsc28gZGlzYWJsZSBvcHRpbWl6aW5nIHdoZW4gdGhlIGNvbXBpbGVyIHJ1bnMgb3V0IG9mCittZW1vcnkgb3IgY3Jhc2hlcyB0aGUgc3lzdGVtICh5ZXMsIHRoYXQgaGFwcGVuczsgZGlkIEkgc2F5IHRoZSBNYW54IGNvbXBpbGVyCitpcyBwcmVmZXJyZWQ/KS4KKworVGhlIERJQ0UgbWFrZWZpbGUgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gd29yayBieSBvbmUgcGVyc29uIG9ubHkuCisKK1lvdSB3aWxsIGhhdmUgdG8gc2V0IHRoZSAiVklNIiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlCitkb2N1bWVudGF0aW9uIGZpbGVzLgorCisKK01vcnBoT1MKKworVXNlIHRoZSBNYWtlX21vcnBoLm1hayBNYWtlZmlsZToKKwltYWtlIC1mIE1ha2VfbW9ycGgubWFrCmRpZmYgLS1naXQgYS9zcmMvSU5TVEFMTG1hYy50eHQgYi9zcmMvSU5TVEFMTG1hYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5NDRjMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9JTlNUQUxMbWFjLnR4dApAQCAtMCwwICsxLDE2NCBAQAorSU5TVEFMTG1hYy50eHQgLSBJbnN0YWxsYXRpb24gb2YgVmltIG9uIE1hY2ludG9zaAorCitUaGlzIGZpbGUgY29udGFpbnMgaW5zdHJ1Y3Rpb25zIGZvciBjb21waWxpbmcgVmltLiBJZiB5b3UgYWxyZWFkeSBoYXZlIGFuCitleGVjdXRhYmxlIHZlcnNpb24gb2YgVmltLCB5b3UgZG9uJ3QgbmVlZCB0aGlzLgorCitBbiBhbHRlcm5hdGUgd2F5IG9mIGJ1aWxkaW5nIHRoYXQgQmVuamkgRmlzaGVyIHVzZXMgY2FuIGJlIGZvdW5kIGhlcmU6CisKKwlodHRwOi8vbWFjdmltLnN3ZGV2Lm9yZy9PU1gvI0RldmVsb3BlcnMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3VtbWFyeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxIE1hY09TIFgKKyAxLjEuIENhcmJvbiBpbnRlcmZhY2UKKyAxLjIuIFggKEF0aGVuYSwgR1RLLCBNb3RpZikgb3IgcGxhaW4gdGV4dC4KKworMiBNYWNPUyBDbGFzc2ljCisgMi4xLiBDb2RlV2FycmlvcgorIDIuMi4gTVBXCisKK05PVEU6IFRoZSBDYXJib24gdmVyc2lvbiBjYW4gb25seSBiZSBjb21waWxlZCBwcm9wZXJseSB1bmRlcgorICAgICAgTWFjT1MgWC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMSBNYWNPUyBYCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuMCBDb25zaWRlcmF0aW9ucworCisgT25seSAnLycgc3VwcG9ydGVkIGFzIHBhdGggc2VwYXJhdG9yLgorCisxLjEgQ2FyYm9uIGludGVyZmFjZSAoZGVmYXVsdCkKKworIFlvdSBjYW4gY29tcGlsZSB2aW0gd2l0aCB0aGUgc3RhbmRhcmQgVW5peCByb3V0aW5lOgorICAgY2QgLi4KKyAgIC4vY29uZmlndXJlCisgICBtYWtlOyBtYWtlIGluc3RhbGwKKworIFRoaXMgd2lsbCBjcmVhdGUgYSB3b3JraW5nIFZpbS5hcHAgYXBwbGljYXRpb24gYnVuZGxlIGluIHRoZSBzcmMKKyBkaXJlY3RvcnkuICBZb3UgY2FuIG1vdmUgdGhpcyBidW5kbGUgKHRoZSBWaW0uYXBwIGRpcmVjdG9yeSkgYW55d2hlcmUKKyB5b3Ugd2FudCwgZm9yIGV4YW1wbGUsIC9BcHBsaWNhdGlvbnMuCisKKzEuMiBYLVdpbmRvd3Mgb3IgUGxhaW4gVGV4dAorCisgSWYgeW91IGRvIG5vdCB3YW50IHRoZSBDYXJib24gaW50ZXJmYWNlLCB5b3UgbXVzdCBleHBsaWNpdGx5IHRlbGwKKyBjb25maWd1cmUgdG8gdXNlIGEgZGlmZmVyZW50IEdVSS4KKworICBjZCAuLgorICAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1ndWk9Z3RrMgorICBtYWtlOyBtYWtlIGluc3RhbGwKKworIE5PVEU6IFRoZSBmb2xsb3dpbmcgR1VJIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDoKKwlubyAoZm9yIHRleHQpLCBtb3RpZiwgYXRoZW5hLCBuZXh0YXcKKwlndGssIGd0azIsIGdub21lLCBnbm9tZTIsCisKKyBOT1RFOiBZb3UgbmVlZCB0byBmaXJzdCBpbnN0YWxsIFhGcmVlODYgYW5kIFhEYXJ3aW4uCisgICAgICAgUGxlYXNlIHZpc2l0IGh0dHA6Ly93d3cuWERhcndpbi5vcmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWFjT1MgOQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCb3RoICc6JyBhbmQgJy8nIHN1cHBvcnRlZCBhcyBwYXRoIHNlcGFyYXRvci4KKworMi4xOiBDb21waWxpbmcgd2l0aCBDb2RlV2FyaW9yCisKKyAxLiBFeHBhbmQgdGhlIHJlc291cmNlIGZpbGU6CisgICBvcGVuIC4uL3NyYy9vc19tYWMucnNyLmhxeCB0byBwcm9kdWNlIC4uL3NyYy9ndWlfbWFjLnJzcmM6CisgICAlIGNkIHZpbTYyL3NyYworICAgJSBvcGVuIC1hIFN0dWZmSXRcIEV4cGFuZGVyIG9zX21hYy5yc3IuaHF4CisKKyAyLiBFeHBhbmQgdGhlIHByb2plY3QgZmlsZToKKyAgIC0gLi4vc3JjL29zX21hYy5zaXQuaHF4ICh0byBwcm9kdWNlIC4uL3NyYy92aW0ubWNwKQorCisgMy4gT3BlbiB2aW0ubWNwIHdpdGggQ29kZVdhcmlvcgorCisgICBUaGlzIGlzIGEgQ29kZVdhcmlvciA5IHByb2plY3QgZmlsZS4gV2hlbiB1c2luZyBhIG5ld2VyIHZlcnNpb24sCisgICB5b3UgbmVlZCB0byBjb252ZXJ0IHRoZSBmaWxlLiB5b3UgbWF5IGFsc28gbmVlZCB0byBjaGFuZ2Ugc29tZQorICAgYWNjZXNzIHBhdGguCisKKyAgIE5PVEU6IHRoZSBjdXJyZW50IHByb2plY3QgZmlsZSBpcyBvbGQsIHlvdSBuZWVkIHRvIGFkZCBhIGZldyBmaWxlczoKKwkgKGV4X2NtZHMyLmMsIGZvbGQuYywgbWJ5dGUuYywgbW92ZS5jKQorCisgNC4gU2VsZWN0IHRoZSB0YXJnZXQgUFBDLCA2OGsgRkFUICh3aXRoL3dpdGhvdXQgZGVidWdnZXIpCisKKyA1LiBDb21waWxlCisKKzIuMjogQ29tcGlsaW5nIHdpdGggTVBXLgorCisgMC4gWW91IHdpbGwgbmVlZCBhIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBNUFcgYW5kIHRoZSBVbml2ZXJzYWwgSW50ZXJmYWNlcy4KKyAgICBZb3UgY2FuIGdldCBib3RoIGF0OgorCWZ0cDovL2Z0cC5hcHBsZS5jb20vZGV2ZWxvcGVyL1Rvb2xfQ2hlc3QvSW50ZXJmYWNlcy1MaWJyYXJpZXMvCisJZnRwOi8vZnRwLmFwcGxlLmNvbS9kZXZlbG9wZXIvVG9vbF9DaGVzdC9Db3JlX01hY19PU19Ub29scy8KKyAgIEZvciBhIENhcmJvbiB2ZXJzaW9uIHlvdSB3aWxsIG5lZWQgYSByZWNlbnQgQ2FyYm9uIFNESyBhcyB3ZWxsLgorICAgKFdoZW4geW91IGhhdmUgYW4gb2xkZXIgdmVyc2lvbiBhbHJlYWR5IGluc3RhbGxlZCB5b3Ugbm90IGJlIGFibGUgdG8KKyAgICBjb21waWxlIGEgY2FyYm9uIHZlcnNpb24uIFVwZGF0ZSAiQ3JlYXRlTWFrZSIgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgICAgQXBwbGUuCisKKyAxLiBFeHBhbmQgdGhlIHJlc291cmNlIGZpbGU6CisgICBvcGVuIC4uL3NyYy9vc19tYWMucnNyLmhxeCB0byBwcm9kdWNlIC4uL3NyYy9ndWlfbWFjLnJzcmM6CisgICAlIGNkIHZpbTYyL3NyYworICAgJSBvcGVuIC1hIFN0dWZmSXRcIEV4cGFuZGVyIG9zX21hYy5yc3IuaHF4CisKKyAzLiBEb3VibGUgY2xpY2sgb24gb3NfbWFrZS5tYWtlLCB0aGUgTVBXIHdpbGwgbm93IG9wZW4gaW4gdGhlIGNvcnJlY3QKKyAgICBmb2xkZXIgYW5kIGxvYWQgdGhlIENyZWF0ZVZpbU1ha2Ugc2NyaXB0LiBDaGFuZ2UgdG8gdGhlIFdvcmtzaGVldAorICAgIHdpbmRvdy4gVHlwZSAib3NfbWFjLmJ1aWxkIiBhbmQgaGl0IEVudGVyIChub3QgUmV0dXJuKS4gQSBkaWFsb2cgYm94CisgICAgd2lsbCBhcHBlYXIuIFNlbGVjdCB0aGUgdGFyZ2V0IHlvdSB3YW50LiAoVmltLTY4aywgVmltLXBwYywgVmltLWNhcmJvbikKKworIDQuIFNlbGVjdCAiQnVpbGQiIGZyb20gdGhlIG1lbnUgKG9yIHR5cGUgY29tbWFuZC1CKS4gVHlwZSB0aGUgcHJvZ3JhbSBuYW1lCisgICAgaW50byB0aGUgZGlhbG9nIGJveC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09MRCBGSUxFOiBTT01FIElORk8gTUFZIFNUSUxMIEJFIFVTRUZVTAorCitOT1RFOiBVc2VycyBvZiBtb3JlIHJlY2VudCBDb2RlV2FycmlvciB2ZXJzaW9uIG1heSBoYXZlIHRvIHJlc2V0IHRoZSBsaWJyYXJ5CisgICAgICBwYXRoLCBhbmQgY2hhbmdlIHRoZSBtY2hfZGVsYXkgaW4gb3NfbWFjLmMgc28gdGhlIGZpbmFsVGljayBpcyB1bnNpZ25lZC4KKworQ29tcGlsYXRpb24gaW5zdHJ1Y3Rpb25zOgorCisxLiBWaXNpdCB0aGUgVmltIGZ0cCBzaXRlIChzZWUgZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS9NSVJST1JTKQorICAgYW5kIG9idGFpbiB0aGUgZm9sbG93aW5nIGZpdmUgZmlsZXM6CisKKyAgIHVuaXgvdmltLVguWC1zcmMxLnRhci5negorICAgdW5peC92aW0tWC5YLXNyYzIudGFyLmd6CisgICB1bml4L3ZpbS1YLlgtcnQxLnRhci5negorICAgdW5peC92aW0tWC5YLXJ0Mi50YXIuZ3oKKyAgIGV4dHJhL3ZpbS1YLlgtZXh0cmEudGFyLmd6CisKKyAgIHdoZXJlIFguWCBpcyB0aGUgdmVyc2lvbiBudW1iZXIuCisKKyAgIE5PVEU6IHRoZSBsYW5ndWFnZSBzdXBwb3J0IGlzIG5vdCB5ZXQgc3VwcG9ydGVkCisKKzIuIEV4cGFuZCB0aGUgYXJjaGl2ZXMuCisKKzMuIEFwcGx5IHBhdGNoZXMgaWYgdGhleSBleGlzdC4gIChQYXRjaCBmaWxlcyBhcmUgZm91bmQgaW4gdGhlIGZ0cAorICAgc2l0ZSBpbiB0aGUgInBhdGNoZXMiIGRpcmVjdG9yeS4pCisKKzQuIEVkaXQgdmltLVguWC9zcmMvZmVhdHVyZS5oIGZvciB5b3VyIHByZWZlcmVuY2UuICAoWW91IGNhbiBza2lwCisgICB0aGlzLCB0aGVuIHlvdSB3aWxsIGdldCB0aGUgZGVmYXVsdCBiZWhhdmlvciBhcyBpcyBkb2N1bWVudGVkLAorICAgd2hpY2ggc2hvdWxkIGJlIGZpbmUgZm9yIG1vc3QgcGVvcGxlLikKKworICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFkZCB0aGUgRkVBVF9NQllURSBmZWF0dXJlLCB0dXJuIG9uCisgICAjZGVmaW5lIEZFQVRfTUJZVEUKKworNS4gRXhwYW5kIHRoZSByZXNvdXJjZSBmaWxlOgorCisgICAtIHZpbS1YLlgvc3JjL29zX21hYy5yc3IuaHF4ICh0byBwcm9kdWNlIHZpbS1YLlgvc3JjL2d1aV9tYWMucnNyYykKKworNi4gSWYgdXNpbmcgQ29kZVdhcnJpb3IsIGV4cGFuZCB0aGUgcHJvamVjdCBmaWxlOgorCisgICAtIHZpbS1YLlgvc3JjL29zX21hYy5zaXQuaHF4ICh0byBwcm9kdWNlIHZpbS1YLlgvc3JjL3ZpbS5tY3ApCisKKyAgIFRoZSBsYXR0ZXIgZmlsZSBpcyB0aGUgQ29kZVdhcnJpb3IgcHJvamVjdCBmaWxlIHRvIGJlIHVzZWQuCisKKzcuIExhdW5jaCBDb2RlV2FycmlvciBieSBkb3VibGUgY2xpY2tpbmcgdmltLm1jcC4KKworOC4gQ2hlY2sgYWRkaXRpb25hbCBmaWxlcyBpZiB5b3UgaW5jbHVkZSBub24tc3RhbmRhcmQgZmVhdHVyZXMuCisKKyAgIEZvciBleGFtcGxlLCBpZiB5b3UgYWRkZWQgdGhlIE1VTFRJX0JZVEUgZmVhdHVyZSwgY2hlY2sKKyAgIEV4dHJhcy9tYnl0ZS5jIGluIHRoZSBwcm9qZWN0IHdpbmRvdy4KKworOS4gQ29tcGlsZSBhbmQgeW91IHdpbGwgb2J0YWluIGJpbmFyaWVzOiB2aW1QUEMsIFZpbSA2OGssIGFuZC9vciB2aW1GQVQuCmRpZmYgLS1naXQgYS9zcmMvSU5TVEFMTHBjLnR4dCBiL3NyYy9JTlNUQUxMcGMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlN2QzMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvSU5TVEFMTHBjLnR4dApAQCAtMCwwICsxLDMxMCBAQAorSU5TVEFMTHBjLnR4dCAtIEluc3RhbGxhdGlvbiBvZiBWaW0gb24gUEMKKworVGhpcyBmaWxlIGNvbnRhaW5zIGluc3RydWN0aW9ucyBmb3IgY29tcGlsaW5nIFZpbS4gSWYgeW91IGFscmVhZHkgaGF2ZSBhbgorZXhlY3V0YWJsZSB2ZXJzaW9uIG9mIFZpbSwgeW91IGRvbid0IG5lZWQgdGhpcy4KKworTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaGVyZToKKworCWh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwcGVvcGxlL3ZpbS9ob3d0by8KKworVGhlIGZpbGUgImZlYXR1cmUuaCIgY2FuIGJlIGVkaXRlZCB0byBtYXRjaCB5b3VyIHByZWZlcmVuY2VzLiBZb3UgY2FuIHNraXAKK3RoaXMsIHRoZW4geW91IHdpbGwgZ2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFzIGlzIGRvY3VtZW50ZWQsIHdoaWNoIHNob3VsZAorYmUgZmluZSBmb3IgbW9zdCBwZW9wbGUuCisKKworQ29udGVudHM6CisxLiBNUy1ET1MKKzIuIFdpbjMyIChXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDk1KQorMy4gV2luZG93cyBOVCB3aXRoIE9wZW5OVAorNC4gV2luZG93cyAzLjEKKzUuIFVzaW5nIE1pbmd3Cis2LiBDcm9zcyBjb21waWxpbmcgZm9yIFdpbjMyIGZyb20gYSBMaW51eCBtYWNoaW5lCis3LiBCdWlsZGluZyB3aXRoIFB5dGhvbiBzdXBwb3J0CisKKworMS4gTVMtRE9TCis9PT09PT09PT0KKworU3VtbWFyeToKK3JlbiBNYWtlX2JjMy5tYWsgTWFrZWZpbGU7IG1ha2UgICAgICAxNiBiaXQsIEJvcmxhbmQgQysrIGFuZCBUdXJibyBDKysKK3JlbiBNYWtlX3RjYy5tYWsgTWFrZWZpbGU7IG1ha2UJICAgICAxNiBiaXQsIFR1cmJvIEMKK21ha2UgLWYgTWFrZV9kamcubWFrCQkgICAgIDMyIGJpdCwgREpHUFAgMi4wCittYWtlIC1mIE1ha2VfYmM1Lm1hawkJICAgICAzMiBiaXQsIEJvcmxhbmQgQysrIDUuMCAoZWRpdCBpdCB0bworCQkJCQkgICAgIGRlZmluZSBET1MpCisKK1dhcm5pbmc6IEJlIHN1cmUgdG8gdXNlIHRoZSByaWdodCBtYWtlLmV4ZS4gIE1pY3Jvc29mdCBDIG1ha2UgZG9lc24ndCB3b3JrOworQm9ybGFuZCBtYWtlIG9ubHkgd29ya3Mgd2l0aCBNYWtlX2JjMy5tYWssIE1ha2VfYmM1Lm1hayBhbmQgTWFrZV90Y2MubWFrOworREpHUFAvR05VIG1ha2UgbXVzdCBiZSB1c2VkIGZvciBNYWtlX2RqZy5tYWsuCisKK1RoZSBCb3JsYW5kIEMrKyBjb21waWxlciBoYXMgYmVlbiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBNUy1ET1MgZXhlY3V0YWJsZTsgaXQKK3Nob3VsZCB3b3JrIHdpdGhvdXQgcHJvYmxlbXMuIFlvdSB3aWxsIHByb2JhYmx5IGhhdmUgdG8gY2hhbmdlIHRoZSBwYXRocyBmb3IKK0xJQlBBVEggYW5kIElOQ0xVREVQQVRIIGluIHRoZSBzdGFydCBvZiB0aGUgTWFrZWZpbGUuICBZb3Ugd2lsbCBnZXQgdHdvCit3YXJuaW5ncyB3aGljaCBjYW4gYmUgaWdub3JlZCAob25lIGFib3V0IF9jaG1vZCBhbmQgb25lIGFib3V0IHByZWNvbXBpbGVkCitoZWFkZXIgZmlsZXMpLgorCitUaGUgInNwYXdubyIgbGlicmFyeSBieSBSYWxmIEJyb3duIHdhcyB1c2VkIGluIG9yZGVyIHRvIGZyZWUgbWVtb3J5IHdoZW4gVmltCitzdGFydHMgYSBzaGVsbCBvciBvdGhlciBleHRlcm5hbCBjb21tYW5kLiAgT25seSBhYm91dCAyMDAgYnl0ZXMgYXJlIHRha2VuIGZyb20KK2NvbnZlbnRpb25hbCBtZW1vcnkuICBXaGVuIHJlY29tcGlsaW5nIGdldCB0aGUgc3Bhd25vIGxpYnJhcnkgZnJvbSBTaW10ZWwsCitkaXJlY3RvcnkgIm1zZG9zL2MiLiAgSXQgaXMgY2FsbGVkIHNvbWV0aGluZyBsaWtlICJzcHdubzQxMy56aXAiLiAgT3IgZm9sbG93Cit0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBNYWtlZmlsZSB0byByZW1vdmUgdGhlIGxpYnJhcnkuCisKK1RoZSBUdXJibyBDIE1ha2VmaWxlIGhhcyBub3QgYmVlbiB0ZXN0ZWQgbXVjaCBsYXRlbHkuIEl0IGlzIGluY2x1ZGVkIGZvciB0aG9zZQordGhhdCBkb24ndCBoYXZlIEMrKy4gWW91IG1heSBuZWVkIHRvIG1ha2UgYSBmZXcgY2hhbmdlcyB0byBnZXQgaXQgdG8gd29yay4KKworREpHUFAgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIHByb3Blcmx5IHRvIGNvbXBpbGUgVmltOyB5b3UgbmVlZCBhIGxvdCBvZiB0aGluZ3MKK2JlZm9yZSBpdCB3b3Jrcy4gV2hlbiB5b3VyIHNldHVwIGlzIE9LLCBWaW0gc2hvdWxkIGNvbXBpbGUgd2l0aCBqdXN0IG9uZQord2FybmluZyAoYWJvdXQgYW4gYXJndW1lbnQgdG8gc2lnbmFsKCkpLgorCitNYWtlX2JjNS5tYWsgaXMgZm9yIHRob3NlIHRoYXQgaGF2ZSBCb3JsYW5kIEMrKyA1LjAgb3IgbGF0ZXIuICBBdCB0aGUgdG9wIG9mCit0aGUgZmlsZSwgdGhlcmUgYXJlIHNvbWUgdmFyaWFibGVzIHlvdSBjYW4gY2hhbmdlIHRvIG1ha2UgZWl0aGVyIGEgMzItYml0CitXaW5kb3dzIGV4ZSAoR1VJIG9yIGNvbnNvbGUgbW9kZSksIG9yIGEgMTYtYml0IE1TLURPUyB2ZXJzaW9uLgorCitJZiB5b3UgZ2V0IGFsbCBraW5kcyBvZiBzdHJhbmdlIGVycm9yIG1lc3NhZ2VzIHdoZW4gY29tcGlsaW5nLCB0cnkgYWRkaW5nIDxDUj4KK2NoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUuCisKKworMi4gV2luMzIgKFdpbmRvd3MgTlQgYW5kIFdpbmRvd3MgOTUpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU3VtbWFyeToKK3ZjdmFyczMyCQkJCSAgU2V0dXAgcGF0aHMgZm9yIG5tYWtlIGFuZCBNU1ZDCisKK25tYWtlIC1mIE1ha2VfbXZjLm1hawkJY29uc29sZSAgIFdpbjMyIFNESyBvciBNaWNyb3NvZnQgVmlzdWFsIEMrKworbm1ha2UgLWYgTWFrZV9tdmMubWFrIEdVST15ZXMJR1VJCSAgTWljcm9zb2Z0IFZpc3VhbCBDKysKK25tYWtlIC1mIE1ha2VfbXZjLm1hayBPTEU9eWVzCU9MRQkgIE1pY3Jvc29mdCBWaXN1YWwgQysrCitubWFrZSAtZiBNYWtlX212Yy5tYWsgUEVSTD1DOlxQZXJsIFBZVEhPTj1DOlxQeXRob24gZXRjLgorCQkJCVBlcmwsIFB5dGhvbiwgZXRjLgorCQkJCQkgIE1pY3Jvc29mdCBWaXN1YWwgQysrCisKK21ha2UgIC1mIE1ha2VfYmM1Lm1hawkJR1VJCSAgQm9ybGFuZCBDKysgNS54CittYWtlICAtZiBNYWtlX2JjNS5tYWsJCWNvbnNvbGUJICBCb3JsYW5kIEMrKyA1LnggKGNoYW5nZSB0aGUgZmlsZSkKK25tYWtlIC1mIE1ha2VfaXZjLm1hayBDRkc9IlZpbSAtIFdpbjMyIFJlbGVhc2UgZ3ZpbSIKKwkJCQlHVUkJICBNaWNyb3NvZnQgVmlzdWFsIEMrKyA0Lnggb3IgbGF0ZXIKK25tYWtlIC1mIE1ha2VfaXZjLm1hayBDRkc9IlZpbSAtIFdpbjMyIFJlbGVhc2UgZ3ZpbSBPTEUiCisJCQkJT0xFCSAgTWljcm9zb2Z0IFZpc3VhbCBDKysgNC54IG9yIGxhdGVyCisKK21ha2UgIC1mIE1ha2VfY3lnLm1hawkJdmFyaW91cyAgIEN5Z251cyBnY2MKK21ha2UgIC1mIE1ha2VfbWluZ3cubWFrCQl2YXJpb3VzICAgTWluZ1cgd2l0aCBnY2MKKworU2VlIHRoZSBzcGVjaWZpYyBmaWxlcyBmb3IgY29tbWVudHMgYW5kIG9wdGlvbnMuCisKK1RoZXNlIGZpbGVzIGhhdmUgYmVlbiBzdXBwbGllZCBieSBHZW9yZ2UgVi4gUmVpbGx5LCBCZW4gU2luZ2VyLCBLZW4gU2NvdHQgYW5kCitSb24gQWFyb247IHRoZXkgaGF2ZSBiZWVuIHRlc3RlZC4gIFRoZSBDeWdudXMgb25lIG1hbnkgbm90IGZ1bGx5IHdvcmsgeWV0LgorV2l0aCBDeWdudXMgZ2NjIHlvdSBjYW4gdXNlIHRoZSBVbml4IE1ha2VmaWxlIGluc3RlYWQgKHlvdSBuZWVkIHRvIGdldCB0aGUKK1VuaXggYXJjaGl2ZSB0aGVuKS4gIFRoZW4geW91IGdldCBhIEN5Z3dpbiBhcHBsaWNhdGlvbiAoZmVlbHMgbGlrZSBWaW0gaXMKK3J1bm5pbiBvbiBVbml4KSwgd2hpbGUgd2l0aCBNYWtlX2N5Zy5tYWsgeW91IGdldCBhIFdpbmRvd3MgYXBwbGljYXRpb24gKGxpa2UKK3dpdGggdGhlIG90aGVyIG1ha2VmaWxlcykuCisKK1lvdSBjYW4gYWxzbyB1c2UgdGhlIFZpc3VhbCBDKysgSURFOiB1c2UgRmlsZS9PcGVuIHdvcmtzcGFjZSwgc2VsZWN0IHRoZQorTWFrZV9pdmMubWFrIGZpbGUsIHRoZW4gc2VsZWN0IEJ1aWxkL0J1aWxkIGFsbC4gIFRoaXMgYnVpbGRzIHRoZSBHVUkgdmVyc2lvbgorYnkgZGVmYXVsdC4KKworVmltIGZvciBXaW4zMiBjb21waWxlcyB3aXRoIHRoZSBNaWNyb3NvZnQgVmlzdWFsIEMrKyAyLjAgY29tcGlsZXIgYW5kIGxhdGVyLAorYW5kIHdpdGggdGhlIEJvcmxhbmQgQysrIDQuNSAzMi1iaXQgY29tcGlsZXIgYW5kIGxhdGVyLiAgSXQgY29tcGlsZXMgb24KK1dpbmRvd3MgOTUgYW5kIGFsbCBmb3VyIE5UIHBsYXRmb3JtczogaTM4NiwgQWxwaGEsIE1JUFMsIGFuZCBQb3dlclBDLiAgVGhlCitOVC9pMzg2IGFuZCB0aGUgV2luZG93cyA5NSBiaW5hcmllcyBhcmUgaWRlbnRpY2FsLiAgVXNlIE1ha2VfbXZjLm1hayB0bworY29tcGlsZSB3aXRoIFZpc3VhbCBDKysgYW5kIE1ha2VfYmM1Lm1hayB0byBjb21waWxlIHdpdGggQm9ybGFuZCBDKysuCisKK01ha2VfbXZjLm1hayBhbGxvd3MgYSBWaW0gdG8gYmUgYnVpbHQgd2l0aCB2YXJpb3VzIGRpZmZlcmVudCBmZWF0dXJlcyBhbmQKK2RlYnVnIHN1cHBvcnQuICBEZWJ1Z2dpbmcgd2l0aCBNUyBEZXZzdHVkaW8gaXMgcHJvdmlkZWQgYnkgTWFrZV9kdmMubWFrLgorRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHVzZSBvZiBNYWtlX2R2Yy5tYWssIGxvb2sgaW4gTWFrZV9tdmMubWFrLgorCitGb3IgY29tcGlsaW5nIEd2aW0gd2l0aCBJTUUgc3VwcG9ydCBvbiBmYXItZWFzdCBXaW5kb3dzLCB1bmNvbW1lbnQgdGhlCitNVUxUSV9CWVRFX0lNRSBkZWZpbmUgaW4gdGhlIHNyYy9mZWF0dXJlLmggZmlsZSBiZWZvcmUgY29tcGlsaW5nLgorCitUaGUgV2luMzIgY29uc29sZSBiaW5hcnkgd2FzIGNvbXBpbGVkIHdpdGggVmlzdWFsIEMrKyB2ZXJzaW9uIDUuMCwgdXNpbmcKK01ha2VfbXZjLm1hayBhbmQgTWFrZV9iYzUubWFrIChCb3JsYW5kIEMpLiAgT3RoZXIgY29tcGlsZXJzIHNob3VsZCBhbHNvIHdvcmsuCitJZiB5b3UgZ2V0IGFsbCBraW5kcyBvZiBzdHJhbmdlIGVycm9yIG1lc3NhZ2VzIHdoZW4gY29tcGlsaW5nICh5b3Ugc2hvdWxkbid0Cit3aXRoIHRoZSBNaWNyb3NvZnQgb3IgQm9ybGFuZCAzMi1iaXQgY29tcGlsZXJzKSwgdHJ5IGFkZGluZyA8Q1I+IGNoYXJhY3RlcnMKK2F0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLgorCitZb3UgcHJvYmFibHkgbmVlZCB0byBydW4gInZjdmFyczMyIiBiZWZvcmUgdXNpbmcgIm5tYWtlIi4KKworRm9yIG1ha2luZyB0aGUgV2luMzJzIHZlcnNpb24sIHlvdSBuZWVkIE1pY3Jvc29mdCBWaXN1YWwgQysrIDQuMSBPUiBFQVJMSUVSLgorSW4gdmVyc2lvbiA0LjIgc3VwcG9ydCBmb3IgV2luMzJzIHdhcyBkcm9wcGVkISAgVXNlIHRoaXMgY29tbWFuZDoKKwlubWFrZSAtZiBNYWtlX212Yy5tYWsgR1VJPXllcworCitTZWUgdGhlIHJlc3BlY3RpdmUgTWFrZWZpbGVzIGZvciBtb3JlIGNvbW1lbnRzLgorCisKKzMuIFdpbmRvd3MgTlQgd2l0aCBPcGVuTlQKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworKGNvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgQS4gQmVuemluZ2VyKQorCitCdWlsZGluZyBWaW0gb24gT3Blbk5UIDIuMCBvbiBXaW5kb3dzIE5UIDQuMCwgd2l0aCBTb2Z0d2F5J3MgcHJlcmVsZWFzZSBnY2M6CisxLiBleHBvcnQgQ09ORklHX1NIRUxMPS8vRC9PcGVuTlQvYmluL3NoCisyLiBNYWtlIHRoZSBmb2xsb3dpbmcgZXhwb3J0cyBmb3IgbW9kaWZ5aW5nIGNvbmZpZy5tazoKKwlleHBvcnQgQ0ZMQUdTPS1PIC1Xc2hhZG93CisJZXhwb3J0IFhfUFJFX0xJQlM9LWxYbXUKKzIuIFJ1biBjb25maWd1cmUgYXMgZm9sbG93czoKKwljb25maWd1cmUgLS1wcmVmaXg9L3ZpbSAtLWJpbmRpcj0vYmluL29wZW5udCAtLWVuYWJsZS1ndWk9TW90aWYKKyAgIElmIHlvdSBkb24ndCBoYXZlIE9wZW5OVGlmIChNb3RpZiBzdXBwb3J0KSwgdXNlIHRoaXM6CisJY29uZmlndXJlIC0tcHJlZml4PS92aW0gLS1iaW5kaXI9L2Jpbi9vcGVubnQgLS1lbmFibGUtZ3VpPUF0aGVuYQorMy4gRWRpdCBNYWtlZmlsZSB0byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc2luY2UgdGhlIE1ha2VmaWxlIGluY2x1ZGUgc3ludGF4CisgICBkaWZmZXJzIGZyb20gdGhhdCBvZiBnbWFrZToKKwkjaW5jbHVkZSBjb25maWcubWsKKwkuaW5jbHVkZSAiY29uZmlnLm1rIgorNC4gQ2hhbmdlIGFsbCBpbnN0YWxsIGxpbmtzIHRvIGJlICJsbiAtZiIgYW5kIG5vdCAibG4gLXMiLgorNS4gQ2hhbmdlIHRvIHRoZSAnY3RhZ3MnIGRpcmVjdG9yeSBhbmQgY29uZmlndXJlLgorNi4gRWRpdCB0aGUgTWFrZWZpbGUgYW5kIHJlbW92ZSBzcHVyaW91cyBzcGFjZXMgZnJvbSBsaW5lcyA5OSBhbmQgMTE0LgorNy4gQ2hhbmdlIHNsaW5rIHRvICJsbiAtZiIgZnJvbSAibG4gLXMiLgorOC4gUmV0dXJuIHRvIHRoZSBzcmMgZGlyZWN0b3J5LgorOS4gbWFrZQorCisKKzQuIFdpbmRvd3MgMy4xeAorPT09PT09PT09PT09PT09CisKK21ha2UgLWYgTWFrZV93MTYubWFrCQkgICAgIDE2IGJpdCwgQm9ybGFuZCBDKysgNS4wCisKK1dhcm5pbmc6IEJlIHN1cmUgdG8gdXNlIHRoZSByaWdodCBtYWtlLmV4ZS4gIEl0IHNob3VsZCBiZSBCb3JsYW5kIG1ha2UuCisKK1lvdSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgaGF2ZSB0byBjaGFuZ2UgdGhlIHBhdGhzIGZvciBsaWJzIGFuZCBpbmNsdWRlIGZpbGVzCitpbiB0aGUgTWFrZWZpbGUuICBMb29rIGZvciAiRDpcQkM1IiBhbmQgImN0bDNkdjIiLiAgWW91IHdpbGwgZ2V0IGEgbnVtYmVyIG9mCit3YXJuaW5ncyB3aGljaCBjYW4gYmUgaWdub3JlZCAoIF9jaG1vZCwgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGVzLCBhbmQKKyJwb3NzaWJseSBpbmNvcnJlY3QgYXNzaWdubWVudCIpLgorCitUaGUgbWFrZWZpbGUgc2hvdWxkIGFsc28gd29yayBmb3IgQkMrKyA0LjAgYW5kIDQuNSwgYnV0IG1heSBuZWVkIHR3ZWFraW5nIHRvCityZW1vdmUgdW5zdXBwb3J0ZWQgY29tcGlsZXIgJiBsaWtlciBvcHRpb25zLgorCisKKzUuIE1pbmd3Cis9PT09PT09PQorCisod3JpdHRlbiBieSBSb24gQWFyb246IDxyb25haGFyb25AeWFob28uY29tPikKKworVGhpcyBpcyBhYm91dCBob3cgdG8gcHJvZHVjZSBhIFdpbjMyIGJpbmFyeSBvZiBndmltIHdpdGggTWluZ3cuCisKK0ZpcnN0LCB5b3UgbmVlZCB0byBnZXQgdGhlICdtaW5ndzMyJyBjb21waWxlciwgd2hpY2ggaXMgZnJlZSBmb3IgdGhlIGRvd25sb2FkCithdDoKKworCWh0dHA6Ly93d3cubWluZ3cub3JnLworCitPbmNlIHlvdSBoYXZlIGRvd25sb2FkZWQgdGhlIGNvbXBpbGVyIGJpbmFyaWVzLCB1bnBhY2sgdGhlbSBvbiB5b3VyIGhhcmQgZGlzaworc29tZXdoZXJlLCBhbmQgcHV0IHRoZW0gb24geW91ciBQQVRILiAgSWYgeW91IGFyZSBvbiBXaW45NS85OCB5b3UgY2FuIGVkaXQKK3lvdXIgQVVUT0VYRUMuQkFUIGZpbGUgd2l0aCBhIGxpbmUgbGlrZToKKworCXNldCBQQVRIPUM6XEdDQy0yLjk1LjJcQklOOyVQQVRIJQorCitvciBvbiBOVC8yMDAwLCBnbyB0byB0aGUgQ29udHJvbCBQYW5lbCwgU3lzdGVtLCBhbmQgZWRpdCB0aGUgZW52aXJvbm1lbnQgZnJvbQordGhlcmUuCisKK1Rlc3QgaWYgZ2NjIGlzIG9uIHlvdXIgcGF0aC4gIEZyb20gYSBDTUQgKG9yIENPTU1BTkQgb24gJzk1Lzk4KToKKworCUM6XD4gZ2NjIC0tdmVyc2lvbgorCTIuOTUuMgorCisJQzpcPiBtYWtlIC0tdmVyc2lvbgorCUdOVSBNYWtlIHZlcnNpb24gMy43NyAoLi4uZXRjLi4uKQorCitOb3cgeW91IGFyZSByZWFkeSB0byByb2NrICduJyByb2xsLiAgVW5wYWNrIHRoZSB2aW0gc291cmNlcyAobG9vayBvbgord3d3LnZpbS5vcmcgZm9yIGV4YWN0bHkgd2hpY2ggdmVyc2lvbiBvZiB0aGUgdmltIGZpbGVzIHlvdSBuZWVkKS4KKworQ2hhbmdlIGRpcmVjdG9yeSB0byAndmltXHNyYyc6CisKKwlDOlw+IGNkIHZpbVxzcmMKKwlDOlxWSU1cU1JDPgorCithbmQgeW91IHR5cGU6CisKKwltYWtlIC1mIE1ha2VfbWluZy5tYWsgZ3ZpbS5leGUKKworQWZ0ZXIgY2h1cm5pbmcgZm9yIGEgd2hpbGUsIHlvdSB3aWxsIGVuZCB1cCB3aXRoICdndmltLmV4ZScgaW4gdGhlICd2aW1cc3JjJworZGlyZWN0b3J5LgorCitZb3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGRvICphbnkqIGVkaXRpbmcgb2YgYW55IGZpbGVzIHRvIGdldCB2aW0gY29tcGlsZWQgdGhpcword2F5LiAgSWYsIGZvciBzb21lIHJlYXNvbiwgeW91IHdhbnQgdGhlIGNvbnNvbGUtbW9kZS1vbmx5IHZlcnNpb24gb2YgdmltICh0aGlzCitpcyBOT1QgcmVjb21tZW5kZWQgb24gV2luMzIsIGVzcGVjaWFsbHkgb24gJzk1Lyc5OCEhISksIHlvdSBuZWVkIG9ubHkgY2hhbmdlCit0aGUgJ2d2aW0uZXhlJyB0byAndmltLmV4ZScgaW4gdGhlICdtYWtlJyBjb21tYW5kcyBnaXZlbiBhYm92ZS4KKworSWYgeW91IGFyZSBkaXNtYXllZCBieSBob3cgYmlnIHRoZSBFWEUgaXMsIEkgc3Ryb25nbHkgcmVjb21tZW5kIHlvdSBnZXQgJ1VQWCcKKyhhbHNvIGZyZWUhKSBhbmQgY29tcHJlc3MgdGhlIGZpbGUgKHR5cGljYWwgY29tcHJlc3Npb24gaXMgNTAlKS4gVVBYIGNhbiBiZQorZm91bmQgYXQKKwlodHRwOi8vdXB4LnRzeC5vcmcvCisKKworQURESVRJT046IE5MUyBzdXBwb3J0IHdpdGggTWluZ3cKKworKGJ5IEVkdWFyZG8gRi4gQW1hdHJpYSA8ZWZlcm5hMUBwbGF0ZWEucG50aWMubWVjLmVzPikKKworSWYgeW91IHdhbnQgTmF0aW9uYWwgTGFuZ3VhZ2UgU3VwcG9ydCwgcmVhZCB0aGUgZmlsZSBzcmMvcG8vUkVBRE1FX21pbmd3LnR4dC4KK1lvdSBuZWVkIHRvIHVuY29tbWVudCBsaW5lcyBpbiBNYWtlX21pbmcubWFrIHRvIGhhdmUgTkxTIGRlZmluZWQuCisKKworNi4gQ3Jvc3MgY29tcGlsaW5nIGZvciBXaW4zMiBmcm9tIGEgTGludXggbWFjaGluZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisod3JpdHRlbiBieSBSb24gQWFyb246IDxyb25haGFyb25AeWFob28uY29tPiB3aXRoIGhlbHAgZnJvbQorTWFydGluIEthaGxlcnQgPG1hcnRpbi5rYWhsZXJ0QGluZmluZW9uLmNvbT4pCisKK0lmIHlvdSBsaWtlLCB5b3UgY2FuIGNvbXBpbGUgdGhlICdtaW5ndycgV2luMzIgdmVyc2lvbiBmcm9tIHRoZSBjb21mb3J0IG9mCit5b3VyIExpbnV4IChvciBvdGhlciB1bml4KSBib3guICBUbyBkbyB0aGlzLCB5b3UgbmVlZCB0byBmb2xsb3cgYSBmZXcgc3RlcHM6CisKKwkxKSBJbnN0YWxsIHRoZSBtaW5ndzMyIGNyb3NzLWNvbXBpbGVyIChpZiB5b3UgaGF2ZSBpdCwgZ28gdG8gc3RlcCAyKQorCQkxYSkgZnJvbSAnZnRwOi8vZnRwLm5hbm90ZWNoLndpc2MuZWR1L3B1Yi9raGFuL2dudS13aW4zMi9taW5ndzMyL3NuYXBzaG90cy9nY2MtMi45NS4yLTEnLAorCQkJZ2V0OgorCQkJCWJpbnV0aWxzLTE5OTkwODE4LTEtc3JjLnRhci5negorCQkJCW1pbmd3LW1zdmNydC0yMDAwMDIwMy56aXAKKwkJCQlnY2MtMi45NS4yLTEteDg2LXdpbjMyLmRpZmYuZ3oKKwkJMWIpIGZyb20gJ2h0dHA6Ly9nY2MuZ251Lm9yZy8nIGdldDoKKwkJCQlnY2MtMi45NS4yLnRhci5negorCQkxYykgY3JlYXRlIGEgcGxhY2UgdG8gcHV0IHRoZSBjb21waWxlciBzb3VyY2UgYW5kIGJpbmFyaWVzOgorCQkJKGFzc3VtaW5nIHlvdSBhcmUgaW4gdGhlIGhvbWUgZGlyZWN0b3J5KQorCQkJbWtkaXIgZ2NjLWJpbgorCQkJbWtkaXIgZ2NjLXNyYworCQkxZCkgdW5wYWNrIHRoZSBzb3VyY2VzOgorCQkJY2QgZ2NjLXNyYworCQkJdGFyIHh6ZiAuLi9iaW51dGlscy0xOTk5MDgxOC0xLXNyYy50YXIuZ3oKKwkJCXRhciB4emYgLi4vZ2NjLTIuOTUuMi50YXIuZ3oKKwkJCXVuemlwIC4uL21pbmd3LW1zdmNydC0yMDAwMDIwMworCQkxZSkgYnVpbGQgdGhlIGRpZmZlcmVudCB0b29sczoKKwkJCWV4cG9ydCBQUkVGSVg9fi9nY2MtYmluLworCQkJY2QgZ2NjLTIuOTUuMgorCQkJemNhdCAuLi9nY2MtMi45NS4yLTEteDg2LXdpbjMyLmRpZmYuZ3ogfCBwYXRjaCAtcDEgLUUKKwkJCWNkIC4uL2JpbnV0aWxzLTE5OTkwODE4CisJCQkuL2NvbmZpZ3VyZSAtLXRhcmdldD1pNTg2LXBjLW1pbmd3MzJtc3ZjIC0tcHJlZml4PSRQUkVGSVgKKwkJCW1ha2UKKwkJCW1ha2UgaW5zdGFsbAorCQkJY2QgLi4vZ2NjLTIuOTUuMgorCQkJLi9jb25maWd1cmUgLS10YXJnZXQ9aTU4Ni1wYy1taW5ndzMybXN2YyBcCisJCQkJLS13aXRoLWxpYnM9fi9nY2MtYmluL2kzODYtbWluZ3czMm1zdmMvbGliIFwKKwkJCQktLXdpdGgtaGVhZGVycz1+L2djYy1iaW4vaTM4Ni1taW5ndzMybXN2Yy9pbmNsdWRlIFwKKwkJCQktLWVuYWJsZS1sYW5ndWFnZXM9YysrIFwKKwkJCQktLXByZWZpeD0kUFJFRklYCisJCQltYWtlCisJCQltYWtlIGluc3RhbGwKKwkJMWYpIEFkZCAkUFJFRklYL2JpbiB0byB5b3VyICRQQVRILgorCisJMikgZ2V0IHRoZSAqdW5peCogdmVyc2lvbiBvZiB0aGUgdmltIHNvdXJjZXMKKwkzKSBpbiAnTWFrZV9taW5nLm1haycsIHNldCAnQ1JPU1MnIHRvICcxJyBpbnN0ZWFkIG9mICcwJy4KKwk0KSBtYWtlIC1mIE1ha2VfbWluZy5tYWsgZ3ZpbS5leGUKKworTm93IHlvdSBoYXZlIGNyZWF0ZWQgdGhlIFdpbmRvd3MgYmluYXJ5IGZyb20geW91ciBMaW51eCBib3ghICBIYXZlIGZ1bi4uLgorCis3LiBCdWlsZGluZyB3aXRoIFB5dGhvbiBzdXBwb3J0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyh3cml0dGVuIGJ5IFJvbiBBYXJvbjogPHJvbmFoYXJvbkB5YWhvby5jb20+KQorCitUaGlzIGhhcyBiZWVuIHRlc3RlZCB3aXRoIHRoZSBtaW5ndzMyIGNvbXBpbGVyLCBhbmQgdGhlIEFjdGl2ZVN0YXRlCitBY3RpdmVQeXRob246CisgICAgaHR0cDovL3d3dy5BY3RpdmVTdGF0ZS5jb20vUHJvZHVjdHMvQWN0aXZlUHl0aG9uLworCitBZnRlciBpbnN0YWxsaW5nIHRoZSBBY3RpdmVQeXRob24sIHlvdSB3aWxsIGhhdmUgdG8gY3JlYXRlIGEgJ21pbmd3MzInCisnbGlicHl0aG9uMjAuYScgdG8gbGluayB3aXRoOgorICAgY2QgJFBZVEhPTi9saWJzCisgICBwZXhwb3J0cyBweXRob24yMC5kbGwgPiBweXRob24yMC5kZWYKKyAgIGRsbHRvb2wgLWQgcHl0aG9uMjAuZGVmIC1sIGxpYnB5dGhvbjIwLmEKKworT25jZSB0aGF0IGlzIGRvbmUsIGVkaXQgdGhlICdNYWtlX21pbmcubWFrJyBzbyB0aGUgUFlUSE9OIHZhcmlhYmxlIHBvaW50cyB0bwordGhlIHJvb3Qgb2YgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24gKEM6XFB5dGhvbjIwLCBmb3IgZXhhbXBsZSkuICBJZiB5b3UgYXJlCitjcm9zcy1jb21waWxpbmcgb24gTGludXggd2l0aCB0aGUgbWluZ3czMiBzZXR1cCwgeW91IG5lZWQgdG8gYWxzbyBjb252ZXJ0IGFsbAordGhlICdJbmNsdWRlJyBmaWxlcyB0byAqdW5peCogbGluZS1lbmRpbmdzLiAgVGhpcyBiYXNoIGNvbW1hbmQgd2lsbCBkbyBpdAorZWFzaWx5OgorICAgZm9yIGZpbCBpbiAqLmggOyBkbyB2aW0gLWUgLWMgJ3NldCBmZj11bml4fHd8cScgJGZpbAorCitOb3cganVzdCBkbzoKKyAgIG1ha2UgLWYgTWFrZV9taW5nLm1hayBndmltLmV4ZQorCithbmQgeW91IHdpbGwgZW5kIHVwIHdpdGggYSBQeXRob24tZW5hYmxlZCwgV2luMzIgdmVyc2lvbi4gIEVuam95IQpkaWZmIC0tZ2l0IGEvc3JjL0lOU1RBTEx2bXMudHh0IGIvc3JjL0lOU1RBTEx2bXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZGY2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvSU5TVEFMTHZtcy50eHQKQEAgLTAsMCArMSwzNzUgQEAKK0lOU1RBTEx2bXMudHh0IC0gSW5zdGFsbGF0aW9uIG9mIFZpbSBvbiBPcGVuVk1TCisKK01haW50YWluZXI6ICAgWm9sdGFuIEFycGFkZmZ5IDxhcnBhZGZmeUBwb2xhcmZveC5jb20+CitMYXN0IGNoYW5nZTogIDIwMDMgTWF5IDA0CisKK1RoaXMgZmlsZSBjb250YWlucyBpbnN0cnVjdGlvbnMgZm9yIGNvbXBpbGluZyBWaW0gb24gT3BlbnZtcy4KK0lmIHlvdSBhbHJlYWR5IGhhdmUgYW4gZXhlY3V0YWJsZSB2ZXJzaW9uIG9mIFZpbSwgeW91IGRvbid0IG5lZWQgdGhpcy4KKworSWYgeW91IHNraXAgc2V0dGluZ3MgZGVzY3JpYmVkIGhlcmUsIHRoZW4geW91IHdpbGwgZ2V0IHRoZSBkZWZhdWx0IFZpbQorYmVoYXZpb3IgYXMgaXQgaXMgZG9jdW1lbnRlZCwgd2hpY2ggc2hvdWxkIGJlIGZpbmUgZm9yIG1vc3QgdXNlcnMuCisKK1RoZSBmaWxlICJmZWF0dXJlLmgiIGNhbiBiZSBlZGl0ZWQgdG8gbWF0Y2ggeW91ciBwcmVmZXJlbmNlcywgYnV0IHRoaXMgZmlsZXMKK2RvZXMgbm90IGRlc2NyaWJlIHBvc3NpYmlsaXRpZXMgaGlkZGVuIGluIGZlYXR1cmUuaCBhY3JvYmF0aWNzLCBob3dldmVyCitwYXJhbWV0ZXJzIGZyb20gTUFLRV9WTVMuTU1TIGFjdGl2ZWx5IHVzZXMgYW5kIHNldHMgdXAgcGFyYW1ldGVycyBpbiByZWxhdGlvbgord2l0aCBmZWF0dXJlLmgKKworTW9yZSBpbmZvcm1hdGlvbiBhbmQgY2FzZSBhbmFseXNpcyB5b3UgY2FuIGZvdW5kIGluIG9zX3Ztcy50eHQKKyhbcnVudGltZS5kb2Ndb3Nfdm1zLnR4dCBvciA6aGVscCB2bXMgZnJvbSB2aW0gcHJvbXB0KQorCitDb250ZW50czoKKzEuIERvd25sb2FkIGZpbGVzCisyLiBDb25maWd1cmF0aW9uCiszLiBDb21waWxhdGlvbiBERUNDCis0LiBDb21waWxhdGlvbiBWQVhDCis1LiBDVEFHUywgWFhECis2LiBEZXBsb3ltZW50Cis3LiBHVEsgYW5kIG90aGVyIGZlYXR1cmVzCis4LiBOb3RlcworOS4gQXV0aG9ycworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxLiBEb3dubG9hZCBmaWxlcworCisxLjEuIFZpc2l0IHRoZSBWaW0gZnRwIHNpdGUgKHNlZSBmdHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL01JUlJPUlMpCisgICAgIGFuZCBvYnRhaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBmaWxlczoKKworICAgICB1bml4L3ZpbS1YLlgtc3JjLnRhci5negorICAgICB1bml4L3ZpbS1YLlgtcnQudGFyLmd6CisgICAgIGV4dHJhL3ZpbS1YLlgtZXh0cmEudGFyLmd6CisKKyAgICAgd2hlcmUgWC5YIGlzIHRoZSB2ZXJzaW9uIG51bWJlci4KKworMS4yLiBFeHBhbmQgdGhlIHRocmVlIGFyY2hpdmVzLgorCisxLjMuIEFwcGx5IHBhdGNoZXMgaWYgdGhleSBleGlzdC4gIChQYXRjaCBmaWxlcyBhcmUgZm91bmQgaW4gdGhlIGZ0cAorICAgICBzaXRlIGluIHRoZSAicGF0Y2hlcyIgZGlyZWN0b3J5LikKKworMS40LiBZb3Ugd2lsbCBuZWVkIGVpdGhlciB0aGUgREVDU0VUIG1tcyB1dGlsaXR5IG9yIHRoZSBmcmVlbHkgYXZhaWxhYmxlIGNsb25lCisgICAgIG9mIGl0IGNhbGxlZCBtbWsgKFZNUyBoYXMgbm8gbWFrZSB1dGlsaXR5IGluIHRoZSBzdGFuZGFyZCBkaXN0cmlidXRpb24pLgorICAgICBZb3UgY2FuIGRvd25sb2FkIG1tayBmcm9tIGh0dHA6Ly93d3cub3BlbnZtcy5kaWdpdGFsLmNvbS9mcmVld2FyZS9NTUsvCisKKzEuNS4gSWYgeW91IHdhbnQgdG8gaGF2ZSBQZXJsLCBQeXRob24gb3IgVGNsIHN1cHBvcnQgaW4gVmltIHlvdSB3aWxsIG5lZWQgVk1TCisgICAgIGRpc3RyaWJ1dGlvbnMgZm9yIHRoZW0gYXMgd2VsbC4KKworMS42ICBJZiB5b3Ugd2FudCB0byBoYXZlIEdUSyBleGVjdXRhYmxlLCB5b3UgbmVlZCB0byBoYXZlIHByb3Blcmx5IGluc3RhbGxlZAorICAgICBHVEsgbGlicmFyaWVzLgorCitOT1RFOiBwcm9jZWR1cmUgaW4gY2hhcHRlciAxIGRlc2NyaWJlcyBzb3VyY2UgY29kZSBwcmVwYXJhdGlvbiBmcm9tIG11bHRpIE9TCitjb2RlLGhvd2V2ZXIgaXQgaXMgYXZhaWxhYmxlIE9wZW5WTVMgb3ByaW1pemVkIChhbmQgdGVzdGVkKSBzb3VyY2UgY29kZSBmcm9tOgorZnRwOi8vZnRwLnBvbGFyaG9tZS5jb20vcHViL3ZpbS9zb3VyY2Uvdm1zLworCitDdXJyZW50IE9wZW5WTVMgc291cmNlIGNvZGUgYXMgLnppcCBvciAudGFyLmd6IGZpbGUgaXMgcG9zc2libGUgdG8gZG93bmxvYWQKK2Zyb20gQ1ZTIG1pcnJvciBmdHA6Ly9mdHAucG9sYXJob21lLmNvbS9wdWIvY3ZzL1NPVVJDRS8KKworCisyLiAgIENvbmZpZ3VyYXRpb24KKworMi4xLiBFZGl0IHZpbS1YLlgvc3JjL2ZlYXR1cmUuaCBmb3IgeW91ciBwcmVmZXJlbmNlLiAgKFlvdSBjYW4gc2tpcAorICAgICB0aGlzLCB0aGVuIHlvdSB3aWxsIGdldCB0aGUgZGVmYXVsdCBiZWhhdmlvciBhcyBpcyBkb2N1bWVudGVkLAorICAgICB3aGljaCBzaG91bGQgYmUgZmluZSBmb3IgbW9zdCBwZW9wbGUuKQorCisgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBhZGQgdGhlIE1VTFRJX0JZVEUgZmVhdHVyZSwgdHVybiBvbgorICAgICAjZGVmaW5lIE1VTFRJX0JZVEUKKworMi4yICBFZGl0IHZpbS1YLlgvc3JjL01ha2Vfdm1zLm1tcyB0byBjdXN0b21pemUgeW91ciBWaW0uIE9wdGlvbnMgYXJlOgorCisJUGFyYW1ldGVyIG5hbWUJOiBNT0RFTAorCURlc2NyaXB0aW9uCTogQnVpbGQgbW9kZWwgc2VsZWN0aW9uCisJT3B0aW9uczoJOiBUSU5ZCSAgLSBBbG1vc3Qgbm8gZmVhdHVyZXMgZW5hYmxlZCwgbm90IGV2ZW4KKwkJCSAgbXVsdGlwbGUgd2luZG93cworCQkJICBTTUFMTCAgIC0gRmV3IGZlYXR1cmVzIGVuYWJsZWQsIGFzIGJhc2ljIGFzIHBvc3NpYmxlCisJCQkgIE5PUk1BTCAgLSBBIGRlZmF1bHQgc2VsZWN0aW9uIG9mIGZlYXR1cmVzIGVuYWJsZWQKKwkJCSAgQklHCSAgLSBNYW55IGZlYXR1cmVzIGVuYWJsZWQsIGFzIHJpY2ggYXMgcG9zc2libGUuCisJCQkgIChPcGVuVk1TIGRlZmF1bHQpCisJCQkgIEhVR0UJICAtIEFsbCBwb3NzaWJsZSBmZWF0dWVzIGVuYWJsZWQuCisJCQkgIFVuY29tbWVudGVkIC0gd2lsbCBkZWZhdWx0IHRvIEJJRworCURlZmF1bHQJCTogTU9ERUwgPSBCSUcKKworCVBhcmFtZXRlciBuYW1lCTogR1VJCisJRGVzY3JpcHRpb24JOiBHVUkgb3IgdGVybWluYWwgbW9kZSBleGVjdXRhYmxlCisJT3B0aW9uczoJOiBZRVMgLSBHVUkgZXhlY3V0YWJsZQorCQkJICBVbmNvbW1lbnRlZCAtIGNoYXIgb25seQorCURlZmF1bHQJCTogR1VJID0gWUVTCisKKwlQYXJhbWV0ZXIgbmFtZQk6IEdUSworCURlc2NyaXB0aW9uCTogRW5hYmxlIEdUSyBpbiBHVUkgbW9kZS4KKwkJCSAgSXQgZW5hYmxlcyBmZWF0dXJlcyBhcyB0b29sYmFyIGV0Yy4KKwlPcHRpb25zOgk6IFlFUyAtIEdUSyBleGVjdXRhYmxlCisJCQkgIFVuY29tbWVudGVkIC0gd2l0aG91dCBHVEsKKwlEZWZhdWx0CQk6IFVuY29tbWVudGVkCisKKwlQYXJhbWV0ZXIgbmFtZQk6IERFQ0MKKwlEZXNjcmlwdGlvbgk6IENvbXBpbGVyIHNlbGVjdGlvbgorCU9wdGlvbnM6CTogWUVTIC0gREVDQyBjb21waWxlcgorCQkJICBVbmNvbW1lbnRlZCAtIFZBWEMgY29tcGlsZXIKKwlEZWZhdWx0CQk6IERFQ0MgPSBZRVMKKworCVBhcmFtZXRlciBuYW1lCTogQ0NWRVIKKwlEZXNjcmlwdGlvbgk6IENvbXBpbGVyIHZlcnNpb24gd2l0aCA6dmVyIGNvbW1hbmQKKwlPcHRpb25zOgk6IFlFUyAtIENvbXBpbGVyIHZlcnNpb24gaW5mbyB3aWxsIGJlIGFkZGVkCisJCQkgIFVuY29tbWVudGVkIC0gd2lsbCBub3QgYmUgYWRkZWQKKwlEZWZhdWx0CQk6IENDVkVSID0gWUVTCisKKwlQYXJhbWV0ZXIgbmFtZQk6IERFQlVHCisJRGVzY3JpcHRpb24JOiBCdWlsZGluZyBhIGRlYnVnIHZlcnNpb24KKwlPcHRpb25zOgk6IFlFUyAtIGRlYnVnIHZlcnNpb24gd2lsbCBiZSBidWlsdAorCQkJICBVbmNvbW1lbnRlZCAtIGJ1aWxkaW5nIG5vcm1hbCBleGVjdXRhYmxlCisJRGVmYXVsdAkJOiBVbmNvbW1lbnRlZAorCisJUGFyYW1ldGVyIG5hbWUJOiBWSU1fVENMCisJRGVzY3JpcHRpb24JOiBBZGQgVGNsIHN1cHBvcnQKKwlPcHRpb25zOgk6IFlFUyAtIEJ1aWxkIHdpdGggc3VwcG9ydAorCQkJICBVbmNvbW1lbnRlZCAtIGJ1aWxkIHdpdGhvdXQgc3VwcG9ydC4KKwlEZWZhdWx0CQk6IFVuY29tbWVudGVkCisKKwlQYXJhbWV0ZXIgbmFtZQk6IFZJTV9QRVJMCisJRGVzY3JpcHRpb24JOiBBZGQgUGVybCBzdXBwb3J0CisJT3B0aW9uczoJOiBZRVMgLSBCdWlsZCB3aXRoIHN1cHBvcnQKKwkJCSAgVW5jb21tZW50ZWQgLSBidWlsZCB3aXRob3V0IHN1cHBvcnQuCisJRGVmYXVsdAkJOiBVbmNvbW1lbnRlZAorCisJUGFyYW1ldGVyIG5hbWUJOiBWSU1fUFlUSE9OCisJRGVzY3JpcHRpb24JOiBBZGQgUHl0aG9uIHN1cHBvcnQKKwlPcHRpb25zOgk6IFlFUyAtIEJ1aWxkIHdpdGggc3VwcG9ydAorCQkJICBVbmNvbW1lbnRlZCAtIGJ1aWxkIHdpdGhvdXQgc3VwcG9ydC4KKwlEZWZhdWx0CQk6IFVuY29tbWVudGVkCisKKworCVBhcmFtZXRlciBuYW1lCTogVklNX1hJTQorCURlc2NyaXB0aW9uCTogWCBJbnB1dCBNZXRob2QuIEZvciBlbnRlcmluZyBzcGVjaWFsIGxhbmd1YWdlcworCQkJICBsaWtlIGNoaW5lc2UgYW5kIEphcGFuZXNlLiBQbGVhc2UgZGVmaW5lIGp1c3QKKwkJCSAgb25lOiBWSU1fWElNIG9yIFZJTV9IQU5HVUxJTgorCU9wdGlvbnM6CTogWUVTIC0gQnVpbGQgd2l0aCBzdXBwb3J0CisJCQkgIFVuY29tbWVudGVkIC0gYnVpbGQgd2l0aG91dCBzdXBwb3J0LgorCURlZmF1bHQJCTogVW5jb21tZW50ZWQKKworCVBhcmFtZXRlciBuYW1lCTogVklNX0hBTkdVTElOCisJRGVzY3JpcHRpb24JOiBJbnRlcm5hbCBIYW5ndWwgaW5wdXQgbWV0aG9kLiBHVUkgb25seS4KKwkJCSAgUGxlYXNlIGRlZmluZSBqdXN0IG9uZTogVklNX1hJTSBvciBWSU1fSEFOR1VMSU4KKwlPcHRpb25zOgk6IFlFUyAtIEJ1aWxkIHdpdGggc3VwcG9ydAorCQkJICBVbmNvbW1lbnRlZCAtIGJ1aWxkIHdpdGhvdXQgc3VwcG9ydC4KKwlEZWZhdWx0CQk6IFVuY29tbWVudGVkCisKKwlQYXJhbWV0ZXIgbmFtZQk6IFZJTV9UQUdfQU5ZV0hJVEUKKwlEZXNjcmlwdGlvbgk6IEFsbG93IGFueSB3aGl0ZSBzcGFjZSB0byBzZXBhcmF0ZSB0aGUgZmllbGRzIGluIGEKKwkJCSAgdGFncyBmaWxlCisJCQkgIFdoZW4gbm90IGRlZmluZWQsIG9ubHkgYSBUQUIgaXMgYWxsb3dlZC4KKwlPcHRpb25zOgk6IFlFUyAtIEJ1aWxkIHdpdGggc3VwcG9ydAorCQkJICBVbmNvbW1lbnRlZCAtIGJ1aWxkIHdpdGhvdXQgc3VwcG9ydC4KKwlEZWZhdWx0CQk6IFVuY29tbWVudGVkCisKKyAgICAgWW91IGNhbiBlZGl0IHRoZSAqX0lOQyBhbmQgKl9MSUIgcXVhbGlmaWVycywgYnV0IGl0IGlzIHJlYWxseQorICAgICBub3QgcmVjb21tZW5kZWQgZm9yIGJlZ2lubmVycy4KKworMy4gQ29tcGlsYXRpb24gREVDQworCiszLjEuIElmIHlvdSBoYXZlIE1TUyBvbiB5b3VyIHN5c3RlbSwgdGhlIGNvbW1hbmQKKworCW1tcyAvZGVzY3JpcD1NYWtlX3Ztcy5tbXMKKworICAgICB3aWxsIHN0YXJ0IGJ1aWxkaW5nIHlvdXIgb3duIGN1c3RvbWl6ZWQgdmVyc2lvbiBvZiBWaW0uCisgICAgIFRoZSBhZGVxdWF0ZSBjb21tYW5kIGZvciBtbWsgaXM6CisKKwltbWsgL2Rlc2NyaXA9TWFrZV92bXMubW1zCisKKyAgICAgTk9URTogQmVjYXVzZSBvZiBlbXB0eSAvYXV0by9jb25maWcuaCAobmVlZGVkIGZvciBVbml4IGNvbmZpZ3VyZSkgYnVpbGQKKyAgICAgd2lsbCBmYWlsIHdpdGggdmVyeSBzdHJhbmdlIG1lc3NhZ2VzLiBUaGVyZWZvcmUgYmVmb3JlIGJ1aWxkaW5nLCBpdCBpcworICAgICByZWNvbW1lbmRlZCB0byBtYWtlIG9uZSBjbGVhbiB1cCwgdG8gcHJlcGFyZSBldmVyeXRoaW5nIGZvciBPcGVuVk1TCisgICAgIGRldmVsb3BtZW50LiBUaGUgY29tbWFuZCBpczoKKworCW1tcyAvZGVzY3JpcD1NYWtlX3Ztcy5tbXMgY2xlYW4KKworNC4gQ29tcGlsYXRpb24gVkFYQworCis0LjEuIFZBWEMgY29tcGlsZXIgaXMgbm90IGZ1bGx5IEFOU0kgQyBjb21wYXRpYmxlIGluIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlcworICAgICBzZW1hbnRpY3MsIHRoZXJlZm9yZSB5b3UgaGF2ZSB0byB1c2UgYSBjb252ZXJ0ZXIgcHJvZ3JhbSB3aGF0IHdpbGwgZG8gdGhlCisgICAgIGxpb24gcGFydCBvZiB0aGUgam9iLgorCisJQG9zX3Ztc19maXguY29tICouYyAqLmggPC5wcm90bz4qLnBybworCisgICAgIG1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIG9zX3Ztc19maXguY29tIGZpbGUgaXRzZWxmLgorCisgICAgIE5PVEU6IGV2ZW4gaWYgb3Nfdm1zX2ZpeC5jb20gd2lsbCBmaXggYWxsIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlcyBpdCB3aWxsCisgICAgIGxlYXZlIHNpbmdlIChsb25nKSBsaW5lIGRpcmVjdGl2ZXMuIFlvdSBoYXZlIHRvIGZpeCB0aGVtIG1hbnVhbGx5LgorICAgICBLbm93biBwcm9ibGVtYXRpYyBmaWxlcyBhcmUgb3B0aW9uLmggYW5kIG9wdGlvbi5jCisKKzQuMi4gQWZ0ZXIgdGhlIGNvbnZlcnNpb24geW91IGNhbiBjb250aW51ZSBidWlsZGluZyBhcyBpdCBoYXMgYmVlbiBkZXNjcmliZWQKKyAgICAgYWJvdmUuCisKKzUuIENUQUdTLCBYWEQKKworNS4xLiBNTVNfVklNLkVYRSBpcyBidWlsZGluZyB0b2dldGhlciB3aXRoIFZJTS5FWEUsIGJ1dCBmb3IgQ1RBR1MuRVhFIGFuZAorICAgICBYWEQuRVhFIHlvdSBzaG91bGQgY2hhbmdlIHRvIHN1YmRpcmVjdG9yeSA8LkNUQUdTPiBvciA8LlhYRD4gYW5kIGJ1aWxkCisgICAgIHRoZW0gc2VwYXJhdGVseS4KKworNS4yLiBJbiB0aGVzZSBkaXJlY3RvcmllcyB5b3UgY2FuIGZvdW5kIG9uZSBtYWtlIGZpbGUgZm9yIFZNUyBhcyB3ZWxsLgorICAgICBQbGVhc2UgcmVhZCB0aGUgZGV0YWlsZWQgYnVpbGQgaW5zdHJ1Y3Rpb25zIGluIHRoZSByZWxhdGVkICouTU1TIGZpbGUuCisKKzYuICAgRGVwbG95bWVudAorCis2LjEuIENvcHkgb3ZlciBhbGwgZXhlY3V0YWJsZXMgdG8gdGhlIGRlcGxveW1lbnQgZGlyZWN0b3J5LgorCis2LjIuIFZpbSB1c2VzIGEgc3BlY2lhbCBkaXJlY3Rvcnkgc3RydWN0dXJlIHRvIGhvbGQgdGhlIGRvY3VtZW50IGFuZCBydW50aW1lCisgICAgIGZpbGVzOgorCisgICB2aW0gKG9yIHdoZXJldmVyKQorICAgIHwtLSBkb2MKKyAgICB8LS0gc3ludGF4CisgICAgdmltcmMgICAgKHN5c3RlbSByYyBmaWxlcykKKyAgICBndmltcmMKKworNi4zIERlZmluZSBsb2dpY2FscyBWSU0KKworCWRlZmluZS9ub2xvZyBWSU0gZGV2aWNlOltsZWFkaW5nLXBhdGgtaGVyZS52aW1dCisKKyAgICAgdG8gZ2V0IHZpbS5leGUgdG8gZmluZCBpdHMgZG9jdW1lbnQsIGZpbGV0eXBlLCBhbmQgc3ludGF4IGZpbGVzLgorCisgICAgIE5vdywgaWYgeW91IGFyZSBsdWNreSB5b3Ugc2hvdWxkIGhhdmUgb25lIG93biBidWlsdCwgY3VzdG9taXplZCBhbmQKKyAgICAgd29ya2luZyBWaW0uCisKKzcuICAgR1RLIGFuZCBvdGhlciBmZWF0dXJlcworCis3LjEgIEdlbmVyYWwgbm90ZXMKKworICAgICBUbyBiZSBhYmxlIHRvIGJ1aWxkIGV4dGVybmFsIEdVSSBvciBsYW5ndWFnZSBzdXBwb3J0IHd5byBoYXZlIHRvIGVuYWJsZQorICAgICByZWxhdGVkIGZlYXR1cmUgaW4gTUFLRV9WTVMuTU1TIGZpbGUuIFVzdWFsbHkgaXQgbmVlZCBzb21lIGV4dHJhIHR1bmluZworICAgICBhcm91bmQgaW5jbHVkZSBmaWxlcywgc2hhcmVkIGxpYnJhcmllcyBldGMuCisKKyAgICAgUGxlYXNlIG5vdGUsIHRoYXQgbGVhZGluZyAiLCIgYXJlIHZhbHVhYmxlIGZvciBNTVMvTU1LIHN5bnRheC4KKworICAgICBNQUtFX1ZNUy5NTVMgdXNlcyBkZWZpbmVzIGFzIGRlc2NyaWJlZCBiZWxvdzoKKworNy4xLjEgICBmZWF0dXJlX0RFRiA9ICwiU09NRV9GRUFUVVJFIgorCisgICAgIFN1Ym1pdHMgZGVmaW5pdGlvbiB0byBjb21waWxlciBwcmVwcm9jZXNzb3IgdG8gZW5hYmxlIGNvZGUgYmxvY2tzCisgICAgIGRlZmluZWQgd2l0aAorICAgICAjaWZkZWYgU09NRV9GRUFUVVJFCisgICAgIHtzb21lIGNvZGUgaGVyZX0KKyAgICAgI2VuZGlmCisKKyAgICAgRXhhbXBsZTogIFRDTF9ERUYgPSAsIkZFQVRfVENMIgorCisKKzcuMS4yICAgZmVhdHVyZV9TUkMgPSBjb2RlMS5jIGNvZGUyLmMKKworICAgICBEZWZpbmVzIHNvdXJjZSBjb2RlIHJlbGF0ZWQgd2l0aCBwYXJ0aWN1bGFyIGZlYXR1cmUuCisgICAgIEV4YW1wbGU6ICBUQ0xfU1JDID0gaWZfdGNsLmMKKworNy4xLjMgICBmZWF0dXJlX09CSiA9IGNvZGUxLm9iaiBjb2RlMi5vYmoKKworICAgICBMaXN0cyBvYmplY3RzIGNyZWF0ZWQgZnJvbSBzb3VyY2UgY29kZXMgbGlzdGVkIGluIGZlYXR1cmVfU1JDCisgICAgIEV4YW1wbGU6IFBFUkxfT0JKID0gaWZfcGVybHNmaW8ub2JqIGlmX3Blcmwub2JqCisKKzcuMS40ICBmZWF0dXJlX0xJQiA9ICxPU19WTVNfVENMLk9QVC9PUFQKKworICAgICBEZWZpbmVzIHRoZSBsaWJyYXJpZXMgdGhhdCBoYXZlIHRvIGJlIHVzZWQgZm9yIGJ1aWxkLgorICAgICBJZiBpdCBpcyBhbiBPUFQgZmlsZSB0aGVuIE1BS0VfVk1TLk1NUyBjcmVhdGVzIE9QVCBmaWxlcworICAgICBpbiBnZW5fZmVhdHVyZSBwcm9jZWR1cmUuCisKKyAgICAgRXhhbXBsZToKKyAgICAgUEVSTF9MSUIgPSAsT1NfVk1TX1BFUkwuT1BUL09QVAorCisuSUZERUYgVklNX1BFUkwKK3BlcmxfZW52IDoKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICJjcmVhdGluZyBPU19WTVNfUEVSTC5PUFQgZmlsZS4iCisJLUAgb3Blbi93cml0ZSBvcHRfZmlsZSBPU19WTVNfUEVSTC5PUFQKKwktQCB3cml0ZSBvcHRfZmlsZSAiUEVSTFNIUiAvc2hhcmUiCisJLUAgY2xvc2Ugb3B0X2ZpbGUKKy5FTFNFCitwZXJsX2VudiA6CisJLUAgIQorLkVORElGCisKKworNy4xLjUgIGZlYXR1cmVfSU5DID0gLGRrYTA6W3RjbDgwLmdlbmVyaWNdCisKKyAgICAgRGVmaW5lcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBuZWNlc3NhcnkgaW5jbHVkZSBmaWxlcyBhcmUuCisgICAgIEV4YW1wbGU6IFRDTF9JTkMgPSAsZGthMDpbdGNsODAuZ2VuZXJpY10KKworNy4yICBHVEsKKworICAgICBUbyBidWlsZCBWSU0gd2l0aCBHVEsgeW91IGhhdmUgdG8gaW5zdGFsbCBHVEsgb24geW91ciBPcGVuVk1TLgorICAgICBTbyBmYXIgaXQgd29ya3MganVzdCBvbiBBbHBoYXMuIE1vcmUgaW5mb3JtYXRpb24gYXQ6CisgICAgIGh0dHA6Ly93d3cub3BlbnZtcy5jb21wYXEuY29tL29wZW52bXMvcHJvZHVjdHMvaXBzL2d0ay5odG1sCisKKyAgICAgWW91IG5lZWQgYWxzbyB0aGUgT3BlblZNUyBQb3J0aW5nIExpYnJhcnk6CisgICAgIGh0dHA6Ly93d3cub3BlbnZtcy5jb21wYXEuY29tL29wZW52bXMvcHJvZHVjdHMvaXBzL3BvcnRpbmcuaHRtbAorCisgICAgIEVuYWJsZSBHVEsgaW4gbWFrZV92bXMubW1zIGZpbGUgd2l0aCBHVEsgPSBZRVMKKyAgICAgRGVmaW5lIEdUS19ST09UIHRoYXQgcG9pbnRzIHRvIHlvdXIgR1RLIHJvb3QgZGlyZWN0b3J5LgorCisgICAgIEJ1aWxkIGl0IGFzIG5vcm1hbGx5LgorCisgICAgIFVzZWQgc2hhcmFibGUgaW1hZ2VzIGFyZToKKwlndGtfcm9vdDpbZ2xpYl1saWJnbGliLmV4ZSAvc2hhcmUsLQorCWd0a19yb290OltnbGliLmdtb2R1bGVdbGliZ21vZHVsZS5leGUgL3NoYXJlLC0KKwlndGtfcm9vdDpbZ3RrLmdka11saWJnZGsuZXhlIC9zaGFyZSwtCisJZ3RrX3Jvb3Q6W2d0ay5ndGtdbGliZ3RrLmV4ZSAvc2hhcmUKKworICAgICBEdXJpbmcgcnVudGltZSBpdCBpcyBzdWdnZXN0ZWQgdG8gaGF2ZSBhbGwgdGhlc2UgZmlsZXMgaW5zdGFsbGVkIGFuZAorICAgICBjb3B5ZWQgdG8gU1lTJExJQlJBUlk6IHRvIGJlIGFibGUgdG8gdXNlIGl0IHdpdGhvdXQgcHJvYmxlbXMuCisgICAgIEFsc28gVk1TX0pBQ0tFVFMuRVhFIGZyb20gT3BlblZNUyBQb3J0aW5nIExpYnJhcnkuCisKKyAgICAgUGxlYXNlIG5vdGUsIHRoYXQgR1RLIHVzZXMgL25hbWU9KGFzX2lzLHNob3J0KS9mbG9hdD1pZWVlL2llZWU9ZGVub3JtCisgICAgIGNvbXBsaWVyIGRpcmVjdGl2ZXMgdGhhdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoICJzdGFuZGFyZCIgVk1TIHVzYWdlLAorICAgICB0aGVyZWZvcmUgb3RoZXIgZXh0ZXJuYWwgZmVhdHVyZXMgbWlnaHQgZmFpbCBhcyBQRVJMLCBQWVRIT04gYW5kIFRDTAorICAgICBzdXBwb3J0LgorCis3LjMgIFBFUkwKKworICAgICBZb3UgaGF2ZSB0byBpbnN0YWxsIE9wZW5WTVMgcGVybCBwYWNrYWdlIGZyb206CisgICAgIGh0dHA6Ly93d3cub3BlbnZtcy5jb21wYXEuY29tL29wZW52bXMvcHJvZHVjdHMvaXBzL2FwYWNoZS9jc3dzX3BlcmxfcmVsbm90ZXMuaHRtbCBvciBidWlsZCBvbiB5b3VyIG93biBmcm9tIHNvdXJjZXMgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cucGVybC5vcmcKKworICAgICBZb3UgbmVlZCBkZWZpbmVkIFBFUkxTSFIgbG9naWNhbCB0aGF0IHBvaW50cyB0byBQRVJMIHNoYXJlYWJsZSBpbWFnZQorICAgICAob3IgeW91IGNhbiBqdXN0IGNvcHkgb3ZlciB0byBTWVMkTElCUkFSWTopCisKKyAgICAgRW5hYmxlIFBlcmwgZmVhdHVyZSBhdCBtYWtlX3Ztcy5tbXMgd2l0aCBWSU1fUEVSTCA9IFlFUworCisgICAgIEVkaXQgUEVSTF9JTkMgPSB0byBwb2ludCB0byBwZXJsIGluY2x1ZGVzIGRpcmVjdG9yeSB3aGVyZSBpcyBleHRlcm4uaAorCisgICAgIEJ1aWxkIGFzIHVzdWFsbHkuCisKKzcuNCAgUFlUSE9OCisKKyAgICAgWW91IGhhdmUgdG8gaW5zdGFsbCBhbiBPcGVuVk1TIHB5dGhvbiBwYWNrYWdlLgorICAgICBTZXQgdXAgdGhlIG5vcm1hbCBQeXRob24gd29yayBlbnZpcm9ubWVudC4KKworICAgICBZb3UgaGF2ZSB0byBoYXZlIGRlZmluZWQgUFlUSE9OX0lOQ0xVREUgYW5kIFBZVEhPTl9PTEIgbG9naWNhbHMuCisgICAgIFBZVEhPTl9JTkNMVURFIHNob3VsZCBwb2ludCB0byBQeXRob24gaW5jbHVkZSBmaWxlcyB3aGVyZSBmb3IgZXg6CisgICAgIHB5dGhvbi5oIGlzIGxvY2F0ZWQuCisgICAgIEVuYWJsZSBQeXRob24gZmVhdHVyZSBhdCBtYWtlX3Ztcy5tbXMgd2l0aCBWSU1fUFlUSE9OID0gWUVTCisKKyAgICAgQnVpbGQgYXMgdXN1YWxseS4KKworNy41ICBUQ0wKKworICAgICBZb3UgaGF2ZSB0byBpbnN0YWxsIGFuIE9wZW5WTVMgVENMIHBhY2thZ2UuCisgICAgIFNldCB1cCB0aGUgbm9ybWFsIFRDTCB3b3JrIGVudmlyb25tZW50LgorCisgICAgIFlvdSBoYXZlIHRvIGhhdmUgZGVmaW5lZCBUQ0xTSFIgbG9naWNhbCB0aGF0IHBvaW50cyB0byBzaGFyZWFibGUgaW1hZ2UuCisKKyAgICAgRW5hYmxlIFRDTCBmZWF0dXJlIGF0IG1ha2Vfdm1zLm1tcyB3aXRoIFZJTV9UQ0wgPSBZRVMKKworICAgICBFZGl0IFRDTF9JTkMgPSB0byBwb2ludCB0byBUQ0wgaW5jbHVkZXMgZGlyZWN0b3J5IHdoZXJlIGlzIHRjbC5oCisKKyAgICAgQnVpbGQgYXMgdXN1YWxseS4KKworOC4gICBOb3RlcworCis4LjEuIE5ldyBDb21wYXEgQyBjb21waWxlcgorCisgICAgIElmIHlvdSBhcmUgdXNpbmcgQ29tcGFxIEMgY29tcGlsZXIgVjYuMiBvciBuZXdlciwgSW5mb3JtYXRpb25hbCBtZXNzYWdlcworICAgICBvZiB0aGUgdHlwZSBRVUVTVENPTVBBUkUgd2lsbCBiZSBkaXNwbGF5ZWQuIFlvdSBzaG91bGQgaWdub3JlIHRob3NlCisgICAgIG1lc3NhZ2VzIDsgdGhleSBhcmUgZ2VuZXJhdGVkIG9ubHkgYmVjYXVzZSBzb21lIHRlc3QgY29tcGFyaXNvbnMgYXJlIGRvbmUKKyAgICAgd2l0aCB2YXJpYWJsZXMgd2hpY2ggdHlwZSB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgT1MuIFVuZGVyIFZNUywgdGhvc2UgYXJlCisgICAgICJ1bnNpZ25lZCIgYW5kIHRoZSBjb21waWxlciBpc3N1ZSBhIG1lc3NhZ2Ugd2hlbmV2ZXIgdGhlIGNvbXBhcmlzb24gaXMKKyAgICAgZG9uZSB3aXRoICc8PScgdG8gMC4gSG93ZXZlciwgdGhlIGNvZGUgaXMgY29ycmVjdCBhbmQgd2lsbCBiZWhhdmUgYXMKKyAgICAgZXhwZWN0ZWQuCisgICAgICggSmVyb21lIExhdXJldCA8SkxBVVJFVEBtYWlsLmNoZW0uc3VueXNiLmVkdT4gVmltIDYuMG4gKQorCU5PVEU6IGZyb20gdmVyc2lvbiA2LjBhZCBWaW0gY29kZSBoYXMgYmVlbiByZXZpZXdlZCBhbmQgdGhlc2Ugd2FybmluZ3MKKwloYXZlIGJlZW4gY29ycmVjdGVkLgorCis5LiAgIEF1dGhvcnMKKworICAgICBJbml0aWFsIHZlcnNpb24sIDIwMDAgSnVsIDE5LCBab2x0YW4gQXJwYWRmZnkgPGFycGFkZmZ5QHBvbGFyZm94LmNvbT4KZGlmZiAtLWdpdCBhL3NyYy9NYWtlX2FndWkubWFrIGIvc3JjL01ha2VfYWd1aS5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzMGExOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlX2FndWkubWFrCkBAIC0wLDAgKzEsMzU2IEBACisjCisjIE1ha2VmaWxlIGZvciBWSU0gb24gdGhlIEFtaWdhLCB1c2luZyBTQVMvTGF0dGljZSBDIDYuMCB0byA2LjU2CisjCisjIERvIE5PVCB1c2UgdGhlIHBlZXBob2xlIG9wdGltaXplciB3aXRoIGEgdmVyc2lvbiBiZWZvcmUgNi41NSEKKyMgSXQgbWVzc2VzIHVwIGFsbCBraW5kcyBvZiB0aGluZ3M6CisjIEZvciA2LjAgYW5kIDYuMSwgZXhwYW5kX2VudigpIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5LgorIyBGb3IgNi4yIGFuZCA2LjMgdGhlIGNhbGwgdG8gZnJlZV9saW5lIGluIHVfZnJlZWVudHJ5IGlzIHdyb25nLgorIyBEb24ndCBrbm93IGFib3V0IDYuNTAsIG1pZ2h0IHdvcmsuLi4KKyMgVmVyc2lvbiA2LjU2IHNlZW1zIHRvIGJlIHdvcmtpbmcgZmluZS4KKyMgWW91IHNob3VsZCB1c2UgTWFueCBBenRlYyBDIHdoZW5ldmVyIHBvc3NpYmxlLgorIworIyBUaGUgcHJvdG90eXBlcyBmcm9tIE1hbnggYW5kIFNBUyBhcmUgaW5jb21wYXRpYmxlLiBJZiB0aGUgcHJvdG90eXBlcworIyB3ZXJlIGdlbmVyYXRlZCBieSBNYW54LCBmaXJzdCBkbyAidG91Y2ggKi5jOyBtYWtlIHByb3RvIiBiZWZvcmUgIm1ha2UiLgorIyBUaGUgcHJvdG90eXBlcyBnZW5lcmF0ZWQgb24gVW5peCB3b3JrIGZvciBib3RoLgorIworIyBOb3RlOiBOb3QgYWxsIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQuIFRoaXMgd2FzIGRvbmUgdG8gYXZvaWQgaGF2aW5nCisjICAgICAgIHRvIGNvbXBpbGUgZXZlcnl0aGluZyB3aGVuIGEgZ2xvYmFsIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIGlzIGFkZGVkLgorCisjPj4+Pj4gY2hvb3NlIG9wdGlvbnM6CisKKyNBTlNJIENPREVTCitBTlNJT0ZGID0gKmVbMG0KK0JCT0xEID0gKmVbMW0KK1dCT0xEID0gKmVbMm0KK0lUQUxJQyA9ICplWzNtCitVTkRFUkxJID0gKmVbNG0KK0FOU0lPRkYgPSAqZVswbQorRkNPTDEgPSAqZVszMW0KK0ZDT0wyID0gKmVbMzJtCitGQ09MMyA9ICplWzMzbQorRkNPTDQgPSAqZVszNG0KK0JDT0wxID0gKmVbNDFtCitCQ09MMiA9ICplWzQybQorQkNPTDMgPSAqZVs0M20KK0JDT0w0ID0gKmVbNDRtCisKKworIyMjIFNlZSBmZWF0dXJlLmggZm9yIGEgbGlzdCBvZiBvcHRpb25hbHMuCisjIyMgQW55IG90aGVyIGRlZmluZXMgY2FuIGJlIGluY2x1ZGVkIGhlcmUuCisKK0RFRklORVMgPSBERUY9Tk9fQVJQIERFRj1BTUlHQSBERUY9TkVXU0FTQyBERUY9RkVBVF9HVUlfQU1JR0EgXAorCSAgICBERUY9IlNBU0M9NjU4IiAjIiB0aGlzIGZpeGVzIGEgYnVnIGluIHRoZSBzeW50YXggaGlnaGxpZ2h0aW5nCisKKyM+Pj4+PiBpZiBIQVZFX1RHRVRFTlQgaXMgZGVmaW5lZCB0ZXJtbGliLm8gaGFzIHRvIGJlIHVzZWQKKyNURVJNTElCID0gdGVybWxpYi5vCitURVJNTElCID0KKworIz4+Pj4+IGNob29zZSBOT0RFQlVHIGZvciBub3JtYWwgY29tcGlsaW5nLCB0aGUgb3RoZXIgZm9yIGRlYnVnZ2luZyBhbmQKKyMgcHJvZmlsaW5nCisjIGRvbid0IHN3aXRjaCBvbiBkZWJ1Z2dpbmcgd2hlbiBnZW5lcmF0aW5nIHByb3RvIGZpbGVzLCBpdCBjcmFzaGVzIHRoZQorIyBjb21waWxlci4KK0RCRyA9IE5PREVCVUcKKyNEQkcgPSBEQkc9RlVMTEZMVVNICisjREJHID0gREJHPUxJTkUKKworIz4+Pj4+IGNob29zZSBOT09QVFBFRVAgZm9yIDYuMCB0byA2LjMsIE5PT1BUIGZvciBkZWJ1Z2dpbmcKKyNPUFRJTUlaRT1OT09QVFBFRVAgT1BUCisKKyMgZm9yIDYuNTggeW91IGNhbiB1c2UgdGhlIGxpbmUgYmVsb3csIGJ1dCBiZSB3YXJuZWQgaXQgdGFrZXMgYSBsb29vb25ubmdnZyB0aW1lCisjT1BUSU1JWkU9T1BUICBPUFRJTUlaRVJTQ0hFRFVMRVIgT1BUSU1JWkVSVElNRSBOb09QVElNSVpFUkFMSUFTIFwKKyMJT3B0aW1pemVyQ29tcGxleGl0eT0xMCBPcHRpbWl6ZXJEZXB0aD0xMCBPcHRpbWl6ZXJSZWN1ckRlcHRoPTEwIFwKKyMJT3B0aW1pemVySW5Mb2NhbCBPUFRQRUVQCitPUFRJTUlaRT1PUFQgIE9QVElNSVpFUlRJTUUgTm9PUFRJTUlaRVJBTElBUyBcCisJT3B0aW1pemVyQ29tcGxleGl0eT0xMCBPcHRpbWl6ZXJEZXB0aD0xMCBPcHRpbWl6ZXJSZWN1ckRlcHRoPTEwIFwKKwlPcHRpbWl6ZXJJbkxvY2FsIE9QVFBFRVAKKyNPUFRJTUlaRSA9IE5PT1BUCisKKyMgbm8gb3B0aW1pemF0aW9uLCAod29ya3Mgb24gYWxsIHBsYXRmb3JtcykKKyNPUFRJTUlaRT1OT09QVAorCisjZ2VuZXJhdGUgY29kZSBmb3IgeW91ciBwcm9jZXNzb3IgLSBub3RlIGhvd2V2ZXIsIHRoYXQgdGhlIDA2MCBzZWxlY3Rpb24gd2lsbCB3b3JrIGZvciAwNDAncworIyBhcyB3ZWxsLgorI0NQVT02ODAwMAorI0NQVT02ODAyMAorI0NQVT02ODAzMAorI0NQVT02ODA0MAorQ1BVPTY4MDYwCisKKworI0Vycm9yIHJlcG9ydGluZyAtIEkgdXNlIHJleHggZm9yIHJlcG9ydGluZywgYnV0IGNvbnNvbGUgcmVwb3J0aW5nIG1heSBiZSBtb3JlCisjdXNlZnVsIGZvciBzb21lIHBlb3BsZS4KKyNFUlJPUiA9IEVSUk9SQ09OU09MRSBFUlJPUlNPVVJDRSBFUlJPUkhJR0hMSUdIVAorRVJST1IgPSBFUlJPUlJFWFggRVJST1JDT05TT0xFIEVSUk9SU09VUkNFIEVSUk9SSElHSExJR0hUCisKKworI21lbW9yeSB0eXBlcywgaWYgeW91IGhhdmUgZmFzdCB1c2UgaXQgOi0+LAorIwlBTlkgPSB3aWxsIHdvcmsgb24gYWxsIG1hY2hpbmVzCisjCUZBU1QgPSB0aGlzIGlzIHRoZSBiZXN0IG9wdGlvbiwgZm9yIHNwZWVkCisjCUNISVAgPSBub3QgbmVjZXNzYXJ5IGZvciB0aGlzIGFwcGxpY2F0aW9uLgorI01FTU9SWVRZUEU9RkFTVAorTUVNT1JZVFlQRT1BTlkKKworI01FTVNJWkUgLSB0aGlzIGlzIGZvciBjb21waWxlIHRpbWUgb25seSBmb3Igc3BlZWQgb2YgY29tcGlsYXRpb24KKyNkZWZhdWx0IGlzIExBUkdFCitNRU1TSVpFPUhVR0UKKyNNRU1TSVpFPUxBUkdFCisjTUVNU0laRT1TTUFMTAorCisjPj4+Pj4gZW5kIG9mIGNob2ljZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitDQyA9IHNjCisKK0dTVD12aW0uZ3N0CitERVAgPSAkKEdTVCkKKworCitDRkxBR1MgPSBOT0xJTksgJChEQkcpICBDUFU9JChDUFUpIE5PU1RBQ0tDSEVDSworQ0ZMQUdTMiA9ICQoT1BUSU1JWkUpICQoRVJST1IpIEdTVElNTUVESUFURSBHU1Q9JChHU1QpCitDRkxBR1MzID1OT1NJTlQgU0NPREUgU0RBVEEgU1RSSU5HTUVSR0UgTUVNU0laRT0kKE1FTVNJWkUpCitDRkxBR1M0ID0gJChERUZJTkVTKSBEQVRBTUVNT1JZPSQoTUVNT1JZVFlQRSkKKworUFJPUFQgPSBERUY9UFJPVE8gR1BST1RPIEdQUEFSTSBNQVhJTVVNRVJST1JTPTk5OSBHRU5QUk9UT1NUQVRJQ1MgR0VOUFJPVE9QQVJBTUVURVJTCisKK1NSQyA9IFwKKwlidWZmZXIuYyBcCisJY2hhcnNldC5jIFwKKwlkaWZmLmMgXAorCWRpZ3JhcGguYyBcCisJZWRpdC5jIFwKKwlldmFsLmMgXAorCWV4X2NtZHMuYyBcCisJZXhfY21kczIuYyBcCisJZXhfZG9jbWQuYyBcCisJZXhfZXZhbC5jIFwKKwlleF9nZXRsbi5jIFwKKwlmaWxlaW8uYyBcCisJZm9sZC5jIFwKKwlnZXRjaGFyLmMgXAorCW1haW4uYyBcCisJbWFyay5jIFwKKwltZW1maWxlLmMgXAorCW1lbWxpbmUuYyBcCisJbWVudS5jIFwKKwltZXNzYWdlLmMgXAorCW1pc2MxLmMgXAorCW1pc2MyLmMgXAorCW1vdmUuYyBcCisJbm9ybWFsLmMgXAorCW9wcy5jIFwKKwlvcHRpb24uYyBcCisJb3NfYW1pZ2EuYyBcCisJcXVpY2tmaXguYyBcCisJcmVnZXhwLmMgXAorCXNjcmVlbi5jIFwKKwlzZWFyY2guYyBcCisJc3ludGF4LmMgXAorCXRhZy5jIFwKKwl0ZXJtLmMgXAorCXVpLmMgXAorCXVuZG8uYyBcCisJd2luZG93LmMgXAorCXZlcnNpb24uYyBcCisJZ3VpX2FtaWdhLmMgXAorCWd1aS5jCisKK09CSiA9IGJ1ZmZlci5vIGNoYXJzZXQubyBkaWZmLm8gZGlncmFwaC5vIGVkaXQubyBldmFsLm8gZXhfY21kcy5vIGV4X2NtZHMyLm8gZXhfZG9jbWQubyBleF9ldmFsLm8gZXhfZ2V0bG4ubyBcCisJZmlsZWlvLm8gZm9sZC5vIGdldGNoYXIubyBtYWluLm8gbWFyay5vIG1lbWZpbGUubyBtZW1saW5lLm8gbWVudS5vIG1lc3NhZ2UubyBtaXNjMS5vIG1pc2MyLm8gbW92ZS5vIFwKKwlub3JtYWwubyBvcHMubyBvcHRpb24ubyBvc19hbWlnYS5vIHF1aWNrZml4Lm8gcmVnZXhwLm8gc2NyZWVuLm8gc2VhcmNoLm8gc3ludGF4Lm8gXAorCXRhZy5vIHRlcm0ubyB1aS5vIHVuZG8ubyB3aW5kb3cubyBndWlfYW1pZ2EubyBndWkubyAgJChURVJNTElCKQorCitQUk8gPSBcCisJYnVmZmVyLnBybyBcCisJY2hhcnNldC5wcm8gXAorCWRpZmYucHJvIFwKKwlkaWdyYXBoLnBybyBcCisJZWRpdC5wcm8gXAorCWV2YWwucHJvIFwKKwlleF9jbWRzLnBybyBcCisJZXhfY21kczIucHJvIFwKKwlleF9kb2NtZC5wcm8gXAorCWV4X2V2YWwucHJvIFwKKwlleF9nZXRsbi5wcm8gXAorCWZpbGVpby5wcm8gXAorCWZvbGQucHJvIFwKKwlnZXRjaGFyLnBybyBcCisJbWFpbi5wcm8gXAorCW1hcmsucHJvIFwKKwltZW1maWxlLnBybyBcCisJbWVtbGluZS5wcm8gXAorCW1lbnUucHJvIFwKKwltZXNzYWdlLnBybyBcCisJbWlzYzEucHJvIFwKKwltaXNjMi5wcm8gXAorCW1vdmUucHJvIFwKKwlub3JtYWwucHJvIFwKKwlvcHMucHJvIFwKKwlvcHRpb24ucHJvIFwKKwlvc19hbWlnYS5wcm8gXAorCXF1aWNrZml4LnBybyBcCisJcmVnZXhwLnBybyBcCisJc2NyZWVuLnBybyBcCisJc2VhcmNoLnBybyBcCisJc3ludGF4LnBybyBcCisJdGFnLnBybyBcCisJdGVybS5wcm8gXAorCXRlcm1saWIucHJvIFwKKwl1aS5wcm8gXAorCXVuZG8ucHJvIFwKKwl3aW5kb3cucHJvIFwKKwl2ZXJzaW9uLnBybyBcCisJZ3VpX2FtaWdhLnBybyBcCisJZ3VpLnBybworCithbGw6CisJQGVjaG8gIiQoQkNPTDIpYnVpbGRpbmcgcHJvdG90eXBlcywgdGhpcyBtYXkgdGFrZSBzb21lIHRpbWUkKEFOU0lPRkYpIgorCUBzbWFrZSBwcm90bworCUBlY2hvICIkKEJDT0wyKWJ1aWxkaW5nIHZpbSBwcm9kdWN0aW9uIHZlcnNpb24kKEFOU0lPRkYpIgorCUBzbWFrZSB2aW0KKworVmltOiBzY29wdGlvbnMgcHJvdG8gJChPQkopIHZlcnNpb24uYyB2ZXJzaW9uLmgKKwkkKENDKSAkKENGTEFHUykgdmVyc2lvbi5jCisJJChDQykgTElOSyAkKE9QVCkgJChDT1BUUykgJChPQkopIHZlcnNpb24ubyAkKERCRykgUE5BTUU9VmltCisKK2RlYnVnOiBzY29wdGlvbiBwcm90b3MgJChPQkopIHZlcnNpb24uYyB2ZXJzaW9uLmgKKwkkKENDKSAkKENGTEFHUykgdmVyc2lvbi5jCisJJChDQykgTElOSyAkKENPUFRTKSAkKE9CSikgdmVyc2lvbi5vICQoREJHKSBQTkFNRT1WaW0KKworcHJvdG86ICQoUFJPKQorCit0YWdzOiAkKFNSQykKKwlzcGF0IGN0YWdzICQoU1JDKSAqLmgKKwkjY3NoIC1jIGN0YWdzICQoU1JDKSAqLmgKKworIyBjYW4ndCB1c2UgZGVsZXRlIGhlcmUsIHRvbyBtYW55IGZpbGUgbmFtZXMKK2NsZWFuOgorCUBlY2hvIHJlbW92aW5nIGFsbCBvYmplY3QgZmlsZXMKKwktZGVsZXRlICQoT0JKKSA+bmlsOgorCitjbG9iYmVyOiBjbGVhbgorCUBlY2hvIHJlbW92aW5nIGFsbCBwcm90b3R5cGUgZmlsZXMKKwktZGVsZXRlICQoUFJPKSBTQ09QVElPTlMgdmltICQoR1NUKSA+IE5JTDoKKworCisjIGdlbmVyYXRlIGFuIG9wdGlvbnMgZmlsZSwgYXMgdGhlcmUgaXMgbm8gd2F5IHRoZSBhbWlnYSBjb21tYW5kIGxpbmUgY2FuIGhhbmRsZSB0aGUKKyMgbGVuZ3RocyB0aGF0IHRoaXMgbWFrZWZpbGUgd2lsbCBpbXBvc2Ugb24gdGhlIHNoZWxsLgorc2NvcHRpb25zOiBzbWFrZWZpbGUKKwlAZWNobyAiJChCQ09MMilHZW5lcmF0aW5nICQoQU5TSU9GRikkKEZDT0w0KS0gJEAkKEFOU0lPRkYpIgorCUBlY2hvICQoQ0ZMQUdTKSA+IHNjb3B0aW9ucworCUBlY2hvICQoQ0ZMQUdTMSkgPj4gc2NvcHRpb25zCisJQGVjaG8gJChDRkxBR1MyKSA+PiBzY29wdGlvbnMKKwlAZWNobyAkKENGTEFHUzMpID4+IHNjb3B0aW9ucworCUBlY2hvICQoQ0ZMQUdTNCkgPj4gc2NvcHRpb25zCisJQGVjaG8gJChDT1BUUykgPj5zY29wdGlvbnMKKwlAZWNobyBzY29wdGlvbnMgaGFzIGJlZW4gYnVpbHQKKworCisjZ2VuZXJhdGUgR2xvYmFsU3ltYm9sVGFibGUsIHdoaWNoIGJvdGggc3BlZWRzIHVwIHRoZSBjb21waWxlIHRpbWUsIGJ1dCBhbHNvCisjc29sdmVzIHNvbWUgcHJvYmxlbXMgd2l0aCBwcm90b3R5cGVzLCBhbmQgdHlwZXMgIHRoYXQgYXJlIGRlZmluZWQgaW4gYSB1bml4eQorI21hbm5lci4KKyMKKyNJIHVzZSBhIHByZXByb2Nlc3Npbmcgc3RhZ2UgaGVyZSB0byB3b3JrIGFyb3VuZGEgYnVnIGluIHRoZSBHU1QgZ2VuZXJhdG9yLCBpbgorI3RoYXQgaXQgZG9lcyBub3QgaGFuZGxlIG5lc3RlZCBtYWtlZmlsZXMgcHJvcGVybHkgaW4gdGhpcyBzdGFnZS4KKyQoR1NUKTogc2NvcHRpb25zIHZpbS5oIGtleW1hcC5oIG1hY3Jvcy5oIGFzY2lpLmggdGVybS5oIHN0cnVjdHMuaCBndWkuaCBndWlfYW1pZ2EuaAorCUBlY2hvICIkKEJDT0wyKUdlbmVyYXRpbmcgR2xvYmFsIFN5bWJvbCBUYWJsZSAkKEFOU0lPRkYpJChGQ09MNCkgJChHU1QpICQoQU5TSU9GRikiCisJJChDQykgUFJFUFJPQ0VTU09ST05MWSBndWlfYW1pZ2EuaCAgb2JqZWN0bmFtZSBwcmUuaAorCSQoQ0MpICBNR1NUPSQoR1NUKSBwcmUuaCBpZ25vcmU9MTA1LDMxNgorCWRlbCBwcmUuaAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuYy5vOgorCUBlY2hvICIkKEJDT0wyKUdlbmVyYXRpbmcgb2JqZWN0IGZvciAkKEFOU0lPRkYpJChGQ09MNCkgJCouYyAtPiAkQCQoQU5TSU9GRikiCisJJChDQykgJCouYworCisuYy5wcm86CisJQGVjaG8gIiQoQkNPTDIpR2VuZXJhdGluZyBwcm90b3R5cGVzIGZvciAkKEFOU0lPRkYpJChGQ09MNCkgJCouYyAtPiAkQCQoQU5TSU9GRikiCisJQCQoQ0MpIE5PRVJST1JSRVhYIEdQRklMRT0kKi5wcm8gJChQUk9QVCkgJCouYyBpZ25vcmU9MzA2LDMxNiwzMTcsMzA0CisKKyQoUFJPKTogJChHU1QpCiskKE9CSik6ICQoR1NUKQorCisjIGRlcGVuZGFuY2llcworYnVmZmVyLm86CWJ1ZmZlci5jICQoREVQKQorYnVmZmVyLnBybzoJYnVmZmVyLmMgJChERVApCitjaGFyc2V0Lm86CWNoYXJzZXQuYyAgJChERVApCitjaGFyc2V0LnBybzoJY2hhcnNldC5jICQoREVQKQorZGlmZi5vOgkJZGlmZi5jICAkKERFUCkKK2RpZmYucHJvOglkaWZmLmMgJChERVApCitkaWdyYXBoLm86CWRpZ3JhcGguYyAgJChERVApCitkaWdyYXBoLnBybzoJZGlncmFwaC5jICQoREVQKQorZWRpdC5vOgkJZWRpdC5jICAkKERFUCkKK2VkaXQucHJvOgllZGl0LmMgICAkKERFUCkKK2V2YWwubzoJCWV2YWwuYyAgJChERVApCitldmFsLnBybzoJZXZhbC5jICAkKERFUCkKK2V4X2NtZHMubzoJZXhfY21kcy5jICQoREVQKQorZXhfY21kcy5wcm86CWV4X2NtZHMuYyAgJChERVApCitleF9jbWRzMi5vOglleF9jbWRzMi5jICQoREVQKQorZXhfY21kczIucHJvOglleF9jbWRzMi5jICQoREVQKQorZXhfZG9jbWQubzoJZXhfZG9jbWQuYyBleF9jbWRzLmggICQoREVQKQorZXhfZG9jbWQucHJvOglleF9kb2NtZC5jIGV4X2NtZHMuaCAkKERFUCkKK2V4X2V2YWwubzoJZXhfZXZhbC5jIGV4X2NtZHMuaCAgJChERVApCitleF9ldmFsLnBybzoJZXhfZXZhbC5jIGV4X2NtZHMuaCAkKERFUCkKK2V4X2dldGxuLm86CWV4X2dldGxuLmMgICQoREVQKQorZXhfZ2V0bG4ucHJvOglleF9nZXRsbi5jICAkKERFUCkKK2ZpbGVpby5vOglmaWxlaW8uYyAgJChERVApCitmaWxlaW8ucHJvOglmaWxlaW8uYyAgICQoREVQKQorZm9sZC5vOgkJZm9sZC5jICAkKERFUCkKK2ZvbGQucHJvOglmb2xkLmMgICAkKERFUCkKK2dldGNoYXIubzoJZ2V0Y2hhci5jICAkKERFUCkKK2dldGNoYXIucHJvOglnZXRjaGFyLmMgJChERVApCittYWluLm86CQltYWluLmMgZ2xvYmFscy5oICQoREVQKQorbWFpbi5wcm86CW1haW4uYyBnbG9iYWxzLmggJChERVApCittYXJrLm86CQltYXJrLmMgICQoREVQKQorbWFyay5wcm86CW1hcmsuYyAkKERFUCkKK21lbWZpbGUubzoJbWVtZmlsZS5jICAkKERFUCkKK21lbWZpbGUucHJvOgltZW1maWxlLmMgJChERVApCittZW1saW5lLm86CW1lbWxpbmUuYyAgJChERVApCittZW1saW5lLnBybzoJbWVtbGluZS5jICQoREVQKQorbWVudS5vOgkJbWVudS5jICAkKERFUCkKK21lbnUucHJvOgltZW51LmMgJChERVApCittZXNzYWdlLm86CW1lc3NhZ2UuYyAgJChERVApCittZXNzYWdlLnBybzoJbWVzc2FnZS5jICQoREVQKQorbWlzYzEubzoJbWlzYzEuYyAgJChERVApCittaXNjMS5wcm86CW1pc2MxLmMgICQoREVQKQorbWlzYzIubzoJbWlzYzIuYyAgJChERVApCittaXNjMi5wcm86CW1pc2MyLmMgJChERVApCittb3ZlLm86CQltb3ZlLmMgICQoREVQKQorbW92ZS5wcm86CW1vdmUuYyAkKERFUCkKK25vcm1hbC5vOglub3JtYWwuYyAgJChERVApCitub3JtYWwucHJvOglub3JtYWwuYyAkKERFUCkKK29wcy5vOgkJb3BzLmMgICQoREVQKQorb3BzLnBybzoJb3BzLmMgICQoREVQKQorb3B0aW9uLm86CW9wdGlvbi5jICAkKERFUCkKK29wdGlvbi5wcm86CW9wdGlvbi5jICAgJChERVApCitvc19hbWlnYS5vOglvc19hbWlnYS5jICAkKERFUCkKK29zX2FtaWdhLnBybzoJb3NfYW1pZ2EuYyAgJChERVApCitxdWlja2ZpeC5vOglxdWlja2ZpeC5jICAkKERFUCkKK3F1aWNrZml4LnBybzoJcXVpY2tmaXguYyAgJChERVApCityZWdleHAubzoJcmVnZXhwLmMgICQoREVQKQorcmVnZXhwLnBybzoJcmVnZXhwLmMgICQoREVQKQorc2NyZWVuLm86CXNjcmVlbi5jICAkKERFUCkKK3NjcmVlbi5wcm86CXNjcmVlbi5jICAkKERFUCkKK3NlYXJjaC5vOglzZWFyY2guYyAgJChERVApCitzZWFyY2gucHJvOglzZWFyY2guYyAgJChERVApCitzeW50YXgubzoJc3ludGF4LmMgICAkKERFUCkKK3N5bnRheC5wcm86CXN5bnRheC5jICAkKERFUCkKK3RhZy5vOgkJdGFnLmMgICAkKERFUCkKK3RhZy5wcm86CXRhZy5jICAgJChERVApCit0ZXJtLm86CQl0ZXJtLmMgICAkKERFUCkKK3Rlcm0ucHJvOgl0ZXJtLmMgICQoREVQKQordGVybWxpYi5vOgl0ZXJtbGliLmMgICAkKERFUCkKK3Rlcm1saWIucHJvOgl0ZXJtbGliLmMgICQoREVQKQordWkubzoJCXVpLmMgICAkKERFUCkKK3VpLnBybzoJCXVpLmMgICQoREVQKQordW5kby5vOgkJdW5kby5jICAgJChERVApCit1bmRvLnBybzoJdW5kby5jICAkKERFUCkKK3dpbmRvdy5vOgl3aW5kb3cuYyAgICQoREVQKQord2luZG93LnBybzoJd2luZG93LmMgICQoREVQKQorZ3VpX2FtaWdhLm86CWd1aV9hbWlnYS5jICQoREVQKSBhbWlnYS5oCisjZ3VpX2FtaWdhLnBybzoJZ3VpX2FtaWdhLmMgJChERVApIGFtaWdhLmgKK2FtaWdhLm86CWFtaWdhLmMgJChERVApIGFtaWdhLmgKK2FtaWdhLnBybzoJYW1pZ2EuYyAkKERFUCkgYW1pZ2EuaAorZ3VpLm86CQlndWkuYyAgICQoREVQKQorZ3VpLnBybzoJZ3VpLmMgICQoREVQKQpkaWZmIC0tZ2l0IGEvc3JjL01ha2VfYXJvcy5tYWsgYi9zcmMvTWFrZV9hcm9zLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDI2ZWVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL01ha2VfYXJvcy5tYWsKQEAgLTAsMCArMSwyOSBAQAorIyBNYWtlZmlsZSBmb3IgQVJPUworCitDRkxBR1MgPSAtcGlwZSAtTzIgLVdhbGwgLUlwcm90byBcCisgICAgICAgICAtRE5PX0FSUCAtRFVTRV9UTVBOQU0gLURGRUFUX0dVSV9BTUlHQQorCitQUkcgICAgPSBWSU0KK0xJQlMgICA9CitDQyAgICAgPSBpMzg2LWxpbnV4LWFyb3MtZ2NjCitMRCAgICAgPSBpMzg2LWxpbnV4LWFyb3MtZ2NjCitSTSAgICAgPSBybQorCitTUkNTICAgPSBidWZmZXIuYyBjaGFyc2V0LmMgZGlmZi5jIGRpZ3JhcGguYyBlZGl0LmMgZXZhbC5jIGV4X2NtZHMuYyAgICAgICAgICBcCisgICAgICAgICBleF9jbWRzMi5jIGV4X2RvY21kLmMgZXhfZXZhbC5jIGV4X2dldGxuLmMgZmlsZWlvLmMgZm9sZC5jIGdldGNoYXIuYyBcCisgICAgICAgICBtYWluLmMgbWFyay5jIG1ieXRlLmMgbWVtZmlsZS5jIG1lbWxpbmUuYyBtZW51LmMgbWVzc2FnZS5jIG1pc2MxLmMgICBcCisgICAgICAgICBtaXNjMi5jIG1vdmUuYyBub3JtYWwuYyBvcHMuYyBvcHRpb24uYyBvc19hbWlnYS5jIHF1aWNrZml4LmMgICAgICAgICBcCisgICAgICAgICByZWdleHAuYyBzY3JlZW4uYyBzZWFyY2guYyBzeW50YXguYyB0YWcuYyB0ZXJtLmMgdWkuYyB1bmRvLmMgICAgICAgICBcCisgICAgICAgICB2ZXJzaW9uLmMgd2luZG93LmMgZ3VpX2FtaWdhLmMgZ3VpLmMKKworT0JKUyAgID0gJChTUkNTOi5jPS5vKQorCisKKyQoUFJHKTogJChPQkpTKQorCSR7TER9IC1vICQoUFJHKSAkKE9CSlMpICQoTElCUykKKworLmMubzoKKwkke0NDfSAtYyAke0NGTEFHU30gJDwgLW8gJEAKKworY2xlYW46CisJJChSTSkgLWZ2ICQoT0JKUykgJChQUkcpCmRpZmYgLS1naXQgYS9zcmMvTWFrZV9iYzMubWFrIGIvc3JjL01ha2VfYmMzLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDI3MDgxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL01ha2VfYmMzLm1hawpAQCAtMCwwICsxLDE3MyBAQAorIyBNYWtlZmlsZSBmb3IgQm9ybGFuZCBDKysgMy4xIG9yIDQuMCB0byBjb21waWxlIGEgMTYgYml0IHZlcnNpb24gb2YgVmltLgorIworIyBUaGVyZSBhcmUgY29tcGlsYXRpb24gb3B0aW9ucyBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KKyMKKyMgQ29tbWFuZCBsaW5lIHZhcmlhYmxlczoKKyMgQk9SCQlwYXRoIHRvIHJvb3Qgb2YgQm9ybGFuZCBDIChFOlxCT1JMQU5EQykKKyMgREVCVUcJCXNldCB0byAieWVzIiBmb3IgZGVidWdnaW5nIChubykKKyMgU1BBV05PCXBhdGggdG8gdGhlIHNwYXdubyBsaWJyYXJ5IGRpcmVjdG9yeSwgZW1wdHkgaWYgeW91IGRvIG5vdCBoYXZlCisjCQlpdDsgdXNlIDguMyBmaWxlbmFtZXMhIChDOlxDQ1xTUEFXTikKKworLkFVVE9ERVBFTkQKKworIWlmbmRlZiBCT1IKK0JPUiA9IEU6XEJPUkxBTkRDCishZW5kaWYKKworIWlmICgiJChERUJVRykiID09ICJ5ZXMiKQorREVCVUdfRkxBRyA9IC12CishZWxzZQorREVCVUdfRkxBRyA9CishZW5kaWYKKworQ0MgPSAkKEJPUilcYmluXGJjYy5leGUgK1ZJTS5DRkcKK1RMSU5LID0gJChCT1IpXGJpblx0bGluay5leGUKKworIWlmbmRlZiBTUEFXTk8KK1NQQVdOTyA9IEM6XENDXFNQQVdOCishZW5kaWYKKworIWlmICgiJChTUEFXTk8pIiA9PSAiIikKK0xJQlBBVEggPSAkKEJPUilcTElCCitJTkNMVURFUEFUSCA9ICQoQk9SKVxJTkNMVURFCitTUEFXTkQgPQorU1BBV05MID0KKyFlbHNlCitMSUJQQVRIID0gJChCT1IpXExJQjskKFNQQVdOTykKK0lOQ0xVREVQQVRIID0gJChCT1IpXElOQ0xVREU7JChTUEFXTk8pCitTUEFXTkQgPSA7U1BBV05PCitTUEFXTkwgPSBzcGF3bmwubGliCishZW5kaWYKKworCisjCQkqSW1wbGljaXQgUnVsZXMqCisjCisjIHVzZSAtdiBmb3IgZGVidWdnaW5nCisjCisuYy5vYmo6CisJJChDQykgLWMgJChERUJVR19GTEFHKSB7JDwgfQorCisjCQkqTGlzdCBNYWNyb3MqCisKKworRVhFX2RlcGVuZGVuY2llcyA9IFwKKwlidWZmZXIub2JqIFwKKwljaGFyc2V0Lm9iaiBcCisJZGlmZi5vYmogXAorCWRpZ3JhcGgub2JqIFwKKwllZGl0Lm9iaiBcCisJZXZhbC5vYmogXAorCWV4X2NtZHMub2JqIFwKKwlleF9jbWRzMi5vYmogXAorCWV4X2RvY21kLm9iaiBcCisJZXhfZXZhbC5vYmogXAorCWV4X2dldGxuLm9iaiBcCisJZmlsZWlvLm9iaiBcCisJZm9sZC5vYmogXAorCWdldGNoYXIub2JqIFwKKwltYWluLm9iaiBcCisJbWFyay5vYmogXAorCW1lbWZpbGUub2JqIFwKKwltZW1saW5lLm9iaiBcCisJbWVudS5vYmogXAorCW1lc3NhZ2Uub2JqIFwKKwltaXNjMS5vYmogXAorCW1pc2MyLm9iaiBcCisJbW92ZS5vYmogXAorCW9zX21zZG9zLm9iaiBcCisJbm9ybWFsLm9iaiBcCisJb3BzLm9iaiBcCisJb3B0aW9uLm9iaiBcCisJcXVpY2tmaXgub2JqIFwKKwlyZWdleHAub2JqIFwKKwlzY3JlZW4ub2JqIFwKKwlzZWFyY2gub2JqIFwKKwlzeW50YXgub2JqIFwKKwl0YWcub2JqIFwKKwl0ZXJtLm9iaiBcCisJdWkub2JqIFwKKwl1bmRvLm9iaiBcCisJd2luZG93Lm9iagorCithbGw6IHZpbS5leGUgaW5zdGFsbC5leGUgdW5pbnN0YWwuZXhlIHh4ZC94eGQuZXhlCisKKyMJCSpFeHBsaWNpdCBSdWxlcyoKKwordmltLmV4ZTogdmltLmNmZyAkKEVYRV9kZXBlbmRlbmNpZXMpIHZlcnNpb24uYworCSQoQ0MpICQoREVCVUdfRkxBRykgLWMgdmVyc2lvbi5jCisJJChUTElOSykgL3gvYy9MJChMSUJQQVRIKSAkKERFQlVHX0ZMQUcpIEAmJnwKK2MwbC5vYmogJChFWEVfZGVwZW5kZW5jaWVzKSB2ZXJzaW9uLm9iagordmltCisJCSMgbm8gbWFwIGZpbGUKKyQoU1BBV05MKSBjbC5saWIKK3wKKworaW5zdGFsbC5leGU6IGRvc2luc3QuYworCSQoQ0MpIC1laW5zdGFsbCAkKERFQlVHX0ZMQUcpIGRvc2luc3QuYworCit1bmluc3RhbC5leGU6IHVuaW5zdGFsLmMKKwkkKENDKSAkKERFQlVHX0ZMQUcpIHVuaW5zdGFsLmMKKworIyBUaGlzIG1heSBmYWlsIGZvciBvbGRlciBtYWtlIHZlcnNpb25zLCBidWlsZGluZyB4eGQgd2lsbCBmYWlsIGFueXdheSB0aGVuLgoreHhkL3h4ZC5leGU6IHh4ZC94eGQuYworCWNkIHh4ZAorCSQoTUFLRSkgLWYgTWFrZV9iYzMubWFrIEJPUj0kKEJPUikgREVCVUc9JChERUJVRykKKwljZCAuLgorCisjIGNsZWFuaW5nIHVwOiBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcworY2xlYW46CisJLWRlbCAqLm9iagorCS1kZWwgdmltLmV4ZQorCS1kZWwgdmltLnN5bQorCS1kZWwgaW5zdGFsbC5leGUKKwktZGVsIHVuaW5zdGFsLmV4ZQorCS1kZWwgeHhkXCoub2JqCisJLWRlbCB4eGRceHhkLmV4ZQorCS1kZWwgdmltLmNmZworCS1kZWwgdGVzdGRpclwqLm91dAorCisjIEluZGl2aWR1YWwgRmlsZSBEZXBlbmRlbmNpZXMgKGluY29tcGxldGUpCitleF9kb2NtZC5vYmo6IGV4X2RvY21kLmMgZXhfY21kcy5oCisKK2V4X2V2YWwub2JqOiBleF9ldmFsLmMgZXhfY21kcy5oCisKK21haW4ub2JqOiBtYWluLmMgZ2xvYmFscy5oIG9wdGlvbi5oCisKK3Rlcm0ub2JqOiB0ZXJtLmMgdGVybS5oCisKK3ZlcnNpb24ub2JqOiB2ZXJzaW9uLmMgdmVyc2lvbi5oCisKKworIyBDb21waWxlciBDb25maWd1cmF0aW9uIEZpbGUKKyMKKyMgVGhlIGZvbGxvd2luZyBjb21waWxlIG9wdGlvbnMgY2FuIGJlIGNoYW5nZWQgZm9yIGJldHRlciBtYWNoaW5lcy4KKyMJcmVwbGFjZSAtMS0gd2l0aCAtMiB0byBwcm9kdWNlIGNvZGUgZm9yIGEgODAyODYgb3IgaGlnaGVyCisjCXJlcGxhY2UgLTEtIHdpdGggLTMgdG8gcHJvZHVjZSBjb2RlIGZvciBhIDgwMzg2IG9yIGhpZ2hlcgorIwlhZGQgLXYgZm9yIHNvdXJjZSBkZWJ1Z2dpbmcKK3ZpbS5jZmc6IE1ha2VfYmMzLm1haworCWNvcHkgJiZ8CistbWwKKy0xLQorLWYtCistQworLU4KKy1PCistWgorLWstCistZAorLWgKKy12aS0KKy1IPVZJTS5TWU0KKy13LXBhcgorLXdlYXMKKy13cHJlCistSXByb3RvCistSSQoSU5DTFVERVBBVEgpCistTCQoTElCUEFUSCkKKy1ETVNET1MkKFNQQVdORCkKK3wgdmltLmNmZworCit0ZXN0OgorCWNkIHRlc3RkaXIKKwkkKE1BS0UpIC1mIE1ha2VfZG9zLm1hayBzbWFsbAorCWNkIC4uCmRpZmYgLS1naXQgYS9zcmMvTWFrZV9iYzUubWFrIGIvc3JjL01ha2VfYmM1Lm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2Q5NDQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL01ha2VfYmM1Lm1hawpAQCAtMCwwICsxLDEwMDYgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFZpbS4KKyMgQ29tcGlsZXI6IEJvcmxhbmQgQysrIDUuMCBhbmQgbGF0ZXIgMzItYml0IGNvbXBpbGVyCisjICBUYXJnZXRzOiBEb3MxNiBvciBXaW4zMiAoV2luZG93cyBOVCBhbmQgV2luZG93cyA5NSkgKHdpdGgvd2l0aG91dCBHVUkpCisjCisjIENvbnRyaWJ1dGVkIGJ5IEJlbiBTaW5nZXIuCisjIFVwZGF0ZWQgNC8xOTk3IGJ5IFJvbiBBYXJvbgorIwk2LzE5OTcgLSBhZGRlZCBzdXBwb3J0IGZvciAxNiBiaXQgRE9TCisjCU5vdGU6IHRoaXMgaGFzIGJlZW4gdGVzdGVkLCBhbmQgd29ya3MsIGZvciBCQzUuICBZb3VyIG1pbGVhZ2UgbWF5IHZhcnkuCisjCUhhcyBiZWVuIHJlcG9ydGVkIE5PVCB0byB3b3JrIHdpdGggQkMgNC41Mi4gIE1heWJlIGl0IGNhbiBiZSBmaXhlZD8KKyMJMTAvMTk5NyAtIHJvbiAtIGZpeGVkIGJ1Z3Mgdy8gQkMgNS4wMgorIwk4LzE5OTggLSByb24gLSB1cGRhdGVkIHdpdGggbmV3IHRhcmdldHMsIGZpeGVkIHNvbWUgc3R1ZmYKKyMJMy8yMDAwIC0gQnJhbTogTWFkZSBpdCB3b3JrIHdpdGggQkMgNS41IGZyZWUgY29tbWFuZCBsaW5lIGNvbXBpbGVyLAorIwkJCWNsZWFuZWQgdXAgdmFyaWFibGVzLgorIwk2LzIwMDEgLSBEYW4gLSBBZGRlZCBzdXBwb3J0IGZvciBjb21waWxpbmcgUHl0aG9uIGFuZCBUQ0wKKyMJNy8yMDAxIC0gRGFuIC0gQWRkZWQgc3VwcG9ydCBmb3IgY29tcGlsaW5nIFJ1YnkKKyMKKyMgSXQgYnVpbGRzIG9uIFdpbmRvd3MgOTUgYW5kIE5ULUludGVsLCBwcm9kdWNpbmcgdGhlIHNhbWUgYmluYXJ5IGluIGVpdGhlcgorIyBjYXNlLiAgVG8gYnVpbGQgdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDKyssIHVzZSBNYWtlX212Yy5tYWsuCisjCisjIFRoaXMgc2hvdWxkIHdvcmsgd2l0aCB0aGUgZnJlZSBCb3JsYW5kIGNvbW1hbmQgbGluZSBjb21waWxlciwgdmVyc2lvbiA1LjUuCisjIFlvdSBuZWVkIGF0IGxlYXN0IHNwMSAoc2VydmljZSBwYWNrIDEpLiAgV2l0aCBzcDIgaXQgY29tcGlsZXMgZmFzdGVyLgorIyBVc2UgYSBjb21tYW5kIGxpa2UgdGhpczoKKyMgPHBhdGg+XGJpblxtYWtlIC9mIE1ha2VfYmM1Lm1hayBCT1I9PHBhdGg+CisjCisKKyMgbGV0IHRoZSBtYWtlIHV0aWxpdHkgZG8gdGhlIGhhcmQgd29yazoKKy5BVVRPREVQRU5ECisuQ0FDSEVBVVRPREVQRU5ECisKKyMgVkFSSUFCTEVTOgorIyBuYW1lCQl2YWx1ZSAoZGVmYXVsdCkKKyMKKyMgQk9SCQlwYXRoIHRvIHJvb3Qgb2YgQm9ybGFuZCBDIGluc3RhbGwgKGM6XGJjNSkKKyMgTElOSwkJbmFtZSBvZiB0aGUgbGlua2VyICgkKEJPUilcYmluXGlsaW5rIGlmIE9TVFlQRSBpcyBET1MxNiwKKyMJCSQoQk9SKVxiaW5caWxpbmszMiBvdGhlcndpc2UpCisjIEdVSQkJbm8gb3IgeWVzOiBzZXQgdG8geWVzIGlmIHlvdSB3YW50IHRoZSBHVUkgdmVyc2lvbiAoeWVzKQorIyBQRVJMCQlkZWZpbmUgdG8gcGF0aCB0byBQZXJsIGRpciB0byBnZXQgUGVybCBzdXBwb3J0IChub3QgZGVmaW5lZCkKKyMgICBQRVJMX1ZFUgkgIGRlZmluZSB0byB2ZXJzaW9uIG9mIFBlcmwgYmVpbmcgdXNlZCAoNTYpCisjICAgRFlOQU1JQ19QRVJMICBubyBvciB5ZXM6IHNldCB0byB5ZXMgdG8gbG9hZCB0aGUgUGVybCBETEwgZHluYW1pY2FsbHkgKG5vKQorIyBQWVRIT04JZGVmaW5lIHRvIHBhdGggdG8gUHl0aG9uIGRpciB0byBnZXQgUFlUSE9OIHN1cHBvcnQgKG5vdCBkZWZpbmVkKQorIyAgIFBZVEhPTl9WRVIJICAgIGRlZmluZSB0byB2ZXJzaW9uIG9mIFB5dGhvbiBiZWluZyB1c2VkICgyMikKKyMgICBEWU5BTUlDX1BZVEhPTiAgbm8gb3IgeWVzOiB1c2UgeWVzIHRvIGxvYWQgdGhlIFB5dGhvbiBETEwgZHluYW1pY2FsbHkgKG5vKQorIyBUQ0wJCWRlZmluZSB0byBwYXRoIHRvIFRDTCBkaXIgdG8gZ2V0IFRDTCBzdXBwb3J0IChub3QgZGVmaW5lZCkKKyMgICBUQ0xfVkVSCWRlZmluZSB0byB2ZXJzaW9uIG9mIFRDTCBiZWluZyB1c2VkICg4MykKKyMgICBEWU5BTUlDX1RDTCBubyBvciB5ZXM6IHVzZSB5ZXMgdG8gbG9hZCB0aGUgVENMIERMTCBkeW5hbWljYWxseSAobm8pCisjIFJVQlkJCWRlZmluZSB0byBwYXRoIHRvIFJ1YnkgZGlyIHRvIGdldCBSdWJ5IHN1cHBvcnQgKG5vdCBkZWZpbmVkKQorIwkJTk9URTogWW91IG1heSBoYXZlIHRvIHJlbW92ZSB0aGUgZGVmaW5lcyBmb3IgdWlkX3QgYW5kIGdpZF90CisjCQlmcm9tIHRoZSBSdWJ5IGNvbmZpZy5oIGhlYWRlciBmaWxlLgorIyAgIFJVQllfVkVSCWRlZmluZSB0byB2ZXJzaW9uIG9mIFJ1YnkgYmVpbmcgdXNlZCAoMTYpCisjCQlOT1RFOiBjb21waWxhdGlvbiBvbiBXaW5OVC8ySy9YUCByZXF1aXJlcworIwkJYXQgbGVhc3QgdmVyc2lvbiAxLjYuNSBvZiBSdWJ5LiAgRWFybGllciB2ZXJzaW9ucworIwkJb2YgUnVieSB3aWxsIGNhdXNlIGEgY29tcGlsZSBlcnJvciBvbiB0aGVzZSBzeXN0ZW1zLgorIyAgIERZTkFNSUNfUlVCWSBubyBvciB5ZXM6IHVzZSB5ZXMgdG8gbG9hZCB0aGUgUnVieSBETEwgZHluYW1pY2FsbHkgKG5vKQorIyBNQllURQkJbm8gb3IgeWVzOiBzZXQgdG8geWVzIGZvciBtdWx0aS1ieXRlIHN1cHBvcnQgKHllcykKKyMgSU1FCQlubyBvciB5ZXM6IHNldCB0byB5ZXMgZm9yIG11bHRpLWJ5dGUgSU1FIHN1cHBvcnQgKHllcykKKyMgICBEWU5BTUlDX0lNRSBubyBvciB5ZXM6IHNldCB0byB5ZXMgdG8gbG9hZCBpbW0zMi5kbGwgZHluYW1pY2FsbHkgKHllcykKKyMgR0VUVEVYVAlubyBvciB5ZXM6IHNldCB0byB5ZXMgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnQgKHllcykKKyMgSUNPTlYJCW5vIG9yIHllczogc2V0IHRvIHllcyBmb3IgZHluYW1pYyBpY29udiBzdXBwb3J0ICh5ZXMpCisjIE9MRQkJbm8gb3IgeWVzOiBzZXQgdG8geWVzIHRvIG1ha2UgT0xFIGd2aW0gKG5vKQorIyBPU1RZUEUJRE9TMTYgb3IgV0lOMzIgKFdJTjMyKQorIyBERUJVRwkJbm8gb3IgeWVzOiBzZXQgdG8geWVzIGlmIHlvdSB3aXNoIGEgREVCVUdnaW5nIGJ1aWxkIChubykKKyMgQ09ERUdVQVJECW5vIG9yIHllczogc2V0IHRvIHllcyBpZiB5b3Ugd2FudCB0byB1c2UgQ09ERUdVQVJEIChubykKKyMgQ1BVTlIJCTEgdGhyb3VnaCA2OiBzZWxlY3QgLUNQVSBhcmd1bWVudCB0byBjb21waWxlIHdpdGggKDMpCisjCQkzIGZvciAzODYsIDQgZm9yIDQ4NiwgNSBmb3IgcGVudGl1bSwgNiBmb3IgcGVudGl1bSBwcm8uCisjIFVTRURMTAlubyBvciB5ZXM6IHNldCB0byB5ZXMgdG8gdXNlIHRoZSBSdW50aW1lIGxpYnJhcnkgRExMIChubykKKyMJCUZvciBVU0VETEw9eWVzIHRoZSBjYzMyNTAuZGxsIGlzIHJlcXVpcmVkIHRvIHJ1biBWaW0uCisjIFZJTURMTAlubyBvciB5ZXM6IGNyZWF0ZSB2aW0zMi5kbGwsIGFuZCBzdHViIChnKXZpbS5leGUgKG5vKQorIyBBTElHTgkJMSwgMiBvciA0OiBBbGlnbm1lbnQgdG8gdXNlICg0IGZvciBXaW4zMiwgMiBmb3IgRE9TMTYpCisjIEZBU1RDQUxMCW5vIG9yIHllczogc2V0IHRvIHllcyB0byB1c2UgcmVnaXN0ZXItYmFzZWQgZnVuY3Rpb24gcHJvdG9jb2wgKHllcykKKyMgT1BUSU1JWkUJU1BBQ0UsIFNQRUVELCBvciBNQVhTUEVFRDogdHlwZSBvZiBvcHRpbWl6YXRpb24gKE1BWFNQRUVEKQorIyBQT1NUU0NSSVBUCW5vIG9yIHllczogc2V0IHRvIHllcyBmb3IgUG9zdFNjcmlwdCBwcmludGluZworIyBGRUFUVVJFUwlUSU5ZLCBTTUFMTCwgTk9STUFMLCBCSUcgb3IgSFVHRQorIwkJKEJJRyBmb3IgV0lOMzIsIFNNQUxMIGZvciBET1MxNikKKyMgV0lOVkVSCTB4MDQwMCBvciAweDA1MDA6IG1pbmltdW0gV2luMzIgdmVyc2lvbiB0byBzdXBwb3J0ICgweDA0MDApCisjIENTQ09QRQlubyBvciB5ZXM6IGluY2x1ZGUgc3VwcG9ydCBmb3IgQ3Njb3BlIGludGVyZmFjZSAoeWVzKQorIyBORVRCRUFOUwlubyBvciB5ZXM6IGluY2x1ZGUgc3VwcG9ydCBmb3IgTmV0YmVhbnMgaW50ZXJmYWNlICh5ZXMgaWYgR1VJCisjCQlpcyB5ZXMpCisjIFhQTQkJZGVmaW5lIHRvIHBhdGggdG8gWFBNIGRpciB0byBnZXQgc3VwcG9ydCBmb3IgbG9hZGluZyBYUE0gaW1hZ2VzLgorCisjIyMgQk9SOiByb290IG9mIHRoZSBCQyBpbnN0YWxsYXRpb24KKyFpZiAoIiQoQk9SKSI9PSIiKQorQk9SID0gYzpcYmM1CishZW5kaWYKKworIyMjIExJTks6IE5hbWUgb2YgdGhlIGxpbmtlcjogdGxpbmsgb3IgaWxpbmszMiAodGhpcyBpcyBiZWxvdywgZGVwZW5kcyBvbgorIyAkKE9TVFlQRSkKKworIyMjIEdVSTogeWVzIGZvciBHVUkgdmVyc2lvbiwgbm8gZm9yIGNvbnNvbGUgdmVyc2lvbgorIWlmICgiJChHVUkpIj09IiIpCitHVUkgPSB5ZXMKKyFlbmRpZgorCisjIyMgTUJZVEU6IHllcyBmb3IgbXVsdGlieXRlIHN1cHBvcnQsIG5vIHRvIGRpc2FibGUgaXQuCishaWYgKCIkKE1CWVRFKSI9PSIiKQorTUJZVEUgPSB5ZXMKKyFlbmRpZgorCisjIyMgSU1FOiB5ZXMgZm9yIG11bHRpYnl0ZSBzdXBwb3J0LCBubyB0byBkaXNhYmxlIGl0LgorIWlmICgiJChJTUUpIj09IiIpCitJTUUgPSB5ZXMKKyFlbmRpZgorIWlmICgiJChEWU5BTUlDX0lNRSkiPT0iIikKK0RZTkFNSUNfSU1FID0geWVzCishZW5kaWYKKworIyMjIEdFVFRFWFQ6IHllcyBmb3IgbXVsdGlsYW5ndWFnZSBzdXBwb3J0LCBubyB0byBkaXNhYmxlIGl0LgorIWlmICgiJChHRVRURVhUKSI9PSIiKQorR0VUVEVYVCA9IHllcworIWVuZGlmCisKKyMjIyBJQ09OVjogeWVzIHRvIGVuYWJsZSBkeW5hbWljLWljb252IHN1cHBvcnQsIG5vIHRvIGRpc2FibGUgaXQKKyFpZiAoIiQoSUNPTlYpIj09IiIpCitJQ09OViA9IHllcworIWVuZGlmCisKKyMjIyBDU0NPUEU6IHllcyB0byBlbmFibGUgQ3Njb3BlIHN1cHBvcnQsIG5vIHRvIGRpc2FibGUgaXQKKyFpZiAoIiQoQ1NDT1BFKSI9PSIiKQorQ1NDT1BFID0geWVzCishZW5kaWYKKworIyMjIE5FVEJFQU5TOiB5ZXMgdG8gZW5hYmxlIE5ldEJlYW5zIGludGVyZmFjZSBzdXBwb3J0LCBubyB0byBkaXNhYmxlIGl0CishaWYgKCIkKE5FVEJFQU5TKSI9PSIiKSAmJiAoIiQoR1VJKSI9PSJ5ZXMiKQorTkVUQkVBTlMgPSB5ZXMKKyFlbmRpZgorCisjIyMgUEVSTDogdW5jb21tZW50IHRoaXMgbGluZSBpZiB5b3Ugd2FudCBwZXJsIHN1cHBvcnQgaW4gdmltCisjIFBFUkw9YzpccGVybAorCisjIyMgUFlUSE9OOiB1bmNvbW1lbnQgdGhpcyBsaW5lIGlmIHlvdSB3YW50IHB5dGhvbiBzdXBwb3J0IGluIHZpbQorIyBQWVRIT049YzpccHl0aG9uMjIKKworIyMjIFJVQlk6IHVuY29tbWVudCB0aGlzIGxpbmUgaWYgeW91IHdhbnQgcnVieSBzdXBwb3J0IGluIHZpbQorIyBSVUJZPWM6XHJ1YnkKKworIyMjIFRDTDogdW5jb21tZW50IHRoaXMgbGluZSBpZiB5b3Ugd2FudCB0Y2wgc3VwcG9ydCBpbiB2aW0KKyMgVENMPWM6XHRjbAorCisjIyMgT0xFOiBubyBmb3Igbm9ybWFsIGd2aW0sIHllcyBmb3IgT0xFLWNhcGFibGUgZ3ZpbSAob25seSB3b3JrcyB3aXRoIEdVSSkKKyNPTEUgPSB5ZXMKKworIyMjIE9TVFlQRTogRE9TMTYgZm9yIFdpbmRvd3MgMy4xIHZlcnNpb24sIFdJTjMyIGZvciBXaW5kb3dzIDk1Lzk4L05ULzIwMDAKKyMgICB2ZXJzaW9uCishaWYgKCIkKE9TVFlQRSkiPT0iIikKK09TVFlQRSA9IFdJTjMyCishZW5kaWYKKworIyMjIERFQlVHOiBVbmNvbW1lbnQgdG8gbWFrZSBhbiBleGVjdXRhYmxlIGZvciBkZWJ1Z2dpbmcKKyMgREVCVUcgPSB5ZXMKKyFpZiAoIiQoREVCVUcpIj09InllcyIpCitERUJVR19GTEFHID0gLXYKKyFlbmRpZgorCisjIyMgQ09ERUdVQVJEOiBVbmNvbW1lbnQgdG8gdXNlIHRoZSBDT0RFR1VBUkQgc3R1ZmYgKEJDIDUuMCBvciBsYXRlcik6CisjIENPREVHVUFSRCA9IHllcworIWlmICgiJChDT0RFR1VBUkQpIj09InllcyIpCitDT0RFR1VBUkRfRkxBRyA9IC12RworIWVuZGlmCisKKyMjIyBDUFVOUjogc2V0IHlvdXIgdGFyZ2V0IHByb2Nlc3NvciAoMyB0byA2KQorIWlmICgiJChDUFVOUikiID09ICJpMzg2IikgfHwgKCIkKENQVU5SKSIgPT0gIjMiKQorQ1BVTlIgPSAzCishZWxpZiAoIiQoQ1BVTlIpIiA9PSAiaTQ4NiIpIHx8ICgiJChDUFVOUikiID09ICI0IikKK0NQVU5SID0gNAorIWVsaWYgKCIkKENQVU5SKSIgPT0gImk1ODYiKSB8fCAoIiQoQ1BVTlIpIiA9PSAiNSIpCitDUFVOUiA9IDUKKyFlbGlmICgiJChDUFVOUikiID09ICJpNjg2IikgfHwgKCIkKENQVU5SKSIgPT0gIjYiKQorQ1BVTlIgPSA2CishZWxzZQorQ1BVTlIgPSAzCishZW5kaWYKKworIyMjIENvbW1lbnQgb3V0IHRvIHVzZSBwcmVjb21waWxlZCBoZWFkZXJzIChmYXN0ZXIsIGJ1dCB1c2VzIGxvdHMgb2YgZGlzayEpCitIRUFERVJTID0gLUggLUg9dmltLmNzbSAtSGMKKworIyMjIFVTRURMTDogbm8gZm9yIHN0YXRpY2FsbHkgbGlua2VkIHZlcnNpb24gb2YgcnVuLXRpbWUsIHllcyBmb3IgRExMIHJ1bnRpbWUKKyFpZiAoIiQoVVNFRExMKSI9PSIiKQorVVNFRExMID0gbm8KKyFlbmRpZgorCisjIyMgVklNRExMOiB5ZXMgZm9yIGEgRExMIHZlcnNpb24gb2YgVklNIChOT1QgUkVDT01NRU5ERUQpLCBubyBvdGhlcndpc2UKKyNWSU1ETEwgPSB5ZXMKKworIyMjIEFMSUdOOiBhbGlnbm1lbnQgeW91IGRlc2lyZTogKDEsMiBvciA0OiBzL2IgNCBmb3IgV2luMzIsIDIgZm9yIERPUykKKyFpZiAoIiQoQUxJR04pIj09IiIpCishaWYgKCQoT1NUWVBFKT09RE9TMTYpCitBTElHTiA9IDIKKyFlbHNlCitBTElHTiA9IDQKKyFlbmRpZgorIWVuZGlmCisKKyMjIyBGQVNUQ0FMTDogeWVzIHRvIHVzZSBGQVNUQ0FMTCBjYWxsaW5nIGNvbnZlbnRpb24gKFJFQ09NTUVOREVEISksIG5vIG90aGVyd2lzZQorIyAgIEluY29tcGF0aWJsZSB3aGVuIGNhbGxpbmcgZXh0ZXJuYWwgZnVuY3Rpb25zIChsaWtlIE1TVkMtY29tcGlsZWQgRExMcyksIHNvCisjICAgZG9uJ3QgdXNlIEZBU1RDQUxMIHdoZW4gbGlua2luZyB3aXRoIGV4dGVybmFsIGxpYnMuCishaWYgKCIkKEZBU1RDQUxMKSI9PSIiKSAmJiBcCisJKCIkKFBZVEhPTikiPT0iIikgJiYgXAorCSgiJChQRVJMKSI9PSIiKSAmJiBcCisJKCIkKFRDTCkiPT0iIikgJiYgXAorCSgiJChSVUJZKSI9PSIiKSAmJiBcCisJKCIkKElDT05WKSIhPSJ5ZXMiKSAmJiBcCisJKCIkKElNRSkiIT0ieWVzIikgJiYgXAorCSgiJChNQllURSkiIT0ieWVzIikgJiYgXAorCSgiJChYUE0pIj09IiIpCitGQVNUQ0FMTCA9IHllcworIWVuZGlmCisKKyMjIyBPUFRJTUlaRTogU1BFRUQgdG8gb3B0aW1pemUgZm9yIHNwZWVkLCBTUEFDRSBvdGhlcndpc2UgKFNQRUVEIFJFQ09NTUVOREVEKQorIWlmICgiJChPUFRJTUlaRSkiPT0iIikKK09QVElNSVpFID0gTUFYU1BFRUQKKyFlbmRpZgorCisjIyMgRkVBVFVSRVM6IFRJTlksIFNNQUxMLCBOT1JNQUwsIEJJRyBvciBIVUdFIChCSUcgZm9yIFdJTjMyLCBTTUFMTCBmb3IgRE9TMTYpCishaWYgKCIkKEZFQVRVUkVTKSI9PSIiKQorISBpZiAoJChPU1RZUEUpPT1ET1MxNikKK0ZFQVRVUkVTID0gU01BTEwKKyEgZWxzZQorRkVBVFVSRVMgPSBCSUcKKyEgZW5kaWYKKyFlbmRpZgorCisjIyMgUE9TVFNDUklQVDogdW5jb21tZW50IHRoaXMgbGluZSBpZiB5b3Ugd2FudCBQb3N0U2NyaXB0IHByaW50aW5nCisjUE9TVFNDUklQVCA9IHllcworCisjIyMKKyMgSWYgeW91IGhhdmUgYSBmaXhlZCBkaXJlY3RvcnkgZm9yICRWSU0gb3IgJFZJTVJVTlRJTUUsIG90aGVyIHRoYW4gdGhlIG5vcm1hbAorIyBkZWZhdWx0LCB1c2UgdGhlc2UgbGluZXMuCisjVklNUkNMT0MgPSBzb21ld2hlcmUKKyNWSU1SVU5USU1FRElSID0gc29tZXdoZXJlCisKKyMjIyBTZXQgdGhlIGRlZmF1bHQgJChXSU5WRVIpIHRvIG1ha2UgaXQgd29yayB3aXRoIEJjYyA1LjUuCishaWZuZGVmIFdJTlZFUgorV0lOVkVSID0gMHgwNDAwCishZW5kaWYKKworIworIyBTYW5pdHkgY2hlY2tzIGZvciB0aGUgYWJvdmUgb3B0aW9uczoKKyMKKworIWlmICgkKE9TVFlQRSk9PURPUzE2KQorIWlmICgoJChDUFVOUikrMCk+NCkKKyFlcnJvciBDUFVOUiBNdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA0IGZvciBET1MxNgorIWVuZGlmCisKKyFpZiAoKCQoQUxJR04pKzApPjIpCishZXJyb3IgQUxJR04gTXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMiBmb3IgRE9TMTYKKyFlbmRpZgorCishZWxzZQkjIG5vdCBET1MxNgorIWlmICgoJChDUFVOUikrMCk8MykKKyFlcnJvciBDUFVOUiBNdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMyBmb3IgV0lOMzIKKyFlbmRpZgorIWVuZGlmCisKKyFpZiAoJChPU1RZUEUpIT1XSU4zMikgJiYgKCQoT1NUWVBFKSE9RE9TMTYpCishZXJyb3IgQ2hlY2sgdGhlIE9TVFlQRSB2YXJpYWJsZSBhZ2FpbjogJChPU1RZUEUpIGlzIG5vdCBzdXBwb3J0ZWQhCishZW5kaWYKKworIworIyBPcHRpbWl6YXRpb25zOiBjaGFuZ2UgYXMgZGVzaXJlZCAoUkVDT01NRU5EQVRJT046IERvbid0IGNoYW5nZSEpOgorIworIWlmICgiJChERUJVRykiPT0ieWVzIikKK09QVCA9IC1PZCAtTgorIWVsc2UKKyFpZiAoIiQoT1BUSU1JWkUpIj09IlNQQUNFIikKK09QVCA9IC1PMSAtZi0gLWQKKyFlbGlmICgiJChPUFRJTUlaRSkiPT0iTUFYU1BFRUQiKQorT1BUID0gLU8yIC1mLSAtZCAtT2NhdmkgLU8KKyFlbHNlCitPUFQgPSAtTzIgLWYtIC1kIC1PYyAtTworIWVuZGlmCishaWYgKCIkKEZBU1RDQUxMKSI9PSJ5ZXMiKQorT1BUID0gJChPUFQpIC1wcgorIWVuZGlmCishaWYgKCIkKENPREVHVUFSRCkiIT0ieWVzIikKK09QVCA9ICQoT1BUKSAtdmktCishZW5kaWYKKyFlbmRpZgorIWlmICgkKE9TVFlQRSk9PURPUzE2KQorIXVuZGVmIEdVSQorIXVuZGVmIFZJTURMTAorIXVuZGVmIFVTRURMTAorIWVuZGlmCisjIHNob3VsZG4ndCBoYXZlIHRvIGNoYW5nZToKK0xJQiA9ICQoQk9SKVxsaWIKK0lOQ0xVREUgPSAkKEJPUilcaW5jbHVkZTsuO3Byb3RvCitERUZJTkVTID0gLURGRUFUXyQoRkVBVFVSRVMpIC1EV0lOMzIgLURIQVZFX1BBVEhERUYgXAorCSAgLURXSU5WRVI9JChXSU5WRVIpIC1EX1dJTjMyX1dJTk5UPSQoV0lOVkVSKQorCishaWZkZWYgUEVSTAorSU5URVJQX0RFRklORVMgPSAkKElOVEVSUF9ERUZJTkVTKSAtREZFQVRfUEVSTAorSU5DTFVERSA9ICQoUEVSTClcbGliXGNvcmU7JChJTkNMVURFKQorISAgaWZuZGVmIFBFUkxfVkVSCitQRVJMX1ZFUiA9IDU2CishICBlbmRpZgorISAgaWYgKCIkKERZTkFNSUNfUEVSTCkiID09ICJ5ZXMiKQorISAgICBpZiAoJChQRVJMX1ZFUikgPiA1NSkKK0lOVEVSUF9ERUZJTkVTID0gJChJTlRFUlBfREVGSU5FUykgLUREWU5BTUlDX1BFUkwgLUREWU5BTUlDX1BFUkxfRExMPVwicGVybCQoUEVSTF9WRVIpLmRsbFwiCitQRVJMX0xJQl9GTEFHID0gL25vZGVmYXVsdGxpYjoKKyEgICAgZWxzZQorISAgICAgIG1lc3NhZ2UgIkNhbm5vdCBkeW5hbWljYWxseSBsb2FkIFBlcmwgdmVyc2lvbnMgbGVzcyB0aGFuIDUuNi4gIExvYWRpbmcgc3RhdGljYWxseS4uLiIKKyEgICAgZW5kaWYKKyEgIGVuZGlmCishZW5kaWYKKworIWlmZGVmIFBZVEhPTgorSU5URVJQX0RFRklORVMgPSAkKElOVEVSUF9ERUZJTkVTKSAtREZFQVRfUFlUSE9OCitJTkNMVURFID0gJChQWVRIT04pXGluY2x1ZGU7JChJTkNMVURFKQorIWlmbmRlZiBQWVRIT05fVkVSCitQWVRIT05fVkVSID0gMjIKKyFlbmRpZgorIWlmICIkKERZTkFNSUNfUFlUSE9OKSIgPT0gInllcyIKK0lOVEVSUF9ERUZJTkVTID0gJChJTlRFUlBfREVGSU5FUykgLUREWU5BTUlDX1BZVEhPTiAtRERZTkFNSUNfUFlUSE9OX0RMTD1cInB5dGhvbiQoUFlUSE9OX1ZFUikuZGxsXCIKK1BZVEhPTl9MSUJfRkxBRyA9IC9ub2RlZmF1bHRsaWI6CishZW5kaWYKKyFlbmRpZgorCishaWZkZWYgUlVCWQorIWlmbmRlZiBSVUJZX1ZFUgorUlVCWV9WRVIgPSAxNgorIWVuZGlmCishaWZuZGVmIFJVQllfVkVSX0xPTkcKK1JVQllfVkVSX0xPTkcgPSAxLjYKKyFlbmRpZgorCishaWYgIiQoUlVCWV9WRVIpIiA9PSAiMTYiCishaWZuZGVmIFJVQllfUExBVEZPUk0KK1JVQllfUExBVEZPUk0gPSBpNTg2LW1zd2luMzIKKyFlbmRpZgorIWlmbmRlZiBSVUJZX0lOU1RBTExfTkFNRQorUlVCWV9JTlNUQUxMX05BTUUgPSBtc3dpbjMyLXJ1YnkkKFJVQllfVkVSKQorIWVuZGlmCishZWxzZQorIWlmbmRlZiBSVUJZX1BMQVRGT1JNCitSVUJZX1BMQVRGT1JNID0gaTM4Ni1tc3dpbjMyCishZW5kaWYKKyFpZm5kZWYgUlVCWV9JTlNUQUxMX05BTUUKK1JVQllfSU5TVEFMTF9OQU1FID0gbXN2Y3J0LXJ1YnkkKFJVQllfVkVSKQorIWVuZGlmCishZW5kaWYKKworSU5URVJQX0RFRklORVMgPSAkKElOVEVSUF9ERUZJTkVTKSAtREZFQVRfUlVCWQorSU5DTFVERSA9ICQoUlVCWSlcbGliXHJ1YnlcJChSVUJZX1ZFUl9MT05HKVwkKFJVQllfUExBVEZPUk0pOyQoSU5DTFVERSkKKworIWlmICIkKERZTkFNSUNfUlVCWSkiID09ICJ5ZXMiCitJTlRFUlBfREVGSU5FUyA9ICQoSU5URVJQX0RFRklORVMpIC1ERFlOQU1JQ19SVUJZIC1ERFlOQU1JQ19SVUJZX0RMTD1cIiQoUlVCWV9JTlNUQUxMX05BTUUpLmRsbFwiCitJTlRFUlBfREVGSU5FUyA9ICQoSU5URVJQX0RFRklORVMpIC1ERFlOQU1JQ19SVUJZX1ZFUj0kKFJVQllfVkVSKQorUlVCWV9MSUJfRkxBRyA9IC9ub2RlZmF1bHRsaWI6CishZW5kaWYKKyFlbmRpZgorCishaWZkZWYgVENMCitJTlRFUlBfREVGSU5FUyA9ICQoSU5URVJQX0RFRklORVMpIC1ERkVBVF9UQ0wKK0lOQ0xVREUgPSAkKFRDTClcaW5jbHVkZTskKElOQ0xVREUpCishaWZuZGVmIFRDTF9WRVIKK1RDTF9WRVIgPSA4MworIWVuZGlmCitUQ0xfTElCID0gJChUQ0wpXGxpYlx0Y2wkKFRDTF9WRVIpLmxpYgorVENMX0xJQl9GTEFHID0KKyFpZiAiJChEWU5BTUlDX1RDTCkiID09ICJ5ZXMiCitJTlRFUlBfREVGSU5FUyA9ICQoSU5URVJQX0RFRklORVMpIC1ERFlOQU1JQ19UQ0wgLUREWU5BTUlDX1RDTF9ETEw9XCJ0Y2wkKFRDTF9WRVIpLmRsbFwiCitUQ0xfTElCID0gdGNsc3R1YiQoVENMX1ZFUiktYm9yLmxpYgorVENMX0xJQl9GTEFHID0KKyFlbmRpZgorIWVuZGlmCisjCisjIERPIE5PVCBjaGFuZ2UgYmVsb3c6CisjCitDUFVBUkcgPSAtJChDUFVOUikKK0FMSUdOQVJHID0gLWEkKEFMSUdOKQorIworIWlmICgiJChERUJVRykiPT0ieWVzIikKK0RFRklORVM9JChERUZJTkVTKSAtRERFQlVHCishZW5kaWYKKyMKKyFpZiAoIiQoT0xFKSI9PSJ5ZXMiKQorREVGSU5FUyA9ICQoREVGSU5FUykgLURGRUFUX09MRQorIWVuZGlmCisjCishaWYgKCIkKE1CWVRFKSI9PSJ5ZXMiKQorTUJERUZJTkVTID0gJChNQkRFRklORVMpIC1ERkVBVF9NQllURQorIWVuZGlmCishaWYgKCIkKElNRSkiPT0ieWVzIikKK01CREVGSU5FUyA9ICQoTUJERUZJTkVTKSAtREZFQVRfTUJZVEVfSU1FCishaWYgKCIkKERZTkFNSUNfSU1FKSIgPT0gInllcyIpCitNQkRFRklORVMgPSAkKE1CREVGSU5FUykgLUREWU5BTUlDX0lNRQorIWVuZGlmCishZW5kaWYKKyFpZiAoIiQoSUNPTlYpIj09InllcyIpCitNQkRFRklORVMgPSAkKE1CREVGSU5FUykgLUREWU5BTUlDX0lDT05WCishZW5kaWYKKyFpZiAoIiQoR0VUVEVYVCkiPT0ieWVzIikKK01CREVGSU5FUyA9ICQoTUJERUZJTkVTKSAtRERZTkFNSUNfR0VUVEVYVAorIWVuZGlmCisKKyFpZiAoIiQoQ1NDT1BFKSI9PSJ5ZXMiKQorREVGSU5FUyA9ICQoREVGSU5FUykgLURGRUFUX0NTQ09QRQorIWVuZGlmCisKKyFpZiAoIiQoTkVUQkVBTlMpIj09InllcyIpCitERUZJTkVTID0gJChERUZJTkVTKSAtREZFQVRfTkVUQkVBTlNfSU5URworIWlmICgiJChERUJVRykiPT0ieWVzIikKK0RFRklORVMgPSAkKERFRklORVMpIC1ETkJERUJVRworTkJERUJVR19ERVAgPSBuYmRlYnVnLmggbmJkZWJ1Zy5jCishZW5kaWYKKyFlbmRpZgorCishaWZkZWYgWFBNCitERUZJTkVTID0gJChERUZJTkVTKSAtREZFQVRfWFBNX1czMgorSU5DTFVERSA9ICQoWFBNKVxpbmNsdWRlOyQoSU5DTFVERSkKKyFlbmRpZgorCishaWYgKCIkKEdVSSkiPT0ieWVzIikKK0RFRklORVMgPSAkKERFRklORVMpIC1ERkVBVF9HVUlfVzMyIC1ERkVBVF9DTElQQk9BUkQKKyFpZiAoIiQoREVCVUcpIj09InllcyIpCitUQVJHRVQgPSBndmltZC5leGUKKyFlbHNlCitUQVJHRVQgPSBndmltLmV4ZQorIWVuZGlmCishaWYgKCIkKFZJTURMTCkiPT0ieWVzIikKK0VYRVRZUEU9LVdECitERUZJTkVTID0gJChERUZJTkVTKSAtRFZJTURMTAorIWVsc2UKK0VYRVRZUEU9LVcKKyFlbmRpZgorU1RBUlRVUE9CSiA9IGMwdzMyLm9iagorTElOSzIgPSAtYWEKK1JFU0ZJTEUgPSB2aW0ucmVzCishZWxzZQorIWlmICgiJChERUJVRykiPT0ieWVzIikKK1RBUkdFVCA9IHZpbWQuZXhlCishZWxzZQorIyBmb3Igbm93LCBhbnl3YXk6IFZJTURMTCBpcyBvbmx5IGZvciB0aGUgR1VJIHZlcnNpb24KKyF1bmRlZiBWSU1ETEwKK1RBUkdFVCA9IHZpbS5leGUKKyFlbmRpZgorIWlmICgkKE9TVFlQRSk9PURPUzE2KQorREVGSU5FUz0gLURGRUFUXyQoRkVBVFVSRVMpIC1ETVNET1MKK0VYRVRZUEU9LW1sCitTVEFSVFVQT0JKID0gYzBsLm9iagorTElOSzIgPQorIWVsc2UKK0VYRVRZUEU9LVdDCitTVEFSVFVQT0JKID0gYzB4MzIub2JqCitMSU5LMiA9IC1hcCAtT1MgLW8gLVAKKyFlbmRpZgorUkVTRklMRSA9IHZpbS5yZXMKKyFlbmRpZgorCishaWYgKCIkKFVTRURMTCkiPT0ieWVzIikKK0RFRklORVMgPSAkKERFRklORVMpIC1EX1JUTERMTAorIWVuZGlmCisKKyFpZiAoIiQoREVCVUcpIj09InllcyIpCitPQkpESVIJPSAkKE9TVFlQRSlcb2JqZGJnCishZWxzZQorIWlmICgiJChHVUkpIj09InllcyIpCishaWYgKCIkKE9MRSkiPT0ieWVzIikKK09CSkRJUgk9ICQoT1NUWVBFKVxvbGVvYmoKKyFlbHNlCitPQkpESVIJPSAkKE9TVFlQRSlcZ29iagorIWVuZGlmCishZWxzZQorT0JKRElSCT0gJChPU1RZUEUpXG9iagorIWVuZGlmCishZW5kaWYKKworIWlmICgiJChQT1NUU0NSSVBUKSI9PSJ5ZXMiKQorREVGSU5FUyA9ICQoREVGSU5FUykgLURNU1dJTlBTCishZW5kaWYKKworIyMjIyMgQkFTRSBDT01QSUxFUi9UT09MUyBSVUxFUyAjIyMjIworTUFLRSA9ICQoQk9SKVxiaW5cbWFrZQorQ0ZMQUdTID0gLXctYXVzIC13LXBhciAtdy1wY2ggLXctbmd1IC13LWNzdSAtSSQoSU5DTFVERSkKKyFpZiAoJChPU1RZUEUpPT1ET1MxNikKK0JSQyA9CishaWYgKCIkKExJTkspIj09IiIpCitMSU5LCT0gJChCT1IpXEJJTlxUTGluaworIWVuZGlmCitDQyAgID0gJChCT1IpXEJJTlxCY2MKK0xGTEFHUwk9IC1UZGUgLWMgLW0gLUwkKExJQikgJChERUJVR19GTEFHKSAkKExJTksyKQorTEZMQUdTRExMICA9CitDRkxBR1MgPSAkKENGTEFHUykgLUgtICQoSEVBREVSUykKKyFlbHNlCitCUkMgPSAkKEJPUilcQklOXGJyYzMyCishaWYgKCIkKExJTkspIj09IiIpCitMSU5LCT0gJChCT1IpXEJJTlxJTGluazMyCishZW5kaWYKK0NDICAgPSAkKEJPUilcQklOXEJjYzMyCitMRkxBR1MJPSAtT1MgLVRwZSAtYyAtbSAtTCQoTElCKSAkKERFQlVHX0ZMQUcpICQoTElOSzIpCitMRkxBR1NETEwgID0gLVRwZCAtYyAtbSAtTCQoTElCKSAkKERFQlVHX0ZMQUcpICQoTElOSzIpCitDRkxBR1MgPSAkKENGTEFHUykgLWQgLVJULSAtay0gLU9pICQoSEVBREVSUykgLWYtCishZW5kaWYKKworQ0MxID0gLWMKK0NDMiA9IC1vCitDQ0FSRyA9ICskKE9CSkRJUilcYmNjLmNmZworCisjIGltcGxpY2l0IHJ1bGVzOgorCisjIFdpdGhvdXQgdGhlIGZvbGxvd2luZywgdGhlIGltcGxpY2l0IHJ1bGUgaW4gQlVJTFRJTlMuTUFLIGlzIHBpY2tlZCB1cAorIyBmb3IgYSBydWxlIGZvciAuYy5vYmogcmF0aGVyIHRoYW4gdGhlIGxvY2FsIGltcGxpY2l0IHJ1bGUKKy5TVUZGSVhFUworLlNVRkZJWEVTIC5jIC5vYmoKKy5wYXRoLmMgPSAuCisKK3sufS5jeyQoT0JKRElSKX0ub2JqOgorCSQoQ0MpICQoQ0NBUkcpICQoQ0MxKSAtbiQoT0JKRElSKVwgeyQ8IH0KKworLmNwcC5vYmo6CisJJChDQykgJChDQ0FSRykgJChDQzEpICQoQ0MyKSRAICQqLmNwcAorCishaWYgKCQoT1NUWVBFKT09RE9TMTYpCishZWxzZSAjIHdpbjMyOgordmltbWFpbiA9IFwKKwkkKE9CSkRJUilcb3NfdzMyZXhlLm9iagorIWlmICgiJChWSU1ETEwpIj09InllcyIpCit2aW13aW5tYWluID0gXAorCSQoT0JKRElSKVxvc193MzJkbGwub2JqCishZWxzZQordmltd2lubWFpbiA9IFwKKwkkKE9CSkRJUilcb3NfdzMyZXhlLm9iagorIWVuZGlmCishZW5kaWYKKwordmltb2JqID0gIFwKKwkkKE9CSkRJUilcYnVmZmVyLm9iaiBcCisJJChPQkpESVIpXGNoYXJzZXQub2JqIFwKKwkkKE9CSkRJUilcZGlmZi5vYmogXAorCSQoT0JKRElSKVxkaWdyYXBoLm9iaiBcCisJJChPQkpESVIpXGVkaXQub2JqIFwKKwkkKE9CSkRJUilcZXZhbC5vYmogXAorCSQoT0JKRElSKVxleF9jbWRzLm9iaiBcCisJJChPQkpESVIpXGV4X2NtZHMyLm9iaiBcCisJJChPQkpESVIpXGV4X2RvY21kLm9iaiBcCisJJChPQkpESVIpXGV4X2V2YWwub2JqIFwKKwkkKE9CSkRJUilcZXhfZ2V0bG4ub2JqIFwKKwkkKE9CSkRJUilcZmlsZWlvLm9iaiBcCisJJChPQkpESVIpXGZvbGQub2JqIFwKKwkkKE9CSkRJUilcZ2V0Y2hhci5vYmogXAorCSQoT0JKRElSKVxtYWluLm9iaiBcCisJJChPQkpESVIpXG1hcmsub2JqIFwKKwkkKE9CSkRJUilcbWVtZmlsZS5vYmogXAorCSQoT0JKRElSKVxtZW1saW5lLm9iaiBcCisJJChPQkpESVIpXG1lbnUub2JqIFwKKwkkKE9CSkRJUilcbWVzc2FnZS5vYmogXAorCSQoT0JKRElSKVxtaXNjMS5vYmogXAorCSQoT0JKRElSKVxtaXNjMi5vYmogXAorCSQoT0JKRElSKVxtb3ZlLm9iaiBcCisJJChPQkpESVIpXG1ieXRlLm9iaiBcCisJJChPQkpESVIpXG5vcm1hbC5vYmogXAorCSQoT0JKRElSKVxvcHMub2JqIFwKKwkkKE9CSkRJUilcb3B0aW9uLm9iaiBcCisJJChPQkpESVIpXHF1aWNrZml4Lm9iaiBcCisJJChPQkpESVIpXHJlZ2V4cC5vYmogXAorCSQoT0JKRElSKVxzY3JlZW4ub2JqIFwKKwkkKE9CSkRJUilcc2VhcmNoLm9iaiBcCisJJChPQkpESVIpXHN5bnRheC5vYmogXAorCSQoT0JKRElSKVx0YWcub2JqIFwKKwkkKE9CSkRJUilcdGVybS5vYmogXAorCSQoT0JKRElSKVx1aS5vYmogXAorCSQoT0JKRElSKVx1bmRvLm9iaiBcCisJJChPQkpESVIpXHZlcnNpb24ub2JqIFwKKwkkKE9CSkRJUilcd2luZG93Lm9iaiBcCisJJChPQkpESVIpXHBhdGhkZWYub2JqCisKKyFpZiAoIiQoT0xFKSI9PSJ5ZXMiKQordmltb2JqID0gJCh2aW1vYmopIFwKKwkkKE9CSkRJUilcaWZfb2xlLm9iagorIWVuZGlmCisKKyFpZmRlZiBQRVJMCit2aW1vYmogPSAkKHZpbW9iaikgXAorICAgICQoT0JKRElSKVxpZl9wZXJsLm9iagorIWVuZGlmCisKKyFpZmRlZiBQWVRIT04KK3ZpbW9iaiA9ICQodmltb2JqKSBcCisgICAgJChPQkpESVIpXGlmX3B5dGhvbi5vYmoKKyFlbmRpZgorCishaWZkZWYgUlVCWQordmltb2JqID0gJCh2aW1vYmopIFwKKyAgICAkKE9CSkRJUilcaWZfcnVieS5vYmoKKyFlbmRpZgorCishaWZkZWYgVENMCit2aW1vYmogPSAkKHZpbW9iaikgXAorICAgICQoT0JKRElSKVxpZl90Y2wub2JqCishZW5kaWYKKworIWlmICgiJChDU0NPUEUpIj09InllcyIpCit2aW1vYmogPSAkKHZpbW9iaikgXAorICAgICQoT0JKRElSKVxpZl9jc2NvcGUub2JqCishZW5kaWYKKworIWlmICgiJChORVRCRUFOUykiPT0ieWVzIikKK3ZpbW9iaiA9ICQodmltb2JqKSBcCisgICAgJChPQkpESVIpXG5ldGJlYW5zLm9iaiAkKE9CSkRJUilcZ3VpX2JldmFsLm9iagorIWVuZGlmCisKKyFpZmRlZiBYUE0KK3ZpbW9iaiA9ICQodmltb2JqKSBcCisgICAgJChPQkpESVIpXHhwbV93MzIub2JqCishZW5kaWYKKworIWlmICgiJChWSU1ETEwpIj09InllcyIpCit2aW1kbGxvYmogPSAkKHZpbW9iaikKKyFpZiAoIiQoREVCVUcpIj09InllcyIpCitETExUQVJHRVQgPSB2aW0zMmQuZGxsCishZWxzZQorRExMVEFSR0VUID0gdmltMzIuZGxsCishZW5kaWYKKyFlbHNlCitETExUQVJHRVQgPSBqb2Vib2IKKyFlbmRpZgorCishaWYgKCIkKEdVSSkiPT0ieWVzIikKK3ZpbW9iaiA9ICQodmltb2JqKSBcCisJJCh2aW13aW5tYWluKSBcCisJJChPQkpESVIpXGd1aS5vYmogXAorCSQoT0JKRElSKVxndWlfdzMyLm9iagorIWVuZGlmCisKKyFpZiAoJChPU1RZUEUpPT1XSU4zMikKK3ZpbW9iaiA9ICQodmltb2JqKSBcCisJJChPQkpESVIpXG9zX3dpbjMyLm9iaiAkKE9CSkRJUilcb3NfbXN3aW4ub2JqCishZWxpZiAoJChPU1RZUEUpPT1ET1MxNikKK3ZpbW9iaiA9ICQodmltb2JqKSBcCisJJChPQkpESVIpXG9zX21zZG9zLm9iagorIWVuZGlmCisjIEJsYWIgd2hhdCB3ZSBhcmUgZ29pbmcgdG8gZG86CitNU0cgPSBDb21waWxpbmcgJChPU1RZUEUpICQoVEFSR0VUKSAkKE9MRVRBUkdFVCksIHdpdGg6CishaWYgKCIkKEdVSSkiPT0ieWVzIikKK01TRyA9ICQoTVNHKSBHVUkKKyFlbmRpZgorIWlmICgiJChPTEUpIj09InllcyIpCitNU0cgPSAkKE1TRykgT0xFCishZW5kaWYKKyFpZiAoIiQoVVNFRExMKSI9PSJ5ZXMiKQorTVNHID0gJChNU0cpIFVTRURMTAorIWVuZGlmCishaWYgKCIkKFZJTURMTCkiPT0ieWVzIikKK01TRyA9ICQoTVNHKSBWSU1ETEwKKyFlbmRpZgorIWlmICgiJChGQVNUQ0FMTCkiPT0ieWVzIikKK01TRyA9ICQoTVNHKSBGQVNUQ0FMTAorIWVuZGlmCishaWYgKCIkKE1CWVRFKSI9PSJ5ZXMiKQorTVNHID0gJChNU0cpIE1CWVRFCishZW5kaWYKKyFpZiAoIiQoSU1FKSI9PSJ5ZXMiKQorTVNHID0gJChNU0cpIElNRQorISBpZiAiJChEWU5BTUlDX0lNRSkiID09ICJ5ZXMiCitNU0cgPSAkKE1TRykoZHluYW1pYykKKyEgZW5kaWYKKyFlbmRpZgorIWlmICgiJChHRVRURVhUKSI9PSJ5ZXMiKQorTVNHID0gJChNU0cpIEdFVFRFWFQKKyFlbmRpZgorIWlmICgiJChJQ09OVikiPT0ieWVzIikKK01TRyA9ICQoTVNHKSBJQ09OVgorIWVuZGlmCishaWYgKCIkKERFQlVHKSI9PSJ5ZXMiKQorTVNHID0gJChNU0cpIERFQlVHCishZW5kaWYKKyFpZiAoIiQoQ09ERUdVQVJEKSI9PSJ5ZXMiKQorTVNHID0gJChNU0cpIENPREVHVUFSRAorIWVuZGlmCishaWYgKCIkKENTQ09QRSkiPT0ieWVzIikKK01TRyA9ICQoTVNHKSBDU0NPUEUKKyFlbmRpZgorIWlmICgiJChORVRCRUFOUykiPT0ieWVzIikKK01TRyA9ICQoTVNHKSBORVRCRUFOUworIWVuZGlmCishaWZkZWYgWFBNCitNU0cgPSAkKE1TRykgWFBNCishZW5kaWYKKyFpZmRlZiBQRVJMCitNU0cgPSAkKE1TRykgUEVSTAorISBpZiAiJChEWU5BTUlDX1BFUkwpIiA9PSAieWVzIgorTVNHID0gJChNU0cpKGR5bmFtaWMpCishIGVuZGlmCishZW5kaWYKKyFpZmRlZiBQWVRIT04KK01TRyA9ICQoTVNHKSBQWVRIT04KKyEgaWYgIiQoRFlOQU1JQ19QWVRIT04pIiA9PSAieWVzIgorTVNHID0gJChNU0cpKGR5bmFtaWMpCishIGVuZGlmCishZW5kaWYKKyFpZmRlZiBSVUJZCitNU0cgPSAkKE1TRykgUlVCWQorISBpZiAiJChEWU5BTUlDX1JVQlkpIiA9PSAieWVzIgorTVNHID0gJChNU0cpKGR5bmFtaWMpCishIGVuZGlmCishZW5kaWYKKyFpZmRlZiBUQ0wKK01TRyA9ICQoTVNHKSBUQ0wKKyEgaWYgIiQoRFlOQU1JQ19UQ0wpIiA9PSAieWVzIgorTVNHID0gJChNU0cpKGR5bmFtaWMpCishIGVuZGlmCishZW5kaWYKK01TRyA9ICQoTVNHKSBjcHU9JChDUFVBUkcpCitNU0cgPSAkKE1TRykgQWxpZ249JChBTElHTkFSRykKKworIW1lc3NhZ2UgJChNU0cpCisKKyFpZiAoJChPU1RZUEUpPT1ET1MxNikKK1RBUkdFVFMgPSAkKFRBUkdFVCkKKyFlbHNlCishaWYgKCIkKFZJTURMTCkiPT0ieWVzIikKK1RBUkdFVFMgPSAkKERMTFRBUkdFVCkKKyFlbmRpZgorVEFSR0VUUyA9ICQoVEFSR0VUUykgJChUQVJHRVQpCishZW5kaWYKKworIyBUYXJnZXRzOgorYWxsOiB2aW0gdmltcnVuLmV4ZSBpbnN0YWxsLmV4ZSB4eGQgdW5pbnN0YWwuZXhlIEd2aW1FeHQvZ3ZpbWV4dC5kbGwKKwordmltOiAkKE9TVFlQRSkgJChPQkpESVIpICQoT0JKRElSKVxiY2MuY2ZnICQoVEFSR0VUUykKKwlAaWYgZXhpc3QgJChPQkpESVIpXHZlcnNpb24ub2JqIGRlbCAkKE9CSkRJUilcdmVyc2lvbi5vYmoKKwlAaWYgZXhpc3QgYXV0b1xwYXRoZGVmLmMgZGVsIGF1dG9ccGF0aGRlZi5jCisKKyQoT1NUWVBFKToKKwktQG1kICQoT1NUWVBFKQorCiskKE9CSkRJUik6CisJLUBtZCAkKE9CSkRJUikKKworeHhkOgorCUBjZCB4eGQKKwkkKE1BS0UpIC9mIE1ha2VfYmM1Lm1hayBCT1I9IiQoQk9SKSIgQkNDPSIkKENDKSIKKwlAY2QgLi4KKworR3ZpbUV4dC9ndmltZXh0LmRsbDogR3ZpbUV4dC9ndmltZXh0LmNwcCBHdmltRXh0L2d2aW1leHQucmMgR3ZpbUV4dC9ndmltZXh0LmgKKwljZCBHdmltRXh0CisJJChNQUtFKSAvZiBNYWtlX2JjNS5tYWsgVVNFRExMPSQoVVNFRExMKSBCT1I9JChCT1IpCisJY2QgLi4KKworaW5zdGFsbC5leGU6IGRvc2luc3QuYyAkKE9CSkRJUilcYmNjLmNmZworIWlmICgkKE9TVFlQRSk9PVdJTjMyKQorCSQoQ0MpICQoQ0NBUkcpIC1XQyAtRFdJTjMyIC1laW5zdGFsbCBkb3NpbnN0LmMKKyFlbHNlCisJJChDQykgJChDQ0FSRykgLVdDIC1laW5zdGFsbCBkb3NpbnN0LmMKKyFlbmRpZgorCit1bmluc3RhbC5leGU6IHVuaW5zdGFsLmMgJChPQkpESVIpXGJjYy5jZmcKKyFpZiAoJChPU1RZUEUpPT1XSU4zMikKKwkkKENDKSAkKENDQVJHKSAtV0MgLURXSU4zMiAtTzIgLWV1bmluc3RhbCB1bmluc3RhbC5jCishZWxzZQorCSQoQ0MpICQoQ0NBUkcpIC1XQyAtTzIgLWV1bmluc3RhbCB1bmluc3RhbC5jCishZW5kaWYKKworY2xlYW46CishaWYgIiQoT1MpIiA9PSAiV2luZG93c19OVCIKKwkjIEZvciBXaW5kb3dzIE5ULzIwMDAsIGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzIDk1Lzk4Li4uCisJIyAkKENPTVNQRUMpIG5lZWRlZCB0byBlbnN1cmUgcm1kaXIuZXhlIGlzIG5vdCBydW4KKwktQCQoQ09NU1BFQykgL0Mgcm1kaXIgL1EgL1MgJChPQkpESVIpCishZWxzZQorCSMgRm9yIFdpbmRvd3MgOTUvOTgsIGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzIE5ULzIwMDAuLi4KKwktQGRlbHRyZWUgL3kgJChPQkpESVIpCishZW5kaWYKKwktQGRlbCAqLnJlcworCS1AZGVsIHZpbTMyKi5kbGwKKwktQGRlbCB2aW0zMioubGliCisJLUBkZWwgKnZpbSouZXhlCisJLUBkZWwgKmluc3RhbGwqLmV4ZQorCS1AZGVsICouY3NtCisJLUBkZWwgKi5tYXAKKwktQGRlbCAqLmlsYworCS1AZGVsICouaWxkCisJLUBkZWwgKi5pbGYKKwktQGRlbCAqLmlscworCS1AZGVsICoudGRzCishaWZkZWYgUEVSTAorCS1AZGVsIHBlcmwubGliCishZW5kaWYKKyFpZmRlZiBQWVRIT04KKwktQGRlbCBweXRob24ubGliCishZW5kaWYKKyFpZmRlZiBSVUJZCisJLUBkZWwgcnVieS5saWIKKyFlbmRpZgorIWlmZGVmIFRDTAorCS1AZGVsIHRjbC5saWIKKyFlbmRpZgorIWlmZGVmIFhQTQorCS1AZGVsIHhwbS5saWIKKyFlbmRpZgorCWNkIHh4ZAorCSQoTUFLRSkgL2YgTWFrZV9iYzUubWFrIEJPUj0iJChCT1IpIiBjbGVhbgorCWNkIC4uCisJY2QgR3ZpbUV4dAorCSQoTUFLRSkgL2YgTWFrZV9iYzUubWFrIEJPUj0iJChCT1IpIiBjbGVhbgorCWNkIC4uCisKKyQoRExMVEFSR0VUKTogJChPQkpESVIpICQodmltZGxsb2JqKQorICAkKExJTkspIEAmJnwKKwkkKExGTEFHU0RMTCkgKworCWMwZDMyLm9iaiArCisJJCh2aW1kbGxvYmopCisJJDwsJCoKKyFpZiAoIiQoQ09ERUdVQVJEKSI9PSJ5ZXMiKQorCWNnMzIubGliKworIWVuZGlmCisjICQoT1NUWVBFKT09V0lOMzIgY2F1c2VzIG9zX21zd2luLmMgY29tcGlsYXRpb24uIEZFQVRfU0hPUlRDVVQgaW4gaXQgbmVlZHMgT0xFCishaWYgKCIkKE9MRSkiPT0ieWVzIiB8fCAkKE9TVFlQRSk9PVdJTjMyKQorCW9sZTJ3MzIubGliICsKKyFlbmRpZgorIWlmICgkKE9TVFlQRSk9PVdJTjMyKQorCWltcG9ydDMyLmxpYisKKyFpZmRlZiBQRVJMCisJJChQRVJMX0xJQl9GTEFHKXBlcmwubGliKworIWVuZGlmCishaWZkZWYgUFlUSE9OCisJJChQWVRIT05fTElCX0ZMQUcpcHl0aG9uLmxpYisKKyFlbmRpZgorIWlmZGVmIFJVQlkKKwkkKFJVQllfTElCX0ZMQUcpcnVieS5saWIrCishZW5kaWYKKyFpZmRlZiBUQ0wKKwkkKFRDTF9MSUJfRkxBRyl0Y2wubGliKworIWVuZGlmCishaWZkZWYgWFBNCisJeHBtLmxpYisKKyFlbmRpZgorIWlmICgiJChVU0VETEwpIj09InllcyIpCisJY3czMmkubGliCishZWxzZQorCWN3MzIubGliCishZW5kaWYKKwl2aW0uZGVmCishZWxzZQorCWNsLmxpYgorIWVuZGlmCit8CisKKyFpZiAoIiQoVklNRExMKSI9PSJ5ZXMiKQorJChUQVJHRVQpOiAkKE9CSkRJUikgJChETExUQVJHRVQpICQodmltbWFpbikgJChPQkpESVIpXCQoUkVTRklMRSkKKyFlbHNlCiskKFRBUkdFVCk6ICQoT0JKRElSKSAkKHZpbW9iaikgJChPQkpESVIpXCQoUkVTRklMRSkKKyFlbmRpZgorICAkKExJTkspIEAmJnwKKwkkKExGTEFHUykgKworCSQoU1RBUlRVUE9CSikgKworIWlmICgiJChWSU1ETEwpIj09InllcyIpCisJJCh2aW1tYWluKQorIWVsc2UKKwkkKHZpbW9iaikKKyFlbmRpZgorCSQ8LCQqCishaWYgKCQoT1NUWVBFKT09V0lOMzIpCishaWYgKCIkKENPREVHVUFSRCkiPT0ieWVzIikKKwljZzMyLmxpYisKKyFlbmRpZgorIyAkKE9TVFlQRSk9PVdJTjMyIGNhdXNlcyBvc19tc3dpbi5jIGNvbXBpbGF0aW9uLiBGRUFUX1NIT1JUQ1VUIGluIGl0IG5lZWRzIE9MRQorIWlmICgiJChPTEUpIj09InllcyIgfHwgJChPU1RZUEUpPT1XSU4zMikKKwlvbGUydzMyLmxpYiArCishZW5kaWYKKwlpbXBvcnQzMi5saWIrCishaWZkZWYgUEVSTAorCSQoUEVSTF9MSUJfRkxBRylwZXJsLmxpYisKKyFlbmRpZgorIWlmZGVmIFBZVEhPTgorCSQoUFlUSE9OX0xJQl9GTEFHKXB5dGhvbi5saWIrCishZW5kaWYKKyFpZmRlZiBSVUJZCisJJChSVUJZX0xJQl9GTEFHKXJ1YnkubGliKworIWVuZGlmCishaWZkZWYgVENMCisJJChUQ0xfTElCX0ZMQUcpdGNsLmxpYisKKyFlbmRpZgorIWlmZGVmIFhQTQorCXhwbS5saWIrCishZW5kaWYKKyFpZiAoIiQoVVNFRExMKSI9PSJ5ZXMiKQorCWN3MzJpLmxpYgorIWVsc2UKKwljdzMyLmxpYgorIWVuZGlmCisKKwkkKE9CSkRJUilcJChSRVNGSUxFKQorIWVsc2UKKwllbXUubGliICsgY2wubGliCishZW5kaWYKK3wKKwordGVzdDoKKwljZCB0ZXN0ZGlyCisJJChNQUtFKSAvTk9MT0dPIC1mIE1ha2VfZG9zLm1hayB3aW4zMgorCWNkIC4uCisKKyQoT0JKRElSKVxleF9kb2NtZC5vYmo6ICBleF9kb2NtZC5jIGV4X2NtZHMuaAorCiskKE9CSkRJUilcZXhfZXZhbC5vYmo6ICBleF9ldmFsLmMgZXhfY21kcy5oCisKKyQoT0JKRElSKVxpZl9vbGUub2JqOiBpZl9vbGUuY3BwCisKKyQoT0JKRElSKVxpZl9wZXJsLm9iajogaWZfcGVybC5jIHBlcmwubGliCisJJChDQykgJChDQ0FSRykgJChDQzEpICQoQ0MyKSRAIC1wYyBpZl9wZXJsLmMKKworaWZfcGVybC5jOiBpZl9wZXJsLnhzIHR5cGVtYXAKKwkkKFBFUkwpXGJpblxwZXJsLmV4ZSAkKFBFUkwpXGxpYlxFeHRVdGlsc1x4c3VicHAgLXByb3RvdHlwZXMgLXR5cGVtYXAgXAorCSAgICAkKFBFUkwpXGxpYlxFeHRVdGlsc1x0eXBlbWFwIGlmX3BlcmwueHMgPiAkQAorCiskKE9CSkRJUilcaWZfcHl0aG9uLm9iajogaWZfcHl0aG9uLmMgcHl0aG9uLmxpYgorCSQoQ0MpICQoQ0NBUkcpICQoQ0MxKSAkKENDMikkQCAtcGMgaWZfcHl0aG9uLmMKKworJChPQkpESVIpXGlmX3J1Ynkub2JqOiBpZl9ydWJ5LmMgcnVieS5saWIKKwkkKENDKSAkKENDQVJHKSAkKENDMSkgJChDQzIpJEAgLXBjIGlmX3J1YnkuYworCiskKE9CSkRJUilcaWZfdGNsLm9iajogaWZfdGNsLmMgdGNsLmxpYgorCSQoQ0MpICQoQ0NBUkcpICQoQ0MxKSAkKENDMikkQCAtcGMgaWZfdGNsLmMKKworJChPQkpESVIpXHhwbV93MzIub2JqOiB4cG1fdzMyLmMgeHBtLmxpYgorCSQoQ0MpICQoQ0NBUkcpICQoQ0MxKSAkKENDMikkQCAtcGMgeHBtX3czMi5jCisKKyQoT0JKRElSKVxuZXRiZWFucy5vYmo6IG5ldGJlYW5zLmMgJChOQkRFQlVHX0RFUCkKKwkkKENDKSAkKENDQVJHKSAkKENDMSkgJChDQzIpJEAgbmV0YmVhbnMuYworCiskKE9CSkRJUilcdmltLnJlczogdmltLnJjIHZlcnNpb24uaCB0b29scy5ibXAgdGVhcm9mZi5ibXAgXAorCQl2aW0uaWNvIHZpbV9lcnJvci5pY28gdmltX2FsZXJ0LmljbyB2aW1faW5mby5pY28gdmltX3F1ZXN0LmljbworCSQoQlJDKSAtZm8kKE9CSkRJUilcdmltLnJlcyAtaSAkKEJPUilcaW5jbHVkZSAtdzMyIC1yIHZpbS5yYyBAJiZ8CisJJChERUZJTkVTKQorfAorCiskKE9CSkRJUilccGF0aGRlZi5vYmo6CWF1dG9ccGF0aGRlZi5jCisJJChDQykgJChDQ0FSRykgJChDQzEpICQoQ0MyKSRAIGF1dG9ccGF0aGRlZi5jCisKKworIyBOZWVkIHRvIGVzY2FwZSBib3RoIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgaW4gJElOVEVSUF9ERUZJTkVTCitJTlRFUlBfREVGSU5FU19FU0NfQktTPSQoSU5URVJQX0RFRklORVM6XD1cXCkKK0lOVEVSUF9ERUZJTkVTX0VTQz0kKElOVEVSUF9ERUZJTkVTX0VTQ19CS1M6Ij1cIikKKworIyBOb3RlOiAgdGhlIHNpbGx5IC8qIiovIGJlbG93IGFyZSB0aGVyZSB0byB0cmljayBtYWtlIGludG8gYWNjZXB0aW5nCisjIHRoZSAjIGNoYXJhY3RlciBhcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGNvbW1lbnQgd2l0aG91dCBtZXNzaW5nIHVwCisjIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLgorYXV0b1xwYXRoZGVmLmM6OgorCS1AbWQgYXV0bworCUBlY2hvIGNyZWF0aW5nIGF1dG8vcGF0aGRlZi5jCisJQGNvcHkgL3kgJiZ8CisvKiBwYXRoZGVmLmMgKi8KKy8qIiovI2luY2x1ZGUgInZpbS5oIi8qIiovCisKK2NoYXJfdSAqZGVmYXVsdF92aW1fZGlyID0gKGNoYXJfdSAqKSIkKFZJTVJDTE9DOlw9XFwpIjsKK2NoYXJfdSAqZGVmYXVsdF92aW1ydW50aW1lX2RpciA9IChjaGFyX3UgKikiJChWSU1SVU5USU1FRElSOlw9XFwpIjsKK2NoYXJfdSAqYWxsX2NmbGFncyA9IChjaGFyX3UgKikiJChDQzpcPVxcKSAkKENGTEFHUzpcPVxcKSAkKERFRklORVMpICQoTUJERUZJTkVTKSAkKElOVEVSUF9ERUZJTkVTX0VTQykgJChPUFQpICQoRVhFVFlQRSkgJChDUFVBUkcpICQoQUxJR05BUkcpICQoREVCVUdfRkxBRykgJChDT0RFR1VBUkRfRkxBRykiOworY2hhcl91ICphbGxfbGZsYWdzID0gKGNoYXJfdSAqKSIkKExJTks6XD1cXCkgJChMRkxBR1M6XD1cXCkiOworY2hhcl91ICpjb21waWxlZF91c2VyID0gKGNoYXJfdSAqKSIkKFVTRVJOQU1FKSI7CitjaGFyX3UgKmNvbXBpbGVkX3N5cyA9IChjaGFyX3UgKikiJChVU0VSRE9NQUlOKSI7Cit8IGF1dG9ccGF0aGRlZi5jCisKK3BlcmwubGliOiAkKFBFUkwpXGxpYlxDT1JFXHBlcmwkKFBFUkxfVkVSKS5saWIKKwljb2ZmMm9tZiAkKFBFUkwpXGxpYlxDT1JFXHBlcmwkKFBFUkxfVkVSKS5saWIgJEAKKworcHl0aG9uLmxpYjogJChQWVRIT04pXGxpYnNccHl0aG9uJChQWVRIT05fVkVSKS5saWIKKwljb2ZmMm9tZiAkKFBZVEhPTilcbGlic1xweXRob24kKFBZVEhPTl9WRVIpLmxpYiAkQAorCitydWJ5LmxpYjogJChSVUJZKVxsaWJcJChSVUJZX0lOU1RBTExfTkFNRSkubGliCisJY29mZjJvbWYgJChSVUJZKVxsaWJcJChSVUJZX0lOU1RBTExfTkFNRSkubGliICRACisKKyMgRm9yIHNvbWUgcmVhc29uLCB0aGUgY29mZjJvbWYgbWV0aG9kIGRvZXNuJ3Qgd29yayBvbiBsaWJYcG0ubGliLCBzbworIyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGdlbmVyYXRlIGFuIGltcG9ydCBsaWJyYXJ5IHN0cmFpZ2h0IGZyb20gdGhlIERMTC4KK3hwbS5saWI6ICQoWFBNKVxsaWJcbGliWHBtLmxpYgorCWltcGxpYiAtYSAkQCAkKFhQTSlcYmluXGxpYlhwbS5kbGwKKwordGNsLmxpYjogJChUQ0xfTElCKQorIWlmICgiJChEWU5BTUlDX1RDTCkiID09ICJ5ZXMiKQorCWNvcHkgJChUQ0xfTElCKSAkQAorIWVsc2UKKwljb2ZmMm9tZiAkKFRDTF9MSUIpICRACishZW5kaWYKKworIWlmICgiJChEWU5BTUlDX1RDTCkiID09ICJ5ZXMiKQordGNsc3R1YiQoVENMX1ZFUiktYm9yLmxpYjoKKwktQElGIE5PVCBFWElTVCAkQCBFQ0hPIFlvdSBtdXN0IGRvd25sb2FkIHRjbHN0dWIkKFRDTF9WRVIpLWJvci5saWIgc2VwYXJhdGVseSBhbmRcCisJcGxhY2UgaXQgaW4gdGhlIHNyYyBkaXJlY3RvcnkgaW4gb3JkZXIgdG8gY29tcGlsZSBhIGR5bmFtaWMgVENMLWVuYWJsZWRcCisJKGcpdmltIHdpdGggdGhlIEJvcmxhbmQgY29tcGlsZXIuICBZb3UgY2FuIGdldCB0aGUgdGNsc3R1YiQoVENMX1ZFUiktYm9yLmxpYiBmaWxlXAorCWF0IGh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwcGVvcGxlL3ZpbS90Y2xzdHViJChUQ0xfVkVSKS1ib3IubGliCishZW5kaWYKKworIyB2aW1ydW4uZXhlOgordmltcnVuLmV4ZTogdmltcnVuLmMKKyFpZiAoIiQoVVNFRExMKSI9PSJ5ZXMiKQorCSQoQ0MpIC1XQyAtTzEgLUkkKElOQ0xVREUpIC1MJChMSUIpIC1EX1JUTERMTCB2aW1ydW4uYyBjdzMybXRpLmxpYgorIWVsc2UKKwkkKENDKSAtV0MgLU8xIC1JJChJTkNMVURFKSAtTCQoTElCKSB2aW1ydW4uYworIWVuZGlmCisKKyMgVGhlIGRlcGVuZGVuY3kgb24gJChPQkpESVIpIGlzIHRvIGhhdmUgYmNjLmNmZyBnZW5lcmF0ZWQgZWFjaCB0aW1lLgorJChPQkpESVIpXGJjYy5jZmc6IE1ha2VfYmM1Lm1hayAkKE9CSkRJUikKKyAgY29weSAveSAmJnwKKwkkKENGTEFHUykKKwktTCQoTElCKQorCSQoREVGSU5FUykKKwkkKE1CREVGSU5FUykKKwkkKElOVEVSUF9ERUZJTkVTKQorCSQoRVhFVFlQRSkKKwkkKERFQlVHX0ZMQUcpCisJJChPUFQpCisJJChDT0RFR1VBUkRfRkxBRykKKwkkKENQVUFSRykKKwkkKEFMSUdOQVJHKQorfCAkQAorCisjIHZpOnNldCBzdHM9NCBzdz00OgpkaWZmIC0tZ2l0IGEvc3JjL01ha2VfY3lnLm1hayBiL3NyYy9NYWtlX2N5Zy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4ZTNkMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlX2N5Zy5tYWsKQEAgLTAsMCArMSw0OTggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFZJTSBvbiBXaW4zMiwgdXNpbmcgQ3lnbnVzIGdjYworIyBMYXN0IHVwZGF0ZWQgYnkgRGFuIFNoYXJwLiAgTGFzdCBDaGFuZ2U6IDIwMDQgQXByIDIzCisjCisjIFRoaXMgY29tcGlsZXMgVmltIGFzIGEgV2luZG93cyBhcHBsaWNhdGlvbi4gIElmIHlvdSB3YW50IFZpbSB0byBydW4gYXMgYQorIyBDeWd3aW4gYXBwbGljYXRpb24gdXNlIHRoZSBNYWtlZmlsZSAoanVzdCBsaWtlIG9uIFVuaXgpLgorIworIyBHVUkJCW5vIG9yIHllczogc2V0IHRvIHllcyBpZiB5b3Ugd2FudCB0aGUgR1VJIHZlcnNpb24gKHllcykKKyMgUEVSTAkJZGVmaW5lIHRvIHBhdGggdG8gUGVybCBkaXIgdG8gZ2V0IFBlcmwgc3VwcG9ydCAobm90IGRlZmluZWQpCisjICAgUEVSTF9WRVIJICBkZWZpbmUgdG8gdmVyc2lvbiBvZiBQZXJsIGJlaW5nIHVzZWQgKDU2KQorIyAgIERZTkFNSUNfUEVSTCAgbm8gb3IgeWVzOiBzZXQgdG8geWVzIHRvIGxvYWQgdGhlIFBlcmwgRExMIGR5bmFtaWNhbGx5ICh5ZXMpCisjIFBZVEhPTglkZWZpbmUgdG8gcGF0aCB0byBQeXRob24gZGlyIHRvIGdldCBQWVRIT04gc3VwcG9ydCAobm90IGRlZmluZWQpCisjICAgUFlUSE9OX1ZFUgkgICAgZGVmaW5lIHRvIHZlcnNpb24gb2YgUHl0aG9uIGJlaW5nIHVzZWQgKDIyKQorIyAgIERZTkFNSUNfUFlUSE9OICBubyBvciB5ZXM6IHVzZSB5ZXMgdG8gbG9hZCB0aGUgUHl0aG9uIERMTCBkeW5hbWljYWxseSAoeWVzKQorIyBUQ0wJCWRlZmluZSB0byBwYXRoIHRvIFRDTCBkaXIgdG8gZ2V0IFRDTCBzdXBwb3J0IChub3QgZGVmaW5lZCkKKyMgICBUQ0xfVkVSCWRlZmluZSB0byB2ZXJzaW9uIG9mIFRDTCBiZWluZyB1c2VkICg4MykKKyMgICBEWU5BTUlDX1RDTCBubyBvciB5ZXM6IHVzZSB5ZXMgdG8gbG9hZCB0aGUgVENMIERMTCBkeW5hbWljYWxseSAoeWVzKQorIyBSVUJZCQlkZWZpbmUgdG8gcGF0aCB0byBSdWJ5IGRpciB0byBnZXQgUnVieSBzdXBwb3J0IChub3QgZGVmaW5lZCkKKyMgICBSVUJZX1ZFUglkZWZpbmUgdG8gdmVyc2lvbiBvZiBSdWJ5IGJlaW5nIHVzZWQgKDE2KQorIyAgIERZTkFNSUNfUlVCWSBubyBvciB5ZXM6IHVzZSB5ZXMgdG8gbG9hZCB0aGUgUnVieSBETEwgZHluYW1pY2FsbHkgKHllcykKKyMgR0VUVEVYVAlubyBvciB5ZXM6IHNldCB0byB5ZXMgZm9yIGR5bmFtaWMgZ2V0dGV4dCBzdXBwb3J0ICh5ZXMpCisjIElDT05WCQlubyBvciB5ZXM6IHNldCB0byB5ZXMgZm9yIGR5bmFtaWMgaWNvbnYgc3VwcG9ydCAoeWVzKQorIyBNQllURQkJbm8gb3IgeWVzOiBzZXQgdG8geWVzIHRvIGluY2x1ZGUgbXVsdGlieXRlIHN1cHBvcnQgKHllcykKKyMgSU1FCQlubyBvciB5ZXM6IHNldCB0byB5ZXMgdG8gaW5jbHVkZSBJTUUgc3VwcG9ydCAoeWVzKQorIyAgIERZTkFNSUNfSU1FIG5vIG9yIHllczogc2V0IHRvIHllcyB0byBsb2FkIGltbTMyLmRsbCBkeW5hbWljYWxseSAoeWVzKQorIyBPTEUJCW5vIG9yIHllczogc2V0IHRvIHllcyB0byBtYWtlIE9MRSBndmltIChubykKKyMgREVCVUcJCW5vIG9yIHllczogc2V0IHRvIHllcyBpZiB5b3Ugd2lzaCBhIERFQlVHZ2luZyBidWlsZCAobm8pCisjIENQVU5SCQlpMzg2IHRocm91Z2ggcGVudGl1bTQ6IHNlbGVjdCAtbWNwdSBhcmd1bWVudCB0byBjb21waWxlIHdpdGggKGkzODYpCisjIEFSQ0gJCWkzODYgdGhyb3VnaCBwZW50aXVtNDogc2VsZWN0IC1tYXJjaCBhcmd1bWVudCB0byBjb21waWxlIHdpdGggKGkzODYpCisjIFVTRURMTAlubyBvciB5ZXM6IHNldCB0byB5ZXMgdG8gdXNlIHRoZSBSdW50aW1lIGxpYnJhcnkgRExMIChubykKKyMJCUZvciBVU0VETEw9eWVzIHRoZSBjeWd3aW4xLmRsbCBpcyByZXF1aXJlZCB0byBydW4gVmltLgorIyBQT1NUU0NSSVBUCW5vIG9yIHllczogc2V0IHRvIHllcyBmb3IgUG9zdFNjcmlwdCBwcmludGluZyAobm8pCisjIEZFQVRVUkVTCVRJTlksIFNNQUxMLCBOT1JNQUwsIEJJRyBvciBIVUdFIChCSUcpCisjIFdJTlZFUglMb3dlc3QgV2luMzIgdmVyc2lvbiB0byBzdXBwb3J0LiAgKDB4MDQwMCkKKyMgQ1NDT1BFCW5vIG9yIHllczogdG8gaW5jbHVkZSBjc2NvcGUgaW50ZXJmYWNlIHN1cHBvcnQgKHllcykKKyMgT1BUSU1JWkUJU1BBQ0UsIFNQRUVELCBvciBNQVhTUEVFRDogc2V0IG9wdGltaXphdGlvbiBsZXZlbCAoTUFYU1BFRUQpCisjIE5FVEJFQU5TCW5vIG9yIHllczogdG8gaW5jbHVkZSBuZXRiZWFucyBpbnRlcmZhY2Ugc3VwcG9ydCAoeWVzIHdoZW4gR1VJCisjCQlpcyB5ZXMpCisjIFhQTQkJZGVmaW5lIHRvIHBhdGggdG8gWFBNIGRpciB0byBnZXQgWFBNIGltYWdlIHN1cHBvcnQgKG5vdCBkZWZpbmVkKQorIz4+Pj4+IGNob29zZSBvcHRpb25zOgoraWZuZGVmIEdVSQorR1VJPXllcworZW5kaWYKKworaWZuZGVmIEZFQVRVUkVTCitGRUFUVVJFUyA9IEJJRworZW5kaWYKKworaWZuZGVmIEdFVFRFWFQKK0dFVFRFWFQgPSB5ZXMKK2VuZGlmCisKK2lmbmRlZiBJQ09OVgorSUNPTlYgPSB5ZXMKK2VuZGlmCisKK2lmbmRlZiBNQllURQorTUJZVEUgPSB5ZXMKK2VuZGlmCisKK2lmbmRlZiBJTUUKK0lNRSA9IHllcworZW5kaWYKKworaWZuZGVmIENQVU5SCitDUFVOUiA9IGkzODYKK2VuZGlmCisKK2lmbmRlZiBBUkNICitBUkNIID0gaTM4NgorZW5kaWYKKworaWZuZGVmIFdJTlZFUgorV0lOVkVSID0gMHgwNDAwCitlbmRpZgorCitpZm5kZWYgQ1NDT1BFCitDU0NPUEUgPSB5ZXMKK2VuZGlmCisKK2lmbmRlZiBORVRCRUFOUworaWZlcSAoJChHVUkpLHllcykKK05FVEJFQU5TID0geWVzCitlbmRpZgorZW5kaWYKKworaWZuZGVmIE9QVElNSVpFCitPUFRJTUlaRSA9IE1BWFNQRUVECitlbmRpZgorCisjIyMgU2VlIGZlYXR1cmUuaCBmb3IgYSBsaXN0IG9mIG9wdGlvbmFscy4KKyMjIyBBbnkgb3RoZXIgZGVmaW5lcyBjYW4gYmUgaW5jbHVkZWQgaGVyZS4KKworREVGSU5FUyA9IC1EV0lOMzIgLURIQVZFX1BBVEhERUYgLURGRUFUXyQoRkVBVFVSRVMpIFwKKwkgIC1EV0lOVkVSPSQoV0lOVkVSKSAtRF9XSU4zMl9XSU5OVD0kKFdJTlZFUikKK0lOQ0xVREVTID0gLW1jcHU9JChDUFVOUikgLW1hcmNoPSQoQVJDSCkgLUlwcm90bworCisjPj4+Pj4gbmFtZSBvZiB0aGUgY29tcGlsZXIgYW5kIGxpbmtlciwgbmFtZSBvZiBsaWIgZGlyZWN0b3J5CitDQyA9IGdjYworUkMgPSB3aW5kcmVzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEWU5BTUlDX1BFUkw9eWVzIGFuZCBubyBib3RoIHdvcmsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZkZWYgUEVSTAorREVGSU5FUyArPSAtREZFQVRfUEVSTAorSU5DTFVERVMgKz0gLUkkKFBFUkwpL2xpYi9DT1JFCitFWFRSQV9PQkpTICs9ICQoT1VURElSKS9pZl9wZXJsLm8KKworaWZuZGVmIERZTkFNSUNfUEVSTAorRFlOQU1JQ19QRVJMID0geWVzCitlbmRpZgorCitpZm5kZWYgUEVSTF9WRVIKK1BFUkxfVkVSID0gNTYKK2VuZGlmCisKK2lmZXEgKHllcywgJChEWU5BTUlDX1BFUkwpKQorREVGSU5FUyArPSAtRERZTkFNSUNfUEVSTCAtRERZTkFNSUNfUEVSTF9ETEw9XCJwZXJsJChQRVJMX1ZFUikuZGxsXCIKK2Vsc2UKK0VYVFJBX0xJQlMgKz0gJChQRVJMKS9saWIvQ09SRS9wZXJsJChQRVJMX1ZFUikubGliCitlbmRpZgorZW5kaWYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERZTkFNSUNfUFlUSE9OPXllcyB3b3Jrcy4KKyMgRFlOQU1JQ19QWVRIT049bm8gZG9lcyBub3QgKHVucmVzb2x2ZWQgZXh0ZXJuYWxzIG9uIGxpbmspLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZmRlZiBQWVRIT04KK0RFRklORVMgKz0gLURGRUFUX1BZVEhPTgorSU5DTFVERVMgKz0gLUkkKFBZVEhPTikvaW5jbHVkZQorRVhUUkFfT0JKUyArPSAkKE9VVERJUikvaWZfcHl0aG9uLm8KKworaWZuZGVmIERZTkFNSUNfUFlUSE9OCitEWU5BTUlDX1BZVEhPTiA9IHllcworZW5kaWYKKworaWZuZGVmIFBZVEhPTl9WRVIKK1BZVEhPTl9WRVIgPSAyMgorZW5kaWYKKworaWZlcSAoeWVzLCAkKERZTkFNSUNfUFlUSE9OKSkKK0RFRklORVMgKz0gLUREWU5BTUlDX1BZVEhPTiAtRERZTkFNSUNfUFlUSE9OX0RMTD1cInB5dGhvbiQoUFlUSE9OX1ZFUikuZGxsXCIKK2Vsc2UKK0VYVFJBX0xJQlMgKz0gJChQWVRIT04pL2xpYnMvcHl0aG9uJChQWVRIT05fVkVSKS5saWIKK2VuZGlmCitlbmRpZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRFlOQU1JQ19SVUJZPXllcyB3b3Jrcy4KKyMgRFlOQU1JQ19SVUJZPW5vIGRvZXMgbm90IChwcm9jZXNzIGV4aXRzKS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZkZWYgUlVCWQorCitpZm5kZWYgUlVCWV9WRVIKK1JVQllfVkVSPTE2CitlbmRpZgorCitpZm5kZWYgUlVCWV9WRVJfTE9ORworUlVCWV9WRVJfTE9ORz0xLjYKK2VuZGlmCisKK2lmbmRlZiBEWU5BTUlDX1JVQlkKK0RZTkFNSUNfUlVCWSA9IHllcworZW5kaWYKKworaWZlcSAoJChSVUJZX1ZFUiksIDE2KQoraWZuZGVmIFJVQllfUExBVEZPUk0KK1JVQllfUExBVEZPUk0gPSBpNTg2LW1zd2luMzIKK2VuZGlmCitpZm5kZWYgUlVCWV9JTlNUQUxMX05BTUUKK1JVQllfSU5TVEFMTF9OQU1FID0gbXN3aW4zMi1ydWJ5JChSVUJZX1ZFUikKK2VuZGlmCitlbHNlCitpZm5kZWYgUlVCWV9QTEFURk9STQorUlVCWV9QTEFURk9STSA9IGkzODYtbXN3aW4zMgorZW5kaWYKK2lmbmRlZiBSVUJZX0lOU1RBTExfTkFNRQorUlVCWV9JTlNUQUxMX05BTUUgPSBtc3ZjcnQtcnVieSQoUlVCWV9WRVIpCitlbmRpZgorZW5kaWYKKworREVGSU5FUyArPSAtREZFQVRfUlVCWQorSU5DTFVERVMgKz0gLUkkKFJVQlkpL2xpYi9ydWJ5LyQoUlVCWV9WRVJfTE9ORykvJChSVUJZX1BMQVRGT1JNKQorRVhUUkFfT0JKUyArPSAkKE9VVERJUikvaWZfcnVieS5vCisKK2lmZXEgKHllcywgJChEWU5BTUlDX1JVQlkpKQorREVGSU5FUyArPSAtRERZTkFNSUNfUlVCWSAtRERZTkFNSUNfUlVCWV9ETEw9XCIkKFJVQllfSU5TVEFMTF9OQU1FKS5kbGxcIgorREVGSU5FUyArPSAtRERZTkFNSUNfUlVCWV9WRVI9JChSVUJZX1ZFUikKK2Vsc2UKK0VYVFJBX0xJQlMgKz0gJChSVUJZKS9saWIvJChSVUJZX0lOU1RBTExfTkFNRSkubGliCitlbmRpZgorZW5kaWYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERZTkFNSUNfVENMPXllcyBhbmQgbm8gYm90aCB3b3JrLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZmRlZiBUQ0wKK0RFRklORVMgKz0gLURGRUFUX1RDTAorSU5DTFVERVMgKz0gLUkkKFRDTCkvaW5jbHVkZQorRVhUUkFfT0JKUyArPSAkKE9VVERJUikvaWZfdGNsLm8KKworaWZuZGVmIERZTkFNSUNfVENMCitEWU5BTUlDX1RDTCA9IHllcworZW5kaWYKKworaWZuZGVmIFRDTF9WRVIKK1RDTF9WRVIgPSA4MworZW5kaWYKKworaWZlcSAoeWVzLCAkKERZTkFNSUNfVENMKSkKK0RFRklORVMgKz0gLUREWU5BTUlDX1RDTCAtRERZTkFNSUNfVENMX0RMTD1cInRjbCQoVENMX1ZFUikuZGxsXCIKK0VYVFJBX0xJQlMgKz0gJChUQ0wpL2xpYi90Y2xzdHViJChUQ0xfVkVSKS5saWIKK2Vsc2UKK0VYVFJBX0xJQlMgKz0gJChUQ0wpL2xpYi90Y2wkKFRDTF9WRVIpLmxpYgorZW5kaWYKK2VuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZlcSAoeWVzLCAkKEdFVFRFWFQpKQorREVGSU5FUyArPSAtRERZTkFNSUNfR0VUVEVYVAorZW5kaWYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZmVxICh5ZXMsICQoSUNPTlYpKQorREVGSU5FUyArPSAtRERZTkFNSUNfSUNPTlYKK2VuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZlcSAoeWVzLCAkKE1CWVRFKSkKK0RFRklORVMgKz0gLURGRUFUX01CWVRFCitlbmRpZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2lmZXEgKHllcywgJChJTUUpKQorREVGSU5FUyArPSAtREZFQVRfTUJZVEVfSU1FCisKK2lmbmRlZiBEWU5BTUlDX0lNRQorRFlOQU1JQ19JTUUgPSB5ZXMKK2VuZGlmCisKK2lmZXEgKHllcywgJChEWU5BTUlDX0lNRSkpCitERUZJTkVTICs9IC1ERFlOQU1JQ19JTUUKK2Vsc2UKK0VYVFJBX0xJQlMgKz0gLWxpbW0zMgorZW5kaWYKK2VuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZlcSAoeWVzLCAkKERFQlVHKSkKK0RFRklORVMgKz0gLURERUJVRworSU5DTFVERVMgKz0gLWcgLWZzdGFjay1jaGVjaworREVCVUdfU1VGRklYID0gZAorZWxzZQorCitpZmVxICgkKE9QVElNSVpFKSwgU0laRSkKK09QVEZMQUcgPSAtT3MKK2Vsc2UKK2lmZXEgKCQoT1BUSU1JWkUpLCBNQVhTUEVFRCkKK09QVEZMQUcgPSAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZWctc3RydWN0LXJldHVybiAtbWFsaWduLWRvdWJsZQorZWxzZQorT1BURkxBRyA9IC1PMgorZW5kaWYKK2VuZGlmCisKKyMgQSBidWcgaW4gdGhlIEdDQyA8PSAzLjIgb3B0aW1pemVyIGNhbiBjYXVzZSBhIGNyYXNoLiAgVGhlCisjIGZvbGxvd2luZyBvcHRpb24gcmVtb3ZlcyB0aGUgcHJvYmxlbSBvcHRpbWl6YXRpb24uCitPUFRGTEFHICs9IC1mbm8tc3RyZW5ndGgtcmVkdWNlCisKK0lOQ0xVREVTICs9IC1zCisKK2VuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBVU0VETEw9eWVzIHdpbGwgYnVpbGQgYSBDeWd3aW4zMiBleGVjdXRhYmxlIHRoYXQgcmVsaWVzIG9uIGN5Z3dpbjEuZGxsLgorIyBVU0VETEw9bm8gd2lsbCBidWlsZCBhIE1pbmd3MzIgZXhlY3V0YWJsZSB3aXRoIG5vIGV4dHJhIGRsbCBkZXBlbmRlbmNpZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2lmZXEgKHllcywgJChVU0VETEwpKQorREVGSU5FUyArPSAtRF9NQVhfUEFUSD0yNTYgLURfX0NZR1dJTl9fCitlbHNlCitJTkNMVURFUyArPSAtbW5vLWN5Z3dpbgorZW5kaWYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZmVxICh5ZXMsICQoUE9TVFNDUklQVCkpCitERUZJTkVTICs9IC1ETVNXSU5QUworZW5kaWYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZmVxICh5ZXMsICQoQ1NDT1BFKSkKK0RFRklORVMgKz0gLURGRUFUX0NTQ09QRQorRVhUUkFfT0JKUyArPSAkKE9VVERJUikvaWZfY3Njb3BlLm8KK2VuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZlcSAoeWVzLCAkKE5FVEJFQU5TKSkKK0RFRklORVMgKz0gLURGRUFUX05FVEJFQU5TX0lOVEcKK0VYVFJBX09CSlMgKz0gJChPVVRESVIpL25ldGJlYW5zLm8gJChPVVRESVIpL2d1aV9iZXZhbC5vCitFWFRSQV9MSUJTICs9IC1sd3NvY2szMgorCitpZmVxICh5ZXMsICQoREVCVUcpKQorREVGSU5FUyArPSAtRE5CREVCVUcKK05CREVCVUdfREVQID0gbmJkZWJ1Zy5oIG5iZGVidWcuYworZW5kaWYKKworZW5kaWYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZmRlZiBYUE0KK0RFRklORVMgKz0gLURGRUFUX1hQTV9XMzIKK0lOQ0xVREVTICs9IC1JJChYUE0pL2luY2x1ZGUKK0VYVFJBX09CSlMgKz0gJChPVVRESVIpL3hwbV93MzIubworRVhUUkFfTElCUyArPSAtTCQoWFBNKS9saWIgLWxYcG0KK2VuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZlcSAoeWVzLCAkKE9MRSkpCitERUZJTkVTICs9IC1ERkVBVF9PTEUKK0VYVFJBX09CSlMgKz0gJChPVVRESVIpL2lmX29sZS5vCitFWFRSQV9MSUJTICs9IC1sb2xlYXV0MzIgLWxzdGRjKysKK2VuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZlcSAoJChHVUkpLHllcykKK0VYRSA9IGd2aW0kKERFQlVHX1NVRkZJWCkuZXhlCitPVVRESVIgPSBnb2JqJChERUJVR19TVUZGSVgpCitERUZJTkVTICs9IC1ERkVBVF9HVUlfVzMyIC1ERkVBVF9DTElQQk9BUkQKK0VYVFJBX09CSlMgKz0gJChPVVRESVIpL2d1aS5vICQoT1VURElSKS9ndWlfdzMyLm8gJChPVVRESVIpL29zX3czMmV4ZS5vCitFWFRSQV9MSUJTICs9IC1td2luZG93cyAtbGNvbWN0bDMyCitlbHNlCitFWEUgPSB2aW0kKERFQlVHX1NVRkZJWCkuZXhlCitPVVRESVIgPSBvYmokKERFQlVHX1NVRkZJWCkKK0xJQlMgKz0gLWx1c2VyMzIgLWxnZGkzMiAtbGNvbWRsZzMyCitlbmRpZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2lmbmVxIChzaC5leGUsICQoU0hFTEwpKQorREVMID0gcm0KK0RJUlNMQVNIID0gLworZWxzZQorREVMID0gZGVsCitESVJTTEFTSCA9IFxcCitlbmRpZgorCisjPj4+Pj4gZW5kIG9mIGNob2ljZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitJTkNMID0gdmltLmggZ2xvYmFscy5oIG9wdGlvbi5oIGtleW1hcC5oIG1hY3Jvcy5oIGFzY2lpLmggdGVybS5oIG9zX3dpbjMyLmggXAorICAgICAgIHN0cnVjdHMuaCB2ZXJzaW9uLmgKKworQ0ZMQUdTID0gJChPUFRGTEFHKSAkKERFRklORVMpICQoSU5DTFVERVMpCisKK1JDRkxBR1MgPSAtTyBjb2ZmICQoREVGSU5FUykKKworT0JKID0gXAorCSQoT1VURElSKS9idWZmZXIubyBcCisJJChPVVRESVIpL2NoYXJzZXQubyBcCisJJChPVVRESVIpL2RpZmYubyBcCisJJChPVVRESVIpL2RpZ3JhcGgubyBcCisJJChPVVRESVIpL2VkaXQubyBcCisJJChPVVRESVIpL2V2YWwubyBcCisJJChPVVRESVIpL2V4X2NtZHMubyBcCisJJChPVVRESVIpL2V4X2NtZHMyLm8gXAorCSQoT1VURElSKS9leF9kb2NtZC5vIFwKKwkkKE9VVERJUikvZXhfZXZhbC5vIFwKKwkkKE9VVERJUikvZXhfZ2V0bG4ubyBcCisJJChPVVRESVIpL2ZpbGVpby5vIFwKKwkkKE9VVERJUikvZm9sZC5vIFwKKwkkKE9VVERJUikvZ2V0Y2hhci5vIFwKKwkkKE9VVERJUikvbWFpbi5vIFwKKwkkKE9VVERJUikvbWFyay5vIFwKKwkkKE9VVERJUikvbWVtZmlsZS5vIFwKKwkkKE9VVERJUikvbWVtbGluZS5vIFwKKwkkKE9VVERJUikvbWVudS5vIFwKKwkkKE9VVERJUikvbWVzc2FnZS5vIFwKKwkkKE9VVERJUikvbWlzYzEubyBcCisJJChPVVRESVIpL21pc2MyLm8gXAorCSQoT1VURElSKS9tb3ZlLm8gXAorCSQoT1VURElSKS9tYnl0ZS5vIFwKKwkkKE9VVERJUikvbm9ybWFsLm8gXAorCSQoT1VURElSKS9vcHMubyBcCisJJChPVVRESVIpL29wdGlvbi5vIFwKKwkkKE9VVERJUikvb3Nfd2luMzIubyBcCisJJChPVVRESVIpL29zX21zd2luLm8gXAorCSQoT1VURElSKS9wYXRoZGVmLm8gXAorCSQoT1VURElSKS9xdWlja2ZpeC5vIFwKKwkkKE9VVERJUikvcmVnZXhwLm8gXAorCSQoT1VURElSKS9zY3JlZW4ubyBcCisJJChPVVRESVIpL3NlYXJjaC5vIFwKKwkkKE9VVERJUikvc3ludGF4Lm8gXAorCSQoT1VURElSKS90YWcubyBcCisJJChPVVRESVIpL3Rlcm0ubyBcCisJJChPVVRESVIpL3VpLm8gXAorCSQoT1VURElSKS91bmRvLm8gXAorCSQoT1VURElSKS92ZXJzaW9uLm8gXAorCSQoT1VURElSKS92aW1yYy5vIFwKKwkkKE9VVERJUikvd2luZG93Lm8gXAorCSQoRVhUUkFfT0JKUykKKworYWxsOiAkKEVYRSkgeHhkL3h4ZC5leGUgdmltcnVuLmV4ZSBpbnN0YWxsLmV4ZSB1bmluc3RhbC5leGUgR3ZpbUV4dC9ndmltZXh0LmRsbAorCisjIEFjY29yZGluZyB0byB0aGUgQ3lnd2luIGRvYyAxLjIgRkFRLCBrZXJuZWwzMiBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBmb3IKKyMgbGlua2luZyB1bmxlc3MgY2FsbGluZyBsZCBkaXJlY3RseS4KKyMgU2VlIC91c3IvZG9jL2N5Z3dpbi1kb2MtMS4yL2h0bWwvZmFxX3RvYy5odG1sI1RPQzkzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorJChFWEUpOiAkKE9VVERJUikgJChPQkopCisJJChDQykgJChDRkxBR1MpIC1vICQoRVhFKSAkKE9CSikgJChMSUJTKSAtbHV1aWQgLWxvbGUzMiAkKEVYVFJBX0xJQlMpCisKK3h4ZC94eGQuZXhlOiB4eGQveHhkLmMKKwkkKE1BS0UpIC1DIHh4ZCAtZiBNYWtlX2N5Zy5tYWsgVVNFRExMPSQoVVNFRExMKQorCitHdmltRXh0L2d2aW1leHQuZGxsOiBHdmltRXh0L2d2aW1leHQuY3BwIEd2aW1FeHQvZ3ZpbWV4dC5yYyBHdmltRXh0L2d2aW1leHQuaAorCSQoTUFLRSkgLUMgR3ZpbUV4dCAtZiBNYWtlX21pbmcubWFrCisKK3ZpbXJ1bi5leGU6IHZpbXJ1bi5jCisJJChDQykgJChDRkxBR1MpIC1vIHZpbXJ1bi5leGUgdmltcnVuLmMgICQoTElCUykKKworaW5zdGFsbC5leGU6IGRvc2luc3QuYworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBpbnN0YWxsLmV4ZSBkb3NpbnN0LmMgICQoTElCUykgLWx1dWlkIC1sb2xlMzIKKwordW5pbnN0YWwuZXhlOiB1bmluc3RhbC5jCisJJChDQykgJChDRkxBR1MpIC1vIHVuaW5zdGFsLmV4ZSB1bmluc3RhbC5jICQoTElCUykKKworJChPVVRESVIpOgorCW1rZGlyICQoT1VURElSKQorCit0YWdzOgorCWNvbW1hbmQgL2MgY3RhZ3MgKi5jICQoSU5DTCkKKworY2xlYW46CisJLSQoREVMKSAkKE9VVERJUikkKERJUlNMQVNIKSoubworCS1ybWRpciAkKE9VVERJUikKKwktJChERUwpICouZXhlCitpZmRlZiBQRVJMCisJLSQoREVMKSBpZl9wZXJsLmMKK2VuZGlmCisJLSQoREVMKSBwYXRoZGVmLmMKKwkkKE1BS0UpIC1DIHh4ZCAtZiBNYWtlX2N5Zy5tYWsgY2xlYW4KKwkkKE1BS0UpIC1DIEd2aW1FeHQgLWYgTWFrZV9taW5nLm1hayBjbGVhbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJChPVVRESVIpLyUubyA6ICUuYyAkKElOQ0wpCisJJChDQykgLWMgJChDRkxBR1MpICQ8IC1vICRACisKKyQoT1VURElSKS9leF9kb2NtZC5vOglleF9kb2NtZC5jICQoSU5DTCkgZXhfY21kcy5oCisJJChDQykgLWMgJChDRkxBR1MpIGV4X2RvY21kLmMgLW8gJChPVVRESVIpL2V4X2RvY21kLm8KKworJChPVVRESVIpL2V4X2V2YWwubzoJZXhfZXZhbC5jICQoSU5DTCkgZXhfY21kcy5oCisJJChDQykgLWMgJChDRkxBR1MpIGV4X2V2YWwuYyAtbyAkKE9VVERJUikvZXhfZXZhbC5vCisKKyQoT1VURElSKS9pZl9jc2NvcGUubzoJaWZfY3Njb3BlLmMgJChJTkNMKSBpZl9jc2NvcGUuaAorCSQoQ0MpIC1jICQoQ0ZMQUdTKSBpZl9jc2NvcGUuYyAtbyAkKE9VVERJUikvaWZfY3Njb3BlLm8KKworJChPVVRESVIpL2lmX29sZS5vOglpZl9vbGUuY3BwICQoSU5DTCkKKwkkKENDKSAtYyAkKENGTEFHUykgLURfX0lJRF9ERUZJTkVEX18gaWZfb2xlLmNwcCAtbyAkKE9VVERJUikvaWZfb2xlLm8KKworaWZfcGVybC5jOiBpZl9wZXJsLnhzIHR5cGVtYXAKKwlwZXJsICQoUEVSTCkvbGliL0V4dFV0aWxzL3hzdWJwcCAtcHJvdG90eXBlcyAtdHlwZW1hcCBcCisJICAgICAkKFBFUkwpL2xpYi9FeHRVdGlscy90eXBlbWFwIGlmX3BlcmwueHMgPiAkQAorCiskKE9VVERJUikvaWZfcGVybC5vOglpZl9wZXJsLmMgJChJTkNMKQoraWZlcSAoeWVzLCAkKFVTRURMTCkpCisJJChDQykgLWMgJChDRkxBR1MpIC1JL3Vzci9pbmNsdWRlL21pbmd3IC1EX19NSU5HVzMyX18gaWZfcGVybC5jIC1vICQoT1VURElSKS9pZl9wZXJsLm8KK2VuZGlmCisKKyQoT1VURElSKS9pZl9ydWJ5Lm86CWlmX3J1YnkuYyAkKElOQ0wpCitpZmVxICgxNiwgJChSVUJZX1ZFUikpCisJJChDQykgLWMgJChDRkxBR1MpIC1VX1dJTjMyIGlmX3J1YnkuYyAtbyAkKE9VVERJUikvaWZfcnVieS5vCitlbmRpZgorCiskKE9VVERJUikvbmV0YmVhbnMubzoJbmV0YmVhbnMuYyAkKElOQ0wpICQoTkJERUJVR19ERVApCisJJChDQykgLWMgJChDRkxBR1MpIG5ldGJlYW5zLmMgLW8gJChPVVRESVIpL25ldGJlYW5zLm8KKworJChPVVRESVIpL3ZpbXJjLm86CXZpbS5yYyB2ZXJzaW9uLmggZ3VpX3czMl9yYy5oCisJJChSQykgJChSQ0ZMQUdTKSB2aW0ucmMgLW8gJChPVVRESVIpL3ZpbXJjLm8KKworcGF0aGRlZi5jOiAkKElOQ0wpCitpZm5lcSAoc2guZXhlLCAkKFNIRUxMKSkKKwlAZWNobyBjcmVhdGluZyBwYXRoZGVmLmMKKwlAZWNobyAnLyogcGF0aGRlZi5jICovJyA+IHBhdGhkZWYuYworCUBlY2hvICcjaW5jbHVkZSAidmltLmgiJyA+PiBwYXRoZGVmLmMKKwlAZWNobyAnY2hhcl91ICpkZWZhdWx0X3ZpbV9kaXIgPSAoY2hhcl91ICopIiQoVklNUkNMT0MpIjsnID4+IHBhdGhkZWYuYworCUBlY2hvICdjaGFyX3UgKmRlZmF1bHRfdmltcnVudGltZV9kaXIgPSAoY2hhcl91ICopIiQoVklNUlVOVElNRURJUikiOycgPj4gcGF0aGRlZi5jCisJQGVjaG8gJ2NoYXJfdSAqYWxsX2NmbGFncyA9IChjaGFyX3UgKikiJChDQykgJChDRkxBR1MpIjsnID4+IHBhdGhkZWYuYworCUBlY2hvICdjaGFyX3UgKmFsbF9sZmxhZ3MgPSAoY2hhcl91ICopIiQoQ0MpIC1zIC1vICQoRVhFKSAkKExJQlMpIC1sdXVpZCAtbG9sZTMyICQoRVhUUkFfTElCUykiOycgPj4gcGF0aGRlZi5jCisJQGVjaG8gJ2NoYXJfdSAqY29tcGlsZWRfdXNlciA9IChjaGFyX3UgKikiJChVU0VSTkFNRSkiOycgPj4gcGF0aGRlZi5jCisJQGVjaG8gJ2NoYXJfdSAqY29tcGlsZWRfc3lzID0gKGNoYXJfdSAqKSIkKFVTRVJET01BSU4pIjsnID4+IHBhdGhkZWYuYworZWxzZQorCUBlY2hvIGNyZWF0aW5nIHBhdGhkZWYuYworCUBlY2hvIC8qIHBhdGhkZWYuYyAqLyA+IHBhdGhkZWYuYworCUBlY2hvICNpbmNsdWRlICJ2aW0uaCIgPj4gcGF0aGRlZi5jCisJQGVjaG8gY2hhcl91ICpkZWZhdWx0X3ZpbV9kaXIgPSAoY2hhcl91ICopIiQoVklNUkNMT0MpIjsgPj4gcGF0aGRlZi5jCisJQGVjaG8gY2hhcl91ICpkZWZhdWx0X3ZpbXJ1bnRpbWVfZGlyID0gKGNoYXJfdSAqKSIkKFZJTVJVTlRJTUVESVIpIjsgPj4gcGF0aGRlZi5jCisJQGVjaG8gY2hhcl91ICphbGxfY2ZsYWdzID0gKGNoYXJfdSAqKSIkKENDKSAkKENGTEFHUykiOyA+PiBwYXRoZGVmLmMKKwlAZWNobyBjaGFyX3UgKmFsbF9sZmxhZ3MgPSAoY2hhcl91ICopIiQoQ0MpIC1zIC1vICQoRVhFKSAkKExJQlMpIC1sdXVpZCAtbG9sZTMyICQoRVhUUkFfTElCUykiOyA+PiBwYXRoZGVmLmMKKwlAZWNobyBjaGFyX3UgKmNvbXBpbGVkX3VzZXIgPSAoY2hhcl91ICopIiQoVVNFUk5BTUUpIjsgPj4gcGF0aGRlZi5jCisJQGVjaG8gY2hhcl91ICpjb21waWxlZF9zeXMgPSAoY2hhcl91ICopIiQoVVNFUkRPTUFJTikiOyA+PiBwYXRoZGVmLmMKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvTWFrZV9kaWNlLm1hayBiL3NyYy9NYWtlX2RpY2UubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZjZjYmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvTWFrZV9kaWNlLm1hawpAQCAtMCwwICsxLDIwOSBAQAorIworIyBNYWtlZmlsZSBmb3IgVklNLCB1c2luZyBESUNFIDMKKyMKKworIz4+Pj4+IGNob29zZSBvcHRpb25zOgorIyMjIFNlZSBmZWF0dXJlLmggZm9yIGEgbGlzdCBvZiBvcHRpb25hbHMuCisjIyMgQW55IG90aGVyIGRlZmluZXMgY2FuIGJlIGluY2x1ZGVkIGhlcmUuCitERUZJTkVTID0gLURIQVZFX1RHRVRFTlQgLURVUF9CQ19QQ19FWFRFUk4gLURPU1BFRURfRVhURVJOCisKKyM+Pj4+PiBpZiBIQVZFX1RHRVRFTlQgaXMgZGVmaW5lZCBvL3Rlcm1saWIubyBoYXMgdG8gYmUgdXNlZAorVEVSTUxJQiA9IG8vdGVybWxpYi5vCisjVEVSTUxJQiA9CisKKyM+Pj4+PiBlbmQgb2YgY2hvaWNlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0NGTEFHUyA9IC1jIC1EQU1JR0EgLUlwcm90byAkKERFRklORVMpCisKK1NZTVMgPSB2aW0uc3ltcworUFJFID0gLUgke1NZTVN9PXZpbS5oCitMSUJTID0gLWxhCitDQyA9IGRjYworTEQgPSBkY2MKKworLmMubzoKKwkke0NDfSAke1BSRX0gJHtDRkxBR1N9ICQ8IC1vICRACisKK1NSQyA9IFwKKwlidWZmZXIuYyBcCisJY2hhcnNldC5jIFwKKwlkaWZmLmMgXAorCWRpZ3JhcGguYyBcCisJZWRpdC5jIFwKKwlldmFsLmMgXAorCWV4X2NtZHMuYyBcCisJZXhfY21kczIuYyBcCisJZXhfZG9jbWQuYyBcCisJZXhfZXZhbC5jIFwKKwlleF9nZXRsbi5jIFwKKwlmaWxlaW8uYyBcCisJZm9sZC5jIFwKKwlnZXRjaGFyLmMgXAorCW1haW4uYyBcCisJbWFyay5jIFwKKwltZW1maWxlLmMgXAorCW1lbWxpbmUuYyBcCisJbWVudS5jIFwKKwltZXNzYWdlLmMgXAorCW1pc2MxLmMgXAorCW1pc2MyLmMgXAorCW1vdmUuYyBcCisJbWJ5dGUuYyBcCisJbm9ybWFsLmMgXAorCW9wcy5jIFwKKwlvcHRpb24uYyBcCisJb3NfYW1pZ2EuYyBcCisJcXVpY2tmaXguYyBcCisJcmVnZXhwLmMgXAorCXNjcmVlbi5jIFwKKwlzZWFyY2guYyBcCisJc3ludGF4LmMgXAorCXRhZy5jIFwKKwl0ZXJtLmMgXAorCXVpLmMgXAorCXVuZG8uYyBcCisJd2luZG93LmMgXAorCXZlcnNpb24uYworCitPQkogPQlvL2J1ZmZlci5vIFwKKwlvL2NoYXJzZXQubyBcCisJby9kaWZmLm8gXAorCW8vZGlncmFwaC5vIFwKKwlvL2VkaXQubyBcCisJby9ldmFsLm8gXAorCW8vZXhfY21kcy5vIFwKKwlvL2V4X2NtZHMyLm8gXAorCW8vZXhfZG9jbWQubyBcCisJby9leF9ldmFsLm8gXAorCW8vZXhfZ2V0bG4ubyBcCisJby9maWxlaW8ubyBcCisJby9mb2xkLm8gXAorCW8vZ2V0Y2hhci5vIFwKKwlvL21haW4ubyBcCisJby9tYXJrLm8gXAorCW8vbWVtZmlsZS5vIFwKKwlvL21lbWxpbmUubyBcCisJby9tZW51Lm8gXAorCW8vbWVzc2FnZS5vIFwKKwlvL21pc2MxLm8gXAorCW8vbWlzYzIubyBcCisJby9tb3ZlLm8gXAorCW8vbWJ5dGUubyBcCisJby9ub3JtYWwubyBcCisJby9vcHMubyBcCisJby9vcHRpb24ubyBcCisJby9vc19hbWlnYS5vIFwKKwlvL3F1aWNrZml4Lm8gXAorCW8vcmVnZXhwLm8gXAorCW8vc2NyZWVuLm8gXAorCW8vc2VhcmNoLm8gXAorCW8vc3ludGF4Lm8gXAorCW8vdGFnLm8gXAorCW8vdGVybS5vIFwKKwlvL3VpLm8gXAorCW8vdW5kby5vIFwKKwlvL3dpbmRvdy5vIFwKKwkkKFRFUk1MSUIpCisKK1ZpbTogJChPQkopIHZlcnNpb24uYyB2ZXJzaW9uLmgKKwkke0NDfSAkKENGTEFHUykgdmVyc2lvbi5jIC1vIG8vdmVyc2lvbi5vCisJJHtMRH0gLW8gVmltICQoT0JKKSBvL3ZlcnNpb24ubyAkKExJQlMpCisKK2RlYnVnOiAkKE9CSikgdmVyc2lvbi5jIHZlcnNpb24uaAorCSR7Q0N9ICQoQ0ZMQUdTKSB2ZXJzaW9uLmMgLW8gby92ZXJzaW9uLm8KKwkke0xEfSAtcyAtbyBWaW0gJChPQkopIG8vdmVyc2lvbi5vICQoTElCUykKKwordGFnczoKKwljc2ggLWMgY3RhZ3MgJChTUkMpICouaAorCitjbGVhbjoKKwlkZWxldGUgby8qLm8gVmltICQoU1lNUykKKworJChTWU1TKSAgOiB2aW0uaCBnbG9iYWxzLmgga2V5bWFwLmggbWFjcm9zLmggYXNjaWkuaCB0ZXJtLmggb3NfYW1pZ2EuaCBzdHJ1Y3RzLmgKKwlkZWxldGUgJChTWU1TKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworby9idWZmZXIubzoJYnVmZmVyLmMgICQoU1lNUykKKworby9jaGFyc2V0Lm86CWNoYXJzZXQuYyAgJChTWU1TKQorCitvL2RpZmYubzoJZGlmZi5jCSQoU1lNUykKKworby9kaWdyYXBoLm86CWRpZ3JhcGguYyAgJChTWU1TKQorCitvL2VkaXQubzoJZWRpdC5jCSQoU1lNUykKKworby9ldmFsLm86CWV2YWwuYyAgJChTWU1TKQorCitvL2V4X2NtZHMubzoJZXhfY21kcy5jICAkKFNZTVMpCisKK28vZXhfY21kczIubzoJZXhfY21kczIuYyAgJChTWU1TKQorCitvL2V4X2RvY21kLm86CWV4X2RvY21kLmMgICQoU1lNUykgZXhfY21kcy5oCisKK28vZXhfZXZhbC5vOglleF9ldmFsLmMgICQoU1lNUykgZXhfY21kcy5oCisKK28vZXhfZ2V0bG4ubzoJZXhfZ2V0bG4uYyAgJChTWU1TKQorCitvL2ZpbGVpby5vOglmaWxlaW8uYyAgJChTWU1TKQorCitvL2ZvbGQubzoJZm9sZC5jICAkKFNZTVMpCisKK28vZ2V0Y2hhci5vOiBnZXRjaGFyLmMJJChTWU1TKQorCitvL21haW4ubzogbWFpbi5jICQoU1lNUykKKworby9tYXJrLm86IG1hcmsuYwkkKFNZTVMpCisKK28vbWVtZmlsZS5vOgltZW1maWxlLmMgICQoU1lNUykKKworby9tZW1saW5lLm86CW1lbWxpbmUuYyAgJChTWU1TKQorCitvL21lbnUubzoJbWVudS5jICAkKFNZTVMpCisKK28vbWVzc2FnZS5vOgltZXNzYWdlLmMgICQoU1lNUykKKworby9taXNjMS5vOgltaXNjMS5jICAkKFNZTVMpCisKK28vbWlzYzIubzoJbWlzYzIuYyAgJChTWU1TKQorCitvL21vdmUubzoJbW92ZS5jICAkKFNZTVMpCisKK28vbWJ5dGUubzoJbWJ5dGUuYyAgJChTWU1TKQorCitvL25vcm1hbC5vOglub3JtYWwuYyAgJChTWU1TKQorCitvL29wcy5vOglvcHMuYyAgJChTWU1TKQorCitvL29wdGlvbi5vOglvcHRpb24uYyAgJChTWU1TKQorIyBCZWNhdXNlIG9mIGEgYnVnIGluIERDMSAyLjA2LjQwLCBpbml0aWFsaXNhdGlvbiBvZiB1bmlvbnMgZG9lcyBub3QKKyMgd29yayBjb3JyZWN0bHkuIGRjMS0yMSBpcyBEQzEgMi4wNi4yMSB3aGljaCBkb2VzIHdvcmsuCisjCXJlbmFtZSBkYzEtMjEgZGMxCisJJHtDQ30gJHtDRkxBR1N9IG9wdGlvbi5jIC1vIG8vb3B0aW9uLm8KKyMJcmVuYW1lIGRjMSBkYzEtMjEKKworby9vc19hbWlnYS5vOglvc19hbWlnYS5jICAkKFNZTVMpIG9zX2FtaWdhLmgKKworby9xdWlja2ZpeC5vOglxdWlja2ZpeC5jICAkKFNZTVMpCisKK28vcmVnZXhwLm86CXJlZ2V4cC5jICAkKFNZTVMpIHJlZ2V4cC5oCisKK28vc2NyZWVuLm86CXNjcmVlbi5jICAkKFNZTVMpCisKK28vc2VhcmNoLm86CXNlYXJjaC5jICAkKFNZTVMpIHJlZ2V4cC5oCisKK28vc3ludGF4Lm86CXN5bnRheC5jICAkKFNZTVMpCisKK28vdGFnLm86CXRhZy5jICAkKFNZTVMpCisKK28vdGVybS5vOgl0ZXJtLmMgICQoU1lNUykgdGVybS5oCisKK28vdGVybWxpYi5vOgl0ZXJtbGliLmMgJChTWU1TKQorCitvL3VpLm86IHVpLmMJJChTWU1TKQorCitvL3VuZG8ubzogdW5kby5jCSQoU1lNUykKKworby93aW5kb3cubzogd2luZG93LmMJJChTWU1TKQpkaWZmIC0tZ2l0IGEvc3JjL01ha2VfZGpnLm1hayBiL3NyYy9NYWtlX2RqZy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjNDJiOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlX2RqZy5tYWsKQEAgLTAsMCArMSwxMDIgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFZJTSBvbiBNU0RPUywgdXNpbmcgREpHUFAgMi4wCisjCisKKyM+Pj4+PiBjaG9vc2Ugb3B0aW9uczoKKworIyMjIFNlZSBmZWF0dXJlLmggZm9yIGEgbGlzdCBvZiBvcHRpb25hbHMuCisjIyMgQW55IG90aGVyIGRlZmluZXMgY2FuIGJlIGluY2x1ZGVkIGhlcmUuCisKK0RFRklORVMgPQorCisjPj4+Pj4gbmFtZSBvZiB0aGUgY29tcGlsZXIgYW5kIGxpbmtlciwgbmFtZSBvZiBsaWIgZGlyZWN0b3J5CitDQyA9IGdjYworCisjPj4+Pj4gZW5kIG9mIGNob2ljZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitJTkNMID0gdmltLmggZ2xvYmFscy5oIG9wdGlvbi5oIGtleW1hcC5oIG1hY3Jvcy5oIGFzY2lpLmggdGVybS5oIG9zX21zZG9zLmggc3RydWN0cy5oCitDRkxBR1MgPSAtTzIgLURNU0RPUyAtSXByb3RvICQoREVGSU5FUykgLVdhbGwgLURpbnRlcnJ1cHQ9IC1EZmFyPSAtRE1BWE1FTT01MTIgLURfTkFJVkVfRE9TX1JFR1MKKworT0JKID0gXAorCW9iai9idWZmZXIubyBcCisJb2JqL2NoYXJzZXQubyBcCisJb2JqL2RpZmYubyBcCisJb2JqL2RpZ3JhcGgubyBcCisJb2JqL2VkaXQubyBcCisJb2JqL2V2YWwubyBcCisJb2JqL2V4X2NtZHMubyBcCisJb2JqL2V4X2NtZHMyLm8gXAorCW9iai9leF9kb2NtZC5vIFwKKwlvYmovZXhfZXZhbC5vIFwKKwlvYmovZXhfZ2V0bG4ubyBcCisJb2JqL2ZpbGVpby5vIFwKKwlvYmovZm9sZC5vIFwKKwlvYmovZ2V0Y2hhci5vIFwKKwlvYmovbWFpbi5vIFwKKwlvYmovbWFyay5vIFwKKwlvYmovbWVtZmlsZS5vIFwKKwlvYmovbWVtbGluZS5vIFwKKwlvYmovbWVudS5vIFwKKwlvYmovbWVzc2FnZS5vIFwKKwlvYmovbWlzYzEubyBcCisJb2JqL21pc2MyLm8gXAorCW9iai9tb3ZlLm8gXAorCW9iai9tYnl0ZS5vIFwKKwlvYmovbm9ybWFsLm8gXAorCW9iai9vcHMubyBcCisJb2JqL29wdGlvbi5vIFwKKwlvYmovb3NfbXNkb3MubyBcCisJb2JqL3F1aWNrZml4Lm8gXAorCW9iai9yZWdleHAubyBcCisJb2JqL3NjcmVlbi5vIFwKKwlvYmovc2VhcmNoLm8gXAorCW9iai9zeW50YXgubyBcCisJb2JqL3RhZy5vIFwKKwlvYmovdGVybS5vIFwKKwlvYmovdWkubyBcCisJb2JqL3VuZG8ubyBcCisJb2JqL3dpbmRvdy5vIFwKKwkkKFRFUk1MSUIpCisKK2FsbDogdmltLmV4ZSBpbnN0YWxsLmV4ZSB1bmluc3RhbC5leGUgeHhkL3h4ZC5leGUKKworIyB2ZXJzaW9uLmMgaXMgY29tcGlsZWQgZWFjaCB0aW1lLCBzbyB0aGF0IGl0IHNldHMgdGhlIGJ1aWxkIHRpbWUuCit2aW0uZXhlOiBvYmogJChPQkopIHZlcnNpb24uYyB2ZXJzaW9uLmgKKwkkKENDKSAkKENGTEFHUykgLXMgLW8gdmltLmV4ZSB2ZXJzaW9uLmMgJChPQkopIC1scGMKKworaW5zdGFsbC5leGU6IGRvc2luc3QuYworCSQoQ0MpICQoQ0ZMQUdTKSAtcyAtbyBpbnN0YWxsLmV4ZSBkb3NpbnN0LmMgLWxwYworCit1bmluc3RhbC5leGU6IHVuaW5zdGFsLmMKKwkkKENDKSAkKENGTEFHUykgLXMgLW8gdW5pbnN0YWwuZXhlIHVuaW5zdGFsLmMgLWxwYworCisjIFRoaXMgcmVxdWlyZXMgR05VIG1ha2UuCit4eGQveHhkLmV4ZTogeHhkL3h4ZC5jCisJJChNQUtFKSAtLWRpcmVjdG9yeT14eGQgLWYgTWFrZV9kamcubWFrCisKK29iajoKKwlta2RpciBvYmoKKwordGFnczoKKwljb21tYW5kIC9jIGN0YWdzICouYyAkKElOQ0wpIGV4X2NtZHMuaAorCitjbGVhbjoKKwktZGVsIG9ialwqLm8KKwktcm1kaXIgb2JqCisJLWRlbCB2aW0uZXhlCisJLWRlbCBpbnN0YWxsLmV4ZQorCS1kZWwgeHhkXHh4ZC5leGUKKwktZGVsIHRlc3RkaXJcKi5vdXQKKworIyBUaGlzIHJlcXVpcmVzIEdOVSBtYWtlLgordGVzdDoKKwkkKE1BS0UpIC0tZGlyZWN0b3J5PXRlc3RkaXIgLWYgTWFrZV9kb3MubWFrCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitvYmovJS5vOiAlLmMgb2JqICQoSU5DTCkKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIyBFeHRyYSBkZXBlbmRlbmN5ICh0aGVyZSBhcmUgYWN0dWFsbHkgbWFueSBtb3JlLi4uKQorb2JqL2V4X2RvY21kLm86CWV4X2NtZHMuaApkaWZmIC0tZ2l0IGEvc3JjL01ha2VfZHZjLm1hayBiL3NyYy9NYWtlX2R2Yy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzNzdmMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlX2R2Yy5tYWsKQEAgLTAsMCArMSwxMDUgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIE5NQUtFIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDQuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKKyFJRiAiJChDRkcpIiA9PSAiIgorQ0ZHPVZpbSAtIFdpbjMyIElERSBmb3IgTWFrZV9tdmMubWFrCishTUVTU0FHRSBObyBjb25maWd1cmF0aW9uIHNwZWNpZmllZC4gIERlZmF1bHRpbmcgdG8gVmltIC0gV2luMzIgSURFIGZvclwKKyBNYWtlX212Yy5tYWsuCishRU5ESUYKKworIUlGICIkKENGRykiICE9ICJWaW0gLSBXaW4zMiBJREUgZm9yIE1ha2VfbXZjLm1hayIKKyFNRVNTQUdFIEludmFsaWQgY29uZmlndXJhdGlvbiAiJChDRkcpIiBzcGVjaWZpZWQuCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRSBvbiB0aGlzIG1ha2VmaWxlCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZToKKyFNRVNTQUdFCishTUVTU0FHRSBOTUFLRSAvZiAiTWFrZV9kdmMubWFrIiBDRkc9IlZpbSAtIFdpbjMyIElERSBmb3IgTWFrZV9tdmMubWFrIgorIU1FU1NBR0UKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UKKyFNRVNTQUdFICJWaW0gLSBXaW4zMiBJREUgZm9yIE1ha2VfbXZjLm1hayIgKGJhc2VkIG9uXAorICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorIUVSUk9SIEFuIGludmFsaWQgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQuCishRU5ESUYKKworIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCitOVUxMPQorIUVMU0UKK05VTEw9bnVsCishRU5ESUYKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBUYXJnZXRfTGFzdF9TY2FubmVkICJWaW0gLSBXaW4zMiBJREUgZm9yIE1ha2VfbXZjLm1hayIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiIgorIyBQUk9QIFRhcmdldF9EaXIgIiIKK09VVERJUj0uCitJTlRESVI9LgorCitBTEwgOiAiJChPVVRESVIpXHZpbXJ1bi5leGUiCisKK0NMRUFOIDoKKwktQGVyYXNlICIuXHZpbXJ1bi5leGUiCisJLUBlcmFzZSAiLlx2aW1ydW4ub2JqIgorCisjIEFERCBDUFAgL25vbG9nbyAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg4MDkKKyMgQUREIFJTQyAvbCAweDgwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJTQzMyIC9ub2xvZ28KK0JTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChPVVRESVIpL01ha2VfZHZjLmJzYyIKK0JTQzMyX1NCUlM9CitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIC9tYWNoaW5lOklYODYKKyMgQUREIExJTkszMiAvbm9sb2dvIC9wZGI6bm9uZSAvbWFjaGluZTpJWDg2IC9vdXQ6InZpbXJ1bi5leGUiCitMSU5LMzJfRkxBR1M9L25vbG9nbyAvcGRiOm5vbmUgL21hY2hpbmU6SVg4NiAvb3V0OiIkKE9VVERJUikvdmltcnVuLmV4ZSIKK0xJTkszMl9PQkpTPSBcCisJIiQoSU5URElSKS92aW1ydW4ub2JqIgorCisiJChPVVRESVIpXHZpbXJ1bi5leGUiIDogIiQoT1VURElSKSIgJChERUZfRklMRSkgJChMSU5LMzJfT0JKUykKKyAgICAkKExJTkszMikgQDw8CisgICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQorPDwKKworQ1BQX1BST0o9L25vbG9nbyAvTUwgL2MKKworLmMub2JqOgorICAgJChDUFApICQoQ1BQX1BST0opICQ8CisKKy5jcHAub2JqOgorICAgJChDUFApICQoQ1BQX1BST0opICQ8CisKKy5jeHgub2JqOgorICAgJChDUFApICQoQ1BQX1BST0opICQ8CisKKy5jLnNicjoKKyAgICQoQ1BQKSAkKENQUF9QUk9KKSAkPAorCisuY3BwLnNicjoKKyAgICQoQ1BQKSAkKENQUF9QUk9KKSAkPAorCisuY3h4LnNicjoKKyAgICQoQ1BQKSAkKENQUF9QUk9KKSAkPAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJWaW0gLSBXaW4zMiBJREUgZm9yIE1ha2VfbXZjLm1hayIKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHZpbXJ1bi5jCisKKyIkKElOVERJUilcdmltcnVuLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKworCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvc3JjL01ha2VfaXZjLm1hayBiL3NyYy9NYWtlX2l2Yy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhMTUzMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlX2l2Yy5tYWsKQEAgLTAsMCArMSw2NDggQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIE5NQUtFIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDQuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKyMKKyMgTWFrZV9pdmMubWFrIE1ha2VmaWxlIHRvIGJ1aWxkIHZpbSBpbiBib3RoIElERSBhbmQgbm1ha2UuCisjIFRoaXMgZmlsZSBjYW4gYmUgaW1wb3J0ZWQgYXMgYSB3b3Jrc3BhY2UgaW50byBWaXN1YWwgU3R1ZGlvLiAgSXQgbXVzdCBiZSBpbgorIyBET1MgZmlsZWZvcm1hdCB0aGVuIQorIworIyBJdCBpcyB3b3J0aCBtYWtpbmcgdGhlIGZpbGUgcmVhZC1vbmx5IGFzIHRoZSBWQzQgSURFIHdpbGwgdHJ5IHRvIG92ZXJ3cml0ZQorIyBpdCB3aXRoIGEgSFVHRUxZIGV4cGFuZGVkIGNsb25lIG9mIGl0c2VsZi4KKyMKKyMgVGhlIGZvbGxvd2luZyBwb2ludHMgYXJlIHdvcnRoIG5vdGluZzoKKyMgMSkgQ29tbWVudHMgaGVyZSBhcmUgaWdub3JlZCBieSBWQ1s0NTZdLjAgSURFcworIyAyKSAjIEFERCBMSU5LMzIgL3BkYjouXERiZy92aW1kLnBkYiBpcyB3cml0dGVuIHNvIHJhdGhlciB0aGFuCisjICAgICMgQUREIExJTkszMiAvcGRiOiIuXERiZy92aW1kLnBkYiIgdG8gYXZvaWQgVkM0IC0+IFZDNSBjb252ZXJzaW9uIGZhaWx1cmUKKyMgMykgSXQgaXMgZ29vZCB0byBkZWxldGUgLnBkYiBmaWxlIGJlZm9yZSBsaW5raW5nIHRvIGNvcGUgd2l0aCBzd2l0Y2ggYW1vbmcKKyMgICAgVkNbNDU2XSBhcyBJREUgY2xlYW4gYWN0aW9uIGRvZXMgbm90IHJlbW92ZSB0aGF0IGZpbGUgYW5kIGxpbmsgY2xhc2hlcworIyAgICB3aXRoIGl0LiBUaGUgZm9sbG93aW5nIHdvcmtzIGluIFZDNSBidXQgbm90IGluIFZDNCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0CisjICAgIHByZS1saW5rIGFjdGlvbnMuIFRoZSBubWFrZSBhY3Rpb24gZG9lcyBzdWNoIGRlbGV0aW9ucy4KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sCitQcmVMaW5rX0NtZHM9QGlmIGV4aXN0IC5cb2xlRGJnXGd2aW1kLnBkYiBkZWwgLlxvbGVEYmdcZ3ZpbWQucGRiCisjIEVuZCBTcGVjaWFsIEJ1aWxkIFRvb2wKKyMgNCkgSSB3YXMgdW5hYmxlIHRvIG1ha2UgIUlGREVGIE9MRSwgZXRjLiB3b3JrIGluIHRoZSBWQzQgSURFLgorIyAgICBJIHdhcyBhaW1pbmcgZm9yIDQgY29uZmlndXJhdGlvbnMgd2l0aCBzdWItY29uZmlndXJhdGlvbnMgc2VsZWN0ZWQgYnkKKyMgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorIyA1KSBPcHRpbWlzYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBkaXNhYmxlZCB2ZXJzaW9ucyBvZiBWQy4gVGhpcyByZXN1bHRzIGluCisjICAgIG1lc3NhZ2VzIGZvciBSZWxlYXNlIGJ1aWxkcyBsaWtlOgorIyAgICAgIENvbW1hbmQgbGluZSB3YXJuaW5nIEQ0MDI1IDogb3ZlcnJpZGluZyAnL08yJyB3aXRoICcvT2QnCisjIDYpIG5tYWtlIDEuNjIgYW5kIGxhdGVyIHN1cHBvcnQgYmF0Y2ggY29tcGlsYXRpb24uIEkgd2FzIHVuYWJsZSB0byB1c2UgdGhpcworIyAgICBpbiBhIG1hbm5lciBhY2NlcHRhYmxlIHRvIGVhcmxpZXIgSURFcy4KKyMKKyMgSGlzdG9yeQorIworIyBXaGVuICAgICAgIFdobyAgICAgICBXaGF0CisjIDIwMDEtMDctMDYgVy5CcmlzY29lIE9yaWdpbmFsIGRlcml2ZWQgZnJvbSBNYWtlX1tnb112Yy5tYWsgd2l0aCBsZXNzIG5vaXNlCisjIDIwMDEtMDctMDggVy5CcmlzY29lIEZ1cnRoZXIgbm9pc2UgcmVkdWN0aW9uOyBjb25zaXN0ZW50IC5tYXAgYW5kIC5wZGIgbG9naWMKKyMJCSAgICAgICBBZGRlZCBpbnN0YWxsLmV4ZSBydWxlLCBldGMuOyBSZW1vdmVkIHVudXNlZCBsaWJyYXJpZXMuCisjIDIwMDEtMDgtMDkgVy5CcmlzY29lIFJlc3RvcmVkIFZDNC4wLXJlcXVpcmVkIHRyYWlsaW5nIHNwYWNlIGluICFNRVNTQUdFIGFmb3JlCisjCQkgICAgICAgRW5oYW5jZWQgaWZfb2xlLmlkbCBydWxlIHRvIHVzZSAvb3V0IGFyZ3VtZW50LgorIwkJICAgICAgIERlZmF1bHQgcnVsZXMgbm93IHJlbGF0aXZlIHRvIC4gdG8gcmVkdWNlIElERS9ubWFrZSBkaWZzCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCishSUYgIiQoQ0ZHKSIgPT0gIiIKK0NGRz1WaW0gLSBXaW4zMiBSZWxlYXNlIGd2aW0gT0xFCishTUVTU0FHRSBObyBjb25maWd1cmF0aW9uIHNwZWNpZmllZC4gIERlZmF1bHRpbmcgdG8gVmltIC0gV2luMzIgUmVsZWFzZSBndmltIE9MRS4KKyFFTkRJRgorCishSUYgIiQoQ0ZHKSIgIT0gIlZpbSAtIFdpbjMyIFJlbGVhc2UgZ3ZpbSBPTEUiXAorICYmICIkKENGRykiICE9ICJWaW0gLSBXaW4zMiBEZWJ1ZyBndmltIE9MRSJcCisgJiYgIiQoQ0ZHKSIgIT0gIlZpbSAtIFdpbjMyIFJlbGVhc2UgZ3ZpbSJcCisgJiYgIiQoQ0ZHKSIgIT0gIlZpbSAtIFdpbjMyIERlYnVnIGd2aW0iXAorICYmICIkKENGRykiICE9ICJWaW0gLSBXaW4zMiBSZWxlYXNlIHZpbSJcCisgJiYgIiQoQ0ZHKSIgIT0gIlZpbSAtIFdpbjMyIERlYnVnIHZpbSIKKyFNRVNTQUdFIEludmFsaWQgY29uZmlndXJhdGlvbiAiJChDRkcpIiBzcGVjaWZpZWQuCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRSBvbiB0aGlzIG1ha2VmaWxlCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZToKKyFNRVNTQUdFCishTUVTU0FHRSBOTUFLRSAvZiAiTWFrZV9pdmMubWFrIiBDRkc9IlZpbSAtIFdpbjMyIERlYnVnIHZpbSIKKyFNRVNTQUdFCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFCishTUVTU0FHRSAiVmltIC0gV2luMzIgUmVsZWFzZSBndmltIE9MRSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJWaW0gLSBXaW4zMiBEZWJ1ZyBndmltIE9MRSIgICAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIlZpbSAtIFdpbjMyIFJlbGVhc2UgZ3ZpbSIgICAgIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAiVmltIC0gV2luMzIgRGVidWcgZ3ZpbSIgICAgICAgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJWaW0gLSBXaW4zMiBSZWxlYXNlIHZpbSIgICAgICAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIlZpbSAtIFdpbjMyIERlYnVnIHZpbSIgICAgICAgIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKyFFUlJPUiBBbiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWVkLgorIUVORElGCisKKyFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgorTlVMTD0KK0RFTF9UUkVFID0gcm1kaXIgL3MgL3EKKyFFTFNFCitOVUxMPW51bAorREVMX1RSRUUgPSBkZWx0cmVlIC95CishRU5ESUYKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgVGFyZ2V0X0xhc3RfU2Nhbm5lZCAiVmltIC0gV2luMzIgRGVidWcgdmltIgorIyBQUk9QIFVzZV9NRkMgMAorCitSU0M9cmMuZXhlCitDUFA9Y2wuZXhlCitMSU5LMzI9bGluay5leGUKKworQ1BQX1BST0o9IC9ub2xvZ28gL01UIC9XMyAvR1ggL0kgIi5ccHJvdG8iIC9EICJXSU4zMiIgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9JICIuXHByb3RvIiAvRCAiV0lOMzIiIC9jCisKK0xJTkszMl9GTEFHUz0gb2xkbmFtZXMubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiBjb21kbGczMi5saWIgY29tY3RsMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWIKKyMgQUREIExJTkszMiAgb2xkbmFtZXMubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiBjb21kbGczMi5saWIgY29tY3RsMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWIKKyMgU1VCVFJBQ1QgTElOSzMyIC9pbmNyZW1lbnRhbDp5ZXMKKworUlNDX1BST0o9IC9sIDB4NDA5IC9kICJGRUFUX0dVSV9XMzIiCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIkZFQVRfR1VJX1czMiIKKworIUlGICAiJChDRkcpIiA9PSAiVmltIC0gV2luMzIgUmVsZWFzZSBndmltIE9MRSIKKworIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgLlxvbGVSZWwKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyIC5cb2xlUmVsCisKK0lOVERJUj0uXG9sZVJlbAorVklNPWd2aW0KK0VYVFJBUz0iJChJTlRESVIpL2lmX29sZS5vYmoiICIkKElOVERJUikvdmltLnJlcyIgIiQoSU5URElSKS9ndWkub2JqIiAiJChJTlRESVIpL2d1aV93MzIub2JqIiAiJChJTlRESVIpL29zX3czMmV4ZS5vYmoiCisKK0NQUF9QUk9KPSQoQ1BQX1BST0opIC9PMiAvRCAiTkRFQlVHIiAvRCAiRkVBVF9HVUlfVzMyIiAvRCAiRFlOQU1JQ19HRVRURVhUIiAvRCAiRkVBVF9PTEUiIC9GZC5cb2xlUmVsLyAvRm8uXG9sZVJlbC8KKyMgQUREIENQUCAgICAgICAgICAgIC9PMiAvRCAiTkRFQlVHIiAvRCAiRkVBVF9HVUlfVzMyIiAvRCAiRFlOQU1JQ19HRVRURVhUIiAvRCAiRkVBVF9PTEUiIC9GZC5cb2xlUmVsLyAvRm8uXG9sZVJlbC8KKworUlNDX1BST0o9JChSU0NfUFJPSikgL0kgIi5cb2xlUmVsIiAvZCAiTkRFQlVHIiAvZCAiRkVBVF9PTEUiIC9mby5cb2xlUmVsXHZpbS5yZXMKKyMgQUREIFJTQyAgICAgICAgICAgIC9JICIuXG9sZVJlbCIgL2QgIk5ERUJVRyIgL2QgIkZFQVRfT0xFIiAvZm8uXG9sZVJlbFx2aW0ucmVzCisKK0xJTkszMl9GTEFHUz0kKExJTkszMl9GTEFHUykgL3BkYjpub25lIGxpYmMubGliIG9sZWF1dDMyLmxpYiAvc3Vic3lzdGVtOndpbmRvd3MgL291dDouXGd2aW0uZXhlCisjIEFERCBMSU5LMzIgICAgICAgICAgICAgICAgIC9wZGI6bm9uZSBsaWJjLmxpYiBvbGVhdXQzMi5saWIgL3N1YnN5c3RlbTp3aW5kb3dzIC9vdXQ6LlxndmltLmV4ZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiVmltIC0gV2luMzIgRGVidWcgZ3ZpbSBPTEUiCisKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyIC5cb2xlRGJnCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAuXG9sZURiZworCitJTlRESVI9LlxvbGVEYmcKK1ZJTT1ndmltZAorRVhUUkFTPSIkKElOVERJUikvaWZfb2xlLm9iaiIgIiQoSU5URElSKS92aW0ucmVzIiAiJChJTlRESVIpL2d1aS5vYmoiICIkKElOVERJUikvZ3VpX3czMi5vYmoiICIkKElOVERJUikvb3NfdzMyZXhlLm9iaiIKKworQ1BQX1BST0o9JChDUFBfUFJPSikgL1ppIC9PZCAvRCAiX0RFQlVHIiAvRCAiRkVBVF9HVUlfVzMyIiAvRCAiRFlOQU1JQ19HRVRURVhUIiAvRCAiRkVBVF9PTEUiIC9GZC5cb2xlRGJnLyAvRm8uXG9sZURiZy8KKyMgQUREIENQUCAgICAgICAgICAgIC9aaSAvT2QgL0QgIl9ERUJVRyIgL0QgIkZFQVRfR1VJX1czMiIgL0QgIkRZTkFNSUNfR0VUVEVYVCIgL0QgIkZFQVRfT0xFIiAvRmQuXG9sZURiZy8gL0ZvLlxvbGVEYmcvCisKK1JTQ19QUk9KPSQoUlNDX1BST0opIC9JIC5cb2xlRGJnIC9kICJfREVCVUciIC9kICJGRUFUX09MRSIgL2ZvLlxvbGVEYmdcdmltLnJlcworIyBBREQgUlNDICAgICAgICAgICAgL0kgLlxvbGVEYmcgL2QgIl9ERUJVRyIgL2QgIkZFQVRfT0xFIiAvZm8uXG9sZURiZ1x2aW0ucmVzCisKK0xJTkszMl9GTEFHUz0kKExJTkszMl9GTEFHUykgbGliY2QubGliIG9sZWF1dDMyLmxpYiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9wcm9maWxlIC9wZGI6LlxvbGVEYmcvZ3ZpbWQucGRiIC9tYXA6LlxvbGVEYmdcZ3ZpbWQubWFwIC9vdXQ6LlxndmltZC5leGUKKyMgQUREIExJTkszMiAgICAgICAgICAgICAgICAgbGliY2QubGliIG9sZWF1dDMyLmxpYiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9wcm9maWxlIC9wZGI6LlxvbGVEYmcvZ3ZpbWQucGRiIC9tYXA6LlxvbGVEYmdcZ3ZpbWQubWFwIC9vdXQ6LlxndmltZC5leGUKKworCishRUxTRUlGICAiJChDRkcpIiA9PSAiVmltIC0gV2luMzIgUmVsZWFzZSBndmltIgorCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAuXGdSZWwKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyIC5cZ1JlbAorCitJTlRESVI9LlxnUmVsCitWSU09Z3ZpbQorRVhUUkFTPSIkKElOVERJUikvdmltLnJlcyIgIiQoSU5URElSKS9ndWkub2JqIiAiJChJTlRESVIpL2d1aV93MzIub2JqIiAiJChJTlRESVIpL29zX3czMmV4ZS5vYmoiCisKK0NQUF9QUk9KPSQoQ1BQX1BST0opIC9PMiAvRCAiTkRFQlVHIiAvRCAiRkVBVF9HVUlfVzMyIiAvRmQuXGdSZWwvIC9Gby5cZ1JlbC8KKyMgQUREIENQUCAgICAgICAgICAgIC9PMiAvRCAiTkRFQlVHIiAvRCAiRkVBVF9HVUlfVzMyIiAvRmQuXGdSZWwvIC9Gby5cZ1JlbC8KKworUlNDX1BST0o9JChSU0NfUFJPSikgL2QgIk5ERUJVRyIgL2ZvLlxnUmVsXHZpbS5yZXMKKyMgQUREIFJTQyAgICAgICAgICAgIC9kICJOREVCVUciIC9mby5cZ1JlbFx2aW0ucmVzCisKK0xJTkszMl9GTEFHUz0kKExJTkszMl9GTEFHUykgL3BkYjpub25lIGxpYmMubGliIC9zdWJzeXN0ZW06d2luZG93cyAvb3V0Oi5cZ3ZpbS5leGUKKyMgQUREIExJTkszMiAgICAgICAgICAgICAgICAgL3BkYjpub25lIGxpYmMubGliIC9zdWJzeXN0ZW06d2luZG93cyAvb3V0Oi5cZ3ZpbS5leGUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIERlYnVnIGd2aW0iCisKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyIC5cZ0RiZworIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgLlxnRGJnCisKK0lOVERJUj0uXGdEYmcKK1ZJTT1ndmltZAorRVhUUkFTPSIkKElOVERJUikvdmltLnJlcyIgIiQoSU5URElSKS9ndWkub2JqIiAiJChJTlRESVIpL2d1aV93MzIub2JqIiAiJChJTlRESVIpL29zX3czMmV4ZS5vYmoiCisKK0NQUF9QUk9KPSQoQ1BQX1BST0opIC9aaSAvT2QgL0QgIl9ERUJVRyIgL0QgIkZFQVRfR1VJX1czMiIgL0ZkLlxnRGJnLyAvRm8uXGdEYmcvCisjIEFERCBDUFAgICAgICAgICAgICAvWmkgL09kIC9EICJfREVCVUciIC9EICJGRUFUX0dVSV9XMzIiIC9GZC5cZ0RiZy8gL0ZvLlxnRGJnLworCitSU0NfUFJPSj0kKFJTQ19QUk9KKSAvZCAiX0RFQlVHIiAvZm8uXGdEYmdcdmltLnJlcworIyBBREQgUlNDICAgICAgICAgICAgL2QgIl9ERUJVRyIgL2ZvLlxnRGJnXHZpbS5yZXMKKworTElOSzMyX0ZMQUdTPSQoTElOSzMyX0ZMQUdTKSBsaWJjZC5saWIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvcHJvZmlsZSAvcGRiOi5cZ0RiZy9ndmltZC5wZGIgL21hcDouXGdEYmdcZ3ZpbWQubWFwIC9vdXQ6LlxndmltZC5leGUKKyMgQUREIExJTkszMiAgICAgICAgICAgICAgICAgbGliY2QubGliIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL3Byb2ZpbGUgL3BkYjouXGdEYmcvZ3ZpbWQucGRiIC9tYXA6LlxnRGJnXGd2aW1kLm1hcCAvb3V0Oi5cZ3ZpbWQuZXhlCisKKyFFTFNFSUYgICIkKENGRykiID09ICJWaW0gLSBXaW4zMiBSZWxlYXNlIHZpbSIKKworIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgLlxSZWwKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyIC5cUmVsCisKK0lOVERJUj0uXFJlbAorVklNPXZpbQorRVhUUkFTPQorCitDUFBfUFJPSj0kKENQUF9QUk9KKSAvTzIgL0QgIk5ERUJVRyIgL0ZkLlxSZWwvIC9Gby5cUmVsLworIyBBREQgQ1BQICAgICAgICAgICAgL08yIC9EICJOREVCVUciIC9GZC5cUmVsLyAvRm8uXFJlbC8KKworTElOSzMyX0ZMQUdTPSQoTElOSzMyX0ZMQUdTKSAvcGRiOm5vbmUgbGliYy5saWIgL3N1YnN5c3RlbTpjb25zb2xlIC9vdXQ6Llx2aW0uZXhlCisjIEFERCBMSU5LMzIgICAgICAgICAgICAgICAgIC9wZGI6bm9uZSBsaWJjLmxpYiAvc3Vic3lzdGVtOmNvbnNvbGUgL291dDouXHZpbS5leGUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIERlYnVnIHZpbSIKKworIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgLlxEYmcKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyIC5cRGJnCisKK0lOVERJUj0uXERiZworVklNPXZpbWQKK0VYVFJBUz0KKworQ1BQX1BST0o9JChDUFBfUFJPSikgL1ppIC9PZCAvRCAiX0RFQlVHIiAvRmQuXERiZy8gL0ZvLlxEYmcvCisjIEFERCBDUFAgICAgICAgICAgICAvWmkgL09kIC9EICJfREVCVUciIC9GZC5cRGJnLyAvRm8uXERiZy8KKworTElOSzMyX0ZMQUdTPSQoTElOSzMyX0ZMQUdTKSBsaWJjZC5saWIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvcHJvZmlsZSAvcGRiOi5cRGJnL3ZpbWQucGRiIC9tYXA6LlxEYmcvdmltZC5tYXAgL291dDouXHZpbWQuZXhlCisjIEFERCBMSU5LMzIgICAgICAgICAgICAgICAgIGxpYmNkLmxpYiAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9wcm9maWxlIC9wZGI6LlxEYmcvdmltZC5wZGIgL21hcDouXERiZy92aW1kLm1hcCAvb3V0Oi5cdmltZC5leGUKKworIUVORElGCisKK0FMTCA6IC5cJChWSU0pLmV4ZSB2aW1ydW4uZXhlIGluc3RhbGwuZXhlIHVuaW5zdGFsLmV4ZSB4eGQveHhkLmV4ZSBHdmltRXh0L2d2aW1leHQuZGxsCisKK0xJTkszMl9PQkpTPSBcCisJJChFWFRSQVMpIFwKKwkiJChJTlRESVIpL2J1ZmZlci5vYmoiIFwKKwkiJChJTlRESVIpL2NoYXJzZXQub2JqIiBcCisJIiQoSU5URElSKS9kaWZmLm9iaiIgXAorCSIkKElOVERJUikvZGlncmFwaC5vYmoiIFwKKwkiJChJTlRESVIpL2VkaXQub2JqIiBcCisJIiQoSU5URElSKS9ldmFsLm9iaiIgXAorCSIkKElOVERJUikvZXhfY21kcy5vYmoiIFwKKwkiJChJTlRESVIpL2V4X2NtZHMyLm9iaiIgXAorCSIkKElOVERJUikvZXhfZG9jbWQub2JqIiBcCisJIiQoSU5URElSKS9leF9ldmFsLm9iaiIgXAorCSIkKElOVERJUikvZXhfZ2V0bG4ub2JqIiBcCisJIiQoSU5URElSKS9maWxlaW8ub2JqIiBcCisJIiQoSU5URElSKS9mb2xkLm9iaiIgXAorCSIkKElOVERJUikvZ2V0Y2hhci5vYmoiIFwKKwkiJChJTlRESVIpL21haW4ub2JqIiBcCisJIiQoSU5URElSKS9tYXJrLm9iaiIgXAorCSIkKElOVERJUikvbWJ5dGUub2JqIiBcCisJIiQoSU5URElSKS9tZW1maWxlLm9iaiIgXAorCSIkKElOVERJUikvbWVtbGluZS5vYmoiIFwKKwkiJChJTlRESVIpL21lbnUub2JqIiBcCisJIiQoSU5URElSKS9tZXNzYWdlLm9iaiIgXAorCSIkKElOVERJUikvbWlzYzEub2JqIiBcCisJIiQoSU5URElSKS9taXNjMi5vYmoiIFwKKwkiJChJTlRESVIpL21vdmUub2JqIiBcCisJIiQoSU5URElSKS9ub3JtYWwub2JqIiBcCisJIiQoSU5URElSKS9vcHMub2JqIiBcCisJIiQoSU5URElSKS9vcHRpb24ub2JqIiBcCisJIiQoSU5URElSKS9vc19tc3dpbi5vYmoiIFwKKwkiJChJTlRESVIpL29zX3dpbjMyLm9iaiIgXAorCSIkKElOVERJUikvcXVpY2tmaXgub2JqIiBcCisJIiQoSU5URElSKS9yZWdleHAub2JqIiBcCisJIiQoSU5URElSKS9zY3JlZW4ub2JqIiBcCisJIiQoSU5URElSKS9zZWFyY2gub2JqIiBcCisJIiQoSU5URElSKS9zeW50YXgub2JqIiBcCisJIiQoSU5URElSKS90YWcub2JqIiBcCisJIiQoSU5URElSKS90ZXJtLm9iaiIgXAorCSIkKElOVERJUikvdWkub2JqIiBcCisJIiQoSU5URElSKS91bmRvLm9iaiIgXAorCSIkKElOVERJUikvdmVyc2lvbi5vYmoiIFwKKwkiJChJTlRESVIpL3dpbmRvdy5vYmoiCisKKyIuXCQoVklNKS5leGUiIDogIiQoSU5URElSKSIgJChFWFRSQVMpICQoTElOSzMyX09CSlMpCisJQGlmIGV4aXN0ICQoSU5URElSKVwkKFZJTSkucGRiIGRlbCAkKElOVERJUilcJChWSU0pLnBkYgorCSQoTElOSzMyKSAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKKworIiQoSU5URElSKSIgOgorCWlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCisKK0NMRUFOIDoKKwktQGlmIGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgJChERUxfVFJFRSkgIiQoSU5URElSKSIKKwktQGlmIGV4aXN0ICQoVklNKS5leGUgZXJhc2UgJChWSU0pLmV4ZQorCS1AaWYgZXhpc3QgJChWSU0pLmlsayBlcmFzZSAkKFZJTSkuaWxrCisJLUBpZiBleGlzdCAkKFZJTSkubWFwIGVyYXNlICQoVklNKS5tYXAKKwktQGlmIGV4aXN0ICQoVklNKS5wZGIgZXJhc2UgJChWSU0pLnBkYgorCS1AaWYgZXhpc3QgRExMREFUQS5DIGVyYXNlIERMTERBVEEuQworCS1AaWYgZXhpc3QgTWFrZV9pdmMuYmFrIGF0dHJpYiAtciBNYWtlX2l2Yy5iYWsKKwktQGlmIGV4aXN0IE1ha2VfaXZjLmJhayBlcmFzZSBNYWtlX2l2Yy5iYWsKKwktQGlmIGV4aXN0IE1ha2VfaXZjLmRzcCBlcmFzZSBNYWtlX2l2Yy5kc3AKKwktQGlmIGV4aXN0IE1ha2VfaXZjLmRzdyBlcmFzZSBNYWtlX2l2Yy5kc3cKKwktQGlmIGV4aXN0IE1ha2VfaXZjLm1kcCBlcmFzZSBNYWtlX2l2Yy5tZHAKKwktQGlmIGV4aXN0IE1ha2VfaXZjLm5jYiBlcmFzZSBNYWtlX2l2Yy5uY2IKKwktQGlmIGV4aXN0IE1ha2VfaXZjLm9wdCBlcmFzZSBNYWtlX2l2Yy5vcHQKKwktQGlmIGV4aXN0IE1ha2VfaXZjLnBsZyBlcmFzZSBNYWtlX2l2Yy5wbGcKKwktQGlmIGV4aXN0IGRvc2luc3Qub2JqIGVyYXNlIGRvc2luc3Qub2JqCisJLUBpZiBleGlzdCBpbnN0YWxsLmV4ZSBlcmFzZSBpbnN0YWxsLmV4ZQorCS1AaWYgZXhpc3QgdW5pbnN0YWwuZXhlIGVyYXNlIHVuaW5zdGFsLmV4ZQorCS1AaWYgZXhpc3QgdW5pbnN0YWwub2JqIGVyYXNlIHVuaW5zdGFsLm9iagorCS1AaWYgZXhpc3QgdmltcnVuLmV4ZSBlcmFzZSB2aW1ydW4uZXhlCisJLUBpZiBleGlzdCB2aW1ydW4ub2JqIGVyYXNlIHZpbXJ1bi5vYmoKKworCitpbnN0YWxsLmV4ZTogZG9zaW5zdC5jCisJJChDUFApIC9GZSRAIC9ub2xvZ28gL1czIC1ETkRFQlVHIC1EV0lOMzIgZG9zaW5zdC5jIGtlcm5lbDMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgYWR2YXBpMzIubGliIHV1aWQubGliCisKK3VuaW5zdGFsLmV4ZTogdW5pbnN0YWwuYworCSQoQ1BQKSAvbm9sb2dvIC9XMyAtRE5ERUJVRyAtRFdJTjMyIHVuaW5zdGFsLmMgc2hlbGwzMi5saWIgYWR2YXBpMzIubGliCisKK3ZpbXJ1bi5leGU6IHZpbXJ1bi5jCisJJChDUFApIC9ub2xvZ28gL1czIC1ETkRFQlVHIHZpbXJ1bi5jCisKK3h4ZC94eGQuZXhlOiB4eGQveHhkLmMKKwljZCB4eGQKKwkkKE1BS0UpIC9OT0xPR08gLWYgTWFrZV9tdmMubWFrCisJY2QgLi4KKworR3ZpbUV4dC9ndmltZXh0LmRsbDogR3ZpbUV4dC9ndmltZXh0LmNwcCBHdmltRXh0L2d2aW1leHQucmMgR3ZpbUV4dC9ndmltZXh0LmgKKwljZCBHdmltRXh0CisJJChNQUtFKSAvTk9MT0dPIC1mIE1ha2VmaWxlCisJY2QgLi4KKworey59LmN7JChJTlRESVIpL30ub2JqOgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkPAorCit7Ln0uY3BweyQoSU5URElSKS99Lm9iajoKKwkkKENQUCkgJChDUFBfUFJPSikgL0kgJChJTlRESVIpICQ8CisKK3sufS5yY3skKElOVERJUikvfS5yZXM6CisJJChSU0MpICQoUlNDX1BST0opICQ8CisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiVmltIC0gV2luMzIgUmVsZWFzZSBndmltIE9MRSIKKyMgTmFtZSAiVmltIC0gV2luMzIgRGVidWcgZ3ZpbSBPTEUiCisjIE5hbWUgIlZpbSAtIFdpbjMyIFJlbGVhc2UgZ3ZpbSIKKyMgTmFtZSAiVmltIC0gV2luMzIgRGVidWcgZ3ZpbSIKKyMgTmFtZSAiVmltIC0gV2luMzIgUmVsZWFzZSB2aW0iCisjIE5hbWUgIlZpbSAtIFdpbjMyIERlYnVnIHZpbSIKKworIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxidWZmZXIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cY2hhcnNldC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxkaWZmLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGRpZ3JhcGguYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cZWRpdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxldmFsLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGV4X2NtZHMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cZXhfY21kczIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cZXhfZG9jbWQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cZXhfZXZhbC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxleF9nZXRsbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxmaWxlaW8uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cZm9sZC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxnZXRjaGFyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGd1aS5jCisKKyFJRiAgICAgICIkKENGRykiID09ICJWaW0gLSBXaW4zMiBSZWxlYXNlIHZpbSIKKworIyBQUk9QIEV4Y2x1ZGVfRnJvbV9CdWlsZCAxCisKKyFFTFNFSUYgICIkKENGRykiID09ICJWaW0gLSBXaW4zMiBEZWJ1ZyB2aW0iCisKKyMgUFJPUCBFeGNsdWRlX0Zyb21fQnVpbGQgMQorCishRU5ESUYKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cZ3VpX3czMi5jCisKKyFJRiAgICAgICIkKENGRykiID09ICJWaW0gLSBXaW4zMiBSZWxlYXNlIHZpbSIKKworIyBQUk9QIEV4Y2x1ZGVfRnJvbV9CdWlsZCAxCisKKyFFTFNFSUYgICIkKENGRykiID09ICJWaW0gLSBXaW4zMiBEZWJ1ZyB2aW0iCisKKyMgUFJPUCBFeGNsdWRlX0Zyb21fQnVpbGQgMQorCishRU5ESUYKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cb3NfdzMyZXhlLmMKKworIUlGICAgICAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIFJlbGVhc2UgdmltIgorCisjIFBST1AgRXhjbHVkZV9Gcm9tX0J1aWxkIDEKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIERlYnVnIHZpbSIKKworIyBQUk9QIEV4Y2x1ZGVfRnJvbV9CdWlsZCAxCisKKyFFTkRJRgorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxpZl9vbGUuY3BwCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIFJlbGVhc2UgZ3ZpbSBPTEUiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkCisKKyIkKElOVERJUilcaWZfb2xlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoSU5URElSKVxpZl9vbGUuaCIKKyBjbC5leGUgL25vbG9nbyAvTVQgL1czIC9HWCAvSSAiLlxwcm90byIgL0QgIldJTjMyIiAvYyAvTzIgL0QgIk5ERUJVRyIgL0QgIkZFQVRfR1VJX1czMiIgL0QgIkZFQVRfT0xFIiAvRmQuXG9sZVJlbC8gL0ZvLlxvbGVSZWwvIC9JICIuXG9sZVJlbCIgLlxpZl9vbGUuY3BwCisgQHJlbSBUaGlzIGlzIHRoZSBkZWZhdWx0IHJ1bGUgd2l0aCAvSSAiJChJbnREaXIpIiBhZGRlZAorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIERlYnVnIGd2aW0gT0xFIgorCisjIFBST1AgSWdub3JlX0RlZmF1bHRfVG9vbCAxCisjIEJlZ2luIEN1c3RvbSBCdWlsZAorCisiJChJTlRESVIpXGlmX29sZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKElOVERJUilcaWZfb2xlLmgiCisgY2wuZXhlIC9ub2xvZ28gL01UIC9XMyAvR1ggL0kgIi5ccHJvdG8iIC9EICJXSU4zMiIgL2MgL1ppIC9PZCAvRCAiX0RFQlVHIiAvRCAiRkVBVF9HVUlfVzMyIiAvRCAiRkVBVF9PTEUiIC9GZC5cb2xlRGJnLyAvRm8uXG9sZURiZy8gL0kgIi5cb2xlRGJnIiAuXGlmX29sZS5jcHAKKyBAcmVtIFRoaXMgaXMgdGhlIGRlZmF1bHQgcnVsZSB3aXRoIC9JICIkKEludERpcikiIGFkZGVkCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAiVmltIC0gV2luMzIgUmVsZWFzZSBndmltIgorCisjIFBST1AgRXhjbHVkZV9Gcm9tX0J1aWxkIDEKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIERlYnVnIGd2aW0iCisKKyMgUFJPUCBFeGNsdWRlX0Zyb21fQnVpbGQgMQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiVmltIC0gV2luMzIgUmVsZWFzZSB2aW0iCisKKyMgUFJPUCBFeGNsdWRlX0Zyb21fQnVpbGQgMQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiVmltIC0gV2luMzIgRGVidWcgdmltIgorCisjIFBST1AgRXhjbHVkZV9Gcm9tX0J1aWxkIDEKKworIUVORElGCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGlmX29sZS5pZGwKKworIUlGICAiJChDRkcpIiA9PSAiVmltIC0gV2luMzIgUmVsZWFzZSBndmltIE9MRSIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorIyBCZWdpbiBDdXN0b20gQnVpbGQKKworIiQoSU5URElSKVxpZl9vbGUuaCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwlpZiBleGlzdCAuXGlmX29sZS5oIGRlbCAuXGlmX29sZS5oCisJbWlkbCAvb3V0IC5cb2xlUmVsIC9paWQgaWlkX29sZS5jIC90bGIgdmltLnRsYiAvcHJveHkgbnVsIC9oZWFkZXIgaWZfb2xlLmggLlxpZl9vbGUuaWRsCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRUxTRUlGICAiJChDRkcpIiA9PSAiVmltIC0gV2luMzIgRGVidWcgZ3ZpbSBPTEUiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkCisKKyIkKElOVERJUilcaWZfb2xlLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJaWYgZXhpc3QgLlxpZl9vbGUuaCBkZWwgLlxpZl9vbGUuaAorCW1pZGwgL291dCAuXG9sZURiZyAvaWlkIGlpZF9vbGUuYyAvdGxiIHZpbS50bGIgL3Byb3h5IG51bCAvaGVhZGVyIGlmX29sZS5oIC5caWZfb2xlLmlkbAorCisjIEVuZCBDdXN0b20gQnVpbGQKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIFJlbGVhc2UgZ3ZpbSIKKworIyBQUk9QIEV4Y2x1ZGVfRnJvbV9CdWlsZCAxCisKKyFFTFNFSUYgICIkKENGRykiID09ICJWaW0gLSBXaW4zMiBEZWJ1ZyBndmltIgorCisjIFBST1AgRXhjbHVkZV9Gcm9tX0J1aWxkIDEKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIFJlbGVhc2UgdmltIgorCisjIFBST1AgRXhjbHVkZV9Gcm9tX0J1aWxkIDEKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIERlYnVnIHZpbSIKKworIyBQUk9QIEV4Y2x1ZGVfRnJvbV9CdWlsZCAxCisKKyFFTkRJRgorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxtYWluLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXG1hcmsuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cbWJ5dGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cbWVtZmlsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxtZW1saW5lLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXG1lbnUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cbWVzc2FnZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxtaXNjMS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxtaXNjMi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llxtb3ZlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXG5vcm1hbC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxvcHMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cb3B0aW9uLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXG9zX21zd2luLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXG9zX3dpbjMyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHF1aWNrZml4LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHJlZ2V4cC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxzY3JlZW4uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cc2VhcmNoLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHN5bnRheC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx0YWcuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cdGVybS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx1aS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx1bmRvLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHZlcnNpb24uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cdmltLnJjCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIFJlbGVhc2UgZ3ZpbSBPTEUiCisKKyIkKElOVERJUilcdmltLnJlcyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoSU5URElSKVxpZl9vbGUuaCIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIERlYnVnIGd2aW0gT0xFIgorCisiJChJTlRESVIpXHZpbS5yZXMiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKElOVERJUilcaWZfb2xlLmgiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJWaW0gLSBXaW4zMiBSZWxlYXNlIGd2aW0iCisKKyIkKElOVERJUilcdmltLnJlcyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIERlYnVnIGd2aW0iCisKKyIkKElOVERJUilcdmltLnJlcyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIFJlbGVhc2UgdmltIgorCisjIFBST1AgRXhjbHVkZV9Gcm9tX0J1aWxkIDEKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlZpbSAtIFdpbjMyIERlYnVnIHZpbSIKKworIyBQUk9QIEV4Y2x1ZGVfRnJvbV9CdWlsZCAxCisKKyFFTkRJRgorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx3aW5kb3cuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvc3JjL01ha2VfbWFueC5tYWsgYi9zcmMvTWFrZV9tYW54Lm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2MwNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL01ha2VfbWFueC5tYWsKQEAgLTAsMCArMSwzMjIgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFZJTSBvbiB0aGUgQW1pZ2EsIHVzaW5nIEF6dGVjL01hbnggQyA1LjAgb3IgbGF0ZXIKKyMKKyMgTm90ZTogTm90IGFsbCBkZXBlbmRlbmNpZXMgYXJlIGluY2x1ZGVkLiBUaGlzIHdhcyBkb25lIHRvIGF2b2lkIGhhdmluZworIwl0byBjb21waWxlIGV2ZXJ5dGhpbmcgd2hlbiBhIGdsb2JhbCB2YXJpYWJsZSBvciBmdW5jdGlvbiBpcyBhZGRlZC4KKyMJQ2FyZWZ1bCB3aGVuIGNoYW5naW5nIGEgZ2xvYmFsIHN0cnVjdCBvciB2YXJpYWJsZSEKKyMKKworIz4+Pj4+IGNob29zZSBvcHRpb25zOgorCisjIyMgU2VlIGZlYXR1cmUuaCBmb3IgYSBsaXN0IG9mIG9wdGlvbmFscy4KKyMjIyBBbnkgb3RoZXIgZGVmaW5lcyBjYW4gYmUgaW5jbHVkZWQgaGVyZS4KK0RFRklORVMgPQorCisjPj4+Pj4gaWYgSEFWRV9UR0VURU5UIGlzIGRlZmluZWQgb2JqL3Rlcm1saWIubyBoYXMgdG8gYmUgdXNlZAorI1RFUk1MSUIgPSBvYmovdGVybWxpYi5vCitURVJNTElCID0KKworIz4+Pj4+IGNob29zZSBiZXR3ZWVuIGRlYnVnZ2luZyAoLWJzKSBvciBvcHRpbWl6aW5nICgtc28pCitPUFRJT05TID0gLXNvCisjT1BUSU9OUyA9IC1icworCisjPj4+Pj4gZW5kIG9mIGNob2ljZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitDRkxBR1MgPSAkKE9QVElPTlMpIC13YXBydXEgLXBzIC1xZiAtSXByb3RvICQoREVGSU5FUykgLURBTUlHQQorCitMSUJTID0gLWxjMTYKK1NZTVMgPSB2aW0uc3ltcworQ0MgPSBjYworTE4gPSBsbgorTE5GTEFHUyA9ICtxCitTSEVMTCA9IGNzaAorUkVOID0gJChTSEVMTCkgLWMgbXYgLWYKK0RFTCA9ICQoU0hFTEwpIC1jIHJtIC1mCisKK1NSQyA9CWJ1ZmZlci5jIFwKKwljaGFyc2V0LmMgXAorCWRpZmYuYyBcCisJZGlncmFwaC5jIFwKKwllZGl0LmMgXAorCWV2YWwuYyBcCisJZXhfY21kcy5jIFwKKwlleF9jbWRzMi5jIFwKKwlleF9kb2NtZC5jIFwKKwlleF9ldmFsLmMgXAorCWV4X2dldGxuLmMgXAorCWZpbGVpby5jIFwKKwlmb2xkLmMgXAorCWdldGNoYXIuYyBcCisJbWFpbi5jIFwKKwltYXJrLmMgXAorCW1lbWZpbGUuYyBcCisJbWVtbGluZS5jIFwKKwltZW51LmMgXAorCW1lc3NhZ2UuYyBcCisJbWlzYzEuYyBcCisJbWlzYzIuYyBcCisJbW92ZS5jIFwKKwltYnl0ZS5jIFwKKwlub3JtYWwuYyBcCisJb3BzLmMgXAorCW9wdGlvbi5jIFwKKwlvc19hbWlnYS5jIFwKKwlxdWlja2ZpeC5jIFwKKwlyZWdleHAuYyBcCisJc2NyZWVuLmMgXAorCXNlYXJjaC5jIFwKKwlzeW50YXguYyBcCisJdGFnLmMgXAorCXRlcm0uYyBcCisJdWkuYyBcCisJdW5kby5jIFwKKwl3aW5kb3cuYyBcCisJdmVyc2lvbi5jCisKK0lOQ0wgPSB2aW0uaCBmZWF0dXJlLmgga2V5bWFwLmggbWFjcm9zLmggYXNjaWkuaCB0ZXJtLmggc3RydWN0cy5oIG9zX2FtaWdhLmgKKworT0JKID0Jb2JqL2J1ZmZlci5vIFwKKwlvYmovY2hhcnNldC5vIFwKKwlvYmovZGlmZi5vIFwKKwlvYmovZGlncmFwaC5vIFwKKwlvYmovZWRpdC5vIFwKKwlvYmovZXZhbC5vIFwKKwlvYmovZXhfY21kcy5vIFwKKwlvYmovZXhfY21kczIubyBcCisJb2JqL2V4X2RvY21kLm8gXAorCW9iai9leF9ldmFsLm8gXAorCW9iai9leF9nZXRsbi5vIFwKKwlvYmovZmlsZWlvLm8gXAorCW9iai9mb2xkLm8gXAorCW9iai9nZXRjaGFyLm8gXAorCW9iai9tYWluLm8gXAorCW9iai9tYXJrLm8gXAorCW9iai9tZW1maWxlLm8gXAorCW9iai9tZW1saW5lLm8gXAorCW9iai9tZW51Lm8gXAorCW9iai9tZXNzYWdlLm8gXAorCW9iai9taXNjMS5vIFwKKwlvYmovbWlzYzIubyBcCisJb2JqL21vdmUubyBcCisJb2JqL21ieXRlLm8gXAorCW9iai9ub3JtYWwubyBcCisJb2JqL29wcy5vIFwKKwlvYmovb3B0aW9uLm8gXAorCW9iai9vc19hbWlnYS5vIFwKKwlvYmovcXVpY2tmaXgubyBcCisJb2JqL3JlZ2V4cC5vIFwKKwlvYmovc2NyZWVuLm8gXAorCW9iai9zZWFyY2gubyBcCisJb2JqL3N5bnRheC5vIFwKKwlvYmovdGFnLm8gXAorCW9iai90ZXJtLm8gXAorCW9iai91aS5vIFwKKwlvYmovdW5kby5vIFwKKwlvYmovd2luZG93Lm8gXAorCSQoVEVSTUxJQikKKworUFJPID0JcHJvdG8vYnVmZmVyLnBybyBcCisJcHJvdG8vY2hhcnNldC5wcm8gXAorCXByb3RvL2RpZmYucHJvIFwKKwlwcm90by9kaWdyYXBoLnBybyBcCisJcHJvdG8vZWRpdC5wcm8gXAorCXByb3RvL2V2YWwucHJvIFwKKwlwcm90by9leF9jbWRzLnBybyBcCisJcHJvdG8vZXhfY21kczIucHJvIFwKKwlwcm90by9leF9kb2NtZC5wcm8gXAorCXByb3RvL2V4X2V2YWwucHJvIFwKKwlwcm90by9leF9nZXRsbi5wcm8gXAorCXByb3RvL2ZpbGVpby5wcm8gXAorCXByb3RvL2ZvbGQucHJvIFwKKwlwcm90by9nZXRjaGFyLnBybyBcCisJcHJvdG8vbWFpbi5wcm8gXAorCXByb3RvL21hcmsucHJvIFwKKwlwcm90by9tZW1maWxlLnBybyBcCisJcHJvdG8vbWVtbGluZS5wcm8gXAorCXByb3RvL21lbnUucHJvIFwKKwlwcm90by9tZXNzYWdlLnBybyBcCisJcHJvdG8vbWlzYzEucHJvIFwKKwlwcm90by9taXNjMi5wcm8gXAorCXByb3RvL21vdmUucHJvIFwKKwlwcm90by9tYnl0ZS5wcm8gXAorCXByb3RvL25vcm1hbC5wcm8gXAorCXByb3RvL29wcy5wcm8gXAorCXByb3RvL29wdGlvbi5wcm8gXAorCXByb3RvL29zX2FtaWdhLnBybyBcCisJcHJvdG8vcXVpY2tmaXgucHJvIFwKKwlwcm90by9yZWdleHAucHJvIFwKKwlwcm90by9zY3JlZW4ucHJvIFwKKwlwcm90by9zZWFyY2gucHJvIFwKKwlwcm90by9zeW50YXgucHJvIFwKKwlwcm90by90YWcucHJvIFwKKwlwcm90by90ZXJtLnBybyBcCisJcHJvdG8vdGVybWxpYi5wcm8gXAorCXByb3RvL3VpLnBybyBcCisJcHJvdG8vdW5kby5wcm8gXAorCXByb3RvL3dpbmRvdy5wcm8KKworYWxsOiBWaW0geHhkL1h4ZAorCitWaW06IG9iaiAkKE9CSikgdmVyc2lvbi5jIHZlcnNpb24uaAorCSQoQ0MpICQoQ0ZMQUdTKSB2ZXJzaW9uLmMgLW8gb2JqL3ZlcnNpb24ubworCSQoTE4pICQoTE5GTEFHUykgLW0gLW8gVmltICQoT0JKKSBvYmovdmVyc2lvbi5vICQoTElCUykKKworZGVidWc6IG9iaiAkKE9CSikgdmVyc2lvbi5jIHZlcnNpb24uaAorCSQoQ0MpICQoQ0ZMQUdTKSB2ZXJzaW9uLmMgLW8gb2JqL3ZlcnNpb24ubworCSQoTE4pICQoTE5GTEFHUykgLW0gLWcgLW8gVmltICQoT0JKKSBvYmovdmVyc2lvbi5vICQoTElCUykKKworeHhkL1h4ZDogeHhkL3h4ZC5jCisJJChTSEVMTCkgLWMgY2QgeHhkOyBtYWtlIC1mIE1ha2VfYW1pZ2EubWFrOyBjZCAuLgorCisjIE1ha2luZyBwcm90b3R5cGVzIHdpdGggTWFueCBoYXMgYmVlbiByZW1vdmVkLCBiZWNhdXNlIGl0IGNhdXNlZCB0b28gbWFueQorIyBwcm9ibGVtcy4KKyNwcm90bzogJChTWU1TKSAkKFBSTykKKworb2JqOgorCW1ha2VkaXIgb2JqCisKK3RhZ3M6ICQoU1JDKSAkKElOQ0wpCisJJChTSEVMTCkgLWMgY3RhZ3MgJChTUkMpICouaAorCisjIGNhbid0IHVzZSBkZWxldGUgaGVyZSwgdG9vIG1hbnkgZmlsZSBuYW1lcworY2xlYW46CisJJChERUwpICQoT0JKKSBvYmovdmVyc2lvbi5vIFwKKwkJb2JqL3Rlcm1saWIubyBWaW0gJChTWU1TKSB4eGQvWHhkCisKK3Rlc3Q6CisJJChTSEVMTCkgLWMgY2QgdGVzdGRpcjsgbWFrZSAtZiBNYWtlX2FtaWdhLm1hazsgY2QgLi4KKworJChTWU1TKTogJChJTkNMKSAkKFBSTykKKwkkKENDKSAkKENGTEFHUykgLWhvJChTWU1TKSB2aW0uaAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBVbmZvcnR1bmF0ZWx5LCBNYW54J3MgbWFrZSBkb2Vzbid0IHVuZGVyc3RhbmQgYSAuYy5vIHJ1bGUsIHNvIGVhY2gKKyMgY29tcGlsYXRpb24gY29tbWFuZCBoYXMgdG8gYmUgZ2l2ZW4gZXhwbGljaXRseS4KKworQ0NTWU0gPSAkKENDKSAkKENGTEFHUykgLWhpJChTWU1TKSAtbworQ0NOT1NZTSA9ICQoQ0MpICQoQ0ZMQUdTKSAtbworCiskKE9CSik6ICQoU1lNUykKKworb2JqL2J1ZmZlci5vOglidWZmZXIuYworCSQoQ0NTWU0pICRAIGJ1ZmZlci5jCisKK29iai9jaGFyc2V0Lm86CWNoYXJzZXQuYworCSQoQ0NTWU0pICRAIGNoYXJzZXQuYworCitvYmovZGlmZi5vOglkaWZmLmMKKwkkKENDU1lNKSAkQCBkaWZmLmMKKworb2JqL2RpZ3JhcGgubzoJZGlncmFwaC5jCisJJChDQ1NZTSkgJEAgZGlncmFwaC5jCisKK29iai9lZGl0Lm86CWVkaXQuYworCSQoQ0NTWU0pICRAIGVkaXQuYworCitvYmovZXZhbC5vOglldmFsLmMKKwkkKENDU1lNKSAkQCBldmFsLmMKKworb2JqL2V4X2NtZHMubzoJZXhfY21kcy5jCisJJChDQ1NZTSkgJEAgZXhfY21kcy5jCisKK29iai9leF9jbWRzMi5vOglleF9jbWRzMi5jCisJJChDQ1NZTSkgJEAgZXhfY21kczIuYworCisjIERvbid0IHVzZSAkKFNZTVMpIGhlcmUsIGJlY2F1c2UgZXhfZG9jbWQuYyBkZWZpbmVzIERPX0RFQ0xBUkVfRVhDTUQKK29iai9leF9kb2NtZC5vOglleF9kb2NtZC5jIGV4X2NtZHMuaAorCSQoQ0NOT1NZTSkgJEAgZXhfZG9jbWQuYworCitvYmovZXhfZXZhbC5vOglleF9ldmFsLmMgZXhfY21kcy5oCisJJChDQ1NZTSkgJEAgZXhfZXZhbC5jCisKK29iai9leF9nZXRsbi5vOglleF9nZXRsbi5jCisJJChDQ1NZTSkgJEAgZXhfZ2V0bG4uYworCitvYmovZmlsZWlvLm86CWZpbGVpby5jCisJJChDQ1NZTSkgJEAgZmlsZWlvLmMKKworb2JqL2ZvbGQubzoJZm9sZC5jCisJJChDQ1NZTSkgJEAgZm9sZC5jCisKK29iai9nZXRjaGFyLm86CWdldGNoYXIuYworCSQoQ0NTWU0pICRAIGdldGNoYXIuYworCisjIERvbid0IHVzZSAkKFNZTVMpIGhlcmUsIGJlY2F1c2UgbWFpbi5jIGRlZmluZXMgRVhURVJOCitvYmovbWFpbi5vOgltYWluLmMgb3B0aW9uLmggZ2xvYmFscy5oCisJJChDQ05PU1lNKSAkQCBtYWluLmMKKworb2JqL21hcmsubzoJbWFyay5jCisJJChDQ1NZTSkgJEAgbWFyay5jCisKK29iai9tZW1maWxlLm86CW1lbWZpbGUuYworCSQoQ0NTWU0pICRAIG1lbWZpbGUuYworCitvYmovbWVtbGluZS5vOgltZW1saW5lLmMKKwkkKENDU1lNKSAkQCBtZW1saW5lLmMKKworb2JqL21lbnUubzoJbWVudS5jCisJJChDQ1NZTSkgJEAgbWVudS5jCisKKyMgRG9uJ3QgdXNlICQoU1lNUykgaGVyZSwgYmVjYXVzZSBtZXNzYWdlLmMgZGVmaW5lcyBNRVNTQUdFX0ZJTEUKK29iai9tZXNzYWdlLm86CW1lc3NhZ2UuYworCSQoQ0NOT1NZTSkgJEAgbWVzc2FnZS5jCisKK29iai9taXNjMS5vOgltaXNjMS5jCisJJChDQ1NZTSkgJEAgbWlzYzEuYworCitvYmovbWlzYzIubzoJbWlzYzIuYworCSQoQ0NTWU0pICRAIG1pc2MyLmMKKworb2JqL21vdmUubzoJbW92ZS5jCisJJChDQ1NZTSkgJEAgbW92ZS5jCisKK29iai9tYnl0ZS5vOiBtYnl0ZS5jCisJJChDQ1NZTSkgJEAgbWJ5dGUuYworCitvYmovbm9ybWFsLm86CW5vcm1hbC5jCisJJChDQ1NZTSkgJEAgbm9ybWFsLmMKKworb2JqL29wcy5vOglvcHMuYworCSQoQ0NTWU0pICRAIG9wcy5jCisKKyMgRG9uJ3QgdXNlICQoU1lNUykgaGVyZSwgYmVjYXVzZSBvcHRpb24uaCBkZWZpbmVzIHZhcmlhYmxlcyBoZXJlCitvYmovb3B0aW9uLm86CW9wdGlvbi5jCisJJChDQ05PU1lNKSAkQCBvcHRpb24uYworCitvYmovb3NfYW1pZ2EubzoJb3NfYW1pZ2EuYworCSQoQ0NTWU0pICRAIG9zX2FtaWdhLmMKKworb2JqL3F1aWNrZml4Lm86CXF1aWNrZml4LmMKKwkkKENDU1lNKSAkQCBxdWlja2ZpeC5jCisKK29iai9yZWdleHAubzoJcmVnZXhwLmMKKwkkKENDU1lNKSAkQCByZWdleHAuYworCitvYmovc2NyZWVuLm86CXNjcmVlbi5jCisJJChDQ1NZTSkgJEAgc2NyZWVuLmMKKworb2JqL3NlYXJjaC5vOglzZWFyY2guYworCSQoQ0NTWU0pICRAIHNlYXJjaC5jCisKK29iai9zeW50YXgubzoJc3ludGF4LmMKKwkkKENDU1lNKSAkQCBzeW50YXguYworCitvYmovdGFnLm86CXRhZy5jCisJJChDQ1NZTSkgJEAgdGFnLmMKKworb2JqL3Rlcm0ubzoJdGVybS5jIHRlcm0uaAorCSQoQ0NTWU0pICRAIHRlcm0uYworCitvYmovdGVybWxpYi5vOgl0ZXJtbGliLmMKKwkkKENDU1lNKSAkQCB0ZXJtbGliLmMKKworb2JqL3VpLm86CXVpLmMKKwkkKENDU1lNKSAkQCB1aS5jCisKK29iai91bmRvLm86CXVuZG8uYworCSQoQ0NTWU0pICRAIHVuZG8uYworCitvYmovd2luZG93Lm86CXdpbmRvdy5jCisJJChDQ1NZTSkgJEAgd2luZG93LmMKZGlmZiAtLWdpdCBhL3NyYy9NYWtlX21pbmcubWFrIGIvc3JjL01ha2VfbWluZy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3ODA2MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlX21pbmcubWFrCkBAIC0wLDAgKzEsNTU1IEBACisjIE1ha2VmaWxlIGZvciBWSU0gb24gV2luMzIsIHVzaW5nICdFR0NTL21pbmd3MzIgMS4xLjInLgorIyBJbmZvIGF0IGh0dHA6Ly93d3cubWluZ3cub3JnCisjIEFsc28gcmVxdWlyZXMgJ0dOVSBtYWtlIDMuNzcnLCB3aGljaCB5b3UgY2FuIGdldCB0aHJvdWdoIGEgbGluaworIyB0byAnSmFuSmFhcCdzIHBhZ2UgZnJvbSB0aGUgYWJvdmUgcGFnZS4KKyMgR2V0IG1pc3NpbmcgbGlicmFyaWVzIGZyb20gaHR0cDovL2dudXdpbjMyLnNmLm5ldC4KKyMKKyMgVGVzdGVkIG9uIFdpbjMyIE5UIDQgYW5kIFdpbjk1LgorIworIyBUbyBtYWtlIGV2ZXJ5dGhpbmcsIGp1c3QgJ21ha2UgLWYgTWFrZV9taW5nLm1haycKKyMgVG8gbWFrZSBqdXN0IGUuZy4gZ3ZpbS5leGUsICdtYWtlIC1mIE1ha2VfbWluZy5tYWsgZ3ZpbS5leGUnCisjIEFmdGVyIGEgcnVuLCB5b3UgY2FuICdtYWtlIC1mIE1ha2VfbWluZy5tYWsgY2xlYW4nIHRvIGNsZWFuIHVwCisjCisjIE5PVEU6IFNvbWV0aW1lcyAnR05VIE1ha2UnIHdpbGwgc3RvcCBhZnRlciBidWlsZGluZyB2aW1ydW4uZXhlIC0tIEkgdGhpbmsKKyMgaXQncyBqdXN0IHJ1biBvdXQgb2YgbWVtb3J5IG9yIHNvbWV0aGluZy4gIFJ1biBhZ2FpbiwgYW5kIGl0IHdpbGwgY29udGludWUKKyMgd2l0aCAneHhkJy4KKyMKKyMgIm1ha2UgdXB4IiBtYWtlcyAqY29tcHJlc3NlZCogdmVyc2lvbnMgb2YgdGhlIEdVSSBhbmQgY29uc29sZSBFWEVzLCB1c2luZyB0aGUKKyMgZXhjZWxsZW50IFVQWCBjb21wcmVzc29yOgorIyAgICAgaHR0cDovL3VweC5zb3VyY2Vmb3JnZS5uZXQvCisjCisjIE1haW50YWluZWQgYnkgUm9uIEFhcm9uIDxyb25haGFyb25AeWFob28uY29tPgorIyB1cGRhdGVkIDIwMDMgSmFuIDIwCisKKyM+Pj4+PiBjaG9vc2Ugb3B0aW9uczoKKyMgc2V0IHRvIHllcyBmb3IgYSBkZWJ1ZyBidWlsZAorREVCVUc9bm8KKyMgc2V0IHRvIFNJWkUgZm9yIHNpemUsIFNQRUVEIGZvciBzcGVlZCwgTUFYU1BFRUQgZm9yIG1heGltaXVtIG9wdGltaXphdGlvbgorT1BUSU1JWkU9TUFYU1BFRUQKKyMgc2V0IHRvIHllcyB0byBtYWtlIGd2aW0sIG5vIGZvciB2aW0KK0dVST15ZXMKKyMgRkVBVFVSRVM9W1RJTlkgfCBTTUFMTCAgfCBOT1JNQUwgfCBCSUcgfCBIVUdFXQorIyBzZXQgdG8gVElOWSB0byBtYWtlIG1pbmltYWwgdmVyc2lvbiAoZmV3IGZlYXR1cmVzKQorRkVBVFVSRVM9QklHCisjIHNldCB0byBvbmUgb2YgaTM4NiwgaTQ4NiwgaTU4NiwgaTY4NiBhcyB0aGUgKnRhcmdldCogcHJvY2Vzc29yCitDUFVOUj1pNjg2CisjIHNldCB0byBzYW1lIGNob2ljZXMgYXMgJ0NQVU5SJywgYnV0IHdpbGwgcHJldmVudCBydW5uaW5nIG9uICdsb3dlcicgY3B1czoKK0FSQ0g9aTM4NgorIyBzZXQgdG8geWVzIHRvIGNyb3NzLWNvbXBpbGUgZnJvbSB1bml4OyBubz1uYXRpdmUgV2luZG93cworQ1JPU1M9bm8KKyMgc2V0IHRvIHBhdGggdG8gaWNvbnYuaCBhbmQgbGliaWNvbnYuYSB0byBlbmFibGUgdXNpbmcgJ2ljb252LmRsbCcKKyNJQ09OVj0iLiIKK0lDT05WPXllcworR0VUVEVYVD15ZXMKKyMgc2V0IHRvIHllcyB0byBpbmNsdWRlIG11bHRpYnl0ZSBzdXBwb3J0CitNQllURT15ZXMKKyMgc2V0IHRvIHllcyB0byBpbmNsdWRlIElNRSBzdXBwb3J0CitJTUU9eWVzCitEWU5BTUlDX0lNRT15ZXMKKyMgc2V0IHRvIHllcyB0byBlbmFibGUgd3JpdGluZyBhIHBvc3RzY3JpcHQgZmlsZSB3aXRoIDpoYXJkY29weQorUE9TVFNDUklQVD1ubworIyBzZXQgdG8geWVzIHRvIGVuYWJsZSBPTEUgc3VwcG9ydAorT0xFPW5vCisjIFNldCB0aGUgZGVmYXVsdCAkKFdJTlZFUikgdG8gbWFrZSBpdCB3b3JrIHdpdGggcHJlLVdpbjJrCitXSU5WRVIgPSAweDA0MDAKKyMgU2V0IHRvIHllcyB0byBlbmFibGUgQ3Njb3BlIHN1cHBvcnQKK0NTQ09QRT15ZXMKKyMgU2V0IHRvIHllcyB0byBlbmFibGUgTmV0YmVhbnMgc3VwcG9ydAorTkVUQkVBTlM9JChHVUkpCisKKworIyBJZiB0aGUgdXNlciBkb2Vzbid0IHdhbnQgZ2V0dGV4dCwgdW5kZWZpbmUgaXQuCitpZmVxIChubywgJChHRVRURVhUKSkKK0dFVFRFWFQ9CitlbmRpZgorIyBBZGRlZCBieSBFLkYuIEFtYXRyaWEgPGVmZXJuYTFAcGxhdGVhLnB0aWMubWVjLmVzPiAyMDAxIEZlYiAyMworIyBVbmNvbW1lbnQgdGhlIGZpcnN0IGxpbmUgYW5kIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRocmVlIGlmIHlvdSB3YW50IE5hdGl2ZSBMYW5ndWFnZQorIyBTdXBwb3J0LiAgWW91J2xsIG5lZWQgZ251X2dldHRleHQud2luMzIsIGEgTUlOR1czMiBXaW5kb3dzIFBPUlQgb2YgZ2V0dGV4dCBieQorIyBGcmFuY28gQmV6IDxmcmFuY28uYmV6QGdteC5kZT4uICBJdCBtYXkgYmUgZm91bmQgYXQKKyMgaHR0cDovL2hvbWUuYS1jaXR5LmRlL2ZyYW5jby5iZXovZ2V0dGV4dC9nZXR0ZXh0X3dpbjMyX2VuLmh0bWwKKyMgVGVzdGVkIHdpdGggbWluZ3czMiB3aXRoIEdDQy0yLjk1LjIgb24gV2luOTgKKyMgVXBkYXRlZCAyMDAxIEp1biA5CisjR0VUVEVYVD1jOi9nZXR0ZXh0LndpbjMyLm1zdmNydAorI1NUQVRJQ19HRVRURVhUPVVTRV9TVEFUSUNfR0VUVEVYVAorI0RZTkFNSUNfR0VUVEVYVD1VU0VfR0VUVEVYVF9ETEwKKyNEWU5BTUlDX0dFVFRFWFQ9VVNFX1NBRkVfR0VUVEVYVF9ETEwKK1NBRkVfR0VUVEVYVF9ETExfT0JKID0gJChHRVRURVhUKS9zcmMvc2FmZV9nZXR0ZXh0X2RsbC9zYWZlX2dldHRleHRfZGxsLm8KKyMgQWx0ZXJuYXRpdmVseSwgaWYgeW91IHVuY29tbWVudCB0aGUgdHdvIGZvbGxvd2luZyBsaW5lcywgeW91IGdldCBhICJzYWZlIiB2ZXJzaW9uCisjIHdpdGhvdXQgbGlua2luZyB0aGUgc2FmZV9nZXR0ZXh0X2RsbC5vIG9iamVjdCBmaWxlLgorI0RZTkFNSUNfR0VUVEVYVD1EWU5BTUlDX0dFVFRFWFQKKyNHRVRURVhUX0RZTkFNSUM9Z251X2dldHRleHQuZGxsCitJTlRMUEFUSD0kKEdFVFRFWFQpL2xpYi9taW5ndzMyCitJTlRMTElCPWdudV9nZXR0ZXh0CisKKyMgSWYgeW91IGFyZSB1c2luZyBnZXR0ZXh0LTAuMTAuMzUgZnJvbSBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dldHRleHQKKyMgb3IgZ2V0dGV4dC0wLjEwLjM3IGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9taW5nd3JlcC8KKyMgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcsIGJ1dCBJIGNhbid0IGJ1aWxkIGEgc3RhdGljIHZlcnNp824gd2l0aCB0aGVtLCA/LSh8CisjR0VUVEVYVD1jOi9nZXR0ZXh0LTAuMTAuMzctMjAwMTA0MzAKKyNTVEFUSUNfR0VUVEVYVD1VU0VfU1RBVElDX0dFVFRFWFQKKyNEWU5BTUlDX0dFVFRFWFQ9RFlOQU1JQ19HRVRURVhUCisjSU5UTFBBVEg9JChHRVRURVhUKS9saWIKKyNJTlRMTElCPWludGwKKworIyB1bmNvbW1lbnQgJ1BFUkwnIGlmIHlvdSB3YW50IGEgcGVybC1lbmFibGVkIHZlcnNpb24KKyNQRVJMPUM6L3BlcmwKK2lmZGVmIFBFUkwKK2lmbmRlZiBQRVJMX1ZFUgorUEVSTF9WRVI9NTYKK2VuZGlmCitpZm5kZWYgRFlOQU1JQ19QRVJMCitEWU5BTUlDX1BFUkw9eWVzCitlbmRpZgorIyBvbiBMaW51eCwgZm9yIGNyb3NzLWNvbXBpbGUsIGl0J3MgaGVyZToKKyNQRVJMTElCPS9ob21lL3Jvbi9BY3RpdmVQZXJsL2xpYgorIyBvbiBOVCwgaXQncyBoZXJlOgorUEVSTExJQj0kKFBFUkwpL2xpYgorUEVSTExJQlM9JChQRVJMTElCKS9Db3JlCitlbmRpZgorCisjIFB5dGhvbiBzdXBwb3J0IC0tIHdvcmtzIHdpdGggdGhlIEFjdGl2ZVN0YXRlIHB5dGhvbiAyLjAgcmVsZWFzZSAoYW5kIG90aGVycworIyB0b28sIHByb2JhYmx5KQorIworIyB1bmNvbW1lbnQgJ1BZVEhPTicgdG8gbWFrZSBweXRob24tZW5hYmxlZCB2ZXJzaW9uCisjIFB1dCB0aGUgcGF0aCB0byB0aGUgcHl0aG9uIGRpc3RybyBoZXJlLiAgSWYgY3Jvc3MgY29tcGlsaW5nIGZyb20gTGludXgsIHlvdQorIyB3aWxsIGFsc28gbmVlZCB0byBjb252ZXJ0IHRoZSBoZWFkZXIgZmlsZXMgdG8gdW5peCBpbnN0ZWFkIG9mIGRvcyBmb3JtYXQ6CisjICAgZm9yIGZpbCBpbiAqLmggOyBkbyB2aW0gLWUgLWMgJ3NldCBmZj11bml4fHd8cScgJGZpbAorIyBhbmQgYWxzbywgeW91IHdpbGwgbmVlZCB0byBtYWtlIGEgbWluZ3czMiAnbGlicHl0aG9uMjAuYScgdG8gbGluayB3aXRoOgorIyAgIGNkICRQWVRIT04vbGlicworIyAgIHBleHBvcnRzIHB5dGhvbjIwLmRsbCA+IHB5dGhvbjIwLmRlZgorIyAgIGRsbHRvb2wgLWQgcHl0aG9uMjAuZGVmIC1sIGxpYnB5dGhvbjIwLmEKKyMgb24gbXkgTGludXggYm94LCBJIHB1dCB0aGUgUHl0aG9uIHN0dWZmIGhlcmU6CisjUFlUSE9OPS9ob21lL3Jvbi9BY3RpdmVQeXRob24tMi4wLjAtMjAyL3NyYy9Db3JlCisjIG9uIG15IE5UIGJveCwgaXQncyBoZXJlOgorI1BZVEhPTj1jOi9weXRob24yMAorCitpZmRlZiBQWVRIT04KK2lmbmRlZiBEWU5BTUlDX1BZVEhPTgorRFlOQU1JQ19QWVRIT049eWVzCitlbmRpZgorCitpZm5kZWYgUFlUSE9OX1ZFUgorUFlUSE9OX1ZFUj0yMgorZW5kaWYKKworaWZlcSAobm8sJChEWU5BTUlDX1BZVEhPTikpCitQWVRIT05MSUI9LUwkKFBZVEhPTikvbGlicyAtbHB5dGhvbiQoUFlUSE9OX1ZFUikKK2VuZGlmCisjIG15IGluY2x1ZGUgZmlsZXMgYXJlIGluICd3aW4zMmluYycgb24gTGludXgsIGFuZCAnaW5jbHVkZScgaW4gdGhlIHN0YW5kYXJkCisjIE5UIGRpc3RybyAoQWN0aXZlU3RhdGUpCitpZmVxICgkKENST1NTKSxubykKK1BZVEhPTklOQz0tSSAkKFBZVEhPTikvaW5jbHVkZQorZWxzZQorUFlUSE9OSU5DPS1JICQoUFlUSE9OKS93aW4zMmluYworZW5kaWYKK2VuZGlmCisKKyMJVENMIGludGVyZmFjZToKKyMJICBUQ0w9W1BhdGggdG8gVENMIGRpcmVjdG9yeV0KKyMJICBEWU5BTUlDX1RDTD15ZXMgKHRvIGxvYWQgdGhlIFRDTCBETEwgZHluYW1pY2FsbHkpCisjCSAgVENMX1ZFUj1bVENMIHZlcnNpb24sIGVnIDgzLCA4NF0gKGRlZmF1bHQgaXMgODMpCisjVENMPWM6L3RjbAoraWZkZWYgVENMCitpZm5kZWYgRFlOQU1JQ19UQ0wKK0RZTkFNSUNfVENMPXllcworZW5kaWYKK2lmbmRlZiBUQ0xfVkVSCitUQ0xfVkVSID0gODMKK2VuZGlmCitUQ0xJTkMgKz0gLUkkKFRDTCkvaW5jbHVkZQorZW5kaWYKKworCisjCVJ1YnkgaW50ZXJmYWNlOgorIwkgIFJVQlk9W1BhdGggdG8gUnVieSBkaXJlY3RvcnldCisjCSAgRFlOQU1JQ19SVUJZPXllcyAodG8gbG9hZCB0aGUgUnVieSBETEwgZHluYW1pY2FsbHkpCisjCSAgUlVCWV9WRVI9W1J1YnkgdmVyc2lvbiwgZWcgMTYsIDE3XSAoZGVmYXVsdCBpcyAxNikKKyMJICBSVUJZX1ZFUl9MT05HPVtSdWJ5IHZlcnNpb24sIGVnIDEuNiwgMS43XSAoZGVmYXVsdCBpcyAxLjYpCisjCSAgICBZb3UgbXVzdCBzZXQgUlVCWV9WRVJfTE9ORyB3aGVuIGNoYW5nZSBSVUJZX1ZFUi4KKyNSVUJZPWM6L3J1YnkKK2lmZGVmIFJVQlkKK2lmbmRlZiBEWU5BTUlDX1JVQlkKK0RZTkFNSUNfUlVCWT15ZXMKK2VuZGlmCisjICBTZXQgZGVmYXVsdCB2YWx1ZQoraWZuZGVmIFJVQllfVkVSCitSVUJZX1ZFUiA9IDE2CitlbmRpZgoraWZuZGVmIFJVQllfVkVSX0xPTkcKK1JVQllfVkVSX0xPTkcgPSAxLjYKK2VuZGlmCisKK2lmZXEgKCQoUlVCWV9WRVIpLCAxNikKK2lmbmRlZiBSVUJZX1BMQVRGT1JNCitSVUJZX1BMQVRGT1JNID0gaTU4Ni1tc3dpbjMyCitlbmRpZgoraWZuZGVmIFJVQllfSU5TVEFMTF9OQU1FCitSVUJZX0lOU1RBTExfTkFNRSA9IG1zd2luMzItcnVieSQoUlVCWV9WRVIpCitlbmRpZgorZWxzZQoraWZuZGVmIFJVQllfUExBVEZPUk0KK1JVQllfUExBVEZPUk0gPSBpMzg2LW1zd2luMzIKK2VuZGlmCitpZm5kZWYgUlVCWV9JTlNUQUxMX05BTUUKK1JVQllfSU5TVEFMTF9OQU1FID0gbXN2Y3J0LXJ1YnkkKFJVQllfVkVSKQorZW5kaWYKK2VuZGlmCisKK1JVQllJTkMgPS1JICQoUlVCWSkvbGliL3J1YnkvJChSVUJZX1ZFUl9MT05HKS8kKFJVQllfUExBVEZPUk0pCitpZmVxIChubywgJChEWU5BTUlDX1JVQlkpKQorUlVCWUxJQiA9IC1MJChSVUJZKS9saWIgLWwkKFJVQllfSU5TVEFMTF9OQU1FKQorZW5kaWYKKworZW5kaWYgIyBSVUJZCisKKyMgU2VlIGZlYXR1cmUuaCBmb3IgYSBsaXN0IG9mIG9wdGlvbnMuCisjIEFueSBvdGhlciBkZWZpbmVzIGNhbiBiZSBpbmNsdWRlZCBoZXJlLgorREVGX0dVST0tREZFQVRfR1VJX1czMiAtREZFQVRfQ0xJUEJPQVJECitERUZJTkVTPS1EV0lOMzIgLURXSU5WRVI9JChXSU5WRVIpIC1EX1dJTjMyX1dJTk5UPSQoV0lOVkVSKSBcCisJLURIQVZFX1BBVEhERUYgLURGRUFUXyQoRkVBVFVSRVMpCitpZmVxICgkKENST1NTKSx5ZXMpCisjIGNyb3NzLWNvbXBpbGVyOgorQ0MgPSBpNTg2LXBjLW1pbmd3MzJtc3ZjLWdjYworREVMID0gcm0KK1dJTkRSRVMgPSBpNTg2LXBjLW1pbmd3MzJtc3ZjLXdpbmRyZXMKK2Vsc2UKKyMgbm9ybWFsIChXaW5kb3dzKSBjb21waWxhdGlvbjoKK0NDID0gZ2NjCitpZm5lcSAoc2guZXhlLCAkKFNIRUxMKSkKK0RFTCA9IHJtCitESVJTTEFTSCA9IC8KK2Vsc2UKK0RFTCA9IGRlbAorRElSU0xBU0ggPSBcXAorZW5kaWYKK1dJTkRSRVMgPSB3aW5kcmVzCitlbmRpZgorCisjPj4+Pj4gZW5kIG9mIGNob2ljZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitDRkxBR1MgPSAtSXByb3RvICQoREVGSU5FUykgLXBpcGUgLXcgLW1hcmNoPSQoQVJDSCkgLW1jcHU9JChDUFVOUikgLVdhbGwKKworaWZkZWYgR0VUVEVYVAorREVGSU5FUyArPS1ESEFWRV9HRVRURVhUIC1ESEFWRV9MT0NBTEVfSAorR0VUVEVYVElOQ0xVREUgPSAkKEdFVFRFWFQpL2luY2x1ZGUKK0dFVFRFWFRMSUIgPSAkKElOVExQQVRIKQoraWZlcSAoeWVzLCAkKEdFVFRFWFQpKQorREVGSU5FUyArPS1ERFlOQU1JQ19HRVRURVhUCitlbHNlCitpZmRlZiBEWU5BTUlDX0dFVFRFWFQKK0RFRklORVMgKz0tRCQoRFlOQU1JQ19HRVRURVhUKQoraWZkZWYgR0VUVEVYVF9EWU5BTUlDCitERUZJTkVTICs9IC1ER0VUVEVYVF9EWU5BTUlDIC1ER0VUVEVYVF9ETEw9XCIkKEdFVFRFWFRfRFlOQU1JQylcIgorZW5kaWYKK2VuZGlmCitlbmRpZgorZW5kaWYKKworaWZkZWYgUEVSTAorQ0ZMQUdTICs9IC1JJChQRVJMTElCUykgLURGRUFUX1BFUkwgLUwkKFBFUkxMSUJTKQoraWZlcSAoeWVzLCAkKERZTkFNSUNfUEVSTCkpCitDRkxBR1MgKz0gLUREWU5BTUlDX1BFUkwgLUREWU5BTUlDX1BFUkxfRExMPVwicGVybCQoUEVSTF9WRVIpLmRsbFwiCitlbmRpZgorZW5kaWYKKworaWZkZWYgUlVCWQorQ0ZMQUdTICs9IC1ERkVBVF9SVUJZICQoUlVCWUlOQykKK2lmZXEgKHllcywgJChEWU5BTUlDX1JVQlkpKQorQ0ZMQUdTICs9IC1ERFlOQU1JQ19SVUJZIC1ERFlOQU1JQ19SVUJZX0RMTD1cIiQoUlVCWV9JTlNUQUxMX05BTUUpLmRsbFwiCitDRkxBR1MgKz0gLUREWU5BTUlDX1JVQllfVkVSPSQoUlVCWV9WRVIpCitlbmRpZgorZW5kaWYKKworaWZkZWYgUFlUSE9OCitDRkxBR1MgKz0gLURGRUFUX1BZVEhPTiAkKFBZVEhPTklOQykKK2lmZXEgKHllcywgJChEWU5BTUlDX1BZVEhPTikpCitDRkxBR1MgKz0gLUREWU5BTUlDX1BZVEhPTiAtRERZTkFNSUNfUFlUSE9OX0RMTD1cInB5dGhvbiQoUFlUSE9OX1ZFUikuZGxsXCIKK2VuZGlmCitlbmRpZgorCitpZmRlZiBUQ0wKK0NGTEFHUyArPSAtREZFQVRfVENMICQoVENMSU5DKQoraWZlcSAoeWVzLCAkKERZTkFNSUNfVENMKSkKK0NGTEFHUyArPSAtRERZTkFNSUNfVENMIC1ERFlOQU1JQ19UQ0xfRExMPVwidGNsJChUQ0xfVkVSKS5kbGxcIgorZW5kaWYKK2VuZGlmCisKK2lmZXEgKCQoUE9TVFNDUklQVCkseWVzKQorREVGSU5FUyArPSAtRE1TV0lOUFMKK2VuZGlmCisKK2lmZXEgKHllcywgJChPTEUpKQorREVGSU5FUyArPSAtREZFQVRfT0xFCitlbmRpZgorCitpZmVxICgkKENTQ09QRSkseWVzKQorREVGSU5FUyArPSAtREZFQVRfQ1NDT1BFCitlbmRpZgorCitpZmVxICgkKE5FVEJFQU5TKSx5ZXMpCitERUZJTkVTICs9IC1ERkVBVF9ORVRCRUFOU19JTlRHCitpZmVxICgkKERFQlVHKSwgeWVzKQorREVGSU5FUyArPSAtRE5CREVCVUcKK05CREVCVUdfSU5DTCA9IG5iZGVidWcuaAorTkJERUJVR19TUkMgPSBuYmRlYnVnLmMKK2VuZGlmCitlbmRpZgorCitpZmRlZiBYUE0KK0NGTEFHUyArPSAtREZFQVRfWFBNX1czMiAtSSAkKFhQTSkvaW5jbHVkZQorZW5kaWYKKworaWZlcSAoJChERUJVRykseWVzKQorQ0ZMQUdTICs9IC1nIC1mc3RhY2stY2hlY2sKK0RFQlVHX1NVRkZJWD1kCitlbHNlCitpZmVxICgkKE9QVElNSVpFKSwgU0laRSkKK0NGTEFHUyArPSAtT3MKK2Vsc2UKK2lmZXEgKCQoT1BUSU1JWkUpLCBNQVhTUEVFRCkKK0NGTEFHUyArPSAtTzMKK0NGTEFHUyArPSAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlZy1zdHJ1Y3QtcmV0dXJuIC1tYWxpZ24tZG91YmxlCitlbHNlICAjIFNQRUVECitDRkxBR1MgKz0gLU8yCitlbmRpZgorZW5kaWYKK0NGTEFHUyArPSAtcworZW5kaWYKKworTElCID0gLWxrZXJuZWwzMiAtbHVzZXIzMiAtbGdkaTMyIC1sYWR2YXBpMzIgLWxjb21kbGczMiAtbGNvbWN0bDMyCitHVUlPQkogPSAgJChPVVRESVIpL2d1aS5vICQoT1VURElSKS9ndWlfdzMyLm8gJChPVVRESVIpL29zX3czMmV4ZS5vCitPQkogPSBcCisJJChPVVRESVIpL2J1ZmZlci5vIFwKKwkkKE9VVERJUikvY2hhcnNldC5vIFwKKwkkKE9VVERJUikvZGlmZi5vIFwKKwkkKE9VVERJUikvZGlncmFwaC5vIFwKKwkkKE9VVERJUikvZWRpdC5vIFwKKwkkKE9VVERJUikvZXZhbC5vIFwKKwkkKE9VVERJUikvZXhfY21kcy5vIFwKKwkkKE9VVERJUikvZXhfY21kczIubyBcCisJJChPVVRESVIpL2V4X2RvY21kLm8gXAorCSQoT1VURElSKS9leF9ldmFsLm8gXAorCSQoT1VURElSKS9leF9nZXRsbi5vIFwKKwkkKE9VVERJUikvZmlsZWlvLm8gXAorCSQoT1VURElSKS9mb2xkLm8gXAorCSQoT1VURElSKS9nZXRjaGFyLm8gXAorCSQoT1VURElSKS9tYWluLm8gXAorCSQoT1VURElSKS9tYXJrLm8gXAorCSQoT1VURElSKS9tZW1maWxlLm8gXAorCSQoT1VURElSKS9tZW1saW5lLm8gXAorCSQoT1VURElSKS9tZW51Lm8gXAorCSQoT1VURElSKS9tZXNzYWdlLm8gXAorCSQoT1VURElSKS9taXNjMS5vIFwKKwkkKE9VVERJUikvbWlzYzIubyBcCisJJChPVVRESVIpL21vdmUubyBcCisJJChPVVRESVIpL21ieXRlLm8gXAorCSQoT1VURElSKS9ub3JtYWwubyBcCisJJChPVVRESVIpL29wcy5vIFwKKwkkKE9VVERJUikvb3B0aW9uLm8gXAorCSQoT1VURElSKS9vc193aW4zMi5vIFwKKwkkKE9VVERJUikvb3NfbXN3aW4ubyBcCisJJChPVVRESVIpL3BhdGhkZWYubyBcCisJJChPVVRESVIpL3F1aWNrZml4Lm8gXAorCSQoT1VURElSKS9yZWdleHAubyBcCisJJChPVVRESVIpL3NjcmVlbi5vIFwKKwkkKE9VVERJUikvc2VhcmNoLm8gXAorCSQoT1VURElSKS9zeW50YXgubyBcCisJJChPVVRESVIpL3RhZy5vIFwKKwkkKE9VVERJUikvdGVybS5vIFwKKwkkKE9VVERJUikvdWkubyBcCisJJChPVVRESVIpL3VuZG8ubyBcCisJJChPVVRESVIpL3ZlcnNpb24ubyBcCisJJChPVVRESVIpL3ZpbXJjLm8gXAorCSQoT1VURElSKS93aW5kb3cubworCitpZmRlZiBQRVJMCitPQkogKz0gJChPVVRESVIpL2lmX3BlcmwubworZW5kaWYKK2lmZGVmIFBZVEhPTgorT0JKICs9ICQoT1VURElSKS9pZl9weXRob24ubworZW5kaWYKK2lmZGVmIFJVQlkKK09CSiArPSAkKE9VVERJUikvaWZfcnVieS5vCitlbmRpZgoraWZkZWYgVENMCitPQkogKz0gJChPVVRESVIpL2lmX3RjbC5vCitlbmRpZgoraWZlcSAoJChDU0NPUEUpLHllcykKK09CSiArPSAkKE9VVERJUikvaWZfY3Njb3BlLm8KK2VuZGlmCitpZmVxICgkKE5FVEJFQU5TKSx5ZXMpCitPQkogKz0gJChPVVRESVIpL25ldGJlYW5zLm8gJChPVVRESVIpL2d1aV9iZXZhbC5vCitMSUIgKz0gLWx3c29jazMyCitlbmRpZgoraWZkZWYgWFBNCitPQkogKz0gJChPVVRESVIpL3hwbV93MzIubworIyBZb3UnbGwgbmVlZCBsaWJYcG0uYSBmcm9tIGh0dHA6Ly9nbnV3aW4zMi5zZi5uZXQKK0xJQiArPSAtTCAkKFhQTSkvbGliIC1sWHBtCitlbmRpZgorCisKK2lmZXEgKCQoR1VJKSx5ZXMpCitUQVJHRVQgOj0gZ3ZpbSQoREVCVUdfU1VGRklYKS5leGUKK0RFRklORVMgKz0gJChERUZfR1VJKQorT0JKICs9ICQoR1VJT0JKKQorTEZMQUdTICs9IC1td2luZG93cworT1VURElSID0gZ29iaiQoREVCVUdfU1VGRklYKQorZWxzZQorVEFSR0VUIDo9IHZpbSQoREVCVUdfU1VGRklYKS5leGUKK09VVERJUiA9IG9iaiQoREVCVUdfU1VGRklYKQorZW5kaWYKKworaWZkZWYgR0VUVEVYVAoraWZuZXEgKHllcywgJChHRVRURVhUKSkKK0NGTEFHUyArPSAtSSQoR0VUVEVYVElOQ0xVREUpCitpZm5kZWYgU1RBVElDX0dFVFRFWFQKK0xJQiArPSAtTCQoR0VUVEVYVExJQikgLWwkKElOVExMSUIpCitpZmVxIChVU0VfU0FGRV9HRVRURVhUX0RMTCwgJChEWU5BTUlDX0dFVFRFWFQpKQorT0JKKz0kKFNBRkVfR0VUVEVYVF9ETExfT0JKKQorZW5kaWYKK2Vsc2UKK0xJQiArPSAtTCQoR0VUVEVYVExJQikgLWxpbnRsCitlbmRpZgorZW5kaWYKK2VuZGlmCisKK2lmZGVmIFBFUkwKK2lmZXEgKG5vLCAkKERZTkFNSUNfUEVSTCkpCitMSUIgKz0gLWxwZXJsJChQRVJMX1ZFUikKK2VuZGlmCitlbmRpZgorCitpZmRlZiBUQ0wKK0xJQiArPSAtTCQoVENMKS9saWIKK2lmZXEgKHllcywgJChEWU5BTUlDX1RDTCkpCitMSUIgKz0gLWx0Y2xzdHViJChUQ0xfVkVSKQorZWxzZQorTElCICs9IC1sdGNsJChUQ0xfVkVSKQorZW5kaWYKK2VuZGlmCisKK2lmZXEgKHllcywgJChPTEUpKQorTElCICs9IC1sb2xlYXV0MzIgLWxzdGRjKysKK09CSiArPSAkKE9VVERJUikvaWZfb2xlLm8KK2VuZGlmCisKK2lmZXEgKHllcywgJChNQllURSkpCitERUZJTkVTICs9IC1ERkVBVF9NQllURQorZW5kaWYKKworaWZlcSAoeWVzLCAkKElNRSkpCitERUZJTkVTICs9IC1ERkVBVF9NQllURV9JTUUKK2lmZXEgKHllcywgJChEWU5BTUlDX0lNRSkpCitERUZJTkVTICs9IC1ERFlOQU1JQ19JTUUKK2Vsc2UKK0xJQiArPSAtbGltbTMyCitlbmRpZgorZW5kaWYKKworaWZkZWYgSUNPTlYKK2lmbmVxICh5ZXMsICQoSUNPTlYpKQorTElCICs9IC1MJChJQ09OVikKK0NGTEFHUyArPSAtSSQoSUNPTlYpCitlbmRpZgorREVGSU5FUys9LUREWU5BTUlDX0lDT05WCitlbmRpZgorCithbGw6ICQoVEFSR0VUKSB2aW1ydW4uZXhlIHh4ZC94eGQuZXhlIGluc3RhbGwuZXhlIHVuaW5zdGFsLmV4ZSBHdmltRXh0L2d2aW1leHQuZGxsCisKK3ZpbXJ1bi5leGU6IHZpbXJ1bi5jCisJJChDQykgJChDRkxBR1MpIC1vIHZpbXJ1bi5leGUgdmltcnVuLmMgJChMSUIpCisKK2luc3RhbGwuZXhlOiBkb3NpbnN0LmMKKwkkKENDKSAkKENGTEFHUykgLW8gaW5zdGFsbC5leGUgZG9zaW5zdC5jICQoTElCKSAtbG9sZTMyIC1sdXVpZAorCit1bmluc3RhbC5leGU6IHVuaW5zdGFsLmMKKwkkKENDKSAkKENGTEFHUykgLW8gdW5pbnN0YWwuZXhlIHVuaW5zdGFsLmMgJChMSUIpCisKKyQoVEFSR0VUKTogJChPVVRESVIpICQoT0JKKQorCSQoQ0MpICQoQ0ZMQUdTKSAkKExGTEFHUykgLW8gJEAgJChPQkopICQoTElCKSAtbG9sZTMyIC1sdXVpZCAkKFBZVEhPTkxJQikgJChSVUJZTElCKQorCit1cHg6IGV4ZXMKKwl1cHggZ3ZpbS5leGUKKwl1cHggdmltLmV4ZQorCit4eGQveHhkLmV4ZTogeHhkL3h4ZC5jCisJJChNQUtFKSAtQyB4eGQgLWYgTWFrZV9jeWcubWFrCisKK0d2aW1FeHQvZ3ZpbWV4dC5kbGw6IEd2aW1FeHQvZ3ZpbWV4dC5jcHAgR3ZpbUV4dC9ndmltZXh0LnJjIEd2aW1FeHQvZ3ZpbWV4dC5oCisJJChNQUtFKSAtQyBHdmltRXh0IC1mIE1ha2VfbWluZy5tYWsKKworY2xlYW46CisJLSQoREVMKSAkKE9VVERJUikkKERJUlNMQVNIKSoubworCS0kKERFTCkgJChPVVRESVIpJChESVJTTEFTSCkqLnJlcworCS1ybWRpciAkKE9VVERJUikKKwktJChERUwpICouZXhlCisJLSQoREVMKSBwYXRoZGVmLmMKK2lmZGVmIFBFUkwKKwktJChERUwpIGlmX3BlcmwuYworZW5kaWYKKwkkKE1BS0UpIC1DIEd2aW1FeHQgLWYgTWFrZV9taW5nLm1hayBjbGVhbgorCSQoTUFLRSkgLUMgeHhkIC1mIE1ha2VfY3lnLm1hayBjbGVhbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0lOQ0wgPSB2aW0uaCBmZWF0dXJlLmggb3Nfd2luMzIuaCBvc19kb3MuaCBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBcCisJc3RydWN0cy5oIHJlZ2V4cC5oIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIGdsb2JhbHMuaCBmYXJzaS5oIFwKKwlndWkuaAorCiskKE9VVERJUikvJS5vIDogJS5jICQoSU5DTCkKKwkkKENDKSAtYyAkKENGTEFHUykgJDwgLW8gJEAKKworJChPVVRESVIpL3ZpbXJlcy5yZXM6IHZpbS5yYyB2ZXJzaW9uLmggZ3VpX3czMl9yYy5oCisJJChXSU5EUkVTKSAkKERFRklORVMpIHZpbS5yYyAkKE9VVERJUikvdmltcmVzLnJlcworCiskKE9VVERJUikvdmltcmMubzogJChPVVRESVIpL3ZpbXJlcy5yZXMKKwkkKFdJTkRSRVMpICQoT1VURElSKS92aW1yZXMucmVzICQoT1VURElSKS92aW1yYy5vCisKKyQoT1VURElSKToKKwlta2RpciAkKE9VVERJUikKKworJChPVVRESVIpL2V4X2RvY21kLm86CWV4X2RvY21kLmMgJChJTkNMKSBleF9jbWRzLmgKKwkkKENDKSAtYyAkKENGTEFHUykgZXhfZG9jbWQuYyAtbyAkKE9VVERJUikvZXhfZG9jbWQubworCiskKE9VVERJUikvZXhfZXZhbC5vOglleF9ldmFsLmMgJChJTkNMKSBleF9jbWRzLmgKKwkkKENDKSAtYyAkKENGTEFHUykgZXhfZXZhbC5jIC1vICQoT1VURElSKS9leF9ldmFsLm8KKworJChPVVRESVIpL2lmX2NzY29wZS5vOglpZl9jc2NvcGUuYyAkKElOQ0wpIGlmX2NzY29wZS5oCisJJChDQykgLWMgJChDRkxBR1MpIGlmX2NzY29wZS5jIC1vICQoT1VURElSKS9pZl9jc2NvcGUubworCiskKE9VVERJUikvaWZfb2xlLm86IGlmX29sZS5jcHAgJChJTkNMKQorCSQoQ0MpICQoQ0ZMQUdTKSAtRF9fSUlEX0RFRklORURfXyAtYyAtbyAkKE9VVERJUikvaWZfb2xlLm8gaWZfb2xlLmNwcAorCiskKE9VVERJUikvaWZfcnVieS5vOiBpZl9ydWJ5LmMgJChJTkNMKQoraWZlcSAoMTYsICQoUlVCWSkpCisJJChDQykgJChDRkxBR1MpIC1VX1dJTjMyIC1jIC1vICQoT1VURElSKS9pZl9ydWJ5Lm8gaWZfcnVieS5jCitlbmRpZgorCitpZl9wZXJsLmM6IGlmX3BlcmwueHMgdHlwZW1hcAorCXBlcmwgJChQRVJMTElCKS9FeHRVdGlscy94c3VicHAgLXByb3RvdHlwZXMgLXR5cGVtYXAgXAorCSAgICAgJChQRVJMTElCKS9FeHRVdGlscy90eXBlbWFwIGlmX3BlcmwueHMgPiAkQAorCiskKE9VVERJUikvbmV0YmVhbnMubzoJbmV0YmVhbnMuYyAkKElOQ0wpICQoTkJERUJVR19JTkNMKSAkKE5CREVCVUdfU1JDKQorCSQoQ0MpIC1jICQoQ0ZMQUdTKSBuZXRiZWFucy5jIC1vICQoT1VURElSKS9uZXRiZWFucy5vCisKK3BhdGhkZWYuYzogJChJTkNMKQoraWZuZXEgKHNoLmV4ZSwgJChTSEVMTCkpCisJQGVjaG8gY3JlYXRpbmcgcGF0aGRlZi5jCisJQGVjaG8gJy8qIHBhdGhkZWYuYyAqLycgPiBwYXRoZGVmLmMKKwlAZWNobyAnI2luY2x1ZGUgInZpbS5oIicgPj4gcGF0aGRlZi5jCisJQGVjaG8gJ2NoYXJfdSAqZGVmYXVsdF92aW1fZGlyID0gKGNoYXJfdSAqKSIkKFZJTVJDTE9DKSI7JyA+PiBwYXRoZGVmLmMKKwlAZWNobyAnY2hhcl91ICpkZWZhdWx0X3ZpbXJ1bnRpbWVfZGlyID0gKGNoYXJfdSAqKSIkKFZJTVJVTlRJTUVESVIpIjsnID4+IHBhdGhkZWYuYworCUBlY2hvICdjaGFyX3UgKmFsbF9jZmxhZ3MgPSAoY2hhcl91ICopIiQoQ0MpICQoQ0ZMQUdTKSI7JyA+PiBwYXRoZGVmLmMKKwlAZWNobyAnY2hhcl91ICphbGxfbGZsYWdzID0gKGNoYXJfdSAqKSIkKENDKSAtcyAtbyAkKFRBUkdFVCkgJChMSUIpIC1sdXVpZCAtbG9sZTMyICQoUFlUSE9OTElCKSAkKFJVQllMSUIpIjsnID4+IHBhdGhkZWYuYworCUBlY2hvICdjaGFyX3UgKmNvbXBpbGVkX3VzZXIgPSAoY2hhcl91ICopIiQoVVNFUk5BTUUpIjsnID4+IHBhdGhkZWYuYworCUBlY2hvICdjaGFyX3UgKmNvbXBpbGVkX3N5cyA9IChjaGFyX3UgKikiJChVU0VSRE9NQUlOKSI7JyA+PiBwYXRoZGVmLmMKK2Vsc2UKKwlAZWNobyBjcmVhdGluZyBwYXRoZGVmLmMKKwlAZWNobyAvKiBwYXRoZGVmLmMgKi8gPiBwYXRoZGVmLmMKKwlAZWNobyAjaW5jbHVkZSAidmltLmgiID4+IHBhdGhkZWYuYworCUBlY2hvIGNoYXJfdSAqZGVmYXVsdF92aW1fZGlyID0gKGNoYXJfdSAqKSIkKFZJTVJDTE9DKSI7ID4+IHBhdGhkZWYuYworCUBlY2hvIGNoYXJfdSAqZGVmYXVsdF92aW1ydW50aW1lX2RpciA9IChjaGFyX3UgKikiJChWSU1SVU5USU1FRElSKSI7ID4+IHBhdGhkZWYuYworCUBlY2hvIGNoYXJfdSAqYWxsX2NmbGFncyA9IChjaGFyX3UgKikiJChDQykgJChDRkxBR1MpIjsgPj4gcGF0aGRlZi5jCisJQGVjaG8gY2hhcl91ICphbGxfbGZsYWdzID0gKGNoYXJfdSAqKSIkKENDKSAtcyAtbyAkKFRBUkdFVCkgJChMSUIpIC1sdXVpZCAtbG9sZTMyICQoUFlUSE9OTElCKSAkKFJVQllMSUIpIjsgPj4gcGF0aGRlZi5jCisJQGVjaG8gY2hhcl91ICpjb21waWxlZF91c2VyID0gKGNoYXJfdSAqKSIkKFVTRVJOQU1FKSI7ID4+IHBhdGhkZWYuYworCUBlY2hvIGNoYXJfdSAqY29tcGlsZWRfc3lzID0gKGNoYXJfdSAqKSIkKFVTRVJET01BSU4pIjsgPj4gcGF0aGRlZi5jCitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL01ha2VfbWludC5tYWsgYi9zcmMvTWFrZV9taW50Lm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmNhYWNiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL01ha2VfbWludC5tYWsKQEAgLTAsMCArMSw1NiBAQAorIworIyBNYWtlZmlsZSBmb3IgVmltIG9uIE1pTlQJCQkJdmltOnRzPTg6c3c9ODp0dz03OAorIworIyBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIFVuaXggTWFrZWZpbGUuIEl0IGlzIGNvbmZpZ3VyZWQgdG8gYWNjb21wYW55CisjIHRoZSBNaU5UIGRpc3RyaWJ1dGlvbiBvZiBWaW0uCisjCisjIFNlZSAiTWFrZWZpbGUiIGZvciBpbnN0cnVjdGlvbnMgaG93IHRvIHJ1biAibWFrZSIuCisjCisjIEJVVDogQWx3YXlzIHJ1bjogIm1ha2UgLWYgTWFrZV9taW50Lm1hayBjb25maWciLAorIyAgICAgIGFuZCB0aGVuOiAgIm1ha2UgLWYgTWFrZV9taW50Lm1hayIhCisjIE90aGVyd2lzZSB0aGUgcG9zdHByb2Nlc3Npbmcgd29uJ3QgZ2V0IGRvbmUuCisjCisKKyMjIyBUaGlzIE1ha2VmaWxlIGhhcyBiZWVuIHN1Y2Nlc2Z1bGx5IHRlc3RlZCBvbiB0aGVzZSBzeXN0ZW1zLgorIyMjIENoZWNrIHRoZSAoKikgY29sdW1uIGZvciByZW1hcmtzLCBsaXN0ZWQgYmVsb3cuCisjIyMgTGF0ZXIgY29kZSBjaGFuZ2VzIG1heSBjYXVzZSBzbWFsbCBwcm9ibGVtcywgb3RoZXJ3aXNlIFZpbSBpcyBzdXBwb3NlZCB0bworIyMjIGNvbXBpbGUgYW5kIHJ1biB3aXRob3V0IHByb2JsZW1zLgorCisjc3lzdGVtOgkgICAgICBjb25maWd1cmF0aW9uczoJCQl2ZXJzaW9uICgqKSB0ZXN0ZWQgYnk6CisjLS0tLS0tLS0tLS0tLQkgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JICAgICAtLS0tLS0tICAtICAtLS0tLS0tLS0tCisjTWlOVCAxLjEyLjUJICAgICAgZ2NjIGdjYy0yLjYuMQkJCTMuMjkJIEplbnMgRmVsZGVyaG9mZgorI01pTlQgMS4xMi42CSAgICAgIGdjYyBnY2MtMi42LjEJICAtR1VJCQk0LjZiCSBKZW5zIEZlbGRlcmhvZmYKKyNNaU5UIDEuMTIuNgkgICAgICBnY2MgZ2NjLTIuNi4xCSAgLUdVSQkJNC42CSBKZW5zIEZlbGRlcmhvZmYKKworIyBzZXQgdGhpcyB0byB0aGUgcGF0aG5hbWUgcHJlZml4IG9mIHlvdXIgc3ltYm9sIGxpbmsgZWRpdG9yLCBpLmUuIGlmIGl0IGlzCisjIC91c3IvbG9jYWwvYmluL3N5bS1sZCBzZXQ6CisjCitTWU1MRFBSRUZJWCA9IC91c3IvbG9jYWwvYmluL3N5bS0KKyNTWU1MRFBSRUZJWCA9IC9nbnUvYmluL3N5bS0KKworUE9TVFBST0NFU1MgPSBmaXhzdGsgMjBrICQoVklNVEFSR0VUKQorREJHUE9TVFBST0NFU1MgPSBmaXhzdGsgMjBrICQoREJHVEFSR0VUKQorREJHTERGTEFHUyA9IC1CJChTWU1MRFBSRUZJWCkKK0RCR1RBUkdFVCA9ICQoVklNVEFSR0VUKS5zeW0KKworCisjIERlZmF1bHQgdGFyZ2V0IGlzIG1ha2luZyB0aGUgZXhlY3V0YWJsZSBhbmQgdGhlbiBkbyB0aGUgcG9zdCBwcm9jZXNzaW5nCithbGw6ICQoVklNVEFSR0VUKSAkKFRPT0xTKQorCSQoUE9TVFBST0NFU1MpCisKK2RlYnVnOiAkKERCR1RBUkdFVCkKKwkkKERCR1BPU1RQUk9DRVNTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyBpbmNsdWRlIHRoZSBVbml4IE1ha2VmaWxlICMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlIE1ha2VmaWxlCisKKworIyMjIChNKSAgTWlOVCB3aXRoIGdjYyAyLjYuMSBhbmQgZ2RiIDMuNQorQ0MgPSBnY2MgLW1pbnQKK0NGTEFHUyA9IC1nIC1PIC1JcHJvdG8KKworJChEQkdUQVJHRVQpOiAkKE9CSikgdmVyc2lvbi5jIHZlcnNpb24uaAorCSQoQ0MpIC1jICQoQUxMX0NGTEFHUykgdmVyc2lvbi5jCisJJChDQykgJChMREZMQUdTKSAkKERCR0xERkxBR1MpIC1vICQoREJHVEFSR0VUKSAtZyAkKE9CSikgXAorCQl2ZXJzaW9uLm8gJChBTExfTElCUykKZGlmZiAtLWdpdCBhL3NyYy9NYWtlX21vcnBoLm1hayBiL3NyYy9NYWtlX21vcnBoLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNlYjUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL01ha2VfbW9ycGgubWFrCkBAIC0wLDAgKzEsODggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFZJTSwgdXNpbmcgTW9ycGhPUyBTREsgKGdjYyAyLjk1LjMpCisjCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIGFuZCBjb21tZW50IHRoZSB0d28gYWZ0ZXIgaW4KKyMgY2FzZSB5b3Ugd2FudCB0byBwbGF5IHdpdGggR1ZJTSBNb3JwaE9TLiBCdXQgaXQncyBzdGlsbCBrbm93bgorIyB0byBub3Qgd29yayBhdCBhbGwuIFNvIG1lYW53aGlsZSBpdCdzIGJldHRlciB0byBzdGljayB3aXRoIFZJTS4KKworIyBHVklNID0JLURGRUFUX0dVSV9BTUlHQQorIyBHVklNU1JDID0JZ3VpX2FtaWdhLmMgZ3VpLmMKKworR1ZJTSA9CitHVklNU1JDID0KKworQ0ZMQUdTID0JLWMJCQkJCQlcCisJCS1waXBlCQkJCQkJXAorCQktTzIJCQkJCQlcCisJCS1XYWxsCQkJCQkJXAorCQkJCQkJCQlcCisJCS1ETk9fQVJQCQkJCQlcCisJCS1EVVNFX1RNUE5BTQkJCQkJXAorCQkke0dWSU19CQkJCQkJXAorCQkJCQkJCQlcCisJCS1JIHByb3RvCQkJCQlcCisJCQkJCQkJCVwKKwkJLW5vaXhlbXVsCisKK1BSRyA9CQlWaW0KK0xJQlMgPQkJLW5vaXhlbXVsIC1zCitDQyA9CQlnY2MKK0xEID0JCWdjYworT0JKRFVNUCA9CW9iamR1bXAKK1JNID0JCXJtCisKKy5jLm86CisJJHtDQ30gJHtDRkxBR1N9ICQ8IC1vICRACisKK1NSQyA9CWJ1ZmZlci5jCQkJCQkJXAorCWNoYXJzZXQuYwkJCQkJCVwKKwlkaWZmLmMJCQkJCQkJXAorCWRpZ3JhcGguYwkJCQkJCVwKKwllZGl0LmMJCQkJCQkJXAorCWV2YWwuYwkJCQkJCQlcCisJZXhfY21kcy5jCQkJCQkJXAorCWV4X2NtZHMyLmMJCQkJCQlcCisJZXhfZG9jbWQuYwkJCQkJCVwKKwlleF9ldmFsLmMJCQkJCQlcCisJZXhfZ2V0bG4uYwkJCQkJCVwKKwlmaWxlaW8uYwkJCQkJCVwKKwlmb2xkLmMJCQkJCQkJXAorCWdldGNoYXIuYwkJCQkJCVwKKwltYWluLmMJCQkJCQkJXAorCW1hcmsuYwkJCQkJCQlcCisJbWJ5dGUuYwkJCQkJCQlcCisJbWVtZmlsZS5jCQkJCQkJXAorCW1lbWxpbmUuYwkJCQkJCVwKKwltZW51LmMJCQkJCQkJXAorCW1lc3NhZ2UuYwkJCQkJCVwKKwltaXNjMS5jCQkJCQkJCVwKKwltaXNjMi5jCQkJCQkJCVwKKwltb3ZlLmMJCQkJCQkJXAorCW5vcm1hbC5jCQkJCQkJXAorCW9wcy5jCQkJCQkJCVwKKwlvcHRpb24uYwkJCQkJCVwKKwlvc19hbWlnYS5jCQkJCQkJXAorCXF1aWNrZml4LmMJCQkJCQlcCisJcmVnZXhwLmMJCQkJCQlcCisJc2NyZWVuLmMJCQkJCQlcCisJc2VhcmNoLmMJCQkJCQlcCisJc3ludGF4LmMJCQkJCQlcCisJdGFnLmMJCQkJCQkJXAorCXRlcm0uYwkJCQkJCQlcCisJdWkuYwkJCQkJCQlcCisJdW5kby5jCQkJCQkJCVwKKwl2ZXJzaW9uLmMJCQkJCQlcCisJd2luZG93LmMJCQkJCQlcCisJJHtHVklNU1JDfQorCitPQkogPQkkKFNSQzouYz0ubykKKworJChQUkcpOiAkKE9CSikKKwkke0xEfSAtbyAkKFBSRykgJChPQkopICQoTElCUykKKworZHVtcDogJChQUkcpCisJJChPQkpEVU1QKSAtLXJlbG9jIC0tZGlzYXNzZW1ibGUtYWxsICQoUFJHKSA+ICQoUFJHKS5zCisKK2NsZWFuOgorCSQoUk0pIC1mdiAkKE9CSikgJChQUkcpICQoUFJHKS5zCmRpZmYgLS1naXQgYS9zcmMvTWFrZV9tcHcubWFrIGIvc3JjL01ha2VfbXB3Lm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTk4ZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL01ha2VfbXB3Lm1hawpAQCAtMCwwICsxLDM4NDMgQEAKKyMgICBGaWxlOiAgICAgICBWSW0ubWFrZQorIyAgIFRhcmdldDogICAgIFZJbQorIyAgIENyZWF0ZWQ6ICAgIFN1bmRheSwgRGVjZW1iZXIgMjksIDIwMDAgMDk6NTU6MTQgUE0KKworCitNQUtFRklMRQk9IFZJbS5tYWtlCiulTW9uZG9CdWlsZKUJPSB7TUFLRUZJTEV9ICAjIE1ha2UgYmxhbmsgdG8gYXZvaWQgcmVidWlsZHMgd2hlbiBtYWtlZmlsZSBpcyBtb2RpZmllZAorCitPYmpEaXIJCT0gOm9iajoKK0luY2x1ZGVzCT0gILYKKwkJCQkgIC1pIDpzcmM6cHJvdG86CitDRmxhZ3MJCT0gLXcgMiwzNSAtZW51bSBpbnQKK1N5bS1QUEMJCT0gLXN5bSBvZmYKKworUFBDQ09wdGlvbnMJPSB7SW5jbHVkZXN9IHtDRmxhZ3N9IHtTeW0tUFBDfQorCisKKyMjIyBTb3VyY2UgRmlsZXMgIyMjCisKK1NyY0ZpbGVzCT0gILYKKwkJCQkgIDpzcmM6YnVmZmVyLmMgtgorCQkJCSAgOnNyYzpjaGFyc2V0LmMgtgorCQkJCSAgOnNyYzpkaWZmLmMgtgorCQkJCSAgOnNyYzpkaWdyYXBoLmMgtgorCQkJCSAgOnNyYzplZGl0LmMgtgorCQkJCSAgOnNyYzpldmFsLmMgtgorCQkJCSAgOnNyYzpleF9jbWRzLmMgtgorCQkJCSAgOnNyYzpleF9jbWRzMi5jILYKKwkJCQkgIDpzcmM6ZXhfZG9jbWQuYyC2CisJCQkJICA6c3JjOmV4X2V2YWwuYyC2CisJCQkJICA6c3JjOmV4X2dldGxuLmMgtgorCQkJCSAgOnNyYzpmaWxlaW8uYyC2CisJCQkJICA6c3JjOmZvbGQuYyC2CisJCQkJICA6c3JjOmdldGNoYXIuYyC2CisJCQkJICA6c3JjOmd1aS5jILYKKwkJCQkgIDpzcmM6Z3VpX21hYy5jILYKKwkJCQkgIDpzcmM6aWZfY3Njb3BlLmMgtgorCQkJCSAgOnNyYzptYWluLmMgtgorCQkJCSAgOnNyYzptYXJrLmMgtgorCQkJCSAgOnNyYzptZW1maWxlLmMgtgorCQkJCSAgOnNyYzptZW1saW5lLmMgtgorCQkJCSAgOnNyYzptZW51LmMgtgorCQkJCSAgOnNyYzptZXNzYWdlLmMgtgorCQkJCSAgOnNyYzptaXNjMS5jILYKKwkJCQkgIDpzcmM6bWlzYzIuYyC2CisJCQkJICA6c3JjOm1vdmUuYyC2CisJCQkJICA6c3JjOm11bHRpYnl0ZS5jILYKKwkJCQkgIDpzcmM6bm9ybWFsLmMgtgorCQkJCSAgOnNyYzpvcHMuYyC2CisJCQkJICA6c3JjOm9wdGlvbi5jILYKKwkJCQkgIDpzcmM6b3NfbWFjLmMgtgorCQkJCSAgOnNyYzpwdHkuYyC2CisJCQkJICA6c3JjOnF1aWNrZml4LmMgtgorCQkJCSAgOnNyYzpyZWdleHAuYyC2CisJCQkJICA6c3JjOnNjcmVlbi5jILYKKwkJCQkgIDpzcmM6c2VhcmNoLmMgtgorCQkJCSAgOnNyYzpzeW50YXguYyC2CisJCQkJICA6c3JjOnRhZy5jILYKKwkJCQkgIDpzcmM6dGVybS5jILYKKwkJCQkgIDpzcmM6dGVybWxpYi5jILYKKwkJCQkgIDpzcmM6dWkuYyC2CisJCQkJICA6c3JjOnVuZG8uYyC2CisJCQkJICA6c3JjOnZlcnNpb24uYyC2CisJCQkJICA6c3JjOndpbmRvdy5jILYKKwkJCQkgIDpzcmM6d3NkZWJ1Zy5jCisKKworIyMjIE9iamVjdCBGaWxlcyAjIyMKKworT2JqRmlsZXMtUFBDICAgID0gILYKKwkJCQkgICJ7T2JqRGlyfWJ1ZmZlci5jLngiILYKKwkJCQkgICJ7T2JqRGlyfWNoYXJzZXQuYy54IiC2CisJCQkJICAie09iakRpcn1kaWZmLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9ZGlncmFwaC5jLngiILYKKwkJCQkgICJ7T2JqRGlyfWVkaXQuYy54IiC2CisJCQkJICAie09iakRpcn1ldmFsLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9ZXhfY21kcy5jLngiILYKKwkJCQkgICJ7T2JqRGlyfWV4X2NtZHMyLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9ZXhfZG9jbWQuYy54IiC2CisJCQkJICAie09iakRpcn1leF9ldmFsLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9ZXhfZ2V0bG4uYy54IiC2CisJCQkJICAie09iakRpcn1maWxlaW8uYy54IiC2CisJCQkJICAie09iakRpcn1mb2xkLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9Z2V0Y2hhci5jLngiILYKKwkJCQkgICJ7T2JqRGlyfWd1aS5jLngiILYKKwkJCQkgICJ7T2JqRGlyfWd1aV9tYWMuYy54IiC2CisJCQkJICAie09iakRpcn1pZl9jc2NvcGUuYy54IiC2CisJCQkJICAie09iakRpcn1tYWluLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9bWFyay5jLngiILYKKwkJCQkgICJ7T2JqRGlyfW1lbWZpbGUuYy54IiC2CisJCQkJICAie09iakRpcn1tZW1saW5lLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9bWVudS5jLngiILYKKwkJCQkgICJ7T2JqRGlyfW1lc3NhZ2UuYy54IiC2CisJCQkJICAie09iakRpcn1taXNjMS5jLngiILYKKwkJCQkgICJ7T2JqRGlyfW1pc2MyLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9bW92ZS5jLngiILYKKwkJCQkgICJ7T2JqRGlyfW11bHRpYnl0ZS5jLngiILYKKwkJCQkgICJ7T2JqRGlyfW5vcm1hbC5jLngiILYKKwkJCQkgICJ7T2JqRGlyfW9wcy5jLngiILYKKwkJCQkgICJ7T2JqRGlyfW9wdGlvbi5jLngiILYKKwkJCQkgICJ7T2JqRGlyfW9zX21hYy5jLngiILYKKwkJCQkgICJ7T2JqRGlyfXB0eS5jLngiILYKKwkJCQkgICJ7T2JqRGlyfXF1aWNrZml4LmMueCIgtgorCQkJCSAgIntPYmpEaXJ9cmVnZXhwLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9c2NyZWVuLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9c2VhcmNoLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9c3ludGF4LmMueCIgtgorCQkJCSAgIntPYmpEaXJ9dGFnLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9dGVybS5jLngiILYKKwkJCQkgICJ7T2JqRGlyfXRlcm1saWIuYy54IiC2CisJCQkJICAie09iakRpcn11aS5jLngiILYKKwkJCQkgICJ7T2JqRGlyfXVuZG8uYy54IiC2CisJCQkJICAie09iakRpcn12ZXJzaW9uLmMueCIgtgorCQkJCSAgIntPYmpEaXJ9d2luZG93LmMueCIgtgorCQkJCSAgIntPYmpEaXJ9d3NkZWJ1Zy5jLngiCisKKworIyMjIExpYnJhcmllcyAjIyMKKworTGliRmlsZXMtUFBDICAgID0gILYKKwkJCQkgICJ7U2hhcmVkTGlicmFyaWVzfUludGVyZmFjZUxpYiIgtgorCQkJCSAgIntTaGFyZWRMaWJyYXJpZXN9TWF0aExpYiIgtgorCQkJCSAgIntTaGFyZWRMaWJyYXJpZXN9U3RkQ0xpYiIgtgorCQkJCSAgIntQUENMaWJyYXJpZXN9U3RkQ1J1bnRpbWUubyIgtgorCQkJCSAgIntQUENMaWJyYXJpZXN9UFBDU3RkQ0xpYi5vIiC2CisJCQkJICAie1BQQ0xpYnJhcmllc31QUENDUnVudGltZS5vIiC2CisJCQkJICAie1BQQ0xpYnJhcmllc31QUENUb29sTGlicy5vIgorCisKKyMjIyBEZWZhdWx0IFJ1bGVzICMjIworCisuYy54ICDEICAuYyAge6VNb25kb0J1aWxkpX0KKwl7UFBDQ30ge2RlcERpcn17ZGVmYXVsdH0uYyAtbyB7dGFyZ0Rpcn17ZGVmYXVsdH0uYy54IHtQUENDT3B0aW9uc30KKworCisjIyMgQnVpbGQgUnVsZXMgIyMjCisKK1ZJbSAgxMQgIHtPYmpGaWxlcy1QUEN9IHtMaWJGaWxlcy1QUEN9IHulTW9uZG9CdWlsZKV9CisJUFBDTGluayC2CisJCS1vIHtUYXJnfSC2CisJCXtPYmpGaWxlcy1QUEN9ILYKKwkJe0xpYkZpbGVzLVBQQ30gtgorCQl7U3ltLVBQQ30gtgorCQktbWYgLWQgtgorCQktdCAnQVBQTCcgtgorCQktYyAnVklNIScKKworCisKKyMjIyBSZXF1aXJlZCBEZXBlbmRlbmNpZXMgIyMjCisKKyJ7T2JqRGlyfWJ1ZmZlci5jLngiICDEICA6c3JjOmJ1ZmZlci5jCisie09iakRpcn1jaGFyc2V0LmMueCIgIMQgIDpzcmM6Y2hhcnNldC5jCisie09iakRpcn1kaWZmLmMueCIgIMQgIDpzcmM6ZGlmZi5jCisie09iakRpcn1kaWdyYXBoLmMueCIgIMQgIDpzcmM6ZGlncmFwaC5jCisie09iakRpcn1lZGl0LmMueCIgIMQgIDpzcmM6ZWRpdC5jCisie09iakRpcn1ldmFsLmMueCIgIMQgIDpzcmM6ZXZhbC5jCisie09iakRpcn1leF9jbWRzLmMueCIgIMQgIDpzcmM6ZXhfY21kcy5jCisie09iakRpcn1leF9jbWRzMi5jLngiICDEICA6c3JjOmV4X2NtZHMyLmMKKyJ7T2JqRGlyfWV4X2RvY21kLmMueCIgIMQgIDpzcmM6ZXhfZG9jbWQuYworIntPYmpEaXJ9ZXhfZXZhbC5jLngiICDEICA6c3JjOmV4X2V2YWwuYworIntPYmpEaXJ9ZXhfZ2V0bG4uYy54IiAgxCAgOnNyYzpleF9nZXRsbi5jCisie09iakRpcn1maWxlaW8uYy54IiAgxCAgOnNyYzpmaWxlaW8uYworIntPYmpEaXJ9Zm9sZC5jLngiICDEICA6c3JjOmZvbGQuYworIntPYmpEaXJ9Z2V0Y2hhci5jLngiICDEICA6c3JjOmdldGNoYXIuYworIntPYmpEaXJ9Z3VpLmMueCIgIMQgIDpzcmM6Z3VpLmMKKyJ7T2JqRGlyfWd1aV9tYWMuYy54IiAgxCAgOnNyYzpndWlfbWFjLmMKKyJ7T2JqRGlyfWlmX2NzY29wZS5jLngiICDEICA6c3JjOmlmX2NzY29wZS5jCisie09iakRpcn1tYWluLmMueCIgIMQgIDpzcmM6bWFpbi5jCisie09iakRpcn1tYXJrLmMueCIgIMQgIDpzcmM6bWFyay5jCisie09iakRpcn1tZW1maWxlLmMueCIgIMQgIDpzcmM6bWVtZmlsZS5jCisie09iakRpcn1tZW1saW5lLmMueCIgIMQgIDpzcmM6bWVtbGluZS5jCisie09iakRpcn1tZW51LmMueCIgIMQgIDpzcmM6bWVudS5jCisie09iakRpcn1tZXNzYWdlLmMueCIgIMQgIDpzcmM6bWVzc2FnZS5jCisie09iakRpcn1taXNjMS5jLngiICDEICA6c3JjOm1pc2MxLmMKKyJ7T2JqRGlyfW1pc2MyLmMueCIgIMQgIDpzcmM6bWlzYzIuYworIntPYmpEaXJ9bW92ZS5jLngiICDEICA6c3JjOm1vdmUuYworIntPYmpEaXJ9bXVsdGlieXRlLmMueCIgIMQgIDpzcmM6bXVsdGlieXRlLmMKKyJ7T2JqRGlyfW5vcm1hbC5jLngiICDEICA6c3JjOm5vcm1hbC5jCisie09iakRpcn1vcHMuYy54IiAgxCAgOnNyYzpvcHMuYworIntPYmpEaXJ9b3B0aW9uLmMueCIgIMQgIDpzcmM6b3B0aW9uLmMKKyJ7T2JqRGlyfW9zX21hYy5jLngiICDEICA6c3JjOm9zX21hYy5jCisie09iakRpcn1wdHkuYy54IiAgxCAgOnNyYzpwdHkuYworIntPYmpEaXJ9cXVpY2tmaXguYy54IiAgxCAgOnNyYzpxdWlja2ZpeC5jCisie09iakRpcn1yZWdleHAuYy54IiAgxCAgOnNyYzpyZWdleHAuYworIntPYmpEaXJ9c2NyZWVuLmMueCIgIMQgIDpzcmM6c2NyZWVuLmMKKyJ7T2JqRGlyfXNlYXJjaC5jLngiICDEICA6c3JjOnNlYXJjaC5jCisie09iakRpcn1zeW50YXguYy54IiAgxCAgOnNyYzpzeW50YXguYworIntPYmpEaXJ9dGFnLmMueCIgIMQgIDpzcmM6dGFnLmMKKyJ7T2JqRGlyfXRlcm0uYy54IiAgxCAgOnNyYzp0ZXJtLmMKKyJ7T2JqRGlyfXRlcm1saWIuYy54IiAgxCAgOnNyYzp0ZXJtbGliLmMKKyJ7T2JqRGlyfXVpLmMueCIgIMQgIDpzcmM6dWkuYworIntPYmpEaXJ9dW5kby5jLngiICDEICA6c3JjOnVuZG8uYworIntPYmpEaXJ9dmVyc2lvbi5jLngiICDEICA6c3JjOnZlcnNpb24uYworIntPYmpEaXJ9d2luZG93LmMueCIgIMQgIDpzcmM6d2luZG93LmMKKyJ7T2JqRGlyfXdzZGVidWcuYy54IiAgxCAgOnNyYzp3c2RlYnVnLmMKKworCisjIyMgT3B0aW9uYWwgRGVwZW5kZW5jaWVzICMjIworIyMjIEJ1aWxkIHRoaXMgdGFyZ2V0IHRvIGdlbmVyYXRlICJpbmNsdWRlIGZpbGUiIGRlcGVuZGVuY2llcy4gIyMjCisKK0RlcGVuZGVuY2llcyAgxCAgJE91dE9mRGF0ZQorCU1ha2VEZXBlbmQgtgorCQktYXBwZW5kIHtNQUtFRklMRX0gtgorCQktaWdub3JlICJ7Q0luY2x1ZGVzfSIgtgorCQktb2JqZGlyICJ7T2JqRGlyfSIgtgorCQktb2JqZXh0IC54ILYKKwkJe0luY2x1ZGVzfSC2CisJCXtTcmNGaWxlc30KKworCisjKioqIERlcGVuZGVuY2llczogQ3V0IGhlcmUgKioqCisjIFRoZXNlIGRlcGVuZGVuY2llcyB3ZXJlIHByb2R1Y2VkIGF0IDEyOjE3OjAyIFVociBvbiBGcmUsIDI5LiBEZXogMjAwMCBieSBNYWtlRGVwZW5kCisKKzpvYmo6YnVmZmVyLmMueAnEICC2CisJOnNyYzpidWZmZXIuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6Y2hhcnNldC5jLngJxCAgtgorCTpzcmM6Y2hhcnNldC5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajpkaWZmLmMueAnEICC2CisJOnNyYzpkaWZmLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOmRpZ3JhcGguYy54CcQgILYKKwk6c3JjOmRpZ3JhcGguYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6ZWRpdC5jLngJxCAgtgorCTpzcmM6ZWRpdC5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajpldmFsLmMueAnEICC2CisJOnNyYzpldmFsLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6dmVyc2lvbi5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajpleF9jbWRzLmMueAnEICC2CisJOnNyYzpleF9jbWRzLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOmV4X2NtZHMyLmMueAnEICC2CisJOnNyYzpleF9jbWRzMi5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajpleF9kb2NtZC5jLngJxCAgtgorCTpzcmM6ZXhfZG9jbWQuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6ZXhfZXZhbC5jLngJxCAgtgorCTpzcmM6ZXhfZXZhbC5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajpleF9nZXRsbi5jLngJxCAgtgorCTpzcmM6ZXhfZ2V0bG4uYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6ZmlsZWlvLmMueAnEICC2CisJOnNyYzpmaWxlaW8uYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6Zm9sZC5jLngJxCAgtgorCTpzcmM6Zm9sZC5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajpnZXRjaGFyLmMueAnEICC2CisJOnNyYzpnZXRjaGFyLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOmd1aS5jLngJxCAgtgorCTpzcmM6Z3VpLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOmd1aV9tYWMuYy54CcQgILYKKwk6c3JjOmd1aV9tYWMuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpzcmM6Z3VpX21hYy5yCcQgILYKKwk6c3JjOmd1aV9tYWMuciC2CisJIntSSW5jbHVkZXN9IlN5c1R5cGVzLnIgtgorCSJ7UkluY2x1ZGVzfSJUeXBlcy5yILYKKwk6c3JjOnZlcnNpb24uaCC2CisJIntSSW5jbHVkZXN9IkZvbnRzLnIgtgorCSJ7UkluY2x1ZGVzfSJJbnRsUmVzb3VyY2VzLnIgtgorCSJ7UkluY2x1ZGVzfSJTb3VuZC5yILYKKwkie1JJbmNsdWRlc30iQ29uZGl0aW9uYWxNYWNyb3MuciC2CisJIntSSW5jbHVkZXN9Ik1hY1R5cGVzLnIgtgorCSJ7UkluY2x1ZGVzfSJDb250cm9scy5yILYKKwkie1JJbmNsdWRlc30iQ29udHJvbERlZmluaXRpb25zLnIgtgorCSJ7UkluY2x1ZGVzfSJNYWNXaW5kb3dzLnIgtgorCSJ7UkluY2x1ZGVzfSJEaWFsb2dzLnIgtgorCSJ7UkluY2x1ZGVzfSJNZW51cy5yILYKKwkie1JJbmNsdWRlc30iSWNvbnMuciC2CisJIntSSW5jbHVkZXN9IkZpbmRlci5yILYKKwkie1JJbmNsdWRlc30iUXVpY2tkcmF3LnIgtgorCSJ7UkluY2x1ZGVzfSJQcm9jZXNzZXMuciC2CisJIntSSW5jbHVkZXN9IkFwcGxlRXZlbnRzLnIgtgorCSJ7UkluY2x1ZGVzfSJTY3JpcHQuciC2CisJIntSSW5jbHVkZXN9IkNvbGxlY3Rpb25zLnIgtgorCSJ7UkluY2x1ZGVzfSJQaWN0VXRpbHMuciC2CisJIntSSW5jbHVkZXN9IkFFRGF0YU1vZGVsLnIKKworOm9iajppZl9jc2NvcGUuYy54CcQgILYKKwk6c3JjOmlmX2NzY29wZS5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOmlmX2NzY29wZS5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajptYWluLmMueAnEICC2CisJOnNyYzptYWluLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6ZmFyc2kuYyC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6bWFyay5jLngJxCAgtgorCTpzcmM6bWFyay5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajptZW1maWxlLmMueAnEICC2CisJOnNyYzptZW1maWxlLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOm1lbWxpbmUuYy54CcQgILYKKwk6c3JjOm1lbWxpbmUuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6bWVudS5jLngJxCAgtgorCTpzcmM6bWVudS5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajptZXNzYWdlLmMueAnEICC2CisJOnNyYzptZXNzYWdlLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOm1pc2MxLmMueAnEICC2CisJOnNyYzptaXNjMS5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOnZlcnNpb24uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6bWlzYzIuYy54CcQgILYKKwk6c3JjOm1pc2MyLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOm1vdmUuYy54CcQgILYKKwk6c3JjOm1vdmUuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6bXVsdGlieXRlLmMueAnEICC2CisJOnNyYzptdWx0aWJ5dGUuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6bm9ybWFsLmMueAnEICC2CisJOnNyYzpub3JtYWwuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6b3BzLmMueAnEICC2CisJOnNyYzpvcHMuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6b3B0aW9uLmMueAnEICC2CisJOnNyYzpvcHRpb24uYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6b3NfbWFjLmMueAnEICC2CisJOnNyYzpvc19tYWMuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6cHR5LmMueAnEICC2CisJOnNyYzpwdHkuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6cXVpY2tmaXguYy54CcQgILYKKwk6c3JjOnF1aWNrZml4LmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOnJlZ2V4cC5jLngJxCAgtgorCTpzcmM6cmVnZXhwLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOnNjcmVlbi5jLngJxCAgtgorCTpzcmM6c2NyZWVuLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOnNlYXJjaC5jLngJxCAgtgorCTpzcmM6c2VhcmNoLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOnN5bnRheC5jLngJxCAgtgorCTpzcmM6c3ludGF4LmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOnRhZy5jLngJxCAgtgorCTpzcmM6dGFnLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybworCis6b2JqOnRlcm0uYy54CcQgILYKKwk6c3JjOnRlcm0uYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6dGVybWxpYi5jLngJxCAgtgorCTpzcmM6dGVybWxpYi5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajp1aS5jLngJxCAgtgorCTpzcmM6dWkuYyC2CisJOnNyYzp2aW0uaCC2CisJOnNyYzphdXRvOmNvbmZpZy5oILYKKwk6c3JjOmZlYXR1cmUuaCC2CisJOnNyYzpvc191bml4LmggtgorCTpzcmM6b3NfbWFjLmggtgorCTpzcmM6d29ya3Nob3AuaCC2CisJOnNyYzphc2NpaS5oILYKKwk6c3JjOmtleW1hcC5oILYKKwk6c3JjOnRlcm0uaCC2CisJOnNyYzptYWNyb3MuaCC2CisJOnNyYzpzdHJ1Y3RzLmggtgorCTpzcmM6Z2xvYmFscy5oILYKKwk6c3JjOm9wdGlvbi5oILYKKwk6c3JjOmV4X2NtZHMuaCC2CisJOnNyYzpwcm90by5oILYKKwk6c3JjOmludGVncmF0aW9uLmggtgorCTpzcmM6d3NkZWJ1Zy5oILYKKwk6c3JjOnJlZ2V4cC5oILYKKwk6c3JjOmd1aS5oILYKKwk6c3JjOmZhcnNpLmggtgorCTpzcmM6cHJvdG86b3NfdW5peC5wcm8gtgorCTpzcmM6cHJvdG86b3NfbWFjLnBybyC2CisJOnNyYzpwcm90bzpidWZmZXIucHJvILYKKwk6c3JjOnByb3RvOmNoYXJzZXQucHJvILYKKwk6c3JjOnByb3RvOmlmX2NzY29wZS5wcm8gtgorCTpzcmM6cHJvdG86ZGlmZi5wcm8gtgorCTpzcmM6cHJvdG86ZGlncmFwaC5wcm8gtgorCTpzcmM6cHJvdG86ZWRpdC5wcm8gtgorCTpzcmM6cHJvdG86ZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kcy5wcm8gtgorCTpzcmM6cHJvdG86ZXhfY21kczIucHJvILYKKwk6c3JjOnByb3RvOmV4X2RvY21kLnBybyC2CisJOnNyYzpwcm90bzpleF9ldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9nZXRsbi5wcm8gtgorCTpzcmM6cHJvdG86ZmlsZWlvLnBybyC2CisJOnNyYzpwcm90bzpmb2xkLnBybyC2CisJOnNyYzpwcm90bzpnZXRjaGFyLnBybyC2CisJOnNyYzpwcm90bzpoYW5ndWxpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFpbi5wcm8gtgorCTpzcmM6cHJvdG86bWFyay5wcm8gtgorCTpzcmM6cHJvdG86bWVtZmlsZS5wcm8gtgorCTpzcmM6cHJvdG86bWVtbGluZS5wcm8gtgorCTpzcmM6cHJvdG86bWVudS5wcm8gtgorCTpzcmM6cHJvdG86bWVzc2FnZS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzEucHJvILYKKwk6c3JjOnByb3RvOm1pc2MyLnBybyC2CisJOnNyYzpwcm90bzptb3ZlLnBybyC2CisJOnNyYzpwcm90bzptdWx0aWJ5dGUucHJvILYKKwk6c3JjOnByb3RvOm5vcm1hbC5wcm8gtgorCTpzcmM6cHJvdG86b3BzLnBybyC2CisJOnNyYzpwcm90bzpvcHRpb24ucHJvILYKKwk6c3JjOnByb3RvOnF1aWNrZml4LnBybyC2CisJOnNyYzpwcm90bzpyZWdleHAucHJvILYKKwk6c3JjOnByb3RvOnNjcmVlbi5wcm8gtgorCTpzcmM6cHJvdG86c2VhcmNoLnBybyC2CisJOnNyYzpwcm90bzpzeW50YXgucHJvILYKKwk6c3JjOnByb3RvOnRhZy5wcm8gtgorCTpzcmM6cHJvdG86dGVybS5wcm8gtgorCTpzcmM6cHJvdG86dGVybWxpYi5wcm8gtgorCTpzcmM6cHJvdG86dWkucHJvILYKKwk6c3JjOnByb3RvOnVuZG8ucHJvILYKKwk6c3JjOnByb3RvOnZlcnNpb24ucHJvILYKKwk6c3JjOnByb3RvOndpbmRvdy5wcm8gtgorCTpzcmM6cHJvdG86aWZfcHl0aG9uLnBybyC2CisJOnNyYzpwcm90bzppZl90Y2wucHJvILYKKwk6c3JjOnByb3RvOmlmX3J1YnkucHJvILYKKwk6c3JjOnByb3RvOmd1aS5wcm8gtgorCTpzcmM6cHJvdG86cHR5LnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrLnBybyC2CisJOnNyYzpwcm90bzpndWlfZ3RrX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21vdGlmLnBybyC2CisJOnNyYzpwcm90bzpndWlfYXRoZW5hLnBybyC2CisJOnNyYzpwcm90bzpndWlfbWFjLnBybyC2CisJOnNyYzpwcm90bzpndWlfeDExLnBybyC2CisJOnNyYzpwcm90bzp3b3Jrc2hvcC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcGVybHNmaW8ucHJvCisKKzpvYmo6dW5kby5jLngJxCAgtgorCTpzcmM6dW5kby5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajp2ZXJzaW9uLmMueAnEICC2CisJOnNyYzp2ZXJzaW9uLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6dmVyc2lvbi5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajp3aW5kb3cuYy54CcQgILYKKwk6c3JjOndpbmRvdy5jILYKKwk6c3JjOnZpbS5oILYKKwk6c3JjOmF1dG86Y29uZmlnLmggtgorCTpzcmM6ZmVhdHVyZS5oILYKKwk6c3JjOm9zX3VuaXguaCC2CisJOnNyYzpvc19tYWMuaCC2CisJOnNyYzp3b3Jrc2hvcC5oILYKKwk6c3JjOmFzY2lpLmggtgorCTpzcmM6a2V5bWFwLmggtgorCTpzcmM6dGVybS5oILYKKwk6c3JjOm1hY3Jvcy5oILYKKwk6c3JjOnN0cnVjdHMuaCC2CisJOnNyYzpnbG9iYWxzLmggtgorCTpzcmM6b3B0aW9uLmggtgorCTpzcmM6ZXhfY21kcy5oILYKKwk6c3JjOnByb3RvLmggtgorCTpzcmM6aW50ZWdyYXRpb24uaCC2CisJOnNyYzp3c2RlYnVnLmggtgorCTpzcmM6cmVnZXhwLmggtgorCTpzcmM6Z3VpLmggtgorCTpzcmM6ZmFyc2kuaCC2CisJOnNyYzpwcm90bzpvc191bml4LnBybyC2CisJOnNyYzpwcm90bzpvc19tYWMucHJvILYKKwk6c3JjOnByb3RvOmJ1ZmZlci5wcm8gtgorCTpzcmM6cHJvdG86Y2hhcnNldC5wcm8gtgorCTpzcmM6cHJvdG86aWZfY3Njb3BlLnBybyC2CisJOnNyYzpwcm90bzpkaWZmLnBybyC2CisJOnNyYzpwcm90bzpkaWdyYXBoLnBybyC2CisJOnNyYzpwcm90bzplZGl0LnBybyC2CisJOnNyYzpwcm90bzpldmFsLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzLnBybyC2CisJOnNyYzpwcm90bzpleF9jbWRzMi5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZG9jbWQucHJvILYKKwk6c3JjOnByb3RvOmV4X2V2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2dldGxuLnBybyC2CisJOnNyYzpwcm90bzpmaWxlaW8ucHJvILYKKwk6c3JjOnByb3RvOmZvbGQucHJvILYKKwk6c3JjOnByb3RvOmdldGNoYXIucHJvILYKKwk6c3JjOnByb3RvOmhhbmd1bGluLnBybyC2CisJOnNyYzpwcm90bzptYWluLnBybyC2CisJOnNyYzpwcm90bzptYXJrLnBybyC2CisJOnNyYzpwcm90bzptZW1maWxlLnBybyC2CisJOnNyYzpwcm90bzptZW1saW5lLnBybyC2CisJOnNyYzpwcm90bzptZW51LnBybyC2CisJOnNyYzpwcm90bzptZXNzYWdlLnBybyC2CisJOnNyYzpwcm90bzptaXNjMS5wcm8gtgorCTpzcmM6cHJvdG86bWlzYzIucHJvILYKKwk6c3JjOnByb3RvOm1vdmUucHJvILYKKwk6c3JjOnByb3RvOm11bHRpYnl0ZS5wcm8gtgorCTpzcmM6cHJvdG86bm9ybWFsLnBybyC2CisJOnNyYzpwcm90bzpvcHMucHJvILYKKwk6c3JjOnByb3RvOm9wdGlvbi5wcm8gtgorCTpzcmM6cHJvdG86cXVpY2tmaXgucHJvILYKKwk6c3JjOnByb3RvOnJlZ2V4cC5wcm8gtgorCTpzcmM6cHJvdG86c2NyZWVuLnBybyC2CisJOnNyYzpwcm90bzpzZWFyY2gucHJvILYKKwk6c3JjOnByb3RvOnN5bnRheC5wcm8gtgorCTpzcmM6cHJvdG86dGFnLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtLnBybyC2CisJOnNyYzpwcm90bzp0ZXJtbGliLnBybyC2CisJOnNyYzpwcm90bzp1aS5wcm8gtgorCTpzcmM6cHJvdG86dW5kby5wcm8gtgorCTpzcmM6cHJvdG86dmVyc2lvbi5wcm8gtgorCTpzcmM6cHJvdG86d2luZG93LnBybyC2CisJOnNyYzpwcm90bzppZl9weXRob24ucHJvILYKKwk6c3JjOnByb3RvOmlmX3RjbC5wcm8gtgorCTpzcmM6cHJvdG86aWZfcnVieS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpLnBybyC2CisJOnNyYzpwcm90bzpwdHkucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGsucHJvILYKKwk6c3JjOnByb3RvOmd1aV9ndGtfeDExLnBybyC2CisJOnNyYzpwcm90bzpndWlfbW90aWYucHJvILYKKwk6c3JjOnByb3RvOmd1aV9hdGhlbmEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tYWMucHJvILYKKwk6c3JjOnByb3RvOmd1aV94MTEucHJvILYKKwk6c3JjOnByb3RvOndvcmtzaG9wLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsLnBybyC2CisJOnNyYzpwcm90bzppZl9wZXJsc2Zpby5wcm8KKworOm9iajp3c2RlYnVnLmMueAnEICC2CisJOnNyYzp3c2RlYnVnLmMgtgorCTpzcmM6dmltLmggtgorCTpzcmM6YXV0bzpjb25maWcuaCC2CisJOnNyYzpmZWF0dXJlLmggtgorCTpzcmM6b3NfdW5peC5oILYKKwk6c3JjOm9zX21hYy5oILYKKwk6c3JjOndvcmtzaG9wLmggtgorCTpzcmM6YXNjaWkuaCC2CisJOnNyYzprZXltYXAuaCC2CisJOnNyYzp0ZXJtLmggtgorCTpzcmM6bWFjcm9zLmggtgorCTpzcmM6c3RydWN0cy5oILYKKwk6c3JjOmdsb2JhbHMuaCC2CisJOnNyYzpvcHRpb24uaCC2CisJOnNyYzpleF9jbWRzLmggtgorCTpzcmM6cHJvdG8uaCC2CisJOnNyYzppbnRlZ3JhdGlvbi5oILYKKwk6c3JjOndzZGVidWcuaCC2CisJOnNyYzpyZWdleHAuaCC2CisJOnNyYzpndWkuaCC2CisJOnNyYzpmYXJzaS5oILYKKwk6c3JjOnByb3RvOm9zX3VuaXgucHJvILYKKwk6c3JjOnByb3RvOm9zX21hYy5wcm8gtgorCTpzcmM6cHJvdG86YnVmZmVyLnBybyC2CisJOnNyYzpwcm90bzpjaGFyc2V0LnBybyC2CisJOnNyYzpwcm90bzppZl9jc2NvcGUucHJvILYKKwk6c3JjOnByb3RvOmRpZmYucHJvILYKKwk6c3JjOnByb3RvOmRpZ3JhcGgucHJvILYKKwk6c3JjOnByb3RvOmVkaXQucHJvILYKKwk6c3JjOnByb3RvOmV2YWwucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMucHJvILYKKwk6c3JjOnByb3RvOmV4X2NtZHMyLnBybyC2CisJOnNyYzpwcm90bzpleF9kb2NtZC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZXZhbC5wcm8gtgorCTpzcmM6cHJvdG86ZXhfZ2V0bG4ucHJvILYKKwk6c3JjOnByb3RvOmZpbGVpby5wcm8gtgorCTpzcmM6cHJvdG86Zm9sZC5wcm8gtgorCTpzcmM6cHJvdG86Z2V0Y2hhci5wcm8gtgorCTpzcmM6cHJvdG86aGFuZ3VsaW4ucHJvILYKKwk6c3JjOnByb3RvOm1haW4ucHJvILYKKwk6c3JjOnByb3RvOm1hcmsucHJvILYKKwk6c3JjOnByb3RvOm1lbWZpbGUucHJvILYKKwk6c3JjOnByb3RvOm1lbWxpbmUucHJvILYKKwk6c3JjOnByb3RvOm1lbnUucHJvILYKKwk6c3JjOnByb3RvOm1lc3NhZ2UucHJvILYKKwk6c3JjOnByb3RvOm1pc2MxLnBybyC2CisJOnNyYzpwcm90bzptaXNjMi5wcm8gtgorCTpzcmM6cHJvdG86bW92ZS5wcm8gtgorCTpzcmM6cHJvdG86bXVsdGlieXRlLnBybyC2CisJOnNyYzpwcm90bzpub3JtYWwucHJvILYKKwk6c3JjOnByb3RvOm9wcy5wcm8gtgorCTpzcmM6cHJvdG86b3B0aW9uLnBybyC2CisJOnNyYzpwcm90bzpxdWlja2ZpeC5wcm8gtgorCTpzcmM6cHJvdG86cmVnZXhwLnBybyC2CisJOnNyYzpwcm90bzpzY3JlZW4ucHJvILYKKwk6c3JjOnByb3RvOnNlYXJjaC5wcm8gtgorCTpzcmM6cHJvdG86c3ludGF4LnBybyC2CisJOnNyYzpwcm90bzp0YWcucHJvILYKKwk6c3JjOnByb3RvOnRlcm0ucHJvILYKKwk6c3JjOnByb3RvOnRlcm1saWIucHJvILYKKwk6c3JjOnByb3RvOnVpLnBybyC2CisJOnNyYzpwcm90bzp1bmRvLnBybyC2CisJOnNyYzpwcm90bzp2ZXJzaW9uLnBybyC2CisJOnNyYzpwcm90bzp3aW5kb3cucHJvILYKKwk6c3JjOnByb3RvOmlmX3B5dGhvbi5wcm8gtgorCTpzcmM6cHJvdG86aWZfdGNsLnBybyC2CisJOnNyYzpwcm90bzppZl9ydWJ5LnBybyC2CisJOnNyYzpwcm90bzpndWkucHJvILYKKwk6c3JjOnByb3RvOnB0eS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0ay5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2d0a194MTEucHJvILYKKwk6c3JjOnByb3RvOmd1aV9tb3RpZi5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX2F0aGVuYS5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX21hYy5wcm8gtgorCTpzcmM6cHJvdG86Z3VpX3gxMS5wcm8gtgorCTpzcmM6cHJvdG86d29ya3Nob3AucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmwucHJvILYKKwk6c3JjOnByb3RvOmlmX3BlcmxzZmlvLnBybwpkaWZmIC0tZ2l0IGEvc3JjL01ha2VfbXZjLm1hayBiL3NyYy9NYWtlX212Yy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNzdiNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlX212Yy5tYWsKQEAgLTAsMCArMSw4ODggQEAKKyMgTWFrZWZpbGUgZm9yIFZpbSBvbiBXaW4zMiAoV2luZG93cyBOVCBhbmQgV2luZG93cyA5NSksIHVzaW5nIHRoZQorIyBNaWNyb3NvZnQgVmlzdWFsIEMrKyAyLnggYW5kIE1TVkMgNC54IGNvbXBpbGVycyAob3IgbmV3ZXIpLgorIyBJdCBidWlsZHMgb24gV2luZG93cyA5NSBhbmQgYWxsIGZvdXIgTlQgcGxhdGZvcm1zOiBpMzg2LCBBbHBoYSwgTUlQUywgYW5kCisjIFBvd2VyUEMuICBUaGUgTlQvaTM4NiBiaW5hcnkgYW5kIHRoZSBXaW5kb3dzIDk1IGJpbmFyeSBhcmUgaWRlbnRpY2FsLgorIworIyBUaGlzIG1ha2VmaWxlIGNhbiBidWlsZCB0aGUgY29uc29sZSwgR1VJLCBPTEUtZW5hYmxlLCBQZXJsLWVuYWJsZWQgYW5kCisjIFB5dGhvbi1lbmFibGVkIHZlcnNpb25zIG9mIHZpbSBmb3IgV2luMzIgcGxhdGZvcm1zLgorIworIyBXaGVuIGNvbXBpbGluZyBkaWZmZXJlbnQgdmVyc2lvbnMsIGRvICJubWFrZSBjbGVhbiIgZmlyc3QhCisjCisjIFRoZSBiYXNpYyBjb21tYW5kIGxpbmUgdG8gYnVpbGQgdmltIGlzOgorIwlubWFrZSAtZiBNYWtlX212Yy5tYWsKKyMgVGhpcyB3aWxsIGJ1aWxkIHRoZSBjb25zb2xlIHZlcnNpb24gb2YgdmltIHdpdGggbm8gYWRkaXRpb25hbCBpbnRlcmZhY2VzLgorIyBUbyBhZGQgaW50ZXJmYWNlcywgZGVmaW5lIGFueSBvZiB0aGUgZm9sbG93aW5nOgorIwlHVUkgaW50ZXJmYWNlOiBHVUk9eWVzIChkZWZhdWx0IGlzIG5vKQorIwlPTEUgaW50ZXJmYWNlOiBPTEU9eWVzICh1c3VhbGx5IHdpdGggR1VJPXllcykKKyMJTXVsdGlieXRlIHN1cHBvcnQ6IE1CWVRFPXllcworIwlJTUUgc3VwcG9ydDogSU1FPXllcwkocmVxdWlyZXMgR1VJPXllcykKKyMJICBEWU5BTUlDX0lNRT1beWVzIG9yIG5vXSAgKHRvIGxvYWQgdGhlIGltbTMyLmRsbCBkeW5hbWljYWxseSwgZGVmYXVsdAorIwkgIGlzIHllcykKKyMJR2xvYmFsIElNRSBzdXBwb3J0OiBHSU1FPXllcyAocmVxdWlyZXMgR1VJPXllcykKKyMJUGVybCBpbnRlcmZhY2U6CisjCSAgUEVSTD1bUGF0aCB0byBQZXJsIGRpcmVjdG9yeV0KKyMJICBEWU5BTUlDX1BFUkw9eWVzICh0byBsb2FkIHRoZSBQZXJsIERMTCBkeW5hbWljYWxseSkKKyMJICBQRVJMX1ZFUj1bUGVybCB2ZXJzaW9uLCBpbiB0aGUgZm9ybSA1NSAoNS4wMDUpLCA1NiAoNS42LngpLCBldGNdIChkZWZhdWx0IGlzIDU2KQorIwlQeXRob24gaW50ZXJmYWNlOgorIwkgIFBZVEhPTj1bUGF0aCB0byBQeXRob24gZGlyZWN0b3J5XQorIwkgIERZTkFNSUNfUFlUSE9OPXllcyAodG8gbG9hZCB0aGUgUHl0aG9uIERMTCBkeW5hbWljYWxseSkKKyMJICBQWVRIT05fVkVSPVtQeXRob24gdmVyc2lvbiwgZWcgMTUsIDIwXSAgKGRlZmF1bHQgaXMgMjIpCisjCVJ1YnkgaW50ZXJmYWNlOgorIwkgIFJVQlk9W1BhdGggdG8gUnVieSBkaXJlY3RvcnldCisjCSAgRFlOQU1JQ19SVUJZPXllcyAodG8gbG9hZCB0aGUgUnVieSBETEwgZHluYW1pY2FsbHkpCisjCSAgUlVCWV9WRVI9W1J1YnkgdmVyc2lvbiwgZWcgMTYsIDE3XSAoZGVmYXVsdCBpcyAxOCkKKyMJICBSVUJZX1ZFUl9MT05HPVtSdWJ5IHZlcnNpb24sIGVnIDEuNiwgMS43XSAoZGVmYXVsdCBpcyAxLjgpCisjCSAgICBZb3UgbXVzdCBzZXQgUlVCWV9WRVJfTE9ORyB3aGVuIGNoYW5nZSBSVUJZX1ZFUi4KKyMJVGNsIGludGVyZmFjZToKKyMJICBUQ0w9W1BhdGggdG8gVGNsIGRpcmVjdG9yeV0KKyMJICBEWU5BTUlDX1RDTD15ZXMgKHRvIGxvYWQgdGhlIFRjbCBETEwgZHluYW1pY2FsbHkpCisjCSAgVENMX1ZFUj1bVGNsIHZlcnNpb24sIGUuZy4gODAsIDgzXSAgKGRlZmF1bHQgaXMgODMpCisjCSAgVENMX1ZFUl9MT05HPVtUY2wgdmVyc2lvbiwgZWcgOC4zXSAoZGVmYXVsdCBpcyA4LjMpCisjCSAgICBZb3UgbXVzdCBzZXQgVENMX1ZFUl9MT05HIHdoZW4geW91IHNldCBUQ0xfVkVSLgorIwlEZWJ1ZyB2ZXJzaW9uOiBERUJVRz15ZXMKKyMJTWFwZmlsZTogTUFQPVtubywgeWVzIG9yIGxpbmVzXSAoZGVmYXVsdCBpcyB5ZXMpCisjCSAgbm86ICAgIERvbid0IHdyaXRlIGEgbWFwZmlsZS4KKyMJICB5ZXM6ICAgV3JpdGUgYSBub3JtYWwgbWFwZmlsZS4KKyMJICBsaW5lczogV3JpdGUgYSBtYXBmaWxlIHdpdGggbGluZSBudW1iZXJzIChvbmx5IGZvciBWQzYgYW5kIGxhdGVyKQorIwlTTmlGRisgaW50ZXJmYWNlOiBTTklGRj15ZXMKKyMJQ3Njb3BlIHN1cHBvcnQ6IENTQ09QRT15ZXMKKyMJSWNvbnYgbGlicmFyeSBzdXBwb3J0IChhbHdheXMgZHluYW1pY2FsbHkgbG9hZGVkKToKKyMJICBJQ09OVj1beWVzIG9yIG5vXSAgKGRlZmF1bHQgaXMgeWVzKQorIwlJbnRsIGxpYnJhcnkgc3VwcG9ydCAoYWx3YXlzIGR5bmFtaWNhbGx5IGxvYWRlZCk6CisjCSAgR0VUVEVYVD1beWVzIG9yIG5vXSAgKGRlZmF1bHQgaXMgeWVzKQorIwlTZWUgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nZXR0ZXh0LworIyAgICAgICBQb3N0U2NyaXB0IHByaW50aW5nOiBQT1NUU0NSSVBUPXllcyAoZGVmYXVsdCBpcyBubykKKyMgICAgICAgRmVhdHVyZSBTZXQ6IEZFQVRVUkVTPVtUSU5ZLCBTTUFMTCwgTk9STUFMLCBCSUcsIG9yIEhVR0VdIChkZWZhdWx0IGlzIEJJRykKKyMgICAgICAgVmVyc2lvbiBTdXBwb3J0OiBXSU5WRVI9WzB4MDQwMCwgMHgwNTAwXSAoZGVmYXVsdCBpcyAweDA0MDApCisjICAgICAgIFByb2Nlc3NvciBWZXJzaW9uOiBDUFVOUj1baTM4NiwgaTQ4NiwgaTU4NiwgaTY4Nl0gKGRlZmF1bHQgaXMgaTM4NikKKyMgICAgICAgT3B0aW1pemF0aW9uOiBPUFRJTUlaRT1bU1BBQ0UsIFNQRUVELCBNQVhTUEVFRF0gKGRlZmF1bHQgaXMgTUFYU1BFRUQpCisjICAgICAgIE5ldGJlYW5zIFN1cHBvcnQ6IE5FVEJFQU5TPVt5ZXMgb3Igbm9dIChkZWZhdWx0IGlzIHllcyBpZiBHVUkgaXMgeWVzKQorIyAgICAgICBYUE0gSW1hZ2UgU3VwcG9ydDogWFBNPVtwYXRoIHRvIFhQTSBkaXJlY3RvcnldCisjCisjIFlvdSBjYW4gY29tYmluZSBhbnkgb2YgdGhlc2UgaW50ZXJmYWNlcworIworIyBFeGFtcGxlOiBUbyBidWlsZCB0aGUgbm9uLWRlYnVnLCBHVUkgdmVyc2lvbiB3aXRoIFBlcmwgaW50ZXJmYWNlOgorIwlubWFrZSAtZiBNYWtlX212Yy5tYWsgR1VJPXllcyBQRVJMPUM6XFBlcmwKKyMKKyMgVG8gYnVpbGQgdXNpbmcgQm9ybGFuZCBDKyssIHVzZSBNYWtlX2JjMy5tYWsgb3IgTWFrZV9iYzUubWFrLgorIworIyBERUJVRyB3aXRoIE1ha2VfbXZjLm1hayBhbmQgTWFrZV9kdmMubWFrOgorIwlUaGlzIG1ha2VmaWxlIGdpdmVzIGEgZmluZW5lc3Mgb2YgY29udHJvbCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluCisjCVZpc3VhbCBDKysgY29uZmlndXJhdGlvbiBmaWxlcy4gIFRoZXJlZm9yZSwgZGVidWdnaW5nIHJlcXVpcmVzIGEgYml0IG9mCisjCWV4dHJhIHdvcmsuCisjCU1ha2VfZHZjLm1hayBpcyBhIFZpc3VhbCBDKysgcHJvamVjdCB0byBhY2Nlc3MgdGhhdCBzdXBwb3J0LgorIwlUbyB1c2UgTWFrZV9kdmMubWFrOgorIwkxKSBCdWlsZCBWaW0gd2l0aCBNYWtlX212Yy5tYWsuCisjCSAgICAgVXNlIGEgIkRFQlVHPXllcyIgYXJndW1lbnQgdG8gYnVpbGQgVmltIHdpdGggZGVidWcgc3VwcG9ydC4KKyMJICAgICBFLmcuIHRoZSBmb2xsb3dpbmcgYnVpbGRzIGd2aW1kLmV4ZToKKyMJCW5tYWtlIC1mIE1ha2VfbXZjLm1hayBkZWJ1Zz15ZXMgZ3VpPXllcworIwkyKSBVc2UgTVMgRGV2c3R1ZGlvIGFuZCBzZXQgaXQgdXAgdG8gYWxsb3cgdGhhdCBmaWxlIHRvIGJlIGRlYnVnZ2VkOgorIwkgICAgaSkgUGFzcyBNYWtlX2R2Yy5tYWsgdG8gdGhlIElERS4KKyMJCSBVc2UgdGhlICJvcGVuIHdvcmtzcGFjZSIgbWVudSBlbnRyeSB0byBsb2FkIE1ha2VfZHZjLm1hay4KKyMJCSBBbHRlcm5hdGl2ZWx5LCBmcm9tIHRoZSBjb21tYW5kIGxpbmU6CisjCQkJbXNkZXYgL25vbG9nbyBNYWtlX2R2Yy5tYWsKKyMJCU5vdGU6IE1ha2VfZHZjLm1hayBpcyBpbiBWQzQuMCBmb3JtYXQuIExhdGVyIFZDIHZlcnNpb25zIHNlZQorIwkJdGhpcyBhbmQgb2ZmZXIgdG8gY29udmVydCBpdCB0byB0aGVpciBvd24gZm9ybWF0LiBBY2NlcHQgdGhhdC4KKyMJCUl0IGNyZWF0ZXMgYSBmaWxlIGNhbGxlZCBNYWtlX2R2Yy5kc3cgd2hpY2ggY2FuIHRoZW4gYmUgdXNlZAorIwkJZm9yIGZ1cnRoZXIgb3BlcmF0aW9ucy4gIEUuZy4KKyMJCSAgICBtc2RldiAvbm9sb2dvIE1ha2VfZHZjLmRzdworIwkgICAgaWkpIFNldCB0aGUgYnVpbHQgZXhlY3V0YWJsZSBmb3IgZGVidWdnaW5nOgorIwkJYSkgQWx0K0Y3L0RlYnVnIHRha2VzIHlvdSB0byB0aGUgRGVidWcgZGlhbG9nLgorIwkJYikgRmlsbCAiRXhlY3V0YWJsZSBmb3IgZGVidWcgc2Vzc2lvbiIuIGUuZy4gZ3ZpbWQuZXhlCisjCQljKSBGaWxsICJQcm9ncmFtIGFyZ3VtZW50cyIuIGUuZy4gLVIgZG9zaW5zdC5jCisjCQlkKSBDb21wbGV0ZSB0aGUgZGlhbG9nCisjCTMpIFlvdSBjYW4gbm93IGRlYnVnIHRoZSBleGVjdXRhYmxlIHlvdSBidWlsdCB3aXRoIE1ha2VfbXZjLm1haworIworIwlOb3RlOiBNYWtlX2R2Yy5tYWsgYnVpbGRzIHZpbXJ1bi5leGUsIGJlY2F1c2UgaXQgbXVzdCBidWlsZCBzb21ldGhpbmcKKyMJdG8gYmUgYSB2YWxpZCBtYWtlZmlsZS4uCisKKyMjIyBTZWUgZmVhdHVyZS5oIGZvciBhIGxpc3Qgb2Ygb3B0aW9uYWxzLgorIyBJZiB5b3Ugd2FudCB0byBidWlsZCBzb21lIG9wdGlvbmFsIGZlYXR1cmVzIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBzb3VyY2UsCisjIHlvdSBjYW4gc2V0IERFRklORVMgb24gdGhlIGNvbW1hbmQgbGluZSwgZS5nLiwKKyMJbm1ha2UgLWYgbWFrZWZpbGUubXZjICJERUZJTkVTPS1ERU1BQ1NfVEFHUyIKKworIyBCdWlsZCBvbiBib3RoIFdpbmRvd3MgTlQgYW5kIFdpbmRvd3MgOTUKKworVEFSR0VUT1MgPSBCT1RICisKKyMgU2VsZWN0IG9uZSBvZiBlaWdodCBvYmplY3QgY29kZSBkaXJlY3RvcmllcywgZGVwZW5kcyBvbiBHVUksIE9MRSBhbmQgREVCVUcuCisjIElmIHlvdSBjaGFuZ2Ugc29tZXRoaW5nIGVsc2UsIGRvICJtYWtlIGNsZWFuIiBmaXJzdCEKKyFpZiAiJChHVUkpIiA9PSAieWVzIgorT0JKRElSID0gLlxPYmpHCishZWxzZQorT0JKRElSID0gLlxPYmpDCishZW5kaWYKKyFpZiAiJChPTEUpIiA9PSAieWVzIgorT0JKRElSID0gJChPQkpESVIpTworIWVuZGlmCishaWYgIiQoREVCVUcpIiA9PSAieWVzIgorT0JKRElSID0gJChPQkpESVIpZAorIWVuZGlmCisKKyMgbnR3aW4zMi5tYWsgcmVxdWlyZXMgdGhhdCBDUFUgYmUgc2V0IGFwcHJvcHJpYXRlbHkKKworIWlmZGVmIFBST0NFU1NPUl9BUkNISVRFQ1RVUkUKKyMgV2UncmUgb24gV2luZG93cyBOVCBvciB1c2luZyBWQyA2CitDUFUgPSAkKFBST0NFU1NPUl9BUkNISVRFQ1RVUkUpCishIGlmICIkKENQVSkiID09ICJ4ODYiCitDUFUgPSBpMzg2CishIGVuZGlmCishZWxzZSAgIyAhUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRQorIyBXZSdyZSBvbiBXaW5kb3dzIDk1CitDUFUgPSBpMzg2CishZW5kaWYgIyAhUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRQorCisKKyMgQnVpbGQgYSByZXRhaWwgdmVyc2lvbiBieSBkZWZhdWx0CisKKyFpZiAiJChERUJVRykiICE9ICJ5ZXMiCitOT0RFQlVHID0gMQorIWVsc2UKK01BS0VGTEFHU19HVklNRVhUID0gREVCVUc9eWVzCishZW5kaWYKKworCisjIEJ1aWxkIGEgbXVsdGl0aHJlYWRlZCB2ZXJzaW9uIGZvciB0aGUgV2luZG93cyA5NSBkZWFkIGtleXMgaGFjaworIyBDb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgZG9lc24ndCB3b3JrLgorIyBNVUxUSVRIUkVBREVEID0gMQorCisKKyMgR2V0IGFsbCBzb3J0cyBvZiB1c2VmdWwsIHN0YW5kYXJkIG1hY3JvcyBmcm9tIHRoZSBTREsuICAoTm90ZSB0aGF0CisjIE1TVkMgMi4yIGRvZXMgbm90IGluc3RhbGwgPG50d2luMzIubWFrPiBpbiB0aGUgXG1zdmMyMFxpbmNsdWRlCisjIGRpcmVjdG9yeSwgYnV0IHlvdSBjYW4gZmluZCBpdCBpbiBcbXN2YzIwXGluY2x1ZGUgb24gdGhlIENELVJPTS4KKyMgWW91IG1heSBhbHNvIG5lZWQgPHdpbjMyLm1haz4gZnJvbSB0aGUgc2FtZSBwbGFjZS4pCisKKyFpbmNsdWRlIDxudHdpbjMyLm1haz4KKworCisjPj4+Pj4gcGF0aCBvZiB0aGUgY29tcGlsZXIgYW5kIGxpbmtlcjsgbmFtZSBvZiBpbmNsdWRlIGFuZCBsaWIgZGlyZWN0b3JpZXMKKyMgUEFUSCA9IGM6XG1zdmMyMFxiaW47JChQQVRIKQorIyBJTkNMVURFID0gYzpcbXN2YzIwXGluY2x1ZGUKKyMgTElCID0gYzpcbXN2YzIwXGxpYgorCishaWZuZGVmIENUQUdTCitDVEFHUyA9IGN0YWdzCishZW5kaWYKKworIWlmICIkKFNOSUZGKSIgPT0gInllcyIKKyMgU05JRkYgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIFNOaUZGKy4KK1NOSUZGX0lOQ0wgID0gaWZfc25pZmYuaAorU05JRkZfT0JKICAgPSAkKE9CSkRJUikvaWZfc25pZmYub2JqCitTTklGRl9MSUIgICAgPSBzaGVsbDMyLmxpYgorU05JRkZfREVGUyAgPSAtREZFQVRfU05JRkYKKyMgVGhlIFNOaUZGIGludGVncmF0aW9uIG5lZWRzIG11bHRpdGhyZWFkZWQgbGlicmFyaWVzIQorTVVMVElUSFJFQURFRCA9IHllcworIWVuZGlmCisKKyFpZm5kZWYgQ1NDT1BFCitDU0NPUEUgPSB5ZXMKKyFlbmRpZgorCishaWYgIiQoQ1NDT1BFKSIgPT0gInllcyIKKyMgQ1NDT1BFIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBDc2NvcGUKK0NTQ09QRV9JTkNMICA9IGlmX2NzY29wZS5oCitDU0NPUEVfT0JKICAgPSAkKE9CSkRJUikvaWZfY3Njb3BlLm9iagorQ1NDT1BFX0RFRlMgID0gLURGRUFUX0NTQ09QRQorIWVuZGlmCisKKyFpZm5kZWYgTkVUQkVBTlMKK05FVEJFQU5TID0gJChHVUkpCishZW5kaWYKKworIWlmICIkKE5FVEJFQU5TKSIgPT0gInllcyIKKyMgTkVUQkVBTlMgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIE5ldGJlYW5zIGludGVncmF0aW9uCitORVRCRUFOU19QUk8JPSBwcm90by9uZXRiZWFucy5wcm8KK05FVEJFQU5TX09CSgk9ICQoT0JKRElSKS9uZXRiZWFucy5vYmogJChPQkpESVIpL2d1aV9iZXZhbC5vYmoKK05FVEJFQU5TX0RFRlMJPSAtREZFQVRfTkVUQkVBTlNfSU5URworIWlmICIkKERFQlVHKSIgPT0gInllcyIKK05CREVCVUdfREVGUwk9IC1ETkJERUJVRworTkJERUJVR19JTkNMCT0gbmJkZWJ1Zy5oCitOQkRFQlVHX1NSQwk9IG5iZGVidWcuYworIWVuZGlmCitORVRCRUFOU19MSUIgICA9IFdTb2NrMzIubGliCishZW5kaWYKKworIWlmZGVmIFhQTQorIyBYUE0gLSBJbmNsdWRlIHN1cHBvcnQgZm9yIFhQTSBzaWducworIyB5b3UgY2FuIGdldCB4cG0ubGliIGZyb20gaHR0cDovL2lhbXBoZXQubm0ucnUveHBtIG9yIGNyZWF0ZSBpdCB5b3Vyc2VsZgorWFBNX09CSiAgID0gJChPQkpESVIpL3hwbV93MzIub2JqCitYUE1fREVGUyAgPSAtREZFQVRfWFBNX1czMgorWFBNX0xJQiAgID0gJChYUE0pXGxpYlxsaWJYcG0ubGliCitYUE1fSU5DCSAgPSAtSSAkKFhQTSlcaW5jbHVkZQorIWVuZGlmCisKKyFpZiBkZWZpbmVkKFVTRV9NU1ZDUlQpCitDVkFSUyA9ICQoY3ZhcnNkbGwpCishZWxzZWlmIGRlZmluZWQoTVVMVElUSFJFQURFRCkKK0NWQVJTID0gJChjdmFyc210KQorIWVsc2UKK0NWQVJTID0gJChjdmFycykKKyFlbmRpZgorCisjIG5lZWQgYWR2YXBpMzIubGliIGZvciBHZXRVc2VyTmFtZSgpCisjIG5lZWQgc2hlbGwzMi5saWIgZm9yIEV4dHJhY3RJY29uKCkKKyMgZ2RpMzIubGliIGFuZCBjb21kbGczMi5saWIgZm9yIHByaW50aW5nIHN1cHBvcnQKKyMgb2xlMzIubGliIGFuZCB1dWlkLmxpYiBhcmUgbmVlZGVkIGZvciBGRUFUX1NIT1JUQ1VUCitDT05fTElCID0gYWR2YXBpMzIubGliIHNoZWxsMzIubGliIGdkaTMyLmxpYiBjb21kbGczMi5saWIgb2xlMzIubGliIHV1aWQubGliCishaWYgIiQoVkM2KSIgPT0gInllcyIKK0NPTl9MSUIgPSAkKENPTl9MSUIpIC9ERUxBWUxPQUQ6Y29tZGxnMzIuZGxsIC9ERUxBWUxPQUQ6b2xlMzIuZGxsIERlbGF5SW1wLmxpYgorIWVuZGlmCisKKyMjIyBTZXQgdGhlIGRlZmF1bHQgJChXSU5WRVIpIHRvIG1ha2UgaXQgd29yayB3aXRoIFZDKys3LjAgKFZTLk5FVCkKKyMgIFdoZW4gc2V0IHRvIDB4MDUwMCAiOmJyb3dzZSIgc3RvcHMgd29ya2luZy4KKyFpZm5kZWYgV0lOVkVSCitXSU5WRVIgPSAweDA0MDAKKyFlbmRpZgorCisjIElmIHlvdSBoYXZlIGEgZml4ZWQgZGlyZWN0b3J5IGZvciAkVklNIG9yICRWSU1SVU5USU1FLCBvdGhlciB0aGFuIHRoZSBub3JtYWwKKyMgZGVmYXVsdCwgdXNlIHRoZXNlIGxpbmVzLgorI1ZJTVJDTE9DID0gc29tZXdoZXJlCisjVklNUlVOVElNRURJUiA9IHNvbWV3aGVyZQorCitDRkxBR1MgPSAtYyAvVzMgL25vbG9nbyAkKENWQVJTKSAtSS4gLUlwcm90byAtREhBVkVfUEFUSERFRiAtRFdJTjMyIFwKKwkJJChTTklGRl9ERUZTKSAkKENTQ09QRV9ERUZTKSAkKE5FVEJFQU5TX0RFRlMpIFwKKwkJJChOQkRFQlVHX0RFRlMpICQoWFBNX0RFRlMpIFwKKwkJJChERUZJTkVTKSAtRFdJTlZFUj0kKFdJTlZFUikgLURfV0lOMzJfV0lOTlQ9JChXSU5WRVIpCisKKyM+Pj4+PiBlbmQgb2YgY2hvaWNlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyFpZmRlZiBPUworT1NfVFlQRQk9IHdpbm50CitERUxfVFJFRSA9IHJtZGlyIC9zIC9xCishZWxzZQorT1NfVFlQRQk9IHdpbjk1CitERUxfVFJFRSA9IGRlbHRyZWUgL3kKKyFlbmRpZgorCitJTlRESVI9JChPQkpESVIpCitPVVRESVI9JChPQkpESVIpCisKKyMgQ29udmVydCBwcm9jZXNzb3IgSUQgdG8gTVZDLWNvbXBhdGlibGUgbnVtYmVyCishaWYgIiQoQ1BVTlIpIiA9PSAiaTM4NiIKK0NQVUFSRyA9IC9HMworIWVsc2VpZiAiJChDUFVOUikiID09ICJpNDg2IgorQ1BVQVJHID0gL0c0CishZWxzZWlmICIkKENQVU5SKSIgPT0gImk1ODYiCitDUFVBUkcgPSAvRzUKKyFlbHNlaWYgIiQoQ1BVTlIpIiA9PSAiaTY4NiIKK0NQVUFSRyA9IC9HNgorIWVsc2UKK0NQVUFSRyA9CishZW5kaWYKKworIWlmZGVmIE5PREVCVUcKK1ZJTSA9IHZpbQorIWlmICIkKE9QVElNSVpFKSIgPT0gIlNQQUNFIgorT1BURkxBRyA9IC9PMQorIWVsc2VpZiAiJChPUFRJTUlaRSkiID09ICJTUEVFRCIKK09QVEZMQUcgPSAvTzIKKyFlbHNlICMgTUFYU1BFRUQKK09QVEZMQUcgPSAvT3gKKyFlbmRpZgorQ0ZMQUdTID0gJChDRkxBR1MpICQoT1BURkxBRykgLUROREVCVUcgL1ppICQoQ1BVQVJHKQorUkNGTEFHUyA9ICQocmNmbGFncykgJChyY3ZhcnMpIC1ETkRFQlVHCitQREIgPSAvRmQkKE9VVERJUikvCitMSU5LX1BEQiA9IC9QREI6JChPVVRESVIpLworISBpZmRlZiBVU0VfTVNWQ1JUCitDRkxBR1MgPSAkKENGTEFHUykgLU1ECitMSUJDID0gbXN2Y3J0LmxpYgorISBlbHNlaWYgZGVmaW5lZChNVUxUSVRIUkVBREVEKQorTElCQyA9IGxpYmNtdC5saWIKKyEgZWxzZQorTElCQyA9IGxpYmMubGliCishIGVuZGlmCishZWxzZSAgIyBERUJVRworVklNID0gdmltZAorIyBNU1ZDIDQuMQorUERCID0gL0ZkJChPVVRESVIpLworTElOS19QREIgPSAvUERCOiQoT1VURElSKS8KKyMgTVNWQyAyLjIKKyMgUERCID0gL0ZkJChPVVRESVIpL3ZpbS5wZGIKKyMgTElOS19QREIgPSAvUERCOiQoT1VURElSKS92aW0ucGRiCitDRkxBR1MgPSAkKENGTEFHUykgLURfREVCVUcgLURERUJVRyAvWmkgL09kCitSQ0ZMQUdTID0gJChyY2ZsYWdzKSAkKHJjdmFycykgLURfREVCVUcgLURERUJVRworIyBUaGUgL2ZpeGVkOm5vIGlzIG5lZWRlZCBmb3IgUXVhbnRpZnkuIEFzc3VtZSBub3QgNC4/IGFzIHVuc3VwcG9ydGVkIGluIFZDNC4wLgorISBpZiAiJChfTk1BS0VfVkVSKSIgPT0gIiIKK0xJQkMgPQorISBlbHNlCitMSUJDID0gL2ZpeGVkOm5vCishIGVuZGlmCisKKyEgaWZuZGVmIFVTRV9NU1ZDUlQKK0xJQkMgPSAkKExJQkMpIGxpYmNkLmxpYgorISBlbHNlCitDRkxBR1MgPSAkKENGTEFHUykgLU1EZAorTElCQyA9ICQoTElCQykgbXN2Y3J0ZC5saWIKKyEgZW5kaWYKKyFlbmRpZiAjIERFQlVHCisKK0lOQ0wgPQl2aW0uaCBvc193aW4zMi5oIGFzY2lpLmggZmVhdHVyZS5oIGdsb2JhbHMuaCBrZXltYXAuaCBtYWNyb3MuaCBcCisJcHJvdG8uaCBvcHRpb24uaCBzdHJ1Y3RzLmggdGVybS5oICQoU05JRkZfSU5DTCkgJChDU0NPUEVfSU5DTCkgXAorCSQoTkJERUJVR19JTkNMKQorCitPQkogPSBcCisJJChPVVRESVIpXGJ1ZmZlci5vYmogXAorCSQoT1VURElSKVxjaGFyc2V0Lm9iaiBcCisJJChPVVRESVIpXGRpZmYub2JqIFwKKwkkKE9VVERJUilcZGlncmFwaC5vYmogXAorCSQoT1VURElSKVxlZGl0Lm9iaiBcCisJJChPVVRESVIpXGV2YWwub2JqIFwKKwkkKE9VVERJUilcZXhfY21kcy5vYmogXAorCSQoT1VURElSKVxleF9jbWRzMi5vYmogXAorCSQoT1VURElSKVxleF9kb2NtZC5vYmogXAorCSQoT1VURElSKVxleF9ldmFsLm9iaiBcCisJJChPVVRESVIpXGV4X2dldGxuLm9iaiBcCisJJChPVVRESVIpXGZpbGVpby5vYmogXAorCSQoT1VURElSKVxmb2xkLm9iaiBcCisJJChPVVRESVIpXGdldGNoYXIub2JqIFwKKwkkKE9VVERJUilcbWFpbi5vYmogXAorCSQoT1VURElSKVxtYXJrLm9iaiBcCisJJChPVVRESVIpXG1ieXRlLm9iaiBcCisJJChPVVRESVIpXG1lbWZpbGUub2JqIFwKKwkkKE9VVERJUilcbWVtbGluZS5vYmogXAorCSQoT1VURElSKVxtZW51Lm9iaiBcCisJJChPVVRESVIpXG1lc3NhZ2Uub2JqIFwKKwkkKE9VVERJUilcbWlzYzEub2JqIFwKKwkkKE9VVERJUilcbWlzYzIub2JqIFwKKwkkKE9VVERJUilcbW92ZS5vYmogXAorCSQoT1VURElSKVxub3JtYWwub2JqIFwKKwkkKE9VVERJUilcb3BzLm9iaiBcCisJJChPVVRESVIpXG9wdGlvbi5vYmogXAorCSQoT1VURElSKVxvc19tc3dpbi5vYmogXAorCSQoT1VURElSKVxvc193aW4zMi5vYmogXAorCSQoT1VURElSKVxwYXRoZGVmLm9iaiBcCisJJChPVVRESVIpXHF1aWNrZml4Lm9iaiBcCisJJChPVVRESVIpXHJlZ2V4cC5vYmogXAorCSQoT1VURElSKVxzY3JlZW4ub2JqIFwKKwkkKE9VVERJUilcc2VhcmNoLm9iaiBcCisJJChPVVRESVIpXHN5bnRheC5vYmogXAorCSQoT1VURElSKVx0YWcub2JqIFwKKwkkKE9VVERJUilcdGVybS5vYmogXAorCSQoT1VURElSKVx1aS5vYmogXAorCSQoT1VURElSKVx1bmRvLm9iaiBcCisJJChPVVRESVIpXHdpbmRvdy5vYmogXAorCSQoT1VURElSKVx2aW0ucmVzCisKKyFpZiAiJChPTEUpIiA9PSAieWVzIgorQ0ZMQUdTID0gJChDRkxBR1MpIC1ERkVBVF9PTEUKK1JDRkxBR1MgPSAkKFJDRkxBR1MpIC1ERkVBVF9PTEUKK09MRV9PQkogPSAkKE9VVERJUilcaWZfb2xlLm9iagorT0xFX0lETCA9IGlmX29sZS5pZGwKK09MRV9MSUIgPSBvbGVhdXQzMi5saWIKKyFlbmRpZgorCishaWYgIiQoSU1FKSIgPT0gInllcyIKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAtREZFQVRfTUJZVEVfSU1FCishaWZuZGVmIERZTkFNSUNfSU1FCitEWU5BTUlDX0lNRSA9IHllcworIWVuZGlmCishaWYgIiQoRFlOQU1JQ19JTUUpIiA9PSAieWVzIgorQ0ZMQUdTID0gJChDRkxBR1MpIC1ERFlOQU1JQ19JTUUKKyFlbHNlCitJTUVfTElCID0gaW1tMzIubGliCishZW5kaWYKKyFlbmRpZgorCishaWYgIiQoR0lNRSkiID09ICJ5ZXMiCitDRkxBR1MgPSAkKENGTEFHUykgLURHTE9CQUxfSU1FCitPQkogPSAkKE9CSikgJChPVVRESVIpXGRpbW1faS5vYmogJChPVVRESVIpXGdsYmxfaW1lLm9iagorTUJZVEUgPSB5ZXMKKyFlbmRpZgorCishaWYgIiQoTUJZVEUpIiA9PSAieWVzIgorQ0ZMQUdTID0gJChDRkxBR1MpIC1ERkVBVF9NQllURQorIWVuZGlmCisKKyFpZiAiJChHVUkpIiA9PSAieWVzIgorU1VCU1lTVEVNID0gd2luZG93cworQ0ZMQUdTID0gJChDRkxBR1MpIC1ERkVBVF9HVUlfVzMyCitSQ0ZMQUdTID0gJChSQ0ZMQUdTKSAtREZFQVRfR1VJX1czMgorVklNID0gZyQoVklNKQorR1VJX0lOQ0wgPSBcCisJZ3VpLmggXAorCXJlZ2V4cC5oIFwKKwlhc2NpaS5oIFwKKwlleF9jbWRzLmggXAorCWZhcnNpLmggXAorCWZlYXR1cmUuaCBcCisJZ2xvYmFscy5oIFwKKwlrZXltYXAuaCBcCisJbWFjcm9zLmggXAorCW9wdGlvbi5oIFwKKwlvc19kb3MuaCBcCisJb3Nfd2luMzIuaAorR1VJX09CSiA9IFwKKwkkKE9VVERJUilcZ3VpLm9iaiBcCisJJChPVVRESVIpXGd1aV93MzIub2JqIFwKKwkkKE9VVERJUilcb3NfdzMyZXhlLm9iagorR1VJX0xJQiA9IFwKKwlvbGRuYW1lcy5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiAkKElNRV9MSUIpIFwKKwl3aW5zcG9vbC5saWIgY29tY3RsMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBcCisJL21hY2hpbmU6JChDUFUpIC9ub2RlZmF1bHRsaWIKKyFlbHNlCitTVUJTWVNURU0gPSBjb25zb2xlCishZW5kaWYKKworIyBpY29udi5kbGwgbGlicmFyeSAoZHluYW1pY2FsbHkgbG9hZGVkKQorIWlmbmRlZiBJQ09OVgorSUNPTlYgPSB5ZXMKKyFlbmRpZgorIWlmICIkKElDT05WKSIgPT0gInllcyIKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAtRERZTkFNSUNfSUNPTlYKKyFlbmRpZgorCisjIGxpYmludGwuZGxsIGxpYnJhcnkKKyFpZm5kZWYgR0VUVEVYVAorR0VUVEVYVCA9IHllcworIWVuZGlmCishaWYgIiQoR0VUVEVYVCkiID09ICJ5ZXMiCitDRkxBR1MgPSAkKENGTEFHUykgLUREWU5BTUlDX0dFVFRFWFQKKyFlbmRpZgorCisjIFRDTCBpbnRlcmZhY2UKKyFpZmRlZiBUQ0wKKyFpZm5kZWYgVENMX1ZFUgorVENMX1ZFUiA9IDgzCitUQ0xfVkVSX0xPTkcgPSA4LjMKKyFlbmRpZgorIW1lc3NhZ2UgVGNsIHJlcXVlc3RlZCAodmVyc2lvbiAkKFRDTF9WRVIpKSAtIHJvb3QgZGlyIGlzICIkKFRDTCkiCishaWYgIiQoRFlOQU1JQ19UQ0wpIiA9PSAieWVzIgorIW1lc3NhZ2UgVGNsIERMTCB3aWxsIGJlIGxvYWRlZCBkeW5hbWljYWxseQorVENMX0RMTCA9IHRjbCQoVENMX1ZFUikuZGxsCitDRkxBR1MgID0gJChDRkxBR1MpIC1ERkVBVF9UQ0wgLUREWU5BTUlDX1RDTCAtRERZTkFNSUNfVENMX0RMTD1cIiQoVENMX0RMTClcIiAtRERZTkFNSUNfVENMX1ZFUj1cIiQoVENMX1ZFUl9MT05HKVwiCitUQ0xfT0JKCT0gJChPVVRESVIpXGlmX3RjbC5vYmoKK1RDTF9JTkMJPSAvSSAiJChUQ0wpXEluY2x1ZGUiIC9JICIkKFRDTCkiCitUQ0xfTElCID0gJChUQ0wpXGxpYlx0Y2xzdHViJChUQ0xfVkVSKS5saWIKKyFlbHNlCitDRkxBR1MgID0gJChDRkxBR1MpIC1ERkVBVF9UQ0wKK1RDTF9PQkoJPSAkKE9VVERJUilcaWZfdGNsLm9iagorVENMX0lOQwk9IC9JICIkKFRDTClcSW5jbHVkZSIgL0kgIiQoVENMKSIKK1RDTF9MSUIgPSAkKFRDTClcbGliXHRjbCQoVENMX1ZFUil2Yy5saWIKKyFlbmRpZgorIWVuZGlmCisKKyMgUFlUSE9OIGludGVyZmFjZQorIWlmZGVmIFBZVEhPTgorIWlmbmRlZiBQWVRIT05fVkVSCitQWVRIT05fVkVSID0gMjIKKyFlbmRpZgorIW1lc3NhZ2UgUHl0aG9uIHJlcXVlc3RlZCAodmVyc2lvbiAkKFBZVEhPTl9WRVIpKSAtIHJvb3QgZGlyIGlzICIkKFBZVEhPTikiCishaWYgIiQoRFlOQU1JQ19QWVRIT04pIiA9PSAieWVzIgorIW1lc3NhZ2UgUHl0aG9uIERMTCB3aWxsIGJlIGxvYWRlZCBkeW5hbWljYWxseQorIWVuZGlmCitDRkxBR1MgPSAkKENGTEFHUykgLURGRUFUX1BZVEhPTgorUFlUSE9OX09CSiA9ICQoT1VURElSKVxpZl9weXRob24ub2JqCitQWVRIT05fSU5DID0gL0kgIiQoUFlUSE9OKVxJbmNsdWRlIiAvSSAiJChQWVRIT04pXFBDIgorIWlmICIkKERZTkFNSUNfUFlUSE9OKSIgPT0gInllcyIKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAtRERZTkFNSUNfUFlUSE9OIC1ERFlOQU1JQ19QWVRIT05fRExMPVwicHl0aG9uJChQWVRIT05fVkVSKS5kbGxcIgorUFlUSE9OX0xJQiA9IC9ub2RlZmF1bHRsaWI6cHl0aG9uJChQWVRIT05fVkVSKS5saWIKKyFlbHNlCitQWVRIT05fTElCID0gJChQWVRIT04pXGxpYnNccHl0aG9uJChQWVRIT05fVkVSKS5saWIKKyFlbmRpZgorIWVuZGlmCisKKyMgUGVybCBpbnRlcmZhY2UKKyFpZmRlZiBQRVJMCishaWZuZGVmIFBFUkxfVkVSCitQRVJMX1ZFUiA9IDU2CishZW5kaWYKKyFtZXNzYWdlIFBlcmwgcmVxdWVzdGVkICh2ZXJzaW9uICQoUEVSTF9WRVIpKSAtIHJvb3QgZGlyIGlzICIkKFBFUkwpIgorIWlmICIkKERZTkFNSUNfUEVSTCkiID09ICJ5ZXMiCishaWYgJChQRVJMX1ZFUikgPj0gNTYKKyFtZXNzYWdlIFBlcmwgRExMIHdpbGwgYmUgbG9hZGVkIGR5bmFtaWNhbGx5CishZWxzZQorIW1lc3NhZ2UgRHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFBlcmwgdmVyc2lvbnMgZWFybGllciB0aGFuIDUuNi4wCishbWVzc2FnZSBSZXZlcnRpbmcgdG8gc3RhdGljIGxvYWRpbmcuLi4KKyF1bmRlZiBEWU5BTUlDX1BFUkwKKyFlbmRpZgorIWVuZGlmCisKKyMgSXMgUGVybCBpbnN0YWxsZWQgaW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRpcmVjdG9yaWVzPworIWlmIGV4aXN0KCQoUEVSTClcQmluXE1TV2luMzIteDg2KQorUEVSTF9BUkNIID0gXE1TV2luMzIteDg2CishZW5kaWYKKworUEVSTF9JTkNESVIgPSAkKFBFUkwpXExpYiQoUEVSTF9BUkNIKVxDb3JlCisKKyMgVmVyc2lvbi1kZXBlbmRlbnQgc3R1ZmYKKyFpZiAkKFBFUkxfVkVSKSA9PSA1NQorUEVSTF9MSUIgPSAkKFBFUkxfSU5DRElSKVxwZXJsLmxpYgorIWVsc2UKK1BFUkxfRExMID0gcGVybCQoUEVSTF9WRVIpLmRsbAorUEVSTF9MSUIgPSAkKFBFUkxfSU5DRElSKVxwZXJsJChQRVJMX1ZFUikubGliCishZW5kaWYKKworQ0ZMQUdTID0gJChDRkxBR1MpIC1ERkVBVF9QRVJMCisKKyMgRG8gd2Ugd2FudCB0byBsb2FkIFBlcmwgZHluYW1pY2FsbHk/CishaWYgIiQoRFlOQU1JQ19QRVJMKSIgPT0gInllcyIKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAtRERZTkFNSUNfUEVSTCAtRERZTkFNSUNfUEVSTF9ETEw9XCIkKFBFUkxfRExMKVwiCishdW5kZWYgUEVSTF9MSUIKKyFlbmRpZgorCitQRVJMX0VYRSA9ICQoUEVSTClcQmluJChQRVJMX0FSQ0gpXHBlcmwKK1BFUkxfSU5DID0gL0kgJChQRVJMX0lOQ0RJUikKK1BFUkxfT0JKID0gJChPVVRESVIpXGlmX3Blcmwub2JqICQoT1VURElSKVxpZl9wZXJsc2Zpby5vYmoKK1hTVUJQUCA9ICQoUEVSTClcbGliXEV4dFV0aWxzXHhzdWJwcAorWFNVQlBQX1RZUEVNQVAgPSAkKFBFUkwpXGxpYlxFeHRVdGlsc1x0eXBlbWFwCisKKyFlbmRpZgorCisjCisjIFN1cHBvcnQgUnVieSBpbnRlcmZhY2UKKyMKKyFpZmRlZiBSVUJZCisjICBTZXQgZGVmYXVsdCB2YWx1ZQorIWlmbmRlZiBSVUJZX1ZFUgorUlVCWV9WRVIgPSAxOAorIWVuZGlmCishaWZuZGVmIFJVQllfVkVSX0xPTkcKK1JVQllfVkVSX0xPTkcgPSAxLjgKKyFlbmRpZgorCishaWYgJChSVUJZX1ZFUikgPj0gMTgKKyFpZm5kZWYgUlVCWV9QTEFURk9STQorUlVCWV9QTEFURk9STSA9IGkzODYtbXN3aW4zMgorIWVuZGlmCishaWZuZGVmIFJVQllfSU5TVEFMTF9OQU1FCitSVUJZX0lOU1RBTExfTkFNRSA9IG1zdmNydC1ydWJ5JChSVUJZX1ZFUikKKyFlbmRpZgorIWVsc2UKKyFpZm5kZWYgUlVCWV9QTEFURk9STQorUlVCWV9QTEFURk9STSA9IGk1ODYtbXN3aW4zMgorIWVuZGlmCishaWZuZGVmIFJVQllfSU5TVEFMTF9OQU1FCitSVUJZX0lOU1RBTExfTkFNRSA9IG1zd2luMzItcnVieSQoUlVCWV9WRVIpCishZW5kaWYKKyFlbmRpZiAjICQoUlVCWV9WRVIpID49IDE4CisKKyFtZXNzYWdlIFJ1YnkgcmVxdWVzdGVkICh2ZXJzaW9uICQoUlVCWV9WRVIpKSAtIHJvb3QgZGlyIGlzICIkKFJVQlkpIgorQ0ZMQUdTID0gJChDRkxBR1MpIC1ERkVBVF9SVUJZCitSVUJZX09CSiA9ICQoT1VURElSKVxpZl9ydWJ5Lm9iagorUlVCWV9JTkMgPSAvSSAiJChSVUJZKVxsaWJccnVieVwkKFJVQllfVkVSX0xPTkcpXCQoUlVCWV9QTEFURk9STSkiCitSVUJZX0xJQiA9ICQoUlVCWSlcbGliXCQoUlVCWV9JTlNUQUxMX05BTUUpLmxpYgorIyBEbyB3ZSB3YW50IHRvIGxvYWQgUnVieSBkeW5hbWljYWxseT8KKyFpZiAiJChEWU5BTUlDX1JVQlkpIiA9PSAieWVzIgorIW1lc3NhZ2UgUnVieSBETEwgd2lsbCBiZSBsb2FkZWQgZHluYW1pY2FsbHkKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAtRERZTkFNSUNfUlVCWSAtRERZTkFNSUNfUlVCWV9ETEw9XCIkKFJVQllfSU5TVEFMTF9OQU1FKS5kbGxcIiAtRERZTkFNSUNfUlVCWV9WRVI9JChSVUJZX1ZFUikKKyF1bmRlZiBSVUJZX0xJQgorIWVuZGlmCishZW5kaWYgIyBSVUJZCisKKyMKKyMgU3VwcG9ydCBQb3N0U2NyaXB0IHByaW50aW5nCisjCishaWYgIiQoUE9TVFNDUklQVCkiID09ICJ5ZXMiCitDRkxBR1MgPSAkKENGTEFHUykgLURNU1dJTlBTCishZW5kaWYgIyBQT1NUU0NSSVBUCisKKyMKKyMgRkVBVFVSRVM6IFRJTlksIFNNQUxMLCBOT1JNQUwsIEJJRyBvciBIVUdFCisjCishaWYgIiQoRkVBVFVSRVMpIj09IiIKK0ZFQVRVUkVTID0gQklHCishZW5kaWYKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAtREZFQVRfJChGRUFUVVJFUykKKworIworIyBFbmQgZXh0cmEgZmVhdHVhcmUgaW5jbHVkZQorIworIW1lc3NhZ2UKKworY29uZmxhZ3MgPSAvbm9sb2dvIC9zdWJzeXN0ZW06JChTVUJTWVNURU0pIC9pbmNyZW1lbnRhbDpubworCishSUYgIiQoTUFQKSIgPT0gInllcyIKKyMgIi9tYXAiIGlzIGZvciBkZWJ1Z2dpbmcKK2NvbmZsYWdzID0gJChjb25mbGFncykgL21hcAorIUVMU0VJRiAiJChNQVApIiA9PSAibGluZXMiCisjICIvbWFwaW5mbzpsaW5lcyIgaXMgZm9yIGRlYnVnZ2luZywgb25seSB3b3JrcyBmb3IgVkM2IGFuZCBsYXRlcgorY29uZmxhZ3MgPSAkKGNvbmZsYWdzKSAvbWFwIC9tYXBpbmZvOmxpbmVzCishRU5ESUYKKworTElOS0FSR1MxID0gJChsaW5rZGVidWcpICQoY29uZmxhZ3MpIC9ub2RlZmF1bHRsaWI6bGliYworTElOS0FSR1MyID0gJChDT05fTElCKSAkKEdVSV9MSUIpICQoTElCQykgJChPTEVfTElCKSAgdXNlcjMyLmxpYiAkKFNOSUZGX0xJQikgXAorCQkkKFBFUkxfTElCKSAkKFBZVEhPTl9MSUIpICQoUlVCWV9MSUIpICQoVENMX0xJQikgXAorCQkkKE5FVEJFQU5TX0xJQikgJChYUE1fTElCKSAkKExJTktfUERCKQorCithbGw6CSQoVklNKSB2aW1ydW4uZXhlIGluc3RhbGwuZXhlIHVuaW5zdGFsLmV4ZSB4eGQveHhkLmV4ZSBHdmltRXh0L2d2aW1leHQuZGxsCisKKyQoVklNKTogJChPVVRESVIpICQoT0JKKSAkKEdVSV9PQkopICQoT0xFX09CSikgJChPTEVfSURMKSAkKFBFUkxfT0JKKSAkKFBZVEhPTl9PQkopICQoUlVCWV9PQkopICQoVENMX09CSikgJChTTklGRl9PQkopICQoQ1NDT1BFX09CSikgJChORVRCRUFOU19PQkopICQoWFBNX09CSikgdmVyc2lvbi5jIHZlcnNpb24uaAorCSQoQ0MpICQoQ0ZMQUdTKSAgdmVyc2lvbi5jIC9GbyQoT1VURElSKS92ZXJzaW9uLm9iaiAkKFBEQikKKwkkKGxpbmspICQoTElOS0FSR1MxKSAtb3V0OiQqLmV4ZSAkKE9CSikgJChHVUlfT0JKKSAkKE9MRV9PQkopIFwKKwkJJChQRVJMX09CSikgJChQWVRIT05fT0JKKSAkKFJVQllfT0JKKSAkKFRDTF9PQkopICQoU05JRkZfT0JKKSBcCisJCSQoQ1NDT1BFX09CSikgJChORVRCRUFOU19PQkopICQoWFBNX09CSikgXAorCQkkKE9VVERJUilcdmVyc2lvbi5vYmogJChMSU5LQVJHUzIpCisKKyQoVklNKS5leGU6ICQoVklNKQorCiskKE9VVERJUik6CisJaWYgbm90IGV4aXN0ICQoT1VURElSKS9udWwgICAgbWtkaXIgJChPVVRESVIpCisKK2luc3RhbGwuZXhlOiBkb3NpbnN0LmMKKwkkKENDKSAvbm9sb2dvIC1ETkRFQlVHIC1EV0lOMzIgZG9zaW5zdC5jIGtlcm5lbDMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgYWR2YXBpMzIubGliIHV1aWQubGliCisJLSBpZiBleGlzdCBpbnN0YWxsLmV4ZSBkZWwgaW5zdGFsbC5leGUKKwlyZW4gZG9zaW5zdC5leGUgaW5zdGFsbC5leGUKKwordW5pbnN0YWwuZXhlOiB1bmluc3RhbC5jCisJJChDQykgL25vbG9nbyAtRE5ERUJVRyAtRFdJTjMyIHVuaW5zdGFsLmMgc2hlbGwzMi5saWIgYWR2YXBpMzIubGliCisKK3ZpbXJ1bi5leGU6IHZpbXJ1bi5jCisJJChDQykgL25vbG9nbyAtRE5ERUJVRyB2aW1ydW4uYworCit4eGQveHhkLmV4ZTogeHhkL3h4ZC5jCisJY2QgeHhkCisJJChNQUtFKSAvTk9MT0dPIC1mIE1ha2VfbXZjLm1haworCWNkIC4uCisKK0d2aW1FeHQvZ3ZpbWV4dC5kbGw6IEd2aW1FeHQvZ3ZpbWV4dC5jcHAgR3ZpbUV4dC9ndmltZXh0LnJjIEd2aW1FeHQvZ3ZpbWV4dC5oCisJY2QgR3ZpbUV4dAorCSQoTUFLRSkgL05PTE9HTyAtZiBNYWtlZmlsZSAkKE1BS0VGTEFHU19HVklNRVhUKQorCWNkIC4uCisKKwordGFnczogbm90YWdzCisJJChDVEFHUykgKi5jICouY3BwICouaCBpZl9wZXJsLnhzIHByb3RvXCoucHJvCisKK25vdGFnczoKKwktIGlmIGV4aXN0IHRhZ3MgZGVsIHRhZ3MKKworY2xlYW46CisJLSAkKERFTF9UUkVFKSAkKE9VVERJUikgYXV0bworCS0gaWYgZXhpc3QgKi5vYmogZGVsICoub2JqCisJLSBpZiBleGlzdCAkKFZJTSkuZXhlIGRlbCAkKFZJTSkuZXhlCisJLSBpZiBleGlzdCAkKFZJTSkuaWxrIGRlbCAkKFZJTSkuaWxrCisJLSBpZiBleGlzdCAkKFZJTSkucGRiIGRlbCAkKFZJTSkucGRiCisJLSBpZiBleGlzdCAkKFZJTSkubWFwIGRlbCAkKFZJTSkubWFwCisJLSBpZiBleGlzdCAkKFZJTSkubmNiIGRlbCAkKFZJTSkubmNiCisJLSBpZiBleGlzdCB2aW1ydW4uZXhlIGRlbCB2aW1ydW4uZXhlCisJLSBpZiBleGlzdCBpbnN0YWxsLmV4ZSBkZWwgaW5zdGFsbC5leGUKKwktIGlmIGV4aXN0IHVuaW5zdGFsLmV4ZSBkZWwgdW5pbnN0YWwuZXhlCisJLSBpZiBleGlzdCBpZl9wZXJsLmMgZGVsIGlmX3BlcmwuYworCS0gaWYgZXhpc3QgZGltbS5oIGRlbCBkaW1tLmgKKwktIGlmIGV4aXN0IGRpbW1faS5jIGRlbCBkaW1tX2kuYworCS0gaWYgZXhpc3QgZGltbS50bGIgZGVsIGRpbW0udGxiCisJLSBpZiBleGlzdCBkb3NpbnN0LmV4ZSBkZWwgZG9zaW5zdC5leGUKKwljZCB4eGQKKwkkKE1BS0UpIC9OT0xPR08gLWYgTWFrZV9tdmMubWFrIGNsZWFuCisJY2QgLi4KKwljZCBHdmltRXh0CisJJChNQUtFKSAvTk9MT0dPIC1mIE1ha2VmaWxlIGNsZWFuCisJY2QgLi4KKwljZCBHdmltRXh0CisJJChNQUtFKSAvTk9MT0dPIC1mIE1ha2VmaWxlIGNsZWFuCisJY2QgLi4KKwktIGlmIGV4aXN0IHRlc3RkaXJcKi5vdXQgZGVsIHRlc3RkaXJcKi5vdXQKKwordGVzdDoKKwljZCB0ZXN0ZGlyCisJJChNQUtFKSAvTk9MT0dPIC1mIE1ha2VfZG9zLm1hayB3aW4zMgorCWNkIC4uCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIENyZWF0ZSBhIGRlZmF1bHQgcnVsZSBmb3IgdHJhbnNmb3JtaW5nIC5jIGZpbGVzIHRvIC5vYmogZmlsZXMgaW4gJChPVVRESVIpCisjIEJhdGNoIGNvbXBpbGF0aW9uIGlzIHN1cHBvcnRlZCBieSBubWFrZSAxLjYyIChwYXJ0IG9mIFZTIDUuMCkgYW5kIGxhdGVyKQorIUlGICIkKF9OTUFLRV9WRVIpIiA9PSAiIgorLmN7JChPVVRESVIpL30ub2JqOgorIUVMU0UKKy5jeyQoT1VURElSKS99Lm9iajo6CishRU5ESUYKKwkkKENDKSAkKENGTEFHUykgL0ZvJChPVVRESVIpLyAkKFBEQikgJDwKKworIyBDcmVhdGUgYSBkZWZhdWx0IHJ1bGUgZm9yIHRyYW5zZm9ybWluZyAuY3BwIGZpbGVzIHRvIC5vYmogZmlsZXMgaW4gJChPVVRESVIpCisjIEJhdGNoIGNvbXBpbGF0aW9uIGlzIHN1cHBvcnRlZCBieSBubWFrZSAxLjYyIChwYXJ0IG9mIFZTIDUuMCkgYW5kIGxhdGVyKQorIUlGICIkKF9OTUFLRV9WRVIpIiA9PSAiIgorLmNwcHskKE9VVERJUikvfS5vYmo6CishRUxTRQorLmNwcHskKE9VVERJUikvfS5vYmo6OgorIUVORElGCisJJChDQykgJChDRkxBR1MpIC9GbyQoT1VURElSKS8gJChQREIpICQ8CisKKyQoT1VURElSKS9idWZmZXIub2JqOgkkKE9VVERJUikgYnVmZmVyLmMgICQoSU5DTCkKKworJChPVVRESVIpL2NoYXJzZXQub2JqOgkkKE9VVERJUikgY2hhcnNldC5jICAkKElOQ0wpCisKKyQoT1VURElSKS9kaWZmLm9iajoJJChPVVRESVIpIGRpZmYuYyAgJChJTkNMKQorCiskKE9VVERJUikvZGlncmFwaC5vYmo6CSQoT1VURElSKSBkaWdyYXBoLmMgICQoSU5DTCkKKworJChPVVRESVIpL2VkaXQub2JqOgkkKE9VVERJUikgZWRpdC5jICAkKElOQ0wpCisKKyQoT1VURElSKS9ldmFsLm9iajoJJChPVVRESVIpIGV2YWwuYyAgJChJTkNMKQorCiskKE9VVERJUikvZXhfY21kcy5vYmo6CSQoT1VURElSKSBleF9jbWRzLmMgICQoSU5DTCkKKworJChPVVRESVIpL2V4X2NtZHMyLm9iajoJJChPVVRESVIpIGV4X2NtZHMyLmMgICQoSU5DTCkKKworJChPVVRESVIpL2V4X2RvY21kLm9iajoJJChPVVRESVIpIGV4X2RvY21kLmMgICQoSU5DTCkgZXhfY21kcy5oCisKKyQoT1VURElSKS9leF9ldmFsLm9iajoJJChPVVRESVIpIGV4X2V2YWwuYyAgJChJTkNMKSBleF9jbWRzLmgKKworJChPVVRESVIpL2V4X2dldGxuLm9iajoJJChPVVRESVIpIGV4X2dldGxuLmMgICQoSU5DTCkKKworJChPVVRESVIpL2ZpbGVpby5vYmo6CSQoT1VURElSKSBmaWxlaW8uYyAgJChJTkNMKQorCiskKE9VVERJUikvZm9sZC5vYmo6CSQoT1VURElSKSBmb2xkLmMgICQoSU5DTCkKKworJChPVVRESVIpL2dldGNoYXIub2JqOgkkKE9VVERJUikgZ2V0Y2hhci5jICAkKElOQ0wpCisKKyQoT1VURElSKS9ndWkub2JqOgkkKE9VVERJUikgZ3VpLmMgICQoSU5DTCkgJChHVUlfSU5DTCkKKworJChPVVRESVIpL2d1aV93MzIub2JqOgkkKE9VVERJUikgZ3VpX3czMi5jIGd1aV93NDguYyAkKElOQ0wpICQoR1VJX0lOQ0wpCisKKyQoT1VURElSKS9pZl9jc2NvcGUub2JqOiAkKE9VVERJUikgaWZfY3Njb3BlLmMgICQoSU5DTCkKKworaWZfcGVybC5jIDogaWZfcGVybC54cyB0eXBlbWFwCisJJChQRVJMX0VYRSkgJChYU1VCUFApIC1wcm90b3R5cGVzIC10eXBlbWFwICQoWFNVQlBQX1RZUEVNQVApIC10eXBlbWFwIHR5cGVtYXAgaWZfcGVybC54cyA+IGlmX3BlcmwuYworCiskKE9VVERJUikvaWZfcGVybC5vYmo6ICQoT1VURElSKSBpZl9wZXJsLmMgICQoSU5DTCkKKwkkKENDKSAkKENGTEFHUykgJChQRVJMX0lOQykgaWZfcGVybC5jIC9GbyQoT1VURElSKS9pZl9wZXJsLm9iaiAkKFBEQikKKworJChPVVRESVIpL2lmX3BlcmxzZmlvLm9iajogJChPVVRESVIpIGlmX3BlcmxzZmlvLmMgICQoSU5DTCkKKwkkKENDKSAkKENGTEFHUykgJChQRVJMX0lOQykgaWZfcGVybHNmaW8uYyAvRm8kKE9VVERJUikvaWZfcGVybHNmaW8ub2JqICQoUERCKQorCiskKE9VVERJUikvaWZfcHl0aG9uLm9iajogJChPVVRESVIpIGlmX3B5dGhvbi5jICAkKElOQ0wpCisJJChDQykgJChDRkxBR1MpICQoUFlUSE9OX0lOQykgaWZfcHl0aG9uLmMgL0ZvJChPVVRESVIpL2lmX3B5dGhvbi5vYmogJChQREIpCisKKyQoT1VURElSKS9pZl9vbGUub2JqOiAkKE9VVERJUikgaWZfb2xlLmNwcCAgJChJTkNMKSBpZl9vbGUuaAorCiskKE9VVERJUikvaWZfcnVieS5vYmo6ICQoT1VURElSKSBpZl9ydWJ5LmMgICQoSU5DTCkKKwkkKENDKSAkKENGTEFHUykgJChSVUJZX0lOQykgaWZfcnVieS5jIC9GbyQoT1VURElSKS9pZl9ydWJ5Lm9iaiAkKFBEQikKKworJChPVVRESVIpL2lmX3NuaWZmLm9iajoJJChPVVRESVIpIGlmX3NuaWZmLmMgICQoSU5DTCkKKwkkKENDKSAkKENGTEFHUykgaWZfc25pZmYuYyAvRm8kKE9VVERJUikvaWZfc25pZmYub2JqICQoUERCKQorCiskKE9VVERJUikvaWZfdGNsLm9iajogJChPVVRESVIpIGlmX3RjbC5jICAkKElOQ0wpCisJJChDQykgJChDRkxBR1MpICQoVENMX0lOQykgaWZfdGNsLmMgL0ZvJChPVVRESVIpL2lmX3RjbC5vYmogJChQREIpCisKKyQoT1VURElSKS9tYWluLm9iajoJJChPVVRESVIpIG1haW4uYyAgJChJTkNMKQorCiskKE9VVERJUikvbWFyay5vYmo6CSQoT1VURElSKSBtYXJrLmMgICQoSU5DTCkKKworJChPVVRESVIpL21lbWZpbGUub2JqOgkkKE9VVERJUikgbWVtZmlsZS5jICAkKElOQ0wpCisKKyQoT1VURElSKS9tZW1saW5lLm9iajoJJChPVVRESVIpIG1lbWxpbmUuYyAgJChJTkNMKQorCiskKE9VVERJUikvbWVudS5vYmo6CSQoT1VURElSKSBtZW51LmMgICQoSU5DTCkKKworJChPVVRESVIpL21lc3NhZ2Uub2JqOgkkKE9VVERJUikgbWVzc2FnZS5jICAkKElOQ0wpCisKKyQoT1VURElSKS9taXNjMS5vYmo6CSQoT1VURElSKSBtaXNjMS5jICAkKElOQ0wpCisKKyQoT1VURElSKS9taXNjMi5vYmo6CSQoT1VURElSKSBtaXNjMi5jICAkKElOQ0wpCisKKyQoT1VURElSKS9tb3ZlLm9iajoJJChPVVRESVIpIG1vdmUuYyAgJChJTkNMKQorCiskKE9VVERJUikvbWJ5dGUub2JqOiAkKE9VVERJUikgbWJ5dGUuYyAgJChJTkNMKQorCiskKE9VVERJUikvbmV0YmVhbnMub2JqOiAkKE9VVERJUikgbmV0YmVhbnMuYyAkKE5CREVCVUdfU1JDKSAkKElOQ0wpCisKKyQoT1VURElSKS9ub3JtYWwub2JqOgkkKE9VVERJUikgbm9ybWFsLmMgICQoSU5DTCkKKworJChPVVRESVIpL29wdGlvbi5vYmo6CSQoT1VURElSKSBvcHRpb24uYyAgJChJTkNMKQorCiskKE9VVERJUikvb3BzLm9iajoJJChPVVRESVIpIG9wcy5jICAkKElOQ0wpCisKKyQoT1VURElSKS9vc19tc3dpbi5vYmo6CSQoT1VURElSKSBvc19tc3dpbi5jICAkKElOQ0wpCisKKyQoT1VURElSKS9vc193aW4zMi5vYmo6CSQoT1VURElSKSBvc193aW4zMi5jICAkKElOQ0wpIG9zX3dpbjMyLmgKKworJChPVVRESVIpL29zX3czMmV4ZS5vYmo6CSQoT1VURElSKSBvc193MzJleGUuYyAgJChJTkNMKQorCiskKE9VVERJUikvcGF0aGRlZi5vYmo6CSQoT1VURElSKSBhdXRvL3BhdGhkZWYuYyAgJChJTkNMKQorCSQoQ0MpICQoQ0ZMQUdTKSBhdXRvL3BhdGhkZWYuYyAvRm8kKE9VVERJUikvcGF0aGRlZi5vYmogJChQREIpCisKKyQoT1VURElSKS9xdWlja2ZpeC5vYmo6CSQoT1VURElSKSBxdWlja2ZpeC5jICAkKElOQ0wpCisKKyQoT1VURElSKS9yZWdleHAub2JqOgkkKE9VVERJUikgcmVnZXhwLmMgICQoSU5DTCkKKworJChPVVRESVIpL3NjcmVlbi5vYmo6CSQoT1VURElSKSBzY3JlZW4uYyAgJChJTkNMKQorCiskKE9VVERJUikvc2VhcmNoLm9iajoJJChPVVRESVIpIHNlYXJjaC5jICAkKElOQ0wpCisKKyQoT1VURElSKS9zeW50YXgub2JqOgkkKE9VVERJUikgc3ludGF4LmMgICQoSU5DTCkKKworJChPVVRESVIpL3RhZy5vYmo6CSQoT1VURElSKSB0YWcuYyAgJChJTkNMKQorCiskKE9VVERJUikvdGVybS5vYmo6CSQoT1VURElSKSB0ZXJtLmMgICQoSU5DTCkKKworJChPVVRESVIpL3VpLm9iajoJJChPVVRESVIpIHVpLmMgICQoSU5DTCkKKworJChPVVRESVIpL3VuZG8ub2JqOgkkKE9VVERJUikgdW5kby5jICAkKElOQ0wpCisKKyQoT1VURElSKS93aW5kb3cub2JqOgkkKE9VVERJUikgd2luZG93LmMgICQoSU5DTCkKKworJChPVVRESVIpL3hwbV93MzIub2JqOiAkKE9VVERJUikgeHBtX3czMi5jCisJJChDQykgJChDRkxBR1MpICQoWFBNX0lOQykgeHBtX3czMi5jIC9GbyQoT1VURElSKS94cG1fdzMyLm9iaiAkKFBEQikKKworJChPVVRESVIpL3ZpbS5yZXM6CSQoT1VURElSKSB2aW0ucmMgdmVyc2lvbi5oIHRvb2xzLmJtcCB0ZWFyb2ZmLmJtcCB2aW0uaWNvIHZpbV9lcnJvci5pY28gdmltX2FsZXJ0LmljbyB2aW1faW5mby5pY28gdmltX3F1ZXN0LmljbworCSQoUkMpIC9sIDB4NDA5IC9GbyQoT1VURElSKS92aW0ucmVzICQoUkNGTEFHUykgdmltLnJjCisKK2lpZF9vbGUuYyBpZl9vbGUuaCB2aW0udGxiOiBpZl9vbGUuaWRsICQoSU5URElSKSAkKE9VVERJUikKKwltaWRsIC9ub2xvZ28gL3Byb3h5IG51bCAvaWlkIGlpZF9vbGUuYyAvdGxiIHZpbS50bGIgL2hlYWRlciBpZl9vbGUuaCBpZl9vbGUuaWRsCisKK2RpbW0uaCBkaW1tX2kuYzogZGltbS5pZGwKKwltaWRsIC9ub2xvZ28gL3Byb3h5IG51bCBkaW1tLmlkbAorCiskKE9VVERJUikvZGltbV9pLm9iajogJChPVVRESVIpIGRpbW1faS5jICQoSU5DTCkKKworJChPVVRESVIpL2dsYmxfaW1lLm9iajoJJChPVVRESVIpIGdsYmxfaW1lLmNwcCAgZGltbS5oICQoSU5DTCkKKworYXV0by9wYXRoZGVmLmM6IGF1dG8KKwlAZWNobyBjcmVhdGluZyBhdXRvL3BhdGhkZWYuYworCUBlY2hvIC8qIHBhdGhkZWYuYyAqLyA+IGF1dG9ccGF0aGRlZi5jCisJQGVjaG8gI2luY2x1ZGUgInZpbS5oIiA+PiBhdXRvXHBhdGhkZWYuYworCUBlY2hvIGNoYXJfdSAqZGVmYXVsdF92aW1fZGlyID0gKGNoYXJfdSAqKSIkKFZJTVJDTE9DOlw9XFwpIjsgPj4gYXV0b1xwYXRoZGVmLmMKKwlAZWNobyBjaGFyX3UgKmRlZmF1bHRfdmltcnVudGltZV9kaXIgPSAoY2hhcl91ICopIiQoVklNUlVOVElNRURJUjpcPVxcKSI7ID4+IGF1dG9ccGF0aGRlZi5jCisJQGVjaG8gY2hhcl91ICphbGxfY2ZsYWdzID0gKGNoYXJfdSAqKSIkKENDOlw9XFwpICQoQ0ZMQUdTKSI7ID4+IGF1dG9ccGF0aGRlZi5jCisJQGVjaG8gY2hhcl91ICphbGxfbGZsYWdzID0gKGNoYXJfdSAqKSIkKGxpbms6XD1cXCkgJChMSU5LQVJHUzE6XD1cXCkgJChMSU5LQVJHUzI6XD1cXCkiOyA+PiBhdXRvXHBhdGhkZWYuYworCUBlY2hvIGNoYXJfdSAqY29tcGlsZWRfdXNlciA9IChjaGFyX3UgKikiJChVU0VSTkFNRSkiOyA+PiBhdXRvXHBhdGhkZWYuYworCUBlY2hvIGNoYXJfdSAqY29tcGlsZWRfc3lzID0gKGNoYXJfdSAqKSIkKFVTRVJET01BSU4pIjsgPj4gYXV0b1xwYXRoZGVmLmMKKworYXV0bzoKKwlpZiBub3QgZXhpc3QgYXV0by9udWwgbWtkaXIgYXV0bworCisjIEVuZCBDdXN0b20gQnVpbGQKK3Byb3RvLmg6IFwKKwlwcm90by9idWZmZXIucHJvIFwKKwlwcm90by9jaGFyc2V0LnBybyBcCisJcHJvdG8vZGlmZi5wcm8gXAorCXByb3RvL2RpZ3JhcGgucHJvIFwKKwlwcm90by9lZGl0LnBybyBcCisJcHJvdG8vZXZhbC5wcm8gXAorCXByb3RvL2V4X2NtZHMucHJvIFwKKwlwcm90by9leF9jbWRzMi5wcm8gXAorCXByb3RvL2V4X2RvY21kLnBybyBcCisJcHJvdG8vZXhfZXZhbC5wcm8gXAorCXByb3RvL2V4X2dldGxuLnBybyBcCisJcHJvdG8vZmlsZWlvLnBybyBcCisJcHJvdG8vZ2V0Y2hhci5wcm8gXAorCXByb3RvL21haW4ucHJvIFwKKwlwcm90by9tYXJrLnBybyBcCisJcHJvdG8vbWVtZmlsZS5wcm8gXAorCXByb3RvL21lbWxpbmUucHJvIFwKKwlwcm90by9tZW51LnBybyBcCisJcHJvdG8vbWVzc2FnZS5wcm8gXAorCXByb3RvL21pc2MxLnBybyBcCisJcHJvdG8vbWlzYzIucHJvIFwKKwlwcm90by9tb3ZlLnBybyBcCisJcHJvdG8vbWJ5dGUucHJvIFwKKwlwcm90by9ub3JtYWwucHJvIFwKKwlwcm90by9vcHMucHJvIFwKKwlwcm90by9vcHRpb24ucHJvIFwKKwlwcm90by9vc19tc3dpbi5wcm8gXAorCXByb3RvL29zX3dpbjMyLnBybyBcCisJcHJvdG8vcXVpY2tmaXgucHJvIFwKKwlwcm90by9yZWdleHAucHJvIFwKKwlwcm90by9zY3JlZW4ucHJvIFwKKwlwcm90by9zZWFyY2gucHJvIFwKKwlwcm90by9zeW50YXgucHJvIFwKKwlwcm90by90YWcucHJvIFwKKwlwcm90by90ZXJtLnBybyBcCisJcHJvdG8vdWkucHJvIFwKKwlwcm90by91bmRvLnBybyBcCisJcHJvdG8vd2luZG93LnBybyBcCisJJChORVRCRUFOU19QUk8pCisKKyMgdmltOiBzZXQgbm9ldCBzdz04IHRzPTggc3RzPTAgd209MCB0dz0wOgpkaWZmIC0tZ2l0IGEvc3JjL01ha2Vfb3MyLm1hayBiL3NyYy9NYWtlX29zMi5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyMWRjNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlX29zMi5tYWsKQEAgLTAsMCArMSwxNDcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFZJTSBvbiBPUy8yIHVzaW5nIEVNWAl2aW06dHM9ODpzdz04OnR3PTc4CisjCisjIENyZWF0ZWQgYnk6IFBhdWwgU2xvb3RtYW4KKyMKKworIyMjIFRoaXMgTWFrZWZpbGUgaGFzIGJlZW4gc3VjY2VzZnVsbHkgdGVzdGVkIG9uIHRoZXNlIHN5c3RlbXMuCisjIyMgQ2hlY2sgdGhlICgqKSBjb2x1bW4gZm9yIHJlbWFya3MsIGxpc3RlZCBiZWxvdy4KKyMjIyBMYXRlciBjb2RlIGNoYW5nZXMgbWF5IGNhdXNlIHNtYWxsIHByb2JsZW1zLCBvdGhlcndpc2UgVmltIGlzIHN1cHBvc2VkIHRvCisjIyMgY29tcGlsZSBhbmQgcnVuIHdpdGhvdXQgcHJvYmxlbXMuCisjIyMgSnVzdCB0byBzaG93IHRoYXQgdGhpcyBpcyBqdXN0IGxpa2UgdGhlIFVuaXggdmVyc2lvbiEKKworI3N5c3RlbToJICAgICAgY29uZmlndXJhdGlvbnM6CQkgICAgIHZlcnNpb24gKCopIHRlc3RlZCBieToKKyMtLS0tLS0tLS0tLS0tCSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkgICAgIC0tLS0tLS0gIC0gIC0tLS0tLS0tLS0KKyNPUy8yIFdhcnAgSFBGUyAgICAgICBnY2MtMi43LjIrZW14LTAuOWIgLUdVSQkJNC41CSBQYXVsIFNsb290bWFuCisjT1MvMiBGQVQJICAgICAgZ2NjLTIuNi4zK2VteAkgLUdVSQkJNC41CSBLYXJzdGVuIFNpZXZlcnQKKworIz4+Pj4+IGNob29zZSBvcHRpb25zOgorCisjIyMgU2VlIGZlYXR1cmUuaCBmb3IgYSBsaXN0IG9mIG9wdGlvbmFscy4KKyMjIyBBbnkgb3RoZXIgZGVmaW5lcyBjYW4gYmUgaW5jbHVkZWQgaGVyZS4KKworREVGSU5FUyA9IC1EVVNFX1NZU1RFTT0xCisKKyM+Pj4+PiBuYW1lIG9mIHRoZSBjb21waWxlciBhbmQgbGlua2VyLCBuYW1lIG9mIGxpYiBkaXJlY3RvcnkKK0NDID0gZ2NjCisKKyM+Pj4+PiBlbmQgb2YgY2hvaWNlcworCisjIyMgTmFtZSBvZiB0YXJnZXQocykKK1RBUkdFVCA9IHZpbS5leGUKKworIyMjIE5hbWVzIG9mIHRoZSB0b29scyB0aGF0IGFyZSBhbHNvIG1hZGUKK1RPT0xTID0geHhkL3h4ZC5leGUgdGVlL3RlZS5leGUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0lOQ0wgPSB2aW0uaCBnbG9iYWxzLmggb3B0aW9uLmgga2V5bWFwLmggbWFjcm9zLmggYXNjaWkuaCB0ZXJtLmggb3NfdW5peC5oIHN0cnVjdHMuaCBvc19vczJfY2ZnLmgKK0NGTEFHUyA9IC1PMiAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtRE9TMiAtV2FsbCAtSXByb3RvICQoREVGSU5FUykKKworT0JKID0gXAorCWJ1ZmZlci5vIFwKKwljaGFyc2V0Lm8gXAorCWRpZmYubyBcCisJZGlncmFwaC5vIFwKKwllZGl0Lm8gXAorCWV2YWwubyBcCisJZXhfY21kcy5vIFwKKwlleF9jbWRzMi5vIFwKKwlleF9kb2NtZC5vIFwKKwlleF9ldmFsLm8gXAorCWV4X2dldGxuLm8gXAorCWZpbGVpby5vIFwKKwlmb2xkLm8gXAorCWdldGNoYXIubyBcCisJbWFpbi5vIFwKKwltYXJrLm8gXAorCW1lbWZpbGUubyBcCisJbWVtbGluZS5vIFwKKwltZW51Lm8gXAorCW1lc3NhZ2UubyBcCisJbWlzYzEubyBcCisJbWlzYzIubyBcCisJbW92ZS5vIFwKKwltYnl0ZS5vIFwKKwlub3JtYWwubyBcCisJb3BzLm8gXAorCW9wdGlvbi5vIFwKKwlxdWlja2ZpeC5vIFwKKwlyZWdleHAubyBcCisJc2NyZWVuLm8gXAorCXNlYXJjaC5vIFwKKwlzeW50YXgubyBcCisJdGFnLm8gXAorCXRlcm0ubyBcCisJdWkubyBcCisJdW5kby5vIFwKKwl3aW5kb3cubyBcCisJb3NfdW5peC5vCisKK0xJQlMgPSAtbHRlcm1jYXAKKworIyBEZWZhdWx0IHRhcmdldCBpcyBtYWtpbmcgdGhlIGV4ZWN1dGFibGUKK2FsbDogJChUQVJHRVQpICQoVE9PTFMpCisKKyMgTGluayB0aGUgdGFyZ2V0IGZvciBub3JtYWwgdXNlCitMRkxBR1MgPSAtWmNydGRsbCAtcyAtbyAkKFRBUkdFVCkgJChMSUJTKQorCiskKFRBUkdFVCk6ICQoT0JKKSB2ZXJzaW9uLmMgdmVyc2lvbi5oCisJJChDQykgJChDRkxBR1MpIHZlcnNpb24uYyAkKE9CSikgJChMRkxBR1MpCisKK3h4ZC94eGQuZXhlOiB4eGQveHhkLmMKKwljZCB4eGQgJiAkKE1BS0UpIC1mIE1ha2Vfb3MyLm1haworCit0ZWUvdGVlLmV4ZTogdGVlL3RlZS5jCisJY2QgdGVlICYgJChNQUtFKSAtZiBNYWtlZmlsZQorCit0ZXN0OgorCWNkIHRlc3RkaXIgJiAkKE1BS0UpIC1mIE1ha2Vfb3MyLm1haworCitjbGVhbjoKKwktZGVsICoubworCS1kZWwgKi5leGUKKwktZGVsICoufiAqfiAqLmJhaworCWNkIHh4ZCAgICYgJChNQUtFKSAtZiBNYWtlX29zMi5tYWsgY2xlYW4KKwljZCB0ZWUgICAmICQoTUFLRSkgLWYgTWFrZWZpbGUgY2xlYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK29zX3VuaXgubzoJb3NfdW5peC5jICAkKElOQ0wpCitidWZmZXIubzoJYnVmZmVyLmMgICQoSU5DTCkKK2NoYXJzZXQubzoJY2hhcnNldC5jICAkKElOQ0wpCitkaWZmLm86CQlkaWZmLmMgICQoSU5DTCkKK2RpZ3JhcGgubzoJZGlncmFwaC5jICAkKElOQ0wpCitlZGl0Lm86CQllZGl0LmMgICQoSU5DTCkKK2V2YWwubzoJCWV2YWwuYyAgJChJTkNMKQorZXhfY21kcy5vOglleF9jbWRzLmMgICQoSU5DTCkKK2V4X2NtZHMyLm86CWV4X2NtZHMyLmMgICQoSU5DTCkKK2V4X2RvY21kLm86CWV4X2RvY21kLmMgICQoSU5DTCkgZXhfY21kcy5oCitleF9ldmFsLm86CWV4X2V2YWwuYyAgJChJTkNMKSBleF9jbWRzLmgKK2V4X2dldGxuLm86CWV4X2dldGxuLmMgICQoSU5DTCkKK2ZpbGVpby5vOglmaWxlaW8uYyAgJChJTkNMKQorZm9sZC5vOgkJZm9sZC5jICAkKElOQ0wpCitnZXRjaGFyLm86CWdldGNoYXIuYyAgJChJTkNMKQorbWFpbi5vOgkJbWFpbi5jICAkKElOQ0wpCittYXJrLm86CQltYXJrLmMgICQoSU5DTCkKK21lbWZpbGUubzoJbWVtZmlsZS5jICAkKElOQ0wpCittZW1saW5lLm86CW1lbWxpbmUuYyAgJChJTkNMKQorbWVudS5vOgkJbWVudS5jICAkKElOQ0wpCittZXNzYWdlLm86CW1lc3NhZ2UuYyAgJChJTkNMKQorbWlzYzEubzoJbWlzYzEuYyAgJChJTkNMKQorbWlzYzIubzoJbWlzYzIuYyAgJChJTkNMKQorbW92ZS5vOgkJbW92ZS5jICAkKElOQ0wpCittYnl0ZS5vOgltYnl0ZS5jICAkKElOQ0wpCitub3JtYWwubzoJbm9ybWFsLmMgICQoSU5DTCkKK29wcy5vOgkJb3BzLmMgICQoSU5DTCkKK29wdGlvbi5vOglvcHRpb24uYyAgJChJTkNMKQorcXVpY2tmaXgubzoJcXVpY2tmaXguYyAgJChJTkNMKQorcmVnZXhwLm86CXJlZ2V4cC5jICAkKElOQ0wpCitzY3JlZW4ubzoJc2NyZWVuLmMgICQoSU5DTCkKK3NlYXJjaC5vOglzZWFyY2guYyAgJChJTkNMKQorc3ludGF4Lm86CXN5bnRheC5jICAkKElOQ0wpCit0YWcubzoJCXRhZy5jICAkKElOQ0wpCit0ZXJtLm86CQl0ZXJtLmMgICQoSU5DTCkKK3VpLm86CQl1aS5jICAkKElOQ0wpCit1bmRvLm86CQl1bmRvLmMgICQoSU5DTCkKK3dpbmRvdy5vOgl3aW5kb3cuYyAgJChJTkNMKQpkaWZmIC0tZ2l0IGEvc3JjL01ha2Vfcm8ubWFrIGIvc3JjL01ha2Vfcm8ubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYzJmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvTWFrZV9yby5tYWsKQEAgLTAsMCArMSwxNjggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFZpbSBvbiBSSVNDIE9TIC0gQW5keSBXaW5nYXRlCisjCisKK0dDQwkgICAgPSBnY2MgLW10aHJvd2JhY2sKK0NGTEFHUwkgICA9IC1EUklTQ09TIC1ERkVBVF9HVUkKKyMgT3B0aW1pc2luZyBvbiBleF9kb2NtZC5jIHNlZW1zIHRvIGNhdXNlIHNlZ2ZhdWx0cyBvbiBjb21waWxhdGlvbi4gTmVlZHMgaW52ZXN0aWdhdGlvbi4KK0NDRVhfRE9DTUQgPSAkKEdDQykgJChDRkxBR1MpCitDQwkgICA9ICQoR0NDKSAkKENGTEFHUykgLU8yCisjIC1EVVBfQkNfUENfRVhURVJOIGZvciB0ZXJtLmMgbmVlZGVkIGFzIEJDIGRlZmluZWQgaW4gdGVybWxpYi5jIGFuZCB0ZXJtLmMKKworVEVSTUZMQUcgICA9IC1EVVBfQkNfUENfRVhURVJOCisKK0FTTUZMQUdTICAgPSAtdGhyb3diYWNrIC1vYmphc20gLWdjYworCitPQkpTID0gIG8uYnVmZmVyIG8uY2hhcnNldCBvLmRpZ3JhcGggby5lZGl0IG8uZXZhbCBvLmV4X2NtZHMgby5leF9jbWRzMiBvLmRpZmYgXAorCW8uZXhfZG9jbWQgby5leF9ldmFsIG8uZXhfZ2V0bG4gby5maWxlaW8gby5mb2xkIG8uZ2V0Y2hhciBvLm1haW4gby5tYXJrIG8ubWJ5dGUgIFwKKwlvLm1lbWZpbGUgby5tZW1saW5lIG8ubWVudSBvLm1lc3NhZ2Ugby5taXNjMSBvLm1pc2MyIG8ubW92ZSAgICAgXAorCW8ubm9ybWFsIG8ub3BzIG8ub3B0aW9uIG8ucXVpY2tmaXggby5yZWdleHAgby5zY3JlZW4gby5zZWFyY2ggICBcCisJby5zeW50YXggby50YWcgby50ZXJtIG8udGVybWxpYiBvLnVpIG8udW5kbyBvLnZlcnNpb24gby53aW5kb3cgIFwKKwlvLm9zX3Jpc2NvcyBvLnN3aXMgby5ndWkgby5ndWlfcmlzY29zCisKK1ZpbTogJChPQkpTKQorCSQoR0NDKSAtbyBWaW0gJChPQkpTKQorCitpbnN0YWxsOiBWaW0KKwlzcXVlZXplIC12IFZpbSBALiFWaW0uVmltCisKK2NsZWFuOgorCWNyZWF0ZSBvLiFmYWtlISAwCisJd2lwZSBvLiogfmNmCisJcmVtb3ZlIFZpbQorCitvLnN3aXM6IHMuc3dpcworCWFzICQoQVNNRkxBR1MpIC1vIG8uc3dpcyBzLnN3aXMKKworIyBSdWxlcyBmb3Igb2JqZWN0IGZpbGVzCisjIFlvdSBzaG91bGRuJ3QgbmVlZCB0byBwdXQgYWxsIHRoaXMgaW5mb3JtYXRpb24gaW4gYXMgYWxsIGJ1dCB0ZXJtLmMgaGF2ZSB0aGUgc2FtZQorIyBydWxlIChhbmQgb25seSB0aGVuIHRvIHNhdmUgZXh0cmEgZGVmaW5lcykgYnV0IHNvbWUgdmVyc2lvbnMgb2YgbWFrZSBhcmUgYXdrd2FyZC4KKworby5idWZmZXI6CWMuYnVmZmVyCisJJChDQykgLWMgYy5idWZmZXIgLW8gby5idWZmZXIKKworby5jaGFyc2V0OgljLmNoYXJzZXQKKwkkKENDKSAtYyBjLmNoYXJzZXQgLW8gby5jaGFyc2V0CisKK28uZGlncmFwaDoJYy5kaWdyYXBoCisJJChDQykgLWMgYy5kaWdyYXBoIC1vIG8uZGlncmFwaAorCitvLmRpZmY6CQljLmRpZmYKKwkkKENDKSAtYyBjLmRpZmYgLW8gby5kaWZmCisKK28uZWRpdDoJCWMuZWRpdAorCSQoQ0MpIC1jIGMuZWRpdCAtbyBvLmVkaXQKKworby5ldmFsOgkJYy5ldmFsCisJJChDQykgLWMgYy5ldmFsIC1vIG8uZXZhbAorCitvLmV4X2NtZHM6CWMuZXhfY21kcworCSQoQ0MpIC1jIGMuZXhfY21kcyAtbyBvLmV4X2NtZHMKKworby5leF9jbWRzMjoJYy5leF9jbWRzMgorCSQoQ0MpIC1jIGMuZXhfY21kczIgLW8gby5leF9jbWRzMgorCitvLmV4X2RvY21kOgljLmV4X2RvY21kCisJJChDQ0VYX0RPQ01EKSAtYyBjLmV4X2RvY21kIC1vIG8uZXhfZG9jbWQKKworby5leF9ldmFsOgljLmV4X2V2YWwKKwkkKENDRVhfRE9DTUQpIC1jIGMuZXhfZXZhbCAtbyBvLmV4X2V2YWwKKworby5leF9nZXRsbjoJYy5leF9nZXRsbgorCSQoQ0MpIC1jIGMuZXhfZ2V0bG4gLW8gby5leF9nZXRsbgorCitvLmZpbGVpbzoJYy5maWxlaW8KKwkkKENDKSAtYyBjLmZpbGVpbyAtbyBvLmZpbGVpbworCitvLmZvbGQ6CQljLmZvbGQKKwkkKENDKSAtYyBjLmZvbGQgLW8gby5mb2xkCisKK28uZ2V0Y2hhcjoJYy5nZXRjaGFyCisJJChDQykgLWMgYy5nZXRjaGFyIC1vIG8uZ2V0Y2hhcgorCitvLmd1aToJCWMuZ3VpCisJJChDQykgLWMgYy5ndWkgLW8gby5ndWkKKworby5ndWlfcmlzY29zOgljLmd1aV9yaXNjb3MKKwkkKENDKSAtYyBjLmd1aV9yaXNjb3MgLW8gby5ndWlfcmlzY29zCisKK28ubWFpbjoJCWMubWFpbgorCSQoQ0MpIC1jIGMubWFpbiAtbyBvLm1haW4KKworby5tYXJrOgkJYy5tYXJrCisJJChDQykgLWMgYy5tYXJrIC1vIG8ubWFyaworCitvLm1ieXRlOgljLm1ieXRlCisJJChDQykgLWMgYy5tYnl0ZSAtbyBvLm1ieXRlCisKK28ubWVtZmlsZToJYy5tZW1maWxlCisJJChDQykgLWMgYy5tZW1maWxlIC1vIG8ubWVtZmlsZQorCitvLm1lbWxpbmU6CWMubWVtbGluZQorCSQoQ0MpIC1jIGMubWVtbGluZSAtbyBvLm1lbWxpbmUKKworby5tZW51OgkJYy5tZW51CisJJChDQykgLWMgYy5tZW51IC1vIG8ubWVudQorCitvLm1lc3NhZ2U6CWMubWVzc2FnZQorCSQoQ0MpIC1jIGMubWVzc2FnZSAtbyBvLm1lc3NhZ2UKKworby5taXNjMToJYy5taXNjMQorCSQoQ0MpIC1jIGMubWlzYzEgLW8gby5taXNjMQorCitvLm1pc2MyOgljLm1pc2MyCisJJChDQykgLWMgYy5taXNjMiAtbyBvLm1pc2MyCisKK28ubW92ZToJCWMubW92ZQorCSQoQ0MpIC1jIGMubW92ZSAtbyBvLm1vdmUKKworby5ub3JtYWw6CWMubm9ybWFsCisJJChDQykgLWMgYy5ub3JtYWwgLW8gby5ub3JtYWwKKworby5vcHM6CQljLm9wcworCSQoQ0MpIC1jIGMub3BzIC1vIG8ub3BzCisKK28ub3B0aW9uOgljLm9wdGlvbgorCSQoQ0MpIC1jIGMub3B0aW9uIC1vIG8ub3B0aW9uCisKK28ub3NfcmlzY29zOgljLm9zX3Jpc2NvcworCSQoQ0MpIC1jIGMub3NfcmlzY29zIC1vIG8ub3NfcmlzY29zCisKK28ucHR5OgkJYy5wdHkKKwkkKENDKSAtYyBjLnB0eSAtbyBwLnB0eQorCitvLnF1aWNrZml4OgljLnF1aWNrZml4CisJJChDQykgLWMgYy5xdWlja2ZpeCAtbyBvLnF1aWNrZml4CisKK28ucmVnZXhwOgljLnJlZ2V4cAorCSQoQ0MpIC1jIGMucmVnZXhwIC1vIG8ucmVnZXhwCisKK28uc2NyZWVuOgljLnNjcmVlbgorCSQoQ0MpIC1jIGMuc2NyZWVuIC1vIG8uc2NyZWVuCisKK28uc2VhcmNoOgljLnNlYXJjaAorCSQoQ0MpIC1jIGMuc2VhcmNoIC1vIG8uc2VhcmNoCisKK28uc3ludGF4OgljLnN5bnRheAorCSQoQ0MpIC1jIGMuc3ludGF4IC1vIG8uc3ludGF4CisKK28udGFnOgkJYy50YWcKKwkkKENDKSAtYyBjLnRhZyAtbyBvLnRhZworCitvLnRlcm06CQljLnRlcm0KKwkkKENDKSAkKFRFUk1GTEFHKSAtYyBjLnRlcm0gLW8gby50ZXJtCisKK28udGVybWxpYjoJYy50ZXJtbGliCisJJChDQykgLWMgYy50ZXJtbGliIC1vIG8udGVybWxpYgorCitvLnVpOgkJYy51aQorCSQoQ0MpIC1jIGMudWkgLW8gby51aQorCitvLnVuZG86CQljLnVuZG8KKwkkKENDKSAtYyBjLnVuZG8gLW8gby51bmRvCisKK28udmVyc2lvbjoJYy52ZXJzaW9uCisJJChDQykgLWMgYy52ZXJzaW9uIC1vIG8udmVyc2lvbgorCitvLndpbmRvdzoJYy53aW5kb3cKKwkkKENDKSAtYyBjLndpbmRvdyAtbyBvLndpbmRvdwpkaWZmIC0tZ2l0IGEvc3JjL01ha2Vfc2FzLm1hayBiL3NyYy9NYWtlX3Nhcy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3OTAzYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlX3Nhcy5tYWsKQEAgLTAsMCArMSwzNDUgQEAKKyMgdmltOiBzZXQgZnQ9bWFrZSA6CisjIE1ha2VmaWxlIGZvciBWSU0gb24gdGhlIEFtaWdhLCB1c2luZyBTQVMvTGF0dGljZSBDIDYuMCB0byA2LjU4CisjCisjIERvIE5PVCB1c2UgdGhlIHBlZXBob2xlIG9wdGltaXplciB3aXRoIGEgdmVyc2lvbiBiZWZvcmUgNi41NiEKKyMgSXQgbWVzc2VzIHVwIGFsbCBraW5kcyBvZiB0aGluZ3M6CisjIEZvciA2LjAgYW5kIDYuMSwgZXhwYW5kX2VudigpIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5LgorIyBGb3IgNi4yIGFuZCA2LjMgdGhlIGNhbGwgdG8gZnJlZV9saW5lIGluIHVfZnJlZWVudHJ5IGlzIHdyb25nLgorIyBUaGUgInJlYWQubWUiIGZpbGUgZm9yIHZlcnNpb24gNi41NiBpbmNsdWRlcyBhIHJlbWFyayBhYm91dCBhIGZpeCBmb3IgdGhlCisjIHBlZXBob2xlIG9wdGltaXplci4gIEV2ZXJ5dGhpbmcgYmVmb3JlIDYuNTYgd2lsbCBwcm9iYWJseSBmYWlsLgorIworIyBZb3Ugc2hvdWxkIHVzZSBNYW54IEF6dGVjIEMgd2hlbmV2ZXIgcG9zc2libGUsIGJlY2F1c2UgaXQgaGFzIGJlZW4gdGVzdGVkLgorIworIyBUaGUgcHJvdG90eXBlcyBmcm9tIE1hbnggYW5kIFNBUyBhcmUgaW5jb21wYXRpYmxlLiBJZiB0aGUgcHJvdG90eXBlcworIyB3ZXJlIGdlbmVyYXRlZCBieSBNYW54LCBmaXJzdCBkbyAidG91Y2ggKi5jOyBtYWtlIHByb3RvIiBiZWZvcmUgIm1ha2UiLgorIyBUaGUgcHJvdG90eXBlcyBnZW5lcmF0ZWQgb24gVW5peCB3b3JrIGZvciBib3RoLgorIworIyBOb3RlOiBOb3QgYWxsIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQuIFRoaXMgd2FzIGRvbmUgdG8gYXZvaWQgaGF2aW5nCisjICAgICAgIHRvIGNvbXBpbGUgZXZlcnl0aGluZyB3aGVuIGEgZ2xvYmFsIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIGlzIGFkZGVkLgorCisjPj4+Pj4gY2hvb3NlIG9wdGlvbnM6CisKKyMjIyBTZWUgZmVhdHVyZS5oIGZvciBhIGxpc3Qgb2Ygb3B0aW9uYWxzLgorIyMjIEFueSBvdGhlciBkZWZpbmVzIGNhbiBiZSBpbmNsdWRlZCBoZXJlLgorCisjIE5PX0FSUAlEb24ndCBpbmNsdWRlIEFSUCBmdW5jdGlvbnMKKyMgU0FTQz02NTgJU2FzL0MgdmVyc2lvbiBudW1iZXIKKyMgTkVXU0FTQwlmaXhlcyBhIGJ1ZyBpbiB0aGUgc3ludGF4IGhpZ2hsaWdodGluZz8KK0RFRklORVMgPSBERUY9Tk9fQVJQIERFRj1ORVdTQVNDIERFRj0iU0FTQz02NTgiCisKKyM+Pj4+PiBpZiBIQVZFX1RHRVRFTlQgaXMgZGVmaW5lZCB0ZXJtbGliLm8gaGFzIHRvIGJlIHVzZWQKKyNURVJNTElCID0gdGVybWxpYi5vCitURVJNTElCID0KKworIz4+Pj4+IGNob29zZSBOT0RFQlVHIGZvciBub3JtYWwgY29tcGlsaW5nLCB0aGUgb3RoZXIgZm9yIGRlYnVnZ2luZyBhbmQKKyMgcHJvZmlsaW5nCisjIGRvbid0IHN3aXRjaCBvbiBkZWJ1Z2dpbmcgd2hlbiBnZW5lcmF0aW5nIHByb3RvIGZpbGVzLCBpdCBjcmFzaGVzIHRoZQorIyBjb21waWxlci4KK0RCRyA9IE5PREVCVUcKKyNEQkcgPSBEQkc9U0YKKworIz4+Pj4+IGNob29zZSBOT09QVFBFRVAgZm9yIDYuMCB0byA2LjMsIE5PT1BUIGZvciBkZWJ1Z2dpbmcKKyMgd2l0aCB2ZXJzaW9uIDYuNTYgYW5kIGxhdGVyIHlvdSBjYW4gcHJvYmFibHkgdXNlIE9QVAorT1BUSU1JWkUgID0gT1BUCisjT1BUSU1JWkUgPSBOT09QVFBFRVAKKyNPUFRJTUlaRSA9IE5PT1BUCisKKyMgZm9yIDYuNTggeW91IGNhbiB1c2UgdGhlIGxpbmUgYmVsb3csIGJ1dCBiZSB3YXJuZWQgaXQgdGFrZXMgYSBsb29vb25ubmdnZyB0aW1lCisjT1BUSU1JWkU9T1BUICBPUFRJTUlaRVJTQ0hFRFVMRVIgT1BUSU1JWkVSVElNRSBOb09QVElNSVpFUkFMSUFTIFwKKwlPcHRpbWl6ZXJDb21wbGV4aXR5PTEwIE9wdGltaXplckRlcHRoPTEwIE9wdGltaXplclJlY3VyRGVwdGg9MTAgXAorCU9wdGltaXplckluTG9jYWwgT1BUUEVFUAorCisjZ2VuZXJhdGUgY29kZSBmb3IgeW91ciBwcm9jZXNzb3IgLSA2ODA2MCB3aWxsIHdvcmsgZm9yIDA0MCdzIGFzIHdlbGwuCitDUFU9NjgwMDAKKyNDUFU9NjgwMjAKKyNDUFU9NjgwMzAKKyNDUFU9NjgwNDAKKyNDUFU9NjgwNjAKKworI0Vycm9yIHJlcG9ydGluZyAtIHJleHggb3IgY29uc29sZQorRVJST1IgPSBFUlJPUkNPTlNPTEUgRVJST1JTT1VSQ0UgRVJST1JISUdITElHSFQKKyNFUlJPUiA9IEVSUk9SUkVYWCBFUlJPUkNPTlNPTEUgRVJST1JTT1VSQ0UgRVJST1JISUdITElHSFQKKworI21lbW9yeSB0eXBlcywgaWYgeW91IGhhdmUgZmFzdCB1c2UgaXQgOi0+LAorIwlBTlkgPSB3aWxsIHdvcmsgb24gYWxsIG1hY2hpbmVzCisjCUZBU1QgPSB0aGlzIGlzIHRoZSBiZXN0IG9wdGlvbiwgZm9yIHNwZWVkCisjTUVNT1JZVFlQRT1GQVNUCitNRU1PUllUWVBFPUFOWQorCisjTUVNU0laRSAtIHRoaXMgaXMgZm9yIGNvbXBpbGUgdGltZSBvbmx5IGZvciBzcGVlZCBvZiBjb21waWxhdGlvbgorI01FTVNJWkU9SFVHRQorTUVNU0laRT1MQVJHRQorI01FTVNJWkU9U01BTEwKKworIz4+Pj4+IGVuZCBvZiBjaG9pY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQ0MJPSBzYworR1NUCT0gdmltLmdzdAorQ09QVFMJPSBTSU5UIFNDT0RFIFNEQVRBCitTSEVMTAk9IGNzaAorREVMCT0gJChTSEVMTCkgLWMgcm0gLWYKKworIyBpZ25vcmUgZXJyb3IgbWVzc2FnZXMgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB0aGV5IGFyZSBtb3N0bHkgbm90IGNvcnJlY3QKK0NGTEFHUyAgPSBOT0xJTksgJChEQkcpIENQVT0kKENQVSkgTk9TVEFDS0NIRUNLIERFRj1BTUlHQSBDT0RFPUZBUiBpZGlyPXByb3RvIGlnbm9yZT0zMTcKK0NGTEFHUzIgPSAkKE9QVElNSVpFKSAkKEVSUk9SKSBHU1RJTU1FRElBVEUgR1NUPSQoR1NUKQorQ0ZMQUdTMyA9ICQoQ09QVFMpIFNUUklOR01FUkdFIE1FTVNJWkU9JChNRU1TSVpFKQorQ0ZMQUdTNCA9ICQoREVGSU5FUykgREFUQU1FTU9SWT0kKE1FTU9SWVRZUEUpCisKK1BST1BUID0gREVGPVBST1RPIEdQUk9UTyBHUFBBUk0gTUFYSU1VTUVSUk9SUz05OTkgR0VOUFJPVE9TVEFUSUNTIEdFTlBST1RPUEFSQU1FVEVSUworCitTUkMgPSBcCisJYnVmZmVyLmMgXAorCWNoYXJzZXQuYyBcCisJZGlmZi5jIFwKKwlkaWdyYXBoLmMgXAorCWVkaXQuYyBcCisJZXZhbC5jIFwKKwlleF9jbWRzLmMgXAorCWV4X2NtZHMyLmMgXAorCWV4X2RvY21kLmMgXAorCWV4X2V2YWwuYyBcCisJZXhfZ2V0bG4uYyBcCisJZmlsZWlvLmMgXAorCWZvbGQuYyBcCisJZ2V0Y2hhci5jIFwKKwltYWluLmMgXAorCW1hcmsuYyBcCisJbWVtZmlsZS5jIFwKKwltZW1saW5lLmMgXAorCW1lbnUuYyBcCisJbWVzc2FnZS5jIFwKKwltaXNjMS5jIFwKKwltaXNjMi5jIFwKKwltb3ZlLmMgXAorCW1ieXRlLmMgXAorCW5vcm1hbC5jIFwKKwlvcHMuYyBcCisJb3B0aW9uLmMgXAorCW9zX2FtaWdhLmMgXAorCXF1aWNrZml4LmMgXAorCXJlZ2V4cC5jIFwKKwlzY3JlZW4uYyBcCisJc2VhcmNoLmMgXAorCXN5bnRheC5jIFwKKwl0YWcuYyBcCisJdGVybS5jIFwKKwl1aS5jIFwKKwl1bmRvLmMgXAorCXdpbmRvdy5jIFwKKwl2ZXJzaW9uLmMKKworT0JKID0gXAorCWJ1ZmZlci5vIFwKKwljaGFyc2V0Lm8gXAorCWRpZmYubyBcCisJZGlncmFwaC5vIFwKKwllZGl0Lm8gXAorCWV2YWwubyBcCisJZXhfY21kcy5vIFwKKwlleF9jbWRzMi5vIFwKKwlleF9kb2NtZC5vIFwKKwlleF9ldmFsLm8gXAorCWV4X2dldGxuLm8gXAorCWZpbGVpby5vIFwKKwlmb2xkLm8gXAorCWdldGNoYXIubyBcCisJbWFpbi5vIFwKKwltYXJrLm8gXAorCW1lbWZpbGUubyBcCisJbWVtbGluZS5vIFwKKwltZW51Lm8gXAorCW1lc3NhZ2UubyBcCisJbWlzYzEubyBcCisJbWlzYzIubyBcCisJbW92ZS5vIFwKKwltYnl0ZS5vIFwKKwlub3JtYWwubyBcCisJb3BzLm8gXAorCW9wdGlvbi5vIFwKKwlvc19hbWlnYS5vIFwKKwlxdWlja2ZpeC5vIFwKKwlyZWdleHAubyBcCisJc2NyZWVuLm8gXAorCXNlYXJjaC5vIFwKKwlzeW50YXgubyBcCisJdGFnLm8gXAorCXRlcm0ubyBcCisJdWkubyBcCisJdW5kby5vIFwKKwl3aW5kb3cubyBcCisJJChURVJNTElCKQorCitQUk8gPSBcCisJcHJvdG8vYnVmZmVyLnBybyBcCisJcHJvdG8vY2hhcnNldC5wcm8gXAorCXByb3RvL2RpZmYucHJvIFwKKwlwcm90by9kaWdyYXBoLnBybyBcCisJcHJvdG8vZWRpdC5wcm8gXAorCXByb3RvL2V2YWwucHJvIFwKKwlwcm90by9leF9jbWRzLnBybyBcCisJcHJvdG8vZXhfY21kczIucHJvIFwKKwlwcm90by9leF9kb2NtZC5wcm8gXAorCXByb3RvL2V4X2V2YWwucHJvIFwKKwlwcm90by9leF9nZXRsbi5wcm8gXAorCXByb3RvL2ZpbGVpby5wcm8gXAorCXByb3RvL2ZvbGQucHJvIFwKKwlwcm90by9nZXRjaGFyLnBybyBcCisJcHJvdG8vbWFpbi5wcm8gXAorCXByb3RvL21hcmsucHJvIFwKKwlwcm90by9tZW1maWxlLnBybyBcCisJcHJvdG8vbWVtbGluZS5wcm8gXAorCXByb3RvL21lbnUucHJvIFwKKwlwcm90by9tZXNzYWdlLnBybyBcCisJcHJvdG8vbWlzYzEucHJvIFwKKwlwcm90by9taXNjMi5wcm8gXAorCXByb3RvL21vdmUucHJvIFwKKwlwcm90by9tYnl0ZS5wcm8gXAorCXByb3RvL25vcm1hbC5wcm8gXAorCXByb3RvL29wcy5wcm8gXAorCXByb3RvL29wdGlvbi5wcm8gXAorCXByb3RvL29zX2FtaWdhLnBybyBcCisJcHJvdG8vcXVpY2tmaXgucHJvIFwKKwlwcm90by9yZWdleHAucHJvIFwKKwlwcm90by9zY3JlZW4ucHJvIFwKKwlwcm90by9zZWFyY2gucHJvIFwKKwlwcm90by9zeW50YXgucHJvIFwKKwlwcm90by90YWcucHJvIFwKKwlwcm90by90ZXJtLnBybyBcCisJcHJvdG8vdGVybWxpYi5wcm8gXAorCXByb3RvL3VpLnBybyBcCisJcHJvdG8vdW5kby5wcm8gXAorCXByb3RvL3dpbmRvdy5wcm8KKworYWxsOiBwcm90byBWaW0KKworVmltOiBzY29wdGlvbnMgJChPQkopIHZlcnNpb24uYyB2ZXJzaW9uLmgKKwkkKENDKSAkKENGTEFHUykgdmVyc2lvbi5jCisJJChDQykgTElOSyAkKENPUFRTKSAkKE9CSikgdmVyc2lvbi5vICQoREJHKSBQTkFNRT1WaW0KKworZGVidWc6IHNjb3B0aW9ucyAkKE9CSikgdmVyc2lvbi5jIHZlcnNpb24uaAorCSQoQ0MpICQoQ0ZMQUdTKSB2ZXJzaW9uLmMKKwkkKENDKSBMSU5LICQoQ09QVFMpICQoT0JKKSB2ZXJzaW9uLm8gJChEQkcpIFBOQU1FPVZpbQorCitwcm90bzogJChHU1QpICQoUFJPKQorCit0YWdzOgorCXNwYXQgY3RhZ3MgJChTUkMpICouaAorIwljc2ggLWMgY3RhZ3MgJChTUkMpICouaAorCisjIGNhbid0IHVzZSBkZWxldGUgaGVyZSwgdG9vIG1hbnkgZmlsZSBuYW1lcworY2xlYW46CisJJChERUwpICoubyBWaW0gJChHU1QpCisKKyMgZ2VuZXJhdGUgR2xvYmFsU3ltYm9sVGFibGUsIHdoaWNoIHNwZWVkcyB1cCB0aGUgY29tcGlsZSB0aW1lLgorIworIyBBIHByZXByb2Nlc3Npbmcgc3RhZ2UgaXMgdXNlZCB0byB3b3JrIGFyb3VuZGEgYnVnIGluIHRoZSBHU1QgZ2VuZXJhdG9yLCBpbgorIyB0aGF0IGl0IGRvZXMgbm90IGhhbmRsZSBuZXN0ZWQgbWFrZWZpbGVzIHByb3Blcmx5IGluIHRoaXMgc3RhZ2UuCisjIElnbm9yZSBlcnJvciBtZXNzYWdlIGZvciBub3QgcHJvZHVjaW5nIGFueSBjb2RlICgxMDUpLgorJChHU1QpOiBzY29wdGlvbnMgdmltLmgga2V5bWFwLmggbWFjcm9zLmggYXNjaWkuaCB0ZXJtLmggc3RydWN0cy5oCisJJChDQykgJChDRkxBR1MpIFBSRVBST0NFU1NPUk9OTFkgdmltLmggb2JqZWN0bmFtZSBwcmUuaAorCSQoQ0MpIE1HU1Q9JChHU1QpIHByZS5oIGlnbm9yZT0xMDUKKwkkKERFTCkgcHJlLmgKKworIyBnZW5lcmF0ZSBhbiBvcHRpb25zIGZpbGUsIGJlY2F1c2UgU0FTL0Mgc21ha2UgY2FuJ3QgaGFuZGxlIHRoZSBhbWlnYSBjb21tYW5kCisjIGxpbmUgY2FuIGhhbmRsZSB0aGUgbGVuZ3RocyB0aGF0IHRoaXMgbWFrZWZpbGUgd2lsbCBpbXBvc2Ugb24gdGhlIHNoZWxsLgorIyAoTWFueCdzIG1ha2UgY2FuIGRvIHRoaXMpLgorc2NvcHRpb25zOiBNYWtlX3Nhcy5tYWsKKwlAZWNobyAiR2VuZXJhdGluZyAtICRAIC4uLiIKKwlAZWNobyAkKENGTEFHUykgPiBzY29wdGlvbnMKKwlAZWNobyAkKENGTEFHUzEpID4+IHNjb3B0aW9ucworCUBlY2hvICQoQ0ZMQUdTMikgPj4gc2NvcHRpb25zCisJQGVjaG8gJChDRkxBR1MzKSA+PiBzY29wdGlvbnMKKwlAZWNobyAkKENGTEFHUzQpID4+IHNjb3B0aW9ucworCUBlY2hvICQoQ09QVFMpID4+c2NvcHRpb25zCisJQGVjaG8gZG9uZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJChPQkopOiAkKEdTVCkgdmltLmgKKyQoUFJPKTogJChHU1QpIHZpbS5oCisKKy5jLm86CisJJChDQykgJChDRkxBR1MpICQqLmMKKworLmMucHJvOgorCSQoQ0MpICQoQ0ZMQUdTKSBHUEZJTEU9cHJvdG8vJCoucHJvICQoUFJPUFQpICQqLmMKKworIyBkZXBlbmRhbmNpZXMKK2J1ZmZlci5vOgkJYnVmZmVyLmMKK3Byb3RvL2J1ZmZlci5wcm86CWJ1ZmZlci5jCitjaGFyc2V0Lm86CQljaGFyc2V0LmMKK3Byb3RvL2NoYXJzZXQucHJvOgljaGFyc2V0LmMKK2RpZmYubzoJCQlkaWZmLmMKK3Byb3RvL2RpZmYucHJvOgkJZGlmZi5jCitkaWdyYXBoLm86CQlkaWdyYXBoLmMKK3Byb3RvL2RpZ3JhcGgucHJvOglkaWdyYXBoLmMKK2VkaXQubzoJCQllZGl0LmMKK3Byb3RvL2VkaXQucHJvOgkJZWRpdC5jCitldmFsLm86CQkJZXZhbC5jCitwcm90by9ldmFsLnBybzoJCWV2YWwuYworZXhfY21kcy5vOgkJZXhfY21kcy5jCitwcm90by9leF9jbWRzLnBybzoJZXhfY21kcy5jCitleF9jbWRzMi5vOgkJZXhfY21kczIuYworcHJvdG8vZXhfY21kczIucHJvOglleF9jbWRzMi5jCitleF9kb2NtZC5vOgkJZXhfZG9jbWQuYyBleF9jbWRzLmgKK3Byb3RvL2V4X2RvY21kLnBybzoJZXhfZG9jbWQuYyBleF9jbWRzLmgKK2V4X2V2YWwubzoJCWV4X2V2YWwuYyBleF9jbWRzLmgKK3Byb3RvL2V4X2V2YWwucHJvOglleF9ldmFsLmMgZXhfY21kcy5oCitleF9nZXRsbi5vOgkJZXhfZ2V0bG4uYworcHJvdG8vZXhfZ2V0bG4ucHJvOglleF9nZXRsbi5jCitmaWxlaW8ubzoJCWZpbGVpby5jCitwcm90by9maWxlaW8ucHJvOglmaWxlaW8uYworZm9sZC5vOgkJCWZvbGQuYworcHJvdG8vZm9sZC5wcm86CQlmb2xkLmMKK2dldGNoYXIubzoJCWdldGNoYXIuYworcHJvdG8vZ2V0Y2hhci5wcm86CWdldGNoYXIuYworbWFpbi5vOgkJCW1haW4uYworcHJvdG8vbWFpbi5wcm86CQltYWluLmMKK21hcmsubzoJCQltYXJrLmMKK3Byb3RvL21hcmsucHJvOgkJbWFyay5jCittZW1maWxlLm86CQltZW1maWxlLmMKK3Byb3RvL21lbWZpbGUucHJvOgltZW1maWxlLmMKK21lbWxpbmUubzoJCW1lbWxpbmUuYworcHJvdG8vbWVtbGluZS5wcm86CW1lbWxpbmUuYworbWVudS5vOgkJCW1lbnUuYworcHJvdG8vbWVudS5wcm86CQltZW51LmMKK21lc3NhZ2UubzoJCW1lc3NhZ2UuYworcHJvdG8vbWVzc2FnZS5wcm86CW1lc3NhZ2UuYworbWlzYzEubzoJCW1pc2MxLmMKK3Byb3RvL21pc2MxLnBybzoJbWlzYzEuYworbWlzYzIubzoJCW1pc2MyLmMKK3Byb3RvL21pc2MyLnBybzoJbWlzYzIuYworbW92ZS5vOgkJCW1vdmUuYworcHJvdG8vbW92ZS5wcm86CQltb3ZlLmMKK21ieXRlLm86CQltYnl0ZS5jCitwcm90by9tYnl0ZS5wcm86CW1ieXRlLmMKK25vcm1hbC5vOgkJbm9ybWFsLmMKK3Byb3RvL25vcm1hbC5wcm86CW5vcm1hbC5jCitvcHMubzoJCQlvcHMuYworcHJvdG8vb3BzLnBybzoJCW9wcy5jCitvcHRpb24ubzoJCW9wdGlvbi5jCitwcm90by9vcHRpb24ucHJvOglvcHRpb24uYworb3NfYW1pZ2EubzoJCW9zX2FtaWdhLmMKK3Byb3RvL29zX2FtaWdhLnBybzoJb3NfYW1pZ2EuYworcXVpY2tmaXgubzoJCXF1aWNrZml4LmMKK3Byb3RvL3F1aWNrZml4LnBybzoJcXVpY2tmaXguYworcmVnZXhwLm86CQlyZWdleHAuYworcHJvdG8vcmVnZXhwLnBybzoJcmVnZXhwLmMKK3NjcmVlbi5vOgkJc2NyZWVuLmMKK3Byb3RvL3NjcmVlbi5wcm86CXNjcmVlbi5jCitzZWFyY2gubzoJCXNlYXJjaC5jCitwcm90by9zZWFyY2gucHJvOglzZWFyY2guYworc3ludGF4Lm86CQlzeW50YXguYworcHJvdG8vc3ludGF4LnBybzoJc3ludGF4LmMKK3RhZy5vOgkJCXRhZy5jCitwcm90by90YWcucHJvOgkJdGFnLmMKK3Rlcm0ubzoJCQl0ZXJtLmMKK3Byb3RvL3Rlcm0ucHJvOgkJdGVybS5jCit0ZXJtbGliLm86CQl0ZXJtbGliLmMKK3Byb3RvL3Rlcm1saWIucHJvOgl0ZXJtbGliLmMKK3VpLm86CQkJdWkuYworcHJvdG8vdWkucHJvOgkJdWkuYwordW5kby5vOgkJCXVuZG8uYworcHJvdG8vdW5kby5wcm86CQl1bmRvLmMKK3dpbmRvdy5vOgkJd2luZG93LmMKZGlmZiAtLWdpdCBhL3NyYy9NYWtlX3Ztcy5tbXMgYi9zcmMvTWFrZV92bXMubW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxY2U5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvTWFrZV92bXMubW1zCkBAIC0wLDAgKzEsNDU3IEBACisjCisjIE1ha2VmaWxlIGZvciBWaW0gb24gT3BlblZNUworIworIyBNYWludGFpbmVyOiAgIFpvbHRhbiBBcnBhZGZmeSA8YXJwYWRmZnlAcG9sYXJob21lLmNvbT4KKyMgTGFzdCBjaGFuZ2U6ICAyMDA0IE1heSAwNAorIworIyBUaGlzIGhhcyBzY3JpcHQgYmVlbiB0ZXN0ZWQgb24gVk1TIDYuMiB0byA3LjMgb24gREVDIEFscGhhIGFuZCBWQVgKKyMgd2l0aCBNTVMgYW5kIE1NSworIworIyBUaGUgZm9sbG93aW5nIGNvdWxkIGJlIGJ1aWx0OgorIwl2aW0uZXhlOglzdGFuZGFyZCAodGVybWluYWwsIEdVSS9Nb3RpZiwgR1VJL0dUSykKKyMJZHZpbS5leGU6CWRlYnVnCisjCisjIEVkaXQgdGhlIGxpbmVzIGluIHRoZSBDb25maWd1cmF0aW9uIHNlY3Rpb24gYmVsb3cgZm9yIGZpbmUgdHVuaW5nLgorIworIyBUbyBidWlsZDogICAgbW1zL2Rlc2NyaXA9TWFrZV92bXMubW1zCisjIFRvIGNsZWFuIHVwOiBtbXMvZGVzY3JpcD1NYWtlX3Ztcy5tbXMgY2xlYW4KKyMKKyMgSGludHMgYW5kIGRldGFpbGVkIGRlc2NyaXB0aW9uIGNvdWxkIGJlIGZvdW5kIGluIElOU1RBTExWTVMuVFhUIGZpbGUuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbmZpZ3VyYXRpb24gc2VjdGlvbi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGxhdGZvcm0gc2VsZWN0aW9uCisjIERlZmluZSB0aGlzIGlmIHlvdSB3aWxsIHVzZSB0aGUgVkFYIHBsYXRmb3JtIHRvIGJ1aWxkLgorIyBWQVggPSBZRVMKKworIyBWTVMgdmVyc2lvbgorIyBVbmNvbW1lbnQgaWYgeW91IHVzZSBWTVMgdmVyc2lvbiA2LjIgb3Igb2xkZXIKKyMgT0xEX1ZNUyA9IFlFUworCisjIENvbXBpbGVyIHNlbGVjdGlvbi4KKyMgQ29tbWVudCBvdXQgaWYgeW91IHVzZSB0aGUgVkFYQyBjb21waWxlcgorREVDQyA9IFlFUworCisjIEJ1aWxkIG1vZGVsIHNlbGVjdGlvbgorIyBUSU5ZICAgLSBBbG1vc3Qgbm8gZmVhdHVyZXMgZW5hYmxlZCwgbm90IGV2ZW4gbXVsdGlwbGUgd2luZG93cworIyBTTUFMTCAgLSBGZXcgZmVhdHVyZXMgZW5hYmxlZCwgYXMgYmFzaWMgYXMgcG9zc2libGUKKyMgTk9STUFMIC0gQSBkZWZhdWx0IHNlbGVjdGlvbiBvZiBmZWF0dXJlcyBlbmFibGVkCisjIEJJRyAgICAtIE1hbnkgZmVhdHVyZXMgZW5hYmxlZCwgYXMgcmljaCBhcyBwb3NzaWJsZS4gKGRlZmF1bHQpCisjIEhVR0UgICAtIEFsbCBwb3NzaWJsZSBmZWF0dWVzIGVuYWJsZWQuCisjIFBsZWFzZSBzZWxlY3Qgb25lIG9mIHRoZXNlIGFsdGVybmF0aXZlcyBhYm92ZS4KK01PREVMID0gQklHCisKKyMgR1VJIG9yIHRlcm1pbmFsIG1vZGUgZXhlY3V0YWJsZS4KKyMgQ29tbWVudCBvdXQgaWYgeW91IHdhbnQganVzdCB0aGUgY2hhcmFjdGVyIHRlcm1pbmFsIG1vZGUgb25seS4KK0dVSSA9IFlFUworCisjIEdVSSB3aXRoIEdUSworIyBJZiB5b3UgaGF2ZSBHVEsgaW5zdGFsbGVkIHlvdSBtaWdodCB3YW50IHRvIGVuYWJsZSB0aGlzIG9wdGlvbi4KKyMgR1RLID0gWUVTCisKKyMgQ29tbWVudCBvdXQgaWYgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHZlcnNpb24gd2l0aCA6dmVyIGNvbW1hbmQuCisjIE5PVEU6IFRoaXMgcGFydCBjYW4gbWFrZSBzb21lIGNvbXBsaWNhdGlvbnMgaWYgeW91J3JlIHVzaW5nIHNvbWUKKyMgcHJlZGVmaW5lZCBzeW1ib2xzL2ZsYWdzIGZvciB5b3VyIGNvbXBpbGVyLiBJZiBkb2VzLCBqdXN0IGxlYXZlIGJlaGluZAorIyB0aGUgY29tbWVudCB2YXJpYWxiZSBDQ1ZFUi4KK0NDVkVSID0gWUVTCisKKyMgVW5jb21tZW50IGlmIHdhbnQgYSBkZWJ1ZyB2ZXJzaW9uLiBSZXN1bHRpbmcgZXhlY3V0YWJsZSBpcyBEVklNLkVYRQorIyBEZXZlbG9wbWVudCBwdXJwb3NlIG9ubHkhIE5vcm1hbGx5LCBpdCBzaG91bGQgbm90IGJlIGRlZmluZWQuICEhIQorIyBERUJVRyA9IFlFUworCisjIExhbmd1YWdlcyBzdXBwb3J0IGZvciBQZXJsLCBQeXRob24sIFRDTCBldGMuCisjIElmIHlvdSBkb24ndCBuZWVkIGl0IHJlYWxseSwgbGVhdmUgdGhlbSBiZWhpbmQgdGhlIGNvbW1lbnQuCisjIFlvdSB3aWxsIG5lZWQgcmVsYXRlZCBsaWJyYXJpZXMsIGluY2x1ZGUgZmlsZXMgZXRjLgorIyBWSU1fVENMICAgID0gWUVTCisjIFZJTV9QRVJMICAgPSBZRVMKKyMgVklNX1BZVEhPTiA9IFlFUworIyBWSU1fUlVCWSAgID0gWUVTCisjIFZJTV9TTklGRiAgPSBZRVMKKworIyBYIElucHV0IE1ldGhvZC4gIEZvciBlbnRlcmluZyBzcGVjaWFsIGxhbmd1YWdlcyBsaWtlIGNoaW5lc2UgYW5kCisjIEphcGFuZXNlLiBQbGVhc2UgZGVmaW5lIGp1c3Qgb25lOiBWSU1fWElNIG9yIFZJTV9IQU5HVUxJTgorIyBJZiB5b3UgZG9uJ3QgbmVlZCBpdCByZWFsbHksIGxlYXZlIGl0IGJlaGluZCB0aGUgY29tbWVudC4KKyMgVklNX1hJTSA9IFlFUworCisjIEludGVybmFsIEhhbmd1bCBpbnB1dCBtZXRob2QuIEdVSSBvbmx5LgorIyBJZiB5b3UgZG9uJ3QgbmVlZCBpdCByZWFsbHksIGxlYXZlIGl0IGJlaGluZCB0aGUgY29tbWVudC4KKyMgVklNX0hBTkdVTElOID0gWUVTCisKKyMgQWxsb3cgYW55IHdoaXRlIHNwYWNlIHRvIHNlcGFyYXRlIHRoZSBmaWVsZHMgaW4gYSB0YWdzIGZpbGUKKyMgV2hlbiBub3QgZGVmaW5lZCwgb25seSBhIFRBQiBpcyBhbGxvd2VkLgorIyBWSU1fVEFHX0FOWVdISVRFID0gWUVTCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGlyZWN0b3J5LCBsaWJyYXJ5IGFuZCBpbmNsdWRlIGZpbGVzIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi4KKyMgTm9ybWFsbHkgeW91IG5lZWQgbm90IHRvIGNoYW5nZSBhbnl0aGluZyBiZWxvdy4gIQorIyBUaGVzZSBtYXkgbmVlZCB0byBiZSBkZWZpbmVkIGlmIHRoaW5ncyBhcmUgbm90IGluIHN0YW5kYXJkIGxvY2F0aW9ucworIworIyBZb3UgY2FuIGZpbmQgc29tZSBleHBsYW5hdGlvbiBpbiBJTlNUQUxMVk1TLlRYVAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIENvbXBpbGVyIHNldHVwCisKKy5JRkRFRiBWQVgKKy5JRkRFRiBERUNDCSAgICAgIyBWQVggd2l0aCBERUNDCitDQ19ERUYgID0gY2MvZGVjYworUFJFRklYICA9IC9wcmVmaXg9YWxsCisuRUxTRQkJICAgICAjIFZBWCB3aXRoIFZBWEMKK0NDX0RFRgk9IGNjCitQUkVGSVgJPQorQ0NWRVIJPQorLkVORElGCisuRUxTRQkJICAgICAjIEFYUCB3aXhoIERFQ0MKK0NDX0RFRiAgPSBjYworUFJFRklYICA9IC9wcmVmaXg9YWxsCisuRU5ESUYKKworTERfREVGICA9IGxpbmsKK0NfSU5DICAgPSBbLnByb3RvXQorCisuSUZERUYgT0xEX1ZNUworVk1TX0RFRiA9ICwiT0xEX1ZNUyIKKy5FTkRJRgorCisuSUZERUYgREVCVUcKK0RFQlVHX0RFRiA9ICwiREVCVUciCitUQVJHRVQgICAgPSBkdmltLmV4ZQorQ0ZMQUdTICAgID0gL2RlYnVnL25vb3B0JChQUkVGSVgpCitMREZMQUdTICAgPSAvZGVidWcKKy5FTFNFCitUQVJHRVQgICAgPSB2aW0uZXhlCitDRkxBR1MgICAgPSAvb3B0JChQUkVGSVgpCitMREZMQUdTICAgPQorLkVORElGCisKKyMgUHJlZGVmaW5lZCBWSU0gZGlyZWN0b3JpZXMKKyMgUGxlYXNlLCB1c2UgJFZJTSBhbmQgJFZJTVJVTlRJTUUgbG9naWNhbHMgaW5zdGVhZAorVklNTE9DICA9ICIiCitWSU1SVU4gID0gIiIKKworQ09ORklHX0ggPSBvc192bXNfY29uZi5oCisKKy5JRkRFRiBHVEsKKy5JRkRFRiBHVUkKKy5FTFNFCitHVUkgPSBZRVMKKy5FTkRJRgorLkVORElGCisKKy5JRkRFRiBHVUkKKyMgWC9Nb3RpZi9HVEsgZXhlY3V0YWJsZSAgKGFsc28gd29ya3MgaW4gdGVybWluYWwgbW9kZSApCisKKy5JRkRFRiBHVEsKK0dUS19ESVIgID0gQUxQSEEkREtBMDpbR1RLMTI4Ll0KK0RFRlMgICAgID0gIkhBVkVfQ09ORklHX0giLCJGRUFUX0dVSV9HVEsiCitMSUJTICAgICA9ICxPU19WTVNfR1RLLk9QVC9PUFQKK0dVSV9GTEFHID0gL25hbWU9KGFzX2lzLHNob3J0KS9mbG9hdD1pZWVlL2llZWU9ZGVub3JtCitHVUlfU1JDICA9IGd1aS5jIGd1aV9ndGsuYyBndWlfZ3RrX2YuYyBndWlfZ3RrX3gxMS5jIHB0eS5jCitHVUlfT0JKICA9IGd1aS5vYmogZ3VpX2d0ay5vYmogZ3VpX2d0a19mLm9iaiBndWlfZ3RrX3gxMS5vYmogcHR5Lm9iagorR1VJX0lOQyAgPSAsIi9ndGtfcm9vdC9ndGsiLCIvZ3RrX3Jvb3QvZ2xpYiIKKyMgR1VJX0lOQ19WRVIgaXMgdXNlZCBqdXN0IGZvciA6dmVyIGluZm9ybWF0aW9uCisjIHRoaXMgc3RyaW5nIHNob3VsZCBlc2NhcGUgZnJvbSBDIGFuZCBEQ0wgaW4gdGhlIHNhbWUgdGltZQorR1VJX0lOQ19WRVI9ICxcIiIvZ3RrX3Jvb3QvZ3RrXCIiLFwiIi9ndGtfcm9vdC9nbGliXCIiCisuZWxzZQorTU9USUYJID0gWUVTCitERUZTICAgICA9ICJIQVZFX0NPTkZJR19IIiwiRkVBVF9HVUlfTU9USUYiCitMSUJTICAgICA9ICxPU19WTVNfTU9USUYuT1BUL09QVAorR1VJX0ZMQUcgPQorR1VJX1NSQyAgPSBndWkuYyBndWlfbW90aWYuYyBndWlfeDExLmMKK0dVSV9PQkogID0gZ3VpLm9iaiBndWlfbW90aWYub2JqIGd1aV94MTEub2JqCitHVUlfSU5DICA9CisuRU5ESUYKKworIyBZb3UgbmVlZCB0byBkZWZpbmUgdGhlc2UgdmFyaWFibGVzIGlmIHlvdSBkbyBub3QgaGF2ZSBERUNXIGZpbGVzCisjIGF0IHN0YW5kYXJkIGxvY2F0aW9uCitHVUlfSU5DX0RJUiA9ICxkZWN3JGluY2x1ZGU6CisjIEdVSV9MSUJfRElSID0gLHN5cyRsaWJyYXJ5OgorCisuRUxTRQorIyBDaGFyYWN0ZXIgdGVybWluYWwgb25seSBleGVjdXRhYmxlCitERUZTCSA9ICJIQVZFX0NPTkZJR19IIgorTElCUwkgPQorLkVORElGCisKKy5JRkRFRiBWSU1fUEVSTAorIyBQZXJsIHJlbGF0ZWQgc2V0dXAuCitQRVJMCSA9IHBlcmwKK1BFUkxfREVGID0gLCJGRUFUX1BFUkwiCitQRVJMX1NSQyA9IGlmX3BlcmxzZmlvLmMgaWZfcGVybC54cworUEVSTF9PQkogPSBpZl9wZXJsc2Zpby5vYmogaWZfcGVybC5vYmoKK1BFUkxfTElCID0gLE9TX1ZNU19QRVJMLk9QVC9PUFQKK1BFUkxfSU5DID0gLGRrYTA6W3BlcmxidWlsZC5wZXJsLmxpYi52bXNfYXhwLjVfNl8xLmNvcmVdCisuRU5ESUYKKworLklGREVGIFZJTV9QWVRIT04KKyMgUHl0aG9uIHJlbGF0ZWQgc2V0dXAuCitQWVRIT05fREVGID0gLCJGRUFUX1BZVEhPTiIKK1BZVEhPTl9TUkMgPSBpZl9weXRob24uYworUFlUSE9OX09CSiA9IGlmX3B5dGhvbi5vYmoKK1BZVEhPTl9MSUIgPSAsT1NfVk1TX1BZVEhPTi5PUFQvT1BUCitQWVRIT05fSU5DID0gLFBZVEhPTl9JTkNMVURFCisuRU5ESUYKKworLklGREVGIFZJTV9UQ0wKKyMgVENMIHJlbGF0ZWQgc2V0dXAuCitUQ0xfREVGID0gLCJGRUFUX1RDTCIKK1RDTF9TUkMgPSBpZl90Y2wuYworVENMX09CSiA9IGlmX3RjbC5vYmoKK1RDTF9MSUIgPSAsT1NfVk1TX1RDTC5PUFQvT1BUCitUQ0xfSU5DID0gLGRrYTA6W3RjbDgwLmdlbmVyaWNdCisuRU5ESUYKKworLklGREVGIFZJTV9TTklGRgorIyBTTklGRiByZWxhdGVkIHNldHVwLgorU05JRkZfREVGID0gLCJGRUFUX1NOSUZGIgorU05JRkZfU1JDID0gaWZfc25pZmYuYworU05JRkZfT0JKID0gaWZfc25pZmYub2JqCitTTklGRl9MSUIgPQorU05JRkZfSU5DID0KKy5FTkRJRgorCisuSUZERUYgVklNX1JVQlkKKyMgUlVCWSByZWxhdGVkIHNldHVwLgorUlVCWV9ERUYgPSAsIkZFQVRfUlVCWSIKK1JVQllfU1JDID0gaWZfcnVieS5jCitSVUJZX09CSiA9IGlmX3J1Ynkub2JqCitSVUJZX0xJQiA9ICxPU19WTVNfUlVCWS5PUFQvT1BUCitSVUJZX0lOQyA9CisuRU5ESUYKKworLklGREVGIFZJTV9YSU0KKyMgWElNIHJlbGF0ZWQgc2V0dXAuCisuSUZERUYgR1VJCitYSU1fREVGID0gLCJGRUFUX1hJTSIKKy5FTkRJRgorLkVORElGCisKKy5JRkRFRiBWSU1fSEFOR1VMSU4KKyMgSEFOR1VMSU4gcmVsYXRlZCBzZXR1cC4KKy5JRkRFRiBHVUkKK0hBTkdVTElOX0RFRiA9ICwiRkVBVF9IQU5HVUxJTiIKK0hBTkdVTElOX1NSQyA9IGhhbmd1bGluLmMKK0hBTkdVTElOX09CSiA9IGhhbmd1bGluLm9iagorLkVORElGCisuRU5ESUYKKworLklGREVGIFZJTV9UQUdfQU5ZV0hJVEUKKyMgVEFHX0FOWVdISVRFIHJlbGF0ZWQgc2V0dXAuCitUQUdfREVGID0gLCJGRUFUX1RBR19BTllXSElURSIKKy5FTkRJRgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRW5kIG9mIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi4KKyMgUGxlYXNlLCBkbyBub3QgY2hhbmdlIGFueXRoaW5nIGJlbG93IHdpdGhvdXQgcHJvZ3JhbW1pbmcgZXhwZXJpZW5jZS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCitNT0RFTF9ERUYgPSAiRkVBVF8kKE1PREVMKSIsCisKKyMgVGhlc2UgZ28gaW50byBwYXRoZGVmLmMKK1ZJTVVTRVIgPSAiJydGJEVESVQoRiRHRVRKUEkoIiAiLCJVU0VSTkFNRSIpLCJUUklNIiknIgorVklNSE9TVCA9ICInJ0YkVFJOTE5NKCJTWVMkTk9ERSIpJycnRiRUUk5MTk0oIlVDWCRJTkVUX0hPU1QiKScuJydGJFRSTkxOTSgiVUNYJElORVRfRE9NQUlOIiknIgorCisuU1VGRklYRVMgOiAub2JqIC5jCisKK0FMTF9DRkxBR1MgPSAvZGVmPSgkKE1PREVMX0RFRikkKERFRlMpJChWTVNfREVGKSQoREVCVUdfREVGKSQoUEVSTF9ERUYpJChQWVRIT05fREVGKSAtCisgJChUQ0xfREVGKSQoU05JRkZfREVGKSQoUlVCWV9ERUYpJChYSU1fREVGKSQoSEFOR1VMSU5fREVGKSQoVEFHX0RFRikpIC0KKyAkKENGTEFHUykkKEdVSV9GTEFHKSAtCisgL2luY2x1ZGU9KCQoQ19JTkMpJChHVUlfSU5DX0RJUikkKEdVSV9JTkMpJChQRVJMX0lOQykkKFBZVEhPTl9JTkMpJChUQ0xfSU5DKSkKKworIyBDRkxBR1MgZGlzcGxheWVkIGluIDp2ZXIgaW5mb3JtYXRpb24KKyMgSXQgaXMgc3BlY2lhbGx5IGZvcm1hdGVkIGZvciBjb3JyZWN0IGRpc3BsYXkgb2YgdW5peCBsaWtlIGluY2x1ZGVzCisjIGFzICQoR1VJX0lOQykgLSByZXBsYWNlZCB3aXRoICQoR1VJX0lOQ19WRVIpCisjIE90aGVyd2lzZSBzaG91bGQgbm90IGJlIGFueSBvdGhlciBkaWZmZXJlbmNlLgorQUxMX0NGTEFHU19WRVIgPSAvZGVmPSgkKE1PREVMX0RFRikkKERFRlMpJChWTVNfREVGKSQoREVCVUdfREVGKSQoUEVSTF9ERUYpJChQWVRIT05fREVGKSAtCisgJChUQ0xfREVGKSQoU05JRkZfREVGKSQoUlVCWV9ERUYpJChYSU1fREVGKSQoSEFOR1VMSU5fREVGKSQoVEFHX0RFRikpIC0KKyAkKENGTEFHUykkKEdVSV9GTEFHKSAtCisgL2luY2x1ZGU9KCQoQ19JTkMpJChHVUlfSU5DX0RJUikkKEdVSV9JTkNfVkVSKSQoUEVSTF9JTkMpJChQWVRIT05fSU5DKSQoVENMX0lOQykpCisKK0FMTF9MSUJTID0gJChMSUJTKSAkKEdVSV9MSUJfRElSKSAkKEdVSV9MSUIpIFwKKwkgICAkKFBFUkxfTElCKSAkKFBZVEhPTl9MSUIpICQoVENMX0xJQikgJChTTklGRl9MSUIpICQoUlVCWV9MSUIpCisKK1NSQyA9CWJ1ZmZlci5jIGNoYXJzZXQuYyBkaWZmLmMgZGlncmFwaC5jIGVkaXQuYyBldmFsLmMgZXhfY21kcy5jIGV4X2NtZHMyLmMgXAorCWV4X2RvY21kLmMgZXhfZXZhbC5jIGV4X2dldGxuLmMgaWZfeGNtZHNydi5jIGZpbGVpby5jIGZvbGQuYyBnZXRjaGFyLmMgXAorCW1haW4uYyBtYXJrLmMgbWVudS5jIG1ieXRlLmMgbWVtZmlsZS5jIG1lbWxpbmUuYyBtZXNzYWdlLmMgbWlzYzEuYyBcCisJbWlzYzIuYyBtb3ZlLmMgbm9ybWFsLmMgb3BzLmMgb3B0aW9uLmMgcXVpY2tmaXguYyByZWdleHAuYyBzZWFyY2guYyBcCisJc3ludGF4LmMgdGFnLmMgdGVybS5jIHRlcm1saWIuYyB1aS5jIHVuZG8uYyB2ZXJzaW9uLmMgc2NyZWVuLmMgXAorCXdpbmRvdy5jIG9zX3VuaXguYyBvc192bXMuYyBwYXRoZGVmLmMgXAorCSQoR1VJX1NSQykgJChQRVJMX1NSQykgJChQWVRIT05fU1JDKSAkKFRDTF9TUkMpICQoU05JRkZfU1JDKSBcCisJJChSVUJZX1NSQykgJChIQU5HVUxJTl9TUkMpCisKK09CSiA9CWJ1ZmZlci5vYmogY2hhcnNldC5vYmogZGlmZi5vYmogZGlncmFwaC5vYmogZWRpdC5vYmogZXZhbC5vYmogXAorCWV4X2NtZHMub2JqIGV4X2NtZHMyLm9iaiBleF9kb2NtZC5vYmogZXhfZXZhbC5vYmogZXhfZ2V0bG4ub2JqIFwKKwlpZl94Y21kc3J2Lm9iaiBmaWxlaW8ub2JqIGZvbGQub2JqIGdldGNoYXIub2JqIG1haW4ub2JqIG1hcmsub2JqIFwKKwltZW51Lm9iaiBtZW1maWxlLm9iaiBtZW1saW5lLm9iaiBtZXNzYWdlLm9iaiBtaXNjMS5vYmogbWlzYzIub2JqIFwKKwltb3ZlLm9iaiBtYnl0ZS5vYmogbm9ybWFsLm9iaiBvcHMub2JqIG9wdGlvbi5vYmogcXVpY2tmaXgub2JqIFwKKwlyZWdleHAub2JqIHNlYXJjaC5vYmogc3ludGF4Lm9iaiB0YWcub2JqIHRlcm0ub2JqIHRlcm1saWIub2JqIFwKKwl1aS5vYmogdW5kby5vYmogc2NyZWVuLm9iaiB2ZXJzaW9uLm9iaiB3aW5kb3cub2JqIG9zX3VuaXgub2JqIFwKKwlvc192bXMub2JqIHBhdGhkZWYub2JqIFwKKwkkKEdVSV9PQkopICQoUEVSTF9PQkopICQoUFlUSE9OX09CSikgJChUQ0xfT0JKKSAkKFNOSUZGX09CSikgXAorCSQoUlVCWV9PQkopICQoSEFOR1VMSU5fT0JKKQorCisjIERlZmF1bHQgdGFyZ2V0IGlzIG1ha2luZyB0aGUgZXhlY3V0YWJsZQorYWxsIDogWy5hdXRvXWNvbmZpZy5oIG1ta19jb21wYXQgbW90aWZfZW52IGd0a19lbnYgcGVybF9lbnYgcHl0aG9uX2VudiB0Y2xfZW52IHJ1YnlfZW52ICQoVEFSR0VUKQorCSEgJEAKKworWy5hdXRvXWNvbmZpZy5oIDogJChDT05GSUdfSCkKKwljb3B5L25vbG9nICQoQ09ORklHX0gpIFsuYXV0b11jb25maWcuaAorCittbWtfY29tcGF0IDoKKwktQCBvcGVuL3dyaXRlIHBkIHBhdGhkZWYuYworCS1AIHdyaXRlIHBkICIvKiBFbXB0eSBmaWxlIHRvIHNhdGlzZnkgTU1LIGRlcGVuZC4gICovIgorCS1AIHdyaXRlIHBkICIvKiBJdCB3aWxsIGJlIG93ZXJ3cml0dGVuIGxhdGVyIG9uLi4uICovIgorCS1AIGNsb3NlIHBkCitjbGVhbiA6CisJLUAgaWYgIicnRiRTRUFSQ0goIiouZXhlIiknIiAuTkVTLiAiIiB0aGVuIGRlbGV0ZS9ub2NvbmZpcm0vbm9sb2cgKi5leGU7KgorCS1AIGlmICInJ0YkU0VBUkNIKCIqLm9iaiIpJyIgLk5FUy4gIiIgdGhlbiBkZWxldGUvbm9jb25maXJtL25vbG9nICoub2JqOyoKKwktQCBpZiAiJydGJFNFQVJDSCgiWy5hdXRvXWNvbmZpZy5oIiknIiAuTkVTLiAiIiB0aGVuIGRlbGV0ZS9ub2NvbmZpcm0vbm9sb2cgWy5hdXRvXWNvbmZpZy5oOyoKKwktQCBpZiAiJydGJFNFQVJDSCgicGF0aGRlZi5jIiknIiAuTkVTLiAiIiB0aGVuIGRlbGV0ZS9ub2NvbmZpcm0vbm9sb2cgcGF0aGRlZi5jOyoKKwktQCBpZiAiJydGJFNFQVJDSCgiaWZfcGVybC5jIiknIiAuTkVTLiAiIiB0aGVuIGRlbGV0ZS9ub2NvbmZpcm0vbm9sb2cgaWZfcGVybC5jOyoKKwktQCBpZiAiJydGJFNFQVJDSCgiKi5vcHQiKSciIC5ORVMuICIiIHRoZW4gZGVsZXRlL25vY29uZmlybS9ub2xvZyAqLm9wdDsqCisKKyMgTGluayB0aGUgdGFyZ2V0CiskKFRBUkdFVCkgOiAkKE9CSikKKwkkKExEX0RFRikgJChMREZMQUdTKSAvZXhlPSQoVEFSR0VUKSAkKyAkKEFMTF9MSUJTKQorCisuYy5vYmogOgorCSQoQ0NfREVGKSAkKEFMTF9DRkxBR1MpICQ8CisKK3BhdGhkZWYuYyA6IGNoZWNrX2NjdmVyICQoQ09ORklHX0gpCisJLUAgd3JpdGUgc3lzJG91dHB1dCAiY3JlYXRpbmcgUEFUSERFRi5DIGZpbGUuIgorCS1AIG9wZW4vd3JpdGUgcGQgcGF0aGRlZi5jCisJLUAgd3JpdGUgcGQgIi8qIHBhdGhkZWYuYyAtLSBETyBOT1QgRURJVCEgKi8iCisJLUAgd3JpdGUgcGQgIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgTUFLRV9WTVMuTU1TIgorCS1AIHdyaXRlIHBkICIgKiBDaGFuZ2UgdGhlIGZpbGUgTUFLRV9WTVMuTU1TIE9ubHkuICovIgorCS1AIHdyaXRlIHBkICJ0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBjaGFyX3U7IgorCS1AIHdyaXRlIHBkICJjaGFyX3UgKmRlZmF1bHRfdmltX2RpciA9IChjaGFyX3UgKikiJChWSU1MT0MpIjsiCisJLUAgd3JpdGUgcGQgImNoYXJfdSAqZGVmYXVsdF92aW1ydW50aW1lX2RpciA9IChjaGFyX3UgKikiJChWSU1SVU4pIjsiCisJLUAgd3JpdGUgcGQgImNoYXJfdSAqYWxsX2NmbGFncyA9IChjaGFyX3UgKikiIiQoQ0NfREVGKSQoQUxMX0NGTEFHU19WRVIpIiI7IgorCS1AIHdyaXRlIHBkICJjaGFyX3UgKmFsbF9sZmxhZ3MgPSAoY2hhcl91ICopIiIkKExEX0RFRikkKExERkxBR1MpIC9leGU9JChUQVJHRVQpICouT0JKICQoQUxMX0xJQlMpIiI7IgorCS1AIHdyaXRlIHBkICJjaGFyX3UgKmNvbXBpbGVyX3ZlcnNpb24gPSAoY2hhcl91ICopICIiJydDQ19WRVInIiI7IgorCS1AIHdyaXRlIHBkICJjaGFyX3UgKmNvbXBpbGVkX3VzZXIgPSAoY2hhcl91ICopICIkKFZJTVVTRVIpIjsiCisJLUAgd3JpdGUgcGQgImNoYXJfdSAqY29tcGlsZWRfc3lzID0gKGNoYXJfdSAqKSAiJChWSU1IT1NUKSI7IgorCS1AIGNsb3NlIHBkCisKK2lmX3BlcmwuYyA6IGlmX3BlcmwueHMKKwktQCAkKFBFUkwpIFBFUkxfUk9PVDpbTElCLkV4dFV0aWxzXXhzdWJwcCAtcHJvdG90eXBlcyAtdHlwZW1hcCAtCisgUEVSTF9ST09UOltMSUIuRXh0VXRpbHNddHlwZW1hcCBpZl9wZXJsLnhzID4+ICRACisKK21ha2Vfdm1zLm1tcyA6CisJLUAgd3JpdGUgc3lzJG91dHB1dCAiVGhlIG5hbWUgb2YgdGhlIG1ha2VmaWxlIE1VU1QgYmUgPE1BS0VfVk1TLk1NUz4gISEhIgorCisuSUZERUYgQ0NWRVIKKyMgVGhpcyBwYXJ0IGNhbiBtYWtlIHNvbWUgY29tcGxpY2F0aW9ucyBpZiB5b3UncmUgdXNpbmcgc29tZSBwcmVkZWZpbmVkCisjIHN5bWJvbHMvZmxhZ3MgZm9yIHlvdXIgY29tcGlsZXIuIElmIGRvZXMsIGp1c3QgY29tbWVudCBvdXQgQ0NWRVIgdmFyaWFibGUKK2NoZWNrX2NjdmVyIDoKKwktQCBkZWZpbmUgc3lzJG91dHB1dCBjY192ZXIudG1wCisJLUAgJChDQ19ERUYpL3ZlcnNpb24KKwktQCBkZWFzc2lnbiBzeXMkb3V0cHV0CisJLUAgb3Blbi9yZWFkIGZpbGUgY2NfdmVyLnRtcAorCS1AIHJlYWQgZmlsZSBDQ19WRVIKKwktQCBjbG9zZSBmaWxlCisJLUAgZGVsZXRlL25vY29uZmlybS9ub2xvZyBjY192ZXIudG1wLioKKy5FTFNFCitjaGVja19jY3ZlciA6CisJLUAgIQorLkVORElGCisKKy5JRkRFRiBNT1RJRgorbW90aWZfZW52IDoKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICJ1c2luZyBERUNXL01vdGlmIGVudmlyb25tZW50LiIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICJjcmVhdGluZyBPU19WTVNfTU9USUYuT1BUIGZpbGUuIgorCS1AIG9wZW4vd3JpdGUgb3B0X2ZpbGUgT1NfVk1TX01PVElGLk9QVAorCS1AIHdyaXRlIG9wdF9maWxlICJzeXMkc2hhcmU6ZGVjdyR4bWxpYnNocjEyLmV4ZS9zaGFyZSwtIgorCS1AIHdyaXRlIG9wdF9maWxlICJzeXMkc2hhcmU6ZGVjdyR4dGxpYnNocnI1LmV4ZS9zaGFyZSwtIgorCS1AIHdyaXRlIG9wdF9maWxlICJzeXMkc2hhcmU6ZGVjdyR4bGlic2hyLmV4ZS9zaGFyZSIKKwktQCBjbG9zZSBvcHRfZmlsZQorLkVMU0UKK21vdGlmX2VudiA6CisJLUAgIQorLkVORElGCisKKworLklGREVGIEdUSworZ3RrX2VudiA6CisJLUAgd3JpdGUgc3lzJG91dHB1dCAidXNpbmcgR1RLIGVudmlyb25tZW50OiIKKwktQCBkZWZpbmUvbm9sb2cgZ3RrX3Jvb3QgL3RyYW5zPWNvbmMgJChHVEtfRElSKQorCS1AIHNob3cgbG9naWNhbCBndGtfcm9vdAorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgICBpbmNsdWRlIHBhdGg6ICIkKEdVSV9JTkMpIiIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICJjcmVhdGluZyBPU19WTVNfR1RLLk9QVCBmaWxlLiIKKwktQCBvcGVuL3dyaXRlIG9wdF9maWxlIE9TX1ZNU19HVEsuT1BUCisJLUAgd3JpdGUgb3B0X2ZpbGUgImd0a19yb290OltnbGliXWxpYmdsaWIuZXhlIC9zaGFyZSwtIgorCS1AIHdyaXRlIG9wdF9maWxlICJndGtfcm9vdDpbZ2xpYi5nbW9kdWxlXWxpYmdtb2R1bGUuZXhlIC9zaGFyZSwtIgorCS1AIHdyaXRlIG9wdF9maWxlICJndGtfcm9vdDpbZ3RrLmdka11saWJnZGsuZXhlIC9zaGFyZSwtIgorCS1AIHdyaXRlIG9wdF9maWxlICJndGtfcm9vdDpbZ3RrLmd0a11saWJndGsuZXhlIC9zaGFyZSwtIgorCS1AIHdyaXRlIG9wdF9maWxlICJzeXMkc2hhcmU6ZGVjdyR4bWxpYnNocjEyLmV4ZS9zaGFyZSwtIgorCS1AIHdyaXRlIG9wdF9maWxlICJzeXMkc2hhcmU6ZGVjdyR4dGxpYnNocnI1LmV4ZS9zaGFyZSwtIgorCS1AIHdyaXRlIG9wdF9maWxlICJzeXMkc2hhcmU6ZGVjdyR4bGlic2hyLmV4ZS9zaGFyZSIKKwktQCBjbG9zZSBvcHRfZmlsZQorLkVMU0UKK2d0a19lbnYgOgorCS1AICEKKy5FTkRJRgorCisuSUZERUYgVklNX1BFUkwKK3BlcmxfZW52IDoKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICJ1c2luZyBQRVJMIGVudmlyb25tZW50OiIKKwktQCBzaG93IGxvZ2ljYWwgUEVSTFNIUgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgICBpbmNsdWRlIHBhdGg6ICIiJChQRVJMX0lOQykiIiIKKwktQCBzaG93IHN5bWJvbCBwZXJsCisJLUAgb3Blbi93cml0ZSBwZCBpZl9wZXJsLmMKKwktQCB3cml0ZSBwZCAiLyogRW1wdHkgZmlsZSB0byBzYXRpc2Z5IE1NSyBkZXBlbmQuICAqLyIKKwktQCB3cml0ZSBwZCAiLyogSXQgd2lsbCBiZSBvd2Vyd3JpdHRlbiBsYXRlciBvbi4uLiAqLyIKKwktQCBjbG9zZSBwZAorCS1AIHdyaXRlIHN5cyRvdXRwdXQgImNyZWF0aW5nIE9TX1ZNU19QRVJMLk9QVCBmaWxlLiIKKwktQCBvcGVuL3dyaXRlIG9wdF9maWxlIE9TX1ZNU19QRVJMLk9QVAorCS1AIHdyaXRlIG9wdF9maWxlICJQRVJMU0hSIC9zaGFyZSIKKwktQCBjbG9zZSBvcHRfZmlsZQorLkVMU0UKK3BlcmxfZW52IDoKKwktQCAhCisuRU5ESUYKKworLklGREVGIFZJTV9QWVRIT04KK3B5dGhvbl9lbnYgOgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgInVzaW5nIFBZVEhPTiBlbnZpcm9ubWVudDoiCisJLUAgc2hvdyBsb2dpY2FsIFBZVEhPTl9JTkNMVURFCisJLUAgc2hvdyBsb2dpY2FsIFBZVEhPTl9PTEIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICJjcmVhdGluZyBPU19WTVNfUFlUSE9OLk9QVCBmaWxlLiIKKwktQCBvcGVuL3dyaXRlIG9wdF9maWxlIE9TX1ZNU19QWVRIT04uT1BUCisJLUAgd3JpdGUgb3B0X2ZpbGUgIlBZVEhPTl9PTEI6UFlUSE9OLk9MQiAvc2hhcmUiCisJLUAgY2xvc2Ugb3B0X2ZpbGUKKy5FTFNFCitweXRob25fZW52IDoKKwktQCAhCisuRU5ESUYKKworLklGREVGIFZJTV9UQ0wKK3RjbF9lbnYgOgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgInVzaW5nIFRDTCBlbnZpcm9ubWVudDoiCisJLUAgc2hvdyBsb2dpY2FsIFRDTFNIUgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgICBpbmNsdWRlIHBhdGg6ICIiJChUQ0xfSU5DKSIiIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgImNyZWF0aW5nIE9TX1ZNU19UQ0wuT1BUIGZpbGUuIgorCS1AIG9wZW4vd3JpdGUgb3B0X2ZpbGUgT1NfVk1TX1RDTC5PUFQKKwktQCB3cml0ZSBvcHRfZmlsZSAiVENMU0hSIC9zaGFyZSIKKwktQCBjbG9zZSBvcHRfZmlsZQorLkVMU0UKK3RjbF9lbnYgOgorCS1AICEKKy5FTkRJRgorCisuSUZERUYgVklNX1JVQlkKK3J1YnlfZW52IDoKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICJ1c2luZyBSVUJZIGVudmlyb25tZW50OiIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICIgICAgaW5jbHVkZSBwYXRoOiAiIiQoUlVCWV9JTkMpIiIiCisJLUAgd3JpdGUgc3lzJG91dHB1dCAiY3JlYXRpbmcgT1NfVk1TX1JVQlkuT1BUIGZpbGUuIgorCS1AIG9wZW4vd3JpdGUgb3B0X2ZpbGUgT1NfVk1TX1JVQlkuT1BUCisJLUAgd3JpdGUgb3B0X2ZpbGUgIlJVQllTSFIgL3NoYXJlIgorCS1AIGNsb3NlIG9wdF9maWxlCisuRUxTRQorcnVieV9lbnYgOgorCS1AICEKKy5FTkRJRgorCisKZGlmZiAtLWdpdCBhL3NyYy9NYWtlX3cxNi5tYWsgYi9zcmMvTWFrZV93MTYubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNDI1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvTWFrZV93MTYubWFrCkBAIC0wLDAgKzEsMTk2IEBACisjCisjIEJvcmxhbmQgQysrIDUuMFsxMl0gbWFrZWZpbGUgZm9yIHZpbSwgMTYtYml0IHdpbmRvd3MgZ3VpIHZlcnNpb24KKyMgQnkgVmluY2UgTmVncmkKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIFdBUk5JTkchCisjICogVGhpcyB3YXMgb3JpZ2luYWxseSBwcm9kdWNlZCBieSB0aGUgSURFLCBidXQgaGFzIHNpbmNlIGJlZW4KKyMgKiBtb2RpZmVkIHRvIG1ha2UgaXQgd29yayBwcm9wZXJseS4gQWRqdXN0IHdpdGggY2FyZSEKKyMgKiBJbiBwYXJ0aWN1bGFyLCBsZWF2ZSBMaW5rZXJMb2NhbE9wdHNBdFcxNl9ndmltMTZkZXhlIGFsb25lCisjICogdW5sZXNzIHlvdSBhcmUgYSBndXJ1LgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjCisjIExvb2sgZm9yIEJPUiBiZWxvdyBhbmQgZWl0aGVyIHBhc3MgYSBkaWZmZXJlbnQgdmFsdWUgb3IKKyMgYWRqdXN0IHRoZSBwYXRoIGFzIHJlcXVpcmVkLiBGb3IgZXhhbXBsZQorIyAgIG1ha2UgLWZNYWtlX3cxNi5tYWsgLURCT1I9QzpcUEZcQm9ybGFuZFxCQzUuMDEgLUIgQmNjVzE2LmNmZworIyAgIG1ha2UgLWZNYWtlX3cxNi5tYWsKKyMgTm90ZTogJChCT1IpIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQgdW5sZXNzIEJjY1cxNi5jZmcgaXMgcmVidWlsdC4KKyMKKyMgRG9lcyBub3QgY29tcGlsZSB3aXRoIEJvcmxhbmQgQysrIDQuNTEgV2FsdGVyIEJyaXNjb2UgMjAwMy0wMi0yNAorIyAib3V0IG9mIG1lbW9yeSIgZnJvbSBjb21waWxlciBpZiBndmltMTYgd2lsZGx5IHdyb25nLiBXRkIgMjAwMy0wMy0wNAorIworIyB2aW0xNi5kZWYgbXVzdCBiZSBhIERPUy1mb3JtYXR0ZWQgZmlsZS4gKFxyXG4gbGluZSBlbmRpbmdzLikKKyMgSXQgaXMgYSBVTklYLWZvcm1hdHRlZCBmaWxlIChcbiBsaW5lIGVuZGluZ3MpIGluIHZpbS0qLWV4dHJhLnRhci5negorCisuQVVUT0RFUEVORAorCisjCisjIEJvcmxhbmQgQysrIHRvb2xzCisjCitJTVBMSUIgID0gSW1wbGliCitCQ0MgICAgID0gQmNjICtCY2NXMTYuY2ZnCitUTElOSyAgID0gVExpbmsKK1RMSUIgICAgPSBUTGliCitCUkMgICAgID0gQnJjCitUQVNNICAgID0gVGFzbQorIworIyBJREUgbWFjcm9zCisjCisKKyMKKyMgT3B0aW9ucworIworIWlmbmRlZiBCT1IKK0JPUiA9IEQ6XEJDNQorIWVuZGlmCisKKyMgIWlmbmRlZiBJTlRESVIgaXMgbGV0aGFsIGNvbnNpZGVyaW5nIENMRUFOIGJlbG93LiBXRkIgMjAwMy0wMy0xMworSU5URElSPXcxNgorCisjICAvVHdlIE1ha2UgdGhlIHRhcmdldCBhIFdpbmRvd3MgLkVYRSB3aXRoIGV4cGxpY2l0IGZ1bmN0aW9ucyBleHBvcnRhYmxlICsKKyMgIC94ICAgTWFwIGZpbGUgb2ZmCisjICAvbCAgIEluY2x1ZGUgc291cmNlIGxpbmUgbnVtYmVycyBpbiBvYmplY3QgbWFwIGZpbGVzYAorIyAgL2MgICBjYXNlIHNlbnNpdGl2ZSBsaW5rCisjICAvQyAgIENhc2Utc2Vuc2l0aXZlIGV4cG9ydHMgYW5kIGltcG9ydHMgKDE2LWJpdCBvbmx5KQorIyAgL2sgICBQcm9kdWNlICJObyBTdGFjayIgd2FybmluZy4KKyMgIC9PYSAgTWluaW1pc2Ugc2VnbWVudCBhbGlnbm1lbnQKKyMgIC9PYyAgTWluaW1pc2UgQ2hhaW4gZml4ZXMKKyMgIC9PaSAgTWluaW1pc2UgSXRlcmF0ZWQgZGF0YQorIyAgL09yICBNaW5pbWlzZSByZXNvdXJjZSBhbGlnbm1lbnQKKyMgIC9QICAgLVA9eCAgQ29kZSBwYWNrIHNpemUKKyMgIC9WICAgV2luZG93cyB2ZXJzaW9uIGZvciBhcHBsaWNhdGlvbgorIyAgL0wgICBGb2xkZXIgdG8gc2VhcmNoIGZvciBsaWJyYXJ5IGZpbGVzCitMaW5rZXJMb2NhbE9wdHNBdFcxNl9ndmltMTZkZXhlID0vVHdlL3gvbC9jL0Mvay9Pci9PYy9PYS9PaS9QPTY1NTM1L1YzLjEwCisKK0NvbXBJbmhlcml0T3B0c0F0X2d2aW0xNmRleGUgPSBcCisgICAtSSQoQk9SKVxJTkNMVURFO1BST1RPOy4gXAorICAgLURGRUFUX0dVSTtGRUFUX0dVSV9NU1dJTjtGRUFUX0dVSV9XMTY7TVNXSU47V0lOMTY7TVNXSU4xNl9GQVNUVEVYVCBcCisgICAtREZFQVRfVE9PTEJBUjtXSU4xNl8zRExPT0sKKworIworIyBEZXBlbmRlbmN5IExpc3QKKyMKK0RlcF9HdmltMTYgPSBcCisgICBndmltMTYuZXhlCisKK09iakZpbGVzID0gXAorICAgJChJTlRESVIpXGJ1ZmZlci5vYmpcCisgICAkKElOVERJUilcY2hhcnNldC5vYmpcCisgICAkKElOVERJUilcZGlmZi5vYmpcCisgICAkKElOVERJUilcZGlncmFwaC5vYmpcCisgICAkKElOVERJUilcZWRpdC5vYmpcCisgICAkKElOVERJUilcZXZhbC5vYmpcCisgICAkKElOVERJUilcZXhfY21kcy5vYmpcCisgICAkKElOVERJUilcZXhfY21kczIub2JqXAorICAgJChJTlRESVIpXGV4X2RvY21kLm9ialwKKyAgICQoSU5URElSKVxleF9ldmFsLm9ialwKKyAgICQoSU5URElSKVxleF9nZXRsbi5vYmpcCisgICAkKElOVERJUilcZmlsZWlvLm9ialwKKyAgICQoSU5URElSKVxmb2xkLm9ialwKKyAgICQoSU5URElSKVxnZXRjaGFyLm9ialwKKyAgICQoSU5URElSKVxndWkub2JqXAorICAgJChJTlRESVIpXGd1aV93MTYub2JqXAorICAgJChJTlRESVIpXG1haW4ub2JqXAorICAgJChJTlRESVIpXG1hcmsub2JqXAorICAgJChJTlRESVIpXG1ieXRlLm9ialwKKyAgICQoSU5URElSKVxtZW1maWxlLm9ialwKKyAgICQoSU5URElSKVxtZW1saW5lLm9ialwKKyAgICQoSU5URElSKVxtZW51Lm9ialwKKyAgICQoSU5URElSKVxtZXNzYWdlLm9ialwKKyAgICQoSU5URElSKVxtaXNjMS5vYmpcCisgICAkKElOVERJUilcbWlzYzIub2JqXAorICAgJChJTlRESVIpXG1vdmUub2JqXAorICAgJChJTlRESVIpXG5vcm1hbC5vYmpcCisgICAkKElOVERJUilcb3BzLm9ialwKKyAgICQoSU5URElSKVxvcHRpb24ub2JqXAorICAgJChJTlRESVIpXG9zX3dpbjE2Lm9ialwKKyAgICQoSU5URElSKVxvc19tc2Rvcy5vYmpcCisgICAkKElOVERJUilcb3NfbXN3aW4ub2JqXAorICAgJChJTlRESVIpXHF1aWNrZml4Lm9ialwKKyAgICQoSU5URElSKVxyZWdleHAub2JqXAorICAgJChJTlRESVIpXHNjcmVlbi5vYmpcCisgICAkKElOVERJUilcc2VhcmNoLm9ialwKKyAgICQoSU5URElSKVxzeW50YXgub2JqXAorICAgJChJTlRESVIpXHRhZy5vYmpcCisgICAkKElOVERJUilcdGVybS5vYmpcCisgICAkKElOVERJUilcdWkub2JqXAorICAgJChJTlRESVIpXHVuZG8ub2JqXAorICAgJChJTlRESVIpXHZlcnNpb24ub2JqXAorICAgJChJTlRESVIpXHdpbmRvdy5vYmoKKworRGVwX2d2aW0xNmRleGUgPSBcCisgICB2aW10YmFyLmxpYlwKKyAgIHZpbTE2LmRlZlwKKyAgICQoSU5URElSKVx2aW0xNi5yZXNcCisgICAkKE9iakZpbGVzKQorCisjIFdpdGhvdXQgdGhlIGZvbGxvd2luZywgdGhlIGltcGxpY2l0IHJ1bGUgaW4gQlVJTFRJTlMuTUFLIGlzIHBpY2tlZCB1cAorIyBmb3IgYSBydWxlIGZvciAuYy5vYmogcmF0aGVyIHRoYW4gdGhlIGxvY2FsIGltcGxpY2l0IHJ1bGUKKy5TVUZGSVhFUworLlNVRkZJWEVTIC5jIC5vYmoKKy5wYXRoLmMgPSAuCisKKyMgLVAtCUZvcmNlIEMrKyBjb21waWxhdGlvbiBvZmYKKyMgLWMJQ29tcGlsYXRpb24gb25seQorIyAtbiAgICBQbGFjZSAuT0JKIGZpbGVzCit7Ln0uY3skKElOVERJUil9Lm9iajoKKyAgJChCQ0MpIC1QLSAtYyAtbiQoSU5URElSKVwgeyQ8IH0KKworR3ZpbTE2IDogQmNjVzE2LmNmZyAkKERlcF9HdmltMTYpCisgIGVjaG8gTWFrZU5vZGUKKworZ3ZpbTE2LmV4ZSA6ICQoRGVwX2d2aW0xNmRleGUpCisgICQoVExJTkspICAgJChMaW5rZXJMb2NhbE9wdHNBdFcxNl9ndmltMTZkZXhlKSBAJiZ8CitjMHdsLm9iaiAkKE9iakZpbGVzKQorfCwkKiwsdmltdGJhciBjdGwzZHYyIGltcG9ydCBjd2wsIHZpbTE2LmRlZiwkKElOVERJUilcdmltMTYucmVzCisKKyMgRm9yY2Ugb2JqZWN0cyB0byBiZSBidWlsdCBpZiAkKEJPUikgY2hhbmdlcworJChPYmpGaWxlcykgOiBNYWtlX3cxNi5tYWsgQmNjVzE2LmNmZworCiskKElOVERJUilcdmltMTYucmVzIDogdmltMTYucmMKKyAgJChCUkMpIC1SIEAmJnwKKyAgJChDb21wSW5oZXJpdE9wdHNBdF9ndmltMTZkZXhlKSAtZm8kKi5yZXMgJD8KK3wKKworCisjIENvbXBpbGVyIGNvbmZpZ3VyYXRpb24gZmlsZQorIyBUaGVyZSBpcyBubyBydWxlIGZvciAkKElOVERJUikgYXMgbWFrZSBhbHdheXMgc2F5cyBpdCBkb2VzIG5vdCBleGlzdAorQmNjVzE2LmNmZyA6CisJLUBpZiBub3QgZXhpc3QgJChJTlRESVIpXCQoTlVMTCkgbWtkaXIgJChJTlRESVIpCisJQ29weSAmJnwKKy0zCQk7IEdlbmVyYXRlIDgwMzg2IHByb3RlY3RlZC1tb2RlIGNvbXBhdGlibGUgaW5zdHJ1Y3Rpb25zCistYQkJOyBCeXRlIGFsaWdubWVudAorLWRjCQk7IE1vdmUgc3RyaW5nIGxpdGVyYWxzIGZyb20gZGF0YSBzZWdtZW50IHRvIGNvZGUgc2VnbWVudAorLWZmCQk7IEZhc3QgZmxvYXRpbmcgcG9pbnQKKy1ICQk7IEdlbmVyYXRlIGFuZCB1c2UgcHJlY29tcGlsZWQgaGVhZGVycworLUg9JChJTlRESVIpXGd2aW0xNi5jc20JOyBndmltMTYuY3NtIGlzIHRoZSBwcmVjb21waWxlZCBoZWFkZXIgZmlsZW5hbWUKKy1rLQkJOyBObyBzdGFuZGFyZCBzdGFjayBmcmFtZQorLW1sCQk7IExhcmdlIG1lbW9yeSBtb2RlbAorLU9XCQk7IFN1cHByZXNzIHRoZSBpbmMgYnAvZGVjIGJwIG9uIHdpbmRvd3MgZmFyIGZ1bmN0aW9ucworLU8xCQk7IEdlbmVyYXRlIHNtYWxsZXN0IHBvc3NpYmxlIGNvZGUKKy1PMgkJOyBHZW5lcmF0ZSBmYXN0ZXN0IHBvc3NpYmxlIGNvZGUgKG92ZXJyaWRlcyBwcmlvciAtTzEgY29udHJvbCkKKy1wcgkJOyBGYXN0Y2FsbCBjYWxsaW5nIGNvbnZlbnRpb24gcGFzc2luZyBwYXJhbWV0ZXJzIGluIHJlZ2lzdGVycworLVItCQk7IEV4Y2x1ZGUgYnJvd3NlciBpbmZvcm1hdGlvbiBpbiBnZW5lcmF0ZWQgLk9CSiBmaWxlcworLXYtCQk7IFR1cm4gb2ZmIHNvdXJjZSBkZWJ1Z2dpbmcKKy12aQkJOyBUdXJuIGlubGluZSBmdW5jdGlvbiBleHBhbnNpb24gb24KKy1XRQkJOyBPbmx5IF9fZmFyIF9leHBvcnQgZnVuY3Rpb25zIGFyZSBleHBvcnRlZAorLXcJCTsgRGlzcGxheSB3YXJuaW5ncworLXctcGFyCQk7IFN1cHByZXNzOiBQYXJhbWV0ZXIgJ3BhcmFtZXRlcicgaXMgbmV2ZXIgdXNlZAorLXctcGNoCQk7IENhbm5vdCBjcmVhdGUgcHJlLWNvbXBpbGVkIGhlYWRlcjogaW5pdGlhbGl6ZWQgZGF0YSBpbiBoZWFkZXIKKy13LXNpZwkJOyBpZGVudGlmaWVyJyBkZWNsYXJlZCBidXQgbmV2ZXIgdXNlZAorLXctdWNwCQk7IE1peGluZyBwb2ludGVycyB0byBkaWZmZXJlbnQgJ2NoYXInIHR5cGVzCistd3VzZQkJOyAnaWRlbnRpZmllcicgZGVjbGFyZWQgYnV0IG5ldmVyIHVzZWQKKyAkKENvbXBJbmhlcml0T3B0c0F0X2d2aW0xNmRleGUpCit8ICRACisKKyFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgorTlVMTD0KK0RFTF9UUkVFID0gcm1kaXIgL3MgL3EKKyFFTFNFCitOVUxMPW51bAorREVMX1RSRUUgPSBkZWx0cmVlIC95CishRU5ESUYKKworQ0xFQU46CisJLUBpZiBleGlzdCAkKElOVERJUilcJChOVUxMKSAkKERFTF9UUkVFKSAkKElOVERJUikKKwktQGlmIGV4aXN0IEJjY1cxNi5jZmcgZXJhc2UgQmNjVzE2LmNmZworCS1AaWYgZXhpc3QgZ3ZpbTE2LmV4ZSBlcmFzZSBndmltMTYuZXhlCmRpZmYgLS1naXQgYS9zcmMvUkVBRE1FLnR4dCBiL3NyYy9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Yjg2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvUkVBRE1FLnR4dApAQCAtMCwwICsxLDE0MCBAQAorUkVBRE1FIGZvciB0aGUgVmltIHNvdXJjZSBjb2RlCisKK0hlcmUgYXJlIGEgZmV3IGhpbnRzIGZvciBmaW5kaW5nIHlvdXIgd2F5IGFyb3VuZCB0aGUgc291cmNlIGNvZGUuICBUaGlzCitkb2Vzbid0IG1ha2UgaXQgbGVzcyBjb21wbGV4IHRoYW4gaXQgaXMsIGJ1dCBpdCBnZXRzIHlvdSBzdGFydGVkLgorCitZb3UgbWlnaHQgYWxzbyB3YW50IHRvIHJlYWQgIjpoZWxwIGRldmVsb3BtZW50Ii4KKworCitKVU1QSU5HIEFST1VORAorCitGaXJzdCBvZiBhbGwsIHVzZSAiOm1ha2UgdGFncyIgdG8gZ2VuZXJhdGUgYSB0YWdzIGZpbGUsIHNvIHRoYXQgeW91IGNhbiB1c2UKK3RoZSAiOnRhZyIgY29tbWFuZCB0byBqdW1wIGFyb3VuZCB0aGUgc291cmNlIGNvZGUuCisKK1RvIGp1bXAgdG8gYSBmdW5jdGlvbiBvciB2YXJpYWJsZSBkZWZpbml0aW9uLCBtb3ZlIHRoZSBjdXJzb3Igb24gdGhlIG5hbWUgYW5kCit1c2UgdGhlIENUUkwtXSBjb21tYW5kLiAgVXNlIENUUkwtVCBvciBDVFJMLU8gdG8ganVtcCBiYWNrLgorCitUbyBqdW1wIHRvIGEgZmlsZSwgbW92ZSB0aGUgY3Vyc29yIG9uIGl0cyBuYW1lIGFuZCB1c2UgdGhlICJnZiIgY29tbWFuZC4KKworTW9zdCBjb2RlIGNhbiBiZSBmb3VuZCBpbiBhIGZpbGUgd2l0aCBhbiBvYnZpb3VzIG5hbWUgKGluY29tcGxldGUgbGlzdCk6CisJYnVmZmVyLmMJbWFuaXB1bGF0aW5nIGJ1ZmZlcnMgKGxvYWRlZCBmaWxlcykKKwlkaWZmLmMJCWRpZmYgbW9kZSAodmltZGlmZikKKwlldmFsLmMJCWV4cHJlc3Npb24gZXZhbHVhdGlvbgorCWZpbGVpby5jCXJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsZXMKKwlmb2xkLmMJCWZvbGRpbmcKKwlnZXRjaGFyLmMJZ2V0dGluZyBjaGFyYWN0ZXJzIGFuZCBrZXkgbWFwcGluZworCW1hcmsuYwkJbWFya3MKKwltZW1maWxlLmMJc3RvcmluZyBsaW5lcyBmb3IgYnVmZmVycyBpbiBhIHN3YXBmaWxlCisJbWVtbGluZS5jCXN0b3JpbmcgbGluZXMgZm9yIGJ1ZmZlcnMgaW4gbWVtb3J5CisJbWVudS5jCQltZW51cworCW1lc3NhZ2UuYwkoZXJyb3IpIG1lc3NhZ2VzCisJbWJ5dGUuYwkJbXVsdHktYnl0ZSBjaGFyYWN0ZXIgaGFuZGxpbmcKKwlvcHMuYwkJaGFuZGxpbmcgb3BlcmF0b3JzICgiZCIsICJ5IiwgInAiKQorCW9wdGlvbi5jCW9wdGlvbnMKKwlxdWlja2ZpeC5jCXF1aWNrZml4IGNvbW1hbmRzICgiOm1ha2UiLCAiOmNuIikKKwlzY3JlZW4uYwl1cGRhdGluZyB0aGUgd2luZG93cworCXNlYXJjaC5jCXBhdHRlcm4gc2VhcmNoaW5nCisJdGFnLmMJCXRhZ3MKKwl0ZXJtLmMJCXRlcm1pbmFsIGhhbmRsaW5nLCB0ZXJtY2FwIGNvZGVzCisJdW5kby5jCQl1bmRvIGFuZCByZWRvCisJd2luZG93LmMJaGFuZGxpbmcgc3BsaXQgd2luZG93cworCisKK0lNUE9SVEFOVCBWQVJJQUJMRVMKKworVGhlIGN1cnJlbnQgbW9kZSBpcyBzdG9yZWQgaW4gIlN0YXRlIi4gIFRoZSB2YWx1ZXMgaXQgY2FuIGhhdmUgYXJlIE5PUk1BTCwKK0lOU0VSVCwgQ01ETElORSwgYW5kIGEgZmV3IG90aGVycy4KKworVGhlIGN1cnJlbnQgd2luZG93IGlzICJjdXJ3aW4iLiAgVGhlIGN1cnJlbnQgYnVmZmVyIGlzICJjdXJidWYiLiAgVGhlc2UgcG9pbnQKK3RvIHN0cnVjdHVyZXMgd2l0aCB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB3aW5kb3csIG9wdGlvbiB2YWx1ZXMsIHRoZSBmaWxlCituYW1lLCBldGMuICBUaGVzZSBhcmUgZGVmaW5lZCBpbiBzdHJ1Y3RzLmguCisKK0FsbCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgZGVjbGFyZWQgaW4gZ2xvYmFscy5oLgorCisKK1RIRSBNQUlOIExPT1AKKworVGhpcyBpcyBjb252ZW5pZW50bHkgY2FsbGVkIG1haW5fbG9vcCgpLiAgSXQgdXBkYXRlcyBhIGZldyB0aGluZ3MgYW5kIHRoZW4KK2NhbGxzIG5vcm1hbF9jbWQoKSB0byBwcm9jZXNzIGEgY29tbWFuZC4gIFRoaXMgcmV0dXJucyB3aGVuIHRoZSBjb21tYW5kIGlzCitmaW5pc2hlZC4KKworVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCBWaW0gd2FpdHMgZm9yIHRoZSB1c2VyIHRvIHR5cGUgYSBjaGFyYWN0ZXIgYW5kCitwcm9jZXNzZXMgaXQgdW50aWwgYW5vdGhlciBjaGFyYWN0ZXIgaXMgbmVlZGVkLiAgVGh1cyB0aGVyZSBhcmUgc2V2ZXJhbCBwbGFjZXMKK3doZXJlIFZpbSB3YWl0cyBmb3IgYSBjaGFyYWN0ZXIgdG8gYmUgdHlwZWQuICBUaGUgdmdldGMoKSBmdW5jdGlvbiBpcyB1c2VkIGZvcgordGhpcy4gIEl0IGFsc28gaGFuZGxlcyBtYXBwaW5nLgorCitVcGRhdGluZyB0aGUgc2NyZWVuIGlzIG1vc3RseSBwb3N0cG9uZWQgdW50aWwgYSBjb21tYW5kIG9yIGEgc2VxdWVuY2Ugb2YKK2NvbW1hbmRzIGhhcyBmaW5pc2hlZC4gIFRoZSB3b3JrIGlzIGRvbmUgYnkgdXBkYXRlX3NjcmVlbigpLCB3aGljaCBjYWxscword2luX3VwZGF0ZSgpIGZvciBldmVyeSB3aW5kb3csIHdoaWNoIGNhbGxzIHdpbl9saW5lKCkgZm9yIGV2ZXJ5IGxpbmUuCitTZWUgdGhlIHN0YXJ0IG9mIHNjcmVlbi5jIGZvciBtb3JlIGV4cGxhbmF0aW9ucy4KKworCitDT01NQU5ELUxJTkUgTU9ERQorCitXaGVuIHR5cGluZyBhICI6Iiwgbm9ybWFsX2NtZCgpIHdpbGwgY2FsbCBnZXRjbWRsaW5lKCkgdG8gb2J0YWluIGEgbGluZSB3aXRoCithbiBFeCBjb21tYW5kLiAgZ2V0Y21kbGluZSgpIGNvbnRhaW5zIGEgbG9vcCB0aGF0IHdpbGwgaGFuZGxlIGVhY2ggdHlwZWQKK2NoYXJhY3Rlci4gIEl0IHJldHVybnMgd2hlbiBoaXR0aW5nIDxDUj4gb3IgPEVzYz4gb3Igc29tZSBvdGhlciBjaGFyYWN0ZXIgdGhhdAorZW5kcyB0aGUgY29tbWFuZCBsaW5lIG1vZGUuCisKKworRVggQ09NTUFORFMKKworRXggY29tbWFuZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGZ1bmN0aW9uIGRvX2NtZGxpbmUoKS4gIEl0IGRvZXMgdGhlIGdlbmVyaWMKK3BhcnNpbmcgb2YgdGhlICI6IiBjb21tYW5kIGxpbmUgYW5kIGNhbGxzIGRvX29uZV9jbWQoKSBmb3IgZWFjaCBzZXBhcmF0ZQorY29tbWFuZC4gIEl0IGFsc28gdGFrZXMgY2FyZSBvZiB3aGlsZSBsb29wcy4KKworZG9fb25lX2NtZCgpIHBhcnNlcyB0aGUgcmFuZ2UgYW5kIGdlbmVyaWMgYXJndW1lbnRzIGFuZCBwdXRzIHRoZW0gaW4gdGhlCitleGFyZ190IGFuZCBwYXNzZXMgaXQgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgY29tbWFuZC4KKworVGhlICI6IiBjb21tYW5kcyBhcmUgbGlzdGVkIGluIGV4X2NtZHMuaC4gIFRoZSB0aGlyZCBlbnRyeSBvZiBlYWNoIGl0ZW0gaXMgdGhlCituYW1lIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGNvbW1hbmQuICBUaGUgbGFzdCBlbnRyeSBhcmUgdGhlIGZsYWdzCit0aGF0IGFyZSB1c2VkIGZvciB0aGUgY29tbWFuZC4KKworCitOT1JNQUwgTU9ERSBDT01NQU5EUworCitUaGUgTm9ybWFsIG1vZGUgY29tbWFuZHMgYXJlIGhhbmRsZWQgYnkgdGhlIG5vcm1hbF9jbWQoKSBmdW5jdGlvbi4gIEl0IGFsc28KK2hhbmRsZXMgdGhlIG9wdGlvbmFsIGNvdW50IGFuZCBhbiBleHRyYSBjaGFyYWN0ZXIgZm9yIHNvbWUgY29tbWFuZHMuICBUaGVzZQorYXJlIHBhc3NlZCBpbiBhIGNtZGFyZ190IHRvIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGNvbW1hbmQuCisKK1RoZXJlIGlzIGEgdGFibGUgbnZfY21kcyBpbiBub3JtYWwuYyB3aGljaCBsaXN0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGV2ZXJ5Citjb21tYW5kLiAgVGhlIHNlY29uZCBlbnRyeSBvZiBlYWNoIGl0ZW0gaXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQKK2hhbmRsZXMgdGhlIGNvbW1hbmQuCisKKworSU5TRVJUIE1PREUgQ09NTUFORFMKKworV2hlbiBkb2luZyBhbiAiaSIgb3IgImEiIGNvbW1hbmQsIG5vcm1hbF9jbWQoKSB3aWxsIGNhbGwgdGhlIGVkaXQoKSBmdW5jdGlvbi4KK0l0IGNvbnRhaW5zIGEgbG9vcCB0aGF0IHdhaXRzIGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIgYW5kIGhhbmRsZXMgaXQuICBJdAorcmV0dXJucyB3aGVuIGxlYXZpbmcgSW5zZXJ0IG1vZGUuCisKKworT1BUSU9OUworCitUaGVyZSBpcyBhIGxpc3Qgd2l0aCBhbGwgb3B0aW9uIG5hbWVzIGluIG9wdGlvbi5jLCBjYWxsZWQgb3B0aW9uc1tdLgorCisKK1RIRSBHVUkKKworTW9zdCBvZiB0aGUgR1VJIGNvZGUgaXMgaW1wbGVtZW50ZWQgbGlrZSBpdCB3YXMgYSBjbGV2ZXIgdGVybWluYWwuICBUeXBpbmcgYQorY2hhcmFjdGVyLCBtb3ZpbmcgYSBzY3JvbGxiYXIsIGNsaWNraW5nIHRoZSBtb3VzZSwgZXRjLiBhcmUgYWxsIHRyYW5zbGF0ZWQKK2ludG8gZXZlbnRzIHdoaWNoIGFyZSB3cml0dGVuIGluIHRoZSBpbnB1dCBidWZmZXIuICBUaGVzZSBhcmUgcmVhZCBieSB0aGUKK21haW4gY29kZSwganVzdCBsaWtlIHJlYWRpbmcgZnJvbSBhIHRlcm1pbmFsLiAgVGhlIGNvZGUgZm9yIHRoaXMgaXMgc2NhdHRlcmVkCit0aHJvdWdoIGd1aS5jLiAgRm9yIGV4YW1wbGU6IGd1aV9zZW5kX21vdXNlX2V2ZW50KCkgZm9yIGEgbW91c2UgY2xpY2sgYW5kCitndWlfbWVudV9jYigpIGZvciBhIG1lbnUgYWN0aW9uLiAgS2V5IGhpdHMgYXJlIGhhbmRsZWQgYnkgdGhlIHN5c3RlbS1zcGVjaWZpYworR1VJIGNvZGUsIHdoaWNoIGNhbGxzIGFkZF90b19pbnB1dF9idWYoKSB0byBzZW5kIHRoZSBrZXkgY29kZS4KKworVXBkYXRpbmcgdGhlIEdVSSB3aW5kb3cgaXMgZG9uZSBieSB3cml0aW5nIGNvZGVzIGluIHRoZSBvdXRwdXQgYnVmZmVyLCBqdXN0CitsaWtlIHdyaXRpbmcgdG8gYSB0ZXJtaW5hbC4gIFdoZW4gdGhlIGJ1ZmZlciBnZXRzIGZ1bGwgb3IgaXMgZmx1c2hlZCwKK2d1aV93cml0ZSgpIHdpbGwgcGFyc2UgdGhlIGNvZGVzIGFuZCBkcmF3IHRoZSBhcHByb3ByaWF0ZSBpdGVtcy4gIEZpbmFsbHkgdGhlCitzeXN0ZW0tc3BlY2lmaWMgR1VJIGNvZGUgd2lsbCBiZSBjYWxsZWQgdG8gZG8gdGhlIHdvcmsuCisKKworREVCVUdHSU5HIFRIRSBHVUkKKworUmVtZW1iZXIgdG8gcHJldmVudCB0aGF0IGd2aW0gZm9ya3MgYW5kIHRoZSBkZWJ1Z2dlciB0aGlua3MgVmltIGhhcyBleGl0ZWQsCithZGQgdGhlICItZiIgYXJndW1lbnQuICBJbiBnZGI6ICJydW4gLWYgLWciLgorCitXaGVuIHN0ZXBwaW5nIHRocm91Z2ggZGlzcGxheSB1cGRhdGluZyBjb2RlLCB0aGUgZm9jdXMgZXZlbnQgaXMgdHJpZ2dlcnJlZAord2hlbiBnb2luZyBmcm9tIHRoZSBkZWJ1Z2dlciB0byBWaW0gYW5kIGJhY2suICBUbyBhdm9pZCB0aGlzLCByZWNvbXBpbGUgd2l0aAorc29tZSBjb2RlIGluIGd1aV9mb2N1c19jaGFuZ2UoKSBkaXNhYmxlZC4KZGlmZiAtLWdpdCBhL3NyYy9WaXNWaW0vQ29tbWFuZHMuY3BwIGIvc3JjL1Zpc1ZpbS9Db21tYW5kcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0YjdhOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9WaXNWaW0vQ29tbWFuZHMuY3BwCkBAIC0wLDAgKzEsNjkzIEBACisjaW5jbHVkZSAic3RkYWZ4LmgiCisjaW5jbHVkZSA8Y29tZGVmLmg+CS8vIEZvciBfYnN0cl90CisjaW5jbHVkZSAiVmlzVmltLmgiCisjaW5jbHVkZSAiQ29tbWFuZHMuaCIKKyNpbmNsdWRlICJPbGVBdXQuaCIKKworI2lmZGVmIF9ERUJVRworI2RlZmluZSBuZXcgREVCVUdfTkVXCisjdW5kZWYgVEhJU19GSUxFCitzdGF0aWMgY2hhciBUSElTX0ZJTEVbXSA9IF9fRklMRV9fOworCisjZW5kaWYKKworCisvLyBDaGFuZ2UgZGlyZWN0b3J5IGJlZm9yZSBvcGVuaW5nIGZpbGU/CisjZGVmaW5lIENEX1NPVVJDRQkJMAkvLyBDZCB0byBzb3VyY2UgcGF0aAorI2RlZmluZSBDRF9TT1VSQ0VfUEFSRU5UCTEJLy8gQ2QgdG8gcGFyZW50IGRpcmVjdG9yeSBvZiBzb3VyY2UgcGF0aAorI2RlZmluZSBDRF9OT05FCQkJMgkvLyBObyBjZAorCisKK3N0YXRpYyBCT09MIGdfYkVuYWJsZVZpbSA9IFRSVUU7CS8vIFZpbSBlbmFibGVkCitzdGF0aWMgQk9PTCBnX2JEZXZTdHVkaW9FZGl0b3IgPSBGQUxTRTsJLy8gT3BlbiBmaWxlIGluIERldiBTdHVkaW8gZWRpdG9yIHNpbXVsdGFuZW91c2x5CitzdGF0aWMgaW50IGdfQ2hhbmdlRGlyID0gQ0RfTk9ORTsJLy8gQ0QgYWZ0ZXIgZmlsZSBvcGVuPworCitzdGF0aWMgdm9pZCBWaW1TZXRFbmFibGVTdGF0ZSAoQk9PTCBiRW5hYmxlU3RhdGUpOworc3RhdGljIEJPT0wgVmltT3BlbkZpbGUgKEJTVFImIEZpbGVOYW1lLCBsb25nIExpbmVOcik7CitzdGF0aWMgRElTUElEIFZpbUdldERpc3BhdGNoSWQgKENPbGVBdXRvbWF0aW9uQ29udHJvbCYgVmltT2xlLCBjaGFyKiBNZXRob2QpOworc3RhdGljIHZvaWQgVmltRXJyRGlhZyAoQ09sZUF1dG9tYXRpb25Db250cm9sJiBWaW1PbGUpOworc3RhdGljIHZvaWQgVmltQ2hhbmdlRGlyIChDT2xlQXV0b21hdGlvbkNvbnRyb2wmIFZpbU9sZSwgRElTUElEIERpc3BhdGNoSWQsIEJTVFImIEZpbGVOYW1lKTsKK3N0YXRpYyB2b2lkIERlYnVnTXNnIChjaGFyKiBNc2csIGNoYXIqIEFyZyA9IE5VTEwpOworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDQ29tbWFuZHMKKworQ0NvbW1hbmRzOjpDQ29tbWFuZHMgKCkKK3sKKwkvLyBtX3BBcHBsaWNhdGlvbiA9PSBOVUxMOyBNJCBDb2RlIGdlbmVyYXRpb24gYnVnISEhCisJbV9wQXBwbGljYXRpb24gPSBOVUxMOworCW1fcEFwcGxpY2F0aW9uRXZlbnRzT2JqID0gTlVMTDsKKwltX3BEZWJ1Z2dlckV2ZW50c09iaiA9IE5VTEw7Cit9CisKK0NDb21tYW5kczo6fkNDb21tYW5kcyAoKQoreworCUFTU0VSVCAobV9wQXBwbGljYXRpb24gIT0gTlVMTCk7CisJaWYgKG1fcEFwcGxpY2F0aW9uKQorCXsKKwkJbV9wQXBwbGljYXRpb24tPlJlbGVhc2UgKCk7CisJCW1fcEFwcGxpY2F0aW9uID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgQ0NvbW1hbmRzOjpTZXRBcHBsaWNhdGlvbk9iamVjdCAoSUFwcGxpY2F0aW9uICogcEFwcGxpY2F0aW9uKQoreworCS8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBwQXBwbGljYXRpb24gaGFzIGFscmVhZHkgYmVlbiBBZGRSZWYnZAorCS8vIGZvciB1cywgd2hpY2ggQ0RTQWRkSW4gZGlkIGluIGl0cyBRdWVyeUludGVyZmFjZSBjYWxsCisJLy8ganVzdCBiZWZvcmUgaXQgY2FsbGVkIHVzLgorCW1fcEFwcGxpY2F0aW9uID0gcEFwcGxpY2F0aW9uOworCWlmICghIG1fcEFwcGxpY2F0aW9uKQorCQlyZXR1cm47CisKKwkvLyBDcmVhdGUgQXBwbGljYXRpb24gZXZlbnQgaGFuZGxlcnMKKwlYQXBwbGljYXRpb25FdmVudHNPYmo6OkNyZWF0ZUluc3RhbmNlICgmbV9wQXBwbGljYXRpb25FdmVudHNPYmopOworCWlmICghIG1fcEFwcGxpY2F0aW9uRXZlbnRzT2JqKQorCXsKKwkJUmVwb3J0SW50ZXJuYWxFcnJvciAoIlhBcHBsaWNhdGlvbkV2ZW50c09iajo6Q3JlYXRlSW5zdGFuY2UiKTsKKwkJcmV0dXJuOworCX0KKwltX3BBcHBsaWNhdGlvbkV2ZW50c09iai0+QWRkUmVmICgpOworCW1fcEFwcGxpY2F0aW9uRXZlbnRzT2JqLT5Db25uZWN0IChtX3BBcHBsaWNhdGlvbik7CisJbV9wQXBwbGljYXRpb25FdmVudHNPYmotPm1fcENvbW1hbmRzID0gdGhpczsKKworI2lmZGVmIE5FVkVSCisJLy8gQ3JlYXRlIERlYnVnZ2VyIGV2ZW50IGhhbmRsZXIKKwlDQ29tUHRyIDwgSURpc3BhdGNoID4gcERlYnVnZ2VyOworCWlmIChTVUNDRUVERUQgKG1fcEFwcGxpY2F0aW9uLT5nZXRfRGVidWdnZXIgKCZwRGVidWdnZXIpKQorCSAgICAmJiBwRGVidWdnZXIgIT0gTlVMTCkKKwl7CisJCVhEZWJ1Z2dlckV2ZW50c09iajo6Q3JlYXRlSW5zdGFuY2UgKCZtX3BEZWJ1Z2dlckV2ZW50c09iaik7CisJCW1fcERlYnVnZ2VyRXZlbnRzT2JqLT5BZGRSZWYgKCk7CisJCW1fcERlYnVnZ2VyRXZlbnRzT2JqLT5Db25uZWN0IChwRGVidWdnZXIpOworCQltX3BEZWJ1Z2dlckV2ZW50c09iai0+bV9wQ29tbWFuZHMgPSB0aGlzOworCX0KKyNlbmRpZgorCisJLy8gR2V0IHNldHRpbmdzIGZyb20gcmVnaXN0cnkgSEtFWV9DVVJSRU5UX1VTRVJcU29mdHdhcmVcVmltXFZpc1ZpbQorCUhLRVkgaEFwcEtleSA9IEdldEFwcEtleSAoIlZpbSIpOworCWlmIChoQXBwS2V5KQorCXsKKwkJSEtFWSBoU2VjdGlvbktleSA9IEdldFNlY3Rpb25LZXkgKGhBcHBLZXksICJWaXNWaW0iKTsKKwkJaWYgKGhTZWN0aW9uS2V5KQorCQl7CisJCQlnX2JFbmFibGVWaW0gPSBHZXRSZWdpc3RyeUludCAoaFNlY3Rpb25LZXksICJFbmFibGVWaW0iLAorCQkJCQkJICAgICAgIGdfYkVuYWJsZVZpbSk7CisJCQlnX2JEZXZTdHVkaW9FZGl0b3IgPSBHZXRSZWdpc3RyeUludChoU2VjdGlvbktleSwiRGV2U3R1ZGlvRWRpdG9yIiwKKwkJCQkJCQkgICAgZ19iRGV2U3R1ZGlvRWRpdG9yKTsKKwkJCWdfQ2hhbmdlRGlyID0gR2V0UmVnaXN0cnlJbnQgKGhTZWN0aW9uS2V5LCAiQ2hhbmdlRGlyIiwKKwkJCQkJCSAgICAgIGdfQ2hhbmdlRGlyKTsKKwkJCVJlZ0Nsb3NlS2V5IChoU2VjdGlvbktleSk7CisJCX0KKwkJUmVnQ2xvc2VLZXkgKGhBcHBLZXkpOworCX0KK30KKwordm9pZCBDQ29tbWFuZHM6OlVuYWR2aXNlRnJvbUV2ZW50cyAoKQoreworCUFTU0VSVCAobV9wQXBwbGljYXRpb25FdmVudHNPYmogIT0gTlVMTCk7CisJaWYgKG1fcEFwcGxpY2F0aW9uRXZlbnRzT2JqKQorCXsKKwkJbV9wQXBwbGljYXRpb25FdmVudHNPYmotPkRpc2Nvbm5lY3QgKG1fcEFwcGxpY2F0aW9uKTsKKwkJbV9wQXBwbGljYXRpb25FdmVudHNPYmotPlJlbGVhc2UgKCk7CisJCW1fcEFwcGxpY2F0aW9uRXZlbnRzT2JqID0gTlVMTDsKKwl9CisKKyNpZmRlZiBORVZFUgorCWlmIChtX3BEZWJ1Z2dlckV2ZW50c09iaikKKwl7CisJCS8vIFNpbmNlIHdlIHdlcmUgYWJsZSB0byBjb25uZWN0IHRvIHRoZSBEZWJ1Z2dlciBldmVudHMsIHdlCisJCS8vIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgRGVidWdnZXIgb2JqZWN0IGFnYWluIHRvCisJCS8vIHVuYWR2aXNlIGZyb20gaXRzIGV2ZW50cyAodGh1cyB0aGUgVkVSSUZZX09LIGJlbG93LS1zZWUKKwkJLy8gc3RkYWZ4LmgpLgorCQlDQ29tUHRyIDwgSURpc3BhdGNoID4gcERlYnVnZ2VyOworCQlWRVJJRllfT0sgKG1fcEFwcGxpY2F0aW9uLT5nZXRfRGVidWdnZXIgKCZwRGVidWdnZXIpKTsKKwkJQVNTRVJUIChwRGVidWdnZXIgIT0gTlVMTCk7CisJCW1fcERlYnVnZ2VyRXZlbnRzT2JqLT5EaXNjb25uZWN0IChwRGVidWdnZXIpOworCQltX3BEZWJ1Z2dlckV2ZW50c09iai0+UmVsZWFzZSAoKTsKKwkJbV9wRGVidWdnZXJFdmVudHNPYmogPSBOVUxMOworCX0KKyNlbmRpZgorfQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBFdmVudCBoYW5kbGVycworCisvLyBBcHBsaWNhdGlvbiBldmVudHMKKworSFJFU1VMVCBDQ29tbWFuZHM6OlhBcHBsaWNhdGlvbkV2ZW50czo6QmVmb3JlQnVpbGRTdGFydCAoKQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKwlyZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBDQ29tbWFuZHM6OlhBcHBsaWNhdGlvbkV2ZW50czo6QnVpbGRGaW5pc2ggKGxvbmcgbk51bUVycm9ycywgbG9uZyBuTnVtV2FybmluZ3MpCit7CisJQUZYX01BTkFHRV9TVEFURSAoQWZ4R2V0U3RhdGljTW9kdWxlU3RhdGUgKCkpOworCXJldHVybiBTX09LOworfQorCitIUkVTVUxUIENDb21tYW5kczo6WEFwcGxpY2F0aW9uRXZlbnRzOjpCZWZvcmVBcHBsaWNhdGlvblNodXREb3duICgpCit7CisJQUZYX01BTkFHRV9TVEFURSAoQWZ4R2V0U3RhdGljTW9kdWxlU3RhdGUgKCkpOworCXJldHVybiBTX09LOworfQorCisvLyBUaGUgb3BlbiBkb2N1bWVudCBldmVudCBoYW5kbGUgaXMgdGhlIHBsYWNlIHdoZXJlIHRoZSByZWFsIGludGVyZmFjZSB3b3JrCisvLyBpcyBkb25lLgorLy8gVmltIGdldHMgY2FsbGVkIGZyb20gaGVyZS4KKy8vCitIUkVTVUxUIENDb21tYW5kczo6WEFwcGxpY2F0aW9uRXZlbnRzOjpEb2N1bWVudE9wZW4gKElEaXNwYXRjaCAqIHRoZURvY3VtZW50KQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKworCWlmICghIGdfYkVuYWJsZVZpbSkKKwkJLy8gVmltIG5vdCBlbmFibGVkIG9yIGVtcHR5IGNvbW1hbmQgbGluZSBlbnRlcmVkCisJCXJldHVybiBTX09LOworCisJLy8gRmlyc3QgZ2V0IHRoZSBjdXJyZW50IGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIKKworCS8vIEdldCB0aGUgZG9jdW1lbnQgb2JqZWN0CisJQ0NvbVFJUHRyIDwgSVRleHREb2N1bWVudCwgJklJRF9JVGV4dERvY3VtZW50ID4gcERvYyAodGhlRG9jdW1lbnQpOworCWlmICghIHBEb2MpCisJCXJldHVybiBTX09LOworCisJQlNUUiBGaWxlTmFtZTsKKwlsb25nIExpbmVOciA9IC0xOworCisJLy8gR2V0IHRoZSBkb2N1bWVudCBuYW1lCisJaWYgKEZBSUxFRCAocERvYy0+Z2V0X0Z1bGxOYW1lICgmRmlsZU5hbWUpKSkKKwkJcmV0dXJuIFNfT0s7CisKKwlMUERJU1BBVENIIHBEaXNwU2VsOworCisJLy8gR2V0IGEgc2VsZWN0aW9uIG9iamVjdCBkaXNwYXRjaCBwb2ludGVyCisJaWYgKFNVQ0NFRURFRCAocERvYy0+Z2V0X1NlbGVjdGlvbiAoJnBEaXNwU2VsKSkpCisJeworCQkvLyBHZXQgdGhlIHNlbGVjdGlvbiBvYmplY3QKKwkJQ0NvbVFJUHRyIDwgSVRleHRTZWxlY3Rpb24sICZJSURfSVRleHRTZWxlY3Rpb24gPiBwU2VsIChwRGlzcFNlbCk7CisKKwkJaWYgKHBTZWwpCisJCQkvLyBHZXQgdGhlIHNlbGVjdGlvbiBsaW5lIG51bWJlcgorCQkJcFNlbC0+Z2V0X0N1cnJlbnRMaW5lICgmTGluZU5yKTsKKworCQlwRGlzcFNlbC0+UmVsZWFzZSAoKTsKKwl9CisKKwkvLyBPcGVuIHRoZSBmaWxlIGluIFZpbSBhbmQgcG9zaXRpb24gdG8gdGhlIGN1cnJlbnQgbGluZQorCWlmIChWaW1PcGVuRmlsZSAoRmlsZU5hbWUsIExpbmVOcikpCisJeworCQlpZiAoISBnX2JEZXZTdHVkaW9FZGl0b3IpCisJCXsKKwkJCS8vIENsb3NlIHRoZSBkb2N1bWVudCBpbiBkZXZlbG9wZXIgc3R1ZGlvCisJCQlDQ29tVmFyaWFudCB2U2F2ZUNoYW5nZXMgPSBkc1NhdmVDaGFuZ2VzUHJvbXB0OworCQkJRHNTYXZlU3RhdHVzIFNhdmVkOworCisJCQlwRG9jLT5DbG9zZSAodlNhdmVDaGFuZ2VzLCAmU2F2ZWQpOworCQl9CisJfQorCisJLy8gV2UncmUgZG9uZSBoZXJlCisJU3lzRnJlZVN0cmluZyAoRmlsZU5hbWUpOworCXJldHVybiBTX09LOworfQorCitIUkVTVUxUIENDb21tYW5kczo6WEFwcGxpY2F0aW9uRXZlbnRzOjpCZWZvcmVEb2N1bWVudENsb3NlIChJRGlzcGF0Y2ggKiB0aGVEb2N1bWVudCkKK3sKKwlBRlhfTUFOQUdFX1NUQVRFIChBZnhHZXRTdGF0aWNNb2R1bGVTdGF0ZSAoKSk7CisJcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQ0NvbW1hbmRzOjpYQXBwbGljYXRpb25FdmVudHM6OkRvY3VtZW50U2F2ZSAoSURpc3BhdGNoICogdGhlRG9jdW1lbnQpCit7CisJQUZYX01BTkFHRV9TVEFURSAoQWZ4R2V0U3RhdGljTW9kdWxlU3RhdGUgKCkpOworCXJldHVybiBTX09LOworfQorCitIUkVTVUxUIENDb21tYW5kczo6WEFwcGxpY2F0aW9uRXZlbnRzOjpOZXdEb2N1bWVudCAoSURpc3BhdGNoICogdGhlRG9jdW1lbnQpCit7CisJQUZYX01BTkFHRV9TVEFURSAoQWZ4R2V0U3RhdGljTW9kdWxlU3RhdGUgKCkpOworCisJaWYgKCEgZ19iRW5hYmxlVmltKQorCQkvLyBWaW0gbm90IGVuYWJsZWQgb3IgZW1wdHkgY29tbWFuZCBsaW5lIGVudGVyZWQKKwkJcmV0dXJuIFNfT0s7CisKKwkvLyBGaXJzdCBnZXQgdGhlIGN1cnJlbnQgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlcgorCisJQ0NvbVFJUHRyIDwgSVRleHREb2N1bWVudCwgJklJRF9JVGV4dERvY3VtZW50ID4gcERvYyAodGhlRG9jdW1lbnQpOworCWlmICghIHBEb2MpCisJCXJldHVybiBTX09LOworCisJQlNUUiBGaWxlTmFtZTsKKwlIUkVTVUxUIGhyOworCisJaHIgPSBwRG9jLT5nZXRfRnVsbE5hbWUgKCZGaWxlTmFtZSk7CisJaWYgKEZBSUxFRCAoaHIpKQorCQlyZXR1cm4gU19PSzsKKworCS8vIE9wZW4gdGhlIGZpbGUgaW4gVmltIGFuZCBwb3NpdGlvbiB0byB0aGUgY3VycmVudCBsaW5lCisJaWYgKFZpbU9wZW5GaWxlIChGaWxlTmFtZSwgMCkpCisJeworCQlpZiAoISBnX2JEZXZTdHVkaW9FZGl0b3IpCisJCXsKKwkJCS8vIENsb3NlIHRoZSBkb2N1bWVudCBpbiBkZXZlbG9wZXIgc3R1ZGlvCisJCQlDQ29tVmFyaWFudCB2U2F2ZUNoYW5nZXMgPSBkc1NhdmVDaGFuZ2VzUHJvbXB0OworCQkJRHNTYXZlU3RhdHVzIFNhdmVkOworCisJCQlwRG9jLT5DbG9zZSAodlNhdmVDaGFuZ2VzLCAmU2F2ZWQpOworCQl9CisJfQorCisJU3lzRnJlZVN0cmluZyAoRmlsZU5hbWUpOworCXJldHVybiBTX09LOworfQorCitIUkVTVUxUIENDb21tYW5kczo6WEFwcGxpY2F0aW9uRXZlbnRzOjpXaW5kb3dBY3RpdmF0ZSAoSURpc3BhdGNoICogdGhlV2luZG93KQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKwlyZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBDQ29tbWFuZHM6OlhBcHBsaWNhdGlvbkV2ZW50czo6V2luZG93RGVhY3RpdmF0ZSAoSURpc3BhdGNoICogdGhlV2luZG93KQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKwlyZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBDQ29tbWFuZHM6OlhBcHBsaWNhdGlvbkV2ZW50czo6V29ya3NwYWNlT3BlbiAoKQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKwlyZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBDQ29tbWFuZHM6OlhBcHBsaWNhdGlvbkV2ZW50czo6V29ya3NwYWNlQ2xvc2UgKCkKK3sKKwlBRlhfTUFOQUdFX1NUQVRFIChBZnhHZXRTdGF0aWNNb2R1bGVTdGF0ZSAoKSk7CisJcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQ0NvbW1hbmRzOjpYQXBwbGljYXRpb25FdmVudHM6Ok5ld1dvcmtzcGFjZSAoKQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKwlyZXR1cm4gU19PSzsKK30KKworLy8gRGVidWdnZXIgZXZlbnQKKworSFJFU1VMVCBDQ29tbWFuZHM6OlhEZWJ1Z2dlckV2ZW50czo6QnJlYWtwb2ludEhpdCAoSURpc3BhdGNoICogcEJyZWFrcG9pbnQpCit7CisJQUZYX01BTkFHRV9TVEFURSAoQWZ4R2V0U3RhdGljTW9kdWxlU3RhdGUgKCkpOworCXJldHVybiBTX09LOworfQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBWaXNWaW0gZGlhbG9nCisKK2NsYXNzIENNYWluRGlhbG9nIDogcHVibGljIENEaWFsb2cKK3sKKyAgICBwdWJsaWM6CisJQ01haW5EaWFsb2cgKENXbmQgKiBwUGFyZW50ID0gTlVMTCk7CS8vIFN0YW5kYXJkIGNvbnN0cnVjdG9yCisKKwkvL3t7QUZYX0RBVEEoQ01haW5EaWFsb2cpCisJZW51bSB7IElERCA9IElERF9BRERJTk1BSU4gfTsKKwlpbnQJbV9DaGFuZ2VEaXI7CisJQk9PTAltX2JEZXZTdHVkaW9FZGl0b3I7CisJLy99fUFGWF9EQVRBCisKKwkvL3t7QUZYX1ZJUlRVQUwoQ01haW5EaWFsb2cpCisgICAgcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZCBEb0RhdGFFeGNoYW5nZSAoQ0RhdGFFeGNoYW5nZSAqIHBEWCk7CS8vIEREWC9ERFYgc3VwcG9ydAorCS8vfX1BRlhfVklSVFVBTAorCisgICAgcHJvdGVjdGVkOgorCS8ve3tBRlhfTVNHKENNYWluRGlhbG9nKQorCWFmeF9tc2cgdm9pZCBPbkVuYWJsZSgpOworCWFmeF9tc2cgdm9pZCBPbkRpc2FibGUoKTsKKwkvL319QUZYX01TRworCURFQ0xBUkVfTUVTU0FHRV9NQVAgKCkKK307CisKK0NNYWluRGlhbG9nOjpDTWFpbkRpYWxvZyAoQ1duZCAqIHBQYXJlbnQgLyogPU5VTEwgKi8gKQorCTogQ0RpYWxvZyAoQ01haW5EaWFsb2c6OklERCwgcFBhcmVudCkKK3sKKwkvL3t7QUZYX0RBVEFfSU5JVChDTWFpbkRpYWxvZykKKwltX0NoYW5nZURpciA9IC0xOworCW1fYkRldlN0dWRpb0VkaXRvciA9IEZBTFNFOworCS8vfX1BRlhfREFUQV9JTklUCit9CisKK3ZvaWQgQ01haW5EaWFsb2c6OkRvRGF0YUV4Y2hhbmdlIChDRGF0YUV4Y2hhbmdlICogcERYKQoreworCUNEaWFsb2c6OkRvRGF0YUV4Y2hhbmdlIChwRFgpOworCS8ve3tBRlhfREFUQV9NQVAoQ01haW5EaWFsb2cpCisJRERYX1JhZGlvKHBEWCwgSURDX0NEX1NPVVJDRV9QQVRILCBtX0NoYW5nZURpcik7CisJRERYX0NoZWNrIChwRFgsIElEQ19ERVZTVFVESU9fRURJVE9SLCBtX2JEZXZTdHVkaW9FZGl0b3IpOworCS8vfX1BRlhfREFUQV9NQVAKK30KKworQkVHSU5fTUVTU0FHRV9NQVAgKENNYWluRGlhbG9nLCBDRGlhbG9nKQorCS8ve3tBRlhfTVNHX01BUChDTWFpbkRpYWxvZykKKwkvL319QUZYX01TR19NQVAKK0VORF9NRVNTQUdFX01BUCAoKQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDQ29tbWFuZHMgbWV0aG9kcworCitTVERNRVRIT0RJTVAgQ0NvbW1hbmRzOjpWaXNWaW1EaWFsb2cgKCkKK3sKKwlBRlhfTUFOQUdFX1NUQVRFIChBZnhHZXRTdGF0aWNNb2R1bGVTdGF0ZSAoKSk7CisKKwkvLyBVc2UgbV9wQXBwbGljYXRpb24gdG8gYWNjZXNzIHRoZSBEZXZlbG9wZXIgU3R1ZGlvIEFwcGxpY2F0aW9uCisJLy8gb2JqZWN0LAorCS8vIGFuZCBWRVJJRllfT0sgdG8gc2VlIGVycm9yIHN0cmluZ3MgaW4gREVCVUcgYnVpbGRzIG9mIHlvdXIgYWRkLWluCisJLy8gKHNlZSBzdGRhZnguaCkKKworCVZFUklGWV9PSyAobV9wQXBwbGljYXRpb24tPkVuYWJsZU1vZGVsZXNzIChWQVJJQU5UX0ZBTFNFKSk7CisKKwlDTWFpbkRpYWxvZyBEbGc7CisKKwlEbGcubV9iRGV2U3R1ZGlvRWRpdG9yID0gZ19iRGV2U3R1ZGlvRWRpdG9yOworCURsZy5tX0NoYW5nZURpciA9IGdfQ2hhbmdlRGlyOworCWlmIChEbGcuRG9Nb2RhbCAoKSA9PSBJRE9LKQorCXsKKwkJZ19iRGV2U3R1ZGlvRWRpdG9yID0gRGxnLm1fYkRldlN0dWRpb0VkaXRvcjsKKwkJZ19DaGFuZ2VEaXIgPSBEbGcubV9DaGFuZ2VEaXI7CisKKwkJLy8gU2F2ZSBzZXR0aW5ncyB0byByZWdpc3RyeSBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0d2FyZVxWaW1cVmlzVmltCisJCUhLRVkgaEFwcEtleSA9IEdldEFwcEtleSAoIlZpbSIpOworCQlpZiAoaEFwcEtleSkKKwkJeworCQkJSEtFWSBoU2VjdGlvbktleSA9IEdldFNlY3Rpb25LZXkgKGhBcHBLZXksICJWaXNWaW0iKTsKKwkJCWlmIChoU2VjdGlvbktleSkKKwkJCXsKKwkJCQlXcml0ZVJlZ2lzdHJ5SW50IChoU2VjdGlvbktleSwgIkRldlN0dWRpb0VkaXRvciIsCisJCQkJCQkgIGdfYkRldlN0dWRpb0VkaXRvcik7CisJCQkJV3JpdGVSZWdpc3RyeUludCAoaFNlY3Rpb25LZXksICJDaGFuZ2VEaXIiLCBnX0NoYW5nZURpcik7CisJCQkJUmVnQ2xvc2VLZXkgKGhTZWN0aW9uS2V5KTsKKwkJCX0KKwkJCVJlZ0Nsb3NlS2V5IChoQXBwS2V5KTsKKwkJfQorCX0KKworCVZFUklGWV9PSyAobV9wQXBwbGljYXRpb24tPkVuYWJsZU1vZGVsZXNzIChWQVJJQU5UX1RSVUUpKTsKKwlyZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIENDb21tYW5kczo6VmlzVmltRW5hYmxlICgpCit7CisJQUZYX01BTkFHRV9TVEFURSAoQWZ4R2V0U3RhdGljTW9kdWxlU3RhdGUgKCkpOworCVZpbVNldEVuYWJsZVN0YXRlICh0cnVlKTsKKwlyZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIENDb21tYW5kczo6VmlzVmltRGlzYWJsZSAoKQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKwlWaW1TZXRFbmFibGVTdGF0ZSAoZmFsc2UpOworCXJldHVybiBTX09LOworfQorCitTVERNRVRIT0RJTVAgQ0NvbW1hbmRzOjpWaXNWaW1Ub2dnbGUgKCkKK3sKKwlBRlhfTUFOQUdFX1NUQVRFIChBZnhHZXRTdGF0aWNNb2R1bGVTdGF0ZSAoKSk7CisJVmltU2V0RW5hYmxlU3RhdGUgKCEgZ19iRW5hYmxlVmltKTsKKwlyZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIENDb21tYW5kczo6VmlzVmltTG9hZCAoKQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKworCS8vIFVzZSBtX3BBcHBsaWNhdGlvbiB0byBhY2Nlc3MgdGhlIERldmVsb3BlciBTdHVkaW8gQXBwbGljYXRpb24gb2JqZWN0LAorCS8vIGFuZCBWRVJJRllfT0sgdG8gc2VlIGVycm9yIHN0cmluZ3MgaW4gREVCVUcgYnVpbGRzIG9mIHlvdXIgYWRkLWluCisJLy8gKHNlZSBzdGRhZnguaCkKKworCUNDb21CU1RSIGJTdHI7CisJLy8gRGVmaW5lIGRpc3BhdGNoIHBvaW50ZXJzIGZvciBkb2N1bWVudCBhbmQgc2VsZWN0aW9uIG9iamVjdHMKKwlDQ29tUHRyIDwgSURpc3BhdGNoID4gcERpc3BEb2MsIHBEaXNwU2VsOworCisJLy8gR2V0IGEgZG9jdW1lbnQgb2JqZWN0IGRpc3BhdGNoIHBvaW50ZXIKKwlWRVJJRllfT0sgKG1fcEFwcGxpY2F0aW9uLT5nZXRfQWN0aXZlRG9jdW1lbnQgKCZwRGlzcERvYykpOworCWlmICghIHBEaXNwRG9jKQorCQlyZXR1cm4gU19PSzsKKworCUJTVFIgRmlsZU5hbWU7CisJbG9uZyBMaW5lTnIgPSAtMTsKKworCS8vIEdldCB0aGUgZG9jdW1lbnQgb2JqZWN0CisJQ0NvbVFJUHRyIDwgSVRleHREb2N1bWVudCwgJklJRF9JVGV4dERvY3VtZW50ID4gcERvYyAocERpc3BEb2MpOworCisJaWYgKCEgcERvYykKKwkJcmV0dXJuIFNfT0s7CisKKwkvLyBHZXQgdGhlIGRvY3VtZW50IG5hbWUKKwlpZiAoRkFJTEVEIChwRG9jLT5nZXRfRnVsbE5hbWUgKCZGaWxlTmFtZSkpKQorCQlyZXR1cm4gU19PSzsKKworCS8vIEdldCBhIHNlbGVjdGlvbiBvYmplY3QgZGlzcGF0Y2ggcG9pbnRlcgorCWlmIChTVUNDRUVERUQgKHBEb2MtPmdldF9TZWxlY3Rpb24gKCZwRGlzcFNlbCkpKQorCXsKKwkJLy8gR2V0IHRoZSBzZWxlY3Rpb24gb2JqZWN0CisJCUNDb21RSVB0ciA8IElUZXh0U2VsZWN0aW9uLCAmSUlEX0lUZXh0U2VsZWN0aW9uID4gcFNlbCAocERpc3BTZWwpOworCisJCWlmIChwU2VsKQorCQkJLy8gR2V0IHRoZSBzZWxlY3Rpb24gbGluZSBudW1iZXIKKwkJCXBTZWwtPmdldF9DdXJyZW50TGluZSAoJkxpbmVOcik7CisJfQorCisJLy8gT3BlbiB0aGUgZmlsZSBpbiBWaW0KKwlWaW1PcGVuRmlsZSAoRmlsZU5hbWUsIExpbmVOcik7CisKKwlTeXNGcmVlU3RyaW5nIChGaWxlTmFtZSk7CisJcmV0dXJuIFNfT0s7Cit9CisKKworLy8KKy8vIEhlcmUgd2UgZG8gdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGFuZCBjb21tdW5pY2F0aW9uIHdpdGggVmltCisvLworCisvLyBTZXQgdGhlIGVuYWJsZSBzdGF0ZSBhbmQgc2F2ZSB0byByZWdpc3RyeQorLy8KK3N0YXRpYyB2b2lkIFZpbVNldEVuYWJsZVN0YXRlIChCT09MIGJFbmFibGVTdGF0ZSkKK3sKKwlnX2JFbmFibGVWaW0gPSBiRW5hYmxlU3RhdGU7CisJSEtFWSBoQXBwS2V5ID0gR2V0QXBwS2V5ICgiVmltIik7CisJaWYgKGhBcHBLZXkpCisJeworCQlIS0VZIGhTZWN0aW9uS2V5ID0gR2V0U2VjdGlvbktleSAoaEFwcEtleSwgIlZpc1ZpbSIpOworCQlpZiAoaFNlY3Rpb25LZXkpCisJCQlXcml0ZVJlZ2lzdHJ5SW50IChoU2VjdGlvbktleSwgIkVuYWJsZVZpbSIsIGdfYkVuYWJsZVZpbSk7CisJCVJlZ0Nsb3NlS2V5IChoQXBwS2V5KTsKKwl9Cit9CisKKy8vIE9wZW4gdGhlIGZpbGUgJ0ZpbGVOYW1lJyBpbiBWaW0gYW5kIGdvdG8gbGluZSAnTGluZU5yJworLy8gJ0ZpbGVOYW1lJyBpcyBleHBlY3RlZCB0byBjb250YWluIGFuIGFic29sdXRlIERPUyBwYXRoIGluY2x1ZGluZyB0aGUgZHJpdmUKKy8vIGxldHRlci4KKy8vICdMaW5lTnInIG11c3QgY29udGFpbiBhIHZhbGlkIGxpbmUgbnVtYmVyIG9yIDAsIGUuIGcuIGZvciBhIG5ldyBmaWxlCisvLworc3RhdGljIEJPT0wgVmltT3BlbkZpbGUgKEJTVFImIEZpbGVOYW1lLCBsb25nIExpbmVOcikKK3sKKworCS8vIE9MRSBhdXRvbWF0aW9uIG9iamVjdCBmb3IgY29tLiB3aXRoIFZpbQorCS8vIFdoZW4gdGhlIG9iamVjdCBnb2VzIG91dCBvZiBzY29wZSwgaXQncyBkZXNjdHJ1Y3RvciBkZXN0cm95cyB0aGUgT0xFIGNvbm5lY3Rpb247CisJLy8gVGhpcyBpcyBpbW9ydGFudCB0byBhdm9pZCBibG9ja2luZyB0aGUgb2JqZWN0CisJLy8gKGluIHRoaXMgbWVtb3J5IGNvcnJ1cHRpb24gd291bGQgYmUgbGlrZWx5IHdoZW4gdGVybWluYXRpbmcgVmltCisJLy8gd2hpbGUgc3RpbGwgcnVubmluZyBEZXZTdHVkaW8pLgorCS8vIFNvIGtlZXAgdGhpcyBvYmplY3QgbG9jYWwhCisJQ09sZUF1dG9tYXRpb25Db250cm9sIFZpbU9sZTsKKworCS8vIDpjZCBEOi9TcmMyL1Zpc1ZpbS8KKwkvLworCS8vIEdldCBhIGRpc3BhdGNoIGlkIGZvciB0aGUgU2VuZEtleXMgbWV0aG9kIG9mIFZpbTsKKwkvLyBlbmFibGVzIGNvbm5lY3Rpb24gdG8gVmltIGlmIG5lY2Vzc2FyeQorCURJU1BJRCBEaXNwYXRjaElkOworCURpc3BhdGNoSWQgPSBWaW1HZXREaXNwYXRjaElkIChWaW1PbGUsICJTZW5kS2V5cyIpOworCWlmICghIERpc3BhdGNoSWQpCisJCS8vIE9MRSBlcnJvciwgY2FuJ3Qgb2J0YWluIGRpc3BhdGNoIGlkCisJCWdvdG8gT2xlRXJyb3I7CisKKwlPTEVDSEFSIEJ1ZltNQVhfT0xFX1NUUl07CisJY2hhciBGaWxlTmFtZVRtcFtNQVhfT0xFX1NUUl07CisJY2hhciBWaW1DbWRbTUFYX09MRV9TVFJdOworCWNoYXIgKnMsICpwOworCisJLy8gUHJlcGVuZCBDVFJMLVwgQ1RSTC1OIHRvIGV4aXQgaW5zZXJ0IG1vZGUKKwlWaW1DbWRbMF0gPSAweDFjOworCVZpbUNtZFsxXSA9IDB4MGU7CisJVmltQ21kWzJdID0gMDsKKworI2lmZGVmIFNJTkdMRV9XSU5ET1cKKwkvLyBVcGRhdGUgdGhlIGN1cnJlbnQgZmlsZSBpbiBWaW0gaWYgaXQgaGFzIGJlZW4gbW9kaWZpZWQuCisJLy8gRGlzYWJsZWQsIGJlY2F1c2UgaXQgY291bGQgd3JpdGUgdGhlIGZpbGUgd2hlbiB5b3UgZG9uJ3Qgd2FudCB0by4KKwlzcHJpbnRmIChWaW1DbWQgKyAyLCAiOnVwXG4iKTsKKyNlbmRpZgorCWlmICghIFZpbU9sZS5NZXRob2QgKERpc3BhdGNoSWQsICJzIiwgVE9fT0xFX1NUUl9CVUYgKFZpbUNtZCwgQnVmKSkpCisJCWdvdG8gT2xlRXJyb3I7CisKKwkvLyBDaGFuZ2UgVmltIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHdoZXJlIHRoZSBmaWxlIGlzIGlmIGRlc2lyZWQKKwlpZiAoZ19DaGFuZ2VEaXIgIT0gQ0RfTk9ORSkKKwkJVmltQ2hhbmdlRGlyIChWaW1PbGUsIERpc3BhdGNoSWQsIEZpbGVOYW1lKTsKKworCS8vIE1ha2UgVmltIG9wZW4gdGhlIGZpbGUuCisJLy8gSW4gdGhlIGZpbGVuYW1lIGNvbnZlcnQgYWxsIFwgdG8gLywgcHV0IGEgXCBiZWZvcmUgYSBzcGFjZS4KKwlzcHJpbnRmKFZpbUNtZCwgIjpkcm9wICIpOworCXNwcmludGYoRmlsZU5hbWVUbXAsICIlUyIsIChjaGFyICopRmlsZU5hbWUpOworCXMgPSBWaW1DbWQgKyA2OworCWZvciAocCA9IEZpbGVOYW1lVG1wOyAqcCAhPSAnXDAnICYmIHMgPCBGaWxlTmFtZVRtcCArIE1BWF9PTEVfU1RSIC0gNDsKKwkJCQkJCQkJCSAgKytwKQorCQlpZiAoKnAgPT0gJ1xcJykKKwkJCSpzKysgPSAnLyc7CisJCWVsc2UKKwkJeworCQkJaWYgKCpwID09ICcgJykKKwkJCQkqcysrID0gJ1xcJzsKKwkJCSpzKysgPSAqcDsKKwkJfQorCSpzKysgPSAnXG4nOworCSpzID0gJ1wwJzsKKworCWlmICghIFZpbU9sZS5NZXRob2QgKERpc3BhdGNoSWQsICJzIiwgVE9fT0xFX1NUUl9CVUYgKFZpbUNtZCwgQnVmKSkpCisJCWdvdG8gT2xlRXJyb3I7CisKKwlpZiAoTGluZU5yID4gMCkKKwl7CisJCS8vIEdvdG8gbGluZQorCQlzcHJpbnRmIChWaW1DbWQsICI6JWRcbiIsIExpbmVOcik7CisJCWlmICghIFZpbU9sZS5NZXRob2QgKERpc3BhdGNoSWQsICJzIiwgVE9fT0xFX1NUUl9CVUYgKFZpbUNtZCwgQnVmKSkpCisJCQlnb3RvIE9sZUVycm9yOworCX0KKworCS8vIE1ha2UgVmltIGNvbWUgdG8gdGhlIGZvcmVncm91bmQKKwlpZiAoISBWaW1PbGUuTWV0aG9kICgiU2V0Rm9yZWdyb3VuZCIpKQorCQlWaW1PbGUuRXJyRGlhZyAoKTsKKworCS8vIFdlJ3JlIGRvbmUKKwlyZXR1cm4gdHJ1ZTsKKworICAgIE9sZUVycm9yOgorCS8vIFRoZXJlIHdhcyBhbiBPTEUgZXJyb3IKKwkvLyBDaGVjayBpZiBpdCdzIHRoZSAidW5rbm93biBjbGFzcyBzdHJpbmciIGVycm9yCisJVmltRXJyRGlhZyAoVmltT2xlKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8vIFJldHVybiB0aGUgZGlzcGF0Y2ggaWQgZm9yIHRoZSBWaW0gbWV0aG9kICdNZXRob2QnCisvLyBDcmVhdGUgdGhlIFZpbSBPTEUgb2JqZWN0IGlmIG5lY2Vzc2FyeQorLy8gUmV0dXJucyBhIHZhbGlkIGRpc3BhdGNoIGlkIG9yIG51bGwgb24gZXJyb3IKKy8vCitzdGF0aWMgRElTUElEIFZpbUdldERpc3BhdGNoSWQgKENPbGVBdXRvbWF0aW9uQ29udHJvbCYgVmltT2xlLCBjaGFyKiBNZXRob2QpCit7CisJLy8gSW5pdGlhbGl6ZSBWaW0gT0xFIGNvbm5lY3Rpb24gaWYgbm90IGFscmVhZHkgZG9uZQorCWlmICghIFZpbU9sZS5Jc0NyZWF0ZWQgKCkpCisJeworCQlpZiAoISBWaW1PbGUuQ3JlYXRlT2JqZWN0ICgiVmltLkFwcGxpY2F0aW9uIikpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvLyBHZXQgdGhlIGRpc3BhdGNoIGlkIGZvciB0aGUgU2VuZEtleXMgbWV0aG9kLgorCS8vIEJ5IGRvaW5nIHRoaXMsIHdlIGFyZSBjaGVja2luZyBpZiBWaW0gaXMgc3RpbGwgdGhlcmUuLi4KKwlESVNQSUQgRGlzcGF0Y2hJZCA9IFZpbU9sZS5HZXREaXNwYXRjaElkICgiU2VuZEtleXMiKTsKKwlpZiAoISBEaXNwYXRjaElkKQorCXsKKwkJLy8gV2UgY2FuJ3QgZ2V0IGEgZGlzcGF0Y2ggaWQuCisJCS8vIFRoaXMgbWVhbnMgdGhhdCBwcm9iYWJseSBWaW0gaGFzIGJlZW4gdGVybWluYXRlZC4KKwkJLy8gRG9uJ3QgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZSBoZXJlLCBpbnN0ZWFkCisJCS8vIGRlc3Ryb3kgdGhlIE9MRSBvYmplY3QgYW5kIHRyeSB0byBjb25uZWN0IG9uY2UgbW9yZQorCQkvLworCQkvLyBJbiBmYWN0LCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJlY2F1c2UgdGhlIE9MRSBhdXQuIG9iamVjdAorCQkvLyBzaG91bGQgbm90IGJlIGtlcHQgbG9uZyBlbm91Z2ggdG8gYWxsb3cgdGhlIHVzZXIgdG8gdGVybWluYXRlIFZpbQorCQkvLyB0byBhdm9pZCBtZW1vcnkgY29ycnVwdGlvbiAod2h5IHRoZSBoZWNrIGlzIHRoZXJlIG5vIHN5c3RlbSBnYXJiYWdlCisJCS8vIGNvbGxlY3Rpb24gZm9yIHRob3NlIGRhbW5lZCBPTEUgbWVtb3J5IGNodW5rcz8/PykuCisJCVZpbU9sZS5EZWxldGVPYmplY3QgKCk7CisJCWlmICghIFZpbU9sZS5DcmVhdGVPYmplY3QgKCJWaW0uQXBwbGljYXRpb24iKSkKKwkJCS8vIElmIHRoaXMgY3JlYXRlIGZhaWxzLCBpdCdzIHRpbWUgZm9yIGFuIGVycm9yIG1zZworCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKCEgKERpc3BhdGNoSWQgPSBWaW1PbGUuR2V0RGlzcGF0Y2hJZCAoIlNlbmRLZXlzIikpKQorCQkJLy8gVGhlcmUgaXMgc29tZXRoaW5nIHdyb25nLi4uCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gRGlzcGF0Y2hJZDsKK30KKworLy8gT3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgZm9yIGFuIE9MRSBlcnJvcgorLy8gQ2hlY2sgb24gdGhlIGNsYXNzc3RyaW5nIGVycm9yLCB3aGljaCBwcm9iYWJseSBtZWFucyBWaW0gd2Fzbid0IHJlZ2lzdGVyZWQuCisvLworc3RhdGljIHZvaWQgVmltRXJyRGlhZyAoQ09sZUF1dG9tYXRpb25Db250cm9sJiBWaW1PbGUpCit7CisJU0NPREUgc2MgPSBHZXRTY29kZSAoVmltT2xlLkdldFJlc3VsdCAoKSk7CisJaWYgKHNjID09IENPX0VfQ0xBU1NTVFJJTkcpCisJeworCQljaGFyIEJ1ZlsyNTZdOworCQlzcHJpbnRmIChCdWYsICJUaGVyZSBpcyBubyByZWdpc3RlcmVkIE9MRSBhdXRvbWF0aW9uIHNlcnZlciBuYW1lZCAiCisJCQkgIlwiVmltLkFwcGxpY2F0aW9uXCIuXG4iCisJCQkgIlVzZSB0aGUgT0xFLWVuYWJsZWQgdmVyc2lvbiBvZiBWaW0gd2l0aCBWaXNWaW0gYW5kICIKKwkJCSAibWFrZSBzdXJlIHRvIHJlZ2lzdGVyIFZpbSBieSBydW5uaW5nIFwidmltIC1yZWdpc3RlclwiLiIpOworCQlNZXNzYWdlQm94IChOVUxMLCBCdWYsICJPTEUgRXJyb3IiLCBNQl9PSyk7CisJfQorCWVsc2UKKwkJVmltT2xlLkVyckRpYWcgKCk7Cit9CisKKy8vIENoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIGRpcmVjdG9yeSB0aGUgZmlsZSAnRmlsZU5hbWUnIGlzIGluIG9yIGl0J3MgcGFyZW50CisvLyBkaXJlY3RvcnkgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5nIG9mIHRoZSBnbG9iYWwgJ2dfQ2hhbmdlRGlyJzoKKy8vICdGaWxlTmFtZScgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhbiBhYnNvbHV0ZSBET1MgcGF0aCBpbmNsdWRpbmcgdGhlIGRyaXZlCisvLyBsZXR0ZXIuCisvLwlDRF9OT05FCisvLwlDRF9TT1VSQ0VfUEFUSAorLy8JQ0RfU09VUkNFX1BBUkVOVAorLy8KK3N0YXRpYyB2b2lkIFZpbUNoYW5nZURpciAoQ09sZUF1dG9tYXRpb25Db250cm9sJiBWaW1PbGUsIERJU1BJRCBEaXNwYXRjaElkLCBCU1RSJiBGaWxlTmFtZSkKK3sKKwkvLyBEbyBhIDpjZCBmaXJzdAorCisJLy8gR2V0IHRoZSBwYXRoIG5hbWUgb2YgdGhlIGZpbGUgKCJkaXIvIikKKwlDU3RyaW5nIFN0ckZpbGVOYW1lID0gRmlsZU5hbWU7CisJY2hhciBEcml2ZVtfTUFYX0RSSVZFXTsKKwljaGFyIERpcltfTUFYX0RJUl07CisJY2hhciBEaXJVbml4W19NQVhfRElSICogMl07CisJY2hhciAqcywgKnQ7CisKKwlfc3BsaXRwYXRoIChTdHJGaWxlTmFtZSwgRHJpdmUsIERpciwgTlVMTCwgTlVMTCk7CisKKwkvLyBDb252ZXJ0IHRvIFVuaXggcGF0aCBuYW1lIGZvcm1hdCwgZXNjYXBlIHNwYWNlcy4KKwl0ID0gRGlyVW5peDsKKwlmb3IgKHMgPSBEaXI7ICpzOyArK3MpCisJCWlmICgqcyA9PSAnXFwnKQorCQkJKnQrKyA9ICcvJzsKKwkJZWxzZQorCQl7CisJCQlpZiAoKnMgPT0gJyAnKQorCQkJCSp0KysgPSAnXFwnOworCQkJKnQrKyA9ICpzOworCQl9CisJKnQgPSAnXDAnOworCisKKwkvLyBDb25zdHJ1Y3QgdGhlIGNkIGNvbW1hbmQ7IGFwcGVuZCAvLi4gaWYgY2QgdG8gcGFyZW50CisJLy8gZGlyZWN0b3J5IGFuZCBub3QgaW4gcm9vdCBkaXJlY3RvcnkKKwlPTEVDSEFSIEJ1ZltNQVhfT0xFX1NUUl07CisJY2hhciBWaW1DbWRbTUFYX09MRV9TVFJdOworCisJc3ByaW50ZiAoVmltQ21kLCAiOmNkICVzJXMlc1xuIiwgRHJpdmUsIERpclVuaXgsCisJCSBnX0NoYW5nZURpciA9PSBDRF9TT1VSQ0VfUEFSRU5UICYmIERpclVuaXhbMV0gPyAiLi4iIDogIiIpOworCVZpbU9sZS5NZXRob2QgKERpc3BhdGNoSWQsICJzIiwgVE9fT0xFX1NUUl9CVUYgKFZpbUNtZCwgQnVmKSk7Cit9CisKKyNpZmRlZiBfREVCVUcKKy8vIFByaW50IG91dCBhIGRlYnVnIG1lc3NhZ2UKKy8vCitzdGF0aWMgdm9pZCBEZWJ1Z01zZyAoY2hhciogTXNnLCBjaGFyKiBBcmcpCit7CisJY2hhciBCdWZbNDAwXTsKKwlzcHJpbnRmIChCdWYsIE1zZywgQXJnKTsKKwlBZnhNZXNzYWdlQm94IChCdWYpOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL3NyYy9WaXNWaW0vQ29tbWFuZHMuaCBiL3NyYy9WaXNWaW0vQ29tbWFuZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDdjODFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9Db21tYW5kcy5oCkBAIC0wLDAgKzEsMTI3IEBACisvLyBDb21tYW5kcy5oIDogaGVhZGVyIGZpbGUKKy8vCisKKyNpZiAhZGVmaW5lZChBRlhfQ09NTUFORFNfSF9fQUM3MjY3MTdfMjk3N18xMUQxX0IyRjNfMDA2MDA4MDQwNzgwX19JTkNMVURFRF8pCisjZGVmaW5lIEFGWF9DT01NQU5EU19IX19BQzcyNjcxN18yOTc3XzExRDFfQjJGM18wMDYwMDgwNDA3ODBfX0lOQ0xVREVEXworCisjaW5jbHVkZSAidnN2dHlwZXMuaCIKKworY2xhc3MgQ0NvbW1hbmRzIDoKKwlwdWJsaWMgICBDQ29tRHVhbEltcGwgPCBJQ29tbWFuZHMsCisJCQkJICZJSURfSUNvbW1hbmRzLAorCQkJCSAmTElCSURfVmlzVmltID4sCisJcHVibGljICAgQ0NvbU9iamVjdFJvb3QsCisJcHVibGljICAgQ0NvbUNvQ2xhc3MgPCBDQ29tbWFuZHMsCisJCQkJICZDTFNJRF9Db21tYW5kcyA+Cit7CisgICAgcHJvdGVjdGVkOgorCUlBcHBsaWNhdGlvbiAqIG1fcEFwcGxpY2F0aW9uOworCisgICAgcHVibGljOgorCUNDb21tYW5kcyAoKTsKKwl+Q0NvbW1hbmRzICgpOworCXZvaWQgU2V0QXBwbGljYXRpb25PYmplY3QgKElBcHBsaWNhdGlvbiAqIG1fcEFwcGxpY2F0aW9uKTsKKwlJQXBwbGljYXRpb24gKkdldEFwcGxpY2F0aW9uT2JqZWN0ICgpCisJeworCQlyZXR1cm4gbV9wQXBwbGljYXRpb247CisJfQorCXZvaWQgVW5hZHZpc2VGcm9tRXZlbnRzICgpOworCisJQkVHSU5fQ09NX01BUCAoQ0NvbW1hbmRzKQorCUNPTV9JTlRFUkZBQ0VfRU5UUlkgKElEaXNwYXRjaCkKKwlDT01fSU5URVJGQUNFX0VOVFJZIChJQ29tbWFuZHMpCisJRU5EX0NPTV9NQVAgKCkKKwlERUNMQVJFX05PVF9BR0dSRUdBVEFCTEUgKENDb21tYW5kcykKKworICAgIHByb3RlY3RlZDoKKwkvLyBUaGlzIGNsYXNzIHRlbXBsYXRlIGlzIHVzZWQgYXMgdGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBBcHBsaWNhdGlvbgorCS8vIGV2ZW50IGhhbmRsZXIgb2JqZWN0IGFuZCB0aGUgRGVidWdnZXIgZXZlbnQgaGFuZGxlciBvYmplY3QsCisJLy8gd2hpY2ggYXJlIGRlY2xhcmVkIGJlbG93LgorCXRlbXBsYXRlIDwgY2xhc3MgSUV2ZW50cywKKwkJY29uc3QgSUlEICogcGlpZEV2ZW50cywKKwkJY29uc3QgR1VJRCAqIHBsaWJpZCwKKwkJY2xhc3MgWEV2ZW50cywKKwkJY29uc3QgQ0xTSUQgKiBwQ2xzaWRFdmVudHMgPgorCQljbGFzcyBYRXZlbnRIYW5kbGVyIDoKKwkJcHVibGljCSAgICAgIENDb21EdWFsSW1wbCA8IElFdmVudHMsCisJCQkgICAgICBwaWlkRXZlbnRzLAorCQkJICAgICAgcGxpYmlkID4sCisJCXB1YmxpYwkgICAgICBDQ29tT2JqZWN0Um9vdCwKKwkJcHVibGljCSAgICAgIENDb21Db0NsYXNzIDwgWEV2ZW50cywKKwkJCSAgICAgIHBDbHNpZEV2ZW50cyA+CisJeworCSAgICBwdWJsaWM6CisJCUJFR0lOX0NPTV9NQVAgKFhFdmVudHMpCisJCUNPTV9JTlRFUkZBQ0VfRU5UUlkgKElEaXNwYXRjaCkKKwkJQ09NX0lOVEVSRkFDRV9FTlRSWV9JSUQgKCpwaWlkRXZlbnRzLCBJRXZlbnRzKQorCQlFTkRfQ09NX01BUCAoKQorCQlERUNMQVJFX05PVF9BR0dSRUdBVEFCTEUgKFhFdmVudHMpCisJCXZvaWQgQ29ubmVjdCAoSVVua25vd24gKiBwVW5rKQorCQl7CisJCQlWRVJJRlkgKFNVQ0NFRURFRCAoQXRsQWR2aXNlIChwVW5rLCB0aGlzLCAqcGlpZEV2ZW50cywKKwkJCQkJCSAgICAgICZtX2R3QWR2aXNlKSkpOworCQl9CisJCXZvaWQgRGlzY29ubmVjdCAoSVVua25vd24gKiBwVW5rKQorCQl7CisJCQlBdGxVbmFkdmlzZSAocFVuaywgKnBpaWRFdmVudHMsIG1fZHdBZHZpc2UpOworCQl9CisKKwkJQ0NvbW1hbmRzICptX3BDb21tYW5kczsKKworCSAgICBwcm90ZWN0ZWQ6CisJCURXT1JEIG1fZHdBZHZpc2U7CisJfTsKKworCS8vIFRoaXMgb2JqZWN0IGhhbmRsZXMgZXZlbnRzIGZpcmVkIGJ5IHRoZSBBcHBsaWNhdGlvbiBvYmplY3QKKwljbGFzcyBYQXBwbGljYXRpb25FdmVudHMgOiBwdWJsaWMgWEV2ZW50SGFuZGxlciA8IElBcHBsaWNhdGlvbkV2ZW50cywKKwkJCSZJSURfSUFwcGxpY2F0aW9uRXZlbnRzLAorCQkJJkxJQklEX1Zpc1ZpbSwKKwkJCVhBcHBsaWNhdGlvbkV2ZW50cywKKwkJCSZDTFNJRF9BcHBsaWNhdGlvbkV2ZW50cyA+CisJeworCSAgICBwdWJsaWM6CisJCS8vIElBcHBsaWNhdGlvbkV2ZW50cyBtZXRob2RzCisJCVNURE1FVEhPRCAoQmVmb3JlQnVpbGRTdGFydCkgKFRISVMpOworCQlTVERNRVRIT0QgKEJ1aWxkRmluaXNoKSAoVEhJU18gbG9uZyBuTnVtRXJyb3JzLCBsb25nIG5OdW1XYXJuaW5ncyk7CisJCVNURE1FVEhPRCAoQmVmb3JlQXBwbGljYXRpb25TaHV0RG93bikgKFRISVMpOworCQlTVERNRVRIT0QgKERvY3VtZW50T3BlbikgKFRISVNfIElEaXNwYXRjaCAqIHRoZURvY3VtZW50KTsKKwkJU1RETUVUSE9EIChCZWZvcmVEb2N1bWVudENsb3NlKSAoVEhJU18gSURpc3BhdGNoICogdGhlRG9jdW1lbnQpOworCQlTVERNRVRIT0QgKERvY3VtZW50U2F2ZSkgKFRISVNfIElEaXNwYXRjaCAqIHRoZURvY3VtZW50KTsKKwkJU1RETUVUSE9EIChOZXdEb2N1bWVudCkgKFRISVNfIElEaXNwYXRjaCAqIHRoZURvY3VtZW50KTsKKwkJU1RETUVUSE9EIChXaW5kb3dBY3RpdmF0ZSkgKFRISVNfIElEaXNwYXRjaCAqIHRoZVdpbmRvdyk7CisJCVNURE1FVEhPRCAoV2luZG93RGVhY3RpdmF0ZSkgKFRISVNfIElEaXNwYXRjaCAqIHRoZVdpbmRvdyk7CisJCVNURE1FVEhPRCAoV29ya3NwYWNlT3BlbikgKFRISVMpOworCQlTVERNRVRIT0QgKFdvcmtzcGFjZUNsb3NlKSAoVEhJUyk7CisJCVNURE1FVEhPRCAoTmV3V29ya3NwYWNlKSAoVEhJUyk7CisJfTsKKwl0eXBlZGVmIENDb21PYmplY3QgPCBYQXBwbGljYXRpb25FdmVudHMgPiBYQXBwbGljYXRpb25FdmVudHNPYmo7CisJWEFwcGxpY2F0aW9uRXZlbnRzT2JqICptX3BBcHBsaWNhdGlvbkV2ZW50c09iajsKKworCS8vIFRoaXMgb2JqZWN0IGhhbmRsZXMgZXZlbnRzIGZpcmVkIGJ5IHRoZSBBcHBsaWNhdGlvbiBvYmplY3QKKwljbGFzcyBYRGVidWdnZXJFdmVudHMgOiBwdWJsaWMgWEV2ZW50SGFuZGxlciA8IElEZWJ1Z2dlckV2ZW50cywKKwkJCSZJSURfSURlYnVnZ2VyRXZlbnRzLAorCQkJJkxJQklEX1Zpc1ZpbSwKKwkJCVhEZWJ1Z2dlckV2ZW50cywKKwkJCSZDTFNJRF9EZWJ1Z2dlckV2ZW50cyA+CisJeworCSAgICBwdWJsaWM6CisJCS8vIElEZWJ1Z2dlckV2ZW50cyBtZXRob2QKKwkJU1RETUVUSE9EIChCcmVha3BvaW50SGl0KSAoVEhJU18gSURpc3BhdGNoICogcEJyZWFrcG9pbnQpOworCX07CisJdHlwZWRlZiBDQ29tT2JqZWN0IDwgWERlYnVnZ2VyRXZlbnRzID4gWERlYnVnZ2VyRXZlbnRzT2JqOworCVhEZWJ1Z2dlckV2ZW50c09iaiAqbV9wRGVidWdnZXJFdmVudHNPYmo7CisKKyAgICBwdWJsaWM6CisJLy8gSUNvbW1hbmRzIG1ldGhvZHMKKwlTVERNRVRIT0QgKFZpc1ZpbURpYWxvZykgKFRISVMpOworCVNURE1FVEhPRCAoVmlzVmltRW5hYmxlKSAoVEhJUyk7CisJU1RETUVUSE9EIChWaXNWaW1EaXNhYmxlKSAoVEhJUyk7CisJU1RETUVUSE9EIChWaXNWaW1Ub2dnbGUpIChUSElTKTsKKwlTVERNRVRIT0QgKFZpc1ZpbUxvYWQpIChUSElTKTsKK307CisKK3R5cGVkZWYgQ0NvbU9iamVjdCA8IENDb21tYW5kcyA+IENDb21tYW5kc09iajsKKworLy97e0FGWF9JTlNFUlRfTE9DQVRJT059fQorCisjZW5kaWYgLy8gIWRlZmluZWQoQUZYX0NPTU1BTkRTX0hfX0FDNzI2NzE3XzI5NzdfMTFEMV9CMkYzXzAwNjAwODA0MDc4MF9fSU5DTFVERUQpCmRpZmYgLS1naXQgYS9zcmMvVmlzVmltL0RTQWRkSW4uY3BwIGIvc3JjL1Zpc1ZpbS9EU0FkZEluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTcyNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9EU0FkZEluLmNwcApAQCAtMCwwICsxLDE2MCBAQAorI2luY2x1ZGUgInN0ZGFmeC5oIgorI2luY2x1ZGUgIlZpc1ZpbS5oIgorI2luY2x1ZGUgIkRTQWRkSW4uaCIKKyNpbmNsdWRlICJDb21tYW5kcy5oIgorCisjaWZkZWYgX0RFQlVHCisjZGVmaW5lIG5ldyBERUJVR19ORVcKKyN1bmRlZiBUSElTX0ZJTEUKK3N0YXRpYyBjaGFyIFRISVNfRklMRVtdID0gX19GSUxFX187CisKKyNlbmRpZgorCisvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGZpcnN0IGxvYWRzIHRoZSBhZGQtaW4sIGFuZCBvbiBzdGFydC11cAorLy8gIG9mIGVhY2ggc3Vic2VxdWVudCBEZXZlbG9wZXIgU3R1ZGlvIHNlc3Npb24KK1NURE1FVEhPRElNUCBDRFNBZGRJbjo6T25Db25uZWN0aW9uIChJQXBwbGljYXRpb24gKiBwQXBwLCBWQVJJQU5UX0JPT0wgYkZpcnN0VGltZSwKKwkJCQkgICAgIGxvbmcgZHdDb29raWUsIFZBUklBTlRfQk9PTCAqIE9uQ29ubmVjdGlvbikKK3sKKwlBRlhfTUFOQUdFX1NUQVRFIChBZnhHZXRTdGF0aWNNb2R1bGVTdGF0ZSAoKSk7CisJKk9uQ29ubmVjdGlvbiA9IFZBUklBTlRfRkFMU0U7CisKKwkvLyBTdG9yZSBpbmZvIHBhc3NlZCB0byB1cworCUlBcHBsaWNhdGlvbiAqcEFwcGxpY2F0aW9uID0gTlVMTDsKKwlIUkVTVUxUIGhyOworCisJaHIgPSBwQXBwLT5RdWVyeUludGVyZmFjZSAoSUlEX0lBcHBsaWNhdGlvbiwgKHZvaWQgKiopICZwQXBwbGljYXRpb24pOworCWlmIChGQUlMRUQgKGhyKSkKKwl7CisJCVJlcG9ydExhc3RFcnJvciAoaHIpOworCQlyZXR1cm4gRV9VTkVYUEVDVEVEOworCX0KKwlpZiAocEFwcGxpY2F0aW9uID09IE5VTEwpCisJeworCQlSZXBvcnRJbnRlcm5hbEVycm9yICgiSUFwcGxpY2F0aW9uOjpRdWVyeUludGVyZmFjZSIpOworCQlyZXR1cm4gRV9VTkVYUEVDVEVEOworCX0KKworCW1fZHdDb29raWUgPSBkd0Nvb2tpZTsKKworCS8vIENyZWF0ZSBjb21tYW5kIGRpc3BhdGNoLCBzZW5kIGluZm8gYmFjayB0byBEZXZTdHVkaW8KKwlDQ29tbWFuZHNPYmo6OkNyZWF0ZUluc3RhbmNlICgmbV9wQ29tbWFuZHMpOworCWlmICghIG1fcENvbW1hbmRzKQorCXsKKwkJUmVwb3J0SW50ZXJuYWxFcnJvciAoIkNDb21tYW5kc09iajo6Q3JlYXRlSW5zdGFuY2UiKTsKKwkJcmV0dXJuIEVfVU5FWFBFQ1RFRDsKKwl9CisJbV9wQ29tbWFuZHMtPkFkZFJlZiAoKTsKKworCS8vIFRoZSBRdWVyeUludGVyZmFjZSBhYm92ZSBBZGRSZWYnZCB0aGUgQXBwbGljYXRpb24gb2JqZWN0LiAgSXQgd2lsbAorCS8vIGJlIFJlbGVhc2UnZCBpbiBDQ29tbWFuZCdzIGRlc3RydWN0b3IuCisJbV9wQ29tbWFuZHMtPlNldEFwcGxpY2F0aW9uT2JqZWN0IChwQXBwbGljYXRpb24pOworCisJaHIgPSBwQXBwbGljYXRpb24tPlNldEFkZEluSW5mbyAoKGxvbmcpIEFmeEdldEluc3RhbmNlSGFuZGxlICgpLAorCQkoTFBESVNQQVRDSCkgbV9wQ29tbWFuZHMsIElEUl9UT09MQkFSX01FRElVTSwgSURSX1RPT0xCQVJfTEFSR0UsCisJCW1fZHdDb29raWUpOworCWlmIChGQUlMRUQgKGhyKSkKKwl7CisJCVJlcG9ydExhc3RFcnJvciAoaHIpOworCQlyZXR1cm4gRV9VTkVYUEVDVEVEOworCX0KKworCS8vIEluZm9ybSBEZXZTdHVkaW8gb2YgdGhlIGNvbW1hbmRzIHdlIGltcGxlbWVudAorCWlmICghIEFkZENvbW1hbmQgKHBBcHBsaWNhdGlvbiwgIlZpc1ZpbURpYWxvZyIsICJWaXNWaW1EaWFsb2dDbWQiLAorCQkJICBJRFNfQ01EX0RJQUxPRywgMCwgYkZpcnN0VGltZSkpCisJCXJldHVybiBFX1VORVhQRUNURUQ7CisJaWYgKCEgQWRkQ29tbWFuZCAocEFwcGxpY2F0aW9uLCAiVmlzVmltRW5hYmxlIiwgIlZpc1ZpbUVuYWJsZUNtZCIsCisJCQkgIElEU19DTURfRU5BQkxFLCAxLCBiRmlyc3RUaW1lKSkKKwkJcmV0dXJuIEVfVU5FWFBFQ1RFRDsKKwlpZiAoISBBZGRDb21tYW5kIChwQXBwbGljYXRpb24sICJWaXNWaW1EaXNhYmxlIiwgIlZpc1ZpbURpc2FibGVDbWQiLAorCQkJICBJRFNfQ01EX0RJU0FCTEUsIDIsIGJGaXJzdFRpbWUpKQorCQlyZXR1cm4gRV9VTkVYUEVDVEVEOworCWlmICghIEFkZENvbW1hbmQgKHBBcHBsaWNhdGlvbiwgIlZpc1ZpbVRvZ2dsZSIsICJWaXNWaW1Ub2dnbGVDbWQiLAorCQkJICBJRFNfQ01EX1RPR0dMRSwgMywgYkZpcnN0VGltZSkpCisJCXJldHVybiBFX1VORVhQRUNURUQ7CisJaWYgKCEgQWRkQ29tbWFuZCAocEFwcGxpY2F0aW9uLCAiVmlzVmltTG9hZCIsICJWaXNWaW1Mb2FkQ21kIiwKKwkJCSAgSURTX0NNRF9MT0FELCA0LCBiRmlyc3RUaW1lKSkKKwkJcmV0dXJuIEVfVU5FWFBFQ1RFRDsKKworCSpPbkNvbm5lY3Rpb24gPSBWQVJJQU5UX1RSVUU7CisJcmV0dXJuIFNfT0s7Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVkIG9uIHNodXQtZG93biwgYW5kIGFsc28gd2hlbiB0aGUgdXNlciB1bmxvYWRzIHRoZSBhZGQtaW4KK1NURE1FVEhPRElNUCBDRFNBZGRJbjo6T25EaXNjb25uZWN0aW9uIChWQVJJQU5UX0JPT0wgYkxhc3RUaW1lKQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKworCW1fcENvbW1hbmRzLT5VbmFkdmlzZUZyb21FdmVudHMgKCk7CisJbV9wQ29tbWFuZHMtPlJlbGVhc2UgKCk7CisJbV9wQ29tbWFuZHMgPSBOVUxMOworCisJcmV0dXJuIFNfT0s7Cit9CisKKy8vIEFkZCBhIGNvbW1hbmQgdG8gRGV2U3R1ZGlvCisvLyBDcmVhdGVzIGEgdG9vbGJhciBidXR0b24gZm9yIHRoZSBjb21tYW5kIGFsc28uCisvLyAnTWV0aG9kTmFtZScgaXMgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZGUgc3BlY2lmaWVkIGluIHRoZSAub2RsIGZpbGUKKy8vICdTdHJSZXNJZCcgdGhlIHJlc291cmNlIGlkIG9mIHRoZSBkZXNjcmlwdGl2ZSBzdHJpbmcKKy8vICdHbHlwaEluZGV4JyB0aGUgaW1hZ2UgaW5kZXggaW50byB0aGUgY29tbWFuZCBidXR0b25zIGJpdG1hcAorLy8gUmV0dXJuIHRydWUgb24gc3VjY2VzcworLy8KK2Jvb2wgQ0RTQWRkSW46OkFkZENvbW1hbmQgKElBcHBsaWNhdGlvbiogcEFwcCwgY2hhciogTWV0aG9kTmFtZSwgY2hhciogQ21kTmFtZSwKKwkJCSAgIFVJTlQgU3RyUmVzSWQsIFVJTlQgR2x5cGhJbmRleCwgVkFSSUFOVF9CT09MIGJGaXJzdFRpbWUpCit7CisJQ1N0cmluZyBDbWRTdHJpbmc7CisJQ1N0cmluZyBDbWRUZXh0OworCisJQ21kVGV4dC5Mb2FkU3RyaW5nIChTdHJSZXNJZCk7CisJQ21kU3RyaW5nID0gQ21kTmFtZTsKKwlDbWRTdHJpbmcgKz0gQ21kVGV4dDsKKworCUNDb21CU1RSIGJzekNtZFN0cmluZyAoQ21kU3RyaW5nKTsKKwlDQ29tQlNUUiBic3pNZXRob2QgKE1ldGhvZE5hbWUpOworCUNDb21CU1RSIGJzekNtZE5hbWUgKENtZE5hbWUpOworCisJLy8gKHNlZSBzdGRhZnguaCBmb3IgdGhlIGRlZmluaXRpb24gb2YgVkVSSUZZX09LKQorCisJVkFSSUFOVF9CT09MIGJSZXQ7CisJVkVSSUZZX09LIChwQXBwLT5BZGRDb21tYW5kIChic3pDbWRTdHJpbmcsIGJzek1ldGhvZCwgR2x5cGhJbmRleCwKKwkJCQkgICAgIG1fZHdDb29raWUsICZiUmV0KSk7CisJaWYgKGJSZXQgPT0gVkFSSUFOVF9GQUxTRSkKKwl7CisJCS8vIEFkZENvbW1hbmQgZmFpbGVkIGJlY2F1c2UgYSBjb21tYW5kIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLgorCQlSZXBvcnRJbnRlcm5hbEVycm9yICgiSUFwcGxpY2F0aW9uOjpBZGRDb21tYW5kIik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvLyBBZGQgdG9vbGJhciBidXR0b25zIG9ubHkgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgYWRkLWluCisJLy8gaXMgYmVpbmcgbG9hZGVkLiAgVG9vbGJhciBidXR0b25zIGFyZSBhdXRvbWF0aWNhbGx5IHJlbWVtYmVyZWQKKwkvLyBieSBEZXZlbG9wZXIgU3R1ZGlvIGZyb20gc2Vzc2lvbiB0byBzZXNzaW9uLCBzbyB3ZSBzaG91bGQgb25seQorCS8vIGFkZCB0aGUgdG9vbGJhciBidXR0b25zIG9uY2UuCisJaWYgKGJGaXJzdFRpbWUgPT0gVkFSSUFOVF9UUlVFKQorCQlWRVJJRllfT0sgKHBBcHAtPkFkZENvbW1hbmRCYXJCdXR0b24gKGRzR2x5cGgsIGJzekNtZE5hbWUsIG1fZHdDb29raWUpKTsKKworCXJldHVybiBUUlVFOworfQorCit2b2lkIFJlcG9ydExhc3RFcnJvciAoSFJFU1VMVCBFcnIpCit7CisJY2hhciAqQnVmID0gTlVMTDsKKwljaGFyIE1zZ1s1MTJdOworCisJRm9ybWF0TWVzc2FnZSAoRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0gfCBGT1JNQVRfTUVTU0FHRV9BTExPQ0FURV9CVUZGRVIsCisJCSAgICAgICBOVUxMLCBFcnIsCisJCSAgICAgICBNQUtFTEFOR0lEIChMQU5HX05FVVRSQUwsIFNVQkxBTkdfREVGQVVMVCksCisJCSAgICAgICBCdWYsIDQwMCwgTlVMTCk7CisJc3ByaW50ZiAoTXNnLCAiVW5leHBlY3RlZCBlcnJvciAoRXJyb3IgY29kZTogJWx4KVxuJXMiLCBFcnIsIEJ1Zik7CisKKwk6Ok1lc3NhZ2VCb3ggKE5VTEwsIE1zZywgIlZpc1ZpbSIsIE1CX09LIHwgTUJfSUNPTlNUT1ApOworCWlmIChCdWYpCisJCUxvY2FsRnJlZSAoQnVmKTsKK30KKwordm9pZCBSZXBvcnRJbnRlcm5hbEVycm9yIChjaGFyKiBGY3QpCit7CisJY2hhciBNc2dbNTEyXTsKKworCXNwcmludGYgKE1zZywgIlVuZXhwZWN0ZWQgZXJyb3JcbiVzIGZhaWxlZCIsIEZjdCk7CisJOjpNZXNzYWdlQm94IChOVUxMLCBNc2csICJWaXNWaW0iLCBNQl9PSyB8IE1CX0lDT05TVE9QKTsKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL1Zpc1ZpbS9EU0FkZEluLmggYi9zcmMvVmlzVmltL0RTQWRkSW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjgyODcyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9EU0FkZEluLmgKQEAgLTAsMCArMSw1MyBAQAorLy8gRFNBZGRJbi5oIDogaGVhZGVyIGZpbGUKKy8vCisKKyNpZiAhZGVmaW5lZChBRlhfRFNBRERJTl9IX19BQzcyNjcxNV8yOTc3XzExRDFfQjJGM18wMDYwMDgwNDA3ODBfX0lOQ0xVREVEXykKKyNkZWZpbmUgQUZYX0RTQURESU5fSF9fQUM3MjY3MTVfMjk3N18xMUQxX0IyRjNfMDA2MDA4MDQwNzgwX19JTkNMVURFRF8KKworI2luY2x1ZGUgImNvbW1hbmRzLmgiCisKKy8vIHs0RjlFMDFDMC00MDZCLTExZDItODAwNi0wMDAwMUM0MDUwNzd9CitERUZJTkVfR1VJRCAoQ0xTSURfRFNBZGRJbiwKKwkweDRmOWUwMWMwLCAweDQwNmIsIDB4MTFkMiwgMHg4MCwgMHg2LCAweDAsIDB4MCwgMHgxYywgMHg0MCwgMHg1MCwgMHg3Nyk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDRFNBZGRJbgorCitjbGFzcyBDRFNBZGRJbiA6CisJcHVibGljICAgSURTQWRkSW4sCisJcHVibGljICAgQ0NvbU9iamVjdFJvb3QsCisJcHVibGljICAgQ0NvbUNvQ2xhc3MgPCBDRFNBZGRJbiwKKwkJICZDTFNJRF9EU0FkZEluID4KK3sKKyAgICBwdWJsaWM6CisJREVDTEFSRV9SRUdJU1RSWSAoQ0RTQWRkSW4sICJWaXNWaW0uRFNBZGRJbi4xIiwKKwkJCSAgIlZpc1ZpbSBEZXZlbG9wZXIgU3R1ZGlvIEFkZC1pbiIsIElEU19WSVNWSU1fTE9OR05BTUUsCisJCQkgIFRIUkVBREZMQUdTX0JPVEgpCisKKwlDRFNBZGRJbiAoKQorCXsKKwl9CisKKwlCRUdJTl9DT01fTUFQIChDRFNBZGRJbikKKwlDT01fSU5URVJGQUNFX0VOVFJZIChJRFNBZGRJbikKKwlFTkRfQ09NX01BUCAoKQorCURFQ0xBUkVfTk9UX0FHR1JFR0FUQUJMRSAoQ0RTQWRkSW4pCisKKwkvLyBJRFNBZGRJbnMKKyAgICBwdWJsaWM6CisJU1RETUVUSE9EIChPbkNvbm5lY3Rpb24pIChUSElTXyBJQXBwbGljYXRpb24gKiBwQXBwLCBWQVJJQU5UX0JPT0wgYkZpcnN0VGltZSwKKwkJCQkgIGxvbmcgZHdDb29raWUsIFZBUklBTlRfQk9PTCAqIE9uQ29ubmVjdGlvbik7CisJU1RETUVUSE9EIChPbkRpc2Nvbm5lY3Rpb24pIChUSElTXyBWQVJJQU5UX0JPT0wgYkxhc3RUaW1lKTsKKworICAgIHByb3RlY3RlZDoKKwlib29sIEFkZENvbW1hbmQgKElBcHBsaWNhdGlvbiogcEFwcCwgY2hhciogTWV0aG9kTmFtZSwgY2hhciogQ21kTmFtZSwKKwkJCSBVSU5UIFN0clJlc0lkLCBVSU5UIEdseXBoSW5kZXgsIFZBUklBTlRfQk9PTCBiRmlyc3RUaW1lKTsKKworICAgIHByb3RlY3RlZDoKKwlDQ29tbWFuZHNPYmogKiBtX3BDb21tYW5kczsKKwlEV09SRCBtX2R3Q29va2llOworfTsKKworLy97e0FGWF9JTlNFUlRfTE9DQVRJT059fQorCisjZW5kaWYgLy8gIWRlZmluZWQoQUZYX0RTQURESU5fSF9fQUM3MjY3MTVfMjk3N18xMUQxX0IyRjNfMDA2MDA4MDQwNzgwX19JTkNMVURFRCkKZGlmZiAtLWdpdCBhL3NyYy9WaXNWaW0vT2xlQXV0LmNwcCBiL3NyYy9WaXNWaW0vT2xlQXV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTAxYjFlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9PbGVBdXQuY3BwCkBAIC0wLDAgKzEsNzgxIEBACisvLworLy8gQ2xhc3MgZm9yIGNyZWF0aW5nIE9MRSBhdXRvbWF0aW9uIGNvbnRyb2xsZXJzLgorLy8KKy8vIENyZWF0ZU9iamVjdCgpIGNyZWF0ZXMgYW4gYXV0b21hdGlvbiBvYmplY3QKKy8vIEludm9rZSgpIHdpbGwgY2FsbCBhIHByb3BlcnR5IG9yIG1ldGhvZCBvZiB0aGUgYXV0b21hdGlvbiBvYmplY3QuCisvLyBHZXRQcm9wZXJ0eSgpIHJldHVybnMgYSBwcm9wZXJ0eQorLy8gU2V0UHJvcGVydHkoKSBjaGFuZ2VzIGEgcHJvcGVydHkKKy8vIE1ldGhvZCgpIGludm9rZXMgYSBtZXRob2QKKy8vCisvLyBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBWQiBjb2RlIHdpbGwgY29udHJvbCBNaWNyb3NvZnQgV29yZDoKKy8vCisvLyAgICBQcml2YXRlIFN1YiBGb3JtX0xvYWQoKQorLy8gICAgRGltIHdiIEFzIE9iamVjdAorLy8gICAgU2V0IHdiID0gQ3JlYXRlT2JqZWN0KCJXb3JkLkJhc2ljIikKKy8vICAgIHdiLkFwcFNob3cKKy8vICAgIHdiLkZpbGVOZXdEZWZhdWx0CisvLyAgICB3Yi5JbnNlcnQgIlRoaXMgaXMgYSB0ZXN0IgorLy8gICAgd2IuRmlsZVNhdmVBcyAiYzpcc2FtcGxlLmRvYykiCisvLyAgICBFbmQgU3ViCisvLworLy8gQSBDKysgYXV0b21hdGlvbiBjb250cm9sbGVyIHRoYXQgZG9lcyB0aGUgc2FtZSBjYW4gYmUgd3JpdHRlbiBhcyBmb2xsb3dzOgorLy8gdGhlIGhlbHBlciBmdW5jdGlvbnM6CisvLworLy8gICBWb2lkIEZvcm1Mb2FkICgpCisvLyAgIHsKKy8vICAgICAgIENPbGVBdXRvbWF0aW9uQ29udHJvbCBBdXQ7CisvLyAgICAgICBBdXQuQ3JlYXRlT2JqZWN0KCJXb3JkLkJhc2ljIik7CisvLyAgICAgICBBdXQuTWV0aG9kICgiQXBwU2hvdyIpOworLy8gICAgICAgQXV0Lk1ldGhvZCAoIkZpbGVOZXdEZWZhdWx0Iik7CisvLyAgICAgICBBdXQuTWV0aG9kICgiSW5zZXJ0IiwgInMiLCAoTFBPTEVTVFIpIE9MRVNUUiAoIlRoaXMgaXMgYSB0ZXN0IikpOworLy8gICAgICAgQXV0Lk1ldGhvZCAoIkZpbGVTYXZlQXMiLCAicyIsIE9MRVNUUiAoImM6XFxzYW1wbGUuZG9jIikpOworLy8gICB9CisvLworLy8KKworI2luY2x1ZGUgInN0ZGFmeC5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgIm9sZWF1dC5oIgorCisjaWZkZWYgX0RFQlVHCisjZGVmaW5lIG5ldyBERUJVR19ORVcKKyN1bmRlZiBUSElTX0ZJTEUKK3N0YXRpYyBjaGFyIFRISVNfRklMRVtdID0gX19GSUxFX187CisjZW5kaWYKKworCitzdGF0aWMgYm9vbCBDb3VudEFyZ3NJbkZvcm1hdCAoTFBDVFNUUiBGb3JtYXQsIFVJTlQqIG5BcmdzKTsKK3N0YXRpYyBMUENUU1RSIEdldE5leHRWYXJUeXBlIChMUENUU1RSIEZvcm1hdCwgVkFSVFlQRSogcFZhclR5cGUpOworCisKK0NPbGVBdXRvbWF0aW9uQ29udHJvbDo6Q09sZUF1dG9tYXRpb25Db250cm9sICgpCit7CisJbV9wRGlzcGF0Y2ggPSBOVUxMOworCW1faFJlc3VsdCA9IE5PRVJST1I7CisJbV9uRXJyQXJnID0gMDsKKwlWYXJpYW50SW5pdCAoJm1fVmFyaWFudFJlc3VsdCk7Cit9CisKK0NPbGVBdXRvbWF0aW9uQ29udHJvbDo6fkNPbGVBdXRvbWF0aW9uQ29udHJvbCAoKQoreworCURlbGV0ZU9iamVjdCAoKTsKK30KKwordm9pZCBDT2xlQXV0b21hdGlvbkNvbnRyb2w6OkRlbGV0ZU9iamVjdCAoKQoreworCWlmIChtX3BEaXNwYXRjaCkKKwl7CisJCW1fcERpc3BhdGNoLT5SZWxlYXNlICgpOworCQltX3BEaXNwYXRjaCA9IE5VTEw7CisJfQorfQorCisvLyBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBBdXRvbWF0aW9uIG9iamVjdCBhbmQKKy8vIG9idGFpbnMgaXQncyBJRGlzcGF0Y2ggaW50ZXJmYWNlLgorLy8KKy8vIFBhcmFtZXRlcnM6CisvLyBQcm9nSWQJICBQcm9nSUQgb2YgQXV0b21hdGlvbiBvYmplY3QKKy8vCitib29sIENPbGVBdXRvbWF0aW9uQ29udHJvbDo6Q3JlYXRlT2JqZWN0IChjaGFyKiBQcm9nSWQpCit7CisJQ0xTSUQgQ2xzSWQ7CQkJLy8gQ0xTSUQgb2YgYXV0b21hdGlvbiBvYmplY3QKKwlMUFVOS05PV04gcFVua25vd24gPSBOVUxMOwkvLyBJVW5rbm93biBvZiBhdXRvbWF0aW9uIG9iamVjdAorCisJLy8gUmV0cmlldmUgQ0xTSUQgZnJvbSB0aGUgcHJvZ0lEIHRoYXQgdGhlIHVzZXIgc3BlY2lmaWVkCisJTFBPTEVTVFIgT2xlUHJvZ0lkID0gVE9fT0xFX1NUUiAoUHJvZ0lkKTsKKwltX2hSZXN1bHQgPSBDTFNJREZyb21Qcm9nSUQgKE9sZVByb2dJZCwgJkNsc0lkKTsKKwlpZiAoRkFJTEVEIChtX2hSZXN1bHQpKQorCQlnb3RvIGVycm9yOworCisJLy8gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhdXRvbWF0aW9uIG9iamVjdCBhbmQgYXNrIGZvciB0aGUKKwkvLyBJRGlzcGF0Y2ggaW50ZXJmYWNlCisJbV9oUmVzdWx0ID0gQ29DcmVhdGVJbnN0YW5jZSAoQ2xzSWQsIE5VTEwsIENMU0NUWF9TRVJWRVIsCisJCQkgICAgICAgSUlEX0lVbmtub3duLCAodm9pZCoqKSAmcFVua25vd24pOworCWlmIChGQUlMRUQgKG1faFJlc3VsdCkpCisJCWdvdG8gZXJyb3I7CisKKwltX2hSZXN1bHQgPSBwVW5rbm93bi0+UXVlcnlJbnRlcmZhY2UgKElJRF9JRGlzcGF0Y2gsICh2b2lkKiopICZtX3BEaXNwYXRjaCk7CisJaWYgKEZBSUxFRCAobV9oUmVzdWx0KSkKKwkJZ290byBlcnJvcjsKKworCXBVbmtub3duLT5SZWxlYXNlICgpOworCXJldHVybiB0cnVlOworCitlcnJvcjoKKwlpZiAocFVua25vd24pCisJCXBVbmtub3duLT5SZWxlYXNlICgpOworCWlmIChtX3BEaXNwYXRjaCkKKwkJbV9wRGlzcGF0Y2gtPlJlbGVhc2UgKCk7CisJcmV0dXJuIGZhbHNlOworfQorCisvLyBSZXR1cm4gdGhlIGRpc3BhdGNoIGlkIG9mIGEgbmFtZWQgc2VydmljZQorLy8gVGhpcyBpZCBjYW4gYmUgdXNlZCBpbiBzdWJzZXF1ZW50IGNhbGxzIHRvIEdldFByb3BlcnR5ICgpLCBTZXRQcm9wZXJ0eSAoKSBhbmQKKy8vIE1ldGhvZCAoKS4gVGhpcyBpcyB0aGUgcHJlZmVyZWQgbWV0aG9kIHdoZW4gcGVyZm9ybWFuY2UgaXMgaW1wb3J0YW50LgorLy8KK0RJU1BJRCBDT2xlQXV0b21hdGlvbkNvbnRyb2w6OkdldERpc3BhdGNoSWQgKGNoYXIqIE5hbWUpCit7CisJRElTUElEIERpc3BhdGNoSWQ7CisKKwlBU1NFUlQgKG1fcERpc3BhdGNoKTsKKworCS8vIEdldCBESVNQSUQgb2YgcHJvcGVydHkvbWV0aG9kCisJTFBPTEVTVFIgT2xlTmFtZSA9IFRPX09MRV9TVFIgKE5hbWUpOworCW1faFJlc3VsdCA9IG1fcERpc3BhdGNoLT5HZXRJRHNPZk5hbWVzIChJSURfTlVMTCwgJk9sZU5hbWUsIDEsCisJCQkJCQlMT0NBTEVfVVNFUl9ERUZBVUxULCAmRGlzcGF0Y2hJZCk7CisJaWYgKEZBSUxFRCAobV9oUmVzdWx0KSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIERpc3BhdGNoSWQ7Cit9CisKKy8vICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB1c2UgdGhlc2UgcGFyYW1ldGVyczoKKy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICBOYW1lICAgICAgTmFtZSBvZiBwcm9wZXJ0eSBvciBtZXRob2QuCisvLworLy8gIEZvcm1hdCAgICBGb3JtYXQgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSB2YXJpYWJsZSBsaXN0IG9mIHBhcmFtZXRlcnMgdGhhdAorLy8JICAgICAgZm9sbG93cy4gVGhlIGZvcm1hdCBzdHJpbmcgY2FuIGNvbnRhaW4gdGhlIGZvbGx3b2luZyBjaGFyYWN0ZXJzLgorLy8JICAgICAgJiA9IG1hcmsgdGhlIGZvbGxvd2luZyBmb3JtYXQgY2hhcmFjdGVyIGFzIFZUX0JZUkVGCisvLwkgICAgICBCID0gVlRfQk9PTAorLy8JICAgICAgaSA9IFZUX0kyCisvLwkgICAgICBJID0gVlRfSTQKKy8vCSAgICAgIHIgPSBWVF9SMgorLy8JICAgICAgUiA9IFZUX1I0CisvLwkgICAgICBjID0gVlRfQ1kKKy8vCSAgICAgIHMgPSBWVF9CU1RSIChzdHJpbmcgcG9pbnRlciBjYW4gYmUgcGFzc2VkLAorLy8JCQlCU1RSIHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgZnVuY3Rpb24pLgorLy8JICAgICAgZSA9IFZUX0VSUk9SCisvLwkgICAgICBkID0gVlRfREFURQorLy8JICAgICAgdiA9IFZUX1ZBUklBTlQuIFVzZSB0aGlzIHRvIHBhc3MgZGF0YSB0eXBlcyB0aGF0IGFyZSBub3QgZGVzY3JpYmVkCisvLwkJCWluIHRoZSBmb3JtYXQgc3RyaW5nLiAoRm9yIGV4YW1wbGUgU2FmZUFycmF5cykuCisvLwkgICAgICBEID0gVlRfRElTUEFUQ0gKKy8vCSAgICAgIFUgPSBWVF9VTktOT1dOCisvLworLy8gIC4uLiAgICAgICBBcmd1bWVudHMgb2YgdGhlIHByb3BlcnR5IG9yIG1ldGhvZC4KKy8vCSAgICAgIEFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIGJ5IEZvcm1hdC4KKy8vCisKK2Jvb2wgQ09sZUF1dG9tYXRpb25Db250cm9sOjpHZXRQcm9wZXJ0eSAoY2hhciogTmFtZSkKK3sKKwlyZXR1cm4gSW52b2tlIChESVNQQVRDSF9QUk9QRVJUWUdFVCwgTmFtZSwgTlVMTCwgTlVMTCk7Cit9CisKK2Jvb2wgQ09sZUF1dG9tYXRpb25Db250cm9sOjpHZXRQcm9wZXJ0eSAoRElTUElEIERpc3BhdGNoSWQpCit7CisJcmV0dXJuIEludm9rZSAoRElTUEFUQ0hfUFJPUEVSVFlHRVQsIERpc3BhdGNoSWQsIE5VTEwsIE5VTEwpOworfQorCitib29sIENPbGVBdXRvbWF0aW9uQ29udHJvbDo6UHV0UHJvcGVydHkgKGNoYXIqIE5hbWUsIExQQ1RTVFIgRm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBBcmdMaXN0OworCisJdmFfc3RhcnQgKEFyZ0xpc3QsIEZvcm1hdCk7CisJYm9vbCBiUmV0ID0gSW52b2tlIChESVNQQVRDSF9QUk9QRVJUWVBVVCwgTmFtZSwgRm9ybWF0LCBBcmdMaXN0KTsKKwl2YV9lbmQgKEFyZ0xpc3QpOworCXJldHVybiBiUmV0OworfQorCitib29sIENPbGVBdXRvbWF0aW9uQ29udHJvbDo6UHV0UHJvcGVydHkgKERJU1BJRCBEaXNwYXRjaElkLCBMUENUU1RSIEZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgQXJnTGlzdDsKKworCXZhX3N0YXJ0IChBcmdMaXN0LCBGb3JtYXQpOworCWJvb2wgYlJldCA9IEludm9rZSAoRElTUEFUQ0hfUFJPUEVSVFlQVVQsIERpc3BhdGNoSWQsIEZvcm1hdCwgQXJnTGlzdCk7CisJdmFfZW5kIChBcmdMaXN0KTsKKwlyZXR1cm4gYlJldDsKK30KKworYm9vbCBDT2xlQXV0b21hdGlvbkNvbnRyb2w6Ok1ldGhvZCAoY2hhciogTmFtZSwgTFBDVFNUUiBGb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IEFyZ0xpc3Q7CisKKwl2YV9zdGFydCAoQXJnTGlzdCwgRm9ybWF0KTsKKwlib29sIGJSZXQgPSBJbnZva2UgKERJU1BBVENIX01FVEhPRCwgTmFtZSwgRm9ybWF0LCBBcmdMaXN0KTsKKwl2YV9lbmQgKEFyZ0xpc3QpOworCXJldHVybiBiUmV0OworfQorCitib29sIENPbGVBdXRvbWF0aW9uQ29udHJvbDo6TWV0aG9kIChESVNQSUQgRGlzcGF0Y2hJZCwgTFBDVFNUUiBGb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IEFyZ0xpc3Q7CisKKwl2YV9zdGFydCAoQXJnTGlzdCwgRm9ybWF0KTsKKwlib29sIGJSZXQgPSBJbnZva2UgKERJU1BBVENIX01FVEhPRCwgRGlzcGF0Y2hJZCwgRm9ybWF0LCBBcmdMaXN0KTsKKwl2YV9lbmQgKEFyZ0xpc3QpOworCXJldHVybiBiUmV0OworfQorCitib29sIENPbGVBdXRvbWF0aW9uQ29udHJvbDo6SW52b2tlIChXT1JEIEZsYWdzLCBjaGFyKiBOYW1lLAorCQkJCSAgICBMUENUU1RSIEZvcm1hdCwgdmFfbGlzdCBBcmdMaXN0KQoreworCURJU1BJRCBEaXNwYXRjaElkID0gR2V0RGlzcGF0Y2hJZCAoTmFtZSk7CisJaWYgKCEgRGlzcGF0Y2hJZCkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiBJbnZva2UgKEZsYWdzLCBEaXNwYXRjaElkLCBGb3JtYXQsIEFyZ0xpc3QpOworfQorCitib29sIENPbGVBdXRvbWF0aW9uQ29udHJvbDo6SW52b2tlIChXT1JEIEZsYWdzLCBESVNQSUQgRGlzcGF0Y2hJZCwKKwkJCQkgICAgTFBDVFNUUiBGb3JtYXQsIHZhX2xpc3QgQXJnTGlzdCkKK3sKKwlVSU5UIEFyZ0NvdW50ID0gMDsKKwlWQVJJQU5UQVJHKiBBcmdWZWN0b3IgPSBOVUxMOworCisJQVNTRVJUIChtX3BEaXNwYXRjaCk7CisKKwlESVNQUEFSQU1TIERpc3BhdGNoUGFyYW1zOworCW1lbXNldCAoJkRpc3BhdGNoUGFyYW1zLCAwLCBzaXplb2YgKERpc3BhdGNoUGFyYW1zKSk7CisKKwkvLyBEZXRlcm1pbmUgbnVtYmVyIG9mIGFyZ3VtZW50cworCWlmIChGb3JtYXQpCisJCUNvdW50QXJnc0luRm9ybWF0IChGb3JtYXQsICZBcmdDb3VudCk7CisKKwkvLyBQcm9wZXJ0eSBwdXRzIGhhdmUgYSBuYW1lZCBhcmd1bWVudCB0aGF0IHJlcHJlc2VudHMgdGhlIHZhbHVlIHRoYXQKKwkvLyB0aGUgcHJvcGVydHkgaXMgYmVpbmcgYXNzaWduZWQuCisJRElTUElEIERpc3BJZE5hbWVkID0gRElTUElEX1BST1BFUlRZUFVUOworCWlmIChGbGFncyAmIERJU1BBVENIX1BST1BFUlRZUFVUKQorCXsKKwkJaWYgKEFyZ0NvdW50ID09IDApCisJCXsKKwkJCW1faFJlc3VsdCA9IFJlc3VsdEZyb21TY29kZSAoRV9JTlZBTElEQVJHKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlEaXNwYXRjaFBhcmFtcy5jTmFtZWRBcmdzID0gMTsKKwkJRGlzcGF0Y2hQYXJhbXMucmdkaXNwaWROYW1lZEFyZ3MgPSAmRGlzcElkTmFtZWQ7CisJfQorCisJaWYgKEFyZ0NvdW50KQorCXsKKwkJLy8gQWxsb2NhdGUgbWVtb3J5IGZvciBhbGwgVkFSSUFOVEFSRyBwYXJhbWV0ZXJzCisJCUFyZ1ZlY3RvciA9IChWQVJJQU5UQVJHKikgQ29UYXNrTWVtQWxsb2MgKAorCQkJCUFyZ0NvdW50ICogc2l6ZW9mIChWQVJJQU5UQVJHKSk7CisJCWlmICghIEFyZ1ZlY3RvcikKKwkJeworCQkJbV9oUmVzdWx0ID0gUmVzdWx0RnJvbVNjb2RlIChFX09VVE9GTUVNT1JZKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQltZW1zZXQgKEFyZ1ZlY3RvciwgMCwgc2l6ZW9mIChWQVJJQU5UQVJHKSAqIEFyZ0NvdW50KTsKKworCQkvLyBHZXQgcmVhZHkgdG8gd2FsayB2YXJhcmcgbGlzdAorCQlMUENUU1RSIHMgPSBGb3JtYXQ7CisKKwkJVkFSSUFOVEFSRyAqcCA9IEFyZ1ZlY3RvciArIEFyZ0NvdW50IC0gMTsgIC8vIFBhcmFtcyBnbyBpbiBvcHBvc2l0ZSBvcmRlcgorCisJCWZvciAoOzspCisJCXsKKwkJCVZhcmlhbnRJbml0IChwKTsKKwkJCWlmICghIChzID0gR2V0TmV4dFZhclR5cGUgKHMsICZwLT52dCkpKQorCQkJCWJyZWFrOworCisJCQlpZiAocCA8IEFyZ1ZlY3RvcikKKwkJCXsKKwkJCQltX2hSZXN1bHQgPSBSZXN1bHRGcm9tU2NvZGUgKEVfSU5WQUxJREFSRyk7CisJCQkJZ290byBDbGVhbnVwOworCQkJfQorCQkJc3dpdGNoIChwLT52dCkKKwkJCXsKKwkJCSAgICBjYXNlIFZUX0kyOgorCQkJCVZfSTIgKHApID0gdmFfYXJnIChBcmdMaXN0LCBzaG9ydCk7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBWVF9JNDoKKwkJCQlWX0k0IChwKSA9IHZhX2FyZyAoQXJnTGlzdCwgbG9uZyk7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBWVF9SNDoKKwkJCQlWX1I0IChwKSA9IHZhX2FyZyAoQXJnTGlzdCwgZmxvYXQpOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgVlRfREFURToKKwkJCSAgICBjYXNlIFZUX1I4OgorCQkJCVZfUjggKHApID0gdmFfYXJnIChBcmdMaXN0LCBkb3VibGUpOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgVlRfQ1k6CisJCQkJVl9DWSAocCkgPSB2YV9hcmcgKEFyZ0xpc3QsIENZKTsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIFZUX0JTVFI6CisJCQkJVl9CU1RSIChwKSA9IFN5c0FsbG9jU3RyaW5nICh2YV9hcmcgKEFyZ0xpc3QsCisJCQkJCQkJCSAgICAgT0xFQ0hBUiopKTsKKwkJCQlpZiAoISBwLT5ic3RyVmFsKQorCQkJCXsKKwkJCQkJbV9oUmVzdWx0ID0gUmVzdWx0RnJvbVNjb2RlIChFX09VVE9GTUVNT1JZKTsKKwkJCQkJcC0+dnQgPSBWVF9FTVBUWTsKKwkJCQkJZ290byBDbGVhbnVwOworCQkJCX0KKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIFZUX0RJU1BBVENIOgorCQkJCVZfRElTUEFUQ0ggKHApID0gdmFfYXJnIChBcmdMaXN0LCBMUERJU1BBVENIKTsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIFZUX0VSUk9SOgorCQkJCVZfRVJST1IgKHApID0gdmFfYXJnIChBcmdMaXN0LCBTQ09ERSk7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBWVF9CT09MOgorCQkJCVZfQk9PTCAocCkgPSB2YV9hcmcgKEFyZ0xpc3QsIEJPT0wpID8gLTEgOiAwOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgVlRfVkFSSUFOVDoKKwkJCQkqcCA9IHZhX2FyZyAoQXJnTGlzdCwgVkFSSUFOVEFSRyk7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBWVF9VTktOT1dOOgorCQkJCVZfVU5LTk9XTiAocCkgPSB2YV9hcmcgKEFyZ0xpc3QsIExQVU5LTk9XTik7CisJCQkJYnJlYWs7CisKKwkJCSAgICBjYXNlIFZUX0kyIHwgVlRfQllSRUY6CisJCQkJVl9JMlJFRiAocCkgPSB2YV9hcmcgKEFyZ0xpc3QsIHNob3J0Kik7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBWVF9JNCB8IFZUX0JZUkVGOgorCQkJCVZfSTRSRUYgKHApID0gdmFfYXJnIChBcmdMaXN0LCBsb25nKik7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBWVF9SNCB8IFZUX0JZUkVGOgorCQkJCVZfUjRSRUYgKHApID0gdmFfYXJnIChBcmdMaXN0LCBmbG9hdCopOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgVlRfUjggfCBWVF9CWVJFRjoKKwkJCQlWX1I4UkVGIChwKSA9IHZhX2FyZyAoQXJnTGlzdCwgZG91YmxlKik7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBWVF9EQVRFIHwgVlRfQllSRUY6CisJCQkJVl9EQVRFUkVGIChwKSA9IHZhX2FyZyAoQXJnTGlzdCwgREFURSopOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgVlRfQ1kgfCBWVF9CWVJFRjoKKwkJCQlWX0NZUkVGIChwKSA9IHZhX2FyZyAoQXJnTGlzdCwgQ1kqKTsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIFZUX0JTVFIgfCBWVF9CWVJFRjoKKwkJCQlWX0JTVFJSRUYgKHApID0gdmFfYXJnIChBcmdMaXN0LCBCU1RSKik7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBWVF9ESVNQQVRDSCB8IFZUX0JZUkVGOgorCQkJCVZfRElTUEFUQ0hSRUYgKHApID0gdmFfYXJnIChBcmdMaXN0LCBMUERJU1BBVENIKik7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBWVF9FUlJPUiB8IFZUX0JZUkVGOgorCQkJCVZfRVJST1JSRUYgKHApID0gdmFfYXJnIChBcmdMaXN0LCBTQ09ERSopOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgVlRfQk9PTCB8IFZUX0JZUkVGOgorCQkJCXsKKwkJCQkJQk9PTCogcEJvb2wgPSB2YV9hcmcgKEFyZ0xpc3QsIEJPT0wqKTsKKworCQkJCQkqcEJvb2wgPSAwOworCQkJCQlWX0JPT0xSRUYgKHApID0gKFZBUklBTlRfQk9PTCopIHBCb29sOworCQkJCX0KKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIFZUX1ZBUklBTlQgfCBWVF9CWVJFRjoKKwkJCQlWX1ZBUklBTlRSRUYgKHApID0gdmFfYXJnIChBcmdMaXN0LCBWQVJJQU5UQVJHKik7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBWVF9VTktOT1dOIHwgVlRfQllSRUY6CisJCQkJVl9VTktOT1dOUkVGIChwKSA9IHZhX2FyZyAoQXJnTGlzdCwgTFBVTktOT1dOKik7CisJCQkJYnJlYWs7CisKKwkJCSAgICBkZWZhdWx0OgorCQkJCXsKKwkJCQkJbV9oUmVzdWx0ID0gUmVzdWx0RnJvbVNjb2RlIChFX0lOVkFMSURBUkcpOworCQkJCQlnb3RvIENsZWFudXA7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisJCQktLXA7CS8vIEdldCByZWFkeSB0byBmaWxsIG5leHQgYXJndW1lbnQKKwkJfQorCX0KKworCURpc3BhdGNoUGFyYW1zLmNBcmdzID0gQXJnQ291bnQ7CisJRGlzcGF0Y2hQYXJhbXMucmd2YXJnID0gQXJnVmVjdG9yOworCisJLy8gSW5pdGlhbGl6ZSByZXR1cm4gdmFyaWFudCwgaW4gY2FzZSBjYWxsZXIgZm9yZ290LiBDYWxsZXIgY2FuIHBhc3MKKwkvLyBOVUxMIGlmIHJldHVybiB2YWx1ZSBpcyBub3QgZXhwZWN0ZWQuCisJVmFyaWFudEluaXQgKCZtX1ZhcmlhbnRSZXN1bHQpOworCisJLy8gTWFrZSB0aGUgY2FsbAorCW1faFJlc3VsdCA9IG1fcERpc3BhdGNoLT5JbnZva2UgKERpc3BhdGNoSWQsIElJRF9OVUxMLCBMT0NBTEVfVVNFUl9ERUZBVUxULAorCQkJCQkgRmxhZ3MsICZEaXNwYXRjaFBhcmFtcywgJm1fVmFyaWFudFJlc3VsdCwKKwkJCQkJICZtX0V4Y2VwdGlvbkluZm8sICZtX25FcnJBcmcpOworCisgICAgQ2xlYW51cDoKKwkvLyBDbGVhbnVwIGFueSBhcmd1bWVudHMgdGhhdCBuZWVkIGNsZWFudXAKKwlpZiAoQXJnQ291bnQpCisJeworCQlWQVJJQU5UQVJHKiBwID0gQXJnVmVjdG9yOworCisJCXdoaWxlIChBcmdDb3VudC0tKQorCQl7CisJCQlzd2l0Y2ggKHAtPnZ0KQorCQkJeworCQkJICAgIGNhc2UgVlRfQlNUUjoKKwkJCQlWYXJpYW50Q2xlYXIgKHApOworCQkJCWJyZWFrOworCQkJfQorCQkJKytwOworCQl9CisJCUNvVGFza01lbUZyZWUgKEFyZ1ZlY3Rvcik7CisJfQorCisJcmV0dXJuIEZBSUxFRCAobV9oUmVzdWx0KSA/IGZhbHNlIDogdHJ1ZTsKK30KKworI2RlZmluZSBDQVNFX1NDT0RFKHNjKSAgXAorCWNhc2Ugc2M6IFwKKwlsc3RyY3B5KChjaGFyKilFcnJOYW1lLCAoY2hhciopI3NjKTsgXAorCWJyZWFrOworCit2b2lkIENPbGVBdXRvbWF0aW9uQ29udHJvbDo6RXJyRGlhZyAoKQoreworCWNoYXIgRXJyTmFtZVsyMDBdOworCisJU0NPREUgc2MgPSBHZXRTY29kZSAobV9oUmVzdWx0KTsKKwlzd2l0Y2ggKHNjKQorCXsKKwkgICAgLy8gU0NPREUncyBkZWZpbmVkIGluIFNDT0RFLkgKKwkgICAgQ0FTRV9TQ09ERSAoU19PSykKKwkgICAgQ0FTRV9TQ09ERSAoU19GQUxTRSkKKwkgICAgQ0FTRV9TQ09ERSAoRV9VTkVYUEVDVEVEKQorCSAgICBDQVNFX1NDT0RFIChFX09VVE9GTUVNT1JZKQorCSAgICBDQVNFX1NDT0RFIChFX0lOVkFMSURBUkcpCisJICAgIENBU0VfU0NPREUgKEVfTk9JTlRFUkZBQ0UpCisJICAgIENBU0VfU0NPREUgKEVfUE9JTlRFUikKKwkgICAgQ0FTRV9TQ09ERSAoRV9IQU5ETEUpCisJICAgIENBU0VfU0NPREUgKEVfQUJPUlQpCisJICAgIENBU0VfU0NPREUgKEVfRkFJTCkKKwkgICAgQ0FTRV9TQ09ERSAoRV9BQ0NFU1NERU5JRUQpCisKKwkgICAgLy8gU0NPREUncyBkZWZpbmVkIGluIE9MRTIuSAorCSAgICBDQVNFX1NDT0RFIChPTEVfRV9PTEVWRVJCKQorCSAgICBDQVNFX1NDT0RFIChPTEVfRV9BRFZGKQorCSAgICBDQVNFX1NDT0RFIChPTEVfRV9FTlVNX05PTU9SRSkKKwkgICAgQ0FTRV9TQ09ERSAoT0xFX0VfQURWSVNFTk9UU1VQUE9SVEVEKQorCSAgICBDQVNFX1NDT0RFIChPTEVfRV9OT0NPTk5FQ1RJT04pCisJICAgIENBU0VfU0NPREUgKE9MRV9FX05PVFJVTk5JTkcpCisJICAgIENBU0VfU0NPREUgKE9MRV9FX05PQ0FDSEUpCisJICAgIENBU0VfU0NPREUgKE9MRV9FX0JMQU5LKQorCSAgICBDQVNFX1NDT0RFIChPTEVfRV9DTEFTU0RJRkYpCisJICAgIENBU0VfU0NPREUgKE9MRV9FX0NBTlRfR0VUTU9OSUtFUikKKwkgICAgQ0FTRV9TQ09ERSAoT0xFX0VfQ0FOVF9CSU5EVE9TT1VSQ0UpCisJICAgIENBU0VfU0NPREUgKE9MRV9FX1NUQVRJQykKKwkgICAgQ0FTRV9TQ09ERSAoT0xFX0VfUFJPTVBUU0FWRUNBTkNFTExFRCkKKwkgICAgQ0FTRV9TQ09ERSAoT0xFX0VfSU5WQUxJRFJFQ1QpCisJICAgIENBU0VfU0NPREUgKE9MRV9FX1dST05HQ09NUE9CSikKKwkgICAgQ0FTRV9TQ09ERSAoT0xFX0VfSU5WQUxJREhXTkQpCisJICAgIENBU0VfU0NPREUgKE9MRV9FX05PVF9JTlBMQUNFQUNUSVZFKQorCSAgICBDQVNFX1NDT0RFIChPTEVfRV9DQU5UQ09OVkVSVCkKKwkgICAgQ0FTRV9TQ09ERSAoT0xFX0VfTk9TVE9SQUdFKQorCisJICAgIENBU0VfU0NPREUgKERWX0VfRk9STUFURVRDKQorCSAgICBDQVNFX1NDT0RFIChEVl9FX0RWVEFSR0VUREVWSUNFKQorCSAgICBDQVNFX1NDT0RFIChEVl9FX1NUR01FRElVTSkKKwkgICAgQ0FTRV9TQ09ERSAoRFZfRV9TVEFUREFUQSkKKwkgICAgQ0FTRV9TQ09ERSAoRFZfRV9MSU5ERVgpCisJICAgIENBU0VfU0NPREUgKERWX0VfVFlNRUQpCisJICAgIENBU0VfU0NPREUgKERWX0VfQ0xJUEZPUk1BVCkKKwkgICAgQ0FTRV9TQ09ERSAoRFZfRV9EVkFTUEVDVCkKKwkgICAgQ0FTRV9TQ09ERSAoRFZfRV9EVlRBUkdFVERFVklDRV9TSVpFKQorCSAgICBDQVNFX1NDT0RFIChEVl9FX05PSVZJRVdPQkpFQ1QpCisKKwkgICAgQ0FTRV9TQ09ERSAoT0xFX1NfVVNFUkVHKQorCSAgICBDQVNFX1NDT0RFIChPTEVfU19TVEFUSUMpCisJICAgIENBU0VfU0NPREUgKE9MRV9TX01BQ19DTElQRk9STUFUKQorCisJICAgIENBU0VfU0NPREUgKENPTlZFUlQxMF9FX09MRVNUUkVBTV9HRVQpCisJICAgIENBU0VfU0NPREUgKENPTlZFUlQxMF9FX09MRVNUUkVBTV9QVVQpCisJICAgIENBU0VfU0NPREUgKENPTlZFUlQxMF9FX09MRVNUUkVBTV9GTVQpCisJICAgIENBU0VfU0NPREUgKENPTlZFUlQxMF9FX09MRVNUUkVBTV9CSVRNQVBfVE9fRElCKQorCSAgICBDQVNFX1NDT0RFIChDT05WRVJUMTBfRV9TVEdfRk1UKQorCSAgICBDQVNFX1NDT0RFIChDT05WRVJUMTBfRV9TVEdfTk9fU1REX1NUUkVBTSkKKwkgICAgQ0FTRV9TQ09ERSAoQ09OVkVSVDEwX0VfU1RHX0RJQl9UT19CSVRNQVApCisJICAgIENBU0VfU0NPREUgKENPTlZFUlQxMF9TX05PX1BSRVNFTlRBVElPTikKKworCSAgICBDQVNFX1NDT0RFIChDTElQQlJEX0VfQ0FOVF9PUEVOKQorCSAgICBDQVNFX1NDT0RFIChDTElQQlJEX0VfQ0FOVF9FTVBUWSkKKwkgICAgQ0FTRV9TQ09ERSAoQ0xJUEJSRF9FX0NBTlRfU0VUKQorCSAgICBDQVNFX1NDT0RFIChDTElQQlJEX0VfQkFEX0RBVEEpCisJICAgIENBU0VfU0NPREUgKENMSVBCUkRfRV9DQU5UX0NMT1NFKQorCisJICAgIENBU0VfU0NPREUgKERSQUdEUk9QX0VfTk9UUkVHSVNURVJFRCkKKwkgICAgQ0FTRV9TQ09ERSAoRFJBR0RST1BfRV9BTFJFQURZUkVHSVNURVJFRCkKKwkgICAgQ0FTRV9TQ09ERSAoRFJBR0RST1BfRV9JTlZBTElESFdORCkKKwkgICAgQ0FTRV9TQ09ERSAoRFJBR0RST1BfU19EUk9QKQorCSAgICBDQVNFX1NDT0RFIChEUkFHRFJPUF9TX0NBTkNFTCkKKwkgICAgQ0FTRV9TQ09ERSAoRFJBR0RST1BfU19VU0VERUZBVUxUQ1VSU09SUykKKworCSAgICBDQVNFX1NDT0RFIChPTEVPQkpfRV9OT1ZFUkJTKQorCSAgICBDQVNFX1NDT0RFIChPTEVPQkpfRV9JTlZBTElEVkVSQikKKwkgICAgQ0FTRV9TQ09ERSAoT0xFT0JKX1NfSU5WQUxJRFZFUkIpCisJICAgIENBU0VfU0NPREUgKE9MRU9CSl9TX0NBTk5PVF9ET1ZFUkJfTk9XKQorCSAgICBDQVNFX1NDT0RFIChPTEVPQkpfU19JTlZBTElESFdORCkKKwkgICAgQ0FTRV9TQ09ERSAoSU5QTEFDRV9FX05PVFVORE9BQkxFKQorCSAgICBDQVNFX1NDT0RFIChJTlBMQUNFX0VfTk9UT09MU1BBQ0UpCisJICAgIENBU0VfU0NPREUgKElOUExBQ0VfU19UUlVOQ0FURUQpCisKKwkgICAgLy8gU0NPREUncyBkZWZpbmVkIGluIENPTVBPQkouSAorCSAgICBDQVNFX1NDT0RFIChDT19FX05PVElOSVRJQUxJWkVEKQorCSAgICBDQVNFX1NDT0RFIChDT19FX0FMUkVBRFlJTklUSUFMSVpFRCkKKwkgICAgQ0FTRV9TQ09ERSAoQ09fRV9DQU5UREVURVJNSU5FQ0xBU1MpCisJICAgIENBU0VfU0NPREUgKENPX0VfQ0xBU1NTVFJJTkcpCisJICAgIENBU0VfU0NPREUgKENPX0VfSUlEU1RSSU5HKQorCSAgICBDQVNFX1NDT0RFIChDT19FX0FQUE5PVEZPVU5EKQorCSAgICBDQVNFX1NDT0RFIChDT19FX0FQUFNJTkdMRVVTRSkKKwkgICAgQ0FTRV9TQ09ERSAoQ09fRV9FUlJPUklOQVBQKQorCSAgICBDQVNFX1NDT0RFIChDT19FX0RMTE5PVEZPVU5EKQorCSAgICBDQVNFX1NDT0RFIChDT19FX0VSUk9SSU5ETEwpCisJICAgIENBU0VfU0NPREUgKENPX0VfV1JPTkdPU0ZPUkFQUCkKKwkgICAgQ0FTRV9TQ09ERSAoQ09fRV9PQkpOT1RSRUcpCisJICAgIENBU0VfU0NPREUgKENPX0VfT0JKSVNSRUcpCisJICAgIENBU0VfU0NPREUgKENPX0VfT0JKTk9UQ09OTkVDVEVEKQorCSAgICBDQVNFX1NDT0RFIChDT19FX0FQUERJRE5UUkVHKQorCSAgICBDQVNFX1NDT0RFIChDTEFTU19FX05PQUdHUkVHQVRJT04pCisJICAgIENBU0VfU0NPREUgKENMQVNTX0VfQ0xBU1NOT1RBVkFJTEFCTEUpCisJICAgIENBU0VfU0NPREUgKFJFR0RCX0VfUkVBRFJFR0RCKQorCSAgICBDQVNFX1NDT0RFIChSRUdEQl9FX1dSSVRFUkVHREIpCisJICAgIENBU0VfU0NPREUgKFJFR0RCX0VfS0VZTUlTU0lORykKKwkgICAgQ0FTRV9TQ09ERSAoUkVHREJfRV9JTlZBTElEVkFMVUUpCisJICAgIENBU0VfU0NPREUgKFJFR0RCX0VfQ0xBU1NOT1RSRUcpCisJICAgIENBU0VfU0NPREUgKFJFR0RCX0VfSUlETk9UUkVHKQorCSAgICBDQVNFX1NDT0RFIChSUENfRV9DQUxMX1JFSkVDVEVEKQorCSAgICBDQVNFX1NDT0RFIChSUENfRV9DQUxMX0NBTkNFTEVEKQorCSAgICBDQVNFX1NDT0RFIChSUENfRV9DQU5UUE9TVF9JTlNFTkRDQUxMKQorCSAgICBDQVNFX1NDT0RFIChSUENfRV9DQU5UQ0FMTE9VVF9JTkFTWU5DQ0FMTCkKKwkgICAgQ0FTRV9TQ09ERSAoUlBDX0VfQ0FOVENBTExPVVRfSU5FWFRFUk5BTENBTEwpCisJICAgIENBU0VfU0NPREUgKFJQQ19FX0NPTk5FQ1RJT05fVEVSTUlOQVRFRCkKKwkgICAgQ0FTRV9TQ09ERSAoUlBDX0VfU0VSVkVSX0RJRUQpCisJICAgIENBU0VfU0NPREUgKFJQQ19FX0NMSUVOVF9ESUVEKQorCSAgICBDQVNFX1NDT0RFIChSUENfRV9JTlZBTElEX0RBVEFQQUNLRVQpCisJICAgIENBU0VfU0NPREUgKFJQQ19FX0NBTlRUUkFOU01JVF9DQUxMKQorCSAgICBDQVNFX1NDT0RFIChSUENfRV9DTElFTlRfQ0FOVE1BUlNIQUxfREFUQSkKKwkgICAgQ0FTRV9TQ09ERSAoUlBDX0VfQ0xJRU5UX0NBTlRVTk1BUlNIQUxfREFUQSkKKwkgICAgQ0FTRV9TQ09ERSAoUlBDX0VfU0VSVkVSX0NBTlRNQVJTSEFMX0RBVEEpCisJICAgIENBU0VfU0NPREUgKFJQQ19FX1NFUlZFUl9DQU5UVU5NQVJTSEFMX0RBVEEpCisJICAgIENBU0VfU0NPREUgKFJQQ19FX0lOVkFMSURfREFUQSkKKwkgICAgQ0FTRV9TQ09ERSAoUlBDX0VfSU5WQUxJRF9QQVJBTUVURVIpCisJICAgIENBU0VfU0NPREUgKFJQQ19FX0NBTlRDQUxMT1VUX0FHQUlOKQorCSAgICBDQVNFX1NDT0RFIChSUENfRV9VTkVYUEVDVEVEKQorCisJICAgIC8vIFNDT0RFJ3MgZGVmaW5lZCBpbiBEVk9CSi5ICisJICAgIENBU0VfU0NPREUgKERBVEFfU19TQU1FRk9STUFURVRDKQorCSAgICBDQVNFX1NDT0RFIChWSUVXX0VfRFJBVykKKwkgICAgQ0FTRV9TQ09ERSAoVklFV19TX0FMUkVBRFlfRlJPWkVOKQorCSAgICBDQVNFX1NDT0RFIChDQUNIRV9FX05PQ0FDSEVfVVBEQVRFRCkKKwkgICAgQ0FTRV9TQ09ERSAoQ0FDSEVfU19GT1JNQVRFVENfTk9UU1VQUE9SVEVEKQorCSAgICBDQVNFX1NDT0RFIChDQUNIRV9TX1NBTUVDQUNIRSkKKwkgICAgQ0FTRV9TQ09ERSAoQ0FDSEVfU19TT01FQ0FDSEVTX05PVFVQREFURUQpCisKKwkgICAgLy8gU0NPREUncyBkZWZpbmVkIGluIFNUT1JBR0UuSAorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9JTlZBTElERlVOQ1RJT04pCisJICAgIENBU0VfU0NPREUgKFNUR19FX0ZJTEVOT1RGT1VORCkKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX0VfUEFUSE5PVEZPVU5EKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9UT09NQU5ZT1BFTkZJTEVTKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9BQ0NFU1NERU5JRUQpCisJICAgIENBU0VfU0NPREUgKFNUR19FX0lOVkFMSURIQU5ETEUpCisJICAgIENBU0VfU0NPREUgKFNUR19FX0lOU1VGRklDSUVOVE1FTU9SWSkKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX0VfSU5WQUxJRFBPSU5URVIpCisJICAgIENBU0VfU0NPREUgKFNUR19FX05PTU9SRUZJTEVTKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9ESVNLSVNXUklURVBST1RFQ1RFRCkKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX0VfU0VFS0VSUk9SKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9XUklURUZBVUxUKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9SRUFERkFVTFQpCisJICAgIENBU0VfU0NPREUgKFNUR19FX1NIQVJFVklPTEFUSU9OKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9MT0NLVklPTEFUSU9OKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9GSUxFQUxSRUFEWUVYSVNUUykKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX0VfSU5WQUxJRFBBUkFNRVRFUikKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX0VfTUVESVVNRlVMTCkKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX0VfQUJOT1JNQUxBUElFWElUKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9JTlZBTElESEVBREVSKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9JTlZBTElETkFNRSkKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX0VfVU5LTk9XTikKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX0VfVU5JTVBMRU1FTlRFREZVTkNUSU9OKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9JTlZBTElERkxBRykKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX0VfSU5VU0UpCisJICAgIENBU0VfU0NPREUgKFNUR19FX05PVENVUlJFTlQpCisJICAgIENBU0VfU0NPREUgKFNUR19FX1JFVkVSVEVEKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9DQU5UU0FWRSkKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX0VfT0xERk9STUFUKQorCSAgICBDQVNFX1NDT0RFIChTVEdfRV9PTERETEwpCisJICAgIENBU0VfU0NPREUgKFNUR19FX1NIQVJFUkVRVUlSRUQpCisJICAgIENBU0VfU0NPREUgKFNUR19FX05PVEZJTEVCQVNFRFNUT1JBR0UpCisJICAgIENBU0VfU0NPREUgKFNUR19FX0VYVEFOVE1BUlNIQUxMSU5HUykKKwkgICAgQ0FTRV9TQ09ERSAoU1RHX1NfQ09OVkVSVEVEKQorCisJICAgIC8vIFNDT0RFJ3MgZGVmaW5lZCBpbiBTVE9SQUdFLkgKKwkgICAgQ0FTRV9TQ09ERSAoTUtfRV9DT05ORUNUTUFOVUFMTFkpCisJICAgIENBU0VfU0NPREUgKE1LX0VfRVhDRUVERURERUFETElORSkKKwkgICAgQ0FTRV9TQ09ERSAoTUtfRV9ORUVER0VORVJJQykKKwkgICAgQ0FTRV9TQ09ERSAoTUtfRV9VTkFWQUlMQUJMRSkKKwkgICAgQ0FTRV9TQ09ERSAoTUtfRV9TWU5UQVgpCisJICAgIENBU0VfU0NPREUgKE1LX0VfTk9PQkpFQ1QpCisJICAgIENBU0VfU0NPREUgKE1LX0VfSU5WQUxJREVYVEVOU0lPTikKKwkgICAgQ0FTRV9TQ09ERSAoTUtfRV9JTlRFUk1FRElBVEVJTlRFUkZBQ0VOT1RTVVBQT1JURUQpCisJICAgIENBU0VfU0NPREUgKE1LX0VfTk9UQklOREFCTEUpCisJICAgIENBU0VfU0NPREUgKE1LX0VfTk9UQk9VTkQpCisJICAgIENBU0VfU0NPREUgKE1LX0VfQ0FOVE9QRU5GSUxFKQorCSAgICBDQVNFX1NDT0RFIChNS19FX01VU1RCT1RIRVJVU0VSKQorCSAgICBDQVNFX1NDT0RFIChNS19FX05PSU5WRVJTRSkKKwkgICAgQ0FTRV9TQ09ERSAoTUtfRV9OT1NUT1JBR0UpCisJICAgIENBU0VfU0NPREUgKE1LX0VfTk9QUkVGSVgpCisJICAgIENBU0VfU0NPREUgKE1LX1NfUkVEVUNFRF9UT19TRUxGKQorCSAgICBDQVNFX1NDT0RFIChNS19TX01FKQorCSAgICBDQVNFX1NDT0RFIChNS19TX0hJTSkKKwkgICAgQ0FTRV9TQ09ERSAoTUtfU19VUykKKwkgICAgQ0FTRV9TQ09ERSAoTUtfU19NT05JS0VSQUxSRUFEWVJFR0lTVEVSRUQpCisKKwkgICAgLy8gU0NPREUncyBkZWZpbmVkIGluIERJU1BBVENILkgKKwkgICAgQ0FTRV9TQ09ERSAoRElTUF9FX1VOS05PV05JTlRFUkZBQ0UpCisJICAgIENBU0VfU0NPREUgKERJU1BfRV9NRU1CRVJOT1RGT1VORCkKKwkgICAgQ0FTRV9TQ09ERSAoRElTUF9FX1BBUkFNTk9URk9VTkQpCisJICAgIENBU0VfU0NPREUgKERJU1BfRV9UWVBFTUlTTUFUQ0gpCisJICAgIENBU0VfU0NPREUgKERJU1BfRV9VTktOT1dOTkFNRSkKKwkgICAgQ0FTRV9TQ09ERSAoRElTUF9FX05PTkFNRURBUkdTKQorCSAgICBDQVNFX1NDT0RFIChESVNQX0VfQkFEVkFSVFlQRSkKKwkgICAgQ0FTRV9TQ09ERSAoRElTUF9FX0VYQ0VQVElPTikKKwkgICAgQ0FTRV9TQ09ERSAoRElTUF9FX09WRVJGTE9XKQorCSAgICBDQVNFX1NDT0RFIChESVNQX0VfQkFESU5ERVgpCisJICAgIENBU0VfU0NPREUgKERJU1BfRV9VTktOT1dOTENJRCkKKwkgICAgQ0FTRV9TQ09ERSAoRElTUF9FX0FSUkFZSVNMT0NLRUQpCisJICAgIENBU0VfU0NPREUgKERJU1BfRV9CQURQQVJBTUNPVU5UKQorCSAgICBDQVNFX1NDT0RFIChESVNQX0VfUEFSQU1OT1RPUFRJT05BTCkKKwkgICAgQ0FTRV9TQ09ERSAoRElTUF9FX0JBRENBTExFRSkKKwkgICAgQ0FTRV9TQ09ERSAoRElTUF9FX05PVEFDT0xMRUNUSU9OKQorCisJICAgIENBU0VfU0NPREUgKFRZUEVfRV9CVUZGRVJUT09TTUFMTCkKKwkgICAgQ0FTRV9TQ09ERSAoVFlQRV9FX0lOVkRBVEFSRUFEKQorCSAgICBDQVNFX1NDT0RFIChUWVBFX0VfVU5TVVBGT1JNQVQpCisJICAgIENBU0VfU0NPREUgKFRZUEVfRV9SRUdJU1RSWUFDQ0VTUykKKwkgICAgQ0FTRV9TQ09ERSAoVFlQRV9FX0xJQk5PVFJFR0lTVEVSRUQpCisJICAgIENBU0VfU0NPREUgKFRZUEVfRV9VTkRFRklORURUWVBFKQorCSAgICBDQVNFX1NDT0RFIChUWVBFX0VfUVVBTElGSUVETkFNRURJU0FMTE9XRUQpCisJICAgIENBU0VfU0NPREUgKFRZUEVfRV9JTlZBTElEU1RBVEUpCisJICAgIENBU0VfU0NPREUgKFRZUEVfRV9XUk9OR1RZUEVLSU5EKQorCSAgICBDQVNFX1NDT0RFIChUWVBFX0VfRUxFTUVOVE5PVEZPVU5EKQorCSAgICBDQVNFX1NDT0RFIChUWVBFX0VfQU1CSUdVT1VTTkFNRSkKKwkgICAgQ0FTRV9TQ09ERSAoVFlQRV9FX05BTUVDT05GTElDVCkKKwkgICAgQ0FTRV9TQ09ERSAoVFlQRV9FX1VOS05PV05MQ0lEKQorCSAgICBDQVNFX1NDT0RFIChUWVBFX0VfRExMRlVOQ1RJT05OT1RGT1VORCkKKwkgICAgQ0FTRV9TQ09ERSAoVFlQRV9FX0JBRE1PRFVMRUtJTkQpCisJICAgIENBU0VfU0NPREUgKFRZUEVfRV9TSVpFVE9PQklHKQorCSAgICBDQVNFX1NDT0RFIChUWVBFX0VfRFVQTElDQVRFSUQpCisJICAgIENBU0VfU0NPREUgKFRZUEVfRV9UWVBFTUlTTUFUQ0gpCisJICAgIENBU0VfU0NPREUgKFRZUEVfRV9PVVRPRkJPVU5EUykKKwkgICAgQ0FTRV9TQ09ERSAoVFlQRV9FX0lPRVJST1IpCisJICAgIENBU0VfU0NPREUgKFRZUEVfRV9DQU5UQ1JFQVRFVE1QRklMRSkKKwkgICAgQ0FTRV9TQ09ERSAoVFlQRV9FX0NBTlRMT0FETElCUkFSWSkKKwkgICAgQ0FTRV9TQ09ERSAoVFlQRV9FX0lOQ09OU0lTVEVOVFBST1BGVU5DUykKKwkgICAgQ0FTRV9TQ09ERSAoVFlQRV9FX0NJUkNVTEFSVFlQRSkKKworCSAgICBkZWZhdWx0OgorCQlsc3RyY3B5IChFcnJOYW1lLCAiVU5LTk9XTiBTQ09ERSIpOworCX0KKworCWNoYXIgQnVmWzI1Nl07CisJc3ByaW50ZiAoQnVmLCAiQW4gT0xFIGVycm9yIG9jY3VyZWQ6XHJcbkNvZGUgPSAlc1xyXG5SZXN1bHQgPSAlbHguIiwKKwkJIChjaGFyKikgRXJyTmFtZSwgbV9oUmVzdWx0KTsKKwlNZXNzYWdlQm94IChOVUxMLCBCdWYsICJPTEUgRXJyb3IiLCBNQl9PSyk7Cit9CisKKworc3RhdGljIGJvb2wgQ291bnRBcmdzSW5Gb3JtYXQgKExQQ1RTVFIgRm9ybWF0LCBVSU5UKiBwQXJnQ291bnQpCit7CisJKnBBcmdDb3VudCA9IDA7CisKKwlpZiAoISBGb3JtYXQpCisJCXJldHVybiB0cnVlOworCisJd2hpbGUgKCpGb3JtYXQpCisJeworCQlpZiAoKkZvcm1hdCA9PSAnJicpCisJCQlGb3JtYXQrKzsKKworCQlzd2l0Y2ggKCpGb3JtYXQpCisJCXsKKwkJICAgIGNhc2UgJ2InOgorCQkgICAgY2FzZSAnaSc6CisJCSAgICBjYXNlICdJJzoKKwkJICAgIGNhc2UgJ3InOgorCQkgICAgY2FzZSAnUic6CisJCSAgICBjYXNlICdjJzoKKwkJICAgIGNhc2UgJ3MnOgorCQkgICAgY2FzZSAnZSc6CisJCSAgICBjYXNlICdkJzoKKwkJICAgIGNhc2UgJ3YnOgorCQkgICAgY2FzZSAnRCc6CisJCSAgICBjYXNlICdVJzoKKwkJCSsrICgqcEFyZ0NvdW50KTsKKwkJCUZvcm1hdCsrOworCQkJYnJlYWs7CisJCSAgICBjYXNlICdcMCc6CisJCSAgICBkZWZhdWx0OgorCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgTFBDVFNUUiBHZXROZXh0VmFyVHlwZSAoTFBDVFNUUiBGb3JtYXQsIFZBUlRZUEUqIHBWYXJUeXBlKQoreworCSpwVmFyVHlwZSA9IDA7CisJaWYgKCpGb3JtYXQgPT0gJyYnKQorCXsKKwkJKnBWYXJUeXBlID0gVlRfQllSRUY7CisJCUZvcm1hdCsrOworCQlpZiAoISpGb3JtYXQpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJc3dpdGNoICgqRm9ybWF0KQorCXsKKwkgICAgY2FzZSAnYic6CisJCSpwVmFyVHlwZSB8PSBWVF9CT09MOworCQlicmVhazsKKwkgICAgY2FzZSAnaSc6CisJCSpwVmFyVHlwZSB8PSBWVF9JMjsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ0knOgorCQkqcFZhclR5cGUgfD0gVlRfSTQ7CisJCWJyZWFrOworCSAgICBjYXNlICdyJzoKKwkJKnBWYXJUeXBlIHw9IFZUX1I0OworCQlicmVhazsKKwkgICAgY2FzZSAnUic6CisJCSpwVmFyVHlwZSB8PSBWVF9SODsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ2MnOgorCQkqcFZhclR5cGUgfD0gVlRfQ1k7CisJCWJyZWFrOworCSAgICBjYXNlICdzJzoKKwkJKnBWYXJUeXBlIHw9IFZUX0JTVFI7CisJCWJyZWFrOworCSAgICBjYXNlICdlJzoKKwkJKnBWYXJUeXBlIHw9IFZUX0VSUk9SOworCQlicmVhazsKKwkgICAgY2FzZSAnZCc6CisJCSpwVmFyVHlwZSB8PSBWVF9EQVRFOworCQlicmVhazsKKwkgICAgY2FzZSAndic6CisJCSpwVmFyVHlwZSB8PSBWVF9WQVJJQU5UOworCQlicmVhazsKKwkgICAgY2FzZSAnVSc6CisJCSpwVmFyVHlwZSB8PSBWVF9VTktOT1dOOworCQlicmVhazsKKwkgICAgY2FzZSAnRCc6CisJCSpwVmFyVHlwZSB8PSBWVF9ESVNQQVRDSDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1wwJzoKKwkJcmV0dXJuIE5VTEw7CS8vIEVuZCBvZiBGb3JtYXQgc3RyaW5nCisJICAgIGRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gKytGb3JtYXQ7Cit9CisKKyNpZm5kZWYgVU5JQ09ERQorY2hhciogQ29udmVydFRvQW5zaSAoT0xFQ0hBUiogc1VuaWNvZGUpCit7CisJc3RhdGljIGNoYXIgQnVmQXNjaWlbTUFYX09MRV9TVFJdOworCXJldHVybiBDb252ZXJ0VG9BbnNpQnVmIChzVW5pY29kZSwgQnVmQXNjaWkpOworfQorCitjaGFyKiBDb252ZXJ0VG9BbnNpQnVmIChPTEVDSEFSKiBzVW5pY29kZSwgY2hhciogQnVmQXNjaWkpCit7CisJV2lkZUNoYXJUb011bHRpQnl0ZSAoQ1BfQUNQLCAwLCBzVW5pY29kZSwgLTEsIEJ1ZkFzY2lpLCBNQVhfT0xFX1NUUiwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIEJ1ZkFzY2lpOworfQorCitPTEVDSEFSKiBDb252ZXJ0VG9Vbmljb2RlIChjaGFyKiBzQXNjaWkpCit7CisJc3RhdGljIE9MRUNIQVIgQnVmVW5pY29kZVtNQVhfT0xFX1NUUl07CisJcmV0dXJuIENvbnZlcnRUb1VuaWNvZGVCdWYgKHNBc2NpaSwgQnVmVW5pY29kZSk7Cit9CisKK09MRUNIQVIqIENvbnZlcnRUb1VuaWNvZGVCdWYgKGNoYXIqIHNBc2NpaSwgT0xFQ0hBUiogQnVmVW5pY29kZSkKK3sKKwlNdWx0aUJ5dGVUb1dpZGVDaGFyIChDUF9BQ1AsIDAsIHNBc2NpaSwgLTEsIEJ1ZlVuaWNvZGUsIE1BWF9PTEVfU1RSKTsKKwlyZXR1cm4gQnVmVW5pY29kZTsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9zcmMvVmlzVmltL09sZUF1dC5oIGIvc3JjL1Zpc1ZpbS9PbGVBdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2RlODA3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9PbGVBdXQuaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIF9fT0xFQVVUX0hfXworI2RlZmluZSBfX09MRUFVVF9IX18KKworY2xhc3MgQ09sZUF1dG9tYXRpb25Db250cm9sIDogcHVibGljIENPYmplY3QKK3sKKyAgICBwdWJsaWM6CisJQ09sZUF1dG9tYXRpb25Db250cm9sICgpOworCX5DT2xlQXV0b21hdGlvbkNvbnRyb2wgKCk7CisJYm9vbCBDcmVhdGVPYmplY3QgKGNoYXIqIFByb2dJZCk7CisJRElTUElEIEdldERpc3BhdGNoSWQgKGNoYXIqIE5hbWUpOworCWJvb2wgR2V0UHJvcGVydHkgKGNoYXIqIE5hbWUpOworCWJvb2wgR2V0UHJvcGVydHkgKERJU1BJRCBEaXNwYXRjaElkKTsKKwlib29sIFB1dFByb3BlcnR5IChjaGFyKiBOYW1lLCBMUENUU1RSIEZvcm1hdCwgLi4uKTsKKwlib29sIFB1dFByb3BlcnR5IChESVNQSUQgRGlzcGF0Y2hJZCwgTFBDVFNUUiBGb3JtYXQsIC4uLik7CisJYm9vbCBNZXRob2QgKGNoYXIqIE5hbWUsIExQQ1RTVFIgRm9ybWF0ID0gTlVMTCwgLi4uKTsKKwlib29sIE1ldGhvZCAoRElTUElEIERpc3BhdGNoSWQsIExQQ1RTVFIgRm9ybWF0ID0gTlVMTCwgLi4uKTsKKwl2b2lkIERlbGV0ZU9iamVjdCAoKTsKKwl2b2lkIEVyckRpYWcgKCk7CisJYm9vbCBJc0NyZWF0ZWQgKCkKKwl7CisJCXJldHVybiBtX3BEaXNwYXRjaCA/IHRydWUgOiBmYWxzZTsKKwl9CisJYm9vbCBJc0FsaXZlICgpOworCUhSRVNVTFQgR2V0UmVzdWx0ICgpCisJeworCQlyZXR1cm4gbV9oUmVzdWx0OworCX0KKwlVSU5UIEdldEVyckFyZ05yICgpCisJeworCQlyZXR1cm4gbV9uRXJyQXJnOworCX0KKwlFWENFUElORk8qIEdldEV4Y2VwdGlvbkluZm8gKCkKKwl7CisJCXJldHVybiAmbV9FeGNlcHRpb25JbmZvOworCX0KKwlMUFZBUklBTlQgR2V0UmVzdWx0VmFyaWFudCAoKQorCXsKKwkJcmV0dXJuICZtX1ZhcmlhbnRSZXN1bHQ7CisJfQorCisgICAgcHJvdGVjdGVkOgorCWJvb2wgSW52b2tlIChXT1JEIEZsYWdzLCBjaGFyKiBOYW1lLCBMUENUU1RSIEZvcm1hdCwgdmFfbGlzdCBBcmdMaXN0KTsKKwlib29sIEludm9rZSAoV09SRCBGbGFncywgRElTUElEIERpc3BhdGNoSWQsIExQQ1RTVFIgRm9ybWF0LCB2YV9saXN0IEFyZ0xpc3QpOworCisgICAgcHJvdGVjdGVkOgorCUlEaXNwYXRjaCoJbV9wRGlzcGF0Y2g7CisJSFJFU1VMVAkJbV9oUmVzdWx0OworCVVJTlQJCW1fbkVyckFyZzsKKwlFWENFUElORk8JbV9FeGNlcHRpb25JbmZvOworCVZBUklBTlRBUkcJbV9WYXJpYW50UmVzdWx0OworfTsKKworI2lmZGVmIFVOSUNPREUKKyAgICAjZGVmaW5lIEZST01fT0xFX1NUUklORyhzdHIpCQlzdHIKKyAgICAjZGVmaW5lIEZST01fT0xFX1NUUklOR19CVUYoc3RyLGJ1ZikJc3RyCisgICAgI2RlZmluZSBUT19PTEVfU1RSKHN0cikJCQlzdHIKKyAgICAjZGVmaW5lIFRPX09MRV9TVFJfQlVGKHN0cixidWYpCQlzdHIKKyAgICAjZGVmaW5lIE1BWF9PTEVfU1RSCQkJCTEKKyNlbHNlCisgICAgI2RlZmluZSBGUk9NX09MRV9TVFIoc3RyKQkJCUNvbnZlcnRUb0Fuc2koc3RyKQorICAgICNkZWZpbmUgRlJPTV9PTEVfU1RSX0JVRihzdHIsYnVmKQkJQ29udmVydFRvQW5zaUJ1ZihzdHIsYnVmKQorICAgIGNoYXIqIENvbnZlcnRUb0Fuc2kgKE9MRUNIQVIqIHNVbmljb2RlKTsKKyAgICBjaGFyKiBDb252ZXJ0VG9BbnNpQnVmIChPTEVDSEFSKiBzVW5pY29kZSwgY2hhciogQnVmKTsKKyAgICAjZGVmaW5lIFRPX09MRV9TVFIoc3RyKQkJCUNvbnZlcnRUb1VuaWNvZGUoc3RyKQorICAgICNkZWZpbmUgVE9fT0xFX1NUUl9CVUYoc3RyLGJ1ZikJCUNvbnZlcnRUb1VuaWNvZGVCdWYoc3RyLGJ1ZikKKyAgICBPTEVDSEFSKiBDb252ZXJ0VG9Vbmljb2RlIChjaGFyKiBzQXNjaWkpOworICAgIE9MRUNIQVIqIENvbnZlcnRUb1VuaWNvZGVCdWYgKGNoYXIqIHNBc2NpaSwgT0xFQ0hBUiogQnVmKTsKKyAgICAvLyBNYXhpbXVtIGxlbmd0aCBvZiBzdHJpbmcgdGhhdCBjYW4gYmUgY29udmVydGVkIGJldHdlZW4gQW5zaSAmIFVuaWNvZGUKKyAgICAjZGVmaW5lIE1BWF9PTEVfU1RSCQkJCTUwMAorI2VuZGlmCisKKworI2VuZGlmCQkgLy8gX19PTEVBVVRfSF9fCmRpZmYgLS1naXQgYS9zcmMvVmlzVmltL1JFQURNRV9WaXNWaW0udHh0IGIvc3JjL1Zpc1ZpbS9SRUFETUVfVmlzVmltLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTIyYjEyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9SRUFETUVfVmlzVmltLnR4dApAQCAtMCwwICsxLDMyMiBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVmlzdWFsIFN0dWRpbyAtIFZpbSBJbnRlZ3JhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKEMpIDE5OTcgSGVpa28gRXJoYXJkdAorCitWaXNWaW0gaXMgYSBWaXN1YWwgU3R1ZGlvIEFkZC1JbiB0aGF0IGFsbG93cyBWaW0gdG8gYmUgaW50ZWdyYXRlZAorYXMgdGhlIGRlZmF1bHQgdGV4dCBlZGl0b3IuIEl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBWaXN1YWwKK1N0dWRpbyBidWlsdC1pbiBlZGl0b3Igd2hlbiB5b3UgZG91YmxlLWNsaWNrIG9uIGEgZmlsZSBvciBwcmVzcyBGNAorYWZ0ZXIgY29tcGlsaW5nIChpdCB3aWxsIGdvIHRvIHRoZSBwcm9wZXIgbGluZSBpbiB0aGUgVmltIGJ1ZmZlcikuCitUaGUgZmlsZSBjYW4gYmUgbG9hZGVkIGV4Y2x1c2l2ZWx5IGJ5IFZpbSBvciBhZGRpdGlvbmFsbHkgdG8gdGhlCitidWlsdGluIFZpc3VhbCBTdHVkaW8gZWRpdG9yICh0aGlzIG9wdGlvbiBjYW4gYmUgc2V0IGluIHRoZSBWaXNWaW0KK2NvbmZpZ3VyYXRpb24gZGlhbG9nIGluc2lkZSBWaXN1YWwgU3R1ZGlvKS4KK1ZpbSBkb2VzIG5vdCByZXBsYWNlIHRoZSBWaXN1YWwgU3R1ZGlvIGVkaXRvciwgaXQgc3RpbGwgcnVucyBpbiBpdHMKK293biB3aW5kb3cuCisKK1Zpc1ZpbSBpcyBiYXNlZCB1cG9uIFZpc0VtYWNzIGJ5IENocmlzdG9waGVyIFBheW5lCisoQ29weXJpZ2h0IChDKSBDaHJpc3RvcGhlciBQYXluZSAxOTk3KS4KKworQXV0aG9yOiBIZWlrbyBFcmhhcmR0IDxIZWlrby5FcmhhcmR0QG11bmljaC5uZXRzdXJmLmRlPgorQmFzZWQgdXBvbjogVmlzRW1hY3MgYnkgQ2hyaXN0b3BoZXIgUGF5bmUgPHBheW5lY2FAc2FnaWFuLmNvbT4KK1ZlcnNpb246IDEuMAorQ3JlYXRlZDogMjMgT2N0IDE5OTcKK0RhdGU6IDIzIE9jdCAxOTk3CisKK1Zpc1ZpbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK1Zpc1ZpbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKworUmVxdWlyZW1lbnRzCistLS0tLS0tLS0tLS0KKworVmlzVmltIHdvcmtzIHdpdGggdGhlICpPTEUtZW5hYmxlZCogdmVyc2lvbiBvZiBWaW0gdmVyc2lvbiA1LjAgYW5kIGhpZ2hlcgorb25seSEhISAgWW91IG11c3QgZG93bmxvYWQgdGhlIGV4dHJhIGFyY2hpdmUgY29udGFpbmluZyB0aGUgT0xFLWVuYWJsZWQKK2V4ZWN1dGFibGUgZnJvbSB5b3VyIFZpbSBkb3dubG9hZCBzaXRlLiAgV2hlbiBidWlsZGluZyB5b3VyIG93biBWaW0KK2V4ZWN1dGFibGUsIHVzZSB0aGUgaWZfb2xlX3ZjLm1hayBtYWtlZmlsZSAoVmltIDUuMSBhbmQgaGlnaGVyKS4KK1Zpc1ZpbSBuZWVkcyBEZXZTdHVkaW8gNS4wIG9yIGhpZ2hlci4gSXQgZG9lcyBub3Qgd29yayB3aXRoIERldlN0dWRpbyA0LjIuCisKKworSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0KKworMSkgQ2xvc2UgcnVubmluZyBpbnN0YW5jZXMgb2YgRGV2U3R1ZGlvLgorCisyKSBDb3B5IFZpc1ZpbS5kbGwgaW50byBhIGNvbnZlbmllbnQgZGlyZWN0b3J5IGxpa2UgXHZpbSwKKyAgIFx2aW1cbGliLCBvciBcdmltXGFkZGluCisKKzMpIFJlZ2lzdGVyIHRoZSBETEwgdXNpbmcgcmVnc3ZyMzIuZXhlIC4uLiAgKFNraXAgdGhpcyBvbiBXaW5kb3dzIDk1Lzk4KQorICAgRXhhbXBsZToKKyAgID4gY2QgXHZpbVxhZGRpbgorICAgPiByZWdzdnIzMiBWaXNWaW0uZGxsCisgICBPbiBOVCwgeW91IHNob3VsZCBkbyB0aGlzIGZyb20gYW4gYWRtaW5pc3RyYXRvciBhY2NvdW50LgorICAgQmVmb3JlIGluc3RhbGxpbmcgYSBuZXcgdmVyc2lvbiBvZiBWaXNWaW0geW91IHNob3VsZCB1bnJlZ2lzdGVyCisgICB0aGUgb2xkIG9uZSB1c2luZworICAgPiByZWdzdnIzMiAtdW5yZWdpc3RlciBWaXNWaW0uZGxsCisgICBUaGUgYmF0Y2ggZmlsZXMgcmVnaXN0ZXIuYmF0IGFuZCB1bnJlZ2lzdGVyLmJhdCBjYW4gZG8gdGhhdCBmb3IgeW91LgorCiszYSkgSWYgeW91IGRpZG4ndCBkbyB0aGlzIHlldDogUmVnaXN0ZXIgdGhlIE9MRSBndmltOgorICAgPiBndmltIC1yZWdpc3RlcgorCis0KSBTdGFydCBWaXN1YWwgU3R1ZGlvIGFuZCBnbyB0bzoKKyAgICAgIFRvb2xzCisJIEN1c3RvbWl6ZS4uLgorCSAgICBBZGQtSW5zIGFuZCBNYWNybyBGaWxlcworCis1KSBDbGljayBvbiBCcm93c2UsIGFuZCBwb2ludCBWaXN1YWwgU3R1ZGlvIHRvIHlvdXIgVmlzVmltLmRsbCBmaWxlLgorCis2KSBDbGljayB0aGUgY2hlY2tib3ggdG8gaW5kaWNhdGUgdGhhdCB5b3Ugd2FudCB0byB1c2UgdGhlIEFkZC1JbiwgYW5kCisgICBDbG9zZSB0aGUgQ3VzdG9taXplIGRpYWxvZyBib3guCisKKzcpIFlvdSBzaG91bGQgbm90aWNlIHRoZSBWaXNWaW0gVG9vbGJhciB3aXRoIHRoZSBWaW0gSWNvbi4KKyAgIENsaWNrIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSB0b29sYmFyIHRvIGdldCB0byB0aGUgb3B0aW9ucyBkaWFsb2cuCisKKworQ29tcGlsaW5nIFZpc1ZpbQorLS0tLS0tLS0tLS0tLS0tLQorCitUd28gT3B0aW9uczoKKworMSkgTG9hZCB0aGUgVmlzVmltLm1hayBmaWxlIGFzIGEgV29ya3NwYWNlIGluIFZpc3VhbCBTdHVkaW8gYW5kIGNvbXBpbGUKKworMikgVXNlIHRoZSBNU1ZDIGNvbW1hbmQgbGluZSBjb21waWxlcjoKKwl2Y3ZhcnMzMgorCW5tYWtlIC1mIFZpc1ZpbS5tYWsKKworCitVc2luZyBWaXNWaW0KKy0tLS0tLS0tLS0tLQorCitUaGUgVmlzVmltIERMTCBleHBvc2VzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHRoZSB1c2VyLiBUaGVzZSBmdW5jdGlvbnMgYXJlCithY2Nlc3NpYmxlIHVzaW5nIHRoZSB0b29sYmFyIG9yIGJ5IGFzc2lnbmluZyBob3RrZXlzIHRvIHRoZW0gKHNlZSBiZWxvdykuCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdmlzaWJsZSBvbiB0aGUgdG9vbGJhciAoZnJvbSBsZWZ0IHRvIHJpZ2h0KToKKworMS4gVmlzVmltIHNldHRpbmdzIGRpYWxvZworICAgVGhlIHNldHRpbmdzIHlvdSBhZGp1c3QgaGVyZSB3aWxsIGJlIHNhdmVkIGluIHRoZSByZWdpc3RyeSBhbmQKKyAgIHdpbGwgYmUgcmVsb2FkZWQgb24gcHJvZ3JhbSBzdGFydHVwLgorCisyLiBFbmFibGUgVmltCisgICBFbmFibGVzIFZpbSBhcyBWaXN1YWwgU3R1ZGlvIGVkaXRvci4gQ29udHJvbCB3aWxsIGJlIHN3aXRjaGVkIHRvIFZpbSB3aGVuOgorICAgLSBDbGlja2luZyBhIGZpbGUgaW4gdGhlIGZpbGUgdmlldworICAgLSBDbGlja2luZyBhIGNvbXBpbGVyIGVycm9yIG1lc3NhZ2UgbGluZQorICAgLSBVc2luZyB0aGUgJ0ZpbGUtT3BlbicgRGlhbG9nCisgICAtIFNob3dpbmcgdGhlIGN1cnJlbnQgc291cmNlIGxpbmUgd2hlbiBlbmNvdW50ZXJpbmcgYSBkZWJ1Z2dlciBicmVha3BvaW50LgorICAgLSBVc2luZyBGaWxlLU5ldworCiszLiBEaXNhYmxlIFZpbQorICAgVGhlIGludGVybmFsIFZpc3VhbCBTdHVkaW8gZWRpdG9yIHdpbGwgYmUgdXNlZCB0byBlZGl0IGZpbGVzLgorCis0LiBUb2dnbGUgZW5hYmxlIHN0YXRlCisgICBUb2dnbGVzIHRoZSBlbmFibGUgc3RhdGUgb2YgVmlzVmltLiBVc2UgdGhpcyBmdW5jdGlvbiBpZiB5b3Ugd2FudCB0byBoYXZlCisgICBvbmUgYnV0dG9uIG9ubHkgdG8gYWN0aXZhdGUvZGVhY3RpdmF0ZSBWaW0uCisKKzUuIExvYWQgY3VycmVudCBmaWxlIGluIFZpbQorICAgTG9hZHMgdGhlIGZpbGUgc2hvd24gaW4gdGhlIGludGVybmFsIGVkaXRvciBpbnRvIFZpbS4gVXNlIHRoaXMgZnVuY3Rpb24gaWYKKyAgIHlvdSB3YW50IHRoZSBpbnRlcm5hbCBlZGl0b3IgdG8gc3RheSBhY3RpdmUgYW5kIGp1c3QgZWRpdCBvbmUgZmlsZSBpbiBWaW0uCisgICBUaGlzIGNvbW1hbmQgd29ya3MgYWx3YXlzIHdoZXRoZXIgVmltIGlzIGVuYWJsZWQgYXMgZGVmYXVsdCBlZGl0b3Igb3Igbm90LgorCitZb3UgY2Fubm90IHVzZSBEZXZTdHVkaW8ncyBkZWJ1Z2dlciBjb21tYW5kcyBmcm9tIGluc2lkZSBWaW0sIHNvIHlvdSBzaG91bGQKK2Rpc2FibGUgVmltIGJlZm9yZSBydW5uaW5nIHRoZSBkZWJ1Z2dlci4KKworWW91IGNhbiBjdXN0b21pemUgdGhlIFZpbSB0b29sYmFyIGl0c2VsZiBvciBhZGQgdGhlIFZpbSBidXR0b25zIHRvIG90aGVyCit0b29sYmFycy4KK1RvIGhhdmUgZmFzdCBhY2Nlc3MgdG8gdGhlIFZpc1ZpbSBvcHRpb25zIGRpYWxvZyBJIHN1Z2dlc3QgdG8gY3JlYXRlIGtleWJvYXJkCitzaG9ydGN1dHM6CisKKzEpIENob29zZQorICAgICAgVG9vbHMKKwkgQ3VzdG9taXplLi4uCisJICAgIEtleWJvYXJkCisyKSBDaG9vc2UgQ2F0ZWdvcnk6QWRkSW5zIGFuZCBDb21tYW5kczpWaXNWaW0uCiszKSBDaG9vc2UgJ01haW4nIGFzIGVkaXRvciwgZW50ZXIgZWFjaCBob3RrZXkgYW5kIHByZXNzIHRoZSBBc3NpZ24gYnV0dG9uLgorICAgSSBzdWdnZXN0OgorICAgICAgIFZpc1ZpbURpYWxvZ0NtZCAgICBBbHQrU2hpZnQrVgorICAgICAgIFZpc1ZpbUVuYWJsZUNtZCAgICBBbHQrU2hpZnQrRQorICAgICAgIFZpc1ZpbURpc2FibGVDbWQgICBBbHQrU2hpZnQrRAorICAgICAgIFZpc1ZpbVRvZ2dsZUNtZCAgICBBbHQrU2hpZnQrVAorICAgICAgIFZpc1ZpbUxvYWRDbWQgICAgICBBbHQrU2hpZnQrRworNCkgQ2xvc2UgdGhlIGRpYWxvZworCitOb3cgYSB0eXBpY2FsIGRlYnVnZ2luZyBleGFtcGxlOgorCitVc2luZyAiQWx0K1NoaWZ0K2QiIHlvdSB0dXJuIG9mZiBWaW0gYmVmb3JlIHN0YXJ0aW5nIHRoZSBkZWJ1Z2dlci4KK0FmdGVyIGhpdHRpbmcgdGhlIGJyZWFrcG9pbnQgeW91IHNpbmdsZSBzdGVwIHRocm91Z2ggeW91ciBhcHBsaWNhdGlvbgordXNpbmcgdGhlIGludGVybmFsIHNvdXJjZSBjb2RlIGVkaXRvciBhbmQgZXhhbWluZSB2YXJpYWJsZXMuCitXaGVuIHlvdSBzdHVtYmxlIGFjcm9zcyB0aGUgbGluZSB3aXRoIHRoZSBudWxsIHBvaW50ZXIKK2Fzc2lnbm1lbnQsIGp1c3QgcHJlc3MgIkFsdCtTaGlmdCtnIiwgYW5kIGNvcnJlY3QgdGhlIGVycm9yIGluIFZpbS4KK1NhdmUgdGhlIGZpbGUsIHByZXNzIEFsdCtUYWIgdG8gcmV0dXJuIHRvIERldlN0dWRpbyBhbmQgcHJlc3MgRjcgdG8gY29tcGlsZS4KK1RoYXQncyBpdC4KKworCitUcm91Ymxlc2hvb3RpbmcKKy0tLS0tLS0tLS0tLS0tLQorCisxLiBXaGVuIG9wZW5pbmcgYSBmaWxlIGluIERldlN0dWRpbyB0aGUgZmlsZSBpcyBvcGVuZWQgaW4gdGhlIERldlN0dWRpbworICAgZWRpdG9yIGFuZCBpbW1lZGlhdGVseSB2YW5pc2hlcy4gTm8gVmltIHNob3dzIHVwLgorICAgQ2F1c2U6ICAgICAgIFByb2JhYmx5IHlvdSBkb24ndCBoYXZlIHRoZSBPTEUtZW5hYmxlZCBWaW0gb3IgeW91IGRpZG4ndAorCQlyZWdpc3RlciBpdC4KKyAgIEV4cGxhbmF0aW9uOiBWaXNWaW0gaXMgbm90aWZpZWQgYnkgRGV2U3R1ZGlvIGlmIGFuICdvcGVuIGRvY3VtZW50JyBldmVudAorCQlvY2N1cnMuIEl0IHRoZW4gY2xvc2VzIHRoZSBkb2N1bWVudCBpbiB0aGUgaW50ZXJuYWwgZWRpdG9yCisJCWFuZCB0cmllcyB0byBzdGFydCBWaW0uIElmIFZpbSBpc24ndCBwcm9wZXJseSBPTEUtcmVnaXN0ZXJlZCwKKwkJdGhpcyB3b24ndCB3b3JrLgorICAgV29ya2Fyb3VuZDogIERvd25sb2FkIGFuZCBpbnN0YWxsIHRoZSBPTEUtZW5hYmxlIHZlcnNpb24gb2YgVmltIGFuZAorCQlleGVjdXRlICJndmltIC1yZWdpc3RlciIuCisKKzIuIFNvbWV0aW1lcyB3aGVuIGNsaWNraW5nIG9uIGEgZmlsZSwgdGhlIGZpbGUgd29uJ3QgYmUgb3BlbmVkIGJ5IFZpbSBidXQKKyAgIGluc3RlYWQgdGhlIFZpc3VhbCBTdHVkaW8gZWRpdG9yIGNvbWVzIHVwLgorICAgQ2F1c2U6ICAgICAgIFRoZSBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZCBieSB0aGUgRGV2U3R1ZGlvIGVkaXRvci4KKyAgIEV4cGxhbmF0aW9uOiBWaXNWaW0gd29ya3MgYnkgaG9va3MgZXhwb3NlZCBieSBWaXN1YWwgU3R1ZGlvLgorCQlNb3N0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdvcmtzIGZyb20gdGhlIE9wZW5Eb2N1bWVudCBob29rLgorCQlJZiBhIGRvY3VtZW50IGlzIGFscmVhZHkgbG9hZGVkIGluIHRoZSBWaXN1YWwgU3R1ZGlvIGVkaXRvciwKKwkJbm8gJ29wZW4gZG9jdW1lbnQnIGV2ZW50IHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gY2xpY2tpbmcgdGhlCisJCWZpbGUgaW4gdGhlIGZpbGUgbGlzdC4KKyAgIFdvcmthcm91bmQ6ICBDbG9zZSB0aGUgZG9jdW1lbnQgaW4gVmlzdWFsIFN0dWRpbyBmaXJzdC4KKworMy4gSSBjYW4ndCBnZXQgVmlzVmltIHRvIHdvcmsuIEVpdGhlciB0aGUgVmltIHRvb2xiYXIgZG9lcyBub3QgYXBwZWFyIGF0IGFsbAorICAgb3Igd2VpcmQgY3Jhc2hlcyBoYXBwZW4uCisgICBDYXVzZTogICAgICAgVGhlIFZpc3VhbCBTdHVkaW8gaW5zdGFsbGF0aW9uIGlzIG1lc3NlZCB1cC4KKyAgIEV4cGxhbmF0aW9uOiBJIGNhbid0IGdpdmUgeW91IG9uZS4gQXNrIE0kLgorICAgV29ya2Fyb3VuZDogIFJlaW5zdGFsbCBEZXZTdHVkaW8gKEkga25vdyB0aGlzIGlzIGJydXRlLCBidXQgaW4gc29tZSBjYXNlcworCQlpdCBoZWxwZWQpLiBUaGVyZSB3YXMgb25lIGNhc2Ugd2hlcmUgdGhlIHNlcnZpY2UgcGFjayAxIGhhZAorCQl0byBiZSBpbnN0YWxsZWQsIHRvby4KKworNC4gSWYgYW4gaW5zdGFuY2Ugb2YgVmltIGlzIGFscmVhZHkgcnVubmluZywgVmlzVmltIHdpbGwgdXNlIHRoYXQgaW5zdGFuY2UKKyAgIGFuZCBub3Qgc3RhcnQgYSBuZXcgb25lLgorICAgQ2F1c2U6CSBUaGlzIGlzIHByb3BlciBPTEUgYmVoYXZpb3VyCisgICBFeHBsYW5hdGlvbjogIFNvbWUgY2FsbCBpdCBhIGJ1Zywgc29tZSBhIGZlYXR1cmUuIFRoYXQncyBqdXN0IHRoZSB3YXkgT0xFCisJCSB3b3Jrcy4KKworNS4gV2hlbiBiZWluZyBpbiBpbnNlcnQgbW9kZSBpbiBWaW0gYW5kIHNlbGVjdGluZyBhIGZpbGUgaW4gVmlzdWFsIFN0dWRpbywKKyAgIHRoZSBWaW0gY29tbWFuZCA6ZSAuLi4gaXMgaW5zZXJ0ZWQgYXMgdGV4dCBpbnN0ZWFkIG9mIGJlaW5nIGV4ZWN1dGVkLgorICAgQ2F1c2U6CSBZb3UgcHJvYmFibHkga25vdy4uLgorICAgRXhwbGFuYXRpb246ICBUaGUgVmltIE9MRSBhdXRvbWF0aW9uIGludGVyZmFjZSBpbnRlcnByZXRlcyB0aGUgVmlzVmltCisJCSBjb21tYW5kcyBhcyBpZiB0aGV5IHdlcmUgdHlwZWQgaW4gYnkgdGhlIHVzZXIuCisJCSBTbyBpZiB5b3UncmUgaW4gaW5zZXJ0IG1vZGUgVmltIGNvbnNpZGVycyBpdCB0byBiZSB0ZXh0LgorCQkgSSBkZWNpZGVkIGFnYWluc3Qgc2VuZGluZyBhbiBFU0MgYmVmb3JlIHRoZSBjb21tYW5kIGJlY2F1c2UKKwkJIGl0IG1heSBjYXVzZSBhIGJlZXAgb3IgYXQgbGVhc3QgYSBzY3JlZW4gZmxhc2ggd2hlbiBub2ViIGlzCisJCSBzZXQuCisgICBXb3JrYXJvdW5kOgkgR2V0IHVzZWQgdG8gcHJlc3MgRVNDIGJlZm9yZSBzd2l0Y2hpbmcgdG8gRGV2U3R1ZGlvLgorCis2LiBJJ20gdGlyZWQgb2YgVmlzVmltIGJ1dCBJIGNhbid0IGdldCByaWQgb2YgaXQuIEkgY2FuJ3QgZGVsZXRlIGl0IGluCisgICBUb29scy1DdXN0b21pemUtQWRkLUlucy4KKyAgIENhdXNlOgkgWW91IGNhbid0IGRlbGV0ZSBhbiBpdGVtIHlvdSBvbmNlIGFkZGVkIHRvIHRoZSBhZGQtaW5zCisJCSBsaXN0IGJveC4KKyAgIEV4cGxhbmF0aW9uOiAgTSQganVzdCBkaWRuJ3QgcHV0IGEgJ2RlbGV0ZScgYnV0dG9uIGluIHRoZSBkaWFsb2cgYm94LgorCQkgVW5mb3J0dW5hdGVseSB0aGVyZSBpcyBubyBERUwga2V5IGFjY2VsbGVyYXRvciBhcyB3ZWxsLi4uCisgICBXb3JrYXJvdW5kOgkgWW91IGNhbid0IGtpbGwgaXQsIGJ1dCB5b3UgY2FuIGtub2NrIGl0IG91dDoKKwkJIDEuIFVuY2hlY2sgdGhlIGNoZWNrIGJveCBpbiBmcm9udCBvZiAnVmltIERldmVsb3BlciBTdHVkaW8KKwkJICAgIEFkZC1pbicuCisJCSAyLiBDbG9zZSBWaXN1YWwgU3R1ZGlvLgorCQkgMy4gRGVsZXRlIFZpc1ZpbS5kbGwgb3IgbW92ZSBpdCBzb21ld2hlcmUgaXQgY2FuJ3QgYmUgZm91bmQuCisJCSA0LiBSdW4gVmlzdWFsIFN0dWRpby4KKwkJIDUuIFRvb2xzIC0+IEN1cnNvbWl6ZSAtPkFkZC1pbnMgYW5kIE1hY3JvLUZpbGVzLgorCQkgNi4gQSBtZXNzYWdlIGFwcGVhcnM6CisJCSAgICAiLi4uL1Zpc1ZpbS5kbGwiICJUaGlzIGFkZC1pbiBubyBsb25nZXIgZXhpc3RzLiAgSXQgd2lsbAorCQkgICAgbm8gbG9uZ2VyIGJlIGRpc3BsYXllZC4iCisJCSBUaGF0J3MgaXQhCisKKworQ2hhbmdlIGhpc3RvcnkKKy0tLS0tLS0tLS0tLS0tCisKKzEuMGEgdG8gMS4wCistLS0tLS0tLS0tLQorCistIEFsbCBzZXR0aW5ncyBpbiB0aGUgVmlzVmltIGRpYWxvZyBhcmUgcmVtZW1iZXJlZCBiZXR3ZWVuIERldlN0dWRpbyBzZXNzaW9ucworICBieSBrZWVwaW5nIHRoZW0gaW4gdGhlIHJlZ2lzdHJ5IChIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0d2FyZVxWaW1cVmlzVmltKS4KKy0gQWRkZWQgYW4gb3B0aW9uIHRvIGRvIGEgOmNkIGJlZm9yZSBvcGVuaW5nIHRoZSBmaWxlIChoYXZpbmcgYSBmaWxlIG9wZW5lZAorICBieSBjbGlja2luZyBpdCBidXQgZmluZGluZyBvdXQgdG8gYmUgc3RpbGwgaW4gQzpcV2luZG93c1xzeXN0ZW0gd2hlbiB0cnlpbmcgdG8KKyAgb3BlbiBhbm90aGVyIGZpbGUgYnkgIjplIiBjYW4gYmUgYW5ub3lpbmcpLiBDaGFuZ2UgZGlyZWN0b3J5IGNhbiBiZQorICBkb25lIHRvIHRoZSBzb3VyY2UgZmlsZSdzIGRpcmVjdG9yeSBvciBpdCdzIHBhcmVudCBkaXJlY3RvcnkuCistIEFkZGVkIHNvbWUgZXhwbGFuYXRpb25zIHRvIHRoZSBlcnJvciBtZXNzYWdlIGZvciB0aGUgQ09fRV9DTEFTU1NUUklORyBlcnJvcgorICAoIlVzZSBPTEUgVmltIGFuZCBtYWtlIHN1cmUgdG8gcmVnaXN0ZXIuLi4iKS4KKworMS4wIHRvIDEuMWEKKy0tLS0tLS0tLS0tCisKKy0gVGhlIFZpc1ZpbSB0b29sYmFyIGJ1dHRvbiBub3cgc2hvd3MgdGhlIG5ldyBWaW0gaWNvbiBpbnN0ZWFkIG9mIHRoZSBvbGQgb25lLgorLSBNYWRlIHNvbWUgY2hhbmdlcyB0byB0aGUgZG9jdW1lbnRhdGlvbiwgYWRkZWQgdGhlIHRyb3VibGVzaG9vdGluZyBjaGFwdGVyCisgIGFuZCBUb0RvIGxpc3QuCistIEZpbGUtTmV3LSogbm93IGludm9rZXMgVmltIGluc3RlYWQgb2YgdGhlIGJ1aWx0aW4gZWRpdG9yIGlmIGVuYWJsZWQuCisKKzEuMSB0byAxLjFiCistLS0tLS0tLS0tLQorCistIEV4dGVuZGVkIHRoZSBWaXNWaW0gdG9vbGJhciB0byBoYXZlIG11bHRpcGxlIGJ1dHRvbnMgaW5zdGVhZCBvZiBvbmUuCistIE1vdmVkIHRoZSBlbmFibGUvZGlzYWJsZSBjb21tYW5kcyBmcm9tIHRoZSBzZXR0aW5ncyBkaWFsb2cgdG8gdGhlIHRvb2xiYXIuCistIEFkZGVkIHRoZSB0b2dnbGUgZW5hYmxlL2Rpc2FibGUgY29tbWFuZAorLSBBZGRlZCB0aGUgJ2xvYWQgY3VycmVudCBmaWxlJyBjb21tYW5kLgorCisxLjFiIHRvIDEuMgorLS0tLS0tLS0tLS0KKworTm8gbmV3IGZlYXR1cmVzLCBqdXN0IHNvbWUgZmluZSB0dW5pbmc6CisKKy0gQ2hhbmdlZCB0aGUgR1VJRCBvZiB0aGUgVmlzVmltIE9MRSBpbnRlcmZhY2UgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggYQorICB2ZXJzaW9uIG9mIFZpc0VtYWNzIG9yIFZpc1ZpbGUgb24gdGhlIHNhbWUgY29tcHV0ZXIgKEd1eSBHYXNjb2lnbmUpCistIEZpeGVkIGEgYnVnIGNhdXNlZCBieSBhIGJ1ZyBpbiB0aGUgRGV2ZWxvcGVyIFN0dWRpbyBhZGQtaW4gY29kZSBnZW5lcmF0b3IKKyAgKENsYXJrIE1vcmdhbikKKy0gRml4ZWQgYSBtZW1vcnkgbGVhayAoQ2xhcmsgTW9yZ2FuKQorLSBBZGRlZCBhbiBvcHRpb24gaW4gdGhlIFZpc1ZpbSBkaWFsb2cgdG8gcHJlcGVuZCBFU0MgYmVmb3JlIHRoZSBmaXJzdCBjb21tYW5kCisgIHRoYXQgaXMgc2VudCB0byBWaW0uIFRoaXMgd2lsbCBhdm9pZCBpbnNlcnRpbmcgdGhlIGNvbW1hbmQgYXMgdGV4dCB3aGVuIFZpbQorICBpcyBzdGlsbCBpbiBpbnNlcnQgbW9kZS4KKy0gQW4gOnVwZGF0ZSBjb21tYW5kIGlzIHNlbnQgdG8gVmltIGJlZm9yZSBhbnkgb3RoZXIgY29tbWFuZCB0byB1cGRhdGUgdGhlCisgIGN1cnJlbnQgZmlsZSBpZiBpdCBpcyBtb2RpZmllZCwgb3IgZWxzZSB0aGUgZm9sbG93aW5nIDpjZCBvciA6ZSBjb21tYW5kIHdpbGwgZmFpbC4KKworMS4yIHRvIDEuM2EKKy0tLS0tLS0tLS0tCisKKy0gRml4ZWQgYSBidWcgY2F1c2VkIGJ5IGEgbWlzc2luZyBFbmFibGVNb2RlbGVzcygpIGZ1bmN0aW9uIGNhbGwgaW4gVmltTG9hZCgpLgorICBUaGlzIHNlZW1zIHRvIHJlZHVjZSBWaXNWaW0gY3Jhc2hpbmcgRGV2U3R1ZGlvIG9uIHNvbWUgc3lzdGVtcyAoaXQKKyAgb2NjYXNpb25hbGx5IHN0aWxsIHNlZW1zIHRvIGhhcHBlbiwgYnV0IGl0J3MgbW9yZSBzdGFibGUgbm93KS4KKyAgKFZpbmNlIE5lZ3JpKQorLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgbmV3IENUUkwtXCBDVFJMLU4gY29tbWFuZCBvZiBWaW0gNS40YS4KKyAgVGhpcyBwcmV2ZW50cyBWaW0gZnJvbSBiZWVwaW5nIHdoZW4gYSBWaXNWaW0gY29tbWFuZCBpcyBleGVjdXRlZCBhbiBWaW0gaXMKKyAgbm90IGluIGluc2VydCBtb2RlLgorCisKK1RvRG8gTGlzdAorLS0tLS0tLS0tCisKK1AxIGlzIGhpZ2hlc3QgcHJpb3JpdHksIFAxMCBsb3dlc3QKKworUDkgIFN3aXRjaGluZyB0byBEZXZTdHVkaW8gdXNpbmcgQUxULVRBQiBtYXkgZ2V0IGFubm95aW5nLiBXb3VsZCBiZSBuaWNlIHRvCisgICAgaGF2ZSB0aGUgb3B0aW9uIHRvIG1hcCBBY3RpdmF0ZUFwcGxpY2F0aW9uKCJWaXN1YWwgU3R1ZGlvIikgaW4gVmltLgorICAgIFZpbSBETExzIHdvdWxkIHNvbHZlIHRoYXQgcHJvYmxlbS4KKworUDggIEV4ZWN1dGUgOnRhZyBjb21tYW5kIGluIFZpbSBmb3Igd29yZCB1bmRlciBjdXJzb3IgaW4gRGV2U3R1ZGlvCisKK1A3ICBDb250cm9sbGluZyB0aGUgVmlzdWFsIFN0dWRpbyBEZWJ1Z2dlciBmcm9tIGluc2lkZSBWaW0KKyAgICBTZWUgbWVzc2FnZSBhYm92ZS4gQWxzbyBhICdEZWJ1ZycgaGlnaGxpZ2ggZ3JvdXAgYW5kIGEKKyAgICBjb21tYW5kIHRvIGhpZ2hsaWdodCBhIGNlcnRhaW4gbGluZSB3b3VsZCBiZSBuZWNlc3NhcnkuCisKK1A2ICBQcm92aWRlIGFuIG9wdGlvbiB0byBvcGVuIHRoZSBjdXJyZW50IGZpbGUgaW4gVmlzVmltIGluCisgICAgVmlzdWFsIFN0dWRpbyBlZGl0b3IKKyAgICBTYW1lIGFzIGFib3ZlIG1lc3NhZ2UuIEEga2luZCBvZiB0d28gd2F5IE9MRSBhdXRvbWF0aW9uIHdvdWxkIGhhdmUgdG8gYmUKKyAgICBlc3RhYmxpc2hlZCBiZXR3ZWVuIFZpc1ZpbSBhbmQgVmltLiBBbHNvIGEgJ0RlYnVnJyBoaWdobGlnaHQgZ3JvdXAgYW5kIGEKKyAgICBjb21tYW5kIHRvIGhpZ2hsaWdodCBhIGNlcnRhaW4gbGluZSB3b3VsZCBiZSBuZWNlc3NhcnkuCisKKworS25vd24gUHJvYmxlbXMKKy0tLS0tLS0tLS0tLS0tCisKKy0gT2NjYXNpb25hbCBtZW1vcnkgY29ycnVwdGlvbnMgaW4gRGV2U3R1ZGlvIG1heSBhcHBlYXIgb24gc29tZSBzeXN0ZW1zLgorICBSZWluc3RhbGxpbmcgRGV2U3R1ZGlvIGhlbHBlZCBpbiBzb21lIGNhc2VzLgorICBUaGUgY2F1c2Ugb2YgdGhlc2UgY3Jhc2hlcyBpcyB1bmNsZWFyOyB0aGVyZSBpcyBubyB3YXkgdG8gZGVidWcgdGhpcy4KKyAgUmVjb21waWxpbmcgVmlzVmltIHdpdGggRGV2U3R1ZGlvIFNQMyBkaWRuJ3QgaGVscC4KKyAgSSBhc3N1bWUgaXQncyBhIHByb2JsZW0gZGVlcCBpbnNpZGUgdGhlIERldlN0dWRpbyBhZGQtaW4gT0xFIGludGVyZmFjZXMuCisgIFRoaXMgd2lsbCBob3BlZnVsbHkgYmUgZml4ZWQgd2l0aCBEZXZTdHVkaW8gNi4KKworCitIYXZlIGZ1biEKKworSGVpa28gRXJoYXJkdAorSGVpa28uRXJoYXJkdEBtdW5pY2gubmV0c3VyZi5kZQorCmRpZmYgLS1naXQgYS9zcmMvVmlzVmltL1JlZy5jcHAgYi9zcmMvVmlzVmltL1JlZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzNzhlNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9WaXNWaW0vUmVnLmNwcApAQCAtMCwwICsxLDU2IEBACisjaW5jbHVkZSAic3RkYWZ4LmgiCisKKy8vIFJldHVybnMga2V5IGZvciBIS0VZX0NVUlJFTlRfVVNFUlwiU29mdHdhcmUiXENvbXBhbnlcQXBwTmFtZQorLy8gY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24ndCBleGlzdAorLy8gcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBjYWxsIFJlZ0Nsb3NlS2V5KCkgb24gdGhlIHJldHVybmVkIEhLRVkKKy8vCitIS0VZIEdldEFwcEtleSAoY2hhciogQXBwTmFtZSkKK3sKKwlIS0VZIGhBcHBLZXkgPSBOVUxMOworCUhLRVkgaFNvZnRLZXkgPSBOVUxMOworCWlmIChSZWdPcGVuS2V5RXggKEhLRVlfQ1VSUkVOVF9VU0VSLCAiU29mdHdhcmUiLCAwLCBLRVlfV1JJVEUgfCBLRVlfUkVBRCwKKwkJJmhTb2Z0S2V5KSA9PSBFUlJPUl9TVUNDRVNTKQorCXsKKwkJRFdPUkQgRHVtbXk7CisJCVJlZ0NyZWF0ZUtleUV4IChoU29mdEtleSwgQXBwTmFtZSwgMCwgUkVHX05PTkUsCisJCQlSRUdfT1BUSU9OX05PTl9WT0xBVElMRSwgS0VZX1dSSVRFIHwgS0VZX1JFQUQsIE5VTEwsCisJCQkmaEFwcEtleSwgJkR1bW15KTsKKwl9CisJaWYgKGhTb2Z0S2V5KQorCQlSZWdDbG9zZUtleSAoaFNvZnRLZXkpOworCisJcmV0dXJuIGhBcHBLZXk7Cit9CisKKy8vIFJldHVybnMga2V5IGZvcgorLy8gSEtFWV9DVVJSRU5UX1VTRVJcIlNvZnR3YXJlIlxSZWdpc3RyeUtleVxBcHBOYW1lXFNlY3Rpb24KKy8vIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisvLyByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvIGNhbGwgUmVnQ2xvc2VLZXkgKCkgb24gdGhlIHJldHVybmVkIEhLRVkKKy8vCitIS0VZIEdldFNlY3Rpb25LZXkgKEhLRVkgaEFwcEtleSwgTFBDVFNUUiBTZWN0aW9uKQoreworCUhLRVkgaFNlY3Rpb25LZXkgPSBOVUxMOworCURXT1JEIER1bW15OworCVJlZ0NyZWF0ZUtleUV4IChoQXBwS2V5LCBTZWN0aW9uLCAwLCBSRUdfTk9ORSwKKwkJUkVHX09QVElPTl9OT05fVk9MQVRJTEUsIEtFWV9XUklURXxLRVlfUkVBRCwgTlVMTCwKKwkJJmhTZWN0aW9uS2V5LCAmRHVtbXkpOworCXJldHVybiBoU2VjdGlvbktleTsKK30KKworaW50IEdldFJlZ2lzdHJ5SW50IChIS0VZIGhTZWN0aW9uS2V5LCBMUENUU1RSIEVudHJ5LCBpbnQgRGVmYXVsdCkKK3sKKwlEV09SRCBWYWx1ZTsKKwlEV09SRCBUeXBlOworCURXT1JEIENvdW50ID0gc2l6ZW9mIChEV09SRCk7CisJaWYgKFJlZ1F1ZXJ5VmFsdWVFeCAoaFNlY3Rpb25LZXksIChMUFRTVFIpIEVudHJ5LCBOVUxMLCAmVHlwZSwKKwkJCSAgICAgKExQQllURSkgJlZhbHVlLCAmQ291bnQpID09IEVSUk9SX1NVQ0NFU1MpCisJCXJldHVybiBWYWx1ZTsKKwlyZXR1cm4gRGVmYXVsdDsKK30KKworYm9vbCBXcml0ZVJlZ2lzdHJ5SW50IChIS0VZIGhTZWN0aW9uS2V5LCBjaGFyKiBFbnRyeSwgaW50IG5WYWx1ZSkKK3sKKwlyZXR1cm4gUmVnU2V0VmFsdWVFeCAoaFNlY3Rpb25LZXksIEVudHJ5LCBOVUxMLCBSRUdfRFdPUkQsCisJCShMUEJZVEUpICZuVmFsdWUsIHNpemVvZiAoblZhbHVlKSkgPT0gRVJST1JfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL1Zpc1ZpbS9SZWdpc3Rlci5iYXQgYi9zcmMvVmlzVmltL1JlZ2lzdGVyLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWVmNTBiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9SZWdpc3Rlci5iYXQKQEAgLTAsMCArMSBAQAorcmVnc3ZyMzIuZXhlIHZpc3ZpbS5kbGwKZGlmZiAtLWdpdCBhL3NyYy9WaXNWaW0vUmVzb3VyY2UuaCBiL3NyYy9WaXNWaW0vUmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDk4YjM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9SZXNvdXJjZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8ve3tOT19ERVBFTkRFTkNJRVN9fQorLy8gTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gZ2VuZXJhdGVkIGluY2x1ZGUgZmlsZS4KKy8vIFVzZWQgYnkgVmlzVmltLnJjCisvLworI2RlZmluZSBJRFNfVklTVklNX0xPTkdOQU1FCQkxCisjZGVmaW5lIElEU19WSVNWSU1fREVTQ1JJUFRJT04JCTIKKyNkZWZpbmUgSURTX0NNRF9ESUFMT0cJCQkzCisjZGVmaW5lIElEU19DTURfRU5BQkxFCQkJNAorI2RlZmluZSBJRFNfQ01EX0RJU0FCTEUJCQk1CisjZGVmaW5lIElEU19DTURfVE9HR0xFCQkJNgorI2RlZmluZSBJRFNfQ01EX0xPQUQJCQk3CisjZGVmaW5lIElEUl9UT09MQkFSX01FRElVTQkJMTI4CisjZGVmaW5lIElEUl9UT09MQkFSX0xBUkdFCQkxMjkKKyNkZWZpbmUgSUREX0FERElOTUFJTgkJCTEzMAorI2RlZmluZSBJRENfREVWU1RVRElPX0VESVRPUgkJMTAwMAorI2RlZmluZSBJRENfQ0RfU09VUkNFX1BBVEgJCTEwMDEKKyNkZWZpbmUgSURDX0NEX1NPVVJDRV9QQVJFTlQJCTEwMDIKKyNkZWZpbmUgSURDX0NEX05PTkUJCQkxMDAzCisKKy8vIE5leHQgZGVmYXVsdCB2YWx1ZXMgZm9yIG5ldyBvYmplY3RzCisvLworI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKKyNpZm5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworI2RlZmluZSBfQVBTX05FWFRfUkVTT1VSQ0VfVkFMVUUJMTMxCisjZGVmaW5lIF9BUFNfTkVYVF9DT01NQU5EX1ZBTFVFCQkzMjc3MQorI2RlZmluZSBfQVBTX05FWFRfQ09OVFJPTF9WQUxVRQkJMTAwNAorI2RlZmluZSBfQVBTX05FWFRfU1lNRURfVkFMVUUJCTEwMQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9WaXNWaW0vU3RkQWZ4LmNwcCBiL3NyYy9WaXNWaW0vU3RkQWZ4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGY2ZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9TdGRBZnguY3BwCkBAIC0wLDAgKzEsNiBAQAorLy8gU3RkYWZ4LmNwcCA6IHNvdXJjZSBmaWxlIHRoYXQgaW5jbHVkZXMganVzdCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMKKy8vCVZpc0VtYWNzLnBjaCB3aWxsIGJlIHRoZSBwcmUtY29tcGlsZWQgaGVhZGVyCisvLwlzdGRhZngub2JqIHdpbGwgY29udGFpbiB0aGUgcHJlLWNvbXBpbGVkIHR5cGUgaW5mb3JtYXRpb24KKworI2luY2x1ZGUgInN0ZGFmeC5oIgorI2luY2x1ZGUgImF0bGltcGwuY3BwIgpkaWZmIC0tZ2l0IGEvc3JjL1Zpc1ZpbS9TdGRBZnguaCBiL3NyYy9WaXNWaW0vU3RkQWZ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiZmRjMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9WaXNWaW0vU3RkQWZ4LmgKQEAgLTAsMCArMSw3MyBAQAorLy8gU3RkYWZ4LmggOiBpbmNsdWRlIGZpbGUgZm9yIHN0YW5kYXJkIHN5c3RlbSBpbmNsdWRlIGZpbGVzLAorLy8gIG9yIHByb2plY3Qgc3BlY2lmaWMgaW5jbHVkZSBmaWxlcyB0aGF0IGFyZSB1c2VkIGZyZXF1ZW50bHksIGJ1dAorLy8gICAgICBhcmUgY2hhbmdlZCBpbmZyZXF1ZW50bHkKKy8vCisKKyNpZiAhZGVmaW5lZChBRlhfU1REQUZYX0hfX0FDNzI2NzBFXzI5NzdfMTFEMV9CMkYzXzAwNjAwODA0MDc4MF9fSU5DTFVERURfKQorI2RlZmluZSBBRlhfU1REQUZYX0hfX0FDNzI2NzBFXzI5NzdfMTFEMV9CMkYzXzAwNjAwODA0MDc4MF9fSU5DTFVERURfCisKKyNkZWZpbmUgVkNfRVhUUkFMRUFOCQkvLyBFeGNsdWRlIHJhcmVseS11c2VkIHN0dWZmIGZyb20gV2luZG93cyBoZWFkZXJzCisKKyNpbmNsdWRlIDxhZnh3aW4uaD4JICAgIC8vIE1GQyBjb3JlIGFuZCBzdGFuZGFyZCBjb21wb25lbnRzCisjaW5jbHVkZSA8YWZ4ZGlzcC5oPgorCisjaW5jbHVkZSA8YXRsYmFzZS5oPgorLy9Zb3UgbWF5IGRlcml2ZSBhIGNsYXNzIGZyb20gQ0NvbU1vZHVsZSBhbmQgdXNlIGl0IGlmIHlvdSB3YW50IHRvIG92ZXJyaWRlCisvL3NvbWV0aGluZywgYnV0IGRvIG5vdCBjaGFuZ2UgdGhlIG5hbWUgb2YgX01vZHVsZQorZXh0ZXJuIENDb21Nb2R1bGUgX01vZHVsZTsKKworI2luY2x1ZGUgPGF0bGNvbS5oPgorCisvLyBEZXZlbG9wZXIgU3R1ZGlvIE9iamVjdCBNb2RlbAorI2luY2x1ZGUgPE9iak1vZGVsXGFkZGF1dG8uaD4KKyNpbmNsdWRlIDxPYmpNb2RlbFxhcHBkZWZzLmg+CisjaW5jbHVkZSA8T2JqTW9kZWxcYXBwYXV0by5oPgorI2luY2x1ZGUgPE9iak1vZGVsXGJsZGRlZnMuaD4KKyNpbmNsdWRlIDxPYmpNb2RlbFxibGRhdXRvLmg+CisjaW5jbHVkZSA8T2JqTW9kZWxcdGV4dGRlZnMuaD4KKyNpbmNsdWRlIDxPYmpNb2RlbFx0ZXh0YXV0by5oPgorI2luY2x1ZGUgPE9iak1vZGVsXGRiZ2RlZnMuaD4KKyNpbmNsdWRlIDxPYmpNb2RlbFxkYmdhdXRvLmg+CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBEZWJ1Z2dpbmcgc3VwcG9ydAorCisvLyBVc2UgVkVSSUZZX09LIGFyb3VuZCBhbGwgY2FsbHMgdG8gdGhlIERldmVsb3BlciBTdHVkaW8gb2JqZWN0cyB3aGljaAorLy8gIHlvdSBleHBlY3QgdG8gcmV0dXJuIFNfT0suCisvLyBJbiBERUJVRyBidWlsZHMgb2YgeW91ciBhZGQtaW4sIFZFUklGWV9PSyBkaXNwbGF5cyBhbiBBU1NFUlQgZGlhbG9nIGJveAorLy8gIGlmIHRoZSBleHByZXNzaW9uIHJldHVybnMgYW4gSFJFU1VMVCBvdGhlciB0aGFuIFNfT0suICBJZiB0aGUgSFJFU1VMVAorLy8gIGlzIGEgc3VjY2VzcyBjb2RlLCB0aGUgQVNTRVJUIGJveCB3aWxsIGRpc3BsYXkgdGhhdCBIUkVTVUxULiAgSWYgaXQKKy8vICBpcyBhIGZhaWx1cmUgY29kZSwgdGhlIEFTU0VSVCBib3ggd2lsbCBkaXNwbGF5IHRoYXQgSFJFU1VMVCBwbHVzIHRoZQorLy8gIGVycm9yIGRlc2NyaXB0aW9uIHN0cmluZyBwcm92aWRlZCBieSB0aGUgb2JqZWN0IHdoaWNoIHJhaXNlZCB0aGUgZXJyb3IuCisvLyBJbiBSRVRBSUwgYnVpbGRzIG9mIHlvdXIgYWRkLWluLCBWRVJJRllfT0sganVzdCBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24KKy8vICBhbmQgaWdub3JlcyB0aGUgcmV0dXJuZWQgSFJFU1VMVC4KKworI2lmZGVmIF9ERUJVRworCit2b2lkIEdldExhc3RFcnJvckRlc2NyaXB0aW9uIChDQ29tQlNUUiAmIGJzdHIpOwkvLyBEZWZpbmVkIGluIFZpc1ZpbS5jcHAKKyNkZWZpbmUgVkVSSUZZX09LKGYpIFwKKwl7IFwKKwkJSFJFU1VMVCBociA9IChmKTsgXAorCQlpZiAoaHIgIT0gU19PSykgXAorCQl7IFwKKwkJCWlmIChGQUlMRUQoaHIpKSBcCisJCQl7IFwKKwkJCQlDQ29tQlNUUiBic3RyOyBcCisJCQkJR2V0TGFzdEVycm9yRGVzY3JpcHRpb24oYnN0cik7IFwKKwkJCQlfUlBURjIoX0NSVF9BU1NFUlQsICJPYmplY3QgY2FsbCByZXR1cm5lZCAlbHhcblxuJVMiLCBociwgKEJTVFIpIGJzdHIpOyBcCisJCQl9IFwKKwkJCWVsc2UgXAorCQkJCV9SUFRGMShfQ1JUX0FTU0VSVCwgIk9iamVjdCBjYWxsIHJldHVybmVkICVseCIsIGhyKTsgXAorCQl9IFwKKwl9CisKKyNlbHNlIC8vX0RFQlVHCisKKyNkZWZpbmUgVkVSSUZZX09LKGYpIChmKTsKKworI2VuZGlmIC8vX0RFQlVHCisKKy8ve3tBRlhfSU5TRVJUX0xPQ0FUSU9OfX0KKy8vIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIHdpbGwgaW5zZXJ0IGFkZGl0aW9uYWwgZGVjbGFyYXRpb25zIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgcHJldmlvdXMgbGluZS4KKworI2VuZGlmIC8vICFkZWZpbmVkKEFGWF9TVERBRlhfSF9fQUM3MjY3MEVfMjk3N18xMUQxX0IyRjNfMDA2MDA4MDQwNzgwX19JTkNMVURFRCkKZGlmZiAtLWdpdCBhL3NyYy9WaXNWaW0vVW5SZWdpc3QuYmF0IGIvc3JjL1Zpc1ZpbS9VblJlZ2lzdC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhMTA1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9WaXNWaW0vVW5SZWdpc3QuYmF0CkBAIC0wLDAgKzEgQEAKK3JlZ3N2cjMyLmV4ZSAtdW5yZWdpc3RlciB2aXN2aW0uZGxsCmRpZmYgLS1naXQgYS9zcmMvVmlzVmltL1Zpc1ZpbS5jcHAgYi9zcmMvVmlzVmltL1Zpc1ZpbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyOTI1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9WaXNWaW0vVmlzVmltLmNwcApAQCAtMCwwICsxLDE1MiBAQAorLy8gVmlzVmltLmNwcCA6IERlZmluZXMgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciB0aGUgRExMLgorLy8KKworI2luY2x1ZGUgInN0ZGFmeC5oIgorI2luY2x1ZGUgPGluaXRndWlkLmg+CisjaW5jbHVkZSAiVmlzVmltLmgiCisjaW5jbHVkZSAiRFNBZGRJbi5oIgorI2luY2x1ZGUgIkNvbW1hbmRzLmgiCisKKyNpZmRlZiBfREVCVUcKKyNkZWZpbmUgbmV3IERFQlVHX05FVworI3VuZGVmIFRISVNfRklMRQorc3RhdGljIGNoYXIgVEhJU19GSUxFW10gPSBfX0ZJTEVfXzsKKworI2VuZGlmCisKK0NDb21Nb2R1bGUgX01vZHVsZTsKKworQkVHSU5fT0JKRUNUX01BUCAoT2JqZWN0TWFwKQorT0JKRUNUX0VOVFJZIChDTFNJRF9EU0FkZEluLCBDRFNBZGRJbikKK0VORF9PQkpFQ1RfTUFQICgpCisKK2NsYXNzIENWaXNWaW1BcHAgOiBwdWJsaWMgQ1dpbkFwcAoreworICAgIHB1YmxpYzoKKwlDVmlzVmltQXBwICgpOworCisJLy97e0FGWF9WSVJUVUFMKENWaXNWaW1BcHApCisgICAgcHVibGljOgorCXZpcnR1YWwgQk9PTCBJbml0SW5zdGFuY2UgKCk7CisJdmlydHVhbCBpbnQgRXhpdEluc3RhbmNlICgpOworCS8vfX1BRlhfVklSVFVBTAorCisJLy97e0FGWF9NU0coQ1Zpc1ZpbUFwcCkKKwkvL319QUZYX01TRworCURFQ0xBUkVfTUVTU0FHRV9NQVAgKCkKK307CisKK0JFR0lOX01FU1NBR0VfTUFQIChDVmlzVmltQXBwLCBDV2luQXBwKQorLy97e0FGWF9NU0dfTUFQKENWaXNWaW1BcHApCisvL319QUZYX01TR19NQVAKK0VORF9NRVNTQUdFX01BUCAoKQorCisvLyBUaGUgb25lIGFuZCBvbmx5IENWaXNWaW1BcHAgb2JqZWN0CitDVmlzVmltQXBwIHRoZUFwcDsKKworQ1Zpc1ZpbUFwcDo6Q1Zpc1ZpbUFwcCAoKQoreworfQorCitCT09MIENWaXNWaW1BcHA6OkluaXRJbnN0YW5jZSAoKQoreworCV9Nb2R1bGUuSW5pdCAoT2JqZWN0TWFwLCBtX2hJbnN0YW5jZSk7CisJcmV0dXJuIENXaW5BcHA6OkluaXRJbnN0YW5jZSAoKTsKK30KKworaW50IENWaXNWaW1BcHA6OkV4aXRJbnN0YW5jZSAoKQoreworCV9Nb2R1bGUuVGVybSAoKTsKKwlyZXR1cm4gQ1dpbkFwcDo6RXhpdEluc3RhbmNlICgpOworfQorCisvLyBTcGVjaWFsIGVudHJ5IHBvaW50cyByZXF1aXJlZCBmb3IgaW5wcm9jIHNlcnZlcnMKKy8vCisKK1NUREFQSSBEbGxHZXRDbGFzc09iamVjdCAoUkVGQ0xTSUQgcmNsc2lkLCBSRUZJSUQgcmlpZCwgTFBWT0lEICogcHB2KQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKwlyZXR1cm4gX01vZHVsZS5HZXRDbGFzc09iamVjdCAocmNsc2lkLCByaWlkLCBwcHYpOworfQorCitTVERBUEkgRGxsQ2FuVW5sb2FkTm93ICh2b2lkKQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKwlyZXR1cm4gKEFmeERsbENhblVubG9hZE5vdyAoKSA9PSBTX09LICYmIF9Nb2R1bGUuR2V0TG9ja0NvdW50ICgpID09IDApCisJCT8gU19PSyA6IFNfRkFMU0U7Cit9CisKKy8vIEJ5IGV4cG9ydGluZyBEbGxSZWdpc3RlclNlcnZlciwgeW91IGNhbiB1c2UgcmVnc3ZyMzIuZXhlCisvLworU1REQVBJIERsbFJlZ2lzdGVyU2VydmVyICh2b2lkKQoreworCUFGWF9NQU5BR0VfU1RBVEUgKEFmeEdldFN0YXRpY01vZHVsZVN0YXRlICgpKTsKKwlIUkVTVUxUIGhSZXM7CisKKwkvLyBSZWdpc3RlcnMgb2JqZWN0LCB0eXBlbGliIGFuZCBhbGwgaW50ZXJmYWNlcyBpbiB0eXBlbGliCisJaFJlcyA9IF9Nb2R1bGUuUmVnaXN0ZXJTZXJ2ZXIgKFRSVUUpOworCWlmIChGQUlMRUQgKGhSZXMpKQorCQkvLyBIYWNrOiBXaGVuIHRoaXMgZmFpbHMgd2UgbWlnaHQgYmUgYSBub3JtYWwgdXNlciwgd2hpbGUgdGhlCisJCS8vIGFkbWluIGFscmVhZHkgcmVnaXN0ZXJlZCB0aGUgbW9kdWxlLiAgUmV0dXJuaW5nIFNfT0sgdGhlbgorCQkvLyBtYWtlcyBpdCB3b3JrLiAgV2hlbiB0aGUgbW9kdWxlIHdhcyBuZXZlciByZWdpc3RlcmVkIGl0CisJCS8vIHdpbGwgc29vbiBmYWlsIGluIGFub3RoZXIgd2F5LgorCQkvLyBvbGQgY29kZTogcmV0dXJuIGhSZXM7CisJCXJldHVybiBTX09LOworCisJX0FUTF9PQkpNQVBfRU5UUlkgKnBFbnRyeSA9IF9Nb2R1bGUubV9wT2JqTWFwOworCUNSZWdLZXkga2V5OworCUxPTkcgbFJlcyA9IGtleS5PcGVuIChIS0VZX0NMQVNTRVNfUk9PVCwgX1QgKCJDTFNJRCIpKTsKKworCWlmIChsUmVzID09IEVSUk9SX1NVQ0NFU1MpCisJeworCQlVU0VTX0NPTlZFUlNJT047CisJCUxQT0xFU1RSIGxwT2xlU3RyOworCisJCVN0cmluZ0Zyb21DTFNJRCAoKnBFbnRyeS0+cGNsc2lkLCAmbHBPbGVTdHIpOworCQlMUFRTVFIgbHBzeiA9IE9MRTJUIChscE9sZVN0cik7CisKKwkJbFJlcyA9IGtleS5PcGVuIChrZXksIGxwc3opOworCQlpZiAobFJlcyA9PSBFUlJPUl9TVUNDRVNTKQorCQl7CisJCQlDU3RyaW5nIHN0ckRlc2NyaXB0aW9uOworCisJCQlzdHJEZXNjcmlwdGlvbi5Mb2FkU3RyaW5nIChJRFNfVklTVklNX0RFU0NSSVBUSU9OKTsKKwkJCWtleS5TZXRLZXlWYWx1ZSAoX1QgKCJEZXNjcmlwdGlvbiIpLCBzdHJEZXNjcmlwdGlvbik7CisJCX0KKwkJQ29UYXNrTWVtRnJlZSAobHBPbGVTdHIpOworCX0KKworCWlmIChsUmVzICE9IEVSUk9SX1NVQ0NFU1MpCisJCWhSZXMgPSBIUkVTVUxUX0ZST01fV0lOMzIgKGxSZXMpOworCisJcmV0dXJuIGhSZXM7CisKK30KKworLy8gRGxsVW5yZWdpc3RlclNlcnZlciAtIFJlbW92ZXMgZW50cmllcyBmcm9tIHRoZSBzeXN0ZW0gcmVnaXN0cnkKKy8vCitTVERBUEkgRGxsVW5yZWdpc3RlclNlcnZlciAodm9pZCkKK3sKKwlBRlhfTUFOQUdFX1NUQVRFIChBZnhHZXRTdGF0aWNNb2R1bGVTdGF0ZSAoKSk7CisKKwlIUkVTVUxUIGhSZXMgPSBTX09LOworCV9Nb2R1bGUuVW5yZWdpc3RlclNlcnZlciAoKTsKKwlyZXR1cm4gaFJlczsKK30KKworCisvLyBEZWJ1Z2dpbmcgc3VwcG9ydAorCisvLyBHZXRMYXN0RXJyb3JEZXNjcmlwdGlvbiBpcyB1c2VkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVkVSSUZZX09LCisvLyAgbWFjcm8sIGRlZmluZWQgaW4gc3RkYWZ4LmguCisKKyNpZmRlZiBfREVCVUcKKwordm9pZCBHZXRMYXN0RXJyb3JEZXNjcmlwdGlvbiAoQ0NvbUJTVFIgJiBic3RyKQoreworCUNDb21QdHIgPCBJRXJyb3JJbmZvID4gcEVycm9ySW5mbzsKKwlpZiAoR2V0RXJyb3JJbmZvICgwLCAmcEVycm9ySW5mbykgPT0gU19PSykKKwkJcEVycm9ySW5mby0+R2V0RGVzY3JpcHRpb24gKCZic3RyKTsKK30KKworI2VuZGlmIC8vX0RFQlVHCmRpZmYgLS1naXQgYS9zcmMvVmlzVmltL1Zpc1ZpbS5kZWYgYi9zcmMvVmlzVmltL1Zpc1ZpbS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzZDQ3OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9WaXNWaW0vVmlzVmltLmRlZgpAQCAtMCwwICsxLDExIEBACis7IFZpc1ZpbS5kZWYgOiBEZWNsYXJlcyB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgZm9yIHRoZSBETEwuCisKK0xJQlJBUlkgICAgICAiVklTVklNIgorREVTQ1JJUFRJT04gICdWSVNWSU0gV2luZG93cyBEeW5hbWljIExpbmsgTGlicmFyeScKKworRVhQT1JUUworICAgIDsgRXhwbGljaXQgZXhwb3J0cyBjYW4gZ28gaGVyZQorCURsbENhblVubG9hZE5vdyBQUklWQVRFCisJRGxsR2V0Q2xhc3NPYmplY3QgUFJJVkFURQorCURsbFJlZ2lzdGVyU2VydmVyIFBSSVZBVEUKKwlEbGxVbnJlZ2lzdGVyU2VydmVyIFBSSVZBVEUKZGlmZiAtLWdpdCBhL3NyYy9WaXNWaW0vVmlzVmltLmRsbCBiL3NyYy9WaXNWaW0vVmlzVmltLmRsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTdiNDE3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9WaXNWaW0uZGxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9WaXNWaW0vVmlzVmltLmggYi9zcmMvVmlzVmltL1Zpc1ZpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NTk3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvVmlzVmltL1Zpc1ZpbS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8vIFZpc1ZJTS5oIDogbWFpbiBoZWFkZXIgZmlsZSBmb3IgdGhlIFZpc1ZpbSBETEwKKy8vCisKKyNpZiAhZGVmaW5lZChBRlhfVklTVklNX0hfX0FDNzI2NzBCXzI5NzdfMTFEMV9CMkYzXzAwNjAwODA0MDc4MF9fSU5DTFVERURfKQorI2RlZmluZSBBRlhfVklTVklNX0hfX0FDNzI2NzBCXzI5NzdfMTFEMV9CMkYzXzAwNjAwODA0MDc4MF9fSU5DTFVERURfCisKKyNpZm5kZWYgX19BRlhXSU5fSF9fCisjZXJyb3IgaW5jbHVkZSAnc3RkYWZ4LmgnIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBmaWxlIGZvciBQQ0gKKyNlbmRpZgorCisjaW5jbHVkZSAicmVzb3VyY2UuaCIJCS8vIE1haW4gc3ltYm9scworCisjaW5jbHVkZSA8T2JqTW9kZWxcYWRkZ3VpZC5oPgorI2luY2x1ZGUgPE9iak1vZGVsXGFwcGd1aWQuaD4KKyNpbmNsdWRlIDxPYmpNb2RlbFxibGRndWlkLmg+CisjaW5jbHVkZSA8T2JqTW9kZWxcdGV4dGd1aWQuaD4KKyNpbmNsdWRlIDxPYmpNb2RlbFxkYmdndWlkLmg+CisKKy8vCisvLyBQcm90b3R5cGVzCisvLworCitIS0VZIEdldEFwcEtleSAoY2hhciogQXBwTmFtZSk7CitIS0VZIEdldFNlY3Rpb25LZXkgKEhLRVkgaEFwcEtleSwgTFBDVFNUUiBTZWN0aW9uKTsKK2ludCBHZXRSZWdpc3RyeUludCAoSEtFWSBoU2VjdGlvbktleSwgTFBDVFNUUiBFbnRyeSwgaW50IERlZmF1bHQpOworYm9vbCBXcml0ZVJlZ2lzdHJ5SW50IChIS0VZIGhTZWN0aW9uS2V5LCBjaGFyKiBFbnRyeSwgaW50IG5WYWx1ZSk7Cit2b2lkIFJlcG9ydExhc3RFcnJvciAoSFJFU1VMVCBFcnIpOwordm9pZCBSZXBvcnRJbnRlcm5hbEVycm9yIChjaGFyKiBGY3QpOworCisvL3t7QUZYX0lOU0VSVF9MT0NBVElPTn19CisvLyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyB3aWxsIGluc2VydCBhZGRpdGlvbmFsIGRlY2xhcmF0aW9ucyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIHByZXZpb3VzIGxpbmUuCisKKyNlbmRpZiAvLyAhZGVmaW5lZChBRlhfVklTVklNX0hfX0FDNzI2NzBCXzI5NzdfMTFEMV9CMkYzXzAwNjAwODA0MDc4MF9fSU5DTFVERUQpCmRpZmYgLS1naXQgYS9zcmMvVmlzVmltL1Zpc1ZpbS5tYWsgYi9zcmMvVmlzVmltL1Zpc1ZpbS5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhOWNmNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9WaXNWaW0vVmlzVmltLm1hawpAQCAtMCwwICsxLDIwNSBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgTk1BS0UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNC4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorIworIyBXaGVuICAgICAgIFdobyAgICAgICBXaGF0CisjIDE5OTktMDgtMDEgQW5vbiAgICAgIE9yaWdpbmFsIFZpc1ZpbS5kc3AKKyMgMjAwMS0wOC0wOCBXLkJyaXNjb2UgQmFjay1wb3J0ZWQgdG8gYSBjb25kZW5zZWQgVkM0IE1ha2VmaWxlCisjCQkgICAgICAgUmVkdWNlZCBpbnRlci1kZXBlbmRlbmN5IG9mIFJlbGVhc2UgYW5kIERlYnVnIGJ1aWxkcy4KKyMKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMgorCishSUYgIiQoQ0ZHKSIgPT0gIiIKK0NGRz1WaXNWaW0gLSBXaW4zMiBSZWxlYXNlCishTUVTU0FHRSBObyBjb25maWd1cmF0aW9uIHNwZWNpZmllZC4gIERlZmF1bHRpbmcgdG8gVmlzVmltIC0gV2luMzIgUmVsZWFzZS4KKyFFTkRJRiAKKworIUlGICIkKENGRykiICE9ICJWaXNWaW0gLSBXaW4zMiBSZWxlYXNlIiAmJiAiJChDRkcpIiAhPSAiVmlzVmltIC0gV2luMzIgRGVidWciCishTUVTU0FHRSBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gIiQoQ0ZHKSIgc3BlY2lmaWVkLgorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0Ugb24gdGhpcyBtYWtlZmlsZQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJWaXNWaW0ubWFrIiBDRkc9IlZpc1ZpbSAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIlZpc1ZpbSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgIlZpc1ZpbSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorIUVSUk9SIEFuIGludmFsaWQgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQuCishRU5ESUYgCisKKyFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgorTlVMTD0KK0RFTF9UUkVFID0gcm1kaXIgL3MgL3EKKyFFTFNFIAorTlVMTD1udWwKK0RFTF9UUkVFID0gZGVsdHJlZSAveQorIUVORElGIAorIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgVGFyZ2V0X0xhc3RfU2Nhbm5lZCAiVmlzVmltIC0gV2luMzIgUmVsZWFzZSIKKyMgUFJPUCBVc2VfTUZDIDIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKK0xJTkszMj1saW5rLmV4ZQorCishSUYgICIkKENGRykiID09ICJWaXNWaW0gLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLlxSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi5cUmVsZWFzZSIKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitPVVRESVI9LlxSZWxlYXNlCitJTlRESVI9LlxSZWxlYXNlCitDUFBfT0JKUz0uXFJlbGVhc2UvCisKKyMgQUREIENQUCAvTUQgL08yIC9EICJOREVCVUciIC9JLlxSZWxlYXNlCitDUFBfUFJPSj0gL01EIC9PMiAvRCAiTkRFQlVHIiAvSS5cUmVsZWFzZQorIyBBREQgUlNDIC9kICJOREVCVUcKK1JTQ19QUk9KPSAvZCAiTkRFQlVHIgorIyBBREQgTElOSzMyIC9wZGI6bm9uZQorTElOSzMyX0ZMQUdTPS9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiVmlzVmltIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuXERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi5cRGVidWciCisjIFBST1AgVGFyZ2V0X0RpciAiIgorT1VURElSPS5cRGVidWcKK0lOVERJUj0uXERlYnVnCitDUFBfT0JKUz0uXERlYnVnLworCisjIEFERCBDUFAgL01EZCAvR20gL1ppIC9PZCAvRCAiX0RFQlVHIiAvSS5cRGVidWcKK0NQUF9QUk9KPSAvTURkIC9HbSAvWmkgL09kIC9EICJfREVCVUciIC9JLlxEZWJ1ZyAvRmQiJChJTlRESVIpLyIKK01UTF9QUk9KPSAvRCAiX0RFQlVHIgorIyBBREQgUlNDIC9kICJfREVCVUcKK1JTQ19QUk9KPSAvZCAiX0RFQlVHIgorIyBBREQgTElOSzMyIC9kZWJ1ZyAvcGRidHlwZTpzZXB0IC9wZGI6Ii5cRGVidWcvVmlzVmltLnBkYiIKK0xJTkszMl9GTEFHUz0vZGVidWcgL3BkYnR5cGU6c2VwdCAvcGRiOiIkKE9VVERJUikvVmlzVmltLnBkYiIKKworIUVORElGIAorCisjIEFERCBDUFAgICAgICAgICAgICAvbm9sb2dvIC9XMyAvR1ggL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJfV0lORExMIiAvRCAiX0FGWERMTCIgL0QgIl9VU1JETEwiIC9jCitDUFBfUFJPSj0kKENQUF9QUk9KKSAvbm9sb2dvIC9XMyAvR1ggL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJfV0lORExMIiAvRCAiX0FGWERMTCIgL0QgIl9VU1JETEwiIC9jIC9GbyIkKElOVERJUikvIgorIyBBREQgUlNDICAgICAgICAgICAgL2wgMHg0MDkgL2QgIl9BRlhETEwiCitSU0NfUFJPSj0kKFJTQ19QUk9KKSAvbCAweDQwOSAvZCAiX0FGWERMTCIgL2ZvIiQoSU5URElSKS9WaXNWaW0ucmVzIgorIyBBREQgTElOSzMyICAgICAgICAgICAgICAgICAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYgL2luY3JlbWVudGFsOm5vCitMSU5LMzJfRkxBR1M9JChMSU5LMzJfRkxBR1MpIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NlwKKyAvaW5jcmVtZW50YWw6bm8gL2RlZjoiLlxWaXNWaW0uZGVmIlwKKyAvb3V0OiIkKE9VVERJUikvVmlzVmltLmRsbCIgL2ltcGxpYjoiJChPVVRESVIpL1Zpc1ZpbS5saWIiCisKK0FMTCA6ICIkKE9VVERJUilcVmlzVmltLmRsbCIKKworQ0xFQU4gOiAKKwktQGlmIGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgJChERUxfVFJFRSkgIiQoSU5URElSKSIKKworIiQoT1VURElSKSIgOgorICAgIGlmIG5vdCBleGlzdCAiJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIkKE9VVERJUikiCisKK0xJTkszMl9PQkpTPSBcCisJIiQoSU5URElSKS9WaXNWaW0ucmVzIiBcCisJIiQoSU5URElSKS9WaXNWaW0ub2JqIiBcCisJIiQoSU5URElSKS9TdGRBZngub2JqIiBcCisJIiQoSU5URElSKS9SZWcub2JqIiBcCisJIiQoSU5URElSKS9EU0FkZEluLm9iaiIgXAorCSIkKElOVERJUikvT2xlQXV0Lm9iaiIgXAorCSIkKElOVERJUikvQ29tbWFuZHMub2JqIgorCisiJChPVVRESVIpXFZpc1ZpbS5kbGwiIDogIiQoT1VURElSKSIgIi5cVmlzVmltLmRlZiIgJChMSU5LMzJfT0JKUykKKyAgICAkKExJTkszMikgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCisKK3sufS5jeyQoQ1BQX09CSlMpfS5vYmo6CisgICAkKENQUCkgJChDUFBfUFJPSikgJDwgIAorCit7Ln0uY3BweyQoQ1BQX09CSlMpfS5vYmo6CisgICAkKENQUCkgJChDUFBfUFJPSikgJDwgIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIlZpc1ZpbSAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIlZpc1ZpbSAtIFdpbjMyIERlYnVnIgorCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXFZpc1ZpbS5jcHAKKworIiQoSU5URElSKVxWaXNWaW0ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxWaXNWaW0uZGVmCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxWaXNWaW0ub2RsCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIlZpc1ZpbSAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBJZ25vcmVfRGVmYXVsdF9Ub29sIDEKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkCisKKyIkKElOVERJUilcVmlzVmltLnRsYiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwltaWRsIC9ub2xvZ28gL21rdHlwbGliMjAzIC93aW4zMiAvdGxiIFZpc1ZpbS50bGIgL2ggVlNWVHlwZXMuaCAuXFZpc1ZpbS5vZGwgL291dCAuXFJlbGVhc2UgL0QgIk5ERUJVRyIKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJWaXNWaW0gLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIElnbm9yZV9EZWZhdWx0X1Rvb2wgMQorIyBCZWdpbiBDdXN0b20gQnVpbGQKKworIiQoSU5URElSKVxWaXNWaW0udGxiIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCW1pZGwgL25vbG9nbyAvbWt0eXBsaWIyMDMgL3dpbjMyIC90bGIgVmlzVmltLnRsYiAvaCBWU1ZUeXBlcy5oIC5cVmlzVmltLm9kbCAvb3V0IC5cRGVidWcgL0QgIl9ERUJVRyIKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cU3RkQWZ4LmNwcAorCisiJChJTlRESVIpXFN0ZEFmeC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXFZpc1ZpbS5yYworCisiJChJTlRESVIpXFZpc1ZpbS5yZXMiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKElOVERJUilcVmlzVmltLnRsYiIKKyAkKFJTQykgJChSU0NfUFJPSikgL2kgIiQoSU5URElSKSIgJChTT1VSQ0UpCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXFJlZy5jcHAKKworIiQoSU5URElSKVxSZWcub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxEU0FkZEluLmNwcAorCisiJChJTlRESVIpXERTQWRkSW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxPbGVBdXQuY3BwCisKKyIkKElOVERJUilcT2xlQXV0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cQ29tbWFuZHMuY3BwCisKKyIkKElOVERJUilcQ29tbWFuZHMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9zcmMvVmlzVmltL1Zpc1ZpbS5vZGwgYi9zcmMvVmlzVmltL1Zpc1ZpbS5vZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5MWI4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9WaXNWaW0vVmlzVmltLm9kbApAQCAtMCwwICsxLDYxIEBACisvLyBWaXNWaW0ub2RsIDogdHlwZSBsaWJyYXJ5IHNvdXJjZSBmb3IgVmlzVmltLmRsbAorCisvLyBUaGlzIGZpbGUgd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhlIE1ha2UgVHlwZSBMaWJyYXJ5IChta3R5cGxpYikgdG9vbCB0bworLy8gcHJvZHVjZSB0aGUgdHlwZSBsaWJyYXJ5IChWaXNWaW0udGxiKS4KKworWwl1dWlkKEFDNzI2NzA3LTI5NzctMTFEMS1CMkYzLTAwNjAwODA0MDc4MCksIHZlcnNpb24oMS4wKSwKKwloZWxwc3RyaW5nICgiVmlzVmltIERldmVsb3BlciBTdHVkaW8gQWRkLWluIikgXQorbGlicmFyeSBWaXNWaW0KK3sKKwlpbXBvcnRsaWIoInN0ZG9sZTMyLnRsYiIpOworCWltcG9ydGxpYigiZGV2c2hsLmRsbCIpOworCWltcG9ydGxpYigiaWRlXGRldmRiZy5wa2ciKTsKKworCisJLy8gIER1YWwgaW50ZXJmYWNlIGZvciBDQ29tbWFuZHMKKwkvLworCS8vICBBbGwgY29tbWFuZHMgdGhhdCB5b3VyIGFkZC1pbiBhZGRzIHRvIERldlN0dWRpbworCS8vICAgbXVzdCBhcHBlYXIgaW4gdGhpcyBpbnRlcmZhY2UuICBZb3UgbWF5IHVzZSB0aGUKKwkvLyAgIENsYXNzVmlldyB0byBhZGQgbWV0aG9kcyB0byB0aGlzIGludGVyZmFjZSwgd2hpY2gKKwkvLyAgIHdpbGwgY2F1c2Ugc3R1YiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhvc2UgbWV0aG9kcyB0bworCS8vICAgYXBwZWFyIGluIHlvdXIgQ0NvbW1hbmRzIGNsYXNzLgorCisJWwl1dWlkKEFDNzI2NzAzLTI5NzctMTFEMS1CMkYzLTAwNjAwODA0MDc4MCksCisJCW9sZWF1dG9tYXRpb24sCisJCWR1YWwKKwldCisKKwlpbnRlcmZhY2UgSUNvbW1hbmRzIDogSURpc3BhdGNoCisJeworCQkvLyBtZXRob2RzCisJCVtpZCgxKV0KKwkJSFJFU1VMVCBWaXNWaW1EaWFsb2coKTsKKwkJSFJFU1VMVCBWaXNWaW1FbmFibGUoKTsKKwkJSFJFU1VMVCBWaXNWaW1EaXNhYmxlKCk7CisJCUhSRVNVTFQgVmlzVmltVG9nZ2xlKCk7CisJCUhSRVNVTFQgVmlzVmltTG9hZCgpOworCX07CisKKwkvLyAgQ2xhc3MgaW5mb3JtYXRpb24gZm9yIENDb21tYW5kcworCisJWyB1dWlkKEFDNzI2NzA0LTI5NzctMTFEMS1CMkYzLTAwNjAwODA0MDc4MCkgXQorCWNvY2xhc3MgQ29tbWFuZHMKKwl7CisJCVtkZWZhdWx0XSBpbnRlcmZhY2UgSUNvbW1hbmRzOworCX07CisKKwlbIGhpZGRlbiwgdXVpZChBQzcyNjcwNS0yOTc3LTExRDEtQjJGMy0wMDYwMDgwNDA3ODApIF0KKwljb2NsYXNzIEFwcGxpY2F0aW9uRXZlbnRzCisJeworCQlbZGVmYXVsdF0gaW50ZXJmYWNlIElBcHBsaWNhdGlvbkV2ZW50czsKKwl9CisKKwlbIGhpZGRlbiwgdXVpZChBQzcyNjcwNi0yOTc3LTExRDEtQjJGMy0wMDYwMDgwNDA3ODApIF0KKwljb2NsYXNzIERlYnVnZ2VyRXZlbnRzCisJeworCQlbZGVmYXVsdF0gaW50ZXJmYWNlIElEZWJ1Z2dlckV2ZW50czsKKwl9CisKKwkvL3t7QUZYX0FQUEVORF9PREx9fQorCS8vfX1BRlhfQVBQRU5EX09ETH19Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL1Zpc1ZpbS9WaXNWaW0ucmMgYi9zcmMvVmlzVmltL1Zpc1ZpbS5yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjI3ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL1Zpc1ZpbS9WaXNWaW0ucmMKQEAgLTAsMCArMSwxOTkgQEAKKy8vTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gZ2VuZXJhdGVkIHJlc291cmNlIHNjcmlwdC4KKy8vCisjaW5jbHVkZSAicmVzb3VyY2UuaCIKKworI2RlZmluZSBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAyIHJlc291cmNlLgorLy8KKyNpbmNsdWRlICJhZnhyZXMuaCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyN1bmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBFbmdsaXNjaCAoVVNBKSByZXNvdXJjZXMKKworI2lmICFkZWZpbmVkKEFGWF9SRVNPVVJDRV9ETEwpIHx8IGRlZmluZWQoQUZYX1RBUkdfRU5VKQorI2lmZGVmIF9XSU4zMgorTEFOR1VBR0UgTEFOR19FTkdMSVNILCBTVUJMQU5HX0VOR0xJU0hfVVMKKyNwcmFnbWEgY29kZV9wYWdlKDEyNTIpCisjZW5kaWYgLy9fV0lOMzIKKworI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVEVYVElOQ0xVREUKKy8vCisKKzEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUgCitCRUdJTgorICAgICJyZXNvdXJjZS5oXDAiCitFTkQKKworMiBURVhUSU5DTFVERSBESVNDQVJEQUJMRSAKK0JFR0lOCisgICAgIiNpbmNsdWRlICIiYWZ4cmVzLmgiIlxyXG4iCisgICAgIlwwIgorRU5ECisKKzMgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUgCitCRUdJTgorICAgICIjZGVmaW5lIF9BRlhfTk9fU1BMSVRURVJfUkVTT1VSQ0VTXHJcbiIKKyAgICAiI2RlZmluZSBfQUZYX05PX09MRV9SRVNPVVJDRVNcclxuIgorICAgICIjZGVmaW5lIF9BRlhfTk9fVFJBQ0tFUl9SRVNPVVJDRVNcclxuIgorICAgICIjZGVmaW5lIF9BRlhfTk9fUFJPUEVSVFlfUkVTT1VSQ0VTXHJcbiIKKyAgICAiXHJcbiIKKyAgICAiI2lmICFkZWZpbmVkKEFGWF9SRVNPVVJDRV9ETEwpIHx8IGRlZmluZWQoQUZYX1RBUkdfRU5VKVxyXG4iCisgICAgIiNpZmRlZiBfV0lOMzJcclxuIgorICAgICJMQU5HVUFHRSA5LCAxXHJcbiIKKyAgICAiI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MilcclxuIgorICAgICIjZW5kaWZcclxuIgorICAgICIjaW5jbHVkZSAiImFmeHJlcy5yYyIiICAgICAgICAgLy8gU3RhbmRhcmQgY29tcG9uZW50c1xyXG4iCisgICAgIiNlbmRpZlxyXG4iCisgICAgIjEgVFlQRUxJQiAiIlZpc1ZpbS50bGIiIlxyXG4iCisgICAgIlwwIgorRU5ECisKKyNlbmRpZiAgICAvLyBBUFNUVURJT19JTlZPS0VECisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBCaXRtYXAKKy8vCisKK0lEUl9UT09MQkFSX01FRElVTSAgICAgIEJJVE1BUCAgTU9WRUFCTEUgUFVSRSAgICJyZXNcXFRvb2xiYXJNLmJtcCIKK0lEUl9UT09MQkFSX0xBUkdFICAgICAgIEJJVE1BUCAgTU9WRUFCTEUgUFVSRSAgICJyZXNcXFRvb2xiYXJMLmJtcCIKKworI2lmbmRlZiBfTUFDCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFZlcnNpb24KKy8vCisKK1ZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTworIEZJTEVWRVJTSU9OIDEsMSwwLDEKKyBQUk9EVUNUVkVSU0lPTiAxLDEsMCwxCisgRklMRUZMQUdTTUFTSyAweDNmTAorI2lmZGVmIF9ERUJVRworIEZJTEVGTEFHUyAweDFMCisjZWxzZQorIEZJTEVGTEFHUyAweDBMCisjZW5kaWYKKyBGSUxFT1MgMHg0TAorIEZJTEVUWVBFIDB4MkwKKyBGSUxFU1VCVFlQRSAweDBMCitCRUdJTgorICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKKyAgICBCRUdJTgorICAgICAgICBCTE9DSyAiMDQwOTA0YjAiCisgICAgICAgIEJFR0lOCisgICAgICAgICAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiXDAiCisgICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIlZpc1ZpbSBETExcMCIKKyAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICIxLCAxLCAwLCAxXDAiCisgICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgIlZpc1ZpbVwwIgorICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMTk5OFwwIgorICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAiVmlzVmltLkRMTFwwIgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlZpc1ZpbSBEeW5hbWljIExpbmsgTGlicmFyeVwwIgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIjEsIDEsIDAsIDFcMCIKKyAgICAgICAgRU5ECisgICAgRU5ECisgICAgQkxPQ0sgIlZhckZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAxMjAwCisgICAgRU5ECitFTkQKKworI2VuZGlmICAgIC8vICFfTUFDCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBEaWFsb2cKKy8vCisKK0lERF9BRERJTk1BSU4gRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxNzgsIDEyNAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIlZpbSBBZGQtSW4gMS40IgorRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIKK0JFR0lOCisgICAgQ09OVFJPTCAgICAgICAgICImT3BlbiBmaWxlIGluIERldlN0dWRpbyBlZGl0b3Igc2ltdWx0YW5lb3VzbHkiLAorICAgICAgICAgICAgICAgICAgICBJRENfREVWU1RVRElPX0VESVRPUiwiQnV0dG9uIixCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IAorICAgICAgICAgICAgICAgICAgICBXU19UQUJTVE9QLDcsNywxNTMsMTAKKyAgICBHUk9VUEJPWCAgICAgICAgIkN1cnJlbnQgZGlyZWN0b3J5IixJRENfU1RBVElDLDcsMzUsMTY0LDU4LFdTX0dST1VQCisgICAgQ09OVFJPTCAgICAgICAgICJTZXQgdG8gJnNvdXJjZSBmaWxlIHBhdGgiLElEQ19DRF9TT1VSQ0VfUEFUSCwiQnV0dG9uIiwKKyAgICAgICAgICAgICAgICAgICAgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QLDE3LDQ5LDg1LDEwCisgICAgQ09OVFJPTCAgICAgICAgICJTZXQgdG8gJnBhcmVudCBkaXJlY3Rvcnkgb2Ygc291cmNlIGZpbGUgcGF0aCIsCisgICAgICAgICAgICAgICAgICAgIElEQ19DRF9TT1VSQ0VfUEFSRU5ULCJCdXR0b24iLEJTX0FVVE9SQURJT0JVVFRPTiwxNyw2MywKKyAgICAgICAgICAgICAgICAgICAgMTQzLDEwCisgICAgQ09OVFJPTCAgICAgICAgICJEbyAmbm90IGNoYW5nZSIsSURDX0NEX05PTkUsIkJ1dHRvbiIsQlNfQVVUT1JBRElPQlVUVE9OLAorICAgICAgICAgICAgICAgICAgICAxNyw3OCw2MywxMAorICAgIERFRlBVU0hCVVRUT04gICAiJk9rIixJRE9LLDcsMTAyLDc0LDE0LFdTX0dST1VQCisgICAgUFVTSEJVVFRPTiAgICAgICImQ2FuY2VsIixJRENBTkNFTCw5NywxMDIsNzQsMTQsV1NfR1JPVVAKK0VORAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gREVTSUdOSU5GTworLy8KKworI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKK0dVSURFTElORVMgREVTSUdOSU5GTyBESVNDQVJEQUJMRSAKK0JFR0lOCisgICAgSUREX0FERElOTUFJTiwgRElBTE9HCisgICAgQkVHSU4KKyAgICAgICAgTEVGVE1BUkdJTiwgNworICAgICAgICBSSUdIVE1BUkdJTiwgMTcxCisgICAgICAgIFRPUE1BUkdJTiwgNworICAgICAgICBCT1RUT01NQVJHSU4sIDExNworICAgIEVORAorRU5ECisjZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gU3RyaW5nIFRhYmxlCisvLworCitTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKK0JFR0lOCisgICAgSURTX1ZJU1ZJTV9MT05HTkFNRSAgICAgIlZpbSBEZXZlbG9wZXIgU3R1ZGlvIEFkZC1JbiIKKyAgICBJRFNfVklTVklNX0RFU0NSSVBUSU9OICAiQWxsb3dzIGludGVncmF0aW9uIG9mIFZpbSBhcyB0aGUgdGV4dCBlZGl0b3IgaW4gRGV2ZWxvcGVyIFN0dWRpby4iCisgICAgSURTX0NNRF9ESUFMT0cgICAgICAgICAgIlxuVmltIEFkZC1JbiBEaWFsb2dcbkRpc3BsYXlzIHRoZSBvcHRpb25zIGRpYWxvZyBib3ggb2YgdGhlIFZpbSBBZGQtSW5cblZpbSBBZGQtSW4gRGlhbG9nIgorICAgIElEU19DTURfRU5BQkxFICAgICAgICAgICJcbkVuYWJsZSBWaW0gQWRkLUluXG5FbmFibGVzIFZpbSBhcyBWaXN1YWwgU3R1ZGlvIGVkaXRvclxuRW5hYmxlIFZpbSBBZGQtSW4iCisgICAgSURTX0NNRF9ESVNBQkxFICAgICAgICAgIlxuRGlzYWJsZSBWaW0gQWRkLUluXG5EaXNhYmxlcyBWaW0gYXMgVmlzdWFsIFN0dWRpbyBlZGl0b3JcbkRpc2FibGUgVmltIEFkZC1JbiIKKyAgICBJRFNfQ01EX1RPR0dMRSAgICAgICAgICAiXG5Ub2dnbGUgVmltIEFkZC1JbiBTdGF0ZVxuVG9nZ2xlcyB0aGUgZW5hYmxlIHN0YXRlIG9mIHRoZSBWaW0gQWRkLUluXG5Ub2dnbGUgVmltIEFkZC1JbiBTdGF0ZSIKKyAgICBJRFNfQ01EX0xPQUQgICAgICAgICAgICAiXG5WaW0gQWRkLUluIExvYWQgRG9jdW1lbnRcbkxvYWRzIHRoZSBjdXJyZW50IGRvY3VtZW50IGluIFZpbVxuVmltIEFkZC1JbiBMb2FkIERvY3VtZW50IgorRU5ECisKKyNlbmRpZiAgICAvLyBFbmdsaXNjaCAoVVNBKSByZXNvdXJjZXMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworCisjaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCisvLworI2RlZmluZSBfQUZYX05PX1NQTElUVEVSX1JFU09VUkNFUworI2RlZmluZSBfQUZYX05PX09MRV9SRVNPVVJDRVMKKyNkZWZpbmUgX0FGWF9OT19UUkFDS0VSX1JFU09VUkNFUworI2RlZmluZSBfQUZYX05PX1BST1BFUlRZX1JFU09VUkNFUworCisjaWYgIWRlZmluZWQoQUZYX1JFU09VUkNFX0RMTCkgfHwgZGVmaW5lZChBRlhfVEFSR19FTlUpCisjaWZkZWYgX1dJTjMyCitMQU5HVUFHRSA5LCAxCisjcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQorI2VuZGlmCisjaW5jbHVkZSAiYWZ4cmVzLnJjIiAgICAgICAgIC8vIFN0YW5kYXJkIGNvbXBvbmVudHMKKyNlbmRpZgorMSBUWVBFTElCICJWaXNWaW0udGxiIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2VuZGlmICAgIC8vIG5vdCBBUFNUVURJT19JTlZPS0VECisKZGlmZiAtLWdpdCBhL3NyYy9WaXNWaW0vVnNSZWFkTWUudHh0IGIvc3JjL1Zpc1ZpbS9Wc1JlYWRNZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4MGM2YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9WaXNWaW0vVnNSZWFkTWUudHh0CkBAIC0wLDAgKzEsOTEgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgIERFVkVMT1BFUiBTVFVESU8gQURELUlOIDogVmlzVmltCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitUaGUgQWRkLWluIFdpemFyZCBoYXMgY3JlYXRlZCB0aGlzIFZpc1ZpbSBETEwgZm9yIHlvdS4gIFRoaXMgRExMIG5vdCBvbmx5CitkZW1vbnN0cmF0ZXMgdGhlIGJhc2ljcyBvZiBjcmVhdGluZyBhIERldmVsb3BlciBTdHVkaW8gYWRkLWluLCBidXQgaXQgaXMgYWxzbworYSBzdGFydGluZyBwb2ludCBmb3Igd3JpdGluZyB5b3VyIG93biBhZGQtaW4uCisKK0FuIGFkZC1pbiBtYWlubHkgZG9lcyB0d28gdGhpbmdzLgorCSgxKSBJdCBhZGRzIGNvbW1hbmRzIHRvIERldmVsb3BlciBTdHVkaW8sIHdoaWNoIGNhbiB0aGVuIGJlIHRpZWQKKwkgICAgdG8ga2V5c3Ryb2tlcyBvciB0b29sYmFyIGJ1dHRvbnMgYnkgdGhlIHVzZXIgb3IgcHJvZ3JhbW1hdGljYWxseQorCQlieSB0aGUgYWRkLWluLgorCSgyKSBJdCByZXNwb25kcyB0byBldmVudHMgZmlyZWQgYnkgRGV2ZWxvcGVyIFN0dWRpby4KK0luIGJvdGggY2FzZXMsIHRoZSBhZGQtaW4gY29kZSBoYXMgYWNjZXNzIHRvIHRoZSBmdWxsIERldmVsb3BlciBTdHVkaW8KK0F1dG9tYXRpb24gT2JqZWN0IE1vZGVsLCBhbmQgbWF5IG1hbmlwdWxhdGUgdGhvc2Ugb2JqZWN0cyB0byBhZmZlY3QgdGhlCitiZWhhdmlvciBvZiBEZXZlbG9wZXIgU3R1ZGlvLgorCitUaGlzIGZpbGUgY29udGFpbnMgYSBzdW1tYXJ5IG9mIHdoYXQgeW91IHdpbGwgZmluZCBpbiBlYWNoIG9mIHRoZSBmaWxlcyB0aGF0CittYWtlIHVwIHlvdXIgVmlzVmltIERMTC4KKworCitWaXNWaW0uaAorICAgIFRoaXMgaXMgdGhlIG1haW4gaGVhZGVyIGZpbGUgZm9yIHRoZSBETEwuICBJdCBkZWNsYXJlcyB0aGUKKyAgICBDVmlzVmltQXBwIGNsYXNzLgorCitWaXNWaW0uY3BwCisgICAgVGhpcyBpcyB0aGUgbWFpbiBETEwgc291cmNlIGZpbGUuICBJdCBjb250YWlucyB0aGUgY2xhc3MgQ1Zpc1ZpbUFwcC4KKyAgICBJdCBhbHNvIGNvbnRhaW5zIHRoZSBPTEUgZW50cnkgcG9pbnRzIHJlcXVpcmVkIG9mIGlucHJvYyBzZXJ2ZXJzLgorCitWaXNWaW0ub2RsCisgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBPYmplY3QgRGVzY3JpcHRpb24gTGFuZ3VhZ2Ugc291cmNlIGNvZGUgZm9yIHRoZQorICAgIHR5cGUgbGlicmFyeSBvZiB5b3VyIERMTC4KKworVmlzVmltLnJjCisgICAgVGhpcyBpcyBhIGxpc3Rpbmcgb2YgYWxsIG9mIHRoZSBNaWNyb3NvZnQgV2luZG93cyByZXNvdXJjZXMgdGhhdCB0aGUKKyAgICBwcm9ncmFtIHVzZXMuICBJdCBpbmNsdWRlcyB0aGUgc2FtcGxlIHRvb2xiYXIgYml0bWFwIHRoYXQgaXMgc3RvcmVkCisgICAgaW4gdGhlIFJFUyBzdWJkaXJlY3RvcnkuICBUaGlzIGZpbGUgY2FuIGJlIGRpcmVjdGx5IGVkaXRlZCBpbiBNaWNyb3NvZnQKKyAgICBEZXZlbG9wZXIgU3R1ZGlvLgorCityZXNcVmlzVmltLnJjMgorICAgIFRoaXMgZmlsZSBjb250YWlucyByZXNvdXJjZXMgdGhhdCBhcmUgbm90IGVkaXRlZCBieSBNaWNyb3NvZnQKKyAgICBEZXZlbG9wZXIgU3R1ZGlvLiAgWW91IHNob3VsZCBwbGFjZSBhbGwgcmVzb3VyY2VzIG5vdAorICAgIGVkaXRhYmxlIGJ5IHRoZSByZXNvdXJjZSBlZGl0b3IgaW4gdGhpcyBmaWxlLgorCitWaXNWaW0uZGVmCisgICAgVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBETEwgdGhhdCBtdXN0IGJlCisgICAgcHJvdmlkZWQgdG8gcnVuIHdpdGggTWljcm9zb2Z0IFdpbmRvd3MuICBJdCBkZWZpbmVzIHBhcmFtZXRlcnMKKyAgICBzdWNoIGFzIHRoZSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiB0aGUgRExMLiAgSXQgYWxzbyBleHBvcnRzCisJZnVuY3Rpb25zIGZyb20gdGhlIERMTC4KKworVmlzVmltLmNsdworICAgIFRoaXMgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiB1c2VkIGJ5IENsYXNzV2l6YXJkIHRvIGVkaXQgZXhpc3RpbmcKKyAgICBjbGFzc2VzIG9yIGFkZCBuZXcgY2xhc3Nlcy4gIENsYXNzV2l6YXJkIGFsc28gdXNlcyB0aGlzIGZpbGUgdG8gc3RvcmUKKyAgICBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRlIGFuZCBlZGl0IG1lc3NhZ2UgbWFwcyBhbmQgZGlhbG9nIGRhdGEKKyAgICBtYXBzIGFuZCB0byBjcmVhdGUgcHJvdG90eXBlIG1lbWJlciBmdW5jdGlvbnMuCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitBZGQtaW4tc3BlY2lmaWMgZmlsZXM6CisKK0RTQWRkSW4uY3BwLCBEU0FkZEluLmgKKyAgICBUaGVzZSBmaWxlcyBjb250YWluIHRoZSBDRFNBZGRJbiBjbGFzcywgd2hpY2ggaW1wbGVtZW50cyB0aGUKKyAgICBJRFNBZGRJbiBpbnRlcmZhY2UuICBUaGlzIGludGVyZmFjZSBjb250YWlucyBoYW5kbGVycworICAgIGZvciBjb25uZWN0aW5nIGFuZCBkaXNjb25uZWN0aW5nIHRoZSBhZGQtaW4uCisKK0NvbW1hbmRzLmNwcCwgQ29tbWFuZHMuaAorICAgIFRoZXNlIGZpbGVzIGNvbnRhaW4gdGhlIENDb21tYW5kcyBjbGFzcywgd2hpY2ggaW1wbGVtZW50cyB5b3VyCisgICAgY29tbWFuZCBkaXNwYXRjaCBpbnRlcmZhY2UuICBUaGlzIGludGVyZmFjZSBjb250YWlucyBvbmUgbWV0aG9kCisgICAgZm9yIGVhY2ggY29tbWFuZCB5b3UgYWRkIHRvIERldmVsb3BlciBTdHVkaW8uCisgICAgVGhlc2UgZmlsZXMgYWxzbyBjb250YWluIHN0dWIgaW1wbGVtZW50YXRpb25zIG9mIGhhbmRsZXJzIGZvciBhbGwgZXZlbnRzCisgICAgZmlyZWQgYnkgdGhlIERldmVsb3BlciBTdHVkaW8gQXBwbGljYXRpb24gb2JqZWN0LgorCitPbGVBdXQuY3BwCisgICAgVGhlc2UgZmlsZXMgY29udGFpbiBhIGdlbmVyYWwgT0xFIGF1dG9tYXRpb24gY2xhc3MgdXNlZCB0byBjb21tdW5pY2F0ZQorICAgIHdpdGggdmltLgorCitSZWcuY3BwCisgICAgVGhlc2UgZmlsZXMgY29udGFpbiBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSByZWdpc3RyeS4KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworT3RoZXIgc3RhbmRhcmQgZmlsZXM6CisKK1N0ZEFmeC5oLCBTdGRBZnguY3BwCisgICAgVGhlc2UgZmlsZXMgYXJlIHVzZWQgdG8gYnVpbGQgYSBwcmVjb21waWxlZCBoZWFkZXIgKFBDSCkgZmlsZQorICAgIG5hbWVkIFZpc1ZpbS5wY2ggYW5kIGEgcHJlY29tcGlsZWQgdHlwZXMgZmlsZSBuYW1lZCBTdGRBZngub2JqLgorCitSZXNvdXJjZS5oCisgICAgVGhpcyBpcyB0aGUgc3RhbmRhcmQgaGVhZGVyIGZpbGUsIHdoaWNoIGRlZmluZXMgbmV3IHJlc291cmNlIElEcy4KKyAgICBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyByZWFkcyBhbmQgdXBkYXRlcyB0aGlzIGZpbGUuCisKZGlmZiAtLWdpdCBhL3NyYy9hcmFiaWMuYyBiL3NyYy9hcmFiaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzFmNjRjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2FyYWJpYy5jCkBAIC0wLDAgKzEsMTE2OCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZCAgICBieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogYXJhYmljLmM6IGZ1bmN0aW9ucyBmb3IgQXJhYmljIGxhbmd1YWdlCisgKgorICogSW5jbHVkZWQgYnkgbWFpbi5jLCB3aGVuIEZFQVRfQVJBQklDICYgRkVBVF9HVUkgaXMgZGVmaW5lZC4KKyAqCisgKiAtLQorICoKKyAqIEF1dGhvcjogTmFkaW0gU2hhaWtsaSAmIElzYW0gQmF5YXppZGkKKyAqCisgKi8KKworc3RhdGljIGludCAgQV9pc19hIF9fQVJHUygoaW50IGN1cl9jKSk7CitzdGF0aWMgaW50ICBBX2lzX3MgX19BUkdTKChpbnQgY3VyX2MpKTsKK3N0YXRpYyBpbnQgIEFfaXNfZiBfX0FSR1MoKGludCBjdXJfYykpOworc3RhdGljIGludCAgY2hnX2NfYTJzIF9fQVJHUygoaW50IGN1cl9jKSk7CitzdGF0aWMgaW50ICBjaGdfY19hMmkgX19BUkdTKChpbnQgY3VyX2MpKTsKK3N0YXRpYyBpbnQgIGNoZ19jX2EybSBfX0FSR1MoKGludCBjdXJfYykpOworc3RhdGljIGludCAgY2hnX2NfYTJmIF9fQVJHUygoaW50IGN1cl9jKSk7CitzdGF0aWMgaW50ICBjaGdfY19pMm0gX19BUkdTKChpbnQgY3VyX2MpKTsKK3N0YXRpYyBpbnQgIGNoZ19jX2YybSBfX0FSR1MoKGludCBjdXJfYykpOworc3RhdGljIGludCAgY2hnX2NfbGFhMmkgX19BUkdTKChpbnQgaGlkX2MpKTsKK3N0YXRpYyBpbnQgIGNoZ19jX2xhYTJmIF9fQVJHUygoaW50IGhpZF9jKSk7CitzdGF0aWMgaW50ICBoYWxmX3NoYXBlIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyBpbnQgIEFfZmlyc3RjX2xhYSBfX0FSR1MoKGludCBjMSwgaW50IGMpKTsKK3N0YXRpYyBpbnQgIEFfaXNfaGFyYWthdCBfX0FSR1MoKGludCBjKSk7CitzdGF0aWMgaW50ICBBX2lzX2lzbyBfX0FSR1MoKGludCBjKSk7CitzdGF0aWMgaW50ICBBX2lzX2Zvcm1iIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyBpbnQgIEFfaXNfb2sgX19BUkdTKChpbnQgYykpOworc3RhdGljIGludCAgQV9pc192YWxpZCBfX0FSR1MoKGludCBjKSk7CitzdGF0aWMgaW50ICBBX2lzX3NwZWNpYWwgX19BUkdTKChpbnQgYykpOworCisKKy8qCisgKiBSZXR1cm5zIFRydWUgaWYgYyBpcyBhbiBJU08tODg1OS02IHNoYXBlZCBBUkFCSUMgbGV0dGVyICh1c2VyIGVudGVyZWQpCisgKi8KKyAgICBzdGF0aWMgaW50CitBX2lzX2EoY3VyX2MpCisgICAgaW50IGN1cl9jOworeworICAgIHN3aXRjaCAoY3VyX2MpCisgICAgeworCWNhc2UgYV9IQU1aQToKKwljYXNlIGFfQUxFRl9NQUREQToKKwljYXNlIGFfQUxFRl9IQU1aQV9BQk9WRToKKwljYXNlIGFfV0FXX0hBTVpBOgorCWNhc2UgYV9BTEVGX0hBTVpBX0JFTE9XOgorCWNhc2UgYV9ZRUhfSEFNWkE6CisJY2FzZSBhX0FMRUY6CisJY2FzZSBhX0JFSDoKKwljYXNlIGFfVEVIX01BUkJVVEE6CisJY2FzZSBhX1RFSDoKKwljYXNlIGFfVEhFSDoKKwljYXNlIGFfSkVFTToKKwljYXNlIGFfSEFIOgorCWNhc2UgYV9LSEFIOgorCWNhc2UgYV9EQUw6CisJY2FzZSBhX1RIQUw6CisJY2FzZSBhX1JFSDoKKwljYXNlIGFfWkFJTjoKKwljYXNlIGFfU0VFTjoKKwljYXNlIGFfU0hFRU46CisJY2FzZSBhX1NBRDoKKwljYXNlIGFfREFEOgorCWNhc2UgYV9UQUg6CisJY2FzZSBhX1pBSDoKKwljYXNlIGFfQUlOOgorCWNhc2UgYV9HSEFJTjoKKwljYXNlIGFfVEFUV0VFTDoKKwljYXNlIGFfRkVIOgorCWNhc2UgYV9RQUY6CisJY2FzZSBhX0tBRjoKKwljYXNlIGFfTEFNOgorCWNhc2UgYV9NRUVNOgorCWNhc2UgYV9OT09OOgorCWNhc2UgYV9IRUg6CisJY2FzZSBhX1dBVzoKKwljYXNlIGFfQUxFRl9NQUtTVVJBOgorCWNhc2UgYV9ZRUg6CisJICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHJldHVybiBGQUxTRTsKK30KKworCisvKgorICogUmV0dXJucyBUcnVlIGlmIGMgaXMgYW4gSXNvbGF0ZWQgRm9ybS1CIEFSQUJJQyBsZXR0ZXIKKyAqLworICAgIHN0YXRpYyBpbnQKK0FfaXNfcyhjdXJfYykKKyAgICBpbnQgY3VyX2M7Cit7CisgICAgc3dpdGNoIChjdXJfYykKKyAgICB7CisJY2FzZSBhX3NfSEFNWkE6CisJY2FzZSBhX3NfQUxFRl9NQUREQToKKwljYXNlIGFfc19BTEVGX0hBTVpBX0FCT1ZFOgorCWNhc2UgYV9zX1dBV19IQU1aQToKKwljYXNlIGFfc19BTEVGX0hBTVpBX0JFTE9XOgorCWNhc2UgYV9zX1lFSF9IQU1aQToKKwljYXNlIGFfc19BTEVGOgorCWNhc2UgYV9zX0JFSDoKKwljYXNlIGFfc19URUhfTUFSQlVUQToKKwljYXNlIGFfc19URUg6CisJY2FzZSBhX3NfVEhFSDoKKwljYXNlIGFfc19KRUVNOgorCWNhc2UgYV9zX0hBSDoKKwljYXNlIGFfc19LSEFIOgorCWNhc2UgYV9zX0RBTDoKKwljYXNlIGFfc19USEFMOgorCWNhc2UgYV9zX1JFSDoKKwljYXNlIGFfc19aQUlOOgorCWNhc2UgYV9zX1NFRU46CisJY2FzZSBhX3NfU0hFRU46CisJY2FzZSBhX3NfU0FEOgorCWNhc2UgYV9zX0RBRDoKKwljYXNlIGFfc19UQUg6CisJY2FzZSBhX3NfWkFIOgorCWNhc2UgYV9zX0FJTjoKKwljYXNlIGFfc19HSEFJTjoKKwljYXNlIGFfc19GRUg6CisJY2FzZSBhX3NfUUFGOgorCWNhc2UgYV9zX0tBRjoKKwljYXNlIGFfc19MQU06CisJY2FzZSBhX3NfTUVFTToKKwljYXNlIGFfc19OT09OOgorCWNhc2UgYV9zX0hFSDoKKwljYXNlIGFfc19XQVc6CisJY2FzZSBhX3NfQUxFRl9NQUtTVVJBOgorCWNhc2UgYV9zX1lFSDoKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQorCisKKy8qCisgKiBSZXR1cm5zIFRydWUgaWYgYyBpcyBhIEZpbmFsIHNoYXBlIG9mIGFuIEFSQUJJQyBsZXR0ZXIKKyAqLworICAgIHN0YXRpYyBpbnQKK0FfaXNfZihjdXJfYykKKyAgICBpbnQgY3VyX2M7Cit7CisgICAgc3dpdGNoIChjdXJfYykKKyAgICB7CisJY2FzZSBhX2ZfQUxFRl9NQUREQToKKwljYXNlIGFfZl9BTEVGX0hBTVpBX0FCT1ZFOgorCWNhc2UgYV9mX1dBV19IQU1aQToKKwljYXNlIGFfZl9BTEVGX0hBTVpBX0JFTE9XOgorCWNhc2UgYV9mX1lFSF9IQU1aQToKKwljYXNlIGFfZl9BTEVGOgorCWNhc2UgYV9mX0JFSDoKKwljYXNlIGFfZl9URUhfTUFSQlVUQToKKwljYXNlIGFfZl9URUg6CisJY2FzZSBhX2ZfVEhFSDoKKwljYXNlIGFfZl9KRUVNOgorCWNhc2UgYV9mX0hBSDoKKwljYXNlIGFfZl9LSEFIOgorCWNhc2UgYV9mX0RBTDoKKwljYXNlIGFfZl9USEFMOgorCWNhc2UgYV9mX1JFSDoKKwljYXNlIGFfZl9aQUlOOgorCWNhc2UgYV9mX1NFRU46CisJY2FzZSBhX2ZfU0hFRU46CisJY2FzZSBhX2ZfU0FEOgorCWNhc2UgYV9mX0RBRDoKKwljYXNlIGFfZl9UQUg6CisJY2FzZSBhX2ZfWkFIOgorCWNhc2UgYV9mX0FJTjoKKwljYXNlIGFfZl9HSEFJTjoKKwljYXNlIGFfZl9GRUg6CisJY2FzZSBhX2ZfUUFGOgorCWNhc2UgYV9mX0tBRjoKKwljYXNlIGFfZl9MQU06CisJY2FzZSBhX2ZfTUVFTToKKwljYXNlIGFfZl9OT09OOgorCWNhc2UgYV9mX0hFSDoKKwljYXNlIGFfZl9XQVc6CisJY2FzZSBhX2ZfQUxFRl9NQUtTVVJBOgorCWNhc2UgYV9mX1lFSDoKKwljYXNlIGFfZl9MQU1fQUxFRl9NQUREQV9BQk9WRToKKwljYXNlIGFfZl9MQU1fQUxFRl9IQU1aQV9BQk9WRToKKwljYXNlIGFfZl9MQU1fQUxFRl9IQU1aQV9CRUxPVzoKKwljYXNlIGFfZl9MQU1fQUxFRjoKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworCisvKgorICogQ2hhbmdlIHNoYXBlIC0gZnJvbSBJU08tODg1OS02L0lzb2xhdGVkIHRvIEZvcm0tQiBJc29sYXRlZAorICovCisgICAgc3RhdGljIGludAorY2hnX2NfYTJzKGN1cl9jKQorICAgIGludCBjdXJfYzsKK3sKKyAgICBpbnQgdGVtcGM7CisKKyAgICBzd2l0Y2ggKGN1cl9jKQorICAgIHsKKwljYXNlIGFfSEFNWkE6CisJICAgIHRlbXBjID0gYV9zX0hBTVpBOworCSAgICBicmVhazsKKwljYXNlIGFfQUxFRl9NQUREQToKKwkgICAgdGVtcGMgPSBhX3NfQUxFRl9NQUREQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfSEFNWkFfQUJPVkU6CisJICAgIHRlbXBjID0gYV9zX0FMRUZfSEFNWkFfQUJPVkU7CisJICAgIGJyZWFrOworCWNhc2UgYV9XQVdfSEFNWkE6CisJICAgIHRlbXBjID0gYV9zX1dBV19IQU1aQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfSEFNWkFfQkVMT1c6CisJICAgIHRlbXBjID0gYV9zX0FMRUZfSEFNWkFfQkVMT1c7CisJICAgIGJyZWFrOworCWNhc2UgYV9ZRUhfSEFNWkE6CisJICAgIHRlbXBjID0gYV9zX1lFSF9IQU1aQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUY6CisJICAgIHRlbXBjID0gYV9zX0FMRUY7CisJICAgIGJyZWFrOworCWNhc2UgYV9URUhfTUFSQlVUQToKKwkgICAgdGVtcGMgPSBhX3NfVEVIX01BUkJVVEE7CisJICAgIGJyZWFrOworCWNhc2UgYV9EQUw6CisJICAgIHRlbXBjID0gYV9zX0RBTDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RIQUw6CisJICAgIHRlbXBjID0gYV9zX1RIQUw7CisJICAgIGJyZWFrOworCWNhc2UgYV9SRUg6CisJICAgIHRlbXBjID0gYV9zX1JFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1pBSU46CisJICAgIHRlbXBjID0gYV9zX1pBSU47CisJICAgIGJyZWFrOworCWNhc2UgYV9UQVRXRUVMOgkJCS8qIGV4Y2VwdGlvbnMgKi8KKwkgICAgdGVtcGMgPSBjdXJfYzsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1dBVzoKKwkgICAgdGVtcGMgPSBhX3NfV0FXOworCSAgICBicmVhazsKKwljYXNlIGFfQUxFRl9NQUtTVVJBOgorCSAgICB0ZW1wYyA9IGFfc19BTEVGX01BS1NVUkE7CisJICAgIGJyZWFrOworCWNhc2UgYV9CRUg6CisJICAgIHRlbXBjID0gYV9zX0JFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RFSDoKKwkgICAgdGVtcGMgPSBhX3NfVEVIOworCSAgICBicmVhazsKKwljYXNlIGFfVEhFSDoKKwkgICAgdGVtcGMgPSBhX3NfVEhFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0pFRU06CisJICAgIHRlbXBjID0gYV9zX0pFRU07CisJICAgIGJyZWFrOworCWNhc2UgYV9IQUg6CisJICAgIHRlbXBjID0gYV9zX0hBSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0tIQUg6CisJICAgIHRlbXBjID0gYV9zX0tIQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9TRUVOOgorCSAgICB0ZW1wYyA9IGFfc19TRUVOOworCSAgICBicmVhazsKKwljYXNlIGFfU0hFRU46CisJICAgIHRlbXBjID0gYV9zX1NIRUVOOworCSAgICBicmVhazsKKwljYXNlIGFfU0FEOgorCSAgICB0ZW1wYyA9IGFfc19TQUQ7CisJICAgIGJyZWFrOworCWNhc2UgYV9EQUQ6CisJICAgIHRlbXBjID0gYV9zX0RBRDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RBSDoKKwkgICAgdGVtcGMgPSBhX3NfVEFIOworCSAgICBicmVhazsKKwljYXNlIGFfWkFIOgorCSAgICB0ZW1wYyA9IGFfc19aQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9BSU46CisJICAgIHRlbXBjID0gYV9zX0FJTjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0dIQUlOOgorCSAgICB0ZW1wYyA9IGFfc19HSEFJTjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0ZFSDoKKwkgICAgdGVtcGMgPSBhX3NfRkVIOworCSAgICBicmVhazsKKwljYXNlIGFfUUFGOgorCSAgICB0ZW1wYyA9IGFfc19RQUY7CisJICAgIGJyZWFrOworCWNhc2UgYV9LQUY6CisJICAgIHRlbXBjID0gYV9zX0tBRjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0xBTToKKwkgICAgdGVtcGMgPSBhX3NfTEFNOworCSAgICBicmVhazsKKwljYXNlIGFfTUVFTToKKwkgICAgdGVtcGMgPSBhX3NfTUVFTTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX05PT046CisJICAgIHRlbXBjID0gYV9zX05PT047CisJICAgIGJyZWFrOworCWNhc2UgYV9IRUg6CisJICAgIHRlbXBjID0gYV9zX0hFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1lFSDoKKwkgICAgdGVtcGMgPSBhX3NfWUVIOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICB0ZW1wYyA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHRlbXBjOworfQorCisKKy8qCisgKiBDaGFuZ2Ugc2hhcGUgLSBmcm9tIElTTy04ODU5LTYvSXNvbGF0ZWQgdG8gSW5pdGlhbAorICovCisgICAgc3RhdGljIGludAorY2hnX2NfYTJpKGN1cl9jKQorICAgIGludCBjdXJfYzsKK3sKKyAgICBpbnQgdGVtcGM7CisKKyAgICBzd2l0Y2ggKGN1cl9jKQorICAgIHsKKwljYXNlIGFfWUVIX0hBTVpBOgorCSAgICB0ZW1wYyA9IGFfaV9ZRUhfSEFNWkE7CisJICAgIGJyZWFrOworCWNhc2UgYV9IQU1aQToJCQkvKiBleGNlcHRpb25zICovCisJICAgIHRlbXBjID0gYV9zX0hBTVpBOworCSAgICBicmVhazsKKwljYXNlIGFfQUxFRl9NQUREQToJCS8qIGV4Y2VwdGlvbnMgKi8KKwkgICAgdGVtcGMgPSBhX3NfQUxFRl9NQUREQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfSEFNWkFfQUJPVkU6CS8qIGV4Y2VwdGlvbnMgKi8KKwkgICAgdGVtcGMgPSBhX3NfQUxFRl9IQU1aQV9BQk9WRTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1dBV19IQU1aQToJCS8qIGV4Y2VwdGlvbnMgKi8KKwkgICAgdGVtcGMgPSBhX3NfV0FXX0hBTVpBOworCSAgICBicmVhazsKKwljYXNlIGFfQUxFRl9IQU1aQV9CRUxPVzoJLyogZXhjZXB0aW9ucyAqLworCSAgICB0ZW1wYyA9IGFfc19BTEVGX0hBTVpBX0JFTE9XOworCSAgICBicmVhazsKKwljYXNlIGFfQUxFRjoJCQkvKiBleGNlcHRpb25zICovCisJICAgIHRlbXBjID0gYV9zX0FMRUY7CisJICAgIGJyZWFrOworCWNhc2UgYV9URUhfTUFSQlVUQToJCS8qIGV4Y2VwdGlvbnMgKi8KKwkgICAgdGVtcGMgPSBhX3NfVEVIX01BUkJVVEE7CisJICAgIGJyZWFrOworCWNhc2UgYV9EQUw6CQkJLyogZXhjZXB0aW9ucyAqLworCSAgICB0ZW1wYyA9IGFfc19EQUw7CisJICAgIGJyZWFrOworCWNhc2UgYV9USEFMOgkJCS8qIGV4Y2VwdGlvbnMgKi8KKwkgICAgdGVtcGMgPSBhX3NfVEhBTDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1JFSDoJCQkvKiBleGNlcHRpb25zICovCisJICAgIHRlbXBjID0gYV9zX1JFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1pBSU46CQkJLyogZXhjZXB0aW9ucyAqLworCSAgICB0ZW1wYyA9IGFfc19aQUlOOworCSAgICBicmVhazsKKwljYXNlIGFfVEFUV0VFTDoJCQkvKiBleGNlcHRpb25zICovCisJICAgIHRlbXBjID0gY3VyX2M7CisJICAgIGJyZWFrOworCWNhc2UgYV9XQVc6CQkJLyogZXhjZXB0aW9ucyAqLworCSAgICB0ZW1wYyA9IGFfc19XQVc7CisJICAgIGJyZWFrOworCWNhc2UgYV9BTEVGX01BS1NVUkE6CQkvKiBleGNlcHRpb25zICovCisJICAgIHRlbXBjID0gYV9zX0FMRUZfTUFLU1VSQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0JFSDoKKwkgICAgdGVtcGMgPSBhX2lfQkVIOworCSAgICBicmVhazsKKwljYXNlIGFfVEVIOgorCSAgICB0ZW1wYyA9IGFfaV9URUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9USEVIOgorCSAgICB0ZW1wYyA9IGFfaV9USEVIOworCSAgICBicmVhazsKKwljYXNlIGFfSkVFTToKKwkgICAgdGVtcGMgPSBhX2lfSkVFTTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0hBSDoKKwkgICAgdGVtcGMgPSBhX2lfSEFIOworCSAgICBicmVhazsKKwljYXNlIGFfS0hBSDoKKwkgICAgdGVtcGMgPSBhX2lfS0hBSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1NFRU46CisJICAgIHRlbXBjID0gYV9pX1NFRU47CisJICAgIGJyZWFrOworCWNhc2UgYV9TSEVFTjoKKwkgICAgdGVtcGMgPSBhX2lfU0hFRU47CisJICAgIGJyZWFrOworCWNhc2UgYV9TQUQ6CisJICAgIHRlbXBjID0gYV9pX1NBRDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0RBRDoKKwkgICAgdGVtcGMgPSBhX2lfREFEOworCSAgICBicmVhazsKKwljYXNlIGFfVEFIOgorCSAgICB0ZW1wYyA9IGFfaV9UQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9aQUg6CisJICAgIHRlbXBjID0gYV9pX1pBSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FJTjoKKwkgICAgdGVtcGMgPSBhX2lfQUlOOworCSAgICBicmVhazsKKwljYXNlIGFfR0hBSU46CisJICAgIHRlbXBjID0gYV9pX0dIQUlOOworCSAgICBicmVhazsKKwljYXNlIGFfRkVIOgorCSAgICB0ZW1wYyA9IGFfaV9GRUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9RQUY6CisJICAgIHRlbXBjID0gYV9pX1FBRjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0tBRjoKKwkgICAgdGVtcGMgPSBhX2lfS0FGOworCSAgICBicmVhazsKKwljYXNlIGFfTEFNOgorCSAgICB0ZW1wYyA9IGFfaV9MQU07CisJICAgIGJyZWFrOworCWNhc2UgYV9NRUVNOgorCSAgICB0ZW1wYyA9IGFfaV9NRUVNOworCSAgICBicmVhazsKKwljYXNlIGFfTk9PTjoKKwkgICAgdGVtcGMgPSBhX2lfTk9PTjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0hFSDoKKwkgICAgdGVtcGMgPSBhX2lfSEVIOworCSAgICBicmVhazsKKwljYXNlIGFfWUVIOgorCSAgICB0ZW1wYyA9IGFfaV9ZRUg7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHRlbXBjID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdGVtcGM7Cit9CisKKworLyoKKyAqIENoYW5nZSBzaGFwZSAtIGZyb20gSVNPLTg4NTktNi9Jc29sYXRlZCB0byBNZWRpYWwKKyAqLworICAgIHN0YXRpYyBpbnQKK2NoZ19jX2EybShjdXJfYykKKyAgICBpbnQgY3VyX2M7Cit7CisgICAgaW50IHRlbXBjOworCisgICAgc3dpdGNoIChjdXJfYykKKyAgICB7CisJY2FzZSBhX0hBTVpBOgkJCS8qIGV4Y2VwdGlvbiAqLworCSAgICB0ZW1wYyA9IGFfc19IQU1aQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfTUFEREE6CQkvKiBleGNlcHRpb24gKi8KKwkgICAgdGVtcGMgPSBhX2ZfQUxFRl9NQUREQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfSEFNWkFfQUJPVkU6CS8qIGV4Y2VwdGlvbiAqLworCSAgICB0ZW1wYyA9IGFfZl9BTEVGX0hBTVpBX0FCT1ZFOworCSAgICBicmVhazsKKwljYXNlIGFfV0FXX0hBTVpBOgkJLyogZXhjZXB0aW9uICovCisJICAgIHRlbXBjID0gYV9mX1dBV19IQU1aQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfSEFNWkFfQkVMT1c6CS8qIGV4Y2VwdGlvbiAqLworCSAgICB0ZW1wYyA9IGFfZl9BTEVGX0hBTVpBX0JFTE9XOworCSAgICBicmVhazsKKwljYXNlIGFfWUVIX0hBTVpBOgorCSAgICB0ZW1wYyA9IGFfbV9ZRUhfSEFNWkE7CisJICAgIGJyZWFrOworCWNhc2UgYV9BTEVGOgkJCS8qIGV4Y2VwdGlvbiAqLworCSAgICB0ZW1wYyA9IGFfZl9BTEVGOworCSAgICBicmVhazsKKwljYXNlIGFfQkVIOgorCSAgICB0ZW1wYyA9IGFfbV9CRUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9URUhfTUFSQlVUQToJCS8qIGV4Y2VwdGlvbiAqLworCSAgICB0ZW1wYyA9IGFfZl9URUhfTUFSQlVUQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RFSDoKKwkgICAgdGVtcGMgPSBhX21fVEVIOworCSAgICBicmVhazsKKwljYXNlIGFfVEhFSDoKKwkgICAgdGVtcGMgPSBhX21fVEhFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0pFRU06CisJICAgIHRlbXBjID0gYV9tX0pFRU07CisJICAgIGJyZWFrOworCWNhc2UgYV9IQUg6CisJICAgIHRlbXBjID0gYV9tX0hBSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0tIQUg6CisJICAgIHRlbXBjID0gYV9tX0tIQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9EQUw6CQkJLyogZXhjZXB0aW9uICovCisJICAgIHRlbXBjID0gYV9mX0RBTDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RIQUw6CQkJLyogZXhjZXB0aW9uICovCisJICAgIHRlbXBjID0gYV9mX1RIQUw7CisJICAgIGJyZWFrOworCWNhc2UgYV9SRUg6CQkJLyogZXhjZXB0aW9uICovCisJICAgIHRlbXBjID0gYV9mX1JFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1pBSU46CQkJLyogZXhjZXB0aW9uICovCisJICAgIHRlbXBjID0gYV9mX1pBSU47CisJICAgIGJyZWFrOworCWNhc2UgYV9TRUVOOgorCSAgICB0ZW1wYyA9IGFfbV9TRUVOOworCSAgICBicmVhazsKKwljYXNlIGFfU0hFRU46CisJICAgIHRlbXBjID0gYV9tX1NIRUVOOworCSAgICBicmVhazsKKwljYXNlIGFfU0FEOgorCSAgICB0ZW1wYyA9IGFfbV9TQUQ7CisJICAgIGJyZWFrOworCWNhc2UgYV9EQUQ6CisJICAgIHRlbXBjID0gYV9tX0RBRDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RBSDoKKwkgICAgdGVtcGMgPSBhX21fVEFIOworCSAgICBicmVhazsKKwljYXNlIGFfWkFIOgorCSAgICB0ZW1wYyA9IGFfbV9aQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9BSU46CisJICAgIHRlbXBjID0gYV9tX0FJTjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0dIQUlOOgorCSAgICB0ZW1wYyA9IGFfbV9HSEFJTjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RBVFdFRUw6CQkJLyogZXhjZXB0aW9uICovCisJICAgIHRlbXBjID0gY3VyX2M7CisJICAgIGJyZWFrOworCWNhc2UgYV9GRUg6CisJICAgIHRlbXBjID0gYV9tX0ZFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1FBRjoKKwkgICAgdGVtcGMgPSBhX21fUUFGOworCSAgICBicmVhazsKKwljYXNlIGFfS0FGOgorCSAgICB0ZW1wYyA9IGFfbV9LQUY7CisJICAgIGJyZWFrOworCWNhc2UgYV9MQU06CisJICAgIHRlbXBjID0gYV9tX0xBTTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX01FRU06CisJICAgIHRlbXBjID0gYV9tX01FRU07CisJICAgIGJyZWFrOworCWNhc2UgYV9OT09OOgorCSAgICB0ZW1wYyA9IGFfbV9OT09OOworCSAgICBicmVhazsKKwljYXNlIGFfSEVIOgorCSAgICB0ZW1wYyA9IGFfbV9IRUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9XQVc6CQkJLyogZXhjZXB0aW9uICovCisJICAgIHRlbXBjID0gYV9mX1dBVzsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfTUFLU1VSQToJCS8qIGV4Y2VwdGlvbiAqLworCSAgICB0ZW1wYyA9IGFfZl9BTEVGX01BS1NVUkE7CisJICAgIGJyZWFrOworCWNhc2UgYV9ZRUg6CisJICAgIHRlbXBjID0gYV9tX1lFSDsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdGVtcGMgPSAwOworICAgIH0KKworICAgIHJldHVybiB0ZW1wYzsKK30KKworCisvKgorICogQ2hhbmdlIHNoYXBlIC0gZnJvbSBJU08tODg1OS02L0lzb2xhdGVkIHRvIGZpbmFsCisgKi8KKyAgICBzdGF0aWMgaW50CitjaGdfY19hMmYoY3VyX2MpCisgICAgaW50IGN1cl9jOworeworICAgIGludCB0ZW1wYzsKKworICAgIC8qIE5PVEU6IHRoZXNlIGVuY29kaW5ncyBuZWVkIHRvIGJlIGFjY291bnRlZCBmb3IKKworCWFfZl9BTEVGX01BRERBOworCWFfZl9BTEVGX0hBTVpBX0FCT1ZFOworCWFfZl9BTEVGX0hBTVpBX0JFTE9XOworCWFfZl9MQU1fQUxFRl9NQUREQV9BQk9WRTsKKwlhX2ZfTEFNX0FMRUZfSEFNWkFfQUJPVkU7CisJYV9mX0xBTV9BTEVGX0hBTVpBX0JFTE9XOworCSovCisKKyAgICBzd2l0Y2ggKGN1cl9jKQorICAgIHsKKwljYXNlIGFfSEFNWkE6CQkJLyogZXhjZXB0aW9uICovCisJICAgIHRlbXBjID0gYV9zX0hBTVpBOworCSAgICBicmVhazsKKwljYXNlIGFfQUxFRl9NQUREQToKKwkgICAgdGVtcGMgPSBhX2ZfQUxFRl9NQUREQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfSEFNWkFfQUJPVkU6CisJICAgIHRlbXBjID0gYV9mX0FMRUZfSEFNWkFfQUJPVkU7CisJICAgIGJyZWFrOworCWNhc2UgYV9XQVdfSEFNWkE6CisJICAgIHRlbXBjID0gYV9mX1dBV19IQU1aQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfSEFNWkFfQkVMT1c6CisJICAgIHRlbXBjID0gYV9mX0FMRUZfSEFNWkFfQkVMT1c7CisJICAgIGJyZWFrOworCWNhc2UgYV9ZRUhfSEFNWkE6CisJICAgIHRlbXBjID0gYV9mX1lFSF9IQU1aQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUY6CisJICAgIHRlbXBjID0gYV9mX0FMRUY7CisJICAgIGJyZWFrOworCWNhc2UgYV9CRUg6CisJICAgIHRlbXBjID0gYV9mX0JFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RFSF9NQVJCVVRBOgorCSAgICB0ZW1wYyA9IGFfZl9URUhfTUFSQlVUQTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RFSDoKKwkgICAgdGVtcGMgPSBhX2ZfVEVIOworCSAgICBicmVhazsKKwljYXNlIGFfVEhFSDoKKwkgICAgdGVtcGMgPSBhX2ZfVEhFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0pFRU06CisJICAgIHRlbXBjID0gYV9mX0pFRU07CisJICAgIGJyZWFrOworCWNhc2UgYV9IQUg6CisJICAgIHRlbXBjID0gYV9mX0hBSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0tIQUg6CisJICAgIHRlbXBjID0gYV9mX0tIQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9EQUw6CisJICAgIHRlbXBjID0gYV9mX0RBTDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RIQUw6CisJICAgIHRlbXBjID0gYV9mX1RIQUw7CisJICAgIGJyZWFrOworCWNhc2UgYV9SRUg6CisJICAgIHRlbXBjID0gYV9mX1JFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1pBSU46CisJICAgIHRlbXBjID0gYV9mX1pBSU47CisJICAgIGJyZWFrOworCWNhc2UgYV9TRUVOOgorCSAgICB0ZW1wYyA9IGFfZl9TRUVOOworCSAgICBicmVhazsKKwljYXNlIGFfU0hFRU46CisJICAgIHRlbXBjID0gYV9mX1NIRUVOOworCSAgICBicmVhazsKKwljYXNlIGFfU0FEOgorCSAgICB0ZW1wYyA9IGFfZl9TQUQ7CisJICAgIGJyZWFrOworCWNhc2UgYV9EQUQ6CisJICAgIHRlbXBjID0gYV9mX0RBRDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RBSDoKKwkgICAgdGVtcGMgPSBhX2ZfVEFIOworCSAgICBicmVhazsKKwljYXNlIGFfWkFIOgorCSAgICB0ZW1wYyA9IGFfZl9aQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9BSU46CisJICAgIHRlbXBjID0gYV9mX0FJTjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0dIQUlOOgorCSAgICB0ZW1wYyA9IGFfZl9HSEFJTjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1RBVFdFRUw6CQkJLyogZXhjZXB0aW9uICovCisJICAgIHRlbXBjID0gY3VyX2M7CisJICAgIGJyZWFrOworCWNhc2UgYV9GRUg6CisJICAgIHRlbXBjID0gYV9mX0ZFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX1FBRjoKKwkgICAgdGVtcGMgPSBhX2ZfUUFGOworCSAgICBicmVhazsKKwljYXNlIGFfS0FGOgorCSAgICB0ZW1wYyA9IGFfZl9LQUY7CisJICAgIGJyZWFrOworCWNhc2UgYV9MQU06CisJICAgIHRlbXBjID0gYV9mX0xBTTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX01FRU06CisJICAgIHRlbXBjID0gYV9mX01FRU07CisJICAgIGJyZWFrOworCWNhc2UgYV9OT09OOgorCSAgICB0ZW1wYyA9IGFfZl9OT09OOworCSAgICBicmVhazsKKwljYXNlIGFfSEVIOgorCSAgICB0ZW1wYyA9IGFfZl9IRUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9XQVc6CisJICAgIHRlbXBjID0gYV9mX1dBVzsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfTUFLU1VSQToKKwkgICAgdGVtcGMgPSBhX2ZfQUxFRl9NQUtTVVJBOworCSAgICBicmVhazsKKwljYXNlIGFfWUVIOgorCSAgICB0ZW1wYyA9IGFfZl9ZRUg7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHRlbXBjID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdGVtcGM7Cit9CisKKworLyoKKyAqIENoYW5nZSBzaGFwZSAtIGZyb20gSW5pdGlhbCB0byBNZWRpYWwKKyAqLworICAgIHN0YXRpYyBpbnQKK2NoZ19jX2kybShjdXJfYykKKyAgICBpbnQgY3VyX2M7Cit7CisgICAgaW50IHRlbXBjOworCisgICAgc3dpdGNoIChjdXJfYykKKyAgICB7CisJY2FzZSBhX2lfWUVIX0hBTVpBOgorCSAgICB0ZW1wYyA9IGFfbV9ZRUhfSEFNWkE7CisJICAgIGJyZWFrOworCWNhc2UgYV9pX0JFSDoKKwkgICAgdGVtcGMgPSBhX21fQkVIOworCSAgICBicmVhazsKKwljYXNlIGFfaV9URUg6CisJICAgIHRlbXBjID0gYV9tX1RFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2lfVEhFSDoKKwkgICAgdGVtcGMgPSBhX21fVEhFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2lfSkVFTToKKwkgICAgdGVtcGMgPSBhX21fSkVFTTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2lfSEFIOgorCSAgICB0ZW1wYyA9IGFfbV9IQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9pX0tIQUg6CisJICAgIHRlbXBjID0gYV9tX0tIQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9pX1NFRU46CisJICAgIHRlbXBjID0gYV9tX1NFRU47CisJICAgIGJyZWFrOworCWNhc2UgYV9pX1NIRUVOOgorCSAgICB0ZW1wYyA9IGFfbV9TSEVFTjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2lfU0FEOgorCSAgICB0ZW1wYyA9IGFfbV9TQUQ7CisJICAgIGJyZWFrOworCWNhc2UgYV9pX0RBRDoKKwkgICAgdGVtcGMgPSBhX21fREFEOworCSAgICBicmVhazsKKwljYXNlIGFfaV9UQUg6CisJICAgIHRlbXBjID0gYV9tX1RBSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2lfWkFIOgorCSAgICB0ZW1wYyA9IGFfbV9aQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9pX0FJTjoKKwkgICAgdGVtcGMgPSBhX21fQUlOOworCSAgICBicmVhazsKKwljYXNlIGFfaV9HSEFJTjoKKwkgICAgdGVtcGMgPSBhX21fR0hBSU47CisJICAgIGJyZWFrOworCWNhc2UgYV9pX0ZFSDoKKwkgICAgdGVtcGMgPSBhX21fRkVIOworCSAgICBicmVhazsKKwljYXNlIGFfaV9RQUY6CisJICAgIHRlbXBjID0gYV9tX1FBRjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2lfS0FGOgorCSAgICB0ZW1wYyA9IGFfbV9LQUY7CisJICAgIGJyZWFrOworCWNhc2UgYV9pX0xBTToKKwkgICAgdGVtcGMgPSBhX21fTEFNOworCSAgICBicmVhazsKKwljYXNlIGFfaV9NRUVNOgorCSAgICB0ZW1wYyA9IGFfbV9NRUVNOworCSAgICBicmVhazsKKwljYXNlIGFfaV9OT09OOgorCSAgICB0ZW1wYyA9IGFfbV9OT09OOworCSAgICBicmVhazsKKwljYXNlIGFfaV9IRUg6CisJICAgIHRlbXBjID0gYV9tX0hFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2lfWUVIOgorCSAgICB0ZW1wYyA9IGFfbV9ZRUg7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHRlbXBjID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdGVtcGM7Cit9CisKKworLyoKKyAqIENoYW5nZSBzaGFwZSAtIGZyb20gRmluYWwgdG8gTWVkaWFsCisgKi8KKyAgICBzdGF0aWMgaW50CitjaGdfY19mMm0oY3VyX2MpCisgICAgaW50IGN1cl9jOworeworICAgIGludCB0ZW1wYzsKKworICAgIHN3aXRjaCAoY3VyX2MpCisgICAgeworCS8qIE5PVEU6IHRoZXNlIGVuY29kaW5ncyBhcmUgbXVsdGktcG9zaXRpb25hbCwgbm8gPworCSAgIGNhc2UgYV9mX0FMRUZfTUFEREE6CisJICAgY2FzZSBhX2ZfQUxFRl9IQU1aQV9BQk9WRToKKwkgICBjYXNlIGFfZl9BTEVGX0hBTVpBX0JFTE9XOgorCSAgICovCisJY2FzZSBhX2ZfWUVIX0hBTVpBOgorCSAgICB0ZW1wYyA9IGFfbV9ZRUhfSEFNWkE7CisJICAgIGJyZWFrOworCWNhc2UgYV9mX1dBV19IQU1aQToJCS8qIGV4Y2VwdGlvbnMgKi8KKwljYXNlIGFfZl9BTEVGOgorCWNhc2UgYV9mX1RFSF9NQVJCVVRBOgorCWNhc2UgYV9mX0RBTDoKKwljYXNlIGFfZl9USEFMOgorCWNhc2UgYV9mX1JFSDoKKwljYXNlIGFfZl9aQUlOOgorCWNhc2UgYV9mX1dBVzoKKwljYXNlIGFfZl9BTEVGX01BS1NVUkE6CisJICAgIHRlbXBjID0gY3VyX2M7CisJICAgIGJyZWFrOworCWNhc2UgYV9mX0JFSDoKKwkgICAgdGVtcGMgPSBhX21fQkVIOworCSAgICBicmVhazsKKwljYXNlIGFfZl9URUg6CisJICAgIHRlbXBjID0gYV9tX1RFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2ZfVEhFSDoKKwkgICAgdGVtcGMgPSBhX21fVEhFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2ZfSkVFTToKKwkgICAgdGVtcGMgPSBhX21fSkVFTTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2ZfSEFIOgorCSAgICB0ZW1wYyA9IGFfbV9IQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9mX0tIQUg6CisJICAgIHRlbXBjID0gYV9tX0tIQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9mX1NFRU46CisJICAgIHRlbXBjID0gYV9tX1NFRU47CisJICAgIGJyZWFrOworCWNhc2UgYV9mX1NIRUVOOgorCSAgICB0ZW1wYyA9IGFfbV9TSEVFTjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2ZfU0FEOgorCSAgICB0ZW1wYyA9IGFfbV9TQUQ7CisJICAgIGJyZWFrOworCWNhc2UgYV9mX0RBRDoKKwkgICAgdGVtcGMgPSBhX21fREFEOworCSAgICBicmVhazsKKwljYXNlIGFfZl9UQUg6CisJICAgIHRlbXBjID0gYV9tX1RBSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2ZfWkFIOgorCSAgICB0ZW1wYyA9IGFfbV9aQUg7CisJICAgIGJyZWFrOworCWNhc2UgYV9mX0FJTjoKKwkgICAgdGVtcGMgPSBhX21fQUlOOworCSAgICBicmVhazsKKwljYXNlIGFfZl9HSEFJTjoKKwkgICAgdGVtcGMgPSBhX21fR0hBSU47CisJICAgIGJyZWFrOworCWNhc2UgYV9mX0ZFSDoKKwkgICAgdGVtcGMgPSBhX21fRkVIOworCSAgICBicmVhazsKKwljYXNlIGFfZl9RQUY6CisJICAgIHRlbXBjID0gYV9tX1FBRjsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2ZfS0FGOgorCSAgICB0ZW1wYyA9IGFfbV9LQUY7CisJICAgIGJyZWFrOworCWNhc2UgYV9mX0xBTToKKwkgICAgdGVtcGMgPSBhX21fTEFNOworCSAgICBicmVhazsKKwljYXNlIGFfZl9NRUVNOgorCSAgICB0ZW1wYyA9IGFfbV9NRUVNOworCSAgICBicmVhazsKKwljYXNlIGFfZl9OT09OOgorCSAgICB0ZW1wYyA9IGFfbV9OT09OOworCSAgICBicmVhazsKKwljYXNlIGFfZl9IRUg6CisJICAgIHRlbXBjID0gYV9tX0hFSDsKKwkgICAgYnJlYWs7CisJY2FzZSBhX2ZfWUVIOgorCSAgICB0ZW1wYyA9IGFfbV9ZRUg7CisJICAgIGJyZWFrOworCSAgICAvKiBOT1RFOiB0aGVzZSBlbmNvZGluZ3MgYXJlIG11bHRpLXBvc2l0aW9uYWwsIG5vID8KKwkJY2FzZSBhX2ZfTEFNX0FMRUZfTUFEREFfQUJPVkU6CisJCWNhc2UgYV9mX0xBTV9BTEVGX0hBTVpBX0FCT1ZFOgorCQljYXNlIGFfZl9MQU1fQUxFRl9IQU1aQV9CRUxPVzoKKwkJY2FzZSBhX2ZfTEFNX0FMRUY6CisJCSovCisJZGVmYXVsdDoKKwkgICAgdGVtcGMgPSAwOworICAgIH0KKworICAgIHJldHVybiB0ZW1wYzsKK30KKworCisvKgorICogQ2hhbmdlIHNoYXBlIC0gZnJvbSBDb21iaW5hdGlvbiAoMiBjaGFyKSB0byBhbiBJc29sYXRlZAorICovCisgICAgc3RhdGljIGludAorY2hnX2NfbGFhMmkoaGlkX2MpCisgICAgaW50IGhpZF9jOworeworICAgIGludCB0ZW1wYzsKKworICAgIHN3aXRjaCAoaGlkX2MpCisgICAgeworCWNhc2UgYV9BTEVGX01BRERBOgorCSAgICB0ZW1wYyA9IGFfc19MQU1fQUxFRl9NQUREQV9BQk9WRTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfSEFNWkFfQUJPVkU6CisJICAgIHRlbXBjID0gYV9zX0xBTV9BTEVGX0hBTVpBX0FCT1ZFOworCSAgICBicmVhazsKKwljYXNlIGFfQUxFRl9IQU1aQV9CRUxPVzoKKwkgICAgdGVtcGMgPSBhX3NfTEFNX0FMRUZfSEFNWkFfQkVMT1c7CisJICAgIGJyZWFrOworCWNhc2UgYV9BTEVGOgorCSAgICB0ZW1wYyA9IGFfc19MQU1fQUxFRjsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdGVtcGMgPSAwOworICAgIH0KKworICAgIHJldHVybiB0ZW1wYzsKK30KKworCisvKgorICogQ2hhbmdlIHNoYXBlIC0gZnJvbSBDb21iaW5hdGlvbi1Jc29sYXRlZCB0byBGaW5hbAorICovCisgICAgc3RhdGljIGludAorY2hnX2NfbGFhMmYoaGlkX2MpCisgICAgaW50IGhpZF9jOworeworICAgIGludCB0ZW1wYzsKKworICAgIHN3aXRjaCAoaGlkX2MpCisgICAgeworCWNhc2UgYV9BTEVGX01BRERBOgorCSAgICB0ZW1wYyA9IGFfZl9MQU1fQUxFRl9NQUREQV9BQk9WRTsKKwkgICAgYnJlYWs7CisJY2FzZSBhX0FMRUZfSEFNWkFfQUJPVkU6CisJICAgIHRlbXBjID0gYV9mX0xBTV9BTEVGX0hBTVpBX0FCT1ZFOworCSAgICBicmVhazsKKwljYXNlIGFfQUxFRl9IQU1aQV9CRUxPVzoKKwkgICAgdGVtcGMgPSBhX2ZfTEFNX0FMRUZfSEFNWkFfQkVMT1c7CisJICAgIGJyZWFrOworCWNhc2UgYV9BTEVGOgorCSAgICB0ZW1wYyA9IGFfZl9MQU1fQUxFRjsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdGVtcGMgPSAwOworICAgIH0KKworICAgIHJldHVybiB0ZW1wYzsKK30KKworLyoKKyAqIERvICJoYWxmLXNoYXBpbmciIG9uIGNoYXJhY3RlciAiYyIuICBSZXR1cm4gemVybyBpZiBubyBzaGFwaW5nLgorICovCisgICAgc3RhdGljIGludAoraGFsZl9zaGFwZShjKQorICAgIGludAkJYzsKK3sKKyAgICBpZiAoQV9pc19hKGMpKQorCXJldHVybiBjaGdfY19hMmkoYyk7CisgICAgaWYgKEFfaXNfdmFsaWQoYykgJiYgQV9pc19mKGMpKQorCXJldHVybiBjaGdfY19mMm0oYyk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEbyBBcmFiaWMgc2hhcGluZyBvbiBjaGFyYWN0ZXIgImMiLiAgUmV0dXJucyB0aGUgc2hhcGVkIGNoYXJhY3Rlci4KKyAqIG91dDogICAgImNjcCIgcG9pbnRzIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBjaGFyYWN0ZXIgdG8gYmUgc2hhcGVkLgorICogaW4vb3V0OiAiYzFwIiBwb2ludHMgdG8gdGhlIGZpcnN0IGNvbXBvc2luZyBjaGFyIGZvciAiYyIuCisgKiBpbjogICAgICJwcmV2X2MiICBpcyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIChub3Qgc2hhcGVkKQorICogaW46ICAgICAicHJldl9jMSIgaXMgdGhlIGZpcnN0IGNvbXBvc2luZyBjaGFyIGZvciB0aGUgcHJldmlvdXMgY2hhcgorICoJCSAgICAgKG5vdCBzaGFwZWQpCisgKiBpbjogICAgICJuZXh0X2MiICBpcyB0aGUgbmV4dCBjaGFyYWN0ZXIgKG5vdCBzaGFwZWQpLgorICovCisgICAgaW50CithcmFiaWNfc2hhcGUoYywgY2NwLCBjMXAsIHByZXZfYywgcHJldl9jMSwgbmV4dF9jKQorICAgIGludAkJYzsKKyAgICBpbnQJCSpjY3A7CisgICAgaW50CQkqYzFwOworICAgIGludAkJcHJldl9jOworICAgIGludAkJcHJldl9jMTsKKyAgICBpbnQJCW5leHRfYzsKK3sKKyAgICBpbnQJCWN1cnJfYzsKKyAgICBpbnQJCXNoYXBlX2M7CisgICAgaW50CQljdXJyX2xhYTsKKyAgICBpbnQJCXByZXZfbGFhOworCisgICAgLyogRGVhbCBvbmx5IHdpdGggQXJhYmljIGNoYXJhY3RlciwgcGFzcyBiYWNrIGFsbCBvdGhlcnMgKi8KKyAgICBpZiAoIUFfaXNfb2soYykpCisJcmV0dXJuIGM7CisKKyAgICAvKiBoYWxmLXNoYXBlIGN1cnJlbnQgYW5kIHByZXZpb3VzIGNoYXJhY3RlciAqLworICAgIHNoYXBlX2MgPSBoYWxmX3NoYXBlKHByZXZfYyk7CisKKyAgICAvKiBTYXZlIGF3YXkgY3VycmVudCBjaGFyYWN0ZXIgKi8KKyAgICBjdXJyX2MgPSBjOworCisgICAgY3Vycl9sYWEgPSBBX2ZpcnN0Y19sYWEoYywgKmMxcCk7CisgICAgcHJldl9sYWEgPSBBX2ZpcnN0Y19sYWEocHJldl9jLCBwcmV2X2MxKTsKKworICAgIGlmIChjdXJyX2xhYSkKKyAgICB7CisJaWYgKEFfaXNfdmFsaWQocHJldl9jKSAmJiAhQV9pc19mKHNoYXBlX2MpCisJCQkJCSAmJiAhQV9pc19zKHNoYXBlX2MpICYmICFwcmV2X2xhYSkKKwkgICAgY3Vycl9jID0gY2hnX2NfbGFhMmYoY3Vycl9sYWEpOworCWVsc2UKKwkgICAgY3Vycl9jID0gY2hnX2NfbGFhMmkoY3Vycl9sYWEpOworCisJLyogUmVtb3ZlIHRoZSBjb21wb3NpbmcgY2hhcmFjdGVyICovCisJKmMxcCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCFBX2lzX3ZhbGlkKHByZXZfYykgJiYgQV9pc192YWxpZChuZXh0X2MpKQorCWN1cnJfYyA9IGNoZ19jX2EyaShjKTsKKyAgICBlbHNlIGlmICghc2hhcGVfYyB8fCBBX2lzX2Yoc2hhcGVfYykgfHwgQV9pc19zKHNoYXBlX2MpIHx8IHByZXZfbGFhKQorCWN1cnJfYyA9IEFfaXNfdmFsaWQobmV4dF9jKSA/IGNoZ19jX2EyaShjKSA6IGNoZ19jX2EycyhjKTsKKyAgICBlbHNlIGlmIChBX2lzX3ZhbGlkKG5leHRfYykpCisJY3Vycl9jID0gQV9pc19pc28oYykgPyBjaGdfY19hMm0oYykgOiBjaGdfY19pMm0oYyk7CisgICAgZWxzZSBpZiAoQV9pc192YWxpZChwcmV2X2MpKQorCWN1cnJfYyA9IGNoZ19jX2EyZihjKTsKKyAgICBlbHNlCisJY3Vycl9jID0gY2hnX2NfYTJzKGMpOworCisgICAgLyogU2FuaXR5IGNoZWNrIC0tIGN1cnJfYyBzaG91bGQsIGluIHRoZSBmdXR1cmUsIG5ldmVyIGJlIDAuCisgICAgICogV2Ugc2hvdWxkLCBpbiB0aGUgZnV0dXJlLCBpbnNlcnQgYSBmYXRhbCBlcnJvciBoZXJlLiAqLworICAgIGlmIChjdXJyX2MgPT0gTlVMKQorCWN1cnJfYyA9IGM7CisKKyAgICBpZiAoY3Vycl9jICE9IGMgJiYgY2NwICE9IE5VTEwpCisgICAgeworCWNoYXJfdSBidWZbTUJfTUFYQllURVNdOworCisJLyogVXBkYXRlIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBjaGFyYWN0ZXIuICovCisJKCptYl9jaGFyMmJ5dGVzKShjdXJyX2MsIGJ1Zik7CisJKmNjcCA9IGJ1ZlswXTsKKyAgICB9CisKKyAgICAvKiBSZXR1cm4gdGhlIHNoYXBlZCBjaGFyYWN0ZXIgKi8KKyAgICByZXR1cm4gY3Vycl9jOworfQorCisKKy8qCisgKiBBX2ZpcnN0Y19sYWEgcmV0dXJucyBmaXJzdCBjaGFyYWN0ZXIgb2YgTEFBIGNvbWJpbmF0aW9uIGlmIGl0IGV4aXN0cworICovCisgICAgc3RhdGljIGludAorQV9maXJzdGNfbGFhKGMsIGMxKQorICAgIGludCBjOwkvKiBiYXNlIGNoYXJhY3RlciAqLworICAgIGludCBjMTsJLyogZmlyc3QgY29tcG9zaW5nIGNoYXJhY3RlciAqLworeworICAgIGlmIChjMSAhPSBOVUwgJiYgYyA9PSBhX0xBTSAmJiAhQV9pc19oYXJha2F0KGMxKSkKKwlyZXR1cm4gYzE7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIEFfaXNfaGFyYWthdCByZXR1cm5zIFRSVUUgaWYgJ2MnIGlzIGFuIEFyYWJpYyBIYXJha2F0IGNoYXJhY3RlcgorICoJCShoYXJha2F0L3RhbndlZW4pCisgKi8KKyAgICBzdGF0aWMgaW50CitBX2lzX2hhcmFrYXQoYykKKyAgICBpbnQgYzsKK3sKKyAgICByZXR1cm4gKGMgPj0gYV9GQVRIQVRBTiAmJiBjIDw9IGFfU1VLVU4pOworfQorCisKKy8qCisgKiBBX2lzX2lzbyByZXR1cm5zIFRSVUUgaWYgJ2MnIGlzIGFuIEFyYWJpYyBJU08tODg1OS02IGNoYXJhY3RlcgorICoJCShhbHBoYWJldC9udW1iZXIvcHVuY3R1YXRpb24pCisgKi8KKyAgICBzdGF0aWMgaW50CitBX2lzX2lzbyhjKQorICAgIGludCBjOworeworICAgIHJldHVybiAoKGMgPj0gYV9IQU1aQSAmJiBjIDw9IGFfR0hBSU4pCisJICAgIHx8IChjID49IGFfVEFUV0VFTCAmJiBjIDw9IGFfSEFNWkFfQkVMT1cpCisJICAgIHx8IGMgPT0gYV9NSU5JX0FMRUYpOworfQorCisKKy8qCisgKiBBX2lzX2Zvcm1iIHJldHVybnMgVFJVRSBpZiAnYycgaXMgYW4gQXJhYmljIDEwNjQ2LTEgRm9ybUIgY2hhcmFjdGVyCisgKgkJKGFscGhhYmV0L251bWJlci9wdW5jdHVhdGlvbikKKyAqLworICAgIHN0YXRpYyBpbnQKK0FfaXNfZm9ybWIoYykKKyAgICBpbnQgYzsKK3sKKyAgICByZXR1cm4gKChjID49IGFfc19GQVRIQVRBTiAmJiBjIDw9IGFfc19EQU1NQVRBTikKKwkgICAgfHwgYyA9PSBhX3NfS0FTUkFUQU4KKwkgICAgfHwgKGMgPj0gYV9zX0ZBVEhBICYmIGMgPD0gYV9mX0xBTV9BTEVGKQorCSAgICB8fCBjID09IGFfQllURV9PUkRFUl9NQVJLKTsKK30KKworCisvKgorICogQV9pc19vayByZXR1cm5zIFRSVUUgaWYgJ2MnIGlzIGFuIEFyYWJpYyAxMDY0NiAoODg1OS02IG9yIEZvcm0tQikKKyAqLworICAgIHN0YXRpYyBpbnQKK0FfaXNfb2soYykKKyAgICBpbnQgYzsKK3sKKyAgICByZXR1cm4gKEFfaXNfaXNvKGMpIHx8IEFfaXNfZm9ybWIoYykpOworfQorCisKKy8qCisgKiBBX2lzX3ZhbGlkIHJldHVybnMgVFJVRSBpZiAnYycgaXMgYW4gQXJhYmljIDEwNjQ2ICg4ODU5LTYgb3IgRm9ybS1CKQorICoJCXdpdGggc29tZSBleGNlcHRpb25zL2V4Y2x1c2lvbnMKKyAqLworICAgIHN0YXRpYyBpbnQKK0FfaXNfdmFsaWQoYykKKyAgICBpbnQgYzsKK3sKKyAgICByZXR1cm4gKEFfaXNfb2soYykgJiYgIUFfaXNfc3BlY2lhbChjKSk7Cit9CisKKworLyoKKyAqIEFfaXNfc3BlY2lhbCByZXR1cm5zIFRSVUUgaWYgJ2MnIGlzIG5vdCBhIHNwZWNpYWwgQXJhYmljIGNoYXJhY3Rlci4KKyAqCQlTcGVjaWFscyBkb24ndCBhZGhlcmUgdG8gbW9zdCBvZiB0aGUgcnVsZXMuCisgKi8KKyAgICBzdGF0aWMgaW50CitBX2lzX3NwZWNpYWwoYykKKyAgICBpbnQgYzsKK3sKKyAgICByZXR1cm4gKGMgPT0gYV9IQU1aQSB8fCBjID09IGFfc19IQU1aQSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYXJhYmljLmggYi9zcmMvYXJhYmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyOGZkMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9hcmFiaWMuaApAQCAtMCwwICsxLDI1OCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZCAgICBieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworLyoKKyAqIEFyYWJpYyBjaGFyYWN0ZXJzIGFyZSBjYXRhZ29yaXplZCBpbnRvIGZvbGxvd2luZyB0eXBlczoKKyAqCisgKiBJc29sYXRlZAktIGlzby04ODU5LTYgZm9ybQkgIGNoYXIgZGVub3RlZCB3aXRoCWFfKgorICogSW5pdGlhbAktIHVuaWNvZGUgZm9ybS1CIHN0YXJ0CSAgY2hhciBkZW5vdGVkIHdpdGgJYV9pXyoKKyAqIE1lZGlhbAktIHVuaWNvZGUgZm9ybS1CIG1pZGRsZSAgIGNoYXIgZGVub3RlZCB3aXRoCWFfbV8qCisgKiBGaW5hbAktIHVuaWNvZGUgZm9ybS1CIGZpbmFsCSAgY2hhciBkZW5vdGVkIHdpdGgJYV9mXyoKKyAqIFN0YW5kLUFsb25lCS0gdW5pY29kZSBmb3JtLUIgaXNvbGF0ZWQgY2hhciBkZW5vdGVkIHdpdGgJYV9zXyogKE5PVCBVU0VEKQorICoKKyAqIC0tCisgKgorICogQXV0aG9yOiBOYWRpbSBTaGFpa2xpICYgSXNhbSBCYXlhemlkaQorICogLSAoYmFzZWQgb24gVW5pY29kZSkKKyAqCisgKi8KKworLyoKKyAqIEFyYWJpYyBJU08tMTA2NDYtMSBjaGFyYWN0ZXIgc2V0IGRlZmluaXRpb24KKyAqLworCisvKgorICogQXJhYmljIElTTy04ODU5LTYgKHN1YnNldCBvZiAxMDY0NjsgMDYwMCAtIDA2RkYpCisgKi8KKyNkZWZpbmUgYV9DT01NQQkJCQkweDA2MEMKKyNkZWZpbmUgYV9TRU1JQ09MT04JCQkweDA2MUIKKyNkZWZpbmUgYV9RVUVTVElPTgkJCTB4MDYxRgorI2RlZmluZSBhX0hBTVpBCQkJCTB4MDYyMQorI2RlZmluZSBhX0FMRUZfTUFEREEJCQkweDA2MjIKKyNkZWZpbmUgYV9BTEVGX0hBTVpBX0FCT1ZFCQkweDA2MjMKKyNkZWZpbmUgYV9XQVdfSEFNWkEJCQkweDA2MjQKKyNkZWZpbmUgYV9BTEVGX0hBTVpBX0JFTE9XCQkweDA2MjUKKyNkZWZpbmUgYV9ZRUhfSEFNWkEJCQkweDA2MjYKKyNkZWZpbmUgYV9BTEVGCQkJCTB4MDYyNworI2RlZmluZSBhX0JFSAkJCQkweDA2MjgKKyNkZWZpbmUgYV9URUhfTUFSQlVUQQkJCTB4MDYyOQorI2RlZmluZSBhX1RFSAkJCQkweDA2MmEKKyNkZWZpbmUgYV9USEVICQkJCTB4MDYyYgorI2RlZmluZSBhX0pFRU0JCQkJMHgwNjJjCisjZGVmaW5lIGFfSEFICQkJCTB4MDYyZAorI2RlZmluZSBhX0tIQUgJCQkJMHgwNjJlCisjZGVmaW5lIGFfREFMCQkJCTB4MDYyZgorI2RlZmluZSBhX1RIQUwJCQkJMHgwNjMwCisjZGVmaW5lIGFfUkVICQkJCTB4MDYzMQorI2RlZmluZSBhX1pBSU4JCQkJMHgwNjMyCisjZGVmaW5lIGFfU0VFTgkJCQkweDA2MzMKKyNkZWZpbmUgYV9TSEVFTgkJCQkweDA2MzQKKyNkZWZpbmUgYV9TQUQJCQkJMHgwNjM1CisjZGVmaW5lIGFfREFECQkJCTB4MDYzNgorI2RlZmluZSBhX1RBSAkJCQkweDA2MzcKKyNkZWZpbmUgYV9aQUgJCQkJMHgwNjM4CisjZGVmaW5lIGFfQUlOCQkJCTB4MDYzOQorI2RlZmluZSBhX0dIQUlOCQkJCTB4MDYzYQorI2RlZmluZSBhX1RBVFdFRUwJCQkweDA2NDAKKyNkZWZpbmUgYV9GRUgJCQkJMHgwNjQxCisjZGVmaW5lIGFfUUFGCQkJCTB4MDY0MgorI2RlZmluZSBhX0tBRgkJCQkweDA2NDMKKyNkZWZpbmUgYV9MQU0JCQkJMHgwNjQ0CisjZGVmaW5lIGFfTUVFTQkJCQkweDA2NDUKKyNkZWZpbmUgYV9OT09OCQkJCTB4MDY0NgorI2RlZmluZSBhX0hFSAkJCQkweDA2NDcKKyNkZWZpbmUgYV9XQVcJCQkJMHgwNjQ4CisjZGVmaW5lIGFfQUxFRl9NQUtTVVJBCQkJMHgwNjQ5CisjZGVmaW5lIGFfWUVICQkJCTB4MDY0YQorCisjZGVmaW5lIGFfRkFUSEFUQU4JCQkweDA2NGIKKyNkZWZpbmUgYV9EQU1NQVRBTgkJCTB4MDY0YworI2RlZmluZSBhX0tBU1JBVEFOCQkJMHgwNjRkCisjZGVmaW5lIGFfRkFUSEEJCQkJMHgwNjRlCisjZGVmaW5lIGFfREFNTUEJCQkJMHgwNjRmCisjZGVmaW5lIGFfS0FTUkEJCQkJMHgwNjUwCisjZGVmaW5lIGFfU0hBRERBCQkJMHgwNjUxCisjZGVmaW5lIGFfU1VLVU4JCQkJMHgwNjUyCisKKyNkZWZpbmUgYV9NQUREQV9BQk9WRQkJCTB4MDY1MworI2RlZmluZSBhX0hBTVpBX0FCT1ZFCQkJMHgwNjU0CisjZGVmaW5lIGFfSEFNWkFfQkVMT1cJCQkweDA2NTUKKworI2RlZmluZSBhX1pFUk8JCQkJMHgwNjYwCisjZGVmaW5lIGFfT05FCQkJCTB4MDY2MQorI2RlZmluZSBhX1RXTwkJCQkweDA2NjIKKyNkZWZpbmUgYV9USFJFRQkJCQkweDA2NjMKKyNkZWZpbmUgYV9GT1VSCQkJCTB4MDY2NAorI2RlZmluZSBhX0ZJVkUJCQkJMHgwNjY1CisjZGVmaW5lIGFfU0lYCQkJCTB4MDY2NgorI2RlZmluZSBhX1NFVkVOCQkJCTB4MDY2NworI2RlZmluZSBhX0VJR0hUCQkJCTB4MDY2OAorI2RlZmluZSBhX05JTkUJCQkJMHgwNjY5CisjZGVmaW5lIGFfUEVSQ0VOVAkJCTB4MDY2YQorI2RlZmluZSBhX0RFQ0lNQUwJCQkweDA2NmIKKyNkZWZpbmUgYV9USE9VU0FORFMJCQkweDA2NmMKKyNkZWZpbmUgYV9TVEFSCQkJCTB4MDY2ZAorI2RlZmluZSBhX01JTklfQUxFRgkJCTB4MDY3MAorLyogUmVzdCBvZiA4ODU5LTYgZG9lcyBub3QgcmVsYXRlIHRvIEFyYWJpYyAqLworCisvKgorICogQXJhYmljIFByZXNlbnRhdGlvbiBGb3JtLUIgKHN1YnNldCBvZiAxMDY0NjsgRkU3MCAtIEZFRkYpCisgKgorICogIHMgLT4gaXNvbGF0ZWQKKyAqICBpIC0+IGluaXRpYWwKKyAqICBtIC0+IG1lZGlhbAorICogIGYgLT4gZmluYWwKKyAqCisgKi8KKyNkZWZpbmUgYV9zX0ZBVEhBVEFOCQkJMHhmZTcwCisjZGVmaW5lIGFfbV9UQVRXRUVMX0ZBVEhBVEFOCQkweGZlNzEKKyNkZWZpbmUgYV9zX0RBTU1BVEFOCQkJMHhmZTcyCisKKyNkZWZpbmUgYV9zX0tBU1JBVEFOCQkJMHhmZTc0CisKKyNkZWZpbmUgYV9zX0ZBVEhBCQkJMHhmZTc2CisjZGVmaW5lIGFfbV9GQVRIQQkJCTB4ZmU3NworI2RlZmluZSBhX3NfREFNTUEJCQkweGZlNzgKKyNkZWZpbmUgYV9tX0RBTU1BCQkJMHhmZTc5CisjZGVmaW5lIGFfc19LQVNSQQkJCTB4ZmU3YQorI2RlZmluZSBhX21fS0FTUkEJCQkweGZlN2IKKyNkZWZpbmUgYV9zX1NIQUREQQkJCTB4ZmU3YworI2RlZmluZSBhX21fU0hBRERBCQkJMHhmZTdkCisjZGVmaW5lIGFfc19TVUtVTgkJCTB4ZmU3ZQorI2RlZmluZSBhX21fU1VLVU4JCQkweGZlN2YKKworI2RlZmluZSBhX3NfSEFNWkEJCQkweGZlODAKKyNkZWZpbmUgYV9zX0FMRUZfTUFEREEJCQkweGZlODEKKyNkZWZpbmUgYV9mX0FMRUZfTUFEREEJCQkweGZlODIKKyNkZWZpbmUgYV9zX0FMRUZfSEFNWkFfQUJPVkUJCTB4ZmU4MworI2RlZmluZSBhX2ZfQUxFRl9IQU1aQV9BQk9WRQkJMHhmZTg0CisjZGVmaW5lIGFfc19XQVdfSEFNWkEJCQkweGZlODUKKyNkZWZpbmUgYV9mX1dBV19IQU1aQQkJCTB4ZmU4NgorI2RlZmluZSBhX3NfQUxFRl9IQU1aQV9CRUxPVwkJMHhmZTg3CisjZGVmaW5lIGFfZl9BTEVGX0hBTVpBX0JFTE9XCQkweGZlODgKKyNkZWZpbmUgYV9zX1lFSF9IQU1aQQkJCTB4ZmU4OQorI2RlZmluZSBhX2ZfWUVIX0hBTVpBCQkJMHhmZThhCisjZGVmaW5lIGFfaV9ZRUhfSEFNWkEJCQkweGZlOGIKKyNkZWZpbmUgYV9tX1lFSF9IQU1aQQkJCTB4ZmU4YworI2RlZmluZSBhX3NfQUxFRgkJCTB4ZmU4ZAorI2RlZmluZSBhX2ZfQUxFRgkJCTB4ZmU4ZQorI2RlZmluZSBhX3NfQkVICQkJCTB4ZmU4ZgorI2RlZmluZSBhX2ZfQkVICQkJCTB4ZmU5MAorI2RlZmluZSBhX2lfQkVICQkJCTB4ZmU5MQorI2RlZmluZSBhX21fQkVICQkJCTB4ZmU5MgorI2RlZmluZSBhX3NfVEVIX01BUkJVVEEJCQkweGZlOTMKKyNkZWZpbmUgYV9mX1RFSF9NQVJCVVRBCQkJMHhmZTk0CisjZGVmaW5lIGFfc19URUgJCQkJMHhmZTk1CisjZGVmaW5lIGFfZl9URUgJCQkJMHhmZTk2CisjZGVmaW5lIGFfaV9URUgJCQkJMHhmZTk3CisjZGVmaW5lIGFfbV9URUgJCQkJMHhmZTk4CisjZGVmaW5lIGFfc19USEVICQkJMHhmZTk5CisjZGVmaW5lIGFfZl9USEVICQkJMHhmZTlhCisjZGVmaW5lIGFfaV9USEVICQkJMHhmZTliCisjZGVmaW5lIGFfbV9USEVICQkJMHhmZTljCisjZGVmaW5lIGFfc19KRUVNCQkJMHhmZTlkCisjZGVmaW5lIGFfZl9KRUVNCQkJMHhmZTllCisjZGVmaW5lIGFfaV9KRUVNCQkJMHhmZTlmCisjZGVmaW5lIGFfbV9KRUVNCQkJMHhmZWEwCisjZGVmaW5lIGFfc19IQUgJCQkJMHhmZWExCisjZGVmaW5lIGFfZl9IQUgJCQkJMHhmZWEyCisjZGVmaW5lIGFfaV9IQUgJCQkJMHhmZWEzCisjZGVmaW5lIGFfbV9IQUgJCQkJMHhmZWE0CisjZGVmaW5lIGFfc19LSEFICQkJMHhmZWE1CisjZGVmaW5lIGFfZl9LSEFICQkJMHhmZWE2CisjZGVmaW5lIGFfaV9LSEFICQkJMHhmZWE3CisjZGVmaW5lIGFfbV9LSEFICQkJMHhmZWE4CisjZGVmaW5lIGFfc19EQUwJCQkJMHhmZWE5CisjZGVmaW5lIGFfZl9EQUwJCQkJMHhmZWFhCisjZGVmaW5lIGFfc19USEFMCQkJMHhmZWFiCisjZGVmaW5lIGFfZl9USEFMCQkJMHhmZWFjCisjZGVmaW5lIGFfc19SRUgJCQkJMHhmZWFkCisjZGVmaW5lIGFfZl9SRUgJCQkJMHhmZWFlCisjZGVmaW5lIGFfc19aQUlOCQkJMHhmZWFmCisjZGVmaW5lIGFfZl9aQUlOCQkJMHhmZWIwCisjZGVmaW5lIGFfc19TRUVOCQkJMHhmZWIxCisjZGVmaW5lIGFfZl9TRUVOCQkJMHhmZWIyCisjZGVmaW5lIGFfaV9TRUVOCQkJMHhmZWIzCisjZGVmaW5lIGFfbV9TRUVOCQkJMHhmZWI0CisjZGVmaW5lIGFfc19TSEVFTgkJCTB4ZmViNQorI2RlZmluZSBhX2ZfU0hFRU4JCQkweGZlYjYKKyNkZWZpbmUgYV9pX1NIRUVOCQkJMHhmZWI3CisjZGVmaW5lIGFfbV9TSEVFTgkJCTB4ZmViOAorI2RlZmluZSBhX3NfU0FECQkJCTB4ZmViOQorI2RlZmluZSBhX2ZfU0FECQkJCTB4ZmViYQorI2RlZmluZSBhX2lfU0FECQkJCTB4ZmViYgorI2RlZmluZSBhX21fU0FECQkJCTB4ZmViYworI2RlZmluZSBhX3NfREFECQkJCTB4ZmViZAorI2RlZmluZSBhX2ZfREFECQkJCTB4ZmViZQorI2RlZmluZSBhX2lfREFECQkJCTB4ZmViZgorI2RlZmluZSBhX21fREFECQkJCTB4ZmVjMAorI2RlZmluZSBhX3NfVEFICQkJCTB4ZmVjMQorI2RlZmluZSBhX2ZfVEFICQkJCTB4ZmVjMgorI2RlZmluZSBhX2lfVEFICQkJCTB4ZmVjMworI2RlZmluZSBhX21fVEFICQkJCTB4ZmVjNAorI2RlZmluZSBhX3NfWkFICQkJCTB4ZmVjNQorI2RlZmluZSBhX2ZfWkFICQkJCTB4ZmVjNgorI2RlZmluZSBhX2lfWkFICQkJCTB4ZmVjNworI2RlZmluZSBhX21fWkFICQkJCTB4ZmVjOAorI2RlZmluZSBhX3NfQUlOCQkJCTB4ZmVjOQorI2RlZmluZSBhX2ZfQUlOCQkJCTB4ZmVjYQorI2RlZmluZSBhX2lfQUlOCQkJCTB4ZmVjYgorI2RlZmluZSBhX21fQUlOCQkJCTB4ZmVjYworI2RlZmluZSBhX3NfR0hBSU4JCQkweGZlY2QKKyNkZWZpbmUgYV9mX0dIQUlOCQkJMHhmZWNlCisjZGVmaW5lIGFfaV9HSEFJTgkJCTB4ZmVjZgorI2RlZmluZSBhX21fR0hBSU4JCQkweGZlZDAKKyNkZWZpbmUgYV9zX0ZFSAkJCQkweGZlZDEKKyNkZWZpbmUgYV9mX0ZFSAkJCQkweGZlZDIKKyNkZWZpbmUgYV9pX0ZFSAkJCQkweGZlZDMKKyNkZWZpbmUgYV9tX0ZFSAkJCQkweGZlZDQKKyNkZWZpbmUgYV9zX1FBRgkJCQkweGZlZDUKKyNkZWZpbmUgYV9mX1FBRgkJCQkweGZlZDYKKyNkZWZpbmUgYV9pX1FBRgkJCQkweGZlZDcKKyNkZWZpbmUgYV9tX1FBRgkJCQkweGZlZDgKKyNkZWZpbmUgYV9zX0tBRgkJCQkweGZlZDkKKyNkZWZpbmUgYV9mX0tBRgkJCQkweGZlZGEKKyNkZWZpbmUgYV9pX0tBRgkJCQkweGZlZGIKKyNkZWZpbmUgYV9tX0tBRgkJCQkweGZlZGMKKyNkZWZpbmUgYV9zX0xBTQkJCQkweGZlZGQKKyNkZWZpbmUgYV9mX0xBTQkJCQkweGZlZGUKKyNkZWZpbmUgYV9pX0xBTQkJCQkweGZlZGYKKyNkZWZpbmUgYV9tX0xBTQkJCQkweGZlZTAKKyNkZWZpbmUgYV9zX01FRU0JCQkweGZlZTEKKyNkZWZpbmUgYV9mX01FRU0JCQkweGZlZTIKKyNkZWZpbmUgYV9pX01FRU0JCQkweGZlZTMKKyNkZWZpbmUgYV9tX01FRU0JCQkweGZlZTQKKyNkZWZpbmUgYV9zX05PT04JCQkweGZlZTUKKyNkZWZpbmUgYV9mX05PT04JCQkweGZlZTYKKyNkZWZpbmUgYV9pX05PT04JCQkweGZlZTcKKyNkZWZpbmUgYV9tX05PT04JCQkweGZlZTgKKyNkZWZpbmUgYV9zX0hFSAkJCQkweGZlZTkKKyNkZWZpbmUgYV9mX0hFSAkJCQkweGZlZWEKKyNkZWZpbmUgYV9pX0hFSAkJCQkweGZlZWIKKyNkZWZpbmUgYV9tX0hFSAkJCQkweGZlZWMKKyNkZWZpbmUgYV9zX1dBVwkJCQkweGZlZWQKKyNkZWZpbmUgYV9mX1dBVwkJCQkweGZlZWUKKyNkZWZpbmUgYV9zX0FMRUZfTUFLU1VSQQkJMHhmZWVmCisjZGVmaW5lIGFfZl9BTEVGX01BS1NVUkEJCTB4ZmVmMAorI2RlZmluZSBhX3NfWUVICQkJCTB4ZmVmMQorI2RlZmluZSBhX2ZfWUVICQkJCTB4ZmVmMgorI2RlZmluZSBhX2lfWUVICQkJCTB4ZmVmMworI2RlZmluZSBhX21fWUVICQkJCTB4ZmVmNAorI2RlZmluZSBhX3NfTEFNX0FMRUZfTUFEREFfQUJPVkUJMHhmZWY1CisjZGVmaW5lIGFfZl9MQU1fQUxFRl9NQUREQV9BQk9WRQkweGZlZjYKKyNkZWZpbmUgYV9zX0xBTV9BTEVGX0hBTVpBX0FCT1ZFCTB4ZmVmNworI2RlZmluZSBhX2ZfTEFNX0FMRUZfSEFNWkFfQUJPVkUJMHhmZWY4CisjZGVmaW5lIGFfc19MQU1fQUxFRl9IQU1aQV9CRUxPVwkweGZlZjkKKyNkZWZpbmUgYV9mX0xBTV9BTEVGX0hBTVpBX0JFTE9XCTB4ZmVmYQorI2RlZmluZSBhX3NfTEFNX0FMRUYJCQkweGZlZmIKKyNkZWZpbmUgYV9mX0xBTV9BTEVGCQkJMHhmZWZjCisKKyNkZWZpbmUgYV9CWVRFX09SREVSX01BUksJCTB4ZmVmZgorCisvKiBSYW5nZSBvZiBBcmFiaWMgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGJlIHNoYXBlZC4gKi8KKyNkZWZpbmUgQVJBQklDX0NIQVIoYykJCSgoYykgPj0gYV9IQU1aQSAmJiAoYykgPD0gYV9NSU5JX0FMRUYpCmRpZmYgLS1naXQgYS9zcmMvYXNjaWkuaCBiL3NyYy9hc2NpaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMzQ0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYXNjaWkuaApAQCAtMCwwICsxLDIwMSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworLyoKKyAqIERlZmluaXRpb25zIG9mIHZhcmlvdXMgY29tbW9uIGNvbnRyb2wgY2hhcmFjdGVycy4KKyAqIEZvciBFQkNESUMgd2UgaGF2ZSB0byB1c2UgZGlmZmVyZW50IHZhbHVlcy4KKyAqLworCisjaWZuZGVmIEVCQ0RJQworCisvKiBJRl9FQihBU0NJSV9jb25zdGFudCwgRUJDRElDX2NvbnN0YW50KSAqLworI2RlZmluZSBJRl9FQihhLCBiKQlhCisKKyNkZWZpbmUgQ2hhck9yZCh4KQkoKHgpIDwgJ2EnID8gKHgpIC0gJ0EnIDogKHgpIC0gJ2EnKQorI2RlZmluZSBDaGFyT3JkTG93KHgpCSgoeCkgLSAnYScpCisjZGVmaW5lIENoYXJPcmRVcCh4KQkoKHgpIC0gJ0EnKQorI2RlZmluZSBST1QxMyhjLCBhKQkoKCgoKGMpIC0gKGEpKSArIDEzKSAlIDI2KSArIChhKSkKKworI2RlZmluZSBOVUwJCSdcMDAwJworI2RlZmluZSBCRUxMCQknXDAwNycKKyNkZWZpbmUgQlMJCSdcMDEwJworI2RlZmluZSBUQUIJCSdcMDExJworI2RlZmluZSBOTAkJJ1wwMTInCisjZGVmaW5lIE5MX1NUUgkJKGNoYXJfdSAqKSJcMDEyIgorI2RlZmluZSBGRgkJJ1wwMTQnCisjZGVmaW5lIENBUgkJJ1wwMTUnCS8qIENSIGlzIHVzZWQgYnkgTWFjIE9TIFggKi8KKyNkZWZpbmUgRVNDCQknXDAzMycKKyNkZWZpbmUgRVNDX1NUUgkJKGNoYXJfdSAqKSJcMDMzIgorI2RlZmluZSBFU0NfU1RSX25jCSJcMDMzIgorI2RlZmluZSBERUwJCTB4N2YKKyNkZWZpbmUgREVMX1NUUgkJKGNoYXJfdSAqKSJcMTc3IgorI2RlZmluZSBDU0kJCTB4OWIJLyogQ29udHJvbCBTZXF1ZW5jZSBJbnRyb2R1Y2VyICovCisjZGVmaW5lIENTSV9TVFIJCSJcMjMzIgorI2RlZmluZSBEQ1MJCTB4OTAJLyogRGV2aWNlIENvbnRyb2wgU3RyaW5nICovCisjZGVmaW5lIFNURVJNCQkweDljCS8qIFN0cmluZyBUZXJtaW5hdG9yICovCisKKyNkZWZpbmUgUE9VTkQJCTB4QTMKKworI2RlZmluZSBDdHJsX2Nocih4KQkoVE9VUFBFUl9BU0MoeCkgXiAweDQwKSAvKiAnPycgLT4gREVMLCAnQCcgLT4gXkAsIGV0Yy4gKi8KKyNkZWZpbmUgTWV0YSh4KQkJKCh4KSB8IDB4ODApCisKKyNkZWZpbmUgQ1RSTF9GX1NUUgkiXDAwNiIKKyNkZWZpbmUgQ1RSTF9IX1NUUgkiXDAxMCIKKyNkZWZpbmUgQ1RSTF9WX1NUUgkiXDAyNiIKKyNkZWZpbmUgQ1RSTF9XX1NUUgkiXDAyNyIKKworI2RlZmluZSBDdHJsX0FUCQkwICAgLyogQCAqLworI2RlZmluZSBDdHJsX0EJCTEKKyNkZWZpbmUgQ3RybF9CCQkyCisjZGVmaW5lIEN0cmxfQwkJMworI2RlZmluZSBDdHJsX0QJCTQKKyNkZWZpbmUgQ3RybF9FCQk1CisjZGVmaW5lIEN0cmxfRgkJNgorI2RlZmluZSBDdHJsX0cJCTcKKyNkZWZpbmUgQ3RybF9ICQk4CisjZGVmaW5lIEN0cmxfSQkJOQorI2RlZmluZSBDdHJsX0oJCTEwCisjZGVmaW5lIEN0cmxfSwkJMTEKKyNkZWZpbmUgQ3RybF9MCQkxMgorI2RlZmluZSBDdHJsX00JCTEzCisjZGVmaW5lIEN0cmxfTgkJMTQKKyNkZWZpbmUgQ3RybF9PCQkxNQorI2RlZmluZSBDdHJsX1AJCTE2CisjZGVmaW5lIEN0cmxfUQkJMTcKKyNkZWZpbmUgQ3RybF9SCQkxOAorI2RlZmluZSBDdHJsX1MJCTE5CisjZGVmaW5lIEN0cmxfVAkJMjAKKyNkZWZpbmUgQ3RybF9VCQkyMQorI2RlZmluZSBDdHJsX1YJCTIyCisjZGVmaW5lIEN0cmxfVwkJMjMKKyNkZWZpbmUgQ3RybF9YCQkyNAorI2RlZmluZSBDdHJsX1kJCTI1CisjZGVmaW5lIEN0cmxfWgkJMjYKKyNkZWZpbmUgQ3RybF9MU0IJMjcgIC8qIFsgTGVmdCBTcXVhcmUgQnJhY2tldCAqLworI2RlZmluZSBDdHJsX0JTTAkyOCAgLyogXCBCYWNrU0xhc2ggKi8KKyNkZWZpbmUgQ3RybF9SU0IJMjkgIC8qIF0gUmlnaHQgU3F1YXJlIEJyYWNrZXQgKi8KKyNkZWZpbmUgQ3RybF9IQVQJMzAgIC8qIF4gKi8KKyNkZWZpbmUgQ3RybF9fCQkzMQorCisjZWxzZQorCisvKiBFQkNESUMgKi8KKworLyogSUZfRUIoQVNDSUlfY29uc3RhbnQsIEVCQ0RJQ19jb25zdGFudCkgKi8KKyNkZWZpbmUgSUZfRUIoYSwgYikJYgorCisvKgorICogRmluZGluZyB0aGUgcG9zaXRpb24gaW4gdGhlIGFscGhhYmV0IGlzIG5vdCBzdHJhaWdodGZvcndhcmQgaW4gRUJDRElDLgorICogVGhlcmUgYXJlIGdhcHMgaW4gdGhlIGNvZGUgdGFibGUuCisgKiAnYScgKyAxID09ICdiJywgYnV0OiAnaScgKyA3ID09ICdqJyBhbmQgJ3InICsgOCA9PSAncycKKyAqLworI2RlZmluZSBDaGFyT3JkX18oYykgKChjKSA8ICgnaicgLSAnYScpID8gKGMpIDogKChjKSA8ICgncycgLSAnYScpID8gKGMpIC0gNyA6IChjKSAtIDcgLSA4KSkKKyNkZWZpbmUgQ2hhck9yZExvdyh4KSAoQ2hhck9yZF9fKCh4KSAtICdhJykpCisjZGVmaW5lIENoYXJPcmRVcCh4KSAoQ2hhck9yZF9fKCh4KSAtICdBJykpCisjZGVmaW5lIENoYXJPcmQoeCkgKGlzdXBwZXIoeCkgPyBDaGFyT3JkVXAoeCkgOiBDaGFyT3JkTG93KHgpKQorCisjZGVmaW5lIEVCQ0RJQ19DSEFSX0FERF8oeCkgKCh4KSA8IDA/J2EnOih4KT4yNT8neic6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ilt4XSkKKyNkZWZpbmUgRUJDRElDX0NIQVJfQUREKGMscykgKGlzdXBwZXIoYykgPyB0b3VwcGVyKEVCQ0RJQ19DSEFSX0FERF8oQ2hhck9yZFVwKGMpKyhzKSkpIDogRUJDRElDX0NIQVJfQUREXyhDaGFyT3JkTG93KGMpKyhzKSkpCisKKyNkZWZpbmUgUjEzXyhjKSAoImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IlsoKGMpICsgMTMpICUgMjZdKQorI2RlZmluZSBST1QxMyhjLCBhKSAgKGlzdXBwZXIoYykgPyB0b3VwcGVyKFIxM18oQ2hhck9yZFVwKGMpKSkgOiBSMTNfKENoYXJPcmRMb3coYykpKQorCisjZGVmaW5lIE5VTAkJJ1wwMDAnCisjZGVmaW5lIEJFTEwJCSdceDJmJworI2RlZmluZSBCUwkJJ1x4MTYnCisjZGVmaW5lIFRBQgkJJ1x4MDUnCisjZGVmaW5lIE5MCQknXHgxNScKKyNkZWZpbmUgTkxfU1RSCQkoY2hhcl91ICopIlx4MTUiCisjZGVmaW5lIEZGCQknXHgwQycKKyNkZWZpbmUgQ0FSCQknXHgwRCcKKyNkZWZpbmUgRVNDCQknXHgyNycKKyNkZWZpbmUgRVNDX1NUUgkJKGNoYXJfdSAqKSJceDI3IgorI2RlZmluZSBFU0NfU1RSX25jCSJceDI3IgorI2RlZmluZSBERUwJCTB4MDcKKyNkZWZpbmUgREVMX1NUUgkJKGNoYXJfdSAqKSJcMDA3IgorLyogVE9ETzogRUJDRElDIENvZGUgcGFnZSBkZXBlbmRlbnQgKGhlcmUgMTA0NykgKi8KKyNkZWZpbmUgQ1NJCQkweDliCS8qIENvbnRyb2wgU2VxdWVuY2UgSW50cm9kdWNlciAqLworI2RlZmluZSBDU0lfU1RSCQkiXDIzMyIKKyNkZWZpbmUgRENTCQkweDkwCS8qIERldmljZSBDb250cm9sIFN0cmluZyAqLworI2RlZmluZSBTVEVSTQkJMHg5YwkvKiBTdHJpbmcgVGVybWluYXRvciAqLworCisjZGVmaW5lIFBPVU5ECQknoycKKworI2RlZmluZSBDVFJMX0ZfU1RSCSJcMDU2IgorI2RlZmluZSBDVFJMX0hfU1RSCSJcMDI2IgorI2RlZmluZSBDVFJMX1ZfU1RSCSJcMDYyIgorI2RlZmluZSBDVFJMX1dfU1RSCSJcMDQ2IgorCisjZGVmaW5lIEN0cmxfQVQJCTB4MDAgICAvKiBAICovCisjZGVmaW5lIEN0cmxfQQkJMHgwMQorI2RlZmluZSBDdHJsX0IJCTB4MDIKKyNkZWZpbmUgQ3RybF9DCQkweDAzCisjZGVmaW5lIEN0cmxfRAkJMHgzNworI2RlZmluZSBDdHJsX0UJCTB4MkQKKyNkZWZpbmUgQ3RybF9GCQkweDJFCisjZGVmaW5lIEN0cmxfRwkJMHgyRgorI2RlZmluZSBDdHJsX0gJCTB4MTYKKyNkZWZpbmUgQ3RybF9JCQkweDA1CisjZGVmaW5lIEN0cmxfSgkJMHgxNQorI2RlZmluZSBDdHJsX0sJCTB4MEIKKyNkZWZpbmUgQ3RybF9MCQkweDBDCisjZGVmaW5lIEN0cmxfTQkJMHgwRAorI2RlZmluZSBDdHJsX04JCTB4MEUKKyNkZWZpbmUgQ3RybF9PCQkweDBGCisjZGVmaW5lIEN0cmxfUAkJMHgxMAorI2RlZmluZSBDdHJsX1EJCTB4MTEKKyNkZWZpbmUgQ3RybF9SCQkweDEyCisjZGVmaW5lIEN0cmxfUwkJMHgxMworI2RlZmluZSBDdHJsX1QJCTB4M0MKKyNkZWZpbmUgQ3RybF9VCQkweDNECisjZGVmaW5lIEN0cmxfVgkJMHgzMgorI2RlZmluZSBDdHJsX1cJCTB4MjYKKyNkZWZpbmUgQ3RybF9YCQkweDE4CisjZGVmaW5lIEN0cmxfWQkJMHgxOQorI2RlZmluZSBDdHJsX1oJCTB4M0YKKyNkZWZpbmUgQ3RybF9MU0IJMHgyNyAgLyogWyBMZWZ0IFNxdWFyZSBCcmFja2V0ICovCisjZGVmaW5lIEN0cmxfUlNCCTB4MUQgIC8qIF0gUmlnaHQgU3F1YXJlIEJyYWNrZXQgKi8KKyNkZWZpbmUgQ3RybF9CU0wJMHgxQyAgLyogXCBCYWNrU0xhc2ggKi8KKyNkZWZpbmUgQ3RybF9IQVQJMHgxRSAgLyogXiAqLworI2RlZmluZSBDdHJsX18JCTB4MUYKKworI2RlZmluZSBDdHJsX2Nocih4KQkoQ3RybFRhYmxlWyh4KV0pCitleHRlcm4gY2hhciBDdHJsVGFibGVbXTsKKworI2RlZmluZSBDdHJsQ2hhcih4KQkoKHggPCAnICcpID8gQ3RybENoYXJUYWJsZVsoeCldIDogMCkKK2V4dGVybiBjaGFyIEN0cmxDaGFyVGFibGVbXTsKKworI2RlZmluZSBNZXRhQ2hhcih4KQkoKHggPCAnICcpID8gTWV0YUNoYXJUYWJsZVsoeCldIDogMCkKK2V4dGVybiBjaGFyIE1ldGFDaGFyVGFibGVbXTsKKworI2VuZGlmIC8qIGRlZmluZWQgRUJDRElDICovCisKKy8qCisgKiBDaGFyYWN0ZXIgdGhhdCBzZXBhcmF0ZXMgZGlyIG5hbWVzIGluIGEgcGF0aC4KKyAqIEZvciBNUy1ET1MsIFdJTjMyIGFuZCBPUy8yIHdlIHVzZSBhIGJhY2tzbGFzaC4gIEEgc2xhc2ggbW9zdGx5IHdvcmtzCisgKiBmaW5lLCBidXQgdGhlcmUgYXJlIHBsYWNlcyB3aGVyZSBpdCBkb2Vzbid0IChlLmcuIGluIGEgY29tbWFuZCBuYW1lKS4KKyAqIEZvciBNYWNpbnRvc2ggd2UgdXNlIGEgY29sb24uCisgKiBGb3IgQWNvcm4gd2UgdXNlIGEgZG90LgorICovCisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisjIGRlZmluZSBQQVRIU0VQCXBzZXBjCisjIGRlZmluZSBQQVRIU0VQU1RSCXBzZXBzCisjZWxzZQorIyBpZmRlZiBDT0xPTl9BU19QQVRIU0VQCisjICBkZWZpbmUgUEFUSFNFUAknOicKKyMgIGRlZmluZSBQQVRIU0VQU1RSCSI6IgorIyBlbHNlCisjICBpZmRlZiBSSVNDT1MKKyMgICBkZWZpbmUgUEFUSFNFUAknLicKKyMgICBkZWZpbmUgUEFUSFNFUFNUUgkiLiIKKyMgIGVsc2UKKyMgICBkZWZpbmUgUEFUSFNFUAknLycKKyMgICBkZWZpbmUgUEFUSFNFUFNUUgkiLyIKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9hdXRvL2NvbmZpZ3VyZSBiL3NyYy9hdXRvL2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMDQwYTc1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2F1dG8vY29uZmlndXJlCkBAIC0wLDAgKzEsODY5MiBAQAorIyEgL2Jpbi9zaAorCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IHVzaW5nIGF1dG9jb25mIHZlcnNpb24gMi4xMyAKKyMgQ29weXJpZ2h0IChDKSAxOTkyLCA5MywgOTQsIDk1LCA5NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorCisjIERlZmF1bHRzOgorYWNfaGVscD0KK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKKyMgQW55IGFkZGl0aW9ucyBmcm9tIGNvbmZpZ3VyZS5pbjoKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZGlzYWJsZS1kYXJ3aW4gICAgICAgIERpc2FibGUgRGFyd2luIChNYWMgT1MgWCkgc3VwcG9ydC4iCithY19oZWxwPSIkYWNfaGVscAorICAtLXdpdGgtdmltLW5hbWU9TkFNRSAgICB3aGF0IHRvIGNhbGwgdGhlIFZpbSBleGVjdXRhYmxlIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS13aXRoLWV4LW5hbWU9TkFNRSAgICAgd2hhdCB0byBjYWxsIHRoZSBFeCBleGVjdXRhYmxlIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS13aXRoLXZpZXctbmFtZT1OQU1FICAgd2hhdCB0byBjYWxsIHRoZSBWaWV3IGV4ZWN1dGFibGUiCithY19oZWxwPSIkYWNfaGVscAorICAtLXdpdGgtZ2xvYmFsLXJ1bnRpbWU9RElSICAgIGdsb2JhbCBydW50aW1lIGRpcmVjdG9yeSBpbiAncnVudGltZXBhdGgnIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS13aXRoLW1vZGlmaWVkLWJ5PU5BTUUgICAgICAgbmFtZSBvZiB3aG8gbW9kaWZpZWQgYSByZWxlYXNlIHZlcnNpb24iCithY19oZWxwPSIkYWNfaGVscAorICAtLXdpdGgtZmVhdHVyZXM9VFlQRSAgICB0aW55LCBzbWFsbCwgbm9ybWFsLCBiaWcgb3IgaHVnZSAoZGVmYXVsdDogbm9ybWFsKSIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0td2l0aC1jb21waWxlZGJ5PU5BTUUgIG5hbWUgdG8gc2hvdyBpbiA6dmVyc2lvbiBtZXNzYWdlIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1kaXNhYmxlLXhzbXAgICAgICAgICAgRGlzYWJsZSBYU01QIHNlc3Npb24gbWFuYWdlbWVudCIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZGlzYWJsZS14c21wLWludGVyYWN0IERpc2FibGUgWFNNUCBpbnRlcmFjdGlvbiIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZW5hYmxlLXBlcmxpbnRlcnAgICAgIEluY2x1ZGUgUGVybCBpbnRlcnByZXRlci4iCithY19oZWxwPSIkYWNfaGVscAorICAtLWVuYWJsZS1weXRob25pbnRlcnAgICBJbmNsdWRlIFB5dGhvbiBpbnRlcnByZXRlci4iCithY19oZWxwPSIkYWNfaGVscAorICAtLXdpdGgtcHl0aG9uLWNvbmZpZy1kaXI9UEFUSCAgUHl0aG9uJ3MgY29uZmlnIGRpcmVjdG9yeSIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZW5hYmxlLXRjbGludGVycCAgICAgIEluY2x1ZGUgVGNsIGludGVycHJldGVyLiIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0td2l0aC10Y2xzaD1QQVRIICAgICAgIHdoaWNoIHRjbHNoIHRvIHVzZSAoZGVmYXVsdDogdGNsc2g4LjApIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1lbmFibGUtcnVieWludGVycCAgICAgSW5jbHVkZSBSdWJ5IGludGVycHJldGVyLiIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZW5hYmxlLWNzY29wZSAgICAgICAgIEluY2x1ZGUgY3Njb3BlIGludGVyZmFjZS4iCithY19oZWxwPSIkYWNfaGVscAorICAtLWVuYWJsZS13b3Jrc2hvcCAgICAgICBJbmNsdWRlIFN1biBWaXN1YWwgV29ya3Nob3Agc3VwcG9ydC4iCithY19oZWxwPSIkYWNfaGVscAorICAtLWRpc2FibGUtbmV0YmVhbnMgICAgICBEaXNhYmxlIE5ldEJlYW5zIGludGVncmF0aW9uIHN1cHBvcnQuIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1lbmFibGUtc25pZmYgICAgICAgICAgSW5jbHVkZSBTbmlmZiBpbnRlcmZhY2UuIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1lbmFibGUtbXVsdGlieXRlICAgICAgSW5jbHVkZSBtdWx0aWJ5dGUgZWRpdGluZyBzdXBwb3J0LiIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZW5hYmxlLWhhbmd1bGlucHV0ICAgIEluY2x1ZGUgSGFuZ3VsIGlucHV0IHN1cHBvcnQuIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1lbmFibGUteGltICAgICAgICAgICAgSW5jbHVkZSBYSU0gaW5wdXQgc3VwcG9ydC4iCithY19oZWxwPSIkYWNfaGVscAorICAtLWVuYWJsZS1mb250c2V0ICAgICAgICBJbmNsdWRlIFggZm9udHNldCBvdXRwdXQgc3VwcG9ydC4iCithY19oZWxwPSIkYWNfaGVscAorICAtLXdpdGgteCAgICAgICAgICAgICAgICB1c2UgdGhlIFggV2luZG93IFN5c3RlbSIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZW5hYmxlLWd1aVs9T1BUU10gICAgIFgxMSBHVUkgW2RlZmF1bHQ9YXV0b10gW09QVFM9YXV0by9uby9ndGsvZ3RrMi9nbm9tZS9nbm9tZTIvbW90aWYvYXRoZW5hL25lWHRhdy9iZW9zL3Bob3Rvbi9jYXJib25dIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1lbmFibGUtZ3RrLWNoZWNrICAgICAgSWYgYXV0by1zZWxlY3QgR1VJLCBjaGVjayBmb3IgR1RLIFtkZWZhdWx0PXllc10iCithY19oZWxwPSIkYWNfaGVscAorICAtLWVuYWJsZS1ndGsyLWNoZWNrICAgICBJZiBHVEsgR1VJLCBjaGVjayBmb3IgR1RLKyAyIFtkZWZhdWx0PXllc10iCithY19oZWxwPSIkYWNfaGVscAorICAtLWVuYWJsZS1nbm9tZS1jaGVjayAgICBJZiBHVEsgR1VJLCBjaGVjayBmb3IgR05PTUUgW2RlZmF1bHQ9bm9dIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1lbmFibGUtbW90aWYtY2hlY2sgICAgSWYgYXV0by1zZWxlY3QgR1VJLCBjaGVjayBmb3IgTW90aWYgW2RlZmF1bHQ9eWVzXSIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZW5hYmxlLWF0aGVuYS1jaGVjayAgIElmIGF1dG8tc2VsZWN0IEdVSSwgY2hlY2sgZm9yIEF0aGVuYSBbZGVmYXVsdD15ZXNdIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1lbmFibGUtbmV4dGF3LWNoZWNrICAgSWYgYXV0by1zZWxlY3QgR1VJLCBjaGVjayBmb3IgbmVYdGF3IFtkZWZhdWx0PXllc10iCithY19oZWxwPSIkYWNfaGVscAorICAtLWVuYWJsZS1jYXJib24tY2hlY2sgICBJZiBhdXRvLXNlbGVjdCBHVUksIGNoZWNrIGZvciBDYXJib24gW2RlZmF1bHQ9eWVzXSIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0td2l0aC1ndGstcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBHVEsgaXMgaW5zdGFsbGVkIChvcHRpb25hbCkiCithY19oZWxwPSIkYWNfaGVscAorICAtLXdpdGgtZ3RrLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBHVEsgaXMgaW5zdGFsbGVkIChvcHRpb25hbCkiCithY19oZWxwPSIkYWNfaGVscAorICAtLWRpc2FibGUtZ3RrdGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgR1RLIHByb2dyYW0iCithY19oZWxwPSIkYWNfaGVscAorICAtLXdpdGgtZ25vbWUtaW5jbHVkZXM9RElSIFNwZWNpZnkgbG9jYXRpb24gb2YgR05PTUUgaGVhZGVycyIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0td2l0aC1nbm9tZS1saWJzPURJUiAgIFNwZWNpZnkgbG9jYXRpb24gb2YgR05PTUUgbGlicyIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0td2l0aC1nbm9tZSAgICAgICAgICAgIFNwZWNpZnkgcHJlZml4IGZvciBHTk9NRSBmaWxlcyIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0td2l0aC1tb3RpZi1saWI9U1RSSU5HICAgTGlicmFyeSBmb3IgTW90aWYgIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS13aXRoLXRsaWI9bGlicmFyeSAgICAgdGVybWluYWwgbGlicmFyeSB0byBiZSB1c2VkICIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZGlzYWJsZS1hY2wgICAgICAgICAgIERvbid0IGNoZWNrIGZvciBBQ0wgc3VwcG9ydC4iCithY19oZWxwPSIkYWNfaGVscAorICAtLWRpc2FibGUtZ3BtICAgICAgICAgICBEb24ndCB1c2UgZ3BtIChMaW51eCBtb3VzZSBkYWVtb24pLiIKK2FjX2hlbHA9IiRhY19oZWxwCisgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIERvbid0IHN1cHBvcnQgTkxTIChnZXR0ZXh0KCkpLiIKKworIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKyMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KK2J1aWxkPU5PTkUKK2NhY2hlX2ZpbGU9Li9jb25maWcuY2FjaGUKK2V4ZWNfcHJlZml4PU5PTkUKK2hvc3Q9Tk9ORQorbm9fY3JlYXRlPQorbm9ub3B0PU5PTkUKK25vX3JlY3Vyc2lvbj0KK3ByZWZpeD1OT05FCitwcm9ncmFtX3ByZWZpeD1OT05FCitwcm9ncmFtX3N1ZmZpeD1OT05FCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAorc2lsZW50PQorc2l0ZT0KK3NyY2Rpcj0KK3RhcmdldD1OT05FCit2ZXJib3NlPQoreF9pbmNsdWRlcz1OT05FCit4X2xpYnJhcmllcz1OT05FCitiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKK3NiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCitsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworZGF0YWRpcj0nJHtwcmVmaXh9L3NoYXJlJworc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKK3NoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCitvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCitpbmZvZGlyPScke3ByZWZpeH0vaW5mbycKK21hbmRpcj0nJHtwcmVmaXh9L21hbicKKworIyBJbml0aWFsaXplIHNvbWUgb3RoZXIgdmFyaWFibGVzLgorc3ViZGlycz0KK01GTEFHUz0gTUFLRUZMQUdTPQorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKyMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2hlbGwgaGVyZSBkb2N1bWVudC4KK2FjX21heF9oZXJlX2xpbmVzPTEyCisKK2FjX3ByZXY9Citmb3IgYWNfb3B0aW9uCitkbworCisgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKyAgLSo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0aW9uIiB8IHNlZCAncy9bLV9hLXpBLVowLTldKj0vLydgIDs7CisgICopIGFjX29wdGFyZz0gOzsKKyAgZXNhYworCisgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCisKKyAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1idWlsZCB8IC0tYnVpbGQgfCAtLWJ1aWwgfCAtLWJ1aSB8IC0tYnUpCisgICAgYWNfcHJldj1idWlsZCA7OworICAtYnVpbGQ9KiB8IC0tYnVpbGQ9KiB8IC0tYnVpbD0qIHwgLS1idWk9KiB8IC0tYnU9KikKKyAgICBidWlsZD0iJGFjX29wdGFyZyIgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSIkYWNfb3B0YXJnIiA7OworCisgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQorICAgIGFjX3ByZXY9ZGF0YWRpciA7OworICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qIHwgLS1kYXRhPSogfCAtLWRhdD0qIFwKKyAgfCAtLWRhPSopCisgICAgZGF0YWRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfb3B0aW9ufHNlZCAtZSAncy8tKmRpc2FibGUtLy8nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4KKyAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX2ZlYXR1cmU6IGludmFsaWQgZmVhdHVyZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKyAgICBmaQorICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy8tL18vZydgCisgICAgZXZhbCAiZW5hYmxlXyR7YWNfZmVhdHVyZX09bm8iIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qZW5hYmxlLS8vJyAtZSAncy89LiovLydgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19mZWF0dXJlfCBzZWQgJ3MvWy1fYS16QS1aMC05XS8vZydgIjsgdGhlbgorICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfZmVhdHVyZTogaW52YWxpZCBmZWF0dXJlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpCisgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzLy0vXy9nJ2AKKyAgICBjYXNlICIkYWNfb3B0aW9uIiBpbgorICAgICAgKj0qKSA7OworICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGVzYWMKKyAgICBldmFsICJlbmFibGVfJHthY19mZWF0dXJlfT0nJGFjX29wdGFyZyciIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSIkYWNfb3B0YXJnIiA7OworCisgIC1nYXMgfCAtLWdhcyB8IC0tZ2EgfCAtLWcpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC1nYXMuCisgICAgd2l0aF9nYXM9eWVzIDs7CisKKyAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUpCisgICAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorICAgIGNhdCA8PCBFT0YKK1VzYWdlOiBjb25maWd1cmUgW29wdGlvbnNdIFtob3N0XQorT3B0aW9uczogW2RlZmF1bHRzIGluIGJyYWNrZXRzIGFmdGVyIGRlc2NyaXB0aW9uc10KK0NvbmZpZ3VyYXRpb246CisgIC0tY2FjaGUtZmlsZT1GSUxFICAgICAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFCisgIC0taGVscCAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgbWVzc2FnZQorICAtLW5vLWNyZWF0ZSAgICAgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworICAtLXF1aWV0LCAtLXNpbGVudCAgICAgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKyAgLS12ZXJzaW9uICAgICAgICAgICAgICAgcHJpbnQgdGhlIHZlcnNpb24gb2YgYXV0b2NvbmYgdGhhdCBjcmVhdGVkIGNvbmZpZ3VyZQorRGlyZWN0b3J5IGFuZCBmaWxlIG5hbWVzOgorICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3NhbWUgYXMgcHJlZml4XQorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIGluIERJUiBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBpbiBESVIgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBpbiBESVIgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIGluIERJUgorICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYL3NoYXJlXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBpbiBESVIgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgaW4gRElSCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgaW4gRElSIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgaW4gRElSIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgaW4gRElSIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgaW4gRElSIFsvdXNyL2luY2x1ZGVdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9pbmZvXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9tYW5dCisgIC0tc3JjZGlyPURJUiAgICAgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIC4uXQorICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworRU9GCisgICAgY2F0IDw8IEVPRgorSG9zdCB0eXBlOgorICAtLWJ1aWxkPUJVSUxEICAgICAgICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtCVUlMRD1IT1NUXQorICAtLWhvc3Q9SE9TVCAgICAgICAgICAgICBjb25maWd1cmUgZm9yIEhPU1QgW2d1ZXNzZWRdCisgIC0tdGFyZ2V0PVRBUkdFVCAgICAgICAgIGNvbmZpZ3VyZSBmb3IgVEFSR0VUIFtUQVJHRVQ9SE9TVF0KK0ZlYXR1cmVzIGFuZCBwYWNrYWdlczoKKyAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQorICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisgIC0teC1pbmNsdWRlcz1ESVIgICAgICAgIFggaW5jbHVkZSBmaWxlcyBhcmUgaW4gRElSCisgIC0teC1saWJyYXJpZXM9RElSICAgICAgIFggbGlicmFyeSBmaWxlcyBhcmUgaW4gRElSCitFT0YKKyAgICBpZiB0ZXN0IC1uICIkYWNfaGVscCI7IHRoZW4KKyAgICAgIGVjaG8gIi0tZW5hYmxlIGFuZCAtLXdpdGggb3B0aW9ucyByZWNvZ25pemVkOiRhY19oZWxwIgorICAgIGZpCisgICAgZXhpdCAwIDs7CisKKyAgLWhvc3QgfCAtLWhvc3QgfCAtLWhvcyB8IC0taG8pCisgICAgYWNfcHJldj1ob3N0IDs7CisgIC1ob3N0PSogfCAtLWhvc3Q9KiB8IC0taG9zPSogfCAtLWhvPSopCisgICAgaG9zdD0iJGFjX29wdGFyZyIgOzsKKworICAtaW5jbHVkZWRpciB8IC0taW5jbHVkZWRpciB8IC0taW5jbHVkZWRpIHwgLS1pbmNsdWRlZCB8IC0taW5jbHVkZSBcCisgIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCisgICAgYWNfcHJldj1pbmNsdWRlZGlyIDs7CisgIC1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpPSogfCAtLWluY2x1ZGVkPSogfCAtLWluY2x1ZGU9KiBcCisgIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKKyAgICBpbmNsdWRlZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0iJGFjX29wdGFyZyIgOzsKKworICAtbGliZGlyIHwgLS1saWJkaXIgfCAtLWxpYmRpIHwgLS1saWJkKQorICAgIGFjX3ByZXY9bGliZGlyIDs7CisgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKyAgICBsaWJkaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0tbGliZXhlY2QgfCAtLWxpYmV4ZWMgXAorICB8IC0tbGliZXhlIHwgLS1saWJleCB8IC0tbGliZSkKKyAgICBhY19wcmV2PWxpYmV4ZWNkaXIgOzsKKyAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwKKyAgfCAtLWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopCisgICAgbGliZXhlY2Rpcj0iJGFjX29wdGFyZyIgOzsKKworICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCisgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IFwKKyAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCisgICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7CisgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAorICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKKyAgfCAtLWxvY2Fscz0qIHwgLS1sb2NhbD0qIHwgLS1sb2NhPSogfCAtLWxvYz0qIHwgLS1sbz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKKyAgICBhY19wcmV2PW1hbmRpciA7OworICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCisgICAgbWFuZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1uZnAgfCAtLW5mcCB8IC0tbmYpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aG91dC1mcC4KKyAgICB3aXRoX2ZwPW5vIDs7CisKKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKyAgfCAtLW5vLWNyIHwgLS1uby1jKQorICAgIG5vX2NyZWF0ZT15ZXMgOzsKKworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisgICAgbm9fcmVjdXJzaW9uPXllcyA7OworCisgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKyAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCisgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKyAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCisgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKyAgICBvbGRpbmNsdWRlZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1wcmVmaXggfCAtLXByZWZpeCB8IC0tcHJlZmkgfCAtLXByZWYgfCAtLXByZSB8IC0tcHIgfCAtLXApCisgICAgYWNfcHJldj1wcmVmaXggOzsKKyAgLXByZWZpeD0qIHwgLS1wcmVmaXg9KiB8IC0tcHJlZmk9KiB8IC0tcHJlZj0qIHwgLS1wcmU9KiB8IC0tcHI9KiB8IC0tcD0qKQorICAgIHByZWZpeD0iJGFjX29wdGFyZyIgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9IiRhY19vcHRhcmciIDs7CisKKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKyAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCisgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKyAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQorICAgIHByb2dyYW1fc3VmZml4PSIkYWNfb3B0YXJnIiA7OworCisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmEgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtIHwgLS1wcm9ncmFtLXRyYW5zZm9yIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbyB8IC0tcHJvZ3JhbS10cmFuc2YgXAorICB8IC0tcHJvZ3JhbS10cmFucyB8IC0tcHJvZ3JhbS10cmFuIFwKKyAgfCAtLXByb2dyLXRyYSB8IC0tcHJvZ3JhbS10ciB8IC0tcHJvZ3JhbS10KQorICAgIGFjX3ByZXY9cHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA7OworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbj0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS09KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9yPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvPSogfCAtLXByb2dyYW0tdHJhbnNmPSogXAorICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1wcm9ncmFtLXRyYW49KiBcCisgIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1wcm9ncmFtLXQ9KikKKyAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSIkYWNfb3B0YXJnIiA7OworCisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgIHNpbGVudD15ZXMgOzsKKworICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKKyAgICBhY19wcmV2PXNiaW5kaXIgOzsKKyAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKKyAgfCAtLXNiaT0qIHwgLS1zYj0qKQorICAgIHNiaW5kaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1zaXRlIHwgLS1zaXRlIHwgLS1zaXQpCisgICAgYWNfcHJldj1zaXRlIDs7CisgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCisgICAgc2l0ZT0iJGFjX29wdGFyZyIgOzsKKworICAtc3JjZGlyIHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQorICAgIGFjX3ByZXY9c3JjZGlyIDs7CisgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCisgICAgc3JjZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCisgICAgYWNfcHJldj10YXJnZXQgOzsKKyAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQorICAgIHRhcmdldD0iJGFjX29wdGFyZyIgOzsKKworICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJiKQorICAgIHZlcmJvc2U9eWVzIDs7CisKKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMpCisgICAgZWNobyAiY29uZmlndXJlIGdlbmVyYXRlZCBieSBhdXRvY29uZiB2ZXJzaW9uIDIuMTMiCisgICAgZXhpdCAwIDs7CisKKyAgLXdpdGgtKiB8IC0td2l0aC0qKQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSp3aXRoLS8vJyAtZSAncy89LiovLydgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvWy1fYS16QS1aMC05XS8vZydgIjsgdGhlbgorICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfcGFja2FnZTogaW52YWxpZCBwYWNrYWdlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpCisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2AKKyAgICBjYXNlICIkYWNfb3B0aW9uIiBpbgorICAgICAgKj0qKSA7OworICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGVzYWMKKyAgICBldmFsICJ3aXRoXyR7YWNfcGFja2FnZX09JyRhY19vcHRhcmcnIiA7OworCisgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qd2l0aG91dC0vLydgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvWy1hLXpBLVowLTlfXS8vZydgIjsgdGhlbgorICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfcGFja2FnZTogaW52YWxpZCBwYWNrYWdlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpCisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2AKKyAgICBldmFsICJ3aXRoXyR7YWNfcGFja2FnZX09bm8iIDs7CisKKyAgLS14KQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KKyAgICB3aXRoX3g9eWVzIDs7CisKKyAgLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZSB8IC0teC1pbmNsdWQgfCAtLXgtaW5jbHUgXAorICB8IC0teC1pbmNsIHwgLS14LWluYyB8IC0teC1pbiB8IC0teC1pKQorICAgIGFjX3ByZXY9eF9pbmNsdWRlcyA7OworICAteC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZT0qIHwgLS14LWluY2x1ZD0qIHwgLS14LWluY2x1PSogXAorICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCisgICAgeF9pbmNsdWRlcz0iJGFjX29wdGFyZyIgOzsKKworICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAorICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkKKyAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKKyAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCisgICAgeF9saWJyYXJpZXM9IiRhY19vcHRhcmciIDs7CisKKyAgLSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX29wdGlvbjogaW52YWxpZCBvcHRpb247IHVzZSAtLWhlbHAgdG8gc2hvdyB1c2FnZSIgMT4mMjsgZXhpdCAxOyB9CisgICAgOzsKKworICAqKQorICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19vcHRpb258IHNlZCAncy9bLWEtejAtOS5dLy9nJ2AiOyB0aGVuCisgICAgICBlY2hvICJjb25maWd1cmU6IHdhcm5pbmc6ICRhY19vcHRpb246IGludmFsaWQgaG9zdCB0eXBlIiAxPiYyCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JG5vbm9wdCIgIT0geE5PTkU7IHRoZW4KKyAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG9ubHkgY29uZmlndXJlIGZvciBvbmUgaG9zdCBhbmQgb25lIHRhcmdldCBhdCBhIHRpbWUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpCisgICAgbm9ub3B0PSIkYWNfb3B0aW9uIgorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvIC0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYCIgMT4mMjsgZXhpdCAxOyB9CitmaQorCit0cmFwICdybSAtZnIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb3JlIGNvcmUuKiAqLmNvcmUgJGFjX2NsZWFuX2ZpbGVzOyBleGl0IDEnIDEgMiAxNQorCisjIEZpbGUgZGVzY3JpcHRvciB1c2FnZToKKyMgMCBzdGFuZGFyZCBpbnB1dAorIyAxIGZpbGUgY3JlYXRpb24KKyMgMiBlcnJvcnMgYW5kIHdhcm5pbmdzCisjIDMgc29tZSBzeXN0ZW1zIG1heSBvcGVuIGl0IHRvIC9kZXYvdHR5CisjIDQgdXNlZCBvbiB0aGUgS3Vib3RhIFRpdGFuCisjIDYgY2hlY2tpbmcgZm9yLi4uIG1lc3NhZ2VzIGFuZCByZXN1bHRzCisjIDUgY29tcGlsZXIgbWVzc2FnZXMgc2F2ZWQgaW4gY29uZmlnLmxvZworaWYgdGVzdCAiJHNpbGVudCIgPSB5ZXM7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorZWxzZQorICBleGVjIDY+JjEKK2ZpCitleGVjIDU+YXV0by9jb25maWcubG9nCisKK2VjaG8gIlwKK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCitydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorIiAxPiY1CisKKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCithY19jb25maWd1cmVfYXJncz0KK2ZvciBhY19hcmcKK2RvCisgIGNhc2UgIiRhY19hcmciIGluCisgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCisgIHwgLS1uby1jciB8IC0tbm8tYykgOzsKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKSA7OworICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP10qKQorICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgKikgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAkYWNfYXJnIiA7OworICBlc2FjCitkb25lCisKKyMgTkxTIG51aXNhbmNlcy4KKyMgT25seSBzZXQgdGhlc2UgdG8gQyBpZiBhbHJlYWR5IHNldC4gIFRoZXNlIG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkKKyMgYmVjYXVzZSBub3QgYWxsIHN5c3RlbXMgdW5kZXJzdGFuZCBlLmcuIExBTkc9QyAobm90YWJseSBTQ08pLgorIyBGaXhpbmcgTENfTUVTU0FHRVMgcHJldmVudHMgU29sYXJpcyBzaCBmcm9tIHRyYW5zbGF0aW5nIHZhciB2YWx1ZXMgaW4gYHNldCchCisjIE5vbi1DIExDX0NUWVBFIHZhbHVlcyBicmVhayB0aGUgY3R5cGUgY2hlY2suCitpZiB0ZXN0ICIke0xBTkcrc2V0fSIgICA9IHNldDsgdGhlbiBMQU5HPUM7ICAgZXhwb3J0IExBTkc7ICAgZmkKK2lmIHRlc3QgIiR7TENfQUxMK3NldH0iID0gc2V0OyB0aGVuIExDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBmaQoraWYgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiA9IHNldDsgdGhlbiBMQ19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IGZpCitpZiB0ZXN0ICIke0xDX0NUWVBFK3NldH0iICAgID0gc2V0OyB0aGVuIExDX0NUWVBFPUM7ICAgIGV4cG9ydCBMQ19DVFlQRTsgICAgZmkKKworIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KK3JtIC1yZiBjb25mdGVzdCogY29uZmRlZnMuaAorIyBBSVggY3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBsZWFzdCBhIG5ld2xpbmUuCitlY2hvID4gY29uZmRlZnMuaAorCisjIEEgZmlsZW5hbWUgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSwgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0CisjIGNvbmZpZ3VyZSBpcyBpbiwgd2hpY2ggd2UgY2FuIGxvb2sgZm9yIHRvIGZpbmQgb3V0IGlmIHNyY2RpciBpcyBjb3JyZWN0LgorYWNfdW5pcXVlX2ZpbGU9dmltLmgKKworIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgoraWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIGl0cyBwYXJlbnQuCisgIGFjX3Byb2c9JDAKKyAgYWNfY29uZmRpcj1gZWNobyAkYWNfcHJvZ3xzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisgIHRlc3QgIngkYWNfY29uZmRpciIgPSAieCRhY19wcm9nIiAmJiBhY19jb25mZGlyPS4KKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorICAgIHNyY2Rpcj0uLgorICBmaQorZWxzZQorICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCitmaQoraWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisgIGlmIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllczsgdGhlbgorICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIHNvdXJjZXMgaW4gJGFjX2NvbmZkaXIgb3IgLi4iIDE+JjI7IGV4aXQgMTsgfQorICBlbHNlCisgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGZpbmQgc291cmNlcyBpbiAkc3JjZGlyIiAxPiYyOyBleGl0IDE7IH0KKyAgZmkKK2ZpCitzcmNkaXI9YGVjaG8gIiR7c3JjZGlyfSIgfCBzZWQgJ3MlXChbXi9dXCkvKiQlXDElJ2AKKworIyBQcmVmZXIgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2lmIHRlc3QgLXogIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgICAgQ09ORklHX1NJVEU9IiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisgIGVsc2UKKyAgICBDT05GSUdfU0lURT0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisgIGZpCitmaQorZm9yIGFjX3NpdGVfZmlsZSBpbiAkQ09ORklHX1NJVEU7IGRvCisgIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgZWNobyAibG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIgorICAgIC4gIiRhY19zaXRlX2ZpbGUiCisgIGZpCitkb25lCisKK2lmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorICBlY2hvICJsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIgorICAuICRjYWNoZV9maWxlCitlbHNlCisgIGVjaG8gImNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorICA+ICRjYWNoZV9maWxlCitmaQorCithY19leHQ9YworIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKK2FjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKK2Nyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworCithY19leGVleHQ9CithY19vYmpleHQ9bworaWYgKGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDMpIHwgZ3JlcCBjID4vZGV2L251bGw7IHRoZW4KKyAgIyBTdGFyZGVudCBWaXN0cmEgU1ZSNCBncmVwIGxhY2tzIC1lLCBzYXlzIGdoYXppQGNhaXAucnV0Z2Vycy5lZHUuCisgIGlmIChlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDMpIHwgc2VkIHMvLW4veG4vIHwgZ3JlcCB4biA+L2Rldi9udWxsOyB0aGVuCisgICAgYWNfbj0gYWNfYz0nCisnIGFjX3Q9JwknCisgIGVsc2UKKyAgICBhY19uPS1uIGFjX2M9IGFjX3Q9CisgIGZpCitlbHNlCisgIGFjX249IGFjX2M9J1xjJyBhY190PQorZmkKKworCisKKworY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVOSVggMQorRU9GCisKK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCR7TUFLRX0iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYyMDogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtFfSIgPiY1CitzZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3RtYWtlIDw8XEVPRgorYWxsOgorCUBlY2hvICdhY19tYWtldGVtcD0iJHtNQUtFfSInCitFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorZXZhbCBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0bWFrZSAyPi9kZXYvbnVsbCB8IGdyZXAgdGVtcD1gCitpZiB0ZXN0IC1uICIkYWNfbWFrZXRlbXAiOyB0aGVuCisgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllcworZWxzZQorICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0bWFrZQorZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfbWFrZV8nJHthY19tYWtlfV9zZXRgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgU0VUX01BS0U9CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjUwOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3Byb2dfQ0M9ImdjYyIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKK2ZpCitmaQorQ0M9IiRhY19jdl9wcm9nX0NDIgoraWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJENDIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2ODA6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DQycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfcHJvZ19yZWplY3RlZD1ubworICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkYWNfZGlyLyRhY193b3JkIiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKwljb250aW51ZQorICAgICAgZmkKKyAgICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgoraWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjIC1ndCAwOyB0aGVuCisgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisgICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgorICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgorICAgIHNoaWZ0CisgICAgc2V0IGR1bW15ICIkYWNfZGlyLyRhY193b3JkIiAiJEAiCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSIkYWNfY3ZfcHJvZ19DQyIKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRDQyIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgIGNhc2UgImB1bmFtZSAtc2AiIGluCisgICAgKndpbjMyKiB8ICpXSU4zMiopCisgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjbDsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3MzE6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DQycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19DQz0iY2wiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK0NDPSIkYWNfY3ZfcHJvZ19DQyIKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRDQyIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisgOzsKKyAgICBlc2FjCisgIGZpCisgIHRlc3QgLXogIiRDQyIgJiYgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGNjIGZvdW5kIGluIFwkUEFUSCIgMT4mMjsgZXhpdCAxOyB9CitmaQorCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgd29ya3MiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc2MzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiA+JjUKKworYWNfZXh0PWMKKyMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCithY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCitjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PCBFT0YKKworI2xpbmUgNzc0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworbWFpbigpe3JldHVybigwKTt9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Nzc5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY193b3Jrcz15ZXMKKyAgIyBJZiB3ZSBjYW4ndCBydW4gYSB0cml2aWFsIHByb2dyYW0sIHdlIGFyZSBwcm9iYWJseSB1c2luZyBhIGNyb3NzIGNvbXBpbGVyLgorICBpZiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhY19jdl9wcm9nX2NjX2Nyb3NzPW5vCisgIGVsc2UKKyAgICBhY19jdl9wcm9nX2NjX2Nyb3NzPXllcworICBmaQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfcHJvZ19jY193b3Jrcz1ubworZmkKK3JtIC1mciBjb25mdGVzdCoKK2FjX2V4dD1jCisjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY193b3JrcyIgMT4mNgoraWYgdGVzdCAkYWNfY3ZfcHJvZ19jY193b3JrcyA9IG5vOyB0aGVuCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogaW5zdGFsbGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gcHJvYmxlbTogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzLiIgMT4mMjsgZXhpdCAxOyB9CitmaQorZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3MtY29tcGlsZXIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjgwNTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3MtY29tcGlsZXIiID4mNQorZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2NjX2Nyb3NzIiAxPiY2Citjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjgxMDogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfZ2NjJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorI2lmZGVmIF9fR05VQ19fCisgIHllczsKKyNlbmRpZgorRU9GCitpZiB7IGFjX3RyeT0nJHtDQy1jY30gLUUgY29uZnRlc3QuYyc7IHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODE5OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHllcyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfY3ZfcHJvZ19nY2M9eWVzCitlbHNlCisgIGFjX2N2X3Byb2dfZ2NjPW5vCitmaQorZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2djYyIgMT4mNgorCitpZiB0ZXN0ICRhY19jdl9wcm9nX2djYyA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCisKK2FjX3Rlc3RfQ0ZMQUdTPSIke0NGTEFHUytzZXR9IgorYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCitDRkxBR1M9CitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyICR7Q0MtY2N9IGFjY2VwdHMgLWciIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjgzODogY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX2NjX2cnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBlY2hvICd2b2lkIGYoKXt9JyA+IGNvbmZ0ZXN0LmMKK2lmIHRlc3QgLXogImAke0NDLWNjfSAtZyAtYyBjb25mdGVzdC5jIDI+JjFgIjsgdGhlbgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIGFjX2N2X3Byb2dfY2NfZz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfY2NfZyIgMT4mNgoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPQorICBmaQorZmkKKwllY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6ODY5OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DUFAnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAgICMgVGhpcyBtdXN0IGJlIGluIGRvdWJsZSBxdW90ZXMsIG5vdCBzaW5nbGUgcXVvdGVzLCBiZWNhdXNlIENQUCBtYXkgZ2V0CisgICMgc3Vic3RpdHV0ZWQgaW50byB0aGUgTWFrZWZpbGUgYW5kICIke0NDLWNjfSIgd2lsbCBjb25mdXNlIG1ha2UuCisgIENQUD0iJHtDQy1jY30gLUUiCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDg4NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitTeW50YXggRXJyb3IKK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6ODkwOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAoraWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYWNfZXJyIiA+JjUKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgQ1BQPSIke0NDLWNjfSAtRSAtdHJhZGl0aW9uYWwtY3BwIgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA5MDEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorU3ludGF4IEVycm9yCitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjkwNzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIENQUD0iJHtDQy1jY30gLW5vbG9nbyAtRSIKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgOTE4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KK1N5bnRheCBFcnJvcgorRU9GCithY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo5MjQ6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBDUFA9L2xpYi9jcHAKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgYWNfY3ZfcHJvZ19DUFA9IiRDUFAiCitmaQorICBDUFA9IiRhY19jdl9wcm9nX0NQUCIKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9IiRDUFAiCitmaQorZWNobyAiJGFjX3QiIiRDUFAiIDE+JjYKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA5NDggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgIiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIDoKK2ZpCitybSAtZiBjb25mdGVzdCoKKyBlY2hvICRhY19uICJjaGVja2luZyBmb3IgUE9TSVhpemVkIElTQyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6OTU4OiBjaGVja2luZyBmb3IgUE9TSVhpemVkIElTQyIgPiY1CitpZiB0ZXN0IC1kIC9ldGMvY29uZi9rY29uZmlnLmQgJiYKKyAgZ3JlcCBfUE9TSVhfVkVSU0lPTiAvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oID4vZGV2L251bGwgMj4mMQordGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIElTQz15ZXMgIyBJZiBsYXRlciB0ZXN0cyB3YW50IHRvIGNoZWNrIGZvciBJU0MuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBfUE9TSVhfU09VUkNFIDEKK0VPRgorCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0M9IiRDQyAtcG9zaXgiCisgIGVsc2UKKyAgICBDQz0iJENDIC1YcCIKKyAgZmkKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisgIElTQz0KK2ZpCisJZm9yIGFjX3Byb2cgaW4gbWF3ayBnYXdrIG5hd2sgYXdrCitkbworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6OTgyOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQVdLJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK0FXSz0iJGFjX2N2X3Byb2dfQVdLIgoraWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRBV0siIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCit0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCQorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTAxNDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX1NUUklQJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wcm9nX1NUUklQPSJzdHJpcCIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiICYmIGFjX2N2X3Byb2dfU1RSSVA9IjoiCitmaQorZmkKK1NUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRTVFJJUCIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEN5Z3dpbiBlbnZpcm9ubWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTA0MzogY2hlY2tpbmcgZm9yIEN5Z3dpbiBlbnZpcm9ubWVudCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfY3lnd2luJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTA0OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCisjaWZuZGVmIF9fQ1lHV0lOX18KKyNkZWZpbmUgX19DWUdXSU5fXyBfX0NZR1dJTjMyX18KKyNlbmRpZgorcmV0dXJuIF9fQ1lHV0lOX187Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTA1OTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X2N5Z3dpbj15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfY3lnd2luPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfY3lnd2luIiAxPiY2CitDWUdXSU49Cit0ZXN0ICIkYWNfY3ZfY3lnd2luIiA9IHllcyAmJiBDWUdXSU49eWVzCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgbWluZ3czMiBlbnZpcm9ubWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTA3NjogY2hlY2tpbmcgZm9yIG1pbmd3MzIgZW52aXJvbm1lbnQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X21pbmd3MzInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxMDgxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CityZXR1cm4gX19NSU5HVzMyX187Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTA4ODogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X21pbmd3MzI9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X21pbmd3MzI9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9taW5ndzMyIiAxPiY2CitNSU5HVzMyPQordGVzdCAiJGFjX2N2X21pbmd3MzIiID0geWVzICYmIE1JTkdXMzI9eWVzCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGV4ZWN1dGFibGUgc3VmZml4IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMTA3OiBjaGVja2luZyBmb3IgZXhlY3V0YWJsZSBzdWZmaXgiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2V4ZWV4dCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgIiRDWUdXSU4iID0geWVzIHx8IHRlc3QgIiRNSU5HVzMyIiA9IHllczsgdGhlbgorICBhY19jdl9leGVleHQ9LmV4ZQorZWxzZQorICBybSAtZiBjb25mdGVzdCoKKyAgZWNobyAnaW50IG1haW4gKCkgeyByZXR1cm4gMDsgfScgPiBjb25mdGVzdC4kYWNfZXh0CisgIGFjX2N2X2V4ZWV4dD0KKyAgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMTE3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9OyB0aGVuCisgICAgZm9yIGZpbGUgaW4gY29uZnRlc3QuKjsgZG8KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICouYyB8ICoubyB8ICoub2JqKSA7OworICAgICAgKikgYWNfY3ZfZXhlZXh0PWBlY2hvICRmaWxlIHwgc2VkIC1lIHMvY29uZnRlc3QvL2AgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgIGVsc2UKKyAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMuIiAxPiYyOyBleGl0IDE7IH0KKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCisgIHRlc3QgeCIke2FjX2N2X2V4ZWV4dH0iID0geCAmJiBhY19jdl9leGVleHQ9bm8KK2ZpCitmaQorCitFWEVFWFQ9IiIKK3Rlc3QgeCIke2FjX2N2X2V4ZWV4dH0iICE9IHhubyAmJiBFWEVFWFQ9JHthY19jdl9leGVleHR9CitlY2hvICIkYWNfdCIiJHthY19jdl9leGVleHR9IiAxPiY2CithY19leGVleHQ9JEVYRUVYVAorCisKK2lmIHRlc3QgLXogIiRDRkxBR1MiOyB0aGVuCisgIENGTEFHUz0iLU8iCisgIHRlc3QgIiRHQ0MiID0geWVzICYmIENGTEFHUz0iLU8yIC1mbm8tc3RyZW5ndGgtcmVkdWNlIC1XYWxsIgorZmkKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGdjY3ZlcnNpb249YCIkQ0MiIC0tdmVyc2lvbiB8IHNlZCAtZSAnMiwkZDtzL15bXjAtOV0qXChbMC05XVwuWzAtOS5dKlwpLiokL1wxL2cnYAorICBpZiB0ZXN0ICIkZ2NjdmVyc2lvbiIgPSAiMy4wLjEiIC1vICIkZ2NjdmVyc2lvbiIgPSAiMy4wLjIiOyB0aGVuCisgICAgZWNobyAnR0NDIDMuMC54IGhhcyBhIGJ1ZyBpbiB0aGUgb3B0aW1pemVyLCBkaXNhYmxpbmcgIi1PIyInCisgICAgQ0ZMQUdTPWBlY2hvICIkQ0ZMQUdTIiB8IHNlZCAncy8tT1syMzQ1Njc4OV0vLU8vJ2AKKyAgZWxzZQorICAgIGlmIHRlc3QgIiRnY2N2ZXJzaW9uIiA9ICIzLjEiIC1vICIkZ2NjdmVyc2lvbiIgPSAiMy4yIiAtbyAiJGdjY3ZlcnNpb24iID0gIjMuMi4xIiAmJiBgZWNobyAiJENGTEFHUyIgfCBncmVwIC12IGZuby1zdHJlbmd0aC1yZWR1Y2UgPi9kZXYvbnVsbGA7IHRoZW4KKyAgICAgIGVjaG8gJ0dDQyAzLjEgYW5kIDMuMiBoYXZlIGEgYnVnIGluIHRoZSBvcHRpbWl6ZXIsIGFkZGluZyAiLWZuby1zdHJlbmd0aC1yZWR1Y2UiJworICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tc3RyZW5ndGgtcmVkdWNlIgorICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbm5vdCBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIGNoZWNrIENDIGFuZCBDRkxBR1MKKyAgKGNyb3NzIGNvbXBpbGluZyBkb2Vzbid0IHdvcmspIiAxPiYyOyBleGl0IDE7IH0KK2ZpCisKK3Rlc3QgIiRHQ0MiID0geWVzICYmIENQUF9NTT1NOyAKKworaWYgdGVzdCAtZiAuL3Rvb2xjaGVjazsgdGhlbgorICBlY2hvICJjaGVja2luZyBmb3IgYnVnZ3kgdG9vbHMiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMTY0OiBjaGVja2luZyBmb3IgYnVnZ3kgdG9vbHMiID4mNQorICBzaCAuL3Rvb2xjaGVjayAxPiY2CitmaQorCitPU19FWFRSQV9TUkM9IiI7IE9TX0VYVFJBX09CSj0iIgorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgQmVPUyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTE3MTogY2hlY2tpbmcgZm9yIEJlT1MiID4mNQorY2FzZSBgdW5hbWVgIGluCisgICAgQmVPUykJT1NfRVhUUkFfU1JDPW9zX2Jlb3MuYzsgT1NfRVhUUkFfT0JKPW9iamVjdHMvb3NfYmVvcy5vCisJCUJFT1M9eWVzOyBlY2hvICIkYWNfdCIieWVzIiAxPiY2OzsKKyAgICAqKQkJQkVPUz1ubzsgZWNobyAiJGFjX3QiIm5vIiAxPiY2OzsKK2VzYWMKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFFOWCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTE3OTogY2hlY2tpbmcgZm9yIFFOWCIgPiY1CitjYXNlIGB1bmFtZWAgaW4KKyAgICBRTlgpCU9TX0VYVFJBX1NSQz1vc19xbnguYzsgT1NfRVhUUkFfT0JKPW9iamVjdHMvb3NfcW54Lm8KKwkJdGVzdCAteiAiJHdpdGhfeCIgJiYgd2l0aF94PW5vCisJCVFOWD15ZXM7IGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7OworICAgICopCQlRTlg9bm87IGVjaG8gIiRhY190IiJubyIgMT4mNjs7Citlc2FjCisKK0RFRkFVTFRfVklNTkFNRT12aW0KK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBEYXJ3aW4gKE1hYyBPUyBYKSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTE4OTogY2hlY2tpbmcgZm9yIERhcndpbiAoTWFjIE9TIFgpIiA+JjUKK2lmIHRlc3QgImAodW5hbWUpIDI+L2Rldi9udWxsYCIgPSBEYXJ3aW47IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorCisgIGVjaG8gJGFjX24gImNoZWNraW5nIC0tZGlzYWJsZS1kYXJ3aW4gYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjExOTQ6IGNoZWNraW5nIC0tZGlzYWJsZS1kYXJ3aW4gYXJndW1lbnQiID4mNQorICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGFyd2luIG9yIC0tZGlzYWJsZS1kYXJ3aW4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGFyd2luK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9kYXJ3aW4iCisgIDoKK2Vsc2UKKyAgZW5hYmxlX2Rhcndpbj0ieWVzIgorZmkKKworICBpZiB0ZXN0ICIkZW5hYmxlX2RhcndpbiIgPSAieWVzIjsgdGhlbgorICAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGlmIERhcndpbiBmaWxlcyBhcmUgdGhlcmUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEyMDY6IGNoZWNraW5nIGlmIERhcndpbiBmaWxlcyBhcmUgdGhlcmUiID4mNQorICAgIGlmIHRlc3QgLWYgb3NfbWFjb3N4LmM7IHRoZW4KKyAgICAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgICBlbHNlCisgICAgICBlY2hvICIkYWNfdCIibm8sIERhcndpbiBzdXBwb3J0IGRpc2FibGVkIiAxPiY2CisgICAgICBlbmFibGVfZGFyd2luPW5vCisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRhY190IiJ5ZXMsIERhcndpbiBzdXBwb3J0IGV4Y2x1ZGVkIiAxPiY2CisgIGZpCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9kYXJ3aW4iID0gInllcyI7IHRoZW4KKyAgICBNQUNPU1g9eWVzCisgICAgT1NfRVhUUkFfU0NSPSJvc19tYWNvc3guYyI7CisgICAgT1NfRVhUUkFfT0JKPSJvYmplY3RzL29zX21hY29zeC5vIgorICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURNQUNPU19YX1VOSVggLUkvRGV2ZWxvcGVyL0hlYWRlcnMvRmxhdENhcmJvbiAtbm8tY3BwLXByZWNvbXAiCisKKyAgICAgICAgICAgIGFjX3NhZmU9YGVjaG8gIkNhcmJvbi9DYXJib24uaCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgQ2FyYm9uL0NhcmJvbi5oIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMjI1OiBjaGVja2luZyBmb3IgQ2FyYm9uL0NhcmJvbi5oIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxMjMwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+CitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjEyMzU6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBDQVJCT049eWVzCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGlmIHRlc3QgIngkQ0FSQk9OIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJHdpdGhfeCI7IHRoZW4KKwl3aXRoX3g9bm8KKwlERUZBVUxUX1ZJTU5BTUU9VmltCisgICAgICBmaQorICAgIGZpCisgIGZpCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworCisKKworaGF2ZV9sb2NhbF9pbmNsdWRlPScnCitoYXZlX2xvY2FsX2xpYj0nJworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgZWNobyAndm9pZCBmKCl7fScgPiBjb25mdGVzdC5jCisgICAgaGF2ZV9sb2NhbF9pbmNsdWRlPWAke0NDLWNjfSAtbm8tY3BwLXByZWNvbXAgLWMgLXYgY29uZnRlc3QuYyAyPiYxIHwgZ3JlcCAnL3Vzci9sb2NhbC9pbmNsdWRlJ2AKKyAgaGF2ZV9sb2NhbF9saWI9YCR7Q0MtY2N9IC1jIC12IGNvbmZ0ZXN0LmMgMj4mMSB8IGdyZXAgJy91c3IvbG9jYWwvbGliJ2AKKyAgcm0gLWYgY29uZnRlc3QuYyBjb25mdGVzdC5vCitmaQoraWYgdGVzdCAteiAiJGhhdmVfbG9jYWxfbGliIiAtYSAtZCAvdXNyL2xvY2FsL2xpYjsgdGhlbgorICB0dD1gZWNobyAiJExERkxBR1MiIHwgc2VkIC1lICdzKy1ML3Vzci9sb2NhbC9saWIgKytnJyAtZSAncystTC91c3IvbG9jYWwvbGliJCsrZydgCisgIGlmIHRlc3QgIiR0dCIgPSAiJExERkxBR1MiOyB0aGVuCisgICAgTERGTEFHUz0iJExERkxBR1MgLUwvdXNyL2xvY2FsL2xpYiIKKyAgZmkKK2ZpCitpZiB0ZXN0IC16ICIkaGF2ZV9sb2NhbF9pbmNsdWRlIiAtYSAtZCAvdXNyL2xvY2FsL2luY2x1ZGU7IHRoZW4KKyAgdHQ9YGVjaG8gIiRDUFBGTEFHUyIgfCBzZWQgLWUgJ3MrLUkvdXNyL2xvY2FsL2luY2x1ZGUgKytnJyAtZSAncystSS91c3IvbG9jYWwvaW5jbHVkZSQrK2cnYAorICBpZiB0ZXN0ICIkdHQiID0gIiRDUFBGTEFHUyI7IHRoZW4KKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9sb2NhbC9pbmNsdWRlIgorICBmaQorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgLS13aXRoLXZpbS1uYW1lIGFyZ3VtZW50IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMjkyOiBjaGVja2luZyAtLXdpdGgtdmltLW5hbWUgYXJndW1lbnQiID4mNQorIyBDaGVjayB3aGV0aGVyIC0td2l0aC12aW0tbmFtZSBvciAtLXdpdGhvdXQtdmltLW5hbWUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3ZpbV9uYW1lK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3ZpbV9uYW1lIgorICBWSU1OQU1FPSIkd2l0aHZhbCI7IGVjaG8gIiRhY190IiIkVklNTkFNRSIgMT4mNgorZWxzZQorICBWSU1OQU1FPSIkREVGQVVMVF9WSU1OQU1FIjsgZWNobyAiJGFjX3QiIkRlZmF1bHRpbmcgdG8gJFZJTU5BTUUiIDE+JjYKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgLS13aXRoLWV4LW5hbWUgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEzMDM6IGNoZWNraW5nIC0td2l0aC1leC1uYW1lIGFyZ3VtZW50IiA+JjUKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZXgtbmFtZSBvciAtLXdpdGhvdXQtZXgtbmFtZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZXhfbmFtZStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9leF9uYW1lIgorICBFWE5BTUU9IiR3aXRodmFsIjsgZWNobyAiJGFjX3QiIiRFWE5BTUUiIDE+JjYKK2Vsc2UKKyAgRVhOQU1FPSJleCI7IGVjaG8gIiRhY190IiJEZWZhdWx0aW5nIHRvIGV4IiAxPiY2CitmaQorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIC0td2l0aC12aWV3LW5hbWUgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEzMTQ6IGNoZWNraW5nIC0td2l0aC12aWV3LW5hbWUgYXJndW1lbnQiID4mNQorIyBDaGVjayB3aGV0aGVyIC0td2l0aC12aWV3LW5hbWUgb3IgLS13aXRob3V0LXZpZXctbmFtZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdmlld19uYW1lK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3ZpZXdfbmFtZSIKKyAgVklFV05BTUU9IiR3aXRodmFsIjsgZWNobyAiJGFjX3QiIiRWSUVXTkFNRSIgMT4mNgorZWxzZQorICBWSUVXTkFNRT0idmlldyI7IGVjaG8gIiRhY190IiJEZWZhdWx0aW5nIHRvIHZpZXciIDE+JjYKK2ZpCisKKworCitlY2hvICRhY19uICJjaGVja2luZyAtLXdpdGgtZ2xvYmFsLXJ1bnRpbWUgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEzMjY6IGNoZWNraW5nIC0td2l0aC1nbG9iYWwtcnVudGltZSBhcmd1bWVudCIgPiY1CisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdsb2JhbC1ydW50aW1lIG9yIC0td2l0aG91dC1nbG9iYWwtcnVudGltZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ2xvYmFsX3J1bnRpbWUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZ2xvYmFsX3J1bnRpbWUiCisgIGVjaG8gIiRhY190IiIkd2l0aHZhbCIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgUlVOVElNRV9HTE9CQUwgIiR3aXRodmFsIgorRU9GCisKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIC0td2l0aC1tb2RpZmllZC1ieSBhcmd1bWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTM0MDogY2hlY2tpbmcgLS13aXRoLW1vZGlmaWVkLWJ5IGFyZ3VtZW50IiA+JjUKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbW9kaWZpZWQtYnkgb3IgLS13aXRob3V0LW1vZGlmaWVkLWJ5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tb2RpZmllZF9ieStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9tb2RpZmllZF9ieSIKKyAgZWNobyAiJGFjX3QiIiR3aXRodmFsIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBNT0RJRklFRF9CWSAiJHdpdGh2YWwiCitFT0YKKworZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgY2hhcmFjdGVyIHNldCBpcyBFQkNESUMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEzNTQ6IGNoZWNraW5nIGlmIGNoYXJhY3RlciBzZXQgaXMgRUJDRElDIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDEzNTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorIAoraW50IG1haW4oKSB7CisgLyogVHJ5Q29tcGlsZSBmdW5jdGlvbiBmb3IgQ2hhclNldC4KKyAgIFRyZWF0IGFueSBmYWlsdXJlIGFzIEFTQ0lJIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgYXJ0LgorICAgVXNlIGNvbXBpbGUtdGltZSByYXRoZXIgdGhhbiBydW4tdGltZSB0ZXN0cyBmb3IgY3Jvc3MtY29tcGlsZXIKKyAgIHRvbGVyYW5jZS4gICovCisjaWYgJzAnIT0yNDAKK21ha2UgYW4gZXJyb3IgIkNoYXJhY3RlciBzZXQgaXMgbm90IEVCQ0RJQyIKKyNlbmRpZiAKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMzY5OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgICMgVHJ5Q29tcGlsZSBhY3Rpb24gaWYgdHJ1ZQorY2ZfY3ZfZWJjZGljPXllcyAKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgICMgVHJ5Q29tcGlsZSBhY3Rpb24gaWYgZmFsc2UKK2NmX2N2X2ViY2RpYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorIyBlbmQgb2YgVHJ5Q29tcGlsZSBdKQorIyBlbmQgb2YgQ2FjaGVWYWwgQ3ZFYmNkaWMKK2VjaG8gIiRhY190IiIkY2ZfY3ZfZWJjZGljIiAxPiY2CitjYXNlICIkY2ZfY3ZfZWJjZGljIiBpbiAgIyh2aQorICAgIHllcykJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEVCQ0RJQyAxCitFT0YKKworCQlsaW5lX2JyZWFrPSciXFxuIicKKwkJOzsKKyAgICAqKQkJbGluZV9icmVhaz0nIlxcMDEyIic7OworZXNhYworCisKK2lmIHRlc3QgIiRjZl9jdl9lYmNkaWMiID0gInllcyI7IHRoZW4KK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBPUy8zOTAgVW5peCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTM5NzogY2hlY2tpbmcgZm9yIE9TLzM5MCBVbml4IiA+JjUKK2Nhc2UgYHVuYW1lYCBpbgorICAgIE9TLzM5MCkJT1MzOTBVbml4PSJ5ZXMiOworCQkJCQkJCQkJCWlmIHRlc3QgIiRDQyIgPSAiY2MiOyB0aGVuCisJCSAgY2NtPSIkX0NDX0NDTU9ERSIKKwkJICBjY249IkNDIgorCQllbHNlCisJCSAgaWYgdGVzdCAiJENDIiA9ICJjODkiOyB0aGVuCisJCSAgICBjY209IiRfQ0NfQzg5TU9ERSIKKwkJICAgIGNjbj0iQzg5IgorCQkgIGVsc2UKKwkJICAgIGNjbT0xCisJCSAgZmkKKwkJZmkKKwkJaWYgdGVzdCAiJGNjbSIgIT0gIjEiOyB0aGVuCisJCSAgZWNobyAiIgorCQkgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwkJICBlY2hvICIgT24gT1MvMzkwIFVuaXgsIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwkJICBlY2hvICIgX19DQ18ke2Njbn1NT0RFIG11c3QgYmUgc2V0IHRvIFwiMVwiISIKKwkJICBlY2hvICIgRG86IgorCQkgIGVjaG8gIiAgICBleHBvcnQgX0NDXyR7Y2NufU1PREU9MSIKKwkJICBlY2hvICIgYW5kIHRoZW4gY2FsbCBjb25maWd1cmUgYWdhaW4uIgorCQkgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwkJICBleGl0IDEKKwkJZmkKKwkJQ0ZMQUdTPSIkQ0ZMQUdTIC1EX0FMTF9TT1VSQ0UiOyBMREZMQUdTPSIkTERGTEFHUyAtV2wsRURJVD1OTyIKKwkJZWNobyAiJGFjX3QiInllcyIgMT4mNgorCQk7OworICAgICopCQlPUzM5MFVuaXg9Im5vIjsKKwkJZWNobyAiJGFjX3QiIm5vIiAxPiY2CisJCTs7Citlc2FjCitmaQorCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgLS13aXRoLWZlYXR1cmVzIGFyZ3VtZW50IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxNDM0OiBjaGVja2luZyAtLXdpdGgtZmVhdHVyZXMgYXJndW1lbnQiID4mNQorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1mZWF0dXJlcyBvciAtLXdpdGhvdXQtZmVhdHVyZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2ZlYXR1cmVzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2ZlYXR1cmVzIgorICBmZWF0dXJlcz0iJHdpdGh2YWwiOyBlY2hvICIkYWNfdCIiJGZlYXR1cmVzIiAxPiY2CitlbHNlCisgIGZlYXR1cmVzPSJub3JtYWwiOyBlY2hvICIkYWNfdCIiRGVmYXVsdGluZyB0byBub3JtYWwiIDE+JjYKK2ZpCisKKworZG92aW1kaWZmPSIiCitkb2d2aW1kaWZmPSIiCitjYXNlICIkZmVhdHVyZXMiIGluCisgIHRpbnkpCQljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgRkVBVF9USU5ZIDEKK0VPRgorIDs7CisgIHNtYWxsKQljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgRkVBVF9TTUFMTCAxCitFT0YKKyA7OworICBub3JtYWwpCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBGRUFUX05PUk1BTCAxCitFT0YKKyBkb3ZpbWRpZmY9Imluc3RhbGx2aW1kaWZmIjsKKwkJCWRvZ3ZpbWRpZmY9Imluc3RhbGxndmltZGlmZiIgOzsKKyAgYmlnKQkJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEZFQVRfQklHIDEKK0VPRgorIGRvdmltZGlmZj0iaW5zdGFsbHZpbWRpZmYiOworCQkJZG9ndmltZGlmZj0iaW5zdGFsbGd2aW1kaWZmIiA7OworICBodWdlKQkJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEZFQVRfSFVHRSAxCitFT0YKKyBkb3ZpbWRpZmY9Imluc3RhbGx2aW1kaWZmIjsKKwkJCWRvZ3ZpbWRpZmY9Imluc3RhbGxndmltZGlmZiIgOzsKKyAgKikJCWVjaG8gIiRhY190IiJTb3JyeSwgJGZlYXR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQiIDE+JjYgOzsKK2VzYWMKKworCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgLS13aXRoLWNvbXBpbGVkYnkgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE0Nzc6IGNoZWNraW5nIC0td2l0aC1jb21waWxlZGJ5IGFyZ3VtZW50IiA+JjUKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY29tcGlsZWRieSBvciAtLXdpdGhvdXQtY29tcGlsZWRieSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY29tcGlsZWRieStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9jb21waWxlZGJ5IgorICBjb21waWxlZGJ5PSIkd2l0aHZhbCI7IGVjaG8gIiRhY190IiIkd2l0aHZhbCIgMT4mNgorZWxzZQorICBjb21waWxlZGJ5PSIiOyBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKworCitlY2hvICRhY19uICJjaGVja2luZyAtLWRpc2FibGUteHNtcCBhcmd1bWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTQ4OTogY2hlY2tpbmcgLS1kaXNhYmxlLXhzbXAgYXJndW1lbnQiID4mNQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXhzbXAgb3IgLS1kaXNhYmxlLXhzbXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfeHNtcCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfeHNtcCIKKyAgOgorZWxzZQorICBlbmFibGVfeHNtcD0ieWVzIgorZmkKKworCitpZiB0ZXN0ICIkZW5hYmxlX3hzbXAiID0gInllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisgIGVjaG8gJGFjX24gImNoZWNraW5nIC0tZGlzYWJsZS14c21wLWludGVyYWN0IGFyZ3VtZW50IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxNTAyOiBjaGVja2luZyAtLWRpc2FibGUteHNtcC1pbnRlcmFjdCBhcmd1bWVudCIgPiY1CisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS14c21wLWludGVyYWN0IG9yIC0tZGlzYWJsZS14c21wLWludGVyYWN0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3hzbXBfaW50ZXJhY3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3hzbXBfaW50ZXJhY3QiCisgIDoKK2Vsc2UKKyAgZW5hYmxlX3hzbXBfaW50ZXJhY3Q9InllcyIKK2ZpCisKKyAgaWYgdGVzdCAiJGVuYWJsZV94c21wX2ludGVyYWN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisgICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9YU01QX0lOVEVSQUNUIDEKK0VPRgorCisgIGVsc2UKKyAgICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGZpCitlbHNlCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIC0tZW5hYmxlLXBlcmxpbnRlcnAgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE1MjU6IGNoZWNraW5nIC0tZW5hYmxlLXBlcmxpbnRlcnAgYXJndW1lbnQiID4mNQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBlcmxpbnRlcnAgb3IgLS1kaXNhYmxlLXBlcmxpbnRlcnAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGVybGludGVycCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfcGVybGludGVycCIKKyAgOgorZWxzZQorICBlbmFibGVfcGVybGludGVycD0ibm8iCitmaQorCitlY2hvICIkYWNfdCIiJGVuYWJsZV9wZXJsaW50ZXJwIiAxPiY2CitpZiB0ZXN0ICIkZW5hYmxlX3BlcmxpbnRlcnAiID0gInllcyI7IHRoZW4KKyAgCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGVybCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGVybDsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxNTQwOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3BhdGhfdmlfY3ZfcGF0aF9wZXJsJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2FzZSAiJHZpX2N2X3BhdGhfcGVybCIgaW4KKyAgLyopCisgIGFjX2N2X3BhdGhfdmlfY3ZfcGF0aF9wZXJsPSIkdmlfY3ZfcGF0aF9wZXJsIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgPzovKikJCQkgCisgIGFjX2N2X3BhdGhfdmlfY3ZfcGF0aF9wZXJsPSIkdmlfY3ZfcGF0aF9wZXJsIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgZG9zIHBhdGguCisgIDs7CisgICopCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvIAorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wYXRoX3ZpX2N2X3BhdGhfcGVybD0iJGFjX2Rpci8kYWNfd29yZCIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgOzsKK2VzYWMKK2ZpCit2aV9jdl9wYXRoX3Blcmw9IiRhY19jdl9wYXRoX3ZpX2N2X3BhdGhfcGVybCIKK2lmIHRlc3QgLW4gIiR2aV9jdl9wYXRoX3BlcmwiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkdmlfY3ZfcGF0aF9wZXJsIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICBpZiB0ZXN0ICJYJHZpX2N2X3BhdGhfcGVybCIgIT0gIlgiOyB0aGVuCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgUGVybCB2ZXJzaW9uIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxNTc0OiBjaGVja2luZyBQZXJsIHZlcnNpb24iID4mNQorICAgIGlmICR2aV9jdl9wYXRoX3BlcmwgLWUgJ3JlcXVpcmUgNS4wMDNfMDEnID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgZXZhbCBgJHZpX2N2X3BhdGhfcGVybCAtVjp1c2V0aHJlYWRzYAorICAgICBpZiB0ZXN0ICJYJHVzZXRocmVhZHMiID0gIlhVTktOT1dOIiAtbyAiWCR1c2V0aHJlYWRzIiA9ICJYdW5kZWYiOyB0aGVuCisgICAgICAgYmFkdGhyZWFkcz1ubworICAgICBlbHNlCisgICAgICAgaWYgJHZpX2N2X3BhdGhfcGVybCAtZSAncmVxdWlyZSA1LjYuMCcgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCSBldmFsIGAkdmlfY3ZfcGF0aF9wZXJsIC1WOnVzZTUwMDV0aHJlYWRzYAorCSBpZiB0ZXN0ICJYJHVzZTUwMDV0aHJlYWRzIiA9ICJYVU5LTk9XTiIgLW8gIlgkdXNlNTAwNXRocmVhZHMiID0gIlh1bmRlZiI7IHRoZW4KKwkgICBiYWR0aHJlYWRzPW5vCisJIGVsc2UKKwkgICBiYWR0aHJlYWRzPXllcworCSAgIGVjaG8gIiRhY190IiI+Pj4gUGVybCA+IDUuNiB3aXRoIDUuNSB0aHJlYWRzIGNhbm5vdCBiZSB1c2VkIDw8PCIgMT4mNgorCSBmaQorICAgICAgIGVsc2UKKwkgYmFkdGhyZWFkcz15ZXMKKwkgZWNobyAiJGFjX3QiIj4+PiBQZXJsIDUuNSB3aXRoIHRocmVhZHMgY2Fubm90IGJlIHVzZWQgPDw8IiAxPiY2CisgICAgICAgZmkKKyAgICAgZmkKKyAgICAgaWYgdGVzdCAkYmFkdGhyZWFkcyA9IG5vOyB0aGVuCisgICAgICBlY2hvICIkYWNfdCIiT0siIDE+JjYKKyAgICAgIGV2YWwgYCR2aV9jdl9wYXRoX3BlcmwgLVY6c2hycGVudmAKKyAgICAgIGlmIHRlc3QgIlgkc2hycGVudiIgPSAiWFVOS05PV04iOyB0aGVuICMgcHJlIDUuMDAzXzA0CisJc2hycGVudj0iIgorICAgICAgZmkKKyAgICAgIHZpX2N2X3BlcmxsaWI9YCR2aV9jdl9wYXRoX3BlcmwgLU1Db25maWcgLWUgJ3ByaW50ICRDb25maWd7cHJpdmxpYmV4cH0nYAorICAgICAgCisgICAgICAgICAgICBwZXJsY3BwZmxhZ3M9YCR2aV9jdl9wYXRoX3BlcmwgLU1saWI9JHNyY2RpciAtTUV4dFV0aWxzOjpFbWJlZCBcCisJICAgICAgLWUgJ2NjZmxhZ3M7cGVybF9pbmM7cHJpbnQiXG4iJyB8IHNlZCAtZSAncy8tZm5vW14gXSovLydgCisgICAgICAgICAgICBwZXJsbGlicz1gY2QgJHNyY2RpcjsgJHZpX2N2X3BhdGhfcGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSAnbGRvcHRzJyB8IFwKKwkJc2VkIC1lICcvV2FybmluZy9kJyAtZSAnL05vdGUgKHByb2JhYmx5IGhhcm1sZXNzKS9kJyBcCisJCQktZSAncy8tYkU6cGVybC5leHAvLycgLWUgJ3MvLWxjIC8vJ2AKKyAgICAgICAgICAgICAgICAgIHBlcmxsZGZsYWdzPWBjZCAkc3JjZGlyOyAkdmlfY3ZfcGF0aF9wZXJsIC1NRXh0VXRpbHM6OkVtYmVkIFwKKwkJLWUgJ2NjZGxmbGFncycgfCBzZWQgLWUgJ3MvLWJFOnBlcmwuZXhwLy8nYAorCisgICAgICAgICAgICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBpZiBjb21waWxlIGFuZCBsaW5rIGZsYWdzIGZvciBQZXJsIGFyZSBzYW5lIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxNjEwOiBjaGVja2luZyBpZiBjb21waWxlIGFuZCBsaW5rIGZsYWdzIGZvciBQZXJsIGFyZSBzYW5lIiA+JjUKKyAgICAgIGNmbGFnc19zYXZlPSRDRkxBR1MKKyAgICAgIGxpYnNfc2F2ZT0kTElCUworICAgICAgbGRmbGFnc19zYXZlPSRMREZMQUdTCisgICAgICBDRkxBR1M9IiRDRkxBR1MgJHBlcmxjcHBmbGFncyIKKyAgICAgIExJQlM9IiRMSUJTICRwZXJsbGlicyIKKyAgICAgIExERkxBR1M9IiRwZXJsbGRmbGFncyAkTERGTEFHUyIKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDE2MTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKKyAKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNjI1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBwZXJsX29rPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm86IFBFUkwgRElTQUJMRUQiIDE+JjY7IHBlcmxfb2s9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgICAgIENGTEFHUz0kY2ZsYWdzX3NhdmUKKyAgICAgIExJQlM9JGxpYnNfc2F2ZQorICAgICAgTERGTEFHUz0kbGRmbGFnc19zYXZlCisgICAgICBpZiB0ZXN0ICRwZXJsX29rID0geWVzOyB0aGVuCisJaWYgdGVzdCAiWCRwZXJsY3BwZmxhZ3MiICE9ICJYIjsgdGhlbgorCSAgUEVSTF9DRkxBR1M9IiRwZXJsY3BwZmxhZ3MiCisJZmkKKwlpZiB0ZXN0ICJYJHBlcmxsZGZsYWdzIiAhPSAiWCI7IHRoZW4KKwkgIExERkxBR1M9IiRwZXJsbGRmbGFncyAkTERGTEFHUyIKKwlmaQorCVBFUkxfTElCUz0kcGVybGxpYnMKKwlQRVJMX1NSQz0iYXV0by9pZl9wZXJsLmMgaWZfcGVybHNmaW8uYyIKKwlQRVJMX09CSj0ib2JqZWN0cy9pZl9wZXJsLm8gb2JqZWN0cy9pZl9wZXJsc2Zpby5vIgorCVBFUkxfUFJPPSJpZl9wZXJsLnBybyBpZl9wZXJsc2Zpby5wcm8iCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEZFQVRfUEVSTCAxCitFT0YKKworICAgICAgZmkKKyAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICIkYWNfdCIiPj4+IHRvbyBvbGQ7IG5lZWQgUGVybCB2ZXJzaW9uIDUuMDAzXzAxIG9yIGxhdGVyIDw8PCIgMT4mNgorICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAieCRNQUNPU1giID0gInh5ZXMiOyB0aGVuCisgICAgICAgIGRpcj0vU3lzdGVtL0xpYnJhcnkvUGVybAorICAgIGRhcndpbmRpcj0kZGlyL2RhcndpbgorICAgIGlmIHRlc3QgLWQgJGRhcndpbmRpcjsgdGhlbgorICAgICAgUEVSTD0vdXNyL2Jpbi9wZXJsCisgICAgZWxzZQorICAgICAgICAgICAgZGlyPS9TeXN0ZW0vTGlicmFyeS9QZXJsLzUuOC4xCisgICAgICBkYXJ3aW5kaXI9JGRpci9kYXJ3aW4tdGhyZWFkLW11bHRpLTJsZXZlbAorICAgICAgaWYgdGVzdCAtZCAkZGFyd2luZGlyOyB0aGVuCisJUEVSTD0vdXNyL2Jpbi9wZXJsCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJFBFUkwiOyB0aGVuCisgICAgICBQRVJMX0RJUj0iJGRpciIKKyAgICAgIFBFUkxfQ0ZMQUdTPSItREZFQVRfUEVSTCAtSSRkYXJ3aW5kaXIvQ09SRSIKKyAgICAgIFBFUkxfT0JKPSJvYmplY3RzL2lmX3BlcmwubyBvYmplY3RzL2lmX3BlcmxzZmlvLm8gJGRhcndpbmRpci9hdXRvL0R5bmFMb2FkZXIvRHluYUxvYWRlci5hIgorICAgICAgUEVSTF9MSUJTPSItTCRkYXJ3aW5kaXIvQ09SRSAtbHBlcmwiCisgICAgZmkKKyAgZmkKK2ZpCisKKworCisKKworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIC0tZW5hYmxlLXB5dGhvbmludGVycCBhcmd1bWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTY4ODogY2hlY2tpbmcgLS1lbmFibGUtcHl0aG9uaW50ZXJwIGFyZ3VtZW50IiA+JjUKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1weXRob25pbnRlcnAgb3IgLS1kaXNhYmxlLXB5dGhvbmludGVycCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9weXRob25pbnRlcnArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3B5dGhvbmludGVycCIKKyAgOgorZWxzZQorICBlbmFibGVfcHl0aG9uaW50ZXJwPSJubyIKK2ZpCisKK2VjaG8gIiRhY190IiIkZW5hYmxlX3B5dGhvbmludGVycCIgMT4mNgoraWYgdGVzdCAiJGVuYWJsZV9weXRob25pbnRlcnAiID0gInllcyI7IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInB5dGhvbiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcHl0aG9uOyBhY193b3JkPSQyCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE3MDI6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcGF0aF92aV9jdl9wYXRoX3B5dGhvbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhc2UgIiR2aV9jdl9wYXRoX3B5dGhvbiIgaW4KKyAgLyopCisgIGFjX2N2X3BhdGhfdmlfY3ZfcGF0aF9weXRob249IiR2aV9jdl9wYXRoX3B5dGhvbiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgID86LyopCQkJIAorICBhY19jdl9wYXRoX3ZpX2N2X3BhdGhfcHl0aG9uPSIkdmlfY3ZfcGF0aF9weXRob24iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKyAgOzsKKyAgKikKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8gCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3BhdGhfdmlfY3ZfcGF0aF9weXRob249IiRhY19kaXIvJGFjX3dvcmQiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIDs7Citlc2FjCitmaQordmlfY3ZfcGF0aF9weXRob249IiRhY19jdl9wYXRoX3ZpX2N2X3BhdGhfcHl0aG9uIgoraWYgdGVzdCAtbiAiJHZpX2N2X3BhdGhfcHl0aG9uIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJHZpX2N2X3BhdGhfcHl0aG9uIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICBpZiB0ZXN0ICJYJHZpX2N2X3BhdGhfcHl0aG9uIiAhPSAiWCI7IHRoZW4KKworICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBQeXRob24gdmVyc2lvbiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTczNzogY2hlY2tpbmcgUHl0aG9uIHZlcnNpb24iID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J3ZpX2N2X3Zhcl9weXRob25fdmVyc2lvbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIHZpX2N2X3Zhcl9weXRob25fdmVyc2lvbj1gCisJICAgICR7dmlfY3ZfcGF0aF9weXRob259IC1jICdpbXBvcnQgc3lzOyBwcmludCBzeXMudmVyc2lvbls6M10nYAorICAgIAorZmkKKworZWNobyAiJGFjX3QiIiR2aV9jdl92YXJfcHl0aG9uX3ZlcnNpb24iIDE+JjYKKworICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBQeXRob24gaXMgMS40IG9yIGJldHRlciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTc0OTogY2hlY2tpbmcgUHl0aG9uIGlzIDEuNCBvciBiZXR0ZXIiID4mNQorICAgIGlmICR7dmlfY3ZfcGF0aF9weXRob259IC1jIFwKKwkiaW1wb3J0IHN5czsgc3lzLmV4aXQoJHt2aV9jdl92YXJfcHl0aG9uX3ZlcnNpb259IDwgMS40KSIKKyAgICB0aGVuCisgICAgICBlY2hvICIkYWNfdCIieWVwIiAxPiY2CisKKyAgICAgICAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIFB5dGhvbidzIGluc3RhbGwgcHJlZml4IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxNzU2OiBjaGVja2luZyBQeXRob24ncyBpbnN0YWxsIHByZWZpeCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3sndmlfY3ZfcGF0aF9weXRob25fcGZ4JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgIHZpX2N2X3BhdGhfcHl0aG9uX3BmeD1gCisJICAgICR7dmlfY3ZfcGF0aF9weXRob259IC1jIFwKKwkJImltcG9ydCBzeXM7IHByaW50IHN5cy5wcmVmaXgiYCAKK2ZpCisKK2VjaG8gIiRhY190IiIkdmlfY3ZfcGF0aF9weXRob25fcGZ4IiAxPiY2CisKKyAgICAgICAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIFB5dGhvbidzIGV4ZWN1dGlvbiBwcmVmaXgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE3Njg6IGNoZWNraW5nIFB5dGhvbidzIGV4ZWN1dGlvbiBwcmVmaXgiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J3ZpX2N2X3BhdGhfcHl0aG9uX2VwZngnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAgdmlfY3ZfcGF0aF9weXRob25fZXBmeD1gCisJICAgICR7dmlfY3ZfcGF0aF9weXRob259IC1jIFwKKwkJImltcG9ydCBzeXM7IHByaW50IHN5cy5leGVjX3ByZWZpeCJgIAorZmkKKworZWNobyAiJGFjX3QiIiR2aV9jdl9wYXRoX3B5dGhvbl9lcGZ4IiAxPiY2CisKKyAgICAgIAorICAgICAgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J3ZpX2N2X3BhdGhfcHl0aG9ucGF0aCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgICB2aV9jdl9wYXRoX3B5dGhvbnBhdGg9YAorCSAgICB1bnNldCBQWVRIT05QQVRIOworCSAgICAke3ZpX2N2X3BhdGhfcHl0aG9ufSAtYyBcCisJCSJpbXBvcnQgc3lzLCBzdHJpbmc7IHByaW50IHN0cmluZy5qb2luKHN5cy5wYXRoLCc6JykiYCAKK2ZpCisKKworICAgICAgCisgICAgICAjIENoZWNrIHdoZXRoZXIgLS13aXRoLXB5dGhvbi1jb25maWctZGlyIG9yIC0td2l0aG91dC1weXRob24tY29uZmlnLWRpciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcHl0aG9uX2NvbmZpZ19kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfcHl0aG9uX2NvbmZpZ19kaXIiCisgICB2aV9jdl9wYXRoX3B5dGhvbl9jb25mPSIke3dpdGh2YWx9IiAgCitmaQorCisKKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIFB5dGhvbidzIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxNzk5OiBjaGVja2luZyBQeXRob24ncyBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3sndmlfY3ZfcGF0aF9weXRob25fY29uZicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCXZpX2N2X3BhdGhfcHl0aG9uX2NvbmY9CisJZm9yIHBhdGggaW4gIiR7dmlfY3ZfcGF0aF9weXRob25fcGZ4fSIgIiR7dmlfY3ZfcGF0aF9weXRob25fZXBmeH0iOyBkbworCSAgZm9yIHN1YmRpciBpbiBsaWIgc2hhcmU7IGRvCisJICAgIGQ9IiR7cGF0aH0vJHtzdWJkaXJ9L3B5dGhvbiR7dmlfY3ZfdmFyX3B5dGhvbl92ZXJzaW9ufS9jb25maWciCisJICAgIGlmIHRlc3QgLWQgIiRkIiAmJiB0ZXN0IC1mICIkZC9jb25maWcuYyI7IHRoZW4KKwkgICAgICB2aV9jdl9wYXRoX3B5dGhvbl9jb25mPSIkZCIKKwkgICAgZmkKKwkgIGRvbmUKKwlkb25lCisgICAgICAKK2ZpCisKK2VjaG8gIiRhY190IiIkdmlfY3ZfcGF0aF9weXRob25fY29uZiIgMT4mNgorCisgICAgICBQWVRIT05fQ09ORkRJUj0iJHt2aV9jdl9wYXRoX3B5dGhvbl9jb25mfSIKKworICAgICAgaWYgdGVzdCAiWCRQWVRIT05fQ09ORkRJUiIgPSAiWCI7IHRoZW4KKwllY2hvICIkYWNfdCIiY2FuJ3QgZmluZCBpdCEiIDE+JjYKKyAgICAgIGVsc2UKKworCQkJaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J3ZpX2N2X3BhdGhfcHl0aG9uX3BsaWJzJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCisJICAgIHRtcF9ta2Y9Ii90bXAvTWFrZWZpbGUtY29uZiQkIgorCSAgICBjYXQgJHtQWVRIT05fQ09ORkRJUn0vTWFrZWZpbGUgLSA8PCdlb2YnID4ke3RtcF9ta2Z9CitfXzoKKwlAZWNobyAicHl0aG9uX01PRExJQlM9JyQoTU9ETElCUyknIgorCUBlY2hvICJweXRob25fTElCUz0nJChMSUJTKSciCisJQGVjaG8gInB5dGhvbl9TWVNMSUJTPSckKFNZU0xJQlMpJyIKKwlAZWNobyAicHl0aG9uX0xJTktGT1JTSEFSRUQ9JyQoTElOS0ZPUlNIQVJFRCknIgorZW9mCisJICAgIAkgICAgZXZhbCAiYGNkICR7UFlUSE9OX0NPTkZESVJ9ICYmIG1ha2UgLWYgJHt0bXBfbWtmfSBfXyB8IHNlZCAnLyBkaXJlY3RvcnkgL2QnYCIKKwkgICAgcm0gLWYgJHt0bXBfbWtmfQorCSAgICBpZiB0ZXN0ICJ4JE1BQ09TWCIgPSAieHllcyIgJiYgJHt2aV9jdl9wYXRoX3B5dGhvbn0gLWMgXAorCQkiaW1wb3J0IHN5czsgc3lzLmV4aXQoJHt2aV9jdl92YXJfcHl0aG9uX3ZlcnNpb259IDwgMi4zKSI7IHRoZW4KKwkgICAgICB2aV9jdl9wYXRoX3B5dGhvbl9wbGlicz0iLWZyYW1ld29yayBQeXRob24iCisJICAgIGVsc2UKKwkgICAgICBpZiB0ZXN0ICIke3ZpX2N2X3Zhcl9weXRob25fdmVyc2lvbn0iID0gIjEuNCI7IHRoZW4KKwkJICB2aV9jdl9wYXRoX3B5dGhvbl9wbGlicz0iJHtQWVRIT05fQ09ORkRJUn0vbGliTW9kdWxlcy5hICR7UFlUSE9OX0NPTkZESVJ9L2xpYlB5dGhvbi5hICR7UFlUSE9OX0NPTkZESVJ9L2xpYk9iamVjdHMuYSAke1BZVEhPTl9DT05GRElSfS9saWJQYXJzZXIuYSIKKwkgICAgICBlbHNlCisJCSAgdmlfY3ZfcGF0aF9weXRob25fcGxpYnM9Ii1MJHtQWVRIT05fQ09ORkRJUn0gLWxweXRob24ke3ZpX2N2X3Zhcl9weXRob25fdmVyc2lvbn0iCisJICAgICAgZmkKKwkgICAgICB2aV9jdl9wYXRoX3B5dGhvbl9wbGlicz0iJHt2aV9jdl9wYXRoX3B5dGhvbl9wbGlic30gJHtweXRob25fTU9ETElCU30gJHtweXRob25fTElCU30gJHtweXRob25fU1lTTElCU30gJHtweXRob25fTElOS0ZPUlNIQVJFRH0iCisJICAgICAgCSAgICAgIHZpX2N2X3BhdGhfcHl0aG9uX3BsaWJzPWBlY2hvICR2aV9jdl9wYXRoX3B5dGhvbl9wbGlicyB8IHNlZCBzLy1sdGVybWNhcC8vYAorCSAgICBmaQorCQorZmkKKworCisJUFlUSE9OX0xJQlM9IiR7dmlfY3ZfcGF0aF9weXRob25fcGxpYnN9IgorCWlmIHRlc3QgIiR7dmlfY3ZfcGF0aF9weXRob25fcGZ4fSIgPSAiJHt2aV9jdl9wYXRoX3B5dGhvbl9lcGZ4fSI7IHRoZW4KKwkgIFBZVEhPTl9DRkxBR1M9Ii1JJHt2aV9jdl9wYXRoX3B5dGhvbl9wZnh9L2luY2x1ZGUvcHl0aG9uJHt2aV9jdl92YXJfcHl0aG9uX3ZlcnNpb259IgorCWVsc2UKKwkgIFBZVEhPTl9DRkxBR1M9Ii1JJHt2aV9jdl9wYXRoX3B5dGhvbl9wZnh9L2luY2x1ZGUvcHl0aG9uJHt2aV9jdl92YXJfcHl0aG9uX3ZlcnNpb259IC1JJHt2aV9jdl9wYXRoX3B5dGhvbl9lcGZ4fS9pbmNsdWRlL3B5dGhvbiR7dmlfY3ZfdmFyX3B5dGhvbl92ZXJzaW9ufSIKKwlmaQorCVBZVEhPTl9TUkM9ImlmX3B5dGhvbi5jIgorCQlpZiB0ZXN0ICJ4JE1BQ09TWCIgPSAieHllcyI7IHRoZW4KKwkgIFBZVEhPTl9PQko9Im9iamVjdHMvaWZfcHl0aG9uLm8iCisJZWxzZQorCSAgUFlUSE9OX09CSj0ib2JqZWN0cy9pZl9weXRob24ubyBvYmplY3RzL3B5X2NvbmZpZy5vIgorCWZpCisJaWYgdGVzdCAiJHt2aV9jdl92YXJfcHl0aG9uX3ZlcnNpb259IiA9ICIxLjQiOyB0aGVuCisJICAgUFlUSE9OX09CSj0iJFBZVEhPTl9PQkogb2JqZWN0cy9weV9nZXRwYXRoLm8iCisJZmkKKwlQWVRIT05fR0VUUEFUSF9DRkxBR1M9Ii1EUFlUSE9OUEFUSD0nXCIke3ZpX2N2X3BhdGhfcHl0aG9ucGF0aH1cIicgLURQUkVGSVg9J1wiJHt2aV9jdl9wYXRoX3B5dGhvbl9wZnh9XCInIC1ERVhFQ19QUkVGSVg9J1wiJHt2aV9jdl9wYXRoX3B5dGhvbl9lcGZ4fVwiJyIKKworCQkJCQkJCQllY2hvICRhY19uICJjaGVja2luZyBpZiAtcHRocmVhZCBzaG91bGQgYmUgdXNlZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTg3MjogY2hlY2tpbmcgaWYgLXB0aHJlYWQgc2hvdWxkIGJlIHVzZWQiID4mNQorCXRocmVhZHNhZmVfZmxhZz0KKwl0aHJlYWRfbGliPQorCWlmIHRlc3QgIngkTUFDT1NYIiAhPSAieHllcyI7IHRoZW4KKwkgIHRlc3QgIiRHQ0MiID0geWVzICYmIHRocmVhZHNhZmVfZmxhZz0iLXB0aHJlYWQiCisJICBpZiB0ZXN0ICJgKHVuYW1lKSAyPi9kZXYvbnVsbGAiID0gRnJlZUJTRDsgdGhlbgorCSAgICB0aHJlYWRzYWZlX2ZsYWc9Ii1EX1RIUkVBRF9TQUZFIgorCSAgICB0aHJlYWRfbGliPSItcHRocmVhZCIKKwkgIGZpCisJZmkKKwlsaWJzX3NhdmVfb2xkPSRMSUJTCisJaWYgdGVzdCAtbiAiJHRocmVhZHNhZmVfZmxhZyI7IHRoZW4KKwkgIGNmbGFnc19zYXZlPSRDRkxBR1MKKwkgIENGTEFHUz0iJENGTEFHUyAkdGhyZWFkc2FmZV9mbGFnIgorCSAgTElCUz0iJExJQlMgJHRocmVhZF9saWIiCisJICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxODg4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisgCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTg5NTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgUFlUSE9OX0NGTEFHUz0iJFBZVEhPTl9DRkxBR1MgJHRocmVhZHNhZmVfZmxhZyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2OyBMSUJTPSRsaWJzX3NhdmVfb2xkCisJICAgICAKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkgIENGTEFHUz0kY2ZsYWdzX3NhdmUKKwllbHNlCisJICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKwlmaQorCisJCQllY2hvICRhY19uICJjaGVja2luZyBpZiBjb21waWxlIGFuZCBsaW5rIGZsYWdzIGZvciBQeXRob24gYXJlIHNhbmUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE5MTI6IGNoZWNraW5nIGlmIGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgZm9yIFB5dGhvbiBhcmUgc2FuZSIgPiY1CisJY2ZsYWdzX3NhdmU9JENGTEFHUworCWxpYnNfc2F2ZT0kTElCUworCUNGTEFHUz0iJENGTEFHUyAkUFlUSE9OX0NGTEFHUyIKKwlMSUJTPSIkTElCUyAkUFlUSE9OX0xJQlMiCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTkxOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworIAorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE5MjU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IHB5dGhvbl9vaz15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vOiBQWVRIT04gRElTQUJMRUQiIDE+JjY7IHB5dGhvbl9vaz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCUNGTEFHUz0kY2ZsYWdzX3NhdmUKKwlMSUJTPSRsaWJzX3NhdmUKKwlpZiB0ZXN0ICRweXRob25fb2sgPSB5ZXM7IHRoZW4KKwkgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBGRUFUX1BZVEhPTiAxCitFT0YKKworCWVsc2UKKwkgIExJQlM9JGxpYnNfc2F2ZV9vbGQKKwkgIFBZVEhPTl9TUkM9CisJICBQWVRIT05fT0JKPQorCSAgUFlUSE9OX0xJQlM9CisJICBQWVRIT05fQ0ZMQUdTPQorCWZpCisKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiJGFjX3QiInRvbyBvbGQiIDE+JjYKKyAgICBmaQorICBmaQorZmkKKworCisKKworCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgLS1lbmFibGUtdGNsaW50ZXJwIGFyZ3VtZW50IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxOTY0OiBjaGVja2luZyAtLWVuYWJsZS10Y2xpbnRlcnAgYXJndW1lbnQiID4mNQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRjbGludGVycCBvciAtLWRpc2FibGUtdGNsaW50ZXJwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3RjbGludGVycCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfdGNsaW50ZXJwIgorICA6CitlbHNlCisgIGVuYWJsZV90Y2xpbnRlcnA9Im5vIgorZmkKKworZWNobyAiJGFjX3QiIiRlbmFibGVfdGNsaW50ZXJwIiAxPiY2CisKK2lmIHRlc3QgIiRlbmFibGVfdGNsaW50ZXJwIiA9ICJ5ZXMiOyB0aGVuCisKKyAgICBlY2hvICRhY19uICJjaGVja2luZyAtLXdpdGgtdGNsc2ggYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE5Nzg6IGNoZWNraW5nIC0td2l0aC10Y2xzaCBhcmd1bWVudCIgPiY1CisgICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGNsc2ggb3IgLS13aXRob3V0LXRjbHNoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF90Y2xzaCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF90Y2xzaCIKKyAgdGNsc2hfbmFtZT0iJHdpdGh2YWwiOyBlY2hvICIkYWNfdCIiJHRjbHNoX25hbWUiIDE+JjYKK2Vsc2UKKyAgdGNsc2hfbmFtZT0idGNsc2g4LjAiOyBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkdGNsc2hfbmFtZSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHRjbHNoX25hbWU7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTk5MDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX3ZpX2N2X3BhdGhfdGNsJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2FzZSAiJHZpX2N2X3BhdGhfdGNsIiBpbgorICAvKikKKyAgYWNfY3ZfcGF0aF92aV9jdl9wYXRoX3RjbD0iJHZpX2N2X3BhdGhfdGNsIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgPzovKikJCQkgCisgIGFjX2N2X3BhdGhfdmlfY3ZfcGF0aF90Y2w9IiR2aV9jdl9wYXRoX3RjbCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIGRvcyBwYXRoLgorICA7OworICAqKQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcGF0aF92aV9jdl9wYXRoX3RjbD0iJGFjX2Rpci8kYWNfd29yZCIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgOzsKK2VzYWMKK2ZpCit2aV9jdl9wYXRoX3RjbD0iJGFjX2N2X3BhdGhfdmlfY3ZfcGF0aF90Y2wiCitpZiB0ZXN0IC1uICIkdmlfY3ZfcGF0aF90Y2wiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkdmlfY3ZfcGF0aF90Y2wiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgIAorCisgICAgaWYgdGVzdCAiWCR2aV9jdl9wYXRoX3RjbCIgPSAiWCIgLWEgJHRjbHNoX25hbWUgPSAidGNsc2g4LjAiOyB0aGVuCisgICAgdGNsc2hfbmFtZT0idGNsc2g4LjIiCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkdGNsc2hfbmFtZSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHRjbHNoX25hbWU7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjAyOTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX3ZpX2N2X3BhdGhfdGNsJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2FzZSAiJHZpX2N2X3BhdGhfdGNsIiBpbgorICAvKikKKyAgYWNfY3ZfcGF0aF92aV9jdl9wYXRoX3RjbD0iJHZpX2N2X3BhdGhfdGNsIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgPzovKikJCQkgCisgIGFjX2N2X3BhdGhfdmlfY3ZfcGF0aF90Y2w9IiR2aV9jdl9wYXRoX3RjbCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIGRvcyBwYXRoLgorICA7OworICAqKQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcGF0aF92aV9jdl9wYXRoX3RjbD0iJGFjX2Rpci8kYWNfd29yZCIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgOzsKK2VzYWMKK2ZpCit2aV9jdl9wYXRoX3RjbD0iJGFjX2N2X3BhdGhfdmlfY3ZfcGF0aF90Y2wiCitpZiB0ZXN0IC1uICIkdmlfY3ZfcGF0aF90Y2wiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkdmlfY3ZfcGF0aF90Y2wiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgIGZpCisgICAgaWYgdGVzdCAiWCR2aV9jdl9wYXRoX3RjbCIgPSAiWCI7IHRoZW4KKyAgICB0Y2xzaF9uYW1lPSJ0Y2xzaCIKKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR0Y2xzaF9uYW1lIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkdGNsc2hfbmFtZTsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyMDY3OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3BhdGhfdmlfY3ZfcGF0aF90Y2wnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXNlICIkdmlfY3ZfcGF0aF90Y2wiIGluCisgIC8qKQorICBhY19jdl9wYXRoX3ZpX2N2X3BhdGhfdGNsPSIkdmlfY3ZfcGF0aF90Y2wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICA/Oi8qKQkJCSAKKyAgYWNfY3ZfcGF0aF92aV9jdl9wYXRoX3RjbD0iJHZpX2N2X3BhdGhfdGNsIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgZG9zIHBhdGguCisgIDs7CisgICopCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvIAorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wYXRoX3ZpX2N2X3BhdGhfdGNsPSIkYWNfZGlyLyRhY193b3JkIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorICA7OworZXNhYworZmkKK3ZpX2N2X3BhdGhfdGNsPSIkYWNfY3ZfcGF0aF92aV9jdl9wYXRoX3RjbCIKK2lmIHRlc3QgLW4gIiR2aV9jdl9wYXRoX3RjbCI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiR2aV9jdl9wYXRoX3RjbCIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgZmkKKyAgaWYgdGVzdCAiWCR2aV9jdl9wYXRoX3RjbCIgIT0gIlgiOyB0aGVuCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgVGNsIHZlcnNpb24iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIxMDI6IGNoZWNraW5nIFRjbCB2ZXJzaW9uIiA+JjUKKyAgICBpZiBlY2hvICdleGl0IFtleHByIFtpbmZvIHRjbHZlcnNpb25dIDwgOC4wXScgfCAkdmlfY3ZfcGF0aF90Y2wgLSA7IHRoZW4KKyAgICAgIHRjbHZlcj1gZWNobyAncHV0cyBbaW5mbyB0Y2x2ZXJzaW9uXScgfCAkdmlfY3ZfcGF0aF90Y2wgLWAKKyAgICAgIGVjaG8gIiRhY190IiIkdGNsdmVyIC0gT0siIDE+JjY7CisgICAgICB0Y2xsb2M9YGVjaG8gJ3NldCBsIFtpbmZvIGxpYnJhcnldO3NldCBpIFtzdHJpbmcgbGFzdCBsaWIgJGxdO2luY3IgaSAtMjtwdXRzIFtzdHJpbmcgcmFuZ2UgJGwgMCAkaV0nIHwgJHZpX2N2X3BhdGhfdGNsIC1gCisKKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBsb2NhdGlvbiBvZiBUY2wgaW5jbHVkZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjEwOTogY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIFRjbCBpbmNsdWRlIiA+JjUKKyAgICAgIGlmIHRlc3QgIngkTUFDT1NYIiAhPSAieHllcyI7IHRoZW4KKwl0Y2xpbmM9IiR0Y2xsb2MvaW5jbHVkZSAkdGNsbG9jL2luY2x1ZGUvdGNsICR0Y2xsb2MvaW5jbHVkZS90Y2wkdGNsdmVyIC91c3IvbG9jYWwvaW5jbHVkZSIKKyAgICAgIGVsc2UKKwkJdGNsaW5jPSIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9UY2wuZnJhbWV3b3JrL0hlYWRlcnMiCisgICAgICBmaQorICAgICAgZm9yIHRyeSBpbiAkdGNsaW5jOyBkbworCWlmIHRlc3QgLWYgIiR0cnkvdGNsLmgiOyB0aGVuCisJICBlY2hvICIkYWNfdCIiJHRyeS90Y2wuaCIgMT4mNgorCSAgVENMX0lOQz0kdHJ5CisJICBicmVhaworCWZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkVENMX0lOQyI7IHRoZW4KKwllY2hvICIkYWNfdCIiPG5vdCBmb3VuZD4iIDE+JjYKKwlTS0lQX1RDTD1ZRVMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC16ICIkU0tJUF9UQ0wiOyB0aGVuCisJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIHRjbENvbmZpZy5zaCBzY3JpcHQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIxMjg6IGNoZWNraW5nIGZvciBsb2NhdGlvbiBvZiB0Y2xDb25maWcuc2ggc2NyaXB0IiA+JjUKKwlpZiB0ZXN0ICJ4JE1BQ09TWCIgIT0gInh5ZXMiOyB0aGVuCisJICB0Y2xjbmY9YGVjaG8gJHRjbGluYyB8IHNlZCBzL2luY2x1ZGUvbGliL2dgCisJZWxzZQorCSAgCSAgdGNsY25mPSIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9UY2wuZnJhbWV3b3JrIgorCWZpCisJZm9yIHRyeSBpbiAkdGNsY25mOyBkbworCSAgaWYgdGVzdCAtZiAkdHJ5L3RjbENvbmZpZy5zaDsgdGhlbgorCSAgICBlY2hvICIkYWNfdCIiJHRyeS90Y2xDb25maWcuc2giIDE+JjYKKwkgICAgLiAkdHJ5L3RjbENvbmZpZy5zaAorCSAgICAJICAgIFRDTF9MSUJTPWBldmFsIGVjaG8gIiRUQ0xfTElCX1NQRUMgJFRDTF9MSUJTImAKKwkgICAgCSAgICAJICAgIFRDTF9ERUZTPWBlY2hvICRUQ0xfREVGUyB8IHRyICcgJyAnXDAxMicgfCBzZWQgLWUgJy9eLVteRF0vZCcgLWUgJy8tRFteX10vZCcgLWUgJ3MvLURfLyAtRF8vJyB8IHRyIC1kICdcMDEyJ2AKKwkgICAgYnJlYWsKKwkgIGZpCisJZG9uZQorCWlmIHRlc3QgLXogIiRUQ0xfTElCUyI7IHRoZW4KKwkgIGVjaG8gIiRhY190IiI8bm90IGZvdW5kPiIgMT4mNgorCSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFRjbCBsaWJyYXJ5IGJ5IG15c2VsZiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjE0NjogY2hlY2tpbmcgZm9yIFRjbCBsaWJyYXJ5IGJ5IG15c2VsZiIgPiY1CisJICB0Y2xsaWI9YGVjaG8gJHRjbGluYyB8IHNlZCBzL2luY2x1ZGUvbGliL2dgCisJICBmb3IgZXh0IGluIC5zbyAuYSA7IGRvCisJICAgIGZvciB2ZXIgaW4gIiIgJHRjbHZlciA7IGRvCisJICAgICAgZm9yIHRyeSBpbiAkdGNsbGliIDsgZG8KKwkJdHJ5bGliPXRjbCR2ZXIkZXh0CisJCWlmIHRlc3QgLWYgJHRyeS9saWIkdHJ5bGliIDsgdGhlbgorCQkgIGVjaG8gIiRhY190IiIkdHJ5L2xpYiR0cnlsaWIiIDE+JjYKKwkJICBUQ0xfTElCUz0iLUwkdHJ5IC1sdGNsJHZlciAtbGRsIC1sbSIKKwkJICBpZiB0ZXN0ICJgKHVuYW1lKSAyPi9kZXYvbnVsbGAiID0gU3VuT1MgJiYKKwkJCQkJIHVuYW1lIC1yIHwgZ3JlcCAnXjUnID4vZGV2L251bGw7IHRoZW4KKwkJICAgIFRDTF9MSUJTPSIkVENMX0xJQlMgLVIgJHRyeSIKKwkJICBmaQorCQkgIGJyZWFrIDMKKwkJZmkKKwkgICAgICBkb25lCisJICAgIGRvbmUKKwkgIGRvbmUKKwkgIGlmIHRlc3QgLXogIiRUQ0xfTElCUyI7IHRoZW4KKwkgICAgZWNobyAiJGFjX3QiIjxub3QgZm91bmQ+IiAxPiY2CisJICAgIFNLSVBfVENMPVlFUworCSAgZmkKKwlmaQorCWlmIHRlc3QgLXogIiRTS0lQX1RDTCI7IHRoZW4KKwkgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBGRUFUX1RDTCAxCitFT0YKKworCSAgVENMX1NSQz1pZl90Y2wuYworCSAgVENMX09CSj1vYmplY3RzL2lmX3RjbC5vCisJICBUQ0xfUFJPPWlmX3RjbC5wcm8KKwkgIFRDTF9DRkxBR1M9Ii1JJFRDTF9JTkMgJFRDTF9ERUZTIgorCWZpCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gIiRhY190IiJ0b28gb2xkOyBuZWVkIFRjbCB2ZXJzaW9uIDguMCBvciBsYXRlciIgMT4mNgorICAgIGZpCisgIGZpCitmaQorCisKKworCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgLS1lbmFibGUtcnVieWludGVycCBhcmd1bWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjE5MjogY2hlY2tpbmcgLS1lbmFibGUtcnVieWludGVycCBhcmd1bWVudCIgPiY1CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnVieWludGVycCBvciAtLWRpc2FibGUtcnVieWludGVycCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ydWJ5aW50ZXJwK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9ydWJ5aW50ZXJwIgorICA6CitlbHNlCisgIGVuYWJsZV9ydWJ5aW50ZXJwPSJubyIKK2ZpCisKK2VjaG8gIiRhY190IiIkZW5hYmxlX3J1YnlpbnRlcnAiIDE+JjYKK2lmIHRlc3QgIiRlbmFibGVfcnVieWludGVycCIgPSAieWVzIjsgdGhlbgorICAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJydWJ5Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBydWJ5OyBhY193b3JkPSQyCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIyMDc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcGF0aF92aV9jdl9wYXRoX3J1YnknK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXNlICIkdmlfY3ZfcGF0aF9ydWJ5IiBpbgorICAvKikKKyAgYWNfY3ZfcGF0aF92aV9jdl9wYXRoX3J1Ynk9IiR2aV9jdl9wYXRoX3J1YnkiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICA/Oi8qKQkJCSAKKyAgYWNfY3ZfcGF0aF92aV9jdl9wYXRoX3J1Ynk9IiR2aV9jdl9wYXRoX3J1YnkiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKyAgOzsKKyAgKikKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8gCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3BhdGhfdmlfY3ZfcGF0aF9ydWJ5PSIkYWNfZGlyLyRhY193b3JkIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorICA7OworZXNhYworZmkKK3ZpX2N2X3BhdGhfcnVieT0iJGFjX2N2X3BhdGhfdmlfY3ZfcGF0aF9ydWJ5IgoraWYgdGVzdCAtbiAiJHZpX2N2X3BhdGhfcnVieSI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiR2aV9jdl9wYXRoX3J1YnkiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgIGlmIHRlc3QgIlgkdmlfY3ZfcGF0aF9ydWJ5IiAhPSAiWCI7IHRoZW4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBSdWJ5IHZlcnNpb24iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIyNDE6IGNoZWNraW5nIFJ1YnkgdmVyc2lvbiIgPiY1CisgICAgaWYgJHZpX2N2X3BhdGhfcnVieSAtZSAnVkVSU0lPTiA+PSAiMS42LjAiIG9yIGV4aXQgMScgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgZWNobyAiJGFjX3QiIk9LIiAxPiY2CisgICAgICBlY2hvICRhY19uICJjaGVja2luZyBSdWJ5IGhlYWRlciBmaWxlcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjI0NTogY2hlY2tpbmcgUnVieSBoZWFkZXIgZmlsZXMiID4mNQorICAgICAgcnVieWhkcmRpcj1gJHZpX2N2X3BhdGhfcnVieSAtciBta21mIC1lICdwcmludCBDb25maWc6OkNPTkZJR1siYXJjaGRpciJdIHx8ICRoZHJkaXInIDI+L2Rldi9udWxsYAorICAgICAgaWYgdGVzdCAiWCRydWJ5aGRyZGlyIiAhPSAiWCI7IHRoZW4KKwllY2hvICIkYWNfdCIiJHJ1YnloZHJkaXIiIDE+JjYKKwlSVUJZX0NGTEFHUz0iLUkkcnVieWhkcmRpciIKKwlydWJ5bGlicz1gJHZpX2N2X3BhdGhfcnVieSAtciByYmNvbmZpZyAtZSAncHJpbnQgQ29uZmlnOjpDT05GSUdbIkxJQlMiXSdgCisJaWYgdGVzdCAiWCRydWJ5bGlicyIgIT0gIlgiOyB0aGVuCisJICBSVUJZX0xJQlM9IiRydWJ5bGlicyIKKwlmaQorCWxpYnJ1Ynlhcmc9YCR2aV9jdl9wYXRoX3J1YnkgLXIgcmJjb25maWcgLWUgJ3ByaW50IENvbmZpZy5leHBhbmQoQ29uZmlnOjpDT05GSUdbIkxJQlJVQllBUkciXSknYAorCWlmIHRlc3QgLWYgIiRydWJ5aGRyZGlyLyRsaWJydWJ5YXJnIjsgdGhlbgorCSAgbGlicnVieWFyZz0iJHJ1YnloZHJkaXIvJGxpYnJ1YnlhcmciCisJZWxzZQorCSAgcnVieWxpYmRpcj1gJHZpX2N2X3BhdGhfcnVieSAtciByYmNvbmZpZyAtZSAncHJpbnQgQ29uZmlnLmV4cGFuZChDb25maWc6OkNPTkZJR1sibGliZGlyIl0pJ2AKKwkgIGlmIHRlc3QgLWYgIiRydWJ5bGliZGlyLyRsaWJydWJ5YXJnIjsgdGhlbgorCSAgICBsaWJydWJ5YXJnPSIkcnVieWxpYmRpci8kbGlicnVieWFyZyIKKwkgIGVsaWYgdGVzdCAiJGxpYnJ1YnlhcmciID0gImxpYnJ1YnkuYSI7IHRoZW4KKwkgICAgCSAgICBsaWJydWJ5YXJnPSItbHJ1YnkiCisJICBlbHNlCisJICAgIGxpYnJ1Ynlhcmc9YCR2aV9jdl9wYXRoX3J1YnkgLXIgcmJjb25maWcgLWUgInByaW50ICckbGlicnVieWFyZycuZ3N1YigvLUxcLi8sICUnLUwje0NvbmZpZy5leHBhbmQoQ29uZmlnOjpDT05GSUdbXCJsaWJkaXJcIl0pfScpImAKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIlgkbGlicnVieWFyZyIgIT0gIlgiOyB0aGVuCisJICBSVUJZX0xJQlM9IiRsaWJydWJ5YXJnICRSVUJZX0xJQlMiCisJZmkKKwlydWJ5bGRmbGFncz1gJHZpX2N2X3BhdGhfcnVieSAtciByYmNvbmZpZyAtZSAncHJpbnQgQ29uZmlnOjpDT05GSUdbIkxERkxBR1MiXSdgCisJaWYgdGVzdCAiWCRydWJ5bGRmbGFncyIgIT0gIlgiOyB0aGVuCisJICBMREZMQUdTPSIkcnVieWxkZmxhZ3MgJExERkxBR1MiCisJZmkKKwlSVUJZX1NSQz0iaWZfcnVieS5jIgorCVJVQllfT0JKPSJvYmplY3RzL2lmX3J1YnkubyIKKwlSVUJZX1BSTz0iaWZfcnVieS5wcm8iCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEZFQVRfUlVCWSAxCitFT0YKKworICAgICAgZWxzZQorCWVjaG8gIiRhY190IiJub3QgZm91bmQiIDE+JjYKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiJGFjX3QiInRvbyBvbGQ7IG5lZWQgUnVieSB2ZXJzaW9uIDEuNi4wIG9yIGxhdGVyIiAxPiY2CisgICAgZmkKKyAgZmkKK2ZpCisKKworCisKKworCitlY2hvICRhY19uICJjaGVja2luZyAtLWVuYWJsZS1jc2NvcGUgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIyOTc6IGNoZWNraW5nIC0tZW5hYmxlLWNzY29wZSBhcmd1bWVudCIgPiY1CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY3Njb3BlIG9yIC0tZGlzYWJsZS1jc2NvcGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY3Njb3BlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9jc2NvcGUiCisgIDoKK2Vsc2UKKyAgZW5hYmxlX2NzY29wZT0ibm8iCitmaQorCitlY2hvICIkYWNfdCIiJGVuYWJsZV9jc2NvcGUiIDE+JjYKK2lmIHRlc3QgIiRlbmFibGVfY3Njb3BlIiA9ICJ5ZXMiOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBGRUFUX0NTQ09QRSAxCitFT0YKKworZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgLS1lbmFibGUtd29ya3Nob3AgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIzMTU6IGNoZWNraW5nIC0tZW5hYmxlLXdvcmtzaG9wIGFyZ3VtZW50IiA+JjUKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS13b3Jrc2hvcCBvciAtLWRpc2FibGUtd29ya3Nob3Agd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfd29ya3Nob3Arc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3dvcmtzaG9wIgorICA6CitlbHNlCisgIGVuYWJsZV93b3Jrc2hvcD0ibm8iCitmaQorCitlY2hvICIkYWNfdCIiJGVuYWJsZV93b3Jrc2hvcCIgMT4mNgoraWYgdGVzdCAiJGVuYWJsZV93b3Jrc2hvcCIgPSAieWVzIjsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgRkVBVF9TVU5fV09SS1NIT1AgMQorRU9GCisKKyAgV09SS1NIT1BfU1JDPSJ3b3Jrc2hvcC5jIGludGVncmF0aW9uLmMiCisgIAorICBXT1JLU0hPUF9PQko9Im9iamVjdHMvd29ya3Nob3AubyBvYmplY3RzL2ludGVncmF0aW9uLm8iCisgIAorICBpZiB0ZXN0ICIke2VuYWJsZV9ndWkteHh4fSIgPSB4eHg7IHRoZW4KKyAgICBlbmFibGVfZ3VpPW1vdGlmCisgIGZpCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyAtLWRpc2FibGUtbmV0YmVhbnMgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjIzNDA6IGNoZWNraW5nIC0tZGlzYWJsZS1uZXRiZWFucyBhcmd1bWVudCIgPiY1CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV0YmVhbnMgb3IgLS1kaXNhYmxlLW5ldGJlYW5zIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25ldGJlYW5zK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9uZXRiZWFucyIKKyAgOgorZWxzZQorICBlbmFibGVfbmV0YmVhbnM9InllcyIKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfbmV0YmVhbnMiID0gInllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHNvY2tldCBpbiAtbHNvY2tldCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjM1MjogY2hlY2tpbmcgZm9yIHNvY2tldCBpbiAtbHNvY2tldCIgPiY1CithY19saWJfdmFyPWBlY2hvIHNvY2tldCdfJ3NvY2tldCB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxzb2NrZXQgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjM2MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHNvY2tldCgpOworCitpbnQgbWFpbigpIHsKK3NvY2tldCgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjM3MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgICBhY190cl9saWI9SEFWRV9MSUJgZWNobyBzb2NrZXQgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKKyAgICAtZSAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfbGliIDEKK0VPRgorCisgIExJQlM9Ii1sc29ja2V0ICRMSUJTIgorCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjM5OTogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxuc2wiID4mNQorYWNfbGliX3Zhcj1gZWNobyBuc2wnXydnZXRob3N0YnluYW1lIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbG5zbCAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyNDA3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgZ2V0aG9zdGJ5bmFtZSgpOworCitpbnQgbWFpbigpIHsKK2dldGhvc3RieW5hbWUoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI0MTg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfbGliPUhBVkVfTElCYGVjaG8gbnNsIHwgc2VkIC1lICdzL1teYS16QS1aMC05X10vXy9nJyBcCisgICAgLWUgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ2AKKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGFjX3RyX2xpYiAxCitFT0YKKworICBMSUJTPSItbG5zbCAkTElCUyIKKworZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBjb21waWxpbmcgbmV0YmVhbnMgaW50ZWdyYXRpb24gaXMgcG9zc2libGUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI0NDY6IGNoZWNraW5nIHdoZXRoZXIgY29tcGlsaW5nIG5ldGJlYW5zIGludGVncmF0aW9uIGlzIHBvc3NpYmxlIiA+JjUKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjQ0OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisJLyogQ2hlY2sgYml0ZmllbGRzICovCisJc3RydWN0IG5iYnVmIHsKKwl1bnNpZ25lZCBpbnQgIGluaXREb25lOjE7CisJdXNob3J0IHNpZ25tYXBsZW47CisJfTsKKwkgICAgCitpbnQgbWFpbigpIHsKKworCQkvKiBDaGVjayBjcmVhdGluZyBhIHNvY2tldC4gKi8KKwkJc3RydWN0IHNvY2thZGRyX2luIHNlcnZlcjsKKwkJKHZvaWQpc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKwkJKHZvaWQpaHRvbnMoMTAwKTsKKwkJKHZvaWQpZ2V0aG9zdGJ5bmFtZSgibWljcm9zb2Z0LmNvbSIpOworCQlpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEKQorCQkgICh2b2lkKWNvbm5lY3QoMSwgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsIHNpemVvZihzZXJ2ZXIpKTsKKwkgICAgCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjQ3ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjY7IGVuYWJsZV9uZXRiZWFucz0ibm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitlbHNlCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKK2ZpCitpZiB0ZXN0ICIkZW5hYmxlX25ldGJlYW5zIiA9ICJ5ZXMiOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBGRUFUX05FVEJFQU5TX0lOVEcgMQorRU9GCisKKyAgTkVUQkVBTlNfU1JDPSJuZXRiZWFucy5jIgorICAKKyAgTkVUQkVBTlNfT0JKPSJvYmplY3RzL25ldGJlYW5zLm8iCisgIAorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgLS1lbmFibGUtc25pZmYgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI1MDM6IGNoZWNraW5nIC0tZW5hYmxlLXNuaWZmIGFyZ3VtZW50IiA+JjUKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zbmlmZiBvciAtLWRpc2FibGUtc25pZmYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc25pZmYrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3NuaWZmIgorICA6CitlbHNlCisgIGVuYWJsZV9zbmlmZj0ibm8iCitmaQorCitlY2hvICIkYWNfdCIiJGVuYWJsZV9zbmlmZiIgMT4mNgoraWYgdGVzdCAiJGVuYWJsZV9zbmlmZiIgPSAieWVzIjsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgRkVBVF9TTklGRiAxCitFT0YKKworICBTTklGRl9TUkM9ImlmX3NuaWZmLmMiCisgIAorICBTTklGRl9PQko9Im9iamVjdHMvaWZfc25pZmYubyIKKyAgCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyAtLWVuYWJsZS1tdWx0aWJ5dGUgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI1MjU6IGNoZWNraW5nIC0tZW5hYmxlLW11bHRpYnl0ZSBhcmd1bWVudCIgPiY1CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbXVsdGlieXRlIG9yIC0tZGlzYWJsZS1tdWx0aWJ5dGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbXVsdGlieXRlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9tdWx0aWJ5dGUiCisgIDoKK2Vsc2UKKyAgZW5hYmxlX211bHRpYnl0ZT0ibm8iCitmaQorCitlY2hvICIkYWNfdCIiJGVuYWJsZV9tdWx0aWJ5dGUiIDE+JjYKK2lmIHRlc3QgIiRlbmFibGVfbXVsdGlieXRlIiA9ICJ5ZXMiOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBGRUFUX01CWVRFIDEKK0VPRgorCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyAtLWVuYWJsZS1oYW5ndWxpbnB1dCBhcmd1bWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjU0MzogY2hlY2tpbmcgLS1lbmFibGUtaGFuZ3VsaW5wdXQgYXJndW1lbnQiID4mNQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWhhbmd1bGlucHV0IG9yIC0tZGlzYWJsZS1oYW5ndWxpbnB1dCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9oYW5ndWxpbnB1dCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfaGFuZ3VsaW5wdXQiCisgIDoKK2Vsc2UKKyAgZW5hYmxlX2hhbmd1bGlucHV0PSJubyIKK2ZpCisKK2VjaG8gIiRhY190IiIkZW5hYmxlX2hhbmd1bGlucHV0IiAxPiY2CisKK2VjaG8gJGFjX24gImNoZWNraW5nIC0tZW5hYmxlLXhpbSBhcmd1bWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjU1NTogY2hlY2tpbmcgLS1lbmFibGUteGltIGFyZ3VtZW50IiA+JjUKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS14aW0gb3IgLS1kaXNhYmxlLXhpbSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV94aW0rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3hpbSIKKyAgZWNobyAiJGFjX3QiIiRlbmFibGVfeGltIiAxPiY2CitlbHNlCisgIGVuYWJsZV94aW09ImF1dG8iOyBlY2hvICIkYWNfdCIiZGVmYXVsdGluZyB0byBhdXRvIiAxPiY2CitmaQorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIC0tZW5hYmxlLWZvbnRzZXQgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI1NjY6IGNoZWNraW5nIC0tZW5hYmxlLWZvbnRzZXQgYXJndW1lbnQiID4mNQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZvbnRzZXQgb3IgLS1kaXNhYmxlLWZvbnRzZXQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZm9udHNldCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZm9udHNldCIKKyAgOgorZWxzZQorICBlbmFibGVfZm9udHNldD0ibm8iCitmaQorCitlY2hvICIkYWNfdCIiJGVuYWJsZV9mb250c2V0IiAxPiY2CisKK3Rlc3QgLXogIiR3aXRoX3giICYmIHdpdGhfeD15ZXMKK3Rlc3QgIiR7ZW5hYmxlX2d1aS15ZXN9IiAhPSBubyAtYSAieCRNQUNPU1giICE9ICJ4eWVzIiAtYSAieCRRTlgiICE9ICJ4eWVzIiAmJiB3aXRoX3g9eWVzCitpZiB0ZXN0ICIkd2l0aF94IiA9IG5vOyB0aGVuCisgIGVjaG8gIiRhY190IiJkZWZhdWx0aW5nIHRvOiBkb24ndCBIQVZFX1gxMSIgMT4mNgorZWxzZQorICAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4bWttZiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgeG1rbWY7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjU4NjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX3hta21mcGF0aCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhc2UgIiR4bWttZnBhdGgiIGluCisgIC8qKQorICBhY19jdl9wYXRoX3hta21mcGF0aD0iJHhta21mcGF0aCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgID86LyopCQkJIAorICBhY19jdl9wYXRoX3hta21mcGF0aD0iJHhta21mcGF0aCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIGRvcyBwYXRoLgorICA7OworICAqKQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcGF0aF94bWttZnBhdGg9IiRhY19kaXIvJGFjX3dvcmQiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIDs7Citlc2FjCitmaQoreG1rbWZwYXRoPSIkYWNfY3ZfcGF0aF94bWttZnBhdGgiCitpZiB0ZXN0IC1uICIkeG1rbWZwYXRoIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJHhta21mcGF0aCIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKworICAjIElmIHdlIGZpbmQgWCwgc2V0IHNoZWxsIHZhcnMgeF9pbmNsdWRlcyBhbmQgeF9saWJyYXJpZXMgdG8gdGhlCisjIHBhdGhzLCBvdGhlcndpc2Ugc2V0IG5vX3g9eWVzLgorIyBVc2VzIGFjXyB2YXJzIGFzIHRlbXBzIHRvIGFsbG93IGNvbW1hbmQgbGluZSB0byBvdmVycmlkZSBjYWNoZSBhbmQgY2hlY2tzLgorIyAtLXdpdGhvdXQteCBvdmVycmlkZXMgZXZlcnl0aGluZyBlbHNlLCBidXQgZG9lcyBub3QgdG91Y2ggdGhlIGNhY2hlLgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI2MjQ6IGNoZWNraW5nIGZvciBYIiA+JjUKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC14IG9yIC0td2l0aG91dC14IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF94K3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3giCisgIDoKK2ZpCisKKyMgJGhhdmVfeCBpcyBgeWVzJywgYG5vJywgYGRpc2FibGVkJywgb3IgZW1wdHkgd2hlbiB3ZSBkbyBub3QgeWV0IGtub3cuCitpZiB0ZXN0ICJ4JHdpdGhfeCIgPSB4bm87IHRoZW4KKyAgIyBUaGUgdXNlciBleHBsaWNpdGx5IGRpc2FibGVkIFguCisgIGhhdmVfeD1kaXNhYmxlZAorZWxzZQorICBpZiB0ZXN0ICJ4JHhfaW5jbHVkZXMiICE9IHhOT05FICYmIHRlc3QgIngkeF9saWJyYXJpZXMiICE9IHhOT05FOyB0aGVuCisgICAgIyBCb3RoIHZhcmlhYmxlcyBhcmUgYWxyZWFkeSBzZXQuCisgICAgaGF2ZV94PXllcworICBlbHNlCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGF2ZV94JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgIyBPbmUgb3IgYm90aCBvZiB0aGUgdmFycyBhcmUgbm90IHNldCwgYW5kIHRoZXJlIGlzIG5vIGNhY2hlZCB2YWx1ZS4KK2FjX3hfaW5jbHVkZXM9Tk8gYWNfeF9saWJyYXJpZXM9Tk8KK3JtIC1mciBjb25mdGVzdGRpcgoraWYgbWtkaXIgY29uZnRlc3RkaXI7IHRoZW4KKyAgY2QgY29uZnRlc3RkaXIKKyAgIyBNYWtlIHN1cmUgdG8gbm90IHB1dCAibWFrZSIgaW4gdGhlIEltYWtlZmlsZSBydWxlcywgc2luY2Ugd2UgZ3JlcCBpdCBvdXQuCisgIGNhdCA+IEltYWtlZmlsZSA8PCdFT0YnCithY2ZpbmR4OgorCUBlY2hvICdhY19pbV9pbmNyb290PSIke0lOQ1JPT1R9IjsgYWNfaW1fdXNybGliZGlyPSIke1VTUkxJQkRJUn0iOyBhY19pbV9saWJkaXI9IiR7TElCRElSfSInCitFT0YKKyAgaWYgKHhta21mKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsICYmIHRlc3QgLWYgTWFrZWZpbGU7IHRoZW4KKyAgICAjIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KKyAgICBldmFsIGAke01BS0UtbWFrZX0gYWNmaW5keCAyPi9kZXYvbnVsbCB8IGdyZXAgLXYgbWFrZWAKKyAgICAjIE9wZW4gV2luZG93cyB4bWttZiByZXBvcnRlZGx5IHNldHMgTElCRElSIGluc3RlYWQgb2YgVVNSTElCRElSLgorICAgIGZvciBhY19leHRlbnNpb24gaW4gYSBzbyBzbDsgZG8KKyAgICAgIGlmIHRlc3QgISAtZiAkYWNfaW1fdXNybGliZGlyL2xpYlgxMS4kYWNfZXh0ZW5zaW9uICYmCisgICAgICAgIHRlc3QgLWYgJGFjX2ltX2xpYmRpci9saWJYMTEuJGFjX2V4dGVuc2lvbjsgdGhlbgorICAgICAgICBhY19pbV91c3JsaWJkaXI9JGFjX2ltX2xpYmRpcjsgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgICMgU2NyZWVuIG91dCBib2d1cyB2YWx1ZXMgZnJvbSB0aGUgaW1ha2UgY29uZmlndXJhdGlvbi4gIFRoZXkgYXJlCisgICAgIyBib2d1cyBib3RoIGJlY2F1c2UgdGhleSBhcmUgdGhlIGRlZmF1bHQgYW55d2F5LCBhbmQgYmVjYXVzZQorICAgICMgdXNpbmcgdGhlbSB3b3VsZCBicmVhayBnY2Mgb24gc3lzdGVtcyB3aGVyZSBpdCBuZWVkcyBmaXhlZCBpbmNsdWRlcy4KKyAgICBjYXNlICIkYWNfaW1faW5jcm9vdCIgaW4KKwkvdXNyL2luY2x1ZGUpIDs7CisJKikgdGVzdCAtZiAiJGFjX2ltX2luY3Jvb3QvWDExL1hvcy5oIiAmJiBhY194X2luY2x1ZGVzPSIkYWNfaW1faW5jcm9vdCIgOzsKKyAgICBlc2FjCisgICAgY2FzZSAiJGFjX2ltX3VzcmxpYmRpciIgaW4KKwkvdXNyL2xpYiB8IC9saWIpIDs7CisJKikgdGVzdCAtZCAiJGFjX2ltX3VzcmxpYmRpciIgJiYgYWNfeF9saWJyYXJpZXM9IiRhY19pbV91c3JsaWJkaXIiIDs7CisgICAgZXNhYworICBmaQorICBjZCAuLgorICBybSAtZnIgY29uZnRlc3RkaXIKK2ZpCisKK2lmIHRlc3QgIiRhY194X2luY2x1ZGVzIiA9IE5POyB0aGVuCisgICMgR3Vlc3Mgd2hlcmUgdG8gZmluZCBpbmNsdWRlIGZpbGVzLCBieSBsb29raW5nIGZvciB0aGlzIG9uZSBYMTEgLmggZmlsZS4KKyAgdGVzdCAteiAiJHhfZGlyZWN0X3Rlc3RfaW5jbHVkZSIgJiYgeF9kaXJlY3RfdGVzdF9pbmNsdWRlPVgxMS9JbnRyaW5zaWMuaAorCisgICMgRmlyc3QsIHRyeSB1c2luZyB0aGF0IGZpbGUgd2l0aCBubyBzcGVjaWFsIGRpcmVjdG9yeSBzcGVjaWZpZWQuCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyNjg2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwkeF9kaXJlY3RfdGVzdF9pbmNsdWRlPgorRU9GCithY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNjkxOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAoraWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICAjIFdlIGNhbiBjb21waWxlIHVzaW5nIFggaGVhZGVycyB3aXRoIG5vIHNwZWNpYWwgaW5jbHVkZSBkaXJlY3RvcnkuCithY194X2luY2x1ZGVzPQorZWxzZQorICBlY2hvICIkYWNfZXJyIiA+JjUKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgIyBMb29rIGZvciB0aGUgaGVhZGVyIGZpbGUgaW4gYSBzdGFuZGFyZCBzZXQgb2YgY29tbW9uIGRpcmVjdG9yaWVzLgorIyBDaGVjayBYMTEgYmVmb3JlIFgxMVJuIGJlY2F1c2UgaXQgaXMgb2Z0ZW4gYSBzeW1saW5rIHRvIHRoZSBjdXJyZW50IHJlbGVhc2UuCisgIGZvciBhY19kaXIgaW4gICAgICAgICAgICAgICBcCisgICAgL3Vzci9YMTEvaW5jbHVkZSAgICAgICAgICBcCisgICAgL3Vzci9YMTFSNi9pbmNsdWRlICAgICAgICBcCisgICAgL3Vzci9YMTFSNS9pbmNsdWRlICAgICAgICBcCisgICAgL3Vzci9YMTFSNC9pbmNsdWRlICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9pbmNsdWRlL1gxMSAgICAgICAgICBcCisgICAgL3Vzci9pbmNsdWRlL1gxMVI2ICAgICAgICBcCisgICAgL3Vzci9pbmNsdWRlL1gxMVI1ICAgICAgICBcCisgICAgL3Vzci9pbmNsdWRlL1gxMVI0ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9sb2NhbC9YMTEvaW5jbHVkZSAgICBcCisgICAgL3Vzci9sb2NhbC9YMTFSNi9pbmNsdWRlICBcCisgICAgL3Vzci9sb2NhbC9YMTFSNS9pbmNsdWRlICBcCisgICAgL3Vzci9sb2NhbC9YMTFSNC9pbmNsdWRlICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9sb2NhbC9pbmNsdWRlL1gxMSAgICBcCisgICAgL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI2ICBcCisgICAgL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI1ICBcCisgICAgL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI0ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9YMzg2L2luY2x1ZGUgICAgICAgICBcCisgICAgL3Vzci94Mzg2L2luY2x1ZGUgICAgICAgICBcCisgICAgL3Vzci9YRnJlZTg2L2luY2x1ZGUvWDExICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9pbmNsdWRlICAgICAgICAgICAgICBcCisgICAgL3Vzci9sb2NhbC9pbmNsdWRlICAgICAgICBcCisgICAgL3Vzci91bnN1cHBvcnRlZC9pbmNsdWRlICBcCisgICAgL3Vzci9hdGhlbmEvaW5jbHVkZSAgICAgICBcCisgICAgL3Vzci9sb2NhbC94MTFyNS9pbmNsdWRlICBcCisgICAgL3Vzci9scHAvWGFtcGxlcy9pbmNsdWRlICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9vcGVud2luL2luY2x1ZGUgICAgICBcCisgICAgL3Vzci9vcGVud2luL3NoYXJlL2luY2x1ZGUgXAorICAgIDsgXAorICBkbworICAgIGlmIHRlc3QgLXIgIiRhY19kaXIvJHhfZGlyZWN0X3Rlc3RfaW5jbHVkZSI7IHRoZW4KKyAgICAgIGFjX3hfaW5jbHVkZXM9JGFjX2RpcgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCitmaQorcm0gLWYgY29uZnRlc3QqCitmaSAjICRhY194X2luY2x1ZGVzID0gTk8KKworaWYgdGVzdCAiJGFjX3hfbGlicmFyaWVzIiA9IE5POyB0aGVuCisgICMgQ2hlY2sgZm9yIHRoZSBsaWJyYXJpZXMuCisKKyAgdGVzdCAteiAiJHhfZGlyZWN0X3Rlc3RfbGlicmFyeSIgJiYgeF9kaXJlY3RfdGVzdF9saWJyYXJ5PVh0CisgIHRlc3QgLXogIiR4X2RpcmVjdF90ZXN0X2Z1bmN0aW9uIiAmJiB4X2RpcmVjdF90ZXN0X2Z1bmN0aW9uPVh0TWFsbG9jCisKKyAgIyBTZWUgaWYgd2UgZmluZCB0aGVtIHdpdGhvdXQgYW55IHNwZWNpYWwgb3B0aW9ucy4KKyAgIyBEb24ndCBhZGQgdG8gJExJQlMgcGVybWFuZW50bHkuCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCisgIExJQlM9Ii1sJHhfZGlyZWN0X3Rlc3RfbGlicmFyeSAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDI3NjAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKKyR7eF9kaXJlY3RfdGVzdF9mdW5jdGlvbn0oKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI3Njc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIExJQlM9IiRhY19zYXZlX0xJQlMiCisjIFdlIGNhbiBsaW5rIFggcHJvZ3JhbXMgd2l0aCBubyBzcGVjaWFsIGxpYnJhcnkgcGF0aC4KK2FjX3hfbGlicmFyaWVzPQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorIyBGaXJzdCBzZWUgaWYgcmVwbGFjaW5nIHRoZSBpbmNsdWRlIGJ5IGxpYiB3b3Jrcy4KKyMgQ2hlY2sgWDExIGJlZm9yZSBYMTFSbiBiZWNhdXNlIGl0IGlzIG9mdGVuIGEgc3ltbGluayB0byB0aGUgY3VycmVudCByZWxlYXNlLgorZm9yIGFjX2RpciBpbiBgZWNobyAiJGFjX3hfaW5jbHVkZXMiIHwgc2VkIHMvaW5jbHVkZS9saWIvYCBcCisgICAgL3Vzci9YMTEvbGliICAgICAgICAgIFwKKyAgICAvdXNyL1gxMVI2L2xpYiAgICAgICAgXAorICAgIC91c3IvWDExUjUvbGliICAgICAgICBcCisgICAgL3Vzci9YMTFSNC9saWIgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC91c3IvbGliL1gxMSAgICAgICAgICBcCisgICAgL3Vzci9saWIvWDExUjYgICAgICAgIFwKKyAgICAvdXNyL2xpYi9YMTFSNSAgICAgICAgXAorICAgIC91c3IvbGliL1gxMVI0ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL2xvY2FsL1gxMS9saWIgICAgXAorICAgIC91c3IvbG9jYWwvWDExUjYvbGliICBcCisgICAgL3Vzci9sb2NhbC9YMTFSNS9saWIgIFwKKyAgICAvdXNyL2xvY2FsL1gxMVI0L2xpYiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9sb2NhbC9saWIvWDExICAgIFwKKyAgICAvdXNyL2xvY2FsL2xpYi9YMTFSNiAgXAorICAgIC91c3IvbG9jYWwvbGliL1gxMVI1ICBcCisgICAgL3Vzci9sb2NhbC9saWIvWDExUjQgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC91c3IvWDM4Ni9saWIgICAgICAgICBcCisgICAgL3Vzci94Mzg2L2xpYiAgICAgICAgIFwKKyAgICAvdXNyL1hGcmVlODYvbGliL1gxMSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9saWIgICAgICAgICAgICAgIFwKKyAgICAvdXNyL2xvY2FsL2xpYiAgICAgICAgXAorICAgIC91c3IvdW5zdXBwb3J0ZWQvbGliICBcCisgICAgL3Vzci9hdGhlbmEvbGliICAgICAgIFwKKyAgICAvdXNyL2xvY2FsL3gxMXI1L2xpYiAgXAorICAgIC91c3IvbHBwL1hhbXBsZXMvbGliICBcCisgICAgL2xpYi91c3IvbGliL1gxMQkgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC91c3Ivb3Blbndpbi9saWIgICAgICBcCisgICAgL3Vzci9vcGVud2luL3NoYXJlL2xpYiBcCisgICAgOyBcCitkbworICBmb3IgYWNfZXh0ZW5zaW9uIGluIGEgc28gc2w7IGRvCisgICAgaWYgdGVzdCAtciAkYWNfZGlyL2xpYiR7eF9kaXJlY3RfdGVzdF9saWJyYXJ5fS4kYWNfZXh0ZW5zaW9uOyB0aGVuCisgICAgICBhY194X2xpYnJhcmllcz0kYWNfZGlyCisgICAgICBicmVhayAyCisgICAgZmkKKyAgZG9uZQorZG9uZQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkgIyAkYWNfeF9saWJyYXJpZXMgPSBOTworCitpZiB0ZXN0ICIkYWNfeF9pbmNsdWRlcyIgPSBOTyB8fCB0ZXN0ICIkYWNfeF9saWJyYXJpZXMiID0gTk87IHRoZW4KKyAgIyBEaWRuJ3QgZmluZCBYIGFueXdoZXJlLiAgQ2FjaGUgdGhlIGtub3duIGFic2VuY2Ugb2YgWC4KKyAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9bm8iCitlbHNlCisgICMgUmVjb3JkIHdoZXJlIHdlIGZvdW5kIFggZm9yIHRoZSBjYWNoZS4KKyAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9eWVzIFwKKwkgICAgICAgIGFjX3hfaW5jbHVkZXM9JGFjX3hfaW5jbHVkZXMgYWNfeF9saWJyYXJpZXM9JGFjX3hfbGlicmFyaWVzIgorZmkKK2ZpCisgIGZpCisgIGV2YWwgIiRhY19jdl9oYXZlX3giCitmaSAjICR3aXRoX3ggIT0gbm8KKworaWYgdGVzdCAiJGhhdmVfeCIgIT0geWVzOyB0aGVuCisgIGVjaG8gIiRhY190IiIkaGF2ZV94IiAxPiY2CisgIG5vX3g9eWVzCitlbHNlCisgICMgSWYgZWFjaCBvZiB0aGUgdmFsdWVzIHdhcyBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdCBvdmVycmlkZXMgZWFjaCBndWVzcy4KKyAgdGVzdCAieCR4X2luY2x1ZGVzIiA9IHhOT05FICYmIHhfaW5jbHVkZXM9JGFjX3hfaW5jbHVkZXMKKyAgdGVzdCAieCR4X2xpYnJhcmllcyIgPSB4Tk9ORSAmJiB4X2xpYnJhcmllcz0kYWNfeF9saWJyYXJpZXMKKyAgIyBVcGRhdGUgdGhlIGNhY2hlIHZhbHVlIHRvIHJlZmxlY3QgdGhlIGNvbW1hbmQgbGluZSB2YWx1ZXMuCisgIGFjX2N2X2hhdmVfeD0iaGF2ZV94PXllcyBcCisJCWFjX3hfaW5jbHVkZXM9JHhfaW5jbHVkZXMgYWNfeF9saWJyYXJpZXM9JHhfbGlicmFyaWVzIgorICBlY2hvICIkYWNfdCIibGlicmFyaWVzICR4X2xpYnJhcmllcywgaGVhZGVycyAkeF9pbmNsdWRlcyIgMT4mNgorZmkKKworaWYgdGVzdCAiJG5vX3giID0geWVzOyB0aGVuCisgICMgTm90IGFsbCBwcm9ncmFtcyBtYXkgdXNlIHRoaXMgc3ltYm9sLCBidXQgaXQgZG9lcyBub3QgaHVydCB0byBkZWZpbmUgaXQuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBYX0RJU1BMQVlfTUlTU0lORyAxCitFT0YKKworICBYX0NGTEFHUz0gWF9QUkVfTElCUz0gWF9MSUJTPSBYX0VYVFJBX0xJQlM9CitlbHNlCisgIGlmIHRlc3QgLW4gIiR4X2luY2x1ZGVzIjsgdGhlbgorICAgIFhfQ0ZMQUdTPSIkWF9DRkxBR1MgLUkkeF9pbmNsdWRlcyIKKyAgZmkKKworICAjIEl0IHdvdWxkIGFsc28gYmUgbmljZSB0byBkbyB0aGlzIGZvciBhbGwgLUwgb3B0aW9ucywgbm90IGp1c3QgdGhpcyBvbmUuCisgIGlmIHRlc3QgLW4gIiR4X2xpYnJhcmllcyI7IHRoZW4KKyAgICBYX0xJQlM9IiRYX0xJQlMgLUwkeF9saWJyYXJpZXMiCisgICAgIyBGb3IgU29sYXJpczsgc29tZSB2ZXJzaW9ucyBvZiBTdW4gQ0MgcmVxdWlyZSBhIHNwYWNlIGFmdGVyIC1SIGFuZAorICAgICMgb3RoZXJzIHJlcXVpcmUgbm8gc3BhY2UuICBXb3JkcyBhcmUgbm90IHN1ZmZpY2llbnQgLiAuIC4gLgorICAgIGNhc2UgImAodW5hbWUgLXNyKSAyPi9kZXYvbnVsbGAiIGluCisgICAgIlN1bk9TIDUiKikKKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgLVIgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyODczOiBjaGVja2luZyB3aGV0aGVyIC1SIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzcGFjZSIgPiY1CisgICAgICBhY194c2F2ZV9MSUJTPSIkTElCUyI7IExJQlM9IiRMSUJTIC1SJHhfbGlicmFyaWVzIgorICAgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjg3NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjg4MzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfUl9ub3NwYWNlPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19SX25vc3BhY2U9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgICAgIGlmIHRlc3QgJGFjX1Jfbm9zcGFjZSA9IHllczsgdGhlbgorCWVjaG8gIiRhY190IiJubyIgMT4mNgorCVhfTElCUz0iJFhfTElCUyAtUiR4X2xpYnJhcmllcyIKKyAgICAgIGVsc2UKKwlMSUJTPSIkYWNfeHNhdmVfTElCUyAtUiAkeF9saWJyYXJpZXMiCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjg5OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjkwNjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfUl9zcGFjZT15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfUl9zcGFjZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCWlmIHRlc3QgJGFjX1Jfc3BhY2UgPSB5ZXM7IHRoZW4KKwkgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKwkgIFhfTElCUz0iJFhfTElCUyAtUiAkeF9saWJyYXJpZXMiCisJZWxzZQorCSAgZWNobyAiJGFjX3QiIm5laXRoZXIgd29ya3MiIDE+JjYKKwlmaQorICAgICAgZmkKKyAgICAgIExJQlM9IiRhY194c2F2ZV9MSUJTIgorICAgIGVzYWMKKyAgZmkKKworICAjIENoZWNrIGZvciBzeXN0ZW0tZGVwZW5kZW50IGxpYnJhcmllcyBYIHByb2dyYW1zIG11c3QgbGluayB3aXRoLgorICAjIERvIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciB0aGUgc3lzdGVtLWluZGVwZW5kZW50IFI2IGxpYnJhcmllcworICAjICgtbElDRSksIHNpbmNlIHdlIG1heSBuZWVkIC1sc29ja2V0IG9yIHdoYXRldmVyIGZvciBYIGxpbmtpbmcuCisKKyAgaWYgdGVzdCAiJElTQyIgPSB5ZXM7IHRoZW4KKyAgICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxuc2xfcyAtbGluZXQiCisgIGVsc2UKKyAgICAjIE1hcnR5bi5Kb2huc29uQGNsLmNhbS5hYy51ayBzYXlzIHRoaXMgaXMgbmVlZGVkIGZvciBVbHRyaXgsIGlmIHRoZSBYCisgICAgIyBsaWJyYXJpZXMgd2VyZSBidWlsdCB3aXRoIERFQ25ldCBzdXBwb3J0LiAgQW5kIGthcmxAY3MudW1iLmVkdSBzYXlzCisgICAgIyB0aGUgQWxwaGEgbmVlZHMgZG5ldF9zdHViIChkbmV0IGRvZXMgbm90IGV4aXN0KS4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZG5ldF9udG9hIGluIC1sZG5ldCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjkzODogY2hlY2tpbmcgZm9yIGRuZXRfbnRvYSBpbiAtbGRuZXQiID4mNQorYWNfbGliX3Zhcj1gZWNobyBkbmV0J18nZG5ldF9udG9hIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGRuZXQgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjk0NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGRuZXRfbnRvYSgpOworCitpbnQgbWFpbigpIHsKK2RuZXRfbnRvYSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjk1NzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sZG5ldCIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfbGliX2RuZXRfZG5ldF9udG9hID0gbm87IHRoZW4KKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBkbmV0X250b2EgaW4gLWxkbmV0X3N0dWIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI5Nzk6IGNoZWNraW5nIGZvciBkbmV0X250b2EgaW4gLWxkbmV0X3N0dWIiID4mNQorYWNfbGliX3Zhcj1gZWNobyBkbmV0X3N0dWInXydkbmV0X250b2EgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sZG5ldF9zdHViICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDI5ODcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBkbmV0X250b2EoKTsKKworaW50IG1haW4oKSB7CitkbmV0X250b2EoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI5OTg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbGRuZXRfc3R1YiIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgZmkKKworICAgICMgbXNoQGNpcy51ZmwuZWR1IHNheXMgLWxuc2wgKGFuZCAtbHNvY2tldCkgYXJlIG5lZWRlZCBmb3IgaGlzIDM4Ni9BVCwKKyAgICAjIHRvIGdldCB0aGUgU3lzViB0cmFuc3BvcnQgZnVuY3Rpb25zLgorICAgICMgY2hhZEBhbmFzYXppLmNvbSBzYXlzIHRoZSBQeXJhbWlzIE1JUy1FUyBydW5uaW5nIERDL09TeCAoU1ZSNCkKKyAgICAjIG5lZWRzIC1sbnNsLgorICAgICMgVGhlIG5zbCBsaWJyYXJ5IHByZXZlbnRzIHByb2dyYW1zIGZyb20gb3BlbmluZyB0aGUgWCBkaXNwbGF5CisgICAgIyBvbiBJcml4IDUuMiwgYWNjb3JkaW5nIHRvIGRpY2tleUBjbGFyay5uZXQuCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMwMjc6IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX2dldGhvc3RieW5hbWUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzMDMyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGdldGhvc3RieW5hbWUoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBnZXRob3N0YnluYW1lKCk7CisKK2ludCBtYWluKCkgeworCisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfZ2V0aG9zdGJ5bmFtZSkgfHwgZGVmaW5lZCAoX19zdHViX19fZ2V0aG9zdGJ5bmFtZSkKK2Nob2tlIG1lCisjZWxzZQorZ2V0aG9zdGJ5bmFtZSgpOworI2VuZGlmCisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDU1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXydnZXRob3N0YnluYW1lYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIDoKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lID0gbm87IHRoZW4KKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sbnNsIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozMDc2OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbCIgPiY1CithY19saWJfdmFyPWBlY2hvIG5zbCdfJ2dldGhvc3RieW5hbWUgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sbnNsICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMwODQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBnZXRob3N0YnluYW1lKCk7CisKK2ludCBtYWluKCkgeworZ2V0aG9zdGJ5bmFtZSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzA5NTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sbnNsIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBmaQorCisgICAgIyBsaWVkZXJAc2t5bGVyLm1hdmQuaG9uZXl3ZWxsLmNvbSBzYXlzIHdpdGhvdXQgLWxzb2NrZXQsCisgICAgIyBzb2NrZXQvc2V0c29ja29wdCBhbmQgb3RoZXIgcm91dGluZXMgYXJlIHVuZGVmaW5lZCB1bmRlciBTQ08gT0RUCisgICAgIyAyLjAuICBCdXQgLWxzb2NrZXQgaXMgYnJva2VuIG9uIElSSVggNS4yIChhbmQgaXMgbm90IG5lY2Vzc2FyeQorICAgICMgb24gbGF0ZXIgdmVyc2lvbnMpLCBzYXlzIHNpbW9uQGxpYS5kaS5lcGZsLmNoOiBpdCBjb250YWlucworICAgICMgZ2V0aG9zdGJ5KiB2YXJpYW50cyB0aGF0IGRvbid0IHVzZSB0aGUgbmFtZXNlcnZlciAob3Igc29tZXRoaW5nKS4KKyAgICAjIC1sc29ja2V0IG11c3QgYmUgZ2l2ZW4gYmVmb3JlIC1sbnNsIGlmIGJvdGggYXJlIG5lZWRlZC4KKyAgICAjIFdlIGFzc3VtZSB0aGF0IGlmIGNvbm5lY3QgbmVlZHMgLWxuc2wsIHNvIGRvZXMgZ2V0aG9zdGJ5bmFtZS4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgY29ubmVjdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzEyNTogY2hlY2tpbmcgZm9yIGNvbm5lY3QiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfY29ubmVjdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMxMzAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgY29ubmVjdCgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGNvbm5lY3QoKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9jb25uZWN0KSB8fCBkZWZpbmVkIChfX3N0dWJfX19jb25uZWN0KQorY2hva2UgbWUKKyNlbHNlCitjb25uZWN0KCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMxNTM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfY29ubmVjdD15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfY29ubmVjdD1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ2Nvbm5lY3RgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgOgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Nvbm5lY3QgPSBubzsgdGhlbgorICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGNvbm5lY3QgaW4gLWxzb2NrZXQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMxNzQ6IGNoZWNraW5nIGZvciBjb25uZWN0IGluIC1sc29ja2V0IiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gc29ja2V0J18nY29ubmVjdCB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxzb2NrZXQgJFhfRVhUUkFfTElCUyAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMxODIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBjb25uZWN0KCk7CisKK2ludCBtYWluKCkgeworY29ubmVjdCgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzE5MzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSItbHNvY2tldCAkWF9FWFRSQV9MSUJTIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBmaQorCisgICAgIyBnb21lekBtaS51bmktZXJsYW5nZW4uZGUgc2F5cyAtbHBvc2l4IGlzIG5lY2Vzc2FyeSBvbiBBL1VYLgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciByZW1vdmUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMyMTc6IGNoZWNraW5nIGZvciByZW1vdmUiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfcmVtb3ZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzIyMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciByZW1vdmUoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciByZW1vdmUoKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9yZW1vdmUpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX3JlbW92ZSkKK2Nob2tlIG1lCisjZWxzZQorcmVtb3ZlKCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMyNDU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfcmVtb3ZlPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19yZW1vdmU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXydyZW1vdmVgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgOgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JlbW92ZSA9IG5vOyB0aGVuCisgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgcmVtb3ZlIGluIC1scG9zaXgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMyNjY6IGNoZWNraW5nIGZvciByZW1vdmUgaW4gLWxwb3NpeCIgPiY1CithY19saWJfdmFyPWBlY2hvIHBvc2l4J18ncmVtb3ZlIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbHBvc2l4ICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMyNzQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciByZW1vdmUoKTsKKworaW50IG1haW4oKSB7CityZW1vdmUoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMyODU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbHBvc2l4IgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBmaQorCisgICAgIyBCU0RJIEJTRC9PUyAyLjEgbmVlZHMgLWxpcGMgZm9yIFhPcGVuRGlzcGxheS4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc2htYXQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMzMDk6IGNoZWNraW5nIGZvciBzaG1hdCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19zaG1hdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMzMTQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgc2htYXQoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBzaG1hdCgpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX3NobWF0KSB8fCBkZWZpbmVkIChfX3N0dWJfX19zaG1hdCkKK2Nob2tlIG1lCisjZWxzZQorc2htYXQoKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzMzNzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19zaG1hdD15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfc2htYXQ9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXydzaG1hdGBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICA6CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc2htYXQgPSBubzsgdGhlbgorICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHNobWF0IGluIC1saXBjIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozMzU4OiBjaGVja2luZyBmb3Igc2htYXQgaW4gLWxpcGMiID4mNQorYWNfbGliX3Zhcj1gZWNobyBpcGMnXydzaG1hdCB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxpcGMgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzM2NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHNobWF0KCk7CisKK2ludCBtYWluKCkgeworc2htYXQoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMzNzc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbGlwYyIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgZmkKKyAgZmkKKworICAjIENoZWNrIGZvciBsaWJyYXJpZXMgdGhhdCBYMTFSNiBYdC9YYXcgcHJvZ3JhbXMgbmVlZC4KKyAgYWNfc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgdGVzdCAtbiAiJHhfbGlicmFyaWVzIiAmJiBMREZMQUdTPSIkTERGTEFHUyAtTCR4X2xpYnJhcmllcyIKKyAgIyBTTSBuZWVkcyBJQ0UgdG8gKGR5bmFtaWNhbGx5KSBsaW5rIHVuZGVyIFN1bk9TIDQueCAoc28gd2UgaGF2ZSB0bworICAjIGNoZWNrIGZvciBJQ0UgZmlyc3QpLCBidXQgd2UgbXVzdCBsaW5rIGluIHRoZSBvcmRlciAtbFNNIC1sSUNFIG9yCisgICMgd2UgZ2V0IHVuZGVmaW5lZCBzeW1ib2xzLiAgU28gYXNzdW1lIHdlIGhhdmUgU00gaWYgd2UgaGF2ZSBJQ0UuCisgICMgVGhlc2UgaGF2ZSB0byBiZSBsaW5rZWQgd2l0aCBiZWZvcmUgLWxYMTEsIHVubGlrZSB0aGUgb3RoZXIKKyAgIyBsaWJyYXJpZXMgd2UgY2hlY2sgZm9yIGJlbG93LCBzbyB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUuCisgICMgIC0taW50ZXJyYW5AdWx1cnUuU3RhbmZvcmQuRURVLCBrYkBjcy51bWIuZWR1LgorICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgSWNlQ29ubmVjdGlvbk51bWJlciBpbiAtbElDRSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzQxMDogY2hlY2tpbmcgZm9yIEljZUNvbm5lY3Rpb25OdW1iZXIgaW4gLWxJQ0UiID4mNQorYWNfbGliX3Zhcj1gZWNobyBJQ0UnXydJY2VDb25uZWN0aW9uTnVtYmVyIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbElDRSAkWF9FWFRSQV9MSUJTICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzQxOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIEljZUNvbm5lY3Rpb25OdW1iZXIoKTsKKworaW50IG1haW4oKSB7CitJY2VDb25uZWN0aW9uTnVtYmVyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNDI5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBYX1BSRV9MSUJTPSIkWF9QUkVfTElCUyAtbFNNIC1sSUNFIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgTERGTEFHUz0iJGFjX3NhdmVfTERGTEFHUyIKKworZmkKKworCisgICAgICAgIGlmIHRlc3QgIiRPUzM5MFVuaXgiID0gInllcyI7IHRoZW4KKyAgICBDRkxBR1M9IiRDRkxBR1MgLVcgYyxkbGwiCisgICAgTERGTEFHUz0iJExERkxBR1MgLVcgbCxkbGwiCisgICAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sU00gLWxJQ0UgLWxYbXUiCisgIGZpCisKKyAgICAKKyAgaWYgdGVzdCAtZCAiJHhfaW5jbHVkZXMiICYmIHRlc3QgISAtZCAiJHhfbGlicmFyaWVzIjsgdGhlbgorICAgIHhfbGlicmFyaWVzPWBlY2hvICIkeF9pbmNsdWRlcyIgfCBzZWQgcy9pbmNsdWRlL2xpYi9gCisgICAgZWNobyAiJGFjX3QiIkNvcnJlY3RlZCBYIGxpYnJhcmllcyB0byAkeF9saWJyYXJpZXMiIDE+JjYKKyAgICBYX0xJQlM9IiRYX0xJQlMgLUwkeF9saWJyYXJpZXMiCisgICAgaWYgdGVzdCAiYCh1bmFtZSkgMj4vZGV2L251bGxgIiA9IFN1bk9TICYmCisJCQkJCSB1bmFtZSAtciB8IGdyZXAgJ141JyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBYX0xJQlM9IiRYX0xJQlMgLVIgJHhfbGlicmFyaWVzIgorICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAtZCAiJHhfbGlicmFyaWVzIiAmJiB0ZXN0ICEgLWQgIiR4X2luY2x1ZGVzIjsgdGhlbgorICAgIHhfaW5jbHVkZXM9YGVjaG8gIiR4X2xpYnJhcmllcyIgfCBzZWQgcy9saWIvaW5jbHVkZS9gCisgICAgZWNobyAiJGFjX3QiIkNvcnJlY3RlZCBYIGluY2x1ZGVzIHRvICR4X2luY2x1ZGVzIiAxPiY2CisgICAgWF9DRkxBR1M9IiRYX0NGTEFHUyAtSSR4X2luY2x1ZGVzIgorICBmaQorCisgICAgWF9DRkxBR1M9ImBlY2hvICRYX0NGTEFHU1wgIHwgc2VkICdzJS1JL3Vzci9pbmNsdWRlICUlJ2AiCisgICAgWF9MSUJTPSJgZWNobyAkWF9MSUJTXCAgfCBzZWQgJ3MlLUwvdXNyL2xpYiAlJSdgIgorICAgIFhfTElCUz0iYGVjaG8gJFhfTElCU1wgIHwgc2VkIC1lICdzJS1SL3Vzci9saWIgJSUnIC1lICdzJS1SIC91c3IvbGliICUlJ2AiCisKKworICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgWDExIGhlYWRlciBmaWxlcyBjYW4gYmUgZm91bmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM0ODM6IGNoZWNraW5nIGlmIFgxMSBoZWFkZXIgZmlsZXMgY2FuIGJlIGZvdW5kIiA+JjUKKyAgY2ZsYWdzX3NhdmU9JENGTEFHUworICBDRkxBR1M9IiRDRkxBR1MgJFhfQ0ZMQUdTIgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzNDg3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgoraW50IG1haW4oKSB7CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNDk0OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjY7IG5vX3g9eWVzCitmaQorcm0gLWYgY29uZnRlc3QqCisgIENGTEFHUz0kY2ZsYWdzX3NhdmUKKworICBpZiB0ZXN0ICIke25vX3gtbm99IiA9IHllczsgdGhlbgorICAgIHdpdGhfeD1ubworICBlbHNlCisgICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfWDExIDEKK0VPRgorCisgICAgWF9MSUI9Ii1sWHQgLWxYMTEiOworICAgIAorCisgICAgYWNfc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICBMREZMQUdTPSItTCR4X2xpYnJhcmllcyAkTERGTEFHUyIKKworICAgICAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIF9YZG1jcEF1dGhEb0l0IGluIC1sWGRtY3AiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM1MjA6IGNoZWNraW5nIGZvciBfWGRtY3BBdXRoRG9JdCBpbiAtbFhkbWNwIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gWGRtY3AnXydfWGRtY3BBdXRoRG9JdCB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxYZG1jcCAtbFh0ICRYX1BSRV9MSUJTIC1sWDExICRYX0VYVFJBX0xJQlMgLWxYZG1jcCAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM1MjggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBfWGRtY3BBdXRoRG9JdCgpOworCitpbnQgbWFpbigpIHsKK19YZG1jcEF1dGhEb0l0KCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNTM5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxYZG1jcCIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisKKyAgICAgICAgICAgICAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEljZU9wZW5Db25uZWN0aW9uIGluIC1sSUNFIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozNTYxOiBjaGVja2luZyBmb3IgSWNlT3BlbkNvbm5lY3Rpb24gaW4gLWxJQ0UiID4mNQorYWNfbGliX3Zhcj1gZWNobyBJQ0UnXydJY2VPcGVuQ29ubmVjdGlvbiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxJQ0UgJFhfRVhUUkFfTElCUyAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM1NjkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBJY2VPcGVuQ29ubmVjdGlvbigpOworCitpbnQgbWFpbigpIHsKK0ljZU9wZW5Db25uZWN0aW9uKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNTgwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxTTSAtbElDRSIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisKKyAgICAgICAgTERGTEFHUz0iJFhfTElCUyAkYWNfc2F2ZV9MREZMQUdTIgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBYcG1DcmVhdGVQaXhtYXBGcm9tRGF0YSBpbiAtbFhwbSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzYwMzogY2hlY2tpbmcgZm9yIFhwbUNyZWF0ZVBpeG1hcEZyb21EYXRhIGluIC1sWHBtIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gWHBtJ18nWHBtQ3JlYXRlUGl4bWFwRnJvbURhdGEgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sWHBtIC1sWHQgJFhfUFJFX0xJQlMgLWxYcG0gLWxYMTEgJFhfRVhUUkFfTElCUyAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM2MTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBYcG1DcmVhdGVQaXhtYXBGcm9tRGF0YSgpOworCitpbnQgbWFpbigpIHsKK1hwbUNyZWF0ZVBpeG1hcEZyb21EYXRhKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNjIyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBYX1BSRV9MSUJTPSIkWF9QUkVfTElCUyAtbFhwbSIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisKKyAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgWDExIGhlYWRlciBmaWxlcyBpbXBsaWNpdGx5IGRlY2xhcmUgcmV0dXJuIHZhbHVlcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzY0NDogY2hlY2tpbmcgaWYgWDExIGhlYWRlciBmaWxlcyBpbXBsaWNpdGx5IGRlY2xhcmUgcmV0dXJuIHZhbHVlcyIgPiY1CisgICAgY2ZsYWdzX3NhdmU9JENGTEFHUworICAgIENGTEFHUz0iJENGTEFHUyAkWF9DRkxBR1MgLVdlcnJvciIKKyAgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzNjQ4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgoraW50IG1haW4oKSB7CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNjU1OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIENGTEFHUz0iJENGTEFHUyAtV25vLWltcGxpY2l0LWludCIKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzNjY0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgoraW50IG1haW4oKSB7CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNjcxOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2ZsYWdzX3NhdmU9IiRjZmxhZ3Nfc2F2ZSAtV25vLWltcGxpY2l0LWludCIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInRlc3QgZmFpbGVkIiAxPiY2CisJCitmaQorcm0gLWYgY29uZnRlc3QqCisgICAgCitmaQorcm0gLWYgY29uZnRlc3QqCisgICAgQ0ZMQUdTPSRjZmxhZ3Nfc2F2ZQorCisgICAgTERGTEFHUz0iJGFjX3NhdmVfTERGTEFHUyIKKworICBmaQorZmkKKwordGVzdCAieCR3aXRoX3giID0geG5vIC1hICJ4JEJFT1MiICE9ICJ4eWVzIiAtYSAieCRNQUNPU1giICE9ICJ4eWVzIiAtYSAieCRRTlgiICE9ICJ4eWVzIiAmJiBlbmFibGVfZ3VpPW5vCisKK2VjaG8gJGFjX24gImNoZWNraW5nIC0tZW5hYmxlLWd1aSBhcmd1bWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzY5NTogY2hlY2tpbmcgLS1lbmFibGUtZ3VpIGFyZ3VtZW50IiA+JjUKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ndWkgb3IgLS1kaXNhYmxlLWd1aSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ndWkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2d1aSIKKyAgOgorZWxzZQorICBlbmFibGVfZ3VpPSJhdXRvIgorZmkKKworCitlbmFibGVfZ3VpX2Nhbm9uPWBlY2hvICJfJGVuYWJsZV9ndWkiIHwgXAorCXNlZCAncy9bIF8rLV0vL2c7eS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorCitTS0lQX0dUSz1ZRVMKK1NLSVBfR1RLMj1ZRVMKK1NLSVBfR05PTUU9WUVTCitTS0lQX01PVElGPVlFUworU0tJUF9BVEhFTkE9WUVTCitTS0lQX05FWFRBVz1ZRVMKK1NLSVBfUEhPVE9OPVlFUworU0tJUF9CRU9TPVlFUworU0tJUF9DQVJCT049WUVTCitHVUlUWVBFPU5PTkUKKworaWYgdGVzdCAieCRCRU9TIiA9ICJ4eWVzIjsgdGhlbgorICBTS0lQX0JFT1M9CisgIGNhc2UgIiRlbmFibGVfZ3VpX2Nhbm9uIiBpbgorICAgIG5vKQkJZWNobyAiJGFjX3QiIm5vIEdVSSBzdXBwb3J0IiAxPiY2CisJCVNLSVBfQkVPUz1ZRVMgOzsKKyAgICB5ZXN8IiIpCWVjaG8gIiRhY190IiJ5ZXMgLSBhdXRvbWF0aWMgR1VJIHN1cHBvcnQiIDE+JjYgOzsKKyAgICBhdXRvKQllY2hvICIkYWNfdCIiYXV0byAtIGF1dG9tYXRpYyBHVUkgc3VwcG9ydCIgMT4mNiA7OworICAgIGJlb3MpCWVjaG8gIiRhY190IiJCZU9TIEdVSSBzdXBwb3J0IiAxPiY2IDs7CisgICAgKikJCWVjaG8gIiRhY190IiJTb3JyeSwgJGVuYWJsZV9ndWkgR1VJIGlzIG5vdCBzdXBwb3J0ZWQiIDE+JjYKKwkJU0tJUF9CRU9TPVlFUyA7OworICBlc2FjCisKK2VsaWYgdGVzdCAieCRRTlgiID0gInh5ZXMiIC1hICJ4JHdpdGhfeCIgPSAieG5vIiA7IHRoZW4KKyAgU0tJUF9QSE9UT049CisgIGNhc2UgIiRlbmFibGVfZ3VpX2Nhbm9uIiBpbgorICAgIG5vKQkJZWNobyAiJGFjX3QiIm5vIEdVSSBzdXBwb3J0IiAxPiY2CisJCVNLSVBfUEhPVE9OPVlFUyA7OworICAgIHllc3wiIikJZWNobyAiJGFjX3QiInllcyAtIGF1dG9tYXRpYyBHVUkgc3VwcG9ydCIgMT4mNiA7OworICAgIGF1dG8pCWVjaG8gIiRhY190IiJhdXRvIC0gYXV0b21hdGljIEdVSSBzdXBwb3J0IiAxPiY2IDs7CisgICAgcGhvdG9uKQllY2hvICIkYWNfdCIiUGhvdG9uIEdVSSBzdXBwb3J0IiAxPiY2IDs7CisgICAgKikJCWVjaG8gIiRhY190IiJTb3JyeSwgJGVuYWJsZV9ndWkgR1VJIGlzIG5vdCBzdXBwb3J0ZWQiIDE+JjYKKwkJU0tJUF9QSE9UT049WUVTIDs7CisgIGVzYWMKKworZWxpZiB0ZXN0ICJ4JE1BQ09TWCIgPSAieHllcyIgLWEgIngkd2l0aF94IiA9ICJ4bm8iIDsgdGhlbgorICBTS0lQX0NBUkJPTj0KKyAgY2FzZSAiJGVuYWJsZV9ndWlfY2Fub24iIGluCisgICAgbm8pCQllY2hvICIkYWNfdCIibm8gR1VJIHN1cHBvcnQiIDE+JjYKKwkJU0tJUF9DQVJCT049WUVTIDs7CisgICAgeWVzfCIiKQllY2hvICIkYWNfdCIieWVzIC0gYXV0b21hdGljIEdVSSBzdXBwb3J0IiAxPiY2IDs7CisgICAgYXV0bykJZWNobyAiJGFjX3QiImF1dG8gLSBhdXRvbWF0aWMgR1VJIHN1cHBvcnQiIDE+JjYgOzsKKyAgICBjYXJib24pCWVjaG8gIiRhY190IiJDYXJib24gR1VJIHN1cHBvcnQiIDE+JjYgOzsKKyAgICAqKQkJZWNobyAiJGFjX3QiIlNvcnJ5LCAkZW5hYmxlX2d1aSBHVUkgaXMgbm90IHN1cHBvcnRlZCIgMT4mNgorCQlTS0lQX0NBUkJPTj1ZRVMgOzsKKyAgZXNhYworCitlbHNlCisKKworICBjYXNlICIkZW5hYmxlX2d1aV9jYW5vbiIgaW4KKyAgICBub3xub25lKQllY2hvICIkYWNfdCIibm8gR1VJIHN1cHBvcnQiIDE+JjYgOzsKKyAgICB5ZXN8IiJ8YXV0bykJZWNobyAiJGFjX3QiInllcy9hdXRvIC0gYXV0b21hdGljIEdVSSBzdXBwb3J0IiAxPiY2CisJCVNLSVBfR1RLPQorCQlTS0lQX0dUSzI9CisJCVNLSVBfR05PTUU9CisJCVNLSVBfTU9USUY9CisJCVNLSVBfQVRIRU5BPQorCQlTS0lQX05FWFRBVz0KKwkJU0tJUF9DQVJCT049OzsKKyAgICBndGspCWVjaG8gIiRhY190IiJHVEsrIDEueCBHVUkgc3VwcG9ydCIgMT4mNgorCQlTS0lQX0dUSz07OworICAgIGd0azIpCWVjaG8gIiRhY190IiJHVEsrIDIueCBHVUkgc3VwcG9ydCIgMT4mNgorCQlTS0lQX0dUSz0KKwkJU0tJUF9HVEsyPTs7CisgICAgZ25vbWUpCWVjaG8gIiRhY190IiJHTk9NRSAxLnggR1VJIHN1cHBvcnQiIDE+JjYKKwkJU0tJUF9HTk9NRT0KKwkJU0tJUF9HVEs9OzsKKyAgICBnbm9tZTIpCWVjaG8gIiRhY190IiJHTk9NRSAyLnggR1VJIHN1cHBvcnQiIDE+JjYKKwkJU0tJUF9HTk9NRT0KKwkJU0tJUF9HVEs9CisJCVNLSVBfR1RLMj07OworICAgIG1vdGlmKQllY2hvICIkYWNfdCIiTW90aWYgR1VJIHN1cHBvcnQiIDE+JjYKKwkJU0tJUF9NT1RJRj07OworICAgIGF0aGVuYSkJZWNobyAiJGFjX3QiIkF0aGVuYSBHVUkgc3VwcG9ydCIgMT4mNgorCQlTS0lQX0FUSEVOQT07OworICAgIG5leHRhdykJZWNobyAiJGFjX3QiIm5lWHRhdyBHVUkgc3VwcG9ydCIgMT4mNgorCQlTS0lQX05FWFRBVz07OworICAgICopCQllY2hvICIkYWNfdCIiU29ycnksICRlbmFibGVfZ3VpIEdVSSBpcyBub3Qgc3VwcG9ydGVkIiAxPiY2IDs7CisgIGVzYWMKKworZmkKKworaWYgdGVzdCAieCRTS0lQX0dUSyIgIT0gInhZRVMiIC1hICIkZW5hYmxlX2d1aV9jYW5vbiIgIT0gImd0ayIgLWEgIiRlbmFibGVfZ3VpX2Nhbm9uIiAhPSAiZ3RrMiI7IHRoZW4KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBvciBub3QgdG8gbG9vayBmb3IgR1RLIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozNzkzOiBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0byBsb29rIGZvciBHVEsiID4mNQorICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ3RrLWNoZWNrIG9yIC0tZGlzYWJsZS1ndGstY2hlY2sgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ3RrX2NoZWNrK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9ndGtfY2hlY2siCisgIDoKK2Vsc2UKKyAgZW5hYmxlX2d0a19jaGVjaz0ieWVzIgorZmkKKworICBlY2hvICIkYWNfdCIiJGVuYWJsZV9ndGtfY2hlY2siIDE+JjYKKyAgaWYgdGVzdCAieCRlbmFibGVfZ3RrX2NoZWNrIiA9ICJ4bm8iOyB0aGVuCisgICAgU0tJUF9HVEs9WUVTCisgICAgU0tJUF9HTk9NRT1ZRVMKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkU0tJUF9HVEsyIiAhPSAieFlFUyIgLWEgIiRlbmFibGVfZ3VpX2Nhbm9uIiAhPSAiZ3RrMiIgXAorCQkJCS1hICIkZW5hYmxlX2d1aV9jYW5vbiIgIT0gImdub21lMiI7IHRoZW4KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBvciBub3QgdG8gbG9vayBmb3IgR1RLKyAyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozODEyOiBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0byBsb29rIGZvciBHVEsrIDIiID4mNQorICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ3RrMi1jaGVjayBvciAtLWRpc2FibGUtZ3RrMi1jaGVjayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ndGsyX2NoZWNrK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9ndGsyX2NoZWNrIgorICA6CitlbHNlCisgIGVuYWJsZV9ndGsyX2NoZWNrPSJ5ZXMiCitmaQorCisgIGVjaG8gIiRhY190IiIkZW5hYmxlX2d0azJfY2hlY2siIDE+JjYKKyAgaWYgdGVzdCAieCRlbmFibGVfZ3RrMl9jaGVjayIgPSAieG5vIjsgdGhlbgorICAgIFNLSVBfR1RLMj1ZRVMKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkU0tJUF9HTk9NRSIgIT0gInhZRVMiIC1hICIkZW5hYmxlX2d1aV9jYW5vbiIgIT0gImdub21lIiBcCisJCQkJIC1hICIkZW5hYmxlX2d1aV9jYW5vbiIgIT0gImdub21lMiI7IHRoZW4KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBvciBub3QgdG8gbG9vayBmb3IgR05PTUUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM4MzA6IGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRvIGxvb2sgZm9yIEdOT01FIiA+JjUKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdub21lLWNoZWNrIG9yIC0tZGlzYWJsZS1nbm9tZS1jaGVjayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9nbm9tZV9jaGVjaytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZ25vbWVfY2hlY2siCisgIDoKK2Vsc2UKKyAgZW5hYmxlX2dub21lX2NoZWNrPSJubyIKK2ZpCisKKyAgZWNobyAiJGFjX3QiIiRlbmFibGVfZ25vbWVfY2hlY2siIDE+JjYKKyAgaWYgdGVzdCAieCRlbmFibGVfZ25vbWVfY2hlY2siID0gInhubyI7IHRoZW4KKyAgICBTS0lQX0dOT01FPVlFUworICBmaQorZmkKKworaWYgdGVzdCAieCRTS0lQX01PVElGIiAhPSAieFlFUyIgLWEgIiRlbmFibGVfZ3VpX2Nhbm9uIiAhPSAibW90aWYiOyB0aGVuCisgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRvIGxvb2sgZm9yIE1vdGlmIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozODQ3OiBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0byBsb29rIGZvciBNb3RpZiIgPiY1CisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tb3RpZi1jaGVjayBvciAtLWRpc2FibGUtbW90aWYtY2hlY2sgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbW90aWZfY2hlY2src2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX21vdGlmX2NoZWNrIgorICA6CitlbHNlCisgIGVuYWJsZV9tb3RpZl9jaGVjaz0ieWVzIgorZmkKKworICBlY2hvICIkYWNfdCIiJGVuYWJsZV9tb3RpZl9jaGVjayIgMT4mNgorICBpZiB0ZXN0ICJ4JGVuYWJsZV9tb3RpZl9jaGVjayIgPSAieG5vIjsgdGhlbgorICAgIFNLSVBfTU9USUY9WUVTCisgIGZpCitmaQorCitpZiB0ZXN0ICJ4JFNLSVBfQVRIRU5BIiAhPSAieFlFUyIgLWEgIiRlbmFibGVfZ3VpX2Nhbm9uIiAhPSAiYXRoZW5hIjsgdGhlbgorICBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0byBsb29rIGZvciBBdGhlbmEiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM4NjQ6IGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRvIGxvb2sgZm9yIEF0aGVuYSIgPiY1CisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hdGhlbmEtY2hlY2sgb3IgLS1kaXNhYmxlLWF0aGVuYS1jaGVjayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hdGhlbmFfY2hlY2src2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2F0aGVuYV9jaGVjayIKKyAgOgorZWxzZQorICBlbmFibGVfYXRoZW5hX2NoZWNrPSJ5ZXMiCitmaQorCisgIGVjaG8gIiRhY190IiIkZW5hYmxlX2F0aGVuYV9jaGVjayIgMT4mNgorICBpZiB0ZXN0ICJ4JGVuYWJsZV9hdGhlbmFfY2hlY2siID0gInhubyI7IHRoZW4KKyAgICBTS0lQX0FUSEVOQT1ZRVMKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkU0tJUF9ORVhUQVciICE9ICJ4WUVTIiAtYSAiJGVuYWJsZV9ndWlfY2Fub24iICE9ICJuZXh0YXciOyB0aGVuCisgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRvIGxvb2sgZm9yIG5lWHRhdyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Mzg4MTogY2hlY2tpbmcgd2hldGhlciBvciBub3QgdG8gbG9vayBmb3IgbmVYdGF3IiA+JjUKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5leHRhdy1jaGVjayBvciAtLWRpc2FibGUtbmV4dGF3LWNoZWNrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25leHRhd19jaGVjaytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfbmV4dGF3X2NoZWNrIgorICA6CitlbHNlCisgIGVuYWJsZV9uZXh0YXdfY2hlY2s9InllcyIKK2ZpCisKKyAgZWNobyAiJGFjX3QiIiRlbmFibGVfbmV4dGF3X2NoZWNrIiAxPiY2OworICBpZiB0ZXN0ICJ4JGVuYWJsZV9uZXh0YXdfY2hlY2siID0gInhubyI7IHRoZW4KKyAgICBTS0lQX05FWFRBVz1ZRVMKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkU0tJUF9DQVJCT04iICE9ICJ4WUVTIiAtYSAiJGVuYWJsZV9ndWlfY2Fub24iICE9ICJjYXJib24iOyB0aGVuCisgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRvIGxvb2sgZm9yIENhcmJvbiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Mzg5ODogY2hlY2tpbmcgd2hldGhlciBvciBub3QgdG8gbG9vayBmb3IgQ2FyYm9uIiA+JjUKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNhcmJvbi1jaGVjayBvciAtLWRpc2FibGUtY2FyYm9uLWNoZWNrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NhcmJvbl9jaGVjaytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfY2FyYm9uX2NoZWNrIgorICA6CitlbHNlCisgIGVuYWJsZV9jYXJib25fY2hlY2s9InllcyIKK2ZpCisKKyAgZWNobyAiJGFjX3QiIiRlbmFibGVfY2FyYm9uX2NoZWNrIiAxPiY2OworICBpZiB0ZXN0ICJ4JGVuYWJsZV9jYXJib25fY2hlY2siID0gInhubyI7IHRoZW4KKyAgICBTS0lQX0NBUkJPTj1ZRVMKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkTUFDT1NYIiA9ICJ4eWVzIiAtYSAteiAiJFNLSVBfQ0FSQk9OIiAtYSAieCRDQVJCT04iID0gInh5ZXMiOyB0aGVuCisgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBDYXJib24gR1VJIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozOTE1OiBjaGVja2luZyBmb3IgQ2FyYm9uIEdVSSIgPiY1CisgICAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsKKyAgR1VJVFlQRT1DQVJCT05HVUkKKyAgICBTS0lQX0dUSz1ZRVM7CisgIFNLSVBfR1RLMj1ZRVM7CisgIFNLSVBfR05PTUU9WUVTOworICBTS0lQX01PVElGPVlFUzsKKyAgU0tJUF9BVEhFTkE9WUVTOworICBTS0lQX05FWFRBVz1ZRVM7CisgIFNLSVBfUEhPVE9OPVlFUzsKKyAgU0tJUF9CRU9TPVlFUzsKKyAgU0tJUF9DQVJCT049WUVTCitmaQorCisKKworCisKKworCisKKworCitpZiB0ZXN0IC16ICIkU0tJUF9HVEsiOyB0aGVuCisKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgLS13aXRoLWd0ay1wcmVmaXggYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM5NDE6IGNoZWNraW5nIC0td2l0aC1ndGstcHJlZml4IGFyZ3VtZW50IiA+JjUKKyAgIyBDaGVjayB3aGV0aGVyIC0td2l0aC1ndGstcHJlZml4IG9yIC0td2l0aG91dC1ndGstcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ndGtfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2d0a19wcmVmaXgiCisgIGd0a19jb25maWdfcHJlZml4PSIkd2l0aHZhbCI7IGVjaG8gIiRhY190IiIkZ3RrX2NvbmZpZ19wcmVmaXgiIDE+JjYKK2Vsc2UKKyAgZ3RrX2NvbmZpZ19wcmVmaXg9IiI7IGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworCisgIGVjaG8gJGFjX24gImNoZWNraW5nIC0td2l0aC1ndGstZXhlYy1wcmVmaXggYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM5NTI6IGNoZWNraW5nIC0td2l0aC1ndGstZXhlYy1wcmVmaXggYXJndW1lbnQiID4mNQorICAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWd0ay1leGVjLXByZWZpeCBvciAtLXdpdGhvdXQtZ3RrLWV4ZWMtcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ndGtfZXhlY19wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZ3RrX2V4ZWNfcHJlZml4IgorICBndGtfY29uZmlnX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCI7IGVjaG8gIiRhY190IiIkZ3RrX2NvbmZpZ19wcmVmaXgiIDE+JjYKK2Vsc2UKKyAgZ3RrX2NvbmZpZ19leGVjX3ByZWZpeD0iIjsgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgLS1kaXNhYmxlLWd0a3Rlc3QgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM5NjM6IGNoZWNraW5nIC0tZGlzYWJsZS1ndGt0ZXN0IGFyZ3VtZW50IiA+JjUKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWd0a3Rlc3Qgb3IgLS1kaXNhYmxlLWd0a3Rlc3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ3RrdGVzdCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZ3RrdGVzdCIKKyAgOgorZWxzZQorICBlbmFibGVfZ3RrdGVzdD15ZXMKK2ZpCisKKyAgaWYgdGVzdCAieCRlbmFibGVfZ3RrdGVzdCIgPSAieHllcyIgOyB0aGVuCisgICAgZWNobyAiJGFjX3QiImd0ayB0ZXN0IGVuYWJsZWQiIDE+JjYKKyAgZWxzZQorICAgIGVjaG8gIiRhY190IiJndGsgdGVzdCBkaXNhYmxlZCIgMT4mNgorICBmaQorCisgIGlmIHRlc3QgIngkZ3RrX2NvbmZpZ19wcmVmaXgiICE9ICJ4IiA7IHRoZW4KKyAgICBndGtfY29uZmlnX2FyZ3M9IiRndGtfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGd0a19jb25maWdfcHJlZml4IgorICAgIEdUS19DT05GSUc9JGd0a19jb25maWdfcHJlZml4L2Jpbi9ndGstY29uZmlnCisgIGZpCisgIGlmIHRlc3QgIngkZ3RrX2NvbmZpZ19leGVjX3ByZWZpeCIgIT0gIngiIDsgdGhlbgorICAgIGd0a19jb25maWdfYXJncz0iJGd0a19jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRndGtfY29uZmlnX2V4ZWNfcHJlZml4IgorICAgIEdUS19DT05GSUc9JGd0a19jb25maWdfZXhlY19wcmVmaXgvYmluL2d0ay1jb25maWcKKyAgZmkKKyAgaWYgdGVzdCAiWCRHVEtfQ09ORklHIiA9ICJYIjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ3RrLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ3RrLWNvbmZpZzsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozOTkwOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3BhdGhfR1RLX0NPTkZJRycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhc2UgIiRHVEtfQ09ORklHIiBpbgorICAvKikKKyAgYWNfY3ZfcGF0aF9HVEtfQ09ORklHPSIkR1RLX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgID86LyopCQkJIAorICBhY19jdl9wYXRoX0dUS19DT05GSUc9IiRHVEtfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgZG9zIHBhdGguCisgIDs7CisgICopCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvIAorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wYXRoX0dUS19DT05GSUc9IiRhY19kaXIvJGFjX3dvcmQiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX0dUS19DT05GSUciICYmIGFjX2N2X3BhdGhfR1RLX0NPTkZJRz0ibm8iCisgIDs7Citlc2FjCitmaQorR1RLX0NPTkZJRz0iJGFjX2N2X3BhdGhfR1RLX0NPTkZJRyIKK2lmIHRlc3QgLW4gIiRHVEtfQ09ORklHIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJEdUS19DT05GSUciIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgaWYgdGVzdCAiWCRHVEtfQ09ORklHIiA9ICJYbm8iOyB0aGVuCisgICAgICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImd0azEyLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ3RrMTItY29uZmlnOyBhY193b3JkPSQyCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQwMjc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcGF0aF9HVEsxMl9DT05GSUcnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXNlICIkR1RLMTJfQ09ORklHIiBpbgorICAvKikKKyAgYWNfY3ZfcGF0aF9HVEsxMl9DT05GSUc9IiRHVEsxMl9DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICA/Oi8qKQkJCSAKKyAgYWNfY3ZfcGF0aF9HVEsxMl9DT05GSUc9IiRHVEsxMl9DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKyAgOzsKKyAgKikKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8gCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3BhdGhfR1RLMTJfQ09ORklHPSIkYWNfZGlyLyRhY193b3JkIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HVEsxMl9DT05GSUciICYmIGFjX2N2X3BhdGhfR1RLMTJfQ09ORklHPSJubyIKKyAgOzsKK2VzYWMKK2ZpCitHVEsxMl9DT05GSUc9IiRhY19jdl9wYXRoX0dUSzEyX0NPTkZJRyIKK2lmIHRlc3QgLW4gIiRHVEsxMl9DT05GSUciOyB0aGVuCisgIGVjaG8gIiRhY190IiIkR1RLMTJfQ09ORklHIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgICAgR1RLX0NPTkZJRz0iJEdUSzEyX0NPTkZJRyIKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJGFjX3QiIlVzaW5nIEdUSyBjb25maWd1cmF0aW9uIHByb2dyYW0gJEdUS19DT05GSUciIDE+JjYKKyAgZmkKKyAgaWYgdGVzdCAiWCRQS0dfQ09ORklHIiA9ICJYIjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGtnLWNvbmZpZzsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0MDY5OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3BhdGhfUEtHX0NPTkZJRycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhc2UgIiRQS0dfQ09ORklHIiBpbgorICAvKikKKyAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgID86LyopCQkJIAorICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRQS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgZG9zIHBhdGguCisgIDs7CisgICopCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvIAorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRhY19kaXIvJGFjX3dvcmQiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR19DT05GSUciICYmIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0ibm8iCisgIDs7Citlc2FjCitmaQorUEtHX0NPTkZJRz0iJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyIKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJFBLR19DT05GSUciIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgIGZpCisKKyAgaWYgdGVzdCAieCRHVEtfQ09ORklHOiRQS0dfQ09ORklHIiAhPSAieG5vOm5vIjsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiWCRTS0lQX0dUSzIiICE9ICJYWUVTIjsgdGhlbgorICAgICAgCisgIGlmIHRlc3QgIlgkR1RLX0NPTkZJRyIgIT0gIlhubyIgLW8gIlgkUEtHX0NPTkZJRyIgIT0gIlhubyI7IHRoZW4KKyAgeworICAgIG1pbl9ndGtfdmVyc2lvbj0yLjIuMAorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBHVEsgLSB2ZXJzaW9uID49ICRtaW5fZ3RrX3ZlcnNpb24iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQxMTE6IGNoZWNraW5nIGZvciBHVEsgLSB2ZXJzaW9uID49ICRtaW5fZ3RrX3ZlcnNpb24iID4mNQorICAgIG5vX2d0az0iIgorICAgIGlmICh0ZXN0ICJYJFNLSVBfR1RLMiIgIT0gIlhZRVMiIC1hICJYJFBLR19DT05GSUciICE9ICJYbm8iKSBcCisJICAmJiAkUEtHX0NPTkZJRyAtLWV4aXN0cyBndGsrLTIuMDsgdGhlbgorICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdUS19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGd0aystMi4wYAorICAgICAgR1RLX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBndGsrLTIuMGAKKyAgICAgIGd0a19tYWpvcl92ZXJzaW9uPWAkUEtHX0NPTkZJRyAtLW1vZHZlcnNpb24gZ3RrKy0yLjAgfCBcCisJICAgICBzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKVwuXChbMC05XSpcKS9cMS8nYAorICAgICAgZ3RrX21pbm9yX3ZlcnNpb249YCRQS0dfQ09ORklHIC0tbW9kdmVyc2lvbiBndGsrLTIuMCB8IFwKKwkgICAgIHNlZCAncy9cKFswLTldKlwpXC5cKFswLTldKlwpXC5cKFswLTldKlwpL1wyLydgCisgICAgICBndGtfbWljcm9fdmVyc2lvbj1gJFBLR19DT05GSUcgLS1tb2R2ZXJzaW9uIGd0aystMi4wIHwgXAorCSAgICAgc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXClcLlwoWzAtOV0qXCkvXDMvJ2AKKyAgICB9CisgICAgZWxpZiB0ZXN0ICJYJEdUS19DT05GSUciICE9ICJYbm8iOyB0aGVuCisgICAgeworICAgICAgR1RLX0NGTEFHUz1gJEdUS19DT05GSUcgJGd0a19jb25maWdfYXJncyAtLWNmbGFnc2AKKyAgICAgIEdUS19MSUJTPWAkR1RLX0NPTkZJRyAkZ3RrX2NvbmZpZ19hcmdzIC0tbGlic2AKKyAgICAgIGd0a19tYWpvcl92ZXJzaW9uPWAkR1RLX0NPTkZJRyAkZ3RrX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKwkgICAgIHNlZCAncy9cKFswLTldKlwpXC5cKFswLTldKlwpXC5cKFswLTldKlwpL1wxLydgCisgICAgICBndGtfbWlub3JfdmVyc2lvbj1gJEdUS19DT05GSUcgJGd0a19jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisJICAgICBzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKVwuXChbMC05XSpcKS9cMi8nYAorICAgICAgZ3RrX21pY3JvX3ZlcnNpb249YCRHVEtfQ09ORklHICRndGtfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorCSAgICAgc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXClcLlwoWzAtOV0qXCkvXDMvJ2AKKyAgICB9CisgICAgZWxzZQorICAgICAgbm9fZ3RrPXllcworICAgIGZpCisKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9ndGt0ZXN0IiA9ICJ4eWVzIiAtYSAieCRub19ndGsiID0gIngiOyB0aGVuCisgICAgeworICAgICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHVEtfQ0ZMQUdTIgorICAgICAgTElCUz0iJExJQlMgJEdUS19MSUJTIgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybSAtZiBjb25mLmd0a3Rlc3QKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGVjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyIKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDE1MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50CittYWluICgpCit7CitpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKK2NoYXIgKnRtcF92ZXJzaW9uOworCitzeXN0ZW0gKCJ0b3VjaCBjb25mLmd0a3Rlc3QiKTsKKworLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCit0bXBfdmVyc2lvbiA9IGdfc3RyZHVwKCIkbWluX2d0a192ZXJzaW9uIik7CitpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7CisgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmdcbiIsICIkbWluX2d0a192ZXJzaW9uIik7CisgICBleGl0KDEpOworIH0KKworaWYgKChndGtfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorICAgICgoZ3RrX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChndGtfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKyAgICAoKGd0a19tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ3RrX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmCisJCQkJICAgICAoZ3RrX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKK3sKKyAgICByZXR1cm4gMDsKK30KK3JldHVybiAxOworfQorCitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDE4NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAordGhlbgorICA6CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIG5vX2d0az15ZXMKK2ZpCitybSAtZnIgY29uZnRlc3QqCitmaQorCisgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKyAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisgICAgfQorICAgIGZpCisgICAgaWYgdGVzdCAieCRub19ndGsiID0geCA7IHRoZW4KKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2d0a3Rlc3QiID0gInh5ZXMiOyB0aGVuCisJZWNobyAiJGFjX3QiInllczsgZm91bmQgdmVyc2lvbiAkZ3RrX21ham9yX3ZlcnNpb24uJGd0a19taW5vcl92ZXJzaW9uLiRndGtfbWljcm9fdmVyc2lvbiIgMT4mNgorICAgICAgZWxzZQorCWVjaG8gIiRhY190IiJmb3VuZCB2ZXJzaW9uICRndGtfbWFqb3JfdmVyc2lvbi4kZ3RrX21pbm9yX3ZlcnNpb24uJGd0a19taWNyb192ZXJzaW9uIiAxPiY2CisgICAgICBmaQorICAgICAgR1RLX0xJQk5BTUU9IiRHVEtfTElCUyIKKwkJICBHVUlfSU5DX0xPQz0iJEdUS19DRkxBR1MiCisgICAgZWxzZQorICAgIHsKKyAgICAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorICAgICAgR1RLX0NGTEFHUz0iIgorICAgICAgR1RLX0xJQlM9IiIKKyAgICAgIDoKKyAgICB9CisgICAgZmkKKyAgfQorICBlbHNlCisgICAgR1RLX0NGTEFHUz0iIgorICAgIEdUS19MSUJTPSIiCisgICAgOgorICBmaQorICAKKyAgCisgIHJtIC1mIGNvbmYuZ3RrdGVzdAorCisgICAgICBpZiB0ZXN0ICJ4JEdUS19DRkxBR1MiICE9ICJ4IjsgdGhlbgorCVNLSVBfQVRIRU5BPVlFUworCVNLSVBfTkVYVEFXPVlFUworCVNLSVBfTU9USUY9WUVTCisJR1VJVFlQRT1HVEsKKwkKKyAgICAgIGZpCisgICAgZmkKKworICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkR1VJVFlQRSIgIT0gInhHVEsiOyB0aGVuCisgICAgICBTS0lQX0dUSzI9WUVTCisgICAgICAKKyAgaWYgdGVzdCAiWCRHVEtfQ09ORklHIiAhPSAiWG5vIiAtbyAiWCRQS0dfQ09ORklHIiAhPSAiWG5vIjsgdGhlbgorICB7CisgICAgbWluX2d0a192ZXJzaW9uPTEuMS4xNgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBHVEsgLSB2ZXJzaW9uID49ICRtaW5fZ3RrX3ZlcnNpb24iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQyNDI6IGNoZWNraW5nIGZvciBHVEsgLSB2ZXJzaW9uID49ICRtaW5fZ3RrX3ZlcnNpb24iID4mNQorICAgIG5vX2d0az0iIgorICAgIGlmICh0ZXN0ICJYJFNLSVBfR1RLMiIgIT0gIlhZRVMiIC1hICJYJFBLR19DT05GSUciICE9ICJYbm8iKSBcCisJICAmJiAkUEtHX0NPTkZJRyAtLWV4aXN0cyBndGsrLTIuMDsgdGhlbgorICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdUS19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGd0aystMi4wYAorICAgICAgR1RLX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBndGsrLTIuMGAKKyAgICAgIGd0a19tYWpvcl92ZXJzaW9uPWAkUEtHX0NPTkZJRyAtLW1vZHZlcnNpb24gZ3RrKy0yLjAgfCBcCisJICAgICBzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKVwuXChbMC05XSpcKS9cMS8nYAorICAgICAgZ3RrX21pbm9yX3ZlcnNpb249YCRQS0dfQ09ORklHIC0tbW9kdmVyc2lvbiBndGsrLTIuMCB8IFwKKwkgICAgIHNlZCAncy9cKFswLTldKlwpXC5cKFswLTldKlwpXC5cKFswLTldKlwpL1wyLydgCisgICAgICBndGtfbWljcm9fdmVyc2lvbj1gJFBLR19DT05GSUcgLS1tb2R2ZXJzaW9uIGd0aystMi4wIHwgXAorCSAgICAgc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXClcLlwoWzAtOV0qXCkvXDMvJ2AKKyAgICB9CisgICAgZWxpZiB0ZXN0ICJYJEdUS19DT05GSUciICE9ICJYbm8iOyB0aGVuCisgICAgeworICAgICAgR1RLX0NGTEFHUz1gJEdUS19DT05GSUcgJGd0a19jb25maWdfYXJncyAtLWNmbGFnc2AKKyAgICAgIEdUS19MSUJTPWAkR1RLX0NPTkZJRyAkZ3RrX2NvbmZpZ19hcmdzIC0tbGlic2AKKyAgICAgIGd0a19tYWpvcl92ZXJzaW9uPWAkR1RLX0NPTkZJRyAkZ3RrX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKwkgICAgIHNlZCAncy9cKFswLTldKlwpXC5cKFswLTldKlwpXC5cKFswLTldKlwpL1wxLydgCisgICAgICBndGtfbWlub3JfdmVyc2lvbj1gJEdUS19DT05GSUcgJGd0a19jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisJICAgICBzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKVwuXChbMC05XSpcKS9cMi8nYAorICAgICAgZ3RrX21pY3JvX3ZlcnNpb249YCRHVEtfQ09ORklHICRndGtfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorCSAgICAgc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXClcLlwoWzAtOV0qXCkvXDMvJ2AKKyAgICB9CisgICAgZWxzZQorICAgICAgbm9fZ3RrPXllcworICAgIGZpCisKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9ndGt0ZXN0IiA9ICJ4eWVzIiAtYSAieCRub19ndGsiID0gIngiOyB0aGVuCisgICAgeworICAgICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHVEtfQ0ZMQUdTIgorICAgICAgTElCUz0iJExJQlMgJEdUS19MSUJTIgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybSAtZiBjb25mLmd0a3Rlc3QKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGVjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyIKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDI4MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50CittYWluICgpCit7CitpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKK2NoYXIgKnRtcF92ZXJzaW9uOworCitzeXN0ZW0gKCJ0b3VjaCBjb25mLmd0a3Rlc3QiKTsKKworLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCit0bXBfdmVyc2lvbiA9IGdfc3RyZHVwKCIkbWluX2d0a192ZXJzaW9uIik7CitpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7CisgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmdcbiIsICIkbWluX2d0a192ZXJzaW9uIik7CisgICBleGl0KDEpOworIH0KKworaWYgKChndGtfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorICAgICgoZ3RrX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChndGtfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKyAgICAoKGd0a19tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ3RrX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmCisJCQkJICAgICAoZ3RrX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKK3sKKyAgICByZXR1cm4gMDsKK30KK3JldHVybiAxOworfQorCitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDMxNTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAordGhlbgorICA6CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIG5vX2d0az15ZXMKK2ZpCitybSAtZnIgY29uZnRlc3QqCitmaQorCisgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKyAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisgICAgfQorICAgIGZpCisgICAgaWYgdGVzdCAieCRub19ndGsiID0geCA7IHRoZW4KKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2d0a3Rlc3QiID0gInh5ZXMiOyB0aGVuCisJZWNobyAiJGFjX3QiInllczsgZm91bmQgdmVyc2lvbiAkZ3RrX21ham9yX3ZlcnNpb24uJGd0a19taW5vcl92ZXJzaW9uLiRndGtfbWljcm9fdmVyc2lvbiIgMT4mNgorICAgICAgZWxzZQorCWVjaG8gIiRhY190IiJmb3VuZCB2ZXJzaW9uICRndGtfbWFqb3JfdmVyc2lvbi4kZ3RrX21pbm9yX3ZlcnNpb24uJGd0a19taWNyb192ZXJzaW9uIiAxPiY2CisgICAgICBmaQorICAgICAgR1RLX0xJQk5BTUU9IiRHVEtfTElCUyIKKwkJICBHVUlfSU5DX0xPQz0iJEdUS19DRkxBR1MiCisgICAgZWxzZQorICAgIHsKKyAgICAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorICAgICAgR1RLX0NGTEFHUz0iIgorICAgICAgR1RLX0xJQlM9IiIKKyAgICAgIDoKKyAgICB9CisgICAgZmkKKyAgfQorICBlbHNlCisgICAgR1RLX0NGTEFHUz0iIgorICAgIEdUS19MSUJTPSIiCisgICAgOgorICBmaQorICAKKyAgCisgIHJtIC1mIGNvbmYuZ3RrdGVzdAorCisgICAgICBpZiB0ZXN0ICJ4JEdUS19DRkxBR1MiICE9ICJ4IjsgdGhlbgorCVNLSVBfQVRIRU5BPVlFUworCVNLSVBfTkVYVEFXPVlFUworCVNLSVBfTU9USUY9WUVTCisJR1VJVFlQRT1HVEsKKwkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKyAgICBpZiB0ZXN0ICJ4JEdVSVRZUEUiID0gInhHVEsiOyB0aGVuCisgICAgaWYgdGVzdCAiJGd0a19tYWpvcl92ZXJzaW9uIiA9IDEgLWEgIjAkZ3RrX21pbm9yX3ZlcnNpb24iIC1sdCAyIFwKKwkgLW8gIiRndGtfbWFqb3JfdmVyc2lvbiIgPSAxIC1hICIkZ3RrX21pbm9yX3ZlcnNpb24iID0gMiAtYSAiMCRndGtfbWljcm9fdmVyc2lvbiIgLWx0IDM7IHRoZW4KKyAgICAgIGVjaG8gIiRhY190IiJ0aGlzIEdUSyB2ZXJzaW9uIGlzIG9sZDsgdmVyc2lvbiAxLjIuMyBvciBsYXRlciBpcyByZWNvbW1lbmRlZCIgMT4mNgorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiB0ZXN0ICIwJGd0a19tYWpvcl92ZXJzaW9uIiAtZ2UgMjsgdGhlbgorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0dUSzIgMQorRU9GCisKKwlpZiB0ZXN0ICIkZ3RrX21pbm9yX3ZlcnNpb24iID0gMSAtYSAiMCRndGtfbWljcm9fdmVyc2lvbiIgLWdlIDEgXAorCQl8fCB0ZXN0ICIwJGd0a19taW5vcl92ZXJzaW9uIiAtZ2UgMiBcCisJCXx8IHRlc3QgIjAkZ3RrX21ham9yX3ZlcnNpb24iIC1ndCAyOyB0aGVuCisJICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9HVEtfTVVMVElIRUFEIDEKK0VPRgorCisJZmkKKyAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkU0tJUF9HTk9NRSI7IHRoZW4KKyAgICAgIHsKKwkKKyAgCisgIAorICAKKworICAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdub21lLWluY2x1ZGVzIG9yIC0td2l0aG91dC1nbm9tZS1pbmNsdWRlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ25vbWVfaW5jbHVkZXMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZ25vbWVfaW5jbHVkZXMiCisgIENGTEFHUz0iJENGTEFHUyAtSSR3aXRodmFsIgorICAKK2ZpCisKKworICAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdub21lLWxpYnMgb3IgLS13aXRob3V0LWdub21lLWxpYnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dub21lX2xpYnMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZ25vbWVfbGlicyIKKyAgTERGTEFHUz0iJExERkxBR1MgLUwkd2l0aHZhbCIgZ25vbWVfcHJlZml4PSR3aXRodmFsCisgIAorZmkKKworCisgICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ25vbWUgb3IgLS13aXRob3V0LWdub21lIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbm9tZStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9nbm9tZSIKKyAgaWYgdGVzdCB4JHdpdGh2YWwgPSB4eWVzOyB0aGVuCisgICAgICB3YW50X2dub21lPXllcworICAgICAgaGF2ZV9nbm9tZT15ZXMKKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0geG5vOyB0aGVuCisJd2FudF9nbm9tZT1ubworICAgICAgZWxzZQorCXdhbnRfZ25vbWU9eWVzCisJTERGTEFHUz0iJExERkxBR1MgLUwkd2l0aHZhbC9saWIiCisJQ0ZMQUdTPSIkQ0ZMQUdTIC1JJHdpdGh2YWwvaW5jbHVkZSIKKwlnbm9tZV9wcmVmaXg9JHdpdGh2YWwvbGliCisgICAgICBmaQorICAgIGZpCitlbHNlCisgIHdhbnRfZ25vbWU9eWVzCitmaQorCisKKyAgaWYgdGVzdCAieCR3YW50X2dub21lIiA9IHh5ZXMgLWEgIjAkZ3RrX21ham9yX3ZlcnNpb24iIC1nZSAyOyB0aGVuCisgIHsKKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgbGliZ25vbWV1aS0yLjAiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQ0MzM6IGNoZWNraW5nIGZvciBsaWJnbm9tZXVpLTIuMCIgPiY1CisgICAgaWYgJFBLR19DT05GSUcgLS1leGlzdHMgbGliZ25vbWV1aS0yLjA7IHRoZW4KKyAgICAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgICAgIEdOT01FX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicy1vbmx5LWwgbGliZ25vbWV1aS0yLjBgCisgICAgICBHTk9NRV9MSUJESVI9YCRQS0dfQ09ORklHIC0tbGlicy1vbmx5LUwgbGliZ25vbWV1aS0yLjBgCisgICAgICBHTk9NRV9JTkNMVURFRElSPWAkUEtHX0NPTkZJRyAtLWNmbGFncyBsaWJnbm9tZXVpLTIuMGAKKyAgICAgIGhhdmVfZ25vbWU9eWVzCisgICAgZWxzZQorICAgICAgZWNobyAiJGFjX3QiIm5vdCBmb3VuZCIgMT4mNgorICAgICAgaWYgdGVzdCAieCIgPSB4ZmFpbDsgdGhlbgorCXsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogQ291bGQgbm90IGZpbmQgbGliZ25vbWV1aS0yLjAgdmlhIHBrZy1jb25maWciIDE+JjI7IGV4aXQgMTsgfQorICAgICAgZmkKKyAgICBmaQorICB9CisgIGVsaWYgdGVzdCAieCR3YW50X2dub21lIiA9IHh5ZXM7IHRoZW4KKyAgeworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ25vbWUtY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnbm9tZS1jb25maWc7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDQ1MjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX0dOT01FX0NPTkZJRycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhc2UgIiRHTk9NRV9DT05GSUciIGluCisgIC8qKQorICBhY19jdl9wYXRoX0dOT01FX0NPTkZJRz0iJEdOT01FX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgID86LyopCQkJIAorICBhY19jdl9wYXRoX0dOT01FX0NPTkZJRz0iJEdOT01FX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIGRvcyBwYXRoLgorICA7OworICAqKQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcGF0aF9HTk9NRV9DT05GSUc9IiRhY19kaXIvJGFjX3dvcmQiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX0dOT01FX0NPTkZJRyIgJiYgYWNfY3ZfcGF0aF9HTk9NRV9DT05GSUc9Im5vIgorICA7OworZXNhYworZmkKK0dOT01FX0NPTkZJRz0iJGFjX2N2X3BhdGhfR05PTUVfQ09ORklHIgoraWYgdGVzdCAtbiAiJEdOT01FX0NPTkZJRyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRHTk9NRV9DT05GSUciIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgaWYgdGVzdCAiJEdOT01FX0NPTkZJRyIgPSAibm8iOyB0aGVuCisgICAgICBub19nbm9tZV9jb25maWc9InllcyIKKyAgICBlbHNlCisgICAgICBlY2hvICRhY19uICJjaGVja2luZyBpZiAkR05PTUVfQ09ORklHIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0NDg5OiBjaGVja2luZyBpZiAkR05PTUVfQ09ORklHIHdvcmtzIiA+JjUKKyAgICAgIGlmICRHTk9NRV9DT05GSUcgLS1saWJzLW9ubHktbCBnbm9tZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwllY2hvICIkYWNfdCIieWVzIiAxPiY2CisJR05PTUVfTElCUz0iYCRHTk9NRV9DT05GSUcgLS1saWJzLW9ubHktbCBnbm9tZSBnbm9tZXVpYCIKKwlHTk9NRV9MSUJESVI9ImAkR05PTUVfQ09ORklHIC0tbGlicy1vbmx5LUwgZ25vcmJhIGdub21ldWlgIgorCUdOT01FX0lOQ0xVREVESVI9ImAkR05PTUVfQ09ORklHIC0tY2ZsYWdzIGdub3JiYSBnbm9tZXVpYCIKKwloYXZlX2dub21lPXllcworICAgICAgZWxzZQorCWVjaG8gIiRhY190IiJubyIgMT4mNgorCW5vX2dub21lX2NvbmZpZz0ieWVzIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCB4JGV4ZWNfcHJlZml4ID0geE5PTkU7IHRoZW4KKyAgICAgIGlmIHRlc3QgeCRwcmVmaXggPSB4Tk9ORTsgdGhlbgorCWdub21lX3ByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgvbGliCisgICAgICBlbHNlCisJZ25vbWVfcHJlZml4PSRwcmVmaXgvbGliCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGdub21lX3ByZWZpeD1gZXZhbCBlY2hvIFxgZWNobyAkbGliZGlyXGBgCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRub19nbm9tZV9jb25maWciID0gInllcyI7IHRoZW4KKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBnbm9tZUNvbmYuc2ggZmlsZSBpbiAkZ25vbWVfcHJlZml4IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0NTE0OiBjaGVja2luZyBmb3IgZ25vbWVDb25mLnNoIGZpbGUgaW4gJGdub21lX3ByZWZpeCIgPiY1CisgICAgICBpZiB0ZXN0IC1mICRnbm9tZV9wcmVmaXgvZ25vbWVDb25mLnNoOyB0aGVuCisJZWNobyAiJGFjX3QiImZvdW5kIiAxPiY2CisJZWNobyAibG9hZGluZyBnbm9tZSBjb25maWd1cmF0aW9uIGZyb20iIFwKKwkgICIkZ25vbWVfcHJlZml4L2dub21lQ29uZi5zaCIKKwkuICRnbm9tZV9wcmVmaXgvZ25vbWVDb25mLnNoCisJaGF2ZV9nbm9tZT15ZXMKKyAgICAgIGVsc2UKKwllY2hvICIkYWNfdCIibm90IGZvdW5kIiAxPiY2CisJaWYgdGVzdCB4ID0geGZhaWw7IHRoZW4KKwkgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogQ291bGQgbm90IGZpbmQgdGhlIGdub21lQ29uZi5zaCBmaWxlIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IGdub21lLWxpYnMgaW5zdGFsbCIgMT4mMjsgZXhpdCAxOyB9CisJZmkKKyAgICAgIGZpCisgICAgZmkKKyAgfQorICBmaQorCisJaWYgdGVzdCB4JGhhdmVfZ25vbWUgPSB4eWVzIDsgdGhlbgorCSAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEZFQVRfR1VJX0dOT01FIDEKK0VPRgorCisJICBHVUlfSU5DX0xPQz0iJEdVSV9JTkNfTE9DICRHTk9NRV9JTkNMVURFRElSIgorCSAgR1RLX0xJQk5BTUU9IiRHVEtfTElCTkFNRSAkR05PTUVfTElCRElSICRHTk9NRV9MSUJTIgorCWZpCisgICAgICB9CisgICAgICBmaQorICAgIH0KKyAgICBmaQorICBmaQorZmkKKworCitpZiB0ZXN0IC16ICIkU0tJUF9NT1RJRiI7IHRoZW4KKyAgZ3VpX1hYWD0iL3Vzci9YWFgvTW90aWYqIC91c3IvTW90aWYqL1hYWCAvdXNyL1hYWCAvdXNyL3NobGliIC91c3IvWDExKi9YWFggL3Vzci9YWFgvWDExKiAvdXNyL2R0L1hYWCAvbG9jYWwvTW90aWYqL1hYWCAvbG9jYWwvWFhYL01vdGlmKiAvdXNyL2xvY2FsL01vdGlmKi9YWFggL3Vzci9sb2NhbC9YWFgvTW90aWYqIC91c3IvbG9jYWwvWFhYIC91c3IvbG9jYWwvWDExKi9YWFggL3Vzci9sb2NhbC9MZXNzVGlmL01vdGlmKi9YWFggJE1PVElGSE9NRS9YWFgiCisgICAgR1VJX0lOQ19MT0M9ImBlY2hvICRHVUlfSU5DX0xPQ3xzZWQgJ3MlLUklJWcnYCIKKworICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgbG9jYXRpb24gb2YgTW90aWYgR1VJIGluY2x1ZGVzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0NTUyOiBjaGVja2luZyBmb3IgbG9jYXRpb24gb2YgTW90aWYgR1VJIGluY2x1ZGVzIiA+JjUKKyAgZ3VpX2luY2x1ZGVzPSJgZWNobyAkeF9pbmNsdWRlc3xzZWQgJ3MlL14vXi8qJCUlJ2AgYGVjaG8gIiRndWlfWFhYIiB8IHNlZCBzL1hYWC9pbmNsdWRlL2dgICRHVUlfSU5DX0xPQyIKKyAgR1VJX0lOQ19MT0M9CisgIGZvciB0cnkgaW4gJGd1aV9pbmNsdWRlczsgZG8KKyAgICBpZiB0ZXN0IC1mICIkdHJ5L1htL1htLmgiOyB0aGVuCisgICAgICBHVUlfSU5DX0xPQz0kdHJ5CisgICAgZmkKKyAgZG9uZQorICBpZiB0ZXN0IC1uICIkR1VJX0lOQ19MT0MiOyB0aGVuCisgICAgaWYgdGVzdCAiJEdVSV9JTkNfTE9DIiA9IC91c3IvaW5jbHVkZTsgdGhlbgorICAgICAgR1VJX0lOQ19MT0M9CisgICAgICBlY2hvICIkYWNfdCIiaW4gZGVmYXVsdCBwYXRoIiAxPiY2CisgICAgZWxzZQorICAgICAgZWNobyAiJGFjX3QiIiRHVUlfSU5DX0xPQyIgMT4mNgorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkYWNfdCIiPG5vdCBmb3VuZD4iIDE+JjYKKyAgICBTS0lQX01PVElGPVlFUworICBmaQorZmkKKworCitpZiB0ZXN0IC16ICIkU0tJUF9NT1RJRiI7IHRoZW4KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgLS13aXRoLW1vdGlmLWxpYiBhcmd1bWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDU3NjogY2hlY2tpbmcgLS13aXRoLW1vdGlmLWxpYiBhcmd1bWVudCIgPiY1CisgICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbW90aWYtbGliIG9yIC0td2l0aG91dC1tb3RpZi1saWIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21vdGlmX2xpYitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9tb3RpZl9saWIiCisgICBNT1RJRl9MSUJOQU1FPSIke3dpdGh2YWx9IiAgCitmaQorCisKKyAgaWYgdGVzdCAtbiAiJE1PVElGX0xJQk5BTUUiOyB0aGVuCisgICAgZWNobyAiJGFjX3QiIiRNT1RJRl9MSUJOQU1FIiAxPiY2CisgICAgR1VJX0xJQl9MT0M9CisgIGVsc2UKKyAgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKworICAgICAgICBHVUlfTElCX0xPQz0iYGVjaG8gJEdVSV9MSUJfTE9DfHNlZCAncyUtTCUlZydgIgorCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIE1vdGlmIEdVSSBsaWJzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0NTkzOiBjaGVja2luZyBmb3IgbG9jYXRpb24gb2YgTW90aWYgR1VJIGxpYnMiID4mNQorICAgIGd1aV9saWJzPSJgZWNobyAkeF9saWJyYXJpZXN8c2VkICdzJS9eL14vKiQlJSdgIGBlY2hvICIkZ3VpX1hYWCIgfCBzZWQgcy9YWFgvbGliL2dgIGBlY2hvICIkR1VJX0lOQ19MT0MiIHwgc2VkIHMvaW5jbHVkZS9saWIvYCAkR1VJX0xJQl9MT0MiCisgICAgR1VJX0xJQl9MT0M9CisgICAgZm9yIHRyeSBpbiAkZ3VpX2xpYnM7IGRvCisgICAgICBmb3IgbGlidHJ5IGluICIkdHJ5Ii9saWJYbS5hICIkdHJ5Ii9saWJYbS5zbyogIiR0cnkiL2xpYlhtLnNsOyBkbworCWlmIHRlc3QgLWYgIiRsaWJ0cnkiOyB0aGVuCisJICBHVUlfTElCX0xPQz0kdHJ5CisJZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgaWYgdGVzdCAtbiAiJEdVSV9MSUJfTE9DIjsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJEdVSV9MSUJfTE9DIiA9IC91c3IvbGliOyB0aGVuCisJR1VJX0xJQl9MT0M9CisJZWNobyAiJGFjX3QiImluIGRlZmF1bHQgcGF0aCIgMT4mNgorICAgICAgZWxzZQorCWlmIHRlc3QgLW4gIiRHVUlfTElCX0xPQyI7IHRoZW4KKwkgIGVjaG8gIiRhY190IiIkR1VJX0xJQl9MT0MiIDE+JjYKKwkgIGlmIHRlc3QgImAodW5hbWUpIDI+L2Rldi9udWxsYCIgPSBTdW5PUyAmJgorCQkJCQkgdW5hbWUgLXIgfCBncmVwICdeNScgPi9kZXYvbnVsbDsgdGhlbgorCSAgICBHVUlfTElCX0xPQz0iJEdVSV9MSUJfTE9DIC1SICRHVUlfTElCX0xPQyIKKwkgIGZpCisJZmkKKyAgICAgIGZpCisgICAgICBNT1RJRl9MSUJOQU1FPS1sWG0KKyAgICBlbHNlCisgICAgICBlY2hvICIkYWNfdCIiPG5vdCBmb3VuZD4iIDE+JjYKKyAgICAgIFNLSVBfTU9USUY9WUVTCisgICAgZmkKKyAgZmkKK2ZpCisKK2lmIHRlc3QgLXogIiRTS0lQX01PVElGIjsgdGhlbgorICBTS0lQX0FUSEVOQT1ZRVMKKyAgU0tJUF9ORVhUQVc9WUVTCisgIEdVSVRZUEU9TU9USUYKKyAgCitmaQorCisKK0dVSV9YX0xJQlM9CisKK2lmIHRlc3QgLXogIiRTS0lQX0FUSEVOQSI7IHRoZW4KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgQXRoZW5hIGhlYWRlciBmaWxlcyBjYW4gYmUgZm91bmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQ2MzY6IGNoZWNraW5nIGlmIEF0aGVuYSBoZWFkZXIgZmlsZXMgY2FuIGJlIGZvdW5kIiA+JjUKKyAgY2ZsYWdzX3NhdmU9JENGTEFHUworICBDRkxBR1M9IiRDRkxBR1MgJFhfQ0ZMQUdTIgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0NjQwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvWGF3L1BhbmVkLmg+CitpbnQgbWFpbigpIHsKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ2NDk6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNjsgU0tJUF9BVEhFTkE9WUVTIAorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICBDRkxBR1M9JGNmbGFnc19zYXZlCitmaQorCitpZiB0ZXN0IC16ICIkU0tJUF9BVEhFTkEiOyB0aGVuCisgIEdVSVRZUEU9QVRIRU5BCitmaQorCitpZiB0ZXN0IC16ICIkU0tJUF9ORVhUQVciOyB0aGVuCisgIGVjaG8gJGFjX24gImNoZWNraW5nIGlmIG5lWHRhdyBoZWFkZXIgZmlsZXMgY2FuIGJlIGZvdW5kIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0NjY4OiBjaGVja2luZyBpZiBuZVh0YXcgaGVhZGVyIGZpbGVzIGNhbiBiZSBmb3VuZCIgPiY1CisgIGNmbGFnc19zYXZlPSRDRkxBR1MKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICRYX0NGTEFHUyIKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDY3MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WDExL25lWHRhdy9QYW5lZC5oPgoraW50IG1haW4oKSB7CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0NjgxOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjY7IFNLSVBfTkVYVEFXPVlFUyAKK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgQ0ZMQUdTPSRjZmxhZ3Nfc2F2ZQorZmkKKworaWYgdGVzdCAteiAiJFNLSVBfTkVYVEFXIjsgdGhlbgorICBHVUlUWVBFPU5FWFRBVworZmkKKworaWYgdGVzdCAteiAiJFNLSVBfQVRIRU5BIiAtbyAteiAiJFNLSVBfTkVYVEFXIiAtbyAteiAiJFNLSVBfTU9USUYiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkR1VJX0lOQ19MT0MiOyB0aGVuCisgICAgR1VJX0lOQ19MT0M9LUkiYGVjaG8gJEdVSV9JTkNfTE9DfHNlZCAncyUtSSUlJ2AiCisgIGZpCisgIGlmIHRlc3QgLW4gIiRHVUlfTElCX0xPQyI7IHRoZW4KKyAgICBHVUlfTElCX0xPQz0tTCJgZWNobyAkR1VJX0xJQl9MT0N8c2VkICdzJS1MJSUnYCIKKyAgZmkKKworICAgIGxkZmxhZ3Nfc2F2ZT0kTERGTEFHUworICBMREZMQUdTPSIkWF9MSUJTICRMREZMQUdTIgorICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgWFNoYXBlUXVlcnlFeHRlbnNpb24gaW4gLWxYZXh0IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0NzA5OiBjaGVja2luZyBmb3IgWFNoYXBlUXVlcnlFeHRlbnNpb24gaW4gLWxYZXh0IiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gWGV4dCdfJ1hTaGFwZVF1ZXJ5RXh0ZW5zaW9uIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbFhleHQgLWxYdCAkWF9QUkVfTElCUyAtbFgxMSAkWF9FWFRSQV9MSUJTICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDcxNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIFhTaGFwZVF1ZXJ5RXh0ZW5zaW9uKCk7CisKK2ludCBtYWluKCkgeworWFNoYXBlUXVlcnlFeHRlbnNpb24oKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ3Mjg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIEdVSV9YX0xJQlM9Ii1sWGV4dCIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHdzbGVuIGluIC1sdyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDc0OTogY2hlY2tpbmcgZm9yIHdzbGVuIGluIC1sdyIgPiY1CithY19saWJfdmFyPWBlY2hvIHcnXyd3c2xlbiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWx3ICRHVUlfWF9MSUJTIC1sWHQgJFhfUFJFX0xJQlMgLWxYMTEgJFhfRVhUUkFfTElCUyAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQ3NTcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciB3c2xlbigpOworCitpbnQgbWFpbigpIHsKK3dzbGVuKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0NzY4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWx3IgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGRsc3ltIGluIC1sZGwiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQ3ODk6IGNoZWNraW5nIGZvciBkbHN5bSBpbiAtbGRsIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gZGwnXydkbHN5bSB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxkbCAkR1VJX1hfTElCUyAtbFh0ICRYX1BSRV9MSUJTIC1sWDExICRYX0VYVFJBX0xJQlMgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0Nzk3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgZGxzeW0oKTsKKworaW50IG1haW4oKSB7CitkbHN5bSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDgwODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sZGwiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgWG11Q3JlYXRlU3RpcHBsZWRQaXhtYXAgaW4gLWxYbXUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQ4Mjk6IGNoZWNraW5nIGZvciBYbXVDcmVhdGVTdGlwcGxlZFBpeG1hcCBpbiAtbFhtdSIgPiY1CithY19saWJfdmFyPWBlY2hvIFhtdSdfJ1htdUNyZWF0ZVN0aXBwbGVkUGl4bWFwIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbFhtdSAkR1VJX1hfTElCUyAtbFh0ICRYX1BSRV9MSUJTIC1sWDExICRYX0VYVFJBX0xJQlMgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0ODM3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgWG11Q3JlYXRlU3RpcHBsZWRQaXhtYXAoKTsKKworaW50IG1haW4oKSB7CitYbXVDcmVhdGVTdGlwcGxlZFBpeG1hcCgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDg0ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgR1VJX1hfTElCUz0iLWxYbXUgJEdVSV9YX0xJQlMiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICBpZiB0ZXN0IC16ICIkU0tJUF9NT1RJRiI7IHRoZW4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgWHBFbmRKb2IgaW4gLWxYcCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDg3MDogY2hlY2tpbmcgZm9yIFhwRW5kSm9iIGluIC1sWHAiID4mNQorYWNfbGliX3Zhcj1gZWNobyBYcCdfJ1hwRW5kSm9iIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbFhwICRHVUlfWF9MSUJTIC1sWG0gLWxYdCAkWF9QUkVfTElCUyAtbFgxMSAkWF9FWFRSQV9MSUJTICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDg3OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIFhwRW5kSm9iKCk7CisKK2ludCBtYWluKCkgeworWHBFbmRKb2IoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ4ODk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIEdVSV9YX0xJQlM9Ii1sWHAgJEdVSV9YX0xJQlMiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICBmaQorICBMREZMQUdTPSRsZGZsYWdzX3NhdmUKKworICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBleHRyYSBYMTEgZGVmaW5lcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDkxMzogY2hlY2tpbmcgZm9yIGV4dHJhIFgxMSBkZWZpbmVzIiA+JjUKKyAgTkFSUk9XX1BST1RPPQorICBybSAtZnIgY29uZnRlc3RkaXIKKyAgaWYgbWtkaXIgY29uZnRlc3RkaXI7IHRoZW4KKyAgICBjZCBjb25mdGVzdGRpcgorICAgIGNhdCA+IEltYWtlZmlsZSA8PCdFT0YnCithY2ZpbmR4OgorCUBlY2hvICdOQVJST1dfUFJPVE89IiR7UFJPVE9fREVGSU5FU30iJworRU9GCisgICAgaWYgKHhta21mKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsICYmIHRlc3QgLWYgTWFrZWZpbGU7IHRoZW4KKyAgICAgIGV2YWwgYCR7TUFLRS1tYWtlfSBhY2ZpbmR4IDI+L2Rldi9udWxsIHwgZ3JlcCAtdiBtYWtlYAorICAgIGZpCisgICAgY2QgLi4KKyAgICBybSAtZnIgY29uZnRlc3RkaXIKKyAgZmkKKyAgaWYgdGVzdCAteiAiJE5BUlJPV19QUk9UTyI7IHRoZW4KKyAgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKyAgZWxzZQorICAgIGVjaG8gIiRhY190IiIkTkFSUk9XX1BST1RPIiAxPiY2CisgIGZpCisgIAorZmkKKworaWYgdGVzdCAiJGVuYWJsZV94c21wIiA9ICJ5ZXMiOyB0aGVuCisgIGNwcGZsYWdzX3NhdmU9JENQUEZMQUdTCisgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhfQ0ZMQUdTIgorICBmb3IgYWNfaGRyIGluIFgxMS9TTS9TTWxpYi5oCitkbworYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDk0MzogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQ5NDggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZHI+CitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjQ5NTM6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2hkcj1IQVZFX2BlY2hvICRhY19oZHIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGFjX3RyX2hkciAxCitFT0YKKyAKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorZG9uZQorCisgIENQUEZMQUdTPSRjcHBmbGFnc19zYXZlCitmaQorCisKK2lmIHRlc3QgLXogIiRTS0lQX0FUSEVOQSIgLW8gLXogIiRTS0lQX05FWFRBVyIgLW8gLXogIiRTS0lQX01PVElGIiAtbyAteiAiJFNLSVBfR1RLIjsgdGhlbgorICAgIGNwcGZsYWdzX3NhdmU9JENQUEZMQUdTCisgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhfQ0ZMQUdTIgorICBmb3IgYWNfaGRyIGluIFgxMS94cG0uaCBYMTEvU3Vua2V5c3ltLmgKK2RvCithY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfaGRyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0OTkwOiBjaGVja2luZyBmb3IgJGFjX2hkciIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDk5NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JGFjX2hkcj4KK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6NTAwMDogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJGFjX2hkciB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfaGRyIDEKK0VPRgorIAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitkb25lCisKKworICAgIGlmIHRlc3QgISAiJGVuYWJsZV94aW0iID0gIm5vIjsgdGhlbgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBYSU1UZXh0IGluIFgxMS9YbGliLmgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjUwMjk6IGNoZWNraW5nIGZvciBYSU1UZXh0IGluIFgxMS9YbGliLmgiID4mNQorICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDUwMzEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CitFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgIlhJTVRleHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKK2Vsc2UKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm87IHhpbSBoYXMgYmVlbiBkaXNhYmxlZCIgMT4mNjsgZW5hYmxlX3hpbSA9ICJubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICBDUFBGTEFHUz0kY3BwZmxhZ3Nfc2F2ZQorCisgICAgaWYgdGVzdCAiJGVuYWJsZV94aW0iID0gImF1dG8iIC1hICIkZW5hYmxlX2hhbmd1bGlucHV0IiAhPSAieWVzIiBcCisJCS1hICJ4JEdVSVRZUEUiICE9ICJ4Tk9ORSIgOyB0aGVuCisgICAgZWNobyAiJGFjX3QiIlggR1VJIHNlbGVjdGVkOyB4aW0gaGFzIGJlZW4gZW5hYmxlZCIgMT4mNgorICAgIGVuYWJsZV94aW09InllcyIKKyAgZmkKK2ZpCisKK2lmIHRlc3QgLXogIiRTS0lQX0FUSEVOQSIgLW8gLXogIiRTS0lQX05FWFRBVyIgLW8gLXogIiRTS0lQX01PVElGIjsgdGhlbgorICBjcHBmbGFnc19zYXZlPSRDUFBGTEFHUworICBDUFBGTEFHUz0iJENQUEZMQUdTICRYX0NGTEFHUyIKKyAgZm9yIGFjX2hkciBpbiBYMTEvWG11L0VkaXRyZXMuaAorZG8KK2FjX3NhZmU9YGVjaG8gIiRhY19oZHIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19oZHIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjUwNjI6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1MDY3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwkYWNfaGRyPgorRU9GCithY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1MDcyOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAoraWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgorZWxzZQorICBlY2hvICIkYWNfZXJyIiA+JjUKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2hlYWRlcl8nJGFjX3NhZmVgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgICBhY190cl9oZHI9SEFWRV9gZWNobyAkYWNfaGRyIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRhY190cl9oZHIgMQorRU9GCisgCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK2RvbmUKKworICBDUFBGTEFHUz0kY3BwZmxhZ3Nfc2F2ZQorZmkKKworaWYgdGVzdCAteiAiJFNLSVBfTU9USUYiOyB0aGVuCisgIGNwcGZsYWdzX3NhdmU9JENQUEZMQUdTCisgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhfQ0ZMQUdTIgorICBmb3IgYWNfaGRyIGluIFhtL1htLmggWG0vWHBtUC5oCitkbworYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTEwODogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDUxMTMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZHI+CitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjUxMTg6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2hkcj1IQVZFX2BlY2hvICRhY19oZHIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGFjX3RyX2hkciAxCitFT0YKKyAKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorZG9uZQorCisgIENQUEZMQUdTPSRjcHBmbGFnc19zYXZlCitmaQorCitpZiB0ZXN0ICJ4JEdVSVRZUEUiID0gInhOT05FIiAtYSAiJGVuYWJsZV94aW0iID0gInllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIm5vIEdVSSBzZWxlY3RlZDsgeGltIGhhcyBiZWVuIGRpc2FibGVkIiAxPiY2CisgIGVuYWJsZV94aW09Im5vIgorZmkKK2lmIHRlc3QgIngkR1VJVFlQRSIgPSAieE5PTkUiIC1hICIkZW5hYmxlX2ZvbnRzZXQiID0gInllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIm5vIEdVSSBzZWxlY3RlZDsgZm9udHNldCBoYXMgYmVlbiBkaXNhYmxlZCIgMT4mNgorICBlbmFibGVfZm9udHNldD0ibm8iCitmaQoraWYgdGVzdCAieCRHVUlUWVBFOiRlbmFibGVfZm9udHNldCIgPSAieEdUSzp5ZXMiIC1hICIwJGd0a19tYWpvcl92ZXJzaW9uIiAtZ2UgMjsgdGhlbgorICBlY2hvICIkYWNfdCIiR1RLKyAyIEdVSSBzZWxlY3RlZDsgZm9udHNldCBoYXMgYmVlbiBkaXNhYmxlZCIgMT4mNgorICBlbmFibGVfZm9udHNldD0ibm8iCitmaQorCitpZiB0ZXN0IC16ICIkU0tJUF9CRU9TIjsgdGhlbgorICBHVUlUWVBFPUJFT1NHVUkKK2ZpCisKK2lmIHRlc3QgLXogIiRTS0lQX1BIT1RPTiI7IHRoZW4KKyAgR1VJVFlQRT1QSE9UT05HVUkKK2ZpCisKKworCisKKworCitpZiB0ZXN0ICIkZW5hYmxlX3dvcmtzaG9wIiA9ICJ5ZXMiIC1hIC1uICIkU0tJUF9NT1RJRiI7IHRoZW4KKyAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW5ub3QgdXNlIHdvcmtzaG9wIHdpdGhvdXQgTW90aWYiIDE+JjI7IGV4aXQgMTsgfQorZmkKKworaWYgdGVzdCAiJGVuYWJsZV94aW0iID0gInllcyI7IHRoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEZFQVRfWElNIDEKK0VPRgorCitmaQoraWYgdGVzdCAiJGVuYWJsZV9mb250c2V0IiA9ICJ5ZXMiOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBGRUFUX1hGT05UU0VUIDEKK0VPRgorCitmaQorCisKKworCitpZiB0ZXN0ICIkZW5hYmxlX2hhbmd1bGlucHV0IiA9ICJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgIngkR1VJVFlQRSIgPSAieE5PTkUiOyB0aGVuCisgICAgZWNobyAiJGFjX3QiIm5vIEdVSSBzZWxlY3RlZDsgaGFuZ3VsIGlucHV0IGhhcyBiZWVuIGRpc2FibGVkIiAxPiY2CisgICAgZW5hYmxlX2hhbmd1bGlucHV0PW5vCisgIGVsc2UKKyAgICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgRkVBVF9IQU5HVUxJTiAxCitFT0YKKworICAgIEhBTkdVTElOX1NSQz1oYW5ndWxpbi5jCisgICAgCisgICAgSEFOR1VMSU5fT0JKPW9iamVjdHMvaGFuZ3VsaW4ubworICAgIAorICBmaQorZmkKKworCitlY2hvICRhY19uICJjaGVja2luZyBxdWFsaXR5IG9mIHRvdXBwZXIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjUyMTE6IGNoZWNraW5nIHF1YWxpdHkgb2YgdG91cHBlciIgPiY1CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbSIgMT4mMjsgZXhpdCAxOyB9CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDUyMTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGN0eXBlLmg+CittYWluKCkgeyBleGl0KHRvdXBwZXIoJ0EnKSA9PSAnQScgJiYgdG9sb3dlcigneicpID09ICd6Jyk7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1MjIxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCit0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBCUk9LRU5fVE9VUFBFUiAxCitFT0YKKyBlY2hvICIkYWNfdCIiYmFkIiAxPiY2CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJnb29kIiAxPiY2CitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorZmkKKworCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIF9fREFURV9fIGFuZCBfX1RJTUVfXyB3b3JrIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MjM4OiBjaGVja2luZyB3aGV0aGVyIF9fREFURV9fIGFuZCBfX1RJTUVfXyB3b3JrIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDUyNDAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKK3ByaW50ZigiKCIgX19EQVRFX18gIiAiIF9fVElNRV9fICIpIik7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTI0NzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0RBVEVfVElNRSAxCitFT0YKKworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitybSAtZiBjb25mdGVzdCoKKworYWNfc2FmZT1gZWNobyAiZWxmLmgiIHwgc2VkICd5JS4vKy0lX19wXyUnYAorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGVsZi5oIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MjYzOiBjaGVja2luZyBmb3IgZWxmLmgiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDUyNjggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGVsZi5oPgorRU9GCithY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1MjczOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAoraWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgorZWxzZQorICBlY2hvICIkYWNfZXJyIiA+JjUKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2hlYWRlcl8nJGFjX3NhZmVgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgSEFTX0VMRj0xCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworaWYgdGVzdCAiJEhBU19FTEYiID0gMTsgdGhlbgorICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgbWFpbiBpbiAtbGVsZiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTI5NjogY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxlbGYiID4mNQorYWNfbGliX3Zhcj1gZWNobyBlbGYnXydtYWluIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGVsZiAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1MzA0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CittYWluKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1MzExOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIGVsZiB8IHNlZCAtZSAncy9bXmEtekEtWjAtOV9dL18vZycgXAorICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRhY190cl9saWIgMQorRU9GCisKKyAgTElCUz0iLWxlbGYgJExJQlMiCisKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCitmaQorCithY19oZWFkZXJfZGlyZW50PW5vCitmb3IgYWNfaGRyIGluIGRpcmVudC5oIHN5cy9uZGlyLmggc3lzL2Rpci5oIG5kaXIuaAorZG8KK2FjX3NhZmU9YGVjaG8gIiRhY19oZHIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19oZHIgdGhhdCBkZWZpbmVzIERJUiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTM0NTogY2hlY2tpbmcgZm9yICRhY19oZHIgdGhhdCBkZWZpbmVzIERJUiIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyX2RpcmVudF8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDUzNTAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPCRhY19oZHI+CitpbnQgbWFpbigpIHsKK0RJUiAqZGlycCA9IDA7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTM1ODogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl9kaXJlbnRfJGFjX3NhZmU9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfZGlyZW50XyRhY19zYWZlPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2hlYWRlcl9kaXJlbnRfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJGFjX2hkciB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfaGRyIDEKK0VPRgorIGFjX2hlYWRlcl9kaXJlbnQ9JGFjX2hkcjsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorZG9uZQorIyBUd28gdmVyc2lvbnMgb2Ygb3BlbmRpciBldCBhbC4gYXJlIGluIC1sZGlyIGFuZCAtbHggb24gU0NPIFhlbml4LgoraWYgdGVzdCAkYWNfaGVhZGVyX2RpcmVudCA9IGRpcmVudC5oOyB0aGVuCitlY2hvICRhY19uICJjaGVja2luZyBmb3Igb3BlbmRpciBpbiAtbGRpciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTM4MzogY2hlY2tpbmcgZm9yIG9wZW5kaXIgaW4gLWxkaXIiID4mNQorYWNfbGliX3Zhcj1gZWNobyBkaXInXydvcGVuZGlyIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGRpciAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1MzkxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgb3BlbmRpcigpOworCitpbnQgbWFpbigpIHsKK29wZW5kaXIoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU0MDI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIExJQlM9IiRMSUJTIC1sZGlyIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2Vsc2UKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBvcGVuZGlyIGluIC1seCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTQyNDogY2hlY2tpbmcgZm9yIG9wZW5kaXIgaW4gLWx4IiA+JjUKK2FjX2xpYl92YXI9YGVjaG8geCdfJ29wZW5kaXIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1seCAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1NDMyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgb3BlbmRpcigpOworCitpbnQgbWFpbigpIHsKK29wZW5kaXIoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU0NDM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIExJQlM9IiRMSUJTIC1seCIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCitmaQorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1NDY3OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyX3N0ZGMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1NDcyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorRU9GCithY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1NDgwOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAoraWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDU0OTcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICA6CitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTUxNSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CitFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICA6CitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgOgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1NTM2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2RlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQgbWFpbiAoKSB7IGludCBpOyBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCitpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpIHx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKSBleGl0KDIpOworZXhpdCAoMCk7IH0KKworRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU1NDc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK3RoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLWZyIGNvbmZ0ZXN0KgorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mciBjb25mdGVzdCoKK2ZpCisKK2ZpCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X2hlYWRlcl9zdGRjIiAxPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKK0VPRgorCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyBmb3Igc3lzL3dhaXQuaCB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTU3MTogY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl9zeXNfd2FpdF9oJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTU3NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpZm5kZWYgV0VYSVRTVEFUVVMKKyNkZWZpbmUgV0VYSVRTVEFUVVMoc3RhdF92YWwpICgodW5zaWduZWQpKHN0YXRfdmFsKSA+PiA4KQorI2VuZGlmCisjaWZuZGVmIFdJRkVYSVRFRAorI2RlZmluZSBXSUZFWElURUQoc3RhdF92YWwpICgoKHN0YXRfdmFsKSAmIDI1NSkgPT0gMCkKKyNlbmRpZgoraW50IG1haW4oKSB7CitpbnQgczsKK3dhaXQgKCZzKTsKK3MgPSBXSUZFWElURUQgKHMpID8gV0VYSVRTVEFUVVMgKHMpIDogMTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1NTkyOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfaGVhZGVyX3N5c193YWl0X2g9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oIiAxPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCA9IHllczsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDEKK0VPRgorCitmaQorCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oID0gbm87IHRoZW4KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBkZWZpbmVzIHVuaW9uIHdhaXQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU2MTU6IGNoZWNraW5nIGZvciBzeXMvd2FpdC5oIHRoYXQgZGVmaW5lcyB1bmlvbiB3YWl0IiA+JjUKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTYxNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KK2ludCBtYWluKCkgewordW5pb24gd2FpdCB4eCwgeXk7IHh4ID0geXkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1NjI0OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorCQkJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCitFT0YKKworCQkJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfVU5JT05fV0FJVCAxCitFT0YKKworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2ZvciBhY19oZHIgaW4gc3RkYXJnLmggc3RkbGliLmggc3RyaW5nLmggc3lzL3NlbGVjdC5oIHN5cy91dHNuYW1lLmggXAorCXRlcm1jYXAuaCBmY250bC5oIHNndHR5Lmggc3lzL2lvY3RsLmggc3lzL3RpbWUuaCB0ZXJtaW8uaCBcCisJaWNvbnYuaCBsYW5naW5mby5oIHVuaXN0ZC5oIHN0cm9wdHMuaCBlcnJuby5oIFwKKwlzeXMvcmVzb3VyY2UuaCBzeXMvc3lzdGVtaW5mby5oIGxvY2FsZS5oIFwKKwlzeXMvc3RyZWFtLmggc3lzL3B0ZW0uaCB0ZXJtaW9zLmggbGliYy5oIHN5cy9zdGF0ZnMuaCBcCisJcG9sbC5oIHN5cy9wb2xsLmggcHdkLmggdXRpbWUuaCBzeXMvcGFyYW0uaCBsaWJpbnRsLmggXAorCWxpYmdlbi5oIHV0aWwvZGVidWcuaCB1dGlsL21zZzE4bi5oIGZyYW1lLmggcHRocmVhZF9ucC5oIFwKKwlzeXMvYWNsLmggc3lzL2FjY2Vzcy5oIHN5cy9zeXNjdGwuaCBzeXMvc3lzaW5mby5oIHdjaGFyLmgKK2RvCithY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfaGRyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1NjU1OiBjaGVja2luZyBmb3IgJGFjX2hkciIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTY2MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JGFjX2hkcj4KK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6NTY2NTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJGFjX2hkciB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfaGRyIDEKK0VPRgorIAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitkb25lCisKKworaWYgdGVzdCAieCRNQUNPU1giICE9ICJ4eWVzIjsgdGhlbgorICBmb3IgYWNfaGRyIGluIHN0cmluZ3MuaAorZG8KK2FjX3NhZmU9YGVjaG8gIiRhY19oZHIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19oZHIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU2OTc6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1NzAyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwkYWNfaGRyPgorRU9GCithY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1NzA3OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAoraWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgorZWxzZQorICBlY2hvICIkYWNfZXJyIiA+JjUKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2hlYWRlcl8nJGFjX3NhZmVgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgICBhY190cl9oZHI9SEFWRV9gZWNobyAkYWNfaGRyIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRhY190cl9oZHIgMQorRU9GCisgCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK2RvbmUKKworZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgc3RyaW5ncy5oIGNhbiBiZSBpbmNsdWRlZCBhZnRlciBzdHJpbmcuaCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTczNjogY2hlY2tpbmcgaWYgc3RyaW5ncy5oIGNhbiBiZSBpbmNsdWRlZCBhZnRlciBzdHJpbmcuaCIgPiY1CitjcHBmbGFnc19zYXZlPSRDUFBGTEFHUworQ1BQRkxBR1M9IiRDUFBGTEFHUyAkWF9DRkxBR1MiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1NzQwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIGRlZmluZWQoX0FJWCkgJiYgIWRlZmluZWQoX0FJWDUxKSAmJiAhZGVmaW5lZChfTk9fUFJPVE8pCisjIGRlZmluZSBfTk9fUFJPVE8JLyogbGlrZSBpbiBvc191bml4LmgsIGNhdXNlcyBjb25mbGljdCBmb3IgQUlYIChXaW5uKSAqLworCQkJLyogYnV0IGRvbid0IGRvIGl0IG9uIEFJWCA1LjEgKFVyaWJhcnJpKSAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9YTV9YTV9ICisjIGluY2x1ZGUgPFhtL1htLmg+CS8qIFRoaXMgYnJlYWtzIGl0IGZvciBIUC1VWCAxMSAoU3F1YXNzYWJpYSkgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfU1RSSU5HU19IKQorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKwkJCitpbnQgbWFpbigpIHsKK2ludCBpOyBpID0gMDsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1NzYxOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTk9fU1RSSU5HU19XSVRIX1NUUklOR19IIDEKK0VPRgorCisJCWVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorQ1BQRkxBR1M9JGNwcGZsYWdzX3NhdmUKKworaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2MgPSB5ZXM7IHRoZW4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyICR7Q0MtY2N9IG5lZWRzIC10cmFkaXRpb25hbCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTc3OTogY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBuZWVkcyAtdHJhZGl0aW9uYWwiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgICBhY19wYXR0ZXJuPSJBdXRvY29uZi4qJ3gnIgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1Nzg1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzZ3R0eS5oPgorQXV0b2NvbmYgVElPQ0dFVFAKK0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcworZWxzZQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworICBpZiB0ZXN0ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCA9IG5vOyB0aGVuCisgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTgwMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8dGVybWlvLmg+CitBdXRvY29uZiBUQ0dFVEEKK0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsIiAxPiY2CisgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgQ0M9IiRDQyAtdHJhZGl0aW9uYWwiCisgIGZpCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyBmb3Igd29ya2luZyBjb25zdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTgyNTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgY29uc3QiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2NfY29uc3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1ODMwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKy8qIFVsdHJpeCBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCit0eXBlZGVmIGludCBjaGFyc2V0WzJdOyBjb25zdCBjaGFyc2V0IHg7CisvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworY2hhciBjb25zdCAqY29uc3QgKmNjcDsKK2NoYXIgKipwOworLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KK3N0cnVjdCBwb2ludCB7aW50IHgsIHk7fTsKK3N0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OworLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgSXQgZG9lcyBub3QgbGV0IHlvdSBzdWJ0cmFjdCBvbmUgY29uc3QgWCogcG9pbnRlciBmcm9tIGFub3RoZXIgaW4gYW4gYXJtCisgICBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQgaXMgbm90IGEgY29uc3RhbnQgZXhwcmVzc2lvbiAqLworY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworY2NwID0gJmcgKyAoZyA/IGctZyA6IDApOworLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKysrY2NwOworcCA9IChjaGFyKiopIGNjcDsKK2NjcCA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwOworeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgY2hhciAqdDsKKyAgY2hhciBjb25zdCAqcyA9IDAgPyAoY2hhciAqKSAwIDogKGNoYXIgY29uc3QgKikgMDsKKworICAqdCsrID0gMDsKK30KK3sgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgIGludCB4W10gPSB7MjUsIDE3fTsKKyAgY29uc3QgaW50ICpmb28gPSAmeFswXTsKKyAgKytmb287Cit9Cit7IC8qIFN1biBTQzEuMCBBTlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8KKyAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgIGlwdHIgcCA9IDA7CisgICsrcDsKK30KK3sgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzIHNheWluZworICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCisgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH07CisgIHN0cnVjdCBzICpiOyBiLT5qID0gNTsKK30KK3sgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgIGNvbnN0IGludCBmb28gPSAxMDsKK30KKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU4Nzk6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9jX2NvbnN0PXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9jX2NvbnN0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X2NfY29uc3QiIDE+JjYKK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgY29uc3QgCitFT0YKKworZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIG1vZGVfdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTkwMDogY2hlY2tpbmcgZm9yIG1vZGVfdCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9tb2RlX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1OTA1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBTVERDX0hFQURFUlMKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICIoXnxbXmEtekEtWl8wLTldKW1vZGVfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3R5cGVfbW9kZV90PXllcworZWxzZQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3R5cGVfbW9kZV90PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCitlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfbW9kZV90IiAxPiY2CitpZiB0ZXN0ICRhY19jdl90eXBlX21vZGVfdCA9IG5vOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBtb2RlX3QgaW50CitFT0YKKworZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIG9mZl90IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1OTMzOiBjaGVja2luZyBmb3Igb2ZmX3QiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfb2ZmX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1OTM4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBTVERDX0hFQURFUlMKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICIoXnxbXmEtekEtWl8wLTldKW9mZl90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfdHlwZV9vZmZfdD15ZXMKK2Vsc2UKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl90eXBlX29mZl90PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCitlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfb2ZmX3QiIDE+JjYKK2lmIHRlc3QgJGFjX2N2X3R5cGVfb2ZmX3QgPSBubzsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgb2ZmX3QgbG9uZworRU9GCisKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBwaWRfdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTk2NjogY2hlY2tpbmcgZm9yIHBpZF90IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3BpZF90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTk3MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKK0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSlwaWRfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3R5cGVfcGlkX3Q9eWVzCitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfdHlwZV9waWRfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX3BpZF90IiAxPiY2CitpZiB0ZXN0ICRhY19jdl90eXBlX3BpZF90ID0gbm87IHRoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIHBpZF90IGludAorRU9GCisKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBzaXplX3QiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU5OTk6IGNoZWNraW5nIGZvciBzaXplX3QiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfc2l6ZV90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjAwNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKK0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSlzaXplX3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl90eXBlX3NpemVfdD15ZXMKK2Vsc2UKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl90eXBlX3NpemVfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX3NpemVfdCIgMT4mNgoraWYgdGVzdCAkYWNfY3ZfdHlwZV9zaXplX3QgPSBubzsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgc2l6ZV90IHVuc2lnbmVkCitFT0YKKworZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHVpZF90IGluIHN5cy90eXBlcy5oIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2MDMyOiBjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmgiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfdWlkX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2MDM3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAidWlkX3QiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3R5cGVfdWlkX3Q9eWVzCitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfdHlwZV91aWRfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfdWlkX3QiIDE+JjYKK2lmIHRlc3QgJGFjX2N2X3R5cGVfdWlkX3QgPSBubzsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgdWlkX3QgaW50CitFT0YKKworICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgZ2lkX3QgaW50CitFT0YKKworZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYwNjY6IGNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfdGltZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDYwNzEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgoraW50IG1haW4oKSB7CitzdHJ1Y3QgdG0gKnRwOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjYwODA6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9oZWFkZXJfdGltZT15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfaGVhZGVyX3RpbWU9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfaGVhZGVyX3RpbWUiIDE+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQorRU9GCisKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbm9fdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjEwMTogY2hlY2tpbmcgZm9yIGlub190IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX2lub190JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjEwNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKK0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSlpbm9fdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3R5cGVfaW5vX3Q9eWVzCitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfdHlwZV9pbm9fdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX2lub190IiAxPiY2CitpZiB0ZXN0ICRhY19jdl90eXBlX2lub190ID0gbm87IHRoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIGlub190IGxvbmcKK0VPRgorCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGV2X3QiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYxMzQ6IGNoZWNraW5nIGZvciBkZXZfdCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9kZXZfdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDYxMzkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIFNURENfSEVBREVSUworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCitFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgIihefFteYS16QS1aXzAtOV0pZGV2X3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl90eXBlX2Rldl90PXllcworZWxzZQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3R5cGVfZGV2X3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKK2VjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV9kZXZfdCIgMT4mNgoraWYgdGVzdCAkYWNfY3ZfdHlwZV9kZXZfdCA9IG5vOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBkZXZfdCB1bnNpZ25lZAorRU9GCisKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHJsaW1fdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjE2ODogY2hlY2tpbmcgZm9yIHJsaW1fdCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9ybGltX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICIkYWNfdCIiKGNhY2hlZCkgJGFjX2N2X3R5cGVfcmxpbV90IiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDYxNzMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19SRVNPVVJDRV9ICisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjZW5kaWYKKwkgIAorRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICIoXnxbXmEtekEtWl8wLTldKXJsaW1fdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3R5cGVfcmxpbV90PXllcworZWxzZQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3R5cGVfcmxpbV90PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKwkgIGVjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV9ybGltX3QiIDE+JjYKK2ZpCitpZiB0ZXN0ICRhY19jdl90eXBlX3JsaW1fdCA9IG5vOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBybGltX3QgdW5zaWduZWQgbG9uZworRU9GCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyBmb3Igc3RhY2tfdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjIwNTogY2hlY2tpbmcgZm9yIHN0YWNrX3QiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfc3RhY2tfdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gIiRhY190IiIoY2FjaGVkKSAkYWNfY3ZfdHlwZV9zdGFja190IiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDYyMTAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKwkgIAorRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICJzdGFja190IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl90eXBlX3N0YWNrX3Q9eWVzCitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfdHlwZV9zdGFja190PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKwkgIGVjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV9zdGFja190IiAxPiY2CitmaQoraWYgdGVzdCAkYWNfY3ZfdHlwZV9zdGFja190ID0gbm87IHRoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIHN0YWNrX3Qgc3RydWN0IHNpZ2FsdHN0YWNrCitFT0YKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgc3RhY2tfdCBoYXMgYW4gc3NfYmFzZSBmaWVsZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjI0MDogY2hlY2tpbmcgd2hldGhlciBzdGFja190IGhhcyBhbiBzc19iYXNlIGZpZWxkIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDYyNDIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCQkJCitpbnQgbWFpbigpIHsKK3N0YWNrX3Qgc2lnc3RrOyBzaWdzdGsuc3NfYmFzZSA9IDA7IAorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjYyNTc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9TU19CQVNFIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitvbGlicz0iJExJQlMiCitlY2hvICRhY19uICJjaGVja2luZyAtLXdpdGgtdGxpYiBhcmd1bWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjI3MzogY2hlY2tpbmcgLS13aXRoLXRsaWIgYXJndW1lbnQiID4mNQorIyBDaGVjayB3aGV0aGVyIC0td2l0aC10bGliIG9yIC0td2l0aG91dC10bGliIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF90bGliK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3RsaWIiCisgIDoKK2ZpCisKK2lmIHRlc3QgLW4gIiR3aXRoX3RsaWIiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkd2l0aF90bGliIiAxPiY2CisgIExJQlM9IiRMSUJTIC1sJHdpdGhfdGxpYiIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiImF1dG9tYXRpYyB0ZXJtaW5hbCBsaWJyYXJ5IHNlbGVjdGlvbiIgMT4mNgorICAgICAgICAgICAgY2FzZSAiYHVuYW1lIC1zIDI+L2Rldi9udWxsYCIgaW4KKwlPU0YxKQl0bGlicz0ibmN1cnNlcyBjdXJzZXMgdGVybWxpYiB0ZXJtY2FwIjs7CisJKikJdGxpYnM9Im5jdXJzZXMgdGVybWxpYiB0ZXJtY2FwIGN1cnNlcyI7OworICBlc2FjCisgIGZvciBsaWJuYW1lIGluICR0bGliczsgZG8KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdGdldGVudCBpbiAtbCR7bGlibmFtZX0iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYyOTE6IGNoZWNraW5nIGZvciB0Z2V0ZW50IGluIC1sJHtsaWJuYW1lfSIgPiY1CithY19saWJfdmFyPWBlY2hvICR7bGlibmFtZX0nXyd0Z2V0ZW50IHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbCR7bGlibmFtZX0gICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjI5OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHRnZXRlbnQoKTsKKworaW50IG1haW4oKSB7Cit0Z2V0ZW50KCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2MzEwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKKyAgICAtZSAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfbGliIDEKK0VPRgorCisgIExJQlM9Ii1sJHtsaWJuYW1lfSAkTElCUyIKKworZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBpZiB0ZXN0ICJ4JG9saWJzIiAhPSAieCRMSUJTIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgcmVzPSJGQUlMIgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2MzQyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorbWFpbigpIHtjaGFyICpzOyBzPShjaGFyICopdGdvdG8oIiVwMSVkIiwgMCwgMSk7IGV4aXQoMCk7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2MzUwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCit0aGVuCisgIHJlcz0iT0siCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIHJlcz0iRkFJTCIKK2ZpCitybSAtZnIgY29uZnRlc3QqCitmaQorCisgICAgICBpZiB0ZXN0ICIkcmVzIiA9ICJPSyI7IHRoZW4KKwlicmVhaworICAgICAgZmkKKyAgICAgIGVjaG8gIiRhY190IiIkbGlibmFtZSBsaWJyYXJ5IGlzIG5vdCB1c2FibGUiIDE+JjYKKyAgICAgIExJQlM9IiRvbGlicyIKKyAgICBmaQorICBkb25lCitmaQoraWYgdGVzdCAieCRvbGlicyIgIT0gIngkTElCUyI7IHRoZW4KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB3ZSB0YWxrIHRlcm1pbmZvIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2MzcyOiBjaGVja2luZyB3aGV0aGVyIHdlIHRhbGsgdGVybWluZm8iID4mNQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbS4iIDE+JjI7IGV4aXQgMTsgfQorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2Mzc3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorbWFpbigpCit7Y2hhciAqczsgcz0oY2hhciAqKXRnb3RvKCIlcDElZCIsIDAsIDEpOyBleGl0KCFzdHJjbXAocz09MCA/ICIiIDogcywgIjEiKSk7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2Mzg2OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCit0aGVuCisgIGVjaG8gIiRhY190IiJubyAtLSB3ZSBhcmUgaW4gdGVybWNhcCBsYW5kIiAxPiY2CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMgLS0gdGVybWluZm8gc3Bva2VuIGhlcmUiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBURVJNSU5GTyAxCitFT0YKKworZmkKK3JtIC1mciBjb25mdGVzdCoKK2ZpCisKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vbmUgZm91bmQiIDE+JjYKK2ZpCisKK2lmIHRlc3QgIngkb2xpYnMiICE9ICJ4JExJQlMiOyB0aGVuCisgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoYXQgdGdldGVudCgpIHJldHVybnMgZm9yIGFuIHVua25vd24gdGVybWluYWwiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY0MDc6IGNoZWNraW5nIHdoYXQgdGdldGVudCgpIHJldHVybnMgZm9yIGFuIHVua25vd24gdGVybWluYWwiID4mNQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbS4iIDE+JjI7IGV4aXQgMTsgfQorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2NDEyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorbWFpbigpCit7Y2hhciBzWzEwMDAwXTsgaW50IHJlcyA9IHRnZXRlbnQocywgInRoaXN0ZXJtaW5hbGRvZXNub3RleGlzdCIpOyBleGl0KHJlcyAhPSAwKTsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY0MjE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK3RoZW4KKyAgZWNobyAiJGFjX3QiInplcm8iIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBUR0VURU5UX1pFUk9fRVJSIDAKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJub24temVybyIgMT4mNgorZmkKK3JtIC1mciBjb25mdGVzdCoKK2ZpCisKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGVybWNhcC5oIGNvbnRhaW5zIG9zcGVlZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjQzOTogY2hlY2tpbmcgd2hldGhlciB0ZXJtY2FwLmggY29udGFpbnMgb3NwZWVkIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY0NDEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWZkZWYgSEFWRV9URVJNQ0FQX0gKKyMgaW5jbHVkZSA8dGVybWNhcC5oPgorI2VuZGlmCisJCQkKK2ludCBtYWluKCkgeworb3NwZWVkID0gMjAwMDAKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2NDUyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9PU1BFRUQgMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisJZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBvc3BlZWQgY2FuIGJlIGV4dGVybiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjQ2NDogY2hlY2tpbmcgd2hldGhlciBvc3BlZWQgY2FuIGJlIGV4dGVybiIgPiY1CisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjQ2NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZmRlZiBIQVZFX1RFUk1DQVBfSAorIyBpbmNsdWRlIDx0ZXJtY2FwLmg+CisjZW5kaWYKK2V4dGVybiBzaG9ydCBvc3BlZWQ7CisJCQkKK2ludCBtYWluKCkgeworb3NwZWVkID0gMjAwMDAKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2NDc4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgT1NQRUVEX0VYVEVSTiAxCitFT0YKKworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkKK2ZpCitybSAtZiBjb25mdGVzdCoKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0ZXJtY2FwLmggY29udGFpbnMgVVAsIEJDIGFuZCBQQyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjQ5NjogY2hlY2tpbmcgd2hldGhlciB0ZXJtY2FwLmggY29udGFpbnMgVVAsIEJDIGFuZCBQQyIgPiY1CitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2NDk4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorCQkJCitpbnQgbWFpbigpIHsKK2lmIChVUCA9PSAwICYmIEJDID09IDApIFBDID0gMQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY1MDk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1VQX0JDX1BDIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorCWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgVVAsIEJDIGFuZCBQQyBjYW4gYmUgZXh0ZXJuIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NTIxOiBjaGVja2luZyB3aGV0aGVyIFVQLCBCQyBhbmQgUEMgY2FuIGJlIGV4dGVybiIgPiY1CisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjUyMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZmRlZiBIQVZFX1RFUk1DQVBfSAorIyBpbmNsdWRlIDx0ZXJtY2FwLmg+CisjZW5kaWYKK2V4dGVybiBjaGFyICpVUCwgKkJDLCBQQzsKKwkJCQoraW50IG1haW4oKSB7CitpZiAoVVAgPT0gMCAmJiBCQyA9PSAwKSBQQyA9IDEKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2NTM1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVBfQkNfUENfRVhURVJOIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRwdXRzKCkgdXNlcyBvdXRmdW50eXBlIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NTUzOiBjaGVja2luZyB3aGV0aGVyIHRwdXRzKCkgdXNlcyBvdXRmdW50eXBlIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY1NTUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWZkZWYgSEFWRV9URVJNQ0FQX0gKKyMgaW5jbHVkZSA8dGVybWNhcC5oPgorI2VuZGlmCisJCQkKK2ludCBtYWluKCkgeworZXh0ZXJuIGludCB4eCgpOyB0cHV0cygidGVzdCIsIDEsIChvdXRmdW50eXBlKXh4KQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY1NjY6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9PVVRGVU5UWVBFIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHN5cy9zZWxlY3QuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjU4MTogY2hlY2tpbmcgd2hldGhlciBzeXMvc2VsZWN0LmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjU4MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KK2ludCBtYWluKCkgeworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjU5MzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKwkJCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBTWVNfU0VMRUNUX1dJVEhfU1lTX1RJTUUgMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIC9kZXYvcHRjIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NjEwOiBjaGVja2luZyBmb3IgL2Rldi9wdGMiID4mNQoraWYgdGVzdCAtciAvZGV2L3B0YzsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9ERVZfUFRDIDEKK0VPRgorCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgU1ZSNCBwdHlzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NjIyOiBjaGVja2luZyBmb3IgU1ZSNCBwdHlzIiA+JjUKK2lmIHRlc3QgLWMgL2Rldi9wdG14IDsgdGhlbgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2NjI1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CitwdHNuYW1lKDApO2dyYW50cHQoMCk7dW5sb2NrcHQoMCk7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjYzMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfU1ZSNF9QVFlTIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBwdHlyYW5nZXMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY2NTA6IGNoZWNraW5nIGZvciBwdHlyYW5nZXMiID4mNQoraWYgdGVzdCAtZCAvZGV2L3B0eW0gOyB0aGVuCisgIHBkaXI9Jy9kZXYvcHR5bScKK2Vsc2UKKyAgcGRpcj0nL2RldicKK2ZpCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2NjU3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpZmRlZiBNX1VOSVgKKyAgIHllczsKKyNlbmRpZgorCQorRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIHB0eXM9YGVjaG8gL2Rldi9wdHlwPz9gCitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgcHR5cz1gZWNobyAkcGRpci9wdHk/P2AKK2ZpCitybSAtZiBjb25mdGVzdCoKKworaWYgdGVzdCAiJHB0eXMiICE9ICIkcGRpci9wdHk/PyIgOyB0aGVuCisgIHAwPWBlY2hvICRwdHlzIHwgdHIgJyAnICdcMDEyJyB8IHNlZCAtZSAncy9eLipcKC5cKS4kL1wxL2cnIHwgc29ydCAtdSB8IHRyIC1kICdcMDEyJ2AKKyAgcDE9YGVjaG8gJHB0eXMgfCB0ciAnICcgJ1wwMTInIHwgc2VkIC1lICdzL14uKlwoLlwpJC9cMS9nJyAgfCBzb3J0IC11IHwgdHIgLWQgJ1wwMTInYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBQVFlSQU5HRTAgIiRwMCIKK0VPRgorCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIFBUWVJBTkdFMSAiJHAxIgorRU9GCisKKyAgZWNobyAiJGFjX3QiIiRwMCAvICRwMSIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIiZG9uJ3Qga25vdyIgMT4mNgorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZGVmYXVsdCB0dHkgcGVybWlzc2lvbnMvZ3JvdXAiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY2OTE6IGNoZWNraW5nIGRlZmF1bHQgdHR5IHBlcm1pc3Npb25zL2dyb3VwIiA+JjUKK3JtIC1mIGNvbmZ0ZXN0X2dycAoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0iIDE+JjI7IGV4aXQgMTsgfQorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2Njk3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK21haW4oKQoreworICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgY2hhciAqeCwqdHR5bmFtZSgpOworICBpbnQgb20sIG07CisgIEZJTEUgKmZwOworCisgIGlmICghKHggPSB0dHluYW1lKDApKSkgZXhpdCgxKTsKKyAgaWYgKHN0YXQoeCwgJnNiKSkgZXhpdCgxKTsKKyAgb20gPSBzYi5zdF9tb2RlOworICBpZiAob20gJiAwMDIpIGV4aXQoMCk7CisgIG0gPSBzeXN0ZW0oIm1lc2cgeSIpOworICBpZiAobSA9PSAtMSB8fCBtID09IDEyNykgZXhpdCgxKTsKKyAgaWYgKHN0YXQoeCwgJnNiKSkgZXhpdCgxKTsKKyAgbSA9IHNiLnN0X21vZGU7CisgIGlmIChjaG1vZCh4LCBvbSkpIGV4aXQoMSk7CisgIGlmIChtICYgMDAyKSBleGl0KDApOworICBpZiAoc2Iuc3RfZ2lkID09IGdldGdpZCgpKSBleGl0KDEpOworICBpZiAoIShmcD1mb3BlbigiY29uZnRlc3RfZ3JwIiwgInciKSkpCisgICAgZXhpdCgxKTsKKyAgZnByaW50ZihmcCwgIiVkXG4iLCBzYi5zdF9naWQpOworICBmY2xvc2UoZnApOworICBleGl0KDApOworfQorCitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjcyOTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAordGhlbgorICAKKyAgICBpZiB0ZXN0IC1mIGNvbmZ0ZXN0X2dycDsgdGhlbgorCXB0eWdycD1gY2F0IGNvbmZ0ZXN0X2dycGAKKwllY2hvICIkYWNfdCIicHR5IG1vZGU6IDA2MjAsIGdyb3VwOiAkcHR5Z3JwIiAxPiY2CisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFBUWU1PREUgMDYyMAorRU9GCisKKwljYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBQVFlHUk9VUCAkcHR5Z3JwCitFT0YKKworICAgIGVsc2UKKwllY2hvICIkYWNfdCIicHR5cyBhcmUgd29ybGQgYWNjZXNzYWJsZSIgMT4mNgorICAgIGZpCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1mciBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiImNhbid0IGRldGVybWluZSAtIGFzc3VtZSBwdHlzIGFyZSB3b3JsZCBhY2Nlc3NhYmxlIiAxPiY2CitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorZmkKKworcm0gLWYgY29uZnRlc3RfZ3JwCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NzYwOiBjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfc2lnbmFsJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjc2NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaWZkZWYgc2lnbmFsCisjdW5kZWYgc2lnbmFsCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB2b2lkICgqc2lnbmFsIChpbnQsIHZvaWQgKCopKGludCkpKShpbnQpOworI2Vsc2UKK3ZvaWQgKCpzaWduYWwgKCkpICgpOworI2VuZGlmCisKK2ludCBtYWluKCkgeworaW50IGk7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Njc4MjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X3R5cGVfc2lnbmFsPXZvaWQKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfdHlwZV9zaWduYWw9aW50CitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfc2lnbmFsIiAxPiY2CitjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBSRVRTSUdUWVBFICRhY19jdl90eXBlX3NpZ25hbAorRU9GCisKKworCitpZiB0ZXN0ICRhY19jdl90eXBlX3NpZ25hbCA9IHZvaWQ7IHRoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFNJR1JFVFVSTiByZXR1cm4KK0VPRgorCitlbHNlCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBTSUdSRVRVUk4gcmV0dXJuIDAKK0VPRgorCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyBmb3Igc3RydWN0IHNpZ2NvbnRleHQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY4MTQ6IGNoZWNraW5nIGZvciBzdHJ1Y3Qgc2lnY29udGV4dCIgPiY1CitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2ODE2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHNpZ25hbC5oPgordGVzdF9zaWcoKQoreworICAgIHN0cnVjdCBzaWdjb250ZXh0ICpzY29udDsKKyAgICBzY29udCA9IChzdHJ1Y3Qgc2lnY29udGV4dCAqKTA7CisgICAgcmV0dXJuIDE7Cit9IAoraW50IG1haW4oKSB7CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2ODMwOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorCQljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9TSUdDT05URVhUIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitlY2hvICRhY19uICJjaGVja2luZyBnZXRjd2QgaW1wbGVtZW50YXRpb24iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY4NDY6IGNoZWNraW5nIGdldGN3ZCBpbXBsZW1lbnRhdGlvbiIgPiY1CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbSIgMT4mMjsgZXhpdCAxOyB9CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY4NTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitjaGFyICpkYWdnZXJbXSA9IHsgIklGUz1wd2QiLCAwIH07CittYWluKCkKK3sKKyAgY2hhciBidWZmZXJbNTAwXTsKKyAgZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworICBlbnZpcm9uID0gZGFnZ2VyOworICByZXR1cm4gZ2V0Y3dkKGJ1ZmZlciwgNTAwKSA/IDAgOiAxOworfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY4NjM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK3RoZW4KKyAgZWNobyAiJGFjX3QiIml0IGlzIHVzYWJsZSIgMT4mNgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLWZyIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIiaXQgc3RpbmtzIiAxPiY2CisJCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBCQURfR0VUQ1dEIDEKK0VPRgorCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorZmkKKworCitmb3IgYWNfZnVuYyBpbiBiY21wIGZjaGRpciBmY2hvd24gZnNlZWtvIGZzeW5jIGZ0ZWxsbyBnZXRjd2QgZ2V0cHNldWRvdHR5IFwKKwlnZXRwd25hbSBnZXRwd3VpZCBnZXRybGltaXQgZ2V0dGltZW9mZGF5IGdldHdkIGxzdGF0IG1lbWNtcCBcCisJbWVtc2V0IG5hbm9zbGVlcCBvcGVuZGlyIHB1dGVudiBxc29ydCByZWFkbGluayBzZWxlY3Qgc2V0ZW52IFwKKwlzZXRwZ2lkIHNldHNpZCBzaWdhbHRzdGFjayBzaWdzdGFjayBzaWdzZXQgc2lnc2V0am1wIHNpZ2FjdGlvbiBcCisJc2lndmVjIHNucHJpbnRmIHN0cmNhc2VjbXAgc3RyZXJyb3Igc3RyZnRpbWUgc3RyaWNtcCBzdHJuY2FzZWNtcCBcCisJc3RybmljbXAgc3RycGJyayBzdHJ0b2wgdGdldGVudCB0b3dsb3dlciB0b3d1cHBlciB1c2xlZXAgdXRpbWUgdXRpbWVzCitkbworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19mdW5jIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2ODg4OiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfJGFjX2Z1bmMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2ODkzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgJGFjX2Z1bmMoKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9rZSBtZQorI2Vsc2UKKyRhY19mdW5jKCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY5MTY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfJGFjX2Z1bmM9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jXyRhY19mdW5jPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18nJGFjX2Z1bmNgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgICBhY190cl9mdW5jPUhBVkVfYGVjaG8gJGFjX2Z1bmMgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRhY190cl9mdW5jIDEKK0VPRgorIAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitkb25lCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHN0X2Jsa3NpemUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY5NDI6IGNoZWNraW5nIGZvciBzdF9ibGtzaXplIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY5NDQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitpbnQgbWFpbigpIHsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgbjsKKworCXN0YXQoIi8iLCAmc3QpOworCW4gPSAoaW50KXN0LnN0X2Jsa3NpemU7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Njk1NjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1NUX0JMS1NJWkUgMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorcm0gLWYgY29uZnRlc3QqCisKK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgc3RhdCgpIGlnbm9yZXMgYSB0cmFpbGluZyBzbGFzaCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Njk3MTogY2hlY2tpbmcgd2hldGhlciBzdGF0KCkgaWdub3JlcyBhIHRyYWlsaW5nIHNsYXNoIiA+JjUKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtIiAxPiYyOyBleGl0IDE7IH0KK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjk3NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KK21haW4oKSB7c3RydWN0IHN0YXQgc3Q7ICBleGl0KHN0YXQoImNvbmZpZ3VyZS8iLCAmc3QpICE9IDApOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Njk4MjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAordGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgU1RBVF9JR05PUkVTX1NMQVNIIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mciBjb25mdGVzdCoKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGljb252X29wZW4oKSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Njk5OTogY2hlY2tpbmcgZm9yIGljb252X29wZW4oKSIgPiY1CitzYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExJQlMgLWxpY29udiIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDcwMDMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWZkZWYgSEFWRV9JQ09OVl9ICisjIGluY2x1ZGUgPGljb252Lmg+CisjZW5kaWYKKyAgICAKK2ludCBtYWluKCkgeworaWNvbnZfb3BlbigiZnIiLCAidG8iKTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MDE0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzOyB3aXRoIC1saWNvbnYiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0lDT05WIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzAyNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZmRlZiBIQVZFX0lDT05WX0gKKyMgaW5jbHVkZSA8aWNvbnYuaD4KKyNlbmRpZgorCQoraW50IG1haW4oKSB7CitpY29udl9vcGVuKCJmciIsICJ0byIpOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcwMzc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0lDT05WIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBubF9sYW5naW5mbyhDT0RFU0VUKSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzA1NTogY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvKENPREVTRVQpIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDcwNTcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWZkZWYgSEFWRV9MQU5HSU5GT19ICisjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisjZW5kaWYKKworaW50IG1haW4oKSB7CitjaGFyICpjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcwNjg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05MX0xBTkdJTkZPX0NPREVTRVQgMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorcm0gLWYgY29uZnRlc3QqCisKK2VjaG8gJGFjX24gImNoZWNraW5nIC0tZGlzYWJsZS1hY2wgYXJndW1lbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjcwODM6IGNoZWNraW5nIC0tZGlzYWJsZS1hY2wgYXJndW1lbnQiID4mNQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFjbCBvciAtLWRpc2FibGUtYWNsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2FjbCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfYWNsIgorICA6CitlbHNlCisgIGVuYWJsZV9hY2w9InllcyIKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfYWNsIiA9ICJ5ZXMiOyB0aGVuCitlY2hvICIkYWNfdCIibm8iIDE+JjYKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBhY2xfZ2V0X2ZpbGUgaW4gLWxwb3NpeDFlIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3MDk1OiBjaGVja2luZyBmb3IgYWNsX2dldF9maWxlIGluIC1scG9zaXgxZSIgPiY1CithY19saWJfdmFyPWBlY2hvIHBvc2l4MWUnXydhY2xfZ2V0X2ZpbGUgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1scG9zaXgxZSAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3MTAzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgYWNsX2dldF9maWxlKCk7CisKK2ludCBtYWluKCkgeworYWNsX2dldF9maWxlKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MTE0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBMSUJTPSIkTElCUyAtbHBvc2l4MWUiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGFjbF9nZXRfZmlsZSBpbiAtbGFjbCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzEzMzogY2hlY2tpbmcgZm9yIGFjbF9nZXRfZmlsZSBpbiAtbGFjbCIgPiY1CithY19saWJfdmFyPWBlY2hvIGFjbCdfJ2FjbF9nZXRfZmlsZSB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxhY2wgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzE0MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGFjbF9nZXRfZmlsZSgpOworCitpbnQgbWFpbigpIHsKK2FjbF9nZXRfZmlsZSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzE1MjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgTElCUz0iJExJQlMgLWxhY2wiCisJCSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGZnZXR4YXR0ciBpbiAtbGF0dHIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjcxNjk6IGNoZWNraW5nIGZvciBmZ2V0eGF0dHIgaW4gLWxhdHRyIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gYXR0cidfJ2ZnZXR4YXR0ciB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxhdHRyICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDcxNzcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBmZ2V0eGF0dHIoKTsKKworaW50IG1haW4oKSB7CitmZ2V0eGF0dHIoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcxODg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIExJQlM9IiRMSUJTIC1sYXR0ciIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZmkKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgUE9TSVggQUNMIHN1cHBvcnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjcyMTY6IGNoZWNraW5nIGZvciBQT1NJWCBBQ0wgc3VwcG9ydCIgPiY1CitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3MjE4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX0FDTF9ICisjIGluY2x1ZGUgPHN5cy9hY2wuaD4KKyNlbmRpZgorYWNsX3QgYWNsOworaW50IG1haW4oKSB7CithY2wgPSBhY2xfZ2V0X2ZpbGUoImZvbyIsIEFDTF9UWVBFX0FDQ0VTUyk7CisJYWNsX3NldF9maWxlKCJmb28iLCBBQ0xfVFlQRV9BQ0NFU1MsIGFjbCk7CisJYWNsX2ZyZWUoYWNsKTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MjMyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9QT1NJWF9BQ0wgMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorcm0gLWYgY29uZnRlc3QqCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBTb2xhcmlzIEFDTCBzdXBwb3J0IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3MjQ3OiBjaGVja2luZyBmb3IgU29sYXJpcyBBQ0wgc3VwcG9ydCIgPiY1CitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3MjQ5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmZGVmIEhBVkVfU1lTX0FDTF9ICisjIGluY2x1ZGUgPHN5cy9hY2wuaD4KKyNlbmRpZgoraW50IG1haW4oKSB7CithY2woImZvbyIsIEdFVEFDTENOVCwgMCwgTlVMTCk7CisJCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzI2MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfU09MQVJJU19BQ0wgMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorcm0gLWYgY29uZnRlc3QqCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBBSVggQUNMIHN1cHBvcnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjcyNzU6IGNoZWNraW5nIGZvciBBSVggQUNMIHN1cHBvcnQiID4mNQorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzI3NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZmRlZiBIQVZFX1NZU19BQ0xfSAorIyBpbmNsdWRlIDxzeXMvYWNsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19BQ0NFU1NfSAorIyBpbmNsdWRlIDxzeXMvYWNjZXNzLmg+CisjZW5kaWYKKyNkZWZpbmUgX0FMTF9TT1VSQ0UKKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKK2ludCBhY2xzaXplOworc3RydWN0IGFjbCAqYWNsZW50OworaW50IG1haW4oKSB7CithY2xzaXplID0gc2l6ZW9mKHN0cnVjdCBhY2wpOworCWFjbGVudCA9ICh2b2lkICopbWFsbG9jKGFjbHNpemUpOworCXN0YXRhY2woImZvbyIsIFNUWF9OT1JNQUwsIGFjbGVudCwgYWNsc2l6ZSk7CisJCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzI5OTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfQUlYX0FDTCAxCitFT0YKKworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitybSAtZiBjb25mdGVzdCoKK2Vsc2UKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgLS1kaXNhYmxlLWdwbSBhcmd1bWVudCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzMxNzogY2hlY2tpbmcgLS1kaXNhYmxlLWdwbSBhcmd1bWVudCIgPiY1CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ3BtIG9yIC0tZGlzYWJsZS1ncG0gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ3BtK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9ncG0iCisgIDoKK2Vsc2UKKyAgZW5hYmxlX2dwbT0ieWVzIgorZmkKKworCitpZiB0ZXN0ICIkZW5hYmxlX2dwbSIgPSAieWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZ3BtIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3MzMwOiBjaGVja2luZyBmb3IgZ3BtIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneyd2aV9jdl9oYXZlX2dwbScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIG9saWJzPSIkTElCUyIgOyBMSUJTPSItbGdwbSIKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3MzM2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxncG0uaD4KKwkgICAgI2luY2x1ZGUgPGxpbnV4L2tleWJvYXJkLmg+CitpbnQgbWFpbigpIHsKK0dwbV9HZXRMaWJWZXJzaW9uKE5VTEwpOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjczNDQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIAkgICAgCSAgICB2aV9jdl9oYXZlX2dwbT15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgdmlfY3ZfaGF2ZV9ncG09bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKwlMSUJTPSIkb2xpYnMiCisgICAgCitmaQorCitlY2hvICIkYWNfdCIiJHZpX2N2X2hhdmVfZ3BtIiAxPiY2CisgIGlmIHRlc3QgJHZpX2N2X2hhdmVfZ3BtID0geWVzOyB0aGVuCisgICAgTElCUz0iJExJQlMgLWxncG0iCisgICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfR1BNIDEKK0VPRgorCisgIGZpCitlbHNlCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKK2ZpCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciB2c25wcmludGYoKSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzM3MTogY2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIiA+JjUKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtIiAxPiYyOyBleGl0IDE7IH0KK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzM3NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCS8qIENoZWNrIHVzZSBvZiB2c25wcmludGYoKSAqLworCXZvaWQgd2FybihjaGFyICpmbXQsIC4uLik7CisJdm9pZCB3YXJuKGNoYXIgKmZtdCwgLi4uKQorCXsKKwkgIHZhX2xpc3QgYXA7IGNoYXIgYnVmWzIwXTsKKwkgIHZhX3N0YXJ0KGFwLCBmbXQpOworCSAgdnNucHJpbnRmKGJ1ZiwgMjAsIGZtdCwgYXApOworCSAgdmFfZW5kKGFwKTsKKwl9CisJbWFpbigpCisJeworCXdhcm4oInRlc3RpbmcgJXNcbiIsICJhIHZlcnkgbG9uZyBzdHJpbmcgdGhhdCB3b24ndCBmaXQiKTsKKwlleGl0KDApOworCX0KKwkgICAgCitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzM5NzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAordGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9WU05QUklOVEYgMQorRU9GCisgZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLWZyIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitybSAtZnIgY29uZnRlc3QqCitmaQorCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHJlbmFtZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzQxNTogY2hlY2tpbmcgZm9yIHJlbmFtZSIgPiY1CitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3NDE3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKSB7CityZW5hbWUoInRoaXMiLCAidGhhdCIpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzQyNDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfUkVOQU1FIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitlY2hvICRhY19uICJjaGVja2luZyBmb3Igc3lzY3RsIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3NDM5OiBjaGVja2luZyBmb3Igc3lzY3RsIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc0NDEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KK2ludCBtYWluKCkgeworCWludCBtaWJbMl0sIHI7CisJc2l6ZV90IGxlbjsKKworCW1pYlswXSA9IENUTF9IVzsKKwltaWJbMV0gPSBIV19VU0VSTUVNOworCWxlbiA9IHNpemVvZihyKTsKKwkodm9pZClzeXNjdGwobWliLCAyLCAmciwgJmxlbiwgKHZvaWQgKikwLCAoc2l6ZV90KTApOworCQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc0NTY6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9TWVNDVEwgMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vdCB1c2FibGUiIDE+JjYKK2ZpCitybSAtZiBjb25mdGVzdCoKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHN5c2luZm8iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc0NzE6IGNoZWNraW5nIGZvciBzeXNpbmZvIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc0NzMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNpbmZvLmg+CitpbnQgbWFpbigpIHsKKwlzdHJ1Y3Qgc3lzaW5mbyBzaW5mbzsKKwlpbnQgdDsKKworCSh2b2lkKXN5c2luZm8oJnNpbmZvKTsKKwl0ID0gc2luZm8udG90YWxyYW07CisJCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzQ4NjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7IGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1NZU0lORk8gMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vdCB1c2FibGUiIDE+JjYKK2ZpCitybSAtZiBjb25mdGVzdCoKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHN5c2NvbmYiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc1MDE6IGNoZWNraW5nIGZvciBzeXNjb25mIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc1MDMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgoraW50IG1haW4oKSB7CisJKHZvaWQpc3lzY29uZihfU0NfUEFHRVNJWkUpOworCSh2b2lkKXN5c2NvbmYoX1NDX1BIWVNfUEFHRVMpOworCQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc1MTI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OyBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9TWVNDT05GIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJub3QgdXNhYmxlIiAxPiY2CitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc1Mjg6IGNoZWNraW5nIHNpemUgb2YgaW50IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9zaXplb2ZfaW50JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0iIDE+JjI7IGV4aXQgMTsgfQorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3NTM2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorCQltYWluKCkKKwkJeworCQkgIEZJTEUgKmY9Zm9wZW4oImNvbmZ0ZXN0dmFsIiwgInciKTsKKwkJICBpZiAoIWYpIGV4aXQoMSk7CisJCSAgZnByaW50ZihmLCAiJWRcbiIsIChpbnQpc2l6ZW9mKGludCkpOworCQkgIGV4aXQoMCk7CisJCX0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NTQ3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCit0aGVuCisgIGFjX2N2X3NpemVvZl9pbnQ9YGNhdCBjb25mdGVzdHZhbGAKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1mciBjb25mdGVzdCoKKyAgYWNfY3Zfc2l6ZW9mX2ludD0wCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorZmkKKworZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9zaXplb2ZfaW50IiAxPiY2CitjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBTSVpFT0ZfSU5UICRhY19jdl9zaXplb2ZfaW50CitFT0YKKworCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIG1lbW1vdmUvYmNvcHkvbWVtY3B5IGhhbmRsZSBvdmVybGFwcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzU2ODogY2hlY2tpbmcgd2hldGhlciBtZW1tb3ZlL2Jjb3B5L21lbWNweSBoYW5kbGUgb3ZlcmxhcHMiID4mNQorYmNvcHlfdGVzdF9wcm9nPScKK21haW4oKSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgc3RyY3B5KGJ1ZiwgImFiY2RlZmdoaSIpOworICBtY2hfbWVtbW92ZShidWYsIGJ1ZiArIDIsIDMpOworICBpZiAoc3RybmNtcChidWYsICJhYmFiY2YiLCA2KSkKKyAgICBleGl0KDEpOworICBzdHJjcHkoYnVmLCAiYWJjZGVmZ2hpIik7CisgIG1jaF9tZW1tb3ZlKGJ1ZiArIDIsIGJ1ZiwgMyk7CisgIGlmIChzdHJuY21wKGJ1ZiwgImNkZWRlZiIsIDYpKQorICAgIGV4aXQoMSk7CisgIGV4aXQoMCk7IC8qIGxpYmMgdmVyc2lvbiB3b3JrcyBwcm9wZXJseS4gICovCit9JworCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtIiAxPiYyOyBleGl0IDE7IH0KK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzU4OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjZGVmaW5lIG1jaF9tZW1tb3ZlKHMsZCxsKSBtZW1tb3ZlKGQscyxsKSAkYmNvcHlfdGVzdF9wcm9nCitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzU5MjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAordGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFTUVNTU9WRSAxCitFT0YKKyBlY2hvICIkYWNfdCIibWVtbW92ZSBkb2VzIiAxPiY2CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtIiAxPiYyOyBleGl0IDE7IH0KK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzYwNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjZGVmaW5lIG1jaF9tZW1tb3ZlKHMsZCxsKSBiY29weShkLHMsbCkgJGJjb3B5X3Rlc3RfcHJvZworRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc2MTA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK3RoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRUJDT1BZIDEKK0VPRgorIGVjaG8gIiRhY190IiJiY29weSBkb2VzIiAxPiY2CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtIiAxPiYyOyBleGl0IDE7IH0KK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzYyNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjZGVmaW5lIG1jaF9tZW1tb3ZlKHMsZCxsKSBtZW1jcHkoZCxzLGwpICRiY29weV90ZXN0X3Byb2cKK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NjI4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCit0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VNRU1DUFkgMQorRU9GCisgZWNobyAiJGFjX3QiIm1lbWNweSBkb2VzIiAxPiY2CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mciBjb25mdGVzdCoKK2ZpCisKK2ZpCitybSAtZnIgY29uZnRlc3QqCitmaQorCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorZmkKKworCisKK2lmIHRlc3QgIiRlbmFibGVfbXVsdGlieXRlIiA9ICJ5ZXMiOyB0aGVuCisgIGNmbGFnc19zYXZlPSRDRkxBR1MKKyAgbGRmbGFnc19zYXZlPSRMREZMQUdTCisgIGlmIHRlc3QgLW4gIiR4X2luY2x1ZGVzIiA7IHRoZW4KKyAgICBDRkxBR1M9IiRDRkxBR1MgLUkkeF9pbmNsdWRlcyIKKyAgICBMREZMQUdTPSIkWF9MSUJTICRMREZMQUdTIC1sWDExIgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgWF9MT0NBTEUgbmVlZGVkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3NjYwOiBjaGVja2luZyB3aGV0aGVyIFhfTE9DQUxFIG5lZWRlZCIgPiY1CisgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzY2MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8WDExL1hsb2NhbGUuaD4KK2ludCBtYWluKCkgeworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzY2OTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc2NzIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBfWHNldGxvY2FsZSgpOworCitpbnQgbWFpbigpIHsKK19Yc2V0bG9jYWxlKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NjgzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisJCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBYX0xPQ0FMRSAxCitFT0YKKworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitybSAtZiBjb25mdGVzdCoKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorcm0gLWYgY29uZnRlc3QqCisgIGZpCisgIENGTEFHUz0kY2ZsYWdzX3NhdmUKKyAgTERGTEFHUz0kbGRmbGFnc19zYXZlCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgX3hwZzRfc2V0cnVuZWxvY2FsZSBpbiAtbHhwZzQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc3MTA6IGNoZWNraW5nIGZvciBfeHBnNF9zZXRydW5lbG9jYWxlIGluIC1seHBnNCIgPiY1CithY19saWJfdmFyPWBlY2hvIHhwZzQnXydfeHBnNF9zZXRydW5lbG9jYWxlIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbHhwZzQgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzcxOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIF94cGc0X3NldHJ1bmVsb2NhbGUoKTsKKworaW50IG1haW4oKSB7CitfeHBnNF9zZXRydW5lbG9jYWxlKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NzI5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBMSUJTPSIkTElCUyAtbHhwZzQiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworCitlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gY3JlYXRlIHRhZ3MiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc3NTE6IGNoZWNraW5nIGhvdyB0byBjcmVhdGUgdGFncyIgPiY1Cit0ZXN0IC1mIHRhZ3MgJiYgbXYgdGFncyB0YWdzLnNhdmUKK2lmIChldmFsIGN0YWdzIC0tdmVyc2lvbiAvZGV2L251bGwgfCBncmVwIEV4dWJlcmFudCkgPCAvZGV2L251bGwgMT4mNSAyPiYxOyB0aGVuCisgIFRBR1BSRz0iY3RhZ3MiCitlbHNlCisgIChldmFsIGV0YWdzCSAgIC9kZXYvbnVsbCkgPCAvZGV2L251bGwgMT4mNSAyPiYxICYmIFRBR1BSRz0iZXRhZ3MiCisgIChldmFsIGV0YWdzIC1jICAgL2Rldi9udWxsKSA8IC9kZXYvbnVsbCAxPiY1IDI+JjEgJiYgVEFHUFJHPSJldGFncyAtYyIKKyAgKGV2YWwgY3RhZ3MJICAgL2Rldi9udWxsKSA8IC9kZXYvbnVsbCAxPiY1IDI+JjEgJiYgVEFHUFJHPSJjdGFncyIKKyAgKGV2YWwgY3RhZ3MgLXQgICAvZGV2L251bGwpIDwgL2Rldi9udWxsIDE+JjUgMj4mMSAmJiBUQUdQUkc9ImN0YWdzIC10IgorICAoZXZhbCBjdGFncyAtdHMgIC9kZXYvbnVsbCkgPCAvZGV2L251bGwgMT4mNSAyPiYxICYmIFRBR1BSRz0iY3RhZ3MgLXRzIgorICAoZXZhbCBjdGFncyAtdHZzIC9kZXYvbnVsbCkgPCAvZGV2L251bGwgMT4mNSAyPiYxICYmIFRBR1BSRz0iY3RhZ3MgLXR2cyIKKyAgKGV2YWwgY3RhZ3MgLWkrbSAvZGV2L251bGwpIDwgL2Rldi9udWxsIDE+JjUgMj4mMSAmJiBUQUdQUkc9ImN0YWdzIC1pK20iCitmaQordGVzdCAtZiB0YWdzLnNhdmUgJiYgbXYgdGFncy5zYXZlIHRhZ3MKK2VjaG8gIiRhY190IiIkVEFHUFJHIiAxPiY2IAorCitlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIG1hbiB3aXRoIGEgc2VjdGlvbiBuciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Nzc2ODogY2hlY2tpbmcgaG93IHRvIHJ1biBtYW4gd2l0aCBhIHNlY3Rpb24gbnIiID4mNQorTUFOREVGPSJtYW4iCisoZXZhbCBtYW4gLXMgMiByZWFkKSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiY1ICYmIE1BTkRFRj0ibWFuIC1zIgorZWNobyAiJGFjX3QiIiRNQU5ERUYiIDE+JjYKK2lmIHRlc3QgIiRNQU5ERUYiID0gIm1hbiAtcyI7IHRoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRU1BTl9TIDEKK0VPRgorCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyAtLWRpc2FibGUtbmxzIGFyZ3VtZW50IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3NzgwOiBjaGVja2luZyAtLWRpc2FibGUtbmxzIGFyZ3VtZW50IiA+JjUKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ubHMgb3IgLS1kaXNhYmxlLW5scyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ubHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX25scyIKKyAgOgorZWxzZQorICBlbmFibGVfbmxzPSJ5ZXMiCitmaQorCisKK2lmIHRlc3QgIiRlbmFibGVfbmxzIiA9ICJ5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc3OTU6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19NU0dGTVQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTVNHRk1UIjsgdGhlbgorICBhY19jdl9wcm9nX01TR0ZNVD0iJE1TR0ZNVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3Byb2dfTVNHRk1UPSJtc2dmbXQiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK01TR0ZNVD0iJGFjX2N2X3Byb2dfTVNHRk1UIgoraWYgdGVzdCAtbiAiJE1TR0ZNVCI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRNU0dGTVQiIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBOTFMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc4MjI6IGNoZWNraW5nIGZvciBOTFMiID4mNQorICBpZiB0ZXN0IC1mIHBvL01ha2VmaWxlOyB0aGVuCisgICAgaGF2ZV9nZXR0ZXh0PSJubyIKKyAgICBpZiB0ZXN0IC1uICIkTVNHRk1UIjsgdGhlbgorICAgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzgyNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8bGliaW50bC5oPgoraW50IG1haW4oKSB7CitnZXR0ZXh0KCJUZXN0Iik7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzgzNDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiImdldHRleHQoKSB3b3JrcyIgMT4mNjsgaGF2ZV9nZXR0ZXh0PSJ5ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIG9saWJzPSRMSUJTCisJICBMSUJTPSIkTElCUyAtbGludGwiCisJICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3ODQ0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CitpbnQgbWFpbigpIHsKK2dldHRleHQoIlRlc3QiKTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3ODUxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIiZ2V0dGV4dCgpIHdvcmtzIHdpdGggLWxpbnRsIiAxPiY2OyBoYXZlX2dldHRleHQ9InllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiImdldHRleHQoKSBkb2Vzbid0IHdvcmsiIDE+JjY7CisJICAgICAgTElCUz0kb2xpYnMKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgICBlbHNlCisgICAgICBlY2hvICIkYWNfdCIibXNnZm10IG5vdCBmb3VuZCAtIGRpc2FibGVkIiAxPiY2OworICAgIGZpCisgICAgaWYgdGVzdCAkaGF2ZV9nZXR0ZXh0ID0gInllcyI7IHRoZW4KKyAgICAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0dFVFRFWFQgMQorRU9GCisKKyAgICAgIE1BS0VNTz15ZXMKKyAgICAgIAorICAgICAgICAgICAgZm9yIGFjX2Z1bmMgaW4gYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKK2RvCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2Z1bmMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc4Nzc6IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY18kYWNfZnVuYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc4ODIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciAkYWNfZnVuYygpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKK2Nob2tlIG1lCisjZWxzZQorJGFjX2Z1bmMoKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzkwNTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY18kYWNfZnVuYz15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfJGFjX2Z1bmM9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXyckYWNfZnVuY2BcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2Z1bmM9SEFWRV9gZWNobyAkYWNfZnVuYyB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2AKKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGFjX3RyX2Z1bmMgMQorRU9GCisgCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK2RvbmUKKworICAgICAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIF9ubF9tc2dfY2F0X2NudHIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc5MzA6IGNoZWNraW5nIGZvciBfbmxfbXNnX2NhdF9jbnRyIiA+JjUKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc5MzIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGxpYmludGwuaD4KKwkJZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworaW50IG1haW4oKSB7CisrK19ubF9tc2dfY2F0X2NudHI7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Nzk0MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkxfTVNHX0NBVF9DTlRSIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkYWNfdCIibm8gInBvL01ha2VmaWxlIiAtIGRpc2FibGVkIiAxPiY2OworICBmaQorZWxzZQorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CitmaQorCithY19zYWZlPWBlY2hvICJkbGZjbi5oIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBkbGZjbi5oIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3OTYzOiBjaGVja2luZyBmb3IgZGxmY24uaCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzk2OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8ZGxmY24uaD4KK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6Nzk3MzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIERMTD1kbGZjbi5oCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorYWNfc2FmZT1gZWNobyAiZGwuaCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGwuaCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Nzk5NDogY2hlY2tpbmcgZm9yIGRsLmgiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc5OTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGRsLmg+CitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjgwMDQ6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBETEw9ZGwuaAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK2ZpCisKK2lmIHRlc3QgeCR7RExMfSA9IHhkbGZjbi5oOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0RMRkNOX0ggMQorRU9GCisKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGRsb3BlbigpIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo4MDMzOiBjaGVja2luZyBmb3IgZGxvcGVuKCkiID4mNQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA4MDM1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKwkJZXh0ZXJuIHZvaWQqIGRsb3BlbigpOworCQlkbG9wZW4oKTsKKyAgICAgIAorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjgwNDU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjY7CisJICAgICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfRExPUEVOIDEKK0VPRgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNjsKKwkgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGxvcGVuKCkgaW4gLWxkbCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6ODA1ODogY2hlY2tpbmcgZm9yIGRsb3BlbigpIGluIC1sZGwiID4mNQorCSAgICAgIG9saWJzPSRMSUJTCisJICAgICAgTElCUz0iJExJQlMgLWxkbCIKKwkgICAgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA4MDYyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKwkJCQlleHRlcm4gdm9pZCogZGxvcGVuKCk7CisJCQkJZGxvcGVuKCk7CisJCSAKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MDcyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OworCQkJICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9ETE9QRU4gMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2OworCQkJICBMSUJTPSRvbGlicworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGRsc3ltKCkiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjgwOTA6IGNoZWNraW5nIGZvciBkbHN5bSgpIiA+JjUKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgODA5MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCisJCWV4dGVybiB2b2lkKiBkbHN5bSgpOworCQlkbHN5bSgpOworICAgICAgCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODEwMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsKKwkgICAgICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9ETFNZTSAxCitFT0YKKworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjY7CisJICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGRsc3ltKCkgaW4gLWxkbCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6ODExNTogY2hlY2tpbmcgZm9yIGRsc3ltKCkgaW4gLWxkbCIgPiY1CisJICAgICAgb2xpYnM9JExJQlMKKwkgICAgICBMSUJTPSIkTElCUyAtbGRsIgorCSAgICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDgxMTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKKworCQkJCWV4dGVybiB2b2lkKiBkbHN5bSgpOworCQkJCWRsc3ltKCk7CisJCSAKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MTI5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OworCQkJICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9ETFNZTSAxCitFT0YKKworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjY7CisJCQkgIExJQlM9JG9saWJzCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorcm0gLWYgY29uZnRlc3QqCitlbGlmIHRlc3QgeCR7RExMfSA9IHhkbC5oOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0RMX0ggMQorRU9GCisKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkKCkiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjgxNTI6IGNoZWNraW5nIGZvciBzaGxfbG9hZCgpIiA+JjUKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgODE1NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCisJCWV4dGVybiB2b2lkKiBzaGxfbG9hZCgpOworCQlzaGxfbG9hZCgpOworICAgICAKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MTY0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2OworCSAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfU0hMX0xPQUQgMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2OworCSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkKCkgaW4gLWxkbGQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjgxNzc6IGNoZWNraW5nIGZvciBzaGxfbG9hZCgpIGluIC1sZGxkIiA+JjUKKwkgIG9saWJzPSRMSUJTCisJICBMSUJTPSIkTElCUyAtbGRsZCIKKwkgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDgxODEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKKworCQkJZXh0ZXJuIHZvaWQqIHNobF9sb2FkKCk7CisJCQlzaGxfbG9hZCgpOworCSAgICAgCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODE5MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNjsKKwkJICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9TSExfTE9BRCAxCitFT0YKKworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjY7CisJCSAgTElCUz0kb2xpYnMKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitmb3IgYWNfaGRyIGluIHNldGptcC5oCitkbworYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6ODIxMzogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDgyMTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZHI+CitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjgyMjM6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2hkcj1IQVZFX2BlY2hvICRhY19oZHIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGFjX3RyX2hkciAxCitFT0YKKyAKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorZG9uZQorCisKK2lmIHRlc3QgIngkTUFDT1NYIiA9ICJ4eWVzIiAtYSAtbiAiJFBFUkwiOyB0aGVuCisgICAgaWYgZWNobyAkTElCUyB8IGdyZXAgLWUgJy1sZGwnID4vZGV2L251bGw7IHRoZW4KKyAgICBMSUJTPWBlY2hvICRMSUJTIHwgc2VkIHMvLWxkbC8vYAorICAgIFBFUkxfTElCUz0iJFBFUkxfTElCUyAtbGRsIgorICBmaQorZmkKKworaWYgdGVzdCAieCRNQUNPU1giID0gInh5ZXMiICYmIHRlc3QgIngkQ0FSQk9OIiA9ICJ4eWVzIiBcCisJJiYgdGVzdCAieCRHVUlUWVBFIiAhPSAieENBUkJPTkdVSSI7IHRoZW4KKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBuZWVkIC1mcmFtZXdvcmsgQ2FyYm9uIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo4MjYwOiBjaGVja2luZyB3aGV0aGVyIHdlIG5lZWQgLWZyYW1ld29yayBDYXJib24iID4mNQorICAgIGlmIHRlc3QgIngkZW5hYmxlX211bHRpYnl0ZSIgPSAieHllcyIgfHwgdGVzdCAieCRmZWF0dXJlcyIgPT0gInhiaWciIFwKKwl8fCB0ZXN0ICJ4JGZlYXR1cmVzIiA9ICJ4aHVnZSI7IHRoZW4KKyAgICBMSUJTPSIkTElCUyAtZnJhbWV3b3JrIENhcmJvbiIKKyAgICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGVsc2UKKyAgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKyAgZmkKK2ZpCisKKwordHJhcCAnJyAxIDIgMTUKK2NhdCA+IGNvbmZjYWNoZSA8PFxFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLiAgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLgorIyBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndCB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIEJ5IGRlZmF1bHQsIGNvbmZpZ3VyZSB1c2VzIC4vY29uZmlnLmNhY2hlIGFzIHRoZSBjYWNoZSBmaWxlLAorIyBjcmVhdGluZyBpdCBpZiBpdCBkb2VzIG5vdCBleGlzdCBhbHJlYWR5LiAgWW91IGNhbiBnaXZlIGNvbmZpZ3VyZQorIyB0aGUgLS1jYWNoZS1maWxlPUZJTEUgb3B0aW9uIHRvIHVzZSBhIGRpZmZlcmVudCBjYWNoZSBmaWxlOyB0aGF0IGlzCisjIHdoYXQgY29uZmlndXJlIGRvZXMgd2hlbiBpdCBjYWxscyBjb25maWd1cmUgc2NyaXB0cyBpbgorIyBzdWJkaXJlY3Rvcmllcywgc28gdGhleSBzaGFyZSB0aGUgY2FjaGUuCisjIEdpdmluZyAtLWNhY2hlLWZpbGU9L2Rldi9udWxsIGRpc2FibGVzIGNhY2hpbmcsIGZvciBkZWJ1Z2dpbmcgY29uZmlndXJlLgorIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQgdGhlCisjIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworRU9GCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIGRvbid0IHB1dCBuZXdsaW5lcyBpbiBjYWNoZSB2YXJpYWJsZXMnIHZhbHVlcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKyhzZXQpIDI+JjEgfAorICBjYXNlIGAoYWNfc3BhY2U9JyAnOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgorICAqYWNfc3BhY2U9XCAqKQorICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUgc3Vic3RpdHV0aW9uCisgICAgIyB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcKS4KKyAgICBzZWQgLW4gXAorICAgICAgLWUgInMvJy8nXFxcXCcnL2ciIFwKKyAgICAgIC1lICJzL15cXChbYS16QS1aMC05X10qX2N2X1thLXpBLVowLTlfXSpcXCk9XFwoLipcXCkvXFwxPVwke1xcMT0nXFwyJ30vcCIKKyAgICA7OworICAqKQorICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgc2VkIC1uIC1lICdzL15cKFthLXpBLVowLTlfXSpfY3ZfW2EtekEtWjAtOV9dKlwpPVwoLipcKS9cMT0ke1wxPVwyfS9wJworICAgIDs7CisgIGVzYWMgPj4gY29uZmNhY2hlCitpZiBjbXAgLXMgJGNhY2hlX2ZpbGUgY29uZmNhY2hlOyB0aGVuCisgIDoKK2Vsc2UKKyAgaWYgdGVzdCAtdyAkY2FjaGVfZmlsZTsgdGhlbgorICAgIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorICAgIGNhdCBjb25mY2FjaGUgPiAkY2FjaGVfZmlsZQorICBlbHNlCisgICAgZWNobyAibm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiCisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKK3RyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1CisKK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworCisjIEFueSBhc3NpZ25tZW50IHRvIFZQQVRIIGNhdXNlcyBTdW4gbWFrZSB0byBvbmx5IGV4ZWN1dGUKKyMgdGhlIGZpcnN0IHNldCBvZiBkb3VibGUtY29sb24gcnVsZXMsIHNvIHJlbW92ZSBpdCBpZiBub3QgbmVlZGVkLgorIyBJZiB0aGVyZSBpcyBhIGNvbG9uIGluIHRoZSBwYXRoLCB3ZSBuZWVkIHRvIGtlZXAgaXQuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9W146XSokL2QnCitmaQorCit0cmFwICdybSAtZiAkQ09ORklHX1NUQVRVUyBjb25mdGVzdCo7IGV4aXQgMScgMSAyIDE1CisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKKyMgV2l0aG91dCB0aGUgIi4vIiwgc29tZSBzaGVsbHMgbG9vayBpbiBQQVRIIGZvciBjb25maWcuc3RhdHVzLgorOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorCitlY2hvIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTCitybSAtZiAkQ09ORklHX1NUQVRVUworY2F0ID4gJENPTkZJR19TVEFUVVMgPDxFT0YKKyMhIC9iaW4vc2gKKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIFRoaXMgZGlyZWN0b3J5IHdhcyBjb25maWd1cmVkIGFzIGZvbGxvd3MsCisjIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIworIyAkMCAkYWNfY29uZmlndXJlX2FyZ3MKKyMKKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyMgY29uZmlndXJlLCBpcyBpbiBhdXRvL2NvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgorCithY19jc191c2FnZT0iVXNhZ2U6ICRDT05GSUdfU1RBVFVTIFstLXJlY2hlY2tdIFstLXZlcnNpb25dIFstLWhlbHBdIgorZm9yIGFjX29wdGlvbgorZG8KKyAgY2FzZSAiXCRhY19vcHRpb24iIGluCisgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgIGVjaG8gInJ1bm5pbmcgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIKKyAgICBleGVjIFwke0NPTkZJR19TSEVMTC0vYmluL3NofSAkMCAkYWNfY29uZmlndXJlX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24gOzsKKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYpCisgICAgZWNobyAiJENPTkZJR19TVEFUVVMgZ2VuZXJhdGVkIGJ5IGF1dG9jb25mIHZlcnNpb24gMi4xMyIKKyAgICBleGl0IDAgOzsKKyAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtLWgpCisgICAgZWNobyAiXCRhY19jc191c2FnZSI7IGV4aXQgMCA7OworICAqKSBlY2hvICJcJGFjX2NzX3VzYWdlIjsgZXhpdCAxIDs7CisgIGVzYWMKK2RvbmUKKworYWNfZ2l2ZW5fc3JjZGlyPSRzcmNkaXIKKwordHJhcCAncm0gLWZyIGBlY2hvICJhdXRvL2NvbmZpZy5tazpjb25maWcubWsuaW4gYXV0by9jb25maWcuaDpjb25maWcuaC5pbiIgfCBzZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQorRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKworIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4KK3NlZCAncy8lQC9AQC87IHMvQCUvQEAvOyBzLyVnXCQvQGcvOyAvQGdcJC9zL1tcXFxcJiVdL1xcXFwmL2c7Cisgcy9AQC8lQC87IHMvQEAvQCUvOyBzL0BnXCQvJWcvJyA+IGNvbmZ0ZXN0LnN1YnMgPDxcXENFT0YKKyRhY192cHN1YgorJGV4dHJhc3ViCitzJUBTSEVMTEAlJFNIRUxMJWcKK3MlQENGTEFHU0AlJENGTEFHUyVnCitzJUBDUFBGTEFHU0AlJENQUEZMQUdTJWcKK3MlQENYWEZMQUdTQCUkQ1hYRkxBR1MlZworcyVARkZMQUdTQCUkRkZMQUdTJWcKK3MlQERFRlNAJSRERUZTJWcKK3MlQExERkxBR1NAJSRMREZMQUdTJWcKK3MlQExJQlNAJSRMSUJTJWcKK3MlQGV4ZWNfcHJlZml4QCUkZXhlY19wcmVmaXglZworcyVAcHJlZml4QCUkcHJlZml4JWcKK3MlQHByb2dyYW1fdHJhbnNmb3JtX25hbWVAJSRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lJWcKK3MlQGJpbmRpckAlJGJpbmRpciVnCitzJUBzYmluZGlyQCUkc2JpbmRpciVnCitzJUBsaWJleGVjZGlyQCUkbGliZXhlY2RpciVnCitzJUBkYXRhZGlyQCUkZGF0YWRpciVnCitzJUBzeXNjb25mZGlyQCUkc3lzY29uZmRpciVnCitzJUBzaGFyZWRzdGF0ZWRpckAlJHNoYXJlZHN0YXRlZGlyJWcKK3MlQGxvY2Fsc3RhdGVkaXJAJSRsb2NhbHN0YXRlZGlyJWcKK3MlQGxpYmRpckAlJGxpYmRpciVnCitzJUBpbmNsdWRlZGlyQCUkaW5jbHVkZWRpciVnCitzJUBvbGRpbmNsdWRlZGlyQCUkb2xkaW5jbHVkZWRpciVnCitzJUBpbmZvZGlyQCUkaW5mb2RpciVnCitzJUBtYW5kaXJAJSRtYW5kaXIlZworcyVAU0VUX01BS0VAJSRTRVRfTUFLRSVnCitzJUBDQ0AlJENDJWcKK3MlQENQUEAlJENQUCVnCitzJUBBV0tAJSRBV0slZworcyVAU1RSSVBAJSRTVFJJUCVnCitzJUBFWEVFWFRAJSRFWEVFWFQlZworcyVAQ1BQX01NQCUkQ1BQX01NJWcKK3MlQE9TX0VYVFJBX1NSQ0AlJE9TX0VYVFJBX1NSQyVnCitzJUBPU19FWFRSQV9PQkpAJSRPU19FWFRSQV9PQkolZworcyVAVklNTkFNRUAlJFZJTU5BTUUlZworcyVARVhOQU1FQCUkRVhOQU1FJWcKK3MlQFZJRVdOQU1FQCUkVklFV05BTUUlZworcyVAbGluZV9icmVha0AlJGxpbmVfYnJlYWslZworcyVAZG92aW1kaWZmQCUkZG92aW1kaWZmJWcKK3MlQGRvZ3ZpbWRpZmZAJSRkb2d2aW1kaWZmJWcKK3MlQGNvbXBpbGVkYnlAJSRjb21waWxlZGJ5JWcKK3MlQHZpX2N2X3BhdGhfcGVybEAlJHZpX2N2X3BhdGhfcGVybCVnCitzJUB2aV9jdl9wZXJsbGliQCUkdmlfY3ZfcGVybGxpYiVnCitzJUBzaHJwZW52QCUkc2hycGVudiVnCitzJUBQRVJMX1NSQ0AlJFBFUkxfU1JDJWcKK3MlQFBFUkxfT0JKQCUkUEVSTF9PQkolZworcyVAUEVSTF9QUk9AJSRQRVJMX1BSTyVnCitzJUBQRVJMX0NGTEFHU0AlJFBFUkxfQ0ZMQUdTJWcKK3MlQFBFUkxfTElCU0AlJFBFUkxfTElCUyVnCitzJUB2aV9jdl9wYXRoX3B5dGhvbkAlJHZpX2N2X3BhdGhfcHl0aG9uJWcKK3MlQFBZVEhPTl9DT05GRElSQCUkUFlUSE9OX0NPTkZESVIlZworcyVAUFlUSE9OX0xJQlNAJSRQWVRIT05fTElCUyVnCitzJUBQWVRIT05fR0VUUEFUSF9DRkxBR1NAJSRQWVRIT05fR0VUUEFUSF9DRkxBR1MlZworcyVAUFlUSE9OX0NGTEFHU0AlJFBZVEhPTl9DRkxBR1MlZworcyVAUFlUSE9OX1NSQ0AlJFBZVEhPTl9TUkMlZworcyVAUFlUSE9OX09CSkAlJFBZVEhPTl9PQkolZworcyVAdmlfY3ZfcGF0aF90Y2xAJSR2aV9jdl9wYXRoX3RjbCVnCitzJUBUQ0xfU1JDQCUkVENMX1NSQyVnCitzJUBUQ0xfT0JKQCUkVENMX09CSiVnCitzJUBUQ0xfUFJPQCUkVENMX1BSTyVnCitzJUBUQ0xfQ0ZMQUdTQCUkVENMX0NGTEFHUyVnCitzJUBUQ0xfTElCU0AlJFRDTF9MSUJTJWcKK3MlQHZpX2N2X3BhdGhfcnVieUAlJHZpX2N2X3BhdGhfcnVieSVnCitzJUBSVUJZX1NSQ0AlJFJVQllfU1JDJWcKK3MlQFJVQllfT0JKQCUkUlVCWV9PQkolZworcyVAUlVCWV9QUk9AJSRSVUJZX1BSTyVnCitzJUBSVUJZX0NGTEFHU0AlJFJVQllfQ0ZMQUdTJWcKK3MlQFJVQllfTElCU0AlJFJVQllfTElCUyVnCitzJUBXT1JLU0hPUF9TUkNAJSRXT1JLU0hPUF9TUkMlZworcyVAV09SS1NIT1BfT0JKQCUkV09SS1NIT1BfT0JKJWcKK3MlQE5FVEJFQU5TX1NSQ0AlJE5FVEJFQU5TX1NSQyVnCitzJUBORVRCRUFOU19PQkpAJSRORVRCRUFOU19PQkolZworcyVAU05JRkZfU1JDQCUkU05JRkZfU1JDJWcKK3MlQFNOSUZGX09CSkAlJFNOSUZGX09CSiVnCitzJUB4bWttZnBhdGhAJSR4bWttZnBhdGglZworcyVAWF9DRkxBR1NAJSRYX0NGTEFHUyVnCitzJUBYX1BSRV9MSUJTQCUkWF9QUkVfTElCUyVnCitzJUBYX0xJQlNAJSRYX0xJQlMlZworcyVAWF9FWFRSQV9MSUJTQCUkWF9FWFRSQV9MSUJTJWcKK3MlQFhfTElCQCUkWF9MSUIlZworcyVAR1RLX0NPTkZJR0AlJEdUS19DT05GSUclZworcyVAR1RLMTJfQ09ORklHQCUkR1RLMTJfQ09ORklHJWcKK3MlQFBLR19DT05GSUdAJSRQS0dfQ09ORklHJWcKK3MlQEdUS19DRkxBR1NAJSRHVEtfQ0ZMQUdTJWcKK3MlQEdUS19MSUJTQCUkR1RLX0xJQlMlZworcyVAR1RLX0xJQk5BTUVAJSRHVEtfTElCTkFNRSVnCitzJUBHTk9NRV9MSUJTQCUkR05PTUVfTElCUyVnCitzJUBHTk9NRV9MSUJESVJAJSRHTk9NRV9MSUJESVIlZworcyVAR05PTUVfSU5DTFVERURJUkAlJEdOT01FX0lOQ0xVREVESVIlZworcyVAR05PTUVfQ09ORklHQCUkR05PTUVfQ09ORklHJWcKK3MlQE1PVElGX0xJQk5BTUVAJSRNT1RJRl9MSUJOQU1FJWcKK3MlQE5BUlJPV19QUk9UT0AlJE5BUlJPV19QUk9UTyVnCitzJUBHVUlfSU5DX0xPQ0AlJEdVSV9JTkNfTE9DJWcKK3MlQEdVSV9MSUJfTE9DQCUkR1VJX0xJQl9MT0MlZworcyVAR1VJVFlQRUAlJEdVSVRZUEUlZworcyVAR1VJX1hfTElCU0AlJEdVSV9YX0xJQlMlZworcyVASEFOR1VMSU5fU1JDQCUkSEFOR1VMSU5fU1JDJWcKK3MlQEhBTkdVTElOX09CSkAlJEhBTkdVTElOX09CSiVnCitzJUBUQUdQUkdAJSRUQUdQUkclZworcyVATVNHRk1UQCUkTVNHRk1UJWcKK3MlQE1BS0VNT0AlJE1BS0VNTyVnCisKK0NFT0YKK0VPRgorCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCisKKyMgU3BsaXQgdGhlIHN1YnN0aXR1dGlvbnMgaW50byBiaXRlLXNpemVkIHBpZWNlcyBmb3Igc2VkcyB3aXRoCisjIHNtYWxsIGNvbW1hbmQgbnVtYmVyIGxpbWl0cywgbGlrZSBvbiBEaWdpdGFsIE9TRi8xIGFuZCBIUC1VWC4KK2FjX21heF9zZWRfY21kcz05MCAjIE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHB1dCBpbiBhIHNlZCBzY3JpcHQuCithY19maWxlPTEgIyBOdW1iZXIgb2YgY3VycmVudCBmaWxlLgorYWNfYmVnPTEgIyBGaXJzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCithY19lbmQ9JGFjX21heF9zZWRfY21kcyAjIExpbmUgYWZ0ZXIgbGFzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCithY19tb3JlX2xpbmVzPToKK2FjX3NlZF9jbWRzPSIiCit3aGlsZSAkYWNfbW9yZV9saW5lczsgZG8KKyAgaWYgdGVzdCAkYWNfYmVnIC1ndCAxOyB0aGVuCisgICAgc2VkICIxLCR7YWNfYmVnfWQ7ICR7YWNfZW5kfXEiIGNvbmZ0ZXN0LnN1YnMgPiBjb25mdGVzdC5zJGFjX2ZpbGUKKyAgZWxzZQorICAgIHNlZCAiJHthY19lbmR9cSIgY29uZnRlc3Quc3VicyA+IGNvbmZ0ZXN0LnMkYWNfZmlsZQorICBmaQorICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QucyRhY19maWxlOyB0aGVuCisgICAgYWNfbW9yZV9saW5lcz1mYWxzZQorICAgIHJtIC1mIGNvbmZ0ZXN0LnMkYWNfZmlsZQorICBlbHNlCisgICAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorICAgICAgYWNfc2VkX2NtZHM9InNlZCAtZiBjb25mdGVzdC5zJGFjX2ZpbGUiCisgICAgZWxzZQorICAgICAgYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiBjb25mdGVzdC5zJGFjX2ZpbGUiCisgICAgZmkKKyAgICBhY19maWxlPWBleHByICRhY19maWxlICsgMWAKKyAgICBhY19iZWc9JGFjX2VuZAorICAgIGFjX2VuZD1gZXhwciAkYWNfZW5kICsgJGFjX21heF9zZWRfY21kc2AKKyAgZmkKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKyAgYWNfc2VkX2NtZHM9Y2F0CitmaQorRU9GCisKK2NhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorCitDT05GSUdfRklMRVM9XCR7Q09ORklHX0ZJTEVTLSJhdXRvL2NvbmZpZy5tazpjb25maWcubWsuaW4ifQorRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCitmb3IgYWNfZmlsZSBpbiAuLiAkQ09ORklHX0ZJTEVTOyBkbyBpZiB0ZXN0ICJ4JGFjX2ZpbGUiICE9IHguLjsgdGhlbgorICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgIGNhc2UgIiRhY19maWxlIiBpbgorICAqOiopIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlW146XSo6JSUnYAorICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworICAqKSBhY19maWxlX2luPSIke2FjX2ZpbGV9LmluIiA7OworICBlc2FjCisKKyAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIsIHRvcF9zcmNkaXIsIGFuZCBJTlNUQUxMIGZvciBzdWJkaXJlY3Rvcmllcy4KKworICAjIFJlbW92ZSBsYXN0IHNsYXNoIGFuZCBhbGwgdGhhdCBmb2xsb3dzIGl0LiAgTm90IGFsbCBzeXN0ZW1zIGhhdmUgZGlybmFtZS4KKyAgYWNfZGlyPWBlY2hvICRhY19maWxlfHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisgICAgIyBUaGUgZmlsZSBpcyBpbiBhIHN1YmRpcmVjdG9yeS4KKyAgICB0ZXN0ICEgLWQgIiRhY19kaXIiICYmIG1rZGlyICIkYWNfZGlyIgorICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAkYWNfZGlyfHNlZCAncyVeXC4vJSUnYCIKKyAgICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICAgIGFjX2RvdHM9YGVjaG8gJGFjX2Rpcl9zdWZmaXh8c2VkICdzJS9bXi9dKiUuLi8lZydgCisgIGVsc2UKKyAgICBhY19kaXJfc3VmZml4PSBhY19kb3RzPQorICBmaQorCisgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgIC4pICBzcmNkaXI9LgorICAgICAgaWYgdGVzdCAteiAiJGFjX2RvdHMiOyB0aGVuIHRvcF9zcmNkaXI9LgorICAgICAgZWxzZSB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2A7IGZpIDs7CisgIC8qKSBzcmNkaXI9IiRhY19naXZlbl9zcmNkaXIkYWNfZGlyX3N1ZmZpeCI7IHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisgICopICMgUmVsYXRpdmUgcGF0aC4KKyAgICBzcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciRhY19kaXJfc3VmZml4IgorICAgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgZXNhYworCisKKyAgZWNobyBjcmVhdGluZyAiJGFjX2ZpbGUiCisgIHJtIC1mICIkYWNfZmlsZSIKKyAgY29uZmlndXJlX2lucHV0PSJHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIGBlY2hvICRhY19maWxlX2lufHNlZCAncyUuKi8lJSdgIGJ5IGNvbmZpZ3VyZS4iCisgIGNhc2UgIiRhY19maWxlIiBpbgorICAqTWFrZWZpbGUqKSBhY19jb21zdWI9IjFpXFwKKyMgJGNvbmZpZ3VyZV9pbnB1dCIgOzsKKyAgKikgYWNfY29tc3ViPSA7OworICBlc2FjCisKKyAgYWNfZmlsZV9pbnB1dHM9YGVjaG8gJGFjX2ZpbGVfaW58c2VkIC1lICJzJV4lJGFjX2dpdmVuX3NyY2Rpci8lIiAtZSAicyU6JSAkYWNfZ2l2ZW5fc3JjZGlyLyVnImAKKyAgc2VkIC1lICIkYWNfY29tc3ViCitzJUBjb25maWd1cmVfaW5wdXRAJSRjb25maWd1cmVfaW5wdXQlZworcyVAc3JjZGlyQCUkc3JjZGlyJWcKK3MlQHRvcF9zcmNkaXJAJSR0b3Bfc3JjZGlyJWcKKyIgJGFjX2ZpbGVfaW5wdXRzIHwgKGV2YWwgIiRhY19zZWRfY21kcyIpID4gJGFjX2ZpbGUKK2ZpOyBkb25lCitybSAtZiBjb25mdGVzdC5zKgorCisjIFRoZXNlIHNlZCBjb21tYW5kcyBhcmUgcGFzc2VkIHRvIHNlZCBhcyAiQSBOQU1FIEIgTkFNRSBDIFZBTFVFIEQiLCB3aGVyZQorIyBOQU1FIGlzIHRoZSBjcHAgbWFjcm8gYmVpbmcgZGVmaW5lZCBhbmQgVkFMVUUgaXMgdGhlIHZhbHVlIGl0IGlzIGJlaW5nIGdpdmVuLgorIworIyBhY19kIHNldHMgdGhlIHZhbHVlIGluICIjZGVmaW5lIE5BTUUgVkFMVUUiIGxpbmVzLgorYWNfZEE9J3MlXlwoWyAJXSpcKSNcKFsgCV0qZGVmaW5lWyAJXVsgCV0qXCknCithY19kQj0nXChbIAldWyAJXSpcKVteIAldKiVcMSNcMicKK2FjX2RDPSdcMycKK2FjX2REPSclZycKKyMgYWNfdSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGggdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCithY191QT0ncyVeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKK2FjX3VCPSdcKFsgCV1cKSVcMSNcMmRlZmluZVwzJworYWNfdUM9JyAnCithY191RD0nXDQlZycKKyMgYWNfZSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGhvdXQgdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCithY19lQT0ncyVeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKK2FjX2VCPSckJVwxI1wyZGVmaW5lXDMnCithY19lQz0nICcKK2FjX2VEPSclZycKKworaWYgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiAhPSBzZXQ7IHRoZW4KK0VPRgorY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCisgIENPTkZJR19IRUFERVJTPSJhdXRvL2NvbmZpZy5oOmNvbmZpZy5oLmluIgorRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCitmaQorZm9yIGFjX2ZpbGUgaW4gLi4gJENPTkZJR19IRUFERVJTOyBkbyBpZiB0ZXN0ICJ4JGFjX2ZpbGUiICE9IHguLjsgdGhlbgorICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgIGNhc2UgIiRhY19maWxlIiBpbgorICAqOiopIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlW146XSo6JSUnYAorICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworICAqKSBhY19maWxlX2luPSIke2FjX2ZpbGV9LmluIiA7OworICBlc2FjCisKKyAgZWNobyBjcmVhdGluZyAkYWNfZmlsZQorCisgIHJtIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaW4gY29uZnRlc3Qub3V0CisgIGFjX2ZpbGVfaW5wdXRzPWBlY2hvICRhY19maWxlX2lufHNlZCAtZSAicyVeJSRhY19naXZlbl9zcmNkaXIvJSIgLWUgInMlOiUgJGFjX2dpdmVuX3NyY2Rpci8lZyJgCisgIGNhdCAkYWNfZmlsZV9pbnB1dHMgPiBjb25mdGVzdC5pbgorCitFT0YKKworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGEgc2VkIHNjcmlwdCBjb25mdGVzdC52YWxzIHRoYXQgc3Vic3RpdHV0ZXMKKyMgdGhlIHByb3BlciB2YWx1ZXMgaW50byBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLiAgQW5kIGZpcnN0OgorIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4KKyMgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGluIGFuIHVucXVvdGVkIGhlcmUgZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cy4KK3JtIC1mIGNvbmZ0ZXN0LnZhbHMKK2NhdCA+IGNvbmZ0ZXN0LmhkciA8PFxFT0YKK3MvW1xcJiVdL1xcJi9nCitzJVtcXCRgXSVcXCYlZworcyUjZGVmaW5lIFwoW0EtWmEtel9dW0EtWmEtejAtOV9dKlwpICpcKC4qXCklJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0lZ3AKK3MlYWNfZCVhY191JWdwCitzJWFjX3UlYWNfZSVncAorRU9GCitzZWQgLW4gLWYgY29uZnRlc3QuaGRyIGNvbmZkZWZzLmggPiBjb25mdGVzdC52YWxzCitybSAtZiBjb25mdGVzdC5oZHIKKworIyBUaGlzIHNlZCBjb21tYW5kIHJlcGxhY2VzICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgorIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCitjYXQgPj4gY29uZnRlc3QudmFscyA8PFxFT0YKK3MlXlsgCV0qI1sgCV0qdW5kZWZbIAldWyAJXSpbYS16QS1aX11bYS16QS1aXzAtOV0qJS8qICYgKi8lCitFT0YKKworIyBCcmVhayB1cCBjb25mdGVzdC52YWxzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uCisjIHRoZSBzaXplIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vLgorCitybSAtZiBjb25mdGVzdC50YWlsCit3aGlsZSA6CitkbworICBhY19saW5lcz1gZ3JlcCAtYyAuIGNvbmZ0ZXN0LnZhbHNgCisgICMgZ3JlcCAtYyBnaXZlcyBlbXB0eSBvdXRwdXQgZm9yIGFuIGVtcHR5IGZpbGUgb24gc29tZSBBSVggc3lzdGVtcy4KKyAgaWYgdGVzdCAteiAiJGFjX2xpbmVzIiB8fCB0ZXN0ICIkYWNfbGluZXMiIC1lcSAwOyB0aGVuIGJyZWFrOyBmaQorICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gY29uZnRlc3QuZnJhZy4KKyAgZWNobyAnICBjYXQgPiBjb25mdGVzdC5mcmFnIDw8Q0VPRicgPj4gJENPTkZJR19TVEFUVVMKKyAgc2VkICR7YWNfbWF4X2hlcmVfbGluZXN9cSBjb25mdGVzdC52YWxzID4+ICRDT05GSUdfU1RBVFVTCisgIGVjaG8gJ0NFT0YKKyAgc2VkIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaW4gPiBjb25mdGVzdC5vdXQKKyAgcm0gLWYgY29uZnRlc3QuaW4KKyAgbXYgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0LmluCisnID4+ICRDT05GSUdfU1RBVFVTCisgIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC52YWxzID4gY29uZnRlc3QudGFpbAorICBybSAtZiBjb25mdGVzdC52YWxzCisgIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QudmFscworZG9uZQorcm0gLWYgY29uZnRlc3QudmFscworCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCisgIHJtIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaAorICBlY2hvICIvKiAkYWNfZmlsZS4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4gICovIiA+IGNvbmZ0ZXN0LmgKKyAgY2F0IGNvbmZ0ZXN0LmluID4+IGNvbmZ0ZXN0LmgKKyAgcm0gLWYgY29uZnRlc3QuaW4KKyAgaWYgY21wIC1zICRhY19maWxlIGNvbmZ0ZXN0LmggMj4vZGV2L251bGw7IHRoZW4KKyAgICBlY2hvICIkYWNfZmlsZSBpcyB1bmNoYW5nZWQiCisgICAgcm0gLWYgY29uZnRlc3QuaAorICBlbHNlCisgICAgIyBSZW1vdmUgbGFzdCBzbGFzaCBhbmQgYWxsIHRoYXQgZm9sbG93cyBpdC4gIE5vdCBhbGwgc3lzdGVtcyBoYXZlIGRpcm5hbWUuCisgICAgICBhY19kaXI9YGVjaG8gJGFjX2ZpbGV8c2VkICdzJS9bXi9dW14vXSokJSUnYAorICAgICAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisgICAgICAjIFRoZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5LgorICAgICAgdGVzdCAhIC1kICIkYWNfZGlyIiAmJiBta2RpciAiJGFjX2RpciIKKyAgICBmaQorICAgIHJtIC1mICRhY19maWxlCisgICAgbXYgY29uZnRlc3QuaCAkYWNfZmlsZQorICBmaQorZmk7IGRvbmUKKworRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKworRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCisKK2V4aXQgMAorRU9GCitjaG1vZCAreCAkQ09ORklHX1NUQVRVUworcm0gLWZyIGNvbmZkZWZzKiAkYWNfY2xlYW5fZmlsZXMKK3Rlc3QgIiRub19jcmVhdGUiID0geWVzIHx8ICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRDT05GSUdfU1RBVFVTIHx8IGV4aXQgMQorCisKZGlmZiAtLWdpdCBhL3NyYy9iaWd2aW0uYmF0IGIvc3JjL2JpZ3ZpbS5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiMTA5ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaWd2aW0uYmF0CkBAIC0wLDAgKzEsMyBAQAorOjogY29tbWFuZCB0byBidWlsZCBiaWcgVmltIHdpdGggT0xFLCBQZXJsLCBQeXRob24sIFJ1YnkgYW5kIFRjbAorbm1ha2UgLWYgTWFrZV9tdmMubWFrIEdVST15ZXMgT0xFPXllcyBQRVJMPUU6XHBlcmw1OCBEWU5BTUlDX1BFUkw9eWVzIFBFUkxfVkVSPTU4IFBZVEhPTj1lOlxweXRob24yMyBEWU5BTUlDX1BZVEhPTj15ZXMgUFlUSE9OX1ZFUj0yMyBSVUJZPWU6XHJ1YnkxOCBEWU5BTUlDX1JVQlk9eWVzIFJVQllfVkVSPTE4IFJVQllfVkVSX0xPTkc9MS44IFRDTD1lOlx0Y2wgRFlOQU1JQ19UQ0w9eWVzICUxIElNRT15ZXMgQ1NDT1BFPXllcyBYUE09ZTpceHBtCisKZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuYyBiL3NyYy9idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2I1NzBmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2J1ZmZlci5jCkBAIC0wLDAgKzEsNTA3MSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogYnVmZmVyLmM6IGZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIHRoZSBidWZmZXIgc3RydWN0dXJlCisgKi8KKworLyoKKyAqIFRoZSBidWZmZXIgbGlzdCBpcyBhIGRvdWJsZSBsaW5rZWQgbGlzdCBvZiBhbGwgYnVmZmVycy4KKyAqIEVhY2ggYnVmZmVyIGNhbiBiZSBpbiBvbmUgb2YgdGhlc2Ugc3RhdGVzOgorICogbmV2ZXIgbG9hZGVkOiBCRl9ORVZFUkxPQURFRCBpcyBzZXQsIG9ubHkgdGhlIGZpbGUgbmFtZSBpcyB2YWxpZAorICogICBub3QgbG9hZGVkOiBiX21sLm1sX21mcCA9PSBOVUxMLCBubyBtZW1maWxlIGFsbG9jYXRlZAorICoJIGhpZGRlbjogYl9ud2luZG93cyA9PSAwLCBsb2FkZWQgYnV0IG5vdCBkaXNwbGF5ZWQgaW4gYSB3aW5kb3cKKyAqCSBub3JtYWw6IGxvYWRlZCBhbmQgZGlzcGxheWVkIGluIGEgd2luZG93CisgKgorICogSW5zdGVhZCBvZiBzdG9yaW5nIGZpbGUgbmFtZXMgYWxsIG92ZXIgdGhlIHBsYWNlLCBlYWNoIGZpbGUgbmFtZSBpcworICogc3RvcmVkIGluIHRoZSBidWZmZXIgbGlzdC4gSXQgY2FuIGJlIHJlZmVyZW5jZWQgYnkgYSBudW1iZXIuCisgKgorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmVtZW1iZXJzIGFsbCBmaWxlIG5hbWVzIGV2ZXIgdXNlZC4KKyAqLworCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmIGRlZmluZWQoRkVBVF9DTURMX0NPTVBMKSB8fCBkZWZpbmVkKEZFQVRfTElTVENNRFMpIHx8IGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKEZFQVRfUEVSTCkKK3N0YXRpYyBjaGFyX3UJKmJ1Zmxpc3RfbWF0Y2ggX19BUkdTKChyZWdwcm9nX1QgKnByb2csIGJ1Zl9UICpidWYpKTsKKyMgZGVmaW5lIEhBVkVfQlVGTElTVF9NQVRDSAorc3RhdGljIGNoYXJfdQkqZm5hbWVfbWF0Y2ggX19BUkdTKChyZWdwcm9nX1QgKnByb2csIGNoYXJfdSAqbmFtZSkpOworI2VuZGlmCitzdGF0aWMgdm9pZAlidWZsaXN0X3NldGZwb3MgX19BUkdTKChidWZfVCAqYnVmLCB3aW5fVCAqd2luLCBsaW5lbnJfVCBsbnVtLCBjb2xucl9UIGNvbCwgaW50IGNvcHlfb3B0aW9ucykpOworc3RhdGljIHdpbmluZm9fVCAqZmluZF93aW5pbmZvIF9fQVJHUygoYnVmX1QgKmJ1ZikpOworI2lmZGVmIFVOSVgKK3N0YXRpYyBidWZfVAkqYnVmbGlzdF9maW5kbmFtZV9zdGF0IF9fQVJHUygoY2hhcl91ICpmZm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkpOworc3RhdGljIGludAlvdGhlcmZpbGVfYnVmIF9fQVJHUygoYnVmX1QgKmJ1ZiwgY2hhcl91ICpmZm5hbWUsIHN0cnVjdCBzdGF0ICpzdHApKTsKK3N0YXRpYyBpbnQJYnVmX3NhbWVfaW5vIF9fQVJHUygoYnVmX1QgKmJ1Ziwgc3RydWN0IHN0YXQgKnN0cCkpOworI2Vsc2UKK3N0YXRpYyBpbnQJb3RoZXJmaWxlX2J1ZiBfX0FSR1MoKGJ1Zl9UICpidWYsIGNoYXJfdSAqZmZuYW1lKSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1RJVExFCitzdGF0aWMgaW50CXRpX2NoYW5nZSBfX0FSR1MoKGNoYXJfdSAqc3RyLCBjaGFyX3UgKipsYXN0KSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkCWZyZWVfYnVmZmVyIF9fQVJHUygoYnVmX1QgKikpOworc3RhdGljIHZvaWQJZnJlZV9idWZmZXJfc3R1ZmYgX19BUkdTKChidWZfVCAqYnVmLCBpbnQgZnJlZV9vcHRpb25zKSk7CitzdGF0aWMgdm9pZAljbGVhcl93aW5pbmZvIF9fQVJHUygoYnVmX1QgKmJ1ZikpOworCisjaWZkZWYgVU5JWAorIyBkZWZpbmUgZGV2X1QgZGV2X3QKKyNlbHNlCisjIGRlZmluZSBkZXZfVCB1bnNpZ25lZAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfU0lHTlMpCitzdGF0aWMgdm9pZCBpbnNlcnRfc2lnbiBfX0FSR1MoKGJ1Zl9UICpidWYsIHNpZ25saXN0X1QgKnByZXYsIHNpZ25saXN0X1QgKm5leHQsIGludCBpZCwgbGluZW5yX1QgbG51bSwgaW50IHR5cGVucikpOworc3RhdGljIHZvaWQgYnVmX2RlbGV0ZV9zaWducyBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKKyNlbmRpZgorCisvKgorICogT3BlbiBjdXJyZW50IGJ1ZmZlciwgdGhhdCBpczogb3BlbiB0aGUgbWVtZmlsZSBhbmQgcmVhZCB0aGUgZmlsZSBpbnRvIG1lbW9yeQorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CitvcGVuX2J1ZmZlcihyZWFkX3N0ZGluLCBlYXApCisgICAgaW50CQlyZWFkX3N0ZGluOwkgICAgLyogcmVhZCBmaWxlIGZyb20gc3RkaW4gKi8KKyAgICBleGFyZ19UCSplYXA7CQkgICAgLyogZm9yIGZvcmNlZCAnZmYnIGFuZCAnZmVuYycgb3IgTlVMTCAqLworeworICAgIGludAkJcmV0dmFsID0gT0s7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgYnVmX1QJKm9sZF9jdXJidWY7CisjZW5kaWYKKworICAgIC8qCisgICAgICogVGhlICdyZWFkb25seScgZmxhZyBpcyBvbmx5IHNldCB3aGVuIEJGX05FVkVSTE9BREVEIGlzIGJlaW5nIHJlc2V0LgorICAgICAqIFdoZW4gcmUtZW50ZXJpbmcgdGhlIHNhbWUgYnVmZmVyLCBpdCBzaG91bGQgbm90IGNoYW5nZSwgYmVjYXVzZSB0aGUKKyAgICAgKiB1c2VyIG1heSBoYXZlIHJlc2V0IHRoZSBmbGFnIGJ5IGhhbmQuCisgICAgICovCisgICAgaWYgKHJlYWRvbmx5bW9kZSAmJiBjdXJidWYtPmJfZmZuYW1lICE9IE5VTEwKKwkJCQkJJiYgKGN1cmJ1Zi0+Yl9mbGFncyAmIEJGX05FVkVSTE9BREVEKSkKKwljdXJidWYtPmJfcF9ybyA9IFRSVUU7CisKKyAgICBpZiAobWxfb3BlbigpID09IEZBSUwpCisgICAgeworCS8qCisJICogVGhlcmUgTVVTVCBiZSBhIG1lbWZpbGUsIG90aGVyd2lzZSB3ZSBjYW4ndCBkbyBhbnl0aGluZworCSAqIElmIHdlIGNhbid0IGNyZWF0ZSBvbmUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGFrZSBhbm90aGVyIGJ1ZmZlcgorCSAqLworCWNsb3NlX2J1ZmZlcihOVUxMLCBjdXJidWYsIDApOworCWZvciAoY3VyYnVmID0gZmlyc3RidWY7IGN1cmJ1ZiAhPSBOVUxMOyBjdXJidWYgPSBjdXJidWYtPmJfbmV4dCkKKwkgICAgaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9tZnAgIT0gTlVMTCkKKwkJYnJlYWs7CisJLyoKKwkgKiBpZiB0aGVyZSBpcyBubyBtZW1maWxlIGF0IGFsbCwgZXhpdAorCSAqIFRoaXMgaXMgT0ssIHNpbmNlIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGxvb3NlLgorCSAqLworCWlmIChjdXJidWYgPT0gTlVMTCkKKwl7CisJICAgIEVNU0coXygiRTgyOiBDYW5ub3QgYWxsb2NhdGUgYW55IGJ1ZmZlciwgZXhpdGluZy4uLiIpKTsKKwkgICAgZ2V0b3V0KDIpOworCX0KKwlFTVNHKF8oIkU4MzogQ2Fubm90IGFsbG9jYXRlIGJ1ZmZlciwgdXNpbmcgb3RoZXIgb25lLi4uIikpOworCWVudGVyX2J1ZmZlcihjdXJidWYpOworCXJldHVybiBGQUlMOworICAgIH0KKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIC8qIFRoZSBhdXRvY29tbWFuZHMgaW4gcmVhZGZpbGUoKSBtYXkgY2hhbmdlIHRoZSBidWZmZXIsIGJ1dCBvbmx5IEFGVEVSCisgICAgICogcmVhZGluZyB0aGUgZmlsZS4gKi8KKyAgICBvbGRfY3VyYnVmID0gY3VyYnVmOworICAgIG1vZGlmaWVkX3dhc19zZXQgPSBGQUxTRTsKKyNlbmRpZgorCisgICAgLyogbWFyayBjdXJzb3IgcG9zaXRpb24gYXMgYmVpbmcgaW52YWxpZCAqLworICAgIGNoYW5nZWRfbGluZV9hYnZfY3VycygpOworCisgICAgaWYgKGN1cmJ1Zi0+Yl9mZm5hbWUgIT0gTlVMTAorI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCSAgICAmJiBuZXRiZWFuc1JlYWRGaWxlCisjZW5kaWYKKyAgICAgICApCisgICAgeworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCWludCBvbGRGaXJlID0gbmV0YmVhbnNGaXJlQ2hhbmdlczsKKworCW5ldGJlYW5zRmlyZUNoYW5nZXMgPSAwOworI2VuZGlmCisJcmV0dmFsID0gcmVhZGZpbGUoY3VyYnVmLT5iX2ZmbmFtZSwgY3VyYnVmLT5iX2ZuYW1lLAorCQkgIChsaW5lbnJfVCkwLCAobGluZW5yX1QpMCwgKGxpbmVucl9UKU1BWExOVU0sIGVhcCwgUkVBRF9ORVcpOworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCW5ldGJlYW5zRmlyZUNoYW5nZXMgPSBvbGRGaXJlOworI2VuZGlmCisJLyogSGVscCBidWZmZXIgaXMgZmlsdGVyZWQuICovCisJaWYgKGN1cmJ1Zi0+Yl9oZWxwKQorCSAgICBmaXhfaGVscF9idWZmZXIoKTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVhZF9zdGRpbikKKyAgICB7CisJaW50CQlzYXZlX2JpbiA9IGN1cmJ1Zi0+Yl9wX2JpbjsKKwlsaW5lbnJfVAlsaW5lX2NvdW50OworCisJLyoKKwkgKiBGaXJzdCByZWFkIHRoZSB0ZXh0IGluIGJpbmFyeSBtb2RlIGludG8gdGhlIGJ1ZmZlci4KKwkgKiBUaGVuIHJlYWQgZnJvbSB0aGF0IHNhbWUgYnVmZmVyIGFuZCBhcHBlbmQgYXQgdGhlIGVuZC4gIFRoaXMgbWFrZXMKKwkgKiBpdCBwb3NzaWJsZSB0byByZXRyeSB3aGVuICdmaWxlZm9ybWF0JyBvciAnZmlsZWVuY29kaW5nJyB3YXMKKwkgKiBndWVzc2VkIHdyb25nLgorCSAqLworCWN1cmJ1Zi0+Yl9wX2JpbiA9IFRSVUU7CisJcmV0dmFsID0gcmVhZGZpbGUoTlVMTCwgTlVMTCwgKGxpbmVucl9UKTAsCisJCSAgKGxpbmVucl9UKTAsIChsaW5lbnJfVClNQVhMTlVNLCBOVUxMLCBSRUFEX05FVyArIFJFQURfU1RESU4pOworCWN1cmJ1Zi0+Yl9wX2JpbiA9IHNhdmVfYmluOworCWlmIChyZXR2YWwgPT0gT0spCisJeworCSAgICBsaW5lX2NvdW50ID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJICAgIHJldHZhbCA9IHJlYWRmaWxlKE5VTEwsIE5VTEwsIChsaW5lbnJfVClsaW5lX2NvdW50LAorCQkJICAgIChsaW5lbnJfVCkwLCAobGluZW5yX1QpTUFYTE5VTSwgZWFwLCBSRUFEX0JVRkZFUik7CisJICAgIGlmIChyZXR2YWwgPT0gT0spCisJICAgIHsKKwkJLyogRGVsZXRlIHRoZSBiaW5hcnkgbGluZXMuICovCisJCXdoaWxlICgtLWxpbmVfY291bnQgPj0gMCkKKwkJICAgIG1sX2RlbGV0ZSgobGluZW5yX1QpMSwgRkFMU0UpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBEZWxldGUgdGhlIGNvbnZlcnRlZCBsaW5lcy4gKi8KKwkJd2hpbGUgKGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ID4gbGluZV9jb3VudCkKKwkJICAgIG1sX2RlbGV0ZShsaW5lX2NvdW50LCBGQUxTRSk7CisJICAgIH0KKwkgICAgLyogUHV0IHRoZSBjdXJzb3Igb24gdGhlIGZpcnN0IGxpbmUuICovCisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IDE7CisJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyMgaWZkZWYgRkVBVF9FVkFMCisJICAgIGFwcGx5X2F1dG9jbWRzX3JldHZhbChFVkVOVF9TVERJTlJFQURQT1NULCBOVUxMLCBOVUxMLCBGQUxTRSwKKwkJCQkJCQljdXJidWYsICZyZXR2YWwpOworIyBlbHNlCisJICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX1NURElOUkVBRFBPU1QsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYpOworIyBlbmRpZgorI2VuZGlmCisJfQorICAgIH0KKworICAgIC8qIGlmIGZpcnN0IHRpbWUgbG9hZGluZyB0aGlzIGJ1ZmZlciwgaW5pdCBiX2NoYXJ0YWJbXSAqLworICAgIGlmIChjdXJidWYtPmJfZmxhZ3MgJiBCRl9ORVZFUkxPQURFRCkKKwkodm9pZClidWZfaW5pdF9jaGFydGFiKGN1cmJ1ZiwgRkFMU0UpOworCisgICAgLyoKKyAgICAgKiBTZXQvcmVzZXQgdGhlIENoYW5nZWQgZmxhZyBmaXJzdCwgYXV0b2NtZHMgbWF5IGNoYW5nZSB0aGUgYnVmZmVyLgorICAgICAqIEFwcGx5IHRoZSBhdXRvbWF0aWMgY29tbWFuZHMsIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBtb2RlbGluZXMuCisgICAgICogU28gdGhlIG1vZGVsaW5lcyBoYXZlIHByaW9yaXR5IG92ZXIgYXV0byBjb21tYW5kcy4KKyAgICAgKi8KKyAgICAvKiBXaGVuIHJlYWRpbmcgc3RkaW4sIHRoZSBidWZmZXIgY29udGVudHMgYWx3YXlzIG5lZWRzIHdyaXRpbmcsIHNvIHNldAorICAgICAqIHRoZSBjaGFuZ2VkIGZsYWcuICBVbmxlc3MgaW4gcmVhZG9ubHkgbW9kZTogImxzIHwgZ3ZpZXcgLSIuCisgICAgICogV2hlbiBpbnRlcnJ1cHRlZCBhbmQgJ2Nwb3B0aW9ucycgY29udGFpbnMgJ2knIHNldCBjaGFuZ2VkIGZsYWcuICovCisgICAgaWYgKChyZWFkX3N0ZGluICYmICFyZWFkb25seW1vZGUgJiYgIWJ1ZmVtcHR5KCkpCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJCXx8IG1vZGlmaWVkX3dhc19zZXQJLyogIjpzZXQgbW9kaWZpZWQiIHVzZWQgaW4gYXV0b2NtZCAqLworIyBpZmRlZiBGRUFUX0VWQUwKKwkJfHwgKGFib3J0aW5nKCkgJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0lOVE1PRCkgIT0gTlVMTCkKKyMgZW5kaWYKKyNlbmRpZgorCQl8fCAoZ290X2ludCAmJiB2aW1fc3RyY2hyKHBfY3BvLCBDUE9fSU5UTU9EKSAhPSBOVUxMKSkKKwljaGFuZ2VkKCk7CisgICAgZWxzZSBpZiAocmV0dmFsICE9IEZBSUwpCisJdW5jaGFuZ2VkKGN1cmJ1ZiwgRkFMU0UpOworICAgIHNhdmVfZmlsZV9mZihjdXJidWYpOwkJLyoga2VlcCB0aGlzIGZpbGVmb3JtYXQgKi8KKworICAgIC8qIHJlcXVpcmUgIiEiIHRvIG92ZXJ3cml0ZSB0aGUgZmlsZSwgYmVjYXVzZSBpdCB3YXNuJ3QgcmVhZCBjb21wbGV0ZWx5ICovCisjaWZkZWYgRkVBVF9FVkFMCisgICAgaWYgKGFib3J0aW5nKCkpCisjZWxzZQorICAgIGlmIChnb3RfaW50KQorI2VuZGlmCisJY3VyYnVmLT5iX2ZsYWdzIHw9IEJGX1JFQURFUlI7CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICAvKiBuZWVkIHRvIHNldCB3X3RvcGxpbmUsIHVubGVzcyBzb21lIGF1dG9jb21tYW5kIGFscmVhZHkgZGlkIHRoYXQuICovCisgICAgaWYgKCEoY3Vyd2luLT53X3ZhbGlkICYgVkFMSURfVE9QTElORSkpCisgICAgeworCWN1cndpbi0+d190b3BsaW5lID0gMTsKKyMgaWZkZWYgRkVBVF9ESUZGCisJY3Vyd2luLT53X3RvcGZpbGwgPSAwOworIyBlbmRpZgorICAgIH0KKyMgaWZkZWYgRkVBVF9FVkFMCisgICAgYXBwbHlfYXV0b2NtZHNfcmV0dmFsKEVWRU5UX0JVRkVOVEVSLCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmLCAmcmV0dmFsKTsKKyMgZWxzZQorICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRkVOVEVSLCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKKyMgZW5kaWYKKyNlbmRpZgorCisgICAgaWYgKHJldHZhbCAhPSBGQUlMKQorICAgIHsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkvKgorCSAqIFRoZSBhdXRvY29tbWFuZHMgbWF5IGhhdmUgY2hhbmdlZCB0aGUgY3VycmVudCBidWZmZXIuICBBcHBseSB0aGUKKwkgKiBtb2RlbGluZXMgdG8gdGhlIGNvcnJlY3QgYnVmZmVyLCBpZiBpdCBzdGlsbCBleGlzdHMgYW5kIGlzIGxvYWRlZC4KKwkgKi8KKwlpZiAoYnVmX3ZhbGlkKG9sZF9jdXJidWYpICYmIG9sZF9jdXJidWYtPmJfbWwubWxfbWZwICE9IE5VTEwpCisJeworCSAgICBhY29fc2F2ZV9UCWFjbzsKKworCSAgICAvKiBHbyB0byB0aGUgYnVmZmVyIHRoYXQgd2FzIG9wZW5lZC4gKi8KKwkgICAgYXVjbWRfcHJlcGJ1ZigmYWNvLCBvbGRfY3VyYnVmKTsKKyNlbmRpZgorCSAgICBkb19tb2RlbGluZXMoKTsKKwkgICAgY3VyYnVmLT5iX2ZsYWdzICY9IH4oQkZfQ0hFQ0tfUk8gfCBCRl9ORVZFUkxPQURFRCk7CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyMgaWZkZWYgRkVBVF9FVkFMCisJICAgIGFwcGx5X2F1dG9jbWRzX3JldHZhbChFVkVOVF9CVUZXSU5FTlRFUiwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1ZiwKKwkJCQkJCQkJICAgICZyZXR2YWwpOworIyBlbHNlCisJICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRldJTkVOVEVSLCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKKyMgZW5kaWYKKworCSAgICAvKiByZXN0b3JlIGN1cndpbi9jdXJidWYgYW5kIGEgZmV3IG90aGVyIHRoaW5ncyAqLworCSAgICBhdWNtZF9yZXN0YnVmKCZhY28pOworCX0KKyNlbmRpZgorICAgIH0KKworI2lmZGVmIEZFQVRfRk9MRElORworICAgIC8qIE5lZWQgdG8gdXBkYXRlIGF1dG9tYXRpYyBmb2xkaW5nLiAqLworICAgIGZvbGRVcGRhdGVBbGwoY3Vyd2luKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmICJidWYiIHBvaW50cyB0byBhIHZhbGlkIGJ1ZmZlciAoaW4gdGhlIGJ1ZmZlciBsaXN0KS4KKyAqLworICAgIGludAorYnVmX3ZhbGlkKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIGJ1Zl9UCSpicDsKKworICAgIGZvciAoYnAgPSBmaXJzdGJ1ZjsgYnAgIT0gTlVMTDsgYnAgPSBicC0+Yl9uZXh0KQorCWlmIChicCA9PSBidWYpCisJICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIENsb3NlIHRoZSBsaW5rIHRvIGEgYnVmZmVyLgorICogImFjdGlvbiIgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIGxvbmdlciBhIHdpbmRvdyBmb3IgdGhlIGJ1ZmZlci4KKyAqIEl0IGNhbiBiZToKKyAqIDAJCQlidWZmZXIgYmVjb21lcyBoaWRkZW4KKyAqIERPQlVGX1VOTE9BRAkJYnVmZmVyIGlzIHVubG9hZGVkCisgKiBET0JVRl9ERUxFVEUJCWJ1ZmZlciBpcyB1bmxvYWRlZCBhbmQgcmVtb3ZlZCBmcm9tIGJ1ZmZlciBsaXN0CisgKiBET0JVRl9XSVBFCQlidWZmZXIgaXMgdW5sb2FkZWQgYW5kIHJlYWxseSBkZWxldGVkCisgKiBXaGVuIGRvaW5nIGFsbCBidXQgdGhlIGZpcnN0IG9uZSBvbiB0aGUgY3VycmVudCBidWZmZXIsIHRoZSBjYWxsZXIgc2hvdWxkCisgKiBnZXQgYSBuZXcgYnVmZmVyIHZlcnkgc29vbiEKKyAqCisgKiBUaGUgJ2J1ZmhpZGRlbicgb3B0aW9uIGNhbiBmb3JjZSBmcmVlaW5nIGFuZCBkZWxldGluZy4KKyAqLworICAgIHZvaWQKK2Nsb3NlX2J1ZmZlcih3aW4sIGJ1ZiwgYWN0aW9uKQorICAgIHdpbl9UCSp3aW47CQkvKiBpZiBub3QgTlVMTCwgc2V0IGJfbGFzdF9jdXJzb3IgKi8KKyAgICBidWZfVAkqYnVmOworICAgIGludAkJYWN0aW9uOworeworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIGludAkJaXNfY3VyYnVmOworICAgIGludAkJbndpbmRvd3MgPSBidWYtPmJfbndpbmRvd3M7CisjZW5kaWYKKyAgICBpbnQJCXVubG9hZF9idWYgPSAoYWN0aW9uICE9IDApOworICAgIGludAkJZGVsX2J1ZiA9IChhY3Rpb24gPT0gRE9CVUZfREVMIHx8IGFjdGlvbiA9PSBET0JVRl9XSVBFKTsKKyAgICBpbnQJCXdpcGVfYnVmID0gKGFjdGlvbiA9PSBET0JVRl9XSVBFKTsKKworI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKyAgICAvKgorICAgICAqIEZvcmNlIHVubG9hZGluZyBvciBkZWxldGluZyB3aGVuICdidWZoaWRkZW4nIHNheXMgc28uCisgICAgICogVGhlIGNhbGxlciBtdXN0IHRha2UgY2FyZSBvZiBOT1QgZGVsZXRpbmcvZnJlZWluZyB3aGVuICdidWZoaWRkZW4nIGlzCisgICAgICogImhpZGUiIChvdGhlcndpc2Ugd2UgY291bGQgbmV2ZXIgZnJlZSBvciBkZWxldGUgYSBidWZmZXIpLgorICAgICAqLworICAgIGlmIChidWYtPmJfcF9iaFswXSA9PSAnZCcpCQkvKiAnYnVmaGlkZGVuJyA9PSAiZGVsZXRlIiAqLworICAgIHsKKwlkZWxfYnVmID0gVFJVRTsKKwl1bmxvYWRfYnVmID0gVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZiAoYnVmLT5iX3BfYmhbMF0gPT0gJ3cnKQkvKiAnYnVmaGlkZGVuJyA9PSAid2lwZSIgKi8KKyAgICB7CisJZGVsX2J1ZiA9IFRSVUU7CisJdW5sb2FkX2J1ZiA9IFRSVUU7CisJd2lwZV9idWYgPSBUUlVFOworICAgIH0KKyAgICBlbHNlIGlmIChidWYtPmJfcF9iaFswXSA9PSAndScpCS8qICdidWZoaWRkZW4nID09ICJ1bmxvYWQiICovCisJdW5sb2FkX2J1ZiA9IFRSVUU7CisjZW5kaWYKKworICAgIGlmICh3aW4gIT0gTlVMTCkKKyAgICB7CisJLyogU2V0IGJfbGFzdF9jdXJzb3Igd2hlbiBjbG9zaW5nIHRoZSBsYXN0IHdpbmRvdyBmb3IgdGhlIGJ1ZmZlci4KKwkgKiBSZW1lbWJlciB0aGUgbGFzdCBjdXJzb3IgcG9zaXRpb24gYW5kIHdpbmRvdyBvcHRpb25zIG9mIHRoZSBidWZmZXIuCisJICogVGhpcyB1c2VkIHRvIGJlIG9ubHkgZm9yIHRoZSBjdXJyZW50IHdpbmRvdywgYnV0IHRoZW4gb3B0aW9ucyBsaWtlCisJICogJ2ZvbGRtZXRob2QnIG1heSBiZSBsb3N0IHdpdGggYSAiOm9ubHkiIGNvbW1hbmQuICovCisJaWYgKGJ1Zi0+Yl9ud2luZG93cyA9PSAxKQorCSAgICBzZXRfbGFzdF9jdXJzb3Iod2luKTsKKwlidWZsaXN0X3NldGZwb3MoYnVmLCB3aW4sCisJCSAgICB3aW4tPndfY3Vyc29yLmxudW0gPT0gMSA/IDAgOiB3aW4tPndfY3Vyc29yLmxudW0sCisJCSAgICB3aW4tPndfY3Vyc29yLmNvbCwgVFJVRSk7CisgICAgfQorCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgLyogV2hlbiB0aGUgYnVmZmVyIGlzIG5vIGxvbmdlciBpbiBhIHdpbmRvdywgdHJpZ2dlciBCdWZXaW5MZWF2ZSAqLworICAgIGlmIChidWYtPmJfbndpbmRvd3MgPT0gMSkKKyAgICB7CisJYXBwbHlfYXV0b2NtZHMoRVZFTlRfQlVGV0lOTEVBVkUsIGJ1Zi0+Yl9mbmFtZSwgYnVmLT5iX2ZuYW1lLAorCQkJCQkJCQkgIEZBTFNFLCBidWYpOworCWlmICghYnVmX3ZhbGlkKGJ1ZikpCSAgICAvKiBhdXRvY29tbWFuZHMgbWF5IGRlbGV0ZSB0aGUgYnVmZmVyICovCisJICAgIHJldHVybjsKKworCS8qIFdoZW4gdGhlIGJ1ZmZlciBiZWNvbWVzIGhpZGRlbiwgYnV0IGlzIG5vdCB1bmxvYWRlZCwgdHJpZ2dlcgorCSAqIEJ1ZkhpZGRlbiAqLworCWlmICghdW5sb2FkX2J1ZikKKwl7CisJICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRkhJRERFTiwgYnVmLT5iX2ZuYW1lLCBidWYtPmJfZm5hbWUsCisJCQkJCQkJCSAgRkFMU0UsIGJ1Zik7CisJICAgIGlmICghYnVmX3ZhbGlkKGJ1ZikpCS8qIGF1dG9jbWRzIG1heSBkZWxldGUgdGhlIGJ1ZmZlciAqLworCQlyZXR1cm47CisJfQorIyBpZmRlZiBGRUFUX0VWQUwKKwlpZiAoYWJvcnRpbmcoKSkJICAgIC8qIGF1dG9jbWRzIG1heSBhYm9ydCBzY3JpcHQgcHJvY2Vzc2luZyAqLworCSAgICByZXR1cm47CisjIGVuZGlmCisgICAgfQorICAgIG53aW5kb3dzID0gYnVmLT5iX253aW5kb3dzOworI2VuZGlmCisKKyAgICAvKiBkZWNyZWFzZSB0aGUgbGluayBjb3VudCBmcm9tIHdpbmRvd3MgKHVubGVzcyBub3QgaW4gYW55IHdpbmRvdykgKi8KKyAgICBpZiAoYnVmLT5iX253aW5kb3dzID4gMCkKKwktLWJ1Zi0+Yl9ud2luZG93czsKKworICAgIC8qIFJldHVybiB3aGVuIGEgd2luZG93IGlzIGRpc3BsYXlpbmcgdGhlIGJ1ZmZlciBvciB3aGVuIGl0J3Mgbm90CisgICAgICogdW5sb2FkZWQuICovCisgICAgaWYgKGJ1Zi0+Yl9ud2luZG93cyA+IDAgfHwgIXVubG9hZF9idWYpCisgICAgeworCWlmIChidWYgPT0gY3VyYnVmKQorCSAgICB1X3N5bmMoKTsJICAgIC8qIHN5bmMgdW5kbyBiZWZvcmUgZ29pbmcgdG8gYW5vdGhlciBidWZmZXIgKi8KKwlyZXR1cm47CisgICAgfQorCisgICAgLyogQWx3YXlzIHJlbW92ZSB0aGUgYnVmZmVyIHdoZW4gdGhlcmUgaXMgbm8gZmlsZSBuYW1lLiAqLworICAgIGlmIChidWYtPmJfZmZuYW1lID09IE5VTEwpCisJZGVsX2J1ZiA9IFRSVUU7CisKKyAgICAvKgorICAgICAqIEZyZWUgYWxsIHRoaW5ncyBhbGxvY2F0ZWQgZm9yIHRoaXMgYnVmZmVyLgorICAgICAqIEFsc28gY2FsbHMgdGhlICJCdWZEZWxldGUiIGF1dG9jb21tYW5kcyB3aGVuIGRlbF9idWYgaXMgVFJVRS4KKyAgICAgKi8KKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICAvKiBSZW1lbWJlciBpZiB3ZSBhcmUgY2xvc2luZyB0aGUgY3VycmVudCBidWZmZXIuICBSZXN0b3JlIHRoZSBudW1iZXIgb2YKKyAgICAgKiB3aW5kb3dzLCBzbyB0aGF0IGF1dG9jb21tYW5kcyBpbiBidWZfZnJlZWFsbCgpIGRvbid0IGdldCBjb25mdXNlZC4gKi8KKyAgICBpc19jdXJidWYgPSAoYnVmID09IGN1cmJ1Zik7CisgICAgYnVmLT5iX253aW5kb3dzID0gbndpbmRvd3M7CisjZW5kaWYKKworICAgIGJ1Zl9mcmVlYWxsKGJ1ZiwgZGVsX2J1Ziwgd2lwZV9idWYpOworCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgLyogQXV0b2NvbW1hbmRzIG1heSBoYXZlIGRlbGV0ZWQgdGhlIGJ1ZmZlci4gKi8KKyAgICBpZiAoIWJ1Zl92YWxpZChidWYpKQorCXJldHVybjsKKyMgaWZkZWYgRkVBVF9FVkFMCisgICAgLyogQXV0b2NvbW1hbmRzIG1heSBhYm9ydCBzY3JpcHQgcHJvY2Vzc2luZy4gKi8KKyAgICBpZiAoYWJvcnRpbmcoKSkKKwlyZXR1cm47CisjIGVuZGlmCisKKyAgICAvKiBBdXRvY29tbWFuZHMgbWF5IGhhdmUgb3BlbmVkIG9yIGNsb3NlZCB3aW5kb3dzIGZvciB0aGlzIGJ1ZmZlci4KKyAgICAgKiBEZWNyZW1lbnQgdGhlIGNvdW50IGZvciB0aGUgY2xvc2Ugd2UgZG8gaGVyZS4gKi8KKyAgICBpZiAoYnVmLT5iX253aW5kb3dzID4gMCkKKwktLWJ1Zi0+Yl9ud2luZG93czsKKworICAgIC8qCisgICAgICogSXQncyBwb3NzaWJsZSB0aGF0IGF1dG9jb21tYW5kcyBjaGFuZ2UgY3VyYnVmIHRvIHRoZSBvbmUgYmVpbmcgZGVsZXRlZC4KKyAgICAgKiBUaGlzIG1pZ2h0IGNhdXNlIHRoZSBwcmV2aW91cyBjdXJidWYgdG8gYmUgZGVsZXRlZCB1bmV4cGVjdGVkbHkuICBCdXQKKyAgICAgKiBpbiBzb21lIGNhc2VzIGl0J3MgT0sgdG8gZGVsZXRlIHRoZSBjdXJidWYsIGJlY2F1c2UgYSBuZXcgb25lIGlzCisgICAgICogb2J0YWluZWQgYW55d2F5LiAgVGhlcmVmb3JlIG9ubHkgcmV0dXJuIGlmIGN1cmJ1ZiBjaGFuZ2VkIHRvIHRoZQorICAgICAqIGRlbGV0ZWQgYnVmZmVyLgorICAgICAqLworICAgIGlmIChidWYgPT0gY3VyYnVmICYmICFpc19jdXJidWYpCisJcmV0dXJuOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKyAgICBpZiAodXNpbmdOZXRiZWFucykKKwluZXRiZWFuc19maWxlX2Nsb3NlZChidWYpOworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpIHx8IGRlZmluZWQoRkVBVF9TVU5fV09SS1NIT1ApCisgICAgLyogQ2hhbmdlIGRpcmVjdG9yaWVzIHdoZW4gdGhlIGFjZCBvcHRpb24gaXMgc2V0IG9uLiAqLworICAgIGlmIChwX2FjZCAmJiBjdXJidWYtPmJfZmZuYW1lICE9IE5VTEwKKwkJCQkgICAgICYmIHZpbV9jaGRpcmZpbGUoY3VyYnVmLT5iX2ZmbmFtZSkgPT0gT0spCisJc2hvcnRlbl9mbmFtZXMoVFJVRSk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogUmVtb3ZlIHRoZSBidWZmZXIgZnJvbSB0aGUgbGlzdC4KKyAgICAgKi8KKyAgICBpZiAod2lwZV9idWYpCisgICAgeworI2lmZGVmIEZFQVRfU1VOX1dPUktTSE9QCisJaWYgKHVzaW5nU3VuV29ya1Nob3ApCisJICAgIHdvcmtzaG9wX2ZpbGVfY2xvc2VkX2xpbmVubygoY2hhciAqKWJ1Zi0+Yl9mZm5hbWUsCisJCQkoaW50KWJ1Zi0+Yl9sYXN0X2N1cnNvci5sbnVtKTsKKyNlbmRpZgorCXZpbV9mcmVlKGJ1Zi0+Yl9mZm5hbWUpOworCXZpbV9mcmVlKGJ1Zi0+Yl9zZm5hbWUpOworCWlmIChidWYtPmJfcHJldiA9PSBOVUxMKQorCSAgICBmaXJzdGJ1ZiA9IGJ1Zi0+Yl9uZXh0OworCWVsc2UKKwkgICAgYnVmLT5iX3ByZXYtPmJfbmV4dCA9IGJ1Zi0+Yl9uZXh0OworCWlmIChidWYtPmJfbmV4dCA9PSBOVUxMKQorCSAgICBsYXN0YnVmID0gYnVmLT5iX3ByZXY7CisJZWxzZQorCSAgICBidWYtPmJfbmV4dC0+Yl9wcmV2ID0gYnVmLT5iX3ByZXY7CisJZnJlZV9idWZmZXIoYnVmKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoZGVsX2J1ZikKKwl7CisJICAgIC8qIEZyZWUgYWxsIGludGVybmFsIHZhcmlhYmxlcyBhbmQgcmVzZXQgb3B0aW9uIHZhbHVlcywgdG8gbWFrZQorCSAgICAgKiAiOmJkZWwiIGNvbXBhdGlibGUgd2l0aCBWaW0gNS43LiAqLworCSAgICBmcmVlX2J1ZmZlcl9zdHVmZihidWYsIFRSVUUpOworCisJICAgIC8qIE1ha2UgaXQgbG9vayBsaWtlIGEgbmV3IGJ1ZmZlci4gKi8KKwkgICAgYnVmLT5iX2ZsYWdzID0gQkZfQ0hFQ0tfUk8gfCBCRl9ORVZFUkxPQURFRDsKKworCSAgICAvKiBJbml0IHRoZSBvcHRpb25zIHdoZW4gbG9hZGVkIGFnYWluLiAqLworCSAgICBidWYtPmJfcF9pbml0aWFsaXplZCA9IEZBTFNFOworCX0KKwlidWZfY2xlYXJfZmlsZShidWYpOworCWlmIChkZWxfYnVmKQorCSAgICBidWYtPmJfcF9ibCA9IEZBTFNFOworICAgIH0KK30KKworLyoKKyAqIE1ha2UgYnVmZmVyIG5vdCBjb250YWluIGEgZmlsZS4KKyAqLworICAgIHZvaWQKK2J1Zl9jbGVhcl9maWxlKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ID0gMTsKKyAgICB1bmNoYW5nZWQoYnVmLCBUUlVFKTsKKyNpZm5kZWYgU0hPUlRfRk5BTUUKKyAgICBidWYtPmJfc2hvcnRuYW1lID0gRkFMU0U7CisjZW5kaWYKKyAgICBidWYtPmJfcF9lb2wgPSBUUlVFOworICAgIGJ1Zi0+Yl9zdGFydF9lb2wgPSBUUlVFOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBidWYtPmJfcF9ib21iID0gRkFMU0U7CisjZW5kaWYKKyAgICBidWYtPmJfbWwubWxfbWZwID0gTlVMTDsKKyAgICBidWYtPmJfbWwubWxfZmxhZ3MgPSBNTF9FTVBUWTsJCS8qIGVtcHR5IGJ1ZmZlciAqLworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIG5ldGJlYW5zX2RlbGV0ZWRfYWxsX2xpbmVzKGJ1Zik7CisgICAgbmV0YmVhbnNPcGVuRmlsZSA9IDA7ICAvKiByZXNldCBpbiBuZXRiZWFuc19maWxlX29wZW5lZCgpICovCisjZW5kaWYKK30KKworLyoKKyAqIGJ1Zl9mcmVlYWxsKCkgLSBmcmVlIGFsbCB0aGluZ3MgYWxsb2NhdGVkIGZvciBhIGJ1ZmZlciB0aGF0IGFyZSByZWxhdGVkIHRvCisgKiB0aGUgZmlsZS4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorYnVmX2ZyZWVhbGwoYnVmLCBkZWxfYnVmLCB3aXBlX2J1ZikKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJZGVsX2J1ZjsJLyogYnVmZmVyIGlzIGdvaW5nIHRvIGJlIGRlbGV0ZWQgKi8KKyAgICBpbnQJCXdpcGVfYnVmOwkvKiBidWZmZXIgaXMgZ29pbmcgdG8gYmUgd2lwZWQgb3V0ICovCit7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgaW50CQlpc19jdXJidWYgPSAoYnVmID09IGN1cmJ1Zik7CisKKyAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZVTkxPQUQsIGJ1Zi0+Yl9mbmFtZSwgYnVmLT5iX2ZuYW1lLCBGQUxTRSwgYnVmKTsKKyAgICBpZiAoIWJ1Zl92YWxpZChidWYpKQkgICAgLyogYXV0b2NvbW1hbmRzIG1heSBkZWxldGUgdGhlIGJ1ZmZlciAqLworCXJldHVybjsKKyAgICBpZiAoZGVsX2J1ZiAmJiBidWYtPmJfcF9ibCkKKyAgICB7CisJYXBwbHlfYXV0b2NtZHMoRVZFTlRfQlVGREVMRVRFLCBidWYtPmJfZm5hbWUsIGJ1Zi0+Yl9mbmFtZSwgRkFMU0UsIGJ1Zik7CisJaWYgKCFidWZfdmFsaWQoYnVmKSkJICAgIC8qIGF1dG9jb21tYW5kcyBtYXkgZGVsZXRlIHRoZSBidWZmZXIgKi8KKwkgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAod2lwZV9idWYpCisgICAgeworCWFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRldJUEVPVVQsIGJ1Zi0+Yl9mbmFtZSwgYnVmLT5iX2ZuYW1lLAorCQkJCQkJCQkgIEZBTFNFLCBidWYpOworCWlmICghYnVmX3ZhbGlkKGJ1ZikpCSAgICAvKiBhdXRvY29tbWFuZHMgbWF5IGRlbGV0ZSB0aGUgYnVmZmVyICovCisJICAgIHJldHVybjsKKyAgICB9CisjIGlmZGVmIEZFQVRfRVZBTAorICAgIGlmIChhYm9ydGluZygpKQkgICAgLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCisJcmV0dXJuOworIyBlbmRpZgorCisgICAgLyoKKyAgICAgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYXV0b2NvbW1hbmRzIGNoYW5nZSBjdXJidWYgdG8gdGhlIG9uZSBiZWluZyBkZWxldGVkLgorICAgICAqIFRoaXMgbWlnaHQgY2F1c2UgY3VyYnVmIHRvIGJlIGRlbGV0ZWQgdW5leHBlY3RlZGx5LiAgQnV0IGluIHNvbWUgY2FzZXMKKyAgICAgKiBpdCdzIE9LIHRvIGRlbGV0ZSB0aGUgY3VyYnVmLCBiZWNhdXNlIGEgbmV3IG9uZSBpcyBvYnRhaW5lZCBhbnl3YXkuCisgICAgICogVGhlcmVmb3JlIG9ubHkgcmV0dXJuIGlmIGN1cmJ1ZiBjaGFuZ2VkIHRvIHRoZSBkZWxldGVkIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBpZiAoYnVmID09IGN1cmJ1ZiAmJiAhaXNfY3VyYnVmKQorCXJldHVybjsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRElGRgorICAgIGRpZmZfYnVmX2RlbGV0ZShidWYpOwkgICAgLyogQ2FuJ3QgdXNlICdkaWZmJyBmb3IgdW5sb2FkZWQgYnVmZmVyLiAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9UQ0wKKyAgICB0Y2xfYnVmZmVyX2ZyZWUoYnVmKTsKKyNlbmRpZgorICAgIHVfYmxvY2tmcmVlKGJ1Zik7CQkgICAgLyogZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdW5kbyAqLworICAgIG1sX2Nsb3NlKGJ1ZiwgVFJVRSk7CSAgICAvKiBjbG9zZSBhbmQgZGVsZXRlIHRoZSBtZW1saW5lL21lbWZpbGUgKi8KKyAgICBidWYtPmJfbWwubWxfbGluZV9jb3VudCA9IDA7ICAgIC8qIG5vIGxpbmVzIGluIGJ1ZmZlciAqLworICAgIHVfY2xlYXJhbGwoYnVmKTsJCSAgICAvKiByZXNldCBhbGwgdW5kbyBpbmZvcm1hdGlvbiAqLworI2lmZGVmIEZFQVRfU1lOX0hMCisgICAgc3ludGF4X2NsZWFyKGJ1Zik7CQkgICAgLyogcmVzZXQgc3ludGF4IGluZm8gKi8KKyNlbmRpZgorfQorCisvKgorICogRnJlZSBhIGJ1ZmZlciBzdHJ1Y3R1cmUgYW5kIHRoZSB0aGluZ3MgaXQgY29udGFpbnMgcmVsYXRlZCB0byB0aGUgYnVmZmVyCisgKiBpdHNlbGYgKG5vdCB0aGUgZmlsZSwgdGhhdCBtdXN0IGhhdmUgYmVlbiBkb25lIGFscmVhZHkpLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZyZWVfYnVmZmVyKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIGZyZWVfYnVmZmVyX3N0dWZmKGJ1ZiwgVFJVRSk7CisjaWZkZWYgRkVBVF9QRVJMCisgICAgcGVybF9idWZfZnJlZShidWYpOworI2VuZGlmCisjaWZkZWYgRkVBVF9QWVRIT04KKyAgICBweXRob25fYnVmZmVyX2ZyZWUoYnVmKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfUlVCWQorICAgIHJ1YnlfYnVmZmVyX2ZyZWUoYnVmKTsKKyNlbmRpZgorICAgIHZpbV9mcmVlKGJ1Zik7Cit9CisKKy8qCisgKiBGcmVlIHN0dWZmIGluIHRoZSBidWZmZXIgZm9yICI6YmRlbCIgYW5kIHdoZW4gd2lwaW5nIG91dCB0aGUgYnVmZmVyLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZyZWVfYnVmZmVyX3N0dWZmKGJ1ZiwgZnJlZV9vcHRpb25zKQorICAgIGJ1Zl9UCSpidWY7CisgICAgaW50CQlmcmVlX29wdGlvbnM7CQkvKiBmcmVlIG9wdGlvbnMgYXMgd2VsbCAqLworeworICAgIGlmIChmcmVlX29wdGlvbnMpCisgICAgeworCWNsZWFyX3dpbmluZm8oYnVmKTsJCS8qIGluY2x1ZGluZyB3aW5kb3ctbG9jYWwgb3B0aW9ucyAqLworCWZyZWVfYnVmX29wdGlvbnMoYnVmLCBUUlVFKTsKKyAgICB9CisjaWZkZWYgRkVBVF9FVkFMCisgICAgdmFyX2NsZWFyKCZidWYtPmJfdmFycyk7CQkvKiBmcmVlIGFsbCBpbnRlcm5hbCB2YXJpYWJsZXMgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfVVNSX0NNRFMKKyAgICB1Y19jbGVhcigmYnVmLT5iX3VjbWRzKTsJCS8qIGNsZWFyIGxvY2FsIHVzZXIgY29tbWFuZHMgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfU0lHTlMKKyAgICBidWZfZGVsZXRlX3NpZ25zKGJ1Zik7CQkvKiBkZWxldGUgYW55IHNpZ25zICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisgICAgbWFwX2NsZWFyX2ludChidWYsIE1BUF9BTExfTU9ERVMsIFRSVUUsIEZBTFNFKTsgIC8qIGNsZWFyIGxvY2FsIG1hcHBpbmdzICovCisgICAgbWFwX2NsZWFyX2ludChidWYsIE1BUF9BTExfTU9ERVMsIFRSVUUsIFRSVUUpOyAgIC8qIGNsZWFyIGxvY2FsIGFiYnJldnMgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKyAgICB2aW1fZnJlZShidWYtPmJfc3RhcnRfZmVuYyk7CisgICAgYnVmLT5iX3N0YXJ0X2ZlbmMgPSBOVUxMOworI2VuZGlmCit9CisKKy8qCisgKiBGcmVlIHRoZSBiX3dpbmluZm8gbGlzdCBmb3IgYnVmZmVyICJidWYiLgorICovCisgICAgc3RhdGljIHZvaWQKK2NsZWFyX3dpbmluZm8oYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgd2luaW5mb19UCSp3aXA7CisKKyAgICB3aGlsZSAoYnVmLT5iX3dpbmluZm8gIT0gTlVMTCkKKyAgICB7CisJd2lwID0gYnVmLT5iX3dpbmluZm87CisJYnVmLT5iX3dpbmluZm8gPSB3aXAtPndpX25leHQ7CisJaWYgKHdpcC0+d2lfb3B0c2V0KQorCXsKKwkgICAgY2xlYXJfd2lub3B0KCZ3aXAtPndpX29wdCk7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIGRlbGV0ZUZvbGRSZWN1cnNlKCZ3aXAtPndpX2ZvbGRzKTsKKyNlbmRpZgorCX0KKwl2aW1fZnJlZSh3aXApOworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9MSVNUQ01EUykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBHbyB0byBhbm90aGVyIGJ1ZmZlci4gIEhhbmRsZXMgdGhlIHJlc3VsdCBvZiB0aGUgQVRURU5USU9OIGRpYWxvZy4KKyAqLworICAgIHZvaWQKK2dvdG9fYnVmZmVyKGVhcCwgc3RhcnQsIGRpciwgY291bnQpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGludAkJc3RhcnQ7CisgICAgaW50CQlkaXI7CisgICAgaW50CQljb3VudDsKK3sKKyMgaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIFwKKwkJJiYgKGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykpCisgICAgYnVmX1QJKm9sZF9jdXJidWYgPSBjdXJidWY7CisKKyAgICBzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfRElBTE9HOworIyBlbmRpZgorICAgICh2b2lkKWRvX2J1ZmZlcigqZWFwLT5jbWQgPT0gJ3MnID8gRE9CVUZfU1BMSVQgOiBET0JVRl9HT1RPLAorCQkJCQkgICAgIHN0YXJ0LCBkaXIsIGNvdW50LCBlYXAtPmZvcmNlaXQpOworIyBpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgXAorCQkmJiAoZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKSkKKyAgICBpZiAoc3dhcF9leGlzdHNfYWN0aW9uID09IFNFQV9RVUlUICYmICplYXAtPmNtZCA9PSAncycpCisgICAgeworCS8qIFF1aXR0aW5nIG1lYW5zIGNsb3NpbmcgdGhlIHNwbGl0IHdpbmRvdywgbm90aGluZyBlbHNlLiAqLworCXdpbl9jbG9zZShjdXJ3aW4sIFRSVUUpOworCXN3YXBfZXhpc3RzX2FjdGlvbiA9IFNFQV9OT05FOworICAgIH0KKyAgICBlbHNlCisJaGFuZGxlX3N3YXBfZXhpc3RzKG9sZF9jdXJidWYpOworIyBlbmRpZgorfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogSGFuZGxlIHRoZSBzaXR1YXRpb24gb2Ygc3dhcF9leGlzdHNfYWN0aW9uIGJlaW5nIHNldC4KKyAqIEl0IGlzIGFsbG93ZWQgZm9yICJvbGRfY3VyYnVmIiB0byBiZSBOVUxMIG9yIGludmFsaWQuCisgKi8KKyAgICB2b2lkCitoYW5kbGVfc3dhcF9leGlzdHMob2xkX2N1cmJ1ZikKKyAgICBidWZfVAkqb2xkX2N1cmJ1ZjsKK3sKKyAgICBpZiAoc3dhcF9leGlzdHNfYWN0aW9uID09IFNFQV9RVUlUKQorICAgIHsKKwkvKiBVc2VyIHNlbGVjdGVkIFF1aXQgYXQgQVRURU5USU9OIHByb21wdC4gIEdvIGJhY2sgdG8gcHJldmlvdXMKKwkgKiBidWZmZXIuICBJZiB0aGF0IGJ1ZmZlciBpcyBnb25lIG9yIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IG9uZSwKKwkgKiBvcGVuIGEgbmV3LCBlbXB0eSBidWZmZXIuICovCisJc3dhcF9leGlzdHNfYWN0aW9uID0gU0VBX05PTkU7CS8qIGRvbid0IHdhbnQgaXQgYWdhaW4gKi8KKwljbG9zZV9idWZmZXIoY3Vyd2luLCBjdXJidWYsIERPQlVGX1VOTE9BRCk7CisJaWYgKCFidWZfdmFsaWQob2xkX2N1cmJ1ZikgfHwgb2xkX2N1cmJ1ZiA9PSBjdXJidWYpCisJICAgIG9sZF9jdXJidWYgPSBidWZsaXN0X25ldyhOVUxMLCBOVUxMLCAxTCwKKwkJCQkJIEJMTl9DVVJCVUYgfCBCTE5fTElTVEVEIHwgQkxOX0ZPUkNFKTsKKwlpZiAob2xkX2N1cmJ1ZiAhPSBOVUxMKQorCSAgICBlbnRlcl9idWZmZXIob2xkX2N1cmJ1Zik7CisJLyogSWYgIm9sZF9jdXJidWYiIGlzIE5VTEwgd2UgYXJlIGluIGJpZyB0cm91YmxlIGhlcmUuLi4gKi8KKyAgICB9CisgICAgZWxzZSBpZiAoc3dhcF9leGlzdHNfYWN0aW9uID09IFNFQV9SRUNPVkVSKQorICAgIHsKKwkvKiBVc2VyIHNlbGVjdGVkIFJlY292ZXIgYXQgQVRURU5USU9OIHByb21wdC4gKi8KKwltc2dfc2Nyb2xsID0gVFJVRTsKKwltbF9yZWNvdmVyKCk7CisJTVNHX1BVVFMoIlxuIik7CS8qIGRvbid0IG92ZXJ3cml0ZSB0aGUgbGFzdCBtZXNzYWdlICovCisJY21kbGluZV9yb3cgPSBtc2dfcm93OworCWRvX21vZGVsaW5lcygpOworICAgIH0KKyAgICBzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfTk9ORTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0xJU1RDTURTKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIGRvX2J1ZmRlbCgpIC0gZGVsZXRlIG9yIHVubG9hZCBidWZmZXIocykKKyAqCisgKiBhZGRyX2NvdW50ID09IDA6ICI6YmRlbCIgLSBkZWxldGUgY3VycmVudCBidWZmZXIKKyAqIGFkZHJfY291bnQgPT0gMTogIjpOIGJkZWwiIG9yICI6YmRlbCBOIFtOIC4uXSIgLSBmaXJzdCBkZWxldGUKKyAqCQkgICAgYnVmZmVyICJlbmRfYm5yIiwgdGhlbiBhbnkgb3RoZXIgYXJndW1lbnRzLgorICogYWRkcl9jb3VudCA9PSAyOiAiOk4sTiBiZGVsIiAtIGRlbGV0ZSBidWZmZXJzIGluIHJhbmdlCisgKgorICogY29tbWFuZCBjYW4gYmUgRE9CVUZfVU5MT0FEICgiOmJ1bmxvYWQiKSwgRE9CVUZfV0lQRSAoIjpid2lwZW91dCIpIG9yCisgKiBET0JVRl9ERUwgKCI6YmRlbCIpCisgKgorICogUmV0dXJucyBlcnJvciBtZXNzYWdlIG9yIE5VTEwKKyAqLworICAgIGNoYXJfdSAqCitkb19idWZkZWwoY29tbWFuZCwgYXJnLCBhZGRyX2NvdW50LCBzdGFydF9ibnIsIGVuZF9ibnIsIGZvcmNlaXQpCisgICAgaW50CQljb21tYW5kOworICAgIGNoYXJfdQkqYXJnOwkJLyogcG9pbnRlciB0byBleHRyYSBhcmd1bWVudHMgKi8KKyAgICBpbnQJCWFkZHJfY291bnQ7CisgICAgaW50CQlzdGFydF9ibnI7CS8qIGZpcnN0IGJ1ZmZlciBudW1iZXIgaW4gYSByYW5nZSAqLworICAgIGludAkJZW5kX2JucjsJLyogYnVmZmVyIG5yIG9yIGxhc3QgYnVmZmVyIG5yIGluIGEgcmFuZ2UgKi8KKyAgICBpbnQJCWZvcmNlaXQ7Cit7CisgICAgaW50CQlkb19jdXJyZW50ID0gMDsJLyogZGVsZXRlIGN1cnJlbnQgYnVmZmVyPyAqLworICAgIGludAkJZGVsZXRlZCA9IDA7CS8qIG51bWJlciBvZiBidWZmZXJzIGRlbGV0ZWQgKi8KKyAgICBjaGFyX3UJKmVycm9ybXNnID0gTlVMTDsgLyogcmV0dXJuIHZhbHVlICovCisgICAgaW50CQlibnI7CQkvKiBidWZmZXIgbnVtYmVyICovCisgICAgY2hhcl91CSpwOworCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgbmV0YmVhbnNDbG9zZUZpbGUgPSAxOworI2VuZGlmCisgICAgaWYgKGFkZHJfY291bnQgPT0gMCkKKyAgICB7CisJKHZvaWQpZG9fYnVmZmVyKGNvbW1hbmQsIERPQlVGX0NVUlJFTlQsIEZPUldBUkQsIDAsIGZvcmNlaXQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmIChhZGRyX2NvdW50ID09IDIpCisJeworCSAgICBpZiAoKmFyZykJCS8qIGJvdGggcmFuZ2UgYW5kIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkICovCisJCXJldHVybiAoY2hhcl91ICopXyhlX3RyYWlsaW5nKTsKKwkgICAgYm5yID0gc3RhcnRfYm5yOworCX0KKwllbHNlCS8qIGFkZHJfY291bnQgPT0gMSAqLworCSAgICBibnIgPSBlbmRfYm5yOworCisJZm9yICggOyFnb3RfaW50OyB1aV9icmVha2NoZWNrKCkpCisJeworCSAgICAvKgorCSAgICAgKiBkZWxldGUgdGhlIGN1cnJlbnQgYnVmZmVyIGxhc3QsIG90aGVyd2lzZSB3aGVuIHRoZQorCSAgICAgKiBjdXJyZW50IGJ1ZmZlciBpcyBkZWxldGVkLCB0aGUgbmV4dCBidWZmZXIgYmVjb21lcworCSAgICAgKiB0aGUgY3VycmVudCBvbmUgYW5kIHdpbGwgYmUgbG9hZGVkLCB3aGljaCBtYXkgdGhlbgorCSAgICAgKiBhbHNvIGJlIGRlbGV0ZWQsIGV0Yy4KKwkgICAgICovCisJICAgIGlmIChibnIgPT0gY3VyYnVmLT5iX2ZudW0pCisJCWRvX2N1cnJlbnQgPSBibnI7CisJICAgIGVsc2UgaWYgKGRvX2J1ZmZlcihjb21tYW5kLCBET0JVRl9GSVJTVCwgRk9SV0FSRCwgKGludClibnIsCisJCQkJCQkJICAgICAgIGZvcmNlaXQpID09IE9LKQorCQkrK2RlbGV0ZWQ7CisKKwkgICAgLyoKKwkgICAgICogZmluZCBuZXh0IGJ1ZmZlciBudW1iZXIgdG8gZGVsZXRlL3VubG9hZAorCSAgICAgKi8KKwkgICAgaWYgKGFkZHJfY291bnQgPT0gMikKKwkgICAgeworCQlpZiAoKytibnIgPiBlbmRfYm5yKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgZWxzZSAgICAvKiBhZGRyX2NvdW50ID09IDEgKi8KKwkgICAgeworCQlhcmcgPSBza2lwd2hpdGUoYXJnKTsKKwkJaWYgKCphcmcgPT0gTlVMKQorCQkgICAgYnJlYWs7CisJCWlmICghVklNX0lTRElHSVQoKmFyZykpCisJCXsKKwkJICAgIHAgPSBza2lwdG93aGl0ZV9lc2MoYXJnKTsKKwkJICAgIGJuciA9IGJ1Zmxpc3RfZmluZHBhdChhcmcsIHAsIGNvbW1hbmQgPT0gRE9CVUZfV0lQRSwgRkFMU0UpOworCQkgICAgaWYgKGJuciA8IDApCSAgICAvKiBmYWlsZWQgKi8KKwkJCWJyZWFrOworCQkgICAgYXJnID0gcDsKKwkJfQorCQllbHNlCisJCSAgICBibnIgPSBnZXRkaWdpdHMoJmFyZyk7CisJICAgIH0KKwl9CisJaWYgKCFnb3RfaW50ICYmIGRvX2N1cnJlbnQgJiYgZG9fYnVmZmVyKGNvbW1hbmQsIERPQlVGX0ZJUlNULAorCQkJCQkgIEZPUldBUkQsIGRvX2N1cnJlbnQsIGZvcmNlaXQpID09IE9LKQorCSAgICArK2RlbGV0ZWQ7CisKKwlpZiAoZGVsZXRlZCA9PSAwKQorCXsKKwkgICAgaWYgKGNvbW1hbmQgPT0gRE9CVUZfVU5MT0FEKQorCQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCJFNTE1OiBObyBidWZmZXJzIHdlcmUgdW5sb2FkZWQiKSk7CisJICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0gRE9CVUZfREVMKQorCQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCJFNTE2OiBObyBidWZmZXJzIHdlcmUgZGVsZXRlZCIpKTsKKwkgICAgZWxzZQorCQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCJFNTE3OiBObyBidWZmZXJzIHdlcmUgd2lwZWQgb3V0IikpOworCSAgICBlcnJvcm1zZyA9IElPYnVmZjsKKwl9CisJZWxzZSBpZiAoZGVsZXRlZCA+PSBwX3JlcG9ydCkKKwl7CisJICAgIGlmIChjb21tYW5kID09IERPQlVGX1VOTE9BRCkKKwkgICAgeworCQlpZiAoZGVsZXRlZCA9PSAxKQorCQkgICAgTVNHKF8oIjEgYnVmZmVyIHVubG9hZGVkIikpOworCQllbHNlCisJCSAgICBzbXNnKChjaGFyX3UgKilfKCIlZCBidWZmZXJzIHVubG9hZGVkIiksIGRlbGV0ZWQpOworCSAgICB9CisJICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0gRE9CVUZfREVMKQorCSAgICB7CisJCWlmIChkZWxldGVkID09IDEpCisJCSAgICBNU0coXygiMSBidWZmZXIgZGVsZXRlZCIpKTsKKwkJZWxzZQorCQkgICAgc21zZygoY2hhcl91ICopXygiJWQgYnVmZmVycyBkZWxldGVkIiksIGRlbGV0ZWQpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoZGVsZXRlZCA9PSAxKQorCQkgICAgTVNHKF8oIjEgYnVmZmVyIHdpcGVkIG91dCIpKTsKKwkJZWxzZQorCQkgICAgc21zZygoY2hhcl91ICopXygiJWQgYnVmZmVycyB3aXBlZCBvdXQiKSwgZGVsZXRlZCk7CisJICAgIH0KKwl9CisgICAgfQorCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgbmV0YmVhbnNDbG9zZUZpbGUgPSAwOworI2VuZGlmCisKKyAgICByZXR1cm4gZXJyb3Jtc2c7Cit9CisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tbWFuZHMgZm9yIHRoZSBidWZmZXIgbGlzdC4KKyAqCisgKiBhY3Rpb24gPT0gRE9CVUZfR09UTwkgICAgZ28gdG8gc3BlY2lmaWVkIGJ1ZmZlcgorICogYWN0aW9uID09IERPQlVGX1NQTElUICAgIHNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gc3BlY2lmaWVkIGJ1ZmZlcgorICogYWN0aW9uID09IERPQlVGX1VOTE9BRCAgIHVubG9hZCBzcGVjaWZpZWQgYnVmZmVyKHMpCisgKiBhY3Rpb24gPT0gRE9CVUZfREVMCSAgICBkZWxldGUgc3BlY2lmaWVkIGJ1ZmZlcihzKSBmcm9tIGJ1ZmZlciBsaXN0CisgKiBhY3Rpb24gPT0gRE9CVUZfV0lQRQkgICAgZGVsZXRlIHNwZWNpZmllZCBidWZmZXIocykgcmVhbGx5CisgKgorICogc3RhcnQgPT0gRE9CVUZfQ1VSUkVOVCAgIGdvIHRvICJjb3VudCIgYnVmZmVyIGZyb20gY3VycmVudCBidWZmZXIKKyAqIHN0YXJ0ID09IERPQlVGX0ZJUlNUCSAgICBnbyB0byAiY291bnQiIGJ1ZmZlciBmcm9tIGZpcnN0IGJ1ZmZlcgorICogc3RhcnQgPT0gRE9CVUZfTEFTVAkgICAgZ28gdG8gImNvdW50IiBidWZmZXIgZnJvbSBsYXN0IGJ1ZmZlcgorICogc3RhcnQgPT0gRE9CVUZfTU9ECSAgICBnbyB0byAiY291bnQiIG1vZGlmaWVkIGJ1ZmZlciBmcm9tIGN1cnJlbnQgYnVmZmVyCisgKgorICogUmV0dXJuIEZBSUwgb3IgT0suCisgKi8KKyAgICBpbnQKK2RvX2J1ZmZlcihhY3Rpb24sIHN0YXJ0LCBkaXIsIGNvdW50LCBmb3JjZWl0KQorICAgIGludAkJYWN0aW9uOworICAgIGludAkJc3RhcnQ7CisgICAgaW50CQlkaXI7CQkvKiBGT1JXQVJEIG9yIEJBQ0tXQVJEICovCisgICAgaW50CQljb3VudDsJCS8qIGJ1ZmZlciBudW1iZXIgb3IgbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KKyAgICBpbnQJCWZvcmNlaXQ7CS8qIFRSVUUgZm9yIDouLi4hICovCit7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBidWZfVAkqYnA7CisgICAgaW50CQl1bmxvYWQgPSAoYWN0aW9uID09IERPQlVGX1VOTE9BRCB8fCBhY3Rpb24gPT0gRE9CVUZfREVMCisJCQkJCQkgICAgIHx8IGFjdGlvbiA9PSBET0JVRl9XSVBFKTsKKworICAgIHN3aXRjaCAoc3RhcnQpCisgICAgeworCWNhc2UgRE9CVUZfRklSU1Q6ICAgYnVmID0gZmlyc3RidWY7IGJyZWFrOworCWNhc2UgRE9CVUZfTEFTVDogICAgYnVmID0gbGFzdGJ1ZjsgIGJyZWFrOworCWRlZmF1bHQ6CSAgICBidWYgPSBjdXJidWY7ICAgYnJlYWs7CisgICAgfQorICAgIGlmIChzdGFydCA9PSBET0JVRl9NT0QpCSAgICAvKiBmaW5kIG5leHQgbW9kaWZpZWQgYnVmZmVyICovCisgICAgeworCXdoaWxlIChjb3VudC0tID4gMCkKKwl7CisJICAgIGRvCisJICAgIHsKKwkJYnVmID0gYnVmLT5iX25leHQ7CisJCWlmIChidWYgPT0gTlVMTCkKKwkJICAgIGJ1ZiA9IGZpcnN0YnVmOworCSAgICB9CisJICAgIHdoaWxlIChidWYgIT0gY3VyYnVmICYmICFidWZJc0NoYW5nZWQoYnVmKSk7CisJfQorCWlmICghYnVmSXNDaGFuZ2VkKGJ1ZikpCisJeworCSAgICBFTVNHKF8oIkU4NDogTm8gbW9kaWZpZWQgYnVmZmVyIGZvdW5kIikpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXJ0ID09IERPQlVGX0ZJUlNUICYmIGNvdW50KSAvKiBmaW5kIHNwZWNpZmllZCBidWZmZXIgbnVtYmVyICovCisgICAgeworCXdoaWxlIChidWYgIT0gTlVMTCAmJiBidWYtPmJfZm51bSAhPSBjb3VudCkKKwkgICAgYnVmID0gYnVmLT5iX25leHQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJYnAgPSBOVUxMOworCXdoaWxlIChjb3VudCA+IDAgfHwgKCF1bmxvYWQgJiYgIWJ1Zi0+Yl9wX2JsICYmIGJwICE9IGJ1ZikpCisJeworCSAgICAvKiByZW1lbWJlciB0aGUgYnVmZmVyIHdoZXJlIHdlIHN0YXJ0LCB3ZSBjb21lIGJhY2sgdGhlcmUgd2hlbiBhbGwKKwkgICAgICogYnVmZmVycyBhcmUgdW5saXN0ZWQuICovCisJICAgIGlmIChicCA9PSBOVUxMKQorCQlicCA9IGJ1ZjsKKwkgICAgaWYgKGRpciA9PSBGT1JXQVJEKQorCSAgICB7CisJCWJ1ZiA9IGJ1Zi0+Yl9uZXh0OworCQlpZiAoYnVmID09IE5VTEwpCisJCSAgICBidWYgPSBmaXJzdGJ1ZjsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJYnVmID0gYnVmLT5iX3ByZXY7CisJCWlmIChidWYgPT0gTlVMTCkKKwkJICAgIGJ1ZiA9IGxhc3RidWY7CisJICAgIH0KKwkgICAgLyogZG9uJ3QgY291bnQgdW5saXN0ZWQgYnVmZmVycyAqLworCSAgICBpZiAodW5sb2FkIHx8IGJ1Zi0+Yl9wX2JsKQorCSAgICB7CisJCSAtLWNvdW50OworCQkgYnAgPSBOVUxMOwkvKiB1c2UgdGhpcyBidWZmZXIgYXMgbmV3IHN0YXJ0aW5nIHBvaW50ICovCisJICAgIH0KKwkgICAgaWYgKGJwID09IGJ1ZikKKwkgICAgeworCQkvKiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLiAqLworCQlFTVNHKF8oIkU4NTogVGhlcmUgaXMgbm8gbGlzdGVkIGJ1ZmZlciIpKTsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKGJ1ZiA9PSBOVUxMKQkgICAgLyogY291bGQgbm90IGZpbmQgaXQgKi8KKyAgICB7CisJaWYgKHN0YXJ0ID09IERPQlVGX0ZJUlNUKQorCXsKKwkgICAgLyogZG9uJ3Qgd2FybiB3aGVuIGRlbGV0aW5nICovCisJICAgIGlmICghdW5sb2FkKQorCQlFTVNHTihfKCJFODY6IEJ1ZmZlciAlbGQgZG9lcyBub3QgZXhpc3QiKSwgY291bnQpOworCX0KKwllbHNlIGlmIChkaXIgPT0gRk9SV0FSRCkKKwkgICAgRU1TRyhfKCJFODc6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBidWZmZXIiKSk7CisJZWxzZQorCSAgICBFTVNHKF8oIkU4ODogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBidWZmZXIiKSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisjaWZkZWYgRkVBVF9HVUkKKyAgICBuZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0xJU1RDTURTCisgICAgLyoKKyAgICAgKiBkZWxldGUgYnVmZmVyIGJ1ZiBmcm9tIG1lbW9yeSBhbmQvb3IgdGhlIGxpc3QKKyAgICAgKi8KKyAgICBpZiAodW5sb2FkKQorICAgIHsKKwlpbnQJZm9yd2FyZDsKKwlpbnQJcmV0dmFsOworCisJLyogV2hlbiB1bmxvYWRpbmcgb3IgZGVsZXRpbmcgYSBidWZmZXIgdGhhdCdzIGFscmVhZHkgdW5sb2FkZWQgYW5kCisJICogdW5saXN0ZWQ6IGZhaWwgc2lsZW50bHkuICovCisJaWYgKGFjdGlvbiAhPSBET0JVRl9XSVBFICYmIGJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCAmJiAhYnVmLT5iX3BfYmwpCisJICAgIHJldHVybiBGQUlMOworCisJaWYgKCFmb3JjZWl0ICYmIGJ1ZklzQ2hhbmdlZChidWYpKQorCXsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCisJICAgIGlmICgocF9jb25maXJtIHx8IGNtZG1vZC5jb25maXJtKSAmJiBwX3dyaXRlKQorCSAgICB7CisJCWRpYWxvZ19jaGFuZ2VkKGJ1ZiwgRkFMU0UpOworIyBpZmRlZiBGRUFUX0FVVE9DTUQKKwkJaWYgKCFidWZfdmFsaWQoYnVmKSkKKwkJICAgIC8qIEF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyLCBvb3BzISAgSXQncyBub3QgY2hhbmdlZAorCQkgICAgICogbm93LiAqLworCQkgICAgcmV0dXJuIEZBSUw7CisjIGVuZGlmCisJICAgIH0KKwkgICAgaWYgKGJ1ZklzQ2hhbmdlZChidWYpKQorI2VuZGlmCisJICAgIHsKKwkJRU1TR04oXygiRTg5OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyICVsZCAoYWRkICEgdG8gb3ZlcnJpZGUpIiksCisJCQkJCQkJCSBidWYtPmJfZm51bSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJfQorCisJLyoKKwkgKiBJZiBkZWxldGluZyB0aGUgbGFzdCAobGlzdGVkKSBidWZmZXIsIG1ha2UgaXQgZW1wdHkuCisJICogVGhlIGxhc3QgKGxpc3RlZCkgYnVmZmVyIGNhbm5vdCBiZSB1bmxvYWRlZC4KKwkgKi8KKwlmb3IgKGJwID0gZmlyc3RidWY7IGJwICE9IE5VTEw7IGJwID0gYnAtPmJfbmV4dCkKKwkgICAgaWYgKGJwLT5iX3BfYmwgJiYgYnAgIT0gYnVmKQorCQlicmVhazsKKwlpZiAoYnAgPT0gTlVMTCAmJiBidWYgPT0gY3VyYnVmKQorCXsKKwkgICAgaWYgKGFjdGlvbiA9PSBET0JVRl9VTkxPQUQpCisJICAgIHsKKwkJRU1TRyhfKCJFOTA6IENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIiKSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisKKwkgICAgLyogQ2xvc2UgYW55IG90aGVyIHdpbmRvd3Mgb24gdGhpcyBidWZmZXIsIHRoZW4gbWFrZSBpdCBlbXB0eS4gKi8KKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkgICAgeworCQl3aW5fVAkqd3AsICpuZXh0d3A7CisKKwkJZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSBOVUxMOyB3cCA9IG5leHR3cCkKKwkJeworCQkgICAgbmV4dHdwID0gd3AtPndfbmV4dDsKKwkJICAgIGlmICh3cCAhPSBjdXJ3aW4gJiYgd3AtPndfYnVmZmVyID09IGJ1ZikKKwkJICAgIHsKKwkJCS8qIFN0YXJ0IGFsbCBvdmVyLCBhdXRvY29tbWFuZHMgbWF5IGNoYW5nZSB0aGUgd2luZG93CisJCQkgKiBsYXlvdXQuICovCisJCQluZXh0d3AgPSBmaXJzdHdpbjsKKwkJCXdpbl9jbG9zZSh3cCwgRkFMU0UpOworCQkgICAgfQorCQl9CisJICAgIH0KKyNlbmRpZgorCSAgICBzZXRwY21hcmsoKTsKKwkgICAgcmV0dmFsID0gZG9fZWNtZCgwLCBOVUxMLCBOVUxMLCBOVUxMLCBFQ01EX09ORSwKKwkJCQkJCSAgZm9yY2VpdCA/IEVDTURfRk9SQ0VJVCA6IDApOworCisJICAgIC8qCisJICAgICAqIGRvX2VjbWQoKSBtYXkgY3JlYXRlIGEgbmV3IGJ1ZmZlciwgdGhlbiB3ZSBoYXZlIHRvIGRlbGV0ZQorCSAgICAgKiB0aGUgb2xkIG9uZS4gIEJ1dCBkb19lY21kKCkgbWF5IGhhdmUgZG9uZSB0aGF0IGFscmVhZHksIGNoZWNrCisJICAgICAqIGlmIHRoZSBidWZmZXIgc3RpbGwgZXhpc3RzLgorCSAgICAgKi8KKwkgICAgaWYgKGJ1ZiAhPSBjdXJidWYgJiYgYnVmX3ZhbGlkKGJ1ZikgJiYgYnVmLT5iX253aW5kb3dzID09IDApCisJCWNsb3NlX2J1ZmZlcihOVUxMLCBidWYsIGFjdGlvbik7CisJICAgIHJldHVybiByZXR2YWw7CisJfQorCisjaWZkZWYgRkVBVF9XSU5ET1dTCisJLyoKKwkgKiBJZiB0aGUgZGVsZXRlZCBidWZmZXIgaXMgdGhlIGN1cnJlbnQgb25lLCBjbG9zZSB0aGUgY3VycmVudCB3aW5kb3cKKwkgKiAodW5sZXNzIGl0J3MgdGhlIG9ubHkgd2luZG93KS4KKwkgKi8KKwl3aGlsZSAoYnVmID09IGN1cmJ1ZiAmJiBmaXJzdHdpbiAhPSBsYXN0d2luKQorCSAgICB3aW5fY2xvc2UoY3Vyd2luLCBGQUxTRSk7CisjZW5kaWYKKworCS8qCisJICogSWYgdGhlIGJ1ZmZlciB0byBiZSBkZWxldGVkIGlzIG5vdCB0aGUgY3VycmVudCBvbmUsIGRlbGV0ZSBpdCBoZXJlLgorCSAqLworCWlmIChidWYgIT0gY3VyYnVmKQorCXsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkgICAgY2xvc2Vfd2luZG93cyhidWYpOworI2VuZGlmCisJICAgIGlmIChidWYgIT0gY3VyYnVmICYmIGJ1Zl92YWxpZChidWYpICYmIGJ1Zi0+Yl9ud2luZG93cyA8PSAwKQorCQljbG9zZV9idWZmZXIoTlVMTCwgYnVmLCBhY3Rpb24pOworCSAgICByZXR1cm4gT0s7CisJfQorCisJLyoKKwkgKiBEZWxldGluZyB0aGUgY3VycmVudCBidWZmZXI6IE5lZWQgdG8gZmluZCBhbm90aGVyIGJ1ZmZlciB0byBnbyB0by4KKwkgKiBUaGVyZSBtdXN0IGJlIGFub3RoZXIsIG90aGVyd2lzZSBpdCB3b3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBhYm92ZS4KKwkgKiBGaXJzdCB1c2UgYXVfbmV3X2N1cmJ1ZiwgaWYgaXQgaXMgdmFsaWQuCisJICogVGhlbiBwcmVmZXIgdGhlIGJ1ZmZlciB3ZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQuCisJICogRWxzZSB0cnkgdG8gZmluZCBvbmUgdGhhdCBpcyBsb2FkZWQsIGFmdGVyIHRoZSBjdXJyZW50IGJ1ZmZlciwKKwkgKiB0aGVuIGJlZm9yZSB0aGUgY3VycmVudCBidWZmZXIuCisJICogRmluYWxseSB1c2UgYW55IGJ1ZmZlci4KKwkgKi8KKwlidWYgPSBOVUxMOwkvKiBzZWxlY3RlZCBidWZmZXIgKi8KKwlicCA9IE5VTEw7CS8qIHVzZWQgd2hlbiBubyBsb2FkZWQgYnVmZmVyIGZvdW5kICovCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJaWYgKGF1X25ld19jdXJidWYgIT0gTlVMTCAmJiBidWZfdmFsaWQoYXVfbmV3X2N1cmJ1ZikpCisJICAgIGJ1ZiA9IGF1X25ld19jdXJidWY7CisjIGlmZGVmIEZFQVRfSlVNUExJU1QKKwllbHNlCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX0pVTVBMSVNUCisJICAgIGlmIChjdXJ3aW4tPndfanVtcGxpc3RsZW4gPiAwKQorCXsKKwkgICAgaW50ICAgICBqdW1waWR4OworCisJICAgIGp1bXBpZHggPSBjdXJ3aW4tPndfanVtcGxpc3RpZHggLSAxOworCSAgICBpZiAoanVtcGlkeCA8IDApCisJCWp1bXBpZHggPSBjdXJ3aW4tPndfanVtcGxpc3RsZW4gLSAxOworCisJICAgIGZvcndhcmQgPSBqdW1waWR4OworCSAgICB3aGlsZSAoanVtcGlkeCAhPSBjdXJ3aW4tPndfanVtcGxpc3RpZHgpCisJICAgIHsKKwkJYnVmID0gYnVmbGlzdF9maW5kbnIoY3Vyd2luLT53X2p1bXBsaXN0W2p1bXBpZHhdLmZtYXJrLmZudW0pOworCQlpZiAoYnVmICE9IE5VTEwpCisJCXsKKwkJICAgIGlmIChidWYgPT0gY3VyYnVmIHx8ICFidWYtPmJfcF9ibCkKKwkJCWJ1ZiA9IE5VTEw7CS8qIHNraXAgY3VycmVudCBhbmQgdW5saXN0ZWQgYnVmcyAqLworCQkgICAgZWxzZSBpZiAoYnVmLT5iX21sLm1sX21mcCA9PSBOVUxMKQorCQkgICAgeworCQkJLyogc2tpcCB1bmxvYWRlZCBidWYsIGJ1dCBtYXkga2VlcCBpdCBmb3IgbGF0ZXIgKi8KKwkJCWlmIChicCA9PSBOVUxMKQorCQkJICAgIGJwID0gYnVmOworCQkJYnVmID0gTlVMTDsKKwkJICAgIH0KKwkJfQorCQlpZiAoYnVmICE9IE5VTEwpICAgLyogZm91bmQgYSB2YWxpZCBidWZmZXI6IHN0b3Agc2VhcmNoaW5nICovCisJCSAgICBicmVhazsKKwkJLyogYWR2YW5jZSB0byBvbGRlciBlbnRyeSBpbiBqdW1wIGxpc3QgKi8KKwkJaWYgKCFqdW1waWR4ICYmIGN1cndpbi0+d19qdW1wbGlzdGlkeCA9PSBjdXJ3aW4tPndfanVtcGxpc3RsZW4pCisJCSAgICBicmVhazsKKwkJaWYgKC0tanVtcGlkeCA8IDApCisJCSAgICBqdW1waWR4ID0gY3Vyd2luLT53X2p1bXBsaXN0bGVuIC0gMTsKKwkJaWYgKGp1bXBpZHggPT0gZm9yd2FyZCkJCS8qIExpc3QgZXhoYXVzdGVkIGZvciBzdXJlICovCisJCSAgICBicmVhazsKKwkgICAgfQorCX0KKyNlbmRpZgorCisJaWYgKGJ1ZiA9PSBOVUxMKQkvKiBObyBwcmV2aW91cyBidWZmZXIsIFRyeSAyJ25kIGFwcHJvYWNoICovCisJeworCSAgICBmb3J3YXJkID0gVFJVRTsKKwkgICAgYnVmID0gY3VyYnVmLT5iX25leHQ7CisJICAgIGZvciAoOzspCisJICAgIHsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQorCQl7CisJCSAgICBpZiAoIWZvcndhcmQpCS8qIHRyaWVkIGJvdGggZGlyZWN0aW9ucyAqLworCQkJYnJlYWs7CisJCSAgICBidWYgPSBjdXJidWYtPmJfcHJldjsKKwkJICAgIGZvcndhcmQgPSBGQUxTRTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJCS8qIGluIG5vbi1oZWxwIGJ1ZmZlciwgdHJ5IHRvIHNraXAgaGVscCBidWZmZXJzLCBhbmQgdnYgKi8KKwkJaWYgKGJ1Zi0+Yl9oZWxwID09IGN1cmJ1Zi0+Yl9oZWxwICYmIGJ1Zi0+Yl9wX2JsKQorCQl7CisJCSAgICBpZiAoYnVmLT5iX21sLm1sX21mcCAhPSBOVUxMKSAgIC8qIGZvdW5kIGxvYWRlZCBidWZmZXIgKi8KKwkJCWJyZWFrOworCQkgICAgaWYgKGJwID09IE5VTEwpCS8qIHJlbWVtYmVyIHVubG9hZGVkIGJ1ZiBmb3IgbGF0ZXIgKi8KKwkJCWJwID0gYnVmOworCQl9CisJCWlmIChmb3J3YXJkKQorCQkgICAgYnVmID0gYnVmLT5iX25leHQ7CisJCWVsc2UKKwkJICAgIGJ1ZiA9IGJ1Zi0+Yl9wcmV2OworCSAgICB9CisJfQorCWlmIChidWYgPT0gTlVMTCkJLyogTm8gbG9hZGVkIGJ1ZmZlciwgdXNlIHVubG9hZGVkIG9uZSAqLworCSAgICBidWYgPSBicDsKKwlpZiAoYnVmID09IE5VTEwpCS8qIE5vIGxvYWRlZCBidWZmZXIsIGZpbmQgbGlzdGVkIG9uZSAqLworCXsKKwkgICAgZm9yIChidWYgPSBmaXJzdGJ1ZjsgYnVmICE9IE5VTEw7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorCQlpZiAoYnVmLT5iX3BfYmwgJiYgYnVmICE9IGN1cmJ1ZikKKwkJICAgIGJyZWFrOworCX0KKwlpZiAoYnVmID09IE5VTEwpCS8qIFN0aWxsIG5vIGJ1ZmZlciwganVzdCB0YWtlIG9uZSAqLworCXsKKwkgICAgaWYgKGN1cmJ1Zi0+Yl9uZXh0ICE9IE5VTEwpCisJCWJ1ZiA9IGN1cmJ1Zi0+Yl9uZXh0OworCSAgICBlbHNlCisJCWJ1ZiA9IGN1cmJ1Zi0+Yl9wcmV2OworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIG1ha2UgYnVmIGN1cnJlbnQgYnVmZmVyCisgICAgICovCisgICAgaWYgKGFjdGlvbiA9PSBET0JVRl9TUExJVCkJICAgIC8qIHNwbGl0IHdpbmRvdyBmaXJzdCAqLworICAgIHsKKyMgaWZkZWYgRkVBVF9XSU5ET1dTCisJLyoganVtcCB0byBmaXJzdCB3aW5kb3cgY29udGFpbmluZyBidWYgaWYgb25lIGV4aXN0cyAoInVzZW9wZW4iKSAqLworCWlmICh2aW1fc3RyY2hyKHBfc3diLCAndScpICYmIGJ1Zl9qdW1wX29wZW5fd2luKGJ1ZikpCisJICAgIHJldHVybiBPSzsKKwlpZiAod2luX3NwbGl0KDAsIDApID09IEZBSUwpCisjIGVuZGlmCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKyNlbmRpZgorCisgICAgLyogZ28gdG8gY3VycmVudCBidWZmZXIgLSBub3RoaW5nIHRvIGRvICovCisgICAgaWYgKGJ1ZiA9PSBjdXJidWYpCisJcmV0dXJuIE9LOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBidWZmZXIgbWF5IGJlIGFiYW5kb25lZC4KKyAgICAgKi8KKyAgICBpZiAoYWN0aW9uID09IERPQlVGX0dPVE8gJiYgIWNhbl9hYmFuZG9uKGN1cmJ1ZiwgZm9yY2VpdCkpCisgICAgeworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKwlpZiAoKHBfY29uZmlybSB8fCBjbWRtb2QuY29uZmlybSkgJiYgcF93cml0ZSkKKwl7CisJICAgIGRpYWxvZ19jaGFuZ2VkKGN1cmJ1ZiwgRkFMU0UpOworIyBpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgaWYgKCFidWZfdmFsaWQoYnVmKSkKKwkJLyogQXV0b2NvbW1hbmQgZGVsZXRlZCBidWZmZXIsIG9vcHMhICovCisJCXJldHVybiBGQUlMOworIyBlbmRpZgorCX0KKwlpZiAoYnVmSXNDaGFuZ2VkKGN1cmJ1ZikpCisjZW5kaWYKKwl7CisJICAgIEVNU0coXyhlX25vd3J0bXNnKSk7CisJICAgIHJldHVybiBGQUlMOworCX0KKyAgICB9CisKKyAgICAvKiBHbyB0byB0aGUgb3RoZXIgYnVmZmVyLiAqLworICAgIHNldF9jdXJidWYoYnVmLCBhY3Rpb24pOworCisjaWYgZGVmaW5lZChGRUFUX0xJU1RDTURTKSAmJiBkZWZpbmVkKEZFQVRfU0NST0xMQklORCkKKyAgICBpZiAoYWN0aW9uID09IERPQlVGX1NQTElUKQorCWN1cndpbi0+d19wX3NjYiA9IEZBTFNFOwkvKiByZXNldCAnc2Nyb2xsYmluZCcgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorICAgIGlmIChhYm9ydGluZygpKQkgICAgLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCisJcmV0dXJuIEZBSUw7CisjZW5kaWYKKworICAgIHJldHVybiBPSzsKK30KKworI2VuZGlmIC8qIEZFQVRfTElTVENNRFMgKi8KKworLyoKKyAqIFNldCBjdXJyZW50IGJ1ZmZlciB0byAiYnVmIi4gIEV4ZWN1dGVzIGF1dG9jb21tYW5kcyBhbmQgY2xvc2VzIGN1cnJlbnQKKyAqIGJ1ZmZlci4gICJhY3Rpb24iIHRlbGxzIGhvdyB0byBjbG9zZSB0aGUgY3VycmVudCBidWZmZXI6CisgKiBET0JVRl9HT1RPCSAgICBmcmVlIG9yIGhpZGUgaXQKKyAqIERPQlVGX1NQTElUCSAgICBub3RoaW5nCisgKiBET0JVRl9VTkxPQUQJICAgIHVubG9hZCBpdAorICogRE9CVUZfREVMCSAgICBkZWxldGUgaXQKKyAqIERPQlVGX1dJUEUJICAgIHdpcGUgaXQgb3V0CisgKi8KKyAgICB2b2lkCitzZXRfY3VyYnVmKGJ1ZiwgYWN0aW9uKQorICAgIGJ1Zl9UCSpidWY7CisgICAgaW50CQlhY3Rpb247Cit7CisgICAgYnVmX1QJKnByZXZidWY7CisgICAgaW50CQl1bmxvYWQgPSAoYWN0aW9uID09IERPQlVGX1VOTE9BRCB8fCBhY3Rpb24gPT0gRE9CVUZfREVMCisJCQkJCQkgICAgIHx8IGFjdGlvbiA9PSBET0JVRl9XSVBFKTsKKworICAgIHNldHBjbWFyaygpOworICAgIGN1cndpbi0+d19hbHRfZm51bSA9IGN1cmJ1Zi0+Yl9mbnVtOyAvKiByZW1lbWJlciBhbHRlcm5hdGUgZmlsZSAqLworICAgIGJ1Zmxpc3RfYWx0ZnBvcygpOwkJCSAvKiByZW1lbWJlciBjdXJwb3MgKi8KKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgLyogRG9uJ3QgcmVzdGFydCBTZWxlY3QgbW9kZSBhZnRlciBzd2l0Y2hpbmcgdG8gYW5vdGhlciBidWZmZXIuICovCisgICAgVklzdWFsX3Jlc2VsZWN0ID0gRkFMU0U7CisjZW5kaWYKKworICAgIC8qIGNsb3NlX3dpbmRvd3MoKSBvciBhcHBseV9hdXRvY21kcygpIG1heSBjaGFuZ2UgY3VyYnVmICovCisgICAgcHJldmJ1ZiA9IGN1cmJ1ZjsKKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRkxFQVZFLCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKKyMgaWZkZWYgRkVBVF9FVkFMCisgICAgaWYgKGJ1Zl92YWxpZChwcmV2YnVmKSAmJiAhYWJvcnRpbmcoKSkKKyMgZWxzZQorICAgIGlmIChidWZfdmFsaWQocHJldmJ1ZikpCisjIGVuZGlmCisjZW5kaWYKKyAgICB7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJaWYgKHVubG9hZCkKKwkgICAgY2xvc2Vfd2luZG93cyhwcmV2YnVmKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwlpZiAoYnVmX3ZhbGlkKHByZXZidWYpICYmICFhYm9ydGluZygpKQorI2Vsc2UKKwlpZiAoYnVmX3ZhbGlkKHByZXZidWYpKQorI2VuZGlmCisJICAgIGNsb3NlX2J1ZmZlcihwcmV2YnVmID09IGN1cndpbi0+d19idWZmZXIgPyBjdXJ3aW4gOiBOVUxMLCBwcmV2YnVmLAorCQkgICAgdW5sb2FkID8gYWN0aW9uIDogKGFjdGlvbiA9PSBET0JVRl9HT1RPCisJCQkmJiAhUF9ISUQocHJldmJ1ZikKKwkJCSYmICFidWZJc0NoYW5nZWQocHJldmJ1ZikpID8gRE9CVUZfVU5MT0FEIDogMCk7CisgICAgfQorI2lmZGVmIEZFQVRfQVVUT0NNRAorIyBpZmRlZiBGRUFUX0VWQUwKKyAgICAvKiBBbiBhdXRvY29tbWFuZCBtYXkgaGF2ZSBkZWxldGVkIGJ1ZiBvciBhYm9ydGVkIHRoZSBzY3JpcHQgcHJvY2Vzc2luZyEgKi8KKyAgICBpZiAoYnVmX3ZhbGlkKGJ1ZikgJiYgIWFib3J0aW5nKCkpCisjIGVsc2UKKyAgICBpZiAoYnVmX3ZhbGlkKGJ1ZikpCSAgICAvKiBhbiBhdXRvY29tbWFuZCBtYXkgaGF2ZSBkZWxldGVkIGJ1ZiEgKi8KKyMgZW5kaWYKKyNlbmRpZgorCWVudGVyX2J1ZmZlcihidWYpOworfQorCisvKgorICogRW50ZXIgYSBuZXcgY3VycmVudCBidWZmZXIuCisgKiBPbGQgY3VyYnVmIG11c3QgaGF2ZSBiZWVuIGFiYW5kb25lZCBhbHJlYWR5IQorICovCisgICAgdm9pZAorZW50ZXJfYnVmZmVyKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIC8qIENvcHkgYnVmZmVyIGFuZCB3aW5kb3cgbG9jYWwgb3B0aW9uIHZhbHVlcy4gIE5vdCBmb3IgYSBoZWxwIGJ1ZmZlci4gKi8KKyAgICBidWZfY29weV9vcHRpb25zKGJ1ZiwgQkNPX0VOVEVSIHwgQkNPX05PSEVMUCk7CisgICAgaWYgKCFidWYtPmJfaGVscCkKKwlnZXRfd2lub3B0cyhidWYpOworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGVsc2UKKwkvKiBSZW1vdmUgYWxsIGZvbGRzIGluIHRoZSB3aW5kb3cuICovCisJY2xlYXJGb2xkaW5nKGN1cndpbik7CisgICAgZm9sZFVwZGF0ZUFsbChjdXJ3aW4pOwkvKiB1cGRhdGUgZm9sZHMgKGxhdGVyKS4gKi8KKyNlbmRpZgorCisgICAgLyogR2V0IHRoZSBidWZmZXIgaW4gdGhlIGN1cnJlbnQgd2luZG93LiAqLworICAgIGN1cndpbi0+d19idWZmZXIgPSBidWY7CisgICAgY3VyYnVmID0gYnVmOworICAgICsrY3VyYnVmLT5iX253aW5kb3dzOworCisjaWZkZWYgRkVBVF9ESUZGCisgICAgZGlmZl9uZXdfYnVmZmVyKCk7CisjZW5kaWYKKworICAgIC8qIEN1cnNvciBvbiBmaXJzdCBsaW5lIGJ5IGRlZmF1bHQuICovCisgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gMTsKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorICAgIGN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCisgICAgLyogTWFrZSBzdXJlIHRoZSBidWZmZXIgaXMgbG9hZGVkLiAqLworICAgIGlmIChjdXJidWYtPmJfbWwubWxfbWZwID09IE5VTEwpCS8qIG5lZWQgdG8gbG9hZCB0aGUgZmlsZSAqLworCW9wZW5fYnVmZmVyKEZBTFNFLCBOVUxMKTsKKyAgICBlbHNlCisgICAgeworCW5lZWRfZmlsZWluZm8gPSBUUlVFOwkJLyogZGlzcGxheSBmaWxlIGluZm8gYWZ0ZXIgcmVkcmF3ICovCisJKHZvaWQpYnVmX2NoZWNrX3RpbWVzdGFtcChjdXJidWYsIEZBTFNFKTsgLyogY2hlY2sgaWYgZmlsZSBjaGFuZ2VkICovCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJY3Vyd2luLT53X3RvcGxpbmUgPSAxOworIyBpZmRlZiBGRUFUX0RJRkYKKwljdXJ3aW4tPndfdG9wZmlsbCA9IDA7CisjIGVuZGlmCisJYXBwbHlfYXV0b2NtZHMoRVZFTlRfQlVGRU5URVIsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYpOworCWFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRldJTkVOVEVSLCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8qIElmIGF1dG9jb21tYW5kcyBkaWQgbm90IGNoYW5nZSB0aGUgY3Vyc29yIHBvc2l0aW9uLCByZXN0b3JlIGN1cnNvciBsbnVtCisgICAgICogYW5kIHBvc3NpYmx5IGN1cnNvciBjb2wuICovCisgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA9PSAxICYmIGluaW5kZW50KDApKQorCWJ1Zmxpc3RfZ2V0ZnBvcygpOworCisgICAgY2hlY2tfYXJnX2lkeChjdXJ3aW4pOwkJLyogY2hlY2sgZm9yIHZhbGlkIGFyZ19pZHggKi8KKyNpZmRlZiBGRUFUX1RJVExFCisgICAgbWFrZXRpdGxlKCk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBpZiAoY3Vyd2luLT53X3RvcGxpbmUgPT0gMSkJCS8qIHdoZW4gYXV0b2NtZHMgZGlkbid0IGNoYW5nZSBpdCAqLworI2VuZGlmCisJc2Nyb2xsX2N1cnNvcl9oYWxmd2F5KEZBTFNFKTsJLyogcmVkaXNwbGF5IGF0IGNvcnJlY3QgcG9zaXRpb24gKi8KKworI2lmIGRlZmluZWQoRkVBVF9ORVRCRUFOU19JTlRHKSB8fCBkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKQorICAgIC8qIENoYW5nZSBkaXJlY3RvcmllcyB3aGVuIHRoZSBhY2Qgb3B0aW9uIGlzIHNldCBvbi4gKi8KKyAgICBpZiAocF9hY2QgJiYgY3VyYnVmLT5iX2ZmbmFtZSAhPSBOVUxMCisJCQkJICAgICAmJiB2aW1fY2hkaXJmaWxlKGN1cmJ1Zi0+Yl9mZm5hbWUpID09IE9LKQorCXNob3J0ZW5fZm5hbWVzKFRSVUUpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0tFWU1BUAorICAgIGlmIChjdXJidWYtPmJfa21hcF9zdGF0ZSAmIEtFWU1BUF9JTklUKQorCWtleW1hcF9pbml0KCk7CisjZW5kaWYKKyAgICByZWRyYXdfbGF0ZXIoTk9UX1ZBTElEKTsKK30KKworLyoKKyAqIGZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIHRoZSBidWZmZXIgbGlzdAorICovCisKKy8qCisgKiBBZGQgYSBmaWxlIG5hbWUgdG8gdGhlIGJ1ZmZlciBsaXN0LiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogSWYgdGhlIHNhbWUgZmlsZSBuYW1lIGFscmVhZHkgZXhpc3RzIHJldHVybiBhIHBvaW50ZXIgdG8gdGhhdCBidWZmZXIuCisgKiBJZiBpdCBkb2VzIG5vdCBleGlzdCwgb3IgaWYgZm5hbWUgPT0gTlVMTCwgYSBuZXcgZW50cnkgaXMgY3JlYXRlZC4KKyAqIElmIChmbGFncyAmIEJMTl9DVVJCVUYpIGlzIFRSVUUsIG1heSB1c2UgY3VycmVudCBidWZmZXIuCisgKiBJZiAoZmxhZ3MgJiBCTE5fTElTVEVEKSBpcyBUUlVFLCBhZGQgbmV3IGJ1ZmZlciB0byBidWZmZXIgbGlzdC4KKyAqIElmIChmbGFncyAmIEJMTl9EVU1NWSkgaXMgVFJVRSwgZG9uJ3QgY291bnQgaXQgYXMgYSByZWFsIGJ1ZmZlci4KKyAqIElmIChmbGFncyAmIEJMTl9GT1JDRSkgaXMgVFJVRSwgZG9uJ3QgYWJvcnQgb24gYW4gZXJyb3IuCisgKiBUaGlzIGlzIHRoZSBPTkxZIHdheSB0byBjcmVhdGUgYSBuZXcgYnVmZmVyLgorICovCitzdGF0aWMgaW50ICB0b3BfZmlsZV9udW0gPSAxOwkJLyogaGlnaGVzdCBmaWxlIG51bWJlciAqLworCisgICAgYnVmX1QgKgorYnVmbGlzdF9uZXcoZmZuYW1lLCBzZm5hbWUsIGxudW0sIGZsYWdzKQorICAgIGNoYXJfdQkqZmZuYW1lOwkvKiBmdWxsIHBhdGggb2YgZm5hbWUgb3IgcmVsYXRpdmUgKi8KKyAgICBjaGFyX3UJKnNmbmFtZTsJLyogc2hvcnQgZm5hbWUgb3IgTlVMTCAqLworICAgIGxpbmVucl9UCWxudW07CQkvKiBwcmVmZXJyZWQgY3Vyc29yIGxpbmUgKi8KKyAgICBpbnQJCWZsYWdzOwkJLyogQkxOXyBkZWZpbmVzICovCit7CisgICAgYnVmX1QJKmJ1ZjsKKyNpZmRlZiBVTklYCisgICAgc3RydWN0IHN0YXQJc3Q7CisjZW5kaWYKKworICAgIGZuYW1lX2V4cGFuZChjdXJidWYsICZmZm5hbWUsICZzZm5hbWUpOwkvKiB3aWxsIGFsbG9jYXRlIGZmbmFtZSAqLworCisgICAgLyoKKyAgICAgKiBJZiBmaWxlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGxpc3QsIHVwZGF0ZSB0aGUgZW50cnkuCisgICAgICovCisjaWZkZWYgVU5JWAorICAgIC8qIE9uIFVuaXggd2UgY2FuIHVzZSBpbm9kZSBudW1iZXJzIHdoZW4gdGhlIGZpbGUgZXhpc3RzLiAgV29ya3MgYmV0dGVyCisgICAgICogZm9yIGhhcmQgbGlua3MuICovCisgICAgaWYgKHNmbmFtZSA9PSBOVUxMIHx8IG1jaF9zdGF0KChjaGFyICopc2ZuYW1lLCAmc3QpIDwgMCkKKwlzdC5zdF9kZXYgPSAoZGV2X1QpLTE7CisjZW5kaWYKKyAgICBpZiAoZmZuYW1lICE9IE5VTEwgJiYgIShmbGFncyAmIEJMTl9EVU1NWSkgJiYgKGJ1ZiA9CisjaWZkZWYgVU5JWAorCQlidWZsaXN0X2ZpbmRuYW1lX3N0YXQoZmZuYW1lLCAmc3QpCisjZWxzZQorCQlidWZsaXN0X2ZpbmRuYW1lKGZmbmFtZSkKKyNlbmRpZgorCQkpICE9IE5VTEwpCisgICAgeworCXZpbV9mcmVlKGZmbmFtZSk7CisJaWYgKGxudW0gIT0gMCkKKwkgICAgYnVmbGlzdF9zZXRmcG9zKGJ1ZiwgY3Vyd2luLCBsbnVtLCAoY29sbnJfVCkwLCBGQUxTRSk7CisJLyogY29weSB0aGUgb3B0aW9ucyBub3csIGlmICdjcG8nIGRvZXNuJ3QgaGF2ZSAncycgYW5kIG5vdCBkb25lCisJICogYWxyZWFkeSAqLworCWJ1Zl9jb3B5X29wdGlvbnMoYnVmLCAwKTsKKwlpZiAoKGZsYWdzICYgQkxOX0xJU1RFRCkgJiYgIWJ1Zi0+Yl9wX2JsKQorCXsKKwkgICAgYnVmLT5iX3BfYmwgPSBUUlVFOworI2lmZGVmIEZFQVRfQVVUT0NNRAorCSAgICBpZiAoIShmbGFncyAmIEJMTl9EVU1NWSkpCisJCWFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRkFERCwgTlVMTCwgTlVMTCwgRkFMU0UsIGJ1Zik7CisjZW5kaWYKKwl9CisJcmV0dXJuIGJ1ZjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZSBjdXJyZW50IGJ1ZmZlciBoYXMgbm8gbmFtZSBhbmQgbm8gY29udGVudHMsIHVzZSB0aGUgY3VycmVudAorICAgICAqIGJ1ZmZlci4JT3RoZXJ3aXNlOiBOZWVkIHRvIGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKiBUaGlzIGlzIHRoZSBPTkxZIHBsYWNlIHdoZXJlIGEgbmV3IGJ1ZmZlciBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIQorICAgICAqLworICAgIGJ1ZiA9IE5VTEw7CisgICAgaWYgKChmbGFncyAmIEJMTl9DVVJCVUYpCisJICAgICYmIGN1cmJ1ZiAhPSBOVUxMCisJICAgICYmIGN1cmJ1Zi0+Yl9mZm5hbWUgPT0gTlVMTAorCSAgICAmJiBjdXJidWYtPmJfbndpbmRvd3MgPD0gMQorCSAgICAmJiAoY3VyYnVmLT5iX21sLm1sX21mcCA9PSBOVUxMIHx8IGJ1ZmVtcHR5KCkpKQorICAgIHsKKwlidWYgPSBjdXJidWY7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJLyogSXQncyBsaWtlIHRoaXMgYnVmZmVyIGlzIGRlbGV0ZWQuICBXYXRjaCBvdXQgZm9yIGF1dG9jb21tYW5kcyB0aGF0CisJICogY2hhbmdlIGN1cmJ1ZiEgIElmIHRoYXQgaGFwcGVucywgYWxsb2NhdGUgYSBuZXcgYnVmZmVyIGFueXdheS4gKi8KKwlpZiAoY3VyYnVmLT5iX3BfYmwpCisJICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRkRFTEVURSwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisJaWYgKGJ1ZiA9PSBjdXJidWYpCisJICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRldJUEVPVVQsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYpOworIyBpZmRlZiBGRUFUX0VWQUwKKwkvKiBhdXRvY21kcyBtYXkgYWJvcnQgc2NyaXB0IHByb2Nlc3NpbmcgKi8KKwlpZiAoIShmbGFncyAmIEJMTl9GT1JDRSkgJiYgYWJvcnRpbmcoKSkKKwkgICAgcmV0dXJuIE5VTEw7CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisjIGlmZGVmIEZFQVRfQVVUT0NNRAorCWlmIChidWYgPT0gY3VyYnVmKQorIyBlbmRpZgorCXsKKwkgICAgLyogTWFrZSBzdXJlICdidWZoaWRkZW4nIGFuZCAnYnVmdHlwZScgYXJlIGVtcHR5ICovCisJICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2JoKTsKKwkgICAgY2xlYXJfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfYnQpOworCX0KKyNlbmRpZgorICAgIH0KKyAgICBpZiAoYnVmICE9IGN1cmJ1ZiB8fCBjdXJidWYgPT0gTlVMTCkKKyAgICB7CisJYnVmID0gKGJ1Zl9UICopYWxsb2NfY2xlYXIoKHVuc2lnbmVkKXNpemVvZihidWZfVCkpOworCWlmIChidWYgPT0gTlVMTCkKKwl7CisJICAgIHZpbV9mcmVlKGZmbmFtZSk7CisJICAgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisKKyAgICBpZiAoZmZuYW1lICE9IE5VTEwpCisgICAgeworCWJ1Zi0+Yl9mZm5hbWUgPSBmZm5hbWU7CisJYnVmLT5iX3NmbmFtZSA9IHZpbV9zdHJzYXZlKHNmbmFtZSk7CisgICAgfQorCisgICAgY2xlYXJfd2luaW5mbyhidWYpOworICAgIGJ1Zi0+Yl93aW5pbmZvID0gKHdpbmluZm9fVCAqKWFsbG9jX2NsZWFyKCh1bnNpZ25lZClzaXplb2Yod2luaW5mb19UKSk7CisKKyAgICBpZiAoKGZmbmFtZSAhPSBOVUxMICYmIChidWYtPmJfZmZuYW1lID09IE5VTEwgfHwgYnVmLT5iX3NmbmFtZSA9PSBOVUxMKSkKKwkgICAgfHwgYnVmLT5iX3dpbmluZm8gPT0gTlVMTCkKKyAgICB7CisJdmltX2ZyZWUoYnVmLT5iX2ZmbmFtZSk7CisJYnVmLT5iX2ZmbmFtZSA9IE5VTEw7CisJdmltX2ZyZWUoYnVmLT5iX3NmbmFtZSk7CisJYnVmLT5iX3NmbmFtZSA9IE5VTEw7CisJaWYgKGJ1ZiAhPSBjdXJidWYpCisJICAgIGZyZWVfYnVmZmVyKGJ1Zik7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGJ1ZiA9PSBjdXJidWYpCisgICAgeworCS8qIGZyZWUgYWxsIHRoaW5ncyBhbGxvY2F0ZWQgZm9yIHRoaXMgYnVmZmVyICovCisJYnVmX2ZyZWVhbGwoYnVmLCBGQUxTRSwgRkFMU0UpOworCWlmIChidWYgIT0gY3VyYnVmKQkgLyogYXV0b2NvbW1hbmRzIGRlbGV0ZWQgdGhlIGJ1ZmZlciEgKi8KKwkgICAgcmV0dXJuIE5VTEw7CisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCS8qIGF1dG9jbWRzIG1heSBhYm9ydCBzY3JpcHQgcHJvY2Vzc2luZyAqLworCWlmICghKGZsYWdzICYgQkxOX0ZPUkNFKSAmJiBhYm9ydGluZygpKQorCSAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorCS8qIGJ1Zi0+Yl9ud2luZG93cyA9IDA7IHdoeSB3YXMgdGhpcyBoZXJlPyAqLworCWZyZWVfYnVmZmVyX3N0dWZmKGJ1ZiwgRkFMU0UpOwkvKiBkZWxldGUgbG9jYWwgdmFyaWFibGVzIGV0IGFsLiAqLworI2lmZGVmIEZFQVRfS0VZTUFQCisJLyogbmVlZCB0byByZWxvYWQgbG1hcHMgYW5kIHNldCBiOmtleW1hcF9uYW1lICovCisJY3VyYnVmLT5iX2ttYXBfc3RhdGUgfD0gS0VZTUFQX0lOSVQ7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIHB1dCBuZXcgYnVmZmVyIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBsaXN0CisJICovCisJYnVmLT5iX25leHQgPSBOVUxMOworCWlmIChmaXJzdGJ1ZiA9PSBOVUxMKQkJLyogYnVmZmVyIGxpc3QgaXMgZW1wdHkgKi8KKwl7CisJICAgIGJ1Zi0+Yl9wcmV2ID0gTlVMTDsKKwkgICAgZmlyc3RidWYgPSBidWY7CisJfQorCWVsc2UJCQkJLyogYXBwZW5kIG5ldyBidWZmZXIgYXQgZW5kIG9mIGxpc3QgKi8KKwl7CisJICAgIGxhc3RidWYtPmJfbmV4dCA9IGJ1ZjsKKwkgICAgYnVmLT5iX3ByZXYgPSBsYXN0YnVmOworCX0KKwlsYXN0YnVmID0gYnVmOworCisJYnVmLT5iX2ZudW0gPSB0b3BfZmlsZV9udW0rKzsKKwlpZiAodG9wX2ZpbGVfbnVtIDwgMCkJCS8qIHdyYXAgYXJvdW5kIChtYXkgY2F1c2UgZHVwbGljYXRlcykgKi8KKwl7CisJICAgIEVNU0coXygiVzE0OiBXYXJuaW5nOiBMaXN0IG9mIGZpbGUgbmFtZXMgb3ZlcmZsb3ciKSk7CisJICAgIGlmIChlbXNnX3NpbGVudCA9PSAwKQorCSAgICB7CisJCW91dF9mbHVzaCgpOworCQl1aV9kZWxheSgzMDAwTCwgVFJVRSk7CS8qIG1ha2Ugc3VyZSBpdCBpcyBub3RpY2VkICovCisJICAgIH0KKwkgICAgdG9wX2ZpbGVfbnVtID0gMTsKKwl9CisKKwkvKgorCSAqIEFsd2F5cyBjb3B5IHRoZSBvcHRpb25zIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyLgorCSAqLworCWJ1Zl9jb3B5X29wdGlvbnMoYnVmLCBCQ09fQUxXQVlTKTsKKyAgICB9CisKKyAgICBidWYtPmJfd2luaW5mby0+d2lfZnBvcy5sbnVtID0gbG51bTsKKyAgICBidWYtPmJfd2luaW5mby0+d2lfd2luID0gY3Vyd2luOworCisjaWZkZWYgRkVBVF9FVkFMCisgICAgdmFyX2luaXQoJmJ1Zi0+Yl92YXJzKTsJCS8qIGluaXQgaW50ZXJuYWwgdmFyaWFibGVzICovCisjZW5kaWYKKworICAgIGJ1Zi0+Yl9mbmFtZSA9IGJ1Zi0+Yl9zZm5hbWU7CisjaWZkZWYgVU5JWAorICAgIGlmIChzdC5zdF9kZXYgPT0gKGRldl9UKS0xKQorCWJ1Zi0+Yl9kZXYgPSAtMTsKKyAgICBlbHNlCisgICAgeworCWJ1Zi0+Yl9kZXYgPSBzdC5zdF9kZXY7CisJYnVmLT5iX2lubyA9IHN0LnN0X2lubzsKKyAgICB9CisjZW5kaWYKKyAgICBidWYtPmJfdV9zeW5jZWQgPSBUUlVFOworICAgIGJ1Zi0+Yl9mbGFncyA9IEJGX0NIRUNLX1JPIHwgQkZfTkVWRVJMT0FERUQ7CisgICAgYnVmX2NsZWFyX2ZpbGUoYnVmKTsKKyAgICBjbHJhbGxtYXJrcyhidWYpOwkJCS8qIGNsZWFyIG1hcmtzICovCisgICAgZm1hcmtzX2NoZWNrX25hbWVzKGJ1Zik7CQkvKiBjaGVjayBmaWxlIG1hcmtzIGZvciB0aGlzIGZpbGUgKi8KKyAgICBidWYtPmJfcF9ibCA9IChmbGFncyAmIEJMTl9MSVNURUQpID8gVFJVRSA6IEZBTFNFOwkvKiBpbml0ICdidWZsaXN0ZWQnICovCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgaWYgKCEoZmxhZ3MgJiBCTE5fRFVNTVkpKQorICAgIHsKKwlhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZORVcsIE5VTEwsIE5VTEwsIEZBTFNFLCBidWYpOworCWlmIChmbGFncyAmIEJMTl9MSVNURUQpCisJICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRkFERCwgTlVMTCwgTlVMTCwgRkFMU0UsIGJ1Zik7CisjIGlmZGVmIEZFQVRfRVZBTAorCS8qIGF1dG9jbWRzIG1heSBhYm9ydCBzY3JpcHQgcHJvY2Vzc2luZyAqLworCWlmICghKGZsYWdzICYgQkxOX0ZPUkNFKSAmJiBhYm9ydGluZygpKQorCSAgICByZXR1cm4gTlVMTDsKKyMgZW5kaWYKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBidWY7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBtZW1vcnkgZm9yIHRoZSBvcHRpb25zIG9mIGEgYnVmZmVyLgorICogSWYgImZyZWVfcF9mZiIgaXMgVFJVRSBhbHNvIGZyZWUgJ2ZpbGVmb3JtYXQnLCAnYnVmdHlwZScgYW5kCisgKiAnZmlsZWVuY29kaW5nJy4KKyAqLworICAgIHZvaWQKK2ZyZWVfYnVmX29wdGlvbnMoYnVmLCBmcmVlX3BfZmYpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWZyZWVfcF9mZjsKK3sKKyAgICBpZiAoZnJlZV9wX2ZmKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJY2xlYXJfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfZmVuYyk7CisjZW5kaWYKKwljbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9mZik7CisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCWNsZWFyX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2JoKTsKKwljbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9idCk7CisjZW5kaWYKKyAgICB9CisjaWZkZWYgRkVBVF9GSU5EX0lECisgICAgY2xlYXJfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfZGVmKTsKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9pbmMpOworIyBpZmRlZiBGRUFUX0VWQUwKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9pbmV4KTsKKyMgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9DSU5ERU5UKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9pbmRlKTsKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9pbmRrKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ1JZUFQKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9rZXkpOworI2VuZGlmCisgICAgY2xlYXJfc3RyaW5nX29wdGlvbigmYnVmLT5iX3Bfa3ApOworICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX21wcyk7CisgICAgY2xlYXJfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfZm8pOworICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2lzayk7CisjaWZkZWYgRkVBVF9LRVlNQVAKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9rZXltYXApOworICAgIGdhX2NsZWFyKCZidWYtPmJfa21hcF9nYSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisgICAgY2xlYXJfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfY29tKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2Ntcyk7CisjZW5kaWYKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9uZik7CisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9zeW4pOworI2VuZGlmCisjaWZkZWYgRkVBVF9TRUFSQ0hQQVRICisgICAgY2xlYXJfc3RyaW5nX29wdGlvbigmYnVmLT5iX3Bfc3VhKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2Z0KTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfT1NGSUxFVFlQRQorICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX29mdCk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9jaW5rKTsKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9jaW5vKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9DSU5ERU5UKSB8fCBkZWZpbmVkKEZFQVRfU01BUlRJTkRFTlQpCisgICAgY2xlYXJfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfY2ludyk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9jcHQpOworI2VuZGlmCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2dwKTsKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9tcCk7CisgICAgY2xlYXJfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfZWZtKTsKKyNlbmRpZgorICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2VwKTsKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9wYXRoKTsKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF90YWdzKTsKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9kaWN0KTsKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF90c3IpOworI2VuZGlmCisgICAgYnVmLT5iX3BfYXIgPSAtMTsKK30KKworLyoKKyAqIGdldCBhbHRlcm5hdGUgZmlsZSBuCisgKiBzZXQgbGluZW5yIHRvIGxudW0gb3IgYWx0ZnBvcy5sbnVtIGlmIGxudW0gPT0gMAorICoJYWxzbyBzZXQgY3Vyc29yIGNvbHVtbiB0byBhbHRmcG9zLmNvbCBpZiAnc3RhcnRvZmxpbmUnIGlzIG5vdCBzZXQuCisgKiBpZiAob3B0aW9ucyAmIEdFVEZfU0VUTUFSSykgY2FsbCBzZXRwY21hcmsoKQorICogaWYgKG9wdGlvbnMgJiBHRVRGX0FMVCkgd2UgYXJlIGp1bXBpbmcgdG8gYW4gYWx0ZXJuYXRlIGZpbGUuCisgKiBpZiAob3B0aW9ucyAmIEdFVEZfU1dJVENIKSByZXNwZWN0ICdzd2l0Y2hidWYnIHNldHRpbmdzIHdoZW4ganVtcGluZworICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBmb3Igc3VjY2VzcworICovCisgICAgaW50CitidWZsaXN0X2dldGZpbGUobiwgbG51bSwgb3B0aW9ucywgZm9yY2VpdCkKKyAgICBpbnQJCW47CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBpbnQJCW9wdGlvbnM7CisgICAgaW50CQlmb3JjZWl0OworeworICAgIGJ1Zl9UCSpidWY7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgd2luX1QJKndwID0gTlVMTDsKKyNlbmRpZgorICAgIHBvc19UCSpmcG9zOworICAgIGNvbG5yX1QJY29sOworCisgICAgYnVmID0gYnVmbGlzdF9maW5kbnIobik7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgIHsKKwlpZiAoKG9wdGlvbnMgJiBHRVRGX0FMVCkgJiYgbiA9PSAwKQorCSAgICBFTVNHKF8oZV9ub2FsdCkpOworCWVsc2UKKwkgICAgRU1TR04oXygiRTkyOiBCdWZmZXIgJWxkIG5vdCBmb3VuZCIpLCBuKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBpZiBhbHRlcm5hdGUgZmlsZSBpcyB0aGUgY3VycmVudCBidWZmZXIsIG5vdGhpbmcgdG8gZG8gKi8KKyAgICBpZiAoYnVmID09IGN1cmJ1ZikKKwlyZXR1cm4gT0s7CisKKyNpZmRlZiBGRUFUX0NNRFdJTgorICAgIGlmIChjbWR3aW5fdHlwZSAhPSAwKQorCXJldHVybiBGQUlMOworI2VuZGlmCisKKyAgICAvKiBhbHRmcG9zIG1heSBiZSBjaGFuZ2VkIGJ5IGdldGZpbGUoKSwgZ2V0IGl0IG5vdyAqLworICAgIGlmIChsbnVtID09IDApCisgICAgeworCWZwb3MgPSBidWZsaXN0X2ZpbmRmcG9zKGJ1Zik7CisJbG51bSA9IGZwb3MtPmxudW07CisJY29sID0gZnBvcy0+Y29sOworICAgIH0KKyAgICBlbHNlCisJY29sID0gMDsKKworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIGlmIChvcHRpb25zICYgR0VURl9TV0lUQ0gpCisgICAgeworCS8qIHVzZSBleGlzdGluZyBvcGVuIHdpbmRvdyBmb3IgYnVmZmVyIGlmIHdhbnRlZCAqLworCWlmICh2aW1fc3RyY2hyKHBfc3diLCAndScpKSAgICAgLyogdXNlb3BlbiAqLworCSAgICB3cCA9IGJ1Zl9qdW1wX29wZW5fd2luKGJ1Zik7CisJLyogc3BsaXQgd2luZG93IGlmIHdhbnRlZCAoInNwbGl0IikgKi8KKwlpZiAod3AgPT0gTlVMTCAmJiB2aW1fc3RyY2hyKHBfc3diLCAndCcpICYmICFidWZlbXB0eSgpKQorCXsKKwkgICAgaWYgKHdpbl9zcGxpdCgwLCAwKSA9PSBGQUlMKQorCQlyZXR1cm4gRkFJTDsKKyMgaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisJICAgIGN1cndpbi0+d19wX3NjYiA9IEZBTFNFOworIyBlbmRpZgorCX0KKyAgICB9CisjZW5kaWYKKworICAgICsrUmVkcmF3aW5nRGlzYWJsZWQ7CisgICAgaWYgKGdldGZpbGUoYnVmLT5iX2ZudW0sIE5VTEwsIE5VTEwsIChvcHRpb25zICYgR0VURl9TRVRNQVJLKSwKKwkJCQkJCQkgIGxudW0sIGZvcmNlaXQpIDw9IDApCisgICAgeworCS0tUmVkcmF3aW5nRGlzYWJsZWQ7CisKKwkvKiBjdXJzb3IgaXMgYXQgdG8gQk9MIGFuZCB3X2N1cnNvci5sbnVtIGlzIGNoZWNrZWQgZHVlIHRvIGdldGZpbGUoKSAqLworCWlmICghcF9zb2wgJiYgY29sICE9IDApCisJeworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGNvbDsKKwkgICAgY2hlY2tfY3Vyc29yX2NvbCgpOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkgICAgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworI2VuZGlmCisJICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCX0KKwlyZXR1cm4gT0s7CisgICAgfQorICAgIC0tUmVkcmF3aW5nRGlzYWJsZWQ7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKy8qCisgKiBnbyB0byB0aGUgbGFzdCBrbm93IGxpbmUgbnVtYmVyIGZvciB0aGUgY3VycmVudCBidWZmZXIKKyAqLworICAgIHZvaWQKK2J1Zmxpc3RfZ2V0ZnBvcygpCit7CisgICAgcG9zX1QJKmZwb3M7CisKKyAgICBmcG9zID0gYnVmbGlzdF9maW5kZnBvcyhjdXJidWYpOworCisgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gZnBvcy0+bG51bTsKKyAgICBjaGVja19jdXJzb3JfbG51bSgpOworCisgICAgaWYgKHBfc29sKQorCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKyAgICBlbHNlCisgICAgeworCWN1cndpbi0+d19jdXJzb3IuY29sID0gZnBvcy0+Y29sOworCWNoZWNrX2N1cnNvcl9jb2woKTsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworI2VuZGlmCisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisgICAgfQorfQorCisvKgorICogRmluZCBmaWxlIGluIGJ1ZmZlciBsaXN0IGJ5IG5hbWUgKGl0IGhhcyB0byBiZSBmb3IgdGhlIGN1cnJlbnQgd2luZG93KS4KKyAqICJmZm5hbWUiIG11c3QgaGF2ZSBhIGZ1bGwgcGF0aC4KKyAqLworICAgIGJ1Zl9UICoKK2J1Zmxpc3RfZmluZG5hbWUoZmZuYW1lKQorICAgIGNoYXJfdQkqZmZuYW1lOworeworI2lmZGVmIFVOSVgKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKworICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWZmbmFtZSwgJnN0KSA8IDApCisJc3Quc3RfZGV2ID0gKGRldl9UKS0xOworICAgIHJldHVybiBidWZsaXN0X2ZpbmRuYW1lX3N0YXQoZmZuYW1lLCAmc3QpOworfQorCisvKgorICogU2FtZSBhcyBidWZsaXN0X2ZpbmRuYW1lKCksIGJ1dCBwYXNzIHRoZSBzdGF0IHN0cnVjdHVyZSB0byBhdm9pZCBnZXR0aW5nIGl0CisgKiB0d2ljZSBmb3IgdGhlIHNhbWUgZmlsZS4KKyAqLworICAgIHN0YXRpYyBidWZfVCAqCitidWZsaXN0X2ZpbmRuYW1lX3N0YXQoZmZuYW1lLCBzdHApCisgICAgY2hhcl91CSpmZm5hbWU7CisgICAgc3RydWN0IHN0YXQJKnN0cDsKK3sKKyNlbmRpZgorICAgIGJ1Zl9UCSpidWY7CisKKyAgICBmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTDsgYnVmID0gYnVmLT5iX25leHQpCisJaWYgKCFvdGhlcmZpbGVfYnVmKGJ1ZiwgZmZuYW1lCisjaWZkZWYgVU5JWAorCQkgICAgLCBzdHAKKyNlbmRpZgorCQkgICAgKSkKKwkgICAgcmV0dXJuIGJ1ZjsKKyAgICByZXR1cm4gTlVMTDsKK30KKworI2lmIGRlZmluZWQoRkVBVF9MSVNUQ01EUykgfHwgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoRkVBVF9QRVJMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEZpbmQgZmlsZSBpbiBidWZmZXIgbGlzdCBieSBhIHJlZ2V4cCBwYXR0ZXJuLgorICogUmV0dXJuIGZudW0gb2YgdGhlIGZvdW5kIGJ1ZmZlci4KKyAqIFJldHVybiA8IDAgZm9yIGVycm9yLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBpbnQKK2J1Zmxpc3RfZmluZHBhdChwYXR0ZXJuLCBwYXR0ZXJuX2VuZCwgdW5saXN0ZWQsIGRpZmZtb2RlKQorICAgIGNoYXJfdQkqcGF0dGVybjsKKyAgICBjaGFyX3UJKnBhdHRlcm5fZW5kOwkvKiBwb2ludGVyIHRvIGZpcnN0IGNoYXIgYWZ0ZXIgcGF0dGVybiAqLworICAgIGludAkJdW5saXN0ZWQ7CS8qIGZpbmQgdW5saXN0ZWQgYnVmZmVycyAqLworICAgIGludAkJZGlmZm1vZGU7CS8qIGZpbmQgZGlmZi1tb2RlIGJ1ZmZlcnMgb25seSAqLworeworICAgIGJ1Zl9UCSpidWY7CisgICAgcmVncHJvZ19UCSpwcm9nOworICAgIGludAkJbWF0Y2ggPSAtMTsKKyAgICBpbnQJCWZpbmRfbGlzdGVkOworICAgIGNoYXJfdQkqcGF0OworICAgIGNoYXJfdQkqcGF0ZW5kOworICAgIGludAkJYXR0ZW1wdDsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQl0b2dnbGVkb2xsYXI7CisKKyAgICBpZiAocGF0dGVybl9lbmQgPT0gcGF0dGVybiArIDEgJiYgKCpwYXR0ZXJuID09ICclJyB8fCAqcGF0dGVybiA9PSAnIycpKQorICAgIHsKKwlpZiAoKnBhdHRlcm4gPT0gJyUnKQorCSAgICBtYXRjaCA9IGN1cmJ1Zi0+Yl9mbnVtOworCWVsc2UKKwkgICAgbWF0Y2ggPSBjdXJ3aW4tPndfYWx0X2ZudW07CisjaWZkZWYgRkVBVF9ESUZGCisJaWYgKGRpZmZtb2RlICYmICFkaWZmX21vZGVfYnVmKGJ1Zmxpc3RfZmluZG5yKG1hdGNoKSkpCisJICAgIG1hdGNoID0gLTE7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRyeSBmb3VyIHdheXMgb2YgbWF0Y2hpbmcgYSBsaXN0ZWQgYnVmZmVyOgorICAgICAqIGF0dGVtcHQgPT0gMDogd2l0aG91dCAnXicgb3IgJyQnIChhdCBhbnkgcG9zaXRpb24pCisgICAgICogYXR0ZW1wdCA9PSAxOiB3aXRoICdeJyBhdCBzdGFydCAob25seSBhdCBwb3N0aW9uIDApCisgICAgICogYXR0ZW1wdCA9PSAyOiB3aXRoICckJyBhdCBlbmQgKG9ubHkgbWF0Y2ggYXQgZW5kKQorICAgICAqIGF0dGVtcHQgPT0gMzogd2l0aCAnXicgYXQgc3RhcnQgYW5kICckJyBhdCBlbmQgKG9ubHkgZnVsbCBtYXRjaCkKKyAgICAgKiBSZXBlYXQgdGhpcyBmb3IgZmluZGluZyBhbiB1bmxpc3RlZCBidWZmZXIgaWYgdGhlcmUgd2FzIG5vIG1hdGNoaW5nCisgICAgICogbGlzdGVkIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBlbHNlCisgICAgeworCXBhdCA9IGZpbGVfcGF0X3RvX3JlZ19wYXQocGF0dGVybiwgcGF0dGVybl9lbmQsIE5VTEwsIEZBTFNFKTsKKwlpZiAocGF0ID09IE5VTEwpCisJICAgIHJldHVybiAtMTsKKwlwYXRlbmQgPSBwYXQgKyBTVFJMRU4ocGF0KSAtIDE7CisJdG9nZ2xlZG9sbGFyID0gKHBhdGVuZCA+IHBhdCAmJiAqcGF0ZW5kID09ICckJyk7CisKKwkvKiBGaXJzdCB0cnkgZmluZGluZyBhIGxpc3RlZCBidWZmZXIuICBJZiBub3QgZm91bmQgYW5kICJ1bmxpc3RlZCIKKwkgKiBpcyBUUlVFLCB0cnkgZmluZGluZyBhbiB1bmxpc3RlZCBidWZmZXIuICovCisJZmluZF9saXN0ZWQgPSBUUlVFOworCWZvciAoOzspCisJeworCSAgICBmb3IgKGF0dGVtcHQgPSAwOyBhdHRlbXB0IDw9IDM7ICsrYXR0ZW1wdCkKKwkgICAgeworCQkvKiBtYXkgYWRkICdeJyBhbmQgJyQnICovCisJCWlmICh0b2dnbGVkb2xsYXIpCisJCSAgICAqcGF0ZW5kID0gKGF0dGVtcHQgPCAyKSA/IE5VTCA6ICckJzsgLyogYWRkL3JlbW92ZSAnJCcgKi8KKwkJcCA9IHBhdDsKKwkJaWYgKCpwID09ICdeJyAmJiAhKGF0dGVtcHQgJiAxKSkJIC8qIGFkZC9yZW1vdmUgJ14nICovCisJCSAgICArK3A7CisJCXByb2cgPSB2aW1fcmVnY29tcChwLCBwX21hZ2ljID8gUkVfTUFHSUMgOiAwKTsKKwkJaWYgKHByb2cgPT0gTlVMTCkKKwkJeworCQkgICAgdmltX2ZyZWUocGF0KTsKKwkJICAgIHJldHVybiAtMTsKKwkJfQorCisJCWZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKwkJICAgIGlmIChidWYtPmJfcF9ibCA9PSBmaW5kX2xpc3RlZAorI2lmZGVmIEZFQVRfRElGRgorCQkJICAgICYmICghZGlmZm1vZGUgfHwgZGlmZl9tb2RlX2J1ZihidWYpKQorI2VuZGlmCisJCQkgICAgJiYgYnVmbGlzdF9tYXRjaChwcm9nLCBidWYpICE9IE5VTEwpCisJCSAgICB7CisJCQlpZiAobWF0Y2ggPj0gMCkJCS8qIGFscmVhZHkgZm91bmQgYSBtYXRjaCAqLworCQkJeworCQkJICAgIG1hdGNoID0gLTI7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQltYXRjaCA9IGJ1Zi0+Yl9mbnVtOwkvKiByZW1lbWJlciBmaXJzdCBtYXRjaCAqLworCQkgICAgfQorCisJCXZpbV9mcmVlKHByb2cpOworCQlpZiAobWF0Y2ggPj0gMCkJCQkvKiBmb3VuZCBvbmUgbWF0Y2ggKi8KKwkJICAgIGJyZWFrOworCSAgICB9CisKKwkgICAgLyogT25seSBzZWFyY2ggZm9yIHVubGlzdGVkIGJ1ZmZlcnMgaWYgdGhlcmUgd2FzIG5vIG1hdGNoIHdpdGgKKwkgICAgICogYSBsaXN0ZWQgYnVmZmVyLiAqLworCSAgICBpZiAoIXVubGlzdGVkIHx8ICFmaW5kX2xpc3RlZCB8fCBtYXRjaCAhPSAtMSkKKwkJYnJlYWs7CisJICAgIGZpbmRfbGlzdGVkID0gRkFMU0U7CisJfQorCisJdmltX2ZyZWUocGF0KTsKKyAgICB9CisKKyAgICBpZiAobWF0Y2ggPT0gLTIpCisJRU1TRzIoXygiRTkzOiBNb3JlIHRoYW4gb25lIG1hdGNoIGZvciAlcyIpLCBwYXR0ZXJuKTsKKyAgICBlbHNlIGlmIChtYXRjaCA8IDApCisJRU1TRzIoXygiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIiksIHBhdHRlcm4pOworICAgIHJldHVybiBtYXRjaDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qCisgKiBGaW5kIGFsbCBidWZmZXIgbmFtZXMgdGhhdCBtYXRjaC4KKyAqIEZvciBjb21tYW5kIGxpbmUgZXhwYW5zaW9uIG9mICI6YnVmIiBhbmQgIjpzYnVmIi4KKyAqIFJldHVybiBPSyBpZiBtYXRjaGVzIGZvdW5kLCBGQUlMIG90aGVyd2lzZS4KKyAqLworICAgIGludAorRXhwYW5kQnVmbmFtZXMocGF0LCBudW1fZmlsZSwgZmlsZSwgb3B0aW9ucykKKyAgICBjaGFyX3UJKnBhdDsKKyAgICBpbnQJCSpudW1fZmlsZTsKKyAgICBjaGFyX3UJKioqZmlsZTsKKyAgICBpbnQJCW9wdGlvbnM7Cit7CisgICAgaW50CQljb3VudCA9IDA7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCXJvdW5kOworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWF0dGVtcHQ7CisgICAgcmVncHJvZ19UCSpwcm9nOworCisgICAgKm51bV9maWxlID0gMDsJCSAgICAvKiByZXR1cm4gdmFsdWVzIGluIGNhc2Ugb2YgRkFJTCAqLworICAgICpmaWxlID0gTlVMTDsKKworICAgIC8qCisgICAgICogYXR0ZW1wdCA9PSAxOiB0cnkgbWF0Y2ggd2l0aCAgICAnXicsIG1hdGNoIGF0IHN0YXJ0CisgICAgICogYXR0ZW1wdCA9PSAyOiB0cnkgbWF0Y2ggd2l0aG91dCAnXicsIG1hdGNoIGFueXdoZXJlCisgICAgICovCisgICAgZm9yIChhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSAyOyArK2F0dGVtcHQpCisgICAgeworCWlmIChhdHRlbXB0ID09IDIpCisJeworCSAgICBpZiAoKnBhdCAhPSAnXicpCSAgICAvKiB0aGVyZSdzIG5vICdeJywgbm8gbmVlZCB0byB0cnkgYWdhaW4gKi8KKwkJYnJlYWs7CisJICAgICsrcGF0OwkJICAgIC8qIHNraXAgdGhlICdeJyAqLworCX0KKwlwcm9nID0gdmltX3JlZ2NvbXAocGF0LCBwX21hZ2ljID8gUkVfTUFHSUMgOiAwKTsKKwlpZiAocHJvZyA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFJTDsKKworCS8qCisJICogcm91bmQgPT0gMTogQ291bnQgdGhlIG1hdGNoZXMuCisJICogcm91bmQgPT0gMjogQnVpbGQgdGhlIGFycmF5IHRvIGtlZXAgdGhlIG1hdGNoZXMuCisJICovCisJZm9yIChyb3VuZCA9IDE7IHJvdW5kIDw9IDI7ICsrcm91bmQpCisJeworCSAgICBjb3VudCA9IDA7CisJICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKwkgICAgeworCQlpZiAoIWJ1Zi0+Yl9wX2JsKQkvKiBza2lwIHVubGlzdGVkIGJ1ZmZlcnMgKi8KKwkJICAgIGNvbnRpbnVlOworCQlwID0gYnVmbGlzdF9tYXRjaChwcm9nLCBidWYpOworCQlpZiAocCAhPSBOVUxMKQorCQl7CisJCSAgICBpZiAocm91bmQgPT0gMSkKKwkJCSsrY291bnQ7CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlpZiAob3B0aW9ucyAmIFdJTERfSE9NRV9SRVBMQUNFKQorCQkJICAgIHAgPSBob21lX3JlcGxhY2Vfc2F2ZShidWYsIHApOworCQkJZWxzZQorCQkJICAgIHAgPSB2aW1fc3Ryc2F2ZShwKTsKKwkJCSgqZmlsZSlbY291bnQrK10gPSBwOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgaWYgKGNvdW50ID09IDApCS8qIG5vIG1hdGNoIGZvdW5kLCBicmVhayBoZXJlICovCisJCWJyZWFrOworCSAgICBpZiAocm91bmQgPT0gMSkKKwkgICAgeworCQkqZmlsZSA9IChjaGFyX3UgKiopYWxsb2MoKHVuc2lnbmVkKShjb3VudCAqIHNpemVvZihjaGFyX3UgKikpKTsKKwkJaWYgKCpmaWxlID09IE5VTEwpCisJCXsKKwkJICAgIHZpbV9mcmVlKHByb2cpOworCQkgICAgcmV0dXJuIEZBSUw7CisJCX0KKwkgICAgfQorCX0KKwl2aW1fZnJlZShwcm9nKTsKKwlpZiAoY291bnQpCQkvKiBtYXRjaChlcykgZm91bmQsIGJyZWFrIGhlcmUgKi8KKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgKm51bV9maWxlID0gY291bnQ7CisgICAgcmV0dXJuIChjb3VudCA9PSAwID8gRkFJTCA6IE9LKTsKK30KKworI2VuZGlmIC8qIEZFQVRfQ01ETF9DT01QTCAqLworCisjaWZkZWYgSEFWRV9CVUZMSVNUX01BVENICisvKgorICogQ2hlY2sgZm9yIGEgbWF0Y2ggb24gdGhlIGZpbGUgbmFtZSBmb3IgYnVmZmVyICJidWYiIHdpdGggcmVncHJvZyAicHJvZyIuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2J1Zmxpc3RfbWF0Y2gocHJvZywgYnVmKQorICAgIHJlZ3Byb2dfVAkqcHJvZzsKKyAgICBidWZfVAkqYnVmOworeworICAgIGNoYXJfdQkqbWF0Y2g7CisKKyAgICAvKiBGaXJzdCB0cnkgdGhlIHNob3J0IGZpbGUgbmFtZSwgdGhlbiB0aGUgbG9uZyBmaWxlIG5hbWUuICovCisgICAgbWF0Y2ggPSBmbmFtZV9tYXRjaChwcm9nLCBidWYtPmJfc2ZuYW1lKTsKKyAgICBpZiAobWF0Y2ggPT0gTlVMTCkKKwltYXRjaCA9IGZuYW1lX21hdGNoKHByb2csIGJ1Zi0+Yl9mZm5hbWUpOworCisgICAgcmV0dXJuIG1hdGNoOworfQorCisvKgorICogVHJ5IG1hdGNoaW5nIHRoZSByZWdleHAgaW4gInByb2ciIHdpdGggZmlsZSBuYW1lICJuYW1lIi4KKyAqIFJldHVybiAibmFtZSIgd2hlbiB0aGVyZSBpcyBhIG1hdGNoLCBOVUxMIHdoZW4gbm90LgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitmbmFtZV9tYXRjaChwcm9nLCBuYW1lKQorICAgIHJlZ3Byb2dfVAkqcHJvZzsKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgY2hhcl91CSptYXRjaCA9IE5VTEw7CisgICAgY2hhcl91CSpwOworICAgIHJlZ21hdGNoX1QJcmVnbWF0Y2g7CisKKyAgICBpZiAobmFtZSAhPSBOVUxMKQorICAgIHsKKwlyZWdtYXRjaC5yZWdwcm9nID0gcHJvZzsKKyNpZmRlZiBDQVNFX0lOU0VOU0lUSVZFX0ZJTEVOQU1FCisJcmVnbWF0Y2gucm1faWMgPSBUUlVFOwkJLyogQWx3YXlzIGlnbm9yZSBjYXNlICovCisjZWxzZQorCXJlZ21hdGNoLnJtX2ljID0gRkFMU0U7CQkvKiBOZXZlciBpZ25vcmUgY2FzZSAqLworI2VuZGlmCisKKwlpZiAodmltX3JlZ2V4ZWMoJnJlZ21hdGNoLCBuYW1lLCAoY29sbnJfVCkwKSkKKwkgICAgbWF0Y2ggPSBuYW1lOworCWVsc2UKKwl7CisJICAgIC8qIFJlcGxhY2UgJChIT01FKSB3aXRoICd+JyBhbmQgdHJ5IG1hdGNoaW5nIGFnYWluLiAqLworCSAgICBwID0gaG9tZV9yZXBsYWNlX3NhdmUoTlVMTCwgbmFtZSk7CisJICAgIGlmIChwICE9IE5VTEwgJiYgdmltX3JlZ2V4ZWMoJnJlZ21hdGNoLCBwLCAoY29sbnJfVCkwKSkKKwkJbWF0Y2ggPSBuYW1lOworCSAgICB2aW1fZnJlZShwKTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIG1hdGNoOworfQorI2VuZGlmCisKKy8qCisgKiBmaW5kIGZpbGUgaW4gYnVmZmVyIGxpc3QgYnkgbnVtYmVyCisgKi8KKyAgICBidWZfVCAqCitidWZsaXN0X2ZpbmRucihucikKKyAgICBpbnQJCW5yOworeworICAgIGJ1Zl9UCSpidWY7CisKKyAgICBpZiAobnIgPT0gMCkKKwluciA9IGN1cndpbi0+d19hbHRfZm51bTsKKyAgICBmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTDsgYnVmID0gYnVmLT5iX25leHQpCisJaWYgKGJ1Zi0+Yl9mbnVtID09IG5yKQorCSAgICByZXR1cm4gKGJ1Zik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQgbmFtZSBvZiBmaWxlICduJyBpbiB0aGUgYnVmZmVyIGxpc3QuCisgKiBXaGVuIHRoZSBmaWxlIGhhcyBubyBuYW1lIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKyAqIGhvbWVfcmVwbGFjZSgpIGlzIHVzZWQgdG8gc2hvcnRlbiB0aGUgZmlsZSBuYW1lICh1c2VkIGZvciBtYXJrcykuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5LCBvZiBOVUxMIHdoZW4gZmFpbGVkLgorICovCisgICAgY2hhcl91ICoKK2J1Zmxpc3RfbnIybmFtZShuLCBmdWxsbmFtZSwgaGVscHRhaWwpCisgICAgaW50CQluOworICAgIGludAkJZnVsbG5hbWU7CisgICAgaW50CQloZWxwdGFpbDsJLyogZm9yIGhlbHAgYnVmZmVycyByZXR1cm4gdGFpbCBvbmx5ICovCit7CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIGJ1ZiA9IGJ1Zmxpc3RfZmluZG5yKG4pOworICAgIGlmIChidWYgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gaG9tZV9yZXBsYWNlX3NhdmUoaGVscHRhaWwgPyBidWYgOiBOVUxMLAorCQkJCSAgICAgZnVsbG5hbWUgPyBidWYtPmJfZmZuYW1lIDogYnVmLT5iX2ZuYW1lKTsKK30KKworLyoKKyAqIFNldCB0aGUgImxudW0iIGFuZCAiY29sIiBmb3IgdGhlIGJ1ZmZlciAiYnVmIiBhbmQgdGhlIGN1cnJlbnQgd2luZG93LgorICogV2hlbiAiY29weV9vcHRpb25zIiBpcyBUUlVFIHNhdmUgdGhlIGxvY2FsIHdpbmRvdyBvcHRpb24gdmFsdWVzLgorICogV2hlbiAibG51bSIgaXMgMCBvbmx5IGRvIHRoZSBvcHRpb25zLgorICovCisgICAgc3RhdGljIHZvaWQKK2J1Zmxpc3Rfc2V0ZnBvcyhidWYsIHdpbiwgbG51bSwgY29sLCBjb3B5X29wdGlvbnMpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICB3aW5fVAkqd2luOworICAgIGxpbmVucl9UCWxudW07CisgICAgY29sbnJfVAljb2w7CisgICAgaW50CQljb3B5X29wdGlvbnM7Cit7CisgICAgd2luaW5mb19UCSp3aXA7CisKKyAgICBmb3IgKHdpcCA9IGJ1Zi0+Yl93aW5pbmZvOyB3aXAgIT0gTlVMTDsgd2lwID0gd2lwLT53aV9uZXh0KQorCWlmICh3aXAtPndpX3dpbiA9PSB3aW4pCisJICAgIGJyZWFrOworICAgIGlmICh3aXAgPT0gTlVMTCkKKyAgICB7CisJLyogYWxsb2NhdGUgYSBuZXcgZW50cnkgKi8KKwl3aXAgPSAod2luaW5mb19UICopYWxsb2NfY2xlYXIoKHVuc2lnbmVkKXNpemVvZih3aW5pbmZvX1QpKTsKKwlpZiAod2lwID09IE5VTEwpCisJICAgIHJldHVybjsKKwl3aXAtPndpX3dpbiA9IHdpbjsKKwlpZiAobG51bSA9PSAwKQkJLyogc2V0IGxudW0gZXZlbiB3aGVuIGl0J3MgMCAqLworCSAgICBsbnVtID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIGxpc3QgKi8KKwlpZiAod2lwLT53aV9wcmV2KQorCSAgICB3aXAtPndpX3ByZXYtPndpX25leHQgPSB3aXAtPndpX25leHQ7CisJZWxzZQorCSAgICBidWYtPmJfd2luaW5mbyA9IHdpcC0+d2lfbmV4dDsKKwlpZiAod2lwLT53aV9uZXh0KQorCSAgICB3aXAtPndpX25leHQtPndpX3ByZXYgPSB3aXAtPndpX3ByZXY7CisJaWYgKGNvcHlfb3B0aW9ucyAmJiB3aXAtPndpX29wdHNldCkKKwl7CisJICAgIGNsZWFyX3dpbm9wdCgmd2lwLT53aV9vcHQpOworI2lmZGVmIEZFQVRfRk9MRElORworCSAgICBkZWxldGVGb2xkUmVjdXJzZSgmd2lwLT53aV9mb2xkcyk7CisjZW5kaWYKKwl9CisgICAgfQorICAgIGlmIChsbnVtICE9IDApCisgICAgeworCXdpcC0+d2lfZnBvcy5sbnVtID0gbG51bTsKKwl3aXAtPndpX2Zwb3MuY29sID0gY29sOworICAgIH0KKyAgICBpZiAoY29weV9vcHRpb25zKQorICAgIHsKKwkvKiBTYXZlIHRoZSB3aW5kb3ctc3BlY2lmaWMgb3B0aW9uIHZhbHVlcy4gKi8KKwljb3B5X3dpbm9wdCgmd2luLT53X29uZWJ1Zl9vcHQsICZ3aXAtPndpX29wdCk7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJd2lwLT53aV9mb2xkX21hbnVhbCA9IHdpbi0+d19mb2xkX21hbnVhbDsKKwljbG9uZUZvbGRHcm93QXJyYXkoJndpbi0+d19mb2xkcywgJndpcC0+d2lfZm9sZHMpOworI2VuZGlmCisJd2lwLT53aV9vcHRzZXQgPSBUUlVFOworICAgIH0KKworICAgIC8qIGluc2VydCB0aGUgZW50cnkgaW4gZnJvbnQgb2YgdGhlIGxpc3QgKi8KKyAgICB3aXAtPndpX25leHQgPSBidWYtPmJfd2luaW5mbzsKKyAgICBidWYtPmJfd2luaW5mbyA9IHdpcDsKKyAgICB3aXAtPndpX3ByZXYgPSBOVUxMOworICAgIGlmICh3aXAtPndpX25leHQpCisJd2lwLT53aV9uZXh0LT53aV9wcmV2ID0gd2lwOworCisgICAgcmV0dXJuOworfQorCisvKgorICogRmluZCBpbmZvIGZvciB0aGUgY3VycmVudCB3aW5kb3cgaW4gYnVmZmVyICJidWYiLgorICogSWYgbm90IGZvdW5kLCByZXR1cm4gdGhlIGluZm8gZm9yIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgd2luZG93LgorICogUmV0dXJucyBOVUxMIHdoZW4gdGhlcmUgaXNuJ3QgYW55IGluZm8uCisgKi8KKyAgICBzdGF0aWMgd2luaW5mb19UICoKK2ZpbmRfd2luaW5mbyhidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICB3aW5pbmZvX1QJKndpcDsKKworICAgIGZvciAod2lwID0gYnVmLT5iX3dpbmluZm87IHdpcCAhPSBOVUxMOyB3aXAgPSB3aXAtPndpX25leHQpCisJaWYgKHdpcC0+d2lfd2luID09IGN1cndpbikKKwkgICAgYnJlYWs7CisgICAgaWYgKHdpcCA9PSBOVUxMKQkvKiBpZiBubyBmcG9zIGZvciBjdXJ3aW4sIHVzZSB0aGUgZmlyc3QgaW4gdGhlIGxpc3QgKi8KKwl3aXAgPSBidWYtPmJfd2luaW5mbzsKKyAgICByZXR1cm4gd2lwOworfQorCisvKgorICogUmVzZXQgdGhlIGxvY2FsIHdpbmRvdyBvcHRpb25zIHRvIHRoZSB2YWx1ZXMgbGFzdCB1c2VkIGluIHRoaXMgd2luZG93LgorICogSWYgdGhlIGJ1ZmZlciB3YXNuJ3QgdXNlZCBpbiB0aGlzIHdpbmRvdyBiZWZvcmUsIHVzZSB0aGUgdmFsdWVzIGZyb20KKyAqIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgd2luZG93LiAgSWYgdGhlIHZhbHVlcyB3ZXJlIG5ldmVyIHNldCwgdXNlIHRoZQorICogZ2xvYmFsIHZhbHVlcyBmb3IgdGhlIHdpbmRvdy4KKyAqLworICAgIHZvaWQKK2dldF93aW5vcHRzKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIHdpbmluZm9fVAkqd2lwOworCisgICAgY2xlYXJfd2lub3B0KCZjdXJ3aW4tPndfb25lYnVmX29wdCk7CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgY2xlYXJGb2xkaW5nKGN1cndpbik7CisjZW5kaWYKKworICAgIHdpcCA9IGZpbmRfd2luaW5mbyhidWYpOworICAgIGlmICh3aXAgIT0gTlVMTCAmJiB3aXAtPndpX29wdHNldCkKKyAgICB7CisJY29weV93aW5vcHQoJndpcC0+d2lfb3B0LCAmY3Vyd2luLT53X29uZWJ1Zl9vcHQpOworI2lmZGVmIEZFQVRfRk9MRElORworCWN1cndpbi0+d19mb2xkX21hbnVhbCA9IHdpcC0+d2lfZm9sZF9tYW51YWw7CisJY3Vyd2luLT53X2ZvbGRpbnZhbGlkID0gVFJVRTsKKwljbG9uZUZvbGRHcm93QXJyYXkoJndpcC0+d2lfZm9sZHMsICZjdXJ3aW4tPndfZm9sZHMpOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKwljb3B5X3dpbm9wdCgmY3Vyd2luLT53X2FsbGJ1Zl9vcHQsICZjdXJ3aW4tPndfb25lYnVmX29wdCk7CisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICAvKiBTZXQgJ2ZvbGRsZXZlbCcgdG8gJ2ZvbGRsZXZlbHN0YXJ0JyBpZiBpdCdzIG5vdCBuZWdhdGl2ZS4gKi8KKyAgICBpZiAocF9mZGxzID49IDApCisJY3Vyd2luLT53X3BfZmRsID0gcF9mZGxzOworI2VuZGlmCit9CisKKy8qCisgKiBGaW5kIHRoZSBwb3NpdGlvbiAobG51bSBhbmQgY29sKSBmb3IgdGhlIGJ1ZmZlciAnYnVmJyBmb3IgdGhlIGN1cnJlbnQKKyAqIHdpbmRvdy4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIG5vX3Bvc2l0aW9uIGlmIG5vIHBvc2l0aW9uIGlzIGZvdW5kLgorICovCisgICAgcG9zX1QgKgorYnVmbGlzdF9maW5kZnBvcyhidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICB3aW5pbmZvX1QJKndpcDsKKyAgICBzdGF0aWMgcG9zX1Qgbm9fcG9zaXRpb24gPSB7MSwgMH07CisKKyAgICB3aXAgPSBmaW5kX3dpbmluZm8oYnVmKTsKKyAgICBpZiAod2lwICE9IE5VTEwpCisJcmV0dXJuICYod2lwLT53aV9mcG9zKTsKKyAgICBlbHNlCisJcmV0dXJuICZub19wb3NpdGlvbjsKK30KKworLyoKKyAqIEZpbmQgdGhlIGxudW0gZm9yIHRoZSBidWZmZXIgJ2J1ZicgZm9yIHRoZSBjdXJyZW50IHdpbmRvdy4KKyAqLworICAgIGxpbmVucl9UCitidWZsaXN0X2ZpbmRsbnVtKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIHJldHVybiBidWZsaXN0X2ZpbmRmcG9zKGJ1ZiktPmxudW07Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTElTVENNRFMpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogTGlzdCBhbGwga25vdyBmaWxlIG5hbWVzIChmb3IgOmZpbGVzIGFuZCA6YnVmZmVycyBjb21tYW5kKS4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorYnVmbGlzdF9saXN0KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTCAmJiAhZ290X2ludDsgYnVmID0gYnVmLT5iX25leHQpCisgICAgeworCS8qIHNraXAgdW5saXN0ZWQgYnVmZmVycywgdW5sZXNzICEgd2FzIHVzZWQgKi8KKwlpZiAoIWJ1Zi0+Yl9wX2JsICYmICFlYXAtPmZvcmNlaXQpCisJICAgIGNvbnRpbnVlOworCW1zZ19wdXRjaGFyKCdcbicpOworCWlmIChidWZfc3BuYW1lKGJ1ZikgIT0gTlVMTCkKKwkgICAgU1RSQ1BZKE5hbWVCdWZmLCBidWZfc3BuYW1lKGJ1ZikpOworCWVsc2UKKwkgICAgaG9tZV9yZXBsYWNlKGJ1ZiwgYnVmLT5iX2ZuYW1lLCBOYW1lQnVmZiwgTUFYUEFUSEwsIFRSVUUpOworCisJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgIiUzZCVjJWMlYyVjJWMgXCIiLAorCQlidWYtPmJfZm51bSwKKwkJYnVmLT5iX3BfYmwgPyAnICcgOiAndScsCisJCWJ1ZiA9PSBjdXJidWYgPyAnJScgOgorCQkJKGN1cndpbi0+d19hbHRfZm51bSA9PSBidWYtPmJfZm51bSA/ICcjJyA6ICcgJyksCisJCWJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCA/ICcgJyA6CisJCQkoYnVmLT5iX253aW5kb3dzID09IDAgPyAnaCcgOiAnYScpLAorCQkhYnVmLT5iX3BfbWEgPyAnLScgOiAoYnVmLT5iX3Bfcm8gPyAnPScgOiAnICcpLAorCQkoYnVmLT5iX2ZsYWdzICYgQkZfUkVBREVSUikgPyAneCcKKwkJCQkJICAgIDogKGJ1ZklzQ2hhbmdlZChidWYpID8gJysnIDogJyAnKQorCQkpOworCisJbGVuID0gKGludClTVFJMRU4oSU9idWZmKTsKKwlTVFJOQ1BZKElPYnVmZiArIGxlbiwgTmFtZUJ1ZmYsIElPU0laRSAtIDIwIC0gbGVuKTsKKwlJT2J1ZmZbSU9TSVpFIC0gMjAgLSBsZW5dID0gTlVMOyAgICAvKiBtYWtlIHN1cmUgaXQncyB0ZXJtaW5hdGVkICovCisKKwlsZW4gPSAoaW50KVNUUkxFTihJT2J1ZmYpOworCUlPYnVmZltsZW4rK10gPSAnIic7CisKKwkvKiBwdXQgImxpbmUgOTk5IiBpbiBjb2x1bW4gNDAgb3IgYWZ0ZXIgdGhlIGZpbGUgbmFtZSAqLworCUlPYnVmZltsZW5dID0gTlVMOworCWkgPSA0MCAtIHZpbV9zdHJzaXplKElPYnVmZik7CisJZG8KKwl7CisJICAgIElPYnVmZltsZW4rK10gPSAnICc7CisJfSB3aGlsZSAoLS1pID4gMCAmJiBsZW4gPCBJT1NJWkUgLSAxOCk7CisJc3ByaW50ZigoY2hhciAqKUlPYnVmZiArIGxlbiwgXygibGluZSAlbGQiKSwKKwkJYnVmID09IGN1cmJ1ZiA/IGN1cndpbi0+d19jdXJzb3IubG51bSA6CisJCQkJKGxvbmcpYnVmbGlzdF9maW5kbG51bShidWYpKTsKKwltc2dfb3V0dHJhbnMoSU9idWZmKTsKKwlvdXRfZmx1c2goKTsJICAgIC8qIG91dHB1dCBvbmUgbGluZSBhdCBhIHRpbWUgKi8KKwl1aV9icmVha2NoZWNrKCk7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBHZXQgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlciBmb3IgZmlsZSAnZm51bScuCisgKiBVc2VkIGJ5IERvT25lQ21kKCkgZm9yIHRyYW5zbGF0aW5nICclJyBhbmQgJyMnLgorICogVXNlZCBieSBpbnNlcnRfcmVnKCkgYW5kIGNtZGxpbmVfcGFzdGUoKSBmb3IgJyMnIHJlZ2lzdGVyLgorICogUmV0dXJuIEZBSUwgaWYgbm90IGZvdW5kLCBPSyBmb3Igc3VjY2Vzcy4KKyAqLworICAgIGludAorYnVmbGlzdF9uYW1lX25yKGZudW0sIGZuYW1lLCBsbnVtKQorICAgIGludAkJZm51bTsKKyAgICBjaGFyX3UJKipmbmFtZTsKKyAgICBsaW5lbnJfVAkqbG51bTsKK3sKKyAgICBidWZfVAkqYnVmOworCisgICAgYnVmID0gYnVmbGlzdF9maW5kbnIoZm51bSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zi0+Yl9mbmFtZSA9PSBOVUxMKQorCXJldHVybiBGQUlMOworCisgICAgKmZuYW1lID0gYnVmLT5iX2ZuYW1lOworICAgICpsbnVtID0gYnVmbGlzdF9maW5kbG51bShidWYpOworCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogU2V0IHRoZSBmaWxlIG5hbWUgZm9yICJidWYiJyB0byAnZmZuYW1lJywgc2hvcnQgZmlsZSBuYW1lIHRvICdzZm5hbWUnLgorICogVGhlIGZpbGUgbmFtZSB3aXRoIHRoZSBmdWxsIHBhdGggaXMgYWxzbyByZW1lbWJlcmVkLCBmb3Igd2hlbiA6Y2QgaXMgdXNlZC4KKyAqIFJldHVybnMgRkFJTCBmb3IgZmFpbHVyZSAoZmlsZSBuYW1lIGFscmVhZHkgaW4gdXNlIGJ5IG90aGVyIGJ1ZmZlcikKKyAqCU9LIG90aGVyd2lzZS4KKyAqLworICAgIGludAorc2V0Zm5hbWUoYnVmLCBmZm5hbWUsIHNmbmFtZSwgbWVzc2FnZSkKKyAgICBidWZfVAkqYnVmOworICAgIGNoYXJfdQkqZmZuYW1lLCAqc2ZuYW1lOworICAgIGludAkJbWVzc2FnZTsKK3sKKyAgICBidWZfVAkqb2J1ZjsKKyNpZmRlZiBVTklYCisgICAgc3RydWN0IHN0YXQgc3Q7CisjZW5kaWYKKworICAgIGlmIChmZm5hbWUgPT0gTlVMTCB8fCAqZmZuYW1lID09IE5VTCkKKyAgICB7CisJLyogUmVtb3ZpbmcgdGhlIG5hbWUuICovCisJdmltX2ZyZWUoYnVmLT5iX2ZmbmFtZSk7CisJdmltX2ZyZWUoYnVmLT5iX3NmbmFtZSk7CisJYnVmLT5iX2ZmbmFtZSA9IE5VTEw7CisJYnVmLT5iX3NmbmFtZSA9IE5VTEw7CisjaWZkZWYgVU5JWAorCXN0LnN0X2RldiA9IChkZXZfVCktMTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworCWZuYW1lX2V4cGFuZChidWYsICZmZm5hbWUsICZzZm5hbWUpOyAvKiB3aWxsIGFsbG9jYXRlIGZmbmFtZSAqLworCWlmIChmZm5hbWUgPT0gTlVMTCkJCSAgICAvKiBvdXQgb2YgbWVtb3J5ICovCisJICAgIHJldHVybiBGQUlMOworCisJLyoKKwkgKiBpZiB0aGUgZmlsZSBuYW1lIGlzIGFscmVhZHkgdXNlZCBpbiBhbm90aGVyIGJ1ZmZlcjoKKwkgKiAtIGlmIHRoZSBidWZmZXIgaXMgbG9hZGVkLCBmYWlsCisJICogLSBpZiB0aGUgYnVmZmVyIGlzIG5vdCBsb2FkZWQsIGRlbGV0ZSBpdCBmcm9tIHRoZSBsaXN0CisJICovCisjaWZkZWYgVU5JWAorCWlmIChtY2hfc3RhdCgoY2hhciAqKWZmbmFtZSwgJnN0KSA8IDApCisJICAgIHN0LnN0X2RldiA9IChkZXZfVCktMTsKKwlvYnVmID0gYnVmbGlzdF9maW5kbmFtZV9zdGF0KGZmbmFtZSwgJnN0KTsKKyNlbHNlCisJb2J1ZiA9IGJ1Zmxpc3RfZmluZG5hbWUoZmZuYW1lKTsKKyNlbmRpZgorCWlmIChvYnVmICE9IE5VTEwgJiYgb2J1ZiAhPSBidWYpCisJeworCSAgICBpZiAob2J1Zi0+Yl9tbC5tbF9tZnAgIT0gTlVMTCkJLyogaXQncyBsb2FkZWQsIGZhaWwgKi8KKwkgICAgeworCQlpZiAobWVzc2FnZSkKKwkJICAgIEVNU0coXygiRTk1OiBCdWZmZXIgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMiKSk7CisJCXZpbV9mcmVlKGZmbmFtZSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJICAgIGNsb3NlX2J1ZmZlcihOVUxMLCBvYnVmLCBET0JVRl9XSVBFKTsgLyogZGVsZXRlIGZyb20gdGhlIGxpc3QgKi8KKwl9CisJc2ZuYW1lID0gdmltX3N0cnNhdmUoc2ZuYW1lKTsKKwlpZiAoZmZuYW1lID09IE5VTEwgfHwgc2ZuYW1lID09IE5VTEwpCisJeworCSAgICB2aW1fZnJlZShzZm5hbWUpOworCSAgICB2aW1fZnJlZShmZm5hbWUpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisjaWZkZWYgVVNFX0ZOQU1FX0NBU0UKKyMgaWZkZWYgVVNFX0xPTkdfRk5BTUUKKwlpZiAoVVNFX0xPTkdfRk5BTUUpCisjIGVuZGlmCisJICAgIGZuYW1lX2Nhc2Uoc2ZuYW1lLCAwKTsgICAgLyogc2V0IGNvcnJlY3QgY2FzZSBmb3Igc2hvcnQgZmlsZSBuYW1lICovCisjZW5kaWYKKwl2aW1fZnJlZShidWYtPmJfZmZuYW1lKTsKKwl2aW1fZnJlZShidWYtPmJfc2ZuYW1lKTsKKwlidWYtPmJfZmZuYW1lID0gZmZuYW1lOworCWJ1Zi0+Yl9zZm5hbWUgPSBzZm5hbWU7CisgICAgfQorICAgIGJ1Zi0+Yl9mbmFtZSA9IGJ1Zi0+Yl9zZm5hbWU7CisjaWZkZWYgVU5JWAorICAgIGlmIChzdC5zdF9kZXYgPT0gKGRldl9UKS0xKQorCWJ1Zi0+Yl9kZXYgPSAtMTsKKyAgICBlbHNlCisgICAgeworCWJ1Zi0+Yl9kZXYgPSBzdC5zdF9kZXY7CisJYnVmLT5iX2lubyA9IHN0LnN0X2lubzsKKyAgICB9CisjZW5kaWYKKworI2lmbmRlZiBTSE9SVF9GTkFNRQorICAgIGJ1Zi0+Yl9zaG9ydG5hbWUgPSBGQUxTRTsKKyNlbmRpZgorCisgICAgYnVmX25hbWVfY2hhbmdlZChidWYpOworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFRha2UgY2FyZSBvZiB3aGF0IG5lZWRzIHRvIGJlIGRvbmUgd2hlbiB0aGUgbmFtZSBvZiBidWZmZXIgImJ1ZiIgaGFzCisgKiBjaGFuZ2VkLgorICovCisgICAgdm9pZAorYnVmX25hbWVfY2hhbmdlZChidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICAvKgorICAgICAqIElmIHRoZSBmaWxlIG5hbWUgY2hhbmdlZCwgYWxzbyBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIHN3YXBmaWxlCisgICAgICovCisgICAgaWYgKGJ1Zi0+Yl9tbC5tbF9tZnAgIT0gTlVMTCkKKwltbF9zZXRuYW1lKGJ1Zik7CisKKyAgICBpZiAoY3Vyd2luLT53X2J1ZmZlciA9PSBidWYpCisJY2hlY2tfYXJnX2lkeChjdXJ3aW4pOwkvKiBjaGVjayBmaWxlIG5hbWUgZm9yIGFyZyBsaXN0ICovCisjaWZkZWYgRkVBVF9USVRMRQorICAgIG1ha2V0aXRsZSgpOwkJLyogc2V0IHdpbmRvdyB0aXRsZSAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgc3RhdHVzX3JlZHJhd19hbGwoKTsJLyogc3RhdHVzIGxpbmVzIG5lZWQgdG8gYmUgcmVkcmF3biAqLworI2VuZGlmCisgICAgZm1hcmtzX2NoZWNrX25hbWVzKGJ1Zik7CS8qIGNoZWNrIG5hbWVkIGZpbGUgbWFya3MgKi8KKyAgICBtbF90aW1lc3RhbXAoYnVmKTsJCS8qIHJlc2V0IHRpbWVzdGFtcCAqLworfQorCisvKgorICogc2V0IGFsdGVybmF0ZSBmaWxlIG5hbWUgZm9yIGN1cnJlbnQgd2luZG93CisgKgorICogVXNlZCBieSBkb19vbmVfY21kKCksIGRvX3dyaXRlKCkgYW5kIGRvX2VjbWQoKS4KKyAqIFJldHVybiB0aGUgYnVmZmVyLgorICovCisgICAgYnVmX1QgKgorc2V0YWx0Zm5hbWUoZmZuYW1lLCBzZm5hbWUsIGxudW0pCisgICAgY2hhcl91CSpmZm5hbWU7CisgICAgY2hhcl91CSpzZm5hbWU7CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBidWZfVAkqYnVmOworCisgICAgLyogQ3JlYXRlIGEgYnVmZmVyLiAgJ2J1Zmxpc3RlZCcgaXMgbm90IHNldCBpZiBpdCdzIGEgbmV3IGJ1ZmZlciAqLworICAgIGJ1ZiA9IGJ1Zmxpc3RfbmV3KGZmbmFtZSwgc2ZuYW1lLCBsbnVtLCAwKTsKKyAgICBpZiAoYnVmICE9IE5VTEwpCisJY3Vyd2luLT53X2FsdF9mbnVtID0gYnVmLT5iX2ZudW07CisgICAgcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqIEdldCBhbHRlcm5hdGUgZmlsZSBuYW1lIGZvciBjdXJyZW50IHdpbmRvdy4KKyAqIFJldHVybiBOVUxMIGlmIHRoZXJlIGlzbid0IGFueSwgYW5kIGdpdmUgZXJyb3IgbWVzc2FnZSBpZiByZXF1ZXN0ZWQuCisgKi8KKyAgICBjaGFyX3UgICoKK2dldGFsdGZuYW1lKGVycm1zZykKKyAgICBpbnQJCWVycm1zZzsJCS8qIGdpdmUgZXJyb3IgbWVzc2FnZSAqLworeworICAgIGNoYXJfdQkqZm5hbWU7CisgICAgbGluZW5yX1QJZHVtbXk7CisKKyAgICBpZiAoYnVmbGlzdF9uYW1lX25yKDAsICZmbmFtZSwgJmR1bW15KSA9PSBGQUlMKQorICAgIHsKKwlpZiAoZXJybXNnKQorCSAgICBFTVNHKF8oZV9ub2FsdCkpOworCXJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZm5hbWU7Cit9CisKKy8qCisgKiBBZGQgYSBmaWxlIG5hbWUgdG8gdGhlIGJ1Zmxpc3QgYW5kIHJldHVybiBpdHMgbnVtYmVyLgorICogVXNlcyBzYW1lIGZsYWdzIGFzIGJ1Zmxpc3RfbmV3KCksIGV4Y2VwdCBCTE5fRFVNTVkuCisgKgorICogdXNlZCBieSBxZl9pbml0KCksIG1haW4oKSBhbmQgZG9hcmdsaXN0KCkKKyAqLworICAgIGludAorYnVmbGlzdF9hZGQoZm5hbWUsIGZsYWdzKQorICAgIGNoYXJfdQkqZm5hbWU7CisgICAgaW50CQlmbGFnczsKK3sKKyAgICBidWZfVAkqYnVmOworCisgICAgYnVmID0gYnVmbGlzdF9uZXcoZm5hbWUsIE5VTEwsIChsaW5lbnJfVCkwLCBmbGFncyk7CisgICAgaWYgKGJ1ZiAhPSBOVUxMKQorCXJldHVybiBidWYtPmJfZm51bTsKKyAgICByZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQkFDS1NMQVNIX0lOX0ZJTEVOQU1FKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEFkanVzdCBzbGFzaGVzIGluIGZpbGUgbmFtZXMuICBDYWxsZWQgYWZ0ZXIgJ3NoZWxsc2xhc2gnIHdhcyBzZXQuCisgKi8KKyAgICB2b2lkCitidWZsaXN0X3NsYXNoX2FkanVzdCgpCit7CisgICAgYnVmX1QJKmJwOworCisgICAgZm9yIChicCA9IGZpcnN0YnVmOyBicCAhPSBOVUxMOyBicCA9IGJwLT5iX25leHQpCisgICAgeworCWlmIChicC0+Yl9mZm5hbWUgIT0gTlVMTCkKKwkgICAgc2xhc2hfYWRqdXN0KGJwLT5iX2ZmbmFtZSk7CisJaWYgKGJwLT5iX3NmbmFtZSAhPSBOVUxMKQorCSAgICBzbGFzaF9hZGp1c3QoYnAtPmJfc2ZuYW1lKTsKKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqIFNldCBhbHRlcm5hdGUgY3Vyc29yIHBvc2l0aW9uIGZvciBjdXJyZW50IHdpbmRvdy4KKyAqIEFsc28gc2F2ZSB0aGUgbG9jYWwgd2luZG93IG9wdGlvbiB2YWx1ZXMuCisgKi8KKyAgICB2b2lkCitidWZsaXN0X2FsdGZwb3MoKQoreworICAgIGJ1Zmxpc3Rfc2V0ZnBvcyhjdXJidWYsIGN1cndpbiwgY3Vyd2luLT53X2N1cnNvci5sbnVtLAorCQkJCQkJICBjdXJ3aW4tPndfY3Vyc29yLmNvbCwgVFJVRSk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAnZmZuYW1lJyBpcyBub3QgdGhlIHNhbWUgZmlsZSBhcyBjdXJyZW50IGZpbGUuCisgKiBGbmFtZSBtdXN0IGhhdmUgYSBmdWxsIHBhdGggKGV4cGFuZGVkIGJ5IG1jaF9GdWxsTmFtZSgpKS4KKyAqLworICAgIGludAorb3RoZXJmaWxlKGZmbmFtZSkKKyAgICBjaGFyX3UJKmZmbmFtZTsKK3sKKyAgICByZXR1cm4gb3RoZXJmaWxlX2J1ZihjdXJidWYsIGZmbmFtZQorI2lmZGVmIFVOSVgKKwkgICAgLCBOVUxMCisjZW5kaWYKKwkgICAgKTsKK30KKworICAgIHN0YXRpYyBpbnQKK290aGVyZmlsZV9idWYoYnVmLCBmZm5hbWUKKyNpZmRlZiBVTklYCisJLCBzdHAKKyNlbmRpZgorCSkKKyAgICBidWZfVAkqYnVmOworICAgIGNoYXJfdQkqZmZuYW1lOworI2lmZGVmIFVOSVgKKyAgICBzdHJ1Y3Qgc3RhdAkqc3RwOworI2VuZGlmCit7CisgICAgLyogbm8gbmFtZSBpcyBkaWZmZXJlbnQgKi8KKyAgICBpZiAoZmZuYW1lID09IE5VTEwgfHwgKmZmbmFtZSA9PSBOVUwgfHwgYnVmLT5iX2ZmbmFtZSA9PSBOVUxMKQorCXJldHVybiBUUlVFOworICAgIGlmIChmbmFtZWNtcChmZm5hbWUsIGJ1Zi0+Yl9mZm5hbWUpID09IDApCisJcmV0dXJuIEZBTFNFOworI2lmZGVmIFVOSVgKKyAgICB7CisJc3RydWN0IHN0YXQJc3Q7CisKKwkvKiBJZiBubyBzdHJ1Y3Qgc3RhdCBnaXZlbiwgZ2V0IGl0IG5vdyAqLworCWlmIChzdHAgPT0gTlVMTCkKKwl7CisJICAgIGlmIChidWYtPmJfZGV2IDwgMCB8fCBtY2hfc3RhdCgoY2hhciAqKWZmbmFtZSwgJnN0KSA8IDApCisJCXN0LnN0X2RldiA9IChkZXZfVCktMTsKKwkgICAgc3RwID0gJnN0OworCX0KKwkvKiBVc2UgZGV2L2lubyB0byBjaGVjayBpZiB0aGUgZmlsZXMgYXJlIHRoZSBzYW1lLCBldmVuIHdoZW4gdGhlIG5hbWVzCisJICogYXJlIGRpZmZlcmVudCAocG9zc2libGUgd2l0aCBsaW5rcykuICBTdGlsbCBuZWVkIHRvIGNvbXBhcmUgdGhlCisJICogbmFtZSBhYm92ZSwgZm9yIHdoZW4gdGhlIGZpbGUgZG9lc24ndCBleGlzdCB5ZXQuCisJICogUHJvYmxlbTogVGhlIGRldi9pbm8gY2hhbmdlcyB3aGVuIGEgZmlsZSBpcyBkZWxldGVkIChhbmQgY3JlYXRlZAorCSAqIGFnYWluKSBhbmQgcmVtYWlucyB0aGUgc2FtZSB3aGVuIHJlbmFtZWQvbW92ZWQuICBXZSBkb24ndCB3YW50IHRvCisJICogbWNoX3N0YXQoKSBlYWNoIGJ1ZmZlciBlYWNoIHRpbWUsIHRoYXQgd291bGQgYmUgdG9vIHNsb3cuICBHZXQgdGhlCisJICogZGV2L2lubyBhZ2FpbiB3aGVuIHRoZXkgYXBwZWFyIHRvIG1hdGNoLCBidXQgbm90IHdoZW4gdGhleSBhcHBlYXIKKwkgKiB0byBiZSBkaWZmZXJlbnQ6IENvdWxkIHNraXAgYSBidWZmZXIgd2hlbiBpdCdzIGFjdHVhbGx5IHRoZSBzYW1lCisJICogZmlsZS4gKi8KKwlpZiAoYnVmX3NhbWVfaW5vKGJ1Ziwgc3RwKSkKKwl7CisJICAgIGJ1Zl9zZXRpbm8oYnVmKTsKKwkgICAgaWYgKGJ1Zl9zYW1lX2lubyhidWYsIHN0cCkpCisJCXJldHVybiBGQUxTRTsKKwl9CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogU2V0IGlub2RlIGFuZCBkZXZpY2UgbnVtYmVyIGZvciBhIGJ1ZmZlci4KKyAqIE11c3QgYWx3YXlzIGJlIGNhbGxlZCB3aGVuIGJfZm5hbWUgaXMgY2hhbmdlZCEuCisgKi8KKyAgICB2b2lkCitidWZfc2V0aW5vKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIHN0cnVjdCBzdGF0CXN0OworCisgICAgaWYgKGJ1Zi0+Yl9mbmFtZSAhPSBOVUxMICYmIG1jaF9zdGF0KChjaGFyICopYnVmLT5iX2ZuYW1lLCAmc3QpID49IDApCisgICAgeworCWJ1Zi0+Yl9kZXYgPSBzdC5zdF9kZXY7CisJYnVmLT5iX2lubyA9IHN0LnN0X2lubzsKKyAgICB9CisgICAgZWxzZQorCWJ1Zi0+Yl9kZXYgPSAtMTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGRldi9pbm8gaW4gYnVmZmVyICJidWYiIG1hdGNoZXMgd2l0aCAic3RwIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK2J1Zl9zYW1lX2lubyhidWYsIHN0cCkKKyAgICBidWZfVAkqYnVmOworICAgIHN0cnVjdCBzdGF0ICpzdHA7Cit7CisgICAgcmV0dXJuIChidWYtPmJfZGV2ID49IDAKKwkgICAgJiYgc3RwLT5zdF9kZXYgPT0gYnVmLT5iX2RldgorCSAgICAmJiBzdHAtPnN0X2lubyA9PSBidWYtPmJfaW5vKTsKK30KKyNlbmRpZgorCisgICAgdm9pZAorZmlsZWluZm8oZnVsbG5hbWUsIHNob3J0aGVscCwgZG9udF90cnVuY2F0ZSkKKyAgICBpbnQgZnVsbG5hbWU7CisgICAgaW50IHNob3J0aGVscDsKKyAgICBpbnQJZG9udF90cnVuY2F0ZTsKK3sKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQluOworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKmJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IGFsbG9jKElPU0laRSk7CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGlmIChmdWxsbmFtZSA+IDEpCSAgICAvKiAyIENUUkwtRzogaW5jbHVkZSBidWZmZXIgbnVtYmVyICovCisgICAgeworCXNwcmludGYoKGNoYXIgKilidWZmZXIsICJidWYgJWQ6ICIsIGN1cmJ1Zi0+Yl9mbnVtKTsKKwlwID0gYnVmZmVyICsgU1RSTEVOKGJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UKKwlwID0gYnVmZmVyOworCisgICAgKnArKyA9ICciJzsKKyAgICBpZiAoYnVmX3NwbmFtZShjdXJidWYpICE9IE5VTEwpCisJU1RSQ1BZKHAsIGJ1Zl9zcG5hbWUoY3VyYnVmKSk7CisgICAgZWxzZQorICAgIHsKKwlpZiAoIWZ1bGxuYW1lICYmIGN1cmJ1Zi0+Yl9mbmFtZSAhPSBOVUxMKQorCSAgICBuYW1lID0gY3VyYnVmLT5iX2ZuYW1lOworCWVsc2UKKwkgICAgbmFtZSA9IGN1cmJ1Zi0+Yl9mZm5hbWU7CisJaG9tZV9yZXBsYWNlKHNob3J0aGVscCA/IGN1cmJ1ZiA6IE5VTEwsIG5hbWUsIHAsCisJCQkJCSAgKGludCkoSU9TSVpFIC0gKHAgLSBidWZmZXIpKSwgVFJVRSk7CisgICAgfQorCisgICAgc3ByaW50ZigoY2hhciAqKWJ1ZmZlciArIFNUUkxFTihidWZmZXIpLAorCSAgICAiXCIlcyVzJXMlcyVzJXMiLAorCSAgICBjdXJidWZJc0NoYW5nZWQoKSA/IChzaG9ydG1lc3MoU0hNX01PRCkKKwkJCQkJICA/ICAiIFsrXSIgOiBfKCIgW01vZGlmaWVkXSIpKSA6ICIgIiwKKwkgICAgKGN1cmJ1Zi0+Yl9mbGFncyAmIEJGX05PVEVESVRFRCkKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJCSAgICAmJiAhYnRfZG9udHdyaXRlKGN1cmJ1ZikKKyNlbmRpZgorCQkJCQk/IF8oIltOb3QgZWRpdGVkXSIpIDogIiIsCisJICAgIChjdXJidWYtPmJfZmxhZ3MgJiBCRl9ORVcpCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCQkgICAgJiYgIWJ0X2RvbnR3cml0ZShjdXJidWYpCisjZW5kaWYKKwkJCQkJPyBfKCJbTmV3IGZpbGVdIikgOiAiIiwKKwkgICAgKGN1cmJ1Zi0+Yl9mbGFncyAmIEJGX1JFQURFUlIpID8gXygiW1JlYWQgZXJyb3JzXSIpIDogIiIsCisJICAgIGN1cmJ1Zi0+Yl9wX3JvID8gKHNob3J0bWVzcyhTSE1fUk8pID8gIltST10iCisJCQkJCQkgICAgICA6IF8oIltyZWFkb25seV0iKSkgOiAiIiwKKwkgICAgKGN1cmJ1ZklzQ2hhbmdlZCgpIHx8IChjdXJidWYtPmJfZmxhZ3MgJiBCRl9XUklURV9NQVNLKQorCQkJCQkJCSAgfHwgY3VyYnVmLT5iX3Bfcm8pID8KKwkJCQkJCQkJICAgICIgIiA6ICIiKTsKKyAgICAvKiBXaXRoIDMyIGJpdCBsb25ncyBhbmQgbW9yZSB0aGFuIDIxLDQ3NCw4MzYgbGluZXMgbXVsdGlwbHlpbmcgYnkgMTAwCisgICAgICogY2F1c2VzIGFuIG92ZXJmbG93LCB0aHVzIGZvciBsYXJnZSBudW1iZXJzIGRpdmlkZSBpbnN0ZWFkLiAqLworICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiAxMDAwMDAwTCkKKwluID0gKGludCkoKChsb25nKWN1cndpbi0+d19jdXJzb3IubG51bSkgLworCQkJCSAgICgobG9uZyljdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCAvIDEwMEwpKTsKKyAgICBlbHNlCisJbiA9IChpbnQpKCgobG9uZyljdXJ3aW4tPndfY3Vyc29yLmxudW0gKiAxMDBMKSAvCisJCQkJCSAgICAobG9uZyljdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCk7CisgICAgaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZKQorICAgIHsKKwlTVFJDUFkoYnVmZmVyICsgU1RSTEVOKGJ1ZmZlciksIF8obm9fbGluZXNfbXNnKSk7CisgICAgfQorI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisgICAgZWxzZSBpZiAocF9ydSkKKyAgICB7CisJLyogQ3VycmVudCBsaW5lIGFuZCBjb2x1bW4gYXJlIGFscmVhZHkgb24gdGhlIHNjcmVlbiAtLSB3ZWJiICovCisJaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ID09IDEpCisJICAgIHNwcmludGYoKGNoYXIgKilidWZmZXIgKyBTVFJMRU4oYnVmZmVyKSwgXygiMSBsaW5lIC0tJWQlJS0tIiksIG4pOworCWVsc2UKKwkgICAgc3ByaW50ZigoY2hhciAqKWJ1ZmZlciArIFNUUkxFTihidWZmZXIpLCBfKCIlbGQgbGluZXMgLS0lZCUlLS0iKSwKKwkJCQkJIChsb25nKWN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LCBuKTsKKyAgICB9CisjZW5kaWYKKyAgICBlbHNlCisgICAgeworCXNwcmludGYoKGNoYXIgKilidWZmZXIgKyBTVFJMRU4oYnVmZmVyKSwKKwkJXygibGluZSAlbGQgb2YgJWxkIC0tJWQlJS0tIGNvbCAiKSwKKwkJKGxvbmcpY3Vyd2luLT53X2N1cnNvci5sbnVtLAorCQkobG9uZyljdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCwKKwkJbik7CisJdmFsaWRhdGVfdmlydGNvbCgpOworCWNvbF9wcmludChidWZmZXIgKyBTVFJMRU4oYnVmZmVyKSwKKwkJICAgKGludCljdXJ3aW4tPndfY3Vyc29yLmNvbCArIDEsIChpbnQpY3Vyd2luLT53X3ZpcnRjb2wgKyAxKTsKKyAgICB9CisKKyAgICAodm9pZClhcHBlbmRfYXJnX251bWJlcihjdXJ3aW4sIGJ1ZmZlciwgIXNob3J0bWVzcyhTSE1fRklMRSksIElPU0laRSk7CisKKyAgICBpZiAoZG9udF90cnVuY2F0ZSkKKyAgICB7CisJLyogVGVtcG9yYXJpbHkgc2V0IG1zZ19zY3JvbGwgdG8gYXZvaWQgdGhlIG1lc3NhZ2UgYmVpbmcgdHJ1bmNhdGVkLgorCSAqIEZpcnN0IGNhbGwgbXNnX3N0YXJ0KCkgdG8gZ2V0IHRoZSBtZXNzYWdlIGluIHRoZSByaWdodCBwbGFjZS4gKi8KKwltc2dfc3RhcnQoKTsKKwluID0gbXNnX3Njcm9sbDsKKwltc2dfc2Nyb2xsID0gVFJVRTsKKwltc2coYnVmZmVyKTsKKwltc2dfc2Nyb2xsID0gbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlwID0gbXNnX3RydW5jX2F0dHIoYnVmZmVyLCBGQUxTRSwgMCk7CisJaWYgKHJlc3RhcnRfZWRpdCAhPSAwIHx8IChtc2dfc2Nyb2xsZWQgJiYgIW5lZWRfd2FpdF9yZXR1cm4pKQorCXsKKwkgICAgLyogTmVlZCB0byByZXBlYXQgdGhlIG1lc3NhZ2UgYWZ0ZXIgcmVkcmF3aW5nIHdoZW46CisJICAgICAqIC0gV2hlbiByZXN0YXJ0X2VkaXQgaXMgc2V0IChvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIGRlbGF5CisJICAgICAqICAgYmVmb3JlIHJlZHJhd2luZykuCisJICAgICAqIC0gV2hlbiB0aGUgc2NyZWVuIHdhcyBzY3JvbGxlZCBidXQgdGhlcmUgaXMgbm8gd2FpdC1yZXR1cm4KKwkgICAgICogICBwcm9tcHQuICovCisJICAgIHNldF9rZWVwX21zZyhwKTsKKwkgICAga2VlcF9tc2dfYXR0ciA9IDA7CisJfQorICAgIH0KKworICAgIHZpbV9mcmVlKGJ1ZmZlcik7Cit9CisKKyAgICB2b2lkCitjb2xfcHJpbnQoYnVmLCBjb2wsIHZjb2wpCisgICAgY2hhcl91ICAqYnVmOworICAgIGludAkgICAgY29sOworICAgIGludAkgICAgdmNvbDsKK3sKKyAgICBpZiAoY29sID09IHZjb2wpCisJc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVkIiwgY29sKTsKKyAgICBlbHNlCisJc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVkLSVkIiwgY29sLCB2Y29sKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9USVRMRSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBwdXQgZmlsZSBuYW1lIGluIHRpdGxlIGJhciBvZiB3aW5kb3cgYW5kIGluIGljb24gdGl0bGUKKyAqLworCitzdGF0aWMgY2hhcl91ICpsYXN0dGl0bGUgPSBOVUxMOworc3RhdGljIGNoYXJfdSAqbGFzdGljb24gPSBOVUxMOworCisgICAgdm9pZAorbWFrZXRpdGxlKCkKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSp0X3N0ciA9IE5VTEw7CisgICAgY2hhcl91CSppX25hbWU7CisgICAgY2hhcl91CSppX3N0ciA9IE5VTEw7CisgICAgaW50CQltYXhsZW4gPSAwOworICAgIGludAkJbGVuOworICAgIGludAkJbXVzdHNldDsKKyAgICBjaGFyX3UJYnVmW0lPU0laRV07CisgICAgaW50CQlvZmY7CisKKyAgICBpZiAoIXJlZHJhd2luZygpKQorICAgIHsKKwkvKiBQb3N0cG9uZSB1cGRhdGluZyB0aGUgdGl0bGUgd2hlbiAnbGF6eXJlZHJhdycgaXMgc2V0LiAqLworCW5lZWRfbWFrZXRpdGxlID0gVFJVRTsKKwlyZXR1cm47CisgICAgfQorCisgICAgbmVlZF9tYWtldGl0bGUgPSBGQUxTRTsKKyAgICBpZiAoIXBfdGl0bGUgJiYgIXBfaWNvbikKKwlyZXR1cm47CisKKyAgICBpZiAocF90aXRsZSkKKyAgICB7CisJaWYgKHBfdGl0bGVsZW4gPiAwKQorCXsKKwkgICAgbWF4bGVuID0gcF90aXRsZWxlbiAqIENvbHVtbnMgLyAxMDA7CisJICAgIGlmIChtYXhsZW4gPCAxMCkKKwkJbWF4bGVuID0gMTA7CisJfQorCisJdF9zdHIgPSBidWY7CisJaWYgKCpwX3RpdGxlc3RyaW5nICE9IE5VTCkKKwl7CisjaWZkZWYgRkVBVF9TVExfT1BUCisJICAgIGlmIChzdGxfc3ludGF4ICYgU1RMX0lOX1RJVExFKQorCQlidWlsZF9zdGxfc3RyX2hsKGN1cndpbiwgdF9zdHIsIHNpemVvZihidWYpLAorCQkJCQkgICAgICBwX3RpdGxlc3RyaW5nLCAwLCBtYXhsZW4sIE5VTEwpOworCSAgICBlbHNlCisjZW5kaWYKKwkJdF9zdHIgPSBwX3RpdGxlc3RyaW5nOworCX0KKwllbHNlCisJeworCSAgICAvKiBmb3JtYXQ6ICJmbmFtZSArIChwYXRoKSAoMSBvZiAyKSAtIFZJTSIgKi8KKworCSAgICBpZiAoY3VyYnVmLT5iX2ZuYW1lID09IE5VTEwpCisJCVNUUkNQWShidWYsIF8oIltObyBmaWxlXSIpKTsKKwkgICAgZWxzZQorCSAgICB7CisJCXAgPSB0cmFuc3N0cihnZXR0YWlsKGN1cmJ1Zi0+Yl9mbmFtZSkpOworCQlTVFJOQ1BZKGJ1ZiwgcCwgSU9TSVpFIC0gMTAwKTsKKwkJdmltX2ZyZWUocCk7CisJCWJ1ZltJT1NJWkUgLSAxMDBdID0gTlVMOyAvKiBpbiBjYXNlIGl0IHdhcyB0b28gbG9uZyAqLworCSAgICB9CisKKwkgICAgc3dpdGNoIChidWZJc0NoYW5nZWQoY3VyYnVmKQorCQkgICAgKyAoY3VyYnVmLT5iX3Bfcm8gKiAyKQorCQkgICAgKyAoIWN1cmJ1Zi0+Yl9wX21hICogNCkpCisJICAgIHsKKwkJY2FzZSAxOiBTVFJDQVQoYnVmLCAiICsiKTsgYnJlYWs7CisJCWNhc2UgMjogU1RSQ0FUKGJ1ZiwgIiA9Iik7IGJyZWFrOworCQljYXNlIDM6IFNUUkNBVChidWYsICIgPSsiKTsgYnJlYWs7CisJCWNhc2UgNDoKKwkJY2FzZSA2OiBTVFJDQVQoYnVmLCAiIC0iKTsgYnJlYWs7CisJCWNhc2UgNToKKwkJY2FzZSA3OiBTVFJDQVQoYnVmLCAiIC0rIik7IGJyZWFrOworCSAgICB9CisKKwkgICAgaWYgKGN1cmJ1Zi0+Yl9mbmFtZSAhPSBOVUxMKQorCSAgICB7CisJCS8qIEdldCBwYXRoIG9mIGZpbGUsIHJlcGxhY2UgaG9tZSBkaXIgd2l0aCB+ICovCisJCW9mZiA9IChpbnQpU1RSTEVOKGJ1Zik7CisJCWJ1ZltvZmYrK10gPSAnICc7CisJCWJ1ZltvZmYrK10gPSAnKCc7CisJCWhvbWVfcmVwbGFjZShjdXJidWYsIGN1cmJ1Zi0+Yl9mZm5hbWUsCisJCQkJCSAgICAgICBidWYgKyBvZmYsIElPU0laRSAtIG9mZiwgVFJVRSk7CisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJCS8qIGF2b2lkICJjOi9uYW1lIiB0byBiZSByZWR1Y2VkIHRvICJjIiAqLworCQlpZiAoaXNhbHBoYShidWZbb2ZmXSkgJiYgYnVmW29mZiArIDFdID09ICc6JykKKwkJICAgIG9mZiArPSAyOworI2VuZGlmCisJCS8qIHJlbW92ZSB0aGUgZmlsZSBuYW1lICovCisJCXAgPSBnZXR0YWlsKGJ1ZiArIG9mZik7CisJCWlmIChwID09IGJ1ZiArIG9mZikKKwkJeworCQkgICAgLyogbXVzdCBiZSBhIGhlbHAgYnVmZmVyICovCisJCSAgICBTVFJDUFkoYnVmICsgb2ZmLCBfKCJoZWxwIikpOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgd2hpbGUgKHAgPiBidWYgKyBvZmYgKyAxICYmIHZpbV9pc3BhdGhzZXAocFstMV0pKQorCQkJLS1wOworI2lmZGVmIFZNUworCQkgICAgLyogcGF0aCBzZXBhcmF0b3IgaXMgcGFydCBvZiB0aGUgcGF0aCAqLworCQkgICAgKytwOworI2VuZGlmCisJCSAgICAqcCA9IE5VTDsKKwkJfQorCQkvKiB0cmFuc2xhdGUgdW5wcmludGFibGUgY2hhcnMgKi8KKwkJcCA9IHRyYW5zc3RyKGJ1ZiArIG9mZik7CisJCVNUUk5DUFkoYnVmICsgb2ZmLCBwLCBJT1NJWkUgLSBvZmYpOworCQl2aW1fZnJlZShwKTsKKwkJYnVmW0lPU0laRSAtIDFdID0gTlVMOyAgLyogaW4gY2FzZSBpdCB3YXMgdG9vIGxvbmcgKi8KKwkJU1RSQ0FUKGJ1ZiwgIikiKTsKKwkgICAgfQorCisJICAgIGFwcGVuZF9hcmdfbnVtYmVyKGN1cndpbiwgYnVmLCBGQUxTRSwgSU9TSVpFKTsKKworI2lmIGRlZmluZWQoRkVBVF9DTElFTlRTRVJWRVIpCisJICAgIGlmIChzZXJ2ZXJOYW1lICE9IE5VTEwpCisJICAgIHsKKwkJU1RSQ0FUKGJ1ZiwgIiAtICIpOworCQlTVFJDQVQoYnVmLCBzZXJ2ZXJOYW1lKTsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJU1RSQ0FUKGJ1ZiwgIiAtIFZJTSIpOworCisJICAgIGlmIChtYXhsZW4gPiAwKQorCSAgICB7CisJCS8qIG1ha2UgaXQgc2hvcnRlciBieSByZW1vdmluZyBhIGJpdCBpbiB0aGUgbWlkZGxlICovCisJCWxlbiA9IHZpbV9zdHJzaXplKGJ1Zik7CisJCWlmIChsZW4gPiBtYXhsZW4pCisJCSAgICB0cnVuY19zdHJpbmcoYnVmLCBidWYsIG1heGxlbik7CisJICAgIH0KKwl9CisgICAgfQorICAgIG11c3RzZXQgPSB0aV9jaGFuZ2UodF9zdHIsICZsYXN0dGl0bGUpOworCisgICAgaWYgKHBfaWNvbikKKyAgICB7CisJaV9zdHIgPSBidWY7CisJaWYgKCpwX2ljb25zdHJpbmcgIT0gTlVMKQorCXsKKyNpZmRlZiBGRUFUX1NUTF9PUFQKKwkgICAgaWYgKHN0bF9zeW50YXggJiBTVExfSU5fSUNPTikKKwkJYnVpbGRfc3RsX3N0cl9obChjdXJ3aW4sIGlfc3RyLCBzaXplb2YoYnVmKSwKKwkJCQkJCSAgICBwX2ljb25zdHJpbmcsIDAsIDAsIE5VTEwpOworCSAgICBlbHNlCisjZW5kaWYKKwkJaV9zdHIgPSBwX2ljb25zdHJpbmc7CisJfQorCWVsc2UKKwl7CisJICAgIGlmIChidWZfc3BuYW1lKGN1cmJ1ZikgIT0gTlVMTCkKKwkJaV9uYW1lID0gKGNoYXJfdSAqKWJ1Zl9zcG5hbWUoY3VyYnVmKTsKKwkgICAgZWxzZQkJICAgIC8qIHVzZSBmaWxlIG5hbWUgb25seSBpbiBpY29uICovCisJCWlfbmFtZSA9IGdldHRhaWwoY3VyYnVmLT5iX2ZmbmFtZSk7CisJICAgICppX3N0ciA9IE5VTDsKKwkgICAgLyogVHJ1bmNhdGUgbmFtZSBhdCAxMDAgYnl0ZXMuICovCisJICAgIGxlbiA9IFNUUkxFTihpX25hbWUpOworCSAgICBpZiAobGVuID4gMTAwKQorCSAgICB7CisJCWxlbiAtPSAxMDA7CisjaWZkZWYgRkVBVF9NQllURQorCQlpZiAoaGFzX21ieXRlKQorCQkgICAgbGVuICs9ICgqbWJfdGFpbF9vZmYpKGlfbmFtZSwgaV9uYW1lICsgbGVuKSArIDE7CisjZW5kaWYKKwkJaV9uYW1lICs9IGxlbjsKKwkgICAgfQorCSAgICBTVFJDUFkoaV9zdHIsIGlfbmFtZSk7CisJICAgIHRyYW5zX2NoYXJhY3RlcnMoaV9zdHIsIElPU0laRSk7CisJfQorICAgIH0KKworICAgIG11c3RzZXQgfD0gdGlfY2hhbmdlKGlfc3RyLCAmbGFzdGljb24pOworCisgICAgaWYgKG11c3RzZXQpCisJcmVzZXR0aXRsZSgpOworfQorCisvKgorICogVXNlZCBmb3IgdGl0bGUgYW5kIGljb246IENoZWNrIGlmICJzdHIiIGRpZmZlcnMgZnJvbSAiKmxhc3QiLiAgU2V0ICIqbGFzdCIKKyAqIGZyb20gInN0ciIgaWYgaXQgZG9lcy4KKyAqIFJldHVybiBUUlVFIHdoZW4gIipsYXN0IiBjaGFuZ2VkLgorICovCisgICAgc3RhdGljIGludAordGlfY2hhbmdlKHN0ciwgbGFzdCkKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBjaGFyX3UJKipsYXN0OworeworICAgIGlmICgoc3RyID09IE5VTEwpICE9ICgqbGFzdCA9PSBOVUxMKQorCSAgICB8fCAoc3RyICE9IE5VTEwgJiYgKmxhc3QgIT0gTlVMTCAmJiBTVFJDTVAoc3RyLCAqbGFzdCkgIT0gMCkpCisgICAgeworCXZpbV9mcmVlKCpsYXN0KTsKKwlpZiAoc3RyID09IE5VTEwpCisJICAgICpsYXN0ID0gTlVMTDsKKwllbHNlCisJICAgICpsYXN0ID0gdmltX3N0cnNhdmUoc3RyKTsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogUHV0IGN1cnJlbnQgd2luZG93IHRpdGxlIGJhY2sgKHVzZWQgYWZ0ZXIgY2FsbGluZyBhIHNoZWxsKQorICovCisgICAgdm9pZAorcmVzZXR0aXRsZSgpCit7CisgICAgbWNoX3NldHRpdGxlKGxhc3R0aXRsZSwgbGFzdGljb24pOworfQorI2VuZGlmIC8qIEZFQVRfVElUTEUgKi8KKworI2lmIGRlZmluZWQoRkVBVF9TVExfT1BUKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEJ1aWxkIGEgc3RyaW5nIGZyb20gdGhlIHN0YXR1cyBsaW5lIGl0ZW1zIGluIGZtdC4KKyAqIFJldHVybiBsZW5ndGggb2Ygc3RyaW5nIGluIHNjcmVlbiBjZWxscy4KKyAqCisgKiBJdGVtcyBhcmUgZHJhd24gaW50ZXJzcGVyc2VkIHdpdGggdGhlIHRleHQgdGhhdCBzdXJyb3VuZHMgaXQKKyAqIFNwZWNpYWxzOiAlLTx3aWQ+KHh4eCUpID0+IGdyb3VwLCAlPSA9PiBtaWRkbGUgbWFya2VyLCAlPCA9PiB0cnVuY2F0aW9uCisgKiBJdGVtOiAlLTxtaW53aWQ+LjxtYXh3aWQ+PGl0ZW1jaD4gQWxsIGJ1dCA8aXRlbWNoPiBhcmUgb3B0aW9uYWwKKyAqCisgKiBJZiBtYXh3aWR0aCBpcyBub3QgemVybywgdGhlIHN0cmluZyB3aWxsIGJlIGZpbGxlZCBhdCBhbnkgbWlkZGxlIG1hcmtlcgorICogb3IgdHJ1bmNhdGVkIGlmIHRvbyBsb25nLCBmaWxsY2hhciBpcyB1c2VkIGZvciBhbGwgd2hpdGVzcGFjZS4KKyAqLworICAgIGludAorYnVpbGRfc3RsX3N0cl9obCh3cCwgb3V0LCBvdXRsZW4sIGZtdCwgZmlsbGNoYXIsIG1heHdpZHRoLCBobCkKKyAgICB3aW5fVAkqd3A7CisgICAgY2hhcl91CSpvdXQ7CQkvKiBidWZmZXIgdG8gd3JpdGUgaW50byAqLworICAgIHNpemVfdAlvdXRsZW47CQkvKiBsZW5ndGggb2Ygb3V0W10gKi8KKyAgICBjaGFyX3UJKmZtdDsKKyAgICBpbnQJCWZpbGxjaGFyOworICAgIGludAkJbWF4d2lkdGg7CisgICAgc3RydWN0IHN0bF9obHJlYyAqaGw7Cit7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqczsKKyAgICBjaGFyX3UJKnQ7CisgICAgY2hhcl91CSpsaW5lY29udDsKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICB3aW5fVAkqb19jdXJ3aW47CisgICAgYnVmX1QJKm9fY3VyYnVmOworI2VuZGlmCisgICAgaW50CQllbXB0eV9saW5lOworICAgIGNvbG5yX1QJdmlydGNvbDsKKyAgICBsb25nCWw7CisgICAgbG9uZwluOworICAgIGludAkJcHJldmNoYXJfaXNmbGFnOworICAgIGludAkJcHJldmNoYXJfaXNpdGVtOworICAgIGludAkJaXRlbWlzZmxhZzsKKyAgICBpbnQJCWZpbGxhYmxlOworICAgIGNoYXJfdQkqc3RyOworICAgIGxvbmcJbnVtOworICAgIGludAkJd2lkdGg7CisgICAgaW50CQlpdGVtY250OworICAgIGludAkJY3VyaXRlbTsKKyAgICBpbnQJCWdyb3VwaXRlbVtTVExfTUFYX0lURU1dOworICAgIGludAkJZ3JvdXBkZXB0aDsKKyAgICBzdHJ1Y3Qgc3RsX2l0ZW0KKyAgICB7CisJY2hhcl91CQkqc3RhcnQ7CisJaW50CQltaW53aWQ7CisJaW50CQltYXh3aWQ7CisJZW51bQorCXsKKwkgICAgTm9ybWFsLAorCSAgICBFbXB0eSwKKwkgICAgR3JvdXAsCisJICAgIE1pZGRsZSwKKwkgICAgSGlnaGxpZ2h0LAorCSAgICBUcnVuYworCX0JCXR5cGU7CisgICAgfQkJaXRlbVtTVExfTUFYX0lURU1dOworICAgIGludAkJbWlud2lkOworICAgIGludAkJbWF4d2lkOworICAgIGludAkJemVyb3BhZDsKKyAgICBjaGFyX3UJYmFzZTsKKyAgICBjaGFyX3UJb3B0OworI2RlZmluZSBUTVBMRU4gNzAKKyAgICBjaGFyX3UJdG1wW1RNUExFTl07CisKKyAgICBpZiAoZmlsbGNoYXIgPT0gMCkKKwlmaWxsY2hhciA9ICcgJzsKKyAgICAvKgorICAgICAqIEdldCBsaW5lICYgY2hlY2sgaWYgZW1wdHkgKGN1cnNvcnBvcyB3aWxsIHNob3cgIjAtMSIpLgorICAgICAqIElmIGludmVyc2lvbiBpcyBwb3NzaWJsZSB3ZSB1c2UgaXQuIEVsc2UgJz0nIGNoYXJhY3RlcnMgYXJlIHVzZWQuCisgICAgICovCisgICAgbGluZWNvbnQgPSBtbF9nZXRfYnVmKHdwLT53X2J1ZmZlciwgd3AtPndfY3Vyc29yLmxudW0sIEZBTFNFKTsKKyAgICBlbXB0eV9saW5lID0gKCpsaW5lY29udCA9PSBOVUwpOworCisgICAgZ3JvdXBkZXB0aCA9IDA7CisgICAgcCA9IG91dDsKKyAgICBjdXJpdGVtID0gMDsKKyAgICBwcmV2Y2hhcl9pc2ZsYWcgPSBUUlVFOworICAgIHByZXZjaGFyX2lzaXRlbSA9IEZBTFNFOworICAgIGZvciAocyA9IGZtdDsgKnM7KQorICAgIHsKKwlpZiAoKnMgIT0gTlVMICYmICpzICE9ICclJykKKwkgICAgcHJldmNoYXJfaXNmbGFnID0gcHJldmNoYXJfaXNpdGVtID0gRkFMU0U7CisKKwkvKgorCSAqIEhhbmRsZSB1cCB0byB0aGUgbmV4dCAnJScgb3IgdGhlIGVuZC4KKwkgKi8KKwl3aGlsZSAoKnMgIT0gTlVMICYmICpzICE9ICclJyAmJiBwICsgMSA8IG91dCArIG91dGxlbikKKwkgICAgKnArKyA9ICpzKys7CisJaWYgKCpzID09IE5VTCB8fCBwICsgMSA+PSBvdXQgKyBvdXRsZW4pCisJICAgIGJyZWFrOworCisJLyoKKwkgKiBIYW5kbGUgb25lICclJyBpdGVtLgorCSAqLworCXMrKzsKKwlpZiAoKnMgPT0gJyUnKQorCXsKKwkgICAgaWYgKHAgKyAxID49IG91dCArIG91dGxlbikKKwkJYnJlYWs7CisJICAgICpwKysgPSAqcysrOworCSAgICBwcmV2Y2hhcl9pc2ZsYWcgPSBwcmV2Y2hhcl9pc2l0ZW0gPSBGQUxTRTsKKwkgICAgY29udGludWU7CisJfQorCWlmICgqcyA9PSBTVExfTUlERExFTUFSSykKKwl7CisJICAgIHMrKzsKKwkgICAgaWYgKGdyb3VwZGVwdGggPiAwKQorCQljb250aW51ZTsKKwkgICAgaXRlbVtjdXJpdGVtXS50eXBlID0gTWlkZGxlOworCSAgICBpdGVtW2N1cml0ZW0rK10uc3RhcnQgPSBwOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKCpzID09IFNUTF9UUlVOQ01BUkspCisJeworCSAgICBzKys7CisJICAgIGl0ZW1bY3VyaXRlbV0udHlwZSA9IFRydW5jOworCSAgICBpdGVtW2N1cml0ZW0rK10uc3RhcnQgPSBwOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKCpzID09ICcpJykKKwl7CisJICAgIHMrKzsKKwkgICAgaWYgKGdyb3VwZGVwdGggPCAxKQorCQljb250aW51ZTsKKwkgICAgZ3JvdXBkZXB0aC0tOworCisJICAgIHQgPSBpdGVtW2dyb3VwaXRlbVtncm91cGRlcHRoXV0uc3RhcnQ7CisJICAgICpwID0gTlVMOworCSAgICBsID0gdmltX3N0cnNpemUodCk7CisJICAgIGlmIChjdXJpdGVtID4gZ3JvdXBpdGVtW2dyb3VwZGVwdGhdICsgMQorCQkgICAgJiYgaXRlbVtncm91cGl0ZW1bZ3JvdXBkZXB0aF1dLm1pbndpZCA9PSAwKQorCSAgICB7CisJCS8qIHJlbW92ZSBncm91cCBpZiBhbGwgaXRlbXMgYXJlIGVtcHR5ICovCisJCWZvciAobiA9IGdyb3VwaXRlbVtncm91cGRlcHRoXSArIDE7IG4gPCBjdXJpdGVtOyBuKyspCisJCSAgICBpZiAoaXRlbVtuXS50eXBlID09IE5vcm1hbCkKKwkJCWJyZWFrOworCQlpZiAobiA9PSBjdXJpdGVtKQorCQl7CisJCSAgICBwID0gdDsKKwkJICAgIGwgPSAwOworCQl9CisJICAgIH0KKwkgICAgaWYgKGwgPiBpdGVtW2dyb3VwaXRlbVtncm91cGRlcHRoXV0ubWF4d2lkKQorCSAgICB7CisJCS8qIHRydW5jYXRlLCByZW1vdmUgbiBieXRlcyBvZiB0ZXh0IGF0IHRoZSBzdGFydCAqLworI2lmZGVmIEZFQVRfTUJZVEUKKwkJaWYgKGhhc19tYnl0ZSkKKwkJeworCQkgICAgLyogRmluZCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkLiAqLworCQkgICAgbiA9IDA7CisJCSAgICB3aGlsZSAobCA+PSBpdGVtW2dyb3VwaXRlbVtncm91cGRlcHRoXV0ubWF4d2lkKQorCQkgICAgeworCQkJbCAtPSBwdHIyY2VsbHModCArIG4pOworCQkJbiArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHQgKyBuKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisjZW5kaWYKKwkJICAgIG4gPSAocCAtIHQpIC0gaXRlbVtncm91cGl0ZW1bZ3JvdXBkZXB0aF1dLm1heHdpZCArIDE7CisKKwkJKnQgPSAnPCc7CisJCW1jaF9tZW1tb3ZlKHQgKyAxLCB0ICsgbiwgcCAtICh0ICsgbikpOworCQlwID0gcCAtIG4gKyAxOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJLyogRmlsbCB1cCBzcGFjZSBsZWZ0IG92ZXIgYnkgaGFsZiBhIGRvdWJsZS13aWRlIGNoYXIuICovCisJCXdoaWxlICgrK2wgPCBpdGVtW2dyb3VwaXRlbVtncm91cGRlcHRoXV0ubWlud2lkKQorCQkgICAgKnArKyA9IGZpbGxjaGFyOworI2VuZGlmCisKKwkJLyogY29ycmVjdCB0aGUgc3RhcnQgb2YgdGhlIGl0ZW1zIGZvciB0aGUgdHJ1bmNhdGlvbiAqLworCQlmb3IgKGwgPSBncm91cGl0ZW1bZ3JvdXBkZXB0aF0gKyAxOyBsIDwgY3VyaXRlbTsgbCsrKQorCQl7CisJCSAgICBpdGVtW2xdLnN0YXJ0IC09IG47CisJCSAgICBpZiAoaXRlbVtsXS5zdGFydCA8IHQpCisJCQlpdGVtW2xdLnN0YXJ0ID0gdDsKKwkJfQorCSAgICB9CisJICAgIGVsc2UgaWYgKGFicyhpdGVtW2dyb3VwaXRlbVtncm91cGRlcHRoXV0ubWlud2lkKSA+IGwpCisJICAgIHsKKwkJLyogZmlsbCAqLworCQluID0gaXRlbVtncm91cGl0ZW1bZ3JvdXBkZXB0aF1dLm1pbndpZDsKKwkJaWYgKG4gPCAwKQorCQl7CisJCSAgICAvKiBmaWxsIGJ5IGFwcGVuZGluZyBjaGFyYWN0ZXJzICovCisJCSAgICBuID0gMCAtIG47CisJCSAgICB3aGlsZSAobCsrIDwgbiAmJiBwICsgMSA8IG91dCArIG91dGxlbikKKwkJCSpwKysgPSBmaWxsY2hhcjsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIC8qIGZpbGwgYnkgaW5zZXJ0aW5nIGNoYXJhY3RlcnMgKi8KKwkJICAgIG1jaF9tZW1tb3ZlKHQgKyBuIC0gbCwgdCwgcCAtIHQpOworCQkgICAgbCA9IG4gLSBsOworCQkgICAgaWYgKHAgKyBsID49IG91dCArIG91dGxlbikKKwkJCWwgPSAob3V0ICsgb3V0bGVuKSAtIHAgLSAxOworCQkgICAgcCArPSBsOworCQkgICAgZm9yIChuID0gZ3JvdXBpdGVtW2dyb3VwZGVwdGhdICsgMTsgbiA8IGN1cml0ZW07IG4rKykKKwkJCWl0ZW1bbl0uc3RhcnQgKz0gbDsKKwkJICAgIGZvciAoIDsgbCA+IDA7IGwtLSkKKwkJCSp0KysgPSBmaWxsY2hhcjsKKwkJfQorCSAgICB9CisJICAgIGNvbnRpbnVlOworCX0KKwltaW53aWQgPSAwOworCW1heHdpZCA9IDk5OTk7CisJemVyb3BhZCA9IEZBTFNFOworCWwgPSAxOworCWlmICgqcyA9PSAnMCcpCisJeworCSAgICBzKys7CisJICAgIHplcm9wYWQgPSBUUlVFOworCX0KKwlpZiAoKnMgPT0gJy0nKQorCXsKKwkgICAgcysrOworCSAgICBsID0gLTE7CisJfQorCWlmIChWSU1fSVNESUdJVCgqcykpCisJeworCSAgICBtaW53aWQgPSAoaW50KWdldGRpZ2l0cygmcyk7CisJICAgIGlmIChtaW53aWQgPCAwKQkvKiBvdmVyZmxvdyAqLworCQltaW53aWQgPSAwOworCX0KKwlpZiAoKnMgPT0gU1RMX0hJR0hMSUdIVCkKKwl7CisJICAgIGl0ZW1bY3VyaXRlbV0udHlwZSA9IEhpZ2hsaWdodDsKKwkgICAgaXRlbVtjdXJpdGVtXS5zdGFydCA9IHA7CisJICAgIGl0ZW1bY3VyaXRlbV0ubWlud2lkID0gbWlud2lkID4gOSA/IDEgOiBtaW53aWQ7CisJICAgIHMrKzsKKwkgICAgY3VyaXRlbSsrOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKCpzID09ICcuJykKKwl7CisJICAgIHMrKzsKKwkgICAgaWYgKFZJTV9JU0RJR0lUKCpzKSkKKwkgICAgeworCQltYXh3aWQgPSAoaW50KWdldGRpZ2l0cygmcyk7CisJCWlmIChtYXh3aWQgPD0gMCkJLyogb3ZlcmZsb3cgKi8KKwkJICAgIG1heHdpZCA9IDUwOworCSAgICB9CisJfQorCW1pbndpZCA9IChtaW53aWQgPiA1MCA/IDUwIDogbWlud2lkKSAqIGw7CisJaWYgKCpzID09ICcoJykKKwl7CisJICAgIGdyb3VwaXRlbVtncm91cGRlcHRoKytdID0gY3VyaXRlbTsKKwkgICAgaXRlbVtjdXJpdGVtXS50eXBlID0gR3JvdXA7CisJICAgIGl0ZW1bY3VyaXRlbV0uc3RhcnQgPSBwOworCSAgICBpdGVtW2N1cml0ZW1dLm1pbndpZCA9IG1pbndpZDsKKwkgICAgaXRlbVtjdXJpdGVtXS5tYXh3aWQgPSBtYXh3aWQ7CisJICAgIHMrKzsKKwkgICAgY3VyaXRlbSsrOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKHZpbV9zdHJjaHIoU1RMX0FMTCwgKnMpID09IE5VTEwpCisJeworCSAgICBzKys7CisJICAgIGNvbnRpbnVlOworCX0KKwlvcHQgPSAqcysrOworCisJLyogT0sgLSBub3cgZm9yIHRoZSByZWFsIHdvcmsgKi8KKwliYXNlID0gJ0QnOworCWl0ZW1pc2ZsYWcgPSBGQUxTRTsKKwlmaWxsYWJsZSA9IFRSVUU7CisJbnVtID0gLTE7CisJc3RyID0gTlVMTDsKKwlzd2l0Y2ggKG9wdCkKKwl7CisJY2FzZSBTVExfRklMRVBBVEg6CisJY2FzZSBTVExfRlVMTFBBVEg6CisJY2FzZSBTVExfRklMRU5BTUU6CisJICAgIGZpbGxhYmxlID0gRkFMU0U7CS8qIGRvbid0IGNoYW5nZSAnICcgdG8gZmlsbGNoYXIgKi8KKwkgICAgaWYgKGJ1Zl9zcG5hbWUod3AtPndfYnVmZmVyKSAhPSBOVUxMKQorCQlTVFJDUFkoTmFtZUJ1ZmYsIGJ1Zl9zcG5hbWUod3AtPndfYnVmZmVyKSk7CisJICAgIGVsc2UKKwkgICAgeworCQl0ID0gKG9wdCA9PSBTVExfRlVMTFBBVEgpID8gd3AtPndfYnVmZmVyLT5iX2ZmbmFtZQorCQkJCQk6IHdwLT53X2J1ZmZlci0+Yl9mbmFtZTsKKwkJaG9tZV9yZXBsYWNlKHdwLT53X2J1ZmZlciwgdCwgTmFtZUJ1ZmYsIE1BWFBBVEhMLCBUUlVFKTsKKwkgICAgfQorCSAgICB0cmFuc19jaGFyYWN0ZXJzKE5hbWVCdWZmLCBNQVhQQVRITCk7CisJICAgIGlmIChvcHQgIT0gU1RMX0ZJTEVOQU1FKQorCQlzdHIgPSBOYW1lQnVmZjsKKwkgICAgZWxzZQorCQlzdHIgPSBnZXR0YWlsKE5hbWVCdWZmKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIFNUTF9WSU1fRVhQUjogLyogJ3snICovCisJICAgIGl0ZW1pc2ZsYWcgPSBUUlVFOworCSAgICB0ID0gcDsKKwkgICAgd2hpbGUgKCpzICE9ICd9JyAmJiAqcyAhPSBOVUwgJiYgcCArIDEgPCBvdXQgKyBvdXRsZW4pCisJCSpwKysgPSAqcysrOworCSAgICBpZiAoKnMgIT0gJ30nKQkvKiBtaXNzaW5nICd9JyBvciBvdXQgb2Ygc3BhY2UgKi8KKwkJYnJlYWs7CisJICAgIHMrKzsKKwkgICAgKnAgPSAwOworCSAgICBwID0gdDsKKworI2lmZGVmIEZFQVRfRVZBTAorCSAgICBzcHJpbnRmKChjaGFyICopdG1wLCAiJWQiLCBjdXJidWYtPmJfZm51bSk7CisJICAgIHNldF9pbnRlcm5hbF9zdHJpbmdfdmFyKChjaGFyX3UgKikiYWN0dWFsX2N1cmJ1ZiIsIHRtcCk7CisKKwkgICAgb19jdXJidWYgPSBjdXJidWY7CisJICAgIG9fY3Vyd2luID0gY3Vyd2luOworCSAgICBjdXJ3aW4gPSB3cDsKKwkgICAgY3VyYnVmID0gd3AtPndfYnVmZmVyOworCisJICAgIHN0ciA9IGV2YWxfdG9fc3RyaW5nX3NhZmUocCwgJnQpOworCisJICAgIGN1cndpbiA9IG9fY3Vyd2luOworCSAgICBjdXJidWYgPSBvX2N1cmJ1ZjsKKwkgICAgZG9fdW5sZXQoKGNoYXJfdSAqKSJnOmFjdHVhbF9jdXJidWYiKTsKKworCSAgICBpZiAoc3RyICE9IE5VTEwgJiYgKnN0ciAhPSAwKQorCSAgICB7CisJCWlmICgqc2tpcGRpZ2l0cyhzdHIpID09IE5VTCkKKwkJeworCQkgICAgbnVtID0gYXRvaSgoY2hhciAqKXN0cik7CisJCSAgICB2aW1fZnJlZShzdHIpOworCQkgICAgc3RyID0gTlVMTDsKKwkJICAgIGl0ZW1pc2ZsYWcgPSBGQUxTRTsKKwkJfQorCSAgICB9CisjZW5kaWYKKwkgICAgYnJlYWs7CisKKwljYXNlIFNUTF9MSU5FOgorCSAgICBudW0gPSAod3AtPndfYnVmZmVyLT5iX21sLm1sX2ZsYWdzICYgTUxfRU1QVFkpCisJCSAgPyAwTCA6IChsb25nKSh3cC0+d19jdXJzb3IubG51bSk7CisJICAgIGJyZWFrOworCisJY2FzZSBTVExfTlVNTElORVM6CisJICAgIG51bSA9IHdwLT53X2J1ZmZlci0+Yl9tbC5tbF9saW5lX2NvdW50OworCSAgICBicmVhazsKKworCWNhc2UgU1RMX0NPTFVNTjoKKwkgICAgbnVtID0gIShTdGF0ZSAmIElOU0VSVCkgJiYgZW1wdHlfbGluZQorCQkgID8gMCA6IChpbnQpd3AtPndfY3Vyc29yLmNvbCArIDE7CisJICAgIGJyZWFrOworCisJY2FzZSBTVExfVklSVENPTDoKKwljYXNlIFNUTF9WSVJUQ09MX0FMVDoKKwkgICAgLyogSW4gbGlzdCBtb2RlIHZpcnRjb2wgbmVlZHMgdG8gYmUgcmVjb21wdXRlZCAqLworCSAgICB2aXJ0Y29sID0gd3AtPndfdmlydGNvbDsKKwkgICAgaWYgKHdwLT53X3BfbGlzdCAmJiBsY3NfdGFiMSA9PSBOVUwpCisJICAgIHsKKwkJd3AtPndfcF9saXN0ID0gRkFMU0U7CisJCWdldHZjb2wod3AsICZ3cC0+d19jdXJzb3IsIE5VTEwsICZ2aXJ0Y29sLCBOVUxMKTsKKwkJd3AtPndfcF9saXN0ID0gVFJVRTsKKwkgICAgfQorCSAgICArK3ZpcnRjb2w7CisJICAgIC8qIERvbid0IGRpc3BsYXkgJVYgaWYgaXQncyB0aGUgc2FtZSBhcyAlYy4gKi8KKwkgICAgaWYgKG9wdCA9PSBTVExfVklSVENPTF9BTFQKKwkJICAgICYmICh2aXJ0Y29sID09IChjb2xucl9UKSghKFN0YXRlICYgSU5TRVJUKSAmJiBlbXB0eV9saW5lCisJCQkgICAgPyAwIDogKGludCl3cC0+d19jdXJzb3IuY29sICsgMSkpKQorCQlicmVhazsKKwkgICAgbnVtID0gKGxvbmcpdmlydGNvbDsKKwkgICAgYnJlYWs7CisKKwljYXNlIFNUTF9QRVJDRU5UQUdFOgorCSAgICBudW0gPSAoaW50KSgoKGxvbmcpd3AtPndfY3Vyc29yLmxudW0gKiAxMDBMKSAvCisJCQkobG9uZyl3cC0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudCk7CisJICAgIGJyZWFrOworCisJY2FzZSBTVExfQUxUUEVSQ0VOVDoKKwkgICAgc3RyID0gdG1wOworCSAgICBnZXRfcmVsX3Bvcyh3cCwgc3RyKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIFNUTF9BUkdMSVNUU1RBVDoKKwkgICAgZmlsbGFibGUgPSBGQUxTRTsKKwkgICAgdG1wWzBdID0gMDsKKwkgICAgaWYgKGFwcGVuZF9hcmdfbnVtYmVyKHdwLCB0bXAsIEZBTFNFLCAoaW50KXNpemVvZih0bXApKSkKKwkJc3RyID0gdG1wOworCSAgICBicmVhazsKKworCWNhc2UgU1RMX0tFWU1BUDoKKwkgICAgZmlsbGFibGUgPSBGQUxTRTsKKwkgICAgaWYgKGdldF9rZXltYXBfc3RyKHdwLCB0bXAsIFRNUExFTikpCisJCXN0ciA9IHRtcDsKKwkgICAgYnJlYWs7CisJY2FzZSBTVExfUEFHRU5VTToKKyNpZmRlZiBGRUFUX1BSSU5URVIKKwkgICAgbnVtID0gZ2V0X3ByaW50ZXJfcGFnZV9udW0oKTsKKyNlbHNlCisJICAgIG51bSA9IDA7CisjZW5kaWYKKwkgICAgYnJlYWs7CisKKwljYXNlIFNUTF9CVUZOTzoKKwkgICAgbnVtID0gd3AtPndfYnVmZmVyLT5iX2ZudW07CisJICAgIGJyZWFrOworCisJY2FzZSBTVExfT0ZGU0VUX1g6CisJICAgIGJhc2UgPSAnWCc7CisJY2FzZSBTVExfT0ZGU0VUOgorI2lmZGVmIEZFQVRfQllURU9GRgorCSAgICBsID0gbWxfZmluZF9saW5lX29yX29mZnNldCh3cC0+d19idWZmZXIsIHdwLT53X2N1cnNvci5sbnVtLCBOVUxMKTsKKwkgICAgbnVtID0gKHdwLT53X2J1ZmZlci0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZKSB8fCBsIDwgMCA/CisJCSAgMEwgOiBsICsgMSArICghKFN0YXRlICYgSU5TRVJUKSAmJiBlbXB0eV9saW5lID8KKwkJCQkwIDogKGludCl3cC0+d19jdXJzb3IuY29sKTsKKyNlbmRpZgorCSAgICBicmVhazsKKworCWNhc2UgU1RMX0JZVEVWQUxfWDoKKwkgICAgYmFzZSA9ICdYJzsKKwljYXNlIFNUTF9CWVRFVkFMOgorCSAgICBpZiAoKChTdGF0ZSAmIElOU0VSVCkgJiYgd3AgPT0gY3Vyd2luKSB8fCBlbXB0eV9saW5lKQorCQludW0gPSAwOworCSAgICBlbHNlCisJICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJCW51bSA9ICgqbWJfcHRyMmNoYXIpKGxpbmVjb250ICsgd3AtPndfY3Vyc29yLmNvbCk7CisjZWxzZQorCQludW0gPSBsaW5lY29udFt3cC0+d19jdXJzb3IuY29sXTsKKyNlbmRpZgorCSAgICB9CisJICAgIGlmIChudW0gPT0gTkwpCisJCW51bSA9IDA7CisJICAgIGVsc2UgaWYgKG51bSA9PSBDQVIgJiYgZ2V0X2ZpbGVmb3JtYXQod3AtPndfYnVmZmVyKSA9PSBFT0xfTUFDKQorCQludW0gPSBOTDsKKwkgICAgYnJlYWs7CisKKwljYXNlIFNUTF9ST0ZMQUc6CisJY2FzZSBTVExfUk9GTEFHX0FMVDoKKwkgICAgaXRlbWlzZmxhZyA9IFRSVUU7CisJICAgIGlmICh3cC0+d19idWZmZXItPmJfcF9ybykKKwkJc3RyID0gKGNoYXJfdSAqKSgob3B0ID09IFNUTF9ST0ZMQUdfQUxUKSA/ICIsUk8iIDogIltST10iKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIFNUTF9IRUxQRkxBRzoKKwljYXNlIFNUTF9IRUxQRkxBR19BTFQ6CisJICAgIGl0ZW1pc2ZsYWcgPSBUUlVFOworCSAgICBpZiAod3AtPndfYnVmZmVyLT5iX2hlbHApCisJCXN0ciA9IChjaGFyX3UgKikoKG9wdCA9PSBTVExfSEVMUEZMQUdfQUxUKSA/ICIsSExQIgorCQkJCQkJCSAgICAgICA6IF8oIltoZWxwXSIpKTsKKwkgICAgYnJlYWs7CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwljYXNlIFNUTF9GSUxFVFlQRToKKwkgICAgaWYgKCp3cC0+d19idWZmZXItPmJfcF9mdCAhPSBOVUwKKwkJICAgICYmIFNUUkxFTih3cC0+d19idWZmZXItPmJfcF9mdCkgPCBUTVBMRU4gLSAzKQorCSAgICB7CisJCXNwcmludGYoKGNoYXIgKil0bXAsICJbJXNdIiwgd3AtPndfYnVmZmVyLT5iX3BfZnQpOworCQlzdHIgPSB0bXA7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIFNUTF9GSUxFVFlQRV9BTFQ6CisJICAgIGl0ZW1pc2ZsYWcgPSBUUlVFOworCSAgICBpZiAoKndwLT53X2J1ZmZlci0+Yl9wX2Z0ICE9IE5VTAorCQkgICAgJiYgU1RSTEVOKHdwLT53X2J1ZmZlci0+Yl9wX2Z0KSA8IFRNUExFTiAtIDIpCisJICAgIHsKKwkJc3ByaW50ZigoY2hhciAqKXRtcCwgIiwlcyIsIHdwLT53X2J1ZmZlci0+Yl9wX2Z0KTsKKwkJZm9yICh0ID0gdG1wOyAqdCAhPSAwOyB0KyspCisJCSAgICAqdCA9IFRPVVBQRVJfTE9DKCp0KTsKKwkJc3RyID0gdG1wOworCSAgICB9CisJICAgIGJyZWFrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCWNhc2UgU1RMX1BSRVZJRVdGTEFHOgorCWNhc2UgU1RMX1BSRVZJRVdGTEFHX0FMVDoKKwkgICAgaXRlbWlzZmxhZyA9IFRSVUU7CisJICAgIGlmICh3cC0+d19wX3B2dykKKwkJc3RyID0gKGNoYXJfdSAqKSgob3B0ID09IFNUTF9QUkVWSUVXRkxBR19BTFQpID8gIixQUlYiCisJCQkJCQkJICAgIDogXygiW1ByZXZpZXddIikpOworCSAgICBicmVhazsKKyNlbmRpZgorCisJY2FzZSBTVExfTU9ESUZJRUQ6CisJY2FzZSBTVExfTU9ESUZJRURfQUxUOgorCSAgICBpdGVtaXNmbGFnID0gVFJVRTsKKwkgICAgc3dpdGNoICgob3B0ID09IFNUTF9NT0RJRklFRF9BTFQpCisJCSAgICArIGJ1ZklzQ2hhbmdlZCh3cC0+d19idWZmZXIpICogMgorCQkgICAgKyAoIXdwLT53X2J1ZmZlci0+Yl9wX21hKSAqIDQpCisJICAgIHsKKwkJY2FzZSAyOiBzdHIgPSAoY2hhcl91ICopIlsrXSI7IGJyZWFrOworCQljYXNlIDM6IHN0ciA9IChjaGFyX3UgKikiLCsiOyBicmVhazsKKwkJY2FzZSA0OiBzdHIgPSAoY2hhcl91ICopIlstXSI7IGJyZWFrOworCQljYXNlIDU6IHN0ciA9IChjaGFyX3UgKikiLC0iOyBicmVhazsKKwkJY2FzZSA2OiBzdHIgPSAoY2hhcl91ICopIlsrLV0iOyBicmVhazsKKwkJY2FzZSA3OiBzdHIgPSAoY2hhcl91ICopIiwrLSI7IGJyZWFrOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKworCWl0ZW1bY3VyaXRlbV0uc3RhcnQgPSBwOworCWl0ZW1bY3VyaXRlbV0udHlwZSA9IE5vcm1hbDsKKwlpZiAoc3RyICE9IE5VTEwgJiYgKnN0cikKKwl7CisJICAgIHQgPSBzdHI7CisJICAgIGlmIChpdGVtaXNmbGFnKQorCSAgICB7CisJCWlmICgodFswXSAmJiB0WzFdKQorCQkJJiYgKCghcHJldmNoYXJfaXNpdGVtICYmICp0ID09ICcsJykKKwkJCSAgICAgIHx8IChwcmV2Y2hhcl9pc2ZsYWcgJiYgKnQgPT0gJyAnKSkpCisJCSAgICB0Kys7CisJCXByZXZjaGFyX2lzZmxhZyA9IFRSVUU7CisJICAgIH0KKwkgICAgbCA9IHZpbV9zdHJzaXplKHQpOworCSAgICBpZiAobCA+IDApCisJCXByZXZjaGFyX2lzaXRlbSA9IFRSVUU7CisJICAgIGlmIChsID4gbWF4d2lkKQorCSAgICB7CisJCXdoaWxlIChsID49IG1heHdpZCkKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBpZiAoaGFzX21ieXRlKQorCQkgICAgeworCQkJbCAtPSBwdHIyY2VsbHModCk7CisJCQl0ICs9ICgqbWJfcHRyMmxlbl9jaGVjaykodCk7CisJCSAgICB9CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCWwgLT0gYnl0ZTJjZWxscygqdCsrKTsKKwkJaWYgKHAgKyAxID49IG91dCArIG91dGxlbikKKwkJICAgIGJyZWFrOworCQkqcCsrID0gJzwnOworCSAgICB9CisJICAgIGlmIChtaW53aWQgPiAwKQorCSAgICB7CisJCWZvciAoOyBsIDwgbWlud2lkICYmIHAgKyAxIDwgb3V0ICsgb3V0bGVuOyBsKyspCisJCXsKKwkJICAgIC8qIERvbid0IHB1dCBhICItIiBpbiBmcm9udCBvZiBhIGRpZ2l0LiAqLworCQkgICAgaWYgKGwgKyAxID09IG1pbndpZCAmJiBmaWxsY2hhciA9PSAnLScgJiYgVklNX0lTRElHSVQoKnQpKQorCQkJKnArKyA9ICcgJzsKKwkJICAgIGVsc2UKKwkJCSpwKysgPSBmaWxsY2hhcjsKKwkJfQorCQltaW53aWQgPSAwOworCSAgICB9CisJICAgIGVsc2UKKwkJbWlud2lkICo9IC0xOworCSAgICB3aGlsZSAoKnQgJiYgcCArIDEgPCBvdXQgKyBvdXRsZW4pCisJICAgIHsKKwkJKnArKyA9ICp0Kys7CisJCS8qIENoYW5nZSBhIHNwYWNlIGJ5IGZpbGxjaGFyLCB1bmxlc3MgZmlsbGNoYXIgaXMgJy0nIGFuZCBhCisJCSAqIGRpZ2l0IGZvbGxvd3MuICovCisJCWlmIChmaWxsYWJsZSAmJiBwWy0xXSA9PSAnICcKKwkJCQkgICAgICYmICghVklNX0lTRElHSVQoKnQpIHx8IGZpbGxjaGFyICE9ICctJykpCisJCSAgICBwWy0xXSA9IGZpbGxjaGFyOworCSAgICB9CisJICAgIGZvciAoOyBsIDwgbWlud2lkICYmIHAgKyAxIDwgb3V0ICsgb3V0bGVuOyBsKyspCisJCSpwKysgPSBmaWxsY2hhcjsKKwl9CisJZWxzZSBpZiAobnVtID49IDApCisJeworCSAgICBpbnQgbmJhc2UgPSAoYmFzZSA9PSAnRCcgPyAxMCA6IChiYXNlID09ICdPJyA/IDggOiAxNikpOworCSAgICBjaGFyX3UgbnN0clsyMF07CisKKwkgICAgaWYgKHAgKyAyMCA+PSBvdXQgKyBvdXRsZW4pCisJCWJyZWFrOwkJLyogbm90IHN1ZmZpY2llbnQgc3BhY2UgKi8KKwkgICAgcHJldmNoYXJfaXNpdGVtID0gVFJVRTsKKwkgICAgdCA9IG5zdHI7CisJICAgIGlmIChvcHQgPT0gU1RMX1ZJUlRDT0xfQUxUKQorCSAgICB7CisJCSp0KysgPSAnLSc7CisJCW1pbndpZC0tOworCSAgICB9CisJICAgICp0KysgPSAnJSc7CisJICAgIGlmICh6ZXJvcGFkKQorCQkqdCsrID0gJzAnOworCSAgICAqdCsrID0gJyonOworCSAgICAqdCsrID0gbmJhc2UgPT0gMTYgPyBiYXNlIDogKG5iYXNlID09IDggPyAnbycgOiAnZCcpOworCSAgICAqdCA9IDA7CisKKwkgICAgZm9yIChuID0gbnVtLCBsID0gMTsgbiA+PSBuYmFzZTsgbiAvPSBuYmFzZSkKKwkJbCsrOworCSAgICBpZiAob3B0ID09IFNUTF9WSVJUQ09MX0FMVCkKKwkJbCsrOworCSAgICBpZiAobCA+IG1heHdpZCkKKwkgICAgeworCQlsICs9IDI7CisJCW4gPSBsIC0gbWF4d2lkOworCQl3aGlsZSAobC0tID4gbWF4d2lkKQorCQkgICAgbnVtIC89IG5iYXNlOworCQkqdCsrID0gJz4nOworCQkqdCsrID0gJyUnOworCQkqdCA9IHRbLTNdOworCQkqKyt0ID0gMDsKKwkJc3ByaW50ZigoY2hhciAqKXAsIChjaGFyICopbnN0ciwgMCwgbnVtLCBuKTsKKwkgICAgfQorCSAgICBlbHNlCisJCXNwcmludGYoKGNoYXIgKilwLCAoY2hhciAqKW5zdHIsIG1pbndpZCwgbnVtKTsKKwkgICAgcCArPSBTVFJMRU4ocCk7CisJfQorCWVsc2UKKwkgICAgaXRlbVtjdXJpdGVtXS50eXBlID0gRW1wdHk7CisKKwlpZiAob3B0ID09IFNUTF9WSU1fRVhQUikKKwkgICAgdmltX2ZyZWUoc3RyKTsKKworCWlmIChudW0gPj0gMCB8fCAoIWl0ZW1pc2ZsYWcgJiYgc3RyICYmICpzdHIpKQorCSAgICBwcmV2Y2hhcl9pc2ZsYWcgPSBGQUxTRTsJICAgIC8qIEl0ZW0gbm90IE5VTEwsIGJ1dCBub3QgYSBmbGFnICovCisJY3VyaXRlbSsrOworICAgIH0KKyAgICAqcCA9IE5VTDsKKyAgICBpdGVtY250ID0gY3VyaXRlbTsKKworICAgIHdpZHRoID0gdmltX3N0cnNpemUob3V0KTsKKyAgICBpZiAobWF4d2lkdGggPiAwICYmIHdpZHRoID4gbWF4d2lkdGgpCisgICAgeworCS8qIFJlc3VsdCBpcyB0b28gbG9uZywgbXVzdCB0cnVuY3RhdGUgc29tZXdoZXJlLiAqLworCWwgPSAwOworCWlmIChpdGVtY250ID09IDApCisJICAgIHMgPSBvdXQ7CisJZWxzZQorCXsKKwkgICAgZm9yICggOyBsIDwgaXRlbWNudDsgbCsrKQorCQlpZiAoaXRlbVtsXS50eXBlID09IFRydW5jKQorCQl7CisJCSAgICAvKiBUcnVuY2F0ZSBhdCAlPCBpdGVtLiAqLworCQkgICAgcyA9IGl0ZW1bbF0uc3RhcnQ7CisJCSAgICBicmVhazsKKwkJfQorCSAgICBpZiAobCA9PSBpdGVtY250KQorCSAgICB7CisJCS8qIE5vICU8IGl0ZW0sIHRydW5jYXRlIGZpcnN0IGl0ZW0uICovCisJCXMgPSBpdGVtWzBdLnN0YXJ0OworCQlsID0gMDsKKwkgICAgfQorCX0KKworCWlmICh3aWR0aCAtIHZpbV9zdHJzaXplKHMpID49IG1heHdpZHRoKQorCXsKKwkgICAgLyogVHJ1bmNhdGlvbiBtYXJrIGlzIGJleW9uZCBtYXggbGVuZ3RoICovCisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCSAgICB7CisJCXMgPSBvdXQ7CisJCXdpZHRoID0gMDsKKwkJZm9yICg7OykKKwkJeworCQkgICAgd2lkdGggKz0gcHRyMmNlbGxzKHMpOworCQkgICAgaWYgKHdpZHRoID49IG1heHdpZHRoKQorCQkJYnJlYWs7CisJCSAgICBzICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocyk7CisJCX0KKwkJLyogRmlsbCB1cCBmb3IgaGFsZiBhIGRvdWJsZS13aWRlIGNoYXJhY3Rlci4gKi8KKwkJd2hpbGUgKCsrd2lkdGggPCBtYXh3aWR0aCkKKwkJICAgICpzKysgPSBmaWxsY2hhcjsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJcyA9IG91dCArIG1heHdpZHRoIC0gMTsKKwkgICAgZm9yIChsID0gMDsgbCA8IGl0ZW1jbnQ7IGwrKykKKwkJaWYgKGl0ZW1bbF0uc3RhcnQgPiBzKQorCQkgICAgYnJlYWs7CisJICAgIGl0ZW1jbnQgPSBsOworCSAgICAqcysrID0gJz4nOworCSAgICAqcyA9IDA7CisJfQorCWVsc2UKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCSAgICB7CisJCW4gPSAwOworCQl3aGlsZSAod2lkdGggPj0gbWF4d2lkdGgpCisJCXsKKwkJICAgIHdpZHRoIC09IHB0cjJjZWxscyhzICsgbik7CisJCSAgICBuICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocyArIG4pOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJCW4gPSB3aWR0aCAtIG1heHdpZHRoICsgMTsKKwkgICAgcCA9IHMgKyBuOworCSAgICBtY2hfbWVtbW92ZShzICsgMSwgcCwgU1RSTEVOKHApICsgMSk7CisJICAgICpzID0gJzwnOworCisJICAgIC8qIEZpbGwgdXAgZm9yIGhhbGYgYSBkb3VibGUtd2lkZSBjaGFyYWN0ZXIuICovCisJICAgIHdoaWxlICgrK3dpZHRoIDwgbWF4d2lkdGgpCisJICAgIHsKKwkJcyA9IHMgKyBTVFJMRU4ocyk7CisJCSpzKysgPSBmaWxsY2hhcjsKKwkJKnMgPSBOVUw7CisJICAgIH0KKworCSAgICAtLW47CS8qIGNvdW50IHRoZSAnPCcgKi8KKwkgICAgZm9yICg7IGwgPCBpdGVtY250OyBsKyspCisJICAgIHsKKwkJaWYgKGl0ZW1bbF0uc3RhcnQgLSBuID49IHMpCisJCSAgICBpdGVtW2xdLnN0YXJ0IC09IG47CisJCWVsc2UKKwkJICAgIGl0ZW1bbF0uc3RhcnQgPSBzOworCSAgICB9CisJfQorCXdpZHRoID0gbWF4d2lkdGg7CisgICAgfQorICAgIGVsc2UgaWYgKHdpZHRoIDwgbWF4d2lkdGggJiYgU1RSTEVOKG91dCkgKyBtYXh3aWR0aCAtIHdpZHRoICsgMSA8IG91dGxlbikKKyAgICB7CisJLyogQXBwbHkgU1RMX01JRERMRSBpZiBhbnkgKi8KKwlmb3IgKGwgPSAwOyBsIDwgaXRlbWNudDsgbCsrKQorCSAgICBpZiAoaXRlbVtsXS50eXBlID09IE1pZGRsZSkKKwkJYnJlYWs7CisJaWYgKGwgPCBpdGVtY250KQorCXsKKwkgICAgcCA9IGl0ZW1bbF0uc3RhcnQgKyBtYXh3aWR0aCAtIHdpZHRoOworCSAgICBtY2hfbWVtbW92ZShwLCBpdGVtW2xdLnN0YXJ0LCBTVFJMRU4oaXRlbVtsXS5zdGFydCkgKyAxKTsKKwkgICAgZm9yIChzID0gaXRlbVtsXS5zdGFydDsgcyA8IHA7IHMrKykKKwkJKnMgPSBmaWxsY2hhcjsKKwkgICAgZm9yIChsKys7IGwgPCBpdGVtY250OyBsKyspCisJCWl0ZW1bbF0uc3RhcnQgKz0gbWF4d2lkdGggLSB3aWR0aDsKKwkgICAgd2lkdGggPSBtYXh3aWR0aDsKKwl9CisgICAgfQorCisgICAgaWYgKGhsICE9IE5VTEwpCisgICAgeworCWZvciAobCA9IDA7IGwgPCBpdGVtY250OyBsKyspCisJeworCSAgICBpZiAoaXRlbVtsXS50eXBlID09IEhpZ2hsaWdodCkKKwkgICAgeworCQlobC0+c3RhcnQgPSBpdGVtW2xdLnN0YXJ0OworCQlobC0+dXNlcmhsID0gaXRlbVtsXS5taW53aWQ7CisJCWhsKys7CisJICAgIH0KKwl9CisJaGwtPnN0YXJ0ID0gTlVMTDsKKwlobC0+dXNlcmhsID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gd2lkdGg7Cit9CisjZW5kaWYgLyogRkVBVF9TVExfT1BUICovCisKKyNpZiBkZWZpbmVkKEZFQVRfU1RMX09QVCkgfHwgZGVmaW5lZChGRUFUX0NNRExfSU5GTykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBHZXQgcmVsYXRpdmUgY3Vyc29yIHBvc2l0aW9uIGluIHdpbmRvdywgaW4gdGhlIGZvcm0gOTklLCB1c2luZyAiVG9wIiwgIkJvdCIKKyAqIG9yICJBbGwiIHdoZW4gYXBwcm9wcmlhdGUuCisgKi8KKyAgICB2b2lkCitnZXRfcmVsX3Bvcyh3cCwgc3RyKQorICAgIHdpbl9UCSp3cDsKKyAgICBjaGFyX3UJKnN0cjsKK3sKKyAgICBsb25nCWFib3ZlOyAvKiBudW1iZXIgb2YgbGluZXMgYWJvdmUgd2luZG93ICovCisgICAgbG9uZwliZWxvdzsgLyogbnVtYmVyIG9mIGxpbmVzIGJlbG93IHdpbmRvdyAqLworCisgICAgYWJvdmUgPSB3cC0+d190b3BsaW5lIC0gMTsKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBhYm92ZSArPSBkaWZmX2NoZWNrX2ZpbGwod3AsIHdwLT53X3RvcGxpbmUpIC0gd3AtPndfdG9wZmlsbDsKKyNlbmRpZgorICAgIGJlbG93ID0gd3AtPndfYnVmZmVyLT5iX21sLm1sX2xpbmVfY291bnQgLSB3cC0+d19ib3RsaW5lICsgMTsKKyAgICBpZiAoYmVsb3cgPD0gMCkKKwlTVFJDUFkoc3RyLCBhYm92ZSA9PSAwID8gXygiQWxsIikgOiBfKCJCb3QiKSk7CisgICAgZWxzZSBpZiAoYWJvdmUgPD0gMCkKKwlTVFJDUFkoc3RyLCBfKCJUb3AiKSk7CisgICAgZWxzZQorCXNwcmludGYoKGNoYXIgKilzdHIsICIlMmQlJSIsIGFib3ZlID4gMTAwMDAwMEwKKwkJCQkgICAgPyAoaW50KShhYm92ZSAvICgoYWJvdmUgKyBiZWxvdykgLyAxMDBMKSkKKwkJCQkgICAgOiAoaW50KShhYm92ZSAqIDEwMEwgLyAoYWJvdmUgKyBiZWxvdykpKTsKK30KKyNlbmRpZgorCisvKgorICogQXBwZW5kIChmaWxlIDIgb2YgOCkgdG8gJ2J1ZicsIGlmIGVkaXRpbmcgbW9yZSB0aGFuIG9uZSBmaWxlLgorICogUmV0dXJuIFRSVUUgaWYgaXQgd2FzIGFwcGVuZGVkLgorICovCisgICAgaW50CithcHBlbmRfYXJnX251bWJlcih3cCwgYnVmLCBhZGRfZmlsZSwgbWF4bGVuKQorICAgIHdpbl9UCSp3cDsKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCWFkZF9maWxlOwkvKiBBZGQgImZpbGUiIGJlZm9yZSB0aGUgYXJnIG51bWJlciAqLworICAgIGludAkJbWF4bGVuOwkJLyogbWF4aW11bSBuciBvZiBjaGFycyBpbiBidWYgb3IgemVybyovCit7CisgICAgY2hhcl91CSpwOworCisgICAgaWYgKEFSR0NPVU5UIDw9IDEpCQkvKiBub3RoaW5nIHRvIGRvICovCisJcmV0dXJuIEZBTFNFOworCisgICAgcCA9IGJ1ZiArIFNUUkxFTihidWYpOwkJLyogZ28gdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyICovCisgICAgaWYgKG1heGxlbiAmJiBwIC0gYnVmICsgMzUgPj0gbWF4bGVuKSAvKiBnZXR0aW5nIHRvbyBsb25nICovCisJcmV0dXJuIEZBTFNFOworICAgICpwKysgPSAnICc7CisgICAgKnArKyA9ICcoJzsKKyAgICBpZiAoYWRkX2ZpbGUpCisgICAgeworCVNUUkNQWShwLCAiZmlsZSAiKTsKKwlwICs9IDU7CisgICAgfQorICAgIHNwcmludGYoKGNoYXIgKilwLCB3cC0+d19hcmdfaWR4X2ludmFsaWQgPyAiKCVkKSBvZiAlZCkiCisJCQkJICA6ICIlZCBvZiAlZCkiLCB3cC0+d19hcmdfaWR4ICsgMSwgQVJHQ09VTlQpOworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICogSWYgZm5hbWUgaXMgbm90IGEgZnVsbCBwYXRoLCBtYWtlIGl0IGEgZnVsbCBwYXRoLgorICogUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkgKE5VTEwgZm9yIGZhaWx1cmUpLgorICovCisgICAgY2hhcl91ICAqCitmaXhfZm5hbWUoZm5hbWUpCisgICAgY2hhcl91ICAqZm5hbWU7Cit7CisgICAgLyoKKyAgICAgKiBGb3JjZSBleHBhbmRpbmcgdGhlIHBhdGggYWx3YXlzIGZvciBVbml4LCBiZWNhdXNlIHN5bWJvbGljIGxpbmtzIG1heQorICAgICAqIG1lc3MgdXAgdGhlIGZ1bGwgcGF0aCBuYW1lLCBldmVuIHRob3VnaCBpdCBzdGFydHMgd2l0aCBhICcvJy4KKyAgICAgKiBBbHNvIGV4cGFuZCB3aGVuIHRoZXJlIGlzICIuLiIgaW4gdGhlIGZpbGUgbmFtZSwgdHJ5IHRvIHJlbW92ZSBpdCwKKyAgICAgKiBiZWNhdXNlICJjOi9zcmMvLi4vUkVBRE1FIiBpcyBlcXVhbCB0byAiYzovUkVBRE1FIi4KKyAgICAgKiBGb3IgTVMtV2luZG93cyBhbHNvIGV4cGFuZCBuYW1lcyBsaWtlICJsb25nbmF+MSIgdG8gImxvbmduYW1lIi4KKyAgICAgKi8KKyNpZmRlZiBVTklYCisgICAgcmV0dXJuIEZ1bGxOYW1lX3NhdmUoZm5hbWUsIFRSVUUpOworI2Vsc2UKKyAgICBpZiAoIXZpbV9pc0Fic05hbWUoZm5hbWUpIHx8IHN0cnN0cigoY2hhciAqKWZuYW1lLCAiLi4iKSAhPSBOVUxMCisjaWYgZGVmaW5lZChNU1dJTikgfHwgZGVmaW5lZChESkdQUCkKKwkgICAgfHwgdmltX3N0cmNocihmbmFtZSwgJ34nKSAhPSBOVUxMCisjZW5kaWYKKwkgICAgKQorCXJldHVybiBGdWxsTmFtZV9zYXZlKGZuYW1lLCBGQUxTRSk7CisKKyAgICBmbmFtZSA9IHZpbV9zdHJzYXZlKGZuYW1lKTsKKworI2lmZGVmIFVTRV9GTkFNRV9DQVNFCisjIGlmZGVmIFVTRV9MT05HX0ZOQU1FCisgICAgaWYgKFVTRV9MT05HX0ZOQU1FKQorIyBlbmRpZgorICAgIHsKKwlpZiAoZm5hbWUgIT0gTlVMTCkKKwkgICAgZm5hbWVfY2FzZShmbmFtZSwgMCk7CS8qIHNldCBjb3JyZWN0IGNhc2UgZm9yIGZpbGUgbmFtZSAqLworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGZuYW1lOworI2VuZGlmCit9CisKKy8qCisgKiBNYWtlICJmZm5hbWUiIGEgZnVsbCBmaWxlIG5hbWUsIHNldCAic2ZuYW1lIiB0byAiZmZuYW1lIiBpZiBub3QgTlVMTC4KKyAqICJmZm5hbWUiIGJlY29tZXMgYSBwb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkgKG9yIE5VTEwpLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitmbmFtZV9leHBhbmQoYnVmLCBmZm5hbWUsIHNmbmFtZSkKKyAgICBidWZfVAkqYnVmOworICAgIGNoYXJfdQkqKmZmbmFtZTsKKyAgICBjaGFyX3UJKipzZm5hbWU7Cit7CisgICAgaWYgKCpmZm5hbWUgPT0gTlVMTCkJLyogaWYgbm8gZmlsZSBuYW1lIGdpdmVuLCBub3RoaW5nIHRvIGRvICovCisJcmV0dXJuOworICAgIGlmICgqc2ZuYW1lID09IE5VTEwpCS8qIGlmIG5vIHNob3J0IGZpbGUgbmFtZSBnaXZlbiwgdXNlIGZmbmFtZSAqLworCSpzZm5hbWUgPSAqZmZuYW1lOworICAgICpmZm5hbWUgPSBmaXhfZm5hbWUoKmZmbmFtZSk7ICAgLyogZXhwYW5kIHRvIGZ1bGwgcGF0aCAqLworCisjaWZkZWYgRkVBVF9TSE9SVENVVAorICAgIGlmICghYnVmLT5iX3BfYmluKQorICAgIHsKKwljaGFyX3UgICpyZm5hbWUgPSBOVUxMOworCisJLyogSWYgdGhlIGZpbGUgbmFtZSBpcyBhIHNob3J0Y3V0IGZpbGUsIHVzZSB0aGUgZmlsZSBpdCBsaW5rcyB0by4gKi8KKwlyZm5hbWUgPSBtY2hfcmVzb2x2ZV9zaG9ydGN1dCgqZmZuYW1lKTsKKwlpZiAocmZuYW1lKQorCXsKKwkgICAgdmltX2ZyZWUoKmZmbmFtZSk7CisJICAgICpmZm5hbWUgPSByZm5hbWU7CisJICAgICpzZm5hbWUgPSByZm5hbWU7CisJfQorICAgIH0KKyNlbmRpZgorfQorCisvKgorICogR2V0IHRoZSBmaWxlIG5hbWUgZm9yIGFuIGFyZ3VtZW50IGxpc3QgZW50cnkuCisgKi8KKyAgICBjaGFyX3UgKgorYWxpc3RfbmFtZShhZXApCisgICAgYWVudHJ5X1QJKmFlcDsKK3sKKyAgICBidWZfVAkqYnA7CisKKyAgICAvKiBVc2UgdGhlIG5hbWUgZnJvbSB0aGUgYXNzb2NpYXRlZCBidWZmZXIgaWYgaXQgZXhpc3RzLiAqLworICAgIGJwID0gYnVmbGlzdF9maW5kbnIoYWVwLT5hZV9mbnVtKTsKKyAgICBpZiAoYnAgPT0gTlVMTCkKKwlyZXR1cm4gYWVwLT5hZV9mbmFtZTsKKyAgICByZXR1cm4gYnAtPmJfZm5hbWU7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBkb19hcmdfYWxsKCk6IE9wZW4gdXAgdG8gJ2NvdW50JyB3aW5kb3dzLCBvbmUgZm9yIGVhY2ggYXJndW1lbnQuCisgKi8KKyAgICB2b2lkCitkb19hcmdfYWxsKGNvdW50LCBmb3JjZWl0KQorICAgIGludAljb3VudDsKKyAgICBpbnQJZm9yY2VpdDsJCS8qIGhpZGUgYnVmZmVycyBpbiBjdXJyZW50IHdpbmRvd3MgKi8KK3sKKyAgICBpbnQJCWk7CisgICAgd2luX1QJKndwLCAqd3BuZXh0OworICAgIGNoYXJfdQkqb3BlbmVkOwkvKiBhcnJheSBvZiBmbGFncyBmb3Igd2hpY2ggYXJncyBhcmUgb3BlbiAqLworICAgIGludAkJb3BlbmVkX2xlbjsJLyogbGVuZ2h0IG9mIG9wZW5lZFtdICovCisgICAgaW50CQl1c2VfZmlyc3R3aW4gPSBGQUxTRTsJLyogdXNlIGZpcnN0IHdpbmRvdyBmb3IgYXJnbGlzdCAqLworICAgIGludAkJc3BsaXRfcmV0ID0gT0s7CisgICAgaW50CQlwX2VhX3NhdmU7CisgICAgYWxpc3RfVAkqYWxpc3Q7CQkvKiBhcmd1bWVudCBsaXN0IHRvIGJlIHVzZWQgKi8KKyAgICBidWZfVAkqYnVmOworCisgICAgaWYgKEFSR0NPVU5UIDw9IDApCisgICAgeworCS8qIERvbid0IGdpdmUgYW4gZXJyb3IgbWVzc2FnZS4gIFdlIGRvbid0IHdhbnQgaXQgd2hlbiB0aGUgIjphbGwiCisJICogY29tbWFuZCBpcyBpbiB0aGUgLnZpbXJjLiAqLworCXJldHVybjsKKyAgICB9CisgICAgc2V0cGNtYXJrKCk7CisKKyAgICBvcGVuZWRfbGVuID0gQVJHQ09VTlQ7CisgICAgb3BlbmVkID0gYWxsb2NfY2xlYXIoKHVuc2lnbmVkKW9wZW5lZF9sZW4pOworICAgIGlmIChvcGVuZWQgPT0gTlVMTCkKKwlyZXR1cm47CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIG5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKworICAgIC8qCisgICAgICogVHJ5IGNsb3NpbmcgYWxsIHdpbmRvd3MgdGhhdCBhcmUgbm90IGluIHRoZSBhcmd1bWVudCBsaXN0LgorICAgICAqIEFsc28gY2xvc2Ugd2luZG93cyB0aGF0IGFyZSBub3QgZnVsbCB3aWR0aDsKKyAgICAgKiBXaGVuICdoaWRkZW4nIG9yICJmb3JjZWl0IiBzZXQgdGhlIGJ1ZmZlciBiZWNvbWVzIGhpZGRlbi4KKyAgICAgKiBXaW5kb3dzIHRoYXQgaGF2ZSBhIGNoYW5nZWQgYnVmZmVyIGFuZCBjYW4ndCBiZSBoaWRkZW4gd29uJ3QgYmUgY2xvc2VkLgorICAgICAqLworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gTlVMTDsgd3AgPSB3cG5leHQpCisgICAgeworCXdwbmV4dCA9IHdwLT53X25leHQ7CisJYnVmID0gd3AtPndfYnVmZmVyOworCWlmIChidWYtPmJfZmZuYW1lID09IE5VTEwKKwkJfHwgYnVmLT5iX253aW5kb3dzID4gMQorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJCXx8IHdwLT53X3dpZHRoICE9IENvbHVtbnMKKyNlbmRpZgorCQkpCisJICAgIGkgPSBBUkdDT1VOVDsKKwllbHNlCisJeworCSAgICAvKiBjaGVjayBpZiB0aGUgYnVmZmVyIGluIHRoaXMgd2luZG93IGlzIGluIHRoZSBhcmdsaXN0ICovCisJICAgIGZvciAoaSA9IDA7IGkgPCBBUkdDT1VOVDsgKytpKQorCSAgICB7CisJCWlmIChBUkdMSVNUW2ldLmFlX2ZudW0gPT0gYnVmLT5iX2ZudW0KKwkJCXx8IGZ1bGxwYXRoY21wKGFsaXN0X25hbWUoJkFSR0xJU1RbaV0pLAorCQkJCQkgICAgICBidWYtPmJfZmZuYW1lLCBUUlVFKSAmIEZQQ19TQU1FKQorCQl7CisJCSAgICBpZiAoaSA8IG9wZW5lZF9sZW4pCisJCQlvcGVuZWRbaV0gPSBUUlVFOworCQkgICAgaWYgKHdwLT53X2FsaXN0ICE9IGN1cndpbi0+d19hbGlzdCkKKwkJICAgIHsKKwkJCS8qIFVzZSB0aGUgY3VycmVudCBhcmd1bWVudCBsaXN0IGZvciBhbGwgd2luZG93cworCQkJICogY29udGFpbmluZyBhIGZpbGUgZnJvbSBpdC4gKi8KKwkJCWFsaXN0X3VubGluayh3cC0+d19hbGlzdCk7CisJCQl3cC0+d19hbGlzdCA9IGN1cndpbi0+d19hbGlzdDsKKwkJCSsrd3AtPndfYWxpc3QtPmFsX3JlZmNvdW50OworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKwl3cC0+d19hcmdfaWR4ID0gaTsKKworCWlmIChpID09IEFSR0NPVU5UKQkJLyogY2xvc2UgdGhpcyB3aW5kb3cgKi8KKwl7CisJICAgIGlmIChQX0hJRChidWYpIHx8IGZvcmNlaXQgfHwgYnVmLT5iX253aW5kb3dzID4gMQorCQkJCQkJCXx8ICFidWZJc0NoYW5nZWQoYnVmKSkKKwkgICAgeworCQkvKiBJZiB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkLCBhbmQgd2Ugd291bGQgbGlrZSB0byBoaWRlIGl0LAorCQkgKiB0cnkgYXV0b3dyaXRpbmcuICovCisJCWlmICghUF9ISUQoYnVmKSAmJiBidWYtPmJfbndpbmRvd3MgPD0gMSAmJiBidWZJc0NoYW5nZWQoYnVmKSkKKwkJeworCQkgICAgKHZvaWQpYXV0b3dyaXRlKGJ1ZiwgRkFMU0UpOworI2lmZGVmIEZFQVRfQVVUT0NNRAorCQkgICAgLyogY2hlY2sgaWYgYXV0b2NvbW1hbmRzIHJlbW92ZWQgdGhlIHdpbmRvdyAqLworCQkgICAgaWYgKCF3aW5fdmFsaWQod3ApIHx8ICFidWZfdmFsaWQoYnVmKSkKKwkJICAgIHsKKwkJCXdwbmV4dCA9IGZpcnN0d2luOwkvKiBzdGFydCBhbGwgb3Zlci4uLiAqLworCQkJY29udGludWU7CisJCSAgICB9CisjZW5kaWYKKwkJfQorI2lmZGVmIEZFQVRfV0lORE9XUworCQlpZiAoZmlyc3R3aW4gPT0gbGFzdHdpbikJLyogY2FuJ3QgY2xvc2UgbGFzdCB3aW5kb3cgKi8KKyNlbmRpZgorCQkgICAgdXNlX2ZpcnN0d2luID0gVFJVRTsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkJZWxzZQorCQl7CisJCSAgICB3aW5fY2xvc2Uod3AsICFQX0hJRChidWYpICYmICFidWZJc0NoYW5nZWQoYnVmKSk7CisjIGlmZGVmIEZFQVRfQVVUT0NNRAorCQkgICAgLyogY2hlY2sgaWYgYXV0b2NvbW1hbmRzIHJlbW92ZWQgdGhlIG5leHQgd2luZG93ICovCisJCSAgICBpZiAoIXdpbl92YWxpZCh3cG5leHQpKQorCQkJd3BuZXh0ID0gZmlyc3R3aW47CS8qIHN0YXJ0IGFsbCBvdmVyLi4uICovCisjIGVuZGlmCisJCX0KKyNlbmRpZgorCSAgICB9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogT3BlbiBhIHdpbmRvdyBmb3IgZmlsZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QgdGhhdCBkb24ndCBoYXZlIG9uZS4KKyAgICAgKiBBUkdDT1VOVCBtYXkgY2hhbmdlIHdoaWxlIGRvaW5nIHRoaXMsIGJlY2F1c2Ugb2YgYXV0b2NvbW1hbmRzLgorICAgICAqLworICAgIGlmIChjb3VudCA+IEFSR0NPVU5UIHx8IGNvdW50IDw9IDApCisJY291bnQgPSBBUkdDT1VOVDsKKworICAgIC8qIEF1dG9jb21tYW5kcyBtYXkgZG8gYW55dGhpbmcgdG8gdGhlIGFyZ3VtZW50IGxpc3QuICBNYWtlIHN1cmUgaXQncyBub3QKKyAgICAgKiBmcmVlZCB3aGlsZSB3ZSBhcmUgd29ya2luZyBoZXJlIGJ5ICJsb2NraW5nIiBpdC4gIFdlIHN0aWxsIGhhdmUgdG8KKyAgICAgKiB3YXRjaCBvdXQgZm9yIGl0cyBzaXplIHRvIGJlIGNoYW5nZWQuICovCisgICAgYWxpc3QgPSBjdXJ3aW4tPndfYWxpc3Q7CisgICAgKythbGlzdC0+YWxfcmVmY291bnQ7CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICAvKiBEb24ndCBleGVjdXRlIFdpbi9CdWYgRW50ZXIvTGVhdmUgYXV0b2NvbW1hbmRzIGhlcmUuICovCisgICAgKythdXRvY21kX25vX2VudGVyOworICAgICsrYXV0b2NtZF9ub19sZWF2ZTsKKyNlbmRpZgorICAgIHdpbl9lbnRlcihsYXN0d2luLCBGQUxTRSk7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50ICYmIGkgPCBhbGlzdC0+YWxfZ2EuZ2FfbGVuICYmICFnb3RfaW50OyArK2kpCisgICAgeworCWlmIChhbGlzdCA9PSAmZ2xvYmFsX2FsaXN0ICYmIGkgPT0gZ2xvYmFsX2FsaXN0LmFsX2dhLmdhX2xlbiAtIDEpCisJICAgIGFyZ19oYWRfbGFzdCA9IFRSVUU7CisJaWYgKGkgPCBvcGVuZWRfbGVuICYmIG9wZW5lZFtpXSkKKwl7CisJICAgIC8qIE1vdmUgdGhlIGFscmVhZHkgcHJlc2VudCB3aW5kb3cgdG8gYmVsb3cgdGhlIGN1cnJlbnQgd2luZG93ICovCisJICAgIGlmIChjdXJ3aW4tPndfYXJnX2lkeCAhPSBpKQorCSAgICB7CisJCWZvciAod3BuZXh0ID0gZmlyc3R3aW47IHdwbmV4dCAhPSBOVUxMOyB3cG5leHQgPSB3cG5leHQtPndfbmV4dCkKKwkJeworCQkgICAgaWYgKHdwbmV4dC0+d19hcmdfaWR4ID09IGkpCisJCSAgICB7CisJCQl3aW5fbW92ZV9hZnRlcih3cG5leHQsIGN1cndpbik7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorCWVsc2UgaWYgKHNwbGl0X3JldCA9PSBPSykKKwl7CisJICAgIGlmICghdXNlX2ZpcnN0d2luKQkJLyogc3BsaXQgY3VycmVudCB3aW5kb3cgKi8KKwkgICAgeworCQlwX2VhX3NhdmUgPSBwX2VhOworCQlwX2VhID0gVFJVRTsJCS8qIHVzZSBzcGFjZSBmcm9tIGFsbCB3aW5kb3dzICovCisJCXNwbGl0X3JldCA9IHdpbl9zcGxpdCgwLCBXU1BfUk9PTSB8IFdTUF9CRUxPVyk7CisJCXBfZWEgPSBwX2VhX3NhdmU7CisJCWlmIChzcGxpdF9yZXQgPT0gRkFJTCkKKwkJICAgIGNvbnRpbnVlOworCSAgICB9CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJICAgIGVsc2UgICAgLyogZmlyc3Qgd2luZG93OiBkbyBhdXRvY21kIGZvciBsZWF2aW5nIHRoaXMgYnVmZmVyICovCisJCS0tYXV0b2NtZF9ub19sZWF2ZTsKKyNlbmRpZgorCisJICAgIC8qCisJICAgICAqIGVkaXQgZmlsZSBpCisJICAgICAqLworCSAgICBjdXJ3aW4tPndfYXJnX2lkeCA9IGk7CisJICAgICh2b2lkKWRvX2VjbWQoMCwgYWxpc3RfbmFtZSgmQUFSR0xJU1QoYWxpc3QpW2ldKSwgTlVMTCwgTlVMTCwKKwkJICAgICAgRUNNRF9PTkUsCisJCSAgICAgICgoUF9ISUQoY3Vyd2luLT53X2J1ZmZlcikKKwkJCSAgIHx8IGJ1ZklzQ2hhbmdlZChjdXJ3aW4tPndfYnVmZmVyKSkgPyBFQ01EX0hJREUgOiAwKQorCQkJCQkJCSAgICAgICArIEVDTURfT0xEQlVGKTsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgaWYgKHVzZV9maXJzdHdpbikKKwkJKythdXRvY21kX25vX2xlYXZlOworI2VuZGlmCisJICAgIHVzZV9maXJzdHdpbiA9IEZBTFNFOworCX0KKwl1aV9icmVha2NoZWNrKCk7CisgICAgfQorCisgICAgLyogUmVtb3ZlIHRoZSAibG9jayIgb24gdGhlIGFyZ3VtZW50IGxpc3QuICovCisgICAgYWxpc3RfdW5saW5rKGFsaXN0KTsKKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIC0tYXV0b2NtZF9ub19lbnRlcjsKKyNlbmRpZgorICAgIHdpbl9lbnRlcihmaXJzdHdpbiwgRkFMU0UpOwkJCS8qIGJhY2sgdG8gZmlyc3Qgd2luZG93ICovCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgLS1hdXRvY21kX25vX2xlYXZlOworI2VuZGlmCisgICAgdmltX2ZyZWUob3BlbmVkKTsKK30KKworIyBpZiBkZWZpbmVkKEZFQVRfTElTVENNRFMpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogT3BlbiBhIHdpbmRvdyBmb3IgYSBudW1iZXIgb2YgYnVmZmVycy4KKyAqLworICAgIHZvaWQKK2V4X2J1ZmZlcl9hbGwoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBidWZfVAkqYnVmOworICAgIHdpbl9UCSp3cCwgKndwbmV4dDsKKyAgICBpbnQJCXNwbGl0X3JldCA9IE9LOworICAgIGludAkJcF9lYV9zYXZlOworICAgIGludAkJb3Blbl93aW5zID0gMDsKKyAgICBpbnQJCXI7CisgICAgaW50CQljb3VudDsJCS8qIE1heGltdW0gbnVtYmVyIG9mIHdpbmRvd3MgdG8gb3Blbi4gKi8KKyAgICBpbnQJCWFsbDsJCS8qIFdoZW4gVFJVRSBhbHNvIGxvYWQgaW5hY3RpdmUgYnVmZmVycy4gKi8KKworICAgIGlmIChlYXAtPmFkZHJfY291bnQgPT0gMCkJLyogbWFrZSBhcyBtYW55IHdpbmRvd3MgYXMgcG9zc2libGUgKi8KKwljb3VudCA9IDk5OTk7CisgICAgZWxzZQorCWNvdW50ID0gZWFwLT5saW5lMjsJLyogbWFrZSBhcyBtYW55IHdpbmRvd3MgYXMgc3BlY2lmaWVkICovCisgICAgaWYgKGVhcC0+Y21kaWR4ID09IENNRF91bmhpZGUgfHwgZWFwLT5jbWRpZHggPT0gQ01EX3N1bmhpZGUpCisJYWxsID0gRkFMU0U7CisgICAgZWxzZQorCWFsbCA9IFRSVUU7CisKKyAgICBzZXRwY21hcmsoKTsKKworI2lmZGVmIEZFQVRfR1VJCisgICAgbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDbG9zZSBzdXBlcmZsdW91cyB3aW5kb3dzICh0d28gd2luZG93cyBmb3IgdGhlIHNhbWUgYnVmZmVyKS4KKyAgICAgKiBBbHNvIGNsb3NlIHdpbmRvd3MgdGhhdCBhcmUgbm90IGZ1bGwtd2lkdGguCisgICAgICovCisgICAgZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSBOVUxMOyB3cCA9IHdwbmV4dCkKKyAgICB7CisJd3BuZXh0ID0gd3AtPndfbmV4dDsKKwlpZiAod3AtPndfYnVmZmVyLT5iX253aW5kb3dzID4gMQorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJCXx8ICgoY21kbW9kLnNwbGl0ICYgV1NQX1ZFUlQpCisJCQkgID8gd3AtPndfaGVpZ2h0ICsgd3AtPndfc3RhdHVzX2hlaWdodCA8IFJvd3MgLSBwX2NoCisJCQkgIDogd3AtPndfd2lkdGggIT0gQ29sdW1ucykKKyNlbmRpZgorCQkpCisJeworCSAgICB3aW5fY2xvc2Uod3AsIEZBTFNFKTsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgd3BuZXh0ID0gZmlyc3R3aW47CS8qIGp1c3QgaW4gY2FzZSBhbiBhdXRvY29tbWFuZCBkb2VzIHNvbWV0aGluZworCQkJCSAgIHN0cmFuZ2Ugd2l0aCB3aW5kb3dzICovCisJICAgIG9wZW5fd2lucyA9IDA7CisjZW5kaWYKKwl9CisJZWxzZQorCSAgICArK29wZW5fd2luczsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEdvIHRocm91Z2ggdGhlIGJ1ZmZlciBsaXN0LiAgV2hlbiBhIGJ1ZmZlciBkb2Vzbid0IGhhdmUgYSB3aW5kb3cgeWV0LAorICAgICAqIG9wZW4gb25lLiAgT3RoZXJ3aXNlIG1vdmUgdGhlIHdpbmRvdyB0byB0aGUgcmlnaHQgcG9zaXRpb24uCisgICAgICogV2F0Y2ggb3V0IGZvciBhdXRvY29tbWFuZHMgdGhhdCBkZWxldGUgYnVmZmVycyBvciB3aW5kb3dzIQorICAgICAqLworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIC8qIERvbid0IGV4ZWN1dGUgV2luL0J1ZiBFbnRlci9MZWF2ZSBhdXRvY29tbWFuZHMgaGVyZS4gKi8KKyAgICArK2F1dG9jbWRfbm9fZW50ZXI7CisjZW5kaWYKKyAgICB3aW5fZW50ZXIobGFzdHdpbiwgRkFMU0UpOworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgICsrYXV0b2NtZF9ub19sZWF2ZTsKKyNlbmRpZgorICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMICYmIG9wZW5fd2lucyA8IGNvdW50OyBidWYgPSBidWYtPmJfbmV4dCkKKyAgICB7CisJLyogQ2hlY2sgaWYgdGhpcyBidWZmZXIgbmVlZHMgYSB3aW5kb3cgKi8KKwlpZiAoKCFhbGwgJiYgYnVmLT5iX21sLm1sX21mcCA9PSBOVUxMKSB8fCAhYnVmLT5iX3BfYmwpCisJICAgIGNvbnRpbnVlOworCisJLyogQ2hlY2sgaWYgdGhpcyBidWZmZXIgYWxyZWFkeSBoYXMgYSB3aW5kb3cgKi8KKwlmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwkgICAgaWYgKHdwLT53X2J1ZmZlciA9PSBidWYpCisJCWJyZWFrOworCS8qIElmIHRoZSBidWZmZXIgYWxyZWFkeSBoYXMgYSB3aW5kb3csIG1vdmUgaXQgKi8KKwlpZiAod3AgIT0gTlVMTCkKKwkgICAgd2luX21vdmVfYWZ0ZXIod3AsIGN1cndpbik7CisJZWxzZSBpZiAoc3BsaXRfcmV0ID09IE9LKQorCXsKKwkgICAgLyogU3BsaXQgdGhlIHdpbmRvdyBhbmQgcHV0IHRoZSBidWZmZXIgaW4gaXQgKi8KKwkgICAgcF9lYV9zYXZlID0gcF9lYTsKKwkgICAgcF9lYSA9IFRSVUU7CQkvKiB1c2Ugc3BhY2UgZnJvbSBhbGwgd2luZG93cyAqLworCSAgICBzcGxpdF9yZXQgPSB3aW5fc3BsaXQoMCwgV1NQX1JPT00gfCBXU1BfQkVMT1cpOworCSAgICArK29wZW5fd2luczsKKwkgICAgcF9lYSA9IHBfZWFfc2F2ZTsKKwkgICAgaWYgKHNwbGl0X3JldCA9PSBGQUlMKQorCQljb250aW51ZTsKKworCSAgICAvKiBPcGVuIHRoZSBidWZmZXIgaW4gdGhpcyB3aW5kb3cuICovCisjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKQorCSAgICBzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfRElBTE9HOworI2VuZGlmCisJICAgIHNldF9jdXJidWYoYnVmLCBET0JVRl9HT1RPKTsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyMgaWZkZWYgRkVBVF9FVkFMCisJICAgIC8qIEF1dG9jb21tYW5kcyBkZWxldGVkIHRoZSBidWZmZXIgb3IgYWJvcnRlZCBzY3JpcHQKKwkgICAgICogcHJvY2Vzc2luZyEhISAqLworCSAgICBpZiAoIWJ1Zl92YWxpZChidWYpIHx8IGFib3J0aW5nKCkpCisjIGVsc2UKKwkgICAgaWYgKCFidWZfdmFsaWQoYnVmKSkJLyogYXV0b2NvbW1hbmRzIGRlbGV0ZWQgdGhlIGJ1ZmZlciEhISAqLworIyBlbmRpZgorCSAgICB7CisjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKQorCQlzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfTk9ORTsKKyNlbmRpZgorCQlicmVhazsKKwkgICAgfQorI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKQorCSAgICBpZiAoc3dhcF9leGlzdHNfYWN0aW9uID09IFNFQV9RVUlUKQorCSAgICB7CisJCS8qIFVzZXIgc2VsZWN0ZWQgUXVpdCBhdCBBVFRFTlRJT04gcHJvbXB0OyBjbG9zZSB0aGlzIHdpbmRvdy4gKi8KKwkJd2luX2Nsb3NlKGN1cndpbiwgVFJVRSk7CisJCS0tb3Blbl93aW5zOworCQlzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfTk9ORTsKKwkgICAgfQorCSAgICBlbHNlCisJCWhhbmRsZV9zd2FwX2V4aXN0cyhOVUxMKTsKKyNlbmRpZgorCX0KKworCXVpX2JyZWFrY2hlY2soKTsKKwlpZiAoZ290X2ludCkKKwl7CisJICAgICh2b2lkKXZnZXRjKCk7CS8qIG9ubHkgYnJlYWsgdGhlIGZpbGUgbG9hZGluZywgbm90IHRoZSByZXN0ICovCisJICAgIGJyZWFrOworCX0KKyAgICB9CisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgLS1hdXRvY21kX25vX2VudGVyOworI2VuZGlmCisgICAgd2luX2VudGVyKGZpcnN0d2luLCBGQUxTRSk7CQkvKiBiYWNrIHRvIGZpcnN0IHdpbmRvdyAqLworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIC0tYXV0b2NtZF9ub19sZWF2ZTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDbG9zZSBzdXBlcmZsdW91cyB3aW5kb3dzLgorICAgICAqLworICAgIGZvciAod3AgPSBsYXN0d2luOyBvcGVuX3dpbnMgPiBjb3VudDsgKQorICAgIHsKKwlyID0gKFBfSElEKHdwLT53X2J1ZmZlcikgfHwgIWJ1ZklzQ2hhbmdlZCh3cC0+d19idWZmZXIpCisJCQkJICAgICB8fCBhdXRvd3JpdGUod3AtPndfYnVmZmVyLCBGQUxTRSkgPT0gT0spOworI2lmZGVmIEZFQVRfQVVUT0NNRAorCWlmICghd2luX3ZhbGlkKHdwKSkKKwl7CisJICAgIC8qIEJ1ZldyaXRlIEF1dG9jb21tYW5kcyBtYWRlIHRoZSB3aW5kb3cgaW52YWxpZCwgc3RhcnQgb3ZlciAqLworCSAgICB3cCA9IGxhc3R3aW47CisJfQorCWVsc2UKKyNlbmRpZgorCSAgICBpZiAocikKKwl7CisJICAgIHdpbl9jbG9zZSh3cCwgIVBfSElEKHdwLT53X2J1ZmZlcikpOworCSAgICAtLW9wZW5fd2luczsKKwkgICAgd3AgPSBsYXN0d2luOworCX0KKwllbHNlCisJeworCSAgICB3cCA9IHdwLT53X3ByZXY7CisJICAgIGlmICh3cCA9PSBOVUxMKQorCQlicmVhazsKKwl9CisgICAgfQorfQorIyBlbmRpZiAvKiBGRUFUX0xJU1RDTURTICovCisKKyNlbmRpZiAvKiBGRUFUX1dJTkRPV1MgKi8KKworLyoKKyAqIGRvX21vZGVsaW5lcygpIC0gcHJvY2VzcyBtb2RlIGxpbmVzIGZvciB0aGUgY3VycmVudCBmaWxlCisgKgorICogUmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgIm1sIiBvcHRpb24gaXNuJ3Qgc2V0LgorICovCitzdGF0aWMgaW50ICBjaGtfbW9kZWxpbmUgX19BUkdTKChsaW5lbnJfVCkpOworCisgICAgdm9pZAorZG9fbW9kZWxpbmVzKCkKK3sKKyAgICBsaW5lbnJfVAkgICAgbG51bTsKKyAgICBpbnQJCSAgICBubWxpbmVzOworICAgIHN0YXRpYyBpbnQJICAgIGVudGVyZWQgPSAwOworCisgICAgaWYgKCFjdXJidWYtPmJfcF9tbCB8fCAobm1saW5lcyA9IChpbnQpcF9tbHMpID09IDApCisJcmV0dXJuOworCisgICAgLyogRGlzYWxsb3cgcmVjdXJzaXZlIGVudHJ5IGhlcmUuICBDYW4gaGFwcGVuIHdoZW4gZXhlY3V0aW5nIGEgbW9kZWxpbmUKKyAgICAgKiB0cmlnZ2VycyBhbiBhdXRvY29tbWFuZCwgd2hpY2ggcmVsb2FkcyBtb2RlbGluZXMgd2l0aCBhICI6ZG8iLiAqLworICAgIGlmIChlbnRlcmVkKQorCXJldHVybjsKKworICAgICsrZW50ZXJlZDsKKyAgICBmb3IgKGxudW0gPSAxOyBsbnVtIDw9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ICYmIGxudW0gPD0gbm1saW5lczsKKwkJCQkJCQkJICAgICAgICsrbG51bSkKKwlpZiAoY2hrX21vZGVsaW5lKGxudW0pID09IEZBSUwpCisJICAgIG5tbGluZXMgPSAwOworCisgICAgZm9yIChsbnVtID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7IGxudW0gPiAwICYmIGxudW0gPiBubWxpbmVzCisJCSAgICAgICAmJiBsbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQgLSBubWxpbmVzOyAtLWxudW0pCisJaWYgKGNoa19tb2RlbGluZShsbnVtKSA9PSBGQUlMKQorCSAgICBubWxpbmVzID0gMDsKKyAgICAtLWVudGVyZWQ7Cit9CisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCQkvKiBmb3IgdmVyc2lvbiBudW1iZXIgKi8KKworLyoKKyAqIGNoa19tb2RlbGluZSgpIC0gY2hlY2sgYSBzaW5nbGUgbGluZSBmb3IgYSBtb2RlIHN0cmluZworICogUmV0dXJuIEZBSUwgaWYgYW4gZXJyb3IgZW5jb3VudGVyZWQuCisgKi8KKyAgICBzdGF0aWMgaW50CitjaGtfbW9kZWxpbmUobG51bSkKKyAgICBsaW5lbnJfVAlsbnVtOworeworICAgIGNoYXJfdQkqczsKKyAgICBjaGFyX3UJKmU7CisgICAgY2hhcl91CSpsaW5lY29weTsJCS8qIGxvY2FsIGNvcHkgb2YgYW55IG1vZGVsaW5lIGZvdW5kICovCisgICAgaW50CQlwcmV2OworICAgIGludAkJdmVyczsKKyAgICBpbnQJCWVuZDsKKyAgICBpbnQJCXJldHZhbCA9IE9LOworICAgIGNoYXJfdQkqc2F2ZV9zb3VyY2luZ19uYW1lOworICAgIGxpbmVucl9UCXNhdmVfc291cmNpbmdfbG51bTsKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBzY2lkX1QJc2F2ZV9TSUQ7CisjZW5kaWYKKworICAgIHByZXYgPSAtMTsKKyAgICBmb3IgKHMgPSBtbF9nZXQobG51bSk7ICpzICE9IE5VTDsgKytzKQorICAgIHsKKwlpZiAocHJldiA9PSAtMSB8fCB2aW1faXNzcGFjZShwcmV2KSkKKwl7CisJICAgIGlmICgocHJldiAhPSAtMSAmJiBTVFJOQ01QKHMsICJleDoiLCAoc2l6ZV90KTMpID09IDApCisJCSAgICB8fCBTVFJOQ01QKHMsICJ2aToiLCAoc2l6ZV90KTMpID09IDApCisJCWJyZWFrOworCSAgICBpZiAoU1RSTkNNUChzLCAidmltIiwgMykgPT0gMCkKKwkgICAgeworCQlpZiAoc1szXSA9PSAnPCcgfHwgc1szXSA9PSAnPScgfHwgc1szXSA9PSAnPicpCisJCSAgICBlID0gcyArIDQ7CisJCWVsc2UKKwkJICAgIGUgPSBzICsgMzsKKwkJdmVycyA9IGdldGRpZ2l0cygmZSk7CisJCWlmICgqZSA9PSAnOicKKwkJCSYmIChzWzNdID09ICc6JworCQkJICAgIHx8IChWSU1fVkVSU0lPTl8xMDAgPj0gdmVycyAmJiBpc2RpZ2l0KHNbM10pKQorCQkJICAgIHx8IChWSU1fVkVSU0lPTl8xMDAgPCB2ZXJzICYmIHNbM10gPT0gJzwnKQorCQkJICAgIHx8IChWSU1fVkVSU0lPTl8xMDAgPiB2ZXJzICYmIHNbM10gPT0gJz4nKQorCQkJICAgIHx8IChWSU1fVkVSU0lPTl8xMDAgPT0gdmVycyAmJiBzWzNdID09ICc9JykpKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwl9CisJcHJldiA9ICpzOworICAgIH0KKworICAgIGlmICgqcykKKyAgICB7CisJZG8JCQkJLyogc2tpcCBvdmVyICJleDoiLCAidmk6IiBvciAidmltOiIgKi8KKwkgICAgKytzOworCXdoaWxlIChzWy0xXSAhPSAnOicpOworCisJcyA9IGxpbmVjb3B5ID0gdmltX3N0cnNhdmUocyk7CS8qIGNvcHkgdGhlIGxpbmUsIGl0IHdpbGwgY2hhbmdlICovCisJaWYgKGxpbmVjb3B5ID09IE5VTEwpCisJICAgIHJldHVybiBGQUlMOworCisJc2F2ZV9zb3VyY2luZ19sbnVtID0gc291cmNpbmdfbG51bTsKKwlzYXZlX3NvdXJjaW5nX25hbWUgPSBzb3VyY2luZ19uYW1lOworCXNvdXJjaW5nX2xudW0gPSBsbnVtOwkJLyogcHJlcGFyZSBmb3IgZW1zZygpICovCisJc291cmNpbmdfbmFtZSA9IChjaGFyX3UgKikibW9kZWxpbmVzIjsKKworCWVuZCA9IEZBTFNFOworCXdoaWxlIChlbmQgPT0gRkFMU0UpCisJeworCSAgICBzID0gc2tpcHdoaXRlKHMpOworCSAgICBpZiAoKnMgPT0gTlVMKQorCQlicmVhazsKKworCSAgICAvKgorCSAgICAgKiBGaW5kIGVuZCBvZiBzZXQgY29tbWFuZDogJzonIG9yIGVuZCBvZiBsaW5lLgorCSAgICAgKiBTa2lwIG92ZXIgIlw6IiwgcmVwbGFjaW5nIGl0IHdpdGggIjoiLgorCSAgICAgKi8KKwkgICAgZm9yIChlID0gczsgKmUgIT0gJzonICYmICplICE9IE5VTDsgKytlKQorCQlpZiAoZVswXSA9PSAnXFwnICYmIGVbMV0gPT0gJzonKQorCQkgICAgU1RSQ1BZKGUsIGUgKyAxKTsKKwkgICAgaWYgKCplID09IE5VTCkKKwkJZW5kID0gVFJVRTsKKworCSAgICAvKgorCSAgICAgKiBJZiB0aGVyZSBpcyBhICJzZXQiIGNvbW1hbmQsIHJlcXVpcmUgYSB0ZXJtaW5hdGluZyAnOicgYW5kCisJICAgICAqIGlnbm9yZSB0aGUgc3R1ZmYgYWZ0ZXIgdGhlICc6Jy4KKwkgICAgICogInZpOnNldCBvcHQgb3B0IG9wdDogZm9vIiAtLSBmb28gbm90IGludGVycHJldGVkCisJICAgICAqICJ2aTpvcHQgb3B0IG9wdDogZm9vIiAtLSBmb28gaW50ZXJwcmV0ZWQKKwkgICAgICogQWNjZXB0ICJzZSIgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBFbHZpcy4KKwkgICAgICovCisJICAgIGlmIChTVFJOQ01QKHMsICJzZXQgIiwgKHNpemVfdCk0KSA9PSAwCisJCSAgICB8fCBTVFJOQ01QKHMsICJzZSAiLCAoc2l6ZV90KTMpID09IDApCisJICAgIHsKKwkJaWYgKCplICE9ICc6JykJCS8qIG5vIHRlcm1pbmF0aW5nICc6Jz8gKi8KKwkJICAgIGJyZWFrOworCQllbmQgPSBUUlVFOworCQlzID0gdmltX3N0cmNocihzLCAnICcpICsgMTsKKwkgICAgfQorCSAgICAqZSA9IE5VTDsJCQkvKiB0cnVuY2F0ZSB0aGUgc2V0IGNvbW1hbmQgKi8KKworCSAgICBpZiAoKnMgIT0gTlVMKQkJLyogc2tpcCBvdmVyIGFuIGVtcHR5ICI6OiIgKi8KKwkgICAgeworI2lmZGVmIEZFQVRfRVZBTAorCQlzYXZlX1NJRCA9IGN1cnJlbnRfU0lEOworCQljdXJyZW50X1NJRCA9IFNJRF9NT0RFTElORTsKKyNlbmRpZgorCQlyZXR2YWwgPSBkb19zZXQocywgT1BUX01PREVMSU5FIHwgT1BUX0xPQ0FMKTsKKyNpZmRlZiBGRUFUX0VWQUwKKwkJY3VycmVudF9TSUQgPSBzYXZlX1NJRDsKKyNlbmRpZgorCQlpZiAocmV0dmFsID09IEZBSUwpCQkvKiBzdG9wIGlmIGVycm9yIGZvdW5kICovCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBzID0gZSArIDE7CQkJLyogYWR2YW5jZSB0byBuZXh0IHBhcnQgKi8KKwl9CisKKwlzb3VyY2luZ19sbnVtID0gc2F2ZV9zb3VyY2luZ19sbnVtOworCXNvdXJjaW5nX25hbWUgPSBzYXZlX3NvdXJjaW5nX25hbWU7CisKKwl2aW1fZnJlZShsaW5lY29weSk7CisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBGRUFUX1ZJTUlORk8KKyAgICBpbnQKK3JlYWRfdmltaW5mb19idWZmZXJsaXN0KHZpcnAsIHdyaXRpbmcpCisgICAgdmlyX1QJKnZpcnA7CisgICAgaW50CQl3cml0aW5nOworeworICAgIGNoYXJfdQkqdGFiOworICAgIGxpbmVucl9UCWxudW07CisgICAgY29sbnJfVAljb2w7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBjaGFyX3UJKnNmbmFtZTsKKyAgICBjaGFyX3UJKnhsaW5lOworCisgICAgLyogSGFuZGxlIGxvbmcgbGluZSBhbmQgZXNjYXBlZCBjaGFyYWN0ZXJzLiAqLworICAgIHhsaW5lID0gdmltaW5mb19yZWFkc3RyaW5nKHZpcnAsIDEsIEZBTFNFKTsKKworICAgIC8qIGRvbid0IHJlYWQgaW4gaWYgdGhlcmUgYXJlIGZpbGVzIG9uIHRoZSBjb21tYW5kLWxpbmUgb3IgaWYgd3JpdGluZzogKi8KKyAgICBpZiAoeGxpbmUgIT0gTlVMTCAmJiAhd3JpdGluZyAmJiBBUkdDT1VOVCA9PSAwCisJCQkJICAgICAgICYmIGZpbmRfdmltaW5mb19wYXJhbWV0ZXIoJyUnKSAhPSBOVUxMKQorICAgIHsKKwkvKiBGb3JtYXQgaXM6IDxmbmFtZT4gVGFiIDxsbnVtPiBUYWIgPGNvbD4uCisJICogV2F0Y2ggb3V0IGZvciBhIFRhYiBpbiB0aGUgZmlsZSBuYW1lLCB3b3JrIGZyb20gdGhlIGVuZC4gKi8KKwlsbnVtID0gMDsKKwljb2wgPSAwOworCXRhYiA9IHZpbV9zdHJyY2hyKHhsaW5lLCAnXHQnKTsKKwlpZiAodGFiICE9IE5VTEwpCisJeworCSAgICAqdGFiKysgPSAnXDAnOworCSAgICBjb2wgPSBhdG9pKChjaGFyICopdGFiKTsKKwkgICAgdGFiID0gdmltX3N0cnJjaHIoeGxpbmUsICdcdCcpOworCSAgICBpZiAodGFiICE9IE5VTEwpCisJICAgIHsKKwkJKnRhYisrID0gJ1wwJzsKKwkJbG51bSA9IGF0b2woKGNoYXIgKil0YWIpOworCSAgICB9CisJfQorCisJLyogRXhwYW5kICJ+LyIgaW4gdGhlIGZpbGUgbmFtZSBhdCAibGluZSArIDEiIHRvIGEgZnVsbCBwYXRoLgorCSAqIFRoZW4gdHJ5IHNob3J0ZW5pbmcgaXQgYnkgY29tcGFyaW5nIHdpdGggdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICovCisJZXhwYW5kX2Vudih4bGluZSwgTmFtZUJ1ZmYsIE1BWFBBVEhMKTsKKwltY2hfZGlybmFtZShJT2J1ZmYsIElPU0laRSk7CisJc2ZuYW1lID0gc2hvcnRlbl9mbmFtZShOYW1lQnVmZiwgSU9idWZmKTsKKwlpZiAoc2ZuYW1lID09IE5VTEwpCisJICAgIHNmbmFtZSA9IE5hbWVCdWZmOworCisJYnVmID0gYnVmbGlzdF9uZXcoTmFtZUJ1ZmYsIHNmbmFtZSwgKGxpbmVucl9UKTAsIEJMTl9MSVNURUQpOworCWlmIChidWYgIT0gTlVMTCkJLyoganVzdCBpbiBjYXNlLi4uICovCisJeworCSAgICBidWYtPmJfbGFzdF9jdXJzb3IubG51bSA9IGxudW07CisJICAgIGJ1Zi0+Yl9sYXN0X2N1cnNvci5jb2wgPSBjb2w7CisJICAgIGJ1Zmxpc3Rfc2V0ZnBvcyhidWYsIGN1cndpbiwgbG51bSwgY29sLCBGQUxTRSk7CisJfQorICAgIH0KKyAgICB2aW1fZnJlZSh4bGluZSk7CisKKyAgICByZXR1cm4gdmltaW5mb19yZWFkbGluZSh2aXJwKTsKK30KKworICAgIHZvaWQKK3dyaXRlX3ZpbWluZm9fYnVmZmVybGlzdChmcCkKKyAgICBGSUxFICAgICpmcDsKK3sKKyAgICBidWZfVAkqYnVmOworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIHdpbl9UCSp3aW47CisjZW5kaWYKKyAgICBjaGFyX3UJKmxpbmU7CisKKyAgICBpZiAoZmluZF92aW1pbmZvX3BhcmFtZXRlcignJScpID09IE5VTEwpCisJcmV0dXJuOworCisgICAgLyogQWxsb2NhdGUgcm9vbSBmb3IgdGhlIGZpbGUgbmFtZSwgbG51bSBhbmQgY29sLiAqLworICAgIGxpbmUgPSBhbGxvYyhNQVhQQVRITCArIDMwKTsKKyAgICBpZiAobGluZSA9PSBOVUxMKQorCXJldHVybjsKKworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIGZvciAod2luID0gZmlyc3R3aW47IHdpbiAhPSBOVUxMOyB3aW4gPSB3aW4tPndfbmV4dCkKKwlzZXRfbGFzdF9jdXJzb3Iod2luKTsKKyNlbHNlCisgICAgc2V0X2xhc3RfY3Vyc29yKGN1cndpbik7CisjZW5kaWYKKworICAgIGZwcmludGYoZnAsIF8oIlxuIyBCdWZmZXIgbGlzdDpcbiIpKTsKKyAgICBmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTCA7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorICAgIHsKKwlpZiAoYnVmLT5iX2ZuYW1lID09IE5VTEwKKwkJfHwgIWJ1Zi0+Yl9wX2JsCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCQl8fCBidF9xdWlja2ZpeChidWYpCisjZW5kaWYKKwkJfHwgcmVtb3ZhYmxlKGJ1Zi0+Yl9mZm5hbWUpKQorCSAgICBjb250aW51ZTsKKworCXB1dGMoJyUnLCBmcCk7CisJaG9tZV9yZXBsYWNlKE5VTEwsIGJ1Zi0+Yl9mZm5hbWUsIGxpbmUsIE1BWFBBVEhMLCBUUlVFKTsKKwlzcHJpbnRmKChjaGFyICopbGluZSArIFNUUkxFTihsaW5lKSwgIlx0JWxkXHQlZCIsCisJCQkobG9uZylidWYtPmJfbGFzdF9jdXJzb3IubG51bSwKKwkJCWJ1Zi0+Yl9sYXN0X2N1cnNvci5jb2wpOworCXZpbWluZm9fd3JpdGVzdHJpbmcoZnAsIGxpbmUpOworICAgIH0KKyAgICB2aW1fZnJlZShsaW5lKTsKK30KKyNlbmRpZgorCisKKy8qCisgKiBSZXR1cm4gc3BlY2lhbCBidWZmZXIgbmFtZS4KKyAqIFJldHVybnMgTlVMTCB3aGVuIHRoZSBidWZmZXIgaGFzIGEgbm9ybWFsIGZpbGUgbmFtZS4KKyAqLworICAgIGNoYXIgKgorYnVmX3NwbmFtZShidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyNpZiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpICYmIGRlZmluZWQoRkVBVF9XSU5ET1dTKQorICAgIGlmIChidF9xdWlja2ZpeChidWYpKQorCXJldHVybiBfKCJbRXJyb3IgTGlzdF0iKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKyAgICAvKiBUaGVyZSBpcyBubyBfZmlsZV8gd2hlbiAnYnVmdHlwZScgaXMgIm5vZmlsZSIsIGJfc2ZuYW1lCisgICAgICogY29udGFpbnMgdGhlIG5hbWUgYXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyICovCisgICAgaWYgKGJ0X25vZmlsZShidWYpKQorICAgIHsKKwlpZiAoYnVmLT5iX3NmbmFtZSAhPSBOVUxMKQorCSAgICByZXR1cm4gKGNoYXIgKilidWYtPmJfc2ZuYW1lOworCXJldHVybiAiW1NjcmF0Y2hdIjsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoYnVmLT5iX2ZuYW1lID09IE5VTEwpCisJcmV0dXJuIF8oIltObyBGaWxlXSIpOworICAgIHJldHVybiBOVUxMOworfQorCisKKyNpZiBkZWZpbmVkKEZFQVRfU0lHTlMpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogSW5zZXJ0IHRoZSBzaWduIGludG8gdGhlIHNpZ25saXN0LgorICovCisgICAgc3RhdGljIHZvaWQKK2luc2VydF9zaWduKGJ1ZiwgcHJldiwgbmV4dCwgaWQsIGxudW0sIHR5cGVucikKKyAgICBidWZfVAkqYnVmOwkJLyogYnVmZmVyIHRvIHN0b3JlIHNpZ24gaW4gKi8KKyAgICBzaWdubGlzdF9UCSpwcmV2OwkJLyogcHJldmlvdXMgc2lnbiBlbnRyeSAqLworICAgIHNpZ25saXN0X1QJKm5leHQ7CQkvKiBuZXh0IHNpZ24gZW50cnkgKi8KKyAgICBpbnQJCWlkOwkJLyogc2lnbiBJRCAqLworICAgIGxpbmVucl9UCWxudW07CQkvKiBsaW5lIG51bWJlciB3aGljaCBnZXRzIHRoZSBtYXJrICovCisgICAgaW50CQl0eXBlbnI7CQkvKiB0eXBlbnIgb2Ygc2lnbiB3ZSBhcmUgYWRkaW5nICovCit7CisgICAgc2lnbmxpc3RfVAkqbmV3c2lnbjsKKworICAgIG5ld3NpZ24gPSAoc2lnbmxpc3RfVCAqKWxhbGxvYygobG9uZ191KXNpemVvZihzaWdubGlzdF9UKSwgRkFMU0UpOworICAgIGlmIChuZXdzaWduICE9IE5VTEwpCisgICAgeworCW5ld3NpZ24tPmlkID0gaWQ7CisJbmV3c2lnbi0+bG51bSA9IGxudW07CisJbmV3c2lnbi0+dHlwZW5yID0gdHlwZW5yOworCW5ld3NpZ24tPm5leHQgPSBuZXh0OworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCW5ld3NpZ24tPnByZXYgPSBwcmV2OworCWlmIChuZXh0ICE9IE5VTEwpCisJICAgIG5leHQtPnByZXYgPSBuZXdzaWduOworI2VuZGlmCisKKwlpZiAocHJldiA9PSBOVUxMKQorCXsKKwkgICAgLyogV2hlbiBhZGRpbmcgZmlyc3Qgc2lnbiBuZWVkIHRvIHJlZHJhdyB0aGUgd2luZG93cyB0byBjcmVhdGUgdGhlCisJICAgICAqIGNvbHVtbiBmb3Igc2lnbnMuICovCisJICAgIGlmIChidWYtPmJfc2lnbmxpc3QgPT0gTlVMTCkKKwkgICAgeworCQlyZWRyYXdfYnVmX2xhdGVyKGJ1ZiwgTk9UX1ZBTElEKTsKKwkJY2hhbmdlZF9jbGluZV9iZWZfY3VycygpOworCSAgICB9CisKKwkgICAgLyogZmlyc3Qgc2lnbiBpbiBzaWdubGlzdCAqLworCSAgICBidWYtPmJfc2lnbmxpc3QgPSBuZXdzaWduOworCX0KKwllbHNlCisJICAgIHByZXYtPm5leHQgPSBuZXdzaWduOworICAgIH0KK30KKworLyoKKyAqIEFkZCB0aGUgc2lnbiBpbnRvIHRoZSBzaWdubGlzdC4gRmluZCB0aGUgcmlnaHQgc3BvdCB0byBkbyBpdCB0aG91Z2guCisgKi8KKyAgICB2b2lkCitidWZfYWRkc2lnbihidWYsIGlkLCBsbnVtLCB0eXBlbnIpCisgICAgYnVmX1QJKmJ1ZjsJCS8qIGJ1ZmZlciB0byBzdG9yZSBzaWduIGluICovCisgICAgaW50CQlpZDsJCS8qIHNpZ24gSUQgKi8KKyAgICBsaW5lbnJfVAlsbnVtOwkJLyogbGluZSBudW1iZXIgd2hpY2ggZ2V0cyB0aGUgbWFyayAqLworICAgIGludAkJdHlwZW5yOwkJLyogdHlwZW5yIG9mIHNpZ24gd2UgYXJlIGFkZGluZyAqLworeworICAgIHNpZ25saXN0X1QJKnNpZ247CQkvKiBhIHNpZ24gaW4gdGhlIHNpZ25saXN0ICovCisgICAgc2lnbmxpc3RfVAkqcHJldjsJCS8qIHRoZSBwcmV2aW91cyBzaWduICovCisKKyAgICBwcmV2ID0gTlVMTDsKKyAgICBmb3IgKHNpZ24gPSBidWYtPmJfc2lnbmxpc3Q7IHNpZ24gIT0gTlVMTDsgc2lnbiA9IHNpZ24tPm5leHQpCisgICAgeworCWlmIChsbnVtID09IHNpZ24tPmxudW0gJiYgaWQgPT0gc2lnbi0+aWQpCisJeworCSAgICBzaWduLT50eXBlbnIgPSB0eXBlbnI7CisJICAgIHJldHVybjsKKwl9CisJZWxzZSBpZiAoCisjaWZuZGVmIEZFQVRfTkVUQkVBTlNfSU5URyAgLyoga2VlcCBzaWducyBzb3J0ZWQgYnkgbG51bSAqLworCQkgICBpZCA8IDAgJiYKKyNlbmRpZgorCQkJICAgICBsbnVtIDwgc2lnbi0+bG51bSkKKwl7CisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHIC8qIGluc2VydCBuZXcgc2lnbiBhdCBoZWFkIG9mIGxpc3QgZm9yIHRoaXMgbG51bSAqLworCSAgICAvKiBYWFggLSBHUlA6IElzIHRoaXMgYmVjYXVzZSBvZiBzaWduIHNsaWRlIHByb2JsZW0/IE9yIGlzIGl0CisJICAgICAqIHJlYWxseSBuZWVkZWQ/IE9yIGlzIGl0IGJlY2F1c2Ugd2UgYWxsb3cgbXVsdGlwbGUgc2lnbnMgcGVyCisJICAgICAqIGxpbmU/IElmIHNvLCBzaG91bGQgSSBhZGQgdGhhdCBmZWF0dXJlIHRvIEZFQVRfU0lHTlM/CisJICAgICAqLworCSAgICB3aGlsZSAocHJldiAhPSBOVUxMICYmIHByZXYtPmxudW0gPT0gbG51bSkKKwkJcHJldiA9IHByZXYtPnByZXY7CisJICAgIGlmIChwcmV2ID09IE5VTEwpCisJCXNpZ24gPSBidWYtPmJfc2lnbmxpc3Q7CisJICAgIGVsc2UKKwkJc2lnbiA9IHByZXYtPm5leHQ7CisjZW5kaWYKKwkgICAgaW5zZXJ0X3NpZ24oYnVmLCBwcmV2LCBzaWduLCBpZCwgbG51bSwgdHlwZW5yKTsKKwkgICAgcmV0dXJuOworCX0KKwlwcmV2ID0gc2lnbjsKKyAgICB9CisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHIC8qIGluc2VydCBuZXcgc2lnbiBhdCBoZWFkIG9mIGxpc3QgZm9yIHRoaXMgbG51bSAqLworICAgIC8qIFhYWCAtIEdSUDogU2VlIHByZXZpb3VzIGNvbW1lbnQgKi8KKyAgICB3aGlsZSAocHJldiAhPSBOVUxMICYmIHByZXYtPmxudW0gPT0gbG51bSkKKwlwcmV2ID0gcHJldi0+cHJldjsKKyAgICBpZiAocHJldiA9PSBOVUxMKQorCXNpZ24gPSBidWYtPmJfc2lnbmxpc3Q7CisgICAgZWxzZQorCXNpZ24gPSBwcmV2LT5uZXh0OworI2VuZGlmCisgICAgaW5zZXJ0X3NpZ24oYnVmLCBwcmV2LCBzaWduLCBpZCwgbG51bSwgdHlwZW5yKTsKKworICAgIHJldHVybjsKK30KKworICAgIGludAorYnVmX2NoYW5nZV9zaWduX3R5cGUoYnVmLCBtYXJrSWQsIHR5cGVucikKKyAgICBidWZfVAkqYnVmOwkJLyogYnVmZmVyIHRvIHN0b3JlIHNpZ24gaW4gKi8KKyAgICBpbnQJCW1hcmtJZDsJCS8qIHNpZ24gSUQgKi8KKyAgICBpbnQJCXR5cGVucjsJCS8qIHR5cGVuciBvZiBzaWduIHdlIGFyZSBhZGRpbmcgKi8KK3sKKyAgICBzaWdubGlzdF9UCSpzaWduOwkJLyogYSBzaWduIGluIHRoZSBzaWdubGlzdCAqLworCisgICAgZm9yIChzaWduID0gYnVmLT5iX3NpZ25saXN0OyBzaWduICE9IE5VTEw7IHNpZ24gPSBzaWduLT5uZXh0KQorICAgIHsKKwlpZiAoc2lnbi0+aWQgPT0gbWFya0lkKQorCXsKKwkgICAgc2lnbi0+dHlwZW5yID0gdHlwZW5yOworCSAgICByZXR1cm4gc2lnbi0+bG51bTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKyAgICBpbnRfdQorYnVmX2dldHNpZ250eXBlKGJ1ZiwgbG51bSwgdHlwZSkKKyAgICBidWZfVAkqYnVmOworICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQl0eXBlOwkvKiBTSUdOX0lDT04sIFNJR05fVEVYVCwgU0lHTl9BTlksIFNJR05fTElORUhMICovCit7CisgICAgc2lnbmxpc3RfVAkqc2lnbjsJCS8qIGEgc2lnbiBpbiBhIGJfc2lnbmxpc3QgKi8KKworICAgIGZvciAoc2lnbiA9IGJ1Zi0+Yl9zaWdubGlzdDsgc2lnbiAhPSBOVUxMOyBzaWduID0gc2lnbi0+bmV4dCkKKwlpZiAoc2lnbi0+bG51bSA9PSBsbnVtCisJCSYmICh0eXBlID09IFNJR05fQU5ZCisjIGlmZGVmIEZFQVRfU0lHTl9JQ09OUworCQkgICAgfHwgKHR5cGUgPT0gU0lHTl9JQ09OCisJCQkmJiBzaWduX2dldF9pbWFnZShzaWduLT50eXBlbnIpICE9IE5VTEwpCisjIGVuZGlmCisJCSAgICB8fCAodHlwZSA9PSBTSUdOX1RFWFQKKwkJCSYmIHNpZ25fZ2V0X3RleHQoc2lnbi0+dHlwZW5yKSAhPSBOVUxMKQorCQkgICAgfHwgKHR5cGUgPT0gU0lHTl9MSU5FSEwKKwkJCSYmIHNpZ25fZ2V0X2F0dHIoc2lnbi0+dHlwZW5yLCBUUlVFKSAhPSAwKSkpCisJICAgIHJldHVybiBzaWduLT50eXBlbnI7CisgICAgcmV0dXJuIDA7Cit9CisKKworICAgIGxpbmVucl9UCitidWZfZGVsc2lnbihidWYsIGlkKQorICAgIGJ1Zl9UCSpidWY7CQkvKiBidWZmZXIgc2lnbiBpcyBzdG9yZWQgaW4gKi8KKyAgICBpbnQJCWlkOwkJLyogc2lnbiBpZCAqLworeworICAgIHNpZ25saXN0X1QJKipsYXN0cDsJLyogcG9pbnRlciB0byBwb2ludGVyIHRvIGN1cnJlbnQgc2lnbiAqLworICAgIHNpZ25saXN0X1QJKnNpZ247CQkvKiBhIHNpZ24gaW4gYSBiX3NpZ25saXN0ICovCisgICAgc2lnbmxpc3RfVAkqbmV4dDsJCS8qIHRoZSBuZXh0IHNpZ24gaW4gYSBiX3NpZ25saXN0ICovCisgICAgbGluZW5yX1QJbG51bTsJCS8qIGxpbmUgbnVtYmVyIHdob3NlIHNpZ24gd2FzIGRlbGV0ZWQgKi8KKworICAgIGxhc3RwID0gJmJ1Zi0+Yl9zaWdubGlzdDsKKyAgICBsbnVtID0gMDsKKyAgICBmb3IgKHNpZ24gPSBidWYtPmJfc2lnbmxpc3Q7IHNpZ24gIT0gTlVMTDsgc2lnbiA9IG5leHQpCisgICAgeworCW5leHQgPSBzaWduLT5uZXh0OworCWlmIChzaWduLT5pZCA9PSBpZCkKKwl7CisJICAgICpsYXN0cCA9IG5leHQ7CisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJICAgIGlmIChuZXh0ICE9IE5VTEwpCisJCW5leHQtPnByZXYgPSBzaWduLT5wcmV2OworI2VuZGlmCisJICAgIGxudW0gPSBzaWduLT5sbnVtOworCSAgICB2aW1fZnJlZShzaWduKTsKKwkgICAgYnJlYWs7CisJfQorCWVsc2UKKwkgICAgbGFzdHAgPSAmc2lnbi0+bmV4dDsKKyAgICB9CisKKyAgICAvKiBXaGVuIGRlbGV0ZWQgdGhlIGxhc3Qgc2lnbiBuZWVkIHRvIHJlZHJhdyB0aGUgd2luZG93cyB0byByZW1vdmUgdGhlCisgICAgICogc2lnbiBjb2x1bW4uICovCisgICAgaWYgKGJ1Zi0+Yl9zaWdubGlzdCA9PSBOVUxMKQorICAgIHsKKwlyZWRyYXdfYnVmX2xhdGVyKGJ1ZiwgTk9UX1ZBTElEKTsKKwljaGFuZ2VkX2NsaW5lX2JlZl9jdXJzKCk7CisgICAgfQorCisgICAgcmV0dXJuIGxudW07Cit9CisKKworLyoKKyAqIEZpbmQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzaWduIHdpdGggdGhlIHJlcXVlc3RlZCBpZC4gSWYgdGhlIHNpZ24gZG9lcworICogbm90IGV4aXN0LCByZXR1cm4gMCBhcyB0aGUgbGluZSBudW1iZXIuIFRoaXMgd2lsbCBzdGlsbCBsZXQgdGhlIGNvcnJlY3QgZmlsZQorICogZ2V0IGxvYWRlZC4KKyAqLworICAgIGludAorYnVmX2ZpbmRzaWduKGJ1ZiwgaWQpCisgICAgYnVmX1QJKmJ1ZjsJCS8qIGJ1ZmZlciB0byBzdG9yZSBzaWduIGluICovCisgICAgaW50CQlpZDsJCS8qIHNpZ24gSUQgKi8KK3sKKyAgICBzaWdubGlzdF9UCSpzaWduOwkJLyogYSBzaWduIGluIHRoZSBzaWdubGlzdCAqLworCisgICAgZm9yIChzaWduID0gYnVmLT5iX3NpZ25saXN0OyBzaWduICE9IE5VTEw7IHNpZ24gPSBzaWduLT5uZXh0KQorCWlmIChzaWduLT5pZCA9PSBpZCkKKwkgICAgcmV0dXJuIHNpZ24tPmxudW07CisKKyAgICByZXR1cm4gMDsKK30KKworICAgIGludAorYnVmX2ZpbmRzaWduX2lkKGJ1ZiwgbG51bSkKKyAgICBidWZfVAkqYnVmOwkJLyogYnVmZmVyIHdob3NlIHNpZ24gd2UgYXJlIHNlYXJjaGluZyBmb3IgKi8KKyAgICBsaW5lbnJfVAlsbnVtOwkJLyogbGluZSBudW1iZXIgb2Ygc2lnbiAqLworeworICAgIHNpZ25saXN0X1QJKnNpZ247CQkvKiBhIHNpZ24gaW4gdGhlIHNpZ25saXN0ICovCisKKyAgICBmb3IgKHNpZ24gPSBidWYtPmJfc2lnbmxpc3Q7IHNpZ24gIT0gTlVMTDsgc2lnbiA9IHNpZ24tPm5leHQpCisJaWYgKHNpZ24tPmxudW0gPT0gbG51bSkKKwkgICAgcmV0dXJuIHNpZ24tPmlkOworCisgICAgcmV0dXJuIDA7Cit9CisKKworIyBpZiBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykgfHwgZGVmaW5lZChQUk9UTykKKy8qIHNlZSBpZiBhIGdpdmVuIHR5cGUgb2Ygc2lnbiBleGlzdHMgb24gYSBzcGVjaWZpYyBsaW5lICovCisgICAgaW50CitidWZfZmluZHNpZ250eXBlX2lkKGJ1ZiwgbG51bSwgdHlwZW5yKQorICAgIGJ1Zl9UCSpidWY7CQkvKiBidWZmZXIgd2hvc2Ugc2lnbiB3ZSBhcmUgc2VhcmNoaW5nIGZvciAqLworICAgIGxpbmVucl9UCWxudW07CQkvKiBsaW5lIG51bWJlciBvZiBzaWduICovCisgICAgaW50CQl0eXBlbnI7CQkvKiBzaWduIHR5cGUgbnVtYmVyICovCit7CisgICAgc2lnbmxpc3RfVAkqc2lnbjsJCS8qIGEgc2lnbiBpbiB0aGUgc2lnbmxpc3QgKi8KKworICAgIGZvciAoc2lnbiA9IGJ1Zi0+Yl9zaWdubGlzdDsgc2lnbiAhPSBOVUxMOyBzaWduID0gc2lnbi0+bmV4dCkKKwlpZiAoc2lnbi0+bG51bSA9PSBsbnVtICYmIHNpZ24tPnR5cGVuciA9PSB0eXBlbnIpCisJICAgIHJldHVybiBzaWduLT5pZDsKKworICAgIHJldHVybiAwOworfQorCisKKyMgIGlmIGRlZmluZWQoRkVBVF9TSUdOX0lDT05TKSB8fCBkZWZpbmVkKFBST1RPKQorLyogcmV0dXJuIHRoZSBudW1iZXIgb2YgaWNvbnMgb24gdGhlIGdpdmVuIGxpbmUgKi8KKyAgICBpbnQKK2J1Zl9zaWduY291bnQoYnVmLCBsbnVtKQorICAgIGJ1Zl9UCSpidWY7CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBzaWdubGlzdF9UCSpzaWduOwkJLyogYSBzaWduIGluIHRoZSBzaWdubGlzdCAqLworICAgIGludAkJY291bnQgPSAwOworCisgICAgZm9yIChzaWduID0gYnVmLT5iX3NpZ25saXN0OyBzaWduICE9IE5VTEw7IHNpZ24gPSBzaWduLT5uZXh0KQorCWlmIChzaWduLT5sbnVtID09IGxudW0pCisJICAgIGlmIChzaWduX2dldF9pbWFnZShzaWduLT50eXBlbnIpICE9IE5VTEwpCisJCWNvdW50Kys7CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisjICBlbmRpZiAvKiBGRUFUX1NJR05fSUNPTlMgKi8KKyMgZW5kaWYgLyogRkVBVF9ORVRCRUFOU19JTlRHICovCisKKworLyoKKyAqIERlbGV0ZSBzaWducyBpbiBidWZmZXIgImJ1ZiIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYnVmX2RlbGV0ZV9zaWducyhidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBzaWdubGlzdF9UCSpuZXh0OworCisgICAgd2hpbGUgKGJ1Zi0+Yl9zaWdubGlzdCAhPSBOVUxMKQorICAgIHsKKwluZXh0ID0gYnVmLT5iX3NpZ25saXN0LT5uZXh0OworCXZpbV9mcmVlKGJ1Zi0+Yl9zaWdubGlzdCk7CisJYnVmLT5iX3NpZ25saXN0ID0gbmV4dDsKKyAgICB9Cit9CisKKy8qCisgKiBEZWxldGUgYWxsIHNpZ25zIGluIGFsbCBidWZmZXJzLgorICovCisgICAgdm9pZAorYnVmX2RlbGV0ZV9hbGxfc2lnbnMoKQoreworICAgIGJ1Zl9UCSpidWY7CQkvKiBidWZmZXIgd2UgYXJlIGNoZWNraW5nIGZvciBzaWducyAqLworCisgICAgZm9yIChidWYgPSBmaXJzdGJ1ZjsgYnVmICE9IE5VTEw7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorCWlmIChidWYtPmJfc2lnbmxpc3QgIT0gTlVMTCkKKwl7CisJICAgIC8qIE5lZWQgdG8gcmVkcmF3IHRoZSB3aW5kb3dzIHRvIHJlbW92ZSB0aGUgc2lnbiBjb2x1bW4uICovCisJICAgIHJlZHJhd19idWZfbGF0ZXIoYnVmLCBOT1RfVkFMSUQpOworCSAgICBidWZfZGVsZXRlX3NpZ25zKGJ1Zik7CisJfQorfQorCisvKgorICogTGlzdCBwbGFjZWQgc2lnbnMgZm9yICJyYnVmIi4gIElmICJyYnVmIiBpcyBOVUxMIGRvIGl0IGZvciBhbGwgYnVmZmVycy4KKyAqLworICAgIHZvaWQKK3NpZ25fbGlzdF9wbGFjZWQocmJ1ZikKKyAgICBidWZfVAkqcmJ1ZjsKK3sKKyAgICBidWZfVAkqYnVmOworICAgIHNpZ25saXN0X1QJKnA7CisgICAgY2hhcglsYnVmW0JVRlNJWl07CisKKyAgICBNU0dfUFVUU19USVRMRShfKCJcbi0tLSBTaWducyAtLS0iKSk7CisgICAgbXNnX3B1dGNoYXIoJ1xuJyk7CisgICAgaWYgKHJidWYgPT0gTlVMTCkKKwlidWYgPSBmaXJzdGJ1ZjsKKyAgICBlbHNlCisJYnVmID0gcmJ1ZjsKKyAgICB3aGlsZSAoYnVmICE9IE5VTEwpCisgICAgeworCWlmIChidWYtPmJfc2lnbmxpc3QgIT0gTlVMTCkKKwl7CisjaWZkZWYgSEFWRV9TTlBSSU5URgorCSAgICBzbnByaW50ZgorI2Vsc2UKKwkgICAgc3ByaW50ZgorI2VuZGlmCisJCShsYnVmLAorI2lmZGVmIEhBVkVfU05QUklOVEYKKwkJIEJVRlNJWiwKKyNlbmRpZgorCQkgICAgXygiU2lnbnMgZm9yICVzOiIpLCBidWYtPmJfZm5hbWUpOworCSAgICBNU0dfUFVUU19BVFRSKGxidWYsIGhsX2F0dHIoSExGX0QpKTsKKwkgICAgbXNnX3B1dGNoYXIoJ1xuJyk7CisJfQorCWZvciAocCA9IGJ1Zi0+Yl9zaWdubGlzdDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkKKwl7CisJICAgIHNwcmludGYobGJ1ZiwgXygiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIpLAorCQkJICAgKGxvbmcpcC0+bG51bSwgcC0+aWQsIHNpZ25fdHlwZW5yMm5hbWUocC0+dHlwZW5yKSk7CisJICAgIE1TR19QVVRTKGxidWYpOworCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKwl9CisJaWYgKHJidWYgIT0gTlVMTCkKKwkgICAgYnJlYWs7CisJYnVmID0gYnVmLT5iX25leHQ7CisgICAgfQorfQorCisvKgorICogQWRqdXN0IGEgcGxhY2VkIHNpZ24gZm9yIGluc2VydGVkL2RlbGV0ZWQgbGluZXMuCisgKi8KKyAgICB2b2lkCitzaWduX21hcmtfYWRqdXN0KGxpbmUxLCBsaW5lMiwgYW1vdW50LCBhbW91bnRfYWZ0ZXIpCisgICAgbGluZW5yX1QJbGluZTE7CisgICAgbGluZW5yX1QJbGluZTI7CisgICAgbG9uZwlhbW91bnQ7CisgICAgbG9uZwlhbW91bnRfYWZ0ZXI7Cit7CisgICAgc2lnbmxpc3RfVAkqc2lnbjsJCS8qIGEgc2lnbiBpbiBhIGJfc2lnbmxpc3QgKi8KKworICAgIGZvciAoc2lnbiA9IGN1cmJ1Zi0+Yl9zaWdubGlzdDsgc2lnbiAhPSBOVUxMOyBzaWduID0gc2lnbi0+bmV4dCkKKyAgICB7CisJaWYgKHNpZ24tPmxudW0gPj0gbGluZTEgJiYgc2lnbi0+bG51bSA8PSBsaW5lMikKKwl7CisJICAgIGlmIChhbW91bnQgPT0gTUFYTE5VTSkKKwkJc2lnbi0+bG51bSA9IGxpbmUxOworCSAgICBlbHNlCisJCXNpZ24tPmxudW0gKz0gYW1vdW50OworCX0KKwllbHNlIGlmIChzaWduLT5sbnVtID4gbGluZTIpCisJICAgIHNpZ24tPmxudW0gKz0gYW1vdW50X2FmdGVyOworICAgIH0KK30KKyNlbmRpZiAvKiBGRUFUX1NJR05TICovCisKKy8qCisgKiBTZXQgJ2J1Zmxpc3RlZCcgZm9yIGN1cmJ1ZiB0byAib24iIGFuZCB0cmlnZ2VyIGF1dG9jb21tYW5kcyBpZiBpdCBjaGFuZ2VkLgorICovCisgICAgdm9pZAorc2V0X2J1Zmxpc3RlZChvbikKKyAgICBpbnQJCW9uOworeworICAgIGlmIChvbiAhPSBjdXJidWYtPmJfcF9ibCkKKyAgICB7CisJY3VyYnVmLT5iX3BfYmwgPSBvbjsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwlpZiAob24pCisJICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRkFERCwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisJZWxzZQorCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZERUxFVEUsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYpOworI2VuZGlmCisgICAgfQorfQorCisvKgorICogUmVhZCB0aGUgZmlsZSBmb3IgImJ1ZiIgYWdhaW4gYW5kIGNoZWNrIGlmIHRoZSBjb250ZW50cyBjaGFuZ2VkLgorICogUmV0dXJuIFRSVUUgaWYgaXQgY2hhbmdlZCBvciB0aGlzIGNvdWxkIG5vdCBiZSBjaGVja2VkLgorICovCisgICAgaW50CitidWZfY29udGVudHNfY2hhbmdlZChidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBidWZfVAkqbmV3YnVmOworICAgIGludAkJZGlmZmVyID0gVFJVRTsKKyAgICBsaW5lbnJfVAlsbnVtOworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIGFjb19zYXZlX1QJYWNvOworI2Vsc2UKKyAgICBidWZfVAkqb2xkX2N1cmJ1ZiA9IGN1cmJ1ZjsKKyNlbmRpZgorICAgIGV4YXJnX1QJZWE7CisKKyAgICAvKiBBbGxvY2F0ZSBhIGJ1ZmZlciB3aXRob3V0IHB1dHRpbmcgaXQgaW4gdGhlIGJ1ZmZlciBsaXN0LiAqLworICAgIG5ld2J1ZiA9IGJ1Zmxpc3RfbmV3KE5VTEwsIE5VTEwsIChsaW5lbnJfVCkxLCBCTE5fRFVNTVkpOworICAgIGlmIChuZXdidWYgPT0gTlVMTCkKKwlyZXR1cm4gVFJVRTsKKworICAgIC8qIEZvcmNlIHRoZSAnZmlsZWVuY29kaW5nJyBhbmQgJ2ZpbGVmb3JtYXQnIHRvIGJlIGVxdWFsLiAqLworICAgIGlmIChwcmVwX2V4YXJnKCZlYSwgYnVmKSA9PSBGQUlMKQorICAgIHsKKwl3aXBlX2J1ZmZlcihuZXdidWYsIEZBTFNFKTsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICAvKiBzZXQgY3Vyd2luL2N1cmJ1ZiB0byBidWYgYW5kIHNhdmUgYSBmZXcgdGhpbmdzICovCisgICAgYXVjbWRfcHJlcGJ1ZigmYWNvLCBuZXdidWYpOworI2Vsc2UKKyAgICBjdXJidWYgPSBuZXdidWY7CisgICAgY3Vyd2luLT53X2J1ZmZlciA9IG5ld2J1ZjsKKyNlbmRpZgorCisgICAgaWYgKG1sX29wZW4oKSA9PSBPSworCSAgICAmJiByZWFkZmlsZShidWYtPmJfZmZuYW1lLCBidWYtPmJfZm5hbWUsCisJCQkJICAobGluZW5yX1QpMCwgKGxpbmVucl9UKTAsIChsaW5lbnJfVClNQVhMTlVNLAorCQkJCQkgICAgJmVhLCBSRUFEX05FVyB8IFJFQURfRFVNTVkpID09IE9LKQorICAgIHsKKwkvKiBjb21wYXJlIHRoZSB0d28gZmlsZXMgbGluZSBieSBsaW5lICovCisJaWYgKGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ID09IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXsKKwkgICAgZGlmZmVyID0gRkFMU0U7CisJICAgIGZvciAobG51bSA9IDE7IGxudW0gPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7ICsrbG51bSkKKwkJaWYgKFNUUkNNUChtbF9nZXRfYnVmKGJ1ZiwgbG51bSwgRkFMU0UpLCBtbF9nZXQobG51bSkpICE9IDApCisJCXsKKwkJICAgIGRpZmZlciA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorCX0KKyAgICB9CisgICAgdmltX2ZyZWUoZWEuY21kKTsKKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIC8qIHJlc3RvcmUgY3Vyd2luL2N1cmJ1ZiBhbmQgYSBmZXcgb3RoZXIgdGhpbmdzICovCisgICAgYXVjbWRfcmVzdGJ1ZigmYWNvKTsKKyNlbHNlCisgICAgY3VyYnVmID0gb2xkX2N1cmJ1ZjsKKyAgICBjdXJ3aW4tPndfYnVmZmVyID0gb2xkX2N1cmJ1ZjsKKyNlbmRpZgorCisgICAgaWYgKGN1cmJ1ZiAhPSBuZXdidWYpCS8qIHNhZmV0eSBjaGVjayAqLworCXdpcGVfYnVmZmVyKG5ld2J1ZiwgRkFMU0UpOworCisgICAgcmV0dXJuIGRpZmZlcjsKK30KKworLyoKKyAqIFdpcGUgb3V0IGEgYnVmZmVyIGFuZCBkZWNyZW1lbnQgdGhlIGxhc3QgYnVmZmVyIG51bWJlciBpZiBpdCB3YXMgdXNlZCBmb3IKKyAqIHRoaXMgYnVmZmVyLiAgQ2FsbCB0aGlzIHRvIHdpcGUgb3V0IGEgdGVtcCBidWZmZXIgdGhhdCBkb2VzIG5vdCBjb250YWluIGFueQorICogbWFya3MuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK3dpcGVfYnVmZmVyKGJ1ZiwgYXVjbWQpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWF1Y21kOwkgICAgLyogV2hlbiBUUlVFIHRyaWdnZXIgYXV0b2NvbW1hbmRzLiAqLworeworICAgIGlmIChidWYtPmJfZm51bSA9PSB0b3BfZmlsZV9udW0gLSAxKQorCS0tdG9wX2ZpbGVfbnVtOworCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgaWYgKCFhdWNtZCkJCSAgICAvKiBEb24ndCB0cmlnZ2VyIEJ1ZkRlbGV0ZSBhdXRvY29tbWFuZHMgaGVyZS4gKi8KKwkrK2F1dG9jbWRfYmxvY2s7CisjZW5kaWYKKyAgICBjbG9zZV9idWZmZXIoTlVMTCwgYnVmLCBET0JVRl9XSVBFKTsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBpZiAoIWF1Y21kKQorCS0tYXV0b2NtZF9ibG9jazsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvc3JjL2NoYXJzZXQuYyBiL3NyYy9jaGFyc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyNGUyNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jaGFyc2V0LmMKQEAgLTAsMCArMSwxNzk1IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmZGVmIEZFQVRfTElORUJSRUFLCitzdGF0aWMgaW50IHdpbl9jaGFydGFic2l6ZSBfX0FSR1MoKHdpbl9UICp3cCwgY2hhcl91ICpwLCBjb2xucl9UIGNvbCkpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX01CWVRFCitzdGF0aWMgaW50IHdpbl9ub2xicl9jaGFydGFic2l6ZSBfX0FSR1MoKHdpbl9UICp3cCwgY2hhcl91ICpzLCBjb2xucl9UIGNvbCwgaW50ICpoZWFkcCkpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgbnIyaGV4IF9fQVJHUygoaW50IGMpKTsKKworc3RhdGljIGludCAgICBjaGFydGFiX2luaXRpYWxpemVkID0gRkFMU0U7CisKKy8qIGJfY2hhcnRhYltdIGlzIGFuIGFycmF5IG9mIDMyIGJ5dGVzLCBlYWNoIGJpdCByZXByZXNlbnRpbmcgb25lIG9mIHRoZQorICogY2hhcmFjdGVycyAwLTI1NS4gKi8KKyNkZWZpbmUgU0VUX0NIQVJUQUIoYnVmLCBjKSAoYnVmKS0+Yl9jaGFydGFiWyh1bnNpZ25lZCkoYykgPj4gM10gfD0gKDEgPDwgKChjKSAmIDB4NykpCisjZGVmaW5lIFJFU0VUX0NIQVJUQUIoYnVmLCBjKSAoYnVmKS0+Yl9jaGFydGFiWyh1bnNpZ25lZCkoYykgPj4gM10gJj0gfigxIDw8ICgoYykgJiAweDcpKQorI2RlZmluZSBHRVRfQ0hBUlRBQihidWYsIGMpICgoYnVmKS0+Yl9jaGFydGFiWyh1bnNpZ25lZCkoYykgPj4gM10gJiAoMSA8PCAoKGMpICYgMHg3KSkpCisKKy8qCisgKiBGaWxsIGNoYXJ0YWJbXS4gIEFsc28gZmlsbHMgY3VyYnVmLT5iX2NoYXJ0YWJbXSB3aXRoIGZsYWdzIGZvciBrZXl3b3JkCisgKiBjaGFyYWN0ZXJzIGZvciBjdXJyZW50IGJ1ZmZlci4KKyAqCisgKiBEZXBlbmRzIG9uIHRoZSBvcHRpb24gc2V0dGluZ3MgJ2lza2V5d29yZCcsICdpc2lkZW50JywgJ2lzZm5hbWUnLAorICogJ2lzcHJpbnQnIGFuZCAnZW5jb2RpbmcnLgorICoKKyAqIFRoZSBpbmRleCBpbiBjaGFydGFiW10gZGVwZW5kcyBvbiAnZW5jb2RpbmcnOgorICogLSBGb3Igbm9uLW11bHRpLWJ5dGUgaW5kZXggd2l0aCB0aGUgYnl0ZSAoc2FtZSBhcyB0aGUgY2hhcmFjdGVyKS4KKyAqIC0gRm9yIERCQ1MgaW5kZXggd2l0aCB0aGUgZmlyc3QgYnl0ZS4KKyAqIC0gRm9yIFVURi04IGluZGV4IHdpdGggdGhlIGNoYXJhY3RlciAod2hlbiBmaXJzdCBieXRlIGlzIHVwIHRvIDB4ODAgaXQgaXMKKyAqICAgdGhlIHNhbWUgYXMgdGhlIGNoYXJhY3RlciwgaWYgdGhlIGZpcnN0IGJ5dGUgaXMgMHg4MCBhbmQgYWJvdmUgaXQgZGVwZW5kcworICogICBvbiBmdXJ0aGVyIGJ5dGVzKS4KKyAqCisgKiBUaGUgY29udGVudHMgb2YgY2hhcnRhYltdOgorICogLSBUaGUgbG93ZXIgdHdvIGJpdHMsIG1hc2tlZCBieSBDVF9DRUxMX01BU0ssIGdpdmUgdGhlIG51bWJlciBvZiBkaXNwbGF5CisgKiAgIGNlbGxzIHRoZSBjaGFyYWN0ZXIgb2NjdXBpZXMgKDEgb3IgMikuICBOb3QgdmFsaWQgZm9yIFVURi04IGFib3ZlIDB4ODAuCisgKiAtIENUX1BSSU5UX0NIQVIgYml0IGlzIHNldCB3aGVuIHRoZSBjaGFyYWN0ZXIgaXMgcHJpbnRhYmxlIChubyBuZWVkIHRvCisgKiAgIHRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVyIGJlZm9yZSBkaXNwbGF5aW5nIGl0KS4gIE5vdGUgdGhhdCBvbmx5IERCQ1MKKyAqICAgY2hhcmFjdGVycyBjYW4gaGF2ZSAyIGRpc3BsYXkgY2VsbHMgYW5kIHN0aWxsIGJlIHByaW50YWJsZS4KKyAqIC0gQ1RfRk5BTUVfQ0hBUiBiaXQgaXMgc2V0IHdoZW4gdGhlIGNoYXJhY3RlciBjYW4gYmUgaW4gYSBmaWxlIG5hbWUuCisgKiAtIENUX0lEX0NIQVIgYml0IGlzIHNldCB3aGVuIHRoZSBjaGFyYWN0ZXIgY2FuIGJlIGluIGFuIGlkZW50aWZpZXIuCisgKgorICogUmV0dXJuIEZBSUwgaWYgJ2lza2V5d29yZCcsICdpc2lkZW50JywgJ2lzZm5hbWUnIG9yICdpc3ByaW50JyBvcHRpb24gaGFzIGFuCisgKiBlcnJvciwgT0sgb3RoZXJ3aXNlLgorICovCisgICAgaW50Citpbml0X2NoYXJ0YWIoKQoreworICAgIHJldHVybiBidWZfaW5pdF9jaGFydGFiKGN1cmJ1ZiwgVFJVRSk7Cit9CisKKyAgICBpbnQKK2J1Zl9pbml0X2NoYXJ0YWIoYnVmLCBnbG9iYWwpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWdsb2JhbDsJCS8qIEZBTFNFOiBvbmx5IHNldCBidWYtPmJfY2hhcnRhYltdICovCit7CisgICAgaW50CQljOworICAgIGludAkJYzI7CisgICAgY2hhcl91CSpwOworICAgIGludAkJaTsKKyAgICBpbnQJCXRpbGRlOworICAgIGludAkJZG9faXNhbHBoYTsKKworICAgIGlmIChnbG9iYWwpCisgICAgeworCS8qCisJICogU2V0IHRoZSBkZWZhdWx0IHNpemUgZm9yIHByaW50YWJsZSBjaGFyYWN0ZXJzOgorCSAqIEZyb20gPFNwYWNlPiB0byAnficgaXMgMSAocHJpbnRhYmxlKSwgb3RoZXJzIGFyZSAyIChub3QgcHJpbnRhYmxlKS4KKwkgKiBUaGlzIGFsc28gaW5pdHMgYWxsICdpc2lkZW50JyBhbmQgJ2lzZm5hbWUnIGZsYWdzIHRvIEZBTFNFLgorCSAqCisJICogRUJDRElDOiBhbGwgY2hhcnMgYmVsb3cgJyAnIGFyZSBub3QgcHJpbnRhYmxlLCBhbGwgb3RoZXJzIGFyZQorCSAqIHByaW50YWJsZS4KKwkgKi8KKwljID0gMDsKKwl3aGlsZSAoYyA8ICcgJykKKwkgICAgY2hhcnRhYltjKytdID0gKGR5X2ZsYWdzICYgRFlfVUhFWCkgPyA0IDogMjsKKyNpZmRlZiBFQkNESUMKKwl3aGlsZSAoYyA8IDI1NSkKKyNlbHNlCisJd2hpbGUgKGMgPD0gJ34nKQorI2VuZGlmCisJICAgIGNoYXJ0YWJbYysrXSA9IDEgKyBDVF9QUklOVF9DSEFSOworI2lmZGVmIEZFQVRfRktNQVAKKwlpZiAocF9hbHRrZXltYXApCisJeworCSAgICB3aGlsZSAoYyA8IFlFKQorCQljaGFydGFiW2MrK10gPSAxICsgQ1RfUFJJTlRfQ0hBUjsKKwl9CisjZW5kaWYKKwl3aGlsZSAoYyA8IDI1NikKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICAvKiBVVEYtODogYnl0ZXMgMHhhMCAtIDB4ZmYgYXJlIHByaW50YWJsZSAobGF0aW4xKSAqLworCSAgICBpZiAoZW5jX3V0ZjggJiYgYyA+PSAweGEwKQorCQljaGFydGFiW2MrK10gPSBDVF9QUklOVF9DSEFSICsgMTsKKwkgICAgLyogZXVjLWpwIGNoYXJhY3RlcnMgc3RhcnRpbmcgd2l0aCAweDhlIGFyZSBzaW5nbGUgd2lkdGggKi8KKwkgICAgZWxzZSBpZiAoZW5jX2RiY3MgPT0gREJDU19KUE5VICYmIGMgPT0gMHg4ZSkKKwkJY2hhcnRhYltjKytdID0gQ1RfUFJJTlRfQ0hBUiArIDE7CisJICAgIC8qIG90aGVyIGRvdWJsZS1ieXRlIGNoYXJzIGNhbiBiZSBwcmludGFibGUgQU5EIGRvdWJsZS13aWR0aCAqLworCSAgICBlbHNlIGlmIChlbmNfZGJjcyAhPSAwICYmIE1CX0JZVEUyTEVOKGMpID09IDIpCisJCWNoYXJ0YWJbYysrXSA9IENUX1BSSU5UX0NIQVIgKyAyOworCSAgICBlbHNlCisjZW5kaWYKKwkJLyogdGhlIHJlc3QgaXMgdW5wcmludGFibGUgYnkgZGVmYXVsdCAqLworCQljaGFydGFiW2MrK10gPSAoZHlfZmxhZ3MgJiBEWV9VSEVYKSA/IDQgOiAyOworCX0KKworI2lmZGVmIEZFQVRfTUJZVEUKKwkvKiBBc3N1bWUgdGhhdCBldmVyeSBtdWx0aS1ieXRlIGNoYXIgaXMgYSBmaWxlbmFtZSBjaGFyYWN0ZXIuICovCisJZm9yIChjID0gMTsgYyA8IDI1NjsgKytjKQorCSAgICBpZiAoKGVuY19kYmNzICE9IDAgJiYgTUJfQllURTJMRU4oYykgPiAxKQorCQkgICAgfHwgKGVuY19kYmNzID09IERCQ1NfSlBOVSAmJiBjID09IDB4OGUpCisJCSAgICB8fCAoZW5jX3V0ZjggJiYgYyA+PSAweGEwKSkKKwkJY2hhcnRhYltjXSB8PSBDVF9GTkFNRV9DSEFSOworI2VuZGlmCisgICAgfQorCisgICAgLyoKKyAgICAgKiBJbml0IHdvcmQgY2hhciBmbGFncyBhbGwgdG8gRkFMU0UKKyAgICAgKi8KKyAgICB2aW1fbWVtc2V0KGJ1Zi0+Yl9jaGFydGFiLCAwLCAoc2l6ZV90KTMyKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgZm9yIChjID0gMDsgYyA8IDI1NjsgKytjKQorICAgIHsKKwkvKiBkb3VibGUtYnl0ZSBjaGFyYWN0ZXJzIGFyZSBwcm9iYWJseSB3b3JkIGNoYXJhY3RlcnMgKi8KKwlpZiAoZW5jX2RiY3MgIT0gMCAmJiBNQl9CWVRFMkxFTihjKSA9PSAyKQorCSAgICBTRVRfQ0hBUlRBQihidWYsIGMpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9MSVNQCisgICAgLyoKKyAgICAgKiBJbiBsaXNwIG1vZGUgdGhlICctJyBjaGFyYWN0ZXIgaXMgaW5jbHVkZWQgaW4ga2V5d29yZHMuCisgICAgICovCisgICAgaWYgKGJ1Zi0+Yl9wX2xpc3ApCisJU0VUX0NIQVJUQUIoYnVmLCAnLScpOworI2VuZGlmCisKKyAgICAvKiBXYWxrIHRocm91Z2ggdGhlICdpc2lkZW50JywgJ2lza2V5d29yZCcsICdpc2ZuYW1lJyBhbmQgJ2lzcHJpbnQnCisgICAgICogb3B0aW9ucyBFYWNoIG9wdGlvbiBpcyBhIGxpc3Qgb2YgY2hhcmFjdGVycywgY2hhcmFjdGVyIG51bWJlcnMgb3IKKyAgICAgKiByYW5nZXMsIHNlcGFyYXRlZCBieSBjb21tYXMsIGUuZy46ICIyMDAtMjEwLHgsIy0xNzgsLSIKKyAgICAgKi8KKyAgICBmb3IgKGkgPSBnbG9iYWwgPyAwIDogMzsgaSA8PSAzOyArK2kpCisgICAgeworCWlmIChpID09IDApCisJICAgIHAgPSBwX2lzaTsJCS8qIGZpcnN0IHJvdW5kOiAnaXNpZGVudCcgKi8KKwllbHNlIGlmIChpID09IDEpCisJICAgIHAgPSBwX2lzcDsJCS8qIHNlY29uZCByb3VuZDogJ2lzcHJpbnQnICovCisJZWxzZSBpZiAoaSA9PSAyKQorCSAgICBwID0gcF9pc2Y7CQkvKiB0aGlyZCByb3VuZDogJ2lzZm5hbWUnICovCisJZWxzZQkvKiBpID09IDMgKi8KKwkgICAgcCA9IGJ1Zi0+Yl9wX2lzazsJLyogZm91cnRoIHJvdW5kOiAnaXNrZXl3b3JkJyAqLworCisJd2hpbGUgKCpwKQorCXsKKwkgICAgdGlsZGUgPSBGQUxTRTsKKwkgICAgZG9faXNhbHBoYSA9IEZBTFNFOworCSAgICBpZiAoKnAgPT0gJ14nICYmIHBbMV0gIT0gTlVMKQorCSAgICB7CisJCXRpbGRlID0gVFJVRTsKKwkJKytwOworCSAgICB9CisJICAgIGlmIChWSU1fSVNESUdJVCgqcCkpCisJCWMgPSBnZXRkaWdpdHMoJnApOworCSAgICBlbHNlCisJCWMgPSAqcCsrOworCSAgICBjMiA9IC0xOworCSAgICBpZiAoKnAgPT0gJy0nICYmIHBbMV0gIT0gTlVMKQorCSAgICB7CisJCSsrcDsKKwkJaWYgKFZJTV9JU0RJR0lUKCpwKSkKKwkJICAgIGMyID0gZ2V0ZGlnaXRzKCZwKTsKKwkJZWxzZQorCQkgICAgYzIgPSAqcCsrOworCSAgICB9CisJICAgIGlmIChjIDw9IDAgfHwgKGMyIDwgYyAmJiBjMiAhPSAtMSkgfHwgYzIgPj0gMjU2CisJCQkJCQkgfHwgISgqcCA9PSBOVUwgfHwgKnAgPT0gJywnKSkKKwkJcmV0dXJuIEZBSUw7CisKKwkgICAgaWYgKGMyID09IC0xKQkvKiBub3QgYSByYW5nZSAqLworCSAgICB7CisJCS8qCisJCSAqIEEgc2luZ2xlICdAJyAobm90ICJALUAiKToKKwkJICogRGVjaWRlIG9uIGxldHRlcnMgYmVpbmcgSUQvcHJpbnRhYmxlL2tleXdvcmQgY2hhcnMgd2l0aAorCQkgKiBzdGFuZGFyZCBmdW5jdGlvbiBpc2FscGhhKCkuIFRoaXMgdGFrZXMgY2FyZSBvZiBsb2NhbGUgZm9yCisJCSAqIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMpLgorCQkgKi8KKwkJaWYgKGMgPT0gJ0AnKQorCQl7CisJCSAgICBkb19pc2FscGhhID0gVFJVRTsKKwkJICAgIGMgPSAxOworCQkgICAgYzIgPSAyNTU7CisJCX0KKwkJZWxzZQorCQkgICAgYzIgPSBjOworCSAgICB9CisJICAgIHdoaWxlIChjIDw9IGMyKQorCSAgICB7CisJCWlmICghZG9faXNhbHBoYSB8fCBpc2FscGhhKGMpCisjaWZkZWYgRkVBVF9GS01BUAorCQkJfHwgKHBfYWx0a2V5bWFwICYmIChGX2lzYWxwaGEoYykgfHwgRl9pc2RpZ2l0KGMpKSkKKyNlbmRpZgorCQkJICAgICkKKwkJeworCQkgICAgaWYgKGkgPT0gMCkJCQkvKiAocmUpc2V0IElEIGZsYWcgKi8KKwkJICAgIHsKKwkJCWlmICh0aWxkZSkKKwkJCSAgICBjaGFydGFiW2NdICY9IH5DVF9JRF9DSEFSOworCQkJZWxzZQorCQkJICAgIGNoYXJ0YWJbY10gfD0gQ1RfSURfQ0hBUjsKKwkJICAgIH0KKwkJICAgIGVsc2UgaWYgKGkgPT0gMSkJCS8qIChyZSlzZXQgcHJpbnRhYmxlICovCisJCSAgICB7CisJCQlpZiAoKGMgPCAnICcKKyNpZm5kZWYgRUJDRElDCisJCQkJICAgIHx8IGMgPiAnficKKyNlbmRpZgorI2lmZGVmIEZFQVRfRktNQVAKKwkJCQkgICAgfHwgKHBfYWx0a2V5bWFwCisJCQkJCSYmIChGX2lzYWxwaGEoYykgfHwgRl9pc2RpZ2l0KGMpKSkKKyNlbmRpZgorCQkJICAgICkKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkJLyogRm9yIGRvdWJsZS1ieXRlIHdlIGtlZXAgdGhlIGNlbGwgd2lkdGgsIHNvCisJCQkJICogdGhhdCB3ZSBjYW4gZGV0ZWN0IGl0IGZyb20gdGhlIGZpcnN0IGJ5dGUuICovCisJCQkJJiYgIShlbmNfZGJjcyAmJiBNQl9CWVRFMkxFTihjKSA9PSAyKQorI2VuZGlmCisJCQkgICApCisJCQl7CisJCQkgICAgaWYgKHRpbGRlKQorCQkJICAgIHsKKwkJCQljaGFydGFiW2NdID0gKGNoYXJ0YWJbY10gJiB+Q1RfQ0VMTF9NQVNLKQorCQkJCQkgICAgICsgKChkeV9mbGFncyAmIERZX1VIRVgpID8gNCA6IDIpOworCQkJCWNoYXJ0YWJbY10gJj0gfkNUX1BSSU5UX0NIQVI7CisJCQkgICAgfQorCQkJICAgIGVsc2UKKwkJCSAgICB7CisJCQkJY2hhcnRhYltjXSA9IChjaGFydGFiW2NdICYgfkNUX0NFTExfTUFTSykgKyAxOworCQkJCWNoYXJ0YWJbY10gfD0gQ1RfUFJJTlRfQ0hBUjsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChpID09IDIpCQkvKiAocmUpc2V0IGZuYW1lIGZsYWcgKi8KKwkJICAgIHsKKwkJCWlmICh0aWxkZSkKKwkJCSAgICBjaGFydGFiW2NdICY9IH5DVF9GTkFNRV9DSEFSOworCQkJZWxzZQorCQkJICAgIGNoYXJ0YWJbY10gfD0gQ1RfRk5BTUVfQ0hBUjsKKwkJICAgIH0KKwkJICAgIGVsc2UgLyogaSA9PSAzICovCQkvKiAocmUpc2V0IGtleXdvcmQgZmxhZyAqLworCQkgICAgeworCQkJaWYgKHRpbGRlKQorCQkJICAgIFJFU0VUX0NIQVJUQUIoYnVmLCBjKTsKKwkJCWVsc2UKKwkJCSAgICBTRVRfQ0hBUlRBQihidWYsIGMpOworCQkgICAgfQorCQl9CisJCSsrYzsKKwkgICAgfQorCSAgICBwID0gc2tpcF90b19vcHRpb25fcGFydChwKTsKKwl9CisgICAgfQorICAgIGNoYXJ0YWJfaW5pdGlhbGl6ZWQgPSBUUlVFOworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGJ1ZltidWZzaXplXSBpbi1wbGFjZS4KKyAqIFRoZSByZXN1bHQgaXMgYSBzdHJpbmcgd2l0aCBvbmx5IHByaW50YWJsZSBjaGFyYWN0ZXJzLCBidXQgaWYgdGhlcmUgaXMgbm90CisgKiBlbm91Z2ggcm9vbSwgbm90IGFsbCBjaGFyYWN0ZXJzIHdpbGwgYmUgdHJhbnNsYXRlZC4KKyAqLworICAgIHZvaWQKK3RyYW5zX2NoYXJhY3RlcnMoYnVmLCBidWZzaXplKQorICAgIGNoYXJfdQkqYnVmOworICAgIGludAkJYnVmc2l6ZTsKK3sKKyAgICBpbnQJCWxlbjsJCS8qIGxlbmd0aCBvZiBzdHJpbmcgbmVlZGluZyB0cmFuc2xhdGlvbiAqLworICAgIGludAkJcm9vbTsJCS8qIHJvb20gaW4gYnVmZmVyIGFmdGVyIHN0cmluZyAqLworICAgIGNoYXJfdQkqdHJzOwkJLyogdHJhbnNsYXRlZCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQJCXRyc19sZW47CS8qIGxlbmd0aCBvZiB0cnNbXSAqLworCisgICAgbGVuID0gKGludClTVFJMRU4oYnVmKTsKKyAgICByb29tID0gYnVmc2l6ZSAtIGxlbjsKKyAgICB3aGlsZSAoKmJ1ZiAhPSAwKQorICAgIHsKKyMgaWZkZWYgRkVBVF9NQllURQorCS8qIEFzc3VtZSBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGRvZXNuJ3QgbmVlZCB0cmFuc2xhdGlvbi4gKi8KKwlpZiAoaGFzX21ieXRlICYmICh0cnNfbGVuID0gKCptYl9wdHIybGVuX2NoZWNrKShidWYpKSA+IDEpCisJICAgIGxlbiAtPSB0cnNfbGVuOworCWVsc2UKKyMgZW5kaWYKKwl7CisJICAgIHRycyA9IHRyYW5zY2hhcl9ieXRlKCpidWYpOworCSAgICB0cnNfbGVuID0gKGludClTVFJMRU4odHJzKTsKKwkgICAgaWYgKHRyc19sZW4gPiAxKQorCSAgICB7CisJCXJvb20gLT0gdHJzX2xlbiAtIDE7CisJCWlmIChyb29tIDw9IDApCisJCSAgICByZXR1cm47CisJCW1jaF9tZW1tb3ZlKGJ1ZiArIHRyc19sZW4sIGJ1ZiArIDEsIChzaXplX3QpbGVuKTsKKwkgICAgfQorCSAgICBtY2hfbWVtbW92ZShidWYsIHRycywgKHNpemVfdCl0cnNfbGVuKTsKKwkgICAgLS1sZW47CisJfQorCWJ1ZiArPSB0cnNfbGVuOworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKEZFQVRfVElUTEUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogVHJhbnNsYXRlIGEgc3RyaW5nIGludG8gYWxsb2NhdGVkIG1lbW9yeSwgcmVwbGFjaW5nIHNwZWNpYWwgY2hhcnMgd2l0aAorICogcHJpbnRhYmxlIGNoYXJzLiAgUmV0dXJucyBOVUxMIHdoZW4gb3V0IG9mIG1lbW9yeS4KKyAqLworICAgIGNoYXJfdSAqCit0cmFuc3N0cihzKQorICAgIGNoYXJfdQkqczsKK3sKKyAgICBjaGFyX3UJKnJlczsKKyAgICBjaGFyX3UJKnA7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJbCwgbGVuLCBjOworICAgIGNoYXJfdQloZXhidWZbMTFdOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGhhc19tYnl0ZSkKKyAgICB7CisJLyogQ29tcHV0ZSB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQsIHRha2luZyBhY2NvdW50IG9mIHVucHJpbnRhYmxlCisJICogbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAqLworCWxlbiA9IDA7CisJcCA9IHM7CisJd2hpbGUgKCpwICE9IE5VTCkKKwl7CisJICAgIGlmICgobCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkpID4gMSkKKwkgICAgeworCQljID0gKCptYl9wdHIyY2hhcikocCk7CisJCXAgKz0gbDsKKwkJaWYgKHZpbV9pc3ByaW50YyhjKSkKKwkJICAgIGxlbiArPSBsOworCQllbHNlCisJCXsKKwkJICAgIHRyYW5zY2hhcl9oZXgoaGV4YnVmLCBjKTsKKwkJICAgIGxlbiArPSBTVFJMRU4oaGV4YnVmKTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlsID0gYnl0ZTJjZWxscygqcCsrKTsKKwkJaWYgKGwgPiAwKQorCQkgICAgbGVuICs9IGw7CisJCWVsc2UKKwkJICAgIGxlbiArPSA0OwkvKiBpbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgKi8KKwkgICAgfQorCX0KKwlyZXMgPSBhbGxvYygodW5zaWduZWQpKGxlbiArIDEpKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJcmVzID0gYWxsb2MoKHVuc2lnbmVkKSh2aW1fc3Ryc2l6ZShzKSArIDEpKTsKKyAgICBpZiAocmVzICE9IE5VTEwpCisgICAgeworCSpyZXMgPSBOVUw7CisJcCA9IHM7CisJd2hpbGUgKCpwICE9IE5VTCkKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlICYmIChsID0gKCptYl9wdHIybGVuX2NoZWNrKShwKSkgPiAxKQorCSAgICB7CisJCWMgPSAoKm1iX3B0cjJjaGFyKShwKTsKKwkJaWYgKHZpbV9pc3ByaW50YyhjKSkKKwkJICAgIFNUUk5DQVQocmVzLCBwLCBsKTsJLyogYXBwZW5kIHByaW50YWJsZSBtdWx0aS1ieXRlIGNoYXIgKi8KKwkJZWxzZQorCQkgICAgdHJhbnNjaGFyX2hleChyZXMgKyBTVFJMRU4ocmVzKSwgYyk7CisJCXAgKz0gbDsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJU1RSQ0FUKHJlcywgdHJhbnNjaGFyX2J5dGUoKnArKykpOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1NZTl9ITCkgfHwgZGVmaW5lZChGRUFUX0lOU19FWFBBTkQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ29udmVydCB0aGUgc3RyaW5nICJwW2xlbl0iIHRvIGRvIGlnbm9yZS1jYXNlIGNvbXBhcmluZy4gIFVzZXMgdGhlIGN1cnJlbnQKKyAqIGxvY2FsZS4gIFJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZyAoTlVMTCBmb3Igb3V0LW9mLW1lbW9yeSkuCisgKi8KKyAgICBjaGFyX3UgKgorc3RyX2ZvbGRjYXNlKHN0ciwgbGVuKQorICAgIGNoYXJfdQkqc3RyOworICAgIGludAkJbGVuOworeworICAgIGdhcnJheV9UCWdhOworICAgIGludAkJaTsKKworI2RlZmluZSBHQV9DSEFSKGkpICAoKGNoYXJfdSAqKWdhLmdhX2RhdGEpW2ldCisjZGVmaW5lIEdBX1BUUihpKSAgICgoY2hhcl91ICopZ2EuZ2FfZGF0YSArIGkpCisKKyAgICAvKiBDb3B5ICJzdHIiIGludG8gYWxsb2NhdGVkIG1lbW9yeSwgdW5tb2RpZmllZC4gKi8KKyAgICBnYV9pbml0MigmZ2EsIDEsIDEwKTsKKyAgICBpZiAoZ2FfZ3JvdygmZ2EsIGxlbiArIDEpID09IEZBSUwpCisJcmV0dXJuIE5VTEw7CisgICAgbWNoX21lbW1vdmUoZ2EuZ2FfZGF0YSwgc3RyLCAoc2l6ZV90KWxlbik7CisgICAgR0FfQ0hBUihsZW4pID0gTlVMOworICAgIGdhLmdhX2xlbiA9IGxlbjsKKyAgICBnYS5nYV9yb29tIC09IGxlbjsKKworICAgIC8qIE1ha2UgZWFjaCBjaGFyYWN0ZXIgbG93ZXIgY2FzZS4gKi8KKyAgICBpID0gMDsKKyAgICB3aGlsZSAoR0FfQ0hBUihpKSAhPSBOVUwpCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoZW5jX3V0ZjggfHwgKGhhc19tYnl0ZSAmJiBNQl9CWVRFMkxFTihHQV9DSEFSKGkpKSA+IDEpKQorCXsKKwkgICAgaWYgKGVuY191dGY4KQorCSAgICB7CisJCWludAljLCBsYzsKKworCQljID0gdXRmX3B0cjJjaGFyKEdBX1BUUihpKSk7CisJCWxjID0gdXRmX3RvbG93ZXIoYyk7CisJCWlmIChjICE9IGxjKQorCQl7CisJCSAgICBpbnQJICAgIG9sID0gdXRmX2NoYXIybGVuKGMpOworCQkgICAgaW50CSAgICBubCA9IHV0Zl9jaGFyMmxlbihsYyk7CisKKwkJICAgIC8qIElmIHRoZSBieXRlIGxlbmd0aCBjaGFuZ2VzIG5lZWQgdG8gc2hpZnQgdGhlIGZvbGxvd2luZworCQkgICAgICogY2hhcmFjdGVycyBmb3J3YXJkIG9yIGJhY2t3YXJkLiAqLworCQkgICAgaWYgKG9sICE9IG5sKQorCQkgICAgeworCQkJaWYgKG5sID4gb2wpCisJCQkgICAgaWYgKGdhX2dyb3coJmdhLCBubCAtIG9sKSA9PSBGQUlMKQorCQkJICAgIHsKKwkJCQkvKiBvdXQgb2YgbWVtb3J5LCBrZWVwIG9sZCBjaGFyICovCisJCQkJbGMgPSBjOworCQkJCW5sID0gb2w7CisJCQkgICAgfQorCQkJaWYgKG9sICE9IG5sKQorCQkJeworCQkJICAgIG1jaF9tZW1tb3ZlKEdBX1BUUihpKSArIG5sLCBHQV9QVFIoaSkgKyBvbCwKKwkJCQkJCSAgU1RSTEVOKEdBX1BUUihpKSArIG9sKSArIDEpOworCQkJICAgIGdhLmdhX2xlbiArPSBubCAtIG9sOworCQkJICAgIGdhLmdhX3Jvb20gLT0gbmwgLSBvbDsKKwkJCX0KKwkJICAgIH0KKwkJICAgICh2b2lkKXV0Zl9jaGFyMmJ5dGVzKGxjLCBHQV9QVFIoaSkpOworCQl9CisJICAgIH0KKwkgICAgLyogc2tpcCB0byBuZXh0IG11bHRpLWJ5dGUgY2hhciAqLworCSAgICBpICs9ICgqbWJfcHRyMmxlbl9jaGVjaykoR0FfUFRSKGkpKTsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBHQV9DSEFSKGkpID0gVE9MT1dFUl9MT0MoR0FfQ0hBUihpKSk7CisJICAgICsraTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIChjaGFyX3UgKilnYS5nYV9kYXRhOworfQorI2VuZGlmCisKKy8qCisgKiBDYXRjaCAyMjogY2hhcnRhYltdIGNhbid0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgb3B0aW9ucyBhcmUKKyAqIGluaXRpYWxpemVkLCBhbmQgaW5pdGlhbGl6aW5nIG9wdGlvbnMgbWF5IGNhdXNlIHRyYW5zY2hhcigpIHRvIGJlIGNhbGxlZCEKKyAqIFdoZW4gY2hhcnRhYl9pbml0aWFsaXplZCA9PSBGQUxTRSBkb24ndCB1c2UgY2hhcnRhYltdLgorICogRG9lcyBOT1Qgd29yayBmb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLCBjIG11c3QgYmUgPD0gMjU1LgorICogQWxzbyBkb2Vzbid0IHdvcmsgZm9yIHRoZSBmaXJzdCBieXRlIG9mIGEgbXVsdGktYnl0ZSwgImMiIG11c3QgYmUgYQorICogY2hhcmFjdGVyIQorICovCitzdGF0aWMgY2hhcl91CXRyYW5zY2hhcl9idWZbN107CisKKyAgICBjaGFyX3UgKgordHJhbnNjaGFyKGMpCisgICAgaW50CQljOworeworICAgIGludAkJCWk7CisKKyAgICBpID0gMDsKKyAgICBpZiAoSVNfU1BFQ0lBTChjKSkJICAgIC8qIHNwZWNpYWwga2V5IGNvZGUsIGRpc3BsYXkgYXMgfkAgY2hhciAqLworICAgIHsKKwl0cmFuc2NoYXJfYnVmWzBdID0gJ34nOworCXRyYW5zY2hhcl9idWZbMV0gPSAnQCc7CisJaSA9IDI7CisJYyA9IEtfU0VDT05EKGMpOworICAgIH0KKworICAgIGlmICgoIWNoYXJ0YWJfaW5pdGlhbGl6ZWQgJiYgKAorI2lmZGVmIEVCQ0RJQworCQkgICAgKGMgPj0gNjQgJiYgYyA8IDI1NSkKKyNlbHNlCisJCSAgICAoYyA+PSAnICcgJiYgYyA8PSAnficpCisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZLTUFQCisJCQl8fCBGX2lzY2hhcihjKQorI2VuZGlmCisJCSkpIHx8IChjIDwgMjU2ICYmIHZpbV9pc3ByaW50Y19zdHJpY3QoYykpKQorICAgIHsKKwkvKiBwcmludGFibGUgY2hhcmFjdGVyICovCisJdHJhbnNjaGFyX2J1ZltpXSA9IGM7CisJdHJhbnNjaGFyX2J1ZltpICsgMV0gPSBOVUw7CisgICAgfQorICAgIGVsc2UKKwl0cmFuc2NoYXJfbm9ucHJpbnQodHJhbnNjaGFyX2J1ZiArIGksIGMpOworICAgIHJldHVybiB0cmFuc2NoYXJfYnVmOworfQorCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIExpa2UgdHJhbnNjaGFyKCksIGJ1dCBjYWxsZWQgd2l0aCBhIGJ5dGUgaW5zdGVhZCBvZiBhIGNoYXJhY3Rlci4gIENoZWNrcworICogZm9yIGFuIGlsbGVnYWwgVVRGLTggYnl0ZS4KKyAqLworICAgIGNoYXJfdSAqCit0cmFuc2NoYXJfYnl0ZShjKQorICAgIGludAkJYzsKK3sKKyAgICBpZiAoZW5jX3V0ZjggJiYgYyA+PSAweDgwKQorICAgIHsKKwl0cmFuc2NoYXJfbm9ucHJpbnQodHJhbnNjaGFyX2J1ZiwgYyk7CisJcmV0dXJuIHRyYW5zY2hhcl9idWY7CisgICAgfQorICAgIHJldHVybiB0cmFuc2NoYXIoYyk7Cit9CisjZW5kaWYKKworLyoKKyAqIENvbnZlcnQgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXIgdG8gdHdvIG9yIG1vcmUgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4KKyAqICJidWZbXSIuICAiYnVmIiBuZWVkcyB0byBiZSBhYmxlIHRvIGhvbGQgZml2ZSBieXRlcy4KKyAqIERvZXMgTk9UIHdvcmsgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycywgYyBtdXN0IGJlIDw9IDI1NS4KKyAqLworICAgIHZvaWQKK3RyYW5zY2hhcl9ub25wcmludChidWYsIGMpCisgICAgY2hhcl91CSpidWY7CisgICAgaW50CQljOworeworICAgIGlmIChjID09IE5MKQorCWMgPSBOVUw7CQkvKiB3ZSB1c2UgbmV3bGluZSBpbiBwbGFjZSBvZiBhIE5VTCAqLworICAgIGVsc2UgaWYgKGMgPT0gQ0FSICYmIGdldF9maWxlZm9ybWF0KGN1cmJ1ZikgPT0gRU9MX01BQykKKwljID0gTkw7CQkJLyogd2UgdXNlIENSIGluIHBsYWNlIG9mICBOTCBpbiB0aGlzIGNhc2UgKi8KKworICAgIGlmIChkeV9mbGFncyAmIERZX1VIRVgpCQkvKiAnZGlzcGxheScgaGFzICJ1aGV4IiAqLworCXRyYW5zY2hhcl9oZXgoYnVmLCBjKTsKKworI2lmZGVmIEVCQ0RJQworICAgIC8qIEZvciBFQkNESUMgb25seSB0aGUgY2hhcmFjdGVycyAwLTYzIGFuZCAyNTUgYXJlIG5vdCBwcmludGFibGUgKi8KKyAgICBlbHNlIGlmIChDdHJsQ2hhcihjKSAhPSAwIHx8IGMgPT0gREVMKQorI2Vsc2UKKyAgICBlbHNlIGlmIChjIDw9IDB4N2YpCQkJCS8qIDB4MDAgLSAweDFmIGFuZCAweDdmICovCisjZW5kaWYKKyAgICB7CisJYnVmWzBdID0gJ14nOworI2lmZGVmIEVCQ0RJQworCWlmIChjID09IERFTCkKKwkgICAgYnVmWzFdID0gJz8nOwkJLyogREVMIGRpc3BsYXllZCBhcyBePyAqLworCWVsc2UKKwkgICAgYnVmWzFdID0gQ3RybENoYXIoYyk7CisjZWxzZQorCWJ1ZlsxXSA9IGMgXiAweDQwOwkJLyogREVMIGRpc3BsYXllZCBhcyBePyAqLworI2VuZGlmCisKKwlidWZbMl0gPSBOVUw7CisgICAgfQorI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBlbHNlIGlmIChlbmNfdXRmOCAmJiBjID49IDB4ODApCisgICAgeworCXRyYW5zY2hhcl9oZXgoYnVmLCBjKTsKKyAgICB9CisjZW5kaWYKKyNpZm5kZWYgRUJDRElDCisgICAgZWxzZSBpZiAoYyA+PSAnICcgKyAweDgwICYmIGMgPD0gJ34nICsgMHg4MCkgICAgLyogMHhhMCAtIDB4ZmUgKi8KKyAgICB7CisJYnVmWzBdID0gJ3wnOworCWJ1ZlsxXSA9IGMgLSAweDgwOworCWJ1ZlsyXSA9IE5VTDsKKyAgICB9CisjZWxzZQorICAgIGVsc2UgaWYgKGMgPCA2NCkKKyAgICB7CisJYnVmWzBdID0gJ34nOworCWJ1ZlsxXSA9IE1ldGFDaGFyKGMpOworCWJ1ZlsyXSA9IE5VTDsKKyAgICB9CisjZW5kaWYKKyAgICBlbHNlCQkJCQkgICAgLyogMHg4MCAtIDB4OWYgYW5kIDB4ZmYgKi8KKyAgICB7CisJLyoKKwkgKiBUT0RPOiBFQkNESUMgSSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGlzIGNoYXJzLCBzbyBJIGRpc3BsYXkKKwkgKiB0aGVtIGFzICd+PycgZm9yIG5vdworCSAqLworCWJ1ZlswXSA9ICd+JzsKKyNpZmRlZiBFQkNESUMKKwlidWZbMV0gPSAnPyc7CQkJLyogMHhmZiBkaXNwbGF5ZWQgYXMgfj8gKi8KKyNlbHNlCisJYnVmWzFdID0gKGMgLSAweDgwKSBeIDB4NDA7CS8qIDB4ZmYgZGlzcGxheWVkIGFzIH4/ICovCisjZW5kaWYKKwlidWZbMl0gPSBOVUw7CisgICAgfQorfQorCisgICAgdm9pZAordHJhbnNjaGFyX2hleChidWYsIGMpCisgICAgY2hhcl91CSpidWY7CisgICAgaW50CQljOworeworICAgIGludAkJaSA9IDA7CisKKyAgICBidWZbMF0gPSAnPCc7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChjID4gMjU1KQorICAgIHsKKwlidWZbKytpXSA9IG5yMmhleCgodW5zaWduZWQpYyA+PiAxMik7CisJYnVmWysraV0gPSBucjJoZXgoKHVuc2lnbmVkKWMgPj4gOCk7CisgICAgfQorI2VuZGlmCisgICAgYnVmWysraV0gPSBucjJoZXgoKHVuc2lnbmVkKWMgPj4gNCk7CisgICAgYnVmWysraV0gPSBucjJoZXgoYyk7CisgICAgYnVmWysraV0gPSAnPic7CisgICAgYnVmWysraV0gPSBOVUw7Cit9CisKKy8qCisgKiBDb252ZXJ0IHRoZSBsb3dlciA0IGJpdHMgb2YgYnl0ZSAiYyIgdG8gaXRzIGhleCBjaGFyYWN0ZXIuCisgKiBMb3dlciBjYXNlIGxldHRlcnMgYXJlIHVzZWQgdG8gYXZvaWQgdGhlIGNvbmZ1c2lvbiBvZiA8RjE+IGJlaW5nIDB4ZjEgb3IKKyAqIGZ1bmN0aW9uIGtleSAxLgorICovCisgICAgc3RhdGljIGludAorbnIyaGV4KGMpCisgICAgaW50CQljOworeworICAgIGlmICgoYyAmIDB4ZikgPD0gOSkKKwlyZXR1cm4gKGMgJiAweGYpICsgJzAnOworICAgIHJldHVybiAoYyAmIDB4ZikgLSAxMCArICdhJzsKK30KKworLyoKKyAqIFJldHVybiBudW1iZXIgb2YgZGlzcGxheSBjZWxscyBvY2N1cGllZCBieSBieXRlICJiIi4KKyAqIENhbGxlciBtdXN0IG1ha2Ugc3VyZSAwIDw9IGIgPD0gMjU1LgorICogRm9yIG11bHRpLWJ5dGUgbW9kZSAiYiIgbXVzdCBiZSB0aGUgZmlyc3QgYnl0ZSBvZiBhIGNoYXJhY3Rlci4KKyAqIEEgVEFCIGlzIGNvdW50ZWQgYXMgdHdvIGNlbGxzOiAiXkkiLgorICogRm9yIFVURi04IG1vZGUgdGhpcyB3aWxsIHJldHVybiAwIGZvciBieXRlcyA+PSAweDgwLCBiZWNhdXNlIHRoZSBudW1iZXIgb2YKKyAqIGNlbGxzIGRlcGVuZHMgb24gZnVydGhlciBieXRlcy4KKyAqLworICAgIGludAorYnl0ZTJjZWxscyhiKQorICAgIGludAkJYjsKK3sKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGVuY191dGY4ICYmIGIgPj0gMHg4MCkKKwlyZXR1cm4gMDsKKyNlbmRpZgorICAgIHJldHVybiAoY2hhcnRhYltiXSAmIENUX0NFTExfTUFTSyk7Cit9CisKKy8qCisgKiBSZXR1cm4gbnVtYmVyIG9mIGRpc3BsYXkgY2VsbHMgb2NjdXBpZWQgYnkgY2hhcmFjdGVyICJjIi4KKyAqICJjIiBjYW4gYmUgYSBzcGVjaWFsIGtleSAobmVnYXRpdmUgbnVtYmVyKSBpbiB3aGljaCBjYXNlIDMgb3IgNCBpcyByZXR1cm5lZC4KKyAqIEEgVEFCIGlzIGNvdW50ZWQgYXMgdHdvIGNlbGxzOiAiXkkiIG9yIGZvdXI6ICI8MDk+Ii4KKyAqLworICAgIGludAorY2hhcjJjZWxscyhjKQorICAgIGludAkJYzsKK3sKKyAgICBpZiAoSVNfU1BFQ0lBTChjKSkKKwlyZXR1cm4gY2hhcjJjZWxscyhLX1NFQ09ORChjKSkgKyAyOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoYyA+PSAweDgwKQorICAgIHsKKwkvKiBVVEYtODogYWJvdmUgMHg4MCBuZWVkIHRvIGNoZWNrIHRoZSB2YWx1ZSAqLworCWlmIChlbmNfdXRmOCkKKwkgICAgcmV0dXJuIHV0Zl9jaGFyMmNlbGxzKGMpOworCS8qIERCQ1M6IGRvdWJsZS1ieXRlIG1lYW5zIGRvdWJsZS13aWR0aCwgZXhjZXB0IGZvciBldWMtanAgd2l0aCBmaXJzdAorCSAqIGJ5dGUgMHg4ZSAqLworCWlmIChlbmNfZGJjcyAhPSAwICYmIGMgPj0gMHgxMDApCisJeworCSAgICBpZiAoZW5jX2RiY3MgPT0gREJDU19KUE5VICYmICgodW5zaWduZWQpYyA+PiA4KSA9PSAweDhlKQorCQlyZXR1cm4gMTsKKwkgICAgcmV0dXJuIDI7CisJfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiAoY2hhcnRhYltjICYgMHhmZl0gJiBDVF9DRUxMX01BU0spOworfQorCisvKgorICogUmV0dXJuIG51bWJlciBvZiBkaXNwbGF5IGNlbGxzIG9jY3VwaWVkIGJ5IGNoYXJhY3RlciBhdCAiKnAiLgorICogQSBUQUIgaXMgY291bnRlZCBhcyB0d28gY2VsbHM6ICJeSSIgb3IgZm91cjogIjwwOT4iLgorICovCisgICAgaW50CitwdHIyY2VsbHMocCkKKyAgICBjaGFyX3UJKnA7Cit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIEZvciBVVEYtOCB3ZSBuZWVkIHRvIGxvb2sgYXQgbW9yZSBieXRlcyBpZiB0aGUgZmlyc3QgYnl0ZSBpcyA+PSAweDgwLiAqLworICAgIGlmIChlbmNfdXRmOCAmJiAqcCA+PSAweDgwKQorCXJldHVybiB1dGZfcHRyMmNlbGxzKHApOworICAgIC8qIEZvciBEQkNTIHdlIGNhbiB0ZWxsIHRoZSBjZWxsIGNvdW50IGZyb20gdGhlIGZpcnN0IGJ5dGUuICovCisjZW5kaWYKKyAgICByZXR1cm4gKGNoYXJ0YWJbKnBdICYgQ1RfQ0VMTF9NQVNLKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc3RyaW5nICJzIiB3aWxsIHRha2Ugb24gdGhlIHNjcmVlbiwKKyAqIGNvdW50aW5nIFRBQnMgYXMgdHdvIGNoYXJhY3RlcnM6ICJeSSIuCisgKi8KKyAgICBpbnQKK3ZpbV9zdHJzaXplKHMpCisgICAgY2hhcl91CSpzOworeworICAgIHJldHVybiB2aW1fc3RybnNpemUocywgKGludClNQVhDT0wpOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBzdHJpbmcgInNbbGVuXSIgd2lsbCB0YWtlIG9uIHRoZSBzY3JlZW4sCisgKiBjb3VudGluZyBUQUJzIGFzIHR3byBjaGFyYWN0ZXJzOiAiXkkiLgorICovCisgICAgaW50Cit2aW1fc3RybnNpemUocywgbGVuKQorICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWxlbjsKK3sKKyAgICBpbnQJCXNpemUgPSAwOworCisgICAgd2hpbGUgKCpzICE9IE5VTCAmJiAtLWxlbiA+PSAwKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIGludAkgICAgbCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocyk7CisKKwkgICAgc2l6ZSArPSBwdHIyY2VsbHMocyk7CisJICAgIHMgKz0gbDsKKwkgICAgbGVuIC09IGwgLSAxOworCX0KKwllbHNlCisjZW5kaWYKKwkgICAgc2l6ZSArPSBieXRlMmNlbGxzKCpzKyspOworICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgJ2MnIHdpbGwgdGFrZSBvbiB0aGUgc2NyZWVuLCB0YWtpbmcKKyAqIGludG8gYWNjb3VudCB0aGUgc2l6ZSBvZiBhIHRhYi4KKyAqIFVzZSBhIGRlZmluZSB0byBtYWtlIGl0IGZhc3QsIHRoaXMgaXMgdXNlZCB2ZXJ5IG9mdGVuISEhCisgKiBBbHNvIHNlZSBnZXR2Y29sKCkgYmVsb3cuCisgKi8KKworI2RlZmluZSBSRVRfV0lOX0JVRl9DSEFSVEFCU0laRSh3cCwgYnVmLCBwLCBjb2wpIFwKKyAgICBpZiAoKihwKSA9PSBUQUIgJiYgKCEod3ApLT53X3BfbGlzdCB8fCBsY3NfdGFiMSkpIFwKKyAgICB7IFwKKwlpbnQgdHM7IFwKKwl0cyA9IChidWYpLT5iX3BfdHM7IFwKKwlyZXR1cm4gKGludCkodHMgLSAoY29sICUgdHMpKTsgXAorICAgIH0gXAorICAgIGVsc2UgXAorCXJldHVybiBwdHIyY2VsbHMocCk7CisKKyNpZiBkZWZpbmVkKEZFQVRfVlJFUExBQ0UpIHx8IGRlZmluZWQoRkVBVF9FWF9FWFRSQSkgfHwgZGVmaW5lZChGRUFUX0dVSSkgXAorCXx8IGRlZmluZWQoRkVBVF9WSVJUVUFMRURJVCkgfHwgZGVmaW5lZChQUk9UTykKKyAgICBpbnQKK2NoYXJ0YWJzaXplKHAsIGNvbCkKKyAgICBjaGFyX3UJKnA7CisgICAgY29sbnJfVAljb2w7Cit7CisgICAgUkVUX1dJTl9CVUZfQ0hBUlRBQlNJWkUoY3Vyd2luLCBjdXJidWYsIHAsIGNvbCkKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9MSU5FQlJFQUsKKyAgICBzdGF0aWMgaW50Cit3aW5fY2hhcnRhYnNpemUod3AsIHAsIGNvbCkKKyAgICB3aW5fVAkqd3A7CisgICAgY2hhcl91CSpwOworICAgIGNvbG5yX1QJY29sOworeworICAgIFJFVF9XSU5fQlVGX0NIQVJUQUJTSVpFKHdwLCB3cC0+d19idWZmZXIsIHAsIGNvbCkKK30KKyNlbmRpZgorCisvKgorICogcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGUgc3RyaW5nICdzJyB3aWxsIHRha2Ugb24gdGhlIHNjcmVlbiwKKyAqIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHNpemUgb2YgYSB0YWIKKyAqLworICAgIGludAorbGluZXRhYnNpemUocykKKyAgICBjaGFyX3UJKnM7Cit7CisgICAgY29sbnJfVAljb2wgPSAwOworCisgICAgd2hpbGUgKCpzICE9IE5VTCkKKwljb2wgKz0gbGJyX2NoYXJ0YWJzaXplX2FkdigmcywgY29sKTsKKyAgICByZXR1cm4gKGludCljb2w7Cit9CisKKy8qCisgKiBMaWtlIGxpbmV0YWJzaXplKCksIGJ1dCBmb3IgYSBnaXZlbiB3aW5kb3cgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBvbmUuCisgKi8KKyAgICBpbnQKK3dpbl9saW5ldGFic2l6ZSh3cCwgcCwgbGVuKQorICAgIHdpbl9UCSp3cDsKKyAgICBjaGFyX3UJKnA7CisgICAgY29sbnJfVAlsZW47Cit7CisgICAgY29sbnJfVAljb2wgPSAwOworICAgIGNoYXJfdQkqczsKKworICAgIGZvciAocyA9IHA7ICpzICE9IE5VTCAmJiAobGVuID09IE1BWENPTCB8fCBzIDwgcCArIGxlbik7ICkKKyAgICB7CisJY29sICs9IHdpbl9sYnJfY2hhcnRhYnNpemUod3AsIHMsIGNvbCwgTlVMTCk7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKTsKKwllbHNlCisjZW5kaWYKKwkgICAgKytzOworICAgIH0KKyAgICByZXR1cm4gKGludCljb2w7Cit9CisKKy8qCisgKiByZXR1cm4gVFJVRSBpZiAnYycgaXMgYSBub3JtYWwgaWRlbnRpZmllciBjaGFyYWN0ZXIKKyAqIGxldHRlcnMgYW5kIGNoYXJhY3RlcnMgZnJvbSAnaXNpZGVudCcgb3B0aW9uLgorICovCisgICAgaW50Cit2aW1faXNJRGMoYykKKyAgICBpbnQgYzsKK3sKKyAgICByZXR1cm4gKGMgPiAwICYmIGMgPCAweDEwMCAmJiAoY2hhcnRhYltjXSAmIENUX0lEX0NIQVIpKTsKK30KKworLyoKKyAqIHJldHVybiBUUlVFIGlmICdjJyBpcyBhIGtleXdvcmQgY2hhcmFjdGVyOiBMZXR0ZXJzIGFuZCBjaGFyYWN0ZXJzIGZyb20KKyAqICdpc2tleXdvcmQnIG9wdGlvbiBmb3IgY3VycmVudCBidWZmZXIuCisgKiBGb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIG1iX2dldF9jbGFzcygpIGlzIHVzZWQgKGJ1aWx0aW4gcnVsZXMpLgorICovCisgICAgaW50Cit2aW1faXN3b3JkYyhjKQorICAgIGludCBjOworeworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoYyA+PSAweDEwMCkKKyAgICB7CisJaWYgKGVuY19kYmNzICE9IDApCisJICAgIHJldHVybiBkYmNzX2NsYXNzKCh1bnNpZ25lZCljID4+IDgsIGMgJiAweGZmKSA+PSAyOworCWlmIChlbmNfdXRmOCkKKwkgICAgcmV0dXJuIHV0Zl9jbGFzcyhjKSA+PSAyOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiAoYyA+IDAgJiYgYyA8IDB4MTAwICYmIEdFVF9DSEFSVEFCKGN1cmJ1ZiwgYykgIT0gMCk7Cit9CisKKy8qCisgKiBKdXN0IGxpa2UgdmltX2lzd29yZGMoKSBidXQgdXNlcyBhIHBvaW50ZXIgdG8gdGhlIChtdWx0aS1ieXRlKSBjaGFyYWN0ZXIuCisgKi8KKyAgICBpbnQKK3ZpbV9pc3dvcmRwKHApCisgICAgY2hhcl91ICpwOworeworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoaGFzX21ieXRlICYmIE1CX0JZVEUyTEVOKCpwKSA+IDEpCisJcmV0dXJuIG1iX2dldF9jbGFzcyhwKSA+PSAyOworI2VuZGlmCisgICAgcmV0dXJuIEdFVF9DSEFSVEFCKGN1cmJ1ZiwgKnApICE9IDA7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfU1lOX0hMKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIGludAordmltX2lzd29yZGNfYnVmKHAsIGJ1ZikKKyAgICBjaGFyX3UJKnA7CisgICAgYnVmX1QJKmJ1ZjsKK3sKKyMgaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChoYXNfbWJ5dGUgJiYgTUJfQllURTJMRU4oKnApID4gMSkKKwlyZXR1cm4gbWJfZ2V0X2NsYXNzKHApID49IDI7CisjIGVuZGlmCisgICAgcmV0dXJuIChHRVRfQ0hBUlRBQihidWYsICpwKSAhPSAwKTsKK30KKyNlbmRpZgorCisvKgorICogcmV0dXJuIFRSVUUgaWYgJ2MnIGlzIGEgdmFsaWQgZmlsZS1uYW1lIGNoYXJhY3RlcgorICogQXNzdW1lIGNoYXJhY3RlcnMgYWJvdmUgMHgxMDAgYXJlIHZhbGlkIChtdWx0aS1ieXRlKS4KKyAqLworICAgIGludAordmltX2lzZmlsZWMoYykKKyAgICBpbnQJYzsKK3sKKyAgICByZXR1cm4gKGMgPj0gMHgxMDAgfHwgKGMgPiAwICYmIChjaGFydGFiW2NdICYgQ1RfRk5BTUVfQ0hBUikpKTsKK30KKworLyoKKyAqIHJldHVybiBUUlVFIGlmICdjJyBpcyBhIHByaW50YWJsZSBjaGFyYWN0ZXIKKyAqIEFzc3VtZSBjaGFyYWN0ZXJzIGFib3ZlIDB4MTAwIGFyZSBwcmludGFibGUgKG11bHRpLWJ5dGUpLCBleGNlcHQgZm9yCisgKiBVbmljb2RlLgorICovCisgICAgaW50Cit2aW1faXNwcmludGMoYykKKyAgICBpbnQgYzsKK3sKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGVuY191dGY4ICYmIGMgPj0gMHgxMDApCisJcmV0dXJuIHV0Zl9wcmludGFibGUoYyk7CisjZW5kaWYKKyAgICByZXR1cm4gKGMgPj0gMHgxMDAgfHwgKGMgPiAwICYmIChjaGFydGFiW2NdICYgQ1RfUFJJTlRfQ0hBUikpKTsKK30KKworLyoKKyAqIFN0cmljdCB2ZXJzaW9uIG9mIHZpbV9pc3ByaW50YyhjKSwgZG9uJ3QgcmV0dXJuIFRSVUUgaWYgImMiIGlzIHRoZSBoZWFkCisgKiBieXRlIG9mIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyLgorICovCisgICAgaW50Cit2aW1faXNwcmludGNfc3RyaWN0KGMpCisgICAgaW50CWM7Cit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChlbmNfZGJjcyAhPSAwICYmIGMgPCAweDEwMCAmJiBNQl9CWVRFMkxFTihjKSA+IDEpCisJcmV0dXJuIEZBTFNFOworICAgIGlmIChlbmNfdXRmOCAmJiBjID49IDB4MTAwKQorCXJldHVybiB1dGZfcHJpbnRhYmxlKGMpOworI2VuZGlmCisgICAgcmV0dXJuIChjID49IDB4MTAwIHx8IChjID4gMCAmJiAoY2hhcnRhYltjXSAmIENUX1BSSU5UX0NIQVIpKSk7Cit9CisKKy8qCisgKiBsaWtlIGNoYXJ0YWJzaXplKCksIGJ1dCBhbHNvIGNoZWNrIGZvciBsaW5lIGJyZWFrcyBvbiB0aGUgc2NyZWVuCisgKi8KKyAgICBpbnQKK2xicl9jaGFydGFic2l6ZShzLCBjb2wpCisgICAgdW5zaWduZWQgY2hhcgkqczsKKyAgICBjb2xucl9UCQljb2w7Cit7CisjaWZkZWYgRkVBVF9MSU5FQlJFQUsKKyAgICBpZiAoIWN1cndpbi0+d19wX2xiciAmJiAqcF9zYnIgPT0gTlVMKQorICAgIHsKKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoY3Vyd2luLT53X3Bfd3JhcCkKKwkgICAgcmV0dXJuIHdpbl9ub2xicl9jaGFydGFic2l6ZShjdXJ3aW4sIHMsIGNvbCwgTlVMTCk7CisjZW5kaWYKKwlSRVRfV0lOX0JVRl9DSEFSVEFCU0laRShjdXJ3aW4sIGN1cmJ1ZiwgcywgY29sKQorI2lmZGVmIEZFQVRfTElORUJSRUFLCisgICAgfQorICAgIHJldHVybiB3aW5fbGJyX2NoYXJ0YWJzaXplKGN1cndpbiwgcywgY29sLCBOVUxMKTsKKyNlbmRpZgorfQorCisvKgorICogQ2FsbCBsYnJfY2hhcnRhYnNpemUoKSBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlci4KKyAqLworICAgIGludAorbGJyX2NoYXJ0YWJzaXplX2FkdihzLCBjb2wpCisgICAgY2hhcl91CSoqczsKKyAgICBjb2xucl9UCWNvbDsKK3sKKyAgICBpbnQJCXJldHZhbDsKKworICAgIHJldHZhbCA9IGxicl9jaGFydGFic2l6ZSgqcywgY29sKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGhhc19tYnl0ZSkKKwkqcyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKCpzKTsKKyAgICBlbHNlCisjZW5kaWYKKwkrKypzOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdmVyeSBvZnRlbiwga2VlcCBpdCBmYXN0ISEhIQorICoKKyAqIElmICJoZWFkcCIgbm90IE5VTEwsIHNldCAqaGVhZHAgdG8gdGhlIHNpemUgb2Ygd2hhdCB3ZSBmb3IgJ3Nob3dicmVhaycKKyAqIHN0cmluZyBhdCBzdGFydCBvZiBsaW5lLiAgV2FybmluZzogKmhlYWRwIGlzIG9ubHkgc2V0IGlmIGl0J3MgYSBub24temVybworICogdmFsdWUsIGluaXQgdG8gMCBiZWZvcmUgY2FsbGluZy4KKyAqLworLypBUkdTVVNFRCovCisgICAgaW50Cit3aW5fbGJyX2NoYXJ0YWJzaXplKHdwLCBzLCBjb2wsIGhlYWRwKQorICAgIHdpbl9UCSp3cDsKKyAgICBjaGFyX3UJKnM7CisgICAgY29sbnJfVAljb2w7CisgICAgaW50CQkqaGVhZHA7Cit7CisjaWZkZWYgRkVBVF9MSU5FQlJFQUsKKyAgICBpbnQJCWM7CisgICAgaW50CQlzaXplOworICAgIGNvbG5yX1QJY29sMjsKKyAgICBjb2xucl9UCWNvbG1heDsKKyAgICBpbnQJCWFkZGVkOworIyBpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQltYl9hZGRlZCA9IDA7CisjIGVsc2UKKyMgIGRlZmluZSBtYl9hZGRlZCAwCisjIGVuZGlmCisgICAgaW50CQludW1iZXJleHRyYTsKKyAgICBjaGFyX3UJKnBzOworICAgIGludAkJdGFiX2NvcnIgPSAoKnMgPT0gVEFCKTsKKworICAgIC8qCisgICAgICogTm8gJ2xpbmVicmVhaycgYW5kICdzaG93YnJlYWsnOiByZXR1cm4gcXVpY2tseS4KKyAgICAgKi8KKyAgICBpZiAoIXdwLT53X3BfbGJyICYmICpwX3NiciA9PSBOVUwpCisjZW5kaWYKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWlmICh3cC0+d19wX3dyYXApCisJICAgIHJldHVybiB3aW5fbm9sYnJfY2hhcnRhYnNpemUod3AsIHMsIGNvbCwgaGVhZHApOworI2VuZGlmCisJUkVUX1dJTl9CVUZfQ0hBUlRBQlNJWkUod3AsIHdwLT53X2J1ZmZlciwgcywgY29sKQorICAgIH0KKworI2lmZGVmIEZFQVRfTElORUJSRUFLCisgICAgLyoKKyAgICAgKiBGaXJzdCBnZXQgbm9ybWFsIHNpemUsIHdpdGhvdXQgJ2xpbmVicmVhaycKKyAgICAgKi8KKyAgICBzaXplID0gd2luX2NoYXJ0YWJzaXplKHdwLCBzLCBjb2wpOworICAgIGMgPSAqczsKKworICAgIC8qCisgICAgICogSWYgJ2xpbmVicmVhaycgc2V0IGNoZWNrIGF0IGEgYmxhbmsgYmVmb3JlIGEgbm9uLWJsYW5rIGlmIHRoZSBsaW5lCisgICAgICogbmVlZHMgYSBicmVhayBoZXJlCisgICAgICovCisgICAgaWYgKHdwLT53X3BfbGJyCisJICAgICYmIHZpbV9pc2JyZWFrKGMpCisJICAgICYmICF2aW1faXNicmVhayhzWzFdKQorCSAgICAmJiAhd3AtPndfcF9saXN0CisJICAgICYmIHdwLT53X3Bfd3JhcAorIyBpZmRlZiBGRUFUX1ZFUlRTUExJVAorCSAgICAmJiB3cC0+d193aWR0aCAhPSAwCisjIGVuZGlmCisgICAgICAgKQorICAgIHsKKwkvKgorCSAqIENvdW50IGFsbCBjaGFyYWN0ZXJzIGZyb20gZmlyc3Qgbm9uLWJsYW5rIGFmdGVyIGEgYmxhbmsgdXAgdG8gbmV4dAorCSAqIG5vbi1ibGFuayBhZnRlciBhIGJsYW5rLgorCSAqLworCW51bWJlcmV4dHJhID0gd2luX2NvbF9vZmYod3ApOworCWNvbDIgPSBjb2w7CisJY29sbWF4ID0gV19XSURUSCh3cCkgLSBudW1iZXJleHRyYTsKKwlpZiAoY29sID49IGNvbG1heCkKKwkgICAgY29sbWF4ICs9ICgoKGNvbCAtIGNvbG1heCkKKwkJCS8gKGNvbG1heCArIHdpbl9jb2xfb2ZmMih3cCkpKSArIDEpCisJCQkqIChjb2xtYXggKyB3aW5fY29sX29mZjIod3ApKTsKKwlmb3IgKDs7KQorCXsKKwkgICAgcHMgPSBzOworIyBpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCXMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKTsKKwkgICAgZWxzZQorIyBlbmRpZgorCQkrK3M7CisJICAgIGMgPSAqczsKKwkgICAgaWYgKCEoYyAhPSBOVUwKKwkJICAgICYmICh2aW1faXNicmVhayhjKQorCQkJfHwgKCF2aW1faXNicmVhayhjKQorCQkJICAgICYmIChjb2wyID09IGNvbCB8fCAhdmltX2lzYnJlYWsoKnBzKSkpKSkpCisJCWJyZWFrOworCisJICAgIGNvbDIgKz0gd2luX2NoYXJ0YWJzaXplKHdwLCBzLCBjb2wyKTsKKwkgICAgaWYgKGNvbDIgPj0gY29sbWF4KQkJLyogZG9lc24ndCBmaXQgKi8KKwkgICAgeworCQlzaXplID0gY29sbWF4IC0gY29sOworCQl0YWJfY29yciA9IEZBTFNFOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisjIGlmZGVmIEZFQVRfTUJZVEUKKyAgICBlbHNlIGlmIChoYXNfbWJ5dGUgJiYgc2l6ZSA9PSAyICYmIE1CX0JZVEUyTEVOKCpzKSA+IDEKKwkJCQkgICAgJiYgd3AtPndfcF93cmFwICYmIGluX3dpbl9ib3JkZXIod3AsIGNvbCkpCisgICAgeworCSsrc2l6ZTsJCS8qIENvdW50IHRoZSAiPiIgaW4gdGhlIGxhc3QgY29sdW1uLiAqLworCW1iX2FkZGVkID0gMTsKKyAgICB9CisjIGVuZGlmCisKKyAgICAvKgorICAgICAqIE1heSBoYXZlIHRvIGFkZCBzb21ldGhpbmcgZm9yICdzaG93YnJlYWsnIHN0cmluZyBhdCBzdGFydCBvZiBsaW5lCisgICAgICogU2V0ICpoZWFkcCB0byB0aGUgc2l6ZSBvZiB3aGF0IHdlIGFkZC4KKyAgICAgKi8KKyAgICBhZGRlZCA9IDA7CisgICAgaWYgKCpwX3NiciAhPSBOVUwgJiYgd3AtPndfcF93cmFwICYmIGNvbCAhPSAwKQorICAgIHsKKwludW1iZXJleHRyYSA9IHdpbl9jb2xfb2ZmKHdwKTsKKwljb2wgKz0gbnVtYmVyZXh0cmEgKyBtYl9hZGRlZDsKKwlpZiAoY29sID49IChjb2xucl9UKVdfV0lEVEgod3ApKQorCXsKKwkgICAgY29sIC09IFdfV0lEVEgod3ApOworCSAgICBudW1iZXJleHRyYSA9IFdfV0lEVEgod3ApIC0gKG51bWJlcmV4dHJhIC0gd2luX2NvbF9vZmYyKHdwKSk7CisJICAgIGlmIChudW1iZXJleHRyYSA+IDApCisJCWNvbCA9IGNvbCAlIG51bWJlcmV4dHJhOworCX0KKwlpZiAoY29sID09IDAgfHwgY29sICsgc2l6ZSA+IChjb2xucl9UKVdfV0lEVEgod3ApKQorCXsKKwkgICAgYWRkZWQgPSB2aW1fc3Ryc2l6ZShwX3Nicik7CisJICAgIGlmICh0YWJfY29ycikKKwkJc2l6ZSArPSAoYWRkZWQgLyB3cC0+d19idWZmZXItPmJfcF90cykgKiB3cC0+d19idWZmZXItPmJfcF90czsKKwkgICAgZWxzZQorCQlzaXplICs9IGFkZGVkOworCSAgICBpZiAoY29sICE9IDApCisJCWFkZGVkID0gMDsKKwl9CisgICAgfQorICAgIGlmIChoZWFkcCAhPSBOVUxMKQorCSpoZWFkcCA9IGFkZGVkICsgbWJfYWRkZWQ7CisgICAgcmV0dXJuIHNpemU7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoRkVBVF9NQllURSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBMaWtlIHdpbl9sYnJfY2hhcnRhYnNpemUoKSwgZXhjZXB0IHRoYXQgd2Uga25vdyAnbGluZWJyZWFrJyBpcyBvZmYgYW5kCisgKiAnd3JhcCcgaXMgb24uICBUaGlzIG1lYW5zIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyIHRoYXQKKyAqIGRvZXNuJ3QgZml0IGF0IHRoZSBlbmQgb2YgdGhlIHNjcmVlbiBsaW5lLgorICovCisgICAgc3RhdGljIGludAord2luX25vbGJyX2NoYXJ0YWJzaXplKHdwLCBzLCBjb2wsIGhlYWRwKQorICAgIHdpbl9UCSp3cDsKKyAgICBjaGFyX3UJKnM7CisgICAgY29sbnJfVAljb2w7CisgICAgaW50CQkqaGVhZHA7Cit7CisgICAgaW50CQluOworCisgICAgaWYgKCpzID09IFRBQiAmJiAoIXdwLT53X3BfbGlzdCB8fCBsY3NfdGFiMSkpCisgICAgeworCW4gPSB3cC0+d19idWZmZXItPmJfcF90czsKKwlyZXR1cm4gKGludCkobiAtIChjb2wgJSBuKSk7CisgICAgfQorICAgIG4gPSBwdHIyY2VsbHMocyk7CisgICAgLyogQWRkIG9uZSBjZWxsIGZvciBhIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZQorICAgICAqIHdpbmRvdywgZGlzcGxheWVkIHdpdGggYSAiPiIuICovCisgICAgaWYgKG4gPT0gMiAmJiBNQl9CWVRFMkxFTigqcykgPiAxICYmIGluX3dpbl9ib3JkZXIod3AsIGNvbCkpCisgICAgeworCWlmIChoZWFkcCAhPSBOVUxMKQorCSAgICAqaGVhZHAgPSAxOworCXJldHVybiAzOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHZpcnR1YWwgY29sdW1uICJ2Y29sIiBpcyBpbiB0aGUgcmlnaHRtb3N0IGNvbHVtbiBvZiB3aW5kb3cKKyAqICJ3cCIuCisgKi8KKyAgICBpbnQKK2luX3dpbl9ib3JkZXIod3AsIHZjb2wpCisgICAgd2luX1QJKndwOworICAgIGNvbG5yX1QJdmNvbDsKK3sKKyAgICBjb2xucl9UCXdpZHRoMTsJCS8qIHdpZHRoIG9mIGZpcnN0IGxpbmUgKGFmdGVyIGxpbmUgbnVtYmVyKSAqLworICAgIGNvbG5yX1QJd2lkdGgyOwkJLyogd2lkdGggb2YgZnVydGhlciBsaW5lcyAqLworCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBpZiAod3AtPndfd2lkdGggPT0gMCkJLyogdGhlcmUgaXMgbm8gYm9yZGVyICovCisJcmV0dXJuIEZBTFNFOworI2VuZGlmCisgICAgd2lkdGgxID0gV19XSURUSCh3cCkgLSB3aW5fY29sX29mZih3cCk7CisgICAgaWYgKHZjb2wgPCB3aWR0aDEgLSAxKQorCXJldHVybiBGQUxTRTsKKyAgICBpZiAodmNvbCA9PSB3aWR0aDEgLSAxKQorCXJldHVybiBUUlVFOworICAgIHdpZHRoMiA9IHdpZHRoMSArIHdpbl9jb2xfb2ZmMih3cCk7CisgICAgcmV0dXJuICgodmNvbCAtIHdpZHRoMSkgJSB3aWR0aDIgPT0gd2lkdGgyIC0gMSk7Cit9CisjZW5kaWYgLyogRkVBVF9NQllURSAqLworCisvKgorICogR2V0IHZpcnR1YWwgY29sdW1uIG51bWJlciBvZiBwb3MuCisgKiAgc3RhcnQ6IG9uIHRoZSBmaXJzdCBwb3NpdGlvbiBvZiB0aGlzIGNoYXJhY3RlciAoVEFCLCBjdHJsKQorICogY3Vyc29yOiB3aGVyZSB0aGUgY3Vyc29yIGlzIG9uIHRoaXMgY2hhcmFjdGVyIChmaXJzdCBjaGFyLCBleGNlcHQgZm9yIFRBQikKKyAqICAgIGVuZDogb24gdGhlIGxhc3QgcG9zaXRpb24gb2YgdGhpcyBjaGFyYWN0ZXIgKFRBQiwgY3RybCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdmVyeSBvZnRlbiwga2VlcCBpdCBmYXN0IQorICovCisgICAgdm9pZAorZ2V0dmNvbCh3cCwgcG9zLCBzdGFydCwgY3Vyc29yLCBlbmQpCisgICAgd2luX1QJKndwOworICAgIHBvc19UCSpwb3M7CisgICAgY29sbnJfVAkqc3RhcnQ7CisgICAgY29sbnJfVAkqY3Vyc29yOworICAgIGNvbG5yX1QJKmVuZDsKK3sKKyAgICBjb2xucl9UCXZjb2w7CisgICAgY2hhcl91CSpwdHI7CQkvKiBwb2ludHMgdG8gY3VycmVudCBjaGFyICovCisgICAgY2hhcl91CSpwb3NwdHI7CS8qIHBvaW50cyB0byBjaGFyIGF0IHBvcy0+Y29sICovCisgICAgaW50CQlpbmNyOworICAgIGludAkJaGVhZDsKKyAgICBpbnQJCXRzID0gd3AtPndfYnVmZmVyLT5iX3BfdHM7CisgICAgaW50CQljOworCisgICAgdmNvbCA9IDA7CisgICAgcHRyID0gbWxfZ2V0X2J1Zih3cC0+d19idWZmZXIsIHBvcy0+bG51bSwgRkFMU0UpOworICAgIHBvc3B0ciA9IHB0ciArIHBvcy0+Y29sOworCisgICAgLyoKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdmVyeSBvZnRlbiwgZG8gc29tZSBzcGVlZCBvcHRpbWl6YXRpb25zLgorICAgICAqIFdoZW4gJ2xpc3QnLCAnbGluZWJyZWFrJyBhbmQgJ3Nob3dicmVhaycgYXJlIG5vdCBzZXQgdXNlIGEgc2ltcGxlIGxvb3AuCisgICAgICogQWxzbyB1c2UgdGhpcyB3aGVuICdsaXN0JyBpcyBzZXQgYnV0IHRhYnMgdGFrZSB0aGVpciBub3JtYWwgc2l6ZS4KKyAgICAgKi8KKyAgICBpZiAoKCF3cC0+d19wX2xpc3QgfHwgbGNzX3RhYjEgIT0gTlVMKQorI2lmZGVmIEZFQVRfTElORUJSRUFLCisJICAgICYmICF3cC0+d19wX2xiciAmJiAqcF9zYnIgPT0gTlVMCisjZW5kaWYKKyAgICAgICApCisgICAgeworI2lmbmRlZiBGRUFUX01CWVRFCisJaGVhZCA9IDA7CisjZW5kaWYKKwlmb3IgKDs7KQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGhlYWQgPSAwOworI2VuZGlmCisJICAgIGMgPSAqcHRyOworCSAgICAvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBsaW5lICovCisJICAgIGlmIChjID09IE5VTCkKKwkgICAgeworCQlpbmNyID0gMTsJLyogTlVMIGF0IGVuZCBvZiBsaW5lIG9ubHkgdGFrZXMgb25lIGNvbHVtbiAqLworCQlicmVhazsKKwkgICAgfQorCSAgICAvKiBBIHRhYiBnZXRzIGV4cGFuZGVkLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uICovCisJICAgIGlmIChjID09IFRBQikKKwkJaW5jciA9IHRzIC0gKHZjb2wgJSB0cyk7CisJICAgIGVsc2UKKwkgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwkJaWYgKGhhc19tYnl0ZSkKKwkJeworCQkgICAgLyogRm9yIHV0Zi04LCBpZiB0aGUgYnl0ZSBpcyA+PSAweDgwLCBuZWVkIHRvIGxvb2sgYXQKKwkJICAgICAqIGZ1cnRoZXIgYnl0ZXMgdG8gZmluZCB0aGUgY2VsbCB3aWR0aC4gKi8KKwkJICAgIGlmIChlbmNfdXRmOCAmJiBjID49IDB4ODApCisJCQlpbmNyID0gdXRmX3B0cjJjZWxscyhwdHIpOworCQkgICAgZWxzZQorCQkJaW5jciA9IENIQVJTSVpFKGMpOworCisJCSAgICAvKiBJZiBhIGRvdWJsZS1jZWxsIGNoYXIgZG9lc24ndCBmaXQgYXQgdGhlIGVuZCBvZiBhIGxpbmUKKwkJICAgICAqIGl0IHdyYXBzIHRvIHRoZSBuZXh0IGxpbmUsIGl0J3MgbGlrZSB0aGlzIGNoYXIgaXMgdGhyZWUKKwkJICAgICAqIGNlbGxzIHdpZGUuICovCisJCSAgICBpZiAoaW5jciA9PSAyICYmIHdwLT53X3Bfd3JhcCAmJiBpbl93aW5fYm9yZGVyKHdwLCB2Y29sKSkKKwkJICAgIHsKKwkJCSsraW5jcjsKKwkJCWhlYWQgPSAxOworCQkgICAgfQorCQl9CisJCWVsc2UKKyNlbmRpZgorCQkgICAgaW5jciA9IENIQVJTSVpFKGMpOworCSAgICB9CisKKwkgICAgaWYgKHB0ciA+PSBwb3NwdHIpCS8qIGNoYXJhY3RlciBhdCBwb3MtPmNvbCAqLworCQlicmVhazsKKworCSAgICB2Y29sICs9IGluY3I7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQlwdHIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIpOworCSAgICBlbHNlCisjZW5kaWYKKwkJKytwdHI7CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCWZvciAoOzspCisJeworCSAgICAvKiBBIHRhYiBnZXRzIGV4cGFuZGVkLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uICovCisJICAgIGhlYWQgPSAwOworCSAgICBpbmNyID0gd2luX2xicl9jaGFydGFic2l6ZSh3cCwgcHRyLCB2Y29sLCAmaGVhZCk7CisJICAgIC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBnbyBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUgKi8KKwkgICAgaWYgKCpwdHIgPT0gTlVMKQorCSAgICB7CisJCWluY3IgPSAxOwkvKiBOVUwgYXQgZW5kIG9mIGxpbmUgb25seSB0YWtlcyBvbmUgY29sdW1uICovCisJCWJyZWFrOworCSAgICB9CisKKwkgICAgaWYgKHB0ciA+PSBwb3NwdHIpCS8qIGNoYXJhY3RlciBhdCBwb3MtPmNvbCAqLworCQlicmVhazsKKworCSAgICB2Y29sICs9IGluY3I7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQlwdHIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIpOworCSAgICBlbHNlCisjZW5kaWYKKwkJKytwdHI7CisJfQorICAgIH0KKyAgICBpZiAoc3RhcnQgIT0gTlVMTCkKKwkqc3RhcnQgPSB2Y29sICsgaGVhZDsKKyAgICBpZiAoZW5kICE9IE5VTEwpCisJKmVuZCA9IHZjb2wgKyBpbmNyIC0gMTsKKyAgICBpZiAoY3Vyc29yICE9IE5VTEwpCisgICAgeworCWlmICgqcHRyID09IFRBQgorCQkmJiAoU3RhdGUgJiBOT1JNQUwpCisJCSYmICF3cC0+d19wX2xpc3QKKwkJJiYgIXZpcnR1YWxfYWN0aXZlKCkKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkmJiAhKFZJc3VhbF9hY3RpdmUKKwkJCQkgICAmJiAoKnBfc2VsID09ICdlJyB8fCBsdG9yZXEoKnBvcywgVklzdWFsKSkpCisjZW5kaWYKKwkJKQorCSAgICAqY3Vyc29yID0gdmNvbCArIGluY3IgLSAxOwkgICAgLyogY3Vyc29yIGF0IGVuZCAqLworCWVsc2UKKwkgICAgKmN1cnNvciA9IHZjb2wgKyBoZWFkOwkgICAgLyogY3Vyc29yIGF0IHN0YXJ0ICovCisgICAgfQorfQorCisvKgorICogR2V0IHZpcnR1YWwgY3Vyc29yIGNvbHVtbiBpbiB0aGUgY3VycmVudCB3aW5kb3csIHByZXRlbmRpbmcgJ2xpc3QnIGlzIG9mZi4KKyAqLworICAgIGNvbG5yX1QKK2dldHZjb2xfbm9saXN0KHBvc3ApCisgICAgcG9zX1QJKnBvc3A7Cit7CisgICAgaW50CQlsaXN0X3NhdmUgPSBjdXJ3aW4tPndfcF9saXN0OworICAgIGNvbG5yX1QJdmNvbDsKKworICAgIGN1cndpbi0+d19wX2xpc3QgPSBGQUxTRTsKKyAgICBnZXR2Y29sKGN1cndpbiwgcG9zcCwgTlVMTCwgJnZjb2wsIE5VTEwpOworICAgIGN1cndpbi0+d19wX2xpc3QgPSBsaXN0X3NhdmU7CisgICAgcmV0dXJuIHZjb2w7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfVklSVFVBTEVESVQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogR2V0IHZpcnR1YWwgY29sdW1uIGluIHZpcnR1YWwgbW9kZS4KKyAqLworICAgIHZvaWQKK2dldHZ2Y29sKHdwLCBwb3MsIHN0YXJ0LCBjdXJzb3IsIGVuZCkKKyAgICB3aW5fVAkqd3A7CisgICAgcG9zX1QJKnBvczsKKyAgICBjb2xucl9UCSpzdGFydDsKKyAgICBjb2xucl9UCSpjdXJzb3I7CisgICAgY29sbnJfVAkqZW5kOworeworICAgIGNvbG5yX1QJY29sOworICAgIGNvbG5yX1QJY29sYWRkOworICAgIGNvbG5yX1QJZW5kYWRkOworIyBpZmRlZiBGRUFUX01CWVRFCisgICAgY2hhcl91CSpwdHI7CisjIGVuZGlmCisKKyAgICBpZiAodmlydHVhbF9hY3RpdmUoKSkKKyAgICB7CisJLyogRm9yIHZpcnR1YWwgbW9kZSwgb25seSB3YW50IG9uZSB2YWx1ZSAqLworCWdldHZjb2wod3AsIHBvcywgJmNvbCwgTlVMTCwgTlVMTCk7CisKKwljb2xhZGQgPSBwb3MtPmNvbGFkZDsKKwllbmRhZGQgPSAwOworIyBpZmRlZiBGRUFUX01CWVRFCisJLyogQ2Fubm90IHB1dCB0aGUgY3Vyc29yIG9uIHBhcnQgb2YgYSB3aWRlIGNoYXJhY3Rlci4gKi8KKwlwdHIgPSBtbF9nZXRfYnVmKHdwLT53X2J1ZmZlciwgcG9zLT5sbnVtLCBGQUxTRSk7CisJaWYgKHBvcy0+Y29sIDwgU1RSTEVOKHB0cikpCisJeworCSAgICBpbnQgYyA9ICgqbWJfcHRyMmNoYXIpKHB0ciArIHBvcy0+Y29sKTsKKworCSAgICBpZiAoYyAhPSBUQUIgJiYgdmltX2lzcHJpbnRjKGMpKQorCSAgICB7CisJCWVuZGFkZCA9IGNoYXIyY2VsbHMoYykgLSAxOworCQlpZiAoY29sYWRkID49IGVuZGFkZCkKKwkJICAgIGNvbGFkZCAtPSBlbmRhZGQ7CisJCWVsc2UKKwkJICAgIGNvbGFkZCA9IDA7CisJICAgIH0KKwl9CisjIGVuZGlmCisJY29sICs9IGNvbGFkZDsKKwlpZiAoc3RhcnQgIT0gTlVMTCkKKwkgICAgKnN0YXJ0ID0gY29sOworCWlmIChjdXJzb3IgIT0gTlVMTCkKKwkgICAgKmN1cnNvciA9IGNvbDsKKwlpZiAoZW5kICE9IE5VTEwpCisJICAgICplbmQgPSBjb2wgKyBlbmRhZGQ7CisgICAgfQorICAgIGVsc2UKKwlnZXR2Y29sKHdwLCBwb3MsIHN0YXJ0LCBjdXJzb3IsIGVuZCk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9WSVNVQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogR2V0IHRoZSBsZWZ0bW9zdCBhbmQgcmlnaHRtb3N0IHZpcnR1YWwgY29sdW1uIG9mIHBvczEgYW5kIHBvczIuCisgKiBVc2VkIGZvciBWaXN1YWwgYmxvY2sgbW9kZS4KKyAqLworICAgIHZvaWQKK2dldHZjb2xzKHdwLCBwb3MxLCBwb3MyLCBsZWZ0LCByaWdodCkKKyAgICB3aW5fVAkqd3A7CisgICAgcG9zX1QJKnBvczEsICpwb3MyOworICAgIGNvbG5yX1QJKmxlZnQsICpyaWdodDsKK3sKKyAgICBjb2xucl9UCWZyb20xLCBmcm9tMiwgdG8xLCB0bzI7CisKKyAgICBpZiAobHRwKHBvczEsIHBvczIpKQorICAgIHsKKwlnZXR2dmNvbCh3cCwgcG9zMSwgJmZyb20xLCBOVUxMLCAmdG8xKTsKKwlnZXR2dmNvbCh3cCwgcG9zMiwgJmZyb20yLCBOVUxMLCAmdG8yKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlnZXR2dmNvbCh3cCwgcG9zMiwgJmZyb20xLCBOVUxMLCAmdG8xKTsKKwlnZXR2dmNvbCh3cCwgcG9zMSwgJmZyb20yLCBOVUxMLCAmdG8yKTsKKyAgICB9CisgICAgaWYgKGZyb20yIDwgZnJvbTEpCisJKmxlZnQgPSBmcm9tMjsKKyAgICBlbHNlCisJKmxlZnQgPSBmcm9tMTsKKyAgICBpZiAodG8yID4gdG8xKQorICAgIHsKKwlpZiAoKnBfc2VsID09ICdlJyAmJiBmcm9tMiAtIDEgPj0gdG8xKQorCSAgICAqcmlnaHQgPSBmcm9tMiAtIDE7CisJZWxzZQorCSAgICAqcmlnaHQgPSB0bzI7CisgICAgfQorICAgIGVsc2UKKwkqcmlnaHQgPSB0bzE7Cit9CisjZW5kaWYKKworLyoKKyAqIHNraXB3aGl0ZTogc2tpcCBvdmVyICcgJyBhbmQgJ1x0Jy4KKyAqLworICAgIGNoYXJfdSAqCitza2lwd2hpdGUocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgd2hpbGUgKHZpbV9pc3doaXRlKCpwKSkgLyogc2tpcCB0byBuZXh0IG5vbi13aGl0ZSAqLworCSsrcDsKKyAgICByZXR1cm4gcDsKK30KKworLyoKKyAqIHNraXBkaWdpdHM6IHNraXAgb3ZlciBkaWdpdHM7CisgKi8KKyAgICBjaGFyX3UgKgorc2tpcGRpZ2l0cyhwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICB3aGlsZSAoVklNX0lTRElHSVQoKnApKQkvKiBza2lwIHRvIG5leHQgbm9uLWRpZ2l0ICovCisJKytwOworICAgIHJldHVybiBwOworfQorCisvKgorICogVmFyaWFudCBvZiBpc2RpZ2l0KCkgdGhhdCBjYW4gaGFuZGxlIGNoYXJhY3RlcnMgPiAweDEwMC4KKyAqIFdlIGRvbid0IHVzZSBpc2RpZ2l0KCkgaGVyZSwgYmVjYXVzZSBvbiBzb21lIHN5c3RlbXMgaXQgYWxzbyBjb25zaWRlcnMKKyAqIHN1cGVyc2NyaXB0IDEgdG8gYmUgYSBkaWdpdC4KKyAqIFVzZSB0aGUgVklNX0lTRElHSVQoKSBtYWNybyBmb3Igc2ltcGxlIGFyZ3VtZW50cy4KKyAqLworICAgIGludAordmltX2lzZGlnaXQoYykKKyAgICBpbnQJCWM7Cit7CisgICAgcmV0dXJuIChjID49ICcwJyAmJiBjIDw9ICc5Jyk7Cit9CisKKy8qCisgKiBWYXJpYW50IG9mIGlzeGRpZ2l0KCkgdGhhdCBjYW4gaGFuZGxlIGNoYXJhY3RlcnMgPiAweDEwMC4KKyAqIFdlIGRvbid0IHVzZSBpc3hkaWdpdCgpIGhlcmUsIGJlY2F1c2Ugb24gc29tZSBzeXN0ZW1zIGl0IGFsc28gY29uc2lkZXJzCisgKiBzdXBlcnNjcmlwdCAxIHRvIGJlIGEgZGlnaXQuCisgKi8KKyAgICBpbnQKK3ZpbV9pc3hkaWdpdChjKQorICAgIGludAkJYzsKK3sKKyAgICByZXR1cm4gKGMgPj0gJzAnICYmIGMgPD0gJzknKQorCXx8IChjID49ICdhJyAmJiBjIDw9ICdmJykKKwl8fCAoYyA+PSAnQScgJiYgYyA8PSAnRicpOworfQorCisvKgorICogc2tpcHRvd2hpdGU6IHNraXAgb3ZlciB0ZXh0IHVudGlsICcgJyBvciAnXHQnIG9yIE5VTC4KKyAqLworICAgIGNoYXJfdSAqCitza2lwdG93aGl0ZShwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICB3aGlsZSAoKnAgIT0gJyAnICYmICpwICE9ICdcdCcgJiYgKnAgIT0gTlVMKQorCSsrcDsKKyAgICByZXR1cm4gcDsKK30KKworI2lmIGRlZmluZWQoRkVBVF9MSVNUQ01EUykgfHwgZGVmaW5lZChGRUFUX1NJR05TKSB8fCBkZWZpbmVkKEZFQVRfU05JRkYpIFwKKwl8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIHNraXB0b3doaXRlX2VzYzogTGlrZSBza2lwdG93aGl0ZSgpLCBidXQgYWxzbyBza2lwIGVzY2FwZWQgY2hhcnMKKyAqLworICAgIGNoYXJfdSAqCitza2lwdG93aGl0ZV9lc2MocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgd2hpbGUgKCpwICE9ICcgJyAmJiAqcCAhPSAnXHQnICYmICpwICE9IE5VTCkKKyAgICB7CisJaWYgKCgqcCA9PSAnXFwnIHx8ICpwID09IEN0cmxfVikgJiYgKihwICsgMSkgIT0gTlVMKQorCSAgICArK3A7CisJKytwOworICAgIH0KKyAgICByZXR1cm4gcDsKK30KKyNlbmRpZgorCisvKgorICogR2V0ZGlnaXRzOiBHZXQgYSBudW1iZXIgZnJvbSBhIHN0cmluZyBhbmQgc2tpcCBvdmVyIGl0LgorICogTm90ZTogdGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhIGNoYXJfdSBwb2ludGVyIQorICovCisgICAgbG9uZworZ2V0ZGlnaXRzKHBwKQorICAgIGNoYXJfdSAqKnBwOworeworICAgIGNoYXJfdQkqcDsKKyAgICBsb25nCXJldHZhbDsKKworICAgIHAgPSAqcHA7CisgICAgcmV0dmFsID0gYXRvbCgoY2hhciAqKXApOworICAgIGlmICgqcCA9PSAnLScpCQkvKiBza2lwIG5lZ2F0aXZlIHNpZ24gKi8KKwkrK3A7CisgICAgcCA9IHNraXBkaWdpdHMocCk7CQkvKiBza2lwIHRvIG5leHQgbm9uLWRpZ2l0ICovCisgICAgKnBwID0gcDsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgImxidWYiIGlzIGVtcHR5IG9yIG9ubHkgY29udGFpbnMgYmxhbmtzLgorICovCisgICAgaW50Cit2aW1faXNibGFua2xpbmUobGJ1ZikKKyAgICBjaGFyX3UJKmxidWY7Cit7CisgICAgY2hhcl91CSpwOworCisgICAgcCA9IHNraXB3aGl0ZShsYnVmKTsKKyAgICByZXR1cm4gKCpwID09IE5VTCB8fCAqcCA9PSAnXHInIHx8ICpwID09ICdcbicpOworfQorCisvKgorICogQ29udmVydCBhIHN0cmluZyBpbnRvIGEgbG9uZyBhbmQvb3IgdW5zaWduZWQgbG9uZywgdGFraW5nIGNhcmUgb2YKKyAqIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBudW1iZXJzLgorICogSWYgImhleHAiIGlzIG5vdCBOVUxMLCByZXR1cm5zIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiB0aGUgbnVtYmVyOgorICogIDAJICAgIGRlY2ltYWwKKyAqICAnMCcJICAgIG9jdGFsCisgKiAgJ1gnCSAgICBoZXgKKyAqICAneCcJICAgIGhleAorICogSWYgImxlbiIgaXMgbm90IE5VTEwsIHRoZSBsZW5ndGggb2YgdGhlIG51bWJlciBpbiBjaGFyYWN0ZXJzIGlzIHJldHVybmVkLgorICogSWYgIm5wdHIiIGlzIG5vdCBOVUxMLCB0aGUgc2lnbmVkIHJlc3VsdCBpcyByZXR1cm5lZCBpbiBpdC4KKyAqIElmICJ1bnB0ciIgaXMgbm90IE5VTEwsIHRoZSB1bnNpZ25lZCByZXN1bHQgaXMgcmV0dXJuZWQgaW4gaXQuCisgKi8KKyAgICB2b2lkCit2aW1fc3RyMm5yKHN0YXJ0LCBoZXhwLCBsZW4sIGRvb2N0LCBkb2hleCwgbnB0ciwgdW5wdHIpCisgICAgY2hhcl91CQkqc3RhcnQ7CisgICAgaW50CQkJKmhleHA7CSAgICAvKiByZXR1cm46IHR5cGUgb2YgbnVtYmVyIDAgPSBkZWNpbWFsLCAneCcKKwkJCQkgICAgICAgb3IgJ1gnIGlzIGhleCwgJzAnID0gb2N0YWwgKi8KKyAgICBpbnQJCQkqbGVuOwkgICAgLyogcmV0dXJuOiBkZXRlY3RlZCBsZW5ndGggb2YgbnVtYmVyICovCisgICAgaW50CQkJZG9vY3Q7CSAgICAvKiByZWNvZ25pemUgb2N0YWwgbnVtYmVyICovCisgICAgaW50CQkJZG9oZXg7CSAgICAvKiByZWNvZ25pemUgaGV4IG51bWJlciAqLworICAgIGxvbmcJCSpucHRyOwkgICAgLyogcmV0dXJuOiBzaWduZWQgcmVzdWx0ICovCisgICAgdW5zaWduZWQgbG9uZwkqdW5wdHI7CSAgICAvKiByZXR1cm46IHVuc2lnbmVkIHJlc3VsdCAqLworeworICAgIGNoYXJfdQkgICAgKnB0ciA9IHN0YXJ0OworICAgIGludAkJICAgIGhleCA9IDA7CQkvKiBkZWZhdWx0IGlzIGRlY2ltYWwgKi8KKyAgICBpbnQJCSAgICBuZWdhdGl2ZSA9IEZBTFNFOworICAgIGxvbmcJICAgIG4gPSAwOworICAgIHVuc2lnbmVkIGxvbmcgICB1biA9IDA7CisKKyAgICBpZiAocHRyWzBdID09ICctJykKKyAgICB7CisJbmVnYXRpdmUgPSBUUlVFOworCSsrcHRyOworICAgIH0KKworICAgIGlmIChwdHJbMF0gPT0gJzAnKQkJCS8qIGNvdWxkIGJlIGhleCBvciBvY3RhbCAqLworICAgIHsKKwloZXggPSBwdHJbMV07CisJaWYgKGRvaGV4ICYmIChoZXggPT0gJ1gnIHx8IGhleCA9PSAneCcpICYmIHZpbV9pc3hkaWdpdChwdHJbMl0pKQorCSAgICBwdHIgKz0gMjsJCQkvKiBoZXhhZGVjaW1hbCAqLworCWVsc2UKKwl7CisJICAgIGlmIChkb29jdCAmJiBWSU1fSVNESUdJVChoZXgpKQorCQloZXggPSAnMCc7CQkvKiBvY3RhbCAqLworCSAgICBlbHNlCisJCWhleCA9IDA7CQkvKiAwIGJ5IGl0c2VsZiBpcyBkZWNpbWFsICovCisJfQorICAgIH0KKworICAgIC8qCisgICAgICogRG8gdGhlIHN0cmluZy10by1udW1lcmljIGNvbnZlcnNpb24gIm1hbnVhbGx5IiB0byBhdm9pZCBzc2NhbmYgcXVpcmtzLgorICAgICAqLworICAgIGlmIChoZXgpCisgICAgeworCWlmIChoZXggPT0gJzAnKQorCXsKKwkgICAgLyogb2N0YWwgKi8KKwkgICAgd2hpbGUgKCcwJyA8PSAqcHRyICYmICpwdHIgPD0gJzcnKQorCSAgICB7CisJCW4gPSA4ICogbiArIChsb25nKSgqcHRyIC0gJzAnKTsKKwkJdW4gPSA4ICogdW4gKyAodW5zaWduZWQgbG9uZykoKnB0ciAtICcwJyk7CisJCSsrcHRyOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIC8qIGhleCAqLworCSAgICB3aGlsZSAodmltX2lzeGRpZ2l0KCpwdHIpKQorCSAgICB7CisJCW4gPSAxNiAqIG4gKyAobG9uZyloZXgybnIoKnB0cik7CisJCXVuID0gMTYgKiB1biArICh1bnNpZ25lZCBsb25nKWhleDJucigqcHRyKTsKKwkJKytwdHI7CisJICAgIH0KKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogZGVjaW1hbCAqLworCXdoaWxlIChWSU1fSVNESUdJVCgqcHRyKSkKKwl7CisJICAgIG4gPSAxMCAqIG4gKyAobG9uZykoKnB0ciAtICcwJyk7CisJICAgIHVuID0gMTAgKiB1biArICh1bnNpZ25lZCBsb25nKSgqcHRyIC0gJzAnKTsKKwkgICAgKytwdHI7CisJfQorICAgIH0KKworICAgIGlmICghaGV4ICYmIG5lZ2F0aXZlKSAgIC8qIGFjY291bnQgZm9yIGxlYWRpbmcgJy0nIGZvciBkZWNpbWFsIG51bWJlcnMgKi8KKwluID0gLW47CisKKyAgICBpZiAoaGV4cCAhPSBOVUxMKQorCSpoZXhwID0gaGV4OworICAgIGlmIChsZW4gIT0gTlVMTCkKKwkqbGVuID0gKGludCkocHRyIC0gc3RhcnQpOworICAgIGlmIChucHRyICE9IE5VTEwpCisJKm5wdHIgPSBuOworICAgIGlmICh1bnB0ciAhPSBOVUxMKQorCSp1bnB0ciA9IHVuOworfQorCisvKgorICogUmV0dXJuIHRoZSB2YWx1ZSBvZiBhIHNpbmdsZSBoZXggY2hhcmFjdGVyLgorICogT25seSB2YWxpZCB3aGVuIHRoZSBhcmd1bWVudCBpcyAnMCcgLSAnOScsICdBJyAtICdGJyBvciAnYScgLSAnZicuCisgKi8KKyAgICBpbnQKK2hleDJucihjKQorICAgIGludAkJYzsKK3sKKyAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCisJcmV0dXJuIGMgLSAnYScgKyAxMDsKKyAgICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnRicpCisJcmV0dXJuIGMgLSAnQScgKyAxMDsKKyAgICByZXR1cm4gYyAtICcwJzsKK30KKworI2lmIGRlZmluZWQoRkVBVF9URVJNUkVTUE9OU0UpIFwKKwl8fCAoZGVmaW5lZChGRUFUX0dVSV9HVEspICYmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDb252ZXJ0IHR3byBoZXggY2hhcmFjdGVycyB0byBhIGJ5dGUuCisgKiBSZXR1cm4gLTEgaWYgb25lIG9mIHRoZSBjaGFyYWN0ZXJzIGlzIG5vdCBoZXguCisgKi8KKyAgICBpbnQKK2hleGhleDJucihwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBpZiAoIXZpbV9pc3hkaWdpdChwWzBdKSB8fCAhdmltX2lzeGRpZ2l0KHBbMV0pKQorCXJldHVybiAtMTsKKyAgICByZXR1cm4gKGhleDJucihwWzBdKSA8PCA0KSArIGhleDJucihwWzFdKTsKK30KKyNlbmRpZgorCisvKgorICogUmV0dXJuIFRSVUUgaWYgInN0ciIgc3RhcnRzIHdpdGggYSBiYWNrc2xhc2ggdGhhdCBzaG91bGQgYmUgcmVtb3ZlZC4KKyAqIEZvciBNUy1ET1MsIFdJTjMyIGFuZCBPUy8yIHRoaXMgaXMgb25seSBkb25lIHdoZW4gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUKKyAqIGJhY2tzbGFzaCBpcyBub3QgYSBub3JtYWwgZmlsZSBuYW1lIGNoYXJhY3Rlci4KKyAqICckJyBpcyBhIHZhbGlkIGZpbGUgbmFtZSBjaGFyYWN0ZXIsIHdlIGRvbid0IHJlbW92ZSB0aGUgYmFja3NsYXNoIGJlZm9yZQorICogaXQuICBUaGlzIG1lYW5zIGl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgYWZ0ZXIgYQorICogYmFja3NsYXNoLiAgIkM6XCRWSU1cZG9jIiBpcyB0YWtlbiBsaXRlcmFsbHksIG9ubHkgIiRWSU1cZG9jIiB3b3Jrcy4KKyAqIEFsdGhvdWdoICJcIG5hbWUiIGlzIHZhbGlkLCB0aGUgYmFja3NsYXNoIGluICJQcm9ncmFtXCBmaWxlcyIgbXVzdCBiZQorICogcmVtb3ZlZC4gIEFzc3VtZSBhIGZpbGUgbmFtZSBkb2Vzbid0IHN0YXJ0IHdpdGggYSBzcGFjZS4KKyAqIEZvciBtdWx0aS1ieXRlIG5hbWVzLCBuZXZlciByZW1vdmUgYSBiYWNrc2xhc2ggYmVmb3JlIGEgbm9uLWFzY2lpCisgKiBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IGFsbCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGZpbGUgbmFtZQorICogY2hhcmFjdGVycy4KKyAqLworICAgIGludAorcmVtX2JhY2tzbGFzaChzdHIpCisgICAgY2hhcl91ICAqc3RyOworeworI2lmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorICAgIHJldHVybiAoc3RyWzBdID09ICdcXCcKKyMgaWZkZWYgRkVBVF9NQllURQorCSAgICAmJiBzdHJbMV0gPCAweDgwCisjIGVuZGlmCisJICAgICYmIChzdHJbMV0gPT0gJyAnCisJCXx8IChzdHJbMV0gIT0gTlVMCisJCSAgICAmJiBzdHJbMV0gIT0gJyonCisJCSAgICAmJiBzdHJbMV0gIT0gJz8nCisJCSAgICAmJiAhdmltX2lzZmlsZWMoc3RyWzFdKSkpKTsKKyNlbHNlCisgICAgcmV0dXJuIChzdHJbMF0gPT0gJ1xcJyAmJiBzdHJbMV0gIT0gTlVMKTsKKyNlbmRpZgorfQorCisvKgorICogSGFsdmUgdGhlIG51bWJlciBvZiBiYWNrc2xhc2hlcyBpbiBhIGZpbGUgbmFtZSBhcmd1bWVudC4KKyAqIEZvciBNUy1ET1Mgd2Ugb25seSBkbyB0aGlzIGlmIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGJhY2tzbGFzaAorICogaXMgbm90IGEgbm9ybWFsIGZpbGUgY2hhcmFjdGVyLgorICovCisgICAgdm9pZAorYmFja3NsYXNoX2hhbHZlKHApCisgICAgY2hhcl91CSpwOworeworICAgIGZvciAoIDsgKnA7ICsrcCkKKwlpZiAocmVtX2JhY2tzbGFzaChwKSkKKwkgICAgU1RSQ1BZKHAsIHAgKyAxKTsKK30KKworLyoKKyAqIGJhY2tzbGFzaF9oYWx2ZSgpIHBsdXMgc2F2ZSB0aGUgcmVzdWx0IGluIGFsbG9jYXRlZCBtZW1vcnkuCisgKi8KKyAgICBjaGFyX3UgKgorYmFja3NsYXNoX2hhbHZlX3NhdmUocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgY2hhcl91CSpyZXM7CisKKyAgICByZXMgPSB2aW1fc3Ryc2F2ZShwKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisJcmV0dXJuIHA7CisgICAgYmFja3NsYXNoX2hhbHZlKHJlcyk7CisgICAgcmV0dXJuIHJlczsKK30KKworI2lmIChkZWZpbmVkKEVCQ0RJQykgJiYgZGVmaW5lZChGRUFUX1BPU1RTQ1JJUFQpKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFRhYmxlIGZvciBFQkNESUMgdG8gQVNDSUkgY29udmVyc2lvbiB1bmFzaGFtZWRseSB0YWtlbiBmcm9tIHh4ZC5jIQorICogVGhlIGZpcnN0IDY0IGVudHJpZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIG1hcCBjb250cm9sIGNoYXJhY3RlcnMgZGVmaW5lZCBpbgorICogYXNjaWkuaAorICovCitzdGF0aWMgY2hhcl91IGViY2RpYzJhc2NpaV90YWJbMjU2XSA9Cit7CisgICAgMDAwMCwgMDAwMSwgMDAwMiwgMDAwMywgMDAwNCwgMDAxMSwgMDAwNiwgMDE3NywKKyAgICAwMDEwLCAwMDExLCAwMDEyLCAwMDEzLCAwMDE0LCAwMDE1LCAwMDE2LCAwMDE3LAorICAgIDAwMjAsIDAwMjEsIDAwMjIsIDAwMjMsIDAwMjQsIDAwMTIsIDAwMTAsIDAwMjcsCisgICAgMDAzMCwgMDAzMSwgMDAzMiwgMDAzMywgMDAzMywgMDAzNSwgMDAzNiwgMDAzNywKKyAgICAwMDQwLCAwMDQxLCAwMDQyLCAwMDQzLCAwMDQ0LCAwMDQ1LCAwMDQ2LCAwMDQ3LAorICAgIDAwNTAsIDAwNTEsIDAwNTIsIDAwNTMsIDAwNTQsIDAwNTUsIDAwNTYsIDAwNTcsCisgICAgMDA2MCwgMDA2MSwgMDA2MiwgMDA2MywgMDA2NCwgMDA2NSwgMDA2NiwgMDA2NywKKyAgICAwMDcwLCAwMDcxLCAwMDcyLCAwMDczLCAwMDc0LCAwMDc1LCAwMDc2LCAwMDc3LAorICAgIDAwNDAsIDAyNDAsIDAyNDEsIDAyNDIsIDAyNDMsIDAyNDQsIDAyNDUsIDAyNDYsCisgICAgMDI0NywgMDI1MCwgMDMyNSwgMDA1NiwgMDA3NCwgMDA1MCwgMDA1MywgMDE3NCwKKyAgICAwMDQ2LCAwMjUxLCAwMjUyLCAwMjUzLCAwMjU0LCAwMjU1LCAwMjU2LCAwMjU3LAorICAgIDAyNjAsIDAyNjEsIDAwNDEsIDAwNDQsIDAwNTIsIDAwNTEsIDAwNzMsIDAxNzYsCisgICAgMDA1NSwgMDA1NywgMDI2MiwgMDI2MywgMDI2NCwgMDI2NSwgMDI2NiwgMDI2NywKKyAgICAwMjcwLCAwMjcxLCAwMzEzLCAwMDU0LCAwMDQ1LCAwMTM3LCAwMDc2LCAwMDc3LAorICAgIDAyNzIsIDAyNzMsIDAyNzQsIDAyNzUsIDAyNzYsIDAyNzcsIDAzMDAsIDAzMDEsCisgICAgMDMwMiwgMDE0MCwgMDA3MiwgMDA0MywgMDEwMCwgMDA0NywgMDA3NSwgMDA0MiwKKyAgICAwMzAzLCAwMTQxLCAwMTQyLCAwMTQzLCAwMTQ0LCAwMTQ1LCAwMTQ2LCAwMTQ3LAorICAgIDAxNTAsIDAxNTEsIDAzMDQsIDAzMDUsIDAzMDYsIDAzMDcsIDAzMTAsIDAzMTEsCisgICAgMDMxMiwgMDE1MiwgMDE1MywgMDE1NCwgMDE1NSwgMDE1NiwgMDE1NywgMDE2MCwKKyAgICAwMTYxLCAwMTYyLCAwMTM2LCAwMzE0LCAwMzE1LCAwMzE2LCAwMzE3LCAwMzIwLAorICAgIDAzMjEsIDAzNDUsIDAxNjMsIDAxNjQsIDAxNjUsIDAxNjYsIDAxNjcsIDAxNzAsCisgICAgMDE3MSwgMDE3MiwgMDMyMiwgMDMyMywgMDMyNCwgMDEzMywgMDMyNiwgMDMyNywKKyAgICAwMzMwLCAwMzMxLCAwMzMyLCAwMzMzLCAwMzM0LCAwMzM1LCAwMzM2LCAwMzM3LAorICAgIDAzNDAsIDAzNDEsIDAzNDIsIDAzNDMsIDAzNDQsIDAxMzUsIDAzNDYsIDAzNDcsCisgICAgMDE3MywgMDEwMSwgMDEwMiwgMDEwMywgMDEwNCwgMDEwNSwgMDEwNiwgMDEwNywKKyAgICAwMTEwLCAwMTExLCAwMzUwLCAwMzUxLCAwMzUyLCAwMzUzLCAwMzU0LCAwMzU1LAorICAgIDAxNzUsIDAxMTIsIDAxMTMsIDAxMTQsIDAxMTUsIDAxMTYsIDAxMTcsIDAxMjAsCisgICAgMDEyMSwgMDEyMiwgMDM1NiwgMDM1NywgMDM2MCwgMDM2MSwgMDM2MiwgMDM2MywKKyAgICAwMTM0LCAwMjM3LCAwMTIzLCAwMTI0LCAwMTI1LCAwMTI2LCAwMTI3LCAwMTMwLAorICAgIDAxMzEsIDAxMzIsIDAzNjQsIDAzNjUsIDAzNjYsIDAzNjcsIDAzNzAsIDAzNzEsCisgICAgMDA2MCwgMDA2MSwgMDA2MiwgMDA2MywgMDA2NCwgMDA2NSwgMDA2NiwgMDA2NywKKyAgICAwMDcwLCAwMDcxLCAwMzcyLCAwMzczLCAwMzc0LCAwMzc1LCAwMzc2LCAwMzc3Cit9OworCisvKgorICogQ29udmVydCBhIGJ1ZmZlciB3b3J0aCBvZiBjaGFyYWN0ZXJzIGZyb20gRUJDRElDIHRvIEFTQ0lJLiAgT25seSB1c2VmdWwgaWYKKyAqIHdhbnRpbmcgNy1iaXQgQVNDSUkgY2hhcmFjdGVycyBvdXQgdGhlIG90aGVyIGVuZC4KKyAqLworICAgIHZvaWQKK2ViY2RpYzJhc2NpaShidWZmZXIsIGxlbikKKyAgICBjaGFyX3UJKmJ1ZmZlcjsKKyAgICBpbnQJCWxlbjsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJYnVmZmVyW2ldID0gZWJjZGljMmFzY2lpX3RhYltidWZmZXJbaV1dOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY29uZmlnLmFhcC5pbiBiL3NyYy9jb25maWcuYWFwLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzc0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29uZmlnLmFhcC5pbgpAQCAtMCwwICsxLDExNSBAQAorIyBjb25maWcuYWFwLmluOiByZWNpcGUgdHJhbnNmb3JtZWQgaW50byBhdXRvL2NvbmZpZy5hYXAgYnkgY29uZmlndXJlLgorCitWSU1OQU1FCQk9IEBWSU1OQU1FQAorRVhOQU1FCQk9IEBFWE5BTUVACitWSUVXTkFNRQk9IEBWSUVXTkFNRUAKKworQ0MJCT0gQENDQAorREVGUwkJPSBAREVGU0AKK0NPTkZfQ0ZMQUdTCT0gQENGTEFHU0AKK0NQUEZMQUdTCT0gQENQUEZMQUdTQAorc3JjZGlyCQk9IEBzcmNkaXJACitWUEFUSAkJPSBAc3JjZGlyQAorQ09ORl9MREZMQUdTCT0gQExERkxBR1NACitDT05GX0xJQlMJPSBATElCU0AKK1RBR1BSRwkJPSBAVEFHUFJHQAorCitDUFAJCT0gQENQUEAKK0NQUF9NTQkJPSBAQ1BQX01NQAorWF9DRkxBR1MJPSBAWF9DRkxBR1NACitYX0xJQlNfRElSCT0gQFhfTElCU0AKK1hfUFJFX0xJQlMJPSBAWF9QUkVfTElCU0AKK1hfRVhUUkFfTElCUwk9IEBYX0VYVFJBX0xJQlNACitYX0xJQlMJCT0gQFhfTElCQAorCitQRVJMCQk9IEB2aV9jdl9wYXRoX3BlcmxACitQRVJMTElCCQk9IEB2aV9jdl9wZXJsbGliQAorUEVSTF9MSUJTCT0gQFBFUkxfTElCU0AKK1NIUlBFTlYJCT0gQHNocnBlbnZACitQRVJMX1NSQwk9IEBQRVJMX1NSQ0AKK1BFUkxfT0JKCT0gQFBFUkxfT0JKQAorUEVSTF9QUk8JPSBAUEVSTF9QUk9ACitQRVJMX0NGTEFHUwk9IEBQRVJMX0NGTEFHU0AKKworUFlUSE9OX1NSQwk9IEBQWVRIT05fU1JDQAorUFlUSE9OX09CSgk9IEBQWVRIT05fT0JKQAorUFlUSE9OX0NGTEFHUwk9IEBQWVRIT05fQ0ZMQUdTQAorUFlUSE9OX0xJQlMJPSBAUFlUSE9OX0xJQlNACitQWVRIT05fQ09ORkRJUgk9IEBQWVRIT05fQ09ORkRJUkAKK1BZVEhPTl9HRVRQQVRIX0NGTEFHUyA9IEBQWVRIT05fR0VUUEFUSF9DRkxBR1NACisKK1RDTAkJPSBAdmlfY3ZfcGF0aF90Y2xACitUQ0xfU1JDCQk9IEBUQ0xfU1JDQAorVENMX09CSgkJPSBAVENMX09CSkAKK1RDTF9QUk8JCT0gQFRDTF9QUk9ACitUQ0xfQ0ZMQUdTCT0gQFRDTF9DRkxBR1NACitUQ0xfTElCUwk9IEBUQ0xfTElCU0AKKworSEFOR1VMSU5fU1JDCT0gQEhBTkdVTElOX1NSQ0AKK0hBTkdVTElOX09CSgk9IEBIQU5HVUxJTl9PQkpACisKK1dPUktTSE9QX1NSQwk9IEBXT1JLU0hPUF9TUkNACitXT1JLU0hPUF9PQkoJPSBAV09SS1NIT1BfT0JKQAorCitORVRCRUFOU19TUkMJPSBATkVUQkVBTlNfU1JDQAorTkVUQkVBTlNfT0JKCT0gQE5FVEJFQU5TX09CSkAKKworUlVCWQkJPSBAdmlfY3ZfcGF0aF9ydWJ5QAorUlVCWV9TUkMJPSBAUlVCWV9TUkNACitSVUJZX09CSgk9IEBSVUJZX09CSkAKK1JVQllfUFJPCT0gQFJVQllfUFJPQAorUlVCWV9DRkxBR1MJPSBAUlVCWV9DRkxBR1NACitSVUJZX0xJQlMJPSBAUlVCWV9MSUJTQAorCitTTklGRl9TUkMJPSBAU05JRkZfU1JDQAorU05JRkZfT0JKCT0gQFNOSUZGX09CSkAKKworQVdLCQk9IEBBV0tACisKK1NUUklQCQk9IEBTVFJJUEAKKworRVhFRVhUCQk9IEBFWEVFWFRACisKK0NPTVBJTEVEQlkJPSBAY29tcGlsZWRieUAKKworSU5TVEFMTFZJTURJRkYJPSBAZG92aW1kaWZmQAorSU5TVEFMTEdWSU1ESUZGCT0gQGRvZ3ZpbWRpZmZACisKKyMjIyBMaW5lIGJyZWFrIGNoYXJhY3RlciBhcyBvY3RhbCBudW1iZXIgZm9yICJ0ciIKK05MCQk9IEBsaW5lX2JyZWFrQAorCisjIyMgVG9wIGRpcmVjdG9yeSBmb3IgZXZlcnl0aGluZworIyAgIENhbiBiZSBvdmVycnVsZWQgd2l0aCAiUFJFRklYPWRpciIsIHRodXMgZGVsYXkgdXNpbmcgaXQuCitwcmVmaXgJCT0gQHByZWZpeEAKKworIyMjIFRvcCBkaXJlY3RvcnkgZm9yIHRoZSBiaW5hcnkKK2V4ZWNfcHJlZml4CSQ9IEBleGVjX3ByZWZpeEAKKworIyMjIFByZWZpeCBmb3IgbG9jYXRpb24gb2YgZGF0YSBmaWxlcworQklORElSCQkkPSBAYmluZGlyQAorCisjIyMgUHJlZml4IGZvciBsb2NhdGlvbiBvZiBkYXRhIGZpbGVzCitEQVRBRElSCQkkPSBAZGF0YWRpckAKKworIyMjIFByZWZpeCBmb3IgbG9jYXRpb24gb2YgbWFuIHBhZ2VzCitNQU5ESVIJCSQ9IEBtYW5kaXJACisKKyMjIyBEbyB3ZSBoYXZlIGEgR1VJCitHVUkJCT0gQEdVSVRZUEVACitOQVJST1dfUFJPVE8JPSBATkFSUk9XX1BST1RPQAorR1RLX0xJQk5BTUUJPSBAR1RLX0xJQk5BTUVACitNT1RJRl9MSUJOQU1FCT0gQE1PVElGX0xJQk5BTUVACitHVUlfSU5DX0xPQwk9IEBHVUlfSU5DX0xPQ0AKK0dVSV9MSUJfTE9DCT0gQEdVSV9MSUJfTE9DQAorR1VJX1hfTElCUwk9IEBHVUlfWF9MSUJTQAorCisjIyMgQW55IE9TIGRlcGVuZGVudCBleHRyYSBzb3VyY2UgYW5kIG9iamVjdCBmaWxlCitPU19FWFRSQV9TUkMJPSBAT1NfRVhUUkFfU1JDQAorT1NfRVhUUkFfT0JKCT0gQE9TX0VYVFJBX09CSkAKKworIyMjIElmIHRoZSAqLnBvIGZpbGVzIGFyZSB0byBiZSB0cmFuc2xhdGVkIHRvICoubW8gZmlsZXMuCitNQUtFTU8JCT0gQE1BS0VNT0AKKworIyBNYWtlIHN1cmUgdGhhdCAibWFrZSBmaXJzdCIgd2lsbCBydW4gIm1ha2UgYWxsIiBvbmNlIGNvbmZpZ3VyZSBoYXMgZG9uZSBpdHMKKyMgd29yay4gIFRoaXMgaXMgbmVlZGVkIHdoZW4gdXNpbmcgdGhlIE1ha2VmaWxlIGluIHRoZSB0b3AgZGlyZWN0b3J5LgorZmlyc3Q6IGFsbApkaWZmIC0tZ2l0IGEvc3JjL2NvbmZpZy5oLmluIGIvc3JjL2NvbmZpZy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTI2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29uZmlnLmguaW4KQEAgLTAsMCArMSwzNjEgQEAKKy8qCisgKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIsIGFuZAorICogbWFudWFsbHkgY2hhbmdlZCBhZnRlciB0aGF0LgorICovCisKKy8qIERlZmluZSBpZiB3ZSBoYXZlIEVCQ0RJQyBjb2RlICovCisjdW5kZWYgRUJDRElDCisKKy8qIERlZmluZSB1bmxlc3Mgbm8gWCBzdXBwb3J0IGZvdW5kICovCisjdW5kZWYgSEFWRV9YMTEKKworLyogRGVmaW5lIHdoZW4gdGVybWluZm8gc3VwcG9ydCBmb3VuZCAqLworI3VuZGVmIFRFUk1JTkZPCisKKy8qIERlZmluZSB3aGVuIHRlcm1jYXAuaCBjb250YWlucyBvc3BlZWQgKi8KKyN1bmRlZiBIQVZFX09TUEVFRAorCisvKiBEZWZpbmUgd2hlbiBvc3BlZWQgY2FuIGJlIGV4dGVybiAqLworI3VuZGVmIE9TUEVFRF9FWFRFUk4KKworLyogRGVmaW5lIHdoZW4gdGVybWNhcC5oIGNvbnRhaW5zIFVQLCBCQyBhbmQgUEMgKi8KKyN1bmRlZiBIQVZFX1VQX0JDX1BDCisKKy8qIERlZmluZSB3aGVuIFVQLCBCQyBhbmQgUEMgY2FuIGJlIGV4dGVybiAqLworI3VuZGVmIFVQX0JDX1BDX0VYVEVSTgorCisvKiBEZWZpbmUgd2hlbiB0ZXJtY2FwLmggZGVmaW5lcyBvdXRmdW50eXBlICovCisjdW5kZWYgSEFWRV9PVVRGVU5UWVBFCisKKy8qIERlZmluZSB3aGVuIF9fREFURV9fICIgIiBfX1RJTUVfXyBjYW4gYmUgdXNlZCAqLworI3VuZGVmIEhBVkVfREFURV9USU1FCisKKy8qIGRlZmluZWQgYWx3YXlzIHdoZW4gdXNpbmcgY29uZmlndXJlICovCisjdW5kZWYgVU5JWAorCisvKiBEZWZpbmVkIHRvIHRoZSBzaXplIG9mIGFuIGludCAqLworI3VuZGVmIFNJWkVPRl9JTlQKKworLyoKKyAqIElmIHdlIGNhbm5vdCB0cnVzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBmcm9tIHRoZSBsaWJyYXJpZXMsIHdlIHVzZSBvdXIKKyAqIG93biBzYWZlIGJ1dCBwcm9iYWJseSBzbG93ZXIgdmltX21lbW1vdmUoKS4KKyAqLworI3VuZGVmIFVTRUJDT1BZCisjdW5kZWYgVVNFTUVNTU9WRQorI3VuZGVmIFVTRU1FTUNQWQorCisvKiBEZWZpbmUgd2hlbiAibWFuIC1zIDIiIGlzIHRvIGJlIHVzZWQgKi8KKyN1bmRlZiBVU0VNQU5fUworCisvKiBEZWZpbmUgdG8gZW1wdHkgaWYgdGhlIGtleXdvcmQgZG9lcyBub3Qgd29yay4gICovCisjdW5kZWYgY29uc3QKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICAqLworI3VuZGVmIG1vZGVfdAorCisvKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICAqLworI3VuZGVmIG9mZl90CisKKy8qIERlZmluZSB0byBgbG9uZycgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gICovCisjdW5kZWYgcGlkX3QKKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCcgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gICovCisjdW5kZWYgc2l6ZV90CisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAgKi8KKyN1bmRlZiB1aWRfdAorCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gICovCisjdW5kZWYgZ2lkX3QKKworLyogRGVmaW5lIHRvIGBsb25nJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAgKi8KKyN1bmRlZiBpbm9fdAorCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAgKi8KKyN1bmRlZiBkZXZfdAorCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGxvbmcnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICAqLworI3VuZGVmIHJsaW1fdAorCisvKiBEZWZpbmUgdG8gYHN0cnVjdCBzaWdhbHRzdGFjaycgaWYgPHNpZ25hbC5oPiBkb2Vzbid0IGRlZmluZS4gICovCisjdW5kZWYgc3RhY2tfdAorCisvKiBEZWZpbmUgaWYgc3RhY2tfdCBoYXMgdGhlIHNzX2Jhc2UgZmllbGQuICovCisjdW5kZWYgSEFWRV9TU19CQVNFCisKKy8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gICovCisjdW5kZWYgVElNRV9XSVRIX1NZU19USU1FCisKKy8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8c3lzL3NlbGVjdC5oPi4gICovCisjdW5kZWYgU1lTX1NFTEVDVF9XSVRIX1NZU19USU1FCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSAvZGV2L3B0YyAqLworI3VuZGVmIEhBVkVfREVWX1BUQworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgU3lzNCBwdHlzICovCisjdW5kZWYgSEFWRV9TVlI0X1BUWVMKKworLyogRGVmaW5lIHRvIHJhbmdlIG9mIHB0eSBuYW1lcyB0byB0cnkgKi8KKyN1bmRlZiBQVFlSQU5HRTAKKyN1bmRlZiBQVFlSQU5HRTEKKworLyogRGVmaW5lIG1vZGUgZm9yIHB0eSAqLworI3VuZGVmIFBUWU1PREUKKworLyogRGVmaW5lIGdyb3VwIGZvciBwdHkgKi8KKyN1bmRlZiBQVFlHUk9VUAorCisvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoaW50IG9yIHZvaWQpLiAgKi8KKyN1bmRlZiBSRVRTSUdUWVBFCisKKy8qIERlZmluZSBhcyB0aGUgY29tbWFuZCBhdCB0aGUgZW5kIG9mIHNpZ25hbCBoYW5kbGVycyAoIiIgb3IgInJldHVybiAwOyIpLiAgKi8KKyN1bmRlZiBTSUdSRVRVUk4KKworLyogRGVmaW5lIGlmIHN0cnVjdCBzaWdjb250ZXh0IGlzIHByZXNlbnQgKi8KKyN1bmRlZiBIQVZFX1NJR0NPTlRFWFQKKworLyogRGVmaW5lIGlmIHRvdXVwZXIvdG9sb3dlciBvbmx5IHdvcmsgb24gbG93ZXIvdXBlcmNhc2UgY2hhcmFjdGVycyAqLworI3VuZGVmIEJST0tFTl9UT1VQUEVSCisKKy8qIERlZmluZSBpZiBzdGF0KCkgaWdub3JlcyBhIHRyYWlsaW5nIHNsYXNoICovCisjdW5kZWYgU1RBVF9JR05PUkVTX1NMQVNICisKKy8qIERlZmluZSBpZiB0Z2V0c3RyKCkgaGFzIGEgc2Vjb25kIGFyZ3VtZW50IHRoYXQgaXMgKGNoYXIgKikgKi8KKyN1bmRlZiBUR0VUU1RSX0NIQVJfUAorCisvKiBEZWZpbmUgaWYgdGdldGVudCgpIHJldHVybnMgemVybyBmb3IgYW4gZXJyb3IgKi8KKyN1bmRlZiBUR0VURU5UX1pFUk9fRVJSCisKKy8qIERlZmluZSBpZiB0aGUgZ2V0Y3dkKCkgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkLiAgKi8KKyN1bmRlZiBCQURfR0VUQ1dECisKKy8qIERlZmluZSBpZiB5b3UgdGhlIGZ1bmN0aW9uOiAqLworI3VuZGVmIEhBVkVfQkNNUAorI3VuZGVmIEhBVkVfRkNIRElSCisjdW5kZWYgSEFWRV9GQ0hPV04KKyN1bmRlZiBIQVZFX0ZTRUVLTworI3VuZGVmIEhBVkVfRlNZTkMKKyN1bmRlZiBIQVZFX0ZURUxMTworI3VuZGVmIEhBVkVfR0VUQ1dECisjdW5kZWYgSEFWRV9HRVRQU0VVRE9UVFkKKyN1bmRlZiBIQVZFX0dFVFBXTkFNCisjdW5kZWYgSEFWRV9HRVRQV1VJRAorI3VuZGVmIEhBVkVfR0VUUkxJTUlUCisjdW5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyN1bmRlZiBIQVZFX0dFVFdECisjdW5kZWYgSEFWRV9JQ09OVgorI3VuZGVmIEhBVkVfTkxfTEFOR0lORk9fQ09ERVNFVAorI3VuZGVmIEhBVkVfTFNUQVQKKyN1bmRlZiBIQVZFX01FTUNNUAorI3VuZGVmIEhBVkVfTUVNU0VUCisjdW5kZWYgSEFWRV9OQU5PU0xFRVAKKyN1bmRlZiBIQVZFX09QRU5ESVIKKyN1bmRlZiBIQVZFX1BVVEVOVgorI3VuZGVmIEhBVkVfUVNPUlQKKyN1bmRlZiBIQVZFX1JFQURMSU5LCisjdW5kZWYgSEFWRV9SRU5BTUUKKyN1bmRlZiBIQVZFX1NFTEVDVAorI3VuZGVmIEhBVkVfU0VURU5WCisjdW5kZWYgSEFWRV9TRVRQR0lECisjdW5kZWYgSEFWRV9TRVRTSUQKKyN1bmRlZiBIQVZFX1NJR0FDVElPTgorI3VuZGVmIEhBVkVfU0lHQUxUU1RBQ0sKKyN1bmRlZiBIQVZFX1NJR1NFVAorI3VuZGVmIEhBVkVfU0lHU0VUSk1QCisjdW5kZWYgSEFWRV9TSUdTVEFDSworI3VuZGVmIEhBVkVfU0lHVkVDCisjdW5kZWYgSEFWRV9TTlBSSU5URgorI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorI3VuZGVmIEhBVkVfU1RSRVJST1IKKyN1bmRlZiBIQVZFX1NUUkZUSU1FCisjdW5kZWYgSEFWRV9TVFJJQ01QCisjdW5kZWYgSEFWRV9TVFJOQ0FTRUNNUAorI3VuZGVmIEhBVkVfU1RSTklDTVAKKyN1bmRlZiBIQVZFX1NUUlBCUksKKyN1bmRlZiBIQVZFX1NUUlRPTAorI3VuZGVmIEhBVkVfU1RfQkxLU0laRQorI3VuZGVmIEhBVkVfU1lTQ09ORgorI3VuZGVmIEhBVkVfU1lTQ1RMCisjdW5kZWYgSEFWRV9TWVNJTkZPCisjdW5kZWYgSEFWRV9UR0VURU5UCisjdW5kZWYgSEFWRV9UT1dMT1dFUgorI3VuZGVmIEhBVkVfVE9XVVBQRVIKKyN1bmRlZiBIQVZFX1VTTEVFUAorI3VuZGVmIEhBVkVfVVRJTUUKKyN1bmRlZiBIQVZFX0JJTkRfVEVYVERPTUFJTl9DT0RFU0VUCisKKy8qIERlZmluZSBpZiB5b3UgZG8gbm90IGhhdmUgdXRpbWUoKSwgYnV0IGRvIGhhdmUgdGhlIHV0aW1lcygpIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVVRJTUVTCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaGVhZGVyIGZpbGU6ICovCisjdW5kZWYgSEFWRV9ESVJFTlRfSAorI3VuZGVmIEhBVkVfRVJSTk9fSAorI3VuZGVmIEhBVkVfRkNOVExfSAorI3VuZGVmIEhBVkVfRlJBTUVfSAorI3VuZGVmIEhBVkVfSUNPTlZfSAorI3VuZGVmIEhBVkVfTEFOR0lORk9fSAorI3VuZGVmIEhBVkVfTElCQ19ICisjdW5kZWYgSEFWRV9MSUJHRU5fSAorI3VuZGVmIEhBVkVfTElCSU5UTF9ICisjdW5kZWYgSEFWRV9MT0NBTEVfSAorI3VuZGVmIEhBVkVfTkRJUl9ICisjdW5kZWYgSEFWRV9QT0xMX0gKKyN1bmRlZiBIQVZFX1BUSFJFQURfTlBfSAorI3VuZGVmIEhBVkVfUFdEX0gKKyN1bmRlZiBIQVZFX1NFVEpNUF9ICisjdW5kZWYgSEFWRV9TR1RUWV9ICisjdW5kZWYgSEFWRV9TVFJJTkdTX0gKKyN1bmRlZiBIQVZFX1NUUk9QVFNfSAorI3VuZGVmIEhBVkVfU1lTX0FDQ0VTU19ICisjdW5kZWYgSEFWRV9TWVNfQUNMX0gKKyN1bmRlZiBIQVZFX1NZU19ESVJfSAorI3VuZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyN1bmRlZiBIQVZFX1NZU19ORElSX0gKKyN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICisjdW5kZWYgSEFWRV9TWVNfUE9MTF9ICisjdW5kZWYgSEFWRV9TWVNfUFRFTV9ICisjdW5kZWYgSEFWRV9TWVNfUkVTT1VSQ0VfSAorI3VuZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjdW5kZWYgSEFWRV9TWVNfU1RBVEZTX0gKKyN1bmRlZiBIQVZFX1NZU19TVFJFQU1fSAorI3VuZGVmIEhBVkVfU1lTX1NZU0NUTF9ICisjdW5kZWYgSEFWRV9TWVNfU1lTSU5GT19ICisjdW5kZWYgSEFWRV9TWVNfU1lTVEVNSU5GT19ICisjdW5kZWYgSEFWRV9TWVNfVElNRV9ICisjdW5kZWYgSEFWRV9TWVNfVVRTTkFNRV9ICisjdW5kZWYgSEFWRV9XQ0hBUl9ICisjdW5kZWYgSEFWRV9URVJNQ0FQX0gKKyN1bmRlZiBIQVZFX1RFUk1JT1NfSAorI3VuZGVmIEhBVkVfVEVSTUlPX0gKKyN1bmRlZiBIQVZFX1VOSVNURF9ICisjdW5kZWYgSEFWRV9VVElMX0RFQlVHX0gKKyN1bmRlZiBIQVZFX1VUSUxfTVNHSTE4Tl9ICisjdW5kZWYgSEFWRV9VVElNRV9ICisjdW5kZWYgSEFWRV9YMTFfU1VOS0VZU1lNX0gKKyN1bmRlZiBIQVZFX1hNX1hNX0gKKyN1bmRlZiBIQVZFX1hNX1hQTVBfSAorI3VuZGVmIEhBVkVfWDExX1hQTV9ICisjdW5kZWYgSEFWRV9YMTFfWE1VX0VESVRSRVNfSAorI3VuZGVmIEhBVkVfWDExX1NNX1NNTElCX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIDxzeXMvd2FpdC5oPiB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZS4gICovCisjdW5kZWYgSEFWRV9TWVNfV0FJVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBhIDxzeXMvd2FpdC5oPiB0aGF0IGlzIG5vdCBQT1NJWC4xIGNvbXBhdGlibGUuICovCisjdW5kZWYgSEFWRV9VTklPTl9XQUlUCisKKy8qIFRoaXMgaXMgY3VycmVudGx5IHVudXNlZCBpbiB2aW06ICovCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisvKiAjdW5kZWYgU1REQ19IRUFERVJTICovCisKKy8qIGluc3RlYWQsIHdlIGNoZWNrIGEgZmV3IFNUREMgdGhpbmdzIG91cnNlbHZlcyAqLworI3VuZGVmIEhBVkVfU1REQVJHX0gKKyN1bmRlZiBIQVZFX1NURExJQl9ICisjdW5kZWYgSEFWRV9TVFJJTkdfSAorCisvKiBEZWZpbmUgaWYgc3RyaW5ncy5oIGNhbm5vdCBiZSBpbmNsdWRlZCB3aGVuIHN0cmluZ3MuaCBhbHJlYWR5IGlzICovCisjdW5kZWYgTk9fU1RSSU5HU19XSVRIX1NUUklOR19ICisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0aW55IGZlYXR1cmVzLiAqLworI3VuZGVmIEZFQVRfVElOWQorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgc21hbGwgZmVhdHVyZXMuICovCisjdW5kZWYgRkVBVF9TTUFMTAorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgbm9ybWFsIGZlYXR1cmVzLiAqLworI3VuZGVmIEZFQVRfTk9STUFMCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBiaWcgZmVhdHVyZXMuICovCisjdW5kZWYgRkVBVF9CSUcKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IGh1Z2UgZmVhdHVyZXMuICovCisjdW5kZWYgRkVBVF9IVUdFCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIHRoZSBQZXJsIGludGVycHJldGVyLiAqLworI3VuZGVmIEZFQVRfUEVSTAorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSB0aGUgUHl0aG9uIGludGVycHJldGVyLiAqLworI3VuZGVmIEZFQVRfUFlUSE9OCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIHRoZSBSdWJ5IGludGVycHJldGVyLiAqLworI3VuZGVmIEZFQVRfUlVCWQorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSB0aGUgVGNsIGludGVycHJldGVyLiAqLworI3VuZGVmIEZFQVRfVENMCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIHRoZSBTbmlmZiBpbnRlcmZhY2UuICovCisjdW5kZWYgRkVBVF9TTklGRgorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIEFDTCAqLworI3VuZGVmIEhBVkVfUE9TSVhfQUNMCisjdW5kZWYgSEFWRV9TT0xBUklTX0FDTAorI3VuZGVmIEhBVkVfQUlYX0FDTAorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgb2YgR1BNIChMaW51eCBjb25zb2xlIG1vdXNlIGRhZW1vbikgKi8KKyN1bmRlZiBIQVZFX0dQTQorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSB0aGUgQ3Njb3BlIGludGVyZmFjZS4gKi8KKyN1bmRlZiBGRUFUX0NTQ09QRQorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBtdWx0aWJ5dGUgc3VwcG9ydC4gKi8KKyN1bmRlZiBGRUFUX01CWVRFCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIGZvbnRzZXQgc3VwcG9ydC4gKi8KKyN1bmRlZiBGRUFUX1hGT05UU0VUCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIFhJTSBzdXBwb3J0LiAqLworI3VuZGVmIEZFQVRfWElNCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIEhhbmd1bCBpbnB1dCBzdXBwb3J0LiAqLworI3VuZGVmIEZFQVRfSEFOR1VMSU4KKworLyogRGVmaW5lIGlmIHlvdSB1c2UgR1RLIGFuZCB3YW50IEdOT01FIHN1cHBvcnQuICovCisjdW5kZWYgRkVBVF9HVUlfR05PTUUKKworLyogRGVmaW5lIGlmIEdUSysgMiBpcyBhdmFpbGFibGUuICovCisjdW5kZWYgSEFWRV9HVEsyCisKKy8qIERlZmluZSBpZiBHVEsrIG11bHRpaGVhZCBzdXBwb3J0IGlzIGF2YWlsYWJsZSAocmVxdWlyZXMgR1RLKyA+PSAyLjEuMSkuICovCisjdW5kZWYgSEFWRV9HVEtfTVVMVElIRUFECisKKy8qIERlZmluZSBpZiB5b3VyIFggaGFzIG93biBsb2NhbGUgbGlicmFyeSAqLworI3VuZGVmIFhfTE9DQUxFCisKKy8qIERlZmluZSBpZiB3ZSBoYXZlIGRsZmNuLmguICovCisjdW5kZWYgSEFWRV9ETEZDTl9ICisKKy8qIERlZmluZSBpZiB0aGVyZSBpcyBhIHdvcmtpbmcgZ2V0dGV4dCgpLiAqLworI3VuZGVmIEhBVkVfR0VUVEVYVAorCisvKiBEZWZpbmUgaWYgX25sX21zZ19jYXRfY250ciBpcyBwcmVzZW50LiAqLworI3VuZGVmIEhBVkVfTkxfTVNHX0NBVF9DTlRSCisKKy8qIERlZmluZSBpZiB3ZSBoYXZlIGRsb3BlbigpICovCisjdW5kZWYgSEFWRV9ETE9QRU4KKworLyogRGVmaW5lIGlmIHdlIGhhdmUgZGxzeW0oKSAqLworI3VuZGVmIEhBVkVfRExTWU0KKworLyogRGVmaW5lIGlmIHdlIGhhdmUgZGwuaC4gKi8KKyN1bmRlZiBIQVZFX0RMX0gKKworLyogRGVmaW5lIGlmIHdlIGhhdmUgc2hsX2xvYWQoKSAqLworI3VuZGVmIEhBVkVfU0hMX0xPQUQKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgU3VuIFZpc3VhbCBXb3Jrc2hvcCBzdXBwb3J0LiAqLworI3VuZGVmIEZFQVRfU1VOX1dPUktTSE9QCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIE5ldEJlYW5zIGludGVncmF0aW9uLiAqLworI3VuZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCisvKiBEZWZpbmUgZGVmYXVsdCBnbG9iYWwgcnVudGltZSBwYXRoICovCisjdW5kZWYgUlVOVElNRV9HTE9CQUwKKworLyogRGVmaW5lIG5hbWUgb2Ygd2hvIG1vZGlmaWVkIGEgcmVsZWFzZWQgVmltICovCisjdW5kZWYgTU9ESUZJRURfQlkKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IFhTTVAgaW50ZXJhY3Rpb24gYXMgd2VsbCBhcyB2YW5pbGxhIHN3YXBmaWxlIHNhZmV0eSAqLworI3VuZGVmIFVTRV9YU01QX0lOVEVSQUNUCisKKy8qIERlZmluZSBpZiB2c25wcmludGYoKSB3b3JrcyAqLworI3VuZGVmIEhBVkVfVlNOUFJJTlRGCmRpZmYgLS1naXQgYS9zcmMvY29uZmlnLm1rLmRpc3QgYi9zcmMvY29uZmlnLm1rLmRpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3YzEwOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb25maWcubWsuZGlzdApAQCAtMCwwICsxLDUgQEAKK3RoZSBmaXJzdCB0YXJnZXRzIHRvIG1ha2UgdmltIGFyZTogc2NyYXRjaCBjb25maWcgbXlzZWxmCitzcmNkaXIgPSAuCitWSU1OQU1FID0gdmltCitFWE5BTUUgPSBleAorVklFV05BTUUgPSB2aWV3CmRpZmYgLS1naXQgYS9zcmMvY29uZmlnLm1rLmluIGIvc3JjL2NvbmZpZy5tay5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDY2NDk5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbmZpZy5tay5pbgpAQCAtMCwwICsxLDEzNyBAQAorIworIyBjb25maWcubWsuaW4gLS0gYXV0b2NvbmYgdGVtcGxhdGUgZm9yIFZpbSBvbiBVbml4CQl2aW06dHM9ODpzdz04OgorIworIyBETyBOT1QgRURJVCBjb25maWcubWshISAgSXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSBjb25maWd1cmUuCisjIEVkaXQgTWFrZWZpbGUgYW5kIHJ1biAibWFrZSIgb3IgcnVuIC4vY29uZmlndXJlIHdpdGggb3RoZXIgYXJndW1lbnRzLgorIworIyBDb25maWd1cmUgZG9lcyBub3QgZWRpdCB0aGUgbWFrZWZpbGUgZGlyZWN0bHkuIFRoaXMgbWV0aG9kIGlzIG5vdCB0aGUKKyMgc3RhbmRhcmQgdXNlIG9mIEdOVSBhdXRvY29uZiwgYnV0IGl0IGhhcyB0d28gYWR2YW50YWdlczoKKyMgICBhKSBUaGUgdXNlciBjYW4gb3ZlcnJpZGUgZXZlcnkgY2hvaWNlIG1hZGUgYnkgY29uZmlndXJlLgorIyAgIGIpIE1vZGlmaWNhdGlvbnMgdG8gdGhlIG1ha2VmaWxlIGFyZSBub3QgbG9zdCB3aGVuIGNvbmZpZ3VyZSBpcyBydW4uCisjCisjIEkgaG9wZSB0aGlzIGlzIHdvcnRoIGJlaW5nIG5vbnN0YW5kYXJkLiBqdy4KKworQFNFVF9NQUtFQAorCitWSU1OQU1FCQk9IEBWSU1OQU1FQAorRVhOQU1FCQk9IEBFWE5BTUVACitWSUVXTkFNRQk9IEBWSUVXTkFNRUAKKworQ0MJCT0gQENDQAorREVGUwkJPSBAREVGU0AKK0NGTEFHUwkJPSBAQ0ZMQUdTQAorQ1BQRkxBR1MJPSBAQ1BQRkxBR1NACitzcmNkaXIJCT0gQHNyY2RpckAKK1ZQQVRICQk9IEBzcmNkaXJACitMREZMQUdTCQk9IEBMREZMQUdTQAorTElCUwkJPSBATElCU0AKK1RBR1BSRwkJPSBAVEFHUFJHQAorCitDUFAJCT0gQENQUEAKK0NQUF9NTQkJPSBAQ1BQX01NQAorWF9DRkxBR1MJPSBAWF9DRkxBR1NACitYX0xJQlNfRElSCT0gQFhfTElCU0AKK1hfUFJFX0xJQlMJPSBAWF9QUkVfTElCU0AKK1hfRVhUUkFfTElCUwk9IEBYX0VYVFJBX0xJQlNACitYX0xJQlMJCT0gQFhfTElCQAorCitQRVJMCQk9IEB2aV9jdl9wYXRoX3BlcmxACitQRVJMTElCCQk9IEB2aV9jdl9wZXJsbGliQAorUEVSTF9MSUJTCT0gQFBFUkxfTElCU0AKK1NIUlBFTlYJCT0gQHNocnBlbnZACitQRVJMX1NSQwk9IEBQRVJMX1NSQ0AKK1BFUkxfT0JKCT0gQFBFUkxfT0JKQAorUEVSTF9QUk8JPSBAUEVSTF9QUk9ACitQRVJMX0NGTEFHUwk9IEBQRVJMX0NGTEFHU0AKKworUFlUSE9OX1NSQwk9IEBQWVRIT05fU1JDQAorUFlUSE9OX09CSgk9IEBQWVRIT05fT0JKQAorUFlUSE9OX0NGTEFHUwk9IEBQWVRIT05fQ0ZMQUdTQAorUFlUSE9OX0xJQlMJPSBAUFlUSE9OX0xJQlNACitQWVRIT05fQ09ORkRJUgk9IEBQWVRIT05fQ09ORkRJUkAKK1BZVEhPTl9HRVRQQVRIX0NGTEFHUyA9IEBQWVRIT05fR0VUUEFUSF9DRkxBR1NACisKK1RDTAkJPSBAdmlfY3ZfcGF0aF90Y2xACitUQ0xfU1JDCQk9IEBUQ0xfU1JDQAorVENMX09CSgkJPSBAVENMX09CSkAKK1RDTF9QUk8JCT0gQFRDTF9QUk9ACitUQ0xfQ0ZMQUdTCT0gQFRDTF9DRkxBR1NACitUQ0xfTElCUwk9IEBUQ0xfTElCU0AKKworSEFOR1VMSU5fU1JDCT0gQEhBTkdVTElOX1NSQ0AKK0hBTkdVTElOX09CSgk9IEBIQU5HVUxJTl9PQkpACisKK1dPUktTSE9QX1NSQwk9IEBXT1JLU0hPUF9TUkNACitXT1JLU0hPUF9PQkoJPSBAV09SS1NIT1BfT0JKQAorCitORVRCRUFOU19TUkMJPSBATkVUQkVBTlNfU1JDQAorTkVUQkVBTlNfT0JKCT0gQE5FVEJFQU5TX09CSkAKKworUlVCWQkJPSBAdmlfY3ZfcGF0aF9ydWJ5QAorUlVCWV9TUkMJPSBAUlVCWV9TUkNACitSVUJZX09CSgk9IEBSVUJZX09CSkAKK1JVQllfUFJPCT0gQFJVQllfUFJPQAorUlVCWV9DRkxBR1MJPSBAUlVCWV9DRkxBR1NACitSVUJZX0xJQlMJPSBAUlVCWV9MSUJTQAorCitTTklGRl9TUkMJPSBAU05JRkZfU1JDQAorU05JRkZfT0JKCT0gQFNOSUZGX09CSkAKKworQVdLCQk9IEBBV0tACisKK1NUUklQCQk9IEBTVFJJUEAKKworRVhFRVhUCQk9IEBFWEVFWFRACisKK0NPTVBJTEVEQlkJPSBAY29tcGlsZWRieUAKKworSU5TVEFMTFZJTURJRkYJPSBAZG92aW1kaWZmQAorSU5TVEFMTEdWSU1ESUZGCT0gQGRvZ3ZpbWRpZmZACisKKyMjIyBMaW5lIGJyZWFrIGNoYXJhY3RlciBhcyBvY3RhbCBudW1iZXIgZm9yICJ0ciIKK05MCQk9IEBsaW5lX2JyZWFrQAorCisjIyMgVG9wIGRpcmVjdG9yeSBmb3IgZXZlcnl0aGluZworcHJlZml4CQk9IEBwcmVmaXhACisKKyMjIyBUb3AgZGlyZWN0b3J5IGZvciB0aGUgYmluYXJ5CitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKKworIyMjIFByZWZpeCBmb3IgbG9jYXRpb24gb2YgZGF0YSBmaWxlcworQklORElSCQk9IEBiaW5kaXJACisKKyMjIyBQcmVmaXggZm9yIGxvY2F0aW9uIG9mIGRhdGEgZmlsZXMKK0RBVEFESVIJCT0gQGRhdGFkaXJACisKKyMjIyBQcmVmaXggZm9yIGxvY2F0aW9uIG9mIG1hbiBwYWdlcworTUFORElSCQk9IEBtYW5kaXJACisKKyMjIyBEbyB3ZSBoYXZlIGEgR1VJCitHVUlfSU5DX0xPQwk9IEBHVUlfSU5DX0xPQ0AKK0dVSV9MSUJfTE9DCT0gQEdVSV9MSUJfTE9DQAorR1VJX1NSQwkJPSAkKEBHVUlUWVBFQF9TUkMpCitHVUlfT0JKCQk9ICQoQEdVSVRZUEVAX09CSikKK0dVSV9ERUZTCT0gJChAR1VJVFlQRUBfREVGUykKK0dVSV9JUEFUSAk9ICQoQEdVSVRZUEVAX0lQQVRIKQorR1VJX0xJQlNfRElSCT0gJChAR1VJVFlQRUBfTElCU19ESVIpCitHVUlfTElCUzEJPSAkKEBHVUlUWVBFQF9MSUJTMSkKK0dVSV9MSUJTMgk9ICQoQEdVSVRZUEVAX0xJQlMyKQorR1VJX0lOU1RBTEwJPSAkKEBHVUlUWVBFQF9JTlNUQUxMKQorR1VJX1RBUkdFVFMJPSAkKEBHVUlUWVBFQF9UQVJHRVRTKQorR1VJX01BTl9UQVJHRVRTCT0gJChAR1VJVFlQRUBfTUFOX1RBUkdFVFMpCitHVUlfVEVTVFRBUkdFVAk9ICQoQEdVSVRZUEVAX1RFU1RUQVJHRVQpCitOQVJST1dfUFJPVE8JPSBATkFSUk9XX1BST1RPQAorR1VJX1hfTElCUwk9IEBHVUlfWF9MSUJTQAorTU9USUZfTElCTkFNRQk9IEBNT1RJRl9MSUJOQU1FQAorR1RLX0xJQk5BTUUJPSBAR1RLX0xJQk5BTUVACisKKyMjIyBBbnkgT1MgZGVwZW5kZW50IGV4dHJhIHNvdXJjZSBhbmQgb2JqZWN0IGZpbGUKK09TX0VYVFJBX1NSQwk9IEBPU19FWFRSQV9TUkNACitPU19FWFRSQV9PQkoJPSBAT1NfRVhUUkFfT0JKQAorCisjIyMgSWYgdGhlICoucG8gZmlsZXMgYXJlIHRvIGJlIHRyYW5zbGF0ZWQgdG8gKi5tbyBmaWxlcy4KK01BS0VNTwkJPSBATUFLRU1PQAorCisjIE1ha2Ugc3VyZSB0aGF0ICJtYWtlIGZpcnN0IiB3aWxsIHJ1biAibWFrZSBhbGwiIG9uY2UgY29uZmlndXJlIGhhcyBkb25lIGl0cworIyB3b3JrLiAgVGhpcyBpcyBuZWVkZWQgd2hlbiB1c2luZyB0aGUgTWFrZWZpbGUgaW4gdGhlIHRvcCBkaXJlY3RvcnkuCitmaXJzdDogYWxsCmRpZmYgLS1naXQgYS9zcmMvY29uZmlndXJlIGIvc3JjL2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZTIyNWVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbmZpZ3VyZQpAQCAtMCwwICsxLDQgQEAKKyMhIC9iaW4vc2gKKyMgcnVuIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0CitDT05GSUdfU1RBVFVTPWF1dG8vY29uZmlnLnN0YXR1cyBcCisJYXV0by9jb25maWd1cmUgIiRAIiAtLXNyY2Rpcj0iJHtzcmNkaXItLn0iIC0tY2FjaGUtZmlsZT1hdXRvL2NvbmZpZy5jYWNoZQpkaWZmIC0tZ2l0IGEvc3JjL2NvbmZpZ3VyZS5pbiBiL3NyYy9jb25maWd1cmUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyM2UwNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb25maWd1cmUuaW4KQEAgLTAsMCArMSwyNjYwIEBACitkbmwgY29uZmlndXJlLmluOiBhdXRvY29uZiBzY3JpcHQgZm9yIFZpbQorCitkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiAyLjEyIG9yIDIuMTMgdG8gcHJvZHVjZSAiY29uZmlndXJlIi4KK2RubCBTaG91bGQgYWxzbyB3b3JrIHdpdGggYXV0b2NvbmYgMi41NCBhbmQgbGF0ZXIuCisKK0FDX0lOSVQodmltLmgpCitBQ19DT05GSUdfSEVBREVSKGF1dG8vY29uZmlnLmg6Y29uZmlnLmguaW4pCisKK2RubCBCZWluZyBhYmxlIHRvIHJ1biBjb25maWd1cmUgbWVhbnMgdGhlIHN5c3RlbSBpcyBVbml4IChjb21wYXRpYmxlKS4KK0FDX0RFRklORShVTklYKQorQUNfUFJPR19NQUtFX1NFVAorCitkbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KK0FDX1BST0dfQ0MJZG5sIHJlcXVpcmVkIGJ5IGFsbW9zdCBldmVyeXRoaW5nCitBQ19QUk9HX0NQUAlkbmwgcmVxdWlyZWQgYnkgaGVhZGVyIGZpbGUgY2hlY2tzCitBQ19QUk9HUkFNX0VHUkVQIGRubCByZXF1aXJlZCBieSBBQ19FR1JFUF9DUFAKK0FDX0lTQ19QT1NJWAlkbmwgcmVxdWlyZWQgYnkgQUNfQ19DUk9TUworQUNfUFJPR19BV0sJZG5sIHJlcXVpcmVkIGZvciAibWFrZSBodG1sIiBpbiAuLi9kb2MKKworZG5sIERvbid0IHN0cmlwIGlmIHdlIGRvbid0IGhhdmUgaXQKK0FDX0NIRUNLX1BST0coU1RSSVAsIHN0cmlwLCBzdHJpcCwgOikKKworZG5sIENoZWNrIGZvciBleHRlbnRpb24gb2YgZXhlY3V0YWJsZXMKK0FDX0VYRUVYVAorCitkbmwgU2V0IGRlZmF1bHQgdmFsdWUgZm9yIENGTEFHUyBpZiBub25lIGlzIGRlZmluZWQgb3IgaXQncyBlbXB0eQoraWYgdGVzdCAteiAiJENGTEFHUyI7IHRoZW4KKyAgQ0ZMQUdTPSItTyIKKyAgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgQ0ZMQUdTPSItTzIgLWZuby1zdHJlbmd0aC1yZWR1Y2UgLVdhbGwiCitmaQoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgZ2NjdmVyc2lvbj1gIiRDQyIgLS12ZXJzaW9uIHwgc2VkIC1lICcyLCRkO3MvXltbXjAtOV1dKlwoW1swLTldXVwuW1swLTkuXV0qXCkuKiQvXDEvZydgCisgIGlmIHRlc3QgIiRnY2N2ZXJzaW9uIiA9ICIzLjAuMSIgLW8gIiRnY2N2ZXJzaW9uIiA9ICIzLjAuMiI7IHRoZW4KKyAgICBlY2hvICdHQ0MgMy4wLnggaGFzIGEgYnVnIGluIHRoZSBvcHRpbWl6ZXIsIGRpc2FibGluZyAiLU8jIicKKyAgICBDRkxBR1M9YGVjaG8gIiRDRkxBR1MiIHwgc2VkICdzLy1PW1syMzQ1Njc4OV1dLy1PLydgCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkZ2NjdmVyc2lvbiIgPSAiMy4xIiAtbyAiJGdjY3ZlcnNpb24iID0gIjMuMiIgLW8gIiRnY2N2ZXJzaW9uIiA9ICIzLjIuMSIgJiYgYGVjaG8gIiRDRkxBR1MiIHwgZ3JlcCAtdiBmbm8tc3RyZW5ndGgtcmVkdWNlID4vZGV2L251bGxgOyB0aGVuCisgICAgICBlY2hvICdHQ0MgMy4xIGFuZCAzLjIgaGF2ZSBhIGJ1ZyBpbiB0aGUgb3B0aW1pemVyLCBhZGRpbmcgIi1mbm8tc3RyZW5ndGgtcmVkdWNlIicKKyAgICAgIENGTEFHUz0iJENGTEFHUyAtZm5vLXN0cmVuZ3RoLXJlZHVjZSIKKyAgICBmaQorICBmaQorZmkKKworZG5sIElmIGNvbmZpZ3VyZSB0aGlua3Mgd2UgYXJlIGNyb3NzIGNvbXBpbGluZywgdGhlcmUgaXMgcHJvYmFibHkgc29tZXRoaW5nCitkbmwgd3Jvbmcgd2l0aCB0aGUgQ0Mgb3IgQ0ZMQUdTIHNldHRpbmdzLCBnaXZlIGFuIHVuZGVyc3RhbmRhYmxlIGVycm9yIG1lc3NhZ2UKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIEFDX01TR19FUlJPUihbY2Fubm90IGNvbXBpbGUgYSBzaW1wbGUgcHJvZ3JhbSwgY2hlY2sgQ0MgYW5kIENGTEFHUworICAoY3Jvc3MgY29tcGlsaW5nIGRvZXNuJ3Qgd29yayldKQorZmkKKworZG5sIGdjYy1jcHAgaGFzIHRoZSB3b25kZXJmdWwgLU1NIG9wdGlvbiB0byBwcm9kdWNlIG5pY2VyIGRlcGVuZGVuY2llcwordGVzdCAiJEdDQyIgPSB5ZXMgJiYgQ1BQX01NPU07IEFDX1NVQlNUKENQUF9NTSkKKworaWYgdGVzdCAtZiAuL3Rvb2xjaGVjazsgdGhlbgorICBBQ19DSEVDS0lORyhmb3IgYnVnZ3kgdG9vbHMpCisgIHNoIC4vdG9vbGNoZWNrIDE+JkFDX0ZEX01TRworZmkKKworT1NfRVhUUkFfU1JDPSIiOyBPU19FWFRSQV9PQko9IiIKKworZG5sIENoZWNrIGZvciBCZU9TLCB3aGljaCBuZWVkcyBhbiBleHRyYSBzb3VyY2UgZmlsZQorQUNfTVNHX0NIRUNLSU5HKGZvciBCZU9TKQorY2FzZSBgdW5hbWVgIGluCisgICAgQmVPUykJT1NfRVhUUkFfU1JDPW9zX2Jlb3MuYzsgT1NfRVhUUkFfT0JKPW9iamVjdHMvb3NfYmVvcy5vCisJCUJFT1M9eWVzOyBBQ19NU0dfUkVTVUxUKHllcyk7OworICAgICopCQlCRU9TPW5vOyBBQ19NU0dfUkVTVUxUKG5vKTs7Citlc2FjCisKK2RubCBJZiBRTlggaXMgZm91bmQsIGFzc3VtZSB3ZSBkb24ndCB3YW50IHRvIHVzZSBYcGhvdG9uCitkbmwgdW5sZXNzIGl0IHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgZm9yICgtLXdpdGgteCkKK0FDX01TR19DSEVDS0lORyhmb3IgUU5YKQorY2FzZSBgdW5hbWVgIGluCisgICAgUU5YKQlPU19FWFRSQV9TUkM9b3NfcW54LmM7IE9TX0VYVFJBX09CSj1vYmplY3RzL29zX3FueC5vCisJCXRlc3QgLXogIiR3aXRoX3giICYmIHdpdGhfeD1ubworCQlRTlg9eWVzOyBBQ19NU0dfUkVTVUxUKHllcyk7OworICAgICopCQlRTlg9bm87IEFDX01TR19SRVNVTFQobm8pOzsKK2VzYWMKKworZG5sIENoZWNrIGZvciBEYXJ3aW4gYW5kIE1hY09TIFgKK2RubCBXZSBkbyBhIGNoZWNrIGZvciBNYWNPUyBYIGluIHRoZSB2ZXJ5IGJlZ2lubmluZyBiZWNhdXNlIHRoZXJlCitkbmwgYXJlIGEgbG90IG9mIG90aGVyIHRoaW5ncyB3ZSBuZWVkIHRvIGNoYW5nZSBiZXNpZGVzIEdVSSBzdHVmZgorREVGQVVMVF9WSU1OQU1FPXZpbQorQUNfTVNHX0NIRUNLSU5HKFtmb3IgRGFyd2luIChNYWMgT1MgWCldKQoraWYgdGVzdCAiYCh1bmFtZSkgMj4vZGV2L251bGxgIiA9IERhcndpbjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKHllcykKKworICBBQ19NU0dfQ0hFQ0tJTkcoLS1kaXNhYmxlLWRhcndpbiBhcmd1bWVudCkKKyAgQUNfQVJHX0VOQUJMRShkYXJ3aW4sCisJICBbICAtLWRpc2FibGUtZGFyd2luICAgICAgICBEaXNhYmxlIERhcndpbiAoTWFjIE9TIFgpIHN1cHBvcnQuXSwKKwkgICwgW2VuYWJsZV9kYXJ3aW49InllcyJdKQorICBpZiB0ZXN0ICIkZW5hYmxlX2RhcndpbiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgQUNfTVNHX0NIRUNLSU5HKGlmIERhcndpbiBmaWxlcyBhcmUgdGhlcmUpCisgICAgaWYgdGVzdCAtZiBvc19tYWNvc3guYzsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm8sIERhcndpbiBzdXBwb3J0IGRpc2FibGVkXSkKKyAgICAgIGVuYWJsZV9kYXJ3aW49bm8KKyAgICBmaQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbeWVzLCBEYXJ3aW4gc3VwcG9ydCBleGNsdWRlZF0pCisgIGZpCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9kYXJ3aW4iID0gInllcyI7IHRoZW4KKyAgICBNQUNPU1g9eWVzCisgICAgT1NfRVhUUkFfU0NSPSJvc19tYWNvc3guYyI7CisgICAgT1NfRVhUUkFfT0JKPSJvYmplY3RzL29zX21hY29zeC5vIgorICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURNQUNPU19YX1VOSVggLUkvRGV2ZWxvcGVyL0hlYWRlcnMvRmxhdENhcmJvbiAtbm8tY3BwLXByZWNvbXAiCisKKyAgICBkbmwgSWYgQ2FyYm9uIGlzIGZvdW5kLCBhc3N1bWUgd2UgZG9uJ3Qgd2FudCBYMTEKKyAgICBkbmwgdW5sZXNzIGl0IHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgZm9yICgtLXdpdGgteCkKKyAgICBBQ19DSEVDS19IRUFERVIoQ2FyYm9uL0NhcmJvbi5oLCBDQVJCT049eWVzKQorICAgIGlmIHRlc3QgIngkQ0FSQk9OIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJHdpdGhfeCI7IHRoZW4KKwl3aXRoX3g9bm8KKwlERUZBVUxUX1ZJTU5BTUU9VmltCisgICAgICBmaQorICAgIGZpCisgIGZpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorCitBQ19TVUJTVChPU19FWFRSQV9TUkMpCitBQ19TVUJTVChPU19FWFRSQV9PQkopCisKK2RubCBBZGQgL3Vzci9sb2NhbC9saWIgdG8gJExERkxBR1MgYW5kIC91c3IvbG9jYWwvaW5jbHVkZSB0byBDRkxBR1MuCitkbmwgT25seSB3aGVuIHRoZSBkaXJlY3RvcnkgZXhpc3RzIGFuZCBpdCB3YXNuJ3QgdGhlcmUgeWV0LgorZG5sIEZvciBnY2MgZG9uJ3QgZG8gdGhpcyB3aGVuIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGguCitoYXZlX2xvY2FsX2luY2x1ZGU9JycKK2hhdmVfbG9jYWxfbGliPScnCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBlY2hvICd2b2lkIGYoKXt9JyA+IGNvbmZ0ZXN0LmMKKyAgZG5sIC1uby1jcHAtcHJlY29tcCBpcyBuZWVkZWQgZm9yIE9TIFggMTAuMiAoQmVuIEZvd2xlcikKKyAgaGF2ZV9sb2NhbF9pbmNsdWRlPWAke0NDLWNjfSAtbm8tY3BwLXByZWNvbXAgLWMgLXYgY29uZnRlc3QuYyAyPiYxIHwgZ3JlcCAnL3Vzci9sb2NhbC9pbmNsdWRlJ2AKKyAgaGF2ZV9sb2NhbF9saWI9YCR7Q0MtY2N9IC1jIC12IGNvbmZ0ZXN0LmMgMj4mMSB8IGdyZXAgJy91c3IvbG9jYWwvbGliJ2AKKyAgcm0gLWYgY29uZnRlc3QuYyBjb25mdGVzdC5vCitmaQoraWYgdGVzdCAteiAiJGhhdmVfbG9jYWxfbGliIiAtYSAtZCAvdXNyL2xvY2FsL2xpYjsgdGhlbgorICB0dD1gZWNobyAiJExERkxBR1MiIHwgc2VkIC1lICdzKy1ML3Vzci9sb2NhbC9saWIgKytnJyAtZSAncystTC91c3IvbG9jYWwvbGliJCsrZydgCisgIGlmIHRlc3QgIiR0dCIgPSAiJExERkxBR1MiOyB0aGVuCisgICAgTERGTEFHUz0iJExERkxBR1MgLUwvdXNyL2xvY2FsL2xpYiIKKyAgZmkKK2ZpCitpZiB0ZXN0IC16ICIkaGF2ZV9sb2NhbF9pbmNsdWRlIiAtYSAtZCAvdXNyL2xvY2FsL2luY2x1ZGU7IHRoZW4KKyAgdHQ9YGVjaG8gIiRDUFBGTEFHUyIgfCBzZWQgLWUgJ3MrLUkvdXNyL2xvY2FsL2luY2x1ZGUgKytnJyAtZSAncystSS91c3IvbG9jYWwvaW5jbHVkZSQrK2cnYAorICBpZiB0ZXN0ICIkdHQiID0gIiRDUFBGTEFHUyI7IHRoZW4KKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9sb2NhbC9pbmNsdWRlIgorICBmaQorZmkKKworQUNfTVNHX0NIRUNLSU5HKC0td2l0aC12aW0tbmFtZSBhcmd1bWVudCkKK0FDX0FSR19XSVRIKHZpbS1uYW1lLCBbICAtLXdpdGgtdmltLW5hbWU9TkFNRSAgICB3aGF0IHRvIGNhbGwgdGhlIFZpbSBleGVjdXRhYmxlXSwKKwlWSU1OQU1FPSIkd2l0aHZhbCI7IEFDX01TR19SRVNVTFQoJFZJTU5BTUUpLAorCVZJTU5BTUU9IiRERUZBVUxUX1ZJTU5BTUUiOyBBQ19NU0dfUkVTVUxUKERlZmF1bHRpbmcgdG8gJFZJTU5BTUUpKQorQUNfU1VCU1QoVklNTkFNRSkKK0FDX01TR19DSEVDS0lORygtLXdpdGgtZXgtbmFtZSBhcmd1bWVudCkKK0FDX0FSR19XSVRIKGV4LW5hbWUsIFsgIC0td2l0aC1leC1uYW1lPU5BTUUgICAgIHdoYXQgdG8gY2FsbCB0aGUgRXggZXhlY3V0YWJsZV0sCisJRVhOQU1FPSIkd2l0aHZhbCI7IEFDX01TR19SRVNVTFQoJEVYTkFNRSksCisJRVhOQU1FPSJleCI7IEFDX01TR19SRVNVTFQoRGVmYXVsdGluZyB0byBleCkpCitBQ19TVUJTVChFWE5BTUUpCitBQ19NU0dfQ0hFQ0tJTkcoLS13aXRoLXZpZXctbmFtZSBhcmd1bWVudCkKK0FDX0FSR19XSVRIKHZpZXctbmFtZSwgWyAgLS13aXRoLXZpZXctbmFtZT1OQU1FICAgd2hhdCB0byBjYWxsIHRoZSBWaWV3IGV4ZWN1dGFibGVdLAorCVZJRVdOQU1FPSIkd2l0aHZhbCI7IEFDX01TR19SRVNVTFQoJFZJRVdOQU1FKSwKKwlWSUVXTkFNRT0idmlldyI7IEFDX01TR19SRVNVTFQoRGVmYXVsdGluZyB0byB2aWV3KSkKK0FDX1NVQlNUKFZJRVdOQU1FKQorCitBQ19NU0dfQ0hFQ0tJTkcoLS13aXRoLWdsb2JhbC1ydW50aW1lIGFyZ3VtZW50KQorQUNfQVJHX1dJVEgoZ2xvYmFsLXJ1bnRpbWUsIFsgIC0td2l0aC1nbG9iYWwtcnVudGltZT1ESVIgICAgZ2xvYmFsIHJ1bnRpbWUgZGlyZWN0b3J5IGluICdydW50aW1lcGF0aCddLAorCUFDX01TR19SRVNVTFQoJHdpdGh2YWwpOyBBQ19ERUZJTkVfVU5RVU9URUQoUlVOVElNRV9HTE9CQUwsICIkd2l0aHZhbCIpLAorCUFDX01TR19SRVNVTFQobm8pKQorCitBQ19NU0dfQ0hFQ0tJTkcoLS13aXRoLW1vZGlmaWVkLWJ5IGFyZ3VtZW50KQorQUNfQVJHX1dJVEgobW9kaWZpZWQtYnksIFsgIC0td2l0aC1tb2RpZmllZC1ieT1OQU1FICAgICAgIG5hbWUgb2Ygd2hvIG1vZGlmaWVkIGEgcmVsZWFzZSB2ZXJzaW9uXSwKKwlBQ19NU0dfUkVTVUxUKCR3aXRodmFsKTsgQUNfREVGSU5FX1VOUVVPVEVEKE1PRElGSUVEX0JZLCAiJHdpdGh2YWwiKSwKKwlBQ19NU0dfUkVTVUxUKG5vKSkKKworZG5sIENoZWNrIGZvciBFQkNESUMgc3RvbGVuIGZyb20gdGhlIExZTlggcG9ydCB0byBPUzM5MCBVbml4CitBQ19NU0dfQ0hFQ0tJTkcoaWYgY2hhcmFjdGVyIHNldCBpcyBFQkNESUMpCitBQ19UUllfQ09NUElMRShbIF0sCitbIC8qIFRyeUNvbXBpbGUgZnVuY3Rpb24gZm9yIENoYXJTZXQuCisgICBUcmVhdCBhbnkgZmFpbHVyZSBhcyBBU0NJSSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGFydC4KKyAgIFVzZSBjb21waWxlLXRpbWUgcmF0aGVyIHRoYW4gcnVuLXRpbWUgdGVzdHMgZm9yIGNyb3NzLWNvbXBpbGVyCisgICB0b2xlcmFuY2UuICAqLworI2lmICcwJyE9MjQwCittYWtlIGFuIGVycm9yICJDaGFyYWN0ZXIgc2V0IGlzIG5vdCBFQkNESUMiCisjZW5kaWYgXSwKK1sgIyBUcnlDb21waWxlIGFjdGlvbiBpZiB0cnVlCitjZl9jdl9lYmNkaWM9eWVzIF0sCitbICMgVHJ5Q29tcGlsZSBhY3Rpb24gaWYgZmFsc2UKK2NmX2N2X2ViY2RpYz1ub10pCisjIGVuZCBvZiBUcnlDb21waWxlIF0pCisjIGVuZCBvZiBDYWNoZVZhbCBDdkViY2RpYworQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfZWJjZGljKQorY2FzZSAiJGNmX2N2X2ViY2RpYyIgaW4gICModmkKKyAgICB5ZXMpCUFDX0RFRklORShFQkNESUMpCisJCWxpbmVfYnJlYWs9JyJcXG4iJworCQk7OworICAgICopCQlsaW5lX2JyZWFrPSciXFwwMTIiJzs7Citlc2FjCitBQ19TVUJTVChsaW5lX2JyZWFrKQorCitpZiB0ZXN0ICIkY2ZfY3ZfZWJjZGljIiA9ICJ5ZXMiOyB0aGVuCitkbmwgSWYgd2UgaGF2ZSBFQkNESUMgd2UgbW9zdCBsaWtsZXkgaGF2ZSBPUzM5MCBVbml4LCBsZXQncyB0ZXN0IGl0IQorQUNfTVNHX0NIRUNLSU5HKGZvciBPUy8zOTAgVW5peCkKK2Nhc2UgYHVuYW1lYCBpbgorICAgIE9TLzM5MCkJT1MzOTBVbml4PSJ5ZXMiOworCQlkbmwgSWYgdXNpbmcgY2MgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIF9DQ19DQ01PREUgbXVzdCBiZQorCQlkbmwgc2V0IHRvICIxIiwgc28gdGhhdCBzb21lIGNvbXBpbGVyIGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQuCisJCWRubCBJZiB1c2luZyBjODkgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5hbWVkIF9DQ19DODlNT0RFLgorCQlkbmwgTm90ZTogY29tcGlsZSB3aXRoIGM4OSBuZXZlciB0ZXN0ZWQuCisJCWlmIHRlc3QgIiRDQyIgPSAiY2MiOyB0aGVuCisJCSAgY2NtPSIkX0NDX0NDTU9ERSIKKwkJICBjY249IkNDIgorCQllbHNlCisJCSAgaWYgdGVzdCAiJENDIiA9ICJjODkiOyB0aGVuCisJCSAgICBjY209IiRfQ0NfQzg5TU9ERSIKKwkJICAgIGNjbj0iQzg5IgorCQkgIGVsc2UKKwkJICAgIGNjbT0xCisJCSAgZmkKKwkJZmkKKwkJaWYgdGVzdCAiJGNjbSIgIT0gIjEiOyB0aGVuCisJCSAgZWNobyAiIgorCQkgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwkJICBlY2hvICIgT24gT1MvMzkwIFVuaXgsIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwkJICBlY2hvICIgX19DQ18ke2Njbn1NT0RFIG11c3QgYmUgc2V0IHRvIFwiMVwiISIKKwkJICBlY2hvICIgRG86IgorCQkgIGVjaG8gIiAgICBleHBvcnQgX0NDXyR7Y2NufU1PREU9MSIKKwkJICBlY2hvICIgYW5kIHRoZW4gY2FsbCBjb25maWd1cmUgYWdhaW4uIgorCQkgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwkJICBleGl0IDEKKwkJZmkKKwkJQ0ZMQUdTPSIkQ0ZMQUdTIC1EX0FMTF9TT1VSQ0UiOyBMREZMQUdTPSIkTERGTEFHUyAtV2wsRURJVD1OTyIKKwkJQUNfTVNHX1JFU1VMVCh5ZXMpCisJCTs7CisgICAgKikJCU9TMzkwVW5peD0ibm8iOworCQlBQ19NU0dfUkVTVUxUKG5vKQorCQk7OworZXNhYworZmkKKworCitkbmwgQ2hlY2sgdXNlciByZXF1ZXN0ZWQgZmVhdHVyZXMuCisKK0FDX01TR19DSEVDS0lORygtLXdpdGgtZmVhdHVyZXMgYXJndW1lbnQpCitBQ19BUkdfV0lUSChmZWF0dXJlcywgWyAgLS13aXRoLWZlYXR1cmVzPVRZUEUgICAgdGlueSwgc21hbGwsIG5vcm1hbCwgYmlnIG9yIGh1Z2UgKGRlZmF1bHQ6IG5vcm1hbCldLAorCWZlYXR1cmVzPSIkd2l0aHZhbCI7IEFDX01TR19SRVNVTFQoJGZlYXR1cmVzKSwKKwlmZWF0dXJlcz0ibm9ybWFsIjsgQUNfTVNHX1JFU1VMVChEZWZhdWx0aW5nIHRvIG5vcm1hbCkpCisKK2RvdmltZGlmZj0iIgorZG9ndmltZGlmZj0iIgorY2FzZSAiJGZlYXR1cmVzIiBpbgorICB0aW55KQkJQUNfREVGSU5FKEZFQVRfVElOWSkgOzsKKyAgc21hbGwpCUFDX0RFRklORShGRUFUX1NNQUxMKSA7OworICBub3JtYWwpCUFDX0RFRklORShGRUFUX05PUk1BTCkgZG92aW1kaWZmPSJpbnN0YWxsdmltZGlmZiI7CisJCQlkb2d2aW1kaWZmPSJpbnN0YWxsZ3ZpbWRpZmYiIDs7CisgIGJpZykJCUFDX0RFRklORShGRUFUX0JJRykgZG92aW1kaWZmPSJpbnN0YWxsdmltZGlmZiI7CisJCQlkb2d2aW1kaWZmPSJpbnN0YWxsZ3ZpbWRpZmYiIDs7CisgIGh1Z2UpCQlBQ19ERUZJTkUoRkVBVF9IVUdFKSBkb3ZpbWRpZmY9Imluc3RhbGx2aW1kaWZmIjsKKwkJCWRvZ3ZpbWRpZmY9Imluc3RhbGxndmltZGlmZiIgOzsKKyAgKikJCUFDX01TR19SRVNVTFQoW1NvcnJ5LCAkZmVhdHVyZXMgaXMgbm90IHN1cHBvcnRlZF0pIDs7Citlc2FjCisKK0FDX1NVQlNUKGRvdmltZGlmZikKK0FDX1NVQlNUKGRvZ3ZpbWRpZmYpCisKK0FDX01TR19DSEVDS0lORygtLXdpdGgtY29tcGlsZWRieSBhcmd1bWVudCkKK0FDX0FSR19XSVRIKGNvbXBpbGVkYnksIFsgIC0td2l0aC1jb21waWxlZGJ5PU5BTUUgIG5hbWUgdG8gc2hvdyBpbiA6dmVyc2lvbiBtZXNzYWdlXSwKKwljb21waWxlZGJ5PSIkd2l0aHZhbCI7IEFDX01TR19SRVNVTFQoJHdpdGh2YWwpLAorCWNvbXBpbGVkYnk9IiI7IEFDX01TR19SRVNVTFQobm8pKQorQUNfU1VCU1QoY29tcGlsZWRieSkKKworQUNfTVNHX0NIRUNLSU5HKC0tZGlzYWJsZS14c21wIGFyZ3VtZW50KQorQUNfQVJHX0VOQUJMRSh4c21wLAorCVsgIC0tZGlzYWJsZS14c21wICAgICAgICAgIERpc2FibGUgWFNNUCBzZXNzaW9uIG1hbmFnZW1lbnRdLAorCSwgZW5hYmxlX3hzbXA9InllcyIpCisKK2lmIHRlc3QgIiRlbmFibGVfeHNtcCIgPSAieWVzIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKG5vKQorICBBQ19NU0dfQ0hFQ0tJTkcoLS1kaXNhYmxlLXhzbXAtaW50ZXJhY3QgYXJndW1lbnQpCisgIEFDX0FSR19FTkFCTEUoeHNtcC1pbnRlcmFjdCwKKwkgIFsgIC0tZGlzYWJsZS14c21wLWludGVyYWN0IERpc2FibGUgWFNNUCBpbnRlcmFjdGlvbl0sCisJICAsIGVuYWJsZV94c21wX2ludGVyYWN0PSJ5ZXMiKQorICBpZiB0ZXN0ICIkZW5hYmxlX3hzbXBfaW50ZXJhY3QiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgIEFDX0RFRklORShVU0VfWFNNUF9JTlRFUkFDVCkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoeWVzKQorICBmaQorZWxzZQorICBBQ19NU0dfUkVTVUxUKHllcykKK2ZpCisKK0FDX01TR19DSEVDS0lORygtLWVuYWJsZS1wZXJsaW50ZXJwIGFyZ3VtZW50KQorQUNfQVJHX0VOQUJMRShwZXJsaW50ZXJwLAorCVsgIC0tZW5hYmxlLXBlcmxpbnRlcnAgICAgIEluY2x1ZGUgUGVybCBpbnRlcnByZXRlci5dLCAsCisJW2VuYWJsZV9wZXJsaW50ZXJwPSJubyJdKQorQUNfTVNHX1JFU1VMVCgkZW5hYmxlX3BlcmxpbnRlcnApCitpZiB0ZXN0ICIkZW5hYmxlX3BlcmxpbnRlcnAiID0gInllcyI7IHRoZW4KKyAgQUNfU1VCU1QodmlfY3ZfcGF0aF9wZXJsKQorICBBQ19QQVRIX1BST0codmlfY3ZfcGF0aF9wZXJsLCBwZXJsKQorICBpZiB0ZXN0ICJYJHZpX2N2X3BhdGhfcGVybCIgIT0gIlgiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFBlcmwgdmVyc2lvbikKKyAgICBpZiAkdmlfY3ZfcGF0aF9wZXJsIC1lICdyZXF1aXJlIDUuMDAzXzAxJyA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgIGV2YWwgYCR2aV9jdl9wYXRoX3BlcmwgLVY6dXNldGhyZWFkc2AKKyAgICAgaWYgdGVzdCAiWCR1c2V0aHJlYWRzIiA9ICJYVU5LTk9XTiIgLW8gIlgkdXNldGhyZWFkcyIgPSAiWHVuZGVmIjsgdGhlbgorICAgICAgIGJhZHRocmVhZHM9bm8KKyAgICAgZWxzZQorICAgICAgIGlmICR2aV9jdl9wYXRoX3BlcmwgLWUgJ3JlcXVpcmUgNS42LjAnID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwkgZXZhbCBgJHZpX2N2X3BhdGhfcGVybCAtVjp1c2U1MDA1dGhyZWFkc2AKKwkgaWYgdGVzdCAiWCR1c2U1MDA1dGhyZWFkcyIgPSAiWFVOS05PV04iIC1vICJYJHVzZTUwMDV0aHJlYWRzIiA9ICJYdW5kZWYiOyB0aGVuCisJICAgYmFkdGhyZWFkcz1ubworCSBlbHNlCisJICAgYmFkdGhyZWFkcz15ZXMKKwkgICBBQ19NU0dfUkVTVUxUKD4+PiBQZXJsID4gNS42IHdpdGggNS41IHRocmVhZHMgY2Fubm90IGJlIHVzZWQgPDw8KQorCSBmaQorICAgICAgIGVsc2UKKwkgYmFkdGhyZWFkcz15ZXMKKwkgQUNfTVNHX1JFU1VMVCg+Pj4gUGVybCA1LjUgd2l0aCB0aHJlYWRzIGNhbm5vdCBiZSB1c2VkIDw8PCkKKyAgICAgICBmaQorICAgICBmaQorICAgICBpZiB0ZXN0ICRiYWR0aHJlYWRzID0gbm87IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoT0spCisgICAgICBldmFsIGAkdmlfY3ZfcGF0aF9wZXJsIC1WOnNocnBlbnZgCisgICAgICBpZiB0ZXN0ICJYJHNocnBlbnYiID0gIlhVTktOT1dOIjsgdGhlbiAjIHByZSA1LjAwM18wNAorCXNocnBlbnY9IiIKKyAgICAgIGZpCisgICAgICB2aV9jdl9wZXJsbGliPWAkdmlfY3ZfcGF0aF9wZXJsIC1NQ29uZmlnIC1lICdwcmludCAkQ29uZmlne3ByaXZsaWJleHB9J2AKKyAgICAgIEFDX1NVQlNUKHZpX2N2X3BlcmxsaWIpCisgICAgICBkbmwgUmVtb3ZlICItZm5vLXNvbWV0aGluZyIsIGl0IGJyZWFrcyB1c2luZyBjcHJvdG8uCisgICAgICBwZXJsY3BwZmxhZ3M9YCR2aV9jdl9wYXRoX3BlcmwgLU1saWI9JHNyY2RpciAtTUV4dFV0aWxzOjpFbWJlZCBcCisJICAgICAgLWUgJ2NjZmxhZ3M7cGVybF9pbmM7cHJpbnQiXG4iJyB8IHNlZCAtZSAncy8tZm5vW1teIF1dKi8vJ2AKKyAgICAgIGRubCBSZW1vdmUgIi1sYyIsIGl0IGJyZWFrcyBvbiBGcmVlQlNEIHdoZW4gdXNpbmcgIi1wdGhyZWFkIi4KKyAgICAgIHBlcmxsaWJzPWBjZCAkc3JjZGlyOyAkdmlfY3ZfcGF0aF9wZXJsIC1NRXh0VXRpbHM6OkVtYmVkIC1lICdsZG9wdHMnIHwgXAorCQlzZWQgLWUgJy9XYXJuaW5nL2QnIC1lICcvTm90ZSAocHJvYmFibHkgaGFybWxlc3MpL2QnIFwKKwkJCS1lICdzLy1iRTpwZXJsLmV4cC8vJyAtZSAncy8tbGMgLy8nYAorICAgICAgZG5sIERvbid0IGFkZCBwZXJsIGxpYiB0byAkTElCUzogaWYgaXQncyBub3QgaW4gTERfTElCUkFSWV9QQVRICisgICAgICBkbmwgYSB0ZXN0IGluIGNvbmZpZ3VyZSBtYXkgZmFpbCBiZWNhdXNlIG9mIHRoYXQuCisgICAgICBwZXJsbGRmbGFncz1gY2QgJHNyY2RpcjsgJHZpX2N2X3BhdGhfcGVybCAtTUV4dFV0aWxzOjpFbWJlZCBcCisJCS1lICdjY2RsZmxhZ3MnIHwgc2VkIC1lICdzLy1iRTpwZXJsLmV4cC8vJ2AKKworICAgICAgZG5sIGNoZWNrIHRoYXQgY29tcGlsaW5nIGEgc2ltcGxlIHByb2dyYW0gc3RpbGwgd29ya3Mgd2l0aCB0aGUgZmxhZ3MKKyAgICAgIGRubCBhZGRlZCBmb3IgUGVybC4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZSBhbmQgbGluayBmbGFncyBmb3IgUGVybCBhcmUgc2FuZV0pCisgICAgICBjZmxhZ3Nfc2F2ZT0kQ0ZMQUdTCisgICAgICBsaWJzX3NhdmU9JExJQlMKKyAgICAgIGxkZmxhZ3Nfc2F2ZT0kTERGTEFHUworICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRwZXJsY3BwZmxhZ3MiCisgICAgICBMSUJTPSIkTElCUyAkcGVybGxpYnMiCisgICAgICBMREZMQUdTPSIkcGVybGxkZmxhZ3MgJExERkxBR1MiCisgICAgICBBQ19UUllfTElOSygsWyBdLAorCSAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpOyBwZXJsX29rPXllcywKKwkgICAgIEFDX01TR19SRVNVTFQobm86IFBFUkwgRElTQUJMRUQpOyBwZXJsX29rPW5vKQorICAgICAgQ0ZMQUdTPSRjZmxhZ3Nfc2F2ZQorICAgICAgTElCUz0kbGlic19zYXZlCisgICAgICBMREZMQUdTPSRsZGZsYWdzX3NhdmUKKyAgICAgIGlmIHRlc3QgJHBlcmxfb2sgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0ICJYJHBlcmxjcHBmbGFncyIgIT0gIlgiOyB0aGVuCisJICBQRVJMX0NGTEFHUz0iJHBlcmxjcHBmbGFncyIKKwlmaQorCWlmIHRlc3QgIlgkcGVybGxkZmxhZ3MiICE9ICJYIjsgdGhlbgorCSAgTERGTEFHUz0iJHBlcmxsZGZsYWdzICRMREZMQUdTIgorCWZpCisJUEVSTF9MSUJTPSRwZXJsbGlicworCVBFUkxfU1JDPSJhdXRvL2lmX3BlcmwuYyBpZl9wZXJsc2Zpby5jIgorCVBFUkxfT0JKPSJvYmplY3RzL2lmX3BlcmwubyBvYmplY3RzL2lmX3BlcmxzZmlvLm8iCisJUEVSTF9QUk89ImlmX3BlcmwucHJvIGlmX3BlcmxzZmlvLnBybyIKKwlBQ19ERUZJTkUoRkVBVF9QRVJMKQorICAgICAgZmkKKyAgICAgZmkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKD4+PiB0b28gb2xkOyBuZWVkIFBlcmwgdmVyc2lvbiA1LjAwM18wMSBvciBsYXRlciA8PDwpCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0ICJ4JE1BQ09TWCIgPSAieHllcyI7IHRoZW4KKyAgICBkbmwgTWFjIE9TIFggMTAuMiBvciAxMC4zCisgICAgZGlyPS9TeXN0ZW0vTGlicmFyeS9QZXJsCisgICAgZGFyd2luZGlyPSRkaXIvZGFyd2luCisgICAgaWYgdGVzdCAtZCAkZGFyd2luZGlyOyB0aGVuCisgICAgICBQRVJMPS91c3IvYmluL3BlcmwKKyAgICBlbHNlCisgICAgICBkbmwgTWFjIE9TIFggMTAuMworICAgICAgZGlyPS9TeXN0ZW0vTGlicmFyeS9QZXJsLzUuOC4xCisgICAgICBkYXJ3aW5kaXI9JGRpci9kYXJ3aW4tdGhyZWFkLW11bHRpLTJsZXZlbAorICAgICAgaWYgdGVzdCAtZCAkZGFyd2luZGlyOyB0aGVuCisJUEVSTD0vdXNyL2Jpbi9wZXJsCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJFBFUkwiOyB0aGVuCisgICAgICBQRVJMX0RJUj0iJGRpciIKKyAgICAgIFBFUkxfQ0ZMQUdTPSItREZFQVRfUEVSTCAtSSRkYXJ3aW5kaXIvQ09SRSIKKyAgICAgIFBFUkxfT0JKPSJvYmplY3RzL2lmX3BlcmwubyBvYmplY3RzL2lmX3BlcmxzZmlvLm8gJGRhcndpbmRpci9hdXRvL0R5bmFMb2FkZXIvRHluYUxvYWRlci5hIgorICAgICAgUEVSTF9MSUJTPSItTCRkYXJ3aW5kaXIvQ09SRSAtbHBlcmwiCisgICAgZmkKKyAgZmkKK2ZpCitBQ19TVUJTVChzaHJwZW52KQorQUNfU1VCU1QoUEVSTF9TUkMpCitBQ19TVUJTVChQRVJMX09CSikKK0FDX1NVQlNUKFBFUkxfUFJPKQorQUNfU1VCU1QoUEVSTF9DRkxBR1MpCitBQ19TVUJTVChQRVJMX0xJQlMpCisKK0FDX01TR19DSEVDS0lORygtLWVuYWJsZS1weXRob25pbnRlcnAgYXJndW1lbnQpCitBQ19BUkdfRU5BQkxFKHB5dGhvbmludGVycCwKKwlbICAtLWVuYWJsZS1weXRob25pbnRlcnAgICBJbmNsdWRlIFB5dGhvbiBpbnRlcnByZXRlci5dLCAsCisJW2VuYWJsZV9weXRob25pbnRlcnA9Im5vIl0pCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfcHl0aG9uaW50ZXJwKQoraWYgdGVzdCAiJGVuYWJsZV9weXRob25pbnRlcnAiID0gInllcyI7IHRoZW4KKyAgZG5sIC0tIGZpbmQgdGhlIHB5dGhvbiBleGVjdXRhYmxlCisgIEFDX1BBVEhfUFJPRyh2aV9jdl9wYXRoX3B5dGhvbiwgcHl0aG9uKQorICBpZiB0ZXN0ICJYJHZpX2N2X3BhdGhfcHl0aG9uIiAhPSAiWCI7IHRoZW4KKworICAgIGRubCAtLSBnZXQgaXRzIHZlcnNpb24gbnVtYmVyCisgICAgQUNfQ0FDSEVfQ0hFQ0soUHl0aG9uIHZlcnNpb24sdmlfY3ZfdmFyX3B5dGhvbl92ZXJzaW9uLAorICAgIFtbdmlfY3ZfdmFyX3B5dGhvbl92ZXJzaW9uPWAKKwkgICAgJHt2aV9jdl9wYXRoX3B5dGhvbn0gLWMgJ2ltcG9ydCBzeXM7IHByaW50IHN5cy52ZXJzaW9uWzozXSdgCisgICAgXV0pCisKKyAgICBkbmwgLS0gaXQgbXVzdCBiZSBhdCBsZWFzdCB2ZXJzaW9uIDEuNAorICAgIEFDX01TR19DSEVDS0lORyhQeXRob24gaXMgMS40IG9yIGJldHRlcikKKyAgICBpZiAke3ZpX2N2X3BhdGhfcHl0aG9ufSAtYyBcCisJImltcG9ydCBzeXM7IHN5cy5leGl0KCR7dmlfY3ZfdmFyX3B5dGhvbl92ZXJzaW9ufSA8IDEuNCkiCisgICAgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVCh5ZXApCisKKyAgICAgIGRubCAtLSBmaW5kIHdoZXJlIHB5dGhvbiB0aGlua3MgaXQgd2FzIGluc3RhbGxlZAorICAgICAgQUNfQ0FDSEVfQ0hFQ0soUHl0aG9uJ3MgaW5zdGFsbCBwcmVmaXgsdmlfY3ZfcGF0aF9weXRob25fcGZ4LAorICAgICAgWyB2aV9jdl9wYXRoX3B5dGhvbl9wZng9YAorCSAgICAke3ZpX2N2X3BhdGhfcHl0aG9ufSAtYyBcCisJCSJpbXBvcnQgc3lzOyBwcmludCBzeXMucHJlZml4ImAgXSkKKworICAgICAgZG5sIC0tIGFuZCB3aGVyZSBpdCB0aGlua3MgaXQgcnVucworICAgICAgQUNfQ0FDSEVfQ0hFQ0soUHl0aG9uJ3MgZXhlY3V0aW9uIHByZWZpeCx2aV9jdl9wYXRoX3B5dGhvbl9lcGZ4LAorICAgICAgWyB2aV9jdl9wYXRoX3B5dGhvbl9lcGZ4PWAKKwkgICAgJHt2aV9jdl9wYXRoX3B5dGhvbn0gLWMgXAorCQkiaW1wb3J0IHN5czsgcHJpbnQgc3lzLmV4ZWNfcHJlZml4ImAgXSkKKworICAgICAgZG5sIC0tIHB5dGhvbidzIGludGVybmFsIGxpYnJhcnkgcGF0aAorCisgICAgICBBQ19DQUNIRV9WQUwodmlfY3ZfcGF0aF9weXRob25wYXRoLAorICAgICAgWyB2aV9jdl9wYXRoX3B5dGhvbnBhdGg9YAorCSAgICB1bnNldCBQWVRIT05QQVRIOworCSAgICAke3ZpX2N2X3BhdGhfcHl0aG9ufSAtYyBcCisJCSJpbXBvcnQgc3lzLCBzdHJpbmc7IHByaW50IHN0cmluZy5qb2luKHN5cy5wYXRoLCc6JykiYCBdKQorCisgICAgICBkbmwgLS0gd2hlcmUgdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IGFyY2hpdmVzIGFyZQorCisgICAgICBBQ19BUkdfV0lUSChweXRob24tY29uZmlnLWRpciwKKwlbICAtLXdpdGgtcHl0aG9uLWNvbmZpZy1kaXI9UEFUSCAgUHl0aG9uJ3MgY29uZmlnIGRpcmVjdG9yeV0sCisJWyB2aV9jdl9wYXRoX3B5dGhvbl9jb25mPSIke3dpdGh2YWx9IiBdICkKKworICAgICAgQUNfQ0FDSEVfQ0hFQ0soUHl0aG9uJ3MgY29uZmlndXJhdGlvbiBkaXJlY3RvcnksdmlfY3ZfcGF0aF9weXRob25fY29uZiwKKyAgICAgIFsKKwl2aV9jdl9wYXRoX3B5dGhvbl9jb25mPQorCWZvciBwYXRoIGluICIke3ZpX2N2X3BhdGhfcHl0aG9uX3BmeH0iICIke3ZpX2N2X3BhdGhfcHl0aG9uX2VwZnh9IjsgZG8KKwkgIGZvciBzdWJkaXIgaW4gbGliIHNoYXJlOyBkbworCSAgICBkPSIke3BhdGh9LyR7c3ViZGlyfS9weXRob24ke3ZpX2N2X3Zhcl9weXRob25fdmVyc2lvbn0vY29uZmlnIgorCSAgICBpZiB0ZXN0IC1kICIkZCIgJiYgdGVzdCAtZiAiJGQvY29uZmlnLmMiOyB0aGVuCisJICAgICAgdmlfY3ZfcGF0aF9weXRob25fY29uZj0iJGQiCisJICAgIGZpCisJICBkb25lCisJZG9uZQorICAgICAgXSkKKworICAgICAgUFlUSE9OX0NPTkZESVI9IiR7dmlfY3ZfcGF0aF9weXRob25fY29uZn0iCisKKyAgICAgIGlmIHRlc3QgIlgkUFlUSE9OX0NPTkZESVIiID0gIlgiOyB0aGVuCisJQUNfTVNHX1JFU1VMVChbY2FuJ3QgZmluZCBpdCFdKQorICAgICAgZWxzZQorCisJZG5sIC0tIHdlIG5lZWQgdG8gZXhhbWluZSBQeXRob24ncyBjb25maWcvTWFrZWZpbGUgdG9vCisJZG5sICAgIHNlZSB3aGF0IHRoZSBpbnRlcnByZXRlciBpcyBidWlsdCBmcm9tCisJQUNfQ0FDSEVfVkFMKHZpX2N2X3BhdGhfcHl0aG9uX3BsaWJzLAorCVsKKwkgICAgdG1wX21rZj0iL3RtcC9NYWtlZmlsZS1jb25mJCQiCisJICAgIGNhdCAke1BZVEhPTl9DT05GRElSfS9NYWtlZmlsZSAtIDw8J2VvZicgPiR7dG1wX21rZn0KK19fOgorCUBlY2hvICJweXRob25fTU9ETElCUz0nJChNT0RMSUJTKSciCisJQGVjaG8gInB5dGhvbl9MSUJTPSckKExJQlMpJyIKKwlAZWNobyAicHl0aG9uX1NZU0xJQlM9JyQoU1lTTElCUyknIgorCUBlY2hvICJweXRob25fTElOS0ZPUlNIQVJFRD0nJChMSU5LRk9SU0hBUkVEKSciCitlb2YKKwkgICAgZG5sIC0tIGRlbGV0ZSB0aGUgbGluZXMgZnJvbSBtYWtlIGFib3V0IEVudGVyaW5nL0xlYXZpbmcgZGlyZWN0b3J5CisJICAgIGV2YWwgImBjZCAke1BZVEhPTl9DT05GRElSfSAmJiBtYWtlIC1mICR7dG1wX21rZn0gX18gfCBzZWQgJy8gZGlyZWN0b3J5IC9kJ2AiCisJICAgIHJtIC1mICR7dG1wX21rZn0KKwkgICAgaWYgdGVzdCAieCRNQUNPU1giID0gInh5ZXMiICYmICR7dmlfY3ZfcGF0aF9weXRob259IC1jIFwKKwkJImltcG9ydCBzeXM7IHN5cy5leGl0KCR7dmlfY3ZfdmFyX3B5dGhvbl92ZXJzaW9ufSA8IDIuMykiOyB0aGVuCisJICAgICAgdmlfY3ZfcGF0aF9weXRob25fcGxpYnM9Ii1mcmFtZXdvcmsgUHl0aG9uIgorCSAgICBlbHNlCisJICAgICAgaWYgdGVzdCAiJHt2aV9jdl92YXJfcHl0aG9uX3ZlcnNpb259IiA9ICIxLjQiOyB0aGVuCisJCSAgdmlfY3ZfcGF0aF9weXRob25fcGxpYnM9IiR7UFlUSE9OX0NPTkZESVJ9L2xpYk1vZHVsZXMuYSAke1BZVEhPTl9DT05GRElSfS9saWJQeXRob24uYSAke1BZVEhPTl9DT05GRElSfS9saWJPYmplY3RzLmEgJHtQWVRIT05fQ09ORkRJUn0vbGliUGFyc2VyLmEiCisJICAgICAgZWxzZQorCQkgIHZpX2N2X3BhdGhfcHl0aG9uX3BsaWJzPSItTCR7UFlUSE9OX0NPTkZESVJ9IC1scHl0aG9uJHt2aV9jdl92YXJfcHl0aG9uX3ZlcnNpb259IgorCSAgICAgIGZpCisJICAgICAgdmlfY3ZfcGF0aF9weXRob25fcGxpYnM9IiR7dmlfY3ZfcGF0aF9weXRob25fcGxpYnN9ICR7cHl0aG9uX01PRExJQlN9ICR7cHl0aG9uX0xJQlN9ICR7cHl0aG9uX1NZU0xJQlN9ICR7cHl0aG9uX0xJTktGT1JTSEFSRUR9IgorCSAgICAgIGRubCByZW1vdmUgLWx0ZXJtY2FwLCBpdCBjYW4gY29uZmxpY3Qgd2l0aCBhbiBlYXJsaWVyIC1sbmN1cnNlcworCSAgICAgIHZpX2N2X3BhdGhfcHl0aG9uX3BsaWJzPWBlY2hvICR2aV9jdl9wYXRoX3B5dGhvbl9wbGlicyB8IHNlZCBzLy1sdGVybWNhcC8vYAorCSAgICBmaQorCV0pCisKKwlQWVRIT05fTElCUz0iJHt2aV9jdl9wYXRoX3B5dGhvbl9wbGlic30iCisJaWYgdGVzdCAiJHt2aV9jdl9wYXRoX3B5dGhvbl9wZnh9IiA9ICIke3ZpX2N2X3BhdGhfcHl0aG9uX2VwZnh9IjsgdGhlbgorCSAgUFlUSE9OX0NGTEFHUz0iLUkke3ZpX2N2X3BhdGhfcHl0aG9uX3BmeH0vaW5jbHVkZS9weXRob24ke3ZpX2N2X3Zhcl9weXRob25fdmVyc2lvbn0iCisJZWxzZQorCSAgUFlUSE9OX0NGTEFHUz0iLUkke3ZpX2N2X3BhdGhfcHl0aG9uX3BmeH0vaW5jbHVkZS9weXRob24ke3ZpX2N2X3Zhcl9weXRob25fdmVyc2lvbn0gLUkke3ZpX2N2X3BhdGhfcHl0aG9uX2VwZnh9L2luY2x1ZGUvcHl0aG9uJHt2aV9jdl92YXJfcHl0aG9uX3ZlcnNpb259IgorCWZpCisJUFlUSE9OX1NSQz0iaWZfcHl0aG9uLmMiCisJZG5sIEZvciBNYWMgT1NYIDEwLjIgY29uZmlnLm8gaXMgaW5jbHVkZWQgaW4gdGhlIFB5dGhvbiBsaWJyYXJ5LgorCWlmIHRlc3QgIngkTUFDT1NYIiA9ICJ4eWVzIjsgdGhlbgorCSAgUFlUSE9OX09CSj0ib2JqZWN0cy9pZl9weXRob24ubyIKKwllbHNlCisJICBQWVRIT05fT0JKPSJvYmplY3RzL2lmX3B5dGhvbi5vIG9iamVjdHMvcHlfY29uZmlnLm8iCisJZmkKKwlpZiB0ZXN0ICIke3ZpX2N2X3Zhcl9weXRob25fdmVyc2lvbn0iID0gIjEuNCI7IHRoZW4KKwkgICBQWVRIT05fT0JKPSIkUFlUSE9OX09CSiBvYmplY3RzL3B5X2dldHBhdGgubyIKKwlmaQorCVBZVEhPTl9HRVRQQVRIX0NGTEFHUz0iLURQWVRIT05QQVRIPSdcIiR7dmlfY3ZfcGF0aF9weXRob25wYXRofVwiJyAtRFBSRUZJWD0nXCIke3ZpX2N2X3BhdGhfcHl0aG9uX3BmeH1cIicgLURFWEVDX1BSRUZJWD0nXCIke3ZpX2N2X3BhdGhfcHl0aG9uX2VwZnh9XCInIgorCisJZG5sIE9uIEZyZWVCU0QgbGlua2luZyB3aXRoICItcHRocmVhZCIgaXMgcmVxdWlyZWQgdG8gdXNlIHRocmVhZHMuCisJZG5sIF9USFJFQURfU0FGRSBtdXN0IGJlIHVzZWQgZm9yIGNvbXBpbGluZyB0aGVuLgorCWRubCBUaGUgIi1wdGhyZWFkIiBpcyBhZGRlZCB0byAkTElCUywgc28gdGhhdCB0aGUgZm9sbG93aW5nIGNoZWNrIGZvcgorCWRubCBzaWdhbHRzdGFjaygpIHdpbGwgbG9vayBpbiBsaWJjX3IgKGl0J3MgdGhlcmUgaW4gbGliYyEpLgorCWRubCBPdGhlcndpc2UsIHdoZW4gdXNpbmcgR0NDLCB0cnkgYWRkaW5nIC1wdGhyZWFkIHRvICRDRkxBR1MuICBHQ0MKKwlkbmwgd2lsbCB0aGVuIGRlZmluZSB0YXJnZXQtc3BlY2lmaWMgZGVmaW5lcywgZS5nLiwgLURfUkVFTlRSQU5ULgorCWRubCBEb24ndCBkbyB0aGlzIGZvciBNYWMgT1NYLCAtcHRocmVhZCB3aWxsIGdlbmVyYXRlIGEgd2FybmluZy4KKwlBQ19NU0dfQ0hFQ0tJTkcoW2lmIC1wdGhyZWFkIHNob3VsZCBiZSB1c2VkXSkKKwl0aHJlYWRzYWZlX2ZsYWc9CisJdGhyZWFkX2xpYj0KKwlpZiB0ZXN0ICJ4JE1BQ09TWCIgIT0gInh5ZXMiOyB0aGVuCisJICB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0aHJlYWRzYWZlX2ZsYWc9Ii1wdGhyZWFkIgorCSAgaWYgdGVzdCAiYCh1bmFtZSkgMj4vZGV2L251bGxgIiA9IEZyZWVCU0Q7IHRoZW4KKwkgICAgdGhyZWFkc2FmZV9mbGFnPSItRF9USFJFQURfU0FGRSIKKwkgICAgdGhyZWFkX2xpYj0iLXB0aHJlYWQiCisJICBmaQorCWZpCisJbGlic19zYXZlX29sZD0kTElCUworCWlmIHRlc3QgLW4gIiR0aHJlYWRzYWZlX2ZsYWciOyB0aGVuCisJICBjZmxhZ3Nfc2F2ZT0kQ0ZMQUdTCisJICBDRkxBR1M9IiRDRkxBR1MgJHRocmVhZHNhZmVfZmxhZyIKKwkgIExJQlM9IiRMSUJTICR0aHJlYWRfbGliIgorCSAgQUNfVFJZX0xJTksoLFsgXSwKKwkgICAgIEFDX01TR19SRVNVTFQoeWVzKTsgUFlUSE9OX0NGTEFHUz0iJFBZVEhPTl9DRkxBR1MgJHRocmVhZHNhZmVfZmxhZyIsCisJICAgICBBQ19NU0dfUkVTVUxUKG5vKTsgTElCUz0kbGlic19zYXZlX29sZAorCSAgICAgKQorCSAgQ0ZMQUdTPSRjZmxhZ3Nfc2F2ZQorCWVsc2UKKwkgIEFDX01TR19SRVNVTFQobm8pCisJZmkKKworCWRubCBjaGVjayB0aGF0IGNvbXBpbGluZyBhIHNpbXBsZSBwcm9ncmFtIHN0aWxsIHdvcmtzIHdpdGggdGhlIGZsYWdzCisJZG5sIGFkZGVkIGZvciBQeXRob24uCisJQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlIGFuZCBsaW5rIGZsYWdzIGZvciBQeXRob24gYXJlIHNhbmVdKQorCWNmbGFnc19zYXZlPSRDRkxBR1MKKwlsaWJzX3NhdmU9JExJQlMKKwlDRkxBR1M9IiRDRkxBR1MgJFBZVEhPTl9DRkxBR1MiCisJTElCUz0iJExJQlMgJFBZVEhPTl9MSUJTIgorCUFDX1RSWV9MSU5LKCxbIF0sCisJICAgICAgIEFDX01TR19SRVNVTFQoeWVzKTsgcHl0aG9uX29rPXllcywKKwkgICAgICAgQUNfTVNHX1JFU1VMVChubzogUFlUSE9OIERJU0FCTEVEKTsgcHl0aG9uX29rPW5vKQorCUNGTEFHUz0kY2ZsYWdzX3NhdmUKKwlMSUJTPSRsaWJzX3NhdmUKKwlpZiB0ZXN0ICRweXRob25fb2sgPSB5ZXM7IHRoZW4KKwkgIEFDX0RFRklORShGRUFUX1BZVEhPTikKKwllbHNlCisJICBMSUJTPSRsaWJzX3NhdmVfb2xkCisJICBQWVRIT05fU1JDPQorCSAgUFlUSE9OX09CSj0KKwkgIFBZVEhPTl9MSUJTPQorCSAgUFlUSE9OX0NGTEFHUz0KKwlmaQorCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQodG9vIG9sZCkKKyAgICBmaQorICBmaQorZmkKK0FDX1NVQlNUKFBZVEhPTl9DT05GRElSKQorQUNfU1VCU1QoUFlUSE9OX0xJQlMpCitBQ19TVUJTVChQWVRIT05fR0VUUEFUSF9DRkxBR1MpCitBQ19TVUJTVChQWVRIT05fQ0ZMQUdTKQorQUNfU1VCU1QoUFlUSE9OX1NSQykKK0FDX1NVQlNUKFBZVEhPTl9PQkopCisKK0FDX01TR19DSEVDS0lORygtLWVuYWJsZS10Y2xpbnRlcnAgYXJndW1lbnQpCitBQ19BUkdfRU5BQkxFKHRjbGludGVycCwKKwlbICAtLWVuYWJsZS10Y2xpbnRlcnAgICAgICBJbmNsdWRlIFRjbCBpbnRlcnByZXRlci5dLCAsCisJW2VuYWJsZV90Y2xpbnRlcnA9Im5vIl0pCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfdGNsaW50ZXJwKQorCitpZiB0ZXN0ICIkZW5hYmxlX3RjbGludGVycCIgPSAieWVzIjsgdGhlbgorCisgIGRubCBvbiBGcmVlQlNEIHRjbHNoIGlzIGEgc2lsbHkgc2NyaXB0LCBsb29rIGZvciB0Y2xzaDguMCBvciB0Y2xzaDguMgorICBBQ19NU0dfQ0hFQ0tJTkcoLS13aXRoLXRjbHNoIGFyZ3VtZW50KQorICBBQ19BUkdfV0lUSCh0Y2xzaCwgWyAgLS13aXRoLXRjbHNoPVBBVEggICAgICAgd2hpY2ggdGNsc2ggdG8gdXNlIChkZWZhdWx0OiB0Y2xzaDguMCldLAorCXRjbHNoX25hbWU9IiR3aXRodmFsIjsgQUNfTVNHX1JFU1VMVCgkdGNsc2hfbmFtZSksCisJdGNsc2hfbmFtZT0idGNsc2g4LjAiOyBBQ19NU0dfUkVTVUxUKG5vKSkKKyAgQUNfUEFUSF9QUk9HKHZpX2N2X3BhdGhfdGNsLCAkdGNsc2hfbmFtZSkKKyAgQUNfU1VCU1QodmlfY3ZfcGF0aF90Y2wpCisKKyAgZG5sIHdoZW4gbm8gc3BlY2lmaWMgdmVyc2lvbiBzcGVjaWZpZWQsIGFsc28gdHJ5IDguMgorICBpZiB0ZXN0ICJYJHZpX2N2X3BhdGhfdGNsIiA9ICJYIiAtYSAkdGNsc2hfbmFtZSA9ICJ0Y2xzaDguMCI7IHRoZW4KKyAgICB0Y2xzaF9uYW1lPSJ0Y2xzaDguMiIKKyAgICBBQ19QQVRIX1BST0codmlfY3ZfcGF0aF90Y2wsICR0Y2xzaF9uYW1lKQorICBmaQorICBkbmwgc3RpbGwgZGlkbid0IGZpbmQgaXQsIHRyeSB3aXRob3V0IHZlcnNpb24gbnVtYmVyCisgIGlmIHRlc3QgIlgkdmlfY3ZfcGF0aF90Y2wiID0gIlgiOyB0aGVuCisgICAgdGNsc2hfbmFtZT0idGNsc2giCisgICAgQUNfUEFUSF9QUk9HKHZpX2N2X3BhdGhfdGNsLCAkdGNsc2hfbmFtZSkKKyAgZmkKKyAgaWYgdGVzdCAiWCR2aV9jdl9wYXRoX3RjbCIgIT0gIlgiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFRjbCB2ZXJzaW9uKQorICAgIGlmIGVjaG8gJ2V4aXQgW1tleHByIFtpbmZvIHRjbHZlcnNpb25dIDwgOC4wXV0nIHwgJHZpX2N2X3BhdGhfdGNsIC0gOyB0aGVuCisgICAgICB0Y2x2ZXI9YGVjaG8gJ3B1dHMgW1tpbmZvIHRjbHZlcnNpb25dXScgfCAkdmlfY3ZfcGF0aF90Y2wgLWAKKyAgICAgIEFDX01TR19SRVNVTFQoJHRjbHZlciAtIE9LKTsKKyAgICAgIHRjbGxvYz1gZWNobyAnc2V0IGwgW1tpbmZvIGxpYnJhcnldXTtzZXQgaSBbW3N0cmluZyBsYXN0IGxpYiAkbF1dO2luY3IgaSAtMjtwdXRzIFtbc3RyaW5nIHJhbmdlICRsIDAgJGldXScgfCAkdmlfY3ZfcGF0aF90Y2wgLWAKKworICAgICAgQUNfTVNHX0NIRUNLSU5HKGZvciBsb2NhdGlvbiBvZiBUY2wgaW5jbHVkZSkKKyAgICAgIGlmIHRlc3QgIngkTUFDT1NYIiAhPSAieHllcyI7IHRoZW4KKwl0Y2xpbmM9IiR0Y2xsb2MvaW5jbHVkZSAkdGNsbG9jL2luY2x1ZGUvdGNsICR0Y2xsb2MvaW5jbHVkZS90Y2wkdGNsdmVyIC91c3IvbG9jYWwvaW5jbHVkZSIKKyAgICAgIGVsc2UKKwlkbmwgRm9yIE1hYyBPUyBYIDEwLjMsIHVzZSB0aGUgT1MtcHJvdmlkZWQgZnJhbWV3b3JrIGxvY2F0aW9uCisJdGNsaW5jPSIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9UY2wuZnJhbWV3b3JrL0hlYWRlcnMiCisgICAgICBmaQorICAgICAgZm9yIHRyeSBpbiAkdGNsaW5jOyBkbworCWlmIHRlc3QgLWYgIiR0cnkvdGNsLmgiOyB0aGVuCisJICBBQ19NU0dfUkVTVUxUKCR0cnkvdGNsLmgpCisJICBUQ0xfSU5DPSR0cnkKKwkgIGJyZWFrCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIHRlc3QgLXogIiRUQ0xfSU5DIjsgdGhlbgorCUFDX01TR19SRVNVTFQoPG5vdCBmb3VuZD4pCisJU0tJUF9UQ0w9WUVTCisgICAgICBmaQorICAgICAgaWYgdGVzdCAteiAiJFNLSVBfVENMIjsgdGhlbgorCUFDX01TR19DSEVDS0lORyhmb3IgbG9jYXRpb24gb2YgdGNsQ29uZmlnLnNoIHNjcmlwdCkKKwlpZiB0ZXN0ICJ4JE1BQ09TWCIgIT0gInh5ZXMiOyB0aGVuCisJICB0Y2xjbmY9YGVjaG8gJHRjbGluYyB8IHNlZCBzL2luY2x1ZGUvbGliL2dgCisJZWxzZQorCSAgZG5sIEZvciBNYWMgT1MgWCAxMC4zLCB1c2UgdGhlIE9TLXByb3ZpZGVkIGZyYW1ld29yayBsb2NhdGlvbgorCSAgdGNsY25mPSIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9UY2wuZnJhbWV3b3JrIgorCWZpCisJZm9yIHRyeSBpbiAkdGNsY25mOyBkbworCSAgaWYgdGVzdCAtZiAkdHJ5L3RjbENvbmZpZy5zaDsgdGhlbgorCSAgICBBQ19NU0dfUkVTVUxUKCR0cnkvdGNsQ29uZmlnLnNoKQorCSAgICAuICR0cnkvdGNsQ29uZmlnLnNoCisJICAgIGRubCB1c2UgZXZhbCwgYmVjYXVzZSB0Y2wgOC4yIGluY2x1ZGVzICR7VENMX0RCR1h9CisJICAgIFRDTF9MSUJTPWBldmFsIGVjaG8gIiRUQ0xfTElCX1NQRUMgJFRDTF9MSUJTImAKKwkgICAgZG5sIFVzZSAkVENMX0RFRlMgZm9yIC1EX1RIUkVBRF9TQUZFIGV0IGFsLiAgQnV0IG9ubHkgdXNlIHRoZQorCSAgICBkbmwgIi1EX0FCQyIgaXRlbXMuCisJICAgIFRDTF9ERUZTPWBlY2hvICRUQ0xfREVGUyB8IHRyICcgJyAnXDAxMicgfCBzZWQgLWUgJy9eLVtbXkRdXS9kJyAtZSAnLy1EW1teX11dL2QnIC1lICdzLy1EXy8gLURfLycgfCB0ciAtZCAnXDAxMidgCisJICAgIGJyZWFrCisJICBmaQorCWRvbmUKKwlpZiB0ZXN0IC16ICIkVENMX0xJQlMiOyB0aGVuCisJICBBQ19NU0dfUkVTVUxUKDxub3QgZm91bmQ+KQorCSAgQUNfTVNHX0NIRUNLSU5HKGZvciBUY2wgbGlicmFyeSBieSBteXNlbGYpCisJICB0Y2xsaWI9YGVjaG8gJHRjbGluYyB8IHNlZCBzL2luY2x1ZGUvbGliL2dgCisJICBmb3IgZXh0IGluIC5zbyAuYSA7IGRvCisJICAgIGZvciB2ZXIgaW4gIiIgJHRjbHZlciA7IGRvCisJICAgICAgZm9yIHRyeSBpbiAkdGNsbGliIDsgZG8KKwkJdHJ5bGliPXRjbCR2ZXIkZXh0CisJCWlmIHRlc3QgLWYgJHRyeS9saWIkdHJ5bGliIDsgdGhlbgorCQkgIEFDX01TR19SRVNVTFQoJHRyeS9saWIkdHJ5bGliKQorCQkgIFRDTF9MSUJTPSItTCR0cnkgLWx0Y2wkdmVyIC1sZGwgLWxtIgorCQkgIGlmIHRlc3QgImAodW5hbWUpIDI+L2Rldi9udWxsYCIgPSBTdW5PUyAmJgorCQkJCQkgdW5hbWUgLXIgfCBncmVwICdeNScgPi9kZXYvbnVsbDsgdGhlbgorCQkgICAgVENMX0xJQlM9IiRUQ0xfTElCUyAtUiAkdHJ5IgorCQkgIGZpCisJCSAgYnJlYWsgMworCQlmaQorCSAgICAgIGRvbmUKKwkgICAgZG9uZQorCSAgZG9uZQorCSAgaWYgdGVzdCAteiAiJFRDTF9MSUJTIjsgdGhlbgorCSAgICBBQ19NU0dfUkVTVUxUKDxub3QgZm91bmQ+KQorCSAgICBTS0lQX1RDTD1ZRVMKKwkgIGZpCisJZmkKKwlpZiB0ZXN0IC16ICIkU0tJUF9UQ0wiOyB0aGVuCisJICBBQ19ERUZJTkUoRkVBVF9UQ0wpCisJICBUQ0xfU1JDPWlmX3RjbC5jCisJICBUQ0xfT0JKPW9iamVjdHMvaWZfdGNsLm8KKwkgIFRDTF9QUk89aWZfdGNsLnBybworCSAgVENMX0NGTEFHUz0iLUkkVENMX0lOQyAkVENMX0RFRlMiCisJZmkKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVCh0b28gb2xkOyBuZWVkIFRjbCB2ZXJzaW9uIDguMCBvciBsYXRlcikKKyAgICBmaQorICBmaQorZmkKK0FDX1NVQlNUKFRDTF9TUkMpCitBQ19TVUJTVChUQ0xfT0JKKQorQUNfU1VCU1QoVENMX1BSTykKK0FDX1NVQlNUKFRDTF9DRkxBR1MpCitBQ19TVUJTVChUQ0xfTElCUykKKworQUNfTVNHX0NIRUNLSU5HKC0tZW5hYmxlLXJ1YnlpbnRlcnAgYXJndW1lbnQpCitBQ19BUkdfRU5BQkxFKHJ1YnlpbnRlcnAsCisJWyAgLS1lbmFibGUtcnVieWludGVycCAgICAgSW5jbHVkZSBSdWJ5IGludGVycHJldGVyLl0sICwKKwlbZW5hYmxlX3J1YnlpbnRlcnA9Im5vIl0pCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfcnVieWludGVycCkKK2lmIHRlc3QgIiRlbmFibGVfcnVieWludGVycCIgPSAieWVzIjsgdGhlbgorICBBQ19TVUJTVCh2aV9jdl9wYXRoX3J1YnkpCisgIEFDX1BBVEhfUFJPRyh2aV9jdl9wYXRoX3J1YnksIHJ1YnkpCisgIGlmIHRlc3QgIlgkdmlfY3ZfcGF0aF9ydWJ5IiAhPSAiWCI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoUnVieSB2ZXJzaW9uKQorICAgIGlmICR2aV9jdl9wYXRoX3J1YnkgLWUgJ1ZFUlNJT04gPj0gIjEuNi4wIiBvciBleGl0IDEnID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoT0spCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoUnVieSBoZWFkZXIgZmlsZXMpCisgICAgICBydWJ5aGRyZGlyPWAkdmlfY3ZfcGF0aF9ydWJ5IC1yIG1rbWYgLWUgJ3ByaW50IENvbmZpZzo6Q09ORklHW1siYXJjaGRpciJdXSB8fCAkaGRyZGlyJyAyPi9kZXYvbnVsbGAKKyAgICAgIGlmIHRlc3QgIlgkcnVieWhkcmRpciIgIT0gIlgiOyB0aGVuCisJQUNfTVNHX1JFU1VMVCgkcnVieWhkcmRpcikKKwlSVUJZX0NGTEFHUz0iLUkkcnVieWhkcmRpciIKKwlydWJ5bGlicz1gJHZpX2N2X3BhdGhfcnVieSAtciByYmNvbmZpZyAtZSAncHJpbnQgQ29uZmlnOjpDT05GSUdbWyJMSUJTIl1dJ2AKKwlpZiB0ZXN0ICJYJHJ1YnlsaWJzIiAhPSAiWCI7IHRoZW4KKwkgIFJVQllfTElCUz0iJHJ1YnlsaWJzIgorCWZpCisJbGlicnVieWFyZz1gJHZpX2N2X3BhdGhfcnVieSAtciByYmNvbmZpZyAtZSAncHJpbnQgQ29uZmlnLmV4cGFuZChDb25maWc6OkNPTkZJR1tbIkxJQlJVQllBUkciXV0pJ2AKKwlpZiB0ZXN0IC1mICIkcnVieWhkcmRpci8kbGlicnVieWFyZyI7IHRoZW4KKwkgIGxpYnJ1Ynlhcmc9IiRydWJ5aGRyZGlyLyRsaWJydWJ5YXJnIgorCWVsc2UKKwkgIHJ1YnlsaWJkaXI9YCR2aV9jdl9wYXRoX3J1YnkgLXIgcmJjb25maWcgLWUgJ3ByaW50IENvbmZpZy5leHBhbmQoQ29uZmlnOjpDT05GSUdbWyJsaWJkaXIiXV0pJ2AKKwkgIGlmIHRlc3QgLWYgIiRydWJ5bGliZGlyLyRsaWJydWJ5YXJnIjsgdGhlbgorCSAgICBsaWJydWJ5YXJnPSIkcnVieWxpYmRpci8kbGlicnVieWFyZyIKKwkgIGVsaWYgdGVzdCAiJGxpYnJ1YnlhcmciID0gImxpYnJ1YnkuYSI7IHRoZW4KKwkgICAgZG5sIHJlcXVpcmVkIG9uIE1hYyBPUyAxMC4zIHdoZXJlIGxpYnJ1YnkuYSBkb2Vzbid0IGV4aXN0CisJICAgIGxpYnJ1Ynlhcmc9Ii1scnVieSIKKwkgIGVsc2UKKwkgICAgbGlicnVieWFyZz1gJHZpX2N2X3BhdGhfcnVieSAtciByYmNvbmZpZyAtZSAicHJpbnQgJyRsaWJydWJ5YXJnJy5nc3ViKC8tTFwuLywgJSctTCN7Q29uZmlnLmV4cGFuZChDb25maWc6OkNPTkZJR1tcImxpYmRpclwiXSl9JykiYAorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAiWCRsaWJydWJ5YXJnIiAhPSAiWCI7IHRoZW4KKwkgIFJVQllfTElCUz0iJGxpYnJ1YnlhcmcgJFJVQllfTElCUyIKKwlmaQorCXJ1YnlsZGZsYWdzPWAkdmlfY3ZfcGF0aF9ydWJ5IC1yIHJiY29uZmlnIC1lICdwcmludCBDb25maWc6OkNPTkZJR1tbIkxERkxBR1MiXV0nYAorCWlmIHRlc3QgIlgkcnVieWxkZmxhZ3MiICE9ICJYIjsgdGhlbgorCSAgTERGTEFHUz0iJHJ1YnlsZGZsYWdzICRMREZMQUdTIgorCWZpCisJUlVCWV9TUkM9ImlmX3J1YnkuYyIKKwlSVUJZX09CSj0ib2JqZWN0cy9pZl9ydWJ5Lm8iCisJUlVCWV9QUk89ImlmX3J1YnkucHJvIgorCUFDX0RFRklORShGRUFUX1JVQlkpCisgICAgICBlbHNlCisJQUNfTVNHX1JFU1VMVChub3QgZm91bmQsIGRpc2FibGluZyBSdWJ5KQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKHRvbyBvbGQ7IG5lZWQgUnVieSB2ZXJzaW9uIDEuNi4wIG9yIGxhdGVyKQorICAgIGZpCisgIGZpCitmaQorQUNfU1VCU1QoUlVCWV9TUkMpCitBQ19TVUJTVChSVUJZX09CSikKK0FDX1NVQlNUKFJVQllfUFJPKQorQUNfU1VCU1QoUlVCWV9DRkxBR1MpCitBQ19TVUJTVChSVUJZX0xJQlMpCisKK0FDX01TR19DSEVDS0lORygtLWVuYWJsZS1jc2NvcGUgYXJndW1lbnQpCitBQ19BUkdfRU5BQkxFKGNzY29wZSwKKwlbICAtLWVuYWJsZS1jc2NvcGUgICAgICAgICBJbmNsdWRlIGNzY29wZSBpbnRlcmZhY2UuXSwgLAorCVtlbmFibGVfY3Njb3BlPSJubyJdKQorQUNfTVNHX1JFU1VMVCgkZW5hYmxlX2NzY29wZSkKK2lmIHRlc3QgIiRlbmFibGVfY3Njb3BlIiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0RFRklORShGRUFUX0NTQ09QRSkKK2ZpCisKK0FDX01TR19DSEVDS0lORygtLWVuYWJsZS13b3Jrc2hvcCBhcmd1bWVudCkKK0FDX0FSR19FTkFCTEUod29ya3Nob3AsCisJWyAgLS1lbmFibGUtd29ya3Nob3AgICAgICAgSW5jbHVkZSBTdW4gVmlzdWFsIFdvcmtzaG9wIHN1cHBvcnQuXSwgLAorCVtlbmFibGVfd29ya3Nob3A9Im5vIl0pCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfd29ya3Nob3ApCitpZiB0ZXN0ICIkZW5hYmxlX3dvcmtzaG9wIiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0RFRklORShGRUFUX1NVTl9XT1JLU0hPUCkKKyAgV09SS1NIT1BfU1JDPSJ3b3Jrc2hvcC5jIGludGVncmF0aW9uLmMiCisgIEFDX1NVQlNUKFdPUktTSE9QX1NSQykKKyAgV09SS1NIT1BfT0JKPSJvYmplY3RzL3dvcmtzaG9wLm8gb2JqZWN0cy9pbnRlZ3JhdGlvbi5vIgorICBBQ19TVUJTVChXT1JLU0hPUF9PQkopCisgIGlmIHRlc3QgIiR7ZW5hYmxlX2d1aS14eHh9IiA9IHh4eDsgdGhlbgorICAgIGVuYWJsZV9ndWk9bW90aWYKKyAgZmkKK2ZpCisKK0FDX01TR19DSEVDS0lORygtLWRpc2FibGUtbmV0YmVhbnMgYXJndW1lbnQpCitBQ19BUkdfRU5BQkxFKG5ldGJlYW5zLAorCVsgIC0tZGlzYWJsZS1uZXRiZWFucyAgICAgIERpc2FibGUgTmV0QmVhbnMgaW50ZWdyYXRpb24gc3VwcG9ydC5dLAorCSwgW2VuYWJsZV9uZXRiZWFucz0ieWVzIl0pCitpZiB0ZXN0ICIkZW5hYmxlX25ldGJlYW5zIiA9ICJ5ZXMiOyB0aGVuCisgIEFDX01TR19SRVNVTFQobm8pCisgIGRubCBPbiBTb2xhcmlzIHdlIG5lZWQgdGhlIHNvY2tldCBhbmQgbnNsIGxpYnJhcnkuCisgIEFDX0NIRUNLX0xJQihzb2NrZXQsIHNvY2tldCkKKyAgQUNfQ0hFQ0tfTElCKG5zbCwgZ2V0aG9zdGJ5bmFtZSkKKyAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgY29tcGlsaW5nIG5ldGJlYW5zIGludGVncmF0aW9uIGlzIHBvc3NpYmxlKQorICBBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCS8qIENoZWNrIGJpdGZpZWxkcyAqLworCXN0cnVjdCBuYmJ1ZiB7CisJdW5zaWduZWQgaW50ICBpbml0RG9uZToxOworCXVzaG9ydCBzaWdubWFwbGVuOworCX07CisJICAgIF0sIFsKKwkJLyogQ2hlY2sgY3JlYXRpbmcgYSBzb2NrZXQuICovCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXI7CisJCSh2b2lkKXNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisJCSh2b2lkKWh0b25zKDEwMCk7CisJCSh2b2lkKWdldGhvc3RieW5hbWUoIm1pY3Jvc29mdC5jb20iKTsKKwkJaWYgKGVycm5vID09IEVDT05OUkVGVVNFRCkKKwkJICAodm9pZCljb25uZWN0KDEsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2VydmVyLCBzaXplb2Yoc2VydmVyKSk7CisJICAgIF0sCisJQUNfTVNHX1JFU1VMVCh5ZXMpLAorCUFDX01TR19SRVNVTFQobm8pOyBlbmFibGVfbmV0YmVhbnM9Im5vIikKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCitmaQoraWYgdGVzdCAiJGVuYWJsZV9uZXRiZWFucyIgPSAieWVzIjsgdGhlbgorICBBQ19ERUZJTkUoRkVBVF9ORVRCRUFOU19JTlRHKQorICBORVRCRUFOU19TUkM9Im5ldGJlYW5zLmMiCisgIEFDX1NVQlNUKE5FVEJFQU5TX1NSQykKKyAgTkVUQkVBTlNfT0JKPSJvYmplY3RzL25ldGJlYW5zLm8iCisgIEFDX1NVQlNUKE5FVEJFQU5TX09CSikKK2ZpCisKK0FDX01TR19DSEVDS0lORygtLWVuYWJsZS1zbmlmZiBhcmd1bWVudCkKK0FDX0FSR19FTkFCTEUoc25pZmYsCisJWyAgLS1lbmFibGUtc25pZmYgICAgICAgICAgSW5jbHVkZSBTbmlmZiBpbnRlcmZhY2UuXSwgLAorCVtlbmFibGVfc25pZmY9Im5vIl0pCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfc25pZmYpCitpZiB0ZXN0ICIkZW5hYmxlX3NuaWZmIiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0RFRklORShGRUFUX1NOSUZGKQorICBTTklGRl9TUkM9ImlmX3NuaWZmLmMiCisgIEFDX1NVQlNUKFNOSUZGX1NSQykKKyAgU05JRkZfT0JKPSJvYmplY3RzL2lmX3NuaWZmLm8iCisgIEFDX1NVQlNUKFNOSUZGX09CSikKK2ZpCisKK0FDX01TR19DSEVDS0lORygtLWVuYWJsZS1tdWx0aWJ5dGUgYXJndW1lbnQpCitBQ19BUkdfRU5BQkxFKG11bHRpYnl0ZSwKKwlbICAtLWVuYWJsZS1tdWx0aWJ5dGUgICAgICBJbmNsdWRlIG11bHRpYnl0ZSBlZGl0aW5nIHN1cHBvcnQuXSwgLAorCVtlbmFibGVfbXVsdGlieXRlPSJubyJdKQorQUNfTVNHX1JFU1VMVCgkZW5hYmxlX211bHRpYnl0ZSkKK2lmIHRlc3QgIiRlbmFibGVfbXVsdGlieXRlIiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0RFRklORShGRUFUX01CWVRFKQorZmkKKworQUNfTVNHX0NIRUNLSU5HKC0tZW5hYmxlLWhhbmd1bGlucHV0IGFyZ3VtZW50KQorQUNfQVJHX0VOQUJMRShoYW5ndWxpbnB1dCwKKwlbICAtLWVuYWJsZS1oYW5ndWxpbnB1dCAgICBJbmNsdWRlIEhhbmd1bCBpbnB1dCBzdXBwb3J0Ll0sICwKKwlbZW5hYmxlX2hhbmd1bGlucHV0PSJubyJdKQorQUNfTVNHX1JFU1VMVCgkZW5hYmxlX2hhbmd1bGlucHV0KQorCitBQ19NU0dfQ0hFQ0tJTkcoLS1lbmFibGUteGltIGFyZ3VtZW50KQorQUNfQVJHX0VOQUJMRSh4aW0sCisJWyAgLS1lbmFibGUteGltICAgICAgICAgICAgSW5jbHVkZSBYSU0gaW5wdXQgc3VwcG9ydC5dLAorCUFDX01TR19SRVNVTFQoJGVuYWJsZV94aW0pLAorCVtlbmFibGVfeGltPSJhdXRvIjsgQUNfTVNHX1JFU1VMVChkZWZhdWx0aW5nIHRvIGF1dG8pXSkKK2RubCBkZWZpbmluZyBGRUFUX1hJTSBpcyBkZWxheWVkLCBzbyB0aGF0IGl0IGNhbiBiZSBkaXNhYmxlZCBmb3Igb2xkZXIgR1RLCisKK0FDX01TR19DSEVDS0lORygtLWVuYWJsZS1mb250c2V0IGFyZ3VtZW50KQorQUNfQVJHX0VOQUJMRShmb250c2V0LAorCVsgIC0tZW5hYmxlLWZvbnRzZXQgICAgICAgIEluY2x1ZGUgWCBmb250c2V0IG91dHB1dCBzdXBwb3J0Ll0sICwKKwlbZW5hYmxlX2ZvbnRzZXQ9Im5vIl0pCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfZm9udHNldCkKK2RubCBkZWZpbmluZyBGRUFUX1hGT05UU0VUIGlzIGRlbGF5ZWQsIHNvIHRoYXQgaXQgY2FuIGJlIGRpc2FibGVkIGZvciBubyBHVUkKKwordGVzdCAteiAiJHdpdGhfeCIgJiYgd2l0aF94PXllcwordGVzdCAiJHtlbmFibGVfZ3VpLXllc30iICE9IG5vIC1hICJ4JE1BQ09TWCIgIT0gInh5ZXMiIC1hICJ4JFFOWCIgIT0gInh5ZXMiICYmIHdpdGhfeD15ZXMKK2lmIHRlc3QgIiR3aXRoX3giID0gbm87IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChkZWZhdWx0aW5nIHRvOiBkb24ndCBIQVZFX1gxMSkKK2Vsc2UKKyAgZG5sIERvIHRoaXMgY2hlY2sgZWFybHksIHNvIHRoYXQgaXRzIGZhaWx1cmUgY2FuIG92ZXJyaWRlIHVzZXIgcmVxdWVzdHMuCisKKyAgQUNfUEFUSF9QUk9HKHhta21mcGF0aCwgeG1rbWYpCisKKyAgQUNfUEFUSF9YVFJBCisKKyAgZG5sIE9uIE9TMzkwVW5peCB0aGUgWCBsaWJyYXJpZXMgYXJlIERMTHMuIFRvIHVzZSB0aGVtIHRoZSBjb2RlIG11c3QKKyAgZG5sIGJlIGNvbXBpbGVkIHdpdGggYSBzcGVjaWFsIG9wdGlvbi4KKyAgZG5sIEFsc28gYWRkIFNNLCBJQ0UgYW5kIFhtdSB0byBYX0VYVFJBX0xJQlMuCisgIGlmIHRlc3QgIiRPUzM5MFVuaXgiID0gInllcyI7IHRoZW4KKyAgICBDRkxBR1M9IiRDRkxBR1MgLVcgYyxkbGwiCisgICAgTERGTEFHUz0iJExERkxBR1MgLVcgbCxkbGwiCisgICAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sU00gLWxJQ0UgLWxYbXUiCisgIGZpCisKKyAgZG5sIE9uIG15IEhQVVggc3lzdGVtIHRoZSBYIGluY2x1ZGUgZGlyIGlzIGZvdW5kLCBidXQgdGhlIGxpYiBkaXIgbm90LgorICBkbmwgVGhpcyBpcyBhIGRlc3BhcmF0ZSB0cnkgdG8gZml4IHRoaXMuCisKKyAgaWYgdGVzdCAtZCAiJHhfaW5jbHVkZXMiICYmIHRlc3QgISAtZCAiJHhfbGlicmFyaWVzIjsgdGhlbgorICAgIHhfbGlicmFyaWVzPWBlY2hvICIkeF9pbmNsdWRlcyIgfCBzZWQgcy9pbmNsdWRlL2xpYi9gCisgICAgQUNfTVNHX1JFU1VMVChDb3JyZWN0ZWQgWCBsaWJyYXJpZXMgdG8gJHhfbGlicmFyaWVzKQorICAgIFhfTElCUz0iJFhfTElCUyAtTCR4X2xpYnJhcmllcyIKKyAgICBpZiB0ZXN0ICJgKHVuYW1lKSAyPi9kZXYvbnVsbGAiID0gU3VuT1MgJiYKKwkJCQkJIHVuYW1lIC1yIHwgZ3JlcCAnXjUnID4vZGV2L251bGw7IHRoZW4KKyAgICAgIFhfTElCUz0iJFhfTElCUyAtUiAkeF9saWJyYXJpZXMiCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0IC1kICIkeF9saWJyYXJpZXMiICYmIHRlc3QgISAtZCAiJHhfaW5jbHVkZXMiOyB0aGVuCisgICAgeF9pbmNsdWRlcz1gZWNobyAiJHhfbGlicmFyaWVzIiB8IHNlZCBzL2xpYi9pbmNsdWRlL2AKKyAgICBBQ19NU0dfUkVTVUxUKENvcnJlY3RlZCBYIGluY2x1ZGVzIHRvICR4X2luY2x1ZGVzKQorICAgIFhfQ0ZMQUdTPSIkWF9DRkxBR1MgLUkkeF9pbmNsdWRlcyIKKyAgZmkKKworICBkbmwgUmVtb3ZlICItSS91c3IvaW5jbHVkZSAiIGZyb20gWF9DRkxBR1MsIHNob3VsZCBub3QgYmUgbmVlZGVkLgorICBYX0NGTEFHUz0iYGVjaG8gJFhfQ0ZMQUdTXCAgfCBzZWQgJ3MlLUkvdXNyL2luY2x1ZGUgJSUnYCIKKyAgZG5sIFJlbW92ZSAiLUwvdXNyL2xpYiAiIGZyb20gWF9MSUJTLCBzaG91bGQgbm90IGJlIG5lZWRlZC4KKyAgWF9MSUJTPSJgZWNobyAkWF9MSUJTXCAgfCBzZWQgJ3MlLUwvdXNyL2xpYiAlJSdgIgorICBkbmwgU2FtZSBmb3IgIi1SL3Vzci9saWIgIi4KKyAgWF9MSUJTPSJgZWNobyAkWF9MSUJTXCAgfCBzZWQgLWUgJ3MlLVIvdXNyL2xpYiAlJScgLWUgJ3MlLVIgL3Vzci9saWIgJSUnYCIKKworCisgIGRubCBDaGVjayBpZiB0aGUgWDExIGhlYWRlciBmaWxlcyBhcmUgY29ycmVjdGx5IGluc3RhbGxlZC4gT24gc29tZSBzeXN0ZW1zCisgIGRubCBYbGliLmggaW5jbHVkZXMgZmlsZXMgdGhhdCBkb24ndCBleGlzdAorICBBQ19NU0dfQ0hFQ0tJTkcoaWYgWDExIGhlYWRlciBmaWxlcyBjYW4gYmUgZm91bmQpCisgIGNmbGFnc19zYXZlPSRDRkxBR1MKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICRYX0NGTEFHUyIKKyAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0sICwKKwlBQ19NU0dfUkVTVUxUKHllcyksCisJQUNfTVNHX1JFU1VMVChubyk7IG5vX3g9eWVzKQorICBDRkxBR1M9JGNmbGFnc19zYXZlCisKKyAgaWYgdGVzdCAiJHtub194LW5vfSIgPSB5ZXM7IHRoZW4KKyAgICB3aXRoX3g9bm8KKyAgZWxzZQorICAgIEFDX0RFRklORShIQVZFX1gxMSkKKyAgICBYX0xJQj0iLWxYdCAtbFgxMSI7CisgICAgQUNfU1VCU1QoWF9MSUIpCisKKyAgICBhY19zYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIExERkxBR1M9Ii1MJHhfbGlicmFyaWVzICRMREZMQUdTIgorCisgICAgZG5sIENoZWNrIGZvciAtbFhkbWNwIChuZWVkZWQgb24gU3VuT1MgNC4xLjQpCisgICAgZG5sIEZvciBIUC1VWCAxMC4yMCBpdCBtdXN0IGJlIGJlZm9yZSAtbFNNIC1sSUNFCisgICAgQUNfQ0hFQ0tfTElCKFhkbWNwLCBfWGRtY3BBdXRoRG9JdCwgW1hfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbFhkbWNwIl0sLAorCQlbLWxYdCAkWF9QUkVfTElCUyAtbFgxMSAkWF9FWFRSQV9MSUJTIC1sWGRtY3BdKQorCisgICAgZG5sIFNvbWUgc3lzdGVtcyBuZWVkIC1sbnNsIC1sc29ja2V0IHdoZW4gdGVzdGluZyBmb3IgSUNFLgorICAgIGRubCBUaGUgY2hlY2sgYWJvdmUgZG9lc24ndCBkbyB0aGlzLCB0cnkgaGVyZSAoYWdhaW4pLiAgQWxzbyBuZWVkZWQgdG8gZ2V0CisgICAgZG5sIHRoZW0gYWZ0ZXIgWGRtY3AuICBsaW5rLnNoIHdpbGwgcmVtb3ZlIHRoZW0gd2hlbiBub3QgbmVlZGVkLgorICAgIGRubCBDaGVjayBmb3Igb3RoZXIgZnVuY3Rpb24gdGhhbiBhYm92ZSB0byBhdm9pZCB0aGUgY2FjaGVkIHZhbHVlCisgICAgQUNfQ0hFQ0tfTElCKElDRSwgSWNlT3BlbkNvbm5lY3Rpb24sCisJCSAgW1hfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbFNNIC1sSUNFIl0sLCBbJFhfRVhUUkFfTElCU10pCisKKyAgICBkbmwgQ2hlY2sgZm9yIC1sWHBtIChuZWVkZWQgZm9yIHNvbWUgdmVyc2lvbnMgb2YgTW90aWYpCisgICAgTERGTEFHUz0iJFhfTElCUyAkYWNfc2F2ZV9MREZMQUdTIgorICAgIEFDX0NIRUNLX0xJQihYcG0sIFhwbUNyZWF0ZVBpeG1hcEZyb21EYXRhLCBbWF9QUkVfTElCUz0iJFhfUFJFX0xJQlMgLWxYcG0iXSwsCisJCVstbFh0ICRYX1BSRV9MSUJTIC1sWHBtIC1sWDExICRYX0VYVFJBX0xJQlNdKQorCisgICAgZG5sIENoZWNrIHRoYXQgdGhlIFgxMSBoZWFkZXIgZmlsZXMgZG9uJ3QgdXNlIGltcGxpY2l0IGRlY2xhcmF0aW9ucworICAgIEFDX01TR19DSEVDS0lORyhpZiBYMTEgaGVhZGVyIGZpbGVzIGltcGxpY2l0bHkgZGVjbGFyZSByZXR1cm4gdmFsdWVzKQorICAgIGNmbGFnc19zYXZlPSRDRkxBR1MKKyAgICBDRkxBR1M9IiRDRkxBR1MgJFhfQ0ZMQUdTIC1XZXJyb3IiCisgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0sICwKKwlBQ19NU0dfUkVTVUxUKG5vKSwKKwlDRkxBR1M9IiRDRkxBR1MgLVduby1pbXBsaWNpdC1pbnQiCisJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0sICwKKwkgICAgQUNfTVNHX1JFU1VMVCh5ZXMpOyBjZmxhZ3Nfc2F2ZT0iJGNmbGFnc19zYXZlIC1Xbm8taW1wbGljaXQtaW50IiwKKwkgICAgQUNfTVNHX1JFU1VMVCh0ZXN0IGZhaWxlZCkKKwkpCisgICAgKQorICAgIENGTEFHUz0kY2ZsYWdzX3NhdmUKKworICAgIExERkxBR1M9IiRhY19zYXZlX0xERkxBR1MiCisKKyAgZmkKK2ZpCisKK3Rlc3QgIngkd2l0aF94IiA9IHhubyAtYSAieCRCRU9TIiAhPSAieHllcyIgLWEgIngkTUFDT1NYIiAhPSAieHllcyIgLWEgIngkUU5YIiAhPSAieHllcyIgJiYgZW5hYmxlX2d1aT1ubworCitBQ19NU0dfQ0hFQ0tJTkcoLS1lbmFibGUtZ3VpIGFyZ3VtZW50KQorQUNfQVJHX0VOQUJMRShndWksCisgWyAgLS1lbmFibGUtZ3VpWz1PUFRTXSAgICAgWDExIEdVSSBbZGVmYXVsdD1hdXRvXSBbT1BUUz1hdXRvL25vL2d0ay9ndGsyL2dub21lL2dub21lMi9tb3RpZi9hdGhlbmEvbmVYdGF3L2Jlb3MvcGhvdG9uL2NhcmJvbl1dLCAsIGVuYWJsZV9ndWk9ImF1dG8iKQorCitkbmwgQ2Fub25pY2FsaXplIHRoZSAtLWVuYWJsZS1ndWk9IGFyZ3VtZW50IHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseSBjb21wYXJlZC4KK2RubCBEbyBub3QgdXNlIGNoYXJhY3RlciBjbGFzc2VzIGZvciBwb3J0YWJpbGl0eSB3aXRoIG9sZCB0b29scy4KK2VuYWJsZV9ndWlfY2Fub249YGVjaG8gIl8kZW5hYmxlX2d1aSIgfCBcCisJc2VkICdzL1tbIF8rLV1dLy9nO3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKworZG5sIFNraXAgZXZlcnl0aGluZyBieSBkZWZhdWx0LgorU0tJUF9HVEs9WUVTCitTS0lQX0dUSzI9WUVTCitTS0lQX0dOT01FPVlFUworU0tJUF9NT1RJRj1ZRVMKK1NLSVBfQVRIRU5BPVlFUworU0tJUF9ORVhUQVc9WUVTCitTS0lQX1BIT1RPTj1ZRVMKK1NLSVBfQkVPUz1ZRVMKK1NLSVBfQ0FSQk9OPVlFUworR1VJVFlQRT1OT05FCisKK2lmIHRlc3QgIngkQkVPUyIgPSAieHllcyI7IHRoZW4KKyAgU0tJUF9CRU9TPQorICBjYXNlICIkZW5hYmxlX2d1aV9jYW5vbiIgaW4KKyAgICBubykJCUFDX01TR19SRVNVTFQobm8gR1VJIHN1cHBvcnQpCisJCVNLSVBfQkVPUz1ZRVMgOzsKKyAgICB5ZXN8IiIpCUFDX01TR19SRVNVTFQoeWVzIC0gYXV0b21hdGljIEdVSSBzdXBwb3J0KSA7OworICAgIGF1dG8pCUFDX01TR19SRVNVTFQoYXV0byAtIGF1dG9tYXRpYyBHVUkgc3VwcG9ydCkgOzsKKyAgICBiZW9zKQlBQ19NU0dfUkVTVUxUKEJlT1MgR1VJIHN1cHBvcnQpIDs7CisgICAgKikJCUFDX01TR19SRVNVTFQoW1NvcnJ5LCAkZW5hYmxlX2d1aSBHVUkgaXMgbm90IHN1cHBvcnRlZF0pCisJCVNLSVBfQkVPUz1ZRVMgOzsKKyAgZXNhYworCitlbGlmIHRlc3QgIngkUU5YIiA9ICJ4eWVzIiAtYSAieCR3aXRoX3giID0gInhubyIgOyB0aGVuCisgIFNLSVBfUEhPVE9OPQorICBjYXNlICIkZW5hYmxlX2d1aV9jYW5vbiIgaW4KKyAgICBubykJCUFDX01TR19SRVNVTFQobm8gR1VJIHN1cHBvcnQpCisJCVNLSVBfUEhPVE9OPVlFUyA7OworICAgIHllc3wiIikJQUNfTVNHX1JFU1VMVCh5ZXMgLSBhdXRvbWF0aWMgR1VJIHN1cHBvcnQpIDs7CisgICAgYXV0bykJQUNfTVNHX1JFU1VMVChhdXRvIC0gYXV0b21hdGljIEdVSSBzdXBwb3J0KSA7OworICAgIHBob3RvbikJQUNfTVNHX1JFU1VMVChQaG90b24gR1VJIHN1cHBvcnQpIDs7CisgICAgKikJCUFDX01TR19SRVNVTFQoW1NvcnJ5LCAkZW5hYmxlX2d1aSBHVUkgaXMgbm90IHN1cHBvcnRlZF0pCisJCVNLSVBfUEhPVE9OPVlFUyA7OworICBlc2FjCisKK2VsaWYgdGVzdCAieCRNQUNPU1giID0gInh5ZXMiIC1hICJ4JHdpdGhfeCIgPSAieG5vIiA7IHRoZW4KKyAgU0tJUF9DQVJCT049CisgIGNhc2UgIiRlbmFibGVfZ3VpX2Nhbm9uIiBpbgorICAgIG5vKQkJQUNfTVNHX1JFU1VMVChubyBHVUkgc3VwcG9ydCkKKwkJU0tJUF9DQVJCT049WUVTIDs7CisgICAgeWVzfCIiKQlBQ19NU0dfUkVTVUxUKHllcyAtIGF1dG9tYXRpYyBHVUkgc3VwcG9ydCkgOzsKKyAgICBhdXRvKQlBQ19NU0dfUkVTVUxUKGF1dG8gLSBhdXRvbWF0aWMgR1VJIHN1cHBvcnQpIDs7CisgICAgY2FyYm9uKQlBQ19NU0dfUkVTVUxUKENhcmJvbiBHVUkgc3VwcG9ydCkgOzsKKyAgICAqKQkJQUNfTVNHX1JFU1VMVChbU29ycnksICRlbmFibGVfZ3VpIEdVSSBpcyBub3Qgc3VwcG9ydGVkXSkKKwkJU0tJUF9DQVJCT049WUVTIDs7CisgIGVzYWMKKworZWxzZQorCisKKyAgY2FzZSAiJGVuYWJsZV9ndWlfY2Fub24iIGluCisgICAgbm98bm9uZSkJQUNfTVNHX1JFU1VMVChubyBHVUkgc3VwcG9ydCkgOzsKKyAgICB5ZXN8IiJ8YXV0bykJQUNfTVNHX1JFU1VMVCh5ZXMvYXV0byAtIGF1dG9tYXRpYyBHVUkgc3VwcG9ydCkKKwkJU0tJUF9HVEs9CisJCVNLSVBfR1RLMj0KKwkJU0tJUF9HTk9NRT0KKwkJU0tJUF9NT1RJRj0KKwkJU0tJUF9BVEhFTkE9CisJCVNLSVBfTkVYVEFXPQorCQlTS0lQX0NBUkJPTj07OworICAgIGd0aykJQUNfTVNHX1JFU1VMVChHVEsrIDEueCBHVUkgc3VwcG9ydCkKKwkJU0tJUF9HVEs9OzsKKyAgICBndGsyKQlBQ19NU0dfUkVTVUxUKEdUSysgMi54IEdVSSBzdXBwb3J0KQorCQlTS0lQX0dUSz0KKwkJU0tJUF9HVEsyPTs7CisgICAgZ25vbWUpCUFDX01TR19SRVNVTFQoR05PTUUgMS54IEdVSSBzdXBwb3J0KQorCQlTS0lQX0dOT01FPQorCQlTS0lQX0dUSz07OworICAgIGdub21lMikJQUNfTVNHX1JFU1VMVChHTk9NRSAyLnggR1VJIHN1cHBvcnQpCisJCVNLSVBfR05PTUU9CisJCVNLSVBfR1RLPQorCQlTS0lQX0dUSzI9OzsKKyAgICBtb3RpZikJQUNfTVNHX1JFU1VMVChNb3RpZiBHVUkgc3VwcG9ydCkKKwkJU0tJUF9NT1RJRj07OworICAgIGF0aGVuYSkJQUNfTVNHX1JFU1VMVChBdGhlbmEgR1VJIHN1cHBvcnQpCisJCVNLSVBfQVRIRU5BPTs7CisgICAgbmV4dGF3KQlBQ19NU0dfUkVTVUxUKG5lWHRhdyBHVUkgc3VwcG9ydCkKKwkJU0tJUF9ORVhUQVc9OzsKKyAgICAqKQkJQUNfTVNHX1JFU1VMVChbU29ycnksICRlbmFibGVfZ3VpIEdVSSBpcyBub3Qgc3VwcG9ydGVkXSkgOzsKKyAgZXNhYworCitmaQorCitpZiB0ZXN0ICJ4JFNLSVBfR1RLIiAhPSAieFlFUyIgLWEgIiRlbmFibGVfZ3VpX2Nhbm9uIiAhPSAiZ3RrIiAtYSAiJGVuYWJsZV9ndWlfY2Fub24iICE9ICJndGsyIjsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBvciBub3QgdG8gbG9vayBmb3IgR1RLKQorICBBQ19BUkdfRU5BQkxFKGd0ay1jaGVjaywKKwlbICAtLWVuYWJsZS1ndGstY2hlY2sgICAgICBJZiBhdXRvLXNlbGVjdCBHVUksIGNoZWNrIGZvciBHVEsgW2RlZmF1bHQ9eWVzXV0sCisJLCBlbmFibGVfZ3RrX2NoZWNrPSJ5ZXMiKQorICBBQ19NU0dfUkVTVUxUKCRlbmFibGVfZ3RrX2NoZWNrKQorICBpZiB0ZXN0ICJ4JGVuYWJsZV9ndGtfY2hlY2siID0gInhubyI7IHRoZW4KKyAgICBTS0lQX0dUSz1ZRVMKKyAgICBTS0lQX0dOT01FPVlFUworICBmaQorZmkKKworaWYgdGVzdCAieCRTS0lQX0dUSzIiICE9ICJ4WUVTIiAtYSAiJGVuYWJsZV9ndWlfY2Fub24iICE9ICJndGsyIiBcCisJCQkJLWEgIiRlbmFibGVfZ3VpX2Nhbm9uIiAhPSAiZ25vbWUyIjsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBvciBub3QgdG8gbG9vayBmb3IgR1RLKyAyKQorICBBQ19BUkdfRU5BQkxFKGd0azItY2hlY2ssCisJWyAgLS1lbmFibGUtZ3RrMi1jaGVjayAgICAgSWYgR1RLIEdVSSwgY2hlY2sgZm9yIEdUSysgMiBbZGVmYXVsdD15ZXNdXSwKKwksIGVuYWJsZV9ndGsyX2NoZWNrPSJ5ZXMiKQorICBBQ19NU0dfUkVTVUxUKCRlbmFibGVfZ3RrMl9jaGVjaykKKyAgaWYgdGVzdCAieCRlbmFibGVfZ3RrMl9jaGVjayIgPSAieG5vIjsgdGhlbgorICAgIFNLSVBfR1RLMj1ZRVMKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkU0tJUF9HTk9NRSIgIT0gInhZRVMiIC1hICIkZW5hYmxlX2d1aV9jYW5vbiIgIT0gImdub21lIiBcCisJCQkJIC1hICIkZW5hYmxlX2d1aV9jYW5vbiIgIT0gImdub21lMiI7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgb3Igbm90IHRvIGxvb2sgZm9yIEdOT01FKQorICBBQ19BUkdfRU5BQkxFKGdub21lLWNoZWNrLAorCVsgIC0tZW5hYmxlLWdub21lLWNoZWNrICAgIElmIEdUSyBHVUksIGNoZWNrIGZvciBHTk9NRSBbZGVmYXVsdD1ub11dLAorCSwgZW5hYmxlX2dub21lX2NoZWNrPSJubyIpCisgIEFDX01TR19SRVNVTFQoJGVuYWJsZV9nbm9tZV9jaGVjaykKKyAgaWYgdGVzdCAieCRlbmFibGVfZ25vbWVfY2hlY2siID0gInhubyI7IHRoZW4KKyAgICBTS0lQX0dOT01FPVlFUworICBmaQorZmkKKworaWYgdGVzdCAieCRTS0lQX01PVElGIiAhPSAieFlFUyIgLWEgIiRlbmFibGVfZ3VpX2Nhbm9uIiAhPSAibW90aWYiOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIG9yIG5vdCB0byBsb29rIGZvciBNb3RpZikKKyAgQUNfQVJHX0VOQUJMRShtb3RpZi1jaGVjaywKKwlbICAtLWVuYWJsZS1tb3RpZi1jaGVjayAgICBJZiBhdXRvLXNlbGVjdCBHVUksIGNoZWNrIGZvciBNb3RpZiBbZGVmYXVsdD15ZXNdXSwKKwksIGVuYWJsZV9tb3RpZl9jaGVjaz0ieWVzIikKKyAgQUNfTVNHX1JFU1VMVCgkZW5hYmxlX21vdGlmX2NoZWNrKQorICBpZiB0ZXN0ICJ4JGVuYWJsZV9tb3RpZl9jaGVjayIgPSAieG5vIjsgdGhlbgorICAgIFNLSVBfTU9USUY9WUVTCisgIGZpCitmaQorCitpZiB0ZXN0ICJ4JFNLSVBfQVRIRU5BIiAhPSAieFlFUyIgLWEgIiRlbmFibGVfZ3VpX2Nhbm9uIiAhPSAiYXRoZW5hIjsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBvciBub3QgdG8gbG9vayBmb3IgQXRoZW5hKQorICBBQ19BUkdfRU5BQkxFKGF0aGVuYS1jaGVjaywKKwlbICAtLWVuYWJsZS1hdGhlbmEtY2hlY2sgICBJZiBhdXRvLXNlbGVjdCBHVUksIGNoZWNrIGZvciBBdGhlbmEgW2RlZmF1bHQ9eWVzXV0sCisJLCBlbmFibGVfYXRoZW5hX2NoZWNrPSJ5ZXMiKQorICBBQ19NU0dfUkVTVUxUKCRlbmFibGVfYXRoZW5hX2NoZWNrKQorICBpZiB0ZXN0ICJ4JGVuYWJsZV9hdGhlbmFfY2hlY2siID0gInhubyI7IHRoZW4KKyAgICBTS0lQX0FUSEVOQT1ZRVMKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkU0tJUF9ORVhUQVciICE9ICJ4WUVTIiAtYSAiJGVuYWJsZV9ndWlfY2Fub24iICE9ICJuZXh0YXciOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIG9yIG5vdCB0byBsb29rIGZvciBuZVh0YXcpCisgIEFDX0FSR19FTkFCTEUobmV4dGF3LWNoZWNrLAorCVsgIC0tZW5hYmxlLW5leHRhdy1jaGVjayAgIElmIGF1dG8tc2VsZWN0IEdVSSwgY2hlY2sgZm9yIG5lWHRhdyBbZGVmYXVsdD15ZXNdXSwKKwksIGVuYWJsZV9uZXh0YXdfY2hlY2s9InllcyIpCisgIEFDX01TR19SRVNVTFQoJGVuYWJsZV9uZXh0YXdfY2hlY2spOworICBpZiB0ZXN0ICJ4JGVuYWJsZV9uZXh0YXdfY2hlY2siID0gInhubyI7IHRoZW4KKyAgICBTS0lQX05FWFRBVz1ZRVMKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkU0tJUF9DQVJCT04iICE9ICJ4WUVTIiAtYSAiJGVuYWJsZV9ndWlfY2Fub24iICE9ICJjYXJib24iOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIG9yIG5vdCB0byBsb29rIGZvciBDYXJib24pCisgIEFDX0FSR19FTkFCTEUoY2FyYm9uLWNoZWNrLAorCVsgIC0tZW5hYmxlLWNhcmJvbi1jaGVjayAgIElmIGF1dG8tc2VsZWN0IEdVSSwgY2hlY2sgZm9yIENhcmJvbiBbZGVmYXVsdD15ZXNdXSwKKwksIGVuYWJsZV9jYXJib25fY2hlY2s9InllcyIpCisgIEFDX01TR19SRVNVTFQoJGVuYWJsZV9jYXJib25fY2hlY2spOworICBpZiB0ZXN0ICJ4JGVuYWJsZV9jYXJib25fY2hlY2siID0gInhubyI7IHRoZW4KKyAgICBTS0lQX0NBUkJPTj1ZRVMKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkTUFDT1NYIiA9ICJ4eWVzIiAtYSAteiAiJFNLSVBfQ0FSQk9OIiAtYSAieCRDQVJCT04iID0gInh5ZXMiOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhmb3IgQ2FyYm9uIEdVSSkKKyAgZG5sIGFscmVhZHkgZGlkIHRoaXMKKyAgQUNfTVNHX1JFU1VMVCh5ZXMpOworICBHVUlUWVBFPUNBUkJPTkdVSQorICBkbmwgc2tpcCBldmVyeXRoaW5nIGVsc2UKKyAgU0tJUF9HVEs9WUVTOworICBTS0lQX0dUSzI9WUVTOworICBTS0lQX0dOT01FPVlFUzsKKyAgU0tJUF9NT1RJRj1ZRVM7CisgIFNLSVBfQVRIRU5BPVlFUzsKKyAgU0tJUF9ORVhUQVc9WUVTOworICBTS0lQX1BIT1RPTj1ZRVM7CisgIFNLSVBfQkVPUz1ZRVM7CisgIFNLSVBfQ0FSQk9OPVlFUworZmkKKworCitkbmwKK2RubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzIGZyb20gdGhlIGd0ay1jb25maWcgc2NyaXB0CitkbmwKKworZG5sIGRlZmluZSBhbiBhdXRvY29uZiBmdW5jdGlvbiB0byBjaGVjayBmb3IgYSBzcGVjaWZpZWQgdmVyc2lvbiBvZiBHVEssIGFuZAorZG5sIHRyeSB0byBjb21waWxlL2xpbmsgYSBHVEsgcHJvZ3JhbS4gIHRoaXMgZ2V0cyB1c2VkIG9uY2UgZm9yIEdUSyAxLjEuMTYuCitkbmwKK2RubCBBTV9QQVRIX0dUSyhbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCitkbmwgVGVzdCBmb3IgR1RLLCBhbmQgZGVmaW5lIEdUS19DRkxBR1MgYW5kIEdUS19MSUJTCitkbmwKK0FDX0RFRlVOKEFNX1BBVEhfR1RLLAorWworICBpZiB0ZXN0ICJYJEdUS19DT05GSUciICE9ICJYbm8iIC1vICJYJFBLR19DT05GSUciICE9ICJYbm8iOyB0aGVuCisgIHsKKyAgICBtaW5fZ3RrX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjk5LjcsJDEpCisgICAgQUNfTVNHX0NIRUNLSU5HKGZvciBHVEsgLSB2ZXJzaW9uID49ICRtaW5fZ3RrX3ZlcnNpb24pCisgICAgbm9fZ3RrPSIiCisgICAgaWYgKHRlc3QgIlgkU0tJUF9HVEsyIiAhPSAiWFlFUyIgLWEgIlgkUEtHX0NPTkZJRyIgIT0gIlhubyIpIFwKKwkgICYmICRQS0dfQ09ORklHIC0tZXhpc3RzIGd0aystMi4wOyB0aGVuCisgICAgeworICAgICAgZG5sIFdlIHNob3VsZCBiZSB1c2luZyBQS0dfQ0hFQ0tfTU9EVUxFUygpIGluc3RlYWQgb2YgdGhpcyBoYWNrLgorICAgICAgZG5sIEJ1dCBJIGd1ZXNzIHRoZSBkZXBlbmRlbmN5IG9uIHBrZ2NvbmZpZy5tNCBpcyBub3Qgd2FudGVkIG9yCisgICAgICBkbmwgc29tZXRoaW5nIGxpa2UgdGhhdC4KKyAgICAgIEdUS19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGd0aystMi4wYAorICAgICAgR1RLX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBndGsrLTIuMGAKKyAgICAgIGd0a19tYWpvcl92ZXJzaW9uPWAkUEtHX0NPTkZJRyAtLW1vZHZlcnNpb24gZ3RrKy0yLjAgfCBcCisJICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorICAgICAgZ3RrX21pbm9yX3ZlcnNpb249YCRQS0dfQ09ORklHIC0tbW9kdmVyc2lvbiBndGsrLTIuMCB8IFwKKwkgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCisgICAgICBndGtfbWljcm9fdmVyc2lvbj1gJFBLR19DT05GSUcgLS1tb2R2ZXJzaW9uIGd0aystMi4wIHwgXAorCSAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKyAgICB9CisgICAgZWxpZiB0ZXN0ICJYJEdUS19DT05GSUciICE9ICJYbm8iOyB0aGVuCisgICAgeworICAgICAgR1RLX0NGTEFHUz1gJEdUS19DT05GSUcgJGd0a19jb25maWdfYXJncyAtLWNmbGFnc2AKKyAgICAgIEdUS19MSUJTPWAkR1RLX0NPTkZJRyAkZ3RrX2NvbmZpZ19hcmdzIC0tbGlic2AKKyAgICAgIGd0a19tYWpvcl92ZXJzaW9uPWAkR1RLX0NPTkZJRyAkZ3RrX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKwkgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCisgICAgICBndGtfbWlub3JfdmVyc2lvbj1gJEdUS19DT05GSUcgJGd0a19jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisJICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorICAgICAgZ3RrX21pY3JvX3ZlcnNpb249YCRHVEtfQ09ORklHICRndGtfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorCSAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKyAgICB9CisgICAgZWxzZQorICAgICAgbm9fZ3RrPXllcworICAgIGZpCisKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9ndGt0ZXN0IiA9ICJ4eWVzIiAtYSAieCRub19ndGsiID0gIngiOyB0aGVuCisgICAgeworICAgICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHVEtfQ0ZMQUdTIgorICAgICAgTElCUz0iJExJQlMgJEdUS19MSUJTIgorCisgICAgICBkbmwKKyAgICAgIGRubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBHVEsgaXMgc3VmZmljaWVudGx5IG5ldy4gKEFsc28gc2FuaXR5CisgICAgICBkbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIGd0ay1jb25maWcgdG8gc29tZSBleHRlbnQKKyAgICAgIGRubAorICAgICAgcm0gLWYgY29uZi5ndGt0ZXN0CisgICAgICBBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50CittYWluICgpCit7CitpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKK2NoYXIgKnRtcF92ZXJzaW9uOworCitzeXN0ZW0gKCJ0b3VjaCBjb25mLmd0a3Rlc3QiKTsKKworLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCit0bXBfdmVyc2lvbiA9IGdfc3RyZHVwKCIkbWluX2d0a192ZXJzaW9uIik7CitpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7CisgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmdcbiIsICIkbWluX2d0a192ZXJzaW9uIik7CisgICBleGl0KDEpOworIH0KKworaWYgKChndGtfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorICAgICgoZ3RrX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChndGtfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKyAgICAoKGd0a19tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ3RrX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmCisJCQkJICAgICAoZ3RrX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKK3sKKyAgICByZXR1cm4gMDsKK30KK3JldHVybiAxOworfQorXSwsIG5vX2d0az15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQorICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorICAgIH0KKyAgICBmaQorICAgIGlmIHRlc3QgIngkbm9fZ3RrIiA9IHggOyB0aGVuCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9ndGt0ZXN0IiA9ICJ4eWVzIjsgdGhlbgorCUFDX01TR19SRVNVTFQoeWVzOyBmb3VuZCB2ZXJzaW9uICRndGtfbWFqb3JfdmVyc2lvbi4kZ3RrX21pbm9yX3ZlcnNpb24uJGd0a19taWNyb192ZXJzaW9uKQorICAgICAgZWxzZQorCUFDX01TR19SRVNVTFQoZm91bmQgdmVyc2lvbiAkZ3RrX21ham9yX3ZlcnNpb24uJGd0a19taW5vcl92ZXJzaW9uLiRndGtfbWljcm9fdmVyc2lvbikKKyAgICAgIGZpCisgICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgIGVsc2UKKyAgICB7CisgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgR1RLX0NGTEFHUz0iIgorICAgICAgR1RLX0xJQlM9IiIKKyAgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICAgfQorICAgIGZpCisgIH0KKyAgZWxzZQorICAgIEdUS19DRkxBR1M9IiIKKyAgICBHVEtfTElCUz0iIgorICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgIGZpCisgIEFDX1NVQlNUKEdUS19DRkxBR1MpCisgIEFDX1NVQlNUKEdUS19MSUJTKQorICBybSAtZiBjb25mLmd0a3Rlc3QKK10pCisKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBnbm9tZQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0dOT01FX0lOSVRfSE9PS10sCitbCisgIEFDX1NVQlNUKEdOT01FX0xJQlMpCisgIEFDX1NVQlNUKEdOT01FX0xJQkRJUikKKyAgQUNfU1VCU1QoR05PTUVfSU5DTFVERURJUikKKworICBBQ19BUkdfV0lUSChnbm9tZS1pbmNsdWRlcywKKyAgICBbICAtLXdpdGgtZ25vbWUtaW5jbHVkZXM9RElSIFNwZWNpZnkgbG9jYXRpb24gb2YgR05PTUUgaGVhZGVyc10sCisgICAgW0NGTEFHUz0iJENGTEFHUyAtSSR3aXRodmFsIl0KKyAgKQorCisgIEFDX0FSR19XSVRIKGdub21lLWxpYnMsCisgICAgWyAgLS13aXRoLWdub21lLWxpYnM9RElSICAgU3BlY2lmeSBsb2NhdGlvbiBvZiBHTk9NRSBsaWJzXSwKKyAgICBbTERGTEFHUz0iJExERkxBR1MgLUwkd2l0aHZhbCIgZ25vbWVfcHJlZml4PSR3aXRodmFsXQorICApCisKKyAgQUNfQVJHX1dJVEgoZ25vbWUsCisgICAgWyAgLS13aXRoLWdub21lICAgICAgICAgICAgU3BlY2lmeSBwcmVmaXggZm9yIEdOT01FIGZpbGVzXSwKKyAgICBpZiB0ZXN0IHgkd2l0aHZhbCA9IHh5ZXM7IHRoZW4KKyAgICAgIHdhbnRfZ25vbWU9eWVzCisgICAgICBpZmVsc2UoWyQxXSwgW10sIDosIFskMV0pCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAieCR3aXRodmFsIiA9IHhubzsgdGhlbgorCXdhbnRfZ25vbWU9bm8KKyAgICAgIGVsc2UKKwl3YW50X2dub21lPXllcworCUxERkxBR1M9IiRMREZMQUdTIC1MJHdpdGh2YWwvbGliIgorCUNGTEFHUz0iJENGTEFHUyAtSSR3aXRodmFsL2luY2x1ZGUiCisJZ25vbWVfcHJlZml4PSR3aXRodmFsL2xpYgorICAgICAgZmkKKyAgICBmaSwKKyAgICB3YW50X2dub21lPXllcykKKworICBpZiB0ZXN0ICJ4JHdhbnRfZ25vbWUiID0geHllcyAtYSAiMCRndGtfbWFqb3JfdmVyc2lvbiIgLWdlIDI7IHRoZW4KKyAgeworICAgIEFDX01TR19DSEVDS0lORyhmb3IgbGliZ25vbWV1aS0yLjApCisgICAgaWYgJFBLR19DT05GSUcgLS1leGlzdHMgbGliZ25vbWV1aS0yLjA7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgR05PTUVfTElCUz1gJFBLR19DT05GSUcgLS1saWJzLW9ubHktbCBsaWJnbm9tZXVpLTIuMGAKKyAgICAgIEdOT01FX0xJQkRJUj1gJFBLR19DT05GSUcgLS1saWJzLW9ubHktTCBsaWJnbm9tZXVpLTIuMGAKKyAgICAgIEdOT01FX0lOQ0xVREVESVI9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGxpYmdub21ldWktMi4wYAorICAgICAgJDEKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKKyAgICAgIGlmIHRlc3QgIngkMiIgPSB4ZmFpbDsgdGhlbgorCUFDX01TR19FUlJPUihDb3VsZCBub3QgZmluZCBsaWJnbm9tZXVpLTIuMCB2aWEgcGtnLWNvbmZpZykKKyAgICAgIGZpCisgICAgZmkKKyAgfQorICBlbGlmIHRlc3QgIngkd2FudF9nbm9tZSIgPSB4eWVzOyB0aGVuCisgIHsKKyAgICBBQ19QQVRIX1BST0coR05PTUVfQ09ORklHLGdub21lLWNvbmZpZyxubykKKyAgICBpZiB0ZXN0ICIkR05PTUVfQ09ORklHIiA9ICJubyI7IHRoZW4KKyAgICAgIG5vX2dub21lX2NvbmZpZz0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19DSEVDS0lORyhpZiAkR05PTUVfQ09ORklHIHdvcmtzKQorICAgICAgaWYgJEdOT01FX0NPTkZJRyAtLWxpYnMtb25seS1sIGdub21lID4vZGV2L251bGwgMj4mMTsgdGhlbgorCUFDX01TR19SRVNVTFQoeWVzKQorCUdOT01FX0xJQlM9ImAkR05PTUVfQ09ORklHIC0tbGlicy1vbmx5LWwgZ25vbWUgZ25vbWV1aWAiCisJR05PTUVfTElCRElSPSJgJEdOT01FX0NPTkZJRyAtLWxpYnMtb25seS1MIGdub3JiYSBnbm9tZXVpYCIKKwlHTk9NRV9JTkNMVURFRElSPSJgJEdOT01FX0NPTkZJRyAtLWNmbGFncyBnbm9yYmEgZ25vbWV1aWAiCisJJDEKKyAgICAgIGVsc2UKKwlBQ19NU0dfUkVTVUxUKG5vKQorCW5vX2dub21lX2NvbmZpZz0ieWVzIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCB4JGV4ZWNfcHJlZml4ID0geE5PTkU7IHRoZW4KKyAgICAgIGlmIHRlc3QgeCRwcmVmaXggPSB4Tk9ORTsgdGhlbgorCWdub21lX3ByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgvbGliCisgICAgICBlbHNlCisJZ25vbWVfcHJlZml4PSRwcmVmaXgvbGliCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGdub21lX3ByZWZpeD1gZXZhbCBlY2hvIFxgZWNobyAkbGliZGlyXGBgCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRub19nbm9tZV9jb25maWciID0gInllcyI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhmb3IgZ25vbWVDb25mLnNoIGZpbGUgaW4gJGdub21lX3ByZWZpeCkKKyAgICAgIGlmIHRlc3QgLWYgJGdub21lX3ByZWZpeC9nbm9tZUNvbmYuc2g7IHRoZW4KKwlBQ19NU0dfUkVTVUxUKGZvdW5kKQorCWVjaG8gImxvYWRpbmcgZ25vbWUgY29uZmlndXJhdGlvbiBmcm9tIiBcCisJICAiJGdub21lX3ByZWZpeC9nbm9tZUNvbmYuc2giCisJLiAkZ25vbWVfcHJlZml4L2dub21lQ29uZi5zaAorCSQxCisgICAgICBlbHNlCisJQUNfTVNHX1JFU1VMVChub3QgZm91bmQpCisJaWYgdGVzdCB4JDIgPSB4ZmFpbDsgdGhlbgorCSAgQUNfTVNHX0VSUk9SKENvdWxkIG5vdCBmaW5kIHRoZSBnbm9tZUNvbmYuc2ggZmlsZSB0aGF0IGlzIGdlbmVyYXRlZCBieSBnbm9tZS1saWJzIGluc3RhbGwpCisJZmkKKyAgICAgIGZpCisgICAgZmkKKyAgfQorICBmaQorXSkKKworQUNfREVGVU4oW0dOT01FX0lOSVRdLFsKKwlHTk9NRV9JTklUX0hPT0soW10sZmFpbCkKK10pCisKKworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBHVEsuICBGaXJzdCBjaGVja3MgZm9yIGd0ay1jb25maWcsIGNhdXNlIGl0IG5lZWRzIHRoYXQgdG8gZ2V0IHRoZQorZG5sIGNvcnJlY3QgY29tcGlsZXIgZmxhZ3MuICBUaGVuIGNoZWNrcyBmb3IgR1RLIDEuMS4xNi4gIElmIHRoYXQgZmFpbHMsIHRoZW4KK2RubCBpdCBjaGVja3MgZm9yIDEuMC42LiAgSWYgYm90aCBmYWlsLCB0aGVuIGNvbnRpbnVlIG9uIGZvciBNb3RpZiBhcyBiZWZvcmUuLi4KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lmIHRlc3QgLXogIiRTS0lQX0dUSyI7IHRoZW4KKworICBBQ19NU0dfQ0hFQ0tJTkcoLS13aXRoLWd0ay1wcmVmaXggYXJndW1lbnQpCisgIEFDX0FSR19XSVRIKGd0ay1wcmVmaXgsWyAgLS13aXRoLWd0ay1wcmVmaXg9UEZYICAgUHJlZml4IHdoZXJlIEdUSyBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCisJZ3RrX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIjsgQUNfTVNHX1JFU1VMVCgkZ3RrX2NvbmZpZ19wcmVmaXgpLAorCWd0a19jb25maWdfcHJlZml4PSIiOyBBQ19NU0dfUkVTVUxUKG5vKSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoLS13aXRoLWd0ay1leGVjLXByZWZpeCBhcmd1bWVudCkKKyAgQUNfQVJHX1dJVEgoZ3RrLWV4ZWMtcHJlZml4LFsgIC0td2l0aC1ndGstZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIEdUSyBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCisJZ3RrX2NvbmZpZ19leGVjX3ByZWZpeD0iJHdpdGh2YWwiOyBBQ19NU0dfUkVTVUxUKCRndGtfY29uZmlnX3ByZWZpeCksCisJZ3RrX2NvbmZpZ19leGVjX3ByZWZpeD0iIjsgQUNfTVNHX1JFU1VMVChubykpCisKKyAgQUNfTVNHX0NIRUNLSU5HKC0tZGlzYWJsZS1ndGt0ZXN0IGFyZ3VtZW50KQorICBBQ19BUkdfRU5BQkxFKGd0a3Rlc3QsIFsgIC0tZGlzYWJsZS1ndGt0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBHVEsgcHJvZ3JhbV0sCisJLCBlbmFibGVfZ3RrdGVzdD15ZXMpCisgIGlmIHRlc3QgIngkZW5hYmxlX2d0a3Rlc3QiID0gInh5ZXMiIDsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoZ3RrIHRlc3QgZW5hYmxlZCkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoZ3RrIHRlc3QgZGlzYWJsZWQpCisgIGZpCisKKyAgaWYgdGVzdCAieCRndGtfY29uZmlnX3ByZWZpeCIgIT0gIngiIDsgdGhlbgorICAgIGd0a19jb25maWdfYXJncz0iJGd0a19jb25maWdfYXJncyAtLXByZWZpeD0kZ3RrX2NvbmZpZ19wcmVmaXgiCisgICAgR1RLX0NPTkZJRz0kZ3RrX2NvbmZpZ19wcmVmaXgvYmluL2d0ay1jb25maWcKKyAgZmkKKyAgaWYgdGVzdCAieCRndGtfY29uZmlnX2V4ZWNfcHJlZml4IiAhPSAieCIgOyB0aGVuCisgICAgZ3RrX2NvbmZpZ19hcmdzPSIkZ3RrX2NvbmZpZ19hcmdzIC0tZXhlYy1wcmVmaXg9JGd0a19jb25maWdfZXhlY19wcmVmaXgiCisgICAgR1RLX0NPTkZJRz0kZ3RrX2NvbmZpZ19leGVjX3ByZWZpeC9iaW4vZ3RrLWNvbmZpZworICBmaQorICBpZiB0ZXN0ICJYJEdUS19DT05GSUciID0gIlgiOyB0aGVuCisgICAgQUNfUEFUSF9QUk9HKEdUS19DT05GSUcsIGd0ay1jb25maWcsIG5vKQorICAgIGlmIHRlc3QgIlgkR1RLX0NPTkZJRyIgPSAiWG5vIjsgdGhlbgorICAgICAgZG5sIFNvbWUgZGlzdHJpYnV0aW9ucyBjYWxsIGl0IGd0azEyLWNvbmZpZywgYW5ub3lpbmchCisgICAgICBBQ19QQVRIX1BST0coR1RLMTJfQ09ORklHLCBndGsxMi1jb25maWcsIG5vKQorICAgICAgR1RLX0NPTkZJRz0iJEdUSzEyX0NPTkZJRyIKKyAgICBmaQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChVc2luZyBHVEsgY29uZmlndXJhdGlvbiBwcm9ncmFtICRHVEtfQ09ORklHKQorICBmaQorICBpZiB0ZXN0ICJYJFBLR19DT05GSUciID0gIlgiOyB0aGVuCisgICAgQUNfUEFUSF9QUk9HKFBLR19DT05GSUcsIHBrZy1jb25maWcsIG5vKQorICBmaQorCisgIGlmIHRlc3QgIngkR1RLX0NPTkZJRzokUEtHX0NPTkZJRyIgIT0gInhubzpubyI7IHRoZW4KKyAgICBkbmwgRmlyc3QgdHJ5IGZpbmRpbmcgdmVyc2lvbiAyLjIuMCBvciBsYXRlci4gIFRoZSAyLjAueCBzZXJpZXMgaGFzCisgICAgZG5sIHByb2JsZW1zIChib2xkIGZvbnRzLCAtLXJlbW90ZSBkb2Vzbid0IHdvcmspLgorICAgIGlmIHRlc3QgIlgkU0tJUF9HVEsyIiAhPSAiWFlFUyI7IHRoZW4KKyAgICAgIEFNX1BBVEhfR1RLKDIuMi4wLAorCQkgIFtHVEtfTElCTkFNRT0iJEdUS19MSUJTIgorCQkgIEdVSV9JTkNfTE9DPSIkR1RLX0NGTEFHUyJdLCApCisgICAgICBpZiB0ZXN0ICJ4JEdUS19DRkxBR1MiICE9ICJ4IjsgdGhlbgorCVNLSVBfQVRIRU5BPVlFUworCVNLSVBfTkVYVEFXPVlFUworCVNLSVBfTU9USUY9WUVTCisJR1VJVFlQRT1HVEsKKwlBQ19TVUJTVChHVEtfTElCTkFNRSkKKyAgICAgIGZpCisgICAgZmkKKworICAgIGRubCBJZiB0aGVyZSBpcyBubyAyLjIuMCBvciBsYXRlciB0cnkgdGhlIDEueC54IHNlcmllcy4gIFdlIHJlcXVpcmUgYXQKKyAgICBkbmwgbGVhc3QgR1RLIDEuMS4xNi4gIDEuMC42IGRvZXNuJ3Qgd29yay4gIDEuMS4xIHRvIDEuMS4xNQorICAgIGRubCB3ZXJlIHRlc3QgdmVyc2lvbnMuCisgICAgaWYgdGVzdCAieCRHVUlUWVBFIiAhPSAieEdUSyI7IHRoZW4KKyAgICAgIFNLSVBfR1RLMj1ZRVMKKyAgICAgIEFNX1BBVEhfR1RLKDEuMS4xNiwKKwkJICBbR1RLX0xJQk5BTUU9IiRHVEtfTElCUyIKKwkJICBHVUlfSU5DX0xPQz0iJEdUS19DRkxBR1MiXSwgKQorICAgICAgaWYgdGVzdCAieCRHVEtfQ0ZMQUdTIiAhPSAieCI7IHRoZW4KKwlTS0lQX0FUSEVOQT1ZRVMKKwlTS0lQX05FWFRBVz1ZRVMKKwlTS0lQX01PVElGPVlFUworCUdVSVRZUEU9R1RLCisJQUNfU1VCU1QoR1RLX0xJQk5BTUUpCisgICAgICBmaQorICAgIGZpCisgIGZpCisgIGRubCBHaXZlIGEgd2FybmluZyBpZiBHVEsgaXMgb2xkZXIgdGhhbiAxLjIuMworICBpZiB0ZXN0ICJ4JEdVSVRZUEUiID0gInhHVEsiOyB0aGVuCisgICAgaWYgdGVzdCAiJGd0a19tYWpvcl92ZXJzaW9uIiA9IDEgLWEgIjAkZ3RrX21pbm9yX3ZlcnNpb24iIC1sdCAyIFwKKwkgLW8gIiRndGtfbWFqb3JfdmVyc2lvbiIgPSAxIC1hICIkZ3RrX21pbm9yX3ZlcnNpb24iID0gMiAtYSAiMCRndGtfbWljcm9fdmVyc2lvbiIgLWx0IDM7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQodGhpcyBHVEsgdmVyc2lvbiBpcyBvbGQ7IHZlcnNpb24gMS4yLjMgb3IgbGF0ZXIgaXMgcmVjb21tZW5kZWQpCisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmIHRlc3QgIjAkZ3RrX21ham9yX3ZlcnNpb24iIC1nZSAyOyB0aGVuCisJQUNfREVGSU5FKEhBVkVfR1RLMikKKwlpZiB0ZXN0ICIkZ3RrX21pbm9yX3ZlcnNpb24iID0gMSAtYSAiMCRndGtfbWljcm9fdmVyc2lvbiIgLWdlIDEgXAorCQl8fCB0ZXN0ICIwJGd0a19taW5vcl92ZXJzaW9uIiAtZ2UgMiBcCisJCXx8IHRlc3QgIjAkZ3RrX21ham9yX3ZlcnNpb24iIC1ndCAyOyB0aGVuCisJICBBQ19ERUZJTkUoSEFWRV9HVEtfTVVMVElIRUFEKQorCWZpCisgICAgICBmaQorICAgICAgZG5sCisgICAgICBkbmwgaWYgR1RLIGV4aXN0cywgYW5kIGl0J3Mgbm90IHRoZSAxLjAueCBzZXJpZXMsIHRoZW4gY2hlY2sgZm9yIEdOT01FLgorICAgICAgZG5sCisgICAgICBpZiB0ZXN0IC16ICIkU0tJUF9HTk9NRSI7IHRoZW4KKyAgICAgIHsKKwlHTk9NRV9JTklUX0hPT0soW2hhdmVfZ25vbWU9eWVzXSkKKwlpZiB0ZXN0IHgkaGF2ZV9nbm9tZSA9IHh5ZXMgOyB0aGVuCisJICBBQ19ERUZJTkUoRkVBVF9HVUlfR05PTUUpCisJICBHVUlfSU5DX0xPQz0iJEdVSV9JTkNfTE9DICRHTk9NRV9JTkNMVURFRElSIgorCSAgR1RLX0xJQk5BTUU9IiRHVEtfTElCTkFNRSAkR05PTUVfTElCRElSICRHTk9NRV9MSUJTIgorCWZpCisgICAgICB9CisgICAgICBmaQorICAgIH0KKyAgICBmaQorICBmaQorZmkKKworZG5sIENoZWNrIGZvciBNb3RpZiBpbmNsdWRlIGZpbGVzIGxvY2F0aW9uLgorZG5sIFRoZSBMQVNUIG9uZSBmb3VuZCBpcyB1c2VkLCB0aGlzIG1ha2VzIHRoZSBoaWdoZXN0IHZlcnNpb24gdG8gYmUgdXNlZCwKK2RubCBlLmcuIHdoZW4gTW90aWYxLjIgYW5kIE1vdGlmMi4wIGFyZSBib3RoIHByZXNlbnQuCisKK2lmIHRlc3QgLXogIiRTS0lQX01PVElGIjsgdGhlbgorICBndWlfWFhYPSIvdXNyL1hYWC9Nb3RpZiogL3Vzci9Nb3RpZiovWFhYIC91c3IvWFhYIC91c3Ivc2hsaWIgL3Vzci9YMTEqL1hYWCAvdXNyL1hYWC9YMTEqIC91c3IvZHQvWFhYIC9sb2NhbC9Nb3RpZiovWFhYIC9sb2NhbC9YWFgvTW90aWYqIC91c3IvbG9jYWwvTW90aWYqL1hYWCAvdXNyL2xvY2FsL1hYWC9Nb3RpZiogL3Vzci9sb2NhbC9YWFggL3Vzci9sb2NhbC9YMTEqL1hYWCAvdXNyL2xvY2FsL0xlc3NUaWYvTW90aWYqL1hYWCAkTU9USUZIT01FL1hYWCIKKyAgZG5sIFJlbW92ZSAiLUkiIGZyb20gYmVmb3JlICRHVUlfSU5DX0xPQyBpZiBpdCdzIHRoZXJlCisgIEdVSV9JTkNfTE9DPSJgZWNobyAkR1VJX0lOQ19MT0N8c2VkICdzJS1JJSVnJ2AiCisKKyAgQUNfTVNHX0NIRUNLSU5HKGZvciBsb2NhdGlvbiBvZiBNb3RpZiBHVUkgaW5jbHVkZXMpCisgIGd1aV9pbmNsdWRlcz0iYGVjaG8gJHhfaW5jbHVkZXN8c2VkICdzJS9bXi9dW14vXSokJSUnYCBgZWNobyAiJGd1aV9YWFgiIHwgc2VkIHMvWFhYL2luY2x1ZGUvZ2AgJEdVSV9JTkNfTE9DIgorICBHVUlfSU5DX0xPQz0KKyAgZm9yIHRyeSBpbiAkZ3VpX2luY2x1ZGVzOyBkbworICAgIGlmIHRlc3QgLWYgIiR0cnkvWG0vWG0uaCI7IHRoZW4KKyAgICAgIEdVSV9JTkNfTE9DPSR0cnkKKyAgICBmaQorICBkb25lCisgIGlmIHRlc3QgLW4gIiRHVUlfSU5DX0xPQyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkR1VJX0lOQ19MT0MiID0gL3Vzci9pbmNsdWRlOyB0aGVuCisgICAgICBHVUlfSU5DX0xPQz0KKyAgICAgIEFDX01TR19SRVNVTFQoaW4gZGVmYXVsdCBwYXRoKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoJEdVSV9JTkNfTE9DKQorICAgIGZpCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKDxub3QgZm91bmQ+KQorICAgIFNLSVBfTU9USUY9WUVTCisgIGZpCitmaQorCitkbmwgQ2hlY2sgZm9yIE1vdGlmIGxpYnJhcnkgZmlsZXMgbG9jYXRpb24uICBJbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgaW5jbHVkZQorZG5sIGZpbGVzLCB0byBhdm9pZCBhIG1peHVwIGlmIHNldmVyYWwgdmVyc2lvbnMgYXJlIHByZXNlbnQKKworaWYgdGVzdCAteiAiJFNLSVBfTU9USUYiOyB0aGVuCisgIEFDX01TR19DSEVDS0lORygtLXdpdGgtbW90aWYtbGliIGFyZ3VtZW50KQorICBBQ19BUkdfV0lUSChtb3RpZi1saWIsCisgIFsgIC0td2l0aC1tb3RpZi1saWI9U1RSSU5HICAgTGlicmFyeSBmb3IgTW90aWYgXSwKKyAgWyBNT1RJRl9MSUJOQU1FPSIke3dpdGh2YWx9IiBdICkKKworICBpZiB0ZXN0IC1uICIkTU9USUZfTElCTkFNRSI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKCRNT1RJRl9MSUJOQU1FKQorICAgIEdVSV9MSUJfTE9DPQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChubykKKworICAgIGRubCBSZW1vdmUgIi1MIiBmcm9tIGJlZm9yZSAkR1VJX0xJQl9MT0MgaWYgaXQncyB0aGVyZQorICAgIEdVSV9MSUJfTE9DPSJgZWNobyAkR1VJX0xJQl9MT0N8c2VkICdzJS1MJSVnJ2AiCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxvY2F0aW9uIG9mIE1vdGlmIEdVSSBsaWJzKQorICAgIGd1aV9saWJzPSJgZWNobyAkeF9saWJyYXJpZXN8c2VkICdzJS9bXi9dW14vXSokJSUnYCBgZWNobyAiJGd1aV9YWFgiIHwgc2VkIHMvWFhYL2xpYi9nYCBgZWNobyAiJEdVSV9JTkNfTE9DIiB8IHNlZCBzL2luY2x1ZGUvbGliL2AgJEdVSV9MSUJfTE9DIgorICAgIEdVSV9MSUJfTE9DPQorICAgIGZvciB0cnkgaW4gJGd1aV9saWJzOyBkbworICAgICAgZm9yIGxpYnRyeSBpbiAiJHRyeSIvbGliWG0uYSAiJHRyeSIvbGliWG0uc28qICIkdHJ5Ii9saWJYbS5zbDsgZG8KKwlpZiB0ZXN0IC1mICIkbGlidHJ5IjsgdGhlbgorCSAgR1VJX0xJQl9MT0M9JHRyeQorCWZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIGlmIHRlc3QgLW4gIiRHVUlfTElCX0xPQyI7IHRoZW4KKyAgICAgIGRubCBSZW1vdmUgL3Vzci9saWIsIGl0IGNhdXNlcyB0cm91YmxlIG9uIHNvbWUgc3lzdGVtcworICAgICAgaWYgdGVzdCAiJEdVSV9MSUJfTE9DIiA9IC91c3IvbGliOyB0aGVuCisJR1VJX0xJQl9MT0M9CisJQUNfTVNHX1JFU1VMVChpbiBkZWZhdWx0IHBhdGgpCisgICAgICBlbHNlCisJaWYgdGVzdCAtbiAiJEdVSV9MSUJfTE9DIjsgdGhlbgorCSAgQUNfTVNHX1JFU1VMVCgkR1VJX0xJQl9MT0MpCisJICBpZiB0ZXN0ICJgKHVuYW1lKSAyPi9kZXYvbnVsbGAiID0gU3VuT1MgJiYKKwkJCQkJIHVuYW1lIC1yIHwgZ3JlcCAnXjUnID4vZGV2L251bGw7IHRoZW4KKwkgICAgR1VJX0xJQl9MT0M9IiRHVUlfTElCX0xPQyAtUiAkR1VJX0xJQl9MT0MiCisJICBmaQorCWZpCisgICAgICBmaQorICAgICAgTU9USUZfTElCTkFNRT0tbFhtCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVCg8bm90IGZvdW5kPikKKyAgICAgIFNLSVBfTU9USUY9WUVTCisgICAgZmkKKyAgZmkKK2ZpCisKK2lmIHRlc3QgLXogIiRTS0lQX01PVElGIjsgdGhlbgorICBTS0lQX0FUSEVOQT1ZRVMKKyAgU0tJUF9ORVhUQVc9WUVTCisgIEdVSVRZUEU9TU9USUYKKyAgQUNfU1VCU1QoTU9USUZfTElCTkFNRSkKK2ZpCisKK2RubCBDaGVjayBpZiB0aGUgQXRoZW5hIGZpbGVzIGNhbiBiZSBmb3VuZAorCitHVUlfWF9MSUJTPQorCitpZiB0ZXN0IC16ICIkU0tJUF9BVEhFTkEiOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhpZiBBdGhlbmEgaGVhZGVyIGZpbGVzIGNhbiBiZSBmb3VuZCkKKyAgY2ZsYWdzX3NhdmU9JENGTEFHUworICBDRkxBR1M9IiRDRkxBR1MgJFhfQ0ZMQUdTIgorICBBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9YYXcvUGFuZWQuaD5dLCAsCisJQUNfTVNHX1JFU1VMVCh5ZXMpLAorCUFDX01TR19SRVNVTFQobm8pOyBTS0lQX0FUSEVOQT1ZRVMgKQorICBDRkxBR1M9JGNmbGFnc19zYXZlCitmaQorCitpZiB0ZXN0IC16ICIkU0tJUF9BVEhFTkEiOyB0aGVuCisgIEdVSVRZUEU9QVRIRU5BCitmaQorCitpZiB0ZXN0IC16ICIkU0tJUF9ORVhUQVciOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhpZiBuZVh0YXcgaGVhZGVyIGZpbGVzIGNhbiBiZSBmb3VuZCkKKyAgY2ZsYWdzX3NhdmU9JENGTEFHUworICBDRkxBR1M9IiRDRkxBR1MgJFhfQ0ZMQUdTIgorICBBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9uZVh0YXcvUGFuZWQuaD5dLCAsCisJQUNfTVNHX1JFU1VMVCh5ZXMpLAorCUFDX01TR19SRVNVTFQobm8pOyBTS0lQX05FWFRBVz1ZRVMgKQorICBDRkxBR1M9JGNmbGFnc19zYXZlCitmaQorCitpZiB0ZXN0IC16ICIkU0tJUF9ORVhUQVciOyB0aGVuCisgIEdVSVRZUEU9TkVYVEFXCitmaQorCitpZiB0ZXN0IC16ICIkU0tJUF9BVEhFTkEiIC1vIC16ICIkU0tJUF9ORVhUQVciIC1vIC16ICIkU0tJUF9NT1RJRiI7IHRoZW4KKyAgZG5sIFByZXBlbmQgLUkgYW5kIC1MIHRvICRHVUlfSU5DX0xPQyBhbmQgJEdVSV9MSUJfTE9DIGlmIG5vdCBlbXB0eQorICBkbmwgQXZvaWQgYWRkaW5nIGl0IHdoZW4gaXQgdHdpY2UKKyAgaWYgdGVzdCAtbiAiJEdVSV9JTkNfTE9DIjsgdGhlbgorICAgIEdVSV9JTkNfTE9DPS1JImBlY2hvICRHVUlfSU5DX0xPQ3xzZWQgJ3MlLUklJSdgIgorICBmaQorICBpZiB0ZXN0IC1uICIkR1VJX0xJQl9MT0MiOyB0aGVuCisgICAgR1VJX0xJQl9MT0M9LUwiYGVjaG8gJEdVSV9MSUJfTE9DfHNlZCAncyUtTCUlJ2AiCisgIGZpCisKKyAgZG5sIENoZWNrIGZvciAtbFhleHQgYW5kIHRoZW4gZm9yIC1sWG11CisgIGxkZmxhZ3Nfc2F2ZT0kTERGTEFHUworICBMREZMQUdTPSIkWF9MSUJTICRMREZMQUdTIgorICBBQ19DSEVDS19MSUIoWGV4dCwgWFNoYXBlUXVlcnlFeHRlbnNpb24sIFtHVUlfWF9MSUJTPSItbFhleHQiXSwsCisJCVstbFh0ICRYX1BSRV9MSUJTIC1sWDExICRYX0VYVFJBX0xJQlNdKQorICBkbmwgRm9yIFNvbGFyaXMgd2UgbmVlZCAtbHcgYW5kIC1sZGwgYmVmb3JlIGxpbmtpbmcgd2l0aCAtbFhtdSB3b3Jrcy4KKyAgQUNfQ0hFQ0tfTElCKHcsIHdzbGVuLCBbWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sdyJdLCwKKwkJWyRHVUlfWF9MSUJTIC1sWHQgJFhfUFJFX0xJQlMgLWxYMTEgJFhfRVhUUkFfTElCU10pCisgIEFDX0NIRUNLX0xJQihkbCwgZGxzeW0sIFtYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxkbCJdLCwKKwkJWyRHVUlfWF9MSUJTIC1sWHQgJFhfUFJFX0xJQlMgLWxYMTEgJFhfRVhUUkFfTElCU10pCisgIEFDX0NIRUNLX0xJQihYbXUsIFhtdUNyZWF0ZVN0aXBwbGVkUGl4bWFwLCBbR1VJX1hfTElCUz0iLWxYbXUgJEdVSV9YX0xJQlMiXSwsCisJCVskR1VJX1hfTElCUyAtbFh0ICRYX1BSRV9MSUJTIC1sWDExICRYX0VYVFJBX0xJQlNdKQorICBpZiB0ZXN0IC16ICIkU0tJUF9NT1RJRiI7IHRoZW4KKyAgICBBQ19DSEVDS19MSUIoWHAsIFhwRW5kSm9iLCBbR1VJX1hfTElCUz0iLWxYcCAkR1VJX1hfTElCUyJdLCwKKwkJWyRHVUlfWF9MSUJTIC1sWG0gLWxYdCAkWF9QUkVfTElCUyAtbFgxMSAkWF9FWFRSQV9MSUJTXSkKKyAgZmkKKyAgTERGTEFHUz0kbGRmbGFnc19zYXZlCisKKyAgZG5sIEV4ZWN1dGUgeG1rbWYgdG8gZmlndXJlIG91dCBpZiAtRE5BUlJPV1BST1RPIGlzIG5lZWRlZC4KKyAgQUNfTVNHX0NIRUNLSU5HKGZvciBleHRyYSBYMTEgZGVmaW5lcykKKyAgTkFSUk9XX1BST1RPPQorICBybSAtZnIgY29uZnRlc3RkaXIKKyAgaWYgbWtkaXIgY29uZnRlc3RkaXI7IHRoZW4KKyAgICBjZCBjb25mdGVzdGRpcgorICAgIGNhdCA+IEltYWtlZmlsZSA8PCdFT0YnCithY2ZpbmR4OgorCUBlY2hvICdOQVJST1dfUFJPVE89IiR7UFJPVE9fREVGSU5FU30iJworRU9GCisgICAgaWYgKHhta21mKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsICYmIHRlc3QgLWYgTWFrZWZpbGU7IHRoZW4KKyAgICAgIGV2YWwgYCR7TUFLRS1tYWtlfSBhY2ZpbmR4IDI+L2Rldi9udWxsIHwgZ3JlcCAtdiBtYWtlYAorICAgIGZpCisgICAgY2QgLi4KKyAgICBybSAtZnIgY29uZnRlc3RkaXIKKyAgZmkKKyAgaWYgdGVzdCAteiAiJE5BUlJPV19QUk9UTyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKG5vKQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVCgkTkFSUk9XX1BST1RPKQorICBmaQorICBBQ19TVUJTVChOQVJST1dfUFJPVE8pCitmaQorCitkbmwgTG9vayBmb3IgWFNNUCBzdXBwb3J0IC0gYnV0IGRvbid0IG5lY2Vzc2FyaWx5IHJlc3RyaWN0IGl0IHRvIFgxMSBHVUlzCitkbmwgdXNlIHRoZSBYMTEgaW5jbHVkZSBwYXRoCitpZiB0ZXN0ICIkZW5hYmxlX3hzbXAiID0gInllcyI7IHRoZW4KKyAgY3BwZmxhZ3Nfc2F2ZT0kQ1BQRkxBR1MKKyAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkWF9DRkxBR1MiCisgIEFDX0NIRUNLX0hFQURFUlMoWDExL1NNL1NNbGliLmgpCisgIENQUEZMQUdTPSRjcHBmbGFnc19zYXZlCitmaQorCisKK2lmIHRlc3QgLXogIiRTS0lQX0FUSEVOQSIgLW8gLXogIiRTS0lQX05FWFRBVyIgLW8gLXogIiRTS0lQX01PVElGIiAtbyAteiAiJFNLSVBfR1RLIjsgdGhlbgorICBkbmwgQ2hlY2sgZm9yIFgxMS94cG0uaCBhbmQgWDExL1N1bmtleXN5bS5oIHdpdGggdGhlIEdVSSBpbmNsdWRlIHBhdGgKKyAgY3BwZmxhZ3Nfc2F2ZT0kQ1BQRkxBR1MKKyAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkWF9DRkxBR1MiCisgIEFDX0NIRUNLX0hFQURFUlMoWDExL3hwbS5oIFgxMS9TdW5rZXlzeW0uaCkKKworICBkbmwgYXV0b21hdGljYWxseSBkaXNhYmxlIFhJTSB3aGVuIFhJTXRleHQgaXNuJ3QgaW4gWDExL1hsaWIuaAorICBpZiB0ZXN0ICEgIiRlbmFibGVfeGltIiA9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFhJTVRleHQgaW4gWDExL1hsaWIuaCkKKyAgICBBQ19FR1JFUF9DUFAoWElNVGV4dCwgWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0sCisJCSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAorCQkgIEFDX01TR19SRVNVTFQobm87IHhpbSBoYXMgYmVlbiBkaXNhYmxlZCk7IGVuYWJsZV94aW0gPSAibm8iKQorICBmaQorICBDUFBGTEFHUz0kY3BwZmxhZ3Nfc2F2ZQorCisgIGRubCBhdXRvbWF0aWNhbGx5IGVuYWJsZSBYSU0gd2hlbiBoYW5ndWwgaW5wdXQgaXNuJ3QgZW5hYmxlZAorICBpZiB0ZXN0ICIkZW5hYmxlX3hpbSIgPSAiYXV0byIgLWEgIiRlbmFibGVfaGFuZ3VsaW5wdXQiICE9ICJ5ZXMiIFwKKwkJLWEgIngkR1VJVFlQRSIgIT0gInhOT05FIiA7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFggR1VJIHNlbGVjdGVkOyB4aW0gaGFzIGJlZW4gZW5hYmxlZCkKKyAgICBlbmFibGVfeGltPSJ5ZXMiCisgIGZpCitmaQorCitpZiB0ZXN0IC16ICIkU0tJUF9BVEhFTkEiIC1vIC16ICIkU0tJUF9ORVhUQVciIC1vIC16ICIkU0tJUF9NT1RJRiI7IHRoZW4KKyAgY3BwZmxhZ3Nfc2F2ZT0kQ1BQRkxBR1MKKyAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkWF9DRkxBR1MiCisgIEFDX0NIRUNLX0hFQURFUlMoWDExL1htdS9FZGl0cmVzLmgpCisgIENQUEZMQUdTPSRjcHBmbGFnc19zYXZlCitmaQorCitkbmwgT25seSB1c2UgdGhlIFhtIGRpcmVjdG9yeSB3aGVuIGNvbXBpbGluZyBNb3RpZiwgZG9uJ3QgdXNlIGl0IGZvciBBdGhlbmEKK2lmIHRlc3QgLXogIiRTS0lQX01PVElGIjsgdGhlbgorICBjcHBmbGFnc19zYXZlPSRDUFBGTEFHUworICBDUFBGTEFHUz0iJENQUEZMQUdTICRYX0NGTEFHUyIKKyAgQUNfQ0hFQ0tfSEVBREVSUyhYbS9YbS5oIFhtL1hwbVAuaCkKKyAgQ1BQRkxBR1M9JGNwcGZsYWdzX3NhdmUKK2ZpCisKK2lmIHRlc3QgIngkR1VJVFlQRSIgPSAieE5PTkUiIC1hICIkZW5hYmxlX3hpbSIgPSAieWVzIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKG5vIEdVSSBzZWxlY3RlZDsgeGltIGhhcyBiZWVuIGRpc2FibGVkKQorICBlbmFibGVfeGltPSJubyIKK2ZpCitpZiB0ZXN0ICJ4JEdVSVRZUEUiID0gInhOT05FIiAtYSAiJGVuYWJsZV9mb250c2V0IiA9ICJ5ZXMiOyB0aGVuCisgIEFDX01TR19SRVNVTFQobm8gR1VJIHNlbGVjdGVkOyBmb250c2V0IGhhcyBiZWVuIGRpc2FibGVkKQorICBlbmFibGVfZm9udHNldD0ibm8iCitmaQoraWYgdGVzdCAieCRHVUlUWVBFOiRlbmFibGVfZm9udHNldCIgPSAieEdUSzp5ZXMiIC1hICIwJGd0a19tYWpvcl92ZXJzaW9uIiAtZ2UgMjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKEdUSysgMiBHVUkgc2VsZWN0ZWQ7IGZvbnRzZXQgaGFzIGJlZW4gZGlzYWJsZWQpCisgIGVuYWJsZV9mb250c2V0PSJubyIKK2ZpCisKK2RubCBUaGVyZSBpcyBubyB0ZXN0IGZvciB0aGUgQmVPUyBHVUksIGlmIGl0J3Mgc2VsZWN0ZWQgaXQncyB1c2VkCitpZiB0ZXN0IC16ICIkU0tJUF9CRU9TIjsgdGhlbgorICBHVUlUWVBFPUJFT1NHVUkKK2ZpCisKK2lmIHRlc3QgLXogIiRTS0lQX1BIT1RPTiI7IHRoZW4KKyAgR1VJVFlQRT1QSE9UT05HVUkKK2ZpCisKK0FDX1NVQlNUKEdVSV9JTkNfTE9DKQorQUNfU1VCU1QoR1VJX0xJQl9MT0MpCitBQ19TVUJTVChHVUlUWVBFKQorQUNfU1VCU1QoR1VJX1hfTElCUykKKworaWYgdGVzdCAiJGVuYWJsZV93b3Jrc2hvcCIgPSAieWVzIiAtYSAtbiAiJFNLSVBfTU9USUYiOyB0aGVuCisgIEFDX01TR19FUlJPUihbY2Fubm90IHVzZSB3b3Jrc2hvcCB3aXRob3V0IE1vdGlmXSkKK2ZpCisKK2RubCBkZWZpbmluZyBGRUFUX1hJTSBhbmQgRkVBVF9YRk9OVFNFVCBpcyBkZWxheWVkLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGRpc2FibGVkCitpZiB0ZXN0ICIkZW5hYmxlX3hpbSIgPSAieWVzIjsgdGhlbgorICBBQ19ERUZJTkUoRkVBVF9YSU0pCitmaQoraWYgdGVzdCAiJGVuYWJsZV9mb250c2V0IiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0RFRklORShGRUFUX1hGT05UU0VUKQorZmkKKworCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgZW5kIG9mIEdVSS1jaGVja2luZworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK2RubCBPbmx5IHJlYWxseSBlbmFibGUgaGFuZ3VsIGlucHV0IHdoZW4gR1VJIGFuZCBYRk9OVFNFVCBhcmUgYXZhaWxhYmxlCitpZiB0ZXN0ICIkZW5hYmxlX2hhbmd1bGlucHV0IiA9ICJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgIngkR1VJVFlQRSIgPSAieE5PTkUiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChubyBHVUkgc2VsZWN0ZWQ7IGhhbmd1bCBpbnB1dCBoYXMgYmVlbiBkaXNhYmxlZCkKKyAgICBlbmFibGVfaGFuZ3VsaW5wdXQ9bm8KKyAgZWxzZQorICAgIEFDX0RFRklORShGRUFUX0hBTkdVTElOKQorICAgIEhBTkdVTElOX1NSQz1oYW5ndWxpbi5jCisgICAgQUNfU1VCU1QoSEFOR1VMSU5fU1JDKQorICAgIEhBTkdVTElOX09CSj1vYmplY3RzL2hhbmd1bGluLm8KKyAgICBBQ19TVUJTVChIQU5HVUxJTl9PQkopCisgIGZpCitmaQorCitkbmwgQ2hlY2tzIGZvciBsaWJyYXJpZXMgYW5kIGluY2x1ZGUgZmlsZXMuCisKK0FDX01TR19DSEVDS0lORyhxdWFsaXR5IG9mIHRvdXBwZXIpCitBQ19UUllfUlVOKFsjaW5jbHVkZSA8Y3R5cGUuaD4KK21haW4oKSB7IGV4aXQodG91cHBlcignQScpID09ICdBJyAmJiB0b2xvd2VyKCd6JykgPT0gJ3onKTsgfV0sCisJQUNfREVGSU5FKEJST0tFTl9UT1VQUEVSKSBBQ19NU0dfUkVTVUxUKGJhZCksCisJQUNfTVNHX1JFU1VMVChnb29kKSwgQUNfTVNHX0VSUk9SKGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbSkpCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIF9fREFURV9fIGFuZCBfX1RJTUVfXyB3b3JrKQorQUNfVFJZX0NPTVBJTEUoLCBbcHJpbnRmKCIoIiBfX0RBVEVfXyAiICIgX19USU1FX18gIikiKTtdLAorCUFDX01TR19SRVNVTFQoeWVzKTsgQUNfREVGSU5FKEhBVkVfREFURV9USU1FKSwKKwlBQ19NU0dfUkVTVUxUKG5vKSkKKworZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorQUNfQ0hFQ0tfSEVBREVSKGVsZi5oLCBIQVNfRUxGPTEpCitkbmwgQUNfQ0hFQ0tfSEVBREVSKGR3YXJmLmgsIFNWUjQ9MSkKK2lmIHRlc3QgIiRIQVNfRUxGIiA9IDE7IHRoZW4KKyAgQUNfQ0hFQ0tfTElCKGVsZiwgbWFpbikKK2ZpCisKK0FDX0hFQURFUl9ESVJFTlQKKworZG5sIGNoZWNrIGZvciBzdGFuZGFyZCBoZWFkZXJzLCB3ZSBkb24ndCB1c2UgdGhpcyBpbiBWaW0gYnV0IG90aGVyIHN0dWZmCitkbmwgaW4gYXV0b2NvbmYgbmVlZHMgaXQKK0FDX0hFQURFUl9TVERDCitBQ19IRUFERVJfU1lTX1dBSVQKKworZG5sIElmIHN5cy93YWl0LmggaXMgbm90IGZvdW5kIGl0IG1pZ2h0IHN0aWxsIGV4aXN0IGJ1dCBub3QgYmUgUE9TSVgKK2RubCBjb21wbGlhbnQuIEluIHRoYXQgY2FzZSB3ZSBkZWZpbmUgSEFWRV9VTklPTl9XQUlUIChmb3IgTmVYVCkKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oID0gbm87IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzL3dhaXQuaCB0aGF0IGRlZmluZXMgdW5pb24gd2FpdF0pCisgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3dhaXQuaD5dLAorCQkJW3VuaW9uIHdhaXQgeHgsIHl5OyB4eCA9IHl5XSwKKwkJQUNfTVNHX1JFU1VMVCh5ZXMpCisJCQlBQ19ERUZJTkUoSEFWRV9TWVNfV0FJVF9IKQorCQkJQUNfREVGSU5FKEhBVkVfVU5JT05fV0FJVCksCisJCUFDX01TR19SRVNVTFQobm8pKQorZmkKKworQUNfQ0hFQ0tfSEVBREVSUyhzdGRhcmcuaCBzdGRsaWIuaCBzdHJpbmcuaCBzeXMvc2VsZWN0Lmggc3lzL3V0c25hbWUuaCBcCisJdGVybWNhcC5oIGZjbnRsLmggc2d0dHkuaCBzeXMvaW9jdGwuaCBzeXMvdGltZS5oIHRlcm1pby5oIFwKKwlpY29udi5oIGxhbmdpbmZvLmggdW5pc3RkLmggc3Ryb3B0cy5oIGVycm5vLmggXAorCXN5cy9yZXNvdXJjZS5oIHN5cy9zeXN0ZW1pbmZvLmggbG9jYWxlLmggXAorCXN5cy9zdHJlYW0uaCBzeXMvcHRlbS5oIHRlcm1pb3MuaCBsaWJjLmggc3lzL3N0YXRmcy5oIFwKKwlwb2xsLmggc3lzL3BvbGwuaCBwd2QuaCB1dGltZS5oIHN5cy9wYXJhbS5oIGxpYmludGwuaCBcCisJbGliZ2VuLmggdXRpbC9kZWJ1Zy5oIHV0aWwvbXNnMThuLmggZnJhbWUuaCBwdGhyZWFkX25wLmggXAorCXN5cy9hY2wuaCBzeXMvYWNjZXNzLmggc3lzL3N5c2N0bC5oIHN5cy9zeXNpbmZvLmggd2NoYXIuaCkKKworZG5sIE9uIE1hYyBPUyBYIHN0cmluZ3MuaCBleGlzdHMgYnV0IHByb2R1Y2VzIGEgd2FybmluZyBtZXNzYWdlIDotKAoraWYgdGVzdCAieCRNQUNPU1giICE9ICJ4eWVzIjsgdGhlbgorICBBQ19DSEVDS19IRUFERVJTKHN0cmluZ3MuaCkKK2ZpCisKK2RubCBDaGVjayBpZiBzdHJpbmdzLmggYW5kIHN0cmluZy5oIGNhbiBib3RoIGJlIGluY2x1ZGVkIHdoZW4gZGVmaW5lZC4KK0FDX01TR19DSEVDS0lORyhbaWYgc3RyaW5ncy5oIGNhbiBiZSBpbmNsdWRlZCBhZnRlciBzdHJpbmcuaF0pCitjcHBmbGFnc19zYXZlPSRDUFBGTEFHUworQ1BQRkxBR1M9IiRDUFBGTEFHUyAkWF9DRkxBR1MiCitBQ19UUllfQ09NUElMRShbCisjaWYgZGVmaW5lZChfQUlYKSAmJiAhZGVmaW5lZChfQUlYNTEpICYmICFkZWZpbmVkKF9OT19QUk9UTykKKyMgZGVmaW5lIF9OT19QUk9UTwkvKiBsaWtlIGluIG9zX3VuaXguaCwgY2F1c2VzIGNvbmZsaWN0IGZvciBBSVggKFdpbm4pICovCisJCQkvKiBidXQgZG9uJ3QgZG8gaXQgb24gQUlYIDUuMSAoVXJpYmFycmkpICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX1hNX1hNX0gKKyMgaW5jbHVkZSA8WG0vWG0uaD4JLyogVGhpcyBicmVha3MgaXQgZm9yIEhQLVVYIDExIChTcXVhc3NhYmlhKSAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9TVFJJTkdTX0gpCisjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCQldLCBbaW50IGk7IGkgPSAwO10sCisJCUFDX01TR19SRVNVTFQoeWVzKSwKKwkJQUNfREVGSU5FKE5PX1NUUklOR1NfV0lUSF9TVFJJTkdfSCkKKwkJQUNfTVNHX1JFU1VMVChubykpCitDUFBGTEFHUz0kY3BwZmxhZ3Nfc2F2ZQorCitkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KK0FDX1BST0dfR0NDX1RSQURJVElPTkFMCitBQ19DX0NPTlNUCitBQ19UWVBFX01PREVfVAorQUNfVFlQRV9PRkZfVAorQUNfVFlQRV9QSURfVAorQUNfVFlQRV9TSVpFX1QKK0FDX1RZUEVfVUlEX1QKK0FDX0hFQURFUl9USU1FCitBQ19DSEVDS19UWVBFKGlub190LCBsb25nKQorQUNfQ0hFQ0tfVFlQRShkZXZfdCwgdW5zaWduZWQpCisKK0FDX01TR19DSEVDS0lORyhmb3IgcmxpbV90KQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfcmxpbV90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChbKGNhY2hlZCkgJGFjX2N2X3R5cGVfcmxpbV90XSkKK2Vsc2UKKyAgQUNfRUdSRVBfQ1BQKGRubAorY2hhbmdlcXVvdGUoPDwsPj4pZG5sCis8PChefFteYS16QS1aXzAtOV0pcmxpbV90W15hLXpBLVpfMC05XT4+ZG5sCitjaGFuZ2VxdW90ZShbLF0pLAorICBbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19SRVNPVVJDRV9ICisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjZW5kaWYKKwkgIF0sIGFjX2N2X3R5cGVfcmxpbV90PXllcywgYWNfY3ZfdHlwZV9ybGltX3Q9bm8pCisJICBBQ19NU0dfUkVTVUxUKCRhY19jdl90eXBlX3JsaW1fdCkKK2ZpCitpZiB0ZXN0ICRhY19jdl90eXBlX3JsaW1fdCA9IG5vOyB0aGVuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBybGltX3QgdW5zaWduZWQgbG9uZworRU9GCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHN0YWNrX3QpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9zdGFja190JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChbKGNhY2hlZCkgJGFjX2N2X3R5cGVfc3RhY2tfdF0pCitlbHNlCisgIEFDX0VHUkVQX0NQUChzdGFja190LAorICBbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKwkgIF0sIGFjX2N2X3R5cGVfc3RhY2tfdD15ZXMsIGFjX2N2X3R5cGVfc3RhY2tfdD1ubykKKwkgIEFDX01TR19SRVNVTFQoJGFjX2N2X3R5cGVfc3RhY2tfdCkKK2ZpCitpZiB0ZXN0ICRhY19jdl90eXBlX3N0YWNrX3QgPSBubzsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgc3RhY2tfdCBzdHJ1Y3Qgc2lnYWx0c3RhY2sKK0VPRgorZmkKKworZG5sIEJTREkgdXNlcyBzc19iYXNlIHdoaWxlIG90aGVycyB1c2Ugc3Nfc3AgZm9yIHRoZSBzdGFjayBwb2ludGVyLgorQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgc3RhY2tfdCBoYXMgYW4gc3NfYmFzZSBmaWVsZCkKK0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBTVERDX0hFQURFUlMKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisJCQldLCBbc3RhY2tfdCBzaWdzdGs7IHNpZ3N0ay5zc19iYXNlID0gMDsgXSwKKwlBQ19NU0dfUkVTVUxUKHllcyk7IEFDX0RFRklORShIQVZFX1NTX0JBU0UpLAorCUFDX01TR19SRVNVTFQobm8pKQorCitvbGlicz0iJExJQlMiCitBQ19NU0dfQ0hFQ0tJTkcoLS13aXRoLXRsaWIgYXJndW1lbnQpCitBQ19BUkdfV0lUSCh0bGliLCBbICAtLXdpdGgtdGxpYj1saWJyYXJ5ICAgICB0ZXJtaW5hbCBsaWJyYXJ5IHRvIGJlIHVzZWQgXSwpCitpZiB0ZXN0IC1uICIkd2l0aF90bGliIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCR3aXRoX3RsaWIpCisgIExJQlM9IiRMSUJTIC1sJHdpdGhfdGxpYiIKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChbYXV0b21hdGljIHRlcm1pbmFsIGxpYnJhcnkgc2VsZWN0aW9uXSkKKyAgZG5sICBPbiBIUC1VWCAxMC4xMCB0ZXJtY2FwIG9yIHRlcm1saWIgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZgorICBkbmwgIGN1cnNlcywgYmVjYXVzZSBjdXJzZXMgaXMgbXVjaCBzbG93ZXIuCisgIGRubCAgTmV3ZXIgdmVyc2lvbnMgb2YgbmN1cnNlcyBhcmUgcHJlZmVycmVkIG92ZXIgYW55dGhpbmcuCisgIGRubCAgT2xkZXIgdmVyc2lvbnMgb2YgbmN1cnNlcyBoYXZlIGJ1Z3MsIGdldCBhIG5ldyBvbmUhCisgIGRubCAgRGlnaXRhbCBVbml4IChPU0YxKSBzaG91bGQgdXNlIGN1cnNlcyAoUm9uYWxkIFNjaGlsZCkuCisgIGNhc2UgImB1bmFtZSAtcyAyPi9kZXYvbnVsbGAiIGluCisJT1NGMSkJdGxpYnM9Im5jdXJzZXMgY3Vyc2VzIHRlcm1saWIgdGVybWNhcCI7OworCSopCXRsaWJzPSJuY3Vyc2VzIHRlcm1saWIgdGVybWNhcCBjdXJzZXMiOzsKKyAgZXNhYworICBmb3IgbGlibmFtZSBpbiAkdGxpYnM7IGRvCisgICAgQUNfQ0hFQ0tfTElCKCR7bGlibmFtZX0sIHRnZXRlbnQsLCkKKyAgICBpZiB0ZXN0ICJ4JG9saWJzIiAhPSAieCRMSUJTIjsgdGhlbgorICAgICAgZG5sIEl0J3MgcG9zc2libGUgdGhhdCBhIGxpYnJhcnkgaXMgZm91bmQgYnV0IGl0IGRvZXNuJ3Qgd29yaworICAgICAgZG5sIGUuZy4sIHNoYXJlZCBsaWJyYXJ5IHRoYXQgY2Fubm90IGJlIGZvdW5kCisgICAgICBkbmwgY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBwcm9ncmFtIHRvIGJlIHN1cmUKKyAgICAgIEFDX1RSWV9SVU4oWworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorbWFpbigpIHtjaGFyICpzOyBzPShjaGFyICopdGdvdG8oIiVwMSVkIiwgMCwgMSk7IGV4aXQoMCk7IH1dLAorCQkJICByZXM9Ik9LIiwgcmVzPSJGQUlMIiwgcmVzPSJGQUlMIikKKyAgICAgIGlmIHRlc3QgIiRyZXMiID0gIk9LIjsgdGhlbgorCWJyZWFrCisgICAgICBmaQorICAgICAgQUNfTVNHX1JFU1VMVCgkbGlibmFtZSBsaWJyYXJ5IGlzIG5vdCB1c2FibGUpCisgICAgICBMSUJTPSIkb2xpYnMiCisgICAgZmkKKyAgZG9uZQorZmkKK2lmIHRlc3QgIngkb2xpYnMiICE9ICJ4JExJQlMiOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHdlIHRhbGsgdGVybWluZm8pCisgIEFDX1RSWV9SVU4oWworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorbWFpbigpCit7Y2hhciAqczsgcz0oY2hhciAqKXRnb3RvKCIlcDElZCIsIDAsIDEpOyBleGl0KCFzdHJjbXAocz09MCA/ICIiIDogcywgIjEiKSk7IH1dLAorCSAgQUNfTVNHX1JFU1VMVChbbm8gLS0gd2UgYXJlIGluIHRlcm1jYXAgbGFuZF0pLAorCSAgQUNfTVNHX1JFU1VMVChbeWVzIC0tIHRlcm1pbmZvIHNwb2tlbiBoZXJlXSk7IEFDX0RFRklORShURVJNSU5GTyksCisJICBBQ19NU0dfRVJST1IoZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtLikpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm9uZSBmb3VuZCkKK2ZpCisKK2lmIHRlc3QgIngkb2xpYnMiICE9ICJ4JExJQlMiOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyh3aGF0IHRnZXRlbnQoKSByZXR1cm5zIGZvciBhbiB1bmtub3duIHRlcm1pbmFsKQorICBBQ19UUllfUlVOKFsKKyNpZmRlZiBIQVZFX1RFUk1DQVBfSAorIyBpbmNsdWRlIDx0ZXJtY2FwLmg+CisjZW5kaWYKK21haW4oKQore2NoYXIgc1sxMDAwMF07IGludCByZXMgPSB0Z2V0ZW50KHMsICJ0aGlzdGVybWluYWxkb2Vzbm90ZXhpc3QiKTsgZXhpdChyZXMgIT0gMCk7IH1dLAorCSAgQUNfTVNHX1JFU1VMVCh6ZXJvKTsgQUNfREVGSU5FKFRHRVRFTlRfWkVST19FUlIsIDApLAorCSAgQUNfTVNHX1JFU1VMVChub24temVybyksCisJICBBQ19NU0dfRVJST1IoZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtLikpCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB0ZXJtY2FwLmggY29udGFpbnMgb3NwZWVkKQorQUNfVFJZX0xJTksoWworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorCQkJXSwgW29zcGVlZCA9IDIwMDAwXSwKKwlBQ19NU0dfUkVTVUxUKHllcyk7IEFDX0RFRklORShIQVZFX09TUEVFRCksCisJW0FDX01TR19SRVNVTFQobm8pCisJQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgb3NwZWVkIGNhbiBiZSBleHRlcm4pCisJQUNfVFJZX0xJTksoWworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorZXh0ZXJuIHNob3J0IG9zcGVlZDsKKwkJCV0sIFtvc3BlZWQgPSAyMDAwMF0sCisJCUFDX01TR19SRVNVTFQoeWVzKTsgQUNfREVGSU5FKE9TUEVFRF9FWFRFUk4pLAorCQlBQ19NU0dfUkVTVUxUKG5vKSldCisJKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGVybWNhcC5oIGNvbnRhaW5zIFVQLCBCQyBhbmQgUENdKQorQUNfVFJZX0xJTksoWworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorCQkJXSwgW2lmIChVUCA9PSAwICYmIEJDID09IDApIFBDID0gMV0sCisJQUNfTVNHX1JFU1VMVCh5ZXMpOyBBQ19ERUZJTkUoSEFWRV9VUF9CQ19QQyksCisJW0FDX01TR19SRVNVTFQobm8pCisJQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIFVQLCBCQyBhbmQgUEMgY2FuIGJlIGV4dGVybl0pCisJQUNfVFJZX0xJTksoWworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorZXh0ZXJuIGNoYXIgKlVQLCAqQkMsIFBDOworCQkJXSwgW2lmIChVUCA9PSAwICYmIEJDID09IDApIFBDID0gMV0sCisJCUFDX01TR19SRVNVTFQoeWVzKTsgQUNfREVGSU5FKFVQX0JDX1BDX0VYVEVSTiksCisJCUFDX01TR19SRVNVTFQobm8pKV0KKwkpCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHRwdXRzKCkgdXNlcyBvdXRmdW50eXBlKQorQUNfVFJZX0NPTVBJTEUoWworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZgorCQkJXSwgW2V4dGVybiBpbnQgeHgoKTsgdHB1dHMoInRlc3QiLCAxLCAob3V0ZnVudHlwZSl4eCldLAorCUFDX01TR19SRVNVTFQoeWVzKTsgQUNfREVGSU5FKEhBVkVfT1VURlVOVFlQRSksCisJQUNfTVNHX1JFU1VMVChubykpCisKK2RubCBPbiBzb21lIFNDTyBtYWNoaW5lcyBzeXMvc2VsZWN0IHJlZGVmaW5lcyBzdHJ1Y3QgdGltZXZhbAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN5cy9zZWxlY3QuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZF0pCitBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+XSwgLAorCSAgQUNfTVNHX1JFU1VMVCh5ZXMpCisJCQlBQ19ERUZJTkUoU1lTX1NFTEVDVF9XSVRIX1NZU19USU1FKSwKKwkgIEFDX01TR19SRVNVTFQobm8pKQorCitkbmwgQUNfREVDTF9TWVNfU0lHTElTVAorCitkbmwgQ2hlY2tzIGZvciBwdHkuYyAoY29waWVkIGZyb20gc2NyZWVuKSA9PT09PT09PT09PT09PT09PT09PT09PT09PQorQUNfTVNHX0NIRUNLSU5HKGZvciAvZGV2L3B0YykKK2lmIHRlc3QgLXIgL2Rldi9wdGM7IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfREVWX1BUQykKKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIFNWUjQgcHR5cykKK2lmIHRlc3QgLWMgL2Rldi9wdG14IDsgdGhlbgorICBBQ19UUllfTElOSyhbXSwgW3B0c25hbWUoMCk7Z3JhbnRwdCgwKTt1bmxvY2twdCgwKTtdLAorCUFDX01TR19SRVNVTFQoeWVzKTsgQUNfREVGSU5FKEhBVkVfU1ZSNF9QVFlTKSwKKwlBQ19NU0dfUkVTVUxUKG5vKSkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK0FDX01TR19DSEVDS0lORyhmb3IgcHR5cmFuZ2VzKQoraWYgdGVzdCAtZCAvZGV2L3B0eW0gOyB0aGVuCisgIHBkaXI9Jy9kZXYvcHR5bScKK2Vsc2UKKyAgcGRpcj0nL2RldicKK2ZpCitkbmwgU0NPIHVzZXMgcHR5cCVkCitBQ19FR1JFUF9DUFAoeWVzLAorWyNpZmRlZiBNX1VOSVgKKyAgIHllczsKKyNlbmRpZgorCV0sIHB0eXM9YGVjaG8gL2Rldi9wdHlwPz9gLCBwdHlzPWBlY2hvICRwZGlyL3B0eT8/YCkKK2RubCBpZiB0ZXN0IC1jIC9kZXYvcHR5cDE5OyB0aGVuCitkbmwgcHR5cz1gZWNobyAvZGV2L3B0eXA/P2AKK2RubCBlbHNlCitkbmwgcHR5cz1gZWNobyAkcGRpci9wdHk/P2AKK2RubCBmaQoraWYgdGVzdCAiJHB0eXMiICE9ICIkcGRpci9wdHk/PyIgOyB0aGVuCisgIHAwPWBlY2hvICRwdHlzIHwgdHIgJyAnICdcMDEyJyB8IHNlZCAtZSAncy9eLipcKC5cKS4kL1wxL2cnIHwgc29ydCAtdSB8IHRyIC1kICdcMDEyJ2AKKyAgcDE9YGVjaG8gJHB0eXMgfCB0ciAnICcgJ1wwMTInIHwgc2VkIC1lICdzL14uKlwoLlwpJC9cMS9nJyAgfCBzb3J0IC11IHwgdHIgLWQgJ1wwMTInYAorICBBQ19ERUZJTkVfVU5RVU9URUQoUFRZUkFOR0UwLCIkcDAiKQorICBBQ19ERUZJTkVfVU5RVU9URUQoUFRZUkFOR0UxLCIkcDEiKQorICBBQ19NU0dfUkVTVUxUKFskcDAgLyAkcDFdKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKFtkb24ndCBrbm93XSkKK2ZpCisKK2RubCAgICAqKioqICBwdHkgbW9kZS9ncm91cCBoYW5kbGluZyAqKioqCitkbmwKK2RubCBzdXBwb3J0IHByb3ZpZGVkIGJ5IEx1a2UgTWV3YnVybiA8bG1Acm1pdC5lZHUuYXU+LCA5MzEyMjIKK0FDX01TR19DSEVDS0lORyhkZWZhdWx0IHR0eSBwZXJtaXNzaW9ucy9ncm91cCkKK3JtIC1mIGNvbmZ0ZXN0X2dycAorQUNfVFJZX1JVTihbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorbWFpbigpCit7CisgIHN0cnVjdCBzdGF0IHNiOworICBjaGFyICp4LCp0dHluYW1lKCk7CisgIGludCBvbSwgbTsKKyAgRklMRSAqZnA7CisKKyAgaWYgKCEoeCA9IHR0eW5hbWUoMCkpKSBleGl0KDEpOworICBpZiAoc3RhdCh4LCAmc2IpKSBleGl0KDEpOworICBvbSA9IHNiLnN0X21vZGU7CisgIGlmIChvbSAmIDAwMikgZXhpdCgwKTsKKyAgbSA9IHN5c3RlbSgibWVzZyB5Iik7CisgIGlmIChtID09IC0xIHx8IG0gPT0gMTI3KSBleGl0KDEpOworICBpZiAoc3RhdCh4LCAmc2IpKSBleGl0KDEpOworICBtID0gc2Iuc3RfbW9kZTsKKyAgaWYgKGNobW9kKHgsIG9tKSkgZXhpdCgxKTsKKyAgaWYgKG0gJiAwMDIpIGV4aXQoMCk7CisgIGlmIChzYi5zdF9naWQgPT0gZ2V0Z2lkKCkpIGV4aXQoMSk7CisgIGlmICghKGZwPWZvcGVuKCJjb25mdGVzdF9ncnAiLCAidyIpKSkKKyAgICBleGl0KDEpOworICBmcHJpbnRmKGZwLCAiJWRcbiIsIHNiLnN0X2dpZCk7CisgIGZjbG9zZShmcCk7CisgIGV4aXQoMCk7Cit9CitdLFsKKyAgICBpZiB0ZXN0IC1mIGNvbmZ0ZXN0X2dycDsgdGhlbgorCXB0eWdycD1gY2F0IGNvbmZ0ZXN0X2dycGAKKwlBQ19NU0dfUkVTVUxUKFtwdHkgbW9kZTogMDYyMCwgZ3JvdXA6ICRwdHlncnBdKQorCUFDX0RFRklORShQVFlNT0RFLCAwNjIwKQorCUFDX0RFRklORV9VTlFVT1RFRChQVFlHUk9VUCwkcHR5Z3JwKQorICAgIGVsc2UKKwlBQ19NU0dfUkVTVUxUKFtwdHlzIGFyZSB3b3JsZCBhY2Nlc3NhYmxlXSkKKyAgICBmaQorXSwKKyAgICBBQ19NU0dfUkVTVUxUKFtjYW4ndCBkZXRlcm1pbmUgLSBhc3N1bWUgcHR5cyBhcmUgd29ybGQgYWNjZXNzYWJsZV0pLAorICAgIEFDX01TR19FUlJPUihmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0pKQorcm0gLWYgY29uZnRlc3RfZ3JwCisKK2RubCBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBQ19UWVBFX1NJR05BTAorCitkbmwgZmluZCBvdXQgd2hhdCB0byB1c2UgYXQgdGhlIGVuZCBvZiBhIHNpZ25hbCBmdW5jdGlvbgoraWYgdGVzdCAkYWNfY3ZfdHlwZV9zaWduYWwgPSB2b2lkOyB0aGVuCisgIEFDX0RFRklORShTSUdSRVRVUk4sIFtyZXR1cm5dKQorZWxzZQorICBBQ19ERUZJTkUoU0lHUkVUVVJOLCBbcmV0dXJuIDBdKQorZmkKKworZG5sIGNoZWNrIGlmIHN0cnVjdCBzaWdjb250ZXh0IGlzIGRlZmluZWQgKHVzZWQgZm9yIFNHSSBvbmx5KQorQUNfTVNHX0NIRUNLSU5HKGZvciBzdHJ1Y3Qgc2lnY29udGV4dCkKK0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzaWduYWwuaD4KK3Rlc3Rfc2lnKCkKK3sKKyAgICBzdHJ1Y3Qgc2lnY29udGV4dCAqc2NvbnQ7CisgICAgc2NvbnQgPSAoc3RydWN0IHNpZ2NvbnRleHQgKikwOworICAgIHJldHVybiAxOworfSBdLCAsCisJICBBQ19NU0dfUkVTVUxUKHllcykKKwkJQUNfREVGSU5FKEhBVkVfU0lHQ09OVEVYVCksCisJICBBQ19NU0dfUkVTVUxUKG5vKSkKKworZG5sIHRyaWNreSBzdHVmZjogdHJ5IHRvIGZpbmQgb3V0IGlmIGdldGN3ZCgpIGlzIGltcGxlbWVudGVkIHdpdGgKK2RubCBzeXN0ZW0oInNoIC1jIHB3ZCIpCitBQ19NU0dfQ0hFQ0tJTkcoZ2V0Y3dkIGltcGxlbWVudGF0aW9uKQorQUNfVFJZX1JVTihbCitjaGFyICpkYWdnZXJbXSA9IHsgIklGUz1wd2QiLCAwIH07CittYWluKCkKK3sKKyAgY2hhciBidWZmZXJbNTAwXTsKKyAgZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworICBlbnZpcm9uID0gZGFnZ2VyOworICByZXR1cm4gZ2V0Y3dkKGJ1ZmZlciwgNTAwKSA/IDAgOiAxOworfV0sCisJQUNfTVNHX1JFU1VMVChpdCBpcyB1c2FibGUpLAorCUFDX01TR19SRVNVTFQoaXQgc3RpbmtzKQorCQlBQ19ERUZJTkUoQkFEX0dFVENXRCksCisJQUNfTVNHX0VSUk9SKGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbSkpCisKK2RubCBDaGVjayBmb3IgZnVuY3Rpb25zIGluIG9uZSBiaWcgY2FsbCwgdG8gcmVkdWNlIHRoZSBzaXplIG9mIGNvbmZpZ3VyZQorQUNfQ0hFQ0tfRlVOQ1MoYmNtcCBmY2hkaXIgZmNob3duIGZzZWVrbyBmc3luYyBmdGVsbG8gZ2V0Y3dkIGdldHBzZXVkb3R0eSBcCisJZ2V0cHduYW0gZ2V0cHd1aWQgZ2V0cmxpbWl0IGdldHRpbWVvZmRheSBnZXR3ZCBsc3RhdCBtZW1jbXAgXAorCW1lbXNldCBuYW5vc2xlZXAgb3BlbmRpciBwdXRlbnYgcXNvcnQgcmVhZGxpbmsgc2VsZWN0IHNldGVudiBcCisJc2V0cGdpZCBzZXRzaWQgc2lnYWx0c3RhY2sgc2lnc3RhY2sgc2lnc2V0IHNpZ3NldGptcCBzaWdhY3Rpb24gXAorCXNpZ3ZlYyBzbnByaW50ZiBzdHJjYXNlY21wIHN0cmVycm9yIHN0cmZ0aW1lIHN0cmljbXAgc3RybmNhc2VjbXAgXAorCXN0cm5pY21wIHN0cnBicmsgc3RydG9sIHRnZXRlbnQgdG93bG93ZXIgdG93dXBwZXIgdXNsZWVwIHV0aW1lIHV0aW1lcykKKworZG5sIGZzdGF0ZnMoKSBjYW4gdGFrZSAyIHRvIDQgYXJndW1lbnRzLCB0cnkgdG8gdXNlIHN0X2Jsa3NpemUgaWYgcG9zc2libGUKK0FDX01TR19DSEVDS0lORyhmb3Igc3RfYmxrc2l6ZSkKK0FDX1RSWV9DT01QSUxFKAorWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPl0sCitbCXN0cnVjdCBzdGF0IHN0OworCWludCBuOworCisJc3RhdCgiLyIsICZzdCk7CisJbiA9IChpbnQpc3Quc3RfYmxrc2l6ZTtdLAorCUFDX01TR19SRVNVTFQoeWVzKTsgQUNfREVGSU5FKEhBVkVfU1RfQkxLU0laRSksCisJQUNfTVNHX1JFU1VMVChubykpCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHN0YXQoKSBpZ25vcmVzIGEgdHJhaWxpbmcgc2xhc2gpCitBQ19UUllfUlVOKAorWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorbWFpbigpIHtzdHJ1Y3Qgc3RhdCBzdDsgIGV4aXQoc3RhdCgiY29uZmlndXJlLyIsICZzdCkgIT0gMCk7IH1dLAorCUFDX01TR19SRVNVTFQoeWVzKTsgQUNfREVGSU5FKFNUQVRfSUdOT1JFU19TTEFTSCksCisJQUNfTVNHX1JFU1VMVChubyksIEFDX01TR19FUlJPUihmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0pKQorCitkbmwgTGluayB3aXRoIGljb252IGZvciBjaGFyc2V0IHRyYW5zbGF0aW9uLCBpZiBub3QgZm91bmQgd2l0aG91dCBsaWJyYXJ5LgorZG5sIGNoZWNrIGZvciBpY29udigpIHJlcXVpcmVzIGluY2x1ZGluZyBpY29udi5oCitkbmwgQWRkICItbGljb252IiB3aGVuIHBvc3NpYmxlOyBTb2xhcmlzIGhhcyBpY29udiBidXQgdXNlIEdOVSBpY29udiB3aGVuIGl0CitkbmwgaGFzIGJlZW4gaW5zdGFsbGVkLgorQUNfTVNHX0NIRUNLSU5HKGZvciBpY29udl9vcGVuKCkpCitzYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExJQlMgLWxpY29udiIKK0FDX1RSWV9MSU5LKFsKKyNpZmRlZiBIQVZFX0lDT05WX0gKKyMgaW5jbHVkZSA8aWNvbnYuaD4KKyNlbmRpZgorICAgIF0sIFtpY29udl9vcGVuKCJmciIsICJ0byIpO10sCisgICAgQUNfTVNHX1JFU1VMVCh5ZXM7IHdpdGggLWxpY29udik7IEFDX0RFRklORShIQVZFX0lDT05WKSwKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIEFDX1RSWV9MSU5LKFsKKyNpZmRlZiBIQVZFX0lDT05WX0gKKyMgaW5jbHVkZSA8aWNvbnYuaD4KKyNlbmRpZgorCV0sIFtpY29udl9vcGVuKCJmciIsICJ0byIpO10sCisJQUNfTVNHX1JFU1VMVCh5ZXMpOyBBQ19ERUZJTkUoSEFWRV9JQ09OViksCisJQUNfTVNHX1JFU1VMVChubykpKQorCisKK0FDX01TR19DSEVDS0lORyhmb3IgbmxfbGFuZ2luZm8oQ09ERVNFVCkpCitBQ19UUllfTElOSyhbCisjaWZkZWYgSEFWRV9MQU5HSU5GT19ICisjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisjZW5kaWYKK10sIFtjaGFyICpjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpO10sCisJQUNfTVNHX1JFU1VMVCh5ZXMpOyBBQ19ERUZJTkUoSEFWRV9OTF9MQU5HSU5GT19DT0RFU0VUKSwKKwlBQ19NU0dfUkVTVUxUKG5vKSkKKworZG5sIExpbmsgd2l0aCAtbHBvc2l4MWUgZm9yIEFDTCBzdHVmZjsgaWYgbm90IGZvdW5kLCB0cnkgLWxhY2wgZm9yIFNHSQorZG5sIHdoZW4gLWxhY2wgd29ya3MsIGFsc28gdHJ5IHRvIHVzZSAtbGF0dHIgKHJlcXVpcmVkIGZvciBEZWJpYW4pLgorQUNfTVNHX0NIRUNLSU5HKC0tZGlzYWJsZS1hY2wgYXJndW1lbnQpCitBQ19BUkdfRU5BQkxFKGFjbCwKKwlbICAtLWRpc2FibGUtYWNsICAgICAgICAgICBEb24ndCBjaGVjayBmb3IgQUNMIHN1cHBvcnQuXSwKKwksIFtlbmFibGVfYWNsPSJ5ZXMiXSkKK2lmIHRlc3QgIiRlbmFibGVfYWNsIiA9ICJ5ZXMiOyB0aGVuCitBQ19NU0dfUkVTVUxUKG5vKQorQUNfQ0hFQ0tfTElCKHBvc2l4MWUsIGFjbF9nZXRfZmlsZSwgW0xJQlM9IiRMSUJTIC1scG9zaXgxZSJdLAorCUFDX0NIRUNLX0xJQihhY2wsIGFjbF9nZXRfZmlsZSwgW0xJQlM9IiRMSUJTIC1sYWNsIgorCQkgIEFDX0NIRUNLX0xJQihhdHRyLCBmZ2V0eGF0dHIsIExJQlM9IiRMSUJTIC1sYXR0ciIsLCldLCwpLCkKKworQUNfTVNHX0NIRUNLSU5HKGZvciBQT1NJWCBBQ0wgc3VwcG9ydCkKK0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19BQ0xfSAorIyBpbmNsdWRlIDxzeXMvYWNsLmg+CisjZW5kaWYKK2FjbF90IGFjbDtdLCBbYWNsID0gYWNsX2dldF9maWxlKCJmb28iLCBBQ0xfVFlQRV9BQ0NFU1MpOworCWFjbF9zZXRfZmlsZSgiZm9vIiwgQUNMX1RZUEVfQUNDRVNTLCBhY2wpOworCWFjbF9mcmVlKGFjbCk7XSwKKwlBQ19NU0dfUkVTVUxUKHllcyk7IEFDX0RFRklORShIQVZFX1BPU0lYX0FDTCksCisJQUNfTVNHX1JFU1VMVChubykpCisKK0FDX01TR19DSEVDS0lORyhmb3IgU29sYXJpcyBBQ0wgc3VwcG9ydCkKK0FDX1RSWV9MSU5LKFsKKyNpZmRlZiBIQVZFX1NZU19BQ0xfSAorIyBpbmNsdWRlIDxzeXMvYWNsLmg+CisjZW5kaWZdLCBbYWNsKCJmb28iLCBHRVRBQ0xDTlQsIDAsIE5VTEwpOworCV0sCisJQUNfTVNHX1JFU1VMVCh5ZXMpOyBBQ19ERUZJTkUoSEFWRV9TT0xBUklTX0FDTCksCisJQUNfTVNHX1JFU1VMVChubykpCisKK0FDX01TR19DSEVDS0lORyhmb3IgQUlYIEFDTCBzdXBwb3J0KQorQUNfVFJZX0xJTksoWworI2lmZGVmIEhBVkVfU1lTX0FDTF9ICisjIGluY2x1ZGUgPHN5cy9hY2wuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0FDQ0VTU19ICisjIGluY2x1ZGUgPHN5cy9hY2Nlc3MuaD4KKyNlbmRpZgorI2RlZmluZSBfQUxMX1NPVVJDRQorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworaW50IGFjbHNpemU7CitzdHJ1Y3QgYWNsICphY2xlbnQ7XSwgW2FjbHNpemUgPSBzaXplb2Yoc3RydWN0IGFjbCk7CisJYWNsZW50ID0gKHZvaWQgKiltYWxsb2MoYWNsc2l6ZSk7CisJc3RhdGFjbCgiZm9vIiwgU1RYX05PUk1BTCwgYWNsZW50LCBhY2xzaXplKTsKKwldLAorCUFDX01TR19SRVNVTFQoeWVzKTsgQUNfREVGSU5FKEhBVkVfQUlYX0FDTCksCisJQUNfTVNHX1JFU1VMVChubykpCitlbHNlCisgIEFDX01TR19SRVNVTFQoeWVzKQorZmkKKworQUNfTVNHX0NIRUNLSU5HKC0tZGlzYWJsZS1ncG0gYXJndW1lbnQpCitBQ19BUkdfRU5BQkxFKGdwbSwKKwlbICAtLWRpc2FibGUtZ3BtICAgICAgICAgICBEb24ndCB1c2UgZ3BtIChMaW51eCBtb3VzZSBkYWVtb24pLl0sICwKKwlbZW5hYmxlX2dwbT0ieWVzIl0pCisKK2lmIHRlc3QgIiRlbmFibGVfZ3BtIiA9ICJ5ZXMiOyB0aGVuCisgIEFDX01TR19SRVNVTFQobm8pCisgIGRubCBDaGVja2luZyBpZiBncG0gc3VwcG9ydCBjYW4gYmUgY29tcGlsZWQKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBncG1dLCB2aV9jdl9oYXZlX2dwbSwKKwlbb2xpYnM9IiRMSUJTIiA7IExJQlM9Ii1sZ3BtIl0KKwlBQ19UUllfTElOSygKKwkgICAgWyNpbmNsdWRlIDxncG0uaD4KKwkgICAgI2luY2x1ZGUgPGxpbnV4L2tleWJvYXJkLmg+XSwKKwkgICAgW0dwbV9HZXRMaWJWZXJzaW9uKE5VTEwpO10sCisJICAgIGRubCBDb25maWd1cmUgZGVmaW5lcyBIQVZFX0dQTSwgaWYgaXQgaXMgZGVmaW5lZCBmZWF0dXJlLmggZGVmaW5lcworCSAgICBkbmwgRkVBVF9NT1VTRV9HUE0gaWYgbW91c2Ugc3VwcG9ydCBpcyBpbmNsdWRlZAorCSAgICBbdmlfY3ZfaGF2ZV9ncG09eWVzXSwKKwkgICAgW3ZpX2N2X2hhdmVfZ3BtPW5vXSkKKwlbTElCUz0iJG9saWJzIl0KKyAgICApCisgIGlmIHRlc3QgJHZpX2N2X2hhdmVfZ3BtID0geWVzOyB0aGVuCisgICAgTElCUz0iJExJQlMgLWxncG0iCisgICAgQUNfREVGSU5FKEhBVkVfR1BNKQorICBmaQorZWxzZQorICBBQ19NU0dfUkVTVUxUKHllcykKK2ZpCisKK0FDX01TR19DSEVDS0lORyhmb3IgdnNucHJpbnRmKCkpCitBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCS8qIENoZWNrIHVzZSBvZiB2c25wcmludGYoKSAqLworCXZvaWQgd2FybihjaGFyICpmbXQsIC4uLik7CisJdm9pZCB3YXJuKGNoYXIgKmZtdCwgLi4uKQorCXsKKwkgIHZhX2xpc3QgYXA7IGNoYXIgYnVmWzIwXTsKKwkgIHZhX3N0YXJ0KGFwLCBmbXQpOworCSAgdnNucHJpbnRmKGJ1ZiwgMjAsIGZtdCwgYXApOworCSAgdmFfZW5kKGFwKTsKKwl9CisJbWFpbigpCisJeworCXdhcm4oInRlc3RpbmcgJXNcbiIsICJhIHZlcnkgbG9uZyBzdHJpbmcgdGhhdCB3b24ndCBmaXQiKTsKKwlleGl0KDApOworCX0KKwkgICAgXSwKKwlBQ19ERUZJTkUoSEFWRV9WU05QUklOVEYpIEFDX01TR19SRVNVTFQoeWVzKSwKKwlBQ19NU0dfUkVTVUxUKG5vKSwKKwlBQ19NU0dfRVJST1IoZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtKSkKKworCitkbmwgcmVuYW1lIG5lZWRzIHRvIGJlIGNoZWNrZWQgc2VwYXJhdGVseSB0byB3b3JrIG9uIE5leHRzdGVwIHdpdGggY2MKK0FDX01TR19DSEVDS0lORyhmb3IgcmVuYW1lKQorQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRpby5oPl0sIFtyZW5hbWUoInRoaXMiLCAidGhhdCIpXSwKKwlBQ19NU0dfUkVTVUxUKHllcyk7IEFDX0RFRklORShIQVZFX1JFTkFNRSksCisJQUNfTVNHX1JFU1VMVChubykpCisKK2RubCBzeXNjdGwoKSBtYXkgZXhpc3QgYnV0IG5vdCB0aGUgYXJndW1lbnRzIHdlIHVzZQorQUNfTVNHX0NIRUNLSU5HKGZvciBzeXNjdGwpCitBQ19UUllfQ09NUElMRSgKK1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPl0sCitbCWludCBtaWJbMl0sIHI7CisJc2l6ZV90IGxlbjsKKworCW1pYlswXSA9IENUTF9IVzsKKwltaWJbMV0gPSBIV19VU0VSTUVNOworCWxlbiA9IHNpemVvZihyKTsKKwkodm9pZClzeXNjdGwobWliLCAyLCAmciwgJmxlbiwgKHZvaWQgKikwLCAoc2l6ZV90KTApOworCV0sCisJQUNfTVNHX1JFU1VMVCh5ZXMpOyBBQ19ERUZJTkUoSEFWRV9TWVNDVEwpLAorCUFDX01TR19SRVNVTFQobm90IHVzYWJsZSkpCisKK2RubCBzeXNpbmZvKCkgbWF5IGV4aXN0IGJ1dCBub3QgYmUgTGludXggY29tcGF0aWJsZQorQUNfTVNHX0NIRUNLSU5HKGZvciBzeXNpbmZvKQorQUNfVFJZX0NPTVBJTEUoCitbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNpbmZvLmg+XSwKK1sJc3RydWN0IHN5c2luZm8gc2luZm87CisJaW50IHQ7CisKKwkodm9pZClzeXNpbmZvKCZzaW5mbyk7CisJdCA9IHNpbmZvLnRvdGFscmFtOworCV0sCisJQUNfTVNHX1JFU1VMVCh5ZXMpOyBBQ19ERUZJTkUoSEFWRV9TWVNJTkZPKSwKKwlBQ19NU0dfUkVTVUxUKG5vdCB1c2FibGUpKQorCitkbmwgc3lzY29uZigpIG1heSBleGlzdCBidXQgbm90IHN1cHBvcnQgd2hhdCB3ZSB3YW50IHRvIHVzZQorQUNfTVNHX0NIRUNLSU5HKGZvciBzeXNjb25mKQorQUNfVFJZX0NPTVBJTEUoCitbI2luY2x1ZGUgPHVuaXN0ZC5oPl0sCitbCSh2b2lkKXN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKwkodm9pZClzeXNjb25mKF9TQ19QSFlTX1BBR0VTKTsKKwldLAorCUFDX01TR19SRVNVTFQoeWVzKTsgQUNfREVGSU5FKEhBVkVfU1lTQ09ORiksCisJQUNfTVNHX1JFU1VMVChub3QgdXNhYmxlKSkKKworZG5sIE91ciBvd24gdmVyc2lvbiBvZiBBQ19DSEVDS19TSVpFT0YoaW50KTsgZml4ZXMgYSBidWcgd2hlbiBzaXplb2YoKSBjYW4ndAorZG5sIGJlIHByaW50ZWQgd2l0aCAiJWQiLCBhbmQgYXZvaWRzIGEgd2FybmluZyBmb3IgY3Jvc3MtY29tcGlsaW5nLgorCitBQ19NU0dfQ0hFQ0tJTkcoc2l6ZSBvZiBpbnQpCitBQ19DQUNIRV9WQUwoYWNfY3Zfc2l6ZW9mX2ludCwKKwlbQUNfVFJZX1JVTihbI2luY2x1ZGUgPHN0ZGlvLmg+CisJCW1haW4oKQorCQl7CisJCSAgRklMRSAqZj1mb3BlbigiY29uZnRlc3R2YWwiLCAidyIpOworCQkgIGlmICghZikgZXhpdCgxKTsKKwkJICBmcHJpbnRmKGYsICIlZFxuIiwgKGludClzaXplb2YoaW50KSk7CisJCSAgZXhpdCgwKTsKKwkJfV0sCisJICAgIGFjX2N2X3NpemVvZl9pbnQ9YGNhdCBjb25mdGVzdHZhbGAsCisJICAgIGFjX2N2X3NpemVvZl9pbnQ9MCwKKwkgICAgQUNfTVNHX0VSUk9SKGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbSkpXSkKK0FDX01TR19SRVNVTFQoJGFjX2N2X3NpemVvZl9pbnQpCitBQ19ERUZJTkVfVU5RVU9URUQoU0laRU9GX0lOVCwgJGFjX2N2X3NpemVvZl9pbnQpCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIG1lbW1vdmUvYmNvcHkvbWVtY3B5IGhhbmRsZSBvdmVybGFwcykKK1tiY29weV90ZXN0X3Byb2c9JworbWFpbigpIHsKKyAgY2hhciBidWZbMTBdOworICBzdHJjcHkoYnVmLCAiYWJjZGVmZ2hpIik7CisgIG1jaF9tZW1tb3ZlKGJ1ZiwgYnVmICsgMiwgMyk7CisgIGlmIChzdHJuY21wKGJ1ZiwgImFiYWJjZiIsIDYpKQorICAgIGV4aXQoMSk7CisgIHN0cmNweShidWYsICJhYmNkZWZnaGkiKTsKKyAgbWNoX21lbW1vdmUoYnVmICsgMiwgYnVmLCAzKTsKKyAgaWYgKHN0cm5jbXAoYnVmLCAiY2RlZGVmIiwgNikpCisgICAgZXhpdCgxKTsKKyAgZXhpdCgwKTsgLyogbGliYyB2ZXJzaW9uIHdvcmtzIHByb3Blcmx5LiAgKi8KK30nXQorCitkbmwgQ2hlY2sgZm9yIG1lbW1vdmUoKSBiZWZvcmUgYmNvcHkoKSwgbWFrZXMgbWVtbW92ZSgpIGJlIHVzZWQgd2hlbiBib3RoIGFyZQorZG5sIHByZXNlbnQsIGZpeGVzIHByb2JsZW0gd2l0aCBpbmNvbXBhdGliaWxpdHkgYmV0d2VlbiBTb2xhcmlzIDIuNCBhbmQgMi41LgorCitBQ19UUllfUlVOKFsjZGVmaW5lIG1jaF9tZW1tb3ZlKHMsZCxsKSBtZW1tb3ZlKGQscyxsKSAkYmNvcHlfdGVzdF9wcm9nXSwKKyAgICBBQ19ERUZJTkUoVVNFTUVNTU9WRSkgQUNfTVNHX1JFU1VMVChtZW1tb3ZlIGRvZXMpLAorICAgIEFDX1RSWV9SVU4oWyNkZWZpbmUgbWNoX21lbW1vdmUocyxkLGwpIGJjb3B5KGQscyxsKSAkYmNvcHlfdGVzdF9wcm9nXSwKKwlBQ19ERUZJTkUoVVNFQkNPUFkpIEFDX01TR19SRVNVTFQoYmNvcHkgZG9lcyksCisJQUNfVFJZX1JVTihbI2RlZmluZSBtY2hfbWVtbW92ZShzLGQsbCkgbWVtY3B5KGQscyxsKSAkYmNvcHlfdGVzdF9wcm9nXSwKKwkgICAgQUNfREVGSU5FKFVTRU1FTUNQWSkgQUNfTVNHX1JFU1VMVChtZW1jcHkgZG9lcyksIEFDX01TR19SRVNVTFQobm8pLAorCSAgICBBQ19NU0dfRVJST1IoZmFpbGVkIHRvIGNvbXBpbGUgdGVzdCBwcm9ncmFtKSksCisJQUNfTVNHX0VSUk9SKGZhaWxlZCB0byBjb21waWxlIHRlc3QgcHJvZ3JhbSkpLAorICAgIEFDX01TR19FUlJPUihmYWlsZWQgdG8gY29tcGlsZSB0ZXN0IHByb2dyYW0pKQorCitkbmwgQ2hlY2sgZm9yIG11bHRpYnl0ZSBsb2NhbGUgZnVuY3Rpb25zCitkbmwgRmluZCBvdXQgaWYgX1hzZXRsb2NhbGUoKSBpcyBzdXBwb3J0ZWQgYnkgbGliWDExLgorZG5sIENoZWNrIGlmIFhfTE9DQUxFIHNob3VsZCBiZSBkZWZpbmVkLgorCitpZiB0ZXN0ICIkZW5hYmxlX211bHRpYnl0ZSIgPSAieWVzIjsgdGhlbgorICBjZmxhZ3Nfc2F2ZT0kQ0ZMQUdTCisgIGxkZmxhZ3Nfc2F2ZT0kTERGTEFHUworICBpZiB0ZXN0IC1uICIkeF9pbmNsdWRlcyIgOyB0aGVuCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1JJHhfaW5jbHVkZXMiCisgICAgTERGTEFHUz0iJFhfTElCUyAkTERGTEFHUyAtbFgxMSIKKyAgICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBYX0xPQ0FMRSBuZWVkZWQpCisgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxYMTEvWGxvY2FsZS5oPl0sLAorCUFDX1RSWV9MSU5LX0ZVTkMoW19Yc2V0bG9jYWxlXSwgW0FDX01TR19SRVNVTFQoeWVzKQorCQlBQ19ERUZJTkUoWF9MT0NBTEUpXSwgQUNfTVNHX1JFU1VMVChubykpLAorCUFDX01TR19SRVNVTFQobm8pKQorICBmaQorICBDRkxBR1M9JGNmbGFnc19zYXZlCisgIExERkxBR1M9JGxkZmxhZ3Nfc2F2ZQorZmkKKworZG5sIExpbmsgd2l0aCB4cGc0LCBpdCBpcyBzYWlkIHRvIG1ha2UgS29yZWFuIGxvY2FsZSB3b3JraW5nCitBQ19DSEVDS19MSUIoeHBnNCwgX3hwZzRfc2V0cnVuZWxvY2FsZSwgW0xJQlM9IiRMSUJTIC1seHBnNCJdLCwpCisKK2RubCBDaGVjayBob3cgd2UgY2FuIHJ1biBjdGFncworZG5sIC0tdmVyc2lvbiBmb3IgRXh1YmVyYW50IGN0YWdzIChwcmVmZXJyZWQpCitkbmwgLXQgZm9yIHR5cGVkZWZzIChtYW55IGN0YWdzIGhhdmUgdGhpcykKK2RubCAtcyBmb3Igc3RhdGljIGZ1bmN0aW9ucyAoRWx2aXMgY3RhZ3Mgb25seT8pCitkbmwgLXYgZm9yIHZhcmlhYmxlcy4gRGFuZ2Vyb3VzLCBtb3N0IGN0YWdzIHRha2UgdGhpcyBmb3IgJ3ZncmluZCBzdHlsZScuCitkbmwgLWkrbSB0byB0ZXN0IGZvciBvbGRlciBFeHViZXJhbnQgY3RhZ3MKK0FDX01TR19DSEVDS0lORyhob3cgdG8gY3JlYXRlIHRhZ3MpCit0ZXN0IC1mIHRhZ3MgJiYgbXYgdGFncyB0YWdzLnNhdmUKK2lmIChldmFsIGN0YWdzIC0tdmVyc2lvbiAvZGV2L251bGwgfCBncmVwIEV4dWJlcmFudCkgPCAvZGV2L251bGwgMT4mQUNfRkRfQ0MgMj4mMTsgdGhlbgorICBUQUdQUkc9ImN0YWdzIgorZWxzZQorICAoZXZhbCBldGFncwkgICAvZGV2L251bGwpIDwgL2Rldi9udWxsIDE+JkFDX0ZEX0NDIDI+JjEgJiYgVEFHUFJHPSJldGFncyIKKyAgKGV2YWwgZXRhZ3MgLWMgICAvZGV2L251bGwpIDwgL2Rldi9udWxsIDE+JkFDX0ZEX0NDIDI+JjEgJiYgVEFHUFJHPSJldGFncyAtYyIKKyAgKGV2YWwgY3RhZ3MJICAgL2Rldi9udWxsKSA8IC9kZXYvbnVsbCAxPiZBQ19GRF9DQyAyPiYxICYmIFRBR1BSRz0iY3RhZ3MiCisgIChldmFsIGN0YWdzIC10ICAgL2Rldi9udWxsKSA8IC9kZXYvbnVsbCAxPiZBQ19GRF9DQyAyPiYxICYmIFRBR1BSRz0iY3RhZ3MgLXQiCisgIChldmFsIGN0YWdzIC10cyAgL2Rldi9udWxsKSA8IC9kZXYvbnVsbCAxPiZBQ19GRF9DQyAyPiYxICYmIFRBR1BSRz0iY3RhZ3MgLXRzIgorICAoZXZhbCBjdGFncyAtdHZzIC9kZXYvbnVsbCkgPCAvZGV2L251bGwgMT4mQUNfRkRfQ0MgMj4mMSAmJiBUQUdQUkc9ImN0YWdzIC10dnMiCisgIChldmFsIGN0YWdzIC1pK20gL2Rldi9udWxsKSA8IC9kZXYvbnVsbCAxPiZBQ19GRF9DQyAyPiYxICYmIFRBR1BSRz0iY3RhZ3MgLWkrbSIKK2ZpCit0ZXN0IC1mIHRhZ3Muc2F2ZSAmJiBtdiB0YWdzLnNhdmUgdGFncworQUNfTVNHX1JFU1VMVCgkVEFHUFJHKSBBQ19TVUJTVChUQUdQUkcpCisKK2RubCBDaGVjayBob3cgd2UgY2FuIHJ1biBtYW4gd2l0aCBhIHNlY3Rpb24gbnVtYmVyCitBQ19NU0dfQ0hFQ0tJTkcoaG93IHRvIHJ1biBtYW4gd2l0aCBhIHNlY3Rpb24gbnIpCitNQU5ERUY9Im1hbiIKKyhldmFsIG1hbiAtcyAyIHJlYWQpIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JkFDX0ZEX0NDICYmIE1BTkRFRj0ibWFuIC1zIgorQUNfTVNHX1JFU1VMVCgkTUFOREVGKQoraWYgdGVzdCAiJE1BTkRFRiIgPSAibWFuIC1zIjsgdGhlbgorICBBQ19ERUZJTkUoVVNFTUFOX1MpCitmaQorCitkbmwgQ2hlY2sgaWYgZ2V0dGV4dCgpIGlzIHdvcmtpbmcgYW5kIGlmIGl0IG5lZWRzIC1saW50bAorQUNfTVNHX0NIRUNLSU5HKC0tZGlzYWJsZS1ubHMgYXJndW1lbnQpCitBQ19BUkdfRU5BQkxFKG5scywKKwlbICAtLWRpc2FibGUtbmxzICAgICAgICAgICBEb24ndCBzdXBwb3J0IE5MUyAoZ2V0dGV4dCgpKS5dLCAsCisJW2VuYWJsZV9ubHM9InllcyJdKQorCitpZiB0ZXN0ICIkZW5hYmxlX25scyIgPSAieWVzIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKG5vKQorICBBQ19DSEVDS19QUk9HKE1TR0ZNVCwgbXNnZm10LCBtc2dmbXQsICkKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgTkxTXSkKKyAgaWYgdGVzdCAtZiBwby9NYWtlZmlsZTsgdGhlbgorICAgIGhhdmVfZ2V0dGV4dD0ibm8iCisgICAgaWYgdGVzdCAtbiAiJE1TR0ZNVCI7IHRoZW4KKyAgICAgIEFDX1RSWV9MSU5LKAorCVsjaW5jbHVkZSA8bGliaW50bC5oPl0sCisJW2dldHRleHQoIlRlc3QiKTtdLAorCUFDX01TR19SRVNVTFQoW2dldHRleHQoKSB3b3Jrc10pOyBoYXZlX2dldHRleHQ9InllcyIsCisJICBvbGlicz0kTElCUworCSAgTElCUz0iJExJQlMgLWxpbnRsIgorCSAgQUNfVFJZX0xJTksoCisJICAgICAgWyNpbmNsdWRlIDxsaWJpbnRsLmg+XSwKKwkgICAgICBbZ2V0dGV4dCgiVGVzdCIpO10sCisJICAgICAgQUNfTVNHX1JFU1VMVChbZ2V0dGV4dCgpIHdvcmtzIHdpdGggLWxpbnRsXSk7IGhhdmVfZ2V0dGV4dD0ieWVzIiwKKwkgICAgICBBQ19NU0dfUkVTVUxUKFtnZXR0ZXh0KCkgZG9lc24ndCB3b3JrXSk7CisJICAgICAgTElCUz0kb2xpYnMpKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW21zZ2ZtdCBub3QgZm91bmQgLSBkaXNhYmxlZF0pOworICAgIGZpCisgICAgaWYgdGVzdCAkaGF2ZV9nZXR0ZXh0ID0gInllcyI7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0dFVFRFWFQpCisgICAgICBNQUtFTU89eWVzCisgICAgICBBQ19TVUJTVChNQUtFTU8pCisgICAgICBkbmwgdGhpcyB3YXMgYWRkZWQgaW4gR05VIGdldHRleHQgMC4xMC4zNgorICAgICAgQUNfQ0hFQ0tfRlVOQ1MoYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQpCisgICAgICBkbmwgX25sX21zZ19jYXRfY250ciBpcyByZXF1aXJlZCBmb3IgR05VIGdldHRleHQKKyAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIF9ubF9tc2dfY2F0X2NudHJdKQorICAgICAgQUNfVFJZX0xJTksoCisJCVsjaW5jbHVkZSA8bGliaW50bC5oPgorCQlleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7XSwKKwkJWysrX25sX21zZ19jYXRfY250cjtdLAorCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgQUNfREVGSU5FKEhBVkVfTkxfTVNHX0NBVF9DTlRSKSwKKwkJQUNfTVNHX1JFU1VMVChbbm9dKSkKKyAgICBmaQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm8gInBvL01ha2VmaWxlIiAtIGRpc2FibGVkXSk7CisgIGZpCitlbHNlCisgIEFDX01TR19SRVNVTFQoeWVzKQorZmkKKworZG5sIENoZWNrIGZvciBkeW5hbWljIGxpbmtpbmcgbG9hZGVyCitBQ19DSEVDS19IRUFERVIoZGxmY24uaCwgRExMPWRsZmNuLmgsIFtBQ19DSEVDS19IRUFERVIoZGwuaCwgRExMPWRsLmgpXSkKK2lmIHRlc3QgeCR7RExMfSA9IHhkbGZjbi5oOyB0aGVuCisgIEFDX0RFRklORShIQVZFX0RMRkNOX0gsIDEsIFsgRGVmaW5lIGlmIHdlIGhhdmUgZGxmY24uaC4gXSkKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZGxvcGVuKCldKQorICBBQ19UUllfTElOSygsWworCQlleHRlcm4gdm9pZCogZGxvcGVuKCk7CisJCWRsb3BlbigpOworICAgICAgXSwKKyAgICAgIEFDX01TR19SRVNVTFQoeWVzKTsKKwkgICAgICBBQ19ERUZJTkUoSEFWRV9ETE9QRU4sIDEsIFsgRGVmaW5lIGlmIHdlIGhhdmUgZGxvcGVuKCkgXSksCisgICAgICBBQ19NU0dfUkVTVUxUKG5vKTsKKwkgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBkbG9wZW4oKSBpbiAtbGRsXSkKKwkgICAgICBvbGlicz0kTElCUworCSAgICAgIExJQlM9IiRMSUJTIC1sZGwiCisJICAgICAgQUNfVFJZX0xJTksoLFsKKwkJCQlleHRlcm4gdm9pZCogZGxvcGVuKCk7CisJCQkJZGxvcGVuKCk7CisJCSBdLAorCQkgQUNfTVNHX1JFU1VMVCh5ZXMpOworCQkJICBBQ19ERUZJTkUoSEFWRV9ETE9QRU4sIDEsIFsgRGVmaW5lIGlmIHdlIGhhdmUgZGxvcGVuKCkgXSksCisJCSBBQ19NU0dfUkVTVUxUKG5vKTsKKwkJCSAgTElCUz0kb2xpYnMpKQorICBkbmwgUmVsaWFudFVOSVggaGFzIGRsb3BlbigpIGluIGxpYmMgYnV0IGV2ZXJ5dGhpbmcgZWxzZSBpbiBsaWJkbAorICBkbmwgaWNrIDotKQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBkbHN5bSgpXSkKKyAgQUNfVFJZX0xJTksoLFsKKwkJZXh0ZXJuIHZvaWQqIGRsc3ltKCk7CisJCWRsc3ltKCk7CisgICAgICBdLAorICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpOworCSAgICAgIEFDX0RFRklORShIQVZFX0RMU1lNLCAxLCBbIERlZmluZSBpZiB3ZSBoYXZlIGRsc3ltKCkgXSksCisgICAgICBBQ19NU0dfUkVTVUxUKG5vKTsKKwkgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBkbHN5bSgpIGluIC1sZGxdKQorCSAgICAgIG9saWJzPSRMSUJTCisJICAgICAgTElCUz0iJExJQlMgLWxkbCIKKwkgICAgICBBQ19UUllfTElOSygsWworCQkJCWV4dGVybiB2b2lkKiBkbHN5bSgpOworCQkJCWRsc3ltKCk7CisJCSBdLAorCQkgQUNfTVNHX1JFU1VMVCh5ZXMpOworCQkJICBBQ19ERUZJTkUoSEFWRV9ETFNZTSwgMSwgWyBEZWZpbmUgaWYgd2UgaGF2ZSBkbHN5bSgpIF0pLAorCQkgQUNfTVNHX1JFU1VMVChubyk7CisJCQkgIExJQlM9JG9saWJzKSkKK2VsaWYgdGVzdCB4JHtETEx9ID0geGRsLmg7IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfRExfSCwgMSwgWyBEZWZpbmUgaWYgd2UgaGF2ZSBkbC5oLiBdKQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzaGxfbG9hZCgpXSkKKyAgQUNfVFJZX0xJTksoLFsKKwkJZXh0ZXJuIHZvaWQqIHNobF9sb2FkKCk7CisJCXNobF9sb2FkKCk7CisgICAgIF0sCisgICAgIEFDX01TR19SRVNVTFQoeWVzKTsKKwkgIEFDX0RFRklORShIQVZFX1NITF9MT0FELCAxLCBbIERlZmluZSBpZiB3ZSBoYXZlIHNobF9sb2FkKCkgXSksCisgICAgIEFDX01TR19SRVNVTFQobm8pOworCSAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc2hsX2xvYWQoKSBpbiAtbGRsZF0pCisJICBvbGlicz0kTElCUworCSAgTElCUz0iJExJQlMgLWxkbGQiCisJICBBQ19UUllfTElOSygsWworCQkJZXh0ZXJuIHZvaWQqIHNobF9sb2FkKCk7CisJCQlzaGxfbG9hZCgpOworCSAgICAgXSwKKwkgICAgIEFDX01TR19SRVNVTFQoeWVzKTsKKwkJICBBQ19ERUZJTkUoSEFWRV9TSExfTE9BRCwgMSwgWyBEZWZpbmUgaWYgd2UgaGF2ZSBzaGxfbG9hZCgpIF0pLAorCSAgICAgQUNfTVNHX1JFU1VMVChubyk7CisJCSAgTElCUz0kb2xpYnMpKQorZmkKK0FDX0NIRUNLX0hFQURFUlMoc2V0am1wLmgpCisKK2lmIHRlc3QgIngkTUFDT1NYIiA9ICJ4eWVzIiAtYSAtbiAiJFBFUkwiOyB0aGVuCisgIGRubCAtbGRsIG11c3QgY29tZSBhZnRlciBEeW5hTG9hZGVyLmEKKyAgaWYgZWNobyAkTElCUyB8IGdyZXAgLWUgJy1sZGwnID4vZGV2L251bGw7IHRoZW4KKyAgICBMSUJTPWBlY2hvICRMSUJTIHwgc2VkIHMvLWxkbC8vYAorICAgIFBFUkxfTElCUz0iJFBFUkxfTElCUyAtbGRsIgorICBmaQorZmkKKworaWYgdGVzdCAieCRNQUNPU1giID0gInh5ZXMiICYmIHRlc3QgIngkQ0FSQk9OIiA9ICJ4eWVzIiBcCisJJiYgdGVzdCAieCRHVUlUWVBFIiAhPSAieENBUkJPTkdVSSI7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgd2UgbmVlZCAtZnJhbWV3b3JrIENhcmJvbikKKyAgZG5sIGNoZWNrIGZvciBNQUNPU1ggd2l0aG91dCBDYXJib24gR1VJLCBidXQgd2l0aCBGRUFUX01CWVRFCisgIGlmIHRlc3QgIngkZW5hYmxlX211bHRpYnl0ZSIgPSAieHllcyIgfHwgdGVzdCAieCRmZWF0dXJlcyIgPT0gInhiaWciIFwKKwl8fCB0ZXN0ICJ4JGZlYXR1cmVzIiA9ICJ4aHVnZSI7IHRoZW4KKyAgICBMSUJTPSIkTElCUyAtZnJhbWV3b3JrIENhcmJvbiIKKyAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQobm8pCisgIGZpCitmaQorCisKK2RubCB3cml0ZSBvdXRwdXQgZmlsZXMKK0FDX09VVFBVVChhdXRvL2NvbmZpZy5tazpjb25maWcubWsuaW4pCisKK2RubCB2aW06IHNldCBzdz0yIHR3PTc4IGZvKz1sOgpkaWZmIC0tZ2l0IGEvc3JjL2RlaHF4LnB5IGIvc3JjL2RlaHF4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOWNlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGVocXgucHkKQEAgLTAsMCArMSw0MCBAQAorIyBQeXRob24gc2NyaXB0IHRvIGdldCBib3RoIHRoZSBkYXRhIGFuZCByZXNvdXJjZSBmb3JrIGZyb20gYSBCaW5IZXggZW5jb2RlZAorIyBmaWxlLgorIyBBdXRob3I6IFRhcm8gTXVyYW9rYQorIyBMYXN0IENoYW5nZTogMjAwMyBPY3QgMjUKKworaW1wb3J0IHN5cworaW1wb3J0IGJpbmhleAorCitpbnB1dCA9IHN5cy5hcmd2WzFdCitjb252ID0gYmluaGV4LkhleEJpbihpbnB1dCkKK2luZm8gPSBjb252LkZJbmZvCitvdXQgPSBjb252LkZOYW1lCitvdXRfZGF0YSA9IG91dAorb3V0X3JzcmMgPSBvdXQgKyAnLnJzcmNmb3JrJworI3ByaW50ICdvdXRfcnNyYz0nICsgb3V0X3JzcmMKK3ByaW50ICdJbiBmaWxlOiAnICsgaW5wdXQKKworb3V0ZmlsZSA9IG9wZW4ob3V0X2RhdGEsICd3YicpCitwcmludCAnICBPdXQgZGF0YSBmb3JrOiAnICsgb3V0X2RhdGEKK3doaWxlIDE6CisgICAgZCA9IGNvbnYucmVhZCgxMjgwMDApCisgICAgaWYgbm90IGQ6IGJyZWFrCisgICAgb3V0ZmlsZS53cml0ZShkKQorb3V0ZmlsZS5jbG9zZSgpCitjb252LmNsb3NlX2RhdGEoKQorCitkID0gY29udi5yZWFkX3JzcmMoMTI4MDAwKQoraWYgZDoKKyAgICBwcmludCAnICBPdXQgcnNyYyBmb3JrOiAnICsgb3V0X3JzcmMKKyAgICBvdXRmaWxlID0gb3BlbihvdXRfcnNyYywgJ3diJykKKyAgICBvdXRmaWxlLndyaXRlKGQpCisgICAgd2hpbGUgMToKKyAgICAgICAgZCA9IGNvbnYucmVhZF9yc3JjKDEyODAwMCkKKyAgICAgICAgaWYgbm90IGQ6IGJyZWFrCisgICAgICAgIG91dGZpbGUud3JpdGUoZCkKKyAgICBvdXRmaWxlLmNsb3NlKCkKKworY29udi5jbG9zZSgpCisKKyMgdmltOnNldCB0cz04IHN0cz00IHN3PTQgZXQ6CmRpZmYgLS1naXQgYS9zcmMvZGlmZi5jIGIvc3JjL2RpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODA1ODllCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RpZmYuYwpAQCAtMCwwICsxLDIyMDggQEAKKy8qIHZpbTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBkaWZmLmM6IGNvZGUgZm9yIGRpZmYnaW5nIHR3byBvciB0aHJlZSBidWZmZXJzLgorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmIGRlZmluZWQoRkVBVF9ESUZGKSB8fCBkZWZpbmVkKFBST1RPKQorCisjZGVmaW5lIERCX0NPVU5UIDQJLyogdXAgdG8gZm91ciBidWZmZXJzIGNhbiBiZSBkaWZmJ2VkICovCisKKy8qCisgKiBFYWNoIGRpZmZibG9jayBkZWZpbmVzIHdoZXJlIGEgYmxvY2sgb2YgbGluZXMgc3RhcnRzIGluIGVhY2ggb2YgdGhlIGJ1ZmZlcnMKKyAqIGFuZCBob3cgbWFueSBsaW5lcyBpdCBvY2N1cGllcyBpbiB0aGF0IGJ1ZmZlci4gIFdoZW4gdGhlIGxpbmVzIGFyZSBtaXNzaW5nCisgKiBpbiB0aGUgYnVmZmVyIHRoZSBkZl9jb3VudFtdIGlzIHplcm8uICBUaGlzIGlzIGFsbCBjb3VudGVkIGluCisgKiBidWZmZXIgbGluZXMuCisgKiBUaGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIHVuY2hhbmdlZCBsaW5lIGluIGJldHdlZW4gdGhlIGRpZmZzLgorICogT3RoZXJ3aXNlIGl0IHdvdWxkIGhhdmUgYmVlbiBpbmNsdWRlZCBpbiB0aGUgZGlmZiBhYm92ZSBvciBiZWxvdyBpdC4KKyAqIGRmX2xudW1bXSArIGRmX2NvdW50W10gaXMgdGhlIGxudW0gYmVsb3cgdGhlIGNoYW5nZS4gIFdoZW4gaW4gb25lIGJ1ZmZlcgorICogbGluZXMgaGF2ZSBiZWVuIGluc2VydGVkLCBpbiB0aGUgb3RoZXIgYnVmZmVyIGRmX2xudW1bXSBpcyB0aGUgbGluZSBiZWxvdworICogdGhlIGluc2VydGlvbiBhbmQgZGZfY291bnRbXSBpcyB6ZXJvLiAgV2hlbiBhcHBlbmRpbmcgbGluZXMgYXQgdGhlIGVuZCBvZgorICogdGhlIGJ1ZmZlciwgZGZfbG51bVtdIGlzIG9uZSBiZXlvbmQgdGhlIGVuZCEKKyAqIFRoaXMgaXMgdXNpbmcgYSBsaW5rZWQgbGlzdCwgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzIGlzIGV4cGVjdGVkCisgKiB0byBiZSByZWFzb25hYmxlIHNtYWxsLiAgVGhlIGxpc3QgaXMgc29ydGVkIG9uIGxudW0uCisgKi8KK3R5cGVkZWYgc3RydWN0IGRpZmZibG9jayBkaWZmX1Q7CitzdHJ1Y3QgZGlmZmJsb2NrCit7CisgICAgZGlmZl9UCSpkZl9uZXh0OworICAgIGxpbmVucl9UCWRmX2xudW1bREJfQ09VTlRdOwkvKiBsaW5lIG51bWJlciBpbiBidWZmZXIgKi8KKyAgICBsaW5lbnJfVAlkZl9jb3VudFtEQl9DT1VOVF07CS8qIG5yIG9mIGluc2VydGVkL2NoYW5nZWQgbGluZXMgKi8KK307CisKK3N0YXRpYyBkaWZmX1QJKmZpcnN0X2RpZmYgPSBOVUxMOworCitzdGF0aWMgYnVmX1QJKihkaWZmYnVmW0RCX0NPVU5UXSk7CisKK3N0YXRpYyBpbnQJZGlmZl9pbnZhbGlkID0gVFJVRTsJLyogbGlzdCBvZiBkaWZmcyBpcyBvdXRkYXRlZCAqLworCitzdGF0aWMgaW50CWRpZmZfYnVzeSA9IEZBTFNFOwkvKiBleF9kaWZmZ2V0cHV0KCkgaXMgYnVzeSAqLworCisvKiBmbGFncyBvYnRhaW5lZCBmcm9tIHRoZSAnZGlmZm9wdCcgb3B0aW9uICovCisjZGVmaW5lIERJRkZfRklMTEVSCTEJLyogZGlzcGxheSBmaWxsZXIgbGluZXMgKi8KKyNkZWZpbmUgRElGRl9JQ0FTRQkyCS8qIGlnbm9yZSBjYXNlICovCisjZGVmaW5lIERJRkZfSVdISVRFCTQJLyogaWdub3JlIGNoYW5nZSBpbiB3aGl0ZSBzcGFjZSAqLworc3RhdGljIGludAlkaWZmX2ZsYWdzID0gRElGRl9GSUxMRVI7CisKKyNkZWZpbmUgTEJVRkxFTiA1MAkJLyogbGVuZ3RoIG9mIGxpbmUgaW4gZGlmZiBmaWxlICovCisKK3N0YXRpYyBpbnQgZGlmZl9hX3dvcmtzID0gTUFZQkU7IC8qIFRSVUUgd2hlbiAiZGlmZiAtYSIgd29ya3MsIEZBTFNFIHdoZW4gaXQKKwkJCQkgICAgZG9lc24ndCB3b3JrLCBNQVlCRSB3aGVuIG5vdCBjaGVja2VkIHlldCAqLworI2lmIGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoTVNET1MpCitzdGF0aWMgaW50IGRpZmZfYmluX3dvcmtzID0gTUFZQkU7IC8qIFRSVUUgd2hlbiAiZGlmZiAtLWJpbmFyeSIgd29ya3MsIEZBTFNFCisJCQkJICAgICAgd2hlbiBpdCBkb2Vzbid0IHdvcmssIE1BWUJFIHdoZW4gbm90CisJCQkJICAgICAgY2hlY2tlZCB5ZXQgKi8KKyNlbmRpZgorCitzdGF0aWMgaW50IGRpZmZfYnVmX2lkeCBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK3N0YXRpYyB2b2lkIGRpZmZfY2hlY2tfdW5jaGFuZ2VkIF9fQVJHUygoZGlmZl9UICpkcCkpOworc3RhdGljIGludCBkaWZmX2NoZWNrX3Nhbml0eSBfX0FSR1MoKGRpZmZfVCAqZHApKTsKK3N0YXRpYyB2b2lkIGRpZmZfcmVkcmF3IF9fQVJHUygoaW50IGRvZm9sZCkpOworc3RhdGljIGludCBkaWZmX3dyaXRlIF9fQVJHUygoYnVmX1QgKmJ1ZiwgY2hhcl91ICpmbmFtZSkpOworc3RhdGljIHZvaWQgZGlmZl9maWxlIF9fQVJHUygoY2hhcl91ICp0bXBfb3JpZywgY2hhcl91ICp0bXBfbmV3LCBjaGFyX3UgKnRtcF9kaWZmKSk7CitzdGF0aWMgdm9pZCBkaWZmX2NsZWFyIF9fQVJHUygodm9pZCkpOworc3RhdGljIGludCBkaWZmX2VxdWFsX2VudHJ5IF9fQVJHUygoZGlmZl9UICpkcCwgaW50IGlkeDEsIGludCBpZHgyKSk7CitzdGF0aWMgaW50IGRpZmZfY21wIF9fQVJHUygoY2hhcl91ICpzMSwgY2hhcl91ICpzMikpOworI2lmZGVmIEZFQVRfRk9MRElORworc3RhdGljIHZvaWQgZGlmZl9mb2xkX3VwZGF0ZSBfX0FSR1MoKGRpZmZfVCAqZHAsIGludCBza2lwX2lkeCkpOworI2VuZGlmCitzdGF0aWMgdm9pZCBkaWZmX3JlYWQgX19BUkdTKChpbnQgaWR4X29yaWcsIGludCBpZHhfbmV3LCBjaGFyX3UgKmZuYW1lKSk7CitzdGF0aWMgdm9pZCBkaWZmX2NvcHlfZW50cnkgX19BUkdTKChkaWZmX1QgKmRwcmV2LCBkaWZmX1QgKmRwLCBpbnQgaWR4X29yaWcsIGludCBpZHhfbmV3KSk7CitzdGF0aWMgZGlmZl9UICpkaWZmX2FsbG9jX25ldyBfX0FSR1MoKGRpZmZfVCAqZHByZXYsIGRpZmZfVCAqZHApKTsKKworI2lmbmRlZiBVU0VfQ1IKKyMgZGVmaW5lIHRhZ19mZ2V0cyB2aW1fZmdldHMKKyNlbmRpZgorCisvKgorICogQ2FsbCB0aGlzIHdoZW4gYSBuZXcgYnVmZmVyIGlzIGJlaW5nIGVkaXRlZCBpbiB0aGUgY3VycmVudCB3aW5kb3cuICBjdXJidWYKKyAqIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gc2V0LgorICogTWFya3MgdGhlIGN1cnJlbnQgYnVmZmVyIGFzIGJlaW5nIHBhcnQgb2YgdGhlIGRpZmYgYW5kIHJlcXVpcmVpbmcgdXBkYXRpbmcuCisgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgYW55IGF1dG9jbWQsIGJlY2F1c2UgYSBjb21tYW5kIHRoZSB1c2VzIGluZm8KKyAqIGFib3V0IHRoZSBzY3JlZW4gY29udGVudHMuCisgKi8KKyAgICB2b2lkCitkaWZmX25ld19idWZmZXIoKQoreworICAgIGlmIChjdXJ3aW4tPndfcF9kaWZmKQorCWRpZmZfYnVmX2FkZChjdXJidWYpOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gZGVsZXRpbmcgb3IgdW5sb2FkaW5nIGEgYnVmZmVyOiBObyBsb25nZXIgbWFrZSBhIGRpZmYgd2l0aCBpdC4KKyAqIEFsc28gY2FsbGVkIHdoZW4gJ2RpZmYnIGlzIHJlc2V0IGluIHRoZSBsYXN0IHdpbmRvdyBzaG93aW5nIGEgZGlmZiBmb3IgYQorICogYnVmZmVyLgorICovCisgICAgdm9pZAorZGlmZl9idWZfZGVsZXRlKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIGludAkJaTsKKworICAgIGkgPSBkaWZmX2J1Zl9pZHgoYnVmKTsKKyAgICBpZiAoaSAhPSBEQl9DT1VOVCkKKyAgICB7CisJZGlmZmJ1ZltpXSA9IE5VTEw7CisJZGlmZl9pbnZhbGlkID0gVFJVRTsKKyAgICB9Cit9CisKKy8qCisgKiBBZGQgYSBidWZmZXIgdG8gbWFrZSBkaWZmcyBmb3IuCisgKi8KKyAgICB2b2lkCitkaWZmX2J1Zl9hZGQoYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgaW50CQlpOworCisgICAgaWYgKGRpZmZfYnVmX2lkeChidWYpICE9IERCX0NPVU5UKQorCXJldHVybjsJCS8qIEl0J3MgYWxyZWFkeSB0aGVyZS4gKi8KKworICAgIGZvciAoaSA9IDA7IGkgPCBEQl9DT1VOVDsgKytpKQorCWlmIChkaWZmYnVmW2ldID09IE5VTEwpCisJeworCSAgICBkaWZmYnVmW2ldID0gYnVmOworCSAgICBkaWZmX2ludmFsaWQgPSBUUlVFOworCSAgICByZXR1cm47CisJfQorCisgICAgRU1TR04oXygiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIiksIERCX0NPVU5UKTsKK30KKworLyoKKyAqIEZpbmQgYnVmZmVyICJidWYiIGluIHRoZSBsaXN0IG9mIGRpZmYgYnVmZmVycy4KKyAqIFJldHVybiBpdHMgaW5kZXggb3IgREJfQ09VTlQgaWYgbm90IGZvdW5kLgorICovCisgICAgc3RhdGljIGludAorZGlmZl9idWZfaWR4KGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIGludAkJaWR4OworCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBEQl9DT1VOVDsgKytpZHgpCisJaWYgKGRpZmZidWZbaWR4XSA9PSBidWYpCisJICAgIGJyZWFrOworICAgIHJldHVybiBpZHg7Cit9CisKKy8qCisgKiBNYXJrIHRoZSBkaWZmIGluZm8gYXMgaW52YWxpZCwgaXQgd2lsbCBiZSB1cGRhdGVkIHdoZW4gaW5mbyBpcyByZXF1ZXN0ZWQuCisgKi8KKyAgICB2b2lkCitkaWZmX2ludmFsaWRhdGUoKQoreworICAgIGlmIChjdXJ3aW4tPndfcF9kaWZmKQorICAgIHsKKwlkaWZmX2ludmFsaWQgPSBUUlVFOworCWRpZmZfcmVkcmF3KFRSVUUpOworICAgIH0KK30KKworLyoKKyAqIENhbGxlZCBieSBtYXJrX2FkanVzdCgpOiB1cGRhdGUgbGluZSBudW1iZXJzLgorICogVGhpcyBhdHRlbXB0cyB0byB1cGRhdGUgdGhlIGNoYW5nZXMgYXMgbXVjaCBhcyBwb3NzaWJsZToKKyAqIFdoZW4gaW5zZXJ0aW5nL2RlbGV0aW5nIGxpbmVzIG91dHNpZGUgb2YgZXhpc3RpbmcgY2hhbmdlIGJsb2NrcywgY3JlYXRlIGEKKyAqIG5ldyBjaGFuZ2UgYmxvY2sgYW5kIHVwZGF0ZSB0aGUgbGluZSBudW1iZXJzIGluIGZvbGxvd2luZyBibG9ja3MuCisgKiBXaGVuIGluc2VydGluZy9kZWxldGluZyBsaW5lcyBpbiBleGlzdGluZyBjaGFuZ2UgYmxvY2tzLCB1cGRhdGUgdGhlbS4KKyAqLworICAgIHZvaWQKK2RpZmZfbWFya19hZGp1c3QobGluZTEsIGxpbmUyLCBhbW91bnQsIGFtb3VudF9hZnRlcikKKyAgICBsaW5lbnJfVAlsaW5lMTsKKyAgICBsaW5lbnJfVAlsaW5lMjsKKyAgICBsb25nCWFtb3VudDsKKyAgICBsb25nCWFtb3VudF9hZnRlcjsKK3sKKyAgICBkaWZmX1QJKmRwOworICAgIGRpZmZfVAkqZHByZXY7CisgICAgZGlmZl9UCSpkbmV4dDsKKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCWk7CisgICAgaW50CQlpbnNlcnRlZCwgZGVsZXRlZDsKKyAgICBpbnQJCW4sIG9mZjsKKyAgICBsaW5lbnJfVAlsYXN0OworICAgIGxpbmVucl9UCWxudW1fZGVsZXRlZCA9IGxpbmUxOwkvKiBsbnVtIG9mIHJlbWFpbmluZyBkZWxldGlvbiAqLworICAgIGludAkJY2hlY2tfdW5jaGFuZ2VkOworCisgICAgLyogRmluZCB0aGUgaW5kZXggZm9yIHRoZSBjdXJyZW50IGJ1ZmZlci4gKi8KKyAgICBpZHggPSBkaWZmX2J1Zl9pZHgoY3VyYnVmKTsKKyAgICBpZiAoaWR4ID09IERCX0NPVU5UKQorCXJldHVybjsJCS8qIFRoaXMgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBkaWZmcy4gKi8KKworICAgIGlmIChsaW5lMiA9PSBNQVhMTlVNKQorICAgIHsKKwkvKiBtYXJrX2FkanVzdCg5OSwgTUFYTE5VTSwgOSwgMCk6IGluc2VydCBsaW5lcyAqLworCWluc2VydGVkID0gYW1vdW50OworCWRlbGV0ZWQgPSAwOworICAgIH0KKyAgICBlbHNlIGlmIChhbW91bnRfYWZ0ZXIgPiAwKQorICAgIHsKKwkvKiBtYXJrX2FkanVzdCg5OSwgOTgsIE1BWExOVU0sIDkpOiBhIGNoYW5nZSB0aGF0IGluc2VydHMgbGluZXMqLworCWluc2VydGVkID0gYW1vdW50X2FmdGVyOworCWRlbGV0ZWQgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIG1hcmtfYWRqdXN0KDk4LCA5OSwgTUFYTE5VTSwgLTIpOiBkZWxldGUgbGluZXMgKi8KKwlpbnNlcnRlZCA9IDA7CisJZGVsZXRlZCA9IC1hbW91bnRfYWZ0ZXI7CisgICAgfQorCisgICAgZHByZXYgPSBOVUxMOworICAgIGRwID0gZmlyc3RfZGlmZjsKKyAgICBmb3IgKDs7KQorICAgIHsKKwkvKiBJZiB0aGUgY2hhbmdlIGlzIGFmdGVyIHRoZSBwcmV2aW91cyBkaWZmIGJsb2NrIGFuZCBiZWZvcmUgdGhlIG5leHQKKwkgKiBkaWZmIGJsb2NrLCB0aHVzIG5vdCB0b3VjaGluZyBhbiBleGlzdGluZyBjaGFuZ2UsIGNyZWF0ZSBhIG5ldyBkaWZmCisJICogYmxvY2suICBEb24ndCBkbyB0aGlzIHdoZW4gZXhfZGlmZmdldHB1dCgpIGlzIGJ1c3kuICovCisJaWYgKChkcCA9PSBOVUxMIHx8IGRwLT5kZl9sbnVtW2lkeF0gLSAxID4gbGluZTIKKwkJICAgIHx8IChsaW5lMiA9PSBNQVhMTlVNICYmIGRwLT5kZl9sbnVtW2lkeF0gPiBsaW5lMSkpCisJCSYmIChkcHJldiA9PSBOVUxMCisJCSAgICB8fCBkcHJldi0+ZGZfbG51bVtpZHhdICsgZHByZXYtPmRmX2NvdW50W2lkeF0gPCBsaW5lMSkKKwkJJiYgIWRpZmZfYnVzeSkKKwl7CisJICAgIGRuZXh0ID0gZGlmZl9hbGxvY19uZXcoZHByZXYsIGRwKTsKKwkgICAgaWYgKGRuZXh0ID09IE5VTEwpCisJCXJldHVybjsKKworCSAgICBkbmV4dC0+ZGZfbG51bVtpZHhdID0gbGluZTE7CisJICAgIGRuZXh0LT5kZl9jb3VudFtpZHhdID0gaW5zZXJ0ZWQ7CisJICAgIGZvciAoaSA9IDA7IGkgPCBEQl9DT1VOVDsgKytpKQorCQlpZiAoZGlmZmJ1ZltpXSAhPSBOVUxMICYmIGkgIT0gaWR4KQorCQl7CisJCSAgICBpZiAoZHByZXYgPT0gTlVMTCkKKwkJCWRuZXh0LT5kZl9sbnVtW2ldID0gbGluZTE7CisJCSAgICBlbHNlCisJCQlkbmV4dC0+ZGZfbG51bVtpXSA9IGxpbmUxCisJCQkgICAgKyAoZHByZXYtPmRmX2xudW1baV0gKyBkcHJldi0+ZGZfY291bnRbaV0pCisJCQkgICAgLSAoZHByZXYtPmRmX2xudW1baWR4XSArIGRwcmV2LT5kZl9jb3VudFtpZHhdKTsKKwkJICAgIGRuZXh0LT5kZl9jb3VudFtpXSA9IGRlbGV0ZWQ7CisJCX0KKwl9CisKKwkvKiBpZiBhdCBlbmQgb2YgdGhlIGxpc3QsIHF1aXQgKi8KKwlpZiAoZHAgPT0gTlVMTCkKKwkgICAgYnJlYWs7CisKKwkvKgorCSAqIENoZWNrIGZvciB0aGVzZSBzaXR1YXRpb25zOgorCSAqCSAgMSAgMgkzCisJICoJICAxICAyCTMKKwkgKiBsaW5lMSAgICAgMgkzICA0ICA1CisJICoJICAgICAyCTMgIDQgIDUKKwkgKgkgICAgIDIJMyAgNCAgNQorCSAqIGxpbmUyICAgICAyCTMgIDQgIDUKKwkgKgkJMyAgICAgNSAgNgorCSAqCQkzICAgICA1ICA2CisJICovCisJLyogY29tcHV0ZSBsYXN0IGxpbmUgb2YgdGhpcyBjaGFuZ2UgKi8KKwlsYXN0ID0gZHAtPmRmX2xudW1baWR4XSArIGRwLT5kZl9jb3VudFtpZHhdIC0gMTsKKworCS8qIDEuIGNoYW5nZSBjb21wbGV0ZWx5IGFib3ZlIGxpbmUxOiBub3RoaW5nIHRvIGRvICovCisJaWYgKGxhc3QgPj0gbGluZTEgLSAxKQorCXsKKwkgICAgLyogNi4gY2hhbmdlIGJlbG93IGxpbmUyOiBvbmx5IGFkanVzdCBmb3IgYW1vdW50X2FmdGVyOyBhbHNvIHdoZW4KKwkgICAgICogImRlbGV0ZWQiIGJlY2FtZSB6ZXJvIHdoZW4gZGVsZXRlZCBhbGwgbGluZXMgYmV0d2VlbiB0d28gZGlmZnMgKi8KKwkgICAgaWYgKGRwLT5kZl9sbnVtW2lkeF0gLSAoZGVsZXRlZCArIGluc2VydGVkICE9IDApID4gbGluZTIpCisJICAgIHsKKwkJaWYgKGFtb3VudF9hZnRlciA9PSAwKQorCQkgICAgYnJlYWs7CS8qIG5vdGhpbmcgbGVmdCB0byBjaGFuZ2UgKi8KKwkJZHAtPmRmX2xudW1baWR4XSArPSBhbW91bnRfYWZ0ZXI7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWNoZWNrX3VuY2hhbmdlZCA9IEZBTFNFOworCisJCS8qIDIuIDMuIDQuIDUuOiBpbnNlcnRlZC9kZWxldGVkIGxpbmVzIHRvdWNoaW5nIHRoaXMgZGlmZi4gKi8KKwkJaWYgKGRlbGV0ZWQgPiAwKQorCQl7CisJCSAgICBpZiAoZHAtPmRmX2xudW1baWR4XSA+PSBsaW5lMSkKKwkJICAgIHsKKwkJCW9mZiA9IGRwLT5kZl9sbnVtW2lkeF0gLSBsbnVtX2RlbGV0ZWQ7CisJCQlpZiAobGFzdCA8PSBsaW5lMikKKwkJCXsKKwkJCSAgICAvKiA0LiBkZWxldGUgYWxsIGxpbmVzIG9mIGRpZmYgKi8KKwkJCSAgICBpZiAoZHAtPmRmX25leHQgIT0gTlVMTAorCQkJCSAgICAmJiBkcC0+ZGZfbmV4dC0+ZGZfbG51bVtpZHhdIC0gMSA8PSBsaW5lMikKKwkJCSAgICB7CisJCQkJLyogZGVsZXRlIGNvbnRpbnVlcyBpbiBuZXh0IGRpZmYsIG9ubHkgZG8KKwkJCQkgKiBsaW5lcyB1bnRpbCB0aGF0IG9uZSAqLworCQkJCW4gPSBkcC0+ZGZfbmV4dC0+ZGZfbG51bVtpZHhdIC0gbG51bV9kZWxldGVkOworCQkJCWRlbGV0ZWQgLT0gbjsKKwkJCQluIC09IGRwLT5kZl9jb3VudFtpZHhdOworCQkJCWxudW1fZGVsZXRlZCA9IGRwLT5kZl9uZXh0LT5kZl9sbnVtW2lkeF07CisJCQkgICAgfQorCQkJICAgIGVsc2UKKwkJCQluID0gZGVsZXRlZCAtIGRwLT5kZl9jb3VudFtpZHhdOworCQkJICAgIGRwLT5kZl9jb3VudFtpZHhdID0gMDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCSAgICAvKiA1LiBkZWxldGUgbGluZXMgYXQgb3IganVzdCBiZWZvcmUgdG9wIG9mIGRpZmYgKi8KKwkJCSAgICBuID0gb2ZmOworCQkJICAgIGRwLT5kZl9jb3VudFtpZHhdIC09IGxpbmUyIC0gZHAtPmRmX2xudW1baWR4XSArIDE7CisJCQkgICAgY2hlY2tfdW5jaGFuZ2VkID0gVFJVRTsKKwkJCX0KKwkJCWRwLT5kZl9sbnVtW2lkeF0gPSBsaW5lMTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCW9mZiA9IDA7CisJCQlpZiAobGFzdCA8IGxpbmUyKQorCQkJeworCQkJICAgIC8qIDIuIGRlbGV0ZSBhdCBlbmQgb2Ygb2YgZGlmZiAqLworCQkJICAgIGRwLT5kZl9jb3VudFtpZHhdIC09IGxhc3QgLSBsbnVtX2RlbGV0ZWQgKyAxOworCQkJICAgIGlmIChkcC0+ZGZfbmV4dCAhPSBOVUxMCisJCQkJICAgICYmIGRwLT5kZl9uZXh0LT5kZl9sbnVtW2lkeF0gLSAxIDw9IGxpbmUyKQorCQkJICAgIHsKKwkJCQkvKiBkZWxldGUgY29udGludWVzIGluIG5leHQgZGlmZiwgb25seSBkbworCQkJCSAqIGxpbmVzIHVudGlsIHRoYXQgb25lICovCisJCQkJbiA9IGRwLT5kZl9uZXh0LT5kZl9sbnVtW2lkeF0gLSAxIC0gbGFzdDsKKwkJCQlkZWxldGVkIC09IGRwLT5kZl9uZXh0LT5kZl9sbnVtW2lkeF0KKwkJCQkJCQkgICAgICAgLSBsbnVtX2RlbGV0ZWQ7CisJCQkJbG51bV9kZWxldGVkID0gZHAtPmRmX25leHQtPmRmX2xudW1baWR4XTsKKwkJCSAgICB9CisJCQkgICAgZWxzZQorCQkJCW4gPSBsaW5lMiAtIGxhc3Q7CisJCQkgICAgY2hlY2tfdW5jaGFuZ2VkID0gVFJVRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCSAgICAvKiAzLiBkZWxldGUgbGluZXMgaW5zaWRlIHRoZSBkaWZmICovCisJCQkgICAgbiA9IDA7CisJCQkgICAgZHAtPmRmX2NvdW50W2lkeF0gLT0gZGVsZXRlZDsKKwkJCX0KKwkJICAgIH0KKworCQkgICAgZm9yIChpID0gMDsgaSA8IERCX0NPVU5UOyArK2kpCisJCQlpZiAoZGlmZmJ1ZltpXSAhPSBOVUxMICYmIGkgIT0gaWR4KQorCQkJeworCQkJICAgIGRwLT5kZl9sbnVtW2ldIC09IG9mZjsKKwkJCSAgICBkcC0+ZGZfY291bnRbaV0gKz0gbjsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGlmIChkcC0+ZGZfbG51bVtpZHhdIDw9IGxpbmUxKQorCQkgICAgeworCQkJLyogaW5zZXJ0ZWQgbGluZXMgc29tZXdoZXJlIGluIHRoaXMgZGlmZiAqLworCQkJZHAtPmRmX2NvdW50W2lkeF0gKz0gaW5zZXJ0ZWQ7CisJCQljaGVja191bmNoYW5nZWQgPSBUUlVFOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJLyogaW5zZXJ0ZWQgbGluZXMgc29tZXdoZXJlIGFib3ZlIHRoaXMgZGlmZiAqLworCQkJZHAtPmRmX2xudW1baWR4XSArPSBpbnNlcnRlZDsKKwkJfQorCisJCWlmIChjaGVja191bmNoYW5nZWQpCisJCSAgICAvKiBDaGVjayBpZiBpbnNlcnRlZCBsaW5lcyBhcmUgZXF1YWwsIG1heSByZWR1Y2UgdGhlCisJCSAgICAgKiBzaXplIG9mIHRoZSBkaWZmLiAgVE9ETzogYWxzbyBjaGVjayBmb3IgZXF1YWwgbGluZXMKKwkJICAgICAqIGluIHRoZSBtaWRkbGUgYW5kIHBlcmhhcHMgc3BsaXQgdGhlIGJsb2NrLiAqLworCQkgICAgZGlmZl9jaGVja191bmNoYW5nZWQoZHApOworCSAgICB9CisJfQorCisJLyogY2hlY2sgaWYgdGhpcyBibG9jayB0b3VjaGVzIHRoZSBwcmV2aW91cyBvbmUsIG1heSBtZXJnZSB0aGVtLiAqLworCWlmIChkcHJldiAhPSBOVUxMICYmIGRwcmV2LT5kZl9sbnVtW2lkeF0gKyBkcHJldi0+ZGZfY291bnRbaWR4XQorCQkJCQkJCSAgPT0gZHAtPmRmX2xudW1baWR4XSkKKwl7CisJICAgIGZvciAoaSA9IDA7IGkgPCBEQl9DT1VOVDsgKytpKQorCQlpZiAoZGlmZmJ1ZltpXSAhPSBOVUxMKQorCQkgICAgZHByZXYtPmRmX2NvdW50W2ldICs9IGRwLT5kZl9jb3VudFtpXTsKKwkgICAgZHByZXYtPmRmX25leHQgPSBkcC0+ZGZfbmV4dDsKKwkgICAgdmltX2ZyZWUoZHApOworCSAgICBkcCA9IGRwcmV2LT5kZl9uZXh0OworCX0KKwllbHNlCisJeworCSAgICAvKiBBZHZhbmNlIHRvIG5leHQgZW50cnkuICovCisJICAgIGRwcmV2ID0gZHA7CisJICAgIGRwID0gZHAtPmRmX25leHQ7CisJfQorICAgIH0KKworICAgIGRwcmV2ID0gTlVMTDsKKyAgICBkcCA9IGZpcnN0X2RpZmY7CisgICAgd2hpbGUgKGRwICE9IE5VTEwpCisgICAgeworCS8qIEFsbCBjb3VudHMgYXJlIHplcm8sIHJlbW92ZSB0aGlzIGVudHJ5LiAqLworCWZvciAoaSA9IDA7IGkgPCBEQl9DT1VOVDsgKytpKQorCSAgICBpZiAoZGlmZmJ1ZltpXSAhPSBOVUxMICYmIGRwLT5kZl9jb3VudFtpXSAhPSAwKQorCQlicmVhazsKKwlpZiAoaSA9PSBEQl9DT1VOVCkKKwl7CisJICAgIGRuZXh0ID0gZHAtPmRmX25leHQ7CisJICAgIHZpbV9mcmVlKGRwKTsKKwkgICAgZHAgPSBkbmV4dDsKKwkgICAgaWYgKGRwcmV2ID09IE5VTEwpCisJCWZpcnN0X2RpZmYgPSBkbmV4dDsKKwkgICAgZWxzZQorCQlkcHJldi0+ZGZfbmV4dCA9IGRuZXh0OworCX0KKwllbHNlCisJeworCSAgICAvKiBBZHZhbmNlIHRvIG5leHQgZW50cnkuICovCisJICAgIGRwcmV2ID0gZHA7CisJICAgIGRwID0gZHAtPmRmX25leHQ7CisJfQorCisgICAgfQorICAgIGRpZmZfcmVkcmF3KFRSVUUpOworCisgICAgLyogUmVjb21wdXRlIHRoZSBzY3JvbGwgYmluZGluZywgbWF5IHJlbW92ZSBvciBhZGQgZmlsbGVyIGxpbmVzIChlLmcuLAorICAgICAqIHdoZW4gYWRkaW5nIGxpbmVzIGFib3ZlIHdfdG9wbGluZSkuICovCisgICAgY2hlY2tfc2Nyb2xsYmluZCgobGluZW5yX1QpMCwgMEwpOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgZGlmZiBibG9jayBhbmQgbGluayBpdCBiZXR3ZWVuICJkcHJldiIgYW5kICJkcCIuCisgKi8KKyAgICBzdGF0aWMgZGlmZl9UICoKK2RpZmZfYWxsb2NfbmV3KGRwcmV2LCBkcCkKKyAgICBkaWZmX1QJKmRwcmV2OworICAgIGRpZmZfVAkqZHA7Cit7CisgICAgZGlmZl9UCSpkbmV3OworCisgICAgZG5ldyA9IChkaWZmX1QgKilhbGxvYygodW5zaWduZWQpc2l6ZW9mKGRpZmZfVCkpOworICAgIGlmIChkbmV3ICE9IE5VTEwpCisgICAgeworCWRuZXctPmRmX25leHQgPSBkcDsKKwlpZiAoZHByZXYgPT0gTlVMTCkKKwkgICAgZmlyc3RfZGlmZiA9IGRuZXc7CisJZWxzZQorCSAgICBkcHJldi0+ZGZfbmV4dCA9IGRuZXc7CisgICAgfQorICAgIHJldHVybiBkbmV3OworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIGRpZmYgYmxvY2sgImRwIiBjYW4gYmUgbWFkZSBzbWFsbGVyIGZvciBsaW5lcyBhdCB0aGUgc3RhcnQgYW5kCisgKiBlbmQgdGhhdCBhcmUgZXF1YWwuICBDYWxsZWQgYWZ0ZXIgaW5zZXJ0aW5nIGxpbmVzLgorICogVGhpcyBtYXkgcmVzdWx0IGluIGEgY2hhbmdlIHdoZXJlIGFsbCBidWZmZXJzIGhhdmUgemVybyBsaW5lcywgdGhlIGNhbGxlcgorICogbXVzdCB0YWtlIGNhcmUgb2YgcmVtb3ZpbmcgaXQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZGlmZl9jaGVja191bmNoYW5nZWQoZHApCisgICAgZGlmZl9UCSpkcDsKK3sKKyAgICBpbnQJCWlfb3JnOworICAgIGludAkJaV9uZXc7CisgICAgaW50CQlvZmZfb3JnLCBvZmZfbmV3OworICAgIGNoYXJfdQkqbGluZV9vcmc7CisgICAgaW50CQlkaXIgPSBGT1JXQVJEOworCisgICAgLyogRmluZCB0aGUgZmlyc3QgYnVmZmVycywgdXNlIGl0IGFzIHRoZSBvcmlnaW5hbCwgY29tcGFyZSB0aGUgb3RoZXIKKyAgICAgKiBidWZmZXIgbGluZXMgYWdhaW5zdCB0aGlzIG9uZS4gKi8KKyAgICBmb3IgKGlfb3JnID0gMDsgaV9vcmcgPCBEQl9DT1VOVDsgKytpX29yZykKKwlpZiAoZGlmZmJ1ZltpX29yZ10gIT0gTlVMTCkKKwkgICAgYnJlYWs7CisgICAgaWYgKGlfb3JnID09IERCX0NPVU5UKQkvKiBzYWZldHkgY2hlY2sgKi8KKwlyZXR1cm47CisKKyAgICBpZiAoZGlmZl9jaGVja19zYW5pdHkoZHApID09IEZBSUwpCisJcmV0dXJuOworCisgICAgLyogRmlyc3QgY2hlY2sgbGluZXMgYXQgdGhlIHRvcCwgdGhlbiBhdCB0aGUgYm90dG9tLiAqLworICAgIG9mZl9vcmcgPSAwOworICAgIG9mZl9uZXcgPSAwOworICAgIGZvciAoOzspCisgICAgeworCS8qIFJlcGVhdCB1bnRpbCBhIGxpbmUgaXMgZm91bmQgd2hpY2ggaXMgZGlmZmVyZW50IG9yIHRoZSBudW1iZXIgb2YKKwkgKiBsaW5lcyBoYXMgYmVjb21lIHplcm8uICovCisJd2hpbGUgKGRwLT5kZl9jb3VudFtpX29yZ10gPiAwKQorCXsKKwkgICAgLyogQ29weSB0aGUgbGluZSwgdGhlIG5leHQgbWxfZ2V0KCkgd2lsbCBpbnZhbGlkYXRlIGl0LiAgKi8KKwkgICAgaWYgKGRpciA9PSBCQUNLV0FSRCkKKwkJb2ZmX29yZyA9IGRwLT5kZl9jb3VudFtpX29yZ10gLSAxOworCSAgICBsaW5lX29yZyA9IHZpbV9zdHJzYXZlKG1sX2dldF9idWYoZGlmZmJ1ZltpX29yZ10sCisJCQkJCWRwLT5kZl9sbnVtW2lfb3JnXSArIG9mZl9vcmcsIEZBTFNFKSk7CisJICAgIGlmIChsaW5lX29yZyA9PSBOVUxMKQorCQlyZXR1cm47CisJICAgIGZvciAoaV9uZXcgPSBpX29yZyArIDE7IGlfbmV3IDwgREJfQ09VTlQ7ICsraV9uZXcpCisJICAgIHsKKwkJaWYgKGRpZmZidWZbaV9uZXddID09IE5VTEwpCisJCSAgICBjb250aW51ZTsKKwkJaWYgKGRpciA9PSBCQUNLV0FSRCkKKwkJICAgIG9mZl9uZXcgPSBkcC0+ZGZfY291bnRbaV9uZXddIC0gMTsKKwkJLyogaWYgb3RoZXIgYnVmZmVyIGRvZXNuJ3QgaGF2ZSB0aGlzIGxpbmUsIGl0IHdhcyBpbnNlcnRlZCAqLworCQlpZiAob2ZmX25ldyA8IDAgfHwgb2ZmX25ldyA+PSBkcC0+ZGZfY291bnRbaV9uZXddKQorCQkgICAgYnJlYWs7CisJCWlmIChkaWZmX2NtcChsaW5lX29yZywgbWxfZ2V0X2J1ZihkaWZmYnVmW2lfbmV3XSwKKwkJCQkgICBkcC0+ZGZfbG51bVtpX25ld10gKyBvZmZfbmV3LCBGQUxTRSkpICE9IDApCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICB2aW1fZnJlZShsaW5lX29yZyk7CisKKwkgICAgLyogU3RvcCB3aGVuIGEgbGluZSBpc24ndCBlcXVhbCBpbiBhbGwgZGlmZiBidWZmZXJzLiAqLworCSAgICBpZiAoaV9uZXcgIT0gREJfQ09VTlQpCisJCWJyZWFrOworCisJICAgIC8qIExpbmUgbWF0Y2hlZCBpbiBhbGwgYnVmZmVycywgcmVtb3ZlIGl0IGZyb20gdGhlIGRpZmYuICovCisJICAgIGZvciAoaV9uZXcgPSBpX29yZzsgaV9uZXcgPCBEQl9DT1VOVDsgKytpX25ldykKKwkJaWYgKGRpZmZidWZbaV9uZXddICE9IE5VTEwpCisJCXsKKwkJICAgIGlmIChkaXIgPT0gRk9SV0FSRCkKKwkJCSsrZHAtPmRmX2xudW1baV9uZXddOworCQkgICAgLS1kcC0+ZGZfY291bnRbaV9uZXddOworCQl9CisJfQorCWlmIChkaXIgPT0gQkFDS1dBUkQpCisJICAgIGJyZWFrOworCWRpciA9IEJBQ0tXQVJEOworICAgIH0KK30KKworLyoKKyAqIENoZWNrIGlmIGEgZGlmZiBibG9jayBkb2Vzbid0IGNvbnRhaW4gaW52YWxpZCBsaW5lIG51bWJlcnMuCisgKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgZGlmZiBwcm9ncmFtIHJldHVybnMgaW52YWxpZCByZXN1bHRzLgorICovCisgICAgc3RhdGljIGludAorZGlmZl9jaGVja19zYW5pdHkoZHApCisgICAgZGlmZl9UCSpkcDsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgREJfQ09VTlQ7ICsraSkKKwlpZiAoZGlmZmJ1ZltpXSAhPSBOVUxMKQorCSAgICBpZiAoZHAtPmRmX2xudW1baV0gKyBkcC0+ZGZfY291bnRbaV0gLSAxCisJCQkJCSAgICAgPiBkaWZmYnVmW2ldLT5iX21sLm1sX2xpbmVfY291bnQpCisJCXJldHVybiBGQUlMOworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIE1hcmsgYWxsIGRpZmYgYnVmZmVycyBmb3IgcmVkcmF3LgorICovCisgICAgc3RhdGljIHZvaWQKK2RpZmZfcmVkcmF3KGRvZm9sZCkKKyAgICBpbnQJCWRvZm9sZDsJICAgIC8qIGFsc28gcmVjb21wdXRlIHRoZSBmb2xkcyAqLworeworICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCW47CisKKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwlpZiAod3AtPndfcF9kaWZmKQorCXsKKwkgICAgcmVkcmF3X3dpbl9sYXRlcih3cCwgTk9UX1ZBTElEKTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgaWYgKGRvZm9sZCAmJiBmb2xkbWV0aG9kSXNEaWZmKHdwKSkKKwkJZm9sZFVwZGF0ZUFsbCh3cCk7CisjZW5kaWYKKwkgICAgLyogQSBjaGFuZ2UgbWF5IGhhdmUgbWFkZSBmaWxsZXIgbGluZXMgaW52YWxpZCwgbmVlZCB0byB0YWtlIGNhcmUKKwkgICAgICogb2YgdGhhdCBmb3Igb3RoZXIgd2luZG93cy4gKi8KKwkgICAgaWYgKHdwICE9IGN1cndpbiAmJiB3cC0+d190b3BmaWxsID4gMCkKKwkgICAgeworCQluID0gZGlmZl9jaGVjayh3cCwgd3AtPndfdG9wbGluZSk7CisJCWlmICh3cC0+d190b3BmaWxsID4gbikKKwkJICAgIHdwLT53X3RvcGZpbGwgPSAobiA8IDAgPyAwIDogbik7CisJICAgIH0KKwl9Cit9CisKKy8qCisgKiBXcml0ZSBidWZmZXIgImJ1ZiIgdG8gZmlsZSAibmFtZSIuCisgKiBBbHdheXMgdXNlICdmaWxlZm9ybWF0JyBzZXQgdG8gInVuaXgiLgorICogUmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUKKyAqLworICAgIHN0YXRpYyBpbnQKK2RpZmZfd3JpdGUoYnVmLCBmbmFtZSkKKyAgICBidWZfVAkqYnVmOworICAgIGNoYXJfdQkqZm5hbWU7Cit7CisgICAgaW50CQlyOworICAgIGNoYXJfdQkqc2F2ZV9mZjsKKworICAgIHNhdmVfZmYgPSBidWYtPmJfcF9mZjsKKyAgICBidWYtPmJfcF9mZiA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKilGRl9VTklYKTsKKyAgICByID0gYnVmX3dyaXRlKGJ1ZiwgZm5hbWUsIE5VTEwsIChsaW5lbnJfVCkxLCBidWYtPmJfbWwubWxfbGluZV9jb3VudCwKKwkJCQkJICAgICBOVUxMLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBUUlVFKTsKKyAgICBmcmVlX3N0cmluZ19vcHRpb24oYnVmLT5iX3BfZmYpOworICAgIGJ1Zi0+Yl9wX2ZmID0gc2F2ZV9mZjsKKyAgICByZXR1cm4gcjsKK30KKworLyoKKyAqIENvbXBsZXRlbHkgdXBkYXRlIHRoZSBkaWZmcyBmb3IgdGhlIGJ1ZmZlcnMgaW52b2x2ZWQuCisgKiBUaGlzIHVzZXMgdGhlIG9yZGluYXJ5ICJkaWZmIiBjb21tYW5kLgorICogVGhlIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gdG8gYSBmaWxlLCBhbHNvIGZvciB1bm1vZGlmaWVkIGJ1ZmZlcnMgKHRoZSBmaWxlCisgKiBjb3VsZCBoYXZlIGJlZW4gcHJvZHVjZWQgYnkgYXV0b2NvbW1hbmRzLCBlLmcuIHRoZSBuZXRydyBwbHVnaW4pLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitleF9kaWZmdXBkYXRlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWlkeF9vcmlnOworICAgIGludAkJaWR4X25ldzsKKyAgICBjaGFyX3UJKnRtcF9vcmlnOworICAgIGNoYXJfdQkqdG1wX25ldzsKKyAgICBjaGFyX3UJKnRtcF9kaWZmOworICAgIEZJTEUJKmZkOworICAgIGludAkJb2s7CisKKyAgICAvKiBEZWxldGUgYWxsIGRpZmZibG9ja3MuICovCisgICAgZGlmZl9jbGVhcigpOworICAgIGRpZmZfaW52YWxpZCA9IEZBTFNFOworCisgICAgLyogVXNlIHRoZSBmaXJzdCBidWZmZXIgYXMgdGhlIG9yaWdpbmFsIHRleHQuICovCisgICAgZm9yIChpZHhfb3JpZyA9IDA7IGlkeF9vcmlnIDwgREJfQ09VTlQ7ICsraWR4X29yaWcpCisJaWYgKGRpZmZidWZbaWR4X29yaWddICE9IE5VTEwpCisJICAgIGJyZWFrOworICAgIGlmIChpZHhfb3JpZyA9PSBEQl9DT1VOVCkKKwlyZXR1cm47CisKKyAgICAvKiBPbmx5IG5lZWQgdG8gZG8gc29tZXRoaW5nIHdoZW4gdGhlcmUgaXMgYW5vdGhlciBidWZmZXIuICovCisgICAgZm9yIChpZHhfbmV3ID0gaWR4X29yaWcgKyAxOyBpZHhfbmV3IDwgREJfQ09VTlQ7ICsraWR4X25ldykKKwlpZiAoZGlmZmJ1ZltpZHhfbmV3XSAhPSBOVUxMKQorCSAgICBicmVhazsKKyAgICBpZiAoaWR4X25ldyA9PSBEQl9DT1VOVCkKKwlyZXR1cm47CisKKyAgICAvKiBXZSBuZWVkIHRocmVlIHRlbXAgZmlsZSBuYW1lcy4gKi8KKyAgICB0bXBfb3JpZyA9IHZpbV90ZW1wbmFtZSgnbycpOworICAgIHRtcF9uZXcgPSB2aW1fdGVtcG5hbWUoJ24nKTsKKyAgICB0bXBfZGlmZiA9IHZpbV90ZW1wbmFtZSgnZCcpOworICAgIGlmICh0bXBfb3JpZyA9PSBOVUxMIHx8IHRtcF9uZXcgPT0gTlVMTCB8fCB0bXBfZGlmZiA9PSBOVUxMKQorCWdvdG8gdGhlZW5kOworCisgICAgLyoKKyAgICAgKiBEbyBhIHF1aWNrIHRlc3QgaWYgImRpZmYiIHJlYWxseSB3b3Jrcy4gIE90aGVyd2lzZSBpdCBsb29rcyBsaWtlIHRoZXJlCisgICAgICogYXJlIG5vIGRpZmZlcmVuY2VzLiAgQ2FuJ3QgdXNlIHRoZSByZXR1cm4gdmFsdWUsIGl0J3Mgbm9uLXplcm8gd2hlbgorICAgICAqIHRoZXJlIGFyZSBkaWZmZXJlbmNlcy4KKyAgICAgKiBNYXkgdHJ5IHR3aWNlLCBmaXJzdCB3aXRoICItYSIgYW5kIHRoZW4gd2l0aG91dC4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwlvayA9IEZBTFNFOworCWZkID0gZm9wZW4oKGNoYXIgKil0bXBfb3JpZywgInciKTsKKwlpZiAoZmQgIT0gTlVMTCkKKwl7CisJICAgIGZ3cml0ZSgibGluZTFcbiIsIChzaXplX3QpNiwgKHNpemVfdCkxLCBmZCk7CisJICAgIGZjbG9zZShmZCk7CisJICAgIGZkID0gZm9wZW4oKGNoYXIgKil0bXBfbmV3LCAidyIpOworCSAgICBpZiAoZmQgIT0gTlVMTCkKKwkgICAgeworCQlmd3JpdGUoImxpbmUyXG4iLCAoc2l6ZV90KTYsIChzaXplX3QpMSwgZmQpOworCQlmY2xvc2UoZmQpOworCQlkaWZmX2ZpbGUodG1wX29yaWcsIHRtcF9uZXcsIHRtcF9kaWZmKTsKKwkJZmQgPSBmb3BlbigoY2hhciAqKXRtcF9kaWZmLCAiciIpOworCQlpZiAoZmQgIT0gTlVMTCkKKwkJeworCQkgICAgY2hhcl91CWxpbmVidWZbTEJVRkxFTl07CisKKwkJICAgIGZvciAoOzspCisJCSAgICB7CisJCQkvKiBUaGVyZSBtdXN0IGJlIGEgbGluZSB0aGF0IGNvbnRhaW5zICIxYzEiLiAqLworCQkJaWYgKHRhZ19mZ2V0cyhsaW5lYnVmLCBMQlVGTEVOLCBmZCkpCisJCQkgICAgYnJlYWs7CisJCQlpZiAoU1RSTkNNUChsaW5lYnVmLCAiMWMxIiwgMykgPT0gMCkKKwkJCSAgICBvayA9IFRSVUU7CisJCSAgICB9CisJCSAgICBmY2xvc2UoZmQpOworCQl9CisJCW1jaF9yZW1vdmUodG1wX2RpZmYpOworCQltY2hfcmVtb3ZlKHRtcF9uZXcpOworCSAgICB9CisJICAgIG1jaF9yZW1vdmUodG1wX29yaWcpOworCX0KKworI2lmZGVmIEZFQVRfRVZBTAorCS8qIFdoZW4gdXNpbmcgJ2RpZmZleHByJyBicmVhayBoZXJlLiAqLworCWlmICgqcF9kZXggIT0gTlVMKQorCSAgICBicmVhazsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNU1dJTikgfHwgZGVmaW5lZChNU0RPUykKKwkvKiBJZiB0aGUgIi1hIiBhcmd1bWVudCB3b3JrcywgYWxzbyBjaGVjayBpZiAiLS1iaW5hcnkiIHdvcmtzLiAqLworCWlmIChvayAmJiBkaWZmX2Ffd29ya3MgPT0gTUFZQkUgJiYgZGlmZl9iaW5fd29ya3MgPT0gTUFZQkUpCisJeworCSAgICBkaWZmX2Ffd29ya3MgPSBUUlVFOworCSAgICBkaWZmX2Jpbl93b3JrcyA9IFRSVUU7CisJICAgIGNvbnRpbnVlOworCX0KKwlpZiAoIW9rICYmIGRpZmZfYV93b3JrcyA9PSBUUlVFICYmIGRpZmZfYmluX3dvcmtzID09IFRSVUUpCisJeworCSAgICAvKiBUcmllZCAtLWJpbmFyeSwgYnV0IGl0IGZhaWxlZC4gIi1hIiB3b3JrcyB0aG91Z2guICovCisJICAgIGRpZmZfYmluX3dvcmtzID0gRkFMU0U7CisJICAgIG9rID0gVFJVRTsKKwl9CisjZW5kaWYKKworCS8qIElmIHdlIGNoZWNrZWQgaWYgIi1hIiB3b3JrcyBhbHJlYWR5LCBicmVhayBoZXJlLiAqLworCWlmIChkaWZmX2Ffd29ya3MgIT0gTUFZQkUpCisJICAgIGJyZWFrOworCWRpZmZfYV93b3JrcyA9IG9rOworCisJLyogSWYgIi1hIiB3b3JrcyBicmVhayBoZXJlLCBvdGhlcndpc2UgcmV0cnkgd2l0aG91dCAiLWEiLiAqLworCWlmIChvaykKKwkgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghb2spCisgICAgeworCUVNU0coXygiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIikpOworCWRpZmZfYV93b3JrcyA9IE1BWUJFOworI2lmIGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoTVNET1MpCisJZGlmZl9iaW5fd29ya3MgPSBNQVlCRTsKKyNlbmRpZgorCWdvdG8gdGhlZW5kOworICAgIH0KKworICAgIC8qIFdyaXRlIHRoZSBmaXJzdCBidWZmZXIgdG8gYSB0ZW1wZmlsZS4gKi8KKyAgICBidWYgPSBkaWZmYnVmW2lkeF9vcmlnXTsKKyAgICBpZiAoZGlmZl93cml0ZShidWYsIHRtcF9vcmlnKSA9PSBGQUlMKQorCWdvdG8gdGhlZW5kOworCisgICAgLyogTWFrZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZmlyc3QgYnVmZmVyIGFuZCBldmVyeSBvdGhlci4gKi8KKyAgICBmb3IgKGlkeF9uZXcgPSBpZHhfb3JpZyArIDE7IGlkeF9uZXcgPCBEQl9DT1VOVDsgKytpZHhfbmV3KQorICAgIHsKKwlidWYgPSBkaWZmYnVmW2lkeF9uZXddOworCWlmIChidWYgPT0gTlVMTCkKKwkgICAgY29udGludWU7CisJaWYgKGRpZmZfd3JpdGUoYnVmLCB0bXBfbmV3KSA9PSBGQUlMKQorCSAgICBjb250aW51ZTsKKwlkaWZmX2ZpbGUodG1wX29yaWcsIHRtcF9uZXcsIHRtcF9kaWZmKTsKKworCS8qIFJlYWQgdGhlIGRpZmYgb3V0cHV0IGFuZCBhZGQgZWFjaCBlbnRyeSB0byB0aGUgZGlmZiBsaXN0LiAqLworCWRpZmZfcmVhZChpZHhfb3JpZywgaWR4X25ldywgdG1wX2RpZmYpOworCW1jaF9yZW1vdmUodG1wX2RpZmYpOworCW1jaF9yZW1vdmUodG1wX25ldyk7CisgICAgfQorICAgIG1jaF9yZW1vdmUodG1wX29yaWcpOworCisgICAgZGlmZl9yZWRyYXcoVFJVRSk7CisKK3RoZWVuZDoKKyAgICB2aW1fZnJlZSh0bXBfb3JpZyk7CisgICAgdmltX2ZyZWUodG1wX25ldyk7CisgICAgdmltX2ZyZWUodG1wX2RpZmYpOworfQorCisvKgorICogTWFrZSBhIGRpZmYgYmV0d2VlbiBmaWxlcyAidG1wX29yaWciIGFuZCAidG1wX25ldyIsIHJlc3VsdHMgaW4gInRtcF9kaWZmIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitkaWZmX2ZpbGUodG1wX29yaWcsIHRtcF9uZXcsIHRtcF9kaWZmKQorICAgIGNoYXJfdQkqdG1wX29yaWc7CisgICAgY2hhcl91CSp0bXBfbmV3OworICAgIGNoYXJfdQkqdG1wX2RpZmY7Cit7CisgICAgY2hhcl91CSpjbWQ7CisKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBpZiAoKnBfZGV4ICE9IE5VTCkKKwkvKiBVc2UgJ2RpZmZleHByJyB0byBnZW5lcmF0ZSB0aGUgZGlmZiBmaWxlLiAqLworCWV2YWxfZGlmZih0bXBfb3JpZywgdG1wX25ldywgdG1wX2RpZmYpOworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwljbWQgPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTih0bXBfb3JpZykgKyBTVFJMRU4odG1wX25ldykKKwkJCQkrIFNUUkxFTih0bXBfZGlmZikgKyBTVFJMRU4ocF9zcnIpICsgMjcpKTsKKwlpZiAoY21kICE9IE5VTEwpCisJeworCSAgICAvKiBCdWlsZCB0aGUgZGlmZiBjb21tYW5kIGFuZCBleGVjdXRlIGl0LiAgQWx3YXlzIHVzZSAtYSwgYmluYXJ5CisJICAgICAqIGRpZmZlcmVuY2VzIGFyZSBvZiBubyB1c2UuICBJZ25vcmUgZXJyb3JzLCBkaWZmIHJldHVybnMKKwkgICAgICogbm9uLXplcm8gd2hlbiBkaWZmZXJlbmNlcyBoYXZlIGJlZW4gZm91bmQuICovCisJICAgIHNwcmludGYoKGNoYXIgKiljbWQsICJkaWZmICVzJXMlcyVzJXMgJXMiLAorCQkgICAgZGlmZl9hX3dvcmtzID09IEZBTFNFID8gIiIgOiAiLWEgIiwKKyNpZiBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKE1TRE9TKQorCQkgICAgZGlmZl9iaW5fd29ya3MgPT0gVFJVRSA/ICItLWJpbmFyeSAiIDogIiIsCisjZWxzZQorCQkgICAgIiIsCisjZW5kaWYKKwkJICAgIChkaWZmX2ZsYWdzICYgRElGRl9JV0hJVEUpID8gIi1iICIgOiAiIiwKKwkJICAgIChkaWZmX2ZsYWdzICYgRElGRl9JQ0FTRSkgPyAiLWkgIiA6ICIiLAorCQkgICAgdG1wX29yaWcsIHRtcF9uZXcpOworCSAgICBhcHBlbmRfcmVkaXIoY21kLCBwX3NyciwgdG1wX2RpZmYpOworCSAgICAodm9pZCljYWxsX3NoZWxsKGNtZCwgU0hFTExfRklMVEVSfFNIRUxMX1NJTEVOVHxTSEVMTF9ET09VVCk7CisJICAgIHZpbV9mcmVlKGNtZCk7CisJfQorICAgIH0KK30KKworLyoKKyAqIENyZWF0ZSBhIG5ldyB2ZXJzaW9uIG9mIGEgZmlsZSBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgYSBkaWZmIGZpbGUuCisgKiBUaGUgYnVmZmVyIGlzIHdyaXR0ZW4gdG8gYSBmaWxlLCBhbHNvIGZvciB1bm1vZGlmaWVkIGJ1ZmZlcnMgKHRoZSBmaWxlCisgKiBjb3VsZCBoYXZlIGJlZW4gcHJvZHVjZWQgYnkgYXV0b2NvbW1hbmRzLCBlLmcuIHRoZSBuZXRydyBwbHVnaW4pLgorICovCisgICAgdm9pZAorZXhfZGlmZnBhdGNoKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcl91CSp0bXBfb3JpZzsJLyogbmFtZSBvZiBvcmlnaW5hbCB0ZW1wIGZpbGUgKi8KKyAgICBjaGFyX3UJKnRtcF9uZXc7CS8qIG5hbWUgb2YgcGF0Y2hlZCB0ZW1wIGZpbGUgKi8KKyAgICBjaGFyX3UJKmJ1ZiA9IE5VTEw7CisgICAgd2luX1QJKm9sZF9jdXJ3aW4gPSBjdXJ3aW47CisgICAgY2hhcl91CSpuZXduYW1lID0gTlVMTDsJLyogbmFtZSBvZiBwYXRjaGVkIGZpbGUgYnVmZmVyICovCisjaWZkZWYgVU5JWAorICAgIGNoYXJfdQlkaXJidWZbTUFYUEFUSExdOworICAgIGNoYXJfdQkqZnVsbG5hbWUgPSBOVUxMOworI2VuZGlmCisjaWZkZWYgRkVBVF9CUk9XU0UKKyAgICBjaGFyX3UJKmJyb3dzZUZpbGUgPSBOVUxMOworICAgIGludAkJYnJvd3NlX2ZsYWcgPSBjbWRtb2QuYnJvd3NlOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0JST1dTRQorICAgIGlmIChjbWRtb2QuYnJvd3NlKQorICAgIHsKKwlicm93c2VGaWxlID0gZG9fYnJvd3NlKEZBTFNFLCAoY2hhcl91ICopXygiUGF0Y2ggZmlsZSIpLAorCQkJIGVhcC0+YXJnLCBOVUxMLCBOVUxMLCBCUk9XU0VfRklMVEVSX0FMTF9GSUxFUywgTlVMTCk7CisJaWYgKGJyb3dzZUZpbGUgPT0gTlVMTCkKKwkgICAgcmV0dXJuOwkJLyogb3BlcmF0aW9uIGNhbmNlbGxlZCAqLworCWVhcC0+YXJnID0gYnJvd3NlRmlsZTsKKwljbWRtb2QuYnJvd3NlID0gRkFMU0U7CS8qIGRvbid0IGxldCBkb19lY21kKCkgYnJvd3NlIGFnYWluICovCisgICAgfQorI2VuZGlmCisKKyAgICAvKiBXZSBuZWVkIHR3byB0ZW1wIGZpbGUgbmFtZXMuICovCisgICAgdG1wX29yaWcgPSB2aW1fdGVtcG5hbWUoJ28nKTsKKyAgICB0bXBfbmV3ID0gdmltX3RlbXBuYW1lKCduJyk7CisgICAgaWYgKHRtcF9vcmlnID09IE5VTEwgfHwgdG1wX25ldyA9PSBOVUxMKQorCWdvdG8gdGhlZW5kOworCisgICAgLyogV3JpdGUgdGhlIGN1cnJlbnQgYnVmZmVyIHRvICJ0bXBfb3JpZyIuICovCisgICAgaWYgKGJ1Zl93cml0ZShjdXJidWYsIHRtcF9vcmlnLCBOVUxMLAorCQkobGluZW5yX1QpMSwgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQsCisJCQkJICAgICBOVUxMLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBUUlVFKSA9PSBGQUlMKQorCWdvdG8gdGhlZW5kOworCisjaWZkZWYgVU5JWAorICAgIC8qIEdldCB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcGF0Y2hmaWxlLCBjaGFuZ2luZyBkaXJlY3RvcnkgYmVsb3cuICovCisgICAgZnVsbG5hbWUgPSBGdWxsTmFtZV9zYXZlKGVhcC0+YXJnLCBGQUxTRSk7CisjZW5kaWYKKyAgICBidWYgPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTih0bXBfb3JpZykgKyAoCisjIGlmZGVmIFVOSVgKKwkJICAgIGZ1bGxuYW1lICE9IE5VTEwgPyBTVFJMRU4oZnVsbG5hbWUpIDoKKyMgZW5kaWYKKwkJICAgIFNUUkxFTihlYXAtPmFyZykpICsgU1RSTEVOKHRtcF9uZXcpICsgMTYpKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisJZ290byB0aGVlbmQ7CisKKyNpZmRlZiBVTklYCisgICAgLyogVGVtcG9yYXJhbHkgY2hkaXIgdG8gL3RtcCwgdG8gYXZvaWQgcGF0Y2hpbmcgZmlsZXMgaW4gdGhlIGN1cnJlbnQKKyAgICAgKiBkaXJlY3Rvcnkgd2hlbiB0aGUgcGF0Y2ggZmlsZSBjb250YWlucyBtb3JlIHRoYW4gb25lIHBhdGNoLiAgV2hlbiB3ZQorICAgICAqIGhhdmUgb3VyIG93biB0ZW1wIGRpciB1c2UgdGhhdCBpbnN0ZWFkLCBpdCB3aWxsIGJlIGNsZWFuZWQgdXAgd2hlbiB3ZQorICAgICAqIGV4aXQgKGFueSAucmVqIGZpbGVzIGNyZWF0ZWQpLiAgRG9uJ3QgY2hhbmdlIGRpcmVjdG9yeSBpZiB3ZSBjYW4ndAorICAgICAqIHJldHVybiB0byB0aGUgY3VycmVudC4gKi8KKyAgICBpZiAobWNoX2Rpcm5hbWUoZGlyYnVmLCBNQVhQQVRITCkgIT0gT0sgfHwgbWNoX2NoZGlyKChjaGFyICopZGlyYnVmKSAhPSAwKQorCWRpcmJ1ZlswXSA9IE5VTDsKKyAgICBlbHNlCisgICAgeworIyBpZmRlZiBURU1QRElSTkFNRVMKKwlpZiAodmltX3RlbXBkaXIgIT0gTlVMTCkKKwkgICAgbWNoX2NoZGlyKChjaGFyICopdmltX3RlbXBkaXIpOworCWVsc2UKKyMgZW5kaWYKKwkgICAgbWNoX2NoZGlyKCIvdG1wIik7CisJc2hvcnRlbl9mbmFtZXMoVFJVRSk7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBpZiAoKnBfcGV4ICE9IE5VTCkKKwkvKiBVc2UgJ3BhdGNoZXhwcicgdG8gZ2VuZXJhdGUgdGhlIG5ldyBmaWxlLiAqLworCWV2YWxfcGF0Y2godG1wX29yaWcsCisjIGlmZGVmIFVOSVgKKwkJZnVsbG5hbWUgIT0gTlVMTCA/IGZ1bGxuYW1lIDoKKyMgZW5kaWYKKwkJZWFwLT5hcmcsIHRtcF9uZXcpOworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwkvKiBCdWlsZCB0aGUgcGF0Y2ggY29tbWFuZCBhbmQgZXhlY3V0ZSBpdC4gIElnbm9yZSBlcnJvcnMuICBTd2l0Y2ggdG8KKwkgKiBjb29rZWQgbW9kZSB0byBhbGxvdyB0aGUgdXNlciB0byByZXNwb25kIHRvIHByb21wdHMuICovCisJc3ByaW50ZigoY2hhciAqKWJ1ZiwgInBhdGNoIC1vICVzICVzIDwgXCIlc1wiIiwgdG1wX25ldywgdG1wX29yaWcsCisjIGlmZGVmIFVOSVgKKwkJZnVsbG5hbWUgIT0gTlVMTCA/IGZ1bGxuYW1lIDoKKyMgZW5kaWYKKwkJZWFwLT5hcmcpOworCSh2b2lkKWNhbGxfc2hlbGwoYnVmLCBTSEVMTF9GSUxURVIgfCBTSEVMTF9DT09LRUQpOworICAgIH0KKworI2lmZGVmIFVOSVgKKyAgICBpZiAoZGlyYnVmWzBdICE9IE5VTCkKKyAgICB7CisJaWYgKG1jaF9jaGRpcigoY2hhciAqKWRpcmJ1ZikgIT0gMCkKKwkgICAgRU1TRyhfKGVfcHJldl9kaXIpKTsKKwlzaG9ydGVuX2ZuYW1lcyhUUlVFKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIHBhdGNoIHByb2JhYmx5IGhhcyB3cml0dGVuIG92ZXIgdGhlIHNjcmVlbiAqLworICAgIHJlZHJhd19sYXRlcihDTEVBUik7CisKKyAgICAvKiBEZWxldGUgYW55IC5vcmlnIG9yIC5yZWogZmlsZSBjcmVhdGVkLiAqLworICAgIFNUUkNQWShidWYsIHRtcF9uZXcpOworICAgIFNUUkNBVChidWYsICIub3JpZyIpOworICAgIG1jaF9yZW1vdmUoYnVmKTsKKyAgICBTVFJDUFkoYnVmLCB0bXBfbmV3KTsKKyAgICBTVFJDQVQoYnVmLCAiLnJlaiIpOworICAgIG1jaF9yZW1vdmUoYnVmKTsKKworICAgIGlmIChjdXJidWYtPmJfZm5hbWUgIT0gTlVMTCkKKyAgICB7CisJbmV3bmFtZSA9IHZpbV9zdHJuc2F2ZShjdXJidWYtPmJfZm5hbWUsCisJCQkJCSAgKGludCkoU1RSTEVOKGN1cmJ1Zi0+Yl9mbmFtZSkgKyA0KSk7CisJaWYgKG5ld25hbWUgIT0gTlVMTCkKKwkgICAgU1RSQ0FUKG5ld25hbWUsICIubmV3Iik7CisgICAgfQorCisjaWZkZWYgRkVBVF9HVUkKKyAgICBuZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworI2VuZGlmCisgICAgaWYgKHdpbl9zcGxpdCgwLCAwKSAhPSBGQUlMKQorICAgIHsKKwkvKiBQcmV0ZW5kIGl0IHdhcyBhICI6c3BsaXQgZm5hbWUiIGNvbW1hbmQgKi8KKwllYXAtPmNtZGlkeCA9IENNRF9zcGxpdDsKKwllYXAtPmFyZyA9IHRtcF9uZXc7CisJZG9fZXhlZGl0KGVhcCwgb2xkX2N1cndpbik7CisKKwlpZiAoY3Vyd2luICE9IG9sZF9jdXJ3aW4pCQkvKiBzcGxpdCBtdXN0IGhhdmUgd29ya2VkICovCisJeworCSAgICAvKiBTZXQgJ2RpZmYnLCAnc2Nyb2xsYmluZCcgb24gYW5kICd3cmFwJyBvZmYuICovCisJICAgIGRpZmZfd2luX29wdGlvbnMoY3Vyd2luLCBUUlVFKTsKKwkgICAgZGlmZl93aW5fb3B0aW9ucyhvbGRfY3Vyd2luLCBUUlVFKTsKKworCSAgICBpZiAobmV3bmFtZSAhPSBOVUxMKQorCSAgICB7CisJCS8qIGRvIGEgIjpmaWxlIGZpbGVuYW1lLm5ldyIgb24gdGhlIHBhdGNoZWQgYnVmZmVyICovCisJCWVhcC0+YXJnID0gbmV3bmFtZTsKKwkJZXhfZmlsZShlYXApOworCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJCS8qIERvIGZpbGV0eXBlIGRldGVjdGlvbiB3aXRoIHRoZSBuZXcgbmFtZS4gKi8KKwkJZG9fY21kbGluZV9jbWQoKGNoYXJfdSAqKSI6ZG9hdSBmaWxldHlwZWRldGVjdCBCdWZSZWFkIik7CisjZW5kaWYKKwkgICAgfQorCX0KKyAgICB9CisKK3RoZWVuZDoKKyAgICBpZiAodG1wX29yaWcgIT0gTlVMTCkKKwltY2hfcmVtb3ZlKHRtcF9vcmlnKTsKKyAgICB2aW1fZnJlZSh0bXBfb3JpZyk7CisgICAgaWYgKHRtcF9uZXcgIT0gTlVMTCkKKwltY2hfcmVtb3ZlKHRtcF9uZXcpOworICAgIHZpbV9mcmVlKHRtcF9uZXcpOworICAgIHZpbV9mcmVlKG5ld25hbWUpOworICAgIHZpbV9mcmVlKGJ1Zik7CisjaWZkZWYgVU5JWAorICAgIHZpbV9mcmVlKGZ1bGxuYW1lKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQlJPV1NFCisgICAgdmltX2ZyZWUoYnJvd3NlRmlsZSk7CisgICAgY21kbW9kLmJyb3dzZSA9IGJyb3dzZV9mbGFnOworI2VuZGlmCit9CisKKy8qCisgKiBTcGxpdCB0aGUgd2luZG93IGFuZCBlZGl0IGFub3RoZXIgZmlsZSwgc2V0dGluZyBvcHRpb25zIHRvIHNob3cgdGhlIGRpZmZzLgorICovCisgICAgdm9pZAorZXhfZGlmZnNwbGl0KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgd2luX1QJKm9sZF9jdXJ3aW4gPSBjdXJ3aW47CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIG5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKyAgICBpZiAod2luX3NwbGl0KDAsIDApICE9IEZBSUwpCisgICAgeworCS8qIFByZXRlbmQgaXQgd2FzIGEgIjpzcGxpdCBmbmFtZSIgY29tbWFuZCAqLworCWVhcC0+Y21kaWR4ID0gQ01EX3NwbGl0OworCWRvX2V4ZWRpdChlYXAsIG9sZF9jdXJ3aW4pOworCisJaWYgKGN1cndpbiAhPSBvbGRfY3Vyd2luKQkJLyogc3BsaXQgbXVzdCBoYXZlIHdvcmtlZCAqLworCXsKKwkgICAgLyogU2V0ICdkaWZmJywgJ3Njcm9sbGJpbmQnIG9uIGFuZCAnd3JhcCcgb2ZmLiAqLworCSAgICBkaWZmX3dpbl9vcHRpb25zKGN1cndpbiwgVFJVRSk7CisJICAgIGRpZmZfd2luX29wdGlvbnMob2xkX2N1cndpbiwgVFJVRSk7CisJfQorICAgIH0KK30KKworLyoKKyAqIFNldCBvcHRpb25zIHRvIHNob3cgZGlmcyBmb3IgdGhlIGN1cnJlbnQgd2luZG93LgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitleF9kaWZmdGhpcyhlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIC8qIFNldCAnZGlmZicsICdzY3JvbGxiaW5kJyBvbiBhbmQgJ3dyYXAnIG9mZi4gKi8KKyAgICBkaWZmX3dpbl9vcHRpb25zKGN1cndpbiwgVFJVRSk7Cit9CisKKy8qCisgKiBTZXQgb3B0aW9ucyBpbiB3aW5kb3cgIndwIiBmb3IgZGlmZiBtb2RlLgorICovCisgICAgdm9pZAorZGlmZl93aW5fb3B0aW9ucyh3cCwgYWRkYnVmKQorICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCWFkZGJ1ZjsJCS8qIEFkZCBidWZmZXIgdG8gZGlmZi4gKi8KK3sKKyAgICB3cC0+d19wX2RpZmYgPSBUUlVFOworICAgIHdwLT53X3Bfc2NiID0gVFJVRTsKKyAgICB3cC0+d19wX3dyYXAgPSBGQUxTRTsKKyMgaWZkZWYgRkVBVF9GT0xESU5HCisgICAgeworCXdpbl9UCSAgICAqb2xkX2N1cndpbiA9IGN1cndpbjsKKworCWN1cndpbiA9IHdwOworCWN1cmJ1ZiA9IGN1cndpbi0+d19idWZmZXI7CisJc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0KChjaGFyX3UgKikiZmRtIiwgLTEsIChjaGFyX3UgKikiZGlmZiIsCisJCQkJCQkJICBPUFRfTE9DQUx8T1BUX0ZSRUUpOworCWN1cndpbiA9IG9sZF9jdXJ3aW47CisJY3VyYnVmID0gY3Vyd2luLT53X2J1ZmZlcjsKKwl3cC0+d19wX2ZkYyA9IDI7CisJd3AtPndfcF9mZW4gPSBUUlVFOworCXdwLT53X3BfZmRsID0gMDsKKwlmb2xkVXBkYXRlQWxsKHdwKTsKKwljaGFuZ2VkX3dpbmRvd19zZXR0aW5nKCk7IC8qIG1ha2Ugc3VyZSB0b3BsaW5lIGlzIG5vdCBoYWxmd2F5IGEgZm9sZCAqLworICAgIH0KKyMgZW5kaWYKKyNpZmRlZiBGRUFUX1NDUk9MTEJJTkQKKyAgICBpZiAodmltX3N0cmNocihwX3NibywgJ2gnKSA9PSBOVUxMKQorCWRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikic2V0IHNibys9aG9yIik7CisjZW5kaWYKKworICAgIGlmIChhZGRidWYpCisJZGlmZl9idWZfYWRkKHdwLT53X2J1ZmZlcik7CisgICAgcmVkcmF3X3dpbl9sYXRlcih3cCwgTk9UX1ZBTElEKTsKK30KKworLyoKKyAqIFJlYWQgdGhlIGRpZmYgb3V0cHV0IGFuZCBhZGQgZWFjaCBlbnRyeSB0byB0aGUgZGlmZiBsaXN0LgorICovCisgICAgc3RhdGljIHZvaWQKK2RpZmZfcmVhZChpZHhfb3JpZywgaWR4X25ldywgZm5hbWUpCisgICAgaW50CQlpZHhfb3JpZzsJLyogaWR4IG9mIG9yaWdpbmFsIGZpbGUgKi8KKyAgICBpbnQJCWlkeF9uZXc7CS8qIGlkeCBvZiBuZXcgZmlsZSAqLworICAgIGNoYXJfdQkqZm5hbWU7CQkvKiBuYW1lIG9mIGRpZmYgb3V0cHV0IGZpbGUgKi8KK3sKKyAgICBGSUxFCSpmZDsKKyAgICBkaWZmX1QJKmRwcmV2ID0gTlVMTDsKKyAgICBkaWZmX1QJKmRwID0gZmlyc3RfZGlmZjsKKyAgICBkaWZmX1QJKmRuLCAqZHBsOworICAgIGxvbmcJZjEsIGwxLCBmMiwgbDI7CisgICAgY2hhcl91CWxpbmVidWZbTEJVRkxFTl07ICAgLyogb25seSBuZWVkIHRvIGhvbGQgdGhlIGRpZmYgbGluZSAqLworICAgIGludAkJZGlmZnR5cGU7CisgICAgY2hhcl91CSpwOworICAgIGxvbmcJb2ZmOworICAgIGludAkJaTsKKyAgICBsaW5lbnJfVAlsbnVtX29yaWcsIGxudW1fbmV3OworICAgIGxvbmcJY291bnRfb3JpZywgY291bnRfbmV3OworICAgIGludAkJbm90c2V0ID0gVFJVRTsJICAgIC8qIGJsb2NrICIqZHAiIG5vdCBzZXQgeWV0ICovCisKKyAgICBmZCA9IGZvcGVuKChjaGFyICopZm5hbWUsICJyIik7CisgICAgaWYgKGZkID09IE5VTEwpCisgICAgeworCUVNU0coXygiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgZm9yICg7OykKKyAgICB7CisJaWYgKHRhZ19mZ2V0cyhsaW5lYnVmLCBMQlVGTEVOLCBmZCkpCisJICAgIGJyZWFrOwkJLyogZW5kIG9mIGZpbGUgKi8KKwlpZiAoIWlzZGlnaXQoKmxpbmVidWYpKQorCSAgICBjb250aW51ZTsJCS8qIG5vdCB0aGUgc3RhcnQgb2YgYSBkaWZmIGJsb2NrICovCisKKwkvKiBUaGlzIGxpbmUgbXVzdCBiZSBvbmUgb2YgdGhyZWUgZm9ybWF0czoKKwkgKiB7Zmlyc3R9Wyx7bGFzdH1dY3tmaXJzdH1bLHtsYXN0fV0KKwkgKiB7Zmlyc3R9YXtmaXJzdH1bLHtsYXN0fV0KKwkgKiB7Zmlyc3R9Wyx7bGFzdH1dZHtmaXJzdH0KKwkgKi8KKwlwID0gbGluZWJ1ZjsKKwlmMSA9IGdldGRpZ2l0cygmcCk7CisJaWYgKCpwID09ICcsJykKKwl7CisJICAgICsrcDsKKwkgICAgbDEgPSBnZXRkaWdpdHMoJnApOworCX0KKwllbHNlCisJICAgIGwxID0gZjE7CisJaWYgKCpwICE9ICdhJyAmJiAqcCAhPSAnYycgJiYgKnAgIT0gJ2QnKQorCSAgICBjb250aW51ZTsJCS8qIGludmFsaWQgZGlmZiBmb3JtYXQgKi8KKwlkaWZmdHlwZSA9ICpwKys7CisJZjIgPSBnZXRkaWdpdHMoJnApOworCWlmICgqcCA9PSAnLCcpCisJeworCSAgICArK3A7CisJICAgIGwyID0gZ2V0ZGlnaXRzKCZwKTsKKwl9CisJZWxzZQorCSAgICBsMiA9IGYyOworCWlmIChsMSA8IGYxIHx8IGwyIDwgZjIpCisJICAgIGNvbnRpbnVlOwkJLyogaW52YWxpZCBsaW5lIHJhbmdlICovCisKKwlpZiAoZGlmZnR5cGUgPT0gJ2EnKQorCXsKKwkgICAgbG51bV9vcmlnID0gZjEgKyAxOworCSAgICBjb3VudF9vcmlnID0gMDsKKwl9CisJZWxzZQorCXsKKwkgICAgbG51bV9vcmlnID0gZjE7CisJICAgIGNvdW50X29yaWcgPSBsMSAtIGYxICsgMTsKKwl9CisJaWYgKGRpZmZ0eXBlID09ICdkJykKKwl7CisJICAgIGxudW1fbmV3ID0gZjIgKyAxOworCSAgICBjb3VudF9uZXcgPSAwOworCX0KKwllbHNlCisJeworCSAgICBsbnVtX25ldyA9IGYyOworCSAgICBjb3VudF9uZXcgPSBsMiAtIGYyICsgMTsKKwl9CisKKwkvKiBHbyBvdmVyIGJsb2NrcyBiZWZvcmUgdGhlIGNoYW5nZSwgZm9yIHdoaWNoIG9yaWcgYW5kIG5ldyBhcmUgZXF1YWwuCisJICogQ29weSBibG9ja3MgZnJvbSBvcmlnIHRvIG5ldy4gKi8KKwl3aGlsZSAoZHAgIT0gTlVMTAorCQkmJiBsbnVtX29yaWcgPiBkcC0+ZGZfbG51bVtpZHhfb3JpZ10gKyBkcC0+ZGZfY291bnRbaWR4X29yaWddKQorCXsKKwkgICAgaWYgKG5vdHNldCkKKwkJZGlmZl9jb3B5X2VudHJ5KGRwcmV2LCBkcCwgaWR4X29yaWcsIGlkeF9uZXcpOworCSAgICBkcHJldiA9IGRwOworCSAgICBkcCA9IGRwLT5kZl9uZXh0OworCSAgICBub3RzZXQgPSBUUlVFOworCX0KKworCWlmIChkcCAhPSBOVUxMCisJCSYmIGxudW1fb3JpZyA8PSBkcC0+ZGZfbG51bVtpZHhfb3JpZ10gKyBkcC0+ZGZfY291bnRbaWR4X29yaWddCisJCSYmIGxudW1fb3JpZyArIGNvdW50X29yaWcgPj0gZHAtPmRmX2xudW1baWR4X29yaWddKQorCXsKKwkgICAgLyogTmV3IGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3RpbmcgYmxvY2socykuCisJICAgICAqIEZpcnN0IGZpbmQgbGFzdCBibG9jayB0aGF0IG92ZXJsYXBzLiAqLworCSAgICBmb3IgKGRwbCA9IGRwOyBkcGwtPmRmX25leHQgIT0gTlVMTDsgZHBsID0gZHBsLT5kZl9uZXh0KQorCQlpZiAobG51bV9vcmlnICsgY291bnRfb3JpZyA8IGRwbC0+ZGZfbmV4dC0+ZGZfbG51bVtpZHhfb3JpZ10pCisJCSAgICBicmVhazsKKworCSAgICAvKiBJZiB0aGUgbmV3bHkgZm91bmQgYmxvY2sgc3RhcnRzIGJlZm9yZSB0aGUgb2xkIG9uZSwgc2V0IHRoZQorCSAgICAgKiBzdGFydCBiYWNrIGEgbnVtYmVyIG9mIGxpbmVzLiAqLworCSAgICBvZmYgPSBkcC0+ZGZfbG51bVtpZHhfb3JpZ10gLSBsbnVtX29yaWc7CisJICAgIGlmIChvZmYgPiAwKQorCSAgICB7CisJCWZvciAoaSA9IGlkeF9vcmlnOyBpIDwgaWR4X25ldzsgKytpKQorCQkgICAgaWYgKGRpZmZidWZbaV0gIT0gTlVMTCkKKwkJCWRwLT5kZl9sbnVtW2ldIC09IG9mZjsKKwkJZHAtPmRmX2xudW1baWR4X25ld10gPSBsbnVtX25ldzsKKwkJZHAtPmRmX2NvdW50W2lkeF9uZXddID0gY291bnRfbmV3OworCSAgICB9CisJICAgIGVsc2UgaWYgKG5vdHNldCkKKwkgICAgeworCQkvKiBuZXcgYmxvY2sgaW5zaWRlIGV4aXN0aW5nIG9uZSwgYWRqdXN0IG5ldyBibG9jayAqLworCQlkcC0+ZGZfbG51bVtpZHhfbmV3XSA9IGxudW1fbmV3ICsgb2ZmOworCQlkcC0+ZGZfY291bnRbaWR4X25ld10gPSBjb3VudF9uZXcgLSBvZmY7CisJICAgIH0KKwkgICAgZWxzZQorCQkvKiBzZWNvbmQgb3ZlcmxhcCBvZiBuZXcgYmxvY2sgd2l0aCBleGlzdGluZyBibG9jayAqLworCQlkcC0+ZGZfY291bnRbaWR4X25ld10gKz0gY291bnRfbmV3IC0gY291bnRfb3JpZzsKKworCSAgICAvKiBBZGp1c3QgdGhlIHNpemUgb2YgdGhlIGJsb2NrIHRvIGluY2x1ZGUgYWxsIHRoZSBsaW5lcyB0byB0aGUKKwkgICAgICogZW5kIG9mIHRoZSBleGlzdGluZyBibG9jayBvciB0aGUgbmV3IGRpZmYsIHdoYXRldmVyIGVuZHMgbGFzdC4gKi8KKwkgICAgb2ZmID0gKGxudW1fb3JpZyArIGNvdW50X29yaWcpCisJCQkgLSAoZHBsLT5kZl9sbnVtW2lkeF9vcmlnXSArIGRwbC0+ZGZfY291bnRbaWR4X29yaWddKTsKKwkgICAgaWYgKG9mZiA8IDApCisJICAgIHsKKwkJLyogbmV3IGNoYW5nZSBlbmRzIGluIGV4aXN0aW5nIGJsb2NrLCBhZGp1c3QgdGhlIGVuZCBpZiBub3QKKwkJICogZG9uZSBhbHJlYWR5ICovCisJCWlmIChub3RzZXQpCisJCSAgICBkcC0+ZGZfY291bnRbaWR4X25ld10gKz0gLW9mZjsKKwkJb2ZmID0gMDsKKwkgICAgfQorCSAgICBmb3IgKGkgPSBpZHhfb3JpZzsgaSA8IGlkeF9uZXcgKyAhbm90c2V0OyArK2kpCisJCWlmIChkaWZmYnVmW2ldICE9IE5VTEwpCisJCSAgICBkcC0+ZGZfY291bnRbaV0gPSBkcGwtPmRmX2xudW1baV0gKyBkcGwtPmRmX2NvdW50W2ldCisJCQkJCQkgICAgICAgLSBkcC0+ZGZfbG51bVtpXSArIG9mZjsKKworCSAgICAvKiBEZWxldGUgdGhlIGRpZmYgYmxvY2tzIHRoYXQgaGF2ZSBiZWVuIG1lcmdlZCBpbnRvIG9uZS4gKi8KKwkgICAgZG4gPSBkcC0+ZGZfbmV4dDsKKwkgICAgZHAtPmRmX25leHQgPSBkcGwtPmRmX25leHQ7CisJICAgIHdoaWxlIChkbiAhPSBkcC0+ZGZfbmV4dCkKKwkgICAgeworCQlkcGwgPSBkbi0+ZGZfbmV4dDsKKwkJdmltX2ZyZWUoZG4pOworCQlkbiA9IGRwbDsKKwkgICAgfQorCX0KKwllbHNlCisJeworCSAgICAvKiBBbGxvY2F0ZSBhIG5ldyBkaWZmYmxvY2suICovCisJICAgIGRwID0gZGlmZl9hbGxvY19uZXcoZHByZXYsIGRwKTsKKwkgICAgaWYgKGRwID09IE5VTEwpCisJCXJldHVybjsKKworCSAgICBkcC0+ZGZfbG51bVtpZHhfb3JpZ10gPSBsbnVtX29yaWc7CisJICAgIGRwLT5kZl9jb3VudFtpZHhfb3JpZ10gPSBjb3VudF9vcmlnOworCSAgICBkcC0+ZGZfbG51bVtpZHhfbmV3XSA9IGxudW1fbmV3OworCSAgICBkcC0+ZGZfY291bnRbaWR4X25ld10gPSBjb3VudF9uZXc7CisKKwkgICAgLyogU2V0IHZhbHVlcyBmb3Igb3RoZXIgYnVmZmVycywgdGhlc2UgbXVzdCBiZSBlcXVhbCB0byB0aGUKKwkgICAgICogb3JpZ2luYWwgYnVmZmVyLCBvdGhlcndpc2UgdGhlcmUgd291bGQgaGF2ZSBiZWVuIGEgY2hhbmdlCisJICAgICAqIGFscmVhZHkuICovCisJICAgIGZvciAoaSA9IGlkeF9vcmlnICsgMTsgaSA8IGlkeF9uZXc7ICsraSkKKwkJaWYgKGRpZmZidWZbaV0gIT0gTlVMTCkKKwkJICAgIGRpZmZfY29weV9lbnRyeShkcHJldiwgZHAsIGlkeF9vcmlnLCBpKTsKKwl9CisJbm90c2V0ID0gRkFMU0U7CQkvKiAiKmRwIiBoYXMgYmVlbiBzZXQgKi8KKyAgICB9CisKKyAgICAvKiBmb3IgcmVtYWluaW5nIGRpZmYgYmxvY2tzIG9yaWcgYW5kIG5ldyBhcmUgZXF1YWwgKi8KKyAgICB3aGlsZSAoZHAgIT0gTlVMTCkKKyAgICB7CisJaWYgKG5vdHNldCkKKwkgICAgZGlmZl9jb3B5X2VudHJ5KGRwcmV2LCBkcCwgaWR4X29yaWcsIGlkeF9uZXcpOworCWRwcmV2ID0gZHA7CisJZHAgPSBkcC0+ZGZfbmV4dDsKKwlub3RzZXQgPSBUUlVFOworICAgIH0KKworICAgIGZjbG9zZShmZCk7Cit9CisKKy8qCisgKiBDb3B5IGFuIGVudHJ5IGF0ICJkcCIgZnJvbSAiaWR4X29yaWciIHRvICJpZHhfbmV3Ii4KKyAqLworICAgIHN0YXRpYyB2b2lkCitkaWZmX2NvcHlfZW50cnkoZHByZXYsIGRwLCBpZHhfb3JpZywgaWR4X25ldykKKyAgICBkaWZmX1QJKmRwcmV2OworICAgIGRpZmZfVAkqZHA7CisgICAgaW50CQlpZHhfb3JpZzsKKyAgICBpbnQJCWlkeF9uZXc7Cit7CisgICAgbG9uZwlvZmY7CisKKyAgICBpZiAoZHByZXYgPT0gTlVMTCkKKwlvZmYgPSAwOworICAgIGVsc2UKKwlvZmYgPSAoZHByZXYtPmRmX2xudW1baWR4X29yaWddICsgZHByZXYtPmRmX2NvdW50W2lkeF9vcmlnXSkKKwkgICAgLSAoZHByZXYtPmRmX2xudW1baWR4X25ld10gKyBkcHJldi0+ZGZfY291bnRbaWR4X25ld10pOworICAgIGRwLT5kZl9sbnVtW2lkeF9uZXddID0gZHAtPmRmX2xudW1baWR4X29yaWddIC0gb2ZmOworICAgIGRwLT5kZl9jb3VudFtpZHhfbmV3XSA9IGRwLT5kZl9jb3VudFtpZHhfb3JpZ107Cit9CisKKy8qCisgKiBDbGVhciB0aGUgbGlzdCBvZiBkaWZmYmxvY2tzLgorICovCisgICAgc3RhdGljIHZvaWQKK2RpZmZfY2xlYXIoKQoreworICAgIGRpZmZfVAkqcCwgKm5leHRfcDsKKworICAgIGZvciAocCA9IGZpcnN0X2RpZmY7IHAgIT0gTlVMTDsgcCA9IG5leHRfcCkKKyAgICB7CisJbmV4dF9wID0gcC0+ZGZfbmV4dDsKKwl2aW1fZnJlZShwKTsKKyAgICB9CisgICAgZmlyc3RfZGlmZiA9IE5VTEw7Cit9CisKKy8qCisgKiBDaGVjayBkaWZmIHN0YXR1cyBmb3IgbGluZSAibG51bSIgaW4gYnVmZmVyICJidWYiOgorICogUmV0dXJucyAwIGZvciBub3RoaW5nIHNwZWNpYWwKKyAqIFJldHVybnMgLTEgZm9yIGEgbGluZSB0aGF0IHNob3VsZCBiZSBoaWdobGlnaHRlZCBhcyBjaGFuZ2VkLgorICogUmV0dXJucyAtMiBmb3IgYSBsaW5lIHRoYXQgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIGFzIGFkZGVkL2RlbGV0ZWQuCisgKiBSZXR1cm5zID4gMCBmb3IgaW5zZXJ0aW5nIHRoYXQgbWFueSBmaWxsZXIgbGluZXMgYWJvdmUgaXQgKG5ldmVyIGhhcHBlbnMKKyAqIHdoZW4gJ2RpZmZvcHQnIGRvZXNuJ3QgY29udGFpbiAiZmlsbGVyIikuCisgKiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHdpbmRvd3Mgd2hlcmUgJ2RpZmYnIGlzIHNldC4KKyAqLworICAgIGludAorZGlmZl9jaGVjayh3cCwgbG51bSkKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBpbnQJCWlkeDsJCS8qIGluZGV4IGluIGRpZmZidWZbXSBmb3IgdGhpcyBidWZmZXIgKi8KKyAgICBkaWZmX1QJKmRwOworICAgIGludAkJbWF4Y291bnQ7CisgICAgaW50CQlpOworICAgIGJ1Zl9UCSpidWYgPSB3cC0+d19idWZmZXI7CisgICAgaW50CQljbXA7CisKKyAgICBpZiAoZGlmZl9pbnZhbGlkKQorCWV4X2RpZmZ1cGRhdGUoTlVMTCk7CQkvKiB1cGRhdGUgYWZ0ZXIgYSBiaWcgY2hhbmdlICovCisKKyAgICBpZiAoZmlyc3RfZGlmZiA9PSBOVUxMIHx8ICF3cC0+d19wX2RpZmYpCS8qIG5vIGRpZmZzIGF0IGFsbCAqLworCXJldHVybiAwOworCisgICAgLyogc2FmZXR5IGNoZWNrOiAibG51bSIgbXVzdCBiZSBhIGJ1ZmZlciBsaW5lICovCisgICAgaWYgKGxudW0gPCAxIHx8IGxudW0gPiBidWYtPmJfbWwubWxfbGluZV9jb3VudCArIDEpCisJcmV0dXJuIDA7CisKKyAgICBpZHggPSBkaWZmX2J1Zl9pZHgoYnVmKTsKKyAgICBpZiAoaWR4ID09IERCX0NPVU5UKQorCXJldHVybiAwOwkJLyogbm8gZGlmZnMgZm9yIGJ1ZmZlciAiYnVmIiAqLworCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgLyogQSBjbG9zZWQgZm9sZCBuZXZlciBoYXMgZmlsbGVyIGxpbmVzLiAqLworICAgIGlmIChoYXNGb2xkaW5nV2luKHdwLCBsbnVtLCBOVUxMLCBOVUxMLCBUUlVFLCBOVUxMKSkKKwlyZXR1cm4gMDsKKyNlbmRpZgorCisgICAgLyogc2VhcmNoIGZvciBhIGNoYW5nZSB0aGF0IGluY2x1ZGVzICJsbnVtIiBpbiB0aGUgbGlzdCBvZiBkaWZmYmxvY2tzLiAqLworICAgIGZvciAoZHAgPSBmaXJzdF9kaWZmOyBkcCAhPSBOVUxMOyBkcCA9IGRwLT5kZl9uZXh0KQorCWlmIChsbnVtIDw9IGRwLT5kZl9sbnVtW2lkeF0gKyBkcC0+ZGZfY291bnRbaWR4XSkKKwkgICAgYnJlYWs7CisgICAgaWYgKGRwID09IE5VTEwgfHwgbG51bSA8IGRwLT5kZl9sbnVtW2lkeF0pCisJcmV0dXJuIDA7CisKKyAgICBpZiAobG51bSA8IGRwLT5kZl9sbnVtW2lkeF0gKyBkcC0+ZGZfY291bnRbaWR4XSkKKyAgICB7CisJaW50CXplcm8gPSBGQUxTRTsKKworCS8qIENoYW5nZWQgb3IgaW5zZXJ0ZWQgbGluZS4gIElmIHRoZSBvdGhlciBidWZmZXJzIGhhdmUgYSBjb3VudCBvZgorCSAqIHplcm8sIHRoZSBsaW5lcyB3ZXJlIGluc2VydGVkLiAgSWYgdGhlIG90aGVyIGJ1ZmZlcnMgaGF2ZSB0aGUgc2FtZQorCSAqIGNvdW50LCBjaGVjayBpZiB0aGUgbGluZXMgYXJlIGlkZW50aWNhbC4gKi8KKwljbXAgPSBGQUxTRTsKKwlmb3IgKGkgPSAwOyBpIDwgREJfQ09VTlQ7ICsraSkKKwkgICAgaWYgKGkgIT0gaWR4ICYmIGRpZmZidWZbaV0gIT0gTlVMTCkKKwkgICAgeworCQlpZiAoZHAtPmRmX2NvdW50W2ldID09IDApCisJCSAgICB6ZXJvID0gVFJVRTsKKwkJZWxzZQorCQl7CisJCSAgICBpZiAoZHAtPmRmX2NvdW50W2ldICE9IGRwLT5kZl9jb3VudFtpZHhdKQorCQkJcmV0dXJuIC0xOwkgICAgLyogbnIgb2YgbGluZXMgY2hhbmdlZC4gKi8KKwkJICAgIGNtcCA9IFRSVUU7CisJCX0KKwkgICAgfQorCWlmIChjbXApCisJeworCSAgICAvKiBDb21wYXJlIGFsbCBsaW5lcy4gIElmIHRoZXkgYXJlIGVxdWFsIHRoZSBsaW5lcyB3ZXJlIGluc2VydGVkCisJICAgICAqIGluIHNvbWUgYnVmZmVycywgZGVsZXRlZCBpbiBvdGhlcnMsIGJ1dCBub3QgY2hhbmdlZC4gKi8KKwkgICAgZm9yIChpID0gMDsgaSA8IERCX0NPVU5UOyArK2kpCisJCWlmIChpICE9IGlkeCAmJiBkaWZmYnVmW2ldICE9IE5VTEwgJiYgZHAtPmRmX2NvdW50W2ldICE9IDApCisJCSAgICBpZiAoIWRpZmZfZXF1YWxfZW50cnkoZHAsIGlkeCwgaSkpCisJCQlyZXR1cm4gLTE7CisJfQorCS8qIElmIHRoZXJlIGlzIG5vIGJ1ZmZlciB3aXRoIHplcm8gbGluZXMgdGhlbiB0aGVyZSBpcyBubyBkaWZmZXJlbmNlCisJICogYW55IGxvbmdlci4gIEhhcHBlbnMgd2hlbiBtYWtpbmcgYSBjaGFuZ2UgKG9yIHVuZG8pIHRoYXQgcmVtb3ZlcworCSAqIHRoZSBkaWZmZXJlbmNlLiAgQ2FuJ3QgcmVtb3ZlIHRoZSBlbnRyeSBoZXJlLCB3ZSBtaWdodCBiZSBoYWxmd2F5CisJICogdXBkYXRpbmcgdGhlIHdpbmRvdy4gIEp1c3QgcmVwb3J0IHRoZSB0ZXh0IGFzIHVuY2hhbmdlZC4gIE90aGVyCisJICogd2luZG93cyBtaWdodCBzdGlsbCBzaG93IHRoZSBjaGFuZ2UgdGhvdWdoLiAqLworCWlmICh6ZXJvID09IEZBTFNFKQorCSAgICByZXR1cm4gMDsKKwlyZXR1cm4gLTI7CisgICAgfQorCisgICAgLyogSWYgJ2RpZmZvcHQnIGRvZXNuJ3QgY29udGFpbiAiZmlsbGVyIiwgcmV0dXJuIDAuICovCisgICAgaWYgKCEoZGlmZl9mbGFncyAmIERJRkZfRklMTEVSKSkKKwlyZXR1cm4gMDsKKworICAgIC8qIEluc2VydCBmaWxsZXIgbGluZXMgYWJvdmUgdGhlIGxpbmUganVzdCBiZWxvdyB0aGUgY2hhbmdlLiAgV2lsbCByZXR1cm4KKyAgICAgKiAwIHdoZW4gdGhpcyBidWYgaGFkIHRoZSBtYXggY291bnQuICovCisgICAgbWF4Y291bnQgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBEQl9DT1VOVDsgKytpKQorCWlmIChkaWZmYnVmW2ldICE9IE5VTEwgJiYgZHAtPmRmX2NvdW50W2ldID4gbWF4Y291bnQpCisJICAgIG1heGNvdW50ID0gZHAtPmRmX2NvdW50W2ldOworICAgIHJldHVybiBtYXhjb3VudCAtIGRwLT5kZl9jb3VudFtpZHhdOworfQorCisvKgorICogQ29tcGFyZSB0d28gZW50cmllcyBpbiBkaWZmICIqZHAiIGFuZCByZXR1cm4gVFJVRSBpZiB0aGV5IGFyZSBlcXVhbC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2RpZmZfZXF1YWxfZW50cnkoZHAsIGlkeDEsIGlkeDIpCisgICAgZGlmZl9UCSpkcDsKKyAgICBpbnQJCWlkeDE7CisgICAgaW50CQlpZHgyOworeworICAgIGludAkJaTsKKyAgICBjaGFyX3UJKmxpbmU7CisgICAgaW50CQljbXA7CisKKyAgICBpZiAoZHAtPmRmX2NvdW50W2lkeDFdICE9IGRwLT5kZl9jb3VudFtpZHgyXSkKKwlyZXR1cm4gRkFMU0U7CisgICAgaWYgKGRpZmZfY2hlY2tfc2FuaXR5KGRwKSA9PSBGQUlMKQorCXJldHVybiBGQUxTRTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZHAtPmRmX2NvdW50W2lkeDFdOyArK2kpCisgICAgeworCWxpbmUgPSB2aW1fc3Ryc2F2ZShtbF9nZXRfYnVmKGRpZmZidWZbaWR4MV0sCisJCQkJCSAgICAgICBkcC0+ZGZfbG51bVtpZHgxXSArIGksIEZBTFNFKSk7CisJaWYgKGxpbmUgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBTFNFOworCWNtcCA9IGRpZmZfY21wKGxpbmUsIG1sX2dldF9idWYoZGlmZmJ1ZltpZHgyXSwKKwkJCQkJICAgICAgIGRwLT5kZl9sbnVtW2lkeDJdICsgaSwgRkFMU0UpKTsKKwl2aW1fZnJlZShsaW5lKTsKKwlpZiAoY21wICE9IDApCisJICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBDb21wYXJlIHN0cmluZ3MgInMxIiBhbmQgInMyIiBhY2NvcmRpbmcgdG8gJ2RpZmZvcHQnLgorICogUmV0dXJuIG5vbi16ZXJvIHdoZW4gdGhleSBhcmUgZGlmZmVyZW50LgorICovCisgICAgc3RhdGljIGludAorZGlmZl9jbXAoczEsIHMyKQorICAgIGNoYXJfdQkqczE7CisgICAgY2hhcl91CSpzMjsKK3sKKyAgICBjaGFyX3UJKnAxLCAqcDI7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJbDsKKyNlbmRpZgorCisgICAgaWYgKChkaWZmX2ZsYWdzICYgKERJRkZfSUNBU0UgfCBESUZGX0lXSElURSkpID09IDApCisJcmV0dXJuIFNUUkNNUChzMSwgczIpOworICAgIGlmICgoZGlmZl9mbGFncyAmIERJRkZfSUNBU0UpICYmICEoZGlmZl9mbGFncyAmIERJRkZfSVdISVRFKSkKKwlyZXR1cm4gTUJfU1RSSUNNUChzMSwgczIpOworCisgICAgLyogSWdub3JlIHdoaXRlIHNwYWNlIGNoYW5nZXMgYW5kIHBvc3NpYmx5IGlnbm9yZSBjYXNlLiAqLworICAgIHAxID0gczE7CisgICAgcDIgPSBzMjsKKyAgICB3aGlsZSAoKnAxICE9IE5VTCAmJiAqcDIgIT0gTlVMKQorICAgIHsKKwlpZiAodmltX2lzd2hpdGUoKnAxKSAmJiB2aW1faXN3aGl0ZSgqcDIpKQorCXsKKwkgICAgcDEgPSBza2lwd2hpdGUocDEpOworCSAgICBwMiA9IHNraXB3aGl0ZShwMik7CisJfQorCWVsc2UKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBsICA9ICgqbWJfcHRyMmxlbl9jaGVjaykocDEpOworCSAgICBpZiAobCAhPSAoKm1iX3B0cjJsZW5fY2hlY2spKHAyKSkKKwkJYnJlYWs7CisJICAgIGlmIChsID4gMSkKKwkgICAgeworCQlpZiAoU1RSTkNNUChwMSwgcDIsIGwpICE9IDAKKwkJCSYmICghZW5jX3V0ZjgKKwkJCSAgICB8fCAhKGRpZmZfZmxhZ3MgJiBESUZGX0lDQVNFKQorCQkJICAgIHx8IHV0Zl9mb2xkKHV0Zl9wdHIyY2hhcihwMSkpCisJCQkJCSAgICAgICAhPSB1dGZfZm9sZCh1dGZfcHRyMmNoYXIocDIpKSkpCisJCSAgICBicmVhazsKKwkJcDEgKz0gbDsKKwkJcDIgKz0gbDsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkgICAgeworCQlpZiAoKnAxICE9ICpwMiAmJiAoIShkaWZmX2ZsYWdzICYgRElGRl9JQ0FTRSkKKwkJCQkgICAgIHx8IFRPTE9XRVJfTE9DKCpwMSkgIT0gVE9MT1dFUl9MT0MoKnAyKSkpCisJCSAgICBicmVhazsKKwkJKytwMTsKKwkJKytwMjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiBJZ25vcmUgdHJhaWxpbmcgd2hpdGUgc3BhY2UuICovCisgICAgcDEgPSBza2lwd2hpdGUocDEpOworICAgIHAyID0gc2tpcHdoaXRlKHAyKTsKKyAgICBpZiAoKnAxICE9IE5VTCB8fCAqcDIgIT0gTlVMKQorCXJldHVybiAxOworICAgIHJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZmlsbGVyIGxpbmVzIGFib3ZlICJsbnVtIi4KKyAqLworICAgIGludAorZGlmZl9jaGVja19maWxsKHdwLCBsbnVtKQorICAgIHdpbl9UCSp3cDsKKyAgICBsaW5lbnJfVAlsbnVtOworeworICAgIGludAkJbjsKKworICAgIC8qIGJlIHF1aWNrIHdoZW4gdGhlcmUgYXJlIG5vIGZpbGxlciBsaW5lcyAqLworICAgIGlmICghKGRpZmZfZmxhZ3MgJiBESUZGX0ZJTExFUikpCisJcmV0dXJuIDA7CisgICAgbiA9IGRpZmZfY2hlY2sod3AsIGxudW0pOworICAgIGlmIChuIDw9IDApCisJcmV0dXJuIDA7CisgICAgcmV0dXJuIG47Cit9CisKKy8qCisgKiBTZXQgdGhlIHRvcGxpbmUgb2YgInRvd2luIiB0byBtYXRjaCB0aGUgcG9zaXRpb24gaW4gImZyb213aW4iLCBzbyB0aGF0IHRoZXkKKyAqIHNob3cgdGhlIHNhbWUgZGlmZidlZCBsaW5lcy4KKyAqLworICAgIHZvaWQKK2RpZmZfc2V0X3RvcGxpbmUoZnJvbXdpbiwgdG93aW4pCisgICAgd2luX1QJKmZyb213aW47CisgICAgd2luX1QJKnRvd2luOworeworICAgIGJ1Zl9UCSpidWYgPSBmcm9td2luLT53X2J1ZmZlcjsKKyAgICBsaW5lbnJfVAlsbnVtID0gZnJvbXdpbi0+d190b3BsaW5lOworICAgIGludAkJaWR4OworICAgIGRpZmZfVAkqZHA7CisgICAgaW50CQlpOworCisgICAgaWR4ID0gZGlmZl9idWZfaWR4KGJ1Zik7CisgICAgaWYgKGlkeCA9PSBEQl9DT1VOVCkKKwlyZXR1cm47CQkvKiBzYWZldHkgY2hlY2sgKi8KKworICAgIGlmIChkaWZmX2ludmFsaWQpCisJZXhfZGlmZnVwZGF0ZShOVUxMKTsJCS8qIHVwZGF0ZSBhZnRlciBhIGJpZyBjaGFuZ2UgKi8KKworICAgIHRvd2luLT53X3RvcGZpbGwgPSAwOworCisgICAgLyogc2VhcmNoIGZvciBhIGNoYW5nZSB0aGF0IGluY2x1ZGVzICJsbnVtIiBpbiB0aGUgbGlzdCBvZiBkaWZmYmxvY2tzLiAqLworICAgIGZvciAoZHAgPSBmaXJzdF9kaWZmOyBkcCAhPSBOVUxMOyBkcCA9IGRwLT5kZl9uZXh0KQorCWlmIChsbnVtIDw9IGRwLT5kZl9sbnVtW2lkeF0gKyBkcC0+ZGZfY291bnRbaWR4XSkKKwkgICAgYnJlYWs7CisgICAgaWYgKGRwID09IE5VTEwpCisgICAgeworCS8qIEFmdGVyIGxhc3QgY2hhbmdlLCBjb21wdXRlIHRvcGxpbmUgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGU7IG5vCisJICogZmlsbGVyIGxpbmVzLiAqLworCXRvd2luLT53X3RvcGxpbmUgPSB0b3dpbi0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudAorCQkJCQkgICAtIChidWYtPmJfbWwubWxfbGluZV9jb3VudCAtIGxudW0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIEZpbmQgaW5kZXggZm9yICJ0b3dpbiIuICovCisJaSA9IGRpZmZfYnVmX2lkeCh0b3dpbi0+d19idWZmZXIpOworCWlmIChpID09IERCX0NPVU5UKQorCSAgICByZXR1cm47CQkvKiBzYWZldHkgY2hlY2sgKi8KKworCXRvd2luLT53X3RvcGxpbmUgPSBsbnVtICsgKGRwLT5kZl9sbnVtW2ldIC0gZHAtPmRmX2xudW1baWR4XSk7CisJaWYgKGxudW0gPj0gZHAtPmRmX2xudW1baWR4XSkKKwl7CisJICAgIC8qIEluc2lkZSBhIGNoYW5nZTogY29tcHV0ZSBmaWxsZXIgbGluZXMuICovCisJICAgIGlmIChkcC0+ZGZfY291bnRbaV0gPT0gZHAtPmRmX2NvdW50W2lkeF0pCisJCXRvd2luLT53X3RvcGZpbGwgPSBmcm9td2luLT53X3RvcGZpbGw7CisJICAgIGVsc2UgaWYgKGRwLT5kZl9jb3VudFtpXSA+IGRwLT5kZl9jb3VudFtpZHhdKQorCSAgICB7CisJCWlmIChsbnVtID09IGRwLT5kZl9sbnVtW2lkeF0gKyBkcC0+ZGZfY291bnRbaWR4XSkKKwkJICAgIHRvd2luLT53X3RvcGxpbmUgPSBkcC0+ZGZfbG51bVtpXSArIGRwLT5kZl9jb3VudFtpXQorCQkJCQkJCSAtIGZyb213aW4tPndfdG9wZmlsbDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKHRvd2luLT53X3RvcGxpbmUgPj0gZHAtPmRmX2xudW1baV0gKyBkcC0+ZGZfY291bnRbaV0pCisJCXsKKwkJICAgIGlmIChkaWZmX2ZsYWdzICYgRElGRl9GSUxMRVIpCisJCQl0b3dpbi0+d190b3BmaWxsID0gZHAtPmRmX2xudW1baWR4XQorCQkJCQkJICAgKyBkcC0+ZGZfY291bnRbaWR4XSAtIGxudW07CisJCSAgICB0b3dpbi0+d190b3BsaW5lID0gZHAtPmRmX2xudW1baV0gKyBkcC0+ZGZfY291bnRbaV07CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiBzYWZldHkgY2hlY2sgKGlmIGRpZmYgaW5mbyBnZXRzIG91dGRhdGVkIHN0cmFuZ2UgdGhpbmdzIG1heSBoYXBwZW4pICovCisgICAgdG93aW4tPndfYm90ZmlsbCA9IEZBTFNFOworICAgIGlmICh0b3dpbi0+d190b3BsaW5lID4gdG93aW4tPndfYnVmZmVyLT5iX21sLm1sX2xpbmVfY291bnQpCisgICAgeworCXRvd2luLT53X3RvcGxpbmUgPSB0b3dpbi0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudDsKKwl0b3dpbi0+d19ib3RmaWxsID0gVFJVRTsKKyAgICB9CisgICAgaWYgKHRvd2luLT53X3RvcGxpbmUgPCAxKQorICAgIHsKKwl0b3dpbi0+d190b3BsaW5lID0gMTsKKwl0b3dpbi0+d190b3BmaWxsID0gMDsKKyAgICB9CisKKyAgICAvKiBXaGVuIHdfdG9wbGluZSBjaGFuZ2VzIG5lZWQgdG8gcmVjb21wdXRlIHdfYm90bGluZSBhbmQgY3Vyc29yIHBvc2l0aW9uICovCisgICAgaW52YWxpZGF0ZV9ib3RsaW5lX3dpbih0b3dpbik7CisgICAgY2hhbmdlZF9saW5lX2Fidl9jdXJzX3dpbih0b3dpbik7CisKKyAgICBjaGVja190b3BmaWxsKHRvd2luLCBGQUxTRSk7CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgKHZvaWQpaGFzRm9sZGluZ1dpbih0b3dpbiwgdG93aW4tPndfdG9wbGluZSwgJnRvd2luLT53X3RvcGxpbmUsCisJCQkJCQkJICAgIE5VTEwsIFRSVUUsIE5VTEwpOworI2VuZGlmCit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuICdkaWZmb3B0JyBpcyBjaGFuZ2VkLgorICovCisgICAgaW50CitkaWZmb3B0X2NoYW5nZWQoKQoreworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWRpZmZfY29udGV4dF9uZXcgPSA2OworICAgIGludAkJZGlmZl9mbGFnc19uZXcgPSAwOworCisgICAgcCA9IHBfZGlwOworICAgIHdoaWxlICgqcCAhPSBOVUwpCisgICAgeworCWlmIChTVFJOQ01QKHAsICJmaWxsZXIiLCA2KSA9PSAwKQorCXsKKwkgICAgcCArPSA2OworCSAgICBkaWZmX2ZsYWdzX25ldyB8PSBESUZGX0ZJTExFUjsKKwl9CisJZWxzZSBpZiAoU1RSTkNNUChwLCAiY29udGV4dDoiLCA4KSA9PSAwICYmIFZJTV9JU0RJR0lUKHBbOF0pKQorCXsKKwkgICAgcCArPSA4OworCSAgICBkaWZmX2NvbnRleHRfbmV3ID0gZ2V0ZGlnaXRzKCZwKTsKKwl9CisJZWxzZSBpZiAoU1RSTkNNUChwLCAiaWNhc2UiLCA1KSA9PSAwKQorCXsKKwkgICAgcCArPSA1OworCSAgICBkaWZmX2ZsYWdzX25ldyB8PSBESUZGX0lDQVNFOworCX0KKwllbHNlIGlmIChTVFJOQ01QKHAsICJpd2hpdGUiLCA2KSA9PSAwKQorCXsKKwkgICAgcCArPSA2OworCSAgICBkaWZmX2ZsYWdzX25ldyB8PSBESUZGX0lXSElURTsKKwl9CisJaWYgKCpwICE9ICcsJyAmJiAqcCAhPSBOVUwpCisJICAgIHJldHVybiBGQUlMOworCWlmICgqcCA9PSAnLCcpCisJICAgICsrcDsKKyAgICB9CisKKyAgICAvKiBJZiAiaWNhc2UiIG9yICJpd2hpdGUiIHdhcyBhZGRlZCBvciByZW1vdmVkLCBuZWVkIHRvIHVwZGF0ZSB0aGUgZGlmZi4gKi8KKyAgICBpZiAoZGlmZl9mbGFncyAhPSBkaWZmX2ZsYWdzX25ldykKKwlkaWZmX2ludmFsaWQgPSBUUlVFOworCisgICAgZGlmZl9mbGFncyA9IGRpZmZfZmxhZ3NfbmV3OworICAgIGRpZmZfY29udGV4dCA9IGRpZmZfY29udGV4dF9uZXc7CisKKyAgICBkaWZmX3JlZHJhdyhUUlVFKTsKKworICAgIC8qIHJlY29tcHV0ZSB0aGUgc2Nyb2xsIGJpbmRpbmcgd2l0aCB0aGUgbmV3IG9wdGlvbiB2YWx1ZSwgbWF5CisgICAgICogcmVtb3ZlIG9yIGFkZCBmaWxsZXIgbGluZXMgKi8KKyAgICBjaGVja19zY3JvbGxiaW5kKChsaW5lbnJfVCkwLCAwTCk7CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBkaWZmZXJlbmNlIHdpdGhpbiBhIGNoYW5nZWQgbGluZS4KKyAqIFJldHVybnMgVFJVRSBpZiB0aGUgbGluZSB3YXMgYWRkZWQsIG5vIG90aGVyIGJ1ZmZlciBoYXMgaXQuCisgKi8KKyAgICBpbnQKK2RpZmZfZmluZF9jaGFuZ2Uod3AsIGxudW0sIHN0YXJ0cCwgZW5kcCkKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBpbnQJCSpzdGFydHA7CS8qIGZpcnN0IGNoYXIgb2YgdGhlIGNoYW5nZSAqLworICAgIGludAkJKmVuZHA7CQkvKiBsYXN0IGNoYXIgb2YgdGhlIGNoYW5nZSAqLworeworICAgIGNoYXJfdQkqbGluZV9vcmc7CisgICAgY2hhcl91CSpsaW5lX25ldzsKKyAgICBpbnQJCWk7CisgICAgaW50CQlzaSwgZWlfb3JnLCBlaV9uZXc7CisgICAgZGlmZl9UCSpkcDsKKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCW9mZjsKKyAgICBpbnQJCWFkZGVkID0gVFJVRTsKKworICAgIC8qIE1ha2UgYSBjb3B5IG9mIHRoZSBsaW5lLCB0aGUgbmV4dCBtbF9nZXQoKSB3aWxsIGludmFsaWRhdGUgaXQuICovCisgICAgbGluZV9vcmcgPSB2aW1fc3Ryc2F2ZShtbF9nZXRfYnVmKHdwLT53X2J1ZmZlciwgbG51bSwgRkFMU0UpKTsKKyAgICBpZiAobGluZV9vcmcgPT0gTlVMTCkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBpZHggPSBkaWZmX2J1Zl9pZHgod3AtPndfYnVmZmVyKTsKKyAgICBpZiAoaWR4ID09IERCX0NPVU5UKQkvKiBjYW5ub3QgaGFwcGVuICovCisJcmV0dXJuIEZBTFNFOworCisgICAgLyogc2VhcmNoIGZvciBhIGNoYW5nZSB0aGF0IGluY2x1ZGVzICJsbnVtIiBpbiB0aGUgbGlzdCBvZiBkaWZmYmxvY2tzLiAqLworICAgIGZvciAoZHAgPSBmaXJzdF9kaWZmOyBkcCAhPSBOVUxMOyBkcCA9IGRwLT5kZl9uZXh0KQorCWlmIChsbnVtIDw9IGRwLT5kZl9sbnVtW2lkeF0gKyBkcC0+ZGZfY291bnRbaWR4XSkKKwkgICAgYnJlYWs7CisgICAgaWYgKGRwID09IE5VTEwgfHwgZGlmZl9jaGVja19zYW5pdHkoZHApID09IEZBSUwpCisJcmV0dXJuIEZBTFNFOworCisgICAgb2ZmID0gbG51bSAtIGRwLT5kZl9sbnVtW2lkeF07CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgREJfQ09VTlQ7ICsraSkKKwlpZiAoZGlmZmJ1ZltpXSAhPSBOVUxMICYmIGkgIT0gaWR4KQorCXsKKwkgICAgLyogU2tpcCBsaW5lcyB0aGF0IGFyZSBub3QgaW4gdGhlIG90aGVyIGNoYW5nZSAoZmlsbGVyIGxpbmVzKS4gKi8KKwkgICAgaWYgKG9mZiA+PSBkcC0+ZGZfY291bnRbaV0pCisJCWNvbnRpbnVlOworCSAgICBhZGRlZCA9IEZBTFNFOworCSAgICBsaW5lX25ldyA9IG1sX2dldF9idWYoZGlmZmJ1ZltpXSwgZHAtPmRmX2xudW1baV0gKyBvZmYsIEZBTFNFKTsKKworCSAgICAvKiBTZWFyY2ggZm9yIHN0YXJ0IG9mIGRpZmZlcmVuY2UgKi8KKwkgICAgZm9yIChzaSA9IDA7IGxpbmVfb3JnW3NpXSAhPSBOVUwgJiYgbGluZV9vcmdbc2ldID09IGxpbmVfbmV3W3NpXTsgKQorCQkrK3NpOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkgICAgeworCQkvKiBNb3ZlIGJhY2sgdG8gZmlyc3QgYnl0ZSBvZiBjaGFyYWN0ZXIgaW4gYm90aCBsaW5lcyAobWF5CisJCSAqIGhhdmUgIm5uXiIgaW4gbGluZV9vcmcgYW5kICJuXiBpbiBsaW5lX25ldykuICovCisJCXNpIC09ICgqbWJfaGVhZF9vZmYpKGxpbmVfb3JnLCBsaW5lX29yZyArIHNpKTsKKwkJc2kgLT0gKCptYl9oZWFkX29mZikobGluZV9uZXcsIGxpbmVfbmV3ICsgc2kpOworCSAgICB9CisjZW5kaWYKKwkgICAgaWYgKCpzdGFydHAgPiBzaSkKKwkJKnN0YXJ0cCA9IHNpOworCisJICAgIC8qIFNlYXJjaCBmb3IgZW5kIG9mIGRpZmZlcmVuY2UsIGlmIGFueS4gKi8KKwkgICAgaWYgKGxpbmVfb3JnW3NpXSAhPSBOVUwgfHwgbGluZV9uZXdbc2ldICE9IE5VTCkKKwkgICAgeworCQllaV9vcmcgPSAoaW50KVNUUkxFTihsaW5lX29yZyk7CisJCWVpX25ldyA9IChpbnQpU1RSTEVOKGxpbmVfbmV3KTsKKwkJd2hpbGUgKGVpX29yZyA+PSAqc3RhcnRwICYmIGVpX25ldyA+PSAqc3RhcnRwCisJCQkmJiBlaV9vcmcgPj0gMCAmJiBlaV9uZXcgPj0gMAorCQkJJiYgbGluZV9vcmdbZWlfb3JnXSA9PSBsaW5lX25ld1tlaV9uZXddKQorCQl7CisJCSAgICAtLWVpX29yZzsKKwkJICAgIC0tZWlfbmV3OworCQl9CisJCWlmICgqZW5kcCA8IGVpX29yZykKKwkJICAgICplbmRwID0gZWlfb3JnOworCSAgICB9CisJfQorCisgICAgdmltX2ZyZWUobGluZV9vcmcpOworICAgIHJldHVybiBhZGRlZDsKK30KKworI2lmIGRlZmluZWQoRkVBVF9GT0xESU5HKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiBUUlVFIGlmIGxpbmUgImxudW0iIGlzIG5vdCBjbG9zZSB0byBhIGRpZmYgYmxvY2ssIHRoaXMgbGluZSBzaG91bGQKKyAqIGJlIGluIGEgZm9sZC4KKyAqIFJldHVybiBGQUxTRSBpZiB0aGVyZSBhcmUgbm8gZGlmZiBibG9ja3MgYXQgYWxsIGluIHRoaXMgd2luZG93LgorICovCisgICAgaW50CitkaWZmX2luZm9sZCh3cCwgbG51bSkKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQlpZHggPSAtMTsKKyAgICBpbnQJCW90aGVyID0gRkFMU0U7CisgICAgZGlmZl9UCSpkcDsKKworICAgIC8qIFJldHVybiBpZiAnZGlmZicgaXNuJ3Qgc2V0LiAqLworICAgIGlmICghd3AtPndfcF9kaWZmKQorCXJldHVybiBGQUxTRTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBEQl9DT1VOVDsgKytpKQorICAgIHsKKwlpZiAoZGlmZmJ1ZltpXSA9PSB3cC0+d19idWZmZXIpCisJICAgIGlkeCA9IGk7CisJZWxzZSBpZiAoZGlmZmJ1ZltpXSAhPSBOVUxMKQorCSAgICBvdGhlciA9IFRSVUU7CisgICAgfQorCisgICAgLyogcmV0dXJuIGhlcmUgaWYgdGhlcmUgYXJlIG5vIGRpZmZzIGluIHRoZSB3aW5kb3cgKi8KKyAgICBpZiAoaWR4ID09IC0xIHx8ICFvdGhlcikKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoZGlmZl9pbnZhbGlkKQorCWV4X2RpZmZ1cGRhdGUoTlVMTCk7CQkvKiB1cGRhdGUgYWZ0ZXIgYSBiaWcgY2hhbmdlICovCisKKyAgICAvKiBSZXR1cm4gaWYgdGhlcmUgYXJlIG5vIGRpZmYgYmxvY2tzLiAgQWxsIGxpbmVzIHdpbGwgYmUgZm9sZGVkLiAqLworICAgIGlmIChmaXJzdF9kaWZmID09IE5VTEwpCisJcmV0dXJuIFRSVUU7CisKKyAgICBmb3IgKGRwID0gZmlyc3RfZGlmZjsgZHAgIT0gTlVMTDsgZHAgPSBkcC0+ZGZfbmV4dCkKKyAgICB7CisJLyogSWYgdGhpcyBjaGFuZ2UgaXMgYmVsb3cgdGhlIGxpbmUgdGhlcmUgY2FuJ3QgYmUgYW55IGZ1cnRoZXIgbWF0Y2guICovCisJaWYgKGRwLT5kZl9sbnVtW2lkeF0gLSBkaWZmX2NvbnRleHQgPiBsbnVtKQorCSAgICBicmVhazsKKwkvKiBJZiB0aGlzIGNoYW5nZSBlbmRzIGJlZm9yZSB0aGUgbGluZSB3ZSBoYXZlIGEgbWF0Y2guICovCisJaWYgKGRwLT5kZl9sbnVtW2lkeF0gKyBkcC0+ZGZfY291bnRbaWR4XSArIGRpZmZfY29udGV4dCA+IGxudW0pCisJICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYKKworLyoKKyAqICJkcCIgYW5kICJkbyIgY29tbWFuZHMuCisgKi8KKyAgICB2b2lkCitudl9kaWZmZ2V0cHV0KHB1dCkKKyAgICBpbnQJCXB1dDsKK3sKKyAgICBleGFyZ19UCWVhOworCisgICAgZWEuYXJnID0gKGNoYXJfdSAqKSIiOworICAgIGlmIChwdXQpCisJZWEuY21kaWR4ID0gQ01EX2RpZmZwdXQ7CisgICAgZWxzZQorCWVhLmNtZGlkeCA9IENNRF9kaWZmZ2V0OworICAgIGVhLmFkZHJfY291bnQgPSAwOworICAgIGVhLmxpbmUxID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworICAgIGVhLmxpbmUyID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworICAgIGV4X2RpZmZnZXRwdXQoJmVhKTsKK30KKworLyoKKyAqICI6ZGlmZmdldCIKKyAqICI6ZGlmZnB1dCIKKyAqLworICAgIHZvaWQKK2V4X2RpZmZnZXRwdXQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJY291bnQ7CisgICAgbGluZW5yX1QJb2ZmID0gMDsKKyAgICBkaWZmX1QJKmRwOworICAgIGRpZmZfVAkqZHByZXY7CisgICAgZGlmZl9UCSpkZnJlZTsKKyAgICBpbnQJCWlkeF9jdXI7CisgICAgaW50CQlpZHhfb3RoZXI7CisgICAgaW50CQlpZHhfZnJvbTsKKyAgICBpbnQJCWlkeF90bzsKKyAgICBpbnQJCWk7CisgICAgaW50CQlhZGRlZDsKKyAgICBjaGFyX3UJKnA7CisgICAgYWNvX3NhdmVfVAlhY287CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCXN0YXJ0X3NraXAsIGVuZF9za2lwOworICAgIGludAkJbmV3X2NvdW50OworCisgICAgLyogRmluZCB0aGUgY3VycmVudCBidWZmZXIgaW4gdGhlIGxpc3Qgb2YgZGlmZiBidWZmZXJzLiAqLworICAgIGlkeF9jdXIgPSBkaWZmX2J1Zl9pZHgoY3VyYnVmKTsKKyAgICBpZiAoaWR4X2N1ciA9PSBEQl9DT1VOVCkKKyAgICB7CisJRU1TRyhfKCJFOTk6IEN1cnJlbnQgYnVmZmVyIGlzIG5vdCBpbiBkaWZmIG1vZGUiKSk7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmICgqZWFwLT5hcmcgPT0gTlVMKQorICAgIHsKKwkvKiBObyBhcmd1bWVudDogRmluZCB0aGUgb3RoZXIgYnVmZmVyIGluIHRoZSBsaXN0IG9mIGRpZmYgYnVmZmVycy4gKi8KKwlmb3IgKGlkeF9vdGhlciA9IDA7IGlkeF9vdGhlciA8IERCX0NPVU5UOyArK2lkeF9vdGhlcikKKwkgICAgaWYgKGRpZmZidWZbaWR4X290aGVyXSAhPSBjdXJidWYgJiYgZGlmZmJ1ZltpZHhfb3RoZXJdICE9IE5VTEwpCisJCWJyZWFrOworCWlmIChpZHhfb3RoZXIgPT0gREJfQ09VTlQpCisJeworCSAgICBFTVNHKF8oIkUxMDA6IE5vIG90aGVyIGJ1ZmZlciBpbiBkaWZmIG1vZGUiKSk7CisJICAgIHJldHVybjsKKwl9CisKKwkvKiBDaGVjayB0aGF0IHRoZXJlIGlzbid0IGEgdGhpcmQgYnVmZmVyIGluIHRoZSBsaXN0ICovCisJZm9yIChpID0gaWR4X290aGVyICsgMTsgaSA8IERCX0NPVU5UOyArK2kpCisJICAgIGlmIChkaWZmYnVmW2ldICE9IGN1cmJ1ZiAmJiBkaWZmYnVmW2ldICE9IE5VTEwpCisJICAgIHsKKwkJRU1TRyhfKCJFMTAxOiBNb3JlIHRoYW4gdHdvIGJ1ZmZlcnMgaW4gZGlmZiBtb2RlLCBkb24ndCBrbm93IHdoaWNoIG9uZSB0byB1c2UiKSk7CisJCXJldHVybjsKKwkgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIEJ1ZmZlciBudW1iZXIgb3IgcGF0dGVybiBnaXZlbi4gIElnbm9yZSB0cmFpbGluZyB3aGl0ZSBzcGFjZS4gKi8KKwlwID0gZWFwLT5hcmcgKyBTVFJMRU4oZWFwLT5hcmcpOworCXdoaWxlIChwID4gZWFwLT5hcmcgJiYgdmltX2lzd2hpdGUocFstMV0pKQorCSAgICAtLXA7CisJZm9yIChpID0gMDsgdmltX2lzZGlnaXQoZWFwLT5hcmdbaV0pICYmIGVhcC0+YXJnICsgaSA8IHA7ICsraSkKKwkgICAgOworCWlmIChlYXAtPmFyZyArIGkgPT0gcCkJICAgIC8qIGRpZ2l0cyBvbmx5ICovCisJICAgIGkgPSBhdG9sKChjaGFyICopZWFwLT5hcmcpOworCWVsc2UKKwl7CisJICAgIGkgPSBidWZsaXN0X2ZpbmRwYXQoZWFwLT5hcmcsIHAsIEZBTFNFLCBUUlVFKTsKKwkgICAgaWYgKGkgPCAwKQorCQlyZXR1cm47CQkvKiBlcnJvciBtZXNzYWdlIGFscmVhZHkgZ2l2ZW4gKi8KKwl9CisJYnVmID0gYnVmbGlzdF9maW5kbnIoaSk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCXsKKwkgICAgRU1TRzIoXygiRTEwMjogQ2FuJ3QgZmluZCBidWZmZXIgXCIlc1wiIiksIGVhcC0+YXJnKTsKKwkgICAgcmV0dXJuOworCX0KKwlpZHhfb3RoZXIgPSBkaWZmX2J1Zl9pZHgoYnVmKTsKKwlpZiAoaWR4X290aGVyID09IERCX0NPVU5UKQorCXsKKwkgICAgRU1TRzIoXygiRTEwMzogQnVmZmVyIFwiJXNcIiBpcyBub3QgaW4gZGlmZiBtb2RlIiksIGVhcC0+YXJnKTsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9CisKKyAgICBkaWZmX2J1c3kgPSBUUlVFOworCisgICAgLyogV2hlbiBubyByYW5nZSBnaXZlbiBpbmNsdWRlIHRoZSBsaW5lIGFib3ZlIG9yIGJlbG93IHRoZSBjdXJzb3IuICovCisgICAgaWYgKGVhcC0+YWRkcl9jb3VudCA9PSAwKQorICAgIHsKKwkvKiBNYWtlIGl0IHBvc3NpYmxlIHRoYXQgIjpkaWZmZ2V0IiBvbiB0aGUgbGFzdCBsaW5lIGdldHMgbGluZSBiZWxvdworCSAqIHRoZSBjdXJzb3IgbGluZSB3aGVuIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYWJvdmUgdGhlIGN1cnNvci4gKi8KKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2RpZmZnZXQKKwkJJiYgZWFwLT5saW5lMSA9PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudAorCQkmJiBkaWZmX2NoZWNrKGN1cndpbiwgZWFwLT5saW5lMSkgPT0gMAorCQkmJiAoZWFwLT5saW5lMSA9PSAxIHx8IGRpZmZfY2hlY2soY3Vyd2luLCBlYXAtPmxpbmUxIC0gMSkgPT0gMCkpCisJICAgICsrZWFwLT5saW5lMjsKKwllbHNlIGlmIChlYXAtPmxpbmUxID4gMCkKKwkgICAgLS1lYXAtPmxpbmUxOworICAgIH0KKworICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfZGlmZmdldCkKKyAgICB7CisJaWR4X2Zyb20gPSBpZHhfb3RoZXI7CisJaWR4X3RvID0gaWR4X2N1cjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZHhfZnJvbSA9IGlkeF9jdXI7CisJaWR4X3RvID0gaWR4X290aGVyOworCS8qIE5lZWQgdG8gbWFrZSB0aGUgb3RoZXIgYnVmZmVyIHRoZSBjdXJyZW50IGJ1ZmZlciB0byBiZSBhYmxlIHRvIG1ha2UKKwkgKiBjaGFuZ2VzIGluIGl0LiAqLworCS8qIHNldCBjdXJ3aW4vY3VyYnVmIHRvIGJ1ZiBhbmQgc2F2ZSBhIGZldyB0aGluZ3MgKi8KKwlhdWNtZF9wcmVwYnVmKCZhY28sIGRpZmZidWZbaWR4X290aGVyXSk7CisgICAgfQorCisgICAgZHByZXYgPSBOVUxMOworICAgIGZvciAoZHAgPSBmaXJzdF9kaWZmOyBkcCAhPSBOVUxMOyApCisgICAgeworCWlmIChkcC0+ZGZfbG51bVtpZHhfY3VyXSA+IGVhcC0+bGluZTIgKyBvZmYpCisJICAgIGJyZWFrOwkvKiBwYXN0IHRoZSByYW5nZSB0aGF0IHdhcyBzcGVjaWZpZWQgKi8KKworCWRmcmVlID0gTlVMTDsKKwlsbnVtID0gZHAtPmRmX2xudW1baWR4X3RvXTsKKwljb3VudCA9IGRwLT5kZl9jb3VudFtpZHhfdG9dOworCWlmIChkcC0+ZGZfbG51bVtpZHhfY3VyXSArIGRwLT5kZl9jb3VudFtpZHhfY3VyXSA+IGVhcC0+bGluZTEgKyBvZmYKKwkJJiYgdV9zYXZlKGxudW0gLSAxLCBsbnVtICsgY291bnQpICE9IEZBSUwpCisJeworCSAgICAvKiBJbnNpZGUgdGhlIHNwZWNpZmllZCByYW5nZSBhbmQgc2F2aW5nIGZvciB1bmRvIHdvcmtlZC4gKi8KKwkgICAgc3RhcnRfc2tpcCA9IDA7CisJICAgIGVuZF9za2lwID0gMDsKKwkgICAgaWYgKGVhcC0+YWRkcl9jb3VudCA+IDApCisJICAgIHsKKwkJLyogQSByYW5nZSB3YXMgc3BlY2lmaWVkOiBjaGVjayBpZiBsaW5lcyBuZWVkIHRvIGJlIHNraXBwZWQuICovCisJCXN0YXJ0X3NraXAgPSBlYXAtPmxpbmUxICsgb2ZmIC0gZHAtPmRmX2xudW1baWR4X2N1cl07CisJCWlmIChzdGFydF9za2lwID4gMCkKKwkJeworCQkgICAgLyogcmFuZ2Ugc3RhcnRzIGJlbG93IHN0YXJ0IG9mIGN1cnJlbnQgZGlmZiBibG9jayAqLworCQkgICAgaWYgKHN0YXJ0X3NraXAgPiBjb3VudCkKKwkJICAgIHsKKwkJCWxudW0gKz0gY291bnQ7CisJCQljb3VudCA9IDA7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQljb3VudCAtPSBzdGFydF9za2lwOworCQkJbG51bSArPSBzdGFydF9za2lwOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJICAgIHN0YXJ0X3NraXAgPSAwOworCisJCWVuZF9za2lwID0gZHAtPmRmX2xudW1baWR4X2N1cl0gKyBkcC0+ZGZfY291bnRbaWR4X2N1cl0gLSAxCisJCQkJCQkJIC0gKGVhcC0+bGluZTIgKyBvZmYpOworCQlpZiAoZW5kX3NraXAgPiAwKQorCQl7CisJCSAgICAvKiByYW5nZSBlbmRzIGFib3ZlIGVuZCBvZiBjdXJyZW50L2Zyb20gZGlmZiBibG9jayAqLworCQkgICAgaWYgKGlkeF9jdXIgPT0gaWR4X2Zyb20pCS8qIDpkaWZmcHV0ICovCisJCSAgICB7CisJCQlpID0gZHAtPmRmX2NvdW50W2lkeF9jdXJdIC0gc3RhcnRfc2tpcCAtIGVuZF9za2lwOworCQkJaWYgKGNvdW50ID4gaSkKKwkJCSAgICBjb3VudCA9IGk7CisJCSAgICB9CisJCSAgICBlbHNlCQkJLyogOmRpZmZnZXQgKi8KKwkJICAgIHsKKwkJCWNvdW50IC09IGVuZF9za2lwOworCQkJZW5kX3NraXAgPSBkcC0+ZGZfY291bnRbaWR4X2Zyb21dIC0gc3RhcnRfc2tpcCAtIGNvdW50OworCQkJaWYgKGVuZF9za2lwIDwgMCkKKwkJCSAgICBlbmRfc2tpcCA9IDA7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQkgICAgZW5kX3NraXAgPSAwOworCSAgICB9CisKKwkgICAgYWRkZWQgPSAwOworCSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKwkgICAgeworCQltbF9kZWxldGUobG51bSwgRkFMU0UpOworCQktLWFkZGVkOworCSAgICB9CisJICAgIGZvciAoaSA9IDA7IGkgPCBkcC0+ZGZfY291bnRbaWR4X2Zyb21dIC0gc3RhcnRfc2tpcCAtIGVuZF9za2lwOyArK2kpCisJICAgIHsKKwkJbGluZW5yX1QgbnI7CisKKwkJbnIgPSBkcC0+ZGZfbG51bVtpZHhfZnJvbV0gKyBzdGFydF9za2lwICsgaTsKKwkJaWYgKG5yID4gZGlmZmJ1ZltpZHhfZnJvbV0tPmJfbWwubWxfbGluZV9jb3VudCkKKwkJICAgIGJyZWFrOworCQlwID0gdmltX3N0cnNhdmUobWxfZ2V0X2J1ZihkaWZmYnVmW2lkeF9mcm9tXSwgbnIsIEZBTFNFKSk7CisJCWlmIChwICE9IE5VTEwpCisJCXsKKwkJICAgIG1sX2FwcGVuZChsbnVtICsgaSAtIDEsIHAsIDAsIEZBTFNFKTsKKwkJICAgIHZpbV9mcmVlKHApOworCQkgICAgKythZGRlZDsKKwkJfQorCSAgICB9CisJICAgIG5ld19jb3VudCA9IGRwLT5kZl9jb3VudFtpZHhfdG9dICsgYWRkZWQ7CisJICAgIGRwLT5kZl9jb3VudFtpZHhfdG9dID0gbmV3X2NvdW50OworCisJICAgIGlmIChzdGFydF9za2lwID09IDAgJiYgZW5kX3NraXAgPT0gMCkKKwkgICAgeworCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGJ1ZmZlcnMgYW5kIGlmIHRoZSBkaWZmIGlzCisJCSAqIGVxdWFsIGluIHRoZW0uICovCisJCWZvciAoaSA9IDA7IGkgPCBEQl9DT1VOVDsgKytpKQorCQkgICAgaWYgKGRpZmZidWZbaV0gIT0gTlVMTCAmJiBpICE9IGlkeF9mcm9tICYmIGkgIT0gaWR4X3RvCisJCQkgICAgJiYgIWRpZmZfZXF1YWxfZW50cnkoZHAsIGlkeF9mcm9tLCBpKSkKKwkJCWJyZWFrOworCQlpZiAoaSA9PSBEQl9DT1VOVCkKKwkJeworCQkgICAgLyogZGVsZXRlIHRoZSBkaWZmIGVudHJ5LCB0aGUgYnVmZmVycyBhcmUgbm93IGVxdWFsIGhlcmUgKi8KKwkJICAgIGRmcmVlID0gZHA7CisJCSAgICBkcCA9IGRwLT5kZl9uZXh0OworCQkgICAgaWYgKGRwcmV2ID09IE5VTEwpCisJCQlmaXJzdF9kaWZmID0gZHA7CisJCSAgICBlbHNlCisJCQlkcHJldi0+ZGZfbmV4dCA9IGRwOworCQl9CisJICAgIH0KKworCSAgICAvKiBBZGp1c3QgbWFya3MuICBUaGlzIHdpbGwgY2hhbmdlIHRoZSBmb2xsb3dpbmcgZW50cmllcyEgKi8KKwkgICAgaWYgKGFkZGVkICE9IDApCisJICAgIHsKKwkJbWFya19hZGp1c3QobG51bSwgbG51bSArIGNvdW50IC0gMSwgKGxvbmcpTUFYTE5VTSwgKGxvbmcpYWRkZWQpOworCQlpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID49IGxudW0pCisJCXsKKwkJICAgIC8qIEFkanVzdCB0aGUgY3Vyc29yIHBvc2l0aW9uIGlmIGl0J3MgaW4vYWZ0ZXIgdGhlIGNoYW5nZWQKKwkJICAgICAqIGxpbmVzLiAqLworCQkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA+PSBsbnVtICsgY291bnQpCisJCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gKz0gYWRkZWQ7CisJCSAgICBlbHNlIGlmIChhZGRlZCA8IDApCisJCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtOworCQl9CisJICAgIH0KKwkgICAgY2hhbmdlZF9saW5lcyhsbnVtLCAwLCBsbnVtICsgY291bnQsIChsb25nKWFkZGVkKTsKKworCSAgICBpZiAoZGZyZWUgIT0gTlVMTCkKKwkgICAgeworCQkvKiBEaWZmIGlzIGRlbGV0ZWQsIHVwZGF0ZSBmb2xkcyBpbiBvdGhlciB3aW5kb3dzLiAqLworI2lmZGVmIEZFQVRfRk9MRElORworCQlkaWZmX2ZvbGRfdXBkYXRlKGRmcmVlLCBpZHhfdG8pOworI2VuZGlmCisJCXZpbV9mcmVlKGRmcmVlKTsKKwkgICAgfQorCSAgICBlbHNlCisJCS8qIG1hcmtfYWRqdXN0KCkgbWF5IGhhdmUgY2hhbmdlZCB0aGUgY291bnQgaW4gYSB3cm9uZyB3YXkgKi8KKwkJZHAtPmRmX2NvdW50W2lkeF90b10gPSBuZXdfY291bnQ7CisKKwkgICAgLyogV2hlbiBjaGFuZ2luZyB0aGUgY3VycmVudCBidWZmZXIsIGtlZXAgdHJhY2sgb2YgbGluZSBudW1iZXJzICovCisJICAgIGlmIChpZHhfY3VyID09IGlkeF90bykKKwkJb2ZmICs9IGFkZGVkOworCX0KKworCS8qIElmIGJlZm9yZSB0aGUgcmFuZ2Ugb3Igbm90IGRlbGV0ZWQsIGdvIHRvIG5leHQgZGlmZi4gKi8KKwlpZiAoZGZyZWUgPT0gTlVMTCkKKwl7CisJICAgIGRwcmV2ID0gZHA7CisJICAgIGRwID0gZHAtPmRmX25leHQ7CisJfQorICAgIH0KKworICAgIC8qIHJlc3RvcmUgY3Vyd2luL2N1cmJ1ZiBhbmQgYSBmZXcgb3RoZXIgdGhpbmdzICovCisgICAgaWYgKGlkeF9vdGhlciA9PSBpZHhfdG8pCisgICAgeworCS8qIFN5bmNpbmcgdW5kbyBvbmx5IHdvcmtzIGZvciB0aGUgY3VycmVudCBidWZmZXIsIGJ1dCB3ZSBjaGFuZ2UKKwkgKiBhbm90aGVyIGJ1ZmZlci4gIFN5bmMgdW5kbyBpZiB0aGUgY29tbWFuZCB3YXMgdHlwZWQuICBUaGlzIGlzbid0CisJICogMTAwJSByaWdodCB3aGVuICI6ZGlmZnB1dCIgaXMgdXNlZCBpbiBhIGZ1bmN0aW9uIG9yIG1hcHBpbmcuICovCisJaWYgKEtleVR5cGVkKQorCSAgICB1X3N5bmMoKTsKKwlhdWNtZF9yZXN0YnVmKCZhY28pOworICAgIH0KKworICAgIGRpZmZfYnVzeSA9IEZBTFNFOworCisgICAgLyogQ2hlY2sgdGhhdCB0aGUgY3Vyc29yIGlzIG9uIGEgdmFsaWQgY2hhcmFjdGVyIGFuZCB1cGRhdGUgaXQncyBwb3NpdGlvbi4KKyAgICAgKiBXaGVuIHRoZXJlIHdlcmUgZmlsbGVyIGxpbmVzIHRoZSB0b3BsaW5lIGhhcyBiZWNvbWUgaW52YWxpZC4gKi8KKyAgICBjaGVja19jdXJzb3IoKTsKKyAgICBjaGFuZ2VkX2xpbmVfYWJ2X2N1cnMoKTsKKworICAgIC8qIEFsc28gbmVlZCB0byByZWRyYXcgdGhlIG90aGVyIGJ1ZmZlcnMuICovCisgICAgZGlmZl9yZWRyYXcoRkFMU0UpOworfQorCisjaWZkZWYgRkVBVF9GT0xESU5HCisvKgorICogVXBkYXRlIGZvbGRzIGZvciBhbGwgZGlmZiBidWZmZXJzIGZvciBlbnRyeSAiZHAiLgorICogU2tpcCBidWZmZXIgd2l0aCBpbmRleCAic2tpcF9pZHgiLgorICogV2hlbiB0aGVyZSBhcmUgbm8gZGlmZnMsIGFsbCBmb2xkcyBhcmUgcmVtb3ZlZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitkaWZmX2ZvbGRfdXBkYXRlKGRwLCBza2lwX2lkeCkKKyAgICBkaWZmX1QJKmRwOworICAgIGludAkJc2tpcF9pZHg7Cit7CisgICAgaW50CQlpOworICAgIHdpbl9UCSp3cDsKKworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gTlVMTDsgd3AgPSB3cC0+d19uZXh0KQorCWZvciAoaSA9IDA7IGkgPCBEQl9DT1VOVDsgKytpKQorCSAgICBpZiAoZGlmZmJ1ZltpXSA9PSB3cC0+d19idWZmZXIgJiYgaSAhPSBza2lwX2lkeCkKKwkJZm9sZFVwZGF0ZSh3cCwgZHAtPmRmX2xudW1baV0sCisJCQkJCSAgICBkcC0+ZGZfbG51bVtpXSArIGRwLT5kZl9jb3VudFtpXSk7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGJ1ZmZlciAiYnVmIiBpcyBpbiBkaWZmLW1vZGUuCisgKi8KKyAgICBpbnQKK2RpZmZfbW9kZV9idWYoYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgcmV0dXJuIGRpZmZfYnVmX2lkeChidWYpICE9IERCX0NPVU5UOworfQorCisvKgorICogTW92ZSAiY291bnQiIHRpbWVzIGluIGRpcmVjdGlvbiAiZGlyIiB0byB0aGUgbmV4dCBkaWZmIGJsb2NrLgorICogUmV0dXJuIEZBSUwgaWYgdGhlcmUgaXNuJ3Qgc3VjaCBhIGRpZmYgYmxvY2suCisgKi8KKyAgICBpbnQKK2RpZmZfbW92ZV90byhkaXIsIGNvdW50KQorICAgIGludAkJZGlyOworICAgIGxvbmcJY291bnQ7Cit7CisgICAgaW50CQlpZHg7CisgICAgbGluZW5yX1QJbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICBkaWZmX1QJKmRwOworCisgICAgaWR4ID0gZGlmZl9idWZfaWR4KGN1cmJ1Zik7CisgICAgaWYgKGlkeCA9PSBEQl9DT1VOVCB8fCBmaXJzdF9kaWZmID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBpZiAoZGlmZl9pbnZhbGlkKQorCWV4X2RpZmZ1cGRhdGUoTlVMTCk7CQkvKiB1cGRhdGUgYWZ0ZXIgYSBiaWcgY2hhbmdlICovCisKKyAgICBpZiAoZmlyc3RfZGlmZiA9PSBOVUxMKQkJLyogbm8gZGlmZnMgdG9kYXkgKi8KKwlyZXR1cm4gRkFJTDsKKworICAgIHdoaWxlICgtLWNvdW50ID49IDApCisgICAgeworCS8qIENoZWNrIGlmIGFscmVhZHkgYmVmb3JlIGZpcnN0IGRpZmYuICovCisJaWYgKGRpciA9PSBCQUNLV0FSRCAmJiBsbnVtIDw9IGZpcnN0X2RpZmYtPmRmX2xudW1baWR4XSkKKwkgICAgYnJlYWs7CisKKwlmb3IgKGRwID0gZmlyc3RfZGlmZjsgOyBkcCA9IGRwLT5kZl9uZXh0KQorCXsKKwkgICAgaWYgKGRwID09IE5VTEwpCisJCWJyZWFrOworCSAgICBpZiAoKGRpciA9PSBGT1JXQVJEICYmIGxudW0gPCBkcC0+ZGZfbG51bVtpZHhdKQorCQkgICAgfHwgKGRpciA9PSBCQUNLV0FSRAorCQkJJiYgKGRwLT5kZl9uZXh0ID09IE5VTEwKKwkJCSAgICB8fCBsbnVtIDw9IGRwLT5kZl9uZXh0LT5kZl9sbnVtW2lkeF0pKSkKKwkgICAgeworCQlsbnVtID0gZHAtPmRmX2xudW1baWR4XTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogZG9uJ3QgZW5kIHVwIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZSAqLworICAgIGlmIChsbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJbG51bSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCisgICAgLyogV2hlbiB0aGUgY3Vyc29yIGRpZG4ndCBtb3ZlIGF0IGFsbCB3ZSBmYWlsLiAqLworICAgIGlmIChsbnVtID09IGN1cndpbi0+d19jdXJzb3IubG51bSkKKwlyZXR1cm4gRkFJTDsKKworICAgIHNldHBjbWFyaygpOworICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOworCisgICAgcmV0dXJuIE9LOworfQorCisjaWYgZGVmaW5lZChGRUFUX0ZPTERJTkcpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogRm9yIGxpbmUgImxudW0iIGluIHRoZSBjdXJyZW50IHdpbmRvdyBmaW5kIHRoZSBlcXVpdmFsZW50IGxudW0gaW4gd2luZG93CisgKiAid3AiLCBjb21wZW5zYXRpbmcgZm9yIGluc2VydGVkL2RlbGV0ZWQgbGluZXMuCisgKi8KKyAgICBsaW5lbnJfVAorZGlmZl9sbnVtX3dpbihsbnVtLCB3cCkKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIHdpbl9UCSp3cDsKK3sKKyAgICBkaWZmX1QJKmRwOworICAgIGludAkJaWR4OworICAgIGludAkJaTsKKyAgICBsaW5lbnJfVAluOworCisgICAgaWR4ID0gZGlmZl9idWZfaWR4KGN1cmJ1Zik7CisgICAgaWYgKGlkeCA9PSBEQl9DT1VOVCkJCS8qIHNhZmV0eSBjaGVjayAqLworCXJldHVybiAobGluZW5yX1QpMDsKKworICAgIGlmIChkaWZmX2ludmFsaWQpCisJZXhfZGlmZnVwZGF0ZShOVUxMKTsJCS8qIHVwZGF0ZSBhZnRlciBhIGJpZyBjaGFuZ2UgKi8KKworICAgIC8qIHNlYXJjaCBmb3IgYSBjaGFuZ2UgdGhhdCBpbmNsdWRlcyAibG51bSIgaW4gdGhlIGxpc3Qgb2YgZGlmZmJsb2Nrcy4gKi8KKyAgICBmb3IgKGRwID0gZmlyc3RfZGlmZjsgZHAgIT0gTlVMTDsgZHAgPSBkcC0+ZGZfbmV4dCkKKwlpZiAobG51bSA8PSBkcC0+ZGZfbG51bVtpZHhdICsgZHAtPmRmX2NvdW50W2lkeF0pCisJICAgIGJyZWFrOworCisgICAgLyogV2hlbiBhZnRlciB0aGUgbGFzdCBjaGFuZ2UsIGNvbXB1dGUgcmVsYXRpdmUgdG8gdGhlIGxhc3QgbGluZSBudW1iZXIuICovCisgICAgaWYgKGRwID09IE5VTEwpCisJcmV0dXJuIHdwLT53X2J1ZmZlci0+Yl9tbC5tbF9saW5lX2NvdW50CisJCQkJCS0gKGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50IC0gbG51bSk7CisKKyAgICAvKiBGaW5kIGluZGV4IGZvciAid3AiLiAqLworICAgIGkgPSBkaWZmX2J1Zl9pZHgod3AtPndfYnVmZmVyKTsKKyAgICBpZiAoaSA9PSBEQl9DT1VOVCkJCQkvKiBzYWZldHkgY2hlY2sgKi8KKwlyZXR1cm4gKGxpbmVucl9UKTA7CisKKyAgICBuID0gbG51bSArIChkcC0+ZGZfbG51bVtpXSAtIGRwLT5kZl9sbnVtW2lkeF0pOworICAgIGlmIChuID4gZHAtPmRmX2xudW1baV0gKyBkcC0+ZGZfY291bnRbaV0pCisJbiA9IGRwLT5kZl9sbnVtW2ldICsgZHAtPmRmX2NvdW50W2ldOworICAgIHJldHVybiBuOworfQorI2VuZGlmCisKKyNlbmRpZgkvKiBGRUFUX0RJRkYgKi8KZGlmZiAtLWdpdCBhL3NyYy9kaWdyYXBoLmMgYi9zcmMvZGlncmFwaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjFjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGlncmFwaC5jCkBAIC0wLDAgKzEsMjUxMyBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogZGlncmFwaC5jOiBjb2RlIGZvciBkaWdyYXBocworICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmIGRlZmluZWQoRkVBVF9ESUdSQVBIUykgfHwgZGVmaW5lZChQUk9UTykKKworI2lmZGVmIEZFQVRfTUJZVEUKK3R5cGVkZWYgaW50IHJlc3VsdF9UOworI2Vsc2UKK3R5cGVkZWYgY2hhcl91IHJlc3VsdF9UOworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IGRpZ3JhcGgKK3sKKyAgICBjaGFyX3UJY2hhcjE7CisgICAgY2hhcl91CWNoYXIyOworICAgIHJlc3VsdF9UCXJlc3VsdDsKK30gZGlncl9UOworCitzdGF0aWMgaW50IGdldGV4YWN0ZGlncmFwaCBfX0FSR1MoKGludCwgaW50LCBpbnQpKTsKK3N0YXRpYyB2b2lkIHByaW50ZGlncmFwaCBfX0FSR1MoKGRpZ3JfVCAqKSk7CisKKy8qIGRpZ3JhcGhzIGFkZGVkIGJ5IHRoZSB1c2VyICovCitzdGF0aWMgZ2FycmF5X1QJdXNlcl9kaWdyYXBocyA9IHswLCAwLCBzaXplb2YoZGlncl9UKSwgMTAsIE5VTEx9OworCisvKgorICogTm90ZTogQ2hhcmFjdGVycyBtYXJrZWQgd2l0aCBYWCBhcmUgbm90IGluY2x1ZGVkIGxpdGVyYWxseSwgYmVjYXVzZSBzb21lCisgKiBjb21waWxlcnMgY2Fubm90IGhhbmRsZSB0aGVtIChBbWlnYSBTQVMvQyBpcyB0aGUgbW9zdCBwaWNreSBvbmUpLgorICovCisjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChPUzIpCisJLyoKKwkgKiBNU0RPUyBkaWdyYXBocy4KKwkgKi8KK2RpZ3JfVAlkaWdyYXBoZGVmYXVsdFtdID0KKyAgICAgICB7eydDJywgJywnLCAxMjh9LAkvKiB+QCBYWCAqLworCXsndScsICciJywgMTI5fSwJLyoggSAqLworCXsnZScsICdcJycsIDEzMH0sCS8qIIIgKi8KKwl7J2EnLCAnXicsIDEzMX0sCS8qIIMgKi8KKwl7J2EnLCAnIicsIDEzMn0sCS8qIIQgKi8KKwl7J2EnLCAnYCcsIDEzM30sCS8qIIUgKi8KKwl7J2EnLCAnQCcsIDEzNH0sCS8qIIYgKi8KKwl7J2MnLCAnLCcsIDEzNX0sCS8qIH5HIFhYICovCisJeydlJywgJ14nLCAxMzZ9LAkvKiB+SCBYWCAqLworCXsnZScsICciJywgMTM3fSwJLyogiSAqLworCXsnZScsICdgJywgMTM4fSwJLyogiiAqLworCXsnaScsICciJywgMTM5fSwJLyogiyAqLworCXsnaScsICdeJywgMTQwfSwJLyogjCAqLworCXsnaScsICdgJywgMTQxfSwJLyogjSAqLworCXsnQScsICciJywgMTQyfSwJLyogfk4gWFggKi8KKwl7J0EnLCAnQCcsIDE0M30sCS8qII8gKi8KKwl7J0UnLCAnXCcnLCAxNDR9LAkvKiCQICovCisJeydhJywgJ2UnLCAxNDV9LAkvKiCRICovCisJeydBJywgJ0UnLCAxNDZ9LAkvKiCSICovCisJeydvJywgJ14nLCAxNDd9LAkvKiCTICovCisJeydvJywgJyInLCAxNDh9LAkvKiCUICovCisJeydvJywgJ2AnLCAxNDl9LAkvKiCVICovCisJeyd1JywgJ14nLCAxNTB9LAkvKiCWICovCisJeyd1JywgJ2AnLCAxNTF9LAkvKiCXICovCisJeyd5JywgJyInLCAxNTJ9LAkvKiCYICovCisJeydPJywgJyInLCAxNTN9LAkvKiCZICovCisJeydVJywgJyInLCAxNTR9LAkvKiCaICovCisJeydjJywgJ3wnLCAxNTV9LAkvKiCbICovCisJeyckJywgJyQnLCAxNTZ9LAkvKiCcICovCisJeydZJywgJy0nLCAxNTd9LAkvKiB+XSBYWCAqLworCXsnUCcsICd0JywgMTU4fSwJLyogniAqLworCXsnZicsICdmJywgMTU5fSwJLyognyAqLworCXsnYScsICdcJycsIDE2MH0sCS8qIKAgKi8KKwl7J2knLCAnXCcnLCAxNjF9LAkvKiChICovCisJeydvJywgJ1wnJywgMTYyfSwJLyogoiAqLworCXsndScsICdcJycsIDE2M30sCS8qIHggWFggKi8KKwl7J24nLCAnficsIDE2NH0sCS8qIKQgKi8KKwl7J04nLCAnficsIDE2NX0sCS8qIKUgKi8KKwl7J2EnLCAnYScsIDE2Nn0sCS8qIKYgKi8KKwl7J28nLCAnbycsIDE2N30sCS8qIKcgKi8KKwl7J34nLCAnPycsIDE2OH0sCS8qIKggKi8KKwl7Jy0nLCAnYScsIDE2OX0sCS8qIKkgKi8KKwl7J2EnLCAnLScsIDE3MH0sCS8qIKogKi8KKwl7JzEnLCAnMicsIDE3MX0sCS8qIKsgKi8KKwl7JzEnLCAnNCcsIDE3Mn0sCS8qIKwgKi8KKwl7J34nLCAnIScsIDE3M30sCS8qIK0gKi8KKwl7JzwnLCAnPCcsIDE3NH0sCS8qIK4gKi8KKwl7Jz4nLCAnPicsIDE3NX0sCS8qIK8gKi8KKworCXsncycsICdzJywgMjI1fSwJLyog4SAqLworCXsnaicsICd1JywgMjMwfSwJLyog5iAqLworCXsnbycsICcvJywgMjM3fSwJLyog7SAqLworCXsnKycsICctJywgMjQxfSwJLyog8SAqLworCXsnPicsICc9JywgMjQyfSwJLyog8iAqLworCXsnPCcsICc9JywgMjQzfSwJLyog8yAqLworCXsnOicsICctJywgMjQ2fSwJLyog9iAqLworCXsnficsICd+JywgMjQ3fSwJLyog9yAqLworCXsnficsICdvJywgMjQ4fSwJLyog+CAqLworCXsnMicsICcyJywgMjUzfSwJLyog/SAqLworCXtOVUwsIE5VTCwgTlVMfQorCX07CisKKyNlbHNlCS8qICFNU0RPUyAmJiAhT1MyICovCisjIGlmZGVmIF9fTUlOVF9fCisKKwkvKgorCSAqIEFUQVJJIGRpZ3JhcGhzCisJICovCitkaWdyX1QJZGlncmFwaGRlZmF1bHRbXSA9CisgICAgICAge3snQycsICcsJywgMTI4fSwJLyogfkAgWFggKi8KKwl7J3UnLCAnIicsIDEyOX0sCS8qIIEgKi8KKwl7J2UnLCAnXCcnLCAxMzB9LAkvKiCCICovCisJeydhJywgJ14nLCAxMzF9LAkvKiCDICovCisJeydhJywgJyInLCAxMzJ9LAkvKiCEICovCisJeydhJywgJ2AnLCAxMzN9LAkvKiCFICovCisJeydhJywgJ0AnLCAxMzR9LAkvKiCGICovCisJeydjJywgJywnLCAxMzV9LAkvKiB+RyBYWCAqLworCXsnZScsICdeJywgMTM2fSwJLyogfkggWFggKi8KKwl7J2UnLCAnIicsIDEzN30sCS8qIIkgKi8KKwl7J2UnLCAnYCcsIDEzOH0sCS8qIIogKi8KKwl7J2knLCAnIicsIDEzOX0sCS8qIIsgKi8KKwl7J2knLCAnXicsIDE0MH0sCS8qIIwgKi8KKwl7J2knLCAnYCcsIDE0MX0sCS8qII0gKi8KKwl7J0EnLCAnIicsIDE0Mn0sCS8qII4gKi8KKwl7J0EnLCAnQCcsIDE0M30sCS8qII8gKi8KKwl7J0UnLCAnXCcnLCAxNDR9LAkvKiCQICovCisJeydhJywgJ2UnLCAxNDV9LAkvKiCRICovCisJeydBJywgJ0UnLCAxNDZ9LAkvKiCSICovCisJeydvJywgJ14nLCAxNDd9LAkvKiCTICovCisJeydvJywgJyInLCAxNDh9LAkvKiCUICovCisJeydvJywgJ2AnLCAxNDl9LAkvKiCVICovCisJeyd1JywgJ14nLCAxNTB9LAkvKiCWICovCisJeyd1JywgJ2AnLCAxNTF9LAkvKiCXICovCisJeyd5JywgJyInLCAxNTJ9LAkvKiCYICovCisJeydPJywgJyInLCAxNTN9LAkvKiCZICovCisJeydVJywgJyInLCAxNTR9LAkvKiCaICovCisJeydjJywgJ3wnLCAxNTV9LAkvKiCbICovCisJeyckJywgJyQnLCAxNTZ9LAkvKiCcICovCisJeydZJywgJy0nLCAxNTd9LAkvKiB+XSBYWCAqLworCXsncycsICdzJywgMTU4fSwJLyogniAqLworCXsnZicsICdmJywgMTU5fSwJLyognyAqLworCXsnYScsICdcJycsIDE2MH0sCS8qIKAgKi8KKwl7J2knLCAnXCcnLCAxNjF9LAkvKiChICovCisJeydvJywgJ1wnJywgMTYyfSwJLyogoiAqLworCXsndScsICdcJycsIDE2M30sCS8qIKMgKi8KKwl7J24nLCAnficsIDE2NH0sCS8qIKQgKi8KKwl7J04nLCAnficsIDE2NX0sCS8qIKUgKi8KKwl7J2EnLCAnYScsIDE2Nn0sCS8qIKYgKi8KKwl7J28nLCAnbycsIDE2N30sCS8qIKcgKi8KKwl7J34nLCAnPycsIDE2OH0sCS8qIKggKi8KKwl7Jy0nLCAnYScsIDE2OX0sCS8qIKkgKi8KKwl7J2EnLCAnLScsIDE3MH0sCS8qIKogKi8KKwl7JzEnLCAnMicsIDE3MX0sCS8qIKsgKi8KKwl7JzEnLCAnNCcsIDE3Mn0sCS8qIKwgKi8KKwl7J34nLCAnIScsIDE3M30sCS8qIK0gKi8KKwl7JzwnLCAnPCcsIDE3NH0sCS8qIK4gKi8KKwl7Jz4nLCAnPicsIDE3NX0sCS8qIK8gKi8KKwl7J2onLCAndScsIDIzMH0sCS8qIOYgKi8KKwl7J28nLCAnLycsIDIzN30sCS8qIO0gKi8KKwl7JysnLCAnLScsIDI0MX0sCS8qIPEgKi8KKwl7Jz4nLCAnPScsIDI0Mn0sCS8qIPIgKi8KKwl7JzwnLCAnPScsIDI0M30sCS8qIPMgKi8KKwl7JzonLCAnLScsIDI0Nn0sCS8qIPYgKi8KKwl7J34nLCAnficsIDI0N30sCS8qIPcgKi8KKwl7J34nLCAnbycsIDI0OH0sCS8qIPggKi8KKwl7JzInLCAnMicsIDI1M30sCS8qIP0gKi8KKwl7TlVMLCBOVUwsIE5VTH0KKwl9OworCisjIGVsc2UJLyogIV9fTUlOVF9fICovCisjICBpZmRlZiBIUFVYX0RJR1JBUEhTCisKKwkvKgorCSAqIGRpZmZlcmVudCBIUFVYIGRpZ3JhcGhzCisJICovCitkaWdyX1QJZGlncmFwaGRlZmF1bHRbXSA9CisgICAgICAge3snQScsICdgJywgMTYxfSwJLyogoSAqLworCXsnQScsICdeJywgMTYyfSwJLyogoiAqLworCXsnRScsICdgJywgMTYzfSwJLyogoyAqLworCXsnRScsICdeJywgMTY0fSwJLyogpCAqLworCXsnRScsICciJywgMTY1fSwJLyogpSAqLworCXsnSScsICdeJywgMTY2fSwJLyogpiAqLworCXsnSScsICciJywgMTY3fSwJLyogpyAqLworCXsnXCcnLCAnXCcnLCAxNjh9LAkvKiCoICovCisJeydgJywgJ2AnLCAxNjl9LAkvKiCpICovCisJeydeJywgJ14nLCAxNzB9LAkvKiCqICovCisJeyciJywgJyInLCAxNzF9LAkvKiCrICovCisJeyd+JywgJ34nLCAxNzJ9LAkvKiCsICovCisJeydVJywgJ2AnLCAxNzN9LAkvKiCtICovCisJeydVJywgJ14nLCAxNzR9LAkvKiCuICovCisJeydMJywgJz0nLCAxNzV9LAkvKiCvICovCisJeyd+JywgJ18nLCAxNzZ9LAkvKiCwICovCisJeydZJywgJ1wnJywgMTc3fSwJLyogsSAqLworCXsneScsICdcJycsIDE3OH0sCS8qILIgKi8KKwl7J34nLCAnbycsIDE3OX0sCS8qILMgKi8KKwl7J0MnLCAnLCcsIDE4MH0sCS8qILQgKi8KKwl7J2MnLCAnLCcsIDE4MX0sCS8qILUgKi8KKwl7J04nLCAnficsIDE4Mn0sCS8qILYgKi8KKwl7J24nLCAnficsIDE4M30sCS8qILcgKi8KKwl7J34nLCAnIScsIDE4NH0sCS8qILggKi8KKwl7J34nLCAnPycsIDE4NX0sCS8qILkgKi8KKwl7J28nLCAneCcsIDE4Nn0sCS8qILogKi8KKwl7J0wnLCAnLScsIDE4N30sCS8qILsgKi8KKwl7J1knLCAnPScsIDE4OH0sCS8qILwgKi8KKwl7J3AnLCAncCcsIDE4OX0sCS8qIL0gKi8KKwl7J2YnLCAnbCcsIDE5MH0sCS8qIL4gKi8KKwl7J2MnLCAnfCcsIDE5MX0sCS8qIL8gKi8KKwl7J2EnLCAnXicsIDE5Mn0sCS8qIMAgKi8KKwl7J2UnLCAnXicsIDE5M30sCS8qIMEgKi8KKwl7J28nLCAnXicsIDE5NH0sCS8qIMIgKi8KKwl7J3UnLCAnXicsIDE5NX0sCS8qIMMgKi8KKwl7J2EnLCAnXCcnLCAxOTZ9LAkvKiDEICovCisJeydlJywgJ1wnJywgMTk3fSwJLyogxSAqLworCXsnbycsICdcJycsIDE5OH0sCS8qIMYgKi8KKwl7J3UnLCAnXCcnLCAxOTl9LAkvKiDHICovCisJeydhJywgJ2AnLCAyMDB9LAkvKiDIICovCisJeydlJywgJ2AnLCAyMDF9LAkvKiDJICovCisJeydvJywgJ2AnLCAyMDJ9LAkvKiDKICovCisJeyd1JywgJ2AnLCAyMDN9LAkvKiDLICovCisJeydhJywgJyInLCAyMDR9LAkvKiDMICovCisJeydlJywgJyInLCAyMDV9LAkvKiDNICovCisJeydvJywgJyInLCAyMDZ9LAkvKiDOICovCisJeyd1JywgJyInLCAyMDd9LAkvKiDPICovCisJeydBJywgJ28nLCAyMDh9LAkvKiDQICovCisJeydpJywgJ14nLCAyMDl9LAkvKiDRICovCisJeydPJywgJy8nLCAyMTB9LAkvKiDSICovCisJeydBJywgJ0UnLCAyMTF9LAkvKiDTICovCisJeydhJywgJ28nLCAyMTJ9LAkvKiDUICovCisJeydpJywgJ1wnJywgMjEzfSwJLyog1SAqLworCXsnbycsICcvJywgMjE0fSwJLyog1iAqLworCXsnYScsICdlJywgMjE1fSwJLyog1yAqLworCXsnQScsICciJywgMjE2fSwJLyog2CAqLworCXsnaScsICdgJywgMjE3fSwJLyog2SAqLworCXsnTycsICciJywgMjE4fSwJLyog2iAqLworCXsnVScsICciJywgMjE5fSwJLyog2yAqLworCXsnRScsICdcJycsIDIyMH0sCS8qINwgKi8KKwl7J2knLCAnIicsIDIyMX0sCS8qIN0gKi8KKwl7J3MnLCAncycsIDIyMn0sCS8qIN4gKi8KKwl7J08nLCAnXicsIDIyM30sCS8qIN8gKi8KKwl7J0EnLCAnXCcnLCAyMjR9LAkvKiDgICovCisJeydBJywgJ34nLCAyMjV9LAkvKiDhICovCisJeydhJywgJ34nLCAyMjZ9LAkvKiDiICovCisJeydEJywgJy0nLCAyMjd9LAkvKiDjICovCisJeydkJywgJy0nLCAyMjh9LAkvKiDkICovCisJeydJJywgJ1wnJywgMjI5fSwJLyog5SAqLworCXsnSScsICdgJywgMjMwfSwJLyog5iAqLworCXsnTycsICdcJycsIDIzMX0sCS8qIOcgKi8KKwl7J08nLCAnYCcsIDIzMn0sCS8qIOggKi8KKwl7J08nLCAnficsIDIzM30sCS8qIOkgKi8KKwl7J28nLCAnficsIDIzNH0sCS8qIOogKi8KKwl7J1MnLCAnficsIDIzNX0sCS8qIOsgKi8KKwl7J3MnLCAnficsIDIzNn0sCS8qIOwgKi8KKwl7J1UnLCAnXCcnLCAyMzd9LAkvKiDtICovCisJeydZJywgJyInLCAyMzh9LAkvKiDuICovCisJeyd5JywgJyInLCAyMzl9LAkvKiDvICovCisJeydwJywgJy0nLCAyNDB9LAkvKiDwICovCisJeydwJywgJ34nLCAyNDF9LAkvKiDxICovCisJeyd+JywgJy4nLCAyNDJ9LAkvKiDyICovCisJeydqJywgJ3UnLCAyNDN9LAkvKiDzICovCisJeydQJywgJ3AnLCAyNDR9LAkvKiD0ICovCisJeyczJywgJzQnLCAyNDV9LAkvKiD1ICovCisJeyctJywgJy0nLCAyNDZ9LAkvKiD2ICovCisJeycxJywgJzQnLCAyNDd9LAkvKiD3ICovCisJeycxJywgJzInLCAyNDh9LAkvKiD4ICovCisJeydhJywgJ18nLCAyNDl9LAkvKiD5ICovCisJeydvJywgJ18nLCAyNTB9LAkvKiD6ICovCisJeyc8JywgJzwnLCAyNTF9LAkvKiD7ICovCisJeyd4JywgJ3gnLCAyNTJ9LAkvKiD8ICovCisJeyc+JywgJz4nLCAyNTN9LAkvKiD9ICovCisJeycrJywgJy0nLCAyNTR9LAkvKiD+ICovCisJeyduJywgJ3UnLCAyNTV9LAkvKiB4IFhYICovCisJe05VTCwgTlVMLCBOVUx9CisJfTsKKworIyAgZWxzZQkvKiAhSFBVWF9ESUdSQVBIUyAqLworCisjICAgaWZkZWYgRUJDRElDCisKKwkvKgorCSAqIEVCQ0RJQyAtIElTTyBkaWdyYXBocworCSAqIFRPRE86IEVCQ0RJQyBUYWJsZSBpcyBDb2RlLVBhZ2UgMTA0NworCSAqLworZGlncl9UCWRpZ3JhcGhkZWZhdWx0W10gPQorICAgICAgIHt7J2EnLCAnXicsICAgIDY2fSwJLyog4iAqLworCXsnYScsICciJywgICAgNjd9LAkvKiDkICovCisJeydhJywgJ2AnLCAgICA2OH0sCS8qIOAgKi8KKwl7J2EnLCAnXCcnLCAgIDY5fSwJLyog4SAqLworCXsnYScsICd+JywgICAgNzB9LAkvKiDjICovCisJeydhJywgJ0AnLCAgICA3MX0sCS8qIOUgKi8KKwl7J2EnLCAnYScsICAgIDcxfSwJLyog5SAqLworCXsnYycsICcsJywgICAgNzJ9LAkvKiDnICovCisJeyduJywgJ34nLCAgICA3M30sCS8qIPEgKi8KKwl7J2MnLCAnfCcsICAgIDc0fSwJLyogoiAqLworCXsnZScsICdcJycsICAgODF9LAkvKiDpICovCisJeydlJywgJ14nLCAgICA4Mn0sCS8qIOogKi8KKwl7J2UnLCAnIicsICAgIDgzfSwJLyog6yAqLworCXsnZScsICdgJywgICAgODR9LAkvKiDoICovCisJeydpJywgJ1wnJywgICA4NX0sCS8qIO0gKi8KKwl7J2knLCAnXicsICAgIDg2fSwJLyog7iAqLworCXsnaScsICciJywgICAgODd9LAkvKiDvICovCisJeydpJywgJ2AnLCAgICA4OH0sCS8qIOwgKi8KKwl7J3MnLCAncycsICAgIDg5fSwJLyog3yAqLworCXsnQScsICdeJywgICAgOTh9LAkvKiDCICovCisJeydBJywgJyInLCAgICA5OX0sCS8qIMQgKi8KKwl7J0EnLCAnYCcsICAgMTAwfSwJLyogwCAqLworCXsnQScsICdcJycsICAxMDF9LAkvKiDBICovCisJeydBJywgJ34nLCAgIDEwMn0sCS8qIMMgKi8KKwl7J0EnLCAnQCcsICAgMTAzfSwJLyogxSAqLworCXsnQScsICdBJywgICAxMDN9LAkvKiDFICovCisJeydDJywgJywnLCAgIDEwNH0sCS8qIMcgKi8KKwl7J04nLCAnficsICAgMTA1fSwJLyog0SAqLworCXsnfCcsICd8JywgICAxMDZ9LAkvKiCmICovCisJeydvJywgJy8nLCAgIDExMn0sCS8qIPggKi8KKwl7J0UnLCAnXCcnLCAgMTEzfSwJLyogySAqLworCXsnRScsICdeJywgICAxMTR9LAkvKiDKICovCisJeydFJywgJyInLCAgIDExNX0sCS8qIMsgKi8KKwl7J0UnLCAnYCcsICAgMTE2fSwJLyogyCAqLworCXsnSScsICdcJycsICAxMTd9LAkvKiDNICovCisJeydJJywgJ14nLCAgIDExOH0sCS8qIM4gKi8KKwl7J0knLCAnIicsICAgMTE5fSwJLyogzyAqLworCXsnSScsICdgJywgICAxMjB9LAkvKiDMICovCisJeydPJywgJy8nLCAgIDEyOH0sCS8qIDAvIFhYICovCisJeyc8JywgJzwnLCAgIDEzOH0sCS8qIKsgKi8KKwl7Jz4nLCAnPicsICAgMTM5fSwJLyoguyAqLworCXsnZCcsICctJywgICAxNDB9LAkvKiDwICovCisJeyd5JywgJ1wnJywgIDE0MX0sCS8qIP0gKi8KKwl7J2knLCAncCcsICAgMTQyfSwJLyog/iAqLworCXsnKycsICctJywgICAxNDN9LAkvKiCxICovCisJeyd+JywgJ28nLCAgIDE0NH0sCS8qILAgKi8KKwl7J2EnLCAnLScsICAgMTU0fSwJLyogqiAqLworCXsnbycsICctJywgICAxNTV9LAkvKiC6ICovCisJeydhJywgJ2UnLCAgIDE1Nn0sCS8qIOYgKi8KKwl7JywnLCAnLCcsICAgMTU3fSwJLyogLCBYWCAqLworCXsnQScsICdFJywgICAxNTh9LAkvKiDGICovCisJeydvJywgJ3gnLCAgIDE1OX0sCS8qIKQgLSBjdXJyZW5jeSBzeW1ib2wgaW4gSVNPIDg4NTktMSAqLworCXsnZScsICc9JywgICAxNTl9LAkvKiCkIC0gZXVybyBzeW1ib2wgaW4gSVNPIDg4NTktMTUgKi8KKwl7J2onLCAndScsICAgMTYwfSwJLyogtSAqLworCXsneScsICciJywgICAxNjd9LAkvKiB4IFhYICovCisJeyd+JywgJyEnLCAgIDE3MH0sCS8qIKEgKi8KKwl7J34nLCAnPycsICAgMTcxfSwJLyogvyAqLworCXsnRCcsICctJywgICAxNzJ9LAkvKiDQICovCisJeydJJywgJ3AnLCAgIDE3NH0sCS8qIN4gKi8KKwl7J3InLCAnTycsICAgMTc1fSwJLyogriAqLworCXsnLScsICcsJywgICAxNzZ9LAkvKiCsICovCisJeyckJywgJyQnLCAgIDE3N30sCS8qIKMgKi8KKwl7J1knLCAnLScsICAgMTc4fSwJLyogpSAqLworCXsnficsICcuJywgICAxNzl9LAkvKiC3ICovCisJeydjJywgJ08nLCAgIDE4MH0sCS8qIKkgKi8KKwl7J3AnLCAnYScsICAgMTgxfSwJLyogpyAqLworCXsncCcsICdwJywgICAxODJ9LAkvKiC2ICovCisJeycxJywgJzQnLCAgIDE4M30sCS8qILwgKi8KKwl7JzEnLCAnMicsICAgMTg0fSwJLyogvSAqLworCXsnMycsICc0JywgICAxODV9LAkvKiC+ICovCisJeydZJywgJ1wnJywgIDE4Nn0sCS8qIN0gKi8KKwl7JyInLCAnIicsICAgMTg3fSwJLyogqCAqLworCXsnLScsICc9JywgICAxODh9LAkvKiCvICovCisJeydcJycsICdcJycsIDE5MH0sCS8qILQgKi8KKwl7J08nLCAnRScsICAgMTkxfSwJLyog1yAtIE9FIGluIElTTyA4ODU5LTE1ICovCisJeycvJywgJ1xcJywgIDE5MX0sCS8qINcgLSBtdWx0aXBsaWNhdGlvbiBzeW1ib2wgaW4gSVNPIDg4NTktMSAqLworCXsnLScsICctJywgICAyMDJ9LAkvKiCtICovCisJeydvJywgJ14nLCAgIDIwM30sCS8qIPQgKi8KKwl7J28nLCAnIicsICAgMjA0fSwJLyog9iAqLworCXsnbycsICdgJywgICAyMDV9LAkvKiDyICovCisJeydvJywgJ1wnJywgIDIwNn0sCS8qIPMgKi8KKwl7J28nLCAnficsICAgMjA3fSwJLyog9SAqLworCXsnMScsICcxJywgICAyMTh9LAkvKiC5ICovCisJeyd1JywgJ14nLCAgIDIxOX0sCS8qIPsgKi8KKwl7J3UnLCAnIicsICAgMjIwfSwJLyog/CAqLworCXsndScsICdgJywgICAyMjF9LAkvKiD5ICovCisJeyd1JywgJ1wnJywgIDIyMn0sCS8qIPogKi8KKwl7JzonLCAnLScsICAgMjI1fSwJLyog9yAtIGRpdmlzaW9uIHN5bWJvbCBpbiBJU08gODg1OS0xICovCisJeydvJywgJ2UnLCAgIDIyNX0sCS8qIPcgLSBvZSBpbiBJU08gODg1OS0xNSAqLworCXsnMicsICcyJywgICAyMzR9LAkvKiCyICovCisJeydPJywgJ14nLCAgIDIzNX0sCS8qINQgKi8KKwl7J08nLCAnIicsICAgMjM2fSwJLyog1iAqLworCXsnTycsICdgJywgICAyMzd9LAkvKiDSICovCisJeydPJywgJ1wnJywgIDIzOH0sCS8qINMgKi8KKwl7J08nLCAnficsICAgMjM5fSwJLyog1SAqLworCXsnMycsICczJywgICAyNTB9LAkvKiCzICovCisJeydVJywgJ14nLCAgIDI1MX0sCS8qINsgKi8KKwl7J1UnLCAnIicsICAgMjUyfSwJLyog3CAqLworCXsnVScsICdgJywgICAyNTN9LAkvKiDZICovCisJeydVJywgJ1wnJywgIDI1NH0sCS8qINogKi8KKwl7TlVMLCBOVUwsIE5VTH0KKwl9OworCisjICAgZWxzZQorIyAgICBpZiBkZWZpbmVkKE1BQ09TKSAmJiAhZGVmaW5lZChGRUFUX01CWVRFKQorCisJLyoKKwkgKiBNYWNpbnRvc2ggZGlncmFwaHMKKwkgKi8KK2RpZ3JfVAlkaWdyYXBoZGVmYXVsdFtdID0KKyAgICAgICB7eydhJywgJ3QnLCA2NH0sCQkvKiBAICovCisJeydBJywgJyInLCAxMjh9LAkvKiB+QCBYWCAqLworCXsnQScsICdvJywgMTI5fSwJLyogxSAqLworCXsnQycsICcsJywgMTMwfSwJLyogxyAqLworCXsnRScsICdcJycsIDEzMX0sCS8qIMkgKi8KKwl7J04nLCAnficsIDEzMn0sCS8qINEgKi8KKwl7J08nLCAnIicsIDEzM30sCS8qINYgKi8KKwl7J1UnLCAnIicsIDEzNH0sCS8qINwgKi8KKwl7J2EnLCAnXCcnLCAxMzV9LAkvKiB+RyBYWCAqLworCXsnYScsICdgJywgMTM2fSwJLyogfkggWFggKi8KKwl7J2EnLCAnXicsIDEzN30sCS8qIOIgKi8KKwl7J2EnLCAnIicsIDEzOH0sCS8qIOQgKi8KKwl7J2EnLCAnficsIDEzOX0sCS8qIOMgKi8KKwl7J2EnLCAnbycsIDE0MH0sCS8qIOUgKi8KKwl7J2MnLCAnLCcsIDE0MX0sCS8qIOcgKi8KKwl7J2UnLCAnXCcnLCAxNDJ9LAkvKiDpICovCisJeydlJywgJ2AnLCAxNDN9LAkvKiDoICovCisJeydlJywgJ14nLCAxNDR9LAkvKiDqICovCisJeydlJywgJyInLCAxNDV9LAkvKiDrICovCisJeydpJywgJ1wnJywgMTQ2fSwJLyog7SAqLworCXsnaScsICdgJywgMTQ3fSwJLyog7CAqLworCXsnaScsICdeJywgMTQ4fSwJLyog7iAqLworCXsnaScsICciJywgMTQ5fSwJLyog7yAqLworCXsnbicsICd+JywgMTUwfSwJLyog8SAqLworCXsnbycsICdcJycsIDE1MX0sCS8qIPMgKi8KKwl7J28nLCAnYCcsIDE1Mn0sCS8qIPIgKi8KKwl7J28nLCAnXicsIDE1M30sCS8qIPQgKi8KKwl7J28nLCAnIicsIDE1NH0sCS8qIPYgKi8KKwl7J28nLCAnficsIDE1NX0sCS8qIG8gKi8KKwl7J3UnLCAnXCcnLCAxNTZ9LAkvKiD6ICovCisJeyd1JywgJ2AnLCAxNTd9LAkvKiB+XSBYWCAqLworCXsndScsICdeJywgMTU4fSwJLyog+yAqLworCXsndScsICciJywgMTU5fSwJLyog/CAqLworCXsnKycsICdfJywgMTYwfSwJLyog3SAqLworCXsnficsICdvJywgMTYxfSwJLyogsCAqLworCXsnYycsICd8JywgMTYyfSwJLyogoiAqLworCXsnJCcsICckJywgMTYzfSwJLyogoyAqLworCXsncCcsICdhJywgMTY0fSwJLyogpyAqLworCXsnLicsICcuJywgMTY1fSwJLyogKiAqLworCXsnUCcsICdQJywgMTY2fSwJLyogtiAqLworCXsncycsICdzJywgMTY3fSwJLyog3yAqLworCXsncicsICdPJywgMTY4fSwJLyogriAqLworCXsnYycsICdPJywgMTY5fSwJLyogqSAqLworCXsnVCcsICdNJywgMTcwfSwJLyoggSAqLworCXsnPScsICcvJywgMTczfSwJLyoggiAqLworCXsnQScsICdFJywgMTc0fSwJLyogxiAqLworCXsnTycsICcvJywgMTc1fSwJLyog2CAqLworCXsnMCcsICcwJywgMTc2fSwJLyoggyAqLworCXsnKycsICctJywgMTc3fSwJLyogsSAqLworCXsnPCcsICc9JywgMTc4fSwJLyogviAqLworCXsnPicsICc9JywgMTc5fSwJLyoghCAqLworCXsnWScsICctJywgMTgwfSwJLyogpSAqLworCXsnaicsICd1JywgMTgxfSwJLyogtSAqLworCXsnbScsICd1JywgMTgxfSwJLyogtSAqLworCXsnZCcsICdkJywgMTgyfSwJLyogjyAqLworCXsnUycsICdTJywgMTgzfSwJLyoghSAqLworCXsnUycsICdJJywgMTgzfSwJLyoghSAqLworCXsnUCcsICdJJywgMTg0fSwJLyogvSAqLworCXsncCcsICdpJywgMTg1fSwJLyogvCAqLworCXsnSScsICdJJywgMTg2fSwJLyoghiAqLworCXsnYScsICctJywgMTg3fSwJLyoguyAqLworCXsnbycsICctJywgMTg4fSwJLyoguiAqLworCXsnTycsICdNJywgMTg5fSwJLyogvSAqLworCXsnYScsICdlJywgMTkwfSwJLyog5iAqLworCXsnbycsICcvJywgMTkxfSwJLyog+CAqLworCXsnficsICc/JywgMTkyfSwJLyogvyAqLworCXsnficsICchJywgMTkzfSwJLyogoSAqLworCXsnLScsICcsJywgMTk0fSwJLyogrCAqLworCXsndicsICctJywgMTk1fSwJLyogfkggWFggKi8KKwl7J2YnLCAnLScsIDE5Nn0sCS8qIJ8gKi8KKwl7J34nLCAnficsIDE5N30sCS8qIIkgKi8KKwl7J0QnLCAnRScsIDE5OH0sCS8qIJAgKi8KKwl7JzwnLCAnPCcsIDE5OX0sCS8qIKsgKi8KKwl7Jz4nLCAnPicsIDIwMH0sCS8qILsgKi8KKwl7Jy4nLCAnOicsIDIwMX0sCS8qIIogKi8KKwl7J0EnLCAnYCcsIDIwM30sCS8qIMAgKi8KKwl7J0EnLCAnficsIDIwNH0sCS8qIMMgKi8KKwl7J08nLCAnficsIDIwNX0sCS8qINUgKi8KKwl7J08nLCAnRScsIDIwNn0sCS8qIJEgKi8KKwl7J28nLCAnZScsIDIwN30sCS8qIKYgKi8KKwl7Jy0nLCAnLicsIDIwOH0sCS8qIC0gKi8KKwl7Jy0nLCAnLScsIDIwOX0sCS8qIC0gKi8KKwl7J2AnLCAnYCcsIDIxMH0sCS8qICIgKi8KKwl7J1wnJywgJ1wnJywgMjExfSwJLyogIiAqLworCXsnYCcsICcgJywgMjEyfSwJLyogJyAqLworCXsnXCcnLCAnICcsIDIxM30sCS8qICcgKi8KKwl7Jy0nLCAnOicsIDIxNH0sCS8qIPcgKi8KKwl7J0QnLCAnSScsIDIxNX0sCS8qINcgKi8KKwl7J3knLCAnOicsIDIxNn0sCS8qIP8gKi8KKwl7J1knLCAnOicsIDIxN30sCS8qII0gKi8KKwl7Jy8nLCAnLycsIDIxOH0sCS8qII4gKi8KKwl7J0UnLCAnPScsIDIxOX0sCS8qIKQgRXVybyBTeXN0ZW0gPj04LjUgKi8KKwl7J28nLCAneCcsIDIxOX0sCS8qIKQgQ3VycmVuY3kgU3lzdGVtIDw9OC4xKi8KKwl7JzwnLCAnICcsIDIyMH0sCS8qINAgKi8KKwl7Jz4nLCAnICcsIDIyMX0sCS8qIPAgKi8KKwl7J2YnLCAnaScsIDIyMn0sCS8qIN4gKi8KKwl7J2YnLCAnbCcsIDIyM30sCS8qIP4gKi8KKwl7JysnLCAnKycsIDIyNH0sCS8qIP0gKi8KKwl7J34nLCAnLicsIDIyNX0sCS8qILcgKi8KKwl7JywnLCAnICcsIDIyNn0sCS8qIJIgKi8KKwl7JywnLCAnLCcsIDIyN30sCS8qIJMgKi8KKwl7JyUnLCAnLicsIDIyOH0sCS8qIJQgKi8KKwl7JyUnLCAnMCcsIDIyOH0sCS8qIJQgKi8KKwl7J0EnLCAnXicsIDIyOX0sCS8qIMIgKi8KKwl7J0UnLCAnXicsIDIzMH0sCS8qIMogKi8KKwl7J0EnLCAnXCcnLCAyMzF9LAkvKiDBICovCisJeydFJywgJyInLCAyMzJ9LAkvKiDLICovCisJeydFJywgJ2AnLCAyMzN9LAkvKiDIICovCisJeydJJywgJ1wnJywgMjM0fSwJLyogzSAqLworCXsnSScsICdeJywgMjM1fSwJLyogziAqLworCXsnSScsICciJywgMjM2fSwJLyogzyAqLworCXsnSScsICdgJywgMjM3fSwJLyogzCAqLworCXsnTycsICdcJycsIDIzOH0sCS8qINMgKi8KKwl7J08nLCAnXicsIDIzOX0sCS8qINQgKi8KKwl7J0EnLCAnUCcsIDI0MH0sCS8qIJUgKi8KKwl7J08nLCAnYCcsIDI0MX0sCS8qINIgKi8KKwl7J1UnLCAnXCcnLCAyNDJ9LAkvKiDaICovCisJeydVJywgJ14nLCAyNDN9LAkvKiDbICovCisJeydVJywgJ2AnLCAyNDR9LAkvKiDZICovCisJeydpJywgJy4nLCAyNDV9LAkvKiCeICovCisJe05VTCwgTlVMLCBOVUx9CisJfTsKKworIyAgICBlbHNlCS8qICFNQUNPUyAqLworCisjICAgICBpZmRlZiBPTERfRElHUkFQSFMKKworCS8qCisJICogZGlncmFwaHMgY29tcGF0aWJsZSB3aXRoIFZpbSA1LngKKwkgKi8KK2RpZ3JfVAlkaWdyYXBoZGVmYXVsdFtdID0KKyAgICAgICB7eyd+JywgJyEnLCAxNjF9LAkvKiChICovCisJeydjJywgJ3wnLCAxNjJ9LAkvKiCiICovCisJeyckJywgJyQnLCAxNjN9LAkvKiCjICovCisJeydvJywgJ3gnLCAxNjR9LAkvKiCkIC0gY3VycmVuY3kgc3ltYm9sIGluIElTTyA4ODU5LTEgKi8KKwl7J2UnLCAnPScsIDE2NH0sCS8qIKQgLSBldXJvIHN5bWJvbCBpbiBJU08gODg1OS0xNSAqLworCXsnWScsICctJywgMTY1fSwJLyogpSAqLworCXsnfCcsICd8JywgMTY2fSwJLyogpiAqLworCXsncCcsICdhJywgMTY3fSwJLyogpyAqLworCXsnIicsICciJywgMTY4fSwJLyogqCAqLworCXsnYycsICdPJywgMTY5fSwJLyogqSAqLworCXsnYScsICctJywgMTcwfSwJLyogqiAqLworCXsnPCcsICc8JywgMTcxfSwJLyogqyAqLworCXsnLScsICcsJywgMTcyfSwJLyogrCAqLworCXsnLScsICctJywgMTczfSwJLyogrSAqLworCXsncicsICdPJywgMTc0fSwJLyogriAqLworCXsnLScsICc9JywgMTc1fSwJLyogryAqLworCXsnficsICdvJywgMTc2fSwJLyogsCAqLworCXsnKycsICctJywgMTc3fSwJLyogsSAqLworCXsnMicsICcyJywgMTc4fSwJLyogsiAqLworCXsnMycsICczJywgMTc5fSwJLyogsyAqLworCXsnXCcnLCAnXCcnLCAxODB9LAkvKiC0ICovCisJeydqJywgJ3UnLCAxODF9LAkvKiC1ICovCisJeydwJywgJ3AnLCAxODJ9LAkvKiC2ICovCisJeyd+JywgJy4nLCAxODN9LAkvKiC3ICovCisJeycsJywgJywnLCAxODR9LAkvKiC4ICovCisJeycxJywgJzEnLCAxODV9LAkvKiC5ICovCisJeydvJywgJy0nLCAxODZ9LAkvKiC6ICovCisJeyc+JywgJz4nLCAxODd9LAkvKiC7ICovCisJeycxJywgJzQnLCAxODh9LAkvKiC8ICovCisJeycxJywgJzInLCAxODl9LAkvKiC9ICovCisJeyczJywgJzQnLCAxOTB9LAkvKiC+ICovCisJeyd+JywgJz8nLCAxOTF9LAkvKiC/ICovCisJeydBJywgJ2AnLCAxOTJ9LAkvKiDAICovCisJeydBJywgJ1wnJywgMTkzfSwJLyogwSAqLworCXsnQScsICdeJywgMTk0fSwJLyogwiAqLworCXsnQScsICd+JywgMTk1fSwJLyogwyAqLworCXsnQScsICciJywgMTk2fSwJLyogxCAqLworCXsnQScsICdAJywgMTk3fSwJLyogxSAqLworCXsnQScsICdBJywgMTk3fSwJLyogxSAqLworCXsnQScsICdFJywgMTk4fSwJLyogxiAqLworCXsnQycsICcsJywgMTk5fSwJLyogxyAqLworCXsnRScsICdgJywgMjAwfSwJLyogyCAqLworCXsnRScsICdcJycsIDIwMX0sCS8qIMkgKi8KKwl7J0UnLCAnXicsIDIwMn0sCS8qIMogKi8KKwl7J0UnLCAnIicsIDIwM30sCS8qIMsgKi8KKwl7J0knLCAnYCcsIDIwNH0sCS8qIMwgKi8KKwl7J0knLCAnXCcnLCAyMDV9LAkvKiDNICovCisJeydJJywgJ14nLCAyMDZ9LAkvKiDOICovCisJeydJJywgJyInLCAyMDd9LAkvKiDPICovCisJeydEJywgJy0nLCAyMDh9LAkvKiDQICovCisJeydOJywgJ34nLCAyMDl9LAkvKiDRICovCisJeydPJywgJ2AnLCAyMTB9LAkvKiDSICovCisJeydPJywgJ1wnJywgMjExfSwJLyog0yAqLworCXsnTycsICdeJywgMjEyfSwJLyog1CAqLworCXsnTycsICd+JywgMjEzfSwJLyog1SAqLworCXsnTycsICciJywgMjE0fSwJLyog1iAqLworCXsnLycsICdcXCcsIDIxNX0sCS8qINcgLSBtdWx0aXBsaWNhdGlvbiBzeW1ib2wgaW4gSVNPIDg4NTktMSAqLworCXsnTycsICdFJywgMjE1fSwJLyog1yAtIE9FIGluIElTTyA4ODU5LTE1ICovCisJeydPJywgJy8nLCAyMTZ9LAkvKiDYICovCisJeydVJywgJ2AnLCAyMTd9LAkvKiDZICovCisJeydVJywgJ1wnJywgMjE4fSwJLyog2iAqLworCXsnVScsICdeJywgMjE5fSwJLyog2yAqLworCXsnVScsICciJywgMjIwfSwJLyog3CAqLworCXsnWScsICdcJycsIDIyMX0sCS8qIN0gKi8KKwl7J0knLCAncCcsIDIyMn0sCS8qIN4gKi8KKwl7J3MnLCAncycsIDIyM30sCS8qIN8gKi8KKwl7J2EnLCAnYCcsIDIyNH0sCS8qIOAgKi8KKwl7J2EnLCAnXCcnLCAyMjV9LAkvKiDhICovCisJeydhJywgJ14nLCAyMjZ9LAkvKiDiICovCisJeydhJywgJ34nLCAyMjd9LAkvKiDjICovCisJeydhJywgJyInLCAyMjh9LAkvKiDkICovCisJeydhJywgJ0AnLCAyMjl9LAkvKiDlICovCisJeydhJywgJ2EnLCAyMjl9LAkvKiDlICovCisJeydhJywgJ2UnLCAyMzB9LAkvKiDmICovCisJeydjJywgJywnLCAyMzF9LAkvKiDnICovCisJeydlJywgJ2AnLCAyMzJ9LAkvKiDoICovCisJeydlJywgJ1wnJywgMjMzfSwJLyog6SAqLworCXsnZScsICdeJywgMjM0fSwJLyog6iAqLworCXsnZScsICciJywgMjM1fSwJLyog6yAqLworCXsnaScsICdgJywgMjM2fSwJLyog7CAqLworCXsnaScsICdcJycsIDIzN30sCS8qIO0gKi8KKwl7J2knLCAnXicsIDIzOH0sCS8qIO4gKi8KKwl7J2knLCAnIicsIDIzOX0sCS8qIO8gKi8KKwl7J2QnLCAnLScsIDI0MH0sCS8qIPAgKi8KKwl7J24nLCAnficsIDI0MX0sCS8qIPEgKi8KKwl7J28nLCAnYCcsIDI0Mn0sCS8qIPIgKi8KKwl7J28nLCAnXCcnLCAyNDN9LAkvKiDzICovCisJeydvJywgJ14nLCAyNDR9LAkvKiD0ICovCisJeydvJywgJ34nLCAyNDV9LAkvKiD1ICovCisJeydvJywgJyInLCAyNDZ9LAkvKiD2ICovCisJeyc6JywgJy0nLCAyNDd9LAkvKiD3IC0gZGl2aXNpb24gc3ltYm9sIGluIElTTyA4ODU5LTEgKi8KKwl7J28nLCAnZScsIDI0N30sCS8qIPcgLSBvZSBpbiBJU08gODg1OS0xNSAqLworCXsnbycsICcvJywgMjQ4fSwJLyog+CAqLworCXsndScsICdgJywgMjQ5fSwJLyog+SAqLworCXsndScsICdcJycsIDI1MH0sCS8qIPogKi8KKwl7J3UnLCAnXicsIDI1MX0sCS8qIPsgKi8KKwl7J3UnLCAnIicsIDI1Mn0sCS8qIPwgKi8KKwl7J3knLCAnXCcnLCAyNTN9LAkvKiD9ICovCisJeydpJywgJ3AnLCAyNTR9LAkvKiD+ICovCisJeyd5JywgJyInLCAyNTV9LAkvKiB4IFhYICovCisJe05VTCwgTlVMLCBOVUx9CisJfTsKKyMgICAgIGVsc2UgLyogT0xEX0RJR1JBUEhTICovCisKKwkvKgorCSAqIGRpZ3JhcGhzIGZvciBVbmljb2RlIGZyb20gUkZDMTM0NQorCSAqIChhbHNvIHdvcmsgZm9yIElTTy04ODU5LTEgYWthIGxhdGluMSkKKwkgKi8KK2RpZ3JfVAlkaWdyYXBoZGVmYXVsdFtdID0KKyAgICAgICB7CisJeydOJywgJ1UnLCAweDBhfSwJLyogTEYgZm9yIE5VTCAqLworCXsnUycsICdIJywgMHgwMX0sCisJeydTJywgJ1gnLCAweDAyfSwKKwl7J0UnLCAnWCcsIDB4MDN9LAorCXsnRScsICdUJywgMHgwNH0sCisJeydFJywgJ1EnLCAweDA1fSwKKwl7J0EnLCAnSycsIDB4MDZ9LAorCXsnQicsICdMJywgMHgwN30sCisJeydCJywgJ1MnLCAweDA4fSwKKwl7J0gnLCAnVCcsIDB4MDl9LAorCXsnTCcsICdGJywgMHgwYX0sCisJeydWJywgJ1QnLCAweDBifSwKKwl7J0YnLCAnRicsIDB4MGN9LAorCXsnQycsICdSJywgMHgwZH0sCisJeydTJywgJ08nLCAweDBlfSwKKwl7J1MnLCAnSScsIDB4MGZ9LAorCXsnRCcsICdMJywgMHgxMH0sCisJeydEJywgJzEnLCAweDExfSwKKwl7J0QnLCAnMicsIDB4MTJ9LAorCXsnRCcsICczJywgMHgxM30sCisJeydEJywgJzQnLCAweDE0fSwKKwl7J04nLCAnSycsIDB4MTV9LAorCXsnUycsICdZJywgMHgxNn0sCisJeydFJywgJ0InLCAweDE3fSwKKwl7J0MnLCAnTicsIDB4MTh9LAorCXsnRScsICdNJywgMHgxOX0sCisJeydTJywgJ0InLCAweDFhfSwKKwl7J0UnLCAnQycsIDB4MWJ9LAorCXsnRicsICdTJywgMHgxY30sCisJeydHJywgJ1MnLCAweDFkfSwKKwl7J1InLCAnUycsIDB4MWV9LAorCXsnVScsICdTJywgMHgxZn0sCisJeydTJywgJ1AnLCAweDIwfSwKKwl7J04nLCAnYicsIDB4MjN9LAorCXsnRCcsICdPJywgMHgyNH0sCisJeydBJywgJ3QnLCAweDQwfSwKKwl7JzwnLCAnKCcsIDB4NWJ9LAorCXsnLycsICcvJywgMHg1Y30sCisJeycpJywgJz4nLCAweDVkfSwKKwl7J1wnJywgJz4nLCAweDVlfSwKKwl7J1wnJywgJyEnLCAweDYwfSwKKwl7JygnLCAnIScsIDB4N2J9LAorCXsnIScsICchJywgMHg3Y30sCisJeychJywgJyknLCAweDdkfSwKKwl7J1wnJywgJz8nLCAweDdlfSwKKwl7J0QnLCAnVCcsIDB4N2Z9LAorCXsnUCcsICdBJywgMHg4MH0sCisJeydIJywgJ08nLCAweDgxfSwKKwl7J0InLCAnSCcsIDB4ODJ9LAorCXsnTicsICdIJywgMHg4M30sCisJeydJJywgJ04nLCAweDg0fSwKKwl7J04nLCAnTCcsIDB4ODV9LAorCXsnUycsICdBJywgMHg4Nn0sCisJeydFJywgJ1MnLCAweDg3fSwKKwl7J0gnLCAnUycsIDB4ODh9LAorCXsnSCcsICdKJywgMHg4OX0sCisJeydWJywgJ1MnLCAweDhhfSwKKwl7J1AnLCAnRCcsIDB4OGJ9LAorCXsnUCcsICdVJywgMHg4Y30sCisJeydSJywgJ0knLCAweDhkfSwKKwl7J1MnLCAnMicsIDB4OGV9LAorCXsnUycsICczJywgMHg4Zn0sCisJeydEJywgJ0MnLCAweDkwfSwKKwl7J1AnLCAnMScsIDB4OTF9LAorCXsnUCcsICcyJywgMHg5Mn0sCisJeydUJywgJ1MnLCAweDkzfSwKKwl7J0MnLCAnQycsIDB4OTR9LAorCXsnTScsICdXJywgMHg5NX0sCisJeydTJywgJ0cnLCAweDk2fSwKKwl7J0UnLCAnRycsIDB4OTd9LAorCXsnUycsICdTJywgMHg5OH0sCisJeydHJywgJ0MnLCAweDk5fSwKKwl7J1MnLCAnQycsIDB4OWF9LAorCXsnQycsICdJJywgMHg5Yn0sCisJeydTJywgJ1QnLCAweDljfSwKKwl7J08nLCAnQycsIDB4OWR9LAorCXsnUCcsICdNJywgMHg5ZX0sCisJeydBJywgJ0MnLCAweDlmfSwKKwl7J04nLCAnUycsIDB4YTB9LAorCXsnIScsICdJJywgMHhhMX0sCisJeydDJywgJ3QnLCAweGEyfSwKKwl7J1AnLCAnZCcsIDB4YTN9LAorCXsnQycsICd1JywgMHhhNH0sCisJeydZJywgJ2UnLCAweGE1fSwKKwl7J0InLCAnQicsIDB4YTZ9LAorCXsnUycsICdFJywgMHhhN30sCisJeydcJycsICc6JywgMHhhOH0sCisJeydDJywgJ28nLCAweGE5fSwKKwl7Jy0nLCAnYScsIDB4YWF9LAorCXsnPCcsICc8JywgMHhhYn0sCisJeydOJywgJ08nLCAweGFjfSwKKwl7Jy0nLCAnLScsIDB4YWR9LAorCXsnUicsICdnJywgMHhhZX0sCisJeydcJycsICdtJywgMHhhZn0sCisJeydEJywgJ0cnLCAweGIwfSwKKwl7JysnLCAnLScsIDB4YjF9LAorCXsnMicsICdTJywgMHhiMn0sCisJeyczJywgJ1MnLCAweGIzfSwKKwl7J1wnJywgJ1wnJywgMHhiNH0sCisJeydNJywgJ3knLCAweGI1fSwKKwl7J1AnLCAnSScsIDB4YjZ9LAorCXsnLicsICdNJywgMHhiN30sCisJeydcJycsICcsJywgMHhiOH0sCisJeycxJywgJ1MnLCAweGI5fSwKKwl7Jy0nLCAnbycsIDB4YmF9LAorCXsnPicsICc+JywgMHhiYn0sCisJeycxJywgJzQnLCAweGJjfSwKKwl7JzEnLCAnMicsIDB4YmR9LAorCXsnMycsICc0JywgMHhiZX0sCisJeyc/JywgJ0knLCAweGJmfSwKKwl7J0EnLCAnIScsIDB4YzB9LAorCXsnQScsICdcJycsIDB4YzF9LAorCXsnQScsICc+JywgMHhjMn0sCisJeydBJywgJz8nLCAweGMzfSwKKwl7J0EnLCAnOicsIDB4YzR9LAorCXsnQScsICdBJywgMHhjNX0sCisJeydBJywgJ0UnLCAweGM2fSwKKwl7J0MnLCAnLCcsIDB4Yzd9LAorCXsnRScsICchJywgMHhjOH0sCisJeydFJywgJ1wnJywgMHhjOX0sCisJeydFJywgJz4nLCAweGNhfSwKKwl7J0UnLCAnOicsIDB4Y2J9LAorCXsnSScsICchJywgMHhjY30sCisJeydJJywgJ1wnJywgMHhjZH0sCisJeydJJywgJz4nLCAweGNlfSwKKwl7J0knLCAnOicsIDB4Y2Z9LAorCXsnRCcsICctJywgMHhkMH0sCisJeydOJywgJz8nLCAweGQxfSwKKwl7J08nLCAnIScsIDB4ZDJ9LAorCXsnTycsICdcJycsIDB4ZDN9LAorCXsnTycsICc+JywgMHhkNH0sCisJeydPJywgJz8nLCAweGQ1fSwKKwl7J08nLCAnOicsIDB4ZDZ9LAorCXsnKicsICdYJywgMHhkN30sCisJeydPJywgJy8nLCAweGQ4fSwKKwl7J1UnLCAnIScsIDB4ZDl9LAorCXsnVScsICdcJycsIDB4ZGF9LAorCXsnVScsICc+JywgMHhkYn0sCisJeydVJywgJzonLCAweGRjfSwKKwl7J1knLCAnXCcnLCAweGRkfSwKKwl7J1QnLCAnSCcsIDB4ZGV9LAorCXsncycsICdzJywgMHhkZn0sCisJeydhJywgJyEnLCAweGUwfSwKKwl7J2EnLCAnXCcnLCAweGUxfSwKKwl7J2EnLCAnPicsIDB4ZTJ9LAorCXsnYScsICc/JywgMHhlM30sCisJeydhJywgJzonLCAweGU0fSwKKwl7J2EnLCAnYScsIDB4ZTV9LAorCXsnYScsICdlJywgMHhlNn0sCisJeydjJywgJywnLCAweGU3fSwKKwl7J2UnLCAnIScsIDB4ZTh9LAorCXsnZScsICdcJycsIDB4ZTl9LAorCXsnZScsICc+JywgMHhlYX0sCisJeydlJywgJzonLCAweGVifSwKKwl7J2knLCAnIScsIDB4ZWN9LAorCXsnaScsICdcJycsIDB4ZWR9LAorCXsnaScsICc+JywgMHhlZX0sCisJeydpJywgJzonLCAweGVmfSwKKwl7J2QnLCAnLScsIDB4ZjB9LAorCXsnbicsICc/JywgMHhmMX0sCisJeydvJywgJyEnLCAweGYyfSwKKwl7J28nLCAnXCcnLCAweGYzfSwKKwl7J28nLCAnPicsIDB4ZjR9LAorCXsnbycsICc/JywgMHhmNX0sCisJeydvJywgJzonLCAweGY2fSwKKwl7Jy0nLCAnOicsIDB4Zjd9LAorCXsnbycsICcvJywgMHhmOH0sCisJeyd1JywgJyEnLCAweGY5fSwKKwl7J3UnLCAnXCcnLCAweGZhfSwKKwl7J3UnLCAnPicsIDB4ZmJ9LAorCXsndScsICc6JywgMHhmY30sCisJeyd5JywgJ1wnJywgMHhmZH0sCisJeyd0JywgJ2gnLCAweGZlfSwKKwl7J3knLCAnOicsIDB4ZmZ9LAorCisjICAgICAgaWZkZWYgRkVBVF9NQllURQorIwlkZWZpbmUgVVNFX1VOSUNPREVfRElHUkFQSFMKKworCXsnQScsICctJywgMHgwMTAwfSwKKwl7J2EnLCAnLScsIDB4MDEwMX0sCisJeydBJywgJygnLCAweDAxMDJ9LAorCXsnYScsICcoJywgMHgwMTAzfSwKKwl7J0EnLCAnOycsIDB4MDEwNH0sCisJeydhJywgJzsnLCAweDAxMDV9LAorCXsnQycsICdcJycsIDB4MDEwNn0sCisJeydjJywgJ1wnJywgMHgwMTA3fSwKKwl7J0MnLCAnPicsIDB4MDEwOH0sCisJeydjJywgJz4nLCAweDAxMDl9LAorCXsnQycsICcuJywgMHgwMTBhfSwKKwl7J2MnLCAnLicsIDB4MDEwYn0sCisJeydDJywgJzwnLCAweDAxMGN9LAorCXsnYycsICc8JywgMHgwMTBkfSwKKwl7J0QnLCAnPCcsIDB4MDEwZX0sCisJeydkJywgJzwnLCAweDAxMGZ9LAorCXsnRCcsICcvJywgMHgwMTEwfSwKKwl7J2QnLCAnLycsIDB4MDExMX0sCisJeydFJywgJy0nLCAweDAxMTJ9LAorCXsnZScsICctJywgMHgwMTEzfSwKKwl7J0UnLCAnKCcsIDB4MDExNH0sCisJeydlJywgJygnLCAweDAxMTV9LAorCXsnRScsICcuJywgMHgwMTE2fSwKKwl7J2UnLCAnLicsIDB4MDExN30sCisJeydFJywgJzsnLCAweDAxMTh9LAorCXsnZScsICc7JywgMHgwMTE5fSwKKwl7J0UnLCAnPCcsIDB4MDExYX0sCisJeydlJywgJzwnLCAweDAxMWJ9LAorCXsnRycsICc+JywgMHgwMTFjfSwKKwl7J2cnLCAnPicsIDB4MDExZH0sCisJeydHJywgJygnLCAweDAxMWV9LAorCXsnZycsICcoJywgMHgwMTFmfSwKKwl7J0cnLCAnLicsIDB4MDEyMH0sCisJeydnJywgJy4nLCAweDAxMjF9LAorCXsnRycsICcsJywgMHgwMTIyfSwKKwl7J2cnLCAnLCcsIDB4MDEyM30sCisJeydIJywgJz4nLCAweDAxMjR9LAorCXsnaCcsICc+JywgMHgwMTI1fSwKKwl7J0gnLCAnLycsIDB4MDEyNn0sCisJeydoJywgJy8nLCAweDAxMjd9LAorCXsnSScsICc/JywgMHgwMTI4fSwKKwl7J2knLCAnPycsIDB4MDEyOX0sCisJeydJJywgJy0nLCAweDAxMmF9LAorCXsnaScsICctJywgMHgwMTJifSwKKwl7J0knLCAnKCcsIDB4MDEyY30sCisJeydpJywgJygnLCAweDAxMmR9LAorCXsnSScsICc7JywgMHgwMTJlfSwKKwl7J2knLCAnOycsIDB4MDEyZn0sCisJeydJJywgJy4nLCAweDAxMzB9LAorCXsnaScsICcuJywgMHgwMTMxfSwKKwl7J0knLCAnSicsIDB4MDEzMn0sCisJeydpJywgJ2onLCAweDAxMzN9LAorCXsnSicsICc+JywgMHgwMTM0fSwKKwl7J2onLCAnPicsIDB4MDEzNX0sCisJeydLJywgJywnLCAweDAxMzZ9LAorCXsnaycsICcsJywgMHgwMTM3fSwKKwl7J2snLCAnaycsIDB4MDEzOH0sCisJeydMJywgJ1wnJywgMHgwMTM5fSwKKwl7J2wnLCAnXCcnLCAweDAxM2F9LAorCXsnTCcsICcsJywgMHgwMTNifSwKKwl7J2wnLCAnLCcsIDB4MDEzY30sCisJeydMJywgJzwnLCAweDAxM2R9LAorCXsnbCcsICc8JywgMHgwMTNlfSwKKwl7J0wnLCAnLicsIDB4MDEzZn0sCisJeydsJywgJy4nLCAweDAxNDB9LAorCXsnTCcsICcvJywgMHgwMTQxfSwKKwl7J2wnLCAnLycsIDB4MDE0Mn0sCisJeydOJywgJ1wnJywgMHgwMTQzfSwKKwl7J24nLCAnXCcnLCAweDAxNDR9LAorCXsnTicsICcsJywgMHgwMTQ1fSwKKwl7J24nLCAnLCcsIDB4MDE0Nn0sCisJeydOJywgJzwnLCAweDAxNDd9LAorCXsnbicsICc8JywgMHgwMTQ4fSwKKwl7J1wnJywgJ24nLCAweDAxNDl9LAorCXsnTicsICdHJywgMHgwMTRhfSwKKwl7J24nLCAnZycsIDB4MDE0Yn0sCisJeydPJywgJy0nLCAweDAxNGN9LAorCXsnbycsICctJywgMHgwMTRkfSwKKwl7J08nLCAnKCcsIDB4MDE0ZX0sCisJeydvJywgJygnLCAweDAxNGZ9LAorCXsnTycsICciJywgMHgwMTUwfSwKKwl7J28nLCAnIicsIDB4MDE1MX0sCisJeydPJywgJ0UnLCAweDAxNTJ9LAorCXsnbycsICdlJywgMHgwMTUzfSwKKwl7J1InLCAnXCcnLCAweDAxNTR9LAorCXsncicsICdcJycsIDB4MDE1NX0sCisJeydSJywgJywnLCAweDAxNTZ9LAorCXsncicsICcsJywgMHgwMTU3fSwKKwl7J1InLCAnPCcsIDB4MDE1OH0sCisJeydyJywgJzwnLCAweDAxNTl9LAorCXsnUycsICdcJycsIDB4MDE1YX0sCisJeydzJywgJ1wnJywgMHgwMTVifSwKKwl7J1MnLCAnPicsIDB4MDE1Y30sCisJeydzJywgJz4nLCAweDAxNWR9LAorCXsnUycsICcsJywgMHgwMTVlfSwKKwl7J3MnLCAnLCcsIDB4MDE1Zn0sCisJeydTJywgJzwnLCAweDAxNjB9LAorCXsncycsICc8JywgMHgwMTYxfSwKKwl7J1QnLCAnLCcsIDB4MDE2Mn0sCisJeyd0JywgJywnLCAweDAxNjN9LAorCXsnVCcsICc8JywgMHgwMTY0fSwKKwl7J3QnLCAnPCcsIDB4MDE2NX0sCisJeydUJywgJy8nLCAweDAxNjZ9LAorCXsndCcsICcvJywgMHgwMTY3fSwKKwl7J1UnLCAnPycsIDB4MDE2OH0sCisJeyd1JywgJz8nLCAweDAxNjl9LAorCXsnVScsICctJywgMHgwMTZhfSwKKwl7J3UnLCAnLScsIDB4MDE2Yn0sCisJeydVJywgJygnLCAweDAxNmN9LAorCXsndScsICcoJywgMHgwMTZkfSwKKwl7J1UnLCAnMCcsIDB4MDE2ZX0sCisJeyd1JywgJzAnLCAweDAxNmZ9LAorCXsnVScsICciJywgMHgwMTcwfSwKKwl7J3UnLCAnIicsIDB4MDE3MX0sCisJeydVJywgJzsnLCAweDAxNzJ9LAorCXsndScsICc7JywgMHgwMTczfSwKKwl7J1cnLCAnPicsIDB4MDE3NH0sCisJeyd3JywgJz4nLCAweDAxNzV9LAorCXsnWScsICc+JywgMHgwMTc2fSwKKwl7J3knLCAnPicsIDB4MDE3N30sCisJeydZJywgJzonLCAweDAxNzh9LAorCXsnWicsICdcJycsIDB4MDE3OX0sCisJeyd6JywgJ1wnJywgMHgwMTdhfSwKKwl7J1onLCAnLicsIDB4MDE3Yn0sCisJeyd6JywgJy4nLCAweDAxN2N9LAorCXsnWicsICc8JywgMHgwMTdkfSwKKwl7J3onLCAnPCcsIDB4MDE3ZX0sCisJeydPJywgJzknLCAweDAxYTB9LAorCXsnbycsICc5JywgMHgwMWExfSwKKwl7J08nLCAnSScsIDB4MDFhMn0sCisJeydvJywgJ2knLCAweDAxYTN9LAorCXsneScsICdyJywgMHgwMWE2fSwKKwl7J1UnLCAnOScsIDB4MDFhZn0sCisJeyd1JywgJzknLCAweDAxYjB9LAorCXsnWicsICcvJywgMHgwMWI1fSwKKwl7J3onLCAnLycsIDB4MDFiNn0sCisJeydFJywgJ0QnLCAweDAxYjd9LAorCXsnQScsICc8JywgMHgwMWNkfSwKKwl7J2EnLCAnPCcsIDB4MDFjZX0sCisJeydJJywgJzwnLCAweDAxY2Z9LAorCXsnaScsICc8JywgMHgwMWQwfSwKKwl7J08nLCAnPCcsIDB4MDFkMX0sCisJeydvJywgJzwnLCAweDAxZDJ9LAorCXsnVScsICc8JywgMHgwMWQzfSwKKwl7J3UnLCAnPCcsIDB4MDFkNH0sCisJeydBJywgJzEnLCAweDAxZGV9LAorCXsnYScsICcxJywgMHgwMWRmfSwKKwl7J0EnLCAnNycsIDB4MDFlMH0sCisJeydhJywgJzcnLCAweDAxZTF9LAorCXsnQScsICczJywgMHgwMWUyfSwKKwl7J2EnLCAnMycsIDB4MDFlM30sCisJeydHJywgJy8nLCAweDAxZTR9LAorCXsnZycsICcvJywgMHgwMWU1fSwKKwl7J0cnLCAnPCcsIDB4MDFlNn0sCisJeydnJywgJzwnLCAweDAxZTd9LAorCXsnSycsICc8JywgMHgwMWU4fSwKKwl7J2snLCAnPCcsIDB4MDFlOX0sCisJeydPJywgJzsnLCAweDAxZWF9LAorCXsnbycsICc7JywgMHgwMWVifSwKKwl7J08nLCAnMScsIDB4MDFlY30sCisJeydvJywgJzEnLCAweDAxZWR9LAorCXsnRScsICdaJywgMHgwMWVlfSwKKwl7J2UnLCAneicsIDB4MDFlZn0sCisJeydqJywgJzwnLCAweDAxZjB9LAorCXsnRycsICdcJycsIDB4MDFmNH0sCisJeydnJywgJ1wnJywgMHgwMWY1fSwKKwl7JzsnLCAnUycsIDB4MDJiZn0sCisJeydcJycsICc8JywgMHgwMmM3fSwKKwl7J1wnJywgJygnLCAweDAyZDh9LAorCXsnXCcnLCAnLicsIDB4MDJkOX0sCisJeydcJycsICcwJywgMHgwMmRhfSwKKwl7J1wnJywgJzsnLCAweDAyZGJ9LAorCXsnXCcnLCAnIicsIDB4MDJkZH0sCisJeydBJywgJyUnLCAweDAzODZ9LAorCXsnRScsICclJywgMHgwMzg4fSwKKwl7J1knLCAnJScsIDB4MDM4OX0sCisJeydJJywgJyUnLCAweDAzOGF9LAorCXsnTycsICclJywgMHgwMzhjfSwKKwl7J1UnLCAnJScsIDB4MDM4ZX0sCisJeydXJywgJyUnLCAweDAzOGZ9LAorCXsnaScsICczJywgMHgwMzkwfSwKKwl7J0EnLCAnKicsIDB4MDM5MX0sCisJeydCJywgJyonLCAweDAzOTJ9LAorCXsnRycsICcqJywgMHgwMzkzfSwKKwl7J0QnLCAnKicsIDB4MDM5NH0sCisJeydFJywgJyonLCAweDAzOTV9LAorCXsnWicsICcqJywgMHgwMzk2fSwKKwl7J1knLCAnKicsIDB4MDM5N30sCisJeydIJywgJyonLCAweDAzOTh9LAorCXsnSScsICcqJywgMHgwMzk5fSwKKwl7J0snLCAnKicsIDB4MDM5YX0sCisJeydMJywgJyonLCAweDAzOWJ9LAorCXsnTScsICcqJywgMHgwMzljfSwKKwl7J04nLCAnKicsIDB4MDM5ZH0sCisJeydDJywgJyonLCAweDAzOWV9LAorCXsnTycsICcqJywgMHgwMzlmfSwKKwl7J1AnLCAnKicsIDB4MDNhMH0sCisJeydSJywgJyonLCAweDAzYTF9LAorCXsnUycsICcqJywgMHgwM2EzfSwKKwl7J1QnLCAnKicsIDB4MDNhNH0sCisJeydVJywgJyonLCAweDAzYTV9LAorCXsnRicsICcqJywgMHgwM2E2fSwKKwl7J1gnLCAnKicsIDB4MDNhN30sCisJeydRJywgJyonLCAweDAzYTh9LAorCXsnVycsICcqJywgMHgwM2E5fSwKKwl7J0onLCAnKicsIDB4MDNhYX0sCisJeydWJywgJyonLCAweDAzYWJ9LAorCXsnYScsICclJywgMHgwM2FjfSwKKwl7J2UnLCAnJScsIDB4MDNhZH0sCisJeyd5JywgJyUnLCAweDAzYWV9LAorCXsnaScsICclJywgMHgwM2FmfSwKKwl7J3UnLCAnMycsIDB4MDNiMH0sCisJeydhJywgJyonLCAweDAzYjF9LAorCXsnYicsICcqJywgMHgwM2IyfSwKKwl7J2cnLCAnKicsIDB4MDNiM30sCisJeydkJywgJyonLCAweDAzYjR9LAorCXsnZScsICcqJywgMHgwM2I1fSwKKwl7J3onLCAnKicsIDB4MDNiNn0sCisJeyd5JywgJyonLCAweDAzYjd9LAorCXsnaCcsICcqJywgMHgwM2I4fSwKKwl7J2knLCAnKicsIDB4MDNiOX0sCisJeydrJywgJyonLCAweDAzYmF9LAorCXsnbCcsICcqJywgMHgwM2JifSwKKwl7J20nLCAnKicsIDB4MDNiY30sCisJeyduJywgJyonLCAweDAzYmR9LAorCXsnYycsICcqJywgMHgwM2JlfSwKKwl7J28nLCAnKicsIDB4MDNiZn0sCisJeydwJywgJyonLCAweDAzYzB9LAorCXsncicsICcqJywgMHgwM2MxfSwKKwl7JyonLCAncycsIDB4MDNjMn0sCisJeydzJywgJyonLCAweDAzYzN9LAorCXsndCcsICcqJywgMHgwM2M0fSwKKwl7J3UnLCAnKicsIDB4MDNjNX0sCisJeydmJywgJyonLCAweDAzYzZ9LAorCXsneCcsICcqJywgMHgwM2M3fSwKKwl7J3EnLCAnKicsIDB4MDNjOH0sCisJeyd3JywgJyonLCAweDAzYzl9LAorCXsnaicsICcqJywgMHgwM2NhfSwKKwl7J3YnLCAnKicsIDB4MDNjYn0sCisJeydvJywgJyUnLCAweDAzY2N9LAorCXsndScsICclJywgMHgwM2NkfSwKKwl7J3cnLCAnJScsIDB4MDNjZX0sCisJeydcJycsICdHJywgMHgwM2Q4fSwKKwl7JywnLCAnRycsIDB4MDNkOX0sCisJeydUJywgJzMnLCAweDAzZGF9LAorCXsndCcsICczJywgMHgwM2RifSwKKwl7J00nLCAnMycsIDB4MDNkY30sCisJeydtJywgJzMnLCAweDAzZGR9LAorCXsnSycsICczJywgMHgwM2RlfSwKKwl7J2snLCAnMycsIDB4MDNkZn0sCisJeydQJywgJzMnLCAweDAzZTB9LAorCXsncCcsICczJywgMHgwM2UxfSwKKwl7J1wnJywgJyUnLCAweDAzZjR9LAorCXsnaicsICczJywgMHgwM2Y1fSwKKwl7J0knLCAnTycsIDB4MDQwMX0sCisJeydEJywgJyUnLCAweDA0MDJ9LAorCXsnRycsICclJywgMHgwNDAzfSwKKwl7J0knLCAnRScsIDB4MDQwNH0sCisJeydEJywgJ1MnLCAweDA0MDV9LAorCXsnSScsICdJJywgMHgwNDA2fSwKKwl7J1knLCAnSScsIDB4MDQwN30sCisJeydKJywgJyUnLCAweDA0MDh9LAorCXsnTCcsICdKJywgMHgwNDA5fSwKKwl7J04nLCAnSicsIDB4MDQwYX0sCisJeydUJywgJ3MnLCAweDA0MGJ9LAorCXsnSycsICdKJywgMHgwNDBjfSwKKwl7J1YnLCAnJScsIDB4MDQwZX0sCisJeydEJywgJ1onLCAweDA0MGZ9LAorCXsnQScsICc9JywgMHgwNDEwfSwKKwl7J0InLCAnPScsIDB4MDQxMX0sCisJeydWJywgJz0nLCAweDA0MTJ9LAorCXsnRycsICc9JywgMHgwNDEzfSwKKwl7J0QnLCAnPScsIDB4MDQxNH0sCisJeydFJywgJz0nLCAweDA0MTV9LAorCXsnWicsICclJywgMHgwNDE2fSwKKwl7J1onLCAnPScsIDB4MDQxN30sCisJeydJJywgJz0nLCAweDA0MTh9LAorCXsnSicsICc9JywgMHgwNDE5fSwKKwl7J0snLCAnPScsIDB4MDQxYX0sCisJeydMJywgJz0nLCAweDA0MWJ9LAorCXsnTScsICc9JywgMHgwNDFjfSwKKwl7J04nLCAnPScsIDB4MDQxZH0sCisJeydPJywgJz0nLCAweDA0MWV9LAorCXsnUCcsICc9JywgMHgwNDFmfSwKKwl7J1InLCAnPScsIDB4MDQyMH0sCisJeydTJywgJz0nLCAweDA0MjF9LAorCXsnVCcsICc9JywgMHgwNDIyfSwKKwl7J1UnLCAnPScsIDB4MDQyM30sCisJeydGJywgJz0nLCAweDA0MjR9LAorCXsnSCcsICc9JywgMHgwNDI1fSwKKwl7J0MnLCAnPScsIDB4MDQyNn0sCisJeydDJywgJyUnLCAweDA0Mjd9LAorCXsnUycsICclJywgMHgwNDI4fSwKKwl7J1MnLCAnYycsIDB4MDQyOX0sCisJeyc9JywgJyInLCAweDA0MmF9LAorCXsnWScsICc9JywgMHgwNDJifSwKKwl7JyUnLCAnIicsIDB4MDQyY30sCisJeydKJywgJ0UnLCAweDA0MmR9LAorCXsnSicsICdVJywgMHgwNDJlfSwKKwl7J0onLCAnQScsIDB4MDQyZn0sCisJeydhJywgJz0nLCAweDA0MzB9LAorCXsnYicsICc9JywgMHgwNDMxfSwKKwl7J3YnLCAnPScsIDB4MDQzMn0sCisJeydnJywgJz0nLCAweDA0MzN9LAorCXsnZCcsICc9JywgMHgwNDM0fSwKKwl7J2UnLCAnPScsIDB4MDQzNX0sCisJeyd6JywgJyUnLCAweDA0MzZ9LAorCXsneicsICc9JywgMHgwNDM3fSwKKwl7J2knLCAnPScsIDB4MDQzOH0sCisJeydqJywgJz0nLCAweDA0Mzl9LAorCXsnaycsICc9JywgMHgwNDNhfSwKKwl7J2wnLCAnPScsIDB4MDQzYn0sCisJeydtJywgJz0nLCAweDA0M2N9LAorCXsnbicsICc9JywgMHgwNDNkfSwKKwl7J28nLCAnPScsIDB4MDQzZX0sCisJeydwJywgJz0nLCAweDA0M2Z9LAorCXsncicsICc9JywgMHgwNDQwfSwKKwl7J3MnLCAnPScsIDB4MDQ0MX0sCisJeyd0JywgJz0nLCAweDA0NDJ9LAorCXsndScsICc9JywgMHgwNDQzfSwKKwl7J2YnLCAnPScsIDB4MDQ0NH0sCisJeydoJywgJz0nLCAweDA0NDV9LAorCXsnYycsICc9JywgMHgwNDQ2fSwKKwl7J2MnLCAnJScsIDB4MDQ0N30sCisJeydzJywgJyUnLCAweDA0NDh9LAorCXsncycsICdjJywgMHgwNDQ5fSwKKwl7Jz0nLCAnXCcnLCAweDA0NGF9LAorCXsneScsICc9JywgMHgwNDRifSwKKwl7JyUnLCAnXCcnLCAweDA0NGN9LAorCXsnaicsICdlJywgMHgwNDRkfSwKKwl7J2onLCAndScsIDB4MDQ0ZX0sCisJeydqJywgJ2EnLCAweDA0NGZ9LAorCXsnaScsICdvJywgMHgwNDUxfSwKKwl7J2QnLCAnJScsIDB4MDQ1Mn0sCisJeydnJywgJyUnLCAweDA0NTN9LAorCXsnaScsICdlJywgMHgwNDU0fSwKKwl7J2QnLCAncycsIDB4MDQ1NX0sCisJeydpJywgJ2knLCAweDA0NTZ9LAorCXsneScsICdpJywgMHgwNDU3fSwKKwl7J2onLCAnJScsIDB4MDQ1OH0sCisJeydsJywgJ2onLCAweDA0NTl9LAorCXsnbicsICdqJywgMHgwNDVhfSwKKwl7J3QnLCAncycsIDB4MDQ1Yn0sCisJeydrJywgJ2onLCAweDA0NWN9LAorCXsndicsICclJywgMHgwNDVlfSwKKwl7J2QnLCAneicsIDB4MDQ1Zn0sCisJeydZJywgJzMnLCAweDA0NjJ9LAorCXsneScsICczJywgMHgwNDYzfSwKKwl7J08nLCAnMycsIDB4MDQ2YX0sCisJeydvJywgJzMnLCAweDA0NmJ9LAorCXsnRicsICczJywgMHgwNDcyfSwKKwl7J2YnLCAnMycsIDB4MDQ3M30sCisJeydWJywgJzMnLCAweDA0NzR9LAorCXsndicsICczJywgMHgwNDc1fSwKKwl7J0MnLCAnMycsIDB4MDQ4MH0sCisJeydjJywgJzMnLCAweDA0ODF9LAorCXsnRycsICczJywgMHgwNDkwfSwKKwl7J2cnLCAnMycsIDB4MDQ5MX0sCisJeydBJywgJysnLCAweDA1ZDB9LAorCXsnQicsICcrJywgMHgwNWQxfSwKKwl7J0cnLCAnKycsIDB4MDVkMn0sCisJeydEJywgJysnLCAweDA1ZDN9LAorCXsnSCcsICcrJywgMHgwNWQ0fSwKKwl7J1cnLCAnKycsIDB4MDVkNX0sCisJeydaJywgJysnLCAweDA1ZDZ9LAorCXsnWCcsICcrJywgMHgwNWQ3fSwKKwl7J1QnLCAnaicsIDB4MDVkOH0sCisJeydKJywgJysnLCAweDA1ZDl9LAorCXsnSycsICclJywgMHgwNWRhfSwKKwl7J0snLCAnKycsIDB4MDVkYn0sCisJeydMJywgJysnLCAweDA1ZGN9LAorCXsnTScsICclJywgMHgwNWRkfSwKKwl7J00nLCAnKycsIDB4MDVkZX0sCisJeydOJywgJyUnLCAweDA1ZGZ9LAorCXsnTicsICcrJywgMHgwNWUwfSwKKwl7J1MnLCAnKycsIDB4MDVlMX0sCisJeydFJywgJysnLCAweDA1ZTJ9LAorCXsnUCcsICclJywgMHgwNWUzfSwKKwl7J1AnLCAnKycsIDB4MDVlNH0sCisJeydaJywgJ2onLCAweDA1ZTV9LAorCXsnWicsICdKJywgMHgwNWU2fSwKKwl7J1EnLCAnKycsIDB4MDVlN30sCisJeydSJywgJysnLCAweDA1ZTh9LAorCXsnUycsICdoJywgMHgwNWU5fSwKKwl7J1QnLCAnKycsIDB4MDVlYX0sCisJeycsJywgJysnLCAweDA2MGN9LAorCXsnOycsICcrJywgMHgwNjFifSwKKwl7Jz8nLCAnKycsIDB4MDYxZn0sCisJeydIJywgJ1wnJywgMHgwNjIxfSwKKwl7J2EnLCAnTScsIDB4MDYyMn0sCisJeydhJywgJ0gnLCAweDA2MjN9LAorCXsndycsICdIJywgMHgwNjI0fSwKKwl7J2EnLCAnaCcsIDB4MDYyNX0sCisJeyd5JywgJ0gnLCAweDA2MjZ9LAorCXsnYScsICcrJywgMHgwNjI3fSwKKwl7J2InLCAnKycsIDB4MDYyOH0sCisJeyd0JywgJ20nLCAweDA2Mjl9LAorCXsndCcsICcrJywgMHgwNjJhfSwKKwl7J3QnLCAnaycsIDB4MDYyYn0sCisJeydnJywgJysnLCAweDA2MmN9LAorCXsnaCcsICdrJywgMHgwNjJkfSwKKwl7J3gnLCAnKycsIDB4MDYyZX0sCisJeydkJywgJysnLCAweDA2MmZ9LAorCXsnZCcsICdrJywgMHgwNjMwfSwKKwl7J3InLCAnKycsIDB4MDYzMX0sCisJeyd6JywgJysnLCAweDA2MzJ9LAorCXsncycsICcrJywgMHgwNjMzfSwKKwl7J3MnLCAnbicsIDB4MDYzNH0sCisJeydjJywgJysnLCAweDA2MzV9LAorCXsnZCcsICdkJywgMHgwNjM2fSwKKwl7J3QnLCAnaicsIDB4MDYzN30sCisJeyd6JywgJ0gnLCAweDA2Mzh9LAorCXsnZScsICcrJywgMHgwNjM5fSwKKwl7J2knLCAnKycsIDB4MDYzYX0sCisJeycrJywgJysnLCAweDA2NDB9LAorCXsnZicsICcrJywgMHgwNjQxfSwKKwl7J3EnLCAnKycsIDB4MDY0Mn0sCisJeydrJywgJysnLCAweDA2NDN9LAorCXsnbCcsICcrJywgMHgwNjQ0fSwKKwl7J20nLCAnKycsIDB4MDY0NX0sCisJeyduJywgJysnLCAweDA2NDZ9LAorCXsnaCcsICcrJywgMHgwNjQ3fSwKKwl7J3cnLCAnKycsIDB4MDY0OH0sCisJeydqJywgJysnLCAweDA2NDl9LAorCXsneScsICcrJywgMHgwNjRhfSwKKwl7JzonLCAnKycsIDB4MDY0Yn0sCisJeyciJywgJysnLCAweDA2NGN9LAorCXsnPScsICcrJywgMHgwNjRkfSwKKwl7Jy8nLCAnKycsIDB4MDY0ZX0sCisJeydcJycsICcrJywgMHgwNjRmfSwKKwl7JzEnLCAnKycsIDB4MDY1MH0sCisJeyczJywgJysnLCAweDA2NTF9LAorCXsnMCcsICcrJywgMHgwNjUyfSwKKwl7J2EnLCAnUycsIDB4MDY3MH0sCisJeydwJywgJysnLCAweDA2N2V9LAorCXsndicsICcrJywgMHgwNmE0fSwKKwl7J2cnLCAnZicsIDB4MDZhZn0sCisJeycwJywgJ2EnLCAweDA2ZjB9LAorCXsnMScsICdhJywgMHgwNmYxfSwKKwl7JzInLCAnYScsIDB4MDZmMn0sCisJeyczJywgJ2EnLCAweDA2ZjN9LAorCXsnNCcsICdhJywgMHgwNmY0fSwKKwl7JzUnLCAnYScsIDB4MDZmNX0sCisJeyc2JywgJ2EnLCAweDA2ZjZ9LAorCXsnNycsICdhJywgMHgwNmY3fSwKKwl7JzgnLCAnYScsIDB4MDZmOH0sCisJeyc5JywgJ2EnLCAweDA2Zjl9LAorCXsnQicsICcuJywgMHgxZTAyfSwKKwl7J2InLCAnLicsIDB4MWUwM30sCisJeydCJywgJ18nLCAweDFlMDZ9LAorCXsnYicsICdfJywgMHgxZTA3fSwKKwl7J0QnLCAnLicsIDB4MWUwYX0sCisJeydkJywgJy4nLCAweDFlMGJ9LAorCXsnRCcsICdfJywgMHgxZTBlfSwKKwl7J2QnLCAnXycsIDB4MWUwZn0sCisJeydEJywgJywnLCAweDFlMTB9LAorCXsnZCcsICcsJywgMHgxZTExfSwKKwl7J0YnLCAnLicsIDB4MWUxZX0sCisJeydmJywgJy4nLCAweDFlMWZ9LAorCXsnRycsICctJywgMHgxZTIwfSwKKwl7J2cnLCAnLScsIDB4MWUyMX0sCisJeydIJywgJy4nLCAweDFlMjJ9LAorCXsnaCcsICcuJywgMHgxZTIzfSwKKwl7J0gnLCAnOicsIDB4MWUyNn0sCisJeydoJywgJzonLCAweDFlMjd9LAorCXsnSCcsICcsJywgMHgxZTI4fSwKKwl7J2gnLCAnLCcsIDB4MWUyOX0sCisJeydLJywgJ1wnJywgMHgxZTMwfSwKKwl7J2snLCAnXCcnLCAweDFlMzF9LAorCXsnSycsICdfJywgMHgxZTM0fSwKKwl7J2snLCAnXycsIDB4MWUzNX0sCisJeydMJywgJ18nLCAweDFlM2F9LAorCXsnbCcsICdfJywgMHgxZTNifSwKKwl7J00nLCAnXCcnLCAweDFlM2V9LAorCXsnbScsICdcJycsIDB4MWUzZn0sCisJeydNJywgJy4nLCAweDFlNDB9LAorCXsnbScsICcuJywgMHgxZTQxfSwKKwl7J04nLCAnLicsIDB4MWU0NH0sCisJeyduJywgJy4nLCAweDFlNDV9LAorCXsnTicsICdfJywgMHgxZTQ4fSwKKwl7J24nLCAnXycsIDB4MWU0OX0sCisJeydQJywgJ1wnJywgMHgxZTU0fSwKKwl7J3AnLCAnXCcnLCAweDFlNTV9LAorCXsnUCcsICcuJywgMHgxZTU2fSwKKwl7J3AnLCAnLicsIDB4MWU1N30sCisJeydSJywgJy4nLCAweDFlNTh9LAorCXsncicsICcuJywgMHgxZTU5fSwKKwl7J1InLCAnXycsIDB4MWU1ZX0sCisJeydyJywgJ18nLCAweDFlNWZ9LAorCXsnUycsICcuJywgMHgxZTYwfSwKKwl7J3MnLCAnLicsIDB4MWU2MX0sCisJeydUJywgJy4nLCAweDFlNmF9LAorCXsndCcsICcuJywgMHgxZTZifSwKKwl7J1QnLCAnXycsIDB4MWU2ZX0sCisJeyd0JywgJ18nLCAweDFlNmZ9LAorCXsnVicsICc/JywgMHgxZTdjfSwKKwl7J3YnLCAnPycsIDB4MWU3ZH0sCisJeydXJywgJyEnLCAweDFlODB9LAorCXsndycsICchJywgMHgxZTgxfSwKKwl7J1cnLCAnXCcnLCAweDFlODJ9LAorCXsndycsICdcJycsIDB4MWU4M30sCisJeydXJywgJzonLCAweDFlODR9LAorCXsndycsICc6JywgMHgxZTg1fSwKKwl7J1cnLCAnLicsIDB4MWU4Nn0sCisJeyd3JywgJy4nLCAweDFlODd9LAorCXsnWCcsICcuJywgMHgxZThhfSwKKwl7J3gnLCAnLicsIDB4MWU4Yn0sCisJeydYJywgJzonLCAweDFlOGN9LAorCXsneCcsICc6JywgMHgxZThkfSwKKwl7J1knLCAnLicsIDB4MWU4ZX0sCisJeyd5JywgJy4nLCAweDFlOGZ9LAorCXsnWicsICc+JywgMHgxZTkwfSwKKwl7J3onLCAnPicsIDB4MWU5MX0sCisJeydaJywgJ18nLCAweDFlOTR9LAorCXsneicsICdfJywgMHgxZTk1fSwKKwl7J2gnLCAnXycsIDB4MWU5Nn0sCisJeyd0JywgJzonLCAweDFlOTd9LAorCXsndycsICcwJywgMHgxZTk4fSwKKwl7J3knLCAnMCcsIDB4MWU5OX0sCisJeydBJywgJzInLCAweDFlYTJ9LAorCXsnYScsICcyJywgMHgxZWEzfSwKKwl7J0UnLCAnMicsIDB4MWViYX0sCisJeydlJywgJzInLCAweDFlYmJ9LAorCXsnRScsICc/JywgMHgxZWJjfSwKKwl7J2UnLCAnPycsIDB4MWViZH0sCisJeydJJywgJzInLCAweDFlYzh9LAorCXsnaScsICcyJywgMHgxZWM5fSwKKwl7J08nLCAnMicsIDB4MWVjZX0sCisJeydvJywgJzInLCAweDFlY2Z9LAorCXsnVScsICcyJywgMHgxZWU2fSwKKwl7J3UnLCAnMicsIDB4MWVlN30sCisJeydZJywgJyEnLCAweDFlZjJ9LAorCXsneScsICchJywgMHgxZWYzfSwKKwl7J1knLCAnMicsIDB4MWVmNn0sCisJeyd5JywgJzInLCAweDFlZjd9LAorCXsnWScsICc/JywgMHgxZWY4fSwKKwl7J3knLCAnPycsIDB4MWVmOX0sCisJeyc7JywgJ1wnJywgMHgxZjAwfSwKKwl7JywnLCAnXCcnLCAweDFmMDF9LAorCXsnOycsICchJywgMHgxZjAyfSwKKwl7JywnLCAnIScsIDB4MWYwM30sCisJeyc/JywgJzsnLCAweDFmMDR9LAorCXsnPycsICcsJywgMHgxZjA1fSwKKwl7JyEnLCAnOicsIDB4MWYwNn0sCisJeyc/JywgJzonLCAweDFmMDd9LAorCXsnMScsICdOJywgMHgyMDAyfSwKKwl7JzEnLCAnTScsIDB4MjAwM30sCisJeyczJywgJ00nLCAweDIwMDR9LAorCXsnNCcsICdNJywgMHgyMDA1fSwKKwl7JzYnLCAnTScsIDB4MjAwNn0sCisJeycxJywgJ1QnLCAweDIwMDl9LAorCXsnMScsICdIJywgMHgyMDBhfSwKKwl7Jy0nLCAnMScsIDB4MjAxMH0sCisJeyctJywgJ04nLCAweDIwMTN9LAorCXsnLScsICdNJywgMHgyMDE0fSwKKwl7Jy0nLCAnMycsIDB4MjAxNX0sCisJeychJywgJzInLCAweDIwMTZ9LAorCXsnPScsICcyJywgMHgyMDE3fSwKKwl7J1wnJywgJzYnLCAweDIwMTh9LAorCXsnXCcnLCAnOScsIDB4MjAxOX0sCisJeycuJywgJzknLCAweDIwMWF9LAorCXsnOScsICdcJycsIDB4MjAxYn0sCisJeyciJywgJzYnLCAweDIwMWN9LAorCXsnIicsICc5JywgMHgyMDFkfSwKKwl7JzonLCAnOScsIDB4MjAxZX0sCisJeyc5JywgJyInLCAweDIwMWZ9LAorCXsnLycsICctJywgMHgyMDIwfSwKKwl7Jy8nLCAnPScsIDB4MjAyMX0sCisJeycuJywgJy4nLCAweDIwMjV9LAorCXsnJScsICcwJywgMHgyMDMwfSwKKwl7JzEnLCAnXCcnLCAweDIwMzJ9LAorCXsnMicsICdcJycsIDB4MjAzM30sCisJeyczJywgJ1wnJywgMHgyMDM0fSwKKwl7JzEnLCAnIicsIDB4MjAzNX0sCisJeycyJywgJyInLCAweDIwMzZ9LAorCXsnMycsICciJywgMHgyMDM3fSwKKwl7J0MnLCAnYScsIDB4MjAzOH0sCisJeyc8JywgJzEnLCAweDIwMzl9LAorCXsnPicsICcxJywgMHgyMDNhfSwKKwl7JzonLCAnWCcsIDB4MjAzYn0sCisJeydcJycsICctJywgMHgyMDNlfSwKKwl7Jy8nLCAnZicsIDB4MjA0NH0sCisJeycwJywgJ1MnLCAweDIwNzB9LAorCXsnNCcsICdTJywgMHgyMDc0fSwKKwl7JzUnLCAnUycsIDB4MjA3NX0sCisJeyc2JywgJ1MnLCAweDIwNzZ9LAorCXsnNycsICdTJywgMHgyMDc3fSwKKwl7JzgnLCAnUycsIDB4MjA3OH0sCisJeyc5JywgJ1MnLCAweDIwNzl9LAorCXsnKycsICdTJywgMHgyMDdhfSwKKwl7Jy0nLCAnUycsIDB4MjA3Yn0sCisJeyc9JywgJ1MnLCAweDIwN2N9LAorCXsnKCcsICdTJywgMHgyMDdkfSwKKwl7JyknLCAnUycsIDB4MjA3ZX0sCisJeyduJywgJ1MnLCAweDIwN2Z9LAorCXsnMCcsICdzJywgMHgyMDgwfSwKKwl7JzEnLCAncycsIDB4MjA4MX0sCisJeycyJywgJ3MnLCAweDIwODJ9LAorCXsnMycsICdzJywgMHgyMDgzfSwKKwl7JzQnLCAncycsIDB4MjA4NH0sCisJeyc1JywgJ3MnLCAweDIwODV9LAorCXsnNicsICdzJywgMHgyMDg2fSwKKwl7JzcnLCAncycsIDB4MjA4N30sCisJeyc4JywgJ3MnLCAweDIwODh9LAorCXsnOScsICdzJywgMHgyMDg5fSwKKwl7JysnLCAncycsIDB4MjA4YX0sCisJeyctJywgJ3MnLCAweDIwOGJ9LAorCXsnPScsICdzJywgMHgyMDhjfSwKKwl7JygnLCAncycsIDB4MjA4ZH0sCisJeycpJywgJ3MnLCAweDIwOGV9LAorCXsnTCcsICdpJywgMHgyMGE0fSwKKwl7J1AnLCAndCcsIDB4MjBhN30sCisJeydXJywgJz0nLCAweDIwYTl9LAorCXsnbycsICdDJywgMHgyMTAzfSwKKwl7J2MnLCAnbycsIDB4MjEwNX0sCisJeydvJywgJ0YnLCAweDIxMDl9LAorCXsnTicsICcwJywgMHgyMTE2fSwKKwl7J1AnLCAnTycsIDB4MjExN30sCisJeydSJywgJ3gnLCAweDIxMWV9LAorCXsnUycsICdNJywgMHgyMTIwfSwKKwl7J1QnLCAnTScsIDB4MjEyMn0sCisJeydPJywgJ20nLCAweDIxMjZ9LAorCXsnQScsICdPJywgMHgyMTJifSwKKwl7JzEnLCAnMycsIDB4MjE1M30sCisJeycyJywgJzMnLCAweDIxNTR9LAorCXsnMScsICc1JywgMHgyMTU1fSwKKwl7JzInLCAnNScsIDB4MjE1Nn0sCisJeyczJywgJzUnLCAweDIxNTd9LAorCXsnNCcsICc1JywgMHgyMTU4fSwKKwl7JzEnLCAnNicsIDB4MjE1OX0sCisJeyc1JywgJzYnLCAweDIxNWF9LAorCXsnMScsICc4JywgMHgyMTVifSwKKwl7JzMnLCAnOCcsIDB4MjE1Y30sCisJeyc1JywgJzgnLCAweDIxNWR9LAorCXsnNycsICc4JywgMHgyMTVlfSwKKwl7JzEnLCAnUicsIDB4MjE2MH0sCisJeycyJywgJ1InLCAweDIxNjF9LAorCXsnMycsICdSJywgMHgyMTYyfSwKKwl7JzQnLCAnUicsIDB4MjE2M30sCisJeyc1JywgJ1InLCAweDIxNjR9LAorCXsnNicsICdSJywgMHgyMTY1fSwKKwl7JzcnLCAnUicsIDB4MjE2Nn0sCisJeyc4JywgJ1InLCAweDIxNjd9LAorCXsnOScsICdSJywgMHgyMTY4fSwKKwl7J2EnLCAnUicsIDB4MjE2OX0sCisJeydiJywgJ1InLCAweDIxNmF9LAorCXsnYycsICdSJywgMHgyMTZifSwKKwl7JzEnLCAncicsIDB4MjE3MH0sCisJeycyJywgJ3InLCAweDIxNzF9LAorCXsnMycsICdyJywgMHgyMTcyfSwKKwl7JzQnLCAncicsIDB4MjE3M30sCisJeyc1JywgJ3InLCAweDIxNzR9LAorCXsnNicsICdyJywgMHgyMTc1fSwKKwl7JzcnLCAncicsIDB4MjE3Nn0sCisJeyc4JywgJ3InLCAweDIxNzd9LAorCXsnOScsICdyJywgMHgyMTc4fSwKKwl7J2EnLCAncicsIDB4MjE3OX0sCisJeydiJywgJ3InLCAweDIxN2F9LAorCXsnYycsICdyJywgMHgyMTdifSwKKwl7JzwnLCAnLScsIDB4MjE5MH0sCisJeyctJywgJyEnLCAweDIxOTF9LAorCXsnLScsICc+JywgMHgyMTkyfSwKKwl7Jy0nLCAndicsIDB4MjE5M30sCisJeyc8JywgJz4nLCAweDIxOTR9LAorCXsnVScsICdEJywgMHgyMTk1fSwKKwl7JzwnLCAnPScsIDB4MjFkMH0sCisJeyc9JywgJz4nLCAweDIxZDJ9LAorCXsnPScsICc9JywgMHgyMWQ0fSwKKwl7J0YnLCAnQScsIDB4MjIwMH0sCisJeydkJywgJ1AnLCAweDIyMDJ9LAorCXsnVCcsICdFJywgMHgyMjAzfSwKKwl7Jy8nLCAnMCcsIDB4MjIwNX0sCisJeydEJywgJ0UnLCAweDIyMDZ9LAorCXsnTicsICdCJywgMHgyMjA3fSwKKwl7JygnLCAnLScsIDB4MjIwOH0sCisJeyctJywgJyknLCAweDIyMGJ9LAorCXsnKicsICdQJywgMHgyMjBmfSwKKwl7JysnLCAnWicsIDB4MjIxMX0sCisJeyctJywgJzInLCAweDIyMTJ9LAorCXsnLScsICcrJywgMHgyMjEzfSwKKwl7JyonLCAnLScsIDB4MjIxN30sCisJeydPJywgJ2InLCAweDIyMTh9LAorCXsnUycsICdiJywgMHgyMjE5fSwKKwl7J1InLCAnVCcsIDB4MjIxYX0sCisJeycwJywgJygnLCAweDIyMWR9LAorCXsnMCcsICcwJywgMHgyMjFlfSwKKwl7Jy0nLCAnTCcsIDB4MjIxZn0sCisJeyctJywgJ1YnLCAweDIyMjB9LAorCXsnUCcsICdQJywgMHgyMjI1fSwKKwl7J0EnLCAnTicsIDB4MjIyN30sCisJeydPJywgJ1InLCAweDIyMjh9LAorCXsnKCcsICdVJywgMHgyMjI5fSwKKwl7JyknLCAnVScsIDB4MjIyYX0sCisJeydJJywgJ24nLCAweDIyMmJ9LAorCXsnRCcsICdJJywgMHgyMjJjfSwKKwl7J0knLCAnbycsIDB4MjIyZX0sCisJeycuJywgJzonLCAweDIyMzR9LAorCXsnOicsICcuJywgMHgyMjM1fSwKKwl7JzonLCAnUicsIDB4MjIzNn0sCisJeyc6JywgJzonLCAweDIyMzd9LAorCXsnPycsICcxJywgMHgyMjNjfSwKKwl7J0MnLCAnRycsIDB4MjIzZX0sCisJeyc/JywgJy0nLCAweDIyNDN9LAorCXsnPycsICc9JywgMHgyMjQ1fSwKKwl7Jz8nLCAnMicsIDB4MjI0OH0sCisJeyc9JywgJz8nLCAweDIyNGN9LAorCXsnSCcsICdJJywgMHgyMjUzfSwKKwl7JyEnLCAnPScsIDB4MjI2MH0sCisJeyc9JywgJzMnLCAweDIyNjF9LAorCXsnPScsICc8JywgMHgyMjY0fSwKKwl7Jz4nLCAnPScsIDB4MjI2NX0sCisJeyc8JywgJyonLCAweDIyNmF9LAorCXsnKicsICc+JywgMHgyMjZifSwKKwl7JyEnLCAnPCcsIDB4MjI2ZX0sCisJeychJywgJz4nLCAweDIyNmZ9LAorCXsnKCcsICdDJywgMHgyMjgyfSwKKwl7JyknLCAnQycsIDB4MjI4M30sCisJeycoJywgJ18nLCAweDIyODZ9LAorCXsnKScsICdfJywgMHgyMjg3fSwKKwl7JzAnLCAnLicsIDB4MjI5OX0sCisJeycwJywgJzInLCAweDIyOWF9LAorCXsnLScsICdUJywgMHgyMmE1fSwKKwl7Jy4nLCAnUCcsIDB4MjJjNX0sCisJeyc6JywgJzMnLCAweDIyZWV9LAorCXsnLicsICczJywgMHgyMmVmfSwKKwl7J0UnLCAnaCcsIDB4MjMwMn0sCisJeyc8JywgJzcnLCAweDIzMDh9LAorCXsnPicsICc3JywgMHgyMzA5fSwKKwl7JzcnLCAnPCcsIDB4MjMwYX0sCisJeyc3JywgJz4nLCAweDIzMGJ9LAorCXsnTicsICdJJywgMHgyMzEwfSwKKwl7JygnLCAnQScsIDB4MjMxMn0sCisJeydUJywgJ1InLCAweDIzMTV9LAorCXsnSScsICd1JywgMHgyMzIwfSwKKwl7J0knLCAnbCcsIDB4MjMyMX0sCisJeyc8JywgJy8nLCAweDIzMjl9LAorCXsnLycsICc+JywgMHgyMzJhfSwKKwl7J1YnLCAncycsIDB4MjQyM30sCisJeycxJywgJ2gnLCAweDI0NDB9LAorCXsnMycsICdoJywgMHgyNDQxfSwKKwl7JzInLCAnaCcsIDB4MjQ0Mn0sCisJeyc0JywgJ2gnLCAweDI0NDN9LAorCXsnMScsICdqJywgMHgyNDQ2fSwKKwl7JzInLCAnaicsIDB4MjQ0N30sCisJeyczJywgJ2onLCAweDI0NDh9LAorCXsnNCcsICdqJywgMHgyNDQ5fSwKKwl7JzEnLCAnLicsIDB4MjQ4OH0sCisJeycyJywgJy4nLCAweDI0ODl9LAorCXsnMycsICcuJywgMHgyNDhhfSwKKwl7JzQnLCAnLicsIDB4MjQ4Yn0sCisJeyc1JywgJy4nLCAweDI0OGN9LAorCXsnNicsICcuJywgMHgyNDhkfSwKKwl7JzcnLCAnLicsIDB4MjQ4ZX0sCisJeyc4JywgJy4nLCAweDI0OGZ9LAorCXsnOScsICcuJywgMHgyNDkwfSwKKwl7J2gnLCAnaCcsIDB4MjUwMH0sCisJeydIJywgJ0gnLCAweDI1MDF9LAorCXsndicsICd2JywgMHgyNTAyfSwKKwl7J1YnLCAnVicsIDB4MjUwM30sCisJeyczJywgJy0nLCAweDI1MDR9LAorCXsnMycsICdfJywgMHgyNTA1fSwKKwl7JzMnLCAnIScsIDB4MjUwNn0sCisJeyczJywgJy8nLCAweDI1MDd9LAorCXsnNCcsICctJywgMHgyNTA4fSwKKwl7JzQnLCAnXycsIDB4MjUwOX0sCisJeyc0JywgJyEnLCAweDI1MGF9LAorCXsnNCcsICcvJywgMHgyNTBifSwKKwl7J2QnLCAncicsIDB4MjUwY30sCisJeydkJywgJ1InLCAweDI1MGR9LAorCXsnRCcsICdyJywgMHgyNTBlfSwKKwl7J0QnLCAnUicsIDB4MjUwZn0sCisJeydkJywgJ2wnLCAweDI1MTB9LAorCXsnZCcsICdMJywgMHgyNTExfSwKKwl7J0QnLCAnbCcsIDB4MjUxMn0sCisJeydMJywgJ0QnLCAweDI1MTN9LAorCXsndScsICdyJywgMHgyNTE0fSwKKwl7J3UnLCAnUicsIDB4MjUxNX0sCisJeydVJywgJ3InLCAweDI1MTZ9LAorCXsnVScsICdSJywgMHgyNTE3fSwKKwl7J3UnLCAnbCcsIDB4MjUxOH0sCisJeyd1JywgJ0wnLCAweDI1MTl9LAorCXsnVScsICdsJywgMHgyNTFhfSwKKwl7J1UnLCAnTCcsIDB4MjUxYn0sCisJeyd2JywgJ3InLCAweDI1MWN9LAorCXsndicsICdSJywgMHgyNTFkfSwKKwl7J1YnLCAncicsIDB4MjUyMH0sCisJeydWJywgJ1InLCAweDI1MjN9LAorCXsndicsICdsJywgMHgyNTI0fSwKKwl7J3YnLCAnTCcsIDB4MjUyNX0sCisJeydWJywgJ2wnLCAweDI1Mjh9LAorCXsnVicsICdMJywgMHgyNTJifSwKKwl7J2QnLCAnaCcsIDB4MjUyY30sCisJeydkJywgJ0gnLCAweDI1MmZ9LAorCXsnRCcsICdoJywgMHgyNTMwfSwKKwl7J0QnLCAnSCcsIDB4MjUzM30sCisJeyd1JywgJ2gnLCAweDI1MzR9LAorCXsndScsICdIJywgMHgyNTM3fSwKKwl7J1UnLCAnaCcsIDB4MjUzOH0sCisJeydVJywgJ0gnLCAweDI1M2J9LAorCXsndicsICdoJywgMHgyNTNjfSwKKwl7J3YnLCAnSCcsIDB4MjUzZn0sCisJeydWJywgJ2gnLCAweDI1NDJ9LAorCXsnVicsICdIJywgMHgyNTRifSwKKwl7J0YnLCAnRCcsIDB4MjU3MX0sCisJeydCJywgJ0QnLCAweDI1NzJ9LAorCXsnVCcsICdCJywgMHgyNTgwfSwKKwl7J0wnLCAnQicsIDB4MjU4NH0sCisJeydGJywgJ0InLCAweDI1ODh9LAorCXsnbCcsICdCJywgMHgyNThjfSwKKwl7J1InLCAnQicsIDB4MjU5MH0sCisJeycuJywgJ1MnLCAweDI1OTF9LAorCXsnOicsICdTJywgMHgyNTkyfSwKKwl7Jz8nLCAnUycsIDB4MjU5M30sCisJeydmJywgJ1MnLCAweDI1YTB9LAorCXsnTycsICdTJywgMHgyNWExfSwKKwl7J1InLCAnTycsIDB4MjVhMn0sCisJeydSJywgJ3InLCAweDI1YTN9LAorCXsnUicsICdGJywgMHgyNWE0fSwKKwl7J1InLCAnWScsIDB4MjVhNX0sCisJeydSJywgJ0gnLCAweDI1YTZ9LAorCXsnUicsICdaJywgMHgyNWE3fSwKKwl7J1InLCAnSycsIDB4MjVhOH0sCisJeydSJywgJ1gnLCAweDI1YTl9LAorCXsncycsICdCJywgMHgyNWFhfSwKKwl7J1MnLCAnUicsIDB4MjVhY30sCisJeydPJywgJ3InLCAweDI1YWR9LAorCXsnVScsICdUJywgMHgyNWIyfSwKKwl7J3UnLCAnVCcsIDB4MjViM30sCisJeydQJywgJ1InLCAweDI1YjZ9LAorCXsnVCcsICdyJywgMHgyNWI3fSwKKwl7J0QnLCAndCcsIDB4MjViY30sCisJeydkJywgJ1QnLCAweDI1YmR9LAorCXsnUCcsICdMJywgMHgyNWMwfSwKKwl7J1QnLCAnbCcsIDB4MjVjMX0sCisJeydEJywgJ2InLCAweDI1YzZ9LAorCXsnRCcsICd3JywgMHgyNWM3fSwKKwl7J0wnLCAnWicsIDB4MjVjYX0sCisJeycwJywgJ20nLCAweDI1Y2J9LAorCXsnMCcsICdvJywgMHgyNWNlfSwKKwl7JzAnLCAnTScsIDB4MjVjZn0sCisJeycwJywgJ0wnLCAweDI1ZDB9LAorCXsnMCcsICdSJywgMHgyNWQxfSwKKwl7J1MnLCAnbicsIDB4MjVkOH0sCisJeydJJywgJ2MnLCAweDI1ZDl9LAorCXsnRicsICdkJywgMHgyNWUyfSwKKwl7J0InLCAnZCcsIDB4MjVlM30sCisJeycqJywgJzInLCAweDI2MDV9LAorCXsnKicsICcxJywgMHgyNjA2fSwKKwl7JzwnLCAnSCcsIDB4MjYxY30sCisJeyc+JywgJ0gnLCAweDI2MWV9LAorCXsnMCcsICd1JywgMHgyNjNhfSwKKwl7JzAnLCAnVScsIDB4MjYzYn0sCisJeydTJywgJ1UnLCAweDI2M2N9LAorCXsnRicsICdtJywgMHgyNjQwfSwKKwl7J00nLCAnbCcsIDB4MjY0Mn0sCisJeydjJywgJ1MnLCAweDI2NjB9LAorCXsnYycsICdIJywgMHgyNjYxfSwKKwl7J2MnLCAnRCcsIDB4MjY2Mn0sCisJeydjJywgJ0MnLCAweDI2NjN9LAorCXsnTScsICdkJywgMHgyNjY5fSwKKwl7J00nLCAnOCcsIDB4MjY2YX0sCisJeydNJywgJzInLCAweDI2NmJ9LAorCXsnTScsICdiJywgMHgyNjZkfSwKKwl7J00nLCAneCcsIDB4MjY2ZX0sCisJeydNJywgJ1gnLCAweDI2NmZ9LAorCXsnTycsICdLJywgMHgyNzEzfSwKKwl7J1gnLCAnWCcsIDB4MjcxN30sCisJeyctJywgJ1gnLCAweDI3MjB9LAorCXsnSScsICdTJywgMHgzMDAwfSwKKwl7JywnLCAnXycsIDB4MzAwMX0sCisJeycuJywgJ18nLCAweDMwMDJ9LAorCXsnKycsICciJywgMHgzMDAzfSwKKwl7JysnLCAnXycsIDB4MzAwNH0sCisJeycqJywgJ18nLCAweDMwMDV9LAorCXsnOycsICdfJywgMHgzMDA2fSwKKwl7JzAnLCAnXycsIDB4MzAwN30sCisJeyc8JywgJysnLCAweDMwMGF9LAorCXsnPicsICcrJywgMHgzMDBifSwKKwl7JzwnLCAnXCcnLCAweDMwMGN9LAorCXsnPicsICdcJycsIDB4MzAwZH0sCisJeyc8JywgJyInLCAweDMwMGV9LAorCXsnPicsICciJywgMHgzMDBmfSwKKwl7JygnLCAnIicsIDB4MzAxMH0sCisJeycpJywgJyInLCAweDMwMTF9LAorCXsnPScsICdUJywgMHgzMDEyfSwKKwl7Jz0nLCAnXycsIDB4MzAxM30sCisJeycoJywgJ1wnJywgMHgzMDE0fSwKKwl7JyknLCAnXCcnLCAweDMwMTV9LAorCXsnKCcsICdJJywgMHgzMDE2fSwKKwl7JyknLCAnSScsIDB4MzAxN30sCisJeyctJywgJz8nLCAweDMwMWN9LAorCXsnQScsICc1JywgMHgzMDQxfSwKKwl7J2EnLCAnNScsIDB4MzA0Mn0sCisJeydJJywgJzUnLCAweDMwNDN9LAorCXsnaScsICc1JywgMHgzMDQ0fSwKKwl7J1UnLCAnNScsIDB4MzA0NX0sCisJeyd1JywgJzUnLCAweDMwNDZ9LAorCXsnRScsICc1JywgMHgzMDQ3fSwKKwl7J2UnLCAnNScsIDB4MzA0OH0sCisJeydPJywgJzUnLCAweDMwNDl9LAorCXsnbycsICc1JywgMHgzMDRhfSwKKwl7J2snLCAnYScsIDB4MzA0Yn0sCisJeydnJywgJ2EnLCAweDMwNGN9LAorCXsnaycsICdpJywgMHgzMDRkfSwKKwl7J2cnLCAnaScsIDB4MzA0ZX0sCisJeydrJywgJ3UnLCAweDMwNGZ9LAorCXsnZycsICd1JywgMHgzMDUwfSwKKwl7J2snLCAnZScsIDB4MzA1MX0sCisJeydnJywgJ2UnLCAweDMwNTJ9LAorCXsnaycsICdvJywgMHgzMDUzfSwKKwl7J2cnLCAnbycsIDB4MzA1NH0sCisJeydzJywgJ2EnLCAweDMwNTV9LAorCXsneicsICdhJywgMHgzMDU2fSwKKwl7J3MnLCAnaScsIDB4MzA1N30sCisJeyd6JywgJ2knLCAweDMwNTh9LAorCXsncycsICd1JywgMHgzMDU5fSwKKwl7J3onLCAndScsIDB4MzA1YX0sCisJeydzJywgJ2UnLCAweDMwNWJ9LAorCXsneicsICdlJywgMHgzMDVjfSwKKwl7J3MnLCAnbycsIDB4MzA1ZH0sCisJeyd6JywgJ28nLCAweDMwNWV9LAorCXsndCcsICdhJywgMHgzMDVmfSwKKwl7J2QnLCAnYScsIDB4MzA2MH0sCisJeyd0JywgJ2knLCAweDMwNjF9LAorCXsnZCcsICdpJywgMHgzMDYyfSwKKwl7J3QnLCAnVScsIDB4MzA2M30sCisJeyd0JywgJ3UnLCAweDMwNjR9LAorCXsnZCcsICd1JywgMHgzMDY1fSwKKwl7J3QnLCAnZScsIDB4MzA2Nn0sCisJeydkJywgJ2UnLCAweDMwNjd9LAorCXsndCcsICdvJywgMHgzMDY4fSwKKwl7J2QnLCAnbycsIDB4MzA2OX0sCisJeyduJywgJ2EnLCAweDMwNmF9LAorCXsnbicsICdpJywgMHgzMDZifSwKKwl7J24nLCAndScsIDB4MzA2Y30sCisJeyduJywgJ2UnLCAweDMwNmR9LAorCXsnbicsICdvJywgMHgzMDZlfSwKKwl7J2gnLCAnYScsIDB4MzA2Zn0sCisJeydiJywgJ2EnLCAweDMwNzB9LAorCXsncCcsICdhJywgMHgzMDcxfSwKKwl7J2gnLCAnaScsIDB4MzA3Mn0sCisJeydiJywgJ2knLCAweDMwNzN9LAorCXsncCcsICdpJywgMHgzMDc0fSwKKwl7J2gnLCAndScsIDB4MzA3NX0sCisJeydiJywgJ3UnLCAweDMwNzZ9LAorCXsncCcsICd1JywgMHgzMDc3fSwKKwl7J2gnLCAnZScsIDB4MzA3OH0sCisJeydiJywgJ2UnLCAweDMwNzl9LAorCXsncCcsICdlJywgMHgzMDdhfSwKKwl7J2gnLCAnbycsIDB4MzA3Yn0sCisJeydiJywgJ28nLCAweDMwN2N9LAorCXsncCcsICdvJywgMHgzMDdkfSwKKwl7J20nLCAnYScsIDB4MzA3ZX0sCisJeydtJywgJ2knLCAweDMwN2Z9LAorCXsnbScsICd1JywgMHgzMDgwfSwKKwl7J20nLCAnZScsIDB4MzA4MX0sCisJeydtJywgJ28nLCAweDMwODJ9LAorCXsneScsICdBJywgMHgzMDgzfSwKKwl7J3knLCAnYScsIDB4MzA4NH0sCisJeyd5JywgJ1UnLCAweDMwODV9LAorCXsneScsICd1JywgMHgzMDg2fSwKKwl7J3knLCAnTycsIDB4MzA4N30sCisJeyd5JywgJ28nLCAweDMwODh9LAorCXsncicsICdhJywgMHgzMDg5fSwKKwl7J3InLCAnaScsIDB4MzA4YX0sCisJeydyJywgJ3UnLCAweDMwOGJ9LAorCXsncicsICdlJywgMHgzMDhjfSwKKwl7J3InLCAnbycsIDB4MzA4ZH0sCisJeyd3JywgJ0EnLCAweDMwOGV9LAorCXsndycsICdhJywgMHgzMDhmfSwKKwl7J3cnLCAnaScsIDB4MzA5MH0sCisJeyd3JywgJ2UnLCAweDMwOTF9LAorCXsndycsICdvJywgMHgzMDkyfSwKKwl7J24nLCAnNScsIDB4MzA5M30sCisJeyd2JywgJ3UnLCAweDMwOTR9LAorCXsnIicsICc1JywgMHgzMDlifSwKKwl7JzAnLCAnNScsIDB4MzA5Y30sCisJeycqJywgJzUnLCAweDMwOWR9LAorCXsnKycsICc1JywgMHgzMDllfSwKKwl7J2EnLCAnNicsIDB4MzBhMX0sCisJeydBJywgJzYnLCAweDMwYTJ9LAorCXsnaScsICc2JywgMHgzMGEzfSwKKwl7J0knLCAnNicsIDB4MzBhNH0sCisJeyd1JywgJzYnLCAweDMwYTV9LAorCXsnVScsICc2JywgMHgzMGE2fSwKKwl7J2UnLCAnNicsIDB4MzBhN30sCisJeydFJywgJzYnLCAweDMwYTh9LAorCXsnbycsICc2JywgMHgzMGE5fSwKKwl7J08nLCAnNicsIDB4MzBhYX0sCisJeydLJywgJ2EnLCAweDMwYWJ9LAorCXsnRycsICdhJywgMHgzMGFjfSwKKwl7J0snLCAnaScsIDB4MzBhZH0sCisJeydHJywgJ2knLCAweDMwYWV9LAorCXsnSycsICd1JywgMHgzMGFmfSwKKwl7J0cnLCAndScsIDB4MzBiMH0sCisJeydLJywgJ2UnLCAweDMwYjF9LAorCXsnRycsICdlJywgMHgzMGIyfSwKKwl7J0snLCAnbycsIDB4MzBiM30sCisJeydHJywgJ28nLCAweDMwYjR9LAorCXsnUycsICdhJywgMHgzMGI1fSwKKwl7J1onLCAnYScsIDB4MzBiNn0sCisJeydTJywgJ2knLCAweDMwYjd9LAorCXsnWicsICdpJywgMHgzMGI4fSwKKwl7J1MnLCAndScsIDB4MzBiOX0sCisJeydaJywgJ3UnLCAweDMwYmF9LAorCXsnUycsICdlJywgMHgzMGJifSwKKwl7J1onLCAnZScsIDB4MzBiY30sCisJeydTJywgJ28nLCAweDMwYmR9LAorCXsnWicsICdvJywgMHgzMGJlfSwKKwl7J1QnLCAnYScsIDB4MzBiZn0sCisJeydEJywgJ2EnLCAweDMwYzB9LAorCXsnVCcsICdpJywgMHgzMGMxfSwKKwl7J0QnLCAnaScsIDB4MzBjMn0sCisJeydUJywgJ1UnLCAweDMwYzN9LAorCXsnVCcsICd1JywgMHgzMGM0fSwKKwl7J0QnLCAndScsIDB4MzBjNX0sCisJeydUJywgJ2UnLCAweDMwYzZ9LAorCXsnRCcsICdlJywgMHgzMGM3fSwKKwl7J1QnLCAnbycsIDB4MzBjOH0sCisJeydEJywgJ28nLCAweDMwYzl9LAorCXsnTicsICdhJywgMHgzMGNhfSwKKwl7J04nLCAnaScsIDB4MzBjYn0sCisJeydOJywgJ3UnLCAweDMwY2N9LAorCXsnTicsICdlJywgMHgzMGNkfSwKKwl7J04nLCAnbycsIDB4MzBjZX0sCisJeydIJywgJ2EnLCAweDMwY2Z9LAorCXsnQicsICdhJywgMHgzMGQwfSwKKwl7J1AnLCAnYScsIDB4MzBkMX0sCisJeydIJywgJ2knLCAweDMwZDJ9LAorCXsnQicsICdpJywgMHgzMGQzfSwKKwl7J1AnLCAnaScsIDB4MzBkNH0sCisJeydIJywgJ3UnLCAweDMwZDV9LAorCXsnQicsICd1JywgMHgzMGQ2fSwKKwl7J1AnLCAndScsIDB4MzBkN30sCisJeydIJywgJ2UnLCAweDMwZDh9LAorCXsnQicsICdlJywgMHgzMGQ5fSwKKwl7J1AnLCAnZScsIDB4MzBkYX0sCisJeydIJywgJ28nLCAweDMwZGJ9LAorCXsnQicsICdvJywgMHgzMGRjfSwKKwl7J1AnLCAnbycsIDB4MzBkZH0sCisJeydNJywgJ2EnLCAweDMwZGV9LAorCXsnTScsICdpJywgMHgzMGRmfSwKKwl7J00nLCAndScsIDB4MzBlMH0sCisJeydNJywgJ2UnLCAweDMwZTF9LAorCXsnTScsICdvJywgMHgzMGUyfSwKKwl7J1knLCAnQScsIDB4MzBlM30sCisJeydZJywgJ2EnLCAweDMwZTR9LAorCXsnWScsICdVJywgMHgzMGU1fSwKKwl7J1knLCAndScsIDB4MzBlNn0sCisJeydZJywgJ08nLCAweDMwZTd9LAorCXsnWScsICdvJywgMHgzMGU4fSwKKwl7J1InLCAnYScsIDB4MzBlOX0sCisJeydSJywgJ2knLCAweDMwZWF9LAorCXsnUicsICd1JywgMHgzMGVifSwKKwl7J1InLCAnZScsIDB4MzBlY30sCisJeydSJywgJ28nLCAweDMwZWR9LAorCXsnVycsICdBJywgMHgzMGVlfSwKKwl7J1cnLCAnYScsIDB4MzBlZn0sCisJeydXJywgJ2knLCAweDMwZjB9LAorCXsnVycsICdlJywgMHgzMGYxfSwKKwl7J1cnLCAnbycsIDB4MzBmMn0sCisJeydOJywgJzYnLCAweDMwZjN9LAorCXsnVicsICd1JywgMHgzMGY0fSwKKwl7J0snLCAnQScsIDB4MzBmNX0sCisJeydLJywgJ0UnLCAweDMwZjZ9LAorCXsnVicsICdhJywgMHgzMGY3fSwKKwl7J1YnLCAnaScsIDB4MzBmOH0sCisJeydWJywgJ2UnLCAweDMwZjl9LAorCXsnVicsICdvJywgMHgzMGZhfSwKKwl7Jy4nLCAnNicsIDB4MzBmYn0sCisJeyctJywgJzYnLCAweDMwZmN9LAorCXsnKicsICc2JywgMHgzMGZkfSwKKwl7JysnLCAnNicsIDB4MzBmZX0sCisJeydiJywgJzQnLCAweDMxMDV9LAorCXsncCcsICc0JywgMHgzMTA2fSwKKwl7J20nLCAnNCcsIDB4MzEwN30sCisJeydmJywgJzQnLCAweDMxMDh9LAorCXsnZCcsICc0JywgMHgzMTA5fSwKKwl7J3QnLCAnNCcsIDB4MzEwYX0sCisJeyduJywgJzQnLCAweDMxMGJ9LAorCXsnbCcsICc0JywgMHgzMTBjfSwKKwl7J2cnLCAnNCcsIDB4MzEwZH0sCisJeydrJywgJzQnLCAweDMxMGV9LAorCXsnaCcsICc0JywgMHgzMTBmfSwKKwl7J2onLCAnNCcsIDB4MzExMH0sCisJeydxJywgJzQnLCAweDMxMTF9LAorCXsneCcsICc0JywgMHgzMTEyfSwKKwl7J3onLCAnaCcsIDB4MzExM30sCisJeydjJywgJ2gnLCAweDMxMTR9LAorCXsncycsICdoJywgMHgzMTE1fSwKKwl7J3InLCAnNCcsIDB4MzExNn0sCisJeyd6JywgJzQnLCAweDMxMTd9LAorCXsnYycsICc0JywgMHgzMTE4fSwKKwl7J3MnLCAnNCcsIDB4MzExOX0sCisJeydhJywgJzQnLCAweDMxMWF9LAorCXsnbycsICc0JywgMHgzMTFifSwKKwl7J2UnLCAnNCcsIDB4MzExY30sCisJeydhJywgJ2knLCAweDMxMWV9LAorCXsnZScsICdpJywgMHgzMTFmfSwKKwl7J2EnLCAndScsIDB4MzEyMH0sCisJeydvJywgJ3UnLCAweDMxMjF9LAorCXsnYScsICduJywgMHgzMTIyfSwKKwl7J2UnLCAnbicsIDB4MzEyM30sCisJeydhJywgJ04nLCAweDMxMjR9LAorCXsnZScsICdOJywgMHgzMTI1fSwKKwl7J2UnLCAncicsIDB4MzEyNn0sCisJeydpJywgJzQnLCAweDMxMjd9LAorCXsndScsICc0JywgMHgzMTI4fSwKKwl7J2knLCAndScsIDB4MzEyOX0sCisJeyd2JywgJzQnLCAweDMxMmF9LAorCXsnbicsICdHJywgMHgzMTJifSwKKwl7J2cnLCAnbicsIDB4MzEyY30sCisJeycxJywgJ2MnLCAweDMyMjB9LAorCXsnMicsICdjJywgMHgzMjIxfSwKKwl7JzMnLCAnYycsIDB4MzIyMn0sCisJeyc0JywgJ2MnLCAweDMyMjN9LAorCXsnNScsICdjJywgMHgzMjI0fSwKKwl7JzYnLCAnYycsIDB4MzIyNX0sCisJeyc3JywgJ2MnLCAweDMyMjZ9LAorCXsnOCcsICdjJywgMHgzMjI3fSwKKwl7JzknLCAnYycsIDB4MzIyOH0sCisJeycgJywgJyAnLCAweGUwMDB9LAorCXsnLycsICdjJywgMHhlMDAxfSwKKwl7J1UnLCAnQScsIDB4ZTAwMn0sCisJeydVJywgJ0InLCAweGUwMDN9LAorCXsnIicsICczJywgMHhlMDA0fSwKKwl7JyInLCAnMScsIDB4ZTAwNX0sCisJeyciJywgJyEnLCAweGUwMDZ9LAorCXsnIicsICdcJycsIDB4ZTAwN30sCisJeyciJywgJz4nLCAweGUwMDh9LAorCXsnIicsICc/JywgMHhlMDA5fSwKKwl7JyInLCAnLScsIDB4ZTAwYX0sCisJeyciJywgJygnLCAweGUwMGJ9LAorCXsnIicsICcuJywgMHhlMDBjfSwKKwl7JyInLCAnOicsIDB4ZTAwZH0sCisJeyciJywgJzAnLCAweGUwMGV9LAorCXsnIicsICciJywgMHhlMDBmfSwKKwl7JyInLCAnPCcsIDB4ZTAxMH0sCisJeyciJywgJywnLCAweGUwMTF9LAorCXsnIicsICc7JywgMHhlMDEyfSwKKwl7JyInLCAnXycsIDB4ZTAxM30sCisJeyciJywgJz0nLCAweGUwMTR9LAorCXsnIicsICcvJywgMHhlMDE1fSwKKwl7JyInLCAnaScsIDB4ZTAxNn0sCisJeyciJywgJ2QnLCAweGUwMTd9LAorCXsnIicsICdwJywgMHhlMDE4fSwKKwl7JzsnLCAnOycsIDB4ZTAxOX0sCisJeycsJywgJywnLCAweGUwMWF9LAorCXsnYicsICczJywgMHhlMDFifSwKKwl7J0MnLCAnaScsIDB4ZTAxY30sCisJeydmJywgJygnLCAweGUwMWR9LAorCXsnZScsICdkJywgMHhlMDFlfSwKKwl7J2EnLCAnbScsIDB4ZTAxZn0sCisJeydwJywgJ20nLCAweGUwMjB9LAorCXsnRicsICdsJywgMHhlMDIzfSwKKwl7J0cnLCAnRicsIDB4ZTAyNH0sCisJeyc+JywgJ1YnLCAweGUwMjV9LAorCXsnIScsICcqJywgMHhlMDI2fSwKKwl7Jz8nLCAnKicsIDB4ZTAyN30sCisJeydKJywgJzwnLCAweGUwMjh9LAorCXsnZicsICdmJywgMHhmYjAwfSwKKwl7J2YnLCAnaScsIDB4ZmIwMX0sCisJeydmJywgJ2wnLCAweGZiMDJ9LAorCXsnZicsICd0JywgMHhmYjA1fSwKKwl7J3MnLCAndCcsIDB4ZmIwNn0sCisjICAgICAgZW5kaWYgLyogRkVBVF9NQllURSAqLworCXtOVUwsIE5VTCwgTlVMfQorICAgICAgIH07CisKKyMgICAgIGVuZGlmIC8qIE9MRF9ESUdSQVBIUyAqLworCisjICAgIGVuZGlmIC8qIE1hY2ludG9zaCAqLworIyAgIGVuZGlmIC8qIEVCQ0RJQyAqLworIyAgZW5kaWYgICAgLyogIUhQVVhfRElHUkFQSFMgKi8KKyMgZW5kaWYJLyogIV9fTUlOVF9fICovCisjZW5kaWYJLyogIU1TRE9TICYmICFPUzIgKi8KKworLyoKKyAqIGhhbmRsZSBkaWdyYXBocyBhZnRlciB0eXBpbmcgYSBjaGFyYWN0ZXIKKyAqLworICAgIGludAorZG9fZGlncmFwaChjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBzdGF0aWMgaW50CWJhY2tzcGFjZWQ7CS8qIGNoYXJhY3RlciBiZWZvcmUgS19CUyAqLworICAgIHN0YXRpYyBpbnQJbGFzdGNoYXI7CS8qIGxhc3QgdHlwZWQgY2hhcmFjdGVyICovCisKKyAgICBpZiAoYyA9PSAtMSkJCS8qIGluaXQgdmFsdWVzICovCisgICAgeworCWJhY2tzcGFjZWQgPSAtMTsKKyAgICB9CisgICAgZWxzZSBpZiAocF9kZykKKyAgICB7CisJaWYgKGJhY2tzcGFjZWQgPj0gMCkKKwkgICAgYyA9IGdldGRpZ3JhcGgoYmFja3NwYWNlZCwgYywgRkFMU0UpOworCWJhY2tzcGFjZWQgPSAtMTsKKwlpZiAoKGMgPT0gS19CUyB8fCBjID09IEN0cmxfSCkgJiYgbGFzdGNoYXIgPj0gMCkKKwkgICAgYmFja3NwYWNlZCA9IGxhc3RjaGFyOworICAgIH0KKyAgICBsYXN0Y2hhciA9IGM7CisgICAgcmV0dXJuIGM7Cit9CisKKy8qCisgKiBHZXQgYSBkaWdyYXBoLiAgVXNlZCBhZnRlciB0eXBpbmcgQ1RSTC1LIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgaW4gbm9ybWFsCisgKiBtb2RlLgorICogUmV0dXJucyBjb21wb3NlZCBjaGFyYWN0ZXIsIG9yIE5VTCB3aGVuIEVTQyB3YXMgdXNlZC4KKyAqLworICAgIGludAorZ2V0X2RpZ3JhcGgoY21kbGluZSkKKyAgICBpbnQJCWNtZGxpbmU7CS8qIFRSVUUgd2hlbiBjYWxsZWQgZnJvbSB0aGUgY21kbGluZSAqLworeworICAgIGludAkJYywgY2M7CisKKyAgICArK25vX21hcHBpbmc7CisgICAgKythbGxvd19rZXlzOworICAgIGMgPSBzYWZlX3ZnZXRjKCk7CisgICAgLS1ub19tYXBwaW5nOworICAgIC0tYWxsb3dfa2V5czsKKyAgICBpZiAoYyAhPSBFU0MpCQkvKiBFU0MgY2FuY2VscyBDVFJMLUsgKi8KKyAgICB7CisJaWYgKElTX1NQRUNJQUwoYykpCS8qIGluc2VydCBzcGVjaWFsIGtleSBjb2RlICovCisJICAgIHJldHVybiBjOworCWlmIChjbWRsaW5lKQorCXsKKwkgICAgaWYgKGNoYXIyY2VsbHMoYykgPT0gMQorI2lmIGRlZmluZWQoRkVBVF9DUllQVCkgfHwgZGVmaW5lZChGRUFUX0VWQUwpCisJCSAgICAmJiBjbWRsaW5lX3N0YXIgPT0gMAorI2VuZGlmCisJCSAgICApCisJCXB1dGNtZGxpbmUoYywgVFJVRSk7CisJfQorI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJZWxzZQorCSAgICBhZGRfdG9fc2hvd2NtZChjKTsKKyNlbmRpZgorCSsrbm9fbWFwcGluZzsKKwkrK2FsbG93X2tleXM7CisJY2MgPSBzYWZlX3ZnZXRjKCk7CisJLS1ub19tYXBwaW5nOworCS0tYWxsb3dfa2V5czsKKwlpZiAoY2MgIT0gRVNDKQkgICAgLyogRVNDIGNhbmNlbHMgQ1RSTC1LICovCisJICAgIHJldHVybiBnZXRkaWdyYXBoKGMsIGNjLCBUUlVFKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTDsKK30KKworLyoKKyAqIExvb2t1cCB0aGUgcGFpciAiY2hhcjEiLCAiY2hhcjIiIGluIHRoZSBkaWdyYXBoIHRhYmxlcy4KKyAqIElmIG5vIG1hdGNoLCByZXR1cm4gImNoYXIyIi4KKyAqIElmICJtZXRhIiBpcyBUUlVFIGFuZCAiY2hhcjEiIGlzIGEgc3BhY2UsIHJldHVybiAiY2hhcjIiIHwgMHg4MC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2dldGV4YWN0ZGlncmFwaChjaGFyMSwgY2hhcjIsIG1ldGEpCisgICAgaW50CQljaGFyMTsKKyAgICBpbnQJCWNoYXIyOworICAgIGludAkJbWV0YTsKK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQlyZXR2YWwgPSAwOworICAgIGRpZ3JfVAkqZHA7CisKKyAgICBpZiAoSVNfU1BFQ0lBTChjaGFyMSkgfHwgSVNfU1BFQ0lBTChjaGFyMikpCisJcmV0dXJuIGNoYXIyOworCisgICAgLyoKKyAgICAgKiBTZWFyY2ggdXNlciBkaWdyYXBocyBmaXJzdC4KKyAgICAgKi8KKyAgICBkcCA9IChkaWdyX1QgKil1c2VyX2RpZ3JhcGhzLmdhX2RhdGE7CisgICAgZm9yIChpID0gMDsgaSA8IHVzZXJfZGlncmFwaHMuZ2FfbGVuOyArK2kpCisgICAgeworCWlmICgoaW50KWRwLT5jaGFyMSA9PSBjaGFyMSAmJiAoaW50KWRwLT5jaGFyMiA9PSBjaGFyMikKKwl7CisJICAgIHJldHZhbCA9IGRwLT5yZXN1bHQ7CisJICAgIGJyZWFrOworCX0KKwkrK2RwOworICAgIH0KKworICAgIC8qCisgICAgICogU2VhcmNoIGRlZmF1bHQgZGlncmFwaHMuCisgICAgICovCisgICAgaWYgKHJldHZhbCA9PSAwKQorICAgIHsKKwlkcCA9IGRpZ3JhcGhkZWZhdWx0OworCWZvciAoaSA9IDA7IGRwLT5jaGFyMSAhPSAwOyArK2kpCisJeworCSAgICBpZiAoKGludClkcC0+Y2hhcjEgPT0gY2hhcjEgJiYgKGludClkcC0+Y2hhcjIgPT0gY2hhcjIpCisJICAgIHsKKwkJcmV0dmFsID0gZHAtPnJlc3VsdDsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgKytkcDsKKwl9CisgICAgfQorI2lmZGVmIEZFQVRfTUJZVEUKKyMgaWZkZWYgVVNFX1VOSUNPREVfRElHUkFQSFMKKyAgICBpZiAocmV0dmFsICE9IDAgJiYgIWVuY191dGY4KQorICAgIHsKKwljaGFyX3UJICAgIGJ1Zls2XSwgKnRvOworCXZpbWNvbnZfVCAgIHZjOworCisJLyoKKwkgKiBDb252ZXJ0IHRoZSBVbmljb2RlIGRpZ3JhcGggdG8gJ2VuY29kaW5nJy4KKwkgKi8KKwlpID0gdXRmX2NoYXIyYnl0ZXMocmV0dmFsLCBidWYpOworCXJldHZhbCA9IDA7CisJdmMudmNfdHlwZSA9IENPTlZfTk9ORTsKKwlpZiAoY29udmVydF9zZXR1cCgmdmMsIChjaGFyX3UgKikidXRmLTgiLCBwX2VuYykgPT0gT0spCisJeworCSAgICB2Yy52Y19mYWlsID0gVFJVRTsKKwkgICAgdG8gPSBzdHJpbmdfY29udmVydCgmdmMsIGJ1ZiwgJmkpOworCSAgICBpZiAodG8gIT0gTlVMTCkKKwkgICAgeworCQlyZXR2YWwgPSAoKm1iX3B0cjJjaGFyKSh0byk7CisJCXZpbV9mcmVlKHRvKTsKKwkgICAgfQorCSAgICAodm9pZCljb252ZXJ0X3NldHVwKCZ2YywgTlVMTCwgTlVMTCk7CisJfQorICAgIH0KKyMgZW5kaWYKKworICAgIC8qIElnbm9yZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgd2hlbiBub3QgaW4gbXVsdGktYnl0ZSBtb2RlLiAqLworICAgIGlmICghaGFzX21ieXRlICYmIHJldHZhbCA+IDB4ZmYpCisJcmV0dmFsID0gMDsKKyNlbmRpZgorCisgICAgaWYgKHJldHZhbCA9PSAwKQkJLyogZGlncmFwaCBkZWxldGVkIG9yIG5vdCBmb3VuZCAqLworICAgIHsKKwlpZiAoY2hhcjEgPT0gJyAnICYmIG1ldGEpCS8qIDxzcGFjZT4gPGNoYXI+IC0tPiBtZXRhLWNoYXIgKi8KKwkgICAgcmV0dXJuIChjaGFyMiB8IDB4ODApOworCXJldHVybiBjaGFyMjsKKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEdldCBkaWdyYXBoLgorICogQWxsb3cgZm9yIGJvdGggY2hhcjEtY2hhcjIgYW5kIGNoYXIyLWNoYXIxCisgKi8KKyAgICBpbnQKK2dldGRpZ3JhcGgoY2hhcjEsIGNoYXIyLCBtZXRhKQorICAgIGludAljaGFyMTsKKyAgICBpbnQJY2hhcjI7CisgICAgaW50CW1ldGE7Cit7CisgICAgaW50CSAgICByZXR2YWw7CisKKyAgICBpZiAoKChyZXR2YWwgPSBnZXRleGFjdGRpZ3JhcGgoY2hhcjEsIGNoYXIyLCBtZXRhKSkgPT0gY2hhcjIpCisJICAgICYmIChjaGFyMSAhPSBjaGFyMikKKwkgICAgJiYgKChyZXR2YWwgPSBnZXRleGFjdGRpZ3JhcGgoY2hhcjIsIGNoYXIxLCBtZXRhKSkgPT0gY2hhcjEpKQorCXJldHVybiBjaGFyMjsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogQWRkIHRoZSBkaWdyYXBocyBpbiB0aGUgYXJndW1lbnQgdG8gdGhlIGRpZ3JhcGggdGFibGUuCisgKiBmb3JtYXQ6IHtjMX17YzJ9IGNoYXIge2MxfXtjMn0gY2hhciAuLi4KKyAqLworICAgIHZvaWQKK3B1dGRpZ3JhcGgoc3RyKQorICAgIGNoYXJfdSAqc3RyOworeworICAgIGludAkJY2hhcjEsIGNoYXIyLCBuOworICAgIGludAkJaTsKKyAgICBkaWdyX1QJKmRwOworCisgICAgd2hpbGUgKCpzdHIgIT0gTlVMKQorICAgIHsKKwlzdHIgPSBza2lwd2hpdGUoc3RyKTsKKwlpZiAoKnN0ciA9PSBOVUwpCisJICAgIHJldHVybjsKKwljaGFyMSA9ICpzdHIrKzsKKwljaGFyMiA9ICpzdHIrKzsKKwlpZiAoY2hhcjIgPT0gMCkKKwl7CisJICAgIEVNU0coXyhlX2ludmFyZykpOworCSAgICByZXR1cm47CisJfQorCWlmIChjaGFyMSA9PSBFU0MgfHwgY2hhcjIgPT0gRVNDKQorCXsKKwkgICAgRU1TRyhfKCJFMTA0OiBFc2NhcGUgbm90IGFsbG93ZWQgaW4gZGlncmFwaCIpKTsKKwkgICAgcmV0dXJuOworCX0KKwlzdHIgPSBza2lwd2hpdGUoc3RyKTsKKwlpZiAoIVZJTV9JU0RJR0lUKCpzdHIpKQorCXsKKwkgICAgRU1TRyhfKGVfbnVtYmVyX2V4cCkpOworCSAgICByZXR1cm47CisJfQorCW4gPSBnZXRkaWdpdHMoJnN0cik7CisKKwkvKiBJZiB0aGUgZGlncmFwaCBhbHJlYWR5IGV4aXN0cywgcmVwbGFjZSB0aGUgcmVzdWx0LiAqLworCWRwID0gKGRpZ3JfVCAqKXVzZXJfZGlncmFwaHMuZ2FfZGF0YTsKKwlmb3IgKGkgPSAwOyBpIDwgdXNlcl9kaWdyYXBocy5nYV9sZW47ICsraSkKKwl7CisJICAgIGlmICgoaW50KWRwLT5jaGFyMSA9PSBjaGFyMSAmJiAoaW50KWRwLT5jaGFyMiA9PSBjaGFyMikKKwkgICAgeworCQlkcC0+cmVzdWx0ID0gbjsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgKytkcDsKKwl9CisKKwkvKiBBZGQgYSBuZXcgZGlncmFwaCB0byB0aGUgdGFibGUuICovCisJaWYgKGkgPT0gdXNlcl9kaWdyYXBocy5nYV9sZW4pCisJeworCSAgICBpZiAoZ2FfZ3JvdygmdXNlcl9kaWdyYXBocywgMSkgPT0gT0spCisJICAgIHsKKwkJZHAgPSAoZGlncl9UICopdXNlcl9kaWdyYXBocy5nYV9kYXRhICsgdXNlcl9kaWdyYXBocy5nYV9sZW47CisJCWRwLT5jaGFyMSA9IGNoYXIxOworCQlkcC0+Y2hhcjIgPSBjaGFyMjsKKwkJZHAtPnJlc3VsdCA9IG47CisJCSsrdXNlcl9kaWdyYXBocy5nYV9sZW47CisJCS0tdXNlcl9kaWdyYXBocy5nYV9yb29tOworCSAgICB9CisJfQorICAgIH0KK30KKworICAgIHZvaWQKK2xpc3RkaWdyYXBocygpCit7CisgICAgaW50CQlpOworICAgIGRpZ3JfVAkqZHA7CisKKyAgICBtc2dfcHV0Y2hhcignXG4nKTsKKworICAgIGRwID0gZGlncmFwaGRlZmF1bHQ7CisgICAgZm9yIChpID0gMDsgZHAtPmNoYXIxICE9IE5VTCAmJiAhZ290X2ludDsgKytpKQorICAgIHsKKyNpZiBkZWZpbmVkKFVTRV9VTklDT0RFX0RJR1JBUEhTKSAmJiBkZWZpbmVkKEZFQVRfTUJZVEUpCisJZGlncl9UIHRtcDsKKworCS8qIE1heSBuZWVkIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCB0byAnZW5jb2RpbmcnLiAqLworCXRtcC5jaGFyMSA9IGRwLT5jaGFyMTsKKwl0bXAuY2hhcjIgPSBkcC0+Y2hhcjI7CisJdG1wLnJlc3VsdCA9IGdldGV4YWN0ZGlncmFwaCh0bXAuY2hhcjEsIHRtcC5jaGFyMiwgRkFMU0UpOworCWlmICh0bXAucmVzdWx0ICE9IDAgJiYgdG1wLnJlc3VsdCAhPSB0bXAuY2hhcjIKKwkJCQkJICAmJiAoaGFzX21ieXRlIHx8IHRtcC5yZXN1bHQgPD0gMjU1KSkKKwkgICAgcHJpbnRkaWdyYXBoKCZ0bXApOworI2Vsc2UKKworCWlmIChnZXRleGFjdGRpZ3JhcGgoZHAtPmNoYXIxLCBkcC0+Y2hhcjIsIEZBTFNFKSA9PSBkcC0+cmVzdWx0CisjIGlmZGVmIEZFQVRfTUJZVEUKKwkJJiYgKGhhc19tYnl0ZSB8fCBkcC0+cmVzdWx0IDw9IDI1NSkKKyMgZW5kaWYKKwkJKQorCSAgICBwcmludGRpZ3JhcGgoZHApOworI2VuZGlmCisJKytkcDsKKwl1aV9icmVha2NoZWNrKCk7CisgICAgfQorCisgICAgZHAgPSAoZGlncl9UICopdXNlcl9kaWdyYXBocy5nYV9kYXRhOworICAgIGZvciAoaSA9IDA7IGkgPCB1c2VyX2RpZ3JhcGhzLmdhX2xlbiAmJiAhZ290X2ludDsgKytpKQorICAgIHsKKwlwcmludGRpZ3JhcGgoZHApOworCXVpX2JyZWFrY2hlY2soKTsKKwkrK2RwOworICAgIH0KKyAgICBtdXN0X3JlZHJhdyA9IENMRUFSOyAgICAvKiBjbGVhciBzY3JlZW4sIGJlY2F1c2Ugc29tZSBkaWdyYXBocyBtYXkgYmUKKwkJCSAgICAgICB3cm9uZywgaW4gd2hpY2ggY2FzZSB3ZSBtZXNzZWQgdXAgU2NyZWVuTGluZXMgKi8KK30KKworICAgIHN0YXRpYyB2b2lkCitwcmludGRpZ3JhcGgoZHApCisgICAgZGlncl9UCSpkcDsKK3sKKyAgICBjaGFyX3UJYnVmWzMwXTsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBpbnQJCWxpc3Rfd2lkdGg7CisKKyAgICBpZiAoKGR5X2ZsYWdzICYgRFlfVUhFWCkKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIHx8IGhhc19tYnl0ZQorI2VuZGlmCisJICAgICkKKwlsaXN0X3dpZHRoID0gMTM7CisgICAgZWxzZQorCWxpc3Rfd2lkdGggPSAxMTsKKworICAgIGlmIChkcC0+cmVzdWx0ICE9IDApCisgICAgeworCWlmIChtc2dfY29sID4gQ29sdW1ucyAtIGxpc3Rfd2lkdGgpCisJICAgIG1zZ19wdXRjaGFyKCdcbicpOworCWlmIChtc2dfY29sKQorCSAgICB3aGlsZSAobXNnX2NvbCAlIGxpc3Rfd2lkdGggIT0gMCkKKwkJbXNnX3B1dGNoYXIoJyAnKTsKKworCXAgPSBidWY7CisJKnArKyA9IGRwLT5jaGFyMTsKKwkqcCsrID0gZHAtPmNoYXIyOworCSpwKysgPSAnICc7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICAvKiBhZGQgYSBzcGFjZSB0byBkcmF3IGEgY29tcG9zaW5nIGNoYXIgb24gKi8KKwkgICAgaWYgKGVuY191dGY4ICYmIHV0Zl9pc2NvbXBvc2luZyhkcC0+cmVzdWx0KSkKKwkJKnArKyA9ICcgJzsKKwkgICAgcCArPSAoKm1iX2NoYXIyYnl0ZXMpKGRwLT5yZXN1bHQsIHApOworCX0KKwllbHNlCisjZW5kaWYKKwkgICAgKnArKyA9IGRwLT5yZXN1bHQ7CisJaWYgKGNoYXIyY2VsbHMoZHAtPnJlc3VsdCkgPT0gMSkKKwkgICAgKnArKyA9ICcgJzsKKwlzcHJpbnRmKChjaGFyICopcCwgIiAlM2QiLCBkcC0+cmVzdWx0KTsKKwltc2dfb3V0dHJhbnMoYnVmKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBGRUFUX0RJR1JBUEhTICovCisKKyNpZiBkZWZpbmVkKEZFQVRfS0VZTUFQKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKiBzdHJ1Y3R1cmUgdXNlZCBmb3IgYl9rbWFwX2dhLmdhX2RhdGEgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgY2hhcl91CSpmcm9tOworICAgIGNoYXJfdQkqdG87Cit9IGttYXBfVDsKKworI2RlZmluZSBLTUFQX01BWExFTiAyMAkgICAgLyogbWF4aW11bSBsZW5ndGggb2YgImZyb20iIG9yICJ0byIgKi8KKworc3RhdGljIHZvaWQga2V5bWFwX3VubG9hZCBfX0FSR1MoKHZvaWQpKTsKKworLyoKKyAqIFNldCB1cCBrZXkgbWFwcGluZyB0YWJsZXMgZm9yIHRoZSAna2V5bWFwJyBvcHRpb24KKyAqLworICAgIGNoYXJfdSAqCitrZXltYXBfaW5pdCgpCit7CisgICAgY3VyYnVmLT5iX2ttYXBfc3RhdGUgJj0gfktFWU1BUF9JTklUOworCisgICAgaWYgKCpjdXJidWYtPmJfcF9rZXltYXAgPT0gTlVMKQorICAgIHsKKwkvKiBTdG9wIGFueSBhY3RpdmUga2V5bWFwIGFuZCBjbGVhciB0aGUgdGFibGUuICovCisJa2V5bWFwX3VubG9hZCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWNoYXJfdQkqYnVmOworCisJLyogU291cmNlIHRoZSBrZXltYXAgZmlsZS4gIEl0IHdpbGwgY29udGFpbiBhICI6bG9hZGtleW1hcCIgY29tbWFuZAorCSAqIHdoaWNoIHdpbGwgY2FsbCBleF9sb2Fka2V5bWFwKCkgYmVsb3cuICovCisJYnVmID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4oY3VyYnVmLT5iX3Bfa2V5bWFwKQorIyBpZmRlZiBGRUFUX01CWVRFCisJCQkJCQkgICAgICAgKyBTVFJMRU4ocF9lbmMpCisjIGVuZGlmCisJCQkJCQkgICAgICAgKyAxNCkpOworCWlmIChidWYgPT0gTlVMTCkKKwkgICAgcmV0dXJuIGVfb3V0b2ZtZW07CisKKyMgaWZkZWYgRkVBVF9NQllURQorCS8qIHRyeSBmaW5kaW5nICJrZXltYXAvJ2tleW1hcCdfJ2VuY29kaW5nJy52aW0iICBpbiAncnVudGltZXBhdGgnICovCisJc3ByaW50ZigoY2hhciAqKWJ1ZiwgImtleW1hcC8lc18lcy52aW0iLCBjdXJidWYtPmJfcF9rZXltYXAsIHBfZW5jKTsKKwlpZiAoY21kX3J1bnRpbWUoYnVmLCBGQUxTRSkgPT0gRkFJTCkKKyMgZW5kaWYKKwl7CisJICAgIC8qIHRyeSBmaW5kaW5nICJrZXltYXAvJ2tleW1hcCcudmltIiBpbiAncnVudGltZXBhdGgnICAqLworCSAgICBzcHJpbnRmKChjaGFyICopYnVmLCAia2V5bWFwLyVzLnZpbSIsIGN1cmJ1Zi0+Yl9wX2tleW1hcCk7CisJICAgIGlmIChjbWRfcnVudGltZShidWYsIEZBTFNFKSA9PSBGQUlMKQorCSAgICB7CisJCXZpbV9mcmVlKGJ1Zik7CisJCXJldHVybiAoY2hhcl91ICopTl8oIkU1NDQ6IEtleW1hcCBmaWxlIG5vdCBmb3VuZCIpOworCSAgICB9CisJfQorCXZpbV9mcmVlKGJ1Zik7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiAiOmxvYWRrZXltYXAiIGNvbW1hbmQ6IGxvYWQgdGhlIGZvbGxvd2luZyBsaW5lcyBhcyB0aGUga2V5bWFwLgorICovCisgICAgdm9pZAorZXhfbG9hZGtleW1hcChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGNoYXJfdQkqbGluZTsKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSpzOworICAgIGttYXBfVAkqa3A7CisjZGVmaW5lIEtNQVBfTExFTiAgIDIwMAkgICAgLyogbWF4IGxlbmd0aCBvZiAidG8iIGFuZCAiZnJvbSIgdG9nZXRoZXIgKi8KKyAgICBjaGFyX3UJYnVmW0tNQVBfTExFTiArIDExXTsKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpzYXZlX2NwbyA9IHBfY3BvOworCisgICAgaWYgKCFnZXRsaW5lX2VxdWFsKGVhcC0+Z2V0bGluZSwgZWFwLT5jb29raWUsIGdldHNvdXJjZWxpbmUpKQorICAgIHsKKwlFTVNHKF8oIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTdG9wIGFueSBhY3RpdmUga2V5bWFwIGFuZCBjbGVhciB0aGUgdGFibGUuCisgICAgICovCisgICAga2V5bWFwX3VubG9hZCgpOworCisgICAgY3VyYnVmLT5iX2ttYXBfc3RhdGUgPSAwOworICAgIGdhX2luaXQyKCZjdXJidWYtPmJfa21hcF9nYSwgKGludClzaXplb2Yoa21hcF9UKSwgMjApOworCisgICAgLyogU2V0ICdjcG9wdGlvbnMnIHRvICJDIiB0byBhdm9pZCBsaW5lIGNvbnRpbnVhdGlvbi4gKi8KKyAgICBwX2NwbyA9IChjaGFyX3UgKikiQyI7CisKKyAgICAvKgorICAgICAqIEdldCBlYWNoIGxpbmUgb2YgdGhlIHNvdXJjZWQgZmlsZSwgYnJlYWsgYXQgdGhlIGVuZC4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwlsaW5lID0gZWFwLT5nZXRsaW5lKDAsIGVhcC0+Y29va2llLCAwKTsKKwlpZiAobGluZSA9PSBOVUxMKQorCSAgICBicmVhazsKKworCXAgPSBza2lwd2hpdGUobGluZSk7CisJaWYgKCpwICE9ICciJyAmJiAqcCAhPSBOVUwgJiYgZ2FfZ3JvdygmY3VyYnVmLT5iX2ttYXBfZ2EsIDEpID09IE9LKQorCXsKKwkgICAga3AgPSAoa21hcF9UICopY3VyYnVmLT5iX2ttYXBfZ2EuZ2FfZGF0YSArIGN1cmJ1Zi0+Yl9rbWFwX2dhLmdhX2xlbjsKKwkgICAgcyA9IHNraXB0b3doaXRlKHApOworCSAgICBrcC0+ZnJvbSA9IHZpbV9zdHJuc2F2ZShwLCAoaW50KShzIC0gcCkpOworCSAgICBwID0gc2tpcHdoaXRlKHMpOworCSAgICBzID0gc2tpcHRvd2hpdGUocCk7CisJICAgIGtwLT50byA9IHZpbV9zdHJuc2F2ZShwLCAoaW50KShzIC0gcCkpOworCisJICAgIGlmIChrcC0+ZnJvbSA9PSBOVUxMIHx8IGtwLT50byA9PSBOVUxMCisJCSAgICB8fCBTVFJMRU4oa3AtPmZyb20pICsgU1RSTEVOKGtwLT50bykgPj0gS01BUF9MTEVOKQorCSAgICB7CisJCXZpbV9mcmVlKGtwLT5mcm9tKTsKKwkJdmltX2ZyZWUoa3AtPnRvKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJKytjdXJidWYtPmJfa21hcF9nYS5nYV9sZW47CisJCS0tY3VyYnVmLT5iX2ttYXBfZ2EuZ2Ffcm9vbTsKKwkgICAgfQorCX0KKwl2aW1fZnJlZShsaW5lKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHNldHVwICI6bG5vcmVtYXAiIHRvIG1hcCB0aGUga2V5cworICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBjdXJidWYtPmJfa21hcF9nYS5nYV9sZW47ICsraSkKKyAgICB7CisJc3ByaW50ZigoY2hhciAqKWJ1ZiwgIjxidWZmZXI+ICVzICVzIiwKKwkJCQkoKGttYXBfVCAqKWN1cmJ1Zi0+Yl9rbWFwX2dhLmdhX2RhdGEpW2ldLmZyb20sCisJCQkJICgoa21hcF9UICopY3VyYnVmLT5iX2ttYXBfZ2EuZ2FfZGF0YSlbaV0udG8pOworCSh2b2lkKWRvX21hcCgyLCBidWYsIExBTkdNQVAsIEZBTFNFKTsKKyAgICB9CisKKyAgICBwX2NwbyA9IHNhdmVfY3BvOworCisgICAgY3VyYnVmLT5iX2ttYXBfc3RhdGUgfD0gS0VZTUFQX0xPQURFRDsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBzdGF0dXNfcmVkcmF3X2N1cmJ1ZigpOworI2VuZGlmCit9CisKKy8qCisgKiBTdG9wIHVzaW5nICdrZXltYXAnLgorICovCisgICAgc3RhdGljIHZvaWQKK2tleW1hcF91bmxvYWQoKQoreworICAgIGNoYXJfdQlidWZbS01BUF9NQVhMRU4gKyAxMF07CisgICAgaW50CQlpOworICAgIGNoYXJfdQkqc2F2ZV9jcG8gPSBwX2NwbzsKKworICAgIGlmICghKGN1cmJ1Zi0+Yl9rbWFwX3N0YXRlICYgS0VZTUFQX0xPQURFRCkpCisJcmV0dXJuOworCisgICAgLyogU2V0ICdjcG9wdGlvbnMnIHRvICJDIiB0byBhdm9pZCBsaW5lIGNvbnRpbnVhdGlvbi4gKi8KKyAgICBwX2NwbyA9IChjaGFyX3UgKikiQyI7CisKKyAgICAvKiBjbGVhciB0aGUgIjpsbWFwInMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgY3VyYnVmLT5iX2ttYXBfZ2EuZ2FfbGVuOyArK2kpCisgICAgeworCXNwcmludGYoKGNoYXIgKilidWYsICI8YnVmZmVyPiAlcyIsCisJCSgoa21hcF9UICopY3VyYnVmLT5iX2ttYXBfZ2EuZ2FfZGF0YSlbaV0uZnJvbSk7CisJKHZvaWQpZG9fbWFwKDEsIGJ1ZiwgTEFOR01BUCwgRkFMU0UpOworICAgIH0KKworICAgIHBfY3BvID0gc2F2ZV9jcG87CisKKyAgICBnYV9jbGVhcigmY3VyYnVmLT5iX2ttYXBfZ2EpOworICAgIGN1cmJ1Zi0+Yl9rbWFwX3N0YXRlICY9IH5LRVlNQVBfTE9BREVEOworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIHN0YXR1c19yZWRyYXdfY3VyYnVmKCk7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIEZFQVRfS0VZTUFQICovCisKZGlmZiAtLWdpdCBhL3NyYy9kaW1tLmlkbCBiL3NyYy9kaW1tLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQ0OTY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RpbW0uaWRsCkBAIC0wLDAgKzEsNTQ0IEBACisvLystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gIE1pY3Jvc29mdCBXaW5kb3dzCisvLyAgQ29weXJpZ2h0IChDKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24sIDE5OTItMjAwMC4KKy8vCisvLyAgRmlsZTogZGltbS5pZGwKKy8vCisvLyAgQ29udGVudHM6IEFjdGl2ZUlNTSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMKKy8vCisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjcHBfcXVvdGUoIi8vPS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPSIpCitjcHBfcXVvdGUoIi8vIGRpbW0uaCIpCitjcHBfcXVvdGUoIi8vPS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPSIpCitjcHBfcXVvdGUoIi8vIChDKSBDb3B5cmlnaHQgMTk5NS0xOTk4IE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIikKK2NwcF9xdW90ZSgiLy8iKQorY3BwX3F1b3RlKCIvLyBUSElTIENPREUgQU5EIElORk9STUFUSU9OIElTIFBST1ZJREVEIFwiQVMgSVNcIiBXSVRIT1VUIFdBUlJBTlRZIE9GIikKK2NwcF9xdW90ZSgiLy8gQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyIpCitjcHBfcXVvdGUoIi8vIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORC9PUiBGSVRORVNTIEZPUiBBIikKK2NwcF9xdW90ZSgiLy8gUEFSVElDVUxBUiBQVVJQT1NFLiIpCitjcHBfcXVvdGUoIi8vPS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPSIpCitjcHBfcXVvdGUoIiIpCitjcHBfcXVvdGUoIiNwcmFnbWEgY29tbWVudChsaWIsXCJ1dWlkLmxpYlwiKSIpCitjcHBfcXVvdGUoIiIpCitjcHBfcXVvdGUoIi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKQorY3BwX3F1b3RlKCIvLyBJQWN0aXZlSU1NIEludGVyZmFjZXMuIikKK2NwcF9xdW90ZSgiIikKKworLyoKK0Rpc2FibGUgYSB3YXJuaW5nIGFib3V0IGxhY2sgb2YgcG9seW1vcnBoaWMgdHlwZSBzdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnMKKy0gdGhlIG9ubHkgcmVhc29uIHRvIGhhdmUgbGlicmFyeSBibG9jayBpbiB0aGUgZmlsZSBpcyB0byBtYWtlIG1pZGwgYWNjZXB0IGNvY2xhc3MKKyAgc3RhdGVtZW50IGFuZCBnZW5lcmF0ZSBDTFNJRCBmb3IgQ0FjdGl2ZUlNTS4KKy0gdGhlIGdlbmVyYXRlZCBkaW1tX2kuYyBoYXMgdGhlIGNsc2lkIGFuZCB0aGF0IGZpbGUgaXMgdXNlZCB0byBoYXZlIGNsc2lkIGF2YWlsYWJsZQorLSB0aGUgZGltbS50bGIgaXMgbm90IHVzZWQgYXQgYWxsCistIG9uIHRvcCBvZiBpdCwgdGhlcmUgaXMgbm8gcGxhbnMgdG8gcG9ydCB0aGUgYXBwIHVzaW5nIGRpbW0uaWRsIHRvIDY0YiBwbGF0Zm9ybS4KKyovCisvKgorICogbWlkbF9wcmFnbWEgaXMgdW5zdXBwb3J0ZWQgaW4gbWlkbCB2ZXJzaW9uIDMuMDEgc2hpcHBlZCB3aXRoIFZDNS4wLgorICogSXQgaXMgc3VwcG9ydGVkIGluIG1pZGwgdmVyc2lvbiA1LjAxIHNoaXBwZWQgd2l0aCBWQzYuMAorICogSSBjb3VsZCBub3QgcHJvZHVjZSBtZXNzYWdlIDIzOTUuIElzIHRoaXMgbmVlZGVkPyBXLkJyaXNjb2UgMjAwMS0wOC0xNAorICovCisjaWYgKF9fbWlkbCA+PSA1MDEpCittaWRsX3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlOiAyMzk1KSAvLyBwb2x5bW9ycGhpYyB0eXBlcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBUTEIKKyNlbmRpZgorCisjaWZuZGVmIERPX05PX0lNUE9SVFMKK2ltcG9ydCAidW5rbnduLmlkbCI7CisjZW5kaWYKKworWworICAgIHV1aWQoNDk1NUREMzAtQjE1OS0xMWQwLThGQ0YtMDBBQTAwNkJDQzU5KSwKKyAgICBoZWxwc3RyaW5nKCJBY3RpdmVJTU0iKSwKKyAgICBsY2lkKDB4MDAwMCksCisgICAgdmVyc2lvbigwLjEpCitdCitsaWJyYXJ5IEFjdGl2ZUlNTQoreworICAgIGltcG9ydGxpYigic3Rkb2xlMi50bGIiKTsKKworICAgIGNwcF9xdW90ZSgiI2luY2x1ZGUgPGltbS5oPiIpCisKKyAgICBjcHBfcXVvdGUoIiNpZiAwIikKKworICAgIHR5cGVkZWYgV09SRCBMQU5HSUQ7CisKKyAgICB0eXBlZGVmIHN0cnVjdAorICAgIHsKKyAgICAgICAgTFBTVFIgICBscFJlYWRpbmc7CisgICAgICAgIExQU1RSICAgbHBXb3JkOworICAgIH0gUkVHSVNURVJXT1JEQTsKKworICAgIHR5cGVkZWYgc3RydWN0CisgICAgeworICAgICAgICBMUFdTVFIgICBscFJlYWRpbmc7CisgICAgICAgIExQV1NUUiAgIGxwV29yZDsKKyAgICB9IFJFR0lTVEVSV09SRFc7CisKKyAgICAjZGVmaW5lIExGX0ZBQ0VTSVpFICAgICAgICAgMzIKKworICAgIHR5cGVkZWYgc3RydWN0CisgICAgeworICAgICAgICBMT05HICAgICAgbGZIZWlnaHQ7CisgICAgICAgIExPTkcgICAgICBsZldpZHRoOworICAgICAgICBMT05HICAgICAgbGZFc2NhcGVtZW50OworICAgICAgICBMT05HICAgICAgbGZPcmllbnRhdGlvbjsKKyAgICAgICAgTE9ORyAgICAgIGxmV2VpZ2h0OworICAgICAgICBCWVRFICAgICAgbGZJdGFsaWM7CisgICAgICAgIEJZVEUgICAgICBsZlVuZGVybGluZTsKKyAgICAgICAgQllURSAgICAgIGxmU3RyaWtlT3V0OworICAgICAgICBCWVRFICAgICAgbGZDaGFyU2V0OworICAgICAgICBCWVRFICAgICAgbGZPdXRQcmVjaXNpb247CisgICAgICAgIEJZVEUgICAgICBsZkNsaXBQcmVjaXNpb247CisgICAgICAgIEJZVEUgICAgICBsZlF1YWxpdHk7CisgICAgICAgIEJZVEUgICAgICBsZlBpdGNoQW5kRmFtaWx5OworICAgICAgICBDSEFSICAgICAgbGZGYWNlTmFtZVtMRl9GQUNFU0laRV07CisgICAgfSBMT0dGT05UQTsKKworICAgIHR5cGVkZWYgc3RydWN0CisgICAgeworICAgICAgICBMT05HICAgICAgbGZIZWlnaHQ7CisgICAgICAgIExPTkcgICAgICBsZldpZHRoOworICAgICAgICBMT05HICAgICAgbGZFc2NhcGVtZW50OworICAgICAgICBMT05HICAgICAgbGZPcmllbnRhdGlvbjsKKyAgICAgICAgTE9ORyAgICAgIGxmV2VpZ2h0OworICAgICAgICBCWVRFICAgICAgbGZJdGFsaWM7CisgICAgICAgIEJZVEUgICAgICBsZlVuZGVybGluZTsKKyAgICAgICAgQllURSAgICAgIGxmU3RyaWtlT3V0OworICAgICAgICBCWVRFICAgICAgbGZDaGFyU2V0OworICAgICAgICBCWVRFICAgICAgbGZPdXRQcmVjaXNpb247CisgICAgICAgIEJZVEUgICAgICBsZkNsaXBQcmVjaXNpb247CisgICAgICAgIEJZVEUgICAgICBsZlF1YWxpdHk7CisgICAgICAgIEJZVEUgICAgICBsZlBpdGNoQW5kRmFtaWx5OworICAgICAgICBXQ0hBUiAgICAgbGZGYWNlTmFtZVtMRl9GQUNFU0laRV07CisgICAgfSBMT0dGT05UVzsKKworICAgIHR5cGVkZWYgRFdPUkQgICAgIEhJTUM7CisgICAgdHlwZWRlZiBEV09SRCAgICAgSElNQ0M7CisKKyAgICB0eXBlZGVmIHN0cnVjdAorICAgIHsKKyAgICAgICAgRFdPUkQgZHdJbmRleDsKKyAgICAgICAgRFdPUkQgZHdTdHlsZTsKKyAgICAgICAgUE9JTlQgcHRDdXJyZW50UG9zOworICAgICAgICBSRUNUICByY0FyZWE7CisgICAgfSBDQU5ESURBVEVGT1JNOworCisgICAgdHlwZWRlZiBzdHJ1Y3QKKyAgICB7CisgICAgICAgIERXT1JEIGR3U3R5bGU7CisgICAgICAgIFBPSU5UIHB0Q3VycmVudFBvczsKKyAgICAgICAgUkVDVCAgcmNBcmVhOworICAgIH0gQ09NUE9TSVRJT05GT1JNOworCisgICAgdHlwZWRlZiBzdHJ1Y3QKKyAgICB7CisgICAgICAgIERXT1JEIGR3U2l6ZTsKKyAgICAgICAgRFdPUkQgZHdTdHlsZTsKKyAgICAgICAgRFdPUkQgZHdDb3VudDsKKyAgICAgICAgRFdPUkQgZHdTZWxlY3Rpb247CisgICAgICAgIERXT1JEIGR3UGFnZVN0YXJ0OworICAgICAgICBEV09SRCBkd1BhZ2VTaXplOworICAgICAgICBEV09SRCBkd09mZnNldFsxXTsKKyAgICB9IENBTkRJREFURUxJU1Q7CisKKyAgICAjZGVmaW5lIFNUWUxFX0RFU0NSSVBUSU9OX1NJWkUgIDMyCisKKyAgICB0eXBlZGVmIHN0cnVjdAorICAgIHsKKyAgICAgICAgRFdPUkQgICAgICAgZHdTdHlsZTsKKyAgICAgICAgQ0hBUiAgICAgICAgc3pEZXNjcmlwdGlvbltTVFlMRV9ERVNDUklQVElPTl9TSVpFXTsKKyAgICB9IFNUWUxFQlVGQTsKKworICAgIHR5cGVkZWYgc3RydWN0CisgICAgeworICAgICAgICBEV09SRCAgICAgICBkd1N0eWxlOworICAgICAgICBXQ0hBUiAgICAgICBzekRlc2NyaXB0aW9uW1NUWUxFX0RFU0NSSVBUSU9OX1NJWkVdOworICAgIH0gU1RZTEVCVUZXOworCisgICAgdHlwZWRlZiBXT1JEIEFUT007CisKKyAgICBjcHBfcXVvdGUoIiNlbmRpZiIpCisKKyAgICBjcHBfcXVvdGUoIiNpZiAoV0lOVkVSIDwgMHgwNDBBKSIpCisKKyAgICAjZGVmaW5lIElNRU1FTlVJVEVNX1NUUklOR19TSVpFIDgwCisKKyAgICB0eXBlZGVmIHN0cnVjdAorICAgIHsKKyAgICAgICAgVUlOVCAgICAgICAgY2JTaXplOworICAgICAgICBVSU5UICAgICAgICBmVHlwZTsKKyAgICAgICAgVUlOVCAgICAgICAgZlN0YXRlOworICAgICAgICBVSU5UICAgICAgICB3SUQ7CisgICAgICAgIEhCSVRNQVAgICAgIGhibXBDaGVja2VkOworICAgICAgICBIQklUTUFQICAgICBoYm1wVW5jaGVja2VkOworICAgICAgICBEV09SRCAgICAgICBkd0l0ZW1EYXRhOworICAgICAgICBDSEFSICAgICAgICBzelN0cmluZ1tJTUVNRU5VSVRFTV9TVFJJTkdfU0laRV07CisgICAgICAgIEhCSVRNQVAgICAgIGhibXBJdGVtOworICAgIH0gSU1FTUVOVUlURU1JTkZPQTsKKworICAgIHR5cGVkZWYgc3RydWN0CisgICAgeworICAgICAgICBVSU5UICAgICAgICBjYlNpemU7CisgICAgICAgIFVJTlQgICAgICAgIGZUeXBlOworICAgICAgICBVSU5UICAgICAgICBmU3RhdGU7CisgICAgICAgIFVJTlQgICAgICAgIHdJRDsKKyAgICAgICAgSEJJVE1BUCAgICAgaGJtcENoZWNrZWQ7CisgICAgICAgIEhCSVRNQVAgICAgIGhibXBVbmNoZWNrZWQ7CisgICAgICAgIERXT1JEICAgICAgIGR3SXRlbURhdGE7CisgICAgICAgIFdDSEFSICAgICAgIHN6U3RyaW5nW0lNRU1FTlVJVEVNX1NUUklOR19TSVpFXTsKKyAgICAgICAgSEJJVE1BUCAgICAgaGJtcEl0ZW07CisgICAgfSBJTUVNRU5VSVRFTUlORk9XOworCisgICAgY3BwX3F1b3RlKCIjZW5kaWYiKQorCisgICAgY3BwX3F1b3RlKCIjaWZuZGVmIF9EREtJTU1fSF8iKQorCisgICAgdHlwZWRlZiBzdHJ1Y3QKKyAgICB7CisgICAgICAgIEhXTkQgICAgICAgICAgICAgICAgaFduZDsKKyAgICAgICAgQk9PTCAgICAgICAgICAgICAgICBmT3BlbjsKKyAgICAgICAgUE9JTlQgICAgICAgICAgICAgICBwdFN0YXR1c1duZFBvczsKKyAgICAgICAgUE9JTlQgICAgICAgICAgICAgICBwdFNvZnRLYmRQb3M7CisgICAgICAgIERXT1JEICAgICAgICAgICAgICAgZmR3Q29udmVyc2lvbjsKKyAgICAgICAgRFdPUkQgICAgICAgICAgICAgICBmZHdTZW50ZW5jZTsKKyAgICAgICAgdW5pb24KKyAgICAgICAgeworICAgICAgICAgICAgTE9HRk9OVEEgICAgICAgIEE7CisgICAgICAgICAgICBMT0dGT05UVyAgICAgICAgVzsKKyAgICAgICAgfSBsZkZvbnQ7CisgICAgICAgIENPTVBPU0lUSU9ORk9STSAgICAgY2ZDb21wRm9ybTsKKyAgICAgICAgQ0FORElEQVRFRk9STSAgICAgICBjZkNhbmRGb3JtWzRdOworICAgICAgICBISU1DQyAgICAgICAgICAgICAgIGhDb21wU3RyOworICAgICAgICBISU1DQyAgICAgICAgICAgICAgIGhDYW5kSW5mbzsKKyAgICAgICAgSElNQ0MgICAgICAgICAgICAgICBoR3VpZGVMaW5lOworICAgICAgICBISU1DQyAgICAgICAgICAgICAgIGhQcml2YXRlOworICAgICAgICBEV09SRCAgICAgICAgICAgICAgIGR3TnVtTXNnQnVmOworICAgICAgICBISU1DQyAgICAgICAgICAgICAgIGhNc2dCdWY7CisgICAgICAgIERXT1JEICAgICAgICAgICAgICAgZmR3SW5pdDsKKyAgICAgICAgRFdPUkQgICAgICAgICAgICAgICBkd1Jlc2VydmVbM107CisgICAgfSBJTlBVVENPTlRFWFQ7CisKKyAgICB0eXBlZGVmIHN0cnVjdAorICAgIHsKKyAgICAgICAgRFdPUkQgICAgICAgZHdQcml2YXRlRGF0YVNpemU7CisgICAgICAgIERXT1JEICAgICAgIGZkd1Byb3BlcnR5OworICAgICAgICBEV09SRCAgICAgICBmZHdDb252ZXJzaW9uQ2FwczsKKyAgICAgICAgRFdPUkQgICAgICAgZmR3U2VudGVuY2VDYXBzOworICAgICAgICBEV09SRCAgICAgICBmZHdVSUNhcHM7CisgICAgICAgIERXT1JEICAgICAgIGZkd1NDU0NhcHM7CisgICAgICAgIERXT1JEICAgICAgIGZkd1NlbGVjdENhcHM7CisgICAgfSBJTUVJTkZPOworCisgICAgY3BwX3F1b3RlKCIjZW5kaWYiKQorCisgICAgWworICAgICAgb2JqZWN0LAorICAgICAgdXVpZCgwOEMwMzQxMi1GOTZCLTExZDAtQTQ3NS0wMEFBMDA2QkNDNTkpLAorICAgICAgcG9pbnRlcl9kZWZhdWx0KHVuaXF1ZSkKKyAgICBdCisgICAgaW50ZXJmYWNlIElFbnVtUmVnaXN0ZXJXb3JkQSA6IElVbmtub3duCisgICAgeworICAgICAgICBIUkVTVUxUIENsb25lKFtvdXRdIElFbnVtUmVnaXN0ZXJXb3JkQSAqKnBwRW51bSk7CisgICAgICAgIEhSRVNVTFQgTmV4dChbaW5dIFVMT05HIHVsQ291bnQsIFtvdXRdIFJFR0lTVEVSV09SREEgKnJnUmVnaXN0ZXJXb3JkLCBbb3V0XSBVTE9ORyAqcGNGZXRjaGVkKTsKKyAgICAgICAgSFJFU1VMVCBSZXNldCgpOworICAgICAgICBIUkVTVUxUIFNraXAoW2luXSBVTE9ORyB1bENvdW50KTsKKyAgICB9OworCisgICAgWworICAgICAgb2JqZWN0LAorICAgICAgdXVpZCg0OTU1REQzMS1CMTU5LTExZDAtOEZDRi0wMEFBMDA2QkNDNTkpLAorICAgICAgcG9pbnRlcl9kZWZhdWx0KHVuaXF1ZSkKKyAgICBdCisgICAgaW50ZXJmYWNlIElFbnVtUmVnaXN0ZXJXb3JkVyA6IElVbmtub3duCisgICAgeworICAgICAgICBIUkVTVUxUIENsb25lKFtvdXRdIElFbnVtUmVnaXN0ZXJXb3JkVyAqKnBwRW51bSk7CisgICAgICAgIEhSRVNVTFQgTmV4dChbaW5dIFVMT05HIHVsQ291bnQsIFtvdXRdIFJFR0lTVEVSV09SRFcgKnJnUmVnaXN0ZXJXb3JkLCBbb3V0XSBVTE9ORyAqcGNGZXRjaGVkKTsKKyAgICAgICAgSFJFU1VMVCBSZXNldCgpOworICAgICAgICBIUkVTVUxUIFNraXAoW2luXSBVTE9ORyB1bENvdW50KTsKKyAgICB9OworCisKKyAgICBbCisgICAgICBvYmplY3QsCisgICAgICB1dWlkKDA5YjVlYWIwLWY5OTctMTFkMS05M2Q0LTAwNjBiMDY3Yjg2ZSksCisgICAgICBwb2ludGVyX2RlZmF1bHQodW5pcXVlKQorICAgIF0KKyAgICBpbnRlcmZhY2UgSUVudW1JbnB1dENvbnRleHQgOiBJVW5rbm93bgorICAgIHsKKyAgICAgICAgSFJFU1VMVCBDbG9uZShbb3V0XSBJRW51bUlucHV0Q29udGV4dCAqKnBwRW51bSk7CisgICAgICAgIEhSRVNVTFQgTmV4dChbaW5dIFVMT05HIHVsQ291bnQsIFtvdXRdIEhJTUMgKnJnSW5wdXRDb250ZXh0LCBbb3V0XSBVTE9ORyAqcGNGZXRjaGVkKTsKKyAgICAgICAgSFJFU1VMVCBSZXNldCgpOworICAgICAgICBIUkVTVUxUIFNraXAoW2luXSBVTE9ORyB1bENvdW50KTsKKyAgICB9OworCisKKyAgICBbCisgICAgICBvYmplY3QsCisgICAgICB1dWlkKGIzNDU4MDgyLWJkMDAtMTFkMS05MzliLTAwNjBiMDY3Yjg2ZSksCisgICAgICBwb2ludGVyX2RlZmF1bHQodW5pcXVlKQorICAgIF0KKyAgICBpbnRlcmZhY2UgSUFjdGl2ZUlNTVJlZ2lzdHJhciA6IElVbmtub3duCisgICAgeworICAgICAgICBIUkVTVUxUIFJlZ2lzdGVySU1FKFtpbl0gUkVGQ0xTSUQgcmNsc2lkLCBbaW5dIExBTkdJRCBsZ2lkLCBbaW5dIExQQ1dTVFIgcHN6SWNvbkZpbGUsIFtpbl0gTFBDV1NUUiBwc3pEZXNjKTsKKyAgICAgICAgSFJFU1VMVCBVbnJlZ2lzdGVySU1FKFtpbl0gUkVGQ0xTSUQgcmNsc2lkKTsKKyAgICB9OworCisgICAgWworICAgICAgb2JqZWN0LAorICAgICAgdXVpZChiNWNmMmNmYS04YWViLTExZDEtOTM2NC0wMDYwYjA2N2I4NmUpLAorICAgICAgcG9pbnRlcl9kZWZhdWx0KHVuaXF1ZSkKKyAgICBdCisgICAgaW50ZXJmYWNlIElBY3RpdmVJTU1NZXNzYWdlUHVtcE93bmVyIDogSVVua25vd24KKyAgICB7CisgICAgICAgIEhSRVNVTFQgU3RhcnQoKTsKKyAgICAgICAgSFJFU1VMVCBFbmQoKTsKKyAgICAgICAgSFJFU1VMVCBPblRyYW5zbGF0ZU1lc3NhZ2UoW2luXSBjb25zdCBNU0cgKnBNc2cpOworICAgICAgICBIUkVTVUxUIFBhdXNlKFtvdXRdIERXT1JEICpwZHdDb29raWUpOworICAgICAgICBIUkVTVUxUIFJlc3VtZShbaW5dIERXT1JEIGR3Q29va2llKTsKKyAgICB9CisKKyAgICBbCisgICAgICBvYmplY3QsCisgICAgICB1dWlkKDA4YzBlMDQwLTYyZDEtMTFkMS05MzI2LTAwNjBiMDY3Yjg2ZSksCisgICAgICBwb2ludGVyX2RlZmF1bHQodW5pcXVlKQorICAgIF0KKyAgICBpbnRlcmZhY2UgSUFjdGl2ZUlNTUFwcCA6IElVbmtub3duCisgICAgeworICAgICAgICBIUkVTVUxUIEFzc29jaWF0ZUNvbnRleHQoW2luXSBIV05EIGhXbmQsIFtpbl0gSElNQyBoSU1FLCBbb3V0XSBISU1DICpwaFByZXYpOworICAgICAgICBIUkVTVUxUIENvbmZpZ3VyZUlNRUEoW2luXSBIS0wgaEtMLCBbaW5dIEhXTkQgaFduZCwgW2luXSBEV09SRCBkd01vZGUsIFtpbl0gUkVHSVNURVJXT1JEQSAqcERhdGEpOworICAgICAgICBIUkVTVUxUIENvbmZpZ3VyZUlNRVcoW2luXSBIS0wgaEtMLCBbaW5dIEhXTkQgaFduZCwgW2luXSBEV09SRCBkd01vZGUsIFtpbl0gUkVHSVNURVJXT1JEVyAqcERhdGEpOworICAgICAgICBIUkVTVUxUIENyZWF0ZUNvbnRleHQoW291dF0gSElNQyAqcGhJTUMpOworICAgICAgICBIUkVTVUxUIERlc3Ryb3lDb250ZXh0KFtpbl0gSElNQyBoSU1FKTsKKyAgICAgICAgSFJFU1VMVCBFbnVtUmVnaXN0ZXJXb3JkQShbaW5dIEhLTCBoS0wsIFtpbl0gTFBTVFIgc3pSZWFkaW5nLCBbaW5dIERXT1JEIGR3U3R5bGUsIFtpbl0gTFBTVFIgc3pSZWdpc3RlciwgW2luXSBMUFZPSUQgcERhdGEsIFtvdXRdIElFbnVtUmVnaXN0ZXJXb3JkQSAqKnBFbnVtKTsKKyAgICAgICAgSFJFU1VMVCBFbnVtUmVnaXN0ZXJXb3JkVyhbaW5dIEhLTCBoS0wsIFtpbl0gTFBXU1RSIHN6UmVhZGluZywgW2luXSBEV09SRCBkd1N0eWxlLCBbaW5dIExQV1NUUiBzelJlZ2lzdGVyLCBbaW5dIExQVk9JRCBwRGF0YSwgW291dF0gSUVudW1SZWdpc3RlcldvcmRXICoqcEVudW0pOworICAgICAgICBIUkVTVUxUIEVzY2FwZUEoW2luXSBIS0wgaEtMLCBbaW5dIEhJTUMgaElNQywgW2luXSBVSU5UIHVFc2NhcGUsIFtpbiwgb3V0XSBMUFZPSUQgcERhdGEsIFtvdXRdIExSRVNVTFQgKnBsUmVzdWx0KTsKKyAgICAgICAgSFJFU1VMVCBFc2NhcGVXKFtpbl0gSEtMIGhLTCwgW2luXSBISU1DIGhJTUMsIFtpbl0gVUlOVCB1RXNjYXBlLCBbaW4sIG91dF0gTFBWT0lEIHBEYXRhLCBbb3V0XSBMUkVTVUxUICpwbFJlc3VsdCk7CisgICAgICAgIEhSRVNVTFQgR2V0Q2FuZGlkYXRlTGlzdEEoW2luXSBISU1DIGhJTUMsIFtpbl0gRFdPUkQgZHdJbmRleCwgW2luXSBVSU5UIHVCdWZMZW4sIFtvdXRdIENBTkRJREFURUxJU1QgKnBDYW5kTGlzdCwgW291dF0gVUlOVCAqcHVDb3BpZWQpOworICAgICAgICBIUkVTVUxUIEdldENhbmRpZGF0ZUxpc3RXKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3SW5kZXgsIFtpbl0gVUlOVCB1QnVmTGVuLCBbb3V0XSBDQU5ESURBVEVMSVNUICpwQ2FuZExpc3QsIFtvdXRdIFVJTlQgKnB1Q29waWVkKTsKKyAgICAgICAgSFJFU1VMVCBHZXRDYW5kaWRhdGVMaXN0Q291bnRBKFtpbl0gSElNQyBoSU1DLCBbb3V0XSBEV09SRCAqcGR3TGlzdFNpemUsIFtvdXRdIERXT1JEICpwZHdCdWZMZW4pOworICAgICAgICBIUkVTVUxUIEdldENhbmRpZGF0ZUxpc3RDb3VudFcoW2luXSBISU1DIGhJTUMsIFtvdXRdIERXT1JEICpwZHdMaXN0U2l6ZSwgW291dF0gRFdPUkQgKnBkd0J1Zkxlbik7CisgICAgICAgIEhSRVNVTFQgR2V0Q2FuZGlkYXRlV2luZG93KFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3SW5kZXgsIFtvdXRdIENBTkRJREFURUZPUk0gKnBDYW5kaWRhdGUpOworICAgICAgICBIUkVTVUxUIEdldENvbXBvc2l0aW9uRm9udEEoW2luXSBISU1DIGhJTUMsIFtvdXRdIExPR0ZPTlRBICpwbGYpOworICAgICAgICBIUkVTVUxUIEdldENvbXBvc2l0aW9uRm9udFcoW2luXSBISU1DIGhJTUMsIFtvdXRdIExPR0ZPTlRXICpwbGYpOworICAgICAgICBIUkVTVUxUIEdldENvbXBvc2l0aW9uU3RyaW5nQShbaW5dIEhJTUMgaElNQywgW2luXSBEV09SRCBkd0luZGV4LCBbaW5dIERXT1JEIGR3QnVmTGVuLCBbb3V0XSBMT05HICpwbENvcGllZCwgW291dF0gTFBWT0lEIHBCdWYpOworICAgICAgICBIUkVTVUxUIEdldENvbXBvc2l0aW9uU3RyaW5nVyhbaW5dIEhJTUMgaElNQywgW2luXSBEV09SRCBkd0luZGV4LCBbaW5dIERXT1JEIGR3QnVmTGVuLCBbb3V0XSBMT05HICpwbENvcGllZCwgW291dF0gTFBWT0lEIHBCdWYpOworICAgICAgICBIUkVTVUxUIEdldENvbXBvc2l0aW9uV2luZG93KFtpbl0gSElNQyBoSU1DLCBbb3V0XSBDT01QT1NJVElPTkZPUk0gKnBDb21wRm9ybSk7CisgICAgICAgIEhSRVNVTFQgR2V0Q29udGV4dChbaW5dIEhXTkQgaFduZCwgW291dF0gSElNQyAqcGhJTUMpOworICAgICAgICBIUkVTVUxUIEdldENvbnZlcnNpb25MaXN0QShbaW5dIEhLTCBoS0wsIFtpbl0gSElNQyBoSU1DLCBbaW5dIExQU1RSIHBTcmMsIFtpbl0gVUlOVCB1QnVmTGVuLCBbaW5dIFVJTlQgdUZsYWcsIFtvdXRdIENBTkRJREFURUxJU1QgKnBEc3QsIFtvdXRdIFVJTlQgKnB1Q29waWVkKTsKKyAgICAgICAgSFJFU1VMVCBHZXRDb252ZXJzaW9uTGlzdFcoW2luXSBIS0wgaEtMLCBbaW5dIEhJTUMgaElNQywgW2luXSBMUFdTVFIgcFNyYywgW2luXSBVSU5UIHVCdWZMZW4sIFtpbl0gVUlOVCB1RmxhZywgW291dF0gQ0FORElEQVRFTElTVCAqcERzdCwgW291dF0gVUlOVCAqcHVDb3BpZWQpOworICAgICAgICBIUkVTVUxUIEdldENvbnZlcnNpb25TdGF0dXMoW2luXSBISU1DIGhJTUMsIFtvdXRdIERXT1JEICpwZmR3Q29udmVyc2lvbiwgW291dF0gRFdPUkQgKnBmZHdTZW50ZW5jZSk7CisgICAgICAgIEhSRVNVTFQgR2V0RGVmYXVsdElNRVduZChbaW5dIEhXTkQgaFduZCwgW291dF0gSFdORCAqcGhEZWZXbmQpOworICAgICAgICBIUkVTVUxUIEdldERlc2NyaXB0aW9uQShbaW5dIEhLTCBoS0wsIFtpbl0gVUlOVCB1QnVmTGVuLCBbb3V0XSBMUFNUUiBzekRlc2NyaXB0aW9uLCBbb3V0XSBVSU5UICpwdUNvcGllZCk7CisgICAgICAgIEhSRVNVTFQgR2V0RGVzY3JpcHRpb25XKFtpbl0gSEtMIGhLTCwgW2luXSBVSU5UIHVCdWZMZW4sIFtvdXRdIExQV1NUUiBzekRlc2NyaXB0aW9uLCBbb3V0XSBVSU5UICpwdUNvcGllZCk7CisgICAgICAgIEhSRVNVTFQgR2V0R3VpZGVMaW5lQShbaW5dIEhJTUMgaElNQywgW2luXSBEV09SRCBkd0luZGV4LCBbaW5dIERXT1JEIGR3QnVmTGVuLCBbb3V0XSBMUFNUUiBwQnVmLCBbb3V0XSBEV09SRCAqcGR3UmVzdWx0KTsKKyAgICAgICAgSFJFU1VMVCBHZXRHdWlkZUxpbmVXKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3SW5kZXgsIFtpbl0gRFdPUkQgZHdCdWZMZW4sIFtvdXRdIExQV1NUUiBwQnVmLCBbb3V0XSBEV09SRCAqcGR3UmVzdWx0KTsKKyAgICAgICAgSFJFU1VMVCBHZXRJTUVGaWxlTmFtZUEoW2luXSBIS0wgaEtMLCBbaW5dIFVJTlQgdUJ1ZkxlbiwgW291dF0gTFBTVFIgc3pGaWxlTmFtZSwgW291dF0gVUlOVCAqcHVDb3BpZWQpOworICAgICAgICBIUkVTVUxUIEdldElNRUZpbGVOYW1lVyhbaW5dIEhLTCBoS0wsIFtpbl0gVUlOVCB1QnVmTGVuLCBbb3V0XSBMUFdTVFIgc3pGaWxlTmFtZSwgW291dF0gVUlOVCAqcHVDb3BpZWQpOworICAgICAgICBIUkVTVUxUIEdldE9wZW5TdGF0dXMoW2luXSBISU1DIGhJTUMpOworICAgICAgICBIUkVTVUxUIEdldFByb3BlcnR5KFtpbl0gSEtMIGhLTCwgW2luXSBEV09SRCBmZHdJbmRleCwgW291dF0gRFdPUkQgKnBkd1Byb3BlcnR5KTsKKyAgICAgICAgSFJFU1VMVCBHZXRSZWdpc3RlcldvcmRTdHlsZUEoW2luXSBIS0wgaEtMLCBbaW5dIFVJTlQgbkl0ZW0sIFtvdXRdIFNUWUxFQlVGQSAqcFN0eWxlQnVmLCBbb3V0XSBVSU5UICpwdUNvcGllZCk7CisgICAgICAgIEhSRVNVTFQgR2V0UmVnaXN0ZXJXb3JkU3R5bGVXKFtpbl0gSEtMIGhLTCwgW2luXSBVSU5UIG5JdGVtLCBbb3V0XSBTVFlMRUJVRlcgKnBTdHlsZUJ1ZiwgW291dF0gVUlOVCAqcHVDb3BpZWQpOworICAgICAgICBIUkVTVUxUIEdldFN0YXR1c1dpbmRvd1BvcyhbaW5dIEhJTUMgaElNQywgW291dF0gUE9JTlQgKnBwdFBvcyk7CisgICAgICAgIEhSRVNVTFQgR2V0VmlydHVhbEtleShbaW5dIEhXTkQgaFduZCwgW291dF0gVUlOVCAqcHVWaXJ0dWFsS2V5KTsKKyAgICAgICAgSFJFU1VMVCBJbnN0YWxsSU1FQShbaW5dIExQU1RSIHN6SU1FRmlsZU5hbWUsIFtpbl0gTFBTVFIgc3pMYXlvdXRUZXh0LCBbb3V0XSBIS0wgKnBoS0wpOworICAgICAgICBIUkVTVUxUIEluc3RhbGxJTUVXKFtpbl0gTFBXU1RSIHN6SU1FRmlsZU5hbWUsIFtpbl0gTFBXU1RSIHN6TGF5b3V0VGV4dCwgW291dF0gSEtMICpwaEtMKTsKKyAgICAgICAgSFJFU1VMVCBJc0lNRShbaW5dIEhLTCBoS0wpOworICAgICAgICBIUkVTVUxUIElzVUlNZXNzYWdlQShbaW5dIEhXTkQgaFduZElNRSwgW2luXSBVSU5UIG1zZywgW2luXSBXUEFSQU0gd1BhcmFtLCBbaW5dIExQQVJBTSBsUGFyYW0pOworICAgICAgICBIUkVTVUxUIElzVUlNZXNzYWdlVyhbaW5dIEhXTkQgaFduZElNRSwgW2luXSBVSU5UIG1zZywgW2luXSBXUEFSQU0gd1BhcmFtLCBbaW5dIExQQVJBTSBsUGFyYW0pOworICAgICAgICBIUkVTVUxUIE5vdGlmeUlNRShbaW5dIEhJTUMgaElNQywgW2luXSBEV09SRCBkd0FjdGlvbiwgW2luXSBEV09SRCBkd0luZGV4LCBbaW5dIERXT1JEIGR3VmFsdWUpOworICAgICAgICBIUkVTVUxUIFJlZ2lzdGVyV29yZEEoW2luXSBIS0wgaEtMLCBbaW5dIExQU1RSIHN6UmVhZGluZywgW2luXSBEV09SRCBkd1N0eWxlLCBbaW5dIExQU1RSIHN6UmVnaXN0ZXIpOworICAgICAgICBIUkVTVUxUIFJlZ2lzdGVyV29yZFcoW2luXSBIS0wgaEtMLCBbaW5dIExQV1NUUiBzelJlYWRpbmcsIFtpbl0gRFdPUkQgZHdTdHlsZSwgW2luXSBMUFdTVFIgc3pSZWdpc3Rlcik7CisgICAgICAgIEhSRVNVTFQgUmVsZWFzZUNvbnRleHQoW2luXSBIV05EIGhXbmQsIFtpbl0gSElNQyBoSU1DKTsKKyAgICAgICAgSFJFU1VMVCBTZXRDYW5kaWRhdGVXaW5kb3coW2luXSBISU1DIGhJTUMsIFtpbl0gQ0FORElEQVRFRk9STSAqcENhbmRpZGF0ZSk7CisgICAgICAgIEhSRVNVTFQgU2V0Q29tcG9zaXRpb25Gb250QShbaW5dIEhJTUMgaElNQywgW2luXSBMT0dGT05UQSAqcGxmKTsKKyAgICAgICAgSFJFU1VMVCBTZXRDb21wb3NpdGlvbkZvbnRXKFtpbl0gSElNQyBoSU1DLCBbaW5dIExPR0ZPTlRXICpwbGYpOworICAgICAgICBIUkVTVUxUIFNldENvbXBvc2l0aW9uU3RyaW5nQShbaW5dIEhJTUMgaElNQywgW2luXSBEV09SRCBkd0luZGV4LCBbaW5dIExQVk9JRCBwQ29tcCwgW2luXSBEV09SRCBkd0NvbXBMZW4sIFtpbl0gTFBWT0lEIHBSZWFkLCBbaW5dIERXT1JEIGR3UmVhZExlbik7CisgICAgICAgIEhSRVNVTFQgU2V0Q29tcG9zaXRpb25TdHJpbmdXKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3SW5kZXgsIFtpbl0gTFBWT0lEIHBDb21wLCBbaW5dIERXT1JEIGR3Q29tcExlbiwgW2luXSBMUFZPSUQgcFJlYWQsIFtpbl0gRFdPUkQgZHdSZWFkTGVuKTsKKyAgICAgICAgSFJFU1VMVCBTZXRDb21wb3NpdGlvbldpbmRvdyhbaW5dIEhJTUMgaElNQywgW2luXSBDT01QT1NJVElPTkZPUk0gKnBDb21wRm9ybSk7CisgICAgICAgIEhSRVNVTFQgU2V0Q29udmVyc2lvblN0YXR1cyhbaW5dIEhJTUMgaElNQywgW2luXSBEV09SRCBmZHdDb252ZXJzaW9uLCBbaW5dIERXT1JEIGZkd1NlbnRlbmNlKTsKKyAgICAgICAgSFJFU1VMVCBTZXRPcGVuU3RhdHVzKFtpbl0gSElNQyBoSU1DLCBbaW5dIEJPT0wgZk9wZW4pOworICAgICAgICBIUkVTVUxUIFNldFN0YXR1c1dpbmRvd1BvcyhbaW5dIEhJTUMgaElNQywgW2luXSBQT0lOVCAqcHB0UG9zKTsKKyAgICAgICAgSFJFU1VMVCBTaW11bGF0ZUhvdEtleShbaW5dIEhXTkQgaFduZCwgW2luXSBEV09SRCBkd0hvdEtleUlEKTsKKyAgICAgICAgSFJFU1VMVCBVbnJlZ2lzdGVyV29yZEEoW2luXSBIS0wgaEtMLCBbaW5dIExQU1RSIHN6UmVhZGluZywgW2luXSBEV09SRCBkd1N0eWxlLCBbaW5dIExQU1RSIHN6VW5yZWdpc3Rlcik7CisgICAgICAgIEhSRVNVTFQgVW5yZWdpc3RlcldvcmRXKFtpbl0gSEtMIGhLTCwgW2luXSBMUFdTVFIgc3pSZWFkaW5nLCBbaW5dIERXT1JEIGR3U3R5bGUsIFtpbl0gTFBXU1RSIHN6VW5yZWdpc3Rlcik7CisKKyAgICAgICAgSFJFU1VMVCBBY3RpdmF0ZShbaW5dIEJPT0wgZlJlc3RvcmVMYXlvdXQpOworICAgICAgICBIUkVTVUxUIERlYWN0aXZhdGUoKTsKKworICAgICAgICBIUkVTVUxUIE9uRGVmV2luZG93UHJvYyhbaW5dIEhXTkQgaFduZCwgW2luXSBVSU5UIE1zZywgW2luXSBXUEFSQU0gd1BhcmFtLCBbaW5dIExQQVJBTSBsUGFyYW0sIFtvdXRdIExSRVNVTFQgKnBsUmVzdWx0KTsKKworICAgICAgICBIUkVTVUxUIEZpbHRlckNsaWVudFdpbmRvd3MoW2luXSBBVE9NICphYUNsYXNzTGlzdCwgW2luXSBVSU5UIHVTaXplKTsKKworICAgICAgICBIUkVTVUxUIEdldENvZGVQYWdlQShbaW5dIEhLTCBoS0wsIFtvdXRdIFVJTlQgKnVDb2RlUGFnZSk7CisgICAgICAgIEhSRVNVTFQgR2V0TGFuZ0lkKFtpbl0gSEtMIGhLTCwgW291dF0gTEFOR0lEICpwbGlkKTsKKworICAgICAgICAvLyB3aW45OC9udDUgYXBpcworICAgICAgICBIUkVTVUxUIEFzc29jaWF0ZUNvbnRleHRFeChbaW5dIEhXTkQgaFduZCwgW2luXSBISU1DIGhJTUMsIFtpbl0gRFdPUkQgZHdGbGFncyk7CisgICAgICAgIEhSRVNVTFQgRGlzYWJsZUlNRShbaW5dIERXT1JEIGlkVGhyZWFkKTsKKyAgICAgICAgSFJFU1VMVCBHZXRJbWVNZW51SXRlbXNBKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3RmxhZ3MsIFtpbl0gRFdPUkQgZHdUeXBlLCBbaW5dIElNRU1FTlVJVEVNSU5GT0EgKnBJbWVQYXJlbnRNZW51LCBbb3V0XSBJTUVNRU5VSVRFTUlORk9BICpwSW1lTWVudSwgW2luXSBEV09SRCBkd1NpemUsIFtvdXRdIERXT1JEICpwZHdSZXN1bHQpOworICAgICAgICBIUkVTVUxUIEdldEltZU1lbnVJdGVtc1coW2luXSBISU1DIGhJTUMsIFtpbl0gRFdPUkQgZHdGbGFncywgW2luXSBEV09SRCBkd1R5cGUsIFtpbl0gSU1FTUVOVUlURU1JTkZPVyAqcEltZVBhcmVudE1lbnUsIFtvdXRdIElNRU1FTlVJVEVNSU5GT1cgKnBJbWVNZW51LCBbaW5dIERXT1JEIGR3U2l6ZSwgW291dF0gRFdPUkQgKnBkd1Jlc3VsdCk7CisgICAgICAgIEhSRVNVTFQgRW51bUlucHV0Q29udGV4dChbaW5dIERXT1JEIGlkVGhyZWFkLCBbb3V0XSBJRW51bUlucHV0Q29udGV4dCAqKnBwRW51bSk7CisgICAgfTsKKworICAgIFsKKyAgICAgIG9iamVjdCwKKyAgICAgIHV1aWQoMDhDMDM0MTEtRjk2Qi0xMWQwLUE0NzUtMDBBQTAwNkJDQzU5KSwKKyAgICAgIHBvaW50ZXJfZGVmYXVsdCh1bmlxdWUpCisgICAgXQorICAgIGludGVyZmFjZSBJQWN0aXZlSU1NSU1FIDogSVVua25vd24KKyAgICB7CisgICAgICAgIEhSRVNVTFQgQXNzb2NpYXRlQ29udGV4dChbaW5dIEhXTkQgaFduZCwgW2luXSBISU1DIGhJTUUsIFtvdXRdIEhJTUMgKnBoUHJldik7CisgICAgICAgIEhSRVNVTFQgQ29uZmlndXJlSU1FQShbaW5dIEhLTCBoS0wsIFtpbl0gSFdORCBoV25kLCBbaW5dIERXT1JEIGR3TW9kZSwgW2luXSBSRUdJU1RFUldPUkRBICpwRGF0YSk7CisgICAgICAgIEhSRVNVTFQgQ29uZmlndXJlSU1FVyhbaW5dIEhLTCBoS0wsIFtpbl0gSFdORCBoV25kLCBbaW5dIERXT1JEIGR3TW9kZSwgW2luXSBSRUdJU1RFUldPUkRXICpwRGF0YSk7CisgICAgICAgIEhSRVNVTFQgQ3JlYXRlQ29udGV4dChbb3V0XSBISU1DICpwaElNQyk7CisgICAgICAgIEhSRVNVTFQgRGVzdHJveUNvbnRleHQoW2luXSBISU1DIGhJTUUpOworICAgICAgICBIUkVTVUxUIEVudW1SZWdpc3RlcldvcmRBKFtpbl0gSEtMIGhLTCwgW2luXSBMUFNUUiBzelJlYWRpbmcsIFtpbl0gRFdPUkQgZHdTdHlsZSwgW2luXSBMUFNUUiBzelJlZ2lzdGVyLCBbaW5dIExQVk9JRCBwRGF0YSwgW291dF0gSUVudW1SZWdpc3RlcldvcmRBICoqcEVudW0pOworICAgICAgICBIUkVTVUxUIEVudW1SZWdpc3RlcldvcmRXKFtpbl0gSEtMIGhLTCwgW2luXSBMUFdTVFIgc3pSZWFkaW5nLCBbaW5dIERXT1JEIGR3U3R5bGUsIFtpbl0gTFBXU1RSIHN6UmVnaXN0ZXIsIFtpbl0gTFBWT0lEIHBEYXRhLCBbb3V0XSBJRW51bVJlZ2lzdGVyV29yZFcgKipwRW51bSk7CisgICAgICAgIEhSRVNVTFQgRXNjYXBlQShbaW5dIEhLTCBoS0wsIFtpbl0gSElNQyBoSU1DLCBbaW5dIFVJTlQgdUVzY2FwZSwgW2luLCBvdXRdIExQVk9JRCBwRGF0YSwgW291dF0gTFJFU1VMVCAqcGxSZXN1bHQpOworICAgICAgICBIUkVTVUxUIEVzY2FwZVcoW2luXSBIS0wgaEtMLCBbaW5dIEhJTUMgaElNQywgW2luXSBVSU5UIHVFc2NhcGUsIFtpbiwgb3V0XSBMUFZPSUQgcERhdGEsIFtvdXRdIExSRVNVTFQgKnBsUmVzdWx0KTsKKyAgICAgICAgSFJFU1VMVCBHZXRDYW5kaWRhdGVMaXN0QShbaW5dIEhJTUMgaElNQywgW2luXSBEV09SRCBkd0luZGV4LCBbaW5dIFVJTlQgdUJ1ZkxlbiwgW291dF0gQ0FORElEQVRFTElTVCAqcENhbmRMaXN0LCBbb3V0XSBVSU5UICpwdUNvcGllZCk7CisgICAgICAgIEhSRVNVTFQgR2V0Q2FuZGlkYXRlTGlzdFcoW2luXSBISU1DIGhJTUMsIFtpbl0gRFdPUkQgZHdJbmRleCwgW2luXSBVSU5UIHVCdWZMZW4sIFtvdXRdIENBTkRJREFURUxJU1QgKnBDYW5kTGlzdCwgW291dF0gVUlOVCAqcHVDb3BpZWQpOworICAgICAgICBIUkVTVUxUIEdldENhbmRpZGF0ZUxpc3RDb3VudEEoW2luXSBISU1DIGhJTUMsIFtvdXRdIERXT1JEICpwZHdMaXN0U2l6ZSwgW291dF0gRFdPUkQgKnBkd0J1Zkxlbik7CisgICAgICAgIEhSRVNVTFQgR2V0Q2FuZGlkYXRlTGlzdENvdW50VyhbaW5dIEhJTUMgaElNQywgW291dF0gRFdPUkQgKnBkd0xpc3RTaXplLCBbb3V0XSBEV09SRCAqcGR3QnVmTGVuKTsKKyAgICAgICAgSFJFU1VMVCBHZXRDYW5kaWRhdGVXaW5kb3coW2luXSBISU1DIGhJTUMsIFtpbl0gRFdPUkQgZHdJbmRleCwgW291dF0gQ0FORElEQVRFRk9STSAqcENhbmRpZGF0ZSk7CisgICAgICAgIEhSRVNVTFQgR2V0Q29tcG9zaXRpb25Gb250QShbaW5dIEhJTUMgaElNQywgW291dF0gTE9HRk9OVEEgKnBsZik7CisgICAgICAgIEhSRVNVTFQgR2V0Q29tcG9zaXRpb25Gb250VyhbaW5dIEhJTUMgaElNQywgW291dF0gTE9HRk9OVFcgKnBsZik7CisgICAgICAgIEhSRVNVTFQgR2V0Q29tcG9zaXRpb25TdHJpbmdBKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3SW5kZXgsIFtpbl0gRFdPUkQgZHdCdWZMZW4sIFtvdXRdIExPTkcgKnBsQ29waWVkLCBbb3V0XSBMUFZPSUQgcEJ1Zik7CisgICAgICAgIEhSRVNVTFQgR2V0Q29tcG9zaXRpb25TdHJpbmdXKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3SW5kZXgsIFtpbl0gRFdPUkQgZHdCdWZMZW4sIFtvdXRdIExPTkcgKnBsQ29waWVkLCBbb3V0XSBMUFZPSUQgcEJ1Zik7CisgICAgICAgIEhSRVNVTFQgR2V0Q29tcG9zaXRpb25XaW5kb3coW2luXSBISU1DIGhJTUMsIFtvdXRdIENPTVBPU0lUSU9ORk9STSAqcENvbXBGb3JtKTsKKyAgICAgICAgSFJFU1VMVCBHZXRDb250ZXh0KFtpbl0gSFdORCBoV25kLCBbb3V0XSBISU1DICpwaElNQyk7CisgICAgICAgIEhSRVNVTFQgR2V0Q29udmVyc2lvbkxpc3RBKFtpbl0gSEtMIGhLTCwgW2luXSBISU1DIGhJTUMsIFtpbl0gTFBTVFIgcFNyYywgW2luXSBVSU5UIHVCdWZMZW4sIFtpbl0gVUlOVCB1RmxhZywgW291dF0gQ0FORElEQVRFTElTVCAqcERzdCwgW291dF0gVUlOVCAqcHVDb3BpZWQpOworICAgICAgICBIUkVTVUxUIEdldENvbnZlcnNpb25MaXN0VyhbaW5dIEhLTCBoS0wsIFtpbl0gSElNQyBoSU1DLCBbaW5dIExQV1NUUiBwU3JjLCBbaW5dIFVJTlQgdUJ1ZkxlbiwgW2luXSBVSU5UIHVGbGFnLCBbb3V0XSBDQU5ESURBVEVMSVNUICpwRHN0LCBbb3V0XSBVSU5UICpwdUNvcGllZCk7CisgICAgICAgIEhSRVNVTFQgR2V0Q29udmVyc2lvblN0YXR1cyhbaW5dIEhJTUMgaElNQywgW291dF0gRFdPUkQgKnBmZHdDb252ZXJzaW9uLCBbb3V0XSBEV09SRCAqcGZkd1NlbnRlbmNlKTsKKyAgICAgICAgSFJFU1VMVCBHZXREZWZhdWx0SU1FV25kKFtpbl0gSFdORCBoV25kLCBbb3V0XSBIV05EICpwaERlZlduZCk7CisgICAgICAgIEhSRVNVTFQgR2V0RGVzY3JpcHRpb25BKFtpbl0gSEtMIGhLTCwgW2luXSBVSU5UIHVCdWZMZW4sIFtvdXRdIExQU1RSIHN6RGVzY3JpcHRpb24sIFtvdXRdIFVJTlQgKnB1Q29waWVkKTsKKyAgICAgICAgSFJFU1VMVCBHZXREZXNjcmlwdGlvblcoW2luXSBIS0wgaEtMLCBbaW5dIFVJTlQgdUJ1ZkxlbiwgW291dF0gTFBXU1RSIHN6RGVzY3JpcHRpb24sIFtvdXRdIFVJTlQgKnB1Q29waWVkKTsKKyAgICAgICAgSFJFU1VMVCBHZXRHdWlkZUxpbmVBKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3SW5kZXgsIFtpbl0gRFdPUkQgZHdCdWZMZW4sIFtvdXRdIExQU1RSIHBCdWYsIFtvdXRdIERXT1JEICpwZHdSZXN1bHQpOworICAgICAgICBIUkVTVUxUIEdldEd1aWRlTGluZVcoW2luXSBISU1DIGhJTUMsIFtpbl0gRFdPUkQgZHdJbmRleCwgW2luXSBEV09SRCBkd0J1ZkxlbiwgW291dF0gTFBXU1RSIHBCdWYsIFtvdXRdIERXT1JEICpwZHdSZXN1bHQpOworICAgICAgICBIUkVTVUxUIEdldElNRUZpbGVOYW1lQShbaW5dIEhLTCBoS0wsIFtpbl0gVUlOVCB1QnVmTGVuLCBbb3V0XSBMUFNUUiBzekZpbGVOYW1lLCBbb3V0XSBVSU5UICpwdUNvcGllZCk7CisgICAgICAgIEhSRVNVTFQgR2V0SU1FRmlsZU5hbWVXKFtpbl0gSEtMIGhLTCwgW2luXSBVSU5UIHVCdWZMZW4sIFtvdXRdIExQV1NUUiBzekZpbGVOYW1lLCBbb3V0XSBVSU5UICpwdUNvcGllZCk7CisgICAgICAgIEhSRVNVTFQgR2V0T3BlblN0YXR1cyhbaW5dIEhJTUMgaElNQyk7CisgICAgICAgIEhSRVNVTFQgR2V0UHJvcGVydHkoW2luXSBIS0wgaEtMLCBbaW5dIERXT1JEIGZkd0luZGV4LCBbb3V0XSBEV09SRCAqcGR3UHJvcGVydHkpOworICAgICAgICBIUkVTVUxUIEdldFJlZ2lzdGVyV29yZFN0eWxlQShbaW5dIEhLTCBoS0wsIFtpbl0gVUlOVCBuSXRlbSwgW291dF0gU1RZTEVCVUZBICpwU3R5bGVCdWYsIFtvdXRdIFVJTlQgKnB1Q29waWVkKTsKKyAgICAgICAgSFJFU1VMVCBHZXRSZWdpc3RlcldvcmRTdHlsZVcoW2luXSBIS0wgaEtMLCBbaW5dIFVJTlQgbkl0ZW0sIFtvdXRdIFNUWUxFQlVGVyAqcFN0eWxlQnVmLCBbb3V0XSBVSU5UICpwdUNvcGllZCk7CisgICAgICAgIEhSRVNVTFQgR2V0U3RhdHVzV2luZG93UG9zKFtpbl0gSElNQyBoSU1DLCBbb3V0XSBQT0lOVCAqcHB0UG9zKTsKKyAgICAgICAgSFJFU1VMVCBHZXRWaXJ0dWFsS2V5KFtpbl0gSFdORCBoV25kLCBbb3V0XSBVSU5UICpwdVZpcnR1YWxLZXkpOworICAgICAgICBIUkVTVUxUIEluc3RhbGxJTUVBKFtpbl0gTFBTVFIgc3pJTUVGaWxlTmFtZSwgW2luXSBMUFNUUiBzekxheW91dFRleHQsIFtvdXRdIEhLTCAqcGhLTCk7CisgICAgICAgIEhSRVNVTFQgSW5zdGFsbElNRVcoW2luXSBMUFdTVFIgc3pJTUVGaWxlTmFtZSwgW2luXSBMUFdTVFIgc3pMYXlvdXRUZXh0LCBbb3V0XSBIS0wgKnBoS0wpOworICAgICAgICBIUkVTVUxUIElzSU1FKFtpbl0gSEtMIGhLTCk7CisgICAgICAgIEhSRVNVTFQgSXNVSU1lc3NhZ2VBKFtpbl0gSFdORCBoV25kSU1FLCBbaW5dIFVJTlQgbXNnLCBbaW5dIFdQQVJBTSB3UGFyYW0sIFtpbl0gTFBBUkFNIGxQYXJhbSk7CisgICAgICAgIEhSRVNVTFQgSXNVSU1lc3NhZ2VXKFtpbl0gSFdORCBoV25kSU1FLCBbaW5dIFVJTlQgbXNnLCBbaW5dIFdQQVJBTSB3UGFyYW0sIFtpbl0gTFBBUkFNIGxQYXJhbSk7CisgICAgICAgIEhSRVNVTFQgTm90aWZ5SU1FKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3QWN0aW9uLCBbaW5dIERXT1JEIGR3SW5kZXgsIFtpbl0gRFdPUkQgZHdWYWx1ZSk7CisgICAgICAgIEhSRVNVTFQgUmVnaXN0ZXJXb3JkQShbaW5dIEhLTCBoS0wsIFtpbl0gTFBTVFIgc3pSZWFkaW5nLCBbaW5dIERXT1JEIGR3U3R5bGUsIFtpbl0gTFBTVFIgc3pSZWdpc3Rlcik7CisgICAgICAgIEhSRVNVTFQgUmVnaXN0ZXJXb3JkVyhbaW5dIEhLTCBoS0wsIFtpbl0gTFBXU1RSIHN6UmVhZGluZywgW2luXSBEV09SRCBkd1N0eWxlLCBbaW5dIExQV1NUUiBzelJlZ2lzdGVyKTsKKyAgICAgICAgSFJFU1VMVCBSZWxlYXNlQ29udGV4dChbaW5dIEhXTkQgaFduZCwgW2luXSBISU1DIGhJTUMpOworICAgICAgICBIUkVTVUxUIFNldENhbmRpZGF0ZVdpbmRvdyhbaW5dIEhJTUMgaElNQywgW2luXSBDQU5ESURBVEVGT1JNICpwQ2FuZGlkYXRlKTsKKyAgICAgICAgSFJFU1VMVCBTZXRDb21wb3NpdGlvbkZvbnRBKFtpbl0gSElNQyBoSU1DLCBbaW5dIExPR0ZPTlRBICpwbGYpOworICAgICAgICBIUkVTVUxUIFNldENvbXBvc2l0aW9uRm9udFcoW2luXSBISU1DIGhJTUMsIFtpbl0gTE9HRk9OVFcgKnBsZik7CisgICAgICAgIEhSRVNVTFQgU2V0Q29tcG9zaXRpb25TdHJpbmdBKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3SW5kZXgsIFtpbl0gTFBWT0lEIHBDb21wLCBbaW5dIERXT1JEIGR3Q29tcExlbiwgW2luXSBMUFZPSUQgcFJlYWQsIFtpbl0gRFdPUkQgZHdSZWFkTGVuKTsKKyAgICAgICAgSFJFU1VMVCBTZXRDb21wb3NpdGlvblN0cmluZ1coW2luXSBISU1DIGhJTUMsIFtpbl0gRFdPUkQgZHdJbmRleCwgW2luXSBMUFZPSUQgcENvbXAsIFtpbl0gRFdPUkQgZHdDb21wTGVuLCBbaW5dIExQVk9JRCBwUmVhZCwgW2luXSBEV09SRCBkd1JlYWRMZW4pOworICAgICAgICBIUkVTVUxUIFNldENvbXBvc2l0aW9uV2luZG93KFtpbl0gSElNQyBoSU1DLCBbaW5dIENPTVBPU0lUSU9ORk9STSAqcENvbXBGb3JtKTsKKyAgICAgICAgSFJFU1VMVCBTZXRDb252ZXJzaW9uU3RhdHVzKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGZkd0NvbnZlcnNpb24sIFtpbl0gRFdPUkQgZmR3U2VudGVuY2UpOworICAgICAgICBIUkVTVUxUIFNldE9wZW5TdGF0dXMoW2luXSBISU1DIGhJTUMsIFtpbl0gQk9PTCBmT3Blbik7CisgICAgICAgIEhSRVNVTFQgU2V0U3RhdHVzV2luZG93UG9zKFtpbl0gSElNQyBoSU1DLCBbaW5dIFBPSU5UICpwcHRQb3MpOworICAgICAgICBIUkVTVUxUIFNpbXVsYXRlSG90S2V5KFtpbl0gSFdORCBoV25kLCBbaW5dIERXT1JEIGR3SG90S2V5SUQpOworICAgICAgICBIUkVTVUxUIFVucmVnaXN0ZXJXb3JkQShbaW5dIEhLTCBoS0wsIFtpbl0gTFBTVFIgc3pSZWFkaW5nLCBbaW5dIERXT1JEIGR3U3R5bGUsIFtpbl0gTFBTVFIgc3pVbnJlZ2lzdGVyKTsKKyAgICAgICAgSFJFU1VMVCBVbnJlZ2lzdGVyV29yZFcoW2luXSBIS0wgaEtMLCBbaW5dIExQV1NUUiBzelJlYWRpbmcsIFtpbl0gRFdPUkQgZHdTdHlsZSwgW2luXSBMUFdTVFIgc3pVbnJlZ2lzdGVyKTsKKworICAgICAgICAvLyBpbWUgaGVscGVyIG1ldGhvZHMKKyAgICAgICAgSFJFU1VMVCBHZW5lcmF0ZU1lc3NhZ2UoW2luXSBISU1DIGhJTUMpOworCisgICAgICAgIC8vIEhJTUMgYW5kIEhJTUNDIG1hbmFnZW1lbnQgYXBpJ3MKKyAgICAgICAgSFJFU1VMVCBMb2NrSU1DKFtpbl0gSElNQyBoSU1DLCBbb3V0XSBJTlBVVENPTlRFWFQgKipwcElNQyk7CisgICAgICAgIEhSRVNVTFQgVW5sb2NrSU1DKFtpbl0gSElNQyBoSU1DKTsKKyAgICAgICAgSFJFU1VMVCBHZXRJTUNMb2NrQ291bnQoW2luXSBISU1DIGhJTUMsIFtvdXRdIERXT1JEICpwZHdMb2NrQ291bnQpOworICAgICAgICBIUkVTVUxUIENyZWF0ZUlNQ0MoW2luXSBEV09SRCBkd1NpemUsIFtvdXRdIEhJTUNDICpwaElNQ0MpOworICAgICAgICBIUkVTVUxUIERlc3Ryb3lJTUNDKFtpbl0gSElNQ0MgaElNQ0MpOworICAgICAgICBIUkVTVUxUIExvY2tJTUNDKFtpbl0gSElNQ0MgaElNQ0MsIFtvdXRdIHZvaWQgKipwcHYpOworICAgICAgICBIUkVTVUxUIFVubG9ja0lNQ0MoW2luXSBISU1DQyBoSU1DQyk7CisgICAgICAgIEhSRVNVTFQgUmVTaXplSU1DQyhbaW5dIEhJTUNDIGhJTUNDLCBbaW5dIERXT1JEIGR3U2l6ZSwgW291dF0gSElNQ0MgKnBoSU1DQyk7CisgICAgICAgIEhSRVNVTFQgR2V0SU1DQ1NpemUoW2luXSBISU1DQyBoSU1DQywgW291dF0gRFdPUkQgKnBkd1NpemUpOworICAgICAgICBIUkVTVUxUIEdldElNQ0NMb2NrQ291bnQoW2luXSBISU1DQyBoSU1DQywgW291dF0gRFdPUkQgKnBkd0xvY2tDb3VudCk7CisKKyAgICAgICAgLy8gaG90IGtleSBtYW5pcHVsYXRpb24gYXBpJ3MKKyAgICAgICAgSFJFU1VMVCBHZXRIb3RLZXkoW2luXSBEV09SRCBkd0hvdEtleUlELCBbb3V0XSBVSU5UICpwdU1vZGlmaWVycywgW291dF0gVUlOVCAqcHVWS2V5LCBbb3V0XSBIS0wgKnBoS0wpOworICAgICAgICBIUkVTVUxUIFNldEhvdEtleShbaW5dIERXT1JEIGR3SG90S2V5SUQsIFtpbl0gVUlOVCB1TW9kaWZpZXJzLCBbaW5dIFVJTlQgdVZLZXksIFtpbl0gSEtMIGhLTCk7CisKKyAgICAgICAgLy8gc29mdCBrZXlib2FyZCBhcGkncworICAgICAgICBIUkVTVUxUIENyZWF0ZVNvZnRLZXlib2FyZChbaW5dIFVJTlQgdVR5cGUsIFtpbl0gSFdORCBoT3duZXIsIFtpbl0gaW50IHgsIFtpbl0gaW50IHksIFtvdXRdIEhXTkQgKnBoU29mdEtiZFduZCk7CisgICAgICAgIEhSRVNVTFQgRGVzdHJveVNvZnRLZXlib2FyZChbaW5dIEhXTkQgaFNvZnRLYmRXbmQpOworICAgICAgICBIUkVTVUxUIFNob3dTb2Z0S2V5Ym9hcmQoW2luXSBIV05EIGhTb2Z0S2JkV25kLCBbaW5dIGludCBuQ21kU2hvdyk7CisKKyAgICAgICAgSFJFU1VMVCBHZXRDb2RlUGFnZUEoW2luXSBIS0wgaEtMLCBbb3V0XSBVSU5UICp1Q29kZVBhZ2UpOworICAgICAgICBIUkVTVUxUIEdldExhbmdJZChbaW5dIEhLTCBoS0wsIFtvdXRdIExBTkdJRCAqcGxpZCk7CisKKyAgICAgICAgSFJFU1VMVCBLZXliZEV2ZW50KFtpbl0gTEFOR0lEIGxnaWRJTUUsIFtpbl0gQllURSBiVmssIFtpbl0gQllURSBiU2NhbiwgW2luXSBEV09SRCBkd0ZsYWdzLCBbaW5dIERXT1JEIGR3RXh0cmFJbmZvKTsKKworICAgICAgICBIUkVTVUxUIExvY2tNb2RhbCgpOworICAgICAgICBIUkVTVUxUIFVubG9ja01vZGFsKCk7CisKKyAgICAgICAgLy8gd2luOTgvbnQ1IGFwaXMKKyAgICAgICAgSFJFU1VMVCBBc3NvY2lhdGVDb250ZXh0RXgoW2luXSBIV05EIGhXbmQsIFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3RmxhZ3MpOworICAgICAgICBIUkVTVUxUIERpc2FibGVJTUUoW2luXSBEV09SRCBpZFRocmVhZCk7CisgICAgICAgIEhSRVNVTFQgR2V0SW1lTWVudUl0ZW1zQShbaW5dIEhJTUMgaElNQywgW2luXSBEV09SRCBkd0ZsYWdzLCBbaW5dIERXT1JEIGR3VHlwZSwgW2luXSBJTUVNRU5VSVRFTUlORk9BICpwSW1lUGFyZW50TWVudSwgW291dF0gSU1FTUVOVUlURU1JTkZPQSAqcEltZU1lbnUsIFtpbl0gRFdPUkQgZHdTaXplLCBbb3V0XSBEV09SRCAqcGR3UmVzdWx0KTsKKyAgICAgICAgSFJFU1VMVCBHZXRJbWVNZW51SXRlbXNXKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3RmxhZ3MsIFtpbl0gRFdPUkQgZHdUeXBlLCBbaW5dIElNRU1FTlVJVEVNSU5GT1cgKnBJbWVQYXJlbnRNZW51LCBbb3V0XSBJTUVNRU5VSVRFTUlORk9XICpwSW1lTWVudSwgW2luXSBEV09SRCBkd1NpemUsIFtvdXRdIERXT1JEICpwZHdSZXN1bHQpOworICAgICAgICBIUkVTVUxUIEVudW1JbnB1dENvbnRleHQoW2luXSBEV09SRCBpZFRocmVhZCwgW291dF0gSUVudW1JbnB1dENvbnRleHQgKipwcEVudW0pOworICAgICAgICBIUkVTVUxUIFJlcXVlc3RNZXNzYWdlQShbaW5dIEhJTUMgaElNQywgW2luXSBXUEFSQU0gd1BhcmFtLCBbaW5dIExQQVJBTSBsUGFyYW0sIFtvdXRdIExSRVNVTFQgKnBsUmVzdWx0KTsKKyAgICAgICAgSFJFU1VMVCBSZXF1ZXN0TWVzc2FnZVcoW2luXSBISU1DIGhJTUMsIFtpbl0gV1BBUkFNIHdQYXJhbSwgW2luXSBMUEFSQU0gbFBhcmFtLCBbb3V0XSBMUkVTVUxUICpwbFJlc3VsdCk7CisKKyAgICAgICAgSFJFU1VMVCBTZW5kSU1DQShbaW5dIEhXTkQgaFduZCwgW2luXSBVSU5UIHVNc2csIFtpbl0gV1BBUkFNIHdQYXJhbSwgW2luXSBMUEFSQU0gbFBhcmFtLCBbb3V0XSBMUkVTVUxUICpwbFJlc3VsdCk7CisgICAgICAgIEhSRVNVTFQgU2VuZElNQ1coW2luXSBIV05EIGhXbmQsIFtpbl0gVUlOVCB1TXNnLCBbaW5dIFdQQVJBTSB3UGFyYW0sIFtpbl0gTFBBUkFNIGxQYXJhbSwgW291dF0gTFJFU1VMVCAqcGxSZXN1bHQpOworCisgICAgICAgIEhSRVNVTFQgSXNTbGVlcGluZygpOworICAgIH07CisKKyAgICBbCisgICAgICBvYmplY3QsCisgICAgICB1dWlkKDZGRTIwOTYyLUQwNzctMTFkMC04RkU3LTAwQUEwMDZCQ0M1OSksCisgICAgICBwb2ludGVyX2RlZmF1bHQodW5pcXVlKQorICAgIF0KKyAgICBpbnRlcmZhY2UgSUFjdGl2ZUlNRSA6IElVbmtub3duCisgICAgeworICAgICAgICBIUkVTVUxUIElucXVpcmUoW2luXSBEV09SRCBkd1N5c3RlbUluZm9GbGFncywgW291dF0gSU1FSU5GTyAqcElNRUluZm8sIFtvdXRdIExQV1NUUiBzelduZENsYXNzLCBbb3V0XSBEV09SRCAqcGR3UHJpdmF0ZSk7CisgICAgICAgIEhSRVNVTFQgQ29udmVyc2lvbkxpc3QoW2luXSBISU1DIGhJTUMsIFtpbl0gTFBXU1RSIHN6U291cmNlLCBbaW5dIFVJTlQgdUZsYWcsIFtpbl0gVUlOVCB1QnVmTGVuLCBbb3V0XSBDQU5ESURBVEVMSVNUICpwRGVzdCwgW291dF0gVUlOVCAqcHVDb3BpZWQpOworICAgICAgICBIUkVTVUxUIENvbmZpZ3VyZShbaW5dIEhLTCBoS0wsIFtpbl0gSFdORCBoV25kLCBbaW5dIERXT1JEIGR3TW9kZSwgW2luXSBSRUdJU1RFUldPUkRXICpwUmVnaXN0ZXJXb3JkKTsKKyAgICAgICAgSFJFU1VMVCBEZXN0cm95KFtpbl0gVUlOVCB1UmVzZXJ2ZWQpOworICAgICAgICBIUkVTVUxUIEVzY2FwZShbaW5dIEhJTUMgaElNQywgW2luXSBVSU5UIHVFc2NhcGUsIFtpbiwgb3V0XSB2b2lkICpwRGF0YSwgW291dF0gTFJFU1VMVCAqcGxSZXN1bHQpOworICAgICAgICBIUkVTVUxUIFNldEFjdGl2ZUNvbnRleHQoW2luXSBISU1DIGhJTUMsIFtpbl0gQk9PTCBmRmxhZyk7CisgICAgICAgIEhSRVNVTFQgUHJvY2Vzc0tleShbaW5dIEhJTUMgaElNQywgW2luXSBVSU5UIHVWaXJLZXksIFtpbl0gRFdPUkQgbFBhcmFtLCBbaW5dIEJZVEUgKnBiS2V5U3RhdGUpOworICAgICAgICBIUkVTVUxUIE5vdGlmeShbaW5dIEhJTUMgaElNQywgW2luXSBEV09SRCBkd0FjdGlvbiwgW2luXSBEV09SRCBkd0luZGV4LCBbaW5dIERXT1JEIGR3VmFsdWUpOworICAgICAgICBIUkVTVUxUIFNlbGVjdChbaW5dIEhJTUMgaElNQywgW2luXSBCT09MIGZTZWxlY3QpOworICAgICAgICBIUkVTVUxUIFNldENvbXBvc2l0aW9uU3RyaW5nKFtpbl0gSElNQyBoSU1DLCBbaW5dIERXT1JEIGR3SW5kZXgsIFtpbl0gdm9pZCAqcENvbXAsIFtpbl0gRFdPUkQgZHdDb21wTGVuLCBbaW5dIHZvaWQgKnBSZWFkLCBbaW5dIERXT1JEIGR3UmVhZExlbik7CisgICAgICAgIEhSRVNVTFQgVG9Bc2NpaUV4KFtpbl0gVUlOVCB1VmlyS2V5LCBbaW5dIFVJTlQgdVNjYW5Db2RlLCBbaW5dIEJZVEUgKnBiS2V5U3RhdGUsIFtpbl0gVUlOVCBmdVN0YXRlLCBbaW5dIEhJTUMgaElNQywgW291dF0gRFdPUkQgKnBkd1RyYW5zQnVmLCBbb3V0XSBVSU5UICpwdVNpemUpOworICAgICAgICBIUkVTVUxUIFJlZ2lzdGVyV29yZChbaW5dIExQV1NUUiBzelJlYWRpbmcsIFtpbl0gRFdPUkQgZHdTdHlsZSwgW2luXSBMUFdTVFIgc3pTdHJpbmcpOworICAgICAgICBIUkVTVUxUIFVucmVnaXN0ZXJXb3JkKFtpbl0gTFBXU1RSIHN6UmVhZGluZywgW2luXSBEV09SRCAgZHdTdHlsZSwgW2luXSBMUFdTVFIgc3pTdHJpbmcpOworICAgICAgICBIUkVTVUxUIEdldFJlZ2lzdGVyV29yZFN0eWxlKFtpbl0gVUlOVCBuSXRlbSwgW291dF0gU1RZTEVCVUZXICpwU3R5bGVCdWYsIFtvdXRdIFVJTlQgKnB1QnVmU2l6ZSk7CisgICAgICAgIEhSRVNVTFQgRW51bVJlZ2lzdGVyV29yZChbaW5dIExQV1NUUiBzelJlYWRpbmcsIFtpbl0gRFdPUkQgZHdTdHlsZSwgW2luXSBMUFdTVFIgc3pSZWdpc3RlciwgW2luXSBMUFZPSUQgcERhdGEsIFtvdXRdIElFbnVtUmVnaXN0ZXJXb3JkVyAqKnBwRW51bSk7CisgICAgICAgIEhSRVNVTFQgR2V0Q29kZVBhZ2VBKFtvdXRdIFVJTlQgKnVDb2RlUGFnZSk7CisgICAgICAgIEhSRVNVTFQgR2V0TGFuZ0lkKFtvdXRdIExBTkdJRCAqcGxpZCk7CisgICAgfTsKKworICAgIFsKKyAgICAgIG9iamVjdCwKKyAgICAgIHV1aWQoZTFjNGJmMGUtMmQ1My0xMWQyLTkzZTEtMDA2MGIwNjdiODZlKSwKKyAgICAgIHBvaW50ZXJfZGVmYXVsdCh1bmlxdWUpCisgICAgXQorICAgIGludGVyZmFjZSBJQWN0aXZlSU1FMiA6IElBY3RpdmVJTUUKKyAgICB7CisgICAgICAgIEhSRVNVTFQgU2xlZXAoKTsKKyAgICAgICAgSFJFU1VMVCBVbnNsZWVwKFtpbl0gQk9PTCBmRGVhZCk7CisgICAgfTsKKworICAgIFsKKyAgICAgIHV1aWQoNDk1NUREMzMtQjE1OS0xMWQwLThGQ0YtMDBBQTAwNkJDQzU5KSwKKyAgICBdCisgICAgY29jbGFzcyBDQWN0aXZlSU1NCisgICAgeworICAgICAgICBbZGVmYXVsdF0gaW50ZXJmYWNlIElBY3RpdmVJTU1BcHA7CisgICAgICAgIGludGVyZmFjZSBJQWN0aXZlSU1NSU1FOworICAgICAgICBpbnRlcmZhY2UgSUFjdGl2ZUlNTVJlZ2lzdHJhcjsKKyAgICAgICAgaW50ZXJmYWNlIElBY3RpdmVJTU1NZXNzYWdlUHVtcE93bmVyOworICAgIH07Cit9CmRpZmYgLS1naXQgYS9zcmMvZGxsZGF0YS5jIGIvc3JjL2RsbGRhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDMxMjRjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RsbGRhdGEuYwpAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBEbGxEYXRhIGZpbGUgLS0gZ2VuZXJhdGVkIGJ5IE1JREwgY29tcGlsZXIKKworCURPIE5PVCBBTFRFUiBUSElTIEZJTEUKKworICAgVGhpcyBmaWxlIGlzIHJlZ2VuZXJhdGVkIGJ5IE1JREwgb24gZXZlcnkgSURMIGZpbGUgY29tcGlsZS4KKworICAgVG8gY29tcGxldGVseSByZWNvbnN0cnVjdCB0aGlzIGZpbGUsIGRlbGV0ZSBpdCBhbmQgcmVydW4gTUlETAorICAgb24gYWxsIHRoZSBJREwgZmlsZXMgaW4gdGhpcyBETEwsIHNwZWNpZnlpbmcgdGhpcyBmaWxlIGZvciB0aGUKKyAgIC9kbGxkYXRhIGNvbW1hbmQgbGluZSBvcHRpb24KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFBST1hZX0RFTEVHQVRJT04KKworI2luY2x1ZGUgPHJwY3Byb3h5Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiAgIHsKKyNlbmRpZgorCitFWFRFUk5fUFJPWFlfRklMRSggaWZfb2xlICkKKworCitQUk9YWUZJTEVfTElTVF9TVEFSVAorLyogU3RhcnQgb2YgbGlzdCAqLworICBSRUZFUkVOQ0VfUFJPWFlfRklMRSggaWZfb2xlICksCisvKiBFbmQgb2YgbGlzdCAqLworUFJPWFlGSUxFX0xJU1RfRU5ECisKKworRExMREFUQV9ST1VUSU5FUyggYVByb3h5RmlsZUxpc3QsIEdFVF9ETExfQ0xTSUQgKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8qZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKy8qIGVuZCBvZiBnZW5lcmF0ZWQgZGxsZGF0YSBmaWxlICovCmRpZmYgLS1naXQgYS9zcmMvZG9zaW5zdC5jIGIvc3JjL2Rvc2luc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWFmMTVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Rvc2luc3QuYwpAQCAtMCwwICsxLDI0NjEgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIGRvc2luc3QuYzogSW5zdGFsbCBwcm9ncmFtIGZvciBWaW0gb24gTVMtRE9TIGFuZCBNUy1XaW5kb3dzCisgKgorICogQ29tcGlsZSB3aXRoIE1ha2VfbXZjLm1haywgTWFrZV9iYzMubWFrLCBNYWtlX2JjNS5tYWsgb3IgTWFrZV9kamcubWFrLgorICovCisKKy8qCisgKiBJbmNsdWRlIGNvbW1vbiBjb2RlIGZvciBkb3NpbnN0LmMgYW5kIHVuaW5zdGFsLmMuCisgKi8KKyNkZWZpbmUgRE9TSU5TVAorI2luY2x1ZGUgImRvc2luc3QuaCIKKworLyogTWFjcm8gdG8gZG8gYW4gZXJyb3IgY2hlY2sgSSB3YXMgdHlwaW5nIG92ZXIgYW5kIG92ZXIgKi8KKyNkZWZpbmUgQ0hFQ0tfUkVHX0VSUk9SKGNvZGUpIGlmIChjb2RlICE9IEVSUk9SX1NVQ0NFU1MpIHsgcHJpbnRmKCIlbGQgZXJyb3IgbnVtYmVyOiAgJWxkXG4iLCAobG9uZylfX0xJTkVfXywgKGxvbmcpY29kZSk7IHJldHVybiAxOyB9CisKK2ludAloYXNfdmltID0gMDsJCS8qIGluc3RhbGxhYmxlIHZpbS5leGUgZXhpc3RzICovCitpbnQJaGFzX2d2aW0gPSAwOwkJLyogaW5zdGFsbGFibGUgZ3ZpbS5leGUgZXhpc3RzICovCisKK2NoYXIJb2xkdmltcmNbQlVGU0laRV07CS8qIG5hbWUgb2YgZXhpc3RpbmcgdmltcmMgZmlsZSAqLworY2hhcgl2aW1yY1tCVUZTSVpFXTsJCS8qIG5hbWUgb2YgdmltcmMgZmlsZSB0byBjcmVhdGUgKi8KKworY2hhcgkqZGVmYXVsdF9iYXRfZGlyID0gTlVMTDsgIC8qIHdoZW4gbm90IE5VTEwsIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0CisJCQkJICAgICBkaXJlY3RvcnkgdG8gd3JpdGUgLmJhdCBmaWxlcyBpbiAqLworY2hhcgkqZGVmYXVsdF92aW1fZGlyID0gTlVMTDsgIC8qIHdoZW4gbm90IE5VTEwsIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0CisJCQkJICAgICBpbnN0YWxsIGRpciBmb3IgTlNJUyAqLworI2lmIDAKK2NoYXIJaG9tZWRpcltCVUZTSVpFXTsJLyogaG9tZSBkaXJlY3Rvcnkgb3IgIiIgKi8KKyNlbmRpZgorCisvKgorICogU3RydWN0dXJlIHVzZWQgZm9yIGVhY2ggY2hvaWNlIHRoZSB1c2VyIGNhbiBtYWtlLgorICovCitzdHJ1Y3QgY2hvaWNlCit7CisgICAgaW50CSAgICBhY3RpdmU7CQkJLyogbm9uLXplcm8gd2hlbiBjaG9pY2UgaXMgYWN0aXZlICovCisgICAgY2hhciAgICAqdGV4dDsJCQkvKiB0ZXh0IGRpc3BsYXllZCBmb3IgdGhpcyBjaG9pY2UgKi8KKyAgICB2b2lkICAgICgqY2hhbmdlZnVuYykoaW50IGlkeCk7CS8qIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGlzIGNob2ljZSAqLworICAgIGludAkgICAgYXJnOwkJCS8qIGFyZ3VtZW50IGZvciBmdW5jdGlvbiAqLworICAgIHZvaWQgICAgKCppbnN0YWxsZnVuYykoaW50IGlkeCk7CS8qIGZ1bmN0aW9uIHRvIGluc3RhbGwgdGhpcyBjaG9pY2UgKi8KK307CisKK3N0cnVjdCBjaG9pY2UJY2hvaWNlc1szMF07CQkvKiBjaG9pY2VzIHRoZSB1c2VyIGNhbiBtYWtlICovCitpbnQJCWNob2ljZV9jb3VudCA9IDA7CS8qIG51bWJlciBvZiBjaG9pY2VzIGF2YWlsYWJsZSAqLworCisjZGVmaW5lIFRBQkxFX1NJWkUocykJKGludCkoc2l6ZW9mKHMpIC8gc2l6ZW9mKCpzKSkKKworZW51bQoreworICAgIGNvbXBhdF92aSA9IDEsCisgICAgY29tcGF0X3NvbWVfZW5oYW5jZW1lbnRzLAorICAgIGNvbXBhdF9hbGxfZW5oYW5jZW1lbnRzCit9OworY2hhcgkqKGNvbXBhdF9jaG9pY2VzW10pID0KK3sKKyAgICAiXG5DaG9vc2UgdGhlIGRlZmF1bHQgd2F5IHRvIHJ1biBWaW06IiwKKyAgICAiVmkgY29tcGF0aWJsZSIsCisgICAgIndpdGggc29tZSBWaW0gZWhhbmNlbWVudHMiLAorICAgICJ3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgYW5kIG90aGVyIGZlYXR1cmVzIHN3aXRjaGVkIG9uIiwKK307CitpbnQJY29tcGF0X2Nob2ljZSA9IChpbnQpY29tcGF0X2FsbF9lbmhhbmNlbWVudHM7CitjaGFyCSpjb21wYXRfdGV4dCA9ICItIHJ1biBWaW0gJXMiOworCitlbnVtCit7CisgICAgcmVtYXBfbm8gPSAxLAorICAgIHJlbWFwX3dpbgorfTsKK2NoYXIJKihyZW1hcF9jaG9pY2VzW10pID0KK3sKKyAgICAiXG5DaG9vc2U6IiwKKyAgICAiRG8gbm90IHJlbWFwIGtleXMgZm9yIFdpbmRvd3MgYmVoYXZpb3IiLAorICAgICJSZW1hcCBhIGZldyBrZXlzIGZvciBXaW5kb3dzIGJlaGF2aW9yICg8Qy1WPiwgPEMtQz4sIGV0YykiLAorfTsKK2ludAlyZW1hcF9jaG9pY2UgPSAoaW50KXJlbWFwX3dpbjsKK2NoYXIJKnJlbWFwX3RleHQgPSAiLSAlcyI7CisKK2VudW0KK3sKKyAgICBtb3VzZV94dGVybSA9IDEsCisgICAgbW91c2VfbXN3aW4KK307CitjaGFyCSoobW91c2VfY2hvaWNlc1tdKSA9Cit7CisgICAgIlxuQ2hvb3NlIHRoZSB3YXkgaG93IFZpbSB1c2VzIHRoZSBtb3VzZToiLAorICAgICJyaWdodCBidXR0b24gZXh0ZW5kcyBzZWxlY3Rpb24gKHRoZSBVbml4IHdheSkiLAorICAgICJyaWdodCBidXR0b24gaGFzIGEgcG9wdXAgbWVudSAodGhlIFdpbmRvd3Mgd2F5KSIsCit9OworaW50CW1vdXNlX2Nob2ljZSA9IChpbnQpbW91c2VfbXN3aW47CitjaGFyCSptb3VzZV90ZXh0ID0gIi0gVGhlIG1vdXNlICVzIjsKKworZW51bQoreworICAgIHZpbWZpbGVzX2Rpcl9ub25lID0gMSwKKyAgICB2aW1maWxlc19kaXJfdmltLAorICAgIHZpbWZpbGVzX2Rpcl9ob21lCit9Oworc3RhdGljIGNoYXIgICAgKih2aW1maWxlc19kaXJfY2hvaWNlc1tdKSA9Cit7CisgICAgIlxuQ3JlYXRlIHBsdWdpbiBkaXJlY3RvcmllczoiLAorICAgICJObyIsCisgICAgIkluIHRoZSBWSU0gZGlyZWN0b3J5IiwKKyAgICAiSW4geW91ciBIT01FIGRpcmVjdG9yeSIsCit9Oworc3RhdGljIGludCAgICAgdmltZmlsZXNfZGlyX2Nob2ljZTsKKworLyogbm9uLXplcm8gd2hlbiBzZWxlY3RlZCB0byBpbnN0YWxsIHRoZSBwb3B1cCBtZW51IGVudHJ5LiAqLworc3RhdGljIGludAlpbnN0YWxsX3BvcHVwID0gMDsKKworLyogbm9uLXplcm8gd2hlbiBzZWxlY3RlZCB0byBpbnN0YWxsIHRoZSAiT3BlbiB3aXRoIiBlbnRyeS4gKi8KK3N0YXRpYyBpbnQJaW5zdGFsbF9vcGVud2l0aCA9IDA7CisKKy8qIG5vbi16ZXJvIHdoZW4gbmVlZCB0byBhZGQgYW4gdW5pbnN0YWxsIGVudHJ5IGluIHRoZSByZWdpc3RyeSAqLworc3RhdGljIGludAluZWVkX3VuaW5zdGFsbF9lbnRyeSA9IDA7CisKKy8qCisgKiBEZWZpbml0aW9ucyBvZiB0aGUgZGlyZWN0b3J5IG5hbWUgKHVuZGVyICRWSU0pIG9mIHRoZSB2aW1maWxlcyBkaXJlY3RvcnkKKyAqIGFuZCBpdHMgc3ViZGlyZWN0b3JpZXM6CisgKi8KK3N0YXRpYyBjaGFyCSoodmltZmlsZXNfc3ViZGlyc1tdKSA9Cit7CisgICAgImNvbG9ycyIsCisgICAgImNvbXBpbGVyIiwKKyAgICAiZG9jIiwKKyAgICAiZnRkZXRlY3QiLAorICAgICJmdHBsdWdpbiIsCisgICAgImluZGVudCIsCisgICAgImtleW1hcCIsCisgICAgInBsdWdpbiIsCisgICAgInN5bnRheCIsCit9OworCisvKgorICogQ29weSBhIGRpcmVjdG9yeSBuYW1lIGZyb20gImRpciIgdG8gImJ1ZiIsIGRvdWJsaW5nIGJhY2tzbGFzaGVzLgorICogQWxzbyBtYWtlIHN1cmUgaXQgZW5kcyBpbiBhIGRvdWJsZSBiYWNrc2xhc2guCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZG91YmxlX2JzKGNoYXIgKmRpciwgY2hhciAqYnVmKQoreworICAgIGNoYXIgKmQgPSBidWY7CisgICAgY2hhciAqczsKKworICAgIGZvciAocyA9IGRpcjsgKnM7ICsrcykKKyAgICB7CisJaWYgKCpzID09ICdcXCcpCisJICAgICpkKysgPSAnXFwnOworCSpkKysgPSAqczsKKyAgICB9CisgICAgLyogd2hlbiBkaXIgaXMgbm90IGVtcHR5LCBpdCBtdXN0IGVuZCBpbiBhIGRvdWJsZSBiYWNrc2xhc2ggKi8KKyAgICBpZiAoZCA+IGJ1ZiAmJiBkWy0xXSAhPSAnXFwnKQorICAgIHsKKwkqZCsrID0gJ1xcJzsKKwkqZCsrID0gJ1xcJzsKKyAgICB9CisgICAgKmQgPSBOVUw7Cit9CisKKy8qCisgKiBPYnRhaW4gYSBjaG9pY2UgZnJvbSBhIHRhYmxlLgorICogRmlyc3QgZW50cnkgaXMgYSBxdWVzdGlvbiwgb3RoZXJzIGFyZSBjaG9pY2VzLgorICovCisgICAgc3RhdGljIGludAorZ2V0X2Nob2ljZShjaGFyICoqdGFibGUsIGludCBlbnRyaWVzKQoreworICAgIGludAkJYW5zd2VyOworICAgIGludAkJaWR4OworICAgIGNoYXIJZHVtbXlbMTAwXTsKKworICAgIGRvCisgICAgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgZW50cmllczsgKytpZHgpCisJeworCSAgICBpZiAoaWR4KQorCQlwcmludGYoIiUyZCAgIiwgaWR4KTsKKwkgICAgcHJpbnRmKHRhYmxlW2lkeF0pOworCSAgICBwcmludGYoIlxuIik7CisJfQorCXByaW50ZigiQ2hvaWNlOiAiKTsKKwlpZiAoc2NhbmYoIiVkIiwgJmFuc3dlcikgIT0gMSkKKwl7CisJICAgIHNjYW5mKCIlOTlzIiwgZHVtbXkpOworCSAgICBhbnN3ZXIgPSAwOworCX0KKyAgICB9CisgICAgd2hpbGUgKGFuc3dlciA8IDEgfHwgYW5zd2VyID49IGVudHJpZXMpOworCisgICAgcmV0dXJuIGFuc3dlcjsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSB1c2VyIHVucGFja2VkIHRoZSBhcmNoaXZlcyBwcm9wZXJseS4KKyAqIFNldHMgInJ1bnRpbWVpZHgiLgorICovCisgICAgc3RhdGljIHZvaWQKK2NoZWNrX3VucGFjayh2b2lkKQoreworICAgIGNoYXIJYnVmW0JVRlNJWkVdOworICAgIEZJTEUJKmZkOworICAgIHN0cnVjdCBzdGF0CXN0OworCisgICAgLyogY2hlY2sgZm9yIHByZXNlbmNlIG9mIHRoZSBjb3JyZWN0IHZlcnNpb24gbnVtYmVyIGluIGluc3RhbGxkaXJbXSAqLworICAgIHJ1bnRpbWVpZHggPSBzdHJsZW4oaW5zdGFsbGRpcikgLSBzdHJsZW4oVklNX1ZFUlNJT05fTk9ET1QpOworICAgIGlmIChydW50aW1laWR4IDw9IDAKKwkgICAgfHwgc3RyaWNtcChpbnN0YWxsZGlyICsgcnVudGltZWlkeCwgVklNX1ZFUlNJT05fTk9ET1QpICE9IDAKKwkgICAgfHwgKGluc3RhbGxkaXJbcnVudGltZWlkeCAtIDFdICE9ICcvJworCQkmJiBpbnN0YWxsZGlyW3J1bnRpbWVpZHggLSAxXSAhPSAnXFwnKSkKKyAgICB7CisJcHJpbnRmKCJFUlJPUjogSW5zdGFsbCBwcm9ncmFtIG5vdCBpbiBkaXJlY3RvcnkgXCIlc1wiXG4iLAorCQlWSU1fVkVSU0lPTl9OT0RPVCk7CisJcHJpbnRmKCJUaGlzIHByb2dyYW0gY2FuIG9ubHkgd29yayB3aGVuIGl0IGlzIGxvY2F0ZWQgaW4gaXRzIG9yaWdpbmFsIGRpcmVjdG9yeVxuIik7CisJbXlleGl0KDEpOworICAgIH0KKworICAgIC8qIGNoZWNrIGlmIGZpbGV0eXBlLnZpbSBpcyBwcmVzZW50LCB3aGljaCBtZWFucyB0aGUgcnVudGltZSBhcmNoaXZlIGhhcworICAgICAqIGJlZW4gdW5wYWNrZWQgICovCisgICAgc3ByaW50ZihidWYsICIlc1xcZmlsZXR5cGUudmltIiwgaW5zdGFsbGRpcik7CisgICAgaWYgKHN0YXQoYnVmLCAmc3QpIDwgMCkKKyAgICB7CisJcHJpbnRmKCJFUlJPUjogQ2Fubm90IGZpbmQgZmlsZXR5cGUudmltIGluIFwiJXNcIlxuIiwgaW5zdGFsbGRpcik7CisJcHJpbnRmKCJJdCBsb29rcyBsaWtlIHlvdSBkaWQgbm90IHVucGFjayB0aGUgcnVudGltZSBhcmNoaXZlLlxuIik7CisJcHJpbnRmKCJZb3UgbXVzdCB1bnBhY2sgdGhlIHJ1bnRpbWUgYXJjaGl2ZSBcInZpbSVzcnQuemlwXCIgYmVmb3JlIGluc3RhbGxpbmcuXG4iLAorCQlWSU1fVkVSU0lPTl9OT0RPVCArIDMpOworCW15ZXhpdCgxKTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiB2aW0uZXhlIG9yIGd2aW0uZXhlIGlzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gKi8KKyAgICBpZiAoKGZkID0gZm9wZW4oImd2aW0uZXhlIiwgInIiKSkgIT0gTlVMTCkKKyAgICB7CisJZmNsb3NlKGZkKTsKKwloYXNfZ3ZpbSA9IDE7CisgICAgfQorICAgIGlmICgoZmQgPSBmb3BlbigidmltLmV4ZSIsICJyIikpICE9IE5VTEwpCisgICAgeworCWZjbG9zZShmZCk7CisJaGFzX3ZpbSA9IDE7CisgICAgfQorICAgIGlmICghaGFzX2d2aW0gJiYgIWhhc192aW0pCisgICAgeworCXByaW50ZigiRVJST1I6IENhbm5vdCBmaW5kIGFueSBWaW0gZXhlY3V0YWJsZXMgaW4gXCIlc1wiXG5cbiIsCisJCQkJCQkJCSAgaW5zdGFsbGRpcik7CisJbXlleGl0KDEpOworICAgIH0KK30KKworLyoKKyAqIENvbXBhcmUgcGF0aHMgInBbcGxlbl0iIHRvICJxW3FsZW5dIi4gIFJldHVybiAwIGlmIHRoZXkgbWF0Y2guCisgKiBJZ25vcmVzIGNhc2UgYW5kIGRpZmZlcmVuY2VzIGJldHdlZW4gJy8nIGFuZCAnXCcuCisgKiAicGxlbiIgYW5kICJxbGVuIiBjYW4gYmUgbmVnYXRpdmUsIHN0cmxlbigpIGlzIHVzZWQgdGhlbi4KKyAqLworICAgIHN0YXRpYyBpbnQKK3BhdGhjbXAoY2hhciAqcCwgaW50IHBsZW4sIGNoYXIgKnEsIGludCBxbGVuKQoreworICAgIGludAkJaTsKKworICAgIGlmIChwbGVuIDwgMCkKKwlwbGVuID0gc3RybGVuKHApOworICAgIGlmIChxbGVuIDwgMCkKKwlxbGVuID0gc3RybGVuKHEpOworICAgIGZvciAoaSA9IDA7IDsgKytpKQorICAgIHsKKwkvKiBFbmQgb2YgInAiOiBjaGVjayBpZiAicSIgYWxzbyBlbmRzIG9yIGp1c3QgaGFzIGEgc2xhc2guICovCisJaWYgKGkgPT0gcGxlbikKKwl7CisJICAgIGlmIChpID09IHFsZW4pICAvKiBtYXRjaCAqLworCQlyZXR1cm4gMDsKKwkgICAgaWYgKGkgPT0gcWxlbiAtIDEgJiYgKHFbaV0gPT0gJ1xcJyB8fCBxW2ldID09ICcvJykpCisJCXJldHVybiAwOyAgIC8qIG1hdGNoIHdpdGggdHJhaWxpbmcgc2xhc2ggKi8KKwkgICAgcmV0dXJuIDE7CSAgICAvKiBubyBtYXRjaCAqLworCX0KKworCS8qIEVuZCBvZiAicSI6IGNoZWNrIGlmICJwIiBhbHNvIGVuZHMgb3IganVzdCBoYXMgYSBzbGFzaC4gKi8KKwlpZiAoaSA9PSBxbGVuKQorCXsKKwkgICAgaWYgKGkgPT0gcGxlbikgIC8qIG1hdGNoICovCisJCXJldHVybiAwOworCSAgICBpZiAoaSA9PSBwbGVuIC0gMSAmJiAocFtpXSA9PSAnXFwnIHx8IHBbaV0gPT0gJy8nKSkKKwkJcmV0dXJuIDA7ICAgLyogbWF0Y2ggd2l0aCB0cmFpbGluZyBzbGFzaCAqLworCSAgICByZXR1cm4gMTsJICAgIC8qIG5vIG1hdGNoICovCisJfQorCisJaWYgKCEobXl0b3VwcGVyKHBbaV0pID09IG15dG91cHBlcihxW2ldKQorCQl8fCAoKHBbaV0gPT0gJy8nIHx8IHBbaV0gPT0gJ1xcJykKKwkJICAgICYmIChxW2ldID09ICcvJyB8fCBxW2ldID09ICdcXCcpKSkpCisJICAgIHJldHVybiAxOwkgICAgLyogbm8gbWF0Y2ggKi8KKyAgICB9CisgICAgLypOT1RSRUFDSEVEKi8KK30KKworLyoKKyAqIElmIHRoZSBleGVjdXRhYmxlICIqKmRlc3RpbmF0aW9uIiBpcyBpbiB0aGUgaW5zdGFsbCBkaXJlY3RvcnksIGZpbmQgYW5vdGhlcgorICogb25lIGluICRQQVRILgorICogT24gaW5wdXQgIioqZGVzdGluYXRpb24iIGlzIHRoZSBwYXRoIG9mIGFuIGV4ZWN1dGFibGUgaW4gYWxsb2NhdGVkIG1lbW9yeQorICogKG9yIE5VTEwpLgorICogIipkZXN0aW5hdGlvbiIgaXMgc2V0IHRvIE5VTEwgb3IgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZpbmRvbGRmaWxlKGNoYXIgKipkZXN0aW5hdGlvbikKK3sKKyAgICBjaGFyCSpicCA9ICpkZXN0aW5hdGlvbjsKKyAgICBzaXplX3QJaW5kaXJfbCA9IHN0cmxlbihpbnN0YWxsZGlyKTsKKyAgICBjaGFyCSpjcCA9IGJwICsgaW5kaXJfbDsKKyAgICBjaGFyCSp0bXBuYW1lOworICAgIGNoYXIJKmZhcm5hbWU7CisKKyAgICAvKgorICAgICAqIE5vIGFjdGlvbiBuZWVkZWQgaWYgZXhlIG5vdCBmb3VuZCBvciBub3QgaW4gdGhpcyBkaXJlY3RvcnkuCisgICAgICovCisgICAgaWYgKGJwID09IE5VTEwKKwkgICAgfHwgc3RybmljbXAoYnAsIGluc3RhbGxkaXIsIGluZGlyX2wpICE9IDAKKwkgICAgfHwgc3RyY2hyKCIvXFwiLCAqY3ArKykgPT0gTlVMTAorCSAgICB8fCBzdHJjaHIoY3AsICdcXCcpICE9IE5VTEwKKwkgICAgfHwgc3RyY2hyKGNwLCAnLycpICE9IE5VTEwpCisJcmV0dXJuOworCisgICAgdG1wbmFtZSA9IGFsbG9jKChpbnQpc3RybGVuKGNwKSArIDEpOworICAgIHN0cmNweSh0bXBuYW1lLCBjcCk7CisgICAgdG1wbmFtZVtzdHJsZW4odG1wbmFtZSkgLSAxXSA9ICd4JzsJLyogLmV4ZSAtPiAuZXh4ICovCisKKyAgICBpZiAoYWNjZXNzKHRtcG5hbWUsIDApID09IDApCisgICAgeworCXByaW50ZigiXG5FUlJPUjogJXMgYW5kICVzIGNsYXNoLiAgUmVtb3ZlIG9yIHJlbmFtZSAlcy5cbiIsCisJICAgIHRtcG5hbWUsIGNwLCB0bXBuYW1lKTsKKwlteWV4aXQoMSk7CisgICAgfQorCisgICAgaWYgKHJlbmFtZShjcCwgdG1wbmFtZSkgIT0gMCkKKyAgICB7CisJcHJpbnRmKCJcbkVSUk9SOiBmYWlsZWQgdG8gcmVuYW1lICVzIHRvICVzOiAlc1xuIiwKKwkgICAgY3AsIHRtcG5hbWUsIHN0cmVycm9yKDApKTsKKwlteWV4aXQoMSk7CisgICAgfQorCisgICAgZmFybmFtZSA9IHNlYXJjaHBhdGhfc2F2ZShjcCk7CisKKyAgICBpZiAocmVuYW1lKHRtcG5hbWUsIGNwKSAhPSAwKQorICAgIHsKKwlwcmludGYoIlxuRVJST1I6IGZhaWxlZCB0byByZW5hbWUgJXMgYmFjayB0byAlczogJXNcbiIsCisJICAgIHRtcG5hbWUsIGNwLCBzdHJlcnJvcigwKSk7CisJbXlleGl0KDEpOworICAgIH0KKworICAgIGZyZWUoKmRlc3RpbmF0aW9uKTsKKyAgICBmcmVlKHRtcG5hbWUpOworICAgICpkZXN0aW5hdGlvbiA9IGZhcm5hbWU7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGVyZSBpcyBhIHZpbS5bZXhlfGJhdHwsIGd2aW0uW2V4ZXxiYXR8LCBldGMuIGluIHRoZSBwYXRoLgorICogV2hlbiAiY2hlY2tfYmF0X29ubHkiIGlzIFRSVUUsIG9ubHkgZmluZCAiZGVmYXVsdF9iYXRfZGlyIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmaW5kX2JhdF9leGUoaW50IGNoZWNrX2JhdF9vbmx5KQoreworICAgIGludAkJaTsKKworICAgIG1jaF9jaGRpcihzeXNkcml2ZSk7CS8qIGF2b2lkIGxvb2tpbmcgaW4gdGhlICJpbnN0YWxsZGlyIiAqLworCisgICAgZm9yIChpID0gMTsgaSA8IFRBUkdFVF9DT1VOVDsgKytpKQorICAgIHsKKwl0YXJnZXRzW2ldLm9sZGJhdCA9IHNlYXJjaHBhdGhfc2F2ZSh0YXJnZXRzW2ldLmJhdG5hbWUpOworCWlmICghY2hlY2tfYmF0X29ubHkpCisJICAgIHRhcmdldHNbaV0ub2xkZXhlID0gc2VhcmNocGF0aF9zYXZlKHRhcmdldHNbaV0uZXhlbmFtZSk7CisKKwlpZiAoZGVmYXVsdF9iYXRfZGlyID09IE5VTEwgJiYgdGFyZ2V0c1tpXS5vbGRiYXQgIT0gTlVMTCkKKwl7CisJICAgIGRlZmF1bHRfYmF0X2RpciA9IGFsbG9jKHN0cmxlbih0YXJnZXRzW2ldLm9sZGJhdCkgKyAxKTsKKwkgICAgc3RyY3B5KGRlZmF1bHRfYmF0X2RpciwgdGFyZ2V0c1tpXS5vbGRiYXQpOworCSAgICByZW1vdmVfdGFpbChkZWZhdWx0X2JhdF9kaXIpOworCX0KKwlpZiAoY2hlY2tfYmF0X29ubHkgJiYgdGFyZ2V0c1tpXS5vbGRiYXQgIT0gTlVMTCkKKwkgICAgZnJlZSh0YXJnZXRzW2ldLm9sZGJhdCk7CisgICAgfQorCisgICAgbWNoX2NoZGlyKGluc3RhbGxkaXIpOworfQorCisjaWZkZWYgV0lOMzI2NAorLyoKKyAqIEdldCB0aGUgdmFsdWUgb2YgJFZJTVJVTlRJTUUgb3IgJFZJTSBhbmQgd3JpdGUgaXQgaW4gJFRFTVAvdmltaW5pLmluaSwgc28KKyAqIHRoYXQgTlNJUyBjYW4gcmVhZCBpdC4KKyAqIFdoZW4gbm90IHNldCwgdXNlIHRoZSBkaXJlY3Rvcnkgb2YgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBWaW0uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ2V0X3ZpbV9lbnYodm9pZCkKK3sKKyAgICBjaGFyCSp2aW07CisgICAgY2hhcglidWZbQlVGU0laRV07CisgICAgRklMRQkqZmQ7CisgICAgY2hhcglmbmFtZVtCVUZTSVpFXTsKKworICAgIC8qIEZpcnN0IGdldCAkVklNUlVOVElNRS4gIElmIGl0J3Mgc2V0LCByZW1vdmUgdGhlIHRhaWwuICovCisgICAgdmltID0gZ2V0ZW52KCJWSU1SVU5USU1FIik7CisgICAgaWYgKHZpbSAhPSBOVUxMICYmICp2aW0gIT0gMCkKKyAgICB7CisJc3RyY3B5KGJ1ZiwgdmltKTsKKwlyZW1vdmVfdGFpbChidWYpOworCXZpbSA9IGJ1ZjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwl2aW0gPSBnZXRlbnYoIlZJTSIpOworCWlmICh2aW0gPT0gTlVMTCB8fCAqdmltID09IDApCisJeworCSAgICAvKiBVc2UgdGhlIGRpcmVjdG9yeSBmcm9tIGFuIG9sZCB1bmluc3RhbGwgZW50cnkuICovCisJICAgIGlmIChkZWZhdWx0X3ZpbV9kaXIgIT0gTlVMTCkKKwkJdmltID0gZGVmYXVsdF92aW1fZGlyOworCSAgICBlbHNlCisJCS8qIExldCBOU0lTIGtub3cgdGhlcmUgaXMgbm8gZGVmYXVsdCwgaXQgc2hvdWxkIHVzZQorCQkgKiAkUFJPR1JBTUZJbEVTLiAqLworCQl2aW0gPSAiIjsKKwl9CisgICAgfQorCisgICAgLyogTlNJUyBhbHNvIHVzZXMgR2V0VGVtcFBhdGgoKSwgdGh1cyB3ZSBzaG91bGQgZ2V0IHRoZSBzYW1lIGRpcmVjdG9yeQorICAgICAqIG5hbWUgYXMgd2hlcmUgTlNJUyB3aWxsIGxvb2sgZm9yIHZpbWluaS5pbmkuICovCisgICAgR2V0VGVtcFBhdGgoQlVGU0laRSwgZm5hbWUpOworICAgIGFkZF9wYXRoc2VwKGZuYW1lKTsKKyAgICBzdHJjYXQoZm5hbWUsICJ2aW1pbmkuaW5pIik7CisKKyAgICBmZCA9IGZvcGVuKGZuYW1lLCAidyIpOworICAgIGlmIChmZCAhPSBOVUxMKQorICAgIHsKKwkvKiBNYWtlIGl0IGxvb2sgbGlrZSBhbiAuaW5pIGZpbGUsIHNvIHRoYXQgTlNJUyBjYW4gcmVhZCBpdCB3aXRoIGEKKwkgKiBSZWFkSU5JU3RyIGNvbW1hbmQuICovCisJZnByaW50ZihmZCwgIlt2aW1pbmldXG4iKTsKKwlmcHJpbnRmKGZkLCAiZGlyPVwiJXNcIlxuIiwgdmltKTsKKwlmY2xvc2UoZmQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXByaW50ZigiRmFpbGVkIHRvIG9wZW4gJXNcbiIsIGZuYW1lKTsKKwlTbGVlcCgyMDAwKTsKKyAgICB9Cit9CisKKy8qCisgKiBDaGVjayBmb3IgYWxyZWFkeSBpbnN0YWxsZWQgVmltcy4KKyAqIFJldHVybiBub24temVybyB3aGVuIGZvdW5kIG9uZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK3VuaW5zdGFsbF9jaGVjayh2b2lkKQoreworICAgIEhLRVkJa2V5X2hhbmRsZTsKKyAgICBIS0VZCXVuaW5zdGFsbF9rZXlfaGFuZGxlOworICAgIGNoYXIJKnVuaW5zdGFsbF9rZXkgPSAic29mdHdhcmVcXE1pY3Jvc29mdFxcV2luZG93c1xcQ3VycmVudFZlcnNpb25cXFVuaW5zdGFsbCI7CisgICAgY2hhcglzdWJrZXlfbmFtZV9idWZmW0JVRlNJWkVdOworICAgIGNoYXIJdGVtcF9zdHJpbmdfYnVmZmVyW0JVRlNJWkVdOworICAgIERXT1JECWxvY2FsX2J1ZnNpemUgPSBCVUZTSVpFOworICAgIEZJTEVUSU1FCXRlbXBfcGZpbGV0aW1lOworICAgIERXT1JECWtleV9pbmRleDsKKyAgICBjaGFyCWlucHV0OworICAgIGxvbmcJY29kZTsKKyAgICBEV09SRAl2YWx1ZV90eXBlOworICAgIERXT1JECW9yaWdfbnVtX2tleXM7CisgICAgRFdPUkQJbmV3X251bV9rZXlzOworICAgIGludAkJZm91bmRvbmUgPSAwOworCisgICAgY29kZSA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIHVuaW5zdGFsbF9rZXksIDAsIEtFWV9SRUFELAorCQkJCQkJCQkgJmtleV9oYW5kbGUpOworICAgIENIRUNLX1JFR19FUlJPUihjb2RlKTsKKworICAgIGZvciAoa2V5X2luZGV4ID0gMDsKKwkgUmVnRW51bUtleUV4KGtleV9oYW5kbGUsIGtleV9pbmRleCwgc3Via2V5X25hbWVfYnVmZiwgJmxvY2FsX2J1ZnNpemUsCisJCU5VTEwsIE5VTEwsIE5VTEwsICZ0ZW1wX3BmaWxldGltZSkgIT0gRVJST1JfTk9fTU9SRV9JVEVNUzsKKwkgICAga2V5X2luZGV4KyspCisgICAgeworCWxvY2FsX2J1ZnNpemUgPSBCVUZTSVpFOworCWlmIChzdHJuY21wKCJWaW0iLCBzdWJrZXlfbmFtZV9idWZmLCAzKSA9PSAwKQorCXsKKwkgICAgLyogT3BlbiB0aGUga2V5IG5hbWVkIFZpbSogKi8KKwkgICAgY29kZSA9IFJlZ09wZW5LZXlFeChrZXlfaGFuZGxlLCBzdWJrZXlfbmFtZV9idWZmLCAwLCBLRVlfUkVBRCwKKwkJICAgICZ1bmluc3RhbGxfa2V5X2hhbmRsZSk7CisJICAgIENIRUNLX1JFR19FUlJPUihjb2RlKTsKKworCSAgICAvKiBnZXQgdGhlIERpc3BsYXlOYW1lIG91dCBvZiBpdCB0byBzaG93IHRoZSB1c2VyICovCisJICAgIGNvZGUgPSBSZWdRdWVyeVZhbHVlRXgodW5pbnN0YWxsX2tleV9oYW5kbGUsICJkaXNwbGF5bmFtZSIsIDAsCisJCSAgICAmdmFsdWVfdHlwZSwgKExQQllURSl0ZW1wX3N0cmluZ19idWZmZXIsCisJCSAgICAmbG9jYWxfYnVmc2l6ZSk7CisJICAgIGxvY2FsX2J1ZnNpemUgPSBCVUZTSVpFOworCSAgICBDSEVDS19SRUdfRVJST1IoY29kZSk7CisKKwkgICAgZm91bmRvbmUgPSAxOworCSAgICBwcmludGYoIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKwkgICAgcHJpbnRmKCJWaW0gSW5zdGFsbCBmb3VuZCB3aGF0IGxvb2tzIGxpa2UgYW4gZXhpc3RpbmcgVmltIHZlcnNpb24uXG4iKTsKKwkgICAgcHJpbnRmKCJUaGUgbmFtZSBvZiB0aGUgZW50cnkgaXM6XG4iKTsKKwkgICAgcHJpbnRmKCJcbiAgICAgICAgXCIlc1wiXG5cbiIsIHRlbXBfc3RyaW5nX2J1ZmZlcik7CisKKwkgICAgcHJpbnRmKCJJbnN0YWxsaW5nIHRoZSBuZXcgdmVyc2lvbiB3aWxsIGRpc2FibGUgcGFydCBvZiB0aGUgZXhpc3RpbmcgdmVyc2lvbi5cbiIpOworCSAgICBwcmludGYoIihUaGUgYmF0Y2ggZmlsZXMgdXNlZCBpbiBhIGNvbnNvbGUgYW5kIHRoZSBcIkVkaXQgd2l0aCBWaW1cIiBlbnRyeSBpblxuIik7CisJICAgIHByaW50ZigidGhlIHBvcHVwIG1lbnUgd2lsbCB1c2UgdGhlIG5ldyB2ZXJzaW9uKVxuIik7CisKKwkgICAgcHJpbnRmKCJcbkRvIHlvdSB3YW50IHRvIHVuaW5zdGFsbCBcIiVzXCIgbm93P1xuKHkpZXMvKG4pbykgICIsIHRlbXBfc3RyaW5nX2J1ZmZlcik7CisJICAgIGZmbHVzaChzdGRvdXQpOworCisJICAgIC8qIGdldCB0aGUgVW5pbnN0YWxsU3RyaW5nICovCisJICAgIGNvZGUgPSBSZWdRdWVyeVZhbHVlRXgodW5pbnN0YWxsX2tleV9oYW5kbGUsICJ1bmluc3RhbGxzdHJpbmciLCAwLAorCQkgICAgJnZhbHVlX3R5cGUsIChMUEJZVEUpdGVtcF9zdHJpbmdfYnVmZmVyLCAmbG9jYWxfYnVmc2l6ZSk7CisJICAgIGxvY2FsX2J1ZnNpemUgPSBCVUZTSVpFOworCSAgICBDSEVDS19SRUdfRVJST1IoY29kZSk7CisKKwkgICAgLyogUmVtZW1iZXIgdGhlIGRpcmVjdG9yeSwgaXQgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBmb3IgTlNJUy4gKi8KKwkgICAgZGVmYXVsdF92aW1fZGlyID0gYWxsb2Moc3RybGVuKHRlbXBfc3RyaW5nX2J1ZmZlcikgKyAxKTsKKwkgICAgc3RyY3B5KGRlZmF1bHRfdmltX2RpciwgdGVtcF9zdHJpbmdfYnVmZmVyKTsKKwkgICAgcmVtb3ZlX3RhaWwoZGVmYXVsdF92aW1fZGlyKTsKKwkgICAgcmVtb3ZlX3RhaWwoZGVmYXVsdF92aW1fZGlyKTsKKworCSAgICBpbnB1dCA9ICduJzsKKwkgICAgZG8KKwkgICAgeworCQlpZiAoaW5wdXQgIT0gJ24nKQorCQkgICAgcHJpbnRmKCIlYyBpcyBhbiBpbnZhbGlkIHJlcGx5LiAgUGxlYXNlIGVudGVyIGVpdGhlciAneScgb3IgJ24nXG4iLCBpbnB1dCk7CisKKwkJcmV3aW5kKHN0ZGluKTsKKwkJc2NhbmYoIiVjIiwgJmlucHV0KTsKKwkJc3dpdGNoIChpbnB1dCkKKwkJeworCQkgICAgY2FzZSAneSc6CisJCSAgICBjYXNlICdZJzoKKwkJCS8qIHNhdmUgdGhlIG51bWJlciBvZiB1bmluc3RhbGwga2V5cyBzbyB3ZSBjYW4ga25vdyBpZgorCQkJICogaXQgY2hhbmdlZCAqLworCQkJUmVnUXVlcnlJbmZvS2V5KGtleV9oYW5kbGUsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJCSAgICAgJm9yaWdfbnVtX2tleXMsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJCQkgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkJLyogRGVsZXRlIHRoZSB1bmluc3RhbGwga2V5LiAgSXQgaGFzIG5vIHN1YmtleXMsIHNvCisJCQkgKiB0aGlzIGlzIGVhc3kuICBEbyB0aGlzIGJlZm9yZSB1bmluc3RhbGxpbmcsIHRoYXQKKwkJCSAqIG1heSB0cnkgdG8gZGVsZXRlIHRoZSBrZXkgYXMgd2VsbC4gKi8KKwkJCVJlZ0RlbGV0ZUtleShrZXlfaGFuZGxlLCBzdWJrZXlfbmFtZV9idWZmKTsKKworCQkJLyogRmluZCBleGlzdGluZyAuYmF0IGZpbGVzIGJlZm9yZSBkZWxldGluZyB0aGVtLiAgKi8KKwkJCWZpbmRfYmF0X2V4ZShUUlVFKTsKKworCQkJLyogRXhlY3V0ZSB0aGUgdW5pbnN0YWxsIHByb2dyYW0uICBQdXQgaXQgaW4gZG91YmxlCisJCQkgKiBxdW90ZXMgaWYgdGhlcmUgaXMgYW4gZW1iZWRkZWQgc3BhY2UuICovCisJCQlpZiAoc3RyY2hyKHRlbXBfc3RyaW5nX2J1ZmZlciwgJyAnKSAhPSBOVUxMKQorCQkJeworCQkJICAgIGNoYXIgYnVmW0JVRlNJWkVdOworCisJCQkgICAgc3RyY3B5KGJ1ZiwgdGVtcF9zdHJpbmdfYnVmZmVyKTsKKwkJCSAgICBzcHJpbnRmKHRlbXBfc3RyaW5nX2J1ZmZlciwgIlwiJXNcIiIsIGJ1Zik7CisJCQl9CisJCQlydW5fY29tbWFuZCh0ZW1wX3N0cmluZ19idWZmZXIpOworCisJCQkvKiBDaGVjayBpZiBhbiB1bmlzdGFsbCByZWcga2V5IHdhcyBkZWxldGVkLgorCQkJICogaWYgaXQgd2FzLCB3ZSB3YW50IHRvIGRlY3JlbWVudCBrZXlfaW5kZXguCisJCQkgKiBpZiB3ZSBkb24ndCBkbyB0aGlzLCB3ZSB3aWxsIHNraXAgdGhlIGtleQorCQkJICogaW1tZWRpYXRlbHkgYWZ0ZXIgYW55IGtleSB0aGF0IHdlIGRlbGV0ZS4gICovCisJCQlSZWdRdWVyeUluZm9LZXkoa2V5X2hhbmRsZSwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkJICAgICAgJm5ld19udW1fa2V5cywgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkJCSAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJaWYgKG5ld19udW1fa2V5cyA8IG9yaWdfbnVtX2tleXMpCisJCQkgICAga2V5X2luZGV4LS07CisKKwkJCWlucHV0ID0gJ3knOworCQkJYnJlYWs7CisKKwkJICAgIGNhc2UgJ24nOgorCQkgICAgY2FzZSAnTic6CisJCQkvKiBEbyBub3QgdW5pbnN0YWxsICovCisJCQlpbnB1dCA9ICduJzsKKwkJCWJyZWFrOworCisJCSAgICBkZWZhdWx0OiAvKiBqdXN0IGRyb3AgdGhyb3VnaCBhbmQgcmVkbyB0aGUgbG9vcCAqLworCQkJYnJlYWs7CisJCX0KKworCSAgICB9IHdoaWxlIChpbnB1dCAhPSAnbicgJiYgaW5wdXQgIT0gJ3knKTsKKworCSAgICBSZWdDbG9zZUtleSh1bmluc3RhbGxfa2V5X2hhbmRsZSk7CisJfQorICAgIH0KKyAgICBSZWdDbG9zZUtleShrZXlfaGFuZGxlKTsKKworICAgIHJldHVybiBmb3VuZG9uZTsKK30KKyNlbmRpZgorCisvKgorICogRmluZCBvdXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5c3RlbS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitpbnNwZWN0X3N5c3RlbSh2b2lkKQoreworICAgIGNoYXIJKnA7CisgICAgY2hhcglidWZbQlVGU0laRV07CisgICAgRklMRQkqZmQ7CisgICAgaW50CQlpOworICAgIGludAkJZm91bmRvbmU7CisKKyAgICAvKiBUaGlzIG1heSB0YWtlIGEgbGl0dGxlIHdoaWxlLCBsZXQgdGhlIHVzZXIga25vdyB3aGF0IHdlJ3JlIGRvaW5nLiAqLworICAgIHByaW50ZigiSW5zcGVjdGluZyBzeXN0ZW0uLi5cbiIpOworCisgICAgLyoKKyAgICAgKiBJZiAkVklNIGlzIHNldCwgY2hlY2sgdGhhdCBpdCdzIHBvaW50aW5nIHRvIG91ciBkaXJlY3RvcnkuCisgICAgICovCisgICAgcCA9IGdldGVudigiVklNIik7CisgICAgaWYgKHAgIT0gTlVMTCAmJiBwYXRoY21wKHAsIC0xLCBpbnN0YWxsZGlyLCBydW50aW1laWR4IC0gMSkgIT0gMCkKKyAgICB7CisJcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50ZigiJFZJTSBpcyBzZXQgdG8gXCIlc1wiLlxuIiwgcCk7CisJcHJpbnRmKCJUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHdoZXJlIHRoaXMgdmVyc2lvbiBvZiBWaW0gaXM6XG4iKTsKKwlzdHJjcHkoYnVmLCBpbnN0YWxsZGlyKTsKKwkqKGJ1ZiArIHJ1bnRpbWVpZHggLSAxKSA9IE5VTDsKKwlwcmludGYoIlwiJXNcIlxuIiwgYnVmKTsKKwlwcmludGYoIllvdSBtdXN0IGFkanVzdCBvciByZW1vdmUgdGhlIHNldHRpbmcgb2YgJFZJTSxcbiIpOworCWlmIChpbnRlcmFjdGl2ZSkKKwl7CisJICAgIHByaW50ZigidG8gYmUgYWJsZSB0byB1c2UgdGhpcyBpbnN0YWxsIHByb2dyYW0uXG4iKTsKKwkgICAgbXlleGl0KDEpOworCX0KKwlwcmludGYoIm90aGVyd2lzZSBWaW0gV0lMTCBOT1QgV09SSyBwcm9wZXJseSFcbiIpOworCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmICRWSU1SVU5USU1FIGlzIHNldCwgY2hlY2sgdGhhdCBpdCdzIHBvaW50aW5nIHRvIG91ciBydW50aW1lIGRpcmVjdG9yeS4KKyAgICAgKi8KKyAgICBwID0gZ2V0ZW52KCJWSU1SVU5USU1FIik7CisgICAgaWYgKHAgIT0gTlVMTCAmJiBwYXRoY21wKHAsIC0xLCBpbnN0YWxsZGlyLCAtMSkgIT0gMCkKKyAgICB7CisJcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50ZigiJFZJTVJVTlRJTUUgaXMgc2V0IHRvIFwiJXNcIi5cbiIsIHApOworCXByaW50ZigiVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB3aGVyZSB0aGlzIHZlcnNpb24gb2YgVmltIGlzOlxuIik7CisJcHJpbnRmKCJcIiVzXCJcbiIsIGluc3RhbGxkaXIpOworCXByaW50ZigiWW91IG11c3QgYWRqdXN0IG9yIHJlbW92ZSB0aGUgc2V0dGluZyBvZiAkVklNUlVOVElNRSxcbiIpOworCWlmIChpbnRlcmFjdGl2ZSkKKwl7CisJICAgIHByaW50ZigidG8gYmUgYWJsZSB0byB1c2UgdGhpcyBpbnN0YWxsIHByb2dyYW0uXG4iKTsKKwkgICAgbXlleGl0KDEpOworCX0KKwlwcmludGYoIm90aGVyd2lzZSBWaW0gV0lMTCBOT1QgV09SSyBwcm9wZXJseSFcbiIpOworCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHRoZXJlIGlzIGEgdmltLltleGV8YmF0fCwgZ3ZpbS5bZXhlfGJhdHwsIGV0Yy4gaW4gdGhlIHBhdGguCisgICAgICovCisgICAgZmluZF9iYXRfZXhlKEZBTFNFKTsKKworICAgIC8qCisgICAgICogQSAuZXhlIGluIHRoZSBpbnN0YWxsIGRpcmVjdG9yeSBtYXkgYmUgZm91bmQgYW55d2F5IG9uIFdpbmRvd3MgMjAwMC4KKyAgICAgKiBDaGVjayBmb3IgdGhpcyBzaXR1YXRpb24gYW5kIGZpbmQgYW5vdGhlciBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeS4KKyAgICAgKiB3LmJyaXNjb2VAcG9ubC5jb20gMjAwMS0wMS0yMAorICAgICAqLworICAgIGZvdW5kb25lID0gMDsKKyAgICBmb3IgKGkgPSAxOyBpIDwgVEFSR0VUX0NPVU5UOyArK2kpCisgICAgeworCWZpbmRvbGRmaWxlKCYodGFyZ2V0c1tpXS5vbGRleGUpKTsKKwlpZiAodGFyZ2V0c1tpXS5vbGRleGUgIT0gTlVMTCkKKwkgICAgZm91bmRvbmUgPSAxOworICAgIH0KKworICAgIGlmIChmb3VuZG9uZSkKKyAgICB7CisJcHJpbnRmKCJXYXJuaW5nOiBGb3VuZCBWaW0gZXhlY3V0YWJsZShzKSBpbiB5b3VyICRQQVRIOlxuIik7CisJZm9yIChpID0gMTsgaSA8IFRBUkdFVF9DT1VOVDsgKytpKQorCSAgICBpZiAodGFyZ2V0c1tpXS5vbGRleGUgIT0gTlVMTCkKKwkJcHJpbnRmKCIlc1xuIiwgdGFyZ2V0c1tpXS5vbGRleGUpOworCXByaW50ZigiSXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHZlcnNpb24geW91IGFyZSBpbnN0YWxsaW5nLlxuIik7CisJcHJpbnRmKCJQbGVhc2UgZGVsZXRlIG9yIHJlbmFtZSBpdCwgb3IgYWRqdXN0IHlvdXIgJFBBVEggc2V0dGluZy5cbiIpOworICAgIH0KKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgLi4vX3ZpbXJjIG9yIC4uLy52aW1yYyBmaWxlLgorICAgICAqLworICAgIHN0cmNweShvbGR2aW1yYywgaW5zdGFsbGRpcik7CisgICAgc3RyY3B5KG9sZHZpbXJjICsgcnVudGltZWlkeCwgIl92aW1yYyIpOworICAgIGlmICgoZmQgPSBmb3BlbihvbGR2aW1yYywgInIiKSkgPT0gTlVMTCkKKyAgICB7CisJc3RyY3B5KG9sZHZpbXJjICsgcnVudGltZWlkeCwgInZpbXJjfjEiKTsgLyogc2hvcnQgdmVyc2lvbiBvZiAudmltcmMgKi8KKwlpZiAoKGZkID0gZm9wZW4ob2xkdmltcmMsICJyIikpID09IE5VTEwpCisJeworCSAgICBzdHJjcHkob2xkdmltcmMgKyBydW50aW1laWR4LCAiLnZpbXJjIik7CisJICAgIGZkID0gZm9wZW4ob2xkdmltcmMsICJyIik7CisJfQorICAgIH0KKyAgICBpZiAoZmQgIT0gTlVMTCkKKwlmY2xvc2UoZmQpOworICAgIGVsc2UKKwkqb2xkdmltcmMgPSBOVUw7CisKKyNpZiAwIC8qIGN1cnJlbnRseSBub3QgdXNlZCAqLworICAgIC8qCisgICAgICogR2V0IGRlZmF1bHQgaG9tZSBkaXJlY3RvcnkuCisgICAgICogUHJlZmVyICRIT01FIGlmIGl0J3Mgc2V0LiAgRm9yIFdpbiBOVCB1c2UgJEhPTUVEUklWRSBhbmQgJEhPTUVQQVRILgorICAgICAqIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYSAiYzoiIGRyaXZlIHVzZSB0aGF0LgorICAgICAqLworICAgIHAgPSBnZXRlbnYoIkhPTUUiKTsKKyAgICBpZiAocCAhPSBOVUxMICYmICpwICE9IE5VTCAmJiBzdHJsZW4ocCkgPCBCVUZTSVpFKQorCXN0cmNweShob21lZGlyLCBwKTsKKyAgICBlbHNlCisgICAgeworCXAgPSBnZXRlbnYoIkhPTUVEUklWRSIpOworCWlmIChwICE9IE5VTEwgJiYgKnAgIT0gTlVMICYmIHN0cmxlbihwKSArIDIgPCBCVUZTSVpFKQorCXsKKwkgICAgc3RyY3B5KGhvbWVkaXIsIHApOworCSAgICBwID0gZ2V0ZW52KCJIT01FUEFUSCIpOworCSAgICBpZiAocCAhPSBOVUxMICYmICpwICE9IE5VTCAmJiBzdHJsZW4oaG9tZWRpcikgKyBzdHJsZW4ocCkgPCBCVUZTSVpFKQorCQlzdHJjYXQoaG9tZWRpciwgcCk7CisJICAgIGVsc2UKKwkJc3RyY2F0KGhvbWVkaXIsICJcXCIpOworCX0KKwllbHNlCisJeworCSAgICBzdHJ1Y3Qgc3RhdCBzdDsKKworCSAgICBpZiAoc3RhdCgiYzpcXCIsICZzdCkgPT0gMCkKKwkJc3RyY3B5KGhvbWVkaXIsICJjOlxcIik7CisJICAgIGVsc2UKKwkJKmhvbWVkaXIgPSBOVUw7CisJfQorICAgIH0KKyNlbmRpZgorfQorCisvKgorICogQWRkIGEgZHVtbXkgY2hvaWNlIHRvIGF2b2lkIHRoYXQgdGhlIG51bWJlcmluZyBjaGFuZ2VzIGRlcGVuZGluZyBvbiBpdGVtcworICogaW4gdGhlIGVudmlyb25tZW50LiAgVGhlIHVzZXIgbWF5IHR5cGUgYSBudW1iZXIgaGUgcmVtZW1iZXJlZCB3aXRob3V0CisgKiBsb29raW5nLgorICovCisgICAgc3RhdGljIHZvaWQKK2FkZF9kdW1teV9jaG9pY2Uodm9pZCkKK3sKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uaW5zdGFsbGZ1bmMgPSBOVUxMOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5hY3RpdmUgPSAwOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5jaGFuZ2VmdW5jID0gTlVMTDsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uaW5zdGFsbGZ1bmMgPSBOVUxMOworICAgICsrY2hvaWNlX2NvdW50OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN0dWZmIGZvciBjcmVhdGluZyB0aGUgYmF0Y2ggZmlsZXMuCisgKi8KKworLyoKKyAqIEluc3RhbGwgdGhlIHZpbS5iYXQsIGd2aW0uYmF0LCBldGMuIGZpbGVzLgorICovCisgICAgc3RhdGljIHZvaWQKK2luc3RhbGxfYmF0X2Nob2ljZShpbnQgaWR4KQoreworICAgIGNoYXIJKmJhdHBhdGggPSB0YXJnZXRzW2Nob2ljZXNbaWR4XS5hcmddLmJhdHBhdGg7CisgICAgY2hhcgkqb2xkbmFtZSA9IHRhcmdldHNbY2hvaWNlc1tpZHhdLmFyZ10ub2xkYmF0OworICAgIGNoYXIJKmV4ZW5hbWUgPSB0YXJnZXRzW2Nob2ljZXNbaWR4XS5hcmddLmV4ZW5hbWVhcmc7CisgICAgY2hhcgkqdmltYXJnID0gdGFyZ2V0c1tjaG9pY2VzW2lkeF0uYXJnXS5leGVhcmc7CisgICAgRklMRQkqZmQ7CisgICAgY2hhcglidWZbQlVGU0laRV07CisKKyAgICBpZiAoKmJhdHBhdGggIT0gTlVMKQorICAgIHsKKwlmZCA9IGZvcGVuKGJhdHBhdGgsICJ3Iik7CisJaWYgKGZkID09IE5VTEwpCisJICAgIHByaW50ZigiXG5FUlJPUjogQ2Fubm90IG9wZW4gXCIlc1wiIGZvciB3cml0aW5nLlxuIiwgYmF0cGF0aCk7CisJZWxzZQorCXsKKwkgICAgbmVlZF91bmluc3RhbGxfZW50cnkgPSAxOworCisJICAgIGZwcmludGYoZmQsICJAZWNobyBvZmZcbiIpOworCSAgICBmcHJpbnRmKGZkLCAicmVtIC0tIFJ1biBWaW0gLS1cblxuIik7CisKKwkgICAgc3RyY3B5KGJ1ZiwgaW5zdGFsbGRpcik7CisJICAgIGJ1ZltydW50aW1laWR4IC0gMV0gPSBOVUw7CisJICAgIC8qIERvbid0IHVzZSBkb3VibGUgcXVvdGVzIGZvciB0aGUgdmFsdWUgaGVyZSwgYWxzbyB3aGVuIGJ1ZgorCSAgICAgKiBjb250YWlucyBhIHNwYWNlLiAgVGhlIHF1b3RlcyB3b3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgdmFsdWUKKwkgICAgICogZm9yIE1TRE9TIGFuZCBOVC4gKi8KKwkgICAgZnByaW50ZihmZCwgInNldCBWSU09JXNcblxuIiwgYnVmKTsKKworCSAgICBzdHJjcHkoYnVmLCBpbnN0YWxsZGlyICsgcnVudGltZWlkeCk7CisJICAgIGFkZF9wYXRoc2VwKGJ1Zik7CisJICAgIHN0cmNhdChidWYsIGV4ZW5hbWUpOworCisJICAgIC8qIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBleGVjdXRhYmxlIGNvdWxkIG5vdCBiZSBmb3VuZC4gKi8KKwkgICAgZnByaW50ZihmZCwgImlmIGV4aXN0IFwiJSVWSU0lJVxcJXNcIiBnb3RvIGhhdmV2aW1cbiIsIGJ1Zik7CisJICAgIGZwcmludGYoZmQsICJlY2hvIFwiJSVWSU0lJVxcJXNcIiBub3QgZm91bmRcbiIsIGJ1Zik7CisJICAgIGZwcmludGYoZmQsICJnb3RvIGVvZlxuXG4iKTsKKwkgICAgZnByaW50ZihmZCwgIjpoYXZldmltXG4iKTsKKworCSAgICBmcHJpbnRmKGZkLCAicmVtIGNvbGxlY3QgdGhlIGFyZ3VtZW50cyBpbiBWSU1BUkdTIGZvciBXaW45NVxuIik7CisJICAgIGZwcmludGYoZmQsICJzZXQgVklNQVJHUz1cbiIpOworCSAgICBpZiAoKmV4ZW5hbWUgPT0gJ2cnKQorCQlmcHJpbnRmKGZkLCAic2V0IFZJTU5PRk9SSz1cbiIpOworCSAgICBmcHJpbnRmKGZkLCAiOmxvb3BzdGFydFxuIik7CisJICAgIGZwcmludGYoZmQsICJpZiAuJSUxPT0uIGdvdG8gbG9vcGVuZFxuIik7CisJICAgIGlmICgqZXhlbmFtZSA9PSAnZycpCisJICAgIHsKKwkJZnByaW50ZihmZCwgImlmIE5PVCAuJSUxPT0uLWYgZ290byBub2ZvcmthcmdcbiIpOworCQlmcHJpbnRmKGZkLCAic2V0IFZJTU5PRk9SSz0xXG4iKTsKKwkJZnByaW50ZihmZCwgIjpub2ZvcmthcmdcbiIpOworCSAgICB9CisJICAgIGZwcmludGYoZmQsICJzZXQgVklNQVJHUz0lJVZJTUFSR1MlJSAlJTFcbiIpOworCSAgICBmcHJpbnRmKGZkLCAic2hpZnRcbiIpOworCSAgICBmcHJpbnRmKGZkLCAiZ290byBsb29wc3RhcnRcblxuIik7CisJICAgIGZwcmludGYoZmQsICI6bG9vcGVuZFxuIik7CisKKwkgICAgZnByaW50ZihmZCwgImlmIC4lJU9TJSU9PS5XaW5kb3dzX05UIGdvdG8gbnRhY3Rpb25cblxuIik7CisKKwkgICAgLyogRm9yIGd2aW0uZXhlIHVzZSAic3RhcnQiIHRvIGF2b2lkIHRoYXQgdGhlIGNvbnNvbGUgd2luZG93IHN0YXlzCisJICAgICAqIG9wZW4uICovCisJICAgIGlmICgqZXhlbmFtZSA9PSAnZycpCisJICAgIHsKKwkJZnByaW50ZihmZCwgImlmIC4lJVZJTU5PRk9SSyUlPT0uMSBnb3RvIG5vZm9ya1xuIik7CisJCWZwcmludGYoZmQsICJzdGFydCAiKTsKKwkgICAgfQorCisJICAgIC8qIERvIHVzZSBxdW90ZXMgaGVyZSBpZiB0aGUgcGF0aCBpbmNsdWRlcyBhIHNwYWNlLiAqLworCSAgICBpZiAoc3RyY2hyKGluc3RhbGxkaXIsICcgJykgIT0gTlVMTCkKKwkJZnByaW50ZihmZCwgIlwiJSVWSU0lJVxcJXNcIiAlcyAlJVZJTUFSR1MlJVxuIiwgYnVmLCB2aW1hcmcpOworCSAgICBlbHNlCisJCWZwcmludGYoZmQsICIlJVZJTSUlXFwlcyAlcyAlJVZJTUFSR1MlJVxuIiwgYnVmLCB2aW1hcmcpOworCSAgICBmcHJpbnRmKGZkLCAiZ290byBlb2ZcblxuIik7CisKKwkgICAgaWYgKCpleGVuYW1lID09ICdnJykKKwkgICAgeworCQlmcHJpbnRmKGZkLCAiOm5vZm9ya1xuIik7CisJCWZwcmludGYoZmQsICJzdGFydCAvdyAiKTsKKwkJLyogRG8gdXNlIHF1b3RlcyBoZXJlIGlmIHRoZSBwYXRoIGluY2x1ZGVzIGEgc3BhY2UuICovCisJCWlmIChzdHJjaHIoaW5zdGFsbGRpciwgJyAnKSAhPSBOVUxMKQorCQkgICAgZnByaW50ZihmZCwgIlwiJSVWSU0lJVxcJXNcIiAlcyAlJVZJTUFSR1MlJVxuIiwgYnVmLAorCQkJCQkJCQkgICAgICB2aW1hcmcpOworCQllbHNlCisJCSAgICBmcHJpbnRmKGZkLCAiJSVWSU0lJVxcJXMgJXMgJSVWSU1BUkdTJSVcbiIsIGJ1ZiwgdmltYXJnKTsKKwkJZnByaW50ZihmZCwgImdvdG8gZW9mXG5cbiIpOworCSAgICB9CisKKwkgICAgZnByaW50ZihmZCwgIjpudGFjdGlvblxuIik7CisJICAgIGZwcmludGYoZmQsICJyZW0gZm9yIFdpbk5UIHdlIGNhbiB1c2UgJSUqXG4iKTsKKworCSAgICAvKiBGb3IgZ3ZpbS5leGUgdXNlICJzdGFydCAvYiIgdG8gYXZvaWQgdGhhdCB0aGUgY29uc29sZSB3aW5kb3cKKwkgICAgICogc3RheXMgb3Blbi4gKi8KKwkgICAgaWYgKCpleGVuYW1lID09ICdnJykKKwkgICAgeworCQlmcHJpbnRmKGZkLCAiaWYgLiUlVklNTk9GT1JLJSU9PS4xIGdvdG8gbm9mb3JrbnRcbiIpOworCQlmcHJpbnRmKGZkLCAic3RhcnQgXCJkdW1teVwiIC9iICIpOworCSAgICB9CisKKwkgICAgLyogRG8gdXNlIHF1b3RlcyBoZXJlIGlmIHRoZSBwYXRoIGluY2x1ZGVzIGEgc3BhY2UuICovCisJICAgIGlmIChzdHJjaHIoaW5zdGFsbGRpciwgJyAnKSAhPSBOVUxMKQorCQlmcHJpbnRmKGZkLCAiXCIlJVZJTSUlXFwlc1wiICVzICUlKlxuIiwgYnVmLCB2aW1hcmcpOworCSAgICBlbHNlCisJCWZwcmludGYoZmQsICIlJVZJTSUlXFwlcyAlcyAlJSpcbiIsIGJ1ZiwgdmltYXJnKTsKKwkgICAgZnByaW50ZihmZCwgImdvdG8gZW9mXG5cbiIpOworCisJICAgIGlmICgqZXhlbmFtZSA9PSAnZycpCisJICAgIHsKKwkJZnByaW50ZihmZCwgIjpub2ZvcmtudFxuIik7CisJCWZwcmludGYoZmQsICJzdGFydCBcImR1bW15XCIgL2IgL3dhaXQgIik7CisJCS8qIERvIHVzZSBxdW90ZXMgaGVyZSBpZiB0aGUgcGF0aCBpbmNsdWRlcyBhIHNwYWNlLiAqLworCQlpZiAoc3RyY2hyKGluc3RhbGxkaXIsICcgJykgIT0gTlVMTCkKKwkJICAgIGZwcmludGYoZmQsICJcIiUlVklNJSVcXCVzXCIgJXMgJSUqXG4iLCBidWYsIHZpbWFyZyk7CisJCWVsc2UKKwkJICAgIGZwcmludGYoZmQsICIlJVZJTSUlXFwlcyAlcyAlJSpcbiIsIGJ1ZiwgdmltYXJnKTsKKwkgICAgfQorCisJICAgIGZwcmludGYoZmQsICJcbjplb2ZcbiIpOworCSAgICBmcHJpbnRmKGZkLCAic2V0IFZJTUFSR1M9XG4iKTsKKwkgICAgaWYgKCpleGVuYW1lID09ICdnJykKKwkJZnByaW50ZihmZCwgInNldCBWSU1OT0ZPUks9XG4iKTsKKworCSAgICBmY2xvc2UoZmQpOworCSAgICBwcmludGYoIiVzIGhhcyBiZWVuICVzXG4iLCBiYXRwYXRoLAorCQkJCSBvbGRuYW1lID09IE5VTEwgPyAiY3JlYXRlZCIgOiAib3ZlcndyaXR0ZW4iKTsKKwl9CisgICAgfQorfQorCisvKgorICogTWFrZSB0aGUgdGV4dCBzdHJpbmcgZm9yIGNob2ljZSAiaWR4Ii4KKyAqIFRoZSBmb3JtYXQgImZtdCIgaXMgbXVzdCBoYXZlIG9uZSAlcyBpdGVtLCB3aGljaCAiYXJnIiBpcyB1c2VkIGZvci4KKyAqLworICAgIHN0YXRpYyB2b2lkCithbGxvY190ZXh0KGludCBpZHgsIGNoYXIgKmZtdCwgY2hhciAqYXJnKQoreworICAgIGlmIChjaG9pY2VzW2lkeF0udGV4dCAhPSBOVUxMKQorCWZyZWUoY2hvaWNlc1tpZHhdLnRleHQpOworCisgICAgY2hvaWNlc1tpZHhdLnRleHQgPSBhbGxvYygoaW50KShzdHJsZW4oZm10KSArIHN0cmxlbihhcmcpKSAtIDEpOworICAgIHNwcmludGYoY2hvaWNlc1tpZHhdLnRleHQsIGZtdCwgYXJnKTsKK30KKworLyoKKyAqIFRvZ2dsZSB0aGUgIk92ZXJ3cml0ZSAuLi4vdmltLmJhdCIgdG8gIkRvbid0IG92ZXJ3cml0ZSIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordG9nZ2xlX2JhdF9jaG9pY2UoaW50IGlkeCkKK3sKKyAgICBjaGFyCSpiYXRuYW1lID0gdGFyZ2V0c1tjaG9pY2VzW2lkeF0uYXJnXS5iYXRwYXRoOworICAgIGNoYXIJKm9sZG5hbWUgPSB0YXJnZXRzW2Nob2ljZXNbaWR4XS5hcmddLm9sZGJhdDsKKworICAgIGlmICgqYmF0bmFtZSA9PSBOVUwpCisgICAgeworCWFsbG9jX3RleHQoaWR4LCAiICAgIE92ZXJ3cml0ZSAlcyIsIG9sZG5hbWUpOworCXN0cmNweShiYXRuYW1lLCBvbGRuYW1lKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlhbGxvY190ZXh0KGlkeCwgIiAgICBEbyBOT1Qgb3ZlcndyaXRlICVzIiwgb2xkbmFtZSk7CisJKmJhdG5hbWUgPSBOVUw7CisgICAgfQorfQorCisvKgorICogRG8gc29tZSB3b3JrIGZvciBhIGJhdGNoIGZpbGUgZW50cnk6IEFwcGVuZCB0aGUgYmF0Y2ggZmlsZSBuYW1lIHRvIHRoZSBwYXRoCisgKiBhbmQgc2V0IHRoZSB0ZXh0IGZvciB0aGUgY2hvaWNlLgorICovCisgICAgc3RhdGljIHZvaWQKK3NldF9iYXRfdGV4dChpbnQgaWR4LCBjaGFyICpiYXRwYXRoLCBjaGFyICpuYW1lKQoreworICAgIHN0cmNhdChiYXRwYXRoLCBuYW1lKTsKKworICAgIGFsbG9jX3RleHQoaWR4LCAiICAgIENyZWF0ZSAlcyIsIGJhdHBhdGgpOworfQorCisvKgorICogU2VsZWN0IGEgZGlyZWN0b3J5IHRvIHdyaXRlIHRoZSBiYXRjaCBmaWxlIGxpbmUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2hhbmdlX2JhdF9jaG9pY2UoaW50IGlkeCkKK3sKKyAgICBjaGFyCSpwYXRoOworICAgIGNoYXIJKmJhdHBhdGg7CisgICAgY2hhcgkqbmFtZTsKKyAgICBpbnQJCW47CisgICAgY2hhcgkqczsKKyAgICBjaGFyCSpwOworICAgIGludAkJY291bnQ7CisgICAgY2hhcgkqKm5hbWVzID0gTlVMTDsKKyAgICBpbnQJCWk7CisgICAgaW50CQl0YXJnZXQgPSBjaG9pY2VzW2lkeF0uYXJnOworCisgICAgbmFtZSA9IHRhcmdldHNbdGFyZ2V0XS5iYXRuYW1lOworICAgIGJhdHBhdGggPSB0YXJnZXRzW3RhcmdldF0uYmF0cGF0aDsKKworICAgIHBhdGggPSBnZXRlbnYoIlBBVEgiKTsKKyAgICBpZiAocGF0aCA9PSBOVUxMKQorICAgIHsKKwlwcmludGYoIlxuRVJST1I6IFRoZSB2YXJpYWJsZSAkUEFUSCBpcyBub3Qgc2V0XG4iKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBmaXJzdCByb3VuZDogY291bnQgbnVtYmVyIG9mIG5hbWVzIGluIHBhdGg7CisgICAgICogc2Vjb25kIHJvdW5kOiBzYXZlIG5hbWVzIHRvIG5hbWVzW10uCisgICAgICovCisgICAgZm9yICg7OykKKyAgICB7CisJY291bnQgPSAxOworCWZvciAocCA9IHBhdGg7ICpwOyApCisJeworCSAgICBzID0gc3RyY2hyKHAsICc7Jyk7CisJICAgIGlmIChzID09IE5VTEwpCisJCXMgPSBwICsgc3RybGVuKHApOworCSAgICBpZiAobmFtZXMgIT0gTlVMTCkKKwkgICAgeworCQluYW1lc1tjb3VudF0gPSBhbGxvYygoaW50KShzIC0gcCkgKyAxKTsKKwkJc3RybmNweShuYW1lc1tjb3VudF0sIHAsIHMgLSBwKTsKKwkJbmFtZXNbY291bnRdW3MgLSBwXSA9IE5VTDsKKwkgICAgfQorCSAgICArK2NvdW50OworCSAgICBwID0gczsKKwkgICAgaWYgKCpwICE9IE5VTCkKKwkJKytwOworCX0KKwlpZiAobmFtZXMgIT0gTlVMTCkKKwkgICAgYnJlYWs7CisJbmFtZXMgPSBhbGxvYygoaW50KShjb3VudCArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgIH0KKyAgICBuYW1lc1swXSA9IGFsbG9jKDUwKTsKKyAgICBzcHJpbnRmKG5hbWVzWzBdLCAiU2VsZWN0IGRpcmVjdG9yeSB0byBjcmVhdGUgJXMgaW46IiwgbmFtZSk7CisgICAgbmFtZXNbY291bnRdID0gYWxsb2MoNTApOworICAgIGlmIChjaG9pY2VzW2lkeF0uYXJnID09IDApCisJc3ByaW50ZihuYW1lc1tjb3VudF0sICJEbyBub3QgY3JlYXRlIGFueSAuYmF0IGZpbGUuIik7CisgICAgZWxzZQorCXNwcmludGYobmFtZXNbY291bnRdLCAiRG8gbm90IGNyZWF0ZSBhICVzIGZpbGUuIiwgbmFtZSk7CisgICAgbiA9IGdldF9jaG9pY2UobmFtZXMsIGNvdW50ICsgMSk7CisKKyAgICBpZiAobiA9PSBjb3VudCkKKyAgICB7CisJLyogU2VsZWN0ZWQgbGFzdCBpdGVtLCBkb24ndCBjcmVhdGUgYmF0IGZpbGUuICovCisJKmJhdHBhdGggPSBOVUw7CisJaWYgKGNob2ljZXNbaWR4XS5hcmcgIT0gMCkKKwkgICAgYWxsb2NfdGV4dChpZHgsICIgICAgRG8gTk9UIGNyZWF0ZSAlcyIsIG5hbWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIFNlbGVjdGVkIG9uZSBvZiB0aGUgcGF0aHMuICBGb3IgdGhlIGZpcnN0IGl0ZW0gb25seSBrZWVwIHRoZSBwYXRoLAorCSAqIGZvciB0aGUgb3RoZXJzIGFwcGVuZCB0aGUgYmF0Y2ggZmlsZSBuYW1lLiAqLworCXN0cmNweShiYXRwYXRoLCBuYW1lc1tuXSk7CisJYWRkX3BhdGhzZXAoYmF0cGF0aCk7CisJaWYgKGNob2ljZXNbaWR4XS5hcmcgIT0gMCkKKwkgICAgc2V0X2JhdF90ZXh0KGlkeCwgYmF0cGF0aCwgbmFtZSk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8PSBjb3VudDsgKytpKQorCWZyZWUobmFtZXNbaV0pOworICAgIGZyZWUobmFtZXMpOworfQorCitjaGFyICpiYXRfdGV4dF95ZXMgPSAiSW5zdGFsbCAuYmF0IGZpbGVzIHRvIHVzZSBWaW0gYXQgdGhlIGNvbW1hbmQgbGluZToiOworY2hhciAqYmF0X3RleHRfbm8gPSAiZG8gTk9UIGluc3RhbGwgLmJhdCBmaWxlcyB0byB1c2UgVmltIGF0IHRoZSBjb21tYW5kIGxpbmUiOworCisgICAgc3RhdGljIHZvaWQKK2NoYW5nZV9tYWluX2JhdF9jaG9pY2UoaW50IGlkeCkKK3sKKyAgICBpbnQJCWk7CisKKyAgICAvKiBsZXQgdGhlIHVzZXIgc2VsZWN0IGEgZGVmYXVsdCBkaXJlY3Rvcnkgb3IgTk9ORSAqLworICAgIGNoYW5nZV9iYXRfY2hvaWNlKGlkeCk7CisKKyAgICBpZiAodGFyZ2V0c1swXS5iYXRwYXRoWzBdICE9IE5VTCkKKwljaG9pY2VzW2lkeF0udGV4dCA9IGJhdF90ZXh0X3llczsKKyAgICBlbHNlCisJY2hvaWNlc1tpZHhdLnRleHQgPSBiYXRfdGV4dF9ubzsKKworICAgIC8qIHVwZGF0ZSB0aGUgaW5kaXZpZHVhbCBiYXRjaCBmaWxlIHNlbGVjdGlvbnMgKi8KKyAgICBmb3IgKGkgPSAxOyBpIDwgVEFSR0VUX0NPVU5UOyArK2kpCisgICAgeworCS8qIE9ubHkgbWFrZSBpdCBhY3RpdmUgd2hlbiB0aGUgZmlyc3QgaXRlbSBoYXMgYSBwYXRoIGFuZCB0aGUgdmltLmV4ZQorCSAqIG9yIGd2aW0uZXhlIGV4aXN0cyAodGhlcmUgaXMgYSBjaGFuZ2VmdW5jIHRoZW4pLiAqLworCWlmICh0YXJnZXRzWzBdLmJhdHBhdGhbMF0gIT0gTlVMCisJCSYmIGNob2ljZXNbaWR4ICsgaV0uY2hhbmdlZnVuYyAhPSBOVUxMKQorCXsKKwkgICAgY2hvaWNlc1tpZHggKyBpXS5hY3RpdmUgPSAxOworCSAgICBpZiAoY2hvaWNlc1tpZHggKyBpXS5jaGFuZ2VmdW5jID09IGNoYW5nZV9iYXRfY2hvaWNlCisJCSAgICAmJiB0YXJnZXRzW2ldLmJhdHBhdGhbMF0gIT0gTlVMKQorCSAgICB7CisJCXN0cmNweSh0YXJnZXRzW2ldLmJhdHBhdGgsIHRhcmdldHNbMF0uYmF0cGF0aCk7CisJCXNldF9iYXRfdGV4dChpZHggKyBpLCB0YXJnZXRzW2ldLmJhdHBhdGgsIHRhcmdldHNbaV0uYmF0bmFtZSk7CisJICAgIH0KKwl9CisJZWxzZQorCSAgICBjaG9pY2VzW2lkeCArIGldLmFjdGl2ZSA9IDA7CisgICAgfQorfQorCisvKgorICogSW5pdGlhbGl6ZSBhIGNob2ljZSBmb3IgY3JlYXRpbmcgYSBiYXRjaCBmaWxlLgorICovCisgICAgc3RhdGljIHZvaWQKK2luaXRfYmF0X2Nob2ljZShpbnQgdGFyZ2V0KQoreworICAgIGNoYXIJKmJhdHBhdGggPSB0YXJnZXRzW3RhcmdldF0uYmF0cGF0aDsKKyAgICBjaGFyCSpvbGRiYXQgPSB0YXJnZXRzW3RhcmdldF0ub2xkYmF0OworICAgIGNoYXIJKnA7CisgICAgaW50CQlpOworCisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmFyZyA9IHRhcmdldDsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uaW5zdGFsbGZ1bmMgPSBpbnN0YWxsX2JhdF9jaG9pY2U7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmFjdGl2ZSA9IDE7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLnRleHQgPSBOVUxMOwkvKiB3aWxsIGJlIHNldCBiZWxvdyAqLworICAgIGlmIChvbGRiYXQgIT0gTlVMTCkKKyAgICB7CisJLyogQSBbZ112aW0uYmF0IGV4aXN0czogT25seSBjaG9pY2UgaXMgdG8gb3ZlcndyaXRlIGl0IG9yIG5vdC4gKi8KKwljaG9pY2VzW2Nob2ljZV9jb3VudF0uY2hhbmdlZnVuYyA9IHRvZ2dsZV9iYXRfY2hvaWNlOworCSpiYXRwYXRoID0gTlVMOworCXRvZ2dsZV9iYXRfY2hvaWNlKGNob2ljZV9jb3VudCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKGRlZmF1bHRfYmF0X2RpciAhPSBOVUxMKQorCSAgICAvKiBQcmVmZXIgdXNpbmcgdGhlIHNhbWUgcGF0aCBhcyBhbiBleGlzdGluZyAuYmF0IGZpbGUuICovCisJICAgIHN0cmNweShiYXRwYXRoLCBkZWZhdWx0X2JhdF9kaXIpOworCWVsc2UKKwl7CisJICAgIC8qIE5vIFtnXXZpbS5iYXQgZXhpc3RzOiBXcml0ZSBpdCB0byBhIGRpcmVjdG9yeSBpbiAkUEFUSC4gIFVzZQorCSAgICAgKiAkV0lORElSIGJ5IGRlZmF1bHQsIGlmIGl0J3MgZW1wdHkgdGhlIGZpcnN0IGl0ZW0gaW4gJFBBVEguICovCisJICAgIHAgPSBnZXRlbnYoIldJTkRJUiIpOworCSAgICBpZiAocCAhPSBOVUxMICYmICpwICE9IE5VTCkKKwkJc3RyY3B5KGJhdHBhdGgsIHApOworCSAgICBlbHNlCisJICAgIHsKKwkJcCA9IGdldGVudigiUEFUSCIpOworCQlpZiAocCA9PSBOVUxMIHx8ICpwID09IE5VTCkJCS8qICJjYW5ub3QgaGFwcGVuIiAqLworCQkgICAgc3RyY3B5KGJhdHBhdGgsICJDOi9XaW5kb3dzIik7CisJCWVsc2UKKwkJeworCQkgICAgaSA9IDA7CisJCSAgICB3aGlsZSAoKnAgIT0gTlVMICYmICpwICE9ICc7JykKKwkJCWJhdHBhdGhbaSsrXSA9ICpwKys7CisJCSAgICBiYXRwYXRoW2ldID0gTlVMOworCQl9CisJICAgIH0KKwl9CisJYWRkX3BhdGhzZXAoYmF0cGF0aCk7CisJc2V0X2JhdF90ZXh0KGNob2ljZV9jb3VudCwgYmF0cGF0aCwgdGFyZ2V0c1t0YXJnZXRdLmJhdG5hbWUpOworCisJY2hvaWNlc1tjaG9pY2VfY291bnRdLmNoYW5nZWZ1bmMgPSBjaGFuZ2VfYmF0X2Nob2ljZTsKKyAgICB9CisgICAgKytjaG9pY2VfY291bnQ7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIGNob2ljZXMgZm9yIGluc3RhbGxpbmcgLmJhdCBmaWxlcy4KKyAqIEZvciB0aGVzZSBpdGVtcyAiYXJnIiBpcyB0aGUgaW5kZXggaW4gdGFyZ2V0c1tdLgorICovCisgICAgc3RhdGljIHZvaWQKK2luaXRfYmF0X2Nob2ljZXModm9pZCkKK3sKKyAgICBpbnQJCWk7CisKKyAgICAvKiBUaGUgZmlyc3QgaXRlbSBpcyB1c2VkIHRvIHN3aXRjaCBpbnN0YWxsaW5nIGJhdGNoIGZpbGVzIG9uL29mZiBhbmQKKyAgICAgKiBzZXR0aW5nIHRoZSBkZWZhdWx0IHBhdGguICovCisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLnRleHQgPSBiYXRfdGV4dF95ZXM7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmNoYW5nZWZ1bmMgPSBjaGFuZ2VfbWFpbl9iYXRfY2hvaWNlOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5pbnN0YWxsZnVuYyA9IE5VTEw7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmFjdGl2ZSA9IDE7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmFyZyA9IDA7CisgICAgKytjaG9pY2VfY291bnQ7CisKKyAgICAvKiBBZGQgaXRlbXMgZm9yIGVhY2ggYmF0Y2ggZmlsZSB0YXJnZXQuICBPbmx5IHVzZWQgd2hlbiBub3QgZGlzYWJsZWQgYnkKKyAgICAgKiB0aGUgZmlyc3QgaXRlbS4gIFdoZW4gYSAuZXhlIGV4aXN0cywgZG9uJ3Qgb2ZmZXIgdG8gY3JlYXRlIGEgLmJhdC4gKi8KKyAgICBmb3IgKGkgPSAxOyBpIDwgVEFSR0VUX0NPVU5UOyArK2kpCisJaWYgKHRhcmdldHNbaV0ub2xkZXhlID09IE5VTEwKKwkJJiYgKHRhcmdldHNbaV0uZXhlbmFtZWFyZ1swXSA9PSAnZycgPyBoYXNfZ3ZpbSA6IGhhc192aW0pKQorCSAgICBpbml0X2JhdF9jaG9pY2UoaSk7CisJZWxzZQorCSAgICBhZGRfZHVtbXlfY2hvaWNlKCk7Cit9CisKKy8qCisgKiBJbnN0YWxsIHRoZSB2aW1yYyBmaWxlLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAoraW5zdGFsbF92aW1yYyhpbnQgaWR4KQoreworICAgIEZJTEUJKmZkLCAqdGZkOworICAgIGNoYXIJKmZuYW1lOworICAgIGNoYXIJKnA7CisKKyAgICAvKiBJZiBhbiBvbGQgdmltcmMgZmlsZSBleGlzdHMsIG92ZXJ3cml0ZSBpdC4KKyAgICAgKiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IG9uZS4gKi8KKyAgICBpZiAoKm9sZHZpbXJjICE9IE5VTCkKKwlmbmFtZSA9IG9sZHZpbXJjOworICAgIGVsc2UKKwlmbmFtZSA9IHZpbXJjOworCisgICAgZmQgPSBmb3BlbihmbmFtZSwgInciKTsKKyAgICBpZiAoZmQgPT0gTlVMTCkKKyAgICB7CisJcHJpbnRmKCJcbkVSUk9SOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmcuXG4iLCBmbmFtZSk7CisJcmV0dXJuOworICAgIH0KKyAgICBzd2l0Y2ggKGNvbXBhdF9jaG9pY2UpCisgICAgeworCWNhc2UgY29tcGF0X3ZpOgorCQkgICAgZnByaW50ZihmZCwgInNldCBjb21wYXRpYmxlXG4iKTsKKwkJICAgIGJyZWFrOworCWNhc2UgY29tcGF0X3NvbWVfZW5oYW5jZW1lbnRzOgorCQkgICAgZnByaW50ZihmZCwgInNldCBub2NvbXBhdGlibGVcbiIpOworCQkgICAgYnJlYWs7CisJY2FzZSBjb21wYXRfYWxsX2VuaGFuY2VtZW50czoKKwkJICAgIGZwcmludGYoZmQsICJzZXQgbm9jb21wYXRpYmxlXG4iKTsKKwkJICAgIGZwcmludGYoZmQsICJzb3VyY2UgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW1cbiIpOworCQkgICAgYnJlYWs7CisgICAgfQorICAgIHN3aXRjaCAocmVtYXBfY2hvaWNlKQorICAgIHsKKwljYXNlIHJlbWFwX25vOgorCQkgICAgYnJlYWs7CisJY2FzZSByZW1hcF93aW46CisJCSAgICBmcHJpbnRmKGZkLCAic291cmNlICRWSU1SVU5USU1FL21zd2luLnZpbVxuIik7CisJCSAgICBicmVhazsKKyAgICB9CisgICAgc3dpdGNoIChtb3VzZV9jaG9pY2UpCisgICAgeworCWNhc2UgbW91c2VfeHRlcm06CisJCSAgICBmcHJpbnRmKGZkLCAiYmVoYXZlIHh0ZXJtXG4iKTsKKwkJICAgIGJyZWFrOworCWNhc2UgbW91c2VfbXN3aW46CisJCSAgICBmcHJpbnRmKGZkLCAiYmVoYXZlIG1zd2luXG4iKTsKKwkJICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoKHRmZCA9IGZvcGVuKCJkaWZmLmV4ZSIsICJyIikpICE9IE5VTEwpCisgICAgeworCS8qIFVzZSB0aGUgZGlmZi5leGUgdGhhdCBjb21lcyB3aXRoIHRoZSBzZWxmLWV4dHJhY3RpbmcgZ3ZpbS5leGUuICovCisJZmNsb3NlKHRmZCk7CisJZnByaW50ZihmZCwgIlxuIik7CisJZnByaW50ZihmZCwgInNldCBkaWZmZXhwcj1NeURpZmYoKVxuIik7CisJZnByaW50ZihmZCwgImZ1bmN0aW9uIE15RGlmZigpXG4iKTsKKwlmcHJpbnRmKGZkLCAiICBsZXQgb3B0ID0gJy1hIC0tYmluYXJ5ICdcbiIpOworCWZwcmludGYoZmQsICIgIGlmICZkaWZmb3B0ID1+ICdpY2FzZScgfCBsZXQgb3B0ID0gb3B0IC4gJy1pICcgfCBlbmRpZlxuIik7CisJZnByaW50ZihmZCwgIiAgaWYgJmRpZmZvcHQgPX4gJ2l3aGl0ZScgfCBsZXQgb3B0ID0gb3B0IC4gJy1iICcgfCBlbmRpZlxuIik7CisJLyogVXNlIHF1b3RlcyBvbmx5IHdoZW4gbmVlZGVkLCB0aGV5IG1heSBjYXVzZSB0cm91YmxlLiAqLworCWZwcmludGYoZmQsICIgIGxldCBhcmcxID0gdjpmbmFtZV9pblxuIik7CisJZnByaW50ZihmZCwgIiAgaWYgYXJnMSA9fiAnICcgfCBsZXQgYXJnMSA9ICdcIicgLiBhcmcxIC4gJ1wiJyB8IGVuZGlmXG4iKTsKKwlmcHJpbnRmKGZkLCAiICBsZXQgYXJnMiA9IHY6Zm5hbWVfbmV3XG4iKTsKKwlmcHJpbnRmKGZkLCAiICBpZiBhcmcyID1+ICcgJyB8IGxldCBhcmcyID0gJ1wiJyAuIGFyZzIgLiAnXCInIHwgZW5kaWZcbiIpOworCWZwcmludGYoZmQsICIgIGxldCBhcmczID0gdjpmbmFtZV9vdXRcbiIpOworCWZwcmludGYoZmQsICIgIGlmIGFyZzMgPX4gJyAnIHwgbGV0IGFyZzMgPSAnXCInIC4gYXJnMyAuICdcIicgfCBlbmRpZlxuIik7CisJcCA9IHN0cmNocihpbnN0YWxsZGlyLCAnICcpOworCWlmIChwICE9IE5VTEwpCisJeworCSAgICAvKiBUaGUgcGF0aCBoYXMgYSBzcGFjZS4gIFdoZW4gdXNpbmcgY21kLmV4ZSAoV2luIE5ULzIwMDAvWFApIHB1dAorCSAgICAgKiBxdW90ZXMgYXJvdW5kIHRoZSB3aG9sZSBjb21tYW5kIGFuZCBhcm91bmQgdGhlIGRpZmYgY29tbWFuZC4KKwkgICAgICogT3RoZXJ3aXNlIHB1dCBhIGRvdWJsZSBxdW90ZSBqdXN0IGJlZm9yZSB0aGUgc3BhY2UgYW5kIGF0IHRoZQorCSAgICAgKiBlbmQgb2YgdGhlIGNvbW1hbmQuICBQdXR0aW5nIHF1b3RlcyBhcm91bmQgdGhlIHdob2xlIHRoaW5nCisJICAgICAqIGRvZXNuJ3Qgd29yayBvbiBXaW4gOTUvOTgvTUUuICBUaGlzIGlzIG1vc3RseSBndWVzc2VkISAqLworCSAgICBmcHJpbnRmKGZkLCAiICBpZiAmc2ggPX4gJ1xcPGNtZCdcbiIpOworCSAgICBmcHJpbnRmKGZkLCAiICAgIHNpbGVudCBleGVjdXRlICchXCJcIiVzXFxkaWZmXCIgJyAuIG9wdCAuIGFyZzEgLiAnICcgLiBhcmcyIC4gJyA+ICcgLiBhcmczIC4gJ1wiJ1xuIiwgaW5zdGFsbGRpcik7CisJICAgIGZwcmludGYoZmQsICIgIGVsc2VcbiIpOworCSAgICAqcCA9IE5VTDsKKwkgICAgZnByaW50ZihmZCwgIiAgICBzaWxlbnQgZXhlY3V0ZSAnISVzXCIgJXNcXGRpZmZcIiAnIC4gb3B0IC4gYXJnMSAuICcgJyAuIGFyZzIgLiAnID4gJyAuIGFyZzNcbiIsIGluc3RhbGxkaXIsIHAgKyAxKTsKKwkgICAgKnAgPSAnICc7CisJICAgIGZwcmludGYoZmQsICIgIGVuZGlmXG4iKTsKKwl9CisJZWxzZQorCSAgICBmcHJpbnRmKGZkLCAiICBzaWxlbnQgZXhlY3V0ZSAnISVzXFxkaWZmICcgLiBvcHQgLiBhcmcxIC4gJyAnIC4gYXJnMiAuICcgPiAnIC4gYXJnM1xuIiwgaW5zdGFsbGRpcik7CisJZnByaW50ZihmZCwgImVuZGZ1bmN0aW9uXG4iKTsKKwlmcHJpbnRmKGZkLCAiXG4iKTsKKyAgICB9CisgICAgZmNsb3NlKGZkKTsKKyAgICBwcmludGYoIiVzIGhhcyBiZWVuIHdyaXR0ZW5cbiIsIGZuYW1lKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitjaGFuZ2VfdmltcmNfY2hvaWNlKGludCBpZHgpCit7CisgICAgaWYgKGNob2ljZXNbaWR4XS5pbnN0YWxsZnVuYyAhPSBOVUxMKQorICAgIHsKKwkvKiBTd2l0Y2ggdG8gTk9UIGNoYW5nZSBvciBjcmVhdGUgYSB2aW1yYyBmaWxlLiAqLworCWlmICgqb2xkdmltcmMgIT0gTlVMKQorCSAgICBhbGxvY190ZXh0KGlkeCwgIkRvIE5PVCBjaGFuZ2Ugc3RhcnR1cCBmaWxlICVzIiwgb2xkdmltcmMpOworCWVsc2UKKwkgICAgYWxsb2NfdGV4dChpZHgsICJEbyBOT1QgY3JlYXRlIHN0YXJ0dXAgZmlsZSAlcyIsIHZpbXJjKTsKKwljaG9pY2VzW2lkeF0uaW5zdGFsbGZ1bmMgPSBOVUxMOworCWNob2ljZXNbaWR4ICsgMV0uYWN0aXZlID0gMDsKKwljaG9pY2VzW2lkeCArIDJdLmFjdGl2ZSA9IDA7CisJY2hvaWNlc1tpZHggKyAzXS5hY3RpdmUgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIFN3aXRjaCB0byBjaGFuZ2Ugb3IgY3JlYXRlIGEgdmltcmMgZmlsZS4gKi8KKwlpZiAoKm9sZHZpbXJjICE9IE5VTCkKKwkgICAgYWxsb2NfdGV4dChpZHgsICJPdmVyd3JpdGUgc3RhcnR1cCBmaWxlICVzIHdpdGg6Iiwgb2xkdmltcmMpOworCWVsc2UKKwkgICAgYWxsb2NfdGV4dChpZHgsICJDcmVhdGUgc3RhcnR1cCBmaWxlICVzIHdpdGg6IiwgdmltcmMpOworCWNob2ljZXNbaWR4XS5pbnN0YWxsZnVuYyA9IGluc3RhbGxfdmltcmM7CisJY2hvaWNlc1tpZHggKyAxXS5hY3RpdmUgPSAxOworCWNob2ljZXNbaWR4ICsgMl0uYWN0aXZlID0gMTsKKwljaG9pY2VzW2lkeCArIDNdLmFjdGl2ZSA9IDE7CisgICAgfQorfQorCisvKgorICogQ2hhbmdlIHRoZSBjaG9pY2UgaG93IHRvIHJ1biBWaW0uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2hhbmdlX3J1bl9jaG9pY2UoaW50IGlkeCkKK3sKKyAgICBjb21wYXRfY2hvaWNlID0gZ2V0X2Nob2ljZShjb21wYXRfY2hvaWNlcywgVEFCTEVfU0laRShjb21wYXRfY2hvaWNlcykpOworICAgIGFsbG9jX3RleHQoaWR4LCBjb21wYXRfdGV4dCwgY29tcGF0X2Nob2ljZXNbY29tcGF0X2Nob2ljZV0pOworfQorCisvKgorICogQ2hhbmdlIHRoZSBjaG9pY2UgaWYga2V5cyBhcmUgdG8gYmUgcmVtYXBwZWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2hhbmdlX3JlbWFwX2Nob2ljZShpbnQgaWR4KQoreworICAgIHJlbWFwX2Nob2ljZSA9IGdldF9jaG9pY2UocmVtYXBfY2hvaWNlcywgVEFCTEVfU0laRShyZW1hcF9jaG9pY2VzKSk7CisgICAgYWxsb2NfdGV4dChpZHgsIHJlbWFwX3RleHQsIHJlbWFwX2Nob2ljZXNbcmVtYXBfY2hvaWNlXSk7Cit9CisKKy8qCisgKiBDaGFuZ2UgdGhlIGNob2ljZSBob3cgdG8gc2VsZWN0IHRleHQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2hhbmdlX21vdXNlX2Nob2ljZShpbnQgaWR4KQoreworICAgIG1vdXNlX2Nob2ljZSA9IGdldF9jaG9pY2UobW91c2VfY2hvaWNlcywgVEFCTEVfU0laRShtb3VzZV9jaG9pY2VzKSk7CisgICAgYWxsb2NfdGV4dChpZHgsIG1vdXNlX3RleHQsIG1vdXNlX2Nob2ljZXNbbW91c2VfY2hvaWNlXSk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAoraW5pdF92aW1yY19jaG9pY2VzKHZvaWQpCit7CisgICAgLyogc2V0IHBhdGggZm9yIGEgbmV3IF92aW1yYyBmaWxlIChhbHNvIHdoZW4gbm90IHVzZWQpICovCisgICAgc3RyY3B5KHZpbXJjLCBpbnN0YWxsZGlyKTsKKyAgICBzdHJjcHkodmltcmMgKyBydW50aW1laWR4LCAiX3ZpbXJjIik7CisKKyAgICAvKiBTZXQgb3Bwb3NpdGUgdmFsdWUgYW5kIHRoZW4gdG9nZ2xlIGl0IGJ5IGNhbGxpbmcgY2hhbmdlX3ZpbXJjX2Nob2ljZSgpICovCisgICAgaWYgKCpvbGR2aW1yYyA9PSBOVUwpCisJY2hvaWNlc1tjaG9pY2VfY291bnRdLmluc3RhbGxmdW5jID0gTlVMTDsKKyAgICBlbHNlCisJY2hvaWNlc1tjaG9pY2VfY291bnRdLmluc3RhbGxmdW5jID0gaW5zdGFsbF92aW1yYzsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0udGV4dCA9IE5VTEw7CisgICAgY2hhbmdlX3ZpbXJjX2Nob2ljZShjaG9pY2VfY291bnQpOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5jaGFuZ2VmdW5jID0gY2hhbmdlX3ZpbXJjX2Nob2ljZTsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uYWN0aXZlID0gMTsKKyAgICArK2Nob2ljZV9jb3VudDsKKworICAgIC8qIGRlZmF1bHQgd2F5IHRvIHJ1biBWaW0gKi8KKyAgICBhbGxvY190ZXh0KGNob2ljZV9jb3VudCwgY29tcGF0X3RleHQsIGNvbXBhdF9jaG9pY2VzW2NvbXBhdF9jaG9pY2VdKTsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uY2hhbmdlZnVuYyA9IGNoYW5nZV9ydW5fY2hvaWNlOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5pbnN0YWxsZnVuYyA9IE5VTEw7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmFjdGl2ZSA9ICgqb2xkdmltcmMgPT0gTlVMKTsKKyAgICArK2Nob2ljZV9jb3VudDsKKworICAgIC8qIFdoZXRoZXIgdG8gcmVtYXAga2V5cyAqLworICAgIGFsbG9jX3RleHQoY2hvaWNlX2NvdW50LCByZW1hcF90ZXh0ICwgcmVtYXBfY2hvaWNlc1tyZW1hcF9jaG9pY2VdKTsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uY2hhbmdlZnVuYyA9IGNoYW5nZV9yZW1hcF9jaG9pY2U7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmluc3RhbGxmdW5jID0gTlVMTDs7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmFjdGl2ZSA9ICgqb2xkdmltcmMgPT0gTlVMKTsKKyAgICArK2Nob2ljZV9jb3VudDsKKworICAgIC8qIGRlZmF1bHQgd2F5IHRvIHVzZSB0aGUgbW91c2UgKi8KKyAgICBhbGxvY190ZXh0KGNob2ljZV9jb3VudCwgbW91c2VfdGV4dCwgbW91c2VfY2hvaWNlc1ttb3VzZV9jaG9pY2VdKTsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uY2hhbmdlZnVuYyA9IGNoYW5nZV9tb3VzZV9jaG9pY2U7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmluc3RhbGxmdW5jID0gTlVMTDs7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmFjdGl2ZSA9ICgqb2xkdmltcmMgPT0gTlVMKTsKKyAgICArK2Nob2ljZV9jb3VudDsKK30KKworLyoKKyAqIEFkZCBzb21lIGVudHJpZXMgdG8gdGhlIHJlZ2lzdHJ5OgorICogLSB0byBhZGQgIkVkaXQgd2l0aCBWaW0iIHRvIHRoZSBjb250ZXh0ICogbWVudQorICogLSB0byBhZGQgVmltIHRvIHRoZSAiT3BlbiB3aXRoLi4uIiBsaXN0CisgKiAtIHRvIHVuaW5zdGFsbCBWaW0KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2luc3RhbGxfcmVnaXN0cnkodm9pZCkKK3sKKyNpZiBkZWZpbmVkKERKR1BQKSB8fCBkZWZpbmVkKFdJTjMyNjQpIHx8IGRlZmluZWQoVU5JWF9MSU5UKQorICAgIEZJTEUJKmZkOworICAgIGNvbnN0IGNoYXIJKnZpbV9leHRfVGhyZWFkaW5nTW9kZWwgPSAiQXBhcnRtZW50IjsKKyAgICBjb25zdCBjaGFyCSp2aW1fZXh0X25hbWUgPSAiVmltIFNoZWxsIEV4dGVuc2lvbiI7CisgICAgY29uc3QgY2hhcgkqdmltX2V4dF9jbHNpZCA9ICJ7NTFFRUUyNDItQUQ4Ny0xMWQzLTlDMUUtMDA5MDI3OEJCRDk5fSI7CisgICAgY2hhcglidWZbQlVGU0laRV07CisKKyAgICBmZCA9IGZvcGVuKCJ2aW0ucmVnIiwgInciKTsKKyAgICBpZiAoZmQgPT0gTlVMTCkKKwlwcmludGYoIkVSUk9SOiBDb3VsZCBub3Qgb3BlbiB2aW0ucmVnIGZvciB3cml0aW5nXG4iKTsKKyAgICBlbHNlCisgICAgeworCWRvdWJsZV9icyhpbnN0YWxsZGlyLCBidWYpOyAvKiBkb3VibGUgdGhlIGJhY2tzbGFzaGVzICovCisKKwkvKgorCSAqIFdyaXRlIHRoZSByZWdpc3RyeSBlbnRyaWVzIGZvciB0aGUgIkVkaXQgd2l0aCBWaW0iIG1lbnUuCisJICovCisJZnByaW50ZihmZCwgIlJFR0VESVQ0XG4iKTsKKwlmcHJpbnRmKGZkLCAiXG4iKTsKKwlpZiAoaW5zdGFsbF9wb3B1cCkKKwl7CisJICAgIGNoYXIJYnVmZ1tCVUZTSVpFXTsKKwkgICAgc3RydWN0IHN0YXQgc3Q7CisKKwkgICAgaWYgKHN0YXQoImd2aW1leHQuZGxsIiwgJnN0KSA+PSAwKQorCQlzdHJjcHkoYnVmZywgYnVmKTsKKwkgICAgZWxzZQorCQkvKiBndmltZXh0LmRsbCBpcyBpbiBndmltZXh0IHN1YmRpciAqLworCQlzcHJpbnRmKGJ1ZmcsICIlc2d2aW1leHRcXFxcIiwgYnVmKTsKKworCSAgICBwcmludGYoIkNyZWF0aW5nIFwiRWRpdCB3aXRoIFZpbVwiIHBvcHVwIG1lbnUgZW50cnlcbiIpOworCisJICAgIGZwcmludGYoZmQsICJIS0VZX0NMQVNTRVNfUk9PVFxcQ0xTSURcXCVzXG4iLCB2aW1fZXh0X2Nsc2lkKTsKKwkgICAgZnByaW50ZihmZCwgIkA9XCIlc1wiXG4iLCB2aW1fZXh0X25hbWUpOworCSAgICBmcHJpbnRmKGZkLCAiW0hLRVlfQ0xBU1NFU19ST09UXFxDTFNJRFxcJXNcXEluUHJvY1NlcnZlcjMyXVxuIiwKKwkJCQkJCQkgICAgICAgdmltX2V4dF9jbHNpZCk7CisJICAgIGZwcmludGYoZmQsICJAPVwiJXNndmltZXh0LmRsbFwiXG4iLCBidWZnKTsKKwkgICAgZnByaW50ZihmZCwgIlwiVGhyZWFkaW5nTW9kZWxcIj1cIiVzXCJcbiIsIHZpbV9leHRfVGhyZWFkaW5nTW9kZWwpOworCSAgICBmcHJpbnRmKGZkLCAiXG4iKTsKKwkgICAgZnByaW50ZihmZCwgIltIS0VZX0NMQVNTRVNfUk9PVFxcKlxcc2hlbGxleFxcQ29udGV4dE1lbnVIYW5kbGVyc1xcZ3ZpbV1cbiIpOworCSAgICBmcHJpbnRmKGZkLCAiQD1cIiVzXCJcbiIsIHZpbV9leHRfY2xzaWQpOworCSAgICBmcHJpbnRmKGZkLCAiXG4iKTsKKwkgICAgZnByaW50ZihmZCwgIltIS0VZX0xPQ0FMX01BQ0hJTkVcXFNvZnR3YXJlXFxNaWNyb3NvZnRcXFdpbmRvd3NcXEN1cnJlbnRWZXJzaW9uXFxTaGVsbCBFeHRlbnNpb25zXFxBcHByb3ZlZF1cbiIpOworCSAgICBmcHJpbnRmKGZkLCAiXCIlc1wiPVwiJXNcIlxuIiwgdmltX2V4dF9jbHNpZCwgdmltX2V4dF9uYW1lKTsKKwkgICAgZnByaW50ZihmZCwgIlxuIik7CisJICAgIGZwcmludGYoZmQsICJbSEtFWV9MT0NBTF9NQUNISU5FXFxTb2Z0d2FyZVxcVmltXFxHdmltXVxuIik7CisJICAgIGZwcmludGYoZmQsICJcInBhdGhcIj1cIiVzZ3ZpbS5leGVcIlxuIiwgYnVmKTsKKwkgICAgZnByaW50ZihmZCwgIlxuIik7CisJfQorCisJaWYgKGluc3RhbGxfb3BlbndpdGgpCisJeworCSAgICBwcmludGYoIkNyZWF0aW5nIFwiT3BlbiB3aXRoIC4uLlwiIGxpc3QgZW50cnlcbiIpOworCisJICAgIGZwcmludGYoZmQsICJbSEtFWV9DTEFTU0VTX1JPT1RcXEFwcGxpY2F0aW9uc1xcZ3ZpbS5leGVdXG5cbiIpOworCSAgICBmcHJpbnRmKGZkLCAiW0hLRVlfQ0xBU1NFU19ST09UXFxBcHBsaWNhdGlvbnNcXGd2aW0uZXhlXFxzaGVsbF1cblxuIik7CisJICAgIGZwcmludGYoZmQsICJbSEtFWV9DTEFTU0VTX1JPT1RcXEFwcGxpY2F0aW9uc1xcZ3ZpbS5leGVcXHNoZWxsXFxlZGl0XVxuXG4iKTsKKwkgICAgZnByaW50ZihmZCwgIltIS0VZX0NMQVNTRVNfUk9PVFxcQXBwbGljYXRpb25zXFxndmltLmV4ZVxcc2hlbGxcXGVkaXRcXGNvbW1hbmRdXG4iKTsKKwkgICAgZnByaW50ZihmZCwgIkA9XCIlc2d2aW0uZXhlIFxcXCIlJTFcXFwiXCJcblxuIiwgYnVmKTsKKwkgICAgZnByaW50ZihmZCwgIltIS0VZX0NMQVNTRVNfUk9PVFxcLmh0bVxcT3BlbldpdGhMaXN0XFxndmltLmV4ZV1cblxuIik7CisJICAgIGZwcmludGYoZmQsICJbSEtFWV9DTEFTU0VTX1JPT1RcXC52aW1cXE9wZW5XaXRoTGlzdFxcZ3ZpbS5leGVdXG5cbiIpOworCSAgICBmcHJpbnRmKGZkLCAiW0hLRVlfQ0xBU1NFU19ST09UXFwqXFxPcGVuV2l0aExpc3RcXGd2aW0uZXhlXVxuXG4iKTsKKwl9CisKKwlwcmludGYoIkNyZWF0aW5nIGFuIHVuaW5zdGFsbCBlbnRyeVxuIik7CisKKwkvKiBUaGUgcmVnaXN0cnkgZW50cmllcyBmb3IgdW5pbnN0YWxsaW5nIHRoZSBtZW51ICovCisJZnByaW50ZihmZCwgIltIS0VZX0xPQ0FMX01BQ0hJTkVcXFNvZnR3YXJlXFxNaWNyb3NvZnRcXFdpbmRvd3NcXEN1cnJlbnRWZXJzaW9uXFxVbmluc3RhbGxcXFZpbSAiIFZJTV9WRVJTSU9OX1NIT1JUICJdXG4iKTsKKworCS8qIEZvciB0aGUgTlNJUyBpbnN0YWxsZXIgdXNlIHRoZSBnZW5lcmF0ZWQgdW5pbnN0YWxsZXIuICovCisJaWYgKGludGVyYWN0aXZlKQorCXsKKwkgICAgZnByaW50ZihmZCwgIlwiRGlzcGxheU5hbWVcIj1cIlZpbSAiIFZJTV9WRVJTSU9OX1NIT1JUICJcIlxuIik7CisJICAgIGZwcmludGYoZmQsICJcIlVuaW5zdGFsbFN0cmluZ1wiPVwiJXN1bmluc3RhbC5leGVcIlxuIiwgYnVmKTsKKwl9CisJZWxzZQorCXsKKwkgICAgZnByaW50ZihmZCwgIlwiRGlzcGxheU5hbWVcIj1cIlZpbSAiIFZJTV9WRVJTSU9OX1NIT1JUICIgKHNlbGYtaW5zdGFsbGluZylcIlxuIik7CisJICAgIGZwcmludGYoZmQsICJcIlVuaW5zdGFsbFN0cmluZ1wiPVwiJXN1bmluc3RhbGwtZ3VpLmV4ZVwiXG4iLCBidWYpOworCX0KKworCWZjbG9zZShmZCk7CisKKwlydW5fY29tbWFuZCgicmVnZWRpdCAvcyB2aW0ucmVnIik7CisKKwlyZW1vdmUoInZpbS5yZWciKTsKKyAgICB9CisjZW5kaWYgLyogaWYgZGVmaW5lZChESkdQUCkgfHwgZGVmaW5lZChXSU4zMjY0KSAqLworfQorCisgICAgc3RhdGljIHZvaWQKK2NoYW5nZV9wb3B1cF9jaG9pY2UoaW50IGlkeCkKK3sKKyAgICBpZiAoaW5zdGFsbF9wb3B1cCA9PSAwKQorICAgIHsKKwljaG9pY2VzW2lkeF0udGV4dCA9ICJJbnN0YWxsIGFuIGVudHJ5IGZvciBWaW0gaW4gdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSByaWdodFxuICAgIG1vdXNlIGJ1dHRvbiBzbyB0aGF0IHlvdSBjYW4gZWRpdCBhbnkgZmlsZSB3aXRoIFZpbSI7CisJaW5zdGFsbF9wb3B1cCA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY2hvaWNlc1tpZHhdLnRleHQgPSAiRG8gTk9UIGluc3RhbGwgYW4gZW50cnkgZm9yIFZpbSBpbiB0aGUgcG9wdXAgbWVudSBmb3IgdGhlXG4gICAgcmlnaHQgbW91c2UgYnV0dG9uIHRvIGVkaXQgYW55IGZpbGUgd2l0aCBWaW0iOworCWluc3RhbGxfcG9wdXAgPSAwOworICAgIH0KK30KKworLyoKKyAqIE9ubHkgYWRkIHRoZSBjaG9pY2UgZm9yIHRoZSBwb3B1cCBtZW51IGVudHJ5IHdoZW4gZ3ZpbS5leGUgd2FzIGZvdW5kIGFuZAorICogYm90aCBndmltZXh0LmRsbCBhbmQgcmVnZWRpdC5leGUgZXhpc3QuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5pdF9wb3B1cF9jaG9pY2Uodm9pZCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdAlzdDsKKworICAgIGlmIChoYXNfZ3ZpbQorCSAgICAmJiAoc3RhdCgiZ3ZpbWV4dC5kbGwiLCAmc3QpID49IDAKKwkJfHwgc3RhdCgiZ3ZpbWV4dC9ndmltZXh0LmRsbCIsICZzdCkgPj0gMCkKKyNpZm5kZWYgV0lOMzI2NAorCSAgICAmJiBzZWFyY2hwYXRoKCJyZWdlZGl0LmV4ZSIpICE9IE5VTEwKKyNlbmRpZgorICAgICAgICkKKyAgICB7CisJY2hvaWNlc1tjaG9pY2VfY291bnRdLmNoYW5nZWZ1bmMgPSBjaGFuZ2VfcG9wdXBfY2hvaWNlOworCWNob2ljZXNbY2hvaWNlX2NvdW50XS5pbnN0YWxsZnVuYyA9IE5VTEw7CisJY2hvaWNlc1tjaG9pY2VfY291bnRdLmFjdGl2ZSA9IDE7CisJY2hhbmdlX3BvcHVwX2Nob2ljZShjaG9pY2VfY291bnQpOyAgLyogc2V0IHRoZSB0ZXh0ICovCisJKytjaG9pY2VfY291bnQ7CisgICAgfQorICAgIGVsc2UKKwlhZGRfZHVtbXlfY2hvaWNlKCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorY2hhbmdlX29wZW53aXRoX2Nob2ljZShpbnQgaWR4KQoreworICAgIGlmIChpbnN0YWxsX29wZW53aXRoID09IDApCisgICAgeworCWNob2ljZXNbaWR4XS50ZXh0ID0gIkFkZCBWaW0gdG8gdGhlIFwiT3BlbiBXaXRoLi4uXCIgbGlzdCBpbiB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIHJpZ2h0XG4gICAgbW91c2UgYnV0dG9uIHNvIHRoYXQgeW91IGNhbiBlZGl0IGFueSBmaWxlIHdpdGggVmltIjsKKwlpbnN0YWxsX29wZW53aXRoID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwljaG9pY2VzW2lkeF0udGV4dCA9ICJEbyBOT1QgYWRkIFZpbSB0byB0aGUgXCJPcGVuIFdpdGguLi5cIiBsaXN0IGluIHRoZSBwb3B1cCBtZW51IGZvciB0aGVcbiAgICByaWdodCBtb3VzZSBidXR0b24gdG8gZWRpdCBhbnkgZmlsZSB3aXRoIFZpbSI7CisJaW5zdGFsbF9vcGVud2l0aCA9IDA7CisgICAgfQorfQorCisvKgorICogT25seSBhZGQgdGhlIGNob2ljZSBmb3IgdGhlIG9wZW4td2l0aCBtZW51IGVudHJ5IHdoZW4gZ3ZpbS5leGUgd2FzIGZvdW5kCisgKiBhbmQgYW5kIHJlZ2VkaXQuZXhlIGV4aXN0LgorICovCisgICAgc3RhdGljIHZvaWQKK2luaXRfb3BlbndpdGhfY2hvaWNlKHZvaWQpCit7CisgICAgaWYgKGhhc19ndmltCisjaWZuZGVmIFdJTjMyNjQKKwkgICAgJiYgc2VhcmNocGF0aCgicmVnZWRpdC5leGUiKSAhPSBOVUxMCisjZW5kaWYKKyAgICAgICApCisgICAgeworCWNob2ljZXNbY2hvaWNlX2NvdW50XS5jaGFuZ2VmdW5jID0gY2hhbmdlX29wZW53aXRoX2Nob2ljZTsKKwljaG9pY2VzW2Nob2ljZV9jb3VudF0uaW5zdGFsbGZ1bmMgPSBOVUxMOworCWNob2ljZXNbY2hvaWNlX2NvdW50XS5hY3RpdmUgPSAxOworCWNoYW5nZV9vcGVud2l0aF9jaG9pY2UoY2hvaWNlX2NvdW50KTsgIC8qIHNldCB0aGUgdGV4dCAqLworCSsrY2hvaWNlX2NvdW50OworICAgIH0KKyAgICBlbHNlCisJYWRkX2R1bW15X2Nob2ljZSgpOworfQorCisjaWZkZWYgV0lOMzI2NAorLyogY3JlYXRlX3Nob3J0Y3V0CisgKgorICogQ3JlYXRlIGEgc2hlbGwgbGluay4KKyAqCisgKiByZXR1cm5zIDAgb24gZmFpbHVyZSwgbm9uLXplcm8gb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorICoKKyAqIE5PVEU6ICBDdXJyZW50bHkgdW50ZXN0ZWQgd2l0aCBtaW5ndy4KKyAqLworICAgIGludAorY3JlYXRlX3Nob3J0Y3V0KAorCWNvbnN0IGNoYXIgKnNob3J0Y3V0X25hbWUsCisJY29uc3QgY2hhciAqaWNvbmZpbGVfcGF0aCwKKwlpbnQJICAgIGljb25pbmRleCwKKwljb25zdCBjaGFyICpzaG9ydGN1dF90YXJnZXQsCisJY29uc3QgY2hhciAqc2hvcnRjdXRfYXJncywKKwljb25zdCBjaGFyICp3b3JraW5nZGlyCisJKQoreworICAgIElTaGVsbExpbmsJICAgICpzaGVsbGxpbmtfcHRyOworICAgIEhSRVNVTFQJICAgIGhyZXM7CisgICAgSVBlcnNpc3RGaWxlCSAgICAqcGVyc2lzdGZpbGVfcHRyOworCisgICAgLyogSW5pdGlhbGl6ZSBDT00gbGlicmFyeSAqLworICAgIGhyZXMgPSBDb0luaXRpYWxpemUoTlVMTCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHJlcykpCisgICAgeworCXByaW50ZigiRXJyb3I6ICBDb3VsZCBub3Qgb3BlbiB0aGUgQ09NIGxpYnJhcnkuICBOb3QgY3JlYXRpbmcgc2hvcnRjdXQuXG4iKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBJbnN0YW50aWF0ZSBhIENPTSBvYmplY3QgZm9yIHRoZSBTaGVsbExpbmssIHN0b3JlIGEgcG9pbnRlciB0byBpdAorICAgICAqIGluIHNoZWxsbGlua19wdHIuICAqLworICAgIGhyZXMgPSBDb0NyZWF0ZUluc3RhbmNlKCZDTFNJRF9TaGVsbExpbmssCisJCQkgICBOVUxMLAorCQkJICAgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsCisJCQkgICAmSUlEX0lTaGVsbExpbmssCisJCQkgICAodm9pZCAqKikgJnNoZWxsbGlua19wdHIpOworCisgICAgaWYgKFNVQ0NFRURFRChocmVzKSkgLyogSWYgdGhlIGluc3RhbnRpYXRpb24gd2FzIHN1Y2Nlc3NmdWwuLi4gKi8KKyAgICB7CisJLyogLi4uVGhlbiBidWlsZCBhIFBlcnNpc3RGaWxlIGludGVyZmFjZSBmb3IgdGhlIFNoZWxsTGluayBzbyB3ZSBjYW4KKwkgKiBzYXZlIGl0IGFzIGEgZmlsZSBhZnRlciB3ZSBidWlsZCBpdC4gICovCisJaHJlcyA9IHNoZWxsbGlua19wdHItPmxwVnRibC0+UXVlcnlJbnRlcmZhY2Uoc2hlbGxsaW5rX3B0ciwKKwkJJklJRF9JUGVyc2lzdEZpbGUsICh2b2lkICoqKSAmcGVyc2lzdGZpbGVfcHRyKTsKKworCWlmIChTVUNDRUVERUQoaHJlcykpCisJeworCSAgICB3Y2hhcl90IHdzeltCVUZTSVpFXTsKKworCSAgICAvKiB0cmFuc2xhdGUgdGhlIChwb3NzaWJseSkgbXVsdGlieXRlIHNob3J0Y3V0IGZpbGVuYW1lIHRvIHdpbmRvd3MKKwkgICAgICogVW5pY29kZSBzbyBpdCBjYW4gYmUgdXNlZCBhcyBhIGZpbGUgbmFtZS4KKwkgICAgICovCisJICAgIE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfQUNQLCAwLCBzaG9ydGN1dF9uYW1lLCAtMSwgd3N6LCBCVUZTSVpFKTsKKworCSAgICAvKiBzZXQgdGhlIGF0dHJpYnV0ZXMgKi8KKwkgICAgc2hlbGxsaW5rX3B0ci0+bHBWdGJsLT5TZXRQYXRoKHNoZWxsbGlua19wdHIsIHNob3J0Y3V0X3RhcmdldCk7CisJICAgIHNoZWxsbGlua19wdHItPmxwVnRibC0+U2V0V29ya2luZ0RpcmVjdG9yeShzaGVsbGxpbmtfcHRyLAorCQkJCQkJCQkgIHdvcmtpbmdkaXIpOworCSAgICBzaGVsbGxpbmtfcHRyLT5scFZ0YmwtPlNldEljb25Mb2NhdGlvbihzaGVsbGxpbmtfcHRyLAorCQkJCQkJICAgIGljb25maWxlX3BhdGgsIGljb25pbmRleCk7CisJICAgIHNoZWxsbGlua19wdHItPmxwVnRibC0+U2V0QXJndW1lbnRzKHNoZWxsbGlua19wdHIsIHNob3J0Y3V0X2FyZ3MpOworCisJICAgIC8qIHNhdmUgdGhlIHNob3J0Y3V0IHRvIGEgZmlsZSBhbmQgcmV0dXJuIHRoZSBQZXJzaXN0RmlsZSBvYmplY3QqLworCSAgICBwZXJzaXN0ZmlsZV9wdHItPmxwVnRibC0+U2F2ZShwZXJzaXN0ZmlsZV9wdHIsIHdzeiwgMSk7CisJICAgIHBlcnNpc3RmaWxlX3B0ci0+bHBWdGJsLT5SZWxlYXNlKHBlcnNpc3RmaWxlX3B0cik7CisJfQorCWVsc2UKKwl7CisJICAgIHByaW50ZigiUXVlcnlJbnRlcmZhY2UgRXJyb3JcbiIpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisKKwkvKiBSZXR1cm4gdGhlIFNoZWxsTGluayBvYmplY3QgKi8KKwlzaGVsbGxpbmtfcHRyLT5scFZ0YmwtPlJlbGVhc2Uoc2hlbGxsaW5rX3B0cik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJcHJpbnRmKCJDb0NyZWF0ZUluc3RhbmNlIEVycm9yIC0gaHJlcyA9ICUwOHhcbiIsIChpbnQpaHJlcyk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogQnVpbGQgYSBwYXRoIHRvIHdoZXJlIHdlIHdpbGwgcHV0IGEgc3BlY2lmaWVkIGxpbmsuCisgKgorICogUmV0dXJuIDAgb24gZXJyb3IsIG5vbi16ZXJvIG9uIHN1Y2Nlc3MKKyAqLworICAgaW50CitidWlsZF9saW5rX25hbWUoCisJY2hhcgkgICAqbGlua19wYXRoLAorCWNvbnN0IGNoYXIgKmxpbmtfbmFtZSwKKwljb25zdCBjaGFyICpzaGVsbF9mb2xkZXJfbmFtZSkKK3sKKyAgICBjaGFyCXNoZWxsX2ZvbGRlcl9wYXRoW0JVRlNJWkVdOworCisgICAgaWYgKGdldF9zaGVsbF9mb2xkZXJfcGF0aChzaGVsbF9mb2xkZXJfcGF0aCwgc2hlbGxfZm9sZGVyX25hbWUpID09IEZBSUwpCisgICAgeworCXByaW50ZigiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgYXR0ZW1wdGluZyB0byBmaW5kIHRoZSBwYXRoIHRvICVzLlxuIiwKKwkJCQkJCQkgICBzaGVsbF9mb2xkZXJfbmFtZSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgLyogTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzIChjcmVhdGUgU3RhcnQgTWVudVxQcm9ncmFtc1xWaW0pLgorICAgICAqIElnbm9yZSBlcnJvcnMgaWYgaXQgYWxyZWFkeSBleGlzdHMuICovCisgICAgdmltX21rZGlyKHNoZWxsX2ZvbGRlcl9wYXRoLCAwNzU1KTsKKworICAgIC8qIGJ1aWxkIHRoZSBwYXRoIHRvIHRoZSBzaG9ydGN1dCBhbmQgdGhlIHBhdGggdG8gZ3ZpbS5leGUgKi8KKyAgICBzcHJpbnRmKGxpbmtfcGF0aCwgIiVzXFwlcy5sbmsiLCBzaGVsbF9mb2xkZXJfcGF0aCwgbGlua19uYW1lKTsKKworICAgIHJldHVybiBPSzsKK30KKworICAgIHN0YXRpYyBpbnQKK2J1aWxkX3Nob3J0Y3V0KAorCWNvbnN0IGNoYXIgKm5hbWUsCS8qIE5hbWUgb2YgdGhlIHNob3J0Y3V0ICovCisJY29uc3QgY2hhciAqZXhlbmFtZSwJLyogTmFtZSBvZiB0aGUgZXhlY3V0YWJsZSAoZS5nLiwgdmltLmV4ZSkgKi8KKwljb25zdCBjaGFyICphcmdzLAorCWNvbnN0IGNoYXIgKnNoZWxsX2ZvbGRlciwKKwljb25zdCBjaGFyICp3b3JraW5nZGlyKQoreworICAgIGNoYXIJZXhlY3V0YWJsZV9wYXRoW0JVRlNJWkVdOworICAgIGNoYXIJbGlua19uYW1lW0JVRlNJWkVdOworCisgICAgc3ByaW50ZihleGVjdXRhYmxlX3BhdGgsICIlc1xcJXMiLCBpbnN0YWxsZGlyLCBleGVuYW1lKTsKKworICAgIGlmIChidWlsZF9saW5rX25hbWUobGlua19uYW1lLCBuYW1lLCBzaGVsbF9mb2xkZXIpID09IEZBSUwpCisgICAgeworCXByaW50ZigiQW4gZXJyb3IgaGFzIG9jY3VycmVkLiAgQSBzaG9ydGN1dCB0byAlcyB3aWxsIG5vdCBiZSBjcmVhdGVkICVzLlxuIiwKKwkJbmFtZSwKKwkJKnNoZWxsX2ZvbGRlciA9PSAnZCcgPyAib24gdGhlIGRlc2t0b3AiIDogImluIHRoZSBTdGFydCBtZW51Iik7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgLyogQ3JlYXRlIHRoZSBzaG9ydGN1dDogKi8KKyAgICByZXR1cm4gY3JlYXRlX3Nob3J0Y3V0KGxpbmtfbmFtZSwgZXhlY3V0YWJsZV9wYXRoLCAwLAorCQkJCQkgICBleGVjdXRhYmxlX3BhdGgsIGFyZ3MsIHdvcmtpbmdkaXIpOworfQorCisvKgorICogV2UgdXNlZCB0byB1c2UgImhvbWVkaXIiIGFzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgYnV0IHRoYXQgaXMgYSBiYWQgY2hvaWNlCisgKiBvbiBtdWx0aS11c2VyIHN5c3RlbXMuICBOb3Qgc3BlY2lmeWluZyBhIGRpcmVjdG9yeSBhcHBlYXJzIHRvIHdvcmsgYmVzdC4KKyAqLworI2RlZmluZSBXT1JLRElSICIiCisKKy8qCisgKiBDcmVhdGUgc2hvcnRjdXQocykgaW4gdGhlIFN0YXJ0IE1lbnVcUHJvZ3JhbXNcVmltIGZvbGRlci4KKyAqLworICAgIHN0YXRpYyB2b2lkCitpbnN0YWxsX3N0YXJ0X21lbnUoaW50IGlkeCkKK3sKKyAgICBuZWVkX3VuaW5zdGFsbF9lbnRyeSA9IDE7CisgICAgcHJpbnRmKCJDcmVhdGluZyBzdGFydCBtZW51XG4iKTsKKyAgICBpZiAoaGFzX3ZpbSkKKyAgICB7CisJaWYgKGJ1aWxkX3Nob3J0Y3V0KCJWaW0iLCAidmltLmV4ZSIsICIiLAorCQkJCQkgICAgICBWSU1fU1RBUlRNRU5VLCBXT1JLRElSKSA9PSBGQUlMKQorCSAgICByZXR1cm47CisJaWYgKGJ1aWxkX3Nob3J0Y3V0KCJWaW0gUmVhZC1vbmx5IiwgInZpbS5leGUiLCAiLVIiLAorCQkJCQkgICAgICBWSU1fU1RBUlRNRU5VLCBXT1JLRElSKSA9PSBGQUlMKQorCSAgICByZXR1cm47CisJaWYgKGJ1aWxkX3Nob3J0Y3V0KCJWaW0gRGlmZiIsICJ2aW0uZXhlIiwgIi1kIiwKKwkJCQkJICAgICAgVklNX1NUQVJUTUVOVSwgV09SS0RJUikgPT0gRkFJTCkKKwkgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaGFzX2d2aW0pCisgICAgeworCWlmIChidWlsZF9zaG9ydGN1dCgiZ1ZpbSIsICJndmltLmV4ZSIsICIiLAorCQkJCQkgICAgICBWSU1fU1RBUlRNRU5VLCBXT1JLRElSKSA9PSBGQUlMKQorCSAgICByZXR1cm47CisJaWYgKGJ1aWxkX3Nob3J0Y3V0KCJnVmltIEVhc3kiLCAiZ3ZpbS5leGUiLCAiLXkiLAorCQkJCQkgICAgICBWSU1fU1RBUlRNRU5VLCBXT1JLRElSKSA9PSBGQUlMKQorCSAgICByZXR1cm47CisJaWYgKGJ1aWxkX3Nob3J0Y3V0KCJnVmltIFJlYWQtb25seSIsICJndmltLmV4ZSIsICItUiIsCisJCQkJCSAgICAgIFZJTV9TVEFSVE1FTlUsIFdPUktESVIpID09IEZBSUwpCisJICAgIHJldHVybjsKKwlpZiAoYnVpbGRfc2hvcnRjdXQoImdWaW0gRGlmZiIsICJndmltLmV4ZSIsICItZCIsCisJCQkJCSAgICAgIFZJTV9TVEFSVE1FTlUsIFdPUktESVIpID09IEZBSUwpCisJICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJ1aWxkX3Nob3J0Y3V0KCJVbmluc3RhbGwiLAorCQlpbnRlcmFjdGl2ZSA/ICJ1bmluc3RhbC5leGUiIDogInVuaW5zdGFsbC1ndWkuZXhlIiwgIiIsCisJCQkJCSAgIFZJTV9TVEFSVE1FTlUsIGluc3RhbGxkaXIpID09IEZBSUwpCisJcmV0dXJuOworICAgIC8qIEZvciBXaW5kb3dzIE5UIHRoZSB3b3JraW5nIGRpciBvZiB0aGUgdmltdHV0b3IuYmF0IG11c3QgYmUgcmlnaHQsCisgICAgICogb3RoZXJ3aXNlIGd2aW0uZXhlIHdvbid0IGJlIGZvdW5kIGFuZCB1c2luZyBndmltYmF0IGRvZXNuJ3Qgd29yay4gKi8KKyAgICBpZiAoYnVpbGRfc2hvcnRjdXQoIlZpbSB0dXRvciIsICJ2aW10dXRvci5iYXQiLCAiIiwKKwkJCQkJICAgVklNX1NUQVJUTUVOVSwgaW5zdGFsbGRpcikgPT0gRkFJTCkKKwlyZXR1cm47CisgICAgaWYgKGJ1aWxkX3Nob3J0Y3V0KCJIZWxwIiwgaGFzX2d2aW0gPyAiZ3ZpbS5leGUiIDogInZpbS5leGUiLCAiLWMgaCIsCisJCQkJCSAgICAgIFZJTV9TVEFSVE1FTlUsIFdPUktESVIpID09IEZBSUwpCisJcmV0dXJuOworICAgIHsKKwljaGFyCXNoZWxsX2ZvbGRlcl9wYXRoW0JVRlNJWkVdOworCisJLyogQ3JlYXRpbmcgdGhlIFVSTCBzaG9ydGN1dCB3b3JrcyBhIGJpdCBkaWZmZXJlbnRseS4uLiAqLworCWlmIChnZXRfc2hlbGxfZm9sZGVyX3BhdGgoc2hlbGxfZm9sZGVyX3BhdGgsIFZJTV9TVEFSVE1FTlUpID09IEZBSUwpCisJeworCSAgICBwcmludGYoIkZpbmRpbmcgdGhlIHBhdGggb2YgdGhlIFN0YXJ0IG1lbnUgZmFpbGVkXG4iKTsKKwkgICAgcmV0dXJuIDsKKwl9CisJYWRkX3BhdGhzZXAoc2hlbGxfZm9sZGVyX3BhdGgpOworCXN0cmNhdChzaGVsbF9mb2xkZXJfcGF0aCwgIlZpbSBPbmxpbmUudXJsIik7CisJaWYgKCFXcml0ZVByaXZhdGVQcm9maWxlU3RyaW5nKCJJbnRlcm5ldFNob3J0Y3V0IiwgIlVSTCIsCisJCQkJICAgICAiaHR0cDovL3ZpbS5zZi5uZXQvIiwgc2hlbGxfZm9sZGVyX3BhdGgpKQorCXsKKwkgICAgcHJpbnRmKCJDcmVhdGluZyB0aGUgVmltIG9ubGluZSBVUkwgZmFpbGVkXG4iKTsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAordG9nZ2xlX3N0YXJ0bWVudV9jaG9pY2UoaW50IGlkeCkKK3sKKyAgICBpZiAoY2hvaWNlc1tpZHhdLmluc3RhbGxmdW5jID09IE5VTEwpCisgICAgeworCWNob2ljZXNbaWR4XS5pbnN0YWxsZnVuYyA9IGluc3RhbGxfc3RhcnRfbWVudTsKKwljaG9pY2VzW2lkeF0udGV4dCA9ICJBZGQgVmltIHRvIHRoZSBTdGFydCBtZW51IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwljaG9pY2VzW2lkeF0uaW5zdGFsbGZ1bmMgPSBOVUxMOworCWNob2ljZXNbaWR4XS50ZXh0ID0gIkRvIE5PVCBhZGQgVmltIHRvIHRoZSBTdGFydCBtZW51IjsKKyAgICB9Cit9CisKKy8qCisgKiBGdW5jdGlvbiB0byBhY3R1YWxseSBjcmVhdGUgdGhlIHNob3J0Y3V0cworICoKKyAqIEN1cnJlbnRseSBJIGFtIHN1cHBseWluZyBubyB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgc2hvcnRjdXQuICBUaGlzCisgKiAgICBtZWFucyB0aGF0IHRoZSBpbml0aWFsIHdvcmtpbmcgZGlyIHdpbGwgYmU6CisgKiAgICAtIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2hvcnRjdXQgaWYgbm8gZmlsZSBpcyBzdXBwbGllZAorICogICAgLSB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgYmVpbmcgZWRpdGVkIGlmIGEgZmlsZSBpcyBzdXBwbGllZCAoaWUgdmlhCisgKiAgICAgIGRyYWcgYW5kIGRyb3Agb250byB0aGUgc2hvcnRjdXQpLgorICovCisgICAgdm9pZAoraW5zdGFsbF9zaG9ydGN1dF9ndmltKGludCBpZHgpCit7CisgICAgLyogQ3JlYXRlIHNob3J0Y3V0KHMpIG9uIHRoZSBkZXNrdG9wICovCisgICAgaWYgKGNob2ljZXNbaWR4XS5hcmcpCisgICAgeworCSh2b2lkKWJ1aWxkX3Nob3J0Y3V0KGljb25fbmFtZXNbMF0sICJndmltLmV4ZSIsCisJCQkJCQkgICAgICAiIiwgImRlc2t0b3AiLCBXT1JLRElSKTsKKwluZWVkX3VuaW5zdGFsbF9lbnRyeSA9IDE7CisgICAgfQorfQorCisgICAgdm9pZAoraW5zdGFsbF9zaG9ydGN1dF9ldmltKGludCBpZHgpCit7CisgICAgaWYgKGNob2ljZXNbaWR4XS5hcmcpCisgICAgeworCSh2b2lkKWJ1aWxkX3Nob3J0Y3V0KGljb25fbmFtZXNbMV0sICJndmltLmV4ZSIsCisJCQkJCQkgICAgIi15IiwgImRlc2t0b3AiLCBXT1JLRElSKTsKKwluZWVkX3VuaW5zdGFsbF9lbnRyeSA9IDE7CisgICAgfQorfQorCisgICAgdm9pZAoraW5zdGFsbF9zaG9ydGN1dF9ndmlldyhpbnQgaWR4KQoreworICAgIGlmIChjaG9pY2VzW2lkeF0uYXJnKQorICAgIHsKKwkodm9pZClidWlsZF9zaG9ydGN1dChpY29uX25hbWVzWzJdLCAiZ3ZpbS5leGUiLAorCQkJCQkJICAgICItUiIsICJkZXNrdG9wIiwgV09SS0RJUik7CisJbmVlZF91bmluc3RhbGxfZW50cnkgPSAxOworICAgIH0KK30KKworICAgIHZvaWQKK3RvZ2dsZV9zaG9ydGN1dF9jaG9pY2UoaW50IGlkeCkKK3sKKyAgICBjaGFyCSphcmc7CisKKyAgICBpZiAoY2hvaWNlc1tpZHhdLmluc3RhbGxmdW5jID09IGluc3RhbGxfc2hvcnRjdXRfZ3ZpbSkKKwlhcmcgPSAiZ1ZpbSI7CisgICAgZWxzZSBpZiAoY2hvaWNlc1tpZHhdLmluc3RhbGxmdW5jID09IGluc3RhbGxfc2hvcnRjdXRfZXZpbSkKKwlhcmcgPSAiZ1ZpbSBFYXN5IjsKKyAgICBlbHNlCisJYXJnID0gImdWaW0gUmVhZC1vbmx5IjsKKyAgICBpZiAoY2hvaWNlc1tpZHhdLmFyZykKKyAgICB7CisJY2hvaWNlc1tpZHhdLmFyZyA9IDA7CisJYWxsb2NfdGV4dChpZHgsICJEbyBOT1QgY3JlYXRlIGEgZGVza3RvcCBpY29uIGZvciAlcyIsIGFyZyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY2hvaWNlc1tpZHhdLmFyZyA9IDE7CisJYWxsb2NfdGV4dChpZHgsICJDcmVhdGUgYSBkZXNrdG9wIGljb24gZm9yICVzIiwgYXJnKTsKKyAgICB9Cit9CisjZW5kaWYgLyogV0lOMzI2NCAqLworCisgICAgc3RhdGljIHZvaWQKK2luaXRfc3RhcnRtZW51X2Nob2ljZSh2b2lkKQoreworI2lmZGVmIFdJTjMyNjQKKyAgICAvKiBTdGFydCBtZW51ICovCisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmNoYW5nZWZ1bmMgPSB0b2dnbGVfc3RhcnRtZW51X2Nob2ljZTsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uaW5zdGFsbGZ1bmMgPSBOVUxMOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5hY3RpdmUgPSAxOworICAgIHRvZ2dsZV9zdGFydG1lbnVfY2hvaWNlKGNob2ljZV9jb3VudCk7CS8qIHNldCB0aGUgdGV4dCAqLworICAgICsrY2hvaWNlX2NvdW50OworI2Vsc2UKKyAgICBhZGRfZHVtbXlfY2hvaWNlKCk7CisjZW5kaWYKK30KKworLyoKKyAqIEFkZCB0aGUgY2hvaWNlIGZvciB0aGUgZGVza3RvcCBzaG9ydGN1dHMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5pdF9zaG9ydGN1dF9jaG9pY2VzKHZvaWQpCit7CisjaWZkZWYgV0lOMzI2NAorICAgIC8qIFNob3J0Y3V0IHRvIGd2aW0gKi8KKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0udGV4dCA9IE5VTEw7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmFyZyA9IDA7CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmFjdGl2ZSA9IGhhc19ndmltOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5jaGFuZ2VmdW5jID0gdG9nZ2xlX3Nob3J0Y3V0X2Nob2ljZTsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uaW5zdGFsbGZ1bmMgPSBpbnN0YWxsX3Nob3J0Y3V0X2d2aW07CisgICAgdG9nZ2xlX3Nob3J0Y3V0X2Nob2ljZShjaG9pY2VfY291bnQpOworICAgICsrY2hvaWNlX2NvdW50OworCisgICAgLyogU2hvcnRjdXQgdG8gZXZpbSAqLworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS50ZXh0ID0gTlVMTDsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uYXJnID0gMDsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uYWN0aXZlID0gaGFzX2d2aW07CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmNoYW5nZWZ1bmMgPSB0b2dnbGVfc2hvcnRjdXRfY2hvaWNlOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5pbnN0YWxsZnVuYyA9IGluc3RhbGxfc2hvcnRjdXRfZXZpbTsKKyAgICB0b2dnbGVfc2hvcnRjdXRfY2hvaWNlKGNob2ljZV9jb3VudCk7CisgICAgKytjaG9pY2VfY291bnQ7CisKKyAgICAvKiBTaG9ydGN1dCB0byBndmlldyAqLworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS50ZXh0ID0gTlVMTDsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uYXJnID0gMDsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uYWN0aXZlID0gaGFzX2d2aW07CisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLmNoYW5nZWZ1bmMgPSB0b2dnbGVfc2hvcnRjdXRfY2hvaWNlOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5pbnN0YWxsZnVuYyA9IGluc3RhbGxfc2hvcnRjdXRfZ3ZpZXc7CisgICAgdG9nZ2xlX3Nob3J0Y3V0X2Nob2ljZShjaG9pY2VfY291bnQpOworICAgICsrY2hvaWNlX2NvdW50OworI2Vsc2UKKyAgICBhZGRfZHVtbXlfY2hvaWNlKCk7CisgICAgYWRkX2R1bW15X2Nob2ljZSgpOworICAgIGFkZF9kdW1teV9jaG9pY2UoKTsKKyNlbmRpZgorfQorCisjaWZkZWYgV0lOMzI2NAorLyoKKyAqIEF0dGVtcHQgdG8gcmVnaXN0ZXIgT0xFIGZvciBWaW0uCisgKi8KKyAgIHN0YXRpYyB2b2lkCitpbnN0YWxsX09MRV9yZWdpc3Rlcih2b2lkKQoreworICAgIGNoYXIgcmVnaXN0ZXJfY29tbWFuZF9zdHJpbmdbQlVGU0laRSArIDMwXTsKKworICAgIHByaW50ZigiXG4tLS0gQXR0ZW1wdGluZyB0byByZWdpc3RlciBWaW0gd2l0aCBPTEUgLS0tXG4iKTsKKyAgICBwcmludGYoIihUaGVyZSBpcyBubyBtZXNzYWdlIHdoZXRoZXIgdGhpcyB3b3JrcyBvciBub3QuKVxuIik7CisKKyNpZm5kZWYgX19DWUdXSU5fXworICAgIHNwcmludGYocmVnaXN0ZXJfY29tbWFuZF9zdHJpbmcsICJcIiVzXFxndmltLmV4ZVwiIC1zaWxlbnQgLXJlZ2lzdGVyIiwgaW5zdGFsbGRpcik7CisjZWxzZQorICAgIC8qIGhhbmRsZSB0aGlzIGRpZmZlcmVudGx5IGZvciBDeWd3aW4gd2hpY2ggc29tZXRpbWVzIGhhcyB0cm91YmxlIHdpdGgKKyAgICAgKiBXaW5kb3dzLXN0eWxlIHBhdGhuYW1lcyBoZXJlLiAqLworICAgIHNwcmludGYocmVnaXN0ZXJfY29tbWFuZF9zdHJpbmcsICIuL2d2aW0uZXhlIC1zaWxlbnQgLXJlZ2lzdGVyIik7CisjZW5kaWYKKyAgICBzeXN0ZW0ocmVnaXN0ZXJfY29tbWFuZF9zdHJpbmcpOworfQorI2VuZGlmIC8qIFdJTjMyNjQgKi8KKworLyoKKyAqIFJlbW92ZSB0aGUgbGFzdCBwYXJ0IG9mIGRpcmVjdG9yeSAicGF0aFtdIiB0byBnZXQgaXRzIHBhcmVudCwgYW5kIHB1dCB0aGUKKyAqIHJlc3VsdCBpbiAidG9bXSIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZGlyX3JlbW92ZV9sYXN0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgdG9bQlVGU0laRV0pCit7CisgICAgY2hhciBjOworICAgIGxvbmcgbGFzdF9jaGFyX3RvX2NvcHk7CisgICAgbG9uZyBwYXRoX2xlbmd0aCA9IHN0cmxlbihwYXRoKTsKKworICAgIC8qIHNraXAgdGhlIGxhc3QgY2hhcmFjdGVyIGp1c3QgaW4gY2FzZSBpdCBpcyBhICdcXCcgKi8KKyAgICBsYXN0X2NoYXJfdG9fY29weSA9IHBhdGhfbGVuZ3RoIC0gMjsKKyAgICBjID0gcGF0aFtsYXN0X2NoYXJfdG9fY29weV07CisKKyAgICB3aGlsZSAoYyAhPSAnXFwnKQorICAgIHsKKwlsYXN0X2NoYXJfdG9fY29weS0tOworCWMgPSBwYXRoW2xhc3RfY2hhcl90b19jb3B5XTsKKyAgICB9CisKKyAgICBzdHJuY3B5KHRvLCBwYXRoLCAoc2l6ZV90KWxhc3RfY2hhcl90b19jb3B5KTsKKyAgICB0b1tsYXN0X2NoYXJfdG9fY29weV0gPSBOVUw7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorc2V0X2RpcmVjdG9yaWVzX3RleHQoaW50IGlkeCkKK3sKKyAgICBpZiAodmltZmlsZXNfZGlyX2Nob2ljZSA9PSAoaW50KXZpbWZpbGVzX2Rpcl9ub25lKQorCWFsbG9jX3RleHQoaWR4LCAiRG8gTk9UIGNyZWF0ZSBwbHVnaW4gZGlyZWN0b3JpZXMlcyIsICIiKTsKKyAgICBlbHNlCisJYWxsb2NfdGV4dChpZHgsICJDcmVhdGUgcGx1Z2luIGRpcmVjdG9yaWVzOiAlcyIsCisJCQkJICAgdmltZmlsZXNfZGlyX2Nob2ljZXNbdmltZmlsZXNfZGlyX2Nob2ljZV0pOworfQorCisvKgorICogQ2hhbmdlIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgdmltIHBsdWdpbiBkaXJlY3RvcmllcyB3aWxsIGJlIGNyZWF0ZWQgaW46CisgKiAkSE9NRSwgJFZJTSBvciBub3doZXJlLgorICovCisgICAgc3RhdGljIHZvaWQKK2NoYW5nZV9kaXJlY3Rvcmllc19jaG9pY2UoaW50IGlkeCkKK3sKKyAgICBpbnQJICAgIGNob2ljZV9jb3VudCA9IFRBQkxFX1NJWkUodmltZmlsZXNfZGlyX2Nob2ljZXMpOworCisgICAgLyogRG9uJ3Qgb2ZmZXIgdGhlICRIT01FIGNob2ljZSBpZiAkSE9NRSBpc24ndCBzZXQuICovCisgICAgaWYgKGdldGVudigiSE9NRSIpID09IE5VTEwpCisJLS1jaG9pY2VfY291bnQ7CisgICAgdmltZmlsZXNfZGlyX2Nob2ljZSA9IGdldF9jaG9pY2UodmltZmlsZXNfZGlyX2Nob2ljZXMsIGNob2ljZV9jb3VudCk7CisgICAgc2V0X2RpcmVjdG9yaWVzX3RleHQoaWR4KTsKK30KKworLyoKKyAqIENyZWF0ZSB0aGUgcGx1Z2luIGRpcmVjdG9yaWVzLi4uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitpbnN0YWxsX3ZpbWZpbGVzZGlyKGludCBpZHgpCit7CisgICAgaW50IGk7CisgICAgY2hhciAqcDsKKyAgICBjaGFyIHZpbWRpcl9wYXRoW0JVRlNJWkVdOworICAgIGNoYXIgdmltZmlsZXNfcGF0aFtCVUZTSVpFXTsKKyAgICBjaGFyIHRtcF9kaXJuYW1lW0JVRlNJWkVdOworCisgICAgLyogc3dpdGNoIG9uIHRoZSBsb2NhdGlvbiB0aGF0IHRoZSB1c2VyIHdhbnRzIHRoZSBwbHVnaW4gZGlyZWN0b3JpZXMKKyAgICAgKiBidWlsdCBpbiAqLworICAgIHN3aXRjaCAodmltZmlsZXNfZGlyX2Nob2ljZSkKKyAgICB7CisJY2FzZSB2aW1maWxlc19kaXJfdmltOgorCXsKKwkgICAgLyogR28gdG8gdGhlICVWSU0lIGRpcmVjdG9yeSAtIGNoZWNrIGVudiBmaXJzdCwgdGhlbiBnbyBvbmUgZGlyCisJICAgICAqCSAgIGJlbG93IGluc3RhbGxkaXIgaWYgdGhlcmUgaXMgbm8gJVZJTSUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJICAgICAqCSAgIFRoZSBhY2N1cmFjeSBvZiAkVklNIGlzIGNoZWNrZWQgaW4gaW5zcGVjdF9zeXN0ZW0oKSwgc28gd2UKKwkgICAgICoJICAgY2FuIGJlIHN1cmUgaXQgaXMgb2sgdG8gdXNlIGhlcmUuICovCisJICAgIHAgPSBnZXRlbnYoIlZJTSIpOworCSAgICBpZiAocCA9PSBOVUxMKSAvKiBObyAkVklNIGluIHBhdGggKi8KKwkJZGlyX3JlbW92ZV9sYXN0KGluc3RhbGxkaXIsIHZpbWRpcl9wYXRoKTsKKwkgICAgZWxzZQorCQlzdHJjcHkodmltZGlyX3BhdGgsIHApOworCSAgICBicmVhazsKKwl9CisJY2FzZSB2aW1maWxlc19kaXJfaG9tZToKKwl7CisJICAgIC8qIEZpbmQgdGhlICRIT01FIGRpcmVjdG9yeS4gIEl0cyBleGlzdGVuY2Ugd2FzIGFscmVhZHkgY2hlY2tlZC4gKi8KKwkgICAgcCA9IGdldGVudigiSE9NRSIpOworCSAgICBpZiAocCA9PSBOVUxMKQorCSAgICB7CisJCXByaW50ZigiSW50ZXJuYWwgZXJyb3I6ICRIT01FIGlzIE5VTExcbiIpOworCQlwID0gImM6XFwiOworCSAgICB9CisJICAgIHN0cmNweSh2aW1kaXJfcGF0aCwgcCk7CisJICAgIGJyZWFrOworCX0KKwljYXNlIHZpbWZpbGVzX2Rpcl9ub25lOgorCXsKKwkgICAgLyogRG8gbm90IGNyZWF0ZSB2aW0gcGx1Z2luIGRpcmVjdG9yeSAqLworCSAgICByZXR1cm47CisJfQorICAgIH0KKworICAgIC8qIE5vdywganVzdCBjcmVhdGUgdGhlIGRpcmVjdG9yeS4JSWYgaXQgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgZmFpbAorICAgICAqIHNpbGVudGx5LiAgKi8KKyAgICBzcHJpbnRmKHZpbWZpbGVzX3BhdGgsICIlc1xcdmltZmlsZXMiLCB2aW1kaXJfcGF0aCk7CisgICAgdmltX21rZGlyKHZpbWZpbGVzX3BhdGgsIDA3NTUpOworCisgICAgcHJpbnRmKCJDcmVhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIGluIFwiJXNcIjpcbiIsIHZpbWZpbGVzX3BhdGgpOworICAgIGZvciAoaSA9IDA7IGkgPCBUQUJMRV9TSVpFKHZpbWZpbGVzX3N1YmRpcnMpOyBpKyspCisgICAgeworCXNwcmludGYodG1wX2Rpcm5hbWUsICIlc1xcJXMiLCB2aW1maWxlc19wYXRoLCB2aW1maWxlc19zdWJkaXJzW2ldKTsKKwlwcmludGYoIiAgJXMiLCB2aW1maWxlc19zdWJkaXJzW2ldKTsKKwl2aW1fbWtkaXIodG1wX2Rpcm5hbWUsIDA3NTUpOworICAgIH0KKyAgICBwcmludGYoIlxuIik7Cit9CisKKy8qCisgKiBBZGQgdGhlIGNyZWF0aW9uIG9mIHJ1bnRpbWUgZmlsZXMgdG8gdGhlIHNldHVwIHNlcXVlbmNlLgorICovCisgICAgc3RhdGljIHZvaWQKK2luaXRfZGlyZWN0b3JpZXNfY2hvaWNlKHZvaWQpCit7CisgICAgc3RydWN0IHN0YXQJc3Q7CisgICAgY2hhcgl0bXBfZGlybmFtZVtCVUZTSVpFXTsKKyAgICBjaGFyCSpwOworCisgICAgY2hvaWNlc1tjaG9pY2VfY291bnRdLnRleHQgPSBhbGxvYygxNTApOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5jaGFuZ2VmdW5jID0gY2hhbmdlX2RpcmVjdG9yaWVzX2Nob2ljZTsKKyAgICBjaG9pY2VzW2Nob2ljZV9jb3VudF0uaW5zdGFsbGZ1bmMgPSBpbnN0YWxsX3ZpbWZpbGVzZGlyOworICAgIGNob2ljZXNbY2hvaWNlX2NvdW50XS5hY3RpdmUgPSAxOworCisgICAgLyogQ2hlY2sgaWYgdGhlICJjb21waWxlciIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLiAgVGhhdCdzIGEgZ29vZAorICAgICAqIGluZGljYXRpb24gdGhhdCB0aGUgcGx1Z2luIGRpcmVjdG9yaWVzIHdlcmUgYWxyZWFkeSBjcmVhdGVkLiAqLworICAgIGlmIChnZXRlbnYoIkhPTUUiKSAhPSBOVUxMKQorICAgIHsKKwl2aW1maWxlc19kaXJfY2hvaWNlID0gKGludCl2aW1maWxlc19kaXJfaG9tZTsKKwlzcHJpbnRmKHRtcF9kaXJuYW1lLCAiJXNcXHZpbWZpbGVzXFxjb21waWxlciIsIGdldGVudigiSE9NRSIpKTsKKwlpZiAoc3RhdCh0bXBfZGlybmFtZSwgJnN0KSA9PSAwKQorCSAgICB2aW1maWxlc19kaXJfY2hvaWNlID0gKGludCl2aW1maWxlc19kaXJfbm9uZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwl2aW1maWxlc19kaXJfY2hvaWNlID0gKGludCl2aW1maWxlc19kaXJfdmltOworCXAgPSBnZXRlbnYoIlZJTSIpOworCWlmIChwID09IE5VTEwpIC8qIE5vICRWSU0gaW4gcGF0aCwgdXNlIHRoZSBpbnN0YWxsIGRpciAqLworCSAgICBkaXJfcmVtb3ZlX2xhc3QoaW5zdGFsbGRpciwgdG1wX2Rpcm5hbWUpOworCWVsc2UKKwkgICAgc3RyY3B5KHRtcF9kaXJuYW1lLCBwKTsKKwlzdHJjYXQodG1wX2Rpcm5hbWUsICJcXHZpbWZpbGVzXFxjb21waWxlciIpOworCWlmIChzdGF0KHRtcF9kaXJuYW1lLCAmc3QpID09IDApCisJICAgIHZpbWZpbGVzX2Rpcl9jaG9pY2UgPSAoaW50KXZpbWZpbGVzX2Rpcl9ub25lOworICAgIH0KKworICAgIHNldF9kaXJlY3Rvcmllc190ZXh0KGNob2ljZV9jb3VudCk7CisgICAgKytjaG9pY2VfY291bnQ7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgY2hvaWNlcyBhbmQgdGhlIGRlZmF1bHQgdmFsdWVzLgorICovCisgICAgc3RhdGljIHZvaWQKK3NldHVwX2Nob2ljZXModm9pZCkKK3sKKyAgICAvKiBpbnN0YWxsIHRoZSBiYXRjaCBmaWxlcyAqLworICAgIGluaXRfYmF0X2Nob2ljZXMoKTsKKworICAgIC8qIChvdmVyKSB3cml0ZSBfdmltcmMgZmlsZSAqLworICAgIGluaXRfdmltcmNfY2hvaWNlcygpOworCisgICAgLyogV2hldGhlciB0byBhZGQgVmltIHRvIHRoZSBwb3B1cCBtZW51ICovCisgICAgaW5pdF9wb3B1cF9jaG9pY2UoKTsKKworICAgIC8qIFdoZXRoZXIgdG8gYWRkIFZpbSB0byB0aGUgIk9wZW4gV2l0aC4uLiIgbWVudSAqLworICAgIGluaXRfb3BlbndpdGhfY2hvaWNlKCk7CisKKyAgICAvKiBXaGV0aGVyIHRvIGFkZCBWaW0gdG8gdGhlIFN0YXJ0IE1lbnUuICovCisgICAgaW5pdF9zdGFydG1lbnVfY2hvaWNlKCk7CisKKyAgICAvKiBXaGV0aGVyIHRvIGFkZCBzaG9ydGN1dHMgdG8gdGhlIERlc2t0b3AuICovCisgICAgaW5pdF9zaG9ydGN1dF9jaG9pY2VzKCk7CisKKyAgICAvKiBXaGV0aGVyIHRvIGNyZWF0ZSB0aGUgcnVudGltZSBkaXJlY3Rvcmllcy4gKi8KKyAgICBpbml0X2RpcmVjdG9yaWVzX2Nob2ljZSgpOworfQorCisgICAgc3RhdGljIHZvaWQKK3ByaW50X2NtZF9saW5lX2hlbHAodm9pZCkKK3sKKyAgICBwcmludGYoIlZpbSBpbnN0YWxsZXIgbm9uLWludGVyYWN0aXZlIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6XG4iKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgcHJpbnRmKCItY3JlYXRlLWJhdGZpbGVzICBbdmltIGd2aW0gZXZpbSB2aWV3IGd2aWV3IHZpbWRpZmYgZ3ZpbWRpZmZdXG4iKTsKKyAgICBwcmludGYoIiAgICBDcmVhdGUgLmJhdCBmaWxlcyBmb3IgVmltIHZhcmlhbnRzIGluIHRoZSBXaW5kb3dzIGRpcmVjdG9yeS5cbiIpOworICAgIHByaW50ZigiLWNyZWF0ZS12aW1yY1xuIik7CisgICAgcHJpbnRmKCIgICAgQ3JlYXRlIGEgZGVmYXVsdCBfdmltcmMgZmlsZSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC5cbiIpOworICAgIHByaW50ZigiLWluc3RhbGwtcG9wdXBcbiIpOworICAgIHByaW50ZigiICAgIEluc3RhbGwgdGhlIEVkaXQtd2l0aC1WaW0gY29udGV4dCBtZW51IGVudHJ5XG4iKTsKKyAgICBwcmludGYoIi1pbnN0YWxsLW9wZW53aXRoXG4iKTsKKyAgICBwcmludGYoIiAgICBBZGQgVmltIHRvIHRoZSBcIk9wZW4gV2l0aC4uLlwiIGNvbnRleHQgbWVudSBsaXN0XG4iKTsKKyNpZmRlZiBXSU4zMjY0CisgICAgcHJpbnRmKCItYWRkLXN0YXJ0LW1lbnUiKTsKKyAgICBwcmludGYoIiAgICBBZGQgVmltIHRvIHRoZSBzdGFydCBtZW51XG4iKTsKKyAgICBwcmludGYoIi1pbnN0YWxsLWljb25zIik7CisgICAgcHJpbnRmKCIgICAgQ3JlYXRlIGljb25zIGZvciBnVmltIGV4ZWN1dGFibGVzIG9uIHRoZSBkZXNrdG9wXG4iKTsKKyNlbmRpZgorICAgIHByaW50ZigiLWNyZWF0ZS1kaXJlY3RvcmllcyBbdmltfGhvbWVdXG4iKTsKKyAgICBwcmludGYoIiAgICBDcmVhdGUgcnVudGltZSBkaXJlY3RvcmllcyB0byBkcm9wIHBsdWdpbnMgaW50bzsgaW4gdGhlICRWSU1cbiIpOworICAgIHByaW50ZigiICAgIG9yICRIT01FIGRpcmVjdG9yeVxuIik7CisjaWZkZWYgV0lOMzI2NAorICAgIHByaW50ZigiLXJlZ2lzdGVyLU9MRSIpOworICAgIHByaW50ZigiICAgIFJlZ2lzdGVyIGd2aW0gZm9yIE9MRVxuIik7CisjZW5kaWYKKyAgICBwcmludGYoIlxuIik7Cit9CisKKy8qCisgKiBTZXR1cCBpbnN0YWxsYXRpb24gY2hvaWNlcyBiYXNlZCBvbiBjb21tYW5kIGxpbmUgc3dpdGNoZXMKKyAqLworICAgIHN0YXRpYyB2b2lkCitjb21tYW5kX2xpbmVfc2V0dXBfY2hvaWNlcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IGksIGo7CisKKyAgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKwlpZiAoc3RyY21wKGFyZ3ZbaV0sICItY3JlYXRlLWJhdGZpbGVzIikgPT0gMCkKKwl7CisJICAgIGlmIChpICsgMSA9PSBhcmdjKQorCQljb250aW51ZTsKKwkgICAgd2hpbGUgKGFyZ3ZbaSArIDFdWzBdICE9ICctJyAmJiBpIDwgYXJnYykKKwkgICAgeworCQlpKys7CisJCWZvciAoaiA9IDE7IGogPCBUQVJHRVRfQ09VTlQ7ICsraikKKwkJICAgIGlmICgodGFyZ2V0c1tqXS5leGVuYW1lYXJnWzBdID09ICdnJyA/IGhhc19ndmltIDogaGFzX3ZpbSkKKwkJCSAgICAmJiBzdHJjbXAoYXJndltpXSwgdGFyZ2V0c1tqXS5uYW1lKSA9PSAwKQorCQkgICAgeworCQkJaW5pdF9iYXRfY2hvaWNlKGopOworCQkJYnJlYWs7CisJCSAgICB9CisJCWlmIChqID09IFRBUkdFVF9DT1VOVCkKKwkJICAgIHByaW50ZigiJXMgaXMgbm90IGEgdmFsaWQgY2hvaWNlIGZvciAtY3JlYXRlLWJhdGZpbGVzXG4iLAorCQkJCQkJCQkgICAgIGFyZ3ZbaV0pOworCisJCWlmIChpICsgMSA9PSBhcmdjKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwl9CisJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItY3JlYXRlLXZpbXJjIikgPT0gMCkKKwl7CisJICAgIC8qIFNldHVwIGRlZmF1bHQgdmltcmMgY2hvaWNlcy4gIElmIHRoZXJlIGlzIGFscmVhZHkgYSBfdmltcmMgZmlsZSwKKwkgICAgICogaXQgd2lsbCBOT1QgYmUgb3ZlcndyaXR0ZW4uCisJICAgICAqLworCSAgICBpbml0X3ZpbXJjX2Nob2ljZXMoKTsKKwl9CisJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItaW5zdGFsbC1wb3B1cCIpID09IDApCisJeworCSAgICBpbml0X3BvcHVwX2Nob2ljZSgpOworCX0KKwllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1pbnN0YWxsLW9wZW53aXRoIikgPT0gMCkKKwl7CisJICAgIGluaXRfb3BlbndpdGhfY2hvaWNlKCk7CisJfQorCWVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLWFkZC1zdGFydC1tZW51IikgPT0gMCkKKwl7CisJICAgIGluaXRfc3RhcnRtZW51X2Nob2ljZSgpOworCX0KKwllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1pbnN0YWxsLWljb25zIikgPT0gMCkKKwl7CisJICAgIGluaXRfc2hvcnRjdXRfY2hvaWNlcygpOworCX0KKwllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1jcmVhdGUtZGlyZWN0b3JpZXMiKSA9PSAwKQorCXsKKwkgICAgaW5pdF9kaXJlY3Rvcmllc19jaG9pY2UoKTsKKwkgICAgaWYgKGFyZ3ZbaSArIDFdWzBdICE9ICctJykKKwkgICAgeworCQlpKys7CisJCWlmIChzdHJjbXAoYXJndltpXSwgInZpbSIpID09IDApCisJCSAgICB2aW1maWxlc19kaXJfY2hvaWNlID0gKGludCl2aW1maWxlc19kaXJfdmltOworCQllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgImhvbWUiKSA9PSAwKQorCQl7CisJCSAgICBpZiAoZ2V0ZW52KCJIT01FIikgPT0gTlVMTCkgLyogTm8gJEhPTUUgaW4gZW52aXJvbm1lbnQgKi8KKwkJCXZpbWZpbGVzX2Rpcl9jaG9pY2UgPSAoaW50KXZpbWZpbGVzX2Rpcl92aW07CisJCSAgICBlbHNlCisJCQl2aW1maWxlc19kaXJfY2hvaWNlID0gKGludCl2aW1maWxlc19kaXJfaG9tZTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIHByaW50ZigiVW5rbm93biBhcmd1bWVudCBmb3IgLWNyZWF0ZS1kaXJlY3RvcmllczogJXNcbiIsCisJCQkJCQkJCSAgICAgYXJndltpXSk7CisJCSAgICBwcmludF9jbWRfbGluZV9oZWxwKCk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIC8qIE5vIGNob2ljZSBzcGVjaWZpZWQsIGRlZmF1bHQgdG8gdmltIGRpcmVjdG9yeSAqLworCQl2aW1maWxlc19kaXJfY2hvaWNlID0gKGludCl2aW1maWxlc19kaXJfdmltOworCX0KKyNpZmRlZiBXSU4zMjY0CisJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItcmVnaXN0ZXItT0xFIikgPT0gMCkKKwl7CisJICAgIC8qIFRoaXMgaXMgYWx3YXlzIGRvbmUgd2hlbiBndmltIGlzIGZvdW5kICovCisJfQorI2VuZGlmCisJZWxzZSAvKiBVbmtub3duIHN3aXRjaCAqLworCXsKKwkgICAgcHJpbnRmKCJHb3QgdW5rbm93biBhcmd1bWVudCBhcmd2WyVkXSA9ICVzXG4iLCBpLCBhcmd2W2ldKTsKKwkgICAgcHJpbnRfY21kX2xpbmVfaGVscCgpOworCX0KKyAgICB9Cit9CisKKworLyoKKyAqIFNob3cgYSBmZXcgc2NyZWVucyBmdWxsIG9mIGhlbHBmdWwgaW5mb3JtYXRpb24uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc2hvd19oZWxwKHZvaWQpCit7CisgICAgc3RhdGljIGNoYXIgKihpdGVtc1tdKSA9CisgICAgeworIkluc3RhbGxpbmcgLmJhdCBmaWxlc1xuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIlRoZSB2aW0uYmF0IGZpbGUgaXMgd3JpdHRlbiBpbiBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGluICRQQVRILlxuIgorIlRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gc3RhcnQgVmltIGZyb20gdGhlIGNvbW1hbmQgbGluZS5cbiIKKyJJZiB2aW0uZXhlIGNhbiBiZSBmb3VuZCBpbiAkUEFUSCwgdGhlIGNob2ljZSBmb3IgdmltLmJhdCB3aWxsIG5vdCBiZVxuIgorInByZXNlbnQuICBJdCBpcyBhc3N1bWVkIHlvdSB3aWxsIHVzZSB0aGUgZXhpc3RpbmcgdmltLmV4ZS5cbiIKKyJJZiB2aW0uYmF0IGNhbiBhbHJlYWR5IGJlIGZvdW5kIGluICRQQVRIIHRoaXMgaXMgcHJvYmFibHkgZm9yIGFuIG9sZFxuIgorInZlcnNpb24gb2YgVmltIChidXQgdGhpcyBpcyBub3QgY2hlY2tlZCEpLiAgWW91IGNhbiBvdmVyd3JpdGUgaXQuXG4iCisiSWYgbm8gdmltLmJhdCBhbHJlYWR5IGV4aXN0cywgeW91IGNhbiBzZWxlY3Qgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBpblxuIgorIiRQQVRIIGZvciBjcmVhdGluZyB0aGUgYmF0Y2ggZmlsZSwgb3IgZGlzYWJsZSBjcmVhdGluZyBhIHZpbS5iYXQgZmlsZS5cbiIKKyJcbiIKKyJJZiB5b3UgY2hvb3NlIG5vdCB0byBjcmVhdGUgdGhlIHZpbS5iYXQgZmlsZSwgVmltIGNhbiBzdGlsbCBiZSBleGVjdXRlZFxuIgorImluIG90aGVyIHdheXMsIGJ1dCBub3QgZnJvbSB0aGUgY29tbWFuZCBsaW5lLlxuIgorIlxuIgorIlRoZSBzYW1lIGFwcGxpZXMgdG8gY2hvaWNlcyBmb3IgZ3ZpbSwgZXZpbSwgKGcpdmlldywgYW5kIChnKXZpbWRpZmYuXG4iCisiVGhlIGZpcnN0IGl0ZW0gY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBwYXRoIGZvciBhbGwgb2YgdGhlbS5cbiIKKywKKyJDcmVhdGluZyBhIF92aW1yYyBmaWxlXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIlRoZSBfdmltcmMgZmlsZSBpcyB1c2VkIHRvIHNldCBvcHRpb25zIGZvciBob3cgVmltIGJlaGF2ZXMuXG4iCisiVGhlIGluc3RhbGwgcHJvZ3JhbSBjYW4gY3JlYXRlIGEgX3ZpbXJjIGZpbGUgd2l0aCBhIGZldyBiYXNpYyBjaG9pY2VzLlxuIgorIllvdSBjYW4gZWRpdCB0aGlzIGZpbGUgbGF0ZXIgdG8gdHVuZSB5b3VyIHByZWZlcmVuY2VzLlxuIgorIklmIHlvdSBhbHJlYWR5IGhhdmUgYSBfdmltcmMgb3IgLnZpbXJjIGZpbGUgaXQgY2FuIGJlIG92ZXJ3cml0dGVuLlxuIgorIkRvbid0IGRvIHRoYXQgaWYgeW91IGhhdmUgbWFkZSBjaGFuZ2VzIHRvIGl0LlxuIgorLAorIlZpbSBmZWF0dXJlc1xuIgorIi0tLS0tLS0tLS0tLVxuIgorIih0aGlzIGNob2ljZSBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIGNyZWF0aW5nIGEgX3ZpbXJjIGZpbGUpXG4iCisiMS4gVmltIGNhbiBydW4gaW4gVmktY29tcGF0aWJsZSBtb2RlLiAgTWFueSBuaWNlIFZpbSBmZWF0dXJlcyBhcmUgdGhlblxuIgorIiAgIGRpc2FibGVkLiAgSW4gdGhlIG5vdC1WaS1jb21wYXRpYmxlIG1vZGUgVmltIGlzIHN0aWxsIG1vc3RseSBWaVxuIgorIiAgIGNvbXBhdGlibGUsIGJ1dCBhZGRzIG5pY2UgZmVhdHVyZXMgbGlrZSBtdWx0aS1sZXZlbCB1bmRvLiAgT25seVxuIgorIiAgIGNob29zZSBWaS1jb21wYXRpYmxlIGlmIHlvdSByZWFsbHkgbmVlZCBmdWxsIFZpIGNvbXBhdGliaWxpdHkuXG4iCisiMi4gUnVubmluZyBWaW0gd2l0aCBzb21lIGVuaGFuY2VtZW50cyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCBzb21lIG9mXG4iCisiICAgdGhlIG5pY2UgVmltIGZlYXR1cmVzLCBidXQgaGF2ZSBhIHNsb3cgY29tcHV0ZXIgYW5kIHdhbnQgdG8ga2VlcCBpdFxuIgorIiAgIHJlYWxseSBmYXN0LlxuIgorIjMuIFN5bnRheCBoaWdobGlnaHRpbmcgc2hvd3MgbWFueSBmaWxlcyBpbiBjb2xvci4gIE5vdCBvbmx5IGRvZXMgdGhpcyBsb29rXG4iCisiICAgbmljZSwgaXQgYWxzbyBtYWtlcyBpdCBlYXNpZXIgdG8gc3BvdCBlcnJvcnMgYW5kIHlvdSBjYW4gd29yayBmYXN0ZXIuXG4iCisiICAgVGhlIG90aGVyIGZlYXR1cmVzIGluY2x1ZGUgZWRpdGluZyBjb21wcmVzc2VkIGZpbGVzLlxuIgorLAorIldpbmRvd3Mga2V5IG1hcHBpbmdcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisiKHRoaXMgY2hvaWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gY3JlYXRpbmcgYSBfdmltcmMgZmlsZSlcbiIKKyJVbmRlciBNUy1XaW5kb3dzIHRoZSBDVFJMLUMga2V5IGNvcGllcyB0ZXh0IHRvIHRoZSBjbGlwYm9hcmQgYW5kIENUUkwtVlxuIgorInBhc3RlcyB0ZXh0IGZyb20gdGhlIGNsaXBib2FyZC4gIFRoZXJlIGFyZSBhIGZldyBtb3JlIGtleXMgbGlrZSB0aGVzZS5cbiIKKyJVbmZvcnR1bmF0ZWx5LCBpbiBWaW0gdGhlc2Uga2V5cyBub3JtYWxseSBoYXZlIGFub3RoZXIgbWVhbmluZy5cbiIKKyIxLiBDaG9vc2UgdG8gaGF2ZSB0aGUga2V5cyBsaWtlIHRoZXkgbm9ybWFsbHkgYXJlIGluIFZpbSAodXNlZnVsIGlmIHlvdVxuIgorIiAgIGFsc28gdXNlIFZpbSBvbiBvdGhlciBzeXN0ZW1zKS5cbiIKKyIyLiBDaG9vc2UgdG8gaGF2ZSB0aGUga2V5cyB3b3JrIGxpa2UgdGhleSBhcmUgdXNlZCBvbiBNUy1XaW5kb3dzICh1c2VmdWxcbiIKKyIgICBpZiB5b3UgbW9zdGx5IHdvcmsgb24gTVMtV2luZG93cykuXG4iCissCisiTW91c2UgdXNlXG4iCisiLS0tLS0tLS0tXG4iCisiKHRoaXMgY2hvaWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gY3JlYXRpbmcgYSBfdmltcmMgZmlsZSlcbiIKKyJUaGUgcmlnaHQgbW91c2UgYnV0dG9uIGNhbiBiZSB1c2VkIGluIHR3byB3YXlzOlxuIgorIjEuIFRoZSBVbml4IHdheSBpcyB0byBleHRlbmQgYW4gZXhpc3Rpbmcgc2VsZWN0aW9uLiAgVGhlIHBvcHVwIG1lbnUgaXNcbiIKKyIgICBub3QgYXZhaWxhYmxlLlxuIgorIjIuIFRoZSBNUy1XaW5kb3dzIHdheSBpcyB0byBzaG93IGEgcG9wdXAgbWVudSwgd2hpY2ggYWxsb3dzIHlvdSB0b1xuIgorIiAgIGNvcHkvcGFzdGUgdGV4dCwgdW5kby9yZWRvLCBldGMuICBFeHRlbmRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gc3RpbGwgYmVcbiIKKyIgICBkb25lIGJ5IGtlZXBpbmcgU0hJRlQgcHJlc3NlZCB3aGlsZSB1c2luZyB0aGUgbGVmdCBtb3VzZSBidXR0b25cbiIKKywKKyJFZGl0LXdpdGgtVmltIGNvbnRleHQgbWVudSBlbnRyeVxuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisiKHRoaXMgY2hvaWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gZ3ZpbS5leGUgYW5kIGd2aW1leHQuZGxsIGFyZSBwcmVzZW50KVxuIgorIllvdSBjYW4gYXNzb2NpYXRlIGRpZmZlcmVudCBmaWxlIHR5cGVzIHdpdGggVmltLCBzbyB0aGF0IHlvdSBjYW4gKGRvdWJsZSlcbiIKKyJjbGljayBvbiBhIGZpbGUgdG8gZWRpdCBpdCB3aXRoIFZpbS4gIFRoaXMgbWVhbnMgeW91IGhhdmUgdG8gaW5kaXZpZHVhbGx5XG4iCisic2VsZWN0IGVhY2ggZmlsZSB0eXBlLlxuIgorIkFuIGFsdGVybmF0aXZlIGlzIHRoZSBvcHRpb24gb2ZmZXJlZCBoZXJlOiBJbnN0YWxsIGFuIFwiRWRpdCB3aXRoIFZpbVwiXG4iCisiZW50cnkgaW4gdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSByaWdodCBtb3VzZSBidXR0b24uICBUaGlzIG1lYW5zIHlvdSBjYW5cbiIKKyJlZGl0IGFueSBmaWxlIHdpdGggVmltLlxuIgorLAorIlwiT3BlbiBXaXRoLi4uXCIgY29udGV4dCBtZW51IGVudHJ5XG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyIodGhpcyBjaG9pY2UgaXMgb25seSBhdmFpbGFibGUgd2hlbiBndmltLmV4ZSBpcyBwcmVzZW50KVxuIgorIlRoaXMgb3B0aW9uIGFkZHMgVmltIHRvIHRoZSBcIk9wZW4gV2l0aC4uLlwiIGVudHJ5IGluIHRoZSBwb3B1cCBtZW51IGZvclxuIgorInRoZSByaWdodCBtb3VzZSBidXR0b24uICBUaGlzIGFsc28gbWFrZXMgaXQgcG9zc2libGUgdG8gZWRpdCBIVE1MIGZpbGVzXG4iCisiZGlyZWN0bHkgZnJvbSBJbnRlcm5ldCBFeHBsb3Jlci5cbiIKKywKKyJBZGQgVmltIHRvIHRoZSBTdGFydCBtZW51XG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIkluIFdpbmRvd3MgOTUgYW5kIGxhdGVyLCBWaW0gY2FuIGJlIGFkZGVkIHRvIHRoZSBTdGFydCBtZW51LiAgVGhpcyB3aWxsXG4iCisiY3JlYXRlIGEgc3VibWVudSB3aXRoIGFuIGVudHJ5IGZvciB2aW0sIGd2aW0sIGV2aW0sIHZpbWRpZmYsIGV0Yy4uXG4iCissCisiSWNvbnMgb24gdGhlIGRlc2t0b3BcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIih0aGVzZSBjaG9pY2VzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIGluc3RhbGxpbmcgZ3ZpbSlcbiIKKyJJbiBXaW5kb3dzIDk1IGFuZCBsYXRlciwgc2hvcnRjdXRzIChpY29ucykgY2FuIGJlIGNyZWF0ZWQgb24gdGhlIERlc2t0b3AuXG4iCissCisiQ3JlYXRlIHBsdWdpbiBkaXJlY3Rvcmllc1xuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJQbHVnaW4gZGlyZWN0b3JpZXMgYWxsb3cgZXh0ZW5kaW5nIFZpbSBieSBkcm9wcGluZyBhIGZpbGUgaW50byBhIGRpcmVjdG9yeS5cbiIKKyJUaGlzIGNob2ljZSBhbGxvd3MgY3JlYXRpbmcgdGhlbSBpbiAkSE9NRSAoaWYgeW91IGhhdmUgYSBob21lIGRpcmVjdG9yeSkgb3JcbiIKKyIkVklNICh1c2VkIGZvciBldmVyeWJvZHkgb24gdGhlIHN5c3RlbSkuXG4iCissCitOVUxMCisgICAgfTsKKyAgICBpbnQJCWk7CisgICAgaW50CQljOworCisgICAgcmV3aW5kKHN0ZGluKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgZm9yIChpID0gMDsgaXRlbXNbaV0gIT0gTlVMTDsgKytpKQorICAgIHsKKwlwcmludGYoaXRlbXNbaV0pOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoIkhpdCBFbnRlciB0byBjb250aW51ZSwgYiAoYmFjaykgb3IgcSAocXVpdCBoZWxwKTogIik7CisJYyA9IGdldGNoYXIoKTsKKwlyZXdpbmQoc3RkaW4pOworCWlmIChjID09ICdiJyB8fCBjID09ICdCJykKKwl7CisJICAgIGlmIChpID09IDApCisJCS0taTsKKwkgICAgZWxzZQorCQlpIC09IDI7CisJfQorCWlmIChjID09ICdxJyB8fCBjID09ICdRJykKKwkgICAgYnJlYWs7CisJcHJpbnRmKCJcbiIpOworICAgIH0KK30KKworLyoKKyAqIEluc3RhbGwgdGhlIGNob2ljZXMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5zdGFsbCh2b2lkKQoreworICAgIGludAkJaTsKKworICAgIC8qIEluc3RhbGwgdGhlIHNlbGVjdGVkIGNob2ljZXMuICovCisgICAgZm9yIChpID0gMDsgaSA8IGNob2ljZV9jb3VudDsgKytpKQorCWlmIChjaG9pY2VzW2ldLmluc3RhbGxmdW5jICE9IE5VTEwgJiYgY2hvaWNlc1tpXS5hY3RpdmUpCisJICAgIChjaG9pY2VzW2ldLmluc3RhbGxmdW5jKShpKTsKKworICAgIC8qIEFkZCBzb21lIGVudHJpZXMgdG8gdGhlIHJlZ2lzdHJ5LCBpZiBuZWVkZWQuICovCisgICAgaWYgKGluc3RhbGxfcG9wdXAKKwkgICAgfHwgaW5zdGFsbF9vcGVud2l0aAorCSAgICB8fCAobmVlZF91bmluc3RhbGxfZW50cnkgJiYgaW50ZXJhY3RpdmUpCisJICAgIHx8ICFpbnRlcmFjdGl2ZSkKKwlpbnN0YWxsX3JlZ2lzdHJ5KCk7CisKKyNpZmRlZiBXSU4zMjY0CisgICAgLyogUmVnaXN0ZXIgZ3ZpbSB3aXRoIE9MRS4gKi8KKyAgICBpZiAoaGFzX2d2aW0pCisJaW5zdGFsbF9PTEVfcmVnaXN0ZXIoKTsKKyNlbmRpZgorfQorCisvKgorICogcmVxdWVzdF9jaG9pY2UKKyAqLworICAgIHN0YXRpYyB2b2lkCityZXF1ZXN0X2Nob2ljZSh2b2lkKQoreworICAgIGludAkJICAgICAgaTsKKworICAgIHByaW50ZigiXG5cbkluc3RhbGwgd2lsbCBkbyBmb3IgeW91OlxuIik7CisgICAgZm9yIChpID0gMDsgaSA8IGNob2ljZV9jb3VudDsgKytpKQorICAgICAgaWYgKGNob2ljZXNbaV0uYWN0aXZlKQorCSAgcHJpbnRmKCIlMmQgICVzXG4iLCBpICsgMSwgY2hvaWNlc1tpXS50ZXh0KTsKKyAgICBwcmludGYoIlRvIGNoYW5nZSBhbiBpdGVtLCBlbnRlciBpdHMgbnVtYmVyXG5cbiIpOworICAgIHByaW50ZigiRW50ZXIgaXRlbSBudW1iZXIsIGggKGhlbHApLCBkIChkbyBpdCkgb3IgcSAocXVpdCk6ICIpOworfQorCisgICAgaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcglidWZbQlVGU0laRV07CisKKyAgICAvKgorICAgICAqIFJ1biBpbnRlcmFjdGl2ZWx5IGlmIHRoZXJlIGFyZSBubyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICAqLworICAgIGlmIChhcmdjID4gMSkKKwlpbnRlcmFjdGl2ZSA9IDA7CisgICAgZWxzZQorCWludGVyYWN0aXZlID0gMTsKKworICAgIC8qIEluaXRpYWxpemUgdGhpcyBwcm9ncmFtLiAqLworICAgIGRvX2luaXRzKGFyZ3YpOworCisjaWZkZWYgV0lOMzI2NAorICAgIGlmIChhcmdjID4gMSAmJiBzdHJjbXAoYXJndlsxXSwgIi11bmluc3RhbGwtY2hlY2siKSA9PSAwKQorICAgIHsKKwkvKiBPbmx5IGNoZWNrIGZvciBhbHJlYWR5IGluc3RhbGxlZCBWaW1zLiAgVXNlZCBieSBOU0lTIGluc3RhbGxlci4gKi8KKwlpID0gdW5pbnN0YWxsX2NoZWNrKCk7CisKKwkvKiBGaW5kIHRoZSB2YWx1ZSBvZiAkVklNLCBiZWNhdXNlIE5TSVMgaXNuJ3QgYWJsZSB0byBkbyB0aGlzIGJ5CisJICogaXRzZWxmLiAqLworCWdldF92aW1fZW52KCk7CisKKwkvKiBXaGVuIG5vdGhpbmcgZm91bmQgZXhpdCBxdWlldGx5LiAgSWYgc29tZXRoaW5nIGZvdW5kIHdhaXQgZm9yCisJICogcmV0dXJuIHByZXNzZWQuICovCisJaWYgKGkpCisJICAgIG15ZXhpdCgwKTsKKwlleGl0KDApOworICAgIH0KKyNlbmRpZgorCisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gc2V0cyB1cCB0aGUgaW5zdGFsbGF0aW9uIG9mIFZpbSAiCisJCQkJCQkgICBWSU1fVkVSU0lPTl9NRURJVU0gIlxuXG4iKTsKKworICAgIC8qIENoZWNrIGlmIHRoZSB1c2VyIHVucGFja2VkIHRoZSBhcmNoaXZlcyBwcm9wZXJseS4gKi8KKyAgICBjaGVja191bnBhY2soKTsKKworI2lmZGVmIFdJTjMyNjQKKyAgICAvKiBDaGVjayBmb3IgYWxyZWFkeSBpbnN0YWxsZWQgVmltcy4gKi8KKyAgICBpZiAoaW50ZXJhY3RpdmUpCisJdW5pbnN0YWxsX2NoZWNrKCk7CisjZW5kaWYKKworICAgIC8qIEZpbmQgb3V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeXN0ZW0uICovCisgICAgaW5zcGVjdF9zeXN0ZW0oKTsKKworICAgIGlmIChpbnRlcmFjdGl2ZSkKKyAgICB7CisJLyogU2V0dXAgYWxsIHRoZSBjaG9pY2VzLiAqLworCXNldHVwX2Nob2ljZXMoKTsKKworCS8qIExldCB0aGUgdXNlciBjaGFuZ2UgY2hvaWNlcyBhbmQgZmluYWxseSBpbnN0YWxsIChvciBxdWl0KS4gKi8KKwlmb3IgKDs7KQorCXsKKwkgICAgcmVxdWVzdF9jaG9pY2UoKTsKKwkgICAgcmV3aW5kKHN0ZGluKTsKKwkgICAgaWYgKHNjYW5mKCIlOTlzIiwgYnVmKSA9PSAxKQorCSAgICB7CisJCWlmIChpc2RpZ2l0KGJ1ZlswXSkpCisJCXsKKwkJICAgIC8qIENoYW5nZSBhIGNob2ljZS4gKi8KKwkJICAgIGkgPSBhdG9pKGJ1Zik7CisJCSAgICBpZiAoaSA+IDAgJiYgaSA8PSBjaG9pY2VfY291bnQgJiYgY2hvaWNlc1tpIC0gMV0uYWN0aXZlKQorCQkJKGNob2ljZXNbaSAtIDFdLmNoYW5nZWZ1bmMpKGkgLSAxKTsKKwkJICAgIGVsc2UKKwkJCXByaW50ZigiXG5JbGxlZ2FsIGNob2ljZVxuIik7CisJCX0KKwkJZWxzZSBpZiAoYnVmWzBdID09ICdoJyB8fCBidWZbMF0gPT0gJ0gnKQorCQl7CisJCSAgICAvKiBIZWxwICovCisJCSAgICBzaG93X2hlbHAoKTsKKwkJfQorCQllbHNlIGlmIChidWZbMF0gPT0gJ2QnIHx8IGJ1ZlswXSA9PSAnRCcpCisJCXsKKwkJICAgIC8qIEluc3RhbGwhICovCisJCSAgICBpbnN0YWxsKCk7CisJCSAgICBwcmludGYoIlxuVGhhdCBmaW5pc2hlcyB0aGUgaW5zdGFsbGF0aW9uLiAgSGFwcHkgVmltbWluZyFcbiIpOworCQkgICAgYnJlYWs7CisJCX0KKwkJZWxzZSBpZiAoYnVmWzBdID09ICdxJyB8fCBidWZbMF0gPT0gJ1EnKQorCQl7CisJCSAgICAvKiBRdWl0ICovCisJCSAgICBwcmludGYoIlxuRXhpdGluZyB3aXRob3V0IGFueXRoaW5nIGRvbmVcbiIpOworCQkgICAgYnJlYWs7CisJCX0KKwkJZWxzZQorCQkgICAgcHJpbnRmKCJcbklsbGVnYWwgY2hvaWNlXG4iKTsKKwkgICAgfQorCX0KKwlwcmludGYoIlxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBSdW4gbm9uLWludGVyYWN0aXZlIC0gc2V0dXAgYWNjb3JkaW5nIHRvIHRoZSBjb21tYW5kIGxpbmUgc3dpdGNoZXMKKwkgKi8KKwljb21tYW5kX2xpbmVfc2V0dXBfY2hvaWNlcyhhcmdjLCBhcmd2KTsKKwlpbnN0YWxsKCk7CisgICAgfQorCisgICAgbXlleGl0KDApOworICAgIC8qTk9UUkVBQ0hFRCovCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvZG9zaW5zdC5oIGIvc3JjL2Rvc2luc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmY0ZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Rvc2luc3QuaApAQCAtMCwwICsxLDY0NSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworLyoKKyAqIGRvc2luc3QuaDogQ29tbW9uIGNvZGUgZm9yIGRvc2luc3QuYyBhbmQgdW5pbnN0YWwuYworICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpZm5kZWYgVU5JWF9MSU5UCisjIGluY2x1ZGUgPGlvLmg+CisjIGluY2x1ZGUgPGN0eXBlLmg+CisKKyMgaWZuZGVmIF9fQ1lHV0lOX18KKyMgIGluY2x1ZGUgPGRpcmVjdC5oPgorIyBlbmRpZgorCisjIGlmIGRlZmluZWQoX1dJTjY0KSB8fCBkZWZpbmVkKFdJTjMyKQorIyAgZGVmaW5lIFdJTjMyNjQKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGluY2x1ZGUgPHNobG9iai5oPgorIyBlbHNlCisjICBpbmNsdWRlIDxkaXIuaD4KKyMgIGluY2x1ZGUgPGJpb3MuaD4KKyMgIGluY2x1ZGUgPGRvcy5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBVTklYX0xJTlQKKy8qIFJ1bm5pbmcgbGludCBvbiBVbml4OiBTb21lIHRoaW5ncyBhcmUgbWlzc2luZy4gKi8KK2NoYXIgKnNlYXJjaHBhdGgoY2hhciAqbmFtZSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoREpHUFApIHx8IGRlZmluZWQoVU5JWF9MSU5UKQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidmVyc2lvbi5oIgorCisjaWYgZGVmaW5lZChESkdQUCkgfHwgZGVmaW5lZChVTklYX0xJTlQpCisjIGRlZmluZSB2aW1fbWtkaXIoeCwgeSkgbWtkaXIoKGNoYXIgKikoeCksIHkpCisjZWxzZQorIyBpZiBkZWZpbmVkKFdJTjMyNjQpICYmICFkZWZpbmVkKF9fQk9STEFORENfXykKKyMgIGRlZmluZSB2aW1fbWtkaXIoeCwgeSkgX21rZGlyKChjaGFyICopKHgpKQorIyBlbHNlCisjICBkZWZpbmUgdmltX21rZGlyKHgsIHkpIG1rZGlyKChjaGFyICopKHgpKQorIyBlbmRpZgorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworI2RlZmluZSBCVUZTSVpFIDUxMgkJLyogbG9uZyBlbm91Z2ggdG8gaG9sZCBhIGZpbGUgbmFtZSBwYXRoICovCisjZGVmaW5lIE5VTCAwCisKKyNkZWZpbmUgRkFJTCAwCisjZGVmaW5lIE9LIDEKKworI2lmbmRlZiBGQUxTRQorIyBkZWZpbmUgRkFMU0UgMAorI2VuZGlmCisjaWZuZGVmIFRSVUUKKyMgZGVmaW5lIFRSVUUgMQorI2VuZGlmCisKKyNkZWZpbmUgVklNX1NUQVJUTUVOVSAiUHJvZ3JhbXNcXFZpbSAiIFZJTV9WRVJTSU9OX1NIT1JUCisKK2ludAlpbnRlcmFjdGl2ZTsJCS8qIG5vbi16ZXJvIHdoZW4gcnVubmluZyBpbnRlcmFjdGl2ZWx5ICovCisKKy8qCisgKiBDYWxsIG1hbGxvYygpIGFuZCBleGl0IHdoZW4gb3V0IG9mIG1lbW9yeS4KKyAqLworICAgIHN0YXRpYyB2b2lkICoKK2FsbG9jKGludCBsZW4pCit7CisgICAgY2hhciAqczsKKworICAgIHMgPSBtYWxsb2MobGVuKTsKKyAgICBpZiAocyA9PSBOVUxMKQorICAgIHsKKwlwcmludGYoIkVSUk9SOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwlleGl0KDEpOworICAgIH0KKyAgICByZXR1cm4gKHZvaWQgKilzOworfQorCisvKgorICogVGhlIHRvdXBwZXIoKSBpbiBCY2MgNS41IGRvZXNuJ3Qgd29yaywgdXNlIG91ciBvd24gaW1wbGVtZW50YXRpb24uCisgKi8KKyAgICBzdGF0aWMgaW50CitteXRvdXBwZXIoaW50IGMpCit7CisgICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKQorCXJldHVybiBjIC0gJ2EnICsgJ0EnOworICAgIHJldHVybiBjOworfQorCisgICAgc3RhdGljIHZvaWQKK215ZXhpdChpbnQgbikKK3sKKyAgICBpZiAoIWludGVyYWN0aXZlKQorICAgIHsKKwkvKiBQcmVzZW50IGEgcHJvbXB0LCBvdGhlcndpc2UgZXJyb3IgbWVzc2FnZXMgY2FuJ3QgYmUgcmVhZC4gKi8KKwlwcmludGYoIlByZXNzIEVudGVyIHRvIGNvbnRpbnVlXG4iKTsKKwlyZXdpbmQoc3RkaW4pOworCSh2b2lkKWdldGNoYXIoKTsKKyAgICB9CisgICAgZXhpdChuKTsKK30KKworI2lmZGVmIFdJTjMyNjQKKy8qIFRoaXMgc3ltYm9sIGlzIG5vdCBkZWZpbmVkIGluIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBTREsgb3IgVmlzdWFsIEMrKyAqLworCisjaWZuZGVmIFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTCisjIGRlZmluZSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUyAxCisjZW5kaWYKKworc3RhdGljIERXT1JEIGdfUGxhdGZvcm1JZDsKKworLyoKKyAqIFNldCBnX1BsYXRmb3JtSWQgdG8gVkVSX1BMQVRGT1JNX1dJTjMyX05UIChOVCkgb3IKKyAqIFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTIChXaW45NSkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorUGxhdGZvcm1JZCh2b2lkKQoreworICAgIHN0YXRpYyBpbnQgZG9uZSA9IEZBTFNFOworCisgICAgaWYgKCFkb25lKQorICAgIHsKKwlPU1ZFUlNJT05JTkZPIG92aTsKKworCW92aS5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKG92aSk7CisJR2V0VmVyc2lvbkV4KCZvdmkpOworCisJZ19QbGF0Zm9ybUlkID0gb3ZpLmR3UGxhdGZvcm1JZDsKKwlkb25lID0gVFJVRTsKKyAgICB9Cit9CisKKyMgaWZkZWYgX19CT1JMQU5EQ19fCisvKiBCb3JsYW5kIGRlZmluZXMgaXRzIG93biBzZWFyY2hwYXRoKCkgaW4gZGlyLmggKi8KKyMgIGluY2x1ZGUgPGRpci5oPgorIyBlbHNlCisgICAgc3RhdGljIGNoYXIgKgorc2VhcmNocGF0aChjaGFyICpuYW1lKQoreworICAgIHN0YXRpYyBjaGFyIHdpZGVuYW1lWzIgKiBCVUZTSVpFXTsKKyAgICBzdGF0aWMgY2hhciBsb2NhdGlvblsyICogQlVGU0laRSArIDJdOworCisgICAgLyogVGhlcmUgYXBwZWFycyB0byBiZSBhIGJ1ZyBpbiBGaW5kRXhlY3V0YWJsZUEoKSBvbiBXaW5kb3dzIE5ULgorICAgICAqIFVzZSBGaW5kRXhlY3V0YWJsZVcoKSBpbnN0ZWFkLi4uICovCisgICAgUGxhdGZvcm1JZCgpOworICAgIGlmIChnX1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UKQorICAgIHsKKwlNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX0FDUCwgMCwgKExQQ1RTVFIpbmFtZSwgLTEsCisJCShMUFdTVFIpd2lkZW5hbWUsIEJVRlNJWkUpOworCWlmIChGaW5kRXhlY3V0YWJsZVcoKExQQ1dTVFIpd2lkZW5hbWUsIChMUENXU1RSKSIiLAorCQkgICAgKExQV1NUUilsb2NhdGlvbikgPiAoSElOU1RBTkNFKTMyKQorCXsKKwkgICAgV2lkZUNoYXJUb011bHRpQnl0ZShDUF9BQ1AsIDAsIChMUFdTVFIpbG9jYXRpb24sIC0xLAorCQkgICAgKExQU1RSKXdpZGVuYW1lLCAyICogQlVGU0laRSwgTlVMTCwgTlVMTCk7CisJICAgIHJldHVybiB3aWRlbmFtZTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKEZpbmRFeGVjdXRhYmxlQSgoTFBDVFNUUiluYW1lLCAoTFBDVFNUUikiIiwKKwkJICAgIChMUFRTVFIpbG9jYXRpb24pID4gKEhJTlNUQU5DRSkzMikKKwkgICAgcmV0dXJuIGxvY2F0aW9uOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogQ2FsbCBzZWFyY2hwYXRoKCkgYW5kIHNhdmUgdGhlIHJlc3VsdCBpbiBhbGxvY2F0ZWQgbWVtb3J5LCBvciByZXR1cm4gTlVMTC4KKyAqLworICAgIHN0YXRpYyBjaGFyICoKK3NlYXJjaHBhdGhfc2F2ZShjaGFyICpuYW1lKQoreworICAgIGNoYXIJKnA7CisgICAgY2hhcgkqczsKKworICAgIHAgPSBzZWFyY2hwYXRoKG5hbWUpOworICAgIGlmIChwID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisgICAgcyA9IGFsbG9jKHN0cmxlbihwKSArIDEpOworICAgIHN0cmNweShzLCBwKTsKKyAgICByZXR1cm4gczsKK30KKworI2lmZGVmIFdJTjMyNjQKKy8qCisgKiBHZXQgdGhlIHBhdGggdG8gYSByZXF1ZXN0ZWQgV2luZG93cyBzaGVsbCBmb2xkZXIuCisgKgorICogUmV0dXJuIEZBSUwgb24gZXJyb3IsIE9LIG9uIHN1Y2Nlc3MKKyAqLworICAgIGludAorZ2V0X3NoZWxsX2ZvbGRlcl9wYXRoKAorCWNoYXIgKnNoZWxsX2ZvbGRlcl9wYXRoLAorCWNvbnN0IGNoYXIgKnNoZWxsX2ZvbGRlcl9uYW1lKQoreworICAgIC8qCisgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIHdhcyBzdWNjZXNzZnVsbHkgYnVpbHQgd2l0aCBtYWtlX212Yy5tYWsuCisgICAgICogVGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHdvcmtlZCBvbiBXaW5kb3dzIDk1LCBNaWxsZW5uaXVtIEVkaXRpb24sIGFuZAorICAgICAqIDIwMDAgUHJvZmVzc2lvbmFsLiAgQnV0IGl0IHdhcyBjaGFuZ2VkIGFmdGVyIHRlc3RpbmcuLi4KKyAgICAgKi8KKyAgICBMUElURU1JRExJU1QgICAgcGlkbCA9IDA7IC8qIFBvaW50ZXIgdG8gYW4gSXRlbSBJRCBsaXN0IGFsbG9jYXRlZCBiZWxvdyAqLworICAgIExQTUFMTE9DCSAgICBwTWFsbG9jOyAgLyogUG9pbnRlciB0byBhbiBJTWFsbG9jIGludGVyZmFjZSAqLworICAgIGludAkJICAgIGNzaWRsOworICAgIGludAkJICAgIGFsdF9jc2lkbCA9IC0xOworICAgIHN0YXRpYyBpbnQJICAgIGRlc2t0b3BfY3NpZGwgPSAtMTsKKyAgICBzdGF0aWMgaW50CSAgICBwcm9ncmFtc19jc2lkbCA9IC0xOworICAgIGludAkJICAgICpwY3NpZGw7CisgICAgaW50CQkgICAgcjsKKworICAgIGlmIChzdHJjbXAoc2hlbGxfZm9sZGVyX25hbWUsICJkZXNrdG9wIikgPT0gMCkKKyAgICB7CisJcGNzaWRsID0gJmRlc2t0b3BfY3NpZGw7CisjaWZkZWYgQ1NJRExfQ09NTU9OX0RFU0tUT1BESVJFQ1RPUlkKKwljc2lkbCA9IENTSURMX0NPTU1PTl9ERVNLVE9QRElSRUNUT1JZOworCWFsdF9jc2lkbCA9IENTSURMX0RFU0tUT1A7CisjZWxzZQorCWNzaWRsID0gQ1NJRExfREVTS1RPUDsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlIGlmIChzdHJuY21wKHNoZWxsX2ZvbGRlcl9uYW1lLCAiUHJvZ3JhbXMiLCA4KSA9PSAwKQorICAgIHsKKwlwY3NpZGwgPSAmcHJvZ3JhbXNfY3NpZGw7CisjaWZkZWYgQ1NJRExfQ09NTU9OX1BST0dSQU1TCisJY3NpZGwgPSBDU0lETF9DT01NT05fUFJPR1JBTVM7CisJYWx0X2NzaWRsID0gQ1NJRExfUFJPR1JBTVM7CisjZWxzZQorCWNzaWRsID0gQ1NJRExfUFJPR1JBTVM7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlwcmludGYoIlxuRVJST1IgKGludGVybmFsKSB1bnJlY29nbmlzZWQgc2hlbGxfZm9sZGVyX25hbWU6IFwiJXNcIlxuXG4iLAorCQkJCQkJCSAgIHNoZWxsX2ZvbGRlcl9uYW1lKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBEaWQgdGhpcyBzdHVmZiBiZWZvcmUsIHVzZSB0aGUgc2FtZSBJRCBhZ2Fpbi4gKi8KKyAgICBpZiAoKnBjc2lkbCA+PSAwKQorICAgIHsKKwljc2lkbCA9ICpwY3NpZGw7CisJYWx0X2NzaWRsID0gLTE7CisgICAgfQorCityZXRyeToKKyAgICAvKiBJbml0aWFsaXplIHBvaW50ZXIgdG8gSU1hbGxvYyBpbnRlcmZhY2UgKi8KKyAgICBpZiAoTk9FUlJPUiAhPSBTSEdldE1hbGxvYygmcE1hbGxvYykpCisgICAgeworCXByaW50ZigiXG5FUlJPUiBnZXR0aW5nIGludGVyZmFjZSBmb3Igc2hlbGxfZm9sZGVyX25hbWU6IFwiJXNcIlxuXG4iLAorCQkJCQkJCSAgIHNoZWxsX2ZvbGRlcl9uYW1lKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBHZXQgYW4gSVRFTUlETElTVCBjb3JyZXNwb25kaW5nIHRvIHRoZSBmb2xkZXIgY29kZSAqLworICAgIGlmIChOT0VSUk9SICE9IFNIR2V0U3BlY2lhbEZvbGRlckxvY2F0aW9uKDAsIGNzaWRsLCAmcGlkbCkpCisgICAgeworCWlmIChhbHRfY3NpZGwgPCAwIHx8IE5PRVJST1IgIT0gU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24oMCwKKwkJCQkJCQkgICAgYWx0X2NzaWRsLCAmcGlkbCkpCisJeworCSAgICBwcmludGYoIlxuRVJST1IgZ2V0dGluZyBJVEVNSURMSVNUIGZvciBzaGVsbF9mb2xkZXJfbmFtZTogXCIlc1wiXG5cbiIsCisJCQkJCQkJICAgc2hlbGxfZm9sZGVyX25hbWUpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisJY3NpZGwgPSBhbHRfY3NpZGw7CisJYWx0X2NzaWRsID0gLTE7CisgICAgfQorCisgICAgLyogVHJhbnNsYXRlIHRoYXQgSVRFTUlETElTVCB0byBhIHN0cmluZyAqLworICAgIHIgPSBTSEdldFBhdGhGcm9tSURMaXN0KHBpZGwsIHNoZWxsX2ZvbGRlcl9wYXRoKTsKKworICAgIC8qIEZyZWUgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHBpZGwgKi8KKyAgICBwTWFsbG9jLT5scFZ0YmwtPkZyZWUocE1hbGxvYywgcGlkbCk7CisgICAgLyogUmVsZWFzZSB0aGUgSU1hbGxvYyBpbnRlcmZhY2UgKi8KKyAgICBwTWFsbG9jLT5scFZ0YmwtPlJlbGVhc2UocE1hbGxvYyk7CisKKyAgICBpZiAoIXIpCisgICAgeworCWlmIChhbHRfY3NpZGwgPj0gMCkKKwl7CisJICAgIC8qIFdlIHByb2JhYmx5IGdldCBoZXJlIGZvciBXaW5kb3dzIDk1OiB0aGUgImFsbCB1c2VycyIKKwkgICAgICogZGVza3RvcC9zdGFydCBtZW51IGVudHJ5IGRvZXNuJ3QgZXhpc3QuICovCisJICAgIGNzaWRsID0gYWx0X2NzaWRsOworCSAgICBhbHRfY3NpZGwgPSAtMTsKKwkgICAgZ290byByZXRyeTsKKwl9CisJcHJpbnRmKCJcbkVSUk9SIHRyYW5zbGF0aW5nIElURU1JRExJU1QgZm9yIHNoZWxsX2ZvbGRlcl9uYW1lOiBcIiVzXCJcblxuIiwKKwkJCQkJCQkgICBzaGVsbF9mb2xkZXJfbmFtZSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgLyogSWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRpdmU6IHZlcmlmeSB3ZSBjYW4gd3JpdGUgaW4gdGhpcyBkaXJlY3RvcnkuCisgICAgICogVGhpcyBzaG91bGQgY2F1c2UgYSByZXRyeSB3aGVuIHRoZSAiYWxsIHVzZXJzIiBkaXJlY3RvcnkgZXhpc3RzIGJ1dCB3ZQorICAgICAqIGFyZSBhIG5vcm1hbCB1c2VyIGFuZCBjYW4ndCB3cml0ZSB0aGVyZS4gKi8KKyAgICBpZiAoYWx0X2NzaWRsID49IDApCisgICAgeworCWNoYXIgdGJ1ZltCVUZTSVpFXTsKKwlGSUxFICpmZDsKKworCXN0cmNweSh0YnVmLCBzaGVsbF9mb2xkZXJfcGF0aCk7CisJc3RyY2F0KHRidWYsICJcXHZpbSB3cml0ZSB0ZXN0Iik7CisJZmQgPSBmb3Blbih0YnVmLCAidyIpOworCWlmIChmZCA9PSBOVUxMKQorCXsKKwkgICAgY3NpZGwgPSBhbHRfY3NpZGw7CisJICAgIGFsdF9jc2lkbCA9IC0xOworCSAgICBnb3RvIHJldHJ5OworCX0KKwlmY2xvc2UoZmQpOworCXVubGluayh0YnVmKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEtlZXAgdGhlIGZvdW5kIGNzaWRsIGZvciBuZXh0IHRpbWUsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGUKKyAgICAgKiB3cml0ZSB0ZXN0IGV2ZXJ5IHRpbWUuCisgICAgICovCisgICAgaWYgKCpwY3NpZGwgPCAwKQorCSpwY3NpZGwgPSBjc2lkbDsKKworICAgIGlmIChzdHJuY21wKHNoZWxsX2ZvbGRlcl9uYW1lLCAiUHJvZ3JhbXNcXCIsIDkpID09IDApCisJc3RyY2F0KHNoZWxsX2ZvbGRlcl9wYXRoLCBzaGVsbF9mb2xkZXJfbmFtZSArIDgpOworCisgICAgcmV0dXJuIE9LOworfQorI2VuZGlmCisKKy8qCisgKiBMaXN0IG9mIHRhcmdldHMuICBUaGUgZmlyc3Qgb25lIChpbmRleCB6ZXJvKSBpcyB1c2VkIGZvciB0aGUgZGVmYXVsdCBwYXRoCisgKiBmb3IgdGhlIGJhdGNoIGZpbGVzLgorICovCisjZGVmaW5lIFRBUkdFVF9DT1VOVCAgOAorCitzdHJ1Y3QKK3sKKyAgICBjaGFyCSpuYW1lOwkJLyogVmltIGV4ZSBuYW1lICh3aXRob3V0IC5leGUpICovCisgICAgY2hhcgkqYmF0bmFtZTsJLyogYmF0Y2ggZmlsZSBuYW1lICovCisgICAgY2hhcgkqbG5rbmFtZTsJLyogc2hvcnRjdXQgZmlsZSBuYW1lICovCisgICAgY2hhcgkqZXhlbmFtZTsJLyogZXhlIGZpbGUgbmFtZSAqLworICAgIGNoYXIJKmV4ZW5hbWVhcmc7CS8qIGV4ZSBmaWxlIG5hbWUgd2hlbiB1c2luZyBleGVhcmcgKi8KKyAgICBjaGFyCSpleGVhcmc7CS8qIGFyZ3VtZW50IGZvciB2aW0uZXhlIG9yIGd2aW0uZXhlICovCisgICAgY2hhcgkqb2xkYmF0OwkvKiBwYXRoIHRvIGV4aXN0aW5nIHh4eC5iYXQgb3IgTlVMTCAqLworICAgIGNoYXIJKm9sZGV4ZTsJLyogcGF0aCB0byBleGlzdGluZyB4eHguZXhlIG9yIE5VTEwgKi8KKyAgICBjaGFyCWJhdHBhdGhbQlVGU0laRV07ICAvKiBwYXRoIG9mIGJhdGNoIGZpbGUgdG8gY3JlYXRlOyBub3QKKwkJCQkgICAgICBjcmVhdGVkIHdoZW4gaXQncyBlbXB0eSAqLworfSB0YXJnZXRzW1RBUkdFVF9DT1VOVF0gPQoreworICAgIHsiYWxsIiwJImJhdGNoIGZpbGVzIn0sCisgICAgeyJ2aW0iLAkidmltLmJhdCIsCSJWaW0ubG5rIiwKKwkJCQkJInZpbS5leGUiLCAgICAidmltLmV4ZSIsICAiIn0sCisgICAgeyJndmltIiwJImd2aW0uYmF0IiwJImdWaW0ubG5rIiwKKwkJCQkJImd2aW0uZXhlIiwgICAiZ3ZpbS5leGUiLCAiIn0sCisgICAgeyJldmltIiwJImV2aW0uYmF0IiwJImdWaW0gRWFzeS5sbmsiLAorCQkJCQkiZXZpbS5leGUiLCAgICJndmltLmV4ZSIsICIteSJ9LAorICAgIHsidmlldyIsCSJ2aWV3LmJhdCIsCSJWaW0gUmVhZC1vbmx5LmxuayIsCisJCQkJCSJ2aWV3LmV4ZSIsICAgInZpbS5leGUiLCAgIi1SIn0sCisgICAgeyJndmlldyIsCSJndmlldy5iYXQiLAkiZ1ZpbSBSZWFkLW9ubHkubG5rIiwKKwkJCQkJImd2aWV3LmV4ZSIsICAiZ3ZpbS5leGUiLCAiLVIifSwKKyAgICB7InZpbWRpZmYiLCAidmltZGlmZi5iYXQiLAkiVmltIERpZmYubG5rIiwKKwkJCQkJInZpbWRpZmYuZXhlIiwidmltLmV4ZSIsICAiLWQifSwKKyAgICB7Imd2aW1kaWZmIiwiZ3ZpbWRpZmYuYmF0IiwJImdWaW0gRGlmZi5sbmsiLAorCQkJCQkiZ3ZpbWRpZmYuZXhlIiwiZ3ZpbS5leGUiLCAiLWQifSwKK307CisKKyNkZWZpbmUgSUNPTl9DT1VOVCAzCitjaGFyICooaWNvbl9uYW1lc1tJQ09OX0NPVU5UXSkgPQorCXsiZ1ZpbSAiIFZJTV9WRVJTSU9OX1NIT1JULAorCSAiZ1ZpbSBFYXN5ICIgVklNX1ZFUlNJT05fU0hPUlQsCisJICJnVmltIFJlYWQgb25seSAiIFZJTV9WRVJTSU9OX1NIT1JUfTsKK2NoYXIgKihpY29uX2xpbmtfbmFtZXNbSUNPTl9DT1VOVF0pID0KKwl7ImdWaW0gIiBWSU1fVkVSU0lPTl9TSE9SVCAiLmxuayIsCisJICJnVmltIEVhc3kgIiBWSU1fVkVSU0lPTl9TSE9SVCAiLmxuayIsCisJICJnVmltIFJlYWQgb25seSAiIFZJTV9WRVJTSU9OX1NIT1JUICIubG5rIn07CisKKy8qIFRoaXMgaXMgb25seSB1c2VkIGZvciBkb3NpbnN0LmMgYW5kIGZvciB1bmluc3RhbC5jIHdoZW4gbm90IGJlaW5nIGFibGUgdG8KKyAqIGRpcmVjdGx5IGFjY2VzcyByZWdpc3RyeSBlbnRyaWVzLiAqLworI2lmICFkZWZpbmVkKFdJTjMyNjQpIHx8IGRlZmluZWQoRE9TSU5TVCkKKy8qCisgKiBSdW4gYW4gZXh0ZXJuYWwgY29tbWFuZCBhbmQgd2FpdCBmb3IgaXQgdG8gZmluaXNoLgorICovCisgICAgc3RhdGljIHZvaWQKK3J1bl9jb21tYW5kKGNoYXIgKmNtZCkKK3sKKyAgICBjaGFyCSpjbWRfcGF0aDsKKyAgICBjaGFyCWNtZF9idWZbQlVGU0laRV07CisgICAgY2hhcgkqcDsKKworICAgIC8qIE9uIFdpbk5ULCAnc3RhcnQnIGlzIGEgc2hlbGwgYnVpbHQtaW4gZm9yIGNtZC5leGUgcmF0aGVyIHRoYW4gYW4KKyAgICAgKiBleGVjdXRhYmxlIChzdGFydC5leGUpIGxpa2UgaW4gV2luOXguICBESkdQUCwgYmVpbmcgYSBET1MgcHJvZ3JhbSwKKyAgICAgKiBpcyBnaXZlbiB0aGUgQ09NU1BFQyBjb21tYW5kLmNvbSBieSBXaW5OVCwgc28gd2UgaGF2ZSB0byBmaW5kCisgICAgICogY21kLmV4ZSBtYW51YWxseSBhbmQgdXNlIGl0LiAqLworICAgIGNtZF9wYXRoID0gc2VhcmNocGF0aF9zYXZlKCJjbWQuZXhlIik7CisgICAgaWYgKGNtZF9wYXRoICE9IE5VTEwpCisgICAgeworCS8qIFRoZXJlIGlzIGEgY21kLmV4ZSwgc28gdGhpcyBtaWdodCBiZSBXaW5kb3dzIE5ULiAgSWYgaXQgaXMsCisJICogd2UgbmVlZCB0byBjYWxsIGNtZC5leGUgZXhwbGljaXRseS4gIElmIGl0IGlzIGEgbGF0ZXIgT1MsCisJICogY2FsbGluZyBjbWQuZXhlIHdvbid0IGh1cnQgaWYgaXQgaXMgcHJlc2VudC4KKwkgKiBBbHNvLCAid2FpdCIgb24gTlQgZXhwZWN0cyBhIHdpbmRvdyB0aXRsZSBhcmd1bWVudC4KKwkgKi8KKwkvKiBSZXBsYWNlIHRoZSBzbGFzaGVzIHdpdGggYmFja3NsYXNoZXMuICovCisJd2hpbGUgKChwID0gc3RyY2hyKGNtZF9wYXRoLCAnLycpKSAhPSBOVUxMKQorCSAgICAqcCA9ICdcXCc7CisJc3ByaW50ZihjbWRfYnVmLCAiJXMgL2Mgc3RhcnQgXCJ2aW1jbWRcIiAvdyAlcyIsIGNtZF9wYXRoLCBjbWQpOworCWZyZWUoY21kX3BhdGgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIE5vIGNtZC5leGUsIGp1c3QgbWFrZSB0aGUgY2FsbCBhbmQgbGV0IHRoZSBzeXN0ZW0gaGFuZGxlIGl0LiAqLworCXNwcmludGYoY21kX2J1ZiwgInN0YXJ0IC93ICVzIiwgY21kKTsKKyAgICB9CisgICAgc3lzdGVtKGNtZF9idWYpOworfQorI2VuZGlmCisKKy8qCisgKiBBcHBlbmQgYSBiYWNrc2xhc2ggdG8gIm5hbWUiIGlmIHRoZXJlIGlzbid0IG9uZSB5ZXQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYWRkX3BhdGhzZXAoY2hhciAqbmFtZSkKK3sKKyAgICBpbnQJCWxlbiA9IHN0cmxlbihuYW1lKTsKKworICAgIGlmIChsZW4gPiAwICYmIG5hbWVbbGVuIC0gMV0gIT0gJ1xcJyAmJiBuYW1lW2xlbiAtIDFdICE9ICcvJykKKwlzdHJjYXQobmFtZSwgIlxcIik7Cit9CisKKy8qCisgKiBUaGUgbm9ybWFsIGNoZGlyKCkgZG9lcyBub3QgY2hhbmdlIHRoZSBkZWZhdWx0IGRyaXZlLiAgVGhpcyBvbmUgZG9lcy4KKyAqLworLypBUkdTVVNFRCovCisgICAgaW50CitjaGFuZ2VfZHJpdmUoaW50IGRyaXZlKQoreworI2lmZGVmIFdJTjMyNjQKKyAgICBjaGFyIHRlbXBbM10gPSAiLToiOworICAgIHRlbXBbMF0gPSAoY2hhcikoZHJpdmUgKyAnQScgLSAxKTsKKyAgICByZXR1cm4gIVNldEN1cnJlbnREaXJlY3RvcnkodGVtcCk7CisjZWxzZQorIyBpZm5kZWYgVU5JWF9MSU5UCisgICAgdW5pb24gUkVHUyByZWdzOworCisgICAgcmVncy5oLmFoID0gMHgwZTsKKyAgICByZWdzLmguZGwgPSBkcml2ZSAtIDE7CisgICAgaW50ZG9zKCZyZWdzLCAmcmVncyk7ICAgLyogc2V0IGRlZmF1bHQgZHJpdmUgKi8KKyAgICByZWdzLmguYWggPSAweDE5OworICAgIGludGRvcygmcmVncywgJnJlZ3MpOyAgIC8qIGdldCBkZWZhdWx0IGRyaXZlICovCisgICAgaWYgKHJlZ3MuaC5hbCA9PSBkcml2ZSAtIDEpCisJcmV0dXJuIDA7CisjIGVuZGlmCisgICAgcmV0dXJuIC0xOworI2VuZGlmCit9CisKKy8qCisgKiBDaGFuZ2UgZGlyZWN0b3J5IHRvICJwYXRoIi4KKyAqIFJldHVybiAwIGZvciBzdWNjZXNzLCAtMSBmb3IgZmFpbHVyZS4KKyAqLworICAgIGludAorbWNoX2NoZGlyKGNoYXIgKnBhdGgpCit7CisgICAgaWYgKHBhdGhbMF0gPT0gTlVMKQkJLyoganVzdCBjaGVja2luZy4uLiAqLworCXJldHVybiAwOworICAgIGlmIChwYXRoWzFdID09ICc6JykJCS8qIGhhcyBhIGRyaXZlIG5hbWUgKi8KKyAgICB7CisJaWYgKGNoYW5nZV9kcml2ZShteXRvdXBwZXIocGF0aFswXSkgLSAnQScgKyAxKSkKKwkgICAgcmV0dXJuIC0xOwkJLyogaW52YWxpZCBkcml2ZSBuYW1lICovCisJcGF0aCArPSAyOworICAgIH0KKyAgICBpZiAoKnBhdGggPT0gTlVMKQkJLyogZHJpdmUgbmFtZSBvbmx5ICovCisJcmV0dXJuIDA7CisgICAgcmV0dXJuIGNoZGlyKHBhdGgpOwkJLyogbGV0IHRoZSBub3JtYWwgY2hkaXIoKSBkbyB0aGUgcmVzdCAqLworfQorCisvKgorICogRXhwYW5kIHRoZSBleGVjdXRhYmxlIG5hbWUgaW50byBhIGZ1bGwgcGF0aCBuYW1lLgorICovCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmICFkZWZpbmVkKFdJTjMyNjQpCisKKy8qIE9ubHkgQm9ybGFuZCBDKysgaGFzIHRoaXMuICovCisjIGRlZmluZSBteV9mdWxscGF0aChiLCBuLCBsKSBfZnVsbHBhdGgoYiwgbiwgbCkKKworI2Vsc2UKKyAgICBzdGF0aWMgY2hhciAqCitteV9mdWxscGF0aChjaGFyICpidWYsIGNoYXIgKmZuYW1lLCBpbnQgbGVuKQoreworIyBpZmRlZiBXSU4zMjY0CisgICAgLyogT25seSBHZXRNb2R1bGVGaWxlTmFtZSgpIHdpbGwgZ2V0IHRoZSBsb25nIGZpbGUgbmFtZSBwYXRoLgorICAgICAqIEdldEZ1bGxQYXRoTmFtZSgpIG1heSBzdGlsbCB1c2UgdGhlIHNob3J0IChGQVQpIG5hbWUuICovCisgICAgRFdPUkQgbGVuX3JlYWQgPSBHZXRNb2R1bGVGaWxlTmFtZShOVUxMLCBidWYsIChzaXplX3QpbGVuKTsKKworICAgIHJldHVybiAobGVuX3JlYWQgPiAwICYmIGxlbl9yZWFkIDwgKERXT1JEKWxlbikgPyBidWYgOiBOVUxMOworIyBlbHNlCisgICAgY2hhcglvbGRkaXJbQlVGU0laRV07CisgICAgY2hhcgkqcCwgKnE7CisgICAgaW50CQljOworICAgIGNoYXIJKnJldHZhbCA9IGJ1ZjsKKworICAgIGlmIChzdHJjaHIoZm5hbWUsICc6JykgIT0gTlVMTCkJLyogYWxscmVhZHkgZXhwYW5kZWQgKi8KKyAgICB7CisJc3RybmNweShidWYsIGZuYW1lLCBsZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworCSpidWYgPSBOVUw7CisJLyoKKwkgKiBjaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSBmb3IgYSBtb21lbnQsCisJICogYW5kIHRoZW4gZG8gdGhlIGdldHdkKCkgKGFuZCBnZXQgYmFjayB0byB3aGVyZSB3ZSB3ZXJlKS4KKwkgKiBUaGlzIHdpbGwgZ2V0IHRoZSBjb3JyZWN0IHBhdGggbmFtZSB3aXRoICIuLi8iIHRoaW5ncy4KKwkgKi8KKwlwID0gc3RycmNocihmbmFtZSwgJy8nKTsKKwlxID0gc3RycmNocihmbmFtZSwgJ1xcJyk7CisJaWYgKHEgIT0gTlVMTCAmJiAocCA9PSBOVUxMIHx8IHEgPiBwKSkKKwkgICAgcCA9IHE7CisJcSA9IHN0cnJjaHIoZm5hbWUsICc6Jyk7CisJaWYgKHEgIT0gTlVMTCAmJiAocCA9PSBOVUxMIHx8IHEgPiBwKSkKKwkgICAgcCA9IHE7CisJaWYgKHAgIT0gTlVMTCkKKwl7CisJICAgIGlmIChnZXRjd2Qob2xkZGlyLCBCVUZTSVpFKSA9PSBOVUxMKQorCSAgICB7CisJCXAgPSBOVUxMOwkJLyogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyOiBkb24ndCBjaGRpciAqLworCQlyZXR2YWwgPSBOVUxMOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAocCA9PSBmbmFtZSkJCS8qIC9mbmFtZQkJKi8KKwkJICAgIHEgPSBwICsgMTsJCS8qIC0+IC8JCQkqLworCQllbHNlIGlmIChxICsgMSA9PSBwKQkvKiAuLi4gYzpcZm9vCQkqLworCQkgICAgcSA9IHAgKyAxOwkJLyogLT4gYzpcCQkqLworCQllbHNlCQkJLyogYnV0IGM6XGZvb1xiYXIJKi8KKwkJICAgIHEgPSBwOwkJLyogLT4gYzpcZm9vCQkqLworCisJCWMgPSAqcTsJCQkvKiB0cnVuY2F0ZSBhdCBzdGFydCBvZiBmbmFtZSAqLworCQkqcSA9IE5VTDsKKwkJaWYgKG1jaF9jaGRpcihmbmFtZSkpCS8qIGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5ICovCisJCSAgICByZXR2YWwgPSBOVUxMOworCQllbHNlCisJCXsKKwkJICAgIGZuYW1lID0gcTsKKwkJICAgIGlmIChjID09ICdcXCcpCS8qIGlmIHdlIGN1dCB0aGUgbmFtZSBhdCBhICovCisJCQlmbmFtZSsrOwkvKiAnXCcsIGRvbid0IGFkZCBpdCBhZ2FpbiAqLworCQl9CisJCSpxID0gYzsKKwkgICAgfQorCX0KKwlpZiAoZ2V0Y3dkKGJ1ZiwgbGVuKSA9PSBOVUxMKQorCXsKKwkgICAgcmV0dmFsID0gTlVMTDsKKwkgICAgKmJ1ZiA9IE5VTDsKKwl9CisJLyoKKwkgKiBDb25jYXRlbmF0ZSB0aGUgZmlsZSBuYW1lIHRvIHRoZSBwYXRoLgorCSAqLworCWlmIChzdHJsZW4oYnVmKSArIHN0cmxlbihmbmFtZSkgPj0gbGVuIC0gMSkKKwl7CisJICAgIHByaW50ZigiRVJST1I6IEZpbGUgbmFtZSB0b28gbG9uZyFcbiIpOworCSAgICBteWV4aXQoMSk7CisJfQorCWFkZF9wYXRoc2VwKGJ1Zik7CisJc3RyY2F0KGJ1ZiwgZm5hbWUpOworCWlmIChwKQorCSAgICBtY2hfY2hkaXIob2xkZGlyKTsKKyAgICB9CisKKyAgICAvKiBSZXBsYWNlIGZvcndhcmQgc2xhc2hlcyB3aXRoIGJhY2tzbGFzaGVzLCByZXF1aXJlZCBmb3IgdGhlIHBhdGggdG8gYQorICAgICAqIGNvbW1hbmQuICovCisgICAgd2hpbGUgKChwID0gc3RyY2hyKGJ1ZiwgJy8nKSkgIT0gTlVMTCkKKwkqcCA9ICdcXCc7CisKKyAgICByZXR1cm4gcmV0dmFsOworIyBlbmRpZgorfQorI2VuZGlmCisKKy8qCisgKiBSZW1vdmUgdGhlIHRhaWwgZnJvbSBhIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUuCisgKiBQdXRzIGEgTlVMIG9uIHRoZSBsYXN0ICcvJyBvciAnXCcuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcmVtb3ZlX3RhaWwoY2hhciAqcGF0aCkKK3sKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGkgPSBzdHJsZW4ocGF0aCkgLSAxOyBpID4gMDsgLS1pKQorCWlmIChwYXRoW2ldID09ICcvJyB8fCBwYXRoW2ldID09ICdcXCcpCisJeworCSAgICBwYXRoW2ldID0gTlVMOworCSAgICBicmVhazsKKwl9Cit9CisKKworY2hhcglpbnN0YWxsZGlyW0JVRlNJWkVdOwkvKiB0b3Agb2YgdGhlIGluc3RhbGxhdGlvbiBkaXIsIHdoZXJlIHRoZQorCQkJCSAgIGluc3RhbGwuZXhlIGlzIGxvY2F0ZWQsIEUuZy46CisJCQkJICAgImM6XHZpbVx2aW02MCIgKi8KK2ludAlydW50aW1laWR4OwkJLyogaW5kZXggaW4gaW5zdGFsbGRpcltdIHdoZXJlICJ2aW02MCIgc3RhcnRzICovCitjaGFyCSpzeXNkcml2ZTsJCS8qIHN5c3RlbSBkcml2ZSBvciAiYzpcIiAqLworCisvKgorICogU2V0dXAgZm9yIHVzaW5nIHRoaXMgcHJvZ3JhbS4KKyAqIFNldHMgImluc3RhbGxkaXJbXSIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZG9faW5pdHMoY2hhciAqKmFyZ3YpCit7CisjaWZkZWYgREpHUFAKKyAgICAvKgorICAgICAqIFVzZSBMb25nIEZpbGUgTmFtZXMgYnkgZGVmYXVsdCwgaWYgJExGTiBub3Qgc2V0LgorICAgICAqLworICAgIGlmIChnZXRlbnYoIkxGTiIpID09IE5VTEwpCisJcHV0ZW52KCJMRk49eSIpOworI2VuZGlmCisKKyAgICAvKiBGaW5kIG91dCB0aGUgZnVsbCBwYXRoIG9mIG91ciBleGVjdXRhYmxlLiAqLworICAgIGlmIChteV9mdWxscGF0aChpbnN0YWxsZGlyLCBhcmd2WzBdLCBCVUZTSVpFKSA9PSBOVUxMKQorICAgIHsKKwlwcmludGYoIkVSUk9SOiBDYW5ub3QgZ2V0IG5hbWUgb2YgZXhlY3V0YWJsZVxuIik7CisJbXlleGl0KDEpOworICAgIH0KKyAgICAvKiByZW1vdmUgdGhlIHRhaWwsIHRoZSBleGVjdXRhYmxlIG5hbWUgImluc3RhbGwuZXhlIiAqLworICAgIHJlbW92ZV90YWlsKGluc3RhbGxkaXIpOworCisgICAgLyogY2hhbmdlIHRvIHRoZSBpbnN0YWxsZGlyICovCisgICAgbWNoX2NoZGlyKGluc3RhbGxkaXIpOworCisgICAgLyogRmluZCB0aGUgc3lzdGVtIGRyaXZlLiAgT25seSB1c2VkIGZvciBzZWFyY2hpbmcgdGhlIFZpbSBleGVjdXRhYmxlLCBub3QKKyAgICAgKiB2ZXJ5IGltcG9ydGFudC4gKi8KKyAgICBzeXNkcml2ZSA9IGdldGVudigiU1lTVEVNRFJJVkUiKTsKKyAgICBpZiAoc3lzZHJpdmUgPT0gTlVMTCB8fCAqc3lzZHJpdmUgPT0gTlVMKQorCXN5c2RyaXZlID0gIkM6XFwiOworfQpkaWZmIC0tZ2l0IGEvc3JjL2VkaXQuYyBiL3NyYy9lZGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0MmY1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9lZGl0LmMKQEAgLTAsMCArMSw3NjE0IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBlZGl0LmM6IGZ1bmN0aW9ucyBmb3IgSW5zZXJ0IG1vZGUKKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKy8qCisgKiBkZWZpbml0aW9ucyB1c2VkIGZvciBDVFJMLVggc3VibW9kZQorICovCisjZGVmaW5lIENUUkxfWF9XQU5UX0lERU5UCTB4MTAwCisKKyNkZWZpbmUgQ1RSTF9YX05PVF9ERUZJTkVEX1lFVAkxCisjZGVmaW5lIENUUkxfWF9TQ1JPTEwJCTIKKyNkZWZpbmUgQ1RSTF9YX1dIT0xFX0xJTkUJMworI2RlZmluZSBDVFJMX1hfRklMRVMJCTQKKyNkZWZpbmUgQ1RSTF9YX1RBR1MJCSg1ICsgQ1RSTF9YX1dBTlRfSURFTlQpCisjZGVmaW5lIENUUkxfWF9QQVRIX1BBVFRFUk5TCSg2ICsgQ1RSTF9YX1dBTlRfSURFTlQpCisjZGVmaW5lIENUUkxfWF9QQVRIX0RFRklORVMJKDcgKyBDVFJMX1hfV0FOVF9JREVOVCkKKyNkZWZpbmUgQ1RSTF9YX0ZJTklTSEVECQk4CisjZGVmaW5lIENUUkxfWF9ESUNUSU9OQVJZCSg5ICsgQ1RSTF9YX1dBTlRfSURFTlQpCisjZGVmaW5lIENUUkxfWF9USEVTQVVSVVMJKDEwICsgQ1RSTF9YX1dBTlRfSURFTlQpCisjZGVmaW5lIENUUkxfWF9DTURMSU5FCQkxMQorCisjZGVmaW5lIENIRUNLX0tFWVNfVElNRQkJMzAKKworI2RlZmluZSBDVFJMX1hfTVNHKGkpIGN0cmxfeF9tc2dzWyhpKSAmIH5DVFJMX1hfV0FOVF9JREVOVF0KKworc3RhdGljIGNoYXIgKmN0cmxfeF9tc2dzW10gPQoreworICAgIE5fKCIgS2V5d29yZCBjb21wbGV0aW9uICheTl5QKSIpLCAvKiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4gKi8KKyAgICBOXygiIF5YIG1vZGUgKF5FXlleTF5dXkZeSV5LXkReVl5OXlApIiksCisgICAgLyogU2Nyb2xsIGhhcyBpdCdzIG93biBtc2dzLCBpbiBpdCdzIHBsYWNlIHRoZXJlIGlzIHRoZSBtc2cgZm9yIGxvY2FsCisgICAgICogY3RybF94X21vZGUgPSAwIChlZyBjb250aW51ZV9zdGF0dXMgJiBDT05UX0xPQ0FMKSAgLS0gQWNldmVkbyAqLworICAgIE5fKCIgS2V5d29yZCBMb2NhbCBjb21wbGV0aW9uICheTl5QKSIpLAorICAgIE5fKCIgV2hvbGUgbGluZSBjb21wbGV0aW9uICheTF5OXlApIiksCisgICAgTl8oIiBGaWxlIG5hbWUgY29tcGxldGlvbiAoXkZeTl5QKSIpLAorICAgIE5fKCIgVGFnIGNvbXBsZXRpb24gKF5dXk5eUCkiKSwKKyAgICBOXygiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTl5QKSIpLAorICAgIE5fKCIgRGVmaW5pdGlvbiBjb21wbGV0aW9uICheRF5OXlApIiksCisgICAgTlVMTCwKKyAgICBOXygiIERpY3Rpb25hcnkgY29tcGxldGlvbiAoXkteTl5QKSIpLAorICAgIE5fKCIgVGhlc2F1cnVzIGNvbXBsZXRpb24gKF5UXk5eUCkiKSwKKyAgICBOXygiIENvbW1hbmQtbGluZSBjb21wbGV0aW9uICheVl5OXlApIikKK307CisKK3N0YXRpYyBjaGFyX3UgZV9oaXRlbmRbXSA9IE5fKCJIaXQgZW5kIG9mIHBhcmFncmFwaCIpOworCisvKgorICogU3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgb25lIG1hdGNoIGZvciBpbnNlcnQgY29tcGxldGlvbi4KKyAqLworc3RydWN0IENvbXBsZXRpb24KK3sKKyAgICBzdHJ1Y3QgQ29tcGxldGlvbgkqbmV4dDsKKyAgICBzdHJ1Y3QgQ29tcGxldGlvbgkqcHJldjsKKyAgICBjaGFyX3UJCSpzdHI7CSAgLyogbWF0Y2hlZCB0ZXh0ICovCisgICAgY2hhcl91CQkqZm5hbWU7CSAgLyogZmlsZSBjb250YWluaW5nIHRoZSBtYXRjaCAqLworICAgIGludAkJCW9yaWdpbmFsOyAvKiBPUklHSU5BTF9URVhULCBDT05UX1NfSVBPUyBvciBGUkVFX0ZOQU1FICovCisgICAgaW50CQkJbnVtYmVyOwkgIC8qIHNlcXVlbmNlIG51bWJlciAqLworfTsKKworLyogdGhlIG9yaWdpbmFsIHRleHQgd2hlbiB0aGUgZXhwYW5zaW9uIGJlZ3VuICovCisjZGVmaW5lIE9SSUdJTkFMX1RFWFQJKDEpCisjZGVmaW5lIEZSRUVfRk5BTUUJKDIpCisKKy8qCisgKiBBbGwgdGhlIGN1cnJlbnQgbWF0Y2hlcyBhcmUgc3RvcmVkIGluIGEgbGlzdC4KKyAqICJmaXJzdF9tYXRjaCIgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgbGlzdC4KKyAqICJjdXJyX21hdGNoIiBwb2ludHMgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbnRyeS4KKyAqICJzaG93bl9tYXRjaCIgaXMgZGlmZmVyZW50IGZyb20gY3Vycl9tYXRjaCBkdXJpbmcgaW5zX2NvbXBsX2dldF9leHAoKS4KKyAqLworc3RhdGljIHN0cnVjdCBDb21wbGV0aW9uICAgICpmaXJzdF9tYXRjaCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IENvbXBsZXRpb24gICAgKmN1cnJfbWF0Y2ggPSBOVUxMOworc3RhdGljIHN0cnVjdCBDb21wbGV0aW9uICAgICpzaG93bl9tYXRjaCA9IE5VTEw7CisKK3N0YXRpYyBpbnQJCSAgICBzdGFydGVkX2NvbXBsZXRpb24gPSBGQUxTRTsKK3N0YXRpYyBpbnQJCSAgICBjb21wbGV0aW9uX21hdGNoZXMgPSAwOworc3RhdGljIGNoYXJfdQkJICAgICpjb21wbGV0ZV9wYXQgPSBOVUxMOworc3RhdGljIGludAkJICAgIGNvbXBsZXRlX2RpcmVjdGlvbiA9IEZPUldBUkQ7CitzdGF0aWMgaW50CQkgICAgc2hvd25fZGlyZWN0aW9uID0gRk9SV0FSRDsKK3N0YXRpYyBpbnQJCSAgICBjb21wbGV0aW9uX3BlbmRpbmcgPSBGQUxTRTsKK3N0YXRpYyBwb3NfVAkJICAgIGluaXRpYWxfcG9zOworc3RhdGljIGNvbG5yX1QJCSAgICBjb21wbGV0ZV9jb2wgPSAwOwkvKiBjb2x1bW4gd2hlcmUgdGhlIHRleHQgc3RhcnRzCisJCQkJCQkgICB0aGF0IGlzIGJlaW5nIGNvbXBsZXRlZCAqLworc3RhdGljIGludAkJICAgIHNhdmVfc207CitzdGF0aWMgY2hhcl91CQkgICAgKm9yaWdpbmFsX3RleHQgPSBOVUxMOyAgLyogdGV4dCBiZWZvcmUgY29tcGxldGlvbiAqLworc3RhdGljIGludAkJICAgIGNvbnRpbnVlX21vZGUgPSAwOworc3RhdGljIGV4cGFuZF9UCQkgICAgY29tcGxldGVfeHA7CisKK3N0YXRpYyBpbnQgIGluc19jb21wbF9hZGQgX19BUkdTKChjaGFyX3UgKnN0ciwgaW50IGxlbiwgY2hhcl91ICosIGludCBkaXIsIGludCByZXVzZSkpOworc3RhdGljIHZvaWQgaW5zX2NvbXBsX2FkZF9tYXRjaGVzIF9fQVJHUygoaW50IG51bV9tYXRjaGVzLCBjaGFyX3UgKiptYXRjaGVzLCBpbnQgZGlyKSk7CitzdGF0aWMgaW50ICBpbnNfY29tcGxfbWFrZV9jeWNsaWMgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBpbnNfY29tcGxfZGljdGlvbmFyaWVzIF9fQVJHUygoY2hhcl91ICpkaWN0LCBjaGFyX3UgKnBhdCwgaW50IGRpciwgaW50IGZsYWdzLCBpbnQgdGhlc2F1cnVzKSk7CitzdGF0aWMgdm9pZCBpbnNfY29tcGxfZnJlZSBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGluc19jb21wbF9jbGVhciBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGluc19jb21wbF9wcmVwIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyBidWZfVCAqaW5zX2NvbXBsX25leHRfYnVmIF9fQVJHUygoYnVmX1QgKmJ1ZiwgaW50IGZsYWcpKTsKK3N0YXRpYyBpbnQgIGluc19jb21wbF9nZXRfZXhwIF9fQVJHUygocG9zX1QgKmluaSwgaW50IGRpcikpOworc3RhdGljIHZvaWQgaW5zX2NvbXBsX2RlbGV0ZSBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGluc19jb21wbF9pbnNlcnQgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50ICBpbnNfY29tcGxfbmV4dCBfX0FSR1MoKGludCBhbGxvd19nZXRfZXhwYW5zaW9uKSk7CitzdGF0aWMgaW50ICBpbnNfY29tcGxldGUgX19BUkdTKChpbnQgYykpOworc3RhdGljIGludCAgcXVvdGVfbWV0YSBfX0FSR1MoKGNoYXJfdSAqZGVzdCwgY2hhcl91ICpzdHIsIGludCBsZW4pKTsKKyNlbmRpZiAvKiBGRUFUX0lOU19FWFBBTkQgKi8KKworI2RlZmluZSBCQUNLU1BBQ0VfQ0hBUgkJICAgIDEKKyNkZWZpbmUgQkFDS1NQQUNFX1dPUkQJCSAgICAyCisjZGVmaW5lIEJBQ0tTUEFDRV9XT1JEX05PVF9TUEFDRSAgICAzCisjZGVmaW5lIEJBQ0tTUEFDRV9MSU5FCQkgICAgNAorCitzdGF0aWMgdm9pZCBpbnNfcmVkcmF3IF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgaW5zX2N0cmxfdiBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIHVuZGlzcGxheV9kb2xsYXIgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBpbnNlcnRfc3BlY2lhbCBfX0FSR1MoKGludCwgaW50LCBpbnQpKTsKK3N0YXRpYyB2b2lkIGNoZWNrX2F1dG9fZm9ybWF0IF9fQVJHUygoaW50KSk7CitzdGF0aWMgdm9pZCByZWRvX2xpdGVyYWwgX19BUkdTKChpbnQgYykpOworc3RhdGljIHZvaWQgc3RhcnRfYXJyb3cgX19BUkdTKChwb3NfVCAqZW5kX2luc2VydF9wb3MpKTsKK3N0YXRpYyB2b2lkIHN0b3BfaW5zZXJ0IF9fQVJHUygocG9zX1QgKmVuZF9pbnNlcnRfcG9zLCBpbnQgZXNjKSk7CitzdGF0aWMgaW50ICBlY2hlY2tfYWJiciBfX0FSR1MoKGludCkpOworc3RhdGljIHZvaWQgcmVwbGFjZV9wdXNoX29mZiBfX0FSR1MoKGludCBjKSk7CitzdGF0aWMgaW50ICByZXBsYWNlX3BvcCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIHJlcGxhY2Vfam9pbiBfX0FSR1MoKGludCBvZmYpKTsKK3N0YXRpYyB2b2lkIHJlcGxhY2VfcG9wX2lucyBfX0FSR1MoKHZvaWQpKTsKKyNpZmRlZiBGRUFUX01CWVRFCitzdGF0aWMgdm9pZCBtYl9yZXBsYWNlX3BvcF9pbnMgX19BUkdTKChpbnQgY2MpKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgcmVwbGFjZV9mbHVzaCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIHJlcGxhY2VfZG9fYnMgX19BUkdTKCh2b2lkKSk7CisjaWZkZWYgRkVBVF9DSU5ERU5UCitzdGF0aWMgaW50IGNpbmRlbnRfb24gX19BUkdTKCh2b2lkKSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIGluc19yZWcgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBpbnNfY3RybF9nIF9fQVJHUygodm9pZCkpOworc3RhdGljIGludCAgaW5zX2VzYyBfX0FSR1MoKGxvbmcgKmNvdW50LCBpbnQgY21kY2hhcikpOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCitzdGF0aWMgdm9pZCBpbnNfY3RybF8gX19BUkdTKCh2b2lkKSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJU1VBTAorc3RhdGljIGludCBpbnNfc3RhcnRfc2VsZWN0IF9fQVJHUygoaW50IGMpKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgaW5zX3NoaWZ0IF9fQVJHUygoaW50IGMsIGludCBsYXN0YykpOworc3RhdGljIHZvaWQgaW5zX2RlbCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQgIGluc19icyBfX0FSR1MoKGludCBjLCBpbnQgbW9kZSwgaW50ICppbnNlcnRlZF9zcGFjZV9wKSk7CisjaWZkZWYgRkVBVF9NT1VTRQorc3RhdGljIHZvaWQgaW5zX21vdXNlIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyB2b2lkIGluc19tb3VzZXNjcm9sbCBfX0FSR1MoKGludCB1cCkpOworI2VuZGlmCitzdGF0aWMgdm9pZCBpbnNfbGVmdCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGluc19ob21lIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyB2b2lkIGluc19lbmQgX19BUkdTKChpbnQgYykpOworc3RhdGljIHZvaWQgaW5zX3NfbGVmdCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGluc19yaWdodCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGluc19zX3JpZ2h0IF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgaW5zX3VwIF9fQVJHUygoaW50IHN0YXJ0Y29sKSk7CitzdGF0aWMgdm9pZCBpbnNfcGFnZXVwIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgaW5zX2Rvd24gX19BUkdTKChpbnQgc3RhcnRjb2wpKTsKK3N0YXRpYyB2b2lkIGluc19wYWdlZG93biBfX0FSR1MoKHZvaWQpKTsKKyNpZmRlZiBGRUFUX0RORAorc3RhdGljIHZvaWQgaW5zX2Ryb3AgX19BUkdTKCh2b2lkKSk7CisjZW5kaWYKK3N0YXRpYyBpbnQgIGluc190YWIgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50ICBpbnNfZW9sIF9fQVJHUygoaW50IGMpKTsKKyNpZmRlZiBGRUFUX0RJR1JBUEhTCitzdGF0aWMgaW50ICBpbnNfZGlncmFwaCBfX0FSR1MoKHZvaWQpKTsKKyNlbmRpZgorc3RhdGljIGludCAgaW5zX2NvcHljaGFyIF9fQVJHUygobGluZW5yX1QgbG51bSkpOworI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKK3N0YXRpYyB2b2lkIGluc190cnlfc2kgX19BUkdTKChpbnQgYykpOworI2VuZGlmCitzdGF0aWMgY29sbnJfVCBnZXRfbm9saXN0X3ZpcnRjb2wgX19BUkdTKCh2b2lkKSk7CisKK3N0YXRpYyBjb2xucl9UCUluc3N0YXJ0X3RleHRsZW47CS8qIGxlbmd0aCBvZiBsaW5lIHdoZW4gaW5zZXJ0IHN0YXJ0ZWQgKi8KK3N0YXRpYyBjb2xucl9UCUluc3N0YXJ0X2JsYW5rX3Zjb2w7CS8qIHZjb2wgZm9yIGZpcnN0IGluc2VydGVkIGJsYW5rICovCisKK3N0YXRpYyBjaGFyX3UJKmxhc3RfaW5zZXJ0ID0gTlVMTDsJLyogdGhlIHRleHQgb2YgdGhlIHByZXZpb3VzIGluc2VydCwKKwkJCQkJICAgS19TUEVDSUFMIGFuZCBDU0kgYXJlIGVzY2FwZWQgKi8KK3N0YXRpYyBpbnQJbGFzdF9pbnNlcnRfc2tpcDsgLyogbnIgb2YgY2hhcnMgaW4gZnJvbnQgb2YgcHJldmlvdXMgaW5zZXJ0ICovCitzdGF0aWMgaW50CW5ld19pbnNlcnRfc2tpcDsgIC8qIG5yIG9mIGNoYXJzIGluIGZyb250IG9mIGN1cnJlbnQgaW5zZXJ0ICovCisKKyNpZmRlZiBGRUFUX0NJTkRFTlQKK3N0YXRpYyBpbnQJY2FuX2NpbmRlbnQ7CQkvKiBtYXkgZG8gY2luZGVudGluZyBvbiB0aGlzIGxpbmUgKi8KKyNlbmRpZgorCitzdGF0aWMgaW50CW9sZF9pbmRlbnQgPSAwOwkJLyogZm9yIF5eRCBjb21tYW5kIGluIGluc2VydCBtb2RlICovCisKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAoraW50CQlyZXZpbnNfb247CQkvKiByZXZlcnNlIGluc2VydCBtb2RlIG9uICovCitpbnQJCXJldmluc19jaGFyczsJCS8qIGhvdyBtdWNoIHRvIHNraXAgYWZ0ZXIgZWRpdCAqLworaW50CQlyZXZpbnNfbGVnYWw7CQkvKiB3YXMgdGhlIGxhc3QgY2hhciAnbGVnYWwnPyAqLworaW50CQlyZXZpbnNfc2NvbDsJCS8qIHN0YXJ0IGNvbHVtbiBvZiByZXZpbnMgc2Vzc2lvbiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpICYmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykKK3N0YXRpYyBzaG9ydAlwcmV2aW91c19zY3JpcHQgPSBzbVJvbWFuOworI2VuZGlmCisKK3N0YXRpYyBpbnQJaW5zX25lZWRfdW5kbzsJCS8qIGNhbGwgdV9zYXZlKCkgYmVmb3JlIGluc2VydGluZyBhCisJCQkJCSAgIGNoYXIuICBTZXQgd2hlbiBlZGl0KCkgaXMgY2FsbGVkLgorCQkJCQkgICBhZnRlciB0aGF0IGFycm93X3VzZWQgaXMgdXNlZC4gKi8KKworc3RhdGljIGludAlkaWRfYWRkX3NwYWNlID0gRkFMU0U7CS8qIGF1dG9fZm9ybWF0KCkgYWRkZWQgYW4gZXh0cmEgc3BhY2UKKwkJCQkJICAgdW5kZXIgdGhlIGN1cnNvciAqLworCisvKgorICogZWRpdCgpOiBTdGFydCBpbnNlcnRpbmcgdGV4dC4KKyAqCisgKiAiY21kY2hhciIgY2FuIGJlOgorICogJ2knCW5vcm1hbCBpbnNlcnQgY29tbWFuZAorICogJ2EnCW5vcm1hbCBhcHBlbmQgY29tbWFuZAorICogJ1InCXJlcGxhY2UgY29tbWFuZAorICogJ3InCSJyPENSPiIgY29tbWFuZDogaW5zZXJ0IG9uZSA8Q1I+LiAgTm90ZTogY291bnQgY2FuIGJlID4gMSwgZm9yIHJlZG8sCisgKglidXQgc3RpbGwgb25seSBvbmUgPENSPiBpcyBpbnNlcnRlZC4gIFRoZSA8RXNjPiBpcyBub3QgdXNlZCBmb3IgcmVkby4KKyAqICdnJwkiZ0kiIGNvbW1hbmQuCisgKiAnVicJImdSIiBjb21tYW5kIGZvciBWaXJ0dWFsIFJlcGxhY2UgbW9kZS4KKyAqICd2JwkiZ3IiIGNvbW1hbmQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgVmlydHVhbCBSZXBsYWNlIG1vZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIHJlY3Vyc2l2ZWx5LiAgRm9yIENUUkwtTyBjb21tYW5kcywgaXQgcmV0dXJucworICogYW5kIGxldHMgdGhlIGNhbGxlciBoYW5kbGUgdGhlIE5vcm1hbC1tb2RlIGNvbW1hbmQuCisgKgorICogUmV0dXJuIFRSVUUgaWYgYSBDVFJMLU8gY29tbWFuZCBjYXVzZWQgdGhlIHJldHVybiAoaW5zZXJ0IG1vZGUgcGVuZGluZykuCisgKi8KKyAgICBpbnQKK2VkaXQoY21kY2hhciwgc3RhcnRsbiwgY291bnQpCisgICAgaW50CQljbWRjaGFyOworICAgIGludAkJc3RhcnRsbjsJLyogaWYgc2V0LCBpbnNlcnQgYXQgc3RhcnQgb2YgbGluZSAqLworICAgIGxvbmcJY291bnQ7Cit7CisgICAgaW50CQljID0gMDsKKyAgICBjaGFyX3UJKnB0cjsKKyAgICBpbnQJCWxhc3RjOworICAgIGNvbG5yX1QJbWluY29sOworICAgIHN0YXRpYyBsaW5lbnJfVCBvX2xudW0gPSAwOworICAgIHN0YXRpYyBpbnQJb19lb2wgPSBGQUxTRTsKKyAgICBpbnQJCWk7CisgICAgaW50CQlkaWRfYmFja3NwYWNlID0gVFJVRTsJICAgIC8qIHByZXZpb3VzIGNoYXIgd2FzIGJhY2tzcGFjZSAqLworI2lmZGVmIEZFQVRfQ0lOREVOVAorICAgIGludAkJbGluZV9pc193aGl0ZSA9IEZBTFNFOwkgICAgLyogbGluZSBpcyBlbXB0eSBiZWZvcmUgaW5zZXJ0ICovCisjZW5kaWYKKyAgICBsaW5lbnJfVAlvbGRfdG9wbGluZSA9IDA7CSAgICAvKiB0b3BsaW5lIGJlZm9yZSBpbnNlcnRpb24gKi8KKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBpbnQJCW9sZF90b3BmaWxsID0gLTE7CisjZW5kaWYKKyAgICBpbnQJCWluc2VydGVkX3NwYWNlID0gRkFMU0U7ICAgICAvKiBqdXN0IGluc2VydGVkIGEgc3BhY2UgKi8KKyAgICBpbnQJCXJlcGxhY2VTdGF0ZSA9IFJFUExBQ0U7CisgICAgaW50CQlkaWRfcmVzdGFydF9lZGl0ID0gcmVzdGFydF9lZGl0OworCisgICAgLyogc2xlZXAgYmVmb3JlIHJlZHJhd2luZywgbmVlZGVkIGZvciAiQ1RSTC1PIDoiIHRoYXQgcmVzdWx0cyBpbiBhbgorICAgICAqIGVycm9yIG1lc3NhZ2UgKi8KKyAgICBjaGVja19mb3JfZGVsYXkoVFJVRSk7CisKKyNpZmRlZiBIQVZFX1NBTkRCT1gKKyAgICAvKiBEb24ndCBhbGxvdyBpbnNlcnRpbmcgaW4gdGhlIHNhbmRib3guICovCisgICAgaWYgKHNhbmRib3ggIT0gMCkKKyAgICB7CisJRU1TRyhfKGVfc2FuZGJveCkpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorICAgIGluc19jb21wbF9jbGVhcigpOwkgICAgLyogY2xlYXIgc3R1ZmYgZm9yIENUUkwtWCBtb2RlICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfTU9VU0UKKyAgICAvKgorICAgICAqIFdoZW4gZG9pbmcgYSBwYXN0ZSB3aXRoIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uLCBJbnNzdGFydCBpcyBzZXQgdG8KKyAgICAgKiB3aGVyZSB0aGUgcGFzdGUgc3RhcnRlZC4KKyAgICAgKi8KKyAgICBpZiAod2hlcmVfcGFzdGVfc3RhcnRlZC5sbnVtICE9IDApCisJSW5zc3RhcnQgPSB3aGVyZV9wYXN0ZV9zdGFydGVkOworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwlJbnNzdGFydCA9IGN1cndpbi0+d19jdXJzb3I7CisJaWYgKHN0YXJ0bG4pCisJICAgIEluc3N0YXJ0LmNvbCA9IDA7CisgICAgfQorICAgIEluc3N0YXJ0X3RleHRsZW4gPSBsaW5ldGFic2l6ZShtbF9nZXRfY3VybGluZSgpKTsKKyAgICBJbnNzdGFydF9ibGFua192Y29sID0gTUFYQ09MOworICAgIGlmICghZGlkX2FpKQorCWFpX2NvbCA9IDA7CisKKyAgICBpZiAoY21kY2hhciAhPSBOVUwgJiYgcmVzdGFydF9lZGl0ID09IDApCisgICAgeworCVJlc2V0UmVkb2J1ZmYoKTsKKwlBcHBlbmROdW1iZXJUb1JlZG9idWZmKGNvdW50KTsKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisJaWYgKGNtZGNoYXIgPT0gJ1YnIHx8IGNtZGNoYXIgPT0gJ3YnKQorCXsKKwkgICAgLyogImdSIiBvciAiZ3IiIGNvbW1hbmQgKi8KKwkgICAgQXBwZW5kQ2hhclRvUmVkb2J1ZmYoJ2cnKTsKKwkgICAgQXBwZW5kQ2hhclRvUmVkb2J1ZmYoKGNtZGNoYXIgPT0gJ3YnKSA/ICdyJyA6ICdSJyk7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgQXBwZW5kQ2hhclRvUmVkb2J1ZmYoY21kY2hhcik7CisJICAgIGlmIChjbWRjaGFyID09ICdnJykJCSAgICAvKiAiZ0kiIGNvbW1hbmQgKi8KKwkJQXBwZW5kQ2hhclRvUmVkb2J1ZmYoJ0knKTsKKwkgICAgZWxzZSBpZiAoY21kY2hhciA9PSAncicpCSAgICAvKiAicjxDUj4iIGNvbW1hbmQgKi8KKwkJY291bnQgPSAxOwkJICAgIC8qIGluc2VydCBvbmx5IG9uZSA8Q1I+ICovCisJfQorICAgIH0KKworICAgIGlmIChjbWRjaGFyID09ICdSJykKKyAgICB7CisjaWZkZWYgRkVBVF9GS01BUAorCWlmIChwX2ZrbWFwICYmIHBfcmkpCisJeworCSAgICBiZWVwX2ZsdXNoKCk7CisJICAgIEVNU0coZmFyc2lfdGV4dF8zKTsJICAgIC8qIGVuY29kZWQgaW4gRmFyc2kgKi8KKwkgICAgU3RhdGUgPSBJTlNFUlQ7CisJfQorCWVsc2UKKyNlbmRpZgorCVN0YXRlID0gUkVQTEFDRTsKKyAgICB9CisjaWZkZWYgRkVBVF9WUkVQTEFDRQorICAgIGVsc2UgaWYgKGNtZGNoYXIgPT0gJ1YnIHx8IGNtZGNoYXIgPT0gJ3YnKQorICAgIHsKKwlTdGF0ZSA9IFZSRVBMQUNFOworCXJlcGxhY2VTdGF0ZSA9IFZSRVBMQUNFOworCW9yaWdfbGluZV9jb3VudCA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCXZyX2xpbmVzX2NoYW5nZWQgPSAxOworICAgIH0KKyNlbmRpZgorICAgIGVsc2UKKwlTdGF0ZSA9IElOU0VSVDsKKworICAgIHN0b3BfaW5zZXJ0X21vZGUgPSBGQUxTRTsKKworICAgIC8qCisgICAgICogTmVlZCB0byByZWNvbXB1dGUgdGhlIGN1cnNvciBwb3NpdGlvbiwgaXQgbWlnaHQgbW92ZSB3aGVuIHRoZSBjdXJzb3IgaXMKKyAgICAgKiBvbiBhIFRBQiBvciBzcGVjaWFsIGNoYXJhY3Rlci4KKyAgICAgKi8KKyAgICBjdXJzX2NvbHVtbnMoVFJVRSk7CisKKyAgICAvKgorICAgICAqIEVuYWJsZSBsYW5nbWFwIG9yIElNRSwgaW5kaWNhdGVkIGJ5ICdpbWluc2VydCcuCisgICAgICogTm90ZSB0aGF0IElNRSBtYXkgZW5hYmxlZC9kaXNhYmxlZCB3aXRob3V0IHVzIG5vdGljaW5nIGhlcmUsIHRodXMgdGhlCisgICAgICogJ2ltaW5zZXJ0JyB2YWx1ZSBtYXkgbm90IHJlZmxlY3Qgd2hhdCBpcyBhY3R1YWxseSB1c2VkLiAgSXQgaXMgdXBkYXRlZAorICAgICAqIHdoZW4gaGl0dGluZyA8RXNjPi4KKyAgICAgKi8KKyAgICBpZiAoY3VyYnVmLT5iX3BfaW1pbnNlcnQgPT0gQl9JTU9ERV9MTUFQKQorCVN0YXRlIHw9IExBTkdNQVA7CisjaWZkZWYgVVNFX0lNX0NPTlRST0wKKyAgICBpbV9zZXRfYWN0aXZlKGN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0ID09IEJfSU1PREVfSU0pOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpICYmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykKKyAgICBLZXlTY3JpcHQocHJldmlvdXNfc2NyaXB0KTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NT1VTRQorICAgIHNldG1vdXNlKCk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworICAgIGNsZWFyX3Nob3djbWQoKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgLyogdGhlcmUgaXMgbm8gcmV2ZXJzZSByZXBsYWNlIG1vZGUgKi8KKyAgICByZXZpbnNfb24gPSAoU3RhdGUgPT0gSU5TRVJUICYmIHBfcmkpOworICAgIGlmIChyZXZpbnNfb24pCisJdW5kaXNwbGF5X2RvbGxhcigpOworICAgIHJldmluc19jaGFycyA9IDA7CisgICAgcmV2aW5zX2xlZ2FsID0gMDsKKyAgICByZXZpbnNfc2NvbCA9IC0xOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEhhbmRsZSByZXN0YXJ0aW5nIEluc2VydCBtb2RlLgorICAgICAqIERvbid0IGRvIHRoaXMgZm9yICJDVFJMLU8gLiIgKHJlcGVhdCBhbiBpbnNlcnQpOiB3ZSBnZXQgaGVyZSB3aXRoCisgICAgICogcmVzdGFydF9lZGl0IG5vbi16ZXJvLCBhbmQgc29tZXRoaW5nIGluIHRoZSBzdHVmZiBidWZmZXIuCisgICAgICovCisgICAgaWYgKHJlc3RhcnRfZWRpdCAhPSAwICYmIHN0dWZmX2VtcHR5KCkpCisgICAgeworI2lmZGVmIEZFQVRfTU9VU0UKKwkvKgorCSAqIEFmdGVyIGEgcGFzdGUgd2UgY29uc2lkZXIgdGV4dCB0eXBlZCB0byBiZSBwYXJ0IG9mIHRoZSBpbnNlcnQgZm9yCisJICogdGhlIHBhc3RlZCB0ZXh0LiBZb3UgY2FuIGJhY2tzcGFjZSBvdmVyIHRoZSBwYXN0ZWQgdGV4dCB0b28uCisJICovCisJaWYgKHdoZXJlX3Bhc3RlX3N0YXJ0ZWQubG51bSkKKwkgICAgYXJyb3dfdXNlZCA9IEZBTFNFOworCWVsc2UKKyNlbmRpZgorCSAgICBhcnJvd191c2VkID0gVFJVRTsKKwlyZXN0YXJ0X2VkaXQgPSAwOworCisJLyoKKwkgKiBJZiB0aGUgY3Vyc29yIHdhcyBhZnRlciB0aGUgZW5kLW9mLWxpbmUgYmVmb3JlIHRoZSBDVFJMLU8gYW5kIGl0IGlzCisJICogbm93IGF0IHRoZSBlbmQtb2YtbGluZSwgcHV0IGl0IGFmdGVyIHRoZSBlbmQtb2YtbGluZSAodGhpcyBpcyBub3QKKwkgKiBjb3JyZWN0IGluIHZlcnkgcmFyZSBjYXNlcykuCisJICogQWxzbyBkbyB0aGlzIGlmIGN1cnN3YW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCB2aXJ0dWFsCisJICogY29sdW1uLiAgRWcgYWZ0ZXIgIl5PJCIgb3IgIl5PODB8Ii4KKwkgKi8KKwl2YWxpZGF0ZV92aXJ0Y29sKCk7CisJdXBkYXRlX2N1cnN3YW50KCk7CisJaWYgKCgob19lb2wgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtID09IG9fbG51bSkKKwkJICAgIHx8IGN1cndpbi0+d19jdXJzd2FudCA+IGN1cndpbi0+d192aXJ0Y29sKQorCQkmJiAqKHB0ciA9IG1sX2dldF9jdXJsaW5lKCkgKyBjdXJ3aW4tPndfY3Vyc29yLmNvbCkgIT0gTlVMKQorCXsKKwkgICAgaWYgKHB0clsxXSA9PSBOVUwpCisJCSsrY3Vyd2luLT53X2N1cnNvci5jb2w7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBlbHNlIGlmIChoYXNfbWJ5dGUpCisJICAgIHsKKwkJaSA9ICgqbWJfcHRyMmxlbl9jaGVjaykocHRyKTsKKwkJaWYgKHB0cltpXSA9PSBOVUwpCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCArPSBpOworCSAgICB9CisjZW5kaWYKKwl9CisJb19lb2wgPSBGQUxTRTsKKyAgICB9CisgICAgZWxzZQorCWFycm93X3VzZWQgPSBGQUxTRTsKKworICAgIC8qIHdlIGFyZSBpbiBpbnNlcnQgbW9kZSBub3csIGRvbid0IG5lZWQgdG8gc3RhcnQgaXQgYW55bW9yZSAqLworICAgIG5lZWRfc3RhcnRfaW5zZXJ0bW9kZSA9IEZBTFNFOworCisgICAgLyogTmVlZCB0byBzYXZlIHRoZSBsaW5lIGZvciB1bmRvIGJlZm9yZSBpbnNlcnRpbmcgdGhlIGZpcnN0IGNoYXIuICovCisgICAgaW5zX25lZWRfdW5kbyA9IFRSVUU7CisKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgd2hlcmVfcGFzdGVfc3RhcnRlZC5sbnVtID0gMDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ0lOREVOVAorICAgIGNhbl9jaW5kZW50ID0gVFJVRTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworICAgIC8qIFRoZSBjdXJzb3IgbGluZSBpcyBub3QgaW4gYSBjbG9zZWQgZm9sZCwgdW5sZXNzICdpbnNlcnRtb2RlJyBpcyBzZXQgb3IKKyAgICAgKiByZXN0YXJ0aW5nLiAqLworICAgIGlmICghcF9pbSAmJiBkaWRfcmVzdGFydF9lZGl0ID09IDApCisJZm9sZE9wZW5DdXJzb3IoKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBJZiAnc2hvd21vZGUnIGlzIHNldCwgc2hvdyB0aGUgY3VycmVudCAoaW5zZXJ0L3JlcGxhY2UvLi4pIG1vZGUuCisgICAgICogQSB3YXJuaW5nIG1lc3NhZ2UgZm9yIGNoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSBpcyBnaXZlbiBoZXJlLCBiZWZvcmUKKyAgICAgKiBhY3R1YWxseSBjaGFuZ2luZyBhbnl0aGluZy4gIEl0J3MgcHV0IGFmdGVyIHRoZSBtb2RlLCBpZiBhbnkuCisgICAgICovCisgICAgaSA9IDA7CisgICAgaWYgKHBfc21kKQorCWkgPSBzaG93bW9kZSgpOworCisgICAgaWYgKCFwX2ltICYmIGRpZF9yZXN0YXJ0X2VkaXQgPT0gMCkKKwljaGFuZ2Vfd2FybmluZyhpICsgMSk7CisKKyNpZmRlZiBDVVJTT1JfU0hBUEUKKyAgICB1aV9jdXJzb3Jfc2hhcGUoKTsJCS8qIG1heSBzaG93IGRpZmZlcmVudCBjdXJzb3Igc2hhcGUgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfRElHUkFQSFMKKyAgICBkb19kaWdyYXBoKC0xKTsJCS8qIGNsZWFyIGRpZ3JhcGhzICovCisjZW5kaWYKKworLyoKKyAqIEdldCB0aGUgY3VycmVudCBsZW5ndGggb2YgdGhlIHJlZG8gYnVmZmVyLCB0aG9zZSBjaGFyYWN0ZXJzIGhhdmUgdG8gYmUKKyAqIHNraXBwZWQgaWYgd2Ugd2FudCB0byBnZXQgdG8gdGhlIGluc2VydGVkIGNoYXJhY3RlcnMuCisgKi8KKyAgICBwdHIgPSBnZXRfaW5zZXJ0ZWQoKTsKKyAgICBpZiAocHRyID09IE5VTEwpCisJbmV3X2luc2VydF9za2lwID0gMDsKKyAgICBlbHNlCisgICAgeworCW5ld19pbnNlcnRfc2tpcCA9IChpbnQpU1RSTEVOKHB0cik7CisJdmltX2ZyZWUocHRyKTsKKyAgICB9CisKKyAgICBvbGRfaW5kZW50ID0gMDsKKworICAgIC8qCisgICAgICogTWFpbiBsb29wIGluIEluc2VydCBtb2RlOiByZXBlYXQgdW50aWwgSW5zZXJ0IG1vZGUgaXMgbGVmdC4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCWlmICghcmV2aW5zX2xlZ2FsKQorCSAgICByZXZpbnNfc2NvbCA9IC0xOwkgICAgLyogcmVzZXQgb24gaWxsZWdhbCBtb3Rpb25zICovCisJZWxzZQorCSAgICByZXZpbnNfbGVnYWwgPSAwOworI2VuZGlmCisJaWYgKGFycm93X3VzZWQpCSAgICAvKiBkb24ndCByZXBlYXQgaW5zZXJ0IHdoZW4gYXJyb3cga2V5IHVzZWQgKi8KKwkgICAgY291bnQgPSAwOworCisJaWYgKHN0b3BfaW5zZXJ0X21vZGUpCisJeworCSAgICAvKiAiOnN0b3BpbnNlcnQiIHVzZWQgb3IgJ2luc2VydG1vZGUnIHJlc2V0ICovCisJICAgIGNvdW50ID0gMDsKKwkgICAgZ290byBkb0VTQ2tleTsKKwl9CisKKwkvKiBzZXQgY3Vyd2luLT53X2N1cnN3YW50IGZvciBuZXh0IEtfRE9XTiBvciBLX1VQICovCisJaWYgKCFhcnJvd191c2VkKQorCSAgICBjdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKworCS8qIElmIHRoZXJlIGlzIG5vIHR5cGVhaGVhZCBtYXkgY2hlY2sgZm9yIHRpbWVzdGFtcHMgKGUuZy4sIGZvciB3aGVuIGEKKwkgKiBtZW51IGludm9rZWQgYSBzaGVsbCBjb21tYW5kKS4gKi8KKwlpZiAoc3R1ZmZfZW1wdHkoKSkKKwl7CisJICAgIGRpZF9jaGVja190aW1lc3RhbXBzID0gRkFMU0U7CisJICAgIGlmIChuZWVkX2NoZWNrX3RpbWVzdGFtcHMpCisJCWNoZWNrX3RpbWVzdGFtcHMoRkFMU0UpOworCX0KKworCS8qCisJICogV2hlbiBlbXNnKCkgd2FzIGNhbGxlZCBtc2dfc2Nyb2xsIHdpbGwgaGF2ZSBiZWVuIHNldC4KKwkgKi8KKwltc2dfc2Nyb2xsID0gRkFMU0U7CisKKyNpZmRlZiBGRUFUX0dVSQorCS8qIFdoZW4gJ21vdXNlZm9jdXMnIGlzIHNldCBhIG1vdXNlIG1vdmVtZW50IG1heSBoYXZlIHRha2VuIHVzIHRvCisJICogYW5vdGhlciB3aW5kb3cuICAibmVlZF9tb3VzZV9jb3JyZWN0IiBtYXkgdGhlbiBiZSBzZXQgYmVjYXVzZSBvZiBhbgorCSAqIGF1dG9jb21tYW5kLiAqLworCWlmIChuZWVkX21vdXNlX2NvcnJlY3QpCisJICAgIGd1aV9tb3VzZV9jb3JyZWN0KCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfRk9MRElORworCS8qIE9wZW4gZm9sZCBhdCB0aGUgY3Vyc29yIGxpbmUsIGFjY29yZGluZyB0byAnZm9sZG9wZW4nLiAqLworCWlmIChmZG9fZmxhZ3MgJiBGRE9fSU5TRVJUKQorCSAgICBmb2xkT3BlbkN1cnNvcigpOworCS8qIENsb3NlIGZvbGRzIHdoZXJlIHRoZSBjdXJzb3IgaXNuJ3QsIGFjY29yZGluZyB0byAnZm9sZGNsb3NlJyAqLworCWlmICghY2hhcl9hdmFpbCgpKQorCSAgICBmb2xkQ2hlY2tDbG9zZSgpOworI2VuZGlmCisKKwkvKgorCSAqIElmIHdlIGluc2VydGVkIGEgY2hhcmFjdGVyIGF0IHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRoZSBsYXN0IGxpbmUgaW4KKwkgKiB0aGUgd2luZG93LCBzY3JvbGwgdGhlIHdpbmRvdyBvbmUgbGluZSB1cC4gVGhpcyBhdm9pZHMgYW4gZXh0cmEKKwkgKiByZWRyYXcuCisJICogVGhpcyBpcyBkZXRlY3RlZCB3aGVuIHRoZSBjdXJzb3IgY29sdW1uIGlzIHNtYWxsZXIgYWZ0ZXIgaW5zZXJ0aW5nCisJICogc29tZXRoaW5nLgorCSAqIERvbid0IGRvIHRoaXMgd2hlbiB0aGUgdG9wbGluZSBjaGFuZ2VkIGFscmVhZHksIGl0IGhhcworCSAqIGFscmVhZHkgYmVlbiBhZGp1c3RlZCAoYnkgaW5zZXJ0Y2hhcigpIGNhbGxpbmcgb3Blbl9saW5lKCkpKS4KKwkgKi8KKwlpZiAoY3VyYnVmLT5iX21vZF9zZXQKKwkJJiYgY3Vyd2luLT53X3Bfd3JhcAorCQkmJiAhZGlkX2JhY2tzcGFjZQorCQkmJiBjdXJ3aW4tPndfdG9wbGluZSA9PSBvbGRfdG9wbGluZQorI2lmZGVmIEZFQVRfRElGRgorCQkmJiBjdXJ3aW4tPndfdG9wZmlsbCA9PSBvbGRfdG9wZmlsbAorI2VuZGlmCisJCSkKKwl7CisJICAgIG1pbmNvbCA9IGN1cndpbi0+d193Y29sOworCSAgICB2YWxpZGF0ZV9jdXJzb3JfY29sKCk7CisKKwkgICAgaWYgKChpbnQpY3Vyd2luLT53X3djb2wgPCAoaW50KW1pbmNvbCAtIGN1cmJ1Zi0+Yl9wX3RzCisJCSAgICAmJiBjdXJ3aW4tPndfd3JvdyA9PSBXX1dJTlJPVyhjdXJ3aW4pCisJCQkJCQkgKyBjdXJ3aW4tPndfaGVpZ2h0IC0gMSAtIHBfc28KKwkJICAgICYmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gIT0gY3Vyd2luLT53X3RvcGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkJCXx8IGN1cndpbi0+d190b3BmaWxsID4gMAorI2VuZGlmCisJCSAgICApKQorCSAgICB7CisjaWZkZWYgRkVBVF9ESUZGCisJCWlmIChjdXJ3aW4tPndfdG9wZmlsbCA+IDApCisJCSAgICAtLWN1cndpbi0+d190b3BmaWxsOworCQllbHNlCisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkJaWYgKGhhc0ZvbGRpbmcoY3Vyd2luLT53X3RvcGxpbmUsIE5VTEwsICZvbGRfdG9wbGluZSkpCisJCSAgICBzZXRfdG9wbGluZShjdXJ3aW4sIG9sZF90b3BsaW5lICsgMSk7CisJCWVsc2UKKyNlbmRpZgorCQkgICAgc2V0X3RvcGxpbmUoY3Vyd2luLCBjdXJ3aW4tPndfdG9wbGluZSArIDEpOworCSAgICB9CisJfQorCisJLyogTWF5IG5lZWQgdG8gYWRqdXN0IHdfdG9wbGluZSB0byBzaG93IHRoZSBjdXJzb3IuICovCisJdXBkYXRlX3RvcGxpbmUoKTsKKworCWRpZF9iYWNrc3BhY2UgPSBGQUxTRTsKKworCXZhbGlkYXRlX2N1cnNvcigpOwkJLyogbWF5IHNldCBtdXN0X3JlZHJhdyAqLworCisJLyoKKwkgKiBSZWRyYXcgdGhlIGRpc3BsYXkgd2hlbiBubyBjaGFyYWN0ZXJzIGFyZSB3YWl0aW5nLgorCSAqIEFsc28gc2hvd3MgbW9kZSwgcnVsZXIgYW5kIHBvc2l0aW9ucyBjdXJzb3IuCisJICovCisJaW5zX3JlZHJhdygpOworCisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisJaWYgKGN1cndpbi0+d19wX3NjYikKKwkgICAgZG9fY2hlY2tfc2Nyb2xsYmluZChUUlVFKTsKKyNlbmRpZgorCisJdXBkYXRlX2N1cnN3YW50KCk7CisJb2xkX3RvcGxpbmUgPSBjdXJ3aW4tPndfdG9wbGluZTsKKyNpZmRlZiBGRUFUX0RJRkYKKwlvbGRfdG9wZmlsbCA9IGN1cndpbi0+d190b3BmaWxsOworI2VuZGlmCisKKyNpZmRlZiBVU0VfT05fRkxZX1NDUk9MTAorCWRvbnRfc2Nyb2xsID0gRkFMU0U7CQkvKiBhbGxvdyBzY3JvbGxpbmcgaGVyZSAqLworI2VuZGlmCisKKwkvKgorCSAqIEdldCBhIGNoYXJhY3RlciBmb3IgSW5zZXJ0IG1vZGUuCisJICovCisJbGFzdGMgPSBjOwkJCS8qIHJlbWVtYmVyIHByZXZpb3VzIGNoYXIgZm9yIENUUkwtRCAqLworCWMgPSBzYWZlX3ZnZXRjKCk7CisKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCWlmIChwX2hrbWFwICYmIEtleVR5cGVkKQorCSAgICBjID0gaGttYXAoYyk7CQkvKiBIZWJyZXcgbW9kZSBtYXBwaW5nICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZLTUFQCisJaWYgKHBfZmttYXAgJiYgS2V5VHlwZWQpCisJICAgIGMgPSBma21hcChjKTsJCS8qIEZhcnNpIG1vZGUgbWFwcGluZyAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkvKiBQcmVwYXJlIGZvciBvciBzdG9wIENUUkwtWCBtb2RlLiAgVGhpcyBkb2Vzbid0IGRvIGNvbXBsZXRpb24sIGJ1dAorCSAqIGl0IGRvZXMgZml4IHVwIHRoZSB0ZXh0IHdoZW4gZmluaXNoaW5nIGNvbXBsZXRpb24uICovCisJaW5zX2NvbXBsX3ByZXAoYyk7CisjZW5kaWYKKworCS8qIENUUkwtXCBDVFJMLU4gZ29lcyB0byBOb3JtYWwgbW9kZSwgQ1RSTC1cIENUUkwtRyBnb2VzIHRvIG1vZGUKKwkgKiBzZWxlY3RlZCB3aXRoICdpbnNlcnRtb2RlJy4gICovCisJaWYgKGMgPT0gQ3RybF9CU0wpCisJeworCSAgICAvKiBtYXkgbmVlZCB0byByZWRyYXcgd2hlbiBubyBtb3JlIGNoYXJzIGF2YWlsYWJsZSBub3cgKi8KKwkgICAgaW5zX3JlZHJhdygpOworCSAgICArK25vX21hcHBpbmc7CisJICAgICsrYWxsb3dfa2V5czsKKwkgICAgYyA9IHNhZmVfdmdldGMoKTsKKwkgICAgLS1ub19tYXBwaW5nOworCSAgICAtLWFsbG93X2tleXM7CisJICAgIGlmIChjICE9IEN0cmxfTiAmJiBjICE9IEN0cmxfRykJLyogaXQncyBzb21ldGhpbmcgZWxzZSAqLworCSAgICB7CisJCXZ1bmdldGMoYyk7CisJCWMgPSBDdHJsX0JTTDsKKwkgICAgfQorCSAgICBlbHNlIGlmIChjID09IEN0cmxfRyAmJiBwX2ltKQorCQljb250aW51ZTsKKwkgICAgZWxzZQorCSAgICB7CisJCWNvdW50ID0gMDsKKwkJZ290byBkb0VTQ2tleTsKKwkgICAgfQorCX0KKworI2lmZGVmIEZFQVRfRElHUkFQSFMKKwljID0gZG9fZGlncmFwaChjKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJaWYgKChjID09IEN0cmxfViB8fCBjID09IEN0cmxfUSkgJiYgY3RybF94X21vZGUgPT0gQ1RSTF9YX0NNRExJTkUpCisJICAgIGdvdG8gZG9jb21wbGV0ZTsKKyNlbmRpZgorCWlmIChjID09IEN0cmxfViB8fCBjID09IEN0cmxfUSkKKwl7CisJICAgIGluc19jdHJsX3YoKTsKKwkgICAgYyA9IEN0cmxfVjsJLyogcHJldGVuZCBDVFJMLVYgaXMgbGFzdCB0eXBlZCBjaGFyYWN0ZXIgKi8KKwkgICAgY29udGludWU7CisJfQorCisjaWZkZWYgRkVBVF9DSU5ERU5UCisJaWYgKGNpbmRlbnRfb24oKQorIyBpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkJJiYgY3RybF94X21vZGUgPT0gMAorIyBlbmRpZgorCSAgICkKKwl7CisJICAgIC8qIEEga2V5IG5hbWUgcHJlY2VkZWQgYnkgYSBiYW5nIG1lYW5zIHRoaXMga2V5IGlzIG5vdCB0byBiZQorCSAgICAgKiBpbnNlcnRlZC4gIFNraXAgYWhlYWQgdG8gdGhlIHJlLWluZGVudGluZyBiZWxvdy4KKwkgICAgICogQSBrZXkgbmFtZSBwcmVjZWRlZCBieSBhIHN0YXIgbWVhbnMgdGhhdCBpbmRlbnRpbmcgaGFzIHRvIGJlCisJICAgICAqIGRvbmUgYmVmb3JlIGluc2VydGluZyB0aGUga2V5LiAqLworCSAgICBsaW5lX2lzX3doaXRlID0gaW5pbmRlbnQoMCk7CisJICAgIGlmIChpbl9jaW5rZXlzKGMsICchJywgbGluZV9pc193aGl0ZSkpCisJCWdvdG8gZm9yY2VfY2luZGVudDsKKwkgICAgaWYgKGNhbl9jaW5kZW50ICYmIGluX2NpbmtleXMoYywgJyonLCBsaW5lX2lzX3doaXRlKQorCQkJCQkJCSYmIHN0b3BfYXJyb3coKSA9PSBPSykKKwkJZG9fY19leHByX2luZGVudCgpOworCX0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwlpZiAoY3Vyd2luLT53X3BfcmwpCisJICAgIHN3aXRjaCAoYykKKwkgICAgeworCQljYXNlIEtfTEVGVDoJYyA9IEtfUklHSFQ7IGJyZWFrOworCQljYXNlIEtfU19MRUZUOgljID0gS19TX1JJR0hUOyBicmVhazsKKwkJY2FzZSBLX0NfTEVGVDoJYyA9IEtfQ19SSUdIVDsgYnJlYWs7CisJCWNhc2UgS19SSUdIVDoJYyA9IEtfTEVGVDsgYnJlYWs7CisJCWNhc2UgS19TX1JJR0hUOiBjID0gS19TX0xFRlQ7IGJyZWFrOworCQljYXNlIEtfQ19SSUdIVDogYyA9IEtfQ19MRUZUOyBicmVhazsKKwkgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCS8qCisJICogSWYgJ2tleW1vZGVsJyBjb250YWlucyAic3RhcnRzZWwiLCBtYXkgc3RhcnQgc2VsZWN0aW9uLiAgSWYgaXQKKwkgKiBkb2VzLCBhIENUUkwtTyBhbmQgYyB3aWxsIGJlIHN0dWZmZWQsIHdlIG5lZWQgdG8gZ2V0IHRoZXNlCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpZiAoaW5zX3N0YXJ0X3NlbGVjdChjKSkKKwkgICAgY29udGludWU7CisjZW5kaWYKKworCS8qCisJICogVGhlIGJpZyBzd2l0Y2ggdG8gaGFuZGxlIGEgY2hhcmFjdGVyIGluIGluc2VydCBtb2RlLgorCSAqLworCXN3aXRjaCAoYykKKwl7CisJLyogdG9nZ2xlIGluc2VydC9yZXBsYWNlIG1vZGUgKi8KKwljYXNlIEtfSU5TOgorCWNhc2UgS19LSU5TOgorI2lmZGVmIEZFQVRfRktNQVAKKwkgICAgaWYgKHBfZmttYXAgJiYgcF9yaSkKKwkgICAgeworCQliZWVwX2ZsdXNoKCk7CisJCUVNU0coZmFyc2lfdGV4dF8zKTsJLyogZW5jb2RlZCBpbiBGYXJzaSAqLworCQlicmVhazsKKwkgICAgfQorI2VuZGlmCisJICAgIGlmIChTdGF0ZSAmIFJFUExBQ0VfRkxBRykKKwkJU3RhdGUgPSBJTlNFUlQgfCAoU3RhdGUgJiBMQU5HTUFQKTsKKwkgICAgZWxzZQorCQlTdGF0ZSA9IHJlcGxhY2VTdGF0ZSB8IChTdGF0ZSAmIExBTkdNQVApOworCSAgICBBcHBlbmRDaGFyVG9SZWRvYnVmZihLX0lOUyk7CisJICAgIHNob3dtb2RlKCk7CisjaWZkZWYgQ1VSU09SX1NIQVBFCisJICAgIHVpX2N1cnNvcl9zaGFwZSgpOwkJLyogbWF5IHNob3cgZGlmZmVyZW50IGN1cnNvciBzaGFwZSAqLworI2VuZGlmCisJICAgIGJyZWFrOworCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJLyogRW50ZXIgQ1RSTC1YIG1vZGUgKi8KKwljYXNlIEN0cmxfWDoKKwkgICAgLyogQ1RSTC1YIGFmdGVyIENUUkwtViBDVFJMLVggZG9lc24ndCBkbyBhbnl0aGluZywgc28gdGhhdCBDVFJMLVgKKwkgICAgICogQ1RSTC1WIHdvcmtzIGxpa2UgQ1RSTC1OICovCisJICAgIGlmIChjdHJsX3hfbW9kZSAhPSBDVFJMX1hfQ01ETElORSkKKwkgICAgeworCQkvKiBpZiB0aGUgbmV4dCBeWDw+IHdvbid0IEFERCBub3RoaW5nLCB0aGVuIHJlc2V0CisJCSAqIGNvbnRpbnVlX3N0YXR1cyAqLworCQlpZiAoY29udGludWVfc3RhdHVzICYgQ09OVF9OX0FERFMpCisJCSAgICBjb250aW51ZV9zdGF0dXMgPSAoY29udGludWVfc3RhdHVzIHwgQ09OVF9JTlRSUFQpOworCQllbHNlCisJCSAgICBjb250aW51ZV9zdGF0dXMgPSAwOworCQkvKiBXZSdyZSBub3Qgc3VyZSB3aGljaCBDVFJMLVggbW9kZSBpdCB3aWxsIGJlIHlldCAqLworCQljdHJsX3hfbW9kZSA9IENUUkxfWF9OT1RfREVGSU5FRF9ZRVQ7CisJCWVkaXRfc3VibW9kZSA9IChjaGFyX3UgKilfKENUUkxfWF9NU0coY3RybF94X21vZGUpKTsKKwkJZWRpdF9zdWJtb2RlX3ByZSA9IE5VTEw7CisJCXNob3dtb2RlKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisjZW5kaWYKKworCS8qIGVuZCBvZiBTZWxlY3QgbW9kZSBtYXBwaW5nIC0gaWdub3JlICovCisJY2FzZSBLX1NFTEVDVDoKKwkgICAgYnJlYWs7CisKKwkvKiBzdXNwZW5kIHdoZW4gJ2luc2VydG1vZGUnIHNldCAqLworCWNhc2UgQ3RybF9aOgorCSAgICBpZiAoIXBfaW0pCisJCWdvdG8gbm9ybWFsY2hhcjsJLyogaW5zZXJ0IENUUkwtWiBhcyBub3JtYWwgY2hhciAqLworCSAgICBzdHVmZlJlYWRidWZmKChjaGFyX3UgKikiOnN0XHIiKTsKKwkgICAgYyA9IEN0cmxfTzsKKwkgICAgLypGQUxMVEhST1VHSCovCisKKwkvKiBleGVjdXRlIG9uZSBjb21tYW5kICovCisJY2FzZSBDdHJsX086CisJICAgIGlmIChlY2hlY2tfYWJicihDdHJsX08gKyBBQkJSX09GRikpCisJCWJyZWFrOworCSAgICBjb3VudCA9IDA7CisjaWZkZWYgRkVBVF9WUkVQTEFDRQorCSAgICBpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorCQlyZXN0YXJ0X2VkaXQgPSAnVic7CisJICAgIGVsc2UKKyNlbmRpZgorCQlpZiAoU3RhdGUgJiBSRVBMQUNFX0ZMQUcpCisJCXJlc3RhcnRfZWRpdCA9ICdSJzsKKwkgICAgZWxzZQorCQlyZXN0YXJ0X2VkaXQgPSAnSSc7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCSAgICBpZiAodmlydHVhbF9hY3RpdmUoKSkKKwkJb19lb2wgPSBGQUxTRTsJICAgIC8qIGN1cnNvciBhbHdheXMga2VlcHMgaXRzIGNvbHVtbiAqLworCSAgICBlbHNlCisjZW5kaWYKKwkJb19lb2wgPSAoZ2NoYXJfY3Vyc29yKCkgPT0gTlVMKTsKKwkgICAgZ290byBkb0VTQ2tleTsKKworI2lmZGVmIEZFQVRfU05JRkYKKwljYXNlIEtfU05JRkY6CisJICAgIHN0dWZmY2hhclJlYWRidWZmKEtfU05JRkYpOworCSAgICBnb3RvIGRvRVNDa2V5OworI2VuZGlmCisKKwkvKiBIaXR0aW5nIHRoZSBoZWxwIGtleSBpbiBpbnNlcnQgbW9kZSBpcyBsaWtlIDxFU0M+IDxIZWxwPiAqLworCWNhc2UgS19IRUxQOgorCWNhc2UgS19GMToKKwljYXNlIEtfWEYxOgorCSAgICBzdHVmZmNoYXJSZWFkYnVmZihLX0hFTFApOworCSAgICBpZiAocF9pbSkKKwkJbmVlZF9zdGFydF9pbnNlcnRtb2RlID0gVFJVRTsKKwkgICAgZ290byBkb0VTQ2tleTsKKworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCWNhc2UgS19GMjE6CisJICAgICsrbm9fbWFwcGluZzsJCS8qIGRvbid0IG1hcCB0aGUgbmV4dCBrZXkgaGl0cyAqLworCSAgICBpID0gc2FmZV92Z2V0YygpOworCSAgICAtLW5vX21hcHBpbmc7CisJICAgIG5ldGJlYW5zX2tleWNvbW1hbmQoaSk7CisJICAgIGJyZWFrOworI2VuZGlmCisKKwkvKiBhbiBlc2NhcGUgZW5kcyBpbnB1dCBtb2RlICovCisJY2FzZSBFU0M6CisJICAgIGlmIChlY2hlY2tfYWJicihFU0MgKyBBQkJSX09GRikpCisJCWJyZWFrOworCSAgICAvKkZBTExUSFJPVUdIKi8KKworCWNhc2UgQ3RybF9DOgorI2lmZGVmIEZFQVRfQ01EV0lOCisJICAgIGlmIChjID09IEN0cmxfQyAmJiBjbWR3aW5fdHlwZSAhPSAwKQorCSAgICB7CisJCS8qIENsb3NlIHRoZSBjbWRsaW5lIHdpbmRvdy4gKi8KKwkJY21kd2luX3Jlc3VsdCA9IEtfSUdOT1JFOworCQlnb3RfaW50ID0gRkFMU0U7IC8qIGRvbid0IHN0b3AgZXhlY3V0aW5nIGF1dG9jb21tYW5kcyBldCBhbC4gKi8KKwkJZ290byBkb0VTQ2tleTsKKwkgICAgfQorI2VuZGlmCisKKyNpZmRlZiBVTklYCitkb19pbnRyOgorI2VuZGlmCisJICAgIC8qIHdoZW4gJ2luc2VydG1vZGUnIHNldCwgYW5kIG5vdCBoYWxmd2F5IGEgbWFwcGluZywgZG9uJ3QgbGVhdmUKKwkgICAgICogSW5zZXJ0IG1vZGUgKi8KKwkgICAgaWYgKGdvdG9faW0oKSkKKwkgICAgeworCQlpZiAoZ290X2ludCkKKwkJeworCQkgICAgKHZvaWQpdmdldGMoKTsJCS8qIGZsdXNoIGFsbCBidWZmZXJzICovCisJCSAgICBnb3RfaW50ID0gRkFMU0U7CisJCX0KKwkJZWxzZQorCQkgICAgdmltX2JlZXAoKTsKKwkJYnJlYWs7CisJICAgIH0KK2RvRVNDa2V5OgorCSAgICAvKgorCSAgICAgKiBUaGlzIGlzIHRoZSBPTkxZIHJldHVybiBmcm9tIGVkaXQoKSEKKwkgICAgICovCisJICAgIC8qIEFsd2F5cyB1cGRhdGUgb19sbnVtLCBzbyB0aGF0IGEgIkNUUkwtTyAuIiB0aGF0IGFkZHMgYSBsaW5lCisJICAgICAqIHN0aWxsIHB1dHMgdGhlIGN1cnNvciBiYWNrIGFmdGVyIHRoZSBpbnNlcnRlZCB0ZXh0LiAqLworCSAgICBpZiAob19lb2wgJiYgZ2NoYXJfY3Vyc29yKCkgPT0gTlVMKQorCQlvX2xudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisKKwkgICAgaWYgKGluc19lc2MoJmNvdW50LCBjbWRjaGFyKSkKKwkJcmV0dXJuIChjID09IEN0cmxfTyk7CisJICAgIGNvbnRpbnVlOworCisJLyoKKwkgKiBJbnNlcnQgdGhlIHByZXZpb3VzbHkgaW5zZXJ0ZWQgdGV4dC4KKwkgKiBGb3IgXkAgdGhlIHRyYWlsaW5nIEVTQyB3aWxsIGVuZCB0aGUgaW5zZXJ0LCB1bmxlc3MgdGhlcmUgaXMgYW4KKwkgKiBlcnJvci4KKwkgKi8KKwljYXNlIEtfWkVSTzoKKwljYXNlIE5VTDoKKwljYXNlIEN0cmxfQToKKwkgICAgaWYgKHN0dWZmX2luc2VydGVkKE5VTCwgMUwsIChjID09IEN0cmxfQSkpID09IEZBSUwKKwkJCQkJCSAgICYmIGMgIT0gQ3RybF9BICYmICFwX2ltKQorCQlnb3RvIGRvRVNDa2V5OwkJLyogcXVpdCBpbnNlcnQgbW9kZSAqLworCSAgICBpbnNlcnRlZF9zcGFjZSA9IEZBTFNFOworCSAgICBicmVhazsKKworCS8qIGluc2VydCB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciAqLworCWNhc2UgQ3RybF9SOgorCSAgICBpbnNfcmVnKCk7CisJICAgIGF1dG9fZm9ybWF0KEZBTFNFLCBUUlVFKTsKKwkgICAgaW5zZXJ0ZWRfc3BhY2UgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEN0cmxfRzoKKwkgICAgaW5zX2N0cmxfZygpOworCSAgICBicmVhazsKKworCWNhc2UgQ3RybF9IQVQ6CisJICAgIGlmIChtYXBfdG9fZXhpc3RzX21vZGUoKGNoYXJfdSAqKSIiLCBMQU5HTUFQKSkKKwkgICAgeworCQkvKiAiOmxtYXAiIG1hcHBpbmdzIGV4aXN0cywgVG9nZ2xlIHVzZSBvZiAiOmxtYXAiIG1hcHBpbmdzLiAqLworCQlpZiAoU3RhdGUgJiBMQU5HTUFQKQorCQl7CisJCSAgICBjdXJidWYtPmJfcF9pbWluc2VydCA9IEJfSU1PREVfTk9ORTsKKwkJICAgIFN0YXRlICY9IH5MQU5HTUFQOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgY3VyYnVmLT5iX3BfaW1pbnNlcnQgPSBCX0lNT0RFX0xNQVA7CisJCSAgICBTdGF0ZSB8PSBMQU5HTUFQOworI2lmZGVmIFVTRV9JTV9DT05UUk9MCisJCSAgICBpbV9zZXRfYWN0aXZlKEZBTFNFKTsKKyNlbmRpZgorCQl9CisJICAgIH0KKyNpZmRlZiBVU0VfSU1fQ09OVFJPTAorCSAgICBlbHNlCisJICAgIHsKKwkJLyogVGhlcmUgYXJlIG5vICI6bG1hcCIgbWFwcGluZ3MsIHRvZ2dsZSBJTSAqLworCQlpZiAoaW1fZ2V0X3N0YXR1cygpKQorCQl7CisJCSAgICBjdXJidWYtPmJfcF9pbWluc2VydCA9IEJfSU1PREVfTk9ORTsKKwkJICAgIGltX3NldF9hY3RpdmUoRkFMU0UpOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgY3VyYnVmLT5iX3BfaW1pbnNlcnQgPSBCX0lNT0RFX0lNOworCQkgICAgU3RhdGUgJj0gfkxBTkdNQVA7CisJCSAgICBpbV9zZXRfYWN0aXZlKFRSVUUpOworCQl9CisJICAgIH0KKyNlbmRpZgorCSAgICBzZXRfaW1pbnNlcnRfZ2xvYmFsKCk7CisJICAgIHNob3dtb2RlKCk7CisjaWZkZWYgRkVBVF9HVUkKKwkgICAgLyogbWF5IHNob3cgZGlmZmVyZW50IGN1cnNvciBzaGFwZSBvciBjb2xvciAqLworCSAgICBpZiAoZ3VpLmluX3VzZSkKKwkJZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9LRVlNQVApCisJICAgIC8qIFNob3cvdW5zaG93IHZhbHVlIG9mICdrZXltYXAnIGluIHN0YXR1cyBsaW5lcy4gKi8KKwkgICAgc3RhdHVzX3JlZHJhd19jdXJidWYoKTsKKyNlbmRpZgorCSAgICBicmVhazsKKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJY2FzZSBDdHJsX186CisJICAgIGlmICghcF9hcmkpCisJCWdvdG8gbm9ybWFsY2hhcjsKKwkgICAgaW5zX2N0cmxfKCk7CisJICAgIGJyZWFrOworI2VuZGlmCisKKwkvKiBNYWtlIGluZGVudCBvbmUgc2hpZnR3aWR0aCBzbWFsbGVyLiAqLworCWNhc2UgQ3RybF9EOgorI2lmIGRlZmluZWQoRkVBVF9JTlNfRVhQQU5EKSAmJiBkZWZpbmVkKEZFQVRfRklORF9JRCkKKwkgICAgaWYgKGN0cmxfeF9tb2RlID09IENUUkxfWF9QQVRIX0RFRklORVMpCisJCWdvdG8gZG9jb21wbGV0ZTsKKyNlbmRpZgorCSAgICAvKiBGQUxMVEhST1VHSCAqLworCisJLyogTWFrZSBpbmRlbnQgb25lIHNoaWZ0d2lkdGggZ3JlYXRlci4gKi8KKwljYXNlIEN0cmxfVDoKKyMgaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJICAgIGlmIChjID09IEN0cmxfVCAmJiBjdHJsX3hfbW9kZSA9PSBDVFJMX1hfVEhFU0FVUlVTKQorCSAgICB7CisJCWlmICgqY3VyYnVmLT5iX3BfdHNyID09IE5VTCAmJiAqcF90c3IgPT0gTlVMKQorCQl7CisJCSAgICBjdHJsX3hfbW9kZSA9IDA7CisJCSAgICBtc2dfYXR0cigoY2hhcl91ICopXygiJ3RoZXNhdXJ1cycgb3B0aW9uIGlzIGVtcHR5IiksCisJCQkgICAgIGhsX2F0dHIoSExGX0UpKTsKKwkJICAgIGlmIChlbXNnX3NpbGVudCA9PSAwKQorCQkgICAgeworCQkJdmltX2JlZXAoKTsKKwkJCXNldGN1cnNvcigpOworCQkJb3V0X2ZsdXNoKCk7CisJCQl1aV9kZWxheSgyMDAwTCwgRkFMU0UpOworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCX0KKwkJZ290byBkb2NvbXBsZXRlOworCSAgICB9CisjIGVuZGlmCisJICAgIGluc19zaGlmdChjLCBsYXN0Yyk7CisJICAgIGF1dG9fZm9ybWF0KEZBTFNFLCBUUlVFKTsKKwkgICAgaW5zZXJ0ZWRfc3BhY2UgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisKKwkvKiBkZWxldGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgKi8KKwljYXNlIEtfREVMOgorCWNhc2UgS19LREVMOgorCSAgICBpbnNfZGVsKCk7CisJICAgIGF1dG9fZm9ybWF0KEZBTFNFLCBUUlVFKTsKKwkgICAgYnJlYWs7CisKKwkvKiBkZWxldGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY3Vyc29yICovCisJY2FzZSBLX0JTOgorCWNhc2UgQ3RybF9IOgorCSAgICBkaWRfYmFja3NwYWNlID0gaW5zX2JzKGMsIEJBQ0tTUEFDRV9DSEFSLCAmaW5zZXJ0ZWRfc3BhY2UpOworCSAgICBhdXRvX2Zvcm1hdChGQUxTRSwgVFJVRSk7CisJICAgIGJyZWFrOworCisJLyogZGVsZXRlIHdvcmQgYmVmb3JlIHRoZSBjdXJzb3IgKi8KKwljYXNlIEN0cmxfVzoKKwkgICAgZGlkX2JhY2tzcGFjZSA9IGluc19icyhjLCBCQUNLU1BBQ0VfV09SRCwgJmluc2VydGVkX3NwYWNlKTsKKwkgICAgYXV0b19mb3JtYXQoRkFMU0UsIFRSVUUpOworCSAgICBicmVhazsKKworCS8qIGRlbGV0ZSBhbGwgaW5zZXJ0ZWQgdGV4dCBpbiBjdXJyZW50IGxpbmUgKi8KKwljYXNlIEN0cmxfVToKKwkgICAgZGlkX2JhY2tzcGFjZSA9IGluc19icyhjLCBCQUNLU1BBQ0VfTElORSwgJmluc2VydGVkX3NwYWNlKTsKKwkgICAgYXV0b19mb3JtYXQoRkFMU0UsIFRSVUUpOworCSAgICBpbnNlcnRlZF9zcGFjZSA9IEZBTFNFOworCSAgICBicmVhazsKKworI2lmZGVmIEZFQVRfTU9VU0UKKwljYXNlIEtfTEVGVE1PVVNFOgorCWNhc2UgS19MRUZUTU9VU0VfTk06CisJY2FzZSBLX0xFRlREUkFHOgorCWNhc2UgS19MRUZUUkVMRUFTRToKKwljYXNlIEtfTEVGVFJFTEVBU0VfTk06CisJY2FzZSBLX01JRERMRU1PVVNFOgorCWNhc2UgS19NSURETEVEUkFHOgorCWNhc2UgS19NSURETEVSRUxFQVNFOgorCWNhc2UgS19SSUdIVE1PVVNFOgorCWNhc2UgS19SSUdIVERSQUc6CisJY2FzZSBLX1JJR0hUUkVMRUFTRToKKwljYXNlIEtfWDFNT1VTRToKKwljYXNlIEtfWDFEUkFHOgorCWNhc2UgS19YMVJFTEVBU0U6CisJY2FzZSBLX1gyTU9VU0U6CisJY2FzZSBLX1gyRFJBRzoKKwljYXNlIEtfWDJSRUxFQVNFOgorCSAgICBpbnNfbW91c2UoYyk7CisJICAgIGJyZWFrOworCisJLyogRGVmYXVsdCBhY3Rpb24gZm9yIHNjcm9sbCB3aGVlbCB1cDogc2Nyb2xsIHVwICovCisJY2FzZSBLX01PVVNFRE9XTjoKKwkgICAgaW5zX21vdXNlc2Nyb2xsKEZBTFNFKTsKKwkgICAgYnJlYWs7CisKKwkvKiBEZWZhdWx0IGFjdGlvbiBmb3Igc2Nyb2xsIHdoZWVsIGRvd246IHNjcm9sbCBkb3duICovCisJY2FzZSBLX01PVVNFVVA6CisJICAgIGluc19tb3VzZXNjcm9sbChUUlVFKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgS19JR05PUkU6CisJICAgIGJyZWFrOworCisjaWZkZWYgRkVBVF9HVUkKKwljYXNlIEtfVkVSX1NDUk9MTEJBUjoKKwkgICAgaW5zX3Njcm9sbCgpOworCSAgICBicmVhazsKKworCWNhc2UgS19IT1JfU0NST0xMQkFSOgorCSAgICBpbnNfaG9yc2Nyb2xsKCk7CisJICAgIGJyZWFrOworI2VuZGlmCisKKwljYXNlIEtfSE9NRToKKwljYXNlIEtfS0hPTUU6CisJY2FzZSBLX1hIT01FOgorCWNhc2UgS19TX0hPTUU6CisJY2FzZSBLX0NfSE9NRToKKwkgICAgaW5zX2hvbWUoYyk7CisJICAgIGJyZWFrOworCisJY2FzZSBLX0VORDoKKwljYXNlIEtfS0VORDoKKwljYXNlIEtfWEVORDoKKwljYXNlIEtfU19FTkQ6CisJY2FzZSBLX0NfRU5EOgorCSAgICBpbnNfZW5kKGMpOworCSAgICBicmVhazsKKworCWNhc2UgS19MRUZUOgorCSAgICBpbnNfbGVmdCgpOworCSAgICBicmVhazsKKworCWNhc2UgS19TX0xFRlQ6CisJY2FzZSBLX0NfTEVGVDoKKwkgICAgaW5zX3NfbGVmdCgpOworCSAgICBicmVhazsKKworCWNhc2UgS19SSUdIVDoKKwkgICAgaW5zX3JpZ2h0KCk7CisJICAgIGJyZWFrOworCisJY2FzZSBLX1NfUklHSFQ6CisJY2FzZSBLX0NfUklHSFQ6CisJICAgIGluc19zX3JpZ2h0KCk7CisJICAgIGJyZWFrOworCisJY2FzZSBLX1VQOgorCSAgICBpbnNfdXAoRkFMU0UpOworCSAgICBicmVhazsKKworCWNhc2UgS19TX1VQOgorCWNhc2UgS19QQUdFVVA6CisJY2FzZSBLX0tQQUdFVVA6CisJICAgIGluc19wYWdldXAoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEtfRE9XTjoKKwkgICAgaW5zX2Rvd24oRkFMU0UpOworCSAgICBicmVhazsKKworCWNhc2UgS19TX0RPV046CisJY2FzZSBLX1BBR0VET1dOOgorCWNhc2UgS19LUEFHRURPV046CisJICAgIGluc19wYWdlZG93bigpOworCSAgICBicmVhazsKKworI2lmZGVmIEZFQVRfRE5ECisJY2FzZSBLX0RST1A6CisJICAgIGluc19kcm9wKCk7CisJICAgIGJyZWFrOworI2VuZGlmCisKKwkvKiBXaGVuIDxTLVRhYj4gaXNuJ3QgbWFwcGVkLCB1c2UgaXQgbGlrZSBhIG5vcm1hbCBUQUIgKi8KKwljYXNlIEtfU19UQUI6CisJICAgIGMgPSBUQUI7CisJICAgIC8qIEZBTExUSFJPVUdIICovCisKKwkvKiBUQUIgb3IgQ29tcGxldGUgcGF0dGVybnMgYWxvbmcgcGF0aCAqLworCWNhc2UgVEFCOgorI2lmIGRlZmluZWQoRkVBVF9JTlNfRVhQQU5EKSAmJiBkZWZpbmVkKEZFQVRfRklORF9JRCkKKwkgICAgaWYgKGN0cmxfeF9tb2RlID09IENUUkxfWF9QQVRIX1BBVFRFUk5TKQorCQlnb3RvIGRvY29tcGxldGU7CisjZW5kaWYKKwkgICAgaW5zZXJ0ZWRfc3BhY2UgPSBGQUxTRTsKKwkgICAgaWYgKGluc190YWIoKSkKKwkJZ290byBub3JtYWxjaGFyOwkvKiBpbnNlcnQgVEFCIGFzIGEgbm9ybWFsIGNoYXIgKi8KKwkgICAgYXV0b19mb3JtYXQoRkFMU0UsIFRSVUUpOworCSAgICBicmVhazsKKworCWNhc2UgS19LRU5URVI6CisJICAgIGMgPSBDQVI7CisJICAgIC8qIEZBTExUSFJPVUdIICovCisJY2FzZSBDQVI6CisJY2FzZSBOTDoKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCSAgICAvKiBJbiBhIHF1aWNrZml4IHdpbmRvdyBhIDxDUj4ganVtcHMgdG8gdGhlIGVycm9yIHVuZGVyIHRoZQorCSAgICAgKiBjdXJzb3IuICovCisJICAgIGlmIChidF9xdWlja2ZpeChjdXJidWYpICYmIGMgPT0gQ0FSKQorCSAgICB7CisJCWRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikiLmNjIik7CisJCWJyZWFrOworCSAgICB9CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NNRFdJTgorCSAgICBpZiAoY21kd2luX3R5cGUgIT0gMCkKKwkgICAgeworCQkvKiBFeGVjdXRlIHRoZSBjb21tYW5kIGluIHRoZSBjbWRsaW5lIHdpbmRvdy4gKi8KKwkJY21kd2luX3Jlc3VsdCA9IENBUjsKKwkJZ290byBkb0VTQ2tleTsKKwkgICAgfQorI2VuZGlmCisJICAgIGlmIChpbnNfZW9sKGMpICYmICFwX2ltKQorCQlnb3RvIGRvRVNDa2V5OwkgICAgLyogb3V0IG9mIG1lbW9yeSAqLworCSAgICBhdXRvX2Zvcm1hdChGQUxTRSwgRkFMU0UpOworCSAgICBpbnNlcnRlZF9zcGFjZSA9IEZBTFNFOworCSAgICBicmVhazsKKworI2lmIGRlZmluZWQoRkVBVF9ESUdSQVBIUykgfHwgZGVmaW5lZCAoRkVBVF9JTlNfRVhQQU5EKQorCWNhc2UgQ3RybF9LOgorIyBpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkgICAgaWYgKGN0cmxfeF9tb2RlID09IENUUkxfWF9ESUNUSU9OQVJZKQorCSAgICB7CisJCWlmICgqY3VyYnVmLT5iX3BfZGljdCA9PSBOVUwgJiYgKnBfZGljdCA9PSBOVUwpCisJCXsKKwkJICAgIGN0cmxfeF9tb2RlID0gMDsKKwkJICAgIG1zZ19hdHRyKChjaGFyX3UgKilfKCInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IiksCisJCQkgICAgIGhsX2F0dHIoSExGX0UpKTsKKwkJICAgIGlmIChlbXNnX3NpbGVudCA9PSAwKQorCQkgICAgeworCQkJdmltX2JlZXAoKTsKKwkJCXNldGN1cnNvcigpOworCQkJb3V0X2ZsdXNoKCk7CisJCQl1aV9kZWxheSgyMDAwTCwgRkFMU0UpOworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCX0KKwkJZ290byBkb2NvbXBsZXRlOworCSAgICB9CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfRElHUkFQSFMKKwkgICAgYyA9IGluc19kaWdyYXBoKCk7CisJICAgIGlmIChjID09IE5VTCkKKwkJYnJlYWs7CisjIGVuZGlmCisJICAgIGdvdG8gbm9ybWFsY2hhcjsKKyNlbmRpZiAvKiBGRUFUX0RJR1JBUEhTIHx8IEZFQVRfSU5TX0VYUEFORCAqLworCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJY2FzZSBDdHJsX1JTQjoJCS8qIFRhZyBuYW1lIGNvbXBsZXRpb24gYWZ0ZXIgXlggKi8KKwkgICAgaWYgKGN0cmxfeF9tb2RlICE9IENUUkxfWF9UQUdTKQorCQlnb3RvIG5vcm1hbGNoYXI7CisJICAgIGdvdG8gZG9jb21wbGV0ZTsKKworCWNhc2UgQ3RybF9GOgkJLyogRmlsZSBuYW1lIGNvbXBsZXRpb24gYWZ0ZXIgXlggKi8KKwkgICAgaWYgKGN0cmxfeF9tb2RlICE9IENUUkxfWF9GSUxFUykKKwkJZ290byBub3JtYWxjaGFyOworCSAgICBnb3RvIGRvY29tcGxldGU7CisjZW5kaWYKKworCWNhc2UgQ3RybF9MOgkJLyogV2hvbGUgbGluZSBjb21wbGV0aW9uIGFmdGVyIF5YICovCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJICAgIGlmIChjdHJsX3hfbW9kZSAhPSBDVFJMX1hfV0hPTEVfTElORSkKKyNlbmRpZgorCSAgICB7CisJCS8qIENUUkwtTCB3aXRoICdpbnNlcnRtb2RlJyBzZXQ6IExlYXZlIEluc2VydCBtb2RlICovCisJCWlmIChwX2ltKQorCQl7CisJCSAgICBpZiAoZWNoZWNrX2FiYnIoQ3RybF9MICsgQUJCUl9PRkYpKQorCQkJYnJlYWs7CisJCSAgICBnb3RvIGRvRVNDa2V5OworCQl9CisJCWdvdG8gbm9ybWFsY2hhcjsKKwkgICAgfQorI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCSAgICAvKiBGQUxMVEhST1VHSCAqLworCisJLyogRG8gcHJldmlvdXMvbmV4dCBwYXR0ZXJuIGNvbXBsZXRpb24gKi8KKwljYXNlIEN0cmxfUDoKKwljYXNlIEN0cmxfTjoKKwkgICAgLyogaWYgJ2NvbXBsZXRlJyBpcyBlbXB0eSB0aGVuIHBsYWluIF5QIGlzIG5vIGxvbmdlciBzcGVjaWFsLAorCSAgICAgKiBidXQgaXQgaXMgdW5kZXIgb3RoZXIgXlggbW9kZXMgKi8KKwkgICAgaWYgKCpjdXJidWYtPmJfcF9jcHQgPT0gTlVMCisJCSAgICAmJiBjdHJsX3hfbW9kZSAhPSAwCisJCSAgICAmJiAhKGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfTE9DQUwpKQorCQlnb3RvIG5vcm1hbGNoYXI7CisKK2RvY29tcGxldGU6CisJICAgIGlmIChpbnNfY29tcGxldGUoYykgPT0gRkFJTCkKKwkJY29udGludWVfc3RhdHVzID0gMDsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogRkVBVF9JTlNfRVhQQU5EICovCisKKwljYXNlIEN0cmxfWToJCS8qIGNvcHkgZnJvbSBwcmV2aW91cyBsaW5lIG9yIHNjcm9sbCBkb3duICovCisJY2FzZSBDdHJsX0U6CQkvKiBjb3B5IGZyb20gbmV4dCBsaW5lCSAgIG9yIHNjcm9sbCB1cCAqLworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCSAgICBpZiAoY3RybF94X21vZGUgPT0gQ1RSTF9YX1NDUk9MTCkKKwkgICAgeworCQlpZiAoYyA9PSBDdHJsX1kpCisJCSAgICBzY3JvbGxkb3duX2NsYW1wKCk7CisJCWVsc2UKKwkJICAgIHNjcm9sbHVwX2NsYW1wKCk7CisJCXJlZHJhd19sYXRlcihWQUxJRCk7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkJYyA9IGluc19jb3B5Y2hhcihjdXJ3aW4tPndfY3Vyc29yLmxudW0KKwkJCQkJCSArIChjID09IEN0cmxfWSA/IC0xIDogMSkpOworCQlpZiAoYyAhPSBOVUwpCisJCXsKKwkJICAgIGxvbmcJdHdfc2F2ZTsKKworCQkgICAgLyogVGhlIGNoYXJhY3RlciBtdXN0IGJlIHRha2VuIGxpdGVyYWxseSwgaW5zZXJ0IGxpa2UgaXQKKwkJICAgICAqIHdhcyB0eXBlZCBhZnRlciBhIENUUkwtViwgYW5kIHByZXRlbmQgJ3RleHR3aWR0aCcKKwkJICAgICAqIHdhc24ndCBzZXQuICBEaWdpdHMsICdvJyBhbmQgJ3gnIGFyZSBzcGVjaWFsIGFmdGVyIGEKKwkJICAgICAqIENUUkwtViwgZG9uJ3QgdXNlIGl0IGZvciB0aGVzZS4gKi8KKwkJICAgIGlmIChjIDwgMjU2ICYmICFpc2FsbnVtKGMpKQorCQkJQXBwZW5kVG9SZWRvYnVmZigoY2hhcl91ICopQ1RSTF9WX1NUUik7CS8qIENUUkwtViAqLworCQkgICAgdHdfc2F2ZSA9IGN1cmJ1Zi0+Yl9wX3R3OworCQkgICAgY3VyYnVmLT5iX3BfdHcgPSAtMTsKKwkJICAgIGluc2VydF9zcGVjaWFsKGMsIFRSVUUsIEZBTFNFKTsKKwkJICAgIGN1cmJ1Zi0+Yl9wX3R3ID0gdHdfc2F2ZTsKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkgICAgcmV2aW5zX2NoYXJzKys7CisJCSAgICByZXZpbnNfbGVnYWwrKzsKKyNlbmRpZgorCQkgICAgYyA9IEN0cmxfVjsJLyogcHJldGVuZCBDVFJMLVYgaXMgbGFzdCBjaGFyYWN0ZXIgKi8KKwkJICAgIGF1dG9fZm9ybWF0KEZBTFNFLCBUUlVFKTsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCisJICBkZWZhdWx0OgorI2lmZGVmIFVOSVgKKwkgICAgaWYgKGMgPT0gaW50cl9jaGFyKQkJLyogc3BlY2lhbCBpbnRlcnJ1cHQgY2hhciAqLworCQlnb3RvIGRvX2ludHI7CisjZW5kaWYKKworCSAgICAvKgorCSAgICAgKiBJbnNlcnQgYSBub21hbCBjaGFyYWN0ZXIuCisJICAgICAqLworbm9ybWFsY2hhcjoKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisJICAgIC8qIFRyeSB0byBwZXJmb3JtIHNtYXJ0LWluZGVudGluZy4gKi8KKwkgICAgaW5zX3RyeV9zaShjKTsKKyNlbmRpZgorCisJICAgIGlmIChjID09ICcgJykKKwkgICAgeworCQlpbnNlcnRlZF9zcGFjZSA9IFRSVUU7CisjaWZkZWYgRkVBVF9DSU5ERU5UCisJCWlmIChpbmluZGVudCgwKSkKKwkJICAgIGNhbl9jaW5kZW50ID0gRkFMU0U7CisjZW5kaWYKKwkJaWYgKEluc3N0YXJ0X2JsYW5rX3Zjb2wgPT0gTUFYQ09MCisJCQkmJiBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gSW5zc3RhcnQubG51bSkKKwkJICAgIEluc3N0YXJ0X2JsYW5rX3Zjb2wgPSBnZXRfbm9saXN0X3ZpcnRjb2woKTsKKwkgICAgfQorCisJICAgIGlmICh2aW1faXN3b3JkYyhjKSB8fCAhZWNoZWNrX2FiYnIoCisjaWZkZWYgRkVBVF9NQllURQorCQkJLyogQWRkIEFCQlJfT0ZGIGZvciBjaGFyYWN0ZXJzIGFib3ZlIDB4MTAwLCB0aGlzIGlzCisJCQkgKiB3aGF0IGNoZWNrX2FiYnIoKSBleHBlY3RzLiAqLworCQkJKGhhc19tYnl0ZSAmJiBjID49IDB4MTAwKSA/IChjICsgQUJCUl9PRkYpIDoKKyNlbmRpZgorCQkJYykpCisJICAgIHsKKwkJaW5zZXJ0X3NwZWNpYWwoYywgRkFMU0UsIEZBTFNFKTsKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQlyZXZpbnNfbGVnYWwrKzsKKwkJcmV2aW5zX2NoYXJzKys7CisjZW5kaWYKKwkgICAgfQorCisJICAgIGF1dG9fZm9ybWF0KEZBTFNFLCBUUlVFKTsKKworI2lmZGVmIEZFQVRfRk9MRElORworCSAgICAvKiBXaGVuIGluc2VydGluZyBhIGNoYXJhY3RlciB0aGUgY3Vyc29yIGxpbmUgbXVzdCBuZXZlciBiZSBpbiBhCisJICAgICAqIGNsb3NlZCBmb2xkLiAqLworCSAgICBmb2xkT3BlbkN1cnNvcigpOworI2VuZGlmCisJICAgIGJyZWFrOworCX0gICAvKiBlbmQgb2Ygc3dpdGNoIChjKSAqLworCisJLyogSWYgdGhlIGN1cnNvciB3YXMgbW92ZWQgd2UgZGlkbid0IGp1c3QgaW5zZXJ0IGEgc3BhY2UgKi8KKwlpZiAoYXJyb3dfdXNlZCkKKwkgICAgaW5zZXJ0ZWRfc3BhY2UgPSBGQUxTRTsKKworI2lmZGVmIEZFQVRfQ0lOREVOVAorCWlmIChjYW5fY2luZGVudCAmJiBjaW5kZW50X29uKCkKKyMgaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJCSYmIGN0cmxfeF9tb2RlID09IDAKKyMgZW5kaWYKKwkgICApCisJeworZm9yY2VfY2luZGVudDoKKwkgICAgLyoKKwkgICAgICogSW5kZW50IG5vdyBpZiBhIGtleSB3YXMgdHlwZWQgdGhhdCBpcyBpbiAnY2lua2V5cycuCisJICAgICAqLworCSAgICBpZiAoaW5fY2lua2V5cyhjLCAnICcsIGxpbmVfaXNfd2hpdGUpKQorCSAgICB7CisJCWlmIChzdG9wX2Fycm93KCkgPT0gT0spCisJCSAgICAvKiByZS1pbmRlbnQgdGhlIGN1cnJlbnQgbGluZSAqLworCQkgICAgZG9fY19leHByX2luZGVudCgpOworCSAgICB9CisJfQorI2VuZGlmIC8qIEZFQVRfQ0lOREVOVCAqLworCisgICAgfQkvKiBmb3IgKDs7KSAqLworICAgIC8qIE5PVFJFQUNIRUQgKi8KK30KKworLyoKKyAqIFJlZHJhdyBmb3IgSW5zZXJ0IG1vZGUuCisgKiBUaGlzIGlzIHBvc3Rwb25lZCB1bnRpbCBnZXR0aW5nIHRoZSBuZXh0IGNoYXJhY3RlciB0byBtYWtlICckJyBpbiB0aGUgJ2NwbycKKyAqIG9wdGlvbiB3b3JrIGNvcnJlY3RseS4KKyAqIE9ubHkgcmVkcmF3IHdoZW4gdGhlcmUgYXJlIG5vIGNoYXJhY3RlcnMgYXZhaWxhYmxlLiAgVGhpcyBzcGVlZHMgdXAKKyAqIGluc2VydGluZyBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyAoZS5nLiwgZm9yIENUUkwtUikuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5zX3JlZHJhdygpCit7CisgICAgaWYgKCFjaGFyX2F2YWlsKCkpCisgICAgeworCWlmIChtdXN0X3JlZHJhdykKKwkgICAgdXBkYXRlX3NjcmVlbigwKTsKKwllbHNlIGlmIChjbGVhcl9jbWRsaW5lIHx8IHJlZHJhd19jbWRsaW5lKQorCSAgICBzaG93bW9kZSgpOwkJLyogY2xlYXIgY21kbGluZSBhbmQgc2hvdyBtb2RlICovCisJc2hvd3J1bGVyKEZBTFNFKTsKKwlzZXRjdXJzb3IoKTsKKwllbXNnX29uX2Rpc3BsYXkgPSBGQUxTRTsJLyogbWF5IHJlbW92ZSBlcnJvciBtZXNzYWdlIG5vdyAqLworICAgIH0KK30KKworLyoKKyAqIEhhbmRsZSBhIENUUkwtViBvciBDVFJMLVEgdHlwZWQgaW4gSW5zZXJ0IG1vZGUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5zX2N0cmxfdigpCit7CisgICAgaW50CQljOworCisgICAgLyogbWF5IG5lZWQgdG8gcmVkcmF3IHdoZW4gbm8gbW9yZSBjaGFycyBhdmFpbGFibGUgbm93ICovCisgICAgaW5zX3JlZHJhdygpOworCisgICAgaWYgKHJlZHJhd2luZygpICYmICFjaGFyX2F2YWlsKCkpCisJZWRpdF9wdXRjaGFyKCdeJywgVFJVRSk7CisgICAgQXBwZW5kVG9SZWRvYnVmZigoY2hhcl91ICopQ1RSTF9WX1NUUik7CS8qIENUUkwtViAqLworCisjaWZkZWYgRkVBVF9DTURMX0lORk8KKyAgICBhZGRfdG9fc2hvd2NtZF9jKEN0cmxfVik7CisjZW5kaWYKKworICAgIGMgPSBnZXRfbGl0ZXJhbCgpOworI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisgICAgY2xlYXJfc2hvd2NtZCgpOworI2VuZGlmCisgICAgaW5zZXJ0X3NwZWNpYWwoYywgRkFMU0UsIFRSVUUpOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgcmV2aW5zX2NoYXJzKys7CisgICAgcmV2aW5zX2xlZ2FsKys7CisjZW5kaWYKK30KKworLyoKKyAqIFB1dCBhIGNoYXJhY3RlciBkaXJlY3RseSBvbnRvIHRoZSBzY3JlZW4uICBJdCdzIG5vdCBzdG9yZWQgaW4gYSBidWZmZXIuCisgKiBVc2VkIHdoaWxlIGhhbmRsaW5nIENUUkwtSywgQ1RSTC1WLCBldGMuIGluIEluc2VydCBtb2RlLgorICovCitzdGF0aWMgaW50ICBwY19zdGF0dXM7CisjZGVmaW5lIFBDX1NUQVRVU19VTlNFVAkwCS8qIHBjX2J5dGVzIHdhcyBub3Qgc2V0ICovCisjZGVmaW5lIFBDX1NUQVRVU19SSUdIVAkxCS8qIHJpZ2h0IGhhbHZlIG9mIGRvdWJsZS13aWRlIGNoYXIgKi8KKyNkZWZpbmUgUENfU1RBVFVTX0xFRlQJMgkvKiBsZWZ0IGhhbHZlIG9mIGRvdWJsZS13aWRlIGNoYXIgKi8KKyNkZWZpbmUgUENfU1RBVFVTX1NFVAkzCS8qIHBjX2J5dGVzIHdhcyBmaWxsZWQgKi8KKyNpZmRlZiBGRUFUX01CWVRFCitzdGF0aWMgY2hhcl91IHBjX2J5dGVzW01CX01BWEJZVEVTICsgMV07IC8qIHNhdmVkIGJ5dGVzICovCisjZWxzZQorc3RhdGljIGNoYXJfdSBwY19ieXRlc1syXTsJCS8qIHNhdmVkIGJ5dGVzICovCisjZW5kaWYKK3N0YXRpYyBpbnQgIHBjX2F0dHI7CitzdGF0aWMgaW50ICBwY19yb3c7CitzdGF0aWMgaW50ICBwY19jb2w7CisKKyAgICB2b2lkCitlZGl0X3B1dGNoYXIoYywgaGlnaGxpZ2h0KQorICAgIGludAkgICAgYzsKKyAgICBpbnQJICAgIGhpZ2hsaWdodDsKK3sKKyAgICBpbnQJICAgIGF0dHI7CisKKyAgICBpZiAoU2NyZWVuTGluZXMgIT0gTlVMTCkKKyAgICB7CisJdXBkYXRlX3RvcGxpbmUoKTsJLyoganVzdCBpbiBjYXNlIHdfdG9wbGluZSBpc24ndCB2YWxpZCAqLworCXZhbGlkYXRlX2N1cnNvcigpOworCWlmIChoaWdobGlnaHQpCisJICAgIGF0dHIgPSBobF9hdHRyKEhMRl84KTsKKwllbHNlCisJICAgIGF0dHIgPSAwOworCXBjX3JvdyA9IFdfV0lOUk9XKGN1cndpbikgKyBjdXJ3aW4tPndfd3JvdzsKKwlwY19jb2wgPSBXX1dJTkNPTChjdXJ3aW4pOworI2lmIGRlZmluZWQoRkVBVF9SSUdIVExFRlQpIHx8IGRlZmluZWQoRkVBVF9NQllURSkKKwlwY19zdGF0dXMgPSBQQ19TVEFUVVNfVU5TRVQ7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCWlmIChjdXJ3aW4tPndfcF9ybCkKKwl7CisJICAgIHBjX2NvbCArPSBXX1dJRFRIKGN1cndpbikgLSAxIC0gY3Vyd2luLT53X3djb2w7CisjIGlmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkgICAgeworCQlpbnQgZml4X2NvbCA9IG1iX2ZpeF9jb2wocGNfY29sLCBwY19yb3cpOworCisJCWlmIChmaXhfY29sICE9IHBjX2NvbCkKKwkJeworCQkgICAgc2NyZWVuX3B1dGNoYXIoJyAnLCBwY19yb3csIGZpeF9jb2wsIGF0dHIpOworCQkgICAgLS1jdXJ3aW4tPndfd2NvbDsKKwkJICAgIHBjX3N0YXR1cyA9IFBDX1NUQVRVU19SSUdIVDsKKwkJfQorCSAgICB9CisjIGVuZGlmCisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgcGNfY29sICs9IGN1cndpbi0+d193Y29sOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKG1iX2xlZnRoYWx2ZShwY19yb3csIHBjX2NvbCkpCisJCXBjX3N0YXR1cyA9IFBDX1NUQVRVU19MRUZUOworI2VuZGlmCisJfQorCisJLyogc2F2ZSB0aGUgY2hhcmFjdGVyIHRvIGJlIGFibGUgdG8gcHV0IGl0IGJhY2sgKi8KKyNpZiBkZWZpbmVkKEZFQVRfUklHSFRMRUZUKSB8fCBkZWZpbmVkKEZFQVRfTUJZVEUpCisJaWYgKHBjX3N0YXR1cyA9PSBQQ19TVEFUVVNfVU5TRVQpCisjZW5kaWYKKwl7CisJICAgIHNjcmVlbl9nZXRieXRlcyhwY19yb3csIHBjX2NvbCwgcGNfYnl0ZXMsICZwY19hdHRyKTsKKwkgICAgcGNfc3RhdHVzID0gUENfU1RBVFVTX1NFVDsKKwl9CisJc2NyZWVuX3B1dGNoYXIoYywgcGNfcm93LCBwY19jb2wsIGF0dHIpOworICAgIH0KK30KKworLyoKKyAqIFVuZG8gdGhlIHByZXZpb3VzIGVkaXRfcHV0Y2hhcigpLgorICovCisgICAgdm9pZAorZWRpdF91bnB1dGNoYXIoKQoreworICAgIGlmIChwY19zdGF0dXMgIT0gUENfU1RBVFVTX1VOU0VUICYmIHBjX3JvdyA+PSBtc2dfc2Nyb2xsZWQpCisgICAgeworI2lmIGRlZmluZWQoRkVBVF9NQllURSkKKwlpZiAocGNfc3RhdHVzID09IFBDX1NUQVRVU19SSUdIVCkKKwkgICAgKytjdXJ3aW4tPndfd2NvbDsKKwlpZiAocGNfc3RhdHVzID09IFBDX1NUQVRVU19SSUdIVCB8fCBwY19zdGF0dXMgPT0gUENfU1RBVFVTX0xFRlQpCisJICAgIHJlZHJhd1dpbmxpbmUoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBGQUxTRSk7CisJZWxzZQorI2VuZGlmCisJICAgIHNjcmVlbl9wdXRzKHBjX2J5dGVzLCBwY19yb3cgLSBtc2dfc2Nyb2xsZWQsIHBjX2NvbCwgcGNfYXR0cik7CisgICAgfQorfQorCisvKgorICogQ2FsbGVkIHdoZW4gcF9kb2xsYXIgaXMgc2V0OiBkaXNwbGF5IGEgJyQnIGF0IHRoZSBlbmQgb2YgdGhlIGNoYW5nZWQgdGV4dAorICogT25seSB3b3JrcyB3aGVuIGN1cnNvciBpcyBpbiB0aGUgbGluZSB0aGF0IGNoYW5nZXMuCisgKi8KKyAgICB2b2lkCitkaXNwbGF5X2RvbGxhcihjb2wpCisgICAgY29sbnJfVAljb2w7Cit7CisgICAgY29sbnJfVCBzYXZlX2NvbDsKKworICAgIGlmICghcmVkcmF3aW5nKCkpCisJcmV0dXJuOworCisgICAgY3Vyc29yX29mZigpOworICAgIHNhdmVfY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSBjb2w7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChoYXNfbWJ5dGUpCisgICAgeworCWNoYXJfdSAqcDsKKworCS8qIElmIG9uIHRoZSBsYXN0IGJ5dGUgb2YgYSBtdWx0aS1ieXRlIG1vdmUgdG8gdGhlIGZpcnN0IGJ5dGUuICovCisJcCA9IG1sX2dldF9jdXJsaW5lKCk7CisJY3Vyd2luLT53X2N1cnNvci5jb2wgLT0gKCptYl9oZWFkX29mZikocCwgcCArIGNvbCk7CisgICAgfQorI2VuZGlmCisgICAgY3Vyc19jb2x1bW5zKEZBTFNFKTsJICAgIC8qIHJlY29tcHV0ZSB3X3dyb3cgYW5kIHdfd2NvbCAqLworICAgIGlmIChjdXJ3aW4tPndfd2NvbCA8IFdfV0lEVEgoY3Vyd2luKSkKKyAgICB7CisJZWRpdF9wdXRjaGFyKCckJywgRkFMU0UpOworCWRvbGxhcl92Y29sID0gY3Vyd2luLT53X3ZpcnRjb2w7CisgICAgfQorICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gc2F2ZV9jb2w7Cit9CisKKy8qCisgKiBDYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIG1vdmluZyB0aGUgY3Vyc29yIGZyb20gdGhlIG5vcm1hbCBpbnNlcnQgcG9zaXRpb24KKyAqIGluIGluc2VydCBtb2RlLgorICovCisgICAgc3RhdGljIHZvaWQKK3VuZGlzcGxheV9kb2xsYXIoKQoreworICAgIGlmIChkb2xsYXJfdmNvbCkKKyAgICB7CisJZG9sbGFyX3Zjb2wgPSAwOworCXJlZHJhd1dpbmxpbmUoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBGQUxTRSk7CisgICAgfQorfQorCisvKgorICogSW5zZXJ0IGFuIGluZGVudCAoZm9yIDxUYWI+IG9yIENUUkwtVCkgb3IgZGVsZXRlIGFuIGluZGVudCAoZm9yIENUUkwtRCkuCisgKiBLZWVwIHRoZSBjdXJzb3Igb24gdGhlIHNhbWUgY2hhcmFjdGVyLgorICogdHlwZSA9PSBJTkRFTlRfSU5DCWluY3JlYXNlIGluZGVudCAoZm9yIENUUkwtVCBvciA8VGFiPikKKyAqIHR5cGUgPT0gSU5ERU5UX0RFQwlkZWNyZWFzZSBpbmRlbnQgKGZvciBDVFJMLUQpCisgKiB0eXBlID09IElOREVOVF9TRVQJc2V0IGluZGVudCB0byAiYW1vdW50IgorICogaWYgcm91bmQgaXMgVFJVRSwgcm91bmQgdGhlIGluZGVudCB0byAnc2hpZnR3aWR0aCcgKG9ubHkgd2l0aCBfSU5DIGFuZCBfRGVjKS4KKyAqLworICAgIHZvaWQKK2NoYW5nZV9pbmRlbnQodHlwZSwgYW1vdW50LCByb3VuZCwgcmVwbGFjZWQpCisgICAgaW50CQl0eXBlOworICAgIGludAkJYW1vdW50OworICAgIGludAkJcm91bmQ7CisgICAgaW50CQlyZXBsYWNlZDsJLyogcmVwbGFjZWQgY2hhcmFjdGVyLCBwdXQgb24gcmVwbGFjZSBzdGFjayAqLworeworICAgIGludAkJdmNvbDsKKyAgICBpbnQJCWxhc3RfdmNvbDsKKyAgICBpbnQJCWluc3N0YXJ0X2xlc3M7CQkvKiByZWR1Y3Rpb24gZm9yIEluc3N0YXJ0LmNvbCAqLworICAgIGludAkJbmV3X2N1cnNvcl9jb2w7CisgICAgaW50CQlpOworICAgIGNoYXJfdQkqcHRyOworICAgIGludAkJc2F2ZV9wX2xpc3Q7CisgICAgaW50CQlzdGFydF9jb2w7CisgICAgY29sbnJfVAl2YzsKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisgICAgY29sbnJfVAlvcmlnX2NvbCA9IDA7CQkvKiBpbml0IGZvciBHQ0MgKi8KKyAgICBjaGFyX3UJKm5ld19saW5lLCAqb3JpZ19saW5lID0gTlVMTDsJLyogaW5pdCBmb3IgR0NDICovCisKKyAgICAvKiBWUkVQTEFDRSBtb2RlIG5lZWRzIHRvIGtub3cgd2hhdCB0aGUgbGluZSB3YXMgbGlrZSBiZWZvcmUgY2hhbmdpbmcgKi8KKyAgICBpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorICAgIHsKKwlvcmlnX2xpbmUgPSB2aW1fc3Ryc2F2ZShtbF9nZXRfY3VybGluZSgpKTsgIC8qIERlYWwgd2l0aCBOVUxMIGJlbG93ICovCisJb3JpZ19jb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIGZvciB0aGUgZm9sbG93aW5nIHRyaWNrcyB3ZSBkb24ndCB3YW50IGxpc3QgbW9kZSAqLworICAgIHNhdmVfcF9saXN0ID0gY3Vyd2luLT53X3BfbGlzdDsKKyAgICBjdXJ3aW4tPndfcF9saXN0ID0gRkFMU0U7CisgICAgdmMgPSBnZXR2Y29sX25vbGlzdCgmY3Vyd2luLT53X2N1cnNvcik7CisgICAgdmNvbCA9IHZjOworCisgICAgLyoKKyAgICAgKiBGb3IgUmVwbGFjZSBtb2RlIHdlIG5lZWQgdG8gZml4IHRoZSByZXBsYWNlIHN0YWNrIGxhdGVyLCB3aGljaCBpcyBvbmx5CisgICAgICogcG9zc2libGUgd2hlbiB0aGUgY3Vyc29yIGlzIGluIHRoZSBpbmRlbnQuICBSZW1lbWJlciB0aGUgbnVtYmVyIG9mCisgICAgICogY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnNvciBpZiBpdCdzIHBvc3NpYmxlLgorICAgICAqLworICAgIHN0YXJ0X2NvbCA9IGN1cndpbi0+d19jdXJzb3IuY29sOworCisgICAgLyogZGV0ZXJtaW5lIG9mZnNldCBmcm9tIGZpcnN0IG5vbi1ibGFuayAqLworICAgIG5ld19jdXJzb3JfY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisgICAgYmVnaW5saW5lKEJMX1dISVRFKTsKKyAgICBuZXdfY3Vyc29yX2NvbCAtPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKworICAgIGluc3N0YXJ0X2xlc3MgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKworICAgIC8qCisgICAgICogSWYgdGhlIGN1cnNvciBpcyBpbiB0aGUgaW5kZW50LCBjb21wdXRlIGhvdyBtYW55IHNjcmVlbiBjb2x1bW5zIHRoZQorICAgICAqIGN1cnNvciBpcyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWJsYW5rLgorICAgICAqLworICAgIGlmIChuZXdfY3Vyc29yX2NvbCA8IDApCisJdmNvbCA9IGdldF9pbmRlbnQoKSAtIHZjb2w7CisKKyAgICBpZiAobmV3X2N1cnNvcl9jb2wgPiAwKQkgICAgLyogY2FuJ3QgZml4IHJlcGxhY2Ugc3RhY2sgKi8KKwlzdGFydF9jb2wgPSAtMTsKKworICAgIC8qCisgICAgICogU2V0IHRoZSBuZXcgaW5kZW50LiAgVGhlIGN1cnNvciB3aWxsIGJlIHB1dCBvbiB0aGUgZmlyc3Qgbm9uLWJsYW5rLgorICAgICAqLworICAgIGlmICh0eXBlID09IElOREVOVF9TRVQpCisJKHZvaWQpc2V0X2luZGVudChhbW91bnQsIFNJTl9DSEFOR0VEKTsKKyAgICBlbHNlCisgICAgeworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwlpbnQJc2F2ZV9TdGF0ZSA9IFN0YXRlOworCisJLyogQXZvaWQgYmVpbmcgY2FsbGVkIHJlY3Vyc2l2ZWx5LiAqLworCWlmIChTdGF0ZSAmIFZSRVBMQUNFX0ZMQUcpCisJICAgIFN0YXRlID0gSU5TRVJUOworI2VuZGlmCisJc2hpZnRfbGluZSh0eXBlID09IElOREVOVF9ERUMsIHJvdW5kLCAxKTsKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisJU3RhdGUgPSBzYXZlX1N0YXRlOworI2VuZGlmCisgICAgfQorICAgIGluc3N0YXJ0X2xlc3MgLT0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisKKyAgICAvKgorICAgICAqIFRyeSB0byBwdXQgY3Vyc29yIG9uIHNhbWUgY2hhcmFjdGVyLgorICAgICAqIElmIHRoZSBjdXJzb3IgaXMgYXQgb3IgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1ibGFuayBpbiB0aGUgbGluZSwKKyAgICAgKiBjb21wdXRlIHRoZSBjdXJzb3IgY29sdW1uIHJlbGF0aXZlIHRvIHRoZSBjb2x1bW4gb2YgdGhlIGZpcnN0CisgICAgICogbm9uLWJsYW5rIGNoYXJhY3Rlci4KKyAgICAgKiBJZiB3ZSBhcmUgbm90IGluIGluc2VydCBtb2RlLCBsZWF2ZSB0aGUgY3Vyc29yIG9uIHRoZSBmaXJzdCBub24tYmxhbmsuCisgICAgICogSWYgdGhlIGN1cnNvciBpcyBiZWZvcmUgdGhlIGZpcnN0IG5vbi1ibGFuaywgcG9zaXRpb24gaXQgcmVsYXRpdmUKKyAgICAgKiB0byB0aGUgZmlyc3Qgbm9uLWJsYW5rLCBjb3VudGVkIGluIHNjcmVlbiBjb2x1bW5zLgorICAgICAqLworICAgIGlmIChuZXdfY3Vyc29yX2NvbCA+PSAwKQorICAgIHsKKwkvKgorCSAqIFdoZW4gY2hhbmdpbmcgdGhlIGluZGVudCB3aGlsZSB0aGUgY3Vyc29yIGlzIHRvdWNoaW5nIGl0LCByZXNldAorCSAqIEluc3N0YXJ0X2NvbCB0byAwLgorCSAqLworCWlmIChuZXdfY3Vyc29yX2NvbCA9PSAwKQorCSAgICBpbnNzdGFydF9sZXNzID0gTUFYQ09MOworCW5ld19jdXJzb3JfY29sICs9IGN1cndpbi0+d19jdXJzb3IuY29sOworICAgIH0KKyAgICBlbHNlIGlmICghKFN0YXRlICYgSU5TRVJUKSkKKwluZXdfY3Vyc29yX2NvbCA9IGN1cndpbi0+d19jdXJzb3IuY29sOworICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBDb21wdXRlIHRoZSBzY3JlZW4gY29sdW1uIHdoZXJlIHRoZSBjdXJzb3Igc2hvdWxkIGJlLgorCSAqLworCXZjb2wgPSBnZXRfaW5kZW50KCkgLSB2Y29sOworCWN1cndpbi0+d192aXJ0Y29sID0gKHZjb2wgPCAwKSA/IDAgOiB2Y29sOworCisJLyoKKwkgKiBBZHZhbmNlIHRoZSBjdXJzb3IgdW50aWwgd2UgcmVhY2ggdGhlIHJpZ2h0IHNjcmVlbiBjb2x1bW4uCisJICovCisJdmNvbCA9IGxhc3RfdmNvbCA9IDA7CisJbmV3X2N1cnNvcl9jb2wgPSAtMTsKKwlwdHIgPSBtbF9nZXRfY3VybGluZSgpOworCXdoaWxlICh2Y29sIDw9IChpbnQpY3Vyd2luLT53X3ZpcnRjb2wpCisJeworCSAgICBsYXN0X3Zjb2wgPSB2Y29sOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSAmJiBuZXdfY3Vyc29yX2NvbCA+PSAwKQorCQluZXdfY3Vyc29yX2NvbCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHB0ciArIG5ld19jdXJzb3JfY29sKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCSsrbmV3X2N1cnNvcl9jb2w7CisJICAgIHZjb2wgKz0gbGJyX2NoYXJ0YWJzaXplKHB0ciArIG5ld19jdXJzb3JfY29sLCAoY29sbnJfVCl2Y29sKTsKKwl9CisJdmNvbCA9IGxhc3RfdmNvbDsKKworCS8qCisJICogTWF5IG5lZWQgdG8gaW5zZXJ0IHNwYWNlcyB0byBiZSBhYmxlIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3Igb24KKwkgKiB0aGUgcmlnaHQgc2NyZWVuIGNvbHVtbi4KKwkgKi8KKwlpZiAodmNvbCAhPSAoaW50KWN1cndpbi0+d192aXJ0Y29sKQorCXsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSBuZXdfY3Vyc29yX2NvbDsKKwkgICAgaSA9IChpbnQpY3Vyd2luLT53X3ZpcnRjb2wgLSB2Y29sOworCSAgICBwdHIgPSBhbGxvYyhpICsgMSk7CisJICAgIGlmIChwdHIgIT0gTlVMTCkKKwkgICAgeworCQluZXdfY3Vyc29yX2NvbCArPSBpOworCQlwdHJbaV0gPSBOVUw7CisJCXdoaWxlICgtLWkgPj0gMCkKKwkJICAgIHB0cltpXSA9ICcgJzsKKwkJaW5zX3N0cihwdHIpOworCQl2aW1fZnJlZShwdHIpOworCSAgICB9CisJfQorCisJLyoKKwkgKiBXaGVuIGNoYW5naW5nIHRoZSBpbmRlbnQgd2hpbGUgdGhlIGN1cnNvciBpcyBpbiBpdCwgcmVzZXQKKwkgKiBJbnNzdGFydF9jb2wgdG8gMC4KKwkgKi8KKwlpbnNzdGFydF9sZXNzID0gTUFYQ09MOworICAgIH0KKworICAgIGN1cndpbi0+d19wX2xpc3QgPSBzYXZlX3BfbGlzdDsKKworICAgIGlmIChuZXdfY3Vyc29yX2NvbCA8PSAwKQorCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKyAgICBlbHNlCisJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBuZXdfY3Vyc29yX2NvbDsKKyAgICBjdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKyAgICBjaGFuZ2VkX2NsaW5lX2JlZl9jdXJzKCk7CisKKyAgICAvKgorICAgICAqIE1heSBoYXZlIHRvIGFkanVzdCB0aGUgc3RhcnQgb2YgdGhlIGluc2VydC4KKyAgICAgKi8KKyAgICBpZiAoU3RhdGUgJiBJTlNFUlQpCisgICAgeworCWlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gSW5zc3RhcnQubG51bSAmJiBJbnNzdGFydC5jb2wgIT0gMCkKKwl7CisJICAgIGlmICgoaW50KUluc3N0YXJ0LmNvbCA8PSBpbnNzdGFydF9sZXNzKQorCQlJbnNzdGFydC5jb2wgPSAwOworCSAgICBlbHNlCisJCUluc3N0YXJ0LmNvbCAtPSBpbnNzdGFydF9sZXNzOworCX0KKwlpZiAoKGludClhaV9jb2wgPD0gaW5zc3RhcnRfbGVzcykKKwkgICAgYWlfY29sID0gMDsKKwllbHNlCisJICAgIGFpX2NvbCAtPSBpbnNzdGFydF9sZXNzOworICAgIH0KKworICAgIC8qCisgICAgICogRm9yIFJFUExBQ0UgbW9kZSwgbWF5IGhhdmUgdG8gZml4IHRoZSByZXBsYWNlIHN0YWNrLCBpZiBpdCdzIHBvc3NpYmxlLgorICAgICAqIElmIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnNvciBkZWNyZWFzZWQsIG5lZWQgdG8gcG9wIGEKKyAgICAgKiBmZXcgY2hhcmFjdGVycyBmcm9tIHRoZSByZXBsYWNlIHN0YWNrLgorICAgICAqIElmIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnNvciBpbmNyZWFzZWQsIG5lZWQgdG8gcHVzaCBhCisgICAgICogZmV3IE5VTHMgb250byB0aGUgcmVwbGFjZSBzdGFjay4KKyAgICAgKi8KKyAgICBpZiAoUkVQTEFDRV9OT1JNQUwoU3RhdGUpICYmIHN0YXJ0X2NvbCA+PSAwKQorICAgIHsKKwl3aGlsZSAoc3RhcnRfY29sID4gKGludCljdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwl7CisJICAgIHJlcGxhY2Vfam9pbigwKTsJICAgIC8qIHJlbW92ZSBhIE5VTCBmcm9tIHRoZSByZXBsYWNlIHN0YWNrICovCisJICAgIC0tc3RhcnRfY29sOworCX0KKwl3aGlsZSAoc3RhcnRfY29sIDwgKGludCljdXJ3aW4tPndfY3Vyc29yLmNvbCB8fCByZXBsYWNlZCkKKwl7CisJICAgIHJlcGxhY2VfcHVzaChOVUwpOworCSAgICBpZiAocmVwbGFjZWQpCisJICAgIHsKKwkJcmVwbGFjZV9wdXNoKHJlcGxhY2VkKTsKKwkJcmVwbGFjZWQgPSBOVUw7CisJICAgIH0KKwkgICAgKytzdGFydF9jb2w7CisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKyAgICAvKgorICAgICAqIEZvciBWUkVQTEFDRSBtb2RlLCB3ZSBhbHNvIGhhdmUgdG8gZml4IHRoZSByZXBsYWNlIHN0YWNrLiAgSW4gdGhpcyBjYXNlCisgICAgICogaXQgaXMgYWx3YXlzIHBvc3NpYmxlIGJlY2F1c2Ugd2UgYmFja3NwYWNlIG92ZXIgdGhlIHdob2xlIGxpbmUgYW5kIHRoZW4KKyAgICAgKiBwdXQgaXQgYmFjayBhZ2FpbiB0aGUgd2F5IHdlIHdhbnRlZCBpdC4KKyAgICAgKi8KKyAgICBpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorICAgIHsKKwkvKiBJZiBvcmlnX2xpbmUgZGlkbid0IGFsbG9jYXRlLCBqdXN0IHJldHVybi4gIEF0IGxlYXN0IHdlIGRpZCB0aGUgam9iLAorCSAqIGV2ZW4gaWYgeW91IGNhbid0IGJhY2tzcGFjZS4gKi8KKwlpZiAob3JpZ19saW5lID09IE5VTEwpCisJICAgIHJldHVybjsKKworCS8qIFNhdmUgbmV3IGxpbmUgKi8KKwluZXdfbGluZSA9IHZpbV9zdHJzYXZlKG1sX2dldF9jdXJsaW5lKCkpOworCWlmIChuZXdfbGluZSA9PSBOVUxMKQorCSAgICByZXR1cm47CisKKwkvKiBXZSBvbmx5IHB1dCBiYWNrIHRoZSBuZXcgbGluZSB1cCB0byB0aGUgY3Vyc29yICovCisJbmV3X2xpbmVbY3Vyd2luLT53X2N1cnNvci5jb2xdID0gTlVMOworCisJLyogUHV0IGJhY2sgb3JpZ2luYWwgbGluZSAqLworCW1sX3JlcGxhY2UoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBvcmlnX2xpbmUsIEZBTFNFKTsKKwljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IG9yaWdfY29sOworCisJLyogQmFja3NwYWNlIGZyb20gY3Vyc29yIHRvIHN0YXJ0IG9mIGxpbmUgKi8KKwliYWNrc3BhY2VfdW50aWxfY29sdW1uKDApOworCisJLyogSW5zZXJ0IG5ldyBzdHVmZiBpbnRvIGxpbmUgYWdhaW4gKi8KKwlpbnNfYnl0ZXMobmV3X2xpbmUpOworCisJdmltX2ZyZWUobmV3X2xpbmUpOworICAgIH0KKyNlbmRpZgorfQorCisvKgorICogVHJ1bmNhdGUgdGhlIHNwYWNlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLiAgVGhpcyBpcyB0byBiZSB1c2VkIG9ubHkgaW4gYW4KKyAqIGluc2VydCBtb2RlLiAgSXQgaGFuZGxlcyBmaXhpbmcgdGhlIHJlcGxhY2Ugc3RhY2sgZm9yIFJFUExBQ0UgYW5kIFZSRVBMQUNFCisgKiBtb2Rlcy4KKyAqLworICAgIHZvaWQKK3RydW5jYXRlX3NwYWNlcyhsaW5lKQorICAgIGNoYXJfdSAgKmxpbmU7Cit7CisgICAgaW50CSAgICBpOworCisgICAgLyogZmluZCBzdGFydCBvZiB0cmFpbGluZyB3aGl0ZSBzcGFjZSAqLworICAgIGZvciAoaSA9IChpbnQpU1RSTEVOKGxpbmUpIC0gMTsgaSA+PSAwICYmIHZpbV9pc3doaXRlKGxpbmVbaV0pOyBpLS0pCisgICAgeworCWlmIChTdGF0ZSAmIFJFUExBQ0VfRkxBRykKKwkgICAgcmVwbGFjZV9qb2luKDApOwkgICAgLyogcmVtb3ZlIGEgTlVMIGZyb20gdGhlIHJlcGxhY2Ugc3RhY2sgKi8KKyAgICB9CisgICAgbGluZVtpICsgMV0gPSBOVUw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfVlJFUExBQ0UpIHx8IGRlZmluZWQoRkVBVF9JTlNfRVhQQU5EKSBcCisJfHwgZGVmaW5lZChGRUFUX0NPTU1FTlRTKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEJhY2tzcGFjZSB0aGUgY3Vyc29yIHVudGlsIHRoZSBnaXZlbiBjb2x1bW4uICBIYW5kbGVzIFJFUExBQ0UgYW5kIFZSRVBMQUNFCisgKiBtb2RlcyBjb3JyZWN0bHkuICBNYXkgYWxzbyBiZSB1c2VkIHdoZW4gbm90IGluIGluc2VydCBtb2RlIGF0IGFsbC4KKyAqLworICAgIHZvaWQKK2JhY2tzcGFjZV91bnRpbF9jb2x1bW4oY29sKQorICAgIGludAkgICAgY29sOworeworICAgIHdoaWxlICgoaW50KWN1cndpbi0+d19jdXJzb3IuY29sID4gY29sKQorICAgIHsKKwljdXJ3aW4tPndfY3Vyc29yLmNvbC0tOworCWlmIChTdGF0ZSAmIFJFUExBQ0VfRkxBRykKKwkgICAgcmVwbGFjZV9kb19icygpOworCWVsc2UKKwkgICAgKHZvaWQpZGVsX2NoYXIoRkFMU0UpOworICAgIH0KK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0lOU19FWFBBTkQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogSXMgdGhlIGNoYXJhY3RlciAnYycgYSB2YWxpZCBrZXkgdG8gZ28gdG8gb3Iga2VlcCB1cyBpbiBDVFJMLVggbW9kZT8KKyAqIFRoaXMgZGVwZW5kcyBvbiB0aGUgY3VycmVudCBtb2RlLgorICovCisgICAgaW50Cit2aW1faXNfY3RybF94X2tleShjKQorICAgIGludAkgICAgYzsKK3sKKyAgICAvKiBBbHdheXMgYWxsb3cgXlIgLSBsZXQgaXQncyByZXN1bHRzIHRoZW4gYmUgY2hlY2tlZCAqLworICAgIGlmIChjID09IEN0cmxfUikKKwlyZXR1cm4gVFJVRTsKKworICAgIHN3aXRjaCAoY3RybF94X21vZGUpCisgICAgeworCWNhc2UgMDoJCSAgICAvKiBOb3QgaW4gYW55IENUUkwtWCBtb2RlICovCisJICAgIHJldHVybiAoYyA9PSBDdHJsX04gfHwgYyA9PSBDdHJsX1AgfHwgYyA9PSBDdHJsX1gpOworCWNhc2UgQ1RSTF9YX05PVF9ERUZJTkVEX1lFVDoKKwkgICAgcmV0dXJuICggICAgICAgYyA9PSBDdHJsX1ggfHwgYyA9PSBDdHJsX1kgfHwgYyA9PSBDdHJsX0UKKwkJICAgIHx8IGMgPT0gQ3RybF9MIHx8IGMgPT0gQ3RybF9GIHx8IGMgPT0gQ3RybF9SU0IKKwkJICAgIHx8IGMgPT0gQ3RybF9JIHx8IGMgPT0gQ3RybF9EIHx8IGMgPT0gQ3RybF9QCisJCSAgICB8fCBjID09IEN0cmxfTiB8fCBjID09IEN0cmxfVCB8fCBjID09IEN0cmxfVgorCQkgICAgfHwgYyA9PSBDdHJsX1EpOworCWNhc2UgQ1RSTF9YX1NDUk9MTDoKKwkgICAgcmV0dXJuIChjID09IEN0cmxfWSB8fCBjID09IEN0cmxfRSk7CisJY2FzZSBDVFJMX1hfV0hPTEVfTElORToKKwkgICAgcmV0dXJuIChjID09IEN0cmxfTCB8fCBjID09IEN0cmxfUCB8fCBjID09IEN0cmxfTik7CisJY2FzZSBDVFJMX1hfRklMRVM6CisJICAgIHJldHVybiAoYyA9PSBDdHJsX0YgfHwgYyA9PSBDdHJsX1AgfHwgYyA9PSBDdHJsX04pOworCWNhc2UgQ1RSTF9YX0RJQ1RJT05BUlk6CisJICAgIHJldHVybiAoYyA9PSBDdHJsX0sgfHwgYyA9PSBDdHJsX1AgfHwgYyA9PSBDdHJsX04pOworCWNhc2UgQ1RSTF9YX1RIRVNBVVJVUzoKKwkgICAgcmV0dXJuIChjID09IEN0cmxfVCB8fCBjID09IEN0cmxfUCB8fCBjID09IEN0cmxfTik7CisJY2FzZSBDVFJMX1hfVEFHUzoKKwkgICAgcmV0dXJuIChjID09IEN0cmxfUlNCIHx8IGMgPT0gQ3RybF9QIHx8IGMgPT0gQ3RybF9OKTsKKyNpZmRlZiBGRUFUX0ZJTkRfSUQKKwljYXNlIENUUkxfWF9QQVRIX1BBVFRFUk5TOgorCSAgICByZXR1cm4gKGMgPT0gQ3RybF9QIHx8IGMgPT0gQ3RybF9OKTsKKwljYXNlIENUUkxfWF9QQVRIX0RFRklORVM6CisJICAgIHJldHVybiAoYyA9PSBDdHJsX0QgfHwgYyA9PSBDdHJsX1AgfHwgYyA9PSBDdHJsX04pOworI2VuZGlmCisJY2FzZSBDVFJMX1hfQ01ETElORToKKwkgICAgcmV0dXJuIChjID09IEN0cmxfViB8fCBjID09IEN0cmxfUSB8fCBjID09IEN0cmxfUCB8fCBjID09IEN0cmxfTgorCQkgICAgfHwgYyA9PSBDdHJsX1gpOworICAgIH0KKyAgICBFTVNHKF8oZV9pbnRlcm5hbCkpOworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFRoaXMgaXMgbGlrZSBpbnNfY29tcGxfYWRkKCksIGJ1dCBpZiBpYyBhbmQgaW5mIGFyZSBzZXQsIHRoZW4gdGhlCisgKiBjYXNlIG9mIHRoZSBvcmlnaW5hbGx5IHR5cGVkIHRleHQgaXMgdXNlZCwgYW5kIHRoZSBjYXNlIG9mIHRoZSBjb21wbGV0ZWQKKyAqIHRleHQgaXMgaW5mZXJlZCwgaWUgdGhpcyB0cmllcyB0byB3b3JrIG91dCB3aGF0IGNhc2UgeW91IHByb2JhYmx5IHdhbnRlZAorICogdGhlIHJlc3Qgb2YgdGhlIHdvcmQgdG8gYmUgaW4gLS0gd2ViYgorICovCisgICAgaW50CitpbnNfY29tcGxfYWRkX2luZmVyY2FzZShzdHIsIGxlbiwgZm5hbWUsIGRpciwgcmV1c2UpCisgICAgY2hhcl91CSpzdHI7CisgICAgaW50CQlsZW47CisgICAgY2hhcl91CSpmbmFtZTsKKyAgICBpbnQJCWRpcjsKKyAgICBpbnQJCXJldXNlOworeworICAgIGludAkJaGFzX2xvd2VyID0gRkFMU0U7CisgICAgaW50CQl3YXNfbGV0dGVyID0gRkFMU0U7CisgICAgaW50CQlpZHg7CisKKyAgICBpZiAocF9pYyAmJiBjdXJidWYtPmJfcF9pbmYgJiYgbGVuIDwgSU9TSVpFKQorICAgIHsKKwkvKiBJbmZlciBjYXNlIG9mIGNvbXBsZXRlZCBwYXJ0IC0tIHdlYmIgKi8KKwkvKiBVc2UgSU9idWZmLCBzdHIgd291bGQgY2hhbmdlIHRleHQgaW4gYnVmZmVyISAqLworCVNUUk5DUFkoSU9idWZmLCBzdHIsIGxlbik7CisJSU9idWZmW2xlbl0gPSBOVUw7CisKKwkvKiBSdWxlIDE6IFdlcmUgYW55IGNoYXJzIGNvbnZlcnRlZCB0byBsb3dlcj8gKi8KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvbXBsZXRpb25fbGVuZ3RoOyArK2lkeCkKKwl7CisJICAgIGlmIChpc2xvd2VyKG9yaWdpbmFsX3RleHRbaWR4XSkpCisJICAgIHsKKwkJaGFzX2xvd2VyID0gVFJVRTsKKwkJaWYgKGlzdXBwZXIoSU9idWZmW2lkeF0pKQorCQl7CisJCSAgICAvKiBSdWxlIDEgaXMgc2F0aXNmaWVkICovCisJCSAgICBmb3IgKGlkeCA9IGNvbXBsZXRpb25fbGVuZ3RoOyBpZHggPCBsZW47ICsraWR4KQorCQkJSU9idWZmW2lkeF0gPSBUT0xPV0VSX0xPQyhJT2J1ZmZbaWR4XSk7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorCisJLyoKKwkgKiBSdWxlIDI6IE5vIGxvd2VyIGNhc2UsIDJuZCBjb25zZWN1dGl2ZSBsZXR0ZXIgY29udmVydGVkIHRvCisJICogdXBwZXIgY2FzZS4KKwkgKi8KKwlpZiAoIWhhc19sb3dlcikKKwl7CisJICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgY29tcGxldGlvbl9sZW5ndGg7ICsraWR4KQorCSAgICB7CisJCWlmICh3YXNfbGV0dGVyICYmIGlzdXBwZXIob3JpZ2luYWxfdGV4dFtpZHhdKQorCQkJCQkJICAgICAgJiYgaXNsb3dlcihJT2J1ZmZbaWR4XSkpCisJCXsKKwkJICAgIC8qIFJ1bGUgMiBpcyBzYXRpc2ZpZWQgKi8KKwkJICAgIGZvciAoaWR4ID0gY29tcGxldGlvbl9sZW5ndGg7IGlkeCA8IGxlbjsgKytpZHgpCisJCQlJT2J1ZmZbaWR4XSA9IFRPVVBQRVJfTE9DKElPYnVmZltpZHhdKTsKKwkJICAgIGJyZWFrOworCQl9CisJCXdhc19sZXR0ZXIgPSBpc2FscGhhKG9yaWdpbmFsX3RleHRbaWR4XSk7CisJICAgIH0KKwl9CisKKwkvKiBDb3B5IHRoZSBvcmlnaW5hbCBjYXNlIG9mIHRoZSBwYXJ0IHdlIHR5cGVkICovCisJU1RSTkNQWShJT2J1ZmYsIG9yaWdpbmFsX3RleHQsIGNvbXBsZXRpb25fbGVuZ3RoKTsKKworCXJldHVybiBpbnNfY29tcGxfYWRkKElPYnVmZiwgbGVuLCBmbmFtZSwgZGlyLCByZXVzZSk7CisgICAgfQorICAgIHJldHVybiBpbnNfY29tcGxfYWRkKHN0ciwgbGVuLCBmbmFtZSwgZGlyLCByZXVzZSk7Cit9CisKKy8qCisgKiBBZGQgYSBtYXRjaCB0byB0aGUgbGlzdCBvZiBtYXRjaGVzLgorICogSWYgdGhlIGdpdmVuIHN0cmluZyBpcyBhbHJlYWR5IGluIHRoZSBsaXN0IG9mIGNvbXBsZXRpb25zLCB0aGVuIHJldHVybgorICogRkFJTCwgb3RoZXJ3aXNlIGFkZCBpdCB0byB0aGUgbGlzdCBhbmQgcmV0dXJuIE9LLiAgSWYgdGhlcmUgaXMgYW4gZXJyb3IsCisgKiBtYXliZSBiZWNhdXNlIGFsbG9jIHJldHVybnMgTlVMTCwgdGhlbiBSRVRfRVJST1IgaXMgcmV0dXJuZWQgLS0gd2ViYi4KKyAqLworICAgIHN0YXRpYyBpbnQKK2luc19jb21wbF9hZGQoc3RyLCBsZW4sIGZuYW1lLCBkaXIsIHJldXNlKQorICAgIGNoYXJfdQkqc3RyOworICAgIGludAkJbGVuOworICAgIGNoYXJfdQkqZm5hbWU7CisgICAgaW50CQlkaXI7CisgICAgaW50CQlyZXVzZTsKK3sKKyAgICBzdHJ1Y3QgQ29tcGxldGlvbiAqbWF0Y2g7CisKKyAgICB1aV9icmVha2NoZWNrKCk7CisgICAgaWYgKGdvdF9pbnQpCisJcmV0dXJuIFJFVF9FUlJPUjsKKyAgICBpZiAobGVuIDwgMCkKKwlsZW4gPSAoaW50KVNUUkxFTihzdHIpOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgc2FtZSBtYXRjaCBpcyBhbHJlYWR5IHByZXNlbnQsIGRvbid0IGFkZCBpdC4KKyAgICAgKi8KKyAgICBpZiAoZmlyc3RfbWF0Y2ggIT0gTlVMTCkKKyAgICB7CisJbWF0Y2ggPSBmaXJzdF9tYXRjaDsKKwlkbworCXsKKwkgICAgaWYgKCAgICAhKG1hdGNoLT5vcmlnaW5hbCAmIE9SSUdJTkFMX1RFWFQpCisJCSAgICAmJiBTVFJOQ01QKG1hdGNoLT5zdHIsIHN0ciwgKHNpemVfdClsZW4pID09IDAKKwkJICAgICYmIG1hdGNoLT5zdHJbbGVuXSA9PSBOVUwpCisJCXJldHVybiBGQUlMOworCSAgICBtYXRjaCA9IG1hdGNoLT5uZXh0OworCX0gd2hpbGUgKG1hdGNoICE9IE5VTEwgJiYgbWF0Y2ggIT0gZmlyc3RfbWF0Y2gpOworICAgIH0KKworICAgIC8qCisgICAgICogQWxsb2NhdGUgYSBuZXcgbWF0Y2ggc3RydWN0dXJlLgorICAgICAqIENvcHkgdGhlIHZhbHVlcyB0byB0aGUgbmV3IG1hdGNoIHN0cnVjdHVyZS4KKyAgICAgKi8KKyAgICBtYXRjaCA9IChzdHJ1Y3QgQ29tcGxldGlvbiAqKWFsbG9jKCh1bnNpZ25lZClzaXplb2Yoc3RydWN0IENvbXBsZXRpb24pKTsKKyAgICBpZiAobWF0Y2ggPT0gTlVMTCkKKwlyZXR1cm4gUkVUX0VSUk9SOworICAgIG1hdGNoLT5udW1iZXIgPSAtMTsKKyAgICBpZiAocmV1c2UgJiBPUklHSU5BTF9URVhUKQorICAgIHsKKwltYXRjaC0+bnVtYmVyID0gMDsKKwltYXRjaC0+c3RyID0gb3JpZ2luYWxfdGV4dDsKKyAgICB9CisgICAgZWxzZSBpZiAoKG1hdGNoLT5zdHIgPSB2aW1fc3RybnNhdmUoc3RyLCBsZW4pKSA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShtYXRjaCk7CisJcmV0dXJuIFJFVF9FUlJPUjsKKyAgICB9CisgICAgLyogbWF0Y2gtZm5hbWUgaXM6CisgICAgICogLSBjdXJyX21hdGNoLT5mbmFtZSBpZiBpdCBpcyBhIHN0cmluZyBlcXVhbCB0byBmbmFtZS4KKyAgICAgKiAtIGEgY29weSBvZiBmbmFtZSwgRlJFRV9GTkFNRSBpcyBzZXQgdG8gZnJlZSBsYXRlciBUSEUgYWxsb2NhdGVkIG1lbS4KKyAgICAgKiAtIE5VTEwgb3RoZXJ3aXNlLgktLUFjZXZlZG8gKi8KKyAgICBpZiAoZm5hbWUgJiYgY3Vycl9tYXRjaCAmJiBjdXJyX21hdGNoLT5mbmFtZQorCSAgICAgICYmIFNUUkNNUChmbmFtZSwgY3Vycl9tYXRjaC0+Zm5hbWUpID09IDApCisJbWF0Y2gtPmZuYW1lID0gY3Vycl9tYXRjaC0+Zm5hbWU7CisgICAgZWxzZSBpZiAoZm5hbWUgJiYgKG1hdGNoLT5mbmFtZSA9IHZpbV9zdHJzYXZlKGZuYW1lKSkgIT0gTlVMTCkKKwlyZXVzZSB8PSBGUkVFX0ZOQU1FOworICAgIGVsc2UKKwltYXRjaC0+Zm5hbWUgPSBOVUxMOworICAgIG1hdGNoLT5vcmlnaW5hbCA9IHJldXNlOworCisgICAgLyoKKyAgICAgKiBMaW5rIHRoZSBuZXcgbWF0Y2ggc3RydWN0dXJlIGluIHRoZSBsaXN0IG9mIG1hdGNoZXMuCisgICAgICovCisgICAgaWYgKGZpcnN0X21hdGNoID09IE5VTEwpCisJbWF0Y2gtPm5leHQgPSBtYXRjaC0+cHJldiA9IE5VTEw7CisgICAgZWxzZSBpZiAoZGlyID09IEZPUldBUkQpCisgICAgeworCW1hdGNoLT5uZXh0ID0gY3Vycl9tYXRjaC0+bmV4dDsKKwltYXRjaC0+cHJldiA9IGN1cnJfbWF0Y2g7CisgICAgfQorICAgIGVsc2UJLyogQkFDS1dBUkQgKi8KKyAgICB7CisJbWF0Y2gtPm5leHQgPSBjdXJyX21hdGNoOworCW1hdGNoLT5wcmV2ID0gY3Vycl9tYXRjaC0+cHJldjsKKyAgICB9CisgICAgaWYgKG1hdGNoLT5uZXh0KQorCW1hdGNoLT5uZXh0LT5wcmV2ID0gbWF0Y2g7CisgICAgaWYgKG1hdGNoLT5wcmV2KQorCW1hdGNoLT5wcmV2LT5uZXh0ID0gbWF0Y2g7CisgICAgZWxzZQkvKiBpZiB0aGVyZSdzIG5vdGhpbmcgYmVmb3JlLCBpdCBpcyB0aGUgZmlyc3QgbWF0Y2ggKi8KKwlmaXJzdF9tYXRjaCA9IG1hdGNoOworICAgIGN1cnJfbWF0Y2ggPSBtYXRjaDsKKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIEFkZCBhbiBhcnJheSBvZiBtYXRjaGVzIHRvIHRoZSBsaXN0IG9mIG1hdGNoZXMuCisgKiBGcmVlcyBtYXRjaGVzW10uCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5zX2NvbXBsX2FkZF9tYXRjaGVzKG51bV9tYXRjaGVzLCBtYXRjaGVzLCBkaXIpCisgICAgaW50CQludW1fbWF0Y2hlczsKKyAgICBjaGFyX3UJKiptYXRjaGVzOworICAgIGludAkJZGlyOworeworICAgIGludAkJaTsKKyAgICBpbnQJCWFkZF9yID0gT0s7CisgICAgaW50CQlsZGlyID0gZGlyOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9tYXRjaGVzICYmIGFkZF9yICE9IFJFVF9FUlJPUjsgaSsrKQorCWlmICgoYWRkX3IgPSBpbnNfY29tcGxfYWRkKG1hdGNoZXNbaV0sIC0xLCBOVUxMLCBsZGlyLCAwKSkgPT0gT0spCisJICAgIC8qIGlmIGRpciB3YXMgQkFDS1dBUkQgdGhlbiBob25vciBpdCBqdXN0IG9uY2UgKi8KKwkgICAgbGRpciA9IEZPUldBUkQ7CisgICAgRnJlZVdpbGQobnVtX21hdGNoZXMsIG1hdGNoZXMpOworfQorCisvKiBNYWtlIHRoZSBjb21wbGV0aW9uIGxpc3QgY3ljbGljLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyAoZXhjbHVkaW5nIHRoZSBvcmlnaW5hbCkuCisgKi8KKyAgICBzdGF0aWMgaW50CitpbnNfY29tcGxfbWFrZV9jeWNsaWMoKQoreworICAgIHN0cnVjdCBDb21wbGV0aW9uICptYXRjaDsKKyAgICBpbnQJICAgIGNvdW50ID0gMDsKKworICAgIGlmIChmaXJzdF9tYXRjaCAhPSBOVUxMKQorICAgIHsKKwkvKgorCSAqIEZpbmQgdGhlIGVuZCBvZiB0aGUgbGlzdC4KKwkgKi8KKwltYXRjaCA9IGZpcnN0X21hdGNoOworCS8qIHRoZXJlJ3MgYWx3YXlzIGFuIGVudHJ5IGZvciB0aGUgb3JpZ2luYWxfdGV4dCwgaXQgZG9lc24ndCBjb3VudC4gKi8KKwl3aGlsZSAobWF0Y2gtPm5leHQgIT0gTlVMTCAmJiBtYXRjaC0+bmV4dCAhPSBmaXJzdF9tYXRjaCkKKwl7CisJICAgIG1hdGNoID0gbWF0Y2gtPm5leHQ7CisJICAgICsrY291bnQ7CisJfQorCW1hdGNoLT5uZXh0ID0gZmlyc3RfbWF0Y2g7CisJZmlyc3RfbWF0Y2gtPnByZXYgPSBtYXRjaDsKKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lIERJQ1RfRklSU1QJKDEpCS8qIHVzZSBqdXN0IGZpcnN0IGVsZW1lbnQgaW4gImRpY3QiICovCisjZGVmaW5lIERJQ1RfRVhBQ1QJKDIpCS8qICJkaWN0IiBpcyB0aGUgZXhhY3QgbmFtZSBvZiBhIGZpbGUgKi8KKy8qCisgKiBBZGQgYW55IGlkZW50aWZpZXJzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRlcm4gdG8gdGhlIGxpc3Qgb2YKKyAqIGNvbXBsZXRpb25zLgorICovCisgICAgc3RhdGljIHZvaWQKK2luc19jb21wbF9kaWN0aW9uYXJpZXMoZGljdCwgcGF0LCBkaXIsIGZsYWdzLCB0aGVzYXVydXMpCisgICAgY2hhcl91CSpkaWN0OworICAgIGNoYXJfdQkqcGF0OworICAgIGludAkJZGlyOworICAgIGludAkJZmxhZ3M7CisgICAgaW50CQl0aGVzYXVydXM7Cit7CisgICAgY2hhcl91CSpwdHI7CisgICAgY2hhcl91CSpidWY7CisgICAgRklMRQkqZnA7CisgICAgcmVnbWF0Y2hfVAlyZWdtYXRjaDsKKyAgICBpbnQJCWFkZF9yOworICAgIGNoYXJfdQkqKmZpbGVzOworICAgIGludAkJY291bnQ7CisgICAgaW50CQlpOworICAgIGludAkJc2F2ZV9wX3NjczsKKworICAgIGJ1ZiA9IGFsbG9jKExTSVpFKTsKKyAgICAvKiBJZiAnaW5mZXJjYXNlJyBpcyBzZXQsIGRvbid0IHVzZSAnc21hcnRjYXNlJyBoZXJlICovCisgICAgc2F2ZV9wX3NjcyA9IHBfc2NzOworICAgIGlmIChjdXJidWYtPmJfcF9pbmYpCisJcF9zY3MgPSBGQUxTRTsKKyAgICByZWdtYXRjaC5yZWdwcm9nID0gdmltX3JlZ2NvbXAocGF0LCBwX21hZ2ljID8gUkVfTUFHSUMgOiAwKTsKKyAgICAvKiBpZ25vcmUgY2FzZSBkZXBlbmRzIG9uICdpZ25vcmVjYXNlJywgJ3NtYXJ0Y2FzZScgYW5kICJwYXQiICovCisgICAgcmVnbWF0Y2gucm1faWMgPSBpZ25vcmVjYXNlKHBhdCk7CisgICAgd2hpbGUgKGJ1ZiAhPSBOVUxMICYmIHJlZ21hdGNoLnJlZ3Byb2cgIT0gTlVMTCAmJiAqZGljdCAhPSBOVUwKKwkJICAgICAgICYmICFnb3RfaW50ICYmICFjb21wbGV0aW9uX2ludGVycnVwdGVkKQorICAgIHsKKwkvKiBjb3B5IG9uZSBkaWN0aW9uYXJ5IGZpbGUgbmFtZSBpbnRvIGJ1ZiAqLworCWlmIChmbGFncyA9PSBESUNUX0VYQUNUKQorCXsKKwkgICAgY291bnQgPSAxOworCSAgICBmaWxlcyA9ICZkaWN0OworCX0KKwllbHNlCisJeworCSAgICAvKiBFeHBhbmQgd2lsZGNhcmRzIGluIHRoZSBkaWN0aW9uYXJ5IG5hbWUsIGJ1dCBkbyBub3QgYWxsb3cKKwkgICAgICogYmFja3RpY2tzIChmb3Igc2VjdXJpdHksIHRoZSAnZGljdCcgb3B0aW9uIG1heSBoYXZlIGJlZW4gc2V0IGluCisJICAgICAqIGEgbW9kZWxpbmUpLiAqLworCSAgICBjb3B5X29wdGlvbl9wYXJ0KCZkaWN0LCBidWYsIExTSVpFLCAiLCIpOworCSAgICBpZiAodmltX3N0cmNocihidWYsICdgJykgIT0gTlVMTAorCQkgICAgfHwgZXhwYW5kX3dpbGRjYXJkcygxLCAmYnVmLCAmY291bnQsICZmaWxlcywKKwkJCQkJCSAgICAgRVdfRklMRXxFV19TSUxFTlQpICE9IE9LKQorCQljb3VudCA9IDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNvdW50ICYmICFnb3RfaW50ICYmICFjb21wbGV0aW9uX2ludGVycnVwdGVkOyBpKyspCisJeworCSAgICBmcCA9IG1jaF9mb3BlbigoY2hhciAqKWZpbGVzW2ldLCAiciIpOyAgLyogb3BlbiBkaWN0aW9uYXJ5IGZpbGUgKi8KKwkgICAgaWYgKGZsYWdzICE9IERJQ1RfRVhBQ1QpCisJICAgIHsKKwkJc3ByaW50ZigoY2hhciopSU9idWZmLCBfKCJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIpLAorCQkJCQkJCSAgICAoY2hhciAqKWZpbGVzW2ldKTsKKwkJbXNnX3RydW5jX2F0dHIoSU9idWZmLCBUUlVFLCBobF9hdHRyKEhMRl9SKSk7CisJICAgIH0KKworCSAgICBpZiAoZnAgIT0gTlVMTCkKKwkgICAgeworCQkvKgorCQkgKiBSZWFkIGRpY3Rpb25hcnkgZmlsZSBsaW5lIGJ5IGxpbmUuCisJCSAqIENoZWNrIGVhY2ggbGluZSBmb3IgYSBtYXRjaC4KKwkJICovCisJCXdoaWxlICghZ290X2ludCAmJiAhY29tcGxldGlvbl9pbnRlcnJ1cHRlZAorCQkJCSYmICF2aW1fZmdldHMoYnVmLCBMU0laRSwgZnApKQorCQl7CisJCSAgICBwdHIgPSBidWY7CisJCSAgICB3aGlsZSAodmltX3JlZ2V4ZWMoJnJlZ21hdGNoLCBidWYsIChjb2xucl9UKShwdHIgLSBidWYpKSkKKwkJICAgIHsKKwkJCXB0ciA9IHJlZ21hdGNoLnN0YXJ0cFswXTsKKwkJCXB0ciA9IGZpbmRfd29yZF9lbmQocHRyKTsKKwkJCWFkZF9yID0gaW5zX2NvbXBsX2FkZF9pbmZlcmNhc2UocmVnbWF0Y2guc3RhcnRwWzBdLAorCQkJCQkgICAgICAoaW50KShwdHIgLSByZWdtYXRjaC5zdGFydHBbMF0pLAorCQkJCQkJCSAgICBmaWxlc1tpXSwgZGlyLCAwKTsKKwkJCWlmICh0aGVzYXVydXMpCisJCQl7CisJCQkgICAgY2hhcl91ICp3c3RhcnQ7CisKKwkJCSAgICAvKgorCQkJICAgICAqIEFkZCB0aGUgb3RoZXIgbWF0Y2hlcyBvbiB0aGUgbGluZQorCQkJICAgICAqLworCQkJICAgIHdoaWxlICghZ290X2ludCkKKwkJCSAgICB7CisJCQkJLyogRmluZCBzdGFydCBvZiB0aGUgbmV4dCB3b3JkLiAgU2tpcCB3aGl0ZQorCQkJCSAqIHNwYWNlIGFuZCBwdW5jdHVhdGlvbi4gKi8KKwkJCQlwdHIgPSBmaW5kX3dvcmRfc3RhcnQocHRyKTsKKwkJCQlpZiAoKnB0ciA9PSBOVUwgfHwgKnB0ciA9PSBOTCkKKwkJCQkgICAgYnJlYWs7CisJCQkJd3N0YXJ0ID0gcHRyOworCisJCQkJLyogRmluZCBlbmQgb2YgdGhlIHdvcmQgYW5kIGFkZCBpdC4gKi8KKyNpZmRlZiBGRUFUX01CWVRFCisJCQkJaWYgKGhhc19tYnl0ZSkKKwkJCQkgICAgLyogSmFwYW5lc2Ugd29yZHMgbWF5IGhhdmUgY2hhcmFjdGVycyBpbgorCQkJCSAgICAgKiBkaWZmZXJlbnQgY2xhc3Nlcywgb25seSBzZXBhcmF0ZSB3b3JkcworCQkJCSAgICAgKiB3aXRoIHNpbmdsZS1ieXRlIG5vbi13b3JkIGNoYXJhY3RlcnMuICovCisJCQkJICAgIHdoaWxlICgqcHRyICE9IE5VTCkKKwkJCQkgICAgeworCQkJCQlpbnQgbCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocHRyKTsKKworCQkJCQlpZiAobCA8IDIgJiYgIXZpbV9pc3dvcmRjKCpwdHIpKQorCQkJCQkgICAgYnJlYWs7CisJCQkJCXB0ciArPSBsOworCQkJCSAgICB9CisJCQkJZWxzZQorI2VuZGlmCisJCQkJICAgIHB0ciA9IGZpbmRfd29yZF9lbmQocHRyKTsKKwkJCQlhZGRfciA9IGluc19jb21wbF9hZGRfaW5mZXJjYXNlKHdzdGFydCwKKwkJCQkJKGludCkocHRyIC0gd3N0YXJ0KSwgZmlsZXNbaV0sIGRpciwgMCk7CisJCQkgICAgfQorCQkJfQorCQkJaWYgKGFkZF9yID09IE9LKQorCQkJICAgIC8qIGlmIGRpciB3YXMgQkFDS1dBUkQgdGhlbiBob25vciBpdCBqdXN0IG9uY2UgKi8KKwkJCSAgICBkaXIgPSBGT1JXQVJEOworCQkJZWxzZSBpZiAoYWRkX3IgPT0gUkVUX0VSUk9SKQorCQkJICAgIGJyZWFrOworCQkJLyogYXZvaWQgZXhwZW5zaXZlIGNhbGwgdG8gdmltX3JlZ2V4ZWMoKSB3aGVuIGF0IGVuZAorCQkJICogb2YgbGluZSAqLworCQkJaWYgKCpwdHIgPT0gJ1xuJyB8fCBnb3RfaW50KQorCQkJICAgIGJyZWFrOworCQkgICAgfQorCQkgICAgbGluZV9icmVha2NoZWNrKCk7CisJCSAgICBpbnNfY29tcGxfY2hlY2tfa2V5cygpOworCQl9CisJCWZjbG9zZShmcCk7CisJICAgIH0KKwl9CisJaWYgKGZsYWdzICE9IERJQ1RfRVhBQ1QpCisJICAgIEZyZWVXaWxkKGNvdW50LCBmaWxlcyk7CisJaWYgKGZsYWdzKQorCSAgICBicmVhazsKKyAgICB9CisgICAgcF9zY3MgPSBzYXZlX3Bfc2NzOworICAgIHZpbV9mcmVlKHJlZ21hdGNoLnJlZ3Byb2cpOworICAgIHZpbV9mcmVlKGJ1Zik7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB3b3JkLgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXIgb2YgdGhlIHdvcmQuICBBbHNvIHN0b3BzIGF0IGEgTlVMLgorICovCisgICAgY2hhcl91ICoKK2ZpbmRfd29yZF9zdGFydChwdHIpCisgICAgY2hhcl91CSpwdHI7Cit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChoYXNfbWJ5dGUpCisJd2hpbGUgKCpwdHIgIT0gTlVMICYmICpwdHIgIT0gJ1xuJyAmJiBtYl9nZXRfY2xhc3MocHRyKSA8PSAxKQorCSAgICBwdHIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIpOworICAgIGVsc2UKKyNlbmRpZgorCXdoaWxlICgqcHRyICE9IE5VTCAmJiAqcHRyICE9ICdcbicgJiYgIXZpbV9pc3dvcmRjKCpwdHIpKQorCSAgICArK3B0cjsKKyAgICByZXR1cm4gcHRyOworfQorCisvKgorICogRmluZCB0aGUgZW5kIG9mIHRoZSB3b3JkLiAgQXNzdW1lcyBpdCBzdGFydHMgaW5zaWRlIGEgd29yZC4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIGp1c3QgYWZ0ZXIgdGhlIHdvcmQuCisgKi8KKyAgICBjaGFyX3UgKgorZmluZF93b3JkX2VuZChwdHIpCisgICAgY2hhcl91CSpwdHI7Cit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJc3RhcnRfY2xhc3M7CisKKyAgICBpZiAoaGFzX21ieXRlKQorICAgIHsKKwlzdGFydF9jbGFzcyA9IG1iX2dldF9jbGFzcyhwdHIpOworCWlmIChzdGFydF9jbGFzcyA+IDEpCisJICAgIHdoaWxlICgqcHRyICE9IE5VTCkKKwkgICAgeworCQlwdHIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIpOworCQlpZiAobWJfZ2V0X2NsYXNzKHB0cikgIT0gc3RhcnRfY2xhc3MpCisJCSAgICBicmVhazsKKwkgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwl3aGlsZSAodmltX2lzd29yZGMoKnB0cikpCisJICAgICsrcHRyOworICAgIHJldHVybiBwdHI7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBsaXN0IG9mIGNvbXBsZXRpb25zCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5zX2NvbXBsX2ZyZWUoKQoreworICAgIHN0cnVjdCBDb21wbGV0aW9uICptYXRjaDsKKworICAgIHZpbV9mcmVlKGNvbXBsZXRlX3BhdCk7CisgICAgY29tcGxldGVfcGF0ID0gTlVMTDsKKworICAgIGlmIChmaXJzdF9tYXRjaCA9PSBOVUxMKQorCXJldHVybjsKKyAgICBjdXJyX21hdGNoID0gZmlyc3RfbWF0Y2g7CisgICAgZG8KKyAgICB7CisJbWF0Y2ggPSBjdXJyX21hdGNoOworCWN1cnJfbWF0Y2ggPSBjdXJyX21hdGNoLT5uZXh0OworCXZpbV9mcmVlKG1hdGNoLT5zdHIpOworCS8qIHNldmVyYWwgZW50cmllcyBtYXkgdXNlIHRoZSBzYW1lIGZuYW1lLCBmcmVlIGl0IGp1c3Qgb25jZS4gKi8KKwlpZiAobWF0Y2gtPm9yaWdpbmFsICYgRlJFRV9GTkFNRSkKKwkgICAgdmltX2ZyZWUobWF0Y2gtPmZuYW1lKTsKKwl2aW1fZnJlZShtYXRjaCk7CisgICAgfSB3aGlsZSAoY3Vycl9tYXRjaCAhPSBOVUxMICYmIGN1cnJfbWF0Y2ggIT0gZmlyc3RfbWF0Y2gpOworICAgIGZpcnN0X21hdGNoID0gY3Vycl9tYXRjaCA9IE5VTEw7Cit9CisKKyAgICBzdGF0aWMgdm9pZAoraW5zX2NvbXBsX2NsZWFyKCkKK3sKKyAgICBjb250aW51ZV9zdGF0dXMgPSAwOworICAgIHN0YXJ0ZWRfY29tcGxldGlvbiA9IEZBTFNFOworICAgIGNvbXBsZXRpb25fbWF0Y2hlcyA9IDA7CisgICAgdmltX2ZyZWUoY29tcGxldGVfcGF0KTsKKyAgICBjb21wbGV0ZV9wYXQgPSBOVUxMOworICAgIHNhdmVfc20gPSAtMTsKKyAgICBlZGl0X3N1Ym1vZGVfZXh0cmEgPSBOVUxMOworfQorCisvKgorICogUHJlcGFyZSBmb3IgSW5zZXJ0IG1vZGUgY29tcGxldGlvbiwgb3Igc3RvcCBpdC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitpbnNfY29tcGxfcHJlcChjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBjaGFyX3UJKnB0cjsKKyAgICBjaGFyX3UJKnRtcF9wdHI7CisgICAgaW50CQl0ZW1wOworICAgIGludAkJd2FudF9jaW5kZW50OworCisgICAgLyogRm9yZ2V0IGFueSBwcmV2aW91cyAnc3BlY2lhbCcgbWVzc2FnZXMgaWYgdGhpcyBpcyBhY3R1YWxseQorICAgICAqIGEgXlggbW9kZSBrZXkgLSBiYXIgXlIsIGluIHdoaWNoIGNhc2Ugd2Ugd2FpdCB0byBzZWUgd2hhdCBpdCBnaXZlcyB1cy4KKyAgICAgKi8KKyAgICBpZiAoYyAhPSBDdHJsX1IgJiYgdmltX2lzX2N0cmxfeF9rZXkoYykpCisJZWRpdF9zdWJtb2RlX2V4dHJhID0gTlVMTDsKKworICAgIC8qIElnbm9yZSBlbmQgb2YgU2VsZWN0IG1vZGUgbWFwcGluZyAqLworICAgIGlmIChjID09IEtfU0VMRUNUKQorCXJldHVybjsKKworICAgIGlmIChjdHJsX3hfbW9kZSA9PSBDVFJMX1hfTk9UX0RFRklORURfWUVUKQorICAgIHsKKwkvKgorCSAqIFdlIGhhdmUganVzdCB0eXBlZCBDVFJMLVggYW5kIGFyZW4ndCBxdWl0ZSBzdXJlIHdoaWNoIENUUkwtWCBtb2RlCisJICogaXQgd2lsbCBiZSB5ZXQuICBOb3cgd2UgZGVjaWRlLgorCSAqLworCXN3aXRjaCAoYykKKwl7CisJICAgIGNhc2UgQ3RybF9FOgorCSAgICBjYXNlIEN0cmxfWToKKwkJY3RybF94X21vZGUgPSBDVFJMX1hfU0NST0xMOworCQlpZiAoIShTdGF0ZSAmIFJFUExBQ0VfRkxBRykpCisJCSAgICBlZGl0X3N1Ym1vZGUgPSAoY2hhcl91ICopXygiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIik7CisJCWVsc2UKKwkJICAgIGVkaXRfc3VibW9kZSA9IChjaGFyX3UgKilfKCIgKHJlcGxhY2UpIFNjcm9sbCAoXkUvXlkpIik7CisJCWVkaXRfc3VibW9kZV9wcmUgPSBOVUxMOworCQlzaG93bW9kZSgpOworCQlicmVhazsKKwkgICAgY2FzZSBDdHJsX0w6CisJCWN0cmxfeF9tb2RlID0gQ1RSTF9YX1dIT0xFX0xJTkU7CisJCWJyZWFrOworCSAgICBjYXNlIEN0cmxfRjoKKwkJY3RybF94X21vZGUgPSBDVFJMX1hfRklMRVM7CisJCWJyZWFrOworCSAgICBjYXNlIEN0cmxfSzoKKwkJY3RybF94X21vZGUgPSBDVFJMX1hfRElDVElPTkFSWTsKKwkJYnJlYWs7CisJICAgIGNhc2UgQ3RybF9SOgorCQkvKiBTaW1wbHkgYWxsb3cgXlIgdG8gaGFwcGVuIHdpdGhvdXQgYWZmZWN0aW5nIF5YIG1vZGUgKi8KKwkJYnJlYWs7CisJICAgIGNhc2UgQ3RybF9UOgorCQljdHJsX3hfbW9kZSA9IENUUkxfWF9USEVTQVVSVVM7CisJCWJyZWFrOworCSAgICBjYXNlIEN0cmxfUlNCOgorCQljdHJsX3hfbW9kZSA9IENUUkxfWF9UQUdTOworCQlicmVhazsKKyNpZmRlZiBGRUFUX0ZJTkRfSUQKKwkgICAgY2FzZSBDdHJsX0k6CisJICAgIGNhc2UgS19TX1RBQjoKKwkJY3RybF94X21vZGUgPSBDVFJMX1hfUEFUSF9QQVRURVJOUzsKKwkJYnJlYWs7CisJICAgIGNhc2UgQ3RybF9EOgorCQljdHJsX3hfbW9kZSA9IENUUkxfWF9QQVRIX0RFRklORVM7CisJCWJyZWFrOworI2VuZGlmCisJICAgIGNhc2UgQ3RybF9WOgorCSAgICBjYXNlIEN0cmxfUToKKwkJY3RybF94X21vZGUgPSBDVFJMX1hfQ01ETElORTsKKwkJYnJlYWs7CisJICAgIGNhc2UgQ3RybF9QOgorCSAgICBjYXNlIEN0cmxfTjoKKwkJLyogXlheUCBtZWFucyBMT0NBTCBleHBhbnNpb24gaWYgbm90aGluZyBpbnRlcnJ1cHRlZCAoZWcgd2UKKwkJICoganVzdCBzdGFydGVkIF5YIG1vZGUsIG9yIHRoZXJlIHdlcmUgZW5vdWdoIF5YJ3MgdG8gY2FuY2VsCisJCSAqIHRoZSBwcmV2aW91cyBtb2RlLCBzYXkgXlheRl5YXlheUCBvciBeUF5YXlheWF5QLCBzZWUgYmVsb3cpCisJCSAqIGRvIG5vcm1hbCBleHBhbnNpb24gd2hlbiBpbnRlcnJ1cHRpbmcgYSBkaWZmZXJlbnQgbW9kZSAoc2F5CisJCSAqIF5YXkZeWF5QIG9yIF5QXlheWF5QLCBzZWUgYmVsb3cpCisJCSAqIG5vdGhpbmcgY2hhbmdlcyBpZiBpbnRlcnJ1cHRpbmcgbW9kZSAwLCAoZWcsIHRoZSBmbGFnCisJCSAqIGRvZXNuJ3QgY2hhbmdlIHdoZW4gZ29pbmcgdG8gQURESU5HIG1vZGUgIC0tIEFjZXZlZG8gKi8KKwkJaWYgKCEoY29udGludWVfc3RhdHVzICYgQ09OVF9JTlRSUFQpKQorCQkgICAgY29udGludWVfc3RhdHVzIHw9IENPTlRfTE9DQUw7CisJCWVsc2UgaWYgKGNvbnRpbnVlX21vZGUgIT0gMCkKKwkJICAgIGNvbnRpbnVlX3N0YXR1cyAmPSB+Q09OVF9MT0NBTDsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwkgICAgZGVmYXVsdDoKKwkJLyogaWYgd2UgaGF2ZSB0eXBlZCBhdCBsZWFzdCAyIF5YJ3MuLi4gZm9yIG1vZGVzICE9IDAsIHdlIHNldAorCQkgKiBjb250aW51ZV9zdGF0dXMgPSAwIChlZywgYXMgaWYgd2UgaGFkIGp1c3Qgc3RhcnRlZCBeWCBtb2RlKQorCQkgKiBmb3IgbW9kZSAwLCB3ZSBzZXQgY29udGludWVfbW9kZSB0byBhbiBpbXBvc3NpYmxlIHZhbHVlLCBpbgorCQkgKiBib3RoIGNhc2VzIF5YXlggY2FuIGJlIHVzZWQgdG8gcmVzdGFydCB0aGUgc2FtZSBtb2RlCisJCSAqIChhdm9pZGluZyBBRERJTkcgbW9kZSkuICAgVW5kb2N1bWVudGVkIGZlYXR1cmU6CisJCSAqIEluIGEgbW9kZSAhPSAwIF5YXlAgYW5kIF5YXlheUCBzdGFydCAnY29tcGxldGUnIGFuZCBsb2NhbAorCQkgKiBeUCBleHBhbnNpb25zIHJlc3BlY3RpdmVseS4JSW4gbW9kZSAwIGFuIGV4dHJhIF5YIGlzCisJCSAqIG5lZWRlZCBzaW5jZSBeWF5QIGdvZXMgdG8gQURESU5HIG1vZGUgIC0tIEFjZXZlZG8gKi8KKwkJaWYgKGMgPT0gQ3RybF9YKQorCQl7CisJCSAgICBpZiAoY29udGludWVfbW9kZSAhPSAwKQorCQkJY29udGludWVfc3RhdHVzID0gMDsKKwkJICAgIGVsc2UKKwkJCWNvbnRpbnVlX21vZGUgPSBDVFJMX1hfTk9UX0RFRklORURfWUVUOworCQl9CisJCWN0cmxfeF9tb2RlID0gMDsKKwkJZWRpdF9zdWJtb2RlID0gTlVMTDsKKwkJc2hvd21vZGUoKTsKKwkJYnJlYWs7CisJfQorICAgIH0KKyAgICBlbHNlIGlmIChjdHJsX3hfbW9kZSAhPSAwKQorICAgIHsKKwkvKiBXZSdyZSBhbHJlYWR5IGluIENUUkwtWCBtb2RlLCBkbyB3ZSBzdGF5IGluIGl0PyAqLworCWlmICghdmltX2lzX2N0cmxfeF9rZXkoYykpCisJeworCSAgICBpZiAoY3RybF94X21vZGUgPT0gQ1RSTF9YX1NDUk9MTCkKKwkJY3RybF94X21vZGUgPSAwOworCSAgICBlbHNlCisJCWN0cmxfeF9tb2RlID0gQ1RSTF9YX0ZJTklTSEVEOworCSAgICBlZGl0X3N1Ym1vZGUgPSBOVUxMOworCX0KKwlzaG93bW9kZSgpOworICAgIH0KKworICAgIGlmIChzdGFydGVkX2NvbXBsZXRpb24gfHwgY3RybF94X21vZGUgPT0gQ1RSTF9YX0ZJTklTSEVEKQorICAgIHsKKwkvKiBTaG93IGVycm9yIG1lc3NhZ2UgZnJvbSBhdHRlbXB0ZWQga2V5d29yZCBjb21wbGV0aW9uIChwcm9iYWJseQorCSAqICdQYXR0ZXJuIG5vdCBmb3VuZCcpIHVudGlsIGFub3RoZXIga2V5IGlzIGhpdCwgdGhlbiBnbyBiYWNrIHRvCisJICogc2hvd2luZyB3aGF0IG1vZGUgd2UgYXJlIGluLgorCSAqLworCXNob3dtb2RlKCk7CisJaWYgKChjdHJsX3hfbW9kZSA9PSAwICYmIGMgIT0gQ3RybF9OICYmIGMgIT0gQ3RybF9QICYmIGMgIT0gQ3RybF9SKQorCQl8fCBjdHJsX3hfbW9kZSA9PSBDVFJMX1hfRklOSVNIRUQpCisJeworCSAgICAvKiBHZXQgaGVyZSB3aGVuIHdlIGhhdmUgZmluaXNoZWQgdHlwaW5nIGEgc2VxdWVuY2Ugb2YgXk4gYW5kCisJICAgICAqIF5QIG9yIG90aGVyIGNvbXBsZXRpb24gY2hhcmFjdGVycyBpbiBDVFJMLVggbW9kZS4gIEZyZWUgdXAKKwkgICAgICogbWVtb3J5IHRoYXQgd2FzIHVzZWQsIGFuZCBtYWtlIHN1cmUgd2UgY2FuIHJlZG8gdGhlIGluc2VydC4KKwkgICAgICovCisJICAgIGlmIChjdXJyX21hdGNoICE9IE5VTEwpCisJICAgIHsKKwkJLyoKKwkJICogSWYgYW55IG9mIHRoZSBvcmlnaW5hbCB0eXBlZCB0ZXh0IGhhcyBiZWVuIGNoYW5nZWQsCisJCSAqIGVnIHdoZW4gaWdub3JlY2FzZSBpcyBzZXQsIHdlIG11c3QgYWRkIGJhY2stc3BhY2VzIHRvCisJCSAqIHRoZSByZWRvIGJ1ZmZlci4gIFdlIGFkZCBhcyBmZXcgYXMgbmVjZXNzYXJ5IHRvIGRlbGV0ZQorCQkgKiBqdXN0IHRoZSBwYXJ0IG9mIHRoZSBvcmlnaW5hbCB0ZXh0IHRoYXQgaGFzIGNoYW5nZWQuCisJCSAqLworCQlwdHIgPSBjdXJyX21hdGNoLT5zdHI7CisJCXRtcF9wdHIgPSBvcmlnaW5hbF90ZXh0OworCQl3aGlsZSAoKnRtcF9wdHIgJiYgKnRtcF9wdHIgPT0gKnB0cikKKwkJeworCQkgICAgKyt0bXBfcHRyOworCQkgICAgKytwdHI7CisJCX0KKwkJZm9yICh0ZW1wID0gMDsgdG1wX3B0clt0ZW1wXTsgKyt0ZW1wKQorCQkgICAgQXBwZW5kQ2hhclRvUmVkb2J1ZmYoS19CUyk7CisJCUFwcGVuZFRvUmVkb2J1ZmZMaXQocHRyKTsKKwkgICAgfQorCisjaWZkZWYgRkVBVF9DSU5ERU5UCisJICAgIHdhbnRfY2luZGVudCA9IChjYW5fY2luZGVudCAmJiBjaW5kZW50X29uKCkpOworI2VuZGlmCisJICAgIC8qCisJICAgICAqIFdoZW4gY29tcGxldGluZyB3aG9sZSBsaW5lczogZml4IGluZGVudCBmb3IgJ2NpbmRlbnQnLgorCSAgICAgKiBPdGhlcndpc2UsIGJyZWFrIGxpbmUgaWYgaXQncyB0b28gbG9uZy4KKwkgICAgICovCisJICAgIGlmIChjb250aW51ZV9tb2RlID09IENUUkxfWF9XSE9MRV9MSU5FKQorCSAgICB7CisjaWZkZWYgRkVBVF9DSU5ERU5UCisJCS8qIHJlLWluZGVudCB0aGUgY3VycmVudCBsaW5lICovCisJCWlmICh3YW50X2NpbmRlbnQpCisJCXsKKwkJICAgIGRvX2NfZXhwcl9pbmRlbnQoKTsKKwkJICAgIHdhbnRfY2luZGVudCA9IEZBTFNFOwkvKiBkb24ndCBkbyBpdCBhZ2FpbiAqLworCQl9CisjZW5kaWYKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogcHV0IHRoZSBjdXJzb3Igb24gdGhlIGxhc3QgY2hhciwgZm9yICd0dycgZm9ybWF0dGluZyAqLworCQljdXJ3aW4tPndfY3Vyc29yLmNvbC0tOworCQlpZiAoc3RvcF9hcnJvdygpID09IE9LKQorCQkgICAgaW5zZXJ0Y2hhcihOVUwsIDAsIC0xKTsKKwkJY3Vyd2luLT53X2N1cnNvci5jb2wrKzsKKwkgICAgfQorCisJICAgIGF1dG9fZm9ybWF0KEZBTFNFLCBUUlVFKTsKKworCSAgICBpbnNfY29tcGxfZnJlZSgpOworCSAgICBzdGFydGVkX2NvbXBsZXRpb24gPSBGQUxTRTsKKwkgICAgY29tcGxldGlvbl9tYXRjaGVzID0gMDsKKwkgICAgbXNnX2Nscl9jbWRsaW5lKCk7CQkvKiBuZWNlc3NhcnkgZm9yICJub3Nob3dtb2RlIiAqLworCSAgICBjdHJsX3hfbW9kZSA9IDA7CisJICAgIHBfc20gPSBzYXZlX3NtOworCSAgICBpZiAoZWRpdF9zdWJtb2RlICE9IE5VTEwpCisJICAgIHsKKwkJZWRpdF9zdWJtb2RlID0gTlVMTDsKKwkJc2hvd21vZGUoKTsKKwkgICAgfQorCisjaWZkZWYgRkVBVF9DSU5ERU5UCisJICAgIC8qCisJICAgICAqIEluZGVudCBub3cgaWYgYSBrZXkgd2FzIHR5cGVkIHRoYXQgaXMgaW4gJ2NpbmtleXMnLgorCSAgICAgKi8KKwkgICAgaWYgKHdhbnRfY2luZGVudCAmJiBpbl9jaW5rZXlzKEtFWV9DT01QTEVURSwgJyAnLCBpbmluZGVudCgwKSkpCisJCWRvX2NfZXhwcl9pbmRlbnQoKTsKKyNlbmRpZgorCX0KKyAgICB9CisKKyAgICAvKiByZXNldCBjb250aW51ZV8qIGlmIHdlIGxlZnQgZXhwYW5zaW9uLW1vZGUsIGlmIHdlIHN0YXkgdGhleSdsbCBiZQorICAgICAqIChyZSlzZXQgcHJvcGVybHkgaW4gaW5zX2NvbXBsZXRlKCkgKi8KKyAgICBpZiAoIXZpbV9pc19jdHJsX3hfa2V5KGMpKQorICAgIHsKKwljb250aW51ZV9zdGF0dXMgPSAwOworCWNvbnRpbnVlX21vZGUgPSAwOworICAgIH0KK30KKworLyoKKyAqIExvb3BzIHRocm91Z2ggdGhlIGxpc3Qgb2Ygd2luZG93cywgbG9hZGVkLWJ1ZmZlcnMgb3Igbm9uLWxvYWRlZC1idWZmZXJzCisgKiAoZGVwZW5kaW5nIG9uIGZsYWcpIHN0YXJ0aW5nIGZyb20gYnVmIGFuZCBsb29raW5nIGZvciBhIG5vbi1zY2FubmVkCisgKiBidWZmZXIgKG90aGVyIHRoYW4gY3VyYnVmKS4JY3VyYnVmIGlzIHNwZWNpYWwsIGlmIGl0IGlzIGNhbGxlZCB3aXRoCisgKiBidWY9Y3VyYnVmIHRoZW4gaXQgaGFzIHRvIGJlIHRoZSBmaXJzdCBjYWxsIGZvciBhIGdpdmVuIGZsYWcvZXhwYW5zaW9uLgorICoKKyAqIFJldHVybnMgdGhlIGJ1ZmZlciB0byBzY2FuLCBpZiBhbnksIG90aGVyd2lzZSByZXR1cm5zIGN1cmJ1ZiAtLSBBY2V2ZWRvCisgKi8KKyAgICBzdGF0aWMgYnVmX1QgKgoraW5zX2NvbXBsX25leHRfYnVmKGJ1ZiwgZmxhZykKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJZmxhZzsKK3sKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBzdGF0aWMgd2luX1QgKndwOworI2VuZGlmCisKKyAgICBpZiAoZmxhZyA9PSAndycpCQkvKiBqdXN0IHdpbmRvd3MgKi8KKyAgICB7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJaWYgKGJ1ZiA9PSBjdXJidWYpCS8qIGZpcnN0IGNhbGwgZm9yIHRoaXMgZmxhZy9leHBhbnNpb24gKi8KKwkgICAgd3AgPSBjdXJ3aW47CisJd2hpbGUgKCh3cCA9IHdwLT53X25leHQgIT0gTlVMTCA/IHdwLT53X25leHQgOiBmaXJzdHdpbikgIT0gY3Vyd2luCisJCSYmIHdwLT53X2J1ZmZlci0+Yl9zY2FubmVkKQorCSAgICA7CisJYnVmID0gd3AtPndfYnVmZmVyOworI2Vsc2UKKwlidWYgPSBjdXJidWY7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorCS8qICdiJyAoanVzdCBsb2FkZWQgYnVmZmVycyksICd1JyAoanVzdCBub24tbG9hZGVkIGJ1ZmZlcnMpIG9yICdVJworCSAqICh1bmxpc3RlZCBidWZmZXJzKQorCSAqIFdoZW4gY29tcGxldGluZyB3aG9sZSBsaW5lcyBza2lwIHVubG9hZGVkIGJ1ZmZlcnMuICovCisJd2hpbGUgKChidWYgPSBidWYtPmJfbmV4dCAhPSBOVUxMID8gYnVmLT5iX25leHQgOiBmaXJzdGJ1ZikgIT0gY3VyYnVmCisJCSYmICgoZmxhZyA9PSAnVScKKwkJCT8gYnVmLT5iX3BfYmwKKwkJCTogKCFidWYtPmJfcF9ibAorCQkJICAgIHx8IChidWYtPmJfbWwubWxfbWZwID09IE5VTEwpICE9IChmbGFnID09ICd1JykpKQorCQkgICAgfHwgYnVmLT5iX3NjYW5uZWQKKwkJICAgIHx8IChidWYtPmJfbWwubWxfbWZwID09IE5VTEwKKwkJCSYmIGN0cmxfeF9tb2RlID09IENUUkxfWF9XSE9MRV9MSU5FKSkpCisJICAgIDsKKyAgICByZXR1cm4gYnVmOworfQorCisvKgorICogR2V0IHRoZSBuZXh0IGV4cGFuc2lvbihzKSBmb3IgdGhlIHRleHQgc3RhcnRpbmcgYXQgdGhlIGluaXRpYWwgY3VyYnVmCisgKiBwb3NpdGlvbiAiaW5pIiBhbmQgaW4gdGhlIGRpcmVjdGlvbiBkaXIuCisgKiBSZXR1cm4gdGhlIHRvdGFsIG9mIG1hdGNoZXMgb3IgLTEgaWYgc3RpbGwgdW5rbm93biAtLSBBY2V2ZWRvCisgKi8KKyAgICBzdGF0aWMgaW50CitpbnNfY29tcGxfZ2V0X2V4cChpbmksIGRpcikKKyAgICBwb3NfVAkqaW5pOworICAgIGludAkJZGlyOworeworICAgIHN0YXRpYyBwb3NfVAlmaXJzdF9tYXRjaF9wb3M7CisgICAgc3RhdGljIHBvc19UCWxhc3RfbWF0Y2hfcG9zOworICAgIHN0YXRpYyBjaGFyX3UJKmVfY3B0ID0gKGNoYXJfdSAqKSIiOwkvKiBjdXJyLiBlbnRyeSBpbiAnY29tcGxldGUnICovCisgICAgc3RhdGljIGludAkJZm91bmRfYWxsID0gRkFMU0U7CS8qIEZvdW5kIGFsbCBtYXRjaGVzLiAqLworICAgIHN0YXRpYyBidWZfVAkqaW5zX2J1ZiA9IE5VTEw7CisKKyAgICBwb3NfVAkJKnBvczsKKyAgICBjaGFyX3UJCSoqbWF0Y2hlczsKKyAgICBpbnQJCQlzYXZlX3Bfc2NzOworICAgIGludAkJCXNhdmVfcF93czsKKyAgICBpbnQJCQlzYXZlX3BfaWM7CisgICAgaW50CQkJaTsKKyAgICBpbnQJCQludW1fbWF0Y2hlczsKKyAgICBpbnQJCQlsZW47CisgICAgaW50CQkJZm91bmRfbmV3X21hdGNoOworICAgIGludAkJCXR5cGUgPSBjdHJsX3hfbW9kZTsKKyAgICBjaGFyX3UJCSpwdHI7CisgICAgY2hhcl91CQkqdG1wX3B0cjsKKyAgICBjaGFyX3UJCSpkaWN0ID0gTlVMTDsKKyAgICBpbnQJCQlkaWN0X2YgPSAwOworICAgIHN0cnVjdCBDb21wbGV0aW9uCSpvbGRfbWF0Y2g7CisKKyAgICBpZiAoIXN0YXJ0ZWRfY29tcGxldGlvbikKKyAgICB7CisJZm9yIChpbnNfYnVmID0gZmlyc3RidWY7IGluc19idWYgIT0gTlVMTDsgaW5zX2J1ZiA9IGluc19idWYtPmJfbmV4dCkKKwkgICAgaW5zX2J1Zi0+Yl9zY2FubmVkID0gMDsKKwlmb3VuZF9hbGwgPSBGQUxTRTsKKwlpbnNfYnVmID0gY3VyYnVmOworCWVfY3B0ID0gY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCA/IChjaGFyX3UgKikiLiIgOiBjdXJidWYtPmJfcF9jcHQ7CisJbGFzdF9tYXRjaF9wb3MgPSBmaXJzdF9tYXRjaF9wb3MgPSAqaW5pOworICAgIH0KKworICAgIG9sZF9tYXRjaCA9IGN1cnJfbWF0Y2g7CQkvKiByZW1lbWJlciB0aGUgbGFzdCBjdXJyZW50IG1hdGNoICovCisgICAgcG9zID0gKGRpciA9PSBGT1JXQVJEKSA/ICZsYXN0X21hdGNoX3BvcyA6ICZmaXJzdF9tYXRjaF9wb3M7CisgICAgLyogRm9yIF5OL15QIGxvb3Agb3ZlciBhbGwgdGhlIGZsYWdzL3dpbmRvd3MvYnVmZmVycyBpbiAnY29tcGxldGUnICovCisgICAgZm9yICg7OykKKyAgICB7CisJZm91bmRfbmV3X21hdGNoID0gRkFJTDsKKworCS8qIEZvciBeTi9eUCBwaWNrIGEgbmV3IGVudHJ5IGZyb20gZV9jcHQgaWYgc3RhcnRlZF9jb21wbGV0aW9uIGlzIG9mZiwKKwkgKiBvciBpZiBmb3VuZF9hbGwgc2F5cyB0aGlzIGVudHJ5IGlzIGRvbmUuICBGb3IgXlheTCBvbmx5IHVzZSB0aGUKKwkgKiBlbnRyaWVzIGZyb20gJ2NvbXBsZXRlJyB0aGF0IGxvb2sgaW4gbG9hZGVkIGJ1ZmZlcnMuICovCisJaWYgKChjdHJsX3hfbW9kZSA9PSAwIHx8IGN0cmxfeF9tb2RlID09IENUUkxfWF9XSE9MRV9MSU5FKQorCQkmJiAoIXN0YXJ0ZWRfY29tcGxldGlvbiB8fCBmb3VuZF9hbGwpKQorCXsKKwkgICAgZm91bmRfYWxsID0gRkFMU0U7CisJICAgIHdoaWxlICgqZV9jcHQgPT0gJywnIHx8ICplX2NwdCA9PSAnICcpCisJCWVfY3B0Kys7CisJICAgIGlmICgqZV9jcHQgPT0gJy4nICYmICFjdXJidWYtPmJfc2Nhbm5lZCkKKwkgICAgeworCQlpbnNfYnVmID0gY3VyYnVmOworCQlmaXJzdF9tYXRjaF9wb3MgPSAqaW5pOworCQkvKiBTbyB0aGF0IF5OIGNhbiBtYXRjaCB3b3JkIGltbWVkaWF0ZWx5IGFmdGVyIGN1cnNvciAqLworCQlpZiAoY3RybF94X21vZGUgPT0gMCkKKwkJICAgIGRlYygmZmlyc3RfbWF0Y2hfcG9zKTsKKwkJbGFzdF9tYXRjaF9wb3MgPSBmaXJzdF9tYXRjaF9wb3M7CisJCXR5cGUgPSAwOworCSAgICB9CisJICAgIGVsc2UgaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSJidXdVIiwgKmVfY3B0KSAhPSBOVUxMCisJCSAmJiAoaW5zX2J1ZiA9IGluc19jb21wbF9uZXh0X2J1ZihpbnNfYnVmLCAqZV9jcHQpKSAhPSBjdXJidWYpCisJICAgIHsKKwkJLyogU2NhbiBhIGJ1ZmZlciwgYnV0IG5vdCB0aGUgY3VycmVudCBvbmUuICovCisJCWlmIChpbnNfYnVmLT5iX21sLm1sX21mcCAhPSBOVUxMKSAgIC8qIGxvYWRlZCBidWZmZXIgKi8KKwkJeworCQkgICAgc3RhcnRlZF9jb21wbGV0aW9uID0gVFJVRTsKKwkJICAgIGZpcnN0X21hdGNoX3Bvcy5jb2wgPSBsYXN0X21hdGNoX3Bvcy5jb2wgPSAwOworCQkgICAgZmlyc3RfbWF0Y2hfcG9zLmxudW0gPSBpbnNfYnVmLT5iX21sLm1sX2xpbmVfY291bnQgKyAxOworCQkgICAgbGFzdF9tYXRjaF9wb3MubG51bSA9IDA7CisJCSAgICB0eXBlID0gMDsKKwkJfQorCQllbHNlCS8qIHVubG9hZGVkIGJ1ZmZlciwgc2NhbiBsaWtlIGRpY3Rpb25hcnkgKi8KKwkJeworCQkgICAgZm91bmRfYWxsID0gVFJVRTsKKwkJICAgIGlmIChpbnNfYnVmLT5iX2ZuYW1lID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJICAgIHR5cGUgPSBDVFJMX1hfRElDVElPTkFSWTsKKwkJICAgIGRpY3QgPSBpbnNfYnVmLT5iX2ZuYW1lOworCQkgICAgZGljdF9mID0gRElDVF9FWEFDVDsKKwkJfQorCQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCJTY2FubmluZzogJXMiKSwKKwkJCWluc19idWYtPmJfZm5hbWUgPT0gTlVMTAorCQkJICAgID8gYnVmX3NwbmFtZShpbnNfYnVmKQorCQkJICAgIDogaW5zX2J1Zi0+Yl9zZm5hbWUgPT0gTlVMTAorCQkJCT8gKGNoYXIgKilpbnNfYnVmLT5iX2ZuYW1lCisJCQkJOiAoY2hhciAqKWluc19idWYtPmJfc2ZuYW1lKTsKKwkJbXNnX3RydW5jX2F0dHIoSU9idWZmLCBUUlVFLCBobF9hdHRyKEhMRl9SKSk7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKmVfY3B0ID09IE5VTCkKKwkJYnJlYWs7CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoY3RybF94X21vZGUgPT0gQ1RSTF9YX1dIT0xFX0xJTkUpCisJCSAgICB0eXBlID0gLTE7CisJCWVsc2UgaWYgKCplX2NwdCA9PSAnaycgfHwgKmVfY3B0ID09ICdzJykKKwkJeworCQkgICAgaWYgKCplX2NwdCA9PSAnaycpCisJCQl0eXBlID0gQ1RSTF9YX0RJQ1RJT05BUlk7CisJCSAgICBlbHNlCisJCQl0eXBlID0gQ1RSTF9YX1RIRVNBVVJVUzsKKwkJICAgIGlmICgqKytlX2NwdCAhPSAnLCcgJiYgKmVfY3B0ICE9IE5VTCkKKwkJICAgIHsKKwkJCWRpY3QgPSBlX2NwdDsKKwkJCWRpY3RfZiA9IERJQ1RfRklSU1Q7CisJCSAgICB9CisJCX0KKyNpZmRlZiBGRUFUX0ZJTkRfSUQKKwkJZWxzZSBpZiAoKmVfY3B0ID09ICdpJykKKwkJICAgIHR5cGUgPSBDVFJMX1hfUEFUSF9QQVRURVJOUzsKKwkJZWxzZSBpZiAoKmVfY3B0ID09ICdkJykKKwkJICAgIHR5cGUgPSBDVFJMX1hfUEFUSF9ERUZJTkVTOworI2VuZGlmCisJCWVsc2UgaWYgKCplX2NwdCA9PSAnXScgfHwgKmVfY3B0ID09ICd0JykKKwkJeworCQkgICAgdHlwZSA9IENUUkxfWF9UQUdTOworCQkgICAgc3ByaW50ZigoY2hhciopSU9idWZmLCBfKCJTY2FubmluZyB0YWdzLiIpKTsKKwkJICAgIG1zZ190cnVuY19hdHRyKElPYnVmZiwgVFJVRSwgaGxfYXR0cihITEZfUikpOworCQl9CisJCWVsc2UKKwkJICAgIHR5cGUgPSAtMTsKKworCQkvKiBpbiBhbnkgY2FzZSBlX2NwdCBpcyBhZHZhbmNlZCB0byB0aGUgbmV4dCBlbnRyeSAqLworCQkodm9pZCljb3B5X29wdGlvbl9wYXJ0KCZlX2NwdCwgSU9idWZmLCBJT1NJWkUsICIsIik7CisKKwkJZm91bmRfYWxsID0gVFJVRTsKKwkJaWYgKHR5cGUgPT0gLTEpCisJCSAgICBjb250aW51ZTsKKwkgICAgfQorCX0KKworCXN3aXRjaCAodHlwZSkKKwl7CisJY2FzZSAtMToKKwkgICAgYnJlYWs7CisjaWZkZWYgRkVBVF9GSU5EX0lECisJY2FzZSBDVFJMX1hfUEFUSF9QQVRURVJOUzoKKwljYXNlIENUUkxfWF9QQVRIX0RFRklORVM6CisJICAgIGZpbmRfcGF0dGVybl9pbl9wYXRoKGNvbXBsZXRlX3BhdCwgZGlyLAorCQkJCSAoaW50KVNUUkxFTihjb21wbGV0ZV9wYXQpLCBGQUxTRSwgRkFMU0UsCisJCQkJICh0eXBlID09IENUUkxfWF9QQVRIX0RFRklORVMKKwkJCQkgICYmICEoY29udGludWVfc3RhdHVzICYgQ09OVF9TT0wpKQorCQkJCSA/IEZJTkRfREVGSU5FIDogRklORF9BTlksIDFMLCBBQ1RJT05fRVhQQU5ELAorCQkJCSAobGluZW5yX1QpMSwgKGxpbmVucl9UKU1BWExOVU0pOworCSAgICBicmVhazsKKyNlbmRpZgorCisJY2FzZSBDVFJMX1hfRElDVElPTkFSWToKKwljYXNlIENUUkxfWF9USEVTQVVSVVM6CisJICAgIGluc19jb21wbF9kaWN0aW9uYXJpZXMoCisJCSAgICBkaWN0ID8gZGljdAorCQkJIDogKHR5cGUgPT0gQ1RSTF9YX1RIRVNBVVJVUworCQkJICAgICA/ICgqY3VyYnVmLT5iX3BfdHNyID09IE5VTAorCQkJCSA/IHBfdHNyCisJCQkJIDogY3VyYnVmLT5iX3BfdHNyKQorCQkJICAgICA6ICgqY3VyYnVmLT5iX3BfZGljdCA9PSBOVUwKKwkJCQkgPyBwX2RpY3QKKwkJCQkgOiBjdXJidWYtPmJfcF9kaWN0KSksCisJCQkgICAgY29tcGxldGVfcGF0LCBkaXIsCisJCQkJIGRpY3QgPyBkaWN0X2YgOiAwLCB0eXBlID09IENUUkxfWF9USEVTQVVSVVMpOworCSAgICBkaWN0ID0gTlVMTDsKKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkxfWF9UQUdTOgorCSAgICAvKiBzZXQgcF9pYyBhY2NvcmRpbmcgdG8gcF9pYywgcF9zY3MgYW5kIHBhdCBmb3IgZmluZF90YWdzKCkuICovCisJICAgIHNhdmVfcF9pYyA9IHBfaWM7CisJICAgIHBfaWMgPSBpZ25vcmVjYXNlKGNvbXBsZXRlX3BhdCk7CisKKwkgICAgLyogRmluZCB1cCB0byBUQUdfTUFOWSBtYXRjaGVzLiAgQXZvaWRzIHRoYXQgYW4gZW5vdXJtb3VzIG51bWJlcgorCSAgICAgKiBvZiBtYXRjaGVzIGlzIGZvdW5kIHdoZW4gY29tcGxldGVfcGF0IGlzIGVtcHR5ICovCisJICAgIGlmIChmaW5kX3RhZ3MoY29tcGxldGVfcGF0LCAmbnVtX21hdGNoZXMsICZtYXRjaGVzLAorCQkgICAgVEFHX1JFR0VYUCB8IFRBR19OQU1FUyB8IFRBR19OT0lDIHwKKwkJICAgIFRBR19JTlNfQ09NUCB8IChjdHJsX3hfbW9kZSA/IFRBR19WRVJCT1NFIDogMCksCisJCSAgICBUQUdfTUFOWSwgY3VyYnVmLT5iX2ZmbmFtZSkgPT0gT0sgJiYgbnVtX21hdGNoZXMgPiAwKQorCSAgICB7CisJCWluc19jb21wbF9hZGRfbWF0Y2hlcyhudW1fbWF0Y2hlcywgbWF0Y2hlcywgZGlyKTsKKwkgICAgfQorCSAgICBwX2ljID0gc2F2ZV9wX2ljOworCSAgICBicmVhazsKKworCWNhc2UgQ1RSTF9YX0ZJTEVTOgorCSAgICBpZiAoZXhwYW5kX3dpbGRjYXJkcygxLCAmY29tcGxldGVfcGF0LCAmbnVtX21hdGNoZXMsICZtYXRjaGVzLAorCQkJCSAgRVdfRklMRXxFV19ESVJ8RVdfQUREU0xBU0h8RVdfU0lMRU5UKSA9PSBPSykKKwkgICAgeworCisJCS8qIE1heSBjaGFuZ2UgaG9tZSBkaXJlY3RvcnkgYmFjayB0byAifiIuICovCisJCXRpbGRlX3JlcGxhY2UoY29tcGxldGVfcGF0LCBudW1fbWF0Y2hlcywgbWF0Y2hlcyk7CisJCWluc19jb21wbF9hZGRfbWF0Y2hlcyhudW1fbWF0Y2hlcywgbWF0Y2hlcywgZGlyKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgQ1RSTF9YX0NNRExJTkU6CisJICAgIGlmIChleHBhbmRfY21kbGluZSgmY29tcGxldGVfeHAsIGNvbXBsZXRlX3BhdCwKKwkJCShpbnQpU1RSTEVOKGNvbXBsZXRlX3BhdCksCisJCQkJCSAmbnVtX21hdGNoZXMsICZtYXRjaGVzKSA9PSBFWFBBTkRfT0spCisJCWluc19jb21wbF9hZGRfbWF0Y2hlcyhudW1fbWF0Y2hlcywgbWF0Y2hlcywgZGlyKTsKKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgkvKiBub3JtYWwgXlAvXk4gYW5kIF5YXkwgKi8KKwkgICAgLyoKKwkgICAgICogSWYgJ2luZmVyY2FzZScgaXMgc2V0LCBkb24ndCB1c2UgJ3NtYXJ0Y2FzZScgaGVyZQorCSAgICAgKi8KKwkgICAgc2F2ZV9wX3NjcyA9IHBfc2NzOworCSAgICBpZiAoaW5zX2J1Zi0+Yl9wX2luZikKKwkJcF9zY3MgPSBGQUxTRTsKKwkgICAgLyoJYnVmZmVycyBvdGhlciB0aGFuIGN1cmJ1ZiBhcmUgc2Nhbm5lZCBmcm9tIHRoZSBiZWdpbm5pbmcgb3IgdGhlCisJICAgICAqCWVuZCBidXQgbmV2ZXIgZnJvbSB0aGUgbWlkZGxlLCB0aHVzIHNldHRpbmcgbm93cmFwc2NhbiBpbiB0aGlzCisJICAgICAqCWJ1ZmZlcnMgaXMgYSBnb29kIGlkZWEsIG9uIHRoZSBvdGhlciBoYW5kLCB3ZSBhbHdheXMgc2V0CisJICAgICAqCXdyYXBzY2FuIGZvciBjdXJidWYgdG8gYXZvaWQgbWlzc2luZyBtYXRjaGVzIC0tIEFjZXZlZG8sV2ViYiAqLworCSAgICBzYXZlX3Bfd3MgPSBwX3dzOworCSAgICBpZiAoaW5zX2J1ZiAhPSBjdXJidWYpCisJCXBfd3MgPSBGQUxTRTsKKwkgICAgZWxzZSBpZiAoKmVfY3B0ID09ICcuJykKKwkJcF93cyA9IFRSVUU7CisJICAgIGZvciAoOzspCisJICAgIHsKKwkJaW50CXJldXNlID0gMDsKKworCQkvKiBjdHJsX3hfbW9kZSA9PSBDVFJMX1hfV0hPTEVfTElORSB8fCB3b3JkLXdpc2Ugc2VhcmNoIHRoYXQgaGFzCisJCSAqIGFkZGVkIGEgd29yZCB0aGF0IHdhcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lICovCisJCWlmICgJY3RybF94X21vZGUgPT0gQ1RSTF9YX1dIT0xFX0xJTkUKKwkJCXx8IChjb250aW51ZV9zdGF0dXMgJiBDT05UX1NPTCkpCisJCSAgICBmb3VuZF9uZXdfbWF0Y2ggPSBzZWFyY2hfZm9yX2V4YWN0X2xpbmUoaW5zX2J1ZiwgcG9zLAorCQkJCQkJCSAgICBkaXIsIGNvbXBsZXRlX3BhdCk7CisJCWVsc2UKKwkJICAgIGZvdW5kX25ld19tYXRjaCA9IHNlYXJjaGl0KE5VTEwsIGluc19idWYsIHBvcywgZGlyLAorCQkJCSBjb21wbGV0ZV9wYXQsIDFMLCBTRUFSQ0hfS0VFUCArIFNFQVJDSF9ORk1TRywKKwkJCQkJCQkJICAgICBSRV9MQVNUKTsKKwkJaWYgKCFzdGFydGVkX2NvbXBsZXRpb24pCisJCXsKKwkJICAgIC8qIHNldCBzdGFydGVkX2NvbXBsZXRpb24gZXZlbiBvbiBmYWlsICovCisJCSAgICBzdGFydGVkX2NvbXBsZXRpb24gPSBUUlVFOworCQkgICAgZmlyc3RfbWF0Y2hfcG9zID0gKnBvczsKKwkJICAgIGxhc3RfbWF0Y2hfcG9zID0gKnBvczsKKwkJfQorCQllbHNlIGlmIChmaXJzdF9tYXRjaF9wb3MubG51bSA9PSBsYXN0X21hdGNoX3Bvcy5sbnVtCisJCQkgJiYgZmlyc3RfbWF0Y2hfcG9zLmNvbCA9PSBsYXN0X21hdGNoX3Bvcy5jb2wpCisJCSAgICBmb3VuZF9uZXdfbWF0Y2ggPSBGQUlMOworCQlpZiAoZm91bmRfbmV3X21hdGNoID09IEZBSUwpCisJCXsKKwkJICAgIGlmIChpbnNfYnVmID09IGN1cmJ1ZikKKwkJCWZvdW5kX2FsbCA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorCisJCS8qIHdoZW4gQURESU5HLCB0aGUgdGV4dCBiZWZvcmUgdGhlIGN1cnNvciBtYXRjaGVzLCBza2lwIGl0ICovCisJCWlmICgJKGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfQURESU5HKSAmJiBpbnNfYnVmID09IGN1cmJ1ZgorCQkJJiYgaW5pLT5sbnVtID09IHBvcy0+bG51bQorCQkJJiYgaW5pLT5jb2wgID09IHBvcy0+Y29sKQorCQkgICAgY29udGludWU7CisJCXB0ciA9IG1sX2dldF9idWYoaW5zX2J1ZiwgcG9zLT5sbnVtLCBGQUxTRSkgKyBwb3MtPmNvbDsKKwkJaWYgKGN0cmxfeF9tb2RlID09IENUUkxfWF9XSE9MRV9MSU5FKQorCQl7CisJCSAgICBpZiAoY29udGludWVfc3RhdHVzICYgQ09OVF9BRERJTkcpCisJCSAgICB7CisJCQlpZiAocG9zLT5sbnVtID49IGluc19idWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkJCSAgICBjb250aW51ZTsKKwkJCXB0ciA9IG1sX2dldF9idWYoaW5zX2J1ZiwgcG9zLT5sbnVtICsgMSwgRkFMU0UpOworCQkJaWYgKCFwX3Bhc3RlKQorCQkJICAgIHB0ciA9IHNraXB3aGl0ZShwdHIpOworCQkgICAgfQorCQkgICAgbGVuID0gKGludClTVFJMRU4ocHRyKTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIHRtcF9wdHIgPSBwdHI7CisJCSAgICBpZiAoY29udGludWVfc3RhdHVzICYgQ09OVF9BRERJTkcpCisJCSAgICB7CisJCQl0bXBfcHRyICs9IGNvbXBsZXRpb25fbGVuZ3RoOworCQkJLyogU2tpcCBpZiBhbHJlYWR5IGluc2lkZSBhIHdvcmQuICovCisJCQlpZiAodmltX2lzd29yZHAodG1wX3B0cikpCisJCQkgICAgY29udGludWU7CisJCQkvKiBGaW5kIHN0YXJ0IG9mIG5leHQgd29yZC4gKi8KKwkJCXRtcF9wdHIgPSBmaW5kX3dvcmRfc3RhcnQodG1wX3B0cik7CisJCSAgICB9CisJCSAgICAvKiBGaW5kIGVuZCBvZiB0aGlzIHdvcmQuICovCisJCSAgICB0bXBfcHRyID0gZmluZF93b3JkX2VuZCh0bXBfcHRyKTsKKwkJICAgIGxlbiA9IChpbnQpKHRtcF9wdHIgLSBwdHIpOworCisJCSAgICBpZiAoKGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfQURESU5HKQorCQkJCQkJICAmJiBsZW4gPT0gY29tcGxldGlvbl9sZW5ndGgpCisJCSAgICB7CisJCQlpZiAocG9zLT5sbnVtIDwgaW5zX2J1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQkJeworCQkJICAgIC8qIFRyeSBuZXh0IGxpbmUsIGlmIGFueS4gdGhlIG5ldyB3b3JkIHdpbGwgYmUKKwkJCSAgICAgKiAiam9pbiIgYXMgaWYgdGhlIG5vcm1hbCBjb21tYW5kICJKIiB3YXMgdXNlZC4KKwkJCSAgICAgKiBJT1NJWkUgaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbgorCQkJICAgICAqIGNvbXBsZXRpb25fbGVuZ3RoLCBzbyB0aGUgbmV4dCBTVFJOQ1BZIGFsd2F5cworCQkJICAgICAqIHdvcmtzIC0tIEFjZXZlZG8gKi8KKwkJCSAgICBTVFJOQ1BZKElPYnVmZiwgcHRyLCBsZW4pOworCQkJICAgIHB0ciA9IG1sX2dldF9idWYoaW5zX2J1ZiwgcG9zLT5sbnVtICsgMSwgRkFMU0UpOworCQkJICAgIHRtcF9wdHIgPSBwdHIgPSBza2lwd2hpdGUocHRyKTsKKwkJCSAgICAvKiBGaW5kIHN0YXJ0IG9mIG5leHQgd29yZC4gKi8KKwkJCSAgICB0bXBfcHRyID0gZmluZF93b3JkX3N0YXJ0KHRtcF9wdHIpOworCQkJICAgIC8qIEZpbmQgZW5kIG9mIG5leHQgd29yZC4gKi8KKwkJCSAgICB0bXBfcHRyID0gZmluZF93b3JkX2VuZCh0bXBfcHRyKTsKKwkJCSAgICBpZiAodG1wX3B0ciA+IHB0cikKKwkJCSAgICB7CisJCQkJaWYgKCpwdHIgIT0gJyknICYmIElPYnVmZltsZW4tMV0gIT0gVEFCKQorCQkJCXsKKwkJCQkgICAgaWYgKElPYnVmZltsZW4tMV0gIT0gJyAnKQorCQkJCQlJT2J1ZmZbbGVuKytdID0gJyAnOworCQkJCSAgICAvKiBJT2J1ZiA9fiAiXGsuKiAiLCB0aHVzIGxlbiA+PSAyICovCisJCQkJICAgIGlmIChwX2pzCisJCQkJCSYmIChJT2J1ZmZbbGVuLTJdID09ICcuJworCQkJCQkgICAgfHwgKHZpbV9zdHJjaHIocF9jcG8sIENQT19KT0lOU1ApCisJCQkJCQkJCSAgICAgICA9PSBOVUxMCisJCQkJCQkmJiAoSU9idWZmW2xlbi0yXSA9PSAnPycKKwkJCQkJCSAgICB8fCBJT2J1ZmZbbGVuLTJdID09ICchJykpKSkKKwkJCQkJSU9idWZmW2xlbisrXSA9ICcgJzsKKwkJCQl9CisJCQkJLyogY29weSBhcyBtdWNoIGFzIHBvc2libGUgb2YgdGhlIG5ldyB3b3JkICovCisJCQkJaWYgKHRtcF9wdHIgLSBwdHIgPj0gSU9TSVpFIC0gbGVuKQorCQkJCSAgICB0bXBfcHRyID0gcHRyICsgSU9TSVpFIC0gbGVuIC0gMTsKKwkJCQlTVFJOQ1BZKElPYnVmZiArIGxlbiwgcHRyLCB0bXBfcHRyIC0gcHRyKTsKKwkJCQlsZW4gKz0gKGludCkodG1wX3B0ciAtIHB0cik7CisJCQkJcmV1c2UgfD0gQ09OVF9TX0lQT1M7CisJCQkgICAgfQorCQkJICAgIElPYnVmZltsZW5dID0gTlVMOworCQkJICAgIHB0ciA9IElPYnVmZjsKKwkJCX0KKwkJCWlmIChsZW4gPT0gY29tcGxldGlvbl9sZW5ndGgpCisJCQkgICAgY29udGludWU7CisJCSAgICB9CisJCX0KKwkJaWYgKGluc19jb21wbF9hZGRfaW5mZXJjYXNlKHB0ciwgbGVuLAorCQkJICAgIGluc19idWYgPT0gY3VyYnVmID8gIE5VTEwgOiBpbnNfYnVmLT5iX3NmbmFtZSwKKwkJCQkJCQkgIGRpciwgcmV1c2UpICE9IEZBSUwpCisJCXsKKwkJICAgIGZvdW5kX25ld19tYXRjaCA9IE9LOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICBwX3NjcyA9IHNhdmVfcF9zY3M7CisJICAgIHBfd3MgPSBzYXZlX3Bfd3M7CisJfQorCS8qIGNoZWNrIGlmIGN1cnJfbWF0Y2ggaGFzIGNoYW5nZWQsIChlLmcuIG90aGVyIHR5cGUgb2YgZXhwYW5zaW9uCisJICogYWRkZWQgc29tZW50aGluZykgKi8KKwlpZiAoY3Vycl9tYXRjaCAhPSBvbGRfbWF0Y2gpCisJICAgIGZvdW5kX25ld19tYXRjaCA9IE9LOworCisJLyogYnJlYWsgdGhlIGxvb3AgZm9yIHNwZWNpYWxpemVkIG1vZGVzICh1c2UgJ2NvbXBsZXRlJyBqdXN0IGZvciB0aGUKKwkgKiBnZW5lcmljIGN0cmxfeF9tb2RlID09IDApIG9yIHdoZW4gd2UndmUgZm91bmQgYSBuZXcgbWF0Y2ggKi8KKwlpZiAoKGN0cmxfeF9tb2RlICE9IDAgJiYgY3RybF94X21vZGUgIT0gQ1RSTF9YX1dIT0xFX0xJTkUpCisJCXx8IGZvdW5kX25ld19tYXRjaCAhPSBGQUlMKQorCSAgICBicmVhazsKKworCS8qIE1hcmsgYSBidWZmZXIgc2Nhbm5lZCB3aGVuIGl0IGhhcyBiZWVuIHNjYW5uZWQgY29tcGxldGVseSAqLworCWlmICh0eXBlID09IDAgfHwgdHlwZSA9PSBDVFJMX1hfUEFUSF9QQVRURVJOUykKKwkgICAgaW5zX2J1Zi0+Yl9zY2FubmVkID0gVFJVRTsKKworCXN0YXJ0ZWRfY29tcGxldGlvbiA9IEZBTFNFOworICAgIH0KKyAgICBzdGFydGVkX2NvbXBsZXRpb24gPSBUUlVFOworCisgICAgaWYgKChjdHJsX3hfbW9kZSA9PSAwIHx8IGN0cmxfeF9tb2RlID09IENUUkxfWF9XSE9MRV9MSU5FKQorCSAgICAmJiAqZV9jcHQgPT0gTlVMKQkJLyogR290IHRvIGVuZCBvZiAnY29tcGxldGUnICovCisJZm91bmRfbmV3X21hdGNoID0gRkFJTDsKKworICAgIGkgPSAtMTsJCS8qIHRvdGFsIG9mIG1hdGNoZXMsIHVua25vd24gKi8KKyAgICBpZiAoZm91bmRfbmV3X21hdGNoID09IEZBSUwKKwkgICAgfHwgKGN0cmxfeF9tb2RlICE9IDAgJiYgY3RybF94X21vZGUgIT0gQ1RSTF9YX1dIT0xFX0xJTkUpKQorCWkgPSBpbnNfY29tcGxfbWFrZV9jeWNsaWMoKTsKKworICAgIC8qIElmIHNldmVyYWwgbWF0Y2hlcyB3ZXJlIGFkZGVkIChGT1JXQVJEKSBvciB0aGUgc2VhcmNoIGZhaWxlZCBhbmQgaGFzCisgICAgICoganVzdCBiZWVuIG1hZGUgY3ljbGljIHRoZW4gd2UgaGF2ZSB0byBtb3ZlIGN1cnJfbWF0Y2ggdG8gdGhlIG5leHQgb3IKKyAgICAgKiBwcmV2aW91cyBlbnRyeSAoaWYgYW55KSAtLSBBY2V2ZWRvICovCisgICAgY3Vycl9tYXRjaCA9IGRpciA9PSBGT1JXQVJEID8gb2xkX21hdGNoLT5uZXh0IDogb2xkX21hdGNoLT5wcmV2OworICAgIGlmIChjdXJyX21hdGNoID09IE5VTEwpCisJY3Vycl9tYXRjaCA9IG9sZF9tYXRjaDsKKyAgICByZXR1cm4gaTsKK30KKworLyogRGVsZXRlIHRoZSBvbGQgdGV4dCBiZWluZyBjb21wbGV0ZWQuICovCisgICAgc3RhdGljIHZvaWQKK2luc19jb21wbF9kZWxldGUoKQoreworICAgIGludAkgICAgaTsKKworICAgIC8qCisgICAgICogSW4gaW5zZXJ0IG1vZGU6IERlbGV0ZSB0aGUgdHlwZWQgcGFydC4KKyAgICAgKiBJbiByZXBsYWNlIG1vZGU6IFB1dCB0aGUgb2xkIGNoYXJhY3RlcnMgYmFjaywgaWYgYW55LgorICAgICAqLworICAgIGkgPSBjb21wbGV0ZV9jb2wgKyAoY29udGludWVfc3RhdHVzICYgQ09OVF9BRERJTkcgPyBjb21wbGV0aW9uX2xlbmd0aCA6IDApOworICAgIGJhY2tzcGFjZV91bnRpbF9jb2x1bW4oaSk7CisgICAgY2hhbmdlZF9jbGluZV9iZWZfY3VycygpOworfQorCisvKiBJbnNlcnQgdGhlIG5ldyB0ZXh0IGJlaW5nIGNvbXBsZXRlZC4gKi8KKyAgICBzdGF0aWMgdm9pZAoraW5zX2NvbXBsX2luc2VydCgpCit7CisgICAgaW5zX2J5dGVzKHNob3duX21hdGNoLT5zdHIgKyBjdXJ3aW4tPndfY3Vyc29yLmNvbCAtIGNvbXBsZXRlX2NvbCk7Cit9CisKKy8qCisgKiBGaWxsIGluIHRoZSBuZXh0IGNvbXBsZXRpb24gaW4gdGhlIGN1cnJlbnQgZGlyZWN0aW9uLgorICogSWYgYWxsb3dfZ2V0X2V4cGFuc2lvbiBpcyBUUlVFLCB0aGVuIHdlIG1heSBjYWxsIGluc19jb21wbF9nZXRfZXhwKCkgdG8gZ2V0CisgKiBtb3JlIGNvbXBsZXRpb25zLiAgSWYgaXQgaXMgRkFMU0UsIHRoZW4gd2UganVzdCBkbyBub3RoaW5nIHdoZW4gdGhlcmUgYXJlCisgKiBubyBtb3JlIGNvbXBsZXRpb25zIGluIGEgZ2l2ZW4gZGlyZWN0aW9uLiAgVGhlIGxhdHRlciBjYXNlIGlzIHVzZWQgd2hlbiB3ZQorICogYXJlIHN0aWxsIGluIHRoZSBtaWRkbGUgb2YgZmluZGluZyBjb21wbGV0aW9ucywgdG8gYWxsb3cgYnJvd3NpbmcgdGhyb3VnaAorICogdGhlIG9uZXMgZm91bmQgc28gZmFyLgorICogUmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2YgbWF0Y2hlcywgb3IgLTEgaWYgc3RpbGwgdW5rbm93biAtLSB3ZWJiLgorICoKKyAqIGN1cnJfbWF0Y2ggaXMgY3VycmVudGx5IGJlaW5nIHVzZWQgYnkgaW5zX2NvbXBsX2dldF9leHAoKSwgc28gd2UgdXNlCisgKiBzaG93bl9tYXRjaCBoZXJlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgcmVjdXJzaXZlbHkgb25jZSBvbmx5LiAgRmlyc3Qgd2l0aAorICogYWxsb3dfZ2V0X2V4cGFuc2lvbiBUUlVFLCB3aGljaCBjYWxscyBpbnNfY29tcGxfZ2V0X2V4cCgpLCB3aGljaCBpbiB0dXJuCisgKiBjYWxscyB0aGlzIGZ1bmN0aW9uIHdpdGggYWxsb3dfZ2V0X2V4cGFuc2lvbiBGQUxTRS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2luc19jb21wbF9uZXh0KGFsbG93X2dldF9leHBhbnNpb24pCisgICAgaW50CSAgICBhbGxvd19nZXRfZXhwYW5zaW9uOworeworICAgIGludAkgICAgbnVtX21hdGNoZXMgPSAtMTsKKyAgICBpbnQJICAgIGk7CisKKyAgICBpZiAoYWxsb3dfZ2V0X2V4cGFuc2lvbikKKyAgICB7CisJLyogRGVsZXRlIG9sZCB0ZXh0IHRvIGJlIHJlcGxhY2VkICovCisJaW5zX2NvbXBsX2RlbGV0ZSgpOworICAgIH0KKyAgICBjb21wbGV0aW9uX3BlbmRpbmcgPSBGQUxTRTsKKyAgICBpZiAoc2hvd25fZGlyZWN0aW9uID09IEZPUldBUkQgJiYgc2hvd25fbWF0Y2gtPm5leHQgIT0gTlVMTCkKKwlzaG93bl9tYXRjaCA9IHNob3duX21hdGNoLT5uZXh0OworICAgIGVsc2UgaWYgKHNob3duX2RpcmVjdGlvbiA9PSBCQUNLV0FSRCAmJiBzaG93bl9tYXRjaC0+cHJldiAhPSBOVUxMKQorCXNob3duX21hdGNoID0gc2hvd25fbWF0Y2gtPnByZXY7CisgICAgZWxzZQorICAgIHsKKwljb21wbGV0aW9uX3BlbmRpbmcgPSBUUlVFOworCWlmIChhbGxvd19nZXRfZXhwYW5zaW9uKQorCXsKKwkgICAgbnVtX21hdGNoZXMgPSBpbnNfY29tcGxfZ2V0X2V4cCgmaW5pdGlhbF9wb3MsIGNvbXBsZXRlX2RpcmVjdGlvbik7CisJICAgIGlmIChjb21wbGV0aW9uX3BlbmRpbmcpCisJICAgIHsKKwkJaWYgKGNvbXBsZXRlX2RpcmVjdGlvbiA9PSBzaG93bl9kaXJlY3Rpb24pCisJCSAgICBzaG93bl9tYXRjaCA9IGN1cnJfbWF0Y2g7CisJICAgIH0KKwl9CisJZWxzZQorCSAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogSW5zZXJ0IHRoZSB0ZXh0IG9mIHRoZSBuZXcgY29tcGxldGlvbiAqLworICAgIGluc19jb21wbF9pbnNlcnQoKTsKKworICAgIGlmICghYWxsb3dfZ2V0X2V4cGFuc2lvbikKKyAgICB7CisJLyogRGlzcGxheSB0aGUgY3VycmVudCBtYXRjaC4gKi8KKwl1cGRhdGVfc2NyZWVuKDApOworCisJLyogRGVsZXRlIG9sZCB0ZXh0IHRvIGJlIHJlcGxhY2VkLCBzaW5jZSB3ZSdyZSBzdGlsbCBzZWFyY2hpbmcgYW5kCisJICogZG9uJ3Qgd2FudCB0byBtYXRjaCBvdXJzZWx2ZXMhICAqLworCWluc19jb21wbF9kZWxldGUoKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNob3cgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIG1hdGNoIChpZiBhbnkpCisgICAgICogVHJ1bmNhdGUgdGhlIGZpbGUgbmFtZSB0byBhdm9pZCBhIHdhaXQgZm9yIHJldHVybi4KKyAgICAgKi8KKyAgICBpZiAoc2hvd25fbWF0Y2gtPmZuYW1lICE9IE5VTEwpCisgICAgeworCVNUUkNQWShJT2J1ZmYsICJtYXRjaCBpbiBmaWxlICIpOworCWkgPSAodmltX3N0cnNpemUoc2hvd25fbWF0Y2gtPmZuYW1lKSArIDE2KSAtIHNjX2NvbDsKKwlpZiAoaSA8PSAwKQorCSAgICBpID0gMDsKKwllbHNlCisJICAgIFNUUkNBVChJT2J1ZmYsICI8Iik7CisJU1RSQ0FUKElPYnVmZiwgc2hvd25fbWF0Y2gtPmZuYW1lICsgaSk7CisJbXNnKElPYnVmZik7CisJcmVkcmF3X2NtZGxpbmUgPSBGQUxTRTsJICAgIC8qIGRvbid0IG92ZXJ3cml0ZSEgKi8KKyAgICB9CisKKyAgICByZXR1cm4gbnVtX21hdGNoZXM7Cit9CisKKy8qCisgKiBDYWxsIHRoaXMgd2hpbGUgZmluZGluZyBjb21wbGV0aW9ucywgdG8gY2hlY2sgd2hldGhlciB0aGUgdXNlciBoYXMgaGl0IGEga2V5CisgKiB0aGF0IHNob3VsZCBjaGFuZ2UgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgY29tcGxldGlvbiwgb3IgZXhpdCBjb21wbGV0aW9uCisgKiBtb2RlLiAgQWxzbywgd2hlbiBjb21wbGV0aW9uX3BlbmRpbmcgaXMgVFJVRSwgc2hvdyBhIGNvbXBsZXRpb24gYXMgc29vbiBhcworICogcG9zc2libGUuIC0tIHdlYmIKKyAqLworICAgIHZvaWQKK2luc19jb21wbF9jaGVja19rZXlzKCkKK3sKKyAgICBzdGF0aWMgaW50CWNvdW50ID0gMDsKKworICAgIGludAkgICAgYzsKKworICAgIC8qIERvbid0IGNoZWNrIHdoZW4gcmVhZGluZyBrZXlzIGZyb20gYSBzY3JpcHQuICBUaGF0IHdvdWxkIGJyZWFrIHRoZSB0ZXN0CisgICAgICogc2NyaXB0cyAqLworICAgIGlmICh1c2luZ19zY3JpcHQoKSkKKwlyZXR1cm47CisKKyAgICAvKiBPbmx5IGRvIHRoaXMgYXQgcmVndWxhciBpbnRlcnZhbHMgKi8KKyAgICBpZiAoKytjb3VudCA8IENIRUNLX0tFWVNfVElNRSkKKwlyZXR1cm47CisgICAgY291bnQgPSAwOworCisgICAgKytub19tYXBwaW5nOworICAgIGMgPSB2cGVla2NfYW55KCk7CisgICAgLS1ub19tYXBwaW5nOworICAgIGlmIChjICE9IE5VTCkKKyAgICB7CisJaWYgKHZpbV9pc19jdHJsX3hfa2V5KGMpICYmIGMgIT0gQ3RybF9YICYmIGMgIT0gQ3RybF9SKQorCXsKKwkgICAgYyA9IHNhZmVfdmdldGMoKTsJLyogRWF0IHRoZSBjaGFyYWN0ZXIgKi8KKwkgICAgaWYgKGMgPT0gQ3RybF9QIHx8IGMgPT0gQ3RybF9MKQorCQlzaG93bl9kaXJlY3Rpb24gPSBCQUNLV0FSRDsKKwkgICAgZWxzZQorCQlzaG93bl9kaXJlY3Rpb24gPSBGT1JXQVJEOworCSAgICAodm9pZClpbnNfY29tcGxfbmV4dChGQUxTRSk7CisJfQorCWVsc2UgaWYgKGMgIT0gQ3RybF9SKQorCSAgICBjb21wbGV0aW9uX2ludGVycnVwdGVkID0gVFJVRTsKKyAgICB9CisgICAgaWYgKGNvbXBsZXRpb25fcGVuZGluZyAmJiAhZ290X2ludCkKKwkodm9pZClpbnNfY29tcGxfbmV4dChGQUxTRSk7Cit9CisKKy8qCisgKiBEbyBJbnNlcnQgbW9kZSBjb21wbGV0aW9uLgorICogQ2FsbGVkIHdoZW4gY2hhcmFjdGVyICJjIiB3YXMgdHlwZWQsIHdoaWNoIGhhcyBhIG1lYW5pbmcgZm9yIGNvbXBsZXRpb24uCisgKiBSZXR1cm5zIE9LIGlmIGNvbXBsZXRpb24gd2FzIGRvbmUsIEZBSUwgaWYgc29tZXRoaW5nIGZhaWxlZCAob3V0IG9mIG1lbSkuCisgKi8KKyAgICBzdGF0aWMgaW50CitpbnNfY29tcGxldGUoYykKKyAgICBpbnQJCSAgICBjOworeworICAgIGNoYXJfdQkgICAgKmxpbmU7CisgICAgY2hhcl91CSAgICAqdG1wX3B0ciA9IE5VTEw7CQkvKiBpbml0IGZvciBnY2MgKi8KKyAgICBpbnQJCSAgICB0ZW1wID0gMDsKKworICAgIGlmIChjID09IEN0cmxfUCB8fCBjID09IEN0cmxfTCkKKwljb21wbGV0ZV9kaXJlY3Rpb24gPSBCQUNLV0FSRDsKKyAgICBlbHNlCisJY29tcGxldGVfZGlyZWN0aW9uID0gRk9SV0FSRDsKKyAgICBpZiAoIXN0YXJ0ZWRfY29tcGxldGlvbikKKyAgICB7CisJLyogRmlyc3QgdGltZSB3ZSBoaXQgXk4gb3IgXlAgKGluIGEgcm93LCBJIG1lYW4pICovCisKKwkvKiBUdXJuIG9mZiAnc20nIHNvIHdlIGRvbid0IHNob3cgbWF0Y2hlcyB3aXRoIF5YXkwgKi8KKwlzYXZlX3NtID0gcF9zbTsKKwlwX3NtID0gRkFMU0U7CisKKwlkaWRfYWkgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisJZGlkX3NpID0gRkFMU0U7CisJY2FuX3NpID0gRkFMU0U7CisJY2FuX3NpX2JhY2sgPSBGQUxTRTsKKyNlbmRpZgorCWlmIChzdG9wX2Fycm93KCkgPT0gRkFJTCkKKwkgICAgcmV0dXJuIEZBSUw7CisKKwlsaW5lID0gbWxfZ2V0KGN1cndpbi0+d19jdXJzb3IubG51bSk7CisJY29tcGxldGVfY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisKKwkvKiBpZiB0aGlzIHNhbWUgY3RybF94X21vZGUgaGFzIGJlZW4gaW50ZXJydXB0ZWQgdXNlIHRoZSB0ZXh0IGZyb20KKwkgKiAiaW5pdGlhbF9wb3MiIHRvIHRoZSBjdXJzb3IgYXMgYSBwYXR0ZXJuIHRvIGFkZCBhIG5ldyB3b3JkIGluc3RlYWQKKwkgKiBvZiBleHBhbmQgdGhlIG9uZSBiZWZvcmUgdGhlIGN1cnNvciwgaW4gd29yZC13aXNlIGlmICJpbml0aWFsX3BvcyIKKwkgKiBpcyBub3QgaW4gdGhlIHNhbWUgbGluZSBhcyB0aGUgY3Vyc29yIHRoZW4gZml4IGl0ICh0aGUgbGluZSBoYXMKKwkgKiBiZWVuIHNwbGl0IGJlY2F1c2UgaXQgd2FzIGxvbmdlciB0aGFuICd0dycpLiAgaWYgU09MIGlzIHNldCB0aGVuCisJICogc2tpcCB0aGUgcHJldmlvdXMgcGF0dGVybiwgYSB3b3JkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgaGFzCisJICogYmVlbiBpbnNlcnRlZCwgd2UnbGwgbG9vayBmb3IgdGhhdCAgLS0gQWNldmVkby4gKi8KKwlpZiAoKGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfSU5UUlBUKSAmJiBjb250aW51ZV9tb2RlID09IGN0cmxfeF9tb2RlKQorCXsKKwkgICAgLyoKKwkgICAgICogaXQgaXMgYSBjb250aW51ZWQgc2VhcmNoCisJICAgICAqLworCSAgICBjb250aW51ZV9zdGF0dXMgJj0gfkNPTlRfSU5UUlBUOwkvKiByZW1vdmUgSU5UUlBUICovCisJICAgIGlmIChjdHJsX3hfbW9kZSA9PSAwIHx8IGN0cmxfeF9tb2RlID09IENUUkxfWF9QQVRIX1BBVFRFUk5TCisJCQkJCXx8IGN0cmxfeF9tb2RlID09IENUUkxfWF9QQVRIX0RFRklORVMpCisJICAgIHsKKwkJaWYgKGluaXRpYWxfcG9zLmxudW0gIT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCQl7CisJCSAgICAvKiBsaW5lIChwcm9iYWJseSkgd3JhcHBlZCwgc2V0IGluaXRpYWxfcG9zIHRvIHRoZSBmaXJzdAorCQkgICAgICogbm9uX2JsYW5rIGluIHRoZSBsaW5lLCBpZiBpdCBpcyBub3QgYSB3b3JkY2hhciBpbmNsdWRlCisJCSAgICAgKiBpdCB0byBnZXQgYSBiZXR0ZXIgcGF0dGVybiwgYnV0IHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUKKwkJICAgICAqICJcXDwiIHByZWZpeCwgY2hlY2sgaXQgYmVsbG93ICovCisJCSAgICB0bXBfcHRyID0gc2tpcHdoaXRlKGxpbmUpOworCQkgICAgaW5pdGlhbF9wb3MuY29sID0gKGNvbG5yX1QpICh0bXBfcHRyIC0gbGluZSk7CisJCSAgICBpbml0aWFsX3Bvcy5sbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQkgICAgY29udGludWVfc3RhdHVzICY9IH5DT05UX1NPTDsgICAgLyogY2xlYXIgU09MIGlmIHByZXNlbnQgKi8KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIC8qIFNfSVBPUyB3YXMgc2V0IHdoZW4gd2UgaW5zZXJ0ZWQgYSB3b3JkIHRoYXQgd2FzIGF0IHRoZQorCQkgICAgICogYmVnaW5uaW5nIG9mIHRoZSBsaW5lLCB3aGljaCBtZWFucyB0aGF0IHdlJ2xsIGdvIHRvIFNPTAorCQkgICAgICogbW9kZSBidXQgZmlyc3Qgd2UgbmVlZCB0byByZWRlZmluZSBpbml0aWFsX3BvcyAqLworCQkgICAgaWYgKGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfU19JUE9TKQorCQkgICAgeworCQkJY29udGludWVfc3RhdHVzIHw9IENPTlRfU09MOworCQkJaW5pdGlhbF9wb3MuY29sID0gKGNvbG5yX1QpIChza2lwd2hpdGUobGluZSArIGNvbXBsZXRpb25fbGVuZ3RoICsKKwkJCQkJCSAgICBpbml0aWFsX3Bvcy5jb2wpIC0gbGluZSk7CisJCSAgICB9CisJCSAgICB0bXBfcHRyID0gbGluZSArIGluaXRpYWxfcG9zLmNvbDsKKwkJfQorCQl0ZW1wID0gY3Vyd2luLT53X2N1cnNvci5jb2wgLSAoaW50KSh0bXBfcHRyIC0gbGluZSk7CisJCS8qIElPYnVmIGlzIHVzZWQgdG8gYWRkIGEgIndvcmQgZnJvbSB0aGUgbmV4dCBsaW5lIiB3b3VsZCB3ZQorCQkgKiBoYXZlIGVub3VnaCBzcGFjZT8gIGp1c3QgYmVpbmcgcGFyYW5vaWMgKi8KKyNkZWZpbmUJTUlOX1NQQUNFIDc1CisJCWlmICh0ZW1wID4gKElPU0laRSAtIE1JTl9TUEFDRSkpCisJCXsKKwkJICAgIGNvbnRpbnVlX3N0YXR1cyAmPSB+Q09OVF9TT0w7CisJCSAgICB0ZW1wID0gKElPU0laRSAtIE1JTl9TUEFDRSk7CisJCSAgICB0bXBfcHRyID0gbGluZSArIGN1cndpbi0+d19jdXJzb3IuY29sIC0gdGVtcDsKKwkJfQorCQljb250aW51ZV9zdGF0dXMgfD0gQ09OVF9BRERJTkcgfCBDT05UX05fQUREUzsKKwkJaWYgKHRlbXAgPCAxKQorCQkgICAgY29udGludWVfc3RhdHVzICY9IENPTlRfTE9DQUw7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoY3RybF94X21vZGUgPT0gQ1RSTF9YX1dIT0xFX0xJTkUpCisJCWNvbnRpbnVlX3N0YXR1cyA9IENPTlRfQURESU5HIHwgQ09OVF9OX0FERFM7CisJICAgIGVsc2UKKwkJY29udGludWVfc3RhdHVzID0gMDsKKwl9CisJZWxzZQorCSAgICBjb250aW51ZV9zdGF0dXMgJj0gQ09OVF9MT0NBTDsKKworCWlmICghKGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfQURESU5HKSkJLyogbm9ybWFsIGV4cGFuc2lvbiAqLworCXsKKwkgICAgY29udGludWVfbW9kZSA9IGN0cmxfeF9tb2RlOworCSAgICBpZiAoY3RybF94X21vZGUgIT0gMCkJLyogUmVtb3ZlIExPQ0FMIGlmIGN0cmxfeF9tb2RlICE9IDAgKi8KKwkJY29udGludWVfc3RhdHVzID0gMDsKKwkgICAgY29udGludWVfc3RhdHVzIHw9IENPTlRfTl9BRERTOworCSAgICBpbml0aWFsX3BvcyA9IGN1cndpbi0+d19jdXJzb3I7CisJICAgIHRlbXAgPSAoaW50KWNvbXBsZXRlX2NvbDsKKwkgICAgdG1wX3B0ciA9IGxpbmU7CisJfQorCisJLyogV29yayBvdXQgY29tcGxldGlvbiBwYXR0ZXJuIGFuZCBvcmlnaW5hbCB0ZXh0IC0tIHdlYmIgKi8KKwlpZiAoY3RybF94X21vZGUgPT0gMCB8fCAoY3RybF94X21vZGUgJiBDVFJMX1hfV0FOVF9JREVOVCkpCisJeworCSAgICBpZiAoICAgICAgIChjb250aW51ZV9zdGF0dXMgJiBDT05UX1NPTCkKKwkJICAgIHx8IGN0cmxfeF9tb2RlID09IENUUkxfWF9QQVRIX0RFRklORVMpCisJICAgIHsKKwkJaWYgKCEoY29udGludWVfc3RhdHVzICYgQ09OVF9BRERJTkcpKQorCQl7CisJCSAgICB3aGlsZSAoLS10ZW1wID49IDAgJiYgdmltX2lzSURjKGxpbmVbdGVtcF0pKQorCQkJOworCQkgICAgdG1wX3B0ciArPSArK3RlbXA7CisJCSAgICB0ZW1wID0gY29tcGxldGVfY29sIC0gdGVtcDsKKwkJfQorCQlpZiAocF9pYykKKwkJICAgIGNvbXBsZXRlX3BhdCA9IHN0cl9mb2xkY2FzZSh0bXBfcHRyLCB0ZW1wKTsKKwkJZWxzZQorCQkgICAgY29tcGxldGVfcGF0ID0gdmltX3N0cm5zYXZlKHRtcF9wdHIsIHRlbXApOworCQlpZiAoY29tcGxldGVfcGF0ID09IE5VTEwpCisJCSAgICByZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICBlbHNlIGlmIChjb250aW51ZV9zdGF0dXMgJiBDT05UX0FERElORykKKwkgICAgeworCQljaGFyX3UJICAgICpwcmVmaXggPSAoY2hhcl91ICopIlxcPCI7CisKKwkJLyogd2UgbmVlZCAzIGV4dHJhIGNoYXJzLCAxIGZvciB0aGUgTlVMIGFuZAorCQkgKiAyID49IHN0cmxlbihwcmVmaXgpCS0tIEFjZXZlZG8gKi8KKwkJY29tcGxldGVfcGF0ID0gYWxsb2MocXVvdGVfbWV0YShOVUxMLCB0bXBfcHRyLCB0ZW1wKSArIDMpOworCQlpZiAoY29tcGxldGVfcGF0ID09IE5VTEwpCisJCSAgICByZXR1cm4gRkFJTDsKKwkJaWYgKCF2aW1faXN3b3JkcCh0bXBfcHRyKQorCQkJfHwgKHRtcF9wdHIgPiBsaW5lCisJCQkgICAgJiYgKAorI2lmZGVmIEZFQVRfTUJZVEUKKwkJCQl2aW1faXN3b3JkcChtYl9wcmV2cHRyKGxpbmUsIHRtcF9wdHIpKQorI2Vsc2UKKwkJCQl2aW1faXN3b3JkYygqKHRtcF9wdHIgLSAxKSkKKyNlbmRpZgorCQkJCSkpKQorCQkgICAgcHJlZml4ID0gKGNoYXJfdSAqKSIiOworCQlTVFJDUFkoKGNoYXIgKiljb21wbGV0ZV9wYXQsIHByZWZpeCk7CisJCSh2b2lkKXF1b3RlX21ldGEoY29tcGxldGVfcGF0ICsgU1RSTEVOKHByZWZpeCksIHRtcF9wdHIsIHRlbXApOworCSAgICB9CisJICAgIGVsc2UgaWYgKAorI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIC0tdGVtcCA8IDAgfHwgIXZpbV9pc3dvcmRwKG1iX3ByZXZwdHIobGluZSwKKwkJCQkJCQkgICAgIGxpbmUgKyB0ZW1wICsgMSkpCisjZWxzZQorCQkgICAgLS10ZW1wIDwgMCB8fCAhdmltX2lzd29yZGMobGluZVt0ZW1wXSkKKyNlbmRpZgorCQkgICAgKQorCSAgICB7CisJCS8qIE1hdGNoIGFueSB3b3JkIG9mIGF0IGxlYXN0IHR3byBjaGFycyAqLworCQljb21wbGV0ZV9wYXQgPSB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopIlxcPFxca1xcayIpOworCQlpZiAoY29tcGxldGVfcGF0ID09IE5VTEwpCisJCSAgICByZXR1cm4gRkFJTDsKKwkJdG1wX3B0ciArPSBjb21wbGV0ZV9jb2w7CisJCXRlbXAgPSAwOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwkJLyogU2VhcmNoIHRoZSBwb2ludCBvZiBjaGFuZ2UgY2xhc3Mgb2YgbXVsdGlieXRlIGNoYXJhY3RlcgorCQkgKiBvciBub3QgYSB3b3JkIHNpbmdsZSBieXRlIGNoYXJhY3RlciBiYWNrd2FyZC4gICovCisJCWlmIChoYXNfbWJ5dGUpCisJCXsKKwkJICAgIGludCBiYXNlX2NsYXNzOworCQkgICAgaW50IGhlYWRfb2ZmOworCisJCSAgICB0ZW1wIC09ICgqbWJfaGVhZF9vZmYpKGxpbmUsIGxpbmUgKyB0ZW1wKTsKKwkJICAgIGJhc2VfY2xhc3MgPSBtYl9nZXRfY2xhc3MobGluZSArIHRlbXApOworCQkgICAgd2hpbGUgKC0tdGVtcCA+PSAwKQorCQkgICAgeworCQkJaGVhZF9vZmYgPSAoKm1iX2hlYWRfb2ZmKShsaW5lLCBsaW5lICsgdGVtcCk7CisJCQlpZiAoYmFzZV9jbGFzcyAhPSBtYl9nZXRfY2xhc3MobGluZSArIHRlbXAgLSBoZWFkX29mZikpCisJCQkgICAgYnJlYWs7CisJCQl0ZW1wIC09IGhlYWRfb2ZmOworCQkgICAgfQorCQl9CisJCWVsc2UKKyNlbmRpZgorCQkgICAgd2hpbGUgKC0tdGVtcCA+PSAwICYmIHZpbV9pc3dvcmRjKGxpbmVbdGVtcF0pKQorCQkJOworCQl0bXBfcHRyICs9ICsrdGVtcDsKKwkJaWYgKCh0ZW1wID0gKGludCljb21wbGV0ZV9jb2wgLSB0ZW1wKSA9PSAxKQorCQl7CisJCSAgICAvKiBPbmx5IG1hdGNoIHdvcmQgd2l0aCBhdCBsZWFzdCB0d28gY2hhcnMgLS0gd2ViYgorCQkgICAgICogdGhlcmUncyBubyBuZWVkIHRvIGNhbGwgcXVvdGVfbWV0YSwKKwkJICAgICAqIGFsbG9jKDcpIGlzIGVub3VnaCAgLS0gQWNldmVkbworCQkgICAgICovCisJCSAgICBjb21wbGV0ZV9wYXQgPSBhbGxvYyg3KTsKKwkJICAgIGlmIChjb21wbGV0ZV9wYXQgPT0gTlVMTCkKKwkJCXJldHVybiBGQUlMOworCQkgICAgU1RSQ1BZKChjaGFyICopY29tcGxldGVfcGF0LCAiXFw8Iik7CisJCSAgICAodm9pZClxdW90ZV9tZXRhKGNvbXBsZXRlX3BhdCArIDIsIHRtcF9wdHIsIDEpOworCQkgICAgU1RSQ0FUKChjaGFyICopY29tcGxldGVfcGF0LCAiXFxrIik7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBjb21wbGV0ZV9wYXQgPSBhbGxvYyhxdW90ZV9tZXRhKE5VTEwsIHRtcF9wdHIsIHRlbXApICsgMyk7CisJCSAgICBpZiAoY29tcGxldGVfcGF0ID09IE5VTEwpCisJCQlyZXR1cm4gRkFJTDsKKwkJICAgIFNUUkNQWSgoY2hhciAqKWNvbXBsZXRlX3BhdCwgIlxcPCIpOworCQkgICAgKHZvaWQpcXVvdGVfbWV0YShjb21wbGV0ZV9wYXQgKyAyLCB0bXBfcHRyLCB0ZW1wKTsKKwkJfQorCSAgICB9CisJfQorCWVsc2UgaWYgKGN0cmxfeF9tb2RlID09IENUUkxfWF9XSE9MRV9MSU5FKQorCXsKKwkgICAgdG1wX3B0ciA9IHNraXB3aGl0ZShsaW5lKTsKKwkgICAgdGVtcCA9IChpbnQpY29tcGxldGVfY29sIC0gKGludCkodG1wX3B0ciAtIGxpbmUpOworCSAgICBpZiAodGVtcCA8IDApCS8qIGN1cnNvciBpbiBpbmRlbnQ6IGVtcHR5IHBhdHRlcm4gKi8KKwkJdGVtcCA9IDA7CisJICAgIGlmIChwX2ljKQorCQljb21wbGV0ZV9wYXQgPSBzdHJfZm9sZGNhc2UodG1wX3B0ciwgdGVtcCk7CisJICAgIGVsc2UKKwkJY29tcGxldGVfcGF0ID0gdmltX3N0cm5zYXZlKHRtcF9wdHIsIHRlbXApOworCSAgICBpZiAoY29tcGxldGVfcGF0ID09IE5VTEwpCisJCXJldHVybiBGQUlMOworCX0KKwllbHNlIGlmIChjdHJsX3hfbW9kZSA9PSBDVFJMX1hfRklMRVMpCisJeworCSAgICB3aGlsZSAoLS10ZW1wID49IDAgJiYgdmltX2lzZmlsZWMobGluZVt0ZW1wXSkpCisJCTsKKwkgICAgdG1wX3B0ciArPSArK3RlbXA7CisJICAgIHRlbXAgPSAoaW50KWNvbXBsZXRlX2NvbCAtIHRlbXA7CisJICAgIGNvbXBsZXRlX3BhdCA9IGFkZHN0YXIodG1wX3B0ciwgdGVtcCwgRVhQQU5EX0ZJTEVTKTsKKwkgICAgaWYgKGNvbXBsZXRlX3BhdCA9PSBOVUxMKQorCQlyZXR1cm4gRkFJTDsKKwl9CisJZWxzZSBpZiAoY3RybF94X21vZGUgPT0gQ1RSTF9YX0NNRExJTkUpCisJeworCSAgICBjb21wbGV0ZV9wYXQgPSB2aW1fc3RybnNhdmUobGluZSwgY29tcGxldGVfY29sKTsKKwkgICAgaWYgKGNvbXBsZXRlX3BhdCA9PSBOVUxMKQorCQlyZXR1cm4gRkFJTDsKKwkgICAgc2V0X2NtZF9jb250ZXh0KCZjb21wbGV0ZV94cCwgY29tcGxldGVfcGF0LAorCQkJCSAgICAgKGludClTVFJMRU4oY29tcGxldGVfcGF0KSwgY29tcGxldGVfY29sKTsKKwkgICAgaWYgKGNvbXBsZXRlX3hwLnhwX2NvbnRleHQgPT0gRVhQQU5EX1VOU1VDQ0VTU0ZVTAorCQkgICAgfHwgY29tcGxldGVfeHAueHBfY29udGV4dCA9PSBFWFBBTkRfTk9USElORykKKwkJcmV0dXJuIEZBSUw7CisJICAgIHRlbXAgPSAoaW50KShjb21wbGV0ZV94cC54cF9wYXR0ZXJuIC0gY29tcGxldGVfcGF0KTsKKwkgICAgdG1wX3B0ciA9IGxpbmUgKyB0ZW1wOworCSAgICB0ZW1wID0gY29tcGxldGVfY29sIC0gdGVtcDsKKwl9CisJY29tcGxldGVfY29sID0gKGNvbG5yX1QpICh0bXBfcHRyIC0gbGluZSk7CisKKwlpZiAoY29udGludWVfc3RhdHVzICYgQ09OVF9BRERJTkcpCisJeworCSAgICBlZGl0X3N1Ym1vZGVfcHJlID0gKGNoYXJfdSAqKV8oIiBBZGRpbmciKTsKKwkgICAgaWYgKGN0cmxfeF9tb2RlID09IENUUkxfWF9XSE9MRV9MSU5FKQorCSAgICB7CisJCS8qIEluc2VydCBhIG5ldyBsaW5lLCBrZWVwIGluZGVudGF0aW9uIGJ1dCBpZ25vcmUgJ2NvbW1lbnRzJyAqLworI2lmZGVmIEZFQVRfQ09NTUVOVFMKKwkJY2hhcl91ICpvbGQgPSBjdXJidWYtPmJfcF9jb207CisKKwkJY3VyYnVmLT5iX3BfY29tID0gKGNoYXJfdSAqKSIiOworI2VuZGlmCisJCWluaXRpYWxfcG9zLmxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJCWluaXRpYWxfcG9zLmNvbCA9IGNvbXBsZXRlX2NvbDsKKwkJaW5zX2VvbCgnXHInKTsKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisJCWN1cmJ1Zi0+Yl9wX2NvbSA9IG9sZDsKKyNlbmRpZgorCQl0bXBfcHRyID0gKGNoYXJfdSAqKSIiOworCQl0ZW1wID0gMDsKKwkJY29tcGxldGVfY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgZWRpdF9zdWJtb2RlX3ByZSA9IE5VTEw7CisJICAgIGluaXRpYWxfcG9zLmNvbCA9IGNvbXBsZXRlX2NvbDsKKwl9CisKKwlpZiAoY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCkKKwkgICAgZWRpdF9zdWJtb2RlID0gKGNoYXJfdSAqKV8oY3RybF94X21zZ3NbMl0pOworCWVsc2UKKwkgICAgZWRpdF9zdWJtb2RlID0gKGNoYXJfdSAqKV8oQ1RSTF9YX01TRyhjdHJsX3hfbW9kZSkpOworCisJY29tcGxldGlvbl9sZW5ndGggPSB0ZW1wOworCisJLyogQWx3YXlzIGFkZCBjb21wbGV0aW9uIGZvciB0aGUgb3JpZ2luYWwgdGV4dC4gIE5vdGUgdGhhdAorCSAqICJvcmlnaW5hbF90ZXh0IiBpdHNlbGYgKG5vdCBhIGNvcHkpIGlzIGFkZGVkLCBpdCB3aWxsIGJlIGZyZWVkIHdoZW4KKwkgKiB0aGUgbGlzdCBvZiBtYXRjaGVzIGlzIGZyZWVkLiAqLworCWlmICgob3JpZ2luYWxfdGV4dCA9IHZpbV9zdHJuc2F2ZSh0bXBfcHRyLCB0ZW1wKSkgPT0gTlVMTAorCSAgICB8fCBpbnNfY29tcGxfYWRkKG9yaWdpbmFsX3RleHQsIC0xLCBOVUxMLCAwLCBPUklHSU5BTF9URVhUKSAhPSBPSykKKwl7CisJICAgIHZpbV9mcmVlKGNvbXBsZXRlX3BhdCk7CisJICAgIGNvbXBsZXRlX3BhdCA9IE5VTEw7CisJICAgIHZpbV9mcmVlKG9yaWdpbmFsX3RleHQpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisKKwkvKiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorCSAqIGJlIGNhbGxlZCBiZWZvcmUgbGluZSA9IG1sX2dldCgpLCBvciB3aGVuIHRoaXMgYWRkcmVzcyBpcyBubworCSAqIGxvbmdlciBuZWVkZWQuICAtLSBBY2V2ZWRvLgorCSAqLworCWVkaXRfc3VibW9kZV9leHRyYSA9IChjaGFyX3UgKilfKCItLSBTZWFyY2hpbmcuLi4iKTsKKwllZGl0X3N1Ym1vZGVfaGlnaGwgPSBITEZfQ09VTlQ7CisJc2hvd21vZGUoKTsKKwllZGl0X3N1Ym1vZGVfZXh0cmEgPSBOVUxMOworCW91dF9mbHVzaCgpOworICAgIH0KKworICAgIHNob3duX21hdGNoID0gY3Vycl9tYXRjaDsKKyAgICBzaG93bl9kaXJlY3Rpb24gPSBjb21wbGV0ZV9kaXJlY3Rpb247CisKKyAgICAvKgorICAgICAqIEZpbmQgbmV4dCBtYXRjaC4KKyAgICAgKi8KKyAgICB0ZW1wID0gaW5zX2NvbXBsX25leHQoVFJVRSk7CisKKyAgICBpZiAodGVtcCA+IDEpCS8qIGFsbCBtYXRjaGVzIGhhdmUgYmVlbiBmb3VuZCAqLworCWNvbXBsZXRpb25fbWF0Y2hlcyA9IHRlbXA7CisgICAgY3Vycl9tYXRjaCA9IHNob3duX21hdGNoOworICAgIGNvbXBsZXRlX2RpcmVjdGlvbiA9IHNob3duX2RpcmVjdGlvbjsKKyAgICBjb21wbGV0aW9uX2ludGVycnVwdGVkID0gRkFMU0U7CisKKyAgICAvKiBlYXQgdGhlIEVTQyB0byBhdm9pZCBsZWF2aW5nIGluc2VydCBtb2RlICovCisgICAgaWYgKGdvdF9pbnQgJiYgIWdsb2JhbF9idXN5KQorICAgIHsKKwkodm9pZCl2Z2V0YygpOworCWdvdF9pbnQgPSBGQUxTRTsKKyAgICB9CisKKyAgICAvKiB3ZSBmb3VuZCBubyBtYXRjaCBpZiB0aGUgbGlzdCBoYXMgb25seSB0aGUgb3JpZ2luYWxfdGV4dC1lbnRyeSAqLworICAgIGlmIChmaXJzdF9tYXRjaCA9PSBmaXJzdF9tYXRjaC0+bmV4dCkKKyAgICB7CisJZWRpdF9zdWJtb2RlX2V4dHJhID0gKGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfQURESU5HKQorCQkJJiYgY29tcGxldGlvbl9sZW5ndGggPiAxCisJCQkgICAgID8gKGNoYXJfdSAqKV8oZV9oaXRlbmQpIDogKGNoYXJfdSAqKV8oZV9wYXRub3RmKTsKKwllZGl0X3N1Ym1vZGVfaGlnaGwgPSBITEZfRTsKKwkvKiByZW1vdmUgTl9BRERTIGZsYWcsIHNvIG5leHQgXlg8PiB3b24ndCB0cnkgdG8gZ28gdG8gQURESU5HIG1vZGUsCisJICogYmVjYXVzZSB3ZSBjb3VsZG4ndCBleHBhbmQgYW55dGhpbmcgYXQgZmlyc3QgcGxhY2UsIGJ1dCBpZiB3ZSB1c2VkCisJICogXlAsIF5OLCBeWF5JIG9yIF5YXkQgd2UgbWlnaHQgd2FudCB0byBhZGQtZXhwYW5kIGEgc2luZ2xlLWNoYXItd29yZAorCSAqIChzdWNoIGFzIE0gaW4gTSdleGljbykgaWYgbm90IHRyaWVkIGFscmVhZHkuICAtLSBBY2V2ZWRvICovCisJaWYgKAkgICBjb21wbGV0aW9uX2xlbmd0aCA+IDEKKwkJfHwgKGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfQURESU5HKQorCQl8fCAoY3RybF94X21vZGUgIT0gMAorCQkgICAgJiYgY3RybF94X21vZGUgIT0gQ1RSTF9YX1BBVEhfUEFUVEVSTlMKKwkJICAgICYmIGN0cmxfeF9tb2RlICE9IENUUkxfWF9QQVRIX0RFRklORVMpKQorCSAgICBjb250aW51ZV9zdGF0dXMgJj0gfkNPTlRfTl9BRERTOworICAgIH0KKworICAgIGlmIChjdXJyX21hdGNoLT5vcmlnaW5hbCAmIENPTlRfU19JUE9TKQorCWNvbnRpbnVlX3N0YXR1cyB8PSBDT05UX1NfSVBPUzsKKyAgICBlbHNlCisJY29udGludWVfc3RhdHVzICY9IH5DT05UX1NfSVBPUzsKKworICAgIGlmIChlZGl0X3N1Ym1vZGVfZXh0cmEgPT0gTlVMTCkKKyAgICB7CisJaWYgKGN1cnJfbWF0Y2gtPm9yaWdpbmFsICYgT1JJR0lOQUxfVEVYVCkKKwl7CisJICAgIGVkaXRfc3VibW9kZV9leHRyYSA9IChjaGFyX3UgKilfKCJCYWNrIGF0IG9yaWdpbmFsIik7CisJICAgIGVkaXRfc3VibW9kZV9oaWdobCA9IEhMRl9XOworCX0KKwllbHNlIGlmIChjb250aW51ZV9zdGF0dXMgJiBDT05UX1NfSVBPUykKKwl7CisJICAgIGVkaXRfc3VibW9kZV9leHRyYSA9IChjaGFyX3UgKilfKCJXb3JkIGZyb20gb3RoZXIgbGluZSIpOworCSAgICBlZGl0X3N1Ym1vZGVfaGlnaGwgPSBITEZfQ09VTlQ7CisJfQorCWVsc2UgaWYgKGN1cnJfbWF0Y2gtPm5leHQgPT0gY3Vycl9tYXRjaC0+cHJldikKKwl7CisJICAgIGVkaXRfc3VibW9kZV9leHRyYSA9IChjaGFyX3UgKilfKCJUaGUgb25seSBtYXRjaCIpOworCSAgICBlZGl0X3N1Ym1vZGVfaGlnaGwgPSBITEZfQ09VTlQ7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIFVwZGF0ZSBjb21wbGV0aW9uIHNlcXVlbmNlIG51bWJlciB3aGVuIG5lZWRlZC4gKi8KKwkgICAgaWYgKGN1cnJfbWF0Y2gtPm51bWJlciA9PSAtMSkKKwkgICAgeworCQlpbnQJCSAgICBudW1iZXIgPSAwOworCQlzdHJ1Y3QgQ29tcGxldGlvbiAgICptYXRjaDsKKworCQlpZiAoY29tcGxldGVfZGlyZWN0aW9uID09IEZPUldBUkQpCisJCXsKKwkJICAgIC8qIHNlYXJjaCBiYWNrd2FyZHMgZm9yIHRoZSBmaXJzdCB2YWxpZCAoIT0gLTEpIG51bWJlci4KKwkJICAgICAqIFRoaXMgc2hvdWxkIG5vcm1hbGx5IHN1Y2NlZWQgYWxyZWFkeSBhdCB0aGUgZmlyc3QgbG9vcAorCQkgICAgICogY3ljbGUsIHNvIGl0J3MgZmFzdCEgKi8KKwkJICAgIGZvciAobWF0Y2ggPSBjdXJyX21hdGNoLT5wcmV2OyBtYXRjaCAhPSBOVUxMCisJCQkJICYmIG1hdGNoICE9IGZpcnN0X21hdGNoOyBtYXRjaCA9IG1hdGNoLT5wcmV2KQorCQkJaWYgKG1hdGNoLT5udW1iZXIgIT0gLTEpCisJCQl7CisJCQkgICAgbnVtYmVyID0gbWF0Y2gtPm51bWJlcjsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIGlmIChtYXRjaCAhPSBOVUxMKQorCQkJLyogZ28gdXAgYW5kIGFzc2lnbiBhbGwgbnVtYmVycyB3aGljaCBhcmUgbm90IGFzc2lnbmVkCisJCQkgKiB5ZXQgKi8KKwkJCWZvciAobWF0Y2ggPSBtYXRjaC0+bmV4dDsgbWF0Y2gKKwkJCQkgICYmIG1hdGNoLT5udW1iZXIgPT0gLTE7IG1hdGNoID0gbWF0Y2gtPm5leHQpCisJCQkgICAgbWF0Y2gtPm51bWJlciA9ICsrbnVtYmVyOworCQl9CisJCWVsc2UgLyogQkFDS1dBUkQgKi8KKwkJeworCQkgICAgLyogc2VhcmNoIGZvcndhcmRzICh1cHdhcmRzKSBmb3IgdGhlIGZpcnN0IHZhbGlkICghPSAtMSkKKwkJICAgICAqIG51bWJlci4gIFRoaXMgc2hvdWxkIG5vcm1hbGx5IHN1Y2NlZWQgYWxyZWFkeSBhdCB0aGUKKwkJICAgICAqIGZpcnN0IGxvb3AgY3ljbGUsIHNvIGl0J3MgZmFzdCEgKi8KKwkJICAgIGZvciAobWF0Y2ggPSBjdXJyX21hdGNoLT5uZXh0OyBtYXRjaCAhPSBOVUxMCisJCQkJICYmIG1hdGNoICE9IGZpcnN0X21hdGNoOyBtYXRjaCA9IG1hdGNoLT5uZXh0KQorCQkJaWYgKG1hdGNoLT5udW1iZXIgIT0gLTEpCisJCQl7CisJCQkgICAgbnVtYmVyID0gbWF0Y2gtPm51bWJlcjsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIGlmIChtYXRjaCAhPSBOVUxMKQorCQkJLyogZ28gZG93biBhbmQgYXNzaWduIGFsbCBudW1iZXJzIHdoaWNoIGFyZSBub3QKKwkJCSAqIGFzc2lnbmVkIHlldCAqLworCQkJZm9yIChtYXRjaCA9IG1hdGNoLT5wcmV2OyBtYXRjaAorCQkJCSAgJiYgbWF0Y2gtPm51bWJlciA9PSAtMTsgbWF0Y2ggPSBtYXRjaC0+cHJldikKKwkJCSAgICBtYXRjaC0+bnVtYmVyID0gKytudW1iZXI7CisJCX0KKwkgICAgfQorCisJICAgIC8qIFRoZSBtYXRjaCBzaG91bGQgYWx3YXlzIGhhdmUgYSBzZXF1bmNlIG51bWJlciBub3csIHRoaXMgaXMganVzdAorCSAgICAgKiBhIHNhZmV0eSBjaGVjay4gKi8KKwkgICAgaWYgKGN1cnJfbWF0Y2gtPm51bWJlciAhPSAtMSkKKwkgICAgeworCQkvKiBTcGFjZSBmb3IgMTAgdGV4dCBjaGFycy4gKyAyeDEwLWRpZ2l0IG5vLnMgKi8KKwkJc3RhdGljIGNoYXJfdSBtYXRjaF9yZWZbMzFdOworCisJCWlmIChjb21wbGV0aW9uX21hdGNoZXMgPiAwKQorCQkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygibWF0Y2ggJWQgb2YgJWQiKSwKKwkJCQkgICAgICBjdXJyX21hdGNoLT5udW1iZXIsIGNvbXBsZXRpb25fbWF0Y2hlcyk7CisJCWVsc2UKKwkJICAgIHNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIm1hdGNoICVkIiksIGN1cnJfbWF0Y2gtPm51bWJlcik7CisJCVNUUk5DUFkobWF0Y2hfcmVmLCBJT2J1ZmYsIDMwICk7CisJCW1hdGNoX3JlZlszMF0gPSAnXDAnOworCQllZGl0X3N1Ym1vZGVfZXh0cmEgPSBtYXRjaF9yZWY7CisJCWVkaXRfc3VibW9kZV9oaWdobCA9IEhMRl9SOworCQlpZiAoZG9sbGFyX3Zjb2wpCisJCSAgICBjdXJzX2NvbHVtbnMoRkFMU0UpOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qIFNob3cgYSBtZXNzYWdlIGFib3V0IHdoYXQgKGNvbXBsZXRpb24pIG1vZGUgd2UncmUgaW4uICovCisgICAgc2hvd21vZGUoKTsKKyAgICBpZiAoZWRpdF9zdWJtb2RlX2V4dHJhICE9IE5VTEwpCisgICAgeworCWlmICghcF9zbWQpCisJICAgIG1zZ19hdHRyKGVkaXRfc3VibW9kZV9leHRyYSwKKwkJICAgIGVkaXRfc3VibW9kZV9oaWdobCA8IEhMRl9DT1VOVAorCQkgICAgPyBobF9hdHRyKGVkaXRfc3VibW9kZV9oaWdobCkgOiAwKTsKKyAgICB9CisgICAgZWxzZQorCW1zZ19jbHJfY21kbGluZSgpOwkvKiBuZWNlc3NhcnkgZm9yICJub3Nob3dtb2RlIiAqLworCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogTG9va3MgaW4gdGhlIGZpcnN0ICJsZW4iIGNoYXJzLiBvZiAic3JjIiBmb3Igc2VhcmNoLW1ldGFjaGFycy4KKyAqIElmIGRlc3QgaXMgbm90IE5VTEwgdGhlIGNoYXJzLiBhcmUgY29waWVkIHRoZXJlIHF1b3RpbmcgKHdpdGgKKyAqIGEgYmFja3NsYXNoKSB0aGUgbWV0YWNoYXJzLCBhbmQgZGVzdCB3b3VsZCBiZSBOVUwgdGVybWluYXRlZC4KKyAqIFJldHVybnMgdGhlIGxlbmd0aCAobmVlZGVkKSBvZiBkZXN0CisgKi8KKyAgICBzdGF0aWMgaW50CitxdW90ZV9tZXRhKGRlc3QsIHNyYywgbGVuKQorICAgIGNoYXJfdQkqZGVzdDsKKyAgICBjaGFyX3UJKnNyYzsKKyAgICBpbnQJCWxlbjsKK3sKKyAgICBpbnQJbTsKKworICAgIGZvciAobSA9IGxlbjsgLS1sZW4gPj0gMDsgc3JjKyspCisgICAgeworCXN3aXRjaCAoKnNyYykKKwl7CisJICAgIGNhc2UgJy4nOgorCSAgICBjYXNlICcqJzoKKwkgICAgY2FzZSAnWyc6CisJCWlmIChjdHJsX3hfbW9kZSA9PSBDVFJMX1hfRElDVElPTkFSWQorCQkJCQkgICB8fCBjdHJsX3hfbW9kZSA9PSBDVFJMX1hfVEhFU0FVUlVTKQorCQkgICAgYnJlYWs7CisJICAgIGNhc2UgJ34nOgorCQlpZiAoIXBfbWFnaWMpCS8qIHF1b3RlIHRoZXNlIG9ubHkgaWYgbWFnaWMgaXMgc2V0ICovCisJCSAgICBicmVhazsKKwkgICAgY2FzZSAnXFwnOgorCQlpZiAoY3RybF94X21vZGUgPT0gQ1RSTF9YX0RJQ1RJT05BUlkKKwkJCQkJICAgfHwgY3RybF94X21vZGUgPT0gQ1RSTF9YX1RIRVNBVVJVUykKKwkJICAgIGJyZWFrOworCSAgICBjYXNlICdeJzoJCS8qIGN1cnJlbnRseSBpdCdzIG5vdCBuZWVkZWQuICovCisJICAgIGNhc2UgJyQnOgorCQltKys7CisJCWlmIChkZXN0ICE9IE5VTEwpCisJCSAgICAqZGVzdCsrID0gJ1xcJzsKKwkJYnJlYWs7CisJfQorCWlmIChkZXN0ICE9IE5VTEwpCisJICAgICpkZXN0KysgPSAqc3JjOworI2lmZGVmIEZFQVRfTUJZVEUKKwkvKiBDb3B5IHJlbWFpbmluZyBieXRlcyBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICovCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIGludCBpLCBtYl9sZW47CisKKwkgICAgbWJfbGVuID0gKCptYl9wdHIybGVuX2NoZWNrKShzcmMpIC0gMTsKKwkgICAgaWYgKG1iX2xlbiA+IDAgJiYgbGVuID49IG1iX2xlbikKKwkJZm9yIChpID0gMDsgaSA8IG1iX2xlbjsgKytpKQorCQl7CisJCSAgICAtLWxlbjsKKwkJICAgICsrc3JjOworCQkgICAgaWYgKGRlc3QgIT0gTlVMTCkKKwkJCSpkZXN0KysgPSAqc3JjOworCQl9CisJfQorI2VuZGlmCisgICAgfQorICAgIGlmIChkZXN0ICE9IE5VTEwpCisJKmRlc3QgPSBOVUw7CisKKyAgICByZXR1cm4gbTsKK30KKyNlbmRpZiAvKiBGRUFUX0lOU19FWFBBTkQgKi8KKworLyoKKyAqIE5leHQgY2hhcmFjdGVyIGlzIGludGVycHJldGVkIGxpdGVyYWxseS4KKyAqIEEgb25lLCB0d28gb3IgdGhyZWUgZGlnaXQgZGVjaW1hbCBudW1iZXIgaXMgaW50ZXJwcmV0ZWQgYXMgaXRzIGJ5dGUgdmFsdWUuCisgKiBJZiBvbmUgb3IgdHdvIGRpZ2l0cyBhcmUgZW50ZXJlZCwgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGdpdmVuIHRvIHZ1bmdldGMoKS4KKyAqIEZvciBVbmljb2RlIGEgY2hhcmFjdGVyID4gMjU1IG1heSBiZSByZXR1cm5lZC4KKyAqLworICAgIGludAorZ2V0X2xpdGVyYWwoKQoreworICAgIGludAkJY2M7CisgICAgaW50CQluYzsKKyAgICBpbnQJCWk7CisgICAgaW50CQloZXggPSBGQUxTRTsKKyAgICBpbnQJCW9jdGFsID0gRkFMU0U7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJdW5pY29kZSA9IDA7CisjZW5kaWYKKworICAgIGlmIChnb3RfaW50KQorCXJldHVybiBDdHJsX0M7CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIC8qCisgICAgICogSW4gR1VJIHRoZXJlIGlzIG5vIHBvaW50IGluc2VydGluZyB0aGUgaW50ZXJuYWwgY29kZSBmb3IgYSBzcGVjaWFsIGtleS4KKyAgICAgKiBJdCBpcyBtb3JlIHVzZWZ1bCB0byBpbnNlcnQgdGhlIHN0cmluZyAiPEtFWT4iIGluc3RlYWQuCVRoaXMgd291bGQKKyAgICAgKiBwcm9iYWJseSBiZSB1c2VmdWwgaW4gYSB0ZXh0IHdpbmRvdyB0b28sIGJ1dCBpdCB3b3VsZCBub3QgYmUKKyAgICAgKiB2aS1jb21wYXRpYmxlIChtYXliZSB0aGVyZSBzaG91bGQgYmUgYW4gb3B0aW9uIGZvciBpdD8pIC0tIHdlYmIKKyAgICAgKi8KKyAgICBpZiAoZ3VpLmluX3VzZSkKKwkrK2FsbG93X2tleXM7CisjZW5kaWYKKyNpZmRlZiBVU0VfT05fRkxZX1NDUk9MTAorICAgIGRvbnRfc2Nyb2xsID0gVFJVRTsJCS8qIGRpc2FsbG93IHNjcm9sbGluZyBoZXJlICovCisjZW5kaWYKKyAgICArK25vX21hcHBpbmc7CQkvKiBkb24ndCBtYXAgdGhlIG5leHQga2V5IGhpdHMgKi8KKyAgICBjYyA9IDA7CisgICAgaSA9IDA7CisgICAgZm9yICg7OykKKyAgICB7CisJZG8KKwkgICAgbmMgPSBzYWZlX3ZnZXRjKCk7CisJd2hpbGUgKG5jID09IEtfSUdOT1JFIHx8IG5jID09IEtfVkVSX1NDUk9MTEJBUgorCQkJCQkJICAgIHx8IG5jID09IEtfSE9SX1NDUk9MTEJBUik7CisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwlpZiAoIShTdGF0ZSAmIENNRExJTkUpCisjIGlmZGVmIEZFQVRfTUJZVEUKKwkJJiYgTUJfQllURTJMRU5fQ0hFQ0sobmMpID09IDEKKyMgZW5kaWYKKwkgICApCisJICAgIGFkZF90b19zaG93Y21kKG5jKTsKKyNlbmRpZgorCWlmIChuYyA9PSAneCcgfHwgbmMgPT0gJ1gnKQorCSAgICBoZXggPSBUUlVFOworCWVsc2UgaWYgKG5jID09ICdvJyB8fCBuYyA9PSAnTycpCisJICAgIG9jdGFsID0gVFJVRTsKKyNpZmRlZiBGRUFUX01CWVRFCisJZWxzZSBpZiAobmMgPT0gJ3UnIHx8IG5jID09ICdVJykKKwkgICAgdW5pY29kZSA9IG5jOworI2VuZGlmCisJZWxzZQorCXsKKwkgICAgaWYgKGhleAorI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIHx8IHVuaWNvZGUgIT0gMAorI2VuZGlmCisJCSAgICApCisJICAgIHsKKwkJaWYgKCF2aW1faXN4ZGlnaXQobmMpKQorCQkgICAgYnJlYWs7CisJCWNjID0gY2MgKiAxNiArIGhleDJucihuYyk7CisJICAgIH0KKwkgICAgZWxzZSBpZiAob2N0YWwpCisJICAgIHsKKwkJaWYgKG5jIDwgJzAnIHx8IG5jID4gJzcnKQorCQkgICAgYnJlYWs7CisJCWNjID0gY2MgKiA4ICsgbmMgLSAnMCc7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlmICghVklNX0lTRElHSVQobmMpKQorCQkgICAgYnJlYWs7CisJCWNjID0gY2MgKiAxMCArIG5jIC0gJzAnOworCSAgICB9CisKKwkgICAgKytpOworCX0KKworCWlmIChjYyA+IDI1NQorI2lmZGVmIEZFQVRfTUJZVEUKKwkJJiYgdW5pY29kZSA9PSAwCisjZW5kaWYKKwkJKQorCSAgICBjYyA9IDI1NTsJCS8qIGxpbWl0IHJhbmdlIHRvIDAtMjU1ICovCisJbmMgPSAwOworCisJaWYgKGhleCkJCS8qIGhleDogdXAgdG8gdHdvIGNoYXJzICovCisJeworCSAgICBpZiAoaSA+PSAyKQorCQlicmVhazsKKwl9CisjaWZkZWYgRkVBVF9NQllURQorCWVsc2UgaWYgKHVuaWNvZGUpCS8qIFVuaWNvZGU6IHVwIHRvIGZvdXIgb3IgZWlnaHQgY2hhcnMgKi8KKwl7CisJICAgIGlmICgodW5pY29kZSA9PSAndScgJiYgaSA+PSA0KSB8fCAodW5pY29kZSA9PSAnVScgJiYgaSA+PSA4KSkKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJZWxzZSBpZiAoaSA+PSAzKQkvKiBkZWNpbWFsIG9yIG9jdGFsOiB1cCB0byB0aHJlZSBjaGFycyAqLworCSAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGkgPT0gMCkJICAgIC8qIG5vIG51bWJlciBlbnRlcmVkICovCisgICAgeworCWlmIChuYyA9PSBLX1pFUk8pICAgLyogTlVMIGlzIHN0b3JlZCBhcyBOTCAqLworCXsKKwkgICAgY2MgPSAnXG4nOworCSAgICBuYyA9IDA7CisJfQorCWVsc2UKKwl7CisJICAgIGNjID0gbmM7CisJICAgIG5jID0gMDsKKwl9CisgICAgfQorCisgICAgaWYgKGNjID09IDApCS8qIE5VTCBpcyBzdG9yZWQgYXMgTkwgKi8KKwljYyA9ICdcbic7CisKKyAgICAtLW5vX21hcHBpbmc7CisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSkKKwktLWFsbG93X2tleXM7CisjZW5kaWYKKyAgICBpZiAobmMpCisJdnVuZ2V0YyhuYyk7CisgICAgZ290X2ludCA9IEZBTFNFOwkgICAgLyogQ1RSTC1DIHR5cGVkIGFmdGVyIENUUkwtViBpcyBub3QgYW4gaW50ZXJydXB0ICovCisgICAgcmV0dXJuIGNjOworfQorCisvKgorICogSW5zZXJ0IGNoYXJhY3RlciwgdGFraW5nIGNhcmUgb2Ygc3BlY2lhbCBrZXlzIGFuZCBtb2RfbWFzaworICovCisgICAgc3RhdGljIHZvaWQKK2luc2VydF9zcGVjaWFsKGMsIGFsbG93X21vZG1hc2ssIGN0cmx2KQorICAgIGludAkgICAgYzsKKyAgICBpbnQJICAgIGFsbG93X21vZG1hc2s7CisgICAgaW50CSAgICBjdHJsdjsJICAgIC8qIGMgd2FzIHR5cGVkIGFmdGVyIENUUkwtViAqLworeworICAgIGNoYXJfdSAgKnA7CisgICAgaW50CSAgICBsZW47CisKKyAgICAvKgorICAgICAqIFNwZWNpYWwgZnVuY3Rpb24ga2V5LCB0cmFuc2xhdGUgaW50byAiPEtleT4iLiBVcCB0byB0aGUgbGFzdCAnPicgaXMKKyAgICAgKiBpbnNlcnRlZCB3aXRoIGluc19zdHIoKSwgc28gYXMgbm90IHRvIHJlcGxhY2UgY2hhcmFjdGVycyBpbiByZXBsYWNlCisgICAgICogbW9kZS4KKyAgICAgKiBPbmx5IHVzZSBtb2RfbWFzayBmb3Igc3BlY2lhbCBrZXlzLCB0byBhdm9pZCB0aGluZ3MgbGlrZSA8Uy1TcGFjZT4sCisgICAgICogdW5sZXNzICdhbGxvd19tb2RtYXNrJyBpcyBUUlVFLgorICAgICAqLworI2lmZGVmIE1BQ09TCisgICAgLyogQ29tbWFuZC1rZXkgbmV2ZXIgcHJvZHVjZXMgYSBub3JtYWwga2V5ICovCisgICAgaWYgKG1vZF9tYXNrICYgTU9EX01BU0tfQ01EKQorCWFsbG93X21vZG1hc2sgPSBUUlVFOworI2VuZGlmCisgICAgaWYgKElTX1NQRUNJQUwoYykgfHwgKG1vZF9tYXNrICYmIGFsbG93X21vZG1hc2spKQorICAgIHsKKwlwID0gZ2V0X3NwZWNpYWxfa2V5X25hbWUoYywgbW9kX21hc2spOworCWxlbiA9IChpbnQpU1RSTEVOKHApOworCWMgPSBwW2xlbiAtIDFdOworCWlmIChsZW4gPiAyKQorCXsKKwkgICAgaWYgKHN0b3BfYXJyb3coKSA9PSBGQUlMKQorCQlyZXR1cm47CisJICAgIHBbbGVuIC0gMV0gPSBOVUw7CisJICAgIGluc19zdHIocCk7CisJICAgIEFwcGVuZFRvUmVkb2J1ZmZMaXQocCk7CisJICAgIGN0cmx2ID0gRkFMU0U7CisJfQorICAgIH0KKyAgICBpZiAoc3RvcF9hcnJvdygpID09IE9LKQorCWluc2VydGNoYXIoYywgY3RybHYgPyBJTlNDSEFSX0NUUkxWIDogMCwgLTEpOworfQorCisvKgorICogU3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoaXMgY29udGV4dCBhcmUgdGhvc2UgdGhhdCBuZWVkIHByb2Nlc3Npbmcgb3RoZXIKKyAqIHRoYW4gdGhlIHNpbXBsZSBpbnNlcnRpb24gdGhhdCBjYW4gYmUgcGVyZm9ybWVkIGhlcmUuIFRoaXMgaW5jbHVkZXMgRVNDCisgKiB3aGljaCB0ZXJtaW5hdGVzIHRoZSBpbnNlcnQsIGFuZCBDUi9OTCB3aGljaCBuZWVkIHNwZWNpYWwgcHJvY2Vzc2luZyB0bworICogb3BlbiB1cCBhIG5ldyBsaW5lLiBUaGlzIHJvdXRpbmUgdHJpZXMgdG8gb3B0aW1pemUgaW5zZXJ0aW9ucyBwZXJmb3JtZWQgYnkKKyAqIHRoZSAicmVkbyIsICJ1bmRvIiBvciAicHV0IiBjb21tYW5kcywgc28gaXQgbmVlZHMgdG8ga25vdyB3aGVuIGl0IHNob3VsZAorICogc3RvcCBhbmQgZGVmZXIgcHJvY2Vzc2luZyB0byB0aGUgIm5vcm1hbCIgbWVjaGFuaXNtLgorICogJzAnIGFuZCAnXicgYXJlIHNwZWNpYWwsIGJlY2F1c2UgdGhleSBjYW4gYmUgZm9sbG93ZWQgYnkgQ1RSTC1ELgorICovCisjaWZkZWYgRUJDRElDCisjIGRlZmluZSBJU1NQRUNJQUwoYykJKChjKSA8ICcgJyB8fCAoYykgPT0gJzAnIHx8IChjKSA9PSAnXicpCisjZWxzZQorIyBkZWZpbmUgSVNTUEVDSUFMKGMpCSgoYykgPCAnICcgfHwgKGMpID49IERFTCB8fCAoYykgPT0gJzAnIHx8IChjKSA9PSAnXicpCisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUJZVEUKKyMgZGVmaW5lIFdISVRFQ0hBUihjYykgKHZpbV9pc3doaXRlKGNjKSAmJiAoIWVuY191dGY4IHx8ICF1dGZfaXNjb21wb3NpbmcodXRmX3B0cjJjaGFyKG1sX2dldF9jdXJzb3IoKSArIDEpKSkpCisjZWxzZQorIyBkZWZpbmUgV0hJVEVDSEFSKGNjKSB2aW1faXN3aGl0ZShjYykKKyNlbmRpZgorCisgICAgdm9pZAoraW5zZXJ0Y2hhcihjLCBmbGFncywgc2Vjb25kX2luZGVudCkKKyAgICBpbnQJCWM7CQkJLyogY2hhcmFjdGVyIHRvIGluc2VydCBvciBOVUwgKi8KKyAgICBpbnQJCWZsYWdzOwkJCS8qIElOU0NIQVJfRk9STUFULCBldGMuICovCisgICAgaW50CQlzZWNvbmRfaW5kZW50OwkJLyogaW5kZW50IGZvciBzZWNvbmQgbGluZSBpZiA+PSAwICovCit7CisgICAgaW50CQloYXZldG9fcmVkcmF3ID0gRkFMU0U7CisgICAgaW50CQl0ZXh0d2lkdGg7CisjaWZkZWYgRkVBVF9DT01NRU5UUworICAgIGNvbG5yX1QJbGVhZGVyX2xlbjsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlub19sZWFkZXIgPSBGQUxTRTsKKyAgICBpbnQJCWRvX2NvbW1lbnRzID0gKGZsYWdzICYgSU5TQ0hBUl9ET19DT00pOworI2VuZGlmCisgICAgaW50CQlmb193aGl0ZV9wYXI7CisgICAgaW50CQlmaXJzdF9saW5lID0gVFJVRTsKKyAgICBpbnQJCWZvX2luc19ibGFuazsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQlmb19tdWx0aWJ5dGU7CisjZW5kaWYKKyAgICBpbnQJCXNhdmVfY2hhciA9IE5VTDsKKyAgICBpbnQJCWNjOworCisgICAgdGV4dHdpZHRoID0gY29tcF90ZXh0d2lkdGgoZmxhZ3MgJiBJTlNDSEFSX0ZPUk1BVCk7CisgICAgZm9faW5zX2JsYW5rID0gaGFzX2Zvcm1hdF9vcHRpb24oRk9fSU5TX0JMQU5LKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgZm9fbXVsdGlieXRlID0gaGFzX2Zvcm1hdF9vcHRpb24oRk9fTUJZVEVfQlJFQUspOworI2VuZGlmCisgICAgZm9fd2hpdGVfcGFyID0gaGFzX2Zvcm1hdF9vcHRpb24oRk9fV0hJVEVfUEFSKTsKKworICAgIC8qCisgICAgICogVHJ5IHRvIGJyZWFrIHRoZSBsaW5lIGluIHR3byBvciBtb3JlIHBpZWNlcyB3aGVuOgorICAgICAqIC0gQWx3YXlzIGRvIHRoaXMgaWYgd2UgaGF2ZSBiZWVuIGNhbGxlZCB0byBkbyBmb3JtYXR0aW5nIG9ubHkuCisgICAgICogLSBBbHdheXMgZG8gdGhpcyB3aGVuICdmb3JtYXRvcHRpb25zJyBoYXMgdGhlICdhJyBmbGFnIGFuZCB0aGUgbGluZQorICAgICAqICAgZW5kcyBpbiB3aGl0ZSBzcGFjZS4KKyAgICAgKiAtIE90aGVyd2lzZToKKyAgICAgKgkgLSBEb24ndCBkbyB0aGlzIGlmIGluc2VydGluZyBhIGJsYW5rCisgICAgICoJIC0gRG9uJ3QgZG8gdGhpcyBpZiBhbiBleGlzdGluZyBjaGFyYWN0ZXIgaXMgYmVpbmcgcmVwbGFjZWQsIHVubGVzcworICAgICAqCSAgIHdlJ3JlIGluIFZSRVBMQUNFIG1vZGUuCisgICAgICoJIC0gRG8gdGhpcyBpZiB0aGUgY3Vyc29yIGlzIG5vdCBvbiB0aGUgbGluZSB3aGVyZSBpbnNlcnQgc3RhcnRlZAorICAgICAqCSBvciAtICdmb3JtYXRvcHRpb25zJyBkb2Vzbid0IGhhdmUgJ2wnIG9yIHRoZSBsaW5lIHdhcyBub3QgdG9vIGxvbmcKKyAgICAgKgkgICAgICAgYmVmb3JlIHRoZSBpbnNlcnQuCisgICAgICoJICAgIC0gJ2Zvcm1hdG9wdGlvbnMnIGRvZXNuJ3QgaGF2ZSAnYicgb3IgYSBibGFuayB3YXMgaW5zZXJ0ZWQgYXQgb3IKKyAgICAgKgkgICAgICBiZWZvcmUgJ3RleHR3aWR0aCcKKyAgICAgKi8KKyAgICBpZiAodGV4dHdpZHRoCisJICAgICYmICgoZmxhZ3MgJiBJTlNDSEFSX0ZPUk1BVCkKKwkJfHwgKCF2aW1faXN3aGl0ZShjKQorCQkgICAgJiYgISgoU3RhdGUgJiBSRVBMQUNFX0ZMQUcpCisjaWZkZWYgRkVBVF9WUkVQTEFDRQorCQkJJiYgIShTdGF0ZSAmIFZSRVBMQUNFX0ZMQUcpCisjZW5kaWYKKwkJCSYmICptbF9nZXRfY3Vyc29yKCkgIT0gTlVMKQorCQkgICAgJiYgKGN1cndpbi0+d19jdXJzb3IubG51bSAhPSBJbnNzdGFydC5sbnVtCisJCQl8fCAoKCFoYXNfZm9ybWF0X29wdGlvbihGT19JTlNfTE9ORykKKwkJCQl8fCBJbnNzdGFydF90ZXh0bGVuIDw9IChjb2xucl9UKXRleHR3aWR0aCkKKwkJCSAgICAmJiAoIWZvX2luc19ibGFuaworCQkJCXx8IEluc3N0YXJ0X2JsYW5rX3Zjb2wgPD0gKGNvbG5yX1QpdGV4dHdpZHRoCisJCQkgICAgKSkpKSkpCisgICAgeworCS8qCisJICogV2hlbiAnYWknIGlzIG9mZiB3ZSBkb24ndCB3YW50IGEgc3BhY2UgdW5kZXIgdGhlIGN1cnNvciB0byBiZQorCSAqIGRlbGV0ZWQuICBSZXBsYWNlIGl0IHdpdGggYW4gJ3gnIHRlbXBvcmFyaWx5LgorCSAqLworCWlmICghY3VyYnVmLT5iX3BfYWkpCisJeworCSAgICBjYyA9IGdjaGFyX2N1cnNvcigpOworCSAgICBpZiAodmltX2lzd2hpdGUoY2MpKQorCSAgICB7CisJCXNhdmVfY2hhciA9IGNjOworCQlwY2hhcl9jdXJzb3IoJ3gnKTsKKwkgICAgfQorCX0KKworCS8qCisJICogUmVwZWF0IGJyZWFraW5nIGxpbmVzLCB1bnRpbCB0aGUgY3VycmVudCBsaW5lIGlzIG5vdCB0b28gbG9uZy4KKwkgKi8KKwl3aGlsZSAoIWdvdF9pbnQpCisJeworCSAgICBpbnQJCXN0YXJ0Y29sOwkJLyogQ3Vyc29yIGNvbHVtbiBhdCBlbnRyeSAqLworCSAgICBpbnQJCXdhbnRjb2w7CQkvKiBjb2x1bW4gYXQgdGV4dHdpZHRoIGJvcmRlciAqLworCSAgICBpbnQJCWZvdW5kY29sOwkJLyogY29sdW1uIGZvciBzdGFydCBvZiBzcGFjZXMgKi8KKwkgICAgaW50CQllbmRfZm91bmRjb2wgPSAwOwkvKiBjb2x1bW4gZm9yIHN0YXJ0IG9mIHdvcmQgKi8KKwkgICAgY29sbnJfVAlsZW47CisJICAgIGNvbG5yX1QJdmlydGNvbDsKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisJICAgIGludAkJb3JpZ19jb2wgPSAwOworCSAgICBjaGFyX3UJKnNhdmVkX3RleHQgPSBOVUxMOworI2VuZGlmCisJICAgIGNvbG5yX1QJY29sOworCisJICAgIHZpcnRjb2wgPSBnZXRfbm9saXN0X3ZpcnRjb2woKTsKKwkgICAgaWYgKHZpcnRjb2wgPCAoY29sbnJfVCl0ZXh0d2lkdGgpCisJCWJyZWFrOworCisjaWZkZWYgRkVBVF9DT01NRU5UUworCSAgICBpZiAobm9fbGVhZGVyKQorCQlkb19jb21tZW50cyA9IEZBTFNFOworCSAgICBlbHNlIGlmICghKGZsYWdzICYgSU5TQ0hBUl9GT1JNQVQpCisJCQkJCSAgICYmIGhhc19mb3JtYXRfb3B0aW9uKEZPX1dSQVBfQ09NUykpCisJCWRvX2NvbW1lbnRzID0gVFJVRTsKKworCSAgICAvKiBEb24ndCBicmVhayB1bnRpbCBhZnRlciB0aGUgY29tbWVudCBsZWFkZXIgKi8KKwkgICAgaWYgKGRvX2NvbW1lbnRzKQorCQlsZWFkZXJfbGVuID0gZ2V0X2xlYWRlcl9sZW4obWxfZ2V0X2N1cmxpbmUoKSwgTlVMTCwgRkFMU0UpOworCSAgICBlbHNlCisJCWxlYWRlcl9sZW4gPSAwOworCisJICAgIC8qIElmIHRoZSBsaW5lIGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIGNvbW1lbnQgbGVhZGVyLCB0aGVuIGRvbid0CisJICAgICAqIHN0YXJ0IG9uZSBpbiBhIGZvbGxvd2luZyBicm9rZW4gbGluZS4gIEF2b2lkcyB0aGF0IGEgJXdvcmQKKwkgICAgICogbW92ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGxpbmUgY2F1c2VzIGFsbCBmb2xsb3dpbmcgbGluZXMKKwkgICAgICogdG8gc3RhcnQgd2l0aCAlLiAqLworCSAgICBpZiAobGVhZGVyX2xlbiA9PSAwKQorCQlub19sZWFkZXIgPSBUUlVFOworI2VuZGlmCisJICAgIGlmICghKGZsYWdzICYgSU5TQ0hBUl9GT1JNQVQpCisjaWZkZWYgRkVBVF9DT01NRU5UUworCQkgICAgJiYgbGVhZGVyX2xlbiA9PSAwCisjZW5kaWYKKwkJICAgICYmICFoYXNfZm9ybWF0X29wdGlvbihGT19XUkFQKSkKKworCSAgICB7CisJCXRleHR3aWR0aCA9IDA7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmICgoc3RhcnRjb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbCkgPT0gMCkKKwkJYnJlYWs7CisKKwkgICAgLyogZmluZCBjb2x1bW4gb2YgdGV4dHdpZHRoIGJvcmRlciAqLworCSAgICBjb2xhZHZhbmNlKChjb2xucl9UKXRleHR3aWR0aCk7CisJICAgIHdhbnRjb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IHN0YXJ0Y29sIC0gMTsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIC8qIENvcnJlY3QgY3Vyc29yIGZvciBtdWx0aS1ieXRlIGNoYXJhY3Rlci4gKi8KKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJbWJfYWRqdXN0X2N1cnNvcigpOworI2VuZGlmCisJICAgIGZvdW5kY29sID0gMDsKKworCSAgICAvKgorCSAgICAgKiBGaW5kIHBvc2l0aW9uIHRvIGJyZWFrIGF0LgorCSAgICAgKiBTdG9wIGF0IGZpcnN0IGVudGVyZWQgd2hpdGUgd2hlbiAnZm9ybWF0b3B0aW9ucycgaGFzICd2JworCSAgICAgKi8KKwkgICAgd2hpbGUgKCghZm9faW5zX2JsYW5rICYmICFoYXNfZm9ybWF0X29wdGlvbihGT19JTlNfVkkpKQorCQkJfHwgY3Vyd2luLT53X2N1cnNvci5sbnVtICE9IEluc3N0YXJ0LmxudW0KKwkJCXx8IGN1cndpbi0+d19jdXJzb3IuY29sID49IEluc3N0YXJ0LmNvbCkKKwkgICAgeworCQljYyA9IGdjaGFyX2N1cnNvcigpOworCQlpZiAoV0hJVEVDSEFSKGNjKSkKKwkJeworCQkgICAgLyogcmVtZW1iZXIgcG9zaXRpb24gb2YgYmxhbmsganVzdCBiZWZvcmUgdGV4dCAqLworCQkgICAgZW5kX2ZvdW5kY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisKKwkJICAgIC8qIGZpbmQgc3RhcnQgb2Ygc2VxdWVuY2Ugb2YgYmxhbmtzICovCisJCSAgICB3aGlsZSAoY3Vyd2luLT53X2N1cnNvci5jb2wgPiAwICYmIFdISVRFQ0hBUihjYykpCisJCSAgICB7CisJCQlkZWNfY3Vyc29yKCk7CisJCQljYyA9IGdjaGFyX2N1cnNvcigpOworCQkgICAgfQorCQkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IuY29sID09IDAgJiYgV0hJVEVDSEFSKGNjKSkKKwkJCWJyZWFrOwkJLyogb25seSBzcGFjZXMgaW4gZnJvbnQgb2YgdGV4dCAqLworI2lmZGVmIEZFQVRfQ09NTUVOVFMKKwkJICAgIC8qIERvbid0IGJyZWFrIHVudGlsIGFmdGVyIHRoZSBjb21tZW50IGxlYWRlciAqLworCQkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IuY29sIDwgbGVhZGVyX2xlbikKKwkJCWJyZWFrOworI2VuZGlmCisJCSAgICBpZiAoaGFzX2Zvcm1hdF9vcHRpb24oRk9fT05FX0xFVFRFUikpCisJCSAgICB7CisJCQkvKiBkbyBub3QgYnJlYWsgYWZ0ZXIgb25lLWxldHRlciB3b3JkcyAqLworCQkJaWYgKGN1cndpbi0+d19jdXJzb3IuY29sID09IDApCisJCQkgICAgYnJlYWs7CS8qIG9uZS1sZXR0ZXIgd29yZCBhdCBiZWdpbiAqLworCisJCQljb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwkJCWRlY19jdXJzb3IoKTsKKwkJCWNjID0gZ2NoYXJfY3Vyc29yKCk7CisKKwkJCWlmIChXSElURUNIQVIoY2MpKQorCQkJICAgIGNvbnRpbnVlOwkvKiBvbmUtbGV0dGVyLCBjb250aW51ZSAqLworCQkJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBjb2w7CisJCSAgICB9CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCWZvdW5kY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2wKKwkJCQkgICAgICAgKyAoKm1iX3B0cjJsZW5fY2hlY2spKG1sX2dldF9jdXJzb3IoKSk7CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCWZvdW5kY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2wgKyAxOworCQkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IuY29sIDwgKGNvbG5yX1Qpd2FudGNvbCkKKwkJCWJyZWFrOworCQl9CisjaWZkZWYgRkVBVF9NQllURQorCQllbHNlIGlmIChjYyA+PSAweDEwMCAmJiBmb19tdWx0aWJ5dGUKKwkJCQkgICYmIGN1cndpbi0+d19jdXJzb3IuY29sIDw9IChjb2xucl9UKXdhbnRjb2wpCisJCXsKKwkJICAgIC8qIEJyZWFrIGFmdGVyIG9yIGJlZm9yZSBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiAqLworCQkgICAgZm91bmRjb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwkJICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA8IChjb2xucl9UKXdhbnRjb2wpCisJCQlmb3VuZGNvbCArPSAoKm1iX2NoYXIybGVuKShjYyk7CisJCSAgICBlbmRfZm91bmRjb2wgPSBmb3VuZGNvbDsKKwkJICAgIGJyZWFrOworCQl9CisjZW5kaWYKKwkJaWYgKGN1cndpbi0+d19jdXJzb3IuY29sID09IDApCisJCSAgICBicmVhazsKKwkJZGVjX2N1cnNvcigpOworCSAgICB9CisKKwkgICAgaWYgKGZvdW5kY29sID09IDApCQkvKiBubyBzcGFjZXMsIGNhbm5vdCBicmVhayBsaW5lICovCisJICAgIHsKKwkJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBzdGFydGNvbDsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICAvKiBHb2luZyB0byBicmVhayB0aGUgbGluZSwgcmVtb3ZlIGFueSAiJCIgbm93LiAqLworCSAgICB1bmRpc3BsYXlfZG9sbGFyKCk7CisKKwkgICAgLyoKKwkgICAgICogT2Zmc2V0IGJldHdlZW4gY3Vyc29yIHBvc2l0aW9uIGFuZCBsaW5lIGJyZWFrIGlzIHVzZWQgYnkgcmVwbGFjZQorCSAgICAgKiBzdGFjayBmdW5jdGlvbnMuICBWUkVQTEFDRSBkb2VzIG5vdCB1c2UgdGhpcywgYW5kIGJhY2tzcGFjZXMKKwkgICAgICogb3ZlciB0aGUgdGV4dCBpbnN0ZWFkLgorCSAgICAgKi8KKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisJICAgIGlmIChTdGF0ZSAmIFZSRVBMQUNFX0ZMQUcpCisJCW9yaWdfY29sID0gc3RhcnRjb2w7CS8qIFdpbGwgc3RhcnQgYmFja3NwYWNpbmcgZnJvbSBoZXJlICovCisJICAgIGVsc2UKKyNlbmRpZgorCQlyZXBsYWNlX29mZnNldCA9IHN0YXJ0Y29sIC0gZW5kX2ZvdW5kY29sIC0gMTsKKworCSAgICAvKgorCSAgICAgKiBhZGp1c3Qgc3RhcnRjb2wgZm9yIHNwYWNlcyB0aGF0IHdpbGwgYmUgZGVsZXRlZCBhbmQKKwkgICAgICogY2hhcmFjdGVycyB0aGF0IHdpbGwgcmVtYWluIG9uIHRvcCBsaW5lCisJICAgICAqLworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGZvdW5kY29sOworCSAgICB3aGlsZSAoY2MgPSBnY2hhcl9jdXJzb3IoKSwgV0hJVEVDSEFSKGNjKSkKKwkJaW5jX2N1cnNvcigpOworCSAgICBzdGFydGNvbCAtPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwkgICAgaWYgKHN0YXJ0Y29sIDwgMCkKKwkJc3RhcnRjb2wgPSAwOworCisjaWZkZWYgRkVBVF9WUkVQTEFDRQorCSAgICBpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorCSAgICB7CisJCS8qCisJCSAqIEluIFZSRVBMQUNFIG1vZGUsIHdlIHdpbGwgYmFja3NwYWNlIG92ZXIgdGhlIHRleHQgdG8gYmUKKwkJICogd3JhcHBlZCwgc28gc2F2ZSBhIGNvcHkgbm93IHRvIHB1dCBvbiB0aGUgbmV4dCBsaW5lLgorCQkgKi8KKwkJc2F2ZWRfdGV4dCA9IHZpbV9zdHJzYXZlKG1sX2dldF9jdXJzb3IoKSk7CisJCWN1cndpbi0+d19jdXJzb3IuY29sID0gb3JpZ19jb2w7CisJCWlmIChzYXZlZF90ZXh0ID09IE5VTEwpCisJCSAgICBicmVhazsJLyogQ2FuJ3QgZG8gaXQsIG91dCBvZiBtZW1vcnkgKi8KKwkJc2F2ZWRfdGV4dFtzdGFydGNvbF0gPSBOVUw7CisKKwkJLyogQmFja3NwYWNlIG92ZXIgY2hhcmFjdGVycyB0aGF0IHdpbGwgbW92ZSB0byB0aGUgbmV4dCBsaW5lICovCisJCWlmICghZm9fd2hpdGVfcGFyKQorCQkgICAgYmFja3NwYWNlX3VudGlsX2NvbHVtbihmb3VuZGNvbCk7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkJLyogcHV0IGN1cnNvciBhZnRlciBwb3MuIHRvIGJyZWFrIGxpbmUgKi8KKwkJaWYgKCFmb193aGl0ZV9wYXIpCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGZvdW5kY29sOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogU3BsaXQgdGhlIGxpbmUganVzdCBiZWZvcmUgdGhlIG1hcmdpbi4KKwkgICAgICogT25seSBpbnNlcnQvZGVsZXRlIGxpbmVzLCBidXQgZG9uJ3QgcmVhbGx5IHJlZHJhdyB0aGUgd2luZG93LgorCSAgICAgKi8KKwkgICAgb3Blbl9saW5lKEZPUldBUkQsIE9QRU5MSU5FX0RFTFNQQUNFUyArIE9QRU5MSU5FX01BUktGSVgKKwkJICAgICsgKGZvX3doaXRlX3BhciA/IE9QRU5MSU5FX0tFRVBUUkFJTCA6IDApCisjaWZkZWYgRkVBVF9DT01NRU5UUworCQkgICAgKyAoZG9fY29tbWVudHMgPyBPUEVOTElORV9ET19DT00gOiAwKQorI2VuZGlmCisJCSAgICAsIG9sZF9pbmRlbnQpOworCSAgICBvbGRfaW5kZW50ID0gMDsKKworCSAgICByZXBsYWNlX29mZnNldCA9IDA7CisJICAgIGlmIChmaXJzdF9saW5lKQorCSAgICB7CisJCWlmIChzZWNvbmRfaW5kZW50IDwgMCAmJiBoYXNfZm9ybWF0X29wdGlvbihGT19RX05VTUJFUikpCisJCSAgICBzZWNvbmRfaW5kZW50ID0gZ2V0X251bWJlcl9pbmRlbnQoY3Vyd2luLT53X2N1cnNvci5sbnVtIC0xKTsKKwkJaWYgKHNlY29uZF9pbmRlbnQgPj0gMCkKKwkJeworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwkJICAgIGlmIChTdGF0ZSAmIFZSRVBMQUNFX0ZMQUcpCisJCQljaGFuZ2VfaW5kZW50KElOREVOVF9TRVQsIHNlY29uZF9pbmRlbnQsIEZBTFNFLCBOVUwpOworCQkgICAgZWxzZQorI2VuZGlmCisJCQkodm9pZClzZXRfaW5kZW50KHNlY29uZF9pbmRlbnQsIFNJTl9DSEFOR0VEKTsKKwkJfQorCQlmaXJzdF9saW5lID0gRkFMU0U7CisJICAgIH0KKworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwkgICAgaWYgKFN0YXRlICYgVlJFUExBQ0VfRkxBRykKKwkgICAgeworCQkvKgorCQkgKiBJbiBWUkVQTEFDRSBtb2RlIHdlIGhhdmUgYmFja3NwYWNlZCBvdmVyIHRoZSB0ZXh0IHRvIGJlCisJCSAqIG1vdmVkLCBub3cgd2UgcmUtaW5zZXJ0IGl0IGludG8gdGhlIG5ldyBsaW5lLgorCQkgKi8KKwkJaW5zX2J5dGVzKHNhdmVkX3RleHQpOworCQl2aW1fZnJlZShzYXZlZF90ZXh0KTsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkgICAgeworCQkvKgorCQkgKiBDaGVjayBpZiBjdXJzb3IgaXMgbm90IHBhc3QgdGhlIE5VTCBvZmYgdGhlIGxpbmUsIGNpbmRlbnQKKwkJICogbWF5IGhhdmUgYWRkZWQgb3IgcmVtb3ZlZCBpbmRlbnQuCisJCSAqLworCQljdXJ3aW4tPndfY3Vyc29yLmNvbCArPSBzdGFydGNvbDsKKwkJbGVuID0gKGNvbG5yX1QpU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpOworCQlpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPiBsZW4pCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGxlbjsKKwkgICAgfQorCisJICAgIGhhdmV0b19yZWRyYXcgPSBUUlVFOworI2lmZGVmIEZFQVRfQ0lOREVOVAorCSAgICBjYW5fY2luZGVudCA9IFRSVUU7CisjZW5kaWYKKwkgICAgLyogbW92ZWQgdGhlIGN1cnNvciwgZG9uJ3QgYXV0b2luZGVudCBvciBjaW5kZW50IG5vdyAqLworCSAgICBkaWRfYWkgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisJICAgIGRpZF9zaSA9IEZBTFNFOworCSAgICBjYW5fc2kgPSBGQUxTRTsKKwkgICAgY2FuX3NpX2JhY2sgPSBGQUxTRTsKKyNlbmRpZgorCSAgICBsaW5lX2JyZWFrY2hlY2soKTsKKwl9CisKKwlpZiAoc2F2ZV9jaGFyKQkJCS8qIHB1dCBiYWNrIHNwYWNlIGFmdGVyIGN1cnNvciAqLworCSAgICBwY2hhcl9jdXJzb3Ioc2F2ZV9jaGFyKTsKKworCWlmIChjID09IE5VTCkJCQkvKiBmb3JtYXR0aW5nIG9ubHkgKi8KKwkgICAgcmV0dXJuOworCWlmIChoYXZldG9fcmVkcmF3KQorCXsKKwkgICAgdXBkYXRlX3RvcGxpbmUoKTsKKwkgICAgcmVkcmF3X2N1cmJ1Zl9sYXRlcihWQUxJRCk7CisJfQorICAgIH0KKyAgICBpZiAoYyA9PSBOVUwpCSAgICAvKiBvbmx5IGZvcm1hdHRpbmcgd2FzIHdhbnRlZCAqLworCXJldHVybjsKKworI2lmZGVmIEZFQVRfQ09NTUVOVFMKKyAgICAvKiBDaGVjayB3aGV0aGVyIHRoaXMgY2hhcmFjdGVyIHNob3VsZCBlbmQgYSBjb21tZW50LiAqLworICAgIGlmIChkaWRfYWkgJiYgKGludCljID09IGVuZF9jb21tZW50X3BlbmRpbmcpCisgICAgeworCWNoYXJfdSAgKmxpbmU7CisJY2hhcl91CWxlYWRfZW5kW0NPTV9NQVhfTEVOXTsJICAgIC8qIGVuZC1jb21tZW50IHN0cmluZyAqLworCWludAltaWRkbGVfbGVuLCBlbmRfbGVuOworCWludAlpOworCisJLyoKKwkgKiBOZWVkIHRvIHJlbW92ZSBleGlzdGluZyAobWlkZGxlKSBjb21tZW50IGxlYWRlciBhbmQgaW5zZXJ0IGVuZAorCSAqIGNvbW1lbnQgbGVhZGVyLiAgRmlyc3QsIGNoZWNrIHdoYXQgY29tbWVudCBsZWFkZXIgd2UgY2FuIGZpbmQuCisJICovCisJaSA9IGdldF9sZWFkZXJfbGVuKGxpbmUgPSBtbF9nZXRfY3VybGluZSgpLCAmcCwgRkFMU0UpOworCWlmIChpID4gMCAmJiB2aW1fc3RyY2hyKHAsIENPTV9NSURETEUpICE9IE5VTEwpCS8qIEp1c3QgY2hlY2tpbmcgKi8KKwl7CisJICAgIC8qIFNraXAgbWlkZGxlLWNvbW1lbnQgc3RyaW5nICovCisJICAgIHdoaWxlICgqcCAmJiBwWy0xXSAhPSAnOicpCS8qIGZpbmQgZW5kIG9mIG1pZGRsZSBmbGFncyAqLworCQkrK3A7CisJICAgIG1pZGRsZV9sZW4gPSBjb3B5X29wdGlvbl9wYXJ0KCZwLCBsZWFkX2VuZCwgQ09NX01BWF9MRU4sICIsIik7CisJICAgIC8qIERvbid0IGNvdW50IHRyYWlsaW5nIHdoaXRlIHNwYWNlIGZvciBtaWRkbGVfbGVuICovCisJICAgIHdoaWxlIChtaWRkbGVfbGVuID4gMCAmJiB2aW1faXN3aGl0ZShsZWFkX2VuZFttaWRkbGVfbGVuIC0gMV0pKQorCQktLW1pZGRsZV9sZW47CisKKwkgICAgLyogRmluZCB0aGUgZW5kLWNvbW1lbnQgc3RyaW5nICovCisJICAgIHdoaWxlICgqcCAmJiBwWy0xXSAhPSAnOicpCS8qIGZpbmQgZW5kIG9mIGVuZCBmbGFncyAqLworCQkrK3A7CisJICAgIGVuZF9sZW4gPSBjb3B5X29wdGlvbl9wYXJ0KCZwLCBsZWFkX2VuZCwgQ09NX01BWF9MRU4sICIsIik7CisKKwkgICAgLyogU2tpcCB3aGl0ZSBzcGFjZSBiZWZvcmUgdGhlIGN1cnNvciAqLworCSAgICBpID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisJICAgIHdoaWxlICgtLWkgPj0gMCAmJiB2aW1faXN3aGl0ZShsaW5lW2ldKSkKKwkJOworCSAgICBpKys7CisKKwkgICAgLyogU2tpcCB0byBiZWZvcmUgdGhlIG1pZGRsZSBsZWFkZXIgKi8KKwkgICAgaSAtPSBtaWRkbGVfbGVuOworCisJICAgIC8qIENoZWNrIHNvbWUgZXhwZWN0ZWQgdGhpbmdzIGJlZm9yZSB3ZSBnbyBvbiAqLworCSAgICBpZiAoaSA+PSAwICYmIGxlYWRfZW5kW2VuZF9sZW4gLSAxXSA9PSBlbmRfY29tbWVudF9wZW5kaW5nKQorCSAgICB7CisJCS8qIEJhY2tzcGFjZSBvdmVyIGFsbCB0aGUgc3R1ZmYgd2Ugd2FudCB0byByZXBsYWNlICovCisJCWJhY2tzcGFjZV91bnRpbF9jb2x1bW4oaSk7CisKKwkJLyoKKwkJICogSW5zZXJ0IHRoZSBlbmQtY29tbWVudCBzdHJpbmcsIGV4Y2VwdCBmb3IgdGhlIGxhc3QKKwkJICogY2hhcmFjdGVyLCB3aGljaCB3aWxsIGdldCBpbnNlcnRlZCBhcyBub3JtYWwgbGF0ZXIuCisJCSAqLworCQlpbnNfYnl0ZXNfbGVuKGxlYWRfZW5kLCBlbmRfbGVuIC0gMSk7CisJICAgIH0KKwl9CisgICAgfQorICAgIGVuZF9jb21tZW50X3BlbmRpbmcgPSBOVUw7CisjZW5kaWYKKworICAgIGRpZF9haSA9IEZBTFNFOworI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKKyAgICBkaWRfc2kgPSBGQUxTRTsKKyAgICBjYW5fc2kgPSBGQUxTRTsKKyAgICBjYW5fc2lfYmFjayA9IEZBTFNFOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIElmIHRoZXJlJ3MgYW55IHBlbmRpbmcgaW5wdXQsIGdyYWIgdXAgdG8gSU5QVVRfQlVGTEVOIGF0IG9uY2UuCisgICAgICogVGhpcyBzcGVlZHMgdXAgbm9ybWFsIHRleHQgaW5wdXQgY29uc2lkZXJhYmx5LgorICAgICAqIERvbid0IGRvIHRoaXMgd2hlbiAnY2luZGVudCcgb3IgJ2luZGVudGV4cHInIGlzIHNldCwgYmVjYXVzZSB3ZSBtaWdodAorICAgICAqIG5lZWQgdG8gcmUtaW5kZW50IGF0IGEgJzonLCBvciBhbnkgb3RoZXIgY2hhcmFjdGVyIChidXQgbm90IHdoYXQKKyAgICAgKiAncGFzdGUnIGlzIHNldCkuLgorICAgICAqLworI2lmZGVmIFVTRV9PTl9GTFlfU0NST0xMCisgICAgZG9udF9zY3JvbGwgPSBGQUxTRTsJCS8qIGFsbG93IHNjcm9sbGluZyBoZXJlICovCisjZW5kaWYKKworICAgIGlmICggICAgICAgIUlTU1BFQ0lBTChjKQorI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgJiYgKCFoYXNfbWJ5dGUgfHwgKCptYl9jaGFyMmxlbikoYykgPT0gMSkKKyNlbmRpZgorCSAgICAmJiB2cGVla2MoKSAhPSBOVUwKKwkgICAgJiYgIShTdGF0ZSAmIFJFUExBQ0VfRkxBRykKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKwkgICAgJiYgIWNpbmRlbnRfb24oKQorI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkgICAgJiYgIXBfcmkKKyNlbmRpZgorCSAgICAgICApCisgICAgeworI2RlZmluZSBJTlBVVF9CVUZMRU4gMTAwCisJY2hhcl91CQlidWZbSU5QVVRfQlVGTEVOICsgMV07CisJaW50CQlpOworCWNvbG5yX1QJCXZpcnRjb2wgPSAwOworCisJYnVmWzBdID0gYzsKKwlpID0gMTsKKwlpZiAodGV4dHdpZHRoKQorCSAgICB2aXJ0Y29sID0gZ2V0X25vbGlzdF92aXJ0Y29sKCk7CisJLyoKKwkgKiBTdG9wIHRoZSBzdHJpbmcgd2hlbjoKKwkgKiAtIG5vIG1vcmUgY2hhcnMgYXZhaWxhYmxlCisJICogLSBmaW5kaW5nIGEgc3BlY2lhbCBjaGFyYWN0ZXIgKGNvbW1hbmQga2V5KQorCSAqIC0gYnVmZmVyIGlzIGZ1bGwKKwkgKiAtIHJ1bm5pbmcgaW50byB0aGUgJ3RleHR3aWR0aCcgYm91bmRhcnkKKwkgKiAtIG5lZWQgdG8gY2hlY2sgZm9yIGFiYnJldmlhdGlvbjogQSBub24td29yZCBjaGFyIGFmdGVyIGEgd29yZC1jaGFyCisJICovCisJd2hpbGUgKAkgICAoYyA9IHZwZWVrYygpKSAhPSBOVUwKKwkJJiYgIUlTU1BFQ0lBTChjKQorI2lmZGVmIEZFQVRfTUJZVEUKKwkJJiYgKCFoYXNfbWJ5dGUgfHwgTUJfQllURTJMRU5fQ0hFQ0soYykgPT0gMSkKKyNlbmRpZgorCQkmJiBpIDwgSU5QVVRfQlVGTEVOCisJCSYmICh0ZXh0d2lkdGggPT0gMAorCQkgICAgfHwgKHZpcnRjb2wgKz0gYnl0ZTJjZWxscyhidWZbaSAtIDFdKSkgPCAoY29sbnJfVCl0ZXh0d2lkdGgpCisJCSYmICEoIW5vX2FiYnIgJiYgIXZpbV9pc3dvcmRjKGMpICYmIHZpbV9pc3dvcmRjKGJ1ZltpIC0gMV0pKSkKKwl7CisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkgICAgYyA9IHZnZXRjKCk7CisJICAgIGlmIChwX2hrbWFwICYmIEtleVR5cGVkKQorCQljID0gaGttYXAoYyk7CQkgICAgLyogSGVicmV3IG1vZGUgbWFwcGluZyAqLworIyBpZmRlZiBGRUFUX0ZLTUFQCisJICAgIGlmIChwX2ZrbWFwICYmIEtleVR5cGVkKQorCQljID0gZmttYXAoYyk7CQkgICAgLyogRmFyc2kgbW9kZSBtYXBwaW5nICovCisjIGVuZGlmCisJICAgIGJ1ZltpKytdID0gYzsKKyNlbHNlCisJICAgIGJ1ZltpKytdID0gdmdldGMoKTsKKyNlbmRpZgorCX0KKworI2lmZGVmIEZFQVRfRElHUkFQSFMKKwlkb19kaWdyYXBoKC0xKTsJCQkvKiBjbGVhciBkaWdyYXBocyAqLworCWRvX2RpZ3JhcGgoYnVmW2ktMV0pOwkJLyogbWF5IGJlIHRoZSBzdGFydCBvZiBhIGRpZ3JhcGggKi8KKyNlbmRpZgorCWJ1ZltpXSA9IE5VTDsKKwlpbnNfc3RyKGJ1Zik7CisJaWYgKGZsYWdzICYgSU5TQ0hBUl9DVFJMVikKKwl7CisJICAgIHJlZG9fbGl0ZXJhbCgqYnVmKTsKKwkgICAgaSA9IDE7CisJfQorCWVsc2UKKwkgICAgaSA9IDA7CisJaWYgKGJ1ZltpXSAhPSBOVUwpCisJICAgIEFwcGVuZFRvUmVkb2J1ZmZMaXQoYnVmICsgaSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUgJiYgKGNjID0gKCptYl9jaGFyMmxlbikoYykpID4gMSkKKwl7CisJICAgIGNoYXJfdQlidWZbTUJfTUFYQllURVMgKyAxXTsKKworCSAgICAoKm1iX2NoYXIyYnl0ZXMpKGMsIGJ1Zik7CisJICAgIGJ1ZltjY10gPSBOVUw7CisJICAgIGluc19jaGFyX2J5dGVzKGJ1ZiwgY2MpOworCSAgICBBcHBlbmRDaGFyVG9SZWRvYnVmZihjKTsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBpbnNfY2hhcihjKTsKKwkgICAgaWYgKGZsYWdzICYgSU5TQ0hBUl9DVFJMVikKKwkJcmVkb19saXRlcmFsKGMpOworCSAgICBlbHNlCisJCUFwcGVuZENoYXJUb1JlZG9idWZmKGMpOworCX0KKyAgICB9Cit9CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgaW5zZXJ0aW5nIG9yIGRlbGV0aW5nIHRleHQ6IFdoZW4gJ2Zvcm1hdG9wdGlvbnMnIGluY2x1ZGVzIHRoZQorICogJ2EnIGZsYWcgZm9ybWF0IGZyb20gdGhlIGN1cnJlbnQgbGluZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGguCisgKiBLZWVwIHRoZSBjdXJzb3IgYXQgdGhlIHNhbWUgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHRleHQuCisgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBzYXZlZCB0aGUgY3Vyc29yIGxpbmUgZm9yIHVuZG8sIGZvbGxvd2luZyBvbmVzIHdpbGwgYmUKKyAqIHNhdmVkIGhlcmUuCisgKi8KKyAgICB2b2lkCithdXRvX2Zvcm1hdCh0cmFpbGJsYW5rLCBwcmV2X2xpbmUpCisgICAgaW50CQl0cmFpbGJsYW5rOwkvKiB3aGVuIFRSVUUgYWxzbyBmb3JtYXQgd2l0aCB0cmFpbGluZyBibGFuayAqLworICAgIGludAkJcHJldl9saW5lOwkvKiBtYXkgc3RhcnQgaW4gcHJldmlvdXMgbGluZSAqLworeworICAgIHBvc19UCXBvczsKKyAgICBjb2xucl9UCWxlbjsKKyAgICBjaGFyX3UJKm9sZDsKKyAgICBjaGFyX3UJKm5ldywgKnBuZXc7CisgICAgaW50CQl3YXNhdGVuZDsKKworICAgIGlmICghaGFzX2Zvcm1hdF9vcHRpb24oRk9fQVVUTykpCisJcmV0dXJuOworCisgICAgcG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICBvbGQgPSBtbF9nZXRfY3VybGluZSgpOworCisgICAgLyogbWF5IHJlbW92ZSBhZGRlZCBzcGFjZSAqLworICAgIGNoZWNrX2F1dG9fZm9ybWF0KEZBTFNFKTsKKworICAgIC8qIERvbid0IGZvcm1hdCBpbiBJbnNlcnQgbW9kZSB3aGVuIHRoZSBjdXJzb3IgaXMgb24gYSB0cmFpbGluZyBibGFuaywgdGhlCisgICAgICogdXNlciBtaWdodCBpbnNlcnQgbm9ybWFsIHRleHQgbmV4dC4gIEFsc28gc2tpcCBmb3JtYXR0aW5nIHdoZW4gIjEiIGlzCisgICAgICogaW4gJ2Zvcm1hdG9wdGlvbnMnIGFuZCB0aGVyZSBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjdXJzb3IuCisgICAgICogT3RoZXJ3aXNlIHRoZSBsaW5lIHdvdWxkIGJlIGJyb2tlbiBhbmQgd2hlbiB0eXBpbmcgYW5vdGhlciBub24td2hpdGUKKyAgICAgKiBuZXh0IHRoZXkgYXJlIG5vdCBqb2luZWQgYmFjayB0b2dldGhlci4gKi8KKyAgICB3YXNhdGVuZCA9IChwb3MuY29sID09IFNUUkxFTihvbGQpKTsKKyAgICBpZiAoKm9sZCAhPSBOVUwgJiYgIXRyYWlsYmxhbmsgJiYgd2FzYXRlbmQpCisgICAgeworCWRlY19jdXJzb3IoKTsKKwlpZiAoIVdISVRFQ0hBUihnY2hhcl9jdXJzb3IoKSkKKwkJJiYgY3Vyd2luLT53X2N1cnNvci5jb2wgPiAwCisJCSYmIGhhc19mb3JtYXRfb3B0aW9uKEZPX09ORV9MRVRURVIpKQorCSAgICBkZWNfY3Vyc29yKCk7CisJaWYgKFdISVRFQ0hBUihnY2hhcl9jdXJzb3IoKSkpCisJeworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gcG9zOworCSAgICByZXR1cm47CisJfQorCWN1cndpbi0+d19jdXJzb3IgPSBwb3M7CisgICAgfQorCisjaWZkZWYgRkVBVF9DT01NRU5UUworICAgIC8qIFdpdGggdGhlICdjJyBmbGFnIGluICdmb3JtYXRvcHRpb25zJyBhbmQgJ3QnIG1pc3Npbmc6IG9ubHkgZm9ybWF0CisgICAgICogY29tbWVudHMuICovCisgICAgaWYgKGhhc19mb3JtYXRfb3B0aW9uKEZPX1dSQVBfQ09NUykgJiYgIWhhc19mb3JtYXRfb3B0aW9uKEZPX1dSQVApCisJCQkJICAgICAmJiBnZXRfbGVhZGVyX2xlbihvbGQsIE5VTEwsIEZBTFNFKSA9PSAwKQorCXJldHVybjsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBNYXkgc3RhcnQgZm9ybWF0dGluZyBpbiBhIHByZXZpb3VzIGxpbmUsIHNvIHRoYXQgYWZ0ZXIgIngiIGEgd29yZCBpcworICAgICAqIG1vdmVkIHRvIHRoZSBwcmV2aW91cyBsaW5lIGlmIGl0IGZpdHMgdGhlcmUgbm93LiAgT25seSB3aGVuIHRoaXMgaXMgbm90CisgICAgICogdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoLgorICAgICAqLworICAgIGlmIChwcmV2X2xpbmUgJiYgIXBhcmFncmFwaF9zdGFydChjdXJ3aW4tPndfY3Vyc29yLmxudW0pKQorICAgIHsKKwktLWN1cndpbi0+d19jdXJzb3IubG51bTsKKwlpZiAodV9zYXZlX2N1cnNvcigpID09IEZBSUwpCisJICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERvIHRoZSBmb3JtYXR0aW5nIGFuZCByZXN0b3JlIHRoZSBjdXJzb3IgcG9zaXRpb24uICAic2F2ZWRfY3Vyc29yIiB3aWxsCisgICAgICogYmUgYWRqdXN0ZWQgZm9yIHRoZSB0ZXh0IGZvcm1hdHRpbmcuCisgICAgICovCisgICAgc2F2ZWRfY3Vyc29yID0gcG9zOworICAgIGZvcm1hdF9saW5lcygobGluZW5yX1QpLTEpOworICAgIGN1cndpbi0+d19jdXJzb3IgPSBzYXZlZF9jdXJzb3I7CisgICAgc2F2ZWRfY3Vyc29yLmxudW0gPSAwOworCisgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorICAgIHsKKwkvKiAiY2Fubm90IGhhcHBlbiIgKi8KKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwljb2xhZHZhbmNlKChjb2xucl9UKU1BWENPTCk7CisgICAgfQorICAgIGVsc2UKKwljaGVja19jdXJzb3JfY29sKCk7CisKKyAgICAvKiBJbnNlcnQgbW9kZTogSWYgdGhlIGN1cnNvciBpcyBub3cgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGluZSB3aGlsZSBpdAorICAgICAqIHByZXZpb3VzbHkgd2Fzbid0LCB0aGUgbGluZSB3YXMgYnJva2VuLiAgQmVjYXVzZSBvZiB0aGUgcnVsZSBhYm92ZSB3ZQorICAgICAqIG5lZWQgdG8gYWRkIGEgc3BhY2Ugd2hlbiAndycgaXMgaW4gJ2Zvcm1hdG9wdGlvbnMnIHRvIGtlZXAgYSBwYXJhZ3JhcGgKKyAgICAgKiBmb3JtYXR0ZWQuICovCisgICAgaWYgKCF3YXNhdGVuZCAmJiBoYXNfZm9ybWF0X29wdGlvbihGT19XSElURV9QQVIpKQorICAgIHsKKwluZXcgPSBtbF9nZXRfY3VybGluZSgpOworCWxlbiA9IFNUUkxFTihuZXcpOworCWlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA9PSBsZW4pCisJeworCSAgICBwbmV3ID0gdmltX3N0cm5zYXZlKG5ldywgbGVuICsgMik7CisJICAgIHBuZXdbbGVuXSA9ICcgJzsKKwkgICAgcG5ld1tsZW4gKyAxXSA9IE5VTDsKKwkgICAgbWxfcmVwbGFjZShjdXJ3aW4tPndfY3Vyc29yLmxudW0sIHBuZXcsIEZBTFNFKTsKKwkgICAgLyogcmVtb3ZlIHRoZSBzcGFjZSBsYXRlciAqLworCSAgICBkaWRfYWRkX3NwYWNlID0gVFJVRTsKKwl9CisJZWxzZQorCSAgICAvKiBtYXkgcmVtb3ZlIGFkZGVkIHNwYWNlICovCisJICAgIGNoZWNrX2F1dG9fZm9ybWF0KEZBTFNFKTsKKyAgICB9CisKKyAgICBjaGVja19jdXJzb3IoKTsKK30KKworLyoKKyAqIFdoZW4gYW4gZXh0cmEgc3BhY2Ugd2FzIGFkZGVkIHRvIGNvbnRpbnVlIGEgcGFyYWdyYXBoIGZvciBhdXRvLWZvcm1hdHRpbmcsCisgKiBkZWxldGUgaXQgbm93LiAgVGhlIHNwYWNlIG11c3QgYmUgdW5kZXIgdGhlIGN1cnNvciwganVzdCBhZnRlciB0aGUgaW5zZXJ0CisgKiBwb3NpdGlvbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjaGVja19hdXRvX2Zvcm1hdChlbmRfaW5zZXJ0KQorICAgIGludAkJZW5kX2luc2VydDsJICAgIC8qIFRSVUUgd2hlbiBlbmRpbmcgSW5zZXJ0IG1vZGUgKi8KK3sKKyAgICBpbnQJCWMgPSAnICc7CisKKyAgICBpZiAoZGlkX2FkZF9zcGFjZSkKKyAgICB7CisJaWYgKCFXSElURUNIQVIoZ2NoYXJfY3Vyc29yKCkpKQorCSAgICAvKiBTb21laG93IHRoZSBzcGFjZSB3YXMgcmVtb3ZlZCBhbHJlYWR5LiAqLworCSAgICBkaWRfYWRkX3NwYWNlID0gRkFMU0U7CisJZWxzZQorCXsKKwkgICAgaWYgKCFlbmRfaW5zZXJ0KQorCSAgICB7CisJCWluY19jdXJzb3IoKTsKKwkJYyA9IGdjaGFyX2N1cnNvcigpOworCQlkZWNfY3Vyc29yKCk7CisJICAgIH0KKwkgICAgaWYgKGMgIT0gTlVMKQorCSAgICB7CisJCS8qIFRoZSBzcGFjZSBpcyBubyBsb25nZXIgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSwgZGVsZXRlIGl0LiAqLworCQlkZWxfY2hhcihGQUxTRSk7CisJCWRpZF9hZGRfc3BhY2UgPSBGQUxTRTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8qCisgKiBGaW5kIG91dCB0ZXh0d2lkdGggdG8gYmUgdXNlZCBmb3IgZm9ybWF0dGluZzoKKyAqCWlmICd0ZXh0d2lkdGgnIG9wdGlvbiBpcyBzZXQsIHVzZSBpdAorICoJZWxzZSBpZiAnd3JhcG1hcmdpbicgb3B0aW9uIGlzIHNldCwgdXNlIFdfV0lEVEgoY3Vyd2luKSAtICd3cmFwbWFyZ2luJworICoJaWYgaW52YWxpZCB2YWx1ZSwgdXNlIDAuCisgKglTZXQgZGVmYXVsdCB0byB3aW5kb3cgd2lkdGggKG1heGltdW0gNzkpIGZvciAiZ3EiIG9wZXJhdG9yLgorICovCisgICAgaW50Citjb21wX3RleHR3aWR0aChmZikKKyAgICBpbnQJCWZmOwkvKiBmb3JjZSBmb3JtYXR0aW5nIChmb3IgIlEiIGNvbW1hbmQpICovCit7CisgICAgaW50CQl0ZXh0d2lkdGg7CisKKyAgICB0ZXh0d2lkdGggPSBjdXJidWYtPmJfcF90dzsKKyAgICBpZiAodGV4dHdpZHRoID09IDAgJiYgY3VyYnVmLT5iX3Bfd20pCisgICAgeworCS8qIFRoZSB3aWR0aCBpcyB0aGUgd2luZG93IHdpZHRoIG1pbnVzICd3cmFwbWFyZ2luJyBtaW51cyBhbGwgdGhlCisJICogdGhpbmdzIHRoYXQgYWRkIHRvIHRoZSBtYXJnaW4uICovCisJdGV4dHdpZHRoID0gV19XSURUSChjdXJ3aW4pIC0gY3VyYnVmLT5iX3Bfd207CisjaWZkZWYgRkVBVF9DTURXSU4KKwlpZiAoY21kd2luX3R5cGUgIT0gMCkKKwkgICAgdGV4dHdpZHRoIC09IDE7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwl0ZXh0d2lkdGggLT0gY3Vyd2luLT53X3BfZmRjOworI2VuZGlmCisjaWZkZWYgRkVBVF9TSUdOUworCWlmIChjdXJ3aW4tPndfYnVmZmVyLT5iX3NpZ25saXN0ICE9IE5VTEwKKyMgaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJCQkgICAgfHwgdXNpbmdOZXRiZWFucworIyBlbmRpZgorCQkgICAgKQorCSAgICB0ZXh0d2lkdGggLT0gMTsKKyNlbmRpZgorCWlmIChjdXJ3aW4tPndfcF9udSkKKwkgICAgdGV4dHdpZHRoIC09IDg7CisgICAgfQorICAgIGlmICh0ZXh0d2lkdGggPCAwKQorCXRleHR3aWR0aCA9IDA7CisgICAgaWYgKGZmICYmIHRleHR3aWR0aCA9PSAwKQorICAgIHsKKwl0ZXh0d2lkdGggPSBXX1dJRFRIKGN1cndpbikgLSAxOworCWlmICh0ZXh0d2lkdGggPiA3OSkKKwkgICAgdGV4dHdpZHRoID0gNzk7CisgICAgfQorICAgIHJldHVybiB0ZXh0d2lkdGg7Cit9CisKKy8qCisgKiBQdXQgYSBjaGFyYWN0ZXIgaW4gdGhlIHJlZG8gYnVmZmVyLCBmb3Igd2hlbiBqdXN0IGFmdGVyIGEgQ1RSTC1WLgorICovCisgICAgc3RhdGljIHZvaWQKK3JlZG9fbGl0ZXJhbChjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBjaGFyX3UJYnVmWzEwXTsKKworICAgIC8qIE9ubHkgZGlnaXRzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQuICBUcmFuc2xhdGUgdGhlbSBpbnRvIGEgc3RyaW5nIG9mCisgICAgICogdGhyZWUgZGlnaXRzLiAqLworICAgIGlmIChWSU1fSVNESUdJVChjKSkKKyAgICB7CisJc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiUwM2QiLCBjKTsKKwlBcHBlbmRUb1JlZG9idWZmKGJ1Zik7CisgICAgfQorICAgIGVsc2UKKwlBcHBlbmRDaGFyVG9SZWRvYnVmZihjKTsKK30KKworLyoKKyAqIHN0YXJ0X2Fycm93KCkgaXMgY2FsbGVkIHdoZW4gYW4gYXJyb3cga2V5IGlzIHVzZWQgaW4gaW5zZXJ0IG1vZGUuCisgKiBJdCByZXNlbWJsZXMgaGl0dGluZyB0aGUgPEVTQz4ga2V5LgorICovCisgICAgc3RhdGljIHZvaWQKK3N0YXJ0X2Fycm93KGVuZF9pbnNlcnRfcG9zKQorICAgIHBvc19UICAgICplbmRfaW5zZXJ0X3BvczsKK3sKKyAgICBpZiAoIWFycm93X3VzZWQpCSAgICAvKiBzb21ldGhpbmcgaGFzIGJlZW4gaW5zZXJ0ZWQgKi8KKyAgICB7CisJQXBwZW5kVG9SZWRvYnVmZihFU0NfU1RSKTsKKwlzdG9wX2luc2VydChlbmRfaW5zZXJ0X3BvcywgRkFMU0UpOworCWFycm93X3VzZWQgPSBUUlVFOwkvKiB0aGlzIG1lYW5zIHdlIHN0b3BwZWQgdGhlIGN1cnJlbnQgaW5zZXJ0ICovCisgICAgfQorfQorCisvKgorICogc3RvcF9hcnJvdygpIGlzIGNhbGxlZCBiZWZvcmUgYSBjaGFuZ2UgaXMgbWFkZSBpbiBpbnNlcnQgbW9kZS4KKyAqIElmIGFuIGFycm93IGtleSBoYXMgYmVlbiB1c2VkLCBzdGFydCBhIG5ldyBpbnNlcnRpb24uCisgKiBSZXR1cm5zIEZBSUwgaWYgdW5kbyBpcyBpbXBvc3NpYmxlLCBzaG91bGRuJ3QgaW5zZXJ0IHRoZW4uCisgKi8KKyAgICBpbnQKK3N0b3BfYXJyb3coKQoreworICAgIGlmIChhcnJvd191c2VkKQorICAgIHsKKwlpZiAodV9zYXZlX2N1cnNvcigpID09IE9LKQorCXsKKwkgICAgYXJyb3dfdXNlZCA9IEZBTFNFOworCSAgICBpbnNfbmVlZF91bmRvID0gRkFMU0U7CisJfQorCUluc3N0YXJ0ID0gY3Vyd2luLT53X2N1cnNvcjsJLyogbmV3IGluc2VydGlvbiBzdGFydHMgaGVyZSAqLworCUluc3N0YXJ0X3RleHRsZW4gPSBsaW5ldGFic2l6ZShtbF9nZXRfY3VybGluZSgpKTsKKwlhaV9jb2wgPSAwOworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwlpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorCXsKKwkgICAgb3JpZ19saW5lX2NvdW50ID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJICAgIHZyX2xpbmVzX2NoYW5nZWQgPSAxOworCX0KKyNlbmRpZgorCVJlc2V0UmVkb2J1ZmYoKTsKKwlBcHBlbmRUb1JlZG9idWZmKChjaGFyX3UgKikiMWkiKTsgICAvKiBwcmV0ZW5kIHdlIHN0YXJ0IGFuIGluc2VydGlvbiAqLworICAgIH0KKyAgICBlbHNlIGlmIChpbnNfbmVlZF91bmRvKQorICAgIHsKKwlpZiAodV9zYXZlX2N1cnNvcigpID09IE9LKQorCSAgICBpbnNfbmVlZF91bmRvID0gRkFMU0U7CisgICAgfQorCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgLyogQWx3YXlzIG9wZW4gZm9sZCBhdCB0aGUgY3Vyc29yIGxpbmUgd2hlbiBpbnNlcnRpbmcgc29tZXRoaW5nLiAqLworICAgIGZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKKworICAgIHJldHVybiAoYXJyb3dfdXNlZCB8fCBpbnNfbmVlZF91bmRvID8gRkFJTCA6IE9LKTsKK30KKworLyoKKyAqIGRvIGEgZmV3IHRoaW5ncyB0byBzdG9wIGluc2VydGluZworICovCisgICAgc3RhdGljIHZvaWQKK3N0b3BfaW5zZXJ0KGVuZF9pbnNlcnRfcG9zLCBlc2MpCisgICAgcG9zX1QgICAgKmVuZF9pbnNlcnRfcG9zOwkvKiB3aGVyZSBpbnNlcnQgZW5kZWQgKi8KKyAgICBpbnQJICAgIGVzYzsJCS8qIGNhbGxlZCBieSBpbnNfZXNjKCkgKi8KK3sKKyAgICBpbnQJICAgIGNjOworCisgICAgc3RvcF9yZWRvX2lucygpOworICAgIHJlcGxhY2VfZmx1c2goKTsJCS8qIGFiYW5kb24gcmVwbGFjZSBzdGFjayAqLworCisgICAgLyoKKyAgICAgKiBzYXZlIHRoZSBpbnNlcnRlZCB0ZXh0IGZvciBsYXRlciByZWRvIHdpdGggXkAKKyAgICAgKi8KKyAgICB2aW1fZnJlZShsYXN0X2luc2VydCk7CisgICAgbGFzdF9pbnNlcnQgPSBnZXRfaW5zZXJ0ZWQoKTsKKyAgICBsYXN0X2luc2VydF9za2lwID0gbmV3X2luc2VydF9za2lwOworCisgICAgaWYgKCFhcnJvd191c2VkKQorICAgIHsKKwkvKiBBdXRvLWZvcm1hdCBub3cuICBJdCBtYXkgc2VlbSBzdHJhbmdlIHRvIGRvIHRoaXMgd2hlbiBzdG9wcGluZyBhbgorCSAqIGluc2VydGlvbiAob3IgbW92aW5nIHRoZSBjdXJzb3IpLCBidXQgaXQncyByZXF1aXJlZCB3aGVuIGFwcGVuZGluZworCSAqIGEgbGluZSBhbmQgaGF2aW5nIGl0IGVuZCBpbiBhIHNwYWNlLiAgQnV0IG9ubHkgZG8gaXQgd2hlbiBzb21ldGhpbmcKKwkgKiB3YXMgYWN0dWFsbHkgaW5zZXJ0ZWQsIG90aGVyd2lzZSB1bmRvIHdvbid0IHdvcmsuICovCisJaWYgKCFpbnNfbmVlZF91bmRvKQorCXsKKwkgICAgLyogV2hlbiB0aGUgY3Vyc29yIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgYWZ0ZXIgYSBzcGFjZSB0aGUKKwkgICAgICogZm9ybWF0dGluZyB3aWxsIG1vdmUgaXQgdG8gdGhlIGZvbGxvd2luZyB3b3JkLiAgQXZvaWQgdGhhdCBieQorCSAgICAgKiBtb3ZpbmcgdGhlIGN1cnNvciBvbnRvIHRoZSBzcGFjZS4gKi8KKwkgICAgY2MgPSAneCc7CisJICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA+IDAgJiYgZ2NoYXJfY3Vyc29yKCkgPT0gTlVMKQorCSAgICB7CisJCWRlY19jdXJzb3IoKTsKKwkJY2MgPSBnY2hhcl9jdXJzb3IoKTsKKwkJaWYgKCF2aW1faXN3aGl0ZShjYykpCisJCSAgICBpbmNfY3Vyc29yKCk7CisJICAgIH0KKworCSAgICBhdXRvX2Zvcm1hdChUUlVFLCBGQUxTRSk7CisKKwkgICAgaWYgKHZpbV9pc3doaXRlKGNjKSAmJiBnY2hhcl9jdXJzb3IoKSAhPSBOVUwpCisJCWluY19jdXJzb3IoKTsKKwl9CisKKwkvKiBJZiBhIHNwYWNlIHdhcyBpbnNlcnRlZCBmb3IgYXV0by1mb3JtYXR0aW5nLCByZW1vdmUgaXQgbm93LiAqLworCWNoZWNrX2F1dG9fZm9ybWF0KFRSVUUpOworCisJLyogSWYgd2UganVzdCBkaWQgYW4gYXV0by1pbmRlbnQsIHJlbW92ZSB0aGUgd2hpdGUgc3BhY2UgZnJvbSB0aGUgZW5kCisJICogb2YgdGhlIGxpbmUsIGFuZCBwdXQgdGhlIGN1cnNvciBiYWNrLiAgKi8KKwlpZiAoZGlkX2FpICYmIGVzYykKKwl7CisJICAgIGlmIChnY2hhcl9jdXJzb3IoKSA9PSBOVUwgJiYgY3Vyd2luLT53X2N1cnNvci5jb2wgPiAwKQorCQktLWN1cndpbi0+d19jdXJzb3IuY29sOworCSAgICB3aGlsZSAoY2MgPSBnY2hhcl9jdXJzb3IoKSwgdmltX2lzd2hpdGUoY2MpKQorCQkodm9pZClkZWxfY2hhcihUUlVFKTsKKwkgICAgaWYgKGNjICE9IE5VTCkKKwkJKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsJLyogcHV0IGN1cnNvciBiYWNrIG9uIHRoZSBOVUwgKi8KKworI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIC8qIDxDLVMtUmlnaHQ+IG1heSBoYXZlIHN0YXJ0ZWQgVmlzdWFsIG1vZGUsIGFkanVzdCB0aGUgcG9zaXRpb24gZm9yCisJICAgICAqIGRlbGV0ZWQgY2hhcmFjdGVycy4gKi8KKwkgICAgaWYgKFZJc3VhbF9hY3RpdmUgJiYgVklzdWFsLmxudW0gPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCSAgICB7CisJCWNjID0gU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpOworCQlpZiAoVklzdWFsLmNvbCA+IChjb2xucl9UKWNjKQorCQl7CisJCSAgICBWSXN1YWwuY29sID0gY2M7CisjIGlmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJICAgIFZJc3VhbC5jb2xhZGQgPSAwOworIyBlbmRpZgorCQl9CisJICAgIH0KKyNlbmRpZgorCX0KKyAgICB9CisgICAgZGlkX2FpID0gRkFMU0U7CisjaWZkZWYgRkVBVF9TTUFSVElOREVOVAorICAgIGRpZF9zaSA9IEZBTFNFOworICAgIGNhbl9zaSA9IEZBTFNFOworICAgIGNhbl9zaV9iYWNrID0gRkFMU0U7CisjZW5kaWYKKworICAgIC8qIHNldCAnWyBhbmQgJ10gdG8gdGhlIGluc2VydGVkIHRleHQgKi8KKyAgICBjdXJidWYtPmJfb3Bfc3RhcnQgPSBJbnNzdGFydDsKKyAgICBjdXJidWYtPmJfb3BfZW5kID0gKmVuZF9pbnNlcnRfcG9zOworfQorCisvKgorICogU2V0IHRoZSBsYXN0IGluc2VydGVkIHRleHQgdG8gYSBzaW5nbGUgY2hhcmFjdGVyLgorICogVXNlZCBmb3IgdGhlIHJlcGxhY2UgY29tbWFuZC4KKyAqLworICAgIHZvaWQKK3NldF9sYXN0X2luc2VydChjKQorICAgIGludAkJYzsKK3sKKyAgICBjaGFyX3UJKnM7CisKKyAgICB2aW1fZnJlZShsYXN0X2luc2VydCk7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGxhc3RfaW5zZXJ0ID0gYWxsb2MoTUJfTUFYQllURVMgKiAzICsgNSk7CisjZWxzZQorICAgIGxhc3RfaW5zZXJ0ID0gYWxsb2MoNik7CisjZW5kaWYKKyAgICBpZiAobGFzdF9pbnNlcnQgIT0gTlVMTCkKKyAgICB7CisJcyA9IGxhc3RfaW5zZXJ0OworCS8qIFVzZSB0aGUgQ1RSTC1WIG9ubHkgd2hlbiBlbnRlcmluZyBhIHNwZWNpYWwgY2hhciAqLworCWlmIChjIDwgJyAnIHx8IGMgPT0gREVMKQorCSAgICAqcysrID0gQ3RybF9WOworCXMgPSBhZGRfY2hhcjJidWYoYywgcyk7CisJKnMrKyA9IEVTQzsKKwkqcysrID0gTlVMOworCWxhc3RfaW5zZXJ0X3NraXAgPSAwOworICAgIH0KK30KKworLyoKKyAqIEFkZCBjaGFyYWN0ZXIgImMiIHRvIGJ1ZmZlciAicyIuICBFc2NhcGUgdGhlIHNwZWNpYWwgbWVhbmluZyBvZiBLX1NQRUNJQUwKKyAqIGFuZCBDU0kuICBIYW5kbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gYWZ0ZXIgdGhlIGFkZGVkIGJ5dGVzLgorICovCisgICAgY2hhcl91ICoKK2FkZF9jaGFyMmJ1ZihjLCBzKQorICAgIGludAkJYzsKKyAgICBjaGFyX3UJKnM7Cit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGNoYXJfdQl0ZW1wW01CX01BWEJZVEVTXTsKKyAgICBpbnQJCWk7CisgICAgaW50CQlsZW47CisKKyAgICBsZW4gPSAoKm1iX2NoYXIyYnl0ZXMpKGMsIHRlbXApOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICB7CisJYyA9IHRlbXBbaV07CisjZW5kaWYKKwkvKiBOZWVkIHRvIGVzY2FwZSBLX1NQRUNJQUwgYW5kIENTSSBsaWtlIGluIHRoZSB0eXBlYWhlYWQgYnVmZmVyLiAqLworCWlmIChjID09IEtfU1BFQ0lBTCkKKwl7CisJICAgICpzKysgPSBLX1NQRUNJQUw7CisJICAgICpzKysgPSBLU19TUEVDSUFMOworCSAgICAqcysrID0gS0VfRklMTEVSOworCX0KKyNpZmRlZiBGRUFUX0dVSQorCWVsc2UgaWYgKGMgPT0gQ1NJKQorCXsKKwkgICAgKnMrKyA9IENTSTsKKwkgICAgKnMrKyA9IEtTX0VYVFJBOworCSAgICAqcysrID0gKGludClLRV9DU0k7CisJfQorI2VuZGlmCisJZWxzZQorCSAgICAqcysrID0gYzsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHM7Cit9CisKKy8qCisgKiBtb3ZlIGN1cnNvciB0byBzdGFydCBvZiBsaW5lCisgKiBpZiBmbGFncyAmIEJMX1dISVRFCW1vdmUgdG8gZmlyc3Qgbm9uLXdoaXRlCisgKiBpZiBmbGFncyAmIEJMX1NPTAltb3ZlIHRvIGZpcnN0IG5vbi13aGl0ZSBpZiBzdGFydG9mbGluZSBpcyBzZXQsCisgKgkJCSAgICBvdGhlcndpc2Uga2VlcCAiY3Vyc3dhbnQiIGNvbHVtbgorICogaWYgZmxhZ3MgJiBCTF9GSVgJZG9uJ3QgbGVhdmUgdGhlIGN1cnNvciBvbiBhIE5VTC4KKyAqLworICAgIHZvaWQKK2JlZ2lubGluZShmbGFncykKKyAgICBpbnQJCWZsYWdzOworeworICAgIGlmICgoZmxhZ3MgJiBCTF9TT0wpICYmICFwX3NvbCkKKwljb2xhZHZhbmNlKGN1cndpbi0+d19jdXJzd2FudCk7CisgICAgZWxzZQorICAgIHsKKwljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCWN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorCisJaWYgKGZsYWdzICYgKEJMX1dISVRFIHwgQkxfU09MKSkKKwl7CisJICAgIGNoYXJfdSAgKnB0cjsKKworCSAgICBmb3IgKHB0ciA9IG1sX2dldF9jdXJsaW5lKCk7IHZpbV9pc3doaXRlKCpwdHIpCisJCQkgICAgICAgJiYgISgoZmxhZ3MgJiBCTF9GSVgpICYmIHB0clsxXSA9PSBOVUwpOyArK3B0cikKKwkJKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwl9CisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisgICAgfQorfQorCisvKgorICogb25lcmlnaHQgb25lbGVmdCBjdXJzb3JfZG93biBjdXJzb3JfdXAKKyAqCisgKiBNb3ZlIG9uZSBjaGFyIHtyaWdodCxsZWZ0LGRvd24sdXB9LgorICogRG9lc24ndCBtb3ZlIG9udG8gdGhlIE5VTCBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUuCisgKiBSZXR1cm4gT0sgd2hlbiBzdWNjZXNzZnVsLCBGQUlMIHdoZW4gd2UgaGl0IGEgbGluZSBvZiBmaWxlIGJvdW5kYXJ5LgorICovCisKKyAgICBpbnQKK29uZXJpZ2h0KCkKK3sKKyAgICBjaGFyX3UJKnB0cjsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQlsOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgaWYgKHZpcnR1YWxfYWN0aXZlKCkpCisgICAgeworCXBvc19UCXByZXZwb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworCisJLyogQWRqdXN0IGZvciBtdWx0aS13aWRlIGNoYXIgKGV4Y2x1ZGluZyBUQUIpICovCisJcHRyID0gbWxfZ2V0X2N1cnNvcigpOworCWNvbGFkdmFuY2UoZ2V0dmlzY29sKCkgKyAoKCpwdHIgIT0gVEFCICYmIHZpbV9pc3ByaW50YygKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgKCptYl9wdHIyY2hhcikocHRyKQorI2Vsc2UKKwkJCSAgICAqcHRyCisjZW5kaWYKKwkJCSAgICApKQorCQkgICAgPyBwdHIyY2VsbHMocHRyKSA6IDEpKTsKKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKwkvKiBSZXR1cm4gT0sgaWYgdGhlIGN1cnNvciBtb3ZlZCwgRkFJTCBvdGhlcndpc2UgKGF0IHdpbmRvdyBlZGdlKS4gKi8KKwlyZXR1cm4gKHByZXZwb3MuY29sICE9IGN1cndpbi0+d19jdXJzb3IuY29sCisJCSAgICB8fCBwcmV2cG9zLmNvbGFkZCAhPSBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCkgPyBPSyA6IEZBSUw7CisgICAgfQorI2VuZGlmCisKKyAgICBwdHIgPSBtbF9nZXRfY3Vyc29yKCk7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChoYXNfbWJ5dGUgJiYgKGwgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHB0cikpID4gMSkKKyAgICB7CisJLyogVGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIGlzIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIsIG1vdmUKKwkgKiBzZXZlcmFsIGJ5dGVzIHJpZ2h0LCBidXQgZG9uJ3QgZW5kIHVwIG9uIHRoZSBOVUwuICovCisJaWYgKHB0cltsXSA9PSBOVUwpCisJICAgIHJldHVybiBGQUlMOworCWN1cndpbi0+d19jdXJzb3IuY29sICs9IGw7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwlpZiAoKnB0cisrID09IE5VTCB8fCAqcHRyID09IE5VTCkKKwkgICAgcmV0dXJuIEZBSUw7CisJKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyAgICB9CisKKyAgICBjdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICBpbnQKK29uZWxlZnQoKQoreworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICBpZiAodmlydHVhbF9hY3RpdmUoKSkKKyAgICB7CisJaW50IHdpZHRoOworCWludCB2ID0gZ2V0dmlzY29sKCk7CisKKwlpZiAodiA9PSAwKQorCSAgICByZXR1cm4gRkFJTDsKKworIyBpZmRlZiBGRUFUX0xJTkVCUkVBSworCS8qIFdlIG1pZ2h0IGdldCBzdHVjayBvbiAnc2hvd2JyZWFrJywgc2tpcCBvdmVyIGl0LiAqLworCXdpZHRoID0gMTsKKwlmb3IgKDs7KQorCXsKKwkgICAgY29sYWR2YW5jZSh2IC0gd2lkdGgpOworCSAgICAvKiBnZXR2aXNjb2woKSBpcyBzbG93LCBza2lwIGl0IHdoZW4gJ3Nob3dicmVhaycgaXMgZW1wdHkgYW5kCisJICAgICAqIHRoZXJlIGFyZSBubyBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgKi8KKwkgICAgaWYgKCgqcF9zYnIgPT0gTlVMCisjICBpZmRlZiBGRUFUX01CWVRFCisJCQkmJiAhaGFzX21ieXRlCisjICBlbmRpZgorCQkJKSB8fCBnZXR2aXNjb2woKSA8IHYpCisJCWJyZWFrOworCSAgICArK3dpZHRoOworCX0KKyMgZWxzZQorCWNvbGFkdmFuY2UodiAtIDEpOworIyBlbmRpZgorCisJaWYgKGN1cndpbi0+d19jdXJzb3IuY29sYWRkID09IDEpCisJeworCSAgICBjaGFyX3UgKnB0cjsKKworCSAgICAvKiBBZGp1c3QgZm9yIG11bHRpLXdpZGUgY2hhciAobm90IGEgVEFCKSAqLworCSAgICBwdHIgPSBtbF9nZXRfY3Vyc29yKCk7CisJICAgIGlmICgqcHRyICE9IFRBQiAmJiB2aW1faXNwcmludGMoCisjICBpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgKCptYl9wdHIyY2hhcikocHRyKQorIyAgZWxzZQorCQkJICAgICpwdHIKKyMgIGVuZGlmCisJCQkgICAgKSAmJiBwdHIyY2VsbHMocHRyKSA+IDEpCisJCWN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKwl9CisKKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKwlyZXR1cm4gT0s7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPT0gMCkKKwlyZXR1cm4gRkFJTDsKKworICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworICAgIC0tY3Vyd2luLT53X2N1cnNvci5jb2w7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyogaWYgdGhlIGNoYXJhY3RlciBvbiB0aGUgbGVmdCBvZiB0aGUgY3VycmVudCBjdXJzb3IgaXMgYSBtdWx0aS1ieXRlCisgICAgICogY2hhcmFjdGVyLCBtb3ZlIHRvIGl0cyBmaXJzdCBieXRlICovCisgICAgaWYgKGhhc19tYnl0ZSkKKwltYl9hZGp1c3RfY3Vyc29yKCk7CisjZW5kaWYKKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICBpbnQKK2N1cnNvcl91cChuLCB1cGRfdG9wbGluZSkKKyAgICBsb25nCW47CisgICAgaW50CQl1cGRfdG9wbGluZTsJICAgIC8qIFdoZW4gVFJVRTogdXBkYXRlIHRvcGxpbmUgKi8KK3sKKyAgICBsaW5lbnJfVAlsbnVtOworCisgICAgaWYgKG4gPiAwKQorICAgIHsKKwlsbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCWlmIChsbnVtIDw9IDEpCisJICAgIHJldHVybiBGQUlMOworCWlmIChuID49IGxudW0pCisJICAgIGxudW0gPSAxOworCWVsc2UKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgaWYgKGhhc0FueUZvbGRpbmcoY3Vyd2luKSkKKwl7CisJICAgIC8qCisJICAgICAqIENvdW50IGVhY2ggc2VxdWVuY2Ugb2YgZm9sZGVkIGxpbmVzIGFzIG9uZSBsb2dpY2FsIGxpbmUuCisJICAgICAqLworCSAgICAvKiBnbyB0byB0aGUgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGZvbGQgKi8KKwkgICAgKHZvaWQpaGFzRm9sZGluZyhsbnVtLCAmbG51bSwgTlVMTCk7CisKKwkgICAgd2hpbGUgKG4tLSkKKwkgICAgeworCQkvKiBtb3ZlIHVwIG9uZSBsaW5lICovCisJCS0tbG51bTsKKwkJaWYgKGxudW0gPD0gMSkKKwkJICAgIGJyZWFrOworCQkvKiBJZiB3ZSBlbnRlcmVkIGEgZm9sZCwgbW92ZSB0byB0aGUgYmVnaW5uaW5nLCB1bmxlc3MgaW4KKwkJICogSW5zZXJ0IG1vZGUgb3Igd2hlbiAnZm9sZG9wZW4nIGNvbnRhaW5zICJhbGwiOiBpdCB3aWxsIG9wZW4KKwkJICogaW4gYSBtb21lbnQuICovCisJCWlmIChuID4gMCB8fCAhKChTdGF0ZSAmIElOU0VSVCkgfHwgKGZkb19mbGFncyAmIEZET19BTEwpKSkKKwkJICAgICh2b2lkKWhhc0ZvbGRpbmcobG51bSwgJmxudW0sIE5VTEwpOworCSAgICB9CisJICAgIGlmIChsbnVtIDwgMSkKKwkJbG51bSA9IDE7CisJfQorCWVsc2UKKyNlbmRpZgorCSAgICBsbnVtIC09IG47CisJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbG51bTsKKyAgICB9CisKKyAgICAvKiB0cnkgdG8gYWR2YW5jZSB0byB0aGUgY29sdW1uIHdlIHdhbnQgdG8gYmUgYXQgKi8KKyAgICBjb2xhZHZhbmNlKGN1cndpbi0+d19jdXJzd2FudCk7CisKKyAgICBpZiAodXBkX3RvcGxpbmUpCisJdXBkYXRlX3RvcGxpbmUoKTsJLyogbWFrZSBzdXJlIGN1cndpbi0+d190b3BsaW5lIGlzIHZhbGlkICovCisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBDdXJzb3IgZG93biBhIG51bWJlciBvZiBsb2dpY2FsIGxpbmVzLgorICovCisgICAgaW50CitjdXJzb3JfZG93bihuLCB1cGRfdG9wbGluZSkKKyAgICBsb25nCW47CisgICAgaW50CQl1cGRfdG9wbGluZTsJICAgIC8qIFdoZW4gVFJVRTogdXBkYXRlIHRvcGxpbmUgKi8KK3sKKyAgICBsaW5lbnJfVAlsbnVtOworCisgICAgaWYgKG4gPiAwKQorICAgIHsKKwlsbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworI2lmZGVmIEZFQVRfRk9MRElORworCS8qIE1vdmUgdG8gbGFzdCBsaW5lIG9mIGZvbGQsIHdpbGwgZmFpbCBpZiBpdCdzIHRoZSBlbmQtb2YtZmlsZS4gKi8KKwkodm9pZCloYXNGb2xkaW5nKGxudW0sIE5VTEwsICZsbnVtKTsKKyNlbmRpZgorCWlmIChsbnVtID49IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSAgICByZXR1cm4gRkFJTDsKKwlpZiAobG51bSArIG4gPj0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJICAgIGxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwllbHNlCisjaWZkZWYgRkVBVF9GT0xESU5HCisJaWYgKGhhc0FueUZvbGRpbmcoY3Vyd2luKSkKKwl7CisJICAgIGxpbmVucl9UCWxhc3Q7CisKKwkgICAgLyogY291bnQgZWFjaCBzZXF1ZW5jZSBvZiBmb2xkZWQgbGluZXMgYXMgb25lIGxvZ2ljYWwgbGluZSAqLworCSAgICB3aGlsZSAobi0tKQorCSAgICB7CisJCWlmIChoYXNGb2xkaW5nKGxudW0sIE5VTEwsICZsYXN0KSkKKwkJICAgIGxudW0gPSBsYXN0ICsgMTsKKwkJZWxzZQorCQkgICAgKytsbnVtOworCQlpZiAobG51bSA+PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIGlmIChsbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCWxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgIGxudW0gKz0gbjsKKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtOworICAgIH0KKworICAgIC8qIHRyeSB0byBhZHZhbmNlIHRvIHRoZSBjb2x1bW4gd2Ugd2FudCB0byBiZSBhdCAqLworICAgIGNvbGFkdmFuY2UoY3Vyd2luLT53X2N1cnN3YW50KTsKKworICAgIGlmICh1cGRfdG9wbGluZSkKKwl1cGRhdGVfdG9wbGluZSgpOwkvKiBtYWtlIHN1cmUgY3Vyd2luLT53X3RvcGxpbmUgaXMgdmFsaWQgKi8KKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFN0dWZmIHRoZSBsYXN0IGluc2VydGVkIHRleHQgaW4gdGhlIHJlYWQgYnVmZmVyLgorICogTGFzdF9pbnNlcnQgYWN0dWFsbHkgaXMgYSBjb3B5IG9mIHRoZSByZWRvIGJ1ZmZlciwgc28gd2UKKyAqIGZpcnN0IGhhdmUgdG8gcmVtb3ZlIHRoZSBjb21tYW5kLgorICovCisgICAgaW50CitzdHVmZl9pbnNlcnRlZChjLCBjb3VudCwgbm9fZXNjKQorICAgIGludAkgICAgYzsJCS8qIENvbW1hbmQgY2hhcmFjdGVyIHRvIGJlIGluc2VydGVkICovCisgICAgbG9uZyAgICBjb3VudDsJLyogUmVwZWF0IHRoaXMgbWFueSB0aW1lcyAqLworICAgIGludAkgICAgbm9fZXNjOwkvKiBEb24ndCBhZGQgYW4gRVNDIGF0IHRoZSBlbmQgKi8KK3sKKyAgICBjaGFyX3UJKmVzY19wdHI7CisgICAgY2hhcl91CSpwdHI7CisgICAgY2hhcl91CSpsYXN0X3B0cjsKKyAgICBjaGFyX3UJbGFzdCA9IE5VTDsKKworICAgIHB0ciA9IGdldF9sYXN0X2luc2VydCgpOworICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICB7CisJRU1TRyhfKGVfbm9pbnN0ZXh0KSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgLyogbWF5IHdhbnQgdG8gc3R1ZmYgdGhlIGNvbW1hbmQgY2hhcmFjdGVyLCB0byBzdGFydCBJbnNlcnQgbW9kZSAqLworICAgIGlmIChjICE9IE5VTCkKKwlzdHVmZmNoYXJSZWFkYnVmZihjKTsKKyAgICBpZiAoKGVzY19wdHIgPSAoY2hhcl91ICopdmltX3N0cnJjaHIocHRyLCBFU0MpKSAhPSBOVUxMKQorCSplc2NfcHRyID0gTlVMOwkgICAgLyogcmVtb3ZlIHRoZSBFU0MgKi8KKworICAgIC8qIHdoZW4gdGhlIGxhc3QgY2hhciBpcyBlaXRoZXIgIjAiIG9yICJeIiBpdCB3aWxsIGJlIHF1b3RlZCBpZiBubyBFU0MKKyAgICAgKiBjb21lcyBhZnRlciBpdCBPUiBpZiBpdCB3aWxsIGluc2VydGVkIG1vcmUgdGhhbiBvbmNlIGFuZCAicHRyIgorICAgICAqIHN0YXJ0cyB3aXRoIF5ELgktLSBBY2V2ZWRvCisgICAgICovCisgICAgbGFzdF9wdHIgPSAoZXNjX3B0ciA/IGVzY19wdHIgOiBwdHIgKyBTVFJMRU4ocHRyKSkgLSAxOworICAgIGlmIChsYXN0X3B0ciA+PSBwdHIgJiYgKCpsYXN0X3B0ciA9PSAnMCcgfHwgKmxhc3RfcHRyID09ICdeJykKKwkgICAgJiYgKG5vX2VzYyB8fCAoKnB0ciA9PSBDdHJsX0QgJiYgY291bnQgPiAxKSkpCisgICAgeworCWxhc3QgPSAqbGFzdF9wdHI7CisJKmxhc3RfcHRyID0gTlVMOworICAgIH0KKworICAgIGRvCisgICAgeworCXN0dWZmUmVhZGJ1ZmYocHRyKTsKKwkvKiBhIHRyYWlsaW5nICIwIiBpcyBpbnNlcnRlZCBhcyAiPEMtVj4wNDgiLCAiXiIgYXMgIjxDLVY+XiIgKi8KKwlpZiAobGFzdCkKKwkgICAgc3R1ZmZSZWFkYnVmZigoY2hhcl91ICopKGxhc3QgPT0gJzAnCisJCQk/IElGX0VCKCJcMDI2XDA2MFwwNjRcMDcwIiwgQ1RSTF9WX1NUUiAieGYwIikKKwkJCTogSUZfRUIoIlwwMjZeIiwgQ1RSTF9WX1NUUiAiXiIpKSk7CisgICAgfQorICAgIHdoaWxlICgtLWNvdW50ID4gMCk7CisKKyAgICBpZiAobGFzdCkKKwkqbGFzdF9wdHIgPSBsYXN0OworCisgICAgaWYgKGVzY19wdHIgIT0gTlVMTCkKKwkqZXNjX3B0ciA9IEVTQzsJICAgIC8qIHB1dCB0aGUgRVNDIGJhY2sgKi8KKworICAgIC8qIG1heSB3YW50IHRvIHN0dWZmIGEgdHJhaWxpbmcgRVNDLCB0byBnZXQgb3V0IG9mIEluc2VydCBtb2RlICovCisgICAgaWYgKCFub19lc2MpCisJc3R1ZmZjaGFyUmVhZGJ1ZmYoRVNDKTsKKworICAgIHJldHVybiBPSzsKK30KKworICAgIGNoYXJfdSAqCitnZXRfbGFzdF9pbnNlcnQoKQoreworICAgIGlmIChsYXN0X2luc2VydCA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgIHJldHVybiBsYXN0X2luc2VydCArIGxhc3RfaW5zZXJ0X3NraXA7Cit9CisKKy8qCisgKiBHZXQgbGFzdCBpbnNlcnRlZCBzdHJpbmcsIGFuZCByZW1vdmUgdHJhaWxpbmcgPEVzYz4uCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSAobXVzdCBiZSBmcmVlZCkgb3IgTlVMTC4KKyAqLworICAgIGNoYXJfdSAqCitnZXRfbGFzdF9pbnNlcnRfc2F2ZSgpCit7CisgICAgY2hhcl91CSpzOworICAgIGludAkJbGVuOworCisgICAgaWYgKGxhc3RfaW5zZXJ0ID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisgICAgcyA9IHZpbV9zdHJzYXZlKGxhc3RfaW5zZXJ0ICsgbGFzdF9pbnNlcnRfc2tpcCk7CisgICAgaWYgKHMgIT0gTlVMTCkKKyAgICB7CisJbGVuID0gKGludClTVFJMRU4ocyk7CisJaWYgKGxlbiA+IDAgJiYgc1tsZW4gLSAxXSA9PSBFU0MpCS8qIHJlbW92ZSB0cmFpbGluZyBFU0MgKi8KKwkgICAgc1tsZW4gLSAxXSA9IE5VTDsKKyAgICB9CisgICAgcmV0dXJuIHM7Cit9CisKKy8qCisgKiBDaGVjayB0aGUgd29yZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yIGZvciBhbiBhYmJyZXZpYXRpb24uCisgKiBDYWxsZWQgd2hlbiB0aGUgbm9uLWlkIGNoYXJhY3RlciAiYyIgaGFzIGJlZW4gZW50ZXJlZC4KKyAqIFdoZW4gYW4gYWJicmV2aWF0aW9uIGlzIHJlY29nbml6ZWQgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0ZXh0IGFuZAorICogdGhlIHJlcGxhY2VtZW50IHN0cmluZyBpcyBpbnNlcnRlZCBpbiB0eXBlYnVmLnRiX2J1ZltdLCBmb2xsb3dlZCBieSAiYyIuCisgKi8KKyAgICBzdGF0aWMgaW50CitlY2hlY2tfYWJicihjKQorICAgIGludCBjOworeworICAgIC8qIERvbid0IGNoZWNrIGZvciBhYmJyZXZpYXRpb24gaW4gcGFzdGUgbW9kZSwgd2hlbiBkaXNhYmxlZCBhbmQganVzdAorICAgICAqIGFmdGVyIG1vdmluZyBhcm91bmQgd2l0aCBjdXJzb3Iga2V5cy4gKi8KKyAgICBpZiAocF9wYXN0ZSB8fCBub19hYmJyIHx8IGFycm93X3VzZWQpCisJcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIGNoZWNrX2FiYnIoYywgbWxfZ2V0X2N1cmxpbmUoKSwgY3Vyd2luLT53X2N1cnNvci5jb2wsCisJCWN1cndpbi0+d19jdXJzb3IubG51bSA9PSBJbnNzdGFydC5sbnVtID8gSW5zc3RhcnQuY29sIDogMCk7Cit9CisKKy8qCisgKiByZXBsYWNlLXN0YWNrIGZ1bmN0aW9ucworICoKKyAqIFdoZW4gcmVwbGFjaW5nIGNoYXJhY3RlcnMsIHRoZSByZXBsYWNlZCBjaGFyYWN0ZXJzIGFyZSByZW1lbWJlcmVkIGZvciBlYWNoCisgKiBuZXcgY2hhcmFjdGVyLiAgVGhpcyBpcyB1c2VkIHRvIHJlLWluc2VydCB0aGUgb2xkIHRleHQgd2hlbiBiYWNrc3BhY2luZy4KKyAqCisgKiBUaGVyZSBpcyBhIE5VTCBoZWFkZWQgbGlzdCBvZiBjaGFyYWN0ZXJzIGZvciBlYWNoIGNoYXJhY3RlciB0aGF0IGlzCisgKiBjdXJyZW50bHkgaW4gdGhlIGZpbGUgYWZ0ZXIgdGhlIGluc2VydGlvbiBwb2ludC4gIFdoZW4gQlMgaXMgdXNlZCwgb25lIE5VTAorICogaGVhZGVkIGxpc3QgaXMgcHV0IGJhY2sgZm9yIHRoZSBkZWxldGVkIGNoYXJhY3Rlci4KKyAqCisgKiBGb3IgYSBuZXdsaW5lLCB0aGVyZSBhcmUgdHdvIE5VTCBoZWFkZWQgbGlzdHMuICBPbmUgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMKKyAqIHRoYXQgdGhlIE5MIHJlcGxhY2VkLiAgVGhlIGV4dHJhIG9uZSBzdG9yZXMgdGhlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGN1cnNvcgorICogdGhhdCB3ZXJlIGRlbGV0ZWQgKGFsd2F5cyB3aGl0ZSBzcGFjZSkuCisgKgorICogUmVwbGFjZV9vZmZzZXQgaXMgbm9ybWFsbHkgMCwgaW4gd2hpY2ggY2FzZSByZXBsYWNlX3B1c2ggd2lsbCBhZGQgYSBuZXcKKyAqIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZSBzdGFjay4gIElmIHJlcGxhY2Vfb2Zmc2V0IGlzIG5vdCAwLCB0aGF0IG1hbnkKKyAqIGNoYXJhY3RlcnMgd2lsbCBiZSBsZWZ0IG9uIHRoZSBzdGFjayBhYm92ZSB0aGUgbmV3bHkgaW5zZXJ0ZWQgY2hhcmFjdGVyLgorICovCisKK2NoYXJfdQkqcmVwbGFjZV9zdGFjayA9IE5VTEw7Citsb25nCXJlcGxhY2Vfc3RhY2tfbnIgPSAwOwkgICAgLyogbmV4dCBlbnRyeSBpbiByZXBsYWNlIHN0YWNrICovCitsb25nCXJlcGxhY2Vfc3RhY2tfbGVuID0gMDsJICAgIC8qIG1heC4gbnVtYmVyIG9mIGVudHJpZXMgKi8KKworICAgIHZvaWQKK3JlcGxhY2VfcHVzaChjKQorICAgIGludAkgICAgYzsJICAgIC8qIGNoYXJhY3RlciB0aGF0IGlzIHJlcGxhY2VkIChOVUwgaXMgbm9uZSkgKi8KK3sKKyAgICBjaGFyX3UgICpwOworCisgICAgaWYgKHJlcGxhY2Vfc3RhY2tfbnIgPCByZXBsYWNlX29mZnNldCkJLyogbm90aGluZyB0byBkbyAqLworCXJldHVybjsKKyAgICBpZiAocmVwbGFjZV9zdGFja19sZW4gPD0gcmVwbGFjZV9zdGFja19ucikKKyAgICB7CisJcmVwbGFjZV9zdGFja19sZW4gKz0gNTA7CisJcCA9IGxhbGxvYyhzaXplb2YoY2hhcl91KSAqIHJlcGxhY2Vfc3RhY2tfbGVuLCBUUlVFKTsKKwlpZiAocCA9PSBOVUxMKQkgICAgLyogb3V0IG9mIG1lbW9yeSAqLworCXsKKwkgICAgcmVwbGFjZV9zdGFja19sZW4gLT0gNTA7CisJICAgIHJldHVybjsKKwl9CisJaWYgKHJlcGxhY2Vfc3RhY2sgIT0gTlVMTCkKKwl7CisJICAgIG1jaF9tZW1tb3ZlKHAsIHJlcGxhY2Vfc3RhY2ssCisJCQkJIChzaXplX3QpKHJlcGxhY2Vfc3RhY2tfbnIgKiBzaXplb2YoY2hhcl91KSkpOworCSAgICB2aW1fZnJlZShyZXBsYWNlX3N0YWNrKTsKKwl9CisJcmVwbGFjZV9zdGFjayA9IHA7CisgICAgfQorICAgIHAgPSByZXBsYWNlX3N0YWNrICsgcmVwbGFjZV9zdGFja19uciAtIHJlcGxhY2Vfb2Zmc2V0OworICAgIGlmIChyZXBsYWNlX29mZnNldCkKKwltY2hfbWVtbW92ZShwICsgMSwgcCwgKHNpemVfdCkocmVwbGFjZV9vZmZzZXQgKiBzaXplb2YoY2hhcl91KSkpOworICAgICpwID0gYzsKKyAgICArK3JlcGxhY2Vfc3RhY2tfbnI7Cit9CisKKy8qCisgKiBjYWxsIHJlcGxhY2VfcHVzaChjKSB3aXRoIHJlcGxhY2Vfb2Zmc2V0IHNldCB0byB0aGUgZmlyc3QgTlVMLgorICovCisgICAgc3RhdGljIHZvaWQKK3JlcGxhY2VfcHVzaF9vZmYoYykKKyAgICBpbnQJICAgIGM7Cit7CisgICAgY2hhcl91CSpwOworCisgICAgcCA9IHJlcGxhY2Vfc3RhY2sgKyByZXBsYWNlX3N0YWNrX25yOworICAgIGZvciAocmVwbGFjZV9vZmZzZXQgPSAxOyByZXBsYWNlX29mZnNldCA8IHJlcGxhY2Vfc3RhY2tfbnI7CisJCQkJCQkJICAgICArK3JlcGxhY2Vfb2Zmc2V0KQorCWlmICgqLS1wID09IE5VTCkKKwkgICAgYnJlYWs7CisgICAgcmVwbGFjZV9wdXNoKGMpOworICAgIHJlcGxhY2Vfb2Zmc2V0ID0gMDsKK30KKworLyoKKyAqIFBvcCBvbmUgaXRlbSBmcm9tIHRoZSByZXBsYWNlIHN0YWNrLgorICogcmV0dXJuIC0xIGlmIHN0YWNrIGVtcHR5CisgKiByZXR1cm4gcmVwbGFjZWQgY2hhcmFjdGVyIG9yIE5VTCBvdGhlcndpc2UKKyAqLworICAgIHN0YXRpYyBpbnQKK3JlcGxhY2VfcG9wKCkKK3sKKyAgICBpZiAocmVwbGFjZV9zdGFja19uciA9PSAwKQorCXJldHVybiAtMTsKKyAgICByZXR1cm4gKGludClyZXBsYWNlX3N0YWNrWy0tcmVwbGFjZV9zdGFja19ucl07Cit9CisKKy8qCisgKiBKb2luIHRoZSB0b3AgdHdvIGl0ZW1zIG9uIHRoZSByZXBsYWNlIHN0YWNrLiAgVGhpcyByZW1vdmVzIHRvICJvZmYiJ3RoIE5VTAorICogZW5jb3VudGVyZWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcmVwbGFjZV9qb2luKG9mZikKKyAgICBpbnQJICAgIG9mZjsJLyogb2Zmc2V0IGZvciB3aGljaCBOVUwgdG8gcmVtb3ZlICovCit7CisgICAgaW50CSAgICBpOworCisgICAgZm9yIChpID0gcmVwbGFjZV9zdGFja19ucjsgLS1pID49IDA7ICkKKwlpZiAocmVwbGFjZV9zdGFja1tpXSA9PSBOVUwgJiYgb2ZmLS0gPD0gMCkKKwl7CisJICAgIC0tcmVwbGFjZV9zdGFja19ucjsKKwkgICAgbWNoX21lbW1vdmUocmVwbGFjZV9zdGFjayArIGksIHJlcGxhY2Vfc3RhY2sgKyBpICsgMSwKKwkJCQkJICAgICAgKHNpemVfdCkocmVwbGFjZV9zdGFja19uciAtIGkpKTsKKwkgICAgcmV0dXJuOworCX0KK30KKworLyoKKyAqIFBvcCBieXRlcyBmcm9tIHRoZSByZXBsYWNlIHN0YWNrIHVudGlsIGEgTlVMIGlzIGZvdW5kLCBhbmQgaW5zZXJ0IHRoZW0KKyAqIGJlZm9yZSB0aGUgY3Vyc29yLiAgQ2FuIG9ubHkgYmUgdXNlZCBpbiBSRVBMQUNFIG9yIFZSRVBMQUNFIG1vZGUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcmVwbGFjZV9wb3BfaW5zKCkKK3sKKyAgICBpbnQJICAgIGNjOworICAgIGludAkgICAgb2xkU3RhdGUgPSBTdGF0ZTsKKworICAgIFN0YXRlID0gTk9STUFMOwkJCS8qIGRvbid0IHdhbnQgUkVQTEFDRSBoZXJlICovCisgICAgd2hpbGUgKChjYyA9IHJlcGxhY2VfcG9wKCkpID4gMCkKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCW1iX3JlcGxhY2VfcG9wX2lucyhjYyk7CisjZWxzZQorCWluc19jaGFyKGNjKTsKKyNlbmRpZgorCWRlY19jdXJzb3IoKTsKKyAgICB9CisgICAgU3RhdGUgPSBvbGRTdGF0ZTsKK30KKworI2lmZGVmIEZFQVRfTUJZVEUKKy8qCisgKiBJbnNlcnQgYnl0ZXMgcG9wcGVkIGZyb20gdGhlIHJlcGxhY2Ugc3RhY2suICJjYyIgaXMgdGhlIGZpcnN0IGJ5dGUuICBJZiBpdAorICogaW5kaWNhdGVzIGEgbXVsdGktYnl0ZSBjaGFyLCBwb3AgdGhlIG90aGVyIGJ5dGVzIHRvby4KKyAqLworICAgIHN0YXRpYyB2b2lkCittYl9yZXBsYWNlX3BvcF9pbnMoY2MpCisgICAgaW50CQljYzsKK3sKKyAgICBpbnQJCW47CisgICAgY2hhcl91CWJ1ZltNQl9NQVhCWVRFU107CisgICAgaW50CQlpOworICAgIGludAkJYzsKKworICAgIGlmIChoYXNfbWJ5dGUgJiYgKG4gPSBNQl9CWVRFMkxFTihjYykpID4gMSkKKyAgICB7CisJYnVmWzBdID0gY2M7CisJZm9yIChpID0gMTsgaSA8IG47ICsraSkKKwkgICAgYnVmW2ldID0gcmVwbGFjZV9wb3AoKTsKKwlpbnNfYnl0ZXNfbGVuKGJ1Ziwgbik7CisgICAgfQorICAgIGVsc2UKKwlpbnNfY2hhcihjYyk7CisKKyAgICBpZiAoZW5jX3V0ZjgpCisJLyogSGFuZGxlIGNvbXBvc2luZyBjaGFycy4gKi8KKwlmb3IgKDs7KQorCXsKKwkgICAgYyA9IHJlcGxhY2VfcG9wKCk7CisJICAgIGlmIChjID09IC0xKQkgICAgLyogc3RhY2sgZW1wdHkgKi8KKwkJYnJlYWs7CisJICAgIGlmICgobiA9IE1CX0JZVEUyTEVOKGMpKSA9PSAxKQorCSAgICB7CisJCS8qIE5vdCBhIG11bHRpLWJ5dGUgY2hhciwgcHV0IGl0IGJhY2suICovCisJCXJlcGxhY2VfcHVzaChjKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWJ1ZlswXSA9IGM7CisJCWZvciAoaSA9IDE7IGkgPCBuOyArK2kpCisJCSAgICBidWZbaV0gPSByZXBsYWNlX3BvcCgpOworCQlpZiAodXRmX2lzY29tcG9zaW5nKHV0Zl9wdHIyY2hhcihidWYpKSkKKwkJICAgIGluc19ieXRlc19sZW4oYnVmLCBuKTsKKwkJZWxzZQorCQl7CisJCSAgICAvKiBOb3QgYSBjb21wb3NpbmcgY2hhciwgcHV0IGl0IGJhY2suICovCisJCSAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpCisJCQlyZXBsYWNlX3B1c2goYnVmW2ldKTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9Cit9CisjZW5kaWYKKworLyoKKyAqIG1ha2UgdGhlIHJlcGxhY2Ugc3RhY2sgZW1wdHkKKyAqIChjYWxsZWQgd2hlbiBleGl0aW5nIHJlcGxhY2UgbW9kZSkKKyAqLworICAgIHN0YXRpYyB2b2lkCityZXBsYWNlX2ZsdXNoKCkKK3sKKyAgICB2aW1fZnJlZShyZXBsYWNlX3N0YWNrKTsKKyAgICByZXBsYWNlX3N0YWNrID0gTlVMTDsKKyAgICByZXBsYWNlX3N0YWNrX2xlbiA9IDA7CisgICAgcmVwbGFjZV9zdGFja19uciA9IDA7Cit9CisKKy8qCisgKiBIYW5kbGUgZG9pbmcgYSBCUyBmb3Igb25lIGNoYXJhY3Rlci4KKyAqIGNjIDwgMDogcmVwbGFjZSBzdGFjayBlbXB0eSwganVzdCBtb3ZlIGN1cnNvcgorICogY2MgPT0gMDogY2hhcmFjdGVyIHdhcyBpbnNlcnRlZCwgZGVsZXRlIGl0CisgKiBjYyA+IDA6IGNoYXJhY3RlciB3YXMgcmVwbGFjZWQsIHB1dCBjYyAoZmlyc3QgYnl0ZSBvZiBvcmlnaW5hbCBjaGFyKSBiYWNrCisgKiBhbmQgY2hlY2sgZm9yIG1vcmUgY2hhcmFjdGVycyB0byBiZSBwdXQgYmFjaworICovCisgICAgc3RhdGljIHZvaWQKK3JlcGxhY2VfZG9fYnMoKQoreworICAgIGludAkJY2M7CisjaWZkZWYgRkVBVF9WUkVQTEFDRQorICAgIGludAkJb3JpZ19sZW4gPSAwOworICAgIGludAkJaW5zX2xlbjsKKyAgICBpbnQJCW9yaWdfdmNvbHMgPSAwOworICAgIGNvbG5yX1QJc3RhcnRfdmNvbDsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpOworICAgIGludAkJdmNvbDsKKyNlbmRpZgorCisgICAgY2MgPSByZXBsYWNlX3BvcCgpOworICAgIGlmIChjYyA+IDApCisgICAgeworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwlpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorCXsKKwkgICAgLyogR2V0IHRoZSBudW1iZXIgb2Ygc2NyZWVuIGNlbGxzIHVzZWQgYnkgdGhlIGNoYXJhY3RlciB3ZSBhcmUKKwkgICAgICogZ29pbmcgdG8gZGVsZXRlLiAqLworCSAgICBnZXR2Y29sKGN1cndpbiwgJmN1cndpbi0+d19jdXJzb3IsIE5VTEwsICZzdGFydF92Y29sLCBOVUxMKTsKKwkgICAgb3JpZ192Y29scyA9IGNoYXJ0YWJzaXplKG1sX2dldF9jdXJzb3IoKSwgc3RhcnRfdmNvbCk7CisJfQorI2VuZGlmCisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBkZWxfY2hhcihGQUxTRSk7CisjIGlmZGVmIEZFQVRfVlJFUExBQ0UKKwkgICAgaWYgKFN0YXRlICYgVlJFUExBQ0VfRkxBRykKKwkJb3JpZ19sZW4gPSBTVFJMRU4obWxfZ2V0X2N1cnNvcigpKTsKKyMgZW5kaWYKKwkgICAgcmVwbGFjZV9wdXNoKGNjKTsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBwY2hhcl9jdXJzb3IoY2MpOworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwkgICAgaWYgKFN0YXRlICYgVlJFUExBQ0VfRkxBRykKKwkJb3JpZ19sZW4gPSBTVFJMRU4obWxfZ2V0X2N1cnNvcigpKSAtIDE7CisjZW5kaWYKKwl9CisJcmVwbGFjZV9wb3BfaW5zKCk7CisKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisJaWYgKFN0YXRlICYgVlJFUExBQ0VfRkxBRykKKwl7CisJICAgIC8qIEdldCB0aGUgbnVtYmVyIG9mIHNjcmVlbiBjZWxscyB1c2VkIGJ5IHRoZSBpbnNlcnRlZCBjaGFyYWN0ZXJzICovCisJICAgIHAgPSBtbF9nZXRfY3Vyc29yKCk7CisJICAgIGluc19sZW4gPSBTVFJMRU4ocCkgLSBvcmlnX2xlbjsKKwkgICAgdmNvbCA9IHN0YXJ0X3Zjb2w7CisJICAgIGZvciAoaSA9IDA7IGkgPCBpbnNfbGVuOyArK2kpCisJICAgIHsKKwkJdmNvbCArPSBjaGFydGFic2l6ZShwICsgaSwgdmNvbCk7CisjaWZkZWYgRkVBVF9NQllURQorCQlpICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkgLSAxOworI2VuZGlmCisJICAgIH0KKwkgICAgdmNvbCAtPSBzdGFydF92Y29sOworCisJICAgIC8qIERlbGV0ZSBzcGFjZXMgdGhhdCB3ZXJlIGluc2VydGVkIGFmdGVyIHRoZSBjdXJzb3IgdG8ga2VlcCB0aGUKKwkgICAgICogdGV4dCBhbGlnbmVkLiAqLworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCArPSBpbnNfbGVuOworCSAgICB3aGlsZSAodmNvbCA+IG9yaWdfdmNvbHMgJiYgZ2NoYXJfY3Vyc29yKCkgPT0gJyAnKQorCSAgICB7CisJCWRlbF9jaGFyKEZBTFNFKTsKKwkJKytvcmlnX3Zjb2xzOworCSAgICB9CisJICAgIGN1cndpbi0+d19jdXJzb3IuY29sIC09IGluc19sZW47CisJfQorI2VuZGlmCisKKwkvKiBtYXJrIHRoZSBidWZmZXIgYXMgY2hhbmdlZCBhbmQgcHJlcGFyZSBmb3IgZGlzcGxheWluZyAqLworCWNoYW5nZWRfYnl0ZXMoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBjdXJ3aW4tPndfY3Vyc29yLmNvbCk7CisgICAgfQorICAgIGVsc2UgaWYgKGNjID09IDApCisJKHZvaWQpZGVsX2NoYXIoRkFMU0UpOworfQorCisjaWZkZWYgRkVBVF9DSU5ERU5UCisvKgorICogUmV0dXJuIFRSVUUgaWYgQy1pbmRlbnRpbmcgaXMgb24uCisgKi8KKyAgICBzdGF0aWMgaW50CitjaW5kZW50X29uKCkKK3sKKyAgICByZXR1cm4gKCFwX3Bhc3RlICYmIChjdXJidWYtPmJfcF9jaW4KKyMgaWZkZWYgRkVBVF9FVkFMCisJCSAgICB8fCAqY3VyYnVmLT5iX3BfaW5kZSAhPSBOVUwKKyMgZW5kaWYKKwkJICAgICkpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTElTUCkgfHwgZGVmaW5lZChGRUFUX0NJTkRFTlQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmUtaW5kZW50IHRoZSBjdXJyZW50IGxpbmUsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIGl0IGFuZCB0aGUKKyAqIHN1cnJvdW5kaW5nIGxpbmVzLiBGaXhpbmcgdGhlIGN1cnNvciBwb3NpdGlvbiBzZWVtcyByZWFsbHkgZWFzeSAtLSBJJ20gdmVyeQorICogY29uZnVzZWQgd2hhdCBhbGwgdGhlIHBhcnQgdGhhdCBoYW5kbGVzIENvbnRyb2wtVCBpcyBkb2luZyB0aGF0IEknbSBub3QuCisgKiAiZ2V0X3RoZV9pbmRlbnQiIHNob3VsZCBiZSBnZXRfY19pbmRlbnQsIGdldF9leHByX2luZGVudCBvciBnZXRfbGlzcF9pbmRlbnQuCisgKi8KKworICAgIHZvaWQKK2ZpeHRoaXNsaW5lKGdldF90aGVfaW5kZW50KQorICAgIGludCAoKmdldF90aGVfaW5kZW50KSBfX0FSR1MoKHZvaWQpKTsKK3sKKyAgICBjaGFuZ2VfaW5kZW50KElOREVOVF9TRVQsIGdldF90aGVfaW5kZW50KCksIEZBTFNFLCAwKTsKKyAgICBpZiAobGluZXdoaXRlKGN1cndpbi0+d19jdXJzb3IubG51bSkpCisJZGlkX2FpID0gVFJVRTsJICAgIC8qIGRlbGV0ZSB0aGUgaW5kZW50IGlmIHRoZSBsaW5lIHN0YXlzIGVtcHR5ICovCit9CisKKyAgICB2b2lkCitmaXhfaW5kZW50KCkKK3sKKyAgICBpZiAocF9wYXN0ZSkKKwlyZXR1cm47CisjIGlmZGVmIEZFQVRfTElTUAorICAgIGlmIChjdXJidWYtPmJfcF9saXNwICYmIGN1cmJ1Zi0+Yl9wX2FpKQorCWZpeHRoaXNsaW5lKGdldF9saXNwX2luZGVudCk7CisjIGVuZGlmCisjIGlmIGRlZmluZWQoRkVBVF9MSVNQKSAmJiBkZWZpbmVkKEZFQVRfQ0lOREVOVCkKKyAgICBlbHNlCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfQ0lOREVOVAorCWlmIChjaW5kZW50X29uKCkpCisJICAgIGRvX2NfZXhwcl9pbmRlbnQoKTsKKyMgZW5kaWYKK30KKworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKy8qCisgKiByZXR1cm4gVFJVRSBpZiAnY2lua2V5cycgY29udGFpbnMgdGhlIGtleSAia2V5dHlwZWQiLAorICogd2hlbiA9PSAnKic6CSAgICBPbmx5IGlmIGtleSBpcyBwcmVjZWRlZCB3aXRoICcqJwkoaW5kZW50IGJlZm9yZSBpbnNlcnQpCisgKiB3aGVuID09ICchJzoJICAgIE9ubHkgaWYga2V5IGlzIHByZWRlZGVkIHdpdGggJyEnCShkb24ndCBpbnNlcnQpCisgKiB3aGVuID09ICcgJzoJICAgIE9ubHkgaWYga2V5IGlzIG5vdCBwcmVjZWRlZCB3aXRoICcqJyhpbmRlbnQgYWZ0ZXJ3YXJkcykKKyAqCisgKiAia2V5dHlwZWQiIGNhbiBoYXZlIGEgZmV3IHNwZWNpYWwgdmFsdWVzOgorICogS0VZX09QRU5fRk9SVworICogS0VZX09QRU5fQkFDSworICogS0VZX0NPTVBMRVRFCSAgICBqdXN0IGZpbmlzaGVkIGNvbXBsZXRpb24uCisgKgorICogSWYgbGluZV9pc19lbXB0eSBpcyBUUlVFIGFjY2VwdCBrZXlzIHdpdGggJzAnIGJlZm9yZSB0aGVtLgorICovCisgICAgaW50Citpbl9jaW5rZXlzKGtleXR5cGVkLCB3aGVuLCBsaW5lX2lzX2VtcHR5KQorICAgIGludAkJa2V5dHlwZWQ7CisgICAgaW50CQl3aGVuOworICAgIGludAkJbGluZV9pc19lbXB0eTsKK3sKKyAgICBjaGFyX3UJKmxvb2s7CisgICAgaW50CQl0cnlfbWF0Y2g7CisgICAgaW50CQl0cnlfbWF0Y2hfd29yZDsKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSpsaW5lOworICAgIGludAkJaWNhc2U7CisgICAgaW50CQlpOworCisjaWZkZWYgRkVBVF9FVkFMCisgICAgaWYgKCpjdXJidWYtPmJfcF9pbmRlICE9IE5VTCkKKwlsb29rID0gY3VyYnVmLT5iX3BfaW5kazsJLyogJ2luZGVudGV4cHInIHNldDogdXNlICdpbmRlbnRrZXlzJyAqLworICAgIGVsc2UKKyNlbmRpZgorCWxvb2sgPSBjdXJidWYtPmJfcF9jaW5rOwkvKiAnaW5kZW50ZXhwcicgZW1wdHk6IHVzZSAnY2lua2V5cycgKi8KKyAgICB3aGlsZSAoKmxvb2spCisgICAgeworCS8qCisJICogRmluZCBvdXQgaWYgd2Ugd2FudCB0byB0cnkgYSBtYXRjaCB3aXRoIHRoaXMga2V5LCBkZXBlbmRpbmcgb24KKwkgKiAnd2hlbicgYW5kIGEgJyonIG9yICchJyBiZWZvcmUgdGhlIGtleS4KKwkgKi8KKwlzd2l0Y2ggKHdoZW4pCisJeworCSAgICBjYXNlICcqJzogdHJ5X21hdGNoID0gKCpsb29rID09ICcqJyk7IGJyZWFrOworCSAgICBjYXNlICchJzogdHJ5X21hdGNoID0gKCpsb29rID09ICchJyk7IGJyZWFrOworCSAgICAgZGVmYXVsdDogdHJ5X21hdGNoID0gKCpsb29rICE9ICcqJyk7IGJyZWFrOworCX0KKwlpZiAoKmxvb2sgPT0gJyonIHx8ICpsb29rID09ICchJykKKwkgICAgKytsb29rOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhICcwJywgb25seSBhY2NlcHQgYSBtYXRjaCBpZiB0aGUgbGluZSBpcyBlbXB0eS4KKwkgKiBCdXQgbWF5IHN0aWxsIG1hdGNoIHdoZW4gdHlwaW5nIGxhc3QgY2hhciBvZiBhIHdvcmQuCisJICovCisJaWYgKCpsb29rID09ICcwJykKKwl7CisJICAgIHRyeV9tYXRjaF93b3JkID0gdHJ5X21hdGNoOworCSAgICBpZiAoIWxpbmVfaXNfZW1wdHkpCisJCXRyeV9tYXRjaCA9IEZBTFNFOworCSAgICArK2xvb2s7CisJfQorCWVsc2UKKwkgICAgdHJ5X21hdGNoX3dvcmQgPSBGQUxTRTsKKworCS8qCisJICogZG9lcyBpdCBsb29rIGxpa2UgYSBjb250cm9sIGNoYXJhY3Rlcj8KKwkgKi8KKwlpZiAoKmxvb2sgPT0gJ14nCisjaWZkZWYgRUJDRElDCisJCSYmIChDdHJsX2Nocihsb29rWzFdKSAhPSAwKQorI2Vsc2UKKwkJJiYgbG9va1sxXSA+PSAnPycgJiYgbG9va1sxXSA8PSAnXycKKyNlbmRpZgorCQkpCisJeworCSAgICBpZiAodHJ5X21hdGNoICYmIGtleXR5cGVkID09IEN0cmxfY2hyKGxvb2tbMV0pKQorCQlyZXR1cm4gVFJVRTsKKwkgICAgbG9vayArPSAyOworCX0KKwkvKgorCSAqICdvJyBtZWFucyAibyIgY29tbWFuZCwgb3BlbiBmb3J3YXJkLgorCSAqICdPJyBtZWFucyAiTyIgY29tbWFuZCwgb3BlbiBiYWNrd2FyZC4KKwkgKi8KKwllbHNlIGlmICgqbG9vayA9PSAnbycpCisJeworCSAgICBpZiAodHJ5X21hdGNoICYmIGtleXR5cGVkID09IEtFWV9PUEVOX0ZPUlcpCisJCXJldHVybiBUUlVFOworCSAgICArK2xvb2s7CisJfQorCWVsc2UgaWYgKCpsb29rID09ICdPJykKKwl7CisJICAgIGlmICh0cnlfbWF0Y2ggJiYga2V5dHlwZWQgPT0gS0VZX09QRU5fQkFDSykKKwkJcmV0dXJuIFRSVUU7CisJICAgICsrbG9vazsKKwl9CisKKwkvKgorCSAqICdlJyBtZWFucyB0byBjaGVjayBmb3IgImVsc2UiIGF0IHN0YXJ0IG9mIGxpbmUgYW5kIGp1c3QgYmVmb3JlIHRoZQorCSAqIGN1cnNvci4KKwkgKi8KKwllbHNlIGlmICgqbG9vayA9PSAnZScpCisJeworCSAgICBpZiAodHJ5X21hdGNoICYmIGtleXR5cGVkID09ICdlJyAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbCA+PSA0KQorCSAgICB7CisJCXAgPSBtbF9nZXRfY3VybGluZSgpOworCQlpZiAoc2tpcHdoaXRlKHApID09IHAgKyBjdXJ3aW4tPndfY3Vyc29yLmNvbCAtIDQgJiYKKwkJCVNUUk5DTVAocCArIGN1cndpbi0+d19jdXJzb3IuY29sIC0gNCwgImVsc2UiLCA0KSA9PSAwKQorCQkgICAgcmV0dXJuIFRSVUU7CisJICAgIH0KKwkgICAgKytsb29rOworCX0KKworCS8qCisJICogJzonIG9ubHkgY2F1c2VzIGFuIGluZGVudCBpZiBpdCBpcyBhdCB0aGUgZW5kIG9mIGEgbGFiZWwgb3IgY2FzZQorCSAqIHN0YXRlbWVudCwgb3Igd2hlbiBpdCB3YXMgYmVmb3JlIHR5cGluZyB0aGUgJzonICh0byBmaXgKKwkgKiBjbGFzczo6bWV0aG9kIGZvciBDKyspLgorCSAqLworCWVsc2UgaWYgKCpsb29rID09ICc6JykKKwl7CisJICAgIGlmICh0cnlfbWF0Y2ggJiYga2V5dHlwZWQgPT0gJzonKQorCSAgICB7CisJCXAgPSBtbF9nZXRfY3VybGluZSgpOworCQlpZiAoY2luX2lzY2FzZShwKSB8fCBjaW5faXNzY29wZWRlY2wocCkgfHwgY2luX2lzbGFiZWwoMzApKQorCQkgICAgcmV0dXJuIFRSVUU7CisJCWlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA+IDIKKwkJCSYmIHBbY3Vyd2luLT53X2N1cnNvci5jb2wgLSAxXSA9PSAnOicKKwkJCSYmIHBbY3Vyd2luLT53X2N1cnNvci5jb2wgLSAyXSA9PSAnOicpCisJCXsKKwkJICAgIHBbY3Vyd2luLT53X2N1cnNvci5jb2wgLSAxXSA9ICcgJzsKKwkJICAgIGkgPSAoY2luX2lzY2FzZShwKSB8fCBjaW5faXNzY29wZWRlY2wocCkKKwkJCQkJCQkgIHx8IGNpbl9pc2xhYmVsKDMwKSk7CisJCSAgICBwID0gbWxfZ2V0X2N1cmxpbmUoKTsKKwkJICAgIHBbY3Vyd2luLT53X2N1cnNvci5jb2wgLSAxXSA9ICc6JzsKKwkJICAgIGlmIChpKQorCQkJcmV0dXJuIFRSVUU7CisJCX0KKwkgICAgfQorCSAgICArK2xvb2s7CisJfQorCisKKwkvKgorCSAqIElzIGl0IGEga2V5IGluIDw+LCBtYXliZT8KKwkgKi8KKwllbHNlIGlmICgqbG9vayA9PSAnPCcpCisJeworCSAgICBpZiAodHJ5X21hdGNoKQorCSAgICB7CisJCS8qCisJCSAqIG1ha2UgdXAgc29tZSBuYW1lZCBrZXlzIDxvPiwgPE8+LCA8ZT4sIDwwPiwgPD4+LCA8PD4sIDwqPiwKKwkJICogPDo+IGFuZCA8IT4gc28gdGhhdCBwZW9wbGUgY2FuIHJlLWluZGVudCBvbiBvLCBPLCBlLCAwLCA8LAorCQkgKiA+LCAqLCA6IGFuZCAhIGtleXMgaWYgdGhleSByZWFsbHkgcmVhbGx5IHdhbnQgdG8uCisJCSAqLworCQlpZiAodmltX3N0cmNocigoY2hhcl91ICopIjw+ISpvT2UwOiIsIGxvb2tbMV0pICE9IE5VTEwKKwkJCQkJCSAgICAgICAmJiBrZXl0eXBlZCA9PSBsb29rWzFdKQorCQkgICAgcmV0dXJuIFRSVUU7CisKKwkJaWYgKGtleXR5cGVkID09IGdldF9zcGVjaWFsX2tleV9jb2RlKGxvb2sgKyAxKSkKKwkJICAgIHJldHVybiBUUlVFOworCSAgICB9CisJICAgIHdoaWxlICgqbG9vayAmJiAqbG9vayAhPSAnPicpCisJCWxvb2srKzsKKwkgICAgd2hpbGUgKCpsb29rID09ICc+JykKKwkJbG9vaysrOworCX0KKworCS8qCisJICogSXMgaXQgYSB3b3JkOiAiPXdvcmQiPworCSAqLworCWVsc2UgaWYgKCpsb29rID09ICc9JyAmJiBsb29rWzFdICE9ICcsJyAmJiBsb29rWzFdICE9IE5VTCkKKwl7CisJICAgICsrbG9vazsKKwkgICAgaWYgKCpsb29rID09ICd+JykKKwkgICAgeworCQlpY2FzZSA9IFRSVUU7CisJCSsrbG9vazsKKwkgICAgfQorCSAgICBlbHNlCisJCWljYXNlID0gRkFMU0U7CisJICAgIHAgPSB2aW1fc3RyY2hyKGxvb2ssICcsJyk7CisJICAgIGlmIChwID09IE5VTEwpCisJCXAgPSBsb29rICsgU1RSTEVOKGxvb2spOworCSAgICBpZiAoKHRyeV9tYXRjaCB8fCB0cnlfbWF0Y2hfd29yZCkKKwkJICAgICYmIGN1cndpbi0+d19jdXJzb3IuY29sID49IChjb2xucl9UKShwIC0gbG9vaykpCisJICAgIHsKKwkJaW50CQltYXRjaCA9IEZBTFNFOworCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJCWlmIChrZXl0eXBlZCA9PSBLRVlfQ09NUExFVEUpCisJCXsKKwkJICAgIGNoYXJfdQkqczsKKworCQkgICAgLyogSnVzdCBjb21wbGV0ZWQgYSB3b3JkLCBjaGVjayBpZiBpdCBzdGFydHMgd2l0aCAibG9vayIuCisJCSAgICAgKiBzZWFyY2ggYmFjayBmb3IgdGhlIHN0YXJ0IG9mIGEgd29yZC4gKi8KKwkJICAgIGxpbmUgPSBtbF9nZXRfY3VybGluZSgpOworIyBpZmRlZiBGRUFUX01CWVRFCisJCSAgICBpZiAoaGFzX21ieXRlKQorCQkgICAgeworCQkJY2hhcl91CSpuOworCisJCQlmb3IgKHMgPSBsaW5lICsgY3Vyd2luLT53X2N1cnNvci5jb2w7IHMgPiBsaW5lOyBzID0gbikKKwkJCXsKKwkJCSAgICBuID0gbWJfcHJldnB0cihsaW5lLCBzKTsKKwkJCSAgICBpZiAoIXZpbV9pc3dvcmRwKG4pKQorCQkJCWJyZWFrOworCQkJfQorCQkgICAgfQorCQkgICAgZWxzZQorIyBlbmRpZgorCQkJZm9yIChzID0gbGluZSArIGN1cndpbi0+d19jdXJzb3IuY29sOyBzID4gbGluZTsgLS1zKQorCQkJICAgIGlmICghdmltX2lzd29yZGMoc1stMV0pKQorCQkJCWJyZWFrOworCQkgICAgaWYgKHMgKyAocCAtIGxvb2spIDw9IGxpbmUgKyBjdXJ3aW4tPndfY3Vyc29yLmNvbAorCQkJICAgICYmIChpY2FzZQorCQkJCT8gTUJfU1RSTklDTVAocywgbG9vaywgcCAtIGxvb2spCisJCQkJOiBTVFJOQ01QKHMsIGxvb2ssIHAgLSBsb29rKSkgPT0gMCkKKwkJCW1hdGNoID0gVFJVRTsKKwkJfQorCQllbHNlCisjZW5kaWYKKwkJICAgIC8qIFRPRE86IG11bHRpLWJ5dGUgKi8KKwkJICAgIGlmIChrZXl0eXBlZCA9PSAoaW50KXBbLTFdIHx8IChpY2FzZSAmJiBrZXl0eXBlZCA8IDI1NgorCQkJICYmIFRPTE9XRVJfTE9DKGtleXR5cGVkKSA9PSBUT0xPV0VSX0xPQygoaW50KXBbLTFdKSkpCisJCXsKKwkJICAgIGxpbmUgPSBtbF9nZXRfY3Vyc29yKCk7CisJCSAgICBpZiAoKGN1cndpbi0+d19jdXJzb3IuY29sID09IChjb2xucl9UKShwIC0gbG9vaykKKwkJCQl8fCAhdmltX2lzd29yZGMobGluZVstKHAgLSBsb29rKSAtIDFdKSkKKwkJCSAgICAmJiAoaWNhc2UKKwkJCQk/IE1CX1NUUk5JQ01QKGxpbmUgLSAocCAtIGxvb2spLCBsb29rLCBwIC0gbG9vaykKKwkJCQk6IFNUUk5DTVAobGluZSAtIChwIC0gbG9vayksIGxvb2ssIHAgLSBsb29rKSkKKwkJCQkJCQkJCSA9PSAwKQorCQkJbWF0Y2ggPSBUUlVFOworCQl9CisJCWlmIChtYXRjaCAmJiB0cnlfbWF0Y2hfd29yZCAmJiAhdHJ5X21hdGNoKQorCQl7CisJCSAgICAvKiAiMD13b3JkIjogQ2hlY2sgaWYgdGhlcmUgYXJlIG9ubHkgYmxhbmtzIGJlZm9yZSB0aGUKKwkJICAgICAqIHdvcmQuICovCisJCSAgICBsaW5lID0gbWxfZ2V0X2N1cmxpbmUoKTsKKwkJICAgIGlmICgoaW50KShza2lwd2hpdGUobGluZSkgLSBsaW5lKSAhPQorCQkJCSAgICAgKGludCkoY3Vyd2luLT53X2N1cnNvci5jb2wgLSAocCAtIGxvb2spKSkKKwkJCW1hdGNoID0gRkFMU0U7CisJCX0KKwkJaWYgKG1hdGNoKQorCQkgICAgcmV0dXJuIFRSVUU7CisJICAgIH0KKwkgICAgbG9vayA9IHA7CisJfQorCisJLyoKKwkgKiBvaywgaXQncyBhIGJvcmluZyBnZW5lcmljIGNoYXJhY3Rlci4KKwkgKi8KKwllbHNlCisJeworCSAgICBpZiAodHJ5X21hdGNoICYmICpsb29rID09IGtleXR5cGVkKQorCQlyZXR1cm4gVFJVRTsKKwkgICAgKytsb29rOworCX0KKworCS8qCisJICogU2tpcCBvdmVyICIsICIuCisJICovCisJbG9vayA9IHNraXBfdG9fb3B0aW9uX3BhcnQobG9vayk7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZiAvKiBGRUFUX0NJTkRFTlQgKi8KKworI2lmIGRlZmluZWQoRkVBVF9SSUdIVExFRlQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogTWFwIEhlYnJldyBrZXlib2FyZCB3aGVuIGluIGhrbWFwIG1vZGUuCisgKi8KKyAgICBpbnQKK2hrbWFwKGMpCisgICAgaW50IGM7Cit7CisgICAgaWYgKHBfaGttYXBwKSAgIC8qIHBob25ldGljIG1hcHBpbmcsIGJ5IElseWEgRG9nb2xhemt5ICovCisgICAgeworCWVudW0ge2hBTEVGPTAsIEJFVCwgR0lNRUwsIERBTEVULCBIRUksIFZBViwgWkFJTiwgSEVULCBURVQsIElVRCwKKwkgICAgS0FGc29maXQsIGhLQUYsIExBTUVELCBNRU1zb2ZpdCwgTUVNLCBOVU5zb2ZpdCwgTlVOLCBTQU1FSCwgQUlOLAorCSAgICBQRUlzb2ZpdCwgUEVJLCBaQURJc29maXQsIFpBREksIEtPRiwgUkVTSCwgaFNISU4sIFRBVn07CisJc3RhdGljIGNoYXJfdSBtYXBbMjZdID0KKwkgICAgeyhjaGFyX3UpaEFMRUYvKmEqLywgKGNoYXJfdSlCRVQgIC8qYiovLCAoY2hhcl91KWhLQUYgICAgLypjKi8sCisJICAgICAoY2hhcl91KURBTEVULypkKi8sIChjaGFyX3UpLTEgICAvKmUqLywgKGNoYXJfdSlQRUlzb2ZpdC8qZiovLAorCSAgICAgKGNoYXJfdSlHSU1FTC8qZyovLCAoY2hhcl91KUhFSSAgLypoKi8sIChjaGFyX3UpSVVEICAgICAvKmkqLywKKwkgICAgIChjaGFyX3UpSEVUICAvKmoqLywgKGNoYXJfdSlLT0YgIC8qayovLCAoY2hhcl91KUxBTUVEICAgLypsKi8sCisJICAgICAoY2hhcl91KU1FTSAgLyptKi8sIChjaGFyX3UpTlVOICAvKm4qLywgKGNoYXJfdSlTQU1FSCAgIC8qbyovLAorCSAgICAgKGNoYXJfdSlQRUkgIC8qcCovLCAoY2hhcl91KS0xICAgLypxKi8sIChjaGFyX3UpUkVTSCAgICAvKnIqLywKKwkgICAgIChjaGFyX3UpWkFJTiAvKnMqLywgKGNoYXJfdSlUQVYgIC8qdCovLCAoY2hhcl91KVRFVCAgICAgLyp1Ki8sCisJICAgICAoY2hhcl91KVZBViAgLyp2Ki8sIChjaGFyX3UpaFNISU4vKncqLywgKGNoYXJfdSktMSAgICAgIC8qeCovLAorCSAgICAgKGNoYXJfdSlBSU4gIC8qeSovLCAoY2hhcl91KVpBREkgLyp6Ki99OworCisJaWYgKGMgPT0gJ04nIHx8IGMgPT0gJ00nIHx8IGMgPT0gJ1AnIHx8IGMgPT0gJ0MnIHx8IGMgPT0gJ1onKQorCSAgICByZXR1cm4gKGludCkobWFwW0NoYXJPcmQoYyldIC0gMSArIHBfYWxlcGgpOworCQkJCQkJCSAgICAvKiAnLTEnPSdzb2ZpdCcgKi8KKwllbHNlIGlmIChjID09ICd4JykKKwkgICAgcmV0dXJuICdYJzsKKwllbHNlIGlmIChjID09ICdxJykKKwkgICAgcmV0dXJuICdcJyc7IC8qIHtnZXJlc2h9PXsnfSAqLworCWVsc2UgaWYgKGMgPT0gMjQ2KQorCSAgICByZXR1cm4gJyAnOyAgLyogXCJvIC0tPiAnICcgZm9yIGEgZ2VybWFuIGtleWJvYXJkICovCisJZWxzZSBpZiAoYyA9PSAyMjgpCisJICAgIHJldHVybiAnICc7ICAvKiBcImEgLS0+ICcgJyAgICAgIC0tIC8gLS0JICAgICAgICovCisJZWxzZSBpZiAoYyA9PSAyNTIpCisJICAgIHJldHVybiAnICc7ICAvKiBcInUgLS0+ICcgJyAgICAgIC0tIC8gLS0JICAgICAgICovCisjaWZkZWYgRUJDRElDCisJZWxzZSBpZiAoaXNsb3dlcihjKSkKKyNlbHNlCisJLyogTk9URTogaXNsb3dlcigpIGRvZXMgbm90IGRvIHRoZSByaWdodCB0aGluZyBmb3IgdXMgb24gTGludXggc28gd2UKKwkgKiBkbyB0aGlzIHRoZSBzYW1lIHdhcyBhcyA1LjcgYW5kIHByZXZpb3VzLCBzbyBpdCB3b3JrcyBjb3JyZWN0bHkgb24KKwkgKiBhbGwgc3lzdGVtcy4gIFNwZWNpZmljYWxseSwgdGhlIGUuZy4gRGVsZXRlIGFuZCBBcnJvdyBrZXlzIGFyZQorCSAqIG11bmdlZCBhbmQgd29uJ3Qgd29yayBpZiBlLmcuIHNlYXJjaGluZyBmb3IgSGVicmV3IHRleHQuCisJICovCisJZWxzZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAneicpCisjZW5kaWYKKwkgICAgcmV0dXJuIChpbnQpKG1hcFtDaGFyT3JkTG93KGMpXSArIHBfYWxlcGgpOworCWVsc2UKKwkgICAgcmV0dXJuIGM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJc3dpdGNoIChjKQorCXsKKwkgICAgY2FzZSAnYCc6CXJldHVybiAnOyc7CisJICAgIGNhc2UgJy8nOglyZXR1cm4gJy4nOworCSAgICBjYXNlICdcJyc6CXJldHVybiAnLCc7CisJICAgIGNhc2UgJ3EnOglyZXR1cm4gJy8nOworCSAgICBjYXNlICd3JzoJcmV0dXJuICdcJyc7CisKKwkJCS8qIEhlYnJldyBsZXR0ZXJzIC0gc2V0IG9mZnNldCBmcm9tICdhJyAqLworCSAgICBjYXNlICcsJzoJYyA9ICd7JzsgYnJlYWs7CisJICAgIGNhc2UgJy4nOgljID0gJ3YnOyBicmVhazsKKwkgICAgY2FzZSAnOyc6CWMgPSAndCc7IGJyZWFrOworCSAgICBkZWZhdWx0OiB7CisJCQkgc3RhdGljIGNoYXIgc3RyW10gPSAienFiY3hsc2pwaG1rd29udSB5ZGFmZSByaWciOworCisjaWZkZWYgRUJDRElDCisJCQkgLyogc2VlIG5vdGUgYWJvdXQgaXNsb3dlcigpIGFib3ZlICovCisJCQkgaWYgKCFpc2xvd2VyKGMpKQorI2Vsc2UKKwkJCSBpZiAoYyA8ICdhJyB8fCBjID4gJ3onKQorI2VuZGlmCisJCQkgICAgIHJldHVybiBjOworCQkJIGMgPSBzdHJbQ2hhck9yZExvdyhjKV07CisJCQkgYnJlYWs7CisJCSAgICAgfQorCX0KKworCXJldHVybiAoaW50KShDaGFyT3JkTG93KGMpICsgcF9hbGVwaCk7CisgICAgfQorfQorI2VuZGlmCisKKyAgICBzdGF0aWMgdm9pZAoraW5zX3JlZygpCit7CisgICAgaW50CQluZWVkX3JlZHJhdyA9IEZBTFNFOworICAgIGludAkJcmVnbmFtZTsKKyAgICBpbnQJCWxpdGVyYWxseSA9IDA7CisKKyAgICAvKgorICAgICAqIElmIHdlIGFyZSBnb2luZyB0byB3YWl0IGZvciBhIGNoYXJhY3Rlciwgc2hvdyBhICciJy4KKyAgICAgKi8KKyAgICBwY19zdGF0dXMgPSBQQ19TVEFUVVNfVU5TRVQ7CisgICAgaWYgKHJlZHJhd2luZygpICYmICFjaGFyX2F2YWlsKCkpCisgICAgeworCS8qIG1heSBuZWVkIHRvIHJlZHJhdyB3aGVuIG5vIG1vcmUgY2hhcnMgYXZhaWxhYmxlIG5vdyAqLworCWluc19yZWRyYXcoKTsKKworCWVkaXRfcHV0Y2hhcignIicsIFRSVUUpOworI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJYWRkX3RvX3Nob3djbWRfYyhDdHJsX1IpOworI2VuZGlmCisgICAgfQorCisjaWZkZWYgVVNFX09OX0ZMWV9TQ1JPTEwKKyAgICBkb250X3Njcm9sbCA9IFRSVUU7CQkvKiBkaXNhbGxvdyBzY3JvbGxpbmcgaGVyZSAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIERvbid0IG1hcCB0aGUgcmVnaXN0ZXIgbmFtZS4gVGhpcyBhbHNvIHByZXZlbnRzIHRoZSBtb2RlIG1lc3NhZ2UgdG8gYmUKKyAgICAgKiBkZWxldGVkIHdoZW4gRVNDIGlzIGhpdC4KKyAgICAgKi8KKyAgICArK25vX21hcHBpbmc7CisgICAgcmVnbmFtZSA9IHNhZmVfdmdldGMoKTsKKyNpZmRlZiBGRUFUX0xBTkdNQVAKKyAgICBMQU5HTUFQX0FESlVTVChyZWduYW1lLCBUUlVFKTsKKyNlbmRpZgorICAgIGlmIChyZWduYW1lID09IEN0cmxfUiB8fCByZWduYW1lID09IEN0cmxfTyB8fCByZWduYW1lID09IEN0cmxfUCkKKyAgICB7CisJLyogR2V0IGEgdGhpcmQga2V5IGZvciBsaXRlcmFsIHJlZ2lzdGVyIGluc2VydGlvbiAqLworCWxpdGVyYWxseSA9IHJlZ25hbWU7CisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwlhZGRfdG9fc2hvd2NtZF9jKGxpdGVyYWxseSk7CisjZW5kaWYKKwlyZWduYW1lID0gc2FmZV92Z2V0YygpOworI2lmZGVmIEZFQVRfTEFOR01BUAorCUxBTkdNQVBfQURKVVNUKHJlZ25hbWUsIFRSVUUpOworI2VuZGlmCisgICAgfQorICAgIC0tbm9fbWFwcGluZzsKKworI2lmZGVmIEZFQVRfRVZBTAorICAgIC8qCisgICAgICogRG9uJ3QgY2FsbCB1X3N5bmMoKSB3aGlsZSBnZXR0aW5nIHRoZSBleHByZXNzaW9uLAorICAgICAqIGV2YWx1YXRpbmcgaXQgb3IgZ2l2aW5nIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGl0IQorICAgICAqLworICAgICsrbm9fdV9zeW5jOworICAgIGlmIChyZWduYW1lID09ICc9JykKKyAgICB7CisjaWZkZWYgVVNFX0lNX0NPTlRST0wKKwlpbnQJaW1fb24gPSBpbV9nZXRfc3RhdHVzKCk7CisjZW5kaWYKKwlyZWduYW1lID0gZ2V0X2V4cHJfcmVnaXN0ZXIoKTsKKyNpZmRlZiBVU0VfSU1fQ09OVFJPTAorCS8qIFJlc3RvcmUgdGhlIElucHV0IE1ldGhvZC4gKi8KKwlpZiAoaW1fb24pCisJICAgIGltX3NldF9hY3RpdmUoVFJVRSk7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKHJlZ25hbWUgPT0gTlVMKQorCW5lZWRfcmVkcmF3ID0gVFJVRTsJLyogcmVtb3ZlIHRoZSAnIicgKi8KKyAgICBlbHNlCisgICAgeworI2VuZGlmCisJaWYgKGxpdGVyYWxseSA9PSBDdHJsX08gfHwgbGl0ZXJhbGx5ID09IEN0cmxfUCkKKwl7CisJICAgIC8qIEFwcGVuZCB0aGUgY29tbWFuZCB0byB0aGUgcmVkbyBidWZmZXIuICovCisJICAgIEFwcGVuZENoYXJUb1JlZG9idWZmKEN0cmxfUik7CisJICAgIEFwcGVuZENoYXJUb1JlZG9idWZmKGxpdGVyYWxseSk7CisJICAgIEFwcGVuZENoYXJUb1JlZG9idWZmKHJlZ25hbWUpOworCisJICAgIGRvX3B1dChyZWduYW1lLCBCQUNLV0FSRCwgMUwsCisJCSAobGl0ZXJhbGx5ID09IEN0cmxfUCA/IFBVVF9GSVhJTkRFTlQgOiAwKSB8IFBVVF9DVVJTRU5EKTsKKwl9CisJZWxzZSBpZiAoaW5zZXJ0X3JlZyhyZWduYW1lLCBsaXRlcmFsbHkpID09IEZBSUwpCisJeworCSAgICB2aW1fYmVlcCgpOworCSAgICBuZWVkX3JlZHJhdyA9IFRSVUU7CS8qIHJlbW92ZSB0aGUgJyInICovCisJfQorI2lmZGVmIEZFQVRfRVZBTAorICAgIH0KKyAgICAtLW5vX3Vfc3luYzsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisgICAgY2xlYXJfc2hvd2NtZCgpOworI2VuZGlmCisKKyAgICAvKiBJZiB0aGUgaW5zZXJ0ZWQgcmVnaXN0ZXIgaXMgZW1wdHksIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSAnIicgKi8KKyAgICBpZiAobmVlZF9yZWRyYXcgfHwgc3R1ZmZfZW1wdHkoKSkKKwllZGl0X3VucHV0Y2hhcigpOworfQorCisvKgorICogQ1RSTC1HIGNvbW1hbmRzIGluIEluc2VydCBtb2RlLgorICovCisgICAgc3RhdGljIHZvaWQKK2luc19jdHJsX2coKQoreworICAgIGludAkJYzsKKworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorICAgIC8qIFJpZ2h0IGFmdGVyIENUUkwtWCB0aGUgY3Vyc29yIHdpbGwgYmUgYWZ0ZXIgdGhlIHJ1bGVyLiAqLworICAgIHNldGN1cnNvcigpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIERvbid0IG1hcCB0aGUgc2Vjb25kIGtleS4gVGhpcyBhbHNvIHByZXZlbnRzIHRoZSBtb2RlIG1lc3NhZ2UgdG8gYmUKKyAgICAgKiBkZWxldGVkIHdoZW4gRVNDIGlzIGhpdC4KKyAgICAgKi8KKyAgICArK25vX21hcHBpbmc7CisgICAgYyA9IHNhZmVfdmdldGMoKTsKKyAgICAtLW5vX21hcHBpbmc7CisgICAgc3dpdGNoIChjKQorICAgIHsKKwkvKiBDVFJMLUcgayBhbmQgQ1RSTC1HIDxVcD46IGN1cnNvciB1cCB0byBJbnNzdGFydC5jb2wgKi8KKwljYXNlIEtfVVA6CisJY2FzZSBDdHJsX0s6CisJY2FzZSAnayc6IGluc191cChUUlVFKTsKKwkJICBicmVhazsKKworCS8qIENUUkwtRyBqIGFuZCBDVFJMLUcgPERvd24+OiBjdXJzb3IgZG93biB0byBJbnNzdGFydC5jb2wgKi8KKwljYXNlIEtfRE9XTjoKKwljYXNlIEN0cmxfSjoKKwljYXNlICdqJzogaW5zX2Rvd24oVFJVRSk7CisJCSAgYnJlYWs7CisKKwkvKiBDVFJMLUcgdTogc3RhcnQgbmV3IHVuZG9hYmxlIGVkaXQgKi8KKwljYXNlICd1JzogdV9zeW5jKCk7CisJCSAgaW5zX25lZWRfdW5kbyA9IFRSVUU7CisJCSAgYnJlYWs7CisKKwkvKiBVbmtub3duIENUUkwtRyBjb21tYW5kLCByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbi4gKi8KKwlkZWZhdWx0OiAgdmltX2JlZXAoKTsKKyAgICB9Cit9CisKKy8qCisgKiBIYW5kbGUgRVNDIGluIGluc2VydCBtb2RlLgorICogUmV0dXJucyBUUlVFIHdoZW4gbGVhdmluZyBpbnNlcnQgbW9kZSwgRkFMU0Ugd2hlbiBnb2luZyB0byByZXBlYXQgdGhlCisgKiBpbnNlcnQuCisgKi8KKyAgICBzdGF0aWMgaW50CitpbnNfZXNjKGNvdW50LCBjbWRjaGFyKQorICAgIGxvbmcJKmNvdW50OworICAgIGludAkJY21kY2hhcjsKK3sKKyAgICBpbnQJCXRlbXA7CisgICAgc3RhdGljIGludAlkaXNhYmxlZF9yZWRyYXcgPSBGQUxTRTsKKworI2lmIGRlZmluZWQoRkVBVF9IQU5HVUxJTikKKyMgaWYgZGVmaW5lZChFU0NfQ0hHX1RPX0VOR19NT0RFKQorICAgIGhhbmd1bF9pbnB1dF9zdGF0ZV9zZXQoMCk7CisjIGVuZGlmCisgICAgaWYgKGNvbXBvc2luZ19oYW5ndWwpCisgICAgeworCXB1c2hfcmF3X2tleShjb21wb3NpbmdfaGFuZ3VsX2J1ZmZlciwgMik7CisJY29tcG9zaW5nX2hhbmd1bCA9IDA7CisgICAgfQorI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiBkZWZpbmVkKE1BQ09TX0NMQVNTSUMpCisgICAgcHJldmlvdXNfc2NyaXB0ID0gR2V0U2NyaXB0TWFuYWdlclZhcmlhYmxlKHNtS2V5U2NyaXB0KTsKKyAgICBLZXlTY3JpcHQoc21LZXlSb21hbik7IC8qIG9yIHNtS2V5U3lzU2NyaXB0ICovCisjZW5kaWYKKworICAgIHRlbXAgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyAgICBpZiAoZGlzYWJsZWRfcmVkcmF3KQorICAgIHsKKwktLVJlZHJhd2luZ0Rpc2FibGVkOworCWRpc2FibGVkX3JlZHJhdyA9IEZBTFNFOworICAgIH0KKyAgICBpZiAoIWFycm93X3VzZWQpCisgICAgeworCS8qCisJICogRG9uJ3QgYXBwZW5kIHRoZSBFU0MgZm9yICJyPENSPiIgYW5kICJncngiLgorCSAqLworCWlmIChjbWRjaGFyICE9ICdyJyAmJiBjbWRjaGFyICE9ICd2JykKKwkgICAgQXBwZW5kVG9SZWRvYnVmZihFU0NfU1RSKTsKKworCS8qCisJICogUmVwZWF0aW5nIGluc2VydCBtYXkgdGFrZSBhIGxvbmcgdGltZS4gIENoZWNrIGZvcgorCSAqIGludGVycnVwdCBub3cgYW5kIHRoZW4uCisJICovCisJaWYgKCpjb3VudCA+IDApCisJeworCSAgICBsaW5lX2JyZWFrY2hlY2soKTsKKwkgICAgaWYgKGdvdF9pbnQpCisJCSpjb3VudCA9IDA7CisJfQorCisJaWYgKC0tKmNvdW50ID4gMCkJLyogcmVwZWF0IHdoYXQgd2FzIHR5cGVkICovCisJeworCSAgICAodm9pZClzdGFydF9yZWRvX2lucygpOworCSAgICBpZiAoY21kY2hhciA9PSAncicgfHwgY21kY2hhciA9PSAndicpCisJCXN0dWZmUmVhZGJ1ZmYoRVNDX1NUUik7CS8qIG5vIEVTQyBpbiByZWRvIGJ1ZmZlciAqLworCSAgICArK1JlZHJhd2luZ0Rpc2FibGVkOworCSAgICBkaXNhYmxlZF9yZWRyYXcgPSBUUlVFOworCSAgICByZXR1cm4gRkFMU0U7CS8qIHJlcGVhdCB0aGUgaW5zZXJ0ICovCisJfQorCXN0b3BfaW5zZXJ0KCZjdXJ3aW4tPndfY3Vyc29yLCBUUlVFKTsKKwl1bmRpc3BsYXlfZG9sbGFyKCk7CisgICAgfQorCisgICAgLyogV2hlbiBhbiBhdXRvaW5kZW50IHdhcyByZW1vdmVkLCBjdXJzd2FudCBzdGF5cyBhZnRlciB0aGUKKyAgICAgKiBpbmRlbnQgKi8KKyAgICBpZiAocmVzdGFydF9lZGl0ID09IE5VTCAmJiAoY29sbnJfVCl0ZW1wID09IGN1cndpbi0+d19jdXJzb3IuY29sKQorCWN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCisgICAgLyogUmVtZW1iZXIgdGhlIGxhc3QgSW5zZXJ0IHBvc2l0aW9uIGluIHRoZSAnXiBtYXJrLiAqLworICAgIGlmICghY21kbW9kLmtlZXBqdW1wcykKKwljdXJidWYtPmJfbGFzdF9pbnNlcnQgPSBjdXJ3aW4tPndfY3Vyc29yOworCisgICAgLyoKKyAgICAgKiBUaGUgY3Vyc29yIHNob3VsZCBlbmQgdXAgb24gdGhlIGxhc3QgaW5zZXJ0ZWQgY2hhcmFjdGVyLgorICAgICAqLworICAgIGlmICgoY3Vyd2luLT53X2N1cnNvci5jb2wgIT0gMAorI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJfHwgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPiAwCisjZW5kaWYKKwkpICYmIChyZXN0YXJ0X2VkaXQgPT0gTlVMCisJCXx8IChnY2hhcl9jdXJzb3IoKSA9PSBOVUwKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkgICAgJiYgIVZJc3VhbF9hY3RpdmUKKyNlbmRpZgorCQkgICAgKSkKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCSAgICAmJiAhcmV2aW5zX29uCisjZW5kaWYKKwkJCQkgICAgICApCisgICAgeworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwlpZiAoY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPiAwIHx8IHZlX2ZsYWdzID09IFZFX0FMTCkKKwl7CisJICAgIG9uZWxlZnQoKTsKKwkgICAgaWYgKHJlc3RhcnRfZWRpdCAhPSBOVUwpCisJCSsrY3Vyd2luLT53X2N1cnNvci5jb2xhZGQ7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgLS1jdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIC8qIENvcnJlY3QgY3Vyc29yIGZvciBtdWx0aS1ieXRlIGNoYXJhY3Rlci4gKi8KKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJbWJfYWRqdXN0X2N1cnNvcigpOworI2VuZGlmCisJfQorICAgIH0KKworI2lmZGVmIFVTRV9JTV9DT05UUk9MCisgICAgLyogRGlzYWJsZSBJTSB0byBhbGxvdyB0eXBpbmcgRW5nbGlzaCBkaXJlY3RseSBmb3IgTm9ybWFsIG1vZGUgY29tbWFuZHMuCisgICAgICogV2hlbiAiOmxtYXAiIGlzIGVuYWJsZWQgZG9uJ3QgY2hhbmdlICdpbWluc2VydCcgKElNIGNhbiBiZSBlbmFibGVkIGFzCisgICAgICogd2VsbCkuICovCisgICAgaWYgKCEoU3RhdGUgJiBMQU5HTUFQKSkKKwlpbV9zYXZlX3N0YXR1cygmY3VyYnVmLT5iX3BfaW1pbnNlcnQpOworICAgIGltX3NldF9hY3RpdmUoRkFMU0UpOworI2VuZGlmCisKKyAgICBTdGF0ZSA9IE5PUk1BTDsKKyAgICAvKiBuZWVkIHRvIHBvc2l0aW9uIGN1cnNvciBhZ2FpbiAoZS5nLiB3aGVuIG9uIGEgVEFCICkgKi8KKyAgICBjaGFuZ2VkX2NsaW5lX2JlZl9jdXJzKCk7CisKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgc2V0bW91c2UoKTsKKyNlbmRpZgorI2lmZGVmIENVUlNPUl9TSEFQRQorICAgIHVpX2N1cnNvcl9zaGFwZSgpOwkJLyogbWF5IHNob3cgZGlmZmVyZW50IGN1cnNvciBzaGFwZSAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFdoZW4gcmVjb3JkaW5nIG9yIGZvciBDVFJMLU8sIG5lZWQgdG8gZGlzcGxheSB0aGUgbmV3IG1vZGUuCisgICAgICogT3RoZXJ3aXNlIHJlbW92ZSB0aGUgbW9kZSBtZXNzYWdlLgorICAgICAqLworICAgIGlmIChSZWNvcmRpbmcgfHwgcmVzdGFydF9lZGl0ICE9IE5VTCkKKwlzaG93bW9kZSgpOworICAgIGVsc2UgaWYgKHBfc21kKQorCU1TRygiIik7CisKKyAgICByZXR1cm4gVFJVRTsJICAgIC8qIGV4aXQgSW5zZXJ0IG1vZGUgKi8KK30KKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisvKgorICogVG9nZ2xlIGxhbmd1YWdlOiBoa21hcCBhbmQgcmV2aW5zX29uLgorICogTW92ZSB0byBlbmQgb2YgcmV2ZXJzZSBpbnNlcnRlZCB0ZXh0LgorICovCisgICAgc3RhdGljIHZvaWQKK2luc19jdHJsXygpCit7CisgICAgaWYgKHJldmluc19vbiAmJiByZXZpbnNfY2hhcnMgJiYgcmV2aW5zX3Njb2wgPj0gMCkKKyAgICB7CisJd2hpbGUgKGdjaGFyX2N1cnNvcigpICE9IE5VTCAmJiByZXZpbnNfY2hhcnMtLSkKKwkgICAgKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyAgICB9CisgICAgcF9yaSA9ICFwX3JpOworICAgIHJldmluc19vbiA9IChTdGF0ZSA9PSBJTlNFUlQgJiYgcF9yaSk7CisgICAgaWYgKHJldmluc19vbikKKyAgICB7CisJcmV2aW5zX3Njb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwlyZXZpbnNfbGVnYWwrKzsKKwlyZXZpbnNfY2hhcnMgPSAwOworCXVuZGlzcGxheV9kb2xsYXIoKTsKKyAgICB9CisgICAgZWxzZQorCXJldmluc19zY29sID0gLTE7CisjaWZkZWYgRkVBVF9GS01BUAorICAgIGlmIChwX2FsdGtleW1hcCkKKyAgICB7CisJLyoKKwkgKiB0byBiZSBjb25zaXN0ZW50IGFsc28gZm9yIHJlZG8gY29tbWFuZCwgdXNpbmcgJy4nCisJICogc2V0IGFycm93X3VzZWQgdG8gdHJ1ZSBhbmQgc3RvcCBpdCAtIGNhdXNpbmcgdG8gcmVkbworCSAqIGNoYXJhY3RlcnMgZW50ZXJlZCBpbiBvbmUgbW9kZSAobm9ybWFsL3JldmVyc2UgaW5zZXJ0KS4KKwkgKi8KKwlhcnJvd191c2VkID0gVFJVRTsKKwkodm9pZClzdG9wX2Fycm93KCk7CisJcF9ma21hcCA9IGN1cndpbi0+d19wX3JsIF4gcF9yaTsKKwlpZiAocF9ma21hcCAmJiBwX3JpKQorCSAgICBTdGF0ZSA9IElOU0VSVDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJcF9oa21hcCA9IGN1cndpbi0+d19wX3JsIF4gcF9yaTsgICAgLyogYmUgY29uc2lzdGVudCEgKi8KKyAgICBzaG93bW9kZSgpOworfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorLyoKKyAqIElmICdrZXltb2RlbCcgY29udGFpbnMgInN0YXJ0c2VsIiwgbWF5IHN0YXJ0IHNlbGVjdGlvbi4KKyAqIFJldHVybnMgVFJVRSB3aGVuIGEgQ1RSTC1PIGFuZCBvdGhlciBrZXlzIHN0dWZmZWQuCisgKi8KKyAgICBzdGF0aWMgaW50CitpbnNfc3RhcnRfc2VsZWN0KGMpCisgICAgaW50CQljOworeworICAgIGlmIChrbV9zdGFydHNlbCkKKwlzd2l0Y2ggKGMpCisJeworCSAgICBjYXNlIEtfS0hPTUU6CisJICAgIGNhc2UgS19YSE9NRToKKwkgICAgY2FzZSBLX0tFTkQ6CisJICAgIGNhc2UgS19YRU5EOgorCSAgICBjYXNlIEtfUEFHRVVQOgorCSAgICBjYXNlIEtfS1BBR0VVUDoKKwkgICAgY2FzZSBLX1BBR0VET1dOOgorCSAgICBjYXNlIEtfS1BBR0VET1dOOgorIyBpZmRlZiBNQUNPUworCSAgICBjYXNlIEtfTEVGVDoKKwkgICAgY2FzZSBLX1JJR0hUOgorCSAgICBjYXNlIEtfVVA6CisJICAgIGNhc2UgS19ET1dOOgorCSAgICBjYXNlIEtfRU5EOgorCSAgICBjYXNlIEtfSE9NRToKKyMgZW5kaWYKKwkJaWYgKCEobW9kX21hc2sgJiBNT0RfTUFTS19TSElGVCkpCisJCSAgICBicmVhazsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwkgICAgY2FzZSBLX1NfTEVGVDoKKwkgICAgY2FzZSBLX1NfUklHSFQ6CisJICAgIGNhc2UgS19TX1VQOgorCSAgICBjYXNlIEtfU19ET1dOOgorCSAgICBjYXNlIEtfU19FTkQ6CisJICAgIGNhc2UgS19TX0hPTUU6CisJCS8qIFN0YXJ0IHNlbGVjdGlvbiByaWdodCBhd2F5LCB0aGUgY3Vyc29yIGNhbiBtb3ZlIHdpdGgKKwkJICogQ1RSTC1PIHdoZW4gYmV5b25kIHRoZSBlbmQgb2YgdGhlIGxpbmUuICovCisJCXN0YXJ0X3NlbGVjdGlvbigpOworCisJCS8qIEV4ZWN1dGUgdGhlIGtleSBpbiAoaW5zZXJ0KSBTZWxlY3QgbW9kZS4gKi8KKwkJc3R1ZmZjaGFyUmVhZGJ1ZmYoQ3RybF9PKTsKKwkJaWYgKG1vZF9tYXNrKQorCQl7CisJCSAgICBjaGFyX3UJICAgIGJ1Zls0XTsKKworCQkgICAgYnVmWzBdID0gS19TUEVDSUFMOworCQkgICAgYnVmWzFdID0gS1NfTU9ESUZJRVI7CisJCSAgICBidWZbMl0gPSBtb2RfbWFzazsKKwkJICAgIGJ1ZlszXSA9IE5VTDsKKwkJICAgIHN0dWZmUmVhZGJ1ZmYoYnVmKTsKKwkJfQorCQlzdHVmZmNoYXJSZWFkYnVmZihjKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgorCisvKgorICogSWYgdGhlIGN1cnNvciBpcyBvbiBhbiBpbmRlbnQsIF5UL15EIGluc2VydC9kZWxldGUgb25lCisgKiBzaGlmdHdpZHRoLglPdGhlcndpc2UgXlQvXkQgYmVoYXZlIGxpa2UgYSAiPDwiIG9yICI+PiIuCisgKiBBbHdheXMgcm91bmQgdGhlIGluZGVudCB0byAnc2hpZnR3aXRoJywgdGhpcyBpcyBjb21wYXRpYmxlCisgKiB3aXRoIHZpLiAgQnV0IHZpIG9ubHkgc3VwcG9ydHMgXlQgYW5kIF5EIGFmdGVyIGFuCisgKiBhdXRvaW5kZW50LCB3ZSBzdXBwb3J0IGl0IGV2ZXJ5d2hlcmUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5zX3NoaWZ0KGMsIGxhc3RjKQorICAgIGludAkgICAgYzsKKyAgICBpbnQJICAgIGxhc3RjOworeworICAgIGlmIChzdG9wX2Fycm93KCkgPT0gRkFJTCkKKwlyZXR1cm47CisgICAgQXBwZW5kQ2hhclRvUmVkb2J1ZmYoYyk7CisKKyAgICAvKgorICAgICAqIDBeRCBhbmQgXl5EOiByZW1vdmUgYWxsIGluZGVudC4KKyAgICAgKi8KKyAgICBpZiAoKGxhc3RjID09ICcwJyB8fCBsYXN0YyA9PSAnXicpICYmIGN1cndpbi0+d19jdXJzb3IuY29sKQorICAgIHsKKwktLWN1cndpbi0+d19jdXJzb3IuY29sOworCSh2b2lkKWRlbF9jaGFyKEZBTFNFKTsJCS8qIGRlbGV0ZSB0aGUgJ14nIG9yICcwJyAqLworCS8qIEluIFJlcGxhY2UgbW9kZSwgcmVzdG9yZSB0aGUgY2hhcmFjdGVycyB0aGF0ICdeJyBvciAnMCcgcmVwbGFjZWQuICovCisJaWYgKFN0YXRlICYgUkVQTEFDRV9GTEFHKQorCSAgICByZXBsYWNlX3BvcF9pbnMoKTsKKwlpZiAobGFzdGMgPT0gJ14nKQorCSAgICBvbGRfaW5kZW50ID0gZ2V0X2luZGVudCgpOwkvKiByZW1lbWJlciBjdXJyLiBpbmRlbnQgKi8KKwljaGFuZ2VfaW5kZW50KElOREVOVF9TRVQsIDAsIFRSVUUsIDApOworICAgIH0KKyAgICBlbHNlCisJY2hhbmdlX2luZGVudChjID09IEN0cmxfRCA/IElOREVOVF9ERUMgOiBJTkRFTlRfSU5DLCAwLCBUUlVFLCAwKTsKKworICAgIGlmIChkaWRfYWkgJiYgKnNraXB3aGl0ZShtbF9nZXRfY3VybGluZSgpKSAhPSBOVUwpCisJZGlkX2FpID0gRkFMU0U7CisjaWZkZWYgRkVBVF9TTUFSVElOREVOVAorICAgIGRpZF9zaSA9IEZBTFNFOworICAgIGNhbl9zaSA9IEZBTFNFOworICAgIGNhbl9zaV9iYWNrID0gRkFMU0U7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKyAgICBjYW5fY2luZGVudCA9IEZBTFNFOwkvKiBubyBjaW5kZW50aW5nIGFmdGVyIF5EIG9yIF5UICovCisjZW5kaWYKK30KKworICAgIHN0YXRpYyB2b2lkCitpbnNfZGVsKCkKK3sKKyAgICBpbnQJICAgIHRlbXA7CisKKyAgICBpZiAoc3RvcF9hcnJvdygpID09IEZBSUwpCisJcmV0dXJuOworICAgIGlmIChnY2hhcl9jdXJzb3IoKSA9PSBOVUwpCQkvKiBkZWxldGUgbmV3bGluZSAqLworICAgIHsKKwl0ZW1wID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisJaWYgKCFjYW5fYnMoQlNfRU9MKQkJLyogb25seSBpZiAiZW9sIiBpbmNsdWRlZCAqLworCQl8fCB1X3NhdmUoKGxpbmVucl9UKShjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSAxKSwKKwkJICAgIChsaW5lbnJfVCkoY3Vyd2luLT53X2N1cnNvci5sbnVtICsgMikpID09IEZBSUwKKwkJfHwgZG9fam9pbihGQUxTRSkgPT0gRkFJTCkKKwkgICAgdmltX2JlZXAoKTsKKwllbHNlCisJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gdGVtcDsKKyAgICB9CisgICAgZWxzZSBpZiAoZGVsX2NoYXIoRkFMU0UpID09IEZBSUwpCS8qIGRlbGV0ZSBjaGFyIHVuZGVyIGN1cnNvciAqLworCXZpbV9iZWVwKCk7CisgICAgZGlkX2FpID0gRkFMU0U7CisjaWZkZWYgRkVBVF9TTUFSVElOREVOVAorICAgIGRpZF9zaSA9IEZBTFNFOworICAgIGNhbl9zaSA9IEZBTFNFOworICAgIGNhbl9zaV9iYWNrID0gRkFMU0U7CisjZW5kaWYKKyAgICBBcHBlbmRDaGFyVG9SZWRvYnVmZihLX0RFTCk7Cit9CisKKy8qCisgKiBIYW5kbGUgQmFja3NwYWNlLCBkZWxldGUtd29yZCBhbmQgZGVsZXRlLWxpbmUgaW4gSW5zZXJ0IG1vZGUuCisgKiBSZXR1cm4gVFJVRSB3aGVuIGJhY2tzcGFjZSB3YXMgYWN0dWFsbHkgdXNlZC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2luc19icyhjLCBtb2RlLCBpbnNlcnRlZF9zcGFjZV9wKQorICAgIGludAkJYzsKKyAgICBpbnQJCW1vZGU7CisgICAgaW50CQkqaW5zZXJ0ZWRfc3BhY2VfcDsKK3sKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJY2M7CisgICAgaW50CQl0ZW1wID0gMDsJICAgIC8qIGluaXQgZm9yIEdDQyAqLworICAgIGNvbG5yX1QJbWluY29sOworICAgIGludAkJZGlkX2JhY2tzcGFjZSA9IEZBTFNFOworICAgIGludAkJaW5faW5kZW50OworICAgIGludAkJb2xkU3RhdGU7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJcDEsIHAyOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIGNhbid0IGRlbGV0ZSBhbnl0aGluZyBpbiBhbiBlbXB0eSBmaWxlCisgICAgICogY2FuJ3QgYmFja3VwIHBhc3QgZmlyc3QgY2hhcmFjdGVyIGluIGJ1ZmZlcgorICAgICAqIGNhbid0IGJhY2t1cCBwYXN0IHN0YXJ0aW5nIHBvaW50IHVubGVzcyAnYmFja3NwYWNlJyA+IDEKKyAgICAgKiBjYW4gYmFja3VwIHRvIGEgcHJldmlvdXMgbGluZSBpZiAnYmFja3NwYWNlJyA9PSAwCisgICAgICovCisgICAgaWYgKCAgICAgICBidWZlbXB0eSgpCisJICAgIHx8ICgKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkhcmV2aW5zX29uICYmCisjZW5kaWYKKwkJKChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gMSAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9PSAwKQorCQkgICAgfHwgKCFjYW5fYnMoQlNfU1RBUlQpCisJCQkmJiAoYXJyb3dfdXNlZAorCQkJICAgIHx8IChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gSW5zc3RhcnQubG51bQorCQkJCSYmIGN1cndpbi0+d19jdXJzb3IuY29sIDw9IEluc3N0YXJ0LmNvbCkpKQorCQkgICAgfHwgKCFjYW5fYnMoQlNfSU5ERU5UKSAmJiAhYXJyb3dfdXNlZCAmJiBhaV9jb2wgPiAwCisJCQkJCSAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbCA8PSBhaV9jb2wpCisJCSAgICB8fCAoIWNhbl9icyhCU19FT0wpICYmIGN1cndpbi0+d19jdXJzb3IuY29sID09IDApKSkpCisgICAgeworCXZpbV9iZWVwKCk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChzdG9wX2Fycm93KCkgPT0gRkFJTCkKKwlyZXR1cm4gRkFMU0U7CisgICAgaW5faW5kZW50ID0gaW5pbmRlbnQoMCk7CisjaWZkZWYgRkVBVF9DSU5ERU5UCisgICAgaWYgKGluX2luZGVudCkKKwljYW5fY2luZGVudCA9IEZBTFNFOworI2VuZGlmCisjaWZkZWYgRkVBVF9DT01NRU5UUworICAgIGVuZF9jb21tZW50X3BlbmRpbmcgPSBOVUw7CS8qIEFmdGVyIEJTLCBkb24ndCBhdXRvLWVuZCBjb21tZW50ICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorICAgIGlmIChyZXZpbnNfb24pCSAgICAvKiBwdXQgY3Vyc29yIGFmdGVyIGxhc3QgaW5zZXJ0ZWQgY2hhciAqLworCWluY19jdXJzb3IoKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorICAgIC8qIFZpcnR1YWxlZGl0OgorICAgICAqCUJBQ0tTUEFDRV9DSEFSIGVhdHMgYSB2aXJ0dWFsIHNwYWNlCisgICAgICoJQkFDS1NQQUNFX1dPUkQgZWF0cyBhbGwgY29sYWRkCisgICAgICoJQkFDS1NQQUNFX0xJTkUgZWF0cyBhbGwgY29sYWRkIGFuZCBrZWVwcyBnb2luZworICAgICAqLworICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA+IDApCisgICAgeworCWlmIChtb2RlID09IEJBQ0tTUEFDRV9DSEFSKQorCXsKKwkgICAgLS1jdXJ3aW4tPndfY3Vyc29yLmNvbGFkZDsKKwkgICAgcmV0dXJuIFRSVUU7CisJfQorCWlmIChtb2RlID09IEJBQ0tTUEFDRV9XT1JEKQorCXsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworCSAgICByZXR1cm4gVFJVRTsKKwl9CisJY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBkZWxldGUgbmV3bGluZSEKKyAgICAgKi8KKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPT0gMCkKKyAgICB7CisJbG51bSA9IEluc3N0YXJ0LmxudW07CisJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA9PSBJbnNzdGFydC5sbnVtCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJCXx8IHJldmluc19vbgorI2VuZGlmCisJCQkJICAgICkKKwl7CisJICAgIGlmICh1X3NhdmUoKGxpbmVucl9UKShjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSAyKSwKKwkJCSAgICAgICAobGluZW5yX1QpKGN1cndpbi0+d19jdXJzb3IubG51bSArIDEpKSA9PSBGQUlMKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIC0tSW5zc3RhcnQubG51bTsKKwkgICAgSW5zc3RhcnQuY29sID0gTUFYQ09MOworCX0KKwkvKgorCSAqIEluIHJlcGxhY2UgbW9kZToKKwkgKiBjYyA8IDA6IE5MIHdhcyBpbnNlcnRlZCwgZGVsZXRlIGl0CisJICogY2MgPj0gMDogTkwgd2FzIHJlcGxhY2VkLCBwdXQgb3JpZ2luYWwgY2hhcmFjdGVycyBiYWNrCisJICovCisJY2MgPSAtMTsKKwlpZiAoU3RhdGUgJiBSRVBMQUNFX0ZMQUcpCisJICAgIGNjID0gcmVwbGFjZV9wb3AoKTsJICAgIC8qIHJldHVybnMgLTEgaWYgTkwgd2FzIGluc2VydGVkICovCisJLyoKKwkgKiBJbiByZXBsYWNlIG1vZGUsIGluIHRoZSBsaW5lIHdlIHN0YXJ0ZWQgcmVwbGFjaW5nLCB3ZSBvbmx5IG1vdmUgdGhlCisJICogY3Vyc29yLgorCSAqLworCWlmICgoU3RhdGUgJiBSRVBMQUNFX0ZMQUcpICYmIGN1cndpbi0+d19jdXJzb3IubG51bSA8PSBsbnVtKQorCXsKKwkgICAgZGVjX2N1cnNvcigpOworCX0KKwllbHNlCisJeworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwkgICAgaWYgKCEoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorCQkJCSAgIHx8IGN1cndpbi0+d19jdXJzb3IubG51bSA+IG9yaWdfbGluZV9jb3VudCkKKyNlbmRpZgorCSAgICB7CisJCXRlbXAgPSBnY2hhcl9jdXJzb3IoKTsJLyogcmVtZW1iZXIgY3VycmVudCBjaGFyICovCisJCS0tY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQkodm9pZClkb19qb2luKEZBTFNFKTsKKwkJaWYgKHRlbXAgPT0gTlVMICYmIGdjaGFyX2N1cnNvcigpICE9IE5VTCkKKwkJICAgIGluY19jdXJzb3IoKTsKKwkgICAgfQorI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwkgICAgZWxzZQorCQlkZWNfY3Vyc29yKCk7CisjZW5kaWYKKworCSAgICAvKgorCSAgICAgKiBJbiBSRVBMQUNFIG1vZGUgd2UgaGF2ZSB0byBwdXQgYmFjayB0aGUgdGV4dCB0aGF0IHdhcyByZXBsYWNlZAorCSAgICAgKiBieSB0aGUgTkwuIE9uIHRoZSByZXBsYWNlIHN0YWNrIGlzIGZpcnN0IGEgTlVMLXRlcm1pbmF0ZWQKKwkgICAgICogc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IHdlcmUgZGVsZXRlZCBhbmQgdGhlbiB0aGUKKwkgICAgICogY2hhcmFjdGVycyB0aGF0IE5MIHJlcGxhY2VkLgorCSAgICAgKi8KKwkgICAgaWYgKFN0YXRlICYgUkVQTEFDRV9GTEFHKQorCSAgICB7CisJCS8qCisJCSAqIERvIHRoZSBuZXh0IGluc19jaGFyKCkgaW4gTk9STUFMIHN0YXRlLCB0bworCQkgKiBwcmV2ZW50IGluc19jaGFyKCkgZnJvbSByZXBsYWNpbmcgY2hhcmFjdGVycyBhbmQKKwkJICogYXZvaWRpbmcgc2hvd21hdGNoKCkuCisJCSAqLworCQlvbGRTdGF0ZSA9IFN0YXRlOworCQlTdGF0ZSA9IE5PUk1BTDsKKwkJLyoKKwkJICogcmVzdG9yZSBjaGFyYWN0ZXJzIChibGFua3MpIGRlbGV0ZWQgYWZ0ZXIgY3Vyc29yCisJCSAqLworCQl3aGlsZSAoY2MgPiAwKQorCQl7CisJCSAgICB0ZW1wID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgbWJfcmVwbGFjZV9wb3BfaW5zKGNjKTsKKyNlbHNlCisJCSAgICBpbnNfY2hhcihjYyk7CisjZW5kaWYKKwkJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gdGVtcDsKKwkJICAgIGNjID0gcmVwbGFjZV9wb3AoKTsKKwkJfQorCQkvKiByZXN0b3JlIHRoZSBjaGFyYWN0ZXJzIHRoYXQgTkwgcmVwbGFjZWQgKi8KKwkJcmVwbGFjZV9wb3BfaW5zKCk7CisJCVN0YXRlID0gb2xkU3RhdGU7CisJICAgIH0KKwl9CisJZGlkX2FpID0gRkFMU0U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBEZWxldGUgY2hhcmFjdGVyKHMpIGJlZm9yZSB0aGUgY3Vyc29yLgorCSAqLworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJaWYgKHJldmluc19vbikJCS8qIHB1dCBjdXJzb3Igb24gbGFzdCBpbnNlcnRlZCBjaGFyICovCisJICAgIGRlY19jdXJzb3IoKTsKKyNlbmRpZgorCW1pbmNvbCA9IDA7CisJCQkJCQkvKiBrZWVwIGluZGVudCAqLworCWlmIChtb2RlID09IEJBQ0tTUEFDRV9MSU5FICYmIGN1cmJ1Zi0+Yl9wX2FpCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJJiYgIXJldmluc19vbgorI2VuZGlmCisJCQkgICAgKQorCXsKKwkgICAgdGVtcCA9IGN1cndpbi0+d19jdXJzb3IuY29sOworCSAgICBiZWdpbmxpbmUoQkxfV0hJVEUpOworCSAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPCAoY29sbnJfVCl0ZW1wKQorCQltaW5jb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSB0ZW1wOworCX0KKworCS8qCisJICogSGFuZGxlIGRlbGV0aW5nIG9uZSAnc2hpZnR3aWR0aCcgb3IgJ3NvZnR0YWJzdG9wJy4KKwkgKi8KKwlpZiAoCSAgIG1vZGUgPT0gQkFDS1NQQUNFX0NIQVIKKwkJJiYgKChwX3N0YSAmJiBpbl9pbmRlbnQpCisJCSAgICB8fCAoY3VyYnVmLT5iX3Bfc3RzCisJCQkmJiAoKihtbF9nZXRfY3Vyc29yKCkgLSAxKSA9PSBUQUIKKwkJCSAgICB8fCAoKihtbF9nZXRfY3Vyc29yKCkgLSAxKSA9PSAnICcKKwkJCQkmJiAoISppbnNlcnRlZF9zcGFjZV9wCisJCQkJICAgIHx8IGFycm93X3VzZWQpKSkpKSkKKwl7CisJICAgIGludAkJdHM7CisJICAgIGNvbG5yX1QJdmNvbDsKKwkgICAgY29sbnJfVAl3YW50X3Zjb2w7CisJICAgIGludAkJZXh0cmEgPSAwOworCisJICAgICppbnNlcnRlZF9zcGFjZV9wID0gRkFMU0U7CisJICAgIGlmIChwX3N0YSkKKwkJdHMgPSBjdXJidWYtPmJfcF9zdzsKKwkgICAgZWxzZQorCQl0cyA9IGN1cmJ1Zi0+Yl9wX3N0czsKKwkgICAgLyogQ29tcHV0ZSB0aGUgdmlydHVhbCBjb2x1bW4gd2hlcmUgd2Ugd2FudCB0byBiZS4gIFNpbmNlCisJICAgICAqICdzaG93YnJlYWsnIG1heSBnZXQgaW4gdGhlIHdheSwgbmVlZCB0byBnZXQgdGhlIGxhc3QgY29sdW1uIG9mCisJICAgICAqIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIuICovCisJICAgIGdldHZjb2woY3Vyd2luLCAmY3Vyd2luLT53X2N1cnNvciwgJnZjb2wsIE5VTEwsIE5VTEwpOworCSAgICBkZWNfY3Vyc29yKCk7CisJICAgIGdldHZjb2woY3Vyd2luLCAmY3Vyd2luLT53X2N1cnNvciwgTlVMTCwgTlVMTCwgJndhbnRfdmNvbCk7CisJICAgIGluY19jdXJzb3IoKTsKKwkgICAgd2FudF92Y29sID0gKHdhbnRfdmNvbCAvIHRzKSAqIHRzOworCisJICAgIC8qIGRlbGV0ZSBjaGFyYWN0ZXJzIHVudGlsIHdlIGFyZSBhdCBvciBiZWZvcmUgd2FudF92Y29sICovCisJICAgIHdoaWxlICh2Y29sID4gd2FudF92Y29sCisJCSAgICAmJiAoY2MgPSAqKG1sX2dldF9jdXJzb3IoKSAtIDEpLCB2aW1faXN3aGl0ZShjYykpKQorCSAgICB7CisJCWRlY19jdXJzb3IoKTsKKwkJZ2V0dmNvbChjdXJ3aW4sICZjdXJ3aW4tPndfY3Vyc29yLCAmdmNvbCwgTlVMTCwgTlVMTCk7CisJCWlmIChTdGF0ZSAmIFJFUExBQ0VfRkxBRykKKwkJeworCQkgICAgLyogRG9uJ3QgZGVsZXRlIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBpbnNlcnQgcG9pbnQgd2hlbiBpbgorCQkgICAgICogUmVwbGFjZSBtb2RlICovCisJCSAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtICE9IEluc3N0YXJ0LmxudW0KKwkJCSAgICB8fCBjdXJ3aW4tPndfY3Vyc29yLmNvbCA+PSBJbnNzdGFydC5jb2wpCisJCSAgICB7CisjaWYgMAkvKiB3aGF0IHdhcyB0aGlzIGZvcj8gIEl0IGNhdXNlcyBwcm9ibGVtcyB3aGVuIHN3ICE9IHRzLiAqLworCQkJaWYgKFN0YXRlID09IFJFUExBQ0UgJiYgKGludCl2Y29sIDwgd2FudF92Y29sKQorCQkJeworCQkJICAgICh2b2lkKWRlbF9jaGFyKEZBTFNFKTsKKwkJCSAgICBleHRyYSA9IDI7CS8qIGRvbid0IHBvcCB0b28gbXVjaCAqLworCQkJfQorCQkJZWxzZQorI2VuZGlmCisJCQkgICAgcmVwbGFjZV9kb19icygpOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJICAgICh2b2lkKWRlbF9jaGFyKEZBTFNFKTsKKwkgICAgfQorCisJICAgIC8qIGluc2VydCBleHRyYSBzcGFjZXMgdW50aWwgd2UgYXJlIGF0IHdhbnRfdmNvbCAqLworCSAgICB3aGlsZSAodmNvbCA8IHdhbnRfdmNvbCkKKwkgICAgeworCQkvKiBSZW1lbWJlciB0aGUgZmlyc3QgY2hhciB3ZSBpbnNlcnRlZCAqLworCQlpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID09IEluc3N0YXJ0LmxudW0KKwkJCQkgICAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbCA8IEluc3N0YXJ0LmNvbCkKKwkJICAgIEluc3N0YXJ0LmNvbCA9IGN1cndpbi0+d19jdXJzb3IuY29sOworCisjaWZkZWYgRkVBVF9WUkVQTEFDRQorCQlpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorCQkgICAgaW5zX2NoYXIoJyAnKTsKKwkJZWxzZQorI2VuZGlmCisJCXsKKwkJICAgIGluc19zdHIoKGNoYXJfdSAqKSIgIik7CisJCSAgICBpZiAoKFN0YXRlICYgUkVQTEFDRV9GTEFHKSAmJiBleHRyYSA8PSAxKQorCQkgICAgeworCQkJaWYgKGV4dHJhKQorCQkJICAgIHJlcGxhY2VfcHVzaF9vZmYoTlVMKTsKKwkJCWVsc2UKKwkJCSAgICByZXBsYWNlX3B1c2goTlVMKTsKKwkJICAgIH0KKwkJICAgIGlmIChleHRyYSA9PSAyKQorCQkJZXh0cmEgPSAxOworCQl9CisJCWdldHZjb2woY3Vyd2luLCAmY3Vyd2luLT53X2N1cnNvciwgJnZjb2wsIE5VTEwsIE5VTEwpOworCSAgICB9CisJfQorCisJLyoKKwkgKiBEZWxldGUgdXB0byBzdGFydGluZyBwb2ludCwgc3RhcnQgb2YgbGluZSBvciBwcmV2aW91cyB3b3JkLgorCSAqLworCWVsc2UgZG8KKwl7CisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkgICAgaWYgKCFyZXZpbnNfb24pIC8qIHB1dCBjdXJzb3Igb24gY2hhciB0byBiZSBkZWxldGVkICovCisjZW5kaWYKKwkJZGVjX2N1cnNvcigpOworCisJICAgIC8qIHN0YXJ0IG9mIHdvcmQ/ICovCisJICAgIGlmIChtb2RlID09IEJBQ0tTUEFDRV9XT1JEICYmICF2aW1faXNzcGFjZShnY2hhcl9jdXJzb3IoKSkpCisJICAgIHsKKwkJbW9kZSA9IEJBQ0tTUEFDRV9XT1JEX05PVF9TUEFDRTsKKwkJdGVtcCA9IHZpbV9pc3dvcmRjKGdjaGFyX2N1cnNvcigpKTsKKwkgICAgfQorCSAgICAvKiBlbmQgb2Ygd29yZD8gKi8KKwkgICAgZWxzZSBpZiAobW9kZSA9PSBCQUNLU1BBQ0VfV09SRF9OT1RfU1BBQ0UKKwkJICAgICYmICh2aW1faXNzcGFjZShjYyA9IGdjaGFyX2N1cnNvcigpKQorCQkJICAgIHx8IHZpbV9pc3dvcmRjKGNjKSAhPSB0ZW1wKSkKKwkgICAgeworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCWlmICghcmV2aW5zX29uKQorI2VuZGlmCisJCSAgICBpbmNfY3Vyc29yKCk7CisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJZWxzZSBpZiAoU3RhdGUgJiBSRVBMQUNFX0ZMQUcpCisJCSAgICBkZWNfY3Vyc29yKCk7CisjZW5kaWYKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKFN0YXRlICYgUkVQTEFDRV9GTEFHKQorCQlyZXBsYWNlX2RvX2JzKCk7CisJICAgIGVsc2UKKwkgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwkJaWYgKGVuY191dGY4ICYmIHBfZGVjbykKKwkJICAgICh2b2lkKXV0ZmNfcHRyMmNoYXIobWxfZ2V0X2N1cnNvcigpLCAmcDEsICZwMik7CisjZW5kaWYKKwkJKHZvaWQpZGVsX2NoYXIoRkFMU0UpOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJLyoKKwkJICogSWYgcDEgb3IgcDIgaXMgbm9uLXplcm8sIHRoZXJlIGFyZSBjb21iaW5pbmcgY2hhcmFjdGVycyB3ZQorCQkgKiBuZWVkIHRvIHRha2UgYWNjb3VudCBvZi4gIERvbid0IGJhY2sgdXAgYmVmb3JlIHRoZSBiYXNlCisJCSAqIGNoYXJhY3Rlci4KKwkJICovCisJCWlmIChlbmNfdXRmOCAmJiBwX2RlY28gJiYgKHAxICE9IE5VTCB8fCBwMiAhPSBOVUwpKQorCQkgICAgaW5jX2N1cnNvcigpOworI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJaWYgKHJldmluc19jaGFycykKKwkJeworCQkgICAgcmV2aW5zX2NoYXJzLS07CisJCSAgICByZXZpbnNfbGVnYWwrKzsKKwkJfQorCQlpZiAocmV2aW5zX29uICYmIGdjaGFyX2N1cnNvcigpID09IE5VTCkKKwkJICAgIGJyZWFrOworI2VuZGlmCisJICAgIH0KKwkgICAgLyogSnVzdCBhIHNpbmdsZSBiYWNrc3BhY2U/OiAqLworCSAgICBpZiAobW9kZSA9PSBCQUNLU1BBQ0VfQ0hBUikKKwkJYnJlYWs7CisJfSB3aGlsZSAoCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJcmV2aW5zX29uIHx8CisjZW5kaWYKKwkJKGN1cndpbi0+d19jdXJzb3IuY29sID4gbWluY29sCisJCSAmJiAoY3Vyd2luLT53X2N1cnNvci5sbnVtICE9IEluc3N0YXJ0LmxudW0KKwkJICAgICB8fCBjdXJ3aW4tPndfY3Vyc29yLmNvbCAhPSBJbnNzdGFydC5jb2wpKSk7CisJZGlkX2JhY2tzcGFjZSA9IFRSVUU7CisgICAgfQorI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKKyAgICBkaWRfc2kgPSBGQUxTRTsKKyAgICBjYW5fc2kgPSBGQUxTRTsKKyAgICBjYW5fc2lfYmFjayA9IEZBTFNFOworI2VuZGlmCisgICAgaWYgKGN1cndpbi0+d19jdXJzb3IuY29sIDw9IDEpCisJZGlkX2FpID0gRkFMU0U7CisgICAgLyoKKyAgICAgKiBJdCdzIGEgbGl0dGxlIHN0cmFuZ2UgdG8gcHV0IGJhY2tzcGFjZXMgaW50byB0aGUgcmVkbworICAgICAqIGJ1ZmZlciwgYnV0IGl0IG1ha2VzIGF1dG8taW5kZW50IGEgbG90IGVhc2llciB0byBkZWFsCisgICAgICogd2l0aC4KKyAgICAgKi8KKyAgICBBcHBlbmRDaGFyVG9SZWRvYnVmZihjKTsKKworICAgIC8qIElmIGRlbGV0ZWQgYmVmb3JlIHRoZSBpbnNlcnRpb24gcG9pbnQsIGFkanVzdCBpdCAqLworICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gSW5zc3RhcnQubG51bQorCQkJCSAgICAgICAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbCA8IEluc3N0YXJ0LmNvbCkKKwlJbnNzdGFydC5jb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKworICAgIC8qIHZpIGJlaGF2aW91cjogdGhlIGN1cnNvciBtb3ZlcyBiYWNrd2FyZCBidXQgdGhlIGNoYXJhY3RlciB0aGF0CisgICAgICoJCSAgICAgd2FzIHRoZXJlIHJlbWFpbnMgdmlzaWJsZQorICAgICAqIFZpbSBiZWhhdmlvdXI6IHRoZSBjdXJzb3IgbW92ZXMgYmFja3dhcmQgYW5kIHRoZSBjaGFyYWN0ZXIgdGhhdAorICAgICAqCQkgICAgICB3YXMgdGhlcmUgaXMgZXJhc2VkIGZyb20gdGhlIHNjcmVlbi4KKyAgICAgKiBXZSBjYW4gZW11bGF0ZSB0aGUgdmkgYmVoYXZpb3VyIGJ5IHByZXRlbmRpbmcgdGhlcmUgaXMgYSBkb2xsYXIKKyAgICAgKiBkaXNwbGF5ZWQgZXZlbiB3aGVuIHRoZXJlIGlzbid0LgorICAgICAqICAtLXBrdiBTdW4gSmFuIDE5IDAxOjU2OjQwIEVTVCAyMDAzICovCisgICAgaWYgKHZpbV9zdHJjaHIocF9jcG8sIENQT19CQUNLU1BBQ0UpICE9IE5VTEwgJiYgZG9sbGFyX3Zjb2wgPT0gMCkKKwlkb2xsYXJfdmNvbCA9IGN1cndpbi0+d192aXJ0Y29sOworCisgICAgcmV0dXJuIGRpZF9iYWNrc3BhY2U7Cit9CisKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgc3RhdGljIHZvaWQKK2luc19tb3VzZShjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBwb3NfVAl0cG9zOworCisjIGlmZGVmIEZFQVRfR1VJCisgICAgLyogV2hlbiBHVUkgaXMgYWN0aXZlLCBhbHNvIG1vdmUvcGFzdGUgd2hlbiAnbW91c2UnIGlzIGVtcHR5ICovCisgICAgaWYgKCFndWkuaW5fdXNlKQorIyBlbmRpZgorCWlmICghbW91c2VfaGFzKE1PVVNFX0lOU0VSVCkpCisJICAgIHJldHVybjsKKworICAgIHVuZGlzcGxheV9kb2xsYXIoKTsKKyAgICB0cG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICBpZiAoZG9fbW91c2UoTlVMTCwgYywgQkFDS1dBUkQsIDFMLCAwKSkKKyAgICB7CisJc3RhcnRfYXJyb3coJnRwb3MpOworIyBpZmRlZiBGRUFUX0NJTkRFTlQKKwljYW5fY2luZGVudCA9IFRSVUU7CisjIGVuZGlmCisgICAgfQorCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgLyogcmVkcmF3IHN0YXR1cyBsaW5lcyAoaW4gY2FzZSBhbm90aGVyIHdpbmRvdyBiZWNhbWUgYWN0aXZlKSAqLworICAgIHJlZHJhd19zdGF0dXNsaW5lcygpOworI2VuZGlmCit9CisKKyAgICBzdGF0aWMgdm9pZAoraW5zX21vdXNlc2Nyb2xsKHVwKQorICAgIGludAkJdXA7Cit7CisgICAgcG9zX1QJdHBvczsKKyMgaWYgZGVmaW5lZChGRUFUX0dVSSkgJiYgZGVmaW5lZChGRUFUX1dJTkRPV1MpCisgICAgd2luX1QJKm9sZF9jdXJ3aW47CisjIGVuZGlmCisKKyAgICB0cG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKworIyBpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKEZFQVRfV0lORE9XUykKKyAgICBvbGRfY3Vyd2luID0gY3Vyd2luOworCisgICAgLyogQ3VycmVudGx5IHRoZSBtb3VzZSBjb29yZGluYXRlcyBhcmUgb25seSBrbm93biBpbiB0aGUgR1VJLiAqLworICAgIGlmIChndWkuaW5fdXNlICYmIG1vdXNlX3JvdyA+PSAwICYmIG1vdXNlX2NvbCA+PSAwKQorICAgIHsKKwlpbnQgcm93LCBjb2w7CisKKwlyb3cgPSBtb3VzZV9yb3c7CisJY29sID0gbW91c2VfY29sOworCisJLyogZmluZCB0aGUgd2luZG93IGF0IHRoZSBwb2ludGVyIGNvb3JkaW5hdGVzICovCisJY3Vyd2luID0gbW91c2VfZmluZF93aW4oJnJvdywgJmNvbCk7CisJY3VyYnVmID0gY3Vyd2luLT53X2J1ZmZlcjsKKyAgICB9CisgICAgaWYgKGN1cndpbiA9PSBvbGRfY3Vyd2luKQorIyBlbmRpZgorCXVuZGlzcGxheV9kb2xsYXIoKTsKKworICAgIGlmIChtb2RfbWFzayAmIChNT0RfTUFTS19TSElGVCB8IE1PRF9NQVNLX0NUUkwpKQorCXNjcm9sbF9yZWRyYXcodXAsIChsb25nKShjdXJ3aW4tPndfYm90bGluZSAtIGN1cndpbi0+d190b3BsaW5lKSk7CisgICAgZWxzZQorCXNjcm9sbF9yZWRyYXcodXAsIDNMKTsKKworIyBpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKEZFQVRfV0lORE9XUykKKyAgICBjdXJ3aW4tPndfcmVkcl9zdGF0dXMgPSBUUlVFOworCisgICAgY3Vyd2luID0gb2xkX2N1cndpbjsKKyAgICBjdXJidWYgPSBjdXJ3aW4tPndfYnVmZmVyOworIyBlbmRpZgorCisgICAgaWYgKCFlcXVhbHBvcyhjdXJ3aW4tPndfY3Vyc29yLCB0cG9zKSkKKyAgICB7CisJc3RhcnRfYXJyb3coJnRwb3MpOworIyBpZmRlZiBGRUFUX0NJTkRFTlQKKwljYW5fY2luZGVudCA9IFRSVUU7CisjIGVuZGlmCisgICAgfQorfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSQorICAgIHZvaWQKK2luc19zY3JvbGwoKQoreworICAgIHBvc19UCXRwb3M7CisKKyAgICB1bmRpc3BsYXlfZG9sbGFyKCk7CisgICAgdHBvcyA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgaWYgKGd1aV9kb19zY3JvbGwoKSkKKyAgICB7CisJc3RhcnRfYXJyb3coJnRwb3MpOworIyBpZmRlZiBGRUFUX0NJTkRFTlQKKwljYW5fY2luZGVudCA9IFRSVUU7CisjIGVuZGlmCisgICAgfQorfQorCisgICAgdm9pZAoraW5zX2hvcnNjcm9sbCgpCit7CisgICAgcG9zX1QJdHBvczsKKworICAgIHVuZGlzcGxheV9kb2xsYXIoKTsKKyAgICB0cG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICBpZiAoZ3VpX2RvX2hvcml6X3Njcm9sbCgpKQorICAgIHsKKwlzdGFydF9hcnJvdygmdHBvcyk7CisjIGlmZGVmIEZFQVRfQ0lOREVOVAorCWNhbl9jaW5kZW50ID0gVFJVRTsKKyMgZW5kaWYKKyAgICB9Cit9CisjZW5kaWYKKworICAgIHN0YXRpYyB2b2lkCitpbnNfbGVmdCgpCit7CisgICAgcG9zX1QJdHBvczsKKworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGlmICgoZmRvX2ZsYWdzICYgRkRPX0hPUikgJiYgS2V5VHlwZWQpCisJZm9sZE9wZW5DdXJzb3IoKTsKKyNlbmRpZgorICAgIHVuZGlzcGxheV9kb2xsYXIoKTsKKyAgICB0cG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICBpZiAob25lbGVmdCgpID09IE9LKQorICAgIHsKKwlzdGFydF9hcnJvdygmdHBvcyk7CisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkvKiBJZiBleGl0IHJldmVyc2VkIHN0cmluZywgcG9zaXRpb24gaXMgZml4ZWQgKi8KKwlpZiAocmV2aW5zX3Njb2wgIT0gLTEgJiYgKGludCljdXJ3aW4tPndfY3Vyc29yLmNvbCA+PSByZXZpbnNfc2NvbCkKKwkgICAgcmV2aW5zX2xlZ2FsKys7CisJcmV2aW5zX2NoYXJzKys7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKgorICAgICAqIGlmICd3aGljaHdyYXAnIHNldCBmb3IgY3Vyc29yIGluIGluc2VydCBtb2RlIG1heSBnbyB0bworICAgICAqIHByZXZpb3VzIGxpbmUKKyAgICAgKi8KKyAgICBlbHNlIGlmICh2aW1fc3RyY2hyKHBfd3csICdbJykgIT0gTlVMTCAmJiBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiAxKQorICAgIHsKKwlzdGFydF9hcnJvdygmdHBvcyk7CisJLS0oY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKwljb2xhZHZhbmNlKChjb2xucl9UKU1BWENPTCk7CisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CS8qIHNvIHdlIHN0YXkgYXQgdGhlIGVuZCAqLworICAgIH0KKyAgICBlbHNlCisJdmltX2JlZXAoKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitpbnNfaG9tZShjKQorICAgIGludAkJYzsKK3sKKyAgICBwb3NfVAl0cG9zOworCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaWYgKChmZG9fZmxhZ3MgJiBGRE9fSE9SKSAmJiBLZXlUeXBlZCkKKwlmb2xkT3BlbkN1cnNvcigpOworI2VuZGlmCisgICAgdW5kaXNwbGF5X2RvbGxhcigpOworICAgIHRwb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworICAgIGlmIChjID09IEtfQ19IT01FKQorCWN1cndpbi0+d19jdXJzb3IubG51bSA9IDE7CisgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisjZW5kaWYKKyAgICBjdXJ3aW4tPndfY3Vyc3dhbnQgPSAwOworICAgIHN0YXJ0X2Fycm93KCZ0cG9zKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitpbnNfZW5kKGMpCisgICAgaW50CQljOworeworICAgIHBvc19UCXRwb3M7CisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBpZiAoKGZkb19mbGFncyAmIEZET19IT1IpICYmIEtleVR5cGVkKQorCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKKyAgICB1bmRpc3BsYXlfZG9sbGFyKCk7CisgICAgdHBvcyA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgaWYgKGMgPT0gS19DX0VORCkKKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKyAgICBjb2xhZHZhbmNlKChjb2xucl9UKU1BWENPTCk7CisgICAgY3Vyd2luLT53X2N1cnN3YW50ID0gTUFYQ09MOworCisgICAgc3RhcnRfYXJyb3coJnRwb3MpOworfQorCisgICAgc3RhdGljIHZvaWQKK2luc19zX2xlZnQoKQoreworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGlmICgoZmRvX2ZsYWdzICYgRkRPX0hPUikgJiYgS2V5VHlwZWQpCisJZm9sZE9wZW5DdXJzb3IoKTsKKyNlbmRpZgorICAgIHVuZGlzcGxheV9kb2xsYXIoKTsKKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID4gMSB8fCBjdXJ3aW4tPndfY3Vyc29yLmNvbCA+IDApCisgICAgeworCXN0YXJ0X2Fycm93KCZjdXJ3aW4tPndfY3Vyc29yKTsKKwkodm9pZCliY2tfd29yZCgxTCwgRkFMU0UsIEZBTFNFKTsKKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKyAgICB9CisgICAgZWxzZQorCXZpbV9iZWVwKCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAoraW5zX3JpZ2h0KCkKK3sKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBpZiAoKGZkb19mbGFncyAmIEZET19IT1IpICYmIEtleVR5cGVkKQorCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKKyAgICB1bmRpc3BsYXlfZG9sbGFyKCk7CisgICAgaWYgKGdjaGFyX2N1cnNvcigpICE9IE5VTCB8fCB2aXJ0dWFsX2FjdGl2ZSgpCisJICAgICkKKyAgICB7CisJc3RhcnRfYXJyb3coJmN1cndpbi0+d19jdXJzb3IpOworCWN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwlpZiAodmlydHVhbF9hY3RpdmUoKSkKKwkgICAgb25lcmlnaHQoKTsKKwllbHNlCisjZW5kaWYKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQljdXJ3aW4tPndfY3Vyc29yLmNvbCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKG1sX2dldF9jdXJzb3IoKSk7CisJICAgIGVsc2UKKyNlbmRpZgorCQkrK2N1cndpbi0+d19jdXJzb3IuY29sOworCX0KKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJcmV2aW5zX2xlZ2FsKys7CisJaWYgKHJldmluc19jaGFycykKKwkgICAgcmV2aW5zX2NoYXJzLS07CisjZW5kaWYKKyAgICB9CisgICAgLyogaWYgJ3doaWNod3JhcCcgc2V0IGZvciBjdXJzb3IgaW4gaW5zZXJ0IG1vZGUsIG1heSBtb3ZlIHRoZQorICAgICAqIGN1cnNvciB0byB0aGUgbmV4dCBsaW5lICovCisgICAgZWxzZSBpZiAodmltX3N0cmNocihwX3d3LCAnXScpICE9IE5VTEwKKwkgICAgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtIDwgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisgICAgeworCXN0YXJ0X2Fycm93KCZjdXJ3aW4tPndfY3Vyc29yKTsKKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKwkrK2N1cndpbi0+d19jdXJzb3IubG51bTsKKwljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisgICAgfQorICAgIGVsc2UKKwl2aW1fYmVlcCgpOworfQorCisgICAgc3RhdGljIHZvaWQKK2luc19zX3JpZ2h0KCkKK3sKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBpZiAoKGZkb19mbGFncyAmIEZET19IT1IpICYmIEtleVR5cGVkKQorCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKKyAgICB1bmRpc3BsYXlfZG9sbGFyKCk7CisgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50CisJICAgIHx8IGdjaGFyX2N1cnNvcigpICE9IE5VTCkKKyAgICB7CisJc3RhcnRfYXJyb3coJmN1cndpbi0+d19jdXJzb3IpOworCSh2b2lkKWZ3ZF93b3JkKDFMLCBGQUxTRSwgMCk7CisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKwl2aW1fYmVlcCgpOworfQorCisgICAgc3RhdGljIHZvaWQKK2luc191cChzdGFydGNvbCkKKyAgICBpbnQJCXN0YXJ0Y29sOwkvKiB3aGVuIFRSVUUgbW92ZSB0byBJbnNzdGFydC5jb2wgKi8KK3sKKyAgICBwb3NfVAl0cG9zOworICAgIGxpbmVucl9UCW9sZF90b3BsaW5lID0gY3Vyd2luLT53X3RvcGxpbmU7CisjaWZkZWYgRkVBVF9ESUZGCisgICAgaW50CQlvbGRfdG9wZmlsbCA9IGN1cndpbi0+d190b3BmaWxsOworI2VuZGlmCisKKyAgICB1bmRpc3BsYXlfZG9sbGFyKCk7CisgICAgdHBvcyA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgaWYgKGN1cnNvcl91cCgxTCwgVFJVRSkgPT0gT0spCisgICAgeworCWlmIChzdGFydGNvbCkKKwkgICAgY29sYWR2YW5jZShnZXR2Y29sX25vbGlzdCgmSW5zc3RhcnQpKTsKKwlpZiAob2xkX3RvcGxpbmUgIT0gY3Vyd2luLT53X3RvcGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkJfHwgb2xkX3RvcGZpbGwgIT0gY3Vyd2luLT53X3RvcGZpbGwKKyNlbmRpZgorCQkpCisJICAgIHJlZHJhd19sYXRlcihWQUxJRCk7CisJc3RhcnRfYXJyb3coJnRwb3MpOworI2lmZGVmIEZFQVRfQ0lOREVOVAorCWNhbl9jaW5kZW50ID0gVFJVRTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisJdmltX2JlZXAoKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitpbnNfcGFnZXVwKCkKK3sKKyAgICBwb3NfVAl0cG9zOworCisgICAgdW5kaXNwbGF5X2RvbGxhcigpOworICAgIHRwb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworICAgIGlmIChvbmVwYWdlKEJBQ0tXQVJELCAxTCkgPT0gT0spCisgICAgeworCXN0YXJ0X2Fycm93KCZ0cG9zKTsKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKwljYW5fY2luZGVudCA9IFRSVUU7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorCXZpbV9iZWVwKCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAoraW5zX2Rvd24oc3RhcnRjb2wpCisgICAgaW50CQlzdGFydGNvbDsJLyogd2hlbiBUUlVFIG1vdmUgdG8gSW5zc3RhcnQuY29sICovCit7CisgICAgcG9zX1QJdHBvczsKKyAgICBsaW5lbnJfVAlvbGRfdG9wbGluZSA9IGN1cndpbi0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfRElGRgorICAgIGludAkJb2xkX3RvcGZpbGwgPSBjdXJ3aW4tPndfdG9wZmlsbDsKKyNlbmRpZgorCisgICAgdW5kaXNwbGF5X2RvbGxhcigpOworICAgIHRwb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworICAgIGlmIChjdXJzb3JfZG93bigxTCwgVFJVRSkgPT0gT0spCisgICAgeworCWlmIChzdGFydGNvbCkKKwkgICAgY29sYWR2YW5jZShnZXR2Y29sX25vbGlzdCgmSW5zc3RhcnQpKTsKKwlpZiAob2xkX3RvcGxpbmUgIT0gY3Vyd2luLT53X3RvcGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkJfHwgb2xkX3RvcGZpbGwgIT0gY3Vyd2luLT53X3RvcGZpbGwKKyNlbmRpZgorCQkpCisJICAgIHJlZHJhd19sYXRlcihWQUxJRCk7CisJc3RhcnRfYXJyb3coJnRwb3MpOworI2lmZGVmIEZFQVRfQ0lOREVOVAorCWNhbl9jaW5kZW50ID0gVFJVRTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisJdmltX2JlZXAoKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitpbnNfcGFnZWRvd24oKQoreworICAgIHBvc19UCXRwb3M7CisKKyAgICB1bmRpc3BsYXlfZG9sbGFyKCk7CisgICAgdHBvcyA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgaWYgKG9uZXBhZ2UoRk9SV0FSRCwgMUwpID09IE9LKQorICAgIHsKKwlzdGFydF9hcnJvdygmdHBvcyk7CisjaWZkZWYgRkVBVF9DSU5ERU5UCisJY2FuX2NpbmRlbnQgPSBUUlVFOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKwl2aW1fYmVlcCgpOworfQorCisjaWZkZWYgRkVBVF9ETkQKKyAgICBzdGF0aWMgdm9pZAoraW5zX2Ryb3AoKQoreworICAgIGRvX3B1dCgnficsIEJBQ0tXQVJELCAxTCwgUFVUX0NVUlNFTkQpOworfQorI2VuZGlmCisKKy8qCisgKiBIYW5kbGUgVEFCIGluIEluc2VydCBvciBSZXBsYWNlIG1vZGUuCisgKiBSZXR1cm4gVFJVRSB3aGVuIHRoZSBUQUIgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQgbGlrZSBhIG5vcm1hbCBjaGFyYWN0ZXIuCisgKi8KKyAgICBzdGF0aWMgaW50CitpbnNfdGFiKCkKK3sKKyAgICBpbnQJCWluZDsKKyAgICBpbnQJCWk7CisgICAgaW50CQl0ZW1wOworCisgICAgaWYgKEluc3N0YXJ0X2JsYW5rX3Zjb2wgPT0gTUFYQ09MICYmIGN1cndpbi0+d19jdXJzb3IubG51bSA9PSBJbnNzdGFydC5sbnVtKQorCUluc3N0YXJ0X2JsYW5rX3Zjb2wgPSBnZXRfbm9saXN0X3ZpcnRjb2woKTsKKyAgICBpZiAoZWNoZWNrX2FiYnIoVEFCICsgQUJCUl9PRkYpKQorCXJldHVybiBGQUxTRTsKKworICAgIGluZCA9IGluaW5kZW50KDApOworI2lmZGVmIEZFQVRfQ0lOREVOVAorICAgIGlmIChpbmQpCisJY2FuX2NpbmRlbnQgPSBGQUxTRTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBXaGVuIG5vdGhpbmcgc3BlY2lhbCwgaW5zZXJ0IFRBQiBsaWtlIGEgbm9ybWFsIGNoYXJhY3RlcgorICAgICAqLworICAgIGlmICghY3VyYnVmLT5iX3BfZXQKKwkgICAgJiYgIShwX3N0YSAmJiBpbmQgJiYgY3VyYnVmLT5iX3BfdHMgIT0gY3VyYnVmLT5iX3Bfc3cpCisJICAgICYmIGN1cmJ1Zi0+Yl9wX3N0cyA9PSAwKQorCXJldHVybiBUUlVFOworCisgICAgaWYgKHN0b3BfYXJyb3coKSA9PSBGQUlMKQorCXJldHVybiBUUlVFOworCisgICAgZGlkX2FpID0gRkFMU0U7CisjaWZkZWYgRkVBVF9TTUFSVElOREVOVAorICAgIGRpZF9zaSA9IEZBTFNFOworICAgIGNhbl9zaSA9IEZBTFNFOworICAgIGNhbl9zaV9iYWNrID0gRkFMU0U7CisjZW5kaWYKKyAgICBBcHBlbmRUb1JlZG9idWZmKChjaGFyX3UgKikiXHQiKTsKKworICAgIGlmIChwX3N0YSAmJiBpbmQpCQkvKiBpbnNlcnQgdGFiIGluIGluZGVudCwgdXNlICdzaGlmdHdpZHRoJyAqLworCXRlbXAgPSAoaW50KWN1cmJ1Zi0+Yl9wX3N3OworICAgIGVsc2UgaWYgKGN1cmJ1Zi0+Yl9wX3N0cyA+IDApIC8qIHVzZSAnc29mdHRhYnN0b3AnIHdoZW4gc2V0ICovCisJdGVtcCA9IChpbnQpY3VyYnVmLT5iX3Bfc3RzOworICAgIGVsc2UJCQkvKiBvdGhlcndpc2UgdXNlICd0YWJzdG9wJyAqLworCXRlbXAgPSAoaW50KWN1cmJ1Zi0+Yl9wX3RzOworICAgIHRlbXAgLT0gZ2V0X25vbGlzdF92aXJ0Y29sKCkgJSB0ZW1wOworCisgICAgLyoKKyAgICAgKiBJbnNlcnQgdGhlIGZpcnN0IHNwYWNlIHdpdGggaW5zX2NoYXIoKS4JSXQgd2lsbCBkZWxldGUgb25lIGNoYXIgaW4KKyAgICAgKiByZXBsYWNlIG1vZGUuICBJbnNlcnQgdGhlIHJlc3Qgd2l0aCBpbnNfc3RyKCk7IGl0IHdpbGwgbm90IGRlbGV0ZSBhbnkKKyAgICAgKiBjaGFycy4gIEZvciBWUkVQTEFDRSBtb2RlLCB3ZSB1c2UgaW5zX2NoYXIoKSBmb3IgYWxsIGNoYXJhY3RlcnMuCisgICAgICovCisgICAgaW5zX2NoYXIoJyAnKTsKKyAgICB3aGlsZSAoLS10ZW1wID4gMCkKKyAgICB7CisjaWZkZWYgRkVBVF9WUkVQTEFDRQorCWlmIChTdGF0ZSAmIFZSRVBMQUNFX0ZMQUcpCisJICAgIGluc19jaGFyKCcgJyk7CisJZWxzZQorI2VuZGlmCisJeworCSAgICBpbnNfc3RyKChjaGFyX3UgKikiICIpOworCSAgICBpZiAoU3RhdGUgJiBSRVBMQUNFX0ZMQUcpCSAgICAvKiBubyBjaGFyIHJlcGxhY2VkICovCisJCXJlcGxhY2VfcHVzaChOVUwpOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFdoZW4gJ2V4cGFuZHRhYicgbm90IHNldDogUmVwbGFjZSBzcGFjZXMgYnkgVEFCcyB3aGVyZSBwb3NzaWJsZS4KKyAgICAgKi8KKyAgICBpZiAoIWN1cmJ1Zi0+Yl9wX2V0ICYmIChjdXJidWYtPmJfcF9zdHMgfHwgKHBfc3RhICYmIGluZCkpKQorICAgIHsKKwljaGFyX3UJCSpwdHI7CisjaWZkZWYgRkVBVF9WUkVQTEFDRQorCWNoYXJfdQkJKnNhdmVkX2xpbmUgPSBOVUxMOwkvKiBpbml0IGZvciBHQ0MgKi8KKwlwb3NfVAkJcG9zOworI2VuZGlmCisJcG9zX1QJCWZwb3M7CisJcG9zX1QJCSpjdXJzb3I7CisJY29sbnJfVAkJd2FudF92Y29sLCB2Y29sOworCWludAkJY2hhbmdlX2NvbCA9IC0xOworCWludAkJc2F2ZV9saXN0ID0gY3Vyd2luLT53X3BfbGlzdDsKKworCS8qCisJICogR2V0IHRoZSBjdXJyZW50IGxpbmUuICBGb3IgVlJFUExBQ0UgbW9kZSwgZG9uJ3QgbWFrZSByZWFsIGNoYW5nZXMKKwkgKiB5ZXQsIGp1c3Qgd29yayBvbiBhIGNvcHkgb2YgdGhlIGxpbmUuCisJICovCisjaWZkZWYgRkVBVF9WUkVQTEFDRQorCWlmIChTdGF0ZSAmIFZSRVBMQUNFX0ZMQUcpCisJeworCSAgICBwb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworCSAgICBjdXJzb3IgPSAmcG9zOworCSAgICBzYXZlZF9saW5lID0gdmltX3N0cnNhdmUobWxfZ2V0X2N1cmxpbmUoKSk7CisJICAgIGlmIChzYXZlZF9saW5lID09IE5VTEwpCisJCXJldHVybiBGQUxTRTsKKwkgICAgcHRyID0gc2F2ZWRfbGluZSArIHBvcy5jb2w7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgcHRyID0gbWxfZ2V0X2N1cnNvcigpOworCSAgICBjdXJzb3IgPSAmY3Vyd2luLT53X2N1cnNvcjsKKwl9CisKKwkvKiBXaGVuICdMJyBpcyBub3QgaW4gJ2Nwb3B0aW9ucycgYSB0YWIgYWx3YXlzIHRha2VzIHVwICd0cycgc3BhY2VzLiAqLworCWlmICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fTElTVFdNKSA9PSBOVUxMKQorCSAgICBjdXJ3aW4tPndfcF9saXN0ID0gRkFMU0U7CisKKwkvKiBGaW5kIGZpcnN0IHdoaXRlIGJlZm9yZSB0aGUgY3Vyc29yICovCisJZnBvcyA9IGN1cndpbi0+d19jdXJzb3I7CisJd2hpbGUgKGZwb3MuY29sID4gMCAmJiB2aW1faXN3aGl0ZShwdHJbLTFdKSkKKwl7CisJICAgIC0tZnBvcy5jb2w7CisJICAgIC0tcHRyOworCX0KKworCS8qIEluIFJlcGxhY2UgbW9kZSwgZG9uJ3QgY2hhbmdlIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBpbnNlcnQgcG9pbnQuICovCisJaWYgKChTdGF0ZSAmIFJFUExBQ0VfRkxBRykKKwkJJiYgZnBvcy5sbnVtID09IEluc3N0YXJ0LmxudW0KKwkJJiYgZnBvcy5jb2wgPCBJbnNzdGFydC5jb2wpCisJeworCSAgICBwdHIgKz0gSW5zc3RhcnQuY29sIC0gZnBvcy5jb2w7CisJICAgIGZwb3MuY29sID0gSW5zc3RhcnQuY29sOworCX0KKworCS8qIGNvbXB1dGUgdmlydHVhbCBjb2x1bW4gbnVtYmVycyBvZiBmaXJzdCB3aGl0ZSBhbmQgY3Vyc29yICovCisJZ2V0dmNvbChjdXJ3aW4sICZmcG9zLCAmdmNvbCwgTlVMTCwgTlVMTCk7CisJZ2V0dmNvbChjdXJ3aW4sIGN1cnNvciwgJndhbnRfdmNvbCwgTlVMTCwgTlVMTCk7CisKKwkvKiBVc2UgYXMgbWFueSBUQUJzIGFzIHBvc3NpYmxlLiAgQmV3YXJlIG9mICdzaG93YnJlYWsnIGFuZAorCSAqICdsaW5lYnJlYWsnIGFkZGluZyBleHRyYSB2aXJ0dWFsIGNvbHVtbnMuICovCisJd2hpbGUgKHZpbV9pc3doaXRlKCpwdHIpKQorCXsKKwkgICAgaSA9IGxicl9jaGFydGFic2l6ZSgoY2hhcl91ICopIlx0IiwgdmNvbCk7CisJICAgIGlmICh2Y29sICsgaSA+IHdhbnRfdmNvbCkKKwkJYnJlYWs7CisJICAgIGlmICgqcHRyICE9IFRBQikKKwkgICAgeworCQkqcHRyID0gVEFCOworCQlpZiAoY2hhbmdlX2NvbCA8IDApCisJCXsKKwkJICAgIGNoYW5nZV9jb2wgPSBmcG9zLmNvbDsgIC8qIENvbHVtbiBvZiBmaXJzdCBjaGFuZ2UgKi8KKwkJICAgIC8qIE1heSBoYXZlIHRvIGFkanVzdCBJbnNzdGFydCAqLworCQkgICAgaWYgKGZwb3MubG51bSA9PSBJbnNzdGFydC5sbnVtICYmIGZwb3MuY29sIDwgSW5zc3RhcnQuY29sKQorCQkJSW5zc3RhcnQuY29sID0gZnBvcy5jb2w7CisJCX0KKwkgICAgfQorCSAgICArK2Zwb3MuY29sOworCSAgICArK3B0cjsKKwkgICAgdmNvbCArPSBpOworCX0KKworCWlmIChjaGFuZ2VfY29sID49IDApCisJeworCSAgICBpbnQgcmVwbF9vZmYgPSAwOworCisJICAgIC8qIFNraXAgb3ZlciB0aGUgc3BhY2VzIHdlIG5lZWQuICovCisJICAgIHdoaWxlICh2Y29sIDwgd2FudF92Y29sICYmICpwdHIgPT0gJyAnKQorCSAgICB7CisJCXZjb2wgKz0gbGJyX2NoYXJ0YWJzaXplKHB0ciwgdmNvbCk7CisJCSsrcHRyOworCQkrK3JlcGxfb2ZmOworCSAgICB9CisJICAgIGlmICh2Y29sID4gd2FudF92Y29sKQorCSAgICB7CisJCS8qIE11c3QgaGF2ZSBhIGNoYXIgd2l0aCAnc2hvd2JyZWFrJyBqdXN0IGJlZm9yZSBpdC4gKi8KKwkJLS1wdHI7CisJCS0tcmVwbF9vZmY7CisJICAgIH0KKwkgICAgZnBvcy5jb2wgKz0gcmVwbF9vZmY7CisKKwkgICAgLyogRGVsZXRlIGZvbGxvd2luZyBzcGFjZXMuICovCisJICAgIGkgPSBjdXJzb3ItPmNvbCAtIGZwb3MuY29sOworCSAgICBpZiAoaSA+IDApCisJICAgIHsKKwkJbWNoX21lbW1vdmUocHRyLCBwdHIgKyBpLCBTVFJMRU4ocHRyICsgaSkgKyAxKTsKKwkJLyogY29ycmVjdCByZXBsYWNlIHN0YWNrLiAqLworCQlpZiAoKFN0YXRlICYgUkVQTEFDRV9GTEFHKQorI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwkJCSYmICEoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorI2VuZGlmCisJCQkpCisJCSAgICBmb3IgKHRlbXAgPSBpOyAtLXRlbXAgPj0gMDsgKQorCQkJcmVwbGFjZV9qb2luKHJlcGxfb2ZmKTsKKwkgICAgfQorCSAgICBjdXJzb3ItPmNvbCAtPSBpOworCisjaWZkZWYgRkVBVF9WUkVQTEFDRQorCSAgICAvKgorCSAgICAgKiBJbiBWUkVQTEFDRSBtb2RlLCB3ZSBoYXZlbid0IGNoYW5nZWQgYW55dGhpbmcgeWV0LiAgRG8gaXQgbm93IGJ5CisJICAgICAqIGJhY2tzcGFjaW5nIG92ZXIgdGhlIGNoYW5nZWQgc3BhY2luZyBhbmQgdGhlbiBpbnNlcnRpbmcgdGhlIG5ldworCSAgICAgKiBzcGFjaW5nLgorCSAgICAgKi8KKwkgICAgaWYgKFN0YXRlICYgVlJFUExBQ0VfRkxBRykKKwkgICAgeworCQkvKiBCYWNrc3BhY2UgZnJvbSByZWFsIGN1cnNvciB0byBjaGFuZ2VfY29sICovCisJCWJhY2tzcGFjZV91bnRpbF9jb2x1bW4oY2hhbmdlX2NvbCk7CisKKwkJLyogSW5zZXJ0IGVhY2ggY2hhciBpbiBzYXZlZF9saW5lIGZyb20gY2hhbmdlZF9jb2wgdG8KKwkJICogcHRyLWN1cnNvciAqLworCQlpbnNfYnl0ZXNfbGVuKHNhdmVkX2xpbmUgKyBjaGFuZ2VfY29sLAorCQkJCQkJICAgIGN1cnNvci0+Y29sIC0gY2hhbmdlX2NvbCk7CisJICAgIH0KKyNlbmRpZgorCX0KKworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwlpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorCSAgICB2aW1fZnJlZShzYXZlZF9saW5lKTsKKyNlbmRpZgorCWN1cndpbi0+d19wX2xpc3QgPSBzYXZlX2xpc3Q7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogSGFuZGxlIENSIG9yIE5MIGluIGluc2VydCBtb2RlLgorICogUmV0dXJuIFRSVUUgd2hlbiBvdXQgb2YgbWVtb3J5IG9yIGNhbid0IHVuZG8uCisgKi8KKyAgICBzdGF0aWMgaW50CitpbnNfZW9sKGMpCisgICAgaW50CQljOworeworICAgIGludAkgICAgaTsKKworICAgIGlmIChlY2hlY2tfYWJicihjICsgQUJCUl9PRkYpKQorCXJldHVybiBGQUxTRTsKKyAgICBpZiAoc3RvcF9hcnJvdygpID09IEZBSUwpCisJcmV0dXJuIFRSVUU7CisgICAgdW5kaXNwbGF5X2RvbGxhcigpOworCisgICAgLyoKKyAgICAgKiBTdHJhbmdlIFZpIGJlaGF2aW91cjogSW4gUmVwbGFjZSBtb2RlLCB0eXBpbmcgYSBOTCB3aWxsIG5vdCBkZWxldGUgdGhlCisgICAgICogY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuICBPbmx5IHB1c2ggYSBOVUwgb24gdGhlIHJlcGxhY2Ugc3RhY2ssCisgICAgICogbm90aGluZyB0byBwdXQgYmFjayB3aGVuIHRoZSBOTCBpcyBkZWxldGVkLgorICAgICAqLworICAgIGlmICgoU3RhdGUgJiBSRVBMQUNFX0ZMQUcpCisjaWZkZWYgRkVBVF9WUkVQTEFDRQorCSAgICAmJiAhKFN0YXRlICYgVlJFUExBQ0VfRkxBRykKKyNlbmRpZgorCSAgICApCisJcmVwbGFjZV9wdXNoKE5VTCk7CisKKyAgICAvKgorICAgICAqIEluIFZSRVBMQUNFIG1vZGUsIGEgTkwgcmVwbGFjZXMgdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIGFuZCBzdGFydHMKKyAgICAgKiByZXBsYWNpbmcgdGhlIG5leHQgbGluZSwgc28gd2UgcHVzaCBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgbGVmdCBvbiB0aGUKKyAgICAgKiBsaW5lIG9udG8gdGhlIHJlcGxhY2Ugc3RhY2suICBUaGlzIGlzIG5vdCBkb25lIGhlcmUgdGhvdWdoLCBpdCBpcyBkb25lCisgICAgICogaW4gb3Blbl9saW5lKCkuCisgICAgICovCisKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorIyBpZmRlZiBGRUFUX0ZLTUFQCisgICAgaWYgKHBfYWx0a2V5bWFwICYmIHBfZmttYXApCisJZmttYXAoTkwpOworIyBlbmRpZgorICAgIC8qIE5MIGluIHJldmVyc2UgaW5zZXJ0IHdpbGwgYWx3YXlzIHN0YXJ0IGluIHRoZSBlbmQgb2YKKyAgICAgKiBjdXJyZW50IGxpbmUuICovCisgICAgaWYgKHJldmluc19vbikKKwljdXJ3aW4tPndfY3Vyc29yLmNvbCArPSAoY29sbnJfVClTVFJMRU4obWxfZ2V0X2N1cnNvcigpKTsKKyNlbmRpZgorCisgICAgQXBwZW5kVG9SZWRvYnVmZihOTF9TVFIpOworICAgIGkgPSBvcGVuX2xpbmUoRk9SV0FSRCwKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisJICAgIGhhc19mb3JtYXRfb3B0aW9uKEZPX1JFVF9DT01TKSA/IE9QRU5MSU5FX0RPX0NPTSA6CisjZW5kaWYKKwkgICAgMCwgb2xkX2luZGVudCk7CisgICAgb2xkX2luZGVudCA9IDA7CisjaWZkZWYgRkVBVF9DSU5ERU5UCisgICAgY2FuX2NpbmRlbnQgPSBUUlVFOworI2VuZGlmCisKKyAgICByZXR1cm4gKCFpKTsKK30KKworI2lmZGVmIEZFQVRfRElHUkFQSFMKKy8qCisgKiBIYW5kbGUgZGlncmFwaCBpbiBpbnNlcnQgbW9kZS4KKyAqIFJldHVybnMgY2hhcmFjdGVyIHN0aWxsIHRvIGJlIGluc2VydGVkLCBvciBOVUwgd2hlbiBub3RoaW5nIHJlbWFpbmluZyB0byBiZQorICogZG9uZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2luc19kaWdyYXBoKCkKK3sKKyAgICBpbnQJICAgIGM7CisgICAgaW50CSAgICBjYzsKKworICAgIHBjX3N0YXR1cyA9IFBDX1NUQVRVU19VTlNFVDsKKyAgICBpZiAocmVkcmF3aW5nKCkgJiYgIWNoYXJfYXZhaWwoKSkKKyAgICB7CisJLyogbWF5IG5lZWQgdG8gcmVkcmF3IHdoZW4gbm8gbW9yZSBjaGFycyBhdmFpbGFibGUgbm93ICovCisJaW5zX3JlZHJhdygpOworCisJZWRpdF9wdXRjaGFyKCc/JywgVFJVRSk7CisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwlhZGRfdG9fc2hvd2NtZF9jKEN0cmxfSyk7CisjZW5kaWYKKyAgICB9CisKKyNpZmRlZiBVU0VfT05fRkxZX1NDUk9MTAorICAgIGRvbnRfc2Nyb2xsID0gVFJVRTsJCS8qIGRpc2FsbG93IHNjcm9sbGluZyBoZXJlICovCisjZW5kaWYKKworICAgIC8qIGRvbid0IG1hcCB0aGUgZGlncmFwaCBjaGFycy4gVGhpcyBhbHNvIHByZXZlbnRzIHRoZQorICAgICAqIG1vZGUgbWVzc2FnZSB0byBiZSBkZWxldGVkIHdoZW4gRVNDIGlzIGhpdCAqLworICAgICsrbm9fbWFwcGluZzsKKyAgICArK2FsbG93X2tleXM7CisgICAgYyA9IHNhZmVfdmdldGMoKTsKKyAgICAtLW5vX21hcHBpbmc7CisgICAgLS1hbGxvd19rZXlzOworICAgIGlmIChJU19TUEVDSUFMKGMpIHx8IG1vZF9tYXNrKQkgICAgLyogc3BlY2lhbCBrZXkgKi8KKyAgICB7CisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwljbGVhcl9zaG93Y21kKCk7CisjZW5kaWYKKwlpbnNlcnRfc3BlY2lhbChjLCBUUlVFLCBGQUxTRSk7CisJcmV0dXJuIE5VTDsKKyAgICB9CisgICAgaWYgKGMgIT0gRVNDKQorICAgIHsKKwlpZiAocmVkcmF3aW5nKCkgJiYgIWNoYXJfYXZhaWwoKSkKKwl7CisJICAgIC8qIG1heSBuZWVkIHRvIHJlZHJhdyB3aGVuIG5vIG1vcmUgY2hhcnMgYXZhaWxhYmxlIG5vdyAqLworCSAgICBpbnNfcmVkcmF3KCk7CisKKwkgICAgaWYgKGNoYXIyY2VsbHMoYykgPT0gMSkKKwkgICAgeworCQkvKiBmaXJzdCByZW1vdmUgdGhlICc/Jywgb3RoZXJ3aXNlIGl0J3MgcmVzdG9yZWQgd2hlbiB0eXBpbmcKKwkJICogYW4gRVNDIG5leHQgKi8KKwkJZWRpdF91bnB1dGNoYXIoKTsKKwkJaW5zX3JlZHJhdygpOworCQllZGl0X3B1dGNoYXIoYywgVFJVRSk7CisJICAgIH0KKyNpZmRlZiBGRUFUX0NNRExfSU5GTworCSAgICBhZGRfdG9fc2hvd2NtZF9jKGMpOworI2VuZGlmCisJfQorCSsrbm9fbWFwcGluZzsKKwkrK2FsbG93X2tleXM7CisJY2MgPSBzYWZlX3ZnZXRjKCk7CisJLS1ub19tYXBwaW5nOworCS0tYWxsb3dfa2V5czsKKwlpZiAoY2MgIT0gRVNDKQorCXsKKwkgICAgQXBwZW5kVG9SZWRvYnVmZigoY2hhcl91ICopQ1RSTF9WX1NUUik7CisJICAgIGMgPSBnZXRkaWdyYXBoKGMsIGNjLCBUUlVFKTsKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworCSAgICBjbGVhcl9zaG93Y21kKCk7CisjZW5kaWYKKwkgICAgcmV0dXJuIGM7CisJfQorICAgIH0KKyAgICBlZGl0X3VucHV0Y2hhcigpOworI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisgICAgY2xlYXJfc2hvd2NtZCgpOworI2VuZGlmCisgICAgcmV0dXJuIE5VTDsKK30KKyNlbmRpZgorCisvKgorICogSGFuZGxlIENUUkwtRSBhbmQgQ1RSTC1ZIGluIEluc2VydCBtb2RlOiBjb3B5IGNoYXIgZnJvbSBvdGhlciBsaW5lLgorICogUmV0dXJucyB0aGUgY2hhciB0byBiZSBpbnNlcnRlZCwgb3IgTlVMIGlmIG5vbmUgZm91bmQuCisgKi8KKyAgICBzdGF0aWMgaW50CitpbnNfY29weWNoYXIobG51bSkKKyAgICBsaW5lbnJfVAlsbnVtOworeworICAgIGludAkgICAgYzsKKyAgICBpbnQJICAgIHRlbXA7CisgICAgY2hhcl91ICAqcHRyLCAqcHJldl9wdHI7CisKKyAgICBpZiAobG51bSA8IDEgfHwgbG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorICAgIHsKKwl2aW1fYmVlcCgpOworCXJldHVybiBOVUw7CisgICAgfQorCisgICAgLyogdHJ5IHRvIGFkdmFuY2UgdG8gdGhlIGN1cnNvciBjb2x1bW4gKi8KKyAgICB0ZW1wID0gMDsKKyAgICBwdHIgPSBtbF9nZXQobG51bSk7CisgICAgcHJldl9wdHIgPSBwdHI7CisgICAgdmFsaWRhdGVfdmlydGNvbCgpOworICAgIHdoaWxlICgoY29sbnJfVCl0ZW1wIDwgY3Vyd2luLT53X3ZpcnRjb2wgJiYgKnB0ciAhPSBOVUwpCisgICAgeworCXByZXZfcHRyID0gcHRyOworCXRlbXAgKz0gbGJyX2NoYXJ0YWJzaXplX2FkdigmcHRyLCAoY29sbnJfVCl0ZW1wKTsKKyAgICB9CisgICAgaWYgKChjb2xucl9UKXRlbXAgPiBjdXJ3aW4tPndfdmlydGNvbCkKKwlwdHIgPSBwcmV2X3B0cjsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBjID0gKCptYl9wdHIyY2hhcikocHRyKTsKKyNlbHNlCisgICAgYyA9ICpwdHI7CisjZW5kaWYKKyAgICBpZiAoYyA9PSBOVUwpCisJdmltX2JlZXAoKTsKKyAgICByZXR1cm4gYzsKK30KKworI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKKy8qCisgKiBUcnkgdG8gZG8gc29tZSB2ZXJ5IHNtYXJ0IGF1dG8taW5kZW50aW5nLgorICogVXNlZCB3aGVuIGluc2VydGluZyBhICJub3JtYWwiIGNoYXJhY3Rlci4KKyAqLworICAgIHN0YXRpYyB2b2lkCitpbnNfdHJ5X3NpKGMpCisgICAgaW50CSAgICBjOworeworICAgIHBvc19UCSpwb3MsIG9sZF9wb3M7CisgICAgY2hhcl91CSpwdHI7CisgICAgaW50CQlpOworICAgIGludAkJdGVtcDsKKworICAgIC8qCisgICAgICogZG8gc29tZSB2ZXJ5IHNtYXJ0IGluZGVudGluZyB3aGVuIGVudGVyaW5nICd7JyBvciAnfScKKyAgICAgKi8KKyAgICBpZiAoKChkaWRfc2kgfHwgY2FuX3NpX2JhY2spICYmIGMgPT0gJ3snKSB8fCAoY2FuX3NpICYmIGMgPT0gJ30nKSkKKyAgICB7CisJLyoKKwkgKiBmb3IgJ30nIHNldCBpbmRlbnQgZXF1YWwgdG8gaW5kZW50IG9mIGxpbmUgY29udGFpbmluZyBtYXRjaGluZyAneycKKwkgKi8KKwlpZiAoYyA9PSAnfScgJiYgKHBvcyA9IGZpbmRtYXRjaChOVUxMLCAneycpKSAhPSBOVUxMKQorCXsKKwkgICAgb2xkX3BvcyA9IGN1cndpbi0+d19jdXJzb3I7CisJICAgIC8qCisJICAgICAqIElmIHRoZSBtYXRjaGluZyAneycgaGFzIGEgJyknIGltbWVkaWF0ZWx5IGJlZm9yZSBpdCAoaWdub3JpbmcKKwkgICAgICogd2hpdGUtc3BhY2UpLCB0aGVuIGxpbmUgdXAgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUKKwkgICAgICogY29udGFpbmluZyB0aGUgbWF0Y2hpbmcgJygnIGlmIHRoZXJlIGlzIG9uZS4gIFRoaXMgaGFuZGxlcyB0aGUKKwkgICAgICogY2FzZSB3aGVyZSBhbiAiaWYgKC4uXG4uLikgeyIgc3RhdGVtZW50IGNvbnRpbnVlcyBvdmVyIG11bHRpcGxlCisJICAgICAqIGxpbmVzIC0tIHdlYmIKKwkgICAgICovCisJICAgIHB0ciA9IG1sX2dldChwb3MtPmxudW0pOworCSAgICBpID0gcG9zLT5jb2w7CisJICAgIGlmIChpID4gMCkJCS8qIHNraXAgYmxhbmtzIGJlZm9yZSAneycgKi8KKwkJd2hpbGUgKC0taSA+IDAgJiYgdmltX2lzd2hpdGUocHRyW2ldKSkKKwkJICAgIDsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gcG9zLT5sbnVtOworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGk7CisJICAgIGlmIChwdHJbaV0gPT0gJyknICYmIChwb3MgPSBmaW5kbWF0Y2goTlVMTCwgJygnKSkgIT0gTlVMTCkKKwkJY3Vyd2luLT53X2N1cnNvciA9ICpwb3M7CisJICAgIGkgPSBnZXRfaW5kZW50KCk7CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBvbGRfcG9zOworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwkgICAgaWYgKFN0YXRlICYgVlJFUExBQ0VfRkxBRykKKwkJY2hhbmdlX2luZGVudChJTkRFTlRfU0VULCBpLCBGQUxTRSwgTlVMKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCSh2b2lkKXNldF9pbmRlbnQoaSwgU0lOX0NIQU5HRUQpOworCX0KKwllbHNlIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA+IDApCisJeworCSAgICAvKgorCSAgICAgKiB3aGVuIGluc2VydGluZyAneycgYWZ0ZXIgIk8iIHJlZHVjZSBpbmRlbnQsIGJ1dCBub3QKKwkgICAgICogbW9yZSB0aGFuIGluZGVudCBvZiBwcmV2aW91cyBsaW5lCisJICAgICAqLworCSAgICB0ZW1wID0gVFJVRTsKKwkgICAgaWYgKGMgPT0gJ3snICYmIGNhbl9zaV9iYWNrICYmIGN1cndpbi0+d19jdXJzb3IubG51bSA+IDEpCisJICAgIHsKKwkJb2xkX3BvcyA9IGN1cndpbi0+d19jdXJzb3I7CisJCWkgPSBnZXRfaW5kZW50KCk7CisJCXdoaWxlIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiAxKQorCQl7CisJCSAgICBwdHIgPSBza2lwd2hpdGUobWxfZ2V0KC0tKGN1cndpbi0+d19jdXJzb3IubG51bSkpKTsKKworCQkgICAgLyogaWdub3JlIGVtcHR5IGxpbmVzIGFuZCBsaW5lcyBzdGFydGluZyB3aXRoICcjJy4gKi8KKwkJICAgIGlmICgqcHRyICE9ICcjJyAmJiAqcHRyICE9IE5VTCkKKwkJCWJyZWFrOworCQl9CisJCWlmIChnZXRfaW5kZW50KCkgPj0gaSkKKwkJICAgIHRlbXAgPSBGQUxTRTsKKwkJY3Vyd2luLT53X2N1cnNvciA9IG9sZF9wb3M7CisJICAgIH0KKwkgICAgaWYgKHRlbXApCisJCXNoaWZ0X2xpbmUoVFJVRSwgRkFMU0UsIDEpOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIHNldCBpbmRlbnQgb2YgJyMnIGFsd2F5cyB0byAwCisgICAgICovCisgICAgaWYgKGN1cndpbi0+d19jdXJzb3IuY29sID4gMCAmJiBjYW5fc2kgJiYgYyA9PSAnIycpCisgICAgeworCS8qIHJlbWVtYmVyIGN1cnJlbnQgaW5kZW50IGZvciBuZXh0IGxpbmUgKi8KKwlvbGRfaW5kZW50ID0gZ2V0X2luZGVudCgpOworCSh2b2lkKXNldF9pbmRlbnQoMCwgU0lOX0NIQU5HRUQpOworICAgIH0KKworICAgIC8qIEFkanVzdCBhaV9jb2wsIHRoZSBjaGFyIGF0IHRoaXMgcG9zaXRpb24gY2FuIGJlIGRlbGV0ZWQuICovCisgICAgaWYgKGFpX2NvbCA+IGN1cndpbi0+d19jdXJzb3IuY29sKQorCWFpX2NvbCA9IGN1cndpbi0+d19jdXJzb3IuY29sOworfQorI2VuZGlmCisKKy8qCisgKiBHZXQgdGhlIHZhbHVlIHRoYXQgd192aXJ0Y29sIHdvdWxkIGhhdmUgd2hlbiAnbGlzdCcgaXMgb2ZmLgorICogVW5sZXNzICdjcG8nIGNvbnRhaW5zIHRoZSAnTCcgZmxhZy4KKyAqLworICAgIHN0YXRpYyBjb2xucl9UCitnZXRfbm9saXN0X3ZpcnRjb2woKQoreworICAgIGlmIChjdXJ3aW4tPndfcF9saXN0ICYmIHZpbV9zdHJjaHIocF9jcG8sIENQT19MSVNUV00pID09IE5VTEwpCisJcmV0dXJuIGdldHZjb2xfbm9saXN0KCZjdXJ3aW4tPndfY3Vyc29yKTsKKyAgICB2YWxpZGF0ZV92aXJ0Y29sKCk7CisgICAgcmV0dXJuIGN1cndpbi0+d192aXJ0Y29sOworfQpkaWZmIC0tZ2l0IGEvc3JjL2V2YWwuYyBiL3NyYy9ldmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzMzllNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ldmFsLmMKQEAgLTAsMCArMSwxMDY4MiBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogZXZhbC5jOiBFeHByZXNzaW9uIGV2YWx1YXRpb24uCisgKi8KKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKQorIyBpbmNsdWRlIDxpby5oPgkvKiBmb3IgbWNoX29wZW4oKSwgbXVzdCBiZSBiZWZvcmUgdmltLmggKi8KKyNlbmRpZgorCisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBBTUlHQQorIyBpbmNsdWRlIDx0aW1lLmg+CS8qIGZvciBzdHJmdGltZSgpICovCisjZW5kaWYKKworI2lmZGVmIE1BQ09TCisjIGluY2x1ZGUgPHRpbWUuaD4JLyogZm9yIHRpbWVfdCAqLworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisKKyNpZiBTSVpFT0ZfSU5UIDw9IDMJCS8qIHVzZSBsb25nIGlmIGludCBpcyBzbWFsbGVyIHRoYW4gMzIgYml0cyAqLwordHlwZWRlZiBsb25nCXZhcm51bWJlcl9UOworI2Vsc2UKK3R5cGVkZWYgaW50CXZhcm51bWJlcl9UOworI2VuZGlmCisKKy8qCisgKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbiBpbnRlcm5hbCB2YXJpYWJsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBjaGFyX3UJKnZhcl9uYW1lOwkvKiBuYW1lIG9mIHZhcmlhYmxlICovCisgICAgY2hhcgl2YXJfdHlwZTsJLyogVkFSX05VTUJFUiBvciBWQVJfU1RSSU5HICovCisgICAgdW5pb24KKyAgICB7CisJdmFybnVtYmVyX1QJdmFyX251bWJlcjsgICAvKiBudW1iZXIgdmFsdWUgKi8KKwljaGFyX3UJCSp2YXJfc3RyaW5nOyAgLyogc3RyaW5nIHZhbHVlIChDYXJlZnVsOiBjYW4gYmUgTlVMTCEpICovCisgICAgfSB2YXJfdmFsOworfSB2YXI7CisKKyNkZWZpbmUgVkFSX1VOS05PV04gMAorI2RlZmluZSBWQVJfTlVNQkVSICAxCisjZGVmaW5lIFZBUl9TVFJJTkcgIDIKKwordHlwZWRlZiB2YXIgKglWQVI7CisKKy8qCisgKiBBbGwgdXNlci1kZWZpbmVkIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHN0b3JlZCBpbiAidmFyaWFibGVzIi4KKyAqLworZ2FycmF5X1QJdmFyaWFibGVzID0gezAsIDAsIHNpemVvZih2YXIpLCA0LCBOVUxMfTsKKworLyoKKyAqIEFycmF5IHRvIGhvbGQgYW4gYXJyYXkgd2l0aCB2YXJpYWJsZXMgbG9jYWwgdG8gZWFjaCBzb3VyY2VkIHNjcmlwdC4KKyAqLworc3RhdGljIGdhcnJheV9UCSAgICBnYV9zY3JpcHRzID0gezAsIDAsIHNpemVvZihnYXJyYXlfVCksIDQsIE5VTEx9OworI2RlZmluZSBTQ1JJUFRfVkFSUyhpZCkgKCgoZ2FycmF5X1QgKilnYV9zY3JpcHRzLmdhX2RhdGEpWyhpZCkgLSAxXSkKKworCisjZGVmaW5lIFZBUl9FTlRSWShpZHgpCSgoKFZBUikodmFyaWFibGVzLmdhX2RhdGEpKVtpZHhdKQorI2RlZmluZSBWQVJfR0FQX0VOVFJZKGlkeCwgZ2FwKQkoKChWQVIpKGdhcC0+Z2FfZGF0YSkpW2lkeF0pCisjZGVmaW5lIEJWQVJfRU5UUlkoaWR4KQkoKChWQVIpKGN1cmJ1Zi0+Yl92YXJzLmdhX2RhdGEpKVtpZHhdKQorI2RlZmluZSBXVkFSX0VOVFJZKGlkeCkJKCgoVkFSKShjdXJ3aW4tPndfdmFycy5nYV9kYXRhKSlbaWR4XSkKKworc3RhdGljIGludCBlY2hvX2F0dHIgPSAwOyAgIC8qIGF0dHJpYnV0ZXMgdXNlZCBmb3IgIjplY2hvIiAqLworCisvKgorICogU3RydWN0dXJlIHRvIGhvbGQgaW5mbyBmb3IgYSB1c2VyIGZ1bmN0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCB1ZnVuYyB1ZnVuY19UOworCitzdHJ1Y3QgdWZ1bmMKK3sKKyAgICB1ZnVuY19UCSpuZXh0OwkJLyogbmV4dCBmdW5jdGlvbiBpbiBsaXN0ICovCisgICAgY2hhcl91CSpuYW1lOwkJLyogbmFtZSBvZiBmdW5jdGlvbjsgY2FuIHN0YXJ0IHdpdGggPFNOUj4xMjNfCisJCQkJICAgKDxTTlI+IGlzIEtfU1BFQ0lBTCBLU19FWFRSQSBLRV9TTlIpICovCisgICAgaW50CQl2YXJhcmdzOwkvKiB2YXJpYWJsZSBuciBvZiBhcmd1bWVudHMgKi8KKyAgICBpbnQJCWZsYWdzOworICAgIGludAkJY2FsbHM7CQkvKiBuciBvZiBhY3RpdmUgY2FsbHMgKi8KKyAgICBnYXJyYXlfVAlhcmdzOwkJLyogYXJndW1lbnRzICovCisgICAgZ2FycmF5X1QJbGluZXM7CQkvKiBmdW5jdGlvbiBsaW5lcyAqLworICAgIHNjaWRfVAlzY3JpcHRfSUQ7CS8qIElEIG9mIHNjcmlwdCB3aGVyZSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwKKwkJCQkgICB1c2VkIGZvciBzOiB2YXJpYWJsZXMgKi8KK307CisKKy8qIGZ1bmN0aW9uIGZsYWdzICovCisjZGVmaW5lIEZDX0FCT1JUICAgIDEJCS8qIGFib3J0IGZ1bmN0aW9uIG9uIGVycm9yICovCisjZGVmaW5lIEZDX1JBTkdFICAgIDIJCS8qIGZ1bmN0aW9uIGFjY2VwdHMgcmFuZ2UgKi8KKworLyoKKyAqIEFsbCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFyZSBmb3VuZCBpbiB0aGUgZm9yd2FyZC1saW5rZWQgZnVuY3Rpb24gbGlzdC4KKyAqIFRoZSBmaXJzdCBmdW5jdGlvbiBpcyBwb2ludGVkIGF0IGJ5IGZpcnN0ZnVuYy4KKyAqLwordWZ1bmNfVAkJKmZpcnN0ZnVuYyA9IE5VTEw7CisKKyNkZWZpbmUgRlVOQ0FSRyhmcCwgaikJKChjaGFyX3UgKiopKGZwLT5hcmdzLmdhX2RhdGEpKVtqXQorI2RlZmluZSBGVU5DTElORShmcCwgaikJKChjaGFyX3UgKiopKGZwLT5saW5lcy5nYV9kYXRhKSlbal0KKworLyogc3RydWN0dXJlIHRvIGhvbGQgaW5mbyBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBleGVjdXRlZC4gKi8KK3N0cnVjdCBmdW5jY2FsbAoreworICAgIHVmdW5jX1QJKmZ1bmM7CQkvKiBmdW5jdGlvbiBiZWluZyBjYWxsZWQgKi8KKyAgICBpbnQJCWxpbmVucjsJCS8qIG5leHQgbGluZSB0byBiZSBleGVjdXRlZCAqLworICAgIGludAkJcmV0dXJuZWQ7CS8qICI6cmV0dXJuIiB1c2VkICovCisgICAgaW50CQlhcmdjb3VudDsJLyogbnIgb2YgYXJndW1lbnRzICovCisgICAgVkFSCQlhcmd2YXJzOwkvKiBhcmd1bWVudHMgKi8KKyAgICB2YXIJCWEwX3ZhcjsJCS8qICJhOjAiIHZhcmlhYmxlICovCisgICAgdmFyCQlmaXJzdGxpbmU7CS8qICJhOmZpcnN0bGluZSIgdmFyaWFibGUgKi8KKyAgICB2YXIJCWxhc3RsaW5lOwkvKiAiYTpsYXN0bGluZSIgdmFyaWFibGUgKi8KKyAgICBnYXJyYXlfVAlsX3ZhcnM7CQkvKiBsb2NhbCBmdW5jdGlvbiB2YXJpYWJsZXMgKi8KKyAgICBWQVIJCXJldHZhcjsJCS8qIHJldHVybiB2YWx1ZSB2YXJpYWJsZSAqLworICAgIGxpbmVucl9UCWJyZWFrcG9pbnQ7CS8qIG5leHQgbGluZSB3aXRoIGJyZWFrcG9pbnQgb3IgemVybyAqLworICAgIGludAkJZGJnX3RpY2s7CS8qIGRlYnVnX3RpY2sgd2hlbiBicmVha3BvaW50IHdhcyBzZXQgKi8KKyAgICBpbnQJCWxldmVsOwkJLyogdG9wIG5lc3RpbmcgbGV2ZWwgb2YgZXhlY3V0ZWQgZnVuY3Rpb24gKi8KK307CisKKy8qCisgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGVkIGZ1bmN0aW9uLgorICovCisgICAgY2hhcl91ICoKK2Z1bmNfbmFtZShjb29raWUpCisgICAgdm9pZCAqY29va2llOworeworICAgIHJldHVybiAoKHN0cnVjdCBmdW5jY2FsbCAqKWNvb2tpZSktPmZ1bmMtPm5hbWU7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgbmV4dCBicmVha3BvaW50IGxpbmUgZm9yIGEgZnVuY2NhbGwgY29va2llLgorICovCisgICAgbGluZW5yX1QgKgorZnVuY19icmVha3BvaW50KGNvb2tpZSkKKyAgICB2b2lkICpjb29raWU7Cit7CisgICAgcmV0dXJuICYoKHN0cnVjdCBmdW5jY2FsbCAqKWNvb2tpZSktPmJyZWFrcG9pbnQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgZGVidWcgdGljayBmb3IgYSBmdW5jY2FsbCBjb29raWUuCisgKi8KKyAgICBpbnQgKgorZnVuY19kYmdfdGljayhjb29raWUpCisgICAgdm9pZCAqY29va2llOworeworICAgIHJldHVybiAmKChzdHJ1Y3QgZnVuY2NhbGwgKiljb29raWUpLT5kYmdfdGljazsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbmVzdGluZyBsZXZlbCBmb3IgYSBmdW5jY2FsbCBjb29raWUuCisgKi8KKyAgICBpbnQKK2Z1bmNfbGV2ZWwoY29va2llKQorICAgIHZvaWQgKmNvb2tpZTsKK3sKKyAgICByZXR1cm4gKChzdHJ1Y3QgZnVuY2NhbGwgKiljb29raWUpLT5sZXZlbDsKK30KKworLyogcG9pbnRlciB0byBmdW5jY2FsIGZvciBjdXJyZW50bHkgYWN0aXZlIGZ1bmN0aW9uICovCitzdHJ1Y3QgZnVuY2NhbGwgKmN1cnJlbnRfZnVuY2NhbCA9IE5VTEw7CisKKy8qCisgKiBSZXR1cm4gVFJVRSB3aGVuIGEgZnVuY3Rpb24gd2FzIGVuZGVkIGJ5IGEgIjpyZXR1cm4iIGNvbW1hbmQuCisgKi8KKyAgICBpbnQKK2N1cnJlbnRfZnVuY19yZXR1cm5lZCgpCit7CisgICAgcmV0dXJuIGN1cnJlbnRfZnVuY2NhbC0+cmV0dXJuZWQ7Cit9CisKKworLyoKKyAqIEFycmF5IHRvIGhvbGQgdGhlIHZhbHVlIG9mIHY6IHZhcmlhYmxlcy4KKyAqLworI2luY2x1ZGUgInZlcnNpb24uaCIKKworLyogdmFsdWVzIGZvciBmbGFnczogKi8KKyNkZWZpbmUgVlZfQ09NUEFUICAgMQkgICAgLyogY29tcGF0aWJsZSwgYWxzbyB1c2VkIHdpdGhvdXQgInY6IiAqLworI2RlZmluZSBWVl9STwkgICAgMgkgICAgLyogcmVhZC1vbmx5ICovCisKK3N0cnVjdCB2aW12YXIKK3sKKyAgICBjaGFyCSpuYW1lOwkJLyogbmFtZSBvZiB2YXJpYWJsZSwgd2l0aG91dCB2OiAqLworICAgIGludAkJbGVuOwkJLyogbGVuZ3RoIG9mIG5hbWUgKi8KKyAgICBjaGFyX3UJKnZhbDsJCS8qIGN1cnJlbnQgdmFsdWUgKGNhbiBhbHNvIGJlIGEgbnVtYmVyISkgKi8KKyAgICBjaGFyCXR5cGU7CQkvKiBWQVJfTlVNQkVSIG9yIFZBUl9TVFJJTkcgKi8KKyAgICBjaGFyCWZsYWdzOwkJLyogVlZfQ09NUEFUIGFuZCBWVl9STyAqLworfSB2aW12YXJzW1ZWX0xFTl0gPQoreyAgIC8qIFRoZSBvcmRlciBoZXJlIG11c3QgbWF0Y2ggdGhlIFZWXyBkZWZpbmVzIGluIHZpbS5oISAqLworICAgIHsiY291bnQiLCBzaXplb2YoImNvdW50IikgLSAxLCBOVUxMLCBWQVJfTlVNQkVSLCBWVl9DT01QQVQrVlZfUk99LAorICAgIHsiY291bnQxIiwgc2l6ZW9mKCJjb3VudDEiKSAtIDEsIE5VTEwsIFZBUl9OVU1CRVIsIFZWX1JPfSwKKyAgICB7InByZXZjb3VudCIsIHNpemVvZigicHJldmNvdW50IikgLSAxLCBOVUxMLCBWQVJfTlVNQkVSLCBWVl9ST30sCisgICAgeyJlcnJtc2ciLCBzaXplb2YoImVycm1zZyIpIC0gMSwgTlVMTCwgVkFSX1NUUklORywgVlZfQ09NUEFUfSwKKyAgICB7Indhcm5pbmdtc2ciLCBzaXplb2YoIndhcm5pbmdtc2ciKSAtIDEsIE5VTEwsIFZBUl9TVFJJTkcsIDB9LAorICAgIHsic3RhdHVzbXNnIiwgc2l6ZW9mKCJzdGF0dXNtc2ciKSAtIDEsIE5VTEwsIFZBUl9TVFJJTkcsIDB9LAorICAgIHsic2hlbGxfZXJyb3IiLCBzaXplb2YoInNoZWxsX2Vycm9yIikgLSAxLCBOVUxMLCBWQVJfTlVNQkVSLAorCQkJCQkJCSAgICAgVlZfQ09NUEFUK1ZWX1JPfSwKKyAgICB7InRoaXNfc2Vzc2lvbiIsIHNpemVvZigidGhpc19zZXNzaW9uIikgLSAxLCBOVUxMLCBWQVJfU1RSSU5HLCBWVl9DT01QQVR9LAorICAgIHsidmVyc2lvbiIsIHNpemVvZigidmVyc2lvbiIpIC0gMSwgKGNoYXJfdSAqKVZJTV9WRVJTSU9OXzEwMCwKKwkJCQkJCSBWQVJfTlVNQkVSLCBWVl9DT01QQVQrVlZfUk99LAorICAgIHsibG51bSIsIHNpemVvZigibG51bSIpIC0gMSwgTlVMTCwgVkFSX05VTUJFUiwgVlZfUk99LAorICAgIHsidGVybXJlc3BvbnNlIiwgc2l6ZW9mKCJ0ZXJtcmVzcG9uc2UiKSAtIDEsIE5VTEwsIFZBUl9TVFJJTkcsIFZWX1JPfSwKKyAgICB7ImZuYW1lIiwgc2l6ZW9mKCJmbmFtZSIpIC0gMSwgTlVMTCwgVkFSX1NUUklORywgVlZfUk99LAorICAgIHsibGFuZyIsIHNpemVvZigibGFuZyIpIC0gMSwgTlVMTCwgVkFSX1NUUklORywgVlZfUk99LAorICAgIHsibGNfdGltZSIsIHNpemVvZigibGNfdGltZSIpIC0gMSwgTlVMTCwgVkFSX1NUUklORywgVlZfUk99LAorICAgIHsiY3R5cGUiLCBzaXplb2YoImN0eXBlIikgLSAxLCBOVUxMLCBWQVJfU1RSSU5HLCBWVl9ST30sCisgICAgeyJjaGFyY29udmVydF9mcm9tIiwgc2l6ZW9mKCJjaGFyY29udmVydF9mcm9tIikgLSAxLCBOVUxMLCBWQVJfU1RSSU5HLCBWVl9ST30sCisgICAgeyJjaGFyY29udmVydF90byIsIHNpemVvZigiY2hhcmNvbnZlcnRfdG8iKSAtIDEsIE5VTEwsIFZBUl9TVFJJTkcsIFZWX1JPfSwKKyAgICB7ImZuYW1lX2luIiwgc2l6ZW9mKCJmbmFtZV9pbiIpIC0gMSwgTlVMTCwgVkFSX1NUUklORywgVlZfUk99LAorICAgIHsiZm5hbWVfb3V0Iiwgc2l6ZW9mKCJmbmFtZV9vdXQiKSAtIDEsIE5VTEwsIFZBUl9TVFJJTkcsIFZWX1JPfSwKKyAgICB7ImZuYW1lX25ldyIsIHNpemVvZigiZm5hbWVfbmV3IikgLSAxLCBOVUxMLCBWQVJfU1RSSU5HLCBWVl9ST30sCisgICAgeyJmbmFtZV9kaWZmIiwgc2l6ZW9mKCJmbmFtZV9kaWZmIikgLSAxLCBOVUxMLCBWQVJfU1RSSU5HLCBWVl9ST30sCisgICAgeyJjbWRhcmciLCBzaXplb2YoImNtZGFyZyIpIC0gMSwgTlVMTCwgVkFSX1NUUklORywgVlZfUk99LAorICAgIHsiZm9sZHN0YXJ0Iiwgc2l6ZW9mKCJmb2xkc3RhcnQiKSAtIDEsIE5VTEwsIFZBUl9OVU1CRVIsIFZWX1JPfSwKKyAgICB7ImZvbGRlbmQiLCBzaXplb2YoImZvbGRlbmQiKSAtIDEsIE5VTEwsIFZBUl9OVU1CRVIsIFZWX1JPfSwKKyAgICB7ImZvbGRkYXNoZXMiLCBzaXplb2YoImZvbGRkYXNoZXMiKSAtIDEsIE5VTEwsIFZBUl9TVFJJTkcsIFZWX1JPfSwKKyAgICB7ImZvbGRsZXZlbCIsIHNpemVvZigiZm9sZGxldmVsIikgLSAxLCBOVUxMLCBWQVJfTlVNQkVSLCBWVl9ST30sCisgICAgeyJwcm9nbmFtZSIsIHNpemVvZigicHJvZ25hbWUiKSAtIDEsIE5VTEwsIFZBUl9TVFJJTkcsIFZWX1JPfSwKKyAgICB7InNlcnZlcm5hbWUiLCBzaXplb2YoInNlcnZlcm5hbWUiKSAtIDEsIE5VTEwsIFZBUl9TVFJJTkcsIFZWX1JPfSwKKyAgICB7ImR5aW5nIiwgc2l6ZW9mKCJkeWluZyIpIC0gMSwgTlVMTCwgVkFSX05VTUJFUiwgVlZfUk99LAorICAgIHsiZXhjZXB0aW9uIiwgc2l6ZW9mKCJleGNlcHRpb24iKSAtIDEsIE5VTEwsIFZBUl9TVFJJTkcsIFZWX1JPfSwKKyAgICB7InRocm93cG9pbnQiLCBzaXplb2YoInRocm93cG9pbnQiKSAtIDEsIE5VTEwsIFZBUl9TVFJJTkcsIFZWX1JPfSwKKyAgICB7InJlZ2lzdGVyIiwgc2l6ZW9mKCJyZWdpc3RlciIpIC0gMSwgTlVMTCwgVkFSX1NUUklORywgVlZfUk99LAorICAgIHsiY21kYmFuZyIsIHNpemVvZigiY21kYmFuZyIpIC0gMSwgTlVMTCwgVkFSX05VTUJFUiwgVlZfUk99LAorfTsKKworc3RhdGljIGludCBldmFsMCBfX0FSR1MoKGNoYXJfdSAqYXJnLCAgVkFSIHJldHZhciwgY2hhcl91ICoqbmV4dGNtZCwgaW50IGV2YWx1YXRlKSk7CitzdGF0aWMgaW50IGV2YWwxIF9fQVJHUygoY2hhcl91ICoqYXJnLCBWQVIgcmV0dmFyLCBpbnQgZXZhbHVhdGUpKTsKK3N0YXRpYyBpbnQgZXZhbDIgX19BUkdTKChjaGFyX3UgKiphcmcsIFZBUiByZXR2YXIsIGludCBldmFsdWF0ZSkpOworc3RhdGljIGludCBldmFsMyBfX0FSR1MoKGNoYXJfdSAqKmFyZywgVkFSIHJldHZhciwgaW50IGV2YWx1YXRlKSk7CitzdGF0aWMgaW50IGV2YWw0IF9fQVJHUygoY2hhcl91ICoqYXJnLCBWQVIgcmV0dmFyLCBpbnQgZXZhbHVhdGUpKTsKK3N0YXRpYyBpbnQgZXZhbDUgX19BUkdTKChjaGFyX3UgKiphcmcsIFZBUiByZXR2YXIsIGludCBldmFsdWF0ZSkpOworc3RhdGljIGludCBldmFsNiBfX0FSR1MoKGNoYXJfdSAqKmFyZywgVkFSIHJldHZhciwgaW50IGV2YWx1YXRlKSk7CitzdGF0aWMgaW50IGV2YWw3IF9fQVJHUygoY2hhcl91ICoqYXJnLCBWQVIgcmV0dmFyLCBpbnQgZXZhbHVhdGUpKTsKK3N0YXRpYyBpbnQgZ2V0X29wdGlvbl92YXIgX19BUkdTKChjaGFyX3UgKiphcmcsIFZBUiByZXR2YXIsIGludCBldmFsdWF0ZSkpOworc3RhdGljIGludCBnZXRfc3RyaW5nX3ZhciBfX0FSR1MoKGNoYXJfdSAqKmFyZywgVkFSIHJldHZhciwgaW50IGV2YWx1YXRlKSk7CitzdGF0aWMgaW50IGdldF9saXRfc3RyaW5nX3ZhciBfX0FSR1MoKGNoYXJfdSAqKmFyZywgVkFSIHJldHZhciwgaW50IGV2YWx1YXRlKSk7CitzdGF0aWMgaW50IGdldF9lbnZfdmFyIF9fQVJHUygoY2hhcl91ICoqYXJnLCBWQVIgcmV0dmFyLCBpbnQgZXZhbHVhdGUpKTsKK3N0YXRpYyBpbnQgZmluZF9pbnRlcm5hbF9mdW5jIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitzdGF0aWMgaW50IGdldF9mdW5jX3ZhciBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGxlbiwgVkFSIHJldHZhciwgY2hhcl91ICoqYXJnLCBsaW5lbnJfVCBmaXJzdGxpbmUsIGxpbmVucl9UIGxhc3RsaW5lLCBpbnQgKmRvZXNyYW5nZSwgaW50IGV2YWx1YXRlKSk7CitzdGF0aWMgaW50IGNhbGxfZnVuYyBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGxlbiwgVkFSIHJldHZhciwgaW50IGFyZ2NvdW50LCBWQVIgYXJndmFycywgbGluZW5yX1QgZmlyc3RsaW5lLCBsaW5lbnJfVCBsYXN0bGluZSwgaW50ICpkb2VzcmFuZ2UsIGludCBldmFsdWF0ZSkpOworc3RhdGljIHZvaWQgZl9hcHBlbmQgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9hcmdjIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfYXJnaWR4IF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfYXJndiBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2Jyb3dzZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgYnVmX1QgKmZpbmRfYnVmZmVyIF9fQVJHUygoVkFSIGF2YXIpKTsKK3N0YXRpYyB2b2lkIGZfYnVmZXhpc3RzIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfYnVmbGlzdGVkIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfYnVmbG9hZGVkIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyBidWZfVCAqZ2V0X2J1Zl92YXIgX19BUkdTKChWQVIgYXZhcikpOworc3RhdGljIHZvaWQgZl9idWZuYW1lIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfYnVmbnIgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9idWZ3aW5uciBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2J5dGUybGluZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2NoYXIybnIgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9jaW5kZW50IF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfY29sIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfY29uZmlybSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2NzY29wZV9jb25uZWN0aW9uIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfY3Vyc29yIF9fQVJHUygoVkFSIGFyZ3N2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2RlbGV0ZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2RpZF9maWxldHlwZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2VzY2FwZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2V2ZW50aGFuZGxlciBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2V4ZWN1dGFibGUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9leGlzdHMgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9leHBhbmQgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9maWxlcmVhZGFibGUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9maWxld3JpdGFibGUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9mbmFtZW1vZGlmeSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2ZvbGRjbG9zZWQgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9mb2xkY2xvc2VkZW5kIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZvbGRjbG9zZWRfYm90aCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyLCBpbnQgZW5kKSk7CitzdGF0aWMgdm9pZCBmX2ZvbGRsZXZlbCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2ZvbGR0ZXh0IF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfZm9yZWdyb3VuZCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2dldGJ1ZnZhciBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2dldGNoYXIgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9nZXRjaGFybW9kIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfZ2V0Y21kbGluZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2dldGNtZHBvcyBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2dldGN3ZCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2dldGZzaXplIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfZ2V0ZnRpbWUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9nZXRsaW5lIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfZ2V0cmVnIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfZ2V0cmVndHlwZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2dldHdpbnBvc3ggX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9nZXR3aW5wb3N5IF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfZ2V0d2ludmFyIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfZ2xvYiBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2dsb2JwYXRoIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfaGFzIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfaGFzbWFwdG8gX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9oaXN0YWRkIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfaGlzdGRlbCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2hpc3RnZXQgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9oaXN0bnIgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9obGV4aXN0cyBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2hsSUQgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9ob3N0bmFtZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2ljb252IF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfaW5kZW50IF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfaXNkaXJlY3RvcnkgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9pbnB1dCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2lucHV0ZGlhbG9nIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfaW5wdXRyZXN0b3JlIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfaW5wdXRzYXZlIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfaW5wdXRzZWNyZXQgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9sYXN0X2J1ZmZlcl9uciBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2xpYmNhbGwgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9saWJjYWxsbnIgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgbGliY2FsbF9jb21tb24gX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhciwgaW50IHR5cGUpKTsKK3N0YXRpYyB2b2lkIGZfbGluZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2xpbmUyYnl0ZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX2xpc3BpbmRlbnQgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9sb2NhbHRpbWUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9tYXBhcmcgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9tYXBjaGVjayBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBnZXRfbWFwYXJnIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIsIGludCBleGFjdCkpOworc3RhdGljIHZvaWQgZl9tYXRjaCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX21hdGNoZW5kIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfbWF0Y2hzdHIgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9tb2RlIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfbmV4dG5vbmJsYW5rIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfbnIyY2hhciBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3ByZXZub25ibGFuayBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3NldGJ1ZnZhciBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3NldGNtZHBvcyBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3NldHdpbnZhciBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3JlbmFtZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3Jlc29sdmUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9zZWFyY2ggX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9zZWFyY2hwYWlyIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyBpbnQgZ2V0X3NlYXJjaF9hcmcgX19BUkdTKChWQVIgdmFycCwgaW50ICpmbGFnc3ApKTsKK3N0YXRpYyB2b2lkIGZfcmVtb3RlX2V4cHIgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9yZW1vdGVfZm9yZWdyb3VuZCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3JlbW90ZV9wZWVrIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfcmVtb3RlX3JlYWQgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9yZW1vdGVfc2VuZCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3NlcnZlcjJjbGllbnQgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9zZXJ2ZXJsaXN0IF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfc2V0bGluZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3NldHJlZyBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3NpbXBsaWZ5IF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZpbmRfc29tZV9tYXRjaCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyLCBpbnQgc3RhcnQpKTsKK3N0YXRpYyB2b2lkIGZfc3RyZnRpbWUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9zdHJpZHggX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9zdHJsZW4gX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9zdHJwYXJ0IF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfc3RycmlkeCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3N0cnRyYW5zIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfc3luSUQgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9zeW5JRGF0dHIgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9zeW5JRHRyYW5zIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfc3lzdGVtIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfc3VibWF0Y2ggX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9zdWJzdGl0dXRlIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfdGVtcG5hbWUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl90b2xvd2VyIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfdG91cHBlciBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3R5cGUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl92aXJ0Y29sIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfdmlzdWFsbW9kZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3dpbmJ1Zm5yIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfd2luY29sIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfd2luaGVpZ2h0IF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfd2lubGluZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3dpbm5yIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB2b2lkIGZfd2lucmVzdGNtZCBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgdm9pZCBmX3dpbndpZHRoIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKK3N0YXRpYyB3aW5fVCAqZmluZF93aW5fYnlfbnIgX19BUkdTKChWQVIgdnApKTsKK3N0YXRpYyBwb3NfVCAqdmFyMmZwb3MgX19BUkdTKChWQVIgdmFycCwgaW50IGxudW0pKTsKK3N0YXRpYyBpbnQgZ2V0X2Vudl9sZW4gX19BUkdTKChjaGFyX3UgKiphcmcpKTsKK3N0YXRpYyBpbnQgZ2V0X2lkX2xlbiBfX0FSR1MoKGNoYXJfdSAqKmFyZykpOworc3RhdGljIGludCBnZXRfZnVuY19sZW4gX19BUkdTKChjaGFyX3UgKiphcmcsIGNoYXJfdSAqKmFsaWFzLCBpbnQgZXZhbHVhdGUpKTsKK3N0YXRpYyBjaGFyX3UgKmZpbmRfbmFtZV9lbmQgX19BUkdTKChjaGFyX3UgKmFyZywgY2hhcl91ICoqZXhwcl9zdGFydCwgY2hhcl91ICoqZXhwcl9lbmQpKTsKK3N0YXRpYyBpbnQgZXZhbF9pc25hbWVjIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyBpbnQgZmluZF92aW1fdmFyIF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgbGVuKSk7CitzdGF0aWMgaW50IGdldF92YXJfdmFyIF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgbGVuLCBWQVIgcmV0dmFyKSk7CitzdGF0aWMgVkFSIGFsbG9jX3ZhciBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBWQVIgYWxsb2Nfc3RyaW5nX3ZhciBfX0FSR1MoKGNoYXJfdSAqc3RyaW5nKSk7CitzdGF0aWMgdm9pZCBmcmVlX3ZhciBfX0FSR1MoKFZBUiB2YXJwKSk7CitzdGF0aWMgdm9pZCBjbGVhcl92YXIgX19BUkdTKChWQVIgdmFycCkpOworc3RhdGljIGxvbmcgZ2V0X3Zhcl9udW1iZXIgX19BUkdTKChWQVIgdmFycCkpOworc3RhdGljIGxpbmVucl9UIGdldF92YXJfbG51bSBfX0FSR1MoKFZBUiBhcmd2YXJzKSk7CitzdGF0aWMgY2hhcl91ICpnZXRfdmFyX3N0cmluZyBfX0FSR1MoKFZBUiB2YXJwKSk7CitzdGF0aWMgY2hhcl91ICpnZXRfdmFyX3N0cmluZ19idWYgX19BUkdTKChWQVIgdmFycCwgY2hhcl91ICpidWYpKTsKK3N0YXRpYyBWQVIgZmluZF92YXIgX19BUkdTKChjaGFyX3UgKm5hbWUsIGludCB3cml0aW5nKSk7CitzdGF0aWMgVkFSIGZpbmRfdmFyX2luX2dhIF9fQVJHUygoZ2FycmF5X1QgKmdhcCwgY2hhcl91ICp2YXJuYW1lKSk7CitzdGF0aWMgZ2FycmF5X1QgKmZpbmRfdmFyX2dhIF9fQVJHUygoY2hhcl91ICpuYW1lLCBjaGFyX3UgKip2YXJuYW1lKSk7CitzdGF0aWMgdm9pZCB2YXJfZnJlZV9vbmUgX19BUkdTKChWQVIgdikpOworc3RhdGljIHZvaWQgbGlzdF9vbmVfdmFyIF9fQVJHUygoVkFSIHYsIGNoYXJfdSAqcHJlZml4KSk7CitzdGF0aWMgdm9pZCBsaXN0X3ZpbV92YXIgX19BUkdTKChpbnQgaSkpOworc3RhdGljIHZvaWQgbGlzdF9vbmVfdmFyX2EgX19BUkdTKChjaGFyX3UgKnByZWZpeCwgY2hhcl91ICpuYW1lLCBpbnQgdHlwZSwgY2hhcl91ICpzdHJpbmcpKTsKK3N0YXRpYyB2b2lkIHNldF92YXIgX19BUkdTKChjaGFyX3UgKm5hbWUsIFZBUiB2YXJwKSk7CitzdGF0aWMgdm9pZCBjb3B5X3ZhciBfX0FSR1MoKFZBUiBmcm9tLCBWQVIgdG8pKTsKK3N0YXRpYyBjaGFyX3UgKmZpbmRfb3B0aW9uX2VuZCBfX0FSR1MoKGNoYXJfdSAqKmFyZywgaW50ICpvcHRfZmxhZ3MpKTsKK3N0YXRpYyBjaGFyX3UgKnRyYW5zX2Z1bmN0aW9uX25hbWUgX19BUkdTKChjaGFyX3UgKipwcCwgaW50IHNraXAsIGludCBpbnRlcm5hbCkpOworc3RhdGljIGludCBldmFsX2ZuYW1lX3NjcmlwdCBfX0FSR1MoKGNoYXJfdSAqcCkpOworc3RhdGljIGludCBldmFsX2ZuYW1lX3NpZCBfX0FSR1MoKGNoYXJfdSAqcCkpOworc3RhdGljIHZvaWQgbGlzdF9mdW5jX2hlYWQgX19BUkdTKCh1ZnVuY19UICpmcCwgaW50IGluZGVudCkpOworc3RhdGljIHZvaWQgY2F0X2Z1bmNfbmFtZSBfX0FSR1MoKGNoYXJfdSAqYnVmLCB1ZnVuY19UICpmcCkpOworc3RhdGljIHVmdW5jX1QgKmZpbmRfZnVuYyBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworc3RhdGljIHZvaWQgY2FsbF91c2VyX2Z1bmMgX19BUkdTKCh1ZnVuY19UICpmcCwgaW50IGFyZ2NvdW50LCBWQVIgYXJndmFycywgVkFSIHJldHZhciwgbGluZW5yX1QgZmlyc3RsaW5lLCBsaW5lbnJfVCBsYXN0bGluZSkpOworCisvKiBNYWdpYyBicmFjZXMgYXJlIGFsd2F5cyBlbmFibGVkLCBvdGhlcndpc2UgVmltIHNjcmlwdHMgd291bGQgbm90IGJlCisgKiBwb3J0YWJsZS4gKi8KKyNkZWZpbmUgRkVBVF9NQUdJQ19CUkFDRVMKKworI2lmZGVmIEZFQVRfTUFHSUNfQlJBQ0VTCitzdGF0aWMgY2hhcl91ICogbWFrZV9leHBhbmRlZF9uYW1lIF9fQVJHUygoY2hhcl91ICppbl9zdGFydCwgIGNoYXJfdSAqZXhwcl9zdGFydCwgIGNoYXJfdSAqZXhwcl9lbmQsICBjaGFyX3UgKmluX2VuZCkpOworI2VuZGlmCisKKy8qCisgKiBTZXQgYW4gaW50ZXJuYWwgdmFyaWFibGUgdG8gYSBzdHJpbmcgdmFsdWUuIENyZWF0ZXMgdGhlIHZhcmlhYmxlIGlmIGl0IGRvZXMKKyAqIG5vdCBhbHJlYWR5IGV4aXN0LgorICovCisgICAgdm9pZAorc2V0X2ludGVybmFsX3N0cmluZ192YXIobmFtZSwgdmFsdWUpCisgICAgY2hhcl91CSpuYW1lOworICAgIGNoYXJfdQkqdmFsdWU7Cit7CisgICAgY2hhcl91ICAqdmFsOworICAgIFZBUgkgICAgdmFycDsKKworICAgIHZhbCA9IHZpbV9zdHJzYXZlKHZhbHVlKTsKKyAgICBpZiAodmFsICE9IE5VTEwpCisgICAgeworCXZhcnAgPSBhbGxvY19zdHJpbmdfdmFyKHZhbCk7CisJaWYgKHZhcnAgIT0gTlVMTCkKKwl7CisJICAgIHNldF92YXIobmFtZSwgdmFycCk7CisJICAgIGZyZWVfdmFyKHZhcnApOworCX0KKyAgICB9Cit9CisKKyMgaWYgZGVmaW5lZChGRUFUX01CWVRFKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIGludAorZXZhbF9jaGFyY29udmVydChlbmNfZnJvbSwgZW5jX3RvLCBmbmFtZV9mcm9tLCBmbmFtZV90bykKKyAgICBjaGFyX3UJKmVuY19mcm9tOworICAgIGNoYXJfdQkqZW5jX3RvOworICAgIGNoYXJfdQkqZm5hbWVfZnJvbTsKKyAgICBjaGFyX3UJKmZuYW1lX3RvOworeworICAgIGludAkJZXJyID0gRkFMU0U7CisKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfQ0NfRlJPTSwgZW5jX2Zyb20sIC0xKTsKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfQ0NfVE8sIGVuY190bywgLTEpOworICAgIHNldF92aW1fdmFyX3N0cmluZyhWVl9GTkFNRV9JTiwgZm5hbWVfZnJvbSwgLTEpOworICAgIHNldF92aW1fdmFyX3N0cmluZyhWVl9GTkFNRV9PVVQsIGZuYW1lX3RvLCAtMSk7CisgICAgaWYgKGV2YWxfdG9fYm9vbChwX2NjdiwgJmVyciwgTlVMTCwgRkFMU0UpKQorCWVyciA9IFRSVUU7CisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0NDX0ZST00sIE5VTEwsIC0xKTsKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfQ0NfVE8sIE5VTEwsIC0xKTsKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRk5BTUVfSU4sIE5VTEwsIC0xKTsKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRk5BTUVfT1VULCBOVUxMLCAtMSk7CisKKyAgICBpZiAoZXJyKQorCXJldHVybiBGQUlMOworICAgIHJldHVybiBPSzsKK30KKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkKEZFQVRfUE9TVFNDUklQVCkgfHwgZGVmaW5lZChQUk9UTykKKyAgICBpbnQKK2V2YWxfcHJpbnRleHByKGZuYW1lLCBhcmdzKQorICAgIGNoYXJfdQkqZm5hbWU7CisgICAgY2hhcl91CSphcmdzOworeworICAgIGludAkJZXJyID0gRkFMU0U7CisKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRk5BTUVfSU4sIGZuYW1lLCAtMSk7CisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0NNREFSRywgYXJncywgLTEpOworICAgIGlmIChldmFsX3RvX2Jvb2wocF9wZXhwciwgJmVyciwgTlVMTCwgRkFMU0UpKQorCWVyciA9IFRSVUU7CisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0ZOQU1FX0lOLCBOVUxMLCAtMSk7CisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0NNREFSRywgTlVMTCwgLTEpOworCisgICAgaWYgKGVycikKKyAgICB7CisJbWNoX3JlbW92ZShmbmFtZSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkKEZFQVRfRElGRikgfHwgZGVmaW5lZChQUk9UTykKKyAgICB2b2lkCitldmFsX2RpZmYob3JpZ2ZpbGUsIG5ld2ZpbGUsIG91dGZpbGUpCisgICAgY2hhcl91CSpvcmlnZmlsZTsKKyAgICBjaGFyX3UJKm5ld2ZpbGU7CisgICAgY2hhcl91CSpvdXRmaWxlOworeworICAgIGludAkJZXJyID0gRkFMU0U7CisKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRk5BTUVfSU4sIG9yaWdmaWxlLCAtMSk7CisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0ZOQU1FX05FVywgbmV3ZmlsZSwgLTEpOworICAgIHNldF92aW1fdmFyX3N0cmluZyhWVl9GTkFNRV9PVVQsIG91dGZpbGUsIC0xKTsKKyAgICAodm9pZClldmFsX3RvX2Jvb2wocF9kZXgsICZlcnIsIE5VTEwsIEZBTFNFKTsKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRk5BTUVfSU4sIE5VTEwsIC0xKTsKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRk5BTUVfTkVXLCBOVUxMLCAtMSk7CisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0ZOQU1FX09VVCwgTlVMTCwgLTEpOworfQorCisgICAgdm9pZAorZXZhbF9wYXRjaChvcmlnZmlsZSwgZGlmZmZpbGUsIG91dGZpbGUpCisgICAgY2hhcl91CSpvcmlnZmlsZTsKKyAgICBjaGFyX3UJKmRpZmZmaWxlOworICAgIGNoYXJfdQkqb3V0ZmlsZTsKK3sKKyAgICBpbnQJCWVycjsKKworICAgIHNldF92aW1fdmFyX3N0cmluZyhWVl9GTkFNRV9JTiwgb3JpZ2ZpbGUsIC0xKTsKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRk5BTUVfRElGRiwgZGlmZmZpbGUsIC0xKTsKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRk5BTUVfT1VULCBvdXRmaWxlLCAtMSk7CisgICAgKHZvaWQpZXZhbF90b19ib29sKHBfcGV4LCAmZXJyLCBOVUxMLCBGQUxTRSk7CisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0ZOQU1FX0lOLCBOVUxMLCAtMSk7CisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0ZOQU1FX0RJRkYsIE5VTEwsIC0xKTsKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRk5BTUVfT1VULCBOVUxMLCAtMSk7Cit9CisjIGVuZGlmCisKKy8qCisgKiBUb3AgbGV2ZWwgZXZhbHVhdGlvbiBmdW5jdGlvbiwgcmV0dXJuaW5nIGEgYm9vbGVhbi4KKyAqIFNldHMgImVycm9yIiB0byBUUlVFIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKyAqIFJldHVybiBUUlVFIG9yIEZBTFNFLgorICovCisgICAgaW50CitldmFsX3RvX2Jvb2woYXJnLCBlcnJvciwgbmV4dGNtZCwgc2tpcCkKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBpbnQJCSplcnJvcjsKKyAgICBjaGFyX3UJKipuZXh0Y21kOworICAgIGludAkJc2tpcDsJICAgIC8qIG9ubHkgcGFyc2UsIGRvbid0IGV4ZWN1dGUgKi8KK3sKKyAgICB2YXIJCXJldHZhcjsKKyAgICBpbnQJCXJldHZhbCA9IEZBTFNFOworCisgICAgaWYgKHNraXApCisJKytlbXNnX3NraXA7CisgICAgaWYgKGV2YWwwKGFyZywgJnJldHZhciwgbmV4dGNtZCwgIXNraXApID09IEZBSUwpCisgICAgeworCSplcnJvciA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJKmVycm9yID0gRkFMU0U7CisJaWYgKCFza2lwKQorCXsKKwkgICAgcmV0dmFsID0gKGdldF92YXJfbnVtYmVyKCZyZXR2YXIpICE9IDApOworCSAgICBjbGVhcl92YXIoJnJldHZhcik7CisJfQorICAgIH0KKyAgICBpZiAoc2tpcCkKKwktLWVtc2dfc2tpcDsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUb3AgbGV2ZWwgZXZhbHVhdGlvbiBmdW5jdGlvbiwgcmV0dXJuaW5nIGEgc3RyaW5nLiAgSWYgInNraXAiIGlzIFRSVUUsCisgKiBvbmx5IHBhcnNpbmcgdG8gIm5leHRjbWQiIGlzIGRvbmUsIHdpdGhvdXQgcmVwb3J0aW5nIGVycm9ycy4gIFJldHVybgorICogcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5LCBvciBOVUxMIGZvciBmYWlsdXJlIG9yIHdoZW4gInNraXAiIGlzIFRSVUUuCisgKi8KKyAgICBjaGFyX3UgKgorZXZhbF90b19zdHJpbmdfc2tpcChhcmcsIG5leHRjbWQsIHNraXApCisgICAgY2hhcl91CSphcmc7CisgICAgY2hhcl91CSoqbmV4dGNtZDsKKyAgICBpbnQJCXNraXA7CSAgICAvKiBvbmx5IHBhcnNlLCBkb24ndCBleGVjdXRlICovCit7CisgICAgdmFyCQlyZXR2YXI7CisgICAgY2hhcl91CSpyZXR2YWw7CisKKyAgICBpZiAoc2tpcCkKKwkrK2Vtc2dfc2tpcDsKKyAgICBpZiAoZXZhbDAoYXJnLCAmcmV0dmFyLCBuZXh0Y21kLCAhc2tpcCkgPT0gRkFJTCB8fCBza2lwKQorCXJldHZhbCA9IE5VTEw7CisgICAgZWxzZQorICAgIHsKKwlyZXR2YWwgPSB2aW1fc3Ryc2F2ZShnZXRfdmFyX3N0cmluZygmcmV0dmFyKSk7CisJY2xlYXJfdmFyKCZyZXR2YXIpOworICAgIH0KKyAgICBpZiAoc2tpcCkKKwktLWVtc2dfc2tpcDsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUb3AgbGV2ZWwgZXZhbHVhdGlvbiBmdW5jdGlvbiwgcmV0dXJuaW5nIGEgc3RyaW5nLgorICogUmV0dXJuIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSwgb3IgTlVMTCBmb3IgZmFpbHVyZS4KKyAqLworICAgIGNoYXJfdSAqCitldmFsX3RvX3N0cmluZyhhcmcsIG5leHRjbWQpCisgICAgY2hhcl91CSphcmc7CisgICAgY2hhcl91CSoqbmV4dGNtZDsKK3sKKyAgICB2YXIJCXJldHZhcjsKKyAgICBjaGFyX3UJKnJldHZhbDsKKworICAgIGlmIChldmFsMChhcmcsICZyZXR2YXIsIG5leHRjbWQsIFRSVUUpID09IEZBSUwpCisJcmV0dmFsID0gTlVMTDsKKyAgICBlbHNlCisgICAgeworCXJldHZhbCA9IHZpbV9zdHJzYXZlKGdldF92YXJfc3RyaW5nKCZyZXR2YXIpKTsKKwljbGVhcl92YXIoJnJldHZhcik7CisgICAgfQorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIENhbGwgZXZhbF90b19zdHJpbmcoKSB3aXRoICJzYW5kYm94IiBzZXQgYW5kIG5vdCB1c2luZyBsb2NhbCB2YXJpYWJsZXMuCisgKi8KKyAgICBjaGFyX3UgKgorZXZhbF90b19zdHJpbmdfc2FmZShhcmcsIG5leHRjbWQpCisgICAgY2hhcl91CSphcmc7CisgICAgY2hhcl91CSoqbmV4dGNtZDsKK3sKKyAgICBjaGFyX3UJKnJldHZhbDsKKyAgICB2b2lkCSpzYXZlX2Z1bmNjYWxwOworCisgICAgc2F2ZV9mdW5jY2FscCA9IHNhdmVfZnVuY2NhbCgpOworICAgICsrc2FuZGJveDsKKyAgICByZXR2YWwgPSBldmFsX3RvX3N0cmluZyhhcmcsIG5leHRjbWQpOworICAgIC0tc2FuZGJveDsKKyAgICByZXN0b3JlX2Z1bmNjYWwoc2F2ZV9mdW5jY2FscCk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworI2lmIDAgLyogbm90IHVzZWQgKi8KKy8qCisgKiBUb3AgbGV2ZWwgZXZhbHVhdGlvbiBmdW5jdGlvbiwgcmV0dXJuaW5nIGEgc3RyaW5nLgorICogQWR2YW5jZXMgImFyZyIgdG8gdGhlIGZpcnN0IG5vbi1ibGFuayBhZnRlciB0aGUgZXZhbHVhdGVkIGV4cHJlc3Npb24uCisgKiBSZXR1cm4gcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5LCBvciBOVUxMIGZvciBmYWlsdXJlLgorICogRG9lc24ndCBnaXZlIGVycm9yIG1lc3NhZ2VzLgorICovCisgICAgY2hhcl91ICoKK2V2YWxfYXJnX3RvX3N0cmluZyhhcmcpCisgICAgY2hhcl91CSoqYXJnOworeworICAgIHZhcgkJcmV0dmFyOworICAgIGNoYXJfdQkqcmV0dmFsOworICAgIGludAkJcmV0OworCisgICAgKytlbXNnX29mZjsKKworICAgIHJldCA9IGV2YWwxKGFyZywgJnJldHZhciwgVFJVRSk7CisgICAgaWYgKHJldCA9PSBGQUlMKQorCXJldHZhbCA9IE5VTEw7CisgICAgZWxzZQorICAgIHsKKwlyZXR2YWwgPSB2aW1fc3Ryc2F2ZShnZXRfdmFyX3N0cmluZygmcmV0dmFyKSk7CisJY2xlYXJfdmFyKCZyZXR2YXIpOworICAgIH0KKworICAgIC0tZW1zZ19vZmY7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorI2VuZGlmCisKKy8qCisgKiBUb3AgbGV2ZWwgZXZhbHVhdGlvbiBmdW5jdGlvbiwgcmV0dXJuaW5nIGEgbnVtYmVyLgorICogRXZhbHVhdGVzICJleHByIiBzaWxlbnRseS4KKyAqIFJldHVybnMgLTEgZm9yIGFuIGVycm9yLgorICovCisgICAgaW50CitldmFsX3RvX251bWJlcihleHByKQorICAgIGNoYXJfdQkqZXhwcjsKK3sKKyAgICB2YXIJCXJldHZhcjsKKyAgICBpbnQJCXJldHZhbDsKKyAgICBjaGFyX3UJKnAgPSBleHByOworCisgICAgKytlbXNnX29mZjsKKworICAgIGlmIChldmFsMSgmcCwgJnJldHZhciwgVFJVRSkgPT0gRkFJTCkKKwlyZXR2YWwgPSAtMTsKKyAgICBlbHNlCisgICAgeworCXJldHZhbCA9IGdldF92YXJfbnVtYmVyKCZyZXR2YXIpOworCWNsZWFyX3ZhcigmcmV0dmFyKTsKKyAgICB9CisgICAgLS1lbXNnX29mZjsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZiAoZGVmaW5lZChGRUFUX1VTUl9DTURTKSAmJiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ2FsbCBzb21lIHZpbUwgZnVuY3Rpb24gYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgc3RyaW5nCisgKiBVc2VzIGFyZ3ZbYXJnY10gZm9yIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMuCisgKi8KKyAgICBjaGFyX3UgKgorY2FsbF92aW1fZnVuY3Rpb24oZnVuYywgYXJnYywgYXJndiwgc2FmZSkKKyAgICBjaGFyX3UgICAgICAqZnVuYzsKKyAgICBpbnQJCWFyZ2M7CisgICAgY2hhcl91ICAgICAgKiphcmd2OworICAgIGludAkJc2FmZTsJCS8qIHVzZSB0aGUgc2FuZGJveCAqLworeworICAgIGNoYXJfdQkqcmV0dmFsID0gTlVMTDsKKyAgICB2YXIJCXJldHZhcjsKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgbG9uZwluOworICAgIGludAkJbGVuOworICAgIGludAkJaTsKKyAgICBpbnQJCWRvZXNyYW5nZTsKKyAgICB2b2lkCSpzYXZlX2Z1bmNjYWxwID0gTlVMTDsKKworICAgIGFyZ3ZhcnMgPSAoVkFSKWFsbG9jKCh1bnNpZ25lZCkoYXJnYyAqIHNpemVvZih2YXIpKSk7CisgICAgaWYgKGFyZ3ZhcnMgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisgICAgeworCS8qIFJlY29nbml6ZSBhIG51bWJlciBhcmd1bWVudCwgdGhlIG90aGVycyBtdXN0IGJlIHN0cmluZ3MuICovCisJdmltX3N0cjJucihhcmd2W2ldLCBOVUxMLCAmbGVuLCBUUlVFLCBUUlVFLCAmbiwgTlVMTCk7CisJaWYgKGxlbiAhPSAwICYmIGxlbiA9PSAoaW50KVNUUkxFTihhcmd2W2ldKSkKKwl7CisJICAgIGFyZ3ZhcnNbaV0udmFyX3R5cGUgPSBWQVJfTlVNQkVSOworCSAgICBhcmd2YXJzW2ldLnZhcl92YWwudmFyX251bWJlciA9IG47CisJfQorCWVsc2UKKwl7CisJICAgIGFyZ3ZhcnNbaV0udmFyX3R5cGUgPSBWQVJfU1RSSU5HOworCSAgICBhcmd2YXJzW2ldLnZhcl92YWwudmFyX3N0cmluZyA9IGFyZ3ZbaV07CisJfQorICAgIH0KKworICAgIGlmIChzYWZlKQorICAgIHsKKwlzYXZlX2Z1bmNjYWxwID0gc2F2ZV9mdW5jY2FsKCk7CisJKytzYW5kYm94OworICAgIH0KKworICAgIHJldHZhci52YXJfdHlwZSA9IFZBUl9VTktOT1dOOwkvKiBjbGVhcl92YXIoKSB1c2VzIHRoaXMgKi8KKyAgICBpZiAoY2FsbF9mdW5jKGZ1bmMsIChpbnQpU1RSTEVOKGZ1bmMpLCAmcmV0dmFyLCBhcmdjLCBhcmd2YXJzLAorCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtLCBjdXJ3aW4tPndfY3Vyc29yLmxudW0sCisJCSAgICAmZG9lc3JhbmdlLCBUUlVFKSA9PSBPSykKKwlyZXR2YWwgPSB2aW1fc3Ryc2F2ZShnZXRfdmFyX3N0cmluZygmcmV0dmFyKSk7CisKKyAgICBjbGVhcl92YXIoJnJldHZhcik7CisgICAgdmltX2ZyZWUoYXJndmFycyk7CisKKyAgICBpZiAoc2FmZSkKKyAgICB7CisJLS1zYW5kYm94OworCXJlc3RvcmVfZnVuY2NhbChzYXZlX2Z1bmNjYWxwKTsKKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKyNlbmRpZgorCisvKgorICogU2F2ZSB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsIHBvaW50ZXIsIGFuZCBzZXQgaXQgdG8gTlVMTC4KKyAqIFVzZWQgd2hlbiBleGVjdXRpbmcgYXV0b2NvbW1hbmRzIGFuZCBmb3IgIjpzb3VyY2UiLgorICovCisgICAgdm9pZCAqCitzYXZlX2Z1bmNjYWwoKQoreworICAgIHN0cnVjdCBmdW5jY2FsbCAqZmM7CisKKyAgICBmYyA9IGN1cnJlbnRfZnVuY2NhbDsKKyAgICBjdXJyZW50X2Z1bmNjYWwgPSBOVUxMOworICAgIHJldHVybiAodm9pZCAqKWZjOworfQorCisgICAgdm9pZAorcmVzdG9yZV9mdW5jY2FsKGZjKQorICAgIHZvaWQgKmZjOworeworICAgIGN1cnJlbnRfZnVuY2NhbCA9IChzdHJ1Y3QgZnVuY2NhbGwgKilmYzsKK30KKworI2lmZGVmIEZFQVRfRk9MRElORworLyoKKyAqIEV2YWx1YXRlICdmb2xkZXhwcicuICBSZXR1cm5zIHRoZSBmb2xkbGV2ZWwsIGFuZCBhbnkgY2hhcmFjdGVyIHByZWNlZGluZworICogaXQgaW4gIipjcCIuICBEb2Vzbid0IGdpdmUgZXJyb3IgbWVzc2FnZXMuCisgKi8KKyAgICBpbnQKK2V2YWxfZm9sZGV4cHIoYXJnLCBjcCkKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBpbnQJCSpjcDsKK3sKKyAgICB2YXIJCXJldHZhcjsKKyAgICBpbnQJCXJldHZhbDsKKyAgICBjaGFyX3UJKnM7CisKKyAgICArK2Vtc2dfb2ZmOworICAgICsrc2FuZGJveDsKKyAgICAqY3AgPSBOVUw7CisgICAgaWYgKGV2YWwwKGFyZywgJnJldHZhciwgTlVMTCwgVFJVRSkgPT0gRkFJTCkKKwlyZXR2YWwgPSAwOworICAgIGVsc2UKKyAgICB7CisJLyogSWYgdGhlIHJlc3VsdCBpcyBhIG51bWJlciwganVzdCByZXR1cm4gdGhlIG51bWJlci4gKi8KKwlpZiAocmV0dmFyLnZhcl90eXBlID09IFZBUl9OVU1CRVIpCisJICAgIHJldHZhbCA9IHJldHZhci52YXJfdmFsLnZhcl9udW1iZXI7CisJZWxzZSBpZiAocmV0dmFyLnZhcl90eXBlID09IFZBUl9VTktOT1dOCisJCXx8IHJldHZhci52YXJfdmFsLnZhcl9zdHJpbmcgPT0gTlVMTCkKKwkgICAgcmV0dmFsID0gMDsKKwllbHNlCisJeworCSAgICAvKiBJZiB0aGUgcmVzdWx0IGlzIGEgc3RyaW5nLCBjaGVjayBpZiB0aGVyZSBpcyBhIG5vbi1kaWdpdCBiZWZvcmUKKwkgICAgICogdGhlIG51bWJlci4gKi8KKwkgICAgcyA9IHJldHZhci52YXJfdmFsLnZhcl9zdHJpbmc7CisJICAgIGlmICghVklNX0lTRElHSVQoKnMpICYmICpzICE9ICctJykKKwkJKmNwID0gKnMrKzsKKwkgICAgcmV0dmFsID0gYXRvbCgoY2hhciAqKXMpOworCX0KKwljbGVhcl92YXIoJnJldHZhcik7CisgICAgfQorICAgIC0tZW1zZ19vZmY7CisgICAgLS1zYW5kYm94OworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NQUdJQ19CUkFDRVMKKy8qCisgKiBFeHBhbmRzIG91dCB0aGUgJ21hZ2ljJyB7fSdzIGluIGEgdmFyaWFibGUvZnVuY3Rpb24gbmFtZS4KKyAqIE5vdGUgdGhhdCB0aGlzIGNhbiBjYWxsIGl0c2VsZiByZWN1cnNpdmVseSwgdG8gZGVhbCB3aXRoCisgKiBjb25zdHJ1Y3RzIGxpa2UgZm9ve2Jhcn17YmF6fXtiYW19CisgKiBUaGUgZm91ciBwb2ludGVyIGFyZ3VtZW50cyBwb2ludCB0byAiZm9ve2V4cHJlfXNze2lvbn1iYXIiCisgKgkJCSJpbl9zdGFydCIgICAgICBeCisgKgkJCSJleHByX3N0YXJ0IgkgICBeCisgKgkJCSJleHByX2VuZCIJCSBeCisgKgkJCSJpbl9lbmQiCQkJICAgIF4KKyAqCisgKiBSZXR1cm5zIGEgbmV3IGFsbG9jYXRlZCBzdHJpbmcsIHdoaWNoIHRoZSBjYWxsZXIgbXVzdCBmcmVlLgorICogUmV0dXJucyBOVUxMIGZvciBmYWlsdXJlLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCittYWtlX2V4cGFuZGVkX25hbWUoaW5fc3RhcnQsIGV4cHJfc3RhcnQsIGV4cHJfZW5kLCBpbl9lbmQpCisgICAgY2hhcl91CSppbl9zdGFydDsKKyAgICBjaGFyX3UJKmV4cHJfc3RhcnQ7CisgICAgY2hhcl91CSpleHByX2VuZDsKKyAgICBjaGFyX3UJKmluX2VuZDsKK3sKKyAgICBjaGFyX3UJYzE7CisgICAgY2hhcl91CSpyZXR2YWwgPSBOVUxMOworICAgIGNoYXJfdQkqdGVtcF9yZXN1bHQ7CisgICAgY2hhcl91CSpuZXh0Y21kID0gTlVMTDsKKworICAgIGlmIChleHByX2VuZCA9PSBOVUxMIHx8IGluX2VuZCA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgICpleHByX3N0YXJ0CT0gTlVMOworICAgICpleHByX2VuZCA9IE5VTDsKKyAgICBjMSA9ICppbl9lbmQ7CisgICAgKmluX2VuZCA9IE5VTDsKKworICAgIHRlbXBfcmVzdWx0ID0gZXZhbF90b19zdHJpbmcoZXhwcl9zdGFydCArIDEsICZuZXh0Y21kKTsKKyAgICBpZiAodGVtcF9yZXN1bHQgIT0gTlVMTCAmJiBuZXh0Y21kID09IE5VTEwpCisgICAgeworCXJldHZhbCA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKHRlbXBfcmVzdWx0KSArIChleHByX3N0YXJ0IC0gaW5fc3RhcnQpCisJCQkJCQkgICArIChpbl9lbmQgLSBleHByX2VuZCkgKyAxKSk7CisKKwlpZiAocmV0dmFsICE9IE5VTEwpCisJeworCSAgICBTVFJDUFkocmV0dmFsLCBpbl9zdGFydCk7CisJICAgIFNUUkNBVChyZXR2YWwsIHRlbXBfcmVzdWx0KTsKKwkgICAgU1RSQ0FUKHJldHZhbCwgZXhwcl9lbmQgKyAxKTsKKwl9CisgICAgfQorICAgIHZpbV9mcmVlKHRlbXBfcmVzdWx0KTsKKworICAgICppbl9lbmQgPSBjMTsJCS8qIHB1dCBjaGFyIGJhY2sgZm9yIGVycm9yIG1lc3NhZ2VzICovCisgICAgKmV4cHJfc3RhcnQgPSAneyc7CisgICAgKmV4cHJfZW5kID0gJ30nOworCisgICAgaWYgKHJldHZhbCAhPSBOVUxMKQorICAgIHsKKwl0ZW1wX3Jlc3VsdCA9IGZpbmRfbmFtZV9lbmQocmV0dmFsLCAmZXhwcl9zdGFydCwgJmV4cHJfZW5kKTsKKwlpZiAoZXhwcl9zdGFydCAhPSBOVUxMKQorCXsKKwkgICAgLyogRnVydGhlciBleHBhbnNpb24hICovCisJICAgIHRlbXBfcmVzdWx0ID0gbWFrZV9leHBhbmRlZF9uYW1lKHJldHZhbCwgZXhwcl9zdGFydCwKKwkJCQkJCSAgICAgICBleHByX2VuZCwgdGVtcF9yZXN1bHQpOworCSAgICB2aW1fZnJlZShyZXR2YWwpOworCSAgICByZXR2YWwgPSB0ZW1wX3Jlc3VsdDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIHJldHZhbDsKKworfQorI2VuZGlmIC8qIEZFQVRfTUFHSUNfQlJBQ0VTICovCisKKy8qCisgKiAiOmxldCB2YXIgPSBleHByIglhc3NpZ25tZW50IGNvbW1hbmQuCisgKiAiOmxldCB2YXIiCQlsaXN0IG9uZSB2YXJpYWJsZSB2YWx1ZQorICogIjpsZXQiCQlsaXN0IGFsbCB2YXJpYWJsZSB2YWx1ZXMKKyAqLworICAgIHZvaWQKK2V4X2xldChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGNoYXJfdQkqYXJnID0gZWFwLT5hcmc7CisgICAgY2hhcl91CSpleHByOworICAgIGNoYXJfdQkqbmFtZTsKKyAgICBWQVIJCXZhcnA7CisgICAgdmFyCQlyZXR2YXI7CisgICAgY2hhcl91CSpwOworICAgIGludAkJYzEgPSAwLCBjMjsKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpleHByX3N0YXJ0OworICAgIGNoYXJfdQkqZXhwcl9lbmQ7CisgICAgY2hhcl91CSpuYW1lX2VuZDsKKworICAgIG5hbWVfZW5kID0gZmluZF9uYW1lX2VuZChhcmcsICZleHByX3N0YXJ0LCAmZXhwcl9lbmQpOworICAgIGV4cHIgPSB2aW1fc3RyY2hyKG5hbWVfZW5kLCAnPScpOworICAgIGlmIChleHByID09IE5VTEwpCisgICAgeworCWlmIChlbmRzX2V4Y21kKCphcmcpKQorCXsKKwkgICAgaWYgKCFlYXAtPnNraXApCisJICAgIHsKKwkJLyoKKwkJICogTGlzdCBhbGwgdmFyaWFibGVzLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHZhcmlhYmxlcy5nYV9sZW4gJiYgIWdvdF9pbnQ7ICsraSkKKwkJICAgIGlmIChWQVJfRU5UUlkoaSkudmFyX25hbWUgIT0gTlVMTCkKKwkJCWxpc3Rfb25lX3ZhcigmVkFSX0VOVFJZKGkpLCAoY2hhcl91ICopIiIpOworCQlmb3IgKGkgPSAwOyBpIDwgY3VyYnVmLT5iX3ZhcnMuZ2FfbGVuICYmICFnb3RfaW50OyArK2kpCisJCSAgICBpZiAoQlZBUl9FTlRSWShpKS52YXJfbmFtZSAhPSBOVUxMKQorCQkJbGlzdF9vbmVfdmFyKCZCVkFSX0VOVFJZKGkpLCAoY2hhcl91ICopImI6Iik7CisJCWZvciAoaSA9IDA7IGkgPCBjdXJ3aW4tPndfdmFycy5nYV9sZW4gJiYgIWdvdF9pbnQ7ICsraSkKKwkJICAgIGlmIChXVkFSX0VOVFJZKGkpLnZhcl9uYW1lICE9IE5VTEwpCisJCQlsaXN0X29uZV92YXIoJldWQVJfRU5UUlkoaSksIChjaGFyX3UgKikidzoiKTsKKwkJZm9yIChpID0gMDsgaSA8IFZWX0xFTiAmJiAhZ290X2ludDsgKytpKQorCQkgICAgaWYgKHZpbXZhcnNbaV0udHlwZSA9PSBWQVJfTlVNQkVSIHx8IHZpbXZhcnNbaV0udmFsICE9IE5VTEwpCisJCQlsaXN0X3ZpbV92YXIoaSk7CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgaW50CQllcnJvciA9IEZBTFNFOworCisJICAgIC8qCisJICAgICAqIExpc3QgdmFyaWFibGVzLgorCSAgICAgKi8KKwkgICAgd2hpbGUgKCFlbmRzX2V4Y21kKCphcmcpICYmICFnb3RfaW50KQorCSAgICB7CisJCWNoYXJfdQkqdGVtcF9zdHJpbmcgPSBOVUxMOworCQlpbnQJYXJnX2xlbjsKKworCQkvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIG5hbWUuICovCisJCW5hbWVfZW5kID0gZmluZF9uYW1lX2VuZChhcmcsICZleHByX3N0YXJ0LCAmZXhwcl9lbmQpOworCisJCWlmICghdmltX2lzd2hpdGUoKm5hbWVfZW5kKSAmJiAhZW5kc19leGNtZCgqbmFtZV9lbmQpKQorCQl7CisJCSAgICBlbXNnX3NldmVyZSA9IFRSVUU7CisJCSAgICBFTVNHKF8oZV90cmFpbGluZykpOworCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKCFlcnJvciAmJiAhZWFwLT5za2lwKQorCQl7CisjaWZkZWYgRkVBVF9NQUdJQ19CUkFDRVMKKwkJICAgIGlmIChleHByX3N0YXJ0ICE9IE5VTEwpCisJCSAgICB7CisJCQl0ZW1wX3N0cmluZyA9IG1ha2VfZXhwYW5kZWRfbmFtZShhcmcsIGV4cHJfc3RhcnQsCisJCQkJCQkJIGV4cHJfZW5kLCBuYW1lX2VuZCk7CisJCQlpZiAodGVtcF9zdHJpbmcgPT0gTlVMTCkKKwkJCXsKKwkJCSAgICAvKgorCQkJICAgICAqIFJlcG9ydCBhbiBpbnZhbGlkIGV4cHJlc3Npb24gaW4gYnJhY2VzLCB1bmxlc3MKKwkJCSAgICAgKiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGhhcyBiZWVuIGNhbmNlbGxlZCBkdWUKKwkJCSAgICAgKiB0byBhbiBhYm9ydGluZyBlcnJvciwgYW4gaW50ZXJydXB0LCBvciBhbgorCQkJICAgICAqIGV4Y2VwdGlvbi4KKwkJCSAgICAgKi8KKwkJCSAgICBpZiAoIWFib3J0aW5nKCkpCisJCQkgICAgeworCQkJCWVtc2dfc2V2ZXJlID0gVFJVRTsKKwkJCQlFTVNHMihfKGVfaW52YXJnMiksIGFyZyk7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJICAgIGVycm9yID0gVFJVRTsKKwkJCSAgICBhcmcgPSBza2lwd2hpdGUobmFtZV9lbmQpOworCQkJICAgIGNvbnRpbnVlOworCQkJfQorCQkJYXJnID0gdGVtcF9zdHJpbmc7CisJCQlhcmdfbGVuID0gU1RSTEVOKHRlbXBfc3RyaW5nKTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKyNlbmRpZgorCQkgICAgeworCQkJYzEgPSAqbmFtZV9lbmQ7CisJCQkqbmFtZV9lbmQgPSBOVUw7CisJCQlhcmdfbGVuID0gKGludCkobmFtZV9lbmQgLSBhcmcpOworCQkgICAgfQorCQkgICAgaSA9IGZpbmRfdmltX3ZhcihhcmcsIGFyZ19sZW4pOworCQkgICAgaWYgKGkgPj0gMCkKKwkJCWxpc3RfdmltX3ZhcihpKTsKKwkJICAgIGVsc2UgaWYgKFNUUkNNUCgiYjpjaGFuZ2VkdGljayIsIGFyZykgPT0gMCkKKwkJICAgIHsKKwkJCWNoYXJfdQludW1idWZbTlVNQlVGTEVOXTsKKworCQkJc3ByaW50ZigoY2hhciAqKW51bWJ1ZiwgIiVsZCIsCisJCQkJCQkgKGxvbmcpY3VyYnVmLT5iX2NoYW5nZWR0aWNrKTsKKwkJCWxpc3Rfb25lX3Zhcl9hKChjaGFyX3UgKikiYjoiLCAoY2hhcl91ICopImNoYW5nZWR0aWNrIiwKKwkJCQkJCQkgIFZBUl9OVU1CRVIsIG51bWJ1Zik7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQl2YXJwID0gZmluZF92YXIoYXJnLCBGQUxTRSk7CisJCQlpZiAodmFycCA9PSBOVUxMKQorCQkJeworCQkJICAgIC8qIFNraXAgZnVydGhlciBhcmd1bWVudHMgYnV0IGRvIGNvbnRpbnVlIHRvCisJCQkgICAgICogc2VhcmNoIGZvciBhIHRyYWlsaW5nIGNvbW1hbmQuICovCisJCQkgICAgRU1TRzIoXygiRTEwNjogVW5rbm93biB2YXJpYWJsZTogXCIlc1wiIiksIGFyZyk7CisJCQkgICAgZXJyb3IgPSBUUlVFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJICAgIG5hbWUgPSB2aW1fc3RyY2hyKGFyZywgJzonKTsKKwkJCSAgICBpZiAobmFtZSAhPSBOVUxMKQorCQkJICAgIHsKKwkJCQkvKiAiYToiIHZhcnMgaGF2ZSBubyBuYW1lIHN0b3JlZCwgdXNlIHdob2xlCisJCQkJICogYXJnICovCisJCQkJaWYgKGFyZ1swXSA9PSAnYScgJiYgYXJnWzFdID09ICc6JykKKwkJCQkgICAgYzIgPSBOVUw7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkgICAgYzIgPSAqKytuYW1lOworCQkJCSAgICAqbmFtZSA9IE5VTDsKKwkJCQl9CisJCQkJbGlzdF9vbmVfdmFyKHZhcnAsIGFyZyk7CisJCQkJaWYgKGMyICE9IE5VTCkKKwkJCQkgICAgKm5hbWUgPSBjMjsKKwkJCSAgICB9CisJCQkgICAgZWxzZQorCQkJCWxpc3Rfb25lX3Zhcih2YXJwLCAoY2hhcl91ICopIiIpOworCQkJfQorCQkgICAgfQorI2lmZGVmIEZFQVRfTUFHSUNfQlJBQ0VTCisJCSAgICBpZiAoZXhwcl9zdGFydCAhPSBOVUxMKQorCQkJdmltX2ZyZWUodGVtcF9zdHJpbmcpOworCQkgICAgZWxzZQorI2VuZGlmCisJCQkqbmFtZV9lbmQgPSBjMTsKKwkJfQorCQlhcmcgPSBza2lwd2hpdGUobmFtZV9lbmQpOworCSAgICB9CisJfQorCWVhcC0+bmV4dGNtZCA9IGNoZWNrX25leHRjbWQoYXJnKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoZWFwLT5za2lwKQorCSAgICArK2Vtc2dfc2tpcDsKKwlpID0gZXZhbDAoZXhwciArIDEsICZyZXR2YXIsICZlYXAtPm5leHRjbWQsICFlYXAtPnNraXApOworCWlmIChlYXAtPnNraXApCisJeworCSAgICBpZiAoaSAhPSBGQUlMKQorCQljbGVhcl92YXIoJnJldHZhcik7CisJICAgIC0tZW1zZ19za2lwOworCX0KKwllbHNlIGlmIChpICE9IEZBSUwpCisJeworCSAgICAvKgorCSAgICAgKiAiOmxldCAkVkFSID0gZXhwciI6IFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwkgICAgICovCisJICAgIGlmICgqYXJnID09ICckJykKKwkgICAgeworCQlpbnQJbGVuOworCQlpbnQJY2M7CisKKwkJLyogRmluZCB0aGUgZW5kIG9mIHRoZSBuYW1lLiAqLworCQkrK2FyZzsKKwkJbmFtZSA9IGFyZzsKKwkJbGVuID0gZ2V0X2Vudl9sZW4oJmFyZyk7CisJCWlmIChsZW4gPT0gMCkKKwkJICAgIEVNU0cyKF8oZV9pbnZhcmcyKSwgbmFtZSAtIDEpOworCQllbHNlCisJCXsKKwkJICAgIGlmICgqc2tpcHdoaXRlKGFyZykgIT0gJz0nKQorCQkJRU1TRyhfKGVfbGV0dW5leHApKTsKKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWNjID0gbmFtZVtsZW5dOworCQkJbmFtZVtsZW5dID0gTlVMOworCQkJcCA9IGdldF92YXJfc3RyaW5nKCZyZXR2YXIpOworCQkJdmltX3NldGVudihuYW1lLCBwKTsKKwkJCWlmIChTVFJJQ01QKG5hbWUsICJIT01FIikgPT0gMCkKKwkJCSAgICBpbml0X2hvbWVkaXIoKTsKKwkJCWVsc2UgaWYgKGRpZHNldF92aW0gJiYgU1RSSUNNUChuYW1lLCAiVklNIikgPT0gMCkKKwkJCSAgICBkaWRzZXRfdmltID0gRkFMU0U7CisJCQllbHNlIGlmIChkaWRzZXRfdmltcnVudGltZQorCQkJCQkgICYmIFNUUklDTVAobmFtZSwgIlZJTVJVTlRJTUUiKSA9PSAwKQorCQkJICAgIGRpZHNldF92aW1ydW50aW1lID0gRkFMU0U7CisJCQluYW1lW2xlbl0gPSBjYzsKKwkJICAgIH0KKwkJfQorCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogIjpsZXQgJm9wdGlvbiA9IGV4cHIiOiBTZXQgb3B0aW9uIHZhbHVlLgorCSAgICAgKiAiOmxldCAmbDpvcHRpb24gPSBleHByIjogU2V0IGxvY2FsIG9wdGlvbiB2YWx1ZS4KKwkgICAgICogIjpsZXQgJmc6b3B0aW9uID0gZXhwciI6IFNldCBnbG9iYWwgb3B0aW9uIHZhbHVlLgorCSAgICAgKi8KKwkgICAgZWxzZSBpZiAoKmFyZyA9PSAnJicpCisJICAgIHsKKwkJaW50IG9wdF9mbGFnczsKKworCQkvKgorCQkgKiBGaW5kIHRoZSBlbmQgb2YgdGhlIG5hbWU7CisJCSAqLworCQlwID0gZmluZF9vcHRpb25fZW5kKCZhcmcsICZvcHRfZmxhZ3MpOworCQlpZiAocCA9PSBOVUxMIHx8ICpza2lwd2hpdGUocCkgIT0gJz0nKQorCQkgICAgRU1TRyhfKGVfbGV0dW5leHApKTsKKwkJZWxzZQorCQl7CisJCSAgICBjMSA9ICpwOworCQkgICAgKnAgPSBOVUw7CisJCSAgICBzZXRfb3B0aW9uX3ZhbHVlKGFyZywgZ2V0X3Zhcl9udW1iZXIoJnJldHZhciksCisJCQkJCSAgZ2V0X3Zhcl9zdHJpbmcoJnJldHZhciksIG9wdF9mbGFncyk7CisJCSAgICAqcCA9IGMxOwkJICAgIC8qIHB1dCBiYWNrIGZvciBlcnJvciBtZXNzYWdlcyAqLworCQl9CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiAiOmxldCBAciA9IGV4cHIiOiBTZXQgcmVnaXN0ZXIgY29udGVudHMuCisJICAgICAqLworCSAgICBlbHNlIGlmICgqYXJnID09ICdAJykKKwkgICAgeworCQkrK2FyZzsKKwkJaWYgKCpza2lwd2hpdGUoYXJnICsgMSkgIT0gJz0nKQorCQkgICAgRU1TRyhfKGVfbGV0dW5leHApKTsKKwkJZWxzZQorCQkgICAgd3JpdGVfcmVnX2NvbnRlbnRzKCphcmcgPT0gJ0AnID8gJyInIDogKmFyZywKKwkJCQkJICBnZXRfdmFyX3N0cmluZygmcmV0dmFyKSwgLTEsIEZBTFNFKTsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqICI6bGV0IHZhciA9IGV4cHIiOiBTZXQgaW50ZXJuYWwgdmFyaWFibGUuCisJICAgICAqLworCSAgICBlbHNlIGlmIChldmFsX2lzbmFtZWMoKmFyZykgJiYgIVZJTV9JU0RJR0lUKCphcmcpKQorCSAgICB7CisJCS8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgbmFtZS4gKi8KKwkJcCA9IGZpbmRfbmFtZV9lbmQoYXJnLCAmZXhwcl9zdGFydCwgJmV4cHJfZW5kKTsKKworCQlpZiAoKnNraXB3aGl0ZShwKSAhPSAnPScpCisJCSAgICBFTVNHKF8oZV9sZXR1bmV4cCkpOworCQllbHNlIGlmIChwIC0gYXJnID09IDEzCisJCQkJICAgICYmIFNUUk5DTVAoYXJnLCAiYjpjaGFuZ2VkdGljayIsIDEzKSA9PSAwKQorCQkgICAgRU1TRzIoXyhlX3JlYWRvbmx5dmFyKSwgYXJnKTsKKyNpZmRlZiBGRUFUX01BR0lDX0JSQUNFUworCQllbHNlIGlmIChleHByX3N0YXJ0ICE9IE5VTEwpCisJCXsKKwkJICAgIGNoYXJfdSAgKnRlbXBfc3RyaW5nOworCisJCSAgICB0ZW1wX3N0cmluZyA9IG1ha2VfZXhwYW5kZWRfbmFtZShhcmcsIGV4cHJfc3RhcnQsCisJCQkJCQkJCSBleHByX2VuZCwgcCk7CisJCSAgICBpZiAodGVtcF9zdHJpbmcgPT0gTlVMTCkKKwkJICAgIHsKKwkJCS8qCisJCQkgKiBSZXBvcnQgYW4gaW52YWxpZCBleHByZXNzaW9uIGluIGJyYWNlcywgdW5sZXNzIHRoZQorCQkJICogZXhwcmVzc2lvbiBldmFsdWF0aW9uIGhhcyBiZWVuIGNhbmNlbGxlZCBkdWUgdG8gYW4KKwkJCSAqIGFib3J0aW5nIGVycm9yLCBhbiBpbnRlcnJ1cHQsIG9yIGFuIGV4Y2VwdGlvbi4KKwkJCSAqLworCQkJaWYgKCFhYm9ydGluZygpKQorCQkJICAgIEVNU0cyKF8oZV9pbnZhcmcyKSwgYXJnKTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCXNldF92YXIodGVtcF9zdHJpbmcsICZyZXR2YXIpOworCQkJdmltX2ZyZWUodGVtcF9zdHJpbmcpOworCQkgICAgfQorCQl9CisjZW5kaWYKKwkJZWxzZQorCQl7CisJCSAgICBjMSA9ICpwOworCQkgICAgKnAgPSBOVUw7CisJCSAgICBzZXRfdmFyKGFyZywgJnJldHZhcik7CisJCSAgICAqcCA9IGMxOwkJLyogcHV0IGNoYXIgYmFjayBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKwkJfQorCSAgICB9CisKKwkgICAgZWxzZQorCSAgICB7CisJCUVNU0cyKF8oZV9pbnZhcmcyKSwgYXJnKTsKKwkgICAgfQorCisJICAgIGNsZWFyX3ZhcigmcmV0dmFyKTsKKwl9CisgICAgfQorfQorCisjaWYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpIHx8IGRlZmluZWQoUFJPVE8pCisKKyAgICB2b2lkCitzZXRfY29udGV4dF9mb3JfZXhwcmVzc2lvbih4cCwgYXJnLCBjbWRpZHgpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGNoYXJfdQkqYXJnOworICAgIGNtZGlkeF9UCWNtZGlkeDsKK3sKKyAgICBpbnQJCWdvdF9lcSA9IEZBTFNFOworICAgIGludAkJYzsKKworICAgIHhwLT54cF9jb250ZXh0ID0gY21kaWR4ID09IENNRF9sZXQgPyBFWFBBTkRfVVNFUl9WQVJTCisJCQkJICAgICAgIDogY21kaWR4ID09IENNRF9jYWxsID8gRVhQQU5EX0ZVTkNUSU9OUworCQkJCSAgICAgICA6IEVYUEFORF9FWFBSRVNTSU9OOworICAgIHdoaWxlICgoeHAtPnhwX3BhdHRlcm4gPSB2aW1fc3RycGJyayhhcmcsCisJCQkJICAoY2hhcl91ICopIlwiJystKi8lLj0hP358JiQoWzw+LCMiKSkgIT0gTlVMTCkKKyAgICB7CisJYyA9ICp4cC0+eHBfcGF0dGVybjsKKwlpZiAoYyA9PSAnJicpCisJeworCSAgICBjID0geHAtPnhwX3BhdHRlcm5bMV07CisJICAgIGlmIChjID09ICcmJykKKwkgICAgeworCQkrK3hwLT54cF9wYXR0ZXJuOworCQl4cC0+eHBfY29udGV4dCA9IGNtZGlkeCAhPSBDTURfbGV0IHx8IGdvdF9lcQorCQkJCQkgPyBFWFBBTkRfRVhQUkVTU0lPTiA6IEVYUEFORF9OT1RISU5HOworCSAgICB9CisJICAgIGVsc2UgaWYgKGMgIT0gJyAnKQorCQl4cC0+eHBfY29udGV4dCA9IEVYUEFORF9TRVRUSU5HUzsKKwl9CisJZWxzZSBpZiAoYyA9PSAnJCcpCisJeworCSAgICAvKiBlbnZpcm9ubWVudCB2YXJpYWJsZSAqLworCSAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9FTlZfVkFSUzsKKwl9CisJZWxzZSBpZiAoYyA9PSAnPScpCisJeworCSAgICBnb3RfZXEgPSBUUlVFOworCSAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9FWFBSRVNTSU9OOworCX0KKwllbHNlIGlmIChjID09ICc8JworCQkmJiB4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfRlVOQ1RJT05TCisJCSYmIHZpbV9zdHJjaHIoeHAtPnhwX3BhdHRlcm4sICcoJykgPT0gTlVMTCkKKwl7CisJICAgIC8qIEZ1bmN0aW9uIG5hbWUgY2FuIHN0YXJ0IHdpdGggIjxTTlI+IiAqLworCSAgICBicmVhazsKKwl9CisJZWxzZSBpZiAoY21kaWR4ICE9IENNRF9sZXQgfHwgZ290X2VxKQorCXsKKwkgICAgaWYgKGMgPT0gJyInKQkgICAgLyogc3RyaW5nICovCisJICAgIHsKKwkJd2hpbGUgKChjID0gKisreHAtPnhwX3BhdHRlcm4pICE9IE5VTCAmJiBjICE9ICciJykKKwkJICAgIGlmIChjID09ICdcXCcgJiYgeHAtPnhwX3BhdHRlcm5bMV0gIT0gTlVMKQorCQkJKyt4cC0+eHBfcGF0dGVybjsKKwkJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKwkgICAgfQorCSAgICBlbHNlIGlmIChjID09ICdcJycpCSAgICAvKiBsaXRlcmFsIHN0cmluZyAqLworCSAgICB7CisJCXdoaWxlICgoYyA9ICorK3hwLT54cF9wYXR0ZXJuKSAhPSBOVUwgJiYgYyAhPSAnXCcnKQorCQkgICAgLyogc2tpcCAqLyA7CisJCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoYyA9PSAnfCcpCisJICAgIHsKKwkJaWYgKHhwLT54cF9wYXR0ZXJuWzFdID09ICd8JykKKwkJeworCQkgICAgKyt4cC0+eHBfcGF0dGVybjsKKwkJICAgIHhwLT54cF9jb250ZXh0ID0gRVhQQU5EX0VYUFJFU1NJT047CisJCX0KKwkJZWxzZQorCQkgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfQ09NTUFORFM7CisJICAgIH0KKwkgICAgZWxzZQorCQl4cC0+eHBfY29udGV4dCA9IEVYUEFORF9FWFBSRVNTSU9OOworCX0KKwllbHNlCisJICAgIHhwLT54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7CisJYXJnID0geHAtPnhwX3BhdHRlcm47CisJaWYgKCphcmcgIT0gTlVMKQorCSAgICB3aGlsZSAoKGMgPSAqKythcmcpICE9IE5VTCAmJiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKSkKKwkJLyogc2tpcCAqLyA7CisgICAgfQorICAgIHhwLT54cF9wYXR0ZXJuID0gYXJnOworfQorCisjZW5kaWYgLyogRkVBVF9DTURMX0NPTVBMICovCisKKy8qCisgKiAiOjEsMjVjYWxsIGZ1bmMoYXJnMSwgYXJnMikiCWZ1bmN0aW9uIGNhbGwuCisgKi8KKyAgICB2b2lkCitleF9jYWxsKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcl91CSphcmcgPSBlYXAtPmFyZzsKKyAgICBjaGFyX3UJKnN0YXJ0YXJnOworICAgIGNoYXJfdQkqYWxpYXM7CisgICAgY2hhcl91CSpuYW1lOworICAgIHZhcgkJcmV0dmFyOworICAgIGludAkJbGVuOworICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQlkb2VzcmFuZ2U7CisgICAgaW50CQlmYWlsZWQgPSBGQUxTRTsKKworICAgIG5hbWUgPSBhcmc7CisgICAgbGVuID0gZ2V0X2Z1bmNfbGVuKCZhcmcsICZhbGlhcywgIWVhcC0+c2tpcCk7CisgICAgaWYgKGxlbiA9PSAwKQorCWdvdG8gZW5kOworICAgIGlmIChhbGlhcyAhPSBOVUxMKQorCW5hbWUgPSBhbGlhczsKKworICAgIHN0YXJ0YXJnID0gYXJnOworICAgIHJldHZhci52YXJfdHlwZSA9IFZBUl9VTktOT1dOOwkvKiBjbGVhcl92YXIoKSB1c2VzIHRoaXMgKi8KKworICAgIGlmICgqc3RhcnRhcmcgIT0gJygnKQorICAgIHsKKwlFTVNHMihfKCJFMTA3OiBNaXNzaW5nIGJyYWNlczogJXMiKSwgbmFtZSk7CisJZ290byBlbmQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXaGVuIHNraXBwaW5nLCBldmFsdWF0ZSB0aGUgZnVuY3Rpb24gb25jZSwgdG8gZmluZCB0aGUgZW5kIG9mIHRoZQorICAgICAqIGFyZ3VtZW50cy4KKyAgICAgKiBXaGVuIHRoZSBmdW5jdGlvbiB0YWtlcyBhIHJhbmdlLCB0aGlzIGlzIGRpc2NvdmVyZWQgYWZ0ZXIgdGhlIGZpcnN0CisgICAgICogY2FsbCwgYW5kIHRoZSBsb29wIGlzIGJyb2tlbi4KKyAgICAgKi8KKyAgICBpZiAoZWFwLT5za2lwKQorICAgIHsKKwkrK2Vtc2dfc2tpcDsKKwlsbnVtID0gZWFwLT5saW5lMjsJLyogZG8gaXQgb25jZSwgYWxzbyB3aXRoIGFuIGludmFsaWQgcmFuZ2UgKi8KKyAgICB9CisgICAgZWxzZQorCWxudW0gPSBlYXAtPmxpbmUxOworICAgIGZvciAoIDsgbG51bSA8PSBlYXAtPmxpbmUyOyArK2xudW0pCisgICAgeworCWlmICghZWFwLT5za2lwICYmIGVhcC0+YWRkcl9jb3VudCA+IDApCisJeworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtOworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisJfQorCWFyZyA9IHN0YXJ0YXJnOworCWlmIChnZXRfZnVuY192YXIobmFtZSwgbGVuLCAmcmV0dmFyLCAmYXJnLAorCQkgICAgICBlYXAtPmxpbmUxLCBlYXAtPmxpbmUyLCAmZG9lc3JhbmdlLCAhZWFwLT5za2lwKSA9PSBGQUlMKQorCXsKKwkgICAgZmFpbGVkID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorCWNsZWFyX3ZhcigmcmV0dmFyKTsKKwlpZiAoZG9lc3JhbmdlIHx8IGVhcC0+c2tpcCkKKwkgICAgYnJlYWs7CisJLyogU3RvcCB3aGVuIGltbWVkaWF0ZWx5IGFib3J0aW5nIG9uIGVycm9yLCBvciB3aGVuIGFuIGludGVycnVwdAorCSAqIG9jY3VycmVkIG9yIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGJ1dCBub3QgY2F1Z2h0LiAgZ2V0X2Z1bmNfdmFyKCkKKwkgKiByZXR1cm5lZCBPSywgc28gdGhhdCB0aGUgY2hlY2sgZm9yIHRyYWlsaW5nIGNoYXJhY3RlcnMgYmVsb3cgaXMKKwkgKiBleGVjdXRlZC4gKi8KKwlpZiAoYWJvcnRpbmcoKSkKKwkgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChlYXAtPnNraXApCisJLS1lbXNnX3NraXA7CisKKyAgICBpZiAoIWZhaWxlZCkKKyAgICB7CisJLyogQ2hlY2sgZm9yIHRyYWlsaW5nIGlsbGVnYWwgY2hhcmFjdGVycyBhbmQgYSBmb2xsb3dpbmcgY29tbWFuZC4gKi8KKwlpZiAoIWVuZHNfZXhjbWQoKmFyZykpCisJeworCSAgICBlbXNnX3NldmVyZSA9IFRSVUU7CisJICAgIEVNU0coXyhlX3RyYWlsaW5nKSk7CisJfQorCWVsc2UKKwkgICAgZWFwLT5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChhcmcpOworICAgIH0KKworZW5kOgorICAgIGlmIChhbGlhcyAhPSBOVUxMKQorCXZpbV9mcmVlKGFsaWFzKTsKK30KKworLyoKKyAqICI6dW5sZXRbIV0gdmFyMSAuLi4gIiBjb21tYW5kLgorICovCisgICAgdm9pZAorZXhfdW5sZXQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIGNoYXJfdQkqbmFtZV9lbmQ7CisgICAgY2hhcl91CWNjOworICAgIGNoYXJfdQkqZXhwcl9zdGFydDsKKyAgICBjaGFyX3UJKmV4cHJfZW5kOworICAgIGludAkJZXJyb3IgPSBGQUxTRTsKKworICAgIGRvCisgICAgeworCS8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgbmFtZS4gKi8KKwluYW1lX2VuZCA9IGZpbmRfbmFtZV9lbmQoYXJnLCAmZXhwcl9zdGFydCwgJmV4cHJfZW5kKTsKKworCWlmICghdmltX2lzd2hpdGUoKm5hbWVfZW5kKSAmJiAhZW5kc19leGNtZCgqbmFtZV9lbmQpKQorCXsKKwkgICAgZW1zZ19zZXZlcmUgPSBUUlVFOworCSAgICBFTVNHKF8oZV90cmFpbGluZykpOworCSAgICBicmVhazsKKwl9CisKKwlpZiAoIWVycm9yICYmICFlYXAtPnNraXApCisJeworI2lmZGVmIEZFQVRfTUFHSUNfQlJBQ0VTCisJICAgIGlmIChleHByX3N0YXJ0ICE9IE5VTEwpCisJICAgIHsKKwkJY2hhcl91ICAqdGVtcF9zdHJpbmc7CisKKwkJdGVtcF9zdHJpbmcgPSBtYWtlX2V4cGFuZGVkX25hbWUoYXJnLCBleHByX3N0YXJ0LAorCQkJCQkJCSBleHByX2VuZCwgbmFtZV9lbmQpOworCQlpZiAodGVtcF9zdHJpbmcgPT0gTlVMTCkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIFJlcG9ydCBhbiBpbnZhbGlkIGV4cHJlc3Npb24gaW4gYnJhY2VzLCB1bmxlc3MgdGhlCisJCSAgICAgKiBleHByZXNzaW9uIGV2YWx1YXRpb24gaGFzIGJlZW4gY2FuY2VsbGVkIGR1ZSB0byBhbgorCQkgICAgICogYWJvcnRpbmcgZXJyb3IsIGFuIGludGVycnVwdCwgb3IgYW4gZXhjZXB0aW9uLgorCQkgICAgICovCisJCSAgICBpZiAoIWFib3J0aW5nKCkpCisJCSAgICB7CisJCQllbXNnX3NldmVyZSA9IFRSVUU7CisJCQlFTVNHMihfKGVfaW52YXJnMiksIGFyZyk7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIGVycm9yID0gVFJVRTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGlmIChkb191bmxldCh0ZW1wX3N0cmluZykgPT0gRkFJTCAmJiAhZWFwLT5mb3JjZWl0KQorCQkgICAgeworCQkJRU1TRzIoXygiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIiksIHRlbXBfc3RyaW5nKTsKKwkJCWVycm9yID0gVFJVRTsKKwkJICAgIH0KKwkJICAgIHZpbV9mcmVlKHRlbXBfc3RyaW5nKTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCWNjID0gKm5hbWVfZW5kOworCQkqbmFtZV9lbmQgPSBOVUw7CisKKwkJaWYgKGRvX3VubGV0KGFyZykgPT0gRkFJTCAmJiAhZWFwLT5mb3JjZWl0KQorCQl7CisJCSAgICBFTVNHMihfKCJFMTA4OiBObyBzdWNoIHZhcmlhYmxlOiBcIiVzXCIiKSwgYXJnKTsKKwkJICAgIGVycm9yID0gVFJVRTsKKwkJfQorCisJCSpuYW1lX2VuZCA9IGNjOworCSAgICB9CisJfQorCWFyZyA9IHNraXB3aGl0ZShuYW1lX2VuZCk7CisgICAgfSB3aGlsZSAoIWVuZHNfZXhjbWQoKmFyZykpOworCisgICAgZWFwLT5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChhcmcpOworfQorCisvKgorICogInVubGV0IiBhIHZhcmlhYmxlLiAgUmV0dXJuIE9LIGlmIGl0IGV4aXN0ZWQsIEZBSUwgaWYgbm90LgorICovCisgICAgaW50Citkb191bmxldChuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBWQVIJCXY7CisKKyAgICB2ID0gZmluZF92YXIobmFtZSwgVFJVRSk7CisgICAgaWYgKHYgIT0gTlVMTCkKKyAgICB7CisJdmFyX2ZyZWVfb25lKHYpOworCXJldHVybiBPSzsKKyAgICB9CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKyNpZiAoZGVmaW5lZChGRUFUX01FTlUpICYmIGRlZmluZWQoRkVBVF9NVUxUSV9MQU5HKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBEZWxldGUgYWxsICJtZW51dHJhbnNfIiB2YXJpYWJsZXMuCisgKi8KKyAgICB2b2lkCitkZWxfbWVudXRyYW5zX3ZhcnMoKQoreworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2YXJpYWJsZXMuZ2FfbGVuOyArK2kpCisJaWYgKFZBUl9FTlRSWShpKS52YXJfbmFtZSAhPSBOVUxMCisJCSYmIFNUUk5DTVAoVkFSX0VOVFJZKGkpLnZhcl9uYW1lLCAibWVudXRyYW5zXyIsIDEwKSA9PSAwKQorCSAgICB2YXJfZnJlZV9vbmUoJlZBUl9FTlRSWShpKSk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9DTURMX0NPTVBMKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogTG9jYWwgc3RyaW5nIGJ1ZmZlciBmb3IgdGhlIG5leHQgdHdvIGZ1bmN0aW9ucyB0byBzdG9yZSBhIHZhcmlhYmxlIG5hbWUKKyAqIHdpdGggaXRzIHByZWZpeC4gQWxsb2NhdGVkIGluIGNhdF9wcmVmaXhfdmFybmFtZSgpLCBmcmVlZCBsYXRlciBpbgorICogZ2V0X3VzZXJfdmFyX25hbWUoKS4KKyAqLworCitzdGF0aWMgY2hhcl91ICpjYXRfcHJlZml4X3Zhcm5hbWUgX19BUkdTKChpbnQgcHJlZml4LCBjaGFyX3UgKm5hbWUpKTsKKworc3RhdGljIGNoYXJfdQkqdmFybmFtZWJ1ZiA9IE5VTEw7CitzdGF0aWMgaW50CXZhcm5hbWVidWZsZW4gPSAwOworCisvKgorICogRnVuY3Rpb24gdG8gY29uY2F0ZW5hdGUgYSBwcmVmaXggYW5kIGEgdmFyaWFibGUgbmFtZS4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorY2F0X3ByZWZpeF92YXJuYW1lKHByZWZpeCwgbmFtZSkKKyAgICBpbnQJCXByZWZpeDsKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgaW50CQlsZW47CisKKyAgICBsZW4gPSAoaW50KVNUUkxFTihuYW1lKSArIDM7CisgICAgaWYgKGxlbiA+IHZhcm5hbWVidWZsZW4pCisgICAgeworCXZpbV9mcmVlKHZhcm5hbWVidWYpOworCWxlbiArPSAxMDsJCQkvKiBzb21lIGFkZGl0aW9uYWwgc3BhY2UgKi8KKwl2YXJuYW1lYnVmID0gYWxsb2MobGVuKTsKKwlpZiAodmFybmFtZWJ1ZiA9PSBOVUxMKQorCXsKKwkgICAgdmFybmFtZWJ1ZmxlbiA9IDA7CisJICAgIHJldHVybiBOVUxMOworCX0KKwl2YXJuYW1lYnVmbGVuID0gbGVuOworICAgIH0KKyAgICAqdmFybmFtZWJ1ZiA9IHByZWZpeDsKKyAgICB2YXJuYW1lYnVmWzFdID0gJzonOworICAgIFNUUkNQWSh2YXJuYW1lYnVmICsgMiwgbmFtZSk7CisgICAgcmV0dXJuIHZhcm5hbWVidWY7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBnaXZlbiB0byBFeHBhbmRHZW5lcmljKCkgdG8gb2J0YWluIHRoZSBsaXN0IG9mIHVzZXIgZGVmaW5lZAorICogKGdsb2JhbC9idWZmZXIvd2luZG93L2J1aWx0LWluKSB2YXJpYWJsZSBuYW1lcy4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICoKK2dldF91c2VyX3Zhcl9uYW1lKHhwLCBpZHgpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGludAkJaWR4OworeworICAgIHN0YXRpYyBpbnQJZ2lkeDsKKyAgICBzdGF0aWMgaW50CWJpZHg7CisgICAgc3RhdGljIGludAl3aWR4OworICAgIHN0YXRpYyBpbnQJdmlkeDsKKyAgICBjaGFyX3UJKm5hbWU7CisKKyAgICBpZiAoaWR4ID09IDApCisJZ2lkeCA9IGJpZHggPSB3aWR4ID0gdmlkeCA9IDA7CisgICAgaWYgKGdpZHggPCB2YXJpYWJsZXMuZ2FfbGVuKQkJCS8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KKyAgICB7CisJd2hpbGUgKChuYW1lID0gVkFSX0VOVFJZKGdpZHgrKykudmFyX25hbWUpID09IE5VTEwKKwkJJiYgZ2lkeCA8IHZhcmlhYmxlcy5nYV9sZW4pCisJICAgIC8qIHNraXAgKi87CisJaWYgKG5hbWUgIT0gTlVMTCkKKwl7CisJICAgIGlmIChTVFJOQ01QKCJnOiIsIHhwLT54cF9wYXR0ZXJuLCAyKSA9PSAwKQorCQlyZXR1cm4gY2F0X3ByZWZpeF92YXJuYW1lKCdnJywgbmFtZSk7CisJICAgIGVsc2UKKwkJcmV0dXJuIG5hbWU7CisJfQorICAgIH0KKyAgICBpZiAoYmlkeCA8IGN1cmJ1Zi0+Yl92YXJzLmdhX2xlbikJCS8qIEN1cnJlbnQgYnVmZmVyIHZhcmlhYmxlcyAqLworICAgIHsKKwl3aGlsZSAoKG5hbWUgPSBCVkFSX0VOVFJZKGJpZHgrKykudmFyX25hbWUpID09IE5VTEwKKwkJJiYgYmlkeCA8IGN1cmJ1Zi0+Yl92YXJzLmdhX2xlbikKKwkgICAgLyogc2tpcCAqLzsKKwlpZiAobmFtZSAhPSBOVUxMKQorCSAgICByZXR1cm4gY2F0X3ByZWZpeF92YXJuYW1lKCdiJywgbmFtZSk7CisgICAgfQorICAgIGlmIChiaWR4ID09IGN1cmJ1Zi0+Yl92YXJzLmdhX2xlbikKKyAgICB7CisJKytiaWR4OworCXJldHVybiAoY2hhcl91ICopImI6Y2hhbmdlZHRpY2siOworICAgIH0KKyAgICBpZiAod2lkeCA8IGN1cndpbi0+d192YXJzLmdhX2xlbikJCS8qIEN1cnJlbnQgd2luZG93IHZhcmlhYmxlcyAqLworICAgIHsKKwl3aGlsZSAoKG5hbWUgPSBXVkFSX0VOVFJZKHdpZHgrKykudmFyX25hbWUpID09IE5VTEwKKwkJJiYgd2lkeCA8IGN1cndpbi0+d192YXJzLmdhX2xlbikKKwkgICAgLyogc2tpcCAqLzsKKwlpZiAobmFtZSAhPSBOVUxMKQorCSAgICByZXR1cm4gY2F0X3ByZWZpeF92YXJuYW1lKCd3JywgbmFtZSk7CisgICAgfQorICAgIGlmICh2aWR4IDwgVlZfTEVOKQkJCQkgICAgICAvKiBCdWlsdC1pbiB2YXJpYWJsZXMgKi8KKwlyZXR1cm4gY2F0X3ByZWZpeF92YXJuYW1lKCd2JywgKGNoYXJfdSAqKXZpbXZhcnNbdmlkeCsrXS5uYW1lKTsKKworICAgIHZpbV9mcmVlKHZhcm5hbWVidWYpOworICAgIHZhcm5hbWVidWYgPSBOVUxMOworICAgIHZhcm5hbWVidWZsZW4gPSAwOworICAgIHJldHVybiBOVUxMOworfQorCisjZW5kaWYgLyogRkVBVF9DTURMX0NPTVBMICovCisKKy8qCisgKiB0eXBlcyBmb3IgZXhwcmVzc2lvbnMuCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFRZUEVfVU5LTk9XTiA9IDAKKyAgICAsIFRZUEVfRVFVQUwJLyogPT0gKi8KKyAgICAsIFRZUEVfTkVRVUFMCS8qICE9ICovCisgICAgLCBUWVBFX0dSRUFURVIJLyogPiAgKi8KKyAgICAsIFRZUEVfR0VRVUFMCS8qID49ICovCisgICAgLCBUWVBFX1NNQUxMRVIJLyogPCAgKi8KKyAgICAsIFRZUEVfU0VRVUFMCS8qIDw9ICovCisgICAgLCBUWVBFX01BVENICS8qID1+ICovCisgICAgLCBUWVBFX05PTUFUQ0gJLyogIX4gKi8KK30gZXhwdHlwZV9UOworCisvKgorICogVGhlICJldmFsdWF0ZSIgYXJndW1lbnQ6IFdoZW4gRkFMU0UsIHRoZSBhcmd1bWVudCBpcyBvbmx5IHBhcnNlZCBidXQgbm90CisgKiBleGVjdXRlZC4gIFRoZSBmdW5jdGlvbiBtYXkgcmV0dXJuIE9LLCBidXQgdGhlIHJldHZhciB3aWxsIGJlIG9mIHR5cGUKKyAqIFZBUl9VTktOT1dOLiAgVGhlIGZ1bmN0aW9uIHN0aWxsIHJldHVybnMgRkFJTCBmb3IgYSBzeW50YXggZXJyb3IuCisgKi8KKworLyoKKyAqIEhhbmRsZSB6ZXJvIGxldmVsIGV4cHJlc3Npb24uCisgKiBUaGlzIGNhbGxzIGV2YWwxKCkgYW5kIGhhbmRsZXMgZXJyb3IgbWVzc2FnZSBhbmQgbmV4dGNtZC4KKyAqIFJldHVybiBPSyBvciBGQUlMLgorICovCisgICAgc3RhdGljIGludAorZXZhbDAoYXJnLCByZXR2YXIsIG5leHRjbWQsIGV2YWx1YXRlKQorICAgIGNoYXJfdQkqYXJnOworICAgIFZBUgkJcmV0dmFyOworICAgIGNoYXJfdQkqKm5leHRjbWQ7CisgICAgaW50CQlldmFsdWF0ZTsKK3sKKyAgICBpbnQJCXJldDsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBwID0gc2tpcHdoaXRlKGFyZyk7CisgICAgcmV0ID0gZXZhbDEoJnAsIHJldHZhciwgZXZhbHVhdGUpOworICAgIGlmIChyZXQgPT0gRkFJTCB8fCAhZW5kc19leGNtZCgqcCkpCisgICAgeworCWlmIChyZXQgIT0gRkFJTCkKKwkgICAgY2xlYXJfdmFyKHJldHZhcik7CisJLyoKKwkgKiBSZXBvcnQgdGhlIGludmFsaWQgZXhwcmVzc2lvbiB1bmxlc3MgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBoYXMKKwkgKiBiZWVuIGNhbmNlbGxlZCBkdWUgdG8gYW4gYWJvcnRpbmcgZXJyb3IsIGFuIGludGVycnVwdCwgb3IgYW4KKwkgKiBleGNlcHRpb24uCisJICovCisJaWYgKCFhYm9ydGluZygpKQorCSAgICBFTVNHMihfKGVfaW52ZXhwcjIpLCBhcmcpOworCXJldCA9IEZBSUw7CisgICAgfQorICAgIGlmIChuZXh0Y21kICE9IE5VTEwpCisJKm5leHRjbWQgPSBjaGVja19uZXh0Y21kKHApOworCisgICAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEhhbmRsZSB0b3AgbGV2ZWwgZXhwcmVzc2lvbjoKKyAqCWV4cHIxID8gZXhwcjAgOiBleHByMAorICoKKyAqICJhcmciIG11c3QgcG9pbnQgdG8gdGhlIGZpcnN0IG5vbi13aGl0ZSBvZiB0aGUgZXhwcmVzc2lvbi4KKyAqICJhcmciIGlzIGFkdmFuY2VkIHRvIHRoZSBuZXh0IG5vbi13aGl0ZSBhZnRlciB0aGUgcmVjb2duaXplZCBleHByZXNzaW9uLgorICoKKyAqIFJldHVybiBPSyBvciBGQUlMLgorICovCisgICAgc3RhdGljIGludAorZXZhbDEoYXJnLCByZXR2YXIsIGV2YWx1YXRlKQorICAgIGNoYXJfdQkqKmFyZzsKKyAgICBWQVIJCXJldHZhcjsKKyAgICBpbnQJCWV2YWx1YXRlOworeworICAgIGludAkJcmVzdWx0OworICAgIHZhcgkJdmFyMjsKKworICAgIC8qCisgICAgICogR2V0IHRoZSBmaXJzdCB2YXJpYWJsZS4KKyAgICAgKi8KKyAgICBpZiAoZXZhbDIoYXJnLCByZXR2YXIsIGV2YWx1YXRlKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworCisgICAgaWYgKCgqYXJnKVswXSA9PSAnPycpCisgICAgeworCXJlc3VsdCA9IEZBTFNFOworCWlmIChldmFsdWF0ZSkKKwl7CisJICAgIGlmIChnZXRfdmFyX251bWJlcihyZXR2YXIpICE9IDApCisJCXJlc3VsdCA9IFRSVUU7CisJICAgIGNsZWFyX3ZhcihyZXR2YXIpOworCX0KKworCS8qCisJICogR2V0IHRoZSBzZWNvbmQgdmFyaWFibGUuCisJICovCisJKmFyZyA9IHNraXB3aGl0ZSgqYXJnICsgMSk7CisJaWYgKGV2YWwxKGFyZywgcmV0dmFyLCBldmFsdWF0ZSAmJiByZXN1bHQpID09IEZBSUwpIC8qIHJlY3Vyc2l2ZSEgKi8KKwkgICAgcmV0dXJuIEZBSUw7CisKKwkvKgorCSAqIENoZWNrIGZvciB0aGUgIjoiLgorCSAqLworCWlmICgoKmFyZylbMF0gIT0gJzonKQorCXsKKwkgICAgRU1TRyhfKCJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciKSk7CisJICAgIGlmIChldmFsdWF0ZSAmJiByZXN1bHQpCisJCWNsZWFyX3ZhcihyZXR2YXIpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisKKwkvKgorCSAqIEdldCB0aGUgdGhpcmQgdmFyaWFibGUuCisJICovCisJKmFyZyA9IHNraXB3aGl0ZSgqYXJnICsgMSk7CisJaWYgKGV2YWwxKGFyZywgJnZhcjIsIGV2YWx1YXRlICYmICFyZXN1bHQpID09IEZBSUwpIC8qIHJlY3Vyc2l2ZSEgKi8KKwl7CisJICAgIGlmIChldmFsdWF0ZSAmJiByZXN1bHQpCisJCWNsZWFyX3ZhcihyZXR2YXIpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisJaWYgKGV2YWx1YXRlICYmICFyZXN1bHQpCisJICAgICpyZXR2YXIgPSB2YXIyOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIEhhbmRsZSBmaXJzdCBsZXZlbCBleHByZXNzaW9uOgorICoJZXhwcjIgfHwgZXhwcjIgfHwgZXhwcjIJICAgIGxvZ2ljYWwgT1IKKyAqCisgKiAiYXJnIiBtdXN0IHBvaW50IHRvIHRoZSBmaXJzdCBub24td2hpdGUgb2YgdGhlIGV4cHJlc3Npb24uCisgKiAiYXJnIiBpcyBhZHZhbmNlZCB0byB0aGUgbmV4dCBub24td2hpdGUgYWZ0ZXIgdGhlIHJlY29nbml6ZWQgZXhwcmVzc2lvbi4KKyAqCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2V2YWwyKGFyZywgcmV0dmFyLCBldmFsdWF0ZSkKKyAgICBjaGFyX3UJKiphcmc7CisgICAgVkFSCQlyZXR2YXI7CisgICAgaW50CQlldmFsdWF0ZTsKK3sKKyAgICB2YXIJCXZhcjI7CisgICAgbG9uZwlyZXN1bHQ7CisgICAgaW50CQlmaXJzdDsKKworICAgIC8qCisgICAgICogR2V0IHRoZSBmaXJzdCB2YXJpYWJsZS4KKyAgICAgKi8KKyAgICBpZiAoZXZhbDMoYXJnLCByZXR2YXIsIGV2YWx1YXRlKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworCisgICAgLyoKKyAgICAgKiBSZXBlYXQgdW50aWwgdGhlcmUgaXMgbm8gZm9sbG93aW5nICJ8fCIuCisgICAgICovCisgICAgZmlyc3QgPSBUUlVFOworICAgIHJlc3VsdCA9IEZBTFNFOworICAgIHdoaWxlICgoKmFyZylbMF0gPT0gJ3wnICYmICgqYXJnKVsxXSA9PSAnfCcpCisgICAgeworCWlmIChldmFsdWF0ZSAmJiBmaXJzdCkKKwl7CisJICAgIGlmIChnZXRfdmFyX251bWJlcihyZXR2YXIpICE9IDApCisJCXJlc3VsdCA9IFRSVUU7CisJICAgIGNsZWFyX3ZhcihyZXR2YXIpOworCSAgICBmaXJzdCA9IEZBTFNFOworCX0KKworCS8qCisJICogR2V0IHRoZSBzZWNvbmQgdmFyaWFibGUuCisJICovCisJKmFyZyA9IHNraXB3aGl0ZSgqYXJnICsgMik7CisJaWYgKGV2YWwzKGFyZywgJnZhcjIsIGV2YWx1YXRlICYmICFyZXN1bHQpID09IEZBSUwpCisJICAgIHJldHVybiBGQUlMOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSByZXN1bHQuCisJICovCisJaWYgKGV2YWx1YXRlICYmICFyZXN1bHQpCisJeworCSAgICBpZiAoZ2V0X3Zhcl9udW1iZXIoJnZhcjIpICE9IDApCisJCXJlc3VsdCA9IFRSVUU7CisJICAgIGNsZWFyX3ZhcigmdmFyMik7CisJfQorCWlmIChldmFsdWF0ZSkKKwl7CisJICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfTlVNQkVSOworCSAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IHJlc3VsdDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogSGFuZGxlIHNlY29uZCBsZXZlbCBleHByZXNzaW9uOgorICoJZXhwcjMgJiYgZXhwcjMgJiYgZXhwcjMJICAgIGxvZ2ljYWwgQU5ECisgKgorICogImFyZyIgbXVzdCBwb2ludCB0byB0aGUgZmlyc3Qgbm9uLXdoaXRlIG9mIHRoZSBleHByZXNzaW9uLgorICogImFyZyIgaXMgYWR2YW5jZWQgdG8gdGhlIG5leHQgbm9uLXdoaXRlIGFmdGVyIHRoZSByZWNvZ25pemVkIGV4cHJlc3Npb24uCisgKgorICogUmV0dXJuIE9LIG9yIEZBSUwuCisgKi8KKyAgICBzdGF0aWMgaW50CitldmFsMyhhcmcsIHJldHZhciwgZXZhbHVhdGUpCisgICAgY2hhcl91CSoqYXJnOworICAgIFZBUgkJcmV0dmFyOworICAgIGludAkJZXZhbHVhdGU7Cit7CisgICAgdmFyCQl2YXIyOworICAgIGxvbmcJcmVzdWx0OworICAgIGludAkJZmlyc3Q7CisKKyAgICAvKgorICAgICAqIEdldCB0aGUgZmlyc3QgdmFyaWFibGUuCisgICAgICovCisgICAgaWYgKGV2YWw0KGFyZywgcmV0dmFyLCBldmFsdWF0ZSkgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogUmVwZWF0IHVudGlsIHRoZXJlIGlzIG5vIGZvbGxvd2luZyAiJiYiLgorICAgICAqLworICAgIGZpcnN0ID0gVFJVRTsKKyAgICByZXN1bHQgPSBUUlVFOworICAgIHdoaWxlICgoKmFyZylbMF0gPT0gJyYnICYmICgqYXJnKVsxXSA9PSAnJicpCisgICAgeworCWlmIChldmFsdWF0ZSAmJiBmaXJzdCkKKwl7CisJICAgIGlmIChnZXRfdmFyX251bWJlcihyZXR2YXIpID09IDApCisJCXJlc3VsdCA9IEZBTFNFOworCSAgICBjbGVhcl92YXIocmV0dmFyKTsKKwkgICAgZmlyc3QgPSBGQUxTRTsKKwl9CisKKwkvKgorCSAqIEdldCB0aGUgc2Vjb25kIHZhcmlhYmxlLgorCSAqLworCSphcmcgPSBza2lwd2hpdGUoKmFyZyArIDIpOworCWlmIChldmFsNChhcmcsICZ2YXIyLCBldmFsdWF0ZSAmJiByZXN1bHQpID09IEZBSUwpCisJICAgIHJldHVybiBGQUlMOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSByZXN1bHQuCisJICovCisJaWYgKGV2YWx1YXRlICYmIHJlc3VsdCkKKwl7CisJICAgIGlmIChnZXRfdmFyX251bWJlcigmdmFyMikgPT0gMCkKKwkJcmVzdWx0ID0gRkFMU0U7CisJICAgIGNsZWFyX3ZhcigmdmFyMik7CisJfQorCWlmIChldmFsdWF0ZSkKKwl7CisJICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfTlVNQkVSOworCSAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IHJlc3VsdDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogSGFuZGxlIHRoaXJkIGxldmVsIGV4cHJlc3Npb246CisgKgl2YXIxID09IHZhcjIKKyAqCXZhcjEgPX4gdmFyMgorICoJdmFyMSAhPSB2YXIyCisgKgl2YXIxICF+IHZhcjIKKyAqCXZhcjEgPiB2YXIyCisgKgl2YXIxID49IHZhcjIKKyAqCXZhcjEgPCB2YXIyCisgKgl2YXIxIDw9IHZhcjIKKyAqCisgKiAiYXJnIiBtdXN0IHBvaW50IHRvIHRoZSBmaXJzdCBub24td2hpdGUgb2YgdGhlIGV4cHJlc3Npb24uCisgKiAiYXJnIiBpcyBhZHZhbmNlZCB0byB0aGUgbmV4dCBub24td2hpdGUgYWZ0ZXIgdGhlIHJlY29nbml6ZWQgZXhwcmVzc2lvbi4KKyAqCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2V2YWw0KGFyZywgcmV0dmFyLCBldmFsdWF0ZSkKKyAgICBjaGFyX3UJKiphcmc7CisgICAgVkFSCQlyZXR2YXI7CisgICAgaW50CQlldmFsdWF0ZTsKK3sKKyAgICB2YXIJCXZhcjI7CisgICAgY2hhcl91CSpwOworICAgIGludAkJaTsKKyAgICBleHB0eXBlX1QJdHlwZSA9IFRZUEVfVU5LTk9XTjsKKyAgICBpbnQJCWxlbiA9IDI7CisgICAgbG9uZwluMSwgbjI7CisgICAgY2hhcl91CSpzMSwgKnMyOworICAgIGNoYXJfdQlidWYxW05VTUJVRkxFTl0sIGJ1ZjJbTlVNQlVGTEVOXTsKKyAgICByZWdtYXRjaF9UCXJlZ21hdGNoOworICAgIGludAkJaWM7CisgICAgY2hhcl91CSpzYXZlX2NwbzsKKworICAgIC8qCisgICAgICogR2V0IHRoZSBmaXJzdCB2YXJpYWJsZS4KKyAgICAgKi8KKyAgICBpZiAoZXZhbDUoYXJnLCByZXR2YXIsIGV2YWx1YXRlKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworCisgICAgcCA9ICphcmc7CisgICAgc3dpdGNoIChwWzBdKQorICAgIHsKKwljYXNlICc9JzogICBpZiAocFsxXSA9PSAnPScpCisJCQl0eXBlID0gVFlQRV9FUVVBTDsKKwkJICAgIGVsc2UgaWYgKHBbMV0gPT0gJ34nKQorCQkJdHlwZSA9IFRZUEVfTUFUQ0g7CisJCSAgICBicmVhazsKKwljYXNlICchJzogICBpZiAocFsxXSA9PSAnPScpCisJCQl0eXBlID0gVFlQRV9ORVFVQUw7CisJCSAgICBlbHNlIGlmIChwWzFdID09ICd+JykKKwkJCXR5cGUgPSBUWVBFX05PTUFUQ0g7CisJCSAgICBicmVhazsKKwljYXNlICc+JzogICBpZiAocFsxXSAhPSAnPScpCisJCSAgICB7CisJCQl0eXBlID0gVFlQRV9HUkVBVEVSOworCQkJbGVuID0gMTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCXR5cGUgPSBUWVBFX0dFUVVBTDsKKwkJICAgIGJyZWFrOworCWNhc2UgJzwnOiAgIGlmIChwWzFdICE9ICc9JykKKwkJICAgIHsKKwkJCXR5cGUgPSBUWVBFX1NNQUxMRVI7CisJCQlsZW4gPSAxOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJdHlwZSA9IFRZUEVfU0VRVUFMOworCQkgICAgYnJlYWs7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB0aGVyZSBpcyBhIGNvbXBhcml0aXZlIG9wZXJhdG9yLCB1c2UgaXQuCisgICAgICovCisgICAgaWYgKHR5cGUgIT0gVFlQRV9VTktOT1dOKQorICAgIHsKKwkvKiBleHRyYSBxdWVzdGlvbiBtYXJrIGFwcGVuZGVkOiBpZ25vcmUgY2FzZSAqLworCWlmIChwW2xlbl0gPT0gJz8nKQorCXsKKwkgICAgaWMgPSBUUlVFOworCSAgICArK2xlbjsKKwl9CisJLyogZXh0cmEgJyMnIGFwcGVuZGVkOiBtYXRjaCBjYXNlICovCisJZWxzZSBpZiAocFtsZW5dID09ICcjJykKKwl7CisJICAgIGljID0gRkFMU0U7CisJICAgICsrbGVuOworCX0KKwkvKiBub3RoaW5nIGFwcGVuZWQ6IHVzZSAnaWdub3JlY2FzZScgKi8KKwllbHNlCisJICAgIGljID0gcF9pYzsKKworCS8qCisJICogR2V0IHRoZSBzZWNvbmQgdmFyaWFibGUuCisJICovCisJKmFyZyA9IHNraXB3aGl0ZShwICsgbGVuKTsKKwlpZiAoZXZhbDUoYXJnLCAmdmFyMiwgZXZhbHVhdGUpID09IEZBSUwpCisJeworCSAgICBjbGVhcl92YXIocmV0dmFyKTsKKwkgICAgcmV0dXJuIEZBSUw7CisJfQorCisJaWYgKGV2YWx1YXRlKQorCXsKKwkgICAgLyoKKwkgICAgICogSWYgb25lIG9mIHRoZSB0d28gdmFyaWFibGVzIGlzIGEgbnVtYmVyLCBjb21wYXJlIGFzIGEgbnVtYmVyLgorCSAgICAgKiBXaGVuIHVzaW5nICI9fiIgb3IgIiF+IiwgYWx3YXlzIGNvbXBhcmUgYXMgc3RyaW5nLgorCSAgICAgKi8KKwkgICAgaWYgKChyZXR2YXItPnZhcl90eXBlID09IFZBUl9OVU1CRVIgfHwgdmFyMi52YXJfdHlwZSA9PSBWQVJfTlVNQkVSKQorCQkgICAgJiYgdHlwZSAhPSBUWVBFX01BVENIICYmIHR5cGUgIT0gVFlQRV9OT01BVENIKQorCSAgICB7CisJCW4xID0gZ2V0X3Zhcl9udW1iZXIocmV0dmFyKTsKKwkJbjIgPSBnZXRfdmFyX251bWJlcigmdmFyMik7CisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkgICAgY2FzZSBUWVBFX0VRVUFMOiAgICBuMSA9IChuMSA9PSBuMik7IGJyZWFrOworCQkgICAgY2FzZSBUWVBFX05FUVVBTDogICBuMSA9IChuMSAhPSBuMik7IGJyZWFrOworCQkgICAgY2FzZSBUWVBFX0dSRUFURVI6ICBuMSA9IChuMSA+IG4yKTsgYnJlYWs7CisJCSAgICBjYXNlIFRZUEVfR0VRVUFMOiAgIG4xID0gKG4xID49IG4yKTsgYnJlYWs7CisJCSAgICBjYXNlIFRZUEVfU01BTExFUjogIG4xID0gKG4xIDwgbjIpOyBicmVhazsKKwkJICAgIGNhc2UgVFlQRV9TRVFVQUw6ICAgbjEgPSAobjEgPD0gbjIpOyBicmVhazsKKwkJICAgIGNhc2UgVFlQRV9VTktOT1dOOgorCQkgICAgY2FzZSBUWVBFX01BVENIOgorCQkgICAgY2FzZSBUWVBFX05PTUFUQ0g6ICBicmVhazsgIC8qIGF2b2lkIGdjYyB3YXJuaW5nICovCisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJczEgPSBnZXRfdmFyX3N0cmluZ19idWYocmV0dmFyLCBidWYxKTsKKwkJczIgPSBnZXRfdmFyX3N0cmluZ19idWYoJnZhcjIsIGJ1ZjIpOworCQlpZiAodHlwZSAhPSBUWVBFX01BVENIICYmIHR5cGUgIT0gVFlQRV9OT01BVENIKQorCQkgICAgaSA9IGljID8gTUJfU1RSSUNNUChzMSwgczIpIDogU1RSQ01QKHMxLCBzMik7CisJCWVsc2UKKwkJICAgIGkgPSAwOworCQluMSA9IEZBTFNFOworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJICAgIGNhc2UgVFlQRV9FUVVBTDogICAgbjEgPSAoaSA9PSAwKTsgYnJlYWs7CisJCSAgICBjYXNlIFRZUEVfTkVRVUFMOiAgIG4xID0gKGkgIT0gMCk7IGJyZWFrOworCQkgICAgY2FzZSBUWVBFX0dSRUFURVI6ICBuMSA9IChpID4gMCk7IGJyZWFrOworCQkgICAgY2FzZSBUWVBFX0dFUVVBTDogICBuMSA9IChpID49IDApOyBicmVhazsKKwkJICAgIGNhc2UgVFlQRV9TTUFMTEVSOiAgbjEgPSAoaSA8IDApOyBicmVhazsKKwkJICAgIGNhc2UgVFlQRV9TRVFVQUw6ICAgbjEgPSAoaSA8PSAwKTsgYnJlYWs7CisKKwkJICAgIGNhc2UgVFlQRV9NQVRDSDoKKwkJICAgIGNhc2UgVFlQRV9OT01BVENIOgorCQkJICAgIC8qIGF2b2lkICdsJyBmbGFnIGluICdjcG9wdGlvbnMnICovCisJCQkgICAgc2F2ZV9jcG8gPSBwX2NwbzsKKwkJCSAgICBwX2NwbyA9IChjaGFyX3UgKikiIjsKKwkJCSAgICByZWdtYXRjaC5yZWdwcm9nID0gdmltX3JlZ2NvbXAoczIsCisJCQkJCQkJUkVfTUFHSUMgKyBSRV9TVFJJTkcpOworCQkJICAgIHJlZ21hdGNoLnJtX2ljID0gaWM7CisJCQkgICAgaWYgKHJlZ21hdGNoLnJlZ3Byb2cgIT0gTlVMTCkKKwkJCSAgICB7CisJCQkJbjEgPSB2aW1fcmVnZXhlY19ubCgmcmVnbWF0Y2gsIHMxLCAoY29sbnJfVCkwKTsKKwkJCQl2aW1fZnJlZShyZWdtYXRjaC5yZWdwcm9nKTsKKwkJCQlpZiAodHlwZSA9PSBUWVBFX05PTUFUQ0gpCisJCQkJICAgIG4xID0gIW4xOworCQkJICAgIH0KKwkJCSAgICBwX2NwbyA9IHNhdmVfY3BvOworCQkJICAgIGJyZWFrOworCisJCSAgICBjYXNlIFRZUEVfVU5LTk9XTjogIGJyZWFrOyAgLyogYXZvaWQgZ2NjIHdhcm5pbmcgKi8KKwkJfQorCSAgICB9CisJICAgIGNsZWFyX3ZhcihyZXR2YXIpOworCSAgICBjbGVhcl92YXIoJnZhcjIpOworCSAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX05VTUJFUjsKKwkgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBuMTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogSGFuZGxlIGZvdXJ0aCBsZXZlbCBleHByZXNzaW9uOgorICoJKwludW1iZXIgYWRkaXRpb24KKyAqCS0JbnVtYmVyIHN1YnRyYWN0aW9uCisgKgkuCXN0cmluZyBjb25jYXRlbmF0aW9uCisgKgorICogImFyZyIgbXVzdCBwb2ludCB0byB0aGUgZmlyc3Qgbm9uLXdoaXRlIG9mIHRoZSBleHByZXNzaW9uLgorICogImFyZyIgaXMgYWR2YW5jZWQgdG8gdGhlIG5leHQgbm9uLXdoaXRlIGFmdGVyIHRoZSByZWNvZ25pemVkIGV4cHJlc3Npb24uCisgKgorICogUmV0dXJuIE9LIG9yIEZBSUwuCisgKi8KKyAgICBzdGF0aWMgaW50CitldmFsNShhcmcsIHJldHZhciwgZXZhbHVhdGUpCisgICAgY2hhcl91CSoqYXJnOworICAgIFZBUgkJcmV0dmFyOworICAgIGludAkJZXZhbHVhdGU7Cit7CisgICAgdmFyCQl2YXIyOworICAgIGludAkJb3A7CisgICAgbG9uZwluMSwgbjI7CisgICAgY2hhcl91CSpzMSwgKnMyOworICAgIGNoYXJfdQlidWYxW05VTUJVRkxFTl0sIGJ1ZjJbTlVNQlVGTEVOXTsKKyAgICBjaGFyX3UJKnA7CisKKyAgICAvKgorICAgICAqIEdldCB0aGUgZmlyc3QgdmFyaWFibGUuCisgICAgICovCisgICAgaWYgKGV2YWw2KGFyZywgcmV0dmFyLCBldmFsdWF0ZSkgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogUmVwZWF0IGNvbXB1dGluZywgdW50aWwgbm8gJysnLCAnLScgb3IgJy4nIGlzIGZvbGxvd2luZy4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwlvcCA9ICoqYXJnOworCWlmIChvcCAhPSAnKycgJiYgb3AgIT0gJy0nICYmIG9wICE9ICcuJykKKwkgICAgYnJlYWs7CisKKwkvKgorCSAqIEdldCB0aGUgc2Vjb25kIHZhcmlhYmxlLgorCSAqLworCSphcmcgPSBza2lwd2hpdGUoKmFyZyArIDEpOworCWlmIChldmFsNihhcmcsICZ2YXIyLCBldmFsdWF0ZSkgPT0gRkFJTCkKKwl7CisJICAgIGNsZWFyX3ZhcihyZXR2YXIpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisKKwlpZiAoZXZhbHVhdGUpCisJeworCSAgICAvKgorCSAgICAgKiBDb21wdXRlIHRoZSByZXN1bHQuCisJICAgICAqLworCSAgICBpZiAob3AgPT0gJy4nKQorCSAgICB7CisJCXMxID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKHJldHZhciwgYnVmMSk7CisJCXMyID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKCZ2YXIyLCBidWYyKTsKKwkJb3AgPSAoaW50KVNUUkxFTihzMSk7CisJCXAgPSBhbGxvYygodW5zaWduZWQpKG9wICsgU1RSTEVOKHMyKSArIDEpKTsKKwkJaWYgKHAgIT0gTlVMTCkKKwkJeworCQkgICAgU1RSQ1BZKHAsIHMxKTsKKwkJICAgIFNUUkNQWShwICsgb3AsIHMyKTsKKwkJfQorCQljbGVhcl92YXIocmV0dmFyKTsKKwkJcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisJCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gcDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJbjEgPSBnZXRfdmFyX251bWJlcihyZXR2YXIpOworCQluMiA9IGdldF92YXJfbnVtYmVyKCZ2YXIyKTsKKwkJY2xlYXJfdmFyKHJldHZhcik7CisJCWlmIChvcCA9PSAnKycpCisJCSAgICBuMSA9IG4xICsgbjI7CisJCWVsc2UKKwkJICAgIG4xID0gbjEgLSBuMjsKKwkJcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9OVU1CRVI7CisJCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gbjE7CisJICAgIH0KKwkgICAgY2xlYXJfdmFyKCZ2YXIyKTsKKwl9CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIEhhbmRsZSBmaWZ0aCBsZXZlbCBleHByZXNzaW9uOgorICoJKgludW1iZXIgbXVsdGlwbGljYXRpb24KKyAqCS8JbnVtYmVyIGRpdmlzaW9uCisgKgklCW51bWJlciBtb2R1bG8KKyAqCisgKiAiYXJnIiBtdXN0IHBvaW50IHRvIHRoZSBmaXJzdCBub24td2hpdGUgb2YgdGhlIGV4cHJlc3Npb24uCisgKiAiYXJnIiBpcyBhZHZhbmNlZCB0byB0aGUgbmV4dCBub24td2hpdGUgYWZ0ZXIgdGhlIHJlY29nbml6ZWQgZXhwcmVzc2lvbi4KKyAqCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2V2YWw2KGFyZywgcmV0dmFyLCBldmFsdWF0ZSkKKyAgICBjaGFyX3UJKiphcmc7CisgICAgVkFSCQlyZXR2YXI7CisgICAgaW50CQlldmFsdWF0ZTsKK3sKKyAgICB2YXIJCXZhcjI7CisgICAgaW50CQlvcDsKKyAgICBsb25nCW4xLCBuMjsKKworICAgIC8qCisgICAgICogR2V0IHRoZSBmaXJzdCB2YXJpYWJsZS4KKyAgICAgKi8KKyAgICBpZiAoZXZhbDcoYXJnLCByZXR2YXIsIGV2YWx1YXRlKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworCisgICAgLyoKKyAgICAgKiBSZXBlYXQgY29tcHV0aW5nLCB1bnRpbCBubyAnKicsICcvJyBvciAnJScgaXMgZm9sbG93aW5nLgorICAgICAqLworICAgIGZvciAoOzspCisgICAgeworCW9wID0gKiphcmc7CisJaWYgKG9wICE9ICcqJyAmJiBvcCAhPSAnLycgJiYgb3AgIT0gJyUnKQorCSAgICBicmVhazsKKworCWlmIChldmFsdWF0ZSkKKwl7CisJICAgIG4xID0gZ2V0X3Zhcl9udW1iZXIocmV0dmFyKTsKKwkgICAgY2xlYXJfdmFyKHJldHZhcik7CisJfQorCWVsc2UKKwkgICAgbjEgPSAwOworCisJLyoKKwkgKiBHZXQgdGhlIHNlY29uZCB2YXJpYWJsZS4KKwkgKi8KKwkqYXJnID0gc2tpcHdoaXRlKCphcmcgKyAxKTsKKwlpZiAoZXZhbDcoYXJnLCAmdmFyMiwgZXZhbHVhdGUpID09IEZBSUwpCisJICAgIHJldHVybiBGQUlMOworCisJaWYgKGV2YWx1YXRlKQorCXsKKwkgICAgbjIgPSBnZXRfdmFyX251bWJlcigmdmFyMik7CisJICAgIGNsZWFyX3ZhcigmdmFyMik7CisKKwkgICAgLyoKKwkgICAgICogQ29tcHV0ZSB0aGUgcmVzdWx0LgorCSAgICAgKi8KKwkgICAgaWYgKG9wID09ICcqJykKKwkJbjEgPSBuMSAqIG4yOworCSAgICBlbHNlIGlmIChvcCA9PSAnLycpCisJICAgIHsKKwkJaWYgKG4yID09IDApCS8qIGdpdmUgYW4gZXJyb3IgbWVzc2FnZT8gKi8KKwkJICAgIG4xID0gMHg3ZmZmZmZmZkw7CisJCWVsc2UKKwkJICAgIG4xID0gbjEgLyBuMjsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKG4yID09IDApCS8qIGdpdmUgYW4gZXJyb3IgbWVzc2FnZT8gKi8KKwkJICAgIG4xID0gMDsKKwkJZWxzZQorCQkgICAgbjEgPSBuMSAlIG4yOworCSAgICB9CisJICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfTlVNQkVSOworCSAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IG4xOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBIYW5kbGUgc2l4dGggbGV2ZWwgZXhwcmVzc2lvbjoKKyAqICBudW1iZXIJCW51bWJlciBjb25zdGFudAorICogICJzdHJpbmciCQlzdHJpbmcgY29udHN0YW50CisgKiAgJ3N0cmluZycJCWxpdGVyYWwgc3RyaW5nIGNvbnRzdGFudAorICogICZvcHRpb24tbmFtZQlvcHRpb24gdmFsdWUKKyAqICBAcgkJCXJlZ2lzdGVyIGNvbnRlbnRzCisgKiAgaWRlbnRpZmllcgkJdmFyaWFibGUgdmFsdWUKKyAqICBmdW5jdGlvbigpCQlmdW5jdGlvbiBjYWxsCisgKiAgJFZBUgkJZW52aXJvbm1lbnQgdmFyaWFibGUKKyAqICAoZXhwcmVzc2lvbikJbmVzdGVkIGV4cHJlc3Npb24KKyAqCisgKiAgQWxzbyBoYW5kbGU6CisgKiAgISBpbiBmcm9udAkJbG9naWNhbCBOT1QKKyAqICAtIGluIGZyb250CQl1bmFyeSBtaW51cworICogICsgaW4gZnJvbnQJCXVuYXJ5IHBsdXMgKGlnbm9yZWQpCisgKiAgdHJhaWxpbmcgW10JCXN1YnNjcmlwdCBpbiBTdHJpbmcKKyAqCisgKiAiYXJnIiBtdXN0IHBvaW50IHRvIHRoZSBmaXJzdCBub24td2hpdGUgb2YgdGhlIGV4cHJlc3Npb24uCisgKiAiYXJnIiBpcyBhZHZhbmNlZCB0byB0aGUgbmV4dCBub24td2hpdGUgYWZ0ZXIgdGhlIHJlY29nbml6ZWQgZXhwcmVzc2lvbi4KKyAqCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2V2YWw3KGFyZywgcmV0dmFyLCBldmFsdWF0ZSkKKyAgICBjaGFyX3UJKiphcmc7CisgICAgVkFSCQlyZXR2YXI7CisgICAgaW50CQlldmFsdWF0ZTsKK3sKKyAgICB2YXIJCXZhcjI7CisgICAgbG9uZwluOworICAgIGludAkJbGVuOworICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCXZhbDsKKyAgICBjaGFyX3UJKnN0YXJ0X2xlYWRlciwgKmVuZF9sZWFkZXI7CisgICAgaW50CQlyZXQgPSBPSzsKKyAgICBjaGFyX3UJKmFsaWFzOworCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXNlIHZhcmlhYmxlIHNvIHRoYXQgY2xlYXJfdmFyKCkgY2FuJ3QgbWlzdGFrZSB0aGlzIGZvciBhIHN0cmluZworICAgICAqIGFuZCBmcmVlIGEgc3RyaW5nIHRoYXQgaXNuJ3QgdGhlcmUuCisgICAgICovCisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9VTktOT1dOOworCisgICAgLyoKKyAgICAgKiBTa2lwICchJyBhbmQgJy0nIGNoYXJhY3RlcnMuICBUaGV5IGFyZSBoYW5kbGVkIGxhdGVyLgorICAgICAqLworICAgIHN0YXJ0X2xlYWRlciA9ICphcmc7CisgICAgd2hpbGUgKCoqYXJnID09ICchJyB8fCAqKmFyZyA9PSAnLScgfHwgKiphcmcgPT0gJysnKQorCSphcmcgPSBza2lwd2hpdGUoKmFyZyArIDEpOworICAgIGVuZF9sZWFkZXIgPSAqYXJnOworCisgICAgc3dpdGNoICgqKmFyZykKKyAgICB7CisgICAgLyoKKyAgICAgKiBOdW1iZXIgY29uc3RhbnQuCisgICAgICovCisgICAgY2FzZSAnMCc6CisgICAgY2FzZSAnMSc6CisgICAgY2FzZSAnMic6CisgICAgY2FzZSAnMyc6CisgICAgY2FzZSAnNCc6CisgICAgY2FzZSAnNSc6CisgICAgY2FzZSAnNic6CisgICAgY2FzZSAnNyc6CisgICAgY2FzZSAnOCc6CisgICAgY2FzZSAnOSc6CisJCXZpbV9zdHIybnIoKmFyZywgTlVMTCwgJmxlbiwgVFJVRSwgVFJVRSwgJm4sIE5VTEwpOworCQkqYXJnICs9IGxlbjsKKwkJaWYgKGV2YWx1YXRlKQorCQl7CisJCSAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX05VTUJFUjsKKwkJICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gbjsKKwkJfQorCQlicmVhazsKKworICAgIC8qCisgICAgICogU3RyaW5nIGNvbnN0YW50OiAic3RyaW5nIi4KKyAgICAgKi8KKyAgICBjYXNlICciJzoJcmV0ID0gZ2V0X3N0cmluZ192YXIoYXJnLCByZXR2YXIsIGV2YWx1YXRlKTsKKwkJYnJlYWs7CisKKyAgICAvKgorICAgICAqIExpdGVyYWwgc3RyaW5nIGNvbnN0YW50OiAnc3RyaW5nJy4KKyAgICAgKi8KKyAgICBjYXNlICdcJyc6CXJldCA9IGdldF9saXRfc3RyaW5nX3ZhcihhcmcsIHJldHZhciwgZXZhbHVhdGUpOworCQlicmVhazsKKworICAgIC8qCisgICAgICogT3B0aW9uIHZhbHVlOiAmbmFtZQorICAgICAqLworICAgIGNhc2UgJyYnOglyZXQgPSBnZXRfb3B0aW9uX3ZhcihhcmcsIHJldHZhciwgZXZhbHVhdGUpOworCQlicmVhazsKKworICAgIC8qCisgICAgICogRW52aXJvbm1lbnQgdmFyaWFibGU6ICRWQVIuCisgICAgICovCisgICAgY2FzZSAnJCc6CXJldCA9IGdldF9lbnZfdmFyKGFyZywgcmV0dmFyLCBldmFsdWF0ZSk7CisJCWJyZWFrOworCisgICAgLyoKKyAgICAgKiBSZWdpc3RlciBjb250ZW50czogQHIuCisgICAgICovCisgICAgY2FzZSAnQCc6CSsrKmFyZzsKKwkJaWYgKGV2YWx1YXRlKQorCQl7CisJCSAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKwkJICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gZ2V0X3JlZ19jb250ZW50cygqKmFyZywgRkFMU0UpOworCQl9CisJCWlmICgqKmFyZyAhPSBOVUwpCisJCSAgICArKyphcmc7CisJCWJyZWFrOworCisgICAgLyoKKyAgICAgKiBuZXN0ZWQgZXhwcmVzc2lvbjogKGV4cHJlc3Npb24pLgorICAgICAqLworICAgIGNhc2UgJygnOgkqYXJnID0gc2tpcHdoaXRlKCphcmcgKyAxKTsKKwkJcmV0ID0gZXZhbDEoYXJnLCByZXR2YXIsIGV2YWx1YXRlKTsJLyogcmVjdXJzaXZlISAqLworCQlpZiAoKiphcmcgPT0gJyknKQorCQkgICAgKysqYXJnOworCQllbHNlIGlmIChyZXQgPT0gT0spCisJCXsKKwkJICAgIEVNU0coXygiRTExMDogTWlzc2luZyAnKSciKSk7CisJCSAgICBjbGVhcl92YXIocmV0dmFyKTsKKwkJICAgIHJldCA9IEZBSUw7CisJCX0KKwkJYnJlYWs7CisKKyAgICAvKgorICAgICAqIE11c3QgYmUgYSB2YXJpYWJsZSBvciBmdW5jdGlvbiBuYW1lIHRoZW4uCisgICAgICovCisgICAgZGVmYXVsdDoJcyA9ICphcmc7CisJCWxlbiA9IGdldF9mdW5jX2xlbihhcmcsICZhbGlhcywgZXZhbHVhdGUpOworCQlpZiAoYWxpYXMgIT0gTlVMTCkKKwkJICAgIHMgPSBhbGlhczsKKworCQlpZiAobGVuID09IDApCisJCSAgICByZXQgPSBGQUlMOworCQllbHNlCisJCXsKKwkJICAgIGlmICgqKmFyZyA9PSAnKCcpCQkvKiByZWN1cnNpdmUhICovCisJCSAgICB7CisJCQlyZXQgPSBnZXRfZnVuY192YXIocywgbGVuLCByZXR2YXIsIGFyZywKKwkJCQkgIGN1cndpbi0+d19jdXJzb3IubG51bSwgY3Vyd2luLT53X2N1cnNvci5sbnVtLAorCQkJCSAgJmxlbiwgZXZhbHVhdGUpOworCQkJLyogU3RvcCB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHdoZW4gaW1tZWRpYXRlbHkKKwkJCSAqIGFib3J0aW5nIG9uIGVycm9yLCBvciB3aGVuIGFuIGludGVycnVwdCBvY2N1cnJlZCBvcgorCQkJICogYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24gYnV0IG5vdCBjYXVnaHQuICovCisJCQlpZiAoYWJvcnRpbmcoKSkKKwkJCXsKKwkJCSAgICBpZiAocmV0ID09IE9LKQorCQkJCWNsZWFyX3ZhcihyZXR2YXIpOworCQkJICAgIHJldCA9IEZBSUw7CisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChldmFsdWF0ZSkKKwkJCXJldCA9IGdldF92YXJfdmFyKHMsIGxlbiwgcmV0dmFyKTsKKwkJfQorCisJCWlmIChhbGlhcyAhPSBOVUxMKQorCQkgICAgdmltX2ZyZWUoYWxpYXMpOworCisJCWJyZWFrOworICAgIH0KKyAgICAqYXJnID0gc2tpcHdoaXRlKCphcmcpOworCisgICAgLyoKKyAgICAgKiBIYW5kbGUgZXhwcltleHByXSBzdWJzY3JpcHQuCisgICAgICovCisgICAgaWYgKCoqYXJnID09ICdbJyAmJiByZXQgPT0gT0spCisgICAgeworCS8qCisJICogR2V0IHRoZSB2YXJpYWJsZSBmcm9tIGluc2lkZSB0aGUgW10uCisJICovCisJKmFyZyA9IHNraXB3aGl0ZSgqYXJnICsgMSk7CisJaWYgKGV2YWwxKGFyZywgJnZhcjIsIGV2YWx1YXRlKSA9PSBGQUlMKQkvKiByZWN1cnNpdmUhICovCisJeworCSAgICBjbGVhcl92YXIocmV0dmFyKTsKKwkgICAgcmV0dXJuIEZBSUw7CisJfQorCisJLyogQ2hlY2sgZm9yIHRoZSAnXScuICovCisJaWYgKCoqYXJnICE9ICddJykKKwl7CisJICAgIEVNU0coXygiRTExMTogTWlzc2luZyAnXSciKSk7CisJICAgIGNsZWFyX3ZhcihyZXR2YXIpOworCSAgICBjbGVhcl92YXIoJnZhcjIpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisKKwlpZiAoZXZhbHVhdGUpCisJeworCSAgICBuID0gZ2V0X3Zhcl9udW1iZXIoJnZhcjIpOworCSAgICBjbGVhcl92YXIoJnZhcjIpOworCisJICAgIC8qCisJICAgICAqIFRoZSByZXN1bHRpbmcgdmFyaWFibGUgaXMgYSBzdHJpbmcgb2YgYSBzaW5nbGUgY2hhcmFjdGVyLgorCSAgICAgKiBJZiB0aGUgaW5kZXggaXMgdG9vIGJpZyBvciBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBlbXB0eS4KKwkgICAgICovCisJICAgIHMgPSBnZXRfdmFyX3N0cmluZyhyZXR2YXIpOworCSAgICBpZiAobiA+PSAobG9uZylTVFJMRU4ocykgfHwgbiA8IDApCisJCXMgPSBOVUxMOworCSAgICBlbHNlCisJCXMgPSB2aW1fc3RybnNhdmUocyArIG4sIDEpOworCSAgICBjbGVhcl92YXIocmV0dmFyKTsKKwkgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisJICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gczsKKwl9CisJKmFyZyA9IHNraXB3aGl0ZSgqYXJnICsgMSk7CS8qIHNraXAgdGhlICddJyAqLworICAgIH0KKworICAgIC8qCisgICAgICogQXBwbHkgbG9naWNhbCBOT1QgYW5kIHVuYXJ5ICctJywgZnJvbSByaWdodCB0byBsZWZ0LCBpZ25vcmUgJysnLgorICAgICAqLworICAgIGlmIChyZXQgPT0gT0sgJiYgZXZhbHVhdGUgJiYgZW5kX2xlYWRlciA+IHN0YXJ0X2xlYWRlcikKKyAgICB7CisJdmFsID0gZ2V0X3Zhcl9udW1iZXIocmV0dmFyKTsKKwl3aGlsZSAoZW5kX2xlYWRlciA+IHN0YXJ0X2xlYWRlcikKKwl7CisJICAgIC0tZW5kX2xlYWRlcjsKKwkgICAgaWYgKCplbmRfbGVhZGVyID09ICchJykKKwkJdmFsID0gIXZhbDsKKwkgICAgZWxzZSBpZiAoKmVuZF9sZWFkZXIgPT0gJy0nKQorCQl2YWwgPSAtdmFsOworCX0KKwljbGVhcl92YXIocmV0dmFyKTsKKwlyZXR2YXItPnZhcl90eXBlID0gVkFSX05VTUJFUjsKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IHZhbDsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKgorICogR2V0IGFuIG9wdGlvbiB2YWx1ZS4KKyAqICJhcmciIHBvaW50cyB0byB0aGUgJyYnIG9yICcrJyBiZWZvcmUgdGhlIG9wdGlvbiBuYW1lLgorICogImFyZyIgaXMgYWR2YW5jZWQgdG8gY2hhcmFjdGVyIGFmdGVyIHRoZSBvcHRpb24gbmFtZS4KKyAqIFJldHVybiBPSyBvciBGQUlMLgorICovCisgICAgc3RhdGljIGludAorZ2V0X29wdGlvbl92YXIoYXJnLCByZXR2YXIsIGV2YWx1YXRlKQorICAgIGNoYXJfdQkqKmFyZzsKKyAgICBWQVIJCXJldHZhcjsJCS8qIHdoZW4gTlVMTCwgb25seSBjaGVjayBpZiBvcHRpb24gZXhpc3RzICovCisgICAgaW50CQlldmFsdWF0ZTsKK3sKKyAgICBjaGFyX3UJKm9wdGlvbl9lbmQ7CisgICAgbG9uZwludW12YWw7CisgICAgY2hhcl91CSpzdHJpbmd2YWw7CisgICAgaW50CQlvcHRfdHlwZTsKKyAgICBpbnQJCWM7CisgICAgaW50CQl3b3JraW5nID0gKCoqYXJnID09ICcrJyk7ICAgIC8qIGhhcygiK29wdGlvbiIpICovCisgICAgaW50CQlyZXQgPSBPSzsKKyAgICBpbnQJCW9wdF9mbGFnczsKKworICAgIC8qCisgICAgICogSXNvbGF0ZSB0aGUgb3B0aW9uIG5hbWUgYW5kIGZpbmQgaXRzIHZhbHVlLgorICAgICAqLworICAgIG9wdGlvbl9lbmQgPSBmaW5kX29wdGlvbl9lbmQoYXJnLCAmb3B0X2ZsYWdzKTsKKyAgICBpZiAob3B0aW9uX2VuZCA9PSBOVUxMKQorICAgIHsKKwlpZiAocmV0dmFyICE9IE5VTEwpCisJICAgIEVNU0cyKF8oIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIiksICphcmcpOworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIGlmICghZXZhbHVhdGUpCisgICAgeworCSphcmcgPSBvcHRpb25fZW5kOworCXJldHVybiBPSzsKKyAgICB9CisKKyAgICBjID0gKm9wdGlvbl9lbmQ7CisgICAgKm9wdGlvbl9lbmQgPSBOVUw7CisgICAgb3B0X3R5cGUgPSBnZXRfb3B0aW9uX3ZhbHVlKCphcmcsICZudW12YWwsCisJCQkgICAgICAgcmV0dmFyID09IE5VTEwgPyBOVUxMIDogJnN0cmluZ3ZhbCwgb3B0X2ZsYWdzKTsKKworICAgIGlmIChvcHRfdHlwZSA9PSAtMykJCQkvKiBpbnZhbGlkIG5hbWUgKi8KKyAgICB7CisJaWYgKHJldHZhciAhPSBOVUxMKQorCSAgICBFTVNHMihfKCJFMTEzOiBVbmtub3duIG9wdGlvbjogJXMiKSwgKmFyZyk7CisJcmV0ID0gRkFJTDsKKyAgICB9CisgICAgZWxzZSBpZiAocmV0dmFyICE9IE5VTEwpCisgICAgeworCWlmIChvcHRfdHlwZSA9PSAtMikJCS8qIGhpZGRlbiBzdHJpbmcgb3B0aW9uICovCisJeworCSAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKwkgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBOVUxMOworCX0KKwllbHNlIGlmIChvcHRfdHlwZSA9PSAtMSkJLyogaGlkZGVuIG51bWJlciBvcHRpb24gKi8KKwl7CisJICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfTlVNQkVSOworCSAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7CisJfQorCWVsc2UgaWYgKG9wdF90eXBlID09IDEpCQkvKiBudW1iZXIgb3B0aW9uICovCisJeworCSAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX05VTUJFUjsKKwkgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBudW12YWw7CisJfQorCWVsc2UJCQkJLyogc3RyaW5nIG9wdGlvbiAqLworCXsKKwkgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisJICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gc3RyaW5ndmFsOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAod29ya2luZyAmJiAob3B0X3R5cGUgPT0gLTIgfHwgb3B0X3R5cGUgPT0gLTEpKQorCXJldCA9IEZBSUw7CisKKyAgICAqb3B0aW9uX2VuZCA9IGM7CQkgICAgLyogcHV0IGJhY2sgZm9yIGVycm9yIG1lc3NhZ2VzICovCisgICAgKmFyZyA9IG9wdGlvbl9lbmQ7CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKgorICogQWxsb2NhdGUgYSB2YXJpYWJsZSBmb3IgYSBzdHJpbmcgY29uc3RhbnQuCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2dldF9zdHJpbmdfdmFyKGFyZywgcmV0dmFyLCBldmFsdWF0ZSkKKyAgICBjaGFyX3UJKiphcmc7CisgICAgVkFSCQlyZXR2YXI7CisgICAgaW50CQlldmFsdWF0ZTsKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJaTsKKyAgICBpbnQJCWV4dHJhID0gMDsKKworICAgIC8qCisgICAgICogRmluZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHNraXBwaW5nIGJhY2tzbGFzaGVkIGNoYXJhY3RlcnMuCisgICAgICovCisgICAgZm9yIChwID0gKmFyZyArIDE7ICpwICYmICpwICE9ICciJzsgKytwKQorICAgIHsKKwlpZiAoKnAgPT0gJ1xcJyAmJiBwWzFdICE9IE5VTCkKKwl7CisJICAgICsrcDsKKwkgICAgLyogQSAiXDx4PiIgZm9ybSBvY2N1cGllcyBhdCBsZWFzdCA0IGNoYXJhY3RlcnMsIGFuZCBwcm9kdWNlcyB1cAorCSAgICAgKiB0byA2IGNoYXJhY3RlcnM6IHJlc2VydmUgc3BhY2UgZm9yIDIgZXh0cmEgKi8KKwkgICAgaWYgKCpwID09ICc8JykKKwkJZXh0cmEgKz0gMjsKKwl9CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoKnAgIT0gJyInKQorICAgIHsKKwlFTVNHMihfKCJFMTE0OiBNaXNzaW5nIHF1b3RlOiAlcyIpLCAqYXJnKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBJZiBvbmx5IHBhcnNpbmcsIHNldCAqYXJnIGFuZCByZXR1cm4gaGVyZSAqLworICAgIGlmICghZXZhbHVhdGUpCisgICAgeworCSphcmcgPSBwICsgMTsKKwlyZXR1cm4gT0s7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDb3B5IHRoZSBzdHJpbmcgaW50byBhbGxvY2F0ZWQgbWVtb3J5LCBoYW5kbGluZyBiYWNrc2xhc2hlZAorICAgICAqIGNoYXJhY3RlcnMuCisgICAgICovCisgICAgbmFtZSA9IGFsbG9jKCh1bnNpZ25lZCkocCAtICphcmcgKyBleHRyYSkpOworICAgIGlmIChuYW1lID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBpID0gMDsKKyAgICBmb3IgKHAgPSAqYXJnICsgMTsgKnAgJiYgKnAgIT0gJyInOyArK3ApCisgICAgeworCWlmICgqcCA9PSAnXFwnKQorCXsKKwkgICAgc3dpdGNoICgqKytwKQorCSAgICB7CisJCWNhc2UgJ2InOiBuYW1lW2krK10gPSBCUzsgYnJlYWs7CisJCWNhc2UgJ2UnOiBuYW1lW2krK10gPSBFU0M7IGJyZWFrOworCQljYXNlICdmJzogbmFtZVtpKytdID0gRkY7IGJyZWFrOworCQljYXNlICduJzogbmFtZVtpKytdID0gTkw7IGJyZWFrOworCQljYXNlICdyJzogbmFtZVtpKytdID0gQ0FSOyBicmVhazsKKwkJY2FzZSAndCc6IG5hbWVbaSsrXSA9IFRBQjsgYnJlYWs7CisKKwkJY2FzZSAnWCc6IC8qIGhleDogIlx4MSIsICJceDEyIiAqLworCQljYXNlICd4JzoKKwkJY2FzZSAndSc6IC8qIFVuaWNvZGU6ICJcdTAwMjMiICovCisJCWNhc2UgJ1UnOgorCQkJICBpZiAodmltX2lzeGRpZ2l0KHBbMV0pKQorCQkJICB7CisJCQkgICAgICBpbnQJbiwgbnI7CisJCQkgICAgICBpbnQJYyA9IHRvdXBwZXIoKnApOworCisJCQkgICAgICBpZiAoYyA9PSAnWCcpCisJCQkJICBuID0gMjsKKwkJCSAgICAgIGVsc2UKKwkJCQkgIG4gPSA0OworCQkJICAgICAgbnIgPSAwOworCQkJICAgICAgd2hpbGUgKC0tbiA+PSAwICYmIHZpbV9pc3hkaWdpdChwWzFdKSkKKwkJCSAgICAgIHsKKwkJCQkgICsrcDsKKwkJCQkgIG5yID0gKG5yIDw8IDQpICsgaGV4Mm5yKCpwKTsKKwkJCSAgICAgIH0KKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgICAvKiBGb3IgIlx1IiBzdG9yZSB0aGUgbnVtYmVyIGFjY29yZGluZyB0bworCQkJICAgICAgICogJ2VuY29kaW5nJy4gKi8KKwkJCSAgICAgIGlmIChjICE9ICdYJykKKwkJCQkgIGkgKz0gKCptYl9jaGFyMmJ5dGVzKShuciwgbmFtZSArIGkpOworCQkJICAgICAgZWxzZQorI2VuZGlmCisJCQkJICBuYW1lW2krK10gPSBucjsKKwkJCSAgfQorCQkJICBlbHNlCisJCQkgICAgICBuYW1lW2krK10gPSAqcDsKKwkJCSAgYnJlYWs7CisKKwkJCSAgLyogb2N0YWw6ICJcMSIsICJcMTIiLCAiXDEyMyIgKi8KKwkJY2FzZSAnMCc6CisJCWNhc2UgJzEnOgorCQljYXNlICcyJzoKKwkJY2FzZSAnMyc6CisJCWNhc2UgJzQnOgorCQljYXNlICc1JzoKKwkJY2FzZSAnNic6CisJCWNhc2UgJzcnOiBuYW1lW2ldID0gKnAgLSAnMCc7CisJCQkgIGlmIChwWzFdID49ICcwJyAmJiBwWzFdIDw9ICc3JykKKwkJCSAgeworCQkJICAgICAgKytwOworCQkJICAgICAgbmFtZVtpXSA9IChuYW1lW2ldIDw8IDMpICsgKnAgLSAnMCc7CisJCQkgICAgICBpZiAocFsxXSA+PSAnMCcgJiYgcFsxXSA8PSAnNycpCisJCQkgICAgICB7CisJCQkJICArK3A7CisJCQkJICBuYW1lW2ldID0gKG5hbWVbaV0gPDwgMykgKyAqcCAtICcwJzsKKwkJCSAgICAgIH0KKwkJCSAgfQorCQkJICArK2k7CisJCQkgIGJyZWFrOworCisJCQkgICAgLyogU3BlY2lhbCBrZXksIGUuZy46ICJcPEMtVz4iICovCisJCWNhc2UgJzwnOiBleHRyYSA9IHRyYW5zX3NwZWNpYWwoJnAsIG5hbWUgKyBpLCBUUlVFKTsKKwkJCSAgaWYgKGV4dHJhICE9IDApCisJCQkgIHsKKwkJCSAgICAgIGkgKz0gZXh0cmE7CisJCQkgICAgICAtLXA7CisJCQkgICAgICBicmVhazsKKwkJCSAgfQorCQkJICAvKiBGQUxMVEhST1VHSCAqLworCisJCWRlZmF1bHQ6ICBuYW1lW2krK10gPSAqcDsKKwkJCSAgYnJlYWs7CisJICAgIH0KKwl9CisJZWxzZQorCSAgICBuYW1lW2krK10gPSAqcDsKKworI2lmZGVmIEZFQVRfTUJZVEUKKwkvKiBGb3IgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciBjb3B5IHRoZSBieXRlcyBhZnRlciB0aGUgZmlyc3Qgb25lLiAqLworCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBpbnQJbCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7CisKKwkgICAgd2hpbGUgKC0tbCA+IDApCisJCW5hbWVbaSsrXSA9ICorK3A7CisJfQorI2VuZGlmCisgICAgfQorICAgIG5hbWVbaV0gPSBOVUw7CisgICAgKmFyZyA9IHAgKyAxOworCisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBuYW1lOworCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogQWxsb2NhdGUgYSB2YXJpYWJsZSBmb3IgYW4gYmFja3RpY2stc3RyaW5nIGNvbnN0YW50LgorICogUmV0dXJuIE9LIG9yIEZBSUwuCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfbGl0X3N0cmluZ192YXIoYXJnLCByZXR2YXIsIGV2YWx1YXRlKQorICAgIGNoYXJfdQkqKmFyZzsKKyAgICBWQVIJCXJldHZhcjsKKyAgICBpbnQJCWV2YWx1YXRlOworeworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKm5hbWU7CisKKyAgICAvKgorICAgICAqIEZpbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorICAgICAqLworICAgIHAgPSB2aW1fc3RyY2hyKCphcmcgKyAxLCAnXCcnKTsKKyAgICBpZiAocCA9PSBOVUxMKQorICAgIHsKKwlFTVNHMihfKCJFMTE1OiBNaXNzaW5nIHF1b3RlOiAlcyIpLCAqYXJnKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICBpZiAoZXZhbHVhdGUpCisgICAgeworCS8qCisJICogQ29weSB0aGUgc3RyaW5nIGludG8gYWxsb2NhdGVkIG1lbW9yeS4KKwkgKi8KKwluYW1lID0gdmltX3N0cm5zYXZlKCphcmcgKyAxLCAoaW50KShwIC0gKCphcmcgKyAxKSkpOworCWlmIChuYW1lID09IE5VTEwpCisJICAgIHJldHVybiBGQUlMOworCisJcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisJcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBuYW1lOworICAgIH0KKworICAgICphcmcgPSBwICsgMTsKKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIEdldCB0aGUgdmFsdWUgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCisgKiAiYXJnIiBpcyBwb2ludGluZyB0byB0aGUgJyQnLiAgSXQgaXMgYWR2YW5jZWQgdG8gYWZ0ZXIgdGhlIG5hbWUuCisgKiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2FzIG5vdCBzZXQsIHNpbGVudGx5IGFzc3VtZSBpdCBpcyBlbXB0eS4KKyAqIEFsd2F5cyByZXR1cm4gT0suCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfZW52X3ZhcihhcmcsIHJldHZhciwgZXZhbHVhdGUpCisgICAgY2hhcl91CSoqYXJnOworICAgIFZBUgkJcmV0dmFyOworICAgIGludAkJZXZhbHVhdGU7Cit7CisgICAgY2hhcl91CSpzdHJpbmcgPSBOVUxMOworICAgIGludAkJbGVuOworICAgIGludAkJY2M7CisgICAgY2hhcl91CSpuYW1lOworCisgICAgKysqYXJnOworICAgIG5hbWUgPSAqYXJnOworICAgIGxlbiA9IGdldF9lbnZfbGVuKGFyZyk7CisgICAgaWYgKGV2YWx1YXRlKQorICAgIHsKKwlpZiAobGVuICE9IDApCisJeworCSAgICBjYyA9IG5hbWVbbGVuXTsKKwkgICAgbmFtZVtsZW5dID0gTlVMOworCSAgICAvKiBmaXJzdCB0cnkgbWNoX2dldGVudigpLCBmYXN0IGZvciBub3JtYWwgZW52aXJvbm1lbnQgdmFycyAqLworCSAgICBzdHJpbmcgPSBtY2hfZ2V0ZW52KG5hbWUpOworCSAgICBpZiAoc3RyaW5nICE9IE5VTEwgJiYgKnN0cmluZyAhPSBOVUwpCisJCXN0cmluZyA9IHZpbV9zdHJzYXZlKHN0cmluZyk7CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBuZXh0IHRyeSBleHBhbmRpbmcgdGhpbmdzIGxpa2UgJFZJTSBhbmQgJHtIT01FfSAqLworCQlzdHJpbmcgPSBleHBhbmRfZW52X3NhdmUobmFtZSAtIDEpOworCQlpZiAoc3RyaW5nICE9IE5VTEwgJiYgKnN0cmluZyA9PSAnJCcpCisJCXsKKwkJICAgIHZpbV9mcmVlKHN0cmluZyk7CisJCSAgICBzdHJpbmcgPSBOVUxMOworCQl9CisJICAgIH0KKwkgICAgbmFtZVtsZW5dID0gY2M7CisJfQorCXJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gc3RyaW5nOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIEFycmF5IHdpdGggbmFtZXMgYW5kIG51bWJlciBvZiBhcmd1bWVudHMgb2YgYWxsIGludGVybmFsIGZ1bmN0aW9ucworICogTVVTVCBCRSBLRVBUIFNPUlRFRCBJTiBzdHJjbXAoKSBPUkRFUiBGT1IgQklOQVJZIFNFQVJDSCEKKyAqLworc3RhdGljIHN0cnVjdCBmc3QKK3sKKyAgICBjaGFyCSpmX25hbWU7CS8qIGZ1bmN0aW9uIG5hbWUgKi8KKyAgICBjaGFyCWZfbWluX2FyZ2M7CS8qIG1pbmltYWwgbnVtYmVyIG9mIGFyZ3VtZW50cyAqLworICAgIGNoYXIJZl9tYXhfYXJnYzsJLyogbWF4aW1hbCBudW1iZXIgb2YgYXJndW1lbnRzICovCisgICAgdm9pZAkoKmZfZnVuYykgX19BUkdTKChWQVIgYXJncywgVkFSIHJ2YXIpKTsgLyogaW1wbC4gZnVuY3Rpb24gKi8KK30gZnVuY3Rpb25zW10gPQoreworICAgIHsiYXBwZW5kIiwJCTIsIDIsIGZfYXBwZW5kfSwKKyAgICB7ImFyZ2MiLAkJMCwgMCwgZl9hcmdjfSwKKyAgICB7ImFyZ2lkeCIsCQkwLCAwLCBmX2FyZ2lkeH0sCisgICAgeyJhcmd2IiwJCTEsIDEsIGZfYXJndn0sCisgICAgeyJicm93c2UiLAkJNCwgNCwgZl9icm93c2V9LAorICAgIHsiYnVmZXhpc3RzIiwJMSwgMSwgZl9idWZleGlzdHN9LAorICAgIHsiYnVmZmVyX2V4aXN0cyIsCTEsIDEsIGZfYnVmZXhpc3RzfSwJLyogb2Jzb2xldGUgKi8KKyAgICB7ImJ1ZmZlcl9uYW1lIiwJMSwgMSwgZl9idWZuYW1lfSwJLyogb2Jzb2xldGUgKi8KKyAgICB7ImJ1ZmZlcl9udW1iZXIiLAkxLCAxLCBmX2J1Zm5yfSwJCS8qIG9ic29sZXRlICovCisgICAgeyJidWZsaXN0ZWQiLAkxLCAxLCBmX2J1Zmxpc3RlZH0sCisgICAgeyJidWZsb2FkZWQiLAkxLCAxLCBmX2J1ZmxvYWRlZH0sCisgICAgeyJidWZuYW1lIiwJCTEsIDEsIGZfYnVmbmFtZX0sCisgICAgeyJidWZuciIsCQkxLCAxLCBmX2J1Zm5yfSwKKyAgICB7ImJ1Zndpbm5yIiwJMSwgMSwgZl9idWZ3aW5ucn0sCisgICAgeyJieXRlMmxpbmUiLAkxLCAxLCBmX2J5dGUybGluZX0sCisgICAgeyJjaGFyMm5yIiwJCTEsIDEsIGZfY2hhcjJucn0sCisgICAgeyJjaW5kZW50IiwJCTEsIDEsIGZfY2luZGVudH0sCisgICAgeyJjb2wiLAkJMSwgMSwgZl9jb2x9LAorICAgIHsiY29uZmlybSIsCQkxLCA0LCBmX2NvbmZpcm19LAorICAgIHsiY3Njb3BlX2Nvbm5lY3Rpb24iLDAsMywgZl9jc2NvcGVfY29ubmVjdGlvbn0sCisgICAgeyJjdXJzb3IiLAkJMiwgMiwgZl9jdXJzb3J9LAorICAgIHsiZGVsZXRlIiwJCTEsIDEsIGZfZGVsZXRlfSwKKyAgICB7ImRpZF9maWxldHlwZSIsCTAsIDAsIGZfZGlkX2ZpbGV0eXBlfSwKKyAgICB7ImVzY2FwZSIsCQkyLCAyLCBmX2VzY2FwZX0sCisgICAgeyJldmVudGhhbmRsZXIiLAkwLCAwLCBmX2V2ZW50aGFuZGxlcn0sCisgICAgeyJleGVjdXRhYmxlIiwJMSwgMSwgZl9leGVjdXRhYmxlfSwKKyAgICB7ImV4aXN0cyIsCQkxLCAxLCBmX2V4aXN0c30sCisgICAgeyJleHBhbmQiLAkJMSwgMiwgZl9leHBhbmR9LAorICAgIHsiZmlsZV9yZWFkYWJsZSIsCTEsIDEsIGZfZmlsZXJlYWRhYmxlfSwJLyogb2Jzb2xldGUgKi8KKyAgICB7ImZpbGVyZWFkYWJsZSIsCTEsIDEsIGZfZmlsZXJlYWRhYmxlfSwKKyAgICB7ImZpbGV3cml0YWJsZSIsCTEsIDEsIGZfZmlsZXdyaXRhYmxlfSwKKyAgICB7ImZuYW1lbW9kaWZ5IiwJMiwgMiwgZl9mbmFtZW1vZGlmeX0sCisgICAgeyJmb2xkY2xvc2VkIiwJMSwgMSwgZl9mb2xkY2xvc2VkfSwKKyAgICB7ImZvbGRjbG9zZWRlbmQiLAkxLCAxLCBmX2ZvbGRjbG9zZWRlbmR9LAorICAgIHsiZm9sZGxldmVsIiwJMSwgMSwgZl9mb2xkbGV2ZWx9LAorICAgIHsiZm9sZHRleHQiLAkwLCAwLCBmX2ZvbGR0ZXh0fSwKKyAgICB7ImZvcmVncm91bmQiLAkwLCAwLCBmX2ZvcmVncm91bmR9LAorICAgIHsiZ2V0YnVmdmFyIiwJMiwgMiwgZl9nZXRidWZ2YXJ9LAorICAgIHsiZ2V0Y2hhciIsCQkwLCAxLCBmX2dldGNoYXJ9LAorICAgIHsiZ2V0Y2hhcm1vZCIsCTAsIDAsIGZfZ2V0Y2hhcm1vZH0sCisgICAgeyJnZXRjbWRsaW5lIiwJMCwgMCwgZl9nZXRjbWRsaW5lfSwKKyAgICB7ImdldGNtZHBvcyIsCTAsIDAsIGZfZ2V0Y21kcG9zfSwKKyAgICB7ImdldGN3ZCIsCQkwLCAwLCBmX2dldGN3ZH0sCisgICAgeyJnZXRmc2l6ZSIsCTEsIDEsIGZfZ2V0ZnNpemV9LAorICAgIHsiZ2V0ZnRpbWUiLAkxLCAxLCBmX2dldGZ0aW1lfSwKKyAgICB7ImdldGxpbmUiLAkJMSwgMSwgZl9nZXRsaW5lfSwKKyAgICB7ImdldHJlZyIsCQkwLCAxLCBmX2dldHJlZ30sCisgICAgeyJnZXRyZWd0eXBlIiwJMCwgMSwgZl9nZXRyZWd0eXBlfSwKKyAgICB7ImdldHdpbnBvc3giLAkwLCAwLCBmX2dldHdpbnBvc3h9LAorICAgIHsiZ2V0d2lucG9zeSIsCTAsIDAsIGZfZ2V0d2lucG9zeX0sCisgICAgeyJnZXR3aW52YXIiLAkyLCAyLCBmX2dldHdpbnZhcn0sCisgICAgeyJnbG9iIiwJCTEsIDEsIGZfZ2xvYn0sCisgICAgeyJnbG9icGF0aCIsCTIsIDIsIGZfZ2xvYnBhdGh9LAorICAgIHsiaGFzIiwJCTEsIDEsIGZfaGFzfSwKKyAgICB7Imhhc21hcHRvIiwJMSwgMiwgZl9oYXNtYXB0b30sCisgICAgeyJoaWdobGlnaHRJRCIsCTEsIDEsIGZfaGxJRH0sCQkvKiBvYnNvbGV0ZSAqLworICAgIHsiaGlnaGxpZ2h0X2V4aXN0cyIsMSwgMSwgZl9obGV4aXN0c30sCS8qIG9ic29sZXRlICovCisgICAgeyJoaXN0YWRkIiwJCTIsIDIsIGZfaGlzdGFkZH0sCisgICAgeyJoaXN0ZGVsIiwJCTEsIDIsIGZfaGlzdGRlbH0sCisgICAgeyJoaXN0Z2V0IiwJCTEsIDIsIGZfaGlzdGdldH0sCisgICAgeyJoaXN0bnIiLAkJMSwgMSwgZl9oaXN0bnJ9LAorICAgIHsiaGxJRCIsCQkxLCAxLCBmX2hsSUR9LAorICAgIHsiaGxleGlzdHMiLAkxLCAxLCBmX2hsZXhpc3RzfSwKKyAgICB7Imhvc3RuYW1lIiwJMCwgMCwgZl9ob3N0bmFtZX0sCisgICAgeyJpY29udiIsCQkzLCAzLCBmX2ljb252fSwKKyAgICB7ImluZGVudCIsCQkxLCAxLCBmX2luZGVudH0sCisgICAgeyJpbnB1dCIsCQkxLCAyLCBmX2lucHV0fSwKKyAgICB7ImlucHV0ZGlhbG9nIiwJMSwgMywgZl9pbnB1dGRpYWxvZ30sCisgICAgeyJpbnB1dHJlc3RvcmUiLAkwLCAwLCBmX2lucHV0cmVzdG9yZX0sCisgICAgeyJpbnB1dHNhdmUiLAkwLCAwLCBmX2lucHV0c2F2ZX0sCisgICAgeyJpbnB1dHNlY3JldCIsCTEsIDIsIGZfaW5wdXRzZWNyZXR9LAorICAgIHsiaXNkaXJlY3RvcnkiLAkxLCAxLCBmX2lzZGlyZWN0b3J5fSwKKyAgICB7Imxhc3RfYnVmZmVyX25yIiwJMCwgMCwgZl9sYXN0X2J1ZmZlcl9ucn0sLyogb2Jzb2xldGUgKi8KKyAgICB7ImxpYmNhbGwiLAkJMywgMywgZl9saWJjYWxsfSwKKyAgICB7ImxpYmNhbGxuciIsCTMsIDMsIGZfbGliY2FsbG5yfSwKKyAgICB7ImxpbmUiLAkJMSwgMSwgZl9saW5lfSwKKyAgICB7ImxpbmUyYnl0ZSIsCTEsIDEsIGZfbGluZTJieXRlfSwKKyAgICB7Imxpc3BpbmRlbnQiLAkxLCAxLCBmX2xpc3BpbmRlbnR9LAorICAgIHsibG9jYWx0aW1lIiwJMCwgMCwgZl9sb2NhbHRpbWV9LAorICAgIHsibWFwYXJnIiwJCTEsIDIsIGZfbWFwYXJnfSwKKyAgICB7Im1hcGNoZWNrIiwJMSwgMiwgZl9tYXBjaGVja30sCisgICAgeyJtYXRjaCIsCQkyLCAzLCBmX21hdGNofSwKKyAgICB7Im1hdGNoZW5kIiwJMiwgMywgZl9tYXRjaGVuZH0sCisgICAgeyJtYXRjaHN0ciIsCTIsIDMsIGZfbWF0Y2hzdHJ9LAorICAgIHsibW9kZSIsCQkwLCAwLCBmX21vZGV9LAorICAgIHsibmV4dG5vbmJsYW5rIiwJMSwgMSwgZl9uZXh0bm9uYmxhbmt9LAorICAgIHsibnIyY2hhciIsCQkxLCAxLCBmX25yMmNoYXJ9LAorICAgIHsicHJldm5vbmJsYW5rIiwJMSwgMSwgZl9wcmV2bm9uYmxhbmt9LAorICAgIHsicmVtb3RlX2V4cHIiLAkyLCAzLCBmX3JlbW90ZV9leHByfSwKKyAgICB7InJlbW90ZV9mb3JlZ3JvdW5kIiwgMSwgMSwgZl9yZW1vdGVfZm9yZWdyb3VuZH0sCisgICAgeyJyZW1vdGVfcGVlayIsCTEsIDIsIGZfcmVtb3RlX3BlZWt9LAorICAgIHsicmVtb3RlX3JlYWQiLAkxLCAxLCBmX3JlbW90ZV9yZWFkfSwKKyAgICB7InJlbW90ZV9zZW5kIiwJMiwgMywgZl9yZW1vdGVfc2VuZH0sCisgICAgeyJyZW5hbWUiLAkJMiwgMiwgZl9yZW5hbWV9LAorICAgIHsicmVzb2x2ZSIsCQkxLCAxLCBmX3Jlc29sdmV9LAorICAgIHsic2VhcmNoIiwJCTEsIDIsIGZfc2VhcmNofSwKKyAgICB7InNlYXJjaHBhaXIiLAkzLCA1LCBmX3NlYXJjaHBhaXJ9LAorICAgIHsic2VydmVyMmNsaWVudCIsCTIsIDIsIGZfc2VydmVyMmNsaWVudH0sCisgICAgeyJzZXJ2ZXJsaXN0IiwJMCwgMCwgZl9zZXJ2ZXJsaXN0fSwKKyAgICB7InNldGJ1ZnZhciIsCTMsIDMsIGZfc2V0YnVmdmFyfSwKKyAgICB7InNldGNtZHBvcyIsCTEsIDEsIGZfc2V0Y21kcG9zfSwKKyAgICB7InNldGxpbmUiLAkJMiwgMiwgZl9zZXRsaW5lfSwKKyAgICB7InNldHJlZyIsCQkyLCAzLCBmX3NldHJlZ30sCisgICAgeyJzZXR3aW52YXIiLAkzLCAzLCBmX3NldHdpbnZhcn0sCisgICAgeyJzaW1wbGlmeSIsCTEsIDEsIGZfc2ltcGxpZnl9LAorI2lmZGVmIEhBVkVfU1RSRlRJTUUKKyAgICB7InN0cmZ0aW1lIiwJMSwgMiwgZl9zdHJmdGltZX0sCisjZW5kaWYKKyAgICB7InN0cmlkeCIsCQkyLCAyLCBmX3N0cmlkeH0sCisgICAgeyJzdHJsZW4iLAkJMSwgMSwgZl9zdHJsZW59LAorICAgIHsic3RycGFydCIsCQkyLCAzLCBmX3N0cnBhcnR9LAorICAgIHsic3RycmlkeCIsCQkyLCAyLCBmX3N0cnJpZHh9LAorICAgIHsic3RydHJhbnMiLAkxLCAxLCBmX3N0cnRyYW5zfSwKKyAgICB7InN1Ym1hdGNoIiwJMSwgMSwgZl9zdWJtYXRjaH0sCisgICAgeyJzdWJzdGl0dXRlIiwJNCwgNCwgZl9zdWJzdGl0dXRlfSwKKyAgICB7InN5bklEIiwJCTMsIDMsIGZfc3luSUR9LAorICAgIHsic3luSURhdHRyIiwJMiwgMywgZl9zeW5JRGF0dHJ9LAorICAgIHsic3luSUR0cmFucyIsCTEsIDEsIGZfc3luSUR0cmFuc30sCisgICAgeyJzeXN0ZW0iLAkJMSwgMSwgZl9zeXN0ZW19LAorICAgIHsidGVtcG5hbWUiLAkwLCAwLCBmX3RlbXBuYW1lfSwKKyAgICB7InRvbG93ZXIiLAkJMSwgMSwgZl90b2xvd2VyfSwKKyAgICB7InRvdXBwZXIiLAkJMSwgMSwgZl90b3VwcGVyfSwKKyAgICB7InR5cGUiLAkJMSwgMSwgZl90eXBlfSwKKyAgICB7InZpcnRjb2wiLAkJMSwgMSwgZl92aXJ0Y29sfSwKKyAgICB7InZpc3VhbG1vZGUiLAkwLCAxLCBmX3Zpc3VhbG1vZGV9LAorICAgIHsid2luYnVmbnIiLAkxLCAxLCBmX3dpbmJ1Zm5yfSwKKyAgICB7IndpbmNvbCIsCQkwLCAwLCBmX3dpbmNvbH0sCisgICAgeyJ3aW5oZWlnaHQiLAkxLCAxLCBmX3dpbmhlaWdodH0sCisgICAgeyJ3aW5saW5lIiwJCTAsIDAsIGZfd2lubGluZX0sCisgICAgeyJ3aW5uciIsCQkwLCAwLCBmX3dpbm5yfSwKKyAgICB7IndpbnJlc3RjbWQiLAkwLCAwLCBmX3dpbnJlc3RjbWR9LAorICAgIHsid2lud2lkdGgiLAkxLCAxLCBmX3dpbndpZHRofSwKK307CisKKyNpZiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkgfHwgZGVmaW5lZChQUk9UTykKKworLyoKKyAqIEZ1bmN0aW9uIGdpdmVuIHRvIEV4cGFuZEdlbmVyaWMoKSB0byBvYnRhaW4gdGhlIGxpc3Qgb2YgaW50ZXJuYWwKKyAqIG9yIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBuYW1lcy4KKyAqLworICAgIGNoYXJfdSAqCitnZXRfZnVuY3Rpb25fbmFtZSh4cCwgaWR4KQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBpbnQJCWlkeDsKK3sKKyAgICBzdGF0aWMgaW50CWludGlkeCA9IC0xOworICAgIGNoYXJfdQkqbmFtZTsKKworICAgIGlmIChpZHggPT0gMCkKKwlpbnRpZHggPSAtMTsKKyAgICBpZiAoaW50aWR4IDwgMCkKKyAgICB7CisJbmFtZSA9IGdldF91c2VyX2Z1bmNfbmFtZSh4cCwgaWR4KTsKKwlpZiAobmFtZSAhPSBOVUxMKQorCSAgICByZXR1cm4gbmFtZTsKKyAgICB9CisgICAgaWYgKCsraW50aWR4IDwgKGludCkoc2l6ZW9mKGZ1bmN0aW9ucykgLyBzaXplb2Yoc3RydWN0IGZzdCkpKQorICAgIHsKKwlTVFJDUFkoSU9idWZmLCBmdW5jdGlvbnNbaW50aWR4XS5mX25hbWUpOworCVNUUkNBVChJT2J1ZmYsICIoIik7CisJaWYgKGZ1bmN0aW9uc1tpbnRpZHhdLmZfbWF4X2FyZ2MgPT0gMCkKKwkgICAgU1RSQ0FUKElPYnVmZiwgIikiKTsKKwlyZXR1cm4gSU9idWZmOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCisvKgorICogRnVuY3Rpb24gZ2l2ZW4gdG8gRXhwYW5kR2VuZXJpYygpIHRvIG9idGFpbiB0aGUgbGlzdCBvZiBpbnRlcm5hbCBvcgorICogdXNlciBkZWZpbmVkIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIG5hbWVzLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBjaGFyX3UgKgorZ2V0X2V4cHJfbmFtZSh4cCwgaWR4KQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBpbnQJCWlkeDsKK3sKKyAgICBzdGF0aWMgaW50CWludGlkeCA9IC0xOworICAgIGNoYXJfdQkqbmFtZTsKKworICAgIGlmIChpZHggPT0gMCkKKwlpbnRpZHggPSAtMTsKKyAgICBpZiAoaW50aWR4IDwgMCkKKyAgICB7CisJbmFtZSA9IGdldF9mdW5jdGlvbl9uYW1lKHhwLCBpZHgpOworCWlmIChuYW1lICE9IE5VTEwpCisJICAgIHJldHVybiBuYW1lOworICAgIH0KKyAgICByZXR1cm4gZ2V0X3VzZXJfdmFyX25hbWUoeHAsICsraW50aWR4KTsKK30KKworI2VuZGlmIC8qIEZFQVRfQ01ETF9DT01QTCAqLworCisvKgorICogRmluZCBpbnRlcm5hbCBmdW5jdGlvbiBpbiB0YWJsZSBhYm92ZS4KKyAqIFJldHVybiBpbmRleCwgb3IgLTEgaWYgbm90IGZvdW5kCisgKi8KKyAgICBzdGF0aWMgaW50CitmaW5kX2ludGVybmFsX2Z1bmMobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSBmdW5jdGlvbiAqLworeworICAgIGludAkJZmlyc3QgPSAwOworICAgIGludAkJbGFzdCA9IChpbnQpKHNpemVvZihmdW5jdGlvbnMpIC8gc2l6ZW9mKHN0cnVjdCBmc3QpKSAtIDE7CisgICAgaW50CQljbXA7CisgICAgaW50CQl4OworCisgICAgLyoKKyAgICAgKiBGaW5kIHRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSB0YWJsZS4gQmluYXJ5IHNlYXJjaC4KKyAgICAgKi8KKyAgICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkKKyAgICB7CisJeCA9IGZpcnN0ICsgKCh1bnNpZ25lZCkobGFzdCAtIGZpcnN0KSA+PiAxKTsKKwljbXAgPSBTVFJDTVAobmFtZSwgZnVuY3Rpb25zW3hdLmZfbmFtZSk7CisJaWYgKGNtcCA8IDApCisJICAgIGxhc3QgPSB4IC0gMTsKKwllbHNlIGlmIChjbXAgPiAwKQorCSAgICBmaXJzdCA9IHggKyAxOworCWVsc2UKKwkgICAgcmV0dXJuIHg7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgdmFyaWFibGUgZm9yIHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbi4KKyAqIFJldHVybiBPSyBvciBGQUlMLgorICovCisgICAgc3RhdGljIGludAorZ2V0X2Z1bmNfdmFyKG5hbWUsIGxlbiwgcmV0dmFyLCBhcmcsIGZpcnN0bGluZSwgbGFzdGxpbmUsIGRvZXNyYW5nZSwgZXZhbHVhdGUpCisgICAgY2hhcl91CSpuYW1lOwkJLyogbmFtZSBvZiB0aGUgZnVuY3Rpb24gKi8KKyAgICBpbnQJCWxlbjsJCS8qIGxlbmd0aCBvZiAibmFtZSIgKi8KKyAgICBWQVIJCXJldHZhcjsKKyAgICBjaGFyX3UJKiphcmc7CQkvKiBhcmd1bWVudCwgcG9pbnRpbmcgdG8gdGhlICcoJyAqLworICAgIGxpbmVucl9UCWZpcnN0bGluZTsJLyogZmlyc3QgbGluZSBvZiByYW5nZSAqLworICAgIGxpbmVucl9UCWxhc3RsaW5lOwkvKiBsYXN0IGxpbmUgb2YgcmFuZ2UgKi8KKyAgICBpbnQJCSpkb2VzcmFuZ2U7CS8qIHJldHVybjogZnVuY3Rpb24gaGFuZGxlZCByYW5nZSAqLworICAgIGludAkJZXZhbHVhdGU7Cit7CisgICAgY2hhcl91CSphcmdwOworICAgIGludAkJcmV0ID0gT0s7CisjZGVmaW5lIE1BWF9GVU5DX0FSR1MJMjAKKyAgICB2YXIJCWFyZ3ZhcnNbTUFYX0ZVTkNfQVJHU107CS8qIHZhcnMgZm9yIGFyZ3VtZW50cyAqLworICAgIGludAkJYXJnY291bnQgPSAwOwkJLyogbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3VuZCAqLworCisgICAgLyoKKyAgICAgKiBHZXQgdGhlIGFyZ3VtZW50cy4KKyAgICAgKi8KKyAgICBhcmdwID0gKmFyZzsKKyAgICB3aGlsZSAoYXJnY291bnQgPCBNQVhfRlVOQ19BUkdTKQorICAgIHsKKwlhcmdwID0gc2tpcHdoaXRlKGFyZ3AgKyAxKTsJICAgIC8qIHNraXAgdGhlICcoJyBvciAnLCcgKi8KKwlpZiAoKmFyZ3AgPT0gJyknIHx8ICphcmdwID09ICcsJyB8fCAqYXJncCA9PSBOVUwpCisJICAgIGJyZWFrOworCWFyZ3ZhcnNbYXJnY291bnRdLnZhcl9uYW1lID0gTlVMTDsgIC8qIHRoZSBuYW1lIGlzIG5vdCBzdG9yZWQgKi8KKwlpZiAoZXZhbDEoJmFyZ3AsICZhcmd2YXJzW2FyZ2NvdW50XSwgZXZhbHVhdGUpID09IEZBSUwpCisJeworCSAgICByZXQgPSBGQUlMOworCSAgICBicmVhazsKKwl9CisJKythcmdjb3VudDsKKwlpZiAoKmFyZ3AgIT0gJywnKQorCSAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCphcmdwID09ICcpJykKKwkrK2FyZ3A7CisgICAgZWxzZQorCXJldCA9IEZBSUw7CisKKyAgICBpZiAocmV0ID09IE9LKQorCXJldCA9IGNhbGxfZnVuYyhuYW1lLCBsZW4sIHJldHZhciwgYXJnY291bnQsIGFyZ3ZhcnMsCisJCQkJICAgIGZpcnN0bGluZSwgbGFzdGxpbmUsIGRvZXNyYW5nZSwgZXZhbHVhdGUpOworICAgIGVsc2UgaWYgKCFhYm9ydGluZygpKQorCUVNU0cyKF8oIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIpLCBuYW1lKTsKKworICAgIHdoaWxlICgtLWFyZ2NvdW50ID49IDApCisJY2xlYXJfdmFyKCZhcmd2YXJzW2FyZ2NvdW50XSk7CisKKyAgICAqYXJnID0gc2tpcHdoaXRlKGFyZ3ApOworICAgIHJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIENhbGwgYSBmdW5jdGlvbiB3aXRoIGl0cyByZXNvbHZlZCBwYXJhbWV0ZXJzCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NhbGxfZnVuYyhuYW1lLCBsZW4sIHJldHZhciwgYXJnY291bnQsIGFyZ3ZhcnMsIGZpcnN0bGluZSwgbGFzdGxpbmUsCisJCQkJCQkJICBkb2VzcmFuZ2UsIGV2YWx1YXRlKQorICAgIGNoYXJfdQkqbmFtZTsJCS8qIG5hbWUgb2YgdGhlIGZ1bmN0aW9uICovCisgICAgaW50CQlsZW47CQkvKiBsZW5ndGggb2YgIm5hbWUiICovCisgICAgVkFSCQlyZXR2YXI7CQkvKiByZXR1cm4gdmFsdWUgZ29lcyBoZXJlICovCisgICAgaW50CQlhcmdjb3VudDsJLyogbnVtYmVyIG9mICJhcmd2YXJzIiAqLworICAgIFZBUgkJYXJndmFyczsJLyogdmFycyBmb3IgYXJndW1lbnRzICovCisgICAgbGluZW5yX1QJZmlyc3RsaW5lOwkvKiBmaXJzdCBsaW5lIG9mIHJhbmdlICovCisgICAgbGluZW5yX1QJbGFzdGxpbmU7CS8qIGxhc3QgbGluZSBvZiByYW5nZSAqLworICAgIGludAkJKmRvZXNyYW5nZTsJLyogcmV0dXJuOiBmdW5jdGlvbiBoYW5kbGVkIHJhbmdlICovCisgICAgaW50CQlldmFsdWF0ZTsKK3sKKyAgICBpbnQJCXJldCA9IEZBSUw7CisgICAgc3RhdGljIGNoYXIgKmVycm9yc1tdID0KKwkJe05fKCJFMTE3OiBVbmtub3duIGZ1bmN0aW9uOiAlcyIpLAorCQkgTl8oIkUxMTg6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIiksCisJCSBOXygiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIpLAorCQkgTl8oIkUxMjA6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0OiAlcyIpLAorCQl9OworI2RlZmluZSBFUlJPUl9VTktOT1dOCTAKKyNkZWZpbmUgRVJST1JfVE9PTUFOWQkxCisjZGVmaW5lIEVSUk9SX1RPT0ZFVwkyCisjZGVmaW5lIEVSUk9SX1NDUklQVAkzCisjZGVmaW5lIEVSUk9SX05PTkUJNAorI2RlZmluZSBFUlJPUl9PVEhFUgk1CisgICAgaW50CQllcnJvciA9IEVSUk9SX05PTkU7CisgICAgaW50CQlpOworICAgIGludAkJbGxlbjsKKyAgICB1ZnVuY19UCSpmcDsKKyAgICBpbnQJCWNjOworI2RlZmluZSBGTEVOX0ZJWEVEIDQwCisgICAgY2hhcl91CWZuYW1lX2J1ZltGTEVOX0ZJWEVEICsgMV07CisgICAgY2hhcl91CSpmbmFtZTsKKworICAgIC8qCisgICAgICogSW4gYSBzY3JpcHQgY2hhbmdlIDxTSUQ+bmFtZSgpIGFuZCBzOm5hbWUoKSB0byBLX1NOUiAxMjNfbmFtZSgpLgorICAgICAqIENoYW5nZSA8U05SPjEyM19uYW1lKCkgdG8gS19TTlIgMTIzX25hbWUoKS4KKyAgICAgKiBVc2UgZm5hbWVfYnVmW10gd2hlbiBpdCBmaXRzLCBvdGhlcndpc2UgYWxsb2NhdGUgbWVtb3J5IChzbG93KS4KKyAgICAgKi8KKyAgICBjYyA9IG5hbWVbbGVuXTsKKyAgICBuYW1lW2xlbl0gPSBOVUw7CisgICAgbGxlbiA9IGV2YWxfZm5hbWVfc2NyaXB0KG5hbWUpOworICAgIGlmIChsbGVuID4gMCkKKyAgICB7CisJZm5hbWVfYnVmWzBdID0gS19TUEVDSUFMOworCWZuYW1lX2J1ZlsxXSA9IEtTX0VYVFJBOworCWZuYW1lX2J1ZlsyXSA9IChpbnQpS0VfU05SOworCWkgPSAzOworCWlmIChldmFsX2ZuYW1lX3NpZChuYW1lKSkJLyogIjxTSUQ+IiBvciAiczoiICovCisJeworCSAgICBpZiAoY3VycmVudF9TSUQgPD0gMCkKKwkJZXJyb3IgPSBFUlJPUl9TQ1JJUFQ7CisJICAgIGVsc2UKKwkgICAgeworCQlzcHJpbnRmKChjaGFyICopZm5hbWVfYnVmICsgMywgIiVsZF8iLCAobG9uZyljdXJyZW50X1NJRCk7CisJCWkgPSAoaW50KVNUUkxFTihmbmFtZV9idWYpOworCSAgICB9CisJfQorCWlmIChpICsgU1RSTEVOKG5hbWUgKyBsbGVuKSA8IEZMRU5fRklYRUQpCisJeworCSAgICBTVFJDUFkoZm5hbWVfYnVmICsgaSwgbmFtZSArIGxsZW4pOworCSAgICBmbmFtZSA9IGZuYW1lX2J1ZjsKKwl9CisJZWxzZQorCXsKKwkgICAgZm5hbWUgPSBhbGxvYygodW5zaWduZWQpKGkgKyBTVFJMRU4obmFtZSArIGxsZW4pICsgMSkpOworCSAgICBpZiAoZm5hbWUgPT0gTlVMTCkKKwkJZXJyb3IgPSBFUlJPUl9PVEhFUjsKKwkgICAgZWxzZQorCSAgICB7CisJCW1jaF9tZW1tb3ZlKGZuYW1lLCBmbmFtZV9idWYsIChzaXplX3QpaSk7CisJCVNUUkNQWShmbmFtZSArIGksIG5hbWUgKyBsbGVuKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgZWxzZQorCWZuYW1lID0gbmFtZTsKKworICAgICpkb2VzcmFuZ2UgPSBGQUxTRTsKKworCisgICAgLyogZXhlY3V0ZSB0aGUgZnVuY3Rpb24gaWYgbm8gZXJyb3JzIGRldGVjdGVkIGFuZCBleGVjdXRpbmcgKi8KKyAgICBpZiAoZXZhbHVhdGUgJiYgZXJyb3IgPT0gRVJST1JfTk9ORSkKKyAgICB7CisJcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9OVU1CRVI7CS8qIGRlZmF1bHQgaXMgbnVtYmVyIHJldHZhciAqLworCWVycm9yID0gRVJST1JfVU5LTk9XTjsKKworCWlmICghQVNDSUlfSVNMT1dFUihmbmFtZVswXSkpCisJeworCSAgICAvKgorCSAgICAgKiBVc2VyIGRlZmluZWQgZnVuY3Rpb24uCisJICAgICAqLworCSAgICBmcCA9IGZpbmRfZnVuYyhmbmFtZSk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJICAgIGlmIChmcCA9PSBOVUxMICYmIGFwcGx5X2F1dG9jbWRzKEVWRU5UX0ZVTkNVTkRFRklORUQsCisJCQkJCQkgICAgZm5hbWUsIGZuYW1lLCBUUlVFLCBOVUxMKQorI2lmZGVmIEZFQVRfRVZBTAorCQkgICAgJiYgIWFib3J0aW5nKCkKKyNlbmRpZgorCSAgICAgICApCisJICAgIHsKKwkJLyogZXhlY3V0ZWQgYW4gYXV0b2NvbW1hbmQsIHNlYXJjaCBmb3IgZnVuY3Rpb24gYWdhaW4gKi8KKwkJZnAgPSBmaW5kX2Z1bmMoZm5hbWUpOworCSAgICB9CisjZW5kaWYKKwkgICAgaWYgKGZwICE9IE5VTEwpCisJICAgIHsKKwkJaWYgKGZwLT5mbGFncyAmIEZDX1JBTkdFKQorCQkgICAgKmRvZXNyYW5nZSA9IFRSVUU7CisJCWlmIChhcmdjb3VudCA8IGZwLT5hcmdzLmdhX2xlbikKKwkJICAgIGVycm9yID0gRVJST1JfVE9PRkVXOworCQllbHNlIGlmICghZnAtPnZhcmFyZ3MgJiYgYXJnY291bnQgPiBmcC0+YXJncy5nYV9sZW4pCisJCSAgICBlcnJvciA9IEVSUk9SX1RPT01BTlk7CisJCWVsc2UKKwkJeworCQkgICAgLyoKKwkJICAgICAqIENhbGwgdGhlIHVzZXIgZnVuY3Rpb24uCisJCSAgICAgKiBTYXZlIGFuZCByZXN0b3JlIHNlYXJjaCBwYXR0ZXJucywgc2NyaXB0IHZhcmlhYmxlcyBhbmQKKwkJICAgICAqIHJlZG8gYnVmZmVyLgorCQkgICAgICovCisJCSAgICBzYXZlX3NlYXJjaF9wYXR0ZXJucygpOworCQkgICAgc2F2ZVJlZG9idWZmKCk7CisJCSAgICArK2ZwLT5jYWxsczsKKwkJICAgIGNhbGxfdXNlcl9mdW5jKGZwLCBhcmdjb3VudCwgYXJndmFycywgcmV0dmFyLAorCQkJCQkJCSBmaXJzdGxpbmUsIGxhc3RsaW5lKTsKKwkJICAgIC0tZnAtPmNhbGxzOworCQkgICAgcmVzdG9yZVJlZG9idWZmKCk7CisJCSAgICByZXN0b3JlX3NlYXJjaF9wYXR0ZXJucygpOworCQkgICAgZXJyb3IgPSBFUlJPUl9OT05FOworCQl9CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogRmluZCB0aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgdGFibGUsIGNhbGwgaXRzIGltcGxlbWVudGF0aW9uLgorCSAgICAgKi8KKwkgICAgaSA9IGZpbmRfaW50ZXJuYWxfZnVuYyhmbmFtZSk7CisJICAgIGlmIChpID49IDApCisJICAgIHsKKwkJaWYgKGFyZ2NvdW50IDwgZnVuY3Rpb25zW2ldLmZfbWluX2FyZ2MpCisJCSAgICBlcnJvciA9IEVSUk9SX1RPT0ZFVzsKKwkJZWxzZSBpZiAoYXJnY291bnQgPiBmdW5jdGlvbnNbaV0uZl9tYXhfYXJnYykKKwkJICAgIGVycm9yID0gRVJST1JfVE9PTUFOWTsKKwkJZWxzZQorCQl7CisJCSAgICBhcmd2YXJzW2FyZ2NvdW50XS52YXJfdHlwZSA9IFZBUl9VTktOT1dOOworCQkgICAgZnVuY3Rpb25zW2ldLmZfZnVuYyhhcmd2YXJzLCByZXR2YXIpOworCQkgICAgZXJyb3IgPSBFUlJPUl9OT05FOworCQl9CisJICAgIH0KKwl9CisJLyoKKwkgKiBUaGUgZnVuY3Rpb24gY2FsbCAob3IgIkZ1bmNVbmRlZmluZWQiIGF1dG9jb21tYW5kIHNlcXVlbmNlKSBtaWdodAorCSAqIGhhdmUgYmVlbiBhYm9ydGVkIGJ5IGFuIGVycm9yLCBhbiBpbnRlcnJ1cHQsIG9yIGFuIGV4cGxpY2l0bHkgdGhyb3duCisJICogZXhjZXB0aW9uIHRoYXQgaGFzIG5vdCBiZWVuIGNhdWdodCBzbyBmYXIuICBUaGlzIHNpdHVhdGlvbiBjYW4gYmUKKwkgKiB0ZXN0ZWQgZm9yIGJ5IGNhbGxpbmcgYWJvcnRpbmcoKS4gIEZvciBhbiBlcnJvciBpbiBhbiBpbnRlcm5hbAorCSAqIGZ1bmN0aW9uIG9yIGZvciB0aGUgIkUxMzIiIGVycm9yIGluIGNhbGxfdXNlcl9mdW5jKCksIGhvd2V2ZXIsIHRoZQorCSAqIHRocm93IHBvaW50IGF0IHdoaWNoIHRoZSAiZm9yY2VfYWJvcnQiIGZsYWcgKHRlbXBvcmFyaWx5IHJlc2V0IGJ5CisJICogZW1zZygpKSBpcyBub3JtYWxseSB1cGRhdGVkIGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC4gV2UgbmVlZCB0bworCSAqIHVwZGF0ZSB0aGF0IGZsYWcgZmlyc3QgdG8gbWFrZSBhYm9ydGluZygpIHJlbGlhYmxlLgorCSAqLworCXVwZGF0ZV9mb3JjZV9hYm9ydCgpOworICAgIH0KKyAgICBpZiAoZXJyb3IgPT0gRVJST1JfTk9ORSkKKwlyZXQgPSBPSzsKKworICAgIC8qCisgICAgICogUmVwb3J0IGFuIGVycm9yIHVubGVzcyB0aGUgYXJndW1lbnQgZXZhbHVhdGlvbiBvciBmdW5jdGlvbiBjYWxsIGhhcyBiZWVuCisgICAgICogY2FuY2VsbGVkIGR1ZSB0byBhbiBhYm9ydGluZyBlcnJvciwgYW4gaW50ZXJydXB0LCBvciBhbiBleGNlcHRpb24uCisgICAgICovCisgICAgaWYgKGVycm9yIDwgRVJST1JfTk9ORSAmJiAhYWJvcnRpbmcoKSkKKwlFTVNHMigoY2hhcl91ICopXyhlcnJvcnNbZXJyb3JdKSwgbmFtZSk7CisKKyAgICBuYW1lW2xlbl0gPSBjYzsKKyAgICBpZiAoZm5hbWUgIT0gbmFtZSAmJiBmbmFtZSAhPSBmbmFtZV9idWYpCisJdmltX2ZyZWUoZm5hbWUpOworCisgICAgcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucworICovCisKKy8qCisgKiAiYXBwZW5kKGxudW0sIHN0cmluZykiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9hcHBlbmQoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBsb25nCWxudW07CisKKyAgICBsbnVtID0gZ2V0X3Zhcl9sbnVtKGFyZ3ZhcnMpOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gMTsgLyogRGVmYXVsdDogRmFpbGVkICovCisKKyAgICBpZiAobG51bSA+PSAwCisJICAgICYmIGxudW0gPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQKKwkgICAgJiYgdV9zYXZlKGxudW0sIGxudW0gKyAxKSA9PSBPSykKKyAgICB7CisJbWxfYXBwZW5kKGxudW0sIGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzFdKSwgKGNvbG5yX1QpMCwgRkFMU0UpOworCWlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiBsbnVtKQorCSAgICArK2N1cndpbi0+d19jdXJzb3IubG51bTsKKwlhcHBlbmRlZF9saW5lc19tYXJrKGxudW0sIDFMKTsKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7CisgICAgfQorfQorCisvKgorICogImFyZ2MoKSIgZnVuY3Rpb24KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9hcmdjKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBBUkdDT1VOVDsKK30KKworLyoKKyAqICJhcmdpZHgoKSIgZnVuY3Rpb24KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9hcmdpZHgoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IGN1cndpbi0+d19hcmdfaWR4OworfQorCisvKgorICogImFyZ3YobnIpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfYXJndihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGludAkJaWR4OworCisgICAgaWR4ID0gZ2V0X3Zhcl9udW1iZXIoJmFyZ3ZhcnNbMF0pOworICAgIGlmIChpZHggPj0gMCAmJiBpZHggPCBBUkdDT1VOVCkKKwlyZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHZpbV9zdHJzYXZlKGFsaXN0X25hbWUoJkFSR0xJU1RbaWR4XSkpOworICAgIGVsc2UKKwlyZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IE5VTEw7CisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7Cit9CisKKy8qCisgKiAiYnJvd3NlKHNhdmUsIHRpdGxlLCBpbml0ZGlyLCBkZWZhdWx0KSIgZnVuY3Rpb24KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9icm93c2UoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyNpZmRlZiBGRUFUX0JST1dTRQorICAgIGludAkJc2F2ZTsKKyAgICBjaGFyX3UJKnRpdGxlOworICAgIGNoYXJfdQkqaW5pdGRpcjsKKyAgICBjaGFyX3UJKmRlZm5hbWU7CisgICAgY2hhcl91CWJ1ZltOVU1CVUZMRU5dOworICAgIGNoYXJfdQlidWYyW05VTUJVRkxFTl07CisKKyAgICBzYXZlID0gZ2V0X3Zhcl9udW1iZXIoJmFyZ3ZhcnNbMF0pOworICAgIHRpdGxlID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMV0pOworICAgIGluaXRkaXIgPSBnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMl0sIGJ1Zik7CisgICAgZGVmbmFtZSA9IGdldF92YXJfc3RyaW5nX2J1ZigmYXJndmFyc1szXSwgYnVmMik7CisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9CisJCSBkb19icm93c2Uoc2F2ZSwgdGl0bGUsIGRlZm5hbWUsIE5VTEwsIGluaXRkaXIsIE5VTEwsIGN1cmJ1Zik7CisjZWxzZQorICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gTlVMTDsKKyNlbmRpZgorICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworfQorCisvKgorICogRmluZCBhIGJ1ZmZlciBieSBudW1iZXIgb3IgZXhhY3QgbmFtZS4KKyAqLworICAgIHN0YXRpYyBidWZfVCAqCitmaW5kX2J1ZmZlcihhdmFyKQorICAgIFZBUgkJYXZhcjsKK3sKKyAgICBidWZfVAkqYnVmID0gTlVMTDsKKyAgICBjaGFyX3UJKm5hbWU7CisKKyAgICBpZiAoYXZhci0+dmFyX3R5cGUgPT0gVkFSX05VTUJFUikKKwlidWYgPSBidWZsaXN0X2ZpbmRucigoaW50KWF2YXItPnZhcl92YWwudmFyX251bWJlcik7CisgICAgZWxzZSBpZiAoYXZhci0+dmFyX3ZhbC52YXJfc3RyaW5nICE9IE5VTEwpCisgICAgeworCS8qIEZpcnN0IG1ha2UgdGhlIG5hbWUgaW50byBhIGZ1bGwgcGF0aCBuYW1lICovCisJbmFtZSA9IEZ1bGxOYW1lX3NhdmUoYXZhci0+dmFyX3ZhbC52YXJfc3RyaW5nLAorI2lmZGVmIFVOSVgKKwkJVFJVRQkgICAgLyogZm9yY2UgZXhwYW5zaW9uLCBnZXQgcmlkIG9mIHN5bWJvbGljIGxpbmtzICovCisjZWxzZQorCQlGQUxTRQorI2VuZGlmCisJCSk7CisJaWYgKG5hbWUgIT0gTlVMTCkKKwl7CisJICAgIGJ1ZiA9IGJ1Zmxpc3RfZmluZG5hbWUobmFtZSk7CisJICAgIHZpbV9mcmVlKG5hbWUpOworCX0KKyAgICB9CisgICAgcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqICJidWZleGlzdHMoZXhwcikiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9idWZleGlzdHMoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IChmaW5kX2J1ZmZlcigmYXJndmFyc1swXSkgIT0gTlVMTCk7Cit9CisKKy8qCisgKiAiYnVmbGlzdGVkKGV4cHIpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfYnVmbGlzdGVkKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIGJ1ZiA9IGZpbmRfYnVmZmVyKCZhcmd2YXJzWzBdKTsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IChidWYgIT0gTlVMTCAmJiBidWYtPmJfcF9ibCk7Cit9CisKKy8qCisgKiAiYnVmbG9hZGVkKGV4cHIpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfYnVmbG9hZGVkKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIGJ1ZiA9IGZpbmRfYnVmZmVyKCZhcmd2YXJzWzBdKTsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IChidWYgIT0gTlVMTCAmJiBidWYtPmJfbWwubWxfbWZwICE9IE5VTEwpOworfQorCisvKgorICogR2V0IGJ1ZmZlciBieSBudW1iZXIgb3IgcGF0dGVybi4KKyAqLworICAgIHN0YXRpYyBidWZfVCAqCitnZXRfYnVmX3ZhcihhdmFyKQorICAgIFZBUgkJYXZhcjsKK3sKKyAgICBjaGFyX3UJKm5hbWUgPSBhdmFyLT52YXJfdmFsLnZhcl9zdHJpbmc7CisgICAgaW50CQlzYXZlX21hZ2ljOworICAgIGNoYXJfdQkqc2F2ZV9jcG87CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIGlmIChhdmFyLT52YXJfdHlwZSA9PSBWQVJfTlVNQkVSKQorCXJldHVybiBidWZsaXN0X2ZpbmRucigoaW50KWF2YXItPnZhcl92YWwudmFyX251bWJlcik7CisgICAgaWYgKG5hbWUgPT0gTlVMTCB8fCAqbmFtZSA9PSBOVUwpCisJcmV0dXJuIGN1cmJ1ZjsKKyAgICBpZiAobmFtZVswXSA9PSAnJCcgJiYgbmFtZVsxXSA9PSBOVUwpCisJcmV0dXJuIGxhc3RidWY7CisKKyAgICAvKiBJZ25vcmUgJ21hZ2ljJyBhbmQgJ2Nwb3B0aW9ucycgaGVyZSB0byBtYWtlIHNjcmlwdHMgcG9ydGFibGUgKi8KKyAgICBzYXZlX21hZ2ljID0gcF9tYWdpYzsKKyAgICBwX21hZ2ljID0gVFJVRTsKKyAgICBzYXZlX2NwbyA9IHBfY3BvOworICAgIHBfY3BvID0gKGNoYXJfdSAqKSIiOworCisgICAgYnVmID0gYnVmbGlzdF9maW5kbnIoYnVmbGlzdF9maW5kcGF0KG5hbWUsIG5hbWUgKyBTVFJMRU4obmFtZSksCisJCQkJCQkJCVRSVUUsIEZBTFNFKSk7CisKKyAgICBwX21hZ2ljID0gc2F2ZV9tYWdpYzsKKyAgICBwX2NwbyA9IHNhdmVfY3BvOworCisgICAgLyogSWYgbm90IGZvdW5kLCB0cnkgZXhwYW5kaW5nIHRoZSBuYW1lLCBsaWtlIGRvbmUgZm9yIGJ1ZmV4aXN0cygpLiAqLworICAgIGlmIChidWYgPT0gTlVMTCkKKwlidWYgPSBmaW5kX2J1ZmZlcihhdmFyKTsKKworICAgIHJldHVybiBidWY7Cit9CisKKy8qCisgKiAiYnVmbmFtZShleHByKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2J1Zm5hbWUoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBidWZfVAkqYnVmOworCisgICAgKytlbXNnX29mZjsKKyAgICBidWYgPSBnZXRfYnVmX3ZhcigmYXJndmFyc1swXSk7CisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgaWYgKGJ1ZiAhPSBOVUxMICYmIGJ1Zi0+Yl9mbmFtZSAhPSBOVUxMKQorCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gdmltX3N0cnNhdmUoYnVmLT5iX2ZuYW1lKTsKKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBOVUxMOworICAgIC0tZW1zZ19vZmY7Cit9CisKKy8qCisgKiAiYnVmbnIoZXhwcikiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9idWZucihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGJ1Zl9UCSpidWY7CisKKyAgICArK2Vtc2dfb2ZmOworICAgIGJ1ZiA9IGdldF9idWZfdmFyKCZhcmd2YXJzWzBdKTsKKyAgICBpZiAoYnVmICE9IE5VTEwpCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBidWYtPmJfZm51bTsKKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKyAgICAtLWVtc2dfb2ZmOworfQorCisvKgorICogImJ1Zndpbm5yKG5yKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2J1Zndpbm5yKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgd2luX1QJKndwOworICAgIGludAkJd2lubnIgPSAwOworI2VuZGlmCisgICAgYnVmX1QJKmJ1ZjsKKworICAgICsrZW1zZ19vZmY7CisgICAgYnVmID0gZ2V0X2J1Zl92YXIoJmFyZ3ZhcnNbMF0pOworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3A7IHdwID0gd3AtPndfbmV4dCkKKyAgICB7CisJKyt3aW5ucjsKKwlpZiAod3AtPndfYnVmZmVyID09IGJ1ZikKKwkgICAgYnJlYWs7CisgICAgfQorICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gKHdwICE9IE5VTEwgPyB3aW5uciA6IC0xKTsKKyNlbHNlCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAoY3Vyd2luLT53X2J1ZmZlciA9PSBidWYgPyAxIDogLTEpOworI2VuZGlmCisgICAgLS1lbXNnX29mZjsKK30KKworLyoKKyAqICJieXRlMmxpbmUoYnl0ZSkiIGZ1bmN0aW9uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX2J5dGUybGluZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworI2lmbmRlZiBGRUFUX0JZVEVPRkYKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IC0xOworI2Vsc2UKKyAgICBsb25nCWJvZmYgPSAwOworCisgICAgYm9mZiA9IGdldF92YXJfbnVtYmVyKCZhcmd2YXJzWzBdKSAtIDE7CisgICAgaWYgKGJvZmYgPCAwKQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gLTE7CisgICAgZWxzZQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gbWxfZmluZF9saW5lX29yX29mZnNldChjdXJidWYsCisJCQkJCQkJICAobGluZW5yX1QpMCwgJmJvZmYpOworI2VuZGlmCit9CisKKy8qCisgKiAiY2hhcjJucihzdHJpbmcpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfY2hhcjJucihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoaGFzX21ieXRlKQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0KKwkJCQkgICgqbWJfcHRyMmNoYXIpKGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKSk7CisgICAgZWxzZQorI2VuZGlmCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSlbMF07Cit9CisKKy8qCisgKiAiY2luZGVudChsbnVtKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2NpbmRlbnQoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKyAgICBwb3NfVAlwb3M7CisgICAgbGluZW5yX1QJbG51bTsKKworICAgIHBvcyA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgbG51bSA9IGdldF92YXJfbG51bShhcmd2YXJzKTsKKyAgICBpZiAobG51bSA+PSAxICYmIGxudW0gPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisgICAgeworCWN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBnZXRfY19pbmRlbnQoKTsKKwljdXJ3aW4tPndfY3Vyc29yID0gcG9zOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IC0xOworfQorCisvKgorICogImNvbChzdHJpbmcpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfY29sKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY29sbnJfVAljb2wgPSAwOworICAgIHBvc19UCSpmcDsKKworICAgIGZwID0gdmFyMmZwb3MoJmFyZ3ZhcnNbMF0sIEZBTFNFKTsKKyAgICBpZiAoZnAgIT0gTlVMTCkKKyAgICB7CisJaWYgKGZwLT5jb2wgPT0gTUFYQ09MKQorCXsKKwkgICAgLyogJz4gY2FuIGJlIE1BWENPTCwgZ2V0IHRoZSBsZW5ndGggb2YgdGhlIGxpbmUgdGhlbiAqLworCSAgICBpZiAoZnAtPmxudW0gPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCWNvbCA9IFNUUkxFTihtbF9nZXQoZnAtPmxudW0pKSArIDE7CisJICAgIGVsc2UKKwkJY29sID0gTUFYQ09MOworCX0KKwllbHNlCisJeworCSAgICBjb2wgPSBmcC0+Y29sICsgMTsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJICAgIC8qIGNvbCgiLiIpIHdoZW4gdGhlIGN1cnNvciBpcyBvbiB0aGUgTlVMIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUKKwkgICAgICogYmVjYXVzZSBvZiAiY29sYWRkIiBjYW4gYmUgc2VlbiBhcyBhbiBleHRyYSBjb2x1bW4uICovCisJICAgIGlmICh2aXJ0dWFsX2FjdGl2ZSgpICYmIGZwID09ICZjdXJ3aW4tPndfY3Vyc29yKQorCSAgICB7CisJCWNoYXJfdQkqcCA9IG1sX2dldF9jdXJzb3IoKTsKKworCQlpZiAoY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPj0gKGNvbG5yX1QpY2hhcnRhYnNpemUocCwKKwkJCQkgY3Vyd2luLT53X3ZpcnRjb2wgLSBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCkpCisJCXsKKyMgaWZkZWYgRkVBVF9NQllURQorCQkgICAgaW50CQlsOworCisJCSAgICBpZiAoKnAgIT0gTlVMICYmIHBbKGwgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApKV0gPT0gTlVMKQorCQkJY29sICs9IGw7CisjIGVsc2UKKwkJICAgIGlmICgqcCAhPSBOVUwgJiYgcFsxXSA9PSBOVUwpCisJCQkrK2NvbDsKKyMgZW5kaWYKKwkJfQorCSAgICB9CisjZW5kaWYKKwl9CisgICAgfQorICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gY29sOworfQorCisvKgorICogImNvbmZpcm0obWVzc2FnZSwgYnV0dG9uc1ssIGRlZmF1bHQgWywgdHlwZV1dKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfY29uZmlybShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKyAgICBjaGFyX3UJKm1lc3NhZ2U7CisgICAgY2hhcl91CSpidXR0b25zID0gTlVMTDsKKyAgICBjaGFyX3UJYnVmW05VTUJVRkxFTl07CisgICAgY2hhcl91CWJ1ZjJbTlVNQlVGTEVOXTsKKyAgICBpbnQJCWRlZiA9IDE7CisgICAgaW50CQl0eXBlID0gVklNX0dFTkVSSUM7CisgICAgaW50CQljOworCisgICAgbWVzc2FnZSA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKTsKKyAgICBpZiAoYXJndmFyc1sxXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTikKKyAgICB7CisJYnV0dG9ucyA9IGdldF92YXJfc3RyaW5nX2J1ZigmYXJndmFyc1sxXSwgYnVmKTsKKwlpZiAoYXJndmFyc1syXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTikKKwl7CisJICAgIGRlZiA9IGdldF92YXJfbnVtYmVyKCZhcmd2YXJzWzJdKTsKKwkgICAgaWYgKGFyZ3ZhcnNbM10udmFyX3R5cGUgIT0gVkFSX1VOS05PV04pCisJICAgIHsKKwkJLyogYXZvaWQgdGhhdCBUT1VQUEVSX0FTQyBjYWxscyBnZXRfdmFyX3N0cmluZ19idWYoKSB0d2ljZSAqLworCQljID0gKmdldF92YXJfc3RyaW5nX2J1ZigmYXJndmFyc1szXSwgYnVmMik7CisJCXN3aXRjaCAoVE9VUFBFUl9BU0MoYykpCisJCXsKKwkJICAgIGNhc2UgJ0UnOiB0eXBlID0gVklNX0VSUk9SOyBicmVhazsKKwkJICAgIGNhc2UgJ1EnOiB0eXBlID0gVklNX1FVRVNUSU9OOyBicmVhazsKKwkJICAgIGNhc2UgJ0knOiB0eXBlID0gVklNX0lORk87IGJyZWFrOworCQkgICAgY2FzZSAnVyc6IHR5cGUgPSBWSU1fV0FSTklORzsgYnJlYWs7CisJCSAgICBjYXNlICdHJzogdHlwZSA9IFZJTV9HRU5FUklDOyBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIChidXR0b25zID09IE5VTEwgfHwgKmJ1dHRvbnMgPT0gTlVMKQorCWJ1dHRvbnMgPSAoY2hhcl91ICopXygiJk9rIik7CisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IGRvX2RpYWxvZyh0eXBlLCBOVUxMLCBtZXNzYWdlLCBidXR0b25zLAorCQkJCQkJCQkgICBkZWYsIE5VTEwpOworI2Vsc2UKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7CisjZW5kaWYKK30KKworCisvKgorICogImNzY29wZV9jb25uZWN0aW9uKFt7bnVtfSAsIHtkYnBhdGh9IFssIHtwcmVwZW5kfV1dKSIgZnVuY3Rpb24KKyAqCisgKiBDaGVja3MgdGhlIGV4aXN0ZW5jZSBvZiBhIGNzY29wZSBjb25uZWN0aW9uLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9jc2NvcGVfY29ubmVjdGlvbihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworI2lmZGVmIEZFQVRfQ1NDT1BFCisgICAgaW50CQludW0gPSAwOworICAgIGNoYXJfdQkqZGJwYXRoID0gTlVMTDsKKyAgICBjaGFyX3UJKnByZXBlbmQgPSBOVUxMOworICAgIGNoYXJfdQlidWZbTlVNQlVGTEVOXTsKKworICAgIGlmIChhcmd2YXJzWzBdLnZhcl90eXBlICE9IFZBUl9VTktOT1dOCisJICAgICYmIGFyZ3ZhcnNbMV0udmFyX3R5cGUgIT0gVkFSX1VOS05PV04pCisgICAgeworCW51bSA9IChpbnQpZ2V0X3Zhcl9udW1iZXIoJmFyZ3ZhcnNbMF0pOworCWRicGF0aCA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzFdKTsKKwlpZiAoYXJndmFyc1syXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTikKKwkgICAgcHJlcGVuZCA9IGdldF92YXJfc3RyaW5nX2J1ZigmYXJndmFyc1syXSwgYnVmKTsKKyAgICB9CisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IGNzX2Nvbm5lY3Rpb24obnVtLCBkYnBhdGgsIHByZXBlbmQpOworI2Vsc2UKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7CisjZW5kaWYKK30KKworLyoKKyAqICJjdXJzb3IobG51bSwgY29sKSIgZnVuY3Rpb24KKyAqCisgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBzcGVjaWZpZWQgbGluZSBhbmQgY29sdW1uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX2N1cnNvcihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGxvbmcJbGluZSwgY29sOworCisgICAgbGluZSA9IGdldF92YXJfbG51bShhcmd2YXJzKTsKKyAgICBpZiAobGluZSA+IDApCisJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbGluZTsKKyAgICBjb2wgPSBnZXRfdmFyX251bWJlcigmYXJndmFyc1sxXSk7CisgICAgaWYgKGNvbCA+IDApCisJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBjb2wgLSAxOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisjZW5kaWYKKworICAgIC8qIE1ha2Ugc3VyZSB0aGUgY3Vyc29yIGlzIGluIGEgdmFsaWQgcG9zaXRpb24uICovCisgICAgY2hlY2tfY3Vyc29yKCk7CisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIENvcnJlY3QgY3Vyc29yIGZvciBtdWx0aS1ieXRlIGNoYXJhY3Rlci4gKi8KKyAgICBpZiAoaGFzX21ieXRlKQorCW1iX2FkanVzdF9jdXJzb3IoKTsKKyNlbmRpZgorfQorCisvKgorICogImxpYmNhbGwoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2xpYmNhbGwoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBsaWJjYWxsX2NvbW1vbihhcmd2YXJzLCByZXR2YXIsIFZBUl9TVFJJTkcpOworfQorCisvKgorICogImxpYmNhbGxucigpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfbGliY2FsbG5yKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgbGliY2FsbF9jb21tb24oYXJndmFycywgcmV0dmFyLCBWQVJfTlVNQkVSKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitsaWJjYWxsX2NvbW1vbihhcmd2YXJzLCByZXR2YXIsIHR5cGUpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworICAgIGludAkJdHlwZTsKK3sKKyNpZmRlZiBGRUFUX0xJQkNBTEwKKyAgICBjaGFyX3UJCSpzdHJpbmdfaW47CisgICAgY2hhcl91CQkqKnN0cmluZ19yZXN1bHQ7CisgICAgaW50CQkJbnJfcmVzdWx0OworI2VuZGlmCisKKyAgICByZXR2YXItPnZhcl90eXBlID0gdHlwZTsKKyAgICBpZiAodHlwZSA9PSBWQVJfTlVNQkVSKQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gMDsKKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBOVUxMOworCisgICAgaWYgKGNoZWNrX3Jlc3RyaWN0ZWQoKSB8fCBjaGVja19zZWN1cmUoKSkKKwlyZXR1cm47CisKKyNpZmRlZiBGRUFUX0xJQkNBTEwKKyAgICAvKiBUaGUgZmlyc3QgdHdvIGFyZ3MgbXVzdCBiZSBzdHJpbmdzLCBvdGhlcndpc2UgaXRzIG1lYW5pbmdsZXNzICovCisgICAgaWYgKGFyZ3ZhcnNbMF0udmFyX3R5cGUgPT0gVkFSX1NUUklORyAmJiBhcmd2YXJzWzFdLnZhcl90eXBlID09IFZBUl9TVFJJTkcpCisgICAgeworCWlmIChhcmd2YXJzWzJdLnZhcl90eXBlID09IFZBUl9OVU1CRVIpCisJICAgIHN0cmluZ19pbiA9IE5VTEw7CisJZWxzZQorCSAgICBzdHJpbmdfaW4gPSBhcmd2YXJzWzJdLnZhcl92YWwudmFyX3N0cmluZzsKKwlpZiAodHlwZSA9PSBWQVJfTlVNQkVSKQorCSAgICBzdHJpbmdfcmVzdWx0ID0gTlVMTDsKKwllbHNlCisJICAgIHN0cmluZ19yZXN1bHQgPSAmcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmc7CisJaWYgKG1jaF9saWJjYWxsKGFyZ3ZhcnNbMF0udmFyX3ZhbC52YXJfc3RyaW5nLAorCQkJICAgICBhcmd2YXJzWzFdLnZhcl92YWwudmFyX3N0cmluZywKKwkJCSAgICAgc3RyaW5nX2luLAorCQkJICAgICBhcmd2YXJzWzJdLnZhcl92YWwudmFyX251bWJlciwKKwkJCSAgICAgc3RyaW5nX3Jlc3VsdCwKKwkJCSAgICAgJm5yX3Jlc3VsdCkgPT0gT0sKKwkJJiYgdHlwZSA9PSBWQVJfTlVNQkVSKQorCSAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IG5yX3Jlc3VsdDsKKyAgICB9CisjZW5kaWYKK30KKworLyoKKyAqICJkZWxldGUoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2RlbGV0ZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGlmIChjaGVja19yZXN0cmljdGVkKCkgfHwgY2hlY2tfc2VjdXJlKCkpCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBtY2hfcmVtb3ZlKGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKSk7Cit9CisKKy8qCisgKiAiZGlkX2ZpbGV0eXBlKCkiIGZ1bmN0aW9uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX2RpZF9maWxldHlwZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gZGlkX2ZpbGV0eXBlOworI2Vsc2UKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7CisjZW5kaWYKK30KKworLyoKKyAqICJlc2NhcGUoe3N0cmluZ30sIHtjaGFyc30pIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfZXNjYXBlKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CWJ1ZltOVU1CVUZMRU5dOworCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPQorCXZpbV9zdHJzYXZlX2VzY2FwZWQoZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pLAorCQlnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMV0sIGJ1ZikpOworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworfQorCisvKgorICogImV2ZW50aGFuZGxlcigpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9ldmVudGhhbmRsZXIoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IHZnZXRjX2J1c3k7Cit9CisKKy8qCisgKiAiZXhlY3V0YWJsZSgpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfZXhlY3V0YWJsZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gbWNoX2Nhbl9leGUoZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pKTsKK30KKworLyoKKyAqICJleGlzdHMoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2V4aXN0cyhhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQluID0gRkFMU0U7CisgICAgaW50CQlsZW4gPSAwOworCisgICAgcCA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKTsKKyAgICBpZiAoKnAgPT0gJyQnKQkJCS8qIGVudmlyb25tZW50IHZhcmlhYmxlICovCisgICAgeworCS8qIGZpcnN0IHRyeSAibm9ybWFsIiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGZhc3QpICovCisJaWYgKG1jaF9nZXRlbnYocCArIDEpICE9IE5VTEwpCisJICAgIG4gPSBUUlVFOworCWVsc2UKKwl7CisJICAgIC8qIHRyeSBleHBhbmRpbmcgdGhpbmdzIGxpa2UgJFZJTSBhbmQgJHtIT01FfSAqLworCSAgICBwID0gZXhwYW5kX2Vudl9zYXZlKHApOworCSAgICBpZiAocCAhPSBOVUxMICYmICpwICE9ICckJykKKwkJbiA9IFRSVUU7CisJICAgIHZpbV9mcmVlKHApOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAoKnAgPT0gJyYnIHx8ICpwID09ICcrJykJCQkvKiBvcHRpb24gKi8KKwluID0gKGdldF9vcHRpb25fdmFyKCZwLCBOVUxMLCBUUlVFKSA9PSBPSyk7CisgICAgZWxzZSBpZiAoKnAgPT0gJyonKQkJCS8qIGludGVybmFsIG9yIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiAqLworICAgIHsKKwkrK3A7CisJcCA9IHRyYW5zX2Z1bmN0aW9uX25hbWUoJnAsIEZBTFNFLCBUUlVFKTsKKwlpZiAocCAhPSBOVUxMKQorCXsKKwkgICAgaWYgKEFTQ0lJX0lTVVBQRVIoKnApIHx8IHBbMF0gPT0gS19TUEVDSUFMKQorCQluID0gKGZpbmRfZnVuYyhwKSAhPSBOVUxMKTsKKwkgICAgZWxzZSBpZiAoQVNDSUlfSVNMT1dFUigqcCkpCisJCW4gPSAoZmluZF9pbnRlcm5hbF9mdW5jKHApID49IDApOworCSAgICB2aW1fZnJlZShwKTsKKwl9CisgICAgfQorICAgIGVsc2UgaWYgKCpwID09ICc6JykKKyAgICB7CisJbiA9IGNtZF9leGlzdHMocCArIDEpOworICAgIH0KKyAgICBlbHNlIGlmICgqcCA9PSAnIycpCisgICAgeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCW5hbWUgPSBwICsgMTsKKwlwID0gdmltX3N0cmNocihuYW1lLCAnIycpOworCWlmIChwICE9IE5VTEwpCisJICAgIG4gPSBhdV9leGlzdHMobmFtZSwgcCwgcCArIDEpOworCWVsc2UKKwkgICAgbiA9IGF1X2V4aXN0cyhuYW1lLCBuYW1lICsgU1RSTEVOKG5hbWUpLCBOVUxMKTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCQkJCS8qIGludGVybmFsIHZhcmlhYmxlICovCisgICAgeworI2lmZGVmIEZFQVRfTUFHSUNfQlJBQ0VTCisJY2hhcl91CSpleHByX3N0YXJ0OworCWNoYXJfdQkqZXhwcl9lbmQ7CisJY2hhcl91ICAqdGVtcF9zdHJpbmcgPSBOVUxMOworCWNoYXJfdQkqczsKKyNlbmRpZgorCW5hbWUgPSBwOworCisjaWZkZWYgRkVBVF9NQUdJQ19CUkFDRVMKKwkvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIG5hbWUuICovCisJcyA9IGZpbmRfbmFtZV9lbmQobmFtZSwgJmV4cHJfc3RhcnQsICZleHByX2VuZCk7CisJaWYgKGV4cHJfc3RhcnQgIT0gTlVMTCkKKwl7CisJICAgIHRlbXBfc3RyaW5nID0gbWFrZV9leHBhbmRlZF9uYW1lKG5hbWUsIGV4cHJfc3RhcnQsIGV4cHJfZW5kLCBzKTsKKwkgICAgaWYgKHRlbXBfc3RyaW5nICE9IE5VTEwpCisJICAgIHsKKwkJbGVuID0gU1RSTEVOKHRlbXBfc3RyaW5nKTsKKwkJbmFtZSA9IHRlbXBfc3RyaW5nOworCSAgICB9CisJfQorI2VuZGlmCisJaWYgKGxlbiA9PSAwKQorCSAgICBsZW4gPSBnZXRfaWRfbGVuKCZwKTsKKwlpZiAobGVuICE9IDApCisJICAgIG4gPSAoZ2V0X3Zhcl92YXIobmFtZSwgbGVuLCBOVUxMKSA9PSBPSyk7CisKKyNpZmRlZiBGRUFUX01BR0lDX0JSQUNFUworCXZpbV9mcmVlKHRlbXBfc3RyaW5nKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gbjsKK30KKworLyoKKyAqICJleHBhbmQoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2V4cGFuZChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWxlbjsKKyAgICBjaGFyX3UJKmVycm9ybXNnOworICAgIGludAkJZmxhZ3MgPSBXSUxEX1NJTEVOVHxXSUxEX1VTRV9OTHxXSUxEX0xJU1RfTk9URk9VTkQ7CisgICAgZXhwYW5kX1QJeHBjOworCisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgcyA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKTsKKyAgICBpZiAoKnMgPT0gJyUnIHx8ICpzID09ICcjJyB8fCAqcyA9PSAnPCcpCisgICAgeworCSsrZW1zZ19vZmY7CisJcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBldmFsX3ZhcnMocywgJmxlbiwgTlVMTCwgJmVycm9ybXNnLCBzKTsKKwktLWVtc2dfb2ZmOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIFdoZW4gdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBpcyBub24temVybywgZG9uJ3QgcmVtb3ZlIG1hdGNoZXMKKwkgKiBmb3IgJ3N1ZmZpeGVzJyBhbmQgJ3dpbGRpZ25vcmUnICovCisJaWYgKGFyZ3ZhcnNbMV0udmFyX3R5cGUgIT0gVkFSX1VOS05PV04gJiYgZ2V0X3Zhcl9udW1iZXIoJmFyZ3ZhcnNbMV0pKQorCSAgICBmbGFncyB8PSBXSUxEX0tFRVBfQUxMOworCUV4cGFuZEluaXQoJnhwYyk7CisJeHBjLnhwX2NvbnRleHQgPSBFWFBBTkRfRklMRVM7CisJcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBFeHBhbmRPbmUoJnhwYywgcywgTlVMTCwgZmxhZ3MsIFdJTERfQUxMKTsKKwlFeHBhbmRDbGVhbnVwKCZ4cGMpOworICAgIH0KK30KKworLyoKKyAqICJmaWxlcmVhZGFibGUoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2ZpbGVyZWFkYWJsZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIEZJTEUJKmZkOworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCW47CisKKyAgICBwID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworICAgIGlmICgqcCAmJiAhbWNoX2lzZGlyKHApICYmIChmZCA9IG1jaF9mb3BlbigoY2hhciAqKXAsICJyIikpICE9IE5VTEwpCisgICAgeworCW4gPSBUUlVFOworCWZjbG9zZShmZCk7CisgICAgfQorICAgIGVsc2UKKwluID0gRkFMU0U7CisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IG47Cit9CisKKy8qCisgKiByZXR1cm4gMCBmb3Igbm90IHdyaXRhYmxlLCAxIGZvciB3cml0YWJsZSBmaWxlLCAyIGZvciBhIGRpciB3aGljaCB3ZSBoYXZlCisgKiByaWdodHMgdG8gd3JpdGUgaW50by4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2ZpbGV3cml0YWJsZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCXJldHZhbCA9IDA7CisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykKKyAgICBpbnQJCXBlcm0gPSAwOworI2VuZGlmCisKKyAgICBwID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpCisgICAgcGVybSA9IG1jaF9nZXRwZXJtKHApOworI2VuZGlmCisjaWZuZGVmIE1BQ09TX0NMQVNTSUMgLyogVE9ETzogZ2V0IGVpdGhlciBtY2hfd3JpdGFibGUgb3IgbWNoX2FjY2VzcyAqLworICAgIGlmICgKKyMgaWZkZWYgV0lOMzI2NAorCSAgICBtY2hfd3JpdGFibGUocCkgJiYKKyMgZWxzZQorIyBpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoVk1TKQorCSAgICAocGVybSAmIDAyMjIpICYmCisjICBlbmRpZgorIyBlbmRpZgorCSAgICBtY2hfYWNjZXNzKChjaGFyICopcCwgV19PSykgPT0gMAorICAgICAgICkKKyNlbmRpZgorICAgIHsKKwkrK3JldHZhbDsKKwlpZiAobWNoX2lzZGlyKHApKQorCSAgICArK3JldHZhbDsKKyAgICB9CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSByZXR2YWw7Cit9CisKKy8qCisgKiAiZm5hbWVtb2RpZnkoe2ZuYW1lfSwge21vZHN9KSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2ZuYW1lbW9kaWZ5KGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CSpmbmFtZTsKKyAgICBjaGFyX3UJKm1vZHM7CisgICAgaW50CQl1c2VkbGVuID0gMDsKKyAgICBpbnQJCWxlbjsKKyAgICBjaGFyX3UJKmZidWYgPSBOVUxMOworICAgIGNoYXJfdQlidWZbTlVNQlVGTEVOXTsKKworICAgIGZuYW1lID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworICAgIG1vZHMgPSBnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMV0sIGJ1Zik7CisgICAgbGVuID0gKGludClTVFJMRU4oZm5hbWUpOworCisgICAgKHZvaWQpbW9kaWZ5X2ZuYW1lKG1vZHMsICZ1c2VkbGVuLCAmZm5hbWUsICZmYnVmLCAmbGVuKTsKKworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIGlmIChmbmFtZSA9PSBOVUxMKQorCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gTlVMTDsKKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3RybnNhdmUoZm5hbWUsIGxlbik7CisgICAgdmltX2ZyZWUoZmJ1Zik7Cit9CisKKy8qCisgKiAiZm9sZGNsb3NlZCgpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfZm9sZGNsb3NlZChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGZvbGRjbG9zZWRfYm90aChhcmd2YXJzLCByZXR2YXIsIEZBTFNFKTsKK30KKworLyoKKyAqICJmb2xkY2xvc2VkZW5kKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9mb2xkY2xvc2VkZW5kKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgZm9sZGNsb3NlZF9ib3RoKGFyZ3ZhcnMsIHJldHZhciwgVFJVRSk7Cit9CisKKy8qCisgKiAiZm9sZGNsb3NlZCgpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZvbGRjbG9zZWRfYm90aChhcmd2YXJzLCByZXR2YXIsIGVuZCkKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7CisgICAgaW50CQllbmQ7Cit7CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgbGluZW5yX1QJbG51bTsKKyAgICBsaW5lbnJfVAlmaXJzdCwgbGFzdDsKKworICAgIGxudW0gPSBnZXRfdmFyX2xudW0oYXJndmFycyk7CisgICAgaWYgKGxudW0gPj0gMSAmJiBsbnVtIDw9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorICAgIHsKKwlpZiAoaGFzRm9sZGluZ1dpbihjdXJ3aW4sIGxudW0sICZmaXJzdCwgJmxhc3QsIEZBTFNFLCBOVUxMKSkKKwl7CisJICAgIGlmIChlbmQpCisJCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gKHZhcm51bWJlcl9UKWxhc3Q7CisJICAgIGVsc2UKKwkJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAodmFybnVtYmVyX1QpZmlyc3Q7CisJICAgIHJldHVybjsKKwl9CisgICAgfQorI2VuZGlmCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKK30KKworLyoKKyAqICJmb2xkbGV2ZWwoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2ZvbGRsZXZlbChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGxpbmVucl9UCWxudW07CisKKyAgICBsbnVtID0gZ2V0X3Zhcl9sbnVtKGFyZ3ZhcnMpOworICAgIGlmIChsbnVtID49IDEgJiYgbG51bSA8PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IGZvbGRMZXZlbChsbnVtKTsKKyAgICBlbHNlCisjZW5kaWYKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7Cit9CisKKy8qCisgKiAiZm9sZHRleHQoKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfZm9sZHRleHQoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGNoYXJfdQkqczsKKyAgICBjaGFyX3UJKnI7CisgICAgaW50CQlsZW47CisgICAgY2hhcgkqdHh0OworI2VuZGlmCisKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IE5VTEw7CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaWYgKChsaW5lbnJfVCl2aW12YXJzW1ZWX0ZPTERTVEFSVF0udmFsID4gMAorCSAgICAmJiAobGluZW5yX1QpdmltdmFyc1tWVl9GT0xERU5EXS52YWwgPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQKKwkgICAgJiYgdmltdmFyc1tWVl9GT0xEREFTSEVTXS52YWwgIT0gTlVMTCkKKyAgICB7CisJLyogRmluZCBmaXJzdCBub24tZW1wdHkgbGluZSBpbiB0aGUgZm9sZC4gKi8KKwlsbnVtID0gKGxpbmVucl9UKXZpbXZhcnNbVlZfRk9MRFNUQVJUXS52YWw7CisJd2hpbGUgKGxudW0gPCAobGluZW5yX1QpdmltdmFyc1tWVl9GT0xERU5EXS52YWwpCisJeworCSAgICBpZiAoIWxpbmV3aGl0ZShsbnVtKSkKKwkJYnJlYWs7CisJICAgICsrbG51bTsKKwl9CisKKwkvKiBGaW5kIGludGVyZXN0aW5nIHRleHQgaW4gdGhpcyBsaW5lLiAqLworCXMgPSBza2lwd2hpdGUobWxfZ2V0KGxudW0pKTsKKwkvKiBza2lwIEMgY29tbWVudC1zdGFydCAqLworCWlmIChzWzBdID09ICcvJyAmJiAoc1sxXSA9PSAnKicgfHwgc1sxXSA9PSAnLycpKQorCSAgICBzID0gc2tpcHdoaXRlKHMgKyAyKTsKKwl0eHQgPSBfKCIrLSVzJTNsZCBsaW5lczogIik7CisJciA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKHR4dCkKKwkJICAgICsgU1RSTEVOKHZpbXZhcnNbVlZfRk9MRERBU0hFU10udmFsKSAgICAvKiBmb3IgJXMgKi8KKwkJICAgICsgMjAJCQkJICAgIC8qIGZvciAlM2xkICovCisJCSAgICArIFNUUkxFTihzKSkpOwkJCSAgICAvKiBjb25jYXRlbmF0ZWQgKi8KKwlpZiAociAhPSBOVUxMKQorCXsKKwkgICAgc3ByaW50ZigoY2hhciAqKXIsIHR4dCwgdmltdmFyc1tWVl9GT0xEREFTSEVTXS52YWwsCisJCSAgICAobG9uZykoKGxpbmVucl9UKXZpbXZhcnNbVlZfRk9MREVORF0udmFsCisJCQkJICAgLSAobGluZW5yX1QpdmltdmFyc1tWVl9GT0xEU1RBUlRdLnZhbCArIDEpKTsKKwkgICAgbGVuID0gKGludClTVFJMRU4ocik7CisJICAgIFNUUkNBVChyLCBzKTsKKwkgICAgLyogcmVtb3ZlICdmb2xkbWFya2VyJyBhbmQgJ2NvbW1lbnRzdHJpbmcnICovCisJICAgIGZvbGR0ZXh0X2NsZWFudXAociArIGxlbik7CisJICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gcjsKKwl9CisgICAgfQorI2VuZGlmCit9CisKKy8qCisgKiAiZm9yZWdyb3VuZCgpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9mb3JlZ3JvdW5kKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAwOworI2lmZGVmIEZFQVRfR1VJCisgICAgaWYgKGd1aS5pbl91c2UpCisJZ3VpX21jaF9zZXRfZm9yZWdyb3VuZCgpOworI2Vsc2UKKyMgaWZkZWYgV0lOMzIKKyAgICB3aW4zMl9zZXRfZm9yZWdyb3VuZCgpOworIyBlbmRpZgorI2VuZGlmCit9CisKKy8qCisgKiAiZ2V0Y2hhcigpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfZ2V0Y2hhcihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIHZhcm51bWJlcl9UCQluOworCisgICAgKytub19tYXBwaW5nOworICAgICsrYWxsb3dfa2V5czsKKyAgICBpZiAoYXJndmFyc1swXS52YXJfdHlwZSA9PSBWQVJfVU5LTk9XTikKKwkvKiBnZXRjaGFyKCk6IGJsb2NraW5nIHdhaXQuICovCisJbiA9IHNhZmVfdmdldGMoKTsKKyAgICBlbHNlIGlmIChnZXRfdmFyX251bWJlcigmYXJndmFyc1swXSkgPT0gMSkKKwkvKiBnZXRjaGFyKDEpOiBvbmx5IGNoZWNrIGlmIGNoYXIgYXZhaWwgKi8KKwluID0gdnBlZWtjKCk7CisgICAgZWxzZSBpZiAodnBlZWtjKCkgPT0gTlVMKQorCS8qIGdldGNoYXIoMCkgYW5kIG5vIGNoYXIgYXZhaWw6IHJldHVybiB6ZXJvICovCisJbiA9IDA7CisgICAgZWxzZQorCS8qIGdldGNoYXIoMCkgYW5kIGNoYXIgYXZhaWw6IHJldHVybiBjaGFyICovCisJbiA9IHNhZmVfdmdldGMoKTsKKyAgICAtLW5vX21hcHBpbmc7CisgICAgLS1hbGxvd19rZXlzOworCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBuOworICAgIGlmIChJU19TUEVDSUFMKG4pIHx8IG1vZF9tYXNrICE9IDApCisgICAgeworCWNoYXJfdQkJdGVtcFsxMF07ICAgLyogbW9kaWZpZXI6IDMsIG1ieXRlLWNoYXI6IDYsIE5VTDogMSAqLworCWludAkJaSA9IDA7CisKKwkvKiBUdXJuIGEgc3BlY2lhbCBrZXkgaW50byB0aHJlZSBieXRlcywgcGx1cyBtb2RpZmllci4gKi8KKwlpZiAobW9kX21hc2sgIT0gMCkKKwl7CisJICAgIHRlbXBbaSsrXSA9IEtfU1BFQ0lBTDsKKwkgICAgdGVtcFtpKytdID0gS1NfTU9ESUZJRVI7CisJICAgIHRlbXBbaSsrXSA9IG1vZF9tYXNrOworCX0KKwlpZiAoSVNfU1BFQ0lBTChuKSkKKwl7CisJICAgIHRlbXBbaSsrXSA9IEtfU1BFQ0lBTDsKKwkgICAgdGVtcFtpKytdID0gS19TRUNPTkQobik7CisJICAgIHRlbXBbaSsrXSA9IEtfVEhJUkQobik7CisJfQorI2lmZGVmIEZFQVRfTUJZVEUKKwllbHNlIGlmIChoYXNfbWJ5dGUpCisJICAgIGkgKz0gKCptYl9jaGFyMmJ5dGVzKShuLCB0ZW1wICsgaSk7CisjZW5kaWYKKwllbHNlCisJICAgIHRlbXBbaSsrXSA9IG47CisJdGVtcFtpKytdID0gTlVMOworCXJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gdmltX3N0cnNhdmUodGVtcCk7CisgICAgfQorfQorCisvKgorICogImdldGNoYXJtb2QoKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfZ2V0Y2hhcm1vZChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gbW9kX21hc2s7Cit9CisKKy8qCisgKiAiZ2V0Y21kbGluZSgpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9nZXRjbWRsaW5lKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBnZXRfY21kbGluZV9zdHIoKTsKK30KKworLyoKKyAqICJnZXRjbWRwb3MoKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfZ2V0Y21kcG9zKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBnZXRfY21kbGluZV9wb3MoKSArIDE7Cit9CisKKy8qCisgKiAiZ2V0YnVmdmFyKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9nZXRidWZ2YXIoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBidWZfVAkqYnVmOworICAgIGJ1Zl9UCSpzYXZlX2N1cmJ1ZjsKKyAgICBjaGFyX3UJKnZhcm5hbWU7CisgICAgVkFSCQl2OworCisgICAgKytlbXNnX29mZjsKKyAgICBidWYgPSBnZXRfYnVmX3ZhcigmYXJndmFyc1swXSk7CisgICAgdmFybmFtZSA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzFdKTsKKworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gTlVMTDsKKworICAgIGlmIChidWYgIT0gTlVMTCAmJiB2YXJuYW1lICE9IE5VTEwpCisgICAgeworCWlmICgqdmFybmFtZSA9PSAnJicpCS8qIGJ1ZmZlci1sb2NhbC1vcHRpb24gKi8KKwl7CisJICAgIC8qIHNldCBjdXJidWYgdG8gYmUgb3VyIGJ1ZiwgdGVtcG9yYXJpbHkgKi8KKwkgICAgc2F2ZV9jdXJidWYgPSBjdXJidWY7CisJICAgIGN1cmJ1ZiA9IGJ1ZjsKKworCSAgICBnZXRfb3B0aW9uX3ZhcigmdmFybmFtZSwgcmV0dmFyLCBUUlVFKTsKKworCSAgICAvKiByZXN0b3JlIHByZXZpb3VzIG5vdGlvbiBvZiBjdXJidWYgKi8KKwkgICAgY3VyYnVmID0gc2F2ZV9jdXJidWY7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIGxvb2sgdXAgdGhlIHZhcmlhYmxlICovCisJICAgIHYgPSBmaW5kX3Zhcl9pbl9nYSgmYnVmLT5iX3ZhcnMsIHZhcm5hbWUpOworCSAgICBpZiAodiAhPSBOVUxMKQorCQljb3B5X3Zhcih2LCByZXR2YXIpOworCX0KKyAgICB9CisKKyAgICAtLWVtc2dfb2ZmOworfQorCisvKgorICogImdldGN3ZCgpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9nZXRjd2QoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJY3dkW01BWFBBVEhMXTsKKworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIGlmIChtY2hfZGlybmFtZShjd2QsIE1BWFBBVEhMKSA9PSBGQUlMKQorCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gTlVMTDsKKyAgICBlbHNlCisgICAgeworCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gdmltX3N0cnNhdmUoY3dkKTsKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwlzbGFzaF9hZGp1c3QocmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcpOworI2VuZGlmCisgICAgfQorfQorCisvKgorICogImdldGZzaXplKHtmbmFtZX0pIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfZ2V0ZnNpemUoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJKmZuYW1lOworICAgIHN0cnVjdCBzdGF0CXN0OworCisgICAgZm5hbWUgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7CisKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX05VTUJFUjsKKworICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWZuYW1lLCAmc3QpID49IDApCisgICAgeworCWlmIChtY2hfaXNkaXIoZm5hbWUpKQorCSAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7CisJZWxzZQorCSAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9ICh2YXJudW1iZXJfVClzdC5zdF9zaXplOworICAgIH0KKyAgICBlbHNlCisJICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IC0xOworfQorCisvKgorICogImdldGZ0aW1lKHtmbmFtZX0pIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfZ2V0ZnRpbWUoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJKmZuYW1lOworICAgIHN0cnVjdCBzdGF0CXN0OworCisgICAgZm5hbWUgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7CisKKyAgICBpZiAobWNoX3N0YXQoKGNoYXIgKilmbmFtZSwgJnN0KSA+PSAwKQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gKHZhcm51bWJlcl9UKXN0LnN0X210aW1lOworICAgIGVsc2UKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IC0xOworfQorCisvKgorICogImdldHJlZygpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfZ2V0cmVnKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CSpzdHJyZWduYW1lOworICAgIGludAkJcmVnbmFtZTsKKworICAgIGlmIChhcmd2YXJzWzBdLnZhcl90eXBlICE9IFZBUl9VTktOT1dOKQorCXN0cnJlZ25hbWUgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7CisgICAgZWxzZQorCXN0cnJlZ25hbWUgPSB2aW12YXJzW1ZWX1JFR10udmFsOworICAgIHJlZ25hbWUgPSAoc3RycmVnbmFtZSA9PSBOVUxMID8gJyInIDogKnN0cnJlZ25hbWUpOworICAgIGlmIChyZWduYW1lID09IDApCisJcmVnbmFtZSA9ICciJzsKKworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gZ2V0X3JlZ19jb250ZW50cyhyZWduYW1lLCBUUlVFKTsKK30KKworLyoKKyAqICJnZXRyZWd0eXBlKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9nZXRyZWd0eXBlKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CSpzdHJyZWduYW1lOworICAgIGludAkJcmVnbmFtZTsKKyAgICBjaGFyX3UJYnVmW05VTUJVRkxFTiArIDJdOworICAgIGxvbmcJcmVnbGVuID0gMDsKKworICAgIGlmIChhcmd2YXJzWzBdLnZhcl90eXBlICE9IFZBUl9VTktOT1dOKQorCXN0cnJlZ25hbWUgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7CisgICAgZWxzZQorCS8qIERlZmF1bHQgdG8gdjpyZWdpc3RlciAqLworCXN0cnJlZ25hbWUgPSB2aW12YXJzW1ZWX1JFR10udmFsOworCisgICAgcmVnbmFtZSA9IChzdHJyZWduYW1lID09IE5VTEwgPyAnIicgOiAqc3RycmVnbmFtZSk7CisgICAgaWYgKHJlZ25hbWUgPT0gMCkKKwlyZWduYW1lID0gJyInOworCisgICAgYnVmWzBdID0gTlVMOworICAgIGJ1ZlsxXSA9IE5VTDsKKyAgICBzd2l0Y2ggKGdldF9yZWdfdHlwZShyZWduYW1lLCAmcmVnbGVuKSkKKyAgICB7CisJY2FzZSBNTElORTogYnVmWzBdID0gJ1YnOyBicmVhazsKKwljYXNlIE1DSEFSOiBidWZbMF0gPSAndic7IGJyZWFrOworI2lmZGVmIEZFQVRfVklTVUFMCisJY2FzZSBNQkxPQ0s6CisJCWJ1ZlswXSA9IEN0cmxfVjsKKwkJc3ByaW50ZigoY2hhciAqKWJ1ZiArIDEsICIlbGQiLCByZWdsZW4gKyAxKTsKKwkJYnJlYWs7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3Ryc2F2ZShidWYpOworfQorCisvKgorICogImdldGxpbmUobG51bSkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9nZXRsaW5lKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBsbnVtID0gZ2V0X3Zhcl9sbnVtKGFyZ3ZhcnMpOworCisgICAgaWYgKGxudW0gPj0gMSAmJiBsbnVtIDw9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXAgPSBtbF9nZXQobG51bSk7CisgICAgZWxzZQorCXAgPSAoY2hhcl91ICopIiI7CisKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHZpbV9zdHJzYXZlKHApOworfQorCisvKgorICogImdldHdpbnBvc3goKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfZ2V0d2lucG9zeChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gLTE7CisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSkKKyAgICB7CisJaW50CSAgICB4LCB5OworCisJaWYgKGd1aV9tY2hfZ2V0X3dpbnBvcygmeCwgJnkpID09IE9LKQorCSAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IHg7CisgICAgfQorI2VuZGlmCit9CisKKy8qCisgKiAiZ2V0d2lucG9zeSgpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9nZXR3aW5wb3N5KGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKyNpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlKQorICAgIHsKKwlpbnQJICAgIHgsIHk7CisKKwlpZiAoZ3VpX21jaF9nZXRfd2lucG9zKCZ4LCAmeSkgPT0gT0spCisJICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0geTsKKyAgICB9CisjZW5kaWYKK30KKworLyoKKyAqICJnZXR3aW52YXIoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2dldHdpbnZhcihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIHdpbl9UCSp3aW4sICpvbGRjdXJ3aW47CisgICAgY2hhcl91CSp2YXJuYW1lOworICAgIFZBUgkJdjsKKworICAgICsrZW1zZ19vZmY7CisgICAgd2luID0gZmluZF93aW5fYnlfbnIoJmFyZ3ZhcnNbMF0pOworICAgIHZhcm5hbWUgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1sxXSk7CisKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IE5VTEw7CisKKyAgICBpZiAod2luICE9IE5VTEwgJiYgdmFybmFtZSAhPSBOVUxMKQorICAgIHsKKwlpZiAoKnZhcm5hbWUgPT0gJyYnKQkvKiB3aW5kb3ctbG9jYWwtb3B0aW9uICovCisJeworCSAgICAvKiBzZXQgY3Vyd2luIHRvIGJlIG91ciB3aW4sIHRlbXBvcmFyaWx5ICovCisJICAgIG9sZGN1cndpbiA9IGN1cndpbjsKKwkgICAgY3Vyd2luID0gd2luOworCisJICAgIGdldF9vcHRpb25fdmFyKCZ2YXJuYW1lLCByZXR2YXIgLCAxKTsKKworCSAgICAvKiByZXN0b3JlIHByZXZpb3VzIG5vdGlvbiBvZiBjdXJ3aW4gKi8KKwkgICAgY3Vyd2luID0gb2xkY3Vyd2luOworCX0KKwllbHNlCisJeworCSAgICAvKiBsb29rIHVwIHRoZSB2YXJpYWJsZSAqLworCSAgICB2ID0gZmluZF92YXJfaW5fZ2EoJndpbi0+d192YXJzLCB2YXJuYW1lKTsKKwkgICAgaWYgKHYgIT0gTlVMTCkKKwkJY29weV92YXIodiwgcmV0dmFyKTsKKwl9CisgICAgfQorCisgICAgLS1lbXNnX29mZjsKK30KKworLyoKKyAqICJnbG9iKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9nbG9iKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgZXhwYW5kX1QJeHBjOworCisgICAgRXhwYW5kSW5pdCgmeHBjKTsKKyAgICB4cGMueHBfY29udGV4dCA9IEVYUEFORF9GSUxFUzsKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IEV4cGFuZE9uZSgmeHBjLCBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSksCisJCQkJICAgICBOVUxMLCBXSUxEX1VTRV9OTHxXSUxEX1NJTEVOVCwgV0lMRF9BTEwpOworICAgIEV4cGFuZENsZWFudXAoJnhwYyk7Cit9CisKKy8qCisgKiAiZ2xvYnBhdGgoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2dsb2JwYXRoKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CWJ1ZjFbTlVNQlVGTEVOXTsKKworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gZ2xvYnBhdGgoZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pLAorCQkJCSAgICAgICBnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMV0sIGJ1ZjEpKTsKK30KKworLyoKKyAqICJoYXMoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2hhcyhhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGludAkJaTsKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQluID0gRkFMU0U7CisgICAgc3RhdGljIGNoYXIJKihoYXNfbGlzdFtdKSA9CisgICAgeworI2lmZGVmIEFNSUdBCisJImFtaWdhIiwKKyMgaWZkZWYgRkVBVF9BUlAKKwkiYXJwIiwKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIF9fQkVPU19fCisJImJlb3MiLAorI2VuZGlmCisjaWZkZWYgTVNET1MKKyMgaWZkZWYgREpHUFAKKwkiZG9zMzIiLAorIyBlbHNlCisJImRvczE2IiwKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIE1BQ09TIC8qIFRPRE86IFNob3VsZCB3ZSBhZGQgTUFDT1NfQ0xBU1NJQywgTUFDT1NfWD8gKERhbnkpICovCisJIm1hYyIsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1BQ09TX1hfVU5JWCkKKwkibWFjdW5peCIsCisjZW5kaWYKKyNpZmRlZiBPUzIKKwkib3MyIiwKKyNlbmRpZgorI2lmZGVmIF9fUU5YX18KKwkicW54IiwKKyNlbmRpZgorI2lmZGVmIFJJU0NPUworCSJyaXNjb3MiLAorI2VuZGlmCisjaWZkZWYgVU5JWAorCSJ1bml4IiwKKyNlbmRpZgorI2lmZGVmIFZNUworCSJ2bXMiLAorI2VuZGlmCisjaWZkZWYgV0lOMTYKKwkid2luMTYiLAorI2VuZGlmCisjaWZkZWYgV0lOMzIKKwkid2luMzIiLAorI2VuZGlmCisjaWYgZGVmaW5lZChVTklYKSAmJiAoZGVmaW5lZChfX0NZR1dJTjMyX18pIHx8IGRlZmluZWQoX19DWUdXSU5fXykpCisJIndpbjMydW5peCIsCisjZW5kaWYKKyNpZmRlZiBXSU42NAorCSJ3aW42NCIsCisjZW5kaWYKKyNpZmRlZiBFQkNESUMKKwkiZWJjZGljIiwKKyNlbmRpZgorI2lmbmRlZiBDQVNFX0lOU0VOU0lUSVZFX0ZJTEVOQU1FCisJImZuYW1lX2Nhc2UiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9BUkFCSUMKKwkiYXJhYmljIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQVVUT0NNRAorCSJhdXRvY21kIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQkVWQUwKKwkiYmFsbG9vbl9ldmFsIiwKKyNlbmRpZgorI2lmIGRlZmluZWQoU09NRV9CVUlMVElOX1RDQVBTKSB8fCBkZWZpbmVkKEFMTF9CVUlMVElOX1RDQVBTKQorCSJidWlsdGluX3Rlcm1zIiwKKyMgaWZkZWYgQUxMX0JVSUxUSU5fVENBUFMKKwkiYWxsX2J1aWx0aW5fdGVybXMiLAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgRkVBVF9CWVRFT0ZGCisJImJ5dGVfb2Zmc2V0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ0lOREVOVAorCSJjaW5kZW50IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ0xJRU5UU0VSVkVSCisJImNsaWVudHNlcnZlciIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorCSJjbGlwYm9hcmQiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9DTURMX0NPTVBMCisJImNtZGxpbmVfY29tcGwiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9DTURISVNUCisJImNtZGxpbmVfaGlzdCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisJImNvbW1lbnRzIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ1JZUFQKKwkiY3J5cHR2IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ1NDT1BFCisJImNzY29wZSIsCisjZW5kaWYKKyNpZmRlZiBERUJVRworCSJkZWJ1ZyIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0NPTl9ESUFMT0cKKwkiZGlhbG9nX2NvbiIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9ESUFMT0cKKwkiZGlhbG9nX2d1aSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0RJRkYKKwkiZGlmZiIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0RJR1JBUEhTCisJImRpZ3JhcGhzIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfRE5ECisJImRuZCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKKwkiZW1hY3NfdGFncyIsCisjZW5kaWYKKwkiZXZhbCIsCSAgICAvKiBhbHdheXMgcHJlc2VudCwgb2YgY291cnNlISAqLworI2lmZGVmIEZFQVRfRVhfRVhUUkEKKwkiZXhfZXh0cmEiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKwkiZXh0cmFfc2VhcmNoIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfRktNQVAKKwkiZmFyc2kiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9TRUFSQ0hQQVRICisJImZpbGVfaW5fcGF0aCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZJTkRfSUQKKwkiZmluZF9pbl9wYXRoIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworCSJmb2xkaW5nIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9PVEVSCisJImZvb3RlciIsCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVU0VfU1lTVEVNKSAmJiBkZWZpbmVkKFVOSVgpCisJImZvcmsiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9HRVRURVhUCisJImdldHRleHQiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9HVUkKKwkiZ3VpIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJX0FUSEVOQQorIyBpZmRlZiBGRUFUX0dVSV9ORVhUQVcKKwkiZ3VpX25lWHRhdyIsCisjIGVsc2UKKwkiZ3VpX2F0aGVuYSIsCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9CRU9TCisJImd1aV9iZW9zIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJX0dUSworCSJndWlfZ3RrIiwKKyMgaWZkZWYgSEFWRV9HVEsyCisJImd1aV9ndGsyIiwKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJX01BQworCSJndWlfbWFjIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJX01PVElGCisJImd1aV9tb3RpZiIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9QSE9UT04KKwkiZ3VpX3Bob3RvbiIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9XMTYKKwkiZ3VpX3dpbjE2IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJX1czMgorCSJndWlfd2luMzIiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9IQU5HVUxJTgorCSJoYW5ndWxfaW5wdXQiLAorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0lDT05WX0gpICYmIGRlZmluZWQoVVNFX0lDT05WKQorCSJpY29udiIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkiaW5zZXJ0X2V4cGFuZCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0pVTVBMSVNUCisJImp1bXBsaXN0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfS0VZTUFQCisJImtleW1hcCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0xBTkdNQVAKKwkibGFuZ21hcCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0xJQkNBTEwKKwkibGliY2FsbCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0xJTkVCUkVBSworCSJsaW5lYnJlYWsiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9MSVNQCisJImxpc3BpbmRlbnQiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9MSVNUQ01EUworCSJsaXN0Y21kcyIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisJImxvY2FsbWFwIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfTUVOVQorCSJtZW51IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfU0VTU0lPTgorCSJta3Nlc3Npb24iLAorI2VuZGlmCisjaWZkZWYgRkVBVF9NT0RJRllfRk5BTUUKKwkibW9kaWZ5X2ZuYW1lIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfTU9VU0UKKwkibW91c2UiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9NT1VTRVNIQVBFCisJIm1vdXNlc2hhcGUiLAorI2VuZGlmCisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykKKyMgaWZkZWYgRkVBVF9NT1VTRV9ERUMKKwkibW91c2VfZGVjIiwKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9NT1VTRV9HUE0KKwkibW91c2VfZ3BtIiwKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9NT1VTRV9KU0IKKwkibW91c2VfanNidGVybSIsCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTU9VU0VfTkVUCisJIm1vdXNlX25ldHRlcm0iLAorIyBlbmRpZgorIyBpZmRlZiBGRUFUX01PVVNFX1BURVJNCisJIm1vdXNlX3B0ZXJtIiwKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9NT1VTRV9YVEVSTQorCSJtb3VzZV94dGVybSIsCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX01CWVRFCisJIm11bHRpX2J5dGUiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9NQllURV9JTUUKKwkibXVsdGlfYnl0ZV9pbWUiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9NVUxUSV9MQU5HCisJIm11bHRpX2xhbmciLAorI2VuZGlmCisjaWZkZWYgRkVBVF9PTEUKKwkib2xlIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfT1NGSUxFVFlQRQorCSJvc2ZpbGV0eXBlIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorCSJwYXRoX2V4dHJhIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfUEVSTAorI2lmbmRlZiBEWU5BTUlDX1BFUkwKKwkicGVybCIsCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEZFQVRfUFlUSE9OCisjaWZuZGVmIERZTkFNSUNfUFlUSE9OCisJInB5dGhvbiIsCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEZFQVRfUE9TVFNDUklQVAorCSJwb3N0c2NyaXB0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfUFJJTlRFUgorCSJwcmludGVyIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKwkicXVpY2tmaXgiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkicmlnaHRsZWZ0IiwKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9SVUJZKSAmJiAhZGVmaW5lZChEWU5BTUlDX1JVQlkpCisJInJ1YnkiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisJInNjcm9sbGJpbmQiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwkic2hvd2NtZCIsCisJImNtZGxpbmVfaW5mbyIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NJR05TCisJInNpZ25zIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKKwkic21hcnRpbmRlbnQiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9TTklGRgorCSJzbmlmZiIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NUTF9PUFQKKwkic3RhdHVzbGluZSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NVTl9XT1JLU0hPUAorCSJzdW5fd29ya3Nob3AiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJIm5ldGJlYW5zX2ludGciLAorI2VuZGlmCisjaWZkZWYgRkVBVF9TWU5fSEwKKwkic3ludGF4IiwKKyNlbmRpZgorI2lmIGRlZmluZWQoVVNFX1NZU1RFTSkgfHwgIWRlZmluZWQoVU5JWCkKKwkic3lzdGVtIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfVEFHX0JJTlMKKwkidGFnX2JpbmFyeSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1RBR19PTERTVEFUSUMKKwkidGFnX29sZF9zdGF0aWMiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9UQUdfQU5ZV0hJVEUKKwkidGFnX2FueV93aGl0ZSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1RDTAorIyBpZm5kZWYgRFlOQU1JQ19UQ0wKKwkidGNsIiwKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIFRFUk1JTkZPCisJInRlcm1pbmZvIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfVEVSTVJFU1BPTlNFCisJInRlcm1yZXNwb25zZSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1RFWFRPQkoKKwkidGV4dG9iamVjdHMiLAorI2VuZGlmCisjaWZkZWYgSEFWRV9UR0VURU5UCisJInRnZXRlbnQiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9USVRMRQorCSJ0aXRsZSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKwkidG9vbGJhciIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1VTUl9DTURTCisJInVzZXItY29tbWFuZHMiLCAgICAvKiB3YXMgYWNjaWRlbnRhbGx5IGluY2x1ZGVkIGluIDUuNCAqLworCSJ1c2VyX2NvbW1hbmRzIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfVklNSU5GTworCSJ2aW1pbmZvIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJInZlcnRzcGxpdCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJInZpcnR1YWxlZGl0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfVklTVUFMCisJInZpc3VhbCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJU1VBTEVYVFJBCisJInZpc3VhbGV4dHJhIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwkidnJlcGxhY2UiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9XSUxESUdOCisJIndpbGRpZ25vcmUiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9XSUxETUVOVQorCSJ3aWxkbWVudSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkid2luZG93cyIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1dBSworCSJ3aW5hbHRrZXlzIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfV1JJVEVCQUNLVVAKKwkid3JpdGViYWNrdXAiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9YSU0KKwkieGltIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfWEZPTlRTRVQKKwkieGZvbnRzZXQiLAorI2VuZGlmCisjaWZkZWYgVVNFX1hTTVAKKwkieHNtcCIsCisjZW5kaWYKKyNpZmRlZiBVU0VfWFNNUF9JTlRFUkFDVAorCSJ4c21wX2ludGVyYWN0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfWENMSVBCT0FSRAorCSJ4dGVybV9jbGlwYm9hcmQiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9YVEVSTV9TQVZFCisJInh0ZXJtX3NhdmUiLAorI2VuZGlmCisjaWYgZGVmaW5lZChVTklYKSAmJiBkZWZpbmVkKEZFQVRfWDExKQorCSJYMTEiLAorI2VuZGlmCisJTlVMTAorICAgIH07CisKKyAgICBuYW1lID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworICAgIGZvciAoaSA9IDA7IGhhc19saXN0W2ldICE9IE5VTEw7ICsraSkKKwlpZiAoU1RSSUNNUChuYW1lLCBoYXNfbGlzdFtpXSkgPT0gMCkKKwl7CisJICAgIG4gPSBUUlVFOworCSAgICBicmVhazsKKwl9CisKKyAgICBpZiAobiA9PSBGQUxTRSkKKyAgICB7CisJaWYgKFNUUk5JQ01QKG5hbWUsICJwYXRjaCIsIDUpID09IDApCisJICAgIG4gPSBoYXNfcGF0Y2goYXRvaSgoY2hhciAqKW5hbWUgKyA1KSk7CisJZWxzZSBpZiAoU1RSSUNNUChuYW1lLCAidmltX3N0YXJ0aW5nIikgPT0gMCkKKwkgICAgbiA9IChzdGFydGluZyAhPSAwKTsKKyNpZmRlZiBEWU5BTUlDX1RDTAorCWVsc2UgaWYgKFNUUklDTVAobmFtZSwgInRjbCIpID09IDApCisJICAgIG4gPSB0Y2xfZW5hYmxlZChGQUxTRSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFVTRV9JQ09OVikgJiYgZGVmaW5lZChEWU5BTUlDX0lDT05WKQorCWVsc2UgaWYgKFNUUklDTVAobmFtZSwgImljb252IikgPT0gMCkKKwkgICAgbiA9IGljb252X2VuYWJsZWQoRkFMU0UpOworI2VuZGlmCisjaWZkZWYgRFlOQU1JQ19SVUJZCisJZWxzZSBpZiAoU1RSSUNNUChuYW1lLCAicnVieSIpID09IDApCisJICAgIG4gPSBydWJ5X2VuYWJsZWQoRkFMU0UpOworI2VuZGlmCisjaWZkZWYgRFlOQU1JQ19QWVRIT04KKwllbHNlIGlmIChTVFJJQ01QKG5hbWUsICJweXRob24iKSA9PSAwKQorCSAgICBuID0gcHl0aG9uX2VuYWJsZWQoRkFMU0UpOworI2VuZGlmCisjaWZkZWYgRFlOQU1JQ19QRVJMCisJZWxzZSBpZiAoU1RSSUNNUChuYW1lLCAicGVybCIpID09IDApCisJICAgIG4gPSBwZXJsX2VuYWJsZWQoRkFMU0UpOworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUkKKwllbHNlIGlmIChTVFJJQ01QKG5hbWUsICJndWlfcnVubmluZyIpID09IDApCisJICAgIG4gPSAoZ3VpLmluX3VzZSB8fCBndWkuc3RhcnRpbmcpOworIyBpZmRlZiBGRUFUX0dVSV9XMzIKKwllbHNlIGlmIChTVFJJQ01QKG5hbWUsICJndWlfd2luMzJzIikgPT0gMCkKKwkgICAgbiA9IGd1aV9pc193aW4zMnMoKTsKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9CUk9XU0UKKwllbHNlIGlmIChTVFJJQ01QKG5hbWUsICJicm93c2UiKSA9PSAwKQorCSAgICBuID0gZ3VpLmluX3VzZTsJLyogZ3VpX21jaF9icm93c2UoKSB3b3JrcyB3aGVuIEdVSSBpcyBydW5uaW5nICovCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NZTl9ITAorCWVsc2UgaWYgKFNUUklDTVAobmFtZSwgInN5bnRheF9pdGVtcyIpID09IDApCisJICAgIG4gPSBzeW50YXhfcHJlc2VudChjdXJidWYpOworI2VuZGlmCisjaWYgZGVmaW5lZChXSU4zMjY0KQorCWVsc2UgaWYgKFNUUklDTVAobmFtZSwgIndpbjk1IikgPT0gMCkKKwkgICAgbiA9IG1jaF93aW5kb3dzOTUoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gbjsKK30KKworLyoKKyAqICJoYXNtYXB0bygpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfaGFzbWFwdG8oYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgY2hhcl91CSptb2RlOworICAgIGNoYXJfdQlidWZbTlVNQlVGTEVOXTsKKworICAgIG5hbWUgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7CisgICAgaWYgKGFyZ3ZhcnNbMV0udmFyX3R5cGUgPT0gVkFSX1VOS05PV04pCisJbW9kZSA9IChjaGFyX3UgKikibnZvIjsKKyAgICBlbHNlCisJbW9kZSA9IGdldF92YXJfc3RyaW5nX2J1ZigmYXJndmFyc1sxXSwgYnVmKTsKKworICAgIGlmIChtYXBfdG9fZXhpc3RzKG5hbWUsIG1vZGUpKQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gVFJVRTsKKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBGQUxTRTsKK30KKworLyoKKyAqICJoaXN0YWRkKCkiIGZ1bmN0aW9uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX2hpc3RhZGQoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyNpZmRlZiBGRUFUX0NNREhJU1QKKyAgICBpbnQJCWhpc3R5cGU7CisgICAgY2hhcl91CSpzdHI7CisgICAgY2hhcl91CWJ1ZltOVU1CVUZMRU5dOworI2VuZGlmCisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IEZBTFNFOworICAgIGlmIChjaGVja19yZXN0cmljdGVkKCkgfHwgY2hlY2tfc2VjdXJlKCkpCisJcmV0dXJuOworI2lmZGVmIEZFQVRfQ01ESElTVAorICAgIGhpc3R5cGUgPSBnZXRfaGlzdHR5cGUoZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pKTsKKyAgICBpZiAoaGlzdHlwZSA+PSAwKQorICAgIHsKKwlzdHIgPSBnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMV0sIGJ1Zik7CisJaWYgKCpzdHIgIT0gTlVMKQorCXsKKwkgICAgYWRkX3RvX2hpc3RvcnkoaGlzdHlwZSwgc3RyLCBGQUxTRSwgTlVMKTsKKwkgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBUUlVFOworCSAgICByZXR1cm47CisJfQorICAgIH0KKyNlbmRpZgorfQorCisvKgorICogImhpc3RkZWwoKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfaGlzdGRlbChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworI2lmZGVmIEZFQVRfQ01ESElTVAorICAgIGludAkJbjsKKyAgICBjaGFyX3UJYnVmW05VTUJVRkxFTl07CisKKyAgICBpZiAoYXJndmFyc1sxXS52YXJfdHlwZSA9PSBWQVJfVU5LTk9XTikKKwkvKiBvbmx5IG9uZSBhcmd1bWVudDogY2xlYXIgZW50aXJlIGhpc3RvcnkgKi8KKwluID0gY2xyX2hpc3RvcnkoZ2V0X2hpc3R0eXBlKGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKSkpOworICAgIGVsc2UgaWYgKGFyZ3ZhcnNbMV0udmFyX3R5cGUgPT0gVkFSX05VTUJFUikKKwkvKiBpbmRleCBnaXZlbjogcmVtb3ZlIHRoYXQgZW50cnkgKi8KKwluID0gZGVsX2hpc3RvcnlfaWR4KGdldF9oaXN0dHlwZShnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSkpLAorCQkJCQkgICAgKGludClnZXRfdmFyX251bWJlcigmYXJndmFyc1sxXSkpOworICAgIGVsc2UKKwkvKiBzdHJpbmcgZ2l2ZW46IHJlbW92ZSBhbGwgbWF0Y2hpbmcgZW50cmllcyAqLworCW4gPSBkZWxfaGlzdG9yeV9lbnRyeShnZXRfaGlzdHR5cGUoZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pKSwKKwkJCQkJZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzFdLCBidWYpKTsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IG47CisjZWxzZQorICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gMDsKKyNlbmRpZgorfQorCisvKgorICogImhpc3RnZXQoKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfaGlzdGdldChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworI2lmZGVmIEZFQVRfQ01ESElTVAorICAgIGludAkJdHlwZTsKKyAgICBpbnQJCWlkeDsKKworICAgIHR5cGUgPSBnZXRfaGlzdHR5cGUoZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pKTsKKyAgICBpZiAoYXJndmFyc1sxXS52YXJfdHlwZSA9PSBWQVJfVU5LTk9XTikKKwlpZHggPSBnZXRfaGlzdG9yeV9pZHgodHlwZSk7CisgICAgZWxzZQorCWlkeCA9IChpbnQpZ2V0X3Zhcl9udW1iZXIoJmFyZ3ZhcnNbMV0pOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gdmltX3N0cnNhdmUoZ2V0X2hpc3RvcnlfZW50cnkodHlwZSwgaWR4KSk7CisjZWxzZQorICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gTlVMTDsKKyNlbmRpZgorICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworfQorCisvKgorICogImhpc3RucigpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9oaXN0bnIoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBpbnQJCWk7CisKKyNpZmRlZiBGRUFUX0NNREhJU1QKKyAgICBpID0gZ2V0X2hpc3R0eXBlKGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKSk7CisgICAgaWYgKGkgPj0gSElTVF9DTUQgJiYgaSA8IEhJU1RfQ09VTlQpCisJaSA9IGdldF9oaXN0b3J5X2lkeChpKTsKKyAgICBlbHNlCisjZW5kaWYKKwlpID0gLTE7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBpOworfQorCisvKgorICogImhpZ2hsaWdodF9leGlzdHMoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2hsZXhpc3RzKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBoaWdobGlnaHRfZXhpc3RzKGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKSk7Cit9CisKKy8qCisgKiAiaGlnaGxpZ2h0SUQobmFtZSkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9obElEKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBzeW5fbmFtZTJpZChnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSkpOworfQorCisvKgorICogImhvc3RuYW1lKCkiIGZ1bmN0aW9uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX2hvc3RuYW1lKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91IGhvc3RuYW1lWzI1Nl07CisKKyAgICBtY2hfZ2V0X2hvc3RfbmFtZShob3N0bmFtZSwgMjU2KTsKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHZpbV9zdHJzYXZlKGhvc3RuYW1lKTsKK30KKworLyoKKyAqIGljb252KCkgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfaWNvbnYoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgY2hhcl91CWJ1ZjFbTlVNQlVGTEVOXTsKKyAgICBjaGFyX3UJYnVmMltOVU1CVUZMRU5dOworICAgIGNoYXJfdQkqZnJvbSwgKnRvLCAqc3RyOworICAgIHZpbWNvbnZfVAl2aW1jb252OworI2VuZGlmCisKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IE5VTEw7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgc3RyID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworICAgIGZyb20gPSBlbmNfY2Fub25pemUoZW5jX3NraXAoZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzFdLCBidWYxKSkpOworICAgIHRvID0gZW5jX2Nhbm9uaXplKGVuY19za2lwKGdldF92YXJfc3RyaW5nX2J1ZigmYXJndmFyc1syXSwgYnVmMikpKTsKKyAgICB2aW1jb252LnZjX3R5cGUgPSBDT05WX05PTkU7CisgICAgY29udmVydF9zZXR1cCgmdmltY29udiwgZnJvbSwgdG8pOworCisgICAgLyogSWYgdGhlIGVuY29kaW5ncyBhcmUgZXF1YWwsIG5vIGNvbnZlcnNpb24gbmVlZGVkLiAqLworICAgIGlmICh2aW1jb252LnZjX3R5cGUgPT0gQ09OVl9OT05FKQorCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gdmltX3N0cnNhdmUoc3RyKTsKKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBzdHJpbmdfY29udmVydCgmdmltY29udiwgc3RyLCBOVUxMKTsKKworICAgIGNvbnZlcnRfc2V0dXAoJnZpbWNvbnYsIE5VTEwsIE5VTEwpOworICAgIHZpbV9mcmVlKGZyb20pOworICAgIHZpbV9mcmVlKHRvKTsKKyNlbmRpZgorfQorCisvKgorICogImluZGVudCgpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfaW5kZW50KGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgbGluZW5yX1QJbG51bTsKKworICAgIGxudW0gPSBnZXRfdmFyX2xudW0oYXJndmFycyk7CisgICAgaWYgKGxudW0gPj0gMSAmJiBsbnVtIDw9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gZ2V0X2luZGVudF9sbnVtKGxudW0pOworICAgIGVsc2UKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IC0xOworfQorCitzdGF0aWMgaW50IGlucHV0c2VjcmV0X2ZsYWcgPSAwOworCisvKgorICogImlucHV0KCkiIGZ1bmN0aW9uCisgKiAgICAgQWxzbyBoYW5kbGVzIGlucHV0c2VjcmV0KCkgd2hlbiBpbnB1dHNlY3JldCBpcyBzZXQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9pbnB1dChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGNoYXJfdQkqcHJvbXB0ID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworICAgIGNoYXJfdQkqcCA9IE5VTEw7CisgICAgaW50CQljOworICAgIGNoYXJfdQlidWZbTlVNQlVGTEVOXTsKKyAgICBpbnQJCWNtZF9zaWxlbnRfc2F2ZSA9IGNtZF9zaWxlbnQ7CisKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKworI2lmZGVmIE5PX0NPTlNPTEVfSU5QVVQKKyAgICAvKiBXaGlsZSBzdGFydGluZyB1cCwgdGhlcmUgaXMgbm8gcGxhY2UgdG8gZW50ZXIgdGV4dC4gKi8KKyAgICBpZiAobm9fY29uc29sZV9pbnB1dCgpKQorICAgIHsKKwlyZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IE5VTEw7CisJcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgY21kX3NpbGVudCA9IEZBTFNFOwkJLyogV2FudCB0byBzZWUgdGhlIHByb21wdC4gKi8KKyAgICBpZiAocHJvbXB0ICE9IE5VTEwpCisgICAgeworCS8qIE9ubHkgdGhlIHBhcnQgb2YgdGhlIG1lc3NhZ2UgYWZ0ZXIgdGhlIGxhc3QgTkwgaXMgY29uc2lkZXJlZCBhcworCSAqIHByb21wdCBmb3IgdGhlIGNvbW1hbmQgbGluZSAqLworCXAgPSB2aW1fc3RycmNocihwcm9tcHQsICdcbicpOworCWlmIChwID09IE5VTEwpCisJICAgIHAgPSBwcm9tcHQ7CisJZWxzZQorCXsKKwkgICAgKytwOworCSAgICBjID0gKnA7CisJICAgICpwID0gTlVMOworCSAgICBtc2dfc3RhcnQoKTsKKwkgICAgbXNnX2Nscl9lb3MoKTsKKwkgICAgbXNnX3B1dHNfYXR0cihwcm9tcHQsIGVjaG9fYXR0cik7CisJICAgIG1zZ19kaWRvdXQgPSBGQUxTRTsKKwkgICAgbXNnX3N0YXJ0aGVyZSgpOworCSAgICAqcCA9IGM7CisJfQorCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKyAgICB9CisKKyAgICBpZiAoYXJndmFyc1sxXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTikKKwlzdHVmZlJlYWRidWZmU3BlYyhnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMV0sIGJ1ZikpOworCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPQorCQlnZXRjbWRsaW5lX3Byb21wdChpbnB1dHNlY3JldF9mbGFnID8gTlVMIDogJ0AnLCBwLCBlY2hvX2F0dHIpOworCisgICAgLyogc2luY2UgdGhlIHVzZXIgdHlwZWQgdGhpcywgbm8gbmVlZCB0byB3YWl0IGZvciByZXR1cm4gKi8KKyAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisgICAgbXNnX2RpZG91dCA9IEZBTFNFOworICAgIGNtZF9zaWxlbnQgPSBjbWRfc2lsZW50X3NhdmU7Cit9CisKKy8qCisgKiAiaW5wdXRkaWFsb2coKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2lucHV0ZGlhbG9nKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisjaWYgZGVmaW5lZChGRUFUX0dVSV9URVhURElBTE9HKQorICAgIC8qIFVzZSBhIEdVSSBkaWFsb2cgaWYgdGhlIEdVSSBpcyBydW5uaW5nIGFuZCAnYycgaXMgbm90IGluICdndWlvcHRpb25zJyAqLworICAgIGlmIChndWkuaW5fdXNlICYmIHZpbV9zdHJjaHIocF9nbywgR09fQ09ORElBTE9HKSA9PSBOVUxMKQorICAgIHsKKwljaGFyX3UJKm1lc3NhZ2U7CisJY2hhcl91CWJ1ZltOVU1CVUZMRU5dOworCisJbWVzc2FnZSA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKTsKKwlpZiAoYXJndmFyc1sxXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTikKKwl7CisJICAgIFNUUk5DUFkoSU9idWZmLCBnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMV0sIGJ1ZiksIElPU0laRSk7CisJICAgIElPYnVmZltJT1NJWkUgLSAxXSA9IE5VTDsKKwl9CisJZWxzZQorCSAgICBJT2J1ZmZbMF0gPSBOVUw7CisJaWYgKGRvX2RpYWxvZyhWSU1fUVVFU1RJT04sIE5VTEwsIG1lc3NhZ2UsIChjaGFyX3UgKilfKCImT0tcbiZDYW5jZWwiKSwKKwkJCQkJCQkgICAgICAxLCBJT2J1ZmYpID09IDEpCisJICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gdmltX3N0cnNhdmUoSU9idWZmKTsKKwllbHNlCisJeworCSAgICBpZiAoYXJndmFyc1sxXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTgorCQkJCQkmJiBhcmd2YXJzWzJdLnZhcl90eXBlICE9IFZBUl9VTktOT1dOKQorCQlyZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHZpbV9zdHJzYXZlKAorCQkJCQlnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMl0sIGJ1ZikpOworCSAgICBlbHNlCisJCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gTlVMTDsKKwl9CisJcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCWZfaW5wdXQoYXJndmFycywgcmV0dmFyKTsKK30KKworc3RhdGljIGdhcnJheV9UCSAgICBnYV91c2VyaW5wdXQgPSB7MCwgMCwgc2l6ZW9mKHRhc2F2ZV9UKSwgNCwgTlVMTH07CisKKy8qCisgKiAiaW5wdXRyZXN0b3JlKCkiIGZ1bmN0aW9uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX2lucHV0cmVzdG9yZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGlmIChnYV91c2VyaW5wdXQuZ2FfbGVuID4gMCkKKyAgICB7CisJLS1nYV91c2VyaW5wdXQuZ2FfbGVuOworCSsrZ2FfdXNlcmlucHV0LmdhX3Jvb207CisJcmVzdG9yZV90eXBlYWhlYWQoKHRhc2F2ZV9UICopKGdhX3VzZXJpbnB1dC5nYV9kYXRhKQorCQkJCQkJICAgICAgICsgZ2FfdXNlcmlucHV0LmdhX2xlbik7CisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAwOyAvKiBPSyAqLworICAgIH0KKyAgICBlbHNlIGlmIChwX3ZlcmJvc2UgPiAxKQorICAgIHsKKwltc2coKGNoYXJfdSAqKV8oImNhbGxlZCBpbnB1dHJlc3RvcmUoKSBtb3JlIG9mdGVuIHRoYW4gaW5wdXRzYXZlKCkiKSk7CisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAxOyAvKiBGYWlsZWQgKi8KKyAgICB9Cit9CisKKy8qCisgKiAiaW5wdXRzYXZlKCkiIGZ1bmN0aW9uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX2lucHV0c2F2ZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIC8qIEFkZCBhbiBlbnRyeSB0byB0aGUgc3RhY2sgb2YgdHlwZWhlYWQgc3RvcmFnZS4gKi8KKyAgICBpZiAoZ2FfZ3JvdygmZ2FfdXNlcmlucHV0LCAxKSA9PSBPSykKKyAgICB7CisJc2F2ZV90eXBlYWhlYWQoKHRhc2F2ZV9UICopKGdhX3VzZXJpbnB1dC5nYV9kYXRhKQorCQkJCQkJICAgICAgICsgZ2FfdXNlcmlucHV0LmdhX2xlbik7CisJKytnYV91c2VyaW5wdXQuZ2FfbGVuOworCS0tZ2FfdXNlcmlucHV0LmdhX3Jvb207CisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAwOyAvKiBPSyAqLworICAgIH0KKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAxOyAvKiBGYWlsZWQgKi8KK30KKworLyoKKyAqICJpbnB1dHNlY3JldCgpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfaW5wdXRzZWNyZXQoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICArK2NtZGxpbmVfc3RhcjsKKyAgICArK2lucHV0c2VjcmV0X2ZsYWc7CisgICAgZl9pbnB1dChhcmd2YXJzLCByZXR2YXIpOworICAgIC0tY21kbGluZV9zdGFyOworICAgIC0taW5wdXRzZWNyZXRfZmxhZzsKK30KKworLyoKKyAqICJpc2RpcmVjdG9yeSgpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfaXNkaXJlY3RvcnkoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IG1jaF9pc2RpcihnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSkpOworfQorCisvKgorICogImxhc3RfYnVmZmVyX25yKCkiIGZ1bmN0aW9uLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9sYXN0X2J1ZmZlcl9ucihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGludAkJbiA9IDA7CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKwlpZiAobiA8IGJ1Zi0+Yl9mbnVtKQorCSAgICBuID0gYnVmLT5iX2ZudW07CisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IG47Cit9CisKKy8qCisgKiAibGluZShzdHJpbmcpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfbGluZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGxpbmVucl9UCWxudW0gPSAwOworICAgIHBvc19UCSpmcDsKKworICAgIGZwID0gdmFyMmZwb3MoJmFyZ3ZhcnNbMF0sIFRSVUUpOworICAgIGlmIChmcCAhPSBOVUxMKQorCWxudW0gPSBmcC0+bG51bTsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IGxudW07Cit9CisKKy8qCisgKiAibGluZTJieXRlKGxudW0pIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9saW5lMmJ5dGUoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyNpZm5kZWYgRkVBVF9CWVRFT0ZGCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKyNlbHNlCisgICAgbGluZW5yX1QJbG51bTsKKworICAgIGxudW0gPSBnZXRfdmFyX2xudW0oYXJndmFycyk7CisgICAgaWYgKGxudW0gPCAxIHx8IGxudW0gPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCArIDEpCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBtbF9maW5kX2xpbmVfb3Jfb2Zmc2V0KGN1cmJ1ZiwgbG51bSwgTlVMTCk7CisgICAgaWYgKHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID49IDApCisJKytyZXR2YXItPnZhcl92YWwudmFyX251bWJlcjsKKyNlbmRpZgorfQorCisvKgorICogImxpc3BpbmRlbnQobG51bSkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9saXNwaW5kZW50KGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisjaWZkZWYgRkVBVF9MSVNQCisgICAgcG9zX1QJcG9zOworICAgIGxpbmVucl9UCWxudW07CisKKyAgICBwb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworICAgIGxudW0gPSBnZXRfdmFyX2xudW0oYXJndmFycyk7CisgICAgaWYgKGxudW0gPj0gMSAmJiBsbnVtIDw9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorICAgIHsKKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtOworCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gZ2V0X2xpc3BfaW5kZW50KCk7CisJY3Vyd2luLT53X2N1cnNvciA9IHBvczsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKK30KKworLyoKKyAqICJsb2NhbHRpbWUoKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfbG9jYWx0aW1lKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAodmFybnVtYmVyX1QpdGltZShOVUxMKTsKK30KKworLyoKKyAqICJtYXBhcmcoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX21hcGFyZyhhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGdldF9tYXBhcmcoYXJndmFycywgcmV0dmFyLCBUUlVFKTsKK30KKworLyoKKyAqICJtYXBjaGVjaygpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfbWFwY2hlY2soYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBnZXRfbWFwYXJnKGFyZ3ZhcnMsIHJldHZhciwgRkFMU0UpOworfQorCisgICAgc3RhdGljIHZvaWQKK2dldF9tYXBhcmcoYXJndmFycywgcmV0dmFyLCBleGFjdCkKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7CisgICAgaW50CQlleGFjdDsKK3sKKyAgICBjaGFyX3UJKmtleXM7CisgICAgY2hhcl91CSp3aGljaDsKKyAgICBjaGFyX3UJYnVmW05VTUJVRkxFTl07CisgICAgY2hhcl91CSprZXlzX2J1ZiA9IE5VTEw7CisgICAgY2hhcl91CSpyaHM7CisgICAgaW50CQltb2RlOworICAgIGdhcnJheV9UCWdhOworCisgICAgLyogcmV0dXJuIGVtcHR5IHN0cmluZyBmb3IgZmFpbHVyZSAqLworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gTlVMTDsKKworICAgIGtleXMgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7CisgICAgaWYgKCprZXlzID09IE5VTCkKKwlyZXR1cm47CisKKyAgICBpZiAoYXJndmFyc1sxXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTikKKwl3aGljaCA9IGdldF92YXJfc3RyaW5nX2J1ZigmYXJndmFyc1sxXSwgYnVmKTsKKyAgICBlbHNlCisJd2hpY2ggPSAoY2hhcl91ICopIiI7CisgICAgbW9kZSA9IGdldF9tYXBfbW9kZSgmd2hpY2gsIDApOworCisgICAga2V5cyA9IHJlcGxhY2VfdGVybWNvZGVzKGtleXMsICZrZXlzX2J1ZiwgVFJVRSwgVFJVRSk7CisgICAgcmhzID0gY2hlY2tfbWFwKGtleXMsIG1vZGUsIGV4YWN0KTsKKyAgICB2aW1fZnJlZShrZXlzX2J1Zik7CisgICAgaWYgKHJocyAhPSBOVUxMKQorICAgIHsKKwlnYV9pbml0KCZnYSk7CisJZ2EuZ2FfaXRlbXNpemUgPSAxOworCWdhLmdhX2dyb3dzaXplID0gNDA7CisKKwl3aGlsZSAoKnJocyAhPSBOVUwpCisJICAgIGdhX2NvbmNhdCgmZ2EsIHN0cjJzcGVjaWFsKCZyaHMsIEZBTFNFKSk7CisKKwlnYV9hcHBlbmQoJmdhLCBOVUwpOworCXJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gKGNoYXJfdSAqKWdhLmdhX2RhdGE7CisgICAgfQorfQorCisvKgorICogIm1hdGNoKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9tYXRjaChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGZpbmRfc29tZV9tYXRjaChhcmd2YXJzLCByZXR2YXIsIDEpOworfQorCisvKgorICogIm1hdGNoZW5kKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9tYXRjaGVuZChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGZpbmRfc29tZV9tYXRjaChhcmd2YXJzLCByZXR2YXIsIDApOworfQorCisvKgorICogIm1hdGNoc3RyKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9tYXRjaHN0cihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGZpbmRfc29tZV9tYXRjaChhcmd2YXJzLCByZXR2YXIsIDIpOworfQorCisgICAgc3RhdGljIHZvaWQKK2ZpbmRfc29tZV9tYXRjaChhcmd2YXJzLCByZXR2YXIsIHR5cGUpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworICAgIGludAkJdHlwZTsKK3sKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBjaGFyX3UJKnBhdDsKKyAgICByZWdtYXRjaF9UCXJlZ21hdGNoOworICAgIGNoYXJfdQlwYXRidWZbTlVNQlVGTEVOXTsKKyAgICBjaGFyX3UJKnNhdmVfY3BvOworICAgIGxvbmcJc3RhcnQgPSAwOworCisgICAgLyogTWFrZSAnY3BvcHRpb25zJyBlbXB0eSwgdGhlICdsJyBmbGFnIHNob3VsZCBub3QgYmUgdXNlZCBoZXJlLiAqLworICAgIHNhdmVfY3BvID0gcF9jcG87CisgICAgcF9jcG8gPSAoY2hhcl91ICopIiI7CisKKyAgICBzdHIgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7CisgICAgcGF0ID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzFdLCBwYXRidWYpOworCisgICAgaWYgKHR5cGUgPT0gMikKKyAgICB7CisJcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisJcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBOVUxMOworICAgIH0KKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKworICAgIGlmIChhcmd2YXJzWzJdLnZhcl90eXBlICE9IFZBUl9VTktOT1dOKQorICAgIHsKKwlzdGFydCA9IGdldF92YXJfbnVtYmVyKCZhcmd2YXJzWzJdKTsKKwlpZiAoc3RhcnQgPCAwKQorCSAgICBzdGFydCA9IDA7CisJaWYgKHN0YXJ0ID4gKGxvbmcpU1RSTEVOKHN0cikpCisJICAgIGdvdG8gdGhlZW5kOworCXN0ciArPSBzdGFydDsKKyAgICB9CisKKyAgICByZWdtYXRjaC5yZWdwcm9nID0gdmltX3JlZ2NvbXAocGF0LCBSRV9NQUdJQyArIFJFX1NUUklORyk7CisgICAgaWYgKHJlZ21hdGNoLnJlZ3Byb2cgIT0gTlVMTCkKKyAgICB7CisJcmVnbWF0Y2gucm1faWMgPSBwX2ljOworCWlmICh2aW1fcmVnZXhlY19ubCgmcmVnbWF0Y2gsIHN0ciwgKGNvbG5yX1QpMCkpCisJeworCSAgICBpZiAodHlwZSA9PSAyKQorCQlyZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHZpbV9zdHJuc2F2ZShyZWdtYXRjaC5zdGFydHBbMF0sCisJCQkJKGludCkocmVnbWF0Y2guZW5kcFswXSAtIHJlZ21hdGNoLnN0YXJ0cFswXSkpOworCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKHR5cGUgIT0gMCkKKwkJICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0KKwkJCQkgICAgICAodmFybnVtYmVyX1QpKHJlZ21hdGNoLnN0YXJ0cFswXSAtIHN0cik7CisJCWVsc2UKKwkJICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0KKwkJCQkJKHZhcm51bWJlcl9UKShyZWdtYXRjaC5lbmRwWzBdIC0gc3RyKTsKKwkJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgKz0gc3RhcnQ7CisJICAgIH0KKwl9CisJdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7CisgICAgfQorCit0aGVlbmQ6CisgICAgcF9jcG8gPSBzYXZlX2NwbzsKK30KKworLyoKKyAqICJtb2RlKCkiIGZ1bmN0aW9uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX21vZGUoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJYnVmWzJdOworCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKyAgICB7CisJaWYgKFZJc3VhbF9zZWxlY3QpCisJICAgIGJ1ZlswXSA9IFZJc3VhbF9tb2RlICsgJ3MnIC0gJ3YnOworCWVsc2UKKwkgICAgYnVmWzBdID0gVklzdWFsX21vZGU7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCWlmIChTdGF0ZSA9PSBISVRSRVRVUk4gfHwgU3RhdGUgPT0gQVNLTU9SRSB8fCBTdGF0ZSA9PSBTRVRXU0laRSkKKwlidWZbMF0gPSAncic7CisgICAgZWxzZSBpZiAoU3RhdGUgJiBJTlNFUlQpCisgICAgeworCWlmIChTdGF0ZSAmIFJFUExBQ0VfRkxBRykKKwkgICAgYnVmWzBdID0gJ1InOworCWVsc2UKKwkgICAgYnVmWzBdID0gJ2knOworICAgIH0KKyAgICBlbHNlIGlmIChTdGF0ZSAmIENNRExJTkUpCisJYnVmWzBdID0gJ2MnOworICAgIGVsc2UKKwlidWZbMF0gPSAnbic7CisKKyAgICBidWZbMV0gPSBOVUw7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3Ryc2F2ZShidWYpOworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworfQorCisvKgorICogIm5yMmNoYXIoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX25yMmNoYXIoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJYnVmW05VTUJVRkxFTl07CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGhhc19tYnl0ZSkKKwlidWZbKCptYl9jaGFyMmJ5dGVzKSgoaW50KWdldF92YXJfbnVtYmVyKCZhcmd2YXJzWzBdKSwgYnVmKV0gPSBOVUw7CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCWJ1ZlswXSA9IChjaGFyX3UpZ2V0X3Zhcl9udW1iZXIoJmFyZ3ZhcnNbMF0pOworCWJ1ZlsxXSA9IE5VTDsKKyAgICB9CisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3Ryc2F2ZShidWYpOworfQorCisvKgorICogInJlbmFtZSh7ZnJvbX0sIHt0b30pIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfcmVuYW1lKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CWJ1ZltOVU1CVUZMRU5dOworCisgICAgaWYgKGNoZWNrX3Jlc3RyaWN0ZWQoKSB8fCBjaGVja19zZWN1cmUoKSkKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IC0xOworICAgIGVsc2UKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IHZpbV9yZW5hbWUoZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pLAorCQkJCQlnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMV0sIGJ1ZikpOworfQorCisvKgorICogInJlc29sdmUoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX3Jlc29sdmUoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJKnA7CisKKyAgICBwID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworI2lmZGVmIEZFQVRfU0hPUlRDVVQKKyAgICB7CisJY2hhcl91CSp2ID0gTlVMTDsKKworCXYgPSBtY2hfcmVzb2x2ZV9zaG9ydGN1dChwKTsKKwlpZiAodiAhPSBOVUxMKQorCSAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHY7CisJZWxzZQorCSAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHZpbV9zdHJzYXZlKHApOworICAgIH0KKyNlbHNlCisjIGlmZGVmIEhBVkVfUkVBRExJTksKKyAgICB7CisJY2hhcl91CWJ1ZltNQVhQQVRITCArIDFdOworCWNoYXJfdQkqY3B5OworCWludAlsZW47CisJY2hhcl91CSpyZW1haW4gPSBOVUxMOworCWNoYXJfdQkqcTsKKwlpbnQJaXNfcmVsYXRpdmVfdG9fY3VycmVudCA9IEZBTFNFOworCWludAloYXNfdHJhaWxpbmdfcGF0aHNlcCA9IEZBTFNFOworCWludAlsaW1pdCA9IDEwMDsKKworCXAgPSB2aW1fc3Ryc2F2ZShwKTsKKworCWlmIChwWzBdID09ICcuJyAmJiAodmltX2lzcGF0aHNlcChwWzFdKQorCQkJCSAgIHx8IChwWzFdID09ICcuJyAmJiAodmltX2lzcGF0aHNlcChwWzJdKSkpKSkKKwkgICAgaXNfcmVsYXRpdmVfdG9fY3VycmVudCA9IFRSVUU7CisKKwlsZW4gPSBTVFJMRU4ocCk7CisJaWYgKGxlbiA+IDAgJiYgdmltX2lzcGF0aHNlcChwW2xlbi0xXSkpCisJICAgIGhhc190cmFpbGluZ19wYXRoc2VwID0gVFJVRTsKKworCXEgPSBnZXRuZXh0Y29tcChwKTsKKwlpZiAoKnEgIT0gTlVMKQorCXsKKwkgICAgLyogU2VwYXJhdGUgdGhlIGZpcnN0IHBhdGggY29tcG9uZW50IGluICJwIiwgYW5kIGtlZXAgdGhlCisJICAgICAqIHJlbWFpbmRlciAoYmVnaW5uaW5nIHdpdGggdGhlIHBhdGggc2VwYXJhdG9yKS4gKi8KKwkgICAgcmVtYWluID0gdmltX3N0cnNhdmUocSAtIDEpOworCSAgICBxWy0xXSA9IE5VTDsKKwl9CisKKwlmb3IgKDs7KQorCXsKKwkgICAgZm9yICg7OykKKwkgICAgeworCQlsZW4gPSByZWFkbGluaygoY2hhciAqKXAsIChjaGFyICopYnVmLCBNQVhQQVRITCk7CisJCWlmIChsZW4gPD0gMCkKKwkJICAgIGJyZWFrOworCQlidWZbbGVuXSA9IE5VTDsKKworCQlpZiAobGltaXQtLSA9PSAwKQorCQl7CisJCSAgICB2aW1fZnJlZShwKTsKKwkJICAgIHZpbV9mcmVlKHJlbWFpbik7CisJCSAgICBFTVNHKF8oIkU2NTU6IFRvbyBtYW55IHN5bWJvbGljIGxpbmtzIChjeWNsZT8pIikpOworCQkgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBOVUxMOworCQkgICAgZ290byBmYWlsOworCQl9CisKKwkJLyogRW5zdXJlIHRoYXQgdGhlIHJlc3VsdCB3aWxsIGhhdmUgYSB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcgorCQkgKiBpZiB0aGUgYXJndW1lbnQgaGFzIG9uZS4gKi8KKwkJaWYgKHJlbWFpbiA9PSBOVUxMICYmIGhhc190cmFpbGluZ19wYXRoc2VwKQorCQkgICAgYWRkX3BhdGhzZXAoYnVmKTsKKworCQkvKiBTZXBhcmF0ZSB0aGUgZmlyc3QgcGF0aCBjb21wb25lbnQgaW4gdGhlIGxpbmsgdmFsdWUgYW5kCisJCSAqIGNvbmNhdGVuYXRlIHRoZSByZW1haW5kZXJzLiAqLworCQlxID0gZ2V0bmV4dGNvbXAodmltX2lzcGF0aHNlcCgqYnVmKSA/IGJ1ZiArIDEgOiBidWYpOworCQlpZiAoKnEgIT0gTlVMKQorCQl7CisJCSAgICBpZiAocmVtYWluID09IE5VTEwpCisJCQlyZW1haW4gPSB2aW1fc3Ryc2F2ZShxIC0gMSk7CisJCSAgICBlbHNlCisJCSAgICB7CisJCQljcHkgPSB2aW1fc3RybnNhdmUocS0xLCBTVFJMRU4ocS0xKStTVFJMRU4ocmVtYWluKSk7CisJCQlpZiAoY3B5ICE9IE5VTEwpCisJCQl7CisJCQkgICAgU1RSQ0FUKGNweSwgcmVtYWluKTsKKwkJCSAgICB2aW1fZnJlZShyZW1haW4pOworCQkJICAgIHJlbWFpbiA9IGNweTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIHFbLTFdID0gTlVMOworCQl9CisKKwkJcSA9IGdldHRhaWwocCk7CisJCWlmIChxID4gcCAmJiAqcSA9PSBOVUwpCisJCXsKKwkJICAgIC8qIElnbm9yZSB0cmFpbGluZyBwYXRoIHNlcGFyYXRvci4gKi8KKwkJICAgIHFbLTFdID0gTlVMOworCQkgICAgcSA9IGdldHRhaWwocCk7CisJCX0KKwkJaWYgKHEgPiBwICYmICFtY2hfaXNGdWxsTmFtZShidWYpKQorCQl7CisJCSAgICAvKiBzeW1saW5rIGlzIHJlbGF0aXZlIHRvIGRpcmVjdG9yeSBvZiBhcmd1bWVudCAqLworCQkgICAgY3B5ID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4ocCkgKyBTVFJMRU4oYnVmKSArIDEpKTsKKwkJICAgIGlmIChjcHkgIT0gTlVMTCkKKwkJICAgIHsKKwkJCVNUUkNQWShjcHksIHApOworCQkJU1RSQ1BZKGdldHRhaWwoY3B5KSwgYnVmKTsKKwkJCXZpbV9mcmVlKHApOworCQkJcCA9IGNweTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIHZpbV9mcmVlKHApOworCQkgICAgcCA9IHZpbV9zdHJzYXZlKGJ1Zik7CisJCX0KKwkgICAgfQorCisJICAgIGlmIChyZW1haW4gPT0gTlVMTCkKKwkJYnJlYWs7CisKKwkgICAgLyogQXBwZW5kIHRoZSBmaXJzdCBwYXRoIGNvbXBvbmVudCBvZiAicmVtYWluIiB0byAicCIuICovCisJICAgIHEgPSBnZXRuZXh0Y29tcChyZW1haW4gKyAxKTsKKwkgICAgbGVuID0gcSAtIHJlbWFpbiAtICgqcSAhPSBOVUwpOworCSAgICBjcHkgPSB2aW1fc3RybnNhdmUocCwgU1RSTEVOKHApICsgbGVuKTsKKwkgICAgaWYgKGNweSAhPSBOVUxMKQorCSAgICB7CisJCVNUUk5DQVQoY3B5LCByZW1haW4sIGxlbik7CisJCXZpbV9mcmVlKHApOworCQlwID0gY3B5OworCSAgICB9CisJICAgIC8qIFNob3J0ZW4gInJlbWFpbiIuICovCisJICAgIGlmICgqcSAhPSBOVUwpCisJCVNUUkNQWShyZW1haW4sIHEgLSAxKTsKKwkgICAgZWxzZQorCSAgICB7CisJCXZpbV9mcmVlKHJlbWFpbik7CisJCXJlbWFpbiA9IE5VTEw7CisJICAgIH0KKwl9CisKKwkvKiBJZiB0aGUgcmVzdWx0IGlzIGEgcmVsYXRpdmUgcGF0aCBuYW1lLCBtYWtlIGl0IGV4cGxpY2l0bHkgcmVsYXRpdmUgdG8KKwkgKiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaWYgYW5kIG9ubHkgaWYgdGhlIGFyZ3VtZW50IGhhZCB0aGlzIGZvcm0uICovCisJaWYgKCF2aW1faXNwYXRoc2VwKCpwKSkKKwl7CisJICAgIGlmIChpc19yZWxhdGl2ZV90b19jdXJyZW50CisJCSAgICAmJiAqcCAhPSBOVUwKKwkJICAgICYmICEocFswXSA9PSAnLicKKwkJCSYmIChwWzFdID09IE5VTAorCQkJICAgIHx8IHZpbV9pc3BhdGhzZXAocFsxXSkKKwkJCSAgICB8fCAocFsxXSA9PSAnLicKKwkJCQkmJiAocFsyXSA9PSBOVUwKKwkJCQkgICAgfHwgdmltX2lzcGF0aHNlcChwWzJdKSkpKSkpCisJICAgIHsKKwkJLyogUHJlcGVuZCAiLi8iLiAqLworCQljcHkgPSB2aW1fc3RybnNhdmUoKGNoYXJfdSAqKSIuLyIsIDIgKyBTVFJMRU4ocCkpOworCQlpZiAoY3B5ICE9IE5VTEwpCisJCXsKKwkJICAgIFNUUkNBVChjcHksIHApOworCQkgICAgdmltX2ZyZWUocCk7CisJCSAgICBwID0gY3B5OworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAoIWlzX3JlbGF0aXZlX3RvX2N1cnJlbnQpCisJICAgIHsKKwkJLyogU3RyaXAgbGVhZGluZyAiLi8iLiAqLworCQlxID0gcDsKKwkJd2hpbGUgKHFbMF0gPT0gJy4nICYmIHZpbV9pc3BhdGhzZXAocVsxXSkpCisJCSAgICBxICs9IDI7CisJCWlmIChxID4gcCkKKwkJICAgIG1jaF9tZW1tb3ZlKHAsIHAgKyAyLCBTVFJMRU4ocCArIDIpICsgKHNpemVfdCkxKTsKKwkgICAgfQorCX0KKworCS8qIEVuc3VyZSB0aGF0IHRoZSByZXN1bHQgd2lsbCBoYXZlIG5vIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yCisJICogaWYgdGhlIGFyZ3VtZW50IGhhZCBub25lLiAgQnV0IGtlZXAgIi8iIG9yICIvLyIuICovCisJaWYgKCFoYXNfdHJhaWxpbmdfcGF0aHNlcCkKKwl7CisJICAgIHEgPSBwICsgU1RSTEVOKHApOworCSAgICB3aGlsZSAoKHEgPiBwICsgMiB8fCAocSA9PSBwICsgMiAmJiAhdmltX2lzcGF0aHNlcCgqcCkpKQorCQkgICAmJiB2aW1faXNwYXRoc2VwKHFbLTFdKSkKKwkJLS1xOworCSAgICAqcSA9IE5VTDsKKwl9CisKKwlyZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHA7CisgICAgfQorIyBlbHNlCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3Ryc2F2ZShwKTsKKyMgZW5kaWYKKyNlbmRpZgorCisgICAgc2ltcGxpZnlfZmlsZW5hbWUocmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcpOworCisjaWZkZWYgSEFWRV9SRUFETElOSworZmFpbDoKKyNlbmRpZgorICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworfQorCisvKgorICogInNpbXBsaWZ5KCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9zaW1wbGlmeShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGNoYXJfdQkqcDsKKworICAgIHAgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3Ryc2F2ZShwKTsKKyAgICBzaW1wbGlmeV9maWxlbmFtZShyZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyk7CS8qIHNpbXBsaWZ5IGluIHBsYWNlICovCisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7Cit9CisKKy8qCisgKiAic2VhcmNoKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9zZWFyY2goYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJKnBhdDsKKyAgICBwb3NfVAlwb3M7CisgICAgaW50CQlzYXZlX3Bfd3MgPSBwX3dzOworICAgIGludAkJZGlyOworCisgICAgcGF0ID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworICAgIGRpciA9IGdldF9zZWFyY2hfYXJnKCZhcmd2YXJzWzFdLCBOVUxMKTsJLyogbWF5IHNldCBwX3dzICovCisKKyAgICBwb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworICAgIGlmIChzZWFyY2hpdChjdXJ3aW4sIGN1cmJ1ZiwgJnBvcywgZGlyLCBwYXQsIDFMLAorCQkJCQkgICAgICBTRUFSQ0hfS0VFUCwgUkVfU0VBUkNIKSAhPSBGQUlMKQorICAgIHsKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IHBvcy5sbnVtOworCWN1cndpbi0+d19jdXJzb3IgPSBwb3M7CisJLyogIi8kIiB3aWxsIHB1dCB0aGUgY3Vyc29yIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxpbmUsIG1heSBuZWVkIHRvCisJICogY29ycmVjdCB0aGF0IGhlcmUgKi8KKwljaGVja19jdXJzb3IoKTsKKyAgICB9CisgICAgZWxzZQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gMDsKKyAgICBwX3dzID0gc2F2ZV9wX3dzOworfQorCisjZGVmaW5lIFNQX05PTU9WRQkxCS8qIGRvbid0IG1vdmUgY3Vyc29yICovCisjZGVmaW5lIFNQX1JFUEVBVAkyCS8qIHJlcGVhdCB0byBmaW5kIG91dGVyIHBhaXIgKi8KKyNkZWZpbmUgU1BfUkVUQ09VTlQJNAkvKiByZXR1cm4gbWF0Y2hjb3VudCAqLworCisvKgorICogInNlYXJjaHBhaXIoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX3NlYXJjaHBhaXIoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJKnNwYXQsICptcGF0LCAqZXBhdDsKKyAgICBjaGFyX3UJKnNraXA7CisgICAgY2hhcl91CSpwYXQsICpwYXQyLCAqcGF0MzsKKyAgICBwb3NfVAlwb3M7CisgICAgcG9zX1QJZmlyc3Rwb3M7CisgICAgcG9zX1QJc2F2ZV9jdXJzb3I7CisgICAgcG9zX1QJc2F2ZV9wb3M7CisgICAgaW50CQlzYXZlX3Bfd3MgPSBwX3dzOworICAgIGNoYXJfdQkqc2F2ZV9jcG87CisgICAgaW50CQlkaXI7CisgICAgaW50CQlmbGFncyA9IDA7CisgICAgY2hhcl91CW5idWYxW05VTUJVRkxFTl07CisgICAgY2hhcl91CW5idWYyW05VTUJVRkxFTl07CisgICAgY2hhcl91CW5idWYzW05VTUJVRkxFTl07CisgICAgaW50CQluOworICAgIGludAkJcjsKKyAgICBpbnQJCW5lc3QgPSAxOworICAgIGludAkJZXJyOworCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAwOwkvKiBkZWZhdWx0OiBGQUlMICovCisKKyAgICAvKiBNYWtlICdjcG9wdGlvbnMnIGVtcHR5LCB0aGUgJ2wnIGZsYWcgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmUuICovCisgICAgc2F2ZV9jcG8gPSBwX2NwbzsKKyAgICBwX2NwbyA9IChjaGFyX3UgKikiIjsKKworICAgIC8qIEdldCB0aGUgdGhyZWUgcGF0dGVybiBhcmd1bWVudHM6IHN0YXJ0LCBtaWRkbGUsIGVuZC4gKi8KKyAgICBzcGF0ID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworICAgIG1wYXQgPSBnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMV0sIG5idWYxKTsKKyAgICBlcGF0ID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzJdLCBuYnVmMik7CisKKyAgICAvKiBNYWtlIHR3byBzZWFyY2ggcGF0dGVybnM6IHN0YXJ0L2VuZCAocGF0MiwgZm9yIGluIG5lc3RlZCBwYWlycykgYW5kCisgICAgICogc3RhcnQvbWlkZGxlL2VuZCAocGF0MywgZm9yIHRoZSB0b3AgcGFpcikuICovCisgICAgcGF0MiA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKHNwYXQpICsgU1RSTEVOKGVwYXQpICsgMTUpKTsKKyAgICBwYXQzID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4oc3BhdCkgKyBTVFJMRU4obXBhdCkgKyBTVFJMRU4oZXBhdCkgKyAyMykpOworICAgIGlmIChwYXQyID09IE5VTEwgfHwgcGF0MyA9PSBOVUxMKQorCWdvdG8gdGhlZW5kOworICAgIHNwcmludGYoKGNoYXIgKilwYXQyLCAiXFwoJXNcXG1cXClcXHxcXCglc1xcbVxcKSIsIHNwYXQsIGVwYXQpOworICAgIGlmICgqbXBhdCA9PSBOVUwpCisJU1RSQ1BZKHBhdDMsIHBhdDIpOworICAgIGVsc2UKKwlzcHJpbnRmKChjaGFyICopcGF0MywgIlxcKCVzXFxtXFwpXFx8XFwoJXNcXG1cXClcXHxcXCglc1xcbVxcKSIsCisJCQkJCQkJICAgIHNwYXQsIGVwYXQsIG1wYXQpOworCisgICAgLyogSGFuZGxlIHRoZSBvcHRpb25hbCBmb3VydGggYXJndW1lbnQ6IGZsYWdzICovCisgICAgZGlyID0gZ2V0X3NlYXJjaF9hcmcoJmFyZ3ZhcnNbM10sICZmbGFncyk7IC8qIG1heSBzZXQgcF93cyAqLworCisgICAgLyogT3B0aW9uYWwgZmlmdGggYXJndW1lbnQ6IHNraXAgZXhwcmVzaW9uICovCisgICAgaWYgKGFyZ3ZhcnNbM10udmFyX3R5cGUgPT0gVkFSX1VOS05PV04KKwkgICAgfHwgYXJndmFyc1s0XS52YXJfdHlwZSA9PSBWQVJfVU5LTk9XTikKKwlza2lwID0gKGNoYXJfdSAqKSIiOworICAgIGVsc2UKKwlza2lwID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzRdLCBuYnVmMyk7CisKKyAgICBzYXZlX2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgcG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICBmaXJzdHBvcy5sbnVtID0gMDsKKyAgICBwYXQgPSBwYXQzOworICAgIGZvciAoOzspCisgICAgeworCW4gPSBzZWFyY2hpdChjdXJ3aW4sIGN1cmJ1ZiwgJnBvcywgZGlyLCBwYXQsIDFMLAorCQkJCQkJICAgICAgU0VBUkNIX0tFRVAsIFJFX1NFQVJDSCk7CisJaWYgKG4gPT0gRkFJTCB8fCAoZmlyc3Rwb3MubG51bSAhPSAwICYmIGVxdWFscG9zKHBvcywgZmlyc3Rwb3MpKSkKKwkgICAgLyogZGlkbid0IGZpbmQgaXQgb3IgZm91bmQgdGhlIGZpcnN0IG1hdGNoIGFnYWluOiBGQUlMICovCisJICAgIGJyZWFrOworCisJaWYgKGZpcnN0cG9zLmxudW0gPT0gMCkKKwkgICAgZmlyc3Rwb3MgPSBwb3M7CisKKwkvKiBJZiB0aGUgc2tpcCBwYXR0ZXJuIG1hdGNoZXMsIGlnbm9yZSB0aGlzIG1hdGNoLiAqLworCWlmICgqc2tpcCAhPSBOVUwpCisJeworCSAgICBzYXZlX3BvcyA9IGN1cndpbi0+d19jdXJzb3I7CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBwb3M7CisJICAgIHIgPSBldmFsX3RvX2Jvb2woc2tpcCwgJmVyciwgTlVMTCwgRkFMU0UpOworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gc2F2ZV9wb3M7CisJICAgIGlmIChlcnIpCisJICAgIHsKKwkJLyogRXZhbHVhdGluZyB7c2tpcH0gY2F1c2VkIGFuIGVycm9yLCBicmVhayBoZXJlLiAqLworCQljdXJ3aW4tPndfY3Vyc29yID0gc2F2ZV9jdXJzb3I7CisJCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gLTE7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChyKQorCQljb250aW51ZTsKKwl9CisKKwlpZiAoKGRpciA9PSBCQUNLV0FSRCAmJiBuID09IDMpIHx8IChkaXIgPT0gRk9SV0FSRCAmJiBuID09IDIpKQorCXsKKwkgICAgLyogRm91bmQgZW5kIHdoZW4gc2VhcmNoaW5nIGJhY2t3YXJkcyBvciBzdGFydCB3aGVuIHNlYXJjaGluZworCSAgICAgKiBmb3J3YXJkOiBuZXN0ZWQgcGFpci4gKi8KKwkgICAgKytuZXN0OworCSAgICBwYXQgPSBwYXQyOwkJLyogbmVzdGVkLCBkb24ndCBzZWFyY2ggZm9yIG1pZGRsZSAqLworCX0KKwllbHNlCisJeworCSAgICAvKiBGb3VuZCBlbmQgd2hlbiBzZWFyY2hpbmcgZm9yd2FyZCBvciBzdGFydCB3aGVuIHNlYXJjaGluZworCSAgICAgKiBiYWNrd2FyZDogZW5kIG9mIChuZXN0ZWQpIHBhaXI7IG9yIGZvdW5kIG1pZGRsZSBpbiBvdXRlciBwYWlyLiAqLworCSAgICBpZiAoLS1uZXN0ID09IDEpCisJCXBhdCA9IHBhdDM7CS8qIG91dGVyIGxldmVsLCBzZWFyY2ggZm9yIG1pZGRsZSAqLworCX0KKworCWlmIChuZXN0ID09IDApCisJeworCSAgICAvKiBGb3VuZCB0aGUgbWF0Y2g6IHJldHVybiBtYXRjaGNvdW50IG9yIGxpbmUgbnVtYmVyLiAqLworCSAgICBpZiAoZmxhZ3MgJiBTUF9SRVRDT1VOVCkKKwkJKytyZXR2YXItPnZhcl92YWwudmFyX251bWJlcjsKKwkgICAgZWxzZQorCQlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IHBvcy5sbnVtOworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gcG9zOworCSAgICBpZiAoIShmbGFncyAmIFNQX1JFUEVBVCkpCisJCWJyZWFrOworCSAgICBuZXN0ID0gMTsJICAgIC8qIHNlYXJjaCBmb3IgbmV4dCB1bm1hdGNoZWQgKi8KKwl9CisgICAgfQorCisgICAgLyogSWYgJ24nIGZsYWcgaXMgdXNlZCBvciBzZWFyY2ggZmFpbGVkOiByZXN0b3JlIGN1cnNvciBwb3NpdGlvbi4gKi8KKyAgICBpZiAoKGZsYWdzICYgU1BfTk9NT1ZFKSB8fCByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9PSAwKQorCWN1cndpbi0+d19jdXJzb3IgPSBzYXZlX2N1cnNvcjsKKwordGhlZW5kOgorICAgIHZpbV9mcmVlKHBhdDIpOworICAgIHZpbV9mcmVlKHBhdDMpOworICAgIHBfd3MgPSBzYXZlX3Bfd3M7CisgICAgcF9jcG8gPSBzYXZlX2NwbzsKK30KKworICAgIHN0YXRpYyBpbnQKK2dldF9zZWFyY2hfYXJnKHZhcnAsIGZsYWdzcCkKKyAgICBWQVIJCXZhcnA7CisgICAgaW50CQkqZmxhZ3NwOworeworICAgIGludAkJZGlyID0gRk9SV0FSRDsKKyAgICBjaGFyX3UJKmZsYWdzOworICAgIGNoYXJfdQluYnVmW05VTUJVRkxFTl07CisKKyAgICBpZiAodmFycC0+dmFyX3R5cGUgIT0gVkFSX1VOS05PV04pCisgICAgeworCWZsYWdzID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKHZhcnAsIG5idWYpOworCWlmICh2aW1fc3RyY2hyKGZsYWdzLCAnYicpICE9IE5VTEwpCisJICAgIGRpciA9IEJBQ0tXQVJEOworCWlmICh2aW1fc3RyY2hyKGZsYWdzLCAndycpICE9IE5VTEwpCisJICAgIHBfd3MgPSBUUlVFOworCWlmICh2aW1fc3RyY2hyKGZsYWdzLCAnVycpICE9IE5VTEwpCisJICAgIHBfd3MgPSBGQUxTRTsKKwlpZiAoZmxhZ3NwICE9IE5VTEwpCisJeworCSAgICBpZiAodmltX3N0cmNocihmbGFncywgJ24nKSAhPSBOVUxMKQorCQkqZmxhZ3NwIHw9IFNQX05PTU9WRTsKKwkgICAgaWYgKHZpbV9zdHJjaHIoZmxhZ3MsICdyJykgIT0gTlVMTCkKKwkJKmZsYWdzcCB8PSBTUF9SRVBFQVQ7CisJICAgIGlmICh2aW1fc3RyY2hyKGZsYWdzLCAnbScpICE9IE5VTEwpCisJCSpmbGFnc3AgfD0gU1BfUkVUQ09VTlQ7CisJfQorICAgIH0KKyAgICByZXR1cm4gZGlyOworfQorCisvKgorICogInNldGJ1ZnZhcigpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9zZXRidWZ2YXIoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBidWZfVAkqYnVmOworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIGFjb19zYXZlX1QJYWNvOworI2Vsc2UKKyAgICBidWZfVAkqc2F2ZV9jdXJidWY7CisjZW5kaWYKKyAgICBjaGFyX3UJKnZhcm5hbWUsICpidWZ2YXJuYW1lOworICAgIFZBUgkJdmFycDsKKyAgICBjaGFyX3UJbmJ1ZltOVU1CVUZMRU5dOworCisgICAgaWYgKGNoZWNrX3Jlc3RyaWN0ZWQoKSB8fCBjaGVja19zZWN1cmUoKSkKKwlyZXR1cm47CisgICAgKytlbXNnX29mZjsKKyAgICBidWYgPSBnZXRfYnVmX3ZhcigmYXJndmFyc1swXSk7CisgICAgdmFybmFtZSA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzFdKTsKKyAgICB2YXJwID0gJmFyZ3ZhcnNbMl07CisKKyAgICBpZiAoYnVmICE9IE5VTEwgJiYgdmFybmFtZSAhPSBOVUxMICYmIHZhcnAgIT0gTlVMTCkKKyAgICB7CisJLyogc2V0IGN1cmJ1ZiB0byBiZSBvdXIgYnVmLCB0ZW1wb3JhcmlseSAqLworI2lmZGVmIEZFQVRfQVVUT0NNRAorCWF1Y21kX3ByZXBidWYoJmFjbywgYnVmKTsKKyNlbHNlCisJc2F2ZV9jdXJidWYgPSBjdXJidWY7CisJY3VyYnVmID0gYnVmOworI2VuZGlmCisKKwlpZiAoKnZhcm5hbWUgPT0gJyYnKQorCXsKKwkgICAgKyt2YXJuYW1lOworCSAgICBzZXRfb3B0aW9uX3ZhbHVlKHZhcm5hbWUsIGdldF92YXJfbnVtYmVyKHZhcnApLAorCQkJCSAgIGdldF92YXJfc3RyaW5nX2J1Zih2YXJwLCBuYnVmKSwgT1BUX0xPQ0FMKTsKKwl9CisJZWxzZQorCXsKKwkgICAgYnVmdmFybmFtZSA9IGFsbG9jKCh1bnNpZ25lZClTVFJMRU4odmFybmFtZSkgKyAzKTsKKwkgICAgaWYgKGJ1ZnZhcm5hbWUgIT0gTlVMTCkKKwkgICAgeworCQlTVFJDUFkoYnVmdmFybmFtZSwgImI6Iik7CisJCVNUUkNQWShidWZ2YXJuYW1lICsgMiwgdmFybmFtZSk7CisJCXNldF92YXIoYnVmdmFybmFtZSwgdmFycCk7CisJCXZpbV9mcmVlKGJ1ZnZhcm5hbWUpOworCSAgICB9CisJfQorCisJLyogcmVzZXQgbm90aW9uIG9mIGJ1ZmZlciAqLworI2lmZGVmIEZFQVRfQVVUT0NNRAorCWF1Y21kX3Jlc3RidWYoJmFjbyk7CisjZWxzZQorCWN1cmJ1ZiA9IHNhdmVfY3VyYnVmOworI2VuZGlmCisgICAgfQorICAgIC0tZW1zZ19vZmY7Cit9CisKKy8qCisgKiAic2V0Y21kcG9zKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9zZXRjbWRwb3MoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IHNldF9jbWRsaW5lX3BvcygKKwkJCQkJKGludClnZXRfdmFyX251bWJlcigmYXJndmFyc1swXSkgLSAxKTsKK30KKworLyoKKyAqICJzZXRsaW5lKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9zZXRsaW5lKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBjaGFyX3UJKmxpbmU7CisKKyAgICBsbnVtID0gZ2V0X3Zhcl9sbnVtKGFyZ3ZhcnMpOworICAgIGxpbmUgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1sxXSk7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAxOwkJLyogRkFJTCBpcyBkZWZhdWx0ICovCisKKyAgICBpZiAobG51bSA+PSAxCisJICAgICYmIGxudW0gPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQKKwkgICAgJiYgdV9zYXZlc3ViKGxudW0pID09IE9LCisJICAgICYmIG1sX3JlcGxhY2UobG51bSwgbGluZSwgVFJVRSkgPT0gT0spCisgICAgeworCWNoYW5nZWRfYnl0ZXMobG51bSwgMCk7CisJY2hlY2tfY3Vyc29yX2NvbCgpOworCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gMDsKKyAgICB9Cit9CisKKy8qCisgKiAic2V0cmVnKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9zZXRyZWcoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBpbnQJCXJlZ25hbWU7CisgICAgY2hhcl91CSpzdHJyZWduYW1lOworICAgIGNoYXJfdQkqc3Ryb3B0OworICAgIGludAkJYXBwZW5kOworICAgIGNoYXJfdQl5YW5rX3R5cGU7CisgICAgbG9uZwlibG9ja19sZW47CisKKyAgICBibG9ja19sZW4gPSAtMTsKKyAgICB5YW5rX3R5cGUgPSBNQVVUTzsKKyAgICBhcHBlbmQgPSBGQUxTRTsKKworICAgIHN0cnJlZ25hbWUgPSBnZXRfdmFyX3N0cmluZyhhcmd2YXJzKTsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDE7CQkvKiBGQUlMIGlzIGRlZmF1bHQgKi8KKworICAgIHJlZ25hbWUgPSAoc3RycmVnbmFtZSA9PSBOVUxMID8gJyInIDogKnN0cnJlZ25hbWUpOworICAgIGlmIChyZWduYW1lID09IDAgfHwgcmVnbmFtZSA9PSAnQCcpCisJcmVnbmFtZSA9ICciJzsKKyAgICBlbHNlIGlmIChyZWduYW1lID09ICc9JykKKwlyZXR1cm47CisKKyAgICBpZiAoYXJndmFyc1syXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTikKKyAgICB7CisJZm9yIChzdHJvcHQgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1syXSk7ICpzdHJvcHQgIT0gTlVMOyArK3N0cm9wdCkKKwkgICAgc3dpdGNoICgqc3Ryb3B0KQorCSAgICB7CisJCWNhc2UgJ2EnOiBjYXNlICdBJzoJLyogYXBwZW5kICovCisJCSAgICBhcHBlbmQgPSBUUlVFOworCQkgICAgYnJlYWs7CisJCWNhc2UgJ3YnOiBjYXNlICdjJzoJLyogY2hhcmFjdGVyLXdpc2Ugc2VsZWN0aW9uICovCisJCSAgICB5YW5rX3R5cGUgPSBNQ0hBUjsKKwkJICAgIGJyZWFrOworCQljYXNlICdWJzogY2FzZSAnbCc6CS8qIGxpbmUtd2lzZSBzZWxlY3Rpb24gKi8KKwkJICAgIHlhbmtfdHlwZSA9IE1MSU5FOworCQkgICAgYnJlYWs7CisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJY2FzZSAnYic6IGNhc2UgQ3RybF9WOgkvKiBibG9jay13aXNlIHNlbGVjdGlvbiAqLworCQkgICAgeWFua190eXBlID0gTUJMT0NLOworCQkgICAgaWYgKFZJTV9JU0RJR0lUKHN0cm9wdFsxXSkpCisJCSAgICB7CisJCQkrK3N0cm9wdDsKKwkJCWJsb2NrX2xlbiA9IGdldGRpZ2l0cygmc3Ryb3B0KSAtIDE7CisJCQktLXN0cm9wdDsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworI2VuZGlmCisJICAgIH0KKyAgICB9CisKKyAgICB3cml0ZV9yZWdfY29udGVudHNfZXgocmVnbmFtZSwgZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMV0pLCAtMSwKKwkJCQkJCWFwcGVuZCwgeWFua190eXBlLCBibG9ja19sZW4pOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gMDsKK30KKworCisvKgorICogInNldHdpbnZhcihleHByKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2Zfc2V0d2ludmFyKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgd2luX1QJKndpbjsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICB3aW5fVAkqc2F2ZV9jdXJ3aW47CisjZW5kaWYKKyAgICBjaGFyX3UJKnZhcm5hbWUsICp3aW52YXJuYW1lOworICAgIFZBUgkJdmFycDsKKyAgICBjaGFyX3UJbmJ1ZltOVU1CVUZMRU5dOworCisgICAgaWYgKGNoZWNrX3Jlc3RyaWN0ZWQoKSB8fCBjaGVja19zZWN1cmUoKSkKKwlyZXR1cm47CisgICAgKytlbXNnX29mZjsKKyAgICB3aW4gPSBmaW5kX3dpbl9ieV9ucigmYXJndmFyc1swXSk7CisgICAgdmFybmFtZSA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzFdKTsKKyAgICB2YXJwID0gJmFyZ3ZhcnNbMl07CisKKyAgICBpZiAod2luICE9IE5VTEwgJiYgdmFybmFtZSAhPSBOVUxMICYmIHZhcnAgIT0gTlVMTCkKKyAgICB7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJLyogc2V0IGN1cndpbiB0byBiZSBvdXIgd2luLCB0ZW1wb3JhcmlseSAqLworCXNhdmVfY3Vyd2luID0gY3Vyd2luOworCWN1cndpbiA9IHdpbjsKKwljdXJidWYgPSBjdXJ3aW4tPndfYnVmZmVyOworI2VuZGlmCisKKwlpZiAoKnZhcm5hbWUgPT0gJyYnKQorCXsKKwkgICAgKyt2YXJuYW1lOworCSAgICBzZXRfb3B0aW9uX3ZhbHVlKHZhcm5hbWUsIGdldF92YXJfbnVtYmVyKHZhcnApLAorCQkJCSAgIGdldF92YXJfc3RyaW5nX2J1Zih2YXJwLCBuYnVmKSwgT1BUX0xPQ0FMKTsKKwl9CisJZWxzZQorCXsKKwkgICAgd2ludmFybmFtZSA9IGFsbG9jKCh1bnNpZ25lZClTVFJMRU4odmFybmFtZSkgKyAzKTsKKwkgICAgaWYgKHdpbnZhcm5hbWUgIT0gTlVMTCkKKwkgICAgeworCQlTVFJDUFkod2ludmFybmFtZSwgInc6Iik7CisJCVNUUkNQWSh3aW52YXJuYW1lICsgMiwgdmFybmFtZSk7CisJCXNldF92YXIod2ludmFybmFtZSwgdmFycCk7CisJCXZpbV9mcmVlKHdpbnZhcm5hbWUpOworCSAgICB9CisJfQorCisjaWZkZWYgRkVBVF9XSU5ET1dTCisJLyogUmVzdG9yZSBjdXJyZW50IHdpbmRvdywgaWYgaXQncyBzdGlsbCB2YWxpZCAoYXV0b2NvbWFuZHMgY2FuIG1ha2UKKwkgKiBpdCBpbnZhbGlkKS4gKi8KKwlpZiAod2luX3ZhbGlkKHNhdmVfY3Vyd2luKSkKKwl7CisJICAgIGN1cndpbiA9IHNhdmVfY3Vyd2luOworCSAgICBjdXJidWYgPSBjdXJ3aW4tPndfYnVmZmVyOworCX0KKyNlbmRpZgorICAgIH0KKyAgICAtLWVtc2dfb2ZmOworfQorCisvKgorICogIm5leHRub25ibGFuaygpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfbmV4dG5vbmJsYW5rKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgbGluZW5yX1QJbG51bTsKKworICAgIGZvciAobG51bSA9IGdldF92YXJfbG51bShhcmd2YXJzKTsgOyArK2xudW0pCisgICAgeworCWlmIChsbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJeworCSAgICBsbnVtID0gMDsKKwkgICAgYnJlYWs7CisJfQorCWlmICgqc2tpcHdoaXRlKG1sX2dldChsbnVtKSkgIT0gTlVMKQorCSAgICBicmVhazsKKyAgICB9CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBsbnVtOworfQorCisvKgorICogInByZXZub25ibGFuaygpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfcHJldm5vbmJsYW5rKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgbGluZW5yX1QJbG51bTsKKworICAgIGxudW0gPSBnZXRfdmFyX2xudW0oYXJndmFycyk7CisgICAgaWYgKGxudW0gPCAxIHx8IGxudW0gPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwlsbnVtID0gMDsKKyAgICBlbHNlCisJd2hpbGUgKGxudW0gPj0gMSAmJiAqc2tpcHdoaXRlKG1sX2dldChsbnVtKSkgPT0gTlVMKQorCSAgICAtLWxudW07CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBsbnVtOworfQorCisjaWYgZGVmaW5lZChGRUFUX0NMSUVOVFNFUlZFUikgJiYgZGVmaW5lZChGRUFUX1gxMSkKK3N0YXRpYyB2b2lkIG1ha2VfY29ubmVjdGlvbiBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQgY2hlY2tfY29ubmVjdGlvbiBfX0FSR1MoKHZvaWQpKTsKKworICAgIHN0YXRpYyB2b2lkCittYWtlX2Nvbm5lY3Rpb24oKQoreworICAgIGlmIChYX0RJU1BMQVkgPT0gTlVMTAorIyBpZmRlZiBGRUFUX0dVSQorCSAgICAmJiAhZ3VpLmluX3VzZQorIyBlbmRpZgorCSAgICApCisgICAgeworCXhfZm9yY2VfY29ubmVjdCA9IFRSVUU7CisJc2V0dXBfdGVybV9jbGlwKCk7CisJeF9mb3JjZV9jb25uZWN0ID0gRkFMU0U7CisgICAgfQorfQorCisgICAgc3RhdGljIGludAorY2hlY2tfY29ubmVjdGlvbigpCit7CisgICAgbWFrZV9jb25uZWN0aW9uKCk7CisgICAgaWYgKFhfRElTUExBWSA9PSBOVUxMKQorICAgIHsKKwlFTVNHKF8oIkUyNDA6IE5vIGNvbm5lY3Rpb24gdG8gVmltIHNlcnZlciIpKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorI2VuZGlmCisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX3NlcnZlcmxpc3QoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJKnIgPSBOVUxMOworCisjaWZkZWYgRkVBVF9DTElFTlRTRVJWRVIKKyMgaWZkZWYgV0lOMzIKKyAgICByID0gc2VydmVyR2V0VmltTmFtZXMoKTsKKyMgZWxzZQorICAgIG1ha2VfY29ubmVjdGlvbigpOworICAgIGlmIChYX0RJU1BMQVkgIT0gTlVMTCkKKwlyID0gc2VydmVyR2V0VmltTmFtZXMoWF9ESVNQTEFZKTsKKyMgZW5kaWYKKyNlbmRpZgorICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gcjsKK30KKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfcmVtb3RlX3BlZWsoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorICAgIHZhcgkJdjsKKyAgICBjaGFyX3UJKnMgPSBOVUxMOworIyBpZmRlZiBXSU4zMgorICAgIGludAkJbiA9IDA7CisjIGVuZGlmCisKKyAgICBpZiAoY2hlY2tfcmVzdHJpY3RlZCgpIHx8IGNoZWNrX3NlY3VyZSgpKQorICAgIHsKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IC0xOworCXJldHVybjsKKyAgICB9CisjIGlmZGVmIFdJTjMyCisgICAgc3NjYW5mKGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKSwgIiV4IiwgJm4pOworICAgIGlmIChuID09IDApCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKyAgICBlbHNlCisgICAgeworCXMgPSBzZXJ2ZXJHZXRSZXBseSgoSFdORCluLCBGQUxTRSwgRkFMU0UsIEZBTFNFKTsKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IChzICE9IE5VTEwpOworICAgIH0KKyMgZWxzZQorICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gMDsKKyAgICBpZiAoY2hlY2tfY29ubmVjdGlvbigpID09IEZBSUwpCisJcmV0dXJuOworCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBzZXJ2ZXJQZWVrUmVwbHkoWF9ESVNQTEFZLAorCQkJICAgICBzZXJ2ZXJTdHJUb1dpbihnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSkpLCAmcyk7CisjIGVuZGlmCisKKyAgICBpZiAoYXJndmFyc1sxXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTiAmJiByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA+IDApCisgICAgeworCXYudmFyX3R5cGUgPSBWQVJfU1RSSU5HOworCXYudmFyX3ZhbC52YXJfc3RyaW5nID0gdmltX3N0cnNhdmUocyk7CisJc2V0X3ZhcihnZXRfdmFyX3N0cmluZygmYXJndmFyc1sxXSksICZ2KTsKKyAgICB9CisjZWxzZQorICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gLTE7CisjZW5kaWYKK30KKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfcmVtb3RlX3JlYWQoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJKnIgPSBOVUxMOworCisjaWZkZWYgRkVBVF9DTElFTlRTRVJWRVIKKyAgICBpZiAoIWNoZWNrX3Jlc3RyaWN0ZWQoKSAmJiAhY2hlY2tfc2VjdXJlKCkpCisgICAgeworIyBpZmRlZiBXSU4zMgorCS8qIFRoZSBzZXJ2ZXIncyBIV05EIGlzIGVuY29kZWQgaW4gdGhlICdpZCcgcGFyYW1ldGVyICovCisJaW50CQluID0gMDsKKworCXNzY2FuZihnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSksICIleCIsICZuKTsKKwlpZiAobiAhPSAwKQorCSAgICByID0gc2VydmVyR2V0UmVwbHkoKEhXTkQpbiwgRkFMU0UsIFRSVUUsIFRSVUUpOworCWlmIChyID09IE5VTEwpCisjIGVsc2UKKwlpZiAoY2hlY2tfY29ubmVjdGlvbigpID09IEZBSUwgfHwgc2VydmVyUmVhZFJlcGx5KFhfRElTUExBWSwKKwkJICBzZXJ2ZXJTdHJUb1dpbihnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSkpLCAmciwgRkFMU0UpIDwgMCkKKyMgZW5kaWYKKwkgICAgRU1TRyhfKCJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIpKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHI7Cit9CisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX3NlcnZlcjJjbGllbnQoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorICAgIGNoYXJfdQlidWZbTlVNQlVGTEVOXTsKKyAgICBjaGFyX3UJKnNlcnZlciA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKTsKKyAgICBjaGFyX3UJKnJlcGx5ID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzFdLCBidWYpOworCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKyAgICBpZiAoY2hlY2tfcmVzdHJpY3RlZCgpIHx8IGNoZWNrX3NlY3VyZSgpKQorCXJldHVybjsKKyMgaWZkZWYgRkVBVF9YMTEKKyAgICBpZiAoY2hlY2tfY29ubmVjdGlvbigpID09IEZBSUwpCisJcmV0dXJuOworIyBlbmRpZgorCisgICAgaWYgKHNlcnZlclNlbmRSZXBseShzZXJ2ZXIsIHJlcGx5KSA8IDApCisgICAgeworCUVNU0coXygiRTI1ODogVW5hYmxlIHRvIHNlbmQgdG8gY2xpZW50IikpOworCXJldHVybjsKKyAgICB9CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAwOworI2Vsc2UKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IC0xOworI2VuZGlmCit9CisKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorc3RhdGljIHZvaWQgcmVtb3RlX2NvbW1vbiBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyLCBpbnQgZXhwcikpOworCisgICAgc3RhdGljIHZvaWQKK3JlbW90ZV9jb21tb24oYXJndmFycywgcmV0dmFyLCBleHByKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKKyAgICBpbnQJCWV4cHI7Cit7CisgICAgY2hhcl91CSpzZXJ2ZXJfbmFtZTsKKyAgICBjaGFyX3UJKmtleXM7CisgICAgY2hhcl91CSpyID0gTlVMTDsKKyAgICBjaGFyX3UJYnVmW05VTUJVRkxFTl07CisjIGlmZGVmIFdJTjMyCisgICAgSFdORAl3OworIyBlbHNlCisgICAgV2luZG93CXc7CisjIGVuZGlmCisKKyAgICBpZiAoY2hlY2tfcmVzdHJpY3RlZCgpIHx8IGNoZWNrX3NlY3VyZSgpKQorCXJldHVybjsKKworIyBpZmRlZiBGRUFUX1gxMQorICAgIGlmIChjaGVja19jb25uZWN0aW9uKCkgPT0gRkFJTCkKKwlyZXR1cm47CisjIGVuZGlmCisKKyAgICBzZXJ2ZXJfbmFtZSA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKTsKKyAgICBrZXlzID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzFdLCBidWYpOworIyBpZmRlZiBXSU4zMgorICAgIGlmIChzZXJ2ZXJTZW5kVG9WaW0oc2VydmVyX25hbWUsIGtleXMsICZyLCAmdywgZXhwciwgVFJVRSkgPCAwKQorIyBlbHNlCisgICAgaWYgKHNlcnZlclNlbmRUb1ZpbShYX0RJU1BMQVksIHNlcnZlcl9uYW1lLCBrZXlzLCAmciwgJncsIGV4cHIsIDAsIFRSVUUpCisJCQkJCQkJCQkgIDwgMCkKKyMgZW5kaWYKKyAgICB7CisJaWYgKHIgIT0gTlVMTCkKKwkgICAgRU1TRyhyKTsJCS8qIHNlbmRpbmcgd29ya2VkIGJ1dCBldmFsdWF0aW9uIGZhaWxlZCAqLworCWVsc2UKKwkgICAgRU1TRzIoXygiRTI0MTogVW5hYmxlIHRvIHNlbmQgdG8gJXMiKSwgc2VydmVyX25hbWUpOworCXJldHVybjsKKyAgICB9CisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHI7CisKKyAgICBpZiAoYXJndmFyc1syXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTikKKyAgICB7CisJdmFyCXY7CisJY2hhcl91CXN0clszMF07CisKKwlzcHJpbnRmKChjaGFyICopc3RyLCAiMHgleCIsICh1bnNpZ25lZCBpbnQpdyk7CisJdi52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisJdi52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3Ryc2F2ZShzdHIpOworCXNldF92YXIoZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMl0pLCAmdik7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiAicmVtb3RlX2V4cHIoKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfcmVtb3RlX2V4cHIoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IE5VTEw7CisjaWZkZWYgRkVBVF9DTElFTlRTRVJWRVIKKyAgICByZW1vdGVfY29tbW9uKGFyZ3ZhcnMsIHJldHZhciwgVFJVRSk7CisjZW5kaWYKK30KKworLyoKKyAqICJyZW1vdGVfc2VuZCgpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9yZW1vdGVfc2VuZChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gTlVMTDsKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorICAgIHJlbW90ZV9jb21tb24oYXJndmFycywgcmV0dmFyLCBGQUxTRSk7CisjZW5kaWYKK30KKworLyoKKyAqICJyZW1vdGVfZm9yZWdyb3VuZCgpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9yZW1vdGVfZm9yZWdyb3VuZChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gMDsKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorIyBpZmRlZiBXSU4zMgorICAgIC8qIE9uIFdpbjMyIGl0J3MgZG9uZSBpbiB0aGlzIGFwcGxpY2F0aW9uLiAqLworICAgIHNlcnZlckZvcmVncm91bmQoZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pKTsKKyMgZWxzZQorICAgIC8qIFNlbmQgYSBmb3JlZ3JvdW5kKCkgZXhwcmVzc2lvbiB0byB0aGUgc2VydmVyLiAqLworICAgIGFyZ3ZhcnNbMV0udmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIGFyZ3ZhcnNbMV0udmFyX3ZhbC52YXJfc3RyaW5nID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKSJmb3JlZ3JvdW5kKCkiKTsKKyAgICBhcmd2YXJzWzJdLnZhcl90eXBlID0gVkFSX1VOS05PV047CisgICAgcmVtb3RlX2NvbW1vbihhcmd2YXJzLCByZXR2YXIsIFRSVUUpOworICAgIHZpbV9mcmVlKGFyZ3ZhcnNbMV0udmFyX3ZhbC52YXJfc3RyaW5nKTsKKyMgZW5kaWYKKyNlbmRpZgorfQorCisjaWZkZWYgSEFWRV9TVFJGVElNRQorLyoKKyAqICJzdHJmdGltZSh7Zm9ybWF0fVssIHt0aW1lfV0pIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2Zfc3RyZnRpbWUoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJcmVzdWx0X2J1ZlsyNTZdOworICAgIHN0cnVjdCB0bQkqY3VydGltZTsKKyAgICB0aW1lX3QJc2Vjb25kczsKKyAgICBjaGFyX3UJKnA7CisKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKworICAgIHAgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7CisgICAgaWYgKGFyZ3ZhcnNbMV0udmFyX3R5cGUgPT0gVkFSX1VOS05PV04pCisJc2Vjb25kcyA9IHRpbWUoTlVMTCk7CisgICAgZWxzZQorCXNlY29uZHMgPSAodGltZV90KWdldF92YXJfbnVtYmVyKCZhcmd2YXJzWzFdKTsKKyAgICBjdXJ0aW1lID0gbG9jYWx0aW1lKCZzZWNvbmRzKTsKKyAgICAvKiBNU1ZDIHJldHVybnMgTlVMTCBmb3IgYW4gaW52YWxpZCB2YWx1ZSBvZiBzZWNvbmRzLiAqLworICAgIGlmIChjdXJ0aW1lID09IE5VTEwpCisJcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopXygiKEludmFsaWQpIikpOworICAgIGVsc2UKKyAgICB7CisjIGlmZGVmIEZFQVRfTUJZVEUKKwl2aW1jb252X1QgICBjb252OworCWNoYXJfdQkgICAgKmVuYzsKKworCWNvbnYudmNfdHlwZSA9IENPTlZfTk9ORTsKKwllbmMgPSBlbmNfbG9jYWxlKCk7CisJY29udmVydF9zZXR1cCgmY29udiwgcF9lbmMsIGVuYyk7CisJaWYgKGNvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJICAgIHAgPSBzdHJpbmdfY29udmVydCgmY29udiwgcCwgTlVMTCk7CisjIGVuZGlmCisJaWYgKHAgIT0gTlVMTCkKKwkgICAgKHZvaWQpc3RyZnRpbWUoKGNoYXIgKilyZXN1bHRfYnVmLCBzaXplb2YocmVzdWx0X2J1ZiksCisJCQkJCQkJICAoY2hhciAqKXAsIGN1cnRpbWUpOworCWVsc2UKKwkgICAgcmVzdWx0X2J1ZlswXSA9IE5VTDsKKworIyBpZmRlZiBGRUFUX01CWVRFCisJaWYgKGNvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJICAgIHZpbV9mcmVlKHApOworCWNvbnZlcnRfc2V0dXAoJmNvbnYsIGVuYywgcF9lbmMpOworCWlmIChjb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorCSAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9CisJCQkJICAgICAgc3RyaW5nX2NvbnZlcnQoJmNvbnYsIHJlc3VsdF9idWYsIE5VTEwpOworCWVsc2UKKyMgZW5kaWYKKwkgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3Ryc2F2ZShyZXN1bHRfYnVmKTsKKworIyBpZmRlZiBGRUFUX01CWVRFCisJLyogUmVsZWFzZSBjb252ZXJzaW9uIGRlc2NyaXB0b3JzICovCisJY29udmVydF9zZXR1cCgmY29udiwgTlVMTCwgTlVMTCk7CisJdmltX2ZyZWUoZW5jKTsKKyMgZW5kaWYKKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqICJzdHJpZHgoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX3N0cmlkeChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGNoYXJfdQlidWZbTlVNQlVGTEVOXTsKKyAgICBjaGFyX3UJKm5lZWRsZTsKKyAgICBjaGFyX3UJKmhheXN0YWNrOworICAgIGNoYXJfdQkqcG9zOworCisgICAgbmVlZGxlID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMV0pOworICAgIGhheXN0YWNrID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzBdLCBidWYpOworICAgIHBvcwk9IChjaGFyX3UgKilzdHJzdHIoKGNoYXIgKiloYXlzdGFjaywgKGNoYXIgKiluZWVkbGUpOworCisgICAgaWYgKHBvcyA9PSBOVUxMKQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gLTE7CisgICAgZWxzZQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gKHZhcm51bWJlcl9UKSAocG9zIC0gaGF5c3RhY2spOworfQorCisvKgorICogInN0cnJpZHgoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX3N0cnJpZHgoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJYnVmW05VTUJVRkxFTl07CisgICAgY2hhcl91CSpuZWVkbGU7CisgICAgY2hhcl91CSpoYXlzdGFjazsKKyAgICBjaGFyX3UJKnJlc3Q7CisgICAgY2hhcl91CSpsYXN0bWF0Y2ggPSBOVUxMOworCisgICAgbmVlZGxlID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMV0pOworICAgIGhheXN0YWNrID0gZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzBdLCBidWYpOworICAgIHJlc3QgPSBoYXlzdGFjazsKKyAgICB3aGlsZSAoKmhheXN0YWNrICE9ICdcMCcpCisgICAgeworCXJlc3QgPSAoY2hhcl91ICopc3Ryc3RyKChjaGFyICopcmVzdCwgKGNoYXIgKiluZWVkbGUpOworCWlmIChyZXN0ID09IE5VTEwpCisJICAgIGJyZWFrOworCWxhc3RtYXRjaCA9IHJlc3QrKzsKKyAgICB9CisKKyAgICBpZiAobGFzdG1hdGNoID09IE5VTEwpCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAodmFybnVtYmVyX1QpIChsYXN0bWF0Y2ggLSBoYXlzdGFjayk7Cit9CisKKy8qCisgKiAic3RybGVuKCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9zdHJsZW4oYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9ICh2YXJudW1iZXJfVCkgKFNUUkxFTihnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSkpKTsKK30KKworLyoKKyAqICJzdHJwYXJ0KCkiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl9zdHJwYXJ0KGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CSpwOworICAgIGludAkJbjsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCXNsZW47CisKKyAgICBwID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworICAgIHNsZW4gPSAoaW50KVNUUkxFTihwKTsKKworICAgIG4gPSBnZXRfdmFyX251bWJlcigmYXJndmFyc1sxXSk7CisgICAgaWYgKGFyZ3ZhcnNbMl0udmFyX3R5cGUgIT0gVkFSX1VOS05PV04pCisJbGVuID0gZ2V0X3Zhcl9udW1iZXIoJmFyZ3ZhcnNbMl0pOworICAgIGVsc2UKKwlsZW4gPSBzbGVuIC0gbjsJICAgIC8qIGRlZmF1bHQgbGVuOiBhbGwgYnl0ZXMgdGhhdCBhcmUgYXZhaWxhYmxlLiAqLworCisgICAgLyoKKyAgICAgKiBPbmx5IHJldHVybiB0aGUgb3ZlcmxhcCBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgcGFydCBhbmQgdGhlIGFjdHVhbAorICAgICAqIHN0cmluZy4KKyAgICAgKi8KKyAgICBpZiAobiA8IDApCisgICAgeworCWxlbiArPSBuOworCW4gPSAwOworICAgIH0KKyAgICBlbHNlIGlmIChuID4gc2xlbikKKwluID0gc2xlbjsKKyAgICBpZiAobGVuIDwgMCkKKwlsZW4gPSAwOworICAgIGVsc2UgaWYgKG4gKyBsZW4gPiBzbGVuKQorCWxlbiA9IHNsZW4gLSBuOworCisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3RybnNhdmUocCArIG4sIGxlbik7Cit9CisKKy8qCisgKiAic3RydHJhbnMoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX3N0cnRyYW5zKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB0cmFuc3N0cihnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSkpOworfQorCisvKgorICogInN5bklEKGxpbmUsIGNvbCwgdHJhbnMpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl9zeW5JRChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGludAkJaWQgPSAwOworI2lmZGVmIEZFQVRfU1lOX0hMCisgICAgbG9uZwlsaW5lOworICAgIGxvbmcJY29sOworICAgIGludAkJdHJhbnM7CisKKyAgICBsaW5lID0gZ2V0X3Zhcl9sbnVtKGFyZ3ZhcnMpOworICAgIGNvbCA9IGdldF92YXJfbnVtYmVyKCZhcmd2YXJzWzFdKSAtIDE7CisgICAgdHJhbnMgPSBnZXRfdmFyX251bWJlcigmYXJndmFyc1syXSk7CisKKyAgICBpZiAobGluZSA+PSAxICYmIGxpbmUgPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQKKwkgICAgJiYgY29sID49IDAgJiYgY29sIDwgKGxvbmcpU1RSTEVOKG1sX2dldChsaW5lKSkpCisJaWQgPSBzeW5fZ2V0X2lkKGxpbmUsIGNvbCwgdHJhbnMpOworI2VuZGlmCisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IGlkOworfQorCisvKgorICogInN5bklEYXR0cihpZCwgd2hhdCBbLCBtb2RlXSkiIGZ1bmN0aW9uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX3N5bklEYXR0cihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGNoYXJfdQkqcCA9IE5VTEw7CisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBpbnQJCWlkOworICAgIGNoYXJfdQkqd2hhdDsKKyAgICBjaGFyX3UJKm1vZGU7CisgICAgY2hhcl91CW1vZGVidWZbTlVNQlVGTEVOXTsKKyAgICBpbnQJCW1vZGVjOworCisgICAgaWQgPSBnZXRfdmFyX251bWJlcigmYXJndmFyc1swXSk7CisgICAgd2hhdCA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzFdKTsKKyAgICBpZiAoYXJndmFyc1syXS52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTikKKyAgICB7CisJbW9kZSA9IGdldF92YXJfc3RyaW5nX2J1ZigmYXJndmFyc1syXSwgbW9kZWJ1Zik7CisJbW9kZWMgPSBUT0xPV0VSX0FTQyhtb2RlWzBdKTsKKwlpZiAobW9kZWMgIT0gJ3QnICYmIG1vZGVjICE9ICdjJworI2lmZGVmIEZFQVRfR1VJCisJCSYmIG1vZGVjICE9ICdnJworI2VuZGlmCisJCSkKKwkgICAgbW9kZWMgPSAwOwkvKiByZXBsYWNlIGludmFsaWQgd2l0aCBjdXJyZW50ICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWZkZWYgRkVBVF9HVUkKKwlpZiAoZ3VpLmluX3VzZSkKKwkgICAgbW9kZWMgPSAnZyc7CisJZWxzZQorI2VuZGlmCisJICAgIGlmICh0X2NvbG9ycyA+IDEpCisJICAgIG1vZGVjID0gJ2MnOworCWVsc2UKKwkgICAgbW9kZWMgPSAndCc7CisgICAgfQorCisKKyAgICBzd2l0Y2ggKFRPTE9XRVJfQVNDKHdoYXRbMF0pKQorICAgIHsKKwljYXNlICdiJzoKKwkJaWYgKFRPTE9XRVJfQVNDKHdoYXRbMV0pID09ICdnJykJLyogYmdbI10gKi8KKwkJICAgIHAgPSBoaWdobGlnaHRfY29sb3IoaWQsIHdoYXQsIG1vZGVjKTsKKwkJZWxzZQkJCQkJLyogYm9sZCAqLworCQkgICAgcCA9IGhpZ2hsaWdodF9oYXNfYXR0cihpZCwgSExfQk9MRCwgbW9kZWMpOworCQlicmVhazsKKworCWNhc2UgJ2YnOgkJCQkJLyogZmdbI10gKi8KKwkJcCA9IGhpZ2hsaWdodF9jb2xvcihpZCwgd2hhdCwgbW9kZWMpOworCQlicmVhazsKKworCWNhc2UgJ2knOgorCQlpZiAoVE9MT1dFUl9BU0Mod2hhdFsxXSkgPT0gJ24nKQkvKiBpbnZlcnNlICovCisJCSAgICBwID0gaGlnaGxpZ2h0X2hhc19hdHRyKGlkLCBITF9JTlZFUlNFLCBtb2RlYyk7CisJCWVsc2UJCQkJCS8qIGl0YWxpYyAqLworCQkgICAgcCA9IGhpZ2hsaWdodF9oYXNfYXR0cihpZCwgSExfSVRBTElDLCBtb2RlYyk7CisJCWJyZWFrOworCisJY2FzZSAnbic6CQkJCQkvKiBuYW1lICovCisJCXAgPSBnZXRfaGlnaGxpZ2h0X25hbWUoTlVMTCwgaWQgLSAxKTsKKwkJYnJlYWs7CisKKwljYXNlICdyJzoJCQkJCS8qIHJldmVyc2UgKi8KKwkJcCA9IGhpZ2hsaWdodF9oYXNfYXR0cihpZCwgSExfSU5WRVJTRSwgbW9kZWMpOworCQlicmVhazsKKworCWNhc2UgJ3MnOgkJCQkJLyogc3RhbmRvdXQgKi8KKwkJcCA9IGhpZ2hsaWdodF9oYXNfYXR0cihpZCwgSExfU1RBTkRPVVQsIG1vZGVjKTsKKwkJYnJlYWs7CisKKwljYXNlICd1JzoJCQkJCS8qIHVuZGVybGluZSAqLworCQlwID0gaGlnaGxpZ2h0X2hhc19hdHRyKGlkLCBITF9VTkRFUkxJTkUsIG1vZGVjKTsKKwkJYnJlYWs7CisgICAgfQorCisgICAgaWYgKHAgIT0gTlVMTCkKKwlwID0gdmltX3N0cnNhdmUocCk7CisjZW5kaWYKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHA7Cit9CisKKy8qCisgKiAic3luSUR0cmFucyhpZCkiIGZ1bmN0aW9uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmX3N5bklEdHJhbnMoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBpbnQJCWlkOworCisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBpZCA9IGdldF92YXJfbnVtYmVyKCZhcmd2YXJzWzBdKTsKKworICAgIGlmIChpZCA+IDApCisJaWQgPSBzeW5fZ2V0X2ZpbmFsX2lkKGlkKTsKKyAgICBlbHNlCisjZW5kaWYKKwlpZCA9IDA7CisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IGlkOworfQorCisvKgorICogInN5c3RlbSgpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2Zfc3lzdGVtKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CSpwOworCisgICAgcCA9IGdldF9jbWRfb3V0cHV0KGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKSwgU0hFTExfU0lMRU5UKTsKKyNpZmRlZiBVU0VfQ1IKKyAgICAvKiB0cmFuc2xhdGUgPENSPiBpbnRvIDxOTD4gKi8KKyAgICBpZiAocCAhPSBOVUxMKQorICAgIHsKKwljaGFyX3UJKnM7CisKKwlmb3IgKHMgPSBwOyAqczsgKytzKQorCXsKKwkgICAgaWYgKCpzID09IENBUikKKwkJKnMgPSBOTDsKKwl9CisgICAgfQorI2Vsc2UKKyMgaWZkZWYgVVNFX0NSTkwKKyAgICAvKiB0cmFuc2xhdGUgPENSPjxOTD4gaW50byA8Tkw+ICovCisgICAgaWYgKHAgIT0gTlVMTCkKKyAgICB7CisJY2hhcl91CSpzLCAqZDsKKworCWQgPSBwOworCWZvciAocyA9IHA7ICpzOyArK3MpCisJeworCSAgICBpZiAoc1swXSA9PSBDQVIgJiYgc1sxXSA9PSBOTCkKKwkJKytzOworCSAgICAqZCsrID0gKnM7CisJfQorCSpkID0gTlVMOworICAgIH0KKyMgZW5kaWYKKyNlbmRpZgorICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gcDsKK30KKworLyoKKyAqICJzdWJtYXRjaCgpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2Zfc3VibWF0Y2goYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHJlZ19zdWJtYXRjaCgoaW50KWdldF92YXJfbnVtYmVyKCZhcmd2YXJzWzBdKSk7Cit9CisKKy8qCisgKiAic3Vic3RpdHV0ZSgpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2Zfc3Vic3RpdHV0ZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGNoYXJfdQlwYXRidWZbTlVNQlVGTEVOXTsKKyAgICBjaGFyX3UJc3ViYnVmW05VTUJVRkxFTl07CisgICAgY2hhcl91CWZsYWdzYnVmW05VTUJVRkxFTl07CisKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IGRvX3N0cmluZ19zdWIoCisJICAgIGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKSwKKwkgICAgZ2V0X3Zhcl9zdHJpbmdfYnVmKCZhcmd2YXJzWzFdLCBwYXRidWYpLAorCSAgICBnZXRfdmFyX3N0cmluZ19idWYoJmFyZ3ZhcnNbMl0sIHN1YmJ1ZiksCisJICAgIGdldF92YXJfc3RyaW5nX2J1ZigmYXJndmFyc1szXSwgZmxhZ3NidWYpKTsKK30KKworLyoKKyAqICJ0ZW1wbmFtZSgpIiBmdW5jdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZl90ZW1wbmFtZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIHN0YXRpYyBpbnQJeCA9ICdBJzsKKworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gdmltX3RlbXBuYW1lKHgpOworCisgICAgLyogQWR2YW5jZSAneCcgdG8gdXNlIEEtWiBhbmQgMC05LCBzbyB0aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCAzNCBkaWZmZXJlbnQKKyAgICAgKiBuYW1lcy4gIFNraXAgJ0knIGFuZCAnTycsIHRoZXkgYXJlIHVzZWQgZm9yIHNoZWxsIHJlZGlyZWN0aW9uLiAqLworICAgIGRvCisgICAgeworCWlmICh4ID09ICdaJykKKwkgICAgeCA9ICcwJzsKKwllbHNlIGlmICh4ID09ICc5JykKKwkgICAgeCA9ICdBJzsKKwllbHNlCisJeworI2lmZGVmIEVCQ0RJQworCSAgICBpZiAoeCA9PSAnSScpCisJCXggPSAnSic7CisJICAgIGVsc2UgaWYgKHggPT0gJ1InKQorCQl4ID0gJ1MnOworCSAgICBlbHNlCisjZW5kaWYKKwkJKyt4OworCX0KKyAgICB9IHdoaWxlICh4ID09ICdJJyB8fCB4ID09ICdPJyk7Cit9CisKKy8qCisgKiAidG9sb3dlcihzdHJpbmcpIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfdG9sb3dlcihhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIGNoYXJfdQkqcDsKKworICAgIHAgPSB2aW1fc3Ryc2F2ZShnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSkpOworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gcDsKKworICAgIGlmIChwICE9IE5VTEwpCisJd2hpbGUgKCpwICE9IE5VTCkKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpbnQJCWw7CisKKwkgICAgaWYgKGVuY191dGY4KQorCSAgICB7CisJCWludCBjLCBsYzsKKworCQljID0gdXRmX3B0cjJjaGFyKHApOworCQlsYyA9IHV0Zl90b2xvd2VyKGMpOworCQlsID0gdXRmX3B0cjJsZW5fY2hlY2socCk7CisJCS8qIFRPRE86IHJlYWxsb2NhdGUgc3RyaW5nIHdoZW4gYnl0ZSBjb3VudCBjaGFuZ2VzLiAqLworCQlpZiAodXRmX2NoYXIybGVuKGxjKSA9PSBsKQorCQkgICAgdXRmX2NoYXIyYnl0ZXMobGMsIHApOworCQlwICs9IGw7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoaGFzX21ieXRlICYmIChsID0gKCptYl9wdHIybGVuX2NoZWNrKShwKSkgPiAxKQorCQlwICs9IGw7CQkvKiBza2lwIG11bHRpLWJ5dGUgY2hhcmFjdGVyICovCisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCSpwID0gVE9MT1dFUl9MT0MoKnApOyAvKiBub3RlIHRoYXQgdG9sb3dlcigpIGNhbiBiZSBhIG1hY3JvICovCisJCSsrcDsKKwkgICAgfQorCX0KK30KKworLyoKKyAqICJ0b3VwcGVyKHN0cmluZykiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl90b3VwcGVyKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CSpwOworCisgICAgcCA9IHZpbV9zdHJzYXZlKGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKSk7CisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBwOworCisgICAgaWYgKHAgIT0gTlVMTCkKKwl3aGlsZSAoKnAgIT0gTlVMKQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGludAkJbDsKKworCSAgICBpZiAoZW5jX3V0ZjgpCisJICAgIHsKKwkJaW50IGMsIHVjOworCisJCWMgPSB1dGZfcHRyMmNoYXIocCk7CisJCXVjID0gdXRmX3RvdXBwZXIoYyk7CisJCWwgPSB1dGZfcHRyMmxlbl9jaGVjayhwKTsKKwkJLyogVE9ETzogcmVhbGxvY2F0ZSBzdHJpbmcgd2hlbiBieXRlIGNvdW50IGNoYW5nZXMuICovCisJCWlmICh1dGZfY2hhcjJsZW4odWMpID09IGwpCisJCSAgICB1dGZfY2hhcjJieXRlcyh1YywgcCk7CisJCXAgKz0gbDsKKwkgICAgfQorCSAgICBlbHNlIGlmIChoYXNfbWJ5dGUgJiYgKGwgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApKSA+IDEpCisJCXAgKz0gbDsJCS8qIHNraXAgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgKi8KKwkgICAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkJKnAgPSBUT1VQUEVSX0xPQygqcCk7IC8qIG5vdGUgdGhhdCB0b3VwcGVyKCkgY2FuIGJlIGEgbWFjcm8gKi8KKwkJcCsrOworCSAgICB9CisJfQorfQorCisvKgorICogInR5cGUoZXhwcikiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl90eXBlKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgaWYgKGFyZ3ZhcnNbMF0udmFyX3R5cGUgPT0gVkFSX05VTUJFUikKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7CisgICAgZWxzZQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gMTsKK30KKworLyoKKyAqICJ2aXJ0Y29sKHN0cmluZykiIGZ1bmN0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZl92aXJ0Y29sKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY29sbnJfVAl2Y29sID0gMDsKKyAgICBwb3NfVAkqZnA7CisKKyAgICBmcCA9IHZhcjJmcG9zKCZhcmd2YXJzWzBdLCBGQUxTRSk7CisgICAgaWYgKGZwICE9IE5VTEwgJiYgZnAtPmxudW0gPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisgICAgeworCWdldHZ2Y29sKGN1cndpbiwgZnAsIE5VTEwsIE5VTEwsICZ2Y29sKTsKKwkrK3Zjb2w7CisgICAgfQorCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSB2Y29sOworfQorCisvKgorICogInZpc3VhbG1vZGUoKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZfdmlzdWFsbW9kZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgY2hhcl91CXN0clsyXTsKKworICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworICAgIHN0clswXSA9IGN1cmJ1Zi0+Yl92aXN1YWxfbW9kZV9ldmFsOworICAgIHN0clsxXSA9IE5VTDsKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHZpbV9zdHJzYXZlKHN0cik7CisKKyAgICAvKiBBIG5vbi16ZXJvIG51bWJlciBvciBub24tZW1wdHkgc3RyaW5nIGFyZ3VtZW50OiByZXNldCBtb2RlLiAqLworICAgIGlmICgoYXJndmFyc1swXS52YXJfdHlwZSA9PSBWQVJfTlVNQkVSCisJCSYmIGFyZ3ZhcnNbMF0udmFyX3ZhbC52YXJfbnVtYmVyICE9IDApCisJICAgIHx8IChhcmd2YXJzWzBdLnZhcl90eXBlID09IFZBUl9TVFJJTkcKKwkJJiYgKmdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKSAhPSBOVUwpKQorCWN1cmJ1Zi0+Yl92aXN1YWxfbW9kZV9ldmFsID0gTlVMOworI2Vsc2UKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7IC8qIHJldHVybiBhbnl0aGluZywgaXQgd29uJ3Qgd29yayBhbnl3YXkgKi8KKyNlbmRpZgorfQorCisvKgorICogIndpbmJ1Zm5yKG5yKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX3dpbmJ1Zm5yKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgd2luX1QJKndwOworCisgICAgd3AgPSBmaW5kX3dpbl9ieV9ucigmYXJndmFyc1swXSk7CisgICAgaWYgKHdwID09IE5VTEwpCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKyAgICBlbHNlCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSB3cC0+d19idWZmZXItPmJfZm51bTsKK30KKworLyoKKyAqICJ3aW5jb2woKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2Zfd2luY29sKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgdmFsaWRhdGVfY3Vyc29yKCk7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSBjdXJ3aW4tPndfd2NvbCArIDE7Cit9CisKKy8qCisgKiAid2luaGVpZ2h0KG5yKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX3dpbmhlaWdodChhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIHdpbl9UCSp3cDsKKworICAgIHdwID0gZmluZF93aW5fYnlfbnIoJmFyZ3ZhcnNbMF0pOworICAgIGlmICh3cCA9PSBOVUxMKQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gLTE7CisgICAgZWxzZQorCXJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gd3AtPndfaGVpZ2h0OworfQorCisvKgorICogIndpbmxpbmUoKSIgZnVuY3Rpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2Zfd2lubGluZShhcmd2YXJzLCByZXR2YXIpCisgICAgVkFSCQlhcmd2YXJzOworICAgIFZBUgkJcmV0dmFyOworeworICAgIHZhbGlkYXRlX2N1cnNvcigpOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfbnVtYmVyID0gY3Vyd2luLT53X3dyb3cgKyAxOworfQorCisvKgorICogIndpbm5yKCkiIGZ1bmN0aW9uCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK2Zfd2lubnIoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBpbnQJCW5yID0gMTsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICB3aW5fVAkqd3A7CisKKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IGN1cndpbjsgd3AgPSB3cC0+d19uZXh0KQorCSsrbnI7CisjZW5kaWYKKyAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IG5yOworfQorCisvKgorICogIndpbnJlc3RjbWQoKSIgZnVuY3Rpb24KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorZl93aW5yZXN0Y21kKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgd2luX1QJKndwOworICAgIGludAkJd2lubnIgPSAxOworICAgIGdhcnJheV9UCWdhOworICAgIGNoYXJfdQlidWZbNTBdOworCisgICAgZ2FfaW5pdDIoJmdhLCAoaW50KXNpemVvZihjaGFyKSwgNzApOworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gTlVMTDsgd3AgPSB3cC0+d19uZXh0KQorICAgIHsKKwlzcHJpbnRmKChjaGFyICopYnVmLCAiJWRyZXNpemUgJWR8Iiwgd2lubnIsIHdwLT53X2hlaWdodCk7CisJZ2FfY29uY2F0KCZnYSwgYnVmKTsKKyMgaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwlzcHJpbnRmKChjaGFyICopYnVmLCAidmVydCAlZHJlc2l6ZSAlZHwiLCB3aW5uciwgd3AtPndfd2lkdGgpOworCWdhX2NvbmNhdCgmZ2EsIGJ1Zik7CisjIGVuZGlmCisJKyt3aW5ucjsKKyAgICB9CisKKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IGdhLmdhX2RhdGE7CisjZWxzZQorICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gTlVMTDsKKyNlbmRpZgorICAgIHJldHZhci0+dmFyX3R5cGUgPSBWQVJfU1RSSU5HOworfQorCisvKgorICogIndpbndpZHRoKG5yKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX3dpbndpZHRoKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgd2luX1QJKndwOworCisgICAgd3AgPSBmaW5kX3dpbl9ieV9ucigmYXJndmFyc1swXSk7CisgICAgaWYgKHdwID09IE5VTEwpCisJcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAtMTsKKyAgICBlbHNlCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IHdwLT53X3dpZHRoOworI2Vsc2UKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IENvbHVtbnM7CisjZW5kaWYKK30KKworICAgIHN0YXRpYyB3aW5fVCAqCitmaW5kX3dpbl9ieV9ucih2cCkKKyAgICBWQVIJCXZwOworeworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIHdpbl9UCSp3cDsKKyNlbmRpZgorICAgIGludAkJbnI7CisKKyAgICBuciA9IGdldF92YXJfbnVtYmVyKHZwKTsKKworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIGlmIChuciA9PSAwKQorCXJldHVybiBjdXJ3aW47CisKKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwlpZiAoLS1uciA8PSAwKQorCSAgICBicmVhazsKKyAgICByZXR1cm4gd3A7CisjZWxzZQorICAgIGlmIChuciA9PSAwIHx8IG5yID09IDEpCisJcmV0dXJuIGN1cndpbjsKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCisvKgorICogVHJhbnNsYXRlIGEgU3RyaW5nIHZhcmlhYmxlIGludG8gYSBwb3NpdGlvbi4KKyAqLworICAgIHN0YXRpYyBwb3NfVCAqCit2YXIyZnBvcyh2YXJwLCBsbnVtKQorICAgIFZBUgkJdmFycDsKKyAgICBpbnQJCWxudW07CQkvKiBUUlVFIHdoZW4gJCBpcyBsYXN0IGxpbmUgKi8KK3sKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgc3RhdGljIHBvc19UCXBvczsKKyAgICBwb3NfVAkqcHA7CisKKyAgICBuYW1lID0gZ2V0X3Zhcl9zdHJpbmcodmFycCk7CisgICAgaWYgKG5hbWVbMF0gPT0gJy4nKQkJLyogY3Vyc29yICovCisJcmV0dXJuICZjdXJ3aW4tPndfY3Vyc29yOworICAgIGlmIChuYW1lWzBdID09ICdcJycpCS8qIG1hcmsgKi8KKyAgICB7CisJcHAgPSBnZXRtYXJrKG5hbWVbMV0sIEZBTFNFKTsKKwlpZiAocHAgPT0gTlVMTCB8fCBwcCA9PSAocG9zX1QgKiktMSB8fCBwcC0+bG51bSA8PSAwKQorCSAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gcHA7CisgICAgfQorICAgIGlmIChuYW1lWzBdID09ICckJykJCS8qIGxhc3QgY29sdW1uIG9yIGxpbmUgKi8KKyAgICB7CisJaWYgKGxudW0pCisJeworCSAgICBwb3MubG51bSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCSAgICBwb3MuY29sID0gMDsKKwl9CisJZWxzZQorCXsKKwkgICAgcG9zLmxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJICAgIHBvcy5jb2wgPSAoY29sbnJfVClTVFJMRU4obWxfZ2V0X2N1cmxpbmUoKSk7CisJfQorCXJldHVybiAmcG9zOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEdldCB0aGUgbGVuZ3RoIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUuCisgKiBBZHZhbmNlICJhcmciIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIG5hbWUuCisgKiBSZXR1cm4gMCBmb3IgZXJyb3IuCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfZW52X2xlbihhcmcpCisgICAgY2hhcl91CSoqYXJnOworeworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWxlbjsKKworICAgIGZvciAocCA9ICphcmc7IHZpbV9pc0lEYygqcCk7ICsrcCkKKwk7CisgICAgaWYgKHAgPT0gKmFyZykJICAgIC8qIG5vIG5hbWUgZm91bmQgKi8KKwlyZXR1cm4gMDsKKworICAgIGxlbiA9IChpbnQpKHAgLSAqYXJnKTsKKyAgICAqYXJnID0gcDsKKyAgICByZXR1cm4gbGVuOworfQorCisvKgorICogR2V0IHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBvciBpbnRlcm5hbCB2YXJpYWJsZS4KKyAqICJhcmciIGlzIGFkdmFuY2VkIHRvIHRoZSBmaXJzdCBub24td2hpdGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBuYW1lLgorICogUmV0dXJuIDAgaWYgc29tZXRoaW5nIGlzIHdyb25nLgorICovCisgICAgc3RhdGljIGludAorZ2V0X2lkX2xlbihhcmcpCisgICAgY2hhcl91CSoqYXJnOworeworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWxlbjsKKworICAgIC8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgbmFtZS4gKi8KKyAgICBmb3IgKHAgPSAqYXJnOyBldmFsX2lzbmFtZWMoKnApOyArK3ApCisJOworICAgIGlmIChwID09ICphcmcpCSAgICAvKiBubyBuYW1lIGZvdW5kICovCisJcmV0dXJuIDA7CisKKyAgICBsZW4gPSAoaW50KShwIC0gKmFyZyk7CisgICAgKmFyZyA9IHNraXB3aGl0ZShwKTsKKworICAgIHJldHVybiBsZW47Cit9CisKKy8qCisgKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLgorICogImFyZyIgaXMgYWR2YW5jZWQgdG8gdGhlIGZpcnN0IG5vbi13aGl0ZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIG5hbWUuCisgKiBSZXR1cm4gMCBpZiBzb21ldGhpbmcgaXMgd3JvbmcuCisgKiBJZiB0aGUgbmFtZSBjb250YWlucyAnbWFnaWMnIHt9J3MsIGV4cGFuZCB0aGVtIGFuZCByZXR1cm4gdGhlCisgKiBleHBhbmRlZCBuYW1lIGluIGFuIGFsbG9jYXRlZCBzdHJpbmcgdmlhICdhbGlhcycgLSBjYWxsZXIgbXVzdCBmcmVlLgorICovCisgICAgc3RhdGljIGludAorZ2V0X2Z1bmNfbGVuKGFyZywgYWxpYXMsIGV2YWx1YXRlKQorICAgIGNoYXJfdQkqKmFyZzsKKyAgICBjaGFyX3UJKiphbGlhczsKKyAgICBpbnQJCWV2YWx1YXRlOworeworICAgIGludAkJbGVuOworI2lmZGVmIEZFQVRfTUFHSUNfQlJBQ0VTCisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqZXhwcl9zdGFydDsKKyAgICBjaGFyX3UJKmV4cHJfZW5kOworI2VuZGlmCisKKyAgICAqYWxpYXMgPSBOVUxMOyAgLyogZGVmYXVsdCB0byBubyBhbGlhcyAqLworCisgICAgaWYgKCgqYXJnKVswXSA9PSBLX1NQRUNJQUwgJiYgKCphcmcpWzFdID09IEtTX0VYVFJBCisJCQkJCQkgICYmICgqYXJnKVsyXSA9PSAoaW50KUtFX1NOUikKKyAgICB7CisJLyogaGFyZCBjb2RlZCA8U05SPiwgYWxyZWFkeSB0cmFuc2xhdGVkICovCisJKmFyZyArPSAzOworCXJldHVybiBnZXRfaWRfbGVuKGFyZykgKyAzOworICAgIH0KKyAgICBsZW4gPSBldmFsX2ZuYW1lX3NjcmlwdCgqYXJnKTsKKyAgICBpZiAobGVuID4gMCkKKyAgICB7CisJLyogbGl0ZXJhbCAiPFNJRD4iLCAiczoiIG9yICI8U05SPiIgKi8KKwkqYXJnICs9IGxlbjsKKyAgICB9CisKKyNpZmRlZiBGRUFUX01BR0lDX0JSQUNFUworICAgIC8qCisgICAgICogRmluZCB0aGUgZW5kIG9mIHRoZSBuYW1lOworICAgICAqLworICAgIHAgPSBmaW5kX25hbWVfZW5kKCphcmcsICZleHByX3N0YXJ0LCAmZXhwcl9lbmQpOworICAgIC8qIGNoZWNrIGZvciB7fSBjb25zdHJ1Y3Rpb24gKi8KKyAgICBpZiAoZXhwcl9zdGFydCAhPSBOVUxMKQorICAgIHsKKwljaGFyX3UJKnRlbXBfc3RyaW5nOworCisJaWYgKCFldmFsdWF0ZSkKKwl7CisJICAgIGxlbiArPSAoaW50KShwIC0gKmFyZyk7CisJICAgICphcmcgPSBza2lwd2hpdGUocCk7CisJICAgIHJldHVybiBsZW47CisJfQorCisJLyoKKwkgKiBJbmNsdWRlIGFueSA8U0lEPiBldGMgaW4gdGhlIGV4cGFuZGVkIHN0cmluZzoKKwkgKiBUaHVzIHRoZSAtbGVuIGhlcmUuCisJICovCisJdGVtcF9zdHJpbmcgPSBtYWtlX2V4cGFuZGVkX25hbWUoKmFyZyAtIGxlbiwgZXhwcl9zdGFydCwgZXhwcl9lbmQsIHApOworCWlmICh0ZW1wX3N0cmluZyA9PSBOVUxMKQorCSAgICByZXR1cm4gMDsKKwkqYWxpYXMgPSB0ZW1wX3N0cmluZzsKKwkqYXJnID0gc2tpcHdoaXRlKHApOworCXJldHVybiAoaW50KVNUUkxFTih0ZW1wX3N0cmluZyk7CisgICAgfQorI2VuZGlmCisKKyAgICBsZW4gKz0gZ2V0X2lkX2xlbihhcmcpOworICAgIGlmIChsZW4gPT0gMCkKKwlFTVNHMihfKGVfaW52ZXhwcjIpLCAqYXJnKTsKKworICAgIHJldHVybiBsZW47Cit9CisKKyAgICBzdGF0aWMgY2hhcl91ICoKK2ZpbmRfbmFtZV9lbmQoYXJnLCBleHByX3N0YXJ0LCBleHByX2VuZCkKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBjaGFyX3UJKipleHByX3N0YXJ0OworICAgIGNoYXJfdQkqKmV4cHJfZW5kOworeworICAgIGludAkJbmVzdGluZyA9IDA7CisgICAgY2hhcl91CSpwOworCisgICAgKmV4cHJfc3RhcnQgPSBOVUxMOworICAgICpleHByX2VuZCA9IE5VTEw7CisKKyAgICBmb3IgKHAgPSBhcmc7ICgqcCAhPSBOVUwgJiYgKGV2YWxfaXNuYW1lYygqcCkgfHwgbmVzdGluZyAhPSAwKSk7ICsrcCkKKyAgICB7CisjaWZkZWYgRkVBVF9NQUdJQ19CUkFDRVMKKwlpZiAoKnAgPT0gJ3snKQorCXsKKwkgICAgbmVzdGluZysrOworCSAgICBpZiAoKmV4cHJfc3RhcnQgPT0gTlVMTCkKKwkJKmV4cHJfc3RhcnQgPSBwOworCX0KKwllbHNlIGlmICgqcCA9PSAnfScpCisJeworCSAgICBuZXN0aW5nLS07CisJICAgIGlmIChuZXN0aW5nID09IDAgJiYgKmV4cHJfZW5kID09IE5VTEwpCisJCSpleHByX2VuZCA9IHA7CisJfQorI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHA7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBjaGFyYWN0ZXIgImMiIGNhbiBiZSB1c2VkIGluIGEgdmFyaWFibGUgb3IgZnVuY3Rpb24gbmFtZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2V2YWxfaXNuYW1lYyhjKQorICAgIGludAkgICAgYzsKK3sKKyAgICByZXR1cm4gKEFTQ0lJX0lTQUxOVU0oYykgfHwgYyA9PSAnXycgfHwgYyA9PSAnOicKKyNpZmRlZiBGRUFUX01BR0lDX0JSQUNFUworCSAgICB8fCBjID09ICd7JyB8fCBjID09ICd9JworI2VuZGlmCisJICAgICk7Cit9CisKKy8qCisgKiBGaW5kIGEgdjogdmFyaWFibGUuCisgKiBSZXR1cm4gaXQncyBpbmRleCwgb3IgLTEgaWYgbm90IGZvdW5kLgorICovCisgICAgc3RhdGljIGludAorZmluZF92aW1fdmFyKG5hbWUsIGxlbikKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQlsZW47CQkvKiBsZW5ndGggb2YgIm5hbWUiICovCit7CisgICAgY2hhcl91CSp2bmFtZTsKKyAgICBpbnQJCXZsZW47CisgICAgaW50CQlpOworCisgICAgLyoKKyAgICAgKiBJZ25vcmUgInY6IiBmb3Igb2xkIGJ1aWx0LWluIHZhcmlhYmxlcywgcmVxdWlyZSBpdCBmb3IgbmV3IG9uZXMuCisgICAgICovCisgICAgaWYgKG5hbWVbMF0gPT0gJ3YnICYmIG5hbWVbMV0gPT0gJzonKQorICAgIHsKKwl2bmFtZSA9IG5hbWUgKyAyOworCXZsZW4gPSBsZW4gLSAyOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXZuYW1lID0gbmFtZTsKKwl2bGVuID0gbGVuOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgVlZfTEVOOyArK2kpCisJaWYgKHZsZW4gPT0gdmltdmFyc1tpXS5sZW4gJiYgU1RSQ01QKHZuYW1lLCB2aW12YXJzW2ldLm5hbWUpID09IDAKKwkJCSAmJiAoKHZpbXZhcnNbaV0uZmxhZ3MgJiBWVl9DT01QQVQpIHx8IHZuYW1lICE9IG5hbWUpKQorCSAgICByZXR1cm4gaTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qCisgKiBTZXQgbnVtYmVyIHY6IHZhcmlhYmxlIHRvICJ2YWwiLgorICovCisgICAgdm9pZAorc2V0X3ZpbV92YXJfbnIoaWR4LCB2YWwpCisgICAgaW50CQlpZHg7CisgICAgbG9uZwl2YWw7Cit7CisgICAgdmltdmFyc1tpZHhdLnZhbCA9IChjaGFyX3UgKil2YWw7Cit9CisKKy8qCisgKiBHZXQgbnVtYmVyIHY6IHZhcmlhYmxlIHZhbHVlOworICovCisgICAgbG9uZworZ2V0X3ZpbV92YXJfbnIoaWR4KQorICAgIGludAkJaWR4OworeworICAgIHJldHVybiAobG9uZyl2aW12YXJzW2lkeF0udmFsOworfQorCisvKgorICogU2V0IHY6Y291bnQsIHY6Y291bnQxIGFuZCB2OnByZXZjb3VudC4KKyAqLworICAgIHZvaWQKK3NldF92Y291bnQoY291bnQsIGNvdW50MSkKKyAgICBsb25nCWNvdW50OworICAgIGxvbmcJY291bnQxOworeworICAgIHZpbXZhcnNbVlZfUFJFVkNPVU5UXS52YWwgPSB2aW12YXJzW1ZWX0NPVU5UXS52YWw7CisgICAgdmltdmFyc1tWVl9DT1VOVF0udmFsID0gKGNoYXJfdSAqKWNvdW50OworICAgIHZpbXZhcnNbVlZfQ09VTlQxXS52YWwgPSAoY2hhcl91ICopY291bnQxOworfQorCisvKgorICogU2V0IHN0cmluZyB2OiB2YXJpYWJsZSB0byBhIGNvcHkgb2YgInZhbCIuCisgKi8KKyAgICB2b2lkCitzZXRfdmltX3Zhcl9zdHJpbmcoaWR4LCB2YWwsIGxlbikKKyAgICBpbnQJCWlkeDsKKyAgICBjaGFyX3UJKnZhbDsKKyAgICBpbnQJCWxlbjsJICAgIC8qIGxlbmd0aCBvZiAidmFsIiB0byB1c2Ugb3IgLTEgKHdob2xlIHN0cmluZykgKi8KK3sKKyAgICB2aW1fZnJlZSh2aW12YXJzW2lkeF0udmFsKTsKKyAgICBpZiAodmFsID09IE5VTEwpCisJdmltdmFyc1tpZHhdLnZhbCA9IE5VTEw7CisgICAgZWxzZSBpZiAobGVuID09IC0xKQorCXZpbXZhcnNbaWR4XS52YWwgPSB2aW1fc3Ryc2F2ZSh2YWwpOworICAgIGVsc2UKKwl2aW12YXJzW2lkeF0udmFsID0gdmltX3N0cm5zYXZlKHZhbCwgbGVuKTsKK30KKworLyoKKyAqIFNldCB2OnJlZ2lzdGVyIGlmIG5lZWRlZC4KKyAqLworICAgIHZvaWQKK3NldF9yZWdfdmFyKGMpCisgICAgaW50CQljOworeworICAgIGNoYXJfdQlyZWduYW1lOworCisgICAgaWYgKGMgPT0gMCB8fCBjID09ICcgJykKKwlyZWduYW1lID0gJyInOworICAgIGVsc2UKKwlyZWduYW1lID0gYzsKKyAgICAvKiBBdm9pZCBmcmVlL2FsbG9jIHdoZW4gdGhlIHZhbHVlIGlzIGFscmVhZHkgcmlnaHQuICovCisgICAgaWYgKHZpbXZhcnNbVlZfUkVHXS52YWwgPT0gTlVMTCB8fCB2aW12YXJzW1ZWX1JFR10udmFsWzBdICE9IGMpCisJc2V0X3ZpbV92YXJfc3RyaW5nKFZWX1JFRywgJnJlZ25hbWUsIDEpOworfQorCisvKgorICogR2V0IG9yIHNldCB2OmV4Y2VwdGlvbi4gIElmICJvbGR2YWwiID09IE5VTEwsIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZS4KKyAqIE90aGVyd2lzZSwgcmVzdG9yZSB0aGUgdmFsdWUgdG8gIm9sZHZhbCIgYW5kIHJldHVybiBOVUxMLgorICogTXVzdCBhbHdheXMgYmUgY2FsbGVkIGluIHBhaXJzIHRvIHNhdmUgYW5kIHJlc3RvcmUgdjpleGNlcHRpb24hICBEb2VzIG5vdAorICogdGFrZSBjYXJlIG9mIG1lbW9yeSBhbGxvY2F0aW9ucy4KKyAqLworICAgIGNoYXJfdSAqCit2X2V4Y2VwdGlvbihvbGR2YWwpCisgICAgY2hhcl91CSpvbGR2YWw7Cit7CisgICAgaWYgKG9sZHZhbCA9PSBOVUxMKQorCXJldHVybiB2aW12YXJzW1ZWX0VYQ0VQVElPTl0udmFsOworCisgICAgdmltdmFyc1tWVl9FWENFUFRJT05dLnZhbCA9IG9sZHZhbDsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEdldCBvciBzZXQgdjp0aHJvd3BvaW50LiAgSWYgIm9sZHZhbCIgPT0gTlVMTCwgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlLgorICogT3RoZXJ3aXNlLCByZXN0b3JlIHRoZSB2YWx1ZSB0byAib2xkdmFsIiBhbmQgcmV0dXJuIE5VTEwuCisgKiBNdXN0IGFsd2F5cyBiZSBjYWxsZWQgaW4gcGFpcnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB2OnRocm93cG9pbnQhICBEb2VzIG5vdAorICogdGFrZSBjYXJlIG9mIG1lbW9yeSBhbGxvY2F0aW9ucy4KKyAqLworICAgIGNoYXJfdSAqCit2X3Rocm93cG9pbnQob2xkdmFsKQorICAgIGNoYXJfdQkqb2xkdmFsOworeworICAgIGlmIChvbGR2YWwgPT0gTlVMTCkKKwlyZXR1cm4gdmltdmFyc1tWVl9USFJPV1BPSU5UXS52YWw7CisKKyAgICB2aW12YXJzW1ZWX1RIUk9XUE9JTlRdLnZhbCA9IG9sZHZhbDsKKyAgICByZXR1cm4gTlVMTDsKK30KKworI2lmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFNldCB2OmNtZGFyZy4KKyAqIElmICJlYXAiICE9IE5VTEwsIHVzZSAiZWFwIiB0byBnZW5lcmF0ZSB0aGUgdmFsdWUgYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLgorICogSWYgIm9sZGFyZyIgIT0gTlVMTCwgcmVzdG9yZSB0aGUgdmFsdWUgdG8gIm9sZGFyZyIgYW5kIHJldHVybiBOVUxMLgorICogTXVzdCBhbHdheXMgYmUgY2FsbGVkIGluIHBhaXJzIQorICovCisgICAgY2hhcl91ICoKK3NldF9jbWRhcmcoZWFwLCBvbGRhcmcpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGNoYXJfdQkqb2xkYXJnOworeworICAgIGNoYXJfdQkqb2xkdmFsOworICAgIGNoYXJfdQkqbmV3dmFsOworICAgIHVuc2lnbmVkCWxlbjsKKworICAgIG9sZHZhbCA9IHZpbXZhcnNbVlZfQ01EQVJHXS52YWw7CisgICAgaWYgKGVhcCAhPSBOVUxMKQorICAgIHsKKwlpZiAoZWFwLT5mb3JjZV9iaW4gPT0gRk9SQ0VfQklOKQorCSAgICBsZW4gPSA2OworCWVsc2UgaWYgKGVhcC0+Zm9yY2VfYmluID09IEZPUkNFX05PQklOKQorCSAgICBsZW4gPSA4OworCWVsc2UKKwkgICAgbGVuID0gMDsKKwlpZiAoZWFwLT5mb3JjZV9mZiAhPSAwKQorCSAgICBsZW4gKz0gKHVuc2lnbmVkKVNUUkxFTihlYXAtPmNtZCArIGVhcC0+Zm9yY2VfZmYpICsgNjsKKyMgaWZkZWYgRkVBVF9NQllURQorCWlmIChlYXAtPmZvcmNlX2VuYyAhPSAwKQorCSAgICBsZW4gKz0gKHVuc2lnbmVkKVNUUkxFTihlYXAtPmNtZCArIGVhcC0+Zm9yY2VfZW5jKSArIDc7CisjIGVuZGlmCisKKwluZXd2YWwgPSBhbGxvYyhsZW4gKyAxKTsKKwlpZiAobmV3dmFsID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCisJaWYgKGVhcC0+Zm9yY2VfYmluID09IEZPUkNFX0JJTikKKwkgICAgc3ByaW50ZigoY2hhciAqKW5ld3ZhbCwgIiArK2JpbiIpOworCWVsc2UgaWYgKGVhcC0+Zm9yY2VfYmluID09IEZPUkNFX05PQklOKQorCSAgICBzcHJpbnRmKChjaGFyICopbmV3dmFsLCAiICsrbm9iaW4iKTsKKwllbHNlCisJICAgICpuZXd2YWwgPSBOVUw7CisJaWYgKGVhcC0+Zm9yY2VfZmYgIT0gMCkKKwkgICAgc3ByaW50ZigoY2hhciAqKW5ld3ZhbCArIFNUUkxFTihuZXd2YWwpLCAiICsrZmY9JXMiLAorCQkJCQkJICAgIGVhcC0+Y21kICsgZWFwLT5mb3JjZV9mZik7CisjIGlmZGVmIEZFQVRfTUJZVEUKKwlpZiAoZWFwLT5mb3JjZV9lbmMgIT0gMCkKKwkgICAgc3ByaW50ZigoY2hhciAqKW5ld3ZhbCArIFNUUkxFTihuZXd2YWwpLCAiICsrZW5jPSVzIiwKKwkJCQkJCSAgIGVhcC0+Y21kICsgZWFwLT5mb3JjZV9lbmMpOworIyBlbmRpZgorCXZpbXZhcnNbVlZfQ01EQVJHXS52YWwgPSBuZXd2YWw7CisJcmV0dXJuIG9sZHZhbDsKKyAgICB9CisKKyAgICB2aW1fZnJlZShvbGR2YWwpOworICAgIHZpbXZhcnNbVlZfQ01EQVJHXS52YWwgPSBvbGRhcmc7CisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworLyoKKyAqIEdldCB0aGUgdmFsdWUgb2YgaW50ZXJuYWwgdmFyaWFibGUgIm5hbWUiLgorICogUmV0dXJuIE9LIG9yIEZBSUwuCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfdmFyX3ZhcihuYW1lLCBsZW4sIHJldHZhcikKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQlsZW47CQkvKiBsZW5ndGggb2YgIm5hbWUiICovCisgICAgVkFSCQlyZXR2YXI7CQkvKiBOVUxMIHdoZW4gb25seSBjaGVja2luZyBleGlzdGVuY2UgKi8KK3sKKyAgICBpbnQJCXJldCA9IE9LOworICAgIGludAkJdHlwZSA9IFZBUl9VTktOT1dOOworICAgIGxvbmcJbnVtYmVyID0gMTsKKyAgICBjaGFyX3UJKnN0cmluZyA9IE5VTEw7CisgICAgVkFSCQl2OworICAgIGludAkJY2M7CisgICAgaW50CQlpOworCisgICAgLyogdHJ1bmNhdGUgdGhlIG5hbWUsIHNvIHRoYXQgd2UgY2FuIHVzZSBzdHJjbXAoKSAqLworICAgIGNjID0gbmFtZVtsZW5dOworICAgIG5hbWVbbGVuXSA9IE5VTDsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yICJiOmNoYW5nZWR0aWNrIi4KKyAgICAgKi8KKyAgICBpZiAoU1RSQ01QKG5hbWUsICJiOmNoYW5nZWR0aWNrIikgPT0gMCkKKyAgICB7CisJdHlwZSA9IFZBUl9OVU1CRVI7CisJbnVtYmVyID0gY3VyYnVmLT5iX2NoYW5nZWR0aWNrOworICAgIH0KKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIGJ1aWx0LWluIHY6IHZhcmlhYmxlcy4KKyAgICAgKi8KKyAgICBlbHNlIGlmICgoaSA9IGZpbmRfdmltX3ZhcihuYW1lLCBsZW4pKSA+PSAwKQorICAgIHsKKwl0eXBlID0gdmltdmFyc1tpXS50eXBlOworCW51bWJlciA9IChsb25nKXZpbXZhcnNbaV0udmFsOworCXN0cmluZyA9IHZpbXZhcnNbaV0udmFsOworICAgIH0KKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIHVzZXItZGVmaW5lZCB2YXJpYWJsZXMuCisgICAgICovCisgICAgZWxzZQorICAgIHsKKwl2ID0gZmluZF92YXIobmFtZSwgRkFMU0UpOworCWlmICh2ICE9IE5VTEwpCisJeworCSAgICB0eXBlID0gdi0+dmFyX3R5cGU7CisJICAgIG51bWJlciA9IHYtPnZhcl92YWwudmFyX251bWJlcjsKKwkgICAgc3RyaW5nID0gdi0+dmFyX3ZhbC52YXJfc3RyaW5nOworCX0KKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBWQVJfVU5LTk9XTikKKyAgICB7CisJaWYgKHJldHZhciAhPSBOVUxMKQorCSAgICBFTVNHMihfKCJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIiksIG5hbWUpOworCXJldCA9IEZBSUw7CisgICAgfQorICAgIGVsc2UgaWYgKHJldHZhciAhPSBOVUxMKQorICAgIHsKKwlyZXR2YXItPnZhcl90eXBlID0gdHlwZTsKKwlpZiAodHlwZSA9PSBWQVJfTlVNQkVSKQorCSAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IG51bWJlcjsKKwllbHNlIGlmICh0eXBlID09IFZBUl9TVFJJTkcpCisJeworCSAgICBpZiAoc3RyaW5nICE9IE5VTEwpCisJCXN0cmluZyA9IHZpbV9zdHJzYXZlKHN0cmluZyk7CisJICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gc3RyaW5nOworCX0KKyAgICB9CisKKyAgICBuYW1lW2xlbl0gPSBjYzsKKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGEgdmFyaWFibGUsIGFuZCBtYWtlIGl0IGVtdHB5ICgwIG9yIE5VTEwgdmFsdWUpLgorICovCisgICAgc3RhdGljIFZBUgorYWxsb2NfdmFyKCkKK3sKKyAgICByZXR1cm4gKFZBUilhbGxvY19jbGVhcigodW5zaWduZWQpc2l6ZW9mKHZhcikpOworfQorCisvKgorICogQWxsb2NhdGUgbWVtb3J5IGZvciBhIHZhcmlhYmxlLCBhbmQgYXNzaWduIGEgc3RyaW5nIHRvIGl0LgorICogVGhlIHN0cmluZyAicyIgbXVzdCBoYXZlIGJlZW4gYWxsb2NhdGVkLCBpdCBpcyBjb25zdW1lZC4KKyAqIFJldHVybiBOVUxMIGZvciBvdXQgb2YgbWVtb3J5LCB0aGUgdmFyaWFibGUgb3RoZXJ3aXNlLgorICovCisgICAgc3RhdGljIFZBUgorYWxsb2Nfc3RyaW5nX3ZhcihzKQorICAgIGNoYXJfdQkqczsKK3sKKyAgICBWQVIJICAgIHJldHZhcjsKKworICAgIHJldHZhciA9IGFsbG9jX3ZhcigpOworICAgIGlmIChyZXR2YXIgIT0gTlVMTCkKKyAgICB7CisJcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisJcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBzOworICAgIH0KKyAgICBlbHNlCisJdmltX2ZyZWUocyk7CisgICAgcmV0dXJuIHJldHZhcjsKK30KKworLyoKKyAqIEZyZWUgdGhlIG1lbW9yeSBmb3IgYSB2YXJpYWJsZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmcmVlX3Zhcih2YXJwKQorICAgIFZBUgkgICAgdmFycDsKK3sKKyAgICBpZiAodmFycCAhPSBOVUxMKQorICAgIHsKKwlpZiAodmFycC0+dmFyX3R5cGUgPT0gVkFSX1NUUklORykKKwkgICAgdmltX2ZyZWUodmFycC0+dmFyX3ZhbC52YXJfc3RyaW5nKTsKKwl2aW1fZnJlZSh2YXJwLT52YXJfbmFtZSk7CisJdmltX2ZyZWUodmFycCk7CisgICAgfQorfQorCisvKgorICogRnJlZSB0aGUgbWVtb3J5IGZvciBhIHZhcmlhYmxlIHZhbHVlIGFuZCBzZXQgdGhlIHZhbHVlIHRvIE5VTEwgb3IgMC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjbGVhcl92YXIodmFycCkKKyAgICBWQVIJICAgIHZhcnA7Cit7CisgICAgaWYgKHZhcnAgIT0gTlVMTCkKKyAgICB7CisJaWYgKHZhcnAtPnZhcl90eXBlID09IFZBUl9TVFJJTkcpCisJeworCSAgICB2aW1fZnJlZSh2YXJwLT52YXJfdmFsLnZhcl9zdHJpbmcpOworCSAgICB2YXJwLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBOVUxMOworCX0KKwllbHNlCisJICAgIHZhcnAtPnZhcl92YWwudmFyX251bWJlciA9IDA7CisgICAgfQorfQorCisvKgorICogR2V0IHRoZSBudW1iZXIgdmFsdWUgb2YgYSB2YXJpYWJsZS4KKyAqIElmIGl0IGlzIGEgU3RyaW5nIHZhcmlhYmxlLCB1c2VzIHZpbV9zdHIybnIoKS4KKyAqLworICAgIHN0YXRpYyBsb25nCitnZXRfdmFyX251bWJlcih2YXJwKQorICAgIFZBUgkJdmFycDsKK3sKKyAgICBsb25nCW47CisKKyAgICBpZiAodmFycC0+dmFyX3R5cGUgPT0gVkFSX05VTUJFUikKKwlyZXR1cm4gKGxvbmcpKHZhcnAtPnZhcl92YWwudmFyX251bWJlcik7CisgICAgZWxzZSBpZiAodmFycC0+dmFyX3R5cGUgPT0gVkFSX1VOS05PV04gfHwgdmFycC0+dmFyX3ZhbC52YXJfc3RyaW5nID09IE5VTEwpCisJcmV0dXJuIDBMOworICAgIGVsc2UKKyAgICB7CisJdmltX3N0cjJucih2YXJwLT52YXJfdmFsLnZhcl9zdHJpbmcsIE5VTEwsIE5VTEwsIFRSVUUsIFRSVUUsICZuLCBOVUxMKTsKKwlyZXR1cm4gbjsKKyAgICB9Cit9CisKKy8qCisgKiBHZXQgdGhlIGxudW0gZnJvbSB0aGUgZmlyc3QgYXJndW1lbnQuICBBbHNvIGFjY2VwdHMgIi4iLCAiJCIsIGV0Yy4KKyAqLworICAgIHN0YXRpYyBsaW5lbnJfVAorZ2V0X3Zhcl9sbnVtKGFyZ3ZhcnMpCisgICAgVkFSCQlhcmd2YXJzOworeworICAgIHZhcgkJcmV0dmFyOworICAgIGxpbmVucl9UCWxudW07CisKKyAgICBsbnVtID0gZ2V0X3Zhcl9udW1iZXIoJmFyZ3ZhcnNbMF0pOworICAgIGlmIChsbnVtID09IDApICAvKiBubyB2YWxpZCBudW1iZXIsIHRyeSB1c2luZyBsaW5lKCkgKi8KKyAgICB7CisJcmV0dmFyLnZhcl90eXBlID0gVkFSX05VTUJFUjsKKwlmX2xpbmUoYXJndmFycywgJnJldHZhcik7CisJbG51bSA9IHJldHZhci52YXJfdmFsLnZhcl9udW1iZXI7CisJY2xlYXJfdmFyKCZyZXR2YXIpOworICAgIH0KKyAgICByZXR1cm4gbG51bTsKK30KKworLyoKKyAqIEdldCB0aGUgc3RyaW5nIHZhbHVlIG9mIGEgdmFyaWFibGUuCisgKiBJZiBpdCBpcyBhIE51bWJlciB2YXJpYWJsZSwgdGhlIG51bWJlciBpcyBjb252ZXJ0ZWQgaW50byBhIHN0cmluZy4KKyAqIGdldF92YXJfc3RyaW5nKCkgdXNlcyBhIHNpbmdsZSwgc3RhdGljIGJ1ZmZlci4gIFlPVSBDQU4gT05MWSBVU0UgSVQgT05DRSEKKyAqIGdldF92YXJfc3RyaW5nX2J1ZigpIHVzZXMgYSBnaXZlbiBidWZmZXIuCisgKiBJZiB0aGUgU3RyaW5nIHZhcmlhYmxlIGhhcyBuZXZlciBiZWVuIHNldCwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4KKyAqIE5ldmVyIHJldHVybnMgTlVMTDsKKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorZ2V0X3Zhcl9zdHJpbmcodmFycCkKKyAgICBWQVIJICAgIHZhcnA7Cit7CisgICAgc3RhdGljIGNoYXJfdSAgIG15YnVmW05VTUJVRkxFTl07CisKKyAgICByZXR1cm4gZ2V0X3Zhcl9zdHJpbmdfYnVmKHZhcnAsIG15YnVmKTsKK30KKworICAgIHN0YXRpYyBjaGFyX3UgKgorZ2V0X3Zhcl9zdHJpbmdfYnVmKHZhcnAsIGJ1ZikKKyAgICBWQVIJICAgIHZhcnA7CisgICAgY2hhcl91ICAqYnVmOworeworICAgIGlmICh2YXJwLT52YXJfdHlwZSA9PSBWQVJfTlVNQkVSKQorICAgIHsKKwlzcHJpbnRmKChjaGFyICopYnVmLCAiJWxkIiwgKGxvbmcpdmFycC0+dmFyX3ZhbC52YXJfbnVtYmVyKTsKKwlyZXR1cm4gYnVmOworICAgIH0KKyAgICBlbHNlIGlmICh2YXJwLT52YXJfdmFsLnZhcl9zdHJpbmcgPT0gTlVMTCkKKwlyZXR1cm4gKGNoYXJfdSAqKSIiOworICAgIGVsc2UKKwlyZXR1cm4gdmFycC0+dmFyX3ZhbC52YXJfc3RyaW5nOworfQorCisvKgorICogRmluZCB2YXJpYWJsZSAibmFtZSIgaW4gdGhlIGxpc3Qgb2YgdmFyaWFibGVzLgorICogUmV0dXJuIGEgcG9pbnRlciB0byBpdCBpZiBmb3VuZCwgTlVMTCBpZiBub3QgZm91bmQuCisgKi8KKyAgICBzdGF0aWMgVkFSCitmaW5kX3ZhcihuYW1lLCB3cml0aW5nKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBpbnQJCXdyaXRpbmc7Cit7CisgICAgaW50CQlpOworICAgIGNoYXJfdQkqdmFybmFtZTsKKyAgICBnYXJyYXlfVAkqZ2FwOworCisgICAgLyogQ2hlY2sgZm9yIGZ1bmN0aW9uIGFyZ3VtZW50cyAiYToiICovCisgICAgaWYgKG5hbWVbMF0gPT0gJ2EnICYmIG5hbWVbMV0gPT0gJzonKQorICAgIHsKKwlpZiAod3JpdGluZykKKwl7CisJICAgIEVNU0cyKF8oZV9yZWFkb25seXZhciksIG5hbWUpOworCSAgICByZXR1cm4gTlVMTDsKKwl9CisJbmFtZSArPSAyOworCWlmIChjdXJyZW50X2Z1bmNjYWwgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisJaWYgKFZJTV9JU0RJR0lUKCpuYW1lKSkKKwl7CisJICAgIGkgPSBhdG9sKChjaGFyICopbmFtZSk7CisJICAgIGlmIChpID09IDApCQkJCQkvKiBhOjAgKi8KKwkJcmV0dXJuICZjdXJyZW50X2Z1bmNjYWwtPmEwX3ZhcjsKKwkgICAgaSArPSBjdXJyZW50X2Z1bmNjYWwtPmZ1bmMtPmFyZ3MuZ2FfbGVuOworCSAgICBpZiAoaSA+IGN1cnJlbnRfZnVuY2NhbC0+YXJnY291bnQpCQkvKiBhOjk5OSAqLworCQlyZXR1cm4gTlVMTDsKKwkgICAgcmV0dXJuICYoY3VycmVudF9mdW5jY2FsLT5hcmd2YXJzW2kgLSAxXSk7CS8qIGE6MSwgYToyLCBldGMuICovCisJfQorCWlmIChTVFJDTVAobmFtZSwgImZpcnN0bGluZSIpID09IDApCisJICAgIHJldHVybiAmKGN1cnJlbnRfZnVuY2NhbC0+Zmlyc3RsaW5lKTsKKwlpZiAoU1RSQ01QKG5hbWUsICJsYXN0bGluZSIpID09IDApCisJICAgIHJldHVybiAmKGN1cnJlbnRfZnVuY2NhbC0+bGFzdGxpbmUpOworCWZvciAoaSA9IDA7IGkgPCBjdXJyZW50X2Z1bmNjYWwtPmZ1bmMtPmFyZ3MuZ2FfbGVuOyArK2kpCisJICAgIGlmIChTVFJDTVAobmFtZSwgKChjaGFyX3UgKiopCisJCQkgICAgICAoY3VycmVudF9mdW5jY2FsLT5mdW5jLT5hcmdzLmdhX2RhdGEpKVtpXSkgPT0gMCkKKwkgICAgcmV0dXJuICYoY3VycmVudF9mdW5jY2FsLT5hcmd2YXJzW2ldKTsJLyogYTpuYW1lICovCisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZ2FwID0gZmluZF92YXJfZ2EobmFtZSwgJnZhcm5hbWUpOworICAgIGlmIChnYXAgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gZmluZF92YXJfaW5fZ2EoZ2FwLCB2YXJuYW1lKTsKK30KKworICAgIHN0YXRpYyBWQVIKK2ZpbmRfdmFyX2luX2dhKGdhcCwgdmFybmFtZSkKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGNoYXJfdQkqdmFybmFtZTsKK3sKKyAgICBpbnQJaTsKKworICAgIGZvciAoaSA9IGdhcC0+Z2FfbGVuOyAtLWkgPj0gMDsgKQorCWlmIChWQVJfR0FQX0VOVFJZKGksIGdhcCkudmFyX25hbWUgIT0gTlVMTAorCQkmJiBTVFJDTVAoVkFSX0dBUF9FTlRSWShpLCBnYXApLnZhcl9uYW1lLCB2YXJuYW1lKSA9PSAwKQorCSAgICBicmVhazsKKyAgICBpZiAoaSA8IDApCisJcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuICZWQVJfR0FQX0VOVFJZKGksIGdhcCk7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBncm93YXJyYXkgYW5kIHN0YXJ0IG9mIG5hbWUgd2l0aG91dCAnOicgZm9yIGEgdmFyaWFibGUgbmFtZS4KKyAqLworICAgIHN0YXRpYyBnYXJyYXlfVCAqCitmaW5kX3Zhcl9nYShuYW1lLCB2YXJuYW1lKQorICAgIGNoYXJfdSAgKm5hbWU7CisgICAgY2hhcl91ICAqKnZhcm5hbWU7Cit7CisgICAgaWYgKG5hbWVbMV0gIT0gJzonKQorICAgIHsKKwkvKiBJZiBub3QgIng6bmFtZSIgdGhlcmUgbXVzdCBub3QgYmUgYW55ICI6IiBpbiB0aGUgbmFtZS4gKi8KKwlpZiAodmltX3N0cmNocihuYW1lLCAnOicpICE9IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCSp2YXJuYW1lID0gbmFtZTsKKwlpZiAoY3VycmVudF9mdW5jY2FsID09IE5VTEwpCisJICAgIHJldHVybiAmdmFyaWFibGVzOwkJCS8qIGdsb2JhbCB2YXJpYWJsZSAqLworCXJldHVybiAmY3VycmVudF9mdW5jY2FsLT5sX3ZhcnM7CS8qIGxvY2FsIGZ1bmN0aW9uIHZhcmlhYmxlICovCisgICAgfQorICAgICp2YXJuYW1lID0gbmFtZSArIDI7CisgICAgaWYgKCpuYW1lID09ICdiJykJCQkJLyogYnVmZmVyIHZhcmlhYmxlICovCisJcmV0dXJuICZjdXJidWYtPmJfdmFyczsKKyAgICBpZiAoKm5hbWUgPT0gJ3cnKQkJCQkvKiB3aW5kb3cgdmFyaWFibGUgKi8KKwlyZXR1cm4gJmN1cndpbi0+d192YXJzOworICAgIGlmICgqbmFtZSA9PSAnZycpCQkJCS8qIGdsb2JhbCB2YXJpYWJsZSAqLworCXJldHVybiAmdmFyaWFibGVzOworICAgIGlmICgqbmFtZSA9PSAnbCcgJiYgY3VycmVudF9mdW5jY2FsICE9IE5VTEwpLyogbG9jYWwgZnVuY3Rpb24gdmFyaWFibGUgKi8KKwlyZXR1cm4gJmN1cnJlbnRfZnVuY2NhbC0+bF92YXJzOworICAgIGlmICgqbmFtZSA9PSAncycJCQkJLyogc2NyaXB0IHZhcmlhYmxlICovCisJICAgICYmIGN1cnJlbnRfU0lEID4gMCAmJiBjdXJyZW50X1NJRCA8PSBnYV9zY3JpcHRzLmdhX2xlbikKKwlyZXR1cm4gJlNDUklQVF9WQVJTKGN1cnJlbnRfU0lEKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEdldCB0aGUgc3RyaW5nIHZhbHVlIG9mIGEgKGdsb2JhbC9sb2NhbCkgdmFyaWFibGUuCisgKiBSZXR1cm5zIE5VTEwgd2hlbiBpdCBkb2Vzbid0IGV4aXN0LgorICovCisgICAgY2hhcl91ICoKK2dldF92YXJfdmFsdWUobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgVkFSCQl2OworCisgICAgdiA9IGZpbmRfdmFyKG5hbWUsIEZBTFNFKTsKKyAgICBpZiAodiA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgIHJldHVybiBnZXRfdmFyX3N0cmluZyh2KTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGdyb3dhcnJ5IGZvciBhIHNvdXJjZWQgc2NyaXB0LiAgSXQgd2lsbCBiZSB1c2VkIHdoaWxlCisgKiBzb3VyY2luZyB0aGlzIHNjcmlwdCBhbmQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIHNjcmlwdC4KKyAqLworICAgIHZvaWQKK25ld19zY3JpcHRfdmFycyhpZCkKKyAgICBzY2lkX1QgaWQ7Cit7CisgICAgaWYgKGdhX2dyb3coJmdhX3NjcmlwdHMsIChpbnQpKGlkIC0gZ2Ffc2NyaXB0cy5nYV9sZW4pKSA9PSBPSykKKyAgICB7CisJd2hpbGUgKGdhX3NjcmlwdHMuZ2FfbGVuIDwgaWQpCisJeworCSAgICB2YXJfaW5pdCgmU0NSSVBUX1ZBUlMoZ2Ffc2NyaXB0cy5nYV9sZW4gKyAxKSk7CisJICAgICsrZ2Ffc2NyaXB0cy5nYV9sZW47CisJICAgIC0tZ2Ffc2NyaXB0cy5nYV9yb29tOworCX0KKyAgICB9Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGludGVybmFsIHZhcmlhYmxlcyBmb3IgdXNlLgorICovCisgICAgdm9pZAordmFyX2luaXQoZ2FwKQorICAgIGdhcnJheV9UICpnYXA7Cit7CisgICAgZ2FfaW5pdDIoZ2FwLCAoaW50KXNpemVvZih2YXIpLCA0KTsKK30KKworLyoKKyAqIENsZWFuIHVwIGEgbGlzdCBvZiBpbnRlcm5hbCB2YXJpYWJsZXMuCisgKi8KKyAgICB2b2lkCit2YXJfY2xlYXIoZ2FwKQorICAgIGdhcnJheV9UICpnYXA7Cit7CisgICAgaW50CSAgICBpOworCisgICAgZm9yIChpID0gZ2FwLT5nYV9sZW47IC0taSA+PSAwOyApCisJdmFyX2ZyZWVfb25lKCZWQVJfR0FQX0VOVFJZKGksIGdhcCkpOworICAgIGdhX2NsZWFyKGdhcCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAordmFyX2ZyZWVfb25lKHYpCisgICAgVkFSCSAgICB2OworeworICAgIHZpbV9mcmVlKHYtPnZhcl9uYW1lKTsKKyAgICB2LT52YXJfbmFtZSA9IE5VTEw7CisgICAgaWYgKHYtPnZhcl90eXBlID09IFZBUl9TVFJJTkcpCisJdmltX2ZyZWUodi0+dmFyX3ZhbC52YXJfc3RyaW5nKTsKKyAgICB2LT52YXJfdmFsLnZhcl9zdHJpbmcgPSBOVUxMOworfQorCisvKgorICogTGlzdCB0aGUgdmFsdWUgb2Ygb25lIGludGVybmFsIHZhcmlhYmxlLgorICovCisgICAgc3RhdGljIHZvaWQKK2xpc3Rfb25lX3Zhcih2LCBwcmVmaXgpCisgICAgVkFSCQl2OworICAgIGNoYXJfdQkqcHJlZml4OworeworICAgIGxpc3Rfb25lX3Zhcl9hKHByZWZpeCwgdi0+dmFyX25hbWUsIHYtPnZhcl90eXBlLCBnZXRfdmFyX3N0cmluZyh2KSk7Cit9CisKKy8qCisgKiBMaXN0IHRoZSB2YWx1ZSBvZiBvbmUgInY6IiB2YXJpYWJsZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitsaXN0X3ZpbV92YXIoaSkKKyAgICBpbnQJCWk7CS8qIGluZGV4IGluIHZpbXZhcnNbXSAqLworeworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJbnVtYnVmW05VTUJVRkxFTl07CisKKyAgICBpZiAodmltdmFyc1tpXS50eXBlID09IFZBUl9OVU1CRVIpCisgICAgeworCXAgPSBudW1idWY7CisJc3ByaW50ZigoY2hhciAqKXAsICIlbGQiLCAobG9uZyl2aW12YXJzW2ldLnZhbCk7CisgICAgfQorICAgIGVsc2UgaWYgKHZpbXZhcnNbaV0udmFsID09IE5VTEwpCisJcCA9IChjaGFyX3UgKikiIjsKKyAgICBlbHNlCisJcCA9IHZpbXZhcnNbaV0udmFsOworICAgIGxpc3Rfb25lX3Zhcl9hKChjaGFyX3UgKikidjoiLCAoY2hhcl91ICopdmltdmFyc1tpXS5uYW1lLAorCQkJCQkJCSAgdmltdmFyc1tpXS50eXBlLCBwKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitsaXN0X29uZV92YXJfYShwcmVmaXgsIG5hbWUsIHR5cGUsIHN0cmluZykKKyAgICBjaGFyX3UJKnByZWZpeDsKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQl0eXBlOworICAgIGNoYXJfdQkqc3RyaW5nOworeworICAgIG1zZ19hdHRyKHByZWZpeCwgMCk7ICAgIC8qIGRvbid0IHVzZSBtc2coKSwgaXQgb3ZlcndyaXRlcyAidjpzdGF0dXNtc2ciICovCisgICAgaWYgKG5hbWUgIT0gTlVMTCkJLyogImE6IiB2YXJzIGRvbid0IGhhdmUgYSBuYW1lIHN0b3JlZCAqLworCW1zZ19wdXRzKG5hbWUpOworICAgIG1zZ19wdXRjaGFyKCcgJyk7CisgICAgbXNnX2FkdmFuY2UoMjIpOworICAgIGlmICh0eXBlID09IFZBUl9OVU1CRVIpCisJbXNnX3B1dGNoYXIoJyMnKTsKKyAgICBlbHNlCisJbXNnX3B1dGNoYXIoJyAnKTsKKyAgICBtc2dfb3V0dHJhbnMoc3RyaW5nKTsKK30KKworLyoKKyAqIFNldCB2YXJpYWJsZSAibmFtZSIgdG8gdmFsdWUgaW4gInZhcnAiLgorICogSWYgdGhlIHZhcmlhYmxlIGFscmVhZHkgZXhpc3RzLCB0aGUgdmFsdWUgaXMgdXBkYXRlZC4KKyAqIE90aGVyd2lzZSB0aGUgdmFyaWFibGUgaXMgY3JlYXRlZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfdmFyKG5hbWUsIHZhcnApCisgICAgY2hhcl91CSpuYW1lOworICAgIFZBUgkJdmFycDsKK3sKKyAgICBpbnQJCWk7CisgICAgVkFSCQl2OworICAgIGNoYXJfdQkqdmFybmFtZTsKKyAgICBnYXJyYXlfVAkqZ2FwOworCisgICAgLyoKKyAgICAgKiBIYW5kbGUgc2V0dGluZyBpbnRlcm5hbCB2OiB2YXJpYWJsZXMuCisgICAgICovCisgICAgaSA9IGZpbmRfdmltX3ZhcihuYW1lLCAoaW50KVNUUkxFTihuYW1lKSk7CisgICAgaWYgKGkgPj0gMCkKKyAgICB7CisJaWYgKHZpbXZhcnNbaV0uZmxhZ3MgJiBWVl9STykKKwkgICAgRU1TRzIoXyhlX3JlYWRvbmx5dmFyKSwgbmFtZSk7CisJZWxzZQorCXsKKwkgICAgaWYgKHZpbXZhcnNbaV0udHlwZSA9PSBWQVJfU1RSSU5HKQorCSAgICB7CisJCXZpbV9mcmVlKHZpbXZhcnNbaV0udmFsKTsKKwkJdmltdmFyc1tpXS52YWwgPSB2aW1fc3Ryc2F2ZShnZXRfdmFyX3N0cmluZyh2YXJwKSk7CisJICAgIH0KKwkgICAgZWxzZQorCQl2aW12YXJzW2ldLnZhbCA9IChjaGFyX3UgKikobG9uZyl2YXJwLT52YXJfdmFsLnZhcl9udW1iZXI7CisJfQorCXJldHVybjsKKyAgICB9CisKKyAgICB2ID0gZmluZF92YXIobmFtZSwgVFJVRSk7CisgICAgaWYgKHYgIT0gTlVMTCkJICAgIC8qIGV4aXN0aW5nIHZhcmlhYmxlLCBvbmx5IG5lZWQgdG8gZnJlZSBzdHJpbmcgKi8KKyAgICB7CisJaWYgKHYtPnZhcl90eXBlID09IFZBUl9TVFJJTkcpCisJICAgIHZpbV9mcmVlKHYtPnZhcl92YWwudmFyX3N0cmluZyk7CisgICAgfQorICAgIGVsc2UJCSAgICAvKiBhZGQgYSBuZXcgdmFyaWFibGUgKi8KKyAgICB7CisJZ2FwID0gZmluZF92YXJfZ2EobmFtZSwgJnZhcm5hbWUpOworCWlmIChnYXAgPT0gTlVMTCkgICAgLyogaWxsZWdhbCBuYW1lICovCisJeworCSAgICBFTVNHMihfKCJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIiksIG5hbWUpOworCSAgICByZXR1cm47CisJfQorCisJLyogVHJ5IHRvIHVzZSBhbiBlbXB0eSBlbnRyeSAqLworCWZvciAoaSA9IGdhcC0+Z2FfbGVuOyAtLWkgPj0gMDsgKQorCSAgICBpZiAoVkFSX0dBUF9FTlRSWShpLCBnYXApLnZhcl9uYW1lID09IE5VTEwpCisJCWJyZWFrOworCWlmIChpIDwgMCkJICAgIC8qIG5lZWQgdG8gYWxsb2NhdGUgbW9yZSByb29tICovCisJeworCSAgICBpZiAoZ2FfZ3JvdyhnYXAsIDEpID09IEZBSUwpCisJCXJldHVybjsKKwkgICAgaSA9IGdhcC0+Z2FfbGVuOworCX0KKwl2ID0gJlZBUl9HQVBfRU5UUlkoaSwgZ2FwKTsKKwlpZiAoKHYtPnZhcl9uYW1lID0gdmltX3N0cnNhdmUodmFybmFtZSkpID09IE5VTEwpCisJICAgIHJldHVybjsKKwlpZiAoaSA9PSBnYXAtPmdhX2xlbikKKwl7CisJICAgICsrZ2FwLT5nYV9sZW47CisJICAgIC0tZ2FwLT5nYV9yb29tOworCX0KKyAgICB9CisgICAgY29weV92YXIodmFycCwgdik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorY29weV92YXIoZnJvbSwgdG8pCisgICAgVkFSCWZyb207CisgICAgVkFSCXRvOworeworICAgIHRvLT52YXJfdHlwZSA9IGZyb20tPnZhcl90eXBlOworICAgIGlmIChmcm9tLT52YXJfdHlwZSA9PSBWQVJfU1RSSU5HKQorCXRvLT52YXJfdmFsLnZhcl9zdHJpbmcgPSB2aW1fc3Ryc2F2ZShnZXRfdmFyX3N0cmluZyhmcm9tKSk7CisgICAgZWxzZQorCXRvLT52YXJfdmFsLnZhcl9udW1iZXIgPSBmcm9tLT52YXJfdmFsLnZhcl9udW1iZXI7Cit9CisKKy8qCisgKiAiOmVjaG8gZXhwcjEgLi4uIglwcmludCBlYWNoIGFyZ3VtZW50IHNlcGFyYXRlZCB3aXRoIGEgc3BhY2UsIGFkZCBhCisgKgkJCW5ld2xpbmUgYXQgdGhlIGVuZC4KKyAqICI6ZWNob24gZXhwcjEgLi4uIglwcmludCBlYWNoIGFyZ3VtZW50IHBsYWluLgorICovCisgICAgdm9pZAorZXhfZWNobyhlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGNoYXJfdQkqYXJnID0gZWFwLT5hcmc7CisgICAgdmFyCQlyZXR2YXI7CisgICAgY2hhcl91CSpwOworICAgIGludAkJbmVlZGNsciA9IFRSVUU7CisgICAgaW50CQlhdHN0YXJ0ID0gVFJVRTsKKworICAgIGlmIChlYXAtPnNraXApCisJKytlbXNnX3NraXA7CisgICAgd2hpbGUgKCphcmcgIT0gTlVMICYmICphcmcgIT0gJ3wnICYmICphcmcgIT0gJ1xuJyAmJiAhZ290X2ludCkKKyAgICB7CisJcCA9IGFyZzsKKwlpZiAoZXZhbDEoJmFyZywgJnJldHZhciwgIWVhcC0+c2tpcCkgPT0gRkFJTCkKKwl7CisJICAgIC8qCisJICAgICAqIFJlcG9ydCB0aGUgaW52YWxpZCBleHByZXNzaW9uIHVubGVzcyB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uCisJICAgICAqIGhhcyBiZWVuIGNhbmNlbGxlZCBkdWUgdG8gYW4gYWJvcnRpbmcgZXJyb3IsIGFuIGludGVycnVwdCwgb3IgYW4KKwkgICAgICogZXhjZXB0aW9uLgorCSAgICAgKi8KKwkgICAgaWYgKCFhYm9ydGluZygpKQorCQlFTVNHMihfKGVfaW52ZXhwcjIpLCBwKTsKKwkgICAgYnJlYWs7CisJfQorCWlmICghZWFwLT5za2lwKQorCXsKKwkgICAgaWYgKGF0c3RhcnQpCisJICAgIHsKKwkJYXRzdGFydCA9IEZBTFNFOworCQkvKiBDYWxsIG1zZ19zdGFydCgpIGFmdGVyIGV2YWwxKCksIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24KKwkJICogbWF5IGNhdXNlIGEgbWVzc2FnZSB0byBhcHBlYXIuICovCisJCWlmIChlYXAtPmNtZGlkeCA9PSBDTURfZWNobykKKwkJICAgIG1zZ19zdGFydCgpOworCSAgICB9CisJICAgIGVsc2UgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9lY2hvKQorCQltc2dfcHV0c19hdHRyKChjaGFyX3UgKikiICIsIGVjaG9fYXR0cik7CisJICAgIGZvciAocCA9IGdldF92YXJfc3RyaW5nKCZyZXR2YXIpOyAqcCAhPSBOVUwgJiYgIWdvdF9pbnQ7ICsrcCkKKwkJaWYgKCpwID09ICdcbicgfHwgKnAgPT0gJ1xyJyB8fCAqcCA9PSBUQUIpCisJCXsKKwkJICAgIGlmICgqcCAhPSBUQUIgJiYgbmVlZGNscikKKwkJICAgIHsKKwkJCS8qIHJlbW92ZSBhbnkgdGV4dCBzdGlsbCB0aGVyZSBmcm9tIHRoZSBjb21tYW5kICovCisJCQltc2dfY2xyX2VvcygpOworCQkJbmVlZGNsciA9IEZBTFNFOworCQkgICAgfQorCQkgICAgbXNnX3B1dGNoYXJfYXR0cigqcCwgZWNob19hdHRyKTsKKwkJfQorCQllbHNlCisJCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBpZiAoaGFzX21ieXRlKQorCQkgICAgeworCQkJaW50IGkgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOworCisJCQkodm9pZCltc2dfb3V0dHJhbnNfbGVuX2F0dHIocCwgaSwgZWNob19hdHRyKTsKKwkJCXAgKz0gaSAtIDE7CisJCSAgICB9CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCSh2b2lkKW1zZ19vdXR0cmFuc19sZW5fYXR0cihwLCAxLCBlY2hvX2F0dHIpOworCQl9CisJfQorCWNsZWFyX3ZhcigmcmV0dmFyKTsKKwlhcmcgPSBza2lwd2hpdGUoYXJnKTsKKyAgICB9CisgICAgZWFwLT5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChhcmcpOworCisgICAgaWYgKGVhcC0+c2tpcCkKKwktLWVtc2dfc2tpcDsKKyAgICBlbHNlCisgICAgeworCS8qIHJlbW92ZSB0ZXh0IHRoYXQgbWF5IHN0aWxsIGJlIHRoZXJlIGZyb20gdGhlIGNvbW1hbmQgKi8KKwlpZiAobmVlZGNscikKKwkgICAgbXNnX2Nscl9lb3MoKTsKKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2VjaG8pCisJICAgIG1zZ19lbmQoKTsKKyAgICB9Cit9CisKKy8qCisgKiAiOmVjaG9obCB7bmFtZX0iLgorICovCisgICAgdm9pZAorZXhfZWNob2hsKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQlpZDsKKworICAgIGlkID0gc3luX25hbWUyaWQoZWFwLT5hcmcpOworICAgIGlmIChpZCA9PSAwKQorCWVjaG9fYXR0ciA9IDA7CisgICAgZWxzZQorCWVjaG9fYXR0ciA9IHN5bl9pZDJhdHRyKGlkKTsKK30KKworLyoKKyAqICI6ZXhlY3V0ZSBleHByMSAuLi4iCWV4ZWN1dGUgdGhlIHJlc3VsdCBvZiBhbiBleHByZXNzaW9uLgorICogIjplY2hvbXNnIGV4cHIxIC4uLiIJUHJpbnQgYSBtZXNzYWdlCisgKiAiOmVjaG9lcnIgZXhwcjEgLi4uIglQcmludCBhbiBlcnJvcgorICogRWFjaCBnZXRzIHNwYWNlcyBhcm91bmQgZWFjaCBhcmd1bWVudCBhbmQgYSBuZXdsaW5lIGF0IHRoZSBlbmQgZm9yCisgKiBlY2hvIGNvbW1hbmRzCisgKi8KKyAgICB2b2lkCitleF9leGVjdXRlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcl91CSphcmcgPSBlYXAtPmFyZzsKKyAgICB2YXIJCXJldHZhcjsKKyAgICBpbnQJCXJldCA9IE9LOworICAgIGNoYXJfdQkqcDsKKyAgICBnYXJyYXlfVAlnYTsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCXNhdmVfZGlkX2Vtc2c7CisKKyAgICBnYV9pbml0MigmZ2EsIDEsIDgwKTsKKworICAgIGlmIChlYXAtPnNraXApCisJKytlbXNnX3NraXA7CisgICAgd2hpbGUgKCphcmcgIT0gTlVMICYmICphcmcgIT0gJ3wnICYmICphcmcgIT0gJ1xuJykKKyAgICB7CisJcCA9IGFyZzsKKwlpZiAoZXZhbDEoJmFyZywgJnJldHZhciwgIWVhcC0+c2tpcCkgPT0gRkFJTCkKKwl7CisJICAgIC8qCisJICAgICAqIFJlcG9ydCB0aGUgaW52YWxpZCBleHByZXNzaW9uIHVubGVzcyB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uCisJICAgICAqIGhhcyBiZWVuIGNhbmNlbGxlZCBkdWUgdG8gYW4gYWJvcnRpbmcgZXJyb3IsIGFuIGludGVycnVwdCwgb3IgYW4KKwkgICAgICogZXhjZXB0aW9uLgorCSAgICAgKi8KKwkgICAgaWYgKCFhYm9ydGluZygpKQorCQlFTVNHMihfKGVfaW52ZXhwcjIpLCBwKTsKKwkgICAgcmV0ID0gRkFJTDsKKwkgICAgYnJlYWs7CisJfQorCisJaWYgKCFlYXAtPnNraXApCisJeworCSAgICBwID0gZ2V0X3Zhcl9zdHJpbmcoJnJldHZhcik7CisJICAgIGxlbiA9IChpbnQpU1RSTEVOKHApOworCSAgICBpZiAoZ2FfZ3JvdygmZ2EsIGxlbiArIDIpID09IEZBSUwpCisJICAgIHsKKwkJY2xlYXJfdmFyKCZyZXR2YXIpOworCQlyZXQgPSBGQUlMOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoZ2EuZ2FfbGVuKQorCSAgICB7CisJCSgoY2hhcl91ICopKGdhLmdhX2RhdGEpKVtnYS5nYV9sZW4rK10gPSAnICc7CisJCS0tZ2EuZ2Ffcm9vbTsKKwkgICAgfQorCSAgICBTVFJDUFkoKGNoYXJfdSAqKShnYS5nYV9kYXRhKSArIGdhLmdhX2xlbiwgcCk7CisJICAgIGdhLmdhX3Jvb20gLT0gbGVuOworCSAgICBnYS5nYV9sZW4gKz0gbGVuOworCX0KKworCWNsZWFyX3ZhcigmcmV0dmFyKTsKKwlhcmcgPSBza2lwd2hpdGUoYXJnKTsKKyAgICB9CisKKyAgICBpZiAocmV0ICE9IEZBSUwgJiYgZ2EuZ2FfZGF0YSAhPSBOVUxMKQorICAgIHsKKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2VjaG9tc2cpCisJICAgIE1TR19BVFRSKGdhLmdhX2RhdGEsIGVjaG9fYXR0cik7CisJZWxzZSBpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2VjaG9lcnIpCisJeworCSAgICAvKiBXZSBkb24ndCB3YW50IHRvIGFib3J0IGZvbGxvd2luZyBjb21tYW5kcywgcmVzdG9yZSBkaWRfZW1zZy4gKi8KKwkgICAgc2F2ZV9kaWRfZW1zZyA9IGRpZF9lbXNnOworCSAgICBFTVNHKChjaGFyX3UgKilnYS5nYV9kYXRhKTsKKwkgICAgaWYgKCFmb3JjZV9hYm9ydCkKKwkJZGlkX2Vtc2cgPSBzYXZlX2RpZF9lbXNnOworCX0KKwllbHNlIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfZXhlY3V0ZSkKKwkgICAgZG9fY21kbGluZSgoY2hhcl91ICopZ2EuZ2FfZGF0YSwKKwkJICAgICAgIGVhcC0+Z2V0bGluZSwgZWFwLT5jb29raWUsIERPQ01EX05PV0FJVHxET0NNRF9WRVJCT1NFKTsKKyAgICB9CisKKyAgICBnYV9jbGVhcigmZ2EpOworCisgICAgaWYgKGVhcC0+c2tpcCkKKwktLWVtc2dfc2tpcDsKKworICAgIGVhcC0+bmV4dGNtZCA9IGNoZWNrX25leHRjbWQoYXJnKTsKK30KKworLyoKKyAqIFNraXAgb3ZlciB0aGUgbmFtZSBvZiBhbiBvcHRpb246ICImb3B0aW9uIiwgIiZnOm9wdGlvbiIgb3IgIiZsOm9wdGlvbiIuCisgKiAiYXJnIiBwb2ludHMgdG8gdGhlICImIiBvciAnKycgd2hlbiBjYWxsZWQsIHRvICJvcHRpb24iIHdoZW4gcmV0dXJuaW5nLgorICogUmV0dXJucyBOVUxMIHdoZW4gbm8gb3B0aW9uIG5hbWUgZm91bmQuICBPdGhlcndpc2UgcG9pbnRlciB0byB0aGUgY2hhcgorICogYWZ0ZXIgdGhlIG9wdGlvbiBuYW1lLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitmaW5kX29wdGlvbl9lbmQoYXJnLCBvcHRfZmxhZ3MpCisgICAgY2hhcl91CSoqYXJnOworICAgIGludAkJKm9wdF9mbGFnczsKK3sKKyAgICBjaGFyX3UJKnAgPSAqYXJnOworCisgICAgKytwOworICAgIGlmICgqcCA9PSAnZycgJiYgcFsxXSA9PSAnOicpCisgICAgeworCSpvcHRfZmxhZ3MgPSBPUFRfR0xPQkFMOworCXAgKz0gMjsKKyAgICB9CisgICAgZWxzZSBpZiAoKnAgPT0gJ2wnICYmIHBbMV0gPT0gJzonKQorICAgIHsKKwkqb3B0X2ZsYWdzID0gT1BUX0xPQ0FMOworCXAgKz0gMjsKKyAgICB9CisgICAgZWxzZQorCSpvcHRfZmxhZ3MgPSAwOworCisgICAgaWYgKCFBU0NJSV9JU0FMUEhBKCpwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAqYXJnID0gcDsKKworICAgIGlmIChwWzBdID09ICd0JyAmJiBwWzFdID09ICdfJyAmJiBwWzJdICE9IE5VTCAmJiBwWzNdICE9IE5VTCkKKwlwICs9IDQ7CSAgICAvKiB0ZXJtY2FwIG9wdGlvbiAqLworICAgIGVsc2UKKwl3aGlsZSAoQVNDSUlfSVNBTFBIQSgqcCkpCisJICAgICsrcDsKKyAgICByZXR1cm4gcDsKK30KKworLyoKKyAqICI6ZnVuY3Rpb24iCisgKi8KKyAgICB2b2lkCitleF9mdW5jdGlvbihlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGNoYXJfdQkqdGhlbGluZTsKKyAgICBpbnQJCWo7CisgICAgaW50CQljOworI2lmZGVmIEZFQVRfTUFHSUNfQlJBQ0VTCisgICAgaW50CQlzYXZlZF9kaWRfZW1zZzsKKyNlbmRpZgorICAgIGNoYXJfdQkqbmFtZSA9IE5VTEw7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqYXJnOworICAgIGdhcnJheV9UCW5ld2FyZ3M7CisgICAgZ2FycmF5X1QJbmV3bGluZXM7CisgICAgaW50CQl2YXJhcmdzID0gRkFMU0U7CisgICAgaW50CQltdXN0ZW5kID0gRkFMU0U7CisgICAgaW50CQlmbGFncyA9IDA7CisgICAgdWZ1bmNfVAkqZnA7CisgICAgaW50CQlpbmRlbnQ7CisgICAgaW50CQluZXN0aW5nOworICAgIGNoYXJfdQkqc2tpcF91bnRpbCA9IE5VTEw7CisgICAgc3RhdGljIGNoYXJfdSBlX2Z1bmNleHRzW10gPSBOXygiRTEyMjogRnVuY3Rpb24gJXMgYWxyZWFkeSBleGlzdHMsIGFkZCAhIHRvIHJlcGxhY2UgaXQiKTsKKworICAgIC8qCisgICAgICogIjpmdW5jdGlvbiIgd2l0aG91dCBhcmd1bWVudDogbGlzdCBmdW5jdGlvbnMuCisgICAgICovCisgICAgaWYgKGVuZHNfZXhjbWQoKmVhcC0+YXJnKSkKKyAgICB7CisJaWYgKCFlYXAtPnNraXApCisJICAgIGZvciAoZnAgPSBmaXJzdGZ1bmM7IGZwICE9IE5VTEwgJiYgIWdvdF9pbnQ7IGZwID0gZnAtPm5leHQpCisJCWxpc3RfZnVuY19oZWFkKGZwLCBGQUxTRSk7CisJZWFwLT5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChlYXAtPmFyZyk7CisJcmV0dXJuOworICAgIH0KKworICAgIHAgPSBlYXAtPmFyZzsKKyAgICBuYW1lID0gdHJhbnNfZnVuY3Rpb25fbmFtZSgmcCwgZWFwLT5za2lwLCBGQUxTRSk7CisgICAgaWYgKG5hbWUgPT0gTlVMTCAmJiAhZWFwLT5za2lwKQorICAgIHsKKwkvKgorCSAqIFJldHVybiBvbiBhbiBpbnZhbGlkIGV4cHJlc3Npb24gaW4gYnJhY2VzLCB1bmxlc3MgdGhlIGV4cHJlc3Npb24KKwkgKiBldmFsdWF0aW9uIGhhcyBiZWVuIGNhbmNlbGxlZCBkdWUgdG8gYW4gYWJvcnRpbmcgZXJyb3IsIGFuCisJICogaW50ZXJydXB0LCBvciBhbiBleGNlcHRpb24uCisJICovCisJaWYgKCFhYm9ydGluZygpKQorCSAgICByZXR1cm47CisJZWxzZQorCSAgICBlYXAtPnNraXAgPSBUUlVFOworICAgIH0KKyNpZmRlZiBGRUFUX01BR0lDX0JSQUNFUworICAgIC8qIEFuIGVycm9yIGluIGEgZnVuY3Rpb24gY2FsbCBkdXJpbmcgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIG1hZ2ljCisgICAgICogYnJhY2VzIHNob3VsZCBub3QgY2F1c2UgdGhlIGZ1bmN0aW9uIG5vdCB0byBiZSBkZWZpbmVkLiAqLworICAgIHNhdmVkX2RpZF9lbXNnID0gZGlkX2Vtc2c7CisgICAgZGlkX2Vtc2cgPSBGQUxTRTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAiOmZ1bmN0aW9uIGZ1bmMiIHdpdGggb25seSBmdW5jdGlvbiBuYW1lOiBsaXN0IGZ1bmN0aW9uLgorICAgICAqLworICAgIGlmICh2aW1fc3RyY2hyKHAsICcoJykgPT0gTlVMTCkKKyAgICB7CisJaWYgKCFlbmRzX2V4Y21kKCpza2lwd2hpdGUocCkpKQorCXsKKwkgICAgRU1TRyhfKGVfdHJhaWxpbmcpKTsKKwkgICAgZ290byBlcnJldF9uYW1lOworCX0KKwllYXAtPm5leHRjbWQgPSBjaGVja19uZXh0Y21kKHApOworCWlmIChlYXAtPm5leHRjbWQgIT0gTlVMTCkKKwkgICAgKnAgPSBOVUw7CisJaWYgKCFlYXAtPnNraXAgJiYgIWdvdF9pbnQpCisJeworCSAgICBmcCA9IGZpbmRfZnVuYyhuYW1lKTsKKwkgICAgaWYgKGZwICE9IE5VTEwpCisJICAgIHsKKwkJbGlzdF9mdW5jX2hlYWQoZnAsIFRSVUUpOworCQlmb3IgKGogPSAwOyBqIDwgZnAtPmxpbmVzLmdhX2xlbiAmJiAhZ290X2ludDsgKytqKQorCQl7CisJCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKwkJICAgIG1zZ19vdXRudW0oKGxvbmcpKGogKyAxKSk7CisJCSAgICBpZiAoaiA8IDkpCisJCQltc2dfcHV0Y2hhcignICcpOworCQkgICAgaWYgKGogPCA5OSkKKwkJCW1zZ19wdXRjaGFyKCcgJyk7CisJCSAgICBtc2dfcHJ0X2xpbmUoRlVOQ0xJTkUoZnAsIGopKTsKKwkJICAgIG91dF9mbHVzaCgpOwkvKiBzaG93IGEgbGluZSBhdCBhIHRpbWUgKi8KKwkJICAgIHVpX2JyZWFrY2hlY2soKTsKKwkJfQorCQlpZiAoIWdvdF9pbnQpCisJCXsKKwkJICAgIG1zZ19wdXRjaGFyKCdcbicpOworCQkgICAgbXNnX3B1dHMoKGNoYXJfdSAqKSIgICBlbmRmdW5jdGlvbiIpOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCQlFTVNHMihfKCJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIiksIGVhcC0+YXJnKTsKKwl9CisJZ290byBlcnJldF9uYW1lOworICAgIH0KKworICAgIC8qCisgICAgICogIjpmdW5jdGlvbiBuYW1lKGFyZzEsIGFyZzIpIiBEZWZpbmUgZnVuY3Rpb24uCisgICAgICovCisgICAgcCA9IHNraXB3aGl0ZShwKTsKKyAgICBpZiAoKnAgIT0gJygnKQorICAgIHsKKwlpZiAoIWVhcC0+c2tpcCkKKwl7CisJICAgIEVNU0cyKF8oIkUxMjQ6IE1pc3NpbmcgJygnOiAlcyIpLCBlYXAtPmFyZyk7CisJICAgIGdvdG8gZXJyZXRfbmFtZTsKKwl9CisJLyogYXR0ZW1wdCB0byBjb250aW51ZSBieSBza2lwcGluZyBzb21lIHRleHQgKi8KKwlpZiAodmltX3N0cmNocihwLCAnKCcpICE9IE5VTEwpCisJICAgIHAgPSB2aW1fc3RyY2hyKHAsICcoJyk7CisgICAgfQorICAgIHAgPSBza2lwd2hpdGUocCArIDEpOworCisgICAgZ2FfaW5pdDIoJm5ld2FyZ3MsIChpbnQpc2l6ZW9mKGNoYXJfdSAqKSwgMyk7CisgICAgZ2FfaW5pdDIoJm5ld2xpbmVzLCAoaW50KXNpemVvZihjaGFyX3UgKiksIDMpOworCisgICAgLyoKKyAgICAgKiBJc29sYXRlIHRoZSBhcmd1bWVudHM6ICJhcmcxLCBhcmcyLCAuLi4pIgorICAgICAqLworICAgIHdoaWxlICgqcCAhPSAnKScpCisgICAgeworCWlmIChwWzBdID09ICcuJyAmJiBwWzFdID09ICcuJyAmJiBwWzJdID09ICcuJykKKwl7CisJICAgIHZhcmFyZ3MgPSBUUlVFOworCSAgICBwICs9IDM7CisJICAgIG11c3RlbmQgPSBUUlVFOworCX0KKwllbHNlCisJeworCSAgICBhcmcgPSBwOworCSAgICB3aGlsZSAoQVNDSUlfSVNBTE5VTSgqcCkgfHwgKnAgPT0gJ18nKQorCQkrK3A7CisJICAgIGlmIChhcmcgPT0gcCB8fCBpc2RpZ2l0KCphcmcpCisJCSAgICB8fCAocCAtIGFyZyA9PSA5ICYmIFNUUk5DTVAoYXJnLCAiZmlyc3RsaW5lIiwgOSkgPT0gMCkKKwkJICAgIHx8IChwIC0gYXJnID09IDggJiYgU1RSTkNNUChhcmcsICJsYXN0bGluZSIsIDgpID09IDApKQorCSAgICB7CisJCWlmICghZWFwLT5za2lwKQorCQkgICAgRU1TRzIoXygiRTEyNTogSWxsZWdhbCBhcmd1bWVudDogJXMiKSwgYXJnKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKGdhX2dyb3coJm5ld2FyZ3MsIDEpID09IEZBSUwpCisJCWdvdG8gZXJyZXQ7CisJICAgIGMgPSAqcDsKKwkgICAgKnAgPSBOVUw7CisJICAgIGFyZyA9IHZpbV9zdHJzYXZlKGFyZyk7CisJICAgIGlmIChhcmcgPT0gTlVMTCkKKwkJZ290byBlcnJldDsKKwkgICAgKChjaGFyX3UgKiopKG5ld2FyZ3MuZ2FfZGF0YSkpW25ld2FyZ3MuZ2FfbGVuXSA9IGFyZzsKKwkgICAgKnAgPSBjOworCSAgICBuZXdhcmdzLmdhX2xlbisrOworCSAgICBuZXdhcmdzLmdhX3Jvb20tLTsKKwkgICAgaWYgKCpwID09ICcsJykKKwkJKytwOworCSAgICBlbHNlCisJCW11c3RlbmQgPSBUUlVFOworCX0KKwlwID0gc2tpcHdoaXRlKHApOworCWlmIChtdXN0ZW5kICYmICpwICE9ICcpJykKKwl7CisJICAgIGlmICghZWFwLT5za2lwKQorCQlFTVNHMihfKGVfaW52YXJnMiksIGVhcC0+YXJnKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICArK3A7CS8qIHNraXAgdGhlICcpJyAqLworCisgICAgLyogZmluZCBleHRyYSBhcmd1bWVudHMgInJhbmdlIiBhbmQgImFib3J0IiAqLworICAgIGZvciAoOzspCisgICAgeworCXAgPSBza2lwd2hpdGUocCk7CisJaWYgKFNUUk5DTVAocCwgInJhbmdlIiwgNSkgPT0gMCkKKwl7CisJICAgIGZsYWdzIHw9IEZDX1JBTkdFOworCSAgICBwICs9IDU7CisJfQorCWVsc2UgaWYgKFNUUk5DTVAocCwgImFib3J0IiwgNSkgPT0gMCkKKwl7CisJICAgIGZsYWdzIHw9IEZDX0FCT1JUOworCSAgICBwICs9IDU7CisJfQorCWVsc2UKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCpwICE9IE5VTCAmJiAqcCAhPSAnIicgJiYgKnAgIT0gJ1xuJyAmJiAhZWFwLT5za2lwICYmICFkaWRfZW1zZykKKwlFTVNHKF8oZV90cmFpbGluZykpOworCisgICAgLyoKKyAgICAgKiBSZWFkIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiwgdW50aWwgIjplbmRmdW5jdGlvbiIgaXMgZm91bmQuCisgICAgICovCisgICAgaWYgKEtleVR5cGVkKQorICAgIHsKKwkvKiBDaGVjayBpZiB0aGUgZnVuY3Rpb24gYWxyZWFkeSBleGlzdHMsIGRvbid0IGxldCB0aGUgdXNlciB0eXBlIHRoZQorCSAqIHdob2xlIGZ1bmN0aW9uIGJlZm9yZSB0ZWxsaW5nIGhpbSBpdCBkb2Vzbid0IHdvcmshICBGb3IgYSBzY3JpcHQgd2UKKwkgKiBuZWVkIHRvIHNraXAgdGhlIGJvZHkgdG8gYmUgYWJsZSB0byBmaW5kIHdoYXQgZm9sbG93cy4gKi8KKwlpZiAoIWVhcC0+c2tpcCAmJiAhZWFwLT5mb3JjZWl0ICYmIGZpbmRfZnVuYyhuYW1lKSAhPSBOVUxMKQorCSAgICBFTVNHMihfKGVfZnVuY2V4dHMpLCBuYW1lKTsKKworCW1zZ19wdXRjaGFyKCdcbicpOwkgICAgLyogZG9uJ3Qgb3ZlcndyaXRlIHRoZSBmdW5jdGlvbiBuYW1lICovCisJY21kbGluZV9yb3cgPSBtc2dfcm93OworICAgIH0KKworICAgIGluZGVudCA9IDI7CisgICAgbmVzdGluZyA9IDA7CisgICAgZm9yICg7OykKKyAgICB7CisJbXNnX3Njcm9sbCA9IFRSVUU7CisJbmVlZF93YWl0X3JldHVybiA9IEZBTFNFOworCWlmIChlYXAtPmdldGxpbmUgPT0gTlVMTCkKKwkgICAgdGhlbGluZSA9IGdldGNtZGxpbmUoJzonLCAwTCwgaW5kZW50KTsKKwllbHNlCisJICAgIHRoZWxpbmUgPSBlYXAtPmdldGxpbmUoJzonLCBlYXAtPmNvb2tpZSwgaW5kZW50KTsKKwlpZiAoS2V5VHlwZWQpCisJICAgIGxpbmVzX2xlZnQgPSBSb3dzIC0gMTsKKwlpZiAodGhlbGluZSA9PSBOVUxMKQorCXsKKwkgICAgRU1TRyhfKCJFMTI2OiBNaXNzaW5nIDplbmRmdW5jdGlvbiIpKTsKKwkgICAgZ290byBlcnJldDsKKwl9CisKKwlpZiAoc2tpcF91bnRpbCAhPSBOVUxMKQorCXsKKwkgICAgLyogYmV0d2VlbiAiOmFwcGVuZCIgYW5kICIuIiBhbmQgYmV0d2VlbiAiOnB5dGhvbiA8PEVPRiIgYW5kICJFT0YiCisJICAgICAqIGRvbid0IGNoZWNrIGZvciAiOmVuZGZ1bmMiLiAqLworCSAgICBpZiAoU1RSQ01QKHRoZWxpbmUsIHNraXBfdW50aWwpID09IDApCisJICAgIHsKKwkJdmltX2ZyZWUoc2tpcF91bnRpbCk7CisJCXNraXBfdW50aWwgPSBOVUxMOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIC8qIHNraXAgJzonIGFuZCBibGFua3MqLworCSAgICBmb3IgKHAgPSB0aGVsaW5lOyB2aW1faXN3aGl0ZSgqcCkgfHwgKnAgPT0gJzonOyArK3ApCisJCTsKKworCSAgICAvKiBDaGVjayBmb3IgImVuZGZ1bmN0aW9uIiAoc2hvdWxkIGJlIG1vcmUgc3RyaWN0Li4uKS4gKi8KKwkgICAgaWYgKFNUUk5DTVAocCwgImVuZGYiLCA0KSA9PSAwICYmIG5lc3RpbmctLSA9PSAwKQorCSAgICB7CisJCXZpbV9mcmVlKHRoZWxpbmUpOworCQlicmVhazsKKwkgICAgfQorCisJICAgIC8qIEluY3JlYXNlIGluZGVudCBpbnNpZGUgImlmIiwgIndoaWxlIiwgYW5kICJ0cnkiLCBkZWNyZWFzZQorCSAgICAgKiBhdCAiZW5kIi4gKi8KKwkgICAgaWYgKGluZGVudCA+IDIgJiYgU1RSTkNNUChwLCAiZW5kIiwgMykgPT0gMCkKKwkJaW5kZW50IC09IDI7CisJICAgIGVsc2UgaWYgKFNUUk5DTVAocCwgImlmIiwgMikgPT0gMCB8fCBTVFJOQ01QKHAsICJ3aCIsIDIpID09IDAKKwkJICAgIHx8IFNUUk5DTVAocCwgInRyeSIsIDMpID09IDApCisJCWluZGVudCArPSAyOworCisJICAgIC8qIENoZWNrIGZvciBkZWZpbmluZyBhIGZ1bmN0aW9uIGluc2lkZSB0aGlzIGZ1bmN0aW9uLiAqLworCSAgICBpZiAoU1RSTkNNUChwLCAiZnUiLCAyKSA9PSAwKQorCSAgICB7CisJCXAgPSBza2lwd2hpdGUoc2tpcHRvd2hpdGUocCkpOworCQlwICs9IGV2YWxfZm5hbWVfc2NyaXB0KHApOworCQlpZiAoQVNDSUlfSVNBTFBIQSgqcCkpCisJCXsKKwkJICAgIHZpbV9mcmVlKHRyYW5zX2Z1bmN0aW9uX25hbWUoJnAsIFRSVUUsIEZBTFNFKSk7CisJCSAgICBpZiAoKnNraXB3aGl0ZShwKSA9PSAnKCcpCisJCSAgICB7CisJCQkrK25lc3Rpbmc7CisJCQlpbmRlbnQgKz0gMjsKKwkJICAgIH0KKwkJfQorCSAgICB9CisKKwkgICAgLyogQ2hlY2sgZm9yICI6YXBwZW5kIiBvciAiOmluc2VydCIuICovCisJICAgIHAgPSBza2lwX3JhbmdlKHAsIE5VTEwpOworCSAgICBpZiAoKHBbMF0gPT0gJ2EnICYmICghQVNDSUlfSVNBTFBIQShwWzFdKSB8fCBwWzFdID09ICdwJykpCisJCSAgICB8fCAocFswXSA9PSAnaScKKwkJCSYmICghQVNDSUlfSVNBTFBIQShwWzFdKSB8fCAocFsxXSA9PSAnbicKKwkJCQkmJiAoIUFTQ0lJX0lTQUxQSEEocFsyXSkgfHwgKHBbMl0gPT0gJ3MnKSkpKSkpCisJCXNraXBfdW50aWwgPSB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopIi4iKTsKKworCSAgICAvKiBDaGVjayBmb3IgIjpweXRob24gPDxFT0YiLCAiOnRjbCA8PEVPRiIsIGV0Yy4gKi8KKwkgICAgYXJnID0gc2tpcHdoaXRlKHNraXB0b3doaXRlKHApKTsKKwkgICAgaWYgKGFyZ1swXSA9PSAnPCcgJiYgYXJnWzFdID09JzwnCisJCSAgICAmJiAoKHBbMF0gPT0gJ3AnICYmIHBbMV0gPT0gJ3knCisJCQkJICAgICYmICghQVNDSUlfSVNBTFBIQShwWzJdKSB8fCBwWzJdID09ICd0JykpCisJCQl8fCAocFswXSA9PSAncCcgJiYgcFsxXSA9PSAnZScKKwkJCQkgICAgJiYgKCFBU0NJSV9JU0FMUEhBKHBbMl0pIHx8IHBbMl0gPT0gJ3InKSkKKwkJCXx8IChwWzBdID09ICd0JyAmJiBwWzFdID09ICdjJworCQkJCSAgICAmJiAoIUFTQ0lJX0lTQUxQSEEocFsyXSkgfHwgcFsyXSA9PSAnbCcpKQorCQkJfHwgKHBbMF0gPT0gJ3InICYmIHBbMV0gPT0gJ3UnICYmIHBbMl0gPT0gJ2InCisJCQkJICAgICYmICghQVNDSUlfSVNBTFBIQShwWzNdKSB8fCBwWzNdID09ICd5JykpCisJCQkpKQorCSAgICB7CisJCS8qICI6cHl0aG9uIDw8IiBjb250aW51ZXMgdW50aWwgYSBkb3QsIGxpa2UgIjphcHBlbmQiICovCisJCXAgPSBza2lwd2hpdGUoYXJnICsgMik7CisJCWlmICgqcCA9PSBOVUwpCisJCSAgICBza2lwX3VudGlsID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKSIuIik7CisJCWVsc2UKKwkJICAgIHNraXBfdW50aWwgPSB2aW1fc3Ryc2F2ZShwKTsKKwkgICAgfQorCX0KKworCS8qIEFkZCB0aGUgbGluZSB0byB0aGUgZnVuY3Rpb24uICovCisJaWYgKGdhX2dyb3coJm5ld2xpbmVzLCAxKSA9PSBGQUlMKQorCSAgICBnb3RvIGVycmV0OworCSgoY2hhcl91ICoqKShuZXdsaW5lcy5nYV9kYXRhKSlbbmV3bGluZXMuZ2FfbGVuXSA9IHRoZWxpbmU7CisJbmV3bGluZXMuZ2FfbGVuKys7CisJbmV3bGluZXMuZ2Ffcm9vbS0tOworICAgIH0KKworICAgIC8qIERvbid0IGRlZmluZSB0aGUgZnVuY3Rpb24gd2hlbiBza2lwcGluZyBjb21tYW5kcyBvciB3aGVuIGFuIGVycm9yIHdhcworICAgICAqIGRldGVjdGVkLiAqLworICAgIGlmIChlYXAtPnNraXAgfHwgZGlkX2Vtc2cpCisJZ290byBlcnJldDsKKworICAgIC8qCisgICAgICogSWYgdGhlcmUgYXJlIG5vIGVycm9ycywgYWRkIHRoZSBmdW5jdGlvbgorICAgICAqLworICAgIGZwID0gZmluZF9mdW5jKG5hbWUpOworICAgIGlmIChmcCAhPSBOVUxMKQorICAgIHsKKwlpZiAoIWVhcC0+Zm9yY2VpdCkKKwl7CisJICAgIEVNU0cyKF8oZV9mdW5jZXh0cyksIG5hbWUpOworCSAgICBnb3RvIGVycmV0OworCX0KKwlpZiAoZnAtPmNhbGxzKQorCXsKKwkgICAgRU1TRzIoXygiRTEyNzogQ2Fubm90IHJlZGVmaW5lIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiKSwgbmFtZSk7CisJICAgIGdvdG8gZXJyZXQ7CisJfQorCS8qIHJlZGVmaW5lIGV4aXN0aW5nIGZ1bmN0aW9uICovCisJZ2FfY2xlYXJfc3RyaW5ncygmKGZwLT5hcmdzKSk7CisJZ2FfY2xlYXJfc3RyaW5ncygmKGZwLT5saW5lcykpOworCXZpbV9mcmVlKG5hbWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWZwID0gKHVmdW5jX1QgKilhbGxvYygodW5zaWduZWQpc2l6ZW9mKHVmdW5jX1QpKTsKKwlpZiAoZnAgPT0gTlVMTCkKKwkgICAgZ290byBlcnJldDsKKwkvKiBpbnNlcnQgdGhlIG5ldyBmdW5jdGlvbiBpbiB0aGUgZnVuY3Rpb24gbGlzdCAqLworCWZwLT5uZXh0ID0gZmlyc3RmdW5jOworCWZpcnN0ZnVuYyA9IGZwOworCWZwLT5uYW1lID0gbmFtZTsKKyAgICB9CisgICAgZnAtPmFyZ3MgPSBuZXdhcmdzOworICAgIGZwLT5saW5lcyA9IG5ld2xpbmVzOworICAgIGZwLT52YXJhcmdzID0gdmFyYXJnczsKKyAgICBmcC0+ZmxhZ3MgPSBmbGFnczsKKyAgICBmcC0+Y2FsbHMgPSAwOworICAgIGZwLT5zY3JpcHRfSUQgPSBjdXJyZW50X1NJRDsKKyNpZmRlZiBGRUFUX01BR0lDX0JSQUNFUworICAgIGRpZF9lbXNnIHw9IHNhdmVkX2RpZF9lbXNnOworI2VuZGlmCisgICAgdmltX2ZyZWUoc2tpcF91bnRpbCk7CisgICAgcmV0dXJuOworCitlcnJldDoKKyAgICB2aW1fZnJlZShza2lwX3VudGlsKTsKKyAgICBnYV9jbGVhcl9zdHJpbmdzKCZuZXdhcmdzKTsKKyAgICBnYV9jbGVhcl9zdHJpbmdzKCZuZXdsaW5lcyk7CitlcnJldF9uYW1lOgorICAgIHZpbV9mcmVlKG5hbWUpOworI2lmZGVmIEZFQVRfTUFHSUNfQlJBQ0VTCisgICAgZGlkX2Vtc2cgfD0gc2F2ZWRfZGlkX2Vtc2c7CisjZW5kaWYKK30KKworLyoKKyAqIEdldCBhIGZ1bmN0aW9uIG5hbWUsIHRyYW5zbGF0aW5nICI8U0lEPiIgYW5kICI8U05SPiIuCisgKiBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lIGluIGFsbG9jYXRlZCBtZW1vcnksIG9yIE5VTEwgZm9yIGZhaWx1cmUuCisgKiBBZHZhbmNlcyAicHAiIHRvIGp1c3QgYWZ0ZXIgdGhlIGZ1bmN0aW9uIG5hbWUgKGlmIG5vIGVycm9yKS4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgordHJhbnNfZnVuY3Rpb25fbmFtZShwcCwgc2tpcCwgaW50ZXJuYWwpCisgICAgY2hhcl91CSoqcHA7CisgICAgaW50CQlza2lwOwkJLyogb25seSBmaW5kIHRoZSBlbmQsIGRvbid0IGV2YWx1YXRlICovCisgICAgaW50CQlpbnRlcm5hbDsJLyogVFJVRSBpZiBpbnRlcm5hbCBmdW5jdGlvbiBuYW1lIE9LICovCit7CisgICAgY2hhcl91CSpuYW1lOworICAgIGNoYXJfdQkqc3RhcnQ7CisgICAgY2hhcl91CSplbmQ7CisgICAgaW50CQlsZWFkOworICAgIGNoYXJfdQlzaWRfYnVmWzIwXTsKKyAgICBjaGFyX3UJKnRlbXBfc3RyaW5nID0gTlVMTDsKKyAgICBjaGFyX3UJKmV4cHJfc3RhcnQsICpleHByX2VuZDsKKyAgICBpbnQJCWxlbjsKKworICAgIC8qIEEgbmFtZSBzdGFydGluZyB3aXRoICI8U0lEPiIgb3IgIjxTTlI+IiBpcyBsb2NhbCB0byBhIHNjcmlwdC4gKi8KKyAgICBzdGFydCA9ICpwcDsKKyAgICBsZWFkID0gZXZhbF9mbmFtZV9zY3JpcHQoc3RhcnQpOworICAgIGlmIChsZWFkID4gMCkKKwlzdGFydCArPSBsZWFkOworICAgIGVuZCA9IGZpbmRfbmFtZV9lbmQoc3RhcnQsICZleHByX3N0YXJ0LCAmZXhwcl9lbmQpOworICAgIGlmIChlbmQgPT0gc3RhcnQpCisgICAgeworCWlmICghc2tpcCkKKwkgICAgRU1TRyhfKCJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIikpOworCXJldHVybiBOVUxMOworICAgIH0KKyNpZmRlZiBGRUFUX01BR0lDX0JSQUNFUworICAgIGlmIChleHByX3N0YXJ0ICE9IE5VTEwgJiYgIXNraXApCisgICAgeworCS8qIGV4cGFuZCBtYWdpYyBjdXJsaWVzICovCisJdGVtcF9zdHJpbmcgPSBtYWtlX2V4cGFuZGVkX25hbWUoc3RhcnQsIGV4cHJfc3RhcnQsIGV4cHJfZW5kLCBlbmQpOworCWlmICh0ZW1wX3N0cmluZyA9PSBOVUxMKQorCXsKKwkgICAgLyoKKwkgICAgICogUmVwb3J0IGFuIGludmFsaWQgZXhwcmVzc2lvbiBpbiBicmFjZXMsIHVubGVzcyB0aGUgZXhwcmVzc2lvbgorCSAgICAgKiBldmFsdWF0aW9uIGhhcyBiZWVuIGNhbmNlbGxlZCBkdWUgdG8gYW4gYWJvcnRpbmcgZXJyb3IsIGFuCisJICAgICAqIGludGVycnVwdCwgb3IgYW4gZXhjZXB0aW9uLgorCSAgICAgKi8KKwkgICAgaWYgKCFhYm9ydGluZygpKQorCQlFTVNHMihfKGVfaW52YXJnMiksIHN0YXJ0KTsKKwkgICAgZWxzZQorCQkqcHAgPSBlbmQ7CisJICAgIHJldHVybiBOVUxMOworCX0KKwlzdGFydCA9IHRlbXBfc3RyaW5nOworCWxlbiA9IChpbnQpU1RSTEVOKHRlbXBfc3RyaW5nKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJbGVuID0gKGludCkoZW5kIC0gc3RhcnQpOworCisgICAgLyoKKyAgICAgKiBDb3B5IHRoZSBmdW5jdGlvbiBuYW1lIHRvIGFsbG9jYXRlZCBtZW1vcnkuCisgICAgICogQWNjZXB0IDxTSUQ+bmFtZSgpIGluc2lkZSBhIHNjcmlwdCwgdHJhbnNsYXRlIGludG8gPFNOUj4xMjNfbmFtZSgpLgorICAgICAqIEFjY2VwdCA8U05SPjEyM19uYW1lKCkgb3V0c2lkZSBhIHNjcmlwdC4KKyAgICAgKi8KKyAgICBpZiAoc2tpcCkKKwlsZWFkID0gMDsJLyogZG8gbm90aGluZyAqLworICAgIGVsc2UgaWYgKGxlYWQgPiAwKQorICAgIHsKKwlsZWFkID0gMzsKKwlpZiAoZXZhbF9mbmFtZV9zaWQoKnBwKSkJLyogSWYgaXQncyAiPFNJRD4iICovCisJeworCSAgICBpZiAoY3VycmVudF9TSUQgPD0gMCkKKwkgICAgeworCQlFTVNHKF8oZV91c2luZ3NpZCkpOworCQlyZXR1cm4gTlVMTDsKKwkgICAgfQorCSAgICBzcHJpbnRmKChjaGFyICopc2lkX2J1ZiwgIiVsZF8iLCAobG9uZyljdXJyZW50X1NJRCk7CisJICAgIGxlYWQgKz0gKGludClTVFJMRU4oc2lkX2J1Zik7CisJfQorICAgIH0KKyAgICBlbHNlIGlmICghaW50ZXJuYWwgJiYgIUFTQ0lJX0lTVVBQRVIoKnN0YXJ0KSkKKyAgICB7CisJRU1TRzIoXygiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIpLCBzdGFydCk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5hbWUgPSBhbGxvYygodW5zaWduZWQpKGxlbiArIGxlYWQgKyAxKSk7CisgICAgaWYgKG5hbWUgIT0gTlVMTCkKKyAgICB7CisJaWYgKGxlYWQgPiAwKQorCXsKKwkgICAgbmFtZVswXSA9IEtfU1BFQ0lBTDsKKwkgICAgbmFtZVsxXSA9IEtTX0VYVFJBOworCSAgICBuYW1lWzJdID0gKGludClLRV9TTlI7CisJICAgIGlmIChldmFsX2ZuYW1lX3NpZCgqcHApKQkvKiBJZiBpdCdzICI8U0lEPiIgKi8KKwkJU1RSQ1BZKG5hbWUgKyAzLCBzaWRfYnVmKTsKKwl9CisJbWNoX21lbW1vdmUobmFtZSArIGxlYWQsIHN0YXJ0LCAoc2l6ZV90KWxlbik7CisJbmFtZVtsZW4gKyBsZWFkXSA9IE5VTDsKKyAgICB9CisgICAgKnBwID0gZW5kOworCisgICAgdmltX2ZyZWUodGVtcF9zdHJpbmcpOworICAgIHJldHVybiBuYW1lOworfQorCisvKgorICogUmV0dXJuIDUgaWYgInAiIHN0YXJ0cyB3aXRoICI8U0lEPiIgb3IgIjxTTlI+IiAoaWdub3JpbmcgY2FzZSkuCisgKiBSZXR1cm4gMiBpZiAicCIgc3RhcnRzIHdpdGggInM6Ii4KKyAqIFJldHVybiAwIG90aGVyd2lzZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2V2YWxfZm5hbWVfc2NyaXB0KHApCisgICAgY2hhcl91CSpwOworeworICAgIGlmIChwWzBdID09ICc8JyAmJiAoU1RSTklDTVAocCArIDEsICJTSUQ+IiwgNCkgPT0gMAorCQkJCQkgIHx8IFNUUk5JQ01QKHAgKyAxLCAiU05SPiIsIDQpID09IDApKQorCXJldHVybiA1OworICAgIGlmIChwWzBdID09ICdzJyAmJiBwWzFdID09ICc6JykKKwlyZXR1cm4gMjsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmICJwIiBzdGFydHMgd2l0aCAiPFNJRD4iIG9yICJzOiIuCisgKiBPbmx5IHdvcmtzIGlmIGV2YWxfZm5hbWVfc2NyaXB0KCkgcmV0dXJuZWQgbm9uLXplcm8gZm9yICJwIiEKKyAqLworICAgIHN0YXRpYyBpbnQKK2V2YWxfZm5hbWVfc2lkKHApCisgICAgY2hhcl91CSpwOworeworICAgIHJldHVybiAoKnAgPT0gJ3MnIHx8IFRPVVBQRVJfQVNDKHBbMl0pID09ICdJJyk7Cit9CisKKy8qCisgKiBMaXN0IHRoZSBoZWFkIG9mIHRoZSBmdW5jdGlvbjogIm5hbWUoYXJnMSwgYXJnMikiLgorICovCisgICAgc3RhdGljIHZvaWQKK2xpc3RfZnVuY19oZWFkKGZwLCBpbmRlbnQpCisgICAgdWZ1bmNfVAkqZnA7CisgICAgaW50CQlpbmRlbnQ7Cit7CisgICAgaW50CQlqOworCisgICAgbXNnX3N0YXJ0KCk7CisgICAgaWYgKGluZGVudCkKKwlNU0dfUFVUUygiICAgIik7CisgICAgTVNHX1BVVFMoImZ1bmN0aW9uICIpOworICAgIGlmIChmcC0+bmFtZVswXSA9PSBLX1NQRUNJQUwpCisgICAgeworCU1TR19QVVRTX0FUVFIoIjxTTlI+IiwgaGxfYXR0cihITEZfOCkpOworCW1zZ19wdXRzKGZwLT5uYW1lICsgMyk7CisgICAgfQorICAgIGVsc2UKKwltc2dfcHV0cyhmcC0+bmFtZSk7CisgICAgbXNnX3B1dGNoYXIoJygnKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgZnAtPmFyZ3MuZ2FfbGVuOyArK2opCisgICAgeworCWlmIChqKQorCSAgICBNU0dfUFVUUygiLCAiKTsKKwltc2dfcHV0cyhGVU5DQVJHKGZwLCBqKSk7CisgICAgfQorICAgIGlmIChmcC0+dmFyYXJncykKKyAgICB7CisJaWYgKGopCisJICAgIE1TR19QVVRTKCIsICIpOworCU1TR19QVVRTKCIuLi4iKTsKKyAgICB9CisgICAgbXNnX3B1dGNoYXIoJyknKTsKK30KKworLyoKKyAqIEZpbmQgYSBmdW5jdGlvbiBieSBuYW1lLCByZXR1cm4gcG9pbnRlciB0byBpdCBpbiB1ZnVuY3MuCisgKiBSZXR1cm4gTlVMTCBmb3IgdW5rbm93biBmdW5jdGlvbi4KKyAqLworICAgIHN0YXRpYyB1ZnVuY19UICoKK2ZpbmRfZnVuYyhuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICB1ZnVuY19UCSpmcDsKKworICAgIGZvciAoZnAgPSBmaXJzdGZ1bmM7IGZwICE9IE5VTEw7IGZwID0gZnAtPm5leHQpCisJaWYgKFNUUkNNUChuYW1lLCBmcC0+bmFtZSkgPT0gMCkKKwkgICAgYnJlYWs7CisgICAgcmV0dXJuIGZwOworfQorCisjaWYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qCisgKiBGdW5jdGlvbiBnaXZlbiB0byBFeHBhbmRHZW5lcmljKCkgdG8gb2J0YWluIHRoZSBsaXN0IG9mIHVzZXIgZGVmaW5lZAorICogZnVuY3Rpb24gbmFtZXMuCisgKi8KKyAgICBjaGFyX3UgKgorZ2V0X3VzZXJfZnVuY19uYW1lKHhwLCBpZHgpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGludAkJaWR4OworeworICAgIHN0YXRpYyB1ZnVuY19UICpmcCA9IE5VTEw7CisKKyAgICBpZiAoaWR4ID09IDApCisJZnAgPSBmaXJzdGZ1bmM7CisgICAgaWYgKGZwICE9IE5VTEwpCisgICAgeworCWlmIChTVFJMRU4oZnAtPm5hbWUpICsgNCA+PSBJT1NJWkUpCisJICAgIHJldHVybiBmcC0+bmFtZTsJLyogcHJldmVudHMgb3ZlcmZsb3cgKi8KKworCWNhdF9mdW5jX25hbWUoSU9idWZmLCBmcCk7CisJaWYgKHhwLT54cF9jb250ZXh0ICE9IEVYUEFORF9VU0VSX0ZVTkMpCisJeworCSAgICBTVFJDQVQoSU9idWZmLCAiKCIpOworCSAgICBpZiAoIWZwLT52YXJhcmdzICYmIGZwLT5hcmdzLmdhX2xlbiA9PSAwKQorCQlTVFJDQVQoSU9idWZmLCAiKSIpOworCX0KKworCWZwID0gZnAtPm5leHQ7CisJcmV0dXJuIElPYnVmZjsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZiAvKiBGRUFUX0NNRExfQ09NUEwgKi8KKworLyoKKyAqIENvcHkgdGhlIGZ1bmN0aW9uIG5hbWUgb2YgImZwIiB0byBidWZmZXIgImJ1ZiIuCisgKiAiYnVmIiBtdXN0IGJlIGFibGUgdG8gaG9sZCB0aGUgZnVuY3Rpb24gbmFtZSBwbHVzIHRocmVlIGJ5dGVzLgorICogVGFrZXMgY2FyZSBvZiBzY3JpcHQtbG9jYWwgZnVuY3Rpb24gbmFtZXMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2F0X2Z1bmNfbmFtZShidWYsIGZwKQorICAgIGNoYXJfdQkqYnVmOworICAgIHVmdW5jX1QJKmZwOworeworICAgIGlmIChmcC0+bmFtZVswXSA9PSBLX1NQRUNJQUwpCisgICAgeworCVNUUkNQWShidWYsICI8U05SPiIpOworCVNUUkNBVChidWYsIGZwLT5uYW1lICsgMyk7CisgICAgfQorICAgIGVsc2UKKwlTVFJDUFkoYnVmLCBmcC0+bmFtZSk7Cit9CisKKy8qCisgKiAiOmRlbGZ1bmN0aW9uIHtuYW1lfSIKKyAqLworICAgIHZvaWQKK2V4X2RlbGZ1bmN0aW9uKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgdWZ1bmNfVAkqZnAgPSBOVUxMLCAqcGZwOworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKm5hbWU7CisKKyAgICBwID0gZWFwLT5hcmc7CisgICAgbmFtZSA9IHRyYW5zX2Z1bmN0aW9uX25hbWUoJnAsIGVhcC0+c2tpcCwgRkFMU0UpOworICAgIGlmIChuYW1lID09IE5VTEwpCisJcmV0dXJuOworICAgIGlmICghZW5kc19leGNtZCgqc2tpcHdoaXRlKHApKSkKKyAgICB7CisJdmltX2ZyZWUobmFtZSk7CisJRU1TRyhfKGVfdHJhaWxpbmcpKTsKKwlyZXR1cm47CisgICAgfQorICAgIGVhcC0+bmV4dGNtZCA9IGNoZWNrX25leHRjbWQocCk7CisgICAgaWYgKGVhcC0+bmV4dGNtZCAhPSBOVUxMKQorCSpwID0gTlVMOworCisgICAgaWYgKCFlYXAtPnNraXApCisJZnAgPSBmaW5kX2Z1bmMobmFtZSk7CisgICAgdmltX2ZyZWUobmFtZSk7CisKKyAgICBpZiAoIWVhcC0+c2tpcCkKKyAgICB7CisJaWYgKGZwID09IE5VTEwpCisJeworCSAgICBFTVNHMihfKCJFMTMwOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIiksIGVhcC0+YXJnKTsKKwkgICAgcmV0dXJuOworCX0KKwlpZiAoZnAtPmNhbGxzKQorCXsKKwkgICAgRU1TRzIoXygiRTEzMTogQ2Fubm90IGRlbGV0ZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIiksIGVhcC0+YXJnKTsKKwkgICAgcmV0dXJuOworCX0KKworCS8qIGNsZWFyIHRoaXMgZnVuY3Rpb24gKi8KKwl2aW1fZnJlZShmcC0+bmFtZSk7CisJZ2FfY2xlYXJfc3RyaW5ncygmKGZwLT5hcmdzKSk7CisJZ2FfY2xlYXJfc3RyaW5ncygmKGZwLT5saW5lcykpOworCisJLyogcmVtb3ZlIHRoZSBmdW5jdGlvbiBmcm9tIHRoZSBmdW5jdGlvbiBsaXN0ICovCisJaWYgKGZpcnN0ZnVuYyA9PSBmcCkKKwkgICAgZmlyc3RmdW5jID0gZnAtPm5leHQ7CisJZWxzZQorCXsKKwkgICAgZm9yIChwZnAgPSBmaXJzdGZ1bmM7IHBmcCAhPSBOVUxMOyBwZnAgPSBwZnAtPm5leHQpCisJCWlmIChwZnAtPm5leHQgPT0gZnApCisJCXsKKwkJICAgIHBmcC0+bmV4dCA9IGZwLT5uZXh0OworCQkgICAgYnJlYWs7CisJCX0KKwl9CisJdmltX2ZyZWUoZnApOworICAgIH0KK30KKworLyoKKyAqIENhbGwgYSB1c2VyIGZ1bmN0aW9uLgorICovCisgICAgc3RhdGljIHZvaWQKK2NhbGxfdXNlcl9mdW5jKGZwLCBhcmdjb3VudCwgYXJndmFycywgcmV0dmFyLCBmaXJzdGxpbmUsIGxhc3RsaW5lKQorICAgIHVmdW5jX1QJKmZwOwkJLyogcG9pbnRlciB0byBmdW5jdGlvbiAqLworICAgIGludAkJYXJnY291bnQ7CS8qIG5yIG9mIGFyZ3MgKi8KKyAgICBWQVIJCWFyZ3ZhcnM7CS8qIGFyZ3VtZW50cyAqLworICAgIFZBUgkJcmV0dmFyOwkJLyogcmV0dXJuIHZhbHVlICovCisgICAgbGluZW5yX1QJZmlyc3RsaW5lOwkvKiBmaXJzdCBsaW5lIG9mIHJhbmdlICovCisgICAgbGluZW5yX1QJbGFzdGxpbmU7CS8qIGxhc3QgbGluZSBvZiByYW5nZSAqLworeworICAgIGNoYXJfdQkJKnNhdmVfc291cmNpbmdfbmFtZTsKKyAgICBsaW5lbnJfVAkJc2F2ZV9zb3VyY2luZ19sbnVtOworICAgIHNjaWRfVAkJc2F2ZV9jdXJyZW50X1NJRDsKKyAgICBzdHJ1Y3QgZnVuY2NhbGwJZmM7CisgICAgc3RydWN0IGZ1bmNjYWxsCSpzYXZlX2ZjcCA9IGN1cnJlbnRfZnVuY2NhbDsKKyAgICBpbnQJCQlzYXZlX2RpZF9lbXNnOworICAgIHN0YXRpYyBpbnQJCWRlcHRoID0gMDsKKworICAgIC8qIElmIGRlcHRoIG9mIGNhbGxpbmcgaXMgZ2V0dGluZyB0b28gaGlnaCwgZG9uJ3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gKi8KKyAgICBpZiAoZGVwdGggPj0gcF9tZmQpCisgICAgeworCUVNU0coXygiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIpKTsKKwlyZXR2YXItPnZhcl90eXBlID0gVkFSX05VTUJFUjsKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IC0xOworCXJldHVybjsKKyAgICB9CisgICAgKytkZXB0aDsKKworICAgIGxpbmVfYnJlYWtjaGVjaygpOwkJLyogY2hlY2sgZm9yIENUUkwtQyBoaXQgKi8KKworICAgIC8qIHNldCBsb2NhbCB2YXJpYWJsZXMgKi8KKyAgICB2YXJfaW5pdCgmZmMubF92YXJzKTsKKyAgICBmYy5mdW5jID0gZnA7CisgICAgZmMuYXJnY291bnQgPSBhcmdjb3VudDsKKyAgICBmYy5hcmd2YXJzID0gYXJndmFyczsKKyAgICBmYy5yZXR2YXIgPSByZXR2YXI7CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAwOworICAgIGZjLmxpbmVuciA9IDA7CisgICAgZmMucmV0dXJuZWQgPSBGQUxTRTsKKyAgICBmYy5sZXZlbCA9IGV4X25lc3RpbmdfbGV2ZWw7CisgICAgZmMuYTBfdmFyLnZhcl90eXBlID0gVkFSX05VTUJFUjsKKyAgICBmYy5hMF92YXIudmFyX3ZhbC52YXJfbnVtYmVyID0gYXJnY291bnQgLSBmcC0+YXJncy5nYV9sZW47CisgICAgZmMuYTBfdmFyLnZhcl9uYW1lID0gTlVMTDsKKyAgICBjdXJyZW50X2Z1bmNjYWwgPSAmZmM7CisgICAgZmMuZmlyc3RsaW5lLnZhcl90eXBlID0gVkFSX05VTUJFUjsKKyAgICBmYy5maXJzdGxpbmUudmFyX3ZhbC52YXJfbnVtYmVyID0gZmlyc3RsaW5lOworICAgIGZjLmZpcnN0bGluZS52YXJfbmFtZSA9IE5VTEw7CisgICAgZmMubGFzdGxpbmUudmFyX3R5cGUgPSBWQVJfTlVNQkVSOworICAgIGZjLmxhc3RsaW5lLnZhcl92YWwudmFyX251bWJlciA9IGxhc3RsaW5lOworICAgIGZjLmxhc3RsaW5lLnZhcl9uYW1lID0gTlVMTDsKKyAgICAvKiBDaGVjayBpZiB0aGlzIGZ1bmN0aW9uIGhhcyBhIGJyZWFrcG9pbnQuICovCisgICAgZmMuYnJlYWtwb2ludCA9IGRiZ19maW5kX2JyZWFrcG9pbnQoRkFMU0UsIGZwLT5uYW1lLCAobGluZW5yX1QpMCk7CisgICAgZmMuZGJnX3RpY2sgPSBkZWJ1Z190aWNrOworCisgICAgLyogRG9uJ3QgcmVkcmF3IHdoaWxlIGV4ZWN1dGluZyB0aGUgZnVuY3Rpb24uICovCisgICAgKytSZWRyYXdpbmdEaXNhYmxlZDsKKyAgICBzYXZlX3NvdXJjaW5nX25hbWUgPSBzb3VyY2luZ19uYW1lOworICAgIHNhdmVfc291cmNpbmdfbG51bSA9IHNvdXJjaW5nX2xudW07CisgICAgc291cmNpbmdfbG51bSA9IDE7CisgICAgc291cmNpbmdfbmFtZSA9IGFsbG9jKCh1bnNpZ25lZCkoKHNhdmVfc291cmNpbmdfbmFtZSA9PSBOVUxMID8gMAorCQk6IFNUUkxFTihzYXZlX3NvdXJjaW5nX25hbWUpKSArIFNUUkxFTihmcC0+bmFtZSkgKyAxMykpOworICAgIGlmIChzb3VyY2luZ19uYW1lICE9IE5VTEwpCisgICAgeworCWlmIChzYXZlX3NvdXJjaW5nX25hbWUgIT0gTlVMTAorCQkJICAmJiBTVFJOQ01QKHNhdmVfc291cmNpbmdfbmFtZSwgImZ1bmN0aW9uICIsIDkpID09IDApCisJICAgIHNwcmludGYoKGNoYXIgKilzb3VyY2luZ19uYW1lLCAiJXMuLiIsIHNhdmVfc291cmNpbmdfbmFtZSk7CisJZWxzZQorCSAgICBTVFJDUFkoc291cmNpbmdfbmFtZSwgImZ1bmN0aW9uICIpOworCWNhdF9mdW5jX25hbWUoc291cmNpbmdfbmFtZSArIFNUUkxFTihzb3VyY2luZ19uYW1lKSwgZnApOworCisJaWYgKHBfdmVyYm9zZSA+PSAxMikKKwl7CisJICAgICsrbm9fd2FpdF9yZXR1cm47CisJICAgIG1zZ19zY3JvbGwgPSBUUlVFOwkgICAgLyogYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlICovCisJICAgIG1zZ19zdHIoKGNoYXJfdSAqKV8oImNhbGxpbmcgJXMiKSwgc291cmNpbmdfbmFtZSk7CisJICAgIGlmIChwX3ZlcmJvc2UgPj0gMTQpCisJICAgIHsKKwkJaW50CWk7CisJCWNoYXJfdQlidWZbTVNHX0JVRl9MRU5dOworCisJCW1zZ19wdXRzKChjaGFyX3UgKikiKCIpOworCQlmb3IgKGkgPSAwOyBpIDwgYXJnY291bnQ7ICsraSkKKwkJeworCQkgICAgaWYgKGkgPiAwKQorCQkJbXNnX3B1dHMoKGNoYXJfdSAqKSIsICIpOworCQkgICAgaWYgKGFyZ3ZhcnNbaV0udmFyX3R5cGUgPT0gVkFSX05VTUJFUikKKwkJCW1zZ19vdXRudW0oKGxvbmcpYXJndmFyc1tpXS52YXJfdmFsLnZhcl9udW1iZXIpOworCQkgICAgZWxzZQorCQkgICAgeworCQkJdHJ1bmNfc3RyaW5nKGdldF92YXJfc3RyaW5nKCZhcmd2YXJzW2ldKSwKKwkJCQkJCQkgICAgYnVmLCBNU0dfQlVGX0xFTik7CisJCQltc2dfcHV0cygoY2hhcl91ICopIlwiIik7CisJCQltc2dfcHV0cyhidWYpOworCQkJbXNnX3B1dHMoKGNoYXJfdSAqKSJcIiIpOworCQkgICAgfQorCQl9CisJCW1zZ19wdXRzKChjaGFyX3UgKikiKSIpOworCSAgICB9CisJICAgIG1zZ19wdXRzKChjaGFyX3UgKikiXG4iKTsgICAvKiBkb24ndCBvdmVyd3JpdGUgdGhpcyBlaXRoZXIgKi8KKwkgICAgY21kbGluZV9yb3cgPSBtc2dfcm93OworCSAgICAtLW5vX3dhaXRfcmV0dXJuOworCX0KKyAgICB9CisgICAgc2F2ZV9jdXJyZW50X1NJRCA9IGN1cnJlbnRfU0lEOworICAgIGN1cnJlbnRfU0lEID0gZnAtPnNjcmlwdF9JRDsKKyAgICBzYXZlX2RpZF9lbXNnID0gZGlkX2Vtc2c7CisgICAgZGlkX2Vtc2cgPSBGQUxTRTsKKworICAgIC8qIGNhbGwgZG9fY21kbGluZSgpIHRvIGV4ZWN1dGUgdGhlIGxpbmVzICovCisgICAgZG9fY21kbGluZShOVUxMLCBnZXRfZnVuY19saW5lLCAodm9pZCAqKSZmYywKKwkJCQkgICAgIERPQ01EX05PV0FJVHxET0NNRF9WRVJCT1NFfERPQ01EX1JFUEVBVCk7CisKKyAgICAtLVJlZHJhd2luZ0Rpc2FibGVkOworCisgICAgLyogd2hlbiB0aGUgZnVuY3Rpb24gd2FzIGFib3J0ZWQgYmVjYXVzZSBvZiBhbiBlcnJvciwgcmV0dXJuIC0xICovCisgICAgaWYgKChkaWRfZW1zZyAmJiAoZnAtPmZsYWdzICYgRkNfQUJPUlQpKSB8fCByZXR2YXItPnZhcl90eXBlID09IFZBUl9VTktOT1dOKQorICAgIHsKKwljbGVhcl92YXIocmV0dmFyKTsKKwlyZXR2YXItPnZhcl90eXBlID0gVkFSX05VTUJFUjsKKwlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IC0xOworICAgIH0KKworICAgIC8qIHdoZW4gYmVpbmcgdmVyYm9zZSwgbWVudGlvbiB0aGUgcmV0dXJuIHZhbHVlICovCisgICAgaWYgKHBfdmVyYm9zZSA+PSAxMikKKyAgICB7CisJY2hhcl91CSpzbiwgKnZhbDsKKworCSsrbm9fd2FpdF9yZXR1cm47CisJbXNnX3Njcm9sbCA9IFRSVUU7CSAgICAvKiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUgKi8KKworCS8qIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGZpdHMgaW4gSU9idWZmLiAqLworCXNuID0gc291cmNpbmdfbmFtZTsKKwlpZiAoU1RSTEVOKHNvdXJjaW5nX25hbWUpID4gSU9TSVpFIC8gMiAtIDUwKQorCSAgICBzbiA9IHNvdXJjaW5nX25hbWUgKyBTVFJMRU4oc291cmNpbmdfbmFtZSkgLSAoSU9TSVpFIC8gMiAtIDUwKTsKKworCWlmIChhYm9ydGluZygpKQorCSAgICBzbXNnKChjaGFyX3UgKilfKCIlcyBhYm9ydGVkIiksIHNuKTsKKwllbHNlIGlmIChmYy5yZXR2YXItPnZhcl90eXBlID09IFZBUl9OVU1CRVIpCisJICAgIHNtc2coKGNoYXJfdSAqKV8oIiVzIHJldHVybmluZyAjJWxkIiksIHNuLAorCQkJCSAgICAgICAobG9uZylmYy5yZXR2YXItPnZhcl92YWwudmFyX251bWJlcik7CisJZWxzZSBpZiAoZmMucmV0dmFyLT52YXJfdHlwZSA9PSBWQVJfU1RSSU5HKQorCXsKKwkgICAgdmFsID0gZ2V0X3Zhcl9zdHJpbmcoZmMucmV0dmFyKTsKKwkgICAgaWYgKFNUUkxFTih2YWwpID4gSU9TSVpFIC8gMiAtIDUwKQorCQl2YWwgPSB2YWwgKyBTVFJMRU4odmFsKSAtIChJT1NJWkUgLyAyIC0gNTApOworCSAgICBzbXNnKChjaGFyX3UgKilfKCIlcyByZXR1cm5pbmcgXCIlc1wiIiksIHNuLCB2YWwpOworCX0KKwltc2dfcHV0cygoY2hhcl91ICopIlxuIik7ICAgLyogZG9uJ3Qgb3ZlcndyaXRlIHRoaXMgZWl0aGVyICovCisJY21kbGluZV9yb3cgPSBtc2dfcm93OworCS0tbm9fd2FpdF9yZXR1cm47CisgICAgfQorCisgICAgdmltX2ZyZWUoc291cmNpbmdfbmFtZSk7CisgICAgc291cmNpbmdfbmFtZSA9IHNhdmVfc291cmNpbmdfbmFtZTsKKyAgICBzb3VyY2luZ19sbnVtID0gc2F2ZV9zb3VyY2luZ19sbnVtOworICAgIGN1cnJlbnRfU0lEID0gc2F2ZV9jdXJyZW50X1NJRDsKKworICAgIGlmIChwX3ZlcmJvc2UgPj0gMTIgJiYgc291cmNpbmdfbmFtZSAhPSBOVUxMKQorICAgIHsKKwkrK25vX3dhaXRfcmV0dXJuOworCW1zZ19zY3JvbGwgPSBUUlVFOwkgICAgLyogYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlICovCisJbXNnX3N0cigoY2hhcl91ICopXygiY29udGludWluZyBpbiAlcyIpLCBzb3VyY2luZ19uYW1lKTsKKwltc2dfcHV0cygoY2hhcl91ICopIlxuIik7ICAgLyogZG9uJ3Qgb3ZlcndyaXRlIHRoaXMgZWl0aGVyICovCisJY21kbGluZV9yb3cgPSBtc2dfcm93OworCS0tbm9fd2FpdF9yZXR1cm47CisgICAgfQorCisgICAgZGlkX2Vtc2cgfD0gc2F2ZV9kaWRfZW1zZzsKKyAgICBjdXJyZW50X2Z1bmNjYWwgPSBzYXZlX2ZjcDsKKworICAgIHZhcl9jbGVhcigmZmMubF92YXJzKTsJCS8qIGZyZWUgYWxsIGxvY2FsIHZhcmlhYmxlcyAqLworICAgIC0tZGVwdGg7Cit9CisKKy8qCisgKiAiOnJldHVybiBbZXhwcl0iCisgKi8KKyAgICB2b2lkCitleF9yZXR1cm4oZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIHZhcgkJcmV0dmFyOworICAgIGludAkJcmV0dXJuaW5nID0gRkFMU0U7CisKKyAgICBpZiAoY3VycmVudF9mdW5jY2FsID09IE5VTEwpCisgICAgeworCUVNU0coXygiRTEzMzogOnJldHVybiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iKSk7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmIChlYXAtPnNraXApCisJKytlbXNnX3NraXA7CisKKyAgICBlYXAtPm5leHRjbWQgPSBOVUxMOworICAgIGlmICgoKmFyZyAhPSBOVUwgJiYgKmFyZyAhPSAnfCcgJiYgKmFyZyAhPSAnXG4nKQorCSAgICAmJiBldmFsMChhcmcsICZyZXR2YXIsICZlYXAtPm5leHRjbWQsICFlYXAtPnNraXApICE9IEZBSUwpCisgICAgeworCWlmICghZWFwLT5za2lwKQorCSAgICByZXR1cm5pbmcgPSBkb19yZXR1cm4oZWFwLCBGQUxTRSwgVFJVRSwgJnJldHZhcik7CisJZWxzZQorCSAgICBjbGVhcl92YXIoJnJldHZhcik7CisgICAgfQorICAgIC8qIEl0J3Mgc2FmZXIgdG8gcmV0dXJuIGFsc28gb24gZXJyb3IuICovCisgICAgZWxzZSBpZiAoIWVhcC0+c2tpcCkKKyAgICB7CisJLyoKKwkgKiBSZXR1cm4gdW5sZXNzIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24gaGFzIGJlZW4gY2FuY2VsbGVkIGR1ZSB0byBhbgorCSAqIGFib3J0aW5nIGVycm9yLCBhbiBpbnRlcnJ1cHQsIG9yIGFuIGV4Y2VwdGlvbi4KKwkgKi8KKwlpZiAoIWFib3J0aW5nKCkpCisJICAgIHJldHVybmluZyA9IGRvX3JldHVybihlYXAsIEZBTFNFLCBUUlVFLCBOVUxMKTsKKyAgICB9CisKKyAgICAvKiBXaGVuIHNraXBwaW5nIG9yIHRoZSByZXR1cm4gZ2V0cyBwZW5kaW5nLCBhZHZhbmNlIHRvIHRoZSBuZXh0IGNvbW1hbmQKKyAgICAgKiBpbiB0aGlzIGxpbmUgKCFyZXR1cm5pbmcpLiAgT3RoZXJ3aXNlLCBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuCisgICAgICogRm9sbG93aW5nIGxpbmVzIHdpbGwgYmUgaWdub3JlZCBieSBnZXRfZnVuY19saW5lKCkuICovCisgICAgaWYgKHJldHVybmluZykKKwllYXAtPm5leHRjbWQgPSBOVUxMOworICAgIGVsc2UgaWYgKGVhcC0+bmV4dGNtZCA9PSBOVUxMKQkgICAgLyogbm8gYXJndW1lbnQgKi8KKwllYXAtPm5leHRjbWQgPSBjaGVja19uZXh0Y21kKGFyZyk7CisKKyAgICBpZiAoZWFwLT5za2lwKQorCS0tZW1zZ19za2lwOworfQorCisvKgorICogUmV0dXJuIGZyb20gYSBmdW5jdGlvbi4gIFBvc3NpYmx5IG1ha2VzIHRoZSByZXR1cm4gcGVuZGluZy4gIEFsc28gY2FsbGVkCisgKiBmb3IgYSBwZW5kaW5nIHJldHVybiBhdCB0aGUgIjplbmR0cnkiIG9yIGFmdGVyIHJldHVybmluZyBmcm9tIGFuIGV4dHJhCisgKiBkb19jbWRsaW5lKCkuICAicmVhbmltYXRlIiBpcyB1c2VkIGluIHRoZSBsYXR0ZXIgY2FzZS4gICJpc19jbWQiIGlzIHNldAorICogd2hlbiBjYWxsZWQgZHVlIHRvIGEgIjpyZXR1cm4iIGNvbW1hbmQuICAidmFsdWUiIG1heSBwb2ludCB0byBhIHZhcmlhYmxlCisgKiB3aXRoIHRoZSByZXR1cm4gdmFsdWUuICBSZXR1cm5zIFRSVUUgd2hlbiB0aGUgcmV0dXJuIGNhbiBiZSBjYXJyaWVkIG91dCwKKyAqIEZBTFNFIHdoZW4gdGhlIHJldHVybiBnZXRzIHBlbmRpbmcuCisgKi8KKyAgICBpbnQKK2RvX3JldHVybihlYXAsIHJlYW5pbWF0ZSwgaXNfY21kLCB2YWx1ZSkKKyAgICBleGFyZ19UCSplYXA7CisgICAgaW50CQlyZWFuaW1hdGU7CisgICAgaW50CQlpc19jbWQ7CisgICAgdm9pZAkqdmFsdWU7Cit7CisgICAgaW50CQlpZHg7CisgICAgc3RydWN0IGNvbmRzdGFjayAqY3N0YWNrID0gZWFwLT5jc3RhY2s7CisKKyAgICBpZiAocmVhbmltYXRlKQorCS8qIFVuZG8gdGhlIHJldHVybi4gKi8KKwljdXJyZW50X2Z1bmNjYWwtPnJldHVybmVkID0gRkFMU0U7CisKKyAgICAvKgorICAgICAqIENsZWFudXAgKGFuZCBpbmFjdGl2YXRlKSBjb25kaXRpb25hbHMsIGJ1dCBzdG9wIHdoZW4gYSB0cnkgY29uZGl0aW9uYWwKKyAgICAgKiBub3QgaW4gaXRzIGZpbmFsbHkgY2xhdXNlICh3aGljaCB0aGVuIGlzIHRvIGJlIGV4ZWN1dGVkIG5leHQpIGlzIGZvdW5kLgorICAgICAqIEluIHRoaXMgY2FzZSwgbWFrZSB0aGUgIjpyZXR1cm4iIHBlbmRpbmcgZm9yIGV4ZWN1dGlvbiBhdCB0aGUgIjplbmR0cnkiLgorICAgICAqIE90aGVyd2lzZSwgcmV0dXJuIG5vcm1hbGx5LgorICAgICAqLworICAgIGlkeCA9IGNsZWFudXBfY29uZGl0aW9uYWxzKGVhcC0+Y3N0YWNrLCAwLCBUUlVFKTsKKyAgICBpZiAoaWR4ID49IDApCisgICAgeworCWNzdGFjay0+Y3NfcGVuZGluZ1tpZHhdID0gQ1NUUF9SRVRVUk47CisKKwlpZiAoIWlzX2NtZCAmJiAhcmVhbmltYXRlKQorCSAgICAvKiBBIHBlbmRpbmcgcmV0dXJuIGFnYWluIGdldHMgcGVuZGluZy4gICJ2YWx1ZSIgcG9pbnRzIHRvIGFuCisJICAgICAqIGFsbG9jYXRlZCB2YXJpYWJsZSB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgb3JpZ2luYWwgIjpyZXR1cm4iJ3MKKwkgICAgICogYXJndW1lbnQgaWYgcHJlc2VudCBvciBpcyBOVUxMIGVsc2UuICovCisJICAgIGNzdGFjay0+Y3NfcmV0dmFyW2lkeF0gPSB2YWx1ZTsKKwllbHNlCisJeworCSAgICAvKiBXaGVuIHVuZG9pbmcgYSByZXR1cm4gaW4gb3JkZXIgdG8gbWFrZSBpdCBwZW5kaW5nLCBnZXQgdGhlIHN0b3JlZAorCSAgICAgKiByZXR1cm4gdmFsdWUuICovCisJICAgIGlmIChyZWFuaW1hdGUpCisJCXZhbHVlID0gY3VycmVudF9mdW5jY2FsLT5yZXR2YXI7CisKKwkgICAgaWYgKHZhbHVlICE9IE5VTEwpCisJICAgIHsKKwkJLyogU3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBwZW5kaW5nIHJldHVybi4gKi8KKwkJaWYgKChjc3RhY2stPmNzX3JldHZhcltpZHhdID0gYWxsb2NfdmFyKCkpICE9IE5VTEwpCisJCSAgICAqKFZBUiljc3RhY2stPmNzX3JldHZhcltpZHhdID0gKihWQVIpdmFsdWU7CisJCWVsc2UKKwkJICAgIEVNU0coXyhlX291dG9mbWVtKSk7CisJICAgIH0KKwkgICAgZWxzZQorCQljc3RhY2stPmNzX3JldHZhcltpZHhdID0gTlVMTDsKKworCSAgICBpZiAocmVhbmltYXRlKQorCSAgICB7CisJCS8qIFRoZSBwZW5kaW5nIHJldHVybiB2YWx1ZSBjb3VsZCBiZSBvdmVyd3JpdHRlbiBieSBhICI6cmV0dXJuIgorCQkgKiB3aXRob3V0IGFyZ3VtZW50IGluIGEgZmluYWxseSBjbGF1c2U7IHJlc2V0IHRoZSBkZWZhdWx0CisJCSAqIHJldHVybiB2YWx1ZS4gKi8KKwkJY3VycmVudF9mdW5jY2FsLT5yZXR2YXItPnZhcl90eXBlID0gVkFSX05VTUJFUjsKKwkJY3VycmVudF9mdW5jY2FsLT5yZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7CisJICAgIH0KKwl9CisJcmVwb3J0X21ha2VfcGVuZGluZyhDU1RQX1JFVFVSTiwgdmFsdWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWN1cnJlbnRfZnVuY2NhbC0+cmV0dXJuZWQgPSBUUlVFOworCisJLyogSWYgdGhlIHJldHVybiBpcyBjYXJyaWVkIG91dCBub3csIHN0b3JlIHRoZSByZXR1cm4gdmFsdWUuICBGb3IKKwkgKiBhIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciByZWFuaW1hdGlvbiwgdGhlIHZhbHVlIGlzIGFscmVhZHkKKwkgKiB0aGVyZS4gKi8KKwlpZiAoIXJlYW5pbWF0ZSAmJiB2YWx1ZSAhPSBOVUxMKQorCXsKKwkgICAgY2xlYXJfdmFyKGN1cnJlbnRfZnVuY2NhbC0+cmV0dmFyKTsKKwkgICAgKmN1cnJlbnRfZnVuY2NhbC0+cmV0dmFyID0gKihWQVIpdmFsdWU7CisJICAgIGlmICghaXNfY21kKQorCQl2aW1fZnJlZSh2YWx1ZSk7CisJfQorICAgIH0KKworICAgIHJldHVybiBpZHggPCAwOworfQorCisvKgorICogRnJlZSB0aGUgdmFyaWFibGUgd2l0aCBhIHBlbmRpbmcgcmV0dXJuIHZhbHVlLgorICovCisgICAgdm9pZAorZGlzY2FyZF9wZW5kaW5nX3JldHVybihyZXR2YXIpCisgICAgdm9pZAkqcmV0dmFyOworeworICAgIC8qIFRoZSB2YXJpYWJsZSB3YXMgY29waWVkIGZyb20gb25lIHdpdGggYW4gdW5kZWZpbmVkIHZhcl9uYW1lLiAgU28gd2UgY2FuJ3QKKyAgICAgKiB1c2UgZnJlZV92YXIoKSB0byBjbGVhciBhbmQgZnJlZSBpdC4gKi8KKyAgICBjbGVhcl92YXIoKFZBUilyZXR2YXIpOworICAgIHZpbV9mcmVlKHJldHZhcik7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBhIHJldHVybiBjb21tYW5kIGZvciBwcm9kdWNpbmcgdGhlIHZhbHVlIG9mICJyZXR2YXIiLiAgVGhlIHJlc3VsdAorICogaXMgYW4gYWxsb2NhdGVkIHN0cmluZy4gIFVzZWQgYnkgcmVwb3J0X3BlbmRpbmcoKSBmb3IgdmVyYm9zZSBtZXNzYWdlcy4KKyAqLworICAgIGNoYXJfdSAqCitnZXRfcmV0dXJuX2NtZChyZXR2YXIpCisgICAgdm9pZAkqcmV0dmFyOworeworICAgIGNoYXJfdQkqcyA9IElPYnVmZjsKKworICAgIGlmIChyZXR2YXIgPT0gTlVMTCB8fCAoKFZBUilyZXR2YXIpLT52YXJfdHlwZSA9PSBWQVJfVU5LTk9XTikKKwlzID0gKGNoYXJfdSAqKSI6cmV0dXJuIjsKKyAgICBlbHNlIGlmICgoKFZBUilyZXR2YXIpLT52YXJfdHlwZSA9PSBWQVJfU1RSSU5HKQorCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsICI6cmV0dXJuIFwiJXNcIiIsCisJCSgoVkFSKXJldHZhciktPnZhcl92YWwudmFyX3N0cmluZyk7CisgICAgZWxzZQorCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsICI6cmV0dXJuICVsZCIsCisJCShsb25nKSgoKFZBUilyZXR2YXIpLT52YXJfdmFsLnZhcl9udW1iZXIpKTsKKyAgICByZXR1cm4gdmltX3N0cnNhdmUocyk7Cit9CisKKy8qCisgKiBHZXQgbmV4dCBmdW5jdGlvbiBsaW5lLgorICogQ2FsbGVkIGJ5IGRvX2NtZGxpbmUoKSB0byBnZXQgdGhlIG5leHQgbGluZS4KKyAqIFJldHVybnMgYWxsb2NhdGVkIHN0cmluZywgb3IgTlVMTCBmb3IgZW5kIG9mIGZ1bmN0aW9uLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIGNoYXJfdSAqCitnZXRfZnVuY19saW5lKGMsIGNvb2tpZSwgaW5kZW50KQorICAgIGludAkgICAgYzsJCSAgICAvKiBub3QgdXNlZCAqLworICAgIHZvaWQgICAgKmNvb2tpZTsKKyAgICBpbnQJICAgIGluZGVudDsJICAgIC8qIG5vdCB1c2VkICovCit7CisgICAgc3RydWN0IGZ1bmNjYWxsCSpmY3AgPSAoc3RydWN0IGZ1bmNjYWxsICopY29va2llOworICAgIGNoYXJfdQkJKnJldHZhbDsKKyAgICBnYXJyYXlfVAkJKmdhcDsgIC8qIGdyb3dhcnJheSB3aXRoIGZ1bmN0aW9uIGxpbmVzICovCisKKyAgICAvKiBJZiBicmVha3BvaW50cyBoYXZlIGJlZW4gYWRkZWQvZGVsZXRlZCBuZWVkIHRvIGNoZWNrIGZvciBpdC4gKi8KKyAgICBpZiAoZmNwLT5kYmdfdGljayAhPSBkZWJ1Z190aWNrKQorICAgIHsKKwlmY3AtPmJyZWFrcG9pbnQgPSBkYmdfZmluZF9icmVha3BvaW50KEZBTFNFLCBmY3AtPmZ1bmMtPm5hbWUsCisJCQkJCQkJICAgICAgIHNvdXJjaW5nX2xudW0pOworCWZjcC0+ZGJnX3RpY2sgPSBkZWJ1Z190aWNrOworICAgIH0KKworICAgIGdhcCA9ICZmY3AtPmZ1bmMtPmxpbmVzOworICAgIGlmICgoZmNwLT5mdW5jLT5mbGFncyAmIEZDX0FCT1JUKSAmJiBkaWRfZW1zZyAmJiAhYWJvcnRlZF9pbl90cnkoKSkKKwlyZXR2YWwgPSBOVUxMOworICAgIGVsc2UgaWYgKGZjcC0+cmV0dXJuZWQgfHwgZmNwLT5saW5lbnIgPj0gZ2FwLT5nYV9sZW4pCisJcmV0dmFsID0gTlVMTDsKKyAgICBlbHNlCisgICAgeworCXJldHZhbCA9IHZpbV9zdHJzYXZlKCgoY2hhcl91ICoqKShnYXAtPmdhX2RhdGEpKVtmY3AtPmxpbmVucisrXSk7CisJc291cmNpbmdfbG51bSA9IGZjcC0+bGluZW5yOworICAgIH0KKworICAgIC8qIERpZCB3ZSBlbmNvdW50ZXIgYSBicmVha3BvaW50PyAqLworICAgIGlmIChmY3AtPmJyZWFrcG9pbnQgIT0gMCAmJiBmY3AtPmJyZWFrcG9pbnQgPD0gc291cmNpbmdfbG51bSkKKyAgICB7CisJZGJnX2JyZWFrcG9pbnQoZmNwLT5mdW5jLT5uYW1lLCBzb3VyY2luZ19sbnVtKTsKKwkvKiBGaW5kIG5leHQgYnJlYWtwb2ludC4gKi8KKwlmY3AtPmJyZWFrcG9pbnQgPSBkYmdfZmluZF9icmVha3BvaW50KEZBTFNFLCBmY3AtPmZ1bmMtPm5hbWUsCisJCQkJCQkJICAgICAgIHNvdXJjaW5nX2xudW0pOworCWZjcC0+ZGJnX3RpY2sgPSBkZWJ1Z190aWNrOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBmdW5jdGlvbiBzaG91bGQgYmUgZW5kZWQsIGJlY2F1c2UgYQorICogcmV0dXJuIHdhcyBlbmNvdW50ZXJlZCBvciBhbiBlcnJvciBvY2N1cmVkLiAgVXNlZCBpbnNpZGUgYSAiOndoaWxlIi4KKyAqLworICAgIGludAorZnVuY19oYXNfZW5kZWQoY29va2llKQorICAgIHZvaWQgICAgKmNvb2tpZTsKK3sKKyAgICBzdHJ1Y3QgZnVuY2NhbGwgICpmY3AgPSAoc3RydWN0IGZ1bmNjYWxsICopY29va2llOworCisgICAgLyogSWdub3JlIHRoZSAiYWJvcnQiIGZsYWcgaWYgdGhlIGFib3J0aW9uIGJlaGF2aW9yIGhhcyBiZWVuIGNoYW5nZWQgZHVlIHRvCisgICAgICogYW4gZXJyb3IgaW5zaWRlIGEgdHJ5IGNvbmRpdGlvbmFsLiAqLworICAgIHJldHVybiAoKChmY3AtPmZ1bmMtPmZsYWdzICYgRkNfQUJPUlQpICYmIGRpZF9lbXNnICYmICFhYm9ydGVkX2luX3RyeSgpKQorCSAgICB8fCBmY3AtPnJldHVybmVkKTsKK30KKworLyoKKyAqIHJldHVybiBUUlVFIGlmIGNvb2tpZSBpbmRpY2F0ZXMgYSBmdW5jdGlvbiB3aGljaCAiYWJvcnQicyBvbiBlcnJvcnMuCisgKi8KKyAgICBpbnQKK2Z1bmNfaGFzX2Fib3J0KGNvb2tpZSkKKyAgICB2b2lkICAgICpjb29raWU7Cit7CisgICAgcmV0dXJuICgoc3RydWN0IGZ1bmNjYWxsICopY29va2llKS0+ZnVuYy0+ZmxhZ3MgJiBGQ19BQk9SVDsKK30KKworI2lmIGRlZmluZWQoRkVBVF9WSU1JTkZPKSB8fCBkZWZpbmVkKEZFQVRfU0VTU0lPTikKK3R5cGVkZWYgZW51bQoreworICAgIFZBUl9GTEFWT1VSX0RFRkFVTFQsCisgICAgVkFSX0ZMQVZPVVJfU0VTU0lPTiwKKyAgICBWQVJfRkxBVk9VUl9WSU1JTkZPCit9IHZhcl9mbGF2b3VyX1Q7CisKK3N0YXRpYyB2YXJfZmxhdm91cl9UIHZhcl9mbGF2b3VyIF9fQVJHUygoY2hhcl91ICp2YXJuYW1lKSk7CisKKyAgICBzdGF0aWMgdmFyX2ZsYXZvdXJfVAordmFyX2ZsYXZvdXIodmFybmFtZSkKKyAgICBjaGFyX3UgKnZhcm5hbWU7Cit7CisgICAgY2hhcl91ICpwID0gdmFybmFtZTsKKworICAgIGlmIChBU0NJSV9JU1VQUEVSKCpwKSkKKyAgICB7CisJd2hpbGUgKCooKytwKSkKKwkgICAgaWYgKEFTQ0lJX0lTTE9XRVIoKnApKQorCQlyZXR1cm4gVkFSX0ZMQVZPVVJfU0VTU0lPTjsKKwlyZXR1cm4gVkFSX0ZMQVZPVVJfVklNSU5GTzsKKyAgICB9CisgICAgZWxzZQorCXJldHVybiBWQVJfRkxBVk9VUl9ERUZBVUxUOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfVklNSU5GTykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXN0b3JlIGdsb2JhbCB2YXJzIHRoYXQgc3RhcnQgd2l0aCBhIGNhcGl0YWwgZnJvbSB0aGUgdmltaW5mbyBmaWxlCisgKi8KKyAgICBpbnQKK3JlYWRfdmltaW5mb192YXJsaXN0KHZpcnAsIHdyaXRpbmcpCisgICAgdmlyX1QJKnZpcnA7CisgICAgaW50CQl3cml0aW5nOworeworICAgIGNoYXJfdQkqdGFiOworICAgIGludAkJaXNfc3RyaW5nID0gRkFMU0U7CisgICAgVkFSCQl2YXJwID0gTlVMTDsKKyAgICBjaGFyX3UJKnZhbDsKKworICAgIGlmICghd3JpdGluZyAmJiAoZmluZF92aW1pbmZvX3BhcmFtZXRlcignIScpICE9IE5VTEwpKQorICAgIHsKKwl0YWIgPSB2aW1fc3RyY2hyKHZpcnAtPnZpcl9saW5lICsgMSwgJ1x0Jyk7CisJaWYgKHRhYiAhPSBOVUxMKQorCXsKKwkgICAgKnRhYisrID0gJ1wwJzsJLyogaXNvbGF0ZSB0aGUgdmFyaWFibGUgbmFtZSAqLworCSAgICBpZiAoKnRhYiA9PSAnUycpCS8qIHN0cmluZyB2YXIgKi8KKwkJaXNfc3RyaW5nID0gVFJVRTsKKworCSAgICB0YWIgPSB2aW1fc3RyY2hyKHRhYiwgJ1x0Jyk7CisJICAgIGlmICh0YWIgIT0gTlVMTCkKKwkgICAgeworCQkvKiBjcmVhdGUgYSBuYW1lbGVzcyB2YXJpYWJsZSB0byBob2xkIHRoZSB2YWx1ZSAqLworCQlpZiAoaXNfc3RyaW5nKQorCQl7CisJCSAgICB2YWwgPSB2aW1pbmZvX3JlYWRzdHJpbmcodmlycCwKKwkJCQkgICAgICAgKGludCkodGFiIC0gdmlycC0+dmlyX2xpbmUgKyAxKSwgVFJVRSk7CisJCSAgICBpZiAodmFsICE9IE5VTEwpCisJCQl2YXJwID0gYWxsb2Nfc3RyaW5nX3Zhcih2YWwpOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgdmFycCA9IGFsbG9jX3ZhcigpOworCQkgICAgaWYgKHZhcnAgIT0gTlVMTCkKKwkJICAgIHsKKwkJCXZhcnAtPnZhcl90eXBlID0gVkFSX05VTUJFUjsKKwkJCXZhcnAtPnZhcl92YWwudmFyX251bWJlciA9IGF0b2woKGNoYXIgKil0YWIgKyAxKTsKKwkJICAgIH0KKwkJfQorCQkvKiBhc3NpZ24gdGhlIHZhbHVlIHRvIHRoZSB2YXJpYWJsZSAqLworCQlpZiAodmFycCAhPSBOVUxMKQorCQl7CisJCSAgICBzZXRfdmFyKHZpcnAtPnZpcl9saW5lICsgMSwgdmFycCk7CisJCSAgICBmcmVlX3Zhcih2YXJwKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVybiB2aW1pbmZvX3JlYWRsaW5lKHZpcnApOworfQorCisvKgorICogV3JpdGUgZ2xvYmFsIHZhcnMgdGhhdCBzdGFydCB3aXRoIGEgY2FwaXRhbCB0byB0aGUgdmltaW5mbyBmaWxlCisgKi8KKyAgICB2b2lkCit3cml0ZV92aW1pbmZvX3Zhcmxpc3QoZnApCisgICAgRklMRSAgICAqZnA7Cit7CisgICAgZ2FycmF5X1QJKmdhcCA9ICZ2YXJpYWJsZXM7CQkvKiBnbG9iYWwgdmFyaWFibGUgKi8KKyAgICBWQVIJCXRoaXNfdmFyOworICAgIGludAkJaTsKKworICAgIGlmIChmaW5kX3ZpbWluZm9fcGFyYW1ldGVyKCchJykgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBmcHJpbnRmKGZwLCBfKCJcbiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIpKTsKKyAgICBmb3IgKGkgPSBnYXAtPmdhX2xlbjsgLS1pID49IDA7ICkKKyAgICB7CisJdGhpc192YXIgPSAmVkFSX0dBUF9FTlRSWShpLCBnYXApOworCWlmICh0aGlzX3Zhci0+dmFyX25hbWUgIT0gTlVMTAorCQkmJiB2YXJfZmxhdm91cih0aGlzX3Zhci0+dmFyX25hbWUpID09IFZBUl9GTEFWT1VSX1ZJTUlORk8pCisJeworCSAgICBmcHJpbnRmKGZwLCAiISVzXHQlc1x0IiwgdGhpc192YXItPnZhcl9uYW1lLAorCQkJICAodGhpc192YXItPnZhcl90eXBlID09IFZBUl9TVFJJTkcpID8gIlNUUiIgOiAiTlVNIik7CisJICAgIHZpbWluZm9fd3JpdGVzdHJpbmcoZnAsIGdldF92YXJfc3RyaW5nKHRoaXNfdmFyKSk7CisJfQorICAgIH0KK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1NFU1NJT04pIHx8IGRlZmluZWQoUFJPVE8pCisgICAgaW50CitzdG9yZV9zZXNzaW9uX2dsb2JhbHMoZmQpCisgICAgRklMRQkqZmQ7Cit7CisgICAgZ2FycmF5X1QJKmdhcCA9ICZ2YXJpYWJsZXM7CQkvKiBnbG9iYWwgdmFyaWFibGUgKi8KKyAgICBWQVIJCXRoaXNfdmFyOworICAgIGludAkJaTsKKyAgICBjaGFyX3UJKnAsICp0OworCisgICAgZm9yIChpID0gZ2FwLT5nYV9sZW47IC0taSA+PSAwOyApCisgICAgeworCXRoaXNfdmFyID0gJlZBUl9HQVBfRU5UUlkoaSwgZ2FwKTsKKwlpZiAodGhpc192YXItPnZhcl9uYW1lICE9IE5VTEwpCisJeworCSAgICBpZiAodmFyX2ZsYXZvdXIodGhpc192YXItPnZhcl9uYW1lKSA9PSBWQVJfRkxBVk9VUl9TRVNTSU9OKQorCSAgICB7CisJCS8qIEVzY2Fwc2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggYSBiYWNrc2xhc2guICBUdXJuIGEgTEYgYW5kCisJCSAqIENSIGludG8gXG4gYW5kIFxyLiAqLworCQlwID0gdmltX3N0cnNhdmVfZXNjYXBlZChnZXRfdmFyX3N0cmluZyh0aGlzX3ZhciksCisJCQkJCQkJKGNoYXJfdSAqKSJcXFwiXG5cciIpOworCQlpZiAocCA9PSBOVUxMKQkgICAgLyogb3V0IG9mIG1lbW9yeSAqLworCQkgICAgY29udGludWU7CisJCWZvciAodCA9IHA7ICp0ICE9IE5VTDsgKyt0KQorCQkgICAgaWYgKCp0ID09ICdcbicpCisJCQkqdCA9ICduJzsKKwkJICAgIGVsc2UgaWYgKCp0ID09ICdccicpCisJCQkqdCA9ICdyJzsKKwkJaWYgKChmcHJpbnRmKGZkLCAibGV0ICVzID0gJWMlcyVjIiwKKwkJCSAgICB0aGlzX3Zhci0+dmFyX25hbWUsCisJCQkgICAgKHRoaXNfdmFyLT52YXJfdHlwZSA9PSBWQVJfU1RSSU5HKSA/ICciJyA6ICcgJywKKwkJCSAgICBwLAorCQkJICAgICh0aGlzX3Zhci0+dmFyX3R5cGUgPT0gVkFSX1NUUklORykgPyAnIicgOiAnICcpIDwgMCkKKwkJCXx8IHB1dF9lb2woZmQpID09IEZBSUwpCisJCXsKKwkJICAgIHZpbV9mcmVlKHApOworCQkgICAgcmV0dXJuIEZBSUw7CisJCX0KKwkJdmltX2ZyZWUocCk7CisJICAgIH0KKworCX0KKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBGRUFUX0VWQUwgKi8KKworI2lmIGRlZmluZWQoRkVBVF9NT0RJRllfRk5BTUUpIHx8IGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorCisKKyNpZmRlZiBXSU4zMjY0CisvKgorICogRnVuY3Rpb25zIGZvciAiOjgiIGZpbGVuYW1lIG1vZGlmaWVyOiBnZXQgOC4zIHZlcnNpb24gb2YgYSBmaWxlbmFtZS4KKyAqLworc3RhdGljIGludCBnZXRfc2hvcnRfcGF0aG5hbWUgX19BUkdTKChjaGFyX3UgKipmbmFtZXAsIGNoYXJfdSAqKmJ1ZnAsIGludCAqZm5hbWVsZW4pKTsKK3N0YXRpYyBpbnQgc2hvcnRwYXRoX2Zvcl9pbnZhbGlkX2ZuYW1lIF9fQVJHUygoY2hhcl91ICoqZm5hbWUsIGNoYXJfdSAqKmJ1ZnAsIGludCAqZm5hbWVsZW4pKTsKK3N0YXRpYyBpbnQgc2hvcnRwYXRoX2Zvcl9wYXJ0aWFsIF9fQVJHUygoY2hhcl91ICoqZm5hbWVwLCBjaGFyX3UgKipidWZwLCBpbnQgKmZuYW1lbGVuKSk7CisKKy8qCisgKiBHZXQgdGhlIHNob3J0IHBhdGhuYW1lIG9mIGEgZmlsZS4KKyAqIFJldHVybnMgMSBvbiBzdWNjZXNzLiAqZm5hbWVsZW4gaXMgMCBmb3Igbm9uZXhpc3RhbnQgcGF0aC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2dldF9zaG9ydF9wYXRobmFtZShmbmFtZXAsIGJ1ZnAsIGZuYW1lbGVuKQorICAgIGNoYXJfdQkqKmZuYW1lcDsKKyAgICBjaGFyX3UJKipidWZwOworICAgIGludAkJKmZuYW1lbGVuOworeworICAgIGludAkJbCxsZW47CisgICAgY2hhcl91CSpuZXdidWY7CisKKyAgICBsZW4gPSAqZm5hbWVsZW47CisKKyAgICBsID0gR2V0U2hvcnRQYXRoTmFtZSgqZm5hbWVwLCAqZm5hbWVwLCBsZW4pOworICAgIGlmIChsID4gbGVuIC0gMSkKKyAgICB7CisJLyogSWYgdGhhdCBkb2Vzbid0IHdvcmsgKG5vdCBlbm91Z2ggc3BhY2UpLCB0aGVuIHNhdmUgdGhlIHN0cmluZworCSAqIGFuZCB0cnkgYWdhaW4gd2l0aCBhIG5ldyBidWZmZXIgYmlnIGVub3VnaAorCSAqLworCW5ld2J1ZiA9IHZpbV9zdHJuc2F2ZSgqZm5hbWVwLCBsKTsKKwlpZiAobmV3YnVmID09IE5VTEwpCisJICAgIHJldHVybiAwOworCisJdmltX2ZyZWUoKmJ1ZnApOworCSpmbmFtZXAgPSAqYnVmcCA9IG5ld2J1ZjsKKworCWwgPSBHZXRTaG9ydFBhdGhOYW1lKCpmbmFtZXAsKmZuYW1lcCxsKzEpOworCisJLyogUmVhbGx5IHNob3VsZCBhbHdheXMgc3VjY2VlZCwgYXMgdGhlIGJ1ZmZlciBpcyBiaWcgZW5vdWdoICovCisgICAgfQorCisgICAgKmZuYW1lbGVuID0gbDsKKyAgICByZXR1cm4gMTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHNob3J0IHBhdGggbmFtZS4gIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGl0IG5lZWRzLgorICogRG9lc24ndCBjb3B5IG92ZXIgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIHBhc3NlZCBpbi4KKyAqLworICAgIHN0YXRpYyBpbnQKK3Nob3J0cGF0aF9mb3JfaW52YWxpZF9mbmFtZShmbmFtZSwgYnVmcCwgZm5hbWVsZW4pCisgICAgY2hhcl91CSoqZm5hbWU7CisgICAgY2hhcl91CSoqYnVmcDsKKyAgICBpbnQJCSpmbmFtZWxlbjsKK3sKKyAgICBjaGFyX3UJKnMsICpwLCAqcGJ1ZjIsICpwYnVmMzsKKyAgICBjaGFyX3UJY2g7CisgICAgaW50CQlsLGxlbixsZW4yLHBsZW4sc2xlbjsKKworICAgIC8qIE1ha2UgYSBjb3B5ICovCisgICAgbGVuMiA9ICpmbmFtZWxlbjsKKyAgICBwYnVmMiA9IHZpbV9zdHJuc2F2ZSgqZm5hbWUsIGxlbjIpOworICAgIHBidWYzID0gTlVMTDsKKworICAgIHMgPSBwYnVmMiArIGxlbjIgLSAxOyAvKiBGaW5kIHRoZSBlbmQgKi8KKyAgICBzbGVuID0gMTsKKyAgICBwbGVuID0gbGVuMjsKKworICAgIGwgPSAwOworICAgIGlmICh2aW1faXNwYXRoc2VwKCpzKSkKKyAgICB7CisJLS1zOworCSsrc2xlbjsKKwktLXBsZW47CisgICAgfQorCisgICAgZG8KKyAgICB7CisJLyogR28gYmFjayBvbmUgcGF0aC1zZXBlcmF0b3IgKi8KKwl3aGlsZSAocyA+IHBidWYyICYmICF2aW1faXNwYXRoc2VwKCpzKSkKKwl7CisJICAgIC0tczsKKwkgICAgKytzbGVuOworCSAgICAtLXBsZW47CisJfQorCWlmIChzIDw9IHBidWYyKQorCSAgICBicmVhazsKKworCS8qIFJlbWViZXIgdGhlIGNoYXJhY3RlciB0aGF0IGlzIGFib3V0IHRvIGJlIGJsYXR0ZWQgKi8KKwljaCA9ICpzOworCSpzID0gMDsgLyogZ2V0X3Nob3J0X3BhdGhuYW1lIHJlcXVpcmVzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyAqLworCisJLyogVHJ5IGl0IGluIHNpdHUgKi8KKwlwID0gcGJ1ZjI7CisJaWYgKCFnZXRfc2hvcnRfcGF0aG5hbWUoJnAsICZwYnVmMywgJnBsZW4pKQorCXsKKwkgICAgdmltX2ZyZWUocGJ1ZjIpOworCSAgICByZXR1cm4gLTE7CisJfQorCSpzID0gY2g7ICAgIC8qIFByZXNlcnZlIHRoZSBzdHJpbmcgKi8KKyAgICB9IHdoaWxlIChwbGVuID09IDApOworCisgICAgaWYgKHBsZW4gPiAwKQorICAgIHsKKwkvKiBSZW1lYmVyIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBzdHJpbmcuICAqLworCSpmbmFtZWxlbiA9IGxlbiA9IHBsZW4gKyBzbGVuOworCXZpbV9mcmVlKCpidWZwKTsKKwlpZiAobGVuID4gbGVuMikKKwl7CisJICAgIC8qIElmIHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSBpbiB0aGUgY3VycmVudGx5IGFsbG9jYXRlZCBzdHJpbmcsCisJICAgICAqIHRoZW4gY29weSBpdCB0byBhIGJ1ZmZlciBiaWcgZW5vdWdoLgorCSAgICAgKi8KKwkgICAgKmZuYW1lPSAqYnVmcCA9IHZpbV9zdHJuc2F2ZShwLCBsZW4pOworCSAgICBpZiAoKmZuYW1lID09IE5VTEwpCisJCXJldHVybiAtMTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyogVHJhbnNmZXIgcGJ1ZjIgdG8gYmVpbmcgdGhlIG1haW4gYnVmZmVyICAoaXQncyBiaWcgZW5vdWdoKSAqLworCSAgICAqZm5hbWUgPSAqYnVmcCA9IHBidWYyOworCSAgICBpZiAocCAhPSBwYnVmMikKKwkJc3RybmNweSgqZm5hbWUsIHAsIHBsZW4pOworCSAgICBwYnVmMiA9IE5VTEw7CisJfQorCS8qIENvbmNhdCB0aGUgbmV4dCBiaXQgKi8KKwlzdHJuY3B5KCpmbmFtZSArIHBsZW4sIHMsIHNsZW4pOworCSgqZm5hbWUpW2xlbl0gPSAnXDAnOworICAgIH0KKyAgICB2aW1fZnJlZShwYnVmMyk7CisgICAgdmltX2ZyZWUocGJ1ZjIpOworICAgIHJldHVybiAwOworfQorCisvKgorICogR2V0IGEgcGF0aG5hbWUgZm9yIGEgcGFydGlhbCBwYXRoLgorICovCisgICAgc3RhdGljIGludAorc2hvcnRwYXRoX2Zvcl9wYXJ0aWFsKGZuYW1lcCwgYnVmcCwgZm5hbWVsZW4pCisgICAgY2hhcl91CSoqZm5hbWVwOworICAgIGNoYXJfdQkqKmJ1ZnA7CisgICAgaW50CQkqZm5hbWVsZW47Cit7CisgICAgaW50CQlzZXBjb3VudCwgbGVuLCB0ZmxlbjsKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSpwYnVmLCAqdGZuYW1lOworICAgIGludAkJaGFzVGlsZGU7CisKKyAgICAvKiBDb3VudCB1cCB0aGUgcGF0aCBzZXBlcmF0b3JzIGZyb20gdGhlIFJIUy4uIHNvIHdlIGtub3cgd2hpY2ggcGFydAorICAgICAqIG9mIHRoZSBwYXRoIHRvIHJldHVybi4KKyAgICAgKi8KKyAgICBzZXBjb3VudCA9IDA7CisgICAgZm9yIChwID0gKmZuYW1lcCArICpmbmFtZWxlbiAtIDE7IHAgPj0gKmZuYW1lcDsgLS1wKQorCWlmICh2aW1faXNwYXRoc2VwKCpwKSkKKwkgICAgKytzZXBjb3VudDsKKworICAgIC8qIE5lZWQgZnVsbCBwYXRoIGZpcnN0ICh1c2UgZXhwYW5kX2VudigpIHRvIHJlbW92ZSBhICJ+LyIpICovCisgICAgaGFzVGlsZGUgPSAoKipmbmFtZXAgPT0gJ34nKTsKKyAgICBpZiAoaGFzVGlsZGUpCisJcGJ1ZiA9IHRmbmFtZSA9IGV4cGFuZF9lbnZfc2F2ZSgqZm5hbWVwKTsKKyAgICBlbHNlCisJcGJ1ZiA9IHRmbmFtZSA9IEZ1bGxOYW1lX3NhdmUoKmZuYW1lcCwgRkFMU0UpOworCisgICAgbGVuID0gdGZsZW4gPSBTVFJMRU4odGZuYW1lKTsKKworICAgIGlmICghZ2V0X3Nob3J0X3BhdGhuYW1lKCZ0Zm5hbWUsICZwYnVmLCAmbGVuKSkKKwlyZXR1cm4gLTE7CisKKyAgICBpZiAobGVuID09IDApCisgICAgeworCS8qIERvbid0IGhhdmUgYSB2YWxpZCBmaWxlbmFtZSwgc28gc2hvcnRlbiB0aGUgcmVzdCBvZiB0aGUKKwkgKiBwYXRoIGlmIHdlIGNhbi4gVGhpcyBDQU4gZ2l2ZSB1cyBpbnZhbGlkIDguMyBmaWxlbmFtZXMsIGJ1dAorCSAqIHRoZXJlJ3Mgbm90IGEgbG90IG9mIHBvaW50IGluIGd1ZXNzaW5nIHdoYXQgaXQgbWlnaHQgYmUuCisJICovCisJbGVuID0gdGZsZW47CisJaWYgKHNob3J0cGF0aF9mb3JfaW52YWxpZF9mbmFtZSgmdGZuYW1lLCAmcGJ1ZiwgJmxlbikgPT0gLTEpCisJICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBDb3VudCB0aGUgcGF0aHMgYmFja3dhcmQgdG8gZmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXNpcmVkIHN0cmluZy4gKi8KKyAgICBmb3IgKHAgPSB0Zm5hbWUgKyBsZW4gLSAxOyBwID49IHRmbmFtZTsgLS1wKQorCWlmICh2aW1faXNwYXRoc2VwKCpwKSkKKwl7CisJICAgIGlmIChzZXBjb3VudCA9PSAwIHx8IChoYXNUaWxkZSAmJiBzZXBjb3VudCA9PSAxKSkKKwkJYnJlYWs7CisJICAgIGVsc2UKKwkJc2VwY291bnQgLS07CisJfQorICAgIGlmIChoYXNUaWxkZSkKKyAgICB7CisJLS1wOworCWlmIChwID49IHRmbmFtZSkKKwkgICAgKnAgPSAnfic7CisJZWxzZQorCSAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UKKwkrK3A7CisKKyAgICAvKiBDb3B5IGluIHRoZSBzdHJpbmcgLSBwIGluZGV4ZXMgaW50byB0Zm5hbWUgLSBhbGxvY2F0ZWQgYXQgcGJ1ZiAqLworICAgIHZpbV9mcmVlKCpidWZwKTsKKyAgICAqZm5hbWVsZW4gPSAoaW50KVNUUkxFTihwKTsKKyAgICAqYnVmcCA9IHBidWY7CisgICAgKmZuYW1lcCA9IHA7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBXSU4zMjY0ICovCisKKy8qCisgKiBBZGp1c3QgYSBmaWxlbmFtZSwgYWNjb3JkaW5nIHRvIGEgc3RyaW5nIG9mIG1vZGlmaWVycy4KKyAqICpmbmFtZXAgbXVzdCBiZSBOVUwgdGVybWluYXRlZCB3aGVuIGNhbGxlZC4gIFdoZW4gcmV0dXJuaW5nLCB0aGUgbGVuZ3RoIGlzCisgKiBkZXRlcm1pbmVkIGJ5ICpmbmFtZWxlbi4KKyAqIFJldHVybnMgdmFsaWQgZmxhZ3MuCisgKiBXaGVuIHRoZXJlIGlzIGFuIGVycm9yLCAqZm5hbWVwIGlzIHNldCB0byBOVUxMLgorICovCisgICAgaW50Cittb2RpZnlfZm5hbWUoc3JjLCB1c2VkbGVuLCBmbmFtZXAsIGJ1ZnAsIGZuYW1lbGVuKQorICAgIGNoYXJfdQkqc3JjOwkJLyogc3RyaW5nIHdpdGggbW9kaWZpZXJzICovCisgICAgaW50CQkqdXNlZGxlbjsJLyogY2hhcmFjdGVycyBhZnRlciBzcmMgdGhhdCBhcmUgdXNlZCAqLworICAgIGNoYXJfdQkqKmZuYW1lcDsJLyogZmlsZSBuYW1lIHNvIGZhciAqLworICAgIGNoYXJfdQkqKmJ1ZnA7CQkvKiBidWZmZXIgZm9yIGFsbG9jYXRlZCBmaWxlIG5hbWUgb3IgTlVMTCAqLworICAgIGludAkJKmZuYW1lbGVuOwkvKiBsZW5ndGggb2YgZm5hbWVwICovCit7CisgICAgaW50CQl2YWxpZCA9IDA7CisgICAgY2hhcl91CSp0YWlsOworICAgIGNoYXJfdQkqcywgKnAsICpwYnVmOworICAgIGNoYXJfdQlkaXJuYW1lW01BWFBBVEhMXTsKKyAgICBpbnQJCWM7CisgICAgaW50CQloYXNfZnVsbG5hbWUgPSAwOworI2lmZGVmIFdJTjMyNjQKKyAgICBpbnQJCWhhc19zaG9ydG5hbWUgPSAwOworI2VuZGlmCisKK3JlcGVhdDoKKyAgICAvKiAiOnAiIC0gZnVsbCBwYXRoL2ZpbGVfbmFtZSAqLworICAgIGlmIChzcmNbKnVzZWRsZW5dID09ICc6JyAmJiBzcmNbKnVzZWRsZW4gKyAxXSA9PSAncCcpCisgICAgeworCWhhc19mdWxsbmFtZSA9IDE7CisKKwl2YWxpZCB8PSBWQUxJRF9QQVRIOworCSp1c2VkbGVuICs9IDI7CisKKwkvKiBFeHBhbmQgIn4vcGF0aCIgZm9yIGFsbCBzeXN0ZW1zIGFuZCAifnVzZXIvcGF0aCIgZm9yIFVuaXggYW5kIFZNUyAqLworCWlmICgoKmZuYW1lcClbMF0gPT0gJ34nCisjaWYgIWRlZmluZWQoVU5JWCkgJiYgIShkZWZpbmVkKFZNUykgJiYgZGVmaW5lZChVU0VSX0hPTUUpKQorCQkmJiAoKCpmbmFtZXApWzFdID09ICcvJworIyBpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwkJICAgIHx8ICgqZm5hbWVwKVsxXSA9PSAnXFwnCisjIGVuZGlmCisJCSAgICB8fCAoKmZuYW1lcClbMV0gPT0gTlVMKQorCisjZW5kaWYKKwkgICApCisJeworCSAgICAqZm5hbWVwID0gZXhwYW5kX2Vudl9zYXZlKCpmbmFtZXApOworCSAgICB2aW1fZnJlZSgqYnVmcCk7CS8qIGZyZWUgYW55IGFsbG9jYXRlZCBmaWxlIG5hbWUgKi8KKwkgICAgKmJ1ZnAgPSAqZm5hbWVwOworCSAgICBpZiAoKmZuYW1lcCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJfQorCisJLyogV2hlbiAiLy4iIG9yICIvLi4iIGlzIHVzZWQ6IGZvcmNlIGV4cGFuc2lvbiB0byBnZXQgcmlkIG9mIGl0LiAqLworCWZvciAocCA9ICpmbmFtZXA7ICpwICE9IE5VTDsgKytwKQorCXsKKwkgICAgaWYgKHZpbV9pc3BhdGhzZXAoKnApCisJCSAgICAmJiBwWzFdID09ICcuJworCQkgICAgJiYgKHBbMl0gPT0gTlVMCisJCQl8fCB2aW1faXNwYXRoc2VwKHBbMl0pCisJCQl8fCAocFsyXSA9PSAnLicKKwkJCSAgICAmJiAocFszXSA9PSBOVUwgfHwgdmltX2lzcGF0aHNlcChwWzNdKSkpKSkKKwkJYnJlYWs7CisJfQorCisJLyogRnVsbE5hbWVfc2F2ZSgpIGlzIHNsb3csIGRvbid0IHVzZSBpdCB3aGVuIG5vdCBuZWVkZWQuICovCisJaWYgKCpwICE9IE5VTCB8fCAhdmltX2lzQWJzTmFtZSgqZm5hbWVwKSkKKwl7CisJICAgICpmbmFtZXAgPSBGdWxsTmFtZV9zYXZlKCpmbmFtZXAsICpwICE9IE5VTCk7CisJICAgIHZpbV9mcmVlKCpidWZwKTsJLyogZnJlZSBhbnkgYWxsb2NhdGVkIGZpbGUgbmFtZSAqLworCSAgICAqYnVmcCA9ICpmbmFtZXA7CisJICAgIGlmICgqZm5hbWVwID09IE5VTEwpCisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBBcHBlbmQgYSBwYXRoIHNlcGFyYXRvciB0byBhIGRpcmVjdG9yeS4gKi8KKwlpZiAobWNoX2lzZGlyKCpmbmFtZXApKQorCXsKKwkgICAgLyogTWFrZSByb29tIGZvciBvbmUgb3IgdHdvIGV4dHJhIGNoYXJhY3RlcnMuICovCisJICAgICpmbmFtZXAgPSB2aW1fc3RybnNhdmUoKmZuYW1lcCwgKGludClTVFJMRU4oKmZuYW1lcCkgKyAyKTsKKwkgICAgdmltX2ZyZWUoKmJ1ZnApOwkvKiBmcmVlIGFueSBhbGxvY2F0ZWQgZmlsZSBuYW1lICovCisJICAgICpidWZwID0gKmZuYW1lcDsKKwkgICAgaWYgKCpmbmFtZXAgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCSAgICBhZGRfcGF0aHNlcCgqZm5hbWVwKTsKKwl9CisgICAgfQorCisgICAgLyogIjouIiAtIHBhdGggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICovCisgICAgLyogIjp+IiAtIHBhdGggcmVsYXRpdmUgdG8gdGhlIGhvbWUgZGlyZWN0b3J5ICovCisgICAgLyogIjo4IiAtIHNob3J0bmFtZSBwYXRoIC0gcG9zdHBvbmVkIHRpbGwgYWZ0ZXIgKi8KKyAgICB3aGlsZSAoc3JjWyp1c2VkbGVuXSA9PSAnOicKKwkJICAmJiAoKGMgPSBzcmNbKnVzZWRsZW4gKyAxXSkgPT0gJy4nIHx8IGMgPT0gJ34nIHx8IGMgPT0gJzgnKSkKKyAgICB7CisJKnVzZWRsZW4gKz0gMjsKKwlpZiAoYyA9PSAnOCcpCisJeworI2lmZGVmIFdJTjMyNjQKKwkgICAgaGFzX3Nob3J0bmFtZSA9IDE7IC8qIFBvc3Rwb25lIHRoaXMuICovCisjZW5kaWYKKwkgICAgY29udGludWU7CisJfQorCXBidWYgPSBOVUxMOworCS8qIE5lZWQgZnVsbCBwYXRoIGZpcnN0ICh1c2UgZXhwYW5kX2VudigpIHRvIHJlbW92ZSBhICJ+LyIpICovCisJaWYgKCFoYXNfZnVsbG5hbWUpCisJeworCSAgICBpZiAoYyA9PSAnLicgJiYgKipmbmFtZXAgPT0gJ34nKQorCQlwID0gcGJ1ZiA9IGV4cGFuZF9lbnZfc2F2ZSgqZm5hbWVwKTsKKwkgICAgZWxzZQorCQlwID0gcGJ1ZiA9IEZ1bGxOYW1lX3NhdmUoKmZuYW1lcCwgRkFMU0UpOworCX0KKwllbHNlCisJICAgIHAgPSAqZm5hbWVwOworCisJaGFzX2Z1bGxuYW1lID0gMDsKKworCWlmIChwICE9IE5VTEwpCisJeworCSAgICBpZiAoYyA9PSAnLicpCisJICAgIHsKKwkJbWNoX2Rpcm5hbWUoZGlybmFtZSwgTUFYUEFUSEwpOworCQlzID0gc2hvcnRlbl9mbmFtZShwLCBkaXJuYW1lKTsKKwkJaWYgKHMgIT0gTlVMTCkKKwkJeworCQkgICAgKmZuYW1lcCA9IHM7CisJCSAgICBpZiAocGJ1ZiAhPSBOVUxMKQorCQkgICAgeworCQkJdmltX2ZyZWUoKmJ1ZnApOyAgIC8qIGZyZWUgYW55IGFsbG9jYXRlZCBmaWxlIG5hbWUgKi8KKwkJCSpidWZwID0gcGJ1ZjsKKwkJCXBidWYgPSBOVUxMOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWhvbWVfcmVwbGFjZShOVUxMLCBwLCBkaXJuYW1lLCBNQVhQQVRITCwgVFJVRSk7CisJCS8qIE9ubHkgcmVwbGFjZSBpdCB3aGVuIGl0IHN0YXJ0cyB3aXRoICd+JyAqLworCQlpZiAoKmRpcm5hbWUgPT0gJ34nKQorCQl7CisJCSAgICBzID0gdmltX3N0cnNhdmUoZGlybmFtZSk7CisJCSAgICBpZiAocyAhPSBOVUxMKQorCQkgICAgeworCQkJKmZuYW1lcCA9IHM7CisJCQl2aW1fZnJlZSgqYnVmcCk7CisJCQkqYnVmcCA9IHM7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICB2aW1fZnJlZShwYnVmKTsKKwl9CisgICAgfQorCisgICAgdGFpbCA9IGdldHRhaWwoKmZuYW1lcCk7CisgICAgKmZuYW1lbGVuID0gKGludClTVFJMRU4oKmZuYW1lcCk7CisKKyAgICAvKiAiOmgiIC0gaGVhZCwgcmVtb3ZlICIvZmlsZV9uYW1lIiwgY2FuIGJlIHJlcGVhdGVkICAqLworICAgIC8qIERvbid0IHJlbW92ZSB0aGUgZmlyc3QgIi8iIG9yICJjOlwiICovCisgICAgd2hpbGUgKHNyY1sqdXNlZGxlbl0gPT0gJzonICYmIHNyY1sqdXNlZGxlbiArIDFdID09ICdoJykKKyAgICB7CisJdmFsaWQgfD0gVkFMSURfSEVBRDsKKwkqdXNlZGxlbiArPSAyOworCXMgPSBnZXRfcGFzdF9oZWFkKCpmbmFtZXApOworCXdoaWxlICh0YWlsID4gcyAmJiB2aW1faXNwYXRoc2VwKHRhaWxbLTFdKSkKKwkgICAgLS10YWlsOworCSpmbmFtZWxlbiA9IChpbnQpKHRhaWwgLSAqZm5hbWVwKTsKKyNpZmRlZiBWTVMKKwlpZiAoKmZuYW1lbGVuID4gMCkKKwkgICAgKmZuYW1lbGVuICs9IDE7IC8qIHRoZSBwYXRoIHNlcGFyYXRvciBpcyBwYXJ0IG9mIHRoZSBwYXRoICovCisjZW5kaWYKKwl3aGlsZSAodGFpbCA+IHMgJiYgIXZpbV9pc3BhdGhzZXAodGFpbFstMV0pKQorCSAgICAtLXRhaWw7CisgICAgfQorCisgICAgLyogIjo4IiAtIHNob3J0bmFtZSAgKi8KKyAgICBpZiAoc3JjWyp1c2VkbGVuXSA9PSAnOicgJiYgc3JjWyp1c2VkbGVuICsgMV0gPT0gJzgnKQorICAgIHsKKwkqdXNlZGxlbiArPSAyOworI2lmZGVmIFdJTjMyNjQKKwloYXNfc2hvcnRuYW1lID0gMTsKKyNlbmRpZgorICAgIH0KKworI2lmZGVmIFdJTjMyNjQKKyAgICAvKiBDaGVjayBzaG9ydG5hbWUgYWZ0ZXIgd2UgaGF2ZSBkb25lICdoZWFkcycgYW5kIGJlZm9yZSB3ZSBkbyAndGFpbHMnCisgICAgICovCisgICAgaWYgKGhhc19zaG9ydG5hbWUpCisgICAgeworCXBidWYgPSBOVUxMOworCS8qIENvcHkgdGhlIHN0cmluZyBpZiBpdCBpcyBzaG9ydGVuZWQgYnkgOmggKi8KKwlpZiAoKmZuYW1lbGVuIDwgKGludClTVFJMRU4oKmZuYW1lcCkpCisJeworCSAgICBwID0gdmltX3N0cm5zYXZlKCpmbmFtZXAsICpmbmFtZWxlbik7CisJICAgIGlmIChwID09IDApCisJCXJldHVybiAtMTsKKwkgICAgdmltX2ZyZWUoKmJ1ZnApOworCSAgICAqYnVmcCA9ICpmbmFtZXAgPSBwOworCX0KKworCS8qIFNwbGl0IGludG8gdHdvIGltcGxlbWVudGF0aW9ucyAtIG1ha2VzIGl0IGVhc2llci4gIEZpcnN0IGlzIHdoZXJlCisJICogdGhlcmUgaXNuJ3QgYSBmdWxsIG5hbWUgYWxyZWFkeSwgc2Vjb25kIGlzIHdoZXJlIHRoZXJlIGlzLgorCSAqLworCWlmICghaGFzX2Z1bGxuYW1lICYmICF2aW1faXNBYnNOYW1lKCpmbmFtZXApKQorCXsKKwkgICAgaWYgKHNob3J0cGF0aF9mb3JfcGFydGlhbChmbmFtZXAsIGJ1ZnAsIGZuYW1lbGVuKSA9PSAtMSkKKwkJcmV0dXJuIC0xOworCX0KKwllbHNlCisJeworCSAgICBpbnQJCWw7CisKKwkgICAgLyogU2ltcGxlIGNhc2UsIGFscmVhZHkgaGF2ZSB0aGUgZnVsbC1uYW1lCisJICAgICAqIE5lYXJseSBhbHdheXMgc2hvcnRlciwgc28gdHJ5IGZpcnN0IHRpbWUuICovCisJICAgIGwgPSAqZm5hbWVsZW47CisJICAgIGlmICghZ2V0X3Nob3J0X3BhdGhuYW1lKGZuYW1lcCwgYnVmcCwgJmwpKQorCQlyZXR1cm4gLTE7CisKKwkgICAgaWYgKGwgPT0gMCkKKwkgICAgeworCQkvKiBDb3VsZG4ndCBmaW5kIHRoZSBmaWxlbmFtZS4uIHNlYXJjaCB0aGUgcGF0aHMuCisJCSAqLworCQlsID0gKmZuYW1lbGVuOworCQlpZiAoc2hvcnRwYXRoX2Zvcl9pbnZhbGlkX2ZuYW1lKGZuYW1lcCwgYnVmcCwgJmwgKSA9PSAtMSkKKwkJICAgIHJldHVybiAtMTsKKwkgICAgfQorCSAgICAqZm5hbWVsZW4gPSBsOworCX0KKyAgICB9CisjZW5kaWYgLyogV0lOMzI2NCAqLworCisgICAgLyogIjp0IiAtIHRhaWwsIGp1c3QgdGhlIGJhc2VuYW1lICovCisgICAgaWYgKHNyY1sqdXNlZGxlbl0gPT0gJzonICYmIHNyY1sqdXNlZGxlbiArIDFdID09ICd0JykKKyAgICB7CisJKnVzZWRsZW4gKz0gMjsKKwkqZm5hbWVsZW4gLT0gKGludCkodGFpbCAtICpmbmFtZXApOworCSpmbmFtZXAgPSB0YWlsOworICAgIH0KKworICAgIC8qICI6ZSIgLSBleHRlbnNpb24sIGNhbiBiZSByZXBlYXRlZCAqLworICAgIC8qICI6ciIgLSByb290LCB3aXRob3V0IGV4dGVuc2lvbiwgY2FuIGJlIHJlcGVhdGVkICovCisgICAgd2hpbGUgKHNyY1sqdXNlZGxlbl0gPT0gJzonCisJICAgICYmIChzcmNbKnVzZWRsZW4gKyAxXSA9PSAnZScgfHwgc3JjWyp1c2VkbGVuICsgMV0gPT0gJ3InKSkKKyAgICB7CisJLyogZmluZCBhICcuJyBpbiB0aGUgdGFpbDoKKwkgKiAtIGZvciBzZWNvbmQgOmU6IGJlZm9yZSB0aGUgY3VycmVudCBmbmFtZQorCSAqIC0gb3RoZXJ3aXNlOiBUaGUgbGFzdCAnLicKKwkgKi8KKwlpZiAoc3JjWyp1c2VkbGVuICsgMV0gPT0gJ2UnICYmICpmbmFtZXAgPiB0YWlsKQorCSAgICBzID0gKmZuYW1lcCAtIDI7CisJZWxzZQorCSAgICBzID0gKmZuYW1lcCArICpmbmFtZWxlbiAtIDE7CisJZm9yICggOyBzID4gdGFpbDsgLS1zKQorCSAgICBpZiAoc1swXSA9PSAnLicpCisJCWJyZWFrOworCWlmIChzcmNbKnVzZWRsZW4gKyAxXSA9PSAnZScpCQkvKiA6ZSAqLworCXsKKwkgICAgaWYgKHMgPiB0YWlsKQorCSAgICB7CisJCSpmbmFtZWxlbiArPSAoaW50KSgqZm5hbWVwIC0gKHMgKyAxKSk7CisJCSpmbmFtZXAgPSBzICsgMTsKKyNpZmRlZiBWTVMKKwkJLyogY3V0IHZlcnNpb24gZnJvbSB0aGUgZXh0ZW5zaW9uICovCisJCXMgPSAqZm5hbWVwICsgKmZuYW1lbGVuIC0gMTsKKwkJZm9yICggOyBzID4gKmZuYW1lcDsgLS1zKQorCQkgICAgaWYgKHNbMF0gPT0gJzsnKQorCQkJYnJlYWs7CisJCWlmIChzID4gKmZuYW1lcCkKKwkJICAgICpmbmFtZWxlbiA9IHMgLSAqZm5hbWVwOworI2VuZGlmCisJICAgIH0KKwkgICAgZWxzZSBpZiAoKmZuYW1lcCA8PSB0YWlsKQorCQkqZm5hbWVsZW4gPSAwOworCX0KKwllbHNlCQkJCS8qIDpyICovCisJeworCSAgICBpZiAocyA+IHRhaWwpCS8qIHJlbW92ZSBvbmUgZXh0ZW5zaW9uICovCisJCSpmbmFtZWxlbiA9IChpbnQpKHMgLSAqZm5hbWVwKTsKKwl9CisJKnVzZWRsZW4gKz0gMjsKKyAgICB9CisKKyAgICAvKiAiOnM/cGF0P2Zvbz8iIC0gc3Vic3RpdHV0ZSAqLworICAgIC8qICI6Z3M/cGF0P2Zvbz8iIC0gZ2xvYmFsIHN1YnN0aXR1dGUgKi8KKyAgICBpZiAoc3JjWyp1c2VkbGVuXSA9PSAnOicKKwkgICAgJiYgKHNyY1sqdXNlZGxlbiArIDFdID09ICdzJworCQl8fCAoc3JjWyp1c2VkbGVuICsgMV0gPT0gJ2cnICYmIHNyY1sqdXNlZGxlbiArIDJdID09ICdzJykpKQorICAgIHsKKwljaGFyX3UJICAgICpzdHI7CisJY2hhcl91CSAgICAqcGF0OworCWNoYXJfdQkgICAgKnN1YjsKKwlpbnQJICAgIHNlcDsKKwljaGFyX3UJICAgICpmbGFnczsKKwlpbnQJICAgIGRpZGl0ID0gRkFMU0U7CisKKwlmbGFncyA9IChjaGFyX3UgKikiIjsKKwlzID0gc3JjICsgKnVzZWRsZW4gKyAyOworCWlmIChzcmNbKnVzZWRsZW4gKyAxXSA9PSAnZycpCisJeworCSAgICBmbGFncyA9IChjaGFyX3UgKikiZyI7CisJICAgICsrczsKKwl9CisKKwlzZXAgPSAqcysrOworCWlmIChzZXApCisJeworCSAgICAvKiBmaW5kIGVuZCBvZiBwYXR0ZXJuICovCisJICAgIHAgPSB2aW1fc3RyY2hyKHMsIHNlcCk7CisJICAgIGlmIChwICE9IE5VTEwpCisJICAgIHsKKwkJcGF0ID0gdmltX3N0cm5zYXZlKHMsIChpbnQpKHAgLSBzKSk7CisJCWlmIChwYXQgIT0gTlVMTCkKKwkJeworCQkgICAgcyA9IHAgKyAxOworCQkgICAgLyogZmluZCBlbmQgb2Ygc3Vic3RpdHV0aW9uICovCisJCSAgICBwID0gdmltX3N0cmNocihzLCBzZXApOworCQkgICAgaWYgKHAgIT0gTlVMTCkKKwkJICAgIHsKKwkJCXN1YiA9IHZpbV9zdHJuc2F2ZShzLCAoaW50KShwIC0gcykpOworCQkJc3RyID0gdmltX3N0cm5zYXZlKCpmbmFtZXAsICpmbmFtZWxlbik7CisJCQlpZiAoc3ViICE9IE5VTEwgJiYgc3RyICE9IE5VTEwpCisJCQl7CisJCQkgICAgKnVzZWRsZW4gPSAoaW50KShwICsgMSAtIHNyYyk7CisJCQkgICAgcyA9IGRvX3N0cmluZ19zdWIoc3RyLCBwYXQsIHN1YiwgZmxhZ3MpOworCQkJICAgIGlmIChzICE9IE5VTEwpCisJCQkgICAgeworCQkJCSpmbmFtZXAgPSBzOworCQkJCSpmbmFtZWxlbiA9IChpbnQpU1RSTEVOKHMpOworCQkJCXZpbV9mcmVlKCpidWZwKTsKKwkJCQkqYnVmcCA9IHM7CisJCQkJZGlkaXQgPSBUUlVFOworCQkJICAgIH0KKwkJCX0KKwkJCXZpbV9mcmVlKHN1Yik7CisJCQl2aW1fZnJlZShzdHIpOworCQkgICAgfQorCQkgICAgdmltX2ZyZWUocGF0KTsKKwkJfQorCSAgICB9CisJICAgIC8qIGFmdGVyIHVzaW5nICI6cyIsIHJlcGVhdCBhbGwgdGhlIG1vZGlmaWVycyAqLworCSAgICBpZiAoZGlkaXQpCisJCWdvdG8gcmVwZWF0OworCX0KKyAgICB9CisKKyAgICByZXR1cm4gdmFsaWQ7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgc3Vic3RpdHV0aW9uIG9uICJzdHIiIHdpdGggcGF0dGVybiAicGF0IiBhbmQgc3Vic3RpdHV0ZSAic3ViIi4KKyAqICJmbGFncyIgY2FuIGJlICJnIiB0byBkbyBhIGdsb2JhbCBzdWJzdGl0dXRlLgorICogUmV0dXJucyBhbiBhbGxvY2F0ZWQgc3RyaW5nLCBOVUxMIGZvciBlcnJvci4KKyAqLworICAgIGNoYXJfdSAqCitkb19zdHJpbmdfc3ViKHN0ciwgcGF0LCBzdWIsIGZsYWdzKQorICAgIGNoYXJfdQkqc3RyOworICAgIGNoYXJfdQkqcGF0OworICAgIGNoYXJfdQkqc3ViOworICAgIGNoYXJfdQkqZmxhZ3M7Cit7CisgICAgaW50CQlzdWJsZW47CisgICAgcmVnbWF0Y2hfVAlyZWdtYXRjaDsKKyAgICBpbnQJCWk7CisgICAgaW50CQlkb19hbGw7CisgICAgY2hhcl91CSp0YWlsOworICAgIGdhcnJheV9UCWdhOworICAgIGNoYXJfdQkqcmV0OworICAgIGNoYXJfdQkqc2F2ZV9jcG87CisKKyAgICAvKiBNYWtlICdjcG9wdGlvbnMnIGVtcHR5LCBzbyB0aGF0IHRoZSAnbCcgZmxhZyBkb2Vzbid0IHdvcmsgaGVyZSAqLworICAgIHNhdmVfY3BvID0gcF9jcG87CisgICAgcF9jcG8gPSAoY2hhcl91ICopIiI7CisKKyAgICBnYV9pbml0MigmZ2EsIDEsIDIwMCk7CisKKyAgICBkb19hbGwgPSAoZmxhZ3NbMF0gPT0gJ2cnKTsKKworICAgIHJlZ21hdGNoLnJtX2ljID0gcF9pYzsKKyAgICByZWdtYXRjaC5yZWdwcm9nID0gdmltX3JlZ2NvbXAocGF0LCBSRV9NQUdJQyArIFJFX1NUUklORyk7CisgICAgaWYgKHJlZ21hdGNoLnJlZ3Byb2cgIT0gTlVMTCkKKyAgICB7CisJdGFpbCA9IHN0cjsKKwl3aGlsZSAodmltX3JlZ2V4ZWNfbmwoJnJlZ21hdGNoLCBzdHIsIChjb2xucl9UKSh0YWlsIC0gc3RyKSkpCisJeworCSAgICAvKgorCSAgICAgKiBHZXQgc29tZSBzcGFjZSBmb3IgYSB0ZW1wb3JhcnkgYnVmZmVyIHRvIGRvIHRoZSBzdWJzdGl0dXRpb24KKwkgICAgICogaW50by4gIEl0IHdpbGwgY29udGFpbjoKKwkgICAgICogLSBUaGUgdGV4dCB1cCB0byB3aGVyZSB0aGUgbWF0Y2ggaXMuCisJICAgICAqIC0gVGhlIHN1YnN0aXR1dGVkIHRleHQuCisJICAgICAqIC0gVGhlIHRleHQgYWZ0ZXIgdGhlIG1hdGNoLgorCSAgICAgKi8KKwkgICAgc3VibGVuID0gdmltX3JlZ3N1YigmcmVnbWF0Y2gsIHN1YiwgdGFpbCwgRkFMU0UsIFRSVUUsIEZBTFNFKTsKKwkgICAgaWYgKGdhX2dyb3coJmdhLCAoaW50KShTVFJMRU4odGFpbCkgKyBzdWJsZW4gLQorCQkJICAgIChyZWdtYXRjaC5lbmRwWzBdIC0gcmVnbWF0Y2guc3RhcnRwWzBdKSkpID09IEZBSUwpCisJICAgIHsKKwkJZ2FfY2xlYXIoJmdhKTsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICAvKiBjb3B5IHRoZSB0ZXh0IHVwIHRvIHdoZXJlIHRoZSBtYXRjaCBpcyAqLworCSAgICBpID0gKGludCkocmVnbWF0Y2guc3RhcnRwWzBdIC0gdGFpbCk7CisJICAgIG1jaF9tZW1tb3ZlKChjaGFyX3UgKilnYS5nYV9kYXRhICsgZ2EuZ2FfbGVuLCB0YWlsLCAoc2l6ZV90KWkpOworCSAgICAvKiBhZGQgdGhlIHN1YnN0aXR1dGVkIHRleHQgKi8KKwkgICAgKHZvaWQpdmltX3JlZ3N1YigmcmVnbWF0Y2gsIHN1YiwgKGNoYXJfdSAqKWdhLmdhX2RhdGEKKwkJCQkJICArIGdhLmdhX2xlbiArIGksIFRSVUUsIFRSVUUsIEZBTFNFKTsKKwkgICAgZ2EuZ2FfbGVuICs9IGkgKyBzdWJsZW4gLSAxOworCSAgICBnYS5nYV9yb29tIC09IGkgKyBzdWJsZW4gLSAxOworCSAgICAvKiBhdm9pZCBnZXR0aW5nIHN0dWNrIG9uIGEgbWF0Y2ggd2l0aCBhbiBlbXB0eSBzdHJpbmcgKi8KKwkgICAgaWYgKHRhaWwgPT0gcmVnbWF0Y2guZW5kcFswXSkKKwkgICAgeworCQlpZiAoKnRhaWwgPT0gTlVMKQorCQkgICAgYnJlYWs7CisJCSooKGNoYXJfdSAqKWdhLmdhX2RhdGEgKyBnYS5nYV9sZW4pID0gKnRhaWwrKzsKKwkJKytnYS5nYV9sZW47CisJCS0tZ2EuZ2Ffcm9vbTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJdGFpbCA9IHJlZ21hdGNoLmVuZHBbMF07CisJCWlmICgqdGFpbCA9PSBOVUwpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBpZiAoIWRvX2FsbCkKKwkJYnJlYWs7CisJfQorCisJaWYgKGdhLmdhX2RhdGEgIT0gTlVMTCkKKwkgICAgU1RSQ1BZKChjaGFyICopZ2EuZ2FfZGF0YSArIGdhLmdhX2xlbiwgdGFpbCk7CisKKwl2aW1fZnJlZShyZWdtYXRjaC5yZWdwcm9nKTsKKyAgICB9CisKKyAgICByZXQgPSB2aW1fc3Ryc2F2ZShnYS5nYV9kYXRhID09IE5VTEwgPyBzdHIgOiAoY2hhcl91ICopZ2EuZ2FfZGF0YSk7CisgICAgZ2FfY2xlYXIoJmdhKTsKKyAgICBwX2NwbyA9IHNhdmVfY3BvOworCisgICAgcmV0dXJuIHJldDsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoRkVBVF9NT0RJRllfRk5BTUUpIHx8IGRlZmluZWQoRkVBVF9FVkFMKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2V4X2NtZHMuYyBiL3NyYy9leF9jbWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwMzZjYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9leF9jbWRzLmMKQEAgLTAsMCArMSw2MTk4IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBleF9jbWRzLmM6IHNvbWUgZnVuY3Rpb25zIGZvciBjb21tYW5kIGxpbmUgY29tbWFuZHMKKyAqLworCisjaW5jbHVkZSAidmltLmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgorCisjaWZkZWYgRkVBVF9FWF9FWFRSQQorc3RhdGljIGludCBsaW5lbGVuIF9fQVJHUygoaW50ICpoYXNfdGFiKSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIGRvX2ZpbHRlciBfX0FSR1MoKGxpbmVucl9UIGxpbmUxLCBsaW5lbnJfVCBsaW5lMiwgZXhhcmdfVCAqZWFwLCBjaGFyX3UgKmNtZCwgaW50IGRvX2luLCBpbnQgZG9fb3V0KSk7CisjaWZkZWYgRkVBVF9WSU1JTkZPCitzdGF0aWMgY2hhcl91ICp2aW1pbmZvX2ZpbGVuYW1lIF9fQVJHUygoY2hhcl91CSopKTsKK3N0YXRpYyB2b2lkIGRvX3ZpbWluZm8gX19BUkdTKChGSUxFICpmcF9pbiwgRklMRSAqZnBfb3V0LCBpbnQgd2FudF9pbmZvLCBpbnQgd2FudF9tYXJrcywgaW50IGZvcmNlX3JlYWQpKTsKK3N0YXRpYyBpbnQgdmltaW5mb19lbmNvZGluZyBfX0FSR1MoKHZpcl9UICp2aXJwKSk7CitzdGF0aWMgaW50IHJlYWRfdmltaW5mb191cF90b19tYXJrcyBfX0FSR1MoKHZpcl9UICp2aXJwLCBpbnQgZm9yY2VpdCwgaW50IHdyaXRpbmcpKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IGNoZWNrX292ZXJ3cml0ZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCwgYnVmX1QgKmJ1ZiwgY2hhcl91ICpmbmFtZSwgY2hhcl91ICpmZm5hbWUsIGludCBvdGhlcikpOworc3RhdGljIGludCBjaGVja19yZWFkb25seSBfX0FSR1MoKGludCAqZm9yY2VpdCwgYnVmX1QgKmJ1ZikpOworI2lmZGVmIEZFQVRfQVVUT0NNRAorc3RhdGljIHZvaWQgZGVsYnVmX21zZyBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworI2VuZGlmCitzdGF0aWMgaW50IGRvX3N1Yl9tc2cgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50CisjaWZkZWYgX19CT1JMQU5EQ19fCisgICAgX1JUTEVOVFJZRgorI2VuZGlmCisJaGVscF9jb21wYXJlIF9fQVJHUygoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyKSk7CisKKy8qCisgKiAiOmFzY2lpIiBhbmQgImdhIi4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorZG9fYXNjaWkoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWM7CisgICAgY2hhcglidWYxWzIwXTsKKyAgICBjaGFyCWJ1ZjJbMjBdOworICAgIGNoYXJfdQlidWYzWzddOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCWMxID0gMDsKKyAgICBpbnQJCWMyID0gMDsKKyAgICBpbnQJCWxlbjsKKworICAgIGlmIChlbmNfdXRmOCkKKwljID0gdXRmY19wdHIyY2hhcihtbF9nZXRfY3Vyc29yKCksICZjMSwgJmMyKTsKKyAgICBlbHNlCisjZW5kaWYKKwljID0gZ2NoYXJfY3Vyc29yKCk7CisgICAgaWYgKGMgPT0gTlVMKQorICAgIHsKKwlNU0coIk5VTCIpOworCXJldHVybjsKKyAgICB9CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgSU9idWZmWzBdID0gTlVMOworICAgIGlmICghaGFzX21ieXRlIHx8IChlbmNfZGJjcyAhPSAwICYmIGMgPCAweDEwMCkgfHwgYyA8IDB4ODApCisjZW5kaWYKKyAgICB7CisJaWYgKGMgPT0gTkwpCSAgICAvKiBOVUwgaXMgc3RvcmVkIGFzIE5MICovCisJICAgIGMgPSBOVUw7CisJaWYgKHZpbV9pc3ByaW50Y19zdHJpY3QoYykgJiYgKGMgPCAnICcKKyNpZm5kZWYgRUJDRElDCisJCSAgICB8fCBjID4gJ34nCisjZW5kaWYKKwkJCSAgICAgICApKQorCXsKKwkgICAgdHJhbnNjaGFyX25vbnByaW50KGJ1ZjMsIGMpOworCSAgICBzcHJpbnRmKGJ1ZjEsICIgIDwlcz4iLCAoY2hhciAqKWJ1ZjMpOworCX0KKwllbHNlCisJICAgIGJ1ZjFbMF0gPSBOVUw7CisjaWZuZGVmIEVCQ0RJQworCWlmIChjID49IDB4ODApCisJICAgIHNwcmludGYoYnVmMiwgIiAgPE0tJXM+IiwgdHJhbnNjaGFyKGMgJiAweDdmKSk7CisJZWxzZQorI2VuZGlmCisJICAgIGJ1ZjJbMF0gPSBOVUw7CisJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIiksCisJCXRyYW5zY2hhcihjKSwgYnVmMSwgYnVmMiwgYywgYywgYyk7CisjaWZkZWYgRkVBVF9NQllURQorCWMgPSBjMTsKKwljMSA9IGMyOworCWMyID0gMDsKKyNlbmRpZgorICAgIH0KKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKiBSZXBlYXQgZm9yIGNvbWJpbmluZyBjaGFyYWN0ZXJzLiAqLworICAgIHdoaWxlIChoYXNfbWJ5dGUgJiYgKGMgPj0gMHgxMDAgfHwgKGVuY191dGY4ICYmIGMgPj0gMHg4MCkpKQorICAgIHsKKwlsZW4gPSAoaW50KVNUUkxFTihJT2J1ZmYpOworCS8qIFRoaXMgYXNzdW1lcyBldmVyeSBtdWx0aS1ieXRlIGNoYXIgaXMgcHJpbnRhYmxlLi4uICovCisJaWYgKGxlbiA+IDApCisJICAgIElPYnVmZltsZW4rK10gPSAnICc7CisJSU9idWZmW2xlbisrXSA9ICc8JzsKKwlpZiAodXRmX2lzY29tcG9zaW5nKGMpCisjaWZkZWYgVVNFX0dVSQorCQkmJiAhZ3VpLmluX3VzZQorI2VuZGlmCisJCSkKKwkgICAgSU9idWZmW2xlbisrXSA9ICcgJzsgLyogZHJhdyBjb21wb3NpbmcgY2hhciBvbiB0b3Agb2YgYSBzcGFjZSAqLworCUlPYnVmZltsZW4gKyAoKm1iX2NoYXIyYnl0ZXMpKGMsIElPYnVmZiArIGxlbildID0gTlVMOworCXNwcmludGYoKGNoYXIgKilJT2J1ZmYgKyBTVFJMRU4oSU9idWZmKSwKKwkJCWMgPCAweDEwMDAwID8gXygiPiAlZCwgSGV4ICUwNHgsIE9jdGFsICVvIikKKwkJCQkgICAgOiBfKCI+ICVkLCBIZXggJTA4eCwgT2N0YWwgJW8iKSwgYywgYywgYyk7CisJYyA9IGMxOworCWMxID0gYzI7CisJYzIgPSAwOworICAgIH0KKyNlbmRpZgorCisgICAgbXNnKElPYnVmZik7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVhfRVhUUkEpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogIjpsZWZ0IiwgIjpjZW50ZXIiIGFuZCAiOnJpZ2h0IjogYWxpZ24gdGV4dC4KKyAqLworICAgIHZvaWQKK2V4X2FsaWduKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgcG9zX1QJc2F2ZV9jdXJwb3M7CisgICAgaW50CQlsZW47CisgICAgaW50CQlpbmRlbnQgPSAwOworICAgIGludAkJbmV3X2luZGVudDsKKyAgICBpbnQJCWhhc190YWI7CisgICAgaW50CQl3aWR0aDsKKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgaWYgKGN1cndpbi0+d19wX3JsKQorICAgIHsKKwkvKiBzd2l0Y2ggbGVmdCBhbmQgcmlnaHQgYWxpZ25pbmcgKi8KKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX3JpZ2h0KQorCSAgICBlYXAtPmNtZGlkeCA9IENNRF9sZWZ0OworCWVsc2UgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9sZWZ0KQorCSAgICBlYXAtPmNtZGlkeCA9IENNRF9yaWdodDsKKyAgICB9CisjZW5kaWYKKworICAgIHdpZHRoID0gYXRvaSgoY2hhciAqKWVhcC0+YXJnKTsKKyAgICBzYXZlX2N1cnBvcyA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9sZWZ0KSAgICAvKiB3aWR0aCBpcyB1c2VkIGZvciBuZXcgaW5kZW50ICovCisgICAgeworCWlmICh3aWR0aCA+PSAwKQorCSAgICBpbmRlbnQgPSB3aWR0aDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIGlmICd0ZXh0d2lkdGgnIHNldCwgdXNlIGl0CisJICogZWxzZSBpZiAnd3JhcG1hcmdpbicgc2V0LCB1c2UgaXQKKwkgKiBpZiBpbnZhbGlkIHZhbHVlLCB1c2UgODAKKwkgKi8KKwlpZiAod2lkdGggPD0gMCkKKwkgICAgd2lkdGggPSBjdXJidWYtPmJfcF90dzsKKwlpZiAod2lkdGggPT0gMCAmJiBjdXJidWYtPmJfcF93bSA+IDApCisJICAgIHdpZHRoID0gV19XSURUSChjdXJ3aW4pIC0gY3VyYnVmLT5iX3Bfd207CisJaWYgKHdpZHRoIDw9IDApCisJICAgIHdpZHRoID0gODA7CisgICAgfQorCisgICAgaWYgKHVfc2F2ZSgobGluZW5yX1QpKGVhcC0+bGluZTEgLSAxKSwgKGxpbmVucl9UKShlYXAtPmxpbmUyICsgMSkpID09IEZBSUwpCisJcmV0dXJuOworCisgICAgZm9yIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBlYXAtPmxpbmUxOworCQkgY3Vyd2luLT53X2N1cnNvci5sbnVtIDw9IGVhcC0+bGluZTI7ICsrY3Vyd2luLT53X2N1cnNvci5sbnVtKQorICAgIHsKKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2xlZnQpCQkvKiBsZWZ0IGFsaWduICovCisJICAgIG5ld19pbmRlbnQgPSBpbmRlbnQ7CisJZWxzZQorCXsKKwkgICAgbGVuID0gbGluZWxlbihlYXAtPmNtZGlkeCA9PSBDTURfcmlnaHQgPyAmaGFzX3RhYgorCQkJCQkJICAgOiBOVUxMKSAtIGdldF9pbmRlbnQoKTsKKworCSAgICBpZiAobGVuIDw9IDApCQkJLyogc2tpcCBibGFuayBsaW5lcyAqLworCQljb250aW51ZTsKKworCSAgICBpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2NlbnRlcikKKwkJbmV3X2luZGVudCA9ICh3aWR0aCAtIGxlbikgLyAyOworCSAgICBlbHNlCisJICAgIHsKKwkJbmV3X2luZGVudCA9IHdpZHRoIC0gbGVuOwkvKiByaWdodCBhbGlnbiAqLworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGF0IGVtYmVkZGVkIFRBQnMgZG9uJ3QgbWFrZSB0aGUgdGV4dCBnbyB0b28gZmFyCisJCSAqIHRvIHRoZSByaWdodC4KKwkJICovCisJCWlmIChoYXNfdGFiKQorCQkgICAgd2hpbGUgKG5ld19pbmRlbnQgPiAwKQorCQkgICAgeworCQkJKHZvaWQpc2V0X2luZGVudChuZXdfaW5kZW50LCAwKTsKKwkJCWlmIChsaW5lbGVuKE5VTEwpIDw9IHdpZHRoKQorCQkJeworCQkJICAgIC8qCisJCQkgICAgICogTm93IHRyeSB0byBtb3ZlIHRoZSBsaW5lIGFzIG11Y2ggYXMgcG9zc2libGUgdG8KKwkJCSAgICAgKiB0aGUgcmlnaHQuICBTdG9wIHdoZW4gaXQgbW92ZXMgdG9vIGZhci4KKwkJCSAgICAgKi8KKwkJCSAgICBkbworCQkJCSh2b2lkKXNldF9pbmRlbnQoKytuZXdfaW5kZW50LCAwKTsKKwkJCSAgICB3aGlsZSAobGluZWxlbihOVUxMKSA8PSB3aWR0aCk7CisJCQkgICAgLS1uZXdfaW5kZW50OworCQkJICAgIGJyZWFrOworCQkJfQorCQkJLS1uZXdfaW5kZW50OworCQkgICAgfQorCSAgICB9CisJfQorCWlmIChuZXdfaW5kZW50IDwgMCkKKwkgICAgbmV3X2luZGVudCA9IDA7CisJKHZvaWQpc2V0X2luZGVudChuZXdfaW5kZW50LCAwKTsJCS8qIHNldCBpbmRlbnQgKi8KKyAgICB9CisgICAgY2hhbmdlZF9saW5lcyhlYXAtPmxpbmUxLCAwLCBlYXAtPmxpbmUyICsgMSwgMEwpOworICAgIGN1cndpbi0+d19jdXJzb3IgPSBzYXZlX2N1cnBvczsKKyAgICBiZWdpbmxpbmUoQkxfV0hJVEUgfCBCTF9GSVgpOworfQorCisvKgorICogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgbGluZSwgZXhjbHVkaW5nIHRyYWlsaW5nIHdoaXRlIHNwYWNlLgorICovCisgICAgc3RhdGljIGludAorbGluZWxlbihoYXNfdGFiKQorICAgIGludAkgICAgKmhhc190YWI7Cit7CisgICAgY2hhcl91ICAqbGluZTsKKyAgICBjaGFyX3UgICpmaXJzdDsKKyAgICBjaGFyX3UgICpsYXN0OworICAgIGludAkgICAgc2F2ZTsKKyAgICBpbnQJICAgIGxlbjsKKworICAgIC8qIGZpbmQgdGhlIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgKi8KKyAgICBsaW5lID0gbWxfZ2V0X2N1cmxpbmUoKTsKKyAgICBmaXJzdCA9IHNraXB3aGl0ZShsaW5lKTsKKworICAgIC8qIGZpbmQgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyICovCisgICAgZm9yIChsYXN0ID0gZmlyc3QgKyBTVFJMRU4oZmlyc3QpOworCQkJCWxhc3QgPiBmaXJzdCAmJiB2aW1faXN3aGl0ZShsYXN0Wy0xXSk7IC0tbGFzdCkKKwk7CisgICAgc2F2ZSA9ICpsYXN0OworICAgICpsYXN0ID0gTlVMOworICAgIGxlbiA9IGxpbmV0YWJzaXplKGxpbmUpOwkJLyogZ2V0IGxpbmUgbGVuZ3RoICovCisgICAgaWYgKGhhc190YWIgIT0gTlVMTCkJCS8qIGNoZWNrIGZvciBlbWJlZGRlZCBUQUIgKi8KKwkqaGFzX3RhYiA9ICh2aW1fc3RycmNocihmaXJzdCwgVEFCKSAhPSBOVUxMKTsKKyAgICAqbGFzdCA9IHNhdmU7CisKKyAgICByZXR1cm4gbGVuOworfQorCisvKgorICogIjpyZXRhYiIuCisgKi8KKyAgICB2b2lkCitleF9yZXRhYihlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQlnb3RfdGFiID0gRkFMU0U7CisgICAgbG9uZwludW1fc3BhY2VzID0gMDsKKyAgICBsb25nCW51bV90YWJzOworICAgIGxvbmcJbGVuOworICAgIGxvbmcJY29sOworICAgIGxvbmcJdmNvbDsKKyAgICBsb25nCXN0YXJ0X2NvbCA9IDA7CQkvKiBGb3Igc3RhcnQgb2Ygd2hpdGUtc3BhY2Ugc3RyaW5nICovCisgICAgbG9uZwlzdGFydF92Y29sID0gMDsJCS8qIEZvciBzdGFydCBvZiB3aGl0ZS1zcGFjZSBzdHJpbmcgKi8KKyAgICBpbnQJCXRlbXA7CisgICAgbG9uZwlvbGRfbGVuOworICAgIGNoYXJfdQkqcHRyOworICAgIGNoYXJfdQkqbmV3X2xpbmUgPSAoY2hhcl91ICopMTsgICAgLyogaW5pdCB0byBub24tTlVMTCAqLworICAgIGludAkJZGlkX3VuZG87CQkvKiBjYWxsZWQgdV9zYXZlIGZvciBjdXJyZW50IGxpbmUgKi8KKyAgICBpbnQJCW5ld190czsKKyAgICBpbnQJCXNhdmVfbGlzdDsKKyAgICBsaW5lbnJfVAlmaXJzdF9saW5lID0gMDsJCS8qIGZpcnN0IGNoYW5nZWQgbGluZSAqLworICAgIGxpbmVucl9UCWxhc3RfbGluZSA9IDA7CQkvKiBsYXN0IGNoYW5nZWQgbGluZSAqLworCisgICAgc2F2ZV9saXN0ID0gY3Vyd2luLT53X3BfbGlzdDsKKyAgICBjdXJ3aW4tPndfcF9saXN0ID0gMDsJICAgIC8qIGRvbid0IHdhbnQgbGlzdCBtb2RlIGhlcmUgKi8KKworICAgIG5ld190cyA9IGdldGRpZ2l0cygmKGVhcC0+YXJnKSk7CisgICAgaWYgKG5ld190cyA8IDApCisgICAgeworCUVNU0coXyhlX3Bvc2l0aXZlKSk7CisJcmV0dXJuOworICAgIH0KKyAgICBpZiAobmV3X3RzID09IDApCisJbmV3X3RzID0gY3VyYnVmLT5iX3BfdHM7CisgICAgZm9yIChsbnVtID0gZWFwLT5saW5lMTsgIWdvdF9pbnQgJiYgbG51bSA8PSBlYXAtPmxpbmUyOyArK2xudW0pCisgICAgeworCXB0ciA9IG1sX2dldChsbnVtKTsKKwljb2wgPSAwOworCXZjb2wgPSAwOworCWRpZF91bmRvID0gRkFMU0U7CisJZm9yICg7OykKKwl7CisJICAgIGlmICh2aW1faXN3aGl0ZShwdHJbY29sXSkpCisJICAgIHsKKwkJaWYgKCFnb3RfdGFiICYmIG51bV9zcGFjZXMgPT0gMCkKKwkJeworCQkgICAgLyogRmlyc3QgY29uc2VjdXRpdmUgd2hpdGUtc3BhY2UgKi8KKwkJICAgIHN0YXJ0X3Zjb2wgPSB2Y29sOworCQkgICAgc3RhcnRfY29sID0gY29sOworCQl9CisJCWlmIChwdHJbY29sXSA9PSAnICcpCisJCSAgICBudW1fc3BhY2VzKys7CisJCWVsc2UKKwkJICAgIGdvdF90YWIgPSBUUlVFOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoZ290X3RhYiB8fCAoZWFwLT5mb3JjZWl0ICYmIG51bV9zcGFjZXMgPiAxKSkKKwkJeworCQkgICAgLyogUmV0YWJ1bGF0ZSB0aGlzIHN0cmluZyBvZiB3aGl0ZS1zcGFjZSAqLworCisJCSAgICAvKiBsZW4gaXMgdmlydHVhbCBsZW5ndGggb2Ygd2hpdGUgc3RyaW5nICovCisJCSAgICBsZW4gPSBudW1fc3BhY2VzID0gdmNvbCAtIHN0YXJ0X3Zjb2w7CisJCSAgICBudW1fdGFicyA9IDA7CisJCSAgICBpZiAoIWN1cmJ1Zi0+Yl9wX2V0KQorCQkgICAgeworCQkJdGVtcCA9IG5ld190cyAtIChzdGFydF92Y29sICUgbmV3X3RzKTsKKwkJCWlmIChudW1fc3BhY2VzID49IHRlbXApCisJCQl7CisJCQkgICAgbnVtX3NwYWNlcyAtPSB0ZW1wOworCQkJICAgIG51bV90YWJzKys7CisJCQl9CisJCQludW1fdGFicyArPSBudW1fc3BhY2VzIC8gbmV3X3RzOworCQkJbnVtX3NwYWNlcyAtPSAobnVtX3NwYWNlcyAvIG5ld190cykgKiBuZXdfdHM7CisJCSAgICB9CisJCSAgICBpZiAoY3VyYnVmLT5iX3BfZXQgfHwgZ290X3RhYiB8fAorCQkJCQkobnVtX3NwYWNlcyArIG51bV90YWJzIDwgbGVuKSkKKwkJICAgIHsKKwkJCWlmIChkaWRfdW5kbyA9PSBGQUxTRSkKKwkJCXsKKwkJCSAgICBkaWRfdW5kbyA9IFRSVUU7CisJCQkgICAgaWYgKHVfc2F2ZSgobGluZW5yX1QpKGxudW0gLSAxKSwKKwkJCQkJCShsaW5lbnJfVCkobG51bSArIDEpKSA9PSBGQUlMKQorCQkJICAgIHsKKwkJCQluZXdfbGluZSA9IE5VTEw7CS8qIGZsYWcgb3V0LW9mLW1lbW9yeSAqLworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCX0KKworCQkJLyogbGVuIGlzIGFjdHVhbCBudW1iZXIgb2Ygd2hpdGUgY2hhcmFjdGVycyB1c2VkICovCisJCQlsZW4gPSBudW1fc3BhY2VzICsgbnVtX3RhYnM7CisJCQlvbGRfbGVuID0gKGxvbmcpU1RSTEVOKHB0cik7CisJCQluZXdfbGluZSA9IGxhbGxvYyhvbGRfbGVuIC0gY29sICsgc3RhcnRfY29sICsgbGVuICsgMSwKKwkJCQkJCQkJCVRSVUUpOworCQkJaWYgKG5ld19saW5lID09IE5VTEwpCisJCQkgICAgYnJlYWs7CisJCQlpZiAoc3RhcnRfY29sID4gMCkKKwkJCSAgICBtY2hfbWVtbW92ZShuZXdfbGluZSwgcHRyLCAoc2l6ZV90KXN0YXJ0X2NvbCk7CisJCQltY2hfbWVtbW92ZShuZXdfbGluZSArIHN0YXJ0X2NvbCArIGxlbiwKKwkJCQkgICAgICBwdHIgKyBjb2wsIChzaXplX3QpKG9sZF9sZW4gLSBjb2wgKyAxKSk7CisJCQlwdHIgPSBuZXdfbGluZSArIHN0YXJ0X2NvbDsKKwkJCWZvciAoY29sID0gMDsgY29sIDwgbGVuOyBjb2wrKykKKwkJCSAgICBwdHJbY29sXSA9IChjb2wgPCBudW1fdGFicykgPyAnXHQnIDogJyAnOworCQkJbWxfcmVwbGFjZShsbnVtLCBuZXdfbGluZSwgRkFMU0UpOworCQkJaWYgKGZpcnN0X2xpbmUgPT0gMCkKKwkJCSAgICBmaXJzdF9saW5lID0gbG51bTsKKwkJCWxhc3RfbGluZSA9IGxudW07CisJCQlwdHIgPSBuZXdfbGluZTsKKwkJCWNvbCA9IHN0YXJ0X2NvbCArIGxlbjsKKwkJICAgIH0KKwkJfQorCQlnb3RfdGFiID0gRkFMU0U7CisJCW51bV9zcGFjZXMgPSAwOworCSAgICB9CisJICAgIGlmIChwdHJbY29sXSA9PSBOVUwpCisJCWJyZWFrOworCSAgICB2Y29sICs9IGNoYXJ0YWJzaXplKHB0ciArIGNvbCwgKGNvbG5yX1QpdmNvbCk7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQljb2wgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIgKyBjb2wpOworCSAgICBlbHNlCisjZW5kaWYKKwkJKytjb2w7CisJfQorCWlmIChuZXdfbGluZSA9PSBOVUxMKQkJICAgIC8qIG91dCBvZiBtZW1vcnkgKi8KKwkgICAgYnJlYWs7CisJbGluZV9icmVha2NoZWNrKCk7CisgICAgfQorICAgIGlmIChnb3RfaW50KQorCUVNU0coXyhlX2ludGVycikpOworCisgICAgaWYgKGN1cmJ1Zi0+Yl9wX3RzICE9IG5ld190cykKKwlyZWRyYXdfY3VyYnVmX2xhdGVyKE5PVF9WQUxJRCk7CisgICAgaWYgKGZpcnN0X2xpbmUgIT0gMCkKKwljaGFuZ2VkX2xpbmVzKGZpcnN0X2xpbmUsIDAsIGxhc3RfbGluZSArIDEsIDBMKTsKKworICAgIGN1cndpbi0+d19wX2xpc3QgPSBzYXZlX2xpc3Q7CS8qIHJlc3RvcmUgJ2xpc3QnICovCisKKyAgICBjdXJidWYtPmJfcF90cyA9IG5ld190czsKKyAgICBjb2xhZHZhbmNlKGN1cndpbi0+d19jdXJzd2FudCk7CisKKyAgICB1X2NsZWFybGluZSgpOworfQorI2VuZGlmCisKKy8qCisgKiA6bW92ZSBjb21tYW5kIC0gbW92ZSBsaW5lcyBsaW5lMS1saW5lMiB0byBsaW5lIGRlc3QKKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK2RvX21vdmUobGluZTEsIGxpbmUyLCBkZXN0KQorICAgIGxpbmVucl9UCWxpbmUxOworICAgIGxpbmVucl9UCWxpbmUyOworICAgIGxpbmVucl9UCWRlc3Q7Cit7CisgICAgY2hhcl91CSpzdHI7CisgICAgbGluZW5yX1QJbDsKKyAgICBsaW5lbnJfVAlleHRyYTsJICAgIC8qIE51bSBsaW5lcyBhZGRlZCBiZWZvcmUgbGluZTEgKi8KKyAgICBsaW5lbnJfVAludW1fbGluZXM7ICAvKiBOdW0gbGluZXMgbW92ZWQgKi8KKyAgICBsaW5lbnJfVAlsYXN0X2xpbmU7ICAvKiBMYXN0IGxpbmUgaW4gZmlsZSBhZnRlciBhZGRpbmcgbmV3IHRleHQgKi8KKworICAgIGlmIChkZXN0ID49IGxpbmUxICYmIGRlc3QgPCBsaW5lMikKKyAgICB7CisJRU1TRyhfKCJFMTM0OiBNb3ZlIGxpbmVzIGludG8gdGhlbXNlbHZlcyIpKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICBudW1fbGluZXMgPSBsaW5lMiAtIGxpbmUxICsgMTsKKworICAgIC8qCisgICAgICogRmlyc3Qgd2UgY29weSB0aGUgb2xkIHRleHQgdG8gaXRzIG5ldyBsb2NhdGlvbiAtLSB3ZWJiCisgICAgICogQWxzbyBjb3B5IHRoZSBmbGFnIHRoYXQgIjpnbG9iYWwiIGNvbW1hbmQgdXNlcy4KKyAgICAgKi8KKyAgICBpZiAodV9zYXZlKGRlc3QsIGRlc3QgKyAxKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworICAgIGZvciAoZXh0cmEgPSAwLCBsID0gbGluZTE7IGwgPD0gbGluZTI7IGwrKykKKyAgICB7CisJc3RyID0gdmltX3N0cnNhdmUobWxfZ2V0KGwgKyBleHRyYSkpOworCWlmIChzdHIgIT0gTlVMTCkKKwl7CisJICAgIG1sX2FwcGVuZChkZXN0ICsgbCAtIGxpbmUxLCBzdHIsIChjb2xucl9UKTAsIEZBTFNFKTsKKwkgICAgdmltX2ZyZWUoc3RyKTsKKwkgICAgaWYgKGRlc3QgPCBsaW5lMSkKKwkJZXh0cmErKzsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3cgd2UgbXVzdCBiZSBjYXJlZnVsIGFkanVzdGluZyBvdXIgbWFya3Mgc28gdGhhdCB3ZSBkb24ndCBvdmVybGFwIG91cgorICAgICAqIG1hcmtfYWRqdXN0KCkgY2FsbHMuCisgICAgICoKKyAgICAgKiBXZSBhZGp1c3QgdGhlIG1hcmtzIHdpdGhpbiB0aGUgb2xkIHRleHQgc28gdGhhdCB0aGV5IHJlZmVyIHRvIHRoZQorICAgICAqIGxhc3QgbGluZXMgb2YgdGhlIGZpbGUgKHRlbXBvcmFyaWx5KSwgYmVjYXVzZSB3ZSBrbm93IG5vIG90aGVyIG1hcmtzCisgICAgICogd2lsbCBiZSBzZXQgdGhlcmUgc2luY2UgdGhlc2UgbGluZSBudW1iZXJzIGRpZCBub3QgZXhpc3QgdW50aWwgd2UgYWRkZWQKKyAgICAgKiBvdXIgbmV3IGxpbmVzLgorICAgICAqCisgICAgICogVGhlbiB3ZSBhZGp1c3QgdGhlIG1hcmtzIG9uIGxpbmVzIGJldHdlZW4gdGhlIG9sZCBhbmQgbmV3IHRleHQgcG9zaXRpb25zCisgICAgICogKGVpdGhlciBmb3J3YXJkcyBvciBiYWNrd2FyZHMpLgorICAgICAqCisgICAgICogQW5kIEZpbmFsbHkgd2UgYWRqdXN0IHRoZSBtYXJrcyB3ZSBwdXQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBiYWNrIHRvCisgICAgICogdGhlaXIgZmluYWwgZGVzdGluYXRpb24gYXQgdGhlIG5ldyB0ZXh0IHBvc2l0aW9uIC0tIHdlYmIKKyAgICAgKi8KKyAgICBsYXN0X2xpbmUgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKyAgICBtYXJrX2FkanVzdChsaW5lMSwgbGluZTIsIGxhc3RfbGluZSAtIGxpbmUyLCAwTCk7CisgICAgaWYgKGRlc3QgPj0gbGluZTIpCisgICAgeworCW1hcmtfYWRqdXN0KGxpbmUyICsgMSwgZGVzdCwgLW51bV9saW5lcywgMEwpOworCWN1cmJ1Zi0+Yl9vcF9zdGFydC5sbnVtID0gZGVzdCAtIG51bV9saW5lcyArIDE7CisJY3VyYnVmLT5iX29wX2VuZC5sbnVtID0gZGVzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwltYXJrX2FkanVzdChkZXN0ICsgMSwgbGluZTEgLSAxLCBudW1fbGluZXMsIDBMKTsKKwljdXJidWYtPmJfb3Bfc3RhcnQubG51bSA9IGRlc3QgKyAxOworCWN1cmJ1Zi0+Yl9vcF9lbmQubG51bSA9IGRlc3QgKyBudW1fbGluZXM7CisgICAgfQorICAgIGN1cmJ1Zi0+Yl9vcF9zdGFydC5jb2wgPSBjdXJidWYtPmJfb3BfZW5kLmNvbCA9IDA7CisgICAgbWFya19hZGp1c3QobGFzdF9saW5lIC0gbnVtX2xpbmVzICsgMSwgbGFzdF9saW5lLAorCQkJCQkgICAgIC0obGFzdF9saW5lIC0gZGVzdCAtIGV4dHJhKSwgMEwpOworCisgICAgLyoKKyAgICAgKiBOb3cgd2UgZGVsZXRlIHRoZSBvcmlnaW5hbCB0ZXh0IC0tIHdlYmIKKyAgICAgKi8KKyAgICBpZiAodV9zYXZlKGxpbmUxICsgZXh0cmEgLSAxLCBsaW5lMiArIGV4dHJhICsgMSkgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIGZvciAobCA9IGxpbmUxOyBsIDw9IGxpbmUyOyBsKyspCisJbWxfZGVsZXRlKGxpbmUxICsgZXh0cmEsIFRSVUUpOworCisgICAgaWYgKCFnbG9iYWxfYnVzeSAmJiBudW1fbGluZXMgPiBwX3JlcG9ydCkKKyAgICB7CisJaWYgKG51bV9saW5lcyA9PSAxKQorCSAgICBNU0coXygiMSBsaW5lIG1vdmVkIikpOworCWVsc2UKKwkgICAgc21zZygoY2hhcl91ICopXygiJWxkIGxpbmVzIG1vdmVkIiksIG51bV9saW5lcyk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBMZWF2ZSB0aGUgY3Vyc29yIG9uIHRoZSBsYXN0IG9mIHRoZSBtb3ZlZCBsaW5lcy4KKyAgICAgKi8KKyAgICBpZiAoZGVzdCA+PSBsaW5lMSkKKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBkZXN0OworICAgIGVsc2UKKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBkZXN0ICsgKGxpbmUyIC0gbGluZTEpICsgMTsKKworICAgIGlmIChsaW5lMSA8IGRlc3QpCisJY2hhbmdlZF9saW5lcyhsaW5lMSwgMCwgZGVzdCArIG51bV9saW5lcyArIDEsIDBMKTsKKyAgICBlbHNlCisJY2hhbmdlZF9saW5lcyhkZXN0ICsgMSwgMCwgbGluZTEgKyBudW1fbGluZXMsIDBMKTsKKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqICI6Y29weSIKKyAqLworICAgIHZvaWQKK2V4X2NvcHkobGluZTEsIGxpbmUyLCBuKQorICAgIGxpbmVucl9UCWxpbmUxOworICAgIGxpbmVucl9UCWxpbmUyOworICAgIGxpbmVucl9UCW47Cit7CisgICAgbGluZW5yX1QJY291bnQ7CisgICAgY2hhcl91CSpwOworCisgICAgY291bnQgPSBsaW5lMiAtIGxpbmUxICsgMTsKKyAgICBjdXJidWYtPmJfb3Bfc3RhcnQubG51bSA9IG4gKyAxOworICAgIGN1cmJ1Zi0+Yl9vcF9lbmQubG51bSA9IG4gKyBjb3VudDsKKyAgICBjdXJidWYtPmJfb3Bfc3RhcnQuY29sID0gY3VyYnVmLT5iX29wX2VuZC5jb2wgPSAwOworCisgICAgLyoKKyAgICAgKiB0aGVyZSBhcmUgdGhyZWUgc2l0dWF0aW9uczoKKyAgICAgKiAxLiBkZXN0aW5hdGlvbiBpcyBhYm92ZSBsaW5lMQorICAgICAqIDIuIGRlc3RpbmF0aW9uIGlzIGJldHdlZW4gbGluZTEgYW5kIGxpbmUyCisgICAgICogMy4gZGVzdGluYXRpb24gaXMgYmVsb3cgbGluZTIKKyAgICAgKgorICAgICAqIG4gPSBkZXN0aW5hdGlvbiAod2hlbiBzdGFydGluZykKKyAgICAgKiBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBkZXN0aW5hdGlvbiAod2hpbGUgY29weWluZykKKyAgICAgKiBsaW5lMSA9IHN0YXJ0IG9mIHNvdXJjZSAod2hpbGUgY29weWluZykKKyAgICAgKiBsaW5lMiA9IGVuZCBvZiBzb3VyY2UgKHdoaWxlIGNvcHlpbmcpCisgICAgICovCisgICAgaWYgKHVfc2F2ZShuLCBuICsgMSkgPT0gRkFJTCkKKwlyZXR1cm47CisKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBuOworICAgIHdoaWxlIChsaW5lMSA8PSBsaW5lMikKKyAgICB7CisJLyogbmVlZCB0byB1c2UgdmltX3N0cnNhdmUoKSBiZWNhdXNlIHRoZSBsaW5lIHdpbGwgYmUgdW5sb2NrZWQgd2l0aGluCisJICogbWxfYXBwZW5kKCkgKi8KKwlwID0gdmltX3N0cnNhdmUobWxfZ2V0KGxpbmUxKSk7CisJaWYgKHAgIT0gTlVMTCkKKwl7CisJICAgIG1sX2FwcGVuZChjdXJ3aW4tPndfY3Vyc29yLmxudW0sIHAsIChjb2xucl9UKTAsIEZBTFNFKTsKKwkgICAgdmltX2ZyZWUocCk7CisJfQorCS8qIHNpdHVhdGlvbiAyOiBza2lwIGFscmVhZHkgY29waWVkIGxpbmVzICovCisJaWYgKGxpbmUxID09IG4pCisJICAgIGxpbmUxID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCSsrbGluZTE7CisJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8IGxpbmUxKQorCSAgICArK2xpbmUxOworCWlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPCBsaW5lMikKKwkgICAgKytsaW5lMjsKKwkrK2N1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICB9CisKKyAgICBhcHBlbmRlZF9saW5lc19tYXJrKG4sIGNvdW50KTsKKworICAgIG1zZ21vcmUoKGxvbmcpY291bnQpOworfQorCisvKgorICogSGFuZGxlIHRoZSAiOiFjbWQiIGNvbW1hbmQuCUFsc28gZm9yICI6ciAhY21kIiBhbmQgIjp3ICFjbWQiCisgKiBCYW5ncyBpbiB0aGUgYXJndW1lbnQgYXJlIHJlcGxhY2VkIHdpdGggdGhlIHByZXZpb3VzbHkgZW50ZXJlZCBjb21tYW5kLgorICogUmVtZW1iZXIgdGhlIGFyZ3VtZW50LgorICoKKyAqIFJJU0NPUzogQmFuZ3Mgb25seSByZXBsYWNlZCB3aGVuIGZvbGxvd2VkIGJ5IGEgc3BhY2UsIHNpbmNlIG1hbnkKKyAqIHBhdGhuYW1lcyBjb250YWluIG9uZS4KKyAqLworICAgIHZvaWQKK2RvX2JhbmcoYWRkcl9jb3VudCwgZWFwLCBmb3JjZWl0LCBkb19pbiwgZG9fb3V0KQorICAgIGludAkJYWRkcl9jb3VudDsKKyAgICBleGFyZ19UCSplYXA7CisgICAgaW50CQlmb3JjZWl0OworICAgIGludAkJZG9faW4sIGRvX291dDsKK3sKKyAgICBjaGFyX3UJCSphcmcgPSBlYXAtPmFyZzsJLyogY29tbWFuZCAqLworICAgIGxpbmVucl9UCQlsaW5lMSA9IGVhcC0+bGluZTE7CS8qIHN0YXJ0IG9mIHJhbmdlICovCisgICAgbGluZW5yX1QJCWxpbmUyID0gZWFwLT5saW5lMjsJLyogZW5kIG9mIHJhbmdlICovCisgICAgc3RhdGljIGNoYXJfdQkqcHJldmNtZCA9IE5VTEw7CS8qIHRoZSBwcmV2aW91cyBjb21tYW5kICovCisgICAgY2hhcl91CQkqbmV3Y21kID0gTlVMTDsJCS8qIHRoZSBuZXcgY29tbWFuZCAqLworICAgIGludAkJCWZyZWVfbmV3Y21kID0gRkFMU0U7ICAgIC8qIG5lZWQgdG8gZnJlZSgpIG5ld2NtZCAqLworICAgIGludAkJCWluc19wcmV2Y21kOworICAgIGNoYXJfdQkJKnQ7CisgICAgY2hhcl91CQkqcDsKKyAgICBjaGFyX3UJCSp0cmFpbGFyZzsKKyAgICBpbnQJCQlsZW47CisgICAgaW50CQkJc2Nyb2xsX3NhdmUgPSBtc2dfc2Nyb2xsOworCisgICAgLyoKKyAgICAgKiBEaXNhbGxvdyBzaGVsbCBjb21tYW5kcyBmb3IgInJ2aW0iLgorICAgICAqIERpc2FsbG93IHNoZWxsIGNvbW1hbmRzIGZyb20gLmV4cmMgYW5kIC52aW1yYyBpbiBjdXJyZW50IGRpcmVjdG9yeSBmb3IKKyAgICAgKiBzZWN1cml0eSByZWFzb25zLgorICAgICAqLworICAgIGlmIChjaGVja19yZXN0cmljdGVkKCkgfHwgY2hlY2tfc2VjdXJlKCkpCisJcmV0dXJuOworCisgICAgaWYgKGFkZHJfY291bnQgPT0gMCkJCS8qIDohICovCisgICAgeworCW1zZ19zY3JvbGwgPSBGQUxTRTsJICAgIC8qIGRvbid0IHNjcm9sbCBoZXJlICovCisJYXV0b3dyaXRlX2FsbCgpOworCW1zZ19zY3JvbGwgPSBzY3JvbGxfc2F2ZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRyeSB0byBmaW5kIGFuIGVtYmVkZGVkIGJhbmcsIGxpa2UgaW4gOiE8Y21kPiAhIFthcmdzXQorICAgICAqICg6ISEgaXMgaW5kaWNhdGVkIGJ5IHRoZSAnZm9yY2VpdCcgdmFyaWFibGUpCisgICAgICovCisgICAgaW5zX3ByZXZjbWQgPSBmb3JjZWl0OworICAgIHRyYWlsYXJnID0gYXJnOworICAgIGRvCisgICAgeworCWxlbiA9IChpbnQpU1RSTEVOKHRyYWlsYXJnKSArIDE7CisJaWYgKG5ld2NtZCAhPSBOVUxMKQorCSAgICBsZW4gKz0gKGludClTVFJMRU4obmV3Y21kKTsKKwlpZiAoaW5zX3ByZXZjbWQpCisJeworCSAgICBpZiAocHJldmNtZCA9PSBOVUxMKQorCSAgICB7CisJCUVNU0coXyhlX25vcHJldikpOworCQl2aW1fZnJlZShuZXdjbWQpOworCQlyZXR1cm47CisJICAgIH0KKwkgICAgbGVuICs9IChpbnQpU1RSTEVOKHByZXZjbWQpOworCX0KKwlpZiAoKHQgPSBhbGxvYyhsZW4pKSA9PSBOVUxMKQorCXsKKwkgICAgdmltX2ZyZWUobmV3Y21kKTsKKwkgICAgcmV0dXJuOworCX0KKwkqdCA9IE5VTDsKKwlpZiAobmV3Y21kICE9IE5VTEwpCisJICAgIFNUUkNBVCh0LCBuZXdjbWQpOworCWlmIChpbnNfcHJldmNtZCkKKwkgICAgU1RSQ0FUKHQsIHByZXZjbWQpOworCXAgPSB0ICsgU1RSTEVOKHQpOworCVNUUkNBVCh0LCB0cmFpbGFyZyk7CisJdmltX2ZyZWUobmV3Y21kKTsKKwluZXdjbWQgPSB0OworCisJLyoKKwkgKiBTY2FuIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudCBmb3IgJyEnLCB3aGljaCBpcyByZXBsYWNlZCBieSB0aGUKKwkgKiBwcmV2aW91cyBjb21tYW5kLiAgIlwhIiBpcyByZXBsYWNlZCBieSAiISIgKHRoaXMgaXMgdmkgY29tcGF0aWJsZSkuCisJICovCisJdHJhaWxhcmcgPSBOVUxMOworCXdoaWxlICgqcCkKKwl7CisJICAgIGlmICgqcCA9PSAnIScKKyNpZmRlZiBSSVNDT1MKKwkJCSYmIChwWzFdID09ICcgJyB8fCBwWzFdID09IE5VTCkKKyNlbmRpZgorCQkJCQkpCisJICAgIHsKKwkJaWYgKHAgPiBuZXdjbWQgJiYgcFstMV0gPT0gJ1xcJykKKwkJICAgIG1jaF9tZW1tb3ZlKHAgLSAxLCBwLCAoc2l6ZV90KShTVFJMRU4ocCkgKyAxKSk7CisJCWVsc2UKKwkJeworCQkgICAgdHJhaWxhcmcgPSBwOworCQkgICAgKnRyYWlsYXJnKysgPSBOVUw7CisJCSAgICBpbnNfcHJldmNtZCA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgICsrcDsKKwl9CisgICAgfSB3aGlsZSAodHJhaWxhcmcgIT0gTlVMTCk7CisKKyAgICB2aW1fZnJlZShwcmV2Y21kKTsKKyAgICBwcmV2Y21kID0gbmV3Y21kOworCisgICAgaWYgKGJhbmdyZWRvKQkgICAgLyogcHV0IGNtZCBpbiByZWRvIGJ1ZmZlciBmb3IgISBjb21tYW5kICovCisgICAgeworCUFwcGVuZFRvUmVkb2J1ZmZMaXQocHJldmNtZCk7CisJQXBwZW5kVG9SZWRvYnVmZigoY2hhcl91ICopIlxuIik7CisJYmFuZ3JlZG8gPSBGQUxTRTsKKyAgICB9CisgICAgLyoKKyAgICAgKiBBZGQgcXVvdGVzIGFyb3VuZCB0aGUgY29tbWFuZCwgZm9yIHNoZWxscyB0aGF0IG5lZWQgdGhlbS4KKyAgICAgKi8KKyAgICBpZiAoKnBfc2hxICE9IE5VTCkKKyAgICB7CisJbmV3Y21kID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4ocHJldmNtZCkgKyAyICogU1RSTEVOKHBfc2hxKSArIDEpKTsKKwlpZiAobmV3Y21kID09IE5VTEwpCisJICAgIHJldHVybjsKKwlTVFJDUFkobmV3Y21kLCBwX3NocSk7CisJU1RSQ0FUKG5ld2NtZCwgcHJldmNtZCk7CisJU1RSQ0FUKG5ld2NtZCwgcF9zaHEpOworCWZyZWVfbmV3Y21kID0gVFJVRTsKKyAgICB9CisgICAgaWYgKGFkZHJfY291bnQgPT0gMCkJCS8qIDohICovCisgICAgeworCS8qIGVjaG8gdGhlIGNvbW1hbmQgKi8KKwltc2dfc3RhcnQoKTsKKwltc2dfcHV0Y2hhcignOicpOworCW1zZ19wdXRjaGFyKCchJyk7CisJbXNnX291dHRyYW5zKG5ld2NtZCk7CisJbXNnX2Nscl9lb3MoKTsKKwl3aW5kZ290byhtc2dfcm93LCBtc2dfY29sKTsKKworCWRvX3NoZWxsKG5ld2NtZCwgMCk7CisgICAgfQorICAgIGVsc2UJCQkJLyogOnJhbmdlISAqLworCS8qIENhcmVmdWw6IFRoaXMgbWF5IHJlY3Vyc2l2ZWx5IGNhbGwgZG9fYmFuZygpIGFnYWluISAoYmVjYXVzZSBvZgorCSAqIGF1dG9jb21tYW5kcykgKi8KKwlkb19maWx0ZXIobGluZTEsIGxpbmUyLCBlYXAsIG5ld2NtZCwgZG9faW4sIGRvX291dCk7CisgICAgaWYgKGZyZWVfbmV3Y21kKQorCXZpbV9mcmVlKG5ld2NtZCk7Cit9CisKKy8qCisgKiBkb19maWx0ZXI6IGZpbHRlciBsaW5lcyB0aHJvdWdoIGEgY29tbWFuZCBnaXZlbiBieSB0aGUgdXNlcgorICoKKyAqIFdlIHVzZSB0ZW1wIGZpbGVzIGFuZCB0aGUgY2FsbF9zaGVsbCgpIHJvdXRpbmUgaGVyZS4gVGhpcyB3b3VsZCBub3JtYWxseQorICogYmUgZG9uZSB1c2luZyBwaXBlcyBvbiBhIFVOSVggbWFjaGluZSwgYnV0IHRoaXMgaXMgbW9yZSBwb3J0YWJsZSB0bworICogbm9uLXVuaXggbWFjaGluZXMuIFRoZSBjYWxsX3NoZWxsKCkgcm91dGluZSBuZWVkcyB0byBiZSBhYmxlCisgKiB0byBkZWFsIHdpdGggcmVkaXJlY3Rpb24gc29tZWhvdywgYW5kIHNob3VsZCBoYW5kbGUgdGhpbmdzIGxpa2UgbG9va2luZworICogYXQgdGhlIFBBVEggZW52LiB2YXJpYWJsZSwgYW5kIGFkZGluZyByZWFzb25hYmxlIGV4dGVuc2lvbnMgdG8gdGhlCisgKiBjb21tYW5kIG5hbWUgZ2l2ZW4gYnkgdGhlIHVzZXIuIEFsbCByZWFzb25hYmxlIHZlcnNpb25zIG9mIGNhbGxfc2hlbGwoKQorICogZG8gdGhpcy4KKyAqIFdlIHVzZSBpbnB1dCByZWRpcmVjdGlvbiBpZiBkb19pbiBpcyBUUlVFLgorICogV2UgdXNlIG91dHB1dCByZWRpcmVjdGlvbiBpZiBkb19vdXQgaXMgVFJVRS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitkb19maWx0ZXIobGluZTEsIGxpbmUyLCBlYXAsIGNtZCwgZG9faW4sIGRvX291dCkKKyAgICBsaW5lbnJfVAlsaW5lMSwgbGluZTI7CisgICAgZXhhcmdfVAkqZWFwOwkJLyogZm9yIGZvcmNlZCAnZmYnIGFuZCAnZmVuYycgKi8KKyAgICBjaGFyX3UJKmNtZDsKKyAgICBpbnQJCWRvX2luLCBkb19vdXQ7Cit7CisgICAgY2hhcl91CSppdG1wID0gTlVMTDsKKyAgICBjaGFyX3UJKm90bXAgPSBOVUxMOworICAgIGxpbmVucl9UCWxpbmVjb3VudDsKKyAgICBsaW5lbnJfVAlyZWFkX2xpbmVjb3VudDsKKyAgICBwb3NfVAljdXJzb3Jfc2F2ZTsKKyAgICBjaGFyX3UJKmNtZF9idWY7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgYnVmX1QJKm9sZF9jdXJidWYgPSBjdXJidWY7CisjZW5kaWYKKworICAgIGlmICgqY21kID09IE5VTCkJICAgIC8qIG5vIGZpbHRlciBjb21tYW5kICovCisJcmV0dXJuOworCisjaWZkZWYgV0lOMzI2NAorICAgIC8qCisgICAgICogQ2hlY2sgaWYgZXh0ZXJuYWwgY29tbWFuZHMgYXJlIGFsbG93ZWQgbm93LgorICAgICAqLworICAgIGlmIChjYW5fZW5kX3Rlcm1jYXBfbW9kZShUUlVFKSA9PSBGQUxTRSkKKwlyZXR1cm47CisjZW5kaWYKKworICAgIGN1cnNvcl9zYXZlID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICBsaW5lY291bnQgPSBsaW5lMiAtIGxpbmUxICsgMTsKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsaW5lMTsKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisgICAgY2hhbmdlZF9saW5lX2Fidl9jdXJzKCk7CisgICAgaW52YWxpZGF0ZV9ib3RsaW5lKCk7CisKKyAgICAvKgorICAgICAqIDEuIEZvcm0gdGVtcCBmaWxlIG5hbWVzCisgICAgICogMi4gV3JpdGUgdGhlIGxpbmVzIHRvIGEgdGVtcCBmaWxlCisgICAgICogMy4gUnVuIHRoZSBmaWx0ZXIgY29tbWFuZCBvbiB0aGUgdGVtcCBmaWxlCisgICAgICogNC4gUmVhZCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIGludG8gdGhlIGJ1ZmZlcgorICAgICAqIDUuIERlbGV0ZSB0aGUgb3JpZ2luYWwgbGluZXMgdG8gYmUgZmlsdGVyZWQKKyAgICAgKiA2LiBSZW1vdmUgdGhlIHRlbXAgZmlsZXMKKyAgICAgKi8KKworICAgIGlmICgoZG9faW4gJiYgKGl0bXAgPSB2aW1fdGVtcG5hbWUoJ2knKSkgPT0gTlVMTCkKKwkgICAgfHwgKGRvX291dCAmJiAob3RtcCA9IHZpbV90ZW1wbmFtZSgnbycpKSA9PSBOVUxMKSkKKyAgICB7CisJRU1TRyhfKGVfbm90bXApKTsKKwlnb3RvIGZpbHRlcmVuZDsKKyAgICB9CisKKy8qCisgKiBUaGUgd3JpdGluZyBhbmQgcmVhZGluZyBvZiB0ZW1wIGZpbGVzIHdpbGwgbm90IGJlIHNob3duLgorICogVmkgYWxzbyBkb2Vzbid0IGRvIHRoaXMgYW5kIHRoZSBtZXNzYWdlcyBhcmUgbm90IHZlcnkgaW5mb3JtYXRpdmUuCisgKi8KKyAgICArK25vX3dhaXRfcmV0dXJuOwkJLyogZG9uJ3QgY2FsbCB3YWl0X3JldHVybigpIHdoaWxlIGJ1c3kgKi8KKyAgICBpZiAoZG9faW4gJiYgYnVmX3dyaXRlKGN1cmJ1ZiwgaXRtcCwgTlVMTCwgbGluZTEsIGxpbmUyLCBlYXAsCisJCQkJCSAgIEZBTFNFLCBGQUxTRSwgRkFMU0UsIFRSVUUpID09IEZBSUwpCisgICAgeworCW1zZ19wdXRjaGFyKCdcbicpOwkJLyoga2VlcCBtZXNzYWdlIGZyb20gYnVmX3dyaXRlKCkgKi8KKwktLW5vX3dhaXRfcmV0dXJuOworI2lmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwlpZiAoIWFib3J0aW5nKCkpCisjZW5kaWYKKwkgICAgKHZvaWQpRU1TRzIoXyhlX25vdGNyZWF0ZSksIGl0bXApOwkvKiB3aWxsIGNhbGwgd2FpdF9yZXR1cm4gKi8KKwlnb3RvIGZpbHRlcmVuZDsKKyAgICB9CisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgaWYgKGN1cmJ1ZiAhPSBvbGRfY3VyYnVmKQorCWdvdG8gZmlsdGVyZW5kOworI2VuZGlmCisKKyAgICBpZiAoIWRvX291dCkKKwltc2dfcHV0Y2hhcignXG4nKTsKKworICAgIGNtZF9idWYgPSBtYWtlX2ZpbHRlcl9jbWQoY21kLCBpdG1wLCBvdG1wKTsKKyAgICBpZiAoY21kX2J1ZiA9PSBOVUxMKQorCWdvdG8gZmlsdGVyZW5kOworCisgICAgd2luZGdvdG8oKGludClSb3dzIC0gMSwgMCk7CisgICAgY3Vyc29yX29uKCk7CisKKyAgICAvKgorICAgICAqIFdoZW4gbm90IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQgdGhlIGNvbW1hbmQgY2FuIHdyaXRlIGFueXRoaW5nIHRvIHRoZQorICAgICAqIHNjcmVlbi4gSWYgJ3NoZWxscmVkaXInIGlzIGVxdWFsIHRvICI+Iiwgc2NyZWVuIG1heSBiZSBtZXNzZWQgdXAgYnkKKyAgICAgKiBzdGRlcnIgb3V0cHV0IG9mIGV4dGVybmFsIGNvbW1hbmQuIENsZWFyIHRoZSBzY3JlZW4gbGF0ZXIuCisgICAgICogSWYgZG9faW4gaXMgRkFMU0UsIHRoaXMgY291bGQgYmUgc29tZXRoaW5nIGxpa2UgIjpyICFjYXQiLCB3aGljaCBtYXkKKyAgICAgKiBhbHNvIG1lc3MgdXAgdGhlIHNjcmVlbiwgY2xlYXIgaXQgbGF0ZXIuCisgICAgICovCisgICAgaWYgKCFkb19vdXQgfHwgU1RSQ01QKHBfc3JyLCAiPiIpID09IDAgfHwgIWRvX2luKQorCXJlZHJhd19sYXRlcl9jbGVhcigpOworCisgICAgLyoKKyAgICAgKiBXaGVuIGNhbGxfc2hlbGwoKSBmYWlscyB3YWl0X3JldHVybigpIGlzIGNhbGxlZCB0byBnaXZlIHRoZSB1c2VyIGEKKyAgICAgKiBjaGFuY2UgdG8gcmVhZCB0aGUgZXJyb3IgbWVzc2FnZXMuIE90aGVyd2lzZSBlcnJvcnMgYXJlIGlnbm9yZWQsIHNvIHlvdQorICAgICAqIGNhbiBzZWUgdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIGNvbW1hbmQgdGhhdCBhcHBlYXIgb24gc3Rkb3V0OyB1c2UKKyAgICAgKiAndScgdG8gZml4IHRoZSB0ZXh0CisgICAgICogU3dpdGNoIHRvIGNvb2tlZCBtb2RlIHdoZW4gbm90IHJlZGlyZWN0aW5nIHN0ZGluLCBhdm9pZHMgdGhhdCBzb21ldGhpbmcKKyAgICAgKiBsaWtlICI6ciAhY2F0IiBoYW5ncy4KKyAgICAgKiBQYXNzIG9uIHRoZSBTSEVMTF9ET09VVCBmbGFnIHdoZW4gdGhlIG91dHB1dCBpcyBiZWluZyByZWRpcmVjdGVkLgorICAgICAqLworICAgIGlmIChjYWxsX3NoZWxsKGNtZF9idWYsIFNIRUxMX0ZJTFRFUiB8IFNIRUxMX0NPT0tFRAorCQkJCQkJfCAoZG9fb3V0ID8gU0hFTExfRE9PVVQgOiAwKSkpCisgICAgeworCXJlZHJhd19sYXRlcl9jbGVhcigpOworCXdhaXRfcmV0dXJuKEZBTFNFKTsKKyAgICB9CisgICAgdmltX2ZyZWUoY21kX2J1Zik7CisKKyAgICBkaWRfY2hlY2tfdGltZXN0YW1wcyA9IEZBTFNFOworICAgIG5lZWRfY2hlY2tfdGltZXN0YW1wcyA9IFRSVUU7CisKKyAgICAvKiBXaGVuIGludGVycnVwdGluZyB0aGUgc2hlbGwgY29tbWFuZCwgaXQgbWF5IHN0aWxsIGhhdmUgcHJvZHVjZWQgc29tZQorICAgICAqIHVzZWZ1bCBvdXRwdXQuICBSZXNldCBnb3RfaW50IGhlcmUsIHNvIHRoYXQgcmVhZGZpbGUoKSB3b24ndCBjYW5jZWwKKyAgICAgKiByZWFkaW5nLiAqLworICAgIHVpX2JyZWFrY2hlY2soKTsKKyAgICBnb3RfaW50ID0gRkFMU0U7CisKKyAgICBpZiAoZG9fb3V0KQorICAgIHsKKwlpZiAodV9zYXZlKChsaW5lbnJfVCkobGluZTIpLCAobGluZW5yX1QpKGxpbmUyICsgMSkpID09IEZBSUwpCisJICAgIGdvdG8gZXJyb3I7CisJcmVkcmF3X2N1cmJ1Zl9sYXRlcihWQUxJRCk7CisJcmVhZF9saW5lY291bnQgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwlpZiAocmVhZGZpbGUob3RtcCwgTlVMTCwgbGluZTIsIChsaW5lbnJfVCkwLCAobGluZW5yX1QpTUFYTE5VTSwgZWFwLAorCQkJCQkJCSBSRUFEX0ZJTFRFUikgPT0gRkFJTCkKKwl7CisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCSAgICBpZiAoIWFib3J0aW5nKCkpCisjZW5kaWYKKwkgICAgeworCQltc2dfcHV0Y2hhcignXG4nKTsKKwkJRU1TRzIoXyhlX25vdHJlYWQpLCBvdG1wKTsKKwkgICAgfQorCSAgICBnb3RvIGVycm9yOworCX0KKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwlpZiAoY3VyYnVmICE9IG9sZF9jdXJidWYpCisJICAgIGdvdG8gZmlsdGVyZW5kOworI2VuZGlmCisKKwlpZiAoZG9faW4pCisJeworCSAgICBpZiAoY21kbW9kLmtlZXBtYXJrcyB8fCB2aW1fc3RyY2hyKHBfY3BvLCBDUE9fUkVNTUFSSykgPT0gTlVMTCkKKwkgICAgeworCQlyZWFkX2xpbmVjb3VudCA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50IC0gcmVhZF9saW5lY291bnQ7CisJCWlmIChyZWFkX2xpbmVjb3VudCA+PSBsaW5lY291bnQpCisJCSAgICAvKiBtb3ZlIGFsbCBtYXJrcyBmcm9tIG9sZCBsaW5lcyB0byBuZXcgbGluZXMgKi8KKwkJICAgIG1hcmtfYWRqdXN0KGxpbmUxLCBsaW5lMiwgbGluZWNvdW50LCAwTCk7CisJCWVsc2UKKwkJeworCQkgICAgLyogbW92ZSBtYXJrcyBmcm9tIG9sZCBsaW5lcyB0byBuZXcgbGluZXMsIGRlbGV0ZSBtYXJrcworCQkgICAgICogdGhhdCBhcmUgaW4gZGVsZXRlZCBsaW5lcyAqLworCQkgICAgbWFya19hZGp1c3QobGluZTEsIGxpbmUxICsgcmVhZF9saW5lY291bnQgLSAxLAorCQkJCQkJCQlsaW5lY291bnQsIDBMKTsKKwkJICAgIG1hcmtfYWRqdXN0KGxpbmUxICsgcmVhZF9saW5lY291bnQsIGxpbmUyLCBNQVhMTlVNLCAwTCk7CisJCX0KKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIFB1dCBjdXJzb3Igb24gZmlyc3QgZmlsdGVyZWQgbGluZSBmb3IgIjpyYW5nZSFjbWQiLgorCSAgICAgKiBBZGp1c3QgJ1sgYW5kICddIChzZXQgYnkgYnVmX3dyaXRlKCkpLgorCSAgICAgKi8KKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbGluZTE7CisJICAgIGRlbF9saW5lcyhsaW5lY291bnQsIFRSVUUpOworCSAgICBjdXJidWYtPmJfb3Bfc3RhcnQubG51bSAtPSBsaW5lY291bnQ7CS8qIGFkanVzdCAnWyAqLworCSAgICBjdXJidWYtPmJfb3BfZW5kLmxudW0gLT0gbGluZWNvdW50OwkJLyogYWRqdXN0ICddICovCisJICAgIHdyaXRlX2xudW1fYWRqdXN0KC1saW5lY291bnQpOwkJLyogYWRqdXN0IGxhc3QgbGluZQorCQkJCQkJCSAgIGZvciBuZXh0IHdyaXRlICovCisJfQorCWVsc2UKKwl7CisJICAgIC8qCisJICAgICAqIFB1dCBjdXJzb3Igb24gbGFzdCBuZXcgbGluZSBmb3IgIjpyICFjbWQiLgorCSAgICAgKi8KKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gY3VyYnVmLT5iX29wX2VuZC5sbnVtOworCSAgICBsaW5lY291bnQgPSBjdXJidWYtPmJfb3BfZW5kLmxudW0gLSBjdXJidWYtPmJfb3Bfc3RhcnQubG51bSArIDE7CisJfQorCWJlZ2lubGluZShCTF9XSElURSB8IEJMX0ZJWCk7CSAgICAvKiBjdXJzb3Igb24gZmlyc3Qgbm9uLWJsYW5rICovCisJLS1ub193YWl0X3JldHVybjsKKworCWlmIChsaW5lY291bnQgPiBwX3JlcG9ydCkKKwl7CisJICAgIGlmIChkb19pbikKKwkgICAgeworCQlzcHJpbnRmKChjaGFyICopbXNnX2J1ZiwgXygiJWxkIGxpbmVzIGZpbHRlcmVkIiksCisJCQkJCQkJICAgICAobG9uZylsaW5lY291bnQpOworCQlpZiAobXNnKG1zZ19idWYpICYmICFtc2dfc2Nyb2xsKQorCQl7CisJCSAgICAvKiBzYXZlIG1lc3NhZ2UgdG8gZGlzcGxheSBpdCBhZnRlciByZWRyYXcgKi8KKwkJICAgIHNldF9rZWVwX21zZyhtc2dfYnVmKTsKKwkJICAgIGtlZXBfbXNnX2F0dHIgPSAwOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCQltc2dtb3JlKChsb25nKWxpbmVjb3VudCk7CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworZXJyb3I6CisJLyogcHV0IGN1cnNvciBiYWNrIGluIHNhbWUgcG9zaXRpb24gZm9yICI6dyAhY21kIiAqLworCWN1cndpbi0+d19jdXJzb3IgPSBjdXJzb3Jfc2F2ZTsKKwktLW5vX3dhaXRfcmV0dXJuOworCXdhaXRfcmV0dXJuKEZBTFNFKTsKKyAgICB9CisKK2ZpbHRlcmVuZDoKKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIGlmIChjdXJidWYgIT0gb2xkX2N1cmJ1ZikKKyAgICB7CisJLS1ub193YWl0X3JldHVybjsKKwlFTVNHKF8oIkUxMzU6ICpGaWx0ZXIqIEF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiKSk7CisgICAgfQorI2VuZGlmCisgICAgaWYgKGl0bXAgIT0gTlVMTCkKKwltY2hfcmVtb3ZlKGl0bXApOworICAgIGlmIChvdG1wICE9IE5VTEwpCisJbWNoX3JlbW92ZShvdG1wKTsKKyAgICB2aW1fZnJlZShpdG1wKTsKKyAgICB2aW1fZnJlZShvdG1wKTsKK30KKworLyoKKyAqIENhbGwgYSBzaGVsbCB0byBleGVjdXRlIGEgY29tbWFuZC4KKyAqIFdoZW4gImNtZCIgaXMgTlVMTCBzdGFydCBhbiBpbnRlcmFjdGl2ZSBzaGVsbC4KKyAqLworICAgIHZvaWQKK2RvX3NoZWxsKGNtZCwgZmxhZ3MpCisgICAgY2hhcl91CSpjbWQ7CisgICAgaW50CQlmbGFnczsJLyogbWF5IGJlIFNIRUxMX0RPT1VUIHdoZW4gb3V0cHV0IGlzIHJlZGlyZWN0ZWQgKi8KK3sKKyAgICBidWZfVAkqYnVmOworI2lmbmRlZiBGRUFUX0dVSV9NU1dJTgorICAgIGludAkJc2F2ZV9ud3I7CisjZW5kaWYKKyNpZmRlZiBNU1dJTgorICAgIGludAkJd2luc3RhcnQgPSBGQUxTRTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBEaXNhbGxvdyBzaGVsbCBjb21tYW5kcyBmb3IgInJ2aW0iLgorICAgICAqIERpc2FsbG93IHNoZWxsIGNvbW1hbmRzIGZyb20gLmV4cmMgYW5kIC52aW1yYyBpbiBjdXJyZW50IGRpcmVjdG9yeSBmb3IKKyAgICAgKiBzZWN1cml0eSByZWFzb25zLgorICAgICAqLworICAgIGlmIChjaGVja19yZXN0cmljdGVkKCkgfHwgY2hlY2tfc2VjdXJlKCkpCisgICAgeworCW1zZ19lbmQoKTsKKwlyZXR1cm47CisgICAgfQorCisjaWZkZWYgTVNXSU4KKyAgICAvKgorICAgICAqIENoZWNrIGlmIGV4dGVybmFsIGNvbW1hbmRzIGFyZSBhbGxvd2VkIG5vdy4KKyAgICAgKi8KKyAgICBpZiAoY2FuX2VuZF90ZXJtY2FwX21vZGUoVFJVRSkgPT0gRkFMU0UpCisJcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiAiOiFzdGFydCIgaXMgdXNlZC4KKyAgICAgKi8KKyAgICBpZiAoY21kICE9IE5VTEwpCisJd2luc3RhcnQgPSAoU1RSTklDTVAoY21kLCAic3RhcnQgIiwgNikgPT0gMCk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogRm9yIGF1dG9jb21tYW5kcyB3ZSB3YW50IHRvIGdldCB0aGUgb3V0cHV0IG9uIHRoZSBjdXJyZW50IHNjcmVlbiwgdG8KKyAgICAgKiBhdm9pZCBoYXZpbmcgdG8gdHlwZSByZXR1cm4gYmVsb3cuCisgICAgICovCisgICAgbXNnX3B1dGNoYXIoJ1xyJyk7CQkJLyogcHV0IGN1cnNvciBhdCBzdGFydCBvZiBsaW5lICovCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgaWYgKCFhdXRvY21kX2J1c3kpCisjZW5kaWYKKyAgICB7CisjaWZkZWYgTVNXSU4KKwlpZiAoIXdpbnN0YXJ0KQorI2VuZGlmCisJICAgIHN0b3B0ZXJtY2FwKCk7CisgICAgfQorI2lmZGVmIE1TV0lOCisgICAgaWYgKCF3aW5zdGFydCkKKyNlbmRpZgorCW1zZ19wdXRjaGFyKCdcbicpOwkJLyogbWF5IHNoaWZ0IHNjcmVlbiBvbmUgbGluZSB1cCAqLworCisgICAgLyogd2FybmluZyBtZXNzYWdlIGJlZm9yZSBjYWxsaW5nIHRoZSBzaGVsbCAqLworICAgIGlmIChwX3dhcm4KKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkJJiYgIWF1dG9jbWRfYnVzeQorI2VuZGlmCisJCSYmIG1zZ19zaWxlbnQgPT0gMCkKKwlmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWY7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorCSAgICBpZiAoYnVmSXNDaGFuZ2VkKGJ1ZikpCisJICAgIHsKKyNpZmRlZiBGRUFUX0dVSV9NU1dJTgorCQlpZiAoIXdpbnN0YXJ0KQorCQkgICAgc3RhcnR0ZXJtY2FwKCk7CS8qIGRvbid0IHdhbnQgYSBtZXNzYWdlIGJveCBoZXJlICovCisjZW5kaWYKKwkJTVNHX1BVVFMoXygiW05vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlXVxuIikpOworI2lmZGVmIEZFQVRfR1VJX01TV0lOCisJCWlmICghd2luc3RhcnQpCisJCSAgICBzdG9wdGVybWNhcCgpOworI2VuZGlmCisJCWJyZWFrOworCSAgICB9CisKKyAgICAvKiBUaGlzIHdpbmRnb3RvIGlzIHJlcXVpcmVkIGZvciB3aGVuIHRoZSAnXG4nIHJlc3VsdGVkIGluIGEgImRlbGV0ZSBsaW5lCisgICAgICogMSIgY29tbWFuZCB0byB0aGUgdGVybWluYWwuICovCisgICAgaWYgKCFzd2FwcGluZ19zY3JlZW4oKSkKKwl3aW5kZ290byhtc2dfcm93LCBtc2dfY29sKTsKKyAgICBjdXJzb3Jfb24oKTsKKyAgICAodm9pZCljYWxsX3NoZWxsKGNtZCwgU0hFTExfQ09PS0VEIHwgZmxhZ3MpOworICAgIGRpZF9jaGVja190aW1lc3RhbXBzID0gRkFMU0U7CisgICAgbmVlZF9jaGVja190aW1lc3RhbXBzID0gVFJVRTsKKworICAgIC8qCisgICAgICogcHV0IHRoZSBtZXNzYWdlIGN1cnNvciBhdCB0aGUgZW5kIG9mIHRoZSBzY3JlZW4sIGF2b2lkcyB3YWl0X3JldHVybigpCisgICAgICogdG8gb3ZlcndyaXRlIHRoZSB0ZXh0IHRoYXQgdGhlIGV4dGVybmFsIGNvbW1hbmQgc2hvd2VkCisgICAgICovCisgICAgaWYgKCFzd2FwcGluZ19zY3JlZW4oKSkKKyAgICB7CisJbXNnX3JvdyA9IFJvd3MgLSAxOworCW1zZ19jb2wgPSAwOworICAgIH0KKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIGlmIChhdXRvY21kX2J1c3kpCisgICAgeworCWlmIChtc2dfc2lsZW50ID09IDApCisJICAgIHJlZHJhd19sYXRlcl9jbGVhcigpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJLyoKKwkgKiBGb3IgIjpzaCIgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIHdhaXRfcmV0dXJuKCksIGp1c3QgcmVkcmF3LgorCSAqIEFsc28gZm9yIHRoZSBXaW4zMiBHVUkgKHRoZSBvdXRwdXQgaXMgaW4gYSBjb25zb2xlIHdpbmRvdykuCisJICogT3RoZXJ3aXNlIHRoZXJlIGlzIHByb2JhYmx5IHRleHQgb24gdGhlIHNjcmVlbiB0aGF0IHRoZSB1c2VyIHdhbnRzCisJICogdG8gcmVhZCBiZWZvcmUgcmVkcmF3aW5nLCBzbyBjYWxsIHdhaXRfcmV0dXJuKCkuCisJICovCisjaWZuZGVmIEZFQVRfR1VJX01TV0lOCisJaWYgKGNtZCA9PSBOVUxMCisjIGlmZGVmIFdJTjMyNjQKKwkJfHwgKHdpbnN0YXJ0ICYmICFuZWVkX3dhaXRfcmV0dXJuKQorIyBlbmRpZgorCSAgICkKKwl7CisJICAgIGlmIChtc2dfc2lsZW50ID09IDApCisJCXJlZHJhd19sYXRlcl9jbGVhcigpOworCSAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisJfQorCWVsc2UKKwl7CisJICAgIC8qCisJICAgICAqIElmIHdlIHN3aXRjaCBzY3JlZW5zIHdoZW4gc3RhcnR0ZXJtY2FwKCkgaXMgY2FsbGVkLCB3ZSByZWFsbHkKKwkgICAgICogd2FudCB0byB3YWl0IGZvciAiaGl0IHJldHVybiB0byBjb250aW51ZSIuCisJICAgICAqLworCSAgICBzYXZlX253ciA9IG5vX3dhaXRfcmV0dXJuOworCSAgICBpZiAoc3dhcHBpbmdfc2NyZWVuKCkpCisJCW5vX3dhaXRfcmV0dXJuID0gRkFMU0U7CisjIGlmZGVmIEFNSUdBCisJICAgIHdhaXRfcmV0dXJuKHRlcm1fY29uc29sZSA/IC0xIDogbXNnX3NpbGVudCA9PSAwKTsJLyogc2VlIGJlbG93ICovCisjIGVsc2UKKwkgICAgd2FpdF9yZXR1cm4obXNnX3NpbGVudCA9PSAwKTsKKyMgZW5kaWYKKwkgICAgbm9fd2FpdF9yZXR1cm4gPSBzYXZlX253cjsKKwl9CisjZW5kaWYgLyogRkVBVF9HVUlfVzMyICovCisKKyNpZmRlZiBNU1dJTgorCWlmICghd2luc3RhcnQpIC8qIGlmIHdpbnN0YXJ0PT1UUlVFLCBuZXZlciBzdG9wcGVkIHRlcm1jYXAhICovCisjZW5kaWYKKwkgICAgc3RhcnR0ZXJtY2FwKCk7CS8qIHN0YXJ0IHRlcm1jYXAgaWYgbm90IGRvbmUgYnkgd2FpdF9yZXR1cm4oKSAqLworCisJLyoKKwkgKiBJbiBhbiBBbWlnYSB3aW5kb3cgcmVkcmF3aW5nIGlzIGNhdXNlZCBieSBhc2tpbmcgdGhlIHdpbmRvdyBzaXplLgorCSAqIElmIHdlIGdvdCBhbiBpbnRlcnJ1cHQgdGhpcyB3aWxsIG5vdCB3b3JrLiBUaGUgY2hhbmNlIHRoYXQgdGhlCisJICogd2luZG93IHNpemUgaXMgd3JvbmcgaXMgdmVyeSBzbWFsbCwgYnV0IHdlIG5lZWQgdG8gcmVkcmF3IHRoZQorCSAqIHNjcmVlbi4gIERvbid0IGRvIHRoaXMgaWYgJzonIGhpdCBpbiB3YWl0X3JldHVybigpLglUSElTIElTIFVHTFkKKwkgKiBidXQgaXQgc2F2ZXMgYW4gZXh0cmEgcmVkcmF3LgorCSAqLworI2lmZGVmIEFNSUdBCisJaWYgKHNraXBfcmVkcmF3KQkJLyogJzonIGhpdCBpbiB3YWl0X3JldHVybigpICovCisJeworCSAgICBpZiAobXNnX3NpbGVudCA9PSAwKQorCQlyZWRyYXdfbGF0ZXJfY2xlYXIoKTsKKwl9CisJZWxzZSBpZiAodGVybV9jb25zb2xlKQorCXsKKwkgICAgT1VUX1NUUihJRl9FQigiXDAzM1swIHEiLCBFU0NfU1RSICJbMCBxIikpOwkvKiBnZXQgd2luZG93IHNpemUgKi8KKwkgICAgaWYgKGdvdF9pbnQgJiYgbXNnX3NpbGVudCA9PSAwKQorCQlyZWRyYXdfbGF0ZXJfY2xlYXIoKTsJLyogaWYgZ290X2ludCBpcyBUUlVFLCByZWRyYXcgbmVlZGVkICovCisJICAgIGVsc2UKKwkJbXVzdF9yZWRyYXcgPSAwOwkvKiBubyBleHRyYSByZWRyYXcgbmVlZGVkICovCisJfQorI2VuZGlmCisgICAgfQorCisgICAgLyogZGlzcGxheSBhbnkgZXJyb3IgbWVzc2FnZXMgbm93ICovCisgICAgZGlzcGxheV9lcnJvcnMoKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHNoZWxsIGNvbW1hbmQgZnJvbSBhIGNvbW1hbmQgc3RyaW5nLCBpbnB1dCByZWRpcmVjdGlvbiBmaWxlIGFuZAorICogb3V0cHV0IHJlZGlyZWN0aW9uIGZpbGUuCisgKiBSZXR1cm5zIGFuIGFsbG9jYXRlZCBzdHJpbmcgd2l0aCB0aGUgc2hlbGwgY29tbWFuZCwgb3IgTlVMTCBmb3IgZmFpbHVyZS4KKyAqLworICAgIGNoYXJfdSAqCittYWtlX2ZpbHRlcl9jbWQoY21kLCBpdG1wLCBvdG1wKQorICAgIGNoYXJfdQkqY21kOwkJLyogY29tbWFuZCAqLworICAgIGNoYXJfdQkqaXRtcDsJCS8qIE5VTEwgb3IgbmFtZSBvZiBpbnB1dCBmaWxlICovCisgICAgY2hhcl91CSpvdG1wOwkJLyogTlVMTCBvciBuYW1lIG9mIG91dHB1dCBmaWxlICovCit7CisgICAgY2hhcl91CSpidWY7CisgICAgbG9uZ191CWxlbjsKKworICAgIGxlbiA9IChsb25nX3UpU1RSTEVOKGNtZCkgKyAzOwkJCS8qICIoKSIgKyBOVUwgKi8KKyAgICBpZiAoaXRtcCAhPSBOVUxMKQorCWxlbiArPSAobG9uZ191KVNUUkxFTihpdG1wKSArIDk7CQkvKiAiIHsgPCAiICsgIiB9ICIgKi8KKyAgICBpZiAob3RtcCAhPSBOVUxMKQorCWxlbiArPSAobG9uZ191KVNUUkxFTihvdG1wKSArIChsb25nX3UpU1RSTEVOKHBfc3JyKSArIDI7IC8qICIgICIgKi8KKyAgICBidWYgPSBsYWxsb2MobGVuLCBUUlVFKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyNpZiAoZGVmaW5lZChVTklYKSAmJiAhZGVmaW5lZChBUkNISUUpKSB8fCBkZWZpbmVkKE9TMikKKyAgICAvKgorICAgICAqIHB1dCBicmFjZXMgYXJvdW5kIHRoZSBjb21tYW5kIChmb3IgY29uY2F0ZW5hdGVkIGNvbW1hbmRzKQorICAgICAqLworICAgIHNwcmludGYoKGNoYXIgKilidWYsICIoJXMpIiwgKGNoYXIgKiljbWQpOworICAgIGlmIChpdG1wICE9IE5VTEwpCisgICAgeworCVNUUkNBVChidWYsICIgPCAiKTsKKwlTVFJDQVQoYnVmLCBpdG1wKTsKKyAgICB9CisjZWxzZQorICAgIC8qCisgICAgICogZm9yIHNoZWxscyB0aGF0IGRvbid0IHVuZGVyc3RhbmQgYnJhY2VzIGFyb3VuZCBjb21tYW5kcywgYXQgbGVhc3QgYWxsb3cKKyAgICAgKiB0aGUgdXNlIG9mIGNvbW1hbmRzIGluIGEgcGlwZS4KKyAgICAgKi8KKyAgICBTVFJDUFkoYnVmLCBjbWQpOworICAgIGlmIChpdG1wICE9IE5VTEwpCisgICAgeworCWNoYXJfdQkqcDsKKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBwaXBlLCB3ZSBoYXZlIHRvIHB1dCB0aGUgJzwnIGluIGZyb250IG9mIGl0LgorCSAqIERvbid0IGRvIHRoaXMgd2hlbiAnc2hlbGxxdW90ZScgaXMgbm90IGVtcHR5LCBvdGhlcndpc2UgdGhlCisJICogcmVkaXJlY3Rpb24gd291bGQgYmUgaW5zaWRlIHRoZSBxdW90ZXMuCisJICovCisJaWYgKCpwX3NocSA9PSBOVUwpCisJeworCSAgICBwID0gdmltX3N0cmNocihidWYsICd8Jyk7CisJICAgIGlmIChwICE9IE5VTEwpCisJCSpwID0gTlVMOworCX0KKyMgaWZkZWYgUklTQ09TCisJU1RSQ0FUKGJ1ZiwgIiB7IDwgIik7CS8qIFVzZSBSSVNDIE9TIG5vdGF0aW9uIGZvciBpbnB1dC4gKi8KKwlTVFJDQVQoYnVmLCBpdG1wKTsKKwlTVFJDQVQoYnVmLCAiIH0gIik7CisjIGVsc2UKKwlTVFJDQVQoYnVmLCAiIDwiKTsJLyogIiA8ICIgY2F1c2VzIHByb2JsZW1zIG9uIEFtaWdhICovCisJU1RSQ0FUKGJ1ZiwgaXRtcCk7CisjIGVuZGlmCisJaWYgKCpwX3NocSA9PSBOVUwpCisJeworCSAgICBwID0gdmltX3N0cmNocihjbWQsICd8Jyk7CisJICAgIGlmIChwICE9IE5VTEwpCisJICAgIHsKKwkJU1RSQ0FUKGJ1ZiwgIiAiKTsgICAvKiBpbnNlcnQgYSBzcGFjZSBiZWZvcmUgdGhlICd8JyBmb3IgRE9TICovCisJCVNUUkNBVChidWYsIHApOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorICAgIGlmIChvdG1wICE9IE5VTEwpCisJYXBwZW5kX3JlZGlyKGJ1ZiwgcF9zcnIsIG90bXApOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqIEFwcGVuZCBvdXRwdXQgcmVkaXJlY3Rpb24gZm9yIGZpbGUgImZuYW1lIiB0byB0aGUgZW5kIG9mIHN0cmluZyBidWZmZXIgImJ1ZiIKKyAqIFdvcmtzIHdpdGggdGhlICdzaGVsbHJlZGlyJyBhbmQgJ3NoZWxscGlwZScgb3B0aW9ucy4KKyAqIFRoZSBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29tOgorICoJU1RSTEVOKG9wdCkgKyBTVFJMRU4oZm5hbWUpICsgMworICovCisgICAgdm9pZAorYXBwZW5kX3JlZGlyKGJ1Ziwgb3B0LCBmbmFtZSkKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBjaGFyX3UJKm9wdDsKKyAgICBjaGFyX3UJKmZuYW1lOworeworICAgIGNoYXJfdQkqcDsKKworICAgIGJ1ZiArPSBTVFJMRU4oYnVmKTsKKyAgICAvKiBmaW5kICIlcyIsIHNraXBwaW5nICIlJSIgKi8KKyAgICBmb3IgKHAgPSBvcHQ7IChwID0gdmltX3N0cmNocihwLCAnJScpKSAhPSBOVUxMOyArK3ApCisJaWYgKHBbMV0gPT0gJ3MnKQorCSAgICBicmVhazsKKyAgICBpZiAocCAhPSBOVUxMKQorICAgIHsKKwkqYnVmID0gJyAnOyAvKiBub3QgcmVhbGx5IG5lZWRlZD8gTm90IHdpdGggc2gsIGtzaCBvciBiYXNoICovCisJc3ByaW50ZigoY2hhciAqKWJ1ZiArIDEsIChjaGFyICopb3B0LCAoY2hhciAqKWZuYW1lKTsKKyAgICB9CisgICAgZWxzZQorCXNwcmludGYoKGNoYXIgKilidWYsCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorIyBpZm5kZWYgUklTQ09TCisJCW9wdCAhPSBwX3NwID8gIiAlcyVzIiA6CisjIGVuZGlmCisJCSIgJXMgJXMiLAorI2Vsc2UKKyMgaWZuZGVmIFJJU0NPUworCQkiICVzJXMiLAkvKiAiID4gJXMiIGNhdXNlcyBwcm9ibGVtcyBvbiBBbWlnYSAqLworIyBlbHNlCisJCSIgJXMgJXMiLAkvKiBCdXQgaXMgbmVlZGVkIGZvciAnc2hlbGxwaXBlJyBhbmQgUklTQyBPUyAqLworIyBlbmRpZgorI2VuZGlmCisJCShjaGFyICopb3B0LCAoY2hhciAqKWZuYW1lKTsKK30KKworI2lmZGVmIEZFQVRfVklNSU5GTworCitzdGF0aWMgaW50IG5vX3ZpbWluZm8gX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50ICB2aW1pbmZvX2VycmNudDsKKworICAgIHN0YXRpYyBpbnQKK25vX3ZpbWluZm8oKQoreworICAgIC8qICJ2aW0gLWkgTk9ORSIgZG9lcyBub3QgcmVhZCBvciB3cml0ZSBhIHZpbWluZm8gZmlsZSAqLworICAgIHJldHVybiAodXNlX3ZpbWluZm8gIT0gTlVMTCAmJiBTVFJDTVAodXNlX3ZpbWluZm8sICJOT05FIikgPT0gMCk7Cit9CisKKy8qCisgKiBSZXBvcnQgYW4gZXJyb3IgZm9yIHJlYWRpbmcgYSB2aW1pbmZvIGZpbGUuCisgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGVycm9ycy4JV2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuIDEwLCByZXR1cm4gVFJVRS4KKyAqLworICAgIGludAordmltaW5mb19lcnJvcihlcnJudW0sIG1lc3NhZ2UsIGxpbmUpCisgICAgY2hhciAgICAqZXJybnVtOworICAgIGNoYXIgICAgKm1lc3NhZ2U7CisgICAgY2hhcl91ICAqbGluZTsKK3sKKyAgICBzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCIlc3ZpbWluZm86ICVzIGluIGxpbmU6ICIpLCBlcnJudW0sIG1lc3NhZ2UpOworICAgIFNUUk5DQVQoSU9idWZmLCBsaW5lLCBJT1NJWkUgLSBTVFJMRU4oSU9idWZmKSk7CisgICAgZW1zZyhJT2J1ZmYpOworICAgIGlmICgrK3ZpbWluZm9fZXJyY250ID49IDEwKQorICAgIHsKKwlFTVNHKF8oIkUxMzY6IHZpbWluZm86IFRvbyBtYW55IGVycm9ycywgc2tpcHBpbmcgcmVzdCBvZiBmaWxlIikpOworCXJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiByZWFkX3ZpbWluZm8oKSAtLSBSZWFkIHRoZSB2aW1pbmZvIGZpbGUuICBSZWdpc3RlcnMgZXRjLiB3aGljaCBhcmUgYWxyZWFkeQorICogc2V0IGFyZSBub3Qgb3Zlci13cml0dGVuIHVubGVzcyBmb3JjZSBpcyBUUlVFLiAtLSB3ZWJiCisgKi8KKyAgICBpbnQKK3JlYWRfdmltaW5mbyhmaWxlLCB3YW50X2luZm8sIHdhbnRfbWFya3MsIGZvcmNlaXQpCisgICAgY2hhcl91CSpmaWxlOworICAgIGludAkJd2FudF9pbmZvOworICAgIGludAkJd2FudF9tYXJrczsKKyAgICBpbnQJCWZvcmNlaXQ7Cit7CisgICAgRklMRQkqZnA7CisgICAgY2hhcl91CSpmbmFtZTsKKworICAgIGlmIChub192aW1pbmZvKCkpCisJcmV0dXJuIEZBSUw7CisKKyAgICBmbmFtZSA9IHZpbWluZm9fZmlsZW5hbWUoZmlsZSk7CSAgICAvKiBtYXkgc2V0IHRvIGRlZmF1bHQgaWYgTlVMTCAqLworICAgIGlmIChmbmFtZSA9PSBOVUxMKQorCXJldHVybiBGQUlMOworICAgIGZwID0gbWNoX2ZvcGVuKChjaGFyICopZm5hbWUsIFJFQURCSU4pOworCisgICAgaWYgKHBfdmVyYm9zZSA+IDApCisgICAgeworCWNoYXJfdQkqczsKKworCXMgPSBmbmFtZTsKKwlpZiAoU1RSTEVOKGZuYW1lKSA+IElPU0laRSAtIDEwMCkKKwkgICAgcyA9IGZuYW1lICsgU1RSTEVOKGZuYW1lKSAtIChJT1NJWkUgLSAxMDApOworCXNtc2coKGNoYXJfdSAqKV8oIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIpLCBzLAorCQkgICAgd2FudF9pbmZvID8gXygiIGluZm8iKSA6ICIiLAorCQkgICAgd2FudF9tYXJrcyA/IF8oIiBtYXJrcyIpIDogIiIsCisJCSAgICBmcCA9PSBOVUxMID8gXygiIEZBSUxFRCIpIDogIiIpOworICAgIH0KKworICAgIHZpbV9mcmVlKGZuYW1lKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIHZpbWluZm9fZXJyY250ID0gMDsKKyAgICBkb192aW1pbmZvKGZwLCBOVUxMLCB3YW50X2luZm8sIHdhbnRfbWFya3MsIGZvcmNlaXQpOworCisgICAgZmNsb3NlKGZwKTsKKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIHdyaXRlX3ZpbWluZm8oKSAtLSBXcml0ZSB0aGUgdmltaW5mbyBmaWxlLiAgVGhlIG9sZCBvbmUgaXMgcmVhZCBpbiBmaXJzdCBzbworICogdGhhdCBlZmZlY3RpdmVseSBhIG1lcmdlIG9mIGN1cnJlbnQgaW5mbyBhbmQgb2xkIGluZm8gaXMgZG9uZS4gIFRoaXMgYWxsb3dzCisgKiBtdWx0aXBsZSB2aW1zIHRvIHJ1biBzaW11bHRhbmVvdXNseSwgd2l0aG91dCBsb3NpbmcgYW55IG1hcmtzIGV0Yy4gIElmCisgKiBmb3JjZWl0IGlzIFRSVUUsIHRoZW4gdGhlIG9sZCBmaWxlIGlzIG5vdCByZWFkIGluLCBhbmQgb25seSBpbnRlcm5hbCBpbmZvIGlzCisgKiB3cml0dGVuIHRvIHRoZSBmaWxlLiAtLSB3ZWJiCisgKi8KKyAgICB2b2lkCit3cml0ZV92aW1pbmZvKGZpbGUsIGZvcmNlaXQpCisgICAgY2hhcl91CSpmaWxlOworICAgIGludAkJZm9yY2VpdDsKK3sKKyAgICBjaGFyX3UJKmZuYW1lOworICAgIEZJTEUJKmZwX2luID0gTlVMTDsJLyogaW5wdXQgdmltaW5mbyBmaWxlLCBpZiBhbnkgKi8KKyAgICBGSUxFCSpmcF9vdXQgPSBOVUxMOwkvKiBvdXRwdXQgdmltaW5mbyBmaWxlICovCisgICAgY2hhcl91CSp0ZW1wbmFtZSA9IE5VTEw7CS8qIG5hbWUgb2YgdGVtcCB2aW1pbmZvIGZpbGUgKi8KKyAgICBzdHJ1Y3Qgc3RhdAlzdF9uZXc7CQkvKiBtY2hfc3RhdCgpIG9mIHBvdGVudGlhbCBuZXcgZmlsZSAqLworICAgIGNoYXJfdQkqd3A7CisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykKKyAgICBtb2RlX3QJdW1hc2tfc2F2ZTsKKyNlbmRpZgorI2lmZGVmIFVOSVgKKyAgICBpbnQJCXNob3J0bmFtZSA9IEZBTFNFOwkvKiB1c2UgOC4zIGZpbGUgbmFtZSAqLworICAgIHN0cnVjdCBzdGF0CXN0X29sZDsJCS8qIG1jaF9zdGF0KCkgb2YgZXhpc3RpbmcgdmltaW5mbyBmaWxlICovCisjZW5kaWYKKworICAgIGlmIChub192aW1pbmZvKCkpCisJcmV0dXJuOworCisgICAgZm5hbWUgPSB2aW1pbmZvX2ZpbGVuYW1lKGZpbGUpOwkvKiBtYXkgc2V0IHRvIGRlZmF1bHQgaWYgTlVMTCAqLworICAgIGlmIChmbmFtZSA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGZwX2luID0gbWNoX2ZvcGVuKChjaGFyICopZm5hbWUsIFJFQURCSU4pOworICAgIGlmIChmcF9pbiA9PSBOVUxMKQorICAgIHsKKwkvKiBpZiBpdCBkb2VzIGV4aXN0LCBidXQgd2UgY2FuJ3QgcmVhZCBpdCwgZG9uJ3QgdHJ5IHdyaXRpbmcgKi8KKwlpZiAobWNoX3N0YXQoKGNoYXIgKilmbmFtZSwgJnN0X25ldykgPT0gMCkKKwkgICAgZ290byBlbmQ7CisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykKKwkvKgorCSAqIEZvciBVbml4IHdlIGNyZWF0ZSB0aGUgLnZpbWluZm8gbm9uLWFjY2Vzc2libGUgZm9yIG90aGVycywKKwkgKiBiZWNhdXNlIGl0IG1heSBjb250YWluIHRleHQgZnJvbSBub24tYWNjZXNzaWJsZSBkb2N1bWVudHMuCisJICovCisJdW1hc2tfc2F2ZSA9IHVtYXNrKDA3Nyk7CisjZW5kaWYKKwlmcF9vdXQgPSBtY2hfZm9wZW4oKGNoYXIgKilmbmFtZSwgV1JJVEVCSU4pOworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpCisJKHZvaWQpdW1hc2sodW1hc2tfc2F2ZSk7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIFRoZXJlIGlzIGFuIGV4aXN0aW5nIHZpbWluZm8gZmlsZS4gIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHRvCisJICogd3JpdGUgdGhlIG5ldyB2aW1pbmZvIGludG8sIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKKwkgKiBleGlzdGluZyB2aW1pbmZvIGZpbGUsIHdoaWNoIHdpbGwgYmUgcmVuYW1lZCBsYXRlci4KKwkgKi8KKyNpZmRlZiBVTklYCisJLyoKKwkgKiBGb3IgVW5peCB3ZSBjaGVjayB0aGUgb3duZXIgb2YgdGhlIGZpbGUuICBJdCdzIG5vdCB2ZXJ5IG5pY2UgdG8KKwkgKiBvdmVyd3JpdGUgYSB1c2VyJ3MgdmltaW5mbyBmaWxlIGFmdGVyIGEgInN1IHJvb3QiLCB3aXRoIGEKKwkgKiB2aW1pbmZvIGZpbGUgdGhhdCB0aGUgdXNlciBjYW4ndCByZWFkLgorCSAqLworCXN0X29sZC5zdF9kZXYgPSBzdF9vbGQuc3RfaW5vID0gMDsKKwlzdF9vbGQuc3RfbW9kZSA9IDA2MDA7CisJaWYgKG1jaF9zdGF0KChjaGFyICopZm5hbWUsICZzdF9vbGQpID09IDAgJiYgZ2V0dWlkKCkgJiYKKwkJIShzdF9vbGQuc3RfdWlkID09IGdldHVpZCgpCisJCQk/IChzdF9vbGQuc3RfbW9kZSAmIDAyMDApCisJCQk6IChzdF9vbGQuc3RfZ2lkID09IGdldGdpZCgpCisJCQkJPyAoc3Rfb2xkLnN0X21vZGUgJiAwMDIwKQorCQkJCTogKHN0X29sZC5zdF9tb2RlICYgMDAwMikpKSkKKwl7CisJICAgIGludAl0dDsKKworCSAgICAvKiBhdm9pZCBhIHdhaXRfcmV0dXJuIGZvciB0aGlzIG1lc3NhZ2UsIGl0J3MgYW5ub3lpbmcgKi8KKwkgICAgdHQgPSBtc2dfZGlkYW55OworCSAgICBFTVNHMihfKCJFMTM3OiBWaW1pbmZvIGZpbGUgaXMgbm90IHdyaXRhYmxlOiAlcyIpLCBmbmFtZSk7CisJICAgIG1zZ19kaWRhbnkgPSB0dDsKKwkgICAgZ290byBlbmQ7CisJfQorI2VuZGlmCisKKwkvKgorCSAqIE1ha2UgdGVtcG5hbWUuCisJICogTWF5IHRyeSB0d2ljZTogT25jZSBub3JtYWwgYW5kIG9uY2Ugd2l0aCBzaG9ydG5hbWUgc2V0LCBqdXN0IGluCisJICogY2FzZSBzb21lYm9keSBwdXRzIGhpcyB2aW1pbmZvIGZpbGUgaW4gYW4gOC4zIGZpbGVzeXN0ZW0uCisJICovCisJZm9yICg7OykKKwl7CisJICAgIHRlbXBuYW1lID0gYnVmX21vZG5hbWUoCisjaWZkZWYgVU5JWAorCQkJCSAgICBzaG9ydG5hbWUsCisjZWxzZQorIyBpZmRlZiBTSE9SVF9GTkFNRQorCQkJCSAgICBUUlVFLAorIyBlbHNlCisjICBpZmRlZiBGRUFUX0dVSV9XMzIKKwkJCQkgICAgZ3VpX2lzX3dpbjMycygpLAorIyAgZWxzZQorCQkJCSAgICBGQUxTRSwKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKwkJCQkgICAgZm5hbWUsCisjaWZkZWYgVk1TCisJCQkJICAgIChjaGFyX3UgKikiLXRtcCIsCisjZWxzZQorIyBpZmRlZiBSSVNDT1MKKwkJCQkgICAgKGNoYXJfdSAqKSIvdG1wIiwKKyMgZWxzZQorCQkJCSAgICAoY2hhcl91ICopIi50bXAiLAorIyBlbmRpZgorI2VuZGlmCisJCQkJICAgIEZBTFNFKTsKKwkgICAgaWYgKHRlbXBuYW1lID09IE5VTEwpCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCWJyZWFrOworCisJICAgIC8qCisJICAgICAqIENoZWNrIGlmIHRlbXBmaWxlIGFscmVhZHkgZXhpc3RzLiAgTmV2ZXIgb3ZlcndyaXRlIGFuCisJICAgICAqIGV4aXN0aW5nIGZpbGUhCisJICAgICAqLworCSAgICBpZiAobWNoX3N0YXQoKGNoYXIgKil0ZW1wbmFtZSwgJnN0X25ldykgPT0gMCkKKwkgICAgeworI2lmZGVmIFVOSVgKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGVtcGZpbGUgaXMgc2FtZSBhcyBvcmlnaW5hbCBmaWxlLiAgTWF5IGhhcHBlbgorCQkgKiB3aGVuIG1vZG5hbWUoKSBnYXZlIHRoZSBzYW1lIGZpbGUgYmFjay4gIEUuZy4gIHNpbGx5CisJCSAqIGxpbmssIG9yIGZpbGUgbmFtZS1sZW5ndGggcmVhY2hlZC4gIFRyeSBhZ2FpbiB3aXRoCisJCSAqIHNob3J0bmFtZSBzZXQuCisJCSAqLworCQlpZiAoIXNob3J0bmFtZSAmJiBzdF9uZXcuc3RfZGV2ID09IHN0X29sZC5zdF9kZXYgJiYKKwkJCXN0X25ldy5zdF9pbm8gPT0gc3Rfb2xkLnN0X2lubykKKwkJeworCQkgICAgdmltX2ZyZWUodGVtcG5hbWUpOworCQkgICAgdGVtcG5hbWUgPSBOVUxMOworCQkgICAgc2hvcnRuYW1lID0gVFJVRTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisjZW5kaWYKKwkJLyoKKwkJICogVHJ5IGFub3RoZXIgbmFtZS4gIENoYW5nZSBvbmUgY2hhcmFjdGVyLCBqdXN0IGJlZm9yZQorCQkgKiB0aGUgZXh0ZW5zaW9uLiAgVGhpcyBzaG91bGQgYWxzbyB3b3JrIGZvciBhbiA4LjMKKwkJICogZmlsZSBuYW1lLCB3aGVuIGFmdGVyIGFkZGluZyB0aGUgZXh0ZW5zaW9uIGl0IHN0aWxsIGlzCisJCSAqIHRoZSBzYW1lIGZpbGUgYXMgdGhlIG9yaWdpbmFsLgorCQkgKi8KKwkJd3AgPSB0ZW1wbmFtZSArIFNUUkxFTih0ZW1wbmFtZSkgLSA1OworCQlpZiAod3AgPCBnZXR0YWlsKHRlbXBuYW1lKSkJICAgIC8qIGVtcHR5IGZpbGUgbmFtZT8gKi8KKwkJICAgIHdwID0gZ2V0dGFpbCh0ZW1wbmFtZSk7CisJCWZvciAoKndwID0gJ3onOyBtY2hfc3RhdCgoY2hhciAqKXRlbXBuYW1lLCAmc3RfbmV3KSA9PSAwOworCQkJCQkJCQkgICAgLS0qd3ApCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBUaGV5IGFsbCBleGlzdD8gIE11c3QgYmUgc29tZXRoaW5nIHdyb25nISBEb24ndAorCQkgICAgICogd3JpdGUgdGhlIHZpbWluZm8gZmlsZSB0aGVuLgorCQkgICAgICovCisJCSAgICBpZiAoKndwID09ICdhJykKKwkJICAgIHsKKwkJCXZpbV9mcmVlKHRlbXBuYW1lKTsKKwkJCXRlbXBuYW1lID0gTlVMTDsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCisJaWYgKHRlbXBuYW1lICE9IE5VTEwpCisJeworCSAgICBmcF9vdXQgPSBtY2hfZm9wZW4oKGNoYXIgKil0ZW1wbmFtZSwgV1JJVEVCSU4pOworCisJICAgIC8qCisJICAgICAqIElmIHdlIGNhbid0IGNyZWF0ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnksIHRyeSBjcmVhdGluZyBhCisJICAgICAqICJub3JtYWwiIHRlbXAgZmlsZS4KKwkgICAgICovCisJICAgIGlmIChmcF9vdXQgPT0gTlVMTCkKKwkgICAgeworCQl2aW1fZnJlZSh0ZW1wbmFtZSk7CisJCWlmICgodGVtcG5hbWUgPSB2aW1fdGVtcG5hbWUoJ28nKSkgIT0gTlVMTCkKKwkJICAgIGZwX291dCA9IG1jaF9mb3BlbigoY2hhciAqKXRlbXBuYW1lLCBXUklURUJJTik7CisJICAgIH0KKyNpZmRlZiBVTklYCisJICAgIC8qCisJICAgICAqIFNldCBmaWxlIHByb3RlY3Rpb24gc2FtZSBhcyBvcmlnaW5hbCBmaWxlLCBidXQgc3RyaXAgcy1iaXQKKwkgICAgICogYW5kIG1ha2Ugc3VyZSB0aGUgb3duZXIgY2FuIHJlYWQvd3JpdGUgaXQuCisJICAgICAqLworCSAgICBpZiAoZnBfb3V0ICE9IE5VTEwpCisJICAgIHsKKwkJKHZvaWQpbWNoX3NldHBlcm0odGVtcG5hbWUsCisJCQkJICAobG9uZykoKHN0X29sZC5zdF9tb2RlICYgMDc3NykgfCAwNjAwKSk7CisJCS8qIHRoaXMgb25seSB3b3JrcyBmb3Igcm9vdDogKi8KKwkJKHZvaWQpY2hvd24oKGNoYXIgKil0ZW1wbmFtZSwgc3Rfb2xkLnN0X3VpZCwgc3Rfb2xkLnN0X2dpZCk7CisJICAgIH0KKyNlbmRpZgorCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHRoZSBuZXcgdmltaW5mbyBmaWxlIGNhbiBiZSB3cml0dGVuIHRvLgorICAgICAqLworICAgIGlmIChmcF9vdXQgPT0gTlVMTCkKKyAgICB7CisJRU1TRzIoXygiRTEzODogQ2FuJ3Qgd3JpdGUgdmltaW5mbyBmaWxlICVzISIpLAorCQkgICAgICAgKGZwX2luID09IE5VTEwgfHwgdGVtcG5hbWUgPT0gTlVMKSA/IGZuYW1lIDogdGVtcG5hbWUpOworCWlmIChmcF9pbiAhPSBOVUxMKQorCSAgICBmY2xvc2UoZnBfaW4pOworCWdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChwX3ZlcmJvc2UgPiAwKQorCW1zZ19zdHIoKGNoYXJfdSAqKV8oIldyaXRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiIpLCBmbmFtZSk7CisKKyAgICB2aW1pbmZvX2VycmNudCA9IDA7CisgICAgZG9fdmltaW5mbyhmcF9pbiwgZnBfb3V0LCAhZm9yY2VpdCwgIWZvcmNlaXQsIEZBTFNFKTsKKworICAgIGZjbG9zZShmcF9vdXQpOwkgICAgLyogZXJyb3JzIGFyZSBpZ25vcmVkICE/ICovCisgICAgaWYgKGZwX2luICE9IE5VTEwpCisgICAgeworCWZjbG9zZShmcF9pbik7CisJLyoKKwkgKiBJbiBjYXNlIG9mIGFuIGVycm9yLCBkb24ndCBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIHZpbWluZm8gZmlsZS4KKwkgKi8KKwlpZiAodmltaW5mb19lcnJjbnQgfHwgdmltX3JlbmFtZSh0ZW1wbmFtZSwgZm5hbWUpID09IC0xKQorCSAgICBtY2hfcmVtb3ZlKHRlbXBuYW1lKTsKKyAgICB9CitlbmQ6CisgICAgdmltX2ZyZWUoZm5hbWUpOworICAgIHZpbV9mcmVlKHRlbXBuYW1lKTsKK30KKworLyoKKyAqIEdldCB0aGUgdmltaW5mbyBmaWxlIG5hbWUgdG8gdXNlLgorICogSWYgImZpbGUiIGlzIGdpdmVuIGFuZCBub3QgZW1wdHksIHVzZSBpdCAoaGFzIGFscmVhZHkgYmVlbiBleHBhbmRlZCBieQorICogY21kbGluZSBmdW5jdGlvbnMpLgorICogT3RoZXJ3aXNlIHVzZSAiLWkgZmlsZV9uYW1lIiwgdmFsdWUgZnJvbSAndmltaW5mbycgb3IgdGhlIGRlZmF1bHQsIGFuZAorICogZXhwYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAqIFJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZy4gIE5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCit2aW1pbmZvX2ZpbGVuYW1lKGZpbGUpCisgICAgY2hhcl91CSpmaWxlOworeworICAgIGlmIChmaWxlID09IE5VTEwgfHwgKmZpbGUgPT0gTlVMKQorICAgIHsKKwlpZiAodXNlX3ZpbWluZm8gIT0gTlVMTCkKKwkgICAgZmlsZSA9IHVzZV92aW1pbmZvOworCWVsc2UgaWYgKChmaWxlID0gZmluZF92aW1pbmZvX3BhcmFtZXRlcignbicpKSA9PSBOVUxMIHx8ICpmaWxlID09IE5VTCkKKwl7CisjaWZkZWYgVklNSU5GT19GSUxFMgorCSAgICAvKiBkb24ndCB1c2UgJEhPTUUgd2hlbiBub3QgZGVmaW5lZCAodHVybmVkIGludG8gImM6LyIhKS4gKi8KKyMgaWZkZWYgVk1TCisJICAgIGlmIChtY2hfZ2V0ZW52KChjaGFyX3UgKikiU1lTJExPR0lOIikgPT0gTlVMTCkKKyMgZWxzZQorCSAgICBpZiAobWNoX2dldGVudigoY2hhcl91ICopIkhPTUUiKSA9PSBOVUxMKQorIyBlbmRpZgorCSAgICB7CisJCS8qIGRvbid0IHVzZSAkVklNIHdoZW4gbm90IGF2YWlsYWJsZS4gKi8KKwkJZXhwYW5kX2VudigoY2hhcl91ICopIiRWSU0iLCBOYW1lQnVmZiwgTUFYUEFUSEwpOworCQlpZiAoU1RSQ01QKCIkVklNIiwgTmFtZUJ1ZmYpICE9IDApICAvKiAkVklNIHdhcyBleHBhbmRlZCAqLworCQkgICAgZmlsZSA9IChjaGFyX3UgKilWSU1JTkZPX0ZJTEUyOworCQllbHNlCisJCSAgICBmaWxlID0gKGNoYXJfdSAqKVZJTUlORk9fRklMRTsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJZmlsZSA9IChjaGFyX3UgKilWSU1JTkZPX0ZJTEU7CisJfQorCWV4cGFuZF9lbnYoZmlsZSwgTmFtZUJ1ZmYsIE1BWFBBVEhMKTsKKwlmaWxlID0gTmFtZUJ1ZmY7CisgICAgfQorICAgIHJldHVybiB2aW1fc3Ryc2F2ZShmaWxlKTsKK30KKworLyoKKyAqIGRvX3ZpbWluZm8oKSAtLSBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSByZWFkX3ZpbWluZm8oKSAmIHdyaXRlX3ZpbWluZm8oKS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitkb192aW1pbmZvKGZwX2luLCBmcF9vdXQsIHdhbnRfaW5mbywgd2FudF9tYXJrcywgZm9yY2VfcmVhZCkKKyAgICBGSUxFCSpmcF9pbjsKKyAgICBGSUxFCSpmcF9vdXQ7CisgICAgaW50CQl3YW50X2luZm87CisgICAgaW50CQl3YW50X21hcmtzOworICAgIGludAkJZm9yY2VfcmVhZDsKK3sKKyAgICBpbnQJCWNvdW50ID0gMDsKKyAgICBpbnQJCWVvZiA9IEZBTFNFOworICAgIHZpcl9UCXZpcjsKKworICAgIGlmICgodmlyLnZpcl9saW5lID0gYWxsb2MoTFNJWkUpKSA9PSBOVUxMKQorCXJldHVybjsKKyAgICB2aXIudmlyX2ZkID0gZnBfaW47CisjaWZkZWYgRkVBVF9NQllURQorICAgIHZpci52aXJfY29udi52Y190eXBlID0gQ09OVl9OT05FOworI2VuZGlmCisKKyAgICBpZiAoZnBfaW4gIT0gTlVMTCkKKyAgICB7CisJaWYgKHdhbnRfaW5mbykKKwkgICAgZW9mID0gcmVhZF92aW1pbmZvX3VwX3RvX21hcmtzKCZ2aXIsIGZvcmNlX3JlYWQsIGZwX291dCAhPSBOVUxMKTsKKwllbHNlCisJICAgIC8qIFNraXAgaW5mbywgZmluZCBzdGFydCBvZiBtYXJrcyAqLworCSAgICB3aGlsZSAoIShlb2YgPSB2aW1pbmZvX3JlYWRsaW5lKCZ2aXIpKQorCQkgICAgJiYgdmlyLnZpcl9saW5lWzBdICE9ICc+JykKKwkJOworICAgIH0KKyAgICBpZiAoZnBfb3V0ICE9IE5VTEwpCisgICAgeworCS8qIFdyaXRlIHRoZSBpbmZvOiAqLworCWZwcmludGYoZnBfb3V0LCBfKCIjIFRoaXMgdmltaW5mbyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVmltICVzLlxuIiksCisJCQkJCQkJICBWSU1fVkVSU0lPTl9NRURJVU0pOworCWZwcmludGYoZnBfb3V0LCBfKCIjIFlvdSBtYXkgZWRpdCBpdCBpZiB5b3UncmUgY2FyZWZ1bCFcblxuIikpOworI2lmZGVmIEZFQVRfTUJZVEUKKwlmcHJpbnRmKGZwX291dCwgXygiIyBWYWx1ZSBvZiAnZW5jb2RpbmcnIHdoZW4gdGhpcyBmaWxlIHdhcyB3cml0dGVuXG4iKSk7CisJZnByaW50ZihmcF9vdXQsICIqZW5jb2Rpbmc9JXNcblxuIiwgcF9lbmMpOworI2VuZGlmCisJd3JpdGVfdmltaW5mb19zZWFyY2hfcGF0dGVybihmcF9vdXQpOworCXdyaXRlX3ZpbWluZm9fc3ViX3N0cmluZyhmcF9vdXQpOworI2lmZGVmIEZFQVRfQ01ESElTVAorCXdyaXRlX3ZpbWluZm9faGlzdG9yeShmcF9vdXQpOworI2VuZGlmCisJd3JpdGVfdmltaW5mb19yZWdpc3RlcnMoZnBfb3V0KTsKKyNpZmRlZiBGRUFUX0VWQUwKKwl3cml0ZV92aW1pbmZvX3Zhcmxpc3QoZnBfb3V0KTsKKyNlbmRpZgorCXdyaXRlX3ZpbWluZm9fZmlsZW1hcmtzKGZwX291dCk7CisJd3JpdGVfdmltaW5mb19idWZmZXJsaXN0KGZwX291dCk7CisJY291bnQgPSB3cml0ZV92aW1pbmZvX21hcmtzKGZwX291dCk7CisgICAgfQorICAgIGlmIChmcF9pbiAhPSBOVUxMICYmIHdhbnRfbWFya3MpCisJY29weV92aW1pbmZvX21hcmtzKCZ2aXIsIGZwX291dCwgY291bnQsIGVvZik7CisKKyAgICB2aW1fZnJlZSh2aXIudmlyX2xpbmUpOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAodmlyLnZpcl9jb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorCWNvbnZlcnRfc2V0dXAoJnZpci52aXJfY29udiwgTlVMTCwgTlVMTCk7CisjZW5kaWYKK30KKworLyoKKyAqIHJlYWRfdmltaW5mb191cF90b19tYXJrcygpIC0tIE9ubHkgY2FsbGVkIGZyb20gZG9fdmltaW5mbygpLiAgUmVhZHMgaW4gdGhlCisgKiBmaXJzdCBwYXJ0IG9mIHRoZSB2aW1pbmZvIGZpbGUgd2hpY2ggY29udGFpbnMgZXZlcnl0aGluZyBidXQgdGhlIG1hcmtzIHRoYXQKKyAqIGFyZSBsb2NhbCB0byBhIGZpbGUuICBSZXR1cm5zIFRSVUUgd2hlbiBlbmQtb2YtZmlsZSBpcyByZWFjaGVkLiAtLSB3ZWJiCisgKi8KKyAgICBzdGF0aWMgaW50CityZWFkX3ZpbWluZm9fdXBfdG9fbWFya3ModmlycCwgZm9yY2VpdCwgd3JpdGluZykKKyAgICB2aXJfVAkqdmlycDsKKyAgICBpbnQJCWZvcmNlaXQ7CisgICAgaW50CQl3cml0aW5nOworeworICAgIGludAkJZW9mOworICAgIGJ1Zl9UCSpidWY7CisKKyNpZmRlZiBGRUFUX0NNREhJU1QKKyAgICBwcmVwYXJlX3ZpbWluZm9faGlzdG9yeShmb3JjZWl0ID8gOTk5OSA6IDApOworI2VuZGlmCisgICAgZW9mID0gdmltaW5mb19yZWFkbGluZSh2aXJwKTsKKyAgICB3aGlsZSAoIWVvZiAmJiB2aXJwLT52aXJfbGluZVswXSAhPSAnPicpCisgICAgeworCXN3aXRjaCAodmlycC0+dmlyX2xpbmVbMF0pCisJeworCQkvKiBDaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBmdXR1cmUgZXhwYW5zaW9uLCBpZ25vcmVkIG5vdyAqLworCSAgICBjYXNlICcrJzogLyogIis0MCAvcGF0aC9kaXIgZmlsZSIsIGZvciBydW5uaW5nIHZpbSB3aXRob3V0IGFyZ3MgKi8KKwkgICAgY2FzZSAnfCc6IC8qIHRvIGJlIGRlZmluZWQgKi8KKwkgICAgY2FzZSAnXic6IC8qIHRvIGJlIGRlZmluZWQgKi8KKwkgICAgY2FzZSAnPCc6IC8qIGxvbmcgbGluZSAtIGlnbm9yZWQgKi8KKwkJLyogQSBjb21tZW50IG9yIGVtcHR5IGxpbmUuICovCisJICAgIGNhc2UgTlVMOgorCSAgICBjYXNlICdccic6CisJICAgIGNhc2UgJ1xuJzoKKwkgICAgY2FzZSAnIyc6CisJCWVvZiA9IHZpbWluZm9fcmVhZGxpbmUodmlycCk7CisJCWJyZWFrOworCSAgICBjYXNlICcqJzogLyogIiplbmNvZGluZz12YWx1ZSIgKi8KKwkJZW9mID0gdmltaW5mb19lbmNvZGluZyh2aXJwKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJyEnOiAvKiBnbG9iYWwgdmFyaWFibGUgKi8KKyNpZmRlZiBGRUFUX0VWQUwKKwkJZW9mID0gcmVhZF92aW1pbmZvX3Zhcmxpc3QodmlycCwgd3JpdGluZyk7CisjZWxzZQorCQllb2YgPSB2aW1pbmZvX3JlYWRsaW5lKHZpcnApOworI2VuZGlmCisJCWJyZWFrOworCSAgICBjYXNlICclJzogLyogZW50cnkgZm9yIGJ1ZmZlciBsaXN0ICovCisJCWVvZiA9IHJlYWRfdmltaW5mb19idWZmZXJsaXN0KHZpcnAsIHdyaXRpbmcpOworCQlicmVhazsKKwkgICAgY2FzZSAnIic6CisJCWVvZiA9IHJlYWRfdmltaW5mb19yZWdpc3Rlcih2aXJwLCBmb3JjZWl0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJy8nOgkgICAgLyogU2VhcmNoIHN0cmluZyAqLworCSAgICBjYXNlICcmJzoJICAgIC8qIFN1YnN0aXR1dGUgc2VhcmNoIHN0cmluZyAqLworCSAgICBjYXNlICd+JzoJICAgIC8qIExhc3Qgc2VhcmNoIHN0cmluZywgZm9sbG93ZWQgYnkgJy8nIG9yICcmJyAqLworCQllb2YgPSByZWFkX3ZpbWluZm9fc2VhcmNoX3BhdHRlcm4odmlycCwgZm9yY2VpdCk7CisJCWJyZWFrOworCSAgICBjYXNlICckJzoKKwkJZW9mID0gcmVhZF92aW1pbmZvX3N1Yl9zdHJpbmcodmlycCwgZm9yY2VpdCk7CisJCWJyZWFrOworCSAgICBjYXNlICc6JzoKKwkgICAgY2FzZSAnPyc6CisJICAgIGNhc2UgJz0nOgorCSAgICBjYXNlICdAJzoKKyNpZmRlZiBGRUFUX0NNREhJU1QKKwkJZW9mID0gcmVhZF92aW1pbmZvX2hpc3RvcnkodmlycCk7CisjZWxzZQorCQllb2YgPSB2aW1pbmZvX3JlYWRsaW5lKHZpcnApOworI2VuZGlmCisJCWJyZWFrOworCSAgICBjYXNlICctJzoKKwkgICAgY2FzZSAnXCcnOgorCQllb2YgPSByZWFkX3ZpbWluZm9fZmlsZW1hcmsodmlycCwgZm9yY2VpdCk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlpZiAodmltaW5mb19lcnJvcigiRTU3NTogIiwgXygiSWxsZWdhbCBzdGFydGluZyBjaGFyIiksCisJCQkgICAgdmlycC0+dmlyX2xpbmUpKQorCQkgICAgZW9mID0gVFJVRTsKKwkJZWxzZQorCQkgICAgZW9mID0gdmltaW5mb19yZWFkbGluZSh2aXJwKTsKKwkJYnJlYWs7CisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfQ01ESElTVAorICAgIC8qIEZpbmlzaCByZWFkaW5nIGhpc3RvcnkgaXRlbXMuICovCisgICAgZmluaXNoX3ZpbWluZm9faGlzdG9yeSgpOworI2VuZGlmCisKKyAgICAvKiBDaGFuZ2UgZmlsZSBuYW1lcyB0byBidWZmZXIgbnVtYmVycyBmb3IgZm1hcmtzLiAqLworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKwlmbWFya3NfY2hlY2tfbmFtZXMoYnVmKTsKKworICAgIHJldHVybiBlb2Y7Cit9CisKKy8qCisgKiBDb21wYXJlIHRoZSAnZW5jb2RpbmcnIHZhbHVlIGluIHRoZSB2aW1pbmZvIGZpbGUgd2l0aCB0aGUgY3VycmVudCB2YWx1ZSBvZgorICogJ2VuY29kaW5nJy4gIElmIGRpZmZlcmVudCBhbmQgdGhlICdjJyBmbGFnIGlzIGluICd2aW1pbmZvJywgc2V0dXAgZm9yCisgKiBjb252ZXJzaW9uIG9mIHRleHQgd2l0aCBpY29udigpIGluIHZpbWluZm9fcmVhZHN0cmluZygpLgorICovCisgICAgc3RhdGljIGludAordmltaW5mb19lbmNvZGluZyh2aXJwKQorICAgIHZpcl9UCSp2aXJwOworeworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpOworCisgICAgaWYgKGdldF92aW1pbmZvX3BhcmFtZXRlcignYycpICE9IDApCisgICAgeworCXAgPSB2aW1fc3RyY2hyKHZpcnAtPnZpcl9saW5lLCAnPScpOworCWlmIChwICE9IE5VTEwpCisJeworCSAgICAvKiByZW1vdmUgdHJhaWxpbmcgbmV3bGluZSAqLworCSAgICArK3A7CisJICAgIGZvciAoaSA9IDA7IHZpbV9pc3ByaW50YyhwW2ldKTsgKytpKQorCQk7CisJICAgIHBbaV0gPSBOVUw7CisKKwkgICAgY29udmVydF9zZXR1cCgmdmlycC0+dmlyX2NvbnYsIHAsIHBfZW5jKTsKKwl9CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHZpbWluZm9fcmVhZGxpbmUodmlycCk7Cit9CisKKy8qCisgKiBSZWFkIGEgbGluZSBmcm9tIHRoZSB2aW1pbmZvIGZpbGUuCisgKiBSZXR1cm5zIFRSVUUgZm9yIGVuZC1vZi1maWxlOworICovCisgICAgaW50Cit2aW1pbmZvX3JlYWRsaW5lKHZpcnApCisgICAgdmlyX1QJKnZpcnA7Cit7CisgICAgcmV0dXJuIHZpbV9mZ2V0cyh2aXJwLT52aXJfbGluZSwgTFNJWkUsIHZpcnAtPnZpcl9mZCk7Cit9CisKKy8qCisgKiBjaGVjayBzdHJpbmcgcmVhZCBmcm9tIHZpbWluZm8gZmlsZQorICogcmVtb3ZlICdcbicgYXQgdGhlIGVuZCBvZiB0aGUgbGluZQorICogLSByZXBsYWNlIENUUkwtViBDVFJMLVYgd2l0aCBDVFJMLVYKKyAqIC0gcmVwbGFjZSBDVFJMLVYgJ24nICAgIHdpdGggJ1xuJworICoKKyAqIENoZWNrIGZvciBhIGxvbmcgbGluZSBhcyB3cml0dGVuIGJ5IHZpbWluZm9fd3JpdGVzdHJpbmcoKS4KKyAqCisgKiBSZXR1cm4gdGhlIHN0cmluZyBpbiBhbGxvY2F0ZWQgbWVtb3J5IChOVUxMIHdoZW4gb3V0IG9mIG1lbW9yeSkuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIGNoYXJfdSAqCit2aW1pbmZvX3JlYWRzdHJpbmcodmlycCwgb2ZmLCBjb252ZXJ0KQorICAgIHZpcl9UCSp2aXJwOworICAgIGludAkJb2ZmOwkJICAgIC8qIG9mZnNldCBmb3IgdmlycC0+dmlyX2xpbmUgKi8KKyAgICBpbnQJCWNvbnZlcnQ7CSAgICAvKiBjb252ZXJ0IHRoZSBzdHJpbmcgKi8KK3sKKyAgICBjaGFyX3UJKnJldHZhbDsKKyAgICBjaGFyX3UJKnMsICpkOworICAgIGxvbmcJbGVuOworCisgICAgaWYgKHZpcnAtPnZpcl9saW5lW29mZl0gPT0gQ3RybF9WICYmIHZpbV9pc2RpZ2l0KHZpcnAtPnZpcl9saW5lW29mZiArIDFdKSkKKyAgICB7CisJbGVuID0gYXRvbCgoY2hhciAqKXZpcnAtPnZpcl9saW5lICsgb2ZmICsgMSk7CisJcmV0dmFsID0gbGFsbG9jKGxlbiwgVFJVRSk7CisJaWYgKHJldHZhbCA9PSBOVUxMKQorCXsKKwkgICAgLyogTGluZSB0b28gbG9uZz8gIEZpbGUgbWVzc2VkIHVwPyAgU2tpcCBuZXh0IGxpbmUuICovCisJICAgICh2b2lkKXZpbV9mZ2V0cyh2aXJwLT52aXJfbGluZSwgMTAsIHZpcnAtPnZpcl9mZCk7CisJICAgIHJldHVybiBOVUxMOworCX0KKwkodm9pZCl2aW1fZmdldHMocmV0dmFsLCAoaW50KWxlbiwgdmlycC0+dmlyX2ZkKTsKKwlzID0gcmV0dmFsICsgMTsJICAgIC8qIFNraXAgdGhlIGxlYWRpbmcgJzwnICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisJcmV0dmFsID0gdmltX3N0cnNhdmUodmlycC0+dmlyX2xpbmUgKyBvZmYpOworCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisJcyA9IHJldHZhbDsKKyAgICB9CisKKyAgICAvKiBDaGFuZ2UgQ1RSTC1WIENUUkwtViB0byBDVFJMLVYgYW5kIENUUkwtViBuIHRvIFxuIGluLXBsYWNlLiAqLworICAgIGQgPSByZXR2YWw7CisgICAgd2hpbGUgKCpzICE9IE5VTCAmJiAqcyAhPSAnXG4nKQorICAgIHsKKwlpZiAoc1swXSA9PSBDdHJsX1YgJiYgc1sxXSAhPSBOVUwpCisJeworCSAgICBpZiAoc1sxXSA9PSAnbicpCisJCSpkKysgPSAnXG4nOworCSAgICBlbHNlCisJCSpkKysgPSBDdHJsX1Y7CisJICAgIHMgKz0gMjsKKwl9CisJZWxzZQorCSAgICAqZCsrID0gKnMrKzsKKyAgICB9CisgICAgKmQgPSBOVUw7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGNvbnZlcnQgJiYgdmlycC0+dmlyX2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUgJiYgKnJldHZhbCAhPSBOVUwpCisgICAgeworCWQgPSBzdHJpbmdfY29udmVydCgmdmlycC0+dmlyX2NvbnYsIHJldHZhbCwgTlVMTCk7CisJaWYgKGQgIT0gTlVMTCkKKwl7CisJICAgIHZpbV9mcmVlKHJldHZhbCk7CisJICAgIHJldHZhbCA9IGQ7CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIHdyaXRlIHN0cmluZyB0byB2aW1pbmZvIGZpbGUKKyAqIC0gcmVwbGFjZSBDVFJMLVYgd2l0aCBDVFJMLVYgQ1RSTC1WCisgKiAtIHJlcGxhY2UgJ1xuJyAgIHdpdGggQ1RSTC1WICduJworICogLSBhZGQgYSAnXG4nIGF0IHRoZSBlbmQKKyAqCisgKiBGb3IgYSBsb25nIGxpbmU6CisgKiAtIHdyaXRlICIgQ1RSTC1WIDxsZW5ndGg+IFxuICIgaW4gZmlyc3QgbGluZQorICogLSB3cml0ZSAiIDwgPHN0cmluZz4gXG4gIgkgIGluIHNlY29uZCBsaW5lCisgKi8KKyAgICB2b2lkCit2aW1pbmZvX3dyaXRlc3RyaW5nKGZkLCBwKQorICAgIEZJTEUJKmZkOworICAgIGNoYXJfdQkqcDsKK3sKKyAgICBpbnQJCWM7CisgICAgY2hhcl91CSpzOworICAgIGludAkJbGVuID0gMDsKKworICAgIGZvciAocyA9IHA7ICpzICE9IE5VTDsgKytzKQorICAgIHsKKwlpZiAoKnMgPT0gQ3RybF9WIHx8ICpzID09ICdcbicpCisJICAgICsrbGVuOworCSsrbGVuOworICAgIH0KKworICAgIC8qIElmIHRoZSBzdHJpbmcgd2lsbCBiZSB0b28gbG9uZywgd3JpdGUgaXRzIGxlbmd0aCBhbmQgcHV0IGl0IGluIHRoZSBuZXh0CisgICAgICogbGluZS4gIFRha2UgaW50byBhY2NvdW50IHRoYXQgc29tZSByb29tIGlzIG5lZWRlZCBmb3Igd2hhdCBjb21lcyBiZWZvcmUKKyAgICAgKiB0aGUgc3RyaW5nIChlLmcuLCB2YXJpYWJsZSBuYW1lKS4gIEFkZCBzb21ldGhpbmcgdG8gdGhlIGxlbmd0aCBmb3IgdGhlCisgICAgICogJzwnLCBOTCBhbmQgdHJhaWxpbmcgTlVMLiAqLworICAgIGlmIChsZW4gPiBMU0laRSAvIDIpCisJZnByaW50ZihmZCwgSUZfRUIoIlwwMjYlZFxuPCIsIENUUkxfVl9TVFIgIiVkXG48IiksIGxlbiArIDMpOworCisgICAgd2hpbGUgKChjID0gKnArKykgIT0gTlVMKQorICAgIHsKKwlpZiAoYyA9PSBDdHJsX1YgfHwgYyA9PSAnXG4nKQorCXsKKwkgICAgcHV0YyhDdHJsX1YsIGZkKTsKKwkgICAgaWYgKGMgPT0gJ1xuJykKKwkJYyA9ICduJzsKKwl9CisJcHV0YyhjLCBmZCk7CisgICAgfQorICAgIHB1dGMoJ1xuJywgZmQpOworfQorI2VuZGlmIC8qIEZFQVRfVklNSU5GTyAqLworCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgIjpmaXhkZWwiLCBhbHNvIHVzZWQgYnkgZ2V0X3N0dHkoKS4KKyAqICA8QlM+ICAgIHJlc3VsdGluZyA8RGVsPgorICogICBePwkJXkgKKyAqIG5vdCBePwlePworICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitkb19maXhkZWwoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UgICpwOworCisgICAgcCA9IGZpbmRfdGVybWNvZGUoKGNoYXJfdSAqKSJrYiIpOworICAgIGFkZF90ZXJtY29kZSgoY2hhcl91ICopImtEIiwgcCAhPSBOVUxMCisJICAgICYmICpwID09IERFTCA/IChjaGFyX3UgKilDVFJMX0hfU1RSIDogREVMX1NUUiwgRkFMU0UpOworfQorCisgICAgdm9pZAorcHJpbnRfbGluZV9ub19wcmVmaXgobG51bSwgdXNlX251bWJlcikKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJdXNlX251bWJlcjsKK3sKKyAgICBjaGFyX3UJbnVtYnVmWzIwXTsKKworICAgIGlmIChjdXJ3aW4tPndfcF9udSB8fCB1c2VfbnVtYmVyKQorICAgIHsKKwlzcHJpbnRmKChjaGFyICopbnVtYnVmLCAiJTdsZCAiLCAobG9uZylsbnVtKTsKKwltc2dfcHV0c19hdHRyKG51bWJ1ZiwgaGxfYXR0cihITEZfTikpOwkvKiBIaWdobGlnaHQgbGluZSBucnMgKi8KKyAgICB9CisgICAgbXNnX3BydF9saW5lKG1sX2dldChsbnVtKSk7Cit9CisKKy8qCisgKiBQcmludCBhIHRleHQgbGluZS4gIEFsc28gaW4gc2lsZW50IG1vZGUgKCJleCAtcyIpLgorICovCisgICAgdm9pZAorcHJpbnRfbGluZShsbnVtLCB1c2VfbnVtYmVyKQorICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQl1c2VfbnVtYmVyOworeworICAgIGludAkJc2F2ZV9zaWxlbnQgPSBzaWxlbnRfbW9kZTsKKworICAgIHNpbGVudF9tb2RlID0gRkFMU0U7CisgICAgbXNnX3N0YXJ0KCk7CisgICAgcHJpbnRfbGluZV9ub19wcmVmaXgobG51bSwgdXNlX251bWJlcik7CisgICAgaWYgKHNhdmVfc2lsZW50KQorICAgIHsKKwltc2dfcHV0Y2hhcignXG4nKTsKKwljdXJzb3Jfb24oKTsJCS8qIG1zZ19zdGFydCgpIHN3aXRjaGVzIGl0IG9mZiAqLworCW91dF9mbHVzaCgpOworCXNpbGVudF9tb2RlID0gc2F2ZV9zaWxlbnQ7CisgICAgfQorfQorCisvKgorICogIjpmaWxlWyFdIFtmbmFtZV0iLgorICovCisgICAgdm9pZAorZXhfZmlsZShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGNoYXJfdQkqZm5hbWUsICpzZm5hbWUsICp4Zm5hbWU7CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIGlmICgqZWFwLT5hcmcgIT0gTlVMKQorICAgIHsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwlidWYgPSBjdXJidWY7CisJYXBwbHlfYXV0b2NtZHMoRVZFTlRfQlVGRklMRVBSRSwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisJLyogYnVmZmVyIGNoYW5nZWQsIGRvbid0IGNoYW5nZSBuYW1lIG5vdyAqLworCWlmIChidWYgIT0gY3VyYnVmKQorCSAgICByZXR1cm47CisjIGlmZGVmIEZFQVRfRVZBTAorCWlmIChhYm9ydGluZygpKQkgICAgLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCisJICAgIHJldHVybjsKKyMgZW5kaWYKKyNlbmRpZgorCS8qCisJICogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIHdpbGwgYmUgY2hhbmdlZC4KKwkgKiBBIG5ldyAodW5saXN0ZWQpIGJ1ZmZlciBlbnRyeSBuZWVkcyB0byBiZSBtYWRlIHRvIGhvbGQgdGhlIG9sZCBmaWxlCisJICogbmFtZSwgd2hpY2ggd2lsbCBiZWNvbWUgdGhlIGFsdGVybmF0ZSBmaWxlIG5hbWUuCisJICovCisJZm5hbWUgPSBjdXJidWYtPmJfZmZuYW1lOworCXNmbmFtZSA9IGN1cmJ1Zi0+Yl9zZm5hbWU7CisJeGZuYW1lID0gY3VyYnVmLT5iX2ZuYW1lOworCWN1cmJ1Zi0+Yl9mZm5hbWUgPSBOVUxMOworCWN1cmJ1Zi0+Yl9zZm5hbWUgPSBOVUxMOworCWlmIChzZXRmbmFtZShjdXJidWYsIGVhcC0+YXJnLCBOVUxMLCBUUlVFKSA9PSBGQUlMKQorCXsKKwkgICAgY3VyYnVmLT5iX2ZmbmFtZSA9IGZuYW1lOworCSAgICBjdXJidWYtPmJfc2ZuYW1lID0gc2ZuYW1lOworCSAgICByZXR1cm47CisJfQorCWN1cmJ1Zi0+Yl9mbGFncyB8PSBCRl9OT1RFRElURUQ7CisJYnVmID0gYnVmbGlzdF9uZXcoZm5hbWUsIHhmbmFtZSwgY3Vyd2luLT53X2N1cnNvci5sbnVtLCAwKTsKKwlpZiAoYnVmICE9IE5VTEwpCisJICAgIGN1cndpbi0+d19hbHRfZm51bSA9IGJ1Zi0+Yl9mbnVtOworCXZpbV9mcmVlKGZuYW1lKTsKKwl2aW1fZnJlZShzZm5hbWUpOworI2lmZGVmIEZFQVRfQVVUT0NNRAorCWFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRkZJTEVQT1NULCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKKyNlbmRpZgorICAgIH0KKyAgICAvKiBwcmludCBmdWxsIGZpbGUgbmFtZSBpZiA6Y2QgdXNlZCAqLworICAgIGZpbGVpbmZvKEZBTFNFLCBGQUxTRSwgZWFwLT5mb3JjZWl0KTsKK30KKworLyoKKyAqICI6dXBkYXRlIi4KKyAqLworICAgIHZvaWQKK2V4X3VwZGF0ZShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGlmIChjdXJidWZJc0NoYW5nZWQoKSkKKwkodm9pZClkb193cml0ZShlYXApOworfQorCisvKgorICogIjp3cml0ZSIgYW5kICI6c2F2ZWFzIi4KKyAqLworICAgIHZvaWQKK2V4X3dyaXRlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKGVhcC0+dXNlZmlsdGVyKQkJLyogaW5wdXQgbGluZXMgdG8gc2hlbGwgY29tbWFuZCAqLworCWRvX2JhbmcoMSwgZWFwLCBGQUxTRSwgVFJVRSwgRkFMU0UpOworICAgIGVsc2UKKwkodm9pZClkb193cml0ZShlYXApOworfQorCisvKgorICogd3JpdGUgY3VycmVudCBidWZmZXIgdG8gZmlsZSAnZWFwLT5hcmcnCisgKiBpZiAnZWFwLT5hcHBlbmQnIGlzIFRSVUUsIGFwcGVuZCB0byB0aGUgZmlsZQorICoKKyAqIGlmICplYXAtPmFyZyA9PSBOVUwgd3JpdGUgdG8gY3VycmVudCBmaWxlCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50Citkb193cml0ZShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJb3RoZXI7CisgICAgY2hhcl91CSpmbmFtZSA9IE5VTEw7CQkvKiBpbml0IHRvIHNodXQgdXAgZ2NjICovCisgICAgY2hhcl91CSpmZm5hbWU7CisgICAgaW50CQlyZXR2YWwgPSBGQUlMOworICAgIGNoYXJfdQkqZnJlZV9mbmFtZSA9IE5VTEw7CisjaWZkZWYgRkVBVF9CUk9XU0UKKyAgICBjaGFyX3UJKmJyb3dzZV9maWxlID0gTlVMTDsKKyNlbmRpZgorICAgIGJ1Zl9UCSphbHRfYnVmID0gTlVMTDsKKworICAgIGlmIChub3Rfd3JpdGluZygpKQkJLyogY2hlY2sgJ3dyaXRlJyBvcHRpb24gKi8KKwlyZXR1cm4gRkFJTDsKKworICAgIGZmbmFtZSA9IGVhcC0+YXJnOworI2lmZGVmIEZFQVRfQlJPV1NFCisgICAgaWYgKGNtZG1vZC5icm93c2UpCisgICAgeworCWJyb3dzZV9maWxlID0gZG9fYnJvd3NlKFRSVUUsIChjaGFyX3UgKilfKCJTYXZlIEFzIiksIGZmbmFtZSwKKwkJCQkJCSAgICBOVUxMLCBOVUxMLCBOVUxMLCBjdXJidWYpOworCWlmIChicm93c2VfZmlsZSA9PSBOVUxMKQorCSAgICBnb3RvIHRoZWVuZDsKKwlmZm5hbWUgPSBicm93c2VfZmlsZTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoKmZmbmFtZSA9PSBOVUwpCisgICAgeworCWlmIChlYXAtPmNtZGlkeCA9PSBDTURfc2F2ZWFzKQorCXsKKwkgICAgRU1TRyhfKGVfYXJncmVxKSk7CisJICAgIGdvdG8gdGhlZW5kOworCX0KKwlvdGhlciA9IEZBTFNFOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWZuYW1lID0gZmZuYW1lOworCWZyZWVfZm5hbWUgPSBmaXhfZm5hbWUoZmZuYW1lKTsKKwkvKgorCSAqIFdoZW4gb3V0LW9mLW1lbW9yeSwga2VlcCB1bmV4cGFuZGVkIGZpbGUgbmFtZSwgYmVjYXVzZSB3ZSBNVVNUIGJlCisJICogYWJsZSB0byB3cml0ZSB0aGUgZmlsZSBpbiB0aGlzIHNpdHVhdGlvbi4KKwkgKi8KKwlpZiAoZnJlZV9mbmFtZSAhPSBOVUxMKQorCSAgICBmZm5hbWUgPSBmcmVlX2ZuYW1lOworCW90aGVyID0gb3RoZXJmaWxlKGZmbmFtZSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB3ZSBoYXZlIGEgbmV3IGZpbGUsIHB1dCBpdHMgbmFtZSBpbiB0aGUgbGlzdCBvZiBhbHRlcm5hdGUgZmlsZSBuYW1lcy4KKyAgICAgKi8KKyAgICBpZiAob3RoZXIpCisgICAgeworCWlmICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fQUxUV1JJVEUpICE9IE5VTEwKKwkJCQkJCSB8fCBlYXAtPmNtZGlkeCA9PSBDTURfc2F2ZWFzKQorCSAgICBhbHRfYnVmID0gc2V0YWx0Zm5hbWUoZmZuYW1lLCBmbmFtZSwgKGxpbmVucl9UKTEpOworCWVsc2UKKwkgICAgYWx0X2J1ZiA9IGJ1Zmxpc3RfZmluZG5hbWUoZmZuYW1lKTsKKwlpZiAoYWx0X2J1ZiAhPSBOVUxMICYmIGFsdF9idWYtPmJfbWwubWxfbWZwICE9IE5VTEwpCisJeworCSAgICAvKiBPdmVyd3JpdGluZyBhIGZpbGUgdGhhdCBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIgaXMgbm90IGEKKwkgICAgICogZ29vZCBpZGVhLiAqLworCSAgICBFTVNHKF8oIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIikpOworCSAgICBnb3RvIHRoZWVuZDsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXcml0aW5nIHRvIHRoZSBjdXJyZW50IGZpbGUgaXMgbm90IGFsbG93ZWQgaW4gcmVhZG9ubHkgbW9kZQorICAgICAqIGFuZCBhIGZpbGUgbmFtZSBpcyByZXF1aXJlZC4KKyAgICAgKiAibm9maWxlIiBhbmQgIm5vd3JpdGUiIGJ1ZmZlcnMgY2Fubm90IGJlIHdyaXR0ZW4gaW1wbGljaXRseSBlaXRoZXIuCisgICAgICovCisgICAgaWYgKCFvdGhlciAmJiAoCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCQlidF9kb250d3JpdGVfbXNnKGN1cmJ1ZikgfHwKKyNlbmRpZgorCQljaGVja19mbmFtZSgpID09IEZBSUwgfHwgY2hlY2tfcmVhZG9ubHkoJmVhcC0+Zm9yY2VpdCwgY3VyYnVmKSkpCisJZ290byB0aGVlbmQ7CisKKyAgICBpZiAoIW90aGVyKQorICAgIHsKKwlmZm5hbWUgPSBjdXJidWYtPmJfZmZuYW1lOworCWZuYW1lID0gY3VyYnVmLT5iX2ZuYW1lOworCS8qCisJICogTm90IHdyaXRpbmcgdGhlIHdob2xlIGZpbGUgaXMgb25seSBhbGxvd2VkIHdpdGggJyEnLgorCSAqLworCWlmICgJICAgKGVhcC0+bGluZTEgIT0gMQorCQkgICAgfHwgZWFwLT5saW5lMiAhPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkJJiYgIWVhcC0+Zm9yY2VpdAorCQkmJiAhZWFwLT5hcHBlbmQKKwkJJiYgIXBfd2EpCisJeworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKwkgICAgaWYgKHBfY29uZmlybSB8fCBjbWRtb2QuY29uZmlybSkKKwkgICAgeworCQlpZiAodmltX2RpYWxvZ195ZXNubyhWSU1fUVVFU1RJT04sIE5VTEwsCisJCQkgICAgICAgKGNoYXJfdSAqKV8oIldyaXRlIHBhcnRpYWwgZmlsZT8iKSwgMikgIT0gVklNX1lFUykKKwkJICAgIGdvdG8gdGhlZW5kOworCQllYXAtPmZvcmNlaXQgPSBUUlVFOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCUVNU0coXygiRTE0MDogVXNlICEgdG8gd3JpdGUgcGFydGlhbCBidWZmZXIiKSk7CisJCWdvdG8gdGhlZW5kOworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIChjaGVja19vdmVyd3JpdGUoZWFwLCBjdXJidWYsIGZuYW1lLCBmZm5hbWUsIG90aGVyKSA9PSBPSykKKyAgICB7CisJaWYgKGVhcC0+Y21kaWR4ID09IENNRF9zYXZlYXMgJiYgYWx0X2J1ZiAhPSBOVUxMKQorCXsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgYnVmX1QJKndhc19jdXJidWYgPSBjdXJidWY7CisKKwkgICAgYXBwbHlfYXV0b2NtZHMoRVZFTlRfQlVGRklMRVBSRSwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisjIGlmZGVmIEZFQVRfRVZBTAorCSAgICBpZiAoY3VyYnVmICE9IHdhc19jdXJidWYgfHwgYWJvcnRpbmcoKSkKKyMgZWxzZQorCSAgICBpZiAoY3VyYnVmICE9IHdhc19jdXJidWYpCisjIGVuZGlmCisJICAgIHsKKwkJLyogYnVmZmVyIGNoYW5nZWQsIGRvbid0IGNoYW5nZSBuYW1lIG5vdyAqLworCQlyZXR2YWwgPSBGQUlMOworCQlnb3RvIHRoZWVuZDsKKwkgICAgfQorI2VuZGlmCisJICAgIC8qIEV4Y2hhbmdlIHRoZSBmaWxlIG5hbWVzIGZvciB0aGUgY3VycmVudCBhbmQgdGhlIGFsdGVybmF0ZQorCSAgICAgKiBidWZmZXIuICBUaGlzIG1ha2VzIGl0IGxvb2sgbGlrZSB3ZSBhcmUgbm93IGVkaXRpbmcgdGhlIGJ1ZmZlcgorCSAgICAgKiB1bmRlciB0aGUgbmV3IG5hbWUuICBNdXN0IGJlIGRvbmUgYmVmb3JlIGJ1Zl93cml0ZSgpLCBiZWNhdXNlCisJICAgICAqIGlmIHRoZXJlIGlzIG5vIGZpbGUgbmFtZSBhbmQgJ2NwbycgY29udGFpbnMgJ0YnLCBpdCB3aWxsIHNldAorCSAgICAgKiB0aGUgZmlsZSBuYW1lLiAqLworCSAgICBmbmFtZSA9IGFsdF9idWYtPmJfZm5hbWU7CisJICAgIGFsdF9idWYtPmJfZm5hbWUgPSBjdXJidWYtPmJfZm5hbWU7CisJICAgIGN1cmJ1Zi0+Yl9mbmFtZSA9IGZuYW1lOworCSAgICBmbmFtZSA9IGFsdF9idWYtPmJfZmZuYW1lOworCSAgICBhbHRfYnVmLT5iX2ZmbmFtZSA9IGN1cmJ1Zi0+Yl9mZm5hbWU7CisJICAgIGN1cmJ1Zi0+Yl9mZm5hbWUgPSBmbmFtZTsKKwkgICAgZm5hbWUgPSBhbHRfYnVmLT5iX3NmbmFtZTsKKwkgICAgYWx0X2J1Zi0+Yl9zZm5hbWUgPSBjdXJidWYtPmJfc2ZuYW1lOworCSAgICBjdXJidWYtPmJfc2ZuYW1lID0gZm5hbWU7CisJICAgIGJ1Zl9uYW1lX2NoYW5nZWQoY3VyYnVmKTsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgYXBwbHlfYXV0b2NtZHMoRVZFTlRfQlVGRklMRVBPU1QsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYpOworCSAgICBpZiAoIWFsdF9idWYtPmJfcF9ibCkKKwkgICAgeworCQlhbHRfYnVmLT5iX3BfYmwgPSBUUlVFOworCQlhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZBREQsIE5VTEwsIE5VTEwsIEZBTFNFLCBhbHRfYnVmKTsKKwkgICAgfQorIyBpZmRlZiBGRUFUX0VWQUwKKwkgICAgaWYgKGN1cmJ1ZiAhPSB3YXNfY3VyYnVmIHx8IGFib3J0aW5nKCkpCisjIGVsc2UKKwkgICAgaWYgKGN1cmJ1ZiAhPSB3YXNfY3VyYnVmKQorIyBlbmRpZgorCSAgICB7CisJCS8qIGJ1ZmZlciBjaGFuZ2VkLCBkb24ndCB3cml0ZSB0aGUgZmlsZSAqLworCQlyZXR2YWwgPSBGQUlMOworCQlnb3RvIHRoZWVuZDsKKwkgICAgfQorI2VuZGlmCisJfQorCisJcmV0dmFsID0gYnVmX3dyaXRlKGN1cmJ1ZiwgZmZuYW1lLCBmbmFtZSwgZWFwLT5saW5lMSwgZWFwLT5saW5lMiwKKwkJCQkgZWFwLCBlYXAtPmFwcGVuZCwgZWFwLT5mb3JjZWl0LCBUUlVFLCBGQUxTRSk7CisgICAgfQorCit0aGVlbmQ6CisjaWZkZWYgRkVBVF9CUk9XU0UKKyAgICB2aW1fZnJlZShicm93c2VfZmlsZSk7CisjZW5kaWYKKyAgICB2aW1fZnJlZShmcmVlX2ZuYW1lKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogQ2hlY2sgaWYgaXQgaXMgYWxsb3dlZCB0byBvdmVyd3JpdGUgYSBmaWxlLiAgSWYgYl9mbGFncyBoYXMgQkZfTk9URURJVEVELAorICogQkZfTkVXIG9yIEJGX1JFQURFUlIsIGNoZWNrIGZvciBvdmVyd3JpdGluZyBjdXJyZW50IGZpbGUuCisgKiBNYXkgc2V0IGVhcC0+Zm9yY2VpdCBpZiBhIGRpYWxvZyBzYXlzIGl0J3MgT0sgdG8gb3ZlcndyaXRlLgorICogUmV0dXJuIE9LIGlmIGl0J3MgT0ssIEZBSUwgaWYgaXQgaXMgbm90LgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgaW50CitjaGVja19vdmVyd3JpdGUoZWFwLCBidWYsIGZuYW1lLCBmZm5hbWUsIG90aGVyKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICBidWZfVAkqYnVmOworICAgIGNoYXJfdQkqZm5hbWU7CSAgICAvKiBmaWxlIG5hbWUgdG8gYmUgdXNlZCAoY2FuIGRpZmZlciBmcm9tCisJCQkgICAgICAgYnVmLT5mZm5hbWUpICovCisgICAgY2hhcl91CSpmZm5hbWU7ICAgIC8qIGZ1bGwgcGF0aCB2ZXJzaW9uIG9mIGZuYW1lICovCisgICAgaW50CQlvdGhlcjsJICAgIC8qIHdyaXRpbmcgdW5kZXIgb3RoZXIgbmFtZSAqLworeworICAgIC8qCisgICAgICogd3JpdGUgdG8gb3RoZXIgZmlsZSBvciBiX2ZsYWdzIHNldCBvciBub3Qgd3JpdGluZyB0aGUgd2hvbGUgZmlsZToKKyAgICAgKiBvdmVyd3JpdGluZyBvbmx5IGFsbG93ZWQgd2l0aCAnIScKKyAgICAgKi8KKyAgICBpZiAoICAgICAgIChvdGhlcgorCQl8fCAoYnVmLT5iX2ZsYWdzICYgQkZfTk9URURJVEVEKQorCQl8fCAoKGJ1Zi0+Yl9mbGFncyAmIEJGX05FVykKKwkJICAgICYmIHZpbV9zdHJjaHIocF9jcG8sIENQT19PVkVSTkVXKSA9PSBOVUxMKQorCQl8fCAoYnVmLT5iX2ZsYWdzICYgQkZfUkVBREVSUikpCisJICAgICYmICFlYXAtPmZvcmNlaXQKKwkgICAgJiYgIWVhcC0+YXBwZW5kCisJICAgICYmICFwX3dhCisJICAgICYmIHZpbV9mZXhpc3RzKGZmbmFtZSkpCisgICAgeworI2lmZGVmIFVOSVgKKwkgICAgLyogd2l0aCBVTklYIGl0IGlzIHBvc3NpYmxlIHRvIG9wZW4gYSBkaXJlY3RvcnkgKi8KKwlpZiAobWNoX2lzZGlyKGZmbmFtZSkpCisJeworCSAgICBFTVNHMihfKGVfaXNhZGlyMiksIGZmbmFtZSk7CisJICAgIHJldHVybiBGQUlMOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKwlpZiAocF9jb25maXJtIHx8IGNtZG1vZC5jb25maXJtKQorCXsKKwkgICAgY2hhcl91CWJ1ZmZbSU9TSVpFXTsKKworCSAgICBkaWFsb2dfbXNnKGJ1ZmYsIF8oIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIpLCBmbmFtZSk7CisJICAgIGlmICh2aW1fZGlhbG9nX3llc25vKFZJTV9RVUVTVElPTiwgTlVMTCwgYnVmZiwgMikgIT0gVklNX1lFUykKKwkJcmV0dXJuIEZBSUw7CisJICAgIGVhcC0+Zm9yY2VpdCA9IFRSVUU7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgRU1TRyhfKGVfZXhpc3RzKSk7CisJICAgIHJldHVybiBGQUlMOworCX0KKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogSGFuZGxlICI6d25leHQiLCAiOndOZXh0IiBhbmQgIjp3cHJldmlvdXMiIGNvbW1hbmRzLgorICovCisgICAgdm9pZAorZXhfd25leHQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBpZiAoZWFwLT5jbWRbMV0gPT0gJ24nKQorCWkgPSBjdXJ3aW4tPndfYXJnX2lkeCArIChpbnQpZWFwLT5saW5lMjsKKyAgICBlbHNlCisJaSA9IGN1cndpbi0+d19hcmdfaWR4IC0gKGludCllYXAtPmxpbmUyOworICAgIGVhcC0+bGluZTEgPSAxOworICAgIGVhcC0+bGluZTIgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKyAgICBpZiAoZG9fd3JpdGUoZWFwKSAhPSBGQUlMKQorCWRvX2FyZ2ZpbGUoZWFwLCBpKTsKK30KKworLyoKKyAqICI6d2FsbCIsICI6d3FhbGwiIGFuZCAiOnhhbGwiOiBXcml0ZSBhbGwgY2hhbmdlZCBmaWxlcyAoYW5kIGV4aXQpLgorICovCisgICAgdm9pZAorZG9fd3FhbGwoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJZXJyb3IgPSAwOworICAgIGludAkJc2F2ZV9mb3JjZWl0ID0gZWFwLT5mb3JjZWl0OworCisgICAgaWYgKGVhcC0+Y21kaWR4ID09IENNRF94YWxsIHx8IGVhcC0+Y21kaWR4ID09IENNRF93cWFsbCkKKwlleGl0aW5nID0gVFJVRTsKKworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKyAgICB7CisJaWYgKGJ1ZklzQ2hhbmdlZChidWYpKQorCXsKKwkgICAgLyoKKwkgICAgICogQ2hlY2sgaWYgdGhlcmUgaXMgYSByZWFzb24gdGhlIGJ1ZmZlciBjYW5ub3QgYmUgd3JpdHRlbjoKKwkgICAgICogMS4gaWYgdGhlICd3cml0ZScgb3B0aW9uIGlzIHNldAorCSAgICAgKiAyLiBpZiB0aGVyZSBpcyBubyBmaWxlIG5hbWUgKGV2ZW4gYWZ0ZXIgYnJvd3NpbmcpCisJICAgICAqIDMuIGlmIHRoZSAncmVhZG9ubHknIGlzIHNldCAoZXZlbiBhZnRlciBhIGRpYWxvZykKKwkgICAgICogNC4gaWYgb3ZlcndyaXRpbmcgaXMgYWxsb3dlZCAoZXZlbiBhZnRlciBhIGRpYWxvZykKKwkgICAgICovCisJICAgIGlmIChub3Rfd3JpdGluZygpKQorCSAgICB7CisJCSsrZXJyb3I7CisJCWJyZWFrOworCSAgICB9CisjaWZkZWYgRkVBVF9CUk9XU0UKKwkgICAgLyogIjpicm93c2Ugd2FsbCI6IGFzayBmb3IgZmlsZSBuYW1lIGlmIHRoZXJlIGlzbid0IG9uZSAqLworCSAgICBpZiAoYnVmLT5iX2ZmbmFtZSA9PSBOVUxMICYmIGNtZG1vZC5icm93c2UpCisJCWJyb3dzZV9zYXZlX2ZuYW1lKGJ1Zik7CisjZW5kaWYKKwkgICAgaWYgKGJ1Zi0+Yl9mZm5hbWUgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHTihfKCJFMTQxOiBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciAlbGQiKSwgKGxvbmcpYnVmLT5iX2ZudW0pOworCQkrK2Vycm9yOworCSAgICB9CisJICAgIGVsc2UgaWYgKGNoZWNrX3JlYWRvbmx5KCZlYXAtPmZvcmNlaXQsIGJ1ZikKKwkJICAgIHx8IGNoZWNrX292ZXJ3cml0ZShlYXAsIGJ1ZiwgYnVmLT5iX2ZuYW1lLCBidWYtPmJfZmZuYW1lLAorCQkJCQkJCSAgICAgICBGQUxTRSkgPT0gRkFJTCkKKwkgICAgeworCQkrK2Vycm9yOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoYnVmX3dyaXRlX2FsbChidWYsIGVhcC0+Zm9yY2VpdCkgPT0gRkFJTCkKKwkJICAgICsrZXJyb3I7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJCS8qIGFuIGF1dG9jb21tYW5kIG1heSBoYXZlIGRlbGV0ZWQgdGhlIGJ1ZmZlciAqLworCQlpZiAoIWJ1Zl92YWxpZChidWYpKQorCQkgICAgYnVmID0gZmlyc3RidWY7CisjZW5kaWYKKwkgICAgfQorCSAgICBlYXAtPmZvcmNlaXQgPSBzYXZlX2ZvcmNlaXQ7ICAgIC8qIGNoZWNrX292ZXJ3cml0ZSgpIG1heSBzZXQgaXQgKi8KKwl9CisgICAgfQorICAgIGlmIChleGl0aW5nKQorICAgIHsKKwlpZiAoIWVycm9yKQorCSAgICBnZXRvdXQoMCk7CQkvKiBleGl0IFZpbSAqLworCW5vdF9leGl0aW5nKCk7CisgICAgfQorfQorCisvKgorICogQ2hlY2sgdGhlICd3cml0ZScgb3B0aW9uLgorICogUmV0dXJuIFRSVUUgYW5kIGdpdmUgYSBtZXNzYWdlIHdoZW4gaXQncyBub3Qgc3QuCisgKi8KKyAgICBpbnQKK25vdF93cml0aW5nKCkKK3sKKyAgICBpZiAocF93cml0ZSkKKwlyZXR1cm4gRkFMU0U7CisgICAgRU1TRyhfKCJFMTQyOiBGaWxlIG5vdCB3cml0dGVuOiBXcml0aW5nIGlzIGRpc2FibGVkIGJ5ICd3cml0ZScgb3B0aW9uIikpOworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICogQ2hlY2sgaWYgYSBidWZmZXIgaXMgcmVhZC1vbmx5LiAgQXNrIGZvciBvdmVycnVsaW5nIGluIGEgZGlhbG9nLgorICogUmV0dXJuIFRSVUUgYW5kIGdpdmUgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBidWZmZXIgaXMgcmVhZG9ubHkuCisgKi8KKyAgICBzdGF0aWMgaW50CitjaGVja19yZWFkb25seShmb3JjZWl0LCBidWYpCisgICAgaW50CQkqZm9yY2VpdDsKKyAgICBidWZfVAkqYnVmOworeworICAgIGlmICghKmZvcmNlaXQgJiYgYnVmLT5iX3Bfcm8pCisgICAgeworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKwlpZiAoKHBfY29uZmlybSB8fCBjbWRtb2QuY29uZmlybSkgJiYgYnVmLT5iX2ZuYW1lICE9IE5VTEwpCisJeworCSAgICBjaGFyX3UJYnVmZltJT1NJWkVdOworCisJICAgIGRpYWxvZ19tc2coYnVmZiwgXygiJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IGZvciBcIiUuKnNcIi5cbkRvIHlvdSB3aXNoIHRvIHdyaXRlIGFueXdheT8iKSwKKwkJICAgIGJ1Zi0+Yl9mbmFtZSk7CisKKwkgICAgaWYgKHZpbV9kaWFsb2dfeWVzbm8oVklNX1FVRVNUSU9OLCBOVUxMLCBidWZmLCAyKSA9PSBWSU1fWUVTKQorCSAgICB7CisJCS8qIFNldCBmb3JjZWl0LCB0byBmb3JjZSB0aGUgd3JpdGluZyBvZiBhIHJlYWRvbmx5IGZpbGUgKi8KKwkJKmZvcmNlaXQgPSBUUlVFOworCQlyZXR1cm4gRkFMU0U7CisJICAgIH0KKwkgICAgZWxzZQorCQlyZXR1cm4gVFJVRTsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgIEVNU0coXyhlX3JlYWRvbmx5KSk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIHRyeSB0byBhYmFuZG9uIGN1cnJlbnQgZmlsZSBhbmQgZWRpdCBhIG5ldyBvciBleGlzdGluZyBmaWxlCisgKiAnZm51bScgaXMgdGhlIG51bWJlciBvZiB0aGUgZmlsZSwgaWYgemVybyB1c2UgZmZuYW1lL3NmbmFtZQorICoKKyAqIHJldHVybiAxIGZvciAibm9ybWFsIiBlcnJvciwgMiBmb3IgIm5vdCB3cml0dGVuIiBlcnJvciwgMCBmb3Igc3VjY2VzcworICogLTEgZm9yIHN1Y2Nlc2Z1bGx5IG9wZW5pbmcgYW5vdGhlciBmaWxlCisgKiAnbG51bScgaXMgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgY3Vyc29yIGluIHRoZSBuZXcgZmlsZSAoaWYgbm9uLXplcm8pLgorICovCisgICAgaW50CitnZXRmaWxlKGZudW0sIGZmbmFtZSwgc2ZuYW1lLCBzZXRwbSwgbG51bSwgZm9yY2VpdCkKKyAgICBpbnQJCWZudW07CisgICAgY2hhcl91CSpmZm5hbWU7CisgICAgY2hhcl91CSpzZm5hbWU7CisgICAgaW50CQlzZXRwbTsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJZm9yY2VpdDsKK3sKKyAgICBpbnQJCW90aGVyOworICAgIGludAkJcmV0dmFsOworICAgIGNoYXJfdQkqZnJlZV9tZSA9IE5VTEw7CisKKyNpZmRlZiBGRUFUX0NNRFdJTgorICAgIGlmIChjbWR3aW5fdHlwZSAhPSAwKQorCXJldHVybiAxOworI2VuZGlmCisKKyAgICBpZiAoZm51bSA9PSAwKQorICAgIHsKKwkJCQkJLyogbWFrZSBmZm5hbWUgZnVsbCBwYXRoLCBzZXQgc2ZuYW1lICovCisJZm5hbWVfZXhwYW5kKGN1cmJ1ZiwgJmZmbmFtZSwgJnNmbmFtZSk7CisJb3RoZXIgPSBvdGhlcmZpbGUoZmZuYW1lKTsKKwlmcmVlX21lID0gZmZuYW1lOwkJLyogaGFzIGJlZW4gYWxsb2NhdGVkLCBmcmVlKCkgbGF0ZXIgKi8KKyAgICB9CisgICAgZWxzZQorCW90aGVyID0gKGZudW0gIT0gY3VyYnVmLT5iX2ZudW0pOworCisgICAgaWYgKG90aGVyKQorCSsrbm9fd2FpdF9yZXR1cm47CSAgICAvKiBkb24ndCB3YWl0IGZvciBhdXRvd3JpdGUgbWVzc2FnZSAqLworICAgIGlmIChvdGhlciAmJiAhZm9yY2VpdCAmJiBjdXJidWYtPmJfbndpbmRvd3MgPT0gMSAmJiAhUF9ISUQoY3VyYnVmKQorCQkgICAmJiBjdXJidWZJc0NoYW5nZWQoKSAmJiBhdXRvd3JpdGUoY3VyYnVmLCBmb3JjZWl0KSA9PSBGQUlMKQorICAgIHsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCisJaWYgKHBfY29uZmlybSAmJiBwX3dyaXRlKQorCSAgICBkaWFsb2dfY2hhbmdlZChjdXJidWYsIEZBTFNFKTsKKwlpZiAoY3VyYnVmSXNDaGFuZ2VkKCkpCisjZW5kaWYKKwl7CisJICAgIGlmIChvdGhlcikKKwkJLS1ub193YWl0X3JldHVybjsKKwkgICAgRU1TRyhfKGVfbm93cnRtc2cpKTsKKwkgICAgcmV0dmFsID0gMjsJLyogZmlsZSBoYXMgYmVlbiBjaGFuZ2VkICovCisJICAgIGdvdG8gdGhlZW5kOworCX0KKyAgICB9CisgICAgaWYgKG90aGVyKQorCS0tbm9fd2FpdF9yZXR1cm47CisgICAgaWYgKHNldHBtKQorCXNldHBjbWFyaygpOworICAgIGlmICghb3RoZXIpCisgICAgeworCWlmIChsbnVtICE9IDApCisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisJY2hlY2tfY3Vyc29yX2xudW0oKTsKKwliZWdpbmxpbmUoQkxfU09MIHwgQkxfRklYKTsKKwlyZXR2YWwgPSAwOwkvKiBpdCdzIGluIHRoZSBzYW1lIGZpbGUgKi8KKyAgICB9CisgICAgZWxzZSBpZiAoZG9fZWNtZChmbnVtLCBmZm5hbWUsIHNmbmFtZSwgTlVMTCwgbG51bSwKKwkJKFBfSElEKGN1cmJ1ZikgPyBFQ01EX0hJREUgOiAwKSArIChmb3JjZWl0ID8gRUNNRF9GT1JDRUlUIDogMCkpID09IE9LKQorCXJldHZhbCA9IC0xOwkvKiBvcGVuZWQgYW5vdGhlciBmaWxlICovCisgICAgZWxzZQorCXJldHZhbCA9IDE7CS8qIGVycm9yIGVuY291bnRlcmVkICovCisKK3RoZWVuZDoKKyAgICB2aW1fZnJlZShmcmVlX21lKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogc3RhcnQgZWRpdGluZyBhIG5ldyBmaWxlCisgKgorICogICAgIGZudW06IGZpbGUgbnVtYmVyOyBpZiB6ZXJvIHVzZSBmZm5hbWUvc2ZuYW1lCisgKiAgIGZmbmFtZTogdGhlIGZpbGUgbmFtZQorICoJCS0gZnVsbCBwYXRoIGlmIHNmbmFtZSB1c2VkLAorICoJCS0gYW55IGZpbGUgbmFtZSBpZiBzZm5hbWUgaXMgTlVMTAorICoJCS0gZW1wdHkgc3RyaW5nIHRvIHJlLWVkaXQgd2l0aCB0aGUgc2FtZSBmaWxlIG5hbWUgKGJ1dCBtYXkgYmUKKyAqCQkgICAgaW4gYSBkaWZmZXJlbnQgZGlyZWN0b3J5KQorICoJCS0gTlVMTCB0byBzdGFydCBhbiBlbXB0eSBidWZmZXIKKyAqICAgc2ZuYW1lOiB0aGUgc2hvcnQgZmlsZSBuYW1lIChvciBOVUxMKQorICoJZWFwOiBjb250YWlucyB0aGUgY29tbWFuZCB0byBiZSBleGVjdXRlZCBhZnRlciBsb2FkaW5nIHRoZSBmaWxlIGFuZAorICoJICAgICBmb3JjZWQgJ2ZmJyBhbmQgJ2ZlbmMnCisgKiAgbmV3bG51bTogaWYgPiAwOiBwdXQgY3Vyc29yIG9uIHRoaXMgbGluZSBudW1iZXIgKGlmIHBvc3NpYmxlKQorICoJICAgICBpZiBFQ01EX0xBU1RMOiB1c2UgbGFzdCBwb3NpdGlvbiBpbiBsb2FkZWQgZmlsZQorICoJICAgICBpZiBFQ01EX0xBU1Q6IHVzZSBsYXN0IHBvc2l0aW9uIGluIGFsbCBmaWxlcworICoJICAgICBpZiBFQ01EX09ORTogdXNlIGZpcnN0IGxpbmUKKyAqICAgIGZsYWdzOgorICoJICAgRUNNRF9ISURFOiBpZiBUUlVFIGRvbid0IGZyZWUgdGhlIGN1cnJlbnQgYnVmZmVyCisgKiAgICAgRUNNRF9TRVRfSEVMUDogc2V0IGJfaGVscCBmbGFnIG9mIChuZXcpIGJ1ZmZlciBiZWZvcmUgb3BlbmluZyBmaWxlCisgKgkgRUNNRF9PTERCVUY6IHVzZSBleGlzdGluZyBidWZmZXIgaWYgaXQgZXhpc3RzCisgKglFQ01EX0ZPUkNFSVQ6ICEgdXNlZCBmb3IgRXggY29tbWFuZAorICoJIEVDTURfQUREQlVGOiBkb24ndCBlZGl0LCBqdXN0IGFkZCB0byBidWZmZXIgbGlzdAorICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAorZG9fZWNtZChmbnVtLCBmZm5hbWUsIHNmbmFtZSwgZWFwLCBuZXdsbnVtLCBmbGFncykKKyAgICBpbnQJCWZudW07CisgICAgY2hhcl91CSpmZm5hbWU7CisgICAgY2hhcl91CSpzZm5hbWU7CisgICAgZXhhcmdfVAkqZWFwOwkJCS8qIGNhbiBiZSBOVUxMISAqLworICAgIGxpbmVucl9UCW5ld2xudW07CisgICAgaW50CQlmbGFnczsKK3sKKyAgICBpbnQJCW90aGVyX2ZpbGU7CQkvKiBUUlVFIGlmIGVkaXRpbmcgYW5vdGhlciBmaWxlICovCisgICAgaW50CQlvbGRidWY7CQkJLyogVFJVRSBpZiB1c2luZyBleGlzdGluZyBidWZmZXIgKi8KKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBpbnQJCWF1dG9fYnVmID0gRkFMU0U7CS8qIFRSVUUgaWYgYXV0b2NvbW1hbmRzIGJyb3VnaHQgdXMKKwkJCQkJICAgaW50byB0aGUgYnVmZmVyIHVuZXhwZWN0ZWRseSAqLworICAgIGNoYXJfdQkqbmV3X25hbWUgPSBOVUxMOworI2VuZGlmCisgICAgYnVmX1QJKmJ1ZjsKKyNpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkgfHwgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKQorICAgIGJ1Zl9UCSpvbGRfY3VyYnVmID0gY3VyYnVmOworI2VuZGlmCisgICAgY2hhcl91CSpmcmVlX2ZuYW1lID0gTlVMTDsKKyNpZmRlZiBGRUFUX0JST1dTRQorICAgIGNoYXJfdQkqYnJvd3NlX2ZpbGUgPSBOVUxMOworI2VuZGlmCisgICAgaW50CQlyZXR2YWwgPSBGQUlMOworICAgIGxvbmcJbjsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGxpbmVucl9UCXRvcGxpbmUgPSAwOworICAgIGludAkJbmV3Y29sID0gLTE7CisgICAgaW50CQlzb2xjb2wgPSAtMTsKKyAgICBwb3NfVAkqcG9zOworI2lmZGVmIEZFQVRfU1VOX1dPUktTSE9QCisgICAgY2hhcl91CSpjcDsKKyNlbmRpZgorICAgIGNoYXJfdQkqY29tbWFuZCA9IE5VTEw7CisKKyAgICBpZiAoZWFwICE9IE5VTEwpCisJY29tbWFuZCA9IGVhcC0+ZG9fZWNtZF9jbWQ7CisKKyAgICBpZiAoZm51bSAhPSAwKQorICAgIHsKKwlpZiAoZm51bSA9PSBjdXJidWYtPmJfZm51bSkJLyogZmlsZSBpcyBhbHJlYWR5IGJlaW5nIGVkaXRlZCAqLworCSAgICByZXR1cm4gT0s7CQkJLyogbm90aGluZyB0byBkbyAqLworCW90aGVyX2ZpbGUgPSBUUlVFOworICAgIH0KKyAgICBlbHNlCisgICAgeworI2lmZGVmIEZFQVRfQlJPV1NFCisJaWYgKGNtZG1vZC5icm93c2UpCisJeworCSAgICBicm93c2VfZmlsZSA9IGRvX2Jyb3dzZShGQUxTRSwgKGNoYXJfdSAqKV8oIkVkaXQgRmlsZSIpLCBmZm5hbWUsCisJCQkJCQkgICAgTlVMTCwgTlVMTCwgTlVMTCwgY3VyYnVmKTsKKwkgICAgaWYgKGJyb3dzZV9maWxlID09IE5VTEwpCisJCWdvdG8gdGhlZW5kOworCSAgICBmZm5hbWUgPSBicm93c2VfZmlsZTsKKwl9CisjZW5kaWYKKwkvKiBpZiBubyBzaG9ydCBuYW1lIGdpdmVuLCB1c2UgZmZuYW1lIGZvciBzaG9ydCBuYW1lICovCisJaWYgKHNmbmFtZSA9PSBOVUxMKQorCSAgICBzZm5hbWUgPSBmZm5hbWU7CisjaWZkZWYgVVNFX0ZOQU1FX0NBU0UKKyMgaWZkZWYgVVNFX0xPTkdfRk5BTUUKKwlpZiAoVVNFX0xPTkdfRk5BTUUpCisjIGVuZGlmCisJICAgIGZuYW1lX2Nhc2Uoc2ZuYW1lLCAwKTsgICAvKiBzZXQgY29ycmVjdCBjYXNlIGZvciBzaG9ydCBmaWxlIG5hbWUgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9MSVNUQ01EUworCWlmICgoZmxhZ3MgJiBFQ01EX0FEREJVRikgJiYgKGZmbmFtZSA9PSBOVUxMIHx8ICpmZm5hbWUgPT0gTlVMKSkKKwkgICAgZ290byB0aGVlbmQ7CisjZW5kaWYKKworCWlmIChmZm5hbWUgPT0gTlVMTCkKKwkgICAgb3RoZXJfZmlsZSA9IFRSVUU7CisJCQkJCSAgICAvKiB0aGVyZSBpcyBubyBmaWxlIG5hbWUgKi8KKwllbHNlIGlmICgqZmZuYW1lID09IE5VTCAmJiBjdXJidWYtPmJfZmZuYW1lID09IE5VTEwpCisJICAgIG90aGVyX2ZpbGUgPSBGQUxTRTsKKwllbHNlCisJeworCSAgICBpZiAoKmZmbmFtZSA9PSBOVUwpCQkgICAgLyogcmUtZWRpdCB3aXRoIHNhbWUgZmlsZSBuYW1lICovCisJICAgIHsKKwkJZmZuYW1lID0gY3VyYnVmLT5iX2ZmbmFtZTsKKwkJc2ZuYW1lID0gY3VyYnVmLT5iX2ZuYW1lOworCSAgICB9CisJICAgIGZyZWVfZm5hbWUgPSBmaXhfZm5hbWUoZmZuYW1lKTsgLyogbWF5IGV4cGFuZCB0byBmdWxsIHBhdGggbmFtZSAqLworCSAgICBpZiAoZnJlZV9mbmFtZSAhPSBOVUxMKQorCQlmZm5hbWUgPSBmcmVlX2ZuYW1lOworCSAgICBvdGhlcl9maWxlID0gb3RoZXJmaWxlKGZmbmFtZSk7CisjaWZkZWYgRkVBVF9TVU5fV09SS1NIT1AKKwkgICAgaWYgKHVzaW5nU3VuV29ya1Nob3AgJiYgcF9hY2QKKwkJCQkgICAmJiAoY3AgPSB2aW1fc3RycmNocihzZm5hbWUsICcvJykpICE9IE5VTEwpCisJCXNmbmFtZSA9ICsrY3A7CisjZW5kaWYKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpZiB0aGUgZmlsZSB3YXMgY2hhbmdlZCB3ZSBtYXkgbm90IGJlIGFsbG93ZWQgdG8gYWJhbmRvbiBpdAorICAgICAqIC0gaWYgd2UgYXJlIGdvaW5nIHRvIHJlLWVkaXQgdGhlIHNhbWUgZmlsZQorICAgICAqIC0gb3IgaWYgd2UgYXJlIHRoZSBvbmx5IHdpbmRvdyBvbiB0aGlzIGZpbGUgYW5kIGlmIEVDTURfSElERSBpcyBGQUxTRQorICAgICAqLworICAgIGlmICggICgoIW90aGVyX2ZpbGUgJiYgIShmbGFncyAmIEVDTURfT0xEQlVGKSkKKwkgICAgfHwgKGN1cmJ1Zi0+Yl9ud2luZG93cyA9PSAxCisJCSYmICEoZmxhZ3MgJiAoRUNNRF9ISURFIHwgRUNNRF9BRERCVUYpKSkpCisJJiYgY2hlY2tfY2hhbmdlZChjdXJidWYsIHBfYXdhLCAhb3RoZXJfZmlsZSwKKwkJCQkJKGZsYWdzICYgRUNNRF9GT1JDRUlUKSwgRkFMU0UpKQorICAgIHsKKwlpZiAoZm51bSA9PSAwICYmIG90aGVyX2ZpbGUgJiYgZmZuYW1lICE9IE5VTEwpCisJICAgICh2b2lkKXNldGFsdGZuYW1lKGZmbmFtZSwgc2ZuYW1lLCBuZXdsbnVtIDwgMCA/IDAgOiBuZXdsbnVtKTsKKwlnb3RvIHRoZWVuZDsKKyAgICB9CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIC8qCisgICAgICogRW5kIFZpc3VhbCBtb2RlIGJlZm9yZSBzd2l0Y2hpbmcgdG8gYW5vdGhlciBidWZmZXIsIHNvIHRoZSB0ZXh0IGNhbiBiZQorICAgICAqIGNvcGllZCBpbnRvIHRoZSBHVUkgc2VsZWN0aW9uIGJ1ZmZlci4KKyAgICAgKi8KKyAgICByZXNldF9WSXN1YWwoKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBJZiB3ZSBhcmUgc3RhcnRpbmcgdG8gZWRpdCBhbm90aGVyIGZpbGUsIG9wZW4gYSAobmV3KSBidWZmZXIuCisgICAgICogT3RoZXJ3aXNlIHdlIHJlLXVzZSB0aGUgY3VycmVudCBidWZmZXIuCisgICAgICovCisgICAgaWYgKG90aGVyX2ZpbGUpCisgICAgeworI2lmZGVmIEZFQVRfTElTVENNRFMKKwlpZiAoIShmbGFncyAmIEVDTURfQUREQlVGKSkKKyNlbmRpZgorCXsKKwkgICAgY3Vyd2luLT53X2FsdF9mbnVtID0gY3VyYnVmLT5iX2ZudW07CisJICAgIGJ1Zmxpc3RfYWx0ZnBvcygpOworCX0KKworCWlmIChmbnVtKQorCSAgICBidWYgPSBidWZsaXN0X2ZpbmRucihmbnVtKTsKKwllbHNlCisJeworI2lmZGVmIEZFQVRfTElTVENNRFMKKwkgICAgaWYgKGZsYWdzICYgRUNNRF9BRERCVUYpCisJICAgIHsKKwkJbGluZW5yX1QJdGxudW0gPSAxTDsKKworCQlpZiAoY29tbWFuZCAhPSBOVUxMKQorCQl7CisJCSAgICB0bG51bSA9IGF0b2woKGNoYXIgKiljb21tYW5kKTsKKwkJICAgIGlmICh0bG51bSA8PSAwKQorCQkJdGxudW0gPSAxTDsKKwkJfQorCQkodm9pZClidWZsaXN0X25ldyhmZm5hbWUsIHNmbmFtZSwgdGxudW0sIEJMTl9MSVNURUQpOworCQlnb3RvIHRoZWVuZDsKKwkgICAgfQorI2VuZGlmCisJICAgIGJ1ZiA9IGJ1Zmxpc3RfbmV3KGZmbmFtZSwgc2ZuYW1lLCAwTCwKKwkJICAgIEJMTl9DVVJCVUYgfCAoKGZsYWdzICYgRUNNRF9TRVRfSEVMUCkgPyAwIDogQkxOX0xJU1RFRCkpOworCX0KKwlpZiAoYnVmID09IE5VTEwpCisJICAgIGdvdG8gdGhlZW5kOworCWlmIChidWYtPmJfbWwubWxfbWZwID09IE5VTEwpCQkvKiBubyBtZW1maWxlIHlldCAqLworCXsKKwkgICAgb2xkYnVmID0gRkFMU0U7CisJICAgIGJ1Zi0+Yl9ud2luZG93cyA9IDA7CisJfQorCWVsc2UJCQkJCS8qIGV4aXN0aW5nIG1lbWZpbGUgKi8KKwl7CisJICAgIG9sZGJ1ZiA9IFRSVUU7CisJICAgICh2b2lkKWJ1Zl9jaGVja190aW1lc3RhbXAoYnVmLCBGQUxTRSk7CisJICAgIC8qIENoZWNrIGlmIGF1dG9jb21tYW5kcyBtYWRlIGJ1ZmZlciBpbnZhbGlkIG9yIGNoYW5nZWQgdGhlIGN1cnJlbnQKKwkgICAgICogYnVmZmVyLiAqLworCSAgICBpZiAoIWJ1Zl92YWxpZChidWYpCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJCSAgICB8fCBjdXJidWYgIT0gb2xkX2N1cmJ1ZgorI2VuZGlmCisJCSAgICApCisJCWdvdG8gdGhlZW5kOworI2lmZGVmIEZFQVRfRVZBTAorCSAgICBpZiAoYWJvcnRpbmcoKSkJICAgIC8qIGF1dG9jbWRzIG1heSBhYm9ydCBzY3JpcHQgcHJvY2Vzc2luZyAqLworCQlnb3RvIHRoZWVuZDsKKyNlbmRpZgorCX0KKworCS8qIE1heSBqdW1wIHRvIGxhc3QgdXNlZCBsaW5lIG51bWJlciBmb3IgYSBsb2FkZWQgYnVmZmVyIG9yIHdoZW4gYXNrZWQKKwkgKiBmb3IgZXhwbGljaXRseSAqLworCWlmICgob2xkYnVmICYmIG5ld2xudW0gPT0gRUNNRF9MQVNUTCkgfHwgbmV3bG51bSA9PSBFQ01EX0xBU1QpCisJeworCSAgICBwb3MgPSBidWZsaXN0X2ZpbmRmcG9zKGJ1Zik7CisJICAgIG5ld2xudW0gPSBwb3MtPmxudW07CisJICAgIHNvbGNvbCA9IHBvcy0+Y29sOworCX0KKworCS8qCisJICogTWFrZSB0aGUgKG5ldykgYnVmZmVyIHRoZSBvbmUgdXNlZCBieSB0aGUgY3VycmVudCB3aW5kb3cuCisJICogSWYgdGhlIG9sZCBidWZmZXIgYmVjb21lcyB1bnVzZWQsIGZyZWUgaXQgaWYgRUNNRF9ISURFIGlzIEZBTFNFLgorCSAqIElmIHRoZSBjdXJyZW50IGJ1ZmZlciB3YXMgZW1wdHkgYW5kIGhhcyBubyBmaWxlIG5hbWUsIGN1cmJ1ZgorCSAqIGlzIHJldHVybmVkIGJ5IGJ1Zmxpc3RfbmV3KCkuCisJICovCisJaWYgKGJ1ZiAhPSBjdXJidWYpCisJeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCSAgICAvKgorCSAgICAgKiBCZSBjYXJlZnVsOiBUaGUgYXV0b2NvbW1hbmRzIG1heSBkZWxldGUgYW55IGJ1ZmZlciBhbmQgY2hhbmdlCisJICAgICAqIHRoZSBjdXJyZW50IGJ1ZmZlci4KKwkgICAgICogLSBJZiB0aGUgYnVmZmVyIHdlIGFyZSBnb2luZyB0byBlZGl0IGlzIGRlbGV0ZWQsIGdpdmUgdXAuCisJICAgICAqIC0gSWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGRlbGV0ZWQsIHByZWZlciB0byBsb2FkIHRoZSBuZXcKKwkgICAgICogICBidWZmZXIgd2hlbiBsb2FkaW5nIGEgYnVmZmVyIGlzIHJlcXVpcmVkLiAgVGhpcyBhdm9pZHMKKwkgICAgICogICBsb2FkaW5nIGFub3RoZXIgYnVmZmVyIHdoaWNoIHRoZW4gbXVzdCBiZSBjbG9zZWQgYWdhaW4uCisJICAgICAqIC0gSWYgd2UgZW5kZWQgdXAgaW4gdGhlIG5ldyBidWZmZXIgYWxyZWFkeSwgbmVlZCB0byBza2lwIGEgZmV3CisJICAgICAqCSB0aGluZ3MsIHNldCBhdXRvX2J1Zi4KKwkgICAgICovCisJICAgIGlmIChidWYtPmJfZm5hbWUgIT0gTlVMTCkKKwkJbmV3X25hbWUgPSB2aW1fc3Ryc2F2ZShidWYtPmJfZm5hbWUpOworCSAgICBhdV9uZXdfY3VyYnVmID0gYnVmOworCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZMRUFWRSwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisJICAgIGlmICghYnVmX3ZhbGlkKGJ1ZikpCS8qIG5ldyBidWZmZXIgaGFzIGJlZW4gZGVsZXRlZCAqLworCSAgICB7CisJCWRlbGJ1Zl9tc2cobmV3X25hbWUpOwkvKiBmcmVlcyBuZXdfbmFtZSAqLworCQlnb3RvIHRoZWVuZDsKKwkgICAgfQorIyBpZmRlZiBGRUFUX0VWQUwKKwkgICAgaWYgKGFib3J0aW5nKCkpCSAgICAvKiBhdXRvY21kcyBtYXkgYWJvcnQgc2NyaXB0IHByb2Nlc3NpbmcgKi8KKwkgICAgeworCQl2aW1fZnJlZShuZXdfbmFtZSk7CisJCWdvdG8gdGhlZW5kOworCSAgICB9CisjIGVuZGlmCisJICAgIGlmIChidWYgPT0gY3VyYnVmKQkJLyogYWxyZWFkeSBpbiBuZXcgYnVmZmVyICovCisJCWF1dG9fYnVmID0gVFJVRTsKKwkgICAgZWxzZQorCSAgICB7CisJCWlmIChjdXJidWYgPT0gb2xkX2N1cmJ1ZikKKyNlbmRpZgorCQkgICAgYnVmX2NvcHlfb3B0aW9ucyhidWYsIEJDT19FTlRFUik7CisKKwkJLyogY2xvc2UgdGhlIGxpbmsgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICovCisJCWNsb3NlX2J1ZmZlcihjdXJ3aW4sIGN1cmJ1ZiwKKwkJCQkgICAgICAoZmxhZ3MgJiBFQ01EX0hJREUpID8gMCA6IERPQlVGX1VOTE9BRCk7CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyMgaWZkZWYgRkVBVF9FVkFMCisJCWlmIChhYm9ydGluZygpKQkgICAgLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCisJCXsKKwkJICAgIHZpbV9mcmVlKG5ld19uYW1lKTsKKwkJICAgIGdvdG8gdGhlZW5kOworCQl9CisjIGVuZGlmCisJCS8qIEJlIGNhcmVmdWwgYWdhaW4sIGxpa2UgYWJvdmUuICovCisJCWlmICghYnVmX3ZhbGlkKGJ1ZikpCS8qIG5ldyBidWZmZXIgaGFzIGJlZW4gZGVsZXRlZCAqLworCQl7CisJCSAgICBkZWxidWZfbXNnKG5ld19uYW1lKTsJLyogZnJlZXMgbmV3X25hbWUgKi8KKwkJICAgIGdvdG8gdGhlZW5kOworCQl9CisJCWlmIChidWYgPT0gY3VyYnVmKQkJLyogYWxyZWFkeSBpbiBuZXcgYnVmZmVyICovCisJCSAgICBhdXRvX2J1ZiA9IFRSVUU7CisJCWVsc2UKKyNlbmRpZgorCQl7CisJCSAgICBjdXJ3aW4tPndfYnVmZmVyID0gYnVmOworCQkgICAgY3VyYnVmID0gYnVmOworCQkgICAgKytjdXJidWYtPmJfbndpbmRvd3M7CisJCSAgICAvKiBzZXQgJ2ZpbGVmb3JtYXQnICovCisJCSAgICBpZiAoKnBfZmZzICYmICFvbGRidWYpCisJCQlzZXRfZmlsZWZvcm1hdChkZWZhdWx0X2ZpbGVmb3JtYXQoKSwgT1BUX0xPQ0FMKTsKKwkJfQorCisJCS8qIE1heSBnZXQgdGhlIHdpbmRvdyBvcHRpb25zIGZyb20gdGhlIGxhc3QgdGltZSB0aGlzIGJ1ZmZlcgorCQkgKiB3YXMgaW4gdGhpcyB3aW5kb3cgKG9yIGFub3RoZXIgd2luZG93KS4gIElmIG5vdCB1c2VkCisJCSAqIGJlZm9yZSwgcmVzZXQgdGhlIGxvY2FsIHdpbmRvdyBvcHRpb25zIHRvIHRoZSBnbG9iYWwKKwkJICogdmFsdWVzLiAgQWxzbyByZXN0b3JlcyBvbGQgZm9sZGluZyBzdHVmZi4gKi8KKwkJZ2V0X3dpbm9wdHMoYnVmKTsKKworI2lmZGVmIEZFQVRfQVVUT0NNRAorCSAgICB9CisJICAgIHZpbV9mcmVlKG5ld19uYW1lKTsKKwkgICAgYXVfbmV3X2N1cmJ1ZiA9IE5VTEw7CisjZW5kaWYKKwl9CisJZWxzZQorCSAgICArK2N1cmJ1Zi0+Yl9ud2luZG93czsKKworCWN1cndpbi0+d19wY21hcmsubG51bSA9IDE7CisJY3Vyd2luLT53X3BjbWFyay5jb2wgPSAwOworICAgIH0KKyAgICBlbHNlIC8qICFvdGhlcl9maWxlICovCisgICAgeworCWlmICgKKyNpZmRlZiBGRUFUX0xJU1RDTURTCisJCShmbGFncyAmIEVDTURfQUREQlVGKSB8fAorI2VuZGlmCisJCWNoZWNrX2ZuYW1lKCkgPT0gRkFJTCkKKwkgICAgZ290byB0aGVlbmQ7CisJb2xkYnVmID0gKGZsYWdzICYgRUNNRF9PTERCVUYpOworICAgIH0KKworICAgIGlmICgoZmxhZ3MgJiBFQ01EX1NFVF9IRUxQKSB8fCBrZWVwX2hlbHBfZmxhZykKKyAgICB7CisJY2hhcl91CSpwOworCisJY3VyYnVmLT5iX2hlbHAgPSBUUlVFOworI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKwlzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QoKGNoYXJfdSAqKSJidWZ0eXBlIiwgLTEsCisJCQkJICAgICAgIChjaGFyX3UgKikiaGVscCIsIE9QVF9GUkVFfE9QVF9MT0NBTCk7CisjZW5kaWYKKworCS8qCisJICogQWx3YXlzIHNldCB0aGVzZSBvcHRpb25zIGFmdGVyIGp1bXBpbmcgdG8gYSBoZWxwIHRhZywgYmVjYXVzZSB0aGUKKwkgKiB1c2VyIG1heSBoYXZlIGFuIGF1dG9jb21tYW5kIHRoYXQgZ2V0cyBpbiB0aGUgd2F5LgorCSAqIEFjY2VwdCBhbGwgQVNDSUkgY2hhcnMgZm9yIGtleXdvcmRzLCBleGNlcHQgJyAnLCAnKicsICciJywgJ3wnLCBhbmQKKwkgKiBsYXRpbjEgd29yZCBjaGFyYWN0ZXJzIChmb3IgdHJhbnNsYXRlZCBoZWxwIGZpbGVzKS4KKwkgKiBPbmx5IHNldCBpdCB3aGVuIG5lZWRlZCwgYnVmX2luaXRfY2hhcnRhYigpIGlzIHNvbWUgd29yay4KKwkgKi8KKwlwID0KKyNpZmRlZiBFQkNESUMKKwkJKGNoYXJfdSAqKSI2NS0yNTUsXiosXnwsXlwiIjsKKyNlbHNlCisJCShjaGFyX3UgKikiIS1+LF4qLF58LF5cIiwxOTItMjU1IjsKKyNlbmRpZgorCWlmIChTVFJDTVAoY3VyYnVmLT5iX3BfaXNrLCBwKSAhPSAwKQorCXsKKwkgICAgc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0KChjaGFyX3UgKikiaXNrIiwgLTEsIHAsCisJCQkJCQkJICBPUFRfRlJFRXxPUFRfTE9DQUwpOworCSAgICBjaGVja19idWZfb3B0aW9ucyhjdXJidWYpOworCSAgICAodm9pZClidWZfaW5pdF9jaGFydGFiKGN1cmJ1ZiwgRkFMU0UpOworCX0KKworCWN1cmJ1Zi0+Yl9wX3RzID0gODsJCS8qICd0YWJzdG9wJyBpcyA4ICovCisJY3Vyd2luLT53X3BfbGlzdCA9IEZBTFNFOwkvKiBubyBsaXN0IG1vZGUgKi8KKworCWN1cmJ1Zi0+Yl9wX21hID0gRkFMU0U7CQkvKiBub3QgbW9kaWZpYWJsZSAqLworCWN1cmJ1Zi0+Yl9wX2JpbiA9IEZBTFNFOwkvKiByZXNldCAnYmluJyBiZWZvcmUgcmVhZGluZyBmaWxlICovCisJY3Vyd2luLT53X3BfbnUgPSAwOwkJLyogbm8gbGluZSBudW1iZXJzICovCisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisJY3Vyd2luLT53X3Bfc2NiID0gRkFMU0U7CS8qIG5vIHNjcm9sbCBiaW5kaW5nICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0FSQUJJQworCWN1cndpbi0+d19wX2FyYWIgPSBGQUxTRTsJLyogbm8gYXJhYmljIG1vZGUgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJY3Vyd2luLT53X3BfcmwgID0gRkFMU0U7CS8qIGhlbHAgd2luZG93IGlzIGxlZnQtdG8tcmlnaHQgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworCWN1cndpbi0+d19wX2ZlbiA9IEZBTFNFOwkvKiBObyBmb2xkaW5nIGluIHRoZSBoZWxwIHdpbmRvdyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9ESUZGCisJY3Vyd2luLT53X3BfZGlmZiA9IEZBTFNFOwkvKiBObyAnZGlmZicgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJYnVmID0gY3VyYnVmOworI2VuZGlmCisJc2V0X2J1Zmxpc3RlZChGQUxTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJYnVmID0gY3VyYnVmOworI2VuZGlmCisJLyogRG9uJ3QgbWFrZSBhIGJ1ZmZlciBsaXN0ZWQgaWYgaXQncyBhIGhlbHAgYnVmZmVyLiAgVXNlZnVsIHdoZW4KKwkgKiB1c2luZyBDVFJMLU8gdG8gZ28gYmFjayB0byBhIGhlbHAgZmlsZS4gKi8KKwlpZiAoIWN1cmJ1Zi0+Yl9oZWxwKQorCSAgICBzZXRfYnVmbGlzdGVkKFRSVUUpOworICAgIH0KKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIC8qIElmIGF1dG9jb21tYW5kcyBjaGFuZ2UgYnVmZmVycyB1bmRlciBvdXIgZmluZ2VycywgZm9yZ2V0IGFib3V0CisgICAgICogZWRpdGluZyB0aGUgZmlsZS4gKi8KKyAgICBpZiAoYnVmICE9IGN1cmJ1ZikKKwlnb3RvIHRoZWVuZDsKKyMgaWZkZWYgRkVBVF9FVkFMCisgICAgaWYgKGFib3J0aW5nKCkpCSAgICAvKiBhdXRvY21kcyBtYXkgYWJvcnQgc2NyaXB0IHByb2Nlc3NpbmcgKi8KKwlnb3RvIHRoZWVuZDsKKyMgZW5kaWYKKworICAgIC8qIFNpbmNlIHdlIGFyZSBzdGFydGluZyB0byBlZGl0IGEgZmlsZSwgY29uc2lkZXIgdGhlIGZpbGV0eXBlIHRvIGJlCisgICAgICogdW5zZXQuICBIZWxwcyBmb3Igd2hlbiBhbiBhdXRvY29tbWFuZCBjaGFuZ2VzIGZpbGVzIGFuZCBleHBlY3RzIHN5bnRheAorICAgICAqIGhpZ2hsaWdodGluZyB0byB3b3JrIGluIHRoZSBvdGhlciBmaWxlLiAqLworICAgIGRpZF9maWxldHlwZSA9IEZBTFNFOworI2VuZGlmCisKKy8qCisgKiBvdGhlcl9maWxlCW9sZGJ1ZgorICogIEZBTFNFCUZBTFNFCSAgICByZS1lZGl0IHNhbWUgZmlsZSwgYnVmZmVyIGlzIHJlLXVzZWQKKyAqICBGQUxTRQlUUlVFCSAgICByZS1lZGl0IHNhbWUgZmlsZSwgbm90aGluZyBjaGFuZ2VzCisgKiAgVFJVRQlGQUxTRQkgICAgc3RhcnQgZWRpdGluZyBuZXcgZmlsZSwgbmV3IGJ1ZmZlcgorICogIFRSVUUJVFJVRQkgICAgc3RhcnQgZWRpdGluZyBpbiBleGlzdGluZyBidWZmZXIgKG5vdGhpbmcgdG8gZG8pCisgKi8KKyAgICBpZiAoIW90aGVyX2ZpbGUgJiYgIW9sZGJ1ZikJCS8qIHJlLXVzZSB0aGUgYnVmZmVyICovCisgICAgeworCXNldF9sYXN0X2N1cnNvcihjdXJ3aW4pOwkvKiBtYXkgc2V0IGJfbGFzdF9jdXJzb3IgKi8KKwlpZiAobmV3bG51bSA9PSBFQ01EX0xBU1QgfHwgbmV3bG51bSA9PSBFQ01EX0xBU1RMKQorCXsKKwkgICAgbmV3bG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKwkgICAgc29sY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisJfQorI2lmZGVmIEZFQVRfQVVUT0NNRAorCWJ1ZiA9IGN1cmJ1ZjsKKwlpZiAoYnVmLT5iX2ZuYW1lICE9IE5VTEwpCisJICAgIG5ld19uYW1lID0gdmltX3N0cnNhdmUoYnVmLT5iX2ZuYW1lKTsKKwllbHNlCisJICAgIG5ld19uYW1lID0gTlVMTDsKKyNlbmRpZgorCWJ1Zl9mcmVlYWxsKGN1cmJ1ZiwgRkFMU0UsIEZBTFNFKTsgICAvKiBmcmVlIGFsbCB0aGluZ3MgZm9yIGJ1ZmZlciAqLworI2lmZGVmIEZFQVRfQVVUT0NNRAorCS8qIElmIGF1dG9jb21tYW5kcyBkZWxldGVkIHRoZSBidWZmZXIgd2Ugd2VyZSBnb2luZyB0byByZS1lZGl0LCBnaXZlCisJICogdXAgYW5kIGp1bXAgdG8gdGhlIGVuZC4gKi8KKwlpZiAoIWJ1Zl92YWxpZChidWYpKQorCXsKKwkgICAgZGVsYnVmX21zZyhuZXdfbmFtZSk7CS8qIGZyZWVzIG5ld19uYW1lICovCisJICAgIGdvdG8gdGhlZW5kOworCX0KKwl2aW1fZnJlZShuZXdfbmFtZSk7CisKKwkvKiBJZiBhdXRvY29tbWFuZHMgY2hhbmdlIGJ1ZmZlcnMgdW5kZXIgb3VyIGZpbmdlcnMsIGZvcmdldCBhYm91dAorCSAqIHJlLWVkaXRpbmcgdGhlIGZpbGUuICBTaG91bGQgZG8gdGhlIGJ1Zl9jbGVhcl9maWxlKCksIGJ1dCBwZXJoYXBzCisJICogdGhlIGF1dG9jb21tYW5kcyBjaGFuZ2VkIHRoZSBidWZmZXIuLi4gKi8KKwlpZiAoYnVmICE9IGN1cmJ1ZikKKwkgICAgZ290byB0aGVlbmQ7CisjIGlmZGVmIEZFQVRfRVZBTAorCWlmIChhYm9ydGluZygpKQkgICAgLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCisJICAgIGdvdG8gdGhlZW5kOworIyBlbmRpZgorI2VuZGlmCisJYnVmX2NsZWFyX2ZpbGUoY3VyYnVmKTsKKwljdXJidWYtPmJfb3Bfc3RhcnQubG51bSA9IDA7CS8qIGNsZWFyICdbIGFuZCAnXSBtYXJrcyAqLworCWN1cmJ1Zi0+Yl9vcF9lbmQubG51bSA9IDA7CisgICAgfQorCisvKgorICogSWYgd2UgZ2V0IGhlcmUgd2UgYXJlIHN1cmUgdG8gc3RhcnQgZWRpdGluZworICovCisgICAgLyogZG9uJ3QgcmVkcmF3IHVudGlsIHRoZSBjdXJzb3IgaXMgaW4gdGhlIHJpZ2h0IGxpbmUgKi8KKyAgICArK1JlZHJhd2luZ0Rpc2FibGVkOworCisgICAgLyogQXNzdW1lIHN1Y2Nlc3Mgbm93ICovCisgICAgcmV0dmFsID0gT0s7CisKKyAgICAvKgorICAgICAqIFJlc2V0IGN1cnNvciBwb3NpdGlvbiwgY291bGQgYmUgdXNlZCBieSBhdXRvY29tbWFuZHMuCisgICAgICovCisgICAgY2hlY2tfY3Vyc29yKCk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHdlIGFyZSBlZGl0aW5nIHRoZSB3X2FyZ19pZHggZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdC4KKyAgICAgKi8KKyAgICBjaGVja19hcmdfaWR4KGN1cndpbik7CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBpZiAoIWF1dG9fYnVmKQorI2VuZGlmCisgICAgeworCS8qCisJICogU2V0IGN1cnNvciBhbmQgaW5pdCB3aW5kb3cgYmVmb3JlIHJlYWRpbmcgdGhlIGZpbGUgYW5kIGV4ZWN1dGluZworCSAqIGF1dG9jb21tYW5kcy4gIFRoaXMgYWxsb3dzIGZvciB0aGUgYXV0b2NvbW1hbmRzIHRvIHBvc2l0aW9uIHRoZQorCSAqIGN1cnNvci4KKwkgKi8KKwl3aW5faW5pdChjdXJ3aW4pOworCisjaWZkZWYgRkVBVF9GT0xESU5HCisJLyogSXQncyBsaWtlIGFsbCBsaW5lcyBpbiB0aGUgYnVmZmVyIGNoYW5nZWQuICBOZWVkIHRvIHVwZGF0ZQorCSAqIGF1dG9tYXRpYyBmb2xkaW5nLiAqLworCWZvbGRVcGRhdGVBbGwoY3Vyd2luKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkgfHwgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpCisJaWYgKHBfYWNkICYmIGN1cmJ1Zi0+Yl9mZm5hbWUgIT0gTlVMTAorCQkJCSAgICAgJiYgdmltX2NoZGlyZmlsZShjdXJidWYtPmJfZmZuYW1lKSA9PSBPSykKKwkgICAgc2hvcnRlbl9mbmFtZXMoVFJVRSk7CisjZW5kaWYKKwkvKgorCSAqIENhcmVmdWw6IG9wZW5fYnVmZmVyKCkgYW5kIGFwcGx5X2F1dG9jbWRzKCkgbWF5IGNoYW5nZSB0aGUgY3VycmVudAorCSAqIGJ1ZmZlciBhbmQgd2luZG93LgorCSAqLworCWxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJdG9wbGluZSA9IGN1cndpbi0+d190b3BsaW5lOworCWlmICghb2xkYnVmKQkJCSAgICAvKiBuZWVkIHRvIHJlYWQgdGhlIGZpbGUgKi8KKwl7CisjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKQorCSAgICBzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfRElBTE9HOworI2VuZGlmCisJICAgIGN1cmJ1Zi0+Yl9mbGFncyB8PSBCRl9DSEVDS19STzsgLyogc2V0L3Jlc2V0ICdybycgZmxhZyAqLworCisJICAgIC8qCisJICAgICAqIE9wZW4gdGhlIGJ1ZmZlciBhbmQgcmVhZCB0aGUgZmlsZS4KKwkgICAgICovCisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCSAgICBpZiAoc2hvdWxkX2Fib3J0KG9wZW5fYnVmZmVyKEZBTFNFLCBlYXApKSkKKwkJcmV0dmFsID0gRkFJTDsKKyNlbHNlCisJICAgICh2b2lkKW9wZW5fYnVmZmVyKEZBTFNFLCBlYXApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCisJICAgIGlmIChzd2FwX2V4aXN0c19hY3Rpb24gPT0gU0VBX1FVSVQpCisJCXJldHZhbCA9IEZBSUw7CisJICAgIGhhbmRsZV9zd2FwX2V4aXN0cyhvbGRfY3VyYnVmKTsKKyNlbmRpZgorCX0KKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwllbHNlCisJeworCSAgICBhcHBseV9hdXRvY21kc19yZXR2YWwoRVZFTlRfQlVGRU5URVIsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYsCisJCQkJCQkJCSAgICAmcmV0dmFsKTsKKwkgICAgYXBwbHlfYXV0b2NtZHNfcmV0dmFsKEVWRU5UX0JVRldJTkVOVEVSLCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmLAorCQkJCQkJCQkgICAgJnJldHZhbCk7CisJfQorCWNoZWNrX2FyZ19pZHgoY3Vyd2luKTsKKyNlbmRpZgorCisJLyoKKwkgKiBJZiBhdXRvY29tbWFuZHMgY2hhbmdlIHRoZSBjdXJzb3IgcG9zaXRpb24gb3IgdG9wbGluZSwgd2Ugc2hvdWxkCisJICoga2VlcCBpdC4KKwkgKi8KKwlpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtICE9IGxudW0pCisJeworCSAgICBuZXdsbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCSAgICBuZXdjb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwl9CisJaWYgKGN1cndpbi0+d190b3BsaW5lID09IHRvcGxpbmUpCisJICAgIHRvcGxpbmUgPSAwOworCisJLyogRXZlbiB3aGVuIGN1cnNvciBkaWRuJ3QgbW92ZSB3ZSBuZWVkIHRvIHJlY29tcHV0ZSB0b3BsaW5lLiAqLworCWNoYW5nZWRfbGluZV9hYnZfY3VycygpOworCisjaWZkZWYgRkVBVF9USVRMRQorCW1ha2V0aXRsZSgpOworI2VuZGlmCisgICAgfQorCisjaWZkZWYgRkVBVF9ESUZGCisgICAgLyogVGVsbCB0aGUgZGlmZiBzdHVmZiB0aGF0IHRoaXMgYnVmZmVyIGlzIG5ldyBhbmQvb3IgbmVlZHMgdXBkYXRpbmcuCisgICAgICogQWxzbyBuZWVkZWQgd2hlbiByZS1lZGl0aW5nIHRoZSBzYW1lIGJ1ZmZlciwgYmVjYXVzZSB1bmxvYWRpbmcgd2lsbAorICAgICAqIGhhdmUgcmVtb3ZlZCBpdCBhcyBhIGRpZmYgYnVmZmVyLiAqLworICAgIGRpZmZfbmV3X2J1ZmZlcigpOworICAgIGRpZmZfaW52YWxpZGF0ZSgpOworI2VuZGlmCisKKyAgICBpZiAoY29tbWFuZCA9PSBOVUxMKQorICAgIHsKKwlpZiAobmV3Y29sID49IDApCS8qIHBvc2l0aW9uIHNldCBieSBhdXRvY29tbWFuZHMgKi8KKwl7CisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IG5ld2xudW07CisJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gbmV3Y29sOworCSAgICBjaGVja19jdXJzb3IoKTsKKwl9CisJZWxzZSBpZiAobmV3bG51bSA+IDApCS8qIGxpbmUgbnVtYmVyIGZyb20gY2FsbGVyIG9yIG9sZCBwb3NpdGlvbiAqLworCXsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbmV3bG51bTsKKwkgICAgY2hlY2tfY3Vyc29yX2xudW0oKTsKKwkgICAgaWYgKHNvbGNvbCA+PSAwICYmICFwX3NvbCkKKwkgICAgeworCQkvKiAnc29sJyBpcyBvZmY6IFVzZSBsYXN0IGtub3duIGNvbHVtbi4gKi8KKwkJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBzb2xjb2w7CisJCWNoZWNrX2N1cnNvcl9jb2woKTsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCWN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorCQljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKwkgICAgfQorCSAgICBlbHNlCisJCWJlZ2lubGluZShCTF9TT0wgfCBCTF9GSVgpOworCX0KKwllbHNlCQkJLyogbm8gbGluZSBudW1iZXIsIGdvIHRvIGxhc3QgbGluZSBpbiBFeCBtb2RlICovCisJeworCSAgICBpZiAoZXhtb2RlX2FjdGl2ZSkKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJICAgIGJlZ2lubGluZShCTF9XSElURSB8IEJMX0ZJWCk7CisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIC8qIENoZWNrIGlmIGN1cnNvcnMgaW4gb3RoZXIgd2luZG93cyBvbiB0aGUgc2FtZSBidWZmZXIgYXJlIHN0aWxsIHZhbGlkICovCisgICAgY2hlY2tfbG51bXMoRkFMU0UpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIERpZCBub3QgcmVhZCB0aGUgZmlsZSwgbmVlZCB0byBzaG93IHNvbWUgaW5mbyBhYm91dCB0aGUgZmlsZS4KKyAgICAgKiBEbyB0aGlzIGFmdGVyIHNldHRpbmcgdGhlIGN1cnNvci4KKyAgICAgKi8KKyAgICBpZiAob2xkYnVmCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJCSYmICFhdXRvX2J1ZgorI2VuZGlmCisJCQkgICAgKQorICAgIHsKKwlpbnQJbXNnX3Njcm9sbF9zYXZlID0gbXNnX3Njcm9sbDsKKworCS8qIE9iZXkgdGhlICdPJyBmbGFnIGluICdjcG9wdGlvbnMnOiBvdmVyd3JpdGUgYW55IHByZXZpb3VzIGZpbGUKKwkgKiBtZXNzYWdlLiAqLworCWlmIChzaG9ydG1lc3MoU0hNX09WRVJBTEwpICYmICFleGl0aW5nICYmIHBfdmVyYm9zZSA9PSAwKQorCSAgICBtc2dfc2Nyb2xsID0gRkFMU0U7CisJaWYgKCFtc2dfc2Nyb2xsKQkvKiB3YWl0IGEgYml0IHdoZW4gb3ZlcndyaXRpbmcgYW4gZXJyb3IgbXNnICovCisJICAgIGNoZWNrX2Zvcl9kZWxheShGQUxTRSk7CisJbXNnX3N0YXJ0KCk7CisJbXNnX3Njcm9sbCA9IG1zZ19zY3JvbGxfc2F2ZTsKKwltc2dfc2Nyb2xsZWRfaWduID0gVFJVRTsKKworCWZpbGVpbmZvKEZBTFNFLCBUUlVFLCBGQUxTRSk7CisKKwltc2dfc2Nyb2xsZWRfaWduID0gRkFMU0U7CisgICAgfQorCisgICAgaWYgKGNvbW1hbmQgIT0gTlVMTCkKKwlkb19jbWRsaW5lKGNvbW1hbmQsIE5VTEwsIE5VTEwsIERPQ01EX1ZFUkJPU0UpOworCisjaWZkZWYgRkVBVF9LRVlNQVAKKyAgICBpZiAoY3VyYnVmLT5iX2ttYXBfc3RhdGUgJiBLRVlNQVBfSU5JVCkKKwlrZXltYXBfaW5pdCgpOworI2VuZGlmCisKKyAgICAtLVJlZHJhd2luZ0Rpc2FibGVkOworICAgIGlmICghc2tpcF9yZWRyYXcpCisgICAgeworCW4gPSBwX3NvOworCWlmICh0b3BsaW5lID09IDAgJiYgY29tbWFuZCA9PSBOVUxMKQorCSAgICBwX3NvID0gOTk5OwkJCS8qIGZvcmNlIGN1cnNvciBoYWxmd2F5IHRoZSB3aW5kb3cgKi8KKwl1cGRhdGVfdG9wbGluZSgpOworI2lmZGVmIEZFQVRfU0NST0xMQklORAorCWN1cndpbi0+d19zY2JpbmRfcG9zID0gY3Vyd2luLT53X3RvcGxpbmU7CisjZW5kaWYKKwlwX3NvID0gbjsKKwlyZWRyYXdfY3VyYnVmX2xhdGVyKE5PVF9WQUxJRCk7CS8qIHJlZHJhdyB0aGlzIGJ1ZmZlciBsYXRlciAqLworICAgIH0KKworICAgIGlmIChwX2ltKQorCW5lZWRfc3RhcnRfaW5zZXJ0bW9kZSA9IFRSVUU7CisKKyNpZiBkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKSB8fCBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykKKyAgICAvKiBDaGFuZ2UgZGlyZWN0b3JpZXMgd2hlbiB0aGUgYWNkIG9wdGlvbiBpcyBzZXQgb24uICovCisgICAgaWYgKHBfYWNkICYmIGN1cmJ1Zi0+Yl9mZm5hbWUgIT0gTlVMTAorCQkJCSAgICAgJiYgdmltX2NoZGlyZmlsZShjdXJidWYtPmJfZmZuYW1lKSA9PSBPSykKKwlzaG9ydGVuX2ZuYW1lcyhUUlVFKTsKKworICAgIGlmIChndWkuaW5fdXNlICYmIGN1cmJ1Zi0+Yl9mZm5hbWUgIT0gTlVMTCkKKyAgICB7CisjIGlmZGVmIEZFQVRfU1VOX1dPUktTSE9QCisJaWYgKHVzaW5nU3VuV29ya1Nob3ApCisJICAgIHdvcmtzaG9wX2ZpbGVfb3BlbmVkKChjaGFyICopY3VyYnVmLT5iX2ZmbmFtZSwgY3VyYnVmLT5iX3Bfcm8pOworIyBlbmRpZgorIyBpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKwlpZiAodXNpbmdOZXRiZWFucykKKwkgICAgbmV0YmVhbnNfZmlsZV9vcGVuZWQoKGNoYXIgKiljdXJidWYtPmJfZmZuYW1lKTsKKyMgZW5kaWYKKyAgICB9CisjZW5kaWYKKwordGhlZW5kOgorI2lmZGVmIEZFQVRfQlJPV1NFCisgICAgdmltX2ZyZWUoYnJvd3NlX2ZpbGUpOworI2VuZGlmCisgICAgdmltX2ZyZWUoZnJlZV9mbmFtZSk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIHN0YXRpYyB2b2lkCitkZWxidWZfbXNnKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIEVNU0cyKF8oIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIiksCisJICAgIG5hbWUgPT0gTlVMTCA/IChjaGFyX3UgKikiIiA6IG5hbWUpOworICAgIHZpbV9mcmVlKG5hbWUpOworICAgIGF1X25ld19jdXJidWYgPSBOVUxMOworfQorI2VuZGlmCisKKy8qCisgKiAiOmluc2VydCIgYW5kICI6YXBwZW5kIiwgYWxzbyB1c2VkIGJ5ICI6Y2hhbmdlIgorICovCisgICAgdm9pZAorZXhfYXBwZW5kKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcl91CSp0aGVsaW5lOworICAgIGludAkJZGlkX3VuZG8gPSBGQUxTRTsKKyAgICBsaW5lbnJfVAlsbnVtID0gZWFwLT5saW5lMjsKKworICAgIGlmIChlYXAtPmNtZGlkeCAhPSBDTURfYXBwZW5kKQorCS0tbG51bTsKKworICAgIFN0YXRlID0gSU5TRVJUOwkJICAgIC8qIGJlaGF2ZSBsaWtlIGluIEluc2VydCBtb2RlICovCisgICAgaWYgKGN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0ID09IEJfSU1PREVfTE1BUCkKKwlTdGF0ZSB8PSBMQU5HTUFQOworICAgIHdoaWxlICgxKQorICAgIHsKKwltc2dfc2Nyb2xsID0gVFJVRTsKKwluZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisJaWYgKGVhcC0+Z2V0bGluZSA9PSBOVUxMKQorCSAgICB0aGVsaW5lID0gZ2V0Y21kbGluZSgKKyNpZmRlZiBGRUFUX0VWQUwKKwkJICAgIGVhcC0+Y3N0YWNrLT5jc193aGlsZWxldmVsID4gMCA/IC0xIDoKKyNlbmRpZgorCQkgICAgTlVMLCAwTCwgMCk7CisJZWxzZQorCSAgICB0aGVsaW5lID0gZWFwLT5nZXRsaW5lKAorI2lmZGVmIEZFQVRfRVZBTAorCQkgICAgZWFwLT5jc3RhY2stPmNzX3doaWxlbGV2ZWwgPiAwID8gLTEgOgorI2VuZGlmCisJCSAgICBOVUwsIGVhcC0+Y29va2llLCAwKTsKKwlsaW5lc19sZWZ0ID0gUm93cyAtIDE7CisJaWYgKHRoZWxpbmUgPT0gTlVMTCB8fCAodGhlbGluZVswXSA9PSAnLicgJiYgdGhlbGluZVsxXSA9PSBOVUwpCisJCXx8ICghZGlkX3VuZG8gJiYgdV9zYXZlKGxudW0sIGxudW0gKyAxKSA9PSBGQUlMKSkKKwl7CisJICAgIHZpbV9mcmVlKHRoZWxpbmUpOworCSAgICBicmVhazsKKwl9CisKKwlkaWRfdW5kbyA9IFRSVUU7CisJbWxfYXBwZW5kKGxudW0sIHRoZWxpbmUsIChjb2xucl9UKTAsIEZBTFNFKTsKKwlhcHBlbmRlZF9saW5lc19tYXJrKGxudW0sIDFMKTsKKworCXZpbV9mcmVlKHRoZWxpbmUpOworCSsrbG51bTsKKwltc2dfZGlkb3V0ID0gVFJVRTsJLyogYWxzbyBzY3JvbGwgZm9yIGVtcHR5IGxpbmUgKi8KKyAgICB9CisgICAgU3RhdGUgPSBOT1JNQUw7CisKKyAgICAvKiAic3RhcnQiIGlzIHNldCB0byBlYXAtPmxpbmUyKzEgdW5sZXNzIHRoYXQgcG9zaXRpb24gaXMgaW52YWxpZCAod2hlbgorICAgICAqIGVhcC0+bGluZTIgcG9pbnRlZCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgYW5kIG5vdGhpZyB3YXMgYXBwZW5kZWQpCisgICAgICogImVuZCIgaXMgc2V0IHRvIGxudW0gd2hlbiBzb21ldGhpbmcgaGFzIGJlZW4gYXBwZW5kZWQsIG90aGVyd2lzZQorICAgICAqIGl0IGlzIHRoZSBzYW1lIHRoYW4gInN0YXJ0IiAgLS0gQWNldmVkbyAqLworICAgIGN1cmJ1Zi0+Yl9vcF9zdGFydC5sbnVtID0gKGVhcC0+bGluZTIgPCBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkgPworCWVhcC0+bGluZTIgKyAxIDogY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisgICAgaWYgKGVhcC0+Y21kaWR4ICE9IENNRF9hcHBlbmQpCisJLS1jdXJidWYtPmJfb3Bfc3RhcnQubG51bTsKKyAgICBjdXJidWYtPmJfb3BfZW5kLmxudW0gPSAoZWFwLT5saW5lMiA8IGxudW0pCisJCQkJCSAgICAgPyBsbnVtIDogY3VyYnVmLT5iX29wX3N0YXJ0LmxudW07CisgICAgY3VyYnVmLT5iX29wX3N0YXJ0LmNvbCA9IGN1cmJ1Zi0+Yl9vcF9lbmQuY29sID0gMDsKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtOworICAgIGNoZWNrX2N1cnNvcl9sbnVtKCk7CisgICAgYmVnaW5saW5lKEJMX1NPTCB8IEJMX0ZJWCk7CisKKyAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CS8qIGRvbid0IHVzZSB3YWl0X3JldHVybigpIG5vdyAqLworICAgIGV4X25vX3JlcHJpbnQgPSBUUlVFOworfQorCisvKgorICogIjpjaGFuZ2UiCisgKi8KKyAgICB2b2lkCitleF9jaGFuZ2UoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBsaW5lbnJfVAlsbnVtOworCisgICAgaWYgKGVhcC0+bGluZTIgPj0gZWFwLT5saW5lMQorCSAgICAmJiB1X3NhdmUoZWFwLT5saW5lMSAtIDEsIGVhcC0+bGluZTIgKyAxKSA9PSBGQUlMKQorCXJldHVybjsKKworICAgIGZvciAobG51bSA9IGVhcC0+bGluZTI7IGxudW0gPj0gZWFwLT5saW5lMTsgLS1sbnVtKQorICAgIHsKKwlpZiAoY3VyYnVmLT5iX21sLm1sX2ZsYWdzICYgTUxfRU1QVFkpCSAgICAvKiBub3RoaW5nIHRvIGRlbGV0ZSAqLworCSAgICBicmVhazsKKwltbF9kZWxldGUoZWFwLT5saW5lMSwgRkFMU0UpOworICAgIH0KKyAgICBkZWxldGVkX2xpbmVzX21hcmsoZWFwLT5saW5lMSwgKGxvbmcpKGVhcC0+bGluZTIgLSBsbnVtKSk7CisKKyAgICAvKiAiOmFwcGVuZCIgb24gdGhlIGxpbmUgYWJvdmUgdGhlIGRlbGV0ZWQgbGluZXMuICovCisgICAgZWFwLT5saW5lMiA9IGVhcC0+bGluZTE7CisgICAgZXhfYXBwZW5kKGVhcCk7Cit9CisKKyAgICB2b2lkCitleF96KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcl91CSp4OworICAgIGludAkJYmlnbmVzcyA9IGN1cndpbi0+d19oZWlnaHQgLSAzOworICAgIGNoYXJfdQlraW5kOworICAgIGludAkJbnVtYmVyZWQgPSBGQUxTRTsKKyAgICBpbnQJCW1pbnVzID0gMDsKKyAgICBsaW5lbnJfVAlzdGFydCwgZW5kLCBjdXJzLCBpOworICAgIGludAkJajsKKyAgICBsaW5lbnJfVAlsbnVtID0gZWFwLT5saW5lMjsKKworICAgIGlmIChiaWduZXNzIDwgMSkKKwliaWduZXNzID0gMTsKKworICAgIHggPSBlYXAtPmFyZzsKKyAgICBpZiAoKnggPT0gJyMnKQorICAgIHsKKwludW1iZXJlZCA9IFRSVUU7CisJKyt4OworICAgIH0KKworICAgIGtpbmQgPSAqeDsKKyAgICBpZiAoa2luZCA9PSAnLScgfHwga2luZCA9PSAnKycgfHwga2luZCA9PSAnPScgfHwga2luZCA9PSAnXicgfHwga2luZCA9PSAnLicpCisJKyt4OworCisgICAgaWYgKCp4ICE9IDApCisgICAgeworCWlmICghVklNX0lTRElHSVQoKngpKQorCXsKKwkgICAgRU1TRyhfKCJFMTQ0OiBub24tbnVtZXJpYyBhcmd1bWVudCB0byA6eiIpKTsKKwkgICAgcmV0dXJuOworCX0KKwllbHNlCisJICAgIGJpZ25lc3MgPSBhdG9pKChjaGFyICopeCk7CisgICAgfQorCisgICAgc3dpdGNoIChraW5kKQorICAgIHsKKwljYXNlICctJzoKKwkgICAgc3RhcnQgPSBsbnVtIC0gYmlnbmVzczsKKwkgICAgZW5kID0gbG51bTsKKwkgICAgY3VycyA9IGxudW07CisJICAgIGJyZWFrOworCisJY2FzZSAnPSc6CisJICAgIHN0YXJ0ID0gbG51bSAtIGJpZ25lc3MgLyAyICsgMTsKKwkgICAgZW5kID0gbG51bSArIGJpZ25lc3MgLyAyIC0gMTsKKwkgICAgY3VycyA9IGxudW07CisJICAgIG1pbnVzID0gMTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdeJzoKKwkgICAgc3RhcnQgPSBsbnVtIC0gYmlnbmVzcyAqIDI7CisJICAgIGVuZCA9IGxudW0gLSBiaWduZXNzOworCSAgICBjdXJzID0gbG51bSAtIGJpZ25lc3M7CisJICAgIGJyZWFrOworCisJY2FzZSAnLic6CisJICAgIHN0YXJ0ID0gbG51bSAtIGJpZ25lc3MgLyAyOworCSAgICBlbmQgPSBsbnVtICsgYmlnbmVzcyAvIDI7CisJICAgIGN1cnMgPSBlbmQ7CisJICAgIGJyZWFrOworCisJZGVmYXVsdDogIC8qICcrJyAqLworCSAgICBzdGFydCA9IGxudW07CisJICAgIGVuZCA9IGxudW0gKyBiaWduZXNzOworCSAgICBjdXJzID0gZW5kOworCSAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoc3RhcnQgPCAxKQorCXN0YXJ0ID0gMTsKKworICAgIGlmIChlbmQgPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwllbmQgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKworICAgIGlmIChjdXJzID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJY3VycyA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCisgICAgZm9yIChpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspCisgICAgeworCWlmIChtaW51cyAmJiBpID09IGxudW0pCisJeworCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKworCSAgICBmb3IgKGogPSAxOyBqIDwgQ29sdW1uczsgaisrKQorCQltc2dfcHV0Y2hhcignLScpOworCX0KKworCXByaW50X2xpbmUoaSwgbnVtYmVyZWQpOworCisJaWYgKG1pbnVzICYmIGkgPT0gbG51bSkKKwl7CisJICAgIG1zZ19wdXRjaGFyKCdcbicpOworCisJICAgIGZvciAoaiA9IDE7IGogPCBDb2x1bW5zOyBqKyspCisJCW1zZ19wdXRjaGFyKCctJyk7CisJfQorICAgIH0KKworICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGN1cnM7CisgICAgZXhfbm9fcmVwcmludCA9IFRSVUU7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgcmVzdHJpY3RlZCBmbGFnIGlzIHNldC4KKyAqIElmIHNvLCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBUUlVFLgorICogT3RoZXJ3aXNlLCByZXR1cm4gRkFMU0UuCisgKi8KKyAgICBpbnQKK2NoZWNrX3Jlc3RyaWN0ZWQoKQoreworICAgIGlmIChyZXN0cmljdGVkKQorICAgIHsKKwlFTVNHKF8oIkUxNDU6IFNoZWxsIGNvbW1hbmRzIG5vdCBhbGxvd2VkIGluIHJ2aW0iKSk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSBzZWN1cmUgZmxhZyBpcyBzZXQgKC5leHJjIG9yIC52aW1yYyBpbiBjdXJyZW50IGRpcmVjdG9yeSkuCisgKiBJZiBzbywgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gVFJVRS4KKyAqIE90aGVyd2lzZSwgcmV0dXJuIEZBTFNFLgorICovCisgICAgaW50CitjaGVja19zZWN1cmUoKQoreworICAgIGlmIChzZWN1cmUpCisgICAgeworCXNlY3VyZSA9IDI7CisJRU1TRyhfKGVfY3VyZGlyKSk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorI2lmZGVmIEhBVkVfU0FOREJPWAorICAgIC8qCisgICAgICogSW4gdGhlIHNhbmRib3ggbW9yZSB0aGluZ3MgYXJlIG5vdCBhbGxvd2VkLCBpbmNsdWRpbmcgdGhlIHRoaW5ncworICAgICAqIGRpc2FsbG93ZWQgaW4gc2VjdXJlIG1vZGUuCisgICAgICovCisgICAgaWYgKHNhbmRib3ggIT0gMCkKKyAgICB7CisJRU1TRyhfKGVfc2FuZGJveCkpOworCXJldHVybiBUUlVFOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGNoYXJfdQkqb2xkX3N1YiA9IE5VTEw7CS8qIHByZXZpb3VzIHN1YnN0aXR1dGUgcGF0dGVybiAqLworc3RhdGljIGludAlnbG9iYWxfbmVlZF9iZWdpbmxpbmU7CS8qIGNhbGwgYmVnaW5saW5lKCkgYWZ0ZXIgIjpnIiAqLworCisvKgorICogV2hlbiAiOmdsb2JhbCIgaXMgdXNlZCB0byBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucyBhbmQgY2hhbmdlZCBsaW5lcyBpcworICogYWNjdW11bGF0ZWQgdW50aWwgaXQncyBmaW5pc2hlZC4KKyAqLworc3RhdGljIGxvbmcJc3ViX25zdWJzOwkvKiB0b3RhbCBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucyAqLworc3RhdGljIGxpbmVucl9UCXN1Yl9ubGluZXM7CS8qIHRvdGFsIG51bWJlciBvZiBsaW5lcyBjaGFuZ2VkICovCisKKy8qIGRvX3N1YigpCisgKgorICogUGVyZm9ybSBhIHN1YnN0aXR1dGlvbiBmcm9tIGxpbmUgZWFwLT5saW5lMSB0byBsaW5lIGVhcC0+bGluZTIgdXNpbmcgdGhlCisgKiBjb21tYW5kIHBvaW50ZWQgdG8gYnkgZWFwLT5hcmcgd2hpY2ggc2hvdWxkIGJlIG9mIHRoZSBmb3JtOgorICoKKyAqIC9wYXR0ZXJuL3N1YnN0aXR1dGlvbi97ZmxhZ3N9CisgKgorICogVGhlIHVzdWFsIGVzY2FwZXMgYXJlIHN1cHBvcnRlZCBhcyBkZXNjcmliZWQgaW4gdGhlIHJlZ2V4cCBkb2NzLgorICovCisgICAgdm9pZAorZG9fc3ViKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBsb25nCWkgPSAwOworICAgIHJlZ21tYXRjaF9UIHJlZ21hdGNoOworICAgIHN0YXRpYyBpbnQJZG9fYWxsID0gRkFMU0U7CQkvKiBkbyBtdWx0aXBsZSBzdWJzdGl0dXRpb25zIHBlciBsaW5lICovCisgICAgc3RhdGljIGludAlkb19hc2sgPSBGQUxTRTsJCS8qIGFzayBmb3IgY29uZmlybWF0aW9uICovCisgICAgc3RhdGljIGludAlkb19lcnJvciA9IFRSVUU7CS8qIGlmIGZhbHNlLCBpZ25vcmUgZXJyb3JzICovCisgICAgc3RhdGljIGludAlkb19wcmludCA9IEZBTFNFOwkvKiBwcmludCBsYXN0IGxpbmUgd2l0aCBzdWJzLiAqLworICAgIHN0YXRpYyBpbnQJZG9faWMgPSAwOwkJLyogaWdub3JlIGNhc2UgZmxhZyAqLworICAgIGNoYXJfdQkqcGF0ID0gTlVMTCwgKnN1YiA9IE5VTEw7CS8qIGluaXQgZm9yIEdDQyAqLworICAgIGludAkJZGVsaW1pdGVyOworICAgIGludAkJc3VibGVuOworICAgIGludAkJZ290X3F1aXQgPSBGQUxTRTsKKyAgICBpbnQJCWdvdF9tYXRjaCA9IEZBTFNFOworICAgIGludAkJdGVtcDsKKyAgICBpbnQJCXdoaWNoX3BhdDsKKyAgICBjaGFyX3UJKmNtZDsKKyAgICBpbnQJCXNhdmVfU3RhdGU7CisgICAgbGluZW5yX1QJZmlyc3RfbGluZSA9IDA7CS8qIGZpcnN0IGNoYW5nZWQgbGluZSAqLworICAgIGxpbmVucl9UCWxhc3RfbGluZT0gMDsJLyogYmVsb3cgbGFzdCBjaGFuZ2VkIGxpbmUgQUZURVIgdGhlCisJCQkJCSAqIGNoYW5nZSAqLworICAgIGxpbmVucl9UCW9sZF9saW5lX2NvdW50ID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisgICAgbGluZW5yX1QJbGluZTI7CisgICAgbG9uZwlubWF0Y2g7CQkvKiBudW1iZXIgb2YgbGluZXMgaW4gbWF0Y2ggKi8KKyAgICBsaW5lbnJfVAlzdWJfZmlyc3RsbnVtOwkvKiBuciBvZiBmaXJzdCBzdWIgbGluZSAqLworICAgIGNoYXJfdQkqc3ViX2ZpcnN0bGluZTsJLyogYWxsb2NhdGVkIGNvcHkgb2YgZmlyc3Qgc3ViIGxpbmUgKi8KKworICAgIGNtZCA9IGVhcC0+YXJnOworICAgIGlmICghZ2xvYmFsX2J1c3kpCisgICAgeworCXN1Yl9uc3VicyA9IDA7CisJc3ViX25saW5lcyA9IDA7CisgICAgfQorCisjaWZkZWYgRkVBVF9GS01BUAkvKiByZXZlcnNlIHRoZSBmbG93IG9mIHRoZSBGYXJzaSBjaGFyYWN0ZXJzICovCisgICAgaWYgKHBfYWx0a2V5bWFwICYmIGN1cndpbi0+d19wX3JsKQorCWxyRl9zdWIoY21kKTsKKyNlbmRpZgorCisgICAgaWYgKGVhcC0+Y21kaWR4ID09IENNRF90aWxkZSkKKwl3aGljaF9wYXQgPSBSRV9MQVNUOwkvKiB1c2UgbGFzdCB1c2VkIHJlZ2V4cCAqLworICAgIGVsc2UKKwl3aGljaF9wYXQgPSBSRV9TVUJTVDsJLyogdXNlIGxhc3Qgc3Vic3RpdHV0ZSByZWdleHAgKi8KKworCQkJCS8qIG5ldyBwYXR0ZXJuIGFuZCBzdWJzdGl0dXRpb24gKi8KKyAgICBpZiAoZWFwLT5jbWRbMF0gPT0gJ3MnICYmICpjbWQgIT0gTlVMICYmICF2aW1faXN3aGl0ZSgqY21kKQorCQkmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikiMDEyMzQ1Njc4OWNlZ3JpSXB8XCIiLCAqY21kKSA9PSBOVUxMKQorICAgIHsKKwkJCQkvKiBkb24ndCBhY2NlcHQgYWxwaGFudW1lcmljIGZvciBzZXBhcmF0b3IgKi8KKwlpZiAoaXNhbHBoYSgqY21kKSkKKwl7CisJICAgIEVNU0coXygiRTE0NjogUmVndWxhciBleHByZXNzaW9ucyBjYW4ndCBiZSBkZWxpbWl0ZWQgYnkgbGV0dGVycyIpKTsKKwkgICAgcmV0dXJuOworCX0KKwkvKgorCSAqIHVuZG9jdW1lbnRlZCB2aSBmZWF0dXJlOgorCSAqICAiXC9zdWIvIiBhbmQgIlw/c3ViPyIgdXNlIGxhc3QgdXNlZCBzZWFyY2ggcGF0dGVybiAoYWxtb3N0IGxpa2UKKwkgKiAgLy9zdWIvcikuICAiXCZzdWImIiB1c2UgbGFzdCBzdWJzdGl0dXRlIHBhdHRlcm4gKGxpa2UgLy9zdWIvKS4KKwkgKi8KKwlpZiAoKmNtZCA9PSAnXFwnKQorCXsKKwkgICAgKytjbWQ7CisJICAgIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiLz8mIiwgKmNtZCkgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKF8oZV9iYWNrc2xhc2gpKTsKKwkJcmV0dXJuOworCSAgICB9CisJICAgIGlmICgqY21kICE9ICcmJykKKwkJd2hpY2hfcGF0ID0gUkVfU0VBUkNIOwkgICAgLyogdXNlIGxhc3QgJy8nIHBhdHRlcm4gKi8KKwkgICAgcGF0ID0gKGNoYXJfdSAqKSIiOwkJICAgIC8qIGVtcHR5IHNlYXJjaCBwYXR0ZXJuICovCisJICAgIGRlbGltaXRlciA9ICpjbWQrKzsJCSAgICAvKiByZW1lbWJlciBkZWxpbWl0ZXIgY2hhcmFjdGVyICovCisJfQorCWVsc2UJCS8qIGZpbmQgdGhlIGVuZCBvZiB0aGUgcmVnZXhwICovCisJeworCSAgICB3aGljaF9wYXQgPSBSRV9MQVNUOwkgICAgLyogdXNlIGxhc3QgdXNlZCByZWdleHAgKi8KKwkgICAgZGVsaW1pdGVyID0gKmNtZCsrOwkJICAgIC8qIHJlbWVtYmVyIGRlbGltaXRlciBjaGFyYWN0ZXIgKi8KKwkgICAgcGF0ID0gY21kOwkJCSAgICAvKiByZW1lbWJlciBzdGFydCBvZiBzZWFyY2ggcGF0ICovCisJICAgIGNtZCA9IHNraXBfcmVnZXhwKGNtZCwgZGVsaW1pdGVyLCBwX21hZ2ljLCAmZWFwLT5hcmcpOworCSAgICBpZiAoY21kWzBdID09IGRlbGltaXRlcikJICAgIC8qIGVuZCBkZWxpbWl0ZXIgZm91bmQgKi8KKwkJKmNtZCsrID0gTlVMOwkJICAgIC8qIHJlcGxhY2UgaXQgd2l0aCBhIE5VTCAqLworCX0KKworCS8qCisJICogU21hbGwgaW5jb21wYXRpYmlsaXR5OiB2aSBzZWVzICdcbicgYXMgZW5kIG9mIHRoZSBjb21tYW5kLCBidXQgaW4KKwkgKiBWaW0gd2Ugd2FudCB0byB1c2UgJ1xuJyB0byBmaW5kL3N1YnN0aXR1dGUgYSBOVUwuCisJICovCisJc3ViID0gY21kOwkgICAgLyogcmVtZW1iZXIgdGhlIHN0YXJ0IG9mIHRoZSBzdWJzdGl0dXRpb24gKi8KKworCXdoaWxlIChjbWRbMF0pCisJeworCSAgICBpZiAoY21kWzBdID09IGRlbGltaXRlcikJCS8qIGVuZCBkZWxpbWl0ZXIgZm91bmQgKi8KKwkgICAgeworCQkqY21kKysgPSBOVUw7CQkJLyogcmVwbGFjZSBpdCB3aXRoIGEgTlVMICovCisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChjbWRbMF0gPT0gJ1xcJyAmJiBjbWRbMV0gIT0gMCkJLyogc2tpcCBlc2NhcGVkIGNoYXJhY3RlcnMgKi8KKwkJKytjbWQ7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQljbWQgKz0gKCptYl9wdHIybGVuX2NoZWNrKShjbWQpOworCSAgICBlbHNlCisjZW5kaWYKKwkJKytjbWQ7CisJfQorCisJaWYgKCFlYXAtPnNraXApCisJeworCSAgICB2aW1fZnJlZShvbGRfc3ViKTsKKwkgICAgb2xkX3N1YiA9IHZpbV9zdHJzYXZlKHN1Yik7CisJfQorICAgIH0KKyAgICBlbHNlIGlmICghZWFwLT5za2lwKQkvKiB1c2UgcHJldmlvdXMgcGF0dGVybiBhbmQgc3Vic3RpdHV0aW9uICovCisgICAgeworCWlmIChvbGRfc3ViID09IE5VTEwpCS8qIHRoZXJlIGlzIG5vIHByZXZpb3VzIGNvbW1hbmQgKi8KKwl7CisJICAgIEVNU0coXyhlX25vcHJlc3ViKSk7CisJICAgIHJldHVybjsKKwl9CisJcGF0ID0gTlVMTDsJCS8qIHNlYXJjaF9yZWdjb21wKCkgd2lsbCB1c2UgcHJldmlvdXMgcGF0dGVybiAqLworCXN1YiA9IG9sZF9zdWI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGaW5kIHRyYWlsaW5nIG9wdGlvbnMuICBXaGVuICcmJyBpcyB1c2VkLCBrZWVwIG9sZCBvcHRpb25zLgorICAgICAqLworICAgIGlmICgqY21kID09ICcmJykKKwkrK2NtZDsKKyAgICBlbHNlCisgICAgeworCWlmICghcF9lZCkKKwl7CisJICAgIGlmIChwX2dkKQkJLyogZGVmYXVsdCBpcyBnbG9iYWwgb24gKi8KKwkJZG9fYWxsID0gVFJVRTsKKwkgICAgZWxzZQorCQlkb19hbGwgPSBGQUxTRTsKKwkgICAgZG9fYXNrID0gRkFMU0U7CisJfQorCWRvX2Vycm9yID0gVFJVRTsKKwlkb19wcmludCA9IEZBTFNFOworCWRvX2ljID0gMDsKKyAgICB9CisgICAgd2hpbGUgKCpjbWQpCisgICAgeworCS8qCisJICogTm90ZSB0aGF0ICdnJyBhbmQgJ2MnIGFyZSBhbHdheXMgaW52ZXJ0ZWQsIGFsc28gd2hlbiBwX2VkIGlzIG9mZi4KKwkgKiAncicgaXMgbmV2ZXIgaW52ZXJ0ZWQuCisJICovCisJaWYgKCpjbWQgPT0gJ2cnKQorCSAgICBkb19hbGwgPSAhZG9fYWxsOworCWVsc2UgaWYgKCpjbWQgPT0gJ2MnKQorCSAgICBkb19hc2sgPSAhZG9fYXNrOworCWVsc2UgaWYgKCpjbWQgPT0gJ2UnKQorCSAgICBkb19lcnJvciA9ICFkb19lcnJvcjsKKwllbHNlIGlmICgqY21kID09ICdyJykJICAgIC8qIHVzZSBsYXN0IHVzZWQgcmVnZXhwICovCisJICAgIHdoaWNoX3BhdCA9IFJFX0xBU1Q7CisJZWxzZSBpZiAoKmNtZCA9PSAncCcpCisJICAgIGRvX3ByaW50ID0gVFJVRTsKKwllbHNlIGlmICgqY21kID09ICdpJykJICAgIC8qIGlnbm9yZSBjYXNlICovCisJICAgIGRvX2ljID0gJ2knOworCWVsc2UgaWYgKCpjbWQgPT0gJ0knKQkgICAgLyogZG9uJ3QgaWdub3JlIGNhc2UgKi8KKwkgICAgZG9faWMgPSAnSSc7CisJZWxzZQorCSAgICBicmVhazsKKwkrK2NtZDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNoZWNrIGZvciBhIHRyYWlsaW5nIGNvdW50CisgICAgICovCisgICAgY21kID0gc2tpcHdoaXRlKGNtZCk7CisgICAgaWYgKFZJTV9JU0RJR0lUKCpjbWQpKQorICAgIHsKKwlpID0gZ2V0ZGlnaXRzKCZjbWQpOworCWlmIChpIDw9IDAgJiYgIWVhcC0+c2tpcCAmJiBkb19lcnJvcikKKwl7CisJICAgIEVNU0coXyhlX3plcm9jb3VudCkpOworCSAgICByZXR1cm47CisJfQorCWVhcC0+bGluZTEgPSBlYXAtPmxpbmUyOworCWVhcC0+bGluZTIgKz0gaSAtIDE7CisJaWYgKGVhcC0+bGluZTIgPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkgICAgZWFwLT5saW5lMiA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworICAgIH0KKworICAgIC8qCisgICAgICogY2hlY2sgZm9yIHRyYWlsaW5nIGNvbW1hbmQgb3IgZ2FyYmFnZQorICAgICAqLworICAgIGNtZCA9IHNraXB3aGl0ZShjbWQpOworICAgIGlmICgqY21kICYmICpjbWQgIT0gJyInKQkgICAgLyogaWYgbm90IGVuZC1vZi1saW5lIG9yIGNvbW1lbnQgKi8KKyAgICB7CisJZWFwLT5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChjbWQpOworCWlmIChlYXAtPm5leHRjbWQgPT0gTlVMTCkKKwl7CisJICAgIEVNU0coXyhlX3RyYWlsaW5nKSk7CisJICAgIHJldHVybjsKKwl9CisgICAgfQorCisgICAgaWYgKGVhcC0+c2tpcCkJICAgIC8qIG5vdCBleGVjdXRpbmcgY29tbWFuZHMsIG9ubHkgcGFyc2luZyAqLworCXJldHVybjsKKworICAgIGlmIChzZWFyY2hfcmVnY29tcChwYXQsIFJFX1NVQlNULCB3aGljaF9wYXQsIFNFQVJDSF9ISVMsICZyZWdtYXRjaCkgPT0gRkFJTCkKKyAgICB7CisJaWYgKGRvX2Vycm9yKQorCSAgICBFTVNHKF8oZV9pbnZjbWQpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogdGhlICdpJyBvciAnSScgZmxhZyBvdmVycnVsZXMgJ2lnbm9yZWNhc2UnIGFuZCAnc21hcnRjYXNlJyAqLworICAgIGlmIChkb19pYyA9PSAnaScpCisJcmVnbWF0Y2gucm1tX2ljID0gVFJVRTsKKyAgICBlbHNlIGlmIChkb19pYyA9PSAnSScpCisJcmVnbWF0Y2gucm1tX2ljID0gRkFMU0U7CisKKyAgICBzdWJfZmlyc3RsaW5lID0gTlVMTDsKKworICAgIC8qCisgICAgICogfiBpbiB0aGUgc3Vic3RpdHV0ZSBwYXR0ZXJuIGlzIHJlcGxhY2VkIHdpdGggdGhlIG9sZCBwYXR0ZXJuLgorICAgICAqIFdlIGRvIGl0IGhlcmUgb25jZSB0byBhdm9pZCBpdCB0byBiZSByZXBsYWNlZCBvdmVyIGFuZCBvdmVyIGFnYWluLgorICAgICAqIEJ1dCBkb24ndCBkbyBpdCB3aGVuIGl0IHN0YXJ0cyB3aXRoICJcPSIsIHRoZW4gaXQncyBhbiBleHByZXNzaW9uLgorICAgICAqLworICAgIGlmICghKHN1YlswXSA9PSAnXFwnICYmIHN1YlsxXSA9PSAnPScpKQorCXN1YiA9IHJlZ3RpbGRlKHN1YiwgcF9tYWdpYyk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBhIG1hdGNoIG9uIGVhY2ggbGluZS4KKyAgICAgKi8KKyAgICBsaW5lMiA9IGVhcC0+bGluZTI7CisgICAgZm9yIChsbnVtID0gZWFwLT5saW5lMTsgbG51bSA8PSBsaW5lMiAmJiAhKGdvdF9xdWl0CisjaWYgZGVmaW5lZChGRUFUX0VWQUwpICYmIGRlZmluZWQoRkVBVF9BVVRPQ01EKQorCQl8fCBhYm9ydGluZygpCisjZW5kaWYKKwkJKTsgKytsbnVtKQorICAgIHsKKwlzdWJfZmlyc3RsbnVtID0gbG51bTsKKwlubWF0Y2ggPSB2aW1fcmVnZXhlY19tdWx0aSgmcmVnbWF0Y2gsIGN1cndpbiwgY3VyYnVmLCBsbnVtLCAoY29sbnJfVCkwKTsKKwlpZiAobm1hdGNoKQorCXsKKwkgICAgY29sbnJfVAljb3B5Y29sOworCSAgICBjb2xucl9UCW1hdGNoY29sOworCSAgICBjb2xucl9UCXByZXZfbWF0Y2hjb2wgPSBNQVhDT0w7CisJICAgIGNoYXJfdQkqbmV3X2VuZCwgKm5ld19zdGFydCA9IE5VTEw7CisJICAgIHVuc2lnbmVkCW5ld19zdGFydF9sZW4gPSAwOworCSAgICBjaGFyX3UJKnAxOworCSAgICBpbnQJCWRpZF9zdWIgPSBGQUxTRTsKKwkgICAgaW50CQlsYXN0b25lOworCSAgICB1bnNpZ25lZAlsZW4sIG5lZWRlZF9sZW47CisJICAgIGxvbmcJbm1hdGNoX3RsID0gMDsJLyogbnIgb2YgbGluZXMgbWF0Y2hlZCBiZWxvdyBsbnVtICovCisJICAgIGludAkJZG9fYWdhaW47CS8qIGRvIGl0IGFnYWluIGFmdGVyIGpvaW5pbmcgbGluZXMgKi8KKworCSAgICAvKgorCSAgICAgKiBUaGUgbmV3IHRleHQgaXMgYnVpbGQgdXAgc3RlcCBieSBzdGVwLCB0byBhdm9pZCB0b28gbXVjaAorCSAgICAgKiBjb3B5aW5nLiAgVGhlcmUgYXJlIHRoZXNlIHBpZWNlczoKKwkgICAgICogc3ViX2ZpcnN0bGluZQlUaGUgb2xkIHRleHQsIHVubW9kaWZlZC4KKwkgICAgICogY29weWNvbAkJQ29sdW1uIGluIHRoZSBvbGQgdGV4dCB3aGVyZSB3ZSBzdGFydGVkCisJICAgICAqCQkJbG9va2luZyBmb3IgYSBtYXRjaDsgZnJvbSBoZXJlIG9sZCB0ZXh0IHN0aWxsCisJICAgICAqCQkJbmVlZHMgdG8gYmUgY29waWVkIHRvIHRoZSBuZXcgdGV4dC4KKwkgICAgICogbWF0Y2hjb2wJCUNvbHVtbiBudW1iZXIgb2YgdGhlIG9sZCB0ZXh0IHdoZXJlIHRvIGxvb2sKKwkgICAgICoJCQlmb3IgdGhlIG5leHQgbWF0Y2guICBJdCdzIGp1c3QgYWZ0ZXIgdGhlCisJICAgICAqCQkJcHJldmlvdXMgbWF0Y2ggb3Igb25lIGZ1cnRoZXIuCisJICAgICAqIHByZXZfbWF0Y2hjb2wJQ29sdW1uIGp1c3QgYWZ0ZXIgdGhlIHByZXZpb3VzIG1hdGNoIChpZiBhbnkpLgorCSAgICAgKgkJCU1vc3RseSBlcXVhbCB0byBtYXRjaGNvbCwgZXhjZXB0IGZvciB0aGUgZmlyc3QKKwkgICAgICoJCQltYXRjaCBhbmQgYWZ0ZXIgc2tpcHBpbmcgYW4gZW1wdHkgbWF0Y2guCisJICAgICAqIHJlZ21hdGNoLipwb3MJV2hlcmUgdGhlIHBhdHRlcm4gbWF0Y2hlZCBpbiB0aGUgb2xkIHRleHQuCisJICAgICAqIG5ld19zdGFydAlUaGUgbmV3IHRleHQsIGFsbCB0aGF0IGhhcyBiZWVuIHByb2R1Y2VkIHNvCisJICAgICAqCQkJZmFyLgorCSAgICAgKiBuZXdfZW5kCQlUaGUgbmV3IHRleHQsIHdoZXJlIHRvIGFwcGVuZCBuZXcgdGV4dC4KKwkgICAgICoKKwkgICAgICogbG51bQkJVGhlIGxpbmUgbnVtYmVyIHdoZXJlIHdlIHdlcmUgbG9va2luZyBmb3IgdGhlCisJICAgICAqCQkJZmlyc3QgbWF0Y2ggaW4gdGhlIG9sZCBsaW5lLgorCSAgICAgKiBzdWJfZmlyc3RsbnVtCVRoZSBsaW5lIG51bWJlciBpbiB0aGUgYnVmZmVyIHdoZXJlIHRvIGxvb2sKKwkgICAgICoJCQlmb3IgYSBtYXRjaC4gIENhbiBiZSBkaWZmZXJlbnQgZnJvbSAibG51bSIKKwkgICAgICoJCQl3aGVuIHRoZSBwYXR0ZXJuIG9yIHN1YnN0aXR1dGUgc3RyaW5nIGNvbnRhaW5zCisJICAgICAqCQkJbGluZSBicmVha3MuCisJICAgICAqCisJICAgICAqIFNwZWNpYWwgc2l0dWF0aW9uczoKKwkgICAgICogLSBXaGVuIHRoZSBzdWJzdGl0dXRlIHN0cmluZyBjb250YWlucyBhIGxpbmUgYnJlYWssIHRoZSBwYXJ0IHVwCisJICAgICAqICAgdG8gdGhlIGxpbmUgYnJlYWsgaXMgaW5zZXJ0ZWQgaW4gdGhlIHRleHQsIGJ1dCB0aGUgY29weSBvZgorCSAgICAgKiAgIHRoZSBvcmlnaW5hbCBsaW5lIGlzIGtlcHQuICAic3ViX2ZpcnN0bG51bSIgaXMgYWRqdXN0ZWQgZm9yCisJICAgICAqICAgdGhlIGluc2VydGVkIGxpbmVzLgorCSAgICAgKiAtIFdoZW4gdGhlIG1hdGNoZWQgcGF0dGVybiBjb250YWlucyBhIGxpbmUgYnJlYWssIHRoZSBvbGQgbGluZQorCSAgICAgKiAgIGlzIHRha2VuIGZyb20gdGhlIGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFRoZSBsaW5lcworCSAgICAgKiAgIGluIHRoZSBtYXRjaCBhcmUgZGVsZXRlZCBsYXRlciwgInN1Yl9maXJzdGxudW0iIGlzIGFkanVzdGVkCisJICAgICAqICAgYWNjb3JkaW5nbHkuCisJICAgICAqCisJICAgICAqIFRoZSBuZXcgdGV4dCBpcyBidWlsdCB1cCBpbiBuZXdfc3RhcnRbXS4gIEl0IGhhcyBzb21lIGV4dHJhCisJICAgICAqIHJvb20gdG8gYXZvaWQgdXNpbmcgYWxsb2MoKS9mcmVlKCkgdG9vIG9mdGVuLiAgbmV3X3N0YXJ0X2xlbiBpcworCSAgICAgKiB0aGUgbGVuZ2h0IG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGF0IG5ld19zdGFydC4KKwkgICAgICoKKwkgICAgICogTWFrZSBhIGNvcHkgb2YgdGhlIG9sZCBsaW5lLCBzbyBpdCB3b24ndCBiZSB0YWtlbiBhd2F5IHdoZW4KKwkgICAgICogdXBkYXRpbmcgdGhlIHNjcmVlbiBvciBoYW5kbGluZyBhIG11bHRpLWxpbmUgbWF0Y2guICBUaGUgIm9sZF8iCisJICAgICAqIHBvaW50ZXJzIHBvaW50IGludG8gdGhpcyBjb3B5LgorCSAgICAgKi8KKwkgICAgc3ViX2ZpcnN0bGluZSA9IHZpbV9zdHJzYXZlKG1sX2dldChzdWJfZmlyc3RsbnVtKSk7CisJICAgIGlmIChzdWJfZmlyc3RsaW5lID09IE5VTEwpCisJICAgIHsKKwkJdmltX2ZyZWUobmV3X3N0YXJ0KTsKKwkJZ290byBvdXRvZm1lbTsKKwkgICAgfQorCSAgICBjb3B5Y29sID0gMDsKKwkgICAgbWF0Y2hjb2wgPSAwOworCisJICAgIC8qIEF0IGZpcnN0IG1hdGNoLCByZW1lbWJlciBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4gKi8KKwkgICAgaWYgKCFnb3RfbWF0Y2gpCisJICAgIHsKKwkJc2V0cGNtYXJrKCk7CisJCWdvdF9tYXRjaCA9IFRSVUU7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBMb29wIHVudGlsIG5vdGhpbmcgbW9yZSB0byByZXBsYWNlIGluIHRoaXMgbGluZS4KKwkgICAgICogMS4gSGFuZGxlIG1hdGNoIHdpdGggZW1wdHkgc3RyaW5nLgorCSAgICAgKiAyLiBJZiBkb19hc2sgaXMgc2V0LCBhc2sgZm9yIGNvbmZpcm1hdGlvbi4KKwkgICAgICogMy4gc3Vic3RpdHV0ZSB0aGUgc3RyaW5nLgorCSAgICAgKiA0LiBpZiBkb19hbGwgaXMgc2V0LCBmaW5kIG5leHQgbWF0Y2gKKwkgICAgICogNS4gYnJlYWsgaWYgdGhlcmUgaXNuJ3QgYW5vdGhlciBtYXRjaCBpbiB0aGlzIGxpbmUKKwkgICAgICovCisJICAgIGZvciAoOzspCisJICAgIHsKKwkJLyogU2F2ZSB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGxhc3QgY2hhbmdlIGZvciB0aGUgZmluYWwKKwkJICogY3Vyc29yIHBvc2l0aW9uIChqdXN0IGxpa2UgVmkpLiAqLworCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtOworCQlkb19hZ2FpbiA9IEZBTFNFOworCisJCS8qCisJCSAqIDEuIE1hdGNoIGVtcHR5IHN0cmluZyBkb2VzIG5vdCBjb3VudCwgZXhjZXB0IGZvciBmaXJzdAorCQkgKiBtYXRjaC4gIFRoaXMgcmVwcm9kdWNlcyB0aGUgc3RyYW5nZSB2aSBiZWhhdmlvdXIuCisJCSAqIFRoaXMgYWxzbyBjYXRjaGVzIGVuZGxlc3MgbG9vcHMuCisJCSAqLworCQlpZiAobWF0Y2hjb2wgPT0gcHJldl9tYXRjaGNvbAorCQkJJiYgcmVnbWF0Y2guZW5kcG9zWzBdLmxudW0gPT0gMAorCQkJJiYgbWF0Y2hjb2wgPT0gcmVnbWF0Y2guZW5kcG9zWzBdLmNvbCkKKwkJeworCQkgICAgKyttYXRjaGNvbDsgLyogc2VhcmNoIGZvciBhIG1hdGNoIGF0IG5leHQgY29sdW1uICovCisJCSAgICBnb3RvIHNraXA7CisJCX0KKworCQkvKiBOb3JtYWxseSB3ZSBjb250aW51ZSBzZWFyY2hpbmcgZm9yIGEgbWF0Y2gganVzdCBhZnRlciB0aGUKKwkJICogcHJldmlvdXMgbWF0Y2guICovCisJCW1hdGNoY29sID0gcmVnbWF0Y2guZW5kcG9zWzBdLmNvbDsKKwkJcHJldl9tYXRjaGNvbCA9IG1hdGNoY29sOworCisJCS8qCisJCSAqIDIuIElmIGRvX2FzayBpcyBzZXQsIGFzayBmb3IgY29uZmlybWF0aW9uLgorCQkgKi8KKwkJaWYgKGRvX2FzaykKKwkJeworCQkgICAgLyogY2hhbmdlIFN0YXRlIHRvIENPTkZJUk0sIHNvIHRoYXQgdGhlIG1vdXNlIHdvcmtzCisJCSAgICAgKiBwcm9wZXJseSAqLworCQkgICAgc2F2ZV9TdGF0ZSA9IFN0YXRlOworCQkgICAgU3RhdGUgPSBDT05GSVJNOworI2lmZGVmIEZFQVRfTU9VU0UKKwkJICAgIHNldG1vdXNlKCk7CQkvKiBkaXNhYmxlIG1vdXNlIGluIHh0ZXJtICovCisjZW5kaWYKKwkJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gcmVnbWF0Y2guc3RhcnRwb3NbMF0uY29sOworCisJCSAgICAvKiBXaGVuICdjcG9wdGlvbnMnIGNvbnRhaW5zICJ1IiBkb24ndCBzeW5jIHVuZG8gd2hlbgorCQkgICAgICogYXNraW5nIGZvciBjb25maXJtYXRpb24uICovCisJCSAgICBpZiAodmltX3N0cmNocihwX2NwbywgQ1BPX1VORE8pICE9IE5VTEwpCisJCQkrK25vX3Vfc3luYzsKKworCQkgICAgLyoKKwkJICAgICAqIExvb3AgdW50aWwgJ3knLCAnbicsICdxJywgQ1RSTC1FIG9yIENUUkwtWSB0eXBlZC4KKwkJICAgICAqLworCQkgICAgd2hpbGUgKGRvX2FzaykKKwkJICAgIHsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkJCWludCBzYXZlX3BfZmVuID0gY3Vyd2luLT53X3BfZmVuOworCisJCQljdXJ3aW4tPndfcF9mZW4gPSBGQUxTRTsKKyNlbmRpZgorCQkJLyogSW52ZXJ0IHRoZSBtYXRjaGVkIHN0cmluZy4KKwkJCSAqIFJlbW92ZSB0aGUgaW52ZXJzaW9uIGFmdGVyd2FyZHMuICovCisJCQl0ZW1wID0gUmVkcmF3aW5nRGlzYWJsZWQ7CisJCQlSZWRyYXdpbmdEaXNhYmxlZCA9IDA7CisKKwkJCXNlYXJjaF9tYXRjaF9saW5lcyA9IHJlZ21hdGNoLmVuZHBvc1swXS5sbnVtOworCQkJc2VhcmNoX21hdGNoX2VuZGNvbCA9IHJlZ21hdGNoLmVuZHBvc1swXS5jb2w7CisJCQloaWdobGlnaHRfbWF0Y2ggPSBUUlVFOworCisJCQl1cGRhdGVfdG9wbGluZSgpOworCQkJdmFsaWRhdGVfY3Vyc29yKCk7CisJCQl1cGRhdGVfc2NyZWVuKE5PVF9WQUxJRCk7CisJCQloaWdobGlnaHRfbWF0Y2ggPSBGQUxTRTsKKwkJCXJlZHJhd19sYXRlcihOT1RfVkFMSUQpOworCisjaWZkZWYgRkVBVF9GT0xESU5HCisJCQljdXJ3aW4tPndfcF9mZW4gPSBzYXZlX3BfZmVuOworI2VuZGlmCisJCQlpZiAobXNnX3JvdyA9PSBSb3dzIC0gMSkKKwkJCSAgICBtc2dfZGlkb3V0ID0gRkFMU0U7CQkvKiBhdm9pZCBhIHNjcm9sbC11cCAqLworCQkJbXNnX3N0YXJ0aGVyZSgpOworCQkJaSA9IG1zZ19zY3JvbGw7CisJCQltc2dfc2Nyb2xsID0gMDsJCS8qIHRydW5jYXRlIG1zZyB3aGVuIG5lZWRlZCAqLworCQkJbXNnX25vX21vcmUgPSBUUlVFOworCQkJLyogd3JpdGUgbWVzc2FnZSBzYW1lIGhpZ2hsaWdodGluZyBhcyBmb3Igd2FpdF9yZXR1cm4gKi8KKwkJCXNtc2dfYXR0cihobF9hdHRyKEhMRl9SKSwKKwkJCSAgICAoY2hhcl91ICopXygicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIpLAorCQkJCXN1Yik7CisJCQltc2dfbm9fbW9yZSA9IEZBTFNFOworCQkJbXNnX3Njcm9sbCA9IGk7CisJCQlzaG93cnVsZXIoVFJVRSk7CisJCQl3aW5kZ290byhtc2dfcm93LCBtc2dfY29sKTsKKwkJCVJlZHJhd2luZ0Rpc2FibGVkID0gdGVtcDsKKworI2lmZGVmIFVTRV9PTl9GTFlfU0NST0xMCisJCQlkb250X3Njcm9sbCA9IEZBTFNFOwkvKiBhbGxvdyBzY3JvbGxpbmcgaGVyZSAqLworI2VuZGlmCisJCQkrK25vX21hcHBpbmc7CQkvKiBkb24ndCBtYXAgdGhpcyBrZXkgKi8KKwkJCSsrYWxsb3dfa2V5czsJCS8qIGFsbG93IHNwZWNpYWwga2V5cyAqLworCQkJaSA9IHNhZmVfdmdldGMoKTsKKwkJCS0tYWxsb3dfa2V5czsKKwkJCS0tbm9fbWFwcGluZzsKKworCQkJLyogY2xlYXIgdGhlIHF1ZXN0aW9uICovCisJCQltc2dfZGlkb3V0ID0gRkFMU0U7CS8qIGRvbid0IHNjcm9sbCB1cCAqLworCQkJbXNnX2NvbCA9IDA7CisJCQlnb3RvY21kbGluZShUUlVFKTsKKwkJCW5lZWRfd2FpdF9yZXR1cm4gPSBGQUxTRTsgLyogbm8gaGl0LXJldHVybiBwcm9tcHQgKi8KKwkJCWlmIChpID09ICdxJyB8fCBpID09IEVTQyB8fCBpID09IEN0cmxfQworI2lmZGVmIFVOSVgKKwkJCQl8fCBpID09IGludHJfY2hhcgorI2VuZGlmCisJCQkJKQorCQkJeworCQkJICAgIGdvdF9xdWl0ID0gVFJVRTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCWlmIChpID09ICduJykKKwkJCSAgICBicmVhazsKKwkJCWlmIChpID09ICd5JykKKwkJCSAgICBicmVhazsKKwkJCWlmIChpID09ICdsJykKKwkJCXsKKwkJCSAgICAvKiBsYXN0OiByZXBsYWNlIGFuZCB0aGVuIHN0b3AgKi8KKwkJCSAgICBkb19hbGwgPSBGQUxTRTsKKwkJCSAgICBsaW5lMiA9IGxudW07CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQlpZiAoaSA9PSAnYScpCisJCQl7CisJCQkgICAgZG9fYXNrID0gRkFMU0U7CisJCQkgICAgYnJlYWs7CisJCQl9CisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJCQlpZiAoaSA9PSBDdHJsX0UpCisJCQkgICAgc2Nyb2xsdXBfY2xhbXAoKTsKKwkJCWVsc2UgaWYgKGkgPT0gQ3RybF9ZKQorCQkJICAgIHNjcm9sbGRvd25fY2xhbXAoKTsKKyNlbmRpZgorCQkgICAgfQorCQkgICAgU3RhdGUgPSBzYXZlX1N0YXRlOworI2lmZGVmIEZFQVRfTU9VU0UKKwkJICAgIHNldG1vdXNlKCk7CisjZW5kaWYKKwkJICAgIGlmICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fVU5ETykgIT0gTlVMTCkKKwkJCS0tbm9fdV9zeW5jOworCisJCSAgICBpZiAoaSA9PSAnbicpCisJCSAgICB7CisJCQkvKiBGb3IgYSBtdWx0aS1saW5lIG1hdGNoLCBwdXQgbWF0Y2hjb2wgYXQgdGhlIE5VTCBhdAorCQkJICogdGhlIGVuZCBvZiB0aGUgbGluZSBhbmQgc2V0IG5tYXRjaCB0byBvbmUsIHNvIHRoYXQKKwkJCSAqIHdlIGNvbnRpbnVlIGxvb2tpbmcgZm9yIGEgbWF0Y2ggb24gdGhlIG5leHQgbGluZS4KKwkJCSAqIEF2b2lkcyB0aGF0ICI6cy9cbkJcQD0vL2djIiBnZXQgc3R1Y2suICovCisJCQlpZiAobm1hdGNoID4gMSkKKwkJCXsKKwkJCSAgICBtYXRjaGNvbCA9IFNUUkxFTihzdWJfZmlyc3RsaW5lKTsKKwkJCSAgICBubWF0Y2ggPSAxOworCQkJfQorCQkJZ290byBza2lwOworCQkgICAgfQorCQkgICAgaWYgKGdvdF9xdWl0KQorCQkJYnJlYWs7CisJCX0KKworCQkvKiBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaCwgc28gdGhhdCB3ZSBjYW4KKwkJICogdXNlICJcPWNvbCgiLiIpLiAqLworCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IHJlZ21hdGNoLnN0YXJ0cG9zWzBdLmNvbDsKKworCQkvKgorCQkgKiAzLiBzdWJzdGl0dXRlIHRoZSBzdHJpbmcuCisJCSAqLworCQkvKiBnZXQgbGVuZ3RoIG9mIHN1YnN0aXR1dGlvbiBwYXJ0ICovCisJCXN1YmxlbiA9IHZpbV9yZWdzdWJfbXVsdGkoJnJlZ21hdGNoLCBzdWJfZmlyc3RsbnVtLAorCQkJCSAgICBzdWIsIHN1Yl9maXJzdGxpbmUsIEZBTFNFLCBwX21hZ2ljLCBUUlVFKTsKKworCQkvKiBOZWVkIHJvb20gZm9yOgorCQkgKiAtIHJlc3VsdCBzbyBmYXIgaW4gbmV3X3N0YXJ0IChub3QgZm9yIGZpcnN0IHN1YiBpbiBsaW5lKQorCQkgKiAtIG9yaWdpbmFsIHRleHQgdXAgdG8gbWF0Y2gKKwkJICogLSBsZW5ndGggb2Ygc3Vic3RpdHV0ZWQgcGFydAorCQkgKiAtIG9yaWdpbmFsIHRleHQgYWZ0ZXIgbWF0Y2gKKwkJICovCisJCWlmIChubWF0Y2ggPT0gMSkKKwkJICAgIHAxID0gc3ViX2ZpcnN0bGluZTsKKwkJZWxzZQorCQl7CisJCSAgICBwMSA9IG1sX2dldChzdWJfZmlyc3RsbnVtICsgbm1hdGNoIC0gMSk7CisJCSAgICBubWF0Y2hfdGwgKz0gbm1hdGNoIC0gMTsKKwkJfQorCQlpID0gcmVnbWF0Y2guc3RhcnRwb3NbMF0uY29sIC0gY29weWNvbDsKKwkJbmVlZGVkX2xlbiA9IGkgKyAoKHVuc2lnbmVkKVNUUkxFTihwMSkgLSByZWdtYXRjaC5lbmRwb3NbMF0uY29sKQorCQkJCQkJCQkgKyBzdWJsZW4gKyAxOworCQlpZiAobmV3X3N0YXJ0ID09IE5VTEwpCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBHZXQgc29tZSBzcGFjZSBmb3IgYSB0ZW1wb3JhcnkgYnVmZmVyIHRvIGRvIHRoZQorCQkgICAgICogc3Vic3RpdHV0aW9uIGludG8gKGFuZCBzb21lIGV4dHJhIHNwYWNlIHRvIGF2b2lkCisJCSAgICAgKiB0b28gbWFueSBjYWxscyB0byBhbGxvYygpL2ZyZWUoKSkuCisJCSAgICAgKi8KKwkJICAgIG5ld19zdGFydF9sZW4gPSBuZWVkZWRfbGVuICsgNTA7CisJCSAgICBpZiAoKG5ld19zdGFydCA9IGFsbG9jX2NoZWNrKG5ld19zdGFydF9sZW4pKSA9PSBOVUxMKQorCQkJZ290byBvdXRvZm1lbTsKKwkJICAgICpuZXdfc3RhcnQgPSBOVUw7CisJCSAgICBuZXdfZW5kID0gbmV3X3N0YXJ0OworCQl9CisJCWVsc2UKKwkJeworCQkgICAgLyoKKwkJICAgICAqIENoZWNrIGlmIHRoZSB0ZW1wb3JhcnkgYnVmZmVyIGlzIGxvbmcgZW5vdWdoIHRvIGRvIHRoZQorCQkgICAgICogc3Vic3RpdHV0aW9uIGludG8uICBJZiBub3QsIG1ha2UgaXQgbGFyZ2VyICh3aXRoIGEgYml0CisJCSAgICAgKiBleHRyYSB0byBhdm9pZCB0b28gbWFueSBjYWxscyB0byBhbGxvYygpL2ZyZWUoKSkuCisJCSAgICAgKi8KKwkJICAgIGxlbiA9ICh1bnNpZ25lZClTVFJMRU4obmV3X3N0YXJ0KTsKKwkJICAgIG5lZWRlZF9sZW4gKz0gbGVuOworCQkgICAgaWYgKG5lZWRlZF9sZW4gPiBuZXdfc3RhcnRfbGVuKQorCQkgICAgeworCQkJbmV3X3N0YXJ0X2xlbiA9IG5lZWRlZF9sZW4gKyA1MDsKKwkJCWlmICgocDEgPSBhbGxvY19jaGVjayhuZXdfc3RhcnRfbGVuKSkgPT0gTlVMTCkKKwkJCXsKKwkJCSAgICB2aW1fZnJlZShuZXdfc3RhcnQpOworCQkJICAgIGdvdG8gb3V0b2ZtZW07CisJCQl9CisJCQltY2hfbWVtbW92ZShwMSwgbmV3X3N0YXJ0LCAoc2l6ZV90KShsZW4gKyAxKSk7CisJCQl2aW1fZnJlZShuZXdfc3RhcnQpOworCQkJbmV3X3N0YXJ0ID0gcDE7CisJCSAgICB9CisJCSAgICBuZXdfZW5kID0gbmV3X3N0YXJ0ICsgbGVuOworCQl9CisKKwkJLyoKKwkJICogY29weSB0aGUgdGV4dCB1cCB0byB0aGUgcGFydCB0aGF0IG1hdGNoZWQKKwkJICovCisJCW1jaF9tZW1tb3ZlKG5ld19lbmQsIHN1Yl9maXJzdGxpbmUgKyBjb3B5Y29sLCAoc2l6ZV90KWkpOworCQluZXdfZW5kICs9IGk7CisKKwkJKHZvaWQpdmltX3JlZ3N1Yl9tdWx0aSgmcmVnbWF0Y2gsIHN1Yl9maXJzdGxudW0sCisJCQkJCSAgIHN1YiwgbmV3X2VuZCwgVFJVRSwgcF9tYWdpYywgVFJVRSk7CisJCXN1Yl9uc3VicysrOworCQlkaWRfc3ViID0gVFJVRTsKKworCQkvKiBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLCB0byBhdm9pZCB0aGF0IGl0CisJCSAqIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBsaW5lIGFmdGVyIHRoZSBzdWJzdGl0dXRpb24uICovCisJCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKworCQkvKiBGb3IgYSBtdWx0aS1saW5lIG1hdGNoLCBtYWtlIGEgY29weSBvZiB0aGUgbGFzdCBtYXRjaGVkCisJCSAqIGxpbmUgYW5kIGNvbnRpbnVlIGluIHRoYXQgb25lLiAqLworCQlpZiAobm1hdGNoID4gMSkKKwkJeworCQkgICAgc3ViX2ZpcnN0bG51bSArPSBubWF0Y2ggLSAxOworCQkgICAgdmltX2ZyZWUoc3ViX2ZpcnN0bGluZSk7CisJCSAgICBzdWJfZmlyc3RsaW5lID0gdmltX3N0cnNhdmUobWxfZ2V0KHN1Yl9maXJzdGxudW0pKTsKKwkJICAgIC8qIFdoZW4gZ29pbmcgYmV5b25kIHRoZSBsYXN0IGxpbmUsIHN0b3Agc3Vic3RpdHV0aW5nLiAqLworCQkgICAgaWYgKHN1Yl9maXJzdGxudW0gPD0gbGluZTIpCisJCQlkb19hZ2FpbiA9IFRSVUU7CisJCSAgICBlbHNlCisJCQlkb19hbGwgPSBGQUxTRTsKKwkJfQorCisJCS8qIFJlbWVtYmVyIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvcGllZC4gKi8KKwkJY29weWNvbCA9IHJlZ21hdGNoLmVuZHBvc1swXS5jb2w7CisKKwkJLyoKKwkJICogTm93IHRoZSB0cmljayBpcyB0byByZXBsYWNlIENUUkwtTSBjaGFycyB3aXRoIGEgcmVhbCBsaW5lCisJCSAqIGJyZWFrLiAgVGhpcyB3b3VsZCBtYWtlIGl0IGltcG9zc2libGUgdG8gaW5zZXJ0IGEgQ1RSTC1NIGluCisJCSAqIHRoZSB0ZXh0LiAgVGhlIGxpbmUgYnJlYWsgY2FuIGJlIGF2b2lkZWQgYnkgcHJlY2VkaW5nIHRoZQorCQkgKiBDVFJMLU0gd2l0aCBhIGJhY2tzbGFzaC4gIFRvIGJlIGFibGUgdG8gaW5zZXJ0IGEgYmFja3NsYXNoLAorCQkgKiB0aGV5IG11c3QgYmUgZG91YmxlZCBpbiB0aGUgc3RyaW5nIGFuZCBhcmUgaGFsdmVkIGhlcmUuCisJCSAqIFRoYXQgaXMgVmkgY29tcGF0aWJsZS4KKwkJICovCisJCWZvciAocDEgPSBuZXdfZW5kOyAqcDE7ICsrcDEpCisJCXsKKwkJICAgIGlmIChwMVswXSA9PSAnXFwnICYmIHAxWzFdICE9IE5VTCkgIC8qIHJlbW92ZSBiYWNrc2xhc2ggKi8KKwkJCW1jaF9tZW1tb3ZlKHAxLCBwMSArIDEsIFNUUkxFTihwMSkpOworCQkgICAgZWxzZSBpZiAoKnAxID09IENBUikKKwkJICAgIHsKKwkJCWlmICh1X2luc3N1YihsbnVtKSA9PSBPSykgICAvKiBwcmVwYXJlIGZvciB1bmRvICovCisJCQl7CisJCQkgICAgKnAxID0gTlVMOwkJICAgIC8qIHRydW5jYXRlIHVwIHRvIHRoZSBDUiAqLworCQkJICAgIG1sX2FwcGVuZChsbnVtIC0gMSwgbmV3X3N0YXJ0LAorCQkJCQkoY29sbnJfVCkocDEgLSBuZXdfc3RhcnQgKyAxKSwgRkFMU0UpOworCQkJICAgIG1hcmtfYWRqdXN0KGxudW0gKyAxLCAobGluZW5yX1QpTUFYTE5VTSwgMUwsIDBMKTsKKwkJCSAgICBpZiAoZG9fYXNrKQorCQkJCWFwcGVuZGVkX2xpbmVzKGxudW0gLSAxLCAxTCk7CisJCQkgICAgZWxzZQorCQkJICAgIHsKKwkJCQlpZiAoZmlyc3RfbGluZSA9PSAwKQorCQkJCSAgICBmaXJzdF9saW5lID0gbG51bTsKKwkJCQlsYXN0X2xpbmUgPSBsbnVtICsgMTsKKwkJCSAgICB9CisJCQkgICAgLyogQWxsIGxpbmUgbnVtYmVycyBpbmNyZWFzZS4gKi8KKwkJCSAgICArK3N1Yl9maXJzdGxudW07CisJCQkgICAgKytsbnVtOworCQkJICAgICsrbGluZTI7CisJCQkgICAgLyogbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBuZXcgbGluZSwgbGlrZSBWaSAqLworCQkJICAgICsrY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQkJICAgIFNUUkNQWShuZXdfc3RhcnQsIHAxICsgMSk7CS8qIGNvcHkgdGhlIHJlc3QgKi8KKwkJCSAgICBwMSA9IG5ld19zdGFydCAtIDE7CisJCQl9CisJCSAgICB9CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgZWxzZSBpZiAoaGFzX21ieXRlKQorCQkJcDEgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwMSkgLSAxOworI2VuZGlmCisJCX0KKworCQkvKgorCQkgKiA0LiBJZiBkb19hbGwgaXMgc2V0LCBmaW5kIG5leHQgbWF0Y2guCisJCSAqIFByZXZlbnQgZW5kbGVzcyBsb29wIHdpdGggcGF0dGVybnMgdGhhdCBtYXRjaCBlbXB0eQorCQkgKiBzdHJpbmdzLCBlLmcuIDpzLyQvcGF0L2cgb3IgOnMvW2Etel0qIC8oJikvZy4KKwkJICogQnV0ICI6cy9cbi8jLyIgaXMgT0suCisJCSAqLworc2tpcDoKKwkJLyogV2UgYWxyZWFkeSBrbm93IHRoYXQgd2UgZGlkIHRoZSBsYXN0IHN1YnN0IHdoZW4gd2UgYXJlIGF0CisJCSAqIHRoZSBlbmQgb2YgdGhlIGxpbmUsIGV4Y2VwdCB0aGF0IGEgcGF0dGVybiBsaWtlCisJCSAqICJiYXJcfFxuZm9vIiBtYXkgbWF0Y2ggYXQgdGhlIE5VTC4gKi8KKwkJbGFzdG9uZSA9ICgoc3ViX2ZpcnN0bGluZVttYXRjaGNvbF0gPT0gTlVMICYmIG5tYXRjaCA8PSAxCisJCQkJCSAgICYmICFyZV9tdWx0aWxpbmUocmVnbWF0Y2gucmVncHJvZykpCisJCQkgICAgIHx8IGdvdF9pbnQgfHwgZ290X3F1aXQgfHwgIShkb19hbGwgfHwgZG9fYWdhaW4pKTsKKwkJbm1hdGNoID0gLTE7CisKKwkJLyoKKwkJICogUmVwbGFjZSB0aGUgbGluZSBpbiB0aGUgYnVmZmVyIHdoZW4gbmVlZGVkLiAgVGhpcyBpcworCQkgKiBza2lwcGVkIHdoZW4gdGhlcmUgYXJlIG1vcmUgbWF0Y2hlcy4KKwkJICogVGhlIGNoZWNrIGZvciBubWF0Y2hfdGwgaXMgbmVlZGVkIGZvciB3aGVuIG11bHRpLWxpbmUKKwkJICogbWF0Y2hpbmcgbXVzdCByZXBsYWNlIHRoZSBsaW5lcyBiZWZvcmUgdHJ5aW5nIHRvIGRvIGFub3RoZXIKKwkJICogbWF0Y2gsIG90aGVyd2lzZSAiXEA8PSIgd29uJ3Qgd29yay4KKwkJICogV2hlbiBhc2tpbmcgdGhlIHVzZXIgd2UgbGlrZSB0byBzaG93IHRoZSBhbHJlYWR5IHJlcGxhY2VkCisJCSAqIHRleHQsIGJ1dCBkb24ndCBkbyBpdCB3aGVuICJcPEA9IiBvciAiXDxAISIgaXMgdXNlZCwgaXQKKwkJICogY2hhbmdlcyB3aGF0IG1hdGNoZXMuCisJCSAqLworCQlpZiAobGFzdG9uZQorCQkJfHwgKGRvX2FzayAmJiAhcmVfbG9va2JlaGluZChyZWdtYXRjaC5yZWdwcm9nKSkKKwkJCXx8IG5tYXRjaF90bCA+IDAKKwkJCXx8IChubWF0Y2ggPSB2aW1fcmVnZXhlY19tdWx0aSgmcmVnbWF0Y2gsIGN1cndpbiwKKwkJCQkgICAgICAgY3VyYnVmLCBzdWJfZmlyc3RsbnVtLCBtYXRjaGNvbCkpID09IDApCisJCXsKKwkJICAgIGlmIChuZXdfc3RhcnQgIT0gTlVMTCkKKwkJICAgIHsKKwkJCS8qCisJCQkgKiBDb3B5IHRoZSByZXN0IG9mIHRoZSBsaW5lLCB0aGF0IGRpZG4ndCBtYXRjaC4KKwkJCSAqICJtYXRjaGNvbCIgaGFzIHRvIGJlIGFkanVzdGVkLCB3ZSB1c2UgdGhlIGVuZCBvZgorCQkJICogdGhlIGxpbmUgYXMgcmVmZXJlbmNlLCBiZWNhdXNlIHRoZSBzdWJzdGl0dXRlIG1heQorCQkJICogaGF2ZSBjaGFuZ2VkIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy4gIFNhbWUgZm9yCisJCQkgKiAicHJldl9tYXRjaGNvbCIuCisJCQkgKi8KKwkJCVNUUkNBVChuZXdfc3RhcnQsIHN1Yl9maXJzdGxpbmUgKyBjb3B5Y29sKTsKKwkJCW1hdGNoY29sID0gKGNvbG5yX1QpU1RSTEVOKHN1Yl9maXJzdGxpbmUpIC0gbWF0Y2hjb2w7CisJCQlwcmV2X21hdGNoY29sID0gKGNvbG5yX1QpU1RSTEVOKHN1Yl9maXJzdGxpbmUpCisJCQkJCQkJICAgICAgLSBwcmV2X21hdGNoY29sOworCisJCQlpZiAodV9zYXZlc3ViKGxudW0pICE9IE9LKQorCQkJICAgIGJyZWFrOworCQkJbWxfcmVwbGFjZShsbnVtLCBuZXdfc3RhcnQsIFRSVUUpOworCisJCQlpZiAobm1hdGNoX3RsID4gMCkKKwkJCXsKKwkJCSAgICAvKgorCQkJICAgICAqIE1hdGNoZWQgbGluZXMgaGF2ZSBub3cgYmVlbiBzdWJzdGl0dXRlZCBhbmQgYXJlCisJCQkgICAgICogdXNlbGVzcywgZGVsZXRlIHRoZW0uICBUaGUgcGFydCBhZnRlciB0aGUgbWF0Y2gKKwkJCSAgICAgKiBoYXMgYmVlbiBhcHBlbmRlZCB0byBuZXdfc3RhcnQsIHdlIGRvbid0IG5lZWQKKwkJCSAgICAgKiBpdCBpbiB0aGUgYnVmZmVyLgorCQkJICAgICAqLworCQkJICAgICsrbG51bTsKKwkJCSAgICBpZiAodV9zYXZlZGVsKGxudW0sIG5tYXRjaF90bCkgIT0gT0spCisJCQkJYnJlYWs7CisJCQkgICAgZm9yIChpID0gMDsgaSA8IG5tYXRjaF90bDsgKytpKQorCQkJCW1sX2RlbGV0ZShsbnVtLCAoaW50KUZBTFNFKTsKKwkJCSAgICBtYXJrX2FkanVzdChsbnVtLCBsbnVtICsgbm1hdGNoX3RsIC0gMSwKKwkJCQkJCSAgIChsb25nKU1BWExOVU0sIC1ubWF0Y2hfdGwpOworCQkJICAgIGlmIChkb19hc2spCisJCQkJZGVsZXRlZF9saW5lcyhsbnVtLCBubWF0Y2hfdGwpOworCQkJICAgIC0tbG51bTsKKwkJCSAgICBsaW5lMiAtPSBubWF0Y2hfdGw7IC8qIG5yIG9mIGxpbmVzIGRlY3JlYXNlcyAqLworCQkJICAgIG5tYXRjaF90bCA9IDA7CisJCQl9CisKKwkJCS8qIFdoZW4gYXNraW5nLCB1bmRvIGlzIHNhdmVkIGVhY2ggdGltZSwgbXVzdCBhbHNvIHNldAorCQkJICogY2hhbmdlZCBmbGFnIGVhY2ggdGltZS4gKi8KKwkJCWlmIChkb19hc2spCisJCQkgICAgY2hhbmdlZF9ieXRlcyhsbnVtLCAwKTsKKwkJCWVsc2UKKwkJCXsKKwkJCSAgICBpZiAoZmlyc3RfbGluZSA9PSAwKQorCQkJCWZpcnN0X2xpbmUgPSBsbnVtOworCQkJICAgIGxhc3RfbGluZSA9IGxudW0gKyAxOworCQkJfQorCisJCQlzdWJfZmlyc3RsbnVtID0gbG51bTsKKwkJCXZpbV9mcmVlKHN1Yl9maXJzdGxpbmUpOyAgICAvKiBmcmVlIHRoZSB0ZW1wIGJ1ZmZlciAqLworCQkJc3ViX2ZpcnN0bGluZSA9IG5ld19zdGFydDsKKwkJCW5ld19zdGFydCA9IE5VTEw7CisJCQltYXRjaGNvbCA9IChjb2xucl9UKVNUUkxFTihzdWJfZmlyc3RsaW5lKSAtIG1hdGNoY29sOworCQkJcHJldl9tYXRjaGNvbCA9IChjb2xucl9UKVNUUkxFTihzdWJfZmlyc3RsaW5lKQorCQkJCQkJCSAgICAgIC0gcHJldl9tYXRjaGNvbDsKKwkJCWNvcHljb2wgPSAwOworCQkgICAgfQorCQkgICAgaWYgKG5tYXRjaCA9PSAtMSAmJiAhbGFzdG9uZSkKKwkJCW5tYXRjaCA9IHZpbV9yZWdleGVjX211bHRpKCZyZWdtYXRjaCwgY3Vyd2luLCBjdXJidWYsCisJCQkJCQkgICAgIHN1Yl9maXJzdGxudW0sIG1hdGNoY29sKTsKKworCQkgICAgLyoKKwkJICAgICAqIDUuIGJyZWFrIGlmIHRoZXJlIGlzbid0IGFub3RoZXIgbWF0Y2ggaW4gdGhpcyBsaW5lCisJCSAgICAgKi8KKwkJICAgIGlmIChubWF0Y2ggPD0gMCkKKwkJCWJyZWFrOworCQl9CisKKwkJbGluZV9icmVha2NoZWNrKCk7CisJICAgIH0KKworCSAgICBpZiAoZGlkX3N1YikKKwkJKytzdWJfbmxpbmVzOworCSAgICB2aW1fZnJlZShzdWJfZmlyc3RsaW5lKTsJLyogZnJlZSB0aGUgY29weSBvZiB0aGUgb3JpZ2luYWwgbGluZSAqLworCSAgICBzdWJfZmlyc3RsaW5lID0gTlVMTDsKKwl9CisKKwlsaW5lX2JyZWFrY2hlY2soKTsKKyAgICB9CisKKyAgICBpZiAoZmlyc3RfbGluZSAhPSAwKQorICAgIHsKKwkvKiBOZWVkIHRvIHN1YnRyYWN0IHRoZSBudW1iZXIgb2YgYWRkZWQgbGluZXMgZnJvbSAibGFzdF9saW5lIiB0byBnZXQKKwkgKiB0aGUgbGluZSBudW1iZXIgYmVmb3JlIHRoZSBjaGFuZ2UgKHNhbWUgYXMgYWRkaW5nIHRoZSBudW1iZXIgb2YKKwkgKiBkZWxldGVkIGxpbmVzKS4gKi8KKwlpID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQgLSBvbGRfbGluZV9jb3VudDsKKwljaGFuZ2VkX2xpbmVzKGZpcnN0X2xpbmUsIDAsIGxhc3RfbGluZSAtIGksIGkpOworICAgIH0KKworb3V0b2ZtZW06CisgICAgdmltX2ZyZWUoc3ViX2ZpcnN0bGluZSk7IC8qIG1heSBoYXZlIHRvIGZyZWUgYWxsb2NhdGVkIGNvcHkgb2YgdGhlIGxpbmUgKi8KKyAgICBpZiAoc3ViX25zdWJzKQorICAgIHsKKwkvKiBTZXQgdGhlICdbIGFuZCAnXSBtYXJrcy4gKi8KKwljdXJidWYtPmJfb3Bfc3RhcnQubG51bSA9IGVhcC0+bGluZTE7CisJY3VyYnVmLT5iX29wX2VuZC5sbnVtID0gbGluZTI7CisJY3VyYnVmLT5iX29wX3N0YXJ0LmNvbCA9IGN1cmJ1Zi0+Yl9vcF9lbmQuY29sID0gMDsKKworCWlmICghZ2xvYmFsX2J1c3kpCisJeworCSAgICBiZWdpbmxpbmUoQkxfV0hJVEUgfCBCTF9GSVgpOworCSAgICBpZiAoIWRvX3N1Yl9tc2coKSAmJiBkb19hc2spCisJCU1TRygiIik7CisJfQorCWVsc2UKKwkgICAgZ2xvYmFsX25lZWRfYmVnaW5saW5lID0gVFJVRTsKKwlpZiAoZG9fcHJpbnQpCisJICAgIHByaW50X2xpbmUoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBGQUxTRSk7CisgICAgfQorICAgIGVsc2UgaWYgKCFnbG9iYWxfYnVzeSkKKyAgICB7CisJaWYgKGdvdF9pbnQpCQkvKiBpbnRlcnJ1cHRlZCAqLworCSAgICBFTVNHKF8oZV9pbnRlcnIpKTsKKwllbHNlIGlmIChnb3RfbWF0Y2gpCS8qIGRpZCBmaW5kIHNvbWV0aGluZyBidXQgbm90aGluZyBzdWJzdGl0dXRlZCAqLworCSAgICBNU0coIiIpOworCWVsc2UgaWYgKGRvX2Vycm9yKQkvKiBub3RoaW5nIGZvdW5kICovCisJICAgIEVNU0cyKF8oZV9wYXRub3RmMiksIGdldF9zZWFyY2hfcGF0KCkpOworICAgIH0KKworICAgIHZpbV9mcmVlKHJlZ21hdGNoLnJlZ3Byb2cpOworfQorCisvKgorICogR2l2ZSBtZXNzYWdlIGZvciBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucy4KKyAqIENhbiBhbHNvIGJlIHVzZWQgYWZ0ZXIgYSAiOmdsb2JhbCIgY29tbWFuZC4KKyAqIFJldHVybiBUUlVFIGlmIGEgbWVzc2FnZSB3YXMgZ2l2ZW4uCisgKi8KKyAgICBzdGF0aWMgaW50Citkb19zdWJfbXNnKCkKK3sKKyAgICAvKgorICAgICAqIE9ubHkgcmVwb3J0IHN1YnN0aXR1dGlvbnMgd2hlbjoKKyAgICAgKiAtIG1vcmUgdGhhbiAncmVwb3J0JyBzdWJzdGl0dXRpb25zCisgICAgICogLSBjb21tYW5kIHdhcyB0eXBlZCBieSB1c2VyLCBvciBudW1iZXIgb2YgY2hhbmdlZCBsaW5lcyA+ICdyZXBvcnQnCisgICAgICogLSBnaXZpbmcgbWVzc2FnZXMgaXMgbm90IGRpc2FibGVkIGJ5ICdsYXp5cmVkcmF3JworICAgICAqLworICAgIGlmIChzdWJfbnN1YnMgPiBwX3JlcG9ydAorCSAgICAmJiAoS2V5VHlwZWQgfHwgc3ViX25saW5lcyA+IDEgfHwgcF9yZXBvcnQgPCAxKQorCSAgICAmJiBtZXNzYWdpbmcoKSkKKyAgICB7CisJaWYgKGdvdF9pbnQpCisJICAgIFNUUkNQWShtc2dfYnVmLCBfKCIoSW50ZXJydXB0ZWQpICIpKTsKKwllbHNlCisJICAgIG1zZ19idWZbMF0gPSBOVUw7CisJaWYgKHN1Yl9uc3VicyA9PSAxKQorCSAgICBTVFJDQVQobXNnX2J1ZiwgXygiMSBzdWJzdGl0dXRpb24iKSk7CisJZWxzZQorCSAgICBzcHJpbnRmKChjaGFyICopbXNnX2J1ZiArIFNUUkxFTihtc2dfYnVmKSwgXygiJWxkIHN1YnN0aXR1dGlvbnMiKSwKKwkJCQkJCQkJICAgc3ViX25zdWJzKTsKKwlpZiAoc3ViX25saW5lcyA9PSAxKQorCSAgICBTVFJDQVQobXNnX2J1ZiwgXygiIG9uIDEgbGluZSIpKTsKKwllbHNlCisJICAgIHNwcmludGYoKGNoYXIgKiltc2dfYnVmICsgU1RSTEVOKG1zZ19idWYpLCBfKCIgb24gJWxkIGxpbmVzIiksCisJCQkJCQkJICAgIChsb25nKXN1Yl9ubGluZXMpOworCWlmIChtc2cobXNnX2J1ZikpCisJeworCSAgICAvKiBzYXZlIG1lc3NhZ2UgdG8gZGlzcGxheSBpdCBhZnRlciByZWRyYXcgKi8KKwkgICAgc2V0X2tlZXBfbXNnKG1zZ19idWYpOworCSAgICBrZWVwX21zZ19hdHRyID0gMDsKKwl9CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChnb3RfaW50KQorICAgIHsKKwlFTVNHKF8oZV9pbnRlcnIpKTsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogRXhlY3V0ZSBhIGdsb2JhbCBjb21tYW5kIG9mIHRoZSBmb3JtOgorICoKKyAqIGcvcGF0dGVybi9YIDogZXhlY3V0ZSBYIG9uIGFsbCBsaW5lcyB3aGVyZSBwYXR0ZXJuIG1hdGNoZXMKKyAqIHYvcGF0dGVybi9YIDogZXhlY3V0ZSBYIG9uIGFsbCBsaW5lcyB3aGVyZSBwYXR0ZXJuIGRvZXMgbm90IG1hdGNoCisgKgorICogd2hlcmUgJ1gnIGlzIGFuIEVYIGNvbW1hbmQKKyAqCisgKiBUaGUgY29tbWFuZCBjaGFyYWN0ZXIgKGFzIHdlbGwgYXMgdGhlIHRyYWlsaW5nIHNsYXNoKSBpcyBvcHRpb25hbCwgYW5kCisgKiBpcyBhc3N1bWVkIHRvIGJlICdwJyBpZiBtaXNzaW5nLgorICoKKyAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgaW4gdHdvIHBhc3NlczogZmlyc3Qgd2Ugc2NhbiB0aGUgZmlsZSBmb3IgdGhlIHBhdHRlcm4gYW5kCisgKiBzZXQgYSBtYXJrIGZvciBlYWNoIGxpbmUgdGhhdCAobm90KSBtYXRjaGVzLiBzZWNvbmRseSB3ZSBleGVjdXRlIHRoZSBjb21tYW5kCisgKiBmb3IgZWFjaCBsaW5lIHRoYXQgaGFzIGEgbWFyay4gVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIGFmdGVyIGRlbGV0aW5nCisgKiBsaW5lcyB3ZSBkbyBub3Qga25vdyB3aGVyZSB0byBzZWFyY2ggZm9yIHRoZSBuZXh0IG1hdGNoLgorICovCisgICAgdm9pZAorZXhfZ2xvYmFsKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgbGluZW5yX1QJbG51bTsJCS8qIGxpbmUgbnVtYmVyIGFjY29yZGluZyB0byBvbGQgc2l0dWF0aW9uICovCisgICAgaW50CQluZG9uZTsKKyAgICBpbnQJCXR5cGU7CQkvKiBmaXJzdCBjaGFyIG9mIGNtZDogJ3YnIG9yICdnJyAqLworICAgIGNoYXJfdQkqY21kOwkJLyogY29tbWFuZCBhcmd1bWVudCAqLworCisgICAgY2hhcl91CWRlbGltOwkJLyogZGVsaW1pdGVyLCBub3JtYWxseSAnLycgKi8KKyAgICBjaGFyX3UJKnBhdDsKKyAgICByZWdtbWF0Y2hfVAlyZWdtYXRjaDsKKyAgICBpbnQJCW1hdGNoOworICAgIGludAkJd2hpY2hfcGF0OworCisgICAgaWYgKGdsb2JhbF9idXN5KQorICAgIHsKKwlFTVNHKF8oIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIpKTsJLyogd2lsbCBpbmNyZW1lbnQgZ2xvYmFsX2J1c3kgKi8KKwlyZXR1cm47CisgICAgfQorCisgICAgaWYgKGVhcC0+Zm9yY2VpdCkJCSAgICAvKiAiOmdsb2JhbCEiIGlzIGxpa2UgIjp2Z2xvYmFsIiAqLworCXR5cGUgPSAndic7CisgICAgZWxzZQorCXR5cGUgPSAqZWFwLT5jbWQ7CisgICAgY21kID0gZWFwLT5hcmc7CisgICAgd2hpY2hfcGF0ID0gUkVfTEFTVDsJICAgIC8qIGRlZmF1bHQ6IHVzZSBsYXN0IHVzZWQgcmVnZXhwICovCisgICAgc3ViX25zdWJzID0gMDsKKyAgICBzdWJfbmxpbmVzID0gMDsKKworICAgIC8qCisgICAgICogdW5kb2N1bWVudGVkIHZpIGZlYXR1cmU6CisgICAgICoJIlwvIiBhbmQgIlw/IjogdXNlIHByZXZpb3VzIHNlYXJjaCBwYXR0ZXJuLgorICAgICAqCQkgIlwmIjogdXNlIHByZXZpb3VzIHN1YnN0aXR1dGUgcGF0dGVybi4KKyAgICAgKi8KKyAgICBpZiAoKmNtZCA9PSAnXFwnKQorICAgIHsKKwkrK2NtZDsKKwlpZiAodmltX3N0cmNocigoY2hhcl91ICopIi8/JiIsICpjbWQpID09IE5VTEwpCisJeworCSAgICBFTVNHKF8oZV9iYWNrc2xhc2gpKTsKKwkgICAgcmV0dXJuOworCX0KKwlpZiAoKmNtZCA9PSAnJicpCisJICAgIHdoaWNoX3BhdCA9IFJFX1NVQlNUOwkvKiB1c2UgcHJldmlvdXMgc3Vic3RpdHV0ZSBwYXR0ZXJuICovCisJZWxzZQorCSAgICB3aGljaF9wYXQgPSBSRV9TRUFSQ0g7CS8qIHVzZSBwcmV2aW91cyBzZWFyY2ggcGF0dGVybiAqLworCSsrY21kOworCXBhdCA9IChjaGFyX3UgKikiIjsKKyAgICB9CisgICAgZWxzZSBpZiAoKmNtZCA9PSBOVUwpCisgICAgeworCUVNU0coXygiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiKSk7CisJcmV0dXJuOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWRlbGltID0gKmNtZDsJCS8qIGdldCB0aGUgZGVsaW1pdGVyICovCisJaWYgKGRlbGltKQorCSAgICArK2NtZDsJCS8qIHNraXAgZGVsaW1pdGVyIGlmIHRoZXJlIGlzIG9uZSAqLworCXBhdCA9IGNtZDsJCS8qIHJlbWVtYmVyIHN0YXJ0IG9mIHBhdHRlcm4gKi8KKwljbWQgPSBza2lwX3JlZ2V4cChjbWQsIGRlbGltLCBwX21hZ2ljLCAmZWFwLT5hcmcpOworCWlmIChjbWRbMF0gPT0gZGVsaW0pCQkgICAgLyogZW5kIGRlbGltaXRlciBmb3VuZCAqLworCSAgICAqY21kKysgPSBOVUw7CQkgICAgLyogcmVwbGFjZSBpdCB3aXRoIGEgTlVMICovCisgICAgfQorCisjaWZkZWYgRkVBVF9GS01BUAkvKiB3aGVuIGluIEZhcnNpIG1vZGUsIHJldmVyc2UgdGhlIGNoYXJhY3RlciBmbG93ICovCisgICAgaWYgKHBfYWx0a2V5bWFwICYmIGN1cndpbi0+d19wX3JsKQorCWxyRnN3YXAocGF0LDApOworI2VuZGlmCisKKyAgICBpZiAoc2VhcmNoX3JlZ2NvbXAocGF0LCBSRV9CT1RILCB3aGljaF9wYXQsIFNFQVJDSF9ISVMsICZyZWdtYXRjaCkgPT0gRkFJTCkKKyAgICB7CisJRU1TRyhfKGVfaW52Y21kKSk7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogcGFzcyAxOiBzZXQgbWFya3MgZm9yIGVhY2ggKG5vdCkgbWF0Y2hpbmcgbGluZQorICAgICAqLworICAgIG5kb25lID0gMDsKKyAgICBmb3IgKGxudW0gPSBlYXAtPmxpbmUxOyBsbnVtIDw9IGVhcC0+bGluZTIgJiYgIWdvdF9pbnQ7ICsrbG51bSkKKyAgICB7CisJLyogYSBtYXRjaCBvbiB0aGlzIGxpbmU/ICovCisJbWF0Y2ggPSB2aW1fcmVnZXhlY19tdWx0aSgmcmVnbWF0Y2gsIGN1cndpbiwgY3VyYnVmLCBsbnVtLCAoY29sbnJfVCkwKTsKKwlpZiAoKHR5cGUgPT0gJ2cnICYmIG1hdGNoKSB8fCAodHlwZSA9PSAndicgJiYgIW1hdGNoKSkKKwl7CisJICAgIG1sX3NldG1hcmtlZChsbnVtKTsKKwkgICAgbmRvbmUrKzsKKwl9CisJbGluZV9icmVha2NoZWNrKCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBwYXNzIDI6IGV4ZWN1dGUgdGhlIGNvbW1hbmQgZm9yIGVhY2ggbGluZSB0aGF0IGhhcyBiZWVuIG1hcmtlZAorICAgICAqLworICAgIGlmIChnb3RfaW50KQorCU1TRyhfKGVfaW50ZXJyKSk7CisgICAgZWxzZSBpZiAobmRvbmUgPT0gMCkKKyAgICB7CisJaWYgKHR5cGUgPT0gJ3YnKQorCSAgICBtc2dfc3RyKChjaGFyX3UgKilfKCJQYXR0ZXJuIGZvdW5kIGluIGV2ZXJ5IGxpbmU6ICVzIiksIHBhdCk7CisJZWxzZQorCSAgICBtc2dfc3RyKChjaGFyX3UgKilfKGVfcGF0bm90ZjIpLCBwYXQpOworICAgIH0KKyAgICBlbHNlCisJZ2xvYmFsX2V4ZShjbWQpOworCisgICAgbWxfY2xlYXJtYXJrZWQoKTsJICAgLyogY2xlYXIgcmVzdCBvZiB0aGUgbWFya3MgKi8KKyAgICB2aW1fZnJlZShyZWdtYXRjaC5yZWdwcm9nKTsKK30KKworLyoKKyAqIEV4ZWN1dGUgImNtZCIgb24gbGluZXMgbWFya2VkIHdpdGggbWxfc2V0bWFya2VkKCkuCisgKi8KKyAgICB2b2lkCitnbG9iYWxfZXhlKGNtZCkKKyAgICBjaGFyX3UJKmNtZDsKK3sKKyAgICBsaW5lbnJfVAlvbGRfbGNvdW50OwkvKiBiX21sLm1sX2xpbmVfY291bnQgYmVmb3JlIHRoZSBjb21tYW5kICovCisgICAgbGluZW5yX1QJbG51bTsJCS8qIGxpbmUgbnVtYmVyIGFjY29yZGluZyB0byBvbGQgc2l0dWF0aW9uICovCisKKyAgICAvKgorICAgICAqIFNldCBjdXJyZW50IHBvc2l0aW9uIG9ubHkgb25jZSBmb3IgYSBnbG9iYWwgY29tbWFuZC4KKyAgICAgKiBJZiBnbG9iYWxfYnVzeSBpcyBzZXQsIHNldHBjbWFyaygpIHdpbGwgbm90IGRvIGFueXRoaW5nLgorICAgICAqIElmIHRoZXJlIGlzIGFuIGVycm9yLCBnbG9iYWxfYnVzeSB3aWxsIGJlIGluY3JlbWVudGVkLgorICAgICAqLworICAgIHNldHBjbWFyaygpOworCisgICAgLyogV2hlbiB0aGUgY29tbWFuZCB3cml0ZXMgYSBtZXNzYWdlLCBkb24ndCBvdmVyd3JpdGUgdGhlIGNvbW1hbmQuICovCisgICAgbXNnX2RpZG91dCA9IFRSVUU7CisKKyAgICBnbG9iYWxfbmVlZF9iZWdpbmxpbmUgPSBGQUxTRTsKKyAgICBnbG9iYWxfYnVzeSA9IDE7CisgICAgb2xkX2xjb3VudCA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworICAgIHdoaWxlICghZ290X2ludCAmJiAobG51bSA9IG1sX2ZpcnN0bWFya2VkKCkpICE9IDAgJiYgZ2xvYmFsX2J1c3kgPT0gMSkKKyAgICB7CisJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbG51bTsKKwljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisJaWYgKCpjbWQgPT0gTlVMIHx8ICpjbWQgPT0gJ1xuJykKKwkgICAgZG9fY21kbGluZSgoY2hhcl91ICopInAiLCBOVUxMLCBOVUxMLCBET0NNRF9OT1dBSVQpOworCWVsc2UKKwkgICAgZG9fY21kbGluZShjbWQsIE5VTEwsIE5VTEwsIERPQ01EX05PV0FJVCk7CisJdWlfYnJlYWtjaGVjaygpOworICAgIH0KKworICAgIGdsb2JhbF9idXN5ID0gMDsKKyAgICBpZiAoZ2xvYmFsX25lZWRfYmVnaW5saW5lKQorCWJlZ2lubGluZShCTF9XSElURSB8IEJMX0ZJWCk7CisgICAgZWxzZQorCWNoZWNrX2N1cnNvcigpOwkvKiBjdXJzb3IgbWF5IGJlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBsaW5lICovCisKKyAgICAvKiBJZiBpdCBsb29rcyBsaWtlIG5vIG1lc3NhZ2Ugd2FzIHdyaXR0ZW4sIGFsbG93IG92ZXJ3cml0aW5nIHRoZQorICAgICAqIGNvbW1hbmQgd2l0aCB0aGUgcmVwb3J0IGZvciBudW1iZXIgb2YgY2hhbmdlcy4gKi8KKyAgICBpZiAobXNnX2NvbCA9PSAwICYmIG1zZ19zY3JvbGxlZCA9PSAwKQorCW1zZ19kaWRvdXQgPSBGQUxTRTsKKworICAgIC8qIElmIHN1YnNpdHV0ZXMgZG9uZSwgcmVwb3J0IG51bWJlciBvZiBzdWJzdGl0dWVzLCBvdGhlcndpc2UgcmVwb3J0CisgICAgICogbnVtYmVyIG9mIGV4dHJhIG9yIGRlbGV0ZWQgbGluZXMuICovCisgICAgaWYgKCFkb19zdWJfbXNnKCkpCisJbXNnbW9yZShjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCAtIG9sZF9sY291bnQpOworfQorCisjaWZkZWYgRkVBVF9WSU1JTkZPCisgICAgaW50CityZWFkX3ZpbWluZm9fc3ViX3N0cmluZyh2aXJwLCBmb3JjZSkKKyAgICB2aXJfVAkqdmlycDsKKyAgICBpbnQJCWZvcmNlOworeworICAgIGlmIChvbGRfc3ViICE9IE5VTEwgJiYgZm9yY2UpCisJdmltX2ZyZWUob2xkX3N1Yik7CisgICAgaWYgKGZvcmNlIHx8IG9sZF9zdWIgPT0gTlVMTCkKKwlvbGRfc3ViID0gdmltaW5mb19yZWFkc3RyaW5nKHZpcnAsIDEsIFRSVUUpOworICAgIHJldHVybiB2aW1pbmZvX3JlYWRsaW5lKHZpcnApOworfQorCisgICAgdm9pZAord3JpdGVfdmltaW5mb19zdWJfc3RyaW5nKGZwKQorICAgIEZJTEUgICAgKmZwOworeworICAgIGlmIChnZXRfdmltaW5mb19wYXJhbWV0ZXIoJy8nKSAhPSAwICYmIG9sZF9zdWIgIT0gTlVMTCkKKyAgICB7CisJZnByaW50ZihmcCwgXygiXG4jIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4kIikpOworCXZpbWluZm9fd3JpdGVzdHJpbmcoZnAsIG9sZF9zdWIpOworICAgIH0KK30KKyNlbmRpZiAvKiBGRUFUX1ZJTUlORk8gKi8KKworI2lmIChkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBTZXQgdXAgZm9yIGEgdGFncHJldmlldy4KKyAqLworICAgIHZvaWQKK3ByZXBhcmVfdGFncHJldmlldygpCit7CisgICAgd2luX1QJKndwOworCisjIGlmZGVmIEZFQVRfR1VJCisgICAgbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyMgZW5kaWYKKworICAgIC8qCisgICAgICogSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByZXZpZXcgd2luZG93IG9wZW4sIHVzZSB0aGF0IG9uZS4KKyAgICAgKi8KKyAgICBpZiAoIWN1cndpbi0+d19wX3B2dykKKyAgICB7CisJZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSBOVUxMOyB3cCA9IHdwLT53X25leHQpCisJICAgIGlmICh3cC0+d19wX3B2dykKKwkJYnJlYWs7CisJaWYgKHdwICE9IE5VTEwpCisJICAgIHdpbl9lbnRlcih3cCwgVFJVRSk7CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogVGhlcmUgaXMgbm8gcHJldmlldyB3aW5kb3cgb3BlbiB5ZXQuICBDcmVhdGUgb25lLgorCSAgICAgKi8KKwkgICAgaWYgKHdpbl9zcGxpdChnX2RvX3RhZ3ByZXZpZXcgPiAwID8gZ19kb190YWdwcmV2aWV3IDogMCwgMCkKKwkJCQkJCQkJICAgICAgPT0gRkFJTCkKKwkJcmV0dXJuOworCSAgICBjdXJ3aW4tPndfcF9wdncgPSBUUlVFOworCSAgICBjdXJ3aW4tPndfcF93ZmggPSBUUlVFOworIyBpZmRlZiBGRUFUX1NDUk9MTEJJTkQKKwkgICAgY3Vyd2luLT53X3Bfc2NiID0gRkFMU0U7CSAgICAvKiBkb24ndCB0YWtlIG92ZXIgJ3Njcm9sbGJpbmQnICovCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfRElGRgorCSAgICBjdXJ3aW4tPndfcF9kaWZmID0gRkFMU0U7CSAgICAvKiBubyAnZGlmZicgKi8KKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIGN1cndpbi0+d19wX2ZkYyA9IDA7CSAgICAvKiBubyAnZm9sZGNvbHVtbicgKi8KKyMgZW5kaWYKKwl9CisgICAgfQorfQorCisjZW5kaWYKKworCisvKgorICogIjpoZWxwIjogb3BlbiBhIHJlYWQtb25seSB3aW5kb3cgb24gYSBoZWxwIGZpbGUKKyAqLworICAgIHZvaWQKK2V4X2hlbHAoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBjaGFyX3UJKnRhZzsKKyAgICBGSUxFCSpoZWxwZmQ7CS8qIGZpbGUgZGVzY3JpcHRvciBvZiBoZWxwIGZpbGUgKi8KKyAgICBpbnQJCW47CisgICAgaW50CQlpOworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIHdpbl9UCSp3cDsKKyNlbmRpZgorICAgIGludAkJbnVtX21hdGNoZXM7CisgICAgY2hhcl91CSoqbWF0Y2hlczsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQllbXB0eV9mbnVtID0gMDsKKyAgICBpbnQJCWFsdF9mbnVtID0gMDsKKyAgICBidWZfVAkqYnVmOworI2lmZGVmIEZFQVRfTVVMVElfTEFORworICAgIGludAkJbGVuOworICAgIGNoYXJfdQkqbGFuZyA9IE5VTEw7CisjZW5kaWYKKworICAgIGlmIChlYXAgIT0gTlVMTCkKKyAgICB7CisJLyoKKwkgKiBBICI6aGVscCIgY29tbWFuZCBlbmRzIGF0IHRoZSBmaXJzdCBMRiwgb3IgYXQgYSAnfCcgdGhhdCBpcworCSAqIGZvbGxvd2VkIGJ5IHNvbWUgdGV4dC4gIFNldCBuZXh0Y21kIHRvIHRoZSBmb2xsb3dpbmcgY29tbWFuZC4KKwkgKi8KKwlmb3IgKGFyZyA9IGVhcC0+YXJnOyAqYXJnOyArK2FyZykKKwl7CisJICAgIGlmICgqYXJnID09ICdcbicgfHwgKmFyZyA9PSAnXHInCisJCSAgICB8fCAoKmFyZyA9PSAnfCcgJiYgYXJnWzFdICE9IE5VTCAmJiBhcmdbMV0gIT0gJ3wnKSkKKwkgICAgeworCQkqYXJnKysgPSBOVUw7CisJCWVhcC0+bmV4dGNtZCA9IGFyZzsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJYXJnID0gZWFwLT5hcmc7CisKKwlpZiAoZWFwLT5mb3JjZWl0ICYmICphcmcgPT0gTlVMKQorCXsKKwkgICAgRU1TRyhfKCJFNDc4OiBEb24ndCBwYW5pYyEiKSk7CisJICAgIHJldHVybjsKKwl9CisKKwlpZiAoZWFwLT5za2lwKQkgICAgLyogbm90IGV4ZWN1dGluZyBjb21tYW5kcyAqLworCSAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UKKwlhcmcgPSAoY2hhcl91ICopIiI7CisKKyAgICAvKiByZW1vdmUgdHJhaWxpbmcgYmxhbmtzICovCisgICAgcCA9IGFyZyArIFNUUkxFTihhcmcpIC0gMTsKKyAgICB3aGlsZSAocCA+IGFyZyAmJiB2aW1faXN3aGl0ZSgqcCkgJiYgcFstMV0gIT0gJ1xcJykKKwkqcC0tID0gTlVMOworCisjaWZkZWYgRkVBVF9NVUxUSV9MQU5HCisgICAgLyogQ2hlY2sgZm9yIGEgc3BlY2lmaWVkIGxhbmd1YWdlICovCisgICAgbGVuID0gU1RSTEVOKGFyZyk7CisgICAgaWYgKGxlbiA+PSAzICYmIGFyZ1tsZW4gLSAzXSA9PSAnQCcgJiYgQVNDSUlfSVNBTFBIQShhcmdbbGVuIC0gMl0pCisJCQkJCSAgICAgICAmJiBBU0NJSV9JU0FMUEhBKGFyZ1tsZW4gLSAxXSkpCisgICAgeworCWxhbmcgPSBhcmcgKyBsZW4gLSAyOworCWxhbmdbLTFdID0gTlVMOwkJLyogcmVtb3ZlIHRoZSAnQCcgKi8KKyAgICB9CisjZW5kaWYKKworICAgIC8qIFdoZW4gbm8gYXJndW1lbnQgZ2l2ZW4gZ28gdG8gdGhlIGluZGV4LiAqLworICAgIGlmICgqYXJnID09IE5VTCkKKwlhcmcgPSAoY2hhcl91ICopImhlbHAudHh0IjsKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlcmUgaXMgYSBtYXRjaCBmb3IgdGhlIGFyZ3VtZW50LgorICAgICAqLworICAgIG4gPSBmaW5kX2hlbHBfdGFncyhhcmcsICZudW1fbWF0Y2hlcywgJm1hdGNoZXMsCisJCQkJCQkgZWFwICE9IE5VTEwgJiYgZWFwLT5mb3JjZWl0KTsKKworICAgIGkgPSAwOworI2lmZGVmIEZFQVRfTVVMVElfTEFORworICAgIGlmIChuICE9IEZBSUwgJiYgbGFuZyAhPSBOVUxMKQorCS8qIEZpbmQgZmlyc3QgaXRlbSB3aXRoIHRoZSByZXF1ZXN0ZWQgbGFuZ3VhZ2UuICovCisJZm9yIChpID0gMDsgaSA8IG51bV9tYXRjaGVzOyArK2kpCisJeworCSAgICBsZW4gPSBTVFJMRU4obWF0Y2hlc1tpXSk7CisJICAgIGlmIChsZW4gPiAzICYmIG1hdGNoZXNbaV1bbGVuIC0gM10gPT0gJ0AnCisJCQkJICAmJiBTVFJJQ01QKG1hdGNoZXNbaV0gKyBsZW4gLSAyLCBsYW5nKSA9PSAwKQorCQlicmVhazsKKwl9CisjZW5kaWYKKyAgICBpZiAoaSA+PSBudW1fbWF0Y2hlcyB8fCBuID09IEZBSUwpCisgICAgeworI2lmZGVmIEZFQVRfTVVMVElfTEFORworCWlmIChsYW5nICE9IE5VTEwpCisJICAgIEVNU0czKF8oIkU2NjE6IFNvcnJ5LCBubyAnJXMnIGhlbHAgZm9yICVzIiksIGxhbmcsIGFyZyk7CisJZWxzZQorI2VuZGlmCisJICAgIEVNU0cyKF8oIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIpLCBhcmcpOworCWlmIChuICE9IEZBSUwpCisJICAgIEZyZWVXaWxkKG51bV9tYXRjaGVzLCBtYXRjaGVzKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogVGhlIGZpcnN0IG1hdGNoIChpbiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlKSBpcyB0aGUgYmVzdCBtYXRjaC4gKi8KKyAgICB0YWcgPSB2aW1fc3Ryc2F2ZShtYXRjaGVzW2ldKTsKKyAgICBGcmVlV2lsZChudW1fbWF0Y2hlcywgbWF0Y2hlcyk7CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIG5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKworICAgIC8qCisgICAgICogUmUtdXNlIGFuIGV4aXN0aW5nIGhlbHAgd2luZG93IG9yIG9wZW4gYSBuZXcgb25lLgorICAgICAqLworICAgIGlmICghY3Vyd2luLT53X2J1ZmZlci0+Yl9oZWxwKQorICAgIHsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwlmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwkgICAgaWYgKHdwLT53X2J1ZmZlciAhPSBOVUxMICYmIHdwLT53X2J1ZmZlci0+Yl9oZWxwKQorCQlicmVhazsKKwlpZiAod3AgIT0gTlVMTCAmJiB3cC0+d19idWZmZXItPmJfbndpbmRvd3MgPiAwKQorCSAgICB3aW5fZW50ZXIod3AsIFRSVUUpOworCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgLyoKKwkgICAgICogVGhlcmUgaXMgbm8gaGVscCB3aW5kb3cgeWV0LgorCSAgICAgKiBUcnkgdG8gb3BlbiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgdGhlICJoZWxwZmlsZSIgb3B0aW9uLgorCSAgICAgKi8KKwkgICAgaWYgKChoZWxwZmQgPSBtY2hfZm9wZW4oKGNoYXIgKilwX2hmLCBSRUFEQklOKSkgPT0gTlVMTCkKKwkgICAgeworCQltc2dfc3RyKChjaGFyX3UgKilfKCJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiKSwKKwkJCQkJCQkJCXBfaGYpOworCQlnb3RvIGVycmV0OworCSAgICB9CisJICAgIGZjbG9zZShoZWxwZmQpOworCisjaWZkZWYgRkVBVF9XSU5ET1dTCisJICAgIC8qIFNwbGl0IG9mZiBoZWxwIHdpbmRvdzsgcHV0IGl0IGF0IGZhciB0b3AgaWYgbm8gcG9zaXRpb24KKwkgICAgICogc3BlY2lmaWVkLCB0aGUgY3VycmVudCB3aW5kb3cgaXMgdmVydGljYWxseSBzcGxpdCBhbmQgbmFycm93LiAqLworCSAgICBuID0gV1NQX0hFTFA7CisjIGlmZGVmIEZFQVRfVkVSVFNQTElUCisJICAgIGlmIChjbWRtb2Quc3BsaXQgPT0gMCAmJiBjdXJ3aW4tPndfd2lkdGggIT0gQ29sdW1ucworCQkJCQkJICAgICAgJiYgY3Vyd2luLT53X3dpZHRoIDwgODApCisJCW4gfD0gV1NQX1RPUDsKKyMgZW5kaWYKKwkgICAgaWYgKHdpbl9zcGxpdCgwLCBuKSA9PSBGQUlMKQorI2Vsc2UKKwkgICAgLyogdXNlIGN1cnJlbnQgd2luZG93ICovCisJICAgIGlmICghY2FuX2FiYW5kb24oY3VyYnVmLCBGQUxTRSkpCisjZW5kaWYKKwkJZ290byBlcnJldDsKKworI2lmZGVmIEZFQVRfV0lORE9XUworCSAgICBpZiAoY3Vyd2luLT53X2hlaWdodCA8IHBfaGgpCisJCXdpbl9zZXRoZWlnaHQoKGludClwX2hoKTsKKyNlbmRpZgorCisJICAgIC8qCisJICAgICAqIE9wZW4gaGVscCBmaWxlIChkb19lY21kKCkgd2lsbCBzZXQgYl9oZWxwIGZsYWcsIHJlYWRmaWxlKCkgd2lsbAorCSAgICAgKiBzZXQgYl9wX3JvIGZsYWcpLgorCSAgICAgKiBTZXQgdGhlIGFsdGVybmF0ZSBmaWxlIHRvIHRoZSBwcmV2aW91c2x5IGVkaXRlZCBmaWxlLgorCSAgICAgKi8KKwkgICAgYWx0X2ZudW0gPSBjdXJidWYtPmJfZm51bTsKKwkgICAgKHZvaWQpZG9fZWNtZCgwLCBOVUxMLCBOVUxMLCBOVUxMLCBFQ01EX0xBU1RMLAorCQkJCQkJICAgRUNNRF9ISURFICsgRUNNRF9TRVRfSEVMUCk7CisJICAgIGN1cndpbi0+d19hbHRfZm51bSA9IGFsdF9mbnVtOworCSAgICBlbXB0eV9mbnVtID0gY3VyYnVmLT5iX2ZudW07CisJfQorICAgIH0KKworICAgIGlmICghcF9pbSkKKwlyZXN0YXJ0X2VkaXQgPSAwOwkgICAgLyogZG9uJ3Qgd2FudCBpbnNlcnQgbW9kZSBpbiBoZWxwIGZpbGUgKi8KKworICAgIGlmICh0YWcgIT0gTlVMTCkKKwlkb190YWcodGFnLCBEVF9IRUxQLCAxLCBGQUxTRSwgVFJVRSk7CisKKyAgICAvKiBEZWxldGUgdGhlIGVtcHR5IGJ1ZmZlciBpZiB3ZSdyZSBub3QgdXNpbmcgaXQuICovCisgICAgaWYgKGVtcHR5X2ZudW0gIT0gMCAmJiBjdXJidWYtPmJfZm51bSAhPSBlbXB0eV9mbnVtKQorICAgIHsKKwlidWYgPSBidWZsaXN0X2ZpbmRucihlbXB0eV9mbnVtKTsKKwlpZiAoYnVmICE9IE5VTEwpCisJICAgIHdpcGVfYnVmZmVyKGJ1ZiwgVFJVRSk7CisgICAgfQorCisgICAgLyoga2VlcCB0aGUgcHJldmlvdXMgYWx0ZXJuYXRlIGZpbGUgKi8KKyAgICBpZiAoYWx0X2ZudW0gIT0gMCAmJiBjdXJ3aW4tPndfYWx0X2ZudW0gPT0gZW1wdHlfZm51bSkKKwljdXJ3aW4tPndfYWx0X2ZudW0gPSBhbHRfZm51bTsKKworZXJyZXQ6CisgICAgdmltX2ZyZWUodGFnKTsKK30KKworCisvKgorICogUmV0dXJuIGEgaGV1cmlzdGljIGluZGljYXRpbmcgaG93IHdlbGwgdGhlIGdpdmVuIHN0cmluZyBtYXRjaGVzLiAgVGhlCisgKiBzbWFsbGVyIHRoZSBudW1iZXIsIHRoZSBiZXR0ZXIgdGhlIG1hdGNoLiAgVGhpcyBpcyB0aGUgb3JkZXIgb2YgcHJpb3JpdGllcywKKyAqIGZyb20gYmVzdCBtYXRjaCB0byB3b3JzdCBtYXRjaDoKKyAqCS0gTWF0Y2ggd2l0aCBsZWFzdCBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMgaXMgYmV0dGVyLgorICoJLSBNYXRjaCB3aXRoIGxlYXN0IHRvdGFsIGNoYXJhY3RlcnMgaXMgYmV0dGVyLgorICoJLSBNYXRjaCB0b3dhcmRzIHRoZSBzdGFydCBpcyBiZXR0ZXIuCisgKgktIE1hdGNoIHN0YXJ0aW5nIHdpdGggIisiIGlzIHdvcnNlIChmZWF0dXJlIGluc3RlYWQgb2YgY29tbWFuZCkKKyAqIEFzc3VtcHRpb24gaXMgbWFkZSB0aGF0IHRoZSBtYXRjaGVkX3N0cmluZyBwYXNzZWQgaGFzIGFscmVhZHkgYmVlbiBmb3VuZCB0bworICogbWF0Y2ggc29tZSBzdHJpbmcgZm9yIHdoaWNoIGhlbHAgaXMgcmVxdWVzdGVkLiAgd2ViYi4KKyAqLworICAgIGludAoraGVscF9oZXVyaXN0aWMobWF0Y2hlZF9zdHJpbmcsIG9mZnNldCwgd3JvbmdfY2FzZSkKKyAgICBjaGFyX3UJKm1hdGNoZWRfc3RyaW5nOworICAgIGludAkJb2Zmc2V0OwkJCS8qIG9mZnNldCBmb3IgbWF0Y2ggKi8KKyAgICBpbnQJCXdyb25nX2Nhc2U7CQkvKiBubyBtYXRjaGluZyBjYXNlICovCit7CisgICAgaW50CQludW1fbGV0dGVyczsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBudW1fbGV0dGVycyA9IDA7CisgICAgZm9yIChwID0gbWF0Y2hlZF9zdHJpbmc7ICpwOyBwKyspCisJaWYgKEFTQ0lJX0lTQUxOVU0oKnApKQorCSAgICBudW1fbGV0dGVycysrOworCisgICAgLyoKKyAgICAgKiBNdWx0aXBseSB0aGUgbnVtYmVyIG9mIGxldHRlcnMgYnkgMTAwIHRvIGdpdmUgaXQgYSBtdWNoIGJpZ2dlcgorICAgICAqIHdlaWdodGluZyB0aGFuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy4KKyAgICAgKiBJZiB0aGVyZSBvbmx5IGlzIGEgbWF0Y2ggd2hpbGUgaWdub3JpbmcgY2FzZSwgYWRkIDUwMDAuCisgICAgICogSWYgdGhlIG1hdGNoIHN0YXJ0cyBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZCwgYWRkIDEwMDAwIHRvIHB1dCBpdAorICAgICAqIHNvbWV3aGVyZSBpbiB0aGUgbGFzdCBoYWxmLgorICAgICAqIElmIHRoZSBtYXRjaCBpcyBtb3JlIHRoYW4gMiBjaGFycyBmcm9tIHRoZSBzdGFydCwgbXVsdGlwbHkgYnkgMjAwIHRvCisgICAgICogcHV0IGl0IGFmdGVyIG1hdGNoZXMgYXQgdGhlIHN0YXJ0LgorICAgICAqLworICAgIGlmIChBU0NJSV9JU0FMTlVNKG1hdGNoZWRfc3RyaW5nW29mZnNldF0pICYmIG9mZnNldCA+IDAKKwkJCQkgJiYgQVNDSUlfSVNBTE5VTShtYXRjaGVkX3N0cmluZ1tvZmZzZXQgLSAxXSkpCisJb2Zmc2V0ICs9IDEwMDAwOworICAgIGVsc2UgaWYgKG9mZnNldCA+IDIpCisJb2Zmc2V0ICo9IDIwMDsKKyAgICBpZiAod3JvbmdfY2FzZSkKKwlvZmZzZXQgKz0gNTAwMDsKKyAgICAvKiBGZWF0dXJlcyBhcmUgbGVzcyBpbnRlcmVzdGluZyB0aGFuIHRoZSBzdWJqZWN0cyB0aGVtc2VsdmVzLCBidXQgIisiCisgICAgICogYWxvbmUgaXMgbm90IGEgZmVhdHVyZS4gKi8KKyAgICBpZiAobWF0Y2hlZF9zdHJpbmdbMF0gPT0gJysnICYmIG1hdGNoZWRfc3RyaW5nWzFdICE9IE5VTCkKKwlvZmZzZXQgKz0gMTAwOworICAgIHJldHVybiAoaW50KSgxMDAgKiBudW1fbGV0dGVycyArIFNUUkxFTihtYXRjaGVkX3N0cmluZykgKyBvZmZzZXQpOworfQorCisvKgorICogQ29tcGFyZSBmdW5jdGlvbnMgZm9yIHFzb3J0KCkgYmVsb3csIHRoYXQgY2hlY2tzIHRoZSBoZWxwIGhldXJpc3RpY3MgbnVtYmVyCisgKiB0aGF0IGhhcyBiZWVuIHB1dCBhZnRlciB0aGUgdGFnbmFtZSBieSBmaW5kX3RhZ3MoKS4KKyAqLworICAgIHN0YXRpYyBpbnQKKyNpZmRlZiBfX0JPUkxBTkRDX18KK19SVExFTlRSWUYKKyNlbmRpZgoraGVscF9jb21wYXJlKHMxLCBzMikKKyAgICBjb25zdCB2b2lkCSpzMTsKKyAgICBjb25zdCB2b2lkCSpzMjsKK3sKKyAgICBjaGFyICAgICpwMTsKKyAgICBjaGFyICAgICpwMjsKKworICAgIHAxID0gKihjaGFyICoqKXMxICsgc3RybGVuKCooY2hhciAqKilzMSkgKyAxOworICAgIHAyID0gKihjaGFyICoqKXMyICsgc3RybGVuKCooY2hhciAqKilzMikgKyAxOworICAgIHJldHVybiBzdHJjbXAocDEsIHAyKTsKK30KKworLyoKKyAqIEZpbmQgYWxsIGhlbHAgdGFncyBtYXRjaGluZyAiYXJnIiwgc29ydCB0aGVtIGFuZCByZXR1cm4gaW4gbWF0Y2hlc1tdLCB3aXRoCisgKiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW4gbnVtX21hdGNoZXMuCisgKiBUaGUgbWF0Y2hlcyB3aWxsIGJlIHNvcnRlZCB3aXRoIGEgImJlc3QiIG1hdGNoIGFsZ29yaXRobS4KKyAqIFdoZW4gImtlZXBfbGFuZyIgaXMgVFJVRSB0cnkga2VlcGluZyB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGN1cnJlbnQgYnVmZmVyLgorICovCisgICAgaW50CitmaW5kX2hlbHBfdGFncyhhcmcsIG51bV9tYXRjaGVzLCBtYXRjaGVzLCBrZWVwX2xhbmcpCisgICAgY2hhcl91CSphcmc7CisgICAgaW50CQkqbnVtX21hdGNoZXM7CisgICAgY2hhcl91CSoqKm1hdGNoZXM7CisgICAgaW50CQlrZWVwX2xhbmc7Cit7CisgICAgY2hhcl91CSpzLCAqZDsKKyAgICBpbnQJCWk7CisgICAgc3RhdGljIGNoYXIgKihtdGFibGVbXSkgPSB7IioiLCAiZyoiLCAiWyoiLCAiXSoiLCAiOioiLAorCQkJICAgICAgICIvKiIsICIvXFwqIiwgIlwiKiIsICIvXFwoXFwpIiwKKwkJCSAgICAgICAiPyIsICI6PyIsICI/PENSPiIsICJnPyIsICJnP2c/IiwgImc/PyIsCisJCQkgICAgICAgIi9cXD8iLCAiL1xceihcXCkiLAorCQkJICAgICAgICJbY291bnRdIiwgIltxdW90ZXhdIiwgIltyYW5nZV0iLAorCQkJICAgICAgICJbcGF0dGVybl0iLCAiXFx8IiwgIlxcJSQifTsKKyAgICBzdGF0aWMgY2hhciAqKHJ0YWJsZVtdKSA9IHsic3RhciIsICJnc3RhciIsICJbc3RhciIsICJdc3RhciIsICI6c3RhciIsCisJCQkgICAgICAgIi9zdGFyIiwgIi9cXFxcc3RhciIsICJxdW90ZXN0YXIiLCAiL1xcXFwoXFxcXCkiLAorCQkJICAgICAgICI/IiwgIjo/IiwgIj88Q1I+IiwgImc/IiwgImc/Zz8iLCAiZz8/IiwKKwkJCSAgICAgICAiL1xcXFw/IiwgIi9cXFxceihcXFxcKSIsCisJCQkgICAgICAgIlxcW2NvdW50XSIsICJcXFtxdW90ZXhdIiwgIlxcW3JhbmdlXSIsCisJCQkgICAgICAgIlxcW3BhdHRlcm5dIiwgIlxcXFxiYXIiLCAiL1xcXFwlXFwkIn07CisgICAgaW50IGZsYWdzOworCisgICAgZCA9IElPYnVmZjsJCSAgICAvKiBhc3N1bWUgSU9idWZmIGlzIGxvbmcgZW5vdWdoISAqLworCisgICAgLyoKKyAgICAgKiBSZWNvZ25pemUgYSBmZXcgZXhjZXB0aW9ucyB0byB0aGUgcnVsZS4JU29tZSBzdHJpbmdzIHRoYXQgY29udGFpbiAnKicKKyAgICAgKiB3aXRoICJzdGFyIi4gIE90aGVyd2lzZSAnKicgaXMgcmVjb2duaXplZCBhcyBhIHdpbGRjYXJkLgorICAgICAqLworICAgIGZvciAoaSA9IHNpemVvZihtdGFibGUpIC8gc2l6ZW9mKGNoYXIgKik7IC0taSA+PSAwOyApCisJaWYgKFNUUkNNUChhcmcsIG10YWJsZVtpXSkgPT0gMCkKKwl7CisJICAgIFNUUkNQWShkLCBydGFibGVbaV0pOworCSAgICBicmVhazsKKwl9CisKKyAgICBpZiAoaSA8IDApCS8qIG5vIG1hdGNoIGluIHRhYmxlICovCisgICAgeworCS8qIFJlcGxhY2UgIlxTIiB3aXRoICIvXFxTIiwgZXRjLiAgT3RoZXJ3aXNlIGV2ZXJ5IHRhZyBpcyBtYXRjaGVkLgorCSAqIEFsc28gcmVwbGFjZSAiXCVeIiBhbmQgIlwlKCIsIHRoZXkgbWF0Y2ggZXZlcnkgdGFnIHRvby4KKwkgKiBBbHNvICJcenMiLCAiXHoxIiwgZXRjLgorCSAqIEFsc28gIlxAPCIsICJcQD0iLCAiXEA8PSIsIGV0Yy4KKwkgKiBBbmQgYWxzbyAiXF8kIiBhbmQgIlxfXiIuICovCisJaWYgKGFyZ1swXSA9PSAnXFwnCisJCSYmICgoYXJnWzFdICE9IE5VTCAmJiBhcmdbMl0gPT0gTlVMKQorCQkgICAgfHwgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSIlX3pAIiwgYXJnWzFdKSAhPSBOVUxMCisJCQkJCQkJICAgJiYgYXJnWzJdICE9IE5VTCkpKQorCXsKKwkgICAgU1RSQ1BZKGQsICIvXFxcXCIpOworCSAgICBTVFJDUFkoZCArIDMsIGFyZyArIDEpOworCSAgICAvKiBDaGVjayBmb3IgIi9cXF8kIiwgc2hvdWxkIGJlICIvXFxfXCQiICovCisJICAgIGlmIChkWzNdID09ICdfJyAmJiBkWzRdID09ICckJykKKwkJU1RSQ1BZKGQgKyA0LCAiXFwkIik7CisJfQorCWVsc2UKKwl7CisJICAvKiByZXBsYWNlICJbOi4uLjpdIiB3aXRoICJcWzouLi46XSI7ICJbKy4uLl0iIHdpdGggIlxbKysuLi5dIiAqLworCSAgICBpZiAoYXJnWzBdID09ICdbJyAmJiAoYXJnWzFdID09ICc6JworCQkJCQkgfHwgKGFyZ1sxXSA9PSAnKycgJiYgYXJnWzJdID09ICcrJykpKQorCSAgICAgICpkKysgPSAnXFwnOworCisJICBmb3IgKHMgPSBhcmc7ICpzOyArK3MpCisJICB7CisJICAgIC8qCisJICAgICAqIFJlcGxhY2UgInwiIHdpdGggImJhciIgYW5kICciJyB3aXRoICJxdW90ZSIgdG8gbWF0Y2ggdGhlIG5hbWUgb2YKKwkgICAgICogdGhlIHRhZ3MgZm9yIHRoZXNlIGNvbW1hbmRzLgorCSAgICAgKiBSZXBsYWNlICIqIiB3aXRoICIuKiIgYW5kICI/IiB3aXRoICIuIiB0byBtYXRjaCBjb21tYW5kIGxpbmUKKwkgICAgICogY29tcGxldGlvbi4KKwkgICAgICogSW5zZXJ0IGEgYmFja3NsYXNoIGJlZm9yZSAnficsICckJyBhbmQgJy4nIHRvIGF2b2lkIHRoZWlyCisJICAgICAqIHNwZWNpYWwgbWVhbmluZy4KKwkgICAgICovCisJICAgIGlmIChkIC0gSU9idWZmID4gSU9TSVpFIC0gMTApCS8qIGdldHRpbmcgdG9vIGxvbmchPyAqLworCQlicmVhazsKKwkgICAgc3dpdGNoICgqcykKKwkgICAgeworCQljYXNlICd8JzogICBTVFJDUFkoZCwgImJhciIpOworCQkJICAgIGQgKz0gMzsKKwkJCSAgICBjb250aW51ZTsKKwkJY2FzZSAnIic6ICAgU1RSQ1BZKGQsICJxdW90ZSIpOworCQkJICAgIGQgKz0gNTsKKwkJCSAgICBjb250aW51ZTsKKwkJY2FzZSAnKic6ICAgKmQrKyA9ICcuJzsKKwkJCSAgICBicmVhazsKKwkJY2FzZSAnPyc6ICAgKmQrKyA9ICcuJzsKKwkJCSAgICBjb250aW51ZTsKKwkJY2FzZSAnJCc6CisJCWNhc2UgJy4nOgorCQljYXNlICd+JzogICAqZCsrID0gJ1xcJzsKKwkJCSAgICBicmVhazsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIFJlcGxhY2UgIl54IiBieSAiQ1RSTC1YIi4gRG9uJ3QgZG8gdGhpcyBmb3IgIl5fIiB0byBtYWtlCisJICAgICAqICI6aGVscCBpX15fQ1RSTC1EIiB3b3JrLgorCSAgICAgKiBJbnNlcnQgJy0nIGJlZm9yZSBhbmQgYWZ0ZXIgIkNUUkwtWCIgd2hlbiBhcHBsaWNhYmxlLgorCSAgICAgKi8KKwkgICAgaWYgKCpzIDwgJyAnIHx8ICgqcyA9PSAnXicgJiYgc1sxXSAmJiAoQVNDSUlfSVNBTFBIQShzWzFdKQorCQkJICAgfHwgdmltX3N0cmNocigoY2hhcl91ICopIj9AW1xcXV4iLCBzWzFdKSAhPSBOVUxMKSkpCisJICAgIHsKKwkJaWYgKGQgPiBJT2J1ZmYgJiYgZFstMV0gIT0gJ18nKQorCQkgICAgKmQrKyA9ICdfJzsJCS8qIHByZXBlbmQgYSAnXycgKi8KKwkJU1RSQ1BZKGQsICJDVFJMLSIpOworCQlkICs9IDU7CisJCWlmICgqcyA8ICcgJykKKwkJeworI2lmZGVmIEVCQ0RJQworCQkgICAgKmQrKyA9IEN0cmxDaGFyKCpzKTsKKyNlbHNlCisJCSAgICAqZCsrID0gKnMgKyAnQCc7CisjZW5kaWYKKwkJICAgIGlmIChkWy0xXSA9PSAnXFwnKQorCQkJKmQrKyA9ICdcXCc7CS8qIGRvdWJsZSBhIGJhY2tzbGFzaCAqLworCQl9CisJCWVsc2UKKwkJICAgICpkKysgPSAqKytzOworCQlpZiAoc1sxXSAhPSBOVUwgJiYgc1sxXSAhPSAnXycpCisJCSAgICAqZCsrID0gJ18nOwkJLyogYXBwZW5kIGEgJ18nICovCisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGVsc2UgaWYgKCpzID09ICdeJykJCS8qICJeIiBvciAiQ1RSTC1eIiBvciAiXl8iICovCisJCSpkKysgPSAnXFwnOworCisJICAgIC8qCisJICAgICAqIEluc2VydCBhIGJhY2tzbGFzaCBiZWZvcmUgYSBiYWNrc2xhc2ggYWZ0ZXIgYSBzbGFzaCwgZm9yIHNlYXJjaAorCSAgICAgKiBwYXR0ZXJuIHRhZ3M6ICIvXHwiIC0tPiAiL1xcfCIuCisJICAgICAqLworCSAgICBlbHNlIGlmIChzWzBdID09ICdcXCcgJiYgc1sxXSAhPSAnXFwnCisJCQkJCSAgICAgICAmJiAqYXJnID09ICcvJyAmJiBzID09IGFyZyArIDEpCisJCSpkKysgPSAnXFwnOworCisJICAgIC8qICJDVFJMLVxfIiAtPiAiQ1RSTC1cXF8iIHRvIGF2b2lkIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgIlxfIiBpbgorCSAgICAgKiAiQ1RSTC1cX0NUUkwtTiIgKi8KKwkgICAgaWYgKFNUUk5JQ01QKHMsICJDVFJMLVxcXyIsIDcpID09IDApCisJICAgIHsKKwkJU1RSQ1BZKGQsICJDVFJMLVxcXFwiKTsKKwkJZCArPSA3OworCQlzICs9IDY7CisJICAgIH0KKworCSAgICAqZCsrID0gKnM7CisKKwkgICAgLyoKKwkgICAgICogSWYgdGFnIHN0YXJ0cyB3aXRoICcsIHRvc3MgZXZlcnl0aGluZyBhZnRlciBhIHNlY29uZCAnLiBGaXhlcworCSAgICAgKiBDVFJMLV0gb24gJ29wdGlvbicuICh3b3VsZCBpbmNsdWRlIHRoZSB0cmFpbGluZyAnLicpLgorCSAgICAgKi8KKwkgICAgaWYgKCpzID09ICdcJycgJiYgcyA+IGFyZyAmJiAqYXJnID09ICdcJycpCisJCWJyZWFrOworCSAgfQorCSAgKmQgPSBOVUw7CisJfQorICAgIH0KKworICAgICptYXRjaGVzID0gKGNoYXJfdSAqKikiIjsKKyAgICAqbnVtX21hdGNoZXMgPSAwOworICAgIGZsYWdzID0gVEFHX0hFTFAgfCBUQUdfUkVHRVhQIHwgVEFHX05BTUVTIHwgVEFHX1ZFUkJPU0U7CisgICAgaWYgKGtlZXBfbGFuZykKKwlmbGFncyB8PSBUQUdfS0VFUF9MQU5HOworICAgIGlmIChmaW5kX3RhZ3MoSU9idWZmLCBudW1fbWF0Y2hlcywgbWF0Y2hlcywgZmxhZ3MsIChpbnQpTUFYQ09MLCBOVUxMKSA9PSBPSworCSAgICAmJiAqbnVtX21hdGNoZXMgPiAwKQorCS8qIFNvcnQgdGhlIG1hdGNoZXMgZm91bmQgb24gdGhlIGhldXJpc3RpYyBudW1iZXIgdGhhdCBpcyBhZnRlciB0aGUKKwkgKiB0YWcgbmFtZS4gKi8KKwlxc29ydCgodm9pZCAqKSptYXRjaGVzLCAoc2l6ZV90KSpudW1fbWF0Y2hlcywKKwkJCQkJICAgICAgc2l6ZW9mKGNoYXJfdSAqKSwgaGVscF9jb21wYXJlKTsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBBZnRlciByZWFkaW5nIGEgaGVscCBmaWxlOiBNYXkgY2xlYW51cCBhIGhlbHAgYnVmZmVyIHdoZW4gc3ludGF4CisgKiBoaWdobGlnaHRpbmcgaXMgbm90IHVzZWQuCisgKi8KKyAgICB2b2lkCitmaXhfaGVscF9idWZmZXIoKQoreworICAgIGxpbmVucl9UCWxudW07CisgICAgY2hhcl91CSpsaW5lOworICAgIGludAkJaW5fZXhhbXBsZSA9IEZBTFNFOworICAgIGludAkJbGVuOworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKnJ0OworICAgIGludAkJbXVzdGZyZWU7CisKKyAgICAvKiBzZXQgZmlsZXR5cGUgdG8gImhlbHAiLiAqLworICAgIHNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJmdCIsIDBMLCAoY2hhcl91ICopImhlbHAiLCBPUFRfTE9DQUwpOworCisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBpZiAoIXN5bnRheF9wcmVzZW50KGN1cmJ1ZikpCisjZW5kaWYKKyAgICB7CisJZm9yIChsbnVtID0gMTsgbG51bSA8PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsgKytsbnVtKQorCXsKKwkgICAgbGluZSA9IG1sX2dldF9idWYoY3VyYnVmLCBsbnVtLCBGQUxTRSk7CisJICAgIGxlbiA9IChpbnQpU1RSTEVOKGxpbmUpOworCSAgICBpZiAoaW5fZXhhbXBsZSAmJiBsZW4gPiAwICYmICF2aW1faXN3aGl0ZShsaW5lWzBdKSkKKwkgICAgeworCQkvKiBFbmQgb2YgZXhhbXBsZTogbm9uLXdoaXRlIG9yICc8JyBpbiBmaXJzdCBjb2x1bW4uICovCisJCWlmIChsaW5lWzBdID09ICc8JykKKwkJeworCQkgICAgLyogYmxhbmstb3V0IGEgJzwnIGluIHRoZSBmaXJzdCBjb2x1bW4gKi8KKwkJICAgIGxpbmUgPSBtbF9nZXRfYnVmKGN1cmJ1ZiwgbG51bSwgVFJVRSk7CisJCSAgICBsaW5lWzBdID0gJyAnOworCQl9CisJCWluX2V4YW1wbGUgPSBGQUxTRTsKKwkgICAgfQorCSAgICBpZiAoIWluX2V4YW1wbGUgJiYgbGVuID4gMCkKKwkgICAgeworCQlpZiAobGluZVtsZW4gLSAxXSA9PSAnPicgJiYgKGxlbiA9PSAxIHx8IGxpbmVbbGVuIC0gMl0gPT0gJyAnKSkKKwkJeworCQkgICAgLyogYmxhbmstb3V0IGEgJz4nIGluIHRoZSBsYXN0IGNvbHVtbiAoc3RhcnQgb2YgZXhhbXBsZSkgKi8KKwkJICAgIGxpbmUgPSBtbF9nZXRfYnVmKGN1cmJ1ZiwgbG51bSwgVFJVRSk7CisJCSAgICBsaW5lW2xlbiAtIDFdID0gJyAnOworCQkgICAgaW5fZXhhbXBsZSA9IFRSVUU7CisJCX0KKwkJZWxzZSBpZiAobGluZVtsZW4gLSAxXSA9PSAnficpCisJCXsKKwkJICAgIC8qIGJsYW5rLW91dCBhICd+JyBhdCB0aGUgZW5kIG9mIGxpbmUgKGhlYWRlciBtYXJrZXIpICovCisJCSAgICBsaW5lID0gbWxfZ2V0X2J1ZihjdXJidWYsIGxudW0sIFRSVUUpOworCQkgICAgbGluZVtsZW4gLSAxXSA9ICcgJzsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSW4gdGhlICJoZWxwLnR4dCIgZmlsZSwgYWRkIHRoZSBsb2NhbGx5IGFkZGVkIGhlbHAgZmlsZXMuCisgICAgICogVGhpcyB1c2VzIHRoZSB2ZXJ5IGZpcnN0IGxpbmUgaW4gdGhlIGhlbHAgZmlsZS4KKyAgICAgKi8KKyAgICBpZiAoZm5hbWVjbXAoZ2V0dGFpbChjdXJidWYtPmJfZm5hbWUpLCAiaGVscC50eHQiKSA9PSAwKQorICAgIHsKKwlmb3IgKGxudW0gPSAxOyBsbnVtIDwgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7ICsrbG51bSkKKwl7CisJICAgIGxpbmUgPSBtbF9nZXRfYnVmKGN1cmJ1ZiwgbG51bSwgRkFMU0UpOworCSAgICBpZiAoc3Ryc3RyKChjaGFyICopbGluZSwgIipsb2NhbC1hZGRpdGlvbnMqIikgIT0gTlVMTCkKKwkgICAgeworCQkvKiBHbyB0aHJvdWdoIGFsbCBkaXJlY3RvcmllcyBpbiAncnVudGltZXBhdGgnLCBza2lwcGluZworCQkgKiAkVklNUlVOVElNRS4gKi8KKwkJcCA9IHBfcnRwOworCQl3aGlsZSAoKnAgIT0gTlVMKQorCQl7CisJCSAgICBjb3B5X29wdGlvbl9wYXJ0KCZwLCBOYW1lQnVmZiwgTUFYUEFUSEwsICIsIik7CisJCSAgICBtdXN0ZnJlZSA9IEZBTFNFOworCQkgICAgcnQgPSB2aW1fZ2V0ZW52KChjaGFyX3UgKikiVklNUlVOVElNRSIsICZtdXN0ZnJlZSk7CisJCSAgICBpZiAoZnVsbHBhdGhjbXAocnQsIE5hbWVCdWZmLCBGQUxTRSkgIT0gRlBDX1NBTUUpCisJCSAgICB7CisJCQlpbnQJZmNvdW50OworCQkJY2hhcl91CSoqZm5hbWVzOworCQkJRklMRQkqZmQ7CisJCQljaGFyX3UJKnM7CisJCQlpbnQJZmk7CisjaWZkZWYgRkVBVF9NQllURQorCQkJdmltY29udl9UCXZjOworCQkJY2hhcl91CQkqY3A7CisjZW5kaWYKKworCQkJLyogRmluZCBhbGwgImRvYy8gKi50eHQiIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LiAqLworCQkJYWRkX3BhdGhzZXAoTmFtZUJ1ZmYpOworCQkJU1RSQ0FUKE5hbWVCdWZmLCAiZG9jLyoudHh0Iik7CisJCQlpZiAoZ2VuX2V4cGFuZF93aWxkY2FyZHMoMSwgJk5hbWVCdWZmLCAmZmNvdW50LAorCQkJCQkgICAgICZmbmFtZXMsIEVXX0ZJTEV8RVdfU0lMRU5UKSA9PSBPSworCQkJCSYmIGZjb3VudCA+IDApCisJCQl7CisJCQkgICAgZm9yIChmaSA9IDA7IGZpIDwgZmNvdW50OyArK2ZpKQorCQkJICAgIHsKKwkJCQlmZCA9IGZvcGVuKChjaGFyICopZm5hbWVzW2ZpXSwgInIiKTsKKwkJCQlpZiAoZmQgIT0gTlVMTCkKKwkJCQl7CisJCQkJICAgIHZpbV9mZ2V0cyhJT2J1ZmYsIElPU0laRSwgZmQpOworCQkJCSAgICBpZiAoSU9idWZmWzBdID09ICcqJworCQkJCQkgICAgJiYgKHMgPSB2aW1fc3RyY2hyKElPYnVmZiArIDEsICcqJykpCisJCQkJCQkJCSAgICAgICE9IE5VTEwpCisJCQkJICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkJCWludAl0aGlzX3V0ZiA9IE1BWUJFOworI2VuZGlmCisJCQkJCS8qIENoYW5nZSB0YWcgZGVmaW5pdGlvbiB0byBhCisJCQkJCSAqIHJlZmVyZW5jZSBhbmQgcmVtb3ZlIDxDUj4vPE5MPi4gKi8KKwkJCQkJSU9idWZmWzBdID0gJ3wnOworCQkJCQkqcyA9ICd8JzsKKwkJCQkJd2hpbGUgKCpzICE9IE5VTCkKKwkJCQkJeworCQkJCQkgICAgaWYgKCpzID09ICdccicgfHwgKnMgPT0gJ1xuJykKKwkJCQkJCSpzID0gTlVMOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJCQkJICAgIC8qIFRoZSB0ZXh0IGlzIHV0Zi04IHdoZW4gYSBieXRlCisJCQkJCSAgICAgKiBhYm92ZSAxMjcgaXMgZm91bmQgYW5kIG5vCisJCQkJCSAgICAgKiBpbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgaXMgZm91bmQuCisJCQkJCSAgICAgKi8KKwkJCQkJICAgIGlmICgqcyA+PSAweDgwICYmIHRoaXNfdXRmICE9IEZBTFNFKQorCQkJCQkgICAgeworCQkJCQkJaW50CWw7CisKKwkJCQkJCXRoaXNfdXRmID0gVFJVRTsKKwkJCQkJCWwgPSB1dGZfcHRyMmxlbl9jaGVjayhzKTsKKwkJCQkJCWlmIChsID09IDEpCisJCQkJCQkgICAgdGhpc191dGYgPSBGQUxTRTsKKwkJCQkJCXMgKz0gbCAtIDE7CisJCQkJCSAgICB9CisjZW5kaWYKKwkJCQkJICAgICsrczsKKwkJCQkJfQorI2lmZGVmIEZFQVRfTUJZVEUKKwkJCQkJLyogVGhlIGhlbHAgZmlsZSBpcyBsYXRpbjEgb3IgdXRmLTg7CisJCQkJCSAqIGNvbnZlcnNpb24gdG8gdGhlIGN1cnJlbnQKKwkJCQkJICogJ2VuY29kaW5nJyBtYXkgYmUgcmVxdWlyZWQuICovCisJCQkJCXZjLnZjX3R5cGUgPSBDT05WX05PTkU7CisJCQkJCWNvbnZlcnRfc2V0dXAoJnZjLCAoY2hhcl91ICopKAorCQkJCQkJICAgIHRoaXNfdXRmID09IFRSVUUgPyAidXRmLTgiCisJCQkJCQkJICA6ICJsYXRpbjEiKSwgcF9lbmMpOworCQkJCQlpZiAodmMudmNfdHlwZSA9PSBDT05WX05PTkUpCisJCQkJCSAgICAvKiBObyBjb252ZXJzaW9uIG5lZWRlZC4gKi8KKwkJCQkJICAgIGNwID0gSU9idWZmOworCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJICAgIC8qIERvIHRoZSBjb252ZXJzaW9uLiAgSWYgaXQgZmFpbHMKKwkJCQkJICAgICAqIHVzZSB0aGUgdW5jb252ZXJ0ZWQgdGV4dC4gKi8KKwkJCQkJICAgIGNwID0gc3RyaW5nX2NvbnZlcnQoJnZjLCBJT2J1ZmYsCisJCQkJCQkJCQlOVUxMKTsKKwkJCQkJICAgIGlmIChjcCA9PSBOVUxMKQorCQkJCQkJY3AgPSBJT2J1ZmY7CisJCQkJCX0KKwkJCQkJY29udmVydF9zZXR1cCgmdmMsIE5VTEwsIE5VTEwpOworCisJCQkJCW1sX2FwcGVuZChsbnVtLCBjcCwgKGNvbG5yX1QpMCwgRkFMU0UpOworCQkJCQlpZiAoY3AgIT0gSU9idWZmKQorCQkJCQkgICAgdmltX2ZyZWUoY3ApOworI2Vsc2UKKwkJCQkJbWxfYXBwZW5kKGxudW0sIElPYnVmZiwgKGNvbG5yX1QpMCwKKwkJCQkJCQkJICAgICAgIEZBTFNFKTsKKyNlbmRpZgorCQkJCQkrK2xudW07CisJCQkJICAgIH0KKwkJCQkgICAgZmNsb3NlKGZkKTsKKwkJCQl9CisJCQkgICAgfQorCQkJICAgIEZyZWVXaWxkKGZjb3VudCwgZm5hbWVzKTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGlmIChtdXN0ZnJlZSkKKwkJCXZpbV9mcmVlKHJ0KTsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVhfRVhUUkEpIHx8IGRlZmluZWQoUFJPVE8pCitzdGF0aWMgdm9pZCBoZWxwdGFnc19vbmUgX19BUkdTKChjaGFyX3UgKmRpciwgY2hhcl91ICpleHQsIGNoYXJfdSAqbGFuZykpOworCisvKgorICogIjpoZWxwdGFncyIKKyAqLworICAgIHZvaWQKK2V4X2hlbHB0YWdzKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgZ2FycmF5X1QJZ2E7CisgICAgaW50CQlpLCBqOworICAgIGludAkJbGVuOworICAgIGNoYXJfdQlsYW5nWzJdOworICAgIGNoYXJfdQlleHRbNV07CisgICAgY2hhcl91CWZuYW1lWzhdOworICAgIGludAkJZmlsZWNvdW50OworICAgIGNoYXJfdQkqKmZpbGVzOworCisgICAgaWYgKCFtY2hfaXNkaXIoZWFwLT5hcmcpKQorICAgIHsKKwlFTVNHMihfKCJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIiksIGVhcC0+YXJnKTsKKwlyZXR1cm47CisgICAgfQorCisjaWZkZWYgRkVBVF9NVUxUSV9MQU5HCisgICAgLyogR2V0IGEgbGlzdCBvZiBhbGwgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeS4gKi8KKyAgICBTVFJDUFkoTmFtZUJ1ZmYsIGVhcC0+YXJnKTsKKyAgICBhZGRfcGF0aHNlcChOYW1lQnVmZik7CisgICAgU1RSQ0FUKE5hbWVCdWZmLCAiKiIpOworICAgIGlmIChnZW5fZXhwYW5kX3dpbGRjYXJkcygxLCAmTmFtZUJ1ZmYsICZmaWxlY291bnQsICZmaWxlcywKKwkJCQkJCSAgICBFV19GSUxFfEVXX1NJTEVOVCkgPT0gRkFJTAorCSAgICB8fCBmaWxlY291bnQgPT0gMCkKKyAgICB7CisJRU1TRzIoIkUxNTE6IE5vIG1hdGNoOiAlcyIsIE5hbWVCdWZmKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogR28gb3ZlciBhbGwgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSB0byBmaW5kIG91dCB3aGF0IGxhbmd1YWdlcyBhcmUKKyAgICAgKiBwcmVzZW50LiAqLworICAgIGdhX2luaXQyKCZnYSwgMSwgMTApOworICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlY291bnQ7ICsraSkKKyAgICB7CisJbGVuID0gU1RSTEVOKGZpbGVzW2ldKTsKKwlpZiAobGVuID4gNCkKKwl7CisJICAgIGlmIChTVFJJQ01QKGZpbGVzW2ldICsgbGVuIC0gNCwgIi50eHQiKSA9PSAwKQorCSAgICB7CisJCS8qICIudHh0IiAtPiBsYW5ndWFnZSAiZW4iICovCisJCWxhbmdbMF0gPSAnZSc7CisJCWxhbmdbMV0gPSAnbic7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoZmlsZXNbaV1bbGVuIC0gNF0gPT0gJy4nCisJCSAgICAmJiBBU0NJSV9JU0FMUEhBKGZpbGVzW2ldW2xlbiAtIDNdKQorCQkgICAgJiYgQVNDSUlfSVNBTFBIQShmaWxlc1tpXVtsZW4gLSAyXSkKKwkJICAgICYmIFRPTE9XRVJfQVNDKGZpbGVzW2ldW2xlbiAtIDFdKSA9PSAneCcpCisJICAgIHsKKwkJLyogIi5hYngiIC0+IGxhbmd1YWdlICJhYiIgKi8KKwkJbGFuZ1swXSA9IFRPTE9XRVJfQVNDKGZpbGVzW2ldW2xlbiAtIDNdKTsKKwkJbGFuZ1sxXSA9IFRPTE9XRVJfQVNDKGZpbGVzW2ldW2xlbiAtIDJdKTsKKwkgICAgfQorCSAgICBlbHNlCisJCWNvbnRpbnVlOworCisJICAgIC8qIERpZCB3ZSBmaW5kIHRoaXMgbGFuZ3VhZ2UgYWxyZWFkeT8gKi8KKwkgICAgZm9yIChqID0gMDsgaiA8IGdhLmdhX2xlbjsgaiArPSAyKQorCQlpZiAoU1RSTkNNUChsYW5nLCAoKGNoYXJfdSAqKWdhLmdhX2RhdGEpICsgaiwgMikgPT0gMCkKKwkJICAgIGJyZWFrOworCSAgICBpZiAoaiA9PSBnYS5nYV9sZW4pCisJICAgIHsKKwkJLyogTmV3IGxhbmd1YWdlLCBhZGQgaXQuICovCisJCWlmIChnYV9ncm93KCZnYSwgMikgPT0gRkFJTCkKKwkJICAgIGJyZWFrOworCQkoKGNoYXJfdSAqKWdhLmdhX2RhdGEpW2dhLmdhX2xlbisrXSA9IGxhbmdbMF07CisJCSgoY2hhcl91ICopZ2EuZ2FfZGF0YSlbZ2EuZ2FfbGVuKytdID0gbGFuZ1sxXTsKKwkJZ2EuZ2Ffcm9vbSAtPSAyOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogTG9vcCBvdmVyIHRoZSBmb3VuZCBsYW5ndWFnZXMgdG8gZ2VuZXJhdGUgYSB0YWdzIGZpbGUgZm9yIGVhY2ggb25lLgorICAgICAqLworICAgIGZvciAoaiA9IDA7IGogPCBnYS5nYV9sZW47IGogKz0gMikKKyAgICB7CisJU1RSQ1BZKGZuYW1lLCAidGFncy14eCIpOworCWZuYW1lWzVdID0gKChjaGFyX3UgKilnYS5nYV9kYXRhKVtqXTsKKwlmbmFtZVs2XSA9ICgoY2hhcl91ICopZ2EuZ2FfZGF0YSlbaiArIDFdOworCWlmIChmbmFtZVs1XSA9PSAnZScgJiYgZm5hbWVbNl0gPT0gJ24nKQorCXsKKwkgICAgLyogRW5nbGlzaCBpcyBhbiBleGNlcHRpb246IHVzZSAiLnR4dCIgYW5kICJ0YWdzIi4gKi8KKwkgICAgZm5hbWVbNF0gPSBOVUw7CisJICAgIFNUUkNQWShleHQsICIudHh0Iik7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIExhbmd1YWdlICJhYiIgdXNlcyAiLmFieCIgYW5kICJ0YWdzLWFiIi4gKi8KKwkgICAgU1RSQ1BZKGV4dCwgIi54eHgiKTsKKwkgICAgZXh0WzFdID0gZm5hbWVbNV07CisJICAgIGV4dFsyXSA9IGZuYW1lWzZdOworCX0KKwloZWxwdGFnc19vbmUoZWFwLT5hcmcsIGV4dCwgZm5hbWUpOworICAgIH0KKworICAgIGdhX2NsZWFyKCZnYSk7CisgICAgRnJlZVdpbGQoZmlsZWNvdW50LCBmaWxlcyk7CisKKyNlbHNlCisgICAgLyogTm8gbGFuZ3VhZ2Ugc3VwcG9ydCwganVzdCB1c2UgIioudHh0IiBhbmQgInRhZ3MiLiAqLworICAgIGhlbHB0YWdzX29uZShlYXAtPmFyZywgKGNoYXJfdSAqKSIudHh0IiwgKGNoYXJfdSAqKSJ0YWdzIik7CisjZW5kaWYKK30KKworICAgIHN0YXRpYyB2b2lkCitoZWxwdGFnc19vbmUoZGlyLCBleHQsIHRhZ2ZuYW1lKQorICAgIGNoYXJfdQkqZGlyOwkgICAgLyogZG9jIGRpcmVjdG9yeSAqLworICAgIGNoYXJfdQkqZXh0OwkgICAgLyogc3VmZml4LCAiLnR4dCIsICIuaXR4IiwgIi5mcngiLCBldGMuICovCisgICAgY2hhcl91CSp0YWdmbmFtZTsgICAgLyogInRhZ3MiIGZvciBFbmdsaXNoLCAidGFncy1pdCIgZm9yIEl0YWxpYW4uICovCit7CisgICAgRklMRQkqZmRfdGFnczsKKyAgICBGSUxFCSpmZDsKKyAgICBnYXJyYXlfVAlnYTsKKyAgICBpbnQJCWZpbGVjb3VudDsKKyAgICBjaGFyX3UJKipmaWxlczsKKyAgICBjaGFyX3UJKnAxLCAqcDI7CisgICAgaW50CQlmaTsKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQlpOworICAgIGNoYXJfdQkqZm5hbWU7CisjIGlmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCXV0ZjggPSBNQVlCRTsKKyAgICBpbnQJCXRoaXNfdXRmODsKKyAgICBpbnQJCWZpcnN0bGluZTsKKyAgICBpbnQJCW1peCA9IEZBTFNFOwkvKiBkZXRlY3RlZCBtaXhlZCBlbmNvZGluZ3MgKi8KKyMgZW5kaWYKKworICAgIC8qCisgICAgICogRmluZCBhbGwgKi50eHQgZmlsZXMuCisgICAgICovCisgICAgU1RSQ1BZKE5hbWVCdWZmLCBkaXIpOworICAgIGFkZF9wYXRoc2VwKE5hbWVCdWZmKTsKKyAgICBTVFJDQVQoTmFtZUJ1ZmYsICIqIik7CisgICAgU1RSQ0FUKE5hbWVCdWZmLCBleHQpOworICAgIGlmIChnZW5fZXhwYW5kX3dpbGRjYXJkcygxLCAmTmFtZUJ1ZmYsICZmaWxlY291bnQsICZmaWxlcywKKwkJCQkJCSAgICBFV19GSUxFfEVXX1NJTEVOVCkgPT0gRkFJTAorCSAgICB8fCBmaWxlY291bnQgPT0gMCkKKyAgICB7CisJaWYgKCFnb3RfaW50KQorCSAgICBFTVNHMigiRTE1MTogTm8gbWF0Y2g6ICVzIiwgTmFtZUJ1ZmYpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE9wZW4gdGhlIHRhZ3MgZmlsZSBmb3Igd3JpdGluZy4KKyAgICAgKiBEbyB0aGlzIGJlZm9yZSBzY2FubmluZyB0aHJvdWdoIGFsbCB0aGUgZmlsZXMuCisgICAgICovCisgICAgU1RSQ1BZKE5hbWVCdWZmLCBkaXIpOworICAgIGFkZF9wYXRoc2VwKE5hbWVCdWZmKTsKKyAgICBTVFJDQVQoTmFtZUJ1ZmYsIHRhZ2ZuYW1lKTsKKyAgICBmZF90YWdzID0gZm9wZW4oKGNoYXIgKilOYW1lQnVmZiwgInciKTsKKyAgICBpZiAoZmRfdGFncyA9PSBOVUxMKQorICAgIHsKKwlFTVNHMihfKCJFMTUyOiBDYW5ub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIpLCBOYW1lQnVmZik7CisJRnJlZVdpbGQoZmlsZWNvdW50LCBmaWxlcyk7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgZ2VuZXJhdGluZyB0YWdzIGZvciAiJFZJTVJVTlRJTUUvZG9jIiBhZGQgdGhlICJoZWxwLXRhZ3MiIHRhZy4KKyAgICAgKi8KKyAgICBnYV9pbml0MigmZ2EsIChpbnQpc2l6ZW9mKGNoYXJfdSAqKSwgMTAwKTsKKyAgICBpZiAoZnVsbHBhdGhjbXAoKGNoYXJfdSAqKSIkVklNUlVOVElNRS9kb2MiLCBkaXIsIEZBTFNFKSA9PSBGUENfU0FNRSkKKyAgICB7CisJaWYgKGdhX2dyb3coJmdhLCAxKSA9PSBGQUlMKQorCSAgICBnb3RfaW50ID0gVFJVRTsKKwllbHNlCisJeworCSAgICBzID0gYWxsb2MoMzApOworCSAgICBpZiAocyA9PSBOVUxMKQorCQlnb3RfaW50ID0gVFJVRTsKKwkgICAgZWxzZQorCSAgICB7CisJCXNwcmludGYoKGNoYXIgKilzLCAiaGVscC10YWdzXHQlc1x0MVxuIiwgdGFnZm5hbWUpOworCQkoKGNoYXJfdSAqKilnYS5nYV9kYXRhKVtnYS5nYV9sZW5dID0gczsKKwkJKytnYS5nYV9sZW47CisJCS0tZ2EuZ2Ffcm9vbTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIEdvIG92ZXIgYWxsIHRoZSBmaWxlcyBhbmQgZXh0cmFjdCB0aGUgdGFncy4KKyAgICAgKi8KKyAgICBmb3IgKGZpID0gMDsgZmkgPCBmaWxlY291bnQgJiYgIWdvdF9pbnQ7ICsrZmkpCisgICAgeworCWZkID0gZm9wZW4oKGNoYXIgKilmaWxlc1tmaV0sICJyIik7CisJaWYgKGZkID09IE5VTEwpCisJeworCSAgICBFTVNHMihfKCJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIpLCBmaWxlc1tmaV0pOworCSAgICBjb250aW51ZTsKKwl9CisJZm5hbWUgPSBnZXR0YWlsKGZpbGVzW2ZpXSk7CisKKyMgaWZkZWYgRkVBVF9NQllURQorCWZpcnN0bGluZSA9IFRSVUU7CisjIGVuZGlmCisJd2hpbGUgKCF2aW1fZmdldHMoSU9idWZmLCBJT1NJWkUsIGZkKSAmJiAhZ290X2ludCkKKwl7CisjIGlmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGZpcnN0bGluZSkKKwkgICAgeworCQkvKiBEZXRlY3QgdXRmLTggZmlsZSBieSBhIG5vbi1BU0NJSSBjaGFyIGluIHRoZSBmaXJzdCBsaW5lLiAqLworCQl0aGlzX3V0ZjggPSBNQVlCRTsKKwkJZm9yIChzID0gSU9idWZmOyAqcyAhPSBOVUw7ICsrcykKKwkJICAgIGlmICgqcyA+PSAweDgwKQorCQkgICAgeworCQkJaW50IGw7CisKKwkJCXRoaXNfdXRmOCA9IFRSVUU7CisJCQlsID0gdXRmX3B0cjJsZW5fY2hlY2socyk7CisJCQlpZiAobCA9PSAxKQorCQkJeworCQkJICAgIC8qIElsbGVnYWwgVVRGLTggYnl0ZSBzZXF1ZW5jZS4gKi8KKwkJCSAgICB0aGlzX3V0ZjggPSBGQUxTRTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCXMgKz0gbCAtIDE7CisJCSAgICB9CisJCWlmICh0aGlzX3V0ZjggPT0gTUFZQkUpCSAgICAvKiBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMgZm91bmQgKi8KKwkJICAgIHRoaXNfdXRmOCA9IEZBTFNFOworCQlpZiAodXRmOCA9PSBNQVlCRSkJICAgIC8qIGZpcnN0IGZpbGUgKi8KKwkJICAgIHV0ZjggPSB0aGlzX3V0Zjg7CisJCWVsc2UgaWYgKHV0ZjggIT0gdGhpc191dGY4KQorCQl7CisJCSAgICBFTVNHMihfKCJFNjcwOiBNaXggb2YgaGVscCBmaWxlIGVuY29kaW5ncyB3aXRoaW4gYSBsYW5ndWFnZTogJXMiKSwgZmlsZXNbZmldKTsKKwkJICAgIG1peCA9ICFnb3RfaW50OworCQkgICAgZ290X2ludCA9IFRSVUU7CisJCX0KKwkJZmlyc3RsaW5lID0gRkFMU0U7CisJICAgIH0KKyMgZW5kaWYKKwkgICAgcDEgPSB2aW1fc3RyY2hyKElPYnVmZiwgJyonKTsJLyogZmluZCBmaXJzdCAnKicgKi8KKwkgICAgd2hpbGUgKHAxICE9IE5VTEwpCisJICAgIHsKKwkJcDIgPSB2aW1fc3RyY2hyKHAxICsgMSwgJyonKTsJLyogZmluZCBzZWNvbmQgJyonICovCisJCWlmIChwMiAhPSBOVUxMICYmIHAyID4gcDEgKyAxKQkvKiBza2lwICIqIiBhbmQgIioqIiAqLworCQl7CisJCSAgICBmb3IgKHMgPSBwMSArIDE7IHMgPCBwMjsgKytzKQorCQkJaWYgKCpzID09ICcgJyB8fCAqcyA9PSAnXHQnIHx8ICpzID09ICd8JykKKwkJCSAgICBicmVhazsKKworCQkgICAgLyoKKwkJICAgICAqIE9ubHkgYWNjZXB0IGEgKnRhZyogd2hlbiBpdCBjb25zaXN0cyBvZiB2YWxpZAorCQkgICAgICogY2hhcmFjdGVycywgdGhlcmUgaXMgd2hpdGUgc3BhY2UgYmVmb3JlIGl0IGFuZCBpcworCQkgICAgICogZm9sbG93ZWQgYnkgYSB3aGl0ZSBjaGFyYWN0ZXIgb3IgZW5kLW9mLWxpbmUuCisJCSAgICAgKi8KKwkJICAgIGlmIChzID09IHAyCisJCQkgICAgJiYgKHAxID09IElPYnVmZiB8fCBwMVstMV0gPT0gJyAnIHx8IHAxWy0xXSA9PSAnXHQnKQorCQkJICAgICYmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiIFx0XG5cciIsIHNbMV0pICE9IE5VTEwKKwkJCQl8fCBzWzFdID09ICdcMCcpKQorCQkgICAgeworCQkJKnAyID0gJ1wwJzsKKwkJCSsrcDE7CisJCQlpZiAoZ2FfZ3JvdygmZ2EsIDEpID09IEZBSUwpCisJCQl7CisJCQkgICAgZ290X2ludCA9IFRSVUU7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQlzID0gYWxsb2MoKHVuc2lnbmVkKShwMiAtIHAxICsgU1RSTEVOKGZuYW1lKSArIDIpKTsKKwkJCWlmIChzID09IE5VTEwpCisJCQl7CisJCQkgICAgZ290X2ludCA9IFRSVUU7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQkoKGNoYXJfdSAqKilnYS5nYV9kYXRhKVtnYS5nYV9sZW5dID0gczsKKwkJCSsrZ2EuZ2FfbGVuOworCQkJLS1nYS5nYV9yb29tOworCQkJc3ByaW50ZigoY2hhciAqKXMsICIlc1x0JXMiLCBwMSwgZm5hbWUpOworCisJCQkvKiBmaW5kIG5leHQgJyonICovCisJCQlwMiA9IHZpbV9zdHJjaHIocDIgKyAxLCAnKicpOworCQkgICAgfQorCQl9CisJCXAxID0gcDI7CisJICAgIH0KKwkgICAgbGluZV9icmVha2NoZWNrKCk7CisJfQorCisJZmNsb3NlKGZkKTsKKyAgICB9CisKKyAgICBGcmVlV2lsZChmaWxlY291bnQsIGZpbGVzKTsKKworICAgIGlmICghZ290X2ludCkKKyAgICB7CisJLyoKKwkgKiBTb3J0IHRoZSB0YWdzLgorCSAqLworCXNvcnRfc3RyaW5ncygoY2hhcl91ICoqKWdhLmdhX2RhdGEsIGdhLmdhX2xlbik7CisKKwkvKgorCSAqIENoZWNrIGZvciBkdXBsaWNhdGVzLgorCSAqLworCWZvciAoaSA9IDE7IGkgPCBnYS5nYV9sZW47ICsraSkKKwl7CisJICAgIHAxID0gKChjaGFyX3UgKiopZ2EuZ2FfZGF0YSlbaSAtIDFdOworCSAgICBwMiA9ICgoY2hhcl91ICoqKWdhLmdhX2RhdGEpW2ldOworCSAgICB3aGlsZSAoKnAxID09ICpwMikKKwkgICAgeworCQlpZiAoKnAyID09ICdcdCcpCisJCXsKKwkJICAgICpwMiA9IE5VTDsKKwkJICAgIHNwcmludGYoKGNoYXIgKilOYW1lQnVmZiwKKwkJCSAgICBfKCJFMTU0OiBEdXBsaWNhdGUgdGFnIFwiJXNcIiBpbiBmaWxlICVzLyVzIiksCisJCQkJICAgICAoKGNoYXJfdSAqKilnYS5nYV9kYXRhKVtpXSwgZGlyLCBwMiArIDEpOworCQkgICAgRU1TRyhOYW1lQnVmZik7CisJCSAgICAqcDIgPSAnXHQnOworCQkgICAgYnJlYWs7CisJCX0KKwkJKytwMTsKKwkJKytwMjsKKwkgICAgfQorCX0KKworIyBpZmRlZiBGRUFUX01CWVRFCisJaWYgKHV0ZjggPT0gVFJVRSkKKwkgICAgZnByaW50ZihmZF90YWdzLCAiIV9UQUdfRklMRV9FTkNPRElOR1x0dXRmLThcdC8vXG4iKTsKKyMgZW5kaWYKKworCS8qCisJICogV3JpdGUgdGhlIHRhZ3MgaW50byB0aGUgZmlsZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ2EuZ2FfbGVuOyArK2kpCisJeworCSAgICBzID0gKChjaGFyX3UgKiopZ2EuZ2FfZGF0YSlbaV07CisJICAgIGlmIChTVFJOQ01QKHMsICJoZWxwLXRhZ3MiLCA5KSA9PSAwKQorCQkvKiBoZWxwLXRhZ3MgZW50cnkgd2FzIGFkZGVkIGluIGZvcm1hdHRlZCBmb3JtICovCisJCWZwcmludGYoZmRfdGFncywgKGNoYXIgKilzKTsKKwkgICAgZWxzZQorCSAgICB7CisJCWZwcmludGYoZmRfdGFncywgIiVzXHQvKiIsIHMpOworCQlmb3IgKHAxID0gczsgKnAxICE9ICdcdCc7ICsrcDEpCisJCXsKKwkJICAgIC8qIGluc2VydCBiYWNrc2xhc2ggYmVmb3JlICdcXCcgYW5kICcvJyAqLworCQkgICAgaWYgKCpwMSA9PSAnXFwnIHx8ICpwMSA9PSAnLycpCisJCQlwdXRjKCdcXCcsIGZkX3RhZ3MpOworCQkgICAgcHV0YygqcDEsIGZkX3RhZ3MpOworCQl9CisJCWZwcmludGYoZmRfdGFncywgIipcbiIpOworCSAgICB9CisJfQorICAgIH0KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKG1peCkKKwlnb3RfaW50ID0gRkFMU0U7ICAgIC8qIGNvbnRpbnVlIHdpdGggb3RoZXIgbGFuZ3VhZ2VzICovCisjZW5kaWYKKworICAgIGZvciAoaSA9IDA7IGkgPCBnYS5nYV9sZW47ICsraSkKKwl2aW1fZnJlZSgoKGNoYXJfdSAqKilnYS5nYV9kYXRhKVtpXSk7CisgICAgZ2FfY2xlYXIoJmdhKTsKKyAgICBmY2xvc2UoZmRfdGFncyk7CSAgICAvKiB0aGVyZSBpcyBubyBjaGVjayBmb3IgYW4gZXJyb3IuLi4gKi8KK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1NJR05TKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogU3RydWN0IHRvIGhvbGQgdGhlIHNpZ24gcHJvcGVydGllcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc2lnbiBzaWduX1Q7CisKK3N0cnVjdCBzaWduCit7CisgICAgc2lnbl9UCSpzbl9uZXh0OwkvKiBuZXh0IHNpZ24gaW4gbGlzdCAqLworICAgIGludAkJc25fdHlwZW5yOwkvKiB0eXBlIG51bWJlciBvZiBzaWduIChuZWdhdGl2ZSBpZiBub3QgZXF1YWwKKwkJCQkgICB0byBuYW1lKSAqLworICAgIGNoYXJfdQkqc25fbmFtZTsJLyogbmFtZSBvZiBzaWduICovCisgICAgY2hhcl91CSpzbl9pY29uOwkvKiBuYW1lIG9mIHBpeG1hcCAqLworI2lmZGVmIEZFQVRfU0lHTl9JQ09OUworICAgIHZvaWQJKnNuX2ltYWdlOwkvKiBpY29uIGltYWdlICovCisjZW5kaWYKKyAgICBjaGFyX3UJKnNuX3RleHQ7CS8qIHRleHQgdXNlZCBpbnN0ZWFkIG9mIHBpeG1hcCAqLworICAgIGludAkJc25fbGluZV9obDsJLyogaGlnaGxpZ2h0IElEIGZvciBsaW5lICovCisgICAgaW50CQlzbl90ZXh0X2hsOwkvKiBoaWdobGlnaHQgSUQgZm9yIHRleHQgKi8KK307CisKKyNkZWZpbmUgTUFYX1RZUEVOUiAyNTUJCS8qIGRlcGVuZHMgb24gc2F0dHJfVCAqLworc3RhdGljIHNpZ25fVAkqZmlyc3Rfc2lnbiA9IE5VTEw7CitzdGF0aWMgaW50CWxhc3Rfc2lnbl90eXBlbnIgPSBNQVhfVFlQRU5SOwkvKiBpcyBkZWNyZW1lbnRlZCAqLworCitzdGF0aWMgdm9pZCBzaWduX2xpc3RfZGVmaW5lZCBfX0FSR1MoKHNpZ25fVCAqc3ApKTsKKworLyoKKyAqICI6c2lnbiIgY29tbWFuZAorICovCisgICAgdm9pZAorZXhfc2lnbihlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGNoYXJfdQkqYXJnID0gZWFwLT5hcmc7CisgICAgY2hhcl91CSpwOworICAgIGludAkJaWR4OworICAgIHNpZ25fVAkqc3A7CisgICAgc2lnbl9UCSpzcF9wcmV2OworICAgIGJ1Zl9UCSpidWY7CisgICAgc3RhdGljIGNoYXIJKmNtZHNbXSA9IHsKKwkJCSJkZWZpbmUiLAorI2RlZmluZSBTSUdOQ01EX0RFRklORQkwCisJCQkidW5kZWZpbmUiLAorI2RlZmluZSBTSUdOQ01EX1VOREVGSU5FIDEKKwkJCSJsaXN0IiwKKyNkZWZpbmUgU0lHTkNNRF9MSVNUCTIKKwkJCSJwbGFjZSIsCisjZGVmaW5lIFNJR05DTURfUExBQ0UJMworCQkJInVucGxhY2UiLAorI2RlZmluZSBTSUdOQ01EX1VOUExBQ0UJNAorCQkJImp1bXAiLAorI2RlZmluZSBTSUdOQ01EX0pVTVAJNQorI2RlZmluZSBTSUdOQ01EX0xBU1QJNgorICAgIH07CisKKyAgICAvKiBQYXJzZSB0aGUgc3ViY29tbWFuZC4gKi8KKyAgICBwID0gc2tpcHRvd2hpdGUoYXJnKTsKKyAgICBpZiAoKnAgIT0gTlVMKQorCSpwKysgPSBOVUw7CisgICAgZm9yIChpZHggPSAwOyA7ICsraWR4KQorICAgIHsKKwlpZiAoaWR4ID09IFNJR05DTURfTEFTVCkKKwl7CisJICAgIEVNU0cyKF8oIkUxNjA6IFVua25vd24gc2lnbiBjb21tYW5kOiAlcyIpLCBhcmcpOworCSAgICByZXR1cm47CisJfQorCWlmIChTVFJDTVAoYXJnLCBjbWRzW2lkeF0pID09IDApCisJICAgIGJyZWFrOworICAgIH0KKyAgICBhcmcgPSBza2lwd2hpdGUocCk7CisKKyAgICBpZiAoaWR4IDw9IFNJR05DTURfTElTVCkKKyAgICB7CisJLyoKKwkgKiBEZWZpbmUsIHVuZGVmaW5lIG9yIGxpc3Qgc2lnbnMuCisJICovCisJaWYgKGlkeCA9PSBTSUdOQ01EX0xJU1QgJiYgKmFyZyA9PSBOVUwpCisJeworCSAgICAvKiAiOnNpZ24gbGlzdCI6IGxpc3QgYWxsIGRlZmluZWQgc2lnbnMgKi8KKwkgICAgZm9yIChzcCA9IGZpcnN0X3NpZ247IHNwICE9IE5VTEw7IHNwID0gc3AtPnNuX25leHQpCisJCXNpZ25fbGlzdF9kZWZpbmVkKHNwKTsKKwl9CisJZWxzZSBpZiAoKmFyZyA9PSBOVUwpCisJICAgIEVNU0coXygiRTE1NjogTWlzc2luZyBzaWduIG5hbWUiKSk7CisJZWxzZQorCXsKKwkgICAgcCA9IHNraXB0b3doaXRlKGFyZyk7CisJICAgIGlmICgqcCAhPSBOVUwpCisJCSpwKysgPSBOVUw7CisJICAgIHNwX3ByZXYgPSBOVUxMOworCSAgICBmb3IgKHNwID0gZmlyc3Rfc2lnbjsgc3AgIT0gTlVMTDsgc3AgPSBzcC0+c25fbmV4dCkKKwkgICAgeworCQlpZiAoU1RSQ01QKHNwLT5zbl9uYW1lLCBhcmcpID09IDApCisJCSAgICBicmVhazsKKwkJc3BfcHJldiA9IHNwOworCSAgICB9CisJICAgIGlmIChpZHggPT0gU0lHTkNNRF9ERUZJTkUpCisJICAgIHsKKwkJLyogIjpzaWduIGRlZmluZSB7bmFtZX0gLi4uIjogZGVmaW5lIGEgc2lnbiAqLworCQlpZiAoc3AgPT0gTlVMTCkKKwkJeworCQkgICAgLyogQWxsb2NhdGUgYSBuZXcgc2lnbi4gKi8KKwkJICAgIHNwID0gKHNpZ25fVCAqKWFsbG9jX2NsZWFyKCh1bnNpZ25lZClzaXplb2Yoc2lnbl9UKSk7CisJCSAgICBpZiAoc3AgPT0gTlVMTCkKKwkJCXJldHVybjsKKwkJICAgIGlmIChzcF9wcmV2ID09IE5VTEwpCisJCQlmaXJzdF9zaWduID0gc3A7CisJCSAgICBlbHNlCisJCQlzcF9wcmV2LT5zbl9uZXh0ID0gc3A7CisJCSAgICBzcC0+c25fbmFtZSA9IHZpbV9zdHJuc2F2ZShhcmcsIChpbnQpKHAgLSBhcmcpKTsKKworCQkgICAgLyogSWYgdGhlIG5hbWUgaXMgYSBudW1iZXIgdXNlIHRoYXQgZm9yIHRoZSB0eXBlbnIsCisJCSAgICAgKiBvdGhlcndpc2UgdXNlIGEgbmVnYXRpdmUgbnVtYmVyLiAqLworCQkgICAgaWYgKFZJTV9JU0RJR0lUKCphcmcpKQorCQkJc3AtPnNuX3R5cGVuciA9IGF0b2koKGNoYXIgKilhcmcpOworCQkgICAgZWxzZQorCQkgICAgeworCQkJc2lnbl9UCSpscDsKKwkJCWludAlzdGFydCA9IGxhc3Rfc2lnbl90eXBlbnI7CisKKwkJCWZvciAobHAgPSBmaXJzdF9zaWduOyBscCAhPSBOVUxMOyBscCA9IGxwLT5zbl9uZXh0KQorCQkJeworCQkJICAgIGlmIChscC0+c25fdHlwZW5yID09IGxhc3Rfc2lnbl90eXBlbnIpCisJCQkgICAgeworCQkJCS0tbGFzdF9zaWduX3R5cGVucjsKKwkJCQlpZiAobGFzdF9zaWduX3R5cGVuciA9PSAwKQorCQkJCSAgICBsYXN0X3NpZ25fdHlwZW5yID0gTUFYX1RZUEVOUjsKKwkJCQlpZiAobGFzdF9zaWduX3R5cGVuciA9PSBzdGFydCkKKwkJCQl7CisJCQkJICAgIEVNU0coXygiRTYxMjogVG9vIG1hbnkgc2lnbnMgZGVmaW5lZCIpKTsKKwkJCQkgICAgcmV0dXJuOworCQkJCX0KKwkJCQlscCA9IGZpcnN0X3NpZ247CisJCQkJY29udGludWU7CisJCQkgICAgfQorCQkJfQorCisJCQlzcC0+c25fdHlwZW5yID0gbGFzdF9zaWduX3R5cGVuci0tOworCQkJaWYgKGxhc3Rfc2lnbl90eXBlbnIgPT0gMCkKKwkJCSAgICBsYXN0X3NpZ25fdHlwZW5yID0gTUFYX1RZUEVOUjsgLyogd3JhcCBhcm91bmQgKi8KKwkJICAgIH0KKwkJfQorCisJCS8qIHNldCB2YWx1ZXMgZm9yIGEgZGVmaW5lZCBzaWduLiAqLworCQlmb3IgKDs7KQorCQl7CisJCSAgICBhcmcgPSBza2lwd2hpdGUocCk7CisJCSAgICBpZiAoKmFyZyA9PSBOVUwpCisJCQlicmVhazsKKwkJICAgIHAgPSBza2lwdG93aGl0ZV9lc2MoYXJnKTsKKwkJICAgIGlmIChTVFJOQ01QKGFyZywgImljb249IiwgNSkgPT0gMCkKKwkJICAgIHsKKwkJCWFyZyArPSA1OworCQkJdmltX2ZyZWUoc3AtPnNuX2ljb24pOworCQkJc3AtPnNuX2ljb24gPSB2aW1fc3RybnNhdmUoYXJnLCAoaW50KShwIC0gYXJnKSk7CisJCQliYWNrc2xhc2hfaGFsdmUoc3AtPnNuX2ljb24pOworI2lmZGVmIEZFQVRfU0lHTl9JQ09OUworCQkJaWYgKGd1aS5pbl91c2UpCisJCQl7CisJCQkgICAgb3V0X2ZsdXNoKCk7CisJCQkgICAgaWYgKHNwLT5zbl9pbWFnZSAhPSBOVUxMKQorCQkJCWd1aV9tY2hfZGVzdHJveV9zaWduKHNwLT5zbl9pbWFnZSk7CisJCQkgICAgc3AtPnNuX2ltYWdlID0gZ3VpX21jaF9yZWdpc3Rlcl9zaWduKHNwLT5zbl9pY29uKTsKKwkJCX0KKyNlbmRpZgorCQkgICAgfQorCQkgICAgZWxzZSBpZiAoU1RSTkNNUChhcmcsICJ0ZXh0PSIsIDUpID09IDApCisJCSAgICB7CisJCQljaGFyX3UJKnM7CisJCQlpbnQJY2VsbHM7CisJCQlpbnQJbGVuOworCisJCQlhcmcgKz0gNTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkvKiBDb3VudCBjZWxscyBhbmQgY2hlY2sgZm9yIG5vbi1wcmludGFibGUgY2hhcnMgKi8KKwkJCWlmIChoYXNfbWJ5dGUpCisJCQl7CisJCQkgICAgY2VsbHMgPSAwOworCQkJICAgIGZvciAocyA9IGFyZzsgcyA8IHA7IHMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKSkKKwkJCSAgICB7CisJCQkJaWYgKCF2aW1faXNwcmludGMoKCptYl9wdHIyY2hhcikocykpKQorCQkJCSAgICBicmVhazsKKwkJCQljZWxscyArPSAoKm1iX3B0cjJjZWxscykocyk7CisJCQkgICAgfQorCQkJfQorCQkJZWxzZQorI2VuZGlmCisJCQl7CisJCQkgICAgZm9yIChzID0gYXJnOyBzIDwgcDsgKytzKQorCQkJCWlmICghdmltX2lzcHJpbnRjKCpzKSkKKwkJCQkgICAgYnJlYWs7CisJCQkgICAgY2VsbHMgPSBzIC0gYXJnOworCQkJfQorCQkJLyogQ3VycmVudGx5IG11c3QgYmUgb25lIG9yIHR3byBkaXNwbGF5IGNlbGxzICovCisJCQlpZiAocyAhPSBwIHx8IGNlbGxzIDwgMSB8fCBjZWxscyA+IDIpCisJCQl7CisJCQkgICAgKnAgPSBOVUw7CisJCQkgICAgRU1TRzIoXygiRTIzOTogSW52YWxpZCBzaWduIHRleHQ6ICVzIiksIGFyZyk7CisJCQkgICAgcmV0dXJuOworCQkJfQorCisJCQl2aW1fZnJlZShzcC0+c25fdGV4dCk7CisJCQkvKiBBbGxvY2F0ZSBvbmUgYnl0ZSBtb3JlIGlmIHdlIG5lZWQgdG8gcGFkIHVwCisJCQkgKiB3aXRoIGEgc3BhY2UuICovCisJCQlsZW4gPSBwIC0gYXJnICsgKChjZWxscyA9PSAxKSA/IDEgOiAwKTsKKwkJCXNwLT5zbl90ZXh0ID0gdmltX3N0cm5zYXZlKGFyZywgbGVuKTsKKworCQkJaWYgKHNwLT5zbl90ZXh0ICE9IE5VTEwgJiYgY2VsbHMgPT0gMSkKKwkJCSAgICBTVFJDUFkoc3AtPnNuX3RleHQgKyBsZW4gLSAxLCAiICIpOworCQkgICAgfQorCQkgICAgZWxzZSBpZiAoU1RSTkNNUChhcmcsICJsaW5laGw9IiwgNykgPT0gMCkKKwkJICAgIHsKKwkJCWFyZyArPSA3OworCQkJc3AtPnNuX2xpbmVfaGwgPSBzeW5fY2hlY2tfZ3JvdXAoYXJnLCAoaW50KShwIC0gYXJnKSk7CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChTVFJOQ01QKGFyZywgInRleHRobD0iLCA3KSA9PSAwKQorCQkgICAgeworCQkJYXJnICs9IDc7CisJCQlzcC0+c25fdGV4dF9obCA9IHN5bl9jaGVja19ncm91cChhcmcsIChpbnQpKHAgLSBhcmcpKTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCUVNU0cyKF8oZV9pbnZhcmcyKSwgYXJnKTsKKwkJCXJldHVybjsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGVsc2UgaWYgKHNwID09IE5VTEwpCisJCUVNU0cyKF8oIkUxNTU6IFVua25vd24gc2lnbjogJXMiKSwgYXJnKTsKKwkgICAgZWxzZSBpZiAoaWR4ID09IFNJR05DTURfTElTVCkKKwkJLyogIjpzaWduIGxpc3Qge25hbWV9IiAqLworCQlzaWduX2xpc3RfZGVmaW5lZChzcCk7CisJICAgIGVsc2UKKwkgICAgeworCQkvKiAiOnNpZ24gdW5kZWZpbmUge25hbWV9IiAqLworCQl2aW1fZnJlZShzcC0+c25fbmFtZSk7CisJCXZpbV9mcmVlKHNwLT5zbl9pY29uKTsKKyNpZmRlZiBGRUFUX1NJR05fSUNPTlMKKwkJaWYgKHNwLT5zbl9pbWFnZSAhPSBOVUxMKQorCQl7CisJCSAgICBvdXRfZmx1c2goKTsKKwkJICAgIGd1aV9tY2hfZGVzdHJveV9zaWduKHNwLT5zbl9pbWFnZSk7CisJCX0KKyNlbmRpZgorCQl2aW1fZnJlZShzcC0+c25fdGV4dCk7CisJCWlmIChzcF9wcmV2ID09IE5VTEwpCisJCSAgICBmaXJzdF9zaWduID0gc3AtPnNuX25leHQ7CisJCWVsc2UKKwkJICAgIHNwX3ByZXYtPnNuX25leHQgPSBzcC0+c25fbmV4dDsKKwkJdmltX2ZyZWUoc3ApOworCSAgICB9CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCWludAkJaWQgPSAtMTsKKwlsaW5lbnJfVAlsbnVtID0gLTE7CisJY2hhcl91CQkqc2lnbl9uYW1lID0gTlVMTDsKKwljaGFyX3UJCSphcmcxOworCisJaWYgKCphcmcgPT0gTlVMKQorCXsKKwkgICAgaWYgKGlkeCA9PSBTSUdOQ01EX1BMQUNFKQorCSAgICB7CisJCS8qICI6c2lnbiBwbGFjZSI6IGxpc3QgcGxhY2VkIHNpZ25zIGluIGFsbCBidWZmZXJzICovCisJCXNpZ25fbGlzdF9wbGFjZWQoTlVMTCk7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoaWR4ID09IFNJR05DTURfVU5QTEFDRSkKKwkgICAgeworCQkvKiAiOnNpZ24gdW5wbGFjZSI6IHJlbW92ZSBwbGFjZWQgc2lnbiBhdCBjdXJzb3IgKi8KKwkJaWQgPSBidWZfZmluZHNpZ25faWQoY3Vyd2luLT53X2J1ZmZlciwgY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKwkJaWYgKGlkID4gMCkKKwkJeworCQkgICAgYnVmX2RlbHNpZ24oY3Vyd2luLT53X2J1ZmZlciwgaWQpOworCQkgICAgdXBkYXRlX2RlYnVnX3NpZ24oY3Vyd2luLT53X2J1ZmZlciwgY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKwkJfQorCQllbHNlCisJCSAgICBFTVNHKF8oIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiKSk7CisJICAgIH0KKwkgICAgZWxzZQorCQlFTVNHKF8oZV9hcmdyZXEpKTsKKwkgICAgcmV0dXJuOworCX0KKworCWlmIChpZHggPT0gU0lHTkNNRF9VTlBMQUNFICYmIGFyZ1swXSA9PSAnKicgJiYgYXJnWzFdID09IE5VTCkKKwl7CisJICAgIC8qICI6c2lnbiB1bnBsYWNlICoiOiByZW1vdmUgYWxsIHBsYWNlZCBzaWducyAqLworCSAgICBidWZfZGVsZXRlX2FsbF9zaWducygpOworCSAgICByZXR1cm47CisJfQorCisJLyogZmlyc3QgYXJnIGNvdWxkIGJlIHBsYWNlZCBzaWduIGlkICovCisJYXJnMSA9IGFyZzsKKwlpZiAoVklNX0lTRElHSVQoKmFyZykpCisJeworCSAgICBpZCA9IGdldGRpZ2l0cygmYXJnKTsKKwkgICAgaWYgKCF2aW1faXN3aGl0ZSgqYXJnKSAmJiAqYXJnICE9IE5VTCkKKwkgICAgeworCQlpZCA9IC0xOworCQlhcmcgPSBhcmcxOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlhcmcgPSBza2lwd2hpdGUoYXJnKTsKKwkJaWYgKGlkeCA9PSBTSUdOQ01EX1VOUExBQ0UgJiYgKmFyZyA9PSBOVUwpCisJCXsKKwkJICAgIC8qICI6c2lnbiB1bnBsYWNlIHtpZH0iOiByZW1vdmUgcGxhY2VkIHNpZ24gYnkgbnVtYmVyICovCisJCSAgICBmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTDsgYnVmID0gYnVmLT5iX25leHQpCisJCQlpZiAoKGxudW0gPSBidWZfZGVsc2lnbihidWYsIGlkKSkgIT0gMCkKKwkJCSAgICB1cGRhdGVfZGVidWdfc2lnbihidWYsIGxudW0pOworCQkgICAgcmV0dXJuOworCQl9CisJICAgIH0KKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBsaW5lPXtsbnVtfSBuYW1lPXtuYW1lfSBhbmQgZmlsZT17Zm5hbWV9IG9yIGJ1ZmZlcj17bnJ9LgorCSAqIExlYXZlICJhcmciIHBvaW50aW5nIHRvIHtmbmFtZX0uCisJICovCisJZm9yICg7OykKKwl7CisJICAgIGlmIChTVFJOQ01QKGFyZywgImxpbmU9IiwgNSkgPT0gMCkKKwkgICAgeworCQlhcmcgKz0gNTsKKwkJbG51bSA9IGF0b2koKGNoYXIgKilhcmcpOworCQlhcmcgPSBza2lwdG93aGl0ZShhcmcpOworCSAgICB9CisJICAgIGVsc2UgaWYgKFNUUk5DTVAoYXJnLCAibmFtZT0iLCA1KSA9PSAwKQorCSAgICB7CisJCWFyZyArPSA1OworCQlzaWduX25hbWUgPSBhcmc7CisJCWFyZyA9IHNraXB0b3doaXRlKGFyZyk7CisJCWlmICgqYXJnICE9IE5VTCkKKwkJICAgICphcmcrKyA9IE5VTDsKKwkgICAgfQorCSAgICBlbHNlIGlmIChTVFJOQ01QKGFyZywgImZpbGU9IiwgNSkgPT0gMCkKKwkgICAgeworCQlhcmcgKz0gNTsKKwkJYnVmID0gYnVmbGlzdF9maW5kbmFtZShhcmcpOworCQlicmVhazsKKwkgICAgfQorCSAgICBlbHNlIGlmIChTVFJOQ01QKGFyZywgImJ1ZmZlcj0iLCA3KSA9PSAwKQorCSAgICB7CisJCWFyZyArPSA3OworCQlidWYgPSBidWZsaXN0X2ZpbmRucigoaW50KWdldGRpZ2l0cygmYXJnKSk7CisJCWlmICgqc2tpcHdoaXRlKGFyZykgIT0gTlVMKQorCQkgICAgRU1TRyhfKGVfdHJhaWxpbmcpKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCUVNU0coXyhlX2ludmFyZykpOworCQlyZXR1cm47CisJICAgIH0KKwkgICAgYXJnID0gc2tpcHdoaXRlKGFyZyk7CisJfQorCisJaWYgKGJ1ZiA9PSBOVUxMKQorCXsKKwkgICAgRU1TRzIoXygiRTE1ODogSW52YWxpZCBidWZmZXIgbmFtZTogJXMiKSwgYXJnKTsKKwl9CisJZWxzZSBpZiAoaWQgPD0gMCkKKwl7CisJICAgIGlmIChsbnVtID49IDAgfHwgc2lnbl9uYW1lICE9IE5VTEwpCisJCUVNU0coXyhlX2ludmFyZykpOworCSAgICBlbHNlCisJCS8qICI6c2lnbiBwbGFjZSBmaWxlPXtmbmFtZX0iOiBsaXN0IHBsYWNlZCBzaWducyBpbiBvbmUgZmlsZSAqLworCQlzaWduX2xpc3RfcGxhY2VkKGJ1Zik7CisJfQorCWVsc2UgaWYgKGlkeCA9PSBTSUdOQ01EX0pVTVApCisJeworCSAgICAvKiAiOnNpZ24ganVtcCB7aWR9IGZpbGU9e2ZuYW1lfSIgKi8KKwkgICAgaWYgKGxudW0gPj0gMCB8fCBzaWduX25hbWUgIT0gTlVMTCkKKwkJRU1TRyhfKGVfaW52YXJnKSk7CisJICAgIGVsc2UgaWYgKChsbnVtID0gYnVmX2ZpbmRzaWduKGJ1ZiwgaWQpKSA+IDApCisJICAgIHsJCQkJLyogZ290byBhIHNpZ24gLi4uICovCisJCWlmIChidWZfanVtcF9vcGVuX3dpbihidWYpICE9IE5VTEwpCisJCXsJCQkvKiAuLi4gaW4gYSBjdXJyZW50IHdpbmRvdyAqLworCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbG51bTsKKwkJICAgIGNoZWNrX2N1cnNvcl9sbnVtKCk7CisJCSAgICBiZWdpbmxpbmUoQkxfV0hJVEUpOworCQl9CisJCWVsc2UKKwkJewkJCS8qIC4uLiBub3QgY3VycmVudGx5IGluIGEgd2luZG93ICovCisJCSAgICBjaGFyX3UJKmNtZDsKKworCQkgICAgY21kID0gYWxsb2MoKHVuc2lnbmVkKVNUUkxFTihidWYtPmJfZm5hbWUpICsgMjUpOworCQkgICAgaWYgKGNtZCA9PSBOVUxMKQorCQkJcmV0dXJuOworCQkgICAgc3ByaW50ZigoY2hhciAqKWNtZCwgImUgKyVsZCAlcyIsIChsb25nKWxudW0sIGJ1Zi0+Yl9mbmFtZSk7CisJCSAgICBkb19jbWRsaW5lX2NtZChjbWQpOworCQkgICAgdmltX2ZyZWUoY21kKTsKKwkJfQorI2lmZGVmIEZFQVRfRk9MRElORworCQlmb2xkT3BlbkN1cnNvcigpOworI2VuZGlmCisJICAgIH0KKwkgICAgZWxzZQorCQlFTVNHTihfKCJFMTU3OiBJbnZhbGlkIHNpZ24gSUQ6ICVsZCIpLCBpZCk7CisJfQorCWVsc2UgaWYgKGlkeCA9PSBTSUdOQ01EX1VOUExBQ0UpCisJeworCSAgICAvKiAiOnNpZ24gdW5wbGFjZSB7aWR9IGZpbGU9e2ZuYW1lfSIgKi8KKwkgICAgaWYgKGxudW0gPj0gMCB8fCBzaWduX25hbWUgIT0gTlVMTCkKKwkJRU1TRyhfKGVfaW52YXJnKSk7CisJICAgIGVsc2UKKwkgICAgeworCQlsbnVtID0gYnVmX2RlbHNpZ24oYnVmLCBpZCk7CisJCXVwZGF0ZV9kZWJ1Z19zaWduKGJ1ZiwgbG51bSk7CisJICAgIH0KKwl9CisJICAgIC8qIGlkeCA9PSBTSUdOQ01EX1BMQUNFICovCisJZWxzZSBpZiAoc2lnbl9uYW1lICE9IE5VTEwpCisJeworCSAgICBmb3IgKHNwID0gZmlyc3Rfc2lnbjsgc3AgIT0gTlVMTDsgc3AgPSBzcC0+c25fbmV4dCkKKwkJaWYgKFNUUkNNUChzcC0+c25fbmFtZSwgc2lnbl9uYW1lKSA9PSAwKQorCQkgICAgYnJlYWs7CisJICAgIGlmIChzcCA9PSBOVUxMKQorCSAgICB7CisJCUVNU0cyKF8oIkUxNTU6IFVua25vd24gc2lnbjogJXMiKSwgc2lnbl9uYW1lKTsKKwkJcmV0dXJuOworCSAgICB9CisJICAgIGlmIChsbnVtID4gMCkKKwkJLyogIjpzaWduIHBsYWNlIHtpZH0gbGluZT17bG51bX0gbmFtZT17bmFtZX0gZmlsZT17Zm5hbWV9IjoKKwkJICogcGxhY2UgYSBzaWduICovCisJCWJ1Zl9hZGRzaWduKGJ1ZiwgaWQsIGxudW0sIHNwLT5zbl90eXBlbnIpOworCSAgICBlbHNlCisJCS8qICI6c2lnbiBwbGFjZSB7aWR9IGZpbGU9e2ZuYW1lfSI6IGNoYW5nZSBzaWduIHR5cGUgKi8KKwkJbG51bSA9IGJ1Zl9jaGFuZ2Vfc2lnbl90eXBlKGJ1ZiwgaWQsIHNwLT5zbl90eXBlbnIpOworCSAgICB1cGRhdGVfZGVidWdfc2lnbihidWYsIGxudW0pOworCX0KKwllbHNlCisJICAgIEVNU0coXyhlX2ludmFyZykpOworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9TSUdOX0lDT05TKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEFsbG9jYXRlIHRoZSBpY29ucy4gIENhbGxlZCB3aGVuIHRoZSBHVUkgaGFzIHN0YXJ0ZWQuICBBbGxvd3MgZGVmaW5pbmcKKyAqIHNpZ25zIGJlZm9yZSBpdCBzdGFydHMuCisgKi8KKyAgICB2b2lkCitzaWduX2d1aV9zdGFydGVkKCkKK3sKKyAgICBzaWduX1QJKnNwOworCisgICAgZm9yIChzcCA9IGZpcnN0X3NpZ247IHNwICE9IE5VTEw7IHNwID0gc3AtPnNuX25leHQpCisJaWYgKHNwLT5zbl9pY29uICE9IE5VTEwpCisJICAgIHNwLT5zbl9pbWFnZSA9IGd1aV9tY2hfcmVnaXN0ZXJfc2lnbihzcC0+c25faWNvbik7Cit9CisjZW5kaWYKKworLyoKKyAqIExpc3Qgb25lIHNpZ24uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc2lnbl9saXN0X2RlZmluZWQoc3ApCisgICAgc2lnbl9UCSpzcDsKK3sKKyAgICBjaGFyX3UJKnA7CisKKyAgICBzbXNnKChjaGFyX3UgKikic2lnbiAlcyIsIHNwLT5zbl9uYW1lKTsKKyAgICBpZiAoc3AtPnNuX2ljb24gIT0gTlVMTCkKKyAgICB7CisJTVNHX1BVVFMoIiBpY29uPSIpOworCW1zZ19vdXR0cmFucyhzcC0+c25faWNvbik7CisjaWZkZWYgRkVBVF9TSUdOX0lDT05TCisJaWYgKHNwLT5zbl9pbWFnZSA9PSBOVUxMKQorCSAgICBNU0dfUFVUUyhfKCIgKE5PVCBGT1VORCkiKSk7CisjZWxzZQorCU1TR19QVVRTKF8oIiAobm90IHN1cHBvcnRlZCkiKSk7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKHNwLT5zbl90ZXh0ICE9IE5VTEwpCisgICAgeworCU1TR19QVVRTKCIgdGV4dD0iKTsKKwltc2dfb3V0dHJhbnMoc3AtPnNuX3RleHQpOworICAgIH0KKyAgICBpZiAoc3AtPnNuX2xpbmVfaGwgPiAwKQorICAgIHsKKwlNU0dfUFVUUygiIGxpbmVobD0iKTsKKwlwID0gZ2V0X2hpZ2hsaWdodF9uYW1lKE5VTEwsIHNwLT5zbl9saW5lX2hsIC0gMSk7CisJaWYgKHAgPT0gTlVMTCkKKwkgICAgTVNHX1BVVFMoIk5PTkUiKTsKKwllbHNlCisJICAgIG1zZ19wdXRzKHApOworICAgIH0KKyAgICBpZiAoc3AtPnNuX3RleHRfaGwgPiAwKQorICAgIHsKKwlNU0dfUFVUUygiIHRleHRobD0iKTsKKwlwID0gZ2V0X2hpZ2hsaWdodF9uYW1lKE5VTEwsIHNwLT5zbl90ZXh0X2hsIC0gMSk7CisJaWYgKHAgPT0gTlVMTCkKKwkgICAgTVNHX1BVVFMoIk5PTkUiKTsKKwllbHNlCisJICAgIG1zZ19wdXRzKHApOworICAgIH0KK30KKworLyoKKyAqIEdldCBoaWdobGlnaHRpbmcgYXR0cmlidXRlIGZvciBzaWduICJ0eXBlbnIiLgorICogSWYgImxpbmUiIGlzIFRSVUU6IGxpbmUgaGlnaGwsIGlmIEZBTFNFOiB0ZXh0IGhpZ2hsLgorICovCisgICAgaW50CitzaWduX2dldF9hdHRyKHR5cGVuciwgbGluZSkKKyAgICBpbnQJCXR5cGVucjsKKyAgICBpbnQJCWxpbmU7Cit7CisgICAgc2lnbl9UCSpzcDsKKworICAgIGZvciAoc3AgPSBmaXJzdF9zaWduOyBzcCAhPSBOVUxMOyBzcCA9IHNwLT5zbl9uZXh0KQorCWlmIChzcC0+c25fdHlwZW5yID09IHR5cGVucikKKwl7CisJICAgIGlmIChsaW5lKQorCSAgICB7CisJCWlmIChzcC0+c25fbGluZV9obCA+IDApCisJCSAgICByZXR1cm4gc3luX2lkMmF0dHIoc3AtPnNuX2xpbmVfaGwpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoc3AtPnNuX3RleHRfaGwgPiAwKQorCQkgICAgcmV0dXJuIHN5bl9pZDJhdHRyKHNwLT5zbl90ZXh0X2hsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgdGV4dCBtYXJrIGZvciBzaWduICJ0eXBlbnIiLgorICogUmV0dXJucyBOVUxMIGlmIHRoZXJlIGlzbid0IG9uZS4KKyAqLworICAgIGNoYXJfdSAqCitzaWduX2dldF90ZXh0KHR5cGVucikKKyAgICBpbnQJCXR5cGVucjsKK3sKKyAgICBzaWduX1QJKnNwOworCisgICAgZm9yIChzcCA9IGZpcnN0X3NpZ247IHNwICE9IE5VTEw7IHNwID0gc3AtPnNuX25leHQpCisJaWYgKHNwLT5zbl90eXBlbnIgPT0gdHlwZW5yKQorCSAgICByZXR1cm4gc3AtPnNuX3RleHQ7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfU0lHTl9JQ09OUykgfHwgZGVmaW5lZChQUk9UTykKKyAgICB2b2lkICoKK3NpZ25fZ2V0X2ltYWdlKHR5cGVucikKKyAgICBpbnQJCXR5cGVucjsJCS8qIHRoZSBhdHRyaWJ1dGUgd2hpY2ggbWF5IGhhdmUgYSBzaWduICovCit7CisgICAgc2lnbl9UCSpzcDsKKworICAgIGZvciAoc3AgPSBmaXJzdF9zaWduOyBzcCAhPSBOVUxMOyBzcCA9IHNwLT5zbl9uZXh0KQorCWlmIChzcC0+c25fdHlwZW5yID09IHR5cGVucikKKwkgICAgcmV0dXJuIHNwLT5zbl9pbWFnZTsKKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisvKgorICogR2V0IHRoZSBuYW1lIG9mIGEgc2lnbiBieSBpdHMgdHlwZW5yLgorICovCisgICAgY2hhcl91ICoKK3NpZ25fdHlwZW5yMm5hbWUodHlwZW5yKQorICAgIGludAkJdHlwZW5yOworeworICAgIHNpZ25fVAkqc3A7CisKKyAgICBmb3IgKHNwID0gZmlyc3Rfc2lnbjsgc3AgIT0gTlVMTDsgc3AgPSBzcC0+c25fbmV4dCkKKwlpZiAoc3AtPnNuX3R5cGVuciA9PSB0eXBlbnIpCisJICAgIHJldHVybiBzcC0+c25fbmFtZTsKKyAgICByZXR1cm4gKGNoYXJfdSAqKV8oIltEZWxldGVkXSIpOworfQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9HVUkpIHx8IGRlZmluZWQoRkVBVF9DTElFTlRTRVJWRVIpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogIjpkcm9wIgorICogT3BlbnMgdGhlIGZpcnN0IGFyZ3VtZW50IGluIGEgd2luZG93LiAgV2hlbiB0aGVyZSBhcmUgdHdvIG9yIG1vcmUgYXJndW1lbnRzCisgKiB0aGUgYXJndW1lbnQgbGlzdCBpcyByZWRlZmluZWQuCisgKi8KKyAgICB2b2lkCitleF9kcm9wKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQlzcGxpdCA9IEZBTFNFOworICAgIGludAkJaW5jdXJ3aW4gPSBGQUxTRTsKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBjaGFyX3UJKmZpcnN0ID0gTlVMTDsKKyAgICB3aW5fVAkqd3A7CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFscmVhZHkgYmVpbmcgZWRpdGVkIGluIGEgd2luZG93LiAgSWYKKyAgICAgKiBzbywganVtcCB0byB0aGF0IHdpbmRvdy4KKyAgICAgKiBXZSB3b3VsZCBhY3R1YWxseSBuZWVkIHRvIGNoZWNrIGFsbCBhcmd1bWVudHMsIGJ1dCB0aGF0J3MgY29tcGxpY2F0ZWQKKyAgICAgKiBhbmQgbW9zdGx5IG9ubHkgb25lIGZpbGUgaXMgZHJvcHBlZC4KKyAgICAgKiBUaGlzIGFsc28gaWdub3JlcyB3aWxkY2FyZHMsIHNpbmNlIGl0IGlzIHZlcnkgdW5saWtlbHkgdGhlIHVzZXIgaXMKKyAgICAgKiBlZGl0aW5nIGEgZmlsZSBuYW1lIHdpdGggYSB3aWxkY2FyZCBjaGFyYWN0ZXIuCisgICAgICovCisgICAgYXJnID0gdmltX3N0cnNhdmUoZWFwLT5hcmcpOworICAgIGlmIChhcmcgIT0gTlVMTCkKKyAgICB7CisJLyogR2V0IHRoZSBmaXJzdCBhcmd1bWVudCwgcmVtb3ZlIHF1b3RlcywgbWFrZSBpdCBhIGZ1bGwgcGF0aC4gKi8KKwlmaXJzdCA9IGZpeF9mbmFtZShhcmcpOworCWlmIChmaXJzdCAhPSBOVUxMKQorCXsKKwkgICAgYnVmID0gYnVmbGlzdF9maW5kbmFtZShmaXJzdCk7CisJICAgIEZPUl9BTExfV0lORE9XUyh3cCkKKwkgICAgeworCQlpZiAod3AtPndfYnVmZmVyID09IGJ1ZikKKwkJeworCQkgICAgaW5jdXJ3aW4gPSBUUlVFOworIyBpZmRlZiBGRUFUX1dJTkRPV1MKKwkJICAgIHdpbl9lbnRlcih3cCwgVFJVRSk7CisJCSAgICBicmVhazsKKyMgZW5kaWYKKwkJfQorCSAgICB9CisJICAgIHZpbV9mcmVlKGZpcnN0KTsKKworCSAgICBpZiAoaW5jdXJ3aW4pCisJICAgIHsKKwkJLyogQWxyZWFkeSBlZGl0aW5nIHRoZSBmaWxlLiAgUmVkZWZpbmUgdGhlIGFyZ3VtZW50IGxpc3QuICovCisJCXNldF9hcmdsaXN0KGVhcC0+YXJnKTsKKwkJY3Vyd2luLT53X2FyZ19pZHggPSAwOworCQl2aW1fZnJlZShhcmcpOworCQlyZXR1cm47CisJICAgIH0KKwl9CisJdmltX2ZyZWUoYXJnKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGNoYW5nZWQuIElmIHNvLCB3ZSB3aWxsIG5lZWQKKyAgICAgKiB0byBzcGxpdCB0aGUgY3VycmVudCB3aW5kb3cgb3IgZGF0YSBjb3VsZCBiZSBsb3N0LgorICAgICAqIFNraXAgdGhlIGNoZWNrIGlmIHRoZSAnaGlkZGVuJyBvcHRpb24gaXMgc2V0LCBhcyBpbiB0aGlzIGNhc2UgdGhlCisgICAgICogYnVmZmVyIHdvbid0IGJlIGxvc3QuCisgICAgICovCisgICAgaWYgKCFQX0hJRChjdXJidWYpKQorICAgIHsKKyMgaWZkZWYgRkVBVF9XSU5ET1dTCisJKytlbXNnX29mZjsKKyMgZW5kaWYKKwlzcGxpdCA9IGNoZWNrX2NoYW5nZWQoY3VyYnVmLCBUUlVFLCBGQUxTRSwgRkFMU0UsIEZBTFNFKTsKKyMgaWZkZWYgRkVBVF9XSU5ET1dTCisJLS1lbXNnX29mZjsKKyMgZWxzZQorCWlmIChzcGxpdCkKKwkgICAgcmV0dXJuOworIyBlbmRpZgorICAgIH0KKworICAgIC8qIEZha2UgYSAiOnNuZXh0IiBvciAiOm5leHQiIGNvbW1hbmQsIHJlZGVmaW5lIHRoZSBhcmdsaXN0LiAqLworICAgIGlmIChzcGxpdCkKKyAgICB7CisJZWFwLT5jbWRpZHggPSBDTURfc25leHQ7CisJZWFwLT5jbWRbMF0gPSAncyc7CisgICAgfQorICAgIGVsc2UKKwllYXAtPmNtZGlkeCA9IENNRF9uZXh0OworICAgIGV4X25leHQoZWFwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2V4X2NtZHMuaCBiL3NyYy9leF9jbWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmZWFkZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9leF9jbWRzLmgKQEAgLTAsMCArMSw5NjEgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgRXggY29tbWFuZHMuCisgKiBXaGVuIERPX0RFQ0xBUkVfRVhDTUQgaXMgZGVmaW5lZCwgdGhlIHRhYmxlIHdpdGggZXggY29tbWFuZCBuYW1lcyBhbmQKKyAqIG9wdGlvbnMgcmVzdWx0cy4KKyAqIFdoZW4gRE9fREVDTEFSRV9FWENNRCBpcyBOT1QgZGVmaW5lZCwgdGhlIGVudW0gd2l0aCBhbGwgdGhlIEV4IGNvbW1hbmRzCisgKiByZXN1bHRzLgorICogVGhpcyBjbGV2ZXIgdHJpY2sgd2FzIGludmVudGVkIGJ5IFJvbiBBYXJvbi4KKyAqLworCisvKgorICogV2hlbiBhZGRpbmcgYW4gRXggY29tbWFuZDoKKyAqIDEuIEFkZCBhbiBlbnRyeSBpbiB0aGUgdGFibGUgYmVsb3cuICBLZWVwIGl0IHNvcnRlZCBvbiB0aGUgc2hvcnRlc3QKKyAqICAgIHZlcnNpb24gb2YgdGhlIGNvbW1hbmQgbmFtZSB0aGF0IHdvcmtzLiAgSWYgaXQgZG9lc24ndCBzdGFydCB3aXRoIGEKKyAqICAgIGxvd2VyIGNhc2UgbGV0dGVyLCBhZGQgaXQgYXQgdGhlIGVuZC4KKyAqIDIuIEFkZCBhICJjYXNlOiBDTURfeHh4IiBpbiB0aGUgYmlnIHN3aXRjaCBpbiBleF9kb2NtZC5jLgorICogMy4gQWRkIGFuIGVudHJ5IGluIHRoZSBpbmRleCBmb3IgRXggY29tbWFuZHMgYXQgIjpoZWxwIGV4LWNtZC1pbmRleCIuCisgKiA0LiBBZGQgZG9jdW1lbnRhdGlvbiBpbiAuLi9kb2MveHh4LnR4dC4gIEFkZCBhIHRhZyBmb3IgYm90aCB0aGUgc2hvcnQgYW5kCisgKiAgICBsb25nIG5hbWUgb2YgdGhlIGNvbW1hbmQuCisgKi8KKworI2lmZGVmIFJBTkdFCisjIHVuZGVmIFJBTkdFCQkJLyogU0FTQyBvbiBBbWlnYSBkZWZpbmVzIGl0ICovCisjZW5kaWYKKworI2RlZmluZSBSQU5HRQkJMHgwMDEJLyogYWxsb3cgYSBsaW5lc3BlY3MgKi8KKyNkZWZpbmUgQkFORwkJMHgwMDIJLyogYWxsb3cgYSAhIGFmdGVyIHRoZSBjb21tYW5kIG5hbWUgKi8KKyNkZWZpbmUgRVhUUkEJCTB4MDA0CS8qIGFsbG93IGV4dHJhIGFyZ3MgYWZ0ZXIgY29tbWFuZCBuYW1lICovCisjZGVmaW5lIFhGSUxFCQkweDAwOAkvKiBleHBhbmQgd2lsZGNhcmRzIGluIGV4dHJhIHBhcnQgKi8KKyNkZWZpbmUgTk9TUEMJCTB4MDEwCS8qIG5vIHNwYWNlcyBhbGxvd2VkIGluIHRoZSBleHRyYSBwYXJ0ICovCisjZGVmaW5lCURGTEFMTAkJMHgwMjAJLyogZGVmYXVsdCBmaWxlIHJhbmdlIGlzIDEsJCAqLworI2RlZmluZSBXSE9MRUZPTEQJMHgwNDAJLyogZXh0ZW5kIHJhbmdlIHRvIGluY2x1ZGUgd2hvbGUgZm9sZCBhbHNvCisJCQkJICAgd2hlbiBsZXNzIHRoYW4gdHdvIG51bWJlcnMgZ2l2ZW4gKi8KKyNkZWZpbmUgTkVFREFSRwkJMHgwODAJLyogYXJndW1lbnQgcmVxdWlyZWQgKi8KKyNkZWZpbmUgVFJMQkFSCQkweDEwMAkvKiBjaGVjayBmb3IgdHJhaWxpbmcgdmVydGljYWwgYmFyICovCisjZGVmaW5lIFJFR1NUUgkJMHgyMDAJLyogYWxsb3cgInggZm9yIHJlZ2lzdGVyIGRlc2lnbmF0aW9uICovCisjZGVmaW5lIENPVU5UCQkweDQwMAkvKiBhbGxvdyBjb3VudCBpbiBhcmd1bWVudCwgYWZ0ZXIgY29tbWFuZCAqLworI2RlZmluZSBOT1RSTENPTQkweDgwMAkvKiBubyB0cmFpbGluZyBjb21tZW50IGFsbG93ZWQgKi8KKyNkZWZpbmUgWkVST1IJICAgICAgIDB4MTAwMAkvKiB6ZXJvIGxpbmUgbnVtYmVyIGFsbG93ZWQgKi8KKyNkZWZpbmUgVVNFQ1RSTFYgICAgICAgMHgyMDAwCS8qIGRvIG5vdCByZW1vdmUgQ1RSTC1WIGZyb20gYXJndW1lbnQgKi8KKyNkZWZpbmUgTk9UQURSCSAgICAgICAweDQwMDAJLyogbnVtYmVyIGJlZm9yZSBjb21tYW5kIGlzIG5vdCBhbiBhZGRyZXNzICovCisjZGVmaW5lIEVESVRDTUQJICAgICAgIDB4ODAwMAkvKiBhbGxvdyAiK2NvbW1hbmQiIGFyZ3VtZW50ICovCisjZGVmaW5lIEJVRk5BTUUJICAgICAgMHgxMDAwMEwJLyogYWNjZXB0cyBidWZmZXIgbmFtZSAqLworI2RlZmluZSBCVUZVTkwJICAgICAgMHgyMDAwMEwJLyogYWNjZXB0cyB1bmxpc3RlZCBidWZmZXIgdG9vICovCisjZGVmaW5lIEFSR09QVAkgICAgICAweDQwMDAwTAkvKiBhbGxvdyAiKytvcHQ9dmFsIiBhcmd1bWVudCAqLworI2RlZmluZSBTQk9YT0sJICAgICAgMHg4MDAwMEwJLyogYWxsb3dlZCBpbiB0aGUgc2FuZGJveCAqLworI2RlZmluZSBDTURXSU4JICAgICAweDEwMDAwMEwJLyogYWxsb3dlZCBpbiBjbWRsaW5lIHdpbmRvdyAqLworI2RlZmluZSBNT0RJRlkgICAgICAgMHgyMDAwMDBMICAvKiBmb3JiaWRkZW4gaW4gbm9uLSdtb2RpZmlhYmxlJyBidWZmZXIgKi8KKyNkZWZpbmUgRklMRVMJKFhGSUxFIHwgRVhUUkEpCS8qIG11bHRpcGxlIGV4dHJhIGZpbGVzIGFsbG93ZWQgKi8KKyNkZWZpbmUgV09SRDEJKEVYVFJBIHwgTk9TUEMpCS8qIG9uZSBleHRyYSB3b3JkIGFsbG93ZWQgKi8KKyNkZWZpbmUgRklMRTEJKEZJTEVTIHwgTk9TUEMpCS8qIDEgZmlsZSBhbGxvd2VkLCBkZWZhdWx0cyB0byBjdXJyZW50IGZpbGUgKi8KKworI2lmbmRlZiBET19ERUNMQVJFX0VYQ01ECit0eXBlZGVmIHN0cnVjdCBleGFyZyBleGFyZ19UOworI2VuZGlmCisKKy8qCisgKiBUaGlzIGFycmF5IG1hcHMgZXggY29tbWFuZCBuYW1lcyB0byBjb21tYW5kIGNvZGVzLgorICogVGhlIG9yZGVyIGluIHdoaWNoIGNvbW1hbmQgbmFtZXMgYXJlIGxpc3RlZCBiZWxvdyBpcyBzaWduaWZpY2FudCAtLQorICogYW1iaWd1b3VzIGFiYnJldmlhdGlvbnMgYXJlIGFsd2F5cyByZXNvbHZlZCB0byBiZSB0aGUgZmlyc3QgcG9zc2libGUgbWF0Y2gKKyAqIChlLmcuICJyIiBpcyB0YWtlbiB0byBtZWFuICJyZWFkIiwgbm90ICJyZXdpbmQiLCBiZWNhdXNlICJyZWFkIiBjb21lcworICogYmVmb3JlICJyZXdpbmQiKS4KKyAqIE5vdCBzdXBwb3J0ZWQgY29tbWFuZHMgYXJlIGluY2x1ZGVkIHRvIGF2b2lkIGFtYmlndWl0aWVzLgorICovCisjaWZkZWYgRVgKKyMgdW5kZWYgRVgJICAgIC8qIGp1c3QgaW4gY2FzZSAqLworI2VuZGlmCisjaWZkZWYgRE9fREVDTEFSRV9FWENNRAorIyBkZWZpbmUgRVgoYSwgYiwgYywgZCkgIHsoY2hhcl91ICopYiwgYywgZH0KKwordHlwZWRlZiB2b2lkICgqZXhfZnVuY19UKSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworCitzdGF0aWMgc3RydWN0IGNtZG5hbWUKK3sKKyAgICBjaGFyX3UJKmNtZF9uYW1lOwkvKiBuYW1lIG9mIHRoZSBjb21tYW5kICovCisgICAgZXhfZnVuY19UICAgY21kX2Z1bmM7CS8qIGZ1bmN0aW9uIGZvciB0aGlzIGNvbW1hbmQgKi8KKyAgICBsb25nX3UJY21kX2FyZ3Q7CS8qIGZsYWdzIGRlY2xhcmVkIGFib3ZlICovCit9CisjIGlmIGRlZmluZWQoRkVBVF9HVUlfVzE2KQorX2ZhcgorIyBlbmRpZgorY21kbmFtZXNbXSA9CisjZWxzZQorIyBkZWZpbmUgRVgoYSwgYiwgYywgZCkgIGEKK2VudW0gQ01EX2luZGV4CisjZW5kaWYKK3sKK0VYKENNRF9hcHBlbmQsCQkiYXBwZW5kIiwJZXhfYXBwZW5kLAorCQkJQkFOR3xSQU5HRXxaRVJPUnxUUkxCQVJ8Q01EV0lOfE1PRElGWSksCitFWChDTURfYWJicmV2aWF0ZSwJImFiYnJldmlhdGUiLAlleF9hYmJyZXZpYXRlLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfYWJjbGVhciwJCSJhYmNsZWFyIiwJZXhfYWJjbGVhciwKKwkJCUVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2Fib3ZlbGVmdCwJImFib3ZlbGVmdCIsCWV4X3dyb25nbW9kaWZpZXIsCisJCQlORUVEQVJHfEVYVFJBfE5PVFJMQ09NKSwKK0VYKENNRF9hbGwsCQkiYWxsIiwJCWV4X2FsbCwKKwkJCVJBTkdFfE5PVEFEUnxDT1VOVHxUUkxCQVIpLAorRVgoQ01EX2FtZW51LAkJImFtZW51IiwJZXhfbWVudSwKKwkJCVJBTkdFfE5PVEFEUnxaRVJPUnxFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9hbm9yZW1lbnUsCSJhbm9yZW1lbnUiLAlleF9tZW51LAorCQkJUkFOR0V8Tk9UQURSfFpFUk9SfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX2FyZ3MsCQkiYXJncyIsCQlleF9hcmdzLAorCQkJQkFOR3xGSUxFU3xFRElUQ01EfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX2FyZ2FkZCwJCSJhcmdhZGQiLAlleF9hcmdhZGQsCisJCQlCQU5HfE5FRURBUkd8UkFOR0V8Tk9UQURSfENPVU5UfEZJTEVTfFRSTEJBUiksCitFWChDTURfYXJnZGVsZXRlLAkiYXJnZGVsZXRlIiwJZXhfYXJnZGVsZXRlLAorCQkJQkFOR3xSQU5HRXxOT1RBRFJ8Q09VTlR8RklMRVN8VFJMQkFSKSwKK0VYKENNRF9hcmdkbywJCSJhcmdkbyIsCWV4X2xpc3RkbywKKwkJCUJBTkd8TkVFREFSR3xFWFRSQXxOT1RSTENPTSksCitFWChDTURfYXJnZWRpdCwJCSJhcmdlZGl0IiwJZXhfYXJnZWRpdCwKKwkJCUJBTkd8TkVFREFSR3xSQU5HRXxOT1RBRFJ8Q09VTlR8RklMRTF8RURJVENNRHxUUkxCQVIpLAorRVgoQ01EX2FyZ2dsb2JhbCwJImFyZ2dsb2JhbCIsCWV4X2FyZ3MsCisJCQlCQU5HfEZJTEVTfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfYXJnbG9jYWwsCSJhcmdsb2NhbCIsCWV4X2FyZ3MsCisJCQlCQU5HfEZJTEVTfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfYXJndW1lbnQsCSJhcmd1bWVudCIsCWV4X2FyZ3VtZW50LAorCQkJQkFOR3xSQU5HRXxOT1RBRFJ8Q09VTlR8RVhUUkF8RURJVENNRHxBUkdPUFR8VFJMQkFSKSwKK0VYKENNRF9hc2NpaSwJCSJhc2NpaSIsCWRvX2FzY2lpLAorCQkJVFJMQkFSfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX2F1dG9jbWQsCQkiYXV0b2NtZCIsCWV4X2F1dG9jbWQsCisJCQlCQU5HfEVYVFJBfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfYXVncm91cCwJCSJhdWdyb3VwIiwJZXhfYXV0b2NtZCwKKwkJCUJBTkd8V09SRDF8VFJMQkFSfENNRFdJTiksCitFWChDTURfYXVubWVudSwJCSJhdW5tZW51IiwJZXhfbWVudSwKKwkJCUVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX2J1ZmZlciwJCSJidWZmZXIiLAlleF9idWZmZXIsCisJCQlCQU5HfFJBTkdFfE5PVEFEUnxCVUZOQU1FfEJVRlVOTHxDT1VOVHxFWFRSQXxUUkxCQVIpLAorRVgoQ01EX2JOZXh0LAkJImJOZXh0IiwJZXhfYnByZXZpb3VzLAorCQkJQkFOR3xSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSKSwKK0VYKENNRF9iYWxsLAkJImJhbGwiLAkJZXhfYnVmZmVyX2FsbCwKKwkJCVJBTkdFfE5PVEFEUnxDT1VOVHxUUkxCQVIpLAorRVgoQ01EX2JhZGQsCQkiYmFkZCIsCQlleF9lZGl0LAorCQkJTkVFREFSR3xGSUxFMXxFRElUQ01EfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2JkZWxldGUsCQkiYmRlbGV0ZSIsCWV4X2J1bmxvYWQsCisJCQlCQU5HfFJBTkdFfE5PVEFEUnxCVUZOQU1FfENPVU5UfEVYVFJBfFRSTEJBUiksCitFWChDTURfYmVoYXZlLAkJImJlaGF2ZSIsCWV4X2JlaGF2ZSwKKwkJCU5FRURBUkd8V09SRDF8VFJMQkFSfENNRFdJTiksCitFWChDTURfYmVsb3dyaWdodCwJImJlbG93cmlnaHQiLAlleF93cm9uZ21vZGlmaWVyLAorCQkJTkVFREFSR3xFWFRSQXxOT1RSTENPTSksCitFWChDTURfYmZpcnN0LAkJImJmaXJzdCIsCWV4X2JyZXdpbmQsCisJCQlCQU5HfFJBTkdFfE5PVEFEUnxUUkxCQVIpLAorRVgoQ01EX2JsYXN0LAkJImJsYXN0IiwJZXhfYmxhc3QsCisJCQlCQU5HfFJBTkdFfE5PVEFEUnxUUkxCQVIpLAorRVgoQ01EX2Jtb2RpZmllZCwJImJtb2RpZmllZCIsCWV4X2Jtb2RpZmllZCwKKwkJCUJBTkd8UkFOR0V8Tk9UQURSfENPVU5UfFRSTEJBUiksCitFWChDTURfYm5leHQsCQkiYm5leHQiLAlleF9ibmV4dCwKKwkJCUJBTkd8UkFOR0V8Tk9UQURSfENPVU5UfFRSTEJBUiksCitFWChDTURfYm90cmlnaHQsCSJib3RyaWdodCIsCWV4X3dyb25nbW9kaWZpZXIsCisJCQlORUVEQVJHfEVYVFJBfE5PVFJMQ09NKSwKK0VYKENNRF9icHJldmlvdXMsCSJicHJldmlvdXMiLAlleF9icHJldmlvdXMsCisJCQlCQU5HfFJBTkdFfE5PVEFEUnxDT1VOVHxUUkxCQVIpLAorRVgoQ01EX2JyZXdpbmQsCQkiYnJld2luZCIsCWV4X2JyZXdpbmQsCisJCQlCQU5HfFJBTkdFfE5PVEFEUnxUUkxCQVIpLAorRVgoQ01EX2JyZWFrLAkJImJyZWFrIiwJZXhfYnJlYWssCisJCQlUUkxCQVJ8U0JPWE9LfENNRFdJTiksCitFWChDTURfYnJlYWthZGQsCSJicmVha2FkZCIsCWV4X2JyZWFrYWRkLAorCQkJRVhUUkF8VFJMQkFSfENNRFdJTiksCitFWChDTURfYnJlYWtkZWwsCSJicmVha2RlbCIsCWV4X2JyZWFrZGVsLAorCQkJRVhUUkF8VFJMQkFSfENNRFdJTiksCitFWChDTURfYnJlYWtsaXN0LAkiYnJlYWtsaXN0IiwJZXhfYnJlYWtsaXN0LAorCQkJRVhUUkF8VFJMQkFSfENNRFdJTiksCitFWChDTURfYnJvd3NlLAkJImJyb3dzZSIsCWV4X3dyb25nbW9kaWZpZXIsCisJCQlORUVEQVJHfEVYVFJBfE5PVFJMQ09NfENNRFdJTiksCitFWChDTURfYnVmZmVycywJCSJidWZmZXJzIiwJYnVmbGlzdF9saXN0LAorCQkJQkFOR3xUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9idWZkbywJCSJidWZkbyIsCWV4X2xpc3RkbywKKwkJCUJBTkd8TkVFREFSR3xFWFRSQXxOT1RSTENPTSksCitFWChDTURfYnVubG9hZCwJCSJidW5sb2FkIiwJZXhfYnVubG9hZCwKKwkJCUJBTkd8UkFOR0V8Tk9UQURSfEJVRk5BTUV8Q09VTlR8RVhUUkF8VFJMQkFSKSwKK0VYKENNRF9id2lwZW91dCwJImJ3aXBlb3V0IiwJZXhfYnVubG9hZCwKKwkJCUJBTkd8UkFOR0V8Tk9UQURSfEJVRk5BTUV8QlVGVU5MfENPVU5UfEVYVFJBfFRSTEJBUiksCitFWChDTURfY2hhbmdlLAkJImNoYW5nZSIsCWV4X2NoYW5nZSwKKwkJCUJBTkd8V0hPTEVGT0xEfFJBTkdFfENPVU5UfFRSTEJBUnxDTURXSU58TU9ESUZZKSwKK0VYKENNRF9jTmV4dCwJCSJjTmV4dCIsCWV4X2NuZXh0LAorCQkJUkFOR0V8Tk9UQURSfENPVU5UfFRSTEJBUnxCQU5HKSwKK0VYKENNRF9jTmZpbGUsCQkiY05maWxlIiwJZXhfY25leHQsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSfEJBTkcpLAorRVgoQ01EX2NhYmJyZXYsCQkiY2FiYnJldiIsCWV4X2FiYnJldmlhdGUsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9jYWJjbGVhciwJImNhYmNsZWFyIiwJZXhfYWJjbGVhciwKKwkJCUVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2NhbGwsCQkiY2FsbCIsCQlleF9jYWxsLAorCQkJUkFOR0V8TkVFREFSR3xFWFRSQXxOT1RSTENPTXxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9jYXRjaCwJCSJjYXRjaCIsCWV4X2NhdGNoLAorCQkJRVhUUkF8U0JPWE9LfENNRFdJTiksCitFWChDTURfY2MsCQkiY2MiLAkJZXhfY2MsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSfEJBTkcpLAorRVgoQ01EX2NjbG9zZSwJCSJjY2xvc2UiLAlleF9jY2xvc2UsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSKSwKK0VYKENNRF9jZCwJCSJjZCIsCQlleF9jZCwKKwkJCUZJTEUxfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2NlbnRlciwJCSJjZW50ZXIiLAlleF9hbGlnbiwKKwkJCVRSTEJBUnxSQU5HRXxXSE9MRUZPTER8RVhUUkF8Q01EV0lOfE1PRElGWSksCitFWChDTURfY2ZpbGUsCQkiY2ZpbGUiLAlleF9jZmlsZSwKKwkJCVRSTEJBUnxGSUxFMXxCQU5HKSwKK0VYKENNRF9jZmlyc3QsCQkiY2ZpcnN0IiwJZXhfY2MsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSfEJBTkcpLAorRVgoQ01EX2NnZXRmaWxlLAkiY2dldGZpbGUiLAlleF9jZmlsZSwKKwkJCVRSTEJBUnxGSUxFMXxCQU5HKSwKK0VYKENNRF9jaGRpciwJCSJjaGRpciIsCWV4X2NkLAorCQkJRklMRTF8VFJMQkFSfENNRFdJTiksCitFWChDTURfY2hhbmdlcywJCSJjaGFuZ2VzIiwJZXhfY2hhbmdlcywKKwkJCVRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2NoZWNrcGF0aCwJImNoZWNrcGF0aCIsCWV4X2NoZWNrcGF0aCwKKwkJCVRSTEJBUnxCQU5HfENNRFdJTiksCitFWChDTURfY2hlY2t0aW1lLAkiY2hlY2t0aW1lIiwJZXhfY2hlY2t0aW1lLAorCQkJUkFOR0V8Tk9UQURSfEJVRk5BTUV8Q09VTlR8RVhUUkF8VFJMQkFSKSwKK0VYKENNRF9jbGlzdCwJCSJjbGlzdCIsCXFmX2xpc3QsCisJCQlCQU5HfEVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2NsYXN0LAkJImNsYXN0IiwJZXhfY2MsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSfEJBTkcpLAorRVgoQ01EX2Nsb3NlLAkJImNsb3NlIiwJZXhfY2xvc2UsCisJCQlCQU5HfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2NtYXAsCQkiY21hcCIsCQlleF9tYXAsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9jbWFwY2xlYXIsCSJjbWFwY2xlYXIiLAlleF9tYXBjbGVhciwKKwkJCUVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2NtZW51LAkJImNtZW51IiwJZXhfbWVudSwKKwkJCVJBTkdFfE5PVEFEUnxaRVJPUnxFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9jbmV4dCwJCSJjbmV4dCIsCWV4X2NuZXh0LAorCQkJUkFOR0V8Tk9UQURSfENPVU5UfFRSTEJBUnxCQU5HKSwKK0VYKENNRF9jbmV3ZXIsCQkiY25ld2VyIiwJcWZfYWdlLAorCQkJUkFOR0V8Tk9UQURSfENPVU5UfFRSTEJBUiksCitFWChDTURfY25maWxlLAkJImNuZmlsZSIsCWV4X2NuZXh0LAorCQkJUkFOR0V8Tk9UQURSfENPVU5UfFRSTEJBUnxCQU5HKSwKK0VYKENNRF9jbm9yZW1hcCwJImNub3JlbWFwIiwJZXhfbWFwLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfY25vcmVhYmJyZXYsCSJjbm9yZWFiYnJldiIsCWV4X2FiYnJldmlhdGUsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9jbm9yZW1lbnUsCSJjbm9yZW1lbnUiLAlleF9tZW51LAorCQkJUkFOR0V8Tk9UQURSfFpFUk9SfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX2NvcHksCQkiY29weSIsCQlleF9jb3B5bW92ZSwKKwkJCVJBTkdFfFdIT0xFRk9MRHxFWFRSQXxUUkxCQVJ8Q01EV0lOfE1PRElGWSksCitFWChDTURfY29sZGVyLAkJImNvbGRlciIsCXFmX2FnZSwKKwkJCVJBTkdFfE5PVEFEUnxDT1VOVHxUUkxCQVIpLAorRVgoQ01EX2NvbG9yc2NoZW1lLAkiY29sb3JzY2hlbWUiLAlleF9jb2xvcnNjaGVtZSwKKwkJCU5FRURBUkd8V09SRDF8VFJMQkFSfENNRFdJTiksCitFWChDTURfY29tbWFuZCwJCSJjb21tYW5kIiwJZXhfY29tbWFuZCwKKwkJCUVYVFJBfEJBTkd8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9jb21jbGVhciwJImNvbWNsZWFyIiwJZXhfY29tY2xlYXIsCisJCQlUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9jb21waWxlciwJImNvbXBpbGVyIiwJZXhfY29tcGlsZXIsCisJCQlCQU5HfFRSTEJBUnxXT1JEMSksCitFWChDTURfY29udGludWUsCSJjb250aW51ZSIsCWV4X2NvbnRpbnVlLAorCQkJVFJMQkFSfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX2NvbmZpcm0sCQkiY29uZmlybSIsCWV4X3dyb25nbW9kaWZpZXIsCisJCQlORUVEQVJHfEVYVFJBfE5PVFJMQ09NfENNRFdJTiksCitFWChDTURfY29wZW4sCQkiY29wZW4iLAlleF9jb3BlbiwKKwkJCVJBTkdFfE5PVEFEUnxDT1VOVHxUUkxCQVIpLAorRVgoQ01EX2NwcmV2aW91cywJImNwcmV2aW91cyIsCWV4X2NuZXh0LAorCQkJUkFOR0V8Tk9UQURSfENPVU5UfFRSTEJBUnxCQU5HKSwKK0VYKENNRF9jcGZpbGUsCQkiY3BmaWxlIiwJZXhfY25leHQsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSfEJBTkcpLAorRVgoQ01EX2NxdWl0LAkJImNxdWl0IiwJZXhfY3F1aXQsCisJCQlUUkxCQVJ8QkFORyksCitFWChDTURfY3Jld2luZCwJCSJjcmV3aW5kIiwJZXhfY2MsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSfEJBTkcpLAorRVgoQ01EX2NzY29wZSwJCSJjc2NvcGUiLAlkb19jc2NvcGUsCisJCQlFWFRSQXxOT1RSTENPTXxTQk9YT0t8WEZJTEUpLAorRVgoQ01EX2NzdGFnLAkJImNzdGFnIiwJZG9fY3N0YWcsCisJCQlCQU5HfFRSTEJBUnxXT1JEMSksCitFWChDTURfY3VubWFwLAkJImN1bm1hcCIsCWV4X3VubWFwLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfY3VuYWJicmV2LAkiY3VuYWJicmV2IiwJZXhfYWJicmV2aWF0ZSwKKwkJCUVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX2N1bm1lbnUsCQkiY3VubWVudSIsCWV4X21lbnUsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9jd2luZG93LAkJImN3aW5kb3ciLAlleF9jd2luZG93LAorCQkJUkFOR0V8Tk9UQURSfENPVU5UfFRSTEJBUiksCitFWChDTURfZGVsZXRlLAkJImRlbGV0ZSIsCWV4X29wZXJhdG9ycywKKwkJCVJBTkdFfFdIT0xFRk9MRHxSRUdTVFJ8Q09VTlR8VFJMQkFSfENNRFdJTnxNT0RJRlkpLAorRVgoQ01EX2RlYnVnLAkJImRlYnVnIiwJZXhfZGVidWcsCisJCQlORUVEQVJHfEVYVFJBfE5PVFJMQ09NfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX2RlYnVnZ3JlZWR5LAkiZGVidWdncmVlZHkiLAlleF9kZWJ1Z2dyZWVkeSwKKwkJCVJBTkdFfE5PVEFEUnxaRVJPUnxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9kZWxjb21tYW5kLAkiZGVsY29tbWFuZCIsCWV4X2RlbGNvbW1hbmQsCisJCQlORUVEQVJHfFdPUkQxfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2RlbGZ1bmN0aW9uLAkiZGVsZnVuY3Rpb24iLAlleF9kZWxmdW5jdGlvbiwKKwkJCU5FRURBUkd8V09SRDF8Q01EV0lOKSwKK0VYKENNRF9kaXNwbGF5LAkJImRpc3BsYXkiLAlleF9kaXNwbGF5LAorCQkJRVhUUkF8Tk9UUkxDT018VFJMQkFSfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX2RpZmZ1cGRhdGUsCSJkaWZmdXBkYXRlIiwJZXhfZGlmZnVwZGF0ZSwKKwkJCVRSTEJBUiksCitFWChDTURfZGlmZmdldCwJCSJkaWZmZ2V0IiwJZXhfZGlmZmdldHB1dCwKKwkJCVJBTkdFfEVYVFJBfFRSTEJBUnxNT0RJRlkpLAorRVgoQ01EX2RpZmZwYXRjaCwJImRpZmZwYXRjaCIsCWV4X2RpZmZwYXRjaCwKKwkJCUVYVFJBfEZJTEUxfFRSTEJBUnxNT0RJRlkpLAorRVgoQ01EX2RpZmZwdXQsCQkiZGlmZnB1dCIsCWV4X2RpZmZnZXRwdXQsCisJCQlSQU5HRXxFWFRSQXxUUkxCQVIpLAorRVgoQ01EX2RpZmZzcGxpdCwJImRpZmZzcGxpdCIsCWV4X2RpZmZzcGxpdCwKKwkJCUVYVFJBfEZJTEUxfFRSTEJBUiksCitFWChDTURfZGlmZnRoaXMsCSJkaWZmdGhpcyIsCWV4X2RpZmZ0aGlzLAorCQkJVFJMQkFSKSwKK0VYKENNRF9kaWdyYXBocywJImRpZ3JhcGhzIiwJZXhfZGlncmFwaHMsCisJCQlFWFRSQXxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9kanVtcCwJCSJkanVtcCIsCWV4X2ZpbmRwYXQsCisJCQlCQU5HfFJBTkdFfERGTEFMTHxXSE9MRUZPTER8RVhUUkEpLAorRVgoQ01EX2RsaXN0LAkJImRsaXN0IiwJZXhfZmluZHBhdCwKKwkJCUJBTkd8UkFOR0V8REZMQUxMfFdIT0xFRk9MRHxFWFRSQXxDTURXSU4pLAorRVgoQ01EX2RvYXV0b2NtZCwJImRvYXV0b2NtZCIsCWV4X2RvYXV0b2NtZCwKKwkJCUVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2RvYXV0b2FsbCwJImRvYXV0b2FsbCIsCWV4X2RvYXV0b2FsbCwKKwkJCUVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2Ryb3AsCQkiZHJvcCIsCQlleF9kcm9wLAorCQkJRklMRVN8RURJVENNRHxORUVEQVJHfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX2RzZWFyY2gsCQkiZHNlYXJjaCIsCWV4X2ZpbmRwYXQsCisJCQlCQU5HfFJBTkdFfERGTEFMTHxXSE9MRUZPTER8RVhUUkF8Q01EV0lOKSwKK0VYKENNRF9kc3BsaXQsCQkiZHNwbGl0IiwJZXhfZmluZHBhdCwKKwkJCUJBTkd8UkFOR0V8REZMQUxMfFdIT0xFRk9MRHxFWFRSQSksCitFWChDTURfZWRpdCwJCSJlZGl0IiwJCWV4X2VkaXQsCisJCQlCQU5HfEZJTEUxfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfZWNobywJCSJlY2hvIiwJCWV4X2VjaG8sCisJCQlFWFRSQXxOT1RSTENPTXxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9lY2hvZXJyLAkJImVjaG9lcnIiLAlleF9leGVjdXRlLAorCQkJRVhUUkF8Tk9UUkxDT018U0JPWE9LfENNRFdJTiksCitFWChDTURfZWNob2hsLAkJImVjaG9obCIsCWV4X2VjaG9obCwKKwkJCUVYVFJBfFRSTEJBUnxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9lY2hvbXNnLAkJImVjaG9tc2ciLAlleF9leGVjdXRlLAorCQkJRVhUUkF8Tk9UUkxDT018U0JPWE9LfENNRFdJTiksCitFWChDTURfZWNob24sCQkiZWNob24iLAlleF9lY2hvLAorCQkJRVhUUkF8Tk9UUkxDT018U0JPWE9LfENNRFdJTiksCitFWChDTURfZWxzZSwJCSJlbHNlIiwJCWV4X2Vsc2UsCisJCQlUUkxCQVJ8U0JPWE9LfENNRFdJTiksCitFWChDTURfZWxzZWlmLAkJImVsc2VpZiIsCWV4X2Vsc2UsCisJCQlFWFRSQXxOT1RSTENPTXxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9lbWVudSwJCSJlbWVudSIsCWV4X2VtZW51LAorCQkJTkVFREFSR3xFWFRSQXxUUkxCQVJ8Tk9UUkxDT018UkFOR0V8Tk9UQURSfENNRFdJTiksCitFWChDTURfZW5kaWYsCQkiZW5kaWYiLAlleF9lbmRpZiwKKwkJCVRSTEJBUnxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9lbmRmdW5jdGlvbiwJImVuZGZ1bmN0aW9uIiwJZXhfZW5kZnVuY3Rpb24sCisJCQlUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9lbmR0cnksCQkiZW5kdHJ5IiwJZXhfZW5kdHJ5LAorCQkJVFJMQkFSfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX2VuZHdoaWxlLAkiZW5kd2hpbGUiLAlleF9lbmR3aGlsZSwKKwkJCVRSTEJBUnxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9lbmV3LAkJImVuZXciLAkJZXhfZWRpdCwKKwkJCUJBTkd8VFJMQkFSKSwKK0VYKENNRF9leCwJCSJleCIsCQlleF9lZGl0LAorCQkJQkFOR3xGSUxFMXxFRElUQ01EfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX2V4ZWN1dGUsCQkiZXhlY3V0ZSIsCWV4X2V4ZWN1dGUsCisJCQlFWFRSQXxOT1RSTENPTXxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9leGl0LAkJImV4aXQiLAkJZXhfZXhpdCwKKwkJCVJBTkdFfFdIT0xFRk9MRHxCQU5HfEZJTEUxfEFSR09QVHxERkxBTEx8VFJMQkFSfENNRFdJTiksCitFWChDTURfZmlsZSwJCSJmaWxlIiwJCWV4X2ZpbGUsCisJCQlCQU5HfEZJTEUxfFRSTEJBUiksCitFWChDTURfZmlsZXMsCQkiZmlsZXMiLAlidWZsaXN0X2xpc3QsCisJCQlCQU5HfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2ZpbGV0eXBlLAkiZmlsZXR5cGUiLAlleF9maWxldHlwZSwKKwkJCUVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2ZpbmQsCQkiZmluZCIsCQlleF9maW5kLAorCQkJUkFOR0V8Tk9UQURSfEJBTkd8RklMRTF8RURJVENNRHxBUkdPUFR8VFJMQkFSKSwKK0VYKENNRF9maW5hbGx5LAkJImZpbmFsbHkiLAlleF9maW5hbGx5LAorCQkJVFJMQkFSfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX2ZpbmlzaCwJCSJmaW5pc2giLAlleF9maW5pc2gsCisJCQlUUkxCQVJ8U0JPWE9LfENNRFdJTiksCitFWChDTURfZmlyc3QsCQkiZmlyc3QiLAlleF9yZXdpbmQsCisJCQlFWFRSQXxCQU5HfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfZml4ZGVsLAkJImZpeGRlbCIsCWRvX2ZpeGRlbCwKKwkJCVRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2ZvbGQsCQkiZm9sZCIsCQlleF9mb2xkLAorCQkJUkFOR0V8V0hPTEVGT0xEfFRSTEJBUnxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9mb2xkY2xvc2UsCSJmb2xkY2xvc2UiLAlleF9mb2xkb3BlbiwKKwkJCVJBTkdFfEJBTkd8V0hPTEVGT0xEfFRSTEJBUnxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9mb2xkZG9vcGVuLAkiZm9sZGRvb3BlbiIsCWV4X2ZvbGRkbywKKwkJCVJBTkdFfERGTEFMTHxORUVEQVJHfEVYVFJBfE5PVFJMQ09NKSwKK0VYKENNRF9mb2xkZG9jbG9zZWQsCSJmb2xkZG9jbG9zZWQiLAlleF9mb2xkZG8sCisJCQlSQU5HRXxERkxBTEx8TkVFREFSR3xFWFRSQXxOT1RSTENPTSksCitFWChDTURfZm9sZG9wZW4sCSJmb2xkb3BlbiIsCWV4X2ZvbGRvcGVuLAorCQkJUkFOR0V8QkFOR3xXSE9MRUZPTER8VFJMQkFSfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX2Z1bmN0aW9uLAkiZnVuY3Rpb24iLAlleF9mdW5jdGlvbiwKKwkJCUVYVFJBfEJBTkd8Q01EV0lOKSwKK0VYKENNRF9nbG9iYWwsCQkiZ2xvYmFsIiwJZXhfZ2xvYmFsLAorCQkJUkFOR0V8V0hPTEVGT0xEfEJBTkd8RVhUUkF8REZMQUxMfENNRFdJTiksCitFWChDTURfZ290bywJCSJnb3RvIiwJCWV4X2dvdG8sCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX2dyZXAsCQkiZ3JlcCIsCQlleF9tYWtlLAorCQkJQkFOR3xORUVEQVJHfEVYVFJBfE5PVFJMQ09NfFRSTEJBUnxYRklMRSksCitFWChDTURfZ3JlcGFkZCwJCSJncmVwYWRkIiwJZXhfbWFrZSwKKwkJCUJBTkd8TkVFREFSR3xFWFRSQXxOT1RSTENPTXxUUkxCQVJ8WEZJTEUpLAorRVgoQ01EX2d1aSwJCSJndWkiLAkJZXhfZ3VpLAorCQkJQkFOR3xGSUxFU3xFRElUQ01EfEFSR09QVHxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9ndmltLAkJImd2aW0iLAkJZXhfZ3VpLAorCQkJQkFOR3xGSUxFU3xFRElUQ01EfEFSR09QVHxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9oZWxwLAkJImhlbHAiLAkJZXhfaGVscCwKKwkJCUJBTkd8RVhUUkF8Tk9UUkxDT00pLAorRVgoQ01EX2hlbHBmaW5kLAkiaGVscGZpbmQiLAlleF9oZWxwZmluZCwKKwkJCUVYVFJBfE5PVFJMQ09NKSwKK0VYKENNRF9oZWxwZ3JlcCwJImhlbHBncmVwIiwJZXhfaGVscGdyZXAsCisJCQlFWFRSQXxOT1RSTENPTXxORUVEQVJHKSwKK0VYKENNRF9oZWxwdGFncywJImhlbHB0YWdzIiwJZXhfaGVscHRhZ3MsCisJCQlORUVEQVJHfEZJTEUxfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2hhcmRjb3B5LAkiaGFyZGNvcHkiLAlleF9oYXJkY29weSwKKwkJCVJBTkdFfENPVU5UfEVYVFJBfFRSTEJBUnxERkxBTEx8QkFORyksCitFWChDTURfaGlnaGxpZ2h0LAkiaGlnaGxpZ2h0IiwJZXhfaGlnaGxpZ2h0LAorCQkJQkFOR3xFWFRSQXxUUkxCQVJ8U0JPWE9LfENNRFdJTiksCitFWChDTURfaGlkZSwJCSJoaWRlIiwJCWV4X2hpZGUsCisJCQlCQU5HfEVYVFJBfE5PVFJMQ09NKSwKK0VYKENNRF9oaXN0b3J5LAkJImhpc3RvcnkiLAlleF9oaXN0b3J5LAorCQkJRVhUUkF8VFJMQkFSfENNRFdJTiksCitFWChDTURfaW5zZXJ0LAkJImluc2VydCIsCWV4X2FwcGVuZCwKKwkJCUJBTkd8UkFOR0V8VFJMQkFSfENNRFdJTnxNT0RJRlkpLAorRVgoQ01EX2lhYmJyZXYsCQkiaWFiYnJldiIsCWV4X2FiYnJldmlhdGUsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9pYWJjbGVhciwJImlhYmNsZWFyIiwJZXhfYWJjbGVhciwKKwkJCUVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX2lmLAkJImlmIiwJCWV4X2lmLAorCQkJRVhUUkF8Tk9UUkxDT018U0JPWE9LfENNRFdJTiksCitFWChDTURfaWp1bXAsCQkiaWp1bXAiLAlleF9maW5kcGF0LAorCQkJQkFOR3xSQU5HRXxERkxBTEx8V0hPTEVGT0xEfEVYVFJBKSwKK0VYKENNRF9pbGlzdCwJCSJpbGlzdCIsCWV4X2ZpbmRwYXQsCisJCQlCQU5HfFJBTkdFfERGTEFMTHxXSE9MRUZPTER8RVhUUkF8Q01EV0lOKSwKK0VYKENNRF9pbWFwLAkJImltYXAiLAkJZXhfbWFwLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfaW1hcGNsZWFyLAkiaW1hcGNsZWFyIiwJZXhfbWFwY2xlYXIsCisJCQlFWFRSQXxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9pbWVudSwJCSJpbWVudSIsCWV4X21lbnUsCisJCQlSQU5HRXxOT1RBRFJ8WkVST1J8RVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfaW5vcmVtYXAsCSJpbm9yZW1hcCIsCWV4X21hcCwKKwkJCUVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX2lub3JlYWJicmV2LAkiaW5vcmVhYmJyZXYiLAlleF9hYmJyZXZpYXRlLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfaW5vcmVtZW51LAkiaW5vcmVtZW51IiwJZXhfbWVudSwKKwkJCVJBTkdFfE5PVEFEUnxaRVJPUnxFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9pbnRybywJCSJpbnRybyIsCWV4X2ludHJvLAorCQkJVFJMQkFSfENNRFdJTiksCitFWChDTURfaXNlYXJjaCwJCSJpc2VhcmNoIiwJZXhfZmluZHBhdCwKKwkJCUJBTkd8UkFOR0V8REZMQUxMfFdIT0xFRk9MRHxFWFRSQXxDTURXSU4pLAorRVgoQ01EX2lzcGxpdCwJCSJpc3BsaXQiLAlleF9maW5kcGF0LAorCQkJQkFOR3xSQU5HRXxERkxBTEx8V0hPTEVGT0xEfEVYVFJBKSwKK0VYKENNRF9pdW5tYXAsCQkiaXVubWFwIiwJZXhfdW5tYXAsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9pdW5hYmJyZXYsCSJpdW5hYmJyZXYiLAlleF9hYmJyZXZpYXRlLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfaXVubWVudSwJCSJpdW5tZW51IiwJZXhfbWVudSwKKwkJCUVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX2pvaW4sCQkiam9pbiIsCQlleF9qb2luLAorCQkJQkFOR3xSQU5HRXxXSE9MRUZPTER8Q09VTlR8VFJMQkFSfENNRFdJTnxNT0RJRlkpLAorRVgoQ01EX2p1bXBzLAkJImp1bXBzIiwJZXhfanVtcHMsCisJCQlUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9rLAkJImsiLAkJZXhfbWFyaywKKwkJCVJBTkdFfFdPUkQxfFRSTEJBUnxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9rZWVwbWFya3MsCSJrZWVwbWFya3MiLAlleF93cm9uZ21vZGlmaWVyLAorCQkJTkVFREFSR3xFWFRSQXxOT1RSTENPTSksCitFWChDTURfa2VlcGp1bXBzLAkia2VlcGp1bXBzIiwJZXhfd3Jvbmdtb2RpZmllciwKKwkJCU5FRURBUkd8RVhUUkF8Tk9UUkxDT00pLAorRVgoQ01EX2xpc3QsCQkibGlzdCIsCQlleF9wcmludCwKKwkJCVJBTkdFfFdIT0xFRk9MRHxDT1VOVHxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9sYXN0LAkJImxhc3QiLAkJZXhfbGFzdCwKKwkJCUVYVFJBfEJBTkd8RURJVENNRHxBUkdPUFR8VFJMQkFSKSwKK0VYKENNRF9sYW5ndWFnZSwJImxhbmd1YWdlIiwJZXhfbGFuZ3VhZ2UsCisJCQlFWFRSQXxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9sY2QsCQkibGNkIiwJCWV4X2NkLAorCQkJRklMRTF8VFJMQkFSfENNRFdJTiksCitFWChDTURfbGNoZGlyLAkJImxjaGRpciIsCWV4X2NkLAorCQkJRklMRTF8VFJMQkFSfENNRFdJTiksCitFWChDTURfbGVmdCwJCSJsZWZ0IiwJCWV4X2FsaWduLAorCQkJVFJMQkFSfFJBTkdFfFdIT0xFRk9MRHxFWFRSQXxDTURXSU58TU9ESUZZKSwKK0VYKENNRF9sZWZ0YWJvdmUsCSJsZWZ0YWJvdmUiLAlleF93cm9uZ21vZGlmaWVyLAorCQkJTkVFREFSR3xFWFRSQXxOT1RSTENPTSksCitFWChDTURfbGV0LAkJImxldCIsCQlleF9sZXQsCisJCQlFWFRSQXxOT1RSTENPTXxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9sbWFwLAkJImxtYXAiLAkJZXhfbWFwLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfbG1hcGNsZWFyLAkibG1hcGNsZWFyIiwJZXhfbWFwY2xlYXIsCisJCQlFWFRSQXxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9sbm9yZW1hcCwJImxub3JlbWFwIiwJZXhfbWFwLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfbG9hZHZpZXcsCSJsb2FkdmlldyIsCWV4X2xvYWR2aWV3LAorCQkJRklMRTF8VFJMQkFSKSwKK0VYKENNRF9sb2Fka2V5bWFwLAkibG9hZGtleW1hcCIsCWV4X2xvYWRrZXltYXAsCisJCQlDTURXSU4pLAorRVgoQ01EX2xvY2ttYXJrcywJImxvY2ttYXJrcyIsCWV4X3dyb25nbW9kaWZpZXIsCisJCQlORUVEQVJHfEVYVFJBfE5PVFJMQ09NKSwKK0VYKENNRF9sdW5tYXAsCQkibHVubWFwIiwJZXhfdW5tYXAsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9scywJCSJscyIsCQlidWZsaXN0X2xpc3QsCisJCQlCQU5HfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX21vdmUsCQkibW92ZSIsCQlleF9jb3B5bW92ZSwKKwkJCVJBTkdFfFdIT0xFRk9MRHxFWFRSQXxUUkxCQVJ8Q01EV0lOfE1PRElGWSksCitFWChDTURfbWFyaywJCSJtYXJrIiwJCWV4X21hcmssCisJCQlSQU5HRXxXT1JEMXxUUkxCQVJ8U0JPWE9LfENNRFdJTiksCitFWChDTURfbWFrZSwJCSJtYWtlIiwJCWV4X21ha2UsCisJCQlCQU5HfEVYVFJBfE5PVFJMQ09NfFRSTEJBUnxYRklMRSksCitFWChDTURfbWFwLAkJIm1hcCIsCQlleF9tYXAsCisJCQlCQU5HfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX21hcGNsZWFyLAkibWFwY2xlYXIiLAlleF9tYXBjbGVhciwKKwkJCUVYVFJBfEJBTkd8VFJMQkFSfENNRFdJTiksCitFWChDTURfbWFya3MsCQkibWFya3MiLAlkb19tYXJrcywKKwkJCUVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX21hdGNoLAkJIm1hdGNoIiwJZXhfbWF0Y2gsCisJCQlFWFRSQXxDTURXSU4pLAorRVgoQ01EX21lbnUsCQkibWVudSIsCQlleF9tZW51LAorCQkJUkFOR0V8Tk9UQURSfFpFUk9SfEJBTkd8RVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfbWVudXRyYW5zbGF0ZSwJIm1lbnV0cmFuc2xhdGUiLCBleF9tZW51dHJhbnNsYXRlLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfbWVzc2FnZXMsCSJtZXNzYWdlcyIsCWV4X21lc3NhZ2VzLAorCQkJVFJMQkFSfENNRFdJTiksCitFWChDTURfbWtleHJjLAkJIm1rZXhyYyIsCWV4X21rcmMsCisJCQlCQU5HfEZJTEUxfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX21rc2Vzc2lvbiwJIm1rc2Vzc2lvbiIsCWV4X21rcmMsCisJCQlCQU5HfEZJTEUxfFRSTEJBUiksCitFWChDTURfbWt2aW1yYywJCSJta3ZpbXJjIiwJZXhfbWtyYywKKwkJCUJBTkd8RklMRTF8VFJMQkFSfENNRFdJTiksCitFWChDTURfbWt2aWV3LAkJIm1rdmlldyIsCWV4X21rcmMsCisJCQlCQU5HfEZJTEUxfFRSTEJBUiksCitFWChDTURfbW9kZSwJCSJtb2RlIiwJCWV4X21vZGUsCisJCQlXT1JEMXxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9uZXh0LAkJIm5leHQiLAkJZXhfbmV4dCwKKwkJCVJBTkdFfE5PVEFEUnxCQU5HfEZJTEVTfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfbmV3LAkJIm5ldyIsCQlleF9zcGxpdHZpZXcsCisJCQlCQU5HfEZJTEUxfFJBTkdFfE5PVEFEUnxFRElUQ01EfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX25tYXAsCQkibm1hcCIsCQlleF9tYXAsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9ubWFwY2xlYXIsCSJubWFwY2xlYXIiLAlleF9tYXBjbGVhciwKKwkJCUVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX25tZW51LAkJIm5tZW51IiwJZXhfbWVudSwKKwkJCVJBTkdFfE5PVEFEUnxaRVJPUnxFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9ubm9yZW1hcCwJIm5ub3JlbWFwIiwJZXhfbWFwLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfbm5vcmVtZW51LAkibm5vcmVtZW51IiwJZXhfbWVudSwKKwkJCVJBTkdFfE5PVEFEUnxaRVJPUnxFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9ub3JlbWFwLAkJIm5vcmVtYXAiLAlleF9tYXAsCisJCQlCQU5HfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX25vaGxzZWFyY2gsCSJub2hsc2VhcmNoIiwJZXhfbm9obHNlYXJjaCwKKwkJCVRSTEJBUnxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9ub3JlYWJicmV2LAkibm9yZWFiYnJldiIsCWV4X2FiYnJldmlhdGUsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9ub3JlbWVudSwJIm5vcmVtZW51IiwJZXhfbWVudSwKKwkJCVJBTkdFfE5PVEFEUnxaRVJPUnxCQU5HfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX25vcm1hbCwJCSJub3JtYWwiLAlleF9ub3JtYWwsCisJCQlSQU5HRXxCQU5HfEVYVFJBfE5FRURBUkd8Tk9UUkxDT018VVNFQ1RSTFZ8U0JPWE9LfENNRFdJTiksCitFWChDTURfbnVtYmVyLAkJIm51bWJlciIsCWV4X3ByaW50LAorCQkJUkFOR0V8V0hPTEVGT0xEfENPVU5UfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX251bm1hcCwJCSJudW5tYXAiLAlleF91bm1hcCwKKwkJCUVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX251bm1lbnUsCQkibnVubWVudSIsCWV4X21lbnUsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9vcGVuLAkJIm9wZW4iLAkJZXhfbmksCisJCQlUUkxCQVIpLAkvKiBub3Qgc3VwcG9ydGVkICovCitFWChDTURfb21hcCwJCSJvbWFwIiwJCWV4X21hcCwKKwkJCUVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX29tYXBjbGVhciwJIm9tYXBjbGVhciIsCWV4X21hcGNsZWFyLAorCQkJRVhUUkF8VFJMQkFSfENNRFdJTiksCitFWChDTURfb21lbnUsCQkib21lbnUiLAlleF9tZW51LAorCQkJUkFOR0V8Tk9UQURSfFpFUk9SfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX29ubHksCQkib25seSIsCQlleF9vbmx5LAorCQkJQkFOR3xUUkxCQVIpLAorRVgoQ01EX29ub3JlbWFwLAkib25vcmVtYXAiLAlleF9tYXAsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9vbm9yZW1lbnUsCSJvbm9yZW1lbnUiLAlleF9tZW51LAorCQkJUkFOR0V8Tk9UQURSfFpFUk9SfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX29wdGlvbnMsCQkib3B0aW9ucyIsCWV4X29wdGlvbnMsCisJCQlUUkxCQVIpLAorRVgoQ01EX291bm1hcCwJCSJvdW5tYXAiLAlleF91bm1hcCwKKwkJCUVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX291bm1lbnUsCQkib3VubWVudSIsCWV4X21lbnUsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF9wcmludCwJCSJwcmludCIsCWV4X3ByaW50LAorCQkJUkFOR0V8V0hPTEVGT0xEfENPVU5UfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3BjbG9zZSwJCSJwY2xvc2UiLAlleF9wY2xvc2UsCisJCQlCQU5HfFRSTEJBUiksCitFWChDTURfcGVybCwJCSJwZXJsIiwJCWV4X3BlcmwsCisJCQlSQU5HRXxFWFRSQXxERkxBTEx8TkVFREFSR3xTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9wZXJsZG8sCQkicGVybGRvIiwJZXhfcGVybGRvLAorCQkJUkFOR0V8RVhUUkF8REZMQUxMfE5FRURBUkd8Q01EV0lOKSwKK0VYKENNRF9wZWRpdCwJCSJwZWRpdCIsCWV4X3BlZGl0LAorCQkJQkFOR3xGSUxFMXxFRElUQ01EfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX3BvcCwJCSJwb3AiLAkJZXhfdGFnLAorCQkJUkFOR0V8Tk9UQURSfEJBTkd8Q09VTlR8VFJMQkFSfFpFUk9SKSwKK0VYKENNRF9wb3B1cCwJCSJwb3B1cCIsCWV4X3BvcHVwLAorCQkJTkVFREFSR3xFWFRSQXxUUkxCQVJ8Tk9UUkxDT018Q01EV0lOKSwKK0VYKENNRF9wcG9wLAkJInBwb3AiLAkJZXhfcHRhZywKKwkJCVJBTkdFfE5PVEFEUnxCQU5HfENPVU5UfFRSTEJBUnxaRVJPUiksCitFWChDTURfcHJlc2VydmUsCSJwcmVzZXJ2ZSIsCWV4X3ByZXNlcnZlLAorCQkJVFJMQkFSKSwKK0VYKENNRF9wcmV2aW91cywJInByZXZpb3VzIiwJZXhfcHJldmlvdXMsCisJCQlFWFRSQXxSQU5HRXxOT1RBRFJ8Q09VTlR8QkFOR3xFRElUQ01EfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX3Byb21wdGZpbmQsCSJwcm9tcHRmaW5kIiwJZ3VpX21jaF9maW5kX2RpYWxvZywKKwkJCUVYVFJBfE5PVFJMQ09NfENNRFdJTiksCitFWChDTURfcHJvbXB0cmVwbCwJInByb21wdHJlcGwiLAlndWlfbWNoX3JlcGxhY2VfZGlhbG9nLAorCQkJRVhUUkF8Tk9UUkxDT018Q01EV0lOKSwKK0VYKENNRF9wc2VhcmNoLAkJInBzZWFyY2giLAlleF9wc2VhcmNoLAorCQkJQkFOR3xSQU5HRXxXSE9MRUZPTER8REZMQUxMfEVYVFJBKSwKK0VYKENNRF9wdGFnLAkJInB0YWciLAkJZXhfcHRhZywKKwkJCVJBTkdFfE5PVEFEUnxCQU5HfFdPUkQxfFRSTEJBUnxaRVJPUiksCitFWChDTURfcHROZXh0LAkJInB0TmV4dCIsCWV4X3B0YWcsCisJCQlSQU5HRXxOT1RBRFJ8QkFOR3xUUkxCQVJ8WkVST1IpLAorRVgoQ01EX3B0Zmlyc3QsCQkicHRmaXJzdCIsCWV4X3B0YWcsCisJCQlSQU5HRXxOT1RBRFJ8QkFOR3xUUkxCQVJ8WkVST1IpLAorRVgoQ01EX3B0anVtcCwJCSJwdGp1bXAiLAlleF9wdGFnLAorCQkJQkFOR3xUUkxCQVJ8V09SRDEpLAorRVgoQ01EX3B0bGFzdCwJCSJwdGxhc3QiLAlleF9wdGFnLAorCQkJQkFOR3xUUkxCQVIpLAorRVgoQ01EX3B0bmV4dCwJCSJwdG5leHQiLAlleF9wdGFnLAorCQkJUkFOR0V8Tk9UQURSfEJBTkd8VFJMQkFSfFpFUk9SKSwKK0VYKENNRF9wdHByZXZpb3VzLAkicHRwcmV2aW91cyIsCWV4X3B0YWcsCisJCQlSQU5HRXxOT1RBRFJ8QkFOR3xUUkxCQVJ8WkVST1IpLAorRVgoQ01EX3B0cmV3aW5kLAkicHRyZXdpbmQiLAlleF9wdGFnLAorCQkJUkFOR0V8Tk9UQURSfEJBTkd8VFJMQkFSfFpFUk9SKSwKK0VYKENNRF9wdHNlbGVjdCwJInB0c2VsZWN0IiwJZXhfcHRhZywKKwkJCUJBTkd8VFJMQkFSfFdPUkQxKSwKK0VYKENNRF9wdXQsCQkicHV0IiwJCWV4X3B1dCwKKwkJCVJBTkdFfFdIT0xFRk9MRHxCQU5HfFJFR1NUUnxUUkxCQVJ8WkVST1J8Q01EV0lOfE1PRElGWSksCitFWChDTURfcHdkLAkJInB3ZCIsCQlleF9wd2QsCisJCQlUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9weXRob24sCQkicHl0aG9uIiwJZXhfcHl0aG9uLAorCQkJUkFOR0V8RVhUUkF8TkVFREFSR3xDTURXSU4pLAorRVgoQ01EX3B5ZmlsZSwJCSJweWZpbGUiLAlleF9weWZpbGUsCisJCQlSQU5HRXxGSUxFMXxORUVEQVJHfENNRFdJTiksCitFWChDTURfcXVpdCwJCSJxdWl0IiwJCWV4X3F1aXQsCisJCQlCQU5HfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3F1aXRhbGwsCQkicXVpdGFsbCIsCWV4X3F1aXRfYWxsLAorCQkJQkFOR3xUUkxCQVIpLAorRVgoQ01EX3FhbGwsCQkicWFsbCIsCQlleF9xdWl0X2FsbCwKKwkJCUJBTkd8VFJMQkFSfENNRFdJTiksCitFWChDTURfcmVhZCwJCSJyZWFkIiwJCWV4X3JlYWQsCisJCQlCQU5HfFJBTkdFfFdIT0xFRk9MRHxGSUxFMXxBUkdPUFR8VFJMQkFSfFpFUk9SfENNRFdJTnxNT0RJRlkpLAorRVgoQ01EX3JlY292ZXIsCQkicmVjb3ZlciIsCWV4X3JlY292ZXIsCisJCQlCQU5HfEZJTEUxfFRSTEJBUiksCitFWChDTURfcmVkbywJCSJyZWRvIiwJCWV4X3JlZG8sCisJCQlUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9yZWRpciwJCSJyZWRpciIsCWV4X3JlZGlyLAorCQkJQkFOR3xGSUxFU3xUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9yZWRyYXcsCQkicmVkcmF3IiwJZXhfcmVkcmF3LAorCQkJQkFOR3xUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9yZWRyYXdzdGF0dXMsCSJyZWRyYXdzdGF0dXMiLAlleF9yZWRyYXdzdGF0dXMsCisJCQlCQU5HfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3JlZ2lzdGVycywJInJlZ2lzdGVycyIsCWV4X2Rpc3BsYXksCisJCQlFWFRSQXxOT1RSTENPTXxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9yZXNpemUsCQkicmVzaXplIiwJZXhfcmVzaXplLAorCQkJUkFOR0V8Tk9UQURSfFRSTEJBUnxXT1JEMSksCitFWChDTURfcmV0YWIsCQkicmV0YWIiLAlleF9yZXRhYiwKKwkJCVRSTEJBUnxSQU5HRXxXSE9MRUZPTER8REZMQUxMfEJBTkd8V09SRDF8Q01EV0lOfE1PRElGWSksCitFWChDTURfcmV0dXJuLAkJInJldHVybiIsCWV4X3JldHVybiwKKwkJCUVYVFJBfE5PVFJMQ09NfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX3Jld2luZCwJCSJyZXdpbmQiLAlleF9yZXdpbmQsCisJCQlFWFRSQXxCQU5HfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfcmlnaHQsCQkicmlnaHQiLAlleF9hbGlnbiwKKwkJCVRSTEJBUnxSQU5HRXxXSE9MRUZPTER8RVhUUkF8Q01EV0lOfE1PRElGWSksCitFWChDTURfcmlnaHRiZWxvdywJInJpZ2h0YmVsb3ciLAlleF93cm9uZ21vZGlmaWVyLAorCQkJTkVFREFSR3xFWFRSQXxOT1RSTENPTSksCitFWChDTURfcnVudGltZSwJCSJydW50aW1lIiwJZXhfcnVudGltZSwKKwkJCUJBTkd8TkVFREFSR3xGSUxFU3xUUkxCQVJ8U0JPWE9LfENNRFdJTiksCitFWChDTURfcnVieSwJCSJydWJ5IiwJCWV4X3J1YnksCisJCQlSQU5HRXxFWFRSQXxORUVEQVJHfENNRFdJTiksCitFWChDTURfcnVieWRvLAkJInJ1YnlkbyIsCWV4X3J1YnlkbywKKwkJCVJBTkdFfERGTEFMTHxFWFRSQXxORUVEQVJHfENNRFdJTiksCitFWChDTURfcnVieWZpbGUsCSJydWJ5ZmlsZSIsCWV4X3J1YnlmaWxlLAorCQkJUkFOR0V8RklMRTF8TkVFREFSR3xDTURXSU4pLAorRVgoQ01EX3J2aW1pbmZvLAkicnZpbWluZm8iLAlleF92aW1pbmZvLAorCQkJQkFOR3xGSUxFMXxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9zdWJzdGl0dXRlLAkic3Vic3RpdHV0ZSIsCWRvX3N1YiwKKwkJCVJBTkdFfFdIT0xFRk9MRHxFWFRSQXxDTURXSU58TU9ESUZZKSwKK0VYKENNRF9zTmV4dCwJCSJzTmV4dCIsCWV4X3ByZXZpb3VzLAorCQkJRVhUUkF8UkFOR0V8Tk9UQURSfENPVU5UfEJBTkd8RURJVENNRHxBUkdPUFR8VFJMQkFSKSwKK0VYKENNRF9zYXJndW1lbnQsCSJzYXJndW1lbnQiLAlleF9hcmd1bWVudCwKKwkJCUJBTkd8UkFOR0V8Tk9UQURSfENPVU5UfEVYVFJBfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfc2FsbCwJCSJzYWxsIiwJCWV4X2FsbCwKKwkJCVJBTkdFfE5PVEFEUnxDT1VOVHxUUkxCQVIpLAorRVgoQ01EX3NhdmVhcywJCSJzYXZlYXMiLAlleF93cml0ZSwKKwkJCUJBTkd8REZMQUxMfEZJTEUxfEFSR09QVHxDTURXSU58VFJMQkFSKSwKK0VYKENNRF9zYnVmZmVyLAkJInNidWZmZXIiLAlleF9idWZmZXIsCisJCQlCQU5HfFJBTkdFfE5PVEFEUnxCVUZOQU1FfEJVRlVOTHxDT1VOVHxFWFRSQXxUUkxCQVIpLAorRVgoQ01EX3NiTmV4dCwJCSJzYk5leHQiLAlleF9icHJldmlvdXMsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSKSwKK0VYKENNRF9zYmFsbCwJCSJzYmFsbCIsCWV4X2J1ZmZlcl9hbGwsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSKSwKK0VYKENNRF9zYmZpcnN0LAkJInNiZmlyc3QiLAlleF9icmV3aW5kLAorCQkJVFJMQkFSKSwKK0VYKENNRF9zYmxhc3QsCQkic2JsYXN0IiwJZXhfYmxhc3QsCisJCQlUUkxCQVIpLAorRVgoQ01EX3NibW9kaWZpZWQsCSJzYm1vZGlmaWVkIiwJZXhfYm1vZGlmaWVkLAorCQkJUkFOR0V8Tk9UQURSfENPVU5UfFRSTEJBUiksCitFWChDTURfc2JuZXh0LAkJInNibmV4dCIsCWV4X2JuZXh0LAorCQkJUkFOR0V8Tk9UQURSfENPVU5UfFRSTEJBUiksCitFWChDTURfc2JwcmV2aW91cywJInNicHJldmlvdXMiLAlleF9icHJldmlvdXMsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSKSwKK0VYKENNRF9zYnJld2luZCwJInNicmV3aW5kIiwJZXhfYnJld2luZCwKKwkJCVRSTEJBUiksCitFWChDTURfc2NyaXB0bmFtZXMsCSJzY3JpcHRuYW1lcyIsCWV4X3NjcmlwdG5hbWVzLAorCQkJVFJMQkFSfENNRFdJTiksCitFWChDTURfc2NyaXB0ZW5jb2RpbmcsCSJzY3JpcHRlbmNvZGluZyIsIGV4X3NjcmlwdGVuY29kaW5nLAorCQkJV09SRDF8VFJMQkFSfENNRFdJTiksCitFWChDTURfc2NzY29wZSwJCSJzY3Njb3BlIiwJZG9fc2NzY29wZSwKKwkJCUVYVFJBfE5PVFJMQ09NfFNCT1hPSyksCitFWChDTURfc2V0LAkJInNldCIsCQlleF9zZXQsCisJCQlUUkxCQVJ8RVhUUkF8Q01EV0lOfFNCT1hPSyksCitFWChDTURfc2V0ZmlsZXR5cGUsCSJzZXRmaWxldHlwZSIsCWV4X3NldGZpbGV0eXBlLAorCQkJVFJMQkFSfEVYVFJBfE5FRURBUkd8Q01EV0lOKSwKK0VYKENNRF9zZXRnbG9iYWwsCSJzZXRnbG9iYWwiLAlleF9zZXQsCisJCQlUUkxCQVJ8RVhUUkF8Q01EV0lOKSwKK0VYKENNRF9zZXRsb2NhbCwJInNldGxvY2FsIiwJZXhfc2V0LAorCQkJVFJMQkFSfEVYVFJBfENNRFdJTiksCitFWChDTURfc2ZpbmQsCQkic2ZpbmQiLAlleF9zcGxpdHZpZXcsCisJCQlCQU5HfEZJTEUxfFJBTkdFfE5PVEFEUnxFRElUQ01EfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX3NmaXJzdCwJCSJzZmlyc3QiLAlleF9yZXdpbmQsCisJCQlFWFRSQXxCQU5HfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfc2hlbGwsCQkic2hlbGwiLAlleF9zaGVsbCwKKwkJCVRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3NpbWFsdCwJCSJzaW1hbHQiLAlleF9zaW1hbHQsCisJCQlORUVEQVJHfFdPUkQxfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3NpZ24sCQkic2lnbiIsCQlleF9zaWduLAorCQkJTkVFREFSR3xSQU5HRXxOT1RBRFJ8RVhUUkF8Q01EV0lOKSwKK0VYKENNRF9zaWxlbnQsCQkic2lsZW50IiwJZXhfd3Jvbmdtb2RpZmllciwKKwkJCU5FRURBUkd8RVhUUkF8QkFOR3xOT1RSTENPTXxTQk9YT0t8Q01EV0lOKSwKK0VYKENNRF9zbGVlcCwJCSJzbGVlcCIsCWV4X3NsZWVwLAorCQkJUkFOR0V8Tk9UQURSfENPVU5UfEVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3NsYXN0LAkJInNsYXN0IiwJZXhfbGFzdCwKKwkJCUVYVFJBfEJBTkd8RURJVENNRHxBUkdPUFR8VFJMQkFSKSwKK0VYKENNRF9zbWFnaWMsCQkic21hZ2ljIiwJZXhfc3VibWFnaWMsCisJCQlSQU5HRXxXSE9MRUZPTER8RVhUUkF8Q01EV0lOfE1PRElGWSksCitFWChDTURfc25leHQsCQkic25leHQiLAlleF9uZXh0LAorCQkJUkFOR0V8Tk9UQURSfEJBTkd8RklMRVN8RURJVENNRHxBUkdPUFR8VFJMQkFSKSwKK0VYKENNRF9zbmlmZiwJCSJzbmlmZiIsCWV4X3NuaWZmLAorCQkJRVhUUkF8VFJMQkFSKSwKK0VYKENNRF9zbm9tYWdpYywJInNub21hZ2ljIiwJZXhfc3VibWFnaWMsCisJCQlSQU5HRXxXSE9MRUZPTER8RVhUUkF8Q01EV0lOfE1PRElGWSksCitFWChDTURfc291cmNlLAkJInNvdXJjZSIsCWV4X3NvdXJjZSwKKwkJCUJBTkd8RklMRTF8VFJMQkFSfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX3NwbGl0LAkJInNwbGl0IiwJZXhfc3BsaXR2aWV3LAorCQkJQkFOR3xGSUxFMXxSQU5HRXxOT1RBRFJ8RURJVENNRHxBUkdPUFR8VFJMQkFSKSwKK0VYKENNRF9zcHJldmlvdXMsCSJzcHJldmlvdXMiLAlleF9wcmV2aW91cywKKwkJCUVYVFJBfFJBTkdFfE5PVEFEUnxDT1VOVHxCQU5HfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfc3Jld2luZCwJCSJzcmV3aW5kIiwJZXhfcmV3aW5kLAorCQkJRVhUUkF8QkFOR3xFRElUQ01EfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX3N0b3AsCQkic3RvcCIsCQlleF9zdG9wLAorCQkJVFJMQkFSfEJBTkd8Q01EV0lOKSwKK0VYKENNRF9zdGFnLAkJInN0YWciLAkJZXhfc3RhZywKKwkJCVJBTkdFfE5PVEFEUnxCQU5HfFdPUkQxfFRSTEJBUnxaRVJPUiksCitFWChDTURfc3RhcnRpbnNlcnQsCSJzdGFydGluc2VydCIsCWV4X3N0YXJ0aW5zZXJ0LAorCQkJQkFOR3xUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9zdG9waW5zZXJ0LAkic3RvcGluc2VydCIsCWV4X3N0b3BpbnNlcnQsCisJCQlCQU5HfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3N0anVtcCwJCSJzdGp1bXAiLAlleF9zdGFnLAorCQkJQkFOR3xUUkxCQVJ8V09SRDEpLAorRVgoQ01EX3N0c2VsZWN0LAkic3RzZWxlY3QiLAlleF9zdGFnLAorCQkJQkFOR3xUUkxCQVJ8V09SRDEpLAorRVgoQ01EX3N1bmhpZGUsCQkic3VuaGlkZSIsCWV4X2J1ZmZlcl9hbGwsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSKSwKK0VYKENNRF9zdXNwZW5kLAkJInN1c3BlbmQiLAlleF9zdG9wLAorCQkJVFJMQkFSfEJBTkd8Q01EV0lOKSwKK0VYKENNRF9zdmlldywJCSJzdmlldyIsCWV4X3NwbGl0dmlldywKKwkJCU5FRURBUkd8UkFOR0V8Tk9UQURSfEJBTkd8RklMRTF8RURJVENNRHxBUkdPUFR8VFJMQkFSKSwKK0VYKENNRF9zd2FwbmFtZSwJInN3YXBuYW1lIiwJZXhfc3dhcG5hbWUsCisJCQlUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9zeW50YXgsCQkic3ludGF4IiwJZXhfc3ludGF4LAorCQkJRVhUUkF8Tk9UUkxDT018Q01EV0lOKSwKK0VYKENNRF9zeW5jYmluZCwJInN5bmNiaW5kIiwJZXhfc3luY2JpbmQsCisJCQlUUkxCQVIpLAorRVgoQ01EX3QsCQkidCIsCQlleF9jb3B5bW92ZSwKKwkJCVJBTkdFfFdIT0xFRk9MRHxFWFRSQXxUUkxCQVJ8Q01EV0lOfE1PRElGWSksCitFWChDTURfdE5leHQsCQkidE5leHQiLAlleF90YWcsCisJCQlSQU5HRXxOT1RBRFJ8QkFOR3xUUkxCQVJ8WkVST1IpLAorRVgoQ01EX3RhZywJCSJ0YWciLAkJZXhfdGFnLAorCQkJUkFOR0V8Tk9UQURSfEJBTkd8V09SRDF8VFJMQkFSfFpFUk9SKSwKK0VYKENNRF90YWdzLAkJInRhZ3MiLAkJZG9fdGFncywKKwkJCVRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3RjbCwJCSJ0Y2wiLAkJZXhfdGNsLAorCQkJUkFOR0V8RVhUUkF8TkVFREFSR3xDTURXSU4pLAorRVgoQ01EX3RjbGRvLAkJInRjbGRvIiwJZXhfdGNsZG8sCisJCQlSQU5HRXxERkxBTEx8RVhUUkF8TkVFREFSR3xDTURXSU4pLAorRVgoQ01EX3RjbGZpbGUsCQkidGNsZmlsZSIsCWV4X3RjbGZpbGUsCisJCQlSQU5HRXxGSUxFMXxORUVEQVJHfENNRFdJTiksCitFWChDTURfdGVhcm9mZiwJCSJ0ZWFyb2ZmIiwJZXhfdGVhcm9mZiwKKwkJCU5FRURBUkd8RVhUUkF8VFJMQkFSfE5PVFJMQ09NfENNRFdJTiksCitFWChDTURfdGZpcnN0LAkJInRmaXJzdCIsCWV4X3RhZywKKwkJCVJBTkdFfE5PVEFEUnxCQU5HfFRSTEJBUnxaRVJPUiksCitFWChDTURfdGhyb3csCQkidGhyb3ciLAlleF90aHJvdywKKwkJCUVYVFJBfE5FRURBUkd8U0JPWE9LfENNRFdJTiksCitFWChDTURfdGp1bXAsCQkidGp1bXAiLAlleF90YWcsCisJCQlCQU5HfFRSTEJBUnxXT1JEMSksCitFWChDTURfdGxhc3QsCQkidGxhc3QiLAlleF90YWcsCisJCQlCQU5HfFRSTEJBUiksCitFWChDTURfdG1lbnUsCQkidG1lbnUiLAlleF9tZW51LAorCQkJUkFOR0V8Tk9UQURSfFpFUk9SfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX3RuZXh0LAkJInRuZXh0IiwJZXhfdGFnLAorCQkJUkFOR0V8Tk9UQURSfEJBTkd8VFJMQkFSfFpFUk9SKSwKK0VYKENNRF90b3BsZWZ0LAkJInRvcGxlZnQiLAlleF93cm9uZ21vZGlmaWVyLAorCQkJTkVFREFSR3xFWFRSQXxOT1RSTENPTSksCitFWChDTURfdHByZXZpb3VzLAkidHByZXZpb3VzIiwJZXhfdGFnLAorCQkJUkFOR0V8Tk9UQURSfEJBTkd8VFJMQkFSfFpFUk9SKSwKK0VYKENNRF90cmV3aW5kLAkJInRyZXdpbmQiLAlleF90YWcsCisJCQlSQU5HRXxOT1RBRFJ8QkFOR3xUUkxCQVJ8WkVST1IpLAorRVgoQ01EX3RyeSwJCSJ0cnkiLAkJZXhfdHJ5LAorCQkJVFJMQkFSfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX3RzZWxlY3QsCQkidHNlbGVjdCIsCWV4X3RhZywKKwkJCUJBTkd8VFJMQkFSfFdPUkQxKSwKK0VYKENNRF90dW5tZW51LAkJInR1bm1lbnUiLAlleF9tZW51LAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfdW5kbywJCSJ1bmRvIiwJCWV4X3VuZG8sCisJCQlUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF91bmFiYnJldmlhdGUsCSJ1bmFiYnJldmlhdGUiLAlleF9hYmJyZXZpYXRlLAorCQkJRVhUUkF8VFJMQkFSfE5PVFJMQ09NfFVTRUNUUkxWfENNRFdJTiksCitFWChDTURfdW5oaWRlLAkJInVuaGlkZSIsCWV4X2J1ZmZlcl9hbGwsCisJCQlSQU5HRXxOT1RBRFJ8Q09VTlR8VFJMQkFSKSwKK0VYKENNRF91bmxldCwJCSJ1bmxldCIsCWV4X3VubGV0LAorCQkJQkFOR3xFWFRSQXxORUVEQVJHfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX3VubWFwLAkJInVubWFwIiwJZXhfdW5tYXAsCisJCQlCQU5HfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX3VubWVudSwJCSJ1bm1lbnUiLAlleF9tZW51LAorCQkJQkFOR3xFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF91cGRhdGUsCQkidXBkYXRlIiwJZXhfdXBkYXRlLAorCQkJUkFOR0V8V0hPTEVGT0xEfEJBTkd8RklMRTF8QVJHT1BUfERGTEFMTHxUUkxCQVIpLAorRVgoQ01EX3ZnbG9iYWwsCQkidmdsb2JhbCIsCWV4X2dsb2JhbCwKKwkJCVJBTkdFfFdIT0xFRk9MRHxFWFRSQXxERkxBTEx8Q01EV0lOKSwKK0VYKENNRF92ZXJzaW9uLAkJInZlcnNpb24iLAlleF92ZXJzaW9uLAorCQkJRVhUUkF8VFJMQkFSfENNRFdJTiksCitFWChDTURfdmVyYm9zZSwJCSJ2ZXJib3NlIiwJZXhfd3Jvbmdtb2RpZmllciwKKwkJCU5FRURBUkd8UkFOR0V8Tk9UQURSfEVYVFJBfE5PVFJMQ09NfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX3ZlcnRpY2FsLAkidmVydGljYWwiLAlleF93cm9uZ21vZGlmaWVyLAorCQkJTkVFREFSR3xFWFRSQXxOT1RSTENPTSksCitFWChDTURfdmlzdWFsLAkJInZpc3VhbCIsCWV4X2VkaXQsCisJCQlCQU5HfEZJTEUxfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfdmlldywJCSJ2aWV3IiwJCWV4X2VkaXQsCisJCQlCQU5HfEZJTEUxfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfdm1hcCwJCSJ2bWFwIiwJCWV4X21hcCwKKwkJCUVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX3ZtYXBjbGVhciwJInZtYXBjbGVhciIsCWV4X21hcGNsZWFyLAorCQkJRVhUUkF8VFJMQkFSfENNRFdJTiksCitFWChDTURfdm1lbnUsCQkidm1lbnUiLAlleF9tZW51LAorCQkJUkFOR0V8Tk9UQURSfFpFUk9SfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX3Zub3JlbWFwLAkidm5vcmVtYXAiLAlleF9tYXAsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF92bmV3LAkJInZuZXciLAkJZXhfc3BsaXR2aWV3LAorCQkJQkFOR3xGSUxFMXxSQU5HRXxOT1RBRFJ8RURJVENNRHxBUkdPUFR8VFJMQkFSKSwKK0VYKENNRF92bm9yZW1lbnUsCSJ2bm9yZW1lbnUiLAlleF9tZW51LAorCQkJUkFOR0V8Tk9UQURSfFpFUk9SfEVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX3ZzcGxpdCwJCSJ2c3BsaXQiLAlleF9zcGxpdHZpZXcsCisJCQlCQU5HfEZJTEUxfFJBTkdFfE5PVEFEUnxFRElUQ01EfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX3Z1bm1hcCwJCSJ2dW5tYXAiLAlleF91bm1hcCwKKwkJCUVYVFJBfFRSTEJBUnxOT1RSTENPTXxVU0VDVFJMVnxDTURXSU4pLAorRVgoQ01EX3Z1bm1lbnUsCQkidnVubWVudSIsCWV4X21lbnUsCisJCQlFWFRSQXxUUkxCQVJ8Tk9UUkxDT018VVNFQ1RSTFZ8Q01EV0lOKSwKK0VYKENNRF93cml0ZSwJCSJ3cml0ZSIsCWV4X3dyaXRlLAorCQkJUkFOR0V8V0hPTEVGT0xEfEJBTkd8RklMRTF8QVJHT1BUfERGTEFMTHxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF93TmV4dCwJCSJ3TmV4dCIsCWV4X3duZXh0LAorCQkJUkFOR0V8V0hPTEVGT0xEfE5PVEFEUnxCQU5HfEZJTEUxfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX3dhbGwsCQkid2FsbCIsCQlkb193cWFsbCwKKwkJCUJBTkd8VFJMQkFSfENNRFdJTiksCitFWChDTURfd2hpbGUsCQkid2hpbGUiLAlleF93aGlsZSwKKwkJCUVYVFJBfE5PVFJMQ09NfFNCT1hPS3xDTURXSU4pLAorRVgoQ01EX3dpbnNpemUsCQkid2luc2l6ZSIsCWV4X3dpbnNpemUsCisJCQlFWFRSQXxORUVEQVJHfFRSTEJBUiksCitFWChDTURfd2luY21kLAkJIndpbmNtZCIsCWV4X3dpbmNtZCwKKwkJCU5FRURBUkd8V09SRDF8UkFOR0V8Tk9UQURSKSwKK0VYKENNRF93aW5kbywJCSJ3aW5kbyIsCWV4X2xpc3RkbywKKwkJCUJBTkd8TkVFREFSR3xFWFRSQXxOT1RSTENPTSksCitFWChDTURfd2lucG9zLAkJIndpbnBvcyIsCWV4X3dpbnBvcywKKwkJCUVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3duZXh0LAkJInduZXh0IiwJZXhfd25leHQsCisJCQlSQU5HRXxOT1RBRFJ8QkFOR3xGSUxFMXxBUkdPUFR8VFJMQkFSKSwKK0VYKENNRF93cHJldmlvdXMsCSJ3cHJldmlvdXMiLAlleF93bmV4dCwKKwkJCVJBTkdFfE5PVEFEUnxCQU5HfEZJTEUxfEFSR09QVHxUUkxCQVIpLAorRVgoQ01EX3dxLAkJIndxIiwJCWV4X2V4aXQsCisJCQlSQU5HRXxXSE9MRUZPTER8QkFOR3xGSUxFMXxBUkdPUFR8REZMQUxMfFRSTEJBUiksCitFWChDTURfd3FhbGwsCQkid3FhbGwiLAlkb193cWFsbCwKKwkJCUJBTkd8RklMRTF8QVJHT1BUfERGTEFMTHxUUkxCQVIpLAorRVgoQ01EX3dzdmVyYiwJCSJ3c3ZlcmIiLAlleF93c3ZlcmIsCisJCQlFWFRSQXxOT1RBRFJ8TkVFREFSRyksCitFWChDTURfd3ZpbWluZm8sCSJ3dmltaW5mbyIsCWV4X3ZpbWluZm8sCisJCQlCQU5HfEZJTEUxfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3hpdCwJCSJ4aXQiLAkJZXhfZXhpdCwKKwkJCVJBTkdFfFdIT0xFRk9MRHxCQU5HfEZJTEUxfEFSR09QVHxERkxBTEx8VFJMQkFSfENNRFdJTiksCitFWChDTURfeGFsbCwJCSJ4YWxsIiwJCWRvX3dxYWxsLAorCQkJQkFOR3xUUkxCQVIpLAorRVgoQ01EX3lhbmssCQkieWFuayIsCQlleF9vcGVyYXRvcnMsCisJCQlSQU5HRXxXSE9MRUZPTER8UkVHU1RSfENPVU5UfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX3osCQkieiIsCQlleF96LAorCQkJUkFOR0V8V0hPTEVGT0xEfEVYVFJBfFRSTEJBUnxDTURXSU4pLAorCisvKiBjb21tYW5kcyB0aGF0IGRvbid0IHN0YXJ0IHdpdGggYSBsb3dlcmNhc2UgbGV0dGVyICovCitFWChDTURfYmFuZywJCSIhIiwJCWV4X2JhbmcsCisJCQlSQU5HRXxXSE9MRUZPTER8QkFOR3xGSUxFU3xDTURXSU4pLAorRVgoQ01EX3BvdW5kLAkJIiMiLAkJZXhfcHJpbnQsCisJCQlSQU5HRXxXSE9MRUZPTER8Q09VTlR8VFJMQkFSfENNRFdJTiksCitFWChDTURfYW5kLAkJIiYiLAkJZG9fc3ViLAorCQkJUkFOR0V8V0hPTEVGT0xEfEVYVFJBfENNRFdJTnxNT0RJRlkpLAorRVgoQ01EX3N0YXIsCQkiKiIsCQlleF9hdCwKKwkJCVJBTkdFfFdIT0xFRk9MRHxFWFRSQXxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9sc2hpZnQsCQkiPCIsCQlleF9vcGVyYXRvcnMsCisJCQlSQU5HRXxXSE9MRUZPTER8Q09VTlR8VFJMQkFSfENNRFdJTnxNT0RJRlkpLAorRVgoQ01EX2VxdWFsLAkJIj0iLAkJZXhfZXF1YWwsCisJCQlSQU5HRXxUUkxCQVJ8REZMQUxMfENNRFdJTiksCitFWChDTURfcnNoaWZ0LAkJIj4iLAkJZXhfb3BlcmF0b3JzLAorCQkJUkFOR0V8V0hPTEVGT0xEfENPVU5UfFRSTEJBUnxDTURXSU58TU9ESUZZKSwKK0VYKENNRF9hdCwJCSJAIiwJCWV4X2F0LAorCQkJUkFOR0V8V0hPTEVGT0xEfEVYVFJBfFRSTEJBUnxDTURXSU4pLAorRVgoQ01EX05leHQsCQkiTmV4dCIsCQlleF9wcmV2aW91cywKKwkJCUVYVFJBfFJBTkdFfE5PVEFEUnxDT1VOVHxCQU5HfEVESVRDTUR8QVJHT1BUfFRSTEJBUiksCitFWChDTURfUHJpbnQsCQkiUHJpbnQiLAlleF9wcmludCwKKwkJCVJBTkdFfFdIT0xFRk9MRHxDT1VOVHxUUkxCQVJ8Q01EV0lOKSwKK0VYKENNRF9YLAkJIlgiLAkJZXhfWCwKKwkJCVRSTEJBUiksCitFWChDTURfdGlsZGUsCQkifiIsCQlkb19zdWIsCisJCQlSQU5HRXxXSE9MRUZPTER8RVhUUkF8Q01EV0lOfE1PRElGWSksCisKKyNpZm5kZWYgRE9fREVDTEFSRV9FWENNRAorI2lmZGVmIEZFQVRfVVNSX0NNRFMKKyAgICBDTURfU0laRSwJCS8qIE1VU1QgYmUgYWZ0ZXIgYWxsIHJlYWwgY29tbWFuZHMhICovCisgICAgQ01EX1VTRVIgPSAtMSwJLyogVXNlci1kZWZpbmVkIGNvbW1hbmQgKi8KKyAgICBDTURfVVNFUl9CVUYgPSAtMgkvKiBVc2VyLWRlZmluZWQgY29tbWFuZCBsb2NhbCB0byBidWZmZXIgKi8KKyNlbHNlCisgICAgQ01EX1NJWkUJLyogTVVTVCBiZSB0aGUgbGFzdCBvbmUhICovCisjZW5kaWYKKyNlbmRpZgorfTsKKworI2RlZmluZSBVU0VSX0NNRElEWChpZHgpICgoaW50KShpZHgpIDwgMCkKKworI2lmbmRlZiBET19ERUNMQVJFX0VYQ01ECit0eXBlZGVmIGVudW0gQ01EX2luZGV4IGNtZGlkeF9UOworCisvKgorICogQXJndW1lbnRzIHVzZWQgZm9yIEV4IGNvbW1hbmRzLgorICovCitzdHJ1Y3QgZXhhcmcKK3sKKyAgICBjaGFyX3UJKmFyZzsJCS8qIGFyZ3VtZW50IG9mIHRoZSBjb21tYW5kICovCisgICAgY2hhcl91CSpuZXh0Y21kOwkvKiBuZXh0IGNvbW1hbmQgKE5VTEwgaWYgbm9uZSkgKi8KKyAgICBjaGFyX3UJKmNtZDsJCS8qIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIChleGNlcHQgZm9yIDptYWtlKSAqLworICAgIGNoYXJfdQkqKmNtZGxpbmVwOwkvKiBwb2ludGVyIHRvIHBvaW50ZXIgb2YgYWxsb2NhdGVkIGNtZGxpbmUgKi8KKyAgICBjbWRpZHhfVAljbWRpZHg7CQkvKiB0aGUgaW5kZXggZm9yIHRoZSBjb21tYW5kICovCisgICAgbG9uZwlhcmd0OwkJLyogZmxhZ3MgZm9yIHRoZSBjb21tYW5kICovCisgICAgaW50CQlza2lwOwkJLyogZG9uJ3QgZXhlY3V0ZSB0aGUgY29tbWFuZCwgb25seSBwYXJzZSBpdCAqLworICAgIGludAkJZm9yY2VpdDsJLyogVFJVRSBpZiAhIHByZXNlbnQgKi8KKyAgICBpbnQJCWFkZHJfY291bnQ7CS8qIHRoZSBudW1iZXIgb2YgYWRkcmVzc2VzIGdpdmVuICovCisgICAgbGluZW5yX1QJbGluZTE7CQkvKiB0aGUgZmlyc3QgbGluZSBudW1iZXIgKi8KKyAgICBsaW5lbnJfVAlsaW5lMjsJCS8qIHRoZSBzZWNvbmQgbGluZSBudW1iZXIgb3IgY291bnQgKi8KKyAgICBjaGFyX3UJKmRvX2VjbWRfY21kOwkvKiArY29tbWFuZCBhcmcgdG8gYmUgdXNlZCBpbiBlZGl0ZWQgZmlsZSAqLworICAgIGxpbmVucl9UCWRvX2VjbWRfbG51bTsJLyogdGhlIGxpbmUgbnVtYmVyIGluIGFuIGVkaXRlZCBmaWxlICovCisgICAgaW50CQlhcHBlbmQ7CQkvKiBUUlVFIHdpdGggIjp3ID4+ZmlsZSIgY29tbWFuZCAqLworICAgIGludAkJdXNlZmlsdGVyOwkvKiBUUlVFIHdpdGggIjp3ICFjb21tYW5kIiBhbmQgIjpyIWNvbW1hbmQiICovCisgICAgaW50CQlhbW91bnQ7CQkvKiBudW1iZXIgb2YgJz4nIG9yICc8JyBmb3Igc2hpZnQgY29tbWFuZCAqLworICAgIGludAkJcmVnbmFtZTsJLyogcmVnaXN0ZXIgbmFtZSAoTlVMIGlmIG5vbmUpICovCisgICAgaW50CQlmb3JjZV9iaW47CS8qIDAsIEZPUkNFX0JJTiBvciBGT1JDRV9OT0JJTiAqLworICAgIGludAkJZm9yY2VfZmY7CS8qIGZvcmNlZCAnZmlsZWZvcm1hdCcgKGluZGV4IGluIGNtZFtdKSAqLworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCWZvcmNlX2VuYzsJLyogZm9yY2VkICdlbmNvZGluZycgKGluZGV4IGluIGNtZFtdKSAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9VU1JfQ01EUworICAgIGludAkJdXNlcmlkeDsJLyogdXNlciBjb21tYW5kIGluZGV4ICovCisjZW5kaWYKKyAgICBjaGFyX3UJKmVycm1zZzsJLyogcmV0dXJuZWQgZXJyb3IgbWVzc2FnZSAqLworICAgIGNoYXJfdQkqKCpnZXRsaW5lKSBfX0FSR1MoKGludCwgdm9pZCAqLCBpbnQpKTsKKyAgICB2b2lkCSpjb29raWU7CS8qIGFyZ3VtZW50IGZvciBnZXRsaW5lKCkgKi8KKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBzdHJ1Y3QgY29uZHN0YWNrICpjc3RhY2s7CS8qIGNvbmRpdGlvbiBzdGFjayBmb3IgIjppZiIgZXRjLiAqLworI2VuZGlmCit9OworCisjZGVmaW5lIEZPUkNFX0JJTiAxCQkvKiAiOmVkaXQgKytiaW4gZmlsZSIgKi8KKyNkZWZpbmUgRk9SQ0VfTk9CSU4gMgkJLyogIjplZGl0ICsrbm9iaW4gZmlsZSIgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZXhfY21kczIuYyBiL3NyYy9leF9jbWRzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzhiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZXhfY21kczIuYwpAQCAtMCwwICsxLDU3MTEgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIGV4X2NtZHMyLmM6IHNvbWUgbW9yZSBmdW5jdGlvbnMgZm9yIGNvbW1hbmQgbGluZSBjb21tYW5kcworICovCisKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiBkZWZpbmVkKEZFQVRfQ1NDT1BFKQorIyBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoRkVBVF9DU0NPUEUpCisjIGluY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInZlcnNpb24uaCIKKworc3RhdGljIHZvaWQJY21kX3NvdXJjZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGV4YXJnX1QgKmVhcCkpOworCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCitzdGF0aWMgaW50IGRlYnVnX2dyZWVkeSA9IEZBTFNFOwkvKiBiYXRjaCBtb2RlIGRlYnVnZ2luZzogZG9uJ3Qgc2F2ZQorCQkJCQkgICBhbmQgcmVzdG9yZSB0eXBlYWhlYWQuICovCisKKy8qCisgKiBkb19kZWJ1ZygpOiBEZWJ1ZyBtb2RlLgorICogUmVwZWF0ZWRseSBnZXQgRXggY29tbWFuZHMsIHVudGlsIHRvbGQgdG8gY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbi4KKyAqLworICAgIHZvaWQKK2RvX2RlYnVnKGNtZCkKKyAgICBjaGFyX3UJKmNtZDsKK3sKKyAgICBpbnQJCXNhdmVfbXNnX3Njcm9sbCA9IG1zZ19zY3JvbGw7CisgICAgaW50CQlzYXZlX1N0YXRlID0gU3RhdGU7CisgICAgaW50CQlzYXZlX2RpZF9lbXNnID0gZGlkX2Vtc2c7CisgICAgaW50CQlzYXZlX2NtZF9zaWxlbnQgPSBjbWRfc2lsZW50OworICAgIGludAkJc2F2ZV9tc2dfc2lsZW50ID0gbXNnX3NpbGVudDsKKyAgICBpbnQJCXNhdmVfZW1zZ19zaWxlbnQgPSBlbXNnX3NpbGVudDsKKyAgICBpbnQJCXNhdmVfcmVkaXJfb2ZmID0gcmVkaXJfb2ZmOworICAgIHRhc2F2ZV9UCXR5cGVhaGVhZGJ1ZjsKKyMgaWZkZWYgRkVBVF9FWF9FWFRSQQorICAgIGludAkJc2F2ZV9leF9ub3JtYWxfYnVzeTsKKyMgZW5kaWYKKyAgICBpbnQJCW47CisgICAgY2hhcl91CSpjbWRsaW5lID0gTlVMTDsKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcgkqdGFpbCA9IE5VTEw7CisgICAgc3RhdGljIGludAlsYXN0X2NtZCA9IDA7CisjZGVmaW5lIENNRF9DT05UCTEKKyNkZWZpbmUgQ01EX05FWFQJMgorI2RlZmluZSBDTURfU1RFUAkzCisjZGVmaW5lIENNRF9GSU5JU0gJNAorI2RlZmluZSBDTURfUVVJVAk1CisjZGVmaW5lIENNRF9JTlRFUlJVUFQJNgorCisjaWZkZWYgQUxXQVlTX1VTRV9HVUkKKyAgICAvKiBDYW4ndCBkbyB0aGlzIHdoZW4gdGhlcmUgaXMgbm8gdGVybWluYWwgZm9yIGlucHV0L291dHB1dC4gKi8KKyAgICBpZiAoIWd1aS5pbl91c2UpCisgICAgeworCS8qIEJyZWFrIGFzIHNvb24gYXMgcG9zc2libGUuICovCisJZGVidWdfYnJlYWtfbGV2ZWwgPSA5OTk5OworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gcmF3IG1vZGUgYW5kIHN0YXJ0IHRlcm1jYXAgbW9kZS4gIE1pZ2h0IGhhdmUgc2lkZQorICAgICAqIGVmZmVjdHMuLi4gKi8KKyAgICBzZXR0bW9kZShUTU9ERV9SQVcpOworICAgIHN0YXJ0dGVybWNhcCgpOworCisgICAgKytSZWRyYXdpbmdEaXNhYmxlZDsJLyogZG9uJ3QgcmVkaXNwbGF5IHRoZSB3aW5kb3cgKi8KKyAgICArK25vX3dhaXRfcmV0dXJuOwkJLyogZG9uJ3Qgd2FpdCBmb3IgcmV0dXJuICovCisgICAgZGlkX2Vtc2cgPSBGQUxTRTsJCS8qIGRvbid0IHVzZSBlcnJvciBmcm9tIGRlYnVnZ2VkIHN0dWZmICovCisgICAgY21kX3NpbGVudCA9IEZBTFNFOwkJLyogZGlzcGxheSBjb21tYW5kcyAqLworICAgIG1zZ19zaWxlbnQgPSBGQUxTRTsJCS8qIGRpc3BsYXkgbWVzc2FnZXMgKi8KKyAgICBlbXNnX3NpbGVudCA9IEZBTFNFOwkvKiBkaXNwbGF5IGVycm9yIG1lc3NhZ2VzICovCisgICAgcmVkaXJfb2ZmID0gVFJVRTsJCS8qIGRvbid0IHJlZGlyZWN0IGRlYnVnIGNvbW1hbmRzICovCisKKyAgICBTdGF0ZSA9IE5PUk1BTDsKKyNpZmRlZiBGRUFUX1NOSUZGCisgICAgd2FudF9zbmlmZl9yZXF1ZXN0ID0gMDsgICAgLyogTm8gS19TTklGRiB3YW50ZWQgKi8KKyNlbmRpZgorCisgICAgaWYgKCFkZWJ1Z19kaWRfbXNnKQorCU1TRyhfKCJFbnRlcmluZyBEZWJ1ZyBtb2RlLiAgVHlwZSBcImNvbnRcIiB0byBjb250aW51ZS4iKSk7CisgICAgaWYgKHNvdXJjaW5nX25hbWUgIT0gTlVMTCkKKwltc2coc291cmNpbmdfbmFtZSk7CisgICAgaWYgKHNvdXJjaW5nX2xudW0gIT0gMCkKKwlzbXNnKChjaGFyX3UgKilfKCJsaW5lICVsZDogJXMiKSwgKGxvbmcpc291cmNpbmdfbG51bSwgY21kKTsKKyAgICBlbHNlCisJbXNnX3N0cigoY2hhcl91ICopXygiY21kOiAlcyIpLCBjbWQpOworCisgICAgLyoKKyAgICAgKiBSZXBlYXQgZ2V0dGluZyBhIGNvbW1hbmQgYW5kIGV4ZWN1dGluZyBpdC4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwltc2dfc2Nyb2xsID0gVFJVRTsKKwluZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisjaWZkZWYgRkVBVF9TTklGRgorCVByb2Nlc3NTbmlmZlJlcXVlc3RzKCk7CisjZW5kaWYKKwkvKiBTYXZlIHRoZSBjdXJyZW50IHR5cGVhaGVhZCBidWZmZXIgYW5kIHJlcGxhY2UgaXQgd2l0aCBhbiBlbXB0eSBvbmUuCisJICogVGhpcyBtYWtlcyBzdXJlIHdlIGdldCBpbnB1dCBmcm9tIHRoZSB1c2VyIGhlcmUgYW5kIGRvbid0IGludGVyZmVyZQorCSAqIHdpdGggdGhlIGNvbW1hbmRzIGJlaW5nIGV4ZWN1dGVkLiAgUmVzZXQgImV4X25vcm1hbF9idXN5IiB0byBhdm9pZAorCSAqIHRoZSBzaWRlIGVmZmVjdHMgb2YgdXNpbmcgIjpub3JtYWwiLiBTYXZlIHRoZSBzdHVmZiBidWZmZXIgYW5kIG1ha2UKKwkgKiBpdCBlbXB0eS4gKi8KKyMgaWZkZWYgRkVBVF9FWF9FWFRSQQorCXNhdmVfZXhfbm9ybWFsX2J1c3kgPSBleF9ub3JtYWxfYnVzeTsKKwlleF9ub3JtYWxfYnVzeSA9IDA7CisjIGVuZGlmCisJaWYgKCFkZWJ1Z19ncmVlZHkpCisJICAgIHNhdmVfdHlwZWFoZWFkKCZ0eXBlYWhlYWRidWYpOworCisJY21kbGluZSA9IGdldGNtZGxpbmVfcHJvbXB0KCc+JywgTlVMTCwgMCk7CisKKwlpZiAoIWRlYnVnX2dyZWVkeSkKKwkgICAgcmVzdG9yZV90eXBlYWhlYWQoJnR5cGVhaGVhZGJ1Zik7CisjIGlmZGVmIEZFQVRfRVhfRVhUUkEKKwlleF9ub3JtYWxfYnVzeSA9IHNhdmVfZXhfbm9ybWFsX2J1c3k7CisjIGVuZGlmCisKKwljbWRsaW5lX3JvdyA9IG1zZ19yb3c7CisJaWYgKGNtZGxpbmUgIT0gTlVMTCkKKwl7CisJICAgIC8qIElmIHRoaXMgaXMgYSBkZWJ1ZyBjb21tYW5kLCBzZXQgImxhc3RfY21kIi4KKwkgICAgICogSWYgbm90LCByZXNldCAibGFzdF9jbWQiLgorCSAgICAgKiBGb3IgYSBibGFuayBsaW5lIHVzZSBwcmV2aW91cyBjb21tYW5kLiAqLworCSAgICBwID0gc2tpcHdoaXRlKGNtZGxpbmUpOworCSAgICBpZiAoKnAgIT0gTlVMKQorCSAgICB7CisJCXN3aXRjaCAoKnApCisJCXsKKwkJICAgIGNhc2UgJ2MnOiBsYXN0X2NtZCA9IENNRF9DT05UOworCQkJICAgICAgdGFpbCA9ICJvbnQiOworCQkJICAgICAgYnJlYWs7CisJCSAgICBjYXNlICduJzogbGFzdF9jbWQgPSBDTURfTkVYVDsKKwkJCSAgICAgIHRhaWwgPSAiZXh0IjsKKwkJCSAgICAgIGJyZWFrOworCQkgICAgY2FzZSAncyc6IGxhc3RfY21kID0gQ01EX1NURVA7CisJCQkgICAgICB0YWlsID0gInRlcCI7CisJCQkgICAgICBicmVhazsKKwkJICAgIGNhc2UgJ2YnOiBsYXN0X2NtZCA9IENNRF9GSU5JU0g7CisJCQkgICAgICB0YWlsID0gImluaXNoIjsKKwkJCSAgICAgIGJyZWFrOworCQkgICAgY2FzZSAncSc6IGxhc3RfY21kID0gQ01EX1FVSVQ7CisJCQkgICAgICB0YWlsID0gInVpdCI7CisJCQkgICAgICBicmVhazsKKwkJICAgIGNhc2UgJ2knOiBsYXN0X2NtZCA9IENNRF9JTlRFUlJVUFQ7CisJCQkgICAgICB0YWlsID0gIm50ZXJydXB0IjsKKwkJCSAgICAgIGJyZWFrOworCQkgICAgZGVmYXVsdDogbGFzdF9jbWQgPSAwOworCQl9CisJCWlmIChsYXN0X2NtZCAhPSAwKQorCQl7CisJCSAgICAvKiBDaGVjayB0aGF0IHRoZSB0YWlsIG1hdGNoZXMuICovCisJCSAgICArK3A7CisJCSAgICB3aGlsZSAoKnAgIT0gTlVMICYmICpwID09ICp0YWlsKQorCQkgICAgeworCQkJKytwOworCQkJKyt0YWlsOworCQkgICAgfQorCQkgICAgaWYgKEFTQ0lJX0lTQUxQSEEoKnApKQorCQkJbGFzdF9jbWQgPSAwOworCQl9CisJICAgIH0KKworCSAgICBpZiAobGFzdF9jbWQgIT0gMCkKKwkgICAgeworCQkvKiBFeGVjdXRlIGRlYnVnIGNvbW1hbmQ6IGRlY2lkZWQgd2hlcmUgdG8gYnJlYWsgbmV4dCBhbmQKKwkJICogcmV0dXJuLiAqLworCQlzd2l0Y2ggKGxhc3RfY21kKQorCQl7CisJCSAgICBjYXNlIENNRF9DT05UOgorCQkJZGVidWdfYnJlYWtfbGV2ZWwgPSAtMTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBDTURfTkVYVDoKKwkJCWRlYnVnX2JyZWFrX2xldmVsID0gZXhfbmVzdGluZ19sZXZlbDsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBDTURfU1RFUDoKKwkJCWRlYnVnX2JyZWFrX2xldmVsID0gOTk5OTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBDTURfRklOSVNIOgorCQkJZGVidWdfYnJlYWtfbGV2ZWwgPSBleF9uZXN0aW5nX2xldmVsIC0gMTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBDTURfUVVJVDoKKwkJCWdvdF9pbnQgPSBUUlVFOworCQkJZGVidWdfYnJlYWtfbGV2ZWwgPSAtMTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBDTURfSU5URVJSVVBUOgorCQkJZ290X2ludCA9IFRSVUU7CisJCQlkZWJ1Z19icmVha19sZXZlbCA9IDk5OTk7CisJCQkvKiBEbyBub3QgcmVwZWF0ICI+aW50ZXJydXB0IiBjbWQsIGNvbnRpbnVlIHN0ZXBwaW5nLiAqLworCQkJbGFzdF9jbWQgPSBDTURfU1RFUDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgLyogZG9uJ3QgZGVidWcgdGhpcyBjb21tYW5kICovCisJICAgIG4gPSBkZWJ1Z19icmVha19sZXZlbDsKKwkgICAgZGVidWdfYnJlYWtfbGV2ZWwgPSAtMTsKKwkgICAgKHZvaWQpZG9fY21kbGluZShjbWRsaW5lLCBnZXRleGxpbmUsIE5VTEwsCisJCQkJCQlET0NNRF9WRVJCT1NFfERPQ01EX0VYQ1JFU0VUKTsKKwkgICAgZGVidWdfYnJlYWtfbGV2ZWwgPSBuOworCisJICAgIHZpbV9mcmVlKGNtZGxpbmUpOworCX0KKwlsaW5lc19sZWZ0ID0gUm93cyAtIDE7CisgICAgfQorICAgIHZpbV9mcmVlKGNtZGxpbmUpOworCisgICAgLS1SZWRyYXdpbmdEaXNhYmxlZDsKKyAgICAtLW5vX3dhaXRfcmV0dXJuOworICAgIHJlZHJhd19hbGxfbGF0ZXIoTk9UX1ZBTElEKTsKKyAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisgICAgbXNnX3Njcm9sbCA9IHNhdmVfbXNnX3Njcm9sbDsKKyAgICBsaW5lc19sZWZ0ID0gUm93cyAtIDE7CisgICAgU3RhdGUgPSBzYXZlX1N0YXRlOworICAgIGRpZF9lbXNnID0gc2F2ZV9kaWRfZW1zZzsKKyAgICBjbWRfc2lsZW50ID0gc2F2ZV9jbWRfc2lsZW50OworICAgIG1zZ19zaWxlbnQgPSBzYXZlX21zZ19zaWxlbnQ7CisgICAgZW1zZ19zaWxlbnQgPSBzYXZlX2Vtc2dfc2lsZW50OworICAgIHJlZGlyX29mZiA9IHNhdmVfcmVkaXJfb2ZmOworCisgICAgLyogT25seSBwcmludCB0aGUgbWVzc2FnZSBhZ2FpbiB3aGVuIHR5cGluZyBhIGNvbW1hbmQgYmVmb3JlIGNvbWluZyBiYWNrCisgICAgICogaGVyZS4gKi8KKyAgICBkZWJ1Z19kaWRfbXNnID0gVFJVRTsKK30KKworLyoKKyAqICI6ZGVidWciLgorICovCisgICAgdm9pZAorZXhfZGVidWcoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWRlYnVnX2JyZWFrX2xldmVsX3NhdmUgPSBkZWJ1Z19icmVha19sZXZlbDsKKworICAgIGRlYnVnX2JyZWFrX2xldmVsID0gOTk5OTsKKyAgICBkb19jbWRsaW5lX2NtZChlYXAtPmFyZyk7CisgICAgZGVidWdfYnJlYWtfbGV2ZWwgPSBkZWJ1Z19icmVha19sZXZlbF9zYXZlOworfQorCitzdGF0aWMgY2hhcl91CSpkZWJ1Z19icmVha3BvaW50X25hbWUgPSBOVUxMOworc3RhdGljIGxpbmVucl9UCWRlYnVnX2JyZWFrcG9pbnRfbG51bTsKKworLyoKKyAqIFdoZW4gZGVidWdnaW5nIG9yIGEgYnJlYWtwb2ludCBpcyBzZXQgb24gYSBza2lwcGVkIGNvbW1hbmQsIG5vIGRlYnVnIHByb21wdAorICogaXMgc2hvd24gYnkgZG9fb25lX2NtZCgpLiAgVGhpcyBzaXR1YXRpb24gaXMgaW5kaWNhdGVkIGJ5IGRlYnVnX3NraXBwZWQsIGFuZAorICogZGVidWdfc2tpcHBlZF9uYW1lIGlzIHRoZW4gc2V0IHRvIHRoZSBzb3VyY2UgbmFtZSBpbiB0aGUgYnJlYWtwb2ludCBjYXNlLiAgSWYKKyAqIGEgc2tpcHBlZCBjb21tYW5kIGRlY2lkZXMgaXRzZWxmIHRoYXQgYSBkZWJ1ZyBwcm9tcHQgc2hvdWxkIGJlIGRpc3BsYXllZCwgaXQKKyAqIGNhbiBkbyBzbyBieSBjYWxsaW5nIGRiZ19jaGVja19za2lwcGVkKCkuCisgKi8KK3N0YXRpYyBpbnQJZGVidWdfc2tpcHBlZDsKK3N0YXRpYyBjaGFyX3UJKmRlYnVnX3NraXBwZWRfbmFtZTsKKworLyoKKyAqIEdvIHRvIGRlYnVnIG1vZGUgd2hlbiBhIGJyZWFrcG9pbnQgd2FzIGVuY291bnRlcmVkIG9yICJleF9uZXN0aW5nX2xldmVsIiBpcworICogYXQgb3IgYmVsb3cgdGhlIGJyZWFrIGxldmVsLiAgQnV0IG9ubHkgd2hlbiB0aGUgbGluZSBpcyBhY3R1YWxseQorICogZXhlY3V0ZWQuICBSZXR1cm4gVFJVRSBhbmQgc2V0IGJyZWFrcG9pbnRfbmFtZSBmb3Igc2tpcHBlZCBjb21tYW5kcyB0aGF0CisgKiBkZWNpZGUgdG8gZXhlY3V0ZSBzb21ldGhpbmcgdGhlbXNlbHZlcy4KKyAqIENhbGxlZCBmcm9tIGRvX29uZV9jbWQoKSBiZWZvcmUgZXhlY3V0aW5nIGEgY29tbWFuZC4KKyAqLworICAgIHZvaWQKK2RiZ19jaGVja19icmVha3BvaW50KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcl91CSpwOworCisgICAgZGVidWdfc2tpcHBlZCA9IEZBTFNFOworICAgIGlmIChkZWJ1Z19icmVha3BvaW50X25hbWUgIT0gTlVMTCkKKyAgICB7CisJaWYgKCFlYXAtPnNraXApCisJeworCSAgICAvKiByZXBsYWNlIEtfU05SIHdpdGggIjxTTlI+IiAqLworCSAgICBpZiAoZGVidWdfYnJlYWtwb2ludF9uYW1lWzBdID09IEtfU1BFQ0lBTAorCQkgICAgJiYgZGVidWdfYnJlYWtwb2ludF9uYW1lWzFdID09IEtTX0VYVFJBCisJCSAgICAmJiBkZWJ1Z19icmVha3BvaW50X25hbWVbMl0gPT0gKGludClLRV9TTlIpCisJCXAgPSAoY2hhcl91ICopIjxTTlI+IjsKKwkgICAgZWxzZQorCQlwID0gKGNoYXJfdSAqKSIiOworCSAgICBzbXNnKChjaGFyX3UgKilfKCJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIiksIHAsCisJCSAgICBkZWJ1Z19icmVha3BvaW50X25hbWUgKyAoKnAgPT0gTlVMID8gMCA6IDMpLAorCQkgICAgKGxvbmcpZGVidWdfYnJlYWtwb2ludF9sbnVtKTsKKwkgICAgZGVidWdfYnJlYWtwb2ludF9uYW1lID0gTlVMTDsKKwkgICAgZG9fZGVidWcoZWFwLT5jbWQpOworCX0KKwllbHNlCisJeworCSAgICBkZWJ1Z19za2lwcGVkID0gVFJVRTsKKwkgICAgZGVidWdfc2tpcHBlZF9uYW1lID0gZGVidWdfYnJlYWtwb2ludF9uYW1lOworCSAgICBkZWJ1Z19icmVha3BvaW50X25hbWUgPSBOVUxMOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAoZXhfbmVzdGluZ19sZXZlbCA8PSBkZWJ1Z19icmVha19sZXZlbCkKKyAgICB7CisJaWYgKCFlYXAtPnNraXApCisJICAgIGRvX2RlYnVnKGVhcC0+Y21kKTsKKwllbHNlCisJeworCSAgICBkZWJ1Z19za2lwcGVkID0gVFJVRTsKKwkgICAgZGVidWdfc2tpcHBlZF9uYW1lID0gTlVMTDsKKwl9CisgICAgfQorfQorCisvKgorICogR28gdG8gZGVidWcgbW9kZSBpZiBza2lwcGVkIGJ5IGRiZ19jaGVja19icmVha3BvaW50KCkgYmVjYXVzZSBlYXAtPnNraXAgd2FzCisgKiBzZXQuICBSZXR1cm4gVFJVRSB3aGVuIHRoZSBkZWJ1ZyBtb2RlIGlzIGVudGVyZWQgdGhpcyB0aW1lLgorICovCisgICAgaW50CitkYmdfY2hlY2tfc2tpcHBlZChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJcHJldl9nb3RfaW50OworCisgICAgaWYgKGRlYnVnX3NraXBwZWQpCisgICAgeworCS8qCisJICogU2F2ZSB0aGUgdmFsdWUgb2YgZ290X2ludCBhbmQgcmVzZXQgaXQuICBXZSBkb24ndCB3YW50IGEgcHJldmlvdXMKKwkgKiBpbnRlcnJ1cHRpb24gY2F1c2UgZmx1c2hpbmcgdGhlIGlucHV0IGJ1ZmZlci4KKwkgKi8KKwlwcmV2X2dvdF9pbnQgPSBnb3RfaW50OworCWdvdF9pbnQgPSBGQUxTRTsKKwlkZWJ1Z19icmVha3BvaW50X25hbWUgPSBkZWJ1Z19za2lwcGVkX25hbWU7CisJLyogZWFwLT5za2lwIGlzIFRSVUUgKi8KKwllYXAtPnNraXAgPSBGQUxTRTsKKwkodm9pZClkYmdfY2hlY2tfYnJlYWtwb2ludChlYXApOworCWVhcC0+c2tpcCA9IFRSVUU7CisJZ290X2ludCB8PSBwcmV2X2dvdF9pbnQ7CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFRoZSBsaXN0IG9mIGJyZWFrcG9pbnRzOiBkYmdfYnJlYWtwLgorICogVGhpcyBpcyBhIGdyb3ctYXJyYXkgb2Ygc3RydWN0cy4KKyAqLworc3RydWN0IGRlYnVnZ3kKK3sKKyAgICBpbnQJCWRiZ19ucjsJCS8qIGJyZWFrcG9pbnQgbnVtYmVyICovCisgICAgaW50CQlkYmdfdHlwZTsJLyogREJHX0ZVTkMgb3IgREJHX0ZJTEUgKi8KKyAgICBjaGFyX3UJKmRiZ19uYW1lOwkvKiBmdW5jdGlvbiBvciBmaWxlIG5hbWUgKi8KKyAgICByZWdwcm9nX1QJKmRiZ19wcm9nOwkvKiByZWdleHAgcHJvZ3JhbSAqLworICAgIGxpbmVucl9UCWRiZ19sbnVtOwkvKiBsaW5lIG51bWJlciBpbiBmdW5jdGlvbiBvciBmaWxlICovCit9OworCitzdGF0aWMgZ2FycmF5X1QgZGJnX2JyZWFrcCA9IHswLCAwLCBzaXplb2Yoc3RydWN0IGRlYnVnZ3kpLCA0LCBOVUxMfTsKKyNkZWZpbmUgQlJFQUtQKGlkeCkJKCgoc3RydWN0IGRlYnVnZ3kgKilkYmdfYnJlYWtwLmdhX2RhdGEpW2lkeF0pCitzdGF0aWMgaW50IGxhc3RfYnJlYWtwID0gMDsJLyogbnIgb2YgbGFzdCBkZWZpbmVkIGJyZWFrcG9pbnQgKi8KKworI2RlZmluZSBEQkdfRlVOQwkxCisjZGVmaW5lIERCR19GSUxFCTIKKworc3RhdGljIGludCBkYmdfcGFyc2VhcmcgX19BUkdTKChjaGFyX3UgKmFyZykpOworCisvKgorICogUGFyc2UgdGhlIGFyZ3VtZW50cyBvZiAiOmJyZWFrYWRkIiBvciAiOmJyZWFrZGVsIiBhbmQgcHV0IHRoZW0gaW4gdGhlIGVudHJ5CisgKiBqdXN0IGFmdGVyIHRoZSBsYXN0IG9uZSBpbiBkYmdfYnJlYWtwLiAgTm90ZSB0aGF0ICJkYmdfbmFtZSIgaXMgYWxsb2NhdGVkLgorICogUmV0dXJucyBGQUlMIGZvciBmYWlsdXJlLgorICovCisgICAgc3RhdGljIGludAorZGJnX3BhcnNlYXJnKGFyZykKKyAgICBjaGFyX3UJKmFyZzsKK3sKKyAgICBjaGFyX3UJKnAgPSBhcmc7CisgICAgY2hhcl91CSpxOworICAgIHN0cnVjdCBkZWJ1Z2d5ICpicDsKKworICAgIGlmIChnYV9ncm93KCZkYmdfYnJlYWtwLCAxKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworICAgIGJwID0gJkJSRUFLUChkYmdfYnJlYWtwLmdhX2xlbik7CisKKyAgICAvKiBGaW5kICJmdW5jIiBvciAiZmlsZSIuICovCisgICAgaWYgKFNUUk5DTVAocCwgImZ1bmMiLCA0KSA9PSAwKQorCWJwLT5kYmdfdHlwZSA9IERCR19GVU5DOworICAgIGVsc2UgaWYgKFNUUk5DTVAocCwgImZpbGUiLCA0KSA9PSAwKQorCWJwLT5kYmdfdHlwZSA9IERCR19GSUxFOworICAgIGVsc2UKKyAgICB7CisJRU1TRzIoXyhlX2ludmFyZzIpLCBwKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisgICAgcCA9IHNraXB3aGl0ZShwICsgNCk7CisKKyAgICAvKiBGaW5kIG9wdGlvbmFsIGxpbmUgbnVtYmVyLiAqLworICAgIGlmIChWSU1fSVNESUdJVCgqcCkpCisgICAgeworCWJwLT5kYmdfbG51bSA9IGdldGRpZ2l0cygmcCk7CisJcCA9IHNraXB3aGl0ZShwKTsKKyAgICB9CisgICAgZWxzZQorCWJwLT5kYmdfbG51bSA9IDA7CisKKyAgICAvKiBGaW5kIHRoZSBmdW5jdGlvbiBvciBmaWxlIG5hbWUuICBEb24ndCBhY2NlcHQgYSBmdW5jdGlvbiBuYW1lIHdpdGggKCkuICovCisgICAgaWYgKCpwID09IE5VTAorCSAgICB8fCAoYnAtPmRiZ190eXBlID09IERCR19GVU5DICYmIHN0cnN0cigoY2hhciAqKXAsICIoKSIpICE9IE5VTEwpKQorICAgIHsKKwlFTVNHMihfKGVfaW52YXJnMiksIGFyZyk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgaWYgKGJwLT5kYmdfdHlwZSA9PSBEQkdfRlVOQykKKwlicC0+ZGJnX25hbWUgPSB2aW1fc3Ryc2F2ZShwKTsKKyAgICBlbHNlCisgICAgeworCS8qIEV4cGFuZCB0aGUgZmlsZSBuYW1lIGluIHRoZSBzYW1lIHdheSBhcyBkb19zb3VyY2UoKS4gIFRoaXMgbWVhbnMKKwkgKiBkb2luZyBpdCB0d2ljZSwgc28gdGhhdCAkRElSL2ZpbGUgZ2V0cyBleHBhbmRlZCB3aGVuICRESVIgaXMKKwkgKiAifi9kaXIiLiAqLworI2lmZGVmIFJJU0NPUworCXEgPSBtY2hfbXVuZ2VfZm5hbWUocCk7CisjZWxzZQorCXEgPSBleHBhbmRfZW52X3NhdmUocCk7CisjZW5kaWYKKwlpZiAocSA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFJTDsKKyNpZmRlZiBSSVNDT1MKKwlwID0gbWNoX211bmdlX2ZuYW1lKHEpOworI2Vsc2UKKwlwID0gZXhwYW5kX2Vudl9zYXZlKHEpOworI2VuZGlmCisJdmltX2ZyZWUocSk7CisJaWYgKHAgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBSUw7CisJYnAtPmRiZ19uYW1lID0gZml4X2ZuYW1lKHApOworCXZpbV9mcmVlKHApOworI2lmZGVmIE1BQ09TX0NMQVNTSUMKKwlpZiAoYnAtPmRiZ19uYW1lICE9IE5VTEwpCisJICAgIHNsYXNoX25fY29sb25fYWRqdXN0KGJwLT5kYmdfbmFtZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoYnAtPmRiZ19uYW1lID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogIjpicmVha2FkZCIuCisgKi8KKyAgICB2b2lkCitleF9icmVha2FkZChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIHN0cnVjdCBkZWJ1Z2d5ICpicDsKKyAgICBjaGFyX3UJKnBhdDsKKworICAgIGlmIChkYmdfcGFyc2VhcmcoZWFwLT5hcmcpID09IE9LKQorICAgIHsKKwlicCA9ICZCUkVBS1AoZGJnX2JyZWFrcC5nYV9sZW4pOworCXBhdCA9IGZpbGVfcGF0X3RvX3JlZ19wYXQoYnAtPmRiZ19uYW1lLCBOVUxMLCBOVUxMLCBGQUxTRSk7CisJaWYgKHBhdCAhPSBOVUxMKQorCXsKKwkgICAgYnAtPmRiZ19wcm9nID0gdmltX3JlZ2NvbXAocGF0LCBSRV9NQUdJQyArIFJFX1NUUklORyk7CisJICAgIHZpbV9mcmVlKHBhdCk7CisJfQorCWlmIChwYXQgPT0gTlVMTCB8fCBicC0+ZGJnX3Byb2cgPT0gTlVMTCkKKwkgICAgdmltX2ZyZWUoYnAtPmRiZ19uYW1lKTsKKwllbHNlCisJeworCSAgICBpZiAoYnAtPmRiZ19sbnVtID09IDApCS8qIGRlZmF1bHQgbGluZSBudW1iZXIgaXMgMSAqLworCQlicC0+ZGJnX2xudW0gPSAxOworCSAgICBCUkVBS1AoZGJnX2JyZWFrcC5nYV9sZW4rKykuZGJnX25yID0gKytsYXN0X2JyZWFrcDsKKwkgICAgLS1kYmdfYnJlYWtwLmdhX3Jvb207CisJICAgICsrZGVidWdfdGljazsKKwl9CisgICAgfQorfQorCisvKgorICogIjpkZWJ1Z2dyZWVkeSIuCisgKi8KKyAgICB2b2lkCitleF9kZWJ1Z2dyZWVkeShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGlmIChlYXAtPmFkZHJfY291bnQgPT0gMCB8fCBlYXAtPmxpbmUyICE9IDApCisJZGVidWdfZ3JlZWR5ID0gVFJVRTsKKyAgICBlbHNlCisJZGVidWdfZ3JlZWR5ID0gRkFMU0U7Cit9CisKKy8qCisgKiAiOmJyZWFrZGVsIi4KKyAqLworICAgIHZvaWQKK2V4X2JyZWFrZGVsKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgc3RydWN0IGRlYnVnZ3kgKmJwLCAqYnBpOworICAgIGludAkJbnI7CisgICAgaW50CQl0b2RlbCA9IC0xOworICAgIGludAkJaTsKKyAgICBsaW5lbnJfVAliZXN0X2xudW0gPSAwOworCisgICAgaWYgKHZpbV9pc2RpZ2l0KCplYXAtPmFyZykpCisgICAgeworCS8qICI6YnJlYWtkZWwge25yfSIgKi8KKwluciA9IGF0b2woKGNoYXIgKillYXAtPmFyZyk7CisJZm9yIChpID0gMDsgaSA8IGRiZ19icmVha3AuZ2FfbGVuOyArK2kpCisJICAgIGlmIChCUkVBS1AoaSkuZGJnX25yID09IG5yKQorCSAgICB7CisJCXRvZGVsID0gaTsKKwkJYnJlYWs7CisJICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiAiOmJyZWFrZGVsIHtmdW5jfGZpbGV9IFtsbnVtXSB7bmFtZX0iICovCisJaWYgKGRiZ19wYXJzZWFyZyhlYXAtPmFyZykgPT0gRkFJTCkKKwkgICAgcmV0dXJuOworCWJwID0gJkJSRUFLUChkYmdfYnJlYWtwLmdhX2xlbik7CisJZm9yIChpID0gMDsgaSA8IGRiZ19icmVha3AuZ2FfbGVuOyArK2kpCisJeworCSAgICBicGkgPSAmQlJFQUtQKGkpOworCSAgICBpZiAoYnAtPmRiZ190eXBlID09IGJwaS0+ZGJnX3R5cGUKKwkJICAgICYmIFNUUkNNUChicC0+ZGJnX25hbWUsIGJwaS0+ZGJnX25hbWUpID09IDAKKwkJICAgICYmIChicC0+ZGJnX2xudW0gPT0gYnBpLT5kYmdfbG51bQorCQkJfHwgKGJwLT5kYmdfbG51bSA9PSAwCisJCQkgICAgJiYgKGJlc3RfbG51bSA9PSAwCisJCQkJfHwgYnBpLT5kYmdfbG51bSA8IGJlc3RfbG51bSkpKSkKKwkgICAgeworCQl0b2RlbCA9IGk7CisJCWJlc3RfbG51bSA9IGJwaS0+ZGJnX2xudW07CisJICAgIH0KKwl9CisJdmltX2ZyZWUoYnAtPmRiZ19uYW1lKTsKKyAgICB9CisKKyAgICBpZiAodG9kZWwgPCAwKQorCUVNU0cyKF8oIkUxNjE6IEJyZWFrcG9pbnQgbm90IGZvdW5kOiAlcyIpLCBlYXAtPmFyZyk7CisgICAgZWxzZQorICAgIHsKKwl2aW1fZnJlZShCUkVBS1AodG9kZWwpLmRiZ19uYW1lKTsKKwl2aW1fZnJlZShCUkVBS1AodG9kZWwpLmRiZ19wcm9nKTsKKwktLWRiZ19icmVha3AuZ2FfbGVuOworCSsrZGJnX2JyZWFrcC5nYV9yb29tOworCWlmICh0b2RlbCA8IGRiZ19icmVha3AuZ2FfbGVuKQorCSAgICBtY2hfbWVtbW92ZSgmQlJFQUtQKHRvZGVsKSwgJkJSRUFLUCh0b2RlbCArIDEpLAorCQkgICAgKGRiZ19icmVha3AuZ2FfbGVuIC0gdG9kZWwpICogc2l6ZW9mKHN0cnVjdCBkZWJ1Z2d5KSk7CisJKytkZWJ1Z190aWNrOworICAgIH0KK30KKworLyoKKyAqICI6YnJlYWtsaXN0Ii4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorZXhfYnJlYWtsaXN0KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgc3RydWN0IGRlYnVnZ3kgKmJwOworICAgIGludAkJaTsKKworICAgIGlmIChkYmdfYnJlYWtwLmdhX2xlbiA9PSAwKQorCU1TRyhfKCJObyBicmVha3BvaW50cyBkZWZpbmVkIikpOworICAgIGVsc2UKKwlmb3IgKGkgPSAwOyBpIDwgZGJnX2JyZWFrcC5nYV9sZW47ICsraSkKKwl7CisJICAgIGJwID0gJkJSRUFLUChpKTsKKwkgICAgc21zZygoY2hhcl91ICopXygiJTNkICAlcyAlcyAgbGluZSAlbGQiKSwKKwkJICAgIGJwLT5kYmdfbnIsCisJCSAgICBicC0+ZGJnX3R5cGUgPT0gREJHX0ZVTkMgPyAiZnVuYyIgOiAiZmlsZSIsCisJCSAgICBicC0+ZGJnX25hbWUsCisJCSAgICAobG9uZylicC0+ZGJnX2xudW0pOworCX0KK30KKworLyoKKyAqIEZpbmQgYSBicmVha3BvaW50IGZvciBhIGZ1bmN0aW9uIG9yIHNvdXJjZWQgZmlsZS4KKyAqIFJldHVybnMgbGluZSBudW1iZXIgYXQgd2hpY2ggdG8gYnJlYWs7IHplcm8gd2hlbiBubyBtYXRjaGluZyBicmVha3BvaW50LgorICovCisgICAgbGluZW5yX1QKK2RiZ19maW5kX2JyZWFrcG9pbnQoZmlsZSwgZm5hbWUsIGFmdGVyKQorICAgIGludAkJZmlsZTsJICAgIC8qIFRSVUUgZm9yIGEgZmlsZSwgRkFMU0UgZm9yIGEgZnVuY3Rpb24gKi8KKyAgICBjaGFyX3UJKmZuYW1lOwkgICAgLyogZmlsZSBvciBmdW5jdGlvbiBuYW1lICovCisgICAgbGluZW5yX1QJYWZ0ZXI7CSAgICAvKiBhZnRlciB0aGlzIGxpbmUgbnVtYmVyICovCit7CisgICAgc3RydWN0IGRlYnVnZ3kgKmJwOworICAgIGludAkJaTsKKyAgICBsaW5lbnJfVAlsbnVtID0gMDsKKyAgICByZWdtYXRjaF9UCXJlZ21hdGNoOworICAgIGNoYXJfdQkqbmFtZSA9IGZuYW1lOworICAgIGludAkJcHJldl9nb3RfaW50OworCisgICAgLyogUmVwbGFjZSBLX1NOUiBpbiBmdW5jdGlvbiBuYW1lIHdpdGggIjxTTlI+Ii4gKi8KKyAgICBpZiAoIWZpbGUgJiYgZm5hbWVbMF0gPT0gS19TUEVDSUFMKQorICAgIHsKKwluYW1lID0gYWxsb2MoKHVuc2lnbmVkKVNUUkxFTihmbmFtZSkgKyAzKTsKKwlpZiAobmFtZSA9PSBOVUxMKQorCSAgICBuYW1lID0gZm5hbWU7CisJZWxzZQorCXsKKwkgICAgU1RSQ1BZKG5hbWUsICI8U05SPiIpOworCSAgICBTVFJDUFkobmFtZSArIDUsIGZuYW1lICsgMyk7CisJfQorICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBkYmdfYnJlYWtwLmdhX2xlbjsgKytpKQorICAgIHsKKwkvKiBza2lwIGVudHJpZXMgdGhhdCBhcmUgbm90IHVzZWZ1bCBvciBhcmUgZm9yIGEgbGluZSB0aGF0IGlzIGJleW9uZAorCSAqIGFuIGFscmVhZHkgZm91bmQgYnJlYWtwb2ludCAqLworCWJwID0gJkJSRUFLUChpKTsKKwlpZiAoKGJwLT5kYmdfdHlwZSA9PSBEQkdfRklMRSkgPT0gZmlsZQorCQkmJiBicC0+ZGJnX2xudW0gPiBhZnRlcgorCQkmJiAobG51bSA9PSAwIHx8IGJwLT5kYmdfbG51bSA8IGxudW0pKQorCXsKKwkgICAgcmVnbWF0Y2gucmVncHJvZyA9IGJwLT5kYmdfcHJvZzsKKwkgICAgcmVnbWF0Y2gucm1faWMgPSBGQUxTRTsKKwkgICAgLyoKKwkgICAgICogU2F2ZSB0aGUgdmFsdWUgb2YgZ290X2ludCBhbmQgcmVzZXQgaXQuICBXZSBkb24ndCB3YW50IGEgcHJldmlvdXMKKwkgICAgICogaW50ZXJydXB0aW9uIGNhbmNlbCBtYXRjaGluZywgb25seSBoaXR0aW5nIENUUkwtQyB3aGlsZSBtYXRjaGluZworCSAgICAgKiBzaG91bGQgYWJvcnQgaXQuCisJICAgICAqLworCSAgICBwcmV2X2dvdF9pbnQgPSBnb3RfaW50OworCSAgICBnb3RfaW50ID0gRkFMU0U7CisJICAgIGlmICh2aW1fcmVnZXhlYygmcmVnbWF0Y2gsIG5hbWUsIChjb2xucl9UKTApKQorCQlsbnVtID0gYnAtPmRiZ19sbnVtOworCSAgICBnb3RfaW50IHw9IHByZXZfZ290X2ludDsKKwl9CisgICAgfQorICAgIGlmIChuYW1lICE9IGZuYW1lKQorCXZpbV9mcmVlKG5hbWUpOworCisgICAgcmV0dXJuIGxudW07Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBhIGJyZWFrcG9pbnQgd2FzIGVuY291bnRlcmVkLgorICovCisgICAgdm9pZAorZGJnX2JyZWFrcG9pbnQobmFtZSwgbG51bSkKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICAvKiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgbGluZSBpcyBhY3R1YWxseSBleGVjdXRlZCBpbiBkb19vbmVfY21kKCkgKi8KKyAgICBkZWJ1Z19icmVha3BvaW50X25hbWUgPSBuYW1lOworICAgIGRlYnVnX2JyZWFrcG9pbnRfbG51bSA9IGxudW07Cit9CisjZW5kaWYKKworLyoKKyAqIElmICdhdXRvd3JpdGUnIG9wdGlvbiBzZXQsIHRyeSB0byB3cml0ZSB0aGUgZmlsZS4KKyAqIENhcmVmdWw6IGF1dG9jb21tYW5kcyBtYXkgbWFrZSAiYnVmIiBpbnZhbGlkIQorICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAorYXV0b3dyaXRlKGJ1ZiwgZm9yY2VpdCkKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJZm9yY2VpdDsKK3sKKyAgICBpZiAoIShwX2F3IHx8IHBfYXdhKSB8fCAhcF93cml0ZQorI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKwkvKiBuZXZlciBhdXRvd3JpdGUgYSAibm9maWxlIiBvciAibm93cml0ZSIgYnVmZmVyICovCisJfHwgYnRfZG9udHdyaXRlKGJ1ZikKKyNlbmRpZgorCXx8ICghZm9yY2VpdCAmJiBidWYtPmJfcF9ybykgfHwgYnVmLT5iX2ZmbmFtZSA9PSBOVUxMKQorCXJldHVybiBGQUlMOworICAgIHJldHVybiBidWZfd3JpdGVfYWxsKGJ1ZiwgZm9yY2VpdCk7Cit9CisKKy8qCisgKiBmbHVzaCBhbGwgYnVmZmVycywgZXhjZXB0IHRoZSBvbmVzIHRoYXQgYXJlIHJlYWRvbmx5CisgKi8KKyAgICB2b2lkCithdXRvd3JpdGVfYWxsKCkKK3sKKyAgICBidWZfVAkqYnVmOworCisgICAgaWYgKCEocF9hdyB8fCBwX2F3YSkgfHwgIXBfd3JpdGUpCisJcmV0dXJuOworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZjsgYnVmID0gYnVmLT5iX25leHQpCisJaWYgKGJ1ZklzQ2hhbmdlZChidWYpICYmICFidWYtPmJfcF9ybykKKwl7CisJICAgICh2b2lkKWJ1Zl93cml0ZV9hbGwoYnVmLCBGQUxTRSk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJICAgIC8qIGFuIGF1dG9jb21tYW5kIG1heSBoYXZlIGRlbGV0ZWQgdGhlIGJ1ZmZlciAqLworCSAgICBpZiAoIWJ1Zl92YWxpZChidWYpKQorCQlidWYgPSBmaXJzdGJ1ZjsKKyNlbmRpZgorCX0KK30KKworLyoKKyAqIHJldHVybiBUUlVFIGlmIGJ1ZmZlciB3YXMgY2hhbmdlZCBhbmQgY2Fubm90IGJlIGFiYW5kb25lZC4KKyAqLworLypBUkdTVVNFRCovCisgICAgaW50CitjaGVja19jaGFuZ2VkKGJ1ZiwgY2hlY2thdywgbXVsdF93aW4sIGZvcmNlaXQsIGFsbGJ1ZikKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJY2hlY2thdzsJLyogZG8gYXV0b3dyaXRlIGlmIGJ1ZmZlciB3YXMgY2hhbmdlZCAqLworICAgIGludAkJbXVsdF93aW47CS8qIGNoZWNrIGFsc28gd2hlbiBzZXZlcmFsIHdpbnMgZm9yIHRoZSBidWYgKi8KKyAgICBpbnQJCWZvcmNlaXQ7CisgICAgaW50CQlhbGxidWY7CQkvKiBtYXkgd3JpdGUgYWxsIGJ1ZmZlcnMgKi8KK3sKKyAgICBpZiAoICAgICAgICFmb3JjZWl0CisJICAgICYmIGJ1ZklzQ2hhbmdlZChidWYpCisJICAgICYmIChtdWx0X3dpbiB8fCBidWYtPmJfbndpbmRvd3MgPD0gMSkKKwkgICAgJiYgKCFjaGVja2F3IHx8IGF1dG93cml0ZShidWYsIGZvcmNlaXQpID09IEZBSUwpKQorICAgIHsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCisJaWYgKChwX2NvbmZpcm0gfHwgY21kbW9kLmNvbmZpcm0pICYmIHBfd3JpdGUpCisJeworCSAgICBidWZfVAkqYnVmMjsKKwkgICAgaW50CQljb3VudCA9IDA7CisKKwkgICAgaWYgKGFsbGJ1ZikKKwkJZm9yIChidWYyID0gZmlyc3RidWY7IGJ1ZjIgIT0gTlVMTDsgYnVmMiA9IGJ1ZjItPmJfbmV4dCkKKwkJICAgIGlmIChidWZJc0NoYW5nZWQoYnVmMikKKwkJCQkgICAgICYmIChidWYyLT5iX2ZmbmFtZSAhPSBOVUxMCisjIGlmZGVmIEZFQVRfQlJPV1NFCisJCQkJCSB8fCBjbWRtb2QuYnJvd3NlCisjIGVuZGlmCisJCQkJCSkpCisJCQkrK2NvdW50OworIyBpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgaWYgKCFidWZfdmFsaWQoYnVmKSkKKwkJLyogQXV0b2NvbW1hbmQgZGVsZXRlZCBidWZmZXIsIG9vcHMhICBJdCdzIG5vdCBjaGFuZ2VkIG5vdy4gKi8KKwkJcmV0dXJuIEZBTFNFOworIyBlbmRpZgorCSAgICBkaWFsb2dfY2hhbmdlZChidWYsIGNvdW50ID4gMSk7CisjIGlmZGVmIEZFQVRfQVVUT0NNRAorCSAgICBpZiAoIWJ1Zl92YWxpZChidWYpKQorCQkvKiBBdXRvY29tbWFuZCBkZWxldGVkIGJ1ZmZlciwgb29wcyEgIEl0J3Mgbm90IGNoYW5nZWQgbm93LiAqLworCQlyZXR1cm4gRkFMU0U7CisjIGVuZGlmCisJICAgIHJldHVybiBidWZJc0NoYW5nZWQoYnVmKTsKKwl9CisjZW5kaWYKKwlFTVNHKF8oZV9ub3dydG1zZykpOworCXJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpIHx8IGRlZmluZWQoUFJPVE8pCisKKyNpZiBkZWZpbmVkKEZFQVRfQlJPV1NFKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFdoZW4gd2FudGluZyB0byB3cml0ZSBhIGZpbGUgd2l0aG91dCBhIGZpbGUgbmFtZSwgYXNrIHRoZSB1c2VyIGZvciBhIG5hbWUuCisgKi8KKyAgICB2b2lkCiticm93c2Vfc2F2ZV9mbmFtZShidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBpZiAoYnVmLT5iX2ZuYW1lID09IE5VTEwpCisgICAgeworCWNoYXJfdSAqZm5hbWU7CisKKwlmbmFtZSA9IGRvX2Jyb3dzZShUUlVFLCAoY2hhcl91ICopXygiU2F2ZSBBcyIpLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCQkJCQkgICBOVUxMLCBidWYpOworCWlmIChmbmFtZSAhPSBOVUxMKQorCXsKKwkgICAgaWYgKHNldGZuYW1lKGJ1ZiwgZm5hbWUsIE5VTEwsIFRSVUUpID09IE9LKQorCQlidWYtPmJfZmxhZ3MgfD0gQkZfTk9URURJVEVEOworCSAgICB2aW1fZnJlZShmbmFtZSk7CisJfQorICAgIH0KK30KKyNlbmRpZgorCisvKgorICogQXNrIHRoZSB1c2VyIHdoYXQgdG8gZG8gd2hlbiBhYm9uZG9uaW5nIGEgY2hhbmdlZCBidWZmZXIuCisgKiBNdXN0IGNoZWNrICd3cml0ZScgb3B0aW9uIGZpcnN0IQorICovCisgICAgdm9pZAorZGlhbG9nX2NoYW5nZWQoYnVmLCBjaGVja2FsbCkKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJY2hlY2thbGw7CS8qIG1heSBhYmFuZG9uIGFsbCBjaGFuZ2VkIGJ1ZmZlcnMgKi8KK3sKKyAgICBjaGFyX3UJYnVmZltJT1NJWkVdOworICAgIGludAkJcmV0OworICAgIGJ1Zl9UCSpidWYyOworCisgICAgZGlhbG9nX21zZyhidWZmLCBfKCJTYXZlIGNoYW5nZXMgdG8gXCIlLipzXCI/IiksCisJCQkoYnVmLT5iX2ZuYW1lICE9IE5VTEwpID8KKwkJCWJ1Zi0+Yl9mbmFtZSA6IChjaGFyX3UgKilfKCJVbnRpdGxlZCIpKTsKKyAgICBpZiAoY2hlY2thbGwpCisJcmV0ID0gdmltX2RpYWxvZ195ZXNub2FsbGNhbmNlbChWSU1fUVVFU1RJT04sIE5VTEwsIGJ1ZmYsIDEpOworICAgIGVsc2UKKwlyZXQgPSB2aW1fZGlhbG9nX3llc25vY2FuY2VsKFZJTV9RVUVTVElPTiwgTlVMTCwgYnVmZiwgMSk7CisKKyAgICBpZiAocmV0ID09IFZJTV9ZRVMpCisgICAgeworI2lmZGVmIEZFQVRfQlJPV1NFCisJLyogTWF5IGdldCBmaWxlIG5hbWUsIHdoZW4gdGhlcmUgaXMgbm9uZSAqLworCWJyb3dzZV9zYXZlX2ZuYW1lKGJ1Zik7CisjZW5kaWYKKwlpZiAoYnVmLT5iX2ZuYW1lICE9IE5VTEwpICAgLyogZGlkbid0IGhpdCBDYW5jZWwgKi8KKwkgICAgKHZvaWQpYnVmX3dyaXRlX2FsbChidWYsIEZBTFNFKTsKKyAgICB9CisgICAgZWxzZSBpZiAocmV0ID09IFZJTV9OTykKKyAgICB7CisJdW5jaGFuZ2VkKGJ1ZiwgVFJVRSk7CisgICAgfQorICAgIGVsc2UgaWYgKHJldCA9PSBWSU1fQUxMKQorICAgIHsKKwkvKgorCSAqIFdyaXRlIGFsbCBtb2RpZmllZCBmaWxlcyB0aGF0IGNhbiBiZSB3cml0dGVuLgorCSAqIFNraXAgcmVhZG9ubHkgYnVmZmVycywgdGhlc2UgbmVlZCB0byBiZSBjb25maXJtZWQKKwkgKiBpbmRpdmlkdWFsbHkuCisJICovCisJZm9yIChidWYyID0gZmlyc3RidWY7IGJ1ZjIgIT0gTlVMTDsgYnVmMiA9IGJ1ZjItPmJfbmV4dCkKKwl7CisJICAgIGlmIChidWZJc0NoYW5nZWQoYnVmMikKKwkJICAgICYmIChidWYyLT5iX2ZmbmFtZSAhPSBOVUxMCisjaWZkZWYgRkVBVF9CUk9XU0UKKwkJCXx8IGNtZG1vZC5icm93c2UKKyNlbmRpZgorCQkJKQorCQkgICAgJiYgIWJ1ZjItPmJfcF9ybykKKwkgICAgeworI2lmZGVmIEZFQVRfQlJPV1NFCisJCS8qIE1heSBnZXQgZmlsZSBuYW1lLCB3aGVuIHRoZXJlIGlzIG5vbmUgKi8KKwkJYnJvd3NlX3NhdmVfZm5hbWUoYnVmMik7CisjZW5kaWYKKwkJaWYgKGJ1ZjItPmJfZm5hbWUgIT0gTlVMTCkgICAvKiBkaWRuJ3QgaGl0IENhbmNlbCAqLworCQkgICAgKHZvaWQpYnVmX3dyaXRlX2FsbChidWYyLCBGQUxTRSk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJCS8qIGFuIGF1dG9jb21tYW5kIG1heSBoYXZlIGRlbGV0ZWQgdGhlIGJ1ZmZlciAqLworCQlpZiAoIWJ1Zl92YWxpZChidWYyKSkKKwkJICAgIGJ1ZjIgPSBmaXJzdGJ1ZjsKKyNlbmRpZgorCSAgICB9CisJfQorICAgIH0KKyAgICBlbHNlIGlmIChyZXQgPT0gVklNX0RJU0NBUkRBTEwpCisgICAgeworCS8qCisJICogbWFyayBhbGwgYnVmZmVycyBhcyB1bmNoYW5nZWQKKwkgKi8KKwlmb3IgKGJ1ZjIgPSBmaXJzdGJ1ZjsgYnVmMiAhPSBOVUxMOyBidWYyID0gYnVmMi0+Yl9uZXh0KQorCSAgICB1bmNoYW5nZWQoYnVmMiwgVFJVRSk7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgYnVmZmVyICJidWYiIGNhbiBiZSBhYmFuZG9uZWQsIGVpdGhlciBieSBtYWtpbmcgaXQKKyAqIGhpZGRlbiwgYXV0b3dyaXRpbmcgaXQgb3IgdW5sb2FkaW5nIGl0LgorICovCisgICAgaW50CitjYW5fYWJhbmRvbihidWYsIGZvcmNlaXQpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWZvcmNlaXQ7Cit7CisgICAgcmV0dXJuICgJICAgUF9ISUQoYnVmKQorCQl8fCAhYnVmSXNDaGFuZ2VkKGJ1ZikKKwkJfHwgYnVmLT5iX253aW5kb3dzID4gMQorCQl8fCBhdXRvd3JpdGUoYnVmLCBmb3JjZWl0KSA9PSBPSworCQl8fCBmb3JjZWl0KTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGFueSBidWZmZXIgd2FzIGNoYW5nZWQgYW5kIGNhbm5vdCBiZSBhYmFuZG9uZWQuCisgKiBUaGF0IGNoYW5nZWQgYnVmZmVyIGJlY29tZXMgdGhlIGN1cnJlbnQgYnVmZmVyLgorICovCisgICAgaW50CitjaGVja19jaGFuZ2VkX2FueShoaWRkZW4pCisgICAgaW50CQloaWRkZW47CQkvKiBPbmx5IGNoZWNrIGhpZGRlbiBidWZmZXJzICovCit7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCXNhdmU7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgd2luX1QJKndwOworI2VuZGlmCisKKyAgICBmb3IgKDs7KQorICAgIHsKKwkvKiBjaGVjayBjdXJidWYgZmlyc3Q6IGlmIGl0IHdhcyBjaGFuZ2VkIHdlIGNhbid0IGFiYW5kb24gaXQgKi8KKwlpZiAoIWhpZGRlbiAmJiBjdXJidWZJc0NoYW5nZWQoKSkKKwkgICAgYnVmID0gY3VyYnVmOworCWVsc2UKKwl7CisJICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKwkJaWYgKCghaGlkZGVuIHx8IGJ1Zi0+Yl9ud2luZG93cyA9PSAwKSAmJiBidWZJc0NoYW5nZWQoYnVmKSkKKwkJICAgIGJyZWFrOworCX0KKwlpZiAoYnVmID09IE5VTEwpICAgIC8qIE5vIGJ1ZmZlcnMgY2hhbmdlZCAqLworCSAgICByZXR1cm4gRkFMU0U7CisKKwlpZiAoY2hlY2tfY2hhbmdlZChidWYsIHBfYXdhLCBUUlVFLCBGQUxTRSwgVFJVRSkgJiYgYnVmX3ZhbGlkKGJ1ZikpCisJICAgIGJyZWFrOwkgICAgLyogZGlkbid0IHNhdmUgLSBzdGlsbCBjaGFuZ2VzICovCisgICAgfQorCisgICAgZXhpdGluZyA9IEZBTFNFOworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKyAgICAvKgorICAgICAqIFdoZW4gIjpjb25maXJtIiB1c2VkLCBkb24ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UuCisgICAgICovCisgICAgaWYgKCEocF9jb25maXJtIHx8IGNtZG1vZC5jb25maXJtKSkKKyNlbmRpZgorICAgIHsKKwkvKiBUaGVyZSBtdXN0IGJlIGEgd2FpdF9yZXR1cm4gZm9yIHRoaXMgbWVzc2FnZSwgZG9fYnVmZmVyKCkKKwkgKiBtYXkgY2F1c2UgYSByZWRyYXcuICBCdXQgd2FpdF9yZXR1cm4oKSBpcyBhIG5vLW9wIHdoZW4gdmdldGMoKQorCSAqIGlzIGJ1c3kgKFF1aXQgdXNlZCBmcm9tIHdpbmRvdyBtZW51KSwgdGhlbiBtYWtlIHN1cmUgd2UgZG9uJ3QKKwkgKiBjYXVzZSBhIHNjcm9sbCB1cC4gKi8KKwlpZiAodmdldGNfYnVzeSkKKwl7CisJICAgIG1zZ19yb3cgPSBjbWRsaW5lX3JvdzsKKwkgICAgbXNnX2NvbCA9IDA7CisJICAgIG1zZ19kaWRvdXQgPSBGQUxTRTsKKwl9CisJaWYgKEVNU0cyKF8oIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIiksCisJCSAgICBidWZfc3BuYW1lKGJ1ZikgIT0gTlVMTCA/IChjaGFyX3UgKilidWZfc3BuYW1lKGJ1ZikgOgorCQkgICAgYnVmLT5iX2ZuYW1lKSkKKwl7CisJICAgIHNhdmUgPSBub193YWl0X3JldHVybjsKKwkgICAgbm9fd2FpdF9yZXR1cm4gPSBGQUxTRTsKKwkgICAgd2FpdF9yZXR1cm4oRkFMU0UpOworCSAgICBub193YWl0X3JldHVybiA9IHNhdmU7CisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIC8qIFRyeSB0byBmaW5kIGEgd2luZG93IHRoYXQgY29udGFpbnMgdGhlIGJ1ZmZlci4gKi8KKyAgICBpZiAoYnVmICE9IGN1cmJ1ZikKKwlmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwkgICAgaWYgKHdwLT53X2J1ZmZlciA9PSBidWYpCisJICAgIHsKKwkJd2luX2dvdG8od3ApOworIyBpZmRlZiBGRUFUX0FVVE9DTUQKKwkJLyogUGFyYW5vaWE6IGRpZCBhdXRvY21zIHdpcGUgb3V0IHRoZSBidWZmZXIgd2l0aCBjaGFuZ2VzPyAqLworCQlpZiAoIWJ1Zl92YWxpZChidWYpKQorCQkgICAgcmV0dXJuIFRSVUU7CisjIGVuZGlmCisJCWJyZWFrOworCSAgICB9CisjZW5kaWYKKworICAgIC8qIE9wZW4gdGhlIGNoYW5nZWQgYnVmZmVyIGluIHRoZSBjdXJyZW50IHdpbmRvdy4gKi8KKyAgICBpZiAoYnVmICE9IGN1cmJ1ZikKKwlzZXRfY3VyYnVmKGJ1ZiwgRE9CVUZfR09UTyk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAqIHJldHVybiBGQUlMIGlmIHRoZXJlIGlzIG5vIGZpbGUgbmFtZSwgT0sgaWYgdGhlcmUgaXMgb25lCisgKiBnaXZlIGVycm9yIG1lc3NhZ2UgZm9yIEZBSUwKKyAqLworICAgIGludAorY2hlY2tfZm5hbWUoKQoreworICAgIGlmIChjdXJidWYtPmJfZmZuYW1lID09IE5VTEwpCisgICAgeworCUVNU0coXyhlX25vbmFtZSkpOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBmbHVzaCB0aGUgY29udGVudHMgb2YgYSBidWZmZXIsIHVubGVzcyBpdCBoYXMgbm8gZmlsZSBuYW1lCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CitidWZfd3JpdGVfYWxsKGJ1ZiwgZm9yY2VpdCkKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJZm9yY2VpdDsKK3sKKyAgICBpbnQJICAgIHJldHZhbDsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBidWZfVAkqb2xkX2N1cmJ1ZiA9IGN1cmJ1ZjsKKyNlbmRpZgorCisgICAgcmV0dmFsID0gKGJ1Zl93cml0ZShidWYsIGJ1Zi0+Yl9mZm5hbWUsIGJ1Zi0+Yl9mbmFtZSwKKwkJCQkgICAobGluZW5yX1QpMSwgYnVmLT5iX21sLm1sX2xpbmVfY291bnQsIE5VTEwsCisJCQkJCQkgIEZBTFNFLCBmb3JjZWl0LCBUUlVFLCBGQUxTRSkpOworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIGlmIChjdXJidWYgIT0gb2xkX2N1cmJ1ZikKKwlNU0coXygiV2FybmluZzogRW50ZXJlZCBvdGhlciBidWZmZXIgdW5leHBlY3RlZGx5IChjaGVjayBhdXRvY29tbWFuZHMpIikpOworI2VuZGlmCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIENvZGUgdG8gaGFuZGxlIHRoZSBhcmd1bWVudCBsaXN0LgorICovCisKKy8qCisgKiBJc29sYXRlIG9uZSBhcmd1bWVudCwgdGFraW5nIHF1b3RlcyBhbmQgYmFja3RpY2tzLgorICogQ2hhbmdlcyB0aGUgYXJndW1lbnQgaW4tcGxhY2UsIHB1dHMgYSBOVUwgYWZ0ZXIgaXQuCisgKiBRdW90ZXMgYXJlIHJlbW92ZWQsIGJhY2t0aWNrcyByZW1haW4uCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBhcmd1bWVudC4KKyAqLworICAgIGNoYXJfdSAqCitkb19vbmVfYXJnKHN0cikKKyAgICBjaGFyX3UgKnN0cjsKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpbnF1b3RlOworICAgIGludAkJaW5iYWNrdGljazsKKworICAgIGlucXVvdGUgPSBGQUxTRTsKKyAgICBpbmJhY2t0aWNrID0gRkFMU0U7CisgICAgZm9yIChwID0gc3RyOyAqc3RyOyArK3N0cikKKyAgICB7CisJLyoKKwkgKiBmb3IgTVNET1MgZXQuYWwuIGEgYmFja3NsYXNoIGlzIHBhcnQgb2YgYSBmaWxlIG5hbWUuCisJICogT25seSBza2lwICIsIHNwYWNlIGFuZCB0YWIuCisJICovCisJaWYgKHJlbV9iYWNrc2xhc2goc3RyKSkKKwl7CisJICAgICpwKysgPSAqc3RyKys7CisJICAgICpwKysgPSAqc3RyOworCX0KKwllbHNlCisJeworCSAgICAvKiBBbiBpdGVtIGVuZHMgYXQgYSBzcGFjZSBub3QgaW4gcXVvdGVzIG9yIGJhY2t0aWNrcyAqLworCSAgICBpZiAoIWlucXVvdGUgJiYgIWluYmFja3RpY2sgJiYgdmltX2lzc3BhY2UoKnN0cikpCisJCWJyZWFrOworCSAgICBpZiAoIWlucXVvdGUgJiYgKnN0ciA9PSAnYCcpCisJCWluYmFja3RpY2sgXj0gVFJVRTsKKwkgICAgaWYgKCFpbmJhY2t0aWNrICYmICpzdHIgPT0gJyInKQorCQlpbnF1b3RlIF49IFRSVUU7CisJICAgIGVsc2UKKwkJKnArKyA9ICpzdHI7CisJfQorICAgIH0KKyAgICBzdHIgPSBza2lwd2hpdGUoc3RyKTsKKyAgICAqcCA9IE5VTDsKKworICAgIHJldHVybiBzdHI7Cit9CisKK3N0YXRpYyBpbnQgZG9fYXJnbGlzdCBfX0FSR1MoKGNoYXJfdSAqc3RyLCBpbnQgd2hhdCwgaW50IGFmdGVyKSk7CitzdGF0aWMgdm9pZCBhbGlzdF9jaGVja19hcmdfaWR4IF9fQVJHUygodm9pZCkpOworI2lmZGVmIEZFQVRfTElTVENNRFMKK3N0YXRpYyBpbnQgYWxpc3RfYWRkX2xpc3QgX19BUkdTKChpbnQgY291bnQsIGNoYXJfdSAqKmZpbGVzLCBpbnQgYWZ0ZXIpKTsKKyNlbmRpZgorI2RlZmluZSBBTF9TRVQJMQorI2RlZmluZSBBTF9BREQJMgorI2RlZmluZSBBTF9ERUwJMworCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChGRUFUX0NMSUVOVFNFUlZFUikgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZWRlZmluZSB0aGUgYXJndW1lbnQgbGlzdC4KKyAqLworICAgIHZvaWQKK3NldF9hcmdsaXN0KHN0cikKKyAgICBjaGFyX3UJKnN0cjsKK3sKKyAgICBkb19hcmdsaXN0KHN0ciwgQUxfU0VULCAwKTsKK30KKyNlbmRpZgorCisvKgorICogIndoYXQiID09IEFMX1NFVDogUmVkZWZpbmUgdGhlIGFyZ3VtZW50IGxpc3QgdG8gJ3N0cicuCisgKiAid2hhdCIgPT0gQUxfQUREOiBhZGQgZmlsZXMgaW4gJ3N0cicgdG8gdGhlIGFyZ3VtZW50IGxpc3QgYWZ0ZXIgImFmdGVyIi4KKyAqICJ3aGF0IiA9PSBBTF9ERUw6IHJlbW92ZSBmaWxlcyBpbiAnc3RyJyBmcm9tIHRoZSBhcmd1bWVudCBsaXN0LgorICoKKyAqIFJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyBpbnQKK2RvX2FyZ2xpc3Qoc3RyLCB3aGF0LCBhZnRlcikKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBpbnQJCXdoYXQ7CisgICAgaW50CQlhZnRlcjsJCS8qIDAgbWVhbnMgYmVmb3JlIGZpcnN0IG9uZSAqLworeworICAgIGdhcnJheV9UCW5ld19nYTsKKyAgICBpbnQJCWV4cF9jb3VudDsKKyAgICBjaGFyX3UJKipleHBfZmlsZXM7CisgICAgaW50CQlpOworI2lmZGVmIEZFQVRfTElTVENNRFMKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQltYXRjaDsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDb2xsZWN0IGFsbCBmaWxlIG5hbWUgYXJndW1lbnRzIGluICJuZXdfZ2EiLgorICAgICAqLworICAgIGdhX2luaXQyKCZuZXdfZ2EsIChpbnQpc2l6ZW9mKGNoYXJfdSAqKSwgMjApOworICAgIHdoaWxlICgqc3RyKQorICAgIHsKKwlpZiAoZ2FfZ3JvdygmbmV3X2dhLCAxKSA9PSBGQUlMKQorCXsKKwkgICAgZ2FfY2xlYXIoJm5ld19nYSk7CisJICAgIHJldHVybiBGQUlMOworCX0KKwkoKGNoYXJfdSAqKiluZXdfZ2EuZ2FfZGF0YSlbbmV3X2dhLmdhX2xlbisrXSA9IHN0cjsKKwktLW5ld19nYS5nYV9yb29tOworCisJLyogSXNvbGF0ZSBvbmUgYXJndW1lbnQsIGNoYW5nZSBpdCBpbi1wbGFjZSwgcHV0IGEgTlVMIGFmdGVyIGl0LiAqLworCXN0ciA9IGRvX29uZV9hcmcoc3RyKTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX0xJU1RDTURTCisgICAgaWYgKHdoYXQgPT0gQUxfREVMKQorICAgIHsKKwlyZWdtYXRjaF9UCXJlZ21hdGNoOworCWludAkJZGlkb25lOworCisJLyoKKwkgKiBEZWxldGUgdGhlIGl0ZW1zOiB1c2UgZWFjaCBpdGVtIGFzIGEgcmVnZXhwIGFuZCBmaW5kIGEgbWF0Y2ggaW4gdGhlCisJICogYXJndW1lbnQgbGlzdC4KKwkgKi8KKyNpZmRlZiBDQVNFX0lOU0VOU0lUSVZFX0ZJTEVOQU1FCisJcmVnbWF0Y2gucm1faWMgPSBUUlVFOwkJLyogQWx3YXlzIGlnbm9yZSBjYXNlICovCisjZWxzZQorCXJlZ21hdGNoLnJtX2ljID0gRkFMU0U7CQkvKiBOZXZlciBpZ25vcmUgY2FzZSAqLworI2VuZGlmCisJZm9yIChpID0gMDsgaSA8IG5ld19nYS5nYV9sZW4gJiYgIWdvdF9pbnQ7ICsraSkKKwl7CisJICAgIHAgPSAoKGNoYXJfdSAqKiluZXdfZ2EuZ2FfZGF0YSlbaV07CisJICAgIHAgPSBmaWxlX3BhdF90b19yZWdfcGF0KHAsIE5VTEwsIE5VTEwsIEZBTFNFKTsKKwkgICAgaWYgKHAgPT0gTlVMTCkKKwkJYnJlYWs7CisJICAgIHJlZ21hdGNoLnJlZ3Byb2cgPSB2aW1fcmVnY29tcChwLCBwX21hZ2ljID8gUkVfTUFHSUMgOiAwKTsKKwkgICAgaWYgKHJlZ21hdGNoLnJlZ3Byb2cgPT0gTlVMTCkKKwkgICAgeworCQl2aW1fZnJlZShwKTsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICBkaWRvbmUgPSBGQUxTRTsKKwkgICAgZm9yIChtYXRjaCA9IDA7IG1hdGNoIDwgQVJHQ09VTlQ7ICsrbWF0Y2gpCisJCWlmICh2aW1fcmVnZXhlYygmcmVnbWF0Y2gsIGFsaXN0X25hbWUoJkFSR0xJU1RbbWF0Y2hdKSwKKwkJCQkJCQkJICAoY29sbnJfVCkwKSkKKwkJeworCQkgICAgZGlkb25lID0gVFJVRTsKKwkJICAgIHZpbV9mcmVlKEFSR0xJU1RbbWF0Y2hdLmFlX2ZuYW1lKTsKKwkJICAgIG1jaF9tZW1tb3ZlKEFSR0xJU1QgKyBtYXRjaCwgQVJHTElTVCArIG1hdGNoICsgMSwKKwkJCSAgICAoQVJHQ09VTlQgLSBtYXRjaCAtIDEpICogc2l6ZW9mKGFlbnRyeV9UKSk7CisJCSAgICAtLUFMSVNUKGN1cndpbiktPmFsX2dhLmdhX2xlbjsKKwkJICAgICsrQUxJU1QoY3Vyd2luKS0+YWxfZ2EuZ2Ffcm9vbTsKKwkJICAgIGlmIChjdXJ3aW4tPndfYXJnX2lkeCA+IG1hdGNoKQorCQkJLS1jdXJ3aW4tPndfYXJnX2lkeDsKKwkJICAgIC0tbWF0Y2g7CisJCX0KKworCSAgICB2aW1fZnJlZShyZWdtYXRjaC5yZWdwcm9nKTsKKwkgICAgdmltX2ZyZWUocCk7CisJICAgIGlmICghZGlkb25lKQorCQlFTVNHMihfKGVfbm9tYXRjaDIpLCAoKGNoYXJfdSAqKiluZXdfZ2EuZ2FfZGF0YSlbaV0pOworCX0KKwlnYV9jbGVhcigmbmV3X2dhKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCWkgPSBleHBhbmRfd2lsZGNhcmRzKG5ld19nYS5nYV9sZW4sIChjaGFyX3UgKiopbmV3X2dhLmdhX2RhdGEsCisJCSZleHBfY291bnQsICZleHBfZmlsZXMsIEVXX0RJUnxFV19GSUxFfEVXX0FERFNMQVNIfEVXX05PVEZPVU5EKTsKKwlnYV9jbGVhcigmbmV3X2dhKTsKKwlpZiAoaSA9PSBGQUlMKQorCSAgICByZXR1cm4gRkFJTDsKKwlpZiAoZXhwX2NvdW50ID09IDApCisJeworCSAgICBFTVNHKF8oZV9ub21hdGNoKSk7CisJICAgIHJldHVybiBGQUlMOworCX0KKworI2lmZGVmIEZFQVRfTElTVENNRFMKKwlpZiAod2hhdCA9PSBBTF9BREQpCisJeworCSAgICAodm9pZClhbGlzdF9hZGRfbGlzdChleHBfY291bnQsIGV4cF9maWxlcywgYWZ0ZXIpOworCSAgICB2aW1fZnJlZShleHBfZmlsZXMpOworCX0KKwllbHNlIC8qIHdoYXQgPT0gQUxfU0VUICovCisjZW5kaWYKKwkgICAgYWxpc3Rfc2V0KEFMSVNUKGN1cndpbiksIGV4cF9jb3VudCwgZXhwX2ZpbGVzLCBGQUxTRSk7CisgICAgfQorCisgICAgYWxpc3RfY2hlY2tfYXJnX2lkeCgpOworCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBhcmdfaWR4IGZvciBlYWNoIG90aGVyIHdpbmRvdy4KKyAqLworICAgIHN0YXRpYyB2b2lkCithbGlzdF9jaGVja19hcmdfaWR4KCkKK3sKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICB3aW5fVAkqd2luOworCisgICAgZm9yICh3aW4gPSBmaXJzdHdpbjsgd2luICE9IE5VTEw7IHdpbiA9IHdpbi0+d19uZXh0KQorCWlmICh3aW4tPndfYWxpc3QgPT0gY3Vyd2luLT53X2FsaXN0KQorCSAgICBjaGVja19hcmdfaWR4KHdpbik7CisjZWxzZQorICAgIGNoZWNrX2FyZ19pZHgoY3Vyd2luKTsKKyNlbmRpZgorfQorCisvKgorICogQ2hlY2sgaWYgd2luZG93ICJ3aW4iIGlzIGVkaXRpbmcgdGhlIHdfYXJnX2lkeCBmaWxlIGluIGl0cyBhcmd1bWVudCBsaXN0LgorICovCisgICAgdm9pZAorY2hlY2tfYXJnX2lkeCh3aW4pCisgICAgd2luX1QJKndpbjsKK3sKKyAgICBpZiAoV0FSR0NPVU5UKHdpbikgPiAxCisJICAgICYmICh3aW4tPndfYXJnX2lkeCA+PSBXQVJHQ09VTlQod2luKQorCQl8fCAod2luLT53X2J1ZmZlci0+Yl9mbnVtCisJCQkJICAgICAgIT0gV0FSR0xJU1Qod2luKVt3aW4tPndfYXJnX2lkeF0uYWVfZm51bQorCQkgICAgJiYgKHdpbi0+d19idWZmZXItPmJfZmZuYW1lID09IE5VTEwKKwkJCSB8fCAhKGZ1bGxwYXRoY21wKAorCQkJCSBhbGlzdF9uYW1lKCZXQVJHTElTVCh3aW4pW3dpbi0+d19hcmdfaWR4XSksCisJCQkJd2luLT53X2J1ZmZlci0+Yl9mZm5hbWUsIFRSVUUpICYgRlBDX1NBTUUpKSkpKQorICAgIHsKKwkvKiBXZSBhcmUgbm90IGVkaXRpbmcgdGhlIGN1cnJlbnQgZW50cnkgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisJICogU2V0ICJhcmdfaGFkX2xhc3QiIGlmIHdlIGFyZSBlZGl0aW5nIHRoZSBsYXN0IG9uZS4gKi8KKwl3aW4tPndfYXJnX2lkeF9pbnZhbGlkID0gVFJVRTsKKwlpZiAod2luLT53X2FyZ19pZHggIT0gV0FSR0NPVU5UKHdpbikgLSAxCisJCSYmIGFyZ19oYWRfbGFzdCA9PSBGQUxTRQorI2lmZGVmIEZFQVRfV0lORE9XUworCQkmJiBBTElTVCh3aW4pID09ICZnbG9iYWxfYWxpc3QKKyNlbmRpZgorCQkmJiBHQVJHQ09VTlQgPiAwCisJCSYmIHdpbi0+d19hcmdfaWR4IDwgR0FSR0NPVU5UCisJCSYmICh3aW4tPndfYnVmZmVyLT5iX2ZudW0gPT0gR0FSR0xJU1RbR0FSR0NPVU5UIC0gMV0uYWVfZm51bQorCQkgICAgfHwgKHdpbi0+d19idWZmZXItPmJfZmZuYW1lICE9IE5VTEwKKwkJCSYmIChmdWxscGF0aGNtcChhbGlzdF9uYW1lKCZHQVJHTElTVFtHQVJHQ09VTlQgLSAxXSksCisJCQkJd2luLT53X2J1ZmZlci0+Yl9mZm5hbWUsIFRSVUUpICYgRlBDX1NBTUUpKSkpCisJICAgIGFyZ19oYWRfbGFzdCA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogV2UgYXJlIGVkaXRpbmcgdGhlIGN1cnJlbnQgZW50cnkgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisJICogU2V0ICJhcmdfaGFkX2xhc3QiIGlmIGl0J3MgYWxzbyB0aGUgbGFzdCBvbmUgKi8KKwl3aW4tPndfYXJnX2lkeF9pbnZhbGlkID0gRkFMU0U7CisJaWYgKHdpbi0+d19hcmdfaWR4ID09IFdBUkdDT1VOVCh3aW4pIC0gMQorI2lmZGVmIEZFQVRfV0lORE9XUworCQkmJiB3aW4tPndfYWxpc3QgPT0gJmdsb2JhbF9hbGlzdAorI2VuZGlmCisJCSkKKwkgICAgYXJnX2hhZF9sYXN0ID0gVFJVRTsKKyAgICB9Cit9CisKKy8qCisgKiAiOmFyZ3MiLCAiOmFyZ3Nsb2NhbCIgYW5kICI6YXJnc2dsb2JhbCIuCisgKi8KKyAgICB2b2lkCitleF9hcmdzKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQlpOworCisgICAgaWYgKGVhcC0+Y21kaWR4ICE9IENNRF9hcmdzKQorICAgIHsKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX0xJU1RDTURTKQorCWFsaXN0X3VubGluayhBTElTVChjdXJ3aW4pKTsKKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2FyZ2dsb2JhbCkKKwkgICAgQUxJU1QoY3Vyd2luKSA9ICZnbG9iYWxfYWxpc3Q7CisJZWxzZSAvKiBlYXAtPmNtZGlkeCA9PSBDTURfYXJnbG9jYWwgKi8KKwkgICAgYWxpc3RfbmV3KCk7CisjZWxzZQorCWV4X25pKGVhcCk7CisJcmV0dXJuOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKCFlbmRzX2V4Y21kKCplYXAtPmFyZykpCisgICAgeworCS8qCisJICogIjphcmdzIGZpbGUgLi4iOiBkZWZpbmUgbmV3IGFyZ3VtZW50IGxpc3QsIGhhbmRsZSBsaWtlICI6bmV4dCIKKwkgKiBBbHNvIGZvciAiOmFyZ3Nsb2NhbCBmaWxlIC4uIiBhbmQgIjphcmdzZ2xvYmFsIGZpbGUgLi4iLgorCSAqLworCWV4X25leHQoZWFwKTsKKyAgICB9CisgICAgZWxzZQorI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfTElTVENNRFMpCisJaWYgKGVhcC0+Y21kaWR4ID09IENNRF9hcmdzKQorI2VuZGlmCisgICAgeworCS8qCisJICogIjphcmdzIjogbGlzdCBhcmd1bWVudHMuCisJICovCisJaWYgKEFSR0NPVU5UID4gMCkKKwl7CisJICAgIC8qIE92ZXJ3cml0ZSB0aGUgY29tbWFuZCwgZm9yIGEgc2hvcnQgbGlzdCB0aGVyZSBpcyBubyBzY3JvbGxpbmcKKwkgICAgICogcmVxdWlyZWQgYW5kIG5vIHdhaXRfcmV0dXJuKCkuICovCisJICAgIGdvdG9jbWRsaW5lKFRSVUUpOworCSAgICBmb3IgKGkgPSAwOyBpIDwgQVJHQ09VTlQ7ICsraSkKKwkgICAgeworCQlpZiAoaSA9PSBjdXJ3aW4tPndfYXJnX2lkeCkKKwkJICAgIG1zZ19wdXRjaGFyKCdbJyk7CisJCW1zZ19vdXR0cmFucyhhbGlzdF9uYW1lKCZBUkdMSVNUW2ldKSk7CisJCWlmIChpID09IGN1cndpbi0+d19hcmdfaWR4KQorCQkgICAgbXNnX3B1dGNoYXIoJ10nKTsKKwkJbXNnX3B1dGNoYXIoJyAnKTsKKwkgICAgfQorCX0KKyAgICB9CisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9MSVNUQ01EUykKKyAgICBlbHNlIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfYXJnbG9jYWwpCisgICAgeworCWdhcnJheV9UCSpnYXAgPSAmY3Vyd2luLT53X2FsaXN0LT5hbF9nYTsKKworCS8qCisJICogIjphcmdzbG9jYWwiOiBtYWtlIGEgbG9jYWwgY29weSBvZiB0aGUgZ2xvYmFsIGFyZ3VtZW50IGxpc3QuCisJICovCisJaWYgKGdhX2dyb3coZ2FwLCBHQVJHQ09VTlQpID09IE9LKQorCSAgICBmb3IgKGkgPSAwOyBpIDwgR0FSR0NPVU5UOyArK2kpCisJCWlmIChHQVJHTElTVFtpXS5hZV9mbmFtZSAhPSBOVUxMKQorCQl7CisJCSAgICBBQVJHTElTVChjdXJ3aW4tPndfYWxpc3QpW2dhcC0+Z2FfbGVuXS5hZV9mbmFtZSA9CisJCQkJCSAgICB2aW1fc3Ryc2F2ZShHQVJHTElTVFtpXS5hZV9mbmFtZSk7CisJCSAgICBBQVJHTElTVChjdXJ3aW4tPndfYWxpc3QpW2dhcC0+Z2FfbGVuXS5hZV9mbnVtID0KKwkJCQkJCQkgIEdBUkdMSVNUW2ldLmFlX2ZudW07CisJCSAgICArK2dhcC0+Z2FfbGVuOworCQkgICAgLS1nYXAtPmdhX3Jvb207CisJCX0KKyAgICB9CisjZW5kaWYKK30KKworLyoKKyAqICI6cHJldmlvdXMiLCAiOnNwcmV2aW91cyIsICI6TmV4dCIgYW5kICI6c05leHQiLgorICovCisgICAgdm9pZAorZXhfcHJldmlvdXMoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICAvKiBJZiBwYXN0IHRoZSBsYXN0IG9uZSBhbHJlYWR5LCBnbyB0byB0aGUgbGFzdCBvbmUuICovCisgICAgaWYgKGN1cndpbi0+d19hcmdfaWR4IC0gKGludCllYXAtPmxpbmUyID49IEFSR0NPVU5UKQorCWRvX2FyZ2ZpbGUoZWFwLCBBUkdDT1VOVCAtIDEpOworICAgIGVsc2UKKwlkb19hcmdmaWxlKGVhcCwgY3Vyd2luLT53X2FyZ19pZHggLSAoaW50KWVhcC0+bGluZTIpOworfQorCisvKgorICogIjpyZXdpbmQiLCAiOmZpcnN0IiwgIjpzZmlyc3QiIGFuZCAiOnNyZXdpbmQiLgorICovCisgICAgdm9pZAorZXhfcmV3aW5kKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgZG9fYXJnZmlsZShlYXAsIDApOworfQorCisvKgorICogIjpsYXN0IiBhbmQgIjpzbGFzdCIuCisgKi8KKyAgICB2b2lkCitleF9sYXN0KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgZG9fYXJnZmlsZShlYXAsIEFSR0NPVU5UIC0gMSk7Cit9CisKKy8qCisgKiAiOmFyZ3VtZW50IiBhbmQgIjpzYXJndW1lbnQiLgorICovCisgICAgdm9pZAorZXhfYXJndW1lbnQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBpZiAoZWFwLT5hZGRyX2NvdW50ID4gMCkKKwlpID0gZWFwLT5saW5lMiAtIDE7CisgICAgZWxzZQorCWkgPSBjdXJ3aW4tPndfYXJnX2lkeDsKKyAgICBkb19hcmdmaWxlKGVhcCwgaSk7Cit9CisKKy8qCisgKiBFZGl0IGZpbGUgImFyZ24iIG9mIHRoZSBhcmd1bWVudCBsaXN0cy4KKyAqLworICAgIHZvaWQKK2RvX2FyZ2ZpbGUoZWFwLCBhcmduKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICBpbnQJCWFyZ247Cit7CisgICAgaW50CQlvdGhlcjsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBpZiAoYXJnbiA8IDAgfHwgYXJnbiA+PSBBUkdDT1VOVCkKKyAgICB7CisJaWYgKEFSR0NPVU5UIDw9IDEpCisJICAgIEVNU0coXygiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IikpOworCWVsc2UgaWYgKGFyZ24gPCAwKQorCSAgICBFTVNHKF8oIkUxNjQ6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgZmlsZSIpKTsKKwllbHNlCisJICAgIEVNU0coXygiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJc2V0cGNtYXJrKCk7CisjaWZkZWYgRkVBVF9HVUkKKwluZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwlpZiAoKmVhcC0+Y21kID09ICdzJykJICAgIC8qIHNwbGl0IHdpbmRvdyBmaXJzdCAqLworCXsKKwkgICAgaWYgKHdpbl9zcGxpdCgwLCAwKSA9PSBGQUlMKQorCQlyZXR1cm47CisjIGlmZGVmIEZFQVRfU0NST0xMQklORAorCSAgICBjdXJ3aW4tPndfcF9zY2IgPSBGQUxTRTsKKyMgZW5kaWYKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICAvKgorCSAgICAgKiBpZiAnaGlkZGVuJyBzZXQsIG9ubHkgY2hlY2sgZm9yIGNoYW5nZWQgZmlsZSB3aGVuIHJlLWVkaXRpbmcKKwkgICAgICogdGhlIHNhbWUgYnVmZmVyCisJICAgICAqLworCSAgICBvdGhlciA9IFRSVUU7CisJICAgIGlmIChQX0hJRChjdXJidWYpKQorCSAgICB7CisJCXAgPSBmaXhfZm5hbWUoYWxpc3RfbmFtZSgmQVJHTElTVFthcmduXSkpOworCQlvdGhlciA9IG90aGVyZmlsZShwKTsKKwkJdmltX2ZyZWUocCk7CisJICAgIH0KKwkgICAgaWYgKCghUF9ISUQoY3VyYnVmKSB8fCAhb3RoZXIpCisJCSAgJiYgY2hlY2tfY2hhbmdlZChjdXJidWYsIFRSVUUsICFvdGhlciwgZWFwLT5mb3JjZWl0LCBGQUxTRSkpCisJCXJldHVybjsKKwl9CisKKwljdXJ3aW4tPndfYXJnX2lkeCA9IGFyZ247CisJaWYgKGFyZ24gPT0gQVJHQ09VTlQgLSAxCisjaWZkZWYgRkVBVF9XSU5ET1dTCisJCSYmIGN1cndpbi0+d19hbGlzdCA9PSAmZ2xvYmFsX2FsaXN0CisjZW5kaWYKKwkgICApCisJICAgIGFyZ19oYWRfbGFzdCA9IFRSVUU7CisKKwkvKiBFZGl0IHRoZSBmaWxlOyBhbHdheXMgdXNlIHRoZSBsYXN0IGtub3duIGxpbmUgbnVtYmVyLiAqLworCSh2b2lkKWRvX2VjbWQoMCwgYWxpc3RfbmFtZSgmQVJHTElTVFtjdXJ3aW4tPndfYXJnX2lkeF0pLCBOVUxMLAorCQkgICAgICBlYXAsIEVDTURfTEFTVCwKKwkJICAgICAgKFBfSElEKGN1cndpbi0+d19idWZmZXIpID8gRUNNRF9ISURFIDogMCkgKworCQkJCQkgICAoZWFwLT5mb3JjZWl0ID8gRUNNRF9GT1JDRUlUIDogMCkpOworCisJLyogbGlrZSBWaTogc2V0IHRoZSBtYXJrIHdoZXJlIHRoZSBjdXJzb3IgaXMgaW4gdGhlIGZpbGUuICovCisJaWYgKGVhcC0+Y21kaWR4ICE9IENNRF9hcmdkbykKKwkgICAgc2V0bWFyaygnXCcnKTsKKyAgICB9Cit9CisKKy8qCisgKiAiOm5leHQiLCBhbmQgY29tbWFuZHMgdGhhdCBiZWhhdmUgbGlrZSBpdC4KKyAqLworICAgIHZvaWQKK2V4X25leHQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWk7CisKKyAgICAvKgorICAgICAqIGNoZWNrIGZvciBjaGFuZ2VkIGJ1ZmZlciBub3csIGlmIHRoaXMgZmFpbHMgdGhlIGFyZ3VtZW50IGxpc3QgaXMgbm90CisgICAgICogcmVkZWZpbmVkLgorICAgICAqLworICAgIGlmICggICAgICAgUF9ISUQoY3VyYnVmKQorCSAgICB8fCBlYXAtPmNtZGlkeCA9PSBDTURfc25leHQKKwkgICAgfHwgIWNoZWNrX2NoYW5nZWQoY3VyYnVmLCBUUlVFLCBGQUxTRSwgZWFwLT5mb3JjZWl0LCBGQUxTRSkpCisgICAgeworCWlmICgqZWFwLT5hcmcgIT0gTlVMKQkJICAgIC8qIHJlZGVmaW5lIGZpbGUgbGlzdCAqLworCXsKKwkgICAgaWYgKGRvX2FyZ2xpc3QoZWFwLT5hcmcsIEFMX1NFVCwgMCkgPT0gRkFJTCkKKwkJcmV0dXJuOworCSAgICBpID0gMDsKKwl9CisJZWxzZQorCSAgICBpID0gY3Vyd2luLT53X2FyZ19pZHggKyAoaW50KWVhcC0+bGluZTI7CisJZG9fYXJnZmlsZShlYXAsIGkpOworICAgIH0KK30KKworI2lmZGVmIEZFQVRfTElTVENNRFMKKy8qCisgKiAiOmFyZ2VkaXQiCisgKi8KKyAgICB2b2lkCitleF9hcmdlZGl0KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQlmbnVtOworICAgIGludAkJaTsKKyAgICBjaGFyX3UJKnM7CisKKyAgICAvKiBBZGQgdGhlIGFyZ3VtZW50IHRvIHRoZSBidWZmZXIgbGlzdCBhbmQgZ2V0IHRoZSBidWZmZXIgbnVtYmVyLiAqLworICAgIGZudW0gPSBidWZsaXN0X2FkZChlYXAtPmFyZywgQkxOX0xJU1RFRCk7CisKKyAgICAvKiBDaGVjayBpZiB0aGlzIGFyZ3VtZW50IGlzIGFscmVhZHkgaW4gdGhlIGFyZ3VtZW50IGxpc3QuICovCisgICAgZm9yIChpID0gMDsgaSA8IEFSR0NPVU5UOyArK2kpCisJaWYgKEFSR0xJU1RbaV0uYWVfZm51bSA9PSBmbnVtKQorCSAgICBicmVhazsKKyAgICBpZiAoaSA9PSBBUkdDT1VOVCkKKyAgICB7CisJLyogQ2FuJ3QgZmluZCBpdCwgYWRkIGl0IHRvIHRoZSBhcmd1bWVudCBsaXN0LiAqLworCXMgPSB2aW1fc3Ryc2F2ZShlYXAtPmFyZyk7CisJaWYgKHMgPT0gTlVMTCkKKwkgICAgcmV0dXJuOworCWkgPSBhbGlzdF9hZGRfbGlzdCgxLCAmcywKKwkgICAgICAgZWFwLT5hZGRyX2NvdW50ID4gMCA/IChpbnQpZWFwLT5saW5lMiA6IGN1cndpbi0+d19hcmdfaWR4ICsgMSk7CisJaWYgKGkgPCAwKQorCSAgICByZXR1cm47CisJY3Vyd2luLT53X2FyZ19pZHggPSBpOworICAgIH0KKworICAgIGFsaXN0X2NoZWNrX2FyZ19pZHgoKTsKKworICAgIC8qIEVkaXQgdGhlIGFyZ3VtZW50LiAqLworICAgIGRvX2FyZ2ZpbGUoZWFwLCBpKTsKK30KKworLyoKKyAqICI6YXJnYWRkIgorICovCisgICAgdm9pZAorZXhfYXJnYWRkKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgZG9fYXJnbGlzdChlYXAtPmFyZywgQUxfQURELAorCSAgICAgICBlYXAtPmFkZHJfY291bnQgPiAwID8gKGludCllYXAtPmxpbmUyIDogY3Vyd2luLT53X2FyZ19pZHggKyAxKTsKKyNpZmRlZiBGRUFUX1RJVExFCisgICAgbWFrZXRpdGxlKCk7CisjZW5kaWYKK30KKworLyoKKyAqICI6YXJnZGVsZXRlIgorICovCisgICAgdm9pZAorZXhfYXJnZGVsZXRlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQlpOworICAgIGludAkJbjsKKworICAgIGlmIChlYXAtPmFkZHJfY291bnQgPiAwKQorICAgIHsKKwkvKiAiOjEsNGFyZ2RlbCI6IERlbGV0ZSBhbGwgYXJndW1lbnRzIGluIHRoZSByYW5nZS4gKi8KKwlpZiAoZWFwLT5saW5lMiA+IEFSR0NPVU5UKQorCSAgICBlYXAtPmxpbmUyID0gQVJHQ09VTlQ7CisJbiA9IGVhcC0+bGluZTIgLSBlYXAtPmxpbmUxICsgMTsKKwlpZiAoKmVhcC0+YXJnICE9IE5VTCB8fCBuIDw9IDApCisJICAgIEVNU0coXyhlX2ludmFyZykpOworCWVsc2UKKwl7CisJICAgIGZvciAoaSA9IGVhcC0+bGluZTE7IGkgPD0gZWFwLT5saW5lMjsgKytpKQorCQl2aW1fZnJlZShBUkdMSVNUW2kgLSAxXS5hZV9mbmFtZSk7CisJICAgIG1jaF9tZW1tb3ZlKEFSR0xJU1QgKyBlYXAtPmxpbmUxIC0gMSwgQVJHTElTVCArIGVhcC0+bGluZTIsCisJCQkoc2l6ZV90KSgoQVJHQ09VTlQgLSBlYXAtPmxpbmUyKSAqIHNpemVvZihhZW50cnlfVCkpKTsKKwkgICAgQUxJU1QoY3Vyd2luKS0+YWxfZ2EuZ2FfbGVuIC09IG47CisJICAgIEFMSVNUKGN1cndpbiktPmFsX2dhLmdhX3Jvb20gKz0gbjsKKwkgICAgaWYgKGN1cndpbi0+d19hcmdfaWR4ID49IGVhcC0+bGluZTIpCisJCWN1cndpbi0+d19hcmdfaWR4IC09IG47CisJICAgIGVsc2UgaWYgKGN1cndpbi0+d19hcmdfaWR4ID4gZWFwLT5saW5lMSkKKwkJY3Vyd2luLT53X2FyZ19pZHggPSBlYXAtPmxpbmUxOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAoKmVhcC0+YXJnID09IE5VTCkKKwlFTVNHKF8oZV9hcmdyZXEpKTsKKyAgICBlbHNlCisJZG9fYXJnbGlzdChlYXAtPmFyZywgQUxfREVMLCAwKTsKKyNpZmRlZiBGRUFUX1RJVExFCisgICAgbWFrZXRpdGxlKCk7CisjZW5kaWYKK30KKworLyoKKyAqICI6YXJnZG8iLCAiOndpbmRvIiwgIjpidWZkbyIKKyAqLworICAgIHZvaWQKK2V4X2xpc3RkbyhlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJaTsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICB3aW5fVAkqd2luOworI2VuZGlmCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCW5leHRfZm51bSA9IDA7CisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9TWU5fSEwpCisgICAgY2hhcl91CSpzYXZlX2VpID0gTlVMTDsKKyAgICBjaGFyX3UJKm5ld19laTsKKyNlbmRpZgorCisjaWZuZGVmIEZFQVRfV0lORE9XUworICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfd2luZG8pCisgICAgeworCWV4X25pKGVhcCk7CisJcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9TWU5fSEwpCisgICAgaWYgKGVhcC0+Y21kaWR4ICE9IENNRF93aW5kbykKKyAgICB7CisJLyogQWRkICJTeW50YXgiIHRvICdldmVudGlnbm9yZScgdG8gc2tpcCBsb2FkaW5nIHN5bnRheCBoaWdobGlnaHRpbmcKKwkgKiBmb3IgZXZlcnkgYnVmZmVyIGxvYWRlZCBpbnRvIHRoZSB3aW5kb3cuICBBIGNvbnNpZGVyYWJsZSBzcGVlZAorCSAqIGltcHJvdmVtZW50LiAqLworCXNhdmVfZWkgPSB2aW1fc3Ryc2F2ZShwX2VpKTsKKwlpZiAoc2F2ZV9laSAhPSBOVUxMKQorCXsKKwkgICAgbmV3X2VpID0gdmltX3N0cm5zYXZlKHBfZWksIChpbnQpU1RSTEVOKHBfZWkpICsgOCk7CisJICAgIGlmIChuZXdfZWkgIT0gTlVMTCkKKwkgICAgeworCQlTVFJDQVQobmV3X2VpLCAiLFN5bnRheCIpOworCQlzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QoKGNoYXJfdSAqKSJlaSIsIC0xLCBuZXdfZWksIE9QVF9GUkVFKTsKKwkJdmltX2ZyZWUobmV3X2VpKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfd2luZG8KKwkgICAgfHwgUF9ISUQoY3VyYnVmKQorCSAgICB8fCAhY2hlY2tfY2hhbmdlZChjdXJidWYsIFRSVUUsIEZBTFNFLCBlYXAtPmZvcmNlaXQsIEZBTFNFKSkKKyAgICB7CisJLyogc3RhcnQgYXQgdGhlIGZpcnN0IGFyZ3VtZW50L3dpbmRvdy9idWZmZXIgKi8KKwlpID0gMDsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwl3aW4gPSBmaXJzdHdpbjsKKyNlbmRpZgorCS8qIHNldCBwY21hcmsgbm93ICovCisJaWYgKGVhcC0+Y21kaWR4ID09IENNRF9idWZkbykKKwkgICAgZ290b19idWZmZXIoZWFwLCBET0JVRl9GSVJTVCwgRk9SV0FSRCwgMCk7CisJZWxzZQorCSAgICBzZXRwY21hcmsoKTsKKwlsaXN0Y21kX2J1c3kgPSBUUlVFOwkgICAgLyogYXZvaWRzIHNldHRpbmcgcGNtYXJrIGJlbG93ICovCisKKwl3aGlsZSAoIWdvdF9pbnQpCisJeworCSAgICBpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2FyZ2RvKQorCSAgICB7CisJCS8qIGdvIHRvIGFyZ3VtZW50ICJpIiAqLworCQlpZiAoaSA9PSBBUkdDT1VOVCkKKwkJICAgIGJyZWFrOworCQkvKiBEb24ndCBjYWxsIGRvX2FyZ2ZpbGUoKSB3aGVuIGFscmVhZHkgdGhlcmUsIGl0IHdpbGwgdHJ5CisJCSAqIHJlbG9hZGluZyB0aGUgZmlsZS4gKi8KKwkJaWYgKGN1cndpbi0+d19hcmdfaWR4ICE9IGkpCisJCSAgICBkb19hcmdmaWxlKGVhcCwgaSk7CisJCWlmIChjdXJ3aW4tPndfYXJnX2lkeCAhPSBpKQorCQkgICAgYnJlYWs7CisJCSsraTsKKwkgICAgfQorI2lmZGVmIEZFQVRfV0lORE9XUworCSAgICBlbHNlIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfd2luZG8pCisJICAgIHsKKwkJLyogZ28gdG8gd2luZG93ICJ3aW4iICovCisJCWlmICghd2luX3ZhbGlkKHdpbikpCisJCSAgICBicmVhazsKKwkJd2luX2dvdG8od2luKTsKKwkJd2luID0gd2luLT53X25leHQ7CisJICAgIH0KKyNlbmRpZgorCSAgICBlbHNlIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfYnVmZG8pCisJICAgIHsKKwkJLyogUmVtZW1iZXIgdGhlIG51bWJlciBvZiB0aGUgbmV4dCBsaXN0ZWQgYnVmZmVyLCBpbiBjYXNlCisJCSAqICI6YndpcGUiIGlzIHVzZWQgb3IgYXV0b2NvbW1hbmRzIGRvIHNvbWV0aGluZyBzdHJhbmdlLiAqLworCQluZXh0X2ZudW0gPSAtMTsKKwkJZm9yIChidWYgPSBjdXJidWYtPmJfbmV4dDsgYnVmICE9IE5VTEw7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorCQkgICAgaWYgKGJ1Zi0+Yl9wX2JsKQorCQkgICAgeworCQkJbmV4dF9mbnVtID0gYnVmLT5iX2ZudW07CisJCQlicmVhazsKKwkJICAgIH0KKwkgICAgfQorCisJICAgIC8qIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKwkgICAgZG9fY21kbGluZShlYXAtPmFyZywgZWFwLT5nZXRsaW5lLCBlYXAtPmNvb2tpZSwKKwkJCQkJCURPQ01EX1ZFUkJPU0UgKyBET0NNRF9OT1dBSVQpOworCisJICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfYnVmZG8pCisJICAgIHsKKwkJLyogRG9uZT8gKi8KKwkJaWYgKG5leHRfZm51bSA8IDApCisJCSAgICBicmVhazsKKwkJLyogQ2hlY2sgaWYgdGhlIGJ1ZmZlciBzdGlsbCBleGlzdHMuICovCisJCWZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKwkJICAgIGlmIChidWYtPmJfZm51bSA9PSBuZXh0X2ZudW0pCisJCQlicmVhazsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQorCQkgICAgYnJlYWs7CisJCWdvdG9fYnVmZmVyKGVhcCwgRE9CVUZfRklSU1QsIEZPUldBUkQsIG5leHRfZm51bSk7CisJCS8qIElmIGF1dG9jb21tYW5kcyB0b29rIHVzIGVsc2V3aGVyZSwgcXVpdCBoZXJlICovCisJCWlmIChjdXJidWYtPmJfZm51bSAhPSBuZXh0X2ZudW0pCisJCSAgICBicmVhazsKKwkgICAgfQorCisJICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfd2luZG8pCisJICAgIHsKKwkJdmFsaWRhdGVfY3Vyc29yKCk7CS8qIGN1cnNvciBtYXkgaGF2ZSBtb3ZlZCAqLworI2lmZGVmIEZFQVRfU0NST0xMQklORAorCQkvKiByZXF1aXJlZCB3aGVuICdzY3JvbGxiaW5kJyBoYXMgYmVlbiBzZXQgKi8KKwkJaWYgKGN1cndpbi0+d19wX3NjYikKKwkJICAgIGRvX2NoZWNrX3Njcm9sbGJpbmQoVFJVRSk7CisjZW5kaWYKKwkgICAgfQorCX0KKwlsaXN0Y21kX2J1c3kgPSBGQUxTRTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkgJiYgZGVmaW5lZChGRUFUX1NZTl9ITCkKKyAgICBpZiAoc2F2ZV9laSAhPSBOVUxMKQorICAgIHsKKwlzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QoKGNoYXJfdSAqKSJlaSIsIC0xLCBzYXZlX2VpLCBPUFRfRlJFRSk7CisJYXBwbHlfYXV0b2NtZHMoRVZFTlRfU1lOVEFYLCBjdXJidWYtPmJfcF9zeW4sCisJCQkJCSAgICAgICBjdXJidWYtPmJfZm5hbWUsIFRSVUUsIGN1cmJ1Zik7CisJdmltX2ZyZWUoc2F2ZV9laSk7CisgICAgfQorI2VuZGlmCit9CisKKy8qCisgKiBBZGQgZmlsZXNbY291bnRdIHRvIHRoZSBhcmdsaXN0IG9mIHRoZSBjdXJyZW50IHdpbmRvdyBhZnRlciBhcmcgImFmdGVyIi4KKyAqIFRoZSBmaWxlIG5hbWVzIGluIGZpbGVzW2NvdW50XSBtdXN0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgYW5kIGFyZSB0YWtlbiBvdmVyLgorICogRmlsZXNbXSBpdHNlbGYgaXMgbm90IHRha2VuIG92ZXIuCisgKiBSZXR1cm5zIGluZGV4IG9mIGZpcnN0IGFkZGVkIGFyZ3VtZW50LiAgUmV0dXJucyAtMSB3aGVuIGZhaWxlZCAob3V0IG9mIG1lbSkuCisgKi8KKyAgICBzdGF0aWMgaW50CithbGlzdF9hZGRfbGlzdChjb3VudCwgZmlsZXMsIGFmdGVyKQorICAgIGludAkJY291bnQ7CisgICAgY2hhcl91CSoqZmlsZXM7CisgICAgaW50CQlhZnRlcjsJICAgIC8qIHdoZXJlIHRvIGFkZDogMCA9IGJlZm9yZSBmaXJzdCBvbmUgKi8KK3sKKyAgICBpbnQJCWk7CisKKyAgICBpZiAoZ2FfZ3JvdygmQUxJU1QoY3Vyd2luKS0+YWxfZ2EsIGNvdW50KSA9PSBPSykKKyAgICB7CisJaWYgKGFmdGVyIDwgMCkKKwkgICAgYWZ0ZXIgPSAwOworCWlmIChhZnRlciA+IEFSR0NPVU5UKQorCSAgICBhZnRlciA9IEFSR0NPVU5UOworCWlmIChhZnRlciA8IEFSR0NPVU5UKQorCSAgICBtY2hfbWVtbW92ZSgmKEFSR0xJU1RbYWZ0ZXIgKyBjb3VudF0pLCAmKEFSR0xJU1RbYWZ0ZXJdKSwKKwkJCQkgICAgICAgKEFSR0NPVU5UIC0gYWZ0ZXIpICogc2l6ZW9mKGFlbnRyeV9UKSk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJeworCSAgICBBUkdMSVNUW2FmdGVyICsgaV0uYWVfZm5hbWUgPSBmaWxlc1tpXTsKKwkgICAgQVJHTElTVFthZnRlciArIGldLmFlX2ZudW0gPSBidWZsaXN0X2FkZChmaWxlc1tpXSwgQkxOX0xJU1RFRCk7CisJfQorCUFMSVNUKGN1cndpbiktPmFsX2dhLmdhX2xlbiArPSBjb3VudDsKKwlBTElTVChjdXJ3aW4pLT5hbF9nYS5nYV9yb29tIC09IGNvdW50OworCWlmIChjdXJ3aW4tPndfYXJnX2lkeCA+PSBhZnRlcikKKwkgICAgKytjdXJ3aW4tPndfYXJnX2lkeDsKKwlyZXR1cm4gYWZ0ZXI7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJdmltX2ZyZWUoZmlsZXNbaV0pOworICAgIHJldHVybiAtMTsKK30KKworI2VuZGlmIC8qIEZFQVRfTElTVENNRFMgKi8KKworI2lmZGVmIEZFQVRfRVZBTAorLyoKKyAqICI6Y29tcGlsZXJbIV0ge25hbWV9IgorICovCisgICAgdm9pZAorZXhfY29tcGlsZXIoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBjaGFyX3UJKm9sZF9jdXJfY29tcCA9IE5VTEw7CisgICAgY2hhcl91CSpwOworCisgICAgaWYgKCplYXAtPmFyZyA9PSBOVUwpCisgICAgeworCS8qIExpc3QgYWxsIGNvbXBpbGVyIHNjcmlwdHMuICovCisJZG9fY21kbGluZV9jbWQoKGNoYXJfdSAqKSJlY2hvIGdsb2JwYXRoKCZydHAsICdjb21waWxlci8qLnZpbScpIik7CisJCQkJCS8qICkga2VlcCB0aGUgaW5kZW50ZXIgaGFwcHkuLi4gKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlidWYgPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTihlYXAtPmFyZykgKyAxNCkpOworCWlmIChidWYgIT0gTlVMTCkKKwl7CisJICAgIGlmIChlYXAtPmZvcmNlaXQpCisJICAgIHsKKwkJLyogIjpjb21waWxlciEge25hbWV9IiBzZXRzIGdsb2JhbCBvcHRpb25zICovCisJCWRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikKKwkJCQkgICAiY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXQgPGFyZ3M+Iik7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qICI6Y29tcGlsZXIhIHtuYW1lfSIgc2V0cyBsb2NhbCBvcHRpb25zLgorCQkgKiBUbyByZW1haW4gYmFja3dhcmRzIGNvbXBhdGlibGUgImN1cnJlbnRfY29tcGlsZXIiIGlzIGFsd2F5cworCQkgKiB1c2VkLiAgQSB1c2VyJ3MgY29tcGlsZXIgcGx1Z2luIG1heSBzZXQgaXQsIHRoZSBkaXN0cmlidXRlZAorCQkgKiBwbHVnaW4gd2lsbCB0aGVuIHNraXAgdGhlIHNldHRpbmdzLiAgQWZ0ZXJ3YXJkcyBzZXQKKwkJICogImI6Y3VycmVudF9jb21waWxlciIgYW5kIHJlc3RvcmUgImN1cnJlbnRfY29tcGlsZXIiLiAqLworCQlvbGRfY3VyX2NvbXAgPSBnZXRfdmFyX3ZhbHVlKChjaGFyX3UgKikiY3VycmVudF9jb21waWxlciIpOworCQlpZiAob2xkX2N1cl9jb21wICE9IE5VTEwpCisJCSAgICBvbGRfY3VyX2NvbXAgPSB2aW1fc3Ryc2F2ZShvbGRfY3VyX2NvbXApOworCQlkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopCisJCQkgICAgICAiY29tbWFuZCAtbmFyZ3M9KiBDb21waWxlclNldCBzZXRsb2NhbCA8YXJncz4iKTsKKwkgICAgfQorCSAgICBkb191bmxldCgoY2hhcl91ICopImN1cnJlbnRfY29tcGlsZXIiKTsKKwkgICAgZG9fdW5sZXQoKGNoYXJfdSAqKSJiOmN1cnJlbnRfY29tcGlsZXIiKTsKKworCSAgICBzcHJpbnRmKChjaGFyICopYnVmLCAiY29tcGlsZXIvJXMudmltIiwgZWFwLT5hcmcpOworCSAgICBpZiAoY21kX3J1bnRpbWUoYnVmLCBUUlVFKSA9PSBGQUlMKQorCQlFTVNHMihfKCJFNjY2OiBjb21waWxlciBub3Qgc3VwcG9ydGVkOiAlcyIpLCBlYXAtPmFyZyk7CisJICAgIHZpbV9mcmVlKGJ1Zik7CisKKwkgICAgZG9fY21kbGluZV9jbWQoKGNoYXJfdSAqKSI6ZGVsY29tbWFuZCBDb21waWxlclNldCIpOworCisJICAgIC8qIFNldCAiYjpjdXJyZW50X2NvbXBpbGVyIiBmcm9tICJjdXJyZW50X2NvbXBpbGVyIi4gKi8KKwkgICAgcCA9IGdldF92YXJfdmFsdWUoKGNoYXJfdSAqKSJjdXJyZW50X2NvbXBpbGVyIik7CisJICAgIGlmIChwICE9IE5VTEwpCisJCXNldF9pbnRlcm5hbF9zdHJpbmdfdmFyKChjaGFyX3UgKikiYjpjdXJyZW50X2NvbXBpbGVyIiwgcCk7CisKKwkgICAgLyogUmVzdG9yZSAiY3VycmVudF9jb21waWxlciIgZm9yICI6Y29tcGlsZXIge25hbWV9Ii4gKi8KKwkgICAgaWYgKCFlYXAtPmZvcmNlaXQpCisJICAgIHsKKwkJaWYgKG9sZF9jdXJfY29tcCAhPSBOVUxMKQorCQl7CisJCSAgICBzZXRfaW50ZXJuYWxfc3RyaW5nX3ZhcigoY2hhcl91ICopImN1cnJlbnRfY29tcGlsZXIiLAorCQkJCQkJCQlvbGRfY3VyX2NvbXApOworCQkgICAgdmltX2ZyZWUob2xkX2N1cl9jb21wKTsKKwkJfQorCQllbHNlCisJCSAgICBkb191bmxldCgoY2hhcl91ICopImN1cnJlbnRfY29tcGlsZXIiKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqICI6cnVudGltZSB7bmFtZX0iCisgKi8KKyAgICB2b2lkCitleF9ydW50aW1lKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY21kX3J1bnRpbWUoZWFwLT5hcmcsIGVhcC0+Zm9yY2VpdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNvdXJjZV9jYWxsYmFjayBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKKworICAgIHN0YXRpYyB2b2lkCitzb3VyY2VfY2FsbGJhY2soZm5hbWUpCisgICAgY2hhcl91CSpmbmFtZTsKK3sKKyAgICAodm9pZClkb19zb3VyY2UoZm5hbWUsIEZBTFNFLCBGQUxTRSk7Cit9CisKKy8qCisgKiBTb3VyY2UgdGhlIGZpbGUgIm5hbWUiIGZyb20gYWxsIGRpcmVjdG9yaWVzIGluICdydW50aW1lcGF0aCcuCisgKiAibmFtZSIgY2FuIGNvbnRhaW4gd2lsZGNhcmRzLgorICogV2hlbiAiYWxsIiBpcyBUUlVFLCBzb3VyY2UgYWxsIGZpbGVzLCBvdGhlcndpc2Ugb25seSB0aGUgZmlyc3Qgb25lLgorICogcmV0dXJuIEZBSUwgd2hlbiBubyBmaWxlIGNvdWxkIGJlIHNvdXJjZWQsIE9LIG90aGVyd2lzZS4KKyAqLworICAgIGludAorY21kX3J1bnRpbWUobmFtZSwgYWxsKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBpbnQJCWFsbDsKK3sKKyAgICByZXR1cm4gZG9faW5fcnVudGltZXBhdGgobmFtZSwgYWxsLCBzb3VyY2VfY2FsbGJhY2spOworfQorCisvKgorICogRmluZCAibmFtZSIgaW4gJ3J1bnRpbWVwYXRoJy4gIFdoZW4gZm91bmQsIGNhbGwgdGhlICJjYWxsYmFjayIgZnVuY3Rpb24gZm9yCisgKiBpdC4KKyAqIFdoZW4gImFsbCIgaXMgVFJVRSByZXBlYXQgZm9yIGFsbCBtYXRjaGVzLCBvdGhlcndpc2Ugb25seSB0aGUgZmlyc3Qgb25lIGlzCisgKiB1c2VkLgorICogUmV0dXJucyBPSyB3aGVuIGF0IGxlYXN0IG9uZSBtYXRjaCBmb3VuZCwgRkFJTCBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK2RvX2luX3J1bnRpbWVwYXRoKG5hbWUsIGFsbCwgY2FsbGJhY2spCisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJYWxsOworICAgIHZvaWQJKCpjYWxsYmFjaylfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKK3sKKyAgICBjaGFyX3UJKnJ0cDsKKyAgICBjaGFyX3UJKm5wOworICAgIGNoYXJfdQkqYnVmOworICAgIGNoYXJfdQkqcnRwX2NvcHk7CisgICAgY2hhcl91CSp0YWlsOworICAgIGludAkJbnVtX2ZpbGVzOworICAgIGNoYXJfdQkqKmZpbGVzOworICAgIGludAkJaTsKKyAgICBpbnQJCWRpZF9vbmUgPSBGQUxTRTsKKyNpZmRlZiBBTUlHQQorICAgIHN0cnVjdCBQcm9jZXNzCSpwcm9jID0gKHN0cnVjdCBQcm9jZXNzICopRmluZFRhc2soMEwpOworICAgIEFQVFIJCXNhdmVfd2lucHRyID0gcHJvYy0+cHJfV2luZG93UHRyOworCisgICAgLyogQXZvaWQgYSByZXF1ZXN0ZXIgaGVyZSBmb3IgYSB2b2x1bWUgdGhhdCBkb2Vzbid0IGV4aXN0LiAqLworICAgIHByb2MtPnByX1dpbmRvd1B0ciA9IChBUFRSKS0xTDsKKyNlbmRpZgorCisgICAgLyogTWFrZSBhIGNvcHkgb2YgJ3J1bnRpbWVwYXRoJy4gIEludm9raW5nIHRoZSBjYWxsYmFjayBtYXkgY2hhbmdlIHRoZQorICAgICAqIHZhbHVlLiAqLworICAgIHJ0cF9jb3B5ID0gdmltX3N0cnNhdmUocF9ydHApOworICAgIGJ1ZiA9IGFsbG9jKE1BWFBBVEhMKTsKKyAgICBpZiAoYnVmICE9IE5VTEwgJiYgcnRwX2NvcHkgIT0gTlVMTCkKKyAgICB7CisJaWYgKHBfdmVyYm9zZSA+IDEpCisJICAgIHNtc2coKGNoYXJfdSAqKV8oIlNlYXJjaGluZyBmb3IgXCIlc1wiIGluIFwiJXNcIiIpLAorCQkJCQkJIChjaGFyICopbmFtZSwgKGNoYXIgKilwX3J0cCk7CisJLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzIGluICdydW50aW1lcGF0aCcuICovCisJcnRwID0gcnRwX2NvcHk7CisJd2hpbGUgKCpydHAgIT0gTlVMICYmIChhbGwgfHwgIWRpZF9vbmUpKQorCXsKKwkgICAgLyogQ29weSB0aGUgcGF0aCBmcm9tICdydW50aW1lcGF0aCcgdG8gYnVmW10uICovCisJICAgIGNvcHlfb3B0aW9uX3BhcnQoJnJ0cCwgYnVmLCBNQVhQQVRITCwgIiwiKTsKKwkgICAgaWYgKFNUUkxFTihidWYpICsgU1RSTEVOKG5hbWUpICsgMiA8IE1BWFBBVEhMKQorCSAgICB7CisJCWFkZF9wYXRoc2VwKGJ1Zik7CisJCXRhaWwgPSBidWYgKyBTVFJMRU4oYnVmKTsKKworCQkvKiBMb29wIG92ZXIgYWxsIHBhdHRlcm5zIGluICJuYW1lIiAqLworCQlucCA9IG5hbWU7CisJCXdoaWxlICgqbnAgIT0gTlVMICYmIChhbGwgfHwgIWRpZF9vbmUpKQorCQl7CisJCSAgICAvKiBBcHBlbmQgdGhlIHBhdHRlcm4gZnJvbSAibmFtZSIgdG8gYnVmW10uICovCisJCSAgICBjb3B5X29wdGlvbl9wYXJ0KCZucCwgdGFpbCwgKGludCkoTUFYUEFUSEwgLSAodGFpbCAtIGJ1ZikpLAorCQkJCQkJCQkgICAgICAgIlx0ICIpOworCisJCSAgICBpZiAocF92ZXJib3NlID4gMikKKwkJCW1zZ19zdHIoKGNoYXJfdSAqKV8oIlNlYXJjaGluZyBmb3IgXCIlc1wiIiksIGJ1Zik7CisKKwkJICAgIC8qIEV4cGFuZCB3aWxkY2FyZHMsIGludm9rZSB0aGUgY2FsbGJhY2sgZm9yIGVhY2ggbWF0Y2guICovCisJCSAgICBpZiAoZ2VuX2V4cGFuZF93aWxkY2FyZHMoMSwgJmJ1ZiwgJm51bV9maWxlcywgJmZpbGVzLAorCQkJCQkJCSAgICAgICBFV19GSUxFKSA9PSBPSykKKwkJICAgIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fZmlsZXM7ICsraSkKKwkJCXsKKwkJCSAgICAoKmNhbGxiYWNrKShmaWxlc1tpXSk7CisJCQkgICAgZGlkX29uZSA9IFRSVUU7CisJCQkgICAgaWYgKCFhbGwpCisJCQkJYnJlYWs7CisJCQl9CisJCQlGcmVlV2lsZChudW1fZmlsZXMsIGZpbGVzKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICB2aW1fZnJlZShidWYpOworICAgIHZpbV9mcmVlKHJ0cF9jb3B5KTsKKyAgICBpZiAocF92ZXJib3NlID4gMCAmJiAhZGlkX29uZSkKKwltc2dfc3RyKChjaGFyX3UgKilfKCJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIiksIG5hbWUpOworCisjaWZkZWYgQU1JR0EKKyAgICBwcm9jLT5wcl9XaW5kb3dQdHIgPSBzYXZlX3dpbnB0cjsKKyNlbmRpZgorCisgICAgcmV0dXJuIGRpZF9vbmUgPyBPSyA6IEZBSUw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgJiYgZGVmaW5lZChGRUFUX0FVVE9DTUQpCisvKgorICogIjpvcHRpb25zIgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitleF9vcHRpb25zKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY21kX3NvdXJjZSgoY2hhcl91ICopU1lTX09QVFdJTl9GSUxFLCBOVUxMKTsKK30KKyNlbmRpZgorCisvKgorICogIjpzb3VyY2Uge2ZuYW1lfSIKKyAqLworICAgIHZvaWQKK2V4X3NvdXJjZShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworI2lmZGVmIEZFQVRfQlJPV1NFCisgICAgaWYgKGNtZG1vZC5icm93c2UpCisgICAgeworCWNoYXJfdSAqZm5hbWUgPSBOVUxMOworCisJZm5hbWUgPSBkb19icm93c2UoRkFMU0UsIChjaGFyX3UgKilfKCJTb3VyY2UgVmltIHNjcmlwdCIpLCBlYXAtPmFyZywKKwkJCQkgICAgICBOVUxMLCBOVUxMLCBCUk9XU0VfRklMVEVSX01BQ1JPUywgTlVMTCk7CisJaWYgKGZuYW1lICE9IE5VTEwpCisJeworCSAgICBjbWRfc291cmNlKGZuYW1lLCBlYXApOworCSAgICB2aW1fZnJlZShmbmFtZSk7CisJfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwljbWRfc291cmNlKGVhcC0+YXJnLCBlYXApOworfQorCisgICAgc3RhdGljIHZvaWQKK2NtZF9zb3VyY2UoZm5hbWUsIGVhcCkKKyAgICBjaGFyX3UJKmZuYW1lOworICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpZiAoKmZuYW1lID09IE5VTCkKKwlFTVNHKF8oZV9hcmdyZXEpKTsKKworICAgIC8qICI6c291cmNlISIgcmVhZCB2aSBjb21tYW5kcyAqLworICAgIGVsc2UgaWYgKGVhcCAhPSBOVUxMICYmIGVhcC0+Zm9yY2VpdCkKKwkvKiBOZWVkIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmRzIGRpcmVjdGx5IHdoZW46CisJICogLSAiOmciIGNvbW1hbmQgYnVzeQorCSAqIC0gYWZ0ZXIgIjphcmdkbyIsICI6d2luZG8iIG9yICI6YnVmZG8iCisJICogLSBhbm90aGVyIGNvbW1hbmQgZm9sbG93cworCSAqIC0gaW5zaWRlIGEgbG9vcAorCSAqLworCW9wZW5zY3JpcHQoZm5hbWUsIGdsb2JhbF9idXN5IHx8IGxpc3RjbWRfYnVzeSB8fCBlYXAtPm5leHRjbWQgIT0gTlVMTAorI2lmZGVmIEZFQVRfRVZBTAorCQkJCQkJIHx8IGVhcC0+Y3N0YWNrLT5jc19pZHggPj0gMAorI2VuZGlmCisJCQkJCQkgKTsKKworICAgIC8qICI6c291cmNlIiByZWFkIGV4IGNvbW1hbmRzICovCisgICAgZWxzZSBpZiAoZG9fc291cmNlKGZuYW1lLCBGQUxTRSwgRkFMU0UpID09IEZBSUwpCisJRU1TRzIoXyhlX25vdG9wZW4pLCBmbmFtZSk7Cit9CisKKy8qCisgKiAiOnNvdXJjZSIgYW5kIGFzc29jaWF0ZWQgY29tbWFuZHMuCisgKi8KKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBpbmZvIGZvciBlYWNoIHNvdXJjZWQgZmlsZS4KKyAqIEl0IGlzIHNoYXJlZCBiZXR3ZWVuIGRvX3NvdXJjZSgpIGFuZCBnZXRzb3VyY2VsaW5lKCkuCisgKiBUaGlzIGlzIHJlcXVpcmVkLCBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIGhhbmRlZCB0byBkb19jbWRsaW5lKCkgYW5kCisgKiBzb3VyY2luZyBjYW4gYmUgZG9uZSByZWN1cnNpdmVseS4KKyAqLworc3RydWN0IHNvdXJjZV9jb29raWUKK3sKKyAgICBGSUxFCSpmcDsJCS8qIG9wZW5lZCBmaWxlIGZvciBzb3VyY2luZyAqLworICAgIGNoYXJfdSAgICAgICpuZXh0bGluZTsgICAgICAvKiBpZiBub3QgTlVMTDogbGluZSB0aGF0IHdhcyByZWFkIGFoZWFkICovCisgICAgaW50CQlmaW5pc2hlZDsJLyogIjpmaW5pc2giIHVzZWQgKi8KKyNpZiBkZWZpbmVkIChVU0VfQ1JOTCkgfHwgZGVmaW5lZCAoVVNFX0NSKQorICAgIGludAkJZmlsZWZvcm1hdDsJLyogRU9MX1VOS05PV04sIEVPTF9VTklYIG9yIEVPTF9ET1MgKi8KKyAgICBpbnQJCWVycm9yOwkJLyogVFJVRSBpZiBMRiBmb3VuZCBhZnRlciBDUi1MRiAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9FVkFMCisgICAgbGluZW5yX1QJYnJlYWtwb2ludDsJLyogbmV4dCBsaW5lIHdpdGggYnJlYWtwb2ludCBvciB6ZXJvICovCisgICAgY2hhcl91CSpmbmFtZTsJCS8qIG5hbWUgb2Ygc291cmNlZCBmaWxlICovCisgICAgaW50CQlkYmdfdGljazsJLyogZGVidWdfdGljayB3aGVuIGJyZWFrcG9pbnQgd2FzIHNldCAqLworICAgIGludAkJbGV2ZWw7CQkvKiB0b3AgbmVzdGluZyBsZXZlbCBvZiBzb3VyY2VkIGZpbGUgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKyAgICB2aW1jb252X1QJY29udjsJCS8qIHR5cGUgb2YgY29udmVyc2lvbiAqLworI2VuZGlmCit9OworCisjaWZkZWYgRkVBVF9FVkFMCisvKgorICogUmV0dXJuIHRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIG5leHQgYnJlYWtwb2ludCBsaW5lIGZvciBhIHNvdXJjZSBjb29raWUuCisgKi8KKyAgICBsaW5lbnJfVCAqCitzb3VyY2VfYnJlYWtwb2ludChjb29raWUpCisgICAgdm9pZCAqY29va2llOworeworICAgIHJldHVybiAmKChzdHJ1Y3Qgc291cmNlX2Nvb2tpZSAqKWNvb2tpZSktPmJyZWFrcG9pbnQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgZGVidWcgdGljayBmb3IgYSBzb3VyY2UgY29va2llLgorICovCisgICAgaW50ICoKK3NvdXJjZV9kYmdfdGljayhjb29raWUpCisgICAgdm9pZCAqY29va2llOworeworICAgIHJldHVybiAmKChzdHJ1Y3Qgc291cmNlX2Nvb2tpZSAqKWNvb2tpZSktPmRiZ190aWNrOworfQorCisvKgorICogUmV0dXJuIHRoZSBuZXN0aW5nIGxldmVsIGZvciBhIHNvdXJjZSBjb29raWUuCisgKi8KKyAgICBpbnQKK3NvdXJjZV9sZXZlbChjb29raWUpCisgICAgdm9pZCAqY29va2llOworeworICAgIHJldHVybiAoKHN0cnVjdCBzb3VyY2VfY29va2llICopY29va2llKS0+bGV2ZWw7Cit9CisjZW5kaWYKKworc3RhdGljIGNoYXJfdSAqZ2V0X29uZV9zb3VyY2VsaW5lIF9fQVJHUygoc3RydWN0IHNvdXJjZV9jb29raWUgKnNwKSk7CisKKyNpZmRlZiBGRUFUX0VWQUwKKy8qIEdyb3dhcnJheSB0byBzdG9yZSB0aGUgbmFtZXMgb2Ygc291cmNlZCBzY3JpcHRzLgorICogRm9yIFVuaXggYWxzbyBzdG9yZSB0aGUgZGV2L2lubywgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHN0YXQoKSBlYWNoCisgKiBzY3JpcHQgd2hlbiBnb2luZyB0aHJvdWdoIHRoZSBsaXN0LiAqLworc3RydWN0IHNjcmlwdHN0dWZmCit7CisgICAgY2hhcl91CSpuYW1lOworIyBpZmRlZiBVTklYCisgICAgaW50CQlkZXY7CisgICAgaW5vX3QJaW5vOworIyBlbmRpZgorfTsKK3N0YXRpYyBnYXJyYXlfVCBzY3JpcHRfbmFtZXMgPSB7MCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3JpcHRzdHVmZiksIDQsIE5VTEx9OworI2RlZmluZSBTQ1JJUFRfTkFNRShpZCkgKCgoc3RydWN0IHNjcmlwdHN0dWZmICopc2NyaXB0X25hbWVzLmdhX2RhdGEpWyhpZCkgLSAxXS5uYW1lKQorI2RlZmluZSBTQ1JJUFRfREVWKGlkKSAoKChzdHJ1Y3Qgc2NyaXB0c3R1ZmYgKilzY3JpcHRfbmFtZXMuZ2FfZGF0YSlbKGlkKSAtIDFdLmRldikKKyNkZWZpbmUgU0NSSVBUX0lOTyhpZCkgKCgoc3RydWN0IHNjcmlwdHN0dWZmICopc2NyaXB0X25hbWVzLmdhX2RhdGEpWyhpZCkgLSAxXS5pbm8pCisjZW5kaWYKKworI2lmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoRkVBVF9DU0NPUEUpCitzdGF0aWMgRklMRSAqZm9wZW5fbm9pbmhfcmVhZGJpbiBfX0FSR1MoKGNoYXIgKmZpbGVuYW1lKSk7CisKKy8qCisgKiBTcGVjaWFsIGZ1bmN0aW9uIHRvIG9wZW4gYSBmaWxlIHdpdGhvdXQgaGFuZGxlIGluaGVyaXRhbmNlLgorICovCisgICAgc3RhdGljIEZJTEUgKgorZm9wZW5fbm9pbmhfcmVhZGJpbihmaWxlbmFtZSkKKyAgICBjaGFyICAgICpmaWxlbmFtZTsKK3sKKyAgICBpbnQJZmRfdG1wID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkgfCBPX0JJTkFSWSB8IE9fTk9JTkhFUklUKTsKKworICAgIGlmIChmZF90bXAgPT0gLTEpCisJcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIGZkb3BlbihmZF90bXAsIFJFQURCSU4pOworfQorI2VuZGlmCisKKworLyoKKyAqIGRvX3NvdXJjZTogUmVhZCB0aGUgZmlsZSAiZm5hbWUiIGFuZCBleGVjdXRlIGl0cyBsaW5lcyBhcyBFWCBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgcmVjdXJzaXZlbHkhCisgKgorICogcmV0dXJuIEZBSUwgaWYgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAorZG9fc291cmNlKGZuYW1lLCBjaGVja19vdGhlciwgaXNfdmltcmMpCisgICAgY2hhcl91CSpmbmFtZTsKKyAgICBpbnQJCWNoZWNrX290aGVyOwkgICAgLyogY2hlY2sgZm9yIC52aW1yYyBhbmQgX3ZpbXJjICovCisgICAgaW50CQlpc192aW1yYzsJICAgIC8qIGNhbGwgdmltcmNfZm91bmQoKSB3aGVuIGZpbGUgZXhpc3RzICovCit7CisgICAgc3RydWN0IHNvdXJjZV9jb29raWUgICAgY29va2llOworICAgIGNoYXJfdQkJICAgICpzYXZlX3NvdXJjaW5nX25hbWU7CisgICAgbGluZW5yX1QJCSAgICBzYXZlX3NvdXJjaW5nX2xudW07CisgICAgY2hhcl91CQkgICAgKnA7CisgICAgY2hhcl91CQkgICAgKmZuYW1lX2V4cDsKKyAgICBpbnQJCQkgICAgcmV0dmFsID0gRkFJTDsKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBzY2lkX1QJCSAgICBzYXZlX2N1cnJlbnRfU0lEOworICAgIHN0YXRpYyBzY2lkX1QJICAgIGxhc3RfY3VycmVudF9TSUQgPSAwOworICAgIHZvaWQJCSAgICAqc2F2ZV9mdW5jY2FscDsKKyAgICBpbnQJCQkgICAgc2F2ZV9kZWJ1Z19icmVha19sZXZlbCA9IGRlYnVnX2JyZWFrX2xldmVsOworIyBpZmRlZiBVTklYCisgICAgc3RydWN0IHN0YXQJCSAgICBzdDsKKyAgICBpbnQJCQkgICAgc3RhdF9vazsKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIFNUQVJUVVBUSU1FCisgICAgc3RydWN0IHRpbWV2YWwJICAgIHR2X3JlbDsKKyAgICBzdHJ1Y3QgdGltZXZhbAkgICAgdHZfc3RhcnQ7CisjZW5kaWYKKworI2lmZGVmIFJJU0NPUworICAgIHAgPSBtY2hfbXVuZ2VfZm5hbWUoZm5hbWUpOworI2Vsc2UKKyAgICBwID0gZXhwYW5kX2Vudl9zYXZlKGZuYW1lKTsKKyNlbmRpZgorICAgIGlmIChwID09IE5VTEwpCisJcmV0dXJuIHJldHZhbDsKKyAgICBmbmFtZV9leHAgPSBmaXhfZm5hbWUocCk7CisgICAgdmltX2ZyZWUocCk7CisgICAgaWYgKGZuYW1lX2V4cCA9PSBOVUxMKQorCXJldHVybiByZXR2YWw7CisjaWZkZWYgTUFDT1NfQ0xBU1NJQworICAgIHNsYXNoX25fY29sb25fYWRqdXN0KGZuYW1lX2V4cCk7CisjZW5kaWYKKyAgICBpZiAobWNoX2lzZGlyKGZuYW1lX2V4cCkpCisgICAgeworCW1zZ19zdHIoKGNoYXJfdSAqKV8oIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIpLCBmbmFtZSk7CisJZ290byB0aGVlbmQ7CisgICAgfQorCisjaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChGRUFUX0NTQ09QRSkKKyAgICBjb29raWUuZnAgPSBmb3Blbl9ub2luaF9yZWFkYmluKChjaGFyICopZm5hbWVfZXhwKTsKKyNlbHNlCisgICAgY29va2llLmZwID0gbWNoX2ZvcGVuKChjaGFyICopZm5hbWVfZXhwLCBSRUFEQklOKTsKKyNlbmRpZgorICAgIGlmIChjb29raWUuZnAgPT0gTlVMTCAmJiBjaGVja19vdGhlcikKKyAgICB7CisJLyoKKwkgKiBUcnkgYWdhaW4sIHJlcGxhY2luZyBmaWxlIG5hbWUgIi52aW1yYyIgYnkgIl92aW1yYyIgb3IgdmljZSB2ZXJzYSwKKwkgKiBhbmQgIi5leHJjIiBieSAiX2V4cmMiIG9yIHZpY2UgdmVyc2EuCisJICovCisJcCA9IGdldHRhaWwoZm5hbWVfZXhwKTsKKwlpZiAoKCpwID09ICcuJyB8fCAqcCA9PSAnXycpCisJCSYmIChTVFJJQ01QKHAgKyAxLCAidmltcmMiKSA9PSAwCisJCSAgICB8fCBTVFJJQ01QKHAgKyAxLCAiZ3ZpbXJjIikgPT0gMAorCQkgICAgfHwgU1RSSUNNUChwICsgMSwgImV4cmMiKSA9PSAwKSkKKwl7CisJICAgIGlmICgqcCA9PSAnXycpCisJCSpwID0gJy4nOworCSAgICBlbHNlCisJCSpwID0gJ18nOworI2lmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoRkVBVF9DU0NPUEUpCisJICAgIGNvb2tpZS5mcCA9IGZvcGVuX25vaW5oX3JlYWRiaW4oKGNoYXIgKilmbmFtZV9leHApOworI2Vsc2UKKwkgICAgY29va2llLmZwID0gbWNoX2ZvcGVuKChjaGFyICopZm5hbWVfZXhwLCBSRUFEQklOKTsKKyNlbmRpZgorCX0KKyAgICB9CisKKyAgICBpZiAoY29va2llLmZwID09IE5VTEwpCisgICAgeworCWlmIChwX3ZlcmJvc2UgPiAwKQorCXsKKwkgICAgaWYgKHNvdXJjaW5nX25hbWUgPT0gTlVMTCkKKwkJbXNnX3N0cigoY2hhcl91ICopXygiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiKSwgZm5hbWUpOworCSAgICBlbHNlCisJCXNtc2coKGNoYXJfdSAqKV8oImxpbmUgJWxkOiBjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIpLAorCQkJc291cmNpbmdfbG51bSwgZm5hbWUpOworCX0KKwlnb3RvIHRoZWVuZDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoZSBmaWxlIGV4aXN0cy4KKyAgICAgKiAtIEluIHZlcmJvc2UgbW9kZSwgZ2l2ZSBhIG1lc3NhZ2UuCisgICAgICogLSBGb3IgYSB2aW1yYyBmaWxlLCBtYXkgd2FudCB0byBzZXQgJ2NvbXBhdGlibGUnLCBjYWxsIHZpbXJjX2ZvdW5kKCkuCisgICAgICovCisgICAgaWYgKHBfdmVyYm9zZSA+IDEpCisgICAgeworCWlmIChzb3VyY2luZ19uYW1lID09IE5VTEwpCisJICAgIG1zZ19zdHIoKGNoYXJfdSAqKV8oInNvdXJjaW5nIFwiJXNcIiIpLCBmbmFtZSk7CisJZWxzZQorCSAgICBzbXNnKChjaGFyX3UgKilfKCJsaW5lICVsZDogc291cmNpbmcgXCIlc1wiIiksCisJCSAgICBzb3VyY2luZ19sbnVtLCBmbmFtZSk7CisgICAgfQorICAgIGlmIChpc192aW1yYykKKwl2aW1yY19mb3VuZCgpOworCisjaWZkZWYgVVNFX0NSTkwKKyAgICAvKiBJZiBubyBhdXRvbWF0aWMgZmlsZSBmb3JtYXQ6IFNldCBkZWZhdWx0IHRvIENSLU5MLiAqLworICAgIGlmICgqcF9mZnMgPT0gTlVMKQorCWNvb2tpZS5maWxlZm9ybWF0ID0gRU9MX0RPUzsKKyAgICBlbHNlCisJY29va2llLmZpbGVmb3JtYXQgPSBFT0xfVU5LTk9XTjsKKyAgICBjb29raWUuZXJyb3IgPSBGQUxTRTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX0NSCisgICAgLyogSWYgbm8gYXV0b21hdGljIGZpbGUgZm9ybWF0OiBTZXQgZGVmYXVsdCB0byBDUi4gKi8KKyAgICBpZiAoKnBfZmZzID09IE5VTCkKKwljb29raWUuZmlsZWZvcm1hdCA9IEVPTF9NQUM7CisgICAgZWxzZQorCWNvb2tpZS5maWxlZm9ybWF0ID0gRU9MX1VOS05PV047CisgICAgY29va2llLmVycm9yID0gRkFMU0U7CisjZW5kaWYKKworICAgIGNvb2tpZS5uZXh0bGluZSA9IE5VTEw7CisgICAgY29va2llLmZpbmlzaGVkID0gRkFMU0U7CisKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHRoaXMgc2NyaXB0IGhhcyBhIGJyZWFrcG9pbnQuCisgICAgICovCisgICAgY29va2llLmJyZWFrcG9pbnQgPSBkYmdfZmluZF9icmVha3BvaW50KFRSVUUsIGZuYW1lX2V4cCwgKGxpbmVucl9UKTApOworICAgIGNvb2tpZS5mbmFtZSA9IGZuYW1lX2V4cDsKKyAgICBjb29raWUuZGJnX3RpY2sgPSBkZWJ1Z190aWNrOworCisgICAgY29va2llLmxldmVsID0gZXhfbmVzdGluZ19sZXZlbDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBjb29raWUuY29udi52Y190eXBlID0gQ09OVl9OT05FOwkJLyogbm8gY29udmVyc2lvbiAqLworCisgICAgLyogVHJ5IHJlYWRpbmcgdGhlIGZpcnN0IGZldyBieXRlcyB0byBjaGVjayBmb3IgYSBVVEYtOCBCT00uICovCisgICAgeworCWNoYXJfdQkgICAgYnVmWzNdOworCisJaWYgKGZyZWFkKChjaGFyICopYnVmLCBzaXplb2YoY2hhcl91KSwgKHNpemVfdCkzLCBjb29raWUuZnApCisJCQkJCQkJCSAgPT0gKHNpemVfdCkzCisJCSYmIGJ1ZlswXSA9PSAweGVmICYmIGJ1ZlsxXSA9PSAweGJiICYmIGJ1ZlsyXSA9PSAweGJmKQorCSAgICAvKiBGb3VuZCBCT00sIHNldHVwIGNvbnZlcnNpb24gYW5kIHNraXAgb3ZlciBpdC4gKi8KKwkgICAgY29udmVydF9zZXR1cCgmY29va2llLmNvbnYsIChjaGFyX3UgKikidXRmLTgiLCBwX2VuYyk7CisJZWxzZQorCSAgICAvKiBObyBCT00gZm91bmQsIHJld2luZC4gKi8KKwkgICAgZnNlZWsoY29va2llLmZwLCAwTCwgU0VFS19TRVQpOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBLZWVwIHRoZSBzb3VyY2luZyBuYW1lL2xudW0sIGZvciByZWN1cnNpdmUgY2FsbHMuCisgICAgICovCisgICAgc2F2ZV9zb3VyY2luZ19uYW1lID0gc291cmNpbmdfbmFtZTsKKyAgICBzb3VyY2luZ19uYW1lID0gZm5hbWVfZXhwOworICAgIHNhdmVfc291cmNpbmdfbG51bSA9IHNvdXJjaW5nX2xudW07CisgICAgc291cmNpbmdfbG51bSA9IDA7CisKKyNpZmRlZiBTVEFSVFVQVElNRQorICAgIHRpbWVfcHVzaCgmdHZfcmVsLCAmdHZfc3RhcnQpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHRoaXMgc2NyaXB0IHdhcyBzb3VyY2VkIGJlZm9yZSB0byBmaW5kcyBpdHMgU0lELgorICAgICAqIElmIGl0J3MgbmV3LCBnZW5lcmF0ZSBhIG5ldyBTSUQuCisgICAgICovCisgICAgc2F2ZV9jdXJyZW50X1NJRCA9IGN1cnJlbnRfU0lEOworIyBpZmRlZiBVTklYCisgICAgc3RhdF9vayA9IChtY2hfc3RhdCgoY2hhciAqKWZuYW1lX2V4cCwgJnN0KSA+PSAwKTsKKyMgZW5kaWYKKyAgICBmb3IgKGN1cnJlbnRfU0lEID0gc2NyaXB0X25hbWVzLmdhX2xlbjsgY3VycmVudF9TSUQgPiAwOyAtLWN1cnJlbnRfU0lEKQorCWlmIChTQ1JJUFRfTkFNRShjdXJyZW50X1NJRCkgIT0gTlVMTAorCQkmJiAoCisjIGlmZGVmIFVOSVgKKwkJICAgIC8qIGNvbXBhcmUgZGV2L2lubyB3aGVuIHBvc3NpYmxlLCBpdCBjYXRjaGVzIHN5bWJvbGljCisJCSAgICAgKiBsaW5rcyAqLworCQkgICAgKHN0YXRfb2sgJiYgU0NSSVBUX0RFVihjdXJyZW50X1NJRCkgIT0gLTEpCisJCQk/IChTQ1JJUFRfREVWKGN1cnJlbnRfU0lEKSA9PSBzdC5zdF9kZXYKKwkJCSAgICAmJiBTQ1JJUFRfSU5PKGN1cnJlbnRfU0lEKSA9PSBzdC5zdF9pbm8pIDoKKyMgZW5kaWYKKwkJZm5hbWVjbXAoU0NSSVBUX05BTUUoY3VycmVudF9TSUQpLCBmbmFtZV9leHApID09IDApKQorCSAgICBicmVhazsKKyAgICBpZiAoY3VycmVudF9TSUQgPT0gMCkKKyAgICB7CisJY3VycmVudF9TSUQgPSArK2xhc3RfY3VycmVudF9TSUQ7CisJaWYgKGdhX2dyb3coJnNjcmlwdF9uYW1lcywgKGludCkoY3VycmVudF9TSUQgLSBzY3JpcHRfbmFtZXMuZ2FfbGVuKSkKKwkJCQkJCQkJCT09IE9LKQorCXsKKwkgICAgd2hpbGUgKHNjcmlwdF9uYW1lcy5nYV9sZW4gPCBjdXJyZW50X1NJRCkKKwkgICAgeworCQlTQ1JJUFRfTkFNRShzY3JpcHRfbmFtZXMuZ2FfbGVuICsgMSkgPSBOVUxMOworCQkrK3NjcmlwdF9uYW1lcy5nYV9sZW47CisJCS0tc2NyaXB0X25hbWVzLmdhX3Jvb207CisJICAgIH0KKwkgICAgU0NSSVBUX05BTUUoY3VycmVudF9TSUQpID0gZm5hbWVfZXhwOworIyBpZmRlZiBVTklYCisJICAgIGlmIChzdGF0X29rKQorCSAgICB7CisJCVNDUklQVF9ERVYoY3VycmVudF9TSUQpID0gc3Quc3RfZGV2OworCQlTQ1JJUFRfSU5PKGN1cnJlbnRfU0lEKSA9IHN0LnN0X2lubzsKKwkgICAgfQorCSAgICBlbHNlCisJCVNDUklQVF9ERVYoY3VycmVudF9TSUQpID0gLTE7CisjIGVuZGlmCisJICAgIGZuYW1lX2V4cCA9IE5VTEw7CisJfQorCS8qIEFsbG9jYXRlIHRoZSBsb2NhbCBzY3JpcHQgdmFyaWFibGVzIHRvIHVzZSBmb3IgdGhpcyBzY3JpcHQuICovCisJbmV3X3NjcmlwdF92YXJzKGN1cnJlbnRfU0lEKTsKKyAgICB9CisKKyAgICAvKiBEb24ndCB1c2UgbG9jYWwgZnVuY3Rpb24gdmFyaWFibGVzLCBpZiBjYWxsZWQgZnJvbSBhIGZ1bmN0aW9uICovCisgICAgc2F2ZV9mdW5jY2FscCA9IHNhdmVfZnVuY2NhbCgpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIENhbGwgZG9fY21kbGluZSwgd2hpY2ggd2lsbCBjYWxsIGdldHNvdXJjZWxpbmUoKSB0byBnZXQgdGhlIGxpbmVzLgorICAgICAqLworICAgIGRvX2NtZGxpbmUoTlVMTCwgZ2V0c291cmNlbGluZSwgKHZvaWQgKikmY29va2llLAorCQkJCSAgICAgRE9DTURfVkVSQk9TRXxET0NNRF9OT1dBSVR8RE9DTURfUkVQRUFUKTsKKworICAgIHJldHZhbCA9IE9LOworICAgIGZjbG9zZShjb29raWUuZnApOworICAgIHZpbV9mcmVlKGNvb2tpZS5uZXh0bGluZSk7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGNvbnZlcnRfc2V0dXAoJmNvb2tpZS5jb252LCBOVUxMLCBOVUxMKTsKKyNlbmRpZgorCisgICAgaWYgKGdvdF9pbnQpCisJRU1TRyhfKGVfaW50ZXJyKSk7CisgICAgc291cmNpbmdfbmFtZSA9IHNhdmVfc291cmNpbmdfbmFtZTsKKyAgICBzb3VyY2luZ19sbnVtID0gc2F2ZV9zb3VyY2luZ19sbnVtOworI2lmZGVmIEZFQVRfRVZBTAorICAgIGN1cnJlbnRfU0lEID0gc2F2ZV9jdXJyZW50X1NJRDsKKyAgICByZXN0b3JlX2Z1bmNjYWwoc2F2ZV9mdW5jY2FscCk7CisjZW5kaWYKKyAgICBpZiAocF92ZXJib3NlID4gMSkKKyAgICB7CisJbXNnX3N0cigoY2hhcl91ICopXygiZmluaXNoZWQgc291cmNpbmcgJXMiKSwgZm5hbWUpOworCWlmIChzb3VyY2luZ19uYW1lICE9IE5VTEwpCisJICAgIG1zZ19zdHIoKGNoYXJfdSAqKV8oImNvbnRpbnVpbmcgaW4gJXMiKSwgc291cmNpbmdfbmFtZSk7CisgICAgfQorI2lmZGVmIFNUQVJUVVBUSU1FCisjIGlmZGVmIEhBVkVfU05QUklOVEYKKyAgICBzbnByaW50ZihJT2J1ZmYsIElPU0laRSwgInNvdXJjaW5nICVzIiwgZm5hbWUpOworIyBlbHNlCisgICAgc3ByaW50ZihJT2J1ZmYsICJzb3VyY2luZyAlcyIsIGZuYW1lKTsKKyMgZW5kaWYKKyAgICB0aW1lX21zZyhJT2J1ZmYsICZ0dl9zdGFydCk7CisgICAgdGltZV9wb3AoJnR2X3JlbCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfRVZBTAorICAgIC8qCisgICAgICogQWZ0ZXIgYSAiZmluaXNoIiBpbiBkZWJ1ZyBtb2RlLCBuZWVkIHRvIGJyZWFrIGF0IGZpcnN0IGNvbW1hbmQgb2YgbmV4dAorICAgICAqIHNvdXJjZWQgZmlsZS4KKyAgICAgKi8KKyAgICBpZiAoc2F2ZV9kZWJ1Z19icmVha19sZXZlbCA+IGV4X25lc3RpbmdfbGV2ZWwKKwkgICAgJiYgZGVidWdfYnJlYWtfbGV2ZWwgPT0gZXhfbmVzdGluZ19sZXZlbCkKKwkrK2RlYnVnX2JyZWFrX2xldmVsOworI2VuZGlmCisKK3RoZWVuZDoKKyAgICB2aW1fZnJlZShmbmFtZV9leHApOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiAiOnNjcmlwdG5hbWVzIgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitleF9zY3JpcHRuYW1lcyhlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludCBpOworCisgICAgZm9yIChpID0gMTsgaSA8PSBzY3JpcHRfbmFtZXMuZ2FfbGVuICYmICFnb3RfaW50OyArK2kpCisJaWYgKFNDUklQVF9OQU1FKGkpICE9IE5VTEwpCisJICAgIHNtc2coKGNoYXJfdSAqKSIlM2Q6ICVzIiwgaSwgU0NSSVBUX05BTUUoaSkpOworfQorCisjIGlmIGRlZmluZWQoQkFDS1NMQVNIX0lOX0ZJTEVOQU1FKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEZpeCBzbGFzaGVzIGluIHRoZSBsaXN0IG9mIHNjcmlwdCBuYW1lcyBmb3IgJ3NoZWxsc2xhc2gnLgorICovCisgICAgdm9pZAorc2NyaXB0bmFtZXNfc2xhc2hfYWRqdXN0KCkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDE7IGkgPD0gc2NyaXB0X25hbWVzLmdhX2xlbjsgKytpKQorCWlmIChTQ1JJUFRfTkFNRShpKSAhPSBOVUxMKQorCSAgICBzbGFzaF9hZGp1c3QoU0NSSVBUX05BTUUoaSkpOworfQorIyBlbmRpZgorCisvKgorICogR2V0IGEgcG9pbnRlciB0byBhIHNjcmlwdCBuYW1lLiAgVXNlZCBmb3IgIjp2ZXJib3NlIHNldCIuCisgKi8KKyAgICBjaGFyX3UgKgorZ2V0X3NjcmlwdG5hbWUoaWQpCisgICAgc2NpZF9UCWlkOworeworICAgIGlmIChpZCA9PSBTSURfTU9ERUxJTkUpCisJcmV0dXJuIChjaGFyX3UgKikibW9kZWxpbmUiOworICAgIGlmIChpZCA9PSBTSURfQ01EQVJHKQorCXJldHVybiAoY2hhcl91ICopIi0tY21kIGFyZ3VtZW50IjsKKyAgICBpZiAoaWQgPT0gU0lEX0NBUkcpCisJcmV0dXJuIChjaGFyX3UgKikiLWMgYXJndW1lbnQiOworICAgIGlmIChpZCA9PSBTSURfRU5WKQorCXJldHVybiAoY2hhcl91ICopImVudmlyb25tZW50IHZhcmlhYmxlIjsKKyAgICByZXR1cm4gU0NSSVBUX05BTUUoaWQpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVTRV9DUikgfHwgZGVmaW5lZChQUk9UTykKKworIyBpZiBkZWZpbmVkKF9fTVNMX18pICYmIChfX01TTF9fID49IDIyKQorLyoKKyAqIE5ld2VyIHZlcnNpb24gb2YgdGhlIE1ldHJvd2Vya3MgbGlicmFyeSBoYW5kbGUgRE9TIGFuZCBVTklYIGZpbGVzCisgKiB3aXRob3V0IGhlbHAuCisgKiBUZXN0IHdpdGggZWFybGllciB2ZXJzaW9ucywgTVNMIDIuMiBpcyB0aGUgbGlicmFyeSBzdXBwbGllZCB3aXRoCisgKiBDb2Rld2FycmlvciBQcm8gMi4KKyAqLworICAgIGNoYXIgKgorZmdldHNfY3Iocywgbiwgc3RyZWFtKQorICAgIGNoYXIJKnM7CisgICAgaW50CQluOworICAgIEZJTEUJKnN0cmVhbTsKK3sKKyAgICByZXR1cm4gZmdldHMocywgbiwgc3RyZWFtKTsKK30KKyMgZWxzZQorLyoKKyAqIFZlcnNpb24gb2YgZmdldHMoKSB3aGljaCBhbHNvIHdvcmtzIGZvciBsaW5lcyBlbmRpbmcgaW4gYSA8Q1I+IG9ubHkKKyAqIChNYWNpbnRvc2ggZm9ybWF0KS4KKyAqIEZvciBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgTWV0cm93ZXJrcyBsaWJyYXJ5LgorICogQXQgbGVhc3QgQ29kZVdhcnJpb3IgOSBuZWVkZWQgdGhpcyBjb2RlLgorICovCisgICAgY2hhciAqCitmZ2V0c19jcihzLCBuLCBzdHJlYW0pCisgICAgY2hhcgkqczsKKyAgICBpbnQJCW47CisgICAgRklMRQkqc3RyZWFtOworeworICAgIGludAljID0gMDsKKyAgICBpbnQgY2hhcl9yZWFkID0gMDsKKworICAgIHdoaWxlICghZmVvZihzdHJlYW0pICYmIGMgIT0gJ1xyJyAmJiBjICE9ICdcbicgJiYgY2hhcl9yZWFkIDwgbiAtIDEpCisgICAgeworCWMgPSBmZ2V0YyhzdHJlYW0pOworCXNbY2hhcl9yZWFkKytdID0gYzsKKwkvKiBJZiB0aGUgZmlsZSBpcyBpbiBET1MgZm9ybWF0LCB3ZSBuZWVkIHRvIHNraXAgYSBOTCBhZnRlciBhIENSLiAgSQorCSAqIHRob3VnaHQgaXQgd2FzIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBidXQgdGhpcyBhcHBlYXJzIHRvIHdvcmsuLi4gKi8KKwlpZiAoYyA9PSAnXG4nKQorCXsKKwkgICAgYyA9IGZnZXRjKHN0cmVhbSk7CisJICAgIGlmIChjICE9ICdccicpCisJCXVuZ2V0YyhjLCBzdHJlYW0pOworCX0KKyAgICB9CisKKyAgICBzW2NoYXJfcmVhZF0gPSAwOworICAgIGlmIChjaGFyX3JlYWQgPT0gMCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmIChmZW9mKHN0cmVhbSkgJiYgY2hhcl9yZWFkID09IDEpCisJcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gczsKK30KKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogR2V0IG9uZSBmdWxsIGxpbmUgZnJvbSBhIHNvdXJjZWQgZmlsZS4KKyAqIENhbGxlZCBieSBkb19jbWRsaW5lKCkgd2hlbiBpdCdzIGNhbGxlZCBmcm9tIGRvX3NvdXJjZSgpLgorICoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGxpbmUgaW4gYWxsb2NhdGVkIG1lbW9yeS4KKyAqIFJldHVybiBOVUxMIGZvciBlbmQtb2YtZmlsZSBvciBzb21lIGVycm9yLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIGNoYXJfdSAqCitnZXRzb3VyY2VsaW5lKGMsIGNvb2tpZSwgaW5kZW50KQorICAgIGludAkJYzsJCS8qIG5vdCB1c2VkICovCisgICAgdm9pZAkqY29va2llOworICAgIGludAkJaW5kZW50OwkJLyogbm90IHVzZWQgKi8KK3sKKyAgICBzdHJ1Y3Qgc291cmNlX2Nvb2tpZSAqc3AgPSAoc3RydWN0IHNvdXJjZV9jb29raWUgKiljb29raWU7CisgICAgY2hhcl91CQkqbGluZTsKKyAgICBjaGFyX3UJCSpwLCAqczsKKworI2lmZGVmIEZFQVRfRVZBTAorICAgIC8qIElmIGJyZWFrcG9pbnRzIGhhdmUgYmVlbiBhZGRlZC9kZWxldGVkIG5lZWQgdG8gY2hlY2sgZm9yIGl0LiAqLworICAgIGlmIChzcC0+ZGJnX3RpY2sgPCBkZWJ1Z190aWNrKQorICAgIHsKKwlzcC0+YnJlYWtwb2ludCA9IGRiZ19maW5kX2JyZWFrcG9pbnQoVFJVRSwgc3AtPmZuYW1lLCBzb3VyY2luZ19sbnVtKTsKKwlzcC0+ZGJnX3RpY2sgPSBkZWJ1Z190aWNrOworICAgIH0KKyNlbmRpZgorICAgIC8qCisgICAgICogR2V0IGN1cnJlbnQgbGluZS4gIElmIHRoZXJlIGlzIGEgcmVhZC1haGVhZCBsaW5lLCB1c2UgaXQsIG90aGVyd2lzZSBnZXQKKyAgICAgKiBvbmUgbm93LgorICAgICAqLworICAgIGlmIChzcC0+ZmluaXNoZWQpCisJbGluZSA9IE5VTEw7CisgICAgZWxzZSBpZiAoc3AtPm5leHRsaW5lID09IE5VTEwpCisJbGluZSA9IGdldF9vbmVfc291cmNlbGluZShzcCk7CisgICAgZWxzZQorICAgIHsKKwlsaW5lID0gc3AtPm5leHRsaW5lOworCXNwLT5uZXh0bGluZSA9IE5VTEw7CisJKytzb3VyY2luZ19sbnVtOworICAgIH0KKworICAgIC8qIE9ubHkgY29uY2F0ZW5hdGUgbGluZXMgc3RhcnRpbmcgd2l0aCBhIFwgd2hlbiAnY3BvcHRpb25zJyBkb2Vzbid0CisgICAgICogY29udGFpbiB0aGUgJ0MnIGZsYWcuICovCisgICAgaWYgKGxpbmUgIT0gTlVMTCAmJiAodmltX3N0cmNocihwX2NwbywgQ1BPX0NPTkNBVCkgPT0gTlVMTCkpCisgICAgeworCS8qIGNvbXBlbnNhdGUgZm9yIHRoZSBvbmUgbGluZSByZWFkLWFoZWFkICovCisJLS1zb3VyY2luZ19sbnVtOworCWZvciAoOzspCisJeworCSAgICBzcC0+bmV4dGxpbmUgPSBnZXRfb25lX3NvdXJjZWxpbmUoc3ApOworCSAgICBpZiAoc3AtPm5leHRsaW5lID09IE5VTEwpCisJCWJyZWFrOworCSAgICBwID0gc2tpcHdoaXRlKHNwLT5uZXh0bGluZSk7CisJICAgIGlmICgqcCAhPSAnXFwnKQorCQlicmVhazsKKwkgICAgcyA9IGFsbG9jKChpbnQpKFNUUkxFTihsaW5lKSArIFNUUkxFTihwKSkpOworCSAgICBpZiAocyA9PSBOVUxMKQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCWJyZWFrOworCSAgICBTVFJDUFkocywgbGluZSk7CisJICAgIFNUUkNBVChzLCBwICsgMSk7CisJICAgIHZpbV9mcmVlKGxpbmUpOworCSAgICBsaW5lID0gczsKKwkgICAgdmltX2ZyZWUoc3AtPm5leHRsaW5lKTsKKwl9CisgICAgfQorCisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChsaW5lICE9IE5VTEwgJiYgc3AtPmNvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisgICAgeworCS8qIENvbnZlcnQgdGhlIGVuY29kaW5nIG9mIHRoZSBzY3JpcHQgbGluZS4gKi8KKwlzID0gc3RyaW5nX2NvbnZlcnQoJnNwLT5jb252LCBsaW5lLCBOVUxMKTsKKwlpZiAocyAhPSBOVUxMKQorCXsKKwkgICAgdmltX2ZyZWUobGluZSk7CisJICAgIGxpbmUgPSBzOworCX0KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfRVZBTAorICAgIC8qIERpZCB3ZSBlbmNvdW50ZXIgYSBicmVha3BvaW50PyAqLworICAgIGlmIChzcC0+YnJlYWtwb2ludCAhPSAwICYmIHNwLT5icmVha3BvaW50IDw9IHNvdXJjaW5nX2xudW0pCisgICAgeworCWRiZ19icmVha3BvaW50KHNwLT5mbmFtZSwgc291cmNpbmdfbG51bSk7CisJLyogRmluZCBuZXh0IGJyZWFrcG9pbnQuICovCisJc3AtPmJyZWFrcG9pbnQgPSBkYmdfZmluZF9icmVha3BvaW50KFRSVUUsIHNwLT5mbmFtZSwgc291cmNpbmdfbG51bSk7CisJc3AtPmRiZ190aWNrID0gZGVidWdfdGljazsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBsaW5lOworfQorCisgICAgc3RhdGljIGNoYXJfdSAqCitnZXRfb25lX3NvdXJjZWxpbmUoc3ApCisgICAgc3RydWN0IHNvdXJjZV9jb29raWUgICAgKnNwOworeworICAgIGdhcnJheV9UCQlnYTsKKyAgICBpbnQJCQlsZW47CisgICAgaW50CQkJYzsKKyAgICBjaGFyX3UJCSpidWY7CisjaWZkZWYgVVNFX0NSTkwKKyAgICBpbnQJCQloYXNfY3I7CQkvKiBDUi1MRiBmb3VuZCAqLworI2VuZGlmCisjaWZkZWYgVVNFX0NSCisgICAgY2hhcl91CQkqc2NhbjsKKyNlbmRpZgorICAgIGludAkJCWhhdmVfcmVhZCA9IEZBTFNFOworCisgICAgLyogdXNlIGEgZ3Jvd2FycmF5IHRvIHN0b3JlIHRoZSBzb3VyY2VkIGxpbmUgKi8KKyAgICBnYV9pbml0MigmZ2EsIDEsIDIwMCk7CisKKyAgICAvKgorICAgICAqIExvb3AgdW50aWwgdGhlcmUgaXMgYSBmaW5pc2hlZCBsaW5lIChvciBlbmQtb2YtZmlsZSkuCisgICAgICovCisgICAgc291cmNpbmdfbG51bSsrOworICAgIGZvciAoOzspCisgICAgeworCS8qIG1ha2Ugcm9vbSB0byByZWFkIGF0IGxlYXN0IDgwIChtb3JlKSBjaGFyYWN0ZXJzICovCisJaWYgKGdhX2dyb3coJmdhLCA4MCkgPT0gRkFJTCkKKwkgICAgYnJlYWs7CisJYnVmID0gKGNoYXJfdSAqKWdhLmdhX2RhdGE7CisKKyNpZmRlZiBVU0VfQ1IKKwlpZiAoc3AtPmZpbGVmb3JtYXQgPT0gRU9MX01BQykKKwl7CisJICAgIGlmIChmZ2V0c19jcigoY2hhciAqKWJ1ZiArIGdhLmdhX2xlbiwgZ2EuZ2Ffcm9vbSwgc3AtPmZwKSA9PSBOVUxMKQorCQlicmVhazsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgIGlmIChmZ2V0cygoY2hhciAqKWJ1ZiArIGdhLmdhX2xlbiwgZ2EuZ2Ffcm9vbSwgc3AtPmZwKSA9PSBOVUxMKQorCQlicmVhazsKKwlsZW4gPSAoaW50KVNUUkxFTihidWYpOworI2lmZGVmIFVTRV9DUk5MCisJLyogSWdub3JlIGEgdHJhaWxpbmcgQ1RSTC1aLCB3aGVuIGluIERvcyBtb2RlLglPbmx5IHJlY29nbml6ZSB0aGUKKwkgKiBDVFJMLVogYnkgaXRzIG93biwgb3IgYWZ0ZXIgYSBOTC4gKi8KKwlpZiAoCSAgIChsZW4gPT0gMSB8fCAobGVuID49IDIgJiYgYnVmW2xlbiAtIDJdID09ICdcbicpKQorCQkmJiBzcC0+ZmlsZWZvcm1hdCA9PSBFT0xfRE9TCisJCSYmIGJ1ZltsZW4gLSAxXSA9PSBDdHJsX1opCisJeworCSAgICBidWZbbGVuIC0gMV0gPSBOVUw7CisJICAgIGJyZWFrOworCX0KKyNlbmRpZgorCisjaWZkZWYgVVNFX0NSCisJLyogSWYgdGhlIHJlYWQgZG9lc24ndCBzdG9wIG9uIGEgbmV3IGxpbmUsIGFuZCB0aGVyZSdzCisJICogc29tZSBDUiB0aGVuIHdlIGFzc3VtZSBhIE1hYyBmb3JtYXQgKi8KKwlpZiAoc3AtPmZpbGVmb3JtYXQgPT0gRU9MX1VOS05PV04pCisJeworCSAgICBpZiAoYnVmW2xlbiAtIDFdICE9ICdcbicgJiYgdmltX3N0cmNocihidWYsICdccicpICE9IE5VTEwpCisJCXNwLT5maWxlZm9ybWF0ID0gRU9MX01BQzsKKwkgICAgZWxzZQorCQlzcC0+ZmlsZWZvcm1hdCA9IEVPTF9VTklYOworCX0KKworCWlmIChzcC0+ZmlsZWZvcm1hdCA9PSBFT0xfTUFDKQorCXsKKwkgICAgc2NhbiA9IHZpbV9zdHJjaHIoYnVmLCAnXHInKTsKKworCSAgICBpZiAoc2NhbiAhPSBOVUxMKQorCSAgICB7CisJCSpzY2FuID0gJ1xuJzsKKwkJaWYgKCooc2NhbiArIDEpICE9IDApCisJCXsKKwkJICAgICooc2NhbiArIDEpID0gMDsKKwkJICAgIGZzZWVrKHNwLT5mcCwgKGxvbmcpKHNjYW4gLSBidWYgLSBsZW4gKyAxKSwgU0VFS19DVVIpOworCQl9CisJICAgIH0KKwkgICAgbGVuID0gU1RSTEVOKGJ1Zik7CisJfQorI2VuZGlmCisKKwloYXZlX3JlYWQgPSBUUlVFOworCWdhLmdhX3Jvb20gLT0gbGVuIC0gZ2EuZ2FfbGVuOworCWdhLmdhX2xlbiA9IGxlbjsKKworCS8qIElmIHRoZSBsaW5lIHdhcyBsb25nZXIgdGhhbiB0aGUgYnVmZmVyLCByZWFkIG1vcmUuICovCisJaWYgKGdhLmdhX3Jvb20gPT0gMSAmJiBidWZbbGVuIC0gMV0gIT0gJ1xuJykKKwkgICAgY29udGludWU7CisKKwlpZiAobGVuID49IDEgJiYgYnVmW2xlbiAtIDFdID09ICdcbicpCS8qIHJlbW92ZSB0cmFpbGluZyBOTCAqLworCXsKKyNpZmRlZiBVU0VfQ1JOTAorCSAgICBoYXNfY3IgPSAobGVuID49IDIgJiYgYnVmW2xlbiAtIDJdID09ICdccicpOworCSAgICBpZiAoc3AtPmZpbGVmb3JtYXQgPT0gRU9MX1VOS05PV04pCisJICAgIHsKKwkJaWYgKGhhc19jcikKKwkJICAgIHNwLT5maWxlZm9ybWF0ID0gRU9MX0RPUzsKKwkJZWxzZQorCQkgICAgc3AtPmZpbGVmb3JtYXQgPSBFT0xfVU5JWDsKKwkgICAgfQorCisJICAgIGlmIChzcC0+ZmlsZWZvcm1hdCA9PSBFT0xfRE9TKQorCSAgICB7CisJCWlmIChoYXNfY3IpCSAgICAvKiByZXBsYWNlIHRyYWlsaW5nIENSICovCisJCXsKKwkJICAgIGJ1ZltsZW4gLSAyXSA9ICdcbic7CisJCSAgICAtLWxlbjsKKwkJICAgIC0tZ2EuZ2FfbGVuOworCQkgICAgKytnYS5nYV9yb29tOworCQl9CisJCWVsc2UJICAgIC8qIGxpbmVzIGxpa2UgIjptYXAgeHggeXleTSIgd2lsbCBoYXZlIGZhaWxlZCAqLworCQl7CisJCSAgICBpZiAoIXNwLT5lcnJvcikKKwkJCUVNU0coXygiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciKSk7CisJCSAgICBzcC0+ZXJyb3IgPSBUUlVFOworCQkgICAgc3AtPmZpbGVmb3JtYXQgPSBFT0xfVU5JWDsKKwkJfQorCSAgICB9CisjZW5kaWYKKwkgICAgLyogVGhlICdcbicgaXMgZXNjYXBlZCBpZiB0aGVyZSBpcyBhbiBvZGQgbnVtYmVyIG9mIF5WJ3MganVzdAorCSAgICAgKiBiZWZvcmUgaXQsIGZpcnN0IHNldCAiYyIganVzdCBiZWZvcmUgdGhlICdWJ3MgYW5kIHRoZW4gY2hlY2sKKwkgICAgICogbGVuJmMgcGFyaXRpZXMgKGlzIGZhc3RlciB0aGFuICgobGVuLWMpJTIgPT0gMCkpIC0tIEFjZXZlZG8gKi8KKwkgICAgZm9yIChjID0gbGVuIC0gMjsgYyA+PSAwICYmIGJ1ZltjXSA9PSBDdHJsX1Y7IGMtLSkKKwkJOworCSAgICBpZiAoKGxlbiAmIDEpICE9IChjICYgMSkpCS8qIGVzY2FwZWQgTkwsIHJlYWQgbW9yZSAqLworCSAgICB7CisJCXNvdXJjaW5nX2xudW0rKzsKKwkJY29udGludWU7CisJICAgIH0KKworCSAgICBidWZbbGVuIC0gMV0gPSBOVUw7CQkvKiByZW1vdmUgdGhlIE5MICovCisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgXkMgaGVyZSBub3cgYW5kIHRoZW4sIHNvIHJlY3Vyc2l2ZSA6c28gY2FuIGJlIGJyb2tlbi4KKwkgKi8KKwlsaW5lX2JyZWFrY2hlY2soKTsKKwlicmVhazsKKyAgICB9CisKKyAgICBpZiAoaGF2ZV9yZWFkKQorCXJldHVybiAoY2hhcl91ICopZ2EuZ2FfZGF0YTsKKworICAgIHZpbV9mcmVlKGdhLmdhX2RhdGEpOworICAgIHJldHVybiBOVUxMOworfQorCisvKgorICogIjpzY3JpcHRlbmNvZGluZyI6IFNldCBlbmNvZGluZyBjb252ZXJzaW9uIGZvciBhIHNvdXJjZWQgc2NyaXB0LgorICogV2l0aG91dCB0aGUgbXVsdGktYnl0ZSBmZWF0dXJlIGl0J3Mgc2ltcGx5IGlnbm9yZWQuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK2V4X3NjcmlwdGVuY29kaW5nKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIHN0cnVjdCBzb3VyY2VfY29va2llCSpzcDsKKyAgICBjaGFyX3UJCQkqbmFtZTsKKworICAgIGlmICghZ2V0bGluZV9lcXVhbChlYXAtPmdldGxpbmUsIGVhcC0+Y29va2llLCBnZXRzb3VyY2VsaW5lKSkKKyAgICB7CisJRU1TRyhfKCJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIikpOworCXJldHVybjsKKyAgICB9CisKKyAgICBpZiAoKmVhcC0+YXJnICE9IE5VTCkKKyAgICB7CisJbmFtZSA9IGVuY19jYW5vbml6ZShlYXAtPmFyZyk7CisJaWYgKG5hbWUgPT0gTlVMTCkJLyogb3V0IG9mIG1lbW9yeSAqLworCSAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UKKwluYW1lID0gZWFwLT5hcmc7CisKKyAgICAvKiBTZXR1cCBmb3IgY29udmVyc2lvbiBmcm9tIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgdG8gJ2VuY29kaW5nJy4gKi8KKyAgICBzcCA9IChzdHJ1Y3Qgc291cmNlX2Nvb2tpZSAqKWdldGxpbmVfY29va2llKGVhcC0+Z2V0bGluZSwgZWFwLT5jb29raWUpOworICAgIGNvbnZlcnRfc2V0dXAoJnNwLT5jb252LCBuYW1lLCBwX2VuYyk7CisKKyAgICBpZiAobmFtZSAhPSBlYXAtPmFyZykKKwl2aW1fZnJlZShuYW1lKTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogIjpmaW5pc2giOiBNYXJrIGEgc291cmNlZCBmaWxlIGFzIGZpbmlzaGVkLgorICovCisgICAgdm9pZAorZXhfZmluaXNoKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKGdldGxpbmVfZXF1YWwoZWFwLT5nZXRsaW5lLCBlYXAtPmNvb2tpZSwgZ2V0c291cmNlbGluZSkpCisJZG9fZmluaXNoKGVhcCwgRkFMU0UpOworICAgIGVsc2UKKwlFTVNHKF8oIkUxNjg6IDpmaW5pc2ggdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIikpOworfQorCisvKgorICogTWFyayBhIHNvdXJjZWQgZmlsZSBhcyBmaW5pc2hlZC4gIFBvc3NpYmx5IG1ha2VzIHRoZSAiOmZpbmlzaCIgcGVuZGluZy4KKyAqIEFsc28gY2FsbGVkIGZvciBhIHBlbmRpbmcgZmluaXNoIGF0IHRoZSAiOmVuZHRyeSIgb3IgYWZ0ZXIgcmV0dXJuaW5nIGZyb20KKyAqIGFuIGV4dHJhIGRvX2NtZGxpbmUoKS4gICJyZWFuaW1hdGUiIGlzIHVzZWQgaW4gdGhlIGxhdHRlciBjYXNlLgorICovCisgICAgdm9pZAorZG9fZmluaXNoKGVhcCwgcmVhbmltYXRlKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICBpbnQJCXJlYW5pbWF0ZTsKK3sKKyAgICBpbnQJCWlkeDsKKworICAgIGlmIChyZWFuaW1hdGUpCisJKChzdHJ1Y3Qgc291cmNlX2Nvb2tpZSAqKWdldGxpbmVfY29va2llKGVhcC0+Z2V0bGluZSwKKwkJCQkJICAgICAgZWFwLT5jb29raWUpKS0+ZmluaXNoZWQgPSBGQUxTRTsKKworICAgIC8qCisgICAgICogQ2xlYW51cCAoYW5kIGluYWN0aXZhdGUpIGNvbmRpdGlvbmFscywgYnV0IHN0b3Agd2hlbiBhIHRyeSBjb25kaXRpb25hbAorICAgICAqIG5vdCBpbiBpdHMgZmluYWxseSBjbGF1c2UgKHdoaWNoIHRoZW4gaXMgdG8gYmUgZXhlY3V0ZWQgbmV4dCkgaXMgZm91bmQuCisgICAgICogSW4gdGhpcyBjYXNlLCBtYWtlIHRoZSAiOmZpbmlzaCIgcGVuZGluZyBmb3IgZXhlY3V0aW9uIGF0IHRoZSAiOmVuZHRyeSIuCisgICAgICogT3RoZXJ3aXNlLCBmaW5pc2ggbm9ybWFsbHkuCisgICAgICovCisgICAgaWR4ID0gY2xlYW51cF9jb25kaXRpb25hbHMoZWFwLT5jc3RhY2ssIDAsIFRSVUUpOworICAgIGlmIChpZHggPj0gMCkKKyAgICB7CisJZWFwLT5jc3RhY2stPmNzX3BlbmRpbmdbaWR4XSA9IENTVFBfRklOSVNIOworCXJlcG9ydF9tYWtlX3BlbmRpbmcoQ1NUUF9GSU5JU0gsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisJKChzdHJ1Y3Qgc291cmNlX2Nvb2tpZSAqKWdldGxpbmVfY29va2llKGVhcC0+Z2V0bGluZSwKKwkJCQkJICAgICAgIGVhcC0+Y29va2llKSktPmZpbmlzaGVkID0gVFJVRTsKK30KKworCisvKgorICogUmV0dXJuIFRSVUUgd2hlbiBhIHNvdXJjZWQgZmlsZSBoYWQgdGhlICI6ZmluaXNoIiBjb21tYW5kOiBEb24ndCBnaXZlIGVycm9yCisgKiBtZXNzYWdlIGZvciBtaXNzaW5nICI6ZW5kaWYiLgorICogUmV0dXJuIEZBTFNFIHdoZW4gbm90IHNvdXJjaW5nIGEgZmlsZS4KKyAqLworICAgIGludAorc291cmNlX2ZpbmlzaGVkKGdldGxpbmUsIGNvb2tpZSkKKyAgICBjaGFyX3UJKigqZ2V0bGluZSkgX19BUkdTKChpbnQsIHZvaWQgKiwgaW50KSk7CisgICAgdm9pZAkqY29va2llOworeworICAgIHJldHVybiAoZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldHNvdXJjZWxpbmUpCisJICAgICYmICgoc3RydWN0IHNvdXJjZV9jb29raWUgKilnZXRsaW5lX2Nvb2tpZSgKKwkJCQkJCSBnZXRsaW5lLCBjb29raWUpKS0+ZmluaXNoZWQpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTElTVENNRFMpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogIjpjaGVja3RpbWUgW2J1ZmZlcl0iCisgKi8KKyAgICB2b2lkCitleF9jaGVja3RpbWUoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJc2F2ZV9ub19jaGVja190aW1lc3RhbXBzID0gbm9fY2hlY2tfdGltZXN0YW1wczsKKworICAgIG5vX2NoZWNrX3RpbWVzdGFtcHMgPSAwOworICAgIGlmIChlYXAtPmFkZHJfY291bnQgPT0gMCkJLyogZGVmYXVsdCBpcyBhbGwgYnVmZmVycyAqLworCWNoZWNrX3RpbWVzdGFtcHMoRkFMU0UpOworICAgIGVsc2UKKyAgICB7CisJYnVmID0gYnVmbGlzdF9maW5kbnIoKGludCllYXAtPmxpbmUyKTsKKwlpZiAoYnVmICE9IE5VTEwpCS8qIGNhbm5vdCBoYXBwZW4/ICovCisJICAgICh2b2lkKWJ1Zl9jaGVja190aW1lc3RhbXAoYnVmLCBGQUxTRSk7CisgICAgfQorICAgIG5vX2NoZWNrX3RpbWVzdGFtcHMgPSBzYXZlX25vX2NoZWNrX3RpbWVzdGFtcHM7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9QUklOVEVSKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFByaW50aW5nIGNvZGUgKE1hY2hpbmUtaW5kZXBlbmRlbnQuKQorICogVG8gaW1wbGVtZW50IHByaW50aW5nIG9uIGEgcGxhdGZvcm0sIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgYmUKKyAqIGRlZmluZWQ6CisgKgorICogaW50IG1jaF9wcmludF9pbml0KHBydF9zZXR0aW5nc19UICpwc2V0dGluZ3MsIGNoYXJfdSAqam9ibmFtZSwgaW50IGZvcmNlaXQpCisgKiBDYWxsZWQgb25jZS4gIENvZGUgc2hvdWxkIGRpc3BsYXkgcHJpbnRlciBkaWFsb2d1ZSAoaWYgYXBwcm9wcmlhdGUpIGFuZAorICogZGV0ZXJtaW5lIHByaW50ZXIgZm9udCBhbmQgbWFyZ2luIHNldHRpbmdzLiAgUmVzZXQgaGFzX2NvbG9yIGlmIHRoZSBwcmludGVyCisgKiBkb2Vzbid0IHN1cHBvcnQgY29sb3JzIGF0IGFsbC4KKyAqIFJldHVybnMgRkFJTCB0byBhYm9ydC4KKyAqCisgKiBpbnQgbWNoX3ByaW50X2JlZ2luKHBydF9zZXR0aW5nc19UICpzZXR0aW5ncykKKyAqIENhbGxlZCB0byBzdGFydCB0aGUgcHJpbnQgam9iLgorICogUmV0dXJuIEZBTFNFIHRvIGFib3J0LgorICoKKyAqIGludCBtY2hfcHJpbnRfYmVnaW5fcGFnZShjaGFyX3UgKm1zZykKKyAqIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBwYWdlLgorICogIm1zZyIgaW5kaWNhdGVzIHRoZSBwcm9ncmVzcyBvZiB0aGUgcHJpbnQgam9iLCBjYW4gYmUgTlVMTC4KKyAqIFJldHVybiBGQUxTRSB0byBhYm9ydC4KKyAqCisgKiBpbnQgbWNoX3ByaW50X2VuZF9wYWdlKCkKKyAqIENhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcGFnZS4KKyAqIFJldHVybiBGQUxTRSB0byBhYm9ydC4KKyAqCisgKiBpbnQgbWNoX3ByaW50X2JsYW5rX3BhZ2UoKQorICogQ2FsbGVkIHRvIGdlbmVyYXRlIGEgYmxhbmsgcGFnZSBmb3IgY29sbGF0ZWQsIGR1cGxleCwgbXVsdGlwbGUgY29weQorICogZG9jdW1lbnQuICBSZXR1cm4gRkFMU0UgdG8gYWJvcnQuCisgKgorICogdm9pZCBtY2hfcHJpbnRfZW5kKHBydF9zZXR0aW5nc19UICpwc2V0dGluZ3MpCisgKiBDYWxsZWQgYXQgbm9ybWFsIGVuZCBvZiBwcmludCBqb2IuCisgKgorICogdm9pZCBtY2hfcHJpbnRfY2xlYW51cCgpCisgKiBDYWxsZWQgaWYgcHJpbnQgam9iIGVuZHMgbm9ybWFsbHkgb3IgaXMgYWJhbmRvbmVkLiBGcmVlIGFueSBtZW1vcnksIGNsb3NlCisgKiBkZXZpY2VzIGFuZCBoYW5kbGVzLiAgQWxzbyBjYWxsZWQgd2hlbiBtY2hfcHJpbnRfYmVnaW4oKSBmYWlscywgYnV0IG5vdAorICogd2hlbiBtY2hfcHJpbnRfaW5pdCgpIGZhaWxzLgorICoKKyAqIHZvaWQgbWNoX3ByaW50X3NldF9mb250KGludCBCb2xkLCBpbnQgSXRhbGljLCBpbnQgVW5kZXJsaW5lKTsKKyAqIENhbGxlZCB3aGVuZXZlciB0aGUgZm9udCBzdHlsZSBjaGFuZ2VzLgorICoKKyAqIHZvaWQgbWNoX3ByaW50X3NldF9iZyhsb25nIGJnY29sKTsKKyAqIENhbGxlZCB0byBzZXQgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBmb2xsb3dpbmcgdGV4dC4gUGFyYW1ldGVyIGlzIGFuCisgKiBSR0IgdmFsdWUuCisgKgorICogdm9pZCBtY2hfcHJpbnRfc2V0X2ZnKGxvbmcgZmdjb2wpOworICogQ2FsbGVkIHRvIHNldCB0aGUgZm9yZWdyb3VuZCBjb2xvciBmb3IgdGhlIGZvbGxvd2luZyB0ZXh0LiBQYXJhbWV0ZXIgaXMgYW4KKyAqIFJHQiB2YWx1ZS4KKyAqCisgKiBtY2hfcHJpbnRfc3RhcnRfbGluZShpbnQgbWFyZ2luLCBpbnQgcGFnZV9saW5lKQorICogU2V0cyB0aGUgY3VycmVudCBwb3NpdGlvbiBhdCB0aGUgc3RhcnQgb2YgbGluZSAicGFnZV9saW5lIi4KKyAqIElmIG1hcmdpbiBpcyBUUlVFIHN0YXJ0IGluIHRoZSBsZWZ0IG1hcmdpbiAoZm9yIGhlYWRlciBhbmQgbGluZSBudW1iZXIpLgorICoKKyAqIGludCBtY2hfcHJpbnRfdGV4dF9vdXQoY2hhcl91ICpwLCBpbnQgbGVuKTsKKyAqIE91dHB1dCBvbmUgY2hhcmFjdGVyIG9mIHRleHQgcFtsZW5dIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICogUmV0dXJuIFRSVUUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYW5vdGhlciBjaGFyYWN0ZXIgaW4gdGhlIHNhbWUgbGluZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGdlbmVyaWMgY29kZSBoYXMgbm8gaWRlYSBvZiBtYXJnaW5zLiBUaGUgbWFjaGluZSBjb2RlIHNob3VsZAorICogc2ltcGx5IG1ha2UgdGhlIHBhZ2UgbG9vayBzbWFsbGVyISAgVGhlIGhlYWRlciBhbmQgdGhlIGxpbmUgbnVtYmVycyBhcmUKKyAqIHByaW50ZWQgaW4gdGhlIG1hcmdpbi4KKyAqLworCisjaWZkZWYgRkVBVF9TWU5fSEwKK3N0YXRpYyBjb25zdCBsb25nX3UgIGN0ZXJtX2NvbG9yXzhbOF0gPQoreworICAgIChsb25nX3UpMHgwMDAwMDBMLCAobG9uZ191KTB4ZmYwMDAwTCwgKGxvbmdfdSkweDAwZmYwMEwsIChsb25nX3UpMHhmZmZmMDBMLAorICAgIChsb25nX3UpMHgwMDAwZmZMLCAobG9uZ191KTB4ZmYwMGZmTCwgKGxvbmdfdSkweDAwZmZmZkwsIChsb25nX3UpMHhmZmZmZmZMCit9OworCitzdGF0aWMgY29uc3QgbG9uZ191ICBjdGVybV9jb2xvcl8xNlsxNl0gPQoreworICAgIChsb25nX3UpMHgwMDAwMDBMLCAobG9uZ191KTB4MDAwMGMwTCwgKGxvbmdfdSkweDAwODAwMEwsIChsb25nX3UpMHgwMDQwODBMLAorICAgIChsb25nX3UpMHhjMDAwMDBMLCAobG9uZ191KTB4YzAwMGMwTCwgKGxvbmdfdSkweDgwODAwMEwsIChsb25nX3UpMHhjMGMwYzBMLAorICAgIChsb25nX3UpMHg4MDgwODBMLCAobG9uZ191KTB4NjA2MGZmTCwgKGxvbmdfdSkweDAwZmYwMEwsIChsb25nX3UpMHgwMGZmZmZMLAorICAgIChsb25nX3UpMHhmZjgwODBMLCAobG9uZ191KTB4ZmY0MGZmTCwgKGxvbmdfdSkweGZmZmYwMEwsIChsb25nX3UpMHhmZmZmZmZMCit9OworCitzdGF0aWMgaW50CQljdXJyZW50X3N5bl9pZDsKKyNlbmRpZgorCisjZGVmaW5lIFBSQ09MT1JfQkxBQ0sJKGxvbmdfdSkwCisjZGVmaW5lIFBSQ09MT1JfV0hJVEUJKGxvbmdfdSkweEZGRkZGRkwKKworc3RhdGljIGludAljdXJyX2l0YWxpYzsKK3N0YXRpYyBpbnQJY3Vycl9ib2xkOworc3RhdGljIGludAljdXJyX3VuZGVybGluZTsKK3N0YXRpYyBsb25nX3UJY3Vycl9iZzsKK3N0YXRpYyBsb25nX3UJY3Vycl9mZzsKK3N0YXRpYyBpbnQJcGFnZV9jb3VudDsKKworLyoKKyAqIFRoZXNlIHZhbHVlcyBkZXRlcm1pbmUgdGhlIHByaW50IHBvc2l0aW9uIG9uIGEgcGFnZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQJCWxlYWRfc3BhY2VzOwkgICAgLyogcmVtYWluaW5nIHNwYWNlcyBmb3IgYSBUQUIgKi8KKyAgICBpbnQJCXByaW50X3BvczsJICAgIC8qIHZpcnR1YWwgY29sdW1uIGZvciBjb21wdXRpbmcgVEFCcyAqLworICAgIGNvbG5yX1QJY29sdW1uOwkJICAgIC8qIGJ5dGUgY29sdW1uICovCisgICAgbGluZW5yX1QJZmlsZV9saW5lOwkgICAgLyogbGluZSBuciBpbiB0aGUgYnVmZmVyICovCisgICAgbG9uZ191CWJ5dGVzX3ByaW50ZWQ7CSAgICAvKiBieXRlcyBwcmludGVkIHNvIGZhciAqLworICAgIGludAkJZmY7CQkgICAgLyogc2VlbiBmb3JtIGZlZWQgY2hhcmFjdGVyICovCit9IHBydF9wb3NfVDsKKworI2lmZGVmIEZFQVRfU1lOX0hMCitzdGF0aWMgbG9uZ191IGRhcmtlbl9yZ2IgX19BUkdTKChsb25nX3UgcmdiKSk7CitzdGF0aWMgbG9uZ191IHBydF9nZXRfdGVybV9jb2xvciBfX0FSR1MoKGludCBjb2xvcmluZGV4KSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIHBydF9zZXRfZmcgX19BUkdTKChsb25nX3UgZmcpKTsKK3N0YXRpYyB2b2lkIHBydF9zZXRfYmcgX19BUkdTKChsb25nX3UgYmcpKTsKK3N0YXRpYyB2b2lkIHBydF9zZXRfZm9udCBfX0FSR1MoKGludCBib2xkLCBpbnQgaXRhbGljLCBpbnQgdW5kZXJsaW5lKSk7CitzdGF0aWMgdm9pZCBwcnRfbGluZV9udW1iZXIgX19BUkdTKChwcnRfc2V0dGluZ3NfVCAqcHNldHRpbmdzLCBpbnQgcGFnZV9saW5lLCBsaW5lbnJfVCBsbnVtKSk7CitzdGF0aWMgdm9pZCBwcnRfaGVhZGVyIF9fQVJHUygocHJ0X3NldHRpbmdzX1QgKnBzZXR0aW5ncywgaW50IHBhZ2VudW0sIGxpbmVucl9UIGxudW0pKTsKK3N0YXRpYyB2b2lkIHBydF9tZXNzYWdlIF9fQVJHUygoY2hhcl91ICpzKSk7CitzdGF0aWMgY29sbnJfVCBoYXJkY29weV9saW5lIF9fQVJHUygocHJ0X3NldHRpbmdzX1QgKnBzZXR0aW5ncywgaW50IHBhZ2VfbGluZSwgcHJ0X3Bvc19UICpwcG9zKSk7CitzdGF0aWMgdm9pZCBwcnRfZ2V0X2F0dHIgX19BUkdTKChpbnQgaGxfaWQsIHBydF90ZXh0X2F0dHJfVCogcGF0dHIsIGludCBtb2RlYykpOworCisjaWZkZWYgRkVBVF9TWU5fSEwKKy8qCisgKiBJZiB1c2luZyBhIGRhcmsgYmFja2dyb3VuZCwgdGhlIGNvbG9ycyB3aWxsIHByb2JhYmx5IGJlIHRvbyBicmlnaHQgdG8gc2hvdworICogdXAgd2VsbCBvbiB3aGl0ZSBwYXBlciwgc28gcmVkdWNlIHRoZWlyIGJyaWdodG5lc3MuCisgKi8KKyAgICBzdGF0aWMgbG9uZ191CitkYXJrZW5fcmdiKHJnYikKKyAgICBsb25nX3UJcmdiOworeworICAgIHJldHVybgkoKHJnYiA+PiAxNykgPDwgMTYpCisJICAgICsJKCgocmdiICYgMHhmZjAwKSA+PiA5KSA8PCA4KQorCSAgICArCSgocmdiICYgMHhmZikgPj4gMSk7Cit9CisKKyAgICBzdGF0aWMgbG9uZ191CitwcnRfZ2V0X3Rlcm1fY29sb3IoY29sb3JpbmRleCkKKyAgICBpbnQJICAgIGNvbG9yaW5kZXg7Cit7CisgICAgLyogVE9ETzogU2hvdWxkIGNoZWNrIGZvciB4dGVybSB3aXRoIDg4IG9yIDI1NiBjb2xvcnMuICovCisgICAgaWYgKHRfY29sb3JzID4gOCkKKwlyZXR1cm4gY3Rlcm1fY29sb3JfMTZbY29sb3JpbmRleCAlIDE2XTsKKyAgICByZXR1cm4gY3Rlcm1fY29sb3JfOFtjb2xvcmluZGV4ICUgOF07Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcHJ0X2dldF9hdHRyKGhsX2lkLCBwYXR0ciwgbW9kZWMpCisgICAgaW50CQkJaGxfaWQ7CisgICAgcHJ0X3RleHRfYXR0cl9UKglwYXR0cjsKKyAgICBpbnQJCQltb2RlYzsKK3sKKyAgICBpbnQgICAgIGNvbG9yaW5kZXg7CisgICAgbG9uZ191ICBmZ19jb2xvcjsKKyAgICBsb25nX3UgIGJnX2NvbG9yOworICAgIGNoYXIgICAgKmNvbG9yOworCisgICAgcGF0dHItPmJvbGQgPSAoaGlnaGxpZ2h0X2hhc19hdHRyKGhsX2lkLCBITF9CT0xELCBtb2RlYykgIT0gTlVMTCk7CisgICAgcGF0dHItPml0YWxpYyA9IChoaWdobGlnaHRfaGFzX2F0dHIoaGxfaWQsIEhMX0lUQUxJQywgbW9kZWMpICE9IE5VTEwpOworICAgIHBhdHRyLT51bmRlcmxpbmUgPSAoaGlnaGxpZ2h0X2hhc19hdHRyKGhsX2lkLCBITF9VTkRFUkxJTkUsIG1vZGVjKSAhPSBOVUxMKTsKKworIyBpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlKQorICAgIHsKKwliZ19jb2xvciA9IGhpZ2hsaWdodF9ndWlfY29sb3JfcmdiKGhsX2lkLCBGQUxTRSk7CisJaWYgKGJnX2NvbG9yID09IFBSQ09MT1JfQkxBQ0spCisJICAgIGJnX2NvbG9yID0gUFJDT0xPUl9XSElURTsKKworCWZnX2NvbG9yID0gaGlnaGxpZ2h0X2d1aV9jb2xvcl9yZ2IoaGxfaWQsIFRSVUUpOworICAgIH0KKyAgICBlbHNlCisjIGVuZGlmCisgICAgeworCWJnX2NvbG9yID0gUFJDT0xPUl9XSElURTsKKworCWNvbG9yID0gKGNoYXIgKiloaWdobGlnaHRfY29sb3IoaGxfaWQsIChjaGFyX3UgKikiZmciLCBtb2RlYyk7CisJaWYgKGNvbG9yID09IE5VTEwpCisJICAgIGNvbG9yaW5kZXggPSAwOworCWVsc2UKKwkgICAgY29sb3JpbmRleCA9IGF0b2koY29sb3IpOworCisJaWYgKGNvbG9yaW5kZXggPj0gMCAmJiBjb2xvcmluZGV4IDwgdF9jb2xvcnMpCisJICAgIGZnX2NvbG9yID0gcHJ0X2dldF90ZXJtX2NvbG9yKGNvbG9yaW5kZXgpOworCWVsc2UKKwkgICAgZmdfY29sb3IgPSBQUkNPTE9SX0JMQUNLOworICAgIH0KKworICAgIGlmIChmZ19jb2xvciA9PSBQUkNPTE9SX1dISVRFKQorCWZnX2NvbG9yID0gUFJDT0xPUl9CTEFDSzsKKyAgICBlbHNlIGlmICgqcF9iZyA9PSAnZCcpCisJZmdfY29sb3IgPSBkYXJrZW5fcmdiKGZnX2NvbG9yKTsKKworICAgIHBhdHRyLT5mZ19jb2xvciA9IGZnX2NvbG9yOworICAgIHBhdHRyLT5iZ19jb2xvciA9IGJnX2NvbG9yOworfQorI2VuZGlmIC8qIEZFQVRfU1lOX0hMICovCisKKyAgICBzdGF0aWMgdm9pZAorcHJ0X3NldF9mZyhmZykKKyAgICBsb25nX3UgZmc7Cit7CisgICAgaWYgKGZnICE9IGN1cnJfZmcpCisgICAgeworCWN1cnJfZmcgPSBmZzsKKwltY2hfcHJpbnRfc2V0X2ZnKGZnKTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcHJ0X3NldF9iZyhiZykKKyAgICBsb25nX3UgYmc7Cit7CisgICAgaWYgKGJnICE9IGN1cnJfYmcpCisgICAgeworCWN1cnJfYmcgPSBiZzsKKwltY2hfcHJpbnRfc2V0X2JnKGJnKTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcHJ0X3NldF9mb250KGJvbGQsIGl0YWxpYywgdW5kZXJsaW5lKQorICAgIGludAkJYm9sZDsKKyAgICBpbnQJCWl0YWxpYzsKKyAgICBpbnQJCXVuZGVybGluZTsKK3sKKyAgICBpZiAoY3Vycl9ib2xkICE9IGJvbGQKKwkgICAgfHwgY3Vycl9pdGFsaWMgIT0gaXRhbGljCisJICAgIHx8IGN1cnJfdW5kZXJsaW5lICE9IHVuZGVybGluZSkKKyAgICB7CisJY3Vycl91bmRlcmxpbmUgPSB1bmRlcmxpbmU7CisJY3Vycl9pdGFsaWMgPSBpdGFsaWM7CisJY3Vycl9ib2xkID0gYm9sZDsKKwltY2hfcHJpbnRfc2V0X2ZvbnQoYm9sZCwgaXRhbGljLCB1bmRlcmxpbmUpOworICAgIH0KK30KKworLyoKKyAqIFByaW50IHRoZSBsaW5lIG51bWJlciBpbiB0aGUgbGVmdCBtYXJnaW4uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcHJ0X2xpbmVfbnVtYmVyKHBzZXR0aW5ncywgcGFnZV9saW5lLCBsbnVtKQorICAgIHBydF9zZXR0aW5nc19UICpwc2V0dGluZ3M7CisgICAgaW50CQlwYWdlX2xpbmU7CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CXRidWZbMjBdOworCisgICAgcHJ0X3NldF9mZyhwc2V0dGluZ3MtPm51bWJlci5mZ19jb2xvcik7CisgICAgcHJ0X3NldF9iZyhwc2V0dGluZ3MtPm51bWJlci5iZ19jb2xvcik7CisgICAgcHJ0X3NldF9mb250KHBzZXR0aW5ncy0+bnVtYmVyLmJvbGQsIHBzZXR0aW5ncy0+bnVtYmVyLml0YWxpYywgcHNldHRpbmdzLT5udW1iZXIudW5kZXJsaW5lKTsKKyAgICBtY2hfcHJpbnRfc3RhcnRfbGluZShUUlVFLCBwYWdlX2xpbmUpOworCisgICAgLyogTGVhdmUgdHdvIHNwYWNlcyBiZXR3ZWVuIHRoZSBudW1iZXIgYW5kIHRoZSB0ZXh0OyBkZXBlbmRzIG9uCisgICAgICogUFJJTlRfTlVNQkVSX1dJRFRILiAqLworICAgIHNwcmludGYoKGNoYXIgKil0YnVmLCAiJTZsZCIsIChsb25nKWxudW0pOworICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJKHZvaWQpbWNoX3ByaW50X3RleHRfb3V0KCZ0YnVmW2ldLCAxKTsKKworI2lmZGVmIEZFQVRfU1lOX0hMCisgICAgaWYgKHBzZXR0aW5ncy0+ZG9fc3ludGF4KQorCS8qIFNldCBjb2xvcnMgZm9yIG5leHQgY2hhcmFjdGVyLiAqLworCWN1cnJlbnRfc3luX2lkID0gLTE7CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCS8qIFNldCBjb2xvcnMgYW5kIGZvbnQgYmFjayB0byBub3JtYWwuICovCisJcHJ0X3NldF9mZyhQUkNPTE9SX0JMQUNLKTsKKwlwcnRfc2V0X2JnKFBSQ09MT1JfV0hJVEUpOworCXBydF9zZXRfZm9udChGQUxTRSwgRkFMU0UsIEZBTFNFKTsKKyAgICB9Cit9CisKK3N0YXRpYyBsaW5lbnJfVCBwcmludGVyX3BhZ2VfbnVtOworCisgICAgaW50CitnZXRfcHJpbnRlcl9wYWdlX251bSgpCit7CisgICAgcmV0dXJuIHByaW50ZXJfcGFnZV9udW07Cit9CisKKy8qCisgKiBHZXQgdGhlIGN1cnJlbnRseSBlZmZlY3RpdmUgaGVhZGVyIGhlaWdodC4KKyAqLworICAgIGludAorcHJ0X2hlYWRlcl9oZWlnaHQoKQoreworICAgIGlmIChwcmludGVyX29wdHNbT1BUX1BSSU5UX0hFQURFUkhFSUdIVF0ucHJlc2VudCkKKwlyZXR1cm4gcHJpbnRlcl9vcHRzW09QVF9QUklOVF9IRUFERVJIRUlHSFRdLm51bWJlcjsKKyAgICByZXR1cm4gMjsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHVzaW5nIGEgbGluZSBudW1iZXIgZm9yIHByaW50aW5nLgorICovCisgICAgaW50CitwcnRfdXNlX251bWJlcigpCit7CisgICAgcmV0dXJuIChwcmludGVyX29wdHNbT1BUX1BSSU5UX05VTUJFUl0ucHJlc2VudAorCSAgICAmJiBUT0xPV0VSX0FTQyhwcmludGVyX29wdHNbT1BUX1BSSU5UX05VTUJFUl0uc3RyaW5nWzBdKSA9PSAneScpOworfQorCisvKgorICogUmV0dXJuIHRoZSB1bml0IHVzZWQgaW4gYSBtYXJnaW4gaXRlbSBpbiAncHJpbnRvcHRpb25zJy4KKyAqIFJldHVybnMgUFJUX1VOSVRfTk9ORSBpZiBub3QgcmVjb2duaXplZC4KKyAqLworICAgIGludAorcHJ0X2dldF91bml0KGlkeCkKKyAgICBpbnQJCWlkeDsKK3sKKyAgICBpbnQJCXUgPSBQUlRfVU5JVF9OT05FOworICAgIGludAkJaTsKKyAgICBzdGF0aWMgY2hhciAqKHVuaXRzWzRdKSA9IFBSVF9VTklUX05BTUVTOworCisgICAgaWYgKHByaW50ZXJfb3B0c1tpZHhdLnByZXNlbnQpCisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkgICAgaWYgKFNUUk5JQ01QKHByaW50ZXJfb3B0c1tpZHhdLnN0cmluZywgdW5pdHNbaV0sIDIpID09IDApCisJICAgIHsKKwkJdSA9IGk7CisJCWJyZWFrOworCSAgICB9CisgICAgcmV0dXJuIHU7Cit9CisKKy8qCisgKiBQcmludCB0aGUgcGFnZSBoZWFkZXIuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitwcnRfaGVhZGVyKHBzZXR0aW5ncywgcGFnZW51bSwgbG51bSkKKyAgICBwcnRfc2V0dGluZ3NfVCAgKnBzZXR0aW5nczsKKyAgICBpbnQJCXBhZ2VudW07CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBpbnQJCXdpZHRoID0gcHNldHRpbmdzLT5jaGFyc19wZXJfbGluZTsKKyAgICBpbnQJCXBhZ2VfbGluZTsKKyAgICBjaGFyX3UJKnRidWY7CisgICAgY2hhcl91CSpwOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCWw7CisjZW5kaWYKKworICAgIC8qIEFsc28gdXNlIHRoZSBzcGFjZSBmb3IgdGhlIGxpbmUgbnVtYmVyLiAqLworICAgIGlmIChwcnRfdXNlX251bWJlcigpKQorCXdpZHRoICs9IFBSSU5UX05VTUJFUl9XSURUSDsKKworICAgIHRidWYgPSBhbGxvYyh3aWR0aCArIElPU0laRSk7CisgICAgaWYgKHRidWYgPT0gTlVMTCkKKwlyZXR1cm47CisKKyNpZmRlZiBGRUFUX1NUTF9PUFQKKyAgICBpZiAoKnBfaGVhZGVyICE9IE5VTCkKKyAgICB7CisJbGluZW5yX1QJdG1wX2xudW0sIHRtcF90b3BsaW5lLCB0bXBfYm90bGluZTsKKworCS8qCisJICogTmVlZCB0byAodGVtcG9yYXJpbHkpIHNldCBjdXJyZW50IGxpbmUgbnVtYmVyIGFuZCBmaXJzdC9sYXN0IGxpbmUKKwkgKiBudW1iZXIgb24gdGhlICd3aW5kb3cnLiAgU2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgbG9uZyB0aGUgcGFnZSBpcywKKwkgKiBzZXQgdGhlIGZpcnN0IGFuZCBjdXJyZW50IGxpbmUgbnVtYmVyIHRvIHRoZSB0b3AgbGluZSwgYW5kIGd1ZXNzCisJICogdGhhdCB0aGUgcGFnZSBsZW5ndGggaXMgNjQuCisJICovCisJdG1wX2xudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJdG1wX3RvcGxpbmUgPSBjdXJ3aW4tPndfdG9wbGluZTsKKwl0bXBfYm90bGluZSA9IGN1cndpbi0+d19ib3RsaW5lOworCWN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisJY3Vyd2luLT53X3RvcGxpbmUgPSBsbnVtOworCWN1cndpbi0+d19ib3RsaW5lID0gbG51bSArIDYzOworCXByaW50ZXJfcGFnZV9udW0gPSBwYWdlbnVtOworCisJYnVpbGRfc3RsX3N0cl9obChjdXJ3aW4sIHRidWYsIChzaXplX3QpKHdpZHRoICsgSU9TSVpFKSwKKwkJCQkJCSAgcF9oZWFkZXIsICcgJywgd2lkdGgsIE5VTEwpOworCisJLyogUmVzZXQgbGluZSBudW1iZXJzICovCisJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gdG1wX2xudW07CisJY3Vyd2luLT53X3RvcGxpbmUgPSB0bXBfdG9wbGluZTsKKwljdXJ3aW4tPndfYm90bGluZSA9IHRtcF9ib3RsaW5lOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwlzcHJpbnRmKChjaGFyICopdGJ1ZiwgXygiUGFnZSAlZCIpLCBwYWdlbnVtKTsKKworICAgIHBydF9zZXRfZmcoUFJDT0xPUl9CTEFDSyk7CisgICAgcHJ0X3NldF9iZyhQUkNPTE9SX1dISVRFKTsKKyAgICBwcnRfc2V0X2ZvbnQoVFJVRSwgRkFMU0UsIEZBTFNFKTsKKworICAgIC8qIFVzZSBhIG5lZ2F0aXZlIGxpbmUgbnVtYmVyIHRvIGluZGljYXRlIHByaW50aW5nIGluIHRoZSB0b3AgbWFyZ2luLiAqLworICAgIHBhZ2VfbGluZSA9IDAgLSBwcnRfaGVhZGVyX2hlaWdodCgpOworICAgIG1jaF9wcmludF9zdGFydF9saW5lKFRSVUUsIHBhZ2VfbGluZSk7CisgICAgZm9yIChwID0gdGJ1ZjsgKnAgIT0gTlVMOyApCisgICAgeworCWlmIChtY2hfcHJpbnRfdGV4dF9vdXQocCwKKyNpZmRlZiBGRUFUX01CWVRFCisJCShsID0gKCptYl9wdHIybGVuX2NoZWNrKShwKSkKKyNlbHNlCisJCTEKKyNlbmRpZgorCQkgICAgKSkKKwl7CisJICAgICsrcGFnZV9saW5lOworCSAgICBpZiAocGFnZV9saW5lID49IDApIC8qIG91dCBvZiByb29tIGluIGhlYWRlciAqLworCQlicmVhazsKKwkgICAgbWNoX3ByaW50X3N0YXJ0X2xpbmUoVFJVRSwgcGFnZV9saW5lKTsKKwl9CisjaWZkZWYgRkVBVF9NQllURQorCXAgKz0gbDsKKyNlbHNlCisJcCsrOworI2VuZGlmCisgICAgfQorCisgICAgdmltX2ZyZWUodGJ1Zik7CisKKyNpZmRlZiBGRUFUX1NZTl9ITAorICAgIGlmIChwc2V0dGluZ3MtPmRvX3N5bnRheCkKKwkvKiBTZXQgY29sb3JzIGZvciBuZXh0IGNoYXJhY3Rlci4gKi8KKwljdXJyZW50X3N5bl9pZCA9IC0xOworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwkvKiBTZXQgY29sb3JzIGFuZCBmb250IGJhY2sgdG8gbm9ybWFsLiAqLworCXBydF9zZXRfZmcoUFJDT0xPUl9CTEFDSyk7CisJcHJ0X3NldF9iZyhQUkNPTE9SX1dISVRFKTsKKwlwcnRfc2V0X2ZvbnQoRkFMU0UsIEZBTFNFLCBGQUxTRSk7CisgICAgfQorfQorCisvKgorICogRGlzcGxheSBhIHByaW50IHN0YXR1cyBtZXNzYWdlLgorICovCisgICAgc3RhdGljIHZvaWQKK3BydF9tZXNzYWdlKHMpCisgICAgY2hhcl91CSpzOworeworICAgIHNjcmVlbl9maWxsKChpbnQpUm93cyAtIDEsIChpbnQpUm93cywgMCwgKGludClDb2x1bW5zLCAnICcsICcgJywgMCk7CisgICAgc2NyZWVuX3B1dHMocywgKGludClSb3dzIC0gMSwgMCwgaGxfYXR0cihITEZfUikpOworICAgIG91dF9mbHVzaCgpOworfQorCisgICAgdm9pZAorZXhfaGFyZGNvcHkoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBsaW5lbnJfVAkJbG51bTsKKyAgICBpbnQJCQljb2xsYXRlZF9jb3BpZXMsIHVuY29sbGF0ZWRfY29waWVzOworICAgIHBydF9zZXR0aW5nc19UCXNldHRpbmdzOworICAgIGxvbmdfdQkJYnl0ZXNfdG9fcHJpbnQgPSAwOworICAgIGludAkJCXBhZ2VfbGluZTsKKyAgICBpbnQJCQlqb2JzcGxpdDsKKyAgICBpbnQJCQlpZDsKKworICAgIG1lbXNldCgmc2V0dGluZ3MsIDAsIHNpemVvZihwcnRfc2V0dGluZ3NfVCkpOworICAgIHNldHRpbmdzLmhhc19jb2xvciA9IFRSVUU7CisKKyMgaWZkZWYgRkVBVF9QT1NUU0NSSVBUCisgICAgaWYgKCplYXAtPmFyZyA9PSAnPicpCisgICAgeworCWNoYXJfdQkqZXJyb3Jtc2cgPSBOVUxMOworCisJLyogRXhwYW5kIHRoaW5ncyBsaWtlICIlLnBzIi4gKi8KKwlpZiAoZXhwYW5kX2ZpbGVuYW1lKGVhcCwgZWFwLT5jbWRsaW5lcCwgJmVycm9ybXNnKSA9PSBGQUlMKQorCXsKKwkgICAgaWYgKGVycm9ybXNnICE9IE5VTEwpCisJCUVNU0coZXJyb3Jtc2cpOworCSAgICByZXR1cm47CisJfQorCXNldHRpbmdzLm91dGZpbGUgPSBza2lwd2hpdGUoZWFwLT5hcmcgKyAxKTsKKyAgICB9CisgICAgZWxzZSBpZiAoKmVhcC0+YXJnICE9IE5VTCkKKwlzZXR0aW5ncy5hcmd1bWVudHMgPSBlYXAtPmFyZzsKKyMgZW5kaWYKKworICAgIC8qCisgICAgICogSW5pdGlhbGlzZSBmb3IgcHJpbnRpbmcuICBBc2sgdGhlIHVzZXIgZm9yIHNldHRpbmdzLCB1bmxlc3MgZm9yY2VpdCBpcworICAgICAqIHNldC4KKyAgICAgKiBUaGUgbWNoX3ByaW50X2luaXQoKSBjb2RlIHNob3VsZCBzZXQgdXAgbWFyZ2lucyBpZiBhcHBsaWNhYmxlLiAoSXQgbWF5CisgICAgICogbm90IGJlIGEgcmVhbCBwcmludGVyIC0gZm9yIGV4YW1wbGUgdGhlIGVuZ2luZSBtaWdodCBnZW5lcmF0ZSBIVE1MIG9yCisgICAgICogUFMuKQorICAgICAqLworICAgIGlmIChtY2hfcHJpbnRfaW5pdCgmc2V0dGluZ3MsCisJCQljdXJidWYtPmJfZm5hbWUgPT0gTlVMTAorCQkJICAgID8gKGNoYXJfdSAqKWJ1Zl9zcG5hbWUoY3VyYnVmKQorCQkJICAgIDogY3VyYnVmLT5iX3NmbmFtZSA9PSBOVUxMCisJCQkJPyBjdXJidWYtPmJfZm5hbWUKKwkJCQk6IGN1cmJ1Zi0+Yl9zZm5hbWUsCisJCQllYXAtPmZvcmNlaXQpID09IEZBSUwpCisJcmV0dXJuOworCisjaWZkZWYgRkVBVF9TWU5fSEwKKyMgaWZkZWYgIEZFQVRfR1VJCisgICAgaWYgKGd1aS5pbl91c2UpCisJc2V0dGluZ3MubW9kZWMgPSAnZyc7CisgICAgZWxzZQorIyBlbmRpZgorCWlmICh0X2NvbG9ycyA+IDEpCisJICAgIHNldHRpbmdzLm1vZGVjID0gJ2MnOworCWVsc2UKKwkgICAgc2V0dGluZ3MubW9kZWMgPSAndCc7CisKKyAgICBpZiAoIXN5bnRheF9wcmVzZW50KGN1cmJ1ZikpCisJc2V0dGluZ3MuZG9fc3ludGF4ID0gRkFMU0U7CisgICAgZWxzZSBpZiAocHJpbnRlcl9vcHRzW09QVF9QUklOVF9TWU5UQVhdLnByZXNlbnQKKwkgICAgJiYgVE9MT1dFUl9BU0MocHJpbnRlcl9vcHRzW09QVF9QUklOVF9TWU5UQVhdLnN0cmluZ1swXSkgIT0gJ2EnKQorCXNldHRpbmdzLmRvX3N5bnRheCA9CisJICAgICAgIChUT0xPV0VSX0FTQyhwcmludGVyX29wdHNbT1BUX1BSSU5UX1NZTlRBWF0uc3RyaW5nWzBdKSA9PSAneScpOworICAgIGVsc2UKKwlzZXR0aW5ncy5kb19zeW50YXggPSBzZXR0aW5ncy5oYXNfY29sb3I7CisjZW5kaWYKKworICAgIC8qIFNldCB1cCBwcmludGluZyBhdHRyaWJ1dGVzIGZvciBsaW5lIG51bWJlcnMgKi8KKyAgICBzZXR0aW5ncy5udW1iZXIuZmdfY29sb3IgPSBQUkNPTE9SX0JMQUNLOworICAgIHNldHRpbmdzLm51bWJlci5iZ19jb2xvciA9IFBSQ09MT1JfV0hJVEU7CisgICAgc2V0dGluZ3MubnVtYmVyLmJvbGQgPSBGQUxTRTsKKyAgICBzZXR0aW5ncy5udW1iZXIuaXRhbGljID0gVFJVRTsKKyAgICBzZXR0aW5ncy5udW1iZXIudW5kZXJsaW5lID0gRkFMU0U7CisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICAvKgorICAgICAqIFN5bnRheCBoaWdobGlnaHRpbmcgb2YgbGluZSBudW1iZXJzLgorICAgICAqLworICAgIGlmIChwcnRfdXNlX251bWJlcigpICYmIHNldHRpbmdzLmRvX3N5bnRheCkKKyAgICB7CisJaWQgPSBzeW5fbmFtZTJpZCgoY2hhcl91ICopIkxpbmVOciIpOworCWlmIChpZCA+IDApCisJICAgIGlkID0gc3luX2dldF9maW5hbF9pZChpZCk7CisKKwlwcnRfZ2V0X2F0dHIoaWQsICZzZXR0aW5ncy5udW1iZXIsIHNldHRpbmdzLm1vZGVjKTsKKyAgICB9CisjZW5kaWYgLyogRkVBVF9TWU5fSEwgKi8KKworICAgIC8qCisgICAgICogRXN0aW1hdGUgdGhlIHRvdGFsIGxpbmVzIHRvIGJlIHByaW50ZWQKKyAgICAgKi8KKyAgICBmb3IgKGxudW0gPSBlYXAtPmxpbmUxOyBsbnVtIDw9IGVhcC0+bGluZTI7IGxudW0rKykKKwlieXRlc190b19wcmludCArPSAobG9uZ191KVNUUkxFTihza2lwd2hpdGUobWxfZ2V0KGxudW0pKSk7CisgICAgaWYgKGJ5dGVzX3RvX3ByaW50ID09IDApCisgICAgeworCU1TRyhfKCJObyB0ZXh0IHRvIGJlIHByaW50ZWQiKSk7CisJZ290byBwcmludF9mYWlsX25vX2JlZ2luOworICAgIH0KKworICAgIC8qIFNldCBjb2xvcnMgYW5kIGZvbnQgdG8gbm9ybWFsLiAqLworICAgIGN1cnJfYmcgPSAobG9uZ191KTB4ZmZmZmZmZmZMOworICAgIGN1cnJfZmcgPSAobG9uZ191KTB4ZmZmZmZmZmZMOworICAgIGN1cnJfaXRhbGljID0gTUFZQkU7CisgICAgY3Vycl9ib2xkID0gTUFZQkU7CisgICAgY3Vycl91bmRlcmxpbmUgPSBNQVlCRTsKKworICAgIHBydF9zZXRfZmcoUFJDT0xPUl9CTEFDSyk7CisgICAgcHJ0X3NldF9iZyhQUkNPTE9SX1dISVRFKTsKKyAgICBwcnRfc2V0X2ZvbnQoRkFMU0UsIEZBTFNFLCBGQUxTRSk7CisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBjdXJyZW50X3N5bl9pZCA9IC0xOworI2VuZGlmCisKKyAgICBqb2JzcGxpdCA9IChwcmludGVyX29wdHNbT1BUX1BSSU5UX0pPQlNQTElUXS5wcmVzZW50CisJICAgJiYgVE9MT1dFUl9BU0MocHJpbnRlcl9vcHRzW09QVF9QUklOVF9KT0JTUExJVF0uc3RyaW5nWzBdKSA9PSAneScpOworCisgICAgaWYgKCFtY2hfcHJpbnRfYmVnaW4oJnNldHRpbmdzKSkKKwlnb3RvIHByaW50X2ZhaWxfbm9fYmVnaW47CisKKyAgICAvKgorICAgICAqIExvb3Agb3ZlciBjb2xsYXRlZCBjb3BpZXM6IDEgMiAzLCAxIDIgMywgLi4uCisgICAgICovCisgICAgcGFnZV9jb3VudCA9IDA7CisgICAgZm9yIChjb2xsYXRlZF9jb3BpZXMgPSAwOworCSAgICBjb2xsYXRlZF9jb3BpZXMgPCBzZXR0aW5ncy5uX2NvbGxhdGVkX2NvcGllczsKKwkgICAgY29sbGF0ZWRfY29waWVzKyspCisgICAgeworCXBydF9wb3NfVAlwcnRwb3M7CQkvKiBjdXJyZW50IHByaW50IHBvc2l0aW9uICovCisJcHJ0X3Bvc19UCXBhZ2VfcHJ0cG9zOwkvKiBwcmludCBwb3NpdGlvbiBhdCBwYWdlIHN0YXJ0ICovCisJaW50CQlzaWRlOworCisJbWVtc2V0KCZwYWdlX3BydHBvcywgMCwgc2l6ZW9mKHBydF9wb3NfVCkpOworCXBhZ2VfcHJ0cG9zLmZpbGVfbGluZSA9IGVhcC0+bGluZTE7CisJcHJ0cG9zID0gcGFnZV9wcnRwb3M7CisKKwlpZiAoam9ic3BsaXQgJiYgY29sbGF0ZWRfY29waWVzID4gMCkKKwl7CisJICAgIC8qIFNwbGl0dGluZyBqb2JzOiBTdG9wIGEgcHJldmlvdXMgam9iIGFuZCBzdGFydCBhIG5ldyBvbmUuICovCisJICAgIG1jaF9wcmludF9lbmQoJnNldHRpbmdzKTsKKwkgICAgaWYgKCFtY2hfcHJpbnRfYmVnaW4oJnNldHRpbmdzKSkKKwkJZ290byBwcmludF9mYWlsX25vX2JlZ2luOworCX0KKworCS8qCisJICogTG9vcCBvdmVyIGFsbCBwYWdlcyBpbiB0aGUgcHJpbnQgam9iOiAxIDIgMyAuLi4KKwkgKi8KKwlmb3IgKHBhZ2VfY291bnQgPSAwOyBwcnRwb3MuZmlsZV9saW5lIDw9IGVhcC0+bGluZTI7ICsrcGFnZV9jb3VudCkKKwl7CisJICAgIC8qCisJICAgICAqIExvb3Agb3ZlciB1bmNvbGxhdGVkIGNvcGllczogMSAxIDEsIDIgMiAyLCAzIDMgMywgLi4uCisJICAgICAqIEZvciBkdXBsZXg6IDEyIDEyIDEyIDM0IDM0IDM0LCAuLi4KKwkgICAgICovCisJICAgIGZvciAodW5jb2xsYXRlZF9jb3BpZXMgPSAwOworCQkgICAgdW5jb2xsYXRlZF9jb3BpZXMgPCBzZXR0aW5ncy5uX3VuY29sbGF0ZWRfY29waWVzOworCQkgICAgdW5jb2xsYXRlZF9jb3BpZXMrKykKKwkgICAgeworCQkvKiBTZXQgdGhlIHByaW50IHBvc2l0aW9uIHRvIHRoZSBzdGFydCBvZiB0aGlzIHBhZ2UuICovCisJCXBydHBvcyA9IHBhZ2VfcHJ0cG9zOworCisJCS8qCisJCSAqIERvIGZyb250IGFuZCByZWFyIHNpZGUgb2YgYSBwYWdlLgorCQkgKi8KKwkJZm9yIChzaWRlID0gMDsgc2lkZSA8PSBzZXR0aW5ncy5kdXBsZXg7ICsrc2lkZSkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIFByaW50IG9uZSBwYWdlLgorCQkgICAgICovCisKKwkJICAgIC8qIENoZWNrIGZvciBpbnRlcnJ1cHQgY2hhcmFjdGVyIGV2ZXJ5IHBhZ2UuICovCisJCSAgICB1aV9icmVha2NoZWNrKCk7CisJCSAgICBpZiAoZ290X2ludCB8fCBzZXR0aW5ncy51c2VyX2Fib3J0KQorCQkJZ290byBwcmludF9mYWlsOworCisJCSAgICBzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCJQcmludGluZyBwYWdlICVkICglZCUlKSIpLAorCQkJICAgIHBhZ2VfY291bnQgKyAxICsgc2lkZSwKKwkJCSAgICBwcnRwb3MuYnl0ZXNfcHJpbnRlZCA+IDEwMDAwMDAKKwkJCQk/IChpbnQpKHBydHBvcy5ieXRlc19wcmludGVkIC8KKwkJCQkJCSAgICAgICAoYnl0ZXNfdG9fcHJpbnQgLyAxMDApKQorCQkJCTogKGludCkoKHBydHBvcy5ieXRlc19wcmludGVkICogMTAwKQorCQkJCQkJCSAgIC8gYnl0ZXNfdG9fcHJpbnQpKTsKKwkJICAgIGlmICghbWNoX3ByaW50X2JlZ2luX3BhZ2UoSU9idWZmKSkKKwkJCWdvdG8gcHJpbnRfZmFpbDsKKworCQkgICAgaWYgKHNldHRpbmdzLm5fY29sbGF0ZWRfY29waWVzID4gMSkKKwkJCXNwcmludGYoKGNoYXIgKilJT2J1ZmYgKyBTVFJMRU4oSU9idWZmKSwKKwkJCQlfKCIgQ29weSAlZCBvZiAlZCIpLAorCQkJCWNvbGxhdGVkX2NvcGllcyArIDEsCisJCQkJc2V0dGluZ3Mubl9jb2xsYXRlZF9jb3BpZXMpOworCQkgICAgcHJ0X21lc3NhZ2UoSU9idWZmKTsKKworCQkgICAgLyoKKwkJICAgICAqIE91dHB1dCBoZWFkZXIgaWYgcmVxdWlyZWQKKwkJICAgICAqLworCQkgICAgaWYgKHBydF9oZWFkZXJfaGVpZ2h0KCkgPiAwKQorCQkJcHJ0X2hlYWRlcigmc2V0dGluZ3MsIHBhZ2VfY291bnQgKyAxICsgc2lkZSwKKwkJCQkJCQlwcnRwb3MuZmlsZV9saW5lKTsKKworCQkgICAgZm9yIChwYWdlX2xpbmUgPSAwOyBwYWdlX2xpbmUgPCBzZXR0aW5ncy5saW5lc19wZXJfcGFnZTsKKwkJCQkJCQkJICArK3BhZ2VfbGluZSkKKwkJICAgIHsKKwkJCXBydHBvcy5jb2x1bW4gPSBoYXJkY29weV9saW5lKCZzZXR0aW5ncywKKwkJCQkJCQkgICBwYWdlX2xpbmUsICZwcnRwb3MpOworCQkJaWYgKHBydHBvcy5jb2x1bW4gPT0gMCkKKwkJCXsKKwkJCSAgICAvKiBmaW5pc2hlZCBhIGZpbGUgbGluZSAqLworCQkJICAgIHBydHBvcy5ieXRlc19wcmludGVkICs9CisJCQkJICBTVFJMRU4oc2tpcHdoaXRlKG1sX2dldChwcnRwb3MuZmlsZV9saW5lKSkpOworCQkJICAgIGlmICgrK3BydHBvcy5maWxlX2xpbmUgPiBlYXAtPmxpbmUyKQorCQkJCWJyZWFrOyAvKiByZWFjaGVkIHRoZSBlbmQgKi8KKwkJCX0KKwkJCWVsc2UgaWYgKHBydHBvcy5mZikKKwkJCXsKKwkJCSAgICAvKiBMaW5lIGhhZCBhIGZvcm1mZWVkIGluIGl0IC0gc3RhcnQgbmV3IHBhZ2UgYnV0CisJCQkgICAgICogc3RheSBvbiB0aGUgY3VycmVudCBsaW5lICovCisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisKKwkJICAgIGlmICghbWNoX3ByaW50X2VuZF9wYWdlKCkpCisJCQlnb3RvIHByaW50X2ZhaWw7CisJCSAgICBpZiAocHJ0cG9zLmZpbGVfbGluZSA+IGVhcC0+bGluZTIpCisJCQlicmVhazsgLyogcmVhY2hlZCB0aGUgZW5kICovCisJCX0KKworCQkvKgorCQkgKiBFeHRyYSBibGFuayBwYWdlIGZvciBkdXBsZXhpbmcgd2l0aCBvZGQgbnVtYmVyIG9mIHBhZ2VzIGFuZAorCQkgKiBtb3JlIGNvcGllcyB0byBjb21lLgorCQkgKi8KKwkJaWYgKHBydHBvcy5maWxlX2xpbmUgPiBlYXAtPmxpbmUyICYmIHNldHRpbmdzLmR1cGxleAorCQkJCQkJCQkgJiYgc2lkZSA9PSAwCisJCSAgICAmJiB1bmNvbGxhdGVkX2NvcGllcyArIDEgPCBzZXR0aW5ncy5uX3VuY29sbGF0ZWRfY29waWVzKQorCQl7CisJCSAgICBpZiAoIW1jaF9wcmludF9ibGFua19wYWdlKCkpCisJCQlnb3RvIHByaW50X2ZhaWw7CisJCX0KKwkgICAgfQorCSAgICBpZiAoc2V0dGluZ3MuZHVwbGV4ICYmIHBydHBvcy5maWxlX2xpbmUgPD0gZWFwLT5saW5lMikKKwkJKytwYWdlX2NvdW50OworCisJICAgIC8qIFJlbWVtYmVyIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgbmV4dCBwYWdlIHN0YXJ0cy4gKi8KKwkgICAgcGFnZV9wcnRwb3MgPSBwcnRwb3M7CisJfQorCisJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiUHJpbnRlZDogJXMiKSwgc2V0dGluZ3Muam9ibmFtZSk7CisJcHJ0X21lc3NhZ2UoSU9idWZmKTsKKyAgICB9CisKK3ByaW50X2ZhaWw6CisgICAgaWYgKGdvdF9pbnQgfHwgc2V0dGluZ3MudXNlcl9hYm9ydCkKKyAgICB7CisJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiUHJpbnRpbmcgYWJvcnRlZCIpKTsKKwlwcnRfbWVzc2FnZShJT2J1ZmYpOworICAgIH0KKyAgICBtY2hfcHJpbnRfZW5kKCZzZXR0aW5ncyk7CisKK3ByaW50X2ZhaWxfbm9fYmVnaW46CisgICAgbWNoX3ByaW50X2NsZWFudXAoKTsKK30KKworLyoKKyAqIFByaW50IG9uZSBwYWdlIGxpbmUuCisgKiBSZXR1cm4gdGhlIG5leHQgY29sdW1uIHRvIHByaW50LCBvciB6ZXJvIGlmIHRoZSBsaW5lIGlzIGZpbmlzaGVkLgorICovCisgICAgc3RhdGljIGNvbG5yX1QKK2hhcmRjb3B5X2xpbmUocHNldHRpbmdzLCBwYWdlX2xpbmUsIHBwb3MpCisgICAgcHJ0X3NldHRpbmdzX1QJKnBzZXR0aW5nczsKKyAgICBpbnQJCQlwYWdlX2xpbmU7CisgICAgcHJ0X3Bvc19UCQkqcHBvczsKK3sKKyAgICBjb2xucl9UCWNvbDsKKyAgICBjaGFyX3UJKmxpbmU7CisgICAgaW50CQluZWVkX2JyZWFrID0gRkFMU0U7CisgICAgaW50CQlvdXRwdXRsZW47CisgICAgaW50CQl0YWJfc3BhY2VzOworICAgIGxvbmdfdQlwcmludF9wb3M7CisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBwcnRfdGV4dF9hdHRyX1QgYXR0cjsKKyAgICBpbnQJCWlkOworI2VuZGlmCisKKyAgICBpZiAocHBvcy0+Y29sdW1uID09IDAgfHwgcHBvcy0+ZmYpCisgICAgeworCXByaW50X3BvcyA9IDA7CisJdGFiX3NwYWNlcyA9IDA7CisJaWYgKCFwcG9zLT5mZiAmJiBwcnRfdXNlX251bWJlcigpKQorCSAgICBwcnRfbGluZV9udW1iZXIocHNldHRpbmdzLCBwYWdlX2xpbmUsIHBwb3MtPmZpbGVfbGluZSk7CisJcHBvcy0+ZmYgPSBGQUxTRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBsZWZ0IG92ZXIgZnJvbSB3cmFwIGhhbGZ3YXkgYSB0YWIgKi8KKwlwcmludF9wb3MgPSBwcG9zLT5wcmludF9wb3M7CisJdGFiX3NwYWNlcyA9IHBwb3MtPmxlYWRfc3BhY2VzOworICAgIH0KKworICAgIG1jaF9wcmludF9zdGFydF9saW5lKDAsIHBhZ2VfbGluZSk7CisgICAgbGluZSA9IG1sX2dldChwcG9zLT5maWxlX2xpbmUpOworCisgICAgLyoKKyAgICAgKiBMb29wIG92ZXIgdGhlIGNvbHVtbnMgdW50aWwgdGhlIGVuZCBvZiB0aGUgZmlsZSBsaW5lIG9yIHJpZ2h0IG1hcmdpbi4KKyAgICAgKi8KKyAgICBmb3IgKGNvbCA9IHBwb3MtPmNvbHVtbjsgbGluZVtjb2xdICE9IE5VTCAmJiAhbmVlZF9icmVhazsgY29sICs9IG91dHB1dGxlbikKKyAgICB7CisJb3V0cHV0bGVuID0gMTsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSAmJiAob3V0cHV0bGVuID0gKCptYl9wdHIybGVuX2NoZWNrKShsaW5lICsgY29sKSkgPCAxKQorCSAgICBvdXRwdXRsZW4gPSAxOworI2VuZGlmCisjaWZkZWYgRkVBVF9TWU5fSEwKKwkvKgorCSAqIHN5bnRheCBoaWdobGlnaHRpbmcgc3R1ZmYuCisJICovCisJaWYgKHBzZXR0aW5ncy0+ZG9fc3ludGF4KQorCXsKKwkgICAgaWQgPSBzeW5fZ2V0X2lkKHBwb3MtPmZpbGVfbGluZSwgKGxvbmcpY29sLCAxKTsKKwkgICAgaWYgKGlkID4gMCkKKwkJaWQgPSBzeW5fZ2V0X2ZpbmFsX2lkKGlkKTsKKwkgICAgZWxzZQorCQlpZCA9IDA7CisJICAgIC8qIEdldCB0aGUgbGluZSBhZ2FpbiwgYSBtdWx0aS1saW5lIHJlZ2V4cCBtYXkgaW52YWxpZGF0ZSBpdC4gKi8KKwkgICAgbGluZSA9IG1sX2dldChwcG9zLT5maWxlX2xpbmUpOworCisJICAgIGlmIChpZCAhPSBjdXJyZW50X3N5bl9pZCkKKwkgICAgeworCQljdXJyZW50X3N5bl9pZCA9IGlkOworCQlwcnRfZ2V0X2F0dHIoaWQsICZhdHRyLCBwc2V0dGluZ3MtPm1vZGVjKTsKKwkJcHJ0X3NldF9mb250KGF0dHIuYm9sZCwgYXR0ci5pdGFsaWMsIGF0dHIudW5kZXJsaW5lKTsKKwkJcHJ0X3NldF9mZyhhdHRyLmZnX2NvbG9yKTsKKwkJcHJ0X3NldF9iZyhhdHRyLmJnX2NvbG9yKTsKKwkgICAgfQorCX0KKyNlbmRpZiAvKiBGRUFUX1NZTl9ITCAqLworCisJLyoKKwkgKiBBcHByb3ByaWF0ZWx5IGV4cGFuZCBhbnkgdGFicyB0byBzcGFjZXMuCisJICovCisJaWYgKGxpbmVbY29sXSA9PSBUQUIgfHwgdGFiX3NwYWNlcyAhPSAwKQorCXsKKwkgICAgaWYgKHRhYl9zcGFjZXMgPT0gMCkKKwkJdGFiX3NwYWNlcyA9IGN1cmJ1Zi0+Yl9wX3RzIC0gKHByaW50X3BvcyAlIGN1cmJ1Zi0+Yl9wX3RzKTsKKworCSAgICB3aGlsZSAodGFiX3NwYWNlcyA+IDApCisJICAgIHsKKwkJbmVlZF9icmVhayA9IG1jaF9wcmludF90ZXh0X291dCgoY2hhcl91ICopIiAiLCAxKTsKKwkJcHJpbnRfcG9zKys7CisJCXRhYl9zcGFjZXMtLTsKKwkJaWYgKG5lZWRfYnJlYWspCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICAvKiBLZWVwIHRoZSBUQUIgaWYgd2UgZGlkbid0IGZpbmlzaCBpdC4gKi8KKwkgICAgaWYgKG5lZWRfYnJlYWsgJiYgdGFiX3NwYWNlcyA+IDApCisJCWJyZWFrOworCX0KKwllbHNlIGlmIChsaW5lW2NvbF0gPT0gRkYKKwkJJiYgcHJpbnRlcl9vcHRzW09QVF9QUklOVF9GT1JNRkVFRF0ucHJlc2VudAorCQkmJiBUT0xPV0VSX0FTQyhwcmludGVyX29wdHNbT1BUX1BSSU5UX0ZPUk1GRUVEXS5zdHJpbmdbMF0pCisJCQkJCQkJCSAgICAgICA9PSAneScpCisJeworCSAgICBwcG9zLT5mZiA9IFRSVUU7CisJICAgIG5lZWRfYnJlYWsgPSAxOworCX0KKwllbHNlCisJeworCSAgICBuZWVkX2JyZWFrID0gbWNoX3ByaW50X3RleHRfb3V0KGxpbmUgKyBjb2wsIG91dHB1dGxlbik7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQlwcmludF9wb3MgKz0gKCptYl9wdHIyY2VsbHMpKGxpbmUgKyBjb2wpOworCSAgICBlbHNlCisjZW5kaWYKKwkJcHJpbnRfcG9zKys7CisJfQorICAgIH0KKworICAgIHBwb3MtPmxlYWRfc3BhY2VzID0gdGFiX3NwYWNlczsKKyAgICBwcG9zLT5wcmludF9wb3MgPSBwcmludF9wb3M7CisKKyAgICAvKgorICAgICAqIFN0YXJ0IG5leHQgbGluZSBvZiBmaWxlIGlmIHdlIGNsaXAgbGluZXMsIG9yIGhhdmUgcmVhY2hlZCBlbmQgb2YgdGhlCisgICAgICogbGluZSwgdW5sZXNzIHdlIGFyZSBkb2luZyBhIGZvcm1mZWVkLgorICAgICAqLworICAgIGlmICghcHBvcy0+ZmYKKwkgICAgJiYgKGxpbmVbY29sXSA9PSBOVUwKKwkJfHwgKHByaW50ZXJfb3B0c1tPUFRfUFJJTlRfV1JBUF0ucHJlc2VudAorCQkgICAgJiYgVE9MT1dFUl9BU0MocHJpbnRlcl9vcHRzW09QVF9QUklOVF9XUkFQXS5zdHJpbmdbMF0pCisJCQkJCQkJCSAgICAgPT0gJ24nKSkpCisJcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbDsKK30KKworIyBpZiBkZWZpbmVkKEZFQVRfUE9TVFNDUklQVCkgfHwgZGVmaW5lZChQUk9UTykKKworLyoKKyAqIFBTIHByaW50ZXIgc3R1ZmYuCisgKgorICogU291cmNlcyBvZiBpbmZvcm1hdGlvbiB0byBoZWxwIG1haW50YWluIHRoZSBQUyBwcmludGluZyBjb2RlOgorICoKKyAqIDEuIFBvc3RTY3JpcHQgTGFuZ3VhZ2UgUmVmZXJlbmNlLCAzcmQgRWRpdGlvbiwKKyAqICAgICAgQWRkaXNvbi1XZXNsZXksIDE5OTksIElTQk4gMC0yMDEtMzc5MjItOAorICogMi4gUG9zdFNjcmlwdCBMYW5ndWFnZSBQcm9ncmFtIERlc2lnbiwKKyAqICAgICAgQWRkaXNvbi1XZXNsZXksIDE5ODgsIElTQk4gMC0yMDEtMTQzOTYtOAorICogMy4gUG9zdFNjcmlwdCBUdXRvcmlhbCBhbmQgQ29va2Jvb2ssCisgKiAgICAgIEFkZGlzb24gV2VzbGV5LCAxOTg1LCBJU0JOIDAtMjAxLTEwMTc5LTMKKyAqIDQuIFBvc3RTY3JpcHQgTGFuZ3VhZ2UgRG9jdW1lbnQgU3RydWN0dXJpbmcgQ29udmVudGlvbnMgU3BlY2lmaWNhdGlvbiwKKyAqICAgIHZlcnNpb24gMy4wLAorICogICAgICBBZG9iZSBUZWNobm90ZSA1MDAxLCAyNXRoIFNlcHRlbWJlciAxOTkyCisgKiA1LiBQb3N0U2NyaXB0IFByaW50ZXIgRGVzY3JpcHRpb24gRmlsZSBGb3JtYXQgU3BlY2lmaWNhdGlvbiwgVmVyc2lvbiA0LjMsCisgKiAgICAgIEFkb2JlIHRlY2hub3RlIDUwMDMsIDl0aCBGZWJydWFyeSAxOTk2CisgKiA2LiBBZG9iZSBGb250IE1ldHJpY3MgRmlsZSBGb3JtYXQgU3BlY2lmaWNhdGlvbiwgVmVyc2lvbiA0LjEsCisgKiAgICAgIEFkb2JlIFRlY2hub3RlIDUwMDcsIDd0aCBPY3RvYmVyIDE5OTgKKyAqCisgKiBTb21lIG9mIHRoZXNlIGRvY3VtZW50cyBjYW4gYmUgZm91bmQgaW4gUERGIGZvcm0gb24gQWRvYmUncyB3ZWIgc2l0ZSAtCisgKiBodHRwOi8vd3d3LmFkb2JlLmNvbQorICovCisKKyNkZWZpbmUgUFJUX1BTX0RFRkFVTFRfRFBJCSAgICAoNzIpICAgIC8qIERlZmF1bHQgdXNlciBzcGFjZSByZXNvbHV0aW9uICovCisjZGVmaW5lIFBSVF9QU19ERUZBVUxUX0ZPTlRTSVpFICAgICAoMTApCisjZGVmaW5lIFBSVF9QU19ERUZBVUxUX0JVRkZFUl9TSVpFICAoODApCisKK3N0cnVjdCBwcnRfbWVkaWFzaXplX1MKK3sKKyAgICBjaGFyCSpuYW1lOworICAgIGZsb2F0CXdpZHRoOwkJLyogd2lkdGggYW5kIGhlaWdodCBpbiBwb2ludHMgZm9yIHBvcnRyYWl0ICovCisgICAgZmxvYXQJaGVpZ2h0OworfTsKKworI2RlZmluZSBQUlRfTUVESUFTSVpFX0xFTiAgKHNpemVvZihwcnRfbWVkaWFzaXplKSAvIHNpemVvZihzdHJ1Y3QgcHJ0X21lZGlhc2l6ZV9TKSkKKworc3RhdGljIHN0cnVjdCBwcnRfbWVkaWFzaXplX1MgcHJ0X21lZGlhc2l6ZVtdID0KK3sKKyAgICB7IkE0IiwJCTU5NS4wLCAgODQyLjB9LAorICAgIHsibGV0dGVyIiwJCTYxMi4wLCAgNzkyLjB9LAorICAgIHsiMTB4MTQiLAkJNzIwLjAsIDEwMDguMH0sCisgICAgeyJBMyIsCQk4NDIuMCwgMTE5MS4wfSwKKyAgICB7IkE1IiwJCTQyMC4wLCAgNTk1LjB9LAorICAgIHsiQjQiLAkJNzI5LjAsIDEwMzIuMH0sCisgICAgeyJCNSIsCQk1MTYuMCwgIDcyOS4wfSwKKyAgICB7ImV4ZWN1dGl2ZSIsCTUyMi4wLCAgNzU2LjB9LAorICAgIHsiZm9saW8iLAkJNTk1LjAsICA5MzUuMH0sCisgICAgeyJsZWRnZXIiLAkgICAgICAgMTIyNC4wLCAgNzkyLjB9LCAgIC8qIFllcywgaXQgaXMgd2lkZXIgdGhhbiB0YWxsZXIhICovCisgICAgeyJsZWdhbCIsCQk2MTIuMCwgMTAwOC4wfSwKKyAgICB7InF1YXJ0byIsCQk2MTAuMCwgIDc4MC4wfSwKKyAgICB7InN0YXRlbWVudCIsCTM5Ni4wLCAgNjEyLjB9LAorICAgIHsidGFibG9pZCIsCQk3OTIuMCwgMTIyNC4wfQorfTsKKworLyogUFMgZm9udCBuYW1lcywgbXVzdCBiZSBpbiBSb21hbiwgQm9sZCwgSXRhbGljLCBCb2xkLUl0YWxpYyBvcmRlciAqLworc3RydWN0IHBydF9wc19mb250X1MKK3sKKyAgICBpbnQJCXd4OworICAgIGludAkJdWxpbmVfb2Zmc2V0OworICAgIGludAkJdWxpbmVfd2lkdGg7CisgICAgaW50CQliYm94X21pbl95OworICAgIGludAkJYmJveF9tYXhfeTsKKyAgICBjaGFyCSoocHNfZm9udG5hbWVbNF0pOworfTsKKworI2RlZmluZSBQUlRfUFNfRk9OVF9ST01BTgkoMCkKKyNkZWZpbmUgUFJUX1BTX0ZPTlRfQk9MRAkoMSkKKyNkZWZpbmUgUFJUX1BTX0ZPTlRfT0JMSVFVRQkoMikKKyNkZWZpbmUgUFJUX1BTX0ZPTlRfQk9MRE9CTElRVUUgKDMpCisKK3N0YXRpYyBzdHJ1Y3QgcHJ0X3BzX2ZvbnRfUyBwcnRfcHNfZm9udCA9Cit7CisgICAgNjAwLAorICAgIC0xMDAsIDUwLAorICAgIC0yNTAsIDgwNSwKKyAgICB7IkNvdXJpZXIiLCAiQ291cmllci1Cb2xkIiwgIkNvdXJpZXItT2JsaXF1ZSIsICJDb3VyaWVyLUJvbGRPYmxpcXVlIn0KK307CisKK3N0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUworeworICAgIGNoYXJfdSAgbmFtZVs2NF07CisgICAgY2hhcl91ICBmaWxlbmFtZVtNQVhQQVRITCArIDFdOworICAgIGludCAgICAgdHlwZTsKKyAgICBjaGFyX3UgIHRpdGxlWzI1Nl07CisgICAgY2hhcl91ICB2ZXJzaW9uWzI1Nl07Cit9OworCisvKiBUeXBlcyBvZiBQUyByZXNvdXJjZSBmaWxlIGN1cnJlbnRseSB1c2VkICovCisjZGVmaW5lIFBSVF9SRVNPVVJDRV9UWVBFX1BST0NTRVQgICAoMCkKKyNkZWZpbmUgUFJUX1JFU09VUkNFX1RZUEVfRU5DT0RJTkcgICgxKQorCisvKiBUaGUgUFMgcHJvbG9nIGZpbGUgdmVyc2lvbiBudW1iZXIgaGFzIHRvIG1hdGNoIC0gaWYgdGhlIHByb2xvZyBmaWxlIGlzCisgKiB1cGRhdGVkLCBpbmNyZW1lbnQgdGhlIG51bWJlciBpbiB0aGUgZmlsZSBhbmQgaGVyZS4gIFZlcnNpb24gY2hlY2tpbmcgd2FzCisgKiBhZGRlZCBhcyBvZiBWSU0gNi4yLgorICogVGFibGUgb2YgVklNIGFuZCBwcm9sb2cgdmVyc2lvbnM6CisgKgorICogVklNICAgICAgUHJvbG9nCisgKiA2LjIgICAgICAxLjMKKyAqLworI2RlZmluZSBQUlRfUFJPTE9HX1ZFUlNJT04gICgoY2hhcl91ICopIjEuMyIpCisKKy8qIFN0cmluZyB2ZXJzaW9ucyBvZiBQUyByZXNvdXJjZSB0eXBlcyAtIGluZGV4ZWQgYnkgY29uc3RhbnRzIGFib3ZlIHNvIGRvbid0CisgKiByZS1vcmRlciEKKyAqLworc3RhdGljIGNoYXIgKnJlc291cmNlX3R5cGVzW10gPQoreworICAgICJwcm9jc2V0IiwKKyAgICAiZW5jb2RpbmciCit9OworCisvKiBTdHJpbmdzIHRvIGxvb2sgZm9yIGluIGEgUFMgcmVzb3VyY2UgZmlsZSAqLworI2RlZmluZSBQUlRfUkVTT1VSQ0VfSEVBREVSCSAgICAiJSFQUy1BZG9iZS0iCisjZGVmaW5lIFBSVF9SRVNPVVJDRV9SRVNPVVJDRQkgICAgIlJlc291cmNlLSIKKyNkZWZpbmUgUFJUX1JFU09VUkNFX1BST0NTRVQJICAgICJQcm9jU2V0IgorI2RlZmluZSBQUlRfUkVTT1VSQ0VfRU5DT0RJTkcJICAgICJFbmNvZGluZyIKKyNkZWZpbmUgUFJUX1JFU09VUkNFX1RJVExFCSAgICAiJSVUaXRsZToiCisjZGVmaW5lIFBSVF9SRVNPVVJDRV9WRVJTSU9OCSAgICAiJSVWZXJzaW9uOiIKKworc3RhdGljIHZvaWQgcHJ0X3dyaXRlX2ZpbGVfcmF3X2xlbiBfX0FSR1MoKGNoYXJfdSAqYnVmZmVyLCBpbnQgYnl0ZXMpKTsKK3N0YXRpYyB2b2lkIHBydF93cml0ZV9maWxlIF9fQVJHUygoY2hhcl91ICpidWZmZXIpKTsKK3N0YXRpYyB2b2lkIHBydF93cml0ZV9maWxlX2xlbiBfX0FSR1MoKGNoYXJfdSAqYnVmZmVyLCBpbnQgYnl0ZXMpKTsKK3N0YXRpYyB2b2lkIHBydF93cml0ZV9zdHJpbmcgX19BUkdTKChjaGFyICpzKSk7CitzdGF0aWMgdm9pZCBwcnRfd3JpdGVfaW50IF9fQVJHUygoaW50IGkpKTsKK3N0YXRpYyB2b2lkIHBydF93cml0ZV9ib29sZWFuIF9fQVJHUygoaW50IGIpKTsKK3N0YXRpYyB2b2lkIHBydF9kZWZfZm9udCBfX0FSR1MoKGNoYXIgKm5ld19uYW1lLCBjaGFyICplbmNvZGluZywgaW50IGhlaWdodCwgY2hhciAqZm9udCkpOworc3RhdGljIHZvaWQgcHJ0X3JlYWxfYml0cyBfX0FSR1MoKGRvdWJsZSByZWFsLCBpbnQgcHJlY2lzaW9uLCBpbnQgKnBpbnRlZ2VyLCBpbnQgKnBmcmFjdGlvbikpOworc3RhdGljIHZvaWQgcHJ0X3dyaXRlX3JlYWwgX19BUkdTKChkb3VibGUgdmFsLCBpbnQgcHJlYykpOworc3RhdGljIHZvaWQgcHJ0X2RlZl92YXIgX19BUkdTKChjaGFyICpuYW1lLCBkb3VibGUgdmFsdWUsIGludCBwcmVjKSk7CitzdGF0aWMgdm9pZCBwcnRfZmx1c2hfYnVmZmVyIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgcHJ0X3Jlc291cmNlX25hbWUgX19BUkdTKChjaGFyX3UgKmZpbGVuYW1lKSk7CitzdGF0aWMgaW50IHBydF9maW5kX3Jlc291cmNlIF9fQVJHUygoY2hhciAqbmFtZSwgc3RydWN0IHBydF9wc19yZXNvdXJjZV9TICpyZXNvdXJjZSkpOworc3RhdGljIGludCBwcnRfb3Blbl9yZXNvdXJjZSBfX0FSR1MoKHN0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUyAqcmVzb3VyY2UpKTsKK3N0YXRpYyBpbnQgcHJ0X2NoZWNrX3Jlc291cmNlIF9fQVJHUygoc3RydWN0IHBydF9wc19yZXNvdXJjZV9TICpyZXNvdXJjZSwgY2hhcl91ICp2ZXJzaW9uKSk7CitzdGF0aWMgdm9pZCBwcnRfZHNjX3N0YXJ0IF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgcHJ0X2RzY19ub2FyZyBfX0FSR1MoKGNoYXIgKmNvbW1lbnQpKTsKK3N0YXRpYyB2b2lkIHBydF9kc2NfdGV4dGxpbmUgX19BUkdTKChjaGFyICpjb21tZW50LCBjaGFyICp0ZXh0KSk7CitzdGF0aWMgdm9pZCBwcnRfZHNjX3RleHQgX19BUkdTKChjaGFyICpjb21tZW50LCBjaGFyICp0ZXh0KSk7CitzdGF0aWMgdm9pZCBwcnRfZHNjX2ludHMgX19BUkdTKChjaGFyICpjb21tZW50LCBpbnQgY291bnQsIGludCAqaW50cykpOworc3RhdGljIHZvaWQgcHJ0X2RzY19yZXF1aXJlbWVudHMgX19BUkdTKChpbnQgZHVwbGV4LCBpbnQgdHVtYmxlLCBpbnQgY29sbGF0ZSwgaW50IGNvbG9yLCBpbnQgbnVtX2NvcGllcykpOworc3RhdGljIHZvaWQgcHJ0X2RzY19kb2NtZWRpYSBfX0FSR1MoKGNoYXIgKnBhcGVyX25hbWUsIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCwgZG91YmxlIHdlaWdodCwgY2hhciAqY29sb3VyLCBjaGFyICp0eXBlKSk7CitzdGF0aWMgdm9pZCBwcnRfZHNjX3Jlc291cmNlcyBfX0FSR1MoKGNoYXIgKmNvbW1lbnQsIGNoYXIgKnR5cGUsIGludCBjb3VudCwgY2hhciAqKnN0cmluZ3MpKTsKK3N0YXRpYyBmbG9hdCB0b19kZXZpY2VfdW5pdHMgX19BUkdTKChpbnQgaWR4LCBkb3VibGUgcGh5c3NpemUsIGludCBkZWZfbnVtYmVyKSk7CitzdGF0aWMgdm9pZCBwcnRfcGFnZV9tYXJnaW5zIF9fQVJHUygoZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0LCBkb3VibGUgKmxlZnQsIGRvdWJsZSAqcmlnaHQsIGRvdWJsZSAqdG9wLCBkb3VibGUgKmJvdHRvbSkpOworc3RhdGljIHZvaWQgcHJ0X2ZvbnRfbWV0cmljcyBfX0FSR1MoKGludCBmb250X3NjYWxlKSk7CitzdGF0aWMgaW50IHBydF9nZXRfY3BsIF9fQVJHUygodm9pZCkpOworc3RhdGljIGludCBwcnRfZ2V0X2xwcCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQgcHJ0X2FkZF9yZXNvdXJjZSBfX0FSR1MoKHN0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUyAqcmVzb3VyY2UpKTsKKworLyoKKyAqIFZhcmlhYmxlcyBmb3IgdGhlIG91dHB1dCBQb3N0U2NyaXB0IGZpbGUuCisgKi8KK3N0YXRpYyBGSUxFICpwcnRfcHNfZmQ7CitzdGF0aWMgaW50IHBydF9maWxlX2Vycm9yOworc3RhdGljIGNoYXJfdSAqcHJ0X3BzX2ZpbGVfbmFtZSA9IE5VTEw7CisKKy8qCisgKiBWYXJpb3VzIG9mZnNldHMgYW5kIGRpbWVuc2lvbnMgaW4gZGVmYXVsdCBQb3N0U2NyaXB0IHVzZXIgc3BhY2UgKHBvaW50cykuCisgKiBVc2VkIGZvciB0ZXh0IHBvc2l0aW9uaW5nIGNhbGN1bGF0aW9ucworICovCitzdGF0aWMgZmxvYXQgcHJ0X3BhZ2Vfd2lkdGg7CitzdGF0aWMgZmxvYXQgcHJ0X3BhZ2VfaGVpZ2h0Oworc3RhdGljIGZsb2F0IHBydF9sZWZ0X21hcmdpbjsKK3N0YXRpYyBmbG9hdCBwcnRfcmlnaHRfbWFyZ2luOworc3RhdGljIGZsb2F0IHBydF90b3BfbWFyZ2luOworc3RhdGljIGZsb2F0IHBydF9ib3R0b21fbWFyZ2luOworc3RhdGljIGZsb2F0IHBydF9saW5lX2hlaWdodDsKK3N0YXRpYyBmbG9hdCBwcnRfZmlyc3RfbGluZV9oZWlnaHQ7CitzdGF0aWMgZmxvYXQgcHJ0X2NoYXJfd2lkdGg7CitzdGF0aWMgZmxvYXQgcHJ0X251bWJlcl93aWR0aDsKK3N0YXRpYyBmbG9hdCBwcnRfYmdjb2xfb2Zmc2V0Oworc3RhdGljIGZsb2F0IHBydF9wb3NfeF9tb3ZldG8gPSAwLjA7CitzdGF0aWMgZmxvYXQgcHJ0X3Bvc195X21vdmV0byA9IDAuMDsKKworLyoKKyAqIFZhcmlvdXMgY29udHJvbCB2YXJpYWJsZXMgdXNlZCB0byBkZWNpZGUgd2hlbiBhbmQgaG93IHRvIGNoYW5nZSB0aGUKKyAqIFBvc3RTY3JpcHQgZ3JhcGhpY3Mgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgcHJ0X25lZWRfbW92ZXRvOworc3RhdGljIGludCBwcnRfZG9fbW92ZXRvOworc3RhdGljIGludCBwcnRfbmVlZF9mb250Oworc3RhdGljIGludCBwcnRfZm9udDsKK3N0YXRpYyBpbnQgcHJ0X25lZWRfdW5kZXJsaW5lOworc3RhdGljIGludCBwcnRfdW5kZXJsaW5lOworc3RhdGljIGludCBwcnRfZG9fdW5kZXJsaW5lOworc3RhdGljIGludCBwcnRfbmVlZF9mZ2NvbDsKK3N0YXRpYyBpbnQgcHJ0X2ZnY29sOworc3RhdGljIGludCBwcnRfbmVlZF9iZ2NvbDsKK3N0YXRpYyBpbnQgcHJ0X2RvX2JnY29sOworc3RhdGljIGludCBwcnRfYmdjb2w7CitzdGF0aWMgaW50IHBydF9uZXdfYmdjb2w7CitzdGF0aWMgaW50IHBydF9hdHRyaWJ1dGVfY2hhbmdlOworc3RhdGljIGludCBwcnRfdGV4dF9jb3VudDsKK3N0YXRpYyBpbnQgcHJ0X3BhZ2VfbnVtOworCisvKgorICogVmFyaWFibGVzIGNvbnRyb2xsaW5nIHBoeXNpY2FsIHByaW50aW5nLgorICovCitzdGF0aWMgaW50IHBydF9tZWRpYTsKK3N0YXRpYyBpbnQgcHJ0X3BvcnRyYWl0Oworc3RhdGljIGludCBwcnRfbnVtX2NvcGllczsKK3N0YXRpYyBpbnQgcHJ0X2R1cGxleDsKK3N0YXRpYyBpbnQgcHJ0X3R1bWJsZTsKK3N0YXRpYyBpbnQgcHJ0X2NvbGxhdGU7CisKKy8qCisgKiBCdWZmZXJzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIFBvc3RTY3JpcHQgb3V0cHV0CisgKi8KK3N0YXRpYyBjaGFyX3UgcHJ0X2xpbmVfYnVmZmVyWzI1N107CitzdGF0aWMgZ2FycmF5X1QgcHJ0X3BzX2J1ZmZlcjsKKworIyBpZmRlZiBGRUFUX01CWVRFCitzdGF0aWMgaW50IHBydF9kb19jb252Oworc3RhdGljIHZpbWNvbnZfVCBwcnRfY29udjsKKyMgZW5kaWYKKworICAgIHN0YXRpYyB2b2lkCitwcnRfd3JpdGVfZmlsZV9yYXdfbGVuKGJ1ZmZlciwgYnl0ZXMpCisgICAgY2hhcl91CSpidWZmZXI7CisgICAgaW50CQlieXRlczsKK3sKKyAgICBpZiAoIXBydF9maWxlX2Vycm9yCisJICAgICYmIGZ3cml0ZShidWZmZXIsIHNpemVvZihjaGFyX3UpLCBieXRlcywgcHJ0X3BzX2ZkKQorCQkJCQkJCSAgICAgIT0gKHNpemVfdClieXRlcykKKyAgICB7CisJRU1TRyhfKCJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiKSk7CisJcHJ0X2ZpbGVfZXJyb3IgPSBUUlVFOworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitwcnRfd3JpdGVfZmlsZShidWZmZXIpCisgICAgY2hhcl91CSpidWZmZXI7Cit7CisgICAgcHJ0X3dyaXRlX2ZpbGVfbGVuKGJ1ZmZlciwgU1RSTEVOKGJ1ZmZlcikpOworfQorCisgICAgc3RhdGljIHZvaWQKK3BydF93cml0ZV9maWxlX2xlbihidWZmZXIsIGJ5dGVzKQorICAgIGNoYXJfdQkqYnVmZmVyOworICAgIGludAkJYnl0ZXM7Cit7CisjaWZkZWYgRUJDRElDCisgICAgZWJjZGljMmFzY2lpKGJ1ZmZlciwgYnl0ZXMpOworI2VuZGlmCisgICAgcHJ0X3dyaXRlX2ZpbGVfcmF3X2xlbihidWZmZXIsIGJ5dGVzKTsKK30KKworLyoKKyAqIFdyaXRlIGEgc3RyaW5nLgorICovCisgICAgc3RhdGljIHZvaWQKK3BydF93cml0ZV9zdHJpbmcocykKKyAgICBjaGFyCSpzOworeworICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlcyIsIHMpOworICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7Cit9CisKKy8qCisgKiBXcml0ZSBhbiBpbnQgYW5kIGEgc3BhY2UuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcHJ0X3dyaXRlX2ludChpKQorICAgIGludAkJaTsKK3sKKyAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJWQgIiwgaSk7CisgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKK30KKworLyoKKyAqIFdyaXRlIGEgYm9vbGVhbiBhbmQgYSBzcGFjZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitwcnRfd3JpdGVfYm9vbGVhbihiKQorICAgIGludAkJYjsKK3sKKyAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJXMgIiwgKGIgPyAiVCIgOiAiRiIpKTsKKyAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOworfQorCisvKgorICogV3JpdGUgYSBsaW5lIHRvIGRlZmluZSB0aGUgZm9udC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitwcnRfZGVmX2ZvbnQobmV3X25hbWUsIGVuY29kaW5nLCBoZWlnaHQsIGZvbnQpCisgICAgY2hhcgkqbmV3X25hbWU7CisgICAgY2hhcgkqZW5jb2Rpbmc7CisgICAgaW50CQloZWlnaHQ7CisgICAgY2hhcgkqZm9udDsKK3sKKyAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiL18lcyAvVklNLSVzIC8lcyByZWZcbiIsIG5ld19uYW1lLCBlbmNvZGluZywgZm9udCk7CisgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKKyAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiLyVzICVkIC9fJXMgZmZzXG4iLAorCQkJCQkJICAgIG5ld19uYW1lLCBoZWlnaHQsIG5ld19uYW1lKTsKKyAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOworfQorCisvKgorICogQ29udmVydCBhIHJlYWwgdmFsdWUgaW50byBhbiBpbnRlZ2VyIGFuZCBmcmFjdGlvbmFsIHBhcnQgYXMgaW50ZWdlcnMsIHdpdGgKKyAqIHRoZSBmcmFjdGlvbmFsIHBhcnQgYmVpbmcgaW4gdGhlIHJhbmdlIFswLDEwXnByZWNpc2lvbikuICBUaGUgZnJhY3Rpb25hbCBwYXJ0CisgKiBpcyBhbHNvIHJvdW5kZWQgYmFzZWQgb24gdGhlIHByZWNpc2lvbiArIDEndGggZnJhY3Rpb25hbCBkaWdpdC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitwcnRfcmVhbF9iaXRzKHJlYWwsIHByZWNpc2lvbiwgcGludGVnZXIsIHBmcmFjdGlvbikKKyAgICBkb3VibGUgICAgICByZWFsOworICAgIGludAkJcHJlY2lzaW9uOworICAgIGludAkJKnBpbnRlZ2VyOworICAgIGludAkJKnBmcmFjdGlvbjsKK3sKKyAgICBpbnQgICAgIGk7CisgICAgaW50ICAgICBpbnRlZ2VyOworICAgIGZsb2F0ICAgZnJhY3Rpb247CisKKyAgICBpbnRlZ2VyID0gKGludClyZWFsOworICAgIGZyYWN0aW9uID0gKGZsb2F0KShyZWFsIC0gaW50ZWdlcik7CisgICAgaWYgKHJlYWwgPCAoZG91YmxlKWludGVnZXIpCisJZnJhY3Rpb24gPSAtZnJhY3Rpb247CisgICAgZm9yIChpID0gMDsgaSA8IHByZWNpc2lvbjsgaSsrKQorCWZyYWN0aW9uICo9IDEwLjA7CisKKyAgICAqcGludGVnZXIgPSBpbnRlZ2VyOworICAgICpwZnJhY3Rpb24gPSAoaW50KShmcmFjdGlvbiArIDAuNSk7Cit9CisKKy8qCisgKiBXcml0ZSBhIHJlYWwgYW5kIGEgc3BhY2UuICBTYXZlIGJ5dGVzIGlmIHJlYWwgdmFsdWUgaGFzIG5vIGZyYWN0aW9uYWwgcGFydCEKKyAqIFdlIHVzZSBwcnRfcmVhbF9iaXRzKCkgYXMgJWYgaW4gc3ByaW50ZiB1c2VzIHRoZSBsb2NhbGUgc2V0dGluZyB0byBkZWNpZGUKKyAqIHdoYXQgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIgdG8gdXNlLCBidXQgUFMgYWx3YXlzIHJlcXVpcmVzIGEgJy4nLgorICovCisgICAgc3RhdGljIHZvaWQKK3BydF93cml0ZV9yZWFsKHZhbCwgcHJlYykKKyAgICBkb3VibGUJdmFsOworICAgIGludAkJcHJlYzsKK3sKKyAgICBpbnQgICAgIGludGVnZXI7CisgICAgaW50ICAgICBmcmFjdGlvbjsKKworICAgIHBydF9yZWFsX2JpdHModmFsLCBwcmVjLCAmaW50ZWdlciwgJmZyYWN0aW9uKTsKKyAgICAvKiBFbWl0IGludGVnZXIgcGFydCAqLworICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlZCIsIGludGVnZXIpOworICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CisgICAgLyogT25seSBlbWl0IGZyYWN0aW9uIGlmIG5lY2Vzc2FyeSAqLworICAgIGlmIChmcmFjdGlvbiAhPSAwKQorICAgIHsKKwkvKiBSZW1vdmUgYW55IHRyYWlsaW5nIHplcm9zICovCisJd2hpbGUgKChmcmFjdGlvbiAlIDEwKSA9PSAwKQorCXsKKwkgICAgcHJlYy0tOworCSAgICBmcmFjdGlvbiAvPSAxMDsKKwl9CisJLyogRW1pdCBmcmFjdGlvbiBsZWZ0IHBhZGRlZCB3aXRoIHplcm9zICovCisJc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIi4lMCpkIiwgcHJlYywgZnJhY3Rpb24pOworCXBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CisgICAgfQorICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIgIik7CisgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKK30KKworLyoKKyAqIFdyaXRlIGEgbGluZSB0byBkZWZpbmUgYSBudW1lcmljIHZhcmlhYmxlLgorICovCisgICAgc3RhdGljIHZvaWQKK3BydF9kZWZfdmFyKG5hbWUsIHZhbHVlLCBwcmVjKQorICAgIGNoYXIJKm5hbWU7CisgICAgZG91YmxlCXZhbHVlOworICAgIGludAkJcHJlYzsKK3sKKyAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiLyVzICIsIG5hbWUpOworICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CisgICAgcHJ0X3dyaXRlX3JlYWwodmFsdWUsIHByZWMpOworICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICJkXG4iKTsKKyAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOworfQorCisvKiBDb252ZXJ0IHNpemUgZnJvbSBmb250IHNwYWNlIHRvIHVzZXIgc3BhY2UgYXQgY3VycmVudCBmb250IHNjYWxlICovCisjZGVmaW5lIFBSVF9QU19GT05UX1RPX1VTRVIoc2NhbGUsIHNpemUpICAgICgoc2l6ZSkgKiAoKHNjYWxlKS8xMDAwLjApKQorCisgICAgc3RhdGljIHZvaWQKK3BydF9mbHVzaF9idWZmZXIoKQoreworICAgIGlmIChwcnRfcHNfYnVmZmVyLmdhX2xlbiA+IDApCisgICAgeworCS8qIEFueSBiYWNrZ3JvdW5kIGNvbG9yIG11c3QgYmUgZHJhd24gZmlyc3QgKi8KKwlpZiAocHJ0X2RvX2JnY29sICYmIChwcnRfbmV3X2JnY29sICE9IFBSQ09MT1JfV0hJVEUpKQorCXsKKwkgICAgaW50ICAgICByLCBnLCBiOworCisJICAgIGlmIChwcnRfZG9fbW92ZXRvKQorCSAgICB7CisJCXBydF93cml0ZV9yZWFsKHBydF9wb3NfeF9tb3ZldG8sIDIpOworCQlwcnRfd3JpdGVfcmVhbChwcnRfcG9zX3lfbW92ZXRvLCAyKTsKKwkJcHJ0X3dyaXRlX3N0cmluZygibVxuIik7CisJCXBydF9kb19tb3ZldG8gPSBGQUxTRTsKKwkgICAgfQorCisJICAgIC8qIFNpemUgb2YgcmVjdCBvZiBiYWNrZ3JvdW5kIGNvbG9yIG9uIHdoaWNoIHRleHQgaXMgcHJpbnRlZCAqLworCSAgICBwcnRfd3JpdGVfcmVhbChwcnRfdGV4dF9jb3VudCAqIHBydF9jaGFyX3dpZHRoLCAyKTsKKwkgICAgcHJ0X3dyaXRlX3JlYWwocHJ0X2xpbmVfaGVpZ2h0LCAyKTsKKworCSAgICAvKiBMYXN0bHkgYWRkIHRoZSBjb2xvciBvZiB0aGUgYmFja2dyb3VuZCAqLworCSAgICByID0gKCh1bnNpZ25lZClwcnRfbmV3X2JnY29sICYgMHhmZjAwMDApID4+IDE2OworCSAgICBnID0gKCh1bnNpZ25lZClwcnRfbmV3X2JnY29sICYgMHhmZjAwKSA+PiA4OworCSAgICBiID0gcHJ0X25ld19iZ2NvbCAmIDB4ZmY7CisJICAgIHBydF93cml0ZV9yZWFsKHIgLyAyNTUuMCwgMyk7CisJICAgIHBydF93cml0ZV9yZWFsKGcgLyAyNTUuMCwgMyk7CisJICAgIHBydF93cml0ZV9yZWFsKGIgLyAyNTUuMCwgMyk7CisJICAgIHBydF93cml0ZV9zdHJpbmcoImJnXG4iKTsKKwl9CisJLyogRHJhdyB1bmRlcmxpbmVzIGJlZm9yZSB0aGUgdGV4dCBhcyBpdCBtYWtlcyBpdCBzbGlnaHRseSBlYXNpZXIgdG8KKwkgKiBmaW5kIHRoZSBzdGFydGluZyBwb2ludC4KKwkgKi8KKwlpZiAocHJ0X2RvX3VuZGVybGluZSkKKwl7CisJICAgIGlmIChwcnRfZG9fbW92ZXRvKQorCSAgICB7CisJCXBydF93cml0ZV9yZWFsKHBydF9wb3NfeF9tb3ZldG8sIDIpOworCQlwcnRfd3JpdGVfcmVhbChwcnRfcG9zX3lfbW92ZXRvLCAyKTsKKwkJcHJ0X3dyaXRlX3N0cmluZygibVxuIik7CisJCXBydF9kb19tb3ZldG8gPSBGQUxTRTsKKwkgICAgfQorCisJICAgIC8qIFVuZGVybGluaW5nIGlzIGVhc3kgLSBqdXN0IG5lZWQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvCisJICAgICAqIHByaW50LiAqLworCSAgICBwcnRfd3JpdGVfcmVhbChwcnRfdGV4dF9jb3VudCAqIHBydF9jaGFyX3dpZHRoLCAyKTsKKwkgICAgcHJ0X3dyaXRlX3N0cmluZygidWxcbiIpOworCX0KKwkvKiBEcmF3IHRoZSB0ZXh0CisJICogTm90ZTogd2Ugd3JpdGUgdGV4dCBvdXQgcmF3IC0gRUJDRElDIGNvbnZlcnNpb24gaXMgaGFuZGxlZCBpbiB0aGUKKwkgKiBQb3N0U2NyaXB0IHdvcmxkIHZpYSB0aGUgZm9udCBlbmNvZGluZyB2ZWN0b3IuICovCisJcHJ0X3dyaXRlX3N0cmluZygiKCIpOworCXBydF93cml0ZV9maWxlX3Jhd19sZW4ocHJ0X3BzX2J1ZmZlci5nYV9kYXRhLCBwcnRfcHNfYnVmZmVyLmdhX2xlbik7CisJcHJ0X3dyaXRlX3N0cmluZygiKSIpOworCS8qIEFkZCBhIG1vdmV0byBpZiBuZWVkIGJlIGFuZCB1c2UgdGhlIGFwcHJvcHJpYXRlIHNob3cgcHJvY2VkdXJlICovCisJaWYgKHBydF9kb19tb3ZldG8pCisJeworCSAgICBwcnRfd3JpdGVfcmVhbChwcnRfcG9zX3hfbW92ZXRvLCAyKTsKKwkgICAgcHJ0X3dyaXRlX3JlYWwocHJ0X3Bvc195X21vdmV0bywgMik7CisJICAgIC8qIG1vdmV0byBhbmQgYSBzaG93ICovCisJICAgIHBydF93cml0ZV9zdHJpbmcoIm1zXG4iKTsKKwkgICAgcHJ0X2RvX21vdmV0byA9IEZBTFNFOworCX0KKwllbHNlIC8qIFNpbXBsZSBzaG93ICovCisJICAgIHBydF93cml0ZV9zdHJpbmcoInNcbiIpOworCisJZ2FfY2xlYXIoJnBydF9wc19idWZmZXIpOworCWdhX2luaXQyKCZwcnRfcHNfYnVmZmVyLCAoaW50KXNpemVvZihjaGFyKSwgUFJUX1BTX0RFRkFVTFRfQlVGRkVSX1NJWkUpOworICAgIH0KK30KKworc3RhdGljIGNoYXJfdSAqcmVzb3VyY2VfZmlsZW5hbWU7CisKKyAgICBzdGF0aWMgdm9pZAorcHJ0X3Jlc291cmNlX25hbWUoZmlsZW5hbWUpCisgICAgY2hhcl91ICAqZmlsZW5hbWU7Cit7CisgICAgaWYgKFNUUkxFTihmaWxlbmFtZSkgPj0gTUFYUEFUSEwpCisJKnJlc291cmNlX2ZpbGVuYW1lID0gTlVMOworICAgIGVsc2UKKwlTVFJDUFkocmVzb3VyY2VfZmlsZW5hbWUsIGZpbGVuYW1lKTsKK30KKworICAgIHN0YXRpYyBpbnQKK3BydF9maW5kX3Jlc291cmNlKG5hbWUsIHJlc291cmNlKQorICAgIGNoYXIJKm5hbWU7CisgICAgc3RydWN0IHBydF9wc19yZXNvdXJjZV9TICpyZXNvdXJjZTsKK3sKKyAgICBjaGFyX3UJYnVmZmVyW01BWFBBVEhMICsgMV07CisKKyAgICBTVFJDUFkocmVzb3VyY2UtPm5hbWUsIG5hbWUpOworICAgIC8qIExvb2sgZm9yIG5hbWVkIHJlc291cmNlIGZpbGUgaW4gcnVudGltZXBhdGggKi8KKyAgICBTVFJDUFkoYnVmZmVyLCAicHJpbnQiKTsKKyAgICBhZGRfcGF0aHNlcChidWZmZXIpOworICAgIFNUUkNBVChidWZmZXIsIG5hbWUpOworICAgIFNUUkNBVChidWZmZXIsICIucHMiKTsKKyAgICByZXNvdXJjZV9maWxlbmFtZSA9IHJlc291cmNlLT5maWxlbmFtZTsKKyAgICAqcmVzb3VyY2VfZmlsZW5hbWUgPSBOVUw7CisgICAgcmV0dXJuIChkb19pbl9ydW50aW1lcGF0aChidWZmZXIsIEZBTFNFLCBwcnRfcmVzb3VyY2VfbmFtZSkKKwkgICAgJiYgcmVzb3VyY2UtPmZpbGVuYW1lWzBdICE9IE5VTCk7Cit9CisKKy8qIFBTIENSIGFuZCBMRiBjaGFyYWN0ZXJzIGhhdmUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgdmFsdWVzICovCisjZGVmaW5lIFBTTEYgICgweDBhKQorI2RlZmluZSBQU0NSICAoMHgwZCkKKworLyogVmVyeSBzaW1wbGUgaGFuZCBjcmFmdGVkIHBhcnNlciB0byBnZXQgdGhlIHR5cGUsIHRpdGxlLCBhbmQgdmVyc2lvbiBudW1iZXIgb2YKKyAqIGEgUFMgcmVzb3VyY2UgZmlsZSBzbyB0aGUgZmlsZSBkZXRhaWxzIGNhbiBiZSBhZGRlZCB0byB0aGUgRFNDIGhlYWRlcgorICogY29tbWVudHMuICovCisgICAgc3RhdGljIGludAorcHJ0X29wZW5fcmVzb3VyY2UocmVzb3VyY2UpCisgICAgc3RydWN0IHBydF9wc19yZXNvdXJjZV9TICpyZXNvdXJjZTsKK3sKKyAgICBGSUxFCSpmZF9yZXNvdXJjZTsKKyAgICBjaGFyX3UJYnVmZmVyWzEyOF07CisgICAgY2hhcl91CSpjaCA9IGJ1ZmZlcjsKKyAgICBjaGFyX3UJKmNoMjsKKworICAgIGZkX3Jlc291cmNlID0gbWNoX2ZvcGVuKChjaGFyICopcmVzb3VyY2UtPmZpbGVuYW1lLCBSRUFEQklOKTsKKyAgICBpZiAoZmRfcmVzb3VyY2UgPT0gTlVMTCkKKyAgICB7CisJRU1TRzIoXygiRTYyNDogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIpLCByZXNvdXJjZS0+ZmlsZW5hbWUpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisgICAgdmltX21lbXNldChidWZmZXIsIE5VTCwgc2l6ZW9mKGJ1ZmZlcikpOworCisgICAgLyogUGFyc2UgZmlyc3QgbGluZSB0byBlbnN1cmUgdmFsaWQgcmVzb3VyY2UgZmlsZSAqLworICAgICh2b2lkKWZyZWFkKChjaGFyICopYnVmZmVyLCBzaXplb2YoY2hhcl91KSwgc2l6ZW9mKGJ1ZmZlciksCisJCQkJCQkJCSBmZF9yZXNvdXJjZSk7CisgICAgaWYgKGZlcnJvcihmZF9yZXNvdXJjZSkpCisgICAgeworCUVNU0cyKF8oIkU0NTc6IENhbid0IHJlYWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXNcIiIpLAorCQlyZXNvdXJjZS0+ZmlsZW5hbWUpOworCWZjbG9zZShmZF9yZXNvdXJjZSk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChTVFJOQ01QKGNoLCBQUlRfUkVTT1VSQ0VfSEVBREVSLCBTVFJMRU4oUFJUX1JFU09VUkNFX0hFQURFUikpICE9IDApCisgICAgeworCUVNU0cyKF8oIkU2MTg6IGZpbGUgXCIlc1wiIGlzIG5vdCBhIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIpLAorCQlyZXNvdXJjZS0+ZmlsZW5hbWUpOworCWZjbG9zZShmZF9yZXNvdXJjZSk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIC8qIFNraXAgb3ZlciBhbnkgdmVyc2lvbiBudW1iZXJzIGFuZCBmb2xsb3dpbmcgd3MgKi8KKyAgICBjaCArPSBTVFJMRU4oUFJUX1JFU09VUkNFX0hFQURFUik7CisgICAgd2hpbGUgKCFpc3NwYWNlKCpjaCkpCisJY2grKzsKKyAgICB3aGlsZSAoaXNzcGFjZSgqY2gpKQorCWNoKys7CisKKyAgICBpZiAoU1RSTkNNUChjaCwgUFJUX1JFU09VUkNFX1JFU09VUkNFLCBTVFJMRU4oUFJUX1JFU09VUkNFX1JFU09VUkNFKSkgIT0gMCkKKyAgICB7CisJRU1TRzIoXygiRTYxOTogZmlsZSBcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIpLAorCQlyZXNvdXJjZS0+ZmlsZW5hbWUpOworCWZjbG9zZShmZF9yZXNvdXJjZSk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBjaCArPSBTVFJMRU4oUFJUX1JFU09VUkNFX1JFU09VUkNFKTsKKworICAgIC8qIERlY2lkZSB0eXBlIG9mIHJlc291cmNlIGluIHRoZSBmaWxlICovCisgICAgaWYgKFNUUk5DTVAoY2gsIFBSVF9SRVNPVVJDRV9QUk9DU0VULCBTVFJMRU4oUFJUX1JFU09VUkNFX1BST0NTRVQpKSA9PSAwKQorICAgIHsKKwlyZXNvdXJjZS0+dHlwZSA9IFBSVF9SRVNPVVJDRV9UWVBFX1BST0NTRVQ7CisJY2ggKz0gU1RSTEVOKFBSVF9SRVNPVVJDRV9QUk9DU0VUKTsKKyAgICB9CisgICAgZWxzZSBpZiAoU1RSTkNNUChjaCwgUFJUX1JFU09VUkNFX0VOQ09ESU5HLCBTVFJMRU4oUFJUX1JFU09VUkNFX0VOQ09ESU5HKSkgPT0gMCkKKyAgICB7CisJcmVzb3VyY2UtPnR5cGUgPSBQUlRfUkVTT1VSQ0VfVFlQRV9FTkNPRElORzsKKwljaCArPSBTVFJMRU4oUFJUX1JFU09VUkNFX0VOQ09ESU5HKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlFTVNHMihfKCJFNjE5OiBmaWxlIFwiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIiksCisJCXJlc291cmNlLT5maWxlbmFtZSk7CisJZmNsb3NlKGZkX3Jlc291cmNlKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLyogQ29uc3VtZSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBDUi9MRi9DUl9MRiAqLworICAgIHdoaWxlICgqY2ggIT0gUFNDUiAmJiAqY2ggIT0gUFNMRikKKwljaCsrOworICAgIHdoaWxlICgqY2ggPT0gUFNDUiB8fCAqY2ggPT0gUFNMRikKKwljaCsrOworCisgICAgLyogTWF0Y2ggJSVUaXRsZTogKi8KKyAgICBpZiAoU1RSTkNNUChjaCwgUFJUX1JFU09VUkNFX1RJVExFLCBTVFJMRU4oUFJUX1JFU09VUkNFX1RJVExFKSkgIT0gMCkKKyAgICB7CisJRU1TRzIoXygiRTYxOTogZmlsZSBcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIpLAorCQlyZXNvdXJjZS0+ZmlsZW5hbWUpOworCWZjbG9zZShmZF9yZXNvdXJjZSk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBjaCArPSBTVFJMRU4oUFJUX1JFU09VUkNFX1RJVExFKTsKKworICAgIC8qIFNraXAgd3MgYWZ0ZXIgJSVUaXRsZTogKi8KKyAgICB3aGlsZSAoaXNzcGFjZSgqY2gpKQorCWNoKys7CisKKyAgICAvKiBDb3B5IHVwIHRvIHRoZSBDUi9MRi9DUl9MRiAqLworICAgIGNoMiA9IHJlc291cmNlLT50aXRsZTsKKyAgICB3aGlsZSAoKmNoICE9IFBTQ1IgJiYgKmNoICE9IFBTTEYpCisJKmNoMisrID0gKmNoKys7CisgICAgKmNoMiA9ICdcMCc7CisgICAgd2hpbGUgKCpjaCA9PSBQU0NSIHx8ICpjaCA9PSBQU0xGKQorCWNoKys7CisKKyAgICAvKiBNYXRjaCAlJVZlcnNpb246ICovCisgICAgaWYgKFNUUk5DTVAoY2gsIFBSVF9SRVNPVVJDRV9WRVJTSU9OLCBTVFJMRU4oUFJUX1JFU09VUkNFX1ZFUlNJT04pKSAhPSAwKQorICAgIHsKKwlFTVNHMihfKCJFNjE5OiBmaWxlIFwiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIiksCisJCXJlc291cmNlLT5maWxlbmFtZSk7CisJZmNsb3NlKGZkX3Jlc291cmNlKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGNoICs9IFNUUkxFTihQUlRfUkVTT1VSQ0VfVkVSU0lPTik7CisKKyAgICAvKiBTa2lwIHdzIGFmdGVyICUlVmVyc2lvbjogKi8KKyAgICB3aGlsZSAoaXNzcGFjZSgqY2gpKQorCWNoKys7CisKKyAgICAvKiBDb3B5IHVwIHRvIHRoZSBDUi9MRi9DUl9MRiAqLworICAgIGNoMiA9IHJlc291cmNlLT52ZXJzaW9uOworICAgIHdoaWxlICgqY2ggIT0gUFNDUiAmJiAqY2ggIT0gUFNMRikKKwkqY2gyKysgPSAqY2grKzsKKyAgICAqY2gyID0gJ1wwJzsKKworICAgIGZjbG9zZShmZF9yZXNvdXJjZSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworICAgIHN0YXRpYyBpbnQKK3BydF9jaGVja19yZXNvdXJjZShyZXNvdXJjZSwgdmVyc2lvbikKKyAgICBzdHJ1Y3QgcHJ0X3BzX3Jlc291cmNlX1MgKnJlc291cmNlOworICAgIGNoYXJfdSAgKnZlcnNpb247Cit7CisgICAgLyogVmVyc2lvbiBudW1iZXIgbS5uIHNob3VsZCBtYXRjaCwgdGhlIHJldmlzaW9uIG51bWJlciBkb2VzIG5vdCBtYXR0ZXIgKi8KKyAgICBpZiAoU1RSTkNNUChyZXNvdXJjZS0+dmVyc2lvbiwgdmVyc2lvbiwgU1RSTEVOKHZlcnNpb24pKSkKKyAgICB7CisJRU1TRzIoXygiRTYyMTogXCIlc1wiIHJlc291cmNlIGZpbGUgaGFzIHdyb25nIHZlcnNpb24iKSwKKwkJcmVzb3VyY2UtPm5hbWUpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICAvKiBPdGhlciBjaGVja3MgdG8gYmUgYWRkZWQgYXMgbmVlZGVkICovCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcHJ0X2RzY19zdGFydCgpCit7CisgICAgcHJ0X3dyaXRlX3N0cmluZygiJSFQUy1BZG9iZS0zLjBcbiIpOworfQorCisgICAgc3RhdGljIHZvaWQKK3BydF9kc2Nfbm9hcmcoY29tbWVudCkKKyAgICBjaGFyCSpjb21tZW50OworeworICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlJSUlJXNcbiIsIGNvbW1lbnQpOworICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcHJ0X2RzY190ZXh0bGluZShjb21tZW50LCB0ZXh0KQorICAgIGNoYXIJKmNvbW1lbnQ7CisgICAgY2hhcgkqdGV4dDsKK3sKKyAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJSUlJSVzOiAlc1xuIiwgY29tbWVudCwgdGV4dCk7CisgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitwcnRfZHNjX3RleHQoY29tbWVudCwgdGV4dCkKKyAgICBjaGFyCSpjb21tZW50OworICAgIGNoYXIJKnRleHQ7Cit7CisgICAgLyogVE9ETyAtIHNob3VsZCBzY2FuICd0ZXh0JyBmb3IgYW55IGNoYXJzIG5lZWRpbmcgZXNjYXBpbmchICovCisgICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIiUlJSUlczogKCVzKVxuIiwgY29tbWVudCwgdGV4dCk7CisgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKK30KKworI2RlZmluZSBwcnRfZHNjX2F0ZW5kKGMpCXBydF9kc2NfdGV4dCgoYyksICJhdGVuZCIpCisKKyAgICBzdGF0aWMgdm9pZAorcHJ0X2RzY19pbnRzKGNvbW1lbnQsIGNvdW50LCBpbnRzKQorICAgIGNoYXIJKmNvbW1lbnQ7CisgICAgaW50CQljb3VudDsKKyAgICBpbnQJCSppbnRzOworeworICAgIGludAkJaTsKKworICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlJSUlJXM6IiwgY29tbWVudCk7CisgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKwlzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiICVkIiwgaW50c1tpXSk7CisJcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKKyAgICB9CisKKyAgICBwcnRfd3JpdGVfc3RyaW5nKCJcbiIpOworfQorCisgICAgc3RhdGljIHZvaWQKK3BydF9kc2NfcmVzb3VyY2VzKGNvbW1lbnQsIHR5cGUsIGNvdW50LCBzdHJpbmdzKQorICAgIGNoYXIJKmNvbW1lbnQ7CS8qIGlmIE5VTEwgYWRkIHRvIHByZXZpb3VzICovCisgICAgY2hhcgkqdHlwZTsKKyAgICBpbnQJCWNvdW50OworICAgIGNoYXIJKipzdHJpbmdzOworeworICAgIGludAkJaTsKKworICAgIGlmIChjb21tZW50ICE9IE5VTEwpCisJc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIiUlJSUlczogJXMiLCBjb21tZW50LCB0eXBlKTsKKyAgICBlbHNlCisJc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIiUlJSUrICVzIiwgdHlwZSk7CisgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKwlzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiICVzIiwgc3RyaW5nc1tpXSk7CisJcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKKyAgICB9CisKKyAgICBwcnRfd3JpdGVfc3RyaW5nKCJcbiIpOworfQorCisgICAgc3RhdGljIHZvaWQKK3BydF9kc2NfcmVxdWlyZW1lbnRzKGR1cGxleCwgdHVtYmxlLCBjb2xsYXRlLCBjb2xvciwgbnVtX2NvcGllcykKKyAgICBpbnQJCWR1cGxleDsKKyAgICBpbnQJCXR1bWJsZTsKKyAgICBpbnQJCWNvbGxhdGU7CisgICAgaW50CQljb2xvcjsKKyAgICBpbnQJCW51bV9jb3BpZXM7Cit7CisgICAgLyogT25seSBvdXRwdXQgdGhlIGNvbW1lbnQgaWYgd2UgbmVlZCB0by4KKyAgICAgKiBOb3RlOiB0dW1ibGUgaXMgaWdub3JlZCBpZiB3ZSBhcmUgbm90IGR1cGxleGluZworICAgICAqLworICAgIGlmICghKGR1cGxleCB8fCBjb2xsYXRlIHx8IGNvbG9yIHx8IChudW1fY29waWVzID4gMSkpKQorCXJldHVybjsKKworICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlJSUlUmVxdWlyZW1lbnRzOiIpOworICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CisKKyAgICBpZiAoZHVwbGV4KQorICAgIHsKKwlwcnRfd3JpdGVfc3RyaW5nKCIgZHVwbGV4Iik7CisJaWYgKHR1bWJsZSkKKwkgICAgcHJ0X3dyaXRlX3N0cmluZygiKHR1bWJsZSkiKTsKKyAgICB9CisgICAgaWYgKGNvbGxhdGUpCisJcHJ0X3dyaXRlX3N0cmluZygiIGNvbGxhdGUiKTsKKyAgICBpZiAoY29sb3IpCisJcHJ0X3dyaXRlX3N0cmluZygiIGNvbG9yIik7CisgICAgaWYgKG51bV9jb3BpZXMgPiAxKQorICAgIHsKKwlwcnRfd3JpdGVfc3RyaW5nKCIgbnVtY29waWVzKCIpOworCS8qIE5vdGU6IG5vIHNwYWNlIHdhbnRlZCBzbyBkb250IHVzZSBwcnRfd3JpdGVfaW50KCkgKi8KKwlzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJWQiLCBudW1fY29waWVzKTsKKwlwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOworCXBydF93cml0ZV9zdHJpbmcoIikiKTsKKyAgICB9CisgICAgcHJ0X3dyaXRlX3N0cmluZygiXG4iKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitwcnRfZHNjX2RvY21lZGlhKHBhcGVyX25hbWUsIHdpZHRoLCBoZWlnaHQsIHdlaWdodCwgY29sb3VyLCB0eXBlKQorICAgIGNoYXIJKnBhcGVyX25hbWU7CisgICAgZG91YmxlCXdpZHRoOworICAgIGRvdWJsZQloZWlnaHQ7CisgICAgZG91YmxlCXdlaWdodDsKKyAgICBjaGFyCSpjb2xvdXI7CisgICAgY2hhcgkqdHlwZTsKK3sKKyAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJSUlJURvY3VtZW50TWVkaWE6ICVzICIsIHBhcGVyX25hbWUpOworICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CisgICAgcHJ0X3dyaXRlX3JlYWwod2lkdGgsIDIpOworICAgIHBydF93cml0ZV9yZWFsKGhlaWdodCwgMik7CisgICAgcHJ0X3dyaXRlX3JlYWwod2VpZ2h0LCAyKTsKKyAgICBpZiAoY29sb3VyID09IE5VTEwpCisJcHJ0X3dyaXRlX3N0cmluZygiKCkiKTsKKyAgICBlbHNlCisJcHJ0X3dyaXRlX3N0cmluZyhjb2xvdXIpOworICAgIHBydF93cml0ZV9zdHJpbmcoIiAiKTsKKyAgICBpZiAodHlwZSA9PSBOVUxMKQorCXBydF93cml0ZV9zdHJpbmcoIigpIik7CisgICAgZWxzZQorCXBydF93cml0ZV9zdHJpbmcodHlwZSk7CisgICAgcHJ0X3dyaXRlX3N0cmluZygiXG4iKTsKK30KKworICAgIHZvaWQKK21jaF9wcmludF9jbGVhbnVwKCkKK3sKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKHBydF9kb19jb252KQorICAgIHsKKwljb252ZXJ0X3NldHVwKCZwcnRfY29udiwgTlVMTCwgTlVMTCk7CisJcHJ0X2RvX2NvbnYgPSBGQUxTRTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAocHJ0X3BzX2ZkICE9IE5VTEwpCisgICAgeworCWZjbG9zZShwcnRfcHNfZmQpOworCXBydF9wc19mZCA9IE5VTEw7CisJcHJ0X2ZpbGVfZXJyb3IgPSBGQUxTRTsKKyAgICB9CisgICAgaWYgKHBydF9wc19maWxlX25hbWUgIT0gTlVMTCkKKyAgICB7CisJdmltX2ZyZWUocHJ0X3BzX2ZpbGVfbmFtZSk7CisJcHJ0X3BzX2ZpbGVfbmFtZSA9IE5VTEw7CisgICAgfQorfQorCisgICAgc3RhdGljIGZsb2F0Cit0b19kZXZpY2VfdW5pdHMoaWR4LCBwaHlzc2l6ZSwgZGVmX251bWJlcikKKyAgICBpbnQJCWlkeDsKKyAgICBkb3VibGUJcGh5c3NpemU7CisgICAgaW50CQlkZWZfbnVtYmVyOworeworICAgIGZsb2F0CXJldDsKKyAgICBpbnQJCXU7CisgICAgaW50CQlucjsKKworICAgIHUgPSBwcnRfZ2V0X3VuaXQoaWR4KTsKKyAgICBpZiAodSA9PSBQUlRfVU5JVF9OT05FKQorICAgIHsKKwl1ID0gUFJUX1VOSVRfUEVSQzsKKwluciA9IGRlZl9udW1iZXI7CisgICAgfQorICAgIGVsc2UKKwluciA9IHByaW50ZXJfb3B0c1tpZHhdLm51bWJlcjsKKworICAgIHN3aXRjaCAodSkKKyAgICB7CisJY2FzZSBQUlRfVU5JVF9JTkNIOgorCSAgICByZXQgPSAoZmxvYXQpKG5yICogUFJUX1BTX0RFRkFVTFRfRFBJKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQUlRfVU5JVF9NTToKKwkgICAgcmV0ID0gKGZsb2F0KShuciAqIFBSVF9QU19ERUZBVUxUX0RQSSkgLyAoZmxvYXQpMjUuNDsKKwkgICAgYnJlYWs7CisJY2FzZSBQUlRfVU5JVF9QT0lOVDoKKwkgICAgcmV0ID0gKGZsb2F0KW5yOworCSAgICBicmVhazsKKwljYXNlIFBSVF9VTklUX1BFUkM6CisJZGVmYXVsdDoKKwkgICAgcmV0ID0gKGZsb2F0KShwaHlzc2l6ZSAqIG5yKSAvIDEwMDsKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENhbGN1bGF0ZSBtYXJnaW5zIGZvciBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IGZyb20gcHJpbnRvcHRpb25zIHNldHRpbmdzLgorICovCisgICAgc3RhdGljIHZvaWQKK3BydF9wYWdlX21hcmdpbnMod2lkdGgsIGhlaWdodCwgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tKQorICAgIGRvdWJsZQl3aWR0aDsKKyAgICBkb3VibGUJaGVpZ2h0OworICAgIGRvdWJsZQkqbGVmdDsKKyAgICBkb3VibGUJKnJpZ2h0OworICAgIGRvdWJsZQkqdG9wOworICAgIGRvdWJsZQkqYm90dG9tOworeworICAgICpsZWZ0ICAgPSB0b19kZXZpY2VfdW5pdHMoT1BUX1BSSU5UX0xFRlQsIHdpZHRoLCAxMCk7CisgICAgKnJpZ2h0ICA9IHdpZHRoIC0gdG9fZGV2aWNlX3VuaXRzKE9QVF9QUklOVF9SSUdIVCwgd2lkdGgsIDUpOworICAgICp0b3AgICAgPSBoZWlnaHQgLSB0b19kZXZpY2VfdW5pdHMoT1BUX1BSSU5UX1RPUCwgaGVpZ2h0LCA1KTsKKyAgICAqYm90dG9tID0gdG9fZGV2aWNlX3VuaXRzKE9QVF9QUklOVF9CT1QsIGhlaWdodCwgNSk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcHJ0X2ZvbnRfbWV0cmljcyhmb250X3NjYWxlKQorICAgIGludAkJZm9udF9zY2FsZTsKK3sKKyAgICBwcnRfbGluZV9oZWlnaHQgPSAoZmxvYXQpZm9udF9zY2FsZTsKKyAgICBwcnRfY2hhcl93aWR0aCA9IChmbG9hdClQUlRfUFNfRk9OVF9UT19VU0VSKGZvbnRfc2NhbGUsIHBydF9wc19mb250Lnd4KTsKK30KKworCisgICAgc3RhdGljIGludAorcHJ0X2dldF9jcGwoKQoreworICAgIGlmIChwcnRfdXNlX251bWJlcigpKQorICAgIHsKKwlwcnRfbnVtYmVyX3dpZHRoID0gUFJJTlRfTlVNQkVSX1dJRFRIICogcHJ0X2NoYXJfd2lkdGg7CisJcHJ0X2xlZnRfbWFyZ2luICs9IHBydF9udW1iZXJfd2lkdGg7CisgICAgfQorICAgIGVsc2UKKwlwcnRfbnVtYmVyX3dpZHRoID0gMC4wOworCisgICAgcmV0dXJuIChpbnQpKChwcnRfcmlnaHRfbWFyZ2luIC0gcHJ0X2xlZnRfbWFyZ2luKSAvIHBydF9jaGFyX3dpZHRoKTsKK30KKworLyoKKyAqIEdldCBudW1iZXIgb2YgbGluZXMgb2YgdGV4dCB0aGF0IGZpdCBvbiBhIHBhZ2UgKGV4Y2x1ZGluZyB0aGUgaGVhZGVyKS4KKyAqLworICAgIHN0YXRpYyBpbnQKK3BydF9nZXRfbHBwKCkKK3sKKyAgICBpbnQgbHBwOworCisgICAgLyoKKyAgICAgKiBDYWxjdWxhdGUgb2Zmc2V0IHRvIGxvd2VyIGxlZnQgY29ybmVyIG9mIGJhY2tncm91bmQgcmVjdCBiYXNlZCBvbiBhY3R1YWwKKyAgICAgKiBmb250IGhlaWdodCAoYmFzZWQgb24gaXRzIGJvdW5kaW5nIGJveCkgYW5kIHRoZSBsaW5lIGhlaWdodCwgaGFuZGxpbmcgdGhlCisgICAgICogY2FzZSB3aGVyZSB0aGUgZm9udCBoZWlnaHQgY2FuIGV4Y2VlZCB0aGUgbGluZSBoZWlnaHQuCisgICAgICovCisgICAgcHJ0X2JnY29sX29mZnNldCA9IChmbG9hdClQUlRfUFNfRk9OVF9UT19VU0VSKHBydF9saW5lX2hlaWdodCwKKwkJCQkJICAgcHJ0X3BzX2ZvbnQuYmJveF9taW5feSk7CisgICAgaWYgKChwcnRfcHNfZm9udC5iYm94X21heF95IC0gcHJ0X3BzX2ZvbnQuYmJveF9taW5feSkgPCAxMDAwLjApCisgICAgeworCXBydF9iZ2NvbF9vZmZzZXQgLT0gKGZsb2F0KVBSVF9QU19GT05UX1RPX1VTRVIocHJ0X2xpbmVfaGVpZ2h0LAorCQkJCSgxMDAwLjAgLSAocHJ0X3BzX2ZvbnQuYmJveF9tYXhfeSAtCisJCQkJCSAgICBwcnRfcHNfZm9udC5iYm94X21pbl95KSkgLyAyKTsKKyAgICB9CisKKyAgICAvKiBHZXQgaGVpZ2h0IGZvciB0b3Btb3N0IGxpbmUgYmFzZWQgb24gYmFja2dyb3VuZCByZWN0IG9mZnNldC4gKi8KKyAgICBwcnRfZmlyc3RfbGluZV9oZWlnaHQgPSBwcnRfbGluZV9oZWlnaHQgKyBwcnRfYmdjb2xfb2Zmc2V0OworCisgICAgLyogQ2FsY3VsYXRlIGxwcCAqLworICAgIGxwcCA9IChpbnQpKChwcnRfdG9wX21hcmdpbiAtIHBydF9ib3R0b21fbWFyZ2luKSAvIHBydF9saW5lX2hlaWdodCk7CisKKyAgICAvKiBBZGp1c3QgdG9wIG1hcmdpbiBpZiB0aGVyZSBpcyBhIGhlYWRlciAqLworICAgIHBydF90b3BfbWFyZ2luIC09IHBydF9saW5lX2hlaWdodCAqIHBydF9oZWFkZXJfaGVpZ2h0KCk7CisKKyAgICByZXR1cm4gbHBwIC0gcHJ0X2hlYWRlcl9oZWlnaHQoKTsKK30KKworLypBUkdTVVNFRCovCisgICAgaW50CittY2hfcHJpbnRfaW5pdChwc2V0dGluZ3MsIGpvYm5hbWUsIGZvcmNlaXQpCisgICAgcHJ0X3NldHRpbmdzX1QgKnBzZXR0aW5nczsKKyAgICBjaGFyX3UJKmpvYm5hbWU7CisgICAgaW50CQlmb3JjZWl0OworeworICAgIGludAkJaTsKKyAgICBjaGFyCSpwYXBlcl9uYW1lOworICAgIGludAkJcGFwZXJfc3RybGVuOworICAgIGludAkJZm9udHNpemU7CisgICAgY2hhcl91CSpwOworICAgIGRvdWJsZSAgICAgIGxlZnQ7CisgICAgZG91YmxlICAgICAgcmlnaHQ7CisgICAgZG91YmxlICAgICAgdG9wOworICAgIGRvdWJsZSAgICAgIGJvdHRvbTsKKworI2lmIDAKKyAgICAvKgorICAgICAqIFRPRE86CisgICAgICogSWYgImZvcmNlaXQiIGlzIGZhbHNlOiBwb3AgdXAgYSBkaWFsb2cgdG8gc2VsZWN0OgorICAgICAqCS0gcHJpbnRlciBuYW1lCisgICAgICoJLSBjb3BpZXMKKyAgICAgKgktIGNvbGxhdGVkL3VuY29sbGF0ZWQKKyAgICAgKgktIGR1cGxleCBvZmYvbG9uZyBzaWRlL3Nob3J0IHNpZGUKKyAgICAgKgktIHBhcGVyIHNpemUKKyAgICAgKgktIHBvcnRyYWl0L2xhbmRzY2FwZQorICAgICAqCS0gZm9udCBzaXplCisgICAgICoKKyAgICAgKiBJZiAiZm9yY2VpdCIgaXMgdHJ1ZTogdXNlIHRoZSBkZWZhdWx0IHByaW50ZXIgYW5kIHNldHRpbmdzCisgICAgICovCisgICAgaWYgKGZvcmNlaXQpCisJc19wZC5GbGFncyB8PSBQRF9SRVRVUk5ERUZBVUxUOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEZpbmQgdGhlIHNpemUgb2YgdGhlIHBhcGVyIGFuZCBzZXQgdGhlIG1hcmdpbnMuCisgICAgICovCisgICAgcHJ0X3BvcnRyYWl0ID0gKCFwcmludGVyX29wdHNbT1BUX1BSSU5UX1BPUlRSQUlUXS5wcmVzZW50CisJICAgfHwgVE9MT1dFUl9BU0MocHJpbnRlcl9vcHRzW09QVF9QUklOVF9QT1JUUkFJVF0uc3RyaW5nWzBdKSA9PSAneScpOworICAgIGlmIChwcmludGVyX29wdHNbT1BUX1BSSU5UX1BBUEVSXS5wcmVzZW50KQorICAgIHsKKwlwYXBlcl9uYW1lID0gKGNoYXIgKilwcmludGVyX29wdHNbT1BUX1BSSU5UX1BBUEVSXS5zdHJpbmc7CisJcGFwZXJfc3RybGVuID0gcHJpbnRlcl9vcHRzW09QVF9QUklOVF9QQVBFUl0uc3RybGVuOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXBhcGVyX25hbWUgPSAiQTQiOworCXBhcGVyX3N0cmxlbiA9IDI7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBQUlRfTUVESUFTSVpFX0xFTjsgKytpKQorCWlmIChTVFJMRU4ocHJ0X21lZGlhc2l6ZVtpXS5uYW1lKSA9PSAodW5zaWduZWQpcGFwZXJfc3RybGVuCisJCSYmIFNUUk5JQ01QKHBydF9tZWRpYXNpemVbaV0ubmFtZSwgcGFwZXJfbmFtZSwKKwkJCQkJCQkgICBwYXBlcl9zdHJsZW4pID09IDApCisJICAgIGJyZWFrOworICAgIGlmIChpID09IFBSVF9NRURJQVNJWkVfTEVOKQorCWkgPSAwOworICAgIHBydF9tZWRpYSA9IGk7CisKKyAgICAvKgorICAgICAqIFNldCBQUyBwYWdlc2l6ZSBiYXNlZCBvbiBtZWRpYSBkaW1lbnNpb25zIGFuZCBwcmludCBvcmllbnRhdGlvbi4KKyAgICAgKiBOb3RlOiBNZWRpYSBhbmQgcGFnZSBzaXplcyBoYXZlIGRlZmluZWQgbWVhbmluZ3MgaW4gUG9zdFNjcmlwdCBhbmQgc2hvdWxkCisgICAgICogYmUga2VwdCBkaXN0aW5jdC4gIE1lZGlhIGlzIHRoZSBwYXBlciAob3IgdHJhbnNwYXJlbmN5LCBvciAuLi4pIHRoYXQgaXMKKyAgICAgKiBwcmludGVkIG9uLCB3aGVyZWFzIHRoZSBwYWdlIHNpemUgaXMgdGhlIGFyZWEgdGhhdCB0aGUgUG9zdFNjcmlwdAorICAgICAqIGludGVycHJldGVyIHJlbmRlcnMgaW50by4KKyAgICAgKi8KKyAgICBpZiAocHJ0X3BvcnRyYWl0KQorICAgIHsKKwlwcnRfcGFnZV93aWR0aCA9IHBydF9tZWRpYXNpemVbaV0ud2lkdGg7CisJcHJ0X3BhZ2VfaGVpZ2h0ID0gcHJ0X21lZGlhc2l6ZVtpXS5oZWlnaHQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJcHJ0X3BhZ2Vfd2lkdGggPSBwcnRfbWVkaWFzaXplW2ldLmhlaWdodDsKKwlwcnRfcGFnZV9oZWlnaHQgPSBwcnRfbWVkaWFzaXplW2ldLndpZHRoOworICAgIH0KKworICAgIC8qCisgICAgICogU2V0IFBTIHBhZ2UgbWFyZ2lucyBiYXNlZCBvbiB0aGUgUFMgcGFnZXNpemUsIG5vdCB0aGUgbWVkaWFzaXplIC0gdGhpcworICAgICAqIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSBjcGwgYW5kIGxwcCBhcmUgY2FsY3VsYXRlZC4KKyAgICAgKi8KKyAgICBwcnRfcGFnZV9tYXJnaW5zKHBydF9wYWdlX3dpZHRoLCBwcnRfcGFnZV9oZWlnaHQsICZsZWZ0LCAmcmlnaHQsICZ0b3AsCisJCQkJCQkJCSAgICAmYm90dG9tKTsKKyAgICBwcnRfbGVmdF9tYXJnaW4gPSAoZmxvYXQpbGVmdDsKKyAgICBwcnRfcmlnaHRfbWFyZ2luID0gKGZsb2F0KXJpZ2h0OworICAgIHBydF90b3BfbWFyZ2luID0gKGZsb2F0KXRvcDsKKyAgICBwcnRfYm90dG9tX21hcmdpbiA9IChmbG9hdClib3R0b207CisKKyAgICAvKgorICAgICAqIFNldCB1cCB0aGUgZm9udCBzaXplLgorICAgICAqLworICAgIGZvbnRzaXplID0gUFJUX1BTX0RFRkFVTFRfRk9OVFNJWkU7CisgICAgZm9yIChwID0gcF9wZm47IChwID0gdmltX3N0cmNocihwLCAnOicpKSAhPSBOVUxMOyArK3ApCisJaWYgKHBbMV0gPT0gJ2gnICYmIFZJTV9JU0RJR0lUKHBbMl0pKQorCSAgICBmb250c2l6ZSA9IGF0b2koKGNoYXIgKilwICsgMik7CisgICAgcHJ0X2ZvbnRfbWV0cmljcyhmb250c2l6ZSk7CisKKyAgICAvKgorICAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGxpbmUsIGFuZCBsaW5lcyBwZXIgcGFnZSBmb3IgdGhlCisgICAgICogZ2VuZXJpYyBwcmludCBjb2RlLgorICAgICAqLworICAgIHBzZXR0aW5ncy0+Y2hhcnNfcGVyX2xpbmUgPSBwcnRfZ2V0X2NwbCgpOworICAgIHBzZXR0aW5ncy0+bGluZXNfcGVyX3BhZ2UgPSBwcnRfZ2V0X2xwcCgpOworCisgICAgLyogQ2F0Y2ggbWFyZ2luIHNldHRpbmdzIHRoYXQgbGVhdmUgbm8gc3BhY2UgZm9yIG91dHB1dCEgKi8KKyAgICBpZiAocHNldHRpbmdzLT5jaGFyc19wZXJfbGluZSA8PSAwIHx8IHBzZXR0aW5ncy0+bGluZXNfcGVyX3BhZ2UgPD0gMCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogU29ydCBvdXQgdGhlIG51bWJlciBvZiBjb3BpZXMgdG8gYmUgcHJpbnRlZC4gIFBTIGJ5IGRlZmF1bHQgd2lsbCBkbworICAgICAqIHVuY29sbGF0ZWQgY29waWVzIGZvciB5b3UsIHNvIG9uY2Ugd2Uga25vdyBob3cgbWFueSB1bmNvbGxhdGVkIGNvcGllcyBhcmUKKyAgICAgKiB3YW50ZWQgY2FjaGUgaXQgYXdheSBhbmQgbGllIHRvIHRoZSBnZW5lcmljIGNvZGUgdGhhdCB3ZSBvbmx5IHdhbnQgb25lCisgICAgICogdW5jb2xsYXRlZCBjb3B5LgorICAgICAqLworICAgIHBzZXR0aW5ncy0+bl9jb2xsYXRlZF9jb3BpZXMgPSAxOworICAgIHBzZXR0aW5ncy0+bl91bmNvbGxhdGVkX2NvcGllcyA9IDE7CisgICAgcHJ0X251bV9jb3BpZXMgPSAxOworICAgIHBydF9jb2xsYXRlID0gKCFwcmludGVyX29wdHNbT1BUX1BSSU5UX0NPTExBVEVdLnByZXNlbnQKKwkgICAgfHwgVE9MT1dFUl9BU0MocHJpbnRlcl9vcHRzW09QVF9QUklOVF9DT0xMQVRFXS5zdHJpbmdbMF0pID09ICd5Jyk7CisgICAgaWYgKHBydF9jb2xsYXRlKQorICAgIHsKKwkvKiBUT0RPOiBHZXQgbnVtYmVyIG9mIGNvbGxhdGVkIGNvcGllcyB3YW50ZWQuICovCisJcHNldHRpbmdzLT5uX2NvbGxhdGVkX2NvcGllcyA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogVE9ETzogR2V0IG51bWJlciBvZiB1bmNvbGxhdGVkIGNvcGllcyB3YW50ZWQgYW5kIHVwZGF0ZSB0aGUgY2FjaGVkCisJICogY291bnQuCisJICovCisJcHJ0X251bV9jb3BpZXMgPSAxOworICAgIH0KKworICAgIHBzZXR0aW5ncy0+am9ibmFtZSA9IGpvYm5hbWU7CisKKyAgICAvKgorICAgICAqIFNldCB1cCBwcmludGVyIGR1cGxleCBhbmQgdHVtYmxlIGJhc2VkIG9uIER1cGxleCBvcHRpb24gc2V0dGluZyAtIGRlZmF1bHQKKyAgICAgKiBpcyBsb25nIHNpZGVkIGR1cGxleCBwcmludGluZyAoaS5lLiBubyB0dW1ibGUpLgorICAgICAqLworICAgIHBydF9kdXBsZXggPSBUUlVFOworICAgIHBydF90dW1ibGUgPSBGQUxTRTsKKyAgICBwc2V0dGluZ3MtPmR1cGxleCA9IDE7CisgICAgaWYgKHByaW50ZXJfb3B0c1tPUFRfUFJJTlRfRFVQTEVYXS5wcmVzZW50KQorICAgIHsKKwlpZiAoU1RSTklDTVAocHJpbnRlcl9vcHRzW09QVF9QUklOVF9EVVBMRVhdLnN0cmluZywgIm9mZiIsIDMpID09IDApCisJeworCSAgICBwcnRfZHVwbGV4ID0gRkFMU0U7CisJICAgIHBzZXR0aW5ncy0+ZHVwbGV4ID0gMDsKKwl9CisJZWxzZSBpZiAoU1RSTklDTVAocHJpbnRlcl9vcHRzW09QVF9QUklOVF9EVVBMRVhdLnN0cmluZywgInNob3J0IiwgNSkKKwkJCQkJCQkJCSA9PSAwKQorCSAgICBwcnRfdHVtYmxlID0gVFJVRTsKKyAgICB9CisKKyAgICAvKiBGb3Igbm93IHVzZXIgYWJvcnQgbm90IHN1cHBvcnRlZCAqLworICAgIHBzZXR0aW5ncy0+dXNlcl9hYm9ydCA9IDA7CisKKyAgICAvKiBJZiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIGZpbGUgbmFtZSwgdXNlIGEgdGVtcCBmaWxlLiAqLworICAgIGlmIChwc2V0dGluZ3MtPm91dGZpbGUgPT0gTlVMTCkKKyAgICB7CisJcHJ0X3BzX2ZpbGVfbmFtZSA9IHZpbV90ZW1wbmFtZSgncCcpOworCWlmIChwcnRfcHNfZmlsZV9uYW1lID09IE5VTEwpCisJeworCSAgICBFTVNHKF8oZV9ub3RtcCkpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisJcHJ0X3BzX2ZkID0gbWNoX2ZvcGVuKChjaGFyICopcHJ0X3BzX2ZpbGVfbmFtZSwgV1JJVEVCSU4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXAgPSBleHBhbmRfZW52X3NhdmUocHNldHRpbmdzLT5vdXRmaWxlKTsKKwlpZiAocCAhPSBOVUxMKQorCXsKKwkgICAgcHJ0X3BzX2ZkID0gbWNoX2ZvcGVuKChjaGFyICopcCwgV1JJVEVCSU4pOworCSAgICB2aW1fZnJlZShwKTsKKwl9CisgICAgfQorICAgIGlmIChwcnRfcHNfZmQgPT0gTlVMTCkKKyAgICB7CisJRU1TRyhfKCJFMzI0OiBDYW4ndCBvcGVuIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiKSk7CisJbWNoX3ByaW50X2NsZWFudXAoKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICBnYV9pbml0MigmcHJ0X3BzX2J1ZmZlciwgKGludClzaXplb2YoY2hhciksIFBSVF9QU19ERUZBVUxUX0JVRkZFUl9TSVpFKTsKKworICAgIHBydF9wYWdlX251bSA9IDA7CisKKyAgICBwcnRfYXR0cmlidXRlX2NoYW5nZSA9IEZBTFNFOworICAgIHBydF9uZWVkX21vdmV0byA9IEZBTFNFOworICAgIHBydF9uZWVkX2ZvbnQgPSBGQUxTRTsKKyAgICBwcnRfbmVlZF9mZ2NvbCA9IEZBTFNFOworICAgIHBydF9uZWVkX2JnY29sID0gRkFMU0U7CisgICAgcHJ0X25lZWRfdW5kZXJsaW5lID0gRkFMU0U7CisKKyAgICBwcnRfZmlsZV9lcnJvciA9IEZBTFNFOworCisgICAgcmV0dXJuIE9LOworfQorCisgICAgc3RhdGljIGludAorcHJ0X2FkZF9yZXNvdXJjZShyZXNvdXJjZSkKKyAgICBzdHJ1Y3QgcHJ0X3BzX3Jlc291cmNlX1MgKnJlc291cmNlOworeworICAgIEZJTEUqCWZkX3Jlc291cmNlOworICAgIGNoYXJfdQlyZXNvdXJjZV9idWZmZXJbNTEyXTsKKyAgICBjaGFyCSpyZXNvdXJjZV9uYW1lWzFdOworICAgIHNpemVfdAlieXRlc19yZWFkOworCisgICAgZmRfcmVzb3VyY2UgPSBtY2hfZm9wZW4oKGNoYXIgKilyZXNvdXJjZS0+ZmlsZW5hbWUsIFJFQURCSU4pOworICAgIGlmIChmZF9yZXNvdXJjZSA9PSBOVUxMKQorICAgIHsKKwlFTVNHMihfKCJFNDU2OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIiksIHJlc291cmNlLT5maWxlbmFtZSk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXNvdXJjZV9uYW1lWzBdID0gKGNoYXIgKilyZXNvdXJjZS0+dGl0bGU7CisgICAgcHJ0X2RzY19yZXNvdXJjZXMoIkJlZ2luUmVzb3VyY2UiLAorCQkJICAgIHJlc291cmNlX3R5cGVzW3Jlc291cmNlLT50eXBlXSwgMSwgcmVzb3VyY2VfbmFtZSk7CisKKyAgICBwcnRfZHNjX3RleHRsaW5lKCJCZWdpbkRvY3VtZW50IiwgKGNoYXIgKilyZXNvdXJjZS0+ZmlsZW5hbWUpOworCisgICAgZm9yICg7OykKKyAgICB7CisJYnl0ZXNfcmVhZCA9IGZyZWFkKChjaGFyICopcmVzb3VyY2VfYnVmZmVyLCBzaXplb2YoY2hhcl91KSwKKwkJCSAgIHNpemVvZihyZXNvdXJjZV9idWZmZXIpLCBmZF9yZXNvdXJjZSk7CisJaWYgKGZlcnJvcihmZF9yZXNvdXJjZSkpCisJeworCSAgICBFTVNHMihfKCJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiKSwKKwkJCQkJCQkgICAgcmVzb3VyY2UtPmZpbGVuYW1lKTsKKwkgICAgZmNsb3NlKGZkX3Jlc291cmNlKTsKKwkgICAgcmV0dXJuIEZBTFNFOworCX0KKwlpZiAoYnl0ZXNfcmVhZCA9PSAwKQorCSAgICBicmVhazsKKwlwcnRfd3JpdGVfZmlsZV9yYXdfbGVuKHJlc291cmNlX2J1ZmZlciwgYnl0ZXNfcmVhZCk7CisJaWYgKHBydF9maWxlX2Vycm9yKQorCXsKKwkgICAgZmNsb3NlKGZkX3Jlc291cmNlKTsKKwkgICAgcmV0dXJuIEZBTFNFOworCX0KKyAgICB9CisgICAgZmNsb3NlKGZkX3Jlc291cmNlKTsKKworICAgIHBydF9kc2Nfbm9hcmcoIkVuZERvY3VtZW50Iik7CisKKyAgICBwcnRfZHNjX25vYXJnKCJFbmRSZXNvdXJjZSIpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyAgICBpbnQKK21jaF9wcmludF9iZWdpbihwc2V0dGluZ3MpCisgICAgcHJ0X3NldHRpbmdzX1QgKnBzZXR0aW5nczsKK3sKKyAgICB0aW1lX3QJbm93OworICAgIGludAkJYmJveFs0XTsKKyAgICBjaGFyCSpwX3RpbWU7CisgICAgY2hhcgkqcmVzb3VyY2VbMV07CisgICAgZG91YmxlICAgICAgbGVmdDsKKyAgICBkb3VibGUgICAgICByaWdodDsKKyAgICBkb3VibGUgICAgICB0b3A7CisgICAgZG91YmxlICAgICAgYm90dG9tOworICAgIHN0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUyByZXNfcHJvbG9nOworICAgIHN0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUyByZXNfZW5jb2Rpbmc7CisgICAgY2hhcl91ICAgICAgYnVmZmVyWzI1Nl07CisgICAgY2hhcl91ICAgICAgKnBfZW5jb2Rpbmc7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJcHJvcHM7CisjZW5kaWYKKworICAgIC8qCisgICAgICogUFMgRFNDIEhlYWRlciBjb21tZW50cyAtIG5vIFBTIGNvZGUhCisgICAgICovCisgICAgcHJ0X2RzY19zdGFydCgpOworICAgIHBydF9kc2NfdGV4dGxpbmUoIlRpdGxlIiwgKGNoYXIgKilwc2V0dGluZ3MtPmpvYm5hbWUpOworICAgIC8qIFRPRE8gLSBwbGF0Zm9ybSBkZXBlbmRlbnQgdXNlciBuYW1lIHJldHJpZXZhbCAqLworICAgIHBydF9kc2NfdGV4dGxpbmUoIkZvciIsICJVbmtub3duIik7CisgICAgcHJ0X2RzY190ZXh0bGluZSgiQ3JlYXRvciIsIFZJTV9WRVJTSU9OX0xPTkcpOworICAgIC8qIE5vdGU6IHRvIGVuc3VyZSBDbGVhbjhiaXQgSSBkb24ndCB0aGluayB3ZSBjYW4gdXNlIExDX1RJTUUgKi8KKyAgICBub3cgPSB0aW1lKE5VTEwpOworICAgIHBfdGltZSA9IGN0aW1lKCZub3cpOworICAgIC8qIE5vdGU6IGN0aW1lKCkgYWRkcyBhIFxuIHNvIHdlIGhhdmUgdG8gcmVtb3ZlIGl0IDotKCAqLworICAgICoodmltX3N0cmNocigoY2hhcl91ICopcF90aW1lLCAnXG4nKSkgPSAnXDAnOworICAgIHBydF9kc2NfdGV4dGxpbmUoIkNyZWF0aW9uRGF0ZSIsIHBfdGltZSk7CisgICAgcHJ0X2RzY190ZXh0bGluZSgiRG9jdW1lbnREYXRhIiwgIkNsZWFuOEJpdCIpOworICAgIHBydF9kc2NfdGV4dGxpbmUoIk9yaWVudGF0aW9uIiwgIlBvcnRyYWl0Iik7CisgICAgcHJ0X2RzY19hdGVuZCgiUGFnZXMiKTsKKyAgICBwcnRfZHNjX3RleHRsaW5lKCJQYWdlT3JkZXIiLCAiQXNjZW5kIik7CisgICAgLyogVGhlIGJib3ggZG9lcyBub3QgY2hhbmdlIHdpdGggb3JpZW50YXRpb24gLSBpdCBpcyBhbHdheXMgaW4gdGhlIGRlZmF1bHQKKyAgICAgKiB1c2VyIGNvb3JkaW5hdGUgc3lzdGVtISAgV2UgaGF2ZSB0byByZWNhbGN1bGF0ZSByaWdodCBhbmQgYm90dG9tCisgICAgICogY29vcmRpbmF0ZXMgYmFzZWQgb24gdGhlIGZvbnQgbWV0cmljcyBmb3IgdGhlIGJib3ggdG8gYmUgYWNjdXJhdGUuICovCisgICAgcHJ0X3BhZ2VfbWFyZ2lucyhwcnRfbWVkaWFzaXplW3BydF9tZWRpYV0ud2lkdGgsCisJCQkJCSAgICBwcnRfbWVkaWFzaXplW3BydF9tZWRpYV0uaGVpZ2h0LAorCQkJCQkgICAgJmxlZnQsICZyaWdodCwgJnRvcCwgJmJvdHRvbSk7CisgICAgYmJveFswXSA9IChpbnQpbGVmdDsKKyAgICBpZiAocHJ0X3BvcnRyYWl0KQorICAgIHsKKwkvKiBJbiBwb3J0cmFpdCBwcmludGluZyB0aGUgZml4ZWQgcG9pbnQgaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBzbyB3ZQorCSAqIGRlcml2ZSB0aGUgYmJveCBmcm9tIHRoYXQgcG9pbnQuICBXZSBoYXZlIHRoZSBleHBlY3RlZCBjcGwgY2hhcnMKKwkgKiBhY3Jvc3MgdGhlIG1lZGlhIGFuZCBscHAgbGluZXMgZG93biB0aGUgbWVkaWEuCisJICovCisJYmJveFsxXSA9IChpbnQpKHRvcCAtIChwc2V0dGluZ3MtPmxpbmVzX3Blcl9wYWdlICsgcHJ0X2hlYWRlcl9oZWlnaHQoKSkKKwkJCQkJCQkgICAgKiBwcnRfbGluZV9oZWlnaHQpOworCWJib3hbMl0gPSAoaW50KShsZWZ0ICsgcHNldHRpbmdzLT5jaGFyc19wZXJfbGluZSAqIHBydF9jaGFyX3dpZHRoCisJCQkJCQkJCQkrIDAuNSk7CisJYmJveFszXSA9IChpbnQpKHRvcCArIDAuNSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogSW4gbGFuZHNjYXBlIHByaW50aW5nIHRoZSBmaXhlZCBwb2ludCBpcyB0aGUgYm90dG9tIGxlZnQgY29ybmVyIHNvIHdlCisJICogZGVyaXZlIHRoZSBiYm94IGZyb20gdGhhdCBwb2ludC4gIFdlIGhhdmUgbHBwIGNoYXJzIGFjcm9zcyB0aGUgbWVkaWEKKwkgKiBhbmQgY3BsIGxpbmVzIHVwIHRoZSBtZWRpYS4KKwkgKi8KKwliYm94WzFdID0gKGludClib3R0b207CisJYmJveFsyXSA9IChpbnQpKGxlZnQgKyAoKHBzZXR0aW5ncy0+bGluZXNfcGVyX3BhZ2UKKwkJCSAgICAgICsgcHJ0X2hlYWRlcl9oZWlnaHQoKSkgKiBwcnRfbGluZV9oZWlnaHQpICsgMC41KTsKKwliYm94WzNdID0gKGludCkoYm90dG9tICsgcHNldHRpbmdzLT5jaGFyc19wZXJfbGluZSAqIHBydF9jaGFyX3dpZHRoCisJCQkJCQkJCQkrIDAuNSk7CisgICAgfQorICAgIHBydF9kc2NfaW50cygiQm91bmRpbmdCb3giLCA0LCBiYm94KTsKKyAgICAvKiBUaGUgbWVkaWEgd2lkdGggYW5kIGhlaWdodCBkb2VzIG5vdCBjaGFuZ2Ugd2l0aCBsYW5kc2NhcGUgcHJpbnRpbmchICovCisgICAgcHJ0X2RzY19kb2NtZWRpYShwcnRfbWVkaWFzaXplW3BydF9tZWRpYV0ubmFtZSwKKwkJCQlwcnRfbWVkaWFzaXplW3BydF9tZWRpYV0ud2lkdGgsCisJCQkJcHJ0X21lZGlhc2l6ZVtwcnRfbWVkaWFdLmhlaWdodCwKKwkJCQkoZG91YmxlKTAsIE5VTEwsIE5VTEwpOworICAgIHBydF9kc2NfcmVzb3VyY2VzKCJEb2N1bWVudE5lZWRlZFJlc291cmNlcyIsICJmb250IiwgNCwKKwkJCQkJCSAgICAgcHJ0X3BzX2ZvbnQucHNfZm9udG5hbWUpOworCisgICAgLyogU2VhcmNoIGZvciBleHRlcm5hbCByZXNvdXJjZXMgd2Ugc3VwcGx5ICovCisgICAgaWYgKCFwcnRfZmluZF9yZXNvdXJjZSgicHJvbG9nIiwgJnJlc19wcm9sb2cpKQorICAgIHsKKwlFTVNHKF8oIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwicHJvbG9nLnBzXCIiKSk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoIXBydF9vcGVuX3Jlc291cmNlKCZyZXNfcHJvbG9nKSkKKwlyZXR1cm4gRkFMU0U7CisgICAgaWYgKCFwcnRfY2hlY2tfcmVzb3VyY2UoJnJlc19wcm9sb2csIFBSVF9QUk9MT0dfVkVSU0lPTikpCisJcmV0dXJuIEZBTFNFOworICAgIC8qIEZpbmQgYW4gZW5jb2RpbmcgdG8gdXNlIGZvciBwcmludGluZy4KKyAgICAgKiBDaGVjayAncHJpbnRlbmNvZGluZycuIElmIG5vdCBzZXQgb3Igbm90IGZvdW5kLCB0aGVuIHVzZSAnZW5jb2RpbmcnLiBJZgorICAgICAqIHRoYXQgY2Fubm90IGJlIGZvdW5kIHRoZW4gZGVmYXVsdCB0byAibGF0aW4xIi4KKyAgICAgKiBOb3RlOiBWSU0gc3BlY2lmaWMgZW5jb2RpbmcgaGVhZGVyIGlzIGFsd2F5cyBza2lwcGVkLgorICAgICAqLworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBwcm9wcyA9IGVuY19jYW5vbl9wcm9wcyhwX2VuYyk7CisjZW5kaWYKKyAgICBwX2VuY29kaW5nID0gZW5jX3NraXAocF9wZW5jKTsKKyAgICBpZiAoKnBfZW5jb2RpbmcgPT0gTlVMCisJICAgIHx8ICFwcnRfZmluZF9yZXNvdXJjZSgoY2hhciAqKXBfZW5jb2RpbmcsICZyZXNfZW5jb2RpbmcpKQorICAgIHsKKwkvKiAncHJpbnRlbmNvZGluZycgbm90IHNldCBvciBub3Qgc3VwcG9ydGVkIC0gZmluZCBhbHRlcm5hdGUgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisJcF9lbmNvZGluZyA9IGVuY19za2lwKHBfZW5jKTsKKwlpZiAoIShwcm9wcyAmIEVOQ184QklUKQorCQl8fCAhcHJ0X2ZpbmRfcmVzb3VyY2UoKGNoYXIgKilwX2VuY29kaW5nLCAmcmVzX2VuY29kaW5nKSkKKwl7CisJICAgIC8qIDgtYml0ICdlbmNvZGluZycgaXMgbm90IHN1cHBvcnRlZCAqLworI2VuZGlmCisJICAgIC8qIFVzZSBsYXRpbjEgYXMgZGVmYXVsdCBwcmludGluZyBlbmNvZGluZyAqLworCSAgICBwX2VuY29kaW5nID0gKGNoYXJfdSAqKSJsYXRpbjEiOworCSAgICBpZiAoIXBydF9maW5kX3Jlc291cmNlKChjaGFyICopcF9lbmNvZGluZywgJnJlc19lbmNvZGluZykpCisJICAgIHsKKwkJRU1TRzIoXygiRTQ1NjogQ2FuJ3QgZmluZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlcy5wc1wiIiksCisJCQlwX2VuY29kaW5nKTsKKwkJcmV0dXJuIEZBTFNFOworCSAgICB9CisjaWZkZWYgRkVBVF9NQllURQorCX0KKyNlbmRpZgorICAgIH0KKyAgICBpZiAoIXBydF9vcGVuX3Jlc291cmNlKCZyZXNfZW5jb2RpbmcpKQorCXJldHVybiBGQUxTRTsKKyAgICAvKiBGb3IgdGhlIG1vbWVudCB0aGVyZSBhcmUgbm8gY2hlY2tzIG9uIGVuY29kaW5nIHJlc291cmNlIGZpbGVzIHRvIHBlcmZvcm0gKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyogU2V0IHVwIGVuY29kaW5nIGNvbnZlcnNpb24gaWYgc3RhcnRpbmcgZnJvbSBtdWx0aS1ieXRlICovCisgICAgcHJvcHMgPSBlbmNfY2Fub25fcHJvcHMocF9lbmMpOworICAgIGlmICghKHByb3BzICYgRU5DXzhCSVQpKQorICAgIHsKKwlpZiAoRkFJTCA9PSBjb252ZXJ0X3NldHVwKCZwcnRfY29udiwgcF9lbmMsIHBfZW5jb2RpbmcpKQorCXsKKwkgICAgRU1TRzIoXygiRTYyMDogVW5hYmxlIHRvIGNvbnZlcnQgZnJvbSBtdWx0aS1ieXRlIHRvIFwiJXNcIiBlbmNvZGluZyIpLAorCQkgICAgcF9lbmNvZGluZyk7CisJICAgIHJldHVybiBGQUxTRTsKKwl9CisJcHJ0X2RvX2NvbnYgPSBUUlVFOworICAgIH0KKyNlbmRpZgorCisgICAgLyogTGlzdCByZXNvdXJjZXMgc3VwcGxpZWQgKi8KKyAgICByZXNvdXJjZVswXSA9IChjaGFyICopYnVmZmVyOworICAgIFNUUkNQWShidWZmZXIsIHJlc19wcm9sb2cudGl0bGUpOworICAgIFNUUkNBVChidWZmZXIsICIgIik7CisgICAgU1RSQ0FUKGJ1ZmZlciwgcmVzX3Byb2xvZy52ZXJzaW9uKTsKKyAgICBwcnRfZHNjX3Jlc291cmNlcygiRG9jdW1lbnRTdXBwbGllZFJlc291cmNlcyIsICJwcm9jc2V0IiwgMSwgcmVzb3VyY2UpOworICAgIFNUUkNQWShidWZmZXIsIHJlc19lbmNvZGluZy50aXRsZSk7CisgICAgU1RSQ0FUKGJ1ZmZlciwgIiAiKTsKKyAgICBTVFJDQVQoYnVmZmVyLCByZXNfZW5jb2RpbmcudmVyc2lvbik7CisgICAgcHJ0X2RzY19yZXNvdXJjZXMoTlVMTCwgImVuY29kaW5nIiwgMSwgcmVzb3VyY2UpOworICAgIHBydF9kc2NfcmVxdWlyZW1lbnRzKHBydF9kdXBsZXgsIHBydF90dW1ibGUsIHBydF9jb2xsYXRlLAorI2lmZGVmIEZFQVRfU1lOX0hMCisJCQkJCXBzZXR0aW5ncy0+ZG9fc3ludGF4CisjZWxzZQorCQkJCQkwCisjZW5kaWYKKwkJCQkJLCBwcnRfbnVtX2NvcGllcyk7CisgICAgcHJ0X2RzY19ub2FyZygiRW5kQ29tbWVudHMiKTsKKworICAgIC8qCisgICAgICogUFMgRG9jdW1lbnQgcGFnZSBkZWZhdWx0cworICAgICAqLworICAgIHBydF9kc2Nfbm9hcmcoIkJlZ2luRGVmYXVsdHMiKTsKKworICAgIC8qIExpc3QgZm9udCByZXNvdXJjZXMgbW9zdCBsaWtlbHkgY29tbW9uIHRvIGFsbCBwYWdlcyAqLworICAgIHBydF9kc2NfcmVzb3VyY2VzKCJQYWdlUmVzb3VyY2VzIiwgImZvbnQiLCA0LCBwcnRfcHNfZm9udC5wc19mb250bmFtZSk7CisgICAgLyogUGFwZXIgd2lsbCBiZSB1c2VkIGZvciBhbGwgcGFnZXMgKi8KKyAgICBwcnRfZHNjX3RleHRsaW5lKCJQYWdlTWVkaWEiLCBwcnRfbWVkaWFzaXplW3BydF9tZWRpYV0ubmFtZSk7CisKKyAgICBwcnRfZHNjX25vYXJnKCJFbmREZWZhdWx0cyIpOworCisgICAgLyoKKyAgICAgKiBQUyBEb2N1bWVudCBwcm9sb2cgaW5jbHVzaW9uIC0gYWxsIHJlcXVpcmVkIHByb2NzZXRzLgorICAgICAqLworICAgIHBydF9kc2Nfbm9hcmcoIkJlZ2luUHJvbG9nIik7CisKKyAgICAvKiBGb3Igbm93IHRoZXJlIGlzIGp1c3QgdGhlIG9uZSBwcm9jc2V0IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBQUyBmaWxlLiAqLworICAgIGlmICghcHJ0X2FkZF9yZXNvdXJjZSgmcmVzX3Byb2xvZykpCisJcmV0dXJuIEZBTFNFOworCisgICAgLyogVGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBmb250IGVuY29kaW5nIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBQUyBmaWxlLiAqLworICAgIGlmICghcHJ0X2FkZF9yZXNvdXJjZSgmcmVzX2VuY29kaW5nKSkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBwcnRfZHNjX25vYXJnKCJFbmRQcm9sb2ciKTsKKworICAgIC8qCisgICAgICogUFMgRG9jdW1lbnQgc2V0dXAgLSBtdXN0IGFwcGVhciBhZnRlciB0aGUgcHJvbG9nCisgICAgICovCisgICAgcHJ0X2RzY19ub2FyZygiQmVnaW5TZXR1cCIpOworCisgICAgLyogRGV2aWNlIHNldHVwIC0gcGFnZSBzaXplIGFuZCBudW1iZXIgb2YgdW5jb2xsYXRlZCBjb3BpZXMgKi8KKyAgICBwcnRfd3JpdGVfaW50KChpbnQpcHJ0X21lZGlhc2l6ZVtwcnRfbWVkaWFdLndpZHRoKTsKKyAgICBwcnRfd3JpdGVfaW50KChpbnQpcHJ0X21lZGlhc2l6ZVtwcnRfbWVkaWFdLmhlaWdodCk7CisgICAgcHJ0X3dyaXRlX2ludCgwKTsKKyAgICBwcnRfd3JpdGVfc3RyaW5nKCJzcHNcbiIpOworICAgIHBydF93cml0ZV9pbnQocHJ0X251bV9jb3BpZXMpOworICAgIHBydF93cml0ZV9zdHJpbmcoIm5jXG4iKTsKKyAgICBwcnRfd3JpdGVfYm9vbGVhbihwcnRfZHVwbGV4KTsKKyAgICBwcnRfd3JpdGVfYm9vbGVhbihwcnRfdHVtYmxlKTsKKyAgICBwcnRfd3JpdGVfc3RyaW5nKCJkdFxuIik7CisgICAgcHJ0X3dyaXRlX2Jvb2xlYW4ocHJ0X2NvbGxhdGUpOworICAgIHBydF93cml0ZV9zdHJpbmcoImNcbiIpOworCisgICAgLyogRm9udCByZXNvdXJjZSBpbmNsdXNpb24gYW5kIGRlZmluaXRpb24gKi8KKyAgICBwcnRfZHNjX3Jlc291cmNlcygiSW5jbHVkZVJlc291cmNlIiwgImZvbnQiLCAxLAorCQkJCSAmcHJ0X3BzX2ZvbnQucHNfZm9udG5hbWVbUFJUX1BTX0ZPTlRfUk9NQU5dKTsKKyAgICBwcnRfZGVmX2ZvbnQoIkYwIiwgKGNoYXIgKilwX2VuY29kaW5nLCAoaW50KXBydF9saW5lX2hlaWdodCwKKwkJCQkgIHBydF9wc19mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX1JPTUFOXSk7CisgICAgcHJ0X2RzY19yZXNvdXJjZXMoIkluY2x1ZGVSZXNvdXJjZSIsICJmb250IiwgMSwKKwkJCQkgICZwcnRfcHNfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9CT0xEXSk7CisgICAgcHJ0X2RlZl9mb250KCJGMSIsIChjaGFyICopcF9lbmNvZGluZywgKGludClwcnRfbGluZV9oZWlnaHQsCisJCQkJICAgcHJ0X3BzX2ZvbnQucHNfZm9udG5hbWVbUFJUX1BTX0ZPTlRfQk9MRF0pOworICAgIHBydF9kc2NfcmVzb3VyY2VzKCJJbmNsdWRlUmVzb3VyY2UiLCAiZm9udCIsIDEsCisJCQkgICAgICAgJnBydF9wc19mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX09CTElRVUVdKTsKKyAgICBwcnRfZGVmX2ZvbnQoIkYyIiwgKGNoYXIgKilwX2VuY29kaW5nLCAoaW50KXBydF9saW5lX2hlaWdodCwKKwkJCQlwcnRfcHNfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9PQkxJUVVFXSk7CisgICAgcHJ0X2RzY19yZXNvdXJjZXMoIkluY2x1ZGVSZXNvdXJjZSIsICJmb250IiwgMSwKKwkJCSAgICZwcnRfcHNfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9CT0xET0JMSVFVRV0pOworICAgIHBydF9kZWZfZm9udCgiRjMiLCAoY2hhciAqKXBfZW5jb2RpbmcsIChpbnQpcHJ0X2xpbmVfaGVpZ2h0LAorCQkJICAgIHBydF9wc19mb250LnBzX2ZvbnRuYW1lW1BSVF9QU19GT05UX0JPTERPQkxJUVVFXSk7CisKKyAgICAvKiBNaXNjIGNvbnN0YW50IHZhcnMgdXNlZCBmb3IgdW5kZXJsaW5pbmcgYW5kIGJhY2tncm91bmQgcmVjdHMgKi8KKyAgICBwcnRfZGVmX3ZhcigiVU8iLCBQUlRfUFNfRk9OVF9UT19VU0VSKHBydF9saW5lX2hlaWdodCwKKwkJCQkJCXBydF9wc19mb250LnVsaW5lX29mZnNldCksIDIpOworICAgIHBydF9kZWZfdmFyKCJVVyIsIFBSVF9QU19GT05UX1RPX1VTRVIocHJ0X2xpbmVfaGVpZ2h0LAorCQkJCQkJIHBydF9wc19mb250LnVsaW5lX3dpZHRoKSwgMik7CisgICAgcHJ0X2RlZl92YXIoIkJPIiwgcHJ0X2JnY29sX29mZnNldCwgMik7CisKKyAgICBwcnRfZHNjX25vYXJnKCJFbmRTZXR1cCIpOworCisgICAgLyogRmFpbCBpZiBhbnkgcHJvYmxlbXMgd3JpdGluZyBvdXQgdG8gdGhlIFBTIGZpbGUgKi8KKyAgICByZXR1cm4gIXBydF9maWxlX2Vycm9yOworfQorCisgICAgdm9pZAorbWNoX3ByaW50X2VuZChwc2V0dGluZ3MpCisgICAgcHJ0X3NldHRpbmdzX1QgKnBzZXR0aW5nczsKK3sKKyAgICBwcnRfZHNjX25vYXJnKCJUcmFpbGVyIik7CisKKyAgICAvKgorICAgICAqIE91dHB1dCBhbnkgaW5mbyB3ZSBkb24ndCBrbm93IGluIHRvdG8gdW50aWwgd2UgZmluaXNoCisgICAgICovCisgICAgcHJ0X2RzY19pbnRzKCJQYWdlcyIsIDEsICZwcnRfcGFnZV9udW0pOworCisgICAgcHJ0X2RzY19ub2FyZygiRU9GIik7CisKKyAgICBpZiAoIXBydF9maWxlX2Vycm9yICYmIHBzZXR0aW5ncy0+b3V0ZmlsZSA9PSBOVUxMCisJCQkJCSYmICFnb3RfaW50ICYmICFwc2V0dGluZ3MtPnVzZXJfYWJvcnQpCisgICAgeworCS8qIENsb3NlIHRoZSBmaWxlIGZpcnN0LiAqLworCWlmIChwcnRfcHNfZmQgIT0gTlVMTCkKKwl7CisJICAgIGZjbG9zZShwcnRfcHNfZmQpOworCSAgICBwcnRfcHNfZmQgPSBOVUxMOworCX0KKwlwcnRfbWVzc2FnZSgoY2hhcl91ICopXygiU2VuZGluZyB0byBwcmludGVyLi4uIikpOworCisJLyogTm90IHByaW50aW5nIHRvIGEgZmlsZTogdXNlICdwcmludGV4cHInIHRvIHByaW50IHRoZSBmaWxlLiAqLworCWlmIChldmFsX3ByaW50ZXhwcihwcnRfcHNfZmlsZV9uYW1lLCBwc2V0dGluZ3MtPmFyZ3VtZW50cykgPT0gRkFJTCkKKwkgICAgRU1TRyhfKCJFMzY1OiBGYWlsZWQgdG8gcHJpbnQgUG9zdFNjcmlwdCBmaWxlIikpOworCWVsc2UKKwkgICAgcHJ0X21lc3NhZ2UoKGNoYXJfdSAqKV8oIlByaW50IGpvYiBzZW50LiIpKTsKKyAgICB9CisKKyAgICBtY2hfcHJpbnRfY2xlYW51cCgpOworfQorCisgICAgaW50CittY2hfcHJpbnRfZW5kX3BhZ2UoKQoreworICAgIHBydF9mbHVzaF9idWZmZXIoKTsKKworICAgIHBydF93cml0ZV9zdHJpbmcoInJlIHNwXG4iKTsKKworICAgIHBydF9kc2Nfbm9hcmcoIlBhZ2VUcmFpbGVyIik7CisKKyAgICByZXR1cm4gIXBydF9maWxlX2Vycm9yOworfQorCisvKkFSR1NVU0VEKi8KKyAgICBpbnQKK21jaF9wcmludF9iZWdpbl9wYWdlKHN0cikKKyAgICBjaGFyX3UJKnN0cjsKK3sKKyAgICBpbnQJCXBhZ2VfbnVtWzJdOworCisgICAgcHJ0X3BhZ2VfbnVtKys7CisKKyAgICBwYWdlX251bVswXSA9IHBhZ2VfbnVtWzFdID0gcHJ0X3BhZ2VfbnVtOworICAgIHBydF9kc2NfaW50cygiUGFnZSIsIDIsIHBhZ2VfbnVtKTsKKworICAgIHBydF9kc2Nfbm9hcmcoIkJlZ2luUGFnZVNldHVwIik7CisKKyAgICBwcnRfd3JpdGVfc3RyaW5nKCJzdlxuMCBnXG5GMCBzZlxuIik7CisgICAgcHJ0X2ZnY29sID0gUFJDT0xPUl9CTEFDSzsKKyAgICBwcnRfYmdjb2wgPSBQUkNPTE9SX1dISVRFOworICAgIHBydF9mb250ID0gUFJUX1BTX0ZPTlRfUk9NQU47CisKKyAgICAvKiBTZXQgdXAgcGFnZSB0cmFuc2Zvcm1hdGlvbiBmb3IgbGFuZHNjYXBlIHByaW50aW5nLiAqLworICAgIGlmICghcHJ0X3BvcnRyYWl0KQorICAgIHsKKwlwcnRfd3JpdGVfaW50KC0oKGludClwcnRfbWVkaWFzaXplW3BydF9tZWRpYV0ud2lkdGgpKTsKKwlwcnRfd3JpdGVfc3RyaW5nKCJzbFxuIik7CisgICAgfQorCisgICAgcHJ0X2RzY19ub2FyZygiRW5kUGFnZVNldHVwIik7CisKKyAgICAvKiBXZSBoYXZlIHJlc2V0IHRoZSBmb250IGF0dHJpYnV0ZXMsIGZvcmNlIHNldHRpbmcgdGhlbSBhZ2Fpbi4gKi8KKyAgICBjdXJyX2JnID0gKGxvbmdfdSkweGZmZmZmZmZmOworICAgIGN1cnJfZmcgPSAobG9uZ191KTB4ZmZmZmZmZmY7CisgICAgY3Vycl9ib2xkID0gTUFZQkU7CisKKyAgICByZXR1cm4gIXBydF9maWxlX2Vycm9yOworfQorCisgICAgaW50CittY2hfcHJpbnRfYmxhbmtfcGFnZSgpCit7CisgICAgcmV0dXJuIChtY2hfcHJpbnRfYmVnaW5fcGFnZShOVUxMKSA/IChtY2hfcHJpbnRfZW5kX3BhZ2UoKSkgOiBGQUxTRSk7Cit9CisKK3N0YXRpYyBmbG9hdCBwcnRfcG9zX3ggPSAwOworc3RhdGljIGZsb2F0IHBydF9wb3NfeSA9IDA7CisKKyAgICB2b2lkCittY2hfcHJpbnRfc3RhcnRfbGluZShtYXJnaW4sIHBhZ2VfbGluZSkKKyAgICBpbnQJCW1hcmdpbjsKKyAgICBpbnQJCXBhZ2VfbGluZTsKK3sKKyAgICBwcnRfcG9zX3ggPSBwcnRfbGVmdF9tYXJnaW47CisgICAgaWYgKG1hcmdpbikKKwlwcnRfcG9zX3ggLT0gcHJ0X251bWJlcl93aWR0aDsKKworICAgIHBydF9wb3NfeSA9IHBydF90b3BfbWFyZ2luIC0gcHJ0X2ZpcnN0X2xpbmVfaGVpZ2h0IC0KKwkJCQkJcGFnZV9saW5lICogcHJ0X2xpbmVfaGVpZ2h0OworCisgICAgcHJ0X2F0dHJpYnV0ZV9jaGFuZ2UgPSBUUlVFOworICAgIHBydF9uZWVkX21vdmV0byA9IFRSVUU7Cit9CisKKy8qQVJHU1VTRUQqLworICAgIGludAorbWNoX3ByaW50X3RleHRfb3V0KHAsIGxlbikKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlsZW47Cit7CisgICAgaW50CQluZWVkX2JyZWFrOworICAgIGNoYXJfdQljaDsKKyAgICBjaGFyX3UgICAgICBjaF9idWZmWzhdOworCisgICAgLyogT3V0cHV0IGFueSByZXF1aXJlZCBjaGFuZ2VzIHRvIHRoZSBncmFwaGljcyBzdGF0ZSwgYWZ0ZXIgZmx1c2hpbmcgYW55CisgICAgICogdGV4dCBidWZmZXJlZCBzbyBmYXIuCisgICAgICovCisgICAgaWYgKHBydF9hdHRyaWJ1dGVfY2hhbmdlKQorICAgIHsKKwlwcnRfZmx1c2hfYnVmZmVyKCk7CisJLyogUmVzZXQgY291bnQgb2YgbnVtYmVyIG9mIGNoYXJzIHRoYXQgd2lsbCBiZSBwcmludGVkICovCisJcHJ0X3RleHRfY291bnQgPSAwOworCisJaWYgKHBydF9uZWVkX21vdmV0bykKKwl7CisJICAgIHBydF9wb3NfeF9tb3ZldG8gPSBwcnRfcG9zX3g7CisJICAgIHBydF9wb3NfeV9tb3ZldG8gPSBwcnRfcG9zX3k7CisJICAgIHBydF9kb19tb3ZldG8gPSBUUlVFOworCisJICAgIHBydF9uZWVkX21vdmV0byA9IEZBTFNFOworCX0KKwlpZiAocHJ0X25lZWRfZm9udCkKKwl7CisJICAgIHBydF93cml0ZV9zdHJpbmcoIkYiKTsKKwkgICAgcHJ0X3dyaXRlX2ludChwcnRfZm9udCk7CisJICAgIHBydF93cml0ZV9zdHJpbmcoInNmXG4iKTsKKwkgICAgcHJ0X25lZWRfZm9udCA9IEZBTFNFOworCX0KKwlpZiAocHJ0X25lZWRfZmdjb2wpCisJeworCSAgICBpbnQgICAgIHIsIGcsIGI7CisJICAgIHIgPSAoKHVuc2lnbmVkKXBydF9mZ2NvbCAmIDB4ZmYwMDAwKSA+PiAxNjsKKwkgICAgZyA9ICgodW5zaWduZWQpcHJ0X2ZnY29sICYgMHhmZjAwKSA+PiA4OworCSAgICBiID0gcHJ0X2ZnY29sICYgMHhmZjsKKworCSAgICBwcnRfd3JpdGVfcmVhbChyIC8gMjU1LjAsIDMpOworCSAgICBpZiAociA9PSBnICYmIGcgPT0gYikKKwkgICAgeworCQlwcnRfd3JpdGVfc3RyaW5nKCJnXG4iKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJcHJ0X3dyaXRlX3JlYWwoZyAvIDI1NS4wLCAzKTsKKwkJcHJ0X3dyaXRlX3JlYWwoYiAvIDI1NS4wLCAzKTsKKwkJcHJ0X3dyaXRlX3N0cmluZygiclxuIik7CisJICAgIH0KKwkgICAgcHJ0X25lZWRfZmdjb2wgPSBGQUxTRTsKKwl9CisKKwlpZiAocHJ0X2JnY29sICE9IFBSQ09MT1JfV0hJVEUpCisJeworCSAgICBwcnRfbmV3X2JnY29sID0gcHJ0X2JnY29sOworCSAgICBpZiAocHJ0X25lZWRfYmdjb2wpCisJCXBydF9kb19iZ2NvbCA9IFRSVUU7CisJfQorCWVsc2UKKwkgICAgcHJ0X2RvX2JnY29sID0gRkFMU0U7CisJcHJ0X25lZWRfYmdjb2wgPSBGQUxTRTsKKworCWlmIChwcnRfbmVlZF91bmRlcmxpbmUpCisJICAgIHBydF9kb191bmRlcmxpbmUgPSBwcnRfdW5kZXJsaW5lOworCXBydF9uZWVkX3VuZGVybGluZSA9IEZBTFNFOworCisJcHJ0X2F0dHJpYnV0ZV9jaGFuZ2UgPSBGQUxTRTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKHBydF9kb19jb252KQorICAgIHsKKwkvKiBDb252ZXJ0IGZyb20gbXVsdGktYnl0ZSB0byA4LWJpdCBlbmNvZGluZyAqLworCXAgPSBzdHJpbmdfY29udmVydCgmcHJ0X2NvbnYsIHAsICZsZW4pOworCWlmIChwID09IE5VTEwpCisJICAgIHAgPSAoY2hhcl91ICopIiI7CisgICAgfQorI2VuZGlmCisgICAgLyogQWRkIG5leHQgY2hhcmFjdGVyIHRvIGJ1ZmZlciBvZiBjaGFyYWN0ZXJzIHRvIG91dHB1dC4KKyAgICAgKiBOb3RlOiBPbmUgcHJpbnRlZCBjaGFyYWN0ZXIgbWF5IHJlcXVpcmUgc2V2ZXJhbCBQUyBjaGFyYWN0ZXJzIHRvCisgICAgICogcmVwcmVzZW50IGl0LCBidXQgd2Ugb25seSBjb3VudCB0aGVtIGFzIG9uZSBwcmludGVkIGNoYXJhY3Rlci4KKyAgICAgKi8KKyAgICBjaCA9ICpwOworICAgIGlmIChjaCA8IDMyIHx8IGNoID09ICcoJyB8fCBjaCA9PSAnKScgfHwgY2ggPT0gJ1xcJykKKyAgICB7CisJLyogQ29udmVydCBub24tcHJpbnRpbmcgY2hhcmFjdGVycyB0byBlaXRoZXIgdGhlaXIgZXNjYXBlIG9yIG9jdGFsCisJICogc2VxdWVuY2UsIGVuc3VyZXMgUFMgc2VudCBvdmVyIGEgc2VyaWFsIGxpbmUgZG9lcyBub3QgaW50ZXJmZXJlIHdpdGgKKwkgKiB0aGUgY29tbXMgcHJvdG9jb2wuCisJICogTm90ZTogRm9yIEVCQ0RJQyB3ZSBuZWVkIHRvIHdyaXRlIG91dCB0aGUgZXNjYXBlIHNlcXVlbmNlcyBhcyBBU0NJSQorCSAqIGNvZGVzIQorCSAqIE5vdGUgMjogQ2hhciBjb2RlcyA8IDMyIGFyZSBpZGVudGljYWwgaW4gRUJDRElDIGFuZCBBU0NJSSBBRkFJSyEKKwkgKi8KKwlnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCdcXCcsIDAxMzQpKTsKKwlzd2l0Y2ggKGNoKQorCXsKKwkgICAgY2FzZSBCUzogICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCdiJywgMDE0MikpOyBicmVhazsKKwkgICAgY2FzZSBUQUI6ICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCd0JywgMDE2NCkpOyBicmVhazsKKwkgICAgY2FzZSBOTDogICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCduJywgMDE1NikpOyBicmVhazsKKwkgICAgY2FzZSBGRjogICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCdmJywgMDE0NikpOyBicmVhazsKKwkgICAgY2FzZSBDQVI6ICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCdyJywgMDE2MikpOyBicmVhazsKKwkgICAgY2FzZSAnKCc6ICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCcoJywgMDA1MCkpOyBicmVhazsKKwkgICAgY2FzZSAnKSc6ICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCcpJywgMDA1MSkpOyBicmVhazsKKwkgICAgY2FzZSAnXFwnOiBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIElGX0VCKCdcXCcsIDAxMzQpKTsgYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkJICAgICAgIHNwcmludGYoKGNoYXIgKiljaF9idWZmLCAiJTAzbyIsICh1bnNpZ25lZCBpbnQpY2gpOworI2lmZGVmIEVCQ0RJQworCQkgICAgICAgZWJjZGljMmFzY2lpKGNoX2J1ZmYsIDMpOworI2VuZGlmCisJCSAgICAgICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIGNoX2J1ZmZbMF0pOworCQkgICAgICAgZ2FfYXBwZW5kKCZwcnRfcHNfYnVmZmVyLCBjaF9idWZmWzFdKTsKKwkJICAgICAgIGdhX2FwcGVuZCgmcHJ0X3BzX2J1ZmZlciwgY2hfYnVmZlsyXSk7CisJCSAgICAgICBicmVhazsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIGNoKTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKiBOZWVkIHRvIGZyZWUgYW55IHRyYW5zbGF0ZWQgY2hhcmFjdGVycyAqLworICAgIGlmIChwcnRfZG9fY29udiAmJiAoKnAgIT0gTlVMKSkKKwl2aW1fZnJlZShwKTsKKyNlbmRpZgorCisgICAgcHJ0X3RleHRfY291bnQrKzsKKyAgICBwcnRfcG9zX3ggKz0gcHJ0X2NoYXJfd2lkdGg7CisKKyAgICAvKiBUaGUgZG93bnNpZGUgb2YgZnAgLSBuZWVkIGEgbGl0dGxlIHRvbGVyYW5jZSBpbiB0aGUgcmlnaHQgbWFyZ2luIGNoZWNrICovCisgICAgbmVlZF9icmVhayA9IChwcnRfcG9zX3ggKyBwcnRfY2hhcl93aWR0aCA+IChwcnRfcmlnaHRfbWFyZ2luICsgMC4wMSkpOworCisgICAgaWYgKG5lZWRfYnJlYWspCisJcHJ0X2ZsdXNoX2J1ZmZlcigpOworCisgICAgcmV0dXJuIG5lZWRfYnJlYWs7Cit9CisKKyAgICB2b2lkCittY2hfcHJpbnRfc2V0X2ZvbnQoaUJvbGQsIGlJdGFsaWMsIGlVbmRlcmxpbmUpCisgICAgaW50CQlpQm9sZDsKKyAgICBpbnQJCWlJdGFsaWM7CisgICAgaW50CQlpVW5kZXJsaW5lOworeworICAgIGludAkJZm9udCA9IDA7CisKKyAgICBpZiAoaUJvbGQpCisJZm9udCB8PSAweDAxOworICAgIGlmIChpSXRhbGljKQorCWZvbnQgfD0gMHgwMjsKKworICAgIGlmIChmb250ICE9IHBydF9mb250KQorICAgIHsKKwlwcnRfZm9udCA9IGZvbnQ7CisJcHJ0X2F0dHJpYnV0ZV9jaGFuZ2UgPSBUUlVFOworCXBydF9uZWVkX2ZvbnQgPSBUUlVFOworICAgIH0KKyAgICBpZiAocHJ0X3VuZGVybGluZSAhPSBpVW5kZXJsaW5lKQorICAgIHsKKwlwcnRfdW5kZXJsaW5lID0gaVVuZGVybGluZTsKKwlwcnRfYXR0cmlidXRlX2NoYW5nZSA9IFRSVUU7CisJcHJ0X25lZWRfdW5kZXJsaW5lID0gVFJVRTsKKyAgICB9Cit9CisKKyAgICB2b2lkCittY2hfcHJpbnRfc2V0X2JnKGJnY29sKQorICAgIGxvbmdfdQliZ2NvbDsKK3sKKyAgICBwcnRfYmdjb2wgPSBiZ2NvbDsKKyAgICBwcnRfYXR0cmlidXRlX2NoYW5nZSA9IFRSVUU7CisgICAgcHJ0X25lZWRfYmdjb2wgPSBUUlVFOworfQorCisgICAgdm9pZAorbWNoX3ByaW50X3NldF9mZyhmZ2NvbCkKKyAgICBsb25nX3UJZmdjb2w7Cit7CisgICAgaWYgKGZnY29sICE9IChsb25nX3UpcHJ0X2ZnY29sKQorICAgIHsKKwlwcnRfZmdjb2wgPSBmZ2NvbDsKKwlwcnRfYXR0cmlidXRlX2NoYW5nZSA9IFRSVUU7CisJcHJ0X25lZWRfZmdjb2wgPSBUUlVFOworICAgIH0KK30KKworIyBlbmRpZiAvKkZFQVRfUE9TVFNDUklQVCovCisjZW5kaWYgLypGRUFUX1BSSU5URVIqLworCisjaWYgKGRlZmluZWQoSEFWRV9MT0NBTEVfSCkgfHwgZGVmaW5lZChYX0xPQ0FMRSkpIFwKKwkmJiAoZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoRkVBVF9NVUxUSV9MQU5HKSkKK3N0YXRpYyBjaGFyICpnZXRfbG9jYWxlX3ZhbCBfX0FSR1MoKGludCB3aGF0KSk7CisKKyAgICBzdGF0aWMgY2hhciAqCitnZXRfbG9jYWxlX3ZhbCh3aGF0KQorICAgIGludAkJd2hhdDsKK3sKKyAgICBjaGFyCSpsb2M7CisKKyAgICAvKiBPYnRhaW4gdGhlIGxvY2FsZSB2YWx1ZSBmcm9tIHRoZSBsaWJyYXJpZXMuICBGb3IgREpHUFAgdGhpcyBpcworICAgICAqIHJlZGVmaW5lZCBhbmQgaXQgZG9lc24ndCB1c2UgdGhlIGFyZ3VtZW50cy4gKi8KKyAgICBsb2MgPSBzZXRsb2NhbGUod2hhdCwgTlVMTCk7CisKKyMgaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCisgICAgaWYgKGxvYyAhPSBOVUxMKQorICAgIHsKKwljaGFyX3UJKnA7CisKKwkvKiBCb3JsYW5kIHJldHVybnMgc29tZXRoaW5nIGxpa2UgIkxDX0NUWVBFPTxuYW1lPlxuIgorCSAqIExldCdzIHRyeSB0byBmaXggdGhhdCBidWcgaGVyZS4uLiAqLworCXAgPSB2aW1fc3RyY2hyKGxvYywgJz0nKTsKKwlpZiAocCAhPSBOVUxMKQorCXsKKwkgICAgbG9jID0gKytwOworCSAgICB3aGlsZSAoKnAgIT0gTlVMKQkvKiByZW1vdmUgdHJhaWxpbmcgbmV3bGluZSAqLworCSAgICB7CisJCWlmICgqcCA8ICcgJykKKwkJeworCQkgICAgKnAgPSBOVUw7CisJCSAgICBicmVhazsKKwkJfQorCQkrK3A7CisJICAgIH0KKwl9CisgICAgfQorIyBlbmRpZgorCisgICAgcmV0dXJuIGxvYzsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBXSU4zMgorLyoKKyAqIE9uIE1TLVdpbmRvd3MgbG9jYWxlIG5hbWVzIGFyZSBzdHJpbmdzIGxpa2UgIkdlcm1hbl9HZXJtYW55LjEyNTIiLCBidXQKKyAqIGdldHRleHQgZXhwZWN0cyAiZGUiLiAgVHJ5IHRvIHRyYW5zbGF0ZSBvbmUgaW50byBhbm90aGVyIGhlcmUgZm9yIGEgZmV3CisgKiBzdXBwb3J0ZWQgbGFuZ3VhZ2VzLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitnZXR0ZXh0X2xhbmcoY2hhcl91ICpuYW1lKQoreworICAgIGludAkJaTsKKyAgICBzdGF0aWMgY2hhciAqKG10YWJsZVtdKSA9IHsKKwkJCSJhZnJpa2FhbnMiLAkiYWYiLAorCQkJImN6ZWNoIiwJImNzIiwKKwkJCSJkdXRjaCIsCSJubCIsCisJCQkiZ2VybWFuIiwJImRlIiwKKwkJCSJlbmdsaXNoX3VuaXRlZCBraW5nZG9tIiwgImVuX0dCIiwKKwkJCSJzcGFuaXNoIiwJImVzIiwKKwkJCSJmcmVuY2giLAkiZnIiLAorCQkJIml0YWxpYW4iLAkiaXQiLAorCQkJImphcGFuZXNlIiwJImphIiwKKwkJCSJrb3JlYW4iLAkia28iLAorCQkJIm5vcndlZ2lhbiIsCSJubyIsCisJCQkicG9saXNoIiwJInBsIiwKKwkJCSJydXNzaWFuIiwJInJ1IiwKKwkJCSJzbG92YWsiLAkic2siLAorCQkJInN3ZWRpc2giLAkic3YiLAorCQkJInVrcmFpbmlhbiIsCSJ1ayIsCisJCQkiY2hpbmVzZV9jaGluYSIsICJ6aF9DTiIsCisJCQkiY2hpbmVzZV90YWl3YW4iLCAiemhfVFciLAorCQkJTlVMTH07CisKKyAgICBmb3IgKGkgPSAwOyBtdGFibGVbaV0gIT0gTlVMTDsgaSArPSAyKQorCWlmIChTVFJOSUNNUChtdGFibGVbaV0sIG5hbWUsIFNUUkxFTihtdGFibGVbaV0pKSA9PSAwKQorCSAgICByZXR1cm4gbXRhYmxlW2kgKyAxXTsKKyAgICByZXR1cm4gbmFtZTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX01VTFRJX0xBTkcpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogT2J0YWluIHRoZSBjdXJyZW50IG1lc3NhZ2VzIGxhbmd1YWdlLiAgVXNlZCB0byBzZXQgdGhlIGRlZmF1bHQgZm9yCisgKiAnaGVscGxhbmcnLiAgTWF5IHJldHVybiBOVUxMIG9yIGFuIGVtcHR5IHN0cmluZy4KKyAqLworICAgIGNoYXJfdSAqCitnZXRfbWVzc19sYW5nKCkKK3sKKyAgICBjaGFyX3UgKnA7CisKKyMgaWYgKGRlZmluZWQoSEFWRV9MT0NBTEVfSCkgfHwgZGVmaW5lZChYX0xPQ0FMRSkpCisjICBpZiBkZWZpbmVkKExDX01FU1NBR0VTKQorICAgIHAgPSAoY2hhcl91ICopZ2V0X2xvY2FsZV92YWwoTENfTUVTU0FHRVMpOworIyAgZWxzZQorICAgIC8qIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBXaW4zMiwgd2hlcmUgTENfTUVTU0FHRVMgaXMgbm90IGRlZmluZWQgYW5kICRMQU5HCisgICAgICogbWF5IGJlIHNldCB0byB0aGUgTENJRCBudW1iZXIuICovCisgICAgcCA9IChjaGFyX3UgKilnZXRfbG9jYWxlX3ZhbChMQ19BTEwpOworIyAgZW5kaWYKKyMgZWxzZQorICAgIHAgPSBtY2hfZ2V0ZW52KChjaGFyX3UgKikiTENfQUxMIik7CisgICAgaWYgKHAgPT0gTlVMTCB8fCAqcCA9PSBOVUwpCisgICAgeworCXAgPSBtY2hfZ2V0ZW52KChjaGFyX3UgKikiTENfTUVTU0FHRVMiKTsKKwlpZiAocCA9PSBOVUxMIHx8ICpwID09IE5VTCkKKwkgICAgcCA9IG1jaF9nZXRlbnYoKGNoYXJfdSAqKSJMQU5HIik7CisgICAgfQorIyBlbmRpZgorIyBpZmRlZiBXSU4zMgorICAgIHAgPSBnZXR0ZXh0X2xhbmcocCk7CisjIGVuZGlmCisgICAgcmV0dXJuIHA7Cit9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKExDX01FU1NBR0VTKSBcCisgICAgJiYgKCgoZGVmaW5lZChIQVZFX0xPQ0FMRV9IKSB8fCBkZWZpbmVkKFhfTE9DQUxFKSkgXAorCQkmJiAoZGVmaW5lZChGRUFUX0dFVFRFWFQpIHx8IGRlZmluZWQoRkVBVF9NQllURSkpKSBcCisJICAgIHx8IGRlZmluZWQoRkVBVF9FVkFMKSkKK3N0YXRpYyBjaGFyX3UgKmdldF9tZXNzX2VudiBfX0FSR1MoKHZvaWQpKTsKKworLyoKKyAqIEdldCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IgbWVzc2FnZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2dldF9tZXNzX2VudigpCit7CisgICAgY2hhcl91CSpwOworCisgICAgcCA9IG1jaF9nZXRlbnYoKGNoYXJfdSAqKSJMQ19BTEwiKTsKKyAgICBpZiAocCA9PSBOVUxMIHx8ICpwID09IE5VTCkKKyAgICB7CisJcCA9IG1jaF9nZXRlbnYoKGNoYXJfdSAqKSJMQ19NRVNTQUdFUyIpOworCWlmIChwID09IE5VTEwgfHwgKnAgPT0gTlVMKQorCXsKKwkgICAgcCA9IG1jaF9nZXRlbnYoKGNoYXJfdSAqKSJMQU5HIik7CisJICAgIGlmIChwICE9IE5VTEwgJiYgVklNX0lTRElHSVQoKnApKQorCQlwID0gTlVMTDsJCS8qIGlnbm9yZSBzb21ldGhpbmcgbGlrZSAiMTA0MyIgKi8KKyMgaWYgZGVmaW5lZChIQVZFX0xPQ0FMRV9IKSB8fCBkZWZpbmVkKFhfTE9DQUxFKQorCSAgICBpZiAocCA9PSBOVUxMIHx8ICpwID09IE5VTCkKKwkJcCA9IChjaGFyX3UgKilnZXRfbG9jYWxlX3ZhbChMQ19DVFlQRSk7CisjIGVuZGlmCisJfQorICAgIH0KKyAgICByZXR1cm4gcDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qCisgKiBTZXQgdGhlICJ2OmxhbmciIHZhcmlhYmxlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUgc2V0dGluZy4KKyAqIEFsc28gZG8gInY6bGNfdGltZSJhbmQgInY6Y3R5cGUiLgorICovCisgICAgdm9pZAorc2V0X2xhbmdfdmFyKCkKK3sKKyAgICBjaGFyX3UJKmxvYzsKKworIyBpZiBkZWZpbmVkKEhBVkVfTE9DQUxFX0gpIHx8IGRlZmluZWQoWF9MT0NBTEUpCisgICAgbG9jID0gKGNoYXJfdSAqKWdldF9sb2NhbGVfdmFsKExDX0NUWVBFKTsKKyMgZWxzZQorICAgIC8qIHNldGxvY2FsZSgpIG5vdCBzdXBwb3J0ZWQ6IHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSAqLworICAgIGxvYyA9IChjaGFyX3UgKikiQyI7CisjIGVuZGlmCisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0NUWVBFLCBsb2MsIC0xKTsKKworICAgIC8qIFdoZW4gTENfTUVTU0FHRVMgaXNuJ3QgZGVmaW5lZCB1c2UgdGhlIHZhbHVlIGZyb20gJExDX01FU1NBR0VTLCBmYWxsCisgICAgICogYmFjayB0byBMQ19DVFlQRSBpZiBpdCdzIGVtcHR5LiAqLworIyBpZiAoZGVmaW5lZChIQVZFX0xPQ0FMRV9IKSB8fCBkZWZpbmVkKFhfTE9DQUxFKSkgJiYgZGVmaW5lZChMQ19NRVNTQUdFUykKKyAgICBsb2MgPSAoY2hhcl91ICopZ2V0X2xvY2FsZV92YWwoTENfTUVTU0FHRVMpOworIyBlbHNlCisgICAgbG9jID0gZ2V0X21lc3NfZW52KCk7CisjIGVuZGlmCisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0xBTkcsIGxvYywgLTEpOworCisjIGlmIGRlZmluZWQoSEFWRV9MT0NBTEVfSCkgfHwgZGVmaW5lZChYX0xPQ0FMRSkKKyAgICBsb2MgPSAoY2hhcl91ICopZ2V0X2xvY2FsZV92YWwoTENfVElNRSk7CisjIGVuZGlmCisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0xDX1RJTUUsIGxvYywgLTEpOworfQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChIQVZFX0xPQ0FMRV9IKSB8fCBkZWZpbmVkKFhfTE9DQUxFKSkgXAorCSYmIChkZWZpbmVkKEZFQVRfR0VUVEVYVCkgfHwgZGVmaW5lZChGRUFUX01CWVRFKSkKKy8qCisgKiAiOmxhbmd1YWdlIjogIFNldCB0aGUgbGFuZ3VhZ2UgKGxvY2FsZSkuCisgKi8KKyAgICB2b2lkCitleF9sYW5ndWFnZShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGNoYXIJKmxvYzsKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJd2hhdCA9IExDX0FMTDsKKyAgICBjaGFyCSp3aGF0c3RyID0gIiI7CisjaWZkZWYgTENfTUVTU0FHRVMKKyMgZGVmaW5lIFZJTV9MQ19NRVNTQUdFUyBMQ19NRVNTQUdFUworI2Vsc2UKKyMgZGVmaW5lIFZJTV9MQ19NRVNTQUdFUyA2Nzg5CisjZW5kaWYKKworICAgIG5hbWUgPSBlYXAtPmFyZzsKKworICAgIC8qIENoZWNrIGZvciAibWVzc2FnZXMge25hbWV9IiwgImN0eXBlIHtuYW1lfSIgb3IgInRpbWUge25hbWV9IiBhcmd1bWVudC4KKyAgICAgKiBBbGxvdyBhYmJyZXZpYXRpb24sIGJ1dCByZXF1aXJlIGF0IGxlYXN0IDMgY2hhcmFjdGVycyB0byBhdm9pZAorICAgICAqIGNvbmZ1c2lvbiB3aXRoIGEgdHdvIGxldHRlciBsYW5ndWFnZSBuYW1lICJtZSIgb3IgImN0Ii4gKi8KKyAgICBwID0gc2tpcHRvd2hpdGUoZWFwLT5hcmcpOworICAgIGlmICgoKnAgPT0gTlVMIHx8IHZpbV9pc3doaXRlKCpwKSkgJiYgcCAtIGVhcC0+YXJnID49IDMpCisgICAgeworCWlmIChTVFJOSUNNUChlYXAtPmFyZywgIm1lc3NhZ2VzIiwgcCAtIGVhcC0+YXJnKSA9PSAwKQorCXsKKwkgICAgd2hhdCA9IFZJTV9MQ19NRVNTQUdFUzsKKwkgICAgbmFtZSA9IHNraXB3aGl0ZShwKTsKKwkgICAgd2hhdHN0ciA9ICJtZXNzYWdlcyAiOworCX0KKwllbHNlIGlmIChTVFJOSUNNUChlYXAtPmFyZywgImN0eXBlIiwgcCAtIGVhcC0+YXJnKSA9PSAwKQorCXsKKwkgICAgd2hhdCA9IExDX0NUWVBFOworCSAgICBuYW1lID0gc2tpcHdoaXRlKHApOworCSAgICB3aGF0c3RyID0gImN0eXBlICI7CisJfQorCWVsc2UgaWYgKFNUUk5JQ01QKGVhcC0+YXJnLCAidGltZSIsIHAgLSBlYXAtPmFyZykgPT0gMCkKKwl7CisJICAgIHdoYXQgPSBMQ19USU1FOworCSAgICBuYW1lID0gc2tpcHdoaXRlKHApOworCSAgICB3aGF0c3RyID0gInRpbWUgIjsKKwl9CisgICAgfQorCisgICAgaWYgKCpuYW1lID09IE5VTCkKKyAgICB7CisjaWZuZGVmIExDX01FU1NBR0VTCisJaWYgKHdoYXQgPT0gVklNX0xDX01FU1NBR0VTKQorCSAgICBwID0gZ2V0X21lc3NfZW52KCk7CisJZWxzZQorI2VuZGlmCisJICAgIHAgPSAoY2hhcl91ICopc2V0bG9jYWxlKHdoYXQsIE5VTEwpOworCWlmIChwID09IE5VTEwgfHwgKnAgPT0gTlVMKQorCSAgICBwID0gKGNoYXJfdSAqKSJVbmtub3duIjsKKwlzbXNnKChjaGFyX3UgKilfKCJDdXJyZW50ICVzbGFuZ3VhZ2U6IFwiJXNcIiIpLCB3aGF0c3RyLCBwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZm5kZWYgTENfTUVTU0FHRVMKKwlpZiAod2hhdCA9PSBWSU1fTENfTUVTU0FHRVMpCisJICAgIGxvYyA9ICIiOworCWVsc2UKKyNlbmRpZgorCSAgICBsb2MgPSBzZXRsb2NhbGUod2hhdCwgKGNoYXIgKiluYW1lKTsKKwlpZiAobG9jID09IE5VTEwpCisJICAgIEVNU0cyKF8oIkUxOTc6IENhbm5vdCBzZXQgbGFuZ3VhZ2UgdG8gXCIlc1wiIiksIG5hbWUpOworCWVsc2UKKwl7CisjaWZkZWYgSEFWRV9OTF9NU0dfQ0FUX0NOVFIKKwkgICAgLyogTmVlZCB0byBkbyB0aGlzIGZvciBHTlUgZ2V0dGV4dCwgb3RoZXJ3aXNlIGNhY2hlZCB0cmFuc2xhdGlvbnMKKwkgICAgICogd2lsbCBiZSB1c2VkIGFnYWluLiAqLworCSAgICBleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisKKwkgICAgKytfbmxfbXNnX2NhdF9jbnRyOworI2VuZGlmCisJICAgIC8qIFJlc2V0ICRMQ19BTEwsIG90aGVyd2lzZSBpdCB3b3VsZCBvdmVycnVsZSBldmVyeXRpbmcuICovCisJICAgIHZpbV9zZXRlbnYoKGNoYXJfdSAqKSJMQ19BTEwiLCAoY2hhcl91ICopIiIpOworCisJICAgIGlmICh3aGF0ICE9IExDX1RJTUUpCisJICAgIHsKKwkJLyogVGVsbCBnZXR0ZXh0KCkgd2hhdCB0byB0cmFuc2xhdGUgdG8uICBJdCBhcHBhcmVudGx5IGRvZXNuJ3QKKwkJICogdXNlIHRoZSBjdXJyZW50bHkgZWZmZWN0aXZlIGxvY2FsZS4gIEFsc28gZG8gdGhpcyB3aGVuCisJCSAqIEZFQVRfR0VUVEVYVCBpc24ndCBkZWZpbmVkLCBzbyB0aGF0IHNoZWxsIGNvbW1hbmRzIHVzZSB0aGlzCisJCSAqIHZhbHVlLiAqLworCQlpZiAod2hhdCA9PSBMQ19BTEwpCisJCSAgICB2aW1fc2V0ZW52KChjaGFyX3UgKikiTEFORyIsIG5hbWUpOworCQlpZiAod2hhdCAhPSBMQ19DVFlQRSkKKwkJeworCQkgICAgY2hhcl91CSptbmFtZTsKKyNpZmRlZiBXSU4zMgorCQkgICAgbW5hbWUgPSBnZXR0ZXh0X2xhbmcobmFtZSk7CisjZWxzZQorCQkgICAgbW5hbWUgPSBuYW1lOworI2VuZGlmCisJCSAgICB2aW1fc2V0ZW52KChjaGFyX3UgKikiTENfTUVTU0FHRVMiLCBtbmFtZSk7CisjaWZkZWYgRkVBVF9NVUxUSV9MQU5HCisJCSAgICBzZXRfaGVscGxhbmdfZGVmYXVsdChtbmFtZSk7CisjZW5kaWYKKwkJfQorCisJCS8qIFNldCAkTENfQ1RZUEUsIGJlY2F1c2UgaXQgb3ZlcnJ1bGVzICRMQU5HLCBhbmQKKwkJICogZ3RrX3NldF9sb2NhbGUoKSBjYWxscyBzZXRsb2NhbGUoKSBhZ2Fpbi4gIGdub21lX2luaXQoKQorCQkgKiBzZXRzICRMQ19DVFlQRSB0byAiZW5fVVMiICh0aGF0J3MgYSBidWchKS4gKi8KKwkJaWYgKHdoYXQgIT0gVklNX0xDX01FU1NBR0VTKQorCQkgICAgdmltX3NldGVudigoY2hhcl91ICopIkxDX0NUWVBFIiwgbmFtZSk7CisjIGlmZGVmIEZFQVRfR1VJX0dUSworCQkvKiBMZXQgR1RLIGtub3cgd2hhdCBsb2NhbGUgd2UncmUgdXNpbmcuICBOb3Qgc3VyZSB0aGlzIGlzCisJCSAqIHJlYWxseSBuZWVkZWQuLi4gKi8KKwkJaWYgKGd1aS5pbl91c2UpCisJCSAgICAodm9pZClndGtfc2V0X2xvY2FsZSgpOworIyBlbmRpZgorCSAgICB9CisKKyMgaWZkZWYgRkVBVF9FVkFMCisJICAgIC8qIFNldCB2OmxhbmcsIHY6bGNfdGltZSBhbmQgdjpjdHlwZSB0byB0aGUgZmluYWwgcmVzdWx0LiAqLworCSAgICBzZXRfbGFuZ192YXIoKTsKKyMgZW5kaWYKKwl9CisgICAgfQorfQorCisjIGlmIGRlZmluZWQoRkVBVF9DTURMX0NPTVBMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEZ1bmN0aW9uIGdpdmVuIHRvIEV4cGFuZEdlbmVyaWMoKSB0byBvYnRhaW4gdGhlIHBvc3NpYmxlIGFyZ3VtZW50cyBvZiB0aGUKKyAqICI6bGFuZ3VhZ2UiIGNvbW1hbmQuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIGNoYXJfdSAqCitnZXRfbGFuZ19hcmcoeHAsIGlkeCkKKyAgICBleHBhbmRfVAkqeHA7CisgICAgaW50CQlpZHg7Cit7CisgICAgaWYgKGlkeCA9PSAwKQorCXJldHVybiAoY2hhcl91ICopIm1lc3NhZ2VzIjsKKyAgICBpZiAoaWR4ID09IDEpCisJcmV0dXJuIChjaGFyX3UgKikiY3R5cGUiOworICAgIGlmIChpZHggPT0gMikKKwlyZXR1cm4gKGNoYXJfdSAqKSJ0aW1lIjsKKyAgICByZXR1cm4gTlVMTDsKK30KKyMgZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZXhfZG9jbWQuYyBiL3NyYy9leF9kb2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMzMxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZXhfZG9jbWQuYwpAQCAtMCwwICsxLDk3MTEgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIGV4X2RvY21kLmM6IGZ1bmN0aW9ucyBmb3IgZXhlY3V0aW5nIGFuIEV4IGNvbW1hbmQgbGluZS4KKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgaW5jbHVkZSA8ZmNudGwuaD4JICAgIC8qIGZvciBjaGRpcigpICovCisjZW5kaWYKKworc3RhdGljIGludAlxdWl0bW9yZSA9IDA7CitzdGF0aWMgaW50CWV4X3ByZXNzZWRyZXR1cm4gPSBGQUxTRTsKKyNpZm5kZWYgRkVBVF9QUklOVEVSCisjIGRlZmluZSBleF9oYXJkY29weQlleF9uaQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1VTUl9DTURTCit0eXBlZGVmIHN0cnVjdCB1Y21kCit7CisgICAgY2hhcl91CSp1Y19uYW1lOwkvKiBUaGUgY29tbWFuZCBuYW1lICovCisgICAgbG9uZ191CXVjX2FyZ3Q7CS8qIFRoZSBhcmd1bWVudCB0eXBlICovCisgICAgY2hhcl91CSp1Y19yZXA7CS8qIFRoZSBjb21tYW5kJ3MgcmVwbGFjZW1lbnQgc3RyaW5nICovCisgICAgbG9uZwl1Y19kZWY7CQkvKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSByYW5nZS9jb3VudCAqLworICAgIHNjaWRfVAl1Y19zY3JpcHRJRDsJLyogU0lEIHdoZXJlIHRoZSBjb21tYW5kIHdhcyBkZWZpbmVkICovCisgICAgaW50CQl1Y19jb21wbDsJLyogY29tcGxldGlvbiB0eXBlICovCisjIGlmIGRlZmluZWQoRkVBVF9FVkFMKSAmJiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkKKyAgICBjaGFyX3UJKnVjX2NvbXBsX2FyZzsJLyogY29tcGxldGlvbiBhcmd1bWVudCBpZiBhbnkgKi8KKyMgZW5kaWYKK30gdWNtZF9UOworCisjZGVmaW5lIFVDX0JVRkZFUgkxCS8qIC1idWZmZXI6IGxvY2FsIHRvIGN1cnJlbnQgYnVmZmVyICovCisKK2dhcnJheV9UIHVjbWRzID0gezAsIDAsIHNpemVvZih1Y21kX1QpLCA0LCBOVUxMfTsKKworI2RlZmluZSBVU0VSX0NNRChpKSAoJigodWNtZF9UICopKHVjbWRzLmdhX2RhdGEpKVtpXSkKKyNkZWZpbmUgVVNFUl9DTURfR0EoZ2FwLCBpKSAoJigodWNtZF9UICopKChnYXApLT5nYV9kYXRhKSlbaV0pCisKK3N0YXRpYyB2b2lkIGRvX3VjbWQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkIGV4X2NvbW1hbmQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkIGV4X2NvbWNsZWFyIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZCBleF9kZWxjb21tYW5kIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjIGlmZGVmIEZFQVRfQ01ETF9DT01QTAorc3RhdGljIGNoYXJfdSAqZ2V0X3VzZXJfY29tbWFuZF9uYW1lIF9fQVJHUygoaW50IGlkeCkpOworIyBlbmRpZgorCisjZWxzZQorIyBkZWZpbmUgZXhfY29tbWFuZAlleF9uaQorIyBkZWZpbmUgZXhfY29tY2xlYXIJZXhfbmkKKyMgZGVmaW5lIGV4X2RlbGNvbW1hbmQJZXhfbmkKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9FVkFMCitzdGF0aWMgY2hhcl91CSpkb19vbmVfY21kIF9fQVJHUygoY2hhcl91ICoqLCBpbnQsIHN0cnVjdCBjb25kc3RhY2sgKiwgY2hhcl91ICooKmdldGxpbmUpKGludCwgdm9pZCAqLCBpbnQpLCB2b2lkICpjb29raWUpKTsKKyNlbHNlCitzdGF0aWMgY2hhcl91CSpkb19vbmVfY21kIF9fQVJHUygoY2hhcl91ICoqLCBpbnQsIGNoYXJfdSAqKCpnZXRsaW5lKShpbnQsIHZvaWQgKiwgaW50KSwgdm9pZCAqY29va2llKSk7CitzdGF0aWMgaW50CWlmX2xldmVsID0gMDsJCS8qIGRlcHRoIGluIDppZiAqLworI2VuZGlmCitzdGF0aWMgaW50CWNoZWNrZm9yY21kIF9fQVJHUygoY2hhcl91ICoqcHAsIGNoYXIgKmNtZCwgaW50IGxlbikpOworc3RhdGljIGNoYXJfdQkqZmluZF9jb21tYW5kIF9fQVJHUygoZXhhcmdfVCAqZWFwLCBpbnQgKmZ1bGwpKTsKKworc3RhdGljIHZvaWQJZXhfYWJicmV2aWF0ZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfbWFwIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF91bm1hcCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfbWFwY2xlYXIgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2FiY2xlYXIgX19BUkdTKChleGFyZ19UICplYXApKTsKKyNpZm5kZWYgRkVBVF9NRU5VCisjIGRlZmluZSBleF9lbWVudQkJZXhfbmkKKyMgZGVmaW5lIGV4X21lbnUJCWV4X25pCisjIGRlZmluZSBleF9tZW51dHJhbnNsYXRlCWV4X25pCisjZW5kaWYKKyNpZmRlZiBGRUFUX0FVVE9DTUQKK3N0YXRpYyB2b2lkCWV4X2F1dG9jbWQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2RvYXV0b2NtZCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2Vsc2UKKyMgZGVmaW5lIGV4X2F1dG9jbWQJCWV4X25pCisjIGRlZmluZSBleF9kb2F1dG9jbWQJCWV4X25pCisjIGRlZmluZSBleF9kb2F1dG9hbGwJCWV4X25pCisjZW5kaWYKKyNpZmRlZiBGRUFUX0xJU1RDTURTCitzdGF0aWMgdm9pZAlleF9idW5sb2FkIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9idWZmZXIgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2Jtb2RpZmllZCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfYm5leHQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2JwcmV2aW91cyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfYnJld2luZCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfYmxhc3QgX19BUkdTKChleGFyZ19UICplYXApKTsKKyNlbHNlCisjIGRlZmluZSBleF9idW5sb2FkCQlleF9uaQorIyBkZWZpbmUgZXhfYnVmZmVyCQlleF9uaQorIyBkZWZpbmUgZXhfYm1vZGlmaWVkCQlleF9uaQorIyBkZWZpbmUgZXhfYm5leHQJCWV4X25pCisjIGRlZmluZSBleF9icHJldmlvdXMJCWV4X25pCisjIGRlZmluZSBleF9icmV3aW5kCQlleF9uaQorIyBkZWZpbmUgZXhfYmxhc3QJCWV4X25pCisjIGRlZmluZSBidWZsaXN0X2xpc3QJCWV4X25pCisjIGRlZmluZSBleF9jaGVja3RpbWUJCWV4X25pCisjZW5kaWYKKyNpZiAhZGVmaW5lZChGRUFUX0xJU1RDTURTKSB8fCAhZGVmaW5lZChGRUFUX1dJTkRPV1MpCisjIGRlZmluZSBleF9idWZmZXJfYWxsCQlleF9uaQorI2VuZGlmCitzdGF0aWMgY2hhcl91CSpnZXRhcmdjbWQgX19BUkdTKChjaGFyX3UgKiopKTsKK3N0YXRpYyBjaGFyX3UJKnNraXBfY21kX2FyZyBfX0FSR1MoKGNoYXJfdSAqcCwgaW50IHJlbWJzKSk7CitzdGF0aWMgaW50CWdldGFyZ29wdCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2lmbmRlZiBGRUFUX1FVSUNLRklYCisjIGRlZmluZSBleF9tYWtlCQlleF9uaQorIyBkZWZpbmUgZXhfY2MJCQlleF9uaQorIyBkZWZpbmUgZXhfY25leHQJCWV4X25pCisjIGRlZmluZSBleF9jZmlsZQkJZXhfbmkKKyMgZGVmaW5lIHFmX2xpc3QJCWV4X25pCisjIGRlZmluZSBxZl9hZ2UJCQlleF9uaQorIyBkZWZpbmUgZXhfaGVscGdyZXAJCWV4X25pCisjZW5kaWYKKyNpZiAhZGVmaW5lZChGRUFUX1FVSUNLRklYKSB8fCAhZGVmaW5lZChGRUFUX1dJTkRPV1MpCisjIGRlZmluZSBleF9jY2xvc2UJCWV4X25pCisjIGRlZmluZSBleF9jb3BlbgkJZXhfbmkKKyMgZGVmaW5lIGV4X2N3aW5kb3cJCWV4X25pCisjZW5kaWYKKworc3RhdGljIGludAljaGVja19tb3JlIF9fQVJHUygoaW50LCBpbnQpKTsKK3N0YXRpYyBsaW5lbnJfVCBnZXRfYWRkcmVzcyBfX0FSR1MoKGNoYXJfdSAqKiwgaW50IHNraXAsIGludCB0b19vdGhlcl9maWxlKSk7CisjaWYgIWRlZmluZWQoRkVBVF9QRVJMKSB8fCAhZGVmaW5lZChGRUFUX1BZVEhPTikgfHwgIWRlZmluZWQoRkVBVF9UQ0wpIFwKKwl8fCAhZGVmaW5lZChGRUFUX1JVQlkpCitzdGF0aWMgdm9pZAlleF9zY3JpcHRfbmkgX19BUkdTKChleGFyZ19UICplYXApKTsKKyNlbmRpZgorc3RhdGljIGNoYXJfdQkqaW52YWxpZF9yYW5nZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJY29ycmVjdF9yYW5nZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIGNoYXJfdQkqcmVwbF9jbWRsaW5lIF9fQVJHUygoZXhhcmdfVCAqZWFwLCBjaGFyX3UgKnNyYywgaW50IHNyY2xlbiwgY2hhcl91ICpyZXBsLCBjaGFyX3UgKipjbWRsaW5lcCkpOworc3RhdGljIHZvaWQJZXhfaGlnaGxpZ2h0IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9jb2xvcnNjaGVtZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfcXVpdCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfY3F1aXQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3F1aXRfYWxsIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjaWZkZWYgRkVBVF9XSU5ET1dTCitzdGF0aWMgdm9pZAlleF9jbG9zZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfd2luX2Nsb3NlIF9fQVJHUygoZXhhcmdfVCAqZWFwLCB3aW5fVCAqd2luKSk7CitzdGF0aWMgdm9pZAlleF9vbmx5IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9hbGwgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3Jlc2l6ZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfc3RhZyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2Vsc2UKKyMgZGVmaW5lIGV4X2Nsb3NlCQlleF9uaQorIyBkZWZpbmUgZXhfb25seQkJZXhfbmkKKyMgZGVmaW5lIGV4X2FsbAkJCWV4X25pCisjIGRlZmluZSBleF9yZXNpemUJCWV4X25pCisjIGRlZmluZSBleF9zcGxpdHZpZXcJCWV4X25pCisjIGRlZmluZSBleF9zdGFnCQlleF9uaQorI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKK3N0YXRpYyB2b2lkCWV4X3BjbG9zZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfcHRhZyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfcGVkaXQgX19BUkdTKChleGFyZ19UICplYXApKTsKKyNlbHNlCisjIGRlZmluZSBleF9wY2xvc2UJCWV4X25pCisjIGRlZmluZSBleF9wdGFnCQlleF9uaQorIyBkZWZpbmUgZXhfcGVkaXQJCWV4X25pCisjZW5kaWYKK3N0YXRpYyB2b2lkCWV4X2hpZGUgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3N0b3AgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2V4aXQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3ByaW50IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjaWZkZWYgRkVBVF9CWVRFT0ZGCitzdGF0aWMgdm9pZAlleF9nb3RvIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjZWxzZQorIyBkZWZpbmUgZXhfZ290bwkJZXhfbmkKKyNlbmRpZgorc3RhdGljIHZvaWQJZXhfc2hlbGwgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3ByZXNlcnZlIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9yZWNvdmVyIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjaWZuZGVmIEZFQVRfTElTVENNRFMKKyMgZGVmaW5lIGV4X2FyZ2VkaXQJCWV4X25pCisjIGRlZmluZSBleF9hcmdhZGQJCWV4X25pCisjIGRlZmluZSBleF9hcmdkZWxldGUJCWV4X25pCisjIGRlZmluZSBleF9saXN0ZG8JCWV4X25pCisjZW5kaWYKK3N0YXRpYyB2b2lkCWV4X21vZGUgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3dyb25nbW9kaWZpZXIgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2ZpbmQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2VkaXQgX19BUkdTKChleGFyZ19UICplYXApKTsKKyNpZiAhZGVmaW5lZChGRUFUX0dVSSkgJiYgIWRlZmluZWQoRkVBVF9DTElFTlRTRVJWRVIpCisjIGRlZmluZSBleF9kcm9wCQlleF9uaQorI2VuZGlmCisjaWZuZGVmIEZFQVRfR1VJCisjIGRlZmluZSBleF9ndWkJCQlleF9ub2d1aQorc3RhdGljIHZvaWQJZXhfbm9ndWkgX19BUkdTKChleGFyZ19UICplYXApKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9HVUlfVzMyKSAmJiBkZWZpbmVkKEZFQVRfTUVOVSkgJiYgZGVmaW5lZChGRUFUX1RFQVJPRkYpCitzdGF0aWMgdm9pZAlleF90ZWFyb2ZmIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjZWxzZQorIyBkZWZpbmUgZXhfdGVhcm9mZgkJZXhfbmkKKyNlbmRpZgorI2lmIChkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykpICYmIGRlZmluZWQoRkVBVF9NRU5VKQorc3RhdGljIHZvaWQJZXhfcG9wdXAgX19BUkdTKChleGFyZ19UICplYXApKTsKKyNlbHNlCisjIGRlZmluZSBleF9wb3B1cAkJZXhfbmkKKyNlbmRpZgorI2lmbmRlZiBGRUFUX0dVSV9NU1dJTgorIyBkZWZpbmUgZXhfc2ltYWx0CQlleF9uaQorI2VuZGlmCisjaWYgIWRlZmluZWQoRkVBVF9HVUlfTVNXSU4pICYmICFkZWZpbmVkKEZFQVRfR1VJX0dUSykgJiYgIWRlZmluZWQoRkVBVF9HVUlfTU9USUYpCisjIGRlZmluZSBndWlfbWNoX2ZpbmRfZGlhbG9nCWV4X25pCisjIGRlZmluZSBndWlfbWNoX3JlcGxhY2VfZGlhbG9nIGV4X25pCisjZW5kaWYKKyNpZm5kZWYgRkVBVF9HVUlfR1RLCisjIGRlZmluZSBleF9oZWxwZmluZAkJZXhfbmkKKyNlbmRpZgorI2lmbmRlZiBGRUFUX0NTQ09QRQorIyBkZWZpbmUgZG9fY3Njb3BlCQlleF9uaQorIyBkZWZpbmUgZG9fc2NzY29wZQkJZXhfbmkKKyMgZGVmaW5lIGRvX2NzdGFnCQlleF9uaQorI2VuZGlmCisjaWZuZGVmIEZFQVRfU1lOX0hMCisjIGRlZmluZSBleF9zeW50YXgJCWV4X25pCisjZW5kaWYKKyNpZm5kZWYgRkVBVF9QRVJMCisjIGRlZmluZSBleF9wZXJsCQlleF9zY3JpcHRfbmkKKyMgZGVmaW5lIGV4X3BlcmxkbwkJZXhfbmkKKyNlbmRpZgorI2lmbmRlZiBGRUFUX1BZVEhPTgorIyBkZWZpbmUgZXhfcHl0aG9uCQlleF9zY3JpcHRfbmkKKyMgZGVmaW5lIGV4X3B5ZmlsZQkJZXhfbmkKKyNlbmRpZgorI2lmbmRlZiBGRUFUX1RDTAorIyBkZWZpbmUgZXhfdGNsCQkJZXhfc2NyaXB0X25pCisjIGRlZmluZSBleF90Y2xkbwkJZXhfbmkKKyMgZGVmaW5lIGV4X3RjbGZpbGUJCWV4X25pCisjZW5kaWYKKyNpZm5kZWYgRkVBVF9SVUJZCisjIGRlZmluZSBleF9ydWJ5CQlleF9zY3JpcHRfbmkKKyMgZGVmaW5lIGV4X3J1YnlkbwkJZXhfbmkKKyMgZGVmaW5lIGV4X3J1YnlmaWxlCQlleF9uaQorI2VuZGlmCisjaWZuZGVmIEZFQVRfU05JRkYKKyMgZGVmaW5lIGV4X3NuaWZmCQlleF9uaQorI2VuZGlmCisjaWZuZGVmIEZFQVRfS0VZTUFQCisjIGRlZmluZSBleF9sb2Fka2V5bWFwCQlleF9uaQorI2VuZGlmCitzdGF0aWMgdm9pZAlleF9zd2FwbmFtZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfc3luY2JpbmQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3JlYWQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2NkIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9wd2QgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2VxdWFsIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9zbGVlcCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZG9fZXhtYXAgX19BUkdTKChleGFyZ19UICplYXAsIGludCBpc2FiYnJldikpOworc3RhdGljIHZvaWQJZXhfd2luc2l6ZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2lmZGVmIEZFQVRfV0lORE9XUworc3RhdGljIHZvaWQJZXhfd2luY21kIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjZWxzZQorIyBkZWZpbmUgZXhfd2luY21kCSAgICBleF9uaQorI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykKK3N0YXRpYyB2b2lkCWV4X3dpbnBvcyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2Vsc2UKKyMgZGVmaW5lIGV4X3dpbnBvcwkgICAgZXhfbmkKKyNlbmRpZgorc3RhdGljIHZvaWQJZXhfb3BlcmF0b3JzIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9wdXQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2NvcHltb3ZlIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9zdWJtYWdpYyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfam9pbiBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfYXQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X2JhbmcgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3VuZG8gX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3JlZG8gX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3JlZGlyIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9yZWRyYXcgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3JlZHJhd3N0YXR1cyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJY2xvc2VfcmVkaXIgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZAlleF9ta3JjIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9tYXJrIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjaWZkZWYgRkVBVF9VU1JfQ01EUworc3RhdGljIGNoYXJfdQkqdWNfZnVuX2NtZCBfX0FSR1MoKHZvaWQpKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRVhfRVhUUkEKK3N0YXRpYyB2b2lkCWV4X25vcm1hbCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfc3RhcnRpbnNlcnQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3N0b3BpbnNlcnQgX19BUkdTKChleGFyZ19UICplYXApKTsKKyNlbHNlCisjIGRlZmluZSBleF9ub3JtYWwJCWV4X25pCisjIGRlZmluZSBleF9hbGlnbgkJZXhfbmkKKyMgZGVmaW5lIGV4X3JldGFiCQlleF9uaQorIyBkZWZpbmUgZXhfc3RhcnRpbnNlcnQJCWV4X25pCisjIGRlZmluZSBleF9zdG9waW5zZXJ0CQlleF9uaQorIyBkZWZpbmUgZXhfaGVscHRhZ3MJCWV4X25pCisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZJTkRfSUQKK3N0YXRpYyB2b2lkCWV4X2NoZWNrcGF0aCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfZmluZHBhdCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2Vsc2UKKyMgZGVmaW5lIGV4X2ZpbmRwYXQJCWV4X25pCisjIGRlZmluZSBleF9jaGVja3BhdGgJCWV4X25pCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfRklORF9JRCkgJiYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKK3N0YXRpYyB2b2lkCWV4X3BzZWFyY2ggX19BUkdTKChleGFyZ19UICplYXApKTsKKyNlbHNlCisjIGRlZmluZSBleF9wc2VhcmNoCQlleF9uaQorI2VuZGlmCitzdGF0aWMgdm9pZAlleF90YWcgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3RhZ19jbWQgX19BUkdTKChleGFyZ19UICplYXAsIGNoYXJfdSAqbmFtZSkpOworI2lmbmRlZiBGRUFUX0VWQUwKKyMgZGVmaW5lIGV4X3NjcmlwdG5hbWVzCQlleF9uaQorIyBkZWZpbmUgZXhfZmluaXNoCQlleF9uaQorIyBkZWZpbmUgZXhfZWNobwkJZXhfbmkKKyMgZGVmaW5lIGV4X2VjaG9obAkJZXhfbmkKKyMgZGVmaW5lIGV4X2V4ZWN1dGUJCWV4X25pCisjIGRlZmluZSBleF9jYWxsCQlleF9uaQorIyBkZWZpbmUgZXhfaWYJCQlleF9uaQorIyBkZWZpbmUgZXhfZW5kaWYJCWV4X25pCisjIGRlZmluZSBleF9lbHNlCQlleF9uaQorIyBkZWZpbmUgZXhfd2hpbGUJCWV4X25pCisjIGRlZmluZSBleF9jb250aW51ZQkJZXhfbmkKKyMgZGVmaW5lIGV4X2JyZWFrCQlleF9uaQorIyBkZWZpbmUgZXhfZW5kd2hpbGUJCWV4X25pCisjIGRlZmluZSBleF90aHJvdwkJZXhfbmkKKyMgZGVmaW5lIGV4X3RyeQkJCWV4X25pCisjIGRlZmluZSBleF9jYXRjaAkJZXhfbmkKKyMgZGVmaW5lIGV4X2ZpbmFsbHkJCWV4X25pCisjIGRlZmluZSBleF9lbmR0cnkJCWV4X25pCisjIGRlZmluZSBleF9lbmRmdW5jdGlvbgkJZXhfbmkKKyMgZGVmaW5lIGV4X2xldAkJCWV4X25pCisjIGRlZmluZSBleF91bmxldAkJZXhfbmkKKyMgZGVmaW5lIGV4X2Z1bmN0aW9uCQlleF9uaQorIyBkZWZpbmUgZXhfZGVsZnVuY3Rpb24JCWV4X25pCisjIGRlZmluZSBleF9yZXR1cm4JCWV4X25pCisjZW5kaWYKK3N0YXRpYyBjaGFyX3UJKmFyZ19hbGwgX19BUkdTKCh2b2lkKSk7CisjaWZkZWYgRkVBVF9TRVNTSU9OCitzdGF0aWMgaW50CW1ha2VvcGVucyBfX0FSR1MoKEZJTEUgKmZkLCBjaGFyX3UgKmRpcm5vdykpOworc3RhdGljIGludAlwdXRfdmlldyBfX0FSR1MoKEZJTEUgKmZkLCB3aW5fVCAqd3AsIGludCBhZGRfZWRpdCwgdW5zaWduZWQgKmZsYWdwKSk7CitzdGF0aWMgdm9pZAlleF9sb2FkdmlldyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIGNoYXJfdQkqZ2V0X3ZpZXdfZmlsZSBfX0FSR1MoKGludCBjKSk7CisjZWxzZQorIyBkZWZpbmUgZXhfbG9hZHZpZXcJCWV4X25pCisjZW5kaWYKKyNpZm5kZWYgRkVBVF9FVkFMCisjIGRlZmluZSBleF9jb21waWxlcgkJZXhfbmkKKyNlbmRpZgorI2lmZGVmIEZFQVRfVklNSU5GTworc3RhdGljIHZvaWQJZXhfdmltaW5mbyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2Vsc2UKKyMgZGVmaW5lIGV4X3ZpbWluZm8JCWV4X25pCisjZW5kaWYKK3N0YXRpYyB2b2lkCWV4X2JlaGF2ZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2lmZGVmIEZFQVRfQVVUT0NNRAorc3RhdGljIHZvaWQJZXhfZmlsZXR5cGUgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X3NldGZpbGV0eXBlICBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2Vsc2UKKyMgZGVmaW5lIGV4X2ZpbGV0eXBlCQlleF9uaQorIyBkZWZpbmUgZXhfc2V0ZmlsZXR5cGUJCWV4X25pCisjZW5kaWYKKyNpZm5kZWYgRkVBVF9ESUZGCisjIGRlZmluZSBleF9kaWZmcGF0Y2gJCWV4X25pCisjIGRlZmluZSBleF9kaWZmZ2V0cHV0CQlleF9uaQorIyBkZWZpbmUgZXhfZGlmZnNwbGl0CQlleF9uaQorIyBkZWZpbmUgZXhfZGlmZnRoaXMJCWV4X25pCisjIGRlZmluZSBleF9kaWZmdXBkYXRlCQlleF9uaQorI2VuZGlmCitzdGF0aWMgdm9pZAlleF9kaWdyYXBocyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfc2V0IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjaWYgIWRlZmluZWQoRkVBVF9FVkFMKSB8fCAhZGVmaW5lZChGRUFUX0FVVE9DTUQpCisjIGRlZmluZSBleF9vcHRpb25zCQlleF9uaQorI2VuZGlmCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKK3N0YXRpYyB2b2lkCWV4X25vaGxzZWFyY2ggX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCWV4X21hdGNoIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjZWxzZQorIyBkZWZpbmUgZXhfbm9obHNlYXJjaAkJZXhfbmkKKyMgZGVmaW5lIGV4X21hdGNoCQlleF9uaQorI2VuZGlmCisjaWZkZWYgRkVBVF9DUllQVAorc3RhdGljIHZvaWQJZXhfWCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2Vsc2UKKyMgZGVmaW5lIGV4X1gJCQlleF9uaQorI2VuZGlmCisjaWZkZWYgRkVBVF9GT0xESU5HCitzdGF0aWMgdm9pZAlleF9mb2xkIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAlleF9mb2xkb3BlbiBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfZm9sZGRvIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisjZWxzZQorIyBkZWZpbmUgZXhfZm9sZAkJZXhfbmkKKyMgZGVmaW5lIGV4X2ZvbGRvcGVuCQlleF9uaQorIyBkZWZpbmUgZXhfZm9sZGRvCQlleF9uaQorI2VuZGlmCisjaWYgISgoZGVmaW5lZChIQVZFX0xPQ0FMRV9IKSB8fCBkZWZpbmVkKFhfTE9DQUxFKSkgXAorCSYmIChkZWZpbmVkKEZFQVRfR0VUVEVYVCkgfHwgZGVmaW5lZChGRUFUX01CWVRFKSkpCisjIGRlZmluZSBleF9sYW5ndWFnZQkJZXhfbmkKKyNlbmRpZgorI2lmbmRlZiBGRUFUX1NJR05TCisjIGRlZmluZSBleF9zaWduCQlleF9uaQorI2VuZGlmCisjaWZuZGVmIEZFQVRfU1VOX1dPUktTSE9QCisjIGRlZmluZSBleF93c3ZlcmIJCWV4X25pCisjZW5kaWYKKworI2lmbmRlZiBGRUFUX0VWQUwKKyMgZGVmaW5lIGV4X2RlYnVnCQlleF9uaQorIyBkZWZpbmUgZXhfYnJlYWthZGQJCWV4X25pCisjIGRlZmluZSBleF9kZWJ1Z2dyZWVkeQkJZXhfbmkKKyMgZGVmaW5lIGV4X2JyZWFrZGVsCQlleF9uaQorIyBkZWZpbmUgZXhfYnJlYWtsaXN0CQlleF9uaQorI2VuZGlmCisKKyNpZm5kZWYgRkVBVF9DTURISVNUCisjIGRlZmluZSBleF9oaXN0b3J5CQlleF9uaQorI2VuZGlmCisjaWZuZGVmIEZFQVRfSlVNUExJU1QKKyMgZGVmaW5lIGV4X2p1bXBzCQlleF9uaQorIyBkZWZpbmUgZXhfY2hhbmdlcwkJZXhfbmkKKyNlbmRpZgorCisvKgorICogRGVjbGFyZSBjbWRuYW1lc1tdLgorICovCisjZGVmaW5lIERPX0RFQ0xBUkVfRVhDTUQKKyNpbmNsdWRlICJleF9jbWRzLmgiCisKKy8qCisgKiBUYWJsZSB1c2VkIHRvIHF1aWNrbHkgc2VhcmNoIGZvciBhIGNvbW1hbmQsIGJhc2VkIG9uIGl0cyBmaXJzdCBjaGFyYWN0ZXIuCisgKi8KK2NtZGlkeF9UIGNtZGlkeHNbMjddID0KK3sKKwlDTURfYXBwZW5kLAorCUNNRF9idWZmZXIsCisJQ01EX2NoYW5nZSwKKwlDTURfZGVsZXRlLAorCUNNRF9lZGl0LAorCUNNRF9maWxlLAorCUNNRF9nbG9iYWwsCisJQ01EX2hlbHAsCisJQ01EX2luc2VydCwKKwlDTURfam9pbiwKKwlDTURfaywKKwlDTURfbGlzdCwKKwlDTURfbW92ZSwKKwlDTURfbmV4dCwKKwlDTURfb3BlbiwKKwlDTURfcHJpbnQsCisJQ01EX3F1aXQsCisJQ01EX3JlYWQsCisJQ01EX3N1YnN0aXR1dGUsCisJQ01EX3QsCisJQ01EX3VuZG8sCisJQ01EX3ZnbG9iYWwsCisJQ01EX3dyaXRlLAorCUNNRF94aXQsCisJQ01EX3lhbmssCisJQ01EX3osCisJQ01EX2JhbmcKK307CisKK3N0YXRpYyBjaGFyX3UgZG9sbGFyX2NvbW1hbmRbMl0gPSB7JyQnLCAwfTsKKworCisjaWZkZWYgRkVBVF9FVkFMCisvKiBTdHJ1Y3QgZm9yIHN0b3JpbmcgYSBsaW5lIGluc2lkZSBhIHdoaWxlIGxvb3AgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgY2hhcl91CSpsaW5lOwkJLyogY29tbWFuZCBsaW5lICovCisgICAgbGluZW5yX1QJbG51bTsJCS8qIHNvdXJjaW5nX2xudW0gb2YgdGhlIGxpbmUgKi8KK30gd2NtZF9UOworCisvKgorICogU3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgaW5mbyBmb3IgbGluZSBwb3NpdGlvbiBpbiBhIHdoaWxlIGxvb3AuCisgKiBUaGlzIGlzIHJlcXVpcmVkLCBiZWNhdXNlIGRvX29uZV9jbWQoKSBtYXkgaW52b2tlIGV4X2Z1bmN0aW9uKCksIHdoaWNoCisgKiByZWFkcyBtb3JlIGxpbmVzIHRoYXQgbWF5IGNvbWUgZnJvbSB0aGUgd2hpbGUgbG9vcC4KKyAqLworc3RydWN0IHdoaWxlX2Nvb2tpZQoreworICAgIGdhcnJheV9UCSpsaW5lc19nYXA7CQkvKiBncm93YXJyYXkgd2l0aCBsaW5lIGluZm8gKi8KKyAgICBpbnQJCWN1cnJlbnRfbGluZTsJCS8qIGxhc3QgcmVhZCBsaW5lIGZyb20gZ3Jvd2FycmF5ICovCisgICAgaW50CQlyZXBlYXRpbmc7CQkvKiBUUlVFIHdoZW4gbG9vcGluZyBhIHNlY29uZCB0aW1lICovCisgICAgLyogV2hlbiAicmVwZWF0aW5nIiBpcyBGQUxTRSB1c2UgImdldGxpbmUiIGFuZCAiY29va2llIiB0byBnZXQgbGluZXMgKi8KKyAgICBjaGFyX3UJKigqZ2V0bGluZSkgX19BUkdTKChpbnQsIHZvaWQgKiwgaW50KSk7CisgICAgdm9pZAkqY29va2llOworfTsKKworc3RhdGljIGNoYXJfdQkqZ2V0X3doaWxlX2xpbmUgX19BUkdTKChpbnQgYywgdm9pZCAqY29va2llLCBpbnQgaW5kZW50KSk7CitzdGF0aWMgaW50CXN0b3JlX3doaWxlX2xpbmUgX19BUkdTKChnYXJyYXlfVCAqZ2FwLCBjaGFyX3UgKmxpbmUpKTsKK3N0YXRpYyB2b2lkCWZyZWVfY21kbGluZXMgX19BUkdTKChnYXJyYXlfVCAqZ2FwKSk7CisjZW5kaWYKKworCisvKgorICogZG9fZXhtb2RlKCk6IFJlcGVhdGVkbHkgZ2V0IGNvbW1hbmRzIGZvciB0aGUgIkV4IiBtb2RlLCB1bnRpbCB0aGUgIjp2aSIKKyAqIGNvbW1hbmQgaXMgZ2l2ZW4uCisgKi8KKyAgICB2b2lkCitkb19leG1vZGUoaW1wcm92ZWQpCisgICAgaW50CQlpbXByb3ZlZDsJICAgIC8qIFRSVUUgZm9yICJpbXByb3ZlZCBFeCIgbW9kZSAqLworeworICAgIGludAkJc2F2ZV9tc2dfc2Nyb2xsOworICAgIGludAkJcHJldl9tc2dfcm93OworICAgIGxpbmVucl9UCXByZXZfbGluZTsKKworICAgIHNhdmVfbXNnX3Njcm9sbCA9IG1zZ19zY3JvbGw7CisgICAgKytSZWRyYXdpbmdEaXNhYmxlZDsJICAgIC8qIGRvbid0IHJlZGlzcGxheSB0aGUgd2luZG93ICovCisgICAgKytub193YWl0X3JldHVybjsJCSAgICAvKiBkb24ndCB3YWl0IGZvciByZXR1cm4gKi8KKyAgICBpZiAoaW1wcm92ZWQpCisJZXhtb2RlX2FjdGl2ZSA9IEVYTU9ERV9WSU07CisgICAgZWxzZQorICAgIHsKKwlzZXR0bW9kZShUTU9ERV9DT09LKTsKKwlleG1vZGVfYWN0aXZlID0gRVhNT0RFX05PUk1BTDsKKyAgICB9CisKKyAgICBTdGF0ZSA9IE5PUk1BTDsKKyNpZmRlZiBGRUFUX0dVSQorICAgIC8qIElnbm9yZSBzY3JvbGxiYXIgYW5kIG1vdXNlIGV2ZW50cyBpbiBFeCBtb2RlICovCisgICAgKytob2xkX2d1aV9ldmVudHM7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1NOSUZGCisgICAgd2FudF9zbmlmZl9yZXF1ZXN0ID0gMDsgICAgLyogTm8gS19TTklGRiB3YW50ZWQgKi8KKyNlbmRpZgorCisgICAgTVNHKF8oIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIikpOworICAgIHdoaWxlIChleG1vZGVfYWN0aXZlKQorICAgIHsKKwltc2dfc2Nyb2xsID0gVFJVRTsKKwluZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisJZXhfcHJlc3NlZHJldHVybiA9IEZBTFNFOworCWV4X25vX3JlcHJpbnQgPSBGQUxTRTsKKwlwcmV2X21zZ19yb3cgPSBtc2dfcm93OworCXByZXZfbGluZSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyNpZmRlZiBGRUFUX1NOSUZGCisJUHJvY2Vzc1NuaWZmUmVxdWVzdHMoKTsKKyNlbmRpZgorCWlmIChpbXByb3ZlZCkKKwl7CisJICAgIGNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKwkgICAgZG9fY21kbGluZShOVUxMLCBnZXRleGxpbmUsIE5VTEwsIDApOworCX0KKwllbHNlCisJICAgIGRvX2NtZGxpbmUoTlVMTCwgZ2V0ZXhtb2RlbGluZSwgTlVMTCwgRE9DTURfTk9XQUlUKTsKKwlsaW5lc19sZWZ0ID0gUm93cyAtIDE7CisKKwlpZiAocHJldl9saW5lICE9IGN1cndpbi0+d19jdXJzb3IubG51bSAmJiAhZXhfbm9fcmVwcmludCkKKwl7CisJICAgIGlmIChleF9wcmVzc2VkcmV0dXJuKQorCSAgICB7CisJCS8qIGdvIHVwIG9uZSBsaW5lLCB0byBvdmVyd3JpdGUgdGhlICI6PENSPiIgbGluZSwgc28gdGhlCisJCSAqIG91dHB1dCBkb2Vuc24ndCBjb250YWluIGVtcHR5IGxpbmVzLiAqLworCQltc2dfcm93ID0gcHJldl9tc2dfcm93OworCQlpZiAocHJldl9tc2dfcm93ID09IFJvd3MgLSAxKQorCQkgICAgbXNnX3Jvdy0tOworCSAgICB9CisJICAgIG1zZ19jb2wgPSAwOworCSAgICBwcmludF9saW5lX25vX3ByZWZpeChjdXJ3aW4tPndfY3Vyc29yLmxudW0sIEZBTFNFKTsKKwkgICAgbXNnX2Nscl9lb3MoKTsKKwl9CisJZWxzZSBpZiAoZXhfcHJlc3NlZHJldHVybikJLyogbXVzdCBiZSBhdCBFT0YgKi8KKwkgICAgRU1TRyhfKCJFNTAxOiBBdCBlbmQtb2YtZmlsZSIpKTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIC0taG9sZF9ndWlfZXZlbnRzOworI2VuZGlmCisgICAgaWYgKCFpbXByb3ZlZCkKKwlzZXR0bW9kZShUTU9ERV9SQVcpOworICAgIC0tUmVkcmF3aW5nRGlzYWJsZWQ7CisgICAgLS1ub193YWl0X3JldHVybjsKKyAgICB1cGRhdGVfc2NyZWVuKENMRUFSKTsKKyAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisgICAgbXNnX3Njcm9sbCA9IHNhdmVfbXNnX3Njcm9sbDsKK30KKworLyoKKyAqIEV4ZWN1dGUgYSBzaW1wbGUgY29tbWFuZCBsaW5lLiAgVXNlZCBmb3IgdHJhbnNsYXRlZCBjb21tYW5kcyBsaWtlICIqIi4KKyAqLworICAgIGludAorZG9fY21kbGluZV9jbWQoY21kKQorICAgIGNoYXJfdQkqY21kOworeworICAgIHJldHVybiBkb19jbWRsaW5lKGNtZCwgTlVMTCwgTlVMTCwKKwkJCQkgICBET0NNRF9WRVJCT1NFfERPQ01EX05PV0FJVHxET0NNRF9LRVlUWVBFRCk7Cit9CisKKy8qCisgKiBkb19jbWRsaW5lKCk6IGV4ZWN1dGUgb25lIEV4IGNvbW1hbmQgbGluZQorICoKKyAqIDEuIEV4ZWN1dGUgImNtZGxpbmUiIHdoZW4gaXQgaXMgbm90IE5VTEwuCisgKiAgICBJZiAiY21kbGluZSIgaXMgTlVMTCwgb3IgbW9yZSBsaW5lcyBhcmUgbmVlZGVkLCBnZXRsaW5lKCkgaXMgdXNlZC4KKyAqIDIuIFNwbGl0IHVwIGluIHBhcnRzIHNlcGFyYXRlZCB3aXRoICd8Jy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgcmVjdXJzaXZlbHkhCisgKgorICogZmxhZ3M6CisgKiBET0NNRF9WRVJCT1NFICAtIFRoZSBjb21tYW5kIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2UuCisgKiBET0NNRF9OT1dBSVQgICAtIERvbid0IGNhbGwgd2FpdF9yZXR1cm4oKSBhbmQgZnJpZW5kcy4KKyAqIERPQ01EX1JFUEVBVCAgIC0gUmVwZWF0IGV4ZWN1dGlvbiB1bnRpbCBnZXRsaW5lKCkgcmV0dXJucyBOVUxMLgorICogRE9DTURfS0VZVFlQRUQgLSBEb24ndCByZXNldCBLZXlUeXBlZC4KKyAqIERPQ01EX0VYQ1JFU0VUIC0gUmVzZXQgdGhlIGV4Y2VwdGlvbiBlbnZpcm9ubWVudCAodXNlZCBmb3IgZGVidWdnaW5nKS4KKyAqIERPQ01EX0tFRVBMSU5FIC0gU3RvcmUgZmlyc3QgdHlwZWQgbGluZSAoZm9yIHJlcGVhdGluZyB3aXRoICIuIikuCisgKgorICogcmV0dXJuIEZBSUwgaWYgY21kbGluZSBjb3VsZCBub3QgYmUgZXhlY3V0ZWQsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50Citkb19jbWRsaW5lKGNtZGxpbmUsIGdldGxpbmUsIGNvb2tpZSwgZmxhZ3MpCisgICAgY2hhcl91CSpjbWRsaW5lOworICAgIGNoYXJfdQkqKCpnZXRsaW5lKSBfX0FSR1MoKGludCwgdm9pZCAqLCBpbnQpKTsKKyAgICB2b2lkCSpjb29raWU7CQkvKiBhcmd1bWVudCBmb3IgZ2V0bGluZSgpICovCisgICAgaW50CQlmbGFnczsKK3sKKyAgICBjaGFyX3UJKm5leHRfY21kbGluZTsJCS8qIG5leHQgY21kIHRvIGV4ZWN1dGUgKi8KKyAgICBjaGFyX3UJKmNtZGxpbmVfY29weSA9IE5VTEw7CS8qIGNvcHkgb2YgY21kIGxpbmUgKi8KKyAgICBpbnQJCXVzZWRfZ2V0bGluZSA9IEZBTFNFOwkvKiB1c2VkICJnZXRsaW5lIiB0byBvYnRhaW4gY29tbWFuZCAqLworICAgIHN0YXRpYyBpbnQJcmVjdXJzaXZlID0gMDsJCS8qIHJlY3Vyc2l2ZSBkZXB0aCAqLworICAgIGludAkJbXNnX2RpZG91dF9iZWZvcmVfc3RhcnQgPSAwOworICAgIGludAkJY291bnQgPSAwOwkJLyogbGluZSBudW1iZXIgY291bnQgKi8KKyAgICBpbnQJCWRpZF9pbmMgPSBGQUxTRTsJLyogaW5jcmVtZW50ZWQgUmVkcmF3aW5nRGlzYWJsZWQgKi8KKyAgICBpbnQJCXJldHZhbCA9IE9LOworI2lmZGVmIEZFQVRfRVZBTAorICAgIHN0cnVjdCBjb25kc3RhY2sgY3N0YWNrOwkJLyogY29uZGl0aW9uYWwgc3RhY2sgKi8KKyAgICBnYXJyYXlfVAlsaW5lc19nYTsJCS8qIGtlZXAgbGluZXMgZm9yICI6d2hpbGUiICovCisgICAgaW50CQljdXJyZW50X2xpbmUgPSAwOwkvKiBhY3RpdmUgbGluZSBpbiBsaW5lc19nYSAqLworICAgIGNoYXJfdQkqZm5hbWUgPSBOVUxMOwkJLyogZnVuY3Rpb24gb3Igc2NyaXB0IG5hbWUgKi8KKyAgICBsaW5lbnJfVAkqYnJlYWtwb2ludCA9IE5VTEw7CS8qIHB0ciB0byBicmVha3BvaW50IGZpZWxkIGluIGNvb2tpZSAqLworICAgIGludAkJKmRiZ190aWNrID0gTlVMTDsJLyogcHRyIHRvIGRiZ190aWNrIGZpZWxkIGluIGNvb2tpZSAqLworICAgIGludAkJc2F2ZWRfdHJ5bGV2ZWwgPSAwOworICAgIGludAkJc2F2ZWRfZm9yY2VfYWJvcnQgPSAwOworICAgIGV4Y2VwdF9UCSpzYXZlZF9jYXVnaHRfc3RhY2sgPSBOVUxMOworICAgIGNoYXJfdQkqc2F2ZWRfdnZfZXhjZXB0aW9uID0gTlVMTDsKKyAgICBjaGFyX3UJKnNhdmVkX3Z2X3Rocm93cG9pbnQgPSBOVUxMOworICAgIGludAkJc2F2ZWRfZGlkX2Vtc2cgPSAwOworICAgIGludAkJc2F2ZWRfZ290X2ludCA9IDA7CisgICAgaW50CQlzYXZlZF9kaWRfdGhyb3cgPSAwOworICAgIGludAkJc2F2ZWRfbmVlZF9yZXRocm93ID0gMDsKKyAgICBpbnQJCXNhdmVkX2NoZWNrX2NzdGFjayA9IDA7CisgICAgZXhjZXB0X1QJKnNhdmVkX2N1cnJlbnRfZXhjZXB0aW9uID0gTlVMTDsKKyAgICBpbnQJCWluaXRpYWxfdHJ5bGV2ZWw7CisgICAgc3RydWN0IG1zZ2xpc3QJKipzYXZlZF9tc2dfbGlzdCA9IE5VTEw7CisgICAgc3RydWN0IG1zZ2xpc3QJKnByaXZhdGVfbXNnX2xpc3Q7CisKKyAgICAvKiAiZ2V0bGluZSIgYW5kICJjb29raWUiIHBhc3NlZCB0byBkb19vbmVfY21kKCkgKi8KKyAgICBjaGFyX3UJKigqY21kX2dldGxpbmUpIF9fQVJHUygoaW50LCB2b2lkICosIGludCkpOworICAgIHZvaWQJKmNtZF9jb29raWU7CisgICAgc3RydWN0IHdoaWxlX2Nvb2tpZSBjbWRfd2hpbGVfY29va2llOworICAgIHZvaWQJKnJlYWxfY29va2llOworI2Vsc2UKKyMgZGVmaW5lIGNtZF9nZXRsaW5lIGdldGxpbmUKKyMgZGVmaW5lIGNtZF9jb29raWUgY29va2llCisjZW5kaWYKKyAgICBzdGF0aWMgaW50CWNhbGxfZGVwdGggPSAwOwkJLyogcmVjdXJzaXZlbmVzcyAqLworCisjaWZkZWYgRkVBVF9FVkFMCisgICAgLyogRm9yIGV2ZXJ5IHBhaXIgb2YgZG9fY21kbGluZSgpL2RvX29uZV9jbWQoKSBjYWxscywgdXNlIGFuIGV4dHJhIG1lbW9yeQorICAgICAqIGxvY2F0aW9uIGZvciBzdG9yaW5nIGVycm9yIG1lc3NhZ2VzIHRvIGJlIGNvbnZlcnRlZCB0byBhbiBleGNlcHRpb24uCisgICAgICogVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRvX2VycnRocm93KCkgY2FsbCBpbiBkb19vbmVfY21kKCkgZG9lcyBub3QgY29tYmluZQorICAgICAqIHRoZSBtZXNzYWdlcyBzdG9yZWQgYnkgYW4gZWFybGllciBpbnZvY2F0aW9uIG9mIGRvX29uZV9jbWQoKSB3aXRoIHRoZQorICAgICAqIGNvbW1hbmQgbmFtZSBvZiB0aGUgbGF0ZXIgb25lLiAgVGhpcyB3b3VsZCBoYXBwZW4gd2hlbiBCdWZXcml0ZVBvc3QKKyAgICAgKiBhdXRvY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGFmdGVyIGEgd3JpdGUgZXJyb3IuICovCisgICAgc2F2ZWRfbXNnX2xpc3QgPSBtc2dfbGlzdDsKKyAgICBtc2dfbGlzdCA9ICZwcml2YXRlX21zZ19saXN0OworICAgIHByaXZhdGVfbXNnX2xpc3QgPSBOVUxMOworI2VuZGlmCisKKyAgICAvKiBJdCdzIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbiBlbmRsZXNzIGxvb3Agd2l0aCAiOmV4ZWN1dGUiLCBjYXRjaCB0aGF0CisgICAgICogaGVyZS4gIFRoZSB2YWx1ZSBvZiAyMDAgYWxsb3dzIG5lc3RlZCBmdW5jdGlvbiBjYWxscywgIjpzb3VyY2UiLCBldGMuICovCisgICAgaWYgKGNhbGxfZGVwdGggPT0gMjAwKQorICAgIHsKKwlFTVNHKF8oIkUxNjk6IENvbW1hbmQgdG9vIHJlY3Vyc2l2ZSIpKTsKKyNpZmRlZiBGRUFUX0VWQUwKKwkvKiBXaGVuIGNvbnZlcnRpbmcgdG8gYW4gZXhjZXB0aW9uLCB3ZSBkbyBub3QgaW5jbHVkZSB0aGUgY29tbWFuZCBuYW1lCisJICogc2luY2UgdGhpcyBpcyBub3QgYW4gZXJyb3Igb2YgdGhlIHNwZWNpZmljIGNvbW1hbmQuICovCisJZG9fZXJydGhyb3coKHN0cnVjdCBjb25kc3RhY2sgKilOVUxMLCAoY2hhcl91ICopTlVMTCk7CisJbXNnX2xpc3QgPSBzYXZlZF9tc2dfbGlzdDsKKyNlbmRpZgorCXJldHVybiBGQUlMOworICAgIH0KKyAgICArK2NhbGxfZGVwdGg7CisKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBjc3RhY2suY3NfaWR4ID0gLTE7CisgICAgY3N0YWNrLmNzX3doaWxlbGV2ZWwgPSAwOworICAgIGNzdGFjay5jc190cnlsZXZlbCA9IDA7CisgICAgY3N0YWNrLmNzX2Vtc2dfc2lsZW50X2xpc3QgPSBOVUxMOworICAgIGNzdGFjay5jc19oYWRfd2hpbGUgPSBGQUxTRTsKKyAgICBjc3RhY2suY3NfaGFkX2VuZHdoaWxlID0gRkFMU0U7CisgICAgY3N0YWNrLmNzX2hhZF9jb250aW51ZSA9IEZBTFNFOworICAgIGNzdGFjay5jc19oYWRfZmluYWxseSA9IEZBTFNFOworICAgIGdhX2luaXQyKCZsaW5lc19nYSwgKGludClzaXplb2Yod2NtZF9UKSwgMTApOworCisgICAgcmVhbF9jb29raWUgPSBnZXRsaW5lX2Nvb2tpZShnZXRsaW5lLCBjb29raWUpOworCisgICAgLyogSW5zaWRlIGEgZnVuY3Rpb24gdXNlIGEgaGlnaGVyIG5lc3RpbmcgbGV2ZWwuICovCisgICAgaWYgKGdldGxpbmVfZXF1YWwoZ2V0bGluZSwgY29va2llLCBnZXRfZnVuY19saW5lKQorCQkJICAgICAgICYmIGV4X25lc3RpbmdfbGV2ZWwgPT0gZnVuY19sZXZlbChyZWFsX2Nvb2tpZSkpCisJKytleF9uZXN0aW5nX2xldmVsOworCisgICAgLyogR2V0IHRoZSBmdW5jdGlvbiBvciBzY3JpcHQgbmFtZSBhbmQgdGhlIGFkZHJlc3Mgd2hlcmUgdGhlIG5leHQgYnJlYWtwb2ludAorICAgICAqIGxpbmUgYW5kIHRoZSBkZWJ1ZyB0aWNrIGZvciBhIGZ1bmN0aW9uIG9yIHNjcmlwdCBhcmUgc3RvcmVkLiAqLworICAgIGlmIChnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0X2Z1bmNfbGluZSkpCisgICAgeworCWZuYW1lID0gZnVuY19uYW1lKHJlYWxfY29va2llKTsKKwlicmVha3BvaW50ID0gZnVuY19icmVha3BvaW50KHJlYWxfY29va2llKTsKKwlkYmdfdGljayA9IGZ1bmNfZGJnX3RpY2socmVhbF9jb29raWUpOworICAgIH0KKyAgICBlbHNlIGlmIChnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0c291cmNlbGluZSkpCisgICAgeworCWZuYW1lID0gc291cmNpbmdfbmFtZTsKKwlicmVha3BvaW50ID0gc291cmNlX2JyZWFrcG9pbnQocmVhbF9jb29raWUpOworCWRiZ190aWNrID0gc291cmNlX2RiZ190aWNrKHJlYWxfY29va2llKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpemUgImZvcmNlX2Fib3J0IiAgYW5kICJzdXBwcmVzc19lcnJ0aHJvdyIgYXQgdGhlIHRvcCBsZXZlbC4KKyAgICAgKi8KKyAgICBpZiAoIXJlY3Vyc2l2ZSkKKyAgICB7CisJZm9yY2VfYWJvcnQgPSBGQUxTRTsKKwlzdXBwcmVzc19lcnJ0aHJvdyA9IEZBTFNFOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgcmVxdWVzdGVkLCBzdG9yZSBhbmQgcmVzZXQgdGhlIGdsb2JhbCB2YWx1ZXMgY29udHJvbGxpbmcgdGhlCisgICAgICogZXhjZXB0aW9uIGhhbmRsaW5nICh1c2VkIHdoZW4gZGVidWdnaW5nKS4KKyAgICAgKi8KKyAgICBlbHNlIGlmIChmbGFncyAmIERPQ01EX0VYQ1JFU0VUKQorICAgIHsKKwlzYXZlZF90cnlsZXZlbAkJPSB0cnlsZXZlbDsJCXRyeWxldmVsID0gMDsKKwlzYXZlZF9mb3JjZV9hYm9ydAk9IGZvcmNlX2Fib3J0OwkJZm9yY2VfYWJvcnQgPSBGQUxTRTsKKwlzYXZlZF9jYXVnaHRfc3RhY2sJPSBjYXVnaHRfc3RhY2s7CQljYXVnaHRfc3RhY2sgPSBOVUxMOworCXNhdmVkX3Z2X2V4Y2VwdGlvbgk9IHZfZXhjZXB0aW9uKE5VTEwpOworCXNhdmVkX3Z2X3Rocm93cG9pbnQJPSB2X3Rocm93cG9pbnQoTlVMTCk7CisJLyogTmVjZXNzYXJ5IGZvciBkZWJ1Z2dpbmcgYW4gaW5hY3RpdmUgIjpjYXRjaCIsICI6ZmluYWxseSIsIG9yCisJICogIjplbmR0cnkiOiAqLworCXNhdmVkX2RpZF9lbXNnCQk9IGRpZF9lbXNnLAkJZGlkX2Vtc2cgICAgID0gRkFMU0U7CisJc2F2ZWRfZ290X2ludAkJPSBnb3RfaW50LAkJZ290X2ludAkgICAgID0gRkFMU0U7CisJc2F2ZWRfZGlkX3Rocm93CQk9IGRpZF90aHJvdywJCWRpZF90aHJvdyAgICA9IEZBTFNFOworCXNhdmVkX25lZWRfcmV0aHJvdwk9IG5lZWRfcmV0aHJvdywJCW5lZWRfcmV0aHJvdyA9IEZBTFNFOworCXNhdmVkX2NoZWNrX2NzdGFjawk9IGNoZWNrX2NzdGFjaywJCWNoZWNrX2NzdGFjayA9IEZBTFNFOworCXNhdmVkX2N1cnJlbnRfZXhjZXB0aW9uID0gY3VycmVudF9leGNlcHRpb247CWN1cnJlbnRfZXhjZXB0aW9uPU5VTEw7CisgICAgfQorCisgICAgaW5pdGlhbF90cnlsZXZlbCA9IHRyeWxldmVsOworCisgICAgLyoKKyAgICAgKiAiZGlkX3Rocm93IiB3aWxsIGJlIHNldCB0byBUUlVFIHdoZW4gYW4gZXhjZXB0aW9uIGlzIGJlaW5nIHRocm93bi4KKyAgICAgKi8KKyAgICBkaWRfdGhyb3cgPSBGQUxTRTsKKyNlbmRpZgorICAgIC8qCisgICAgICogImRpZF9lbXNnIiB3aWxsIGJlIHNldCB0byBUUlVFIHdoZW4gZW1zZygpIGlzIHVzZWQsIGluIHdoaWNoIGNhc2Ugd2UKKyAgICAgKiBjYW5jZWwgdGhlIHdob2xlIGNvbW1hbmQgbGluZSwgYW5kIGFueSBpZi9lbmRpZiB3aGlsZS9lbmR3aGlsZSBsb29wLgorICAgICAqIElmIGZvcmNlX2Fib3J0IGlzIHNldCwgd2UgY2FuY2VsIGV2ZXJ5dGhpbmcuCisgICAgICovCisgICAgZGlkX2Vtc2cgPSBGQUxTRTsKKworICAgIC8qCisgICAgICogS2V5VHlwZWQgaXMgb25seSBzZXQgd2hlbiBjYWxsaW5nIHZnZXRjKCkuICBSZXNldCBpdCBoZXJlIHdoZW4gbm90CisgICAgICogY2FsbGluZyB2Z2V0YygpIChzb3VyY2VkIGNvbW1hbmQgbGluZXMpLgorICAgICAqLworICAgIGlmICghKGZsYWdzICYgRE9DTURfS0VZVFlQRUQpICYmICFnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0ZXhsaW5lKSkKKwlLZXlUeXBlZCA9IEZBTFNFOworCisgICAgLyoKKyAgICAgKiBDb250aW51ZSBleGVjdXRpbmcgY29tbWFuZCBsaW5lczoKKyAgICAgKiAtIHdoZW4gaW5zaWRlIGFuICI6aWYiIG9yICI6d2hpbGUiCisgICAgICogLSBmb3IgbXVsdGlwbGUgY29tbWFuZHMgb24gb25lIGxpbmUsIHNlcGFyYXRlZCB3aXRoICd8JworICAgICAqIC0gd2hlbiByZXBlYXRpbmcgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgbGluZXMgKGZvciAiOnNvdXJjZSIpCisgICAgICovCisgICAgbmV4dF9jbWRsaW5lID0gY21kbGluZTsKKyAgICBkbworICAgIHsKKwkvKiBzdG9wIHNraXBwaW5nIGNtZHMgZm9yIGFuIGVycm9yIG1zZyBhZnRlciBhbGwgZW5kaWZzIGFuZCBlbmR3aGlsZXMgKi8KKwlpZiAobmV4dF9jbWRsaW5lID09IE5VTEwKKyNpZmRlZiBGRUFUX0VWQUwKKwkJJiYgIWZvcmNlX2Fib3J0CisJCSYmIGNzdGFjay5jc19pZHggPCAwCisJCSYmICEoZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldF9mdW5jX2xpbmUpCisJCQkJCSAgICAgICAmJiBmdW5jX2hhc19hYm9ydChyZWFsX2Nvb2tpZSkpCisjZW5kaWYKKwkJCQkJCQkpCisJICAgIGRpZF9lbXNnID0gRkFMU0U7CisKKwkvKgorCSAqIDEuIElmIHJlcGVhdGluZyBhIGxpbmUgd2l0aCAiOndoaWxlIiwgZ2V0IGEgbGluZSBmcm9tIGxpbmVzX2dhLgorCSAqIDIuIElmIG5vIGxpbmUgZ2l2ZW46IEdldCBhbiBhbGxvY2F0ZWQgbGluZSB3aXRoIGdldGxpbmUoKS4KKwkgKiAzLiBJZiBhIGxpbmUgaXMgZ2l2ZW46IE1ha2UgYSBjb3B5LCBzbyB3ZSBjYW4gbWVzcyB3aXRoIGl0LgorCSAqLworCisjaWZkZWYgRkVBVF9FVkFMCisJLyogMS4gSWYgcmVwZWF0aW5nLCBnZXQgYSBwcmV2aW91cyBsaW5lIGZyb20gbGluZXNfZ2EuICovCisJaWYgKGNzdGFjay5jc193aGlsZWxldmVsICYmIGN1cnJlbnRfbGluZSA8IGxpbmVzX2dhLmdhX2xlbikKKwl7CisJICAgIC8qIEVhY2ggJ3wnIHNlcGFyYXRlZCBjb21tYW5kIGlzIHN0b3JlZCBzZXBhcmF0ZWx5IGluIGxpbmVzX2dhLCB0bworCSAgICAgKiBiZSBhYmxlIHRvIGp1bXAgdG8gaXQuICBEb24ndCB1c2UgbmV4dF9jbWRsaW5lIG5vdy4gKi8KKwkgICAgdmltX2ZyZWUoY21kbGluZV9jb3B5KTsKKwkgICAgY21kbGluZV9jb3B5ID0gTlVMTDsKKworCSAgICAvKiBDaGVjayBpZiBhIGZ1bmN0aW9uIGhhcyByZXR1cm5lZCBvciwgdW5sZXNzIGl0IGhhcyBhbiB1bmNsb3NlZAorCSAgICAgKiB0cnkgY29uZGl0aW9uYWwsIGFib3J0ZWQuICovCisJICAgIGlmIChnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0X2Z1bmNfbGluZSkKKwkJCQkJICAgICAgICYmIGZ1bmNfaGFzX2VuZGVkKHJlYWxfY29va2llKSkKKwkgICAgeworCQlyZXR2YWwgPSBGQUlMOworCQlicmVhazsKKwkgICAgfQorCisJICAgIC8qIENoZWNrIGlmIGEgc291cmNlZCBmaWxlIGhpdCBhICI6ZmluaXNoIiBjb21tYW5kLiAqLworCSAgICBpZiAoc291cmNlX2ZpbmlzaGVkKGdldGxpbmUsIGNvb2tpZSkpCisJICAgIHsKKwkJcmV0dmFsID0gRkFJTDsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICAvKiBJZiBicmVha3BvaW50cyBoYXZlIGJlZW4gYWRkZWQvZGVsZXRlZCBuZWVkIHRvIGNoZWNrIGZvciBpdC4gKi8KKwkgICAgaWYgKGJyZWFrcG9pbnQgIT0gTlVMTCAmJiBkYmdfdGljayAhPSBOVUxMCisJCQkJCQkgICAmJiAqZGJnX3RpY2sgIT0gZGVidWdfdGljaykKKwkgICAgeworCQkqYnJlYWtwb2ludCA9IGRiZ19maW5kX2JyZWFrcG9pbnQoCisJCQkJZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldHNvdXJjZWxpbmUpLAorCQkJCQkJCWZuYW1lLCBzb3VyY2luZ19sbnVtKTsKKwkJKmRiZ190aWNrID0gZGVidWdfdGljazsKKwkgICAgfQorCisJICAgIG5leHRfY21kbGluZSA9ICgod2NtZF9UICopKGxpbmVzX2dhLmdhX2RhdGEpKVtjdXJyZW50X2xpbmVdLmxpbmU7CisJICAgIHNvdXJjaW5nX2xudW0gPSAoKHdjbWRfVCAqKShsaW5lc19nYS5nYV9kYXRhKSlbY3VycmVudF9saW5lXS5sbnVtOworCisJICAgIC8qIERpZCB3ZSBlbmNvdW50ZXIgYSBicmVha3BvaW50PyAqLworCSAgICBpZiAoYnJlYWtwb2ludCAhPSBOVUxMICYmICpicmVha3BvaW50ICE9IDAKKwkJCQkJICAgICAgJiYgKmJyZWFrcG9pbnQgPD0gc291cmNpbmdfbG51bSkKKwkgICAgeworCQlkYmdfYnJlYWtwb2ludChmbmFtZSwgc291cmNpbmdfbG51bSk7CisJCS8qIEZpbmQgbmV4dCBicmVha3BvaW50LiAqLworCQkqYnJlYWtwb2ludCA9IGRiZ19maW5kX2JyZWFrcG9pbnQoCisJCQkJZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldHNvdXJjZWxpbmUpLAorCQkJCQkJCWZuYW1lLCBzb3VyY2luZ19sbnVtKTsKKwkJKmRiZ190aWNrID0gZGVidWdfdGljazsKKwkgICAgfQorCX0KKworCWlmIChjc3RhY2suY3Nfd2hpbGVsZXZlbCkKKwl7CisJICAgIC8qIEluc2lkZSBhIHdoaWxlIGxvb3Agd2UgbmVlZCB0byBzdG9yZSB0aGUgbGluZXMgYW5kIHVzZSB0aGVtCisJICAgICAqIGFnYWluLiAgUGFzcyBhIGRpZmZlcmVudCAiZ2V0bGluZSIgZnVuY3Rpb24gdG8gZG9fb25lX2NtZCgpCisJICAgICAqIGJlbG93LCBzbyB0aGF0IGl0IHN0b3JlcyBsaW5lcyBpbiBvciByZWFkcyB0aGVtIGZyb20KKwkgICAgICogImxpbmVzX2dhIi4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlZmluZSBhIGZ1bmN0aW9uIGluc2lkZSBhCisJICAgICAqIHdoaWxlIGxvb3AuICovCisJICAgIGNtZF9nZXRsaW5lID0gZ2V0X3doaWxlX2xpbmU7CisJICAgIGNtZF9jb29raWUgPSAodm9pZCAqKSZjbWRfd2hpbGVfY29va2llOworCSAgICBjbWRfd2hpbGVfY29va2llLmxpbmVzX2dhcCA9ICZsaW5lc19nYTsKKwkgICAgY21kX3doaWxlX2Nvb2tpZS5jdXJyZW50X2xpbmUgPSBjdXJyZW50X2xpbmU7CisJICAgIGNtZF93aGlsZV9jb29raWUuZ2V0bGluZSA9IGdldGxpbmU7CisJICAgIGNtZF93aGlsZV9jb29raWUuY29va2llID0gY29va2llOworCSAgICBjbWRfd2hpbGVfY29va2llLnJlcGVhdGluZyA9IChjdXJyZW50X2xpbmUgPCBsaW5lc19nYS5nYV9sZW4pOworCX0KKwllbHNlCisJeworCSAgICBjbWRfZ2V0bGluZSA9IGdldGxpbmU7CisJICAgIGNtZF9jb29raWUgPSBjb29raWU7CisJfQorI2VuZGlmCisKKwkvKiAyLiBJZiBubyBsaW5lIGdpdmVuLCBnZXQgYW4gYWxsb2NhdGVkIGxpbmUgd2l0aCBnZXRsaW5lKCkuICovCisJaWYgKG5leHRfY21kbGluZSA9PSBOVUxMKQorCXsKKwkgICAgLyoKKwkgICAgICogTmVlZCB0byBzZXQgbXNnX2RpZG91dCBmb3IgdGhlIGZpcnN0IGxpbmUgYWZ0ZXIgYW4gIjppZiIsCisJICAgICAqIG90aGVyd2lzZSB0aGUgIjppZiIgd2lsbCBiZSBvdmVyd3JpdHRlbi4KKwkgICAgICovCisJICAgIGlmIChjb3VudCA9PSAxICYmIGdldGxpbmVfZXF1YWwoZ2V0bGluZSwgY29va2llLCBnZXRleGxpbmUpKQorCQltc2dfZGlkb3V0ID0gVFJVRTsKKwkgICAgaWYgKGdldGxpbmUgPT0gTlVMTCB8fCAobmV4dF9jbWRsaW5lID0gZ2V0bGluZSgnOicsIGNvb2tpZSwKKyNpZmRlZiBGRUFUX0VWQUwKKwkJICAgIGNzdGFjay5jc19pZHggPCAwID8gMCA6IChjc3RhY2suY3NfaWR4ICsgMSkgKiAyCisjZWxzZQorCQkgICAgMAorI2VuZGlmCisJCQkgICAgKSkgPT0gTlVMTCkKKwkgICAgeworCQkvKiBEb24ndCBjYWxsIHdhaXRfcmV0dXJuIGZvciBhYm9ydGVkIGNvbW1hbmQgbGluZS4gIFRoZSBOVUxMCisJCSAqIHJldHVybmVkIGZvciB0aGUgZW5kIG9mIGEgc291cmNlZCBmaWxlIG9yIGV4ZWN1dGVkIGZ1bmN0aW9uCisJCSAqIGRvZXNuJ3QgZG8gdGhpcy4gKi8KKwkJaWYgKEtleVR5cGVkICYmICEoZmxhZ3MgJiBET0NNRF9SRVBFQVQpKQorCQkgICAgbmVlZF93YWl0X3JldHVybiA9IEZBTFNFOworCQlyZXR2YWwgPSBGQUlMOworCQlicmVhazsKKwkgICAgfQorCSAgICB1c2VkX2dldGxpbmUgPSBUUlVFOworCisJICAgIC8qCisJICAgICAqIEtlZXAgdGhlIGZpcnN0IHR5cGVkIGxpbmUuICBDbGVhciBpdCB3aGVuIG1vcmUgbGluZXMgYXJlIHR5cGVkLgorCSAgICAgKi8KKwkgICAgaWYgKGZsYWdzICYgRE9DTURfS0VFUExJTkUpCisJICAgIHsKKwkJdmltX2ZyZWUocmVwZWF0X2NtZGxpbmUpOworCQlpZiAoY291bnQgPT0gMCkKKwkJICAgIHJlcGVhdF9jbWRsaW5lID0gdmltX3N0cnNhdmUobmV4dF9jbWRsaW5lKTsKKwkJZWxzZQorCQkgICAgcmVwZWF0X2NtZGxpbmUgPSBOVUxMOworCSAgICB9CisJfQorCisJLyogMy4gTWFrZSBhIGNvcHkgb2YgdGhlIGNvbW1hbmQgc28gd2UgY2FuIG1lc3Mgd2l0aCBpdC4gKi8KKwllbHNlIGlmIChjbWRsaW5lX2NvcHkgPT0gTlVMTCkKKwl7CisJICAgIG5leHRfY21kbGluZSA9IHZpbV9zdHJzYXZlKG5leHRfY21kbGluZSk7CisJICAgIGlmIChuZXh0X2NtZGxpbmUgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKF8oZV9vdXRvZm1lbSkpOworCQlyZXR2YWwgPSBGQUlMOworCQlicmVhazsKKwkgICAgfQorCX0KKwljbWRsaW5lX2NvcHkgPSBuZXh0X2NtZGxpbmU7CisKKyNpZmRlZiBGRUFUX0VWQUwKKwkvKgorCSAqIFNhdmUgdGhlIGN1cnJlbnQgbGluZSB3aGVuIGluc2lkZSBhICI6d2hpbGUiLCBhbmQgd2hlbiB0aGUgY29tbWFuZAorCSAqIGxvb2tzIGxpa2UgYSAiOndoaWxlIiwgYmVjYXVzZSB3ZSBtYXkgbmVlZCBpdCBsYXRlci4KKwkgKiBXaGVuIHRoZXJlIGlzIGEgJ3wnIGFuZCBhbm90aGVyIGNvbW1hbmQsIGl0IGlzIHN0b3JlZCBzZXBhcmF0ZWx5LAorCSAqIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIGp1bXAgYmFjayB0byBpdCBmcm9tIGFuIDplbmR3aGlsZS4KKwkgKi8KKwlpZiAoCSAgIGN1cnJlbnRfbGluZSA9PSBsaW5lc19nYS5nYV9sZW4KKwkJJiYgKGNzdGFjay5jc193aGlsZWxldmVsIHx8IGhhc193aGlsZV9jbWQobmV4dF9jbWRsaW5lKSkpCisJeworCSAgICBpZiAoc3RvcmVfd2hpbGVfbGluZSgmbGluZXNfZ2EsIG5leHRfY21kbGluZSkgPT0gRkFJTCkKKwkgICAgeworCQlyZXR2YWwgPSBGQUlMOworCQlicmVhazsKKwkgICAgfQorCX0KKwlkaWRfZW5kaWYgPSBGQUxTRTsKKyNlbmRpZgorCisJaWYgKGNvdW50KysgPT0gMCkKKwl7CisJICAgIC8qCisJICAgICAqIEFsbCBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZHMgaXMgcHV0IGJlbG93IGVhY2ggb3RoZXIsIHdpdGhvdXQKKwkgICAgICogd2FpdGluZyBmb3IgYSByZXR1cm4uIERvbid0IGRvIHRoaXMgd2hlbiBleGVjdXRpbmcgY29tbWFuZHMKKwkgICAgICogZnJvbSBhIHNjcmlwdCBvciB3aGVuIGJlaW5nIGNhbGxlZCByZWN1cnNpdmUgKGUuZy4gZm9yICI6ZQorCSAgICAgKiArY29tbWFuZCBmaWxlIikuCisJICAgICAqLworCSAgICBpZiAoIShmbGFncyAmIERPQ01EX05PV0FJVCkgJiYgIXJlY3Vyc2l2ZSkKKwkgICAgeworCQltc2dfZGlkb3V0X2JlZm9yZV9zdGFydCA9IG1zZ19kaWRvdXQ7CisJCW1zZ19kaWRhbnkgPSBGQUxTRTsgLyogbm8gb3V0cHV0IHlldCAqLworCQltc2dfc3RhcnQoKTsKKwkJbXNnX3Njcm9sbCA9IFRSVUU7ICAvKiBwdXQgbWVzc2FnZXMgYmVsb3cgZWFjaCBvdGhlciAqLworCQkrK25vX3dhaXRfcmV0dXJuOyAgIC8qIGRvbnQgd2FpdCBmb3IgcmV0dXJuIHVudGlsIGZpbmlzaGVkICovCisJCSsrUmVkcmF3aW5nRGlzYWJsZWQ7CisJCWRpZF9pbmMgPSBUUlVFOworCSAgICB9CisJfQorCisJaWYgKHBfdmVyYm9zZSA+PSAxNSAmJiBzb3VyY2luZ19uYW1lICE9IE5VTEwpCisJeworCSAgICBpbnQJYyA9IC0xOworCisJICAgICsrbm9fd2FpdF9yZXR1cm47CisJICAgIG1zZ19zY3JvbGwgPSBUUlVFOwkgICAgLyogYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlICovCisJICAgIC8qIFRydW5jYXRlIGxvbmcgbGluZXMsIHNtc2coKSBjYW4ndCBoYW5kbGUgdGhhdC4gKi8KKwkgICAgaWYgKFNUUkxFTihjbWRsaW5lX2NvcHkpID4gMjAwKQorCSAgICB7CisJCWMgPSBjbWRsaW5lX2NvcHlbMjAwXTsKKwkJY21kbGluZV9jb3B5WzIwMF0gPSBOVUw7CisJICAgIH0KKwkgICAgc21zZygoY2hhcl91ICopXygibGluZSAlbGQ6ICVzIiksCisJCQkJCSAgIChsb25nKXNvdXJjaW5nX2xudW0sIGNtZGxpbmVfY29weSk7CisJICAgIG1zZ19wdXRzKChjaGFyX3UgKikiXG4iKTsgICAvKiBkb24ndCBvdmVyd3JpdGUgdGhpcyBlaXRoZXIgKi8KKwkgICAgaWYgKGMgPj0gMCkKKwkJY21kbGluZV9jb3B5WzIwMF0gPSBjOworCSAgICBjbWRsaW5lX3JvdyA9IG1zZ19yb3c7CisJICAgIC0tbm9fd2FpdF9yZXR1cm47CisJfQorCisJLyoKKwkgKiAyLiBFeGVjdXRlIG9uZSAnfCcgc2VwYXJhdGVkIGNvbW1hbmQuCisJICogICAgZG9fb25lX2NtZCgpIHdpbGwgcmV0dXJuIE5VTEwgaWYgdGhlcmUgaXMgbm8gdHJhaWxpbmcgJ3wnLgorCSAqICAgICJjbWRsaW5lX2NvcHkiIGNhbiBjaGFuZ2UsIGUuZy4gZm9yICclJyBhbmQgJyMnIGV4cGFuc2lvbi4KKwkgKi8KKwkrK3JlY3Vyc2l2ZTsKKwluZXh0X2NtZGxpbmUgPSBkb19vbmVfY21kKCZjbWRsaW5lX2NvcHksIGZsYWdzICYgRE9DTURfVkVSQk9TRSwKKyNpZmRlZiBGRUFUX0VWQUwKKwkJCQkmY3N0YWNrLAorI2VuZGlmCisJCQkJY21kX2dldGxpbmUsIGNtZF9jb29raWUpOworCS0tcmVjdXJzaXZlOworCisjaWZkZWYgRkVBVF9FVkFMCisJaWYgKGNtZF9jb29raWUgPT0gKHZvaWQgKikmY21kX3doaWxlX2Nvb2tpZSkKKwkgICAgLyogVXNlICJjdXJyZW50X2xpbmUiIGZyb20gImNtZF93aGlsZV9jb29raWUiLCBpdCBtYXkgaGF2ZSBiZWVuCisJICAgICAqIGluY3JlbWVudGVkIHdoZW4gZGVmaW5pbmcgYSBmdW5jdGlvbi4gKi8KKwkgICAgY3VycmVudF9saW5lID0gY21kX3doaWxlX2Nvb2tpZS5jdXJyZW50X2xpbmU7CisjZW5kaWYKKworCWlmIChuZXh0X2NtZGxpbmUgPT0gTlVMTCkKKwl7CisJICAgIHZpbV9mcmVlKGNtZGxpbmVfY29weSk7CisJICAgIGNtZGxpbmVfY29weSA9IE5VTEw7CisjaWZkZWYgRkVBVF9DTURISVNUCisJICAgIC8qCisJICAgICAqIElmIHRoZSBjb21tYW5kIHdhcyB0eXBlZCwgcmVtZW1iZXIgaXQgZm9yIHRoZSAnOicgcmVnaXN0ZXIuCisJICAgICAqIERvIHRoaXMgQUZURVIgZXhlY3V0aW5nIHRoZSBjb21tYW5kIHRvIG1ha2UgOkA6IHdvcmsuCisJICAgICAqLworCSAgICBpZiAoZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldGV4bGluZSkKKwkJCQkJCSAgJiYgbmV3X2xhc3RfY21kbGluZSAhPSBOVUxMKQorCSAgICB7CisJCXZpbV9mcmVlKGxhc3RfY21kbGluZSk7CisJCWxhc3RfY21kbGluZSA9IG5ld19sYXN0X2NtZGxpbmU7CisJCW5ld19sYXN0X2NtZGxpbmUgPSBOVUxMOworCSAgICB9CisjZW5kaWYKKwl9CisJZWxzZQorCXsKKwkgICAgLyogbmVlZCB0byBjb3B5IHRoZSBjb21tYW5kIGFmdGVyIHRoZSAnfCcgdG8gY21kbGluZV9jb3B5LCBmb3IgdGhlCisJICAgICAqIG5leHQgZG9fb25lX2NtZCgpICovCisJICAgIG1jaF9tZW1tb3ZlKGNtZGxpbmVfY29weSwgbmV4dF9jbWRsaW5lLCBTVFJMRU4obmV4dF9jbWRsaW5lKSArIDEpOworCSAgICBuZXh0X2NtZGxpbmUgPSBjbWRsaW5lX2NvcHk7CisJfQorCisKKyNpZmRlZiBGRUFUX0VWQUwKKwkvKiByZXNldCBkaWRfZW1zZyBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG5vdCBhYm9ydGVkIGJ5IGFuIGVycm9yICovCisJaWYgKGRpZF9lbXNnICYmICFmb3JjZV9hYm9ydAorCQkmJiBnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0X2Z1bmNfbGluZSkKKwkJCQkJICAgICAgJiYgIWZ1bmNfaGFzX2Fib3J0KHJlYWxfY29va2llKSkKKwkgICAgZGlkX2Vtc2cgPSBGQUxTRTsKKworCWlmIChjc3RhY2suY3Nfd2hpbGVsZXZlbCkKKwl7CisJICAgICsrY3VycmVudF9saW5lOworCisJICAgIC8qCisJICAgICAqIEFuICI6ZW5kd2hpbGUiIGFuZCAiOmNvbnRpbnVlIiBpcyBoYW5kbGVkIGhlcmUuCisJICAgICAqIElmIHdlIHdlcmUgZXhlY3V0aW5nIGNvbW1hbmRzLCBqdW1wIGJhY2sgdG8gdGhlICI6d2hpbGUiLgorCSAgICAgKiBJZiB3ZSB3ZXJlIG5vdCBleGVjdXRpbmcgY29tbWFuZHMsIGRlY3JlbWVudCB3aGlsZWxldmVsLgorCSAgICAgKi8KKwkgICAgaWYgKGNzdGFjay5jc19oYWRfZW5kd2hpbGUgfHwgY3N0YWNrLmNzX2hhZF9jb250aW51ZSkKKwkgICAgeworCQlpZiAoY3N0YWNrLmNzX2hhZF9lbmR3aGlsZSkKKwkJICAgIGNzdGFjay5jc19oYWRfZW5kd2hpbGUgPSBGQUxTRTsKKwkJZWxzZQorCQkgICAgY3N0YWNrLmNzX2hhZF9jb250aW51ZSA9IEZBTFNFOworCisJCS8qIEp1bXAgYmFjayB0byB0aGUgbWF0Y2hpbmcgIjp3aGlsZSIuICBCZSBjYXJlZnVsIG5vdCB0byB1c2UKKwkJICogYSBjc19saW5lW10gZnJvbSBhbiBlbnRyeSB0aGF0IGlzbid0IGEgIjp3aGlsZSI6IEl0IHdvdWxkCisJCSAqIG1ha2UgImN1cnJlbnRfbGluZSIgaW52YWxpZCBhbmQgY2FuIGNhdXNlIGEgY3Jhc2guICovCisJCWlmICghZGlkX2Vtc2cgJiYgIWdvdF9pbnQgJiYgIWRpZF90aHJvdworCQkJJiYgY3N0YWNrLmNzX2lkeCA+PSAwCisJCQkmJiAoY3N0YWNrLmNzX2ZsYWdzW2NzdGFjay5jc19pZHhdICYgQ1NGX1dISUxFKQorCQkJJiYgY3N0YWNrLmNzX2xpbmVbY3N0YWNrLmNzX2lkeF0gPj0gMAorCQkJJiYgKGNzdGFjay5jc19mbGFnc1tjc3RhY2suY3NfaWR4XSAmIENTRl9BQ1RJVkUpKQorCQl7CisJCSAgICBjdXJyZW50X2xpbmUgPSBjc3RhY2suY3NfbGluZVtjc3RhY2suY3NfaWR4XTsKKwkJICAgIGNzdGFjay5jc19oYWRfd2hpbGUgPSBUUlVFOwkvKiBub3RlIHdlIGp1bXBlZCB0aGVyZSAqLworCQkgICAgbGluZV9icmVha2NoZWNrKCk7CQkvKiBjaGVjayBpZiBDVFJMLUMgdHlwZWQgKi8KKworCQkgICAgLyogQ2hlY2sgZm9yIHRoZSBuZXh0IGJyZWFrcG9pbnQgYXQgb3IgYWZ0ZXIgdGhlICI6d2hpbGUiLiovCisJCSAgICBpZiAoYnJlYWtwb2ludCAhPSBOVUxMKQorCQkgICAgeworCQkJKmJyZWFrcG9pbnQgPSBkYmdfZmluZF9icmVha3BvaW50KAorCQkJCWdldGxpbmVfZXF1YWwoZ2V0bGluZSwgY29va2llLCBnZXRzb3VyY2VsaW5lKSwKKwkJCQkJCQkJCWZuYW1lLAorCQkJICAgKCh3Y21kX1QgKilsaW5lc19nYS5nYV9kYXRhKVtjdXJyZW50X2xpbmVdLmxudW0tMSk7CisJCQkqZGJnX3RpY2sgPSBkZWJ1Z190aWNrOworCQkgICAgfQorCQl9CisJCWVsc2UgLyogY2FuIG9ubHkgZ2V0IGhlcmUgd2l0aCAiOmVuZHdoaWxlIiAqLworCQl7CisJCSAgICAtLWNzdGFjay5jc193aGlsZWxldmVsOworCQkgICAgaWYgKGNzdGFjay5jc19pZHggPj0gMCkKKwkJCS0tY3N0YWNrLmNzX2lkeDsKKwkJfQorCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogRm9yIGEgIjp3aGlsZSIgd2UgbmVlZCB0byByZW1lbWJlciB0aGUgbGluZSBudW1iZXIuCisJICAgICAqLworCSAgICBlbHNlIGlmIChjc3RhY2suY3NfaGFkX3doaWxlKQorCSAgICB7CisJCWNzdGFjay5jc19oYWRfd2hpbGUgPSBGQUxTRTsKKwkJY3N0YWNrLmNzX2xpbmVbY3N0YWNrLmNzX2lkeF0gPSBjdXJyZW50X2xpbmUgLSAxOworCSAgICB9CisJfQorCisJLyoKKwkgKiBXaGVuIG5vdCBpbnNpZGUgYW55ICI6d2hpbGUiIGxvb3AsIGNsZWFyIHJlbWVtYmVyZWQgbGluZXMuCisJICovCisJaWYgKCFjc3RhY2suY3Nfd2hpbGVsZXZlbCkKKwl7CisJICAgIGlmIChsaW5lc19nYS5nYV9sZW4gPiAwKQorCSAgICB7CisJCXNvdXJjaW5nX2xudW0gPQorCQkgICAgICAgKCh3Y21kX1QgKilsaW5lc19nYS5nYV9kYXRhKVtsaW5lc19nYS5nYV9sZW4gLSAxXS5sbnVtOworCQlmcmVlX2NtZGxpbmVzKCZsaW5lc19nYSk7CisJICAgIH0KKwkgICAgY3VycmVudF9saW5lID0gMDsKKwl9CisKKwkvKgorCSAqIEEgIjpmaW5hbGx5IiBtYWtlcyBkaWRfZW1zZywgZ290X2ludCwgYW5kIGRpZF90aHJvdyBwZW5kaW5nIGZvciBiZWluZworCSAqIHJlc3RvcmVkIGF0IHRoZSAiOmVuZHRyeSIuICBSZXNldCB0aGVtIGhlcmUgYW5kIHNldCB0aGUgQUNUSVZFIGFuZAorCSAqIEZJTkFMTFkgZmxhZ3MsIHNvIHRoYXQgdGhlIGZpbmFsbHkgY2xhdXNlIGdldHMgZXhlY3V0ZWQuICBUaGlzCisJICogaW5jbHVkZXMgdGhlIGNhc2Ugd2hlcmUgYSBtaXNzaW5nICI6ZW5kaWYiIG9yICI6ZW5kd2hpbGUiIHdhcworCSAqIGRldGVjdGVkIGJ5IHRoZSAiOmZpbmFsbHkiIGl0c2VsZi4KKwkgKi8KKwlpZiAoY3N0YWNrLmNzX2hhZF9maW5hbGx5KQorCXsKKwkgICAgY3N0YWNrLmNzX2hhZF9maW5hbGx5ID0gRkFMU0U7CisJICAgIHJlcG9ydF9tYWtlX3BlbmRpbmcoY3N0YWNrLmNzX3BlbmRpbmdbY3N0YWNrLmNzX2lkeF0gJgorCQkgICAgKENTVFBfRVJST1IgfCBDU1RQX0lOVEVSUlVQVCB8IENTVFBfVEhST1cpLAorCQkgICAgZGlkX3Rocm93ID8gKHZvaWQgKiljdXJyZW50X2V4Y2VwdGlvbiA6IE5VTEwpOworCSAgICBkaWRfZW1zZyA9IGdvdF9pbnQgPSBkaWRfdGhyb3cgPSBGQUxTRTsKKwkgICAgY3N0YWNrLmNzX2ZsYWdzW2NzdGFjay5jc19pZHhdIHw9IENTRl9BQ1RJVkUgfCBDU0ZfRklOQUxMWTsKKwl9CisKKwkvKiBVcGRhdGUgZ2xvYmFsICJ0cnlsZXZlbCIgZm9yIHJlY3Vyc2l2ZSBjYWxscyB0byBkb19jbWRsaW5lKCkgZnJvbQorCSAqIHdpdGhpbiB0aGlzIGxvb3AuICovCisJdHJ5bGV2ZWwgPSBpbml0aWFsX3RyeWxldmVsICsgY3N0YWNrLmNzX3RyeWxldmVsOworCisJLyoKKwkgKiBJZiB0aGUgb3V0ZXJtb3N0IHRyeSBjb25kaXRpb25hbCAoYWNjcm9zcyBmdW5jdGlvbiBjYWxscyBhbmQgc291cmNlZAorCSAqIGZpbGVzKSBpcyBhYm9ydGVkIGJlY2F1c2Ugb2YgYW4gZXJyb3IsIGFuIGludGVycnVwdCwgb3IgYW4gdW5jYXVnaHQKKwkgKiBleGNlcHRpb24sIGNhbmNlbCBldmVyeXRoaW5nLiAgSWYgaXQgaXMgbGVmdCBub3JtYWxseSwgcmVzZXQKKwkgKiBmb3JjZV9hYm9ydCB0byBnZXQgdGhlIG5vbi1FSCBjb21wYXRpYmxlIGFib3J0aW9uIGJlaGF2aW9yIGZvcgorCSAqIHRoZSByZXN0IG9mIHRoZSBzY3JpcHQuCisJICovCisJaWYgKHRyeWxldmVsID09IDAgJiYgIWRpZF9lbXNnICYmICFnb3RfaW50ICYmICFkaWRfdGhyb3cpCisJICAgIGZvcmNlX2Fib3J0ID0gRkFMU0U7CisKKwkvKiBDb252ZXJ0IGFuIGludGVycnVwdCB0byBhbiBleGNlcHRpb24gaWYgYXBwcm9wcmlhdGUuICovCisJKHZvaWQpZG9faW50dGhyb3coJmNzdGFjayk7CisjZW5kaWYgLyogRkVBVF9FVkFMICovCisKKyAgICB9CisgICAgLyoKKyAgICAgKiBDb250aW51ZSBleGVjdXRpbmcgY29tbWFuZCBsaW5lcyB3aGVuOgorICAgICAqIC0gbm8gQ1RSTC1DIHR5cGVkLCBubyBhYm9ydGluZyBlcnJvciwgbm8gZXhjZXB0aW9uIHRocm93biBvciB0cnkKKyAgICAgKiAgIGNvbmRpdGlvbmFscyBuZWVkIHRvIGJlIGNoZWNrZWQgZm9yIGV4ZWN1dGluZyBmaW5hbGx5IGNsYXVzZXMgb3IKKyAgICAgKiAgIGNhdGNoaW5nIGFuIGludGVycnVwdCBleGNlcHRpb24KKyAgICAgKiAtIGRpZG4ndCBnZXQgYW4gZXJyb3IgbWVzc2FnZSBvciBsaW5lcyBhcmUgbm90IHR5cGVkCisgICAgICogLSB0aGVyZSBpcyBhIGNvbW1hbmQgYWZ0ZXIgJ3wnLCBpbnNpZGUgYSA6aWYsIDp3aGlsZSwgb3IgOnRyeSwgb3IKKyAgICAgKiAgIGxvb3BpbmcgZm9yICI6c291cmNlIiBjb21tYW5kIG9yIGZ1bmN0aW9uIGNhbGwuCisgICAgICovCisgICAgd2hpbGUgKCEoKGdvdF9pbnQKKyNpZmRlZiBGRUFUX0VWQUwKKwkJICAgIHx8IChkaWRfZW1zZyAmJiBmb3JjZV9hYm9ydCkgfHwgZGlkX3Rocm93CisjZW5kaWYKKwkgICAgICkKKyNpZmRlZiBGRUFUX0VWQUwKKwkJJiYgY3N0YWNrLmNzX3RyeWxldmVsID09IDAKKyNlbmRpZgorCSAgICApCisJICAgICYmICEoZGlkX2Vtc2cgJiYgdXNlZF9nZXRsaW5lCisJCQkgICYmIChnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0ZXhtb2RlbGluZSkKKwkJCQl8fCBnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0ZXhsaW5lKSkpCisJICAgICYmIChuZXh0X2NtZGxpbmUgIT0gTlVMTAorI2lmZGVmIEZFQVRfRVZBTAorCQkJfHwgY3N0YWNrLmNzX2lkeCA+PSAwCisjZW5kaWYKKwkJCXx8IChmbGFncyAmIERPQ01EX1JFUEVBVCkpKTsKKworICAgIHZpbV9mcmVlKGNtZGxpbmVfY29weSk7CisjaWZkZWYgRkVBVF9FVkFMCisgICAgZnJlZV9jbWRsaW5lcygmbGluZXNfZ2EpOworICAgIGdhX2NsZWFyKCZsaW5lc19nYSk7CisKKyAgICBpZiAoY3N0YWNrLmNzX2lkeCA+PSAwKQorICAgIHsKKwkvKgorCSAqIElmIGEgc291cmNlZCBmaWxlIG9yIGV4ZWN1dGVkIGZ1bmN0aW9uIHJhbiB0byBpdHMgZW5kLCByZXBvcnQgdGhlCisJICogdW5jbG9zZWQgY29uZGl0aW9uYWwuCisJICovCisJaWYgKCFnb3RfaW50ICYmICFkaWRfdGhyb3cKKwkJJiYgKChnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0c291cmNlbGluZSkKKwkJCSYmICFzb3VyY2VfZmluaXNoZWQoZ2V0bGluZSwgY29va2llKSkKKwkJICAgIHx8IChnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0X2Z1bmNfbGluZSkKKwkJCQkJICAgICYmICFmdW5jX2hhc19lbmRlZChyZWFsX2Nvb2tpZSkpKSkKKwl7CisJICAgIGlmIChjc3RhY2suY3NfZmxhZ3NbY3N0YWNrLmNzX2lkeF0gJiBDU0ZfVFJZKQorCQlFTVNHKF8oZV9lbmR0cnkpKTsKKwkgICAgZWxzZSBpZiAoY3N0YWNrLmNzX2ZsYWdzW2NzdGFjay5jc19pZHhdICYgQ1NGX1dISUxFKQorCQlFTVNHKF8oZV9lbmR3aGlsZSkpOworCSAgICBlbHNlCisJCUVNU0coXyhlX2VuZGlmKSk7CisJfQorCisJLyoKKwkgKiBSZXNldCAidHJ5bGV2ZWwiIGluIGNhc2Ugb2YgYSAiOmZpbmlzaCIgb3IgIjpyZXR1cm4iIG9yIGEgbWlzc2luZworCSAqICI6ZW5kdHJ5IiBpbiBhIHNvdXJjZWQgZmlsZSBvciBleGVjdXRlZCBmdW5jdGlvbi4gIElmIHRoZSB0cnkKKwkgKiBjb25kaXRpb25hbCBpcyBpbiBpdHMgZmluYWxseSBjbGF1c2UsIGlnbm9yZSBhbnl0aGluZyBwZW5kaW5nLgorCSAqIElmIGl0IGlzIGluIGEgY2F0Y2ggY2xhdXNlLCBmaW5pc2ggdGhlIGNhdWdodCBleGNlcHRpb24uCisJICovCisJZG8KKwkgICAgY3N0YWNrLmNzX2lkeCA9IGNsZWFudXBfY29uZGl0aW9uYWxzKCZjc3RhY2ssIDAsIFRSVUUpOworCXdoaWxlICgtLWNzdGFjay5jc19pZHggPj0gMCk7CisJdHJ5bGV2ZWwgPSBpbml0aWFsX3RyeWxldmVsOworICAgIH0KKworICAgIC8qIElmIGEgbWlzc2luZyAiOmVuZHRyeSIsICI6ZW5kd2hpbGUiLCBvciAiOmVuZGlmIiBvciBhIG1lbW9yeSBsYWNrCisgICAgICogd2FzIHJlcG9ydGVkIGFib3ZlIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBpcyB0byBiZSBjb252ZXJ0ZWQgdG8gYW4KKyAgICAgKiBleGNlcHRpb24sIGRvIHRoaXMgbm93IGFmdGVyIHJld2luZGluZyB0aGUgY3N0YWNrLiAqLworICAgIGRvX2VycnRocm93KCZjc3RhY2ssIGdldGxpbmVfZXF1YWwoZ2V0bGluZSwgY29va2llLCBnZXRfZnVuY19saW5lKQorCQkJCSAgPyAoY2hhcl91ICopImVuZGZ1bmN0aW9uIiA6IChjaGFyX3UgKilOVUxMKTsKKworICAgIGlmICh0cnlsZXZlbCA9PSAwKQorICAgIHsKKwkvKgorCSAqIFdoZW4gYW4gZXhjZXB0aW9uIGlzIGJlaW5nIHRocm93biBvdXQgb2YgdGhlIG91dGVybW9zdCB0cnkKKwkgKiBjb25kaXRpb25hbCwgZGlzY2FyZCB0aGUgdW5jYXVnaHQgZXhjZXB0aW9uLCBkaXNhYmxlIHRoZSBjb252ZXJzaW9uCisJICogb2YgaW50ZXJydXB0cyBvciBlcnJvcnMgdG8gZXhjZXB0aW9ucywgYW5kIGVuc3VyZSB0aGF0IG5vIG1vcmUKKwkgKiBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJICovCisJaWYgKGRpZF90aHJvdykKKwl7CisJICAgIHZvaWQJKnAgPSBOVUxMOworCSAgICBjaGFyX3UJKnNhdmVkX3NvdXJjaW5nX25hbWU7CisJICAgIGludAkJc2F2ZWRfc291cmNpbmdfbG51bTsKKwkgICAgc3RydWN0IG1zZ2xpc3QJKm1lc3NhZ2VzID0gTlVMTCwgKm5leHQ7CisKKwkgICAgLyoKKwkgICAgICogSWYgdGhlIHVuY2F1Z2h0IGV4Y2VwdGlvbiBpcyBhIHVzZXIgZXhjZXB0aW9uLCByZXBvcnQgaXQgYXMgYW4KKwkgICAgICogZXJyb3IuICBJZiBpdCBpcyBhbiBlcnJvciBleGNlcHRpb24sIGRpc3BsYXkgdGhlIHNhdmVkIGVycm9yCisJICAgICAqIG1lc3NhZ2Ugbm93LiAgRm9yIGFuIGludGVycnVwdCBleGNlcHRpb24sIGRvIG5vdGhpbmc7IHRoZQorCSAgICAgKiBpbnRlcnJ1cHQgbWVzc2FnZSBpcyBnaXZlbiBlbHNld2hlcmUuCisJICAgICAqLworCSAgICBzd2l0Y2ggKGN1cnJlbnRfZXhjZXB0aW9uLT50eXBlKQorCSAgICB7CisJCWNhc2UgRVRfVVNFUjoKKwkJICAgIHNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIkU2MDU6IEV4Y2VwdGlvbiBub3QgY2F1Z2h0OiAlcyIpLAorCQkJICAgIGN1cnJlbnRfZXhjZXB0aW9uLT52YWx1ZSk7CisJCSAgICBwID0gdmltX3N0cnNhdmUoSU9idWZmKTsKKwkJICAgIGJyZWFrOworCQljYXNlIEVUX0VSUk9SOgorCQkgICAgbWVzc2FnZXMgPSBjdXJyZW50X2V4Y2VwdGlvbi0+bWVzc2FnZXM7CisJCSAgICBjdXJyZW50X2V4Y2VwdGlvbi0+bWVzc2FnZXMgPSBOVUxMOworCQkgICAgYnJlYWs7CisJCWNhc2UgRVRfSU5URVJSVVBUOgorCQkgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICBwID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKV8oZV9pbnRlcm5hbCkpOworCSAgICB9CisKKwkgICAgc2F2ZWRfc291cmNpbmdfbmFtZSA9IHNvdXJjaW5nX25hbWU7CisJICAgIHNhdmVkX3NvdXJjaW5nX2xudW0gPSBzb3VyY2luZ19sbnVtOworCSAgICBzb3VyY2luZ19uYW1lID0gY3VycmVudF9leGNlcHRpb24tPnRocm93X25hbWU7CisJICAgIHNvdXJjaW5nX2xudW0gPSBjdXJyZW50X2V4Y2VwdGlvbi0+dGhyb3dfbG51bTsKKwkgICAgY3VycmVudF9leGNlcHRpb24tPnRocm93X25hbWUgPSBOVUxMOworCisJICAgIGRpc2NhcmRfY3VycmVudF9leGNlcHRpb24oKTsJLyogdXNlcyBJT2J1ZmYgaWYgJ3ZlcmJvc2UnICovCisJICAgIHN1cHByZXNzX2VycnRocm93ID0gVFJVRTsKKwkgICAgZm9yY2VfYWJvcnQgPSBUUlVFOworCisJICAgIGlmIChtZXNzYWdlcyAhPSBOVUxMKQorCSAgICB7CisJCWRvCisJCXsKKwkJICAgIG5leHQgPSBtZXNzYWdlcy0+bmV4dDsKKwkJICAgIGVtc2cobWVzc2FnZXMtPm1zZyk7CisJCSAgICB2aW1fZnJlZShtZXNzYWdlcy0+bXNnKTsKKwkJICAgIHZpbV9mcmVlKG1lc3NhZ2VzKTsKKwkJICAgIG1lc3NhZ2VzID0gbmV4dDsKKwkJfQorCQl3aGlsZSAobWVzc2FnZXMgIT0gTlVMTCk7CisJICAgIH0KKwkgICAgZWxzZSBpZiAocCAhPSBOVUxMKQorCSAgICB7CisJCWVtc2cocCk7CisJCXZpbV9mcmVlKHApOworCSAgICB9CisJICAgIHZpbV9mcmVlKHNvdXJjaW5nX25hbWUpOworCSAgICBzb3VyY2luZ19uYW1lID0gc2F2ZWRfc291cmNpbmdfbmFtZTsKKwkgICAgc291cmNpbmdfbG51bSA9IHNhdmVkX3NvdXJjaW5nX2xudW07CisJfQorCisJLyoKKwkgKiBPbiBhbiBpbnRlcnJ1cHQgb3IgYW4gYWJvcnRpbmcgZXJyb3Igbm90IGNvbnZlcnRlZCB0byBhbiBleGNlcHRpb24sCisJICogZGlzYWJsZSB0aGUgY29udmVyc2lvbiBvZiBlcnJvcnMgdG8gZXhjZXB0aW9ucy4gIChJbnRlcnJ1cHRzIGFyZSBub3QKKwkgKiBjb252ZXJ0ZWQgYW55IG1vcmUsIGhlcmUuKSBUaGlzIGVuYWJsZXMgYWxzbyB0aGUgaW50ZXJydXB0IG1lc3NhZ2UKKwkgKiB3aGVuIGZvcmNlX2Fib3J0IGlzIHNldCBhbmQgZGlkX2Vtc2cgdW5zZXQgaW4gY2FzZSBvZiBhbiBpbnRlcnJ1cHQKKwkgKiBmcm9tIGEgZmluYWxseSBjbGF1c2UgYWZ0ZXIgYW4gZXJyb3IuCisJICovCisJZWxzZSBpZiAoZ290X2ludCB8fCAoZGlkX2Vtc2cgJiYgZm9yY2VfYWJvcnQpKQorCSAgICBzdXBwcmVzc19lcnJ0aHJvdyA9IFRSVUU7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGUgY3VycmVudCBjc3RhY2sgd2lsbCBiZSBmcmVlZCB3aGVuIGRvX2NtZGxpbmUoKSByZXR1cm5zLiAgQW4gdW5jYXVnaHQKKyAgICAgKiBleGNlcHRpb24gd2lsbCBoYXZlIHRvIGJlIHJldGhyb3duIGluIHRoZSBwcmV2aW91cyBjc3RhY2suICBJZiBhIGZ1bmN0aW9uCisgICAgICogaGFzIGp1c3QgcmV0dXJuZWQgb3IgYSBzY3JpcHQgZmlsZSB3YXMganVzdCBmaW5pc2hlZCBhbmQgdGhlIHByZXZpb3VzCisgICAgICogY3N0YWNrIGJlbG9uZ3MgdG8gdGhlIHNhbWUgZnVuY3Rpb24gb3IsIHJlc3BlY3RpdmVseSwgc2NyaXB0IGZpbGUsIGl0CisgICAgICogd2lsbCBoYXZlIHRvIGJlIGNoZWNrZWQgZm9yIGZpbmFsbHkgY2xhdXNlcyB0byBiZSBleGVjdXRlZCBkdWUgdG8gdGhlCisgICAgICogIjpyZXR1cm4iIG9yICI6ZmluaXNoIi4gIFRoaXMgaXMgZG9uZSBpbiBkb19vbmVfY21kKCkuCisgICAgICovCisgICAgaWYgKGRpZF90aHJvdykKKwluZWVkX3JldGhyb3cgPSBUUlVFOworICAgIGlmICgoZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldHNvdXJjZWxpbmUpCisJCSYmIGV4X25lc3RpbmdfbGV2ZWwgPiBzb3VyY2VfbGV2ZWwocmVhbF9jb29raWUpKQorCSAgICB8fCAoZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldF9mdW5jX2xpbmUpCisJCSYmIGV4X25lc3RpbmdfbGV2ZWwgPiBmdW5jX2xldmVsKHJlYWxfY29va2llKSArIDEpKQorICAgIHsKKwlpZiAoIWRpZF90aHJvdykKKwkgICAgY2hlY2tfY3N0YWNrID0gVFJVRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBXaGVuIGxlYXZpbmcgYSBmdW5jdGlvbiwgcmVkdWNlIG5lc3RpbmcgbGV2ZWwuICovCisJaWYgKGdldGxpbmVfZXF1YWwoZ2V0bGluZSwgY29va2llLCBnZXRfZnVuY19saW5lKSkKKwkgICAgLS1leF9uZXN0aW5nX2xldmVsOworCS8qCisJICogR28gdG8gZGVidWcgbW9kZSB3aGVuIHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb24gaW4gd2hpY2ggd2UgYXJlCisJICogc2luZ2xlLXN0ZXBwaW5nLgorCSAqLworCWlmICgoZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldHNvdXJjZWxpbmUpCisJCSAgICB8fCBnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0X2Z1bmNfbGluZSkpCisJCSYmIGV4X25lc3RpbmdfbGV2ZWwgKyAxIDw9IGRlYnVnX2JyZWFrX2xldmVsKQorCSAgICBkb19kZWJ1ZyhnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0c291cmNlbGluZSkKKwkJICAgID8gKGNoYXJfdSAqKV8oIkVuZCBvZiBzb3VyY2VkIGZpbGUiKQorCQkgICAgOiAoY2hhcl91ICopXygiRW5kIG9mIGZ1bmN0aW9uIikpOworICAgIH0KKworICAgIC8qCisgICAgICogUmVzdG9yZSB0aGUgZXhjZXB0aW9uIGVudmlyb25tZW50IChkb25lIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZQorICAgICAqIGRlYnVnZ2VyKS4KKyAgICAgKi8KKyAgICBpZiAoZmxhZ3MgJiBET0NNRF9FWENSRVNFVCkKKyAgICB7CisJc3VwcHJlc3NfZXJydGhyb3cgPSBGQUxTRTsKKwl0cnlsZXZlbCA9IHNhdmVkX3RyeWxldmVsOworCWZvcmNlX2Fib3J0ID0gc2F2ZWRfZm9yY2VfYWJvcnQ7CisJY2F1Z2h0X3N0YWNrID0gc2F2ZWRfY2F1Z2h0X3N0YWNrOworCSh2b2lkKXZfZXhjZXB0aW9uKHNhdmVkX3Z2X2V4Y2VwdGlvbik7CisJKHZvaWQpdl90aHJvd3BvaW50KHNhdmVkX3Z2X3Rocm93cG9pbnQpOworCS8qIE5lY2Vzc2FyeSBmb3IgZGVidWdnaW5nIGFuIGluYWN0aXZlICI6Y2F0Y2giLCAiOmZpbmFsbHkiLCBvcgorCSAqICI6ZW5kdHJ5IjogKi8KKwlkaWRfZW1zZyA9IHNhdmVkX2RpZF9lbXNnOworCWdvdF9pbnQgPSBzYXZlZF9nb3RfaW50OworCWRpZF90aHJvdyA9IHNhdmVkX2RpZF90aHJvdzsKKwluZWVkX3JldGhyb3cgPSBzYXZlZF9uZWVkX3JldGhyb3c7CisJY2hlY2tfY3N0YWNrID0gc2F2ZWRfY2hlY2tfY3N0YWNrOworCWN1cnJlbnRfZXhjZXB0aW9uID0gc2F2ZWRfY3VycmVudF9leGNlcHRpb247CisgICAgfQorCisgICAgbXNnX2xpc3QgPSBzYXZlZF9tc2dfbGlzdDsKKyNlbmRpZiAvKiBGRUFUX0VWQUwgKi8KKworICAgIC8qCisgICAgICogSWYgdGhlcmUgd2FzIHRvbyBtdWNoIG91dHB1dCB0byBmaXQgb24gdGhlIGNvbW1hbmQgbGluZSwgYXNrIHRoZSB1c2VyIHRvCisgICAgICogaGl0IHJldHVybiBiZWZvcmUgcmVkcmF3aW5nIHRoZSBzY3JlZW4uIFdpdGggdGhlICI6Z2xvYmFsIiBjb21tYW5kIHdlIGRvCisgICAgICogdGhpcyBvbmx5IG9uY2UgYWZ0ZXIgdGhlIGNvbW1hbmQgaXMgZmluaXNoZWQuCisgICAgICovCisgICAgaWYgKGRpZF9pbmMpCisgICAgeworCS0tUmVkcmF3aW5nRGlzYWJsZWQ7CisJLS1ub193YWl0X3JldHVybjsKKwltc2dfc2Nyb2xsID0gRkFMU0U7CisKKwkvKgorCSAqIFdoZW4ganVzdCBmaW5pc2hlZCBhbiAiOmlmIi0iOmVsc2UiIHdoaWNoIHdhcyB0eXBlZCwgbm8gbmVlZCB0bworCSAqIHdhaXQgZm9yIGhpdC1yZXR1cm4uICBBbHNvIGZvciBhbiBlcnJvciBzaXR1YXRpb24uCisJICovCisJaWYgKHJldHZhbCA9PSBGQUlMCisjaWZkZWYgRkVBVF9FVkFMCisJCXx8IChkaWRfZW5kaWYgJiYgS2V5VHlwZWQgJiYgIWRpZF9lbXNnKQorI2VuZGlmCisJCQkJCSAgICApCisJeworCSAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisJICAgIG1zZ19kaWRhbnkgPSBGQUxTRTsJCS8qIGRvbid0IHdhaXQgd2hlbiByZXN0YXJ0aW5nIGVkaXQgKi8KKwl9CisJZWxzZSBpZiAobmVlZF93YWl0X3JldHVybikKKwl7CisJICAgIC8qCisJICAgICAqIFRoZSBtc2dfc3RhcnQoKSBhYm92ZSBjbGVhcnMgbXNnX2RpZG91dC4gVGhlIHdhaXRfcmV0dXJuIHdlIGRvCisJICAgICAqIGhlcmUgc2hvdWxkIG5vdCBvdmVyd3JpdGUgdGhlIGNvbW1hbmQgdGhhdCBtYXkgYmUgc2hvd24gYmVmb3JlCisJICAgICAqIGRvaW5nIHRoYXQuCisJICAgICAqLworCSAgICBtc2dfZGlkb3V0IHw9IG1zZ19kaWRvdXRfYmVmb3JlX3N0YXJ0OworCSAgICB3YWl0X3JldHVybihGQUxTRSk7CisJfQorICAgIH0KKworI2lmbmRlZiBGRUFUX0VWQUwKKyAgICAvKgorICAgICAqIFJlc2V0IGlmX2xldmVsLCBpbiBjYXNlIGEgc291cmNlZCBzY3JpcHQgZmlsZSBjb250YWlucyBtb3JlICI6aWYiIHRoYW4KKyAgICAgKiAiOmVuZGlmIiAoY291bGQgYmUgIjppZiB4IHwgZm9vIHwgZW5kaWYiKS4KKyAgICAgKi8KKyAgICBpZl9sZXZlbCA9IDA7CisjZW5kaWYKKworICAgIC0tY2FsbF9kZXB0aDsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYgRkVBVF9FVkFMCisvKgorICogT2J0YWluIGEgbGluZSB3aGVuIGluc2lkZSBhICI6d2hpbGUiIGxvb3AuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2dldF93aGlsZV9saW5lKGMsIGNvb2tpZSwgaW5kZW50KQorICAgIGludAkJYzsKKyAgICB2b2lkCSpjb29raWU7CisgICAgaW50CQlpbmRlbnQ7Cit7CisgICAgc3RydWN0IHdoaWxlX2Nvb2tpZSAqY3AgPSAoc3RydWN0IHdoaWxlX2Nvb2tpZSAqKWNvb2tpZTsKKyAgICB3Y21kX1QJCSp3cDsKKyAgICBjaGFyX3UJCSpsaW5lOworCisgICAgaWYgKGNwLT5jdXJyZW50X2xpbmUgKyAxID49IGNwLT5saW5lc19nYXAtPmdhX2xlbikKKyAgICB7CisJaWYgKGNwLT5yZXBlYXRpbmcpCisJICAgIHJldHVybiBOVUxMOwkvKiB0cnlpbmcgdG8gcmVhZCBwYXN0IHRoZSAiOmVuZHdoaWxlIiAqLworCisJLyogRmlyc3QgdGltZSBpbnNpZGUgdGhlICI6d2hpbGUiOiBnZXQgbGluZSBub3JtYWxseS4gKi8KKwlpZiAoY3AtPmdldGxpbmUgPT0gTlVMTCkKKwkgICAgbGluZSA9IGdldGNtZGxpbmUoYywgMEwsIGluZGVudCk7CisJZWxzZQorCSAgICBsaW5lID0gY3AtPmdldGxpbmUoYywgY3AtPmNvb2tpZSwgaW5kZW50KTsKKwlpZiAoc3RvcmVfd2hpbGVfbGluZShjcC0+bGluZXNfZ2FwLCBsaW5lKSA9PSBPSykKKwkgICAgKytjcC0+Y3VycmVudF9saW5lOworCisJcmV0dXJuIGxpbmU7CisgICAgfQorCisgICAgS2V5VHlwZWQgPSBGQUxTRTsKKyAgICArK2NwLT5jdXJyZW50X2xpbmU7CisgICAgd3AgPSAod2NtZF9UICopKGNwLT5saW5lc19nYXAtPmdhX2RhdGEpICsgY3AtPmN1cnJlbnRfbGluZTsKKyAgICBzb3VyY2luZ19sbnVtID0gd3AtPmxudW07CisgICAgcmV0dXJuIHZpbV9zdHJzYXZlKHdwLT5saW5lKTsKK30KKworLyoKKyAqIFN0b3JlIGEgbGluZSBpbiAiZ2FwIiBzbyB0aGF0IGEgIjp3aGlsZSIgbG9vcCBjYW4gZXhlY3V0ZSBpdCBhZ2Fpbi4KKyAqLworICAgIHN0YXRpYyBpbnQKK3N0b3JlX3doaWxlX2xpbmUoZ2FwLCBsaW5lKQorICAgIGdhcnJheV9UCSpnYXA7CisgICAgY2hhcl91CSpsaW5lOworeworICAgIGlmIChnYV9ncm93KGdhcCwgMSkgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKyAgICAoKHdjbWRfVCAqKShnYXAtPmdhX2RhdGEpKVtnYXAtPmdhX2xlbl0ubGluZSA9IHZpbV9zdHJzYXZlKGxpbmUpOworICAgICgod2NtZF9UICopKGdhcC0+Z2FfZGF0YSkpW2dhcC0+Z2FfbGVuXS5sbnVtID0gc291cmNpbmdfbG51bTsKKyAgICArK2dhcC0+Z2FfbGVuOworICAgIC0tZ2FwLT5nYV9yb29tOworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIEZyZWUgdGhlIGxpbmVzIHN0b3JlZCBmb3IgYSAiOndoaWxlIiBsb29wLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZyZWVfY21kbGluZXMoZ2FwKQorICAgIGdhcnJheV9UCSpnYXA7Cit7CisgICAgd2hpbGUgKGdhcC0+Z2FfbGVuID4gMCkKKyAgICB7CisJdmltX2ZyZWUoKCh3Y21kX1QgKikoZ2FwLT5nYV9kYXRhKSlbZ2FwLT5nYV9sZW4gLSAxXS5saW5lKTsKKwktLWdhcC0+Z2FfbGVuOworCSsrZ2FwLT5nYV9yb29tOworICAgIH0KK30KKyNlbmRpZgorCisvKgorICogSWYgImdldGxpbmUiIGlzIGdldF93aGlsZV9saW5lKCksIHJldHVybiBUUlVFIGlmIHRoZSBnZXRsaW5lIGl0IHVzZXMgZXF1YWxzCisgKiAiZnVuYyIuICAqIE90aGVyd2lzZSByZXR1cm4gVFJVRSB3aGVuICJnZXRsaW5lIiBlcXVhbHMgImZ1bmMiLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBpbnQKK2dldGxpbmVfZXF1YWwoZ2V0bGluZSwgY29va2llLCBmdW5jKQorICAgIGNoYXJfdQkqKCpnZXRsaW5lKSBfX0FSR1MoKGludCwgdm9pZCAqLCBpbnQpKTsKKyAgICB2b2lkCSpjb29raWU7CQkvKiBhcmd1bWVudCBmb3IgZ2V0bGluZSgpICovCisgICAgY2hhcl91CSooKmZ1bmMpIF9fQVJHUygoaW50LCB2b2lkICosIGludCkpOworeworI2lmZGVmIEZFQVRfRVZBTAorICAgIGNoYXJfdQkJKigqZ3ApIF9fQVJHUygoaW50LCB2b2lkICosIGludCkpOworICAgIHN0cnVjdCB3aGlsZV9jb29raWUgKmNwOworCisgICAgLyogV2hlbiAiZ2V0bGluZSIgaXMgImdldF93aGlsZV9saW5lKCkiIHVzZSB0aGUgImNvb2tpZSIgdG8gZmluZCB0aGUKKyAgICAgKiBmdW5jdGlvbiB0aGF0J3Mgb3JpZ25hbGx5IHVzZWQgdG8gb2J0YWluIHRoZSBsaW5lcy4gIFRoaXMgbWF5IGJlIG5lc3RlZAorICAgICAqIHNldmVyYWwgbGV2ZWxzLiAqLworICAgIGdwID0gZ2V0bGluZTsKKyAgICBjcCA9IChzdHJ1Y3Qgd2hpbGVfY29va2llICopY29va2llOworICAgIHdoaWxlIChncCA9PSBnZXRfd2hpbGVfbGluZSkKKyAgICB7CisJZ3AgPSBjcC0+Z2V0bGluZTsKKwljcCA9IGNwLT5jb29raWU7CisgICAgfQorICAgIHJldHVybiBncCA9PSBmdW5jOworI2Vsc2UKKyAgICByZXR1cm4gZ2V0bGluZSA9PSBmdW5jOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChGRUFUX01CWVRFKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIElmICJnZXRsaW5lIiBpcyBnZXRfd2hpbGVfbGluZSgpLCByZXR1cm4gdGhlIGNvb2tpZSB1c2VkIGJ5IHRoZSBvcmlnaW5hbAorICogZ2V0bGluZSBmdW5jdGlvbi4gIE90aGVyd2lzZSByZXR1cm4gImNvb2tpZSIuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHZvaWQgKgorZ2V0bGluZV9jb29raWUoZ2V0bGluZSwgY29va2llKQorICAgIGNoYXJfdQkqKCpnZXRsaW5lKSBfX0FSR1MoKGludCwgdm9pZCAqLCBpbnQpKTsKKyAgICB2b2lkCSpjb29raWU7CQkvKiBhcmd1bWVudCBmb3IgZ2V0bGluZSgpICovCit7CisjIGlmZGVmIEZFQVRfRVZBTAorICAgIGNoYXJfdQkJKigqZ3ApIF9fQVJHUygoaW50LCB2b2lkICosIGludCkpOworICAgIHN0cnVjdCB3aGlsZV9jb29raWUgKmNwOworCisgICAgLyogV2hlbiAiZ2V0bGluZSIgaXMgImdldF93aGlsZV9saW5lKCkiIHVzZSB0aGUgImNvb2tpZSIgdG8gZmluZCB0aGUKKyAgICAgKiBjb29raWUgdGhhdCdzIG9yaWduYWxseSB1c2VkIHRvIG9idGFpbiB0aGUgbGluZXMuICBUaGlzIG1heSBiZSBuZXN0ZWQKKyAgICAgKiBzZXZlcmFsIGxldmVscy4gKi8KKyAgICBncCA9IGdldGxpbmU7CisgICAgY3AgPSAoc3RydWN0IHdoaWxlX2Nvb2tpZSAqKWNvb2tpZTsKKyAgICB3aGlsZSAoZ3AgPT0gZ2V0X3doaWxlX2xpbmUpCisgICAgeworCWdwID0gY3AtPmdldGxpbmU7CisJY3AgPSBjcC0+Y29va2llOworICAgIH0KKyAgICByZXR1cm4gY3A7CisjIGVsc2UKKyAgICByZXR1cm4gY29va2llOworIyBlbmRpZgorfQorI2VuZGlmCisKKy8qCisgKiBFeGVjdXRlIG9uZSBFeCBjb21tYW5kLgorICoKKyAqIElmICdzb3VyY2luZycgaXMgVFJVRSwgdGhlIGNvbW1hbmQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZS4KKyAqCisgKiAxLiBza2lwIGNvbW1lbnQgbGluZXMgYW5kIGxlYWRpbmcgc3BhY2UKKyAqIDIuIGhhbmRsZSBjb21tYW5kIG1vZGlmaWVycworICogMy4gcGFyc2UgcmFuZ2UKKyAqIDQuIHBhcnNlIGNvbW1hbmQKKyAqIDUuIHBhcnNlIGFyZ3VtZW50cworICogNi4gc3dpdGNoIG9uIGNvbW1hbmQgbmFtZQorICoKKyAqIE5vdGU6ICJnZXRsaW5lIiBjYW4gYmUgTlVMTC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgcmVjdXJzaXZlbHkhCisgKi8KKyNpZiAoX01TQ19WRVIgPT0gMTIwMCkKKy8qCisgKiBPcHRpbWlzYXRpb24gYnVnIGluIFZDKysgdmVyc2lvbiA2LjAKKyAqIFRPRE86IGNoZWNrIHRoaXMgaXMgc3RpbGwgcHJlc2VudCBhZnRlciBlYWNoIHNlcnZpY2UgcGFjaworICovCisjIHByYWdtYSBvcHRpbWl6ZSggImciLCBvZmYgKQorI2VuZGlmCisgICAgc3RhdGljIGNoYXJfdSAqCitkb19vbmVfY21kKGNtZGxpbmVwLCBzb3VyY2luZywKKyNpZmRlZiBGRUFUX0VWQUwKKwkJCSAgICBjc3RhY2ssCisjZW5kaWYKKwkJCQkgICAgZ2V0bGluZSwgY29va2llKQorICAgIGNoYXJfdQkJKipjbWRsaW5lcDsKKyAgICBpbnQJCQlzb3VyY2luZzsKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBzdHJ1Y3QgY29uZHN0YWNrCSpjc3RhY2s7CisjZW5kaWYKKyAgICBjaGFyX3UJCSooKmdldGxpbmUpIF9fQVJHUygoaW50LCB2b2lkICosIGludCkpOworICAgIHZvaWQJCSpjb29raWU7CQkvKiBhcmd1bWVudCBmb3IgZ2V0bGluZSgpICovCit7CisgICAgY2hhcl91CQkqcDsKKyAgICBsaW5lbnJfVAkJbG51bTsKKyAgICBsb25nCQluOworICAgIGNoYXJfdQkJKmVycm9ybXNnID0gTlVMTDsJLyogZXJyb3IgbWVzc2FnZSAqLworICAgIGV4YXJnX1QJCWVhOwkJCS8qIEV4IGNvbW1hbmQgYXJndW1lbnRzICovCisgICAgbG9uZwkJdmVyYm9zZV9zYXZlID0gLTE7CisgICAgaW50CQkJc2F2ZV9tc2dfc2Nyb2xsID0gMDsKKyAgICBpbnQJCQlkaWRfc2lsZW50ID0gMDsKKyAgICBpbnQJCQlkaWRfZXNpbGVudCA9IDA7CisgICAgY21kbW9kX1QJCXNhdmVfY21kbW9kOworICAgIGludAkJCW5pOwkJCS8qIHNldCB3aGVuIE5vdCBJbXBsZW1lbnRlZCAqLworCisgICAgdmltX21lbXNldCgmZWEsIDAsIHNpemVvZihlYSkpOworICAgIGVhLmxpbmUxID0gMTsKKyAgICBlYS5saW5lMiA9IDE7CisjaWZkZWYgRkVBVF9FVkFMCisgICAgKytleF9uZXN0aW5nX2xldmVsOworI2VuZGlmCisKKwkvKiB3aGVuIG5vdCBlZGl0aW5nIHRoZSBsYXN0IGZpbGUgOnEgaGFzIHRvIGJlIHR5cGVkIHR3aWNlICovCisgICAgaWYgKHF1aXRtb3JlCisjaWZkZWYgRkVBVF9FVkFMCisJICAgIC8qIGF2b2lkIHRoYXQgYSBmdW5jdGlvbiBjYWxsIGluICdzdGF0dXNsaW5lJyBkb2VzIHRoaXMgKi8KKwkgICAgJiYgIWdldGxpbmVfZXF1YWwoZ2V0bGluZSwgY29va2llLCBnZXRfZnVuY19saW5lKQorI2VuZGlmCisJICAgICkKKwktLXF1aXRtb3JlOworCisgICAgLyoKKyAgICAgKiBSZXNldCBicm93c2UsIGNvbmZpcm0sIGV0Yy4uICBUaGV5IGFyZSByZXN0b3JlZCB3aGVuIHJldHVybmluZywgZm9yCisgICAgICogcmVjdXJzaXZlIGNhbGxzLgorICAgICAqLworICAgIHNhdmVfY21kbW9kID0gY21kbW9kOworICAgIHZpbV9tZW1zZXQoJmNtZG1vZCwgMCwgc2l6ZW9mKGNtZG1vZCkpOworCisgICAgLyoKKyAgICAgKiBSZXBlYXQgdW50aWwgbm8gbW9yZSBjb21tYW5kIG1vZGlmaWVycyBhcmUgZm91bmQuCisgICAgICovCisgICAgZWEuY21kID0gKmNtZGxpbmVwOworICAgIGZvciAoOzspCisgICAgeworLyoKKyAqIDEuIHNraXAgY29tbWVudCBsaW5lcyBhbmQgbGVhZGluZyB3aGl0ZSBzcGFjZSBhbmQgY29sb25zCisgKi8KKwl3aGlsZSAoKmVhLmNtZCA9PSAnICcgfHwgKmVhLmNtZCA9PSAnXHQnIHx8ICplYS5jbWQgPT0gJzonKQorCSAgICArK2VhLmNtZDsKKworCS8qIGluIGV4IG1vZGUsIGFuIGVtcHR5IGxpbmUgd29ya3MgbGlrZSA6KyAqLworCWlmICgqZWEuY21kID09IE5VTCAmJiBleG1vZGVfYWN0aXZlCisJCQkmJiAoZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldGV4bW9kZWxpbmUpCisJCQkgICAgfHwgZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldGV4bGluZSkpKQorCXsKKwkgICAgZWEuY21kID0gKGNoYXJfdSAqKSIrIjsKKwkgICAgZXhfcHJlc3NlZHJldHVybiA9IFRSVUU7CisJfQorCisJLyogaWdub3JlIGNvbW1lbnQgYW5kIGVtcHR5IGxpbmVzICovCisJaWYgKCplYS5jbWQgPT0gJyInIHx8ICplYS5jbWQgPT0gTlVMKQorCSAgICBnb3RvIGRvZW5kOworCisvKgorICogMi4gaGFuZGxlIGNvbW1hbmQgbW9kaWZpZXJzLgorICovCisJcCA9IGVhLmNtZDsKKwlpZiAoVklNX0lTRElHSVQoKmVhLmNtZCkpCisJICAgIHAgPSBza2lwd2hpdGUoc2tpcGRpZ2l0cyhlYS5jbWQpKTsKKwlzd2l0Y2ggKCpwKQorCXsKKwkgICAgLyogV2hlbiBhZGRpbmcgYW4gZW50cnksIGFsc28gbW9kaWZ5IGNtZF9leGlzdHMoKS4gKi8KKwkgICAgY2FzZSAnYSc6CWlmICghY2hlY2tmb3JjbWQoJmVhLmNtZCwgImFib3ZlbGVmdCIsIDMpKQorCQkJICAgIGJyZWFrOworI2lmZGVmIEZFQVRfV0lORE9XUworCQkJY21kbW9kLnNwbGl0IHw9IFdTUF9BQk9WRTsKKyNlbmRpZgorCQkJY29udGludWU7CisKKwkgICAgY2FzZSAnYic6CWlmIChjaGVja2ZvcmNtZCgmZWEuY21kLCAiYmVsb3dyaWdodCIsIDMpKQorCQkJeworI2lmZGVmIEZFQVRfV0lORE9XUworCQkJICAgIGNtZG1vZC5zcGxpdCB8PSBXU1BfQkVMT1c7CisjZW5kaWYKKwkJCSAgICBjb250aW51ZTsKKwkJCX0KKwkJCWlmIChjaGVja2ZvcmNtZCgmZWEuY21kLCAiYnJvd3NlIiwgMykpCisJCQl7CisjaWZkZWYgRkVBVF9CUk9XU0UKKwkJCSAgICBjbWRtb2QuYnJvd3NlID0gVFJVRTsKKyNlbmRpZgorCQkJICAgIGNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFjaGVja2ZvcmNtZCgmZWEuY21kLCAiYm90cmlnaHQiLCAyKSkKKwkJCSAgICBicmVhazsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkJCWNtZG1vZC5zcGxpdCB8PSBXU1BfQk9UOworI2VuZGlmCisJCQljb250aW51ZTsKKworCSAgICBjYXNlICdjJzoJaWYgKCFjaGVja2ZvcmNtZCgmZWEuY21kLCAiY29uZmlybSIsIDQpKQorCQkJICAgIGJyZWFrOworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKwkJCWNtZG1vZC5jb25maXJtID0gVFJVRTsKKyNlbmRpZgorCQkJY29udGludWU7CisKKwkgICAgY2FzZSAnayc6CWlmIChjaGVja2ZvcmNtZCgmZWEuY21kLCAia2VlcG1hcmtzIiwgMykpCisJCQl7CisJCQkgICAgY21kbW9kLmtlZXBtYXJrcyA9IFRSVUU7CisJCQkgICAgY29udGludWU7CisJCQl9CisJCQlpZiAoIWNoZWNrZm9yY21kKCZlYS5jbWQsICJrZWVwanVtcHMiLCA1KSkKKwkJCSAgICBicmVhazsKKwkJCWNtZG1vZC5rZWVwanVtcHMgPSBUUlVFOworCQkJY29udGludWU7CisKKwkJCS8qICI6aGlkZSIgYW5kICI6aGlkZSB8IGNtZCIgYXJlIG5vdCBtb2RpZmllcnMgKi8KKwkgICAgY2FzZSAnaCc6CWlmIChwICE9IGVhLmNtZCB8fCAhY2hlY2tmb3JjbWQoJnAsICJoaWRlIiwgMykKKwkJCQkJICAgICAgIHx8ICpwID09IE5VTCB8fCBlbmRzX2V4Y21kKCpwKSkKKwkJCSAgICBicmVhazsKKwkJCWVhLmNtZCA9IHA7CisJCQljbWRtb2QuaGlkZSA9IFRSVUU7CisJCQljb250aW51ZTsKKworCSAgICBjYXNlICdsJzoJaWYgKGNoZWNrZm9yY21kKCZlYS5jbWQsICJsb2NrbWFya3MiLCAzKSkKKwkJCXsKKwkJCSAgICBjbWRtb2QubG9ja21hcmtzID0gVFJVRTsKKwkJCSAgICBjb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCFjaGVja2ZvcmNtZCgmZWEuY21kLCAibGVmdGFib3ZlIiwgNSkpCisJCQkgICAgYnJlYWs7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJCQljbWRtb2Quc3BsaXQgfD0gV1NQX0FCT1ZFOworI2VuZGlmCisJCQljb250aW51ZTsKKworCSAgICBjYXNlICdyJzoJaWYgKCFjaGVja2ZvcmNtZCgmZWEuY21kLCAicmlnaHRiZWxvdyIsIDYpKQorCQkJICAgIGJyZWFrOworI2lmZGVmIEZFQVRfV0lORE9XUworCQkJY21kbW9kLnNwbGl0IHw9IFdTUF9CRUxPVzsKKyNlbmRpZgorCQkJY29udGludWU7CisKKwkgICAgY2FzZSAncyc6CWlmICghY2hlY2tmb3JjbWQoJmVhLmNtZCwgInNpbGVudCIsIDMpKQorCQkJICAgIGJyZWFrOworCQkJKytkaWRfc2lsZW50OworCQkJKyttc2dfc2lsZW50OworCQkJc2F2ZV9tc2dfc2Nyb2xsID0gbXNnX3Njcm9sbDsKKwkJCWlmICgqZWEuY21kID09ICchJyAmJiAhdmltX2lzd2hpdGUoZWEuY21kWy0xXSkpCisJCQl7CisJCQkgICAgLyogIjpzaWxlbnQhIiwgYnV0IG5vdCAic2lsZW50ICFjbWQiICovCisJCQkgICAgZWEuY21kID0gc2tpcHdoaXRlKGVhLmNtZCArIDEpOworCQkJICAgICsrZW1zZ19zaWxlbnQ7CisJCQkgICAgKytkaWRfZXNpbGVudDsKKwkJCX0KKwkJCWNvbnRpbnVlOworCisJICAgIGNhc2UgJ3QnOglpZiAoIWNoZWNrZm9yY21kKCZlYS5jbWQsICJ0b3BsZWZ0IiwgMikpCisJCQkgICAgYnJlYWs7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJCQljbWRtb2Quc3BsaXQgfD0gV1NQX1RPUDsKKyNlbmRpZgorCQkJY29udGludWU7CisKKwkgICAgY2FzZSAndic6CWlmIChjaGVja2ZvcmNtZCgmZWEuY21kLCAidmVydGljYWwiLCA0KSkKKwkJCXsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQkJICAgIGNtZG1vZC5zcGxpdCB8PSBXU1BfVkVSVDsKKyNlbmRpZgorCQkJICAgIGNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFjaGVja2ZvcmNtZCgmcCwgInZlcmJvc2UiLCA0KSkKKwkJCSAgICBicmVhazsKKwkJCWlmICh2ZXJib3NlX3NhdmUgPCAwKQorCQkJICAgIHZlcmJvc2Vfc2F2ZSA9IHBfdmVyYm9zZTsKKwkJCXBfdmVyYm9zZSA9IGF0b2koKGNoYXIgKillYS5jbWQpOworCQkJaWYgKHBfdmVyYm9zZSA9PSAwKQorCQkJICAgIHBfdmVyYm9zZSA9IDE7CisJCQllYS5jbWQgPSBwOworCQkJY29udGludWU7CisJfQorCWJyZWFrOworICAgIH0KKworI2lmZGVmIEZFQVRfRVZBTAorICAgIGVhLnNraXAgPSBkaWRfZW1zZyB8fCBnb3RfaW50IHx8IGRpZF90aHJvdyB8fCAoY3N0YWNrLT5jc19pZHggPj0gMAorCQkJICYmICEoY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gJiBDU0ZfQUNUSVZFKSk7CisjZWxzZQorICAgIGVhLnNraXAgPSAoaWZfbGV2ZWwgPiAwKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9FVkFMCisgICAgLyogTWF5IGdvIHRvIGRlYnVnIG1vZGUuICBJZiB0aGlzIGhhcHBlbnMgYW5kIHRoZSAiPnF1aXQiIGRlYnVnIGNvbW1hbmQgaXMKKyAgICAgKiB1c2VkLCB0aHJvdyBhbiBpbnRlcnJ1cHQgZXhjZXB0aW9uIGFuZCBza2lwIHRoZSBuZXh0IGNvbW1hbmQuICovCisgICAgZGJnX2NoZWNrX2JyZWFrcG9pbnQoJmVhKTsKKyAgICBpZiAoIWVhLnNraXAgJiYgZ290X2ludCkKKyAgICB7CisJZWEuc2tpcCA9IFRSVUU7CisJKHZvaWQpZG9faW50dGhyb3coY3N0YWNrKTsKKyAgICB9CisjZW5kaWYKKworLyoKKyAqIDMuIHBhcnNlIGEgcmFuZ2Ugc3BlY2lmaWVyIG9mIHRoZSBmb3JtOiBhZGRyIFssYWRkcl0gWzthZGRyXSAuLgorICoKKyAqIHdoZXJlICdhZGRyJyBpczoKKyAqCisgKiAlCSAgICAgIChlbnRpcmUgZmlsZSkKKyAqICQgIFsrLU5VTV0KKyAqICd4IFsrLU5VTV0gKHdoZXJlIHggZGVub3RlcyBhIGN1cnJlbnRseSBkZWZpbmVkIG1hcmspCisgKiAuICBbKy1OVU1dCisgKiBbKy1OVU1dLi4KKyAqIE5VTQorICoKKyAqIFRoZSBlYS5jbWQgcG9pbnRlciBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZQorICogcmFuZ2Ugc3BlYy4gSWYgYW4gaW5pdGlhbCBhZGRyZXNzIGlzIGZvdW5kLCBidXQgbm8gc2Vjb25kLCB0aGUgdXBwZXIgYm91bmQKKyAqIGlzIGVxdWFsIHRvIHRoZSBsb3dlci4KKyAqLworCisgICAgLyogcmVwZWF0IGZvciBhbGwgJywnIG9yICc7JyBzZXBhcmF0ZWQgYWRkcmVzc2VzICovCisgICAgZm9yICg7OykKKyAgICB7CisJZWEubGluZTEgPSBlYS5saW5lMjsKKwllYS5saW5lMiA9IGN1cndpbi0+d19jdXJzb3IubG51bTsgICAvKiBkZWZhdWx0IGlzIGN1cnJlbnQgbGluZSBudW1iZXIgKi8KKwllYS5jbWQgPSBza2lwd2hpdGUoZWEuY21kKTsKKwlsbnVtID0gZ2V0X2FkZHJlc3MoJmVhLmNtZCwgZWEuc2tpcCwgZWEuYWRkcl9jb3VudCA9PSAwKTsKKwlpZiAoZWEuY21kID09IE5VTEwpCQkgICAgLyogZXJyb3IgZGV0ZWN0ZWQgKi8KKwkgICAgZ290byBkb2VuZDsKKwlpZiAobG51bSA9PSBNQVhMTlVNKQorCXsKKwkgICAgaWYgKCplYS5jbWQgPT0gJyUnKQkJICAgIC8qICclJyAtIGFsbCBsaW5lcyAqLworCSAgICB7CisJCSsrZWEuY21kOworCQllYS5saW5lMSA9IDE7CisJCWVhLmxpbmUyID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJCSsrZWEuYWRkcl9jb3VudDsKKwkgICAgfQorCQkJCQkgICAgLyogJyonIC0gdmlzdWFsIGFyZWEgKi8KKwkgICAgZWxzZSBpZiAoKmVhLmNtZCA9PSAnKicgJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX1NUQVIpID09IE5VTEwpCisJICAgIHsKKwkJcG9zX1QJICAgICpmcDsKKworCQkrK2VhLmNtZDsKKwkJaWYgKCFlYS5za2lwKQorCQl7CisJCSAgICBmcCA9IGdldG1hcmsoJzwnLCBGQUxTRSk7CisJCSAgICBpZiAoY2hlY2tfbWFyayhmcCkgPT0gRkFJTCkKKwkJCWdvdG8gZG9lbmQ7CisJCSAgICBlYS5saW5lMSA9IGZwLT5sbnVtOworCQkgICAgZnAgPSBnZXRtYXJrKCc+JywgRkFMU0UpOworCQkgICAgaWYgKGNoZWNrX21hcmsoZnApID09IEZBSUwpCisJCQlnb3RvIGRvZW5kOworCQkgICAgZWEubGluZTIgPSBmcC0+bG51bTsKKwkJICAgICsrZWEuYWRkcl9jb3VudDsKKwkJfQorCSAgICB9CisJfQorCWVsc2UKKwkgICAgZWEubGluZTIgPSBsbnVtOworCWVhLmFkZHJfY291bnQrKzsKKworCWlmICgqZWEuY21kID09ICc7JykKKwl7CisJICAgIGlmICghZWEuc2tpcCkKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gZWEubGluZTI7CisJfQorCWVsc2UgaWYgKCplYS5jbWQgIT0gJywnKQorCSAgICBicmVhazsKKwkrK2VhLmNtZDsKKyAgICB9CisKKyAgICAvKiBPbmUgYWRkcmVzcyBnaXZlbjogc2V0IHN0YXJ0IGFuZCBlbmQgbGluZXMgKi8KKyAgICBpZiAoZWEuYWRkcl9jb3VudCA9PSAxKQorICAgIHsKKwllYS5saW5lMSA9IGVhLmxpbmUyOworCSAgICAvKiAuLi4gYnV0IG9ubHkgaW1wbGljaXQ6IHJlYWxseSBubyBhZGRyZXNzIGdpdmVuICovCisJaWYgKGxudW0gPT0gTUFYTE5VTSkKKwkgICAgZWEuYWRkcl9jb3VudCA9IDA7CisgICAgfQorCisgICAgLyogRG9uJ3QgbGVhdmUgdGhlIGN1cnNvciBvbiBhbiBpbGxlZ2FsIGxpbmUgKGNhdXNlZCBieSAnOycpICovCisgICAgY2hlY2tfY3Vyc29yX2xudW0oKTsKKworLyoKKyAqIDQuIHBhcnNlIGNvbW1hbmQKKyAqLworCisgICAgLyoKKyAgICAgKiBTa2lwICc6JyBhbmQgYW55IHdoaXRlIHNwYWNlCisgICAgICovCisgICAgZWEuY21kID0gc2tpcHdoaXRlKGVhLmNtZCk7CisgICAgd2hpbGUgKCplYS5jbWQgPT0gJzonKQorCWVhLmNtZCA9IHNraXB3aGl0ZShlYS5jbWQgKyAxKTsKKworICAgIC8qCisgICAgICogSWYgd2UgZ290IGEgbGluZSwgYnV0IG5vIGNvbW1hbmQsIHRoZW4gZ28gdG8gdGhlIGxpbmUuCisgICAgICogSWYgd2UgZmluZCBhICd8JyBvciAnXG4nIHdlIHNldCBlYS5uZXh0Y21kLgorICAgICAqLworICAgIGlmICgqZWEuY21kID09IE5VTCB8fCAqZWEuY21kID09ICciJyB8fAorCQkJICAgICAgIChlYS5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChlYS5jbWQpKSAhPSBOVUxMKQorICAgIHsKKwkvKgorCSAqIHN0cmFuZ2UgdmkgYmVoYXZpb3VyOgorCSAqICI6MyIJCWp1bXBzIHRvIGxpbmUgMworCSAqICI6M3wuLi4iCXByaW50cyBsaW5lIDMKKwkgKiAiOnwiCQlwcmludHMgY3VycmVudCBsaW5lCisJICovCisJaWYgKGVhLnNraXApCSAgICAvKiBza2lwIHRoaXMgaWYgaW5zaWRlIDppZiAqLworCSAgICBnb3RvIGRvZW5kOworCWlmICgqZWEuY21kID09ICd8JykKKwl7CisJICAgIGVhLmNtZGlkeCA9IENNRF9wcmludDsKKwkgICAgZWEuYXJndCA9IFJBTkdFK0NPVU5UK1RSTEJBUjsKKwkgICAgaWYgKChlcnJvcm1zZyA9IGludmFsaWRfcmFuZ2UoJmVhKSkgPT0gTlVMTCkKKwkgICAgeworCQljb3JyZWN0X3JhbmdlKCZlYSk7CisJCWV4X3ByaW50KCZlYSk7CisJICAgIH0KKwl9CisJZWxzZSBpZiAoZWEuYWRkcl9jb3VudCAhPSAwKQorCXsKKwkgICAgaWYgKGVhLmxpbmUyIDwgMCkKKwkJZXJyb3Jtc2cgPSBpbnZhbGlkX3JhbmdlKCZlYSk7CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoZWEubGluZTIgPT0gMCkKKwkJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IDE7CisJCWVsc2UgaWYgKGVhLmxpbmUyID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwkJZWxzZQorCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gZWEubGluZTI7CisJCWJlZ2lubGluZShCTF9TT0wgfCBCTF9GSVgpOworCSAgICB9CisJfQorCWdvdG8gZG9lbmQ7CisgICAgfQorCisgICAgLyogRmluZCB0aGUgY29tbWFuZCBhbmQgbGV0ICJwIiBwb2ludCB0byBhZnRlciBpdC4gKi8KKyAgICBwID0gZmluZF9jb21tYW5kKCZlYSwgTlVMTCk7CisKKyNpZmRlZiBGRUFUX1VTUl9DTURTCisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICB7CisJaWYgKCFlYS5za2lwKQorCSAgICBlcnJvcm1zZyA9IChjaGFyX3UgKilfKCJFNDY0OiBBbWJpZ3VvdXMgdXNlIG9mIHVzZXItZGVmaW5lZCBjb21tYW5kIik7CisJZ290byBkb2VuZDsKKyAgICB9CisgICAgLyogQ2hlY2sgZm9yIHdyb25nIGNvbW1hbmRzLiAqLworICAgIGlmICgqcCA9PSAnIScgJiYgZWEuY21kWzFdID09IDAxNTEgJiYgZWEuY21kWzBdID09IDc4KQorICAgIHsKKwllcnJvcm1zZyA9IHVjX2Z1bl9jbWQoKTsKKwlnb3RvIGRvZW5kOworICAgIH0KKyNlbmRpZgorICAgIGlmIChlYS5jbWRpZHggPT0gQ01EX1NJWkUpCisgICAgeworCWlmICghZWEuc2tpcCkKKwl7CisJICAgIFNUUkNQWShJT2J1ZmYsIF8oIkU0OTI6IE5vdCBhbiBlZGl0b3IgY29tbWFuZCIpKTsKKwkgICAgaWYgKCFzb3VyY2luZykKKwkgICAgeworCQlTVFJDQVQoSU9idWZmLCAiOiAiKTsKKwkJU1RSTkNBVChJT2J1ZmYsICpjbWRsaW5lcCwgNDApOworCSAgICB9CisJICAgIGVycm9ybXNnID0gSU9idWZmOworCX0KKwlnb3RvIGRvZW5kOworICAgIH0KKworICAgIG5pID0gKAorI2lmZGVmIEZFQVRfVVNSX0NNRFMKKwkgICAgIVVTRVJfQ01ESURYKGVhLmNtZGlkeCkgJiYKKyNlbmRpZgorCSAgICBjbWRuYW1lc1tlYS5jbWRpZHhdLmNtZF9mdW5jID09IGV4X25pKTsKKworI2lmbmRlZiBGRUFUX0VWQUwKKyAgICAvKgorICAgICAqIFdoZW4gdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBpcyBkaXNhYmxlZCwgcmVjb2duaXplIHRoZSAiOmlmIiBhbmQKKyAgICAgKiAiOmVuZGlmIiBjb21tYW5kcyBhbmQgaWdub3JlIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiBpdC4KKyAgICAgKi8KKyAgICBpZiAoZWEuY21kaWR4ID09IENNRF9pZikKKwkrK2lmX2xldmVsOworICAgIGlmIChpZl9sZXZlbCkKKyAgICB7CisJaWYgKGVhLmNtZGlkeCA9PSBDTURfZW5kaWYpCisJICAgIC0taWZfbGV2ZWw7CisJZ290byBkb2VuZDsKKyAgICB9CisKKyNlbmRpZgorCisgICAgaWYgKCpwID09ICchJyAmJiBlYS5jbWRpZHggIT0gQ01EX3N1YnN0aXR1dGUpICAgIC8qIGZvcmNlZCBjb21tYW5kcyAqLworICAgIHsKKwkrK3A7CisJZWEuZm9yY2VpdCA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKwllYS5mb3JjZWl0ID0gRkFMU0U7CisKKy8qCisgKiA1LiBwYXJzZSBhcmd1bWVudHMKKyAqLworI2lmZGVmIEZFQVRfVVNSX0NNRFMKKyAgICBpZiAoIVVTRVJfQ01ESURYKGVhLmNtZGlkeCkpCisjZW5kaWYKKwllYS5hcmd0ID0gY21kbmFtZXNbKGludCllYS5jbWRpZHhdLmNtZF9hcmd0OworCisgICAgaWYgKCFlYS5za2lwKQorICAgIHsKKyNpZmRlZiBIQVZFX1NBTkRCT1gKKwlpZiAoc2FuZGJveCAhPSAwICYmICEoZWEuYXJndCAmIFNCT1hPSykpCisJeworCSAgICAvKiBDb21tYW5kIG5vdCBhbGxvd2VkIGluIHNhbmRib3guICovCisJICAgIGVycm9ybXNnID0gKGNoYXJfdSAqKV8oZV9zYW5kYm94KTsKKwkgICAgZ290byBkb2VuZDsKKwl9CisjZW5kaWYKKwlpZiAoIWN1cmJ1Zi0+Yl9wX21hICYmIChlYS5hcmd0ICYgTU9ESUZZKSkKKwl7CisJICAgIC8qIENvbW1hbmQgbm90IGFsbG93ZWQgaW4gbm9uLSdtb2RpZmlhYmxlJyBidWZmZXIgKi8KKwkgICAgZXJyb3Jtc2cgPSAoY2hhcl91ICopXyhlX21vZGlmaWFibGUpOworCSAgICBnb3RvIGRvZW5kOworCX0KKyNpZmRlZiBGRUFUX0NNRFdJTgorCWlmIChjbWR3aW5fdHlwZSAhPSAwICYmICEoZWEuYXJndCAmIENNRFdJTikKKyMgaWZkZWYgRkVBVF9VU1JfQ01EUworCQkmJiAhVVNFUl9DTURJRFgoZWEuY21kaWR4KQorIyBlbmRpZgorCSAgICkKKwl7CisJICAgIC8qIENvbW1hbmQgbm90IGFsbG93ZWQgaW4gY21kbGluZSB3aW5kb3cuICovCisJICAgIGVycm9ybXNnID0gKGNoYXJfdSAqKV8oZV9jbWR3aW4pOworCSAgICBnb3RvIGRvZW5kOworCX0KKyNlbmRpZgorCisJaWYgKCFuaSAmJiAhKGVhLmFyZ3QgJiBSQU5HRSkgJiYgZWEuYWRkcl9jb3VudCA+IDApCisJeworCSAgICAvKiBubyByYW5nZSBhbGxvd2VkICovCisJICAgIGVycm9ybXNnID0gKGNoYXJfdSAqKV8oZV9ub3JhbmdlKTsKKwkgICAgZ290byBkb2VuZDsKKwl9CisgICAgfQorCisgICAgaWYgKCFuaSAmJiAhKGVhLmFyZ3QgJiBCQU5HKSAmJiBlYS5mb3JjZWl0KQkvKiBubyA8IT4gYWxsb3dlZCAqLworICAgIHsKKwllcnJvcm1zZyA9IChjaGFyX3UgKilfKGVfbm9iYW5nKTsKKwlnb3RvIGRvZW5kOworICAgIH0KKworICAgIC8qCisgICAgICogRG9uJ3QgY29tcGxhaW4gYWJvdXQgdGhlIHJhbmdlIGlmIGl0IGlzIG5vdCB1c2VkCisgICAgICogKGNvdWxkIGhhcHBlbiBpZiBsaW5lX2NvdW50IGlzIGFjY2lkZW50YWxseSBzZXQgdG8gMCkuCisgICAgICovCisgICAgaWYgKCFlYS5za2lwICYmICFuaSkKKyAgICB7CisJLyoKKwkgKiBJZiB0aGUgcmFuZ2UgaXMgYmFja3dhcmRzLCBhc2sgZm9yIGNvbmZpcm1hdGlvbiBhbmQsIGlmIGdpdmVuLCBzd2FwCisJICogZWEubGluZTEgJiBlYS5saW5lMiBzbyBpdCdzIGZvcndhcmRzIGFnYWluLgorCSAqIFdoZW4gZ2xvYmFsIGNvbW1hbmQgaXMgYnVzeSwgZG9uJ3QgYXNrLCB3aWxsIGZhaWwgYmVsb3cuCisJICovCisJaWYgKCFnbG9iYWxfYnVzeSAmJiBlYS5saW5lMSA+IGVhLmxpbmUyKQorCXsKKwkgICAgaWYgKHNvdXJjaW5nKQorCSAgICB7CisJCWVycm9ybXNnID0gKGNoYXJfdSAqKV8oIkU0OTM6IEJhY2t3YXJkcyByYW5nZSBnaXZlbiIpOworCQlnb3RvIGRvZW5kOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpbnQJbXNnX3NpbGVudF9zYXZlID0gbXNnX3NpbGVudDsKKworCQltc2dfc2lsZW50ID0gMDsKKwkJaWYgKGFza195ZXNubygoY2hhcl91ICopCisJCQlfKCJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4sIE9LIHRvIHN3YXAiKSwgRkFMU0UpICE9ICd5JykKKwkJZ290byBkb2VuZDsKKwkJbXNnX3NpbGVudCA9IG1zZ19zaWxlbnRfc2F2ZTsKKwkgICAgfQorCSAgICBsbnVtID0gZWEubGluZTE7CisJICAgIGVhLmxpbmUxID0gZWEubGluZTI7CisJICAgIGVhLmxpbmUyID0gbG51bTsKKwl9CisJaWYgKChlcnJvcm1zZyA9IGludmFsaWRfcmFuZ2UoJmVhKSkgIT0gTlVMTCkKKwkgICAgZ290byBkb2VuZDsKKyAgICB9CisKKyAgICBpZiAoKGVhLmFyZ3QgJiBOT1RBRFIpICYmIGVhLmFkZHJfY291bnQgPT0gMCkgLyogZGVmYXVsdCBpcyAxLCBub3QgY3Vyc29yICovCisJZWEubGluZTIgPSAxOworCisgICAgY29ycmVjdF9yYW5nZSgmZWEpOworCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaWYgKCgoZWEuYXJndCAmIFdIT0xFRk9MRCkgfHwgZWEuYWRkcl9jb3VudCA+PSAyKSAmJiAhZ2xvYmFsX2J1c3kpCisgICAgeworCS8qIFB1dCB0aGUgZmlyc3QgbGluZSBhdCB0aGUgc3RhcnQgb2YgYSBjbG9zZWQgZm9sZCwgcHV0IHRoZSBsYXN0IGxpbmUKKwkgKiBhdCB0aGUgZW5kIG9mIGEgY2xvc2VkIGZvbGQuICovCisJKHZvaWQpaGFzRm9sZGluZyhlYS5saW5lMSwgJmVhLmxpbmUxLCBOVUxMKTsKKwkodm9pZCloYXNGb2xkaW5nKGVhLmxpbmUyLCBOVUxMLCAmZWEubGluZTIpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorICAgIC8qCisgICAgICogRm9yIHRoZSA6bWFrZSBhbmQgOmdyZXAgY29tbWFuZHMgd2UgaW5zZXJ0IHRoZSAnbWFrZXByZycvJ2dyZXBwcmcnCisgICAgICogb3B0aW9uIGhlcmUsIHNvIHRoaW5ncyBsaWtlICUgZ2V0IGV4cGFuZGVkLgorICAgICAqLworICAgIGlmIChlYS5jbWRpZHggPT0gQ01EX21ha2UgfHwgZWEuY21kaWR4ID09IENNRF9ncmVwCisJCQkJCQkgIHx8IGVhLmNtZGlkeCA9PSBDTURfZ3JlcGFkZCkKKyAgICB7CisJY2hhcl91CQkqbmV3X2NtZGxpbmU7CisJY2hhcl91CQkqcHJvZ3JhbTsKKwljaGFyX3UJCSpwb3M7CisJY2hhcl91CQkqcHRyOworCWludAkJbGVuOworCWludAkJaTsKKworCWlmIChlYS5jbWRpZHggPT0gQ01EX2dyZXAgfHwgZWEuY21kaWR4ID09IENNRF9ncmVwYWRkKQorCXsKKwkgICAgaWYgKCpjdXJidWYtPmJfcF9ncCA9PSBOVUwpCisJCXByb2dyYW0gPSBwX2dwOworCSAgICBlbHNlCisJCXByb2dyYW0gPSBjdXJidWYtPmJfcF9ncDsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKCpjdXJidWYtPmJfcF9tcCA9PSBOVUwpCisJCXByb2dyYW0gPSBwX21wOworCSAgICBlbHNlCisJCXByb2dyYW0gPSBjdXJidWYtPmJfcF9tcDsKKwl9CisKKwlwID0gc2tpcHdoaXRlKHApOworCisJaWYgKChwb3MgPSAoY2hhcl91ICopc3Ryc3RyKChjaGFyICopcHJvZ3JhbSwgIiQqIikpICE9IE5VTEwpCisJewkJCQkvKiByZXBsYWNlICQqIGJ5IGdpdmVuIGFyZ3VtZW50cyAqLworCSAgICBpID0gMTsKKwkgICAgd2hpbGUgKChwb3MgPSAoY2hhcl91ICopc3Ryc3RyKChjaGFyICopcG9zICsgMiwgIiQqIikpICE9IE5VTEwpCisJCSsraTsKKwkgICAgbGVuID0gKGludClTVFJMRU4ocCk7CisJICAgIG5ld19jbWRsaW5lID0gYWxsb2MoKGludCkoU1RSTEVOKHByb2dyYW0pICsgaSAqIChsZW4gLSAyKSArIDEpKTsKKwkgICAgaWYgKG5ld19jbWRsaW5lID09IE5VTEwpCisJCWdvdG8gZG9lbmQ7CQkgICAgLyogb3V0IG9mIG1lbW9yeSAqLworCSAgICBwdHIgPSBuZXdfY21kbGluZTsKKwkgICAgd2hpbGUgKChwb3MgPSAoY2hhcl91ICopc3Ryc3RyKChjaGFyICopcHJvZ3JhbSwgIiQqIikpICE9IE5VTEwpCisJICAgIHsKKwkJaSA9IChpbnQpKHBvcyAtIHByb2dyYW0pOworCQlTVFJOQ1BZKHB0ciwgcHJvZ3JhbSwgaSk7CisJCVNUUkNQWShwdHIgKz0gaSwgcCk7CisJCXB0ciArPSBsZW47CisJCXByb2dyYW0gPSBwb3MgKyAyOworCSAgICB9CisJICAgIFNUUkNQWShwdHIsIHByb2dyYW0pOworCX0KKwllbHNlCisJeworCSAgICBuZXdfY21kbGluZSA9IGFsbG9jKChpbnQpKFNUUkxFTihwcm9ncmFtKSArIFNUUkxFTihwKSArIDIpKTsKKwkgICAgaWYgKG5ld19jbWRsaW5lID09IE5VTEwpCisJCWdvdG8gZG9lbmQ7CQkgICAgLyogb3V0IG9mIG1lbW9yeSAqLworCSAgICBTVFJDUFkobmV3X2NtZGxpbmUsIHByb2dyYW0pOworCSAgICBTVFJDQVQobmV3X2NtZGxpbmUsICIgIik7CisJICAgIFNUUkNBVChuZXdfY21kbGluZSwgcCk7CisJfQorCW1zZ19tYWtlKHApOworCS8qICdlYS5jbWQnIGlzIG5vdCBzZXQgaGVyZSwgYmVjYXVzZSBpdCBpcyBub3QgdXNlZCBhdCBDTURfbWFrZSAqLworCXZpbV9mcmVlKCpjbWRsaW5lcCk7CisJKmNtZGxpbmVwID0gbmV3X2NtZGxpbmU7CisJcCA9IG5ld19jbWRsaW5lOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBTa2lwIHRvIHN0YXJ0IG9mIGFyZ3VtZW50LgorICAgICAqIERvbid0IGRvIHRoaXMgZm9yIHRoZSAiOiEiIGNvbW1hbmQsIGJlY2F1c2UgIjohISAtbCIgbmVlZHMgdGhlIHNwYWNlLgorICAgICAqLworICAgIGlmIChlYS5jbWRpZHggPT0gQ01EX2JhbmcpCisJZWEuYXJnID0gcDsKKyAgICBlbHNlCisJZWEuYXJnID0gc2tpcHdoaXRlKHApOworCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgIisrb3B0PXZhbCIgYXJndW1lbnQuCisgICAgICogTXVzdCBiZSBmaXJzdCwgYWxsb3cgIjp3ICsrZW5jPXV0ZjggIWNtZCIKKyAgICAgKi8KKyAgICBpZiAoZWEuYXJndCAmIEFSR09QVCkKKwl3aGlsZSAoZWEuYXJnWzBdID09ICcrJyAmJiBlYS5hcmdbMV0gPT0gJysnKQorCSAgICBpZiAoZ2V0YXJnb3B0KCZlYSkgPT0gRkFJTCAmJiAhbmkpCisJICAgIHsKKwkJZXJyb3Jtc2cgPSAoY2hhcl91ICopXyhlX2ludmFyZyk7CisJCWdvdG8gZG9lbmQ7CisJICAgIH0KKworICAgIGlmIChlYS5jbWRpZHggPT0gQ01EX3dyaXRlIHx8IGVhLmNtZGlkeCA9PSBDTURfdXBkYXRlKQorICAgIHsKKwlpZiAoKmVhLmFyZyA9PSAnPicpCQkJLyogYXBwZW5kICovCisJeworCSAgICBpZiAoKisrZWEuYXJnICE9ICc+JykJCS8qIHR5cGVkIHdyb25nICovCisJICAgIHsKKwkJZXJyb3Jtc2cgPSAoY2hhcl91ICopXygiRTQ5NDogVXNlIHcgb3Igdz4+Iik7CisJCWdvdG8gZG9lbmQ7CisJICAgIH0KKwkgICAgZWEuYXJnID0gc2tpcHdoaXRlKGVhLmFyZyArIDEpOworCSAgICBlYS5hcHBlbmQgPSBUUlVFOworCX0KKwllbHNlIGlmICgqZWEuYXJnID09ICchJyAmJiBlYS5jbWRpZHggPT0gQ01EX3dyaXRlKSAgLyogOncgIWZpbHRlciAqLworCXsKKwkgICAgKytlYS5hcmc7CisJICAgIGVhLnVzZWZpbHRlciA9IFRSVUU7CisJfQorICAgIH0KKworICAgIGlmIChlYS5jbWRpZHggPT0gQ01EX3JlYWQpCisgICAgeworCWlmIChlYS5mb3JjZWl0KQorCXsKKwkgICAgZWEudXNlZmlsdGVyID0gVFJVRTsJCS8qIDpyISBmaWx0ZXIgaWYgZWEuZm9yY2VpdCAqLworCSAgICBlYS5mb3JjZWl0ID0gRkFMU0U7CisJfQorCWVsc2UgaWYgKCplYS5hcmcgPT0gJyEnKQkJLyogOnIgIWZpbHRlciAqLworCXsKKwkgICAgKytlYS5hcmc7CisJICAgIGVhLnVzZWZpbHRlciA9IFRSVUU7CisJfQorICAgIH0KKworICAgIGlmIChlYS5jbWRpZHggPT0gQ01EX2xzaGlmdCB8fCBlYS5jbWRpZHggPT0gQ01EX3JzaGlmdCkKKyAgICB7CisJZWEuYW1vdW50ID0gMTsKKwl3aGlsZSAoKmVhLmFyZyA9PSAqZWEuY21kKQkJLyogY291bnQgbnVtYmVyIG9mICc+JyBvciAnPCcgKi8KKwl7CisJICAgICsrZWEuYXJnOworCSAgICArK2VhLmFtb3VudDsKKwl9CisJZWEuYXJnID0gc2tpcHdoaXRlKGVhLmFyZyk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgIitjb21tYW5kIiBhcmd1bWVudCwgYmVmb3JlIGNoZWNraW5nIGZvciBuZXh0IGNvbW1hbmQuCisgICAgICogRG9uJ3QgZG8gdGhpcyBmb3IgIjpyZWFkICFjbWQiIGFuZCAiOndyaXRlICFjbWQiLgorICAgICAqLworICAgIGlmICgoZWEuYXJndCAmIEVESVRDTUQpICYmICFlYS51c2VmaWx0ZXIpCisJZWEuZG9fZWNtZF9jbWQgPSBnZXRhcmdjbWQoJmVhLmFyZyk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciAnfCcgdG8gc2VwYXJhdGUgY29tbWFuZHMgYW5kICciJyB0byBzdGFydCBjb21tZW50cy4KKyAgICAgKiBEb24ndCBkbyB0aGlzIGZvciAiOnJlYWQgIWNtZCIgYW5kICI6d3JpdGUgIWNtZCIuCisgICAgICovCisgICAgaWYgKChlYS5hcmd0ICYgVFJMQkFSKSAmJiAhZWEudXNlZmlsdGVyKQorCXNlcGFyYXRlX25leHRjbWQoJmVhKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIDxuZXdsaW5lPiB0byBlbmQgYSBzaGVsbCBjb21tYW5kLgorICAgICAqIEFsc28gZG8gdGhpcyBmb3IgIjpyZWFkICFjbWQiIGFuZCAiOndyaXRlICFjbWQiLgorICAgICAqLworICAgIGVsc2UgaWYgKGVhLmNtZGlkeCA9PSBDTURfYmFuZyB8fCBlYS51c2VmaWx0ZXIpCisgICAgeworCWZvciAocCA9IGVhLmFyZzsgKnA7ICsrcCkKKwl7CisJICAgIC8qIFJlbW92ZSBvbmUgYmFja3NsYXNoIGJlZm9yZSBhIG5ld2xpbmUsIHNvIHRoYXQgaXQncyBwb3NzaWJsZSB0bworCSAgICAgKiBwYXNzIGEgbmV3bGluZSB0byB0aGUgc2hlbGwgYW5kIGFsc28gYSBuZXdsaW5lIHRoYXQgaXMgcHJlY2VkZWQKKwkgICAgICogd2l0aCBhIGJhY2tzbGFzaC4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBlbmQgYSBzaGVsbAorCSAgICAgKiBjb21tYW5kIGluIGEgYmFja3NsYXNoLCBidXQgdGhhdCBkb2Vzbid0IGFwcGVhciB1c2VmdWwuCisJICAgICAqIEhhbHZpbmcgdGhlIG51bWJlciBvZiBiYWNrc2xhc2hlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCBwcmV2aW91cworCSAgICAgKiB2ZXJzaW9ucy4gKi8KKwkgICAgaWYgKCpwID09ICdcXCcgJiYgcFsxXSA9PSAnXG4nKQorCQltY2hfbWVtbW92ZShwLCBwICsgMSwgU1RSTEVOKHApKTsKKwkgICAgZWxzZSBpZiAoKnAgPT0gJ1xuJykKKwkgICAgeworCQllYS5uZXh0Y21kID0gcCArIDE7CisJCSpwID0gTlVMOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBpZiAoKGVhLmFyZ3QgJiBERkxBTEwpICYmIGVhLmFkZHJfY291bnQgPT0gMCkKKyAgICB7CisJZWEubGluZTEgPSAxOworCWVhLmxpbmUyID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisgICAgfQorCisgICAgLyogYWNjZXB0IG51bWJlcmVkIHJlZ2lzdGVyIG9ubHkgd2hlbiBubyBjb3VudCBhbGxvd2VkICg6cHV0KSAqLworICAgIGlmICggICAgICAgKGVhLmFyZ3QgJiBSRUdTVFIpCisJICAgICYmICplYS5hcmcgIT0gTlVMCisjaWZkZWYgRkVBVF9VU1JfQ01EUworCSAgICAmJiB2YWxpZF95YW5rX3JlZygqZWEuYXJnLCAoZWEuY21kaWR4ICE9IENNRF9wdXQKKwkJCQkJCSAgICYmIFVTRVJfQ01ESURYKGVhLmNtZGlkeCkpKQorCSAgICAvKiBEbyBub3QgYWxsb3cgcmVnaXN0ZXIgPSBmb3IgdXNlciBjb21tYW5kcyAqLworCSAgICAmJiAoIVVTRVJfQ01ESURYKGVhLmNtZGlkeCkgfHwgKmVhLmFyZyAhPSAnPScpCisjZWxzZQorCSAgICAmJiB2YWxpZF95YW5rX3JlZygqZWEuYXJnLCBlYS5jbWRpZHggIT0gQ01EX3B1dCkKKyNlbmRpZgorCSAgICAmJiAhKChlYS5hcmd0ICYgQ09VTlQpICYmIFZJTV9JU0RJR0lUKCplYS5hcmcpKSkKKyAgICB7CisJZWEucmVnbmFtZSA9ICplYS5hcmcrKzsKKyNpZmRlZiBGRUFUX0VWQUwKKwkvKiBmb3IgJz0nIHJlZ2lzdGVyOiBhY2NlcHQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgYXMgYW4gZXhwcmVzc2lvbiAqLworCWlmIChlYS5hcmdbLTFdID09ICc9JyAmJiBlYS5hcmdbMF0gIT0gTlVMKQorCXsKKwkgICAgc2V0X2V4cHJfbGluZSh2aW1fc3Ryc2F2ZShlYS5hcmcpKTsKKwkgICAgZWEuYXJnICs9IFNUUkxFTihlYS5hcmcpOworCX0KKyNlbmRpZgorCWVhLmFyZyA9IHNraXB3aGl0ZShlYS5hcmcpOworICAgIH0KKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIGEgY291bnQuICBXaGVuIGFjY2VwdGluZyBhIEJVRk5BTUUsIGRvbid0IHVzZSAiMTIzZm9vIiBhcyBhCisgICAgICogY291bnQsIGl0J3MgYSBidWZmZXIgbmFtZS4KKyAgICAgKi8KKyAgICBpZiAoKGVhLmFyZ3QgJiBDT1VOVCkgJiYgVklNX0lTRElHSVQoKmVhLmFyZykKKwkgICAgJiYgKCEoZWEuYXJndCAmIEJVRk5BTUUpIHx8ICoocCA9IHNraXBkaWdpdHMoZWEuYXJnKSkgPT0gTlVMCisJCQkJCQkJICB8fCB2aW1faXN3aGl0ZSgqcCkpKQorICAgIHsKKwluID0gZ2V0ZGlnaXRzKCZlYS5hcmcpOworCWVhLmFyZyA9IHNraXB3aGl0ZShlYS5hcmcpOworCWlmIChuIDw9IDAgJiYgIW5pKQorCXsKKwkgICAgZXJyb3Jtc2cgPSAoY2hhcl91ICopXyhlX3plcm9jb3VudCk7CisJICAgIGdvdG8gZG9lbmQ7CisJfQorCWlmIChlYS5hcmd0ICYgTk9UQURSKQkvKiBlLmcuIDpidWZmZXIgMiwgOnNsZWVwIDMgKi8KKwl7CisJICAgIGVhLmxpbmUyID0gbjsKKwkgICAgaWYgKGVhLmFkZHJfY291bnQgPT0gMCkKKwkJZWEuYWRkcl9jb3VudCA9IDE7CisJfQorCWVsc2UKKwl7CisJICAgIGVhLmxpbmUxID0gZWEubGluZTI7CisJICAgIGVhLmxpbmUyICs9IG4gLSAxOworCSAgICArK2VhLmFkZHJfY291bnQ7CisJICAgIC8qCisJICAgICAqIEJlIHZpIGNvbXBhdGlibGU6IG5vIGVycm9yIG1lc3NhZ2UgZm9yIG91dCBvZiByYW5nZS4KKwkgICAgICovCisJICAgIGlmIChlYS5saW5lMiA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQllYS5saW5lMiA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCX0KKyAgICB9CisJCQkJCQkvKiBubyBhcmd1bWVudHMgYWxsb3dlZCAqLworICAgIGlmICghbmkgJiYgIShlYS5hcmd0ICYgRVhUUkEpICYmICplYS5hcmcgIT0gTlVMICYmCisJCQkJIHZpbV9zdHJjaHIoKGNoYXJfdSAqKSJ8XCIiLCAqZWEuYXJnKSA9PSBOVUxMKQorICAgIHsKKwllcnJvcm1zZyA9IChjaGFyX3UgKilfKGVfdHJhaWxpbmcpOworCWdvdG8gZG9lbmQ7CisgICAgfQorCisgICAgaWYgKCFuaSAmJiAoZWEuYXJndCAmIE5FRURBUkcpICYmICplYS5hcmcgPT0gTlVMKQorICAgIHsKKwllcnJvcm1zZyA9IChjaGFyX3UgKilfKGVfYXJncmVxKTsKKwlnb3RvIGRvZW5kOworICAgIH0KKworI2lmZGVmIEZFQVRfRVZBTAorICAgIC8qCisgICAgICogU2tpcCB0aGUgY29tbWFuZCB3aGVuIGl0J3Mgbm90IGdvaW5nIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIFRoZSBjb21tYW5kcyBsaWtlIDppZiwgOmVuZGlmLCBldGMuIGFsd2F5cyBuZWVkIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEFsc28gbWFrZSBhbiBleGNlcHRpb24gZm9yIGNvbW1hbmRzIHRoYXQgaGFuZGxlIGEgdHJhaWxpbmcgY29tbWFuZAorICAgICAqIHRoZW1zZWx2ZXMuCisgICAgICovCisgICAgaWYgKGVhLnNraXApCisgICAgeworCXN3aXRjaCAoZWEuY21kaWR4KQorCXsKKwkgICAgLyogY29tbWFuZHMgdGhhdCBuZWVkIGV2YWx1YXRpb24gKi8KKwkgICAgY2FzZSBDTURfd2hpbGU6CisJICAgIGNhc2UgQ01EX2VuZHdoaWxlOgorCSAgICBjYXNlIENNRF9pZjoKKwkgICAgY2FzZSBDTURfZWxzZWlmOgorCSAgICBjYXNlIENNRF9lbHNlOgorCSAgICBjYXNlIENNRF9lbmRpZjoKKwkgICAgY2FzZSBDTURfdHJ5OgorCSAgICBjYXNlIENNRF9jYXRjaDoKKwkgICAgY2FzZSBDTURfZmluYWxseToKKwkgICAgY2FzZSBDTURfZW5kdHJ5OgorCSAgICBjYXNlIENNRF9mdW5jdGlvbjoKKwkJCQlicmVhazsKKworCSAgICAvKiBDb21tYW5kcyB0aGF0IGhhbmRsZSAnfCcgdGhlbXNlbHZlcy4gIENoZWNrOiBBIGNvbW1hbmQgc2hvdWxkCisJICAgICAqIGVpdGhlciBoYXZlIHRoZSBUUkxCQVIgZmxhZywgYXBwZWFyIGluIHRoaXMgbGlzdCBvciBhcHBlYXIgaW4KKwkgICAgICogdGhlIGxpc3QgYXQgIjpoZWxwIDpiYXIiLiAqLworCSAgICBjYXNlIENNRF9hYm92ZWxlZnQ6CisJICAgIGNhc2UgQ01EX2FuZDoKKwkgICAgY2FzZSBDTURfYmVsb3dyaWdodDoKKwkgICAgY2FzZSBDTURfYm90cmlnaHQ6CisJICAgIGNhc2UgQ01EX2Jyb3dzZToKKwkgICAgY2FzZSBDTURfY2FsbDoKKwkgICAgY2FzZSBDTURfY29uZmlybToKKwkgICAgY2FzZSBDTURfZGVsZnVuY3Rpb246CisJICAgIGNhc2UgQ01EX2RqdW1wOgorCSAgICBjYXNlIENNRF9kbGlzdDoKKwkgICAgY2FzZSBDTURfZHNlYXJjaDoKKwkgICAgY2FzZSBDTURfZHNwbGl0OgorCSAgICBjYXNlIENNRF9lY2hvOgorCSAgICBjYXNlIENNRF9lY2hvZXJyOgorCSAgICBjYXNlIENNRF9lY2hvbXNnOgorCSAgICBjYXNlIENNRF9lY2hvbjoKKwkgICAgY2FzZSBDTURfZXhlY3V0ZToKKwkgICAgY2FzZSBDTURfaGVscDoKKwkgICAgY2FzZSBDTURfaGlkZToKKwkgICAgY2FzZSBDTURfaWp1bXA6CisJICAgIGNhc2UgQ01EX2lsaXN0OgorCSAgICBjYXNlIENNRF9pc2VhcmNoOgorCSAgICBjYXNlIENNRF9pc3BsaXQ6CisJICAgIGNhc2UgQ01EX2tlZXBqdW1wczoKKwkgICAgY2FzZSBDTURfa2VlcG1hcmtzOgorCSAgICBjYXNlIENNRF9sZWZ0YWJvdmU6CisJICAgIGNhc2UgQ01EX2xldDoKKwkgICAgY2FzZSBDTURfbG9ja21hcmtzOgorCSAgICBjYXNlIENNRF9tYXRjaDoKKwkgICAgY2FzZSBDTURfcGVybDoKKwkgICAgY2FzZSBDTURfcHNlYXJjaDoKKwkgICAgY2FzZSBDTURfcHl0aG9uOgorCSAgICBjYXNlIENNRF9yZXR1cm46CisJICAgIGNhc2UgQ01EX3JpZ2h0YmVsb3c6CisJICAgIGNhc2UgQ01EX3J1Ynk6CisJICAgIGNhc2UgQ01EX3NpbGVudDoKKwkgICAgY2FzZSBDTURfc21hZ2ljOgorCSAgICBjYXNlIENNRF9zbm9tYWdpYzoKKwkgICAgY2FzZSBDTURfc3Vic3RpdHV0ZToKKwkgICAgY2FzZSBDTURfc3ludGF4OgorCSAgICBjYXNlIENNRF90Y2w6CisJICAgIGNhc2UgQ01EX3Rocm93OgorCSAgICBjYXNlIENNRF90aWxkZToKKwkgICAgY2FzZSBDTURfdG9wbGVmdDoKKwkgICAgY2FzZSBDTURfdW5sZXQ6CisJICAgIGNhc2UgQ01EX3ZlcmJvc2U6CisJICAgIGNhc2UgQ01EX3ZlcnRpY2FsOgorCQkJCWJyZWFrOworCisJICAgIGRlZmF1bHQ6CQlnb3RvIGRvZW5kOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIGlmIChlYS5hcmd0ICYgWEZJTEUpCisgICAgeworCWlmIChleHBhbmRfZmlsZW5hbWUoJmVhLCBjbWRsaW5lcCwgJmVycm9ybXNnKSA9PSBGQUlMKQorCSAgICBnb3RvIGRvZW5kOworICAgIH0KKworI2lmZGVmIEZFQVRfTElTVENNRFMKKyAgICAvKgorICAgICAqIEFjY2VwdCBidWZmZXIgbmFtZS4gIENhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgd2l0aCBhIGJ1ZmZlcgorICAgICAqIG51bWJlci4gIERvbid0IGRvIHRoaXMgZm9yIGEgdXNlciBjb21tYW5kLgorICAgICAqLworICAgIGlmICgoZWEuYXJndCAmIEJVRk5BTUUpICYmICplYS5hcmcgIT0gTlVMICYmIGVhLmFkZHJfY291bnQgPT0gMAorIyBpZmRlZiBGRUFUX1VTUl9DTURTCisJICAgICYmICFVU0VSX0NNRElEWChlYS5jbWRpZHgpCisjIGVuZGlmCisJICAgICkKKyAgICB7CisJLyoKKwkgKiA6YmRlbGV0ZSwgOmJ3aXBlb3V0IGFuZCA6YnVubG9hZCB0YWtlIHNldmVyYWwgYXJndW1lbnRzLCBzZXBhcmF0ZWQKKwkgKiBieSBzcGFjZXM6IGZpbmQgbmV4dCBzcGFjZSAoc2tpcHBpbmcgb3ZlciBlc2NhcGVkIGNoYXJhY3RlcnMpLgorCSAqIFRoZSBvdGhlcnMgdGFrZSBvbmUgYXJndW1lbnQ6IGlnbm9yZSB0cmFpbGluZyBzcGFjZXMuCisJICovCisJaWYgKGVhLmNtZGlkeCA9PSBDTURfYmRlbGV0ZSB8fCBlYS5jbWRpZHggPT0gQ01EX2J3aXBlb3V0CisJCQkJCQkgIHx8IGVhLmNtZGlkeCA9PSBDTURfYnVubG9hZCkKKwkgICAgcCA9IHNraXB0b3doaXRlX2VzYyhlYS5hcmcpOworCWVsc2UKKwl7CisJICAgIHAgPSBlYS5hcmcgKyBTVFJMRU4oZWEuYXJnKTsKKwkgICAgd2hpbGUgKHAgPiBlYS5hcmcgJiYgdmltX2lzd2hpdGUocFstMV0pKQorCQktLXA7CisJfQorCWVhLmxpbmUyID0gYnVmbGlzdF9maW5kcGF0KGVhLmFyZywgcCwgKGVhLmFyZ3QgJiBCVUZVTkwpICE9IDAsIEZBTFNFKTsKKwlpZiAoZWEubGluZTIgPCAwKQkgICAgLyogZmFpbGVkICovCisJICAgIGdvdG8gZG9lbmQ7CisJZWEuYWRkcl9jb3VudCA9IDE7CisJZWEuYXJnID0gc2tpcHdoaXRlKHApOworICAgIH0KKyNlbmRpZgorCisvKgorICogNi4gc3dpdGNoIG9uIGNvbW1hbmQgbmFtZQorICoKKyAqIFRoZSAiZWEiIHN0cnVjdHVyZSBob2xkcyB0aGUgYXJndW1lbnRzIHRoYXQgY2FuIGJlIHVzZWQuCisgKi8KKyAgICBlYS5jbWRsaW5lcCA9IGNtZGxpbmVwOworICAgIGVhLmdldGxpbmUgPSBnZXRsaW5lOworICAgIGVhLmNvb2tpZSA9IGNvb2tpZTsKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBlYS5jc3RhY2sgPSBjc3RhY2s7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVVNSX0NNRFMKKyAgICBpZiAoVVNFUl9DTURJRFgoZWEuY21kaWR4KSkKKyAgICB7CisJLyoKKwkgKiBFeGVjdXRlIGEgdXNlci1kZWZpbmVkIGNvbW1hbmQuCisJICovCisJZG9fdWNtZCgmZWEpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJLyoKKwkgKiBDYWxsIHRoZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBjb21tYW5kLgorCSAqLworCWVhLmVycm1zZyA9IE5VTEw7CisJKGNtZG5hbWVzW2VhLmNtZGlkeF0uY21kX2Z1bmMpKCZlYSk7CisJaWYgKGVhLmVycm1zZyAhPSBOVUxMKQorCSAgICBlcnJvcm1zZyA9IChjaGFyX3UgKilfKGVhLmVycm1zZyk7CisgICAgfQorCisjaWZkZWYgRkVBVF9FVkFMCisgICAgLyoKKyAgICAgKiBJZiB0aGUgY29tbWFuZCBqdXN0IGV4ZWN1dGVkIGNhbGxlZCBkb19jbWRsaW5lKCksIGFueSB0aHJvdyBvciAiOnJldHVybiIKKyAgICAgKiBvciAiOmZpbmlzaCIgZW5jb3VudGVyZWQgdGhlcmUgbXVzdCBhbHNvIGNoZWNrIHRoZSBjc3RhY2sgb2YgdGhlIHN0aWxsCisgICAgICogYWN0aXZlIGRvX2NtZGxpbmUoKSB0aGF0IGNhbGxlZCB0aGlzIGRvX29uZV9jbWQoKS4gIFJldGhyb3cgYW4gdW5jYXVnaHQKKyAgICAgKiBleGNlcHRpb24sIG9yIHJlYW5pbWF0ZSBhIHJldHVybmVkIGZ1bmN0aW9uIG9yIGZpbmlzaGVkIHNjcmlwdCBmaWxlIGFuZAorICAgICAqIHJldHVybiBvciBmaW5pc2ggaXQgYWdhaW4uCisgICAgICovCisgICAgaWYgKG5lZWRfcmV0aHJvdykKKwlkb190aHJvdyhjc3RhY2spOworICAgIGVsc2UgaWYgKGNoZWNrX2NzdGFjaykKKyAgICB7CisJaWYgKHNvdXJjZV9maW5pc2hlZChnZXRsaW5lLCBjb29raWUpKQorCSAgICBkb19maW5pc2goJmVhLCBUUlVFKTsKKwllbHNlIGlmIChnZXRsaW5lX2VxdWFsKGdldGxpbmUsIGNvb2tpZSwgZ2V0X2Z1bmNfbGluZSkKKwkJCQkJCSAgICYmIGN1cnJlbnRfZnVuY19yZXR1cm5lZCgpKQorCSAgICBkb19yZXR1cm4oJmVhLCBUUlVFLCBGQUxTRSwgTlVMTCk7CisgICAgfQorICAgIG5lZWRfcmV0aHJvdyA9IGNoZWNrX2NzdGFjayA9IEZBTFNFOworI2VuZGlmCisKK2RvZW5kOgorICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gMCkJLyogY2FuIGhhcHBlbiB3aXRoIHplcm8gbGluZSBudW1iZXIgKi8KKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSAxOworCisgICAgaWYgKGVycm9ybXNnICE9IE5VTEwgJiYgKmVycm9ybXNnICE9IE5VTCAmJiAhZGlkX2Vtc2cpCisgICAgeworCWlmIChzb3VyY2luZykKKwl7CisJICAgIGlmIChlcnJvcm1zZyAhPSBJT2J1ZmYpCisJICAgIHsKKwkJU1RSQ1BZKElPYnVmZiwgZXJyb3Jtc2cpOworCQllcnJvcm1zZyA9IElPYnVmZjsKKwkgICAgfQorCSAgICBTVFJDQVQoZXJyb3Jtc2csICI6ICIpOworCSAgICBTVFJOQ0FUKGVycm9ybXNnLCAqY21kbGluZXAsIElPU0laRSAtIFNUUkxFTihJT2J1ZmYpKTsKKwl9CisJZW1zZyhlcnJvcm1zZyk7CisgICAgfQorI2lmZGVmIEZFQVRfRVZBTAorICAgIGRvX2VycnRocm93KGNzdGFjaywKKwkgICAgKGVhLmNtZGlkeCAhPSBDTURfU0laRQorIyBpZmRlZiBGRUFUX1VTUl9DTURTCisJICAgICAmJiAhVVNFUl9DTURJRFgoZWEuY21kaWR4KQorIyBlbmRpZgorCSAgICApID8gY21kbmFtZXNbKGludCllYS5jbWRpZHhdLmNtZF9uYW1lIDogKGNoYXJfdSAqKU5VTEwpOworI2VuZGlmCisKKyAgICBpZiAodmVyYm9zZV9zYXZlID49IDApCisJcF92ZXJib3NlID0gdmVyYm9zZV9zYXZlOworCisgICAgY21kbW9kID0gc2F2ZV9jbWRtb2Q7CisKKyAgICBpZiAoZGlkX3NpbGVudCA+IDApCisgICAgeworCS8qIG1lc3NhZ2VzIGNvdWxkIGJlIGVuYWJsZWQgZm9yIGEgc2VyaW91cyBlcnJvciwgbmVlZCB0byBjaGVjayBpZiB0aGUKKwkgKiBjb3VudGVycyBkb24ndCBiZWNvbWUgbmVnYXRpdmUgKi8KKwltc2dfc2lsZW50IC09IGRpZF9zaWxlbnQ7CisJaWYgKG1zZ19zaWxlbnQgPCAwKQorCSAgICBtc2dfc2lsZW50ID0gMDsKKwllbXNnX3NpbGVudCAtPSBkaWRfZXNpbGVudDsKKwlpZiAoZW1zZ19zaWxlbnQgPCAwKQorCSAgICBlbXNnX3NpbGVudCA9IDA7CisJLyogUmVzdG9yZSBtc2dfc2Nyb2xsLCBpdCdzIHNldCBieSBmaWxlIEkvTyBjb21tYW5kcywgZXZlbiB3aGVuIG5vCisJICogbWVzc2FnZSBpcyBhY3R1YWxseSBkaXNwbGF5ZWQuICovCisJbXNnX3Njcm9sbCA9IHNhdmVfbXNnX3Njcm9sbDsKKyAgICB9CisKKyAgICBpZiAoZWEubmV4dGNtZCAmJiAqZWEubmV4dGNtZCA9PSBOVUwpCS8qIG5vdCByZWFsbHkgYSBuZXh0IGNvbW1hbmQgKi8KKwllYS5uZXh0Y21kID0gTlVMTDsKKworI2lmZGVmIEZFQVRfRVZBTAorICAgIC0tZXhfbmVzdGluZ19sZXZlbDsKKyNlbmRpZgorCisgICAgcmV0dXJuIGVhLm5leHRjbWQ7Cit9CisjaWYgKF9NU0NfVkVSID09IDEyMDApCisjIHByYWdtYSBvcHRpbWl6ZSggIiIsIG9uICkKKyNlbmRpZgorCisvKgorICogQ2hlY2sgZm9yIGEgY29tbWFuZCBtb2RpZmllciBjb21tYW5kIHdpdGggb3B0aW9uYWwgdGFpbC4KKyAqIElmIHRoZXJlIGlzIGEgbWF0Y2ggYWR2YW5jZSAicHAiIHRvIHRoZSBhcmd1bWVudCBhbmQgcmV0dXJuIFRSVUUuCisgKi8KKyAgICBzdGF0aWMgaW50CitjaGVja2ZvcmNtZChwcCwgY21kLCBsZW4pCisgICAgY2hhcl91CSoqcHA7CQkvKiBzdGFydCBvZiBjb21tYW5kIGxpbmUgKi8KKyAgICBjaGFyCSpjbWQ7CQkvKiBuYW1lIG9mIGNvbW1hbmQgKi8KKyAgICBpbnQJCWxlbjsJCS8qIHJlcXVpcmVkIGxlbmd0aCAqLworeworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IDA7IGNtZFtpXSAhPSBOVUw7ICsraSkKKwlpZiAoY21kW2ldICE9ICgqcHApW2ldKQorCSAgICBicmVhazsKKyAgICBpZiAoaSA+PSBsZW4gJiYgIWlzYWxwaGEoKCpwcClbaV0pKQorICAgIHsKKwkqcHAgPSBza2lwd2hpdGUoKnBwICsgaSk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIEZpbmQgYW4gRXggY29tbWFuZCBieSBpdHMgbmFtZSwgZWl0aGVyIGJ1aWx0LWluIG9yIHVzZXIuCisgKiBOYW1lIGNhbiBiZSBmb3VuZCBhdCBlYXAtPmNtZC4KKyAqIFJldHVybnMgcG9pbnRlciB0byBjaGFyIGFmdGVyIHRoZSBjb21tYW5kIG5hbWUuCisgKiBSZXR1cm5zIE5VTEwgZm9yIGFuIGFtYmlndW91cyB1c2VyIGNvbW1hbmQuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyBjaGFyX3UgKgorZmluZF9jb21tYW5kKGVhcCwgZnVsbCkKKyAgICBleGFyZ19UCSplYXA7CisgICAgaW50CQkqZnVsbDsKK3sKKyAgICBpbnQJCWxlbjsKKyAgICBjaGFyX3UJKnA7CisKKyAgICAvKgorICAgICAqIElzb2xhdGUgdGhlIGNvbW1hbmQgYW5kIHNlYXJjaCBmb3IgaXQgaW4gdGhlIGNvbW1hbmQgdGFibGUuCisgICAgICogRXhlcHRpb25zOgorICAgICAqIC0gdGhlICdrJyBjb21tYW5kIGNhbiBkaXJlY3RseSBiZSBmb2xsb3dlZCBieSBhbnkgY2hhcmFjdGVyLgorICAgICAqIC0gdGhlICdzJyBjb21tYW5kIGNhbiBiZSBmb2xsb3dlZCBkaXJlY3RseSBieSAnYycsICdnJywgJ2knLCAnSScgb3IgJ3InCisgICAgICoJICAgIGJ1dCA6c3JlW3dpbmRdIGlzIGFub3RoZXIgY29tbWFuZCwgYXMgYXJlIDpzY3JpcFt0bmFtZXNdLAorICAgICAqCSAgICA6c2NzW2NvcGVdLCA6c2ltW2FsdF0sIDpzaWdbbnNdIGFuZCA6c2lsW2VudF0uCisgICAgICovCisgICAgcCA9IGVhcC0+Y21kOworICAgIGlmICgqcCA9PSAnaycpCisgICAgeworCWVhcC0+Y21kaWR4ID0gQ01EX2s7CisJKytwOworICAgIH0KKyAgICBlbHNlIGlmIChwWzBdID09ICdzJworCSAgICAmJiAoKHBbMV0gPT0gJ2MnICYmIHBbMl0gIT0gJ3MnICYmIHBbMl0gIT0gJ3InICYmIHBbM10gIT0gJ2knICYmIHBbNF0gIT0gJ3AnKQorCQl8fCBwWzFdID09ICdnJworCQl8fCAocFsxXSA9PSAnaScgJiYgcFsyXSAhPSAnbScgJiYgcFsyXSAhPSAnbCcgJiYgcFsyXSAhPSAnZycpCisJCXx8IHBbMV0gPT0gJ0knCisJCXx8IChwWzFdID09ICdyJyAmJiBwWzJdICE9ICdlJykpKQorICAgIHsKKwllYXAtPmNtZGlkeCA9IENNRF9zdWJzdGl0dXRlOworCSsrcDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwl3aGlsZSAoQVNDSUlfSVNBTFBIQSgqcCkpCisJICAgICsrcDsKKwkvKiBjaGVjayBmb3Igbm9uLWFscGhhIGNvbW1hbmQgKi8KKwlpZiAocCA9PSBlYXAtPmNtZCAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikiQCohPT48Jn4jIiwgKnApICE9IE5VTEwpCisJICAgICsrcDsKKwlsZW4gPSAoaW50KShwIC0gZWFwLT5jbWQpOworCisJaWYgKEFTQ0lJX0lTTE9XRVIoKmVhcC0+Y21kKSkKKwkgICAgZWFwLT5jbWRpZHggPSBjbWRpZHhzW0NoYXJPcmRMb3coKmVhcC0+Y21kKV07CisJZWxzZQorCSAgICBlYXAtPmNtZGlkeCA9IGNtZGlkeHNbMjZdOworCisJZm9yICggOyAoaW50KWVhcC0+Y21kaWR4IDwgKGludClDTURfU0laRTsKKwkJCSAgICAgICBlYXAtPmNtZGlkeCA9IChjbWRpZHhfVCkoKGludCllYXAtPmNtZGlkeCArIDEpKQorCSAgICBpZiAoU1RSTkNNUChjbWRuYW1lc1soaW50KWVhcC0+Y21kaWR4XS5jbWRfbmFtZSwgKGNoYXIgKillYXAtPmNtZCwKKwkJCQkJCQkgICAgKHNpemVfdClsZW4pID09IDApCisJICAgIHsKKyNpZmRlZiBGRUFUX0VWQUwKKwkJaWYgKGZ1bGwgIT0gTlVMTAorCQkJICAgJiYgY21kbmFtZXNbKGludCllYXAtPmNtZGlkeF0uY21kX25hbWVbbGVuXSA9PSBOVUwpCisJCSAgICAqZnVsbCA9IFRSVUU7CisjZW5kaWYKKwkJYnJlYWs7CisJICAgIH0KKworI2lmZGVmIEZFQVRfVVNSX0NNRFMKKwkvKiBMb29rIGZvciBhIHVzZXIgZGVmaW5lZCBjb21tYW5kIGFzIGEgbGFzdCByZXNvcnQgKi8KKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX1NJWkUgJiYgKmVhcC0+Y21kID49ICdBJyAmJiAqZWFwLT5jbWQgPD0gJ1onKQorCXsKKwkgICAgdWNtZF9UCSpjbWQ7CisJICAgIGludAkJaiwgaywgbWF0Y2hsZW4gPSAwOworCSAgICBpbnQJCWZvdW5kID0gRkFMU0UsIHBvc3NpYmxlID0gRkFMU0U7CisJICAgIGNoYXJfdQkqY3AsICpucDsJLyogUG9pbnQgaW50byB0eXBlZCBjbWQgYW5kIHRlc3QgbmFtZSAqLworCSAgICBnYXJyYXlfVAkqZ2FwOworCSAgICBpbnQJCWFtYl9sb2NhbCA9IEZBTFNFOyAvKiBGb3VuZCBhbWJpZ3VvdXMgYnVmZmVyLWxvY2FsCisJCQkJCSAgICAgIGNvbW1hbmQsIG9ubHkgZnVsbCBtYXRjaCBnbG9iYWwKKwkJCQkJICAgICAgaXMgYWNjZXB0ZWQuICovCisKKwkgICAgLyogVXNlciBkZWZpbmVkIGNvbW1hbmRzIG1heSBjb250YWluIG51bWJlcnMgKi8KKwkgICAgd2hpbGUgKEFTQ0lJX0lTQUxOVU0oKnApKQorCQkrK3A7CisJICAgIGxlbiA9IChpbnQpKHAgLSBlYXAtPmNtZCk7CisKKwkgICAgLyoKKwkgICAgICogTG9vayBmb3IgYnVmZmVyLWxvY2FsIHVzZXIgY29tbWFuZHMgZmlyc3QsIHRoZW4gZ2xvYmFsIG9uZXMuCisJICAgICAqLworCSAgICBnYXAgPSAmY3VyYnVmLT5iX3VjbWRzOworCSAgICBmb3IgKDs7KQorCSAgICB7CisJCWZvciAoaiA9IDA7IGogPCBnYXAtPmdhX2xlbjsgKytqKQorCQl7CisJCSAgICBjbWQgPSBVU0VSX0NNRF9HQShnYXAsIGopOworCQkgICAgY3AgPSBlYXAtPmNtZDsKKwkJICAgIG5wID0gY21kLT51Y19uYW1lOworCQkgICAgayA9IDA7CisJCSAgICB3aGlsZSAoayA8IGxlbiAmJiAqbnAgIT0gTlVMICYmICpjcCsrID09ICpucCsrKQorCQkJaysrOworCQkgICAgaWYgKGsgPT0gbGVuIHx8ICgqbnAgPT0gTlVMICYmIHZpbV9pc2RpZ2l0KGVhcC0+Y21kW2tdKSkpCisJCSAgICB7CisJCQkvKiBJZiBmaW5kaW5nIGEgc2Vjb25kIG1hdGNoLCB0aGUgY29tbWFuZCBpcworCQkJICogYW1iaWd1b3VzLiAgQnV0IG5vdCBpZiBhIGJ1ZmZlci1sb2NhbCBjb21tYW5kCisJCQkgKiB3YXNuJ3QgYSBmdWxsIG1hdGNoIGFuZCBhIGdsb2JhbCBjb21tYW5kIGlzIGEgZnVsbAorCQkJICogbWF0Y2guICovCisJCQlpZiAoayA9PSBsZW4gJiYgZm91bmQgJiYgKm5wICE9IE5VTCkKKwkJCXsKKwkJCSAgICBpZiAoZ2FwID09ICZ1Y21kcykKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCSAgICBhbWJfbG9jYWwgPSBUUlVFOworCQkJfQorCisJCQlpZiAoIWZvdW5kIHx8IChrID09IGxlbiAmJiAqbnAgPT0gTlVMKSkKKwkJCXsKKwkJCSAgICAvKiBJZiB3ZSBtYXRjaGVkIHVwIHRvIGEgZGlnaXQsIHRoZW4gdGhlcmUgY291bGQKKwkJCSAgICAgKiBiZSBhbm90aGVyIGNvbW1hbmQgaW5jbHVkaW5nIHRoZSBkaWdpdCB0aGF0IHdlCisJCQkgICAgICogc2hvdWxkIHVzZSBpbnN0ZWFkLgorCQkJICAgICAqLworCQkJICAgIGlmIChrID09IGxlbikKKwkJCQlmb3VuZCA9IFRSVUU7CisJCQkgICAgZWxzZQorCQkJCXBvc3NpYmxlID0gVFJVRTsKKworCQkJICAgIGlmIChnYXAgPT0gJnVjbWRzKQorCQkJCWVhcC0+Y21kaWR4ID0gQ01EX1VTRVI7CisJCQkgICAgZWxzZQorCQkJCWVhcC0+Y21kaWR4ID0gQ01EX1VTRVJfQlVGOworCQkJICAgIGVhcC0+YXJndCA9IGNtZC0+dWNfYXJndDsKKwkJCSAgICBlYXAtPnVzZXJpZHggPSBqOworCisJCQkgICAgLyogRG8gbm90IHNlYXJjaCBmb3IgZnVydGhlciBhYmJyZXZpYXRpb25zCisJCQkgICAgICogaWYgdGhpcyBpcyBhbiBleGFjdCBtYXRjaC4gKi8KKwkJCSAgICBtYXRjaGxlbiA9IGs7CisJCQkgICAgaWYgKGsgPT0gbGVuICYmICpucCA9PSBOVUwpCisJCQkgICAgeworCQkJCWlmIChmdWxsICE9IE5VTEwpCisJCQkJICAgICpmdWxsID0gVFJVRTsKKwkJCQlhbWJfbG9jYWwgPSBGQUxTRTsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0KKworCQkvKiBTdG9wIGlmIHdlIGZvdW5kIGEgZnVsbCBtYXRjaCBvciBzZWFyY2hlZCBhbGwuICovCisJCWlmIChqIDwgZ2FwLT5nYV9sZW4gfHwgZ2FwID09ICZ1Y21kcykKKwkJICAgIGJyZWFrOworCQlnYXAgPSAmdWNtZHM7CisJICAgIH0KKworCSAgICAvKiBPbmx5IGZvdW5kIGFtYmlndW91cyBtYXRjaGVzLiAqLworCSAgICBpZiAoYW1iX2xvY2FsKQorCQlyZXR1cm4gTlVMTDsKKworCSAgICAvKiBUaGUgbWF0Y2ggd2UgZm91bmQgbWF5IGJlIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IGEKKwkgICAgICogbnVtYmVyLiAgTW92ZSAqcCBiYWNrIHRvIHBvaW50IHRvIGl0LgorCSAgICAgKi8KKwkgICAgaWYgKGZvdW5kIHx8IHBvc3NpYmxlKQorCQlwICs9IG1hdGNobGVuIC0gbGVuOworCX0KKyNlbmRpZgorCisJaWYgKGxlbiA9PSAwKQorCSAgICBlYXAtPmNtZGlkeCA9IENNRF9TSVpFOworICAgIH0KKworICAgIHJldHVybiBwOworfQorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmV0dXJuID4gMCBpZiBhbiBFeCBjb21tYW5kICJuYW1lIiBleGlzdHMuCisgKiBSZXR1cm4gMiBpZiB0aGVyZSBpcyBhbiBleGFjdCBtYXRjaC4KKyAqIFJldHVybiAzIGlmIHRoZXJlIGlzIGFuIGFtYmlndW91cyBtYXRjaC4KKyAqLworICAgIGludAorY21kX2V4aXN0cyhuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBleGFyZ19UCWVhOworICAgIGludAkJZnVsbCA9IEZBTFNFOworICAgIGludAkJaTsKKyAgICBpbnQJCWo7CisgICAgc3RhdGljIHN0cnVjdCBjbWRtb2QKKyAgICB7CisJY2hhcgkqbmFtZTsKKwlpbnQJbWlubGVuOworICAgIH0gY21kbW9kc1tdID0geworCXsiYWJvdmVsZWZ0IiwgM30sCisJeyJiZWxvd3JpZ2h0IiwgM30sCisJeyJib3RyaWdodCIsIDJ9LAorCXsiYnJvd3NlIiwgM30sCisJeyJjb25maXJtIiwgNH0sCisJeyJoaWRlIiwgM30sCisJeyJrZWVwanVtcHMiLCA1fSwKKwl7ImtlZXBtYXJrcyIsIDN9LAorCXsibGVmdGFib3ZlIiwgNX0sCisJeyJsb2NrbWFya3MiLCAzfSwKKwl7InJpZ2h0YmVsb3ciLCA2fSwKKwl7InNpbGVudCIsIDN9LAorCXsidG9wbGVmdCIsIDJ9LAorCXsidmVyYm9zZSIsIDR9LAorCXsidmVydGljYWwiLCA0fSwKKyAgICB9OworCisgICAgLyogQ2hlY2sgY29tbWFuZCBtb2RpZmllcnMuICovCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihjbWRtb2RzKSAvIHNpemVvZihzdHJ1Y3QgY21kbW9kKTsgKytpKQorICAgIHsKKwlmb3IgKGogPSAwOyBuYW1lW2pdICE9IE5VTDsgKytqKQorCSAgICBpZiAobmFtZVtqXSAhPSBjbWRtb2RzW2ldLm5hbWVbal0pCisJCWJyZWFrOworCWlmIChuYW1lW2pdID09IE5VTCAmJiBqID49IGNtZG1vZHNbaV0ubWlubGVuKQorCSAgICByZXR1cm4gKGNtZG1vZHNbaV0ubmFtZVtqXSA9PSBOVUwgPyAyIDogMSk7CisgICAgfQorCisgICAgLyogQ2hlY2sgYnVpbHQtaW4gY29tbWFuZHMgYW5kIHVzZXIgZGVmaW5lZCBjb21tYW5kcy4gKi8KKyAgICBlYS5jbWQgPSBuYW1lOworICAgIGVhLmNtZGlkeCA9IChjbWRpZHhfVCkwOworICAgIGlmIChmaW5kX2NvbW1hbmQoJmVhLCAmZnVsbCkgPT0gTlVMTCkKKwlyZXR1cm4gMzsKKyAgICByZXR1cm4gKGVhLmNtZGlkeCA9PSBDTURfU0laRSA/IDAgOiAoZnVsbCA/IDIgOiAxKSk7Cit9CisjZW5kaWYKKworLyoKKyAqIFRoaXMgaXMgYWxsIHByZXR0eSBtdWNoIGNvcGllZCBmcm9tIGRvX29uZV9jbWQoKSwgd2l0aCBhbGwgdGhlIGV4dHJhIHN0dWZmCisgKiB3ZSBkb24ndCBuZWVkL3dhbnQgZGVsZXRlZC4JTWF5YmUgdGhpcyBjb3VsZCBiZSBkb25lIGJldHRlciBpZiB3ZSBkaWRuJ3QKKyAqIHJlcGVhdCBhbGwgdGhpcyBzdHVmZi4gIFRoZSBvbmx5IHByb2JsZW0gaXMgdGhhdCB0aGV5IG1heSBub3Qgc3RheQorICogcGVyZmVjdGx5IGNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyLCBidXQgdGhlbiB0aGUgY29tbWFuZCBsaW5lIHN5bnRheAorICogcHJvYmFibHkgd29uJ3QgY2hhbmdlIHRoYXQgbXVjaCAtLSB3ZWJiLgorICovCisgICAgY2hhcl91ICoKK3NldF9vbmVfY21kX2NvbnRleHQoeHAsIGJ1ZmYpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGNoYXJfdQkqYnVmZjsJICAgIC8qIGJ1ZmZlciBmb3IgY29tbWFuZCBzdHJpbmcgKi8KK3sKKyAgICBjaGFyX3UJCSpwOworICAgIGNoYXJfdQkJKmNtZCwgKmFyZzsKKyAgICBpbnQJCQlpID0gMDsKKyAgICBjbWRpZHhfVAkJY21kaWR4OworICAgIGxvbmdfdQkJYXJndCA9IDA7CisjaWYgZGVmaW5lZChGRUFUX1VTUl9DTURTKSAmJiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkKKyAgICBpbnQJCQljb21wbCA9IEVYUEFORF9OT1RISU5HOworI2VuZGlmCisjaWZkZWYgRkVBVF9DTURMX0NPTVBMCisgICAgaW50CQkJZGVsaW07CisjZW5kaWYKKyAgICBpbnQJCQlmb3JjZWl0ID0gRkFMU0U7CisgICAgaW50CQkJdXNlZmlsdGVyID0gRkFMU0U7ICAvKiBmaWx0ZXIgaW5zdGVhZCBvZiBmaWxlIG5hbWUgKi8KKworICAgIHhwLT54cF9wYXR0ZXJuID0gYnVmZjsKKyAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9DT01NQU5EUzsJLyogRGVmYXVsdCB1bnRpbCB3ZSBnZXQgcGFzdCBjb21tYW5kICovCisgICAgeHAtPnhwX2JhY2tzbGFzaCA9IFhQX0JTX05PTkU7CisjaWYgZGVmaW5lZChGRUFUX1VTUl9DTURTKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkgJiYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpCisgICAgeHAtPnhwX2FyZyA9IE5VTEw7CisjZW5kaWYKKworLyoKKyAqIDIuIHNraXAgY29tbWVudCBsaW5lcyBhbmQgbGVhZGluZyBzcGFjZSwgY29sb25zIG9yIGJhcnMKKyAqLworICAgIGZvciAoY21kID0gYnVmZjsgdmltX3N0cmNocigoY2hhcl91ICopIiBcdDp8IiwgKmNtZCkgIT0gTlVMTDsgY21kKyspCisJOworICAgIHhwLT54cF9wYXR0ZXJuID0gY21kOworCisgICAgaWYgKCpjbWQgPT0gTlVMKQorCXJldHVybiBOVUxMOworICAgIGlmICgqY21kID09ICciJykJICAgIC8qIGlnbm9yZSBjb21tZW50IGxpbmVzICovCisgICAgeworCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisvKgorICogMy4gcGFyc2UgYSByYW5nZSBzcGVjaWZpZXIgb2YgdGhlIGZvcm06IGFkZHIgWyxhZGRyXSBbO2FkZHJdIC4uCisgKi8KKyAgICBjbWQgPSBza2lwX3JhbmdlKGNtZCwgJnhwLT54cF9jb250ZXh0KTsKKworLyoKKyAqIDQuIHBhcnNlIGNvbW1hbmQKKyAqLworCisgICAgY21kID0gc2tpcHdoaXRlKGNtZCk7CisgICAgeHAtPnhwX3BhdHRlcm4gPSBjbWQ7CisgICAgaWYgKCpjbWQgPT0gTlVMKQorCXJldHVybiBOVUxMOworICAgIGlmICgqY21kID09ICciJykKKyAgICB7CisJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoKmNtZCA9PSAnfCcgfHwgKmNtZCA9PSAnXG4nKQorCXJldHVybiBjbWQgKyAxOwkJCS8qIFRoZXJlJ3MgYW5vdGhlciBjb21tYW5kICovCisKKyAgICAvKgorICAgICAqIElzb2xhdGUgdGhlIGNvbW1hbmQgYW5kIHNlYXJjaCBmb3IgaXQgaW4gdGhlIGNvbW1hbmQgdGFibGUuCisgICAgICogRXhjZXB0aW9uczoKKyAgICAgKiAtIHRoZSAnaycgY29tbWFuZCBjYW4gZGlyZWN0bHkgYmUgZm9sbG93ZWQgYnkgYW55IGNoYXJhY3RlciwgYnV0CisgICAgICogICBkbyBhY2NlcHQgImtlZXBtYXJrcyIgYW5kICJrZWVwanVtcHMiLgorICAgICAqIC0gdGhlICdzJyBjb21tYW5kIGNhbiBiZSBmb2xsb3dlZCBkaXJlY3RseSBieSAnYycsICdnJywgJ2knLCAnSScgb3IgJ3InCisgICAgICovCisgICAgaWYgKCpjbWQgPT0gJ2snICYmIGNtZFsxXSAhPSAnZScpCisgICAgeworCWNtZGlkeCA9IENNRF9rOworCXAgPSBjbWQgKyAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXAgPSBjbWQ7CisJd2hpbGUgKEFTQ0lJX0lTQUxQSEEoKnApIHx8ICpwID09ICcqJykgICAgLyogQWxsb3cgKiB3aWxkIGNhcmQgKi8KKwkgICAgKytwOworCS8qIGNoZWNrIGZvciBub24tYWxwaGEgY29tbWFuZCAqLworCWlmIChwID09IGNtZCAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikiQCohPT48Jn4jIiwgKnApICE9IE5VTEwpCisJICAgICsrcDsKKwlpID0gKGludCkocCAtIGNtZCk7CisKKwlpZiAoaSA9PSAwKQorCXsKKwkgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfVU5TVUNDRVNTRlVMOworCSAgICByZXR1cm4gTlVMTDsKKwl9CisJZm9yIChjbWRpZHggPSAoY21kaWR4X1QpMDsgKGludCljbWRpZHggPCAoaW50KUNNRF9TSVpFOworCQkJCQkgY21kaWR4ID0gKGNtZGlkeF9UKSgoaW50KWNtZGlkeCArIDEpKQorCSAgICBpZiAoU1RSTkNNUChjbWRuYW1lc1soaW50KWNtZGlkeF0uY21kX25hbWUsIGNtZCwgKHNpemVfdClpKSA9PSAwKQorCQlicmVhazsKKworI2lmZGVmIEZFQVRfVVNSX0NNRFMKKwlpZiAoY21kWzBdID49ICdBJyAmJiBjbWRbMF0gPD0gJ1onKQorCXsKKwkgICAgd2hpbGUgKEFTQ0lJX0lTQUxOVU0oKnApIHx8ICpwID09ICcqJykJLyogQWxsb3cgKiB3aWxkIGNhcmQgKi8KKwkJKytwOworCSAgICBpID0gKGludCkocCAtIGNtZCk7CisJfQorI2VuZGlmCisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB0aGUgY3Vyc29yIGlzIHRvdWNoaW5nIHRoZSBjb21tYW5kLCBhbmQgaXQgZW5kcyBpbiBhbiBhbHBoYS1udW1lcmljCisgICAgICogY2hhcmFjdGVyLCBjb21wbGV0ZSB0aGUgY29tbWFuZCBuYW1lLgorICAgICAqLworICAgIGlmICgqcCA9PSBOVUwgJiYgQVNDSUlfSVNBTE5VTShwWy0xXSkpCisJcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoY21kaWR4ID09IENNRF9TSVpFKQorICAgIHsKKwlpZiAoKmNtZCA9PSAncycgJiYgdmltX3N0cmNocigoY2hhcl91ICopImNncmlJIiwgY21kWzFdKSAhPSBOVUxMKQorCXsKKwkgICAgY21kaWR4ID0gQ01EX3N1YnN0aXR1dGU7CisJICAgIHAgPSBjbWQgKyAxOworCX0KKyNpZmRlZiBGRUFUX1VTUl9DTURTCisJZWxzZSBpZiAoY21kWzBdID49ICdBJyAmJiBjbWRbMF0gPD0gJ1onKQorCXsKKwkgICAgLyogTG9vayBmb3IgYSB1c2VyIGRlZmluZWQgY29tbWFuZCBhcyBhIGxhc3QgcmVzb3J0ICovCisJICAgIHVjbWRfVAkqdWM7CisJICAgIGludAkJaiwgaywgbWF0Y2hsZW4gPSAwOworCSAgICBpbnQJCWZvdW5kID0gRkFMU0UsIHBvc3NpYmxlID0gRkFMU0U7CisJICAgIGNoYXJfdQkqY3AsICpucDsJLyogUG9pbnQgaW50byB0eXBlZCBjbWQgYW5kIHRlc3QgbmFtZSAqLworCSAgICBnYXJyYXlfVAkqZ2FwOworCisJICAgIGdhcCA9ICZjdXJidWYtPmJfdWNtZHM7CisJICAgIGZvciAoOzspCisJICAgIHsKKwkJdWMgPSBVU0VSX0NNRF9HQShnYXAsIDApOworCQlmb3IgKGogPSAwOyBqIDwgZ2FwLT5nYV9sZW47ICsraiwgKyt1YykKKwkJeworCQkgICAgY3AgPSBjbWQ7CisJCSAgICBucCA9IHVjLT51Y19uYW1lOworCQkgICAgayA9IDA7CisJCSAgICB3aGlsZSAoayA8IGkgJiYgKm5wICE9IE5VTCAmJiAqY3ArKyA9PSAqbnArKykKKwkJCWsrKzsKKwkJICAgIGlmIChrID09IGkgfHwgKCpucCA9PSBOVUwgJiYgVklNX0lTRElHSVQoY21kW2tdKSkpCisJCSAgICB7CisJCQlpZiAoayA9PSBpICYmIGZvdW5kKQorCQkJeworCQkJICAgIC8qIEFtYmlndW91cyBhYmJyZXZpYXRpb24gKi8KKwkJCSAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9VTlNVQ0NFU1NGVUw7CisJCQkgICAgcmV0dXJuIE5VTEw7CisJCQl9CisJCQlpZiAoIWZvdW5kKQorCQkJeworCQkJICAgIC8qIElmIHdlIG1hdGNoZWQgdXAgdG8gYSBkaWdpdCwgdGhlbiB0aGVyZSBjb3VsZAorCQkJICAgICAqIGJlIGFub3RoZXIgY29tbWFuZCBpbmNsdWRpbmcgdGhlIGRpZ2l0IHRoYXQgd2UKKwkJCSAgICAgKiBzaG91bGQgdXNlIGluc3RlYWQuCisJCQkgICAgICovCisJCQkgICAgaWYgKGsgPT0gaSkKKwkJCQlmb3VuZCA9IFRSVUU7CisJCQkgICAgZWxzZQorCQkJCXBvc3NpYmxlID0gVFJVRTsKKworCQkJICAgIGlmIChnYXAgPT0gJnVjbWRzKQorCQkJCWNtZGlkeCA9IENNRF9VU0VSOworCQkJICAgIGVsc2UKKwkJCQljbWRpZHggPSBDTURfVVNFUl9CVUY7CisJCQkgICAgYXJndCA9IHVjLT51Y19hcmd0OworI2lmZGVmIEZFQVRfQ01ETF9DT01QTAorCQkJICAgIGNvbXBsID0gdWMtPnVjX2NvbXBsOworIyBpZmRlZiBGRUFUX0VWQUwKKwkJCSAgICB4cC0+eHBfYXJnID0gdWMtPnVjX2NvbXBsX2FyZzsKKwkJCSAgICB4cC0+eHBfc2NyaXB0SUQgPSB1Yy0+dWNfc2NyaXB0SUQ7CisjIGVuZGlmCisjZW5kaWYKKwkJCSAgICAvKiBEbyBub3Qgc2VhcmNoIGZvciBmdXJ0aGVyIGFiYnJldmlhdGlvbnMKKwkJCSAgICAgKiBpZiB0aGlzIGlzIGFuIGV4YWN0IG1hdGNoCisJCQkgICAgICovCisJCQkgICAgbWF0Y2hsZW4gPSBrOworCQkJICAgIGlmIChrID09IGkgJiYgKm5wID09IE5VTCkKKwkJCQlicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCQlpZiAoZ2FwID09ICZ1Y21kcyB8fCBqIDwgZ2FwLT5nYV9sZW4pCisJCSAgICBicmVhazsKKwkJZ2FwID0gJnVjbWRzOworCSAgICB9CisKKwkgICAgLyogVGhlIG1hdGNoIHdlIGZvdW5kIG1heSBiZSBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSBhCisJICAgICAqIG51bWJlci4gIE1vdmUgKnAgYmFjayB0byBwb2ludCB0byBpdC4KKwkgICAgICovCisJICAgIGlmIChmb3VuZCB8fCBwb3NzaWJsZSkKKwkJcCArPSBtYXRjaGxlbiAtIGk7CisJfQorI2VuZGlmCisgICAgfQorICAgIGlmIChjbWRpZHggPT0gQ01EX1NJWkUpCisgICAgeworCS8qIE5vdCBzdGlsbCB0b3VjaGluZyB0aGUgY29tbWFuZCBhbmQgaXQgd2FzIGFuIGlsbGVnYWwgb25lICovCisJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfVU5TVUNDRVNTRlVMOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIHhwLT54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7IC8qIERlZmF1bHQgbm93IHRoYXQgd2UncmUgcGFzdCBjb21tYW5kICovCisKKyAgICBpZiAoKnAgPT0gJyEnKQkJICAgIC8qIGZvcmNlZCBjb21tYW5kcyAqLworICAgIHsKKwlmb3JjZWl0ID0gVFJVRTsKKwkrK3A7CisgICAgfQorCisvKgorICogNS4gcGFyc2UgYXJndW1lbnRzCisgKi8KKyNpZmRlZiBGRUFUX1VTUl9DTURTCisgICAgaWYgKCFVU0VSX0NNRElEWChjbWRpZHgpKQorI2VuZGlmCisJYXJndCA9IGNtZG5hbWVzWyhpbnQpY21kaWR4XS5jbWRfYXJndDsKKworICAgIGFyZyA9IHNraXB3aGl0ZShwKTsKKworICAgIGlmIChjbWRpZHggPT0gQ01EX3dyaXRlIHx8IGNtZGlkeCA9PSBDTURfdXBkYXRlKQorICAgIHsKKwlpZiAoKmFyZyA9PSAnPicpCQkJLyogYXBwZW5kICovCisJeworCSAgICBpZiAoKisrYXJnID09ICc+JykKKwkJKythcmc7CisJICAgIGFyZyA9IHNraXB3aGl0ZShhcmcpOworCX0KKwllbHNlIGlmICgqYXJnID09ICchJyAmJiBjbWRpZHggPT0gQ01EX3dyaXRlKQkvKiA6dyAhZmlsdGVyICovCisJeworCSAgICArK2FyZzsKKwkgICAgdXNlZmlsdGVyID0gVFJVRTsKKwl9CisgICAgfQorCisgICAgaWYgKGNtZGlkeCA9PSBDTURfcmVhZCkKKyAgICB7CisJdXNlZmlsdGVyID0gZm9yY2VpdDsJCQkvKiA6ciEgZmlsdGVyIGlmIGZvcmNlZCAqLworCWlmICgqYXJnID09ICchJykJCQkvKiA6ciAhZmlsdGVyICovCisJeworCSAgICArK2FyZzsKKwkgICAgdXNlZmlsdGVyID0gVFJVRTsKKwl9CisgICAgfQorCisgICAgaWYgKGNtZGlkeCA9PSBDTURfbHNoaWZ0IHx8IGNtZGlkeCA9PSBDTURfcnNoaWZ0KQorICAgIHsKKwl3aGlsZSAoKmFyZyA9PSAqY21kKQkgICAgLyogYWxsb3cgYW55IG51bWJlciBvZiAnPicgb3IgJzwnICovCisJICAgICsrYXJnOworCWFyZyA9IHNraXB3aGl0ZShhcmcpOworICAgIH0KKworICAgIC8qIERvZXMgY29tbWFuZCBhbGxvdyAiK2NvbW1hbmQiPyAqLworICAgIGlmICgoYXJndCAmIEVESVRDTUQpICYmICF1c2VmaWx0ZXIgJiYgKmFyZyA9PSAnKycpCisgICAgeworCS8qIENoZWNrIGlmIHdlJ3JlIGluIHRoZSArY29tbWFuZCAqLworCXAgPSBhcmcgKyAxOworCWFyZyA9IHNraXBfY21kX2FyZyhhcmcsIEZBTFNFKTsKKworCS8qIFN0aWxsIHRvdWNoaW5nIHRoZSBjb21tYW5kIGFmdGVyICcrJz8gKi8KKwlpZiAoKmFyZyA9PSBOVUwpCisJICAgIHJldHVybiBwOworCisJLyogU2tpcCBzcGFjZShzKSBhZnRlciArY29tbWFuZCB0byBnZXQgdG8gdGhlIHJlYWwgYXJndW1lbnQgKi8KKwlhcmcgPSBza2lwd2hpdGUoYXJnKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciAnfCcgdG8gc2VwYXJhdGUgY29tbWFuZHMgYW5kICciJyB0byBzdGFydCBjb21tZW50cy4KKyAgICAgKiBEb24ndCBkbyB0aGlzIGZvciAiOnJlYWQgIWNtZCIgYW5kICI6d3JpdGUgIWNtZCIuCisgICAgICovCisgICAgaWYgKChhcmd0ICYgVFJMQkFSKSAmJiAhdXNlZmlsdGVyKQorICAgIHsKKwlwID0gYXJnOworCS8qICI6cmVkaXIgQCIgaXMgbm90IHRoZSBzdGFydCBvZiBhIGNvbW1lbnQgKi8KKwlpZiAoY21kaWR4ID09IENNRF9yZWRpciAmJiBwWzBdID09ICdAJyAmJiBwWzFdID09ICciJykKKwkgICAgcCArPSAyOworCXdoaWxlICgqcCkKKwl7CisJICAgIGlmICgqcCA9PSBDdHJsX1YpCisJICAgIHsKKwkJaWYgKHBbMV0gIT0gTlVMKQorCQkgICAgKytwOworCSAgICB9CisJICAgIGVsc2UgaWYgKCAoKnAgPT0gJyInICYmICEoYXJndCAmIE5PVFJMQ09NKSkKKwkJICAgIHx8ICpwID09ICd8JyB8fCAqcCA9PSAnXG4nKQorCSAgICB7CisJCWlmICgqKHAgLSAxKSAhPSAnXFwnKQorCQl7CisJCSAgICBpZiAoKnAgPT0gJ3wnIHx8ICpwID09ICdcbicpCisJCQlyZXR1cm4gcCArIDE7CisJCSAgICByZXR1cm4gTlVMTDsgICAgLyogSXQncyBhIGNvbW1lbnQgKi8KKwkJfQorCSAgICB9CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQlwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7CisJICAgIGVsc2UKKyNlbmRpZgorCQkrK3A7CisJfQorICAgIH0KKworCQkJCQkJLyogbm8gYXJndW1lbnRzIGFsbG93ZWQgKi8KKyAgICBpZiAoIShhcmd0ICYgRVhUUkEpICYmICphcmcgIT0gTlVMICYmCisJCQkJICAgIHZpbV9zdHJjaHIoKGNoYXJfdSAqKSJ8XCIiLCAqYXJnKSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgLyogRmluZCBzdGFydCBvZiBsYXN0IGFyZ3VtZW50IChhcmd1bWVudCBqdXN0IGJlZm9yZSBjdXJzb3IpOiAqLworICAgIHAgPSBidWZmICsgU1RSTEVOKGJ1ZmYpOworICAgIHdoaWxlIChwICE9IGFyZyAmJiAqcCAhPSAnICcgJiYgKnAgIT0gVEFCKQorCXAtLTsKKyAgICBpZiAoKnAgPT0gJyAnIHx8ICpwID09IFRBQikKKwlwKys7CisgICAgeHAtPnhwX3BhdHRlcm4gPSBwOworCisgICAgaWYgKGFyZ3QgJiBYRklMRSkKKyAgICB7CisJaW50IGluX3F1b3RlID0gRkFMU0U7CisJY2hhcl91ICpib3cgPSBOVUxMOwkvKiBCZWdpbm5pbmcgb2Ygd29yZCAqLworCisJLyoKKwkgKiBBbGxvdyBzcGFjZXMgd2l0aGluIGJhY2stcXVvdGVzIHRvIGNvdW50IGFzIHBhcnQgb2YgdGhlIGFyZ3VtZW50CisJICogYmVpbmcgZXhwYW5kZWQuCisJICovCisJeHAtPnhwX3BhdHRlcm4gPSBza2lwd2hpdGUoYXJnKTsKKwlmb3IgKHAgPSB4cC0+eHBfcGF0dGVybjsgKnA7ICkKKwl7CisJICAgIGlmICgqcCA9PSAnXFwnICYmIHBbMV0pCisJCSsrcDsKKyNpZmRlZiBTUEFDRV9JTl9GSUxFTkFNRQorCSAgICBlbHNlIGlmICh2aW1faXN3aGl0ZSgqcCkgJiYgKCEoYXJndCAmIE5PU1BDKSB8fCB1c2VmaWx0ZXIpKQorI2Vsc2UKKwkgICAgZWxzZSBpZiAodmltX2lzd2hpdGUoKnApKQorI2VuZGlmCisJICAgIHsKKwkJcCA9IHNraXB3aGl0ZShwKTsKKwkJaWYgKGluX3F1b3RlKQorCQkgICAgYm93ID0gcDsKKwkJZWxzZQorCQkgICAgeHAtPnhwX3BhdHRlcm4gPSBwOworCQktLXA7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKnAgPT0gJ2AnKQorCSAgICB7CisJCWlmICghaW5fcXVvdGUpCisJCXsKKwkJICAgIHhwLT54cF9wYXR0ZXJuID0gcDsKKwkJICAgIGJvdyA9IHAgKyAxOworCQl9CisJCWluX3F1b3RlID0gIWluX3F1b3RlOworCSAgICB9CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQlwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7CisJICAgIGVsc2UKKyNlbmRpZgorCQkrK3A7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgc3RpbGwgaW5zaWRlIHRoZSBxdW90ZXMsIGFuZCB3ZSBwYXNzZWQgYSBzcGFjZSwganVzdAorCSAqIGV4cGFuZCBmcm9tIHRoZXJlLgorCSAqLworCWlmIChib3cgIT0gTlVMTCAmJiBpbl9xdW90ZSkKKwkgICAgeHAtPnhwX3BhdHRlcm4gPSBib3c7CisJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfRklMRVM7CisKKwkvKiBDaGVjayBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgKi8KKwlpZiAoKnhwLT54cF9wYXR0ZXJuID09ICckJworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoT1MyKQorCQl8fCAqeHAtPnhwX3BhdHRlcm4gPT0gJyUnCisjZW5kaWYKKwkJKQorCXsKKwkgICAgZm9yIChwID0geHAtPnhwX3BhdHRlcm4gKyAxOyAqcCAhPSBOVUw7ICsrcCkKKwkJaWYgKCF2aW1faXNJRGMoKnApKQorCQkgICAgYnJlYWs7CisJICAgIGlmICgqcCA9PSBOVUwpCisJICAgIHsKKwkJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfRU5WX1ZBUlM7CisJCSsreHAtPnhwX3BhdHRlcm47CisJICAgIH0KKwl9CisgICAgfQorCisvKgorICogNi4gc3dpdGNoIG9uIGNvbW1hbmQgbmFtZQorICovCisgICAgc3dpdGNoIChjbWRpZHgpCisgICAgeworCWNhc2UgQ01EX2NkOgorCWNhc2UgQ01EX2NoZGlyOgorCWNhc2UgQ01EX2xjZDoKKwljYXNlIENNRF9sY2hkaXI6CisJICAgIGlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfRklMRVMpCisJCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX0RJUkVDVE9SSUVTOworCSAgICBicmVhazsKKwljYXNlIENNRF9oZWxwOgorCSAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9IRUxQOworCSAgICB4cC0+eHBfcGF0dGVybiA9IGFyZzsKKwkgICAgYnJlYWs7CisKKwkvKiBDb21tYW5kIG1vZGlmaWVyczogcmV0dXJuIHRoZSBhcmd1bWVudC4gKi8KKwljYXNlIENNRF9hYm92ZWxlZnQ6CisJY2FzZSBDTURfYmVsb3dyaWdodDoKKwljYXNlIENNRF9ib3RyaWdodDoKKwljYXNlIENNRF9icm93c2U6CisJY2FzZSBDTURfY29uZmlybToKKwljYXNlIENNRF9mb2xkZG9jbG9zZWQ6CisJY2FzZSBDTURfZm9sZGRvb3BlbjoKKwljYXNlIENNRF9oaWRlOgorCWNhc2UgQ01EX2tlZXBqdW1wczoKKwljYXNlIENNRF9rZWVwbWFya3M6CisJY2FzZSBDTURfbGVmdGFib3ZlOgorCWNhc2UgQ01EX2xvY2ttYXJrczoKKwljYXNlIENNRF9yaWdodGJlbG93OgorCWNhc2UgQ01EX3NpbGVudDoKKwljYXNlIENNRF90b3BsZWZ0OgorCWNhc2UgQ01EX3ZlcmJvc2U6CisJY2FzZSBDTURfdmVydGljYWw6CisJICAgIHJldHVybiBhcmc7CisKKyNpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorCWNhc2UgQ01EX21hdGNoOgorCSAgICBpZiAoKmFyZyA9PSBOVUwgfHwgIWVuZHNfZXhjbWQoKmFyZykpCisJICAgIHsKKwkJLyogRHVtbXkgY2FsbCB0byBjbGVhciB2YXJpYWJsZXMuICovCisJCXNldF9jb250ZXh0X2luX2hpZ2hsaWdodF9jbWQoeHAsIChjaGFyX3UgKikibGluayBuIik7CisJCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX0hJR0hMSUdIVDsKKwkJeHAtPnhwX3BhdHRlcm4gPSBhcmc7CisJCWFyZyA9IHNraXB3aGl0ZShza2lwdG93aGl0ZShhcmcpKTsKKwkJaWYgKCphcmcgIT0gTlVMKQorCQl7CisJCSAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9OT1RISU5HOworCQkgICAgYXJnID0gc2tpcF9yZWdleHAoYXJnICsgMSwgKmFyZywgcF9tYWdpYywgTlVMTCk7CisJCX0KKwkgICAgfQorCSAgICByZXR1cm4gZmluZF9uZXh0Y21kKGFyZyk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfQ01ETF9DT01QTAorLyoKKyAqIEFsbCBjb21wbGV0aW9uIGZvciB0aGUgK2NtZGxpbmVfY29tcGwgZmVhdHVyZSBnb2VzIGhlcmUuCisgKi8KKworIyBpZmRlZiBGRUFUX1VTUl9DTURTCisJY2FzZSBDTURfY29tbWFuZDoKKwkgICAgLyogQ2hlY2sgZm9yIGF0dHJpYnV0ZXMgKi8KKwkgICAgd2hpbGUgKCphcmcgPT0gJy0nKQorCSAgICB7CisJCWFyZysrOwkgICAgLyogU2tpcCAiLSIgKi8KKwkJcCA9IHNraXB0b3doaXRlKGFyZyk7CisJCWlmICgqcCA9PSBOVUwpCisJCXsKKwkJICAgIC8qIEN1cnNvciBpcyBzdGlsbCBpbiB0aGUgYXR0cmlidXRlICovCisJCSAgICBwID0gdmltX3N0cmNocihhcmcsICc9Jyk7CisJCSAgICBpZiAocCA9PSBOVUxMKQorCQkgICAgeworCQkJLyogTm8gIj0iLCBzbyBjb21wbGV0ZSBhdHRyaWJ1dGUgbmFtZXMgKi8KKwkJCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX1VTRVJfQ01EX0ZMQUdTOworCQkJeHAtPnhwX3BhdHRlcm4gPSBhcmc7CisJCQlyZXR1cm4gTlVMTDsKKwkJICAgIH0KKworCQkgICAgLyogRm9yIHRoZSAtY29tcGxldGUgYW5kIC1uYXJncyBhdHRyaWJ1dGVzLCB3ZSBjb21wbGV0ZQorCQkgICAgICogdGhlaXIgYXJndW1lbnRzIGFzIHdlbGwuCisJCSAgICAgKi8KKwkJICAgIGlmIChTVFJOSUNNUChhcmcsICJjb21wbGV0ZSIsIHAgLSBhcmcpID09IDApCisJCSAgICB7CisJCQl4cC0+eHBfY29udGV4dCA9IEVYUEFORF9VU0VSX0NPTVBMRVRFOworCQkJeHAtPnhwX3BhdHRlcm4gPSBwICsgMTsKKwkJCXJldHVybiBOVUxMOworCQkgICAgfQorCQkgICAgZWxzZSBpZiAoU1RSTklDTVAoYXJnLCAibmFyZ3MiLCBwIC0gYXJnKSA9PSAwKQorCQkgICAgeworCQkJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfVVNFUl9OQVJHUzsKKwkJCXhwLT54cF9wYXR0ZXJuID0gcCArIDE7CisJCQlyZXR1cm4gTlVMTDsKKwkJICAgIH0KKwkJICAgIHJldHVybiBOVUxMOworCQl9CisJCWFyZyA9IHNraXB3aGl0ZShwKTsKKwkgICAgfQorCisJICAgIC8qIEFmdGVyIHRoZSBhdHRyaWJ1dGVzIGNvbWVzIHRoZSBuZXcgY29tbWFuZCBuYW1lICovCisJICAgIHAgPSBza2lwdG93aGl0ZShhcmcpOworCSAgICBpZiAoKnAgPT0gTlVMKQorCSAgICB7CisJCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX1VTRVJfQ09NTUFORFM7CisJCXhwLT54cF9wYXR0ZXJuID0gYXJnOworCQlicmVhazsKKwkgICAgfQorCisJICAgIC8qIEFuZCBmaW5hbGx5IGNvbWVzIGEgbm9ybWFsIGNvbW1hbmQgKi8KKwkgICAgcmV0dXJuIHNraXB3aGl0ZShwKTsKKworCWNhc2UgQ01EX2RlbGNvbW1hbmQ6CisJICAgIHhwLT54cF9jb250ZXh0ID0gRVhQQU5EX1VTRVJfQ09NTUFORFM7CisJICAgIHhwLT54cF9wYXR0ZXJuID0gYXJnOworCSAgICBicmVhazsKKyMgZW5kaWYKKworCWNhc2UgQ01EX2dsb2JhbDoKKwljYXNlIENNRF92Z2xvYmFsOgorCSAgICBkZWxpbSA9ICphcmc7CSAgICAvKiBnZXQgdGhlIGRlbGltaXRlciAqLworCSAgICBpZiAoZGVsaW0pCisJCSsrYXJnOwkJICAgIC8qIHNraXAgZGVsaW1pdGVyIGlmIHRoZXJlIGlzIG9uZSAqLworCisJICAgIHdoaWxlIChhcmdbMF0gIT0gTlVMICYmIGFyZ1swXSAhPSBkZWxpbSkKKwkgICAgeworCQlpZiAoYXJnWzBdID09ICdcXCcgJiYgYXJnWzFdICE9IE5VTCkKKwkJICAgICsrYXJnOworCQkrK2FyZzsKKwkgICAgfQorCSAgICBpZiAoYXJnWzBdICE9IE5VTCkKKwkJcmV0dXJuIGFyZyArIDE7CisJICAgIGJyZWFrOworCWNhc2UgQ01EX2FuZDoKKwljYXNlIENNRF9zdWJzdGl0dXRlOgorCSAgICBkZWxpbSA9ICphcmc7CisJICAgIGlmIChkZWxpbSkKKwkgICAgeworCQkvKiBza2lwICJmcm9tIiBwYXJ0ICovCisJCSsrYXJnOworCQlhcmcgPSBza2lwX3JlZ2V4cChhcmcsIGRlbGltLCBwX21hZ2ljLCBOVUxMKTsKKwkgICAgfQorCSAgICAvKiBza2lwICJ0byIgcGFydCAqLworCSAgICB3aGlsZSAoYXJnWzBdICE9IE5VTCAmJiBhcmdbMF0gIT0gZGVsaW0pCisJICAgIHsKKwkJaWYgKGFyZ1swXSA9PSAnXFwnICYmIGFyZ1sxXSAhPSBOVUwpCisJCSAgICArK2FyZzsKKwkJKythcmc7CisJICAgIH0KKwkgICAgaWYgKGFyZ1swXSAhPSBOVUwpCS8qIHNraXAgZGVsaW1pdGVyICovCisJCSsrYXJnOworCSAgICB3aGlsZSAoYXJnWzBdICYmIHZpbV9zdHJjaHIoKGNoYXJfdSAqKSJ8XCIjIiwgYXJnWzBdKSA9PSBOVUxMKQorCQkrK2FyZzsKKwkgICAgaWYgKGFyZ1swXSAhPSBOVUwpCisJCXJldHVybiBhcmc7CisJICAgIGJyZWFrOworCWNhc2UgQ01EX2lzZWFyY2g6CisJY2FzZSBDTURfZHNlYXJjaDoKKwljYXNlIENNRF9pbGlzdDoKKwljYXNlIENNRF9kbGlzdDoKKwljYXNlIENNRF9panVtcDoKKwljYXNlIENNRF9wc2VhcmNoOgorCWNhc2UgQ01EX2RqdW1wOgorCWNhc2UgQ01EX2lzcGxpdDoKKwljYXNlIENNRF9kc3BsaXQ6CisJICAgIGFyZyA9IHNraXB3aGl0ZShza2lwZGlnaXRzKGFyZykpOwkgICAgLyogc2tpcCBjb3VudCAqLworCSAgICBpZiAoKmFyZyA9PSAnLycpCS8qIE1hdGNoIHJlZ2V4cCwgbm90IGp1c3Qgd2hvbGUgd29yZHMgKi8KKwkgICAgeworCQlmb3IgKCsrYXJnOyAqYXJnICYmICphcmcgIT0gJy8nOyBhcmcrKykKKwkJICAgIGlmICgqYXJnID09ICdcXCcgJiYgYXJnWzFdICE9IE5VTCkKKwkJCWFyZysrOworCQlpZiAoKmFyZykKKwkJeworCQkgICAgYXJnID0gc2tpcHdoaXRlKGFyZyArIDEpOworCisJCSAgICAvKiBDaGVjayBmb3IgdHJhaWxpbmcgaWxsZWdhbCBjaGFyYWN0ZXJzICovCisJCSAgICBpZiAoKmFyZyAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikifFwiXG4iLCAqYXJnKSA9PSBOVUxMKQorCQkJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKwkJICAgIGVsc2UKKwkJCXJldHVybiBhcmc7CisJCX0KKwkgICAgfQorCSAgICBicmVhazsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwljYXNlIENNRF9hdXRvY21kOgorCSAgICByZXR1cm4gc2V0X2NvbnRleHRfaW5fYXV0b2NtZCh4cCwgYXJnLCBGQUxTRSk7CisKKwljYXNlIENNRF9kb2F1dG9jbWQ6CisJICAgIHJldHVybiBzZXRfY29udGV4dF9pbl9hdXRvY21kKHhwLCBhcmcsIFRSVUUpOworI2VuZGlmCisJY2FzZSBDTURfc2V0OgorCSAgICBzZXRfY29udGV4dF9pbl9zZXRfY21kKHhwLCBhcmcsIDApOworCSAgICBicmVhazsKKwljYXNlIENNRF9zZXRnbG9iYWw6CisJICAgIHNldF9jb250ZXh0X2luX3NldF9jbWQoeHAsIGFyZywgT1BUX0dMT0JBTCk7CisJICAgIGJyZWFrOworCWNhc2UgQ01EX3NldGxvY2FsOgorCSAgICBzZXRfY29udGV4dF9pbl9zZXRfY21kKHhwLCBhcmcsIE9QVF9MT0NBTCk7CisJICAgIGJyZWFrOworCWNhc2UgQ01EX3RhZzoKKwljYXNlIENNRF9zdGFnOgorCWNhc2UgQ01EX3B0YWc6CisJY2FzZSBDTURfdHNlbGVjdDoKKwljYXNlIENNRF9zdHNlbGVjdDoKKwljYXNlIENNRF9wdHNlbGVjdDoKKwljYXNlIENNRF90anVtcDoKKwljYXNlIENNRF9zdGp1bXA6CisJY2FzZSBDTURfcHRqdW1wOgorCSAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9UQUdTOworCSAgICB4cC0+eHBfcGF0dGVybiA9IGFyZzsKKwkgICAgYnJlYWs7CisJY2FzZSBDTURfYXVncm91cDoKKwkgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfQVVHUk9VUDsKKwkgICAgeHAtPnhwX3BhdHRlcm4gPSBhcmc7CisJICAgIGJyZWFrOworI2lmZGVmIEZFQVRfU1lOX0hMCisJY2FzZSBDTURfc3ludGF4OgorCSAgICBzZXRfY29udGV4dF9pbl9zeW50YXhfY21kKHhwLCBhcmcpOworCSAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRVZBTAorCWNhc2UgQ01EX2xldDoKKwljYXNlIENNRF9pZjoKKwljYXNlIENNRF9lbHNlaWY6CisJY2FzZSBDTURfd2hpbGU6CisJY2FzZSBDTURfZWNobzoKKwljYXNlIENNRF9lY2hvbjoKKwljYXNlIENNRF9leGVjdXRlOgorCWNhc2UgQ01EX2VjaG9tc2c6CisJY2FzZSBDTURfZWNob2VycjoKKwljYXNlIENNRF9jYWxsOgorCWNhc2UgQ01EX3JldHVybjoKKwkgICAgc2V0X2NvbnRleHRfZm9yX2V4cHJlc3Npb24oeHAsIGFyZywgY21kaWR4KTsKKwkgICAgYnJlYWs7CisKKwljYXNlIENNRF91bmxldDoKKwkgICAgd2hpbGUgKCh4cC0+eHBfcGF0dGVybiA9IHZpbV9zdHJjaHIoYXJnLCAnICcpKSAhPSBOVUxMKQorCQlhcmcgPSB4cC0+eHBfcGF0dGVybiArIDE7CisJICAgIHhwLT54cF9jb250ZXh0ID0gRVhQQU5EX1VTRVJfVkFSUzsKKwkgICAgeHAtPnhwX3BhdHRlcm4gPSBhcmc7CisJICAgIGJyZWFrOworCisJY2FzZSBDTURfZnVuY3Rpb246CisJY2FzZSBDTURfZGVsZnVuY3Rpb246CisJICAgIHhwLT54cF9jb250ZXh0ID0gRVhQQU5EX1VTRVJfRlVOQzsKKwkgICAgeHAtPnhwX3BhdHRlcm4gPSBhcmc7CisJICAgIGJyZWFrOworCisJY2FzZSBDTURfZWNob2hsOgorCSAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9ISUdITElHSFQ7CisJICAgIHhwLT54cF9wYXR0ZXJuID0gYXJnOworCSAgICBicmVhazsKKyNlbmRpZgorCWNhc2UgQ01EX2hpZ2hsaWdodDoKKwkgICAgc2V0X2NvbnRleHRfaW5faGlnaGxpZ2h0X2NtZCh4cCwgYXJnKTsKKwkgICAgYnJlYWs7CisjaWZkZWYgRkVBVF9MSVNUQ01EUworCWNhc2UgQ01EX2JkZWxldGU6CisJY2FzZSBDTURfYndpcGVvdXQ6CisJY2FzZSBDTURfYnVubG9hZDoKKwkgICAgd2hpbGUgKCh4cC0+eHBfcGF0dGVybiA9IHZpbV9zdHJjaHIoYXJnLCAnICcpKSAhPSBOVUxMKQorCQlhcmcgPSB4cC0+eHBfcGF0dGVybiArIDE7CisJICAgIC8qRkFMTFRIUk9VR0gqLworCWNhc2UgQ01EX2J1ZmZlcjoKKwljYXNlIENNRF9zYnVmZmVyOgorCWNhc2UgQ01EX2NoZWNrdGltZToKKwkgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfQlVGRkVSUzsKKwkgICAgeHAtPnhwX3BhdHRlcm4gPSBhcmc7CisJICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgRkVBVF9VU1JfQ01EUworCWNhc2UgQ01EX1VTRVI6CisJY2FzZSBDTURfVVNFUl9CVUY6CisJICAgIGlmIChjb21wbCAhPSBFWFBBTkRfTk9USElORykKKwkgICAgeworCQkvKiBYRklMRTogZmlsZSBuYW1lcyBhcmUgaGFuZGxlZCBhYm92ZSAqLworCQlpZiAoIShhcmd0ICYgWEZJTEUpKQorCQl7CisjIGlmZGVmIEZFQVRfTUVOVQorCQkgICAgaWYgKGNvbXBsID09IEVYUEFORF9NRU5VUykKKwkJCXJldHVybiBzZXRfY29udGV4dF9pbl9tZW51X2NtZCh4cCwgY21kLCBhcmcsIGZvcmNlaXQpOworIyBlbmRpZgorCQkgICAgaWYgKGNvbXBsID09IEVYUEFORF9DT01NQU5EUykKKwkJCXJldHVybiBhcmc7CisJCSAgICBpZiAoY29tcGwgPT0gRVhQQU5EX01BUFBJTkdTKQorCQkJcmV0dXJuIHNldF9jb250ZXh0X2luX21hcF9jbWQoeHAsIChjaGFyX3UgKikibWFwIiwKKwkJCQkJIGFyZywgZm9yY2VpdCwgRkFMU0UsIEZBTFNFLCBDTURfbWFwKTsKKwkJICAgIHdoaWxlICgoeHAtPnhwX3BhdHRlcm4gPSB2aW1fc3RyY2hyKGFyZywgJyAnKSkgIT0gTlVMTCkKKwkJCWFyZyA9IHhwLT54cF9wYXR0ZXJuICsgMTsKKwkJICAgIHhwLT54cF9wYXR0ZXJuID0gYXJnOworCQl9CisJCXhwLT54cF9jb250ZXh0ID0gY29tcGw7CisJICAgIH0KKwkgICAgYnJlYWs7CisjZW5kaWYKKwljYXNlIENNRF9tYXA6CSAgICBjYXNlIENNRF9ub3JlbWFwOgorCWNhc2UgQ01EX25tYXA6CSAgICBjYXNlIENNRF9ubm9yZW1hcDoKKwljYXNlIENNRF92bWFwOgkgICAgY2FzZSBDTURfdm5vcmVtYXA6CisJY2FzZSBDTURfb21hcDoJICAgIGNhc2UgQ01EX29ub3JlbWFwOgorCWNhc2UgQ01EX2ltYXA6CSAgICBjYXNlIENNRF9pbm9yZW1hcDoKKwljYXNlIENNRF9jbWFwOgkgICAgY2FzZSBDTURfY25vcmVtYXA6CisJICAgIHJldHVybiBzZXRfY29udGV4dF9pbl9tYXBfY21kKHhwLCBjbWQsIGFyZywgZm9yY2VpdCwKKwkJCQkJCQlGQUxTRSwgRkFMU0UsIGNtZGlkeCk7CisJY2FzZSBDTURfdW5tYXA6CisJY2FzZSBDTURfbnVubWFwOgorCWNhc2UgQ01EX3Z1bm1hcDoKKwljYXNlIENNRF9vdW5tYXA6CisJY2FzZSBDTURfaXVubWFwOgorCWNhc2UgQ01EX2N1bm1hcDoKKwkgICAgcmV0dXJuIHNldF9jb250ZXh0X2luX21hcF9jbWQoeHAsIGNtZCwgYXJnLCBmb3JjZWl0LAorCQkJCQkJCSBGQUxTRSwgVFJVRSwgY21kaWR4KTsKKwljYXNlIENNRF9hYmJyZXZpYXRlOgljYXNlIENNRF9ub3JlYWJicmV2OgorCWNhc2UgQ01EX2NhYmJyZXY6CWNhc2UgQ01EX2Nub3JlYWJicmV2OgorCWNhc2UgQ01EX2lhYmJyZXY6CWNhc2UgQ01EX2lub3JlYWJicmV2OgorCSAgICByZXR1cm4gc2V0X2NvbnRleHRfaW5fbWFwX2NtZCh4cCwgY21kLCBhcmcsIGZvcmNlaXQsCisJCQkJCQkJIFRSVUUsIEZBTFNFLCBjbWRpZHgpOworCWNhc2UgQ01EX3VuYWJicmV2aWF0ZToKKwljYXNlIENNRF9jdW5hYmJyZXY6CisJY2FzZSBDTURfaXVuYWJicmV2OgorCSAgICByZXR1cm4gc2V0X2NvbnRleHRfaW5fbWFwX2NtZCh4cCwgY21kLCBhcmcsIGZvcmNlaXQsCisJCQkJCQkJICBUUlVFLCBUUlVFLCBjbWRpZHgpOworI2lmZGVmIEZFQVRfTUVOVQorCWNhc2UgQ01EX21lbnU6CSAgICBjYXNlIENNRF9ub3JlbWVudToJICAgIGNhc2UgQ01EX3VubWVudToKKwljYXNlIENNRF9hbWVudToJICAgIGNhc2UgQ01EX2Fub3JlbWVudToJICAgIGNhc2UgQ01EX2F1bm1lbnU6CisJY2FzZSBDTURfbm1lbnU6CSAgICBjYXNlIENNRF9ubm9yZW1lbnU6CSAgICBjYXNlIENNRF9udW5tZW51OgorCWNhc2UgQ01EX3ZtZW51OgkgICAgY2FzZSBDTURfdm5vcmVtZW51OgkgICAgY2FzZSBDTURfdnVubWVudToKKwljYXNlIENNRF9vbWVudToJICAgIGNhc2UgQ01EX29ub3JlbWVudToJICAgIGNhc2UgQ01EX291bm1lbnU6CisJY2FzZSBDTURfaW1lbnU6CSAgICBjYXNlIENNRF9pbm9yZW1lbnU6CSAgICBjYXNlIENNRF9pdW5tZW51OgorCWNhc2UgQ01EX2NtZW51OgkgICAgY2FzZSBDTURfY25vcmVtZW51OgkgICAgY2FzZSBDTURfY3VubWVudToKKwljYXNlIENNRF90bWVudToJCQkJICAgIGNhc2UgQ01EX3R1bm1lbnU6CisJY2FzZSBDTURfcG9wdXA6CSAgICBjYXNlIENNRF90ZWFyb2ZmOgkgICAgY2FzZSBDTURfZW1lbnU6CisJICAgIHJldHVybiBzZXRfY29udGV4dF9pbl9tZW51X2NtZCh4cCwgY21kLCBhcmcsIGZvcmNlaXQpOworI2VuZGlmCisKKwljYXNlIENNRF9jb2xvcnNjaGVtZToKKwkgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfQ09MT1JTOworCSAgICB4cC0+eHBfcGF0dGVybiA9IGFyZzsKKwkgICAgYnJlYWs7CisKKwljYXNlIENNRF9jb21waWxlcjoKKwkgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfQ09NUElMRVI7CisJICAgIHhwLT54cF9wYXR0ZXJuID0gYXJnOworCSAgICBicmVhazsKKworI2lmIChkZWZpbmVkKEhBVkVfTE9DQUxFX0gpIHx8IGRlZmluZWQoWF9MT0NBTEUpKSBcCisJJiYgKGRlZmluZWQoRkVBVF9HRVRURVhUKSB8fCBkZWZpbmVkKEZFQVRfTUJZVEUpKQorCWNhc2UgQ01EX2xhbmd1YWdlOgorCSAgICBpZiAoKnNraXB0b3doaXRlKGFyZykgPT0gTlVMKQorCSAgICB7CisJCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX0xBTkdVQUdFOworCQl4cC0+eHBfcGF0dGVybiA9IGFyZzsKKwkgICAgfQorCSAgICBlbHNlCisJCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7CisJICAgIGJyZWFrOworI2VuZGlmCisKKyNlbmRpZiAvKiBGRUFUX0NNRExfQ09NUEwgKi8KKworCWRlZmF1bHQ6CisJICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIHNraXAgYSByYW5nZSBzcGVjaWZpZXIgb2YgdGhlIGZvcm06IGFkZHIgWyxhZGRyXSBbO2FkZHJdIC4uCisgKgorICogQmFja3NsYXNoZWQgZGVsaW1pdGVycyBhZnRlciAvIG9yID8gd2lsbCBiZSBza2lwcGVkLCBhbmQgY29tbWFuZHMgd2lsbAorICogbm90IGJlIGV4cGFuZGVkIGJldHdlZW4gLydzIGFuZCA/J3Mgb3IgYWZ0ZXIgIiciLgorICoKKyAqIFJldHVybnMgdGhlICJjbWQiIHBvaW50ZXIgYWR2YW5jZWQgdG8gYmV5b25kIHRoZSByYW5nZS4KKyAqLworICAgIGNoYXJfdSAqCitza2lwX3JhbmdlKGNtZCwgY3R4KQorICAgIGNoYXJfdQkqY21kOworICAgIGludAkJKmN0eDsJLyogcG9pbnRlciB0byB4cF9jb250ZXh0IG9yIE5VTEwgKi8KK3sKKyAgICBpbnQJCWRlbGltOworCisgICAgd2hpbGUgKCpjbWQgIT0gTlVMICYmICh2aW1faXNzcGFjZSgqY21kKSB8fCBWSU1fSVNESUdJVCgqY21kKSB8fAorCQkJICAgIHZpbV9zdHJjaHIoKGNoYXJfdSAqKSIuJCUnLz8tKyw7IiwgKmNtZCkgIT0gTlVMTCkpCisgICAgeworCWlmICgqY21kID09ICdcJycpCisJeworCSAgICBpZiAoKisrY21kID09IE5VTCAmJiBjdHggIT0gTlVMTCkKKwkJKmN0eCA9IEVYUEFORF9OT1RISU5HOworCX0KKwllbHNlIGlmICgqY21kID09ICcvJyB8fCAqY21kID09ICc/JykKKwl7CisJICAgIGRlbGltID0gKmNtZCsrOworCSAgICB3aGlsZSAoKmNtZCAhPSBOVUwgJiYgKmNtZCAhPSBkZWxpbSkKKwkJaWYgKCpjbWQrKyA9PSAnXFwnICYmICpjbWQgIT0gTlVMKQorCQkgICAgKytjbWQ7CisJICAgIGlmICgqY21kID09IE5VTCAmJiBjdHggIT0gTlVMTCkKKwkJKmN0eCA9IEVYUEFORF9OT1RISU5HOworCX0KKwlpZiAoKmNtZCAhPSBOVUwpCisJICAgICsrY21kOworICAgIH0KKyAgICByZXR1cm4gY21kOworfQorCisvKgorICogZ2V0IGEgc2luZ2xlIEVYIGFkZHJlc3MKKyAqCisgKiBTZXQgcHRyIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBhZnRlciB0aGUgcGFydCB0aGF0IHdhcyBpbnRlcnByZXRlZC4KKyAqIFNldCBwdHIgdG8gTlVMTCB3aGVuIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLgorICoKKyAqIFJldHVybiBNQVhMTlVNIHdoZW4gbm8gRXggYWRkcmVzcyB3YXMgZm91bmQuCisgKi8KKyAgICBzdGF0aWMgbGluZW5yX1QKK2dldF9hZGRyZXNzKHB0ciwgc2tpcCwgdG9fb3RoZXJfZmlsZSkKKyAgICBjaGFyX3UJKipwdHI7CisgICAgaW50CQlza2lwOwkgICAgLyogb25seSBza2lwIHRoZSBhZGRyZXNzLCBkb24ndCB1c2UgaXQgKi8KKyAgICBpbnQJCXRvX290aGVyX2ZpbGU7ICAvKiBmbGFnOiBtYXkganVtcCB0byBvdGhlciBmaWxlICovCit7CisgICAgaW50CQljOworICAgIGludAkJaTsKKyAgICBsb25nCW47CisgICAgY2hhcl91CSpjbWQ7CisgICAgcG9zX1QJcG9zOworICAgIHBvc19UCSpmcDsKKyAgICBsaW5lbnJfVAlsbnVtOworCisgICAgY21kID0gc2tpcHdoaXRlKCpwdHIpOworICAgIGxudW0gPSBNQVhMTlVNOworICAgIGRvCisgICAgeworCXN3aXRjaCAoKmNtZCkKKwl7CisJICAgIGNhc2UgJy4nOgkJCSAgICAvKiAnLicgLSBDdXJzb3IgcG9zaXRpb24gKi8KKwkJCSsrY21kOworCQkJbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKwkJCWJyZWFrOworCisJICAgIGNhc2UgJyQnOgkJCSAgICAvKiAnJCcgLSBsYXN0IGxpbmUgKi8KKwkJCSsrY21kOworCQkJbG51bSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCQkJYnJlYWs7CisKKwkgICAgY2FzZSAnXCcnOgkJCSAgICAvKiAnJycgLSBtYXJrICovCisJCQlpZiAoKisrY21kID09IE5VTCkKKwkJCXsKKwkJCSAgICBjbWQgPSBOVUxMOworCQkJICAgIGdvdG8gZXJyb3I7CisJCQl9CisJCQlpZiAoc2tpcCkKKwkJCSAgICArK2NtZDsKKwkJCWVsc2UKKwkJCXsKKwkJCSAgICAvKiBPbmx5IGFjY2VwdCBhIG1hcmsgaW4gYW5vdGhlciBmaWxlIHdoZW4gaXQgaXMKKwkJCSAgICAgKiB1c2VkIGJ5IGl0c2VsZjogIjonTSIuICovCisJCQkgICAgZnAgPSBnZXRtYXJrKCpjbWQsIHRvX290aGVyX2ZpbGUgJiYgY21kWzFdID09IE5VTCk7CisJCQkgICAgKytjbWQ7CisJCQkgICAgaWYgKGZwID09IChwb3NfVCAqKS0xKQorCQkJCS8qIEp1bXBlZCB0byBhbm90aGVyIGZpbGUuICovCisJCQkJbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKwkJCSAgICBlbHNlCisJCQkgICAgeworCQkJCWlmIChjaGVja19tYXJrKGZwKSA9PSBGQUlMKQorCQkJCXsKKwkJCQkgICAgY21kID0gTlVMTDsKKwkJCQkgICAgZ290byBlcnJvcjsKKwkJCQl9CisJCQkJbG51bSA9IGZwLT5sbnVtOworCQkJICAgIH0KKwkJCX0KKwkJCWJyZWFrOworCisJICAgIGNhc2UgJy8nOgorCSAgICBjYXNlICc/JzoJCQkvKiAnLycgb3IgJz8nIC0gc2VhcmNoICovCisJCQljID0gKmNtZCsrOworCQkJaWYgKHNraXApCS8qIHNraXAgIi9wYXQvIiAqLworCQkJeworCQkJICAgIGNtZCA9IHNraXBfcmVnZXhwKGNtZCwgYywgKGludClwX21hZ2ljLCBOVUxMKTsKKwkJCSAgICBpZiAoKmNtZCA9PSBjKQorCQkJCSsrY21kOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJICAgIHBvcyA9IGN1cndpbi0+d19jdXJzb3I7IC8qIHNhdmUgY3Vyd2luLT53X2N1cnNvciAqLworCQkJICAgIC8qCisJCQkgICAgICogV2hlbiAnLycgb3IgJz8nIGZvbGxvd3MgYW5vdGhlciBhZGRyZXNzLCBzdGFydAorCQkJICAgICAqIGZyb20gdGhlcmUuCisJCQkgICAgICovCisJCQkgICAgaWYgKGxudW0gIT0gTUFYTE5VTSkKKwkJCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtOworCQkJICAgIC8qCisJCQkgICAgICogU3RhcnQgYSBmb3J3YXJkIHNlYXJjaCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCQkJICAgICAqIFN0YXJ0IGEgYmFja3dhcmQgc2VhcmNoIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZS4KKwkJCSAgICAgKiBUaGlzIG1ha2VzIHN1cmUgd2UgbmV2ZXIgbWF0Y2ggaW4gdGhlIGN1cnJlbnQKKwkJCSAgICAgKiBsaW5lLCBhbmQgY2FuIG1hdGNoIGFueXdoZXJlIGluIHRoZQorCQkJICAgICAqIG5leHQvcHJldmlvdXMgbGluZS4KKwkJCSAgICAgKi8KKwkJCSAgICBpZiAoYyA9PSAnLycpCisJCQkJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBNQVhDT0w7CisJCQkgICAgZWxzZQorCQkJCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKwkJCSAgICBzZWFyY2hjbWRsZW4gPSAwOworCQkJICAgIGlmICghZG9fc2VhcmNoKE5VTEwsIGMsIGNtZCwgMUwsCisJCQkJICAgICAgU0VBUkNIX0hJUyArIFNFQVJDSF9NU0cgKyBTRUFSQ0hfU1RBUlQpKQorCQkJICAgIHsKKwkJCQljdXJ3aW4tPndfY3Vyc29yID0gcG9zOworCQkJCWNtZCA9IE5VTEw7CisJCQkJZ290byBlcnJvcjsKKwkJCSAgICB9CisJCQkgICAgbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKwkJCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gcG9zOworCQkJICAgIC8qIGFkanVzdCBjb21tYW5kIHN0cmluZyBwb2ludGVyICovCisJCQkgICAgY21kICs9IHNlYXJjaGNtZGxlbjsKKwkJCX0KKwkJCWJyZWFrOworCisJICAgIGNhc2UgJ1xcJzoJCSAgICAvKiAiXD8iLCAiXC8iIG9yICJcJiIsIHJlcGVhdCBzZWFyY2ggKi8KKwkJCSsrY21kOworCQkJaWYgKCpjbWQgPT0gJyYnKQorCQkJICAgIGkgPSBSRV9TVUJTVDsKKwkJCWVsc2UgaWYgKCpjbWQgPT0gJz8nIHx8ICpjbWQgPT0gJy8nKQorCQkJICAgIGkgPSBSRV9TRUFSQ0g7CisJCQllbHNlCisJCQl7CisJCQkgICAgRU1TRyhfKGVfYmFja3NsYXNoKSk7CisJCQkgICAgY21kID0gTlVMTDsKKwkJCSAgICBnb3RvIGVycm9yOworCQkJfQorCisJCQlpZiAoIXNraXApCisJCQl7CisJCQkgICAgLyoKKwkJCSAgICAgKiBXaGVuIHNlYXJjaCBmb2xsb3dzIGFub3RoZXIgYWRkcmVzcywgc3RhcnQgZnJvbQorCQkJICAgICAqIHRoZXJlLgorCQkJICAgICAqLworCQkJICAgIGlmIChsbnVtICE9IE1BWExOVU0pCisJCQkJcG9zLmxudW0gPSBsbnVtOworCQkJICAgIGVsc2UKKwkJCQlwb3MubG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKworCQkJICAgIC8qCisJCQkgICAgICogU3RhcnQgdGhlIHNlYXJjaCBqdXN0IGxpa2UgZm9yIHRoZSBhYm92ZQorCQkJICAgICAqIGRvX3NlYXJjaCgpLgorCQkJICAgICAqLworCQkJICAgIGlmICgqY21kICE9ICc/JykKKwkJCQlwb3MuY29sID0gTUFYQ09MOworCQkJICAgIGVsc2UKKwkJCQlwb3MuY29sID0gMDsKKwkJCSAgICBpZiAoc2VhcmNoaXQoY3Vyd2luLCBjdXJidWYsICZwb3MsCisJCQkJCSpjbWQgPT0gJz8nID8gQkFDS1dBUkQgOiBGT1JXQVJELAorCQkJCQkoY2hhcl91ICopIiIsIDFMLAorCQkJCQlTRUFSQ0hfTVNHICsgU0VBUkNIX1NUQVJULCBpKSAhPSBGQUlMKQorCQkJCWxudW0gPSBwb3MubG51bTsKKwkJCSAgICBlbHNlCisJCQkgICAgeworCQkJCWNtZCA9IE5VTEw7CisJCQkJZ290byBlcnJvcjsKKwkJCSAgICB9CisJCQl9CisJCQkrK2NtZDsKKwkJCWJyZWFrOworCisJICAgIGRlZmF1bHQ6CisJCQlpZiAoVklNX0lTRElHSVQoKmNtZCkpCS8qIGFic29sdXRlIGxpbmUgbnVtYmVyICovCisJCQkgICAgbG51bSA9IGdldGRpZ2l0cygmY21kKTsKKwl9CisKKwlmb3IgKDs7KQorCXsKKwkgICAgY21kID0gc2tpcHdoaXRlKGNtZCk7CisJICAgIGlmICgqY21kICE9ICctJyAmJiAqY21kICE9ICcrJyAmJiAhVklNX0lTRElHSVQoKmNtZCkpCisJCWJyZWFrOworCisJICAgIGlmIChsbnVtID09IE1BWExOVU0pCisJCWxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CS8qICIrMSIgaXMgc2FtZSBhcyAiLisxIiAqLworCSAgICBpZiAoVklNX0lTRElHSVQoKmNtZCkpCisJCWkgPSAnKyc7CQkvKiAibnVtYmVyIiBpcyBzYW1lIGFzICIrbnVtYmVyIiAqLworCSAgICBlbHNlCisJCWkgPSAqY21kKys7CisJICAgIGlmICghVklNX0lTRElHSVQoKmNtZCkpCS8qICcrJyBpcyAnKzEnLCBidXQgJyswJyBpcyBub3QgJysxJyAqLworCQluID0gMTsKKwkgICAgZWxzZQorCQluID0gZ2V0ZGlnaXRzKCZjbWQpOworCSAgICBpZiAoaSA9PSAnLScpCisJCWxudW0gLT0gbjsKKwkgICAgZWxzZQorCQlsbnVtICs9IG47CisJfQorICAgIH0gd2hpbGUgKCpjbWQgPT0gJy8nIHx8ICpjbWQgPT0gJz8nKTsKKworZXJyb3I6CisgICAgKnB0ciA9IGNtZDsKKyAgICByZXR1cm4gbG51bTsKK30KKworLyoKKyAqIEZ1bmN0aW9uIGNhbGxlZCBmb3IgY29tbWFuZCB3aGljaCBpcyBOb3QgSW1wbGVtZW50ZWQuICBOSSEKKyAqLworICAgIHZvaWQKK2V4X25pKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKCFlYXAtPnNraXApCisJZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkUzMTk6IFNvcnJ5LCB0aGUgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiIpOworfQorCisjaWYgIWRlZmluZWQoRkVBVF9QRVJMKSB8fCAhZGVmaW5lZChGRUFUX1BZVEhPTikgfHwgIWRlZmluZWQoRkVBVF9UQ0wpIFwKKwl8fCAhZGVmaW5lZChGRUFUX1JVQlkpCisvKgorICogRnVuY3Rpb24gY2FsbGVkIGZvciBzY3JpcHQgY29tbWFuZCB3aGljaCBpcyBOb3QgSW1wbGVtZW50ZWQuICBOSSEKKyAqIFNraXBzIG92ZXIgIjpwZXJsIDw8RU9GIiBjb25zdHJ1Y3RzLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X3NjcmlwdF9uaShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGlmICghZWFwLT5za2lwKQorCWV4X25pKGVhcCk7CisgICAgZWxzZQorCXZpbV9mcmVlKHNjcmlwdF9nZXQoZWFwLCBlYXAtPmFyZykpOworfQorI2VuZGlmCisKKy8qCisgKiBDaGVjayByYW5nZSBpbiBFeCBjb21tYW5kIGZvciB2YWxpZGl0eS4KKyAqIFJldHVybiBOVUxMIHdoZW4gdmFsaWQsIGVycm9yIG1lc3NhZ2Ugd2hlbiBpbnZhbGlkLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitpbnZhbGlkX3JhbmdlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKCAgICAgICBlYXAtPmxpbmUxIDwgMAorCSAgICB8fCBlYXAtPmxpbmUyIDwgMAorCSAgICB8fCBlYXAtPmxpbmUxID4gZWFwLT5saW5lMgorCSAgICB8fCAoKGVhcC0+YXJndCAmIFJBTkdFKQorCQkmJiAhKGVhcC0+YXJndCAmIE5PVEFEUikKKwkJJiYgZWFwLT5saW5lMiA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50CisjaWZkZWYgRkVBVF9ESUZGCisJCQkrIChlYXAtPmNtZGlkeCA9PSBDTURfZGlmZmdldCkKKyNlbmRpZgorCQkpKQorCXJldHVybiAoY2hhcl91ICopXyhlX2ludnJhbmdlKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIENvcnJlY3QgdGhlIHJhbmdlIGZvciB6ZXJvIGxpbmUgbnVtYmVyLCBpZiByZXF1aXJlZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjb3JyZWN0X3JhbmdlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKCEoZWFwLT5hcmd0ICYgWkVST1IpKQkgICAgLyogemVybyBpbiByYW5nZSBub3QgYWxsb3dlZCAqLworICAgIHsKKwlpZiAoZWFwLT5saW5lMSA9PSAwKQorCSAgICBlYXAtPmxpbmUxID0gMTsKKwlpZiAoZWFwLT5saW5lMiA9PSAwKQorCSAgICBlYXAtPmxpbmUyID0gMTsKKyAgICB9Cit9CisKKy8qCisgKiBFeHBhbmQgZmlsZSBuYW1lIGluIEV4IGNvbW1hbmQgYXJndW1lbnQuCisgKiBSZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitleHBhbmRfZmlsZW5hbWUoZWFwLCBjbWRsaW5lcCwgZXJyb3Jtc2dwKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICBjaGFyX3UJKipjbWRsaW5lcDsKKyAgICBjaGFyX3UJKiplcnJvcm1zZ3A7Cit7CisgICAgaW50CQloYXNfd2lsZGNhcmRzOwkvKiBuZWVkIHRvIGV4cGFuZCB3aWxkY2FyZHMgKi8KKyAgICBjaGFyX3UJKnJlcGw7CisgICAgaW50CQlzcmNsZW47CisgICAgY2hhcl91CSpwOworICAgIGludAkJbjsKKworICAgIC8qCisgICAgICogRGVjaWRlIHRvIGV4cGFuZCB3aWxkY2FyZHMgKmJlZm9yZSogcmVwbGFjaW5nICclJywgJyMnLCBldGMuICBJZgorICAgICAqIHRoZSBmaWxlIG5hbWUgY29udGFpbnMgYSB3aWxkY2FyZCBpdCBzaG91bGQgbm90IGNhdXNlIGV4cGFuZGluZy4KKyAgICAgKiAoaXQgd2lsbCBiZSBleHBhbmRlZCBhbnl3YXkgaWYgdGhlcmUgaXMgYSB3aWxkY2FyZCBiZWZvcmUgcmVwbGFjaW5nKS4KKyAgICAgKi8KKyAgICBoYXNfd2lsZGNhcmRzID0gbWNoX2hhc193aWxkY2FyZChlYXAtPmFyZyk7CisgICAgZm9yIChwID0gZWFwLT5hcmc7ICpwOyApCisgICAgeworCS8qCisJICogUXVpY2sgY2hlY2sgaWYgdGhpcyBjYW5ub3QgYmUgdGhlIHN0YXJ0IG9mIGEgc3BlY2lhbCBzdHJpbmcuCisJICogQWxzbyByZW1vdmVzIGJhY2tzbGFzaCBiZWZvcmUgJyUnLCAnIycgYW5kICc8Jy4KKwkgKi8KKwlpZiAodmltX3N0cmNocigoY2hhcl91ICopIiUjPCIsICpwKSA9PSBOVUxMKQorCXsKKwkgICAgKytwOworCSAgICBjb250aW51ZTsKKwl9CisKKwkvKgorCSAqIFRyeSB0byBmaW5kIGEgbWF0Y2ggYXQgdGhpcyBwb3NpdGlvbi4KKwkgKi8KKwlyZXBsID0gZXZhbF92YXJzKHAsICZzcmNsZW4sICYoZWFwLT5kb19lY21kX2xudW0pLCBlcnJvcm1zZ3AsIGVhcC0+YXJnKTsKKwlpZiAoKmVycm9ybXNncCAhPSBOVUxMKQkJLyogZXJyb3IgZGV0ZWN0ZWQgKi8KKwkgICAgcmV0dXJuIEZBSUw7CisJaWYgKHJlcGwgPT0gTlVMTCkJCS8qIG5vIG1hdGNoIGZvdW5kICovCisJeworCSAgICBwICs9IHNyY2xlbjsKKwkgICAgY29udGludWU7CisJfQorCisJLyogTmVlZCB0byBlc2NhcGUgd2hpdGUgc3BhY2UgZXQgYWwuIHdpdGggYSBiYWNrc2xhc2guICBEb24ndCBkbyB0aGlzCisJICogZm9yIHNoZWxsIGNvbW1hbmRzIChtYXkgaGF2ZSB0byB1c2UgcXVvdGVzIGluc3RlYWQpLiAgRG9uJ3QgZG8gdGhpcworCSAqIGZvciBub24tdW5peCBzeXN0ZW1zIHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgYXJndW1lbnQgKHNwYWNlcyBkb24ndAorCSAqIHNlcGFyYXRlIGFyZ3VtZW50cyB0aGVuKS4gKi8KKwlpZiAoIWVhcC0+dXNlZmlsdGVyCisJCSYmIGVhcC0+Y21kaWR4ICE9IENNRF9iYW5nCisJCSYmIGVhcC0+Y21kaWR4ICE9IENNRF9tYWtlCisJCSYmIGVhcC0+Y21kaWR4ICE9IENNRF9ncmVwCisJCSYmIGVhcC0+Y21kaWR4ICE9IENNRF9ncmVwYWRkCisjaWZuZGVmIFVOSVgKKwkJJiYgIShlYXAtPmFyZ3QgJiBOT1NQQykKKyNlbmRpZgorCQkpCisJeworCSAgICBjaGFyX3UJKmw7CisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJICAgIC8qIERvbid0IGVzY2FwZSBhIGJhY2tzbGFzaCBoZXJlLCBiZWNhdXNlIHJlbV9iYWNrc2xhc2goKSBkb2Vzbid0CisJICAgICAqIHJlbW92ZSBpdCBsYXRlci4gKi8KKwkgICAgc3RhdGljIGNoYXJfdSAqbm9ic2xhc2ggPSAoY2hhcl91ICopIiBcdFwifCI7CisjIGRlZmluZSBFU0NBUEVfQ0hBUlMgbm9ic2xhc2gKKyNlbHNlCisjIGRlZmluZSBFU0NBUEVfQ0hBUlMgZXNjYXBlX2NoYXJzCisjZW5kaWYKKworCSAgICBmb3IgKGwgPSByZXBsOyAqbDsgKytsKQorCQlpZiAodmltX3N0cmNocihFU0NBUEVfQ0hBUlMsICpsKSAhPSBOVUxMKQorCQl7CisJCSAgICBsID0gdmltX3N0cnNhdmVfZXNjYXBlZChyZXBsLCBFU0NBUEVfQ0hBUlMpOworCQkgICAgaWYgKGwgIT0gTlVMTCkKKwkJICAgIHsKKwkJCXZpbV9mcmVlKHJlcGwpOworCQkJcmVwbCA9IGw7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCX0KKworCS8qIEZvciBhIHNoZWxsIGNvbW1hbmQgYSAnIScgbXVzdCBiZSBlc2NhcGVkLiAqLworCWlmICgoZWFwLT51c2VmaWx0ZXIgfHwgZWFwLT5jbWRpZHggPT0gQ01EX2JhbmcpCisJCSYmIHZpbV9zdHJjaHIocmVwbCwgJyEnKSAhPSBOVUxMKQorCXsKKwkgICAgY2hhcl91CSpsOworCisJICAgIGwgPSB2aW1fc3Ryc2F2ZV9lc2NhcGVkKHJlcGwsIChjaGFyX3UgKikiISIpOworCSAgICBpZiAobCAhPSBOVUxMKQorCSAgICB7CisJCXZpbV9mcmVlKHJlcGwpOworCQlyZXBsID0gbDsKKwkJLyogRm9yIGEgc2gtbGlrZSBzaGVsbCBlc2NhcGUgaXQgYW5vdGhlciB0aW1lLiAqLworCQlpZiAoc3Ryc3RyKChjaGFyICopcF9zaCwgInNoIikgIT0gTlVMTCkKKwkJeworCQkgICAgbCA9IHZpbV9zdHJzYXZlX2VzY2FwZWQocmVwbCwgKGNoYXJfdSAqKSIhIik7CisJCSAgICBpZiAobCAhPSBOVUxMKQorCQkgICAgeworCQkJdmltX2ZyZWUocmVwbCk7CisJCQlyZXBsID0gbDsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorCisJcCA9IHJlcGxfY21kbGluZShlYXAsIHAsIHNyY2xlbiwgcmVwbCwgY21kbGluZXApOworCXZpbV9mcmVlKHJlcGwpOworCWlmIChwID09IE5VTEwpCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKworICAgIC8qCisgICAgICogT25lIGZpbGUgYXJndW1lbnQ6IEV4cGFuZCB3aWxkY2FyZHMuCisgICAgICogRG9uJ3QgZG8gdGhpcyB3aXRoICI6ciAhY29tbWFuZCIgb3IgIjp3ICFjb21tYW5kIi4KKyAgICAgKi8KKyAgICBpZiAoKGVhcC0+YXJndCAmIE5PU1BDKSAmJiAhZWFwLT51c2VmaWx0ZXIpCisgICAgeworCS8qCisJICogTWF5IGRvIHRoaXMgdHdpY2U6CisJICogMS4gUmVwbGFjZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisJICogMi4gUmVwbGFjZSBhbnkgb3RoZXIgd2lsZGNhcmRzLCByZW1vdmUgYmFja3NsYXNoZXMuCisJICovCisJZm9yIChuID0gMTsgbiA8PSAyOyArK24pCisJeworCSAgICBpZiAobiA9PSAyKQorCSAgICB7CisjaWZkZWYgVU5JWAorCQkvKgorCQkgKiBPbmx5IGZvciBVbml4IHdlIGNoZWNrIGZvciBtb3JlIHRoYW4gb25lIGZpbGUgbmFtZS4KKwkJICogRm9yIG90aGVyIHN5c3RlbXMgc3BhY2VzIGFyZSBjb25zaWRlcmVkIHRvIGJlIHBhcnQKKwkJICogb2YgdGhlIGZpbGUgbmFtZS4KKwkJICogT25seSBjaGVjayBoZXJlIGlmIHRoZXJlIGlzIG5vIHdpbGRjYXJkLCBvdGhlcndpc2UKKwkJICogRXhwYW5kT25lKCkgd2lsbCBjaGVjayBmb3IgZXJyb3JzLiBUaGlzIGFsbG93cworCQkgKiAiOmUgYGxzIHZlKi5jYCIgb24gVW5peC4KKwkJICovCisJCWlmICghaGFzX3dpbGRjYXJkcykKKwkJICAgIGZvciAocCA9IGVhcC0+YXJnOyAqcDsgKytwKQorCQkgICAgeworCQkJLyogc2tpcCBlc2NhcGVkIGNoYXJhY3RlcnMgKi8KKwkJCWlmIChwWzFdICYmICgqcCA9PSAnXFwnIHx8ICpwID09IEN0cmxfVikpCisJCQkgICAgKytwOworCQkJZWxzZSBpZiAodmltX2lzd2hpdGUoKnApKQorCQkJeworCQkJICAgICplcnJvcm1zZ3AgPSAoY2hhcl91ICopXygiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiKTsKKwkJCSAgICByZXR1cm4gRkFJTDsKKwkJCX0KKwkJICAgIH0KKyNlbmRpZgorCisJCS8qCisJCSAqIEhhbHZlIHRoZSBudW1iZXIgb2YgYmFja3NsYXNoZXMgKHRoaXMgaXMgVmkgY29tcGF0aWJsZSkuCisJCSAqIEZvciBVbml4IGFuZCBPUy8yLCB3aGVuIHdpbGRjYXJkcyBhcmUgZXhwYW5kZWQsIHRoaXMgaXMKKwkJICogZG9uZSBieSBFeHBhbmRPbmUoKSBiZWxvdy4KKwkJICovCisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKE9TMikKKwkJaWYgKCFoYXNfd2lsZGNhcmRzKQorI2VuZGlmCisJCSAgICBiYWNrc2xhc2hfaGFsdmUoZWFwLT5hcmcpOworI2lmZGVmIE1BQ09TX0NMQVNTSUMKKwkJLyoKKwkJICogdHJhbnNsYXRlIHVuaXgtbGlrZSBwYXRoIGNvbXBvbmVudHMKKwkJICovCisJCXNsYXNoX25fY29sb25fYWRqdXN0KGVhcC0+YXJnKTsKKyNlbmRpZgorCSAgICB9CisKKwkgICAgaWYgKGhhc193aWxkY2FyZHMpCisJICAgIHsKKwkJaWYgKG4gPT0gMSkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIEZpcnN0IGxvb3A6IE1heSBleHBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgVGhpcworCQkgICAgICogY2FuIGJlIGRvbmUgbXVjaCBmYXN0ZXIgd2l0aCBleHBhbmRfZW52KCkgdGhhbiB3aXRoCisJCSAgICAgKiBzb21ldGhpbmcgZWxzZSAoZS5nLiwgY2FsbGluZyBhIHNoZWxsKS4KKwkJICAgICAqIEFmdGVyIGV4cGFuZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGNoZWNrIGFnYWluCisJCSAgICAgKiBpZiB0aGVyZSBhcmUgc3RpbGwgd2lsZGNhcmRzIHByZXNlbnQuCisJCSAgICAgKi8KKwkJICAgIGlmICh2aW1fc3RyY2hyKGVhcC0+YXJnLCAnJCcpICE9IE5VTEwKKwkJCSAgICB8fCB2aW1fc3RyY2hyKGVhcC0+YXJnLCAnficpICE9IE5VTEwpCisJCSAgICB7CisJCQlleHBhbmRfZW52X2VzYyhlYXAtPmFyZywgTmFtZUJ1ZmYsIE1BWFBBVEhMLCBUUlVFKTsKKwkJCWhhc193aWxkY2FyZHMgPSBtY2hfaGFzX3dpbGRjYXJkKE5hbWVCdWZmKTsKKwkJCXAgPSBOYW1lQnVmZjsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCXAgPSBOVUxMOworCQl9CisJCWVsc2UgLyogbiA9PSAyICovCisJCXsKKwkJICAgIGV4cGFuZF9UCXhwYzsKKworCQkgICAgRXhwYW5kSW5pdCgmeHBjKTsKKwkJICAgIHhwYy54cF9jb250ZXh0ID0gRVhQQU5EX0ZJTEVTOworCQkgICAgcCA9IEV4cGFuZE9uZSgmeHBjLCBlYXAtPmFyZywgTlVMTCwKKwkJCQkJICAgIFdJTERfTElTVF9OT1RGT1VORHxXSUxEX0FERF9TTEFTSCwKKwkJCQkJCSAgIFdJTERfRVhQQU5EX0ZSRUUpOworCQkgICAgRXhwYW5kQ2xlYW51cCgmeHBjKTsKKwkJICAgIGlmIChwID09IE5VTEwpCisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQlpZiAocCAhPSBOVUxMKQorCQl7CisJCSAgICAodm9pZClyZXBsX2NtZGxpbmUoZWFwLCBlYXAtPmFyZywgKGludClTVFJMRU4oZWFwLT5hcmcpLAorCQkJCQkJCQkgcCwgY21kbGluZXApOworCQkgICAgaWYgKG4gPT0gMikJLyogcCBjYW1lIGZyb20gRXhwYW5kT25lKCkgKi8KKwkJCXZpbV9mcmVlKHApOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFJlcGxhY2UgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lLCBrZWVwaW5nIGVhcC0+Y21kLCBlYXAtPmFyZyBhbmQKKyAqIGVhcC0+bmV4dGNtZCBjb3JyZWN0LgorICogInNyYyIgcG9pbnRzIHRvIHRoZSBwYXJ0IHRoYXQgaXMgdG8gYmUgcmVwbGFjZWQsIG9mIGxlbmd0aCAic3JjbGVuIi4KKyAqICJyZXBsIiBpcyB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nLgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgcmVwbGFjZWQgc3RyaW5nLgorICogUmV0dXJucyBOVUxMIGZvciBmYWlsdXJlLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCityZXBsX2NtZGxpbmUoZWFwLCBzcmMsIHNyY2xlbiwgcmVwbCwgY21kbGluZXApCisgICAgZXhhcmdfVAkqZWFwOworICAgIGNoYXJfdQkqc3JjOworICAgIGludAkJc3JjbGVuOworICAgIGNoYXJfdQkqcmVwbDsKKyAgICBjaGFyX3UJKipjbWRsaW5lcDsKK3sKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpuZXdfY21kbGluZTsKKworICAgIC8qCisgICAgICogVGhlIG5ldyBjb21tYW5kIGxpbmUgaXMgYnVpbGQgaW4gbmV3X2NtZGxpbmVbXS4KKyAgICAgKiBGaXJzdCBhbGxvY2F0ZSBpdC4KKyAgICAgKiBDYXJlZnVsOiBhICIrY21kIiBhcmd1bWVudCBtYXkgaGF2ZSBiZWVuIE5VTCB0ZXJtaW5hdGVkLgorICAgICAqLworICAgIGxlbiA9IChpbnQpU1RSTEVOKHJlcGwpOworICAgIGkgPSAoaW50KShzcmMgLSAqY21kbGluZXApICsgKGludClTVFJMRU4oc3JjICsgc3JjbGVuKSArIGxlbiArIDM7CisgICAgaWYgKGVhcC0+bmV4dGNtZCkKKwlpICs9IChpbnQpU1RSTEVOKGVhcC0+bmV4dGNtZCk7LyogYWRkIHNwYWNlIGZvciBuZXh0IGNvbW1hbmQgKi8KKyAgICBpZiAoKG5ld19jbWRsaW5lID0gYWxsb2MoKHVuc2lnbmVkKWkpKSA9PSBOVUxMKQorCXJldHVybiBOVUxMOwkJCS8qIG91dCBvZiBtZW1vcnkhICovCisKKyAgICAvKgorICAgICAqIENvcHkgdGhlIHN0dWZmIGJlZm9yZSB0aGUgZXhwYW5kZWQgcGFydC4KKyAgICAgKiBDb3B5IHRoZSBleHBhbmRlZCBzdHVmZi4KKyAgICAgKiBDb3B5IHdoYXQgY2FtZSBhZnRlciB0aGUgZXhwYW5kZWQgcGFydC4KKyAgICAgKiBDb3B5IHRoZSBuZXh0IGNvbW1hbmRzLCBpZiB0aGVyZSBhcmUgYW55LgorICAgICAqLworICAgIGkgPSAoaW50KShzcmMgLSAqY21kbGluZXApOwkvKiBsZW5ndGggb2YgcGFydCBiZWZvcmUgbWF0Y2ggKi8KKyAgICBtY2hfbWVtbW92ZShuZXdfY21kbGluZSwgKmNtZGxpbmVwLCAoc2l6ZV90KWkpOworICAgIG1jaF9tZW1tb3ZlKG5ld19jbWRsaW5lICsgaSwgcmVwbCwgKHNpemVfdClsZW4pOworICAgIGkgKz0gbGVuOwkJCQkvKiByZW1lbWJlciB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KKyAgICBTVFJDUFkobmV3X2NtZGxpbmUgKyBpLCBzcmMgKyBzcmNsZW4pOworICAgIHNyYyA9IG5ld19jbWRsaW5lICsgaTsJCS8qIHJlbWVtYmVyIHdoZXJlIHRvIGNvbnRpbnVlICovCisKKyAgICBpZiAoZWFwLT5uZXh0Y21kKQkJCS8qIGFwcGVuZCBuZXh0IGNvbW1hbmQgKi8KKyAgICB7CisJaSA9IChpbnQpU1RSTEVOKG5ld19jbWRsaW5lKSArIDE7CisJU1RSQ1BZKG5ld19jbWRsaW5lICsgaSwgZWFwLT5uZXh0Y21kKTsKKwllYXAtPm5leHRjbWQgPSBuZXdfY21kbGluZSArIGk7CisgICAgfQorICAgIGVhcC0+Y21kID0gbmV3X2NtZGxpbmUgKyAoZWFwLT5jbWQgLSAqY21kbGluZXApOworICAgIGVhcC0+YXJnID0gbmV3X2NtZGxpbmUgKyAoZWFwLT5hcmcgLSAqY21kbGluZXApOworICAgIGlmIChlYXAtPmRvX2VjbWRfY21kICE9IE5VTEwgJiYgZWFwLT5kb19lY21kX2NtZCAhPSBkb2xsYXJfY29tbWFuZCkKKwllYXAtPmRvX2VjbWRfY21kID0gbmV3X2NtZGxpbmUgKyAoZWFwLT5kb19lY21kX2NtZCAtICpjbWRsaW5lcCk7CisgICAgdmltX2ZyZWUoKmNtZGxpbmVwKTsKKyAgICAqY21kbGluZXAgPSBuZXdfY21kbGluZTsKKworICAgIHJldHVybiBzcmM7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgJ3wnIHRvIHNlcGFyYXRlIGNvbW1hbmRzIGFuZCAnIicgdG8gc3RhcnQgY29tbWVudHMuCisgKi8KKyAgICB2b2lkCitzZXBhcmF0ZV9uZXh0Y21kKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcl91CSpwOworCisgICAgZm9yIChwID0gZWFwLT5hcmc7ICpwOyArK3ApCisgICAgeworCWlmICgqcCA9PSBDdHJsX1YpCisJeworCSAgICBpZiAoZWFwLT5hcmd0ICYgKFVTRUNUUkxWIHwgWEZJTEUpKQorCQkrK3A7CQkvKiBza2lwIENUUkwtViBhbmQgbmV4dCBjaGFyICovCisJICAgIGVsc2UKKwkJU1RSQ1BZKHAsIHAgKyAxKTsJLyogcmVtb3ZlIENUUkwtViBhbmQgc2tpcCBuZXh0IGNoYXIgKi8KKwkgICAgaWYgKCpwID09IE5VTCkJCS8qIHN0b3AgYXQgTlVMIGFmdGVyIENUUkwtViAqLworCQlicmVhazsKKwl9CisJLyogQ2hlY2sgZm9yICciJzogc3RhcnQgb2YgY29tbWVudCBvciAnfCc6IG5leHQgY29tbWFuZCAqLworCS8qIDpAIiBhbmQgOioiIGRvIG5vdCBzdGFydCBhIGNvbW1lbnQhCisJICogOnJlZGlyIEAiIGRvZXNuJ3QgZWl0aGVyLiAqLworCWVsc2UgaWYgKCgqcCA9PSAnIicgJiYgIShlYXAtPmFyZ3QgJiBOT1RSTENPTSkKKwkJICAgICYmICgoZWFwLT5jbWRpZHggIT0gQ01EX2F0ICYmIGVhcC0+Y21kaWR4ICE9IENNRF9zdGFyKQorCQkJfHwgcCAhPSBlYXAtPmFyZykKKwkJICAgICYmIChlYXAtPmNtZGlkeCAhPSBDTURfcmVkaXIKKwkJCXx8IHAgIT0gZWFwLT5hcmcgKyAxIHx8IHBbLTFdICE9ICdAJykpCisJCXx8ICpwID09ICd8JyB8fCAqcCA9PSAnXG4nKQorCXsKKwkgICAgLyoKKwkgICAgICogV2UgcmVtb3ZlIHRoZSAnXCcgYmVmb3JlIHRoZSAnfCcsIHVubGVzcyBVU0VDVFJMViBpcyB1c2VkCisJICAgICAqIEFORCAnYicgaXMgcHJlc2VudCBpbiAnY3BvcHRpb25zJy4KKwkgICAgICovCisJICAgIGlmICgodmltX3N0cmNocihwX2NwbywgQ1BPX0JBUikgPT0gTlVMTAorCQkJICAgICAgfHwgIShlYXAtPmFyZ3QgJiBVU0VDVFJMVikpICYmICoocCAtIDEpID09ICdcXCcpCisJICAgIHsKKwkJbWNoX21lbW1vdmUocCAtIDEsIHAsIFNUUkxFTihwKSArIDEpOwkvKiByZW1vdmUgdGhlICdcJyAqLworCQktLXA7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWVhcC0+bmV4dGNtZCA9IGNoZWNrX25leHRjbWQocCk7CisJCSpwID0gTlVMOworCQlicmVhazsKKwkgICAgfQorCX0KKyNpZmRlZiBGRUFUX01CWVRFCisJZWxzZSBpZiAoaGFzX21ieXRlKQorCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkgLSAxOyAvKiBza2lwIGJ5dGVzIG9mIG11bHRpLWJ5dGUgY2hhciAqLworI2VuZGlmCisgICAgfQorICAgIGlmICghKGVhcC0+YXJndCAmIE5PVFJMQ09NKSkJLyogcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcyAqLworCWRlbF90cmFpbGluZ19zcGFjZXMoZWFwLT5hcmcpOworfQorCisvKgorICogZ2V0ICsgY29tbWFuZCBmcm9tIGV4IGFyZ3VtZW50CisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2dldGFyZ2NtZChhcmdwKQorICAgIGNoYXJfdSAqKmFyZ3A7Cit7CisgICAgY2hhcl91ICphcmcgPSAqYXJncDsKKyAgICBjaGFyX3UgKmNvbW1hbmQgPSBOVUxMOworCisgICAgaWYgKCphcmcgPT0gJysnKQkgICAgLyogK1tjb21tYW5kXSAqLworICAgIHsKKwkrK2FyZzsKKwlpZiAodmltX2lzc3BhY2UoKmFyZykpCisJICAgIGNvbW1hbmQgPSBkb2xsYXJfY29tbWFuZDsKKwllbHNlCisJeworCSAgICBjb21tYW5kID0gYXJnOworCSAgICBhcmcgPSBza2lwX2NtZF9hcmcoY29tbWFuZCwgVFJVRSk7CisJICAgIGlmICgqYXJnICE9IE5VTCkKKwkJKmFyZysrID0gTlVMOwkJLyogdGVybWluYXRlIGNvbW1hbmQgd2l0aCBOVUwgKi8KKwl9CisKKwlhcmcgPSBza2lwd2hpdGUoYXJnKTsJLyogc2tpcCBvdmVyIHNwYWNlcyAqLworCSphcmdwID0gYXJnOworICAgIH0KKyAgICByZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIEZpbmQgZW5kIG9mICIrY29tbWFuZCIgYXJndW1lbnQuICBTa2lwIG92ZXIgIlwgIiBhbmQgIlxcIi4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorc2tpcF9jbWRfYXJnKHAsIHJlbWJzKQorICAgIGNoYXJfdSAqcDsKKyAgICBpbnQJICAgcmVtYnM7CS8qIFRSVUUgdG8gaGFsdmUgdGhlIG51bWJlciBvZiBiYWNrc2xhc2hlcyAqLworeworICAgIHdoaWxlICgqcCAmJiAhdmltX2lzc3BhY2UoKnApKQorICAgIHsKKwlpZiAoKnAgPT0gJ1xcJyAmJiBwWzFdICE9IE5VTCkKKwl7CisJICAgIGlmIChyZW1icykKKwkJbWNoX21lbW1vdmUocCwgcCArIDEsIFNUUkxFTihwKSk7CisJICAgIGVsc2UKKwkJKytwOworCX0KKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOworCWVsc2UKKyNlbmRpZgorCSAgICArK3A7CisgICAgfQorICAgIHJldHVybiBwOworfQorCisvKgorICogR2V0ICIrK29wdD1hcmciIGFyZ3VtZW50LgorICogUmV0dXJuIEZBSUwgb3IgT0suCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRhcmdvcHQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnICsgMjsKKyAgICBpbnQJCSpwcCA9IE5VTEw7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGNoYXJfdQkqcDsKKyNlbmRpZgorCisgICAgLyogIjplZGl0ICsrW25vXWJpblthcnldIGZpbGUiICovCisgICAgaWYgKFNUUk5DTVAoYXJnLCAiYmluIiwgMykgPT0gMCB8fCBTVFJOQ01QKGFyZywgIm5vYmluIiwgNSkgPT0gMCkKKyAgICB7CisJaWYgKCphcmcgPT0gJ24nKQorCXsKKwkgICAgYXJnICs9IDI7CisJICAgIGVhcC0+Zm9yY2VfYmluID0gRk9SQ0VfTk9CSU47CisJfQorCWVsc2UKKwkgICAgZWFwLT5mb3JjZV9iaW4gPSBGT1JDRV9CSU47CisJaWYgKCFjaGVja2ZvcmNtZCgmYXJnLCAiYmluYXJ5IiwgMykpCisJICAgIHJldHVybiBGQUlMOworCWVhcC0+YXJnID0gc2tpcHdoaXRlKGFyZyk7CisJcmV0dXJuIE9LOworICAgIH0KKworICAgIGlmIChTVFJOQ01QKGFyZywgImZmIiwgMikgPT0gMCkKKyAgICB7CisJYXJnICs9IDI7CisJcHAgPSAmZWFwLT5mb3JjZV9mZjsKKyAgICB9CisgICAgZWxzZSBpZiAoU1RSTkNNUChhcmcsICJmaWxlZm9ybWF0IiwgMTApID09IDApCisgICAgeworCWFyZyArPSAxMDsKKwlwcCA9ICZlYXAtPmZvcmNlX2ZmOworICAgIH0KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgZWxzZSBpZiAoU1RSTkNNUChhcmcsICJlbmMiLCAzKSA9PSAwKQorICAgIHsKKwlhcmcgKz0gMzsKKwlwcCA9ICZlYXAtPmZvcmNlX2VuYzsKKyAgICB9CisgICAgZWxzZSBpZiAoU1RSTkNNUChhcmcsICJlbmNvZGluZyIsIDgpID09IDApCisgICAgeworCWFyZyArPSA4OworCXBwID0gJmVhcC0+Zm9yY2VfZW5jOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHBwID09IE5VTEwgfHwgKmFyZyAhPSAnPScpCisJcmV0dXJuIEZBSUw7CisKKyAgICArK2FyZzsKKyAgICAqcHAgPSAoaW50KShhcmcgLSBlYXAtPmNtZCk7CisgICAgYXJnID0gc2tpcF9jbWRfYXJnKGFyZywgRkFMU0UpOworICAgIGVhcC0+YXJnID0gc2tpcHdoaXRlKGFyZyk7CisgICAgKmFyZyA9IE5VTDsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAocHAgPT0gJmVhcC0+Zm9yY2VfZmYpCisgICAgeworI2VuZGlmCisJaWYgKGNoZWNrX2ZmX3ZhbHVlKGVhcC0+Y21kICsgZWFwLT5mb3JjZV9mZikgPT0gRkFJTCkKKwkgICAgcmV0dXJuIEZBSUw7CisjaWZkZWYgRkVBVF9NQllURQorICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIE1ha2UgJ2ZpbGVlbmNvZGluZycgbG93ZXIgY2FzZS4gKi8KKwlmb3IgKHAgPSBlYXAtPmNtZCArIGVhcC0+Zm9yY2VfZW5jOyAqcCAhPSBOVUw7ICsrcCkKKwkgICAgKnAgPSBUT0xPV0VSX0FTQygqcCk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiAiOmFiYnJldmlhdGUiIGFuZCBmcmllbmRzLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X2FiYnJldmlhdGUoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBkb19leG1hcChlYXAsIFRSVUUpOwkvKiBhbG1vc3QgdGhlIHNhbWUgYXMgbWFwcGluZyAqLworfQorCisvKgorICogIjptYXAiIGFuZCBmcmllbmRzLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X21hcChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIC8qCisgICAgICogSWYgd2UgYXJlIHNvdXJjaW5nIC5leHJjIG9yIC52aW1yYyBpbiBjdXJyZW50IGRpcmVjdG9yeSB3ZQorICAgICAqIHByaW50IHRoZSBtYXBwaW5ncyBmb3Igc2VjdXJpdHkgcmVhc29ucy4KKyAgICAgKi8KKyAgICBpZiAoc2VjdXJlKQorICAgIHsKKwlzZWN1cmUgPSAyOworCW1zZ19vdXR0cmFucyhlYXAtPmNtZCk7CisJbXNnX3B1dGNoYXIoJ1xuJyk7CisgICAgfQorICAgIGRvX2V4bWFwKGVhcCwgRkFMU0UpOworfQorCisvKgorICogIjp1bm1hcCIgYW5kIGZyaWVuZHMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfdW5tYXAoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBkb19leG1hcChlYXAsIEZBTFNFKTsKK30KKworLyoKKyAqICI6bWFwY2xlYXIiIGFuZCBmcmllbmRzLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X21hcGNsZWFyKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgbWFwX2NsZWFyKGVhcC0+Y21kLCBlYXAtPmFyZywgZWFwLT5mb3JjZWl0LCBGQUxTRSk7Cit9CisKKy8qCisgKiAiOmFiY2xlYXIiIGFuZCBmcmllbmRzLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X2FiY2xlYXIoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBtYXBfY2xlYXIoZWFwLT5jbWQsIGVhcC0+YXJnLCBUUlVFLCBUUlVFKTsKK30KKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIHN0YXRpYyB2b2lkCitleF9hdXRvY21kKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgLyoKKyAgICAgKiBEaXNhbGxvdyBhdXRvIGNvbW1hbmRzIGZyb20gLmV4cmMgYW5kIC52aW1yYyBpbiBjdXJyZW50CisgICAgICogZGlyZWN0b3J5IGZvciBzZWN1cml0eSByZWFzb25zLgorICAgICAqLworICAgIGlmIChzZWN1cmUpCisgICAgeworCXNlY3VyZSA9IDI7CisJZWFwLT5lcnJtc2cgPSBlX2N1cmRpcjsKKyAgICB9CisgICAgZWxzZSBpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2F1dG9jbWQpCisJZG9fYXV0b2NtZChlYXAtPmFyZywgZWFwLT5mb3JjZWl0KTsKKyAgICBlbHNlCisJZG9fYXVncm91cChlYXAtPmFyZywgZWFwLT5mb3JjZWl0KTsKK30KKworLyoKKyAqICI6ZG9hdXRvY21kIjogQXBwbHkgdGhlIGF1dG9tYXRpYyBjb21tYW5kcyB0byB0aGUgY3VycmVudCBidWZmZXIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfZG9hdXRvY21kKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgKHZvaWQpZG9fZG9hdXRvY21kKGVhcC0+YXJnLCBUUlVFKTsKKyAgICBkb19tb2RlbGluZXMoKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9MSVNUQ01EUworLyoKKyAqIDpbTl1idW5sb2FkWyFdIFtOXSBbYnVmbmFtZV0gdW5sb2FkIGJ1ZmZlcgorICogOltOXWJkZWxldGVbIV0gW05dIFtidWZuYW1lXSBkZWxldGUgYnVmZmVyIGZyb20gYnVmZmVyIGxpc3QKKyAqIDpbTl1id2lwZW91dFshXSBbTl0gW2J1Zm5hbWVdIGRlbGV0ZSBidWZmZXIgcmVhbGx5CisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfYnVubG9hZChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGVhcC0+ZXJybXNnID0gZG9fYnVmZGVsKAorCSAgICBlYXAtPmNtZGlkeCA9PSBDTURfYmRlbGV0ZSA/IERPQlVGX0RFTAorCQk6IGVhcC0+Y21kaWR4ID09IENNRF9id2lwZW91dCA/IERPQlVGX1dJUEUKKwkJOiBET0JVRl9VTkxPQUQsIGVhcC0+YXJnLAorCSAgICBlYXAtPmFkZHJfY291bnQsIChpbnQpZWFwLT5saW5lMSwgKGludCllYXAtPmxpbmUyLCBlYXAtPmZvcmNlaXQpOworfQorCisvKgorICogOltOXWJ1ZmZlciBbTl0JdG8gYnVmZmVyIE4KKyAqIDpbTl1zYnVmZmVyIFtOXQl0byBidWZmZXIgTgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X2J1ZmZlcihlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGlmICgqZWFwLT5hcmcpCisJZWFwLT5lcnJtc2cgPSBlX3RyYWlsaW5nOworICAgIGVsc2UKKyAgICB7CisJaWYgKGVhcC0+YWRkcl9jb3VudCA9PSAwKQkvKiBkZWZhdWx0IGlzIGN1cnJlbnQgYnVmZmVyICovCisJICAgIGdvdG9fYnVmZmVyKGVhcCwgRE9CVUZfQ1VSUkVOVCwgRk9SV0FSRCwgMCk7CisJZWxzZQorCSAgICBnb3RvX2J1ZmZlcihlYXAsIERPQlVGX0ZJUlNULCBGT1JXQVJELCAoaW50KWVhcC0+bGluZTIpOworICAgIH0KK30KKworLyoKKyAqIDpbTl1ibW9kaWZpZWQgW05dCXRvIG5leHQgbW9kLiBidWZmZXIKKyAqIDpbTl1zYm1vZGlmaWVkIFtOXQl0byBuZXh0IG1vZC4gYnVmZmVyCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfYm1vZGlmaWVkKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgZ290b19idWZmZXIoZWFwLCBET0JVRl9NT0QsIEZPUldBUkQsIChpbnQpZWFwLT5saW5lMik7Cit9CisKKy8qCisgKiA6W05dYm5leHQgW05dCXRvIG5leHQgYnVmZmVyCisgKiA6W05dc2JuZXh0IFtOXQlzcGxpdCBhbmQgdG8gbmV4dCBidWZmZXIKKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9ibmV4dChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGdvdG9fYnVmZmVyKGVhcCwgRE9CVUZfQ1VSUkVOVCwgRk9SV0FSRCwgKGludCllYXAtPmxpbmUyKTsKK30KKworLyoKKyAqIDpbTl1iTmV4dCBbTl0JdG8gcHJldmlvdXMgYnVmZmVyCisgKiA6W05dYnByZXZpb3VzIFtOXQl0byBwcmV2aW91cyBidWZmZXIKKyAqIDpbTl1zYk5leHQgW05dCXNwbGl0IGFuZCB0byBwcmV2aW91cyBidWZmZXIKKyAqIDpbTl1zYnByZXZpb3VzIFtOXQlzcGxpdCBhbmQgdG8gcHJldmlvdXMgYnVmZmVyCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfYnByZXZpb3VzKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgZ290b19idWZmZXIoZWFwLCBET0JVRl9DVVJSRU5ULCBCQUNLV0FSRCwgKGludCllYXAtPmxpbmUyKTsKK30KKworLyoKKyAqIDpicmV3aW5kCQl0byBmaXJzdCBidWZmZXIKKyAqIDpiZmlyc3QJCXRvIGZpcnN0IGJ1ZmZlcgorICogOnNicmV3aW5kCQlzcGxpdCBhbmQgdG8gZmlyc3QgYnVmZmVyCisgKiA6c2JmaXJzdAkJc3BsaXQgYW5kIHRvIGZpcnN0IGJ1ZmZlcgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X2JyZXdpbmQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBnb3RvX2J1ZmZlcihlYXAsIERPQlVGX0ZJUlNULCBGT1JXQVJELCAwKTsKK30KKworLyoKKyAqIDpibGFzdAkJdG8gbGFzdCBidWZmZXIKKyAqIDpzYmxhc3QJCXNwbGl0IGFuZCB0byBsYXN0IGJ1ZmZlcgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X2JsYXN0KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgZ290b19idWZmZXIoZWFwLCBET0JVRl9MQVNULCBCQUNLV0FSRCwgMCk7Cit9CisjZW5kaWYKKworICAgIGludAorZW5kc19leGNtZChjKQorICAgIGludAkgICAgYzsKK3sKKyAgICByZXR1cm4gKGMgPT0gTlVMIHx8IGMgPT0gJ3wnIHx8IGMgPT0gJyInIHx8IGMgPT0gJ1xuJyk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfU1lOX0hMKSB8fCBkZWZpbmVkKEZFQVRfU0VBUkNIX0VYVFJBKSB8fCBkZWZpbmVkKEZFQVRfRVZBTCkgXAorCXx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmV0dXJuIHRoZSBuZXh0IGNvbW1hbmQsIGFmdGVyIHRoZSBmaXJzdCAnfCcgb3IgJ1xuJy4KKyAqIFJldHVybiBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworICAgIGNoYXJfdSAqCitmaW5kX25leHRjbWQocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgd2hpbGUgKCpwICE9ICd8JyAmJiAqcCAhPSAnXG4nKQorICAgIHsKKwlpZiAoKnAgPT0gTlVMKQorCSAgICByZXR1cm4gTlVMTDsKKwkrK3A7CisgICAgfQorICAgIHJldHVybiAocCArIDEpOworfQorI2VuZGlmCisKKy8qCisgKiBDaGVjayBpZiAqcCBpcyBhIHNlcGFyYXRvciBiZXR3ZWVuIEV4IGNvbW1hbmRzLgorICogUmV0dXJuIE5VTEwgaWYgaXQgaXNuJ3QsIChwICsgMSkgaWYgaXQgaXMuCisgKi8KKyAgICBjaGFyX3UgKgorY2hlY2tfbmV4dGNtZChwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBwID0gc2tpcHdoaXRlKHApOworICAgIGlmICgqcCA9PSAnfCcgfHwgKnAgPT0gJ1xuJykKKwlyZXR1cm4gKHAgKyAxKTsKKyAgICBlbHNlCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiAtIGlmIHRoZXJlIGFyZSBtb3JlIGZpbGVzIHRvIGVkaXQKKyAqIC0gYW5kIHRoaXMgaXMgdGhlIGxhc3Qgd2luZG93CisgKiAtIGFuZCBmb3JjZWl0IG5vdCB1c2VkCisgKiAtIGFuZCBub3QgcmVwZWF0ZWQgdHdpY2Ugb24gYSByb3cKKyAqICAgIHJldHVybiBGQUlMIGFuZCBnaXZlIGVycm9yIG1lc3NhZ2UgaWYgJ21lc3NhZ2UnIFRSVUUKKyAqIHJldHVybiBPSyBvdGhlcndpc2UKKyAqLworICAgIHN0YXRpYyBpbnQKK2NoZWNrX21vcmUobWVzc2FnZSwgZm9yY2VpdCkKKyAgICBpbnQgbWVzc2FnZTsJICAgIC8qIHdoZW4gRkFMU0UgY2hlY2sgb25seSwgbm8gbWVzc2FnZXMgKi8KKyAgICBpbnQgZm9yY2VpdDsKK3sKKyAgICBpbnQJICAgIG4gPSBBUkdDT1VOVCAtIGN1cndpbi0+d19hcmdfaWR4IC0gMTsKKworICAgIGlmICghZm9yY2VpdCAmJiBvbmx5X29uZV93aW5kb3coKSAmJiBBUkdDT1VOVCA+IDEgJiYgIWFyZ19oYWRfbGFzdAorCQkJCQkJICAgJiYgbiA+PSAwICYmIHF1aXRtb3JlID09IDApCisgICAgeworCWlmIChtZXNzYWdlKQorCXsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCisJICAgIGlmICgocF9jb25maXJtIHx8IGNtZG1vZC5jb25maXJtKSAmJiBjdXJidWYtPmJfZm5hbWUgIT0gTlVMTCkKKwkgICAgeworCQljaGFyX3UJYnVmZltJT1NJWkVdOworCisJCWlmIChuID09IDEpCisJCSAgICBTVFJDUFkoYnVmZiwgXygiMSBtb3JlIGZpbGUgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIpKTsKKwkJZWxzZQorCQkgICAgc3ByaW50ZigoY2hhciAqKWJ1ZmYsCisJCQkgICAgICBfKCIlZCBtb3JlIGZpbGVzIHRvIGVkaXQuICBRdWl0IGFueXdheT8iKSwgbik7CisJCWlmICh2aW1fZGlhbG9nX3llc25vKFZJTV9RVUVTVElPTiwgTlVMTCwgYnVmZiwgMSkgPT0gVklNX1lFUykKKwkJICAgIHJldHVybiBPSzsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKyNlbmRpZgorCSAgICBpZiAobiA9PSAxKQorCQlFTVNHKF8oIkUxNzM6IDEgbW9yZSBmaWxlIHRvIGVkaXQiKSk7CisJICAgIGVsc2UKKwkJRU1TR04oXygiRTE3MzogJWxkIG1vcmUgZmlsZXMgdG8gZWRpdCIpLCBuKTsKKwkgICAgcXVpdG1vcmUgPSAyOwkgICAgLyogbmV4dCB0cnkgdG8gcXVpdCBpcyBhbGxvd2VkICovCisJfQorCXJldHVybiBGQUlMOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKyNpZmRlZiBGRUFUX0NNRExfQ09NUEwKKy8qCisgKiBGdW5jdGlvbiBnaXZlbiB0byBFeHBhbmRHZW5lcmljKCkgdG8gb2J0YWluIHRoZSBsaXN0IG9mIGNvbW1hbmQgbmFtZXMuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIGNoYXJfdSAqCitnZXRfY29tbWFuZF9uYW1lKHhwLCBpZHgpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGludAkJaWR4OworeworICAgIGlmIChpZHggPj0gKGludClDTURfU0laRSkKKyMgaWZkZWYgRkVBVF9VU1JfQ01EUworCXJldHVybiBnZXRfdXNlcl9jb21tYW5kX25hbWUoaWR4KTsKKyMgZWxzZQorCXJldHVybiBOVUxMOworIyBlbmRpZgorICAgIHJldHVybiBjbWRuYW1lc1tpZHhdLmNtZF9uYW1lOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfVVNSX0NNRFMpIHx8IGRlZmluZWQoUFJPVE8pCitzdGF0aWMgaW50CXVjX2FkZF9jb21tYW5kIF9fQVJHUygoY2hhcl91ICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sIGNoYXJfdSAqcmVwLCBsb25nIGFyZ3QsIGxvbmcgZGVmLCBpbnQgZmxhZ3MsIGludCBjb21wbCwgY2hhcl91ICpjb21wbF9hcmcsIGludCBmb3JjZSkpOworc3RhdGljIHZvaWQJdWNfbGlzdCBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKSk7CitzdGF0aWMgaW50CXVjX3NjYW5fYXR0ciBfX0FSR1MoKGNoYXJfdSAqYXR0ciwgc2l6ZV90IGxlbiwgbG9uZyAqYXJndCwgbG9uZyAqZGVmLCBpbnQgKmZsYWdzLCBpbnQgKmNvbXBsLCBjaGFyX3UgKipjb21wbF9hcmcpKTsKK3N0YXRpYyBjaGFyX3UJKnVjX3NwbGl0X2FyZ3MgX19BUkdTKChjaGFyX3UgKmFyZywgc2l6ZV90ICpsZW5wKSk7CitzdGF0aWMgc2l6ZV90CXVjX2NoZWNrX2NvZGUgX19BUkdTKChjaGFyX3UgKmNvZGUsIHNpemVfdCBsZW4sIGNoYXJfdSAqYnVmLCB1Y21kX1QgKmNtZCwgZXhhcmdfVCAqZWFwLCBjaGFyX3UgKipzcGxpdF9idWYsIHNpemVfdCAqc3BsaXRfbGVuKSk7CisKKyAgICBzdGF0aWMgaW50Cit1Y19hZGRfY29tbWFuZChuYW1lLCBuYW1lX2xlbiwgcmVwLCBhcmd0LCBkZWYsIGZsYWdzLCBjb21wbCwgY29tcGxfYXJnLCBmb3JjZSkKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgc2l6ZV90CW5hbWVfbGVuOworICAgIGNoYXJfdQkqcmVwOworICAgIGxvbmcJYXJndDsKKyAgICBsb25nCWRlZjsKKyAgICBpbnQJCWZsYWdzOworICAgIGludAkJY29tcGw7CisgICAgY2hhcl91CSpjb21wbF9hcmc7CisgICAgaW50CQlmb3JjZTsKK3sKKyAgICB1Y21kX1QJKmNtZCA9IE5VTEw7CisgICAgY2hhcl91CSpwOworICAgIGludAkJaTsKKyAgICBpbnQJCWNtcCA9IDE7CisgICAgY2hhcl91CSpyZXBfYnVmID0gTlVMTDsKKyAgICBnYXJyYXlfVAkqZ2FwOworCisgICAgcmVwbGFjZV90ZXJtY29kZXMocmVwLCAmcmVwX2J1ZiwgRkFMU0UsIEZBTFNFKTsKKyAgICBpZiAocmVwX2J1ZiA9PSBOVUxMKQorICAgIHsKKwkvKiBDYW4ndCByZXBsYWNlIHRlcm1jb2RlcyAtIHRyeSB1c2luZyB0aGUgc3RyaW5nIGFzIGlzICovCisJcmVwX2J1ZiA9IHZpbV9zdHJzYXZlKHJlcCk7CisKKwkvKiBHaXZlIHVwIGlmIG91dCBvZiBtZW1vcnkgKi8KKwlpZiAocmVwX2J1ZiA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBnZXQgYWRkcmVzcyBvZiBncm93YXJyYXk6IGdsb2JhbCBvciBpbiBjdXJidWYgKi8KKyAgICBpZiAoZmxhZ3MgJiBVQ19CVUZGRVIpCisgICAgeworCWdhcCA9ICZjdXJidWYtPmJfdWNtZHM7CisJaWYgKGdhcC0+Z2FfaXRlbXNpemUgPT0gMCkKKwkgICAgZ2FfaW5pdDIoZ2FwLCAoaW50KXNpemVvZih1Y21kX1QpLCA0KTsKKyAgICB9CisgICAgZWxzZQorCWdhcCA9ICZ1Y21kczsKKworICAgIC8qIFNlYXJjaCBmb3IgdGhlIGNvbW1hbmQgaW4gdGhlIGFscmVhZHkgZGVmaW5lZCBjb21tYW5kcy4gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgZ2FwLT5nYV9sZW47ICsraSkKKyAgICB7CisJc2l6ZV90IGxlbjsKKworCWNtZCA9IFVTRVJfQ01EX0dBKGdhcCwgaSk7CisJbGVuID0gU1RSTEVOKGNtZC0+dWNfbmFtZSk7CisJY21wID0gU1RSTkNNUChuYW1lLCBjbWQtPnVjX25hbWUsIG5hbWVfbGVuKTsKKwlpZiAoY21wID09IDApCisJeworCSAgICBpZiAobmFtZV9sZW4gPCBsZW4pCisJCWNtcCA9IC0xOworCSAgICBlbHNlIGlmIChuYW1lX2xlbiA+IGxlbikKKwkJY21wID0gMTsKKwl9CisKKwlpZiAoY21wID09IDApCisJeworCSAgICBpZiAoIWZvcmNlKQorCSAgICB7CisJCUVNU0coXygiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogYWRkICEgdG8gcmVwbGFjZSBpdCIpKTsKKwkJZ290byBmYWlsOworCSAgICB9CisKKwkgICAgdmltX2ZyZWUoY21kLT51Y19yZXApOworCSAgICBjbWQtPnVjX3JlcCA9IDA7CisJICAgIGJyZWFrOworCX0KKworCS8qIFN0b3AgYXMgc29vbiBhcyB3ZSBwYXNzIHRoZSBuYW1lIHRvIGFkZCAqLworCWlmIChjbXAgPCAwKQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBFeHRlbmQgdGhlIGFycmF5IHVubGVzcyB3ZSdyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgY29tbWFuZCAqLworICAgIGlmIChjbXAgIT0gMCkKKyAgICB7CisJaWYgKGdhX2dyb3coZ2FwLCAxKSAhPSBPSykKKwkgICAgZ290byBmYWlsOworCWlmICgocCA9IHZpbV9zdHJuc2F2ZShuYW1lLCAoaW50KW5hbWVfbGVuKSkgPT0gTlVMTCkKKwkgICAgZ290byBmYWlsOworCisJY21kID0gVVNFUl9DTURfR0EoZ2FwLCBpKTsKKwltY2hfbWVtbW92ZShjbWQgKyAxLCBjbWQsIChnYXAtPmdhX2xlbiAtIGkpICogc2l6ZW9mKHVjbWRfVCkpOworCisJKytnYXAtPmdhX2xlbjsKKwktLWdhcC0+Z2Ffcm9vbTsKKworCWNtZC0+dWNfbmFtZSA9IHA7CisgICAgfQorCisgICAgY21kLT51Y19yZXAgPSByZXBfYnVmOworICAgIGNtZC0+dWNfYXJndCA9IGFyZ3Q7CisgICAgY21kLT51Y19kZWYgPSBkZWY7CisgICAgY21kLT51Y19jb21wbCA9IGNvbXBsOworI2lmZGVmIEZFQVRfRVZBTAorICAgIGNtZC0+dWNfc2NyaXB0SUQgPSBjdXJyZW50X1NJRDsKKyMgaWZkZWYgRkVBVF9DTURMX0NPTVBMCisgICAgY21kLT51Y19jb21wbF9hcmcgPSBjb21wbF9hcmc7CisjIGVuZGlmCisjZW5kaWYKKworICAgIHJldHVybiBPSzsKKworZmFpbDoKKyAgICB2aW1fZnJlZShyZXBfYnVmKTsKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgJiYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpCisgICAgdmltX2ZyZWUoY29tcGxfYXJnKTsKKyNlbmRpZgorICAgIHJldHVybiBGQUlMOworfQorCisvKgorICogTGlzdCBvZiBuYW1lcyBmb3IgY29tcGxldGlvbiBmb3IgIjpjb21tYW5kIiB3aXRoIHRoZSBFWFBBTkRfIGZsYWcuCisgKiBNdXN0IGJlIGFscGhhYmV0aWNhbCBmb3IgY29tcGxldGlvbi4KKyAqLworc3RhdGljIHN0cnVjdAoreworICAgIGludAkgICAgZXhwYW5kOworICAgIGNoYXIgICAgKm5hbWU7Cit9IGNvbW1hbmRfY29tcGxldGVbXSA9Cit7CisgICAge0VYUEFORF9BVUdST1VQLCAiYXVncm91cCJ9LAorICAgIHtFWFBBTkRfQlVGRkVSUywgImJ1ZmZlciJ9LAorICAgIHtFWFBBTkRfQ09NTUFORFMsICJjb21tYW5kIn0sCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpICYmIGRlZmluZWQoRkVBVF9DTURMX0NPTVBMKQorICAgIHtFWFBBTkRfVVNFUl9ERUZJTkVELCAiY3VzdG9tIn0sCisjZW5kaWYKKyAgICB7RVhQQU5EX0RJUkVDVE9SSUVTLCAiZGlyIn0sCisgICAge0VYUEFORF9FTlZfVkFSUywgImVudmlyb25tZW50In0sCisgICAge0VYUEFORF9FVkVOVFMsICJldmVudCJ9LAorICAgIHtFWFBBTkRfRVhQUkVTU0lPTiwgImV4cHJlc3Npb24ifSwKKyAgICB7RVhQQU5EX0ZJTEVTLCAiZmlsZSJ9LAorICAgIHtFWFBBTkRfRlVOQ1RJT05TLCAiZnVuY3Rpb24ifSwKKyAgICB7RVhQQU5EX0hFTFAsICJoZWxwIn0sCisgICAge0VYUEFORF9ISUdITElHSFQsICJoaWdobGlnaHQifSwKKyAgICB7RVhQQU5EX01BUFBJTkdTLCAibWFwcGluZyJ9LAorICAgIHtFWFBBTkRfTUVOVVMsICJtZW51In0sCisgICAge0VYUEFORF9TRVRUSU5HUywgIm9wdGlvbiJ9LAorICAgIHtFWFBBTkRfVEFHUywgInRhZyJ9LAorICAgIHtFWFBBTkRfVEFHU19MSVNURklMRVMsICJ0YWdfbGlzdGZpbGVzIn0sCisgICAge0VYUEFORF9VU0VSX1ZBUlMsICJ2YXIifSwKKyAgICB7MCwgTlVMTH0KK307CisKKyAgICBzdGF0aWMgdm9pZAordWNfbGlzdChuYW1lLCBuYW1lX2xlbikKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgc2l6ZV90CW5hbWVfbGVuOworeworICAgIGludAkJaSwgajsKKyAgICBpbnQJCWZvdW5kID0gRkFMU0U7CisgICAgdWNtZF9UCSpjbWQ7CisgICAgaW50CQlsZW47CisgICAgbG9uZwlhOworICAgIGdhcnJheV9UCSpnYXA7CisKKyAgICBnYXAgPSAmY3VyYnVmLT5iX3VjbWRzOworICAgIGZvciAoOzspCisgICAgeworCWZvciAoaSA9IDA7IGkgPCBnYXAtPmdhX2xlbjsgKytpKQorCXsKKwkgICAgY21kID0gVVNFUl9DTURfR0EoZ2FwLCBpKTsKKwkgICAgYSA9IGNtZC0+dWNfYXJndDsKKworCSAgICAvKiBTa2lwIGNvbW1hbmRzIHdoaWNoIGRvbid0IG1hdGNoIHRoZSByZXF1ZXN0ZWQgcHJlZml4ICovCisJICAgIGlmIChTVFJOQ01QKG5hbWUsIGNtZC0+dWNfbmFtZSwgbmFtZV9sZW4pICE9IDApCisJCWNvbnRpbnVlOworCisJICAgIC8qIFB1dCBvdXQgdGhlIHRpdGxlIGZpcnN0IHRpbWUgKi8KKwkgICAgaWYgKCFmb3VuZCkKKwkJTVNHX1BVVFNfVElUTEUoXygiXG4gICAgTmFtZSAgICAgICAgQXJncyBSYW5nZSBDb21wbGV0ZSAgRGVmaW5pdGlvbiIpKTsKKwkgICAgZm91bmQgPSBUUlVFOworCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKwkgICAgaWYgKGdvdF9pbnQpCisJCWJyZWFrOworCisJICAgIC8qIFNwZWNpYWwgY2FzZXMgKi8KKwkgICAgbXNnX3B1dGNoYXIoYSAmIEJBTkcgPyAnIScgOiAnICcpOworCSAgICBtc2dfcHV0Y2hhcihhICYgUkVHU1RSID8gJyInIDogJyAnKTsKKwkgICAgbXNnX3B1dGNoYXIoZ2FwICE9ICZ1Y21kcyA/ICdiJyA6ICcgJyk7CisJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisKKwkgICAgbXNnX291dHRyYW5zX2F0dHIoY21kLT51Y19uYW1lLCBobF9hdHRyKEhMRl9EKSk7CisJICAgIGxlbiA9IChpbnQpU1RSTEVOKGNtZC0+dWNfbmFtZSkgKyA0OworCisJICAgIGRvIHsKKwkJbXNnX3B1dGNoYXIoJyAnKTsKKwkJKytsZW47CisJICAgIH0gd2hpbGUgKGxlbiA8IDE2KTsKKworCSAgICBsZW4gPSAwOworCisJICAgIC8qIEFyZ3VtZW50cyAqLworCSAgICBzd2l0Y2ggKChpbnQpKGEgJiAoRVhUUkF8Tk9TUEN8TkVFREFSRykpKQorCSAgICB7CisJICAgIGNhc2UgMDoJCQlJT2J1ZmZbbGVuKytdID0gJzAnOyBicmVhazsKKwkgICAgY2FzZSAoRVhUUkEpOgkJSU9idWZmW2xlbisrXSA9ICcqJzsgYnJlYWs7CisJICAgIGNhc2UgKEVYVFJBfE5PU1BDKToJCUlPYnVmZltsZW4rK10gPSAnPyc7IGJyZWFrOworCSAgICBjYXNlIChFWFRSQXxORUVEQVJHKToJSU9idWZmW2xlbisrXSA9ICcrJzsgYnJlYWs7CisJICAgIGNhc2UgKEVYVFJBfE5PU1BDfE5FRURBUkcpOiBJT2J1ZmZbbGVuKytdID0gJzEnOyBicmVhazsKKwkgICAgfQorCisJICAgIGRvIHsKKwkJSU9idWZmW2xlbisrXSA9ICcgJzsKKwkgICAgfSB3aGlsZSAobGVuIDwgNSk7CisKKwkgICAgLyogUmFuZ2UgKi8KKwkgICAgaWYgKGEgJiAoUkFOR0V8Q09VTlQpKQorCSAgICB7CisJCWlmIChhICYgQ09VTlQpCisJCXsKKwkJICAgIC8qIC1jb3VudD1OICovCisJCSAgICBzcHJpbnRmKChjaGFyICopSU9idWZmICsgbGVuLCAiJWxkYyIsIGNtZC0+dWNfZGVmKTsKKwkJICAgIGxlbiArPSAoaW50KVNUUkxFTihJT2J1ZmYgKyBsZW4pOworCQl9CisJCWVsc2UgaWYgKGEgJiBERkxBTEwpCisJCSAgICBJT2J1ZmZbbGVuKytdID0gJyUnOworCQllbHNlIGlmIChjbWQtPnVjX2RlZiA+PSAwKQorCQl7CisJCSAgICAvKiAtcmFuZ2U9TiAqLworCQkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiArIGxlbiwgIiVsZCIsIGNtZC0+dWNfZGVmKTsKKwkJICAgIGxlbiArPSAoaW50KVNUUkxFTihJT2J1ZmYgKyBsZW4pOworCQl9CisJCWVsc2UKKwkJICAgIElPYnVmZltsZW4rK10gPSAnLic7CisJICAgIH0KKworCSAgICBkbyB7CisJCUlPYnVmZltsZW4rK10gPSAnICc7CisJICAgIH0gd2hpbGUgKGxlbiA8IDExKTsKKworCSAgICAvKiBDb21wbGV0aW9uICovCisJICAgIGZvciAoaiA9IDA7IGNvbW1hbmRfY29tcGxldGVbal0uZXhwYW5kICE9IDA7ICsraikKKwkJaWYgKGNvbW1hbmRfY29tcGxldGVbal0uZXhwYW5kID09IGNtZC0+dWNfY29tcGwpCisJCXsKKwkJICAgIFNUUkNQWShJT2J1ZmYgKyBsZW4sIGNvbW1hbmRfY29tcGxldGVbal0ubmFtZSk7CisJCSAgICBsZW4gKz0gKGludClTVFJMRU4oSU9idWZmICsgbGVuKTsKKwkJICAgIGJyZWFrOworCQl9CisKKwkgICAgZG8geworCQlJT2J1ZmZbbGVuKytdID0gJyAnOworCSAgICB9IHdoaWxlIChsZW4gPCAyMSk7CisKKwkgICAgSU9idWZmW2xlbl0gPSAnXDAnOworCSAgICBtc2dfb3V0dHJhbnMoSU9idWZmKTsKKworCSAgICBtc2dfb3V0dHJhbnNfc3BlY2lhbChjbWQtPnVjX3JlcCwgRkFMU0UpOworCSAgICBvdXRfZmx1c2goKTsKKwkgICAgdWlfYnJlYWtjaGVjaygpOworCSAgICBpZiAoZ290X2ludCkKKwkJYnJlYWs7CisJfQorCWlmIChnYXAgPT0gJnVjbWRzIHx8IGkgPCBnYXAtPmdhX2xlbikKKwkgICAgYnJlYWs7CisJZ2FwID0gJnVjbWRzOworICAgIH0KKworICAgIGlmICghZm91bmQpCisJTVNHKF8oIk5vIHVzZXItZGVmaW5lZCBjb21tYW5kcyBmb3VuZCIpKTsKK30KKworICAgIHN0YXRpYyBjaGFyX3UgKgordWNfZnVuX2NtZCgpCit7CisgICAgc3RhdGljIGNoYXJfdSBmY21kW10gPSB7MHg4NCwgMHhhZiwgMHg2MCwgMHhiOSwgMHhhZiwgMHhiNSwgMHg2MCwgMHhhNCwKKwkJCSAgICAweGE1LCAweGFkLCAweGExLCAweGFlLCAweGE0LCAweDYwLCAweGExLCAweDYwLAorCQkJICAgIDB4YjMsIDB4YTgsIDB4YjIsIDB4YjUsIDB4YTIsIDB4YTIsIDB4YTUsIDB4YjIsCisJCQkgICAgMHhiOSwgMHg3ZiwgMH07CisgICAgaW50CQlpOworCisgICAgZm9yIChpID0gMDsgZmNtZFtpXTsgKytpKQorCUlPYnVmZltpXSA9IGZjbWRbaV0gLSAweDQwOworICAgIElPYnVmZltpXSA9IDA7CisgICAgcmV0dXJuIElPYnVmZjsKK30KKworICAgIHN0YXRpYyBpbnQKK3VjX3NjYW5fYXR0cihhdHRyLCBsZW4sIGFyZ3QsIGRlZiwgZmxhZ3MsIGNvbXBsLCBjb21wbF9hcmcpCisgICAgY2hhcl91CSphdHRyOworICAgIHNpemVfdAlsZW47CisgICAgbG9uZwkqYXJndDsKKyAgICBsb25nCSpkZWY7CisgICAgaW50CQkqZmxhZ3M7CisgICAgaW50CQkqY29tcGw7CisgICAgY2hhcl91CSoqY29tcGxfYXJnOworeworICAgIGNoYXJfdQkqcDsKKworICAgIGlmIChsZW4gPT0gMCkKKyAgICB7CisJRU1TRyhfKCJFMTc1OiBObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIikpOworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIC8qIEZpcnN0LCB0cnkgdGhlIHNpbXBsZSBhdHRyaWJ1dGVzIChubyBhcmd1bWVudHMpICovCisgICAgaWYgKFNUUk5JQ01QKGF0dHIsICJiYW5nIiwgbGVuKSA9PSAwKQorCSphcmd0IHw9IEJBTkc7CisgICAgZWxzZSBpZiAoU1RSTklDTVAoYXR0ciwgImJ1ZmZlciIsIGxlbikgPT0gMCkKKwkqZmxhZ3MgfD0gVUNfQlVGRkVSOworICAgIGVsc2UgaWYgKFNUUk5JQ01QKGF0dHIsICJyZWdpc3RlciIsIGxlbikgPT0gMCkKKwkqYXJndCB8PSBSRUdTVFI7CisgICAgZWxzZSBpZiAoU1RSTklDTVAoYXR0ciwgImJhciIsIGxlbikgPT0gMCkKKwkqYXJndCB8PSBUUkxCQVI7CisgICAgZWxzZQorICAgIHsKKwlpbnQJaTsKKwljaGFyX3UJKnZhbCA9IE5VTEw7CisJc2l6ZV90CXZhbGxlbiA9IDA7CisJc2l6ZV90CWF0dHJsZW4gPSBsZW47CisKKwkvKiBMb29rIGZvciB0aGUgYXR0cmlidXRlIG5hbWUgLSB3aGljaCBpcyB0aGUgcGFydCBiZWZvcmUgYW55ICc9JyAqLworCWZvciAoaSA9IDA7IGkgPCAoaW50KWxlbjsgKytpKQorCXsKKwkgICAgaWYgKGF0dHJbaV0gPT0gJz0nKQorCSAgICB7CisJCXZhbCA9ICZhdHRyW2kgKyAxXTsKKwkJdmFsbGVuID0gbGVuIC0gaSAtIDE7CisJCWF0dHJsZW4gPSBpOworCQlicmVhazsKKwkgICAgfQorCX0KKworCWlmIChTVFJOSUNNUChhdHRyLCAibmFyZ3MiLCBhdHRybGVuKSA9PSAwKQorCXsKKwkgICAgaWYgKHZhbGxlbiA9PSAxKQorCSAgICB7CisJCWlmICgqdmFsID09ICcwJykKKwkJICAgIC8qIERvIG5vdGhpbmcgLSB0aGlzIGlzIHRoZSBkZWZhdWx0ICovOworCQllbHNlIGlmICgqdmFsID09ICcxJykKKwkJICAgICphcmd0IHw9IChFWFRSQSB8IE5PU1BDIHwgTkVFREFSRyk7CisJCWVsc2UgaWYgKCp2YWwgPT0gJyonKQorCQkgICAgKmFyZ3QgfD0gRVhUUkE7CisJCWVsc2UgaWYgKCp2YWwgPT0gJz8nKQorCQkgICAgKmFyZ3QgfD0gKEVYVFJBIHwgTk9TUEMpOworCQllbHNlIGlmICgqdmFsID09ICcrJykKKwkJICAgICphcmd0IHw9IChFWFRSQSB8IE5FRURBUkcpOworCQllbHNlCisJCSAgICBnb3RvIHdyb25nX25hcmdzOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeword3JvbmdfbmFyZ3M6CisJCUVNU0coXygiRTE3NjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIikpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCX0KKwllbHNlIGlmIChTVFJOSUNNUChhdHRyLCAicmFuZ2UiLCBhdHRybGVuKSA9PSAwKQorCXsKKwkgICAgKmFyZ3QgfD0gUkFOR0U7CisJICAgIGlmICh2YWxsZW4gPT0gMSAmJiAqdmFsID09ICclJykKKwkJKmFyZ3QgfD0gREZMQUxMOworCSAgICBlbHNlIGlmICh2YWwgIT0gTlVMTCkKKwkgICAgeworCQlwID0gdmFsOworCQlpZiAoKmRlZiA+PSAwKQorCQl7Cit0d29fY291bnQ6CisJCSAgICBFTVNHKF8oIkUxNzc6IENvdW50IGNhbm5vdCBiZSBzcGVjaWZpZWQgdHdpY2UiKSk7CisJCSAgICByZXR1cm4gRkFJTDsKKwkJfQorCisJCSpkZWYgPSBnZXRkaWdpdHMoJnApOworCQkqYXJndCB8PSAoWkVST1IgfCBOT1RBRFIpOworCisJCWlmIChwICE9IHZhbCArIHZhbGxlbiB8fCB2YWxsZW4gPT0gMCkKKwkJeworaW52YWxpZF9jb3VudDoKKwkJICAgIEVNU0coXygiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIpKTsKKwkJICAgIHJldHVybiBGQUlMOworCQl9CisJICAgIH0KKwl9CisJZWxzZSBpZiAoU1RSTklDTVAoYXR0ciwgImNvdW50IiwgYXR0cmxlbikgPT0gMCkKKwl7CisJICAgICphcmd0IHw9IChDT1VOVCB8IFpFUk9SIHwgTk9UQURSKTsKKworCSAgICBpZiAodmFsICE9IE5VTEwpCisJICAgIHsKKwkJcCA9IHZhbDsKKwkJaWYgKCpkZWYgPj0gMCkKKwkJICAgIGdvdG8gdHdvX2NvdW50OworCisJCSpkZWYgPSBnZXRkaWdpdHMoJnApOworCisJCWlmIChwICE9IHZhbCArIHZhbGxlbikKKwkJICAgIGdvdG8gaW52YWxpZF9jb3VudDsKKwkgICAgfQorCisJICAgIGlmICgqZGVmIDwgMCkKKwkJKmRlZiA9IDA7CisJfQorCWVsc2UgaWYgKFNUUk5JQ01QKGF0dHIsICJjb21wbGV0ZSIsIGF0dHJsZW4pID09IDApCisJeworCSAgICBjaGFyX3UJKmFyZyA9IE5VTEw7CisJICAgIHNpemVfdAlhcmdsZW4gPSAwOworCisJICAgIGlmICh2YWwgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKF8oIkUxNzk6IGFyZ3VtZW50IHJlcXVpcmVkIGZvciBjb21wbGV0ZSIpKTsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKwkgICAgLyogTG9vayBmb3IgYW55IGFyZ3VtZW50IHBhcnQgLSB3aGljaCBpcyB0aGUgcGFydCBhZnRlciBhbnkgJywnICovCisJICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KXZhbGxlbjsgKytpKQorCSAgICB7CisJCWlmICh2YWxbaV0gPT0gJywnKQorCQl7CisJCSAgICBhcmcgPSAmdmFsW2kgKyAxXTsKKwkJICAgIGFyZ2xlbiA9IHZhbGxlbiAtIGkgLSAxOworCQkgICAgdmFsbGVuID0gaTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKworCSAgICBmb3IgKGkgPSAwOyBjb21tYW5kX2NvbXBsZXRlW2ldLmV4cGFuZCAhPSAwOyArK2kpCisJICAgIHsKKwkJaWYgKFNUUkxFTihjb21tYW5kX2NvbXBsZXRlW2ldLm5hbWUpID09IHZhbGxlbgorCQkJJiYgU1RSTkNNUCh2YWwsIGNvbW1hbmRfY29tcGxldGVbaV0ubmFtZSwgdmFsbGVuKSA9PSAwKQorCQl7CisJCSAgICAqY29tcGwgPSBjb21tYW5kX2NvbXBsZXRlW2ldLmV4cGFuZDsKKwkJICAgIGlmIChjb21tYW5kX2NvbXBsZXRlW2ldLmV4cGFuZCA9PSBFWFBBTkRfQlVGRkVSUykKKwkJCSphcmd0IHw9IEJVRk5BTUU7CisJCSAgICBlbHNlIGlmIChjb21tYW5kX2NvbXBsZXRlW2ldLmV4cGFuZCA9PSBFWFBBTkRfRElSRUNUT1JJRVMKKwkJCSAgICB8fCBjb21tYW5kX2NvbXBsZXRlW2ldLmV4cGFuZCA9PSBFWFBBTkRfRklMRVMpCisJCQkqYXJndCB8PSBYRklMRTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKworCSAgICBpZiAoY29tbWFuZF9jb21wbGV0ZVtpXS5leHBhbmQgPT0gMCkKKwkgICAgeworCQlFTVNHMihfKCJFMTgwOiBJbnZhbGlkIGNvbXBsZXRlIHZhbHVlOiAlcyIpLCB2YWwpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorI2lmIGRlZmluZWQoRkVBVF9FVkFMKSAmJiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkKKwkgICAgaWYgKCpjb21wbCAhPSBFWFBBTkRfVVNFUl9ERUZJTkVEICYmIGFyZyAhPSBOVUxMKQorI2Vsc2UKKwkgICAgaWYgKGFyZyAhPSBOVUxMKQorI2VuZGlmCisJICAgIHsKKwkJRU1TRyhfKCJFNDY4OiBDb21wbGV0aW9uIGFyZ3VtZW50IG9ubHkgYWxsb3dlZCBmb3IgY3VzdG9tIGNvbXBsZXRpb24iKSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisjaWYgZGVmaW5lZChGRUFUX0VWQUwpICYmIGRlZmluZWQoRkVBVF9DTURMX0NPTVBMKQorCSAgICBpZiAoKmNvbXBsID09IEVYUEFORF9VU0VSX0RFRklORUQgJiYgYXJnID09IE5VTEwpCisJICAgIHsKKwkJRU1TRyhfKCJFNDY3OiBDdXN0b20gY29tcGxldGlvbiByZXF1aXJlcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IikpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICBpZiAoYXJnICE9IE5VTEwpCisJCSpjb21wbF9hcmcgPSB2aW1fc3RybnNhdmUoYXJnLCAoaW50KWFyZ2xlbik7CisjZW5kaWYKKwl9CisJZWxzZQorCXsKKwkgICAgY2hhcl91IGNoID0gYXR0cltsZW5dOworCSAgICBhdHRyW2xlbl0gPSAnXDAnOworCSAgICBFTVNHMihfKCJFMTgxOiBJbnZhbGlkIGF0dHJpYnV0ZTogJXMiKSwgYXR0cik7CisJICAgIGF0dHJbbGVuXSA9IGNoOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCisgICAgc3RhdGljIHZvaWQKK2V4X2NvbW1hbmQoZWFwKQorICAgIGV4YXJnX1QgICAqZWFwOworeworICAgIGNoYXJfdSAgKm5hbWU7CisgICAgY2hhcl91ICAqZW5kOworICAgIGNoYXJfdSAgKnA7CisgICAgbG9uZyAgICBhcmd0ID0gMDsKKyAgICBsb25nICAgIGRlZiA9IC0xOworICAgIGludAkgICAgZmxhZ3MgPSAwOworICAgIGludAkgICAgY29tcGwgPSBFWFBBTkRfTk9USElORzsKKyAgICBjaGFyX3UgICpjb21wbF9hcmcgPSBOVUxMOworICAgIGludAkgICAgaGFzX2F0dHIgPSAoZWFwLT5hcmdbMF0gPT0gJy0nKTsKKworICAgIHAgPSBlYXAtPmFyZzsKKworICAgIC8qIENoZWNrIGZvciBhdHRyaWJ1dGVzICovCisgICAgd2hpbGUgKCpwID09ICctJykKKyAgICB7CisJKytwOworCWVuZCA9IHNraXB0b3doaXRlKHApOworCWlmICh1Y19zY2FuX2F0dHIocCwgZW5kIC0gcCwgJmFyZ3QsICZkZWYsICZmbGFncywgJmNvbXBsLCAmY29tcGxfYXJnKQorCQk9PSBGQUlMKQorCSAgICByZXR1cm47CisJcCA9IHNraXB3aGl0ZShlbmQpOworICAgIH0KKworICAgIC8qIEdldCB0aGUgbmFtZSAoaWYgYW55KSBhbmQgc2tpcCB0byB0aGUgZm9sbG93aW5nIGFyZ3VtZW50ICovCisgICAgbmFtZSA9IHA7CisgICAgaWYgKEFTQ0lJX0lTQUxQSEEoKnApKQorCXdoaWxlIChBU0NJSV9JU0FMTlVNKCpwKSkKKwkgICAgKytwOworICAgIGlmICghZW5kc19leGNtZCgqcCkgJiYgIXZpbV9pc3doaXRlKCpwKSkKKyAgICB7CisJRU1TRyhfKCJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIpKTsKKwlyZXR1cm47CisgICAgfQorICAgIGVuZCA9IHA7CisKKyAgICAvKiBJZiB0aGVyZSBpcyBub3RoaW5nIGFmdGVyIHRoZSBuYW1lLCBhbmQgbm8gYXR0cmlidXRlcyB3ZXJlIHNwZWNpZmllZCwKKyAgICAgKiB3ZSBhcmUgbGlzdGluZyBjb21tYW5kcworICAgICAqLworICAgIHAgPSBza2lwd2hpdGUoZW5kKTsKKyAgICBpZiAoIWhhc19hdHRyICYmIGVuZHNfZXhjbWQoKnApKQorICAgIHsKKwl1Y19saXN0KG5hbWUsIGVuZCAtIG5hbWUpOworICAgIH0KKyAgICBlbHNlIGlmICghQVNDSUlfSVNVUFBFUigqbmFtZSkpCisgICAgeworCUVNU0coXygiRTE4MzogVXNlciBkZWZpbmVkIGNvbW1hbmRzIG11c3Qgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIikpOworCXJldHVybjsKKyAgICB9CisgICAgZWxzZQorCXVjX2FkZF9jb21tYW5kKG5hbWUsIGVuZCAtIG5hbWUsIHAsIGFyZ3QsIGRlZiwgZmxhZ3MsIGNvbXBsLCBjb21wbF9hcmcsCisJCQkJCQkJCWVhcC0+Zm9yY2VpdCk7Cit9CisKKy8qCisgKiAiOmNvbWNsZWFyIgorICovCisvKkFSR1NVU0VEKi8KKy8qCisgKiBDbGVhciBhbGwgdXNlciBjb21tYW5kcywgZ2xvYmFsIGFuZCBmb3IgY3VycmVudCBidWZmZXIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfY29tY2xlYXIoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICB1Y19jbGVhcigmdWNtZHMpOworICAgIHVjX2NsZWFyKCZjdXJidWYtPmJfdWNtZHMpOworfQorCisvKgorICogQ2xlYXIgYWxsIHVzZXIgY29tbWFuZHMgZm9yICJnYXAiLgorICovCisgICAgdm9pZAordWNfY2xlYXIoZ2FwKQorICAgIGdhcnJheV9UCSpnYXA7Cit7CisgICAgaW50CQlpOworICAgIHVjbWRfVAkqY21kOworCisgICAgZm9yIChpID0gMDsgaSA8IGdhcC0+Z2FfbGVuOyArK2kpCisgICAgeworCWNtZCA9IFVTRVJfQ01EX0dBKGdhcCwgaSk7CisJdmltX2ZyZWUoY21kLT51Y19uYW1lKTsKKwl2aW1fZnJlZShjbWQtPnVjX3JlcCk7CisjIGlmIGRlZmluZWQoRkVBVF9FVkFMKSAmJiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkKKwl2aW1fZnJlZShjbWQtPnVjX2NvbXBsX2FyZyk7CisjIGVuZGlmCisgICAgfQorICAgIGdhX2NsZWFyKGdhcCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZXhfZGVsY29tbWFuZChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJaSA9IDA7CisgICAgdWNtZF9UCSpjbWQgPSBOVUxMOworICAgIGludAkJY21wID0gLTE7CisgICAgZ2FycmF5X1QJKmdhcDsKKworICAgIGdhcCA9ICZjdXJidWYtPmJfdWNtZHM7CisgICAgZm9yICg7OykKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IGdhcC0+Z2FfbGVuOyArK2kpCisJeworCSAgICBjbWQgPSBVU0VSX0NNRF9HQShnYXAsIGkpOworCSAgICBjbXAgPSBTVFJDTVAoZWFwLT5hcmcsIGNtZC0+dWNfbmFtZSk7CisJICAgIGlmIChjbXAgPD0gMCkKKwkJYnJlYWs7CisJfQorCWlmIChnYXAgPT0gJnVjbWRzIHx8IGNtcCA9PSAwKQorCSAgICBicmVhazsKKwlnYXAgPSAmdWNtZHM7CisgICAgfQorCisgICAgaWYgKGNtcCAhPSAwKQorICAgIHsKKwlFTVNHMihfKCJFMTg0OiBObyBzdWNoIHVzZXItZGVmaW5lZCBjb21tYW5kOiAlcyIpLCBlYXAtPmFyZyk7CisJcmV0dXJuOworICAgIH0KKworICAgIHZpbV9mcmVlKGNtZC0+dWNfbmFtZSk7CisgICAgdmltX2ZyZWUoY21kLT51Y19yZXApOworIyBpZiBkZWZpbmVkKEZFQVRfRVZBTCkgJiYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpCisgICAgdmltX2ZyZWUoY21kLT51Y19jb21wbF9hcmcpOworIyBlbmRpZgorCisgICAgLS1nYXAtPmdhX2xlbjsKKyAgICArK2dhcC0+Z2Ffcm9vbTsKKworICAgIGlmIChpIDwgZ2FwLT5nYV9sZW4pCisJbWNoX21lbW1vdmUoY21kLCBjbWQgKyAxLCAoZ2FwLT5nYV9sZW4gLSBpKSAqIHNpemVvZih1Y21kX1QpKTsKK30KKworICAgIHN0YXRpYyBjaGFyX3UgKgordWNfc3BsaXRfYXJncyhhcmcsIGxlbnApCisgICAgY2hhcl91ICphcmc7CisgICAgc2l6ZV90ICpsZW5wOworeworICAgIGNoYXJfdSAqYnVmOworICAgIGNoYXJfdSAqcDsKKyAgICBjaGFyX3UgKnE7CisgICAgaW50IGxlbjsKKworICAgIC8qIFByZWNhbGN1bGF0ZSBsZW5ndGggKi8KKyAgICBwID0gYXJnOworICAgIGxlbiA9IDI7IC8qIEluaXRpYWwgYW5kIGZpbmFsIHF1b3RlcyAqLworCisgICAgd2hpbGUgKCpwKQorICAgIHsKKwlpZiAocFswXSA9PSAnXFwnICYmIHZpbV9pc3doaXRlKHBbMV0pKQorCXsKKwkgICAgbGVuICs9IDE7CisJICAgIHAgKz0gMjsKKwl9CisJZWxzZSBpZiAoKnAgPT0gJ1xcJyB8fCAqcCA9PSAnIicpCisJeworCSAgICBsZW4gKz0gMjsKKwkgICAgcCArPSAxOworCX0KKwllbHNlIGlmICh2aW1faXN3aGl0ZSgqcCkpCisJeworCSAgICBwID0gc2tpcHdoaXRlKHApOworCSAgICBpZiAoKnAgPT0gTlVMKQorCQlicmVhazsKKwkgICAgbGVuICs9IDM7IC8qICIsIiAqLworCX0KKwllbHNlCisJeworCSAgICArK2xlbjsKKwkgICAgKytwOworCX0KKyAgICB9CisKKyAgICBidWYgPSBhbGxvYyhsZW4gKyAxKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgeworCSpsZW5wID0gMDsKKwlyZXR1cm4gYnVmOworICAgIH0KKworICAgIHAgPSBhcmc7CisgICAgcSA9IGJ1ZjsKKyAgICAqcSsrID0gJyInOworICAgIHdoaWxlICgqcCkKKyAgICB7CisJaWYgKHBbMF0gPT0gJ1xcJyAmJiB2aW1faXN3aGl0ZShwWzFdKSkKKwl7CisJICAgICpxKysgPSBwWzFdOworCSAgICBwICs9IDI7CisJfQorCWVsc2UgaWYgKCpwID09ICdcXCcgfHwgKnAgPT0gJyInKQorCXsKKwkgICAgKnErKyA9ICdcXCc7CisJICAgICpxKysgPSAqcCsrOworCX0KKwllbHNlIGlmICh2aW1faXN3aGl0ZSgqcCkpCisJeworCSAgICBwID0gc2tpcHdoaXRlKHApOworCSAgICBpZiAoKnAgPT0gTlVMKQorCQlicmVhazsKKwkgICAgKnErKyA9ICciJzsKKwkgICAgKnErKyA9ICcsJzsKKwkgICAgKnErKyA9ICciJzsKKwl9CisJZWxzZQorCXsKKwkgICAgKnErKyA9ICpwKys7CisJfQorICAgIH0KKyAgICAqcSsrID0gJyInOworICAgICpxID0gMDsKKworICAgICpsZW5wID0gbGVuOworICAgIHJldHVybiBidWY7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgYSA8PiBjb2RlIGluIGEgdXNlciBjb21tYW5kLgorICogImNvZGUiIHBvaW50cyB0byB0aGUgJzwnLiAgImxlbiIgdGhlIGxlbmd0aCBvZiB0aGUgPD4gKGluY2x1c2l2ZSkuCisgKiAiYnVmIiBpcyB3aGVyZSB0aGUgcmVzdWx0IGlzIHRvIGJlIGFkZGVkLgorICogInNwbGl0X2J1ZiIgcG9pbnRzIHRvIGEgYnVmZmVyIHVzZWQgZm9yIHNwbGl0dGluZywgY2FsbGVyIHNob3VsZCBmcmVlIGl0LgorICogInNwbGl0X2xlbiIgaXMgdGhlIGxlbmd0aCBvZiB3aGF0ICJzcGxpdF9idWYiIGNvbnRhaW5zLgorICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSByZXBsYWNlbWVudCwgd2hpY2ggaGFzIGJlZW4gYWRkZWQgdG8gImJ1ZiIuCisgKiBSZXR1cm5zIC0xIGlmIHRoZXJlIHdhcyBubyBtYXRjaCwgYW5kIG9ubHkgdGhlICI8IiBoYXMgYmVlbiBjb3BpZWQuCisgKi8KKyAgICBzdGF0aWMgc2l6ZV90Cit1Y19jaGVja19jb2RlKGNvZGUsIGxlbiwgYnVmLCBjbWQsIGVhcCwgc3BsaXRfYnVmLCBzcGxpdF9sZW4pCisgICAgY2hhcl91CSpjb2RlOworICAgIHNpemVfdAlsZW47CisgICAgY2hhcl91CSpidWY7CisgICAgdWNtZF9UCSpjbWQ7CQkvKiB0aGUgdXNlciBjb21tYW5kIHdlJ3JlIGV4cGFuZGluZyAqLworICAgIGV4YXJnX1QJKmVhcDsJCS8qIGV4IGFyZ3VtZW50cyAqLworICAgIGNoYXJfdQkqKnNwbGl0X2J1ZjsKKyAgICBzaXplX3QJKnNwbGl0X2xlbjsKK3sKKyAgICBzaXplX3QJcmVzdWx0ID0gMDsKKyAgICBjaGFyX3UJKnAgPSBjb2RlICsgMTsKKyAgICBzaXplX3QJbCA9IGxlbiAtIDI7CisgICAgaW50CQlxdW90ZSA9IDA7CisgICAgZW51bSB7IGN0X0FSR1MsIGN0X0JBTkcsIGN0X0NPVU5ULCBjdF9MSU5FMSwgY3RfTElORTIsIGN0X1JFR0lTVEVSLAorCWN0X0xULCBjdF9OT05FIH0gdHlwZSA9IGN0X05PTkU7CisKKyAgICBpZiAoKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSJxUWZGIiwgKnApICE9IE5VTEwpICYmIHBbMV0gPT0gJy0nKQorICAgIHsKKwlxdW90ZSA9ICgqcCA9PSAncScgfHwgKnAgPT0gJ1EnKSA/IDEgOiAyOworCXAgKz0gMjsKKwlsIC09IDI7CisgICAgfQorCisgICAgaWYgKGwgPCAxKQorCXR5cGUgPSBjdF9OT05FOworICAgIGVsc2UgaWYgKFNUUk5JQ01QKHAsICJhcmdzIiwgbCkgPT0gMCkKKwl0eXBlID0gY3RfQVJHUzsKKyAgICBlbHNlIGlmIChTVFJOSUNNUChwLCAiYmFuZyIsIGwpID09IDApCisJdHlwZSA9IGN0X0JBTkc7CisgICAgZWxzZSBpZiAoU1RSTklDTVAocCwgImNvdW50IiwgbCkgPT0gMCkKKwl0eXBlID0gY3RfQ09VTlQ7CisgICAgZWxzZSBpZiAoU1RSTklDTVAocCwgImxpbmUxIiwgbCkgPT0gMCkKKwl0eXBlID0gY3RfTElORTE7CisgICAgZWxzZSBpZiAoU1RSTklDTVAocCwgImxpbmUyIiwgbCkgPT0gMCkKKwl0eXBlID0gY3RfTElORTI7CisgICAgZWxzZSBpZiAoU1RSTklDTVAocCwgImx0IiwgbCkgPT0gMCkKKwl0eXBlID0gY3RfTFQ7CisgICAgZWxzZSBpZiAoU1RSTklDTVAocCwgInJlZ2lzdGVyIiwgbCkgPT0gMCkKKwl0eXBlID0gY3RfUkVHSVNURVI7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgIGNhc2UgY3RfQVJHUzoKKwkvKiBTaW1wbGUgY2FzZSBmaXJzdCAqLworCWlmICgqZWFwLT5hcmcgPT0gTlVMKQorCXsKKwkgICAgaWYgKHF1b3RlID09IDEpCisJICAgIHsKKwkJcmVzdWx0ID0gMjsKKwkJaWYgKGJ1ZiAhPSBOVUxMKQorCQkgICAgU1RSQ1BZKGJ1ZiwgIicnIik7CisJICAgIH0KKwkgICAgZWxzZQorCQlyZXN1bHQgPSAwOworCSAgICBicmVhazsKKwl9CisKKwkvKiBXaGVuIHNwZWNpZmllZCB0aGVyZSBpcyBhIHNpbmdsZSBhcmd1bWVudCBkb24ndCBzcGxpdCBpdC4KKwkgKiBXb3JrcyBmb3IgIjpDbWQgJSIgd2hlbiAlIGlzICJhIGIgYyIuICovCisJaWYgKChlYXAtPmFyZ3QgJiBOT1NQQykgJiYgcXVvdGUgPT0gMikKKwkgICAgcXVvdGUgPSAxOworCisJc3dpdGNoIChxdW90ZSkKKwl7CisJY2FzZSAwOiAvKiBObyBxdW90aW5nLCBubyBzcGxpdHRpbmcgKi8KKwkgICAgcmVzdWx0ID0gU1RSTEVOKGVhcC0+YXJnKTsKKwkgICAgaWYgKGJ1ZiAhPSBOVUxMKQorCQlTVFJDUFkoYnVmLCBlYXAtPmFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgMTogLyogUXVvdGUsIGJ1dCBkb24ndCBzcGxpdCAqLworCSAgICByZXN1bHQgPSBTVFJMRU4oZWFwLT5hcmcpICsgMjsKKwkgICAgZm9yIChwID0gZWFwLT5hcmc7ICpwOyArK3ApCisJICAgIHsKKwkJaWYgKCpwID09ICdcXCcgfHwgKnAgPT0gJyInKQorCQkgICAgKytyZXN1bHQ7CisJICAgIH0KKworCSAgICBpZiAoYnVmICE9IE5VTEwpCisJICAgIHsKKwkJKmJ1ZisrID0gJyInOworCQlmb3IgKHAgPSBlYXAtPmFyZzsgKnA7ICsrcCkKKwkJeworCQkgICAgaWYgKCpwID09ICdcXCcgfHwgKnAgPT0gJyInKQorCQkJKmJ1ZisrID0gJ1xcJzsKKwkJICAgICpidWYrKyA9ICpwOworCQl9CisJCSpidWYgPSAnIic7CisJICAgIH0KKworCSAgICBicmVhazsKKwljYXNlIDI6IC8qIFF1b3RlIGFuZCBzcGxpdCAqLworCSAgICAvKiBUaGlzIGlzIGhhcmQsIHNvIG9ubHkgZG8gaXQgb25jZSwgYW5kIGNhY2hlIHRoZSByZXN1bHQgKi8KKwkgICAgaWYgKCpzcGxpdF9idWYgPT0gTlVMTCkKKwkJKnNwbGl0X2J1ZiA9IHVjX3NwbGl0X2FyZ3MoZWFwLT5hcmcsIHNwbGl0X2xlbik7CisKKwkgICAgcmVzdWx0ID0gKnNwbGl0X2xlbjsKKwkgICAgaWYgKGJ1ZiAhPSBOVUxMICYmIHJlc3VsdCAhPSAwKQorCQlTVFJDUFkoYnVmLCAqc3BsaXRfYnVmKTsKKworCSAgICBicmVhazsKKwl9CisJYnJlYWs7CisKKyAgICBjYXNlIGN0X0JBTkc6CisJcmVzdWx0ID0gZWFwLT5mb3JjZWl0ID8gMSA6IDA7CisJaWYgKHF1b3RlKQorCSAgICByZXN1bHQgKz0gMjsKKwlpZiAoYnVmICE9IE5VTEwpCisJeworCSAgICBpZiAocXVvdGUpCisJCSpidWYrKyA9ICciJzsKKwkgICAgaWYgKGVhcC0+Zm9yY2VpdCkKKwkJKmJ1ZisrID0gJyEnOworCSAgICBpZiAocXVvdGUpCisJCSpidWYgPSAnIic7CisJfQorCWJyZWFrOworCisgICAgY2FzZSBjdF9MSU5FMToKKyAgICBjYXNlIGN0X0xJTkUyOgorICAgIGNhc2UgY3RfQ09VTlQ6CisgICAgeworCWNoYXIgbnVtX2J1ZlsyMF07CisJbG9uZyBudW0gPSAodHlwZSA9PSBjdF9MSU5FMSkgPyBlYXAtPmxpbmUxIDoKKwkJICAgKHR5cGUgPT0gY3RfTElORTIpID8gZWFwLT5saW5lMiA6CisJCSAgIChlYXAtPmFkZHJfY291bnQgPiAwKSA/IGVhcC0+bGluZTIgOiBjbWQtPnVjX2RlZjsKKwlzaXplX3QgbnVtX2xlbjsKKworCXNwcmludGYobnVtX2J1ZiwgIiVsZCIsIG51bSk7CisJbnVtX2xlbiA9IFNUUkxFTihudW1fYnVmKTsKKwlyZXN1bHQgPSBudW1fbGVuOworCisJaWYgKHF1b3RlKQorCSAgICByZXN1bHQgKz0gMjsKKworCWlmIChidWYgIT0gTlVMTCkKKwl7CisJICAgIGlmIChxdW90ZSkKKwkJKmJ1ZisrID0gJyInOworCSAgICBTVFJDUFkoYnVmLCBudW1fYnVmKTsKKwkgICAgYnVmICs9IG51bV9sZW47CisJICAgIGlmIChxdW90ZSkKKwkJKmJ1ZiA9ICciJzsKKwl9CisKKwlicmVhazsKKyAgICB9CisKKyAgICBjYXNlIGN0X1JFR0lTVEVSOgorCXJlc3VsdCA9IGVhcC0+cmVnbmFtZSA/IDEgOiAwOworCWlmIChxdW90ZSkKKwkgICAgcmVzdWx0ICs9IDI7CisJaWYgKGJ1ZiAhPSBOVUxMKQorCXsKKwkgICAgaWYgKHF1b3RlKQorCQkqYnVmKysgPSAnXCcnOworCSAgICBpZiAoZWFwLT5yZWduYW1lKQorCQkqYnVmKysgPSBlYXAtPnJlZ25hbWU7CisJICAgIGlmIChxdW90ZSkKKwkJKmJ1ZiA9ICdcJyc7CisJfQorCWJyZWFrOworCisgICAgY2FzZSBjdF9MVDoKKwlyZXN1bHQgPSAxOworCWlmIChidWYgIT0gTlVMTCkKKwkgICAgKmJ1ZiA9ICc8JzsKKwlicmVhazsKKworICAgIGRlZmF1bHQ6CisJLyogTm90IHJlY29nbml6ZWQ6IGp1c3QgY29weSB0aGUgJzwnIGFuZCByZXR1cm4gLTEuICovCisJcmVzdWx0ID0gKHNpemVfdCktMTsKKwlpZiAoYnVmICE9IE5VTEwpCisJICAgICpidWYgPSAnPCc7CisJYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworICAgIHN0YXRpYyB2b2lkCitkb191Y21kKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcl91CSpidWY7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqcTsKKworICAgIGNoYXJfdQkqc3RhcnQ7CisgICAgY2hhcl91CSplbmQ7CisgICAgc2l6ZV90CWxlbiwgdG90bGVuOworCisgICAgc2l6ZV90CXNwbGl0X2xlbiA9IDA7CisgICAgY2hhcl91CSpzcGxpdF9idWYgPSBOVUxMOworICAgIHVjbWRfVAkqY21kOworI2lmZGVmIEZFQVRfRVZBTAorICAgIHNjaWRfVAlzYXZlX2N1cnJlbnRfU0lEID0gY3VycmVudF9TSUQ7CisjZW5kaWYKKworICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfVVNFUikKKwljbWQgPSBVU0VSX0NNRChlYXAtPnVzZXJpZHgpOworICAgIGVsc2UKKwljbWQgPSBVU0VSX0NNRF9HQSgmY3VyYnVmLT5iX3VjbWRzLCBlYXAtPnVzZXJpZHgpOworCisgICAgLyoKKyAgICAgKiBSZXBsYWNlIDw+IGluIHRoZSBjb21tYW5kIGJ5IHRoZSBhcmd1bWVudHMuCisgICAgICovCisgICAgYnVmID0gTlVMTDsKKyAgICBmb3IgKDs7KQorICAgIHsKKwlwID0gY21kLT51Y19yZXA7CisJcSA9IGJ1ZjsKKwl0b3RsZW4gPSAwOworCXdoaWxlICgoc3RhcnQgPSB2aW1fc3RyY2hyKHAsICc8JykpICE9IE5VTEwKKwkgICAgICAgJiYgKGVuZCA9IHZpbV9zdHJjaHIoc3RhcnQgKyAxLCAnPicpKSAhPSBOVUxMKQorCXsKKwkgICAgLyogSW5jbHVkZSB0aGUgJz4nICovCisJICAgICsrZW5kOworCisJICAgIC8qIFRha2UgZXZlcnl0aGluZyB1cCB0byB0aGUgJzwnICovCisJICAgIGxlbiA9IHN0YXJ0IC0gcDsKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCQl0b3RsZW4gKz0gbGVuOworCSAgICBlbHNlCisJICAgIHsKKwkJbWNoX21lbW1vdmUocSwgcCwgbGVuKTsKKwkJcSArPSBsZW47CisJICAgIH0KKworCSAgICBsZW4gPSB1Y19jaGVja19jb2RlKHN0YXJ0LCBlbmQgLSBzdGFydCwgcSwgY21kLCBlYXAsCisJCQkgICAgICZzcGxpdF9idWYsICZzcGxpdF9sZW4pOworCSAgICBpZiAobGVuID09IChzaXplX3QpLTEpCisJICAgIHsKKwkJLyogbm8gbWF0Y2gsIGNvbnRpbnVlIGFmdGVyICc8JyAqLworCQlwID0gc3RhcnQgKyAxOworCQlsZW4gPSAxOworCSAgICB9CisJICAgIGVsc2UKKwkJcCA9IGVuZDsKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCQl0b3RsZW4gKz0gbGVuOworCSAgICBlbHNlCisJCXEgKz0gbGVuOworCX0KKwlpZiAoYnVmICE9IE5VTEwpCSAgICAvKiBzZWNvbmQgdGltZSBoZXJlLCBmaW5pc2hlZCAqLworCXsKKwkgICAgU1RSQ1BZKHEsIHApOworCSAgICBicmVhazsKKwl9CisKKwl0b3RsZW4gKz0gU1RSTEVOKHApOwkgICAgLyogQWRkIG9uIHRoZSB0cmFpbGluZyBjaGFyYWN0ZXJzICovCisJYnVmID0gYWxsb2MoKHVuc2lnbmVkKSh0b3RsZW4gKyAxKSk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCXsKKwkgICAgdmltX2ZyZWUoc3BsaXRfYnVmKTsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9CisKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBjdXJyZW50X1NJRCA9IGNtZC0+dWNfc2NyaXB0SUQ7CisjZW5kaWYKKyAgICAodm9pZClkb19jbWRsaW5lKGJ1ZiwgZWFwLT5nZXRsaW5lLCBlYXAtPmNvb2tpZSwKKwkJCQkgICBET0NNRF9WRVJCT1NFfERPQ01EX05PV0FJVHxET0NNRF9LRVlUWVBFRCk7CisjaWZkZWYgRkVBVF9FVkFMCisgICAgY3VycmVudF9TSUQgPSBzYXZlX2N1cnJlbnRfU0lEOworI2VuZGlmCisgICAgdmltX2ZyZWUoYnVmKTsKKyAgICB2aW1fZnJlZShzcGxpdF9idWYpOworfQorCisjIGlmIGRlZmluZWQoRkVBVF9DTURMX0NPTVBMKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHN0YXRpYyBjaGFyX3UgKgorZ2V0X3VzZXJfY29tbWFuZF9uYW1lKGlkeCkKKyAgICBpbnQJCWlkeDsKK3sKKyAgICByZXR1cm4gZ2V0X3VzZXJfY29tbWFuZHMoTlVMTCwgaWR4IC0gKGludClDTURfU0laRSk7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBnaXZlbiB0byBFeHBhbmRHZW5lcmljKCkgdG8gb2J0YWluIHRoZSBsaXN0IG9mIHVzZXIgY29tbWFuZCBuYW1lcy4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICoKK2dldF91c2VyX2NvbW1hbmRzKHhwLCBpZHgpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGludAkJaWR4OworeworICAgIGlmIChpZHggPCBjdXJidWYtPmJfdWNtZHMuZ2FfbGVuKQorCXJldHVybiBVU0VSX0NNRF9HQSgmY3VyYnVmLT5iX3VjbWRzLCBpZHgpLT51Y19uYW1lOworICAgIGlkeCAtPSBjdXJidWYtPmJfdWNtZHMuZ2FfbGVuOworICAgIGlmIChpZHggPCB1Y21kcy5nYV9sZW4pCisJcmV0dXJuIFVTRVJfQ01EKGlkeCktPnVjX25hbWU7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBnaXZlbiB0byBFeHBhbmRHZW5lcmljKCkgdG8gb2J0YWluIHRoZSBsaXN0IG9mIHVzZXIgY29tbWFuZAorICogYXR0cmlidXRlcy4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICoKK2dldF91c2VyX2NtZF9mbGFncyh4cCwgaWR4KQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBpbnQJCWlkeDsKK3sKKyAgICBzdGF0aWMgY2hhciAqdXNlcl9jbWRfZmxhZ3NbXSA9CisJeyJiYW5nIiwgImJhciIsICJidWZmZXIiLCAiY29tcGxldGUiLCAiY291bnQiLAorCSAgICAibmFyZ3MiLCAicmFuZ2UiLCAicmVnaXN0ZXIifTsKKworICAgIGlmIChpZHggPj0gc2l6ZW9mKHVzZXJfY21kX2ZsYWdzKSAvIHNpemVvZih1c2VyX2NtZF9mbGFnc1swXSkpCisJcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIChjaGFyX3UgKil1c2VyX2NtZF9mbGFnc1tpZHhdOworfQorCisvKgorICogRnVuY3Rpb24gZ2l2ZW4gdG8gRXhwYW5kR2VuZXJpYygpIHRvIG9idGFpbiB0aGUgbGlzdCBvZiB2YWx1ZXMgZm9yIC1uYXJncy4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICoKK2dldF91c2VyX2NtZF9uYXJncyh4cCwgaWR4KQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBpbnQJCWlkeDsKK3sKKyAgICBzdGF0aWMgY2hhciAqdXNlcl9jbWRfbmFyZ3NbXSA9IHsiMCIsICIxIiwgIioiLCAiPyIsICIrIn07CisKKyAgICBpZiAoaWR4ID49IHNpemVvZih1c2VyX2NtZF9uYXJncykgLyBzaXplb2YodXNlcl9jbWRfbmFyZ3NbMF0pKQorCXJldHVybiBOVUxMOworICAgIHJldHVybiAoY2hhcl91ICopdXNlcl9jbWRfbmFyZ3NbaWR4XTsKK30KKworLyoKKyAqIEZ1bmN0aW9uIGdpdmVuIHRvIEV4cGFuZEdlbmVyaWMoKSB0byBvYnRhaW4gdGhlIGxpc3Qgb2YgdmFsdWVzIGZvciAtY29tcGxldGUuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIGNoYXJfdSAqCitnZXRfdXNlcl9jbWRfY29tcGxldGUoeHAsIGlkeCkKKyAgICBleHBhbmRfVAkqeHA7CisgICAgaW50CQlpZHg7Cit7CisgICAgcmV0dXJuIChjaGFyX3UgKiljb21tYW5kX2NvbXBsZXRlW2lkeF0ubmFtZTsKK30KKyMgZW5kaWYgLyogRkVBVF9DTURMX0NPTVBMICovCisKKyNlbmRpZgkvKiBGRUFUX1VTUl9DTURTICovCisKKyAgICBzdGF0aWMgdm9pZAorZXhfY29sb3JzY2hlbWUoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpZiAobG9hZF9jb2xvcnMoZWFwLT5hcmcpID09IEZBSUwpCisJRU1TRzIoXygiRTE4NTogQ2Fubm90IGZpbmQgY29sb3Igc2NoZW1lICVzIiksIGVhcC0+YXJnKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitleF9oaWdobGlnaHQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpZiAoKmVhcC0+YXJnID09IE5VTCAmJiBlYXAtPmNtZFsyXSA9PSAnIScpCisJTVNHKF8oIkdyZWV0aW5ncywgVmltIHVzZXIhIikpOworICAgIGRvX2hpZ2hsaWdodChlYXAtPmFyZywgZWFwLT5mb3JjZWl0LCBGQUxTRSk7Cit9CisKKworLyoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiBpZiB3ZSB0aG91Z2h0IHdlIHdlcmUgZ29pbmcgdG8gZXhpdCwgYnV0IHdlIHdvbid0CisgKiAoYmVjYXVzZSBvZiBhbiBlcnJvcikuICBNYXkgbmVlZCB0byByZXN0b3JlIHRoZSB0ZXJtaW5hbCBtb2RlLgorICovCisgICAgdm9pZAorbm90X2V4aXRpbmcoKQoreworICAgIGV4aXRpbmcgPSBGQUxTRTsKKyAgICBzZXR0bW9kZShUTU9ERV9SQVcpOworfQorCisvKgorICogIjpxdWl0IjogcXVpdCBjdXJyZW50IHdpbmRvdywgcXVpdCBWaW0gaWYgY2xvc2VkIHRoZSBsYXN0IHdpbmRvdy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9xdWl0KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisjaWZkZWYgRkVBVF9DTURXSU4KKyAgICBpZiAoY21kd2luX3R5cGUgIT0gMCkKKyAgICB7CisJY21kd2luX3Jlc3VsdCA9IEN0cmxfQzsKKwlyZXR1cm47CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKyAgICBuZXRiZWFuc0ZvcmNlZFF1aXQgPSBlYXAtPmZvcmNlaXQ7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgdGhlcmUgYXJlIG1vcmUgZmlsZXMgb3Igd2luZG93cyB3ZSB3b24ndCBleGl0LgorICAgICAqLworICAgIGlmIChjaGVja19tb3JlKEZBTFNFLCBlYXAtPmZvcmNlaXQpID09IE9LICYmIG9ubHlfb25lX3dpbmRvdygpKQorCWV4aXRpbmcgPSBUUlVFOworICAgIGlmICgoIVBfSElEKGN1cmJ1ZikKKwkJJiYgY2hlY2tfY2hhbmdlZChjdXJidWYsIHBfYXdhLCBGQUxTRSwgZWFwLT5mb3JjZWl0LCBGQUxTRSkpCisJICAgIHx8IGNoZWNrX21vcmUoVFJVRSwgZWFwLT5mb3JjZWl0KSA9PSBGQUlMCisJICAgIHx8IChvbmx5X29uZV93aW5kb3coKSAmJiBjaGVja19jaGFuZ2VkX2FueShlYXAtPmZvcmNlaXQpKSkKKyAgICB7CisJbm90X2V4aXRpbmcoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwlpZiAob25seV9vbmVfd2luZG93KCkpCSAgICAvKiBxdWl0IGxhc3Qgd2luZG93ICovCisjZW5kaWYKKwkgICAgZ2V0b3V0KDApOworI2lmZGVmIEZFQVRfV0lORE9XUworIyBpZmRlZiBGRUFUX0dVSQorCW5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjIGVuZGlmCisJLyogY2xvc2Ugd2luZG93OyBtYXkgZnJlZSBidWZmZXIgKi8KKwl3aW5fY2xvc2UoY3Vyd2luLCAhUF9ISUQoY3Vyd2luLT53X2J1ZmZlcikgfHwgZWFwLT5mb3JjZWl0KTsKKyNlbmRpZgorICAgIH0KK30KKworLyoKKyAqICI6Y3F1aXQiLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfY3F1aXQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBnZXRvdXQoMSk7CS8qIHRoaXMgZG9lcyBub3QgYWx3YXlzIHBhc3Mgb24gdGhlIGV4aXQgY29kZSB0byB0aGUgTWFueAorCQkgICBjb21waWxlci4gd2h5PyAqLworfQorCisvKgorICogIjpxYWxsIjogdHJ5IHRvIHF1aXQgYWxsIHdpbmRvd3MKKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9xdWl0X2FsbChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworIyBpZmRlZiBGRUFUX0NNRFdJTgorICAgIGlmIChjbWR3aW5fdHlwZSAhPSAwKQorICAgIHsKKwlpZiAoZWFwLT5mb3JjZWl0KQorCSAgICBjbWR3aW5fcmVzdWx0ID0gS19YRjE7CS8qIGV4X3dpbmRvdygpIHRha2VzIGNhcmUgb2YgdGhpcyAqLworCWVsc2UKKwkgICAgY21kd2luX3Jlc3VsdCA9IEtfWEYyOworCXJldHVybjsKKyAgICB9CisjIGVuZGlmCisgICAgZXhpdGluZyA9IFRSVUU7CisgICAgaWYgKGVhcC0+Zm9yY2VpdCB8fCAhY2hlY2tfY2hhbmdlZF9hbnkoRkFMU0UpKQorCWdldG91dCgwKTsKKyAgICBub3RfZXhpdGluZygpOworfQorCisjaWZkZWYgRkVBVF9XSU5ET1dTCisvKgorICogIjpjbG9zZSI6IGNsb3NlIGN1cnJlbnQgd2luZG93LCB1bmxlc3MgaXQgaXMgdGhlIGxhc3Qgb25lCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfY2xvc2UoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyMgaWZkZWYgRkVBVF9DTURXSU4KKyAgICBpZiAoY21kd2luX3R5cGUgIT0gMCkKKwljbWR3aW5fcmVzdWx0ID0gS19JR05PUkU7CisgICAgZWxzZQorIyBlbmRpZgorCWV4X3dpbl9jbG9zZShlYXAsIGN1cndpbik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZXhfd2luX2Nsb3NlKGVhcCwgd2luKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICB3aW5fVAkqd2luOworeworICAgIGludAkJbmVlZF9oaWRlOworICAgIGJ1Zl9UCSpidWYgPSB3aW4tPndfYnVmZmVyOworCisgICAgbmVlZF9oaWRlID0gKGJ1ZklzQ2hhbmdlZChidWYpICYmIGJ1Zi0+Yl9ud2luZG93cyA8PSAxKTsKKyAgICBpZiAobmVlZF9oaWRlICYmICFQX0hJRChidWYpICYmICFlYXAtPmZvcmNlaXQpCisgICAgeworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKwlpZiAoKHBfY29uZmlybSB8fCBjbWRtb2QuY29uZmlybSkgJiYgcF93cml0ZSkKKwl7CisJICAgIGRpYWxvZ19jaGFuZ2VkKGJ1ZiwgRkFMU0UpOworCSAgICBpZiAoYnVmX3ZhbGlkKGJ1ZikgJiYgYnVmSXNDaGFuZ2VkKGJ1ZikpCisJCXJldHVybjsKKwkgICAgbmVlZF9oaWRlID0gRkFMU0U7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgRU1TRyhfKGVfbm93cnRtc2cpKTsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIG5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKyAgICAvKiBmcmVlIGJ1ZmZlciB3aGVuIG5vdCBoaWRpbmcgaXQgb3Igd2hlbiBpdCdzIGEgc2NyYXRjaCBidWZmZXIgKi8KKyAgICB3aW5fY2xvc2Uod2luLCAhbmVlZF9oaWRlICYmICFQX0hJRChidWYpKTsKK30KKworI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKy8qCisgKiAiOnBjbG9zZSI6IENsb3NlIGFueSBwcmV2aWV3IHdpbmRvdy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9wY2xvc2UoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICB3aW5fVAkqd2luOworCisgICAgZm9yICh3aW4gPSBmaXJzdHdpbjsgd2luICE9IE5VTEw7IHdpbiA9IHdpbi0+d19uZXh0KQorCWlmICh3aW4tPndfcF9wdncpCisJeworCSAgICBleF93aW5fY2xvc2UoZWFwLCB3aW4pOworCSAgICBicmVhazsKKwl9Cit9CisjZW5kaWYKKworLyoKKyAqICI6b25seSIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfb25seShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworIyBpZmRlZiBGRUFUX0dVSQorICAgIG5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjIGVuZGlmCisgICAgY2xvc2Vfb3RoZXJzKFRSVUUsIGVhcC0+Zm9yY2VpdCk7Cit9CisKKy8qCisgKiAiOmFsbCIgYW5kICI6c2FsbCIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfYWxsKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKGVhcC0+YWRkcl9jb3VudCA9PSAwKQorCWVhcC0+bGluZTIgPSA5OTk5OworICAgIGRvX2FyZ19hbGwoKGludCllYXAtPmxpbmUyLCBlYXAtPmZvcmNlaXQpOworfQorI2VuZGlmIC8qIEZFQVRfV0lORE9XUyAqLworCisgICAgc3RhdGljIHZvaWQKK2V4X2hpZGUoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpZiAoKmVhcC0+YXJnICE9IE5VTCAmJiBjaGVja19uZXh0Y21kKGVhcC0+YXJnKSA9PSBOVUxMKQorCWVhcC0+ZXJybXNnID0gZV9pbnZhcmc7CisgICAgZWxzZQorICAgIHsKKwkvKiAiOmhpZGUiIG9yICI6aGlkZSB8IGNtZCI6IGhpZGUgY3VycmVudCB3aW5kb3cgKi8KKwllYXAtPm5leHRjbWQgPSBjaGVja19uZXh0Y21kKGVhcC0+YXJnKTsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwlpZiAoIWVhcC0+c2tpcCkKKwl7CisjIGlmZGVmIEZFQVRfR1VJCisJICAgIG5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjIGVuZGlmCisJICAgIHdpbl9jbG9zZShjdXJ3aW4sIEZBTFNFKTsJLyogZG9uJ3QgZnJlZSBidWZmZXIgKi8KKwl9CisjZW5kaWYKKyAgICB9Cit9CisKKy8qCisgKiAiOnN0b3AiIGFuZCAiOnN1c3BlbmQiOiBTdXNwZW5kIFZpbS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9zdG9wKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgLyoKKyAgICAgKiBEaXNhbGxvdyBzdXNwZW5kaW5nIGZvciAicnZpbSIuCisgICAgICovCisgICAgaWYgKCFjaGVja19yZXN0cmljdGVkKCkKKyNpZmRlZiBXSU4zMjY0CisJLyoKKwkgKiBDaGVjayBpZiBleHRlcm5hbCBjb21tYW5kcyBhcmUgYWxsb3dlZCBub3cuCisJICovCisJJiYgY2FuX2VuZF90ZXJtY2FwX21vZGUoVFJVRSkKKyNlbmRpZgorCQkJCQkpCisgICAgeworCWlmICghZWFwLT5mb3JjZWl0KQorCSAgICBhdXRvd3JpdGVfYWxsKCk7CisJd2luZGdvdG8oKGludClSb3dzIC0gMSwgMCk7CisJb3V0X2NoYXIoJ1xuJyk7CisJb3V0X2ZsdXNoKCk7CisJc3RvcHRlcm1jYXAoKTsKKwlvdXRfZmx1c2goKTsJCS8qIG5lZWRlZCBmb3IgU1VOIHRvIHJlc3RvcmUgeHRlcm0gYnVmZmVyICovCisjaWZkZWYgRkVBVF9USVRMRQorCW1jaF9yZXN0b3JlX3RpdGxlKDMpOwkvKiByZXN0b3JlIHdpbmRvdyB0aXRsZXMgKi8KKyNlbmRpZgorCXVpX3N1c3BlbmQoKTsJCS8qIGNhbGwgbWFjaGluZSBzcGVjaWZpYyBmdW5jdGlvbiAqLworI2lmZGVmIEZFQVRfVElUTEUKKwltYWtldGl0bGUoKTsKKwlyZXNldHRpdGxlKCk7CQkvKiBmb3JjZSB1cGRhdGluZyB0aGUgdGl0bGUgKi8KKyNlbmRpZgorCXN0YXJ0dGVybWNhcCgpOworCXNjcm9sbF9zdGFydCgpOwkJLyogc2Nyb2xsIHNjcmVlbiBiZWZvcmUgcmVkcmF3aW5nICovCisJcmVkcmF3X2xhdGVyX2NsZWFyKCk7CisJc2hlbGxfcmVzaXplZCgpOwkvKiBtYXkgaGF2ZSByZXNpemVkIHdpbmRvdyAqLworICAgIH0KK30KKworLyoKKyAqICI6ZXhpdCIsICI6eGl0IiBhbmQgIjp3cSI6IFdyaXRlIGZpbGUgYW5kIGV4aXQgVmltLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X2V4aXQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyNpZmRlZiBGRUFUX0NNRFdJTgorICAgIGlmIChjbWR3aW5fdHlwZSAhPSAwKQorICAgIHsKKwljbWR3aW5fcmVzdWx0ID0gQ3RybF9DOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogaWYgbW9yZSBmaWxlcyBvciB3aW5kb3dzIHdlIHdvbid0IGV4aXQKKyAgICAgKi8KKyAgICBpZiAoY2hlY2tfbW9yZShGQUxTRSwgZWFwLT5mb3JjZWl0KSA9PSBPSyAmJiBvbmx5X29uZV93aW5kb3coKSkKKwlleGl0aW5nID0gVFJVRTsKKyAgICBpZiAoICAgICAgICgoZWFwLT5jbWRpZHggPT0gQ01EX3dxCisJCSAgICB8fCBjdXJidWZJc0NoYW5nZWQoKSkKKwkJJiYgZG9fd3JpdGUoZWFwKSA9PSBGQUlMKQorCSAgICB8fCBjaGVja19tb3JlKFRSVUUsIGVhcC0+Zm9yY2VpdCkgPT0gRkFJTAorCSAgICB8fCAob25seV9vbmVfd2luZG93KCkgJiYgY2hlY2tfY2hhbmdlZF9hbnkoZWFwLT5mb3JjZWl0KSkpCisgICAgeworCW5vdF9leGl0aW5nKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJaWYgKG9ubHlfb25lX3dpbmRvdygpKQkgICAgLyogcXVpdCBsYXN0IHdpbmRvdywgZXhpdCBWaW0gKi8KKyNlbmRpZgorCSAgICBnZXRvdXQoMCk7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisjIGlmZGVmIEZFQVRfR1VJCisJbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyMgZW5kaWYKKwkvKiBxdWl0IGN1cnJlbnQgd2luZG93LCBtYXkgZnJlZSBidWZmZXIgKi8KKwl3aW5fY2xvc2UoY3Vyd2luLCAhUF9ISUQoY3Vyd2luLT53X2J1ZmZlcikpOworI2VuZGlmCisgICAgfQorfQorCisvKgorICogIjpwcmludCIsICI6bGlzdCIsICI6bnVtYmVyIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9wcmludChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJc2F2ZV9saXN0ID0gMDsJICAgIC8qIGluaXQgZm9yIEdDQyAqLworCisgICAgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9saXN0KQorICAgIHsKKwlzYXZlX2xpc3QgPSBjdXJ3aW4tPndfcF9saXN0OworCWN1cndpbi0+d19wX2xpc3QgPSAxOworICAgIH0KKworICAgIGZvciAoIDshZ290X2ludDsgdWlfYnJlYWtjaGVjaygpKQorICAgIHsKKwlwcmludF9saW5lKGVhcC0+bGluZTEsCisJCSAgIChlYXAtPmNtZGlkeCA9PSBDTURfbnVtYmVyIHx8IGVhcC0+Y21kaWR4ID09IENNRF9wb3VuZCkpOworCWlmICgrK2VhcC0+bGluZTEgPiBlYXAtPmxpbmUyKQorCSAgICBicmVhazsKKwlvdXRfZmx1c2goKTsJICAgIC8qIHNob3cgb25lIGxpbmUgYXQgYSB0aW1lICovCisgICAgfQorICAgIHNldHBjbWFyaygpOworICAgIC8qIHB1dCBjdXJzb3IgYXQgbGFzdCBsaW5lICovCisgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gZWFwLT5saW5lMjsKKyAgICBiZWdpbmxpbmUoQkxfU09MIHwgQkxfRklYKTsKKworICAgIGV4X25vX3JlcHJpbnQgPSBUUlVFOworCisgICAgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9saXN0KQorCWN1cndpbi0+d19wX2xpc3QgPSBzYXZlX2xpc3Q7Cit9CisKKyNpZmRlZiBGRUFUX0JZVEVPRkYKKyAgICBzdGF0aWMgdm9pZAorZXhfZ290byhlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGdvdG9fYnl0ZShlYXAtPmxpbmUyKTsKK30KKyNlbmRpZgorCisvKgorICogIjpzaGVsbCIuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitleF9zaGVsbChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGRvX3NoZWxsKE5VTEwsIDApOworfQorCisjaWYgKGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEhBVkVfRFJPUF9GSUxFKSkgXAorCXx8IChkZWZpbmVkKEZFQVRfR1VJX0dUSykgJiYgZGVmaW5lZChGRUFUX0RORCkpIFwKKwl8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogSGFuZGxlIGEgZmlsZSBkcm9wLiBUaGUgY29kZSBpcyBoZXJlIGJlY2F1c2UgYSBkcm9wIGlzICpuZWFybHkqIGxpa2UgYW4KKyAqIDphcmdzIGNvbW1hbmQsIGJ1dCBub3QgcXVpdGUgKHdlIGhhdmUgYSBsaXN0IG9mIGV4YWN0IGZpbGVuYW1lcywgc28gd2UKKyAqIGRvbid0IHdhbnQgdG8gKGEpIHBhcnNlIGEgY29tbWFuZCBsaW5lLCBvciAoYikgZXhwYW5kIHdpbGRjYXJkcy4gU28gdGhlCisgKiBjb2RlIGlzIHZlcnkgc2ltaWxhciB0byA6YXJncyBhbmQgaGVuY2UgbmVlZHMgYWNjZXNzIHRvIGEgbG90IG9mIHRoZSBzdGF0aWMKKyAqIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuCisgKgorICogVGhlIGxpc3Qgc2hvdWxkIGJlIGFsbG9jYXRlZCB1c2luZyBhbGxvYygpLCBhcyBzaG91bGQgZWFjaCBpdGVtIGluIHRoZQorICogbGlzdC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBvdmVyIHJlc3BvbnNpYmlsaXR5IGZvciBmcmVlaW5nIHRoZSBsaXN0LgorICoKKyAqIFhYWCBUaGUgbGlzdCBpcyBtYWRlIGludG8gdGhlIGFyZ2d1bWVudCBsaXN0LiBUaGlzIGlzIGZyZWVkIHVzaW5nCisgKiBGcmVlV2lsZCgpLCB3aGljaCBkb2VzIGEgc2VyaWVzIG9mIHZpbV9mcmVlKCkgY2FsbHMsIHVubGVzcyB0aGUgdHdvIGRlZmluZXMKKyAqIF9fRU1YX18gYW5kIF9fQUxXQVlTX0hBU19UUkFJTElOR19OVUxfUE9JTlRFUiBhcmUgc2V0LiBJbiB0aGlzIGNhc2UsIGEKKyAqIHJvdXRpbmUgX2ZuZXhwbG9kZWZyZWUoKSBpcyB1c2VkLiBUaGlzIG1heSBjYXVzZSBwcm9ibGVtcywgYnV0IGFzIHRoZSBkcm9wCisgKiBmaWxlIGZ1bmN0aW9uYWxpdHkgaXMgKGN1cnJlbnRseSkgbm90IGluIEVNWCB0aGlzIGlzIG5vdCBwcmVzZW50bHkgYQorICogcHJvYmxlbS4KKyAqLworICAgIHZvaWQKK2hhbmRsZV9kcm9wKGZpbGVjLCBmaWxldiwgc3BsaXQpCisgICAgaW50CQlmaWxlYzsJCS8qIHRoZSBudW1iZXIgb2YgZmlsZXMgZHJvcHBlZCAqLworICAgIGNoYXJfdQkqKmZpbGV2OwkvKiB0aGUgbGlzdCBvZiBmaWxlcyBkcm9wcGVkICovCisgICAgaW50CQlzcGxpdDsJCS8qIGZvcmNlIHNwbGl0dGluZyB0aGUgd2luZG93ICovCit7CisgICAgZXhhcmdfVAllYTsKKyAgICBpbnQJCXNhdmVfbXNnX3Njcm9sbCA9IG1zZ19zY3JvbGw7CisKKyMgaWZkZWYgRkVBVF9DTURXSU4KKyAgICBpZiAoY21kd2luX3R5cGUgIT0gMCkKKwlyZXR1cm47CisjIGVuZGlmCisKKyAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBjaGFuZ2VkLiBJZiBzbywgd2Ugd2lsbCBuZWVkCisgICAgICogdG8gc3BsaXQgdGhlIGN1cnJlbnQgd2luZG93IG9yIGRhdGEgY291bGQgYmUgbG9zdC4KKyAgICAgKiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSAnaGlkZGVuJyBvcHRpb24gaXMgc2V0LCBhcyBpbiB0aGlzCisgICAgICogY2FzZSB0aGUgYnVmZmVyIHdvbid0IGJlIGxvc3QuCisgICAgICovCisgICAgaWYgKCFQX0hJRChjdXJidWYpICYmICFzcGxpdCkKKyAgICB7CisJKytlbXNnX29mZjsKKwlzcGxpdCA9IGNoZWNrX2NoYW5nZWQoY3VyYnVmLCBUUlVFLCBGQUxTRSwgRkFMU0UsIEZBTFNFKTsKKwktLWVtc2dfb2ZmOworICAgIH0KKyAgICBpZiAoc3BsaXQpCisgICAgeworIyBpZmRlZiBGRUFUX1dJTkRPV1MKKwlpZiAod2luX3NwbGl0KDAsIDApID09IEZBSUwpCisJICAgIHJldHVybjsKKyMgIGlmZGVmIEZFQVRfU0NST0xMQklORAorCWN1cndpbi0+d19wX3NjYiA9IEZBTFNFOworIyAgZW5kaWYKKworCS8qIFdoZW4gc3BsaXR0aW5nIHRoZSB3aW5kb3csIGNyZWF0ZSBhIG5ldyBhbGlzdC4gIE90aGVyd2lzZSB0aGUKKwkgKiBleGlzdGluZyBvbmUgaXMgb3ZlcndyaXR0ZW4uICovCisJYWxpc3RfdW5saW5rKGN1cndpbi0+d19hbGlzdCk7CisJYWxpc3RfbmV3KCk7CisjIGVsc2UKKwlyZXR1cm47CSAgICAvKiBjYW4ndCBzcGxpdCwgYWx3YXlzIGZhaWwgKi8KKyMgZW5kaWYKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCB1cCB0aGUgbmV3IGFyZ3VtZW50IGxpc3QuCisgICAgICovCisgICAgYWxpc3Rfc2V0KEFMSVNUKGN1cndpbiksIGZpbGVjLCBmaWxldiwgRkFMU0UpOworCisgICAgLyoKKyAgICAgKiBNb3ZlIHRvIHRoZSBmaXJzdCBmaWxlLgorICAgICAqLworICAgIC8qIEZha2UgdXAgYSBtaW5pbWFsICJuZXh0IiBjb21tYW5kIGZvciBkb19hcmdmaWxlKCkgKi8KKyAgICB2aW1fbWVtc2V0KCZlYSwgMCwgc2l6ZW9mKGVhKSk7CisgICAgZWEuY21kID0gKGNoYXJfdSAqKSJuZXh0IjsKKyAgICBkb19hcmdmaWxlKCZlYSwgMCk7CisKKyAgICAvKiBkb19lY21kKCkgbWF5IHNldCBuZWVkX3N0YXJ0X2luc2VydG1vZGUsIGJ1dCBzaW5jZSB3ZSBuZXZlciBsZWZ0IEluc2VydAorICAgICAqIG1vZGUgdGhhdCBpcyBub3QgbmVlZGVkIGhlcmUuICovCisgICAgbmVlZF9zdGFydF9pbnNlcnRtb2RlID0gRkFMU0U7CisKKyAgICAvKiBSZXN0b3JlIG1zZ19zY3JvbGwsIG90aGVyd2lzZSBhIGZvbGxvd2luZyBjb21tYW5kIG1heSBjYXVzZSBzY3JvbGxpbmcKKyAgICAgKiB1bmV4cGVjdGVkbHkuICBUaGUgc2NyZWVuIHdpbGwgYmUgcmVkcmF3biBieSB0aGUgY2FsbGVyLCB0aHVzCisgICAgICogbXNnX3Njcm9sbCBiZWluZyBzZXQgYnkgZGlzcGxheWluZyBhIG1lc3NhZ2UgaXMgaXJyZWxldmFudC4gKi8KKyAgICBtc2dfc2Nyb2xsID0gc2F2ZV9tc2dfc2Nyb2xsOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGFsaXN0X2NsZWFyIF9fQVJHUygoYWxpc3RfVCAqYWwpKTsKKy8qCisgKiBDbGVhciBhbiBhcmd1bWVudCBsaXN0OiBmcmVlIGFsbCBmaWxlIG5hbWVzIGFuZCByZXNldCBpdCB0byB6ZXJvIGVudHJpZXMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYWxpc3RfY2xlYXIoYWwpCisgICAgYWxpc3RfVAkqYWw7Cit7CisgICAgd2hpbGUgKC0tYWwtPmFsX2dhLmdhX2xlbiA+PSAwKQorCXZpbV9mcmVlKEFBUkdMSVNUKGFsKVthbC0+YWxfZ2EuZ2FfbGVuXS5hZV9mbmFtZSk7CisgICAgZ2FfY2xlYXIoJmFsLT5hbF9nYSk7Cit9CisKKy8qCisgKiBJbml0IGFuIGFyZ3VtZW50IGxpc3QuCisgKi8KKyAgICB2b2lkCithbGlzdF9pbml0KGFsKQorICAgIGFsaXN0X1QJKmFsOworeworICAgIGdhX2luaXQyKCZhbC0+YWxfZ2EsIChpbnQpc2l6ZW9mKGFlbnRyeV9UKSwgNSk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChQUk9UTykKKworLyoKKyAqIFJlbW92ZSBhIHJlZmVyZW5jZSBmcm9tIGFuIGFyZ3VtZW50IGxpc3QuCisgKiBJZ25vcmVkIHdoZW4gdGhlIGFyZ3VtZW50IGxpc3QgaXMgdGhlIGdsb2JhbCBvbmUuCisgKiBJZiB0aGUgYXJndW1lbnQgbGlzdCBpcyBubyBsb25nZXIgdXNlZCBieSBhbnkgd2luZG93LCBmcmVlIGl0LgorICovCisgICAgdm9pZAorYWxpc3RfdW5saW5rKGFsKQorICAgIGFsaXN0X1QJKmFsOworeworICAgIGlmIChhbCAhPSAmZ2xvYmFsX2FsaXN0ICYmIC0tYWwtPmFsX3JlZmNvdW50IDw9IDApCisgICAgeworCWFsaXN0X2NsZWFyKGFsKTsKKwl2aW1fZnJlZShhbCk7CisgICAgfQorfQorCisjIGlmIGRlZmluZWQoRkVBVF9MSVNUQ01EUykgfHwgZGVmaW5lZChIQVZFX0RST1BfRklMRSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDcmVhdGUgYSBuZXcgYXJndW1lbnQgbGlzdCBhbmQgdXNlIGl0IGZvciB0aGUgY3VycmVudCB3aW5kb3cuCisgKi8KKyAgICB2b2lkCithbGlzdF9uZXcoKQoreworICAgIGN1cndpbi0+d19hbGlzdCA9IChhbGlzdF9UICopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihhbGlzdF9UKSk7CisgICAgaWYgKGN1cndpbi0+d19hbGlzdCA9PSBOVUxMKQorICAgIHsKKwljdXJ3aW4tPndfYWxpc3QgPSAmZ2xvYmFsX2FsaXN0OworCSsrZ2xvYmFsX2FsaXN0LmFsX3JlZmNvdW50OworICAgIH0KKyAgICBlbHNlCisgICAgeworCWN1cndpbi0+d19hbGlzdC0+YWxfcmVmY291bnQgPSAxOworCWFsaXN0X2luaXQoY3Vyd2luLT53X2FsaXN0KTsKKyAgICB9Cit9CisjIGVuZGlmCisjZW5kaWYKKworI2lmICghZGVmaW5lZChVTklYKSAmJiAhZGVmaW5lZChfX0VNWF9fKSkgfHwgZGVmaW5lZChBUkNISUUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogRXhwYW5kIHRoZSBmaWxlIG5hbWVzIGluIHRoZSBnbG9iYWwgYXJndW1lbnQgbGlzdC4KKyAqLworICAgIHZvaWQKK2FsaXN0X2V4cGFuZCgpCit7CisgICAgY2hhcl91CSoqb2xkX2FyZ19maWxlczsKKyAgICBjaGFyX3UJKipuZXdfYXJnX2ZpbGVzOworICAgIGludAkJbmV3X2FyZ19maWxlX2NvdW50OworICAgIGNoYXJfdQkqc2F2ZV9wX3N1ID0gcF9zdTsKKyAgICBpbnQJCWk7CisKKyAgICAvKiBEb24ndCB1c2UgJ3N1ZmZpeGVzJyBoZXJlLiAgVGhpcyBzaG91bGQgd29yayBsaWtlIHRoZSBzaGVsbCBkaWQgdGhlCisgICAgICogZXhwYW5zaW9uLiAgQWxzbywgdGhlIHZpbXJjIGZpbGUgaXNuJ3QgcmVhZCB5ZXQsIHRodXMgdGhlIHVzZXIKKyAgICAgKiBjYW4ndCBzZXQgdGhlIG9wdGlvbnMuICovCisgICAgcF9zdSA9IGVtcHR5X29wdGlvbjsKKyAgICBvbGRfYXJnX2ZpbGVzID0gKGNoYXJfdSAqKilhbGxvYygodW5zaWduZWQpKHNpemVvZihjaGFyX3UgKikgKiBHQVJHQ09VTlQpKTsKKyAgICBpZiAob2xkX2FyZ19maWxlcyAhPSBOVUxMKQorICAgIHsKKwlmb3IgKGkgPSAwOyBpIDwgR0FSR0NPVU5UOyArK2kpCisJICAgIG9sZF9hcmdfZmlsZXNbaV0gPSBHQVJHTElTVFtpXS5hZV9mbmFtZTsKKwlpZiAoZXhwYW5kX3dpbGRjYXJkcyhHQVJHQ09VTlQsIG9sZF9hcmdfZmlsZXMsCisJCSAgICAmbmV3X2FyZ19maWxlX2NvdW50LCAmbmV3X2FyZ19maWxlcywKKwkJICAgIEVXX0ZJTEV8RVdfTk9URk9VTkR8RVdfQUREU0xBU0gpID09IE9LCisJCSYmIG5ld19hcmdfZmlsZV9jb3VudCA+IDApCisJeworCSAgICBhbGlzdF9zZXQoJmdsb2JhbF9hbGlzdCwgbmV3X2FyZ19maWxlX2NvdW50LCBuZXdfYXJnX2ZpbGVzLCBUUlVFKTsKKwl9CisJdmltX2ZyZWUob2xkX2FyZ19maWxlcyk7CisgICAgfQorICAgIHBfc3UgPSBzYXZlX3Bfc3U7Cit9CisjZW5kaWYKKworLyoKKyAqIFNldCB0aGUgYXJndW1lbnQgbGlzdCBmb3IgdGhlIGN1cnJlbnQgd2luZG93LgorICogVGFrZXMgb3ZlciB0aGUgYWxsb2NhdGVkIGZpbGVzW10gYW5kIHRoZSBhbGxvY2F0ZWQgZm5hbWVzIGluIGl0LgorICovCisgICAgdm9pZAorYWxpc3Rfc2V0KGFsLCBjb3VudCwgZmlsZXMsIHVzZV9jdXJidWYpCisgICAgYWxpc3RfVAkqYWw7CisgICAgaW50CQljb3VudDsKKyAgICBjaGFyX3UJKipmaWxlczsKKyAgICBpbnQJCXVzZV9jdXJidWY7Cit7CisgICAgaW50CQlpOworCisgICAgYWxpc3RfY2xlYXIoYWwpOworICAgIGlmIChnYV9ncm93KCZhbC0+YWxfZ2EsIGNvdW50KSA9PSBPSykKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJICAgIGFsaXN0X2FkZChhbCwgZmlsZXNbaV0sIHVzZV9jdXJidWYgPyAyIDogMSk7CisJdmltX2ZyZWUoZmlsZXMpOworICAgIH0KKyAgICBlbHNlCisJRnJlZVdpbGQoY291bnQsIGZpbGVzKTsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBpZiAoYWwgPT0gJmdsb2JhbF9hbGlzdCkKKyNlbmRpZgorCWFyZ19oYWRfbGFzdCA9IEZBTFNFOworfQorCisvKgorICogQWRkIGZpbGUgImZuYW1lIiB0byBhcmd1bWVudCBsaXN0ICJhbCIuCisgKiAiZm5hbWUiIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCBhbmQgImFsIiBtdXN0IGhhdmUgYmVlbiBjaGVja2VkIGZvciByb29tLgorICovCisgICAgdm9pZAorYWxpc3RfYWRkKGFsLCBmbmFtZSwgc2V0X2ZudW0pCisgICAgYWxpc3RfVAkqYWw7CisgICAgY2hhcl91CSpmbmFtZTsKKyAgICBpbnQJCXNldF9mbnVtOwkvKiAxOiBzZXQgYnVmZmVyIG51bWJlcjsgMjogcmUtdXNlIGN1cmJ1ZiAqLworeworICAgIGlmIChmbmFtZSA9PSBOVUxMKQkJLyogZG9uJ3QgYWRkIE5VTEwgZmlsZSBuYW1lcyAqLworCXJldHVybjsKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKyAgICBzbGFzaF9hZGp1c3QoZm5hbWUpOworI2VuZGlmCisgICAgQUFSR0xJU1QoYWwpW2FsLT5hbF9nYS5nYV9sZW5dLmFlX2ZuYW1lID0gZm5hbWU7CisgICAgaWYgKHNldF9mbnVtID4gMCkKKwlBQVJHTElTVChhbClbYWwtPmFsX2dhLmdhX2xlbl0uYWVfZm51bSA9CisJICAgIGJ1Zmxpc3RfYWRkKGZuYW1lLCBCTE5fTElTVEVEIHwgKHNldF9mbnVtID09IDIgPyBCTE5fQ1VSQlVGIDogMCkpOworICAgICsrYWwtPmFsX2dhLmdhX2xlbjsKKyAgICAtLWFsLT5hbF9nYS5nYV9yb29tOworfQorCisjaWYgZGVmaW5lZChCQUNLU0xBU0hfSU5fRklMRU5BTUUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQWRqdXN0IHNsYXNoZXMgaW4gZmlsZSBuYW1lcy4gIENhbGxlZCBhZnRlciAnc2hlbGxzbGFzaCcgd2FzIHNldC4KKyAqLworICAgIHZvaWQKK2FsaXN0X3NsYXNoX2FkanVzdCgpCit7CisgICAgaW50CQlpOworIyBpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICB3aW5fVAkqd3A7CisjIGVuZGlmCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgR0FSR0NPVU5UOyArK2kpCisJaWYgKEdBUkdMSVNUW2ldLmFlX2ZuYW1lICE9IE5VTEwpCisJICAgIHNsYXNoX2FkanVzdChHQVJHTElTVFtpXS5hZV9mbmFtZSk7CisjIGlmZGVmIEZFQVRfV0lORE9XUworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gTlVMTDsgd3AgPSB3cC0+d19uZXh0KQorCWlmICh3cC0+d19hbGlzdCAhPSAmZ2xvYmFsX2FsaXN0KQorCSAgICBmb3IgKGkgPSAwOyBpIDwgV0FSR0NPVU5UKHdwKTsgKytpKQorCQlpZiAoV0FSR0xJU1Qod3ApW2ldLmFlX2ZuYW1lICE9IE5VTEwpCisJCSAgICBzbGFzaF9hZGp1c3QoV0FSR0xJU1Qod3ApW2ldLmFlX2ZuYW1lKTsKKyMgZW5kaWYKK30KKyNlbmRpZgorCisvKgorICogIjpwcmVzZXJ2ZSIuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitleF9wcmVzZXJ2ZShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIG1sX3ByZXNlcnZlKGN1cmJ1ZiwgVFJVRSk7Cit9CisKKy8qCisgKiAiOnJlY292ZXIiLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X3JlY292ZXIoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICAvKiBTZXQgcmVjb3Zlcnltb2RlIHJpZ2h0IGF3YXkgdG8gYXZvaWQgdGhlIEFUVEVOVElPTiBwcm9tcHQuICovCisgICAgcmVjb3Zlcnltb2RlID0gVFJVRTsKKyAgICBpZiAoIWNoZWNrX2NoYW5nZWQoY3VyYnVmLCBwX2F3YSwgVFJVRSwgZWFwLT5mb3JjZWl0LCBGQUxTRSkKKwkgICAgJiYgKCplYXAtPmFyZyA9PSBOVUwKKwkJCSAgICAgfHwgc2V0Zm5hbWUoY3VyYnVmLCBlYXAtPmFyZywgTlVMTCwgVFJVRSkgPT0gT0spKQorCW1sX3JlY292ZXIoKTsKKyAgICByZWNvdmVyeW1vZGUgPSBGQUxTRTsKK30KKworLyoKKyAqIENvbW1hbmQgbW9kaWZpZXIgdXNlZCBpbiBhIHdyb25nIHdheS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF93cm9uZ21vZGlmaWVyKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgZWFwLT5lcnJtc2cgPSBlX2ludmNtZDsKK30KKworI2lmZGVmIEZFQVRfV0lORE9XUworLyoKKyAqIDpzdmlldyBbK2NvbW1hbmRdIGZpbGUJc3BsaXQgd2luZG93IHdpdGggbmV3IGZpbGUsIHJlYWQtb25seQorICogOnNwbGl0IFtbK2NvbW1hbmRdIGZpbGVdCXNwbGl0IHdpbmRvdyB3aXRoIGN1cnJlbnQgb3IgbmV3IGZpbGUKKyAqIDp2c3BsaXQgW1srY29tbWFuZF0gZmlsZV0Jc3BsaXQgd2luZG93IHZlcnRpY2FsbHkgd2l0aCBjdXJyZW50IG9yIG5ldyBmaWxlCisgKiA6bmV3IFtbK2NvbW1hbmRdIGZpbGVdCXNwbGl0IHdpbmRvdyB3aXRoIG5vIG9yIG5ldyBmaWxlCisgKiA6dm5ldyBbWytjb21tYW5kXSBmaWxlXQlzcGxpdCB2ZXJ0aWNhbGx5IHdpbmRvdyB3aXRoIG5vIG9yIG5ldyBmaWxlCisgKiA6c2ZpbmQgWytjb21tYW5kXSBmaWxlCXNwbGl0IHdpbmRvdyB3aXRoIGZpbGUgaW4gJ3BhdGgnCisgKi8KKyAgICB2b2lkCitleF9zcGxpdHZpZXcoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICB3aW5fVAkqb2xkX2N1cndpbjsKKyNpZiBkZWZpbmVkKEZFQVRfU0VBUkNIUEFUSCkgfHwgZGVmaW5lZChGRUFUX0JST1dTRSkKKyAgICBjaGFyX3UJKmZuYW1lID0gTlVMTDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQlJPV1NFCisgICAgaW50CQlicm93c2VfZmxhZyA9IGNtZG1vZC5icm93c2U7CisjZW5kaWYKKworI2lmbmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfdnNwbGl0IHx8IGVhcC0+Y21kaWR4ID09IENNRF92bmV3KQorICAgIHsKKwlleF9uaShlYXApOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIG9sZF9jdXJ3aW4gPSBjdXJ3aW47CisjaWZkZWYgRkVBVF9HVUkKKyAgICBuZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisgICAgLyogQSAiOnNwbGl0IiBpbiB0aGUgcXVpY2tmaXggd2luZG93IHdvcmtzIGxpa2UgIjpuZXciLiAgRG9uJ3Qgd2FudCB0d28KKyAgICAgKiBxdWlja2ZpeCB3aW5kb3dzLiAqLworICAgIGlmIChidF9xdWlja2ZpeChjdXJidWYpKQorICAgIHsKKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX3NwbGl0KQorCSAgICBlYXAtPmNtZGlkeCA9IENNRF9uZXc7CisjIGlmZGVmIEZFQVRfVkVSVFNQTElUCisJaWYgKGVhcC0+Y21kaWR4ID09IENNRF92c3BsaXQpCisJICAgIGVhcC0+Y21kaWR4ID0gQ01EX3ZuZXc7CisjIGVuZGlmCisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1NFQVJDSFBBVEgKKyAgICBpZiAoZWFwLT5jbWRpZHggPT0gQ01EX3NmaW5kKQorICAgIHsKKwlmbmFtZSA9IGZpbmRfZmlsZV9pbl9wYXRoKGVhcC0+YXJnLCAoaW50KVNUUkxFTihlYXAtPmFyZyksCisJCQkJCSAgRk5BTUVfTUVTUywgVFJVRSwgY3VyYnVmLT5iX2ZmbmFtZSk7CisJaWYgKGZuYW1lID09IE5VTEwpCisJICAgIGdvdG8gdGhlZW5kOworCWVhcC0+YXJnID0gZm5hbWU7CisgICAgfQorIyBpZmRlZiBGRUFUX0JST1dTRQorICAgIGVsc2UKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEZFQVRfQlJPV1NFCisgICAgaWYgKGNtZG1vZC5icm93c2UKKyMgaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkgICAgJiYgZWFwLT5jbWRpZHggIT0gQ01EX3ZuZXcKKyNlbmRpZgorCSAgICAmJiBlYXAtPmNtZGlkeCAhPSBDTURfbmV3KQorICAgIHsKKwlmbmFtZSA9IGRvX2Jyb3dzZShGQUxTRSwgKGNoYXJfdSAqKV8oIkVkaXQgRmlsZSBpbiBuZXcgd2luZG93IiksCisJCQkJCSAgZWFwLT5hcmcsIE5VTEwsIE5VTEwsIE5VTEwsIGN1cmJ1Zik7CisJaWYgKGZuYW1lID09IE5VTEwpCisJICAgIGdvdG8gdGhlZW5kOworCWVhcC0+YXJnID0gZm5hbWU7CisgICAgfQorICAgIGNtZG1vZC5icm93c2UgPSBGQUxTRTsJLyogRG9uJ3QgYnJvd3NlIGFnYWluIGluIGRvX2VjbWQoKS4gKi8KKyNlbmRpZgorCisgICAgaWYgKHdpbl9zcGxpdChlYXAtPmFkZHJfY291bnQgPiAwID8gKGludCllYXAtPmxpbmUyIDogMCwKKwkJCQkgICAgICplYXAtPmNtZCA9PSAndicgPyBXU1BfVkVSVCA6IDApICE9IEZBSUwpCisgICAgeworI2lmZGVmIEZFQVRfU0NST0xMQklORAorCS8qIFJlc2V0ICdzY3JvbGxiaW5kJyB3aGVuIGVkaXRpbmcgYW5vdGhlciBmaWxlLCBidXQga2VlcCBpdCB3aGVuCisJICogZG9pbmcgIjpzcGxpdCIgd2l0aG91dCBhcmd1bWVudHMuICovCisJaWYgKCplYXAtPmFyZyAhPSBOVUwKKyNpZmRlZiBGRUFUX0JST1dTRQorCQl8fCBjbWRtb2QuYnJvd3NlCisjZW5kaWYKKwkgICApCisJICAgIGN1cndpbi0+d19wX3NjYiA9IEZBTFNFOworCWVsc2UKKwkgICAgZG9fY2hlY2tfc2Nyb2xsYmluZChGQUxTRSk7CisjZW5kaWYKKwlkb19leGVkaXQoZWFwLCBvbGRfY3Vyd2luKTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX0JST1dTRQorICAgIGNtZG1vZC5icm93c2UgPSBicm93c2VfZmxhZzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1NFQVJDSFBBVEgpIHx8IGRlZmluZWQoRkVBVF9CUk9XU0UpCit0aGVlbmQ6CisgICAgdmltX2ZyZWUoZm5hbWUpOworI2VuZGlmCit9CisjZW5kaWYKKworLyoKKyAqICI6bW9kZSI6IFNldCBzY3JlZW4gbW9kZS4KKyAqIElmIG5vIGFyZ3VtZW50IGdpdmVuLCBqdXN0IGdldCB0aGUgc2NyZWVuIHNpemUgYW5kIHJlZHJhdy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9tb2RlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKCplYXAtPmFyZyA9PSBOVUwpCisJc2hlbGxfcmVzaXplZCgpOworICAgIGVsc2UKKwltY2hfc2NyZWVubW9kZShlYXAtPmFyZyk7Cit9CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKy8qCisgKiAiOnJlc2l6ZSIuCisgKiBzZXQsIGluY3JlbWVudCBvciBkZWNyZW1lbnQgY3VycmVudCB3aW5kb3cgaGVpZ2h0CisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfcmVzaXplKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQluOworICAgIHdpbl9UCSp3cCA9IGN1cndpbjsKKworICAgIGlmIChlYXAtPmFkZHJfY291bnQgPiAwKQorICAgIHsKKwluID0gZWFwLT5saW5lMjsKKwlmb3IgKHdwID0gZmlyc3R3aW47IHdwLT53X25leHQgIT0gTlVMTCAmJiAtLW4gPiAwOyB3cCA9IHdwLT53X25leHQpCisJICAgIDsKKyAgICB9CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIG5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKyAgICBuID0gYXRvbCgoY2hhciAqKWVhcC0+YXJnKTsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGlmIChjbWRtb2Quc3BsaXQgJiBXU1BfVkVSVCkKKyAgICB7CisJaWYgKCplYXAtPmFyZyA9PSAnLScgfHwgKmVhcC0+YXJnID09ICcrJykKKwkgICAgbiArPSBXX1dJRFRIKGN1cndpbik7CisJZWxzZSBpZiAobiA9PSAwICYmIGVhcC0+YXJnWzBdID09IE5VTCkJLyogZGVmYXVsdCBpcyB2ZXJ5IHdpZGUgKi8KKwkgICAgbiA9IDk5OTk7CisJd2luX3NldHdpZHRoX3dpbigoaW50KW4sIHdwKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCWlmICgqZWFwLT5hcmcgPT0gJy0nIHx8ICplYXAtPmFyZyA9PSAnKycpCisJICAgIG4gKz0gY3Vyd2luLT53X2hlaWdodDsKKwllbHNlIGlmIChuID09IDAgJiYgZWFwLT5hcmdbMF0gPT0gTlVMKQkvKiBkZWZhdWx0IGlzIHZlcnkgd2lkZSAqLworCSAgICBuID0gOTk5OTsKKwl3aW5fc2V0aGVpZ2h0X3dpbigoaW50KW4sIHdwKTsKKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqICI6ZmluZCBbK2NvbW1hbmRdIDxmaWxlPiIgY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9maW5kKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisjaWZkZWYgRkVBVF9TRUFSQ0hQQVRICisgICAgY2hhcl91CSpmbmFtZTsKKyAgICBpbnQJCWNvdW50OworCisgICAgZm5hbWUgPSBmaW5kX2ZpbGVfaW5fcGF0aChlYXAtPmFyZywgKGludClTVFJMRU4oZWFwLT5hcmcpLCBGTkFNRV9NRVNTLAorCQkJCQkJICAgICAgVFJVRSwgY3VyYnVmLT5iX2ZmbmFtZSk7CisgICAgaWYgKGVhcC0+YWRkcl9jb3VudCA+IDApCisgICAgeworCS8qIFJlcGVhdCBmaW5kaW5nIHRoZSBmaWxlICJjb3VudCIgdGltZXMuICBUaGlzIG1hdHRlcnMgd2hlbiBpdAorCSAqIGFwcGVhcnMgc2V2ZXJhbCB0aW1lcyBpbiB0aGUgcGF0aC4gKi8KKwljb3VudCA9IGVhcC0+bGluZTI7CisJd2hpbGUgKGZuYW1lICE9IE5VTEwgJiYgLS1jb3VudCA+IDApCisJeworCSAgICB2aW1fZnJlZShmbmFtZSk7CisJICAgIGZuYW1lID0gZmluZF9maWxlX2luX3BhdGgoTlVMTCwgMCwgRk5BTUVfTUVTUywKKwkJCQkJCSAgICAgRkFMU0UsIGN1cmJ1Zi0+Yl9mZm5hbWUpOworCX0KKyAgICB9CisKKyAgICBpZiAoZm5hbWUgIT0gTlVMTCkKKyAgICB7CisJZWFwLT5hcmcgPSBmbmFtZTsKKyNlbmRpZgorCWRvX2V4ZWRpdChlYXAsIE5VTEwpOworI2lmZGVmIEZFQVRfU0VBUkNIUEFUSAorCXZpbV9mcmVlKGZuYW1lKTsKKyAgICB9CisjZW5kaWYKK30KKworLyoKKyAqICI6ZWRpdCIsICI6YmFkZCIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfZWRpdChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGRvX2V4ZWRpdChlYXAsIE5VTEwpOworfQorCisvKgorICogIjplZGl0IDxmaWxlPiIgY29tbWFuZCBhbmQgYWxpa2VzLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitkb19leGVkaXQoZWFwLCBvbGRfY3Vyd2luKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICB3aW5fVAkqb2xkX2N1cndpbjsJICAgIC8qIGN1cndpbiBiZWZvcmUgZG9pbmcgYSBzcGxpdCBvciBOVUxMICovCit7CisgICAgaW50CQluOworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIGludAkJbmVlZF9oaWRlOworI2VuZGlmCisKKyAgICAvKgorICAgICAqICI6dmkiIGNvbW1hbmQgZW5kcyBFeCBtb2RlLgorICAgICAqLworICAgIGlmIChleG1vZGVfYWN0aXZlICYmIChlYXAtPmNtZGlkeCA9PSBDTURfdmlzdWFsCisJCQkJCQl8fCBlYXAtPmNtZGlkeCA9PSBDTURfdmlldykpCisgICAgeworCWV4bW9kZV9hY3RpdmUgPSBGQUxTRTsKKwlpZiAoKmVhcC0+YXJnID09IE5VTCkKKwkgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgoZWFwLT5jbWRpZHggPT0gQ01EX25ldworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJCXx8IGVhcC0+Y21kaWR4ID09IENNRF92bmV3CisjZW5kaWYKKwkJKSAmJiAqZWFwLT5hcmcgPT0gTlVMKQorICAgIHsKKwkvKiAiOm5ldyIgd2l0aG91dCBhcmd1bWVudDogZWRpdCBhbiBuZXcgZW1wdHkgYnVmZmVyICovCisJc2V0cGNtYXJrKCk7CisJKHZvaWQpZG9fZWNtZCgwLCBOVUxMLCBOVUxMLCBlYXAsIEVDTURfT05FLAorCQkJICAgICAgIEVDTURfSElERSArIChlYXAtPmZvcmNlaXQgPyBFQ01EX0ZPUkNFSVQgOiAwKSk7CisgICAgfQorICAgIGVsc2UgaWYgKChlYXAtPmNtZGlkeCAhPSBDTURfc3BsaXQKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQkmJiBlYXAtPmNtZGlkeCAhPSBDTURfdnNwbGl0CisjZW5kaWYKKwkJKQorCSAgICB8fCAqZWFwLT5hcmcgIT0gTlVMCisjaWZkZWYgRkVBVF9CUk9XU0UKKwkgICAgfHwgY21kbW9kLmJyb3dzZQorI2VuZGlmCisJICAgICkKKyAgICB7CisJbiA9IHJlYWRvbmx5bW9kZTsKKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX3ZpZXcgfHwgZWFwLT5jbWRpZHggPT0gQ01EX3N2aWV3KQorCSAgICByZWFkb25seW1vZGUgPSBUUlVFOworCWVsc2UgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9lbmV3KQorCSAgICByZWFkb25seW1vZGUgPSBGQUxTRTsgICAvKiAncmVhZG9ubHknIGRvZXNuJ3QgbWFrZSBzZW5zZSBpbiBhbgorCQkJCSAgICAgICBlbXB0eSBidWZmZXIgKi8KKwlzZXRwY21hcmsoKTsKKwlpZiAoZG9fZWNtZCgwLCAoZWFwLT5jbWRpZHggPT0gQ01EX2VuZXcgPyBOVUxMIDogZWFwLT5hcmcpLAorCQkgICAgTlVMTCwgZWFwLAorCQkgICAgLyogIjplZGl0IiBnb2VzIHRvIGZpcnN0IGxpbmUgaWYgVmkgY29tcGF0aWJsZSAqLworCQkgICAgKCplYXAtPmFyZyA9PSBOVUwgJiYgZWFwLT5kb19lY21kX2xudW0gPT0gMAorCQkJCSAgICAgICYmIHZpbV9zdHJjaHIocF9jcG8sIENQT19HT1RPMSkgIT0gTlVMTCkKKwkJCQkJICAgICAgID8gRUNNRF9PTkUgOiBlYXAtPmRvX2VjbWRfbG51bSwKKwkJICAgIChQX0hJRChjdXJidWYpID8gRUNNRF9ISURFIDogMCkKKwkJICAgICsgKGVhcC0+Zm9yY2VpdCA/IEVDTURfRk9SQ0VJVCA6IDApCisjaWZkZWYgRkVBVF9MSVNUQ01EUworCQkgICAgKyAoZWFwLT5jbWRpZHggPT0gQ01EX2JhZGQgPyBFQ01EX0FEREJVRiA6IDAgKQorI2VuZGlmCisJCSAgICApID09IEZBSUwpCisJeworCSAgICAvKiBFZGl0aW5nIHRoZSBmaWxlIGZhaWxlZC4gIElmIHRoZSB3aW5kb3cgd2FzIHNwbGl0LCBjbG9zZSBpdC4gKi8KKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkgICAgaWYgKG9sZF9jdXJ3aW4gIT0gTlVMTCkKKwkgICAgeworCQluZWVkX2hpZGUgPSAoY3VyYnVmSXNDaGFuZ2VkKCkgJiYgY3VyYnVmLT5iX253aW5kb3dzIDw9IDEpOworCQlpZiAoIW5lZWRfaGlkZSB8fCBQX0hJRChjdXJidWYpKQorCQl7CisjIGlmZGVmIEZFQVRfR1VJCisJCSAgICBuZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworIyBlbmRpZgorCQkgICAgd2luX2Nsb3NlKGN1cndpbiwgIW5lZWRfaGlkZSAmJiAhUF9ISUQoY3VyYnVmKSk7CisJCX0KKwkgICAgfQorI2VuZGlmCisJfQorCWVsc2UgaWYgKHJlYWRvbmx5bW9kZSAmJiBjdXJidWYtPmJfbndpbmRvd3MgPT0gMSkKKwl7CisJICAgIC8qIFdoZW4gZWRpdGluZyBhbiBhbHJlYWR5IHZpc2l0ZWQgYnVmZmVyLCAncmVhZG9ubHknIHdvbid0IGJlIHNldAorCSAgICAgKiBidXQgdGhlIHByZXZpb3VzIHZhbHVlIGlzIGtlcHQuICBXaXRoICI6dmlldyIgYW5kICI6c3ZpZXciIHdlCisJICAgICAqIHdhbnQgdGhlICBmaWxlIHRvIGJlIHJlYWRvbmx5LCBleGNlcHQgd2hlbiBhbm90aGVyIHdpbmRvdyBpcworCSAgICAgKiBlZGl0aW5nIHRoZSBzYW1lIGJ1ZmZlci4gKi8KKwkgICAgY3VyYnVmLT5iX3Bfcm8gPSBUUlVFOworCX0KKwlyZWFkb25seW1vZGUgPSBuOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmIChlYXAtPmRvX2VjbWRfY21kICE9IE5VTEwpCisJICAgIGRvX2NtZGxpbmVfY21kKGVhcC0+ZG9fZWNtZF9jbWQpOworI2lmZGVmIEZFQVRfVElUTEUKKwluID0gY3Vyd2luLT53X2FyZ19pZHhfaW52YWxpZDsKKyNlbmRpZgorCWNoZWNrX2FyZ19pZHgoY3Vyd2luKTsKKyNpZmRlZiBGRUFUX1RJVExFCisJaWYgKG4gIT0gY3Vyd2luLT53X2FyZ19pZHhfaW52YWxpZCkKKwkgICAgbWFrZXRpdGxlKCk7CisjZW5kaWYKKyAgICB9CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICAvKgorICAgICAqIGlmICI6c3BsaXQgZmlsZSIgd29ya2VkLCBzZXQgYWx0ZXJuYXRlIGZpbGUgbmFtZSBpbiBvbGQgd2luZG93IHRvIG5ldworICAgICAqIGZpbGUKKyAgICAgKi8KKyAgICBpZiAob2xkX2N1cndpbiAhPSBOVUxMCisJICAgICYmICplYXAtPmFyZyAhPSBOVUwKKwkgICAgJiYgY3Vyd2luICE9IG9sZF9jdXJ3aW4KKwkgICAgJiYgd2luX3ZhbGlkKG9sZF9jdXJ3aW4pCisJICAgICYmIG9sZF9jdXJ3aW4tPndfYnVmZmVyICE9IGN1cmJ1ZikKKwlvbGRfY3Vyd2luLT53X2FsdF9mbnVtID0gY3VyYnVmLT5iX2ZudW07CisjZW5kaWYKKworICAgIGV4X25vX3JlcHJpbnQgPSBUUlVFOworfQorCisjaWZuZGVmIEZFQVRfR1VJCisvKgorICogIjpndWkiIGFuZCAiOmd2aW0iIHdoZW4gdGhlcmUgaXMgbm8gR1VJLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X25vZ3VpKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgZWFwLT5lcnJtc2cgPSBlX25vZ3ZpbTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpICYmIGRlZmluZWQoRkVBVF9NRU5VKSAmJiBkZWZpbmVkKEZFQVRfVEVBUk9GRikKKyAgICBzdGF0aWMgdm9pZAorZXhfdGVhcm9mZihlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGd1aV9tYWtlX3RlYXJvZmYoZWFwLT5hcmcpOworfQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGRUFUX0dVSV9NU1dJTikgfHwgZGVmaW5lZChGRUFUX0dVSV9HVEspKSAmJiBkZWZpbmVkKEZFQVRfTUVOVSkKKyAgICBzdGF0aWMgdm9pZAorZXhfcG9wdXAoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBndWlfbWFrZV9wb3B1cChlYXAtPmFyZyk7Cit9CisjZW5kaWYKKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2V4X3N3YXBuYW1lKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCB8fCBjdXJidWYtPmJfbWwubWxfbWZwLT5tZl9mbmFtZSA9PSBOVUxMKQorCU1TRyhfKCJObyBzd2FwIGZpbGUiKSk7CisgICAgZWxzZQorCW1zZyhjdXJidWYtPmJfbWwubWxfbWZwLT5tZl9mbmFtZSk7Cit9CisKKy8qCisgKiAiOnN5bmNiaW5kIiBmb3JjZXMgYWxsICdzY3JvbGxiaW5kJyB3aW5kb3dzIHRvIGhhdmUgdGhlIHNhbWUgcmVsYXRpdmUKKyAqIG9mZnNldC4KKyAqICgxOTk4LTExLTAyIDE2OjIxOjAxICBSLiBFZHdhcmQgUmFsc3RvbiA8ZXJhbHN0b25AY29tcHV0ZXIub3JnPikKKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2V4X3N5bmNiaW5kKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisgICAgd2luX1QJKndwOworICAgIGxvbmcJdG9wbGluZTsKKyAgICBsb25nCXk7CisgICAgbGluZW5yX1QJb2xkX2xpbmVuciA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKworICAgIHNldHBjbWFyaygpOworCisgICAgLyoKKyAgICAgKiBkZXRlcm1pbmUgbWF4IHRvcGxpbmUKKyAgICAgKi8KKyAgICBpZiAoY3Vyd2luLT53X3Bfc2NiKQorICAgIHsKKwl0b3BsaW5lID0gY3Vyd2luLT53X3RvcGxpbmU7CisJZm9yICh3cCA9IGZpcnN0d2luOyB3cDsgd3AgPSB3cC0+d19uZXh0KQorCXsKKwkgICAgaWYgKHdwLT53X3Bfc2NiICYmIHdwLT53X2J1ZmZlcikKKwkgICAgeworCQl5ID0gd3AtPndfYnVmZmVyLT5iX21sLm1sX2xpbmVfY291bnQgLSBwX3NvOworCQlpZiAodG9wbGluZSA+IHkpCisJCSAgICB0b3BsaW5lID0geTsKKwkgICAgfQorCX0KKwlpZiAodG9wbGluZSA8IDEpCisJICAgIHRvcGxpbmUgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXRvcGxpbmUgPSAxOworICAgIH0KKworCisgICAgLyoKKyAgICAgKiBzZXQgYWxsIHNjcm9sbGJpbmQgd2luZG93cyB0byB0aGUgc2FtZSB0b3BsaW5lCisgICAgICovCisgICAgd3AgPSBjdXJ3aW47CisgICAgZm9yIChjdXJ3aW4gPSBmaXJzdHdpbjsgY3Vyd2luOyBjdXJ3aW4gPSBjdXJ3aW4tPndfbmV4dCkKKyAgICB7CisJaWYgKGN1cndpbi0+d19wX3NjYikKKwl7CisJICAgIHkgPSB0b3BsaW5lIC0gY3Vyd2luLT53X3RvcGxpbmU7CisJICAgIGlmICh5ID4gMCkKKwkJc2Nyb2xsdXAoeSwgVFJVRSk7CisJICAgIGVsc2UKKwkJc2Nyb2xsZG93bigteSwgVFJVRSk7CisJICAgIGN1cndpbi0+d19zY2JpbmRfcG9zID0gdG9wbGluZTsKKwkgICAgcmVkcmF3X2xhdGVyKFZBTElEKTsKKwkgICAgY3Vyc29yX2NvcnJlY3QoKTsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkgICAgY3Vyd2luLT53X3JlZHJfc3RhdHVzID0gVFJVRTsKKyNlbmRpZgorCX0KKyAgICB9CisgICAgY3Vyd2luID0gd3A7CisgICAgaWYgKGN1cndpbi0+d19wX3NjYikKKyAgICB7CisJZGlkX3N5bmNiaW5kID0gVFJVRTsKKwljaGVja3BjbWFyaygpOworCWlmIChvbGRfbGluZW5yICE9IGN1cndpbi0+d19jdXJzb3IubG51bSkKKwl7CisJICAgIGNoYXJfdSBjdHJsX29bMl07CisKKwkgICAgY3RybF9vWzBdID0gQ3RybF9POworCSAgICBjdHJsX29bMV0gPSAwOworCSAgICBpbnNfdHlwZWJ1ZihjdHJsX28sIFJFTUFQX05PTkUsIDAsIFRSVUUsIEZBTFNFKTsKKwl9CisgICAgfQorI2VuZGlmCit9CisKKworICAgIHN0YXRpYyB2b2lkCitleF9yZWFkKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CSAgICBpOworCisgICAgaWYgKGVhcC0+dXNlZmlsdGVyKQkJCS8qIDpyIWNtZCAqLworCWRvX2JhbmcoMSwgZWFwLCBGQUxTRSwgRkFMU0UsIFRSVUUpOworICAgIGVsc2UKKyAgICB7CisJaWYgKHVfc2F2ZShlYXAtPmxpbmUyLCAobGluZW5yX1QpKGVhcC0+bGluZTIgKyAxKSkgPT0gRkFJTCkKKwkgICAgcmV0dXJuOworCisjaWZkZWYgRkVBVF9CUk9XU0UKKwlpZiAoY21kbW9kLmJyb3dzZSkKKwl7CisJICAgIGNoYXJfdSAqYnJvd3NlRmlsZTsKKworCSAgICBicm93c2VGaWxlID0gZG9fYnJvd3NlKEZBTFNFLCAoY2hhcl91ICopXygiQXBwZW5kIEZpbGUiKSwgZWFwLT5hcmcsCisJCQkJCQkgICAgTlVMTCwgTlVMTCwgTlVMTCwgY3VyYnVmKTsKKwkgICAgaWYgKGJyb3dzZUZpbGUgIT0gTlVMTCkKKwkgICAgeworCQlpID0gcmVhZGZpbGUoYnJvd3NlRmlsZSwgTlVMTCwKKwkJCSAgZWFwLT5saW5lMiwgKGxpbmVucl9UKTAsIChsaW5lbnJfVClNQVhMTlVNLCBlYXAsIDApOworCQl2aW1fZnJlZShicm93c2VGaWxlKTsKKwkgICAgfQorCSAgICBlbHNlCisJCWkgPSBPSzsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgICBpZiAoKmVhcC0+YXJnID09IE5VTCkKKwl7CisJICAgIGlmIChjaGVja19mbmFtZSgpID09IEZBSUwpCS8qIGNoZWNrIGZvciBubyBmaWxlIG5hbWUgKi8KKwkJcmV0dXJuOworCSAgICBpID0gcmVhZGZpbGUoY3VyYnVmLT5iX2ZmbmFtZSwgY3VyYnVmLT5iX2ZuYW1lLAorCQkJICBlYXAtPmxpbmUyLCAobGluZW5yX1QpMCwgKGxpbmVucl9UKU1BWExOVU0sIGVhcCwgMCk7CisJfQorCWVsc2UKKwl7CisJICAgIGlmICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fQUxUUkVBRCkgIT0gTlVMTCkKKwkJKHZvaWQpc2V0YWx0Zm5hbWUoZWFwLT5hcmcsIGVhcC0+YXJnLCAobGluZW5yX1QpMSk7CisJICAgIGkgPSByZWFkZmlsZShlYXAtPmFyZywgTlVMTCwKKwkJCSAgZWFwLT5saW5lMiwgKGxpbmVucl9UKTAsIChsaW5lbnJfVClNQVhMTlVNLCBlYXAsIDApOworCisJfQorCWlmIChpID09IEZBSUwpCisJeworI2lmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwkgICAgaWYgKCFhYm9ydGluZygpKQorI2VuZGlmCisJCUVNU0cyKF8oZV9ub3RvcGVuKSwgZWFwLT5hcmcpOworCX0KKwllbHNlCisJICAgIHJlZHJhd19jdXJidWZfbGF0ZXIoVkFMSUQpOworICAgIH0KK30KKworLyoKKyAqICI6Y2QiLCAiOmxjZCIsICI6Y2hkaXIiIGFuZCAiOmxjaGRpciIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfY2QoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBzdGF0aWMgY2hhcl91CSpwcmV2X2RpciA9IE5VTEw7CisgICAgY2hhcl91CQkqbmV3X2RpcjsKKyAgICBjaGFyX3UJCSp0b2ZyZWU7CisKKyAgICBuZXdfZGlyID0gZWFwLT5hcmc7CisjaWYgIWRlZmluZWQoVU5JWCkgJiYgIWRlZmluZWQoVk1TKQorICAgIC8qIGZvciBub24tVU5JWCAiOmNkIiBtZWFuczogcHJpbnQgY3VycmVudCBkaXJlY3RvcnkgKi8KKyAgICBpZiAoKm5ld19kaXIgPT0gTlVMKQorCWV4X3B3ZChOVUxMKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJLyogIjpjZCAtIjogQ2hhbmdlIHRvIHByZXZpb3VzIGRpcmVjdG9yeSAqLworCWlmIChTVFJDTVAobmV3X2RpciwgIi0iKSA9PSAwKQorCXsKKwkgICAgaWYgKHByZXZfZGlyID09IE5VTEwpCisJICAgIHsKKwkJRU1TRyhfKCJFMTg2OiBObyBwcmV2aW91cyBkaXJlY3RvcnkiKSk7CisJCXJldHVybjsKKwkgICAgfQorCSAgICBuZXdfZGlyID0gcHJldl9kaXI7CisJfQorCisJLyogU2F2ZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgbmV4dCAiOmNkIC0iICovCisJdG9mcmVlID0gcHJldl9kaXI7CisJaWYgKG1jaF9kaXJuYW1lKE5hbWVCdWZmLCBNQVhQQVRITCkgPT0gT0spCisJICAgIHByZXZfZGlyID0gdmltX3N0cnNhdmUoTmFtZUJ1ZmYpOworCWVsc2UKKwkgICAgcHJldl9kaXIgPSBOVUxMOworCisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykKKwkvKiBmb3IgVU5JWCAiOmNkIiBtZWFuczogZ28gdG8gaG9tZSBkaXJlY3RvcnkgKi8KKwlpZiAoKm5ld19kaXIgPT0gTlVMKQorCXsKKwkgICAgLyogdXNlIE5hbWVCdWZmIGZvciBob21lIGRpcmVjdG9yeSBuYW1lICovCisjIGlmZGVmIFZNUworCSAgICBjaGFyX3UJKnA7CisKKwkgICAgcCA9IG1jaF9nZXRlbnYoKGNoYXJfdSAqKSJTWVMkTE9HSU4iKTsKKwkgICAgaWYgKHAgPT0gTlVMTCB8fCAqcCA9PSBOVUwpCS8qIGVtcHR5IGlzIHRoZSBzYW1lIGFzIG5vdCBzZXQgKi8KKwkJTmFtZUJ1ZmZbMF0gPSBOVUw7CisJICAgIGVsc2UKKwkJU1RSTkNQWShOYW1lQnVmZiwgcCwgTUFYUEFUSEwpOworIyBlbHNlCisJICAgIGV4cGFuZF9lbnYoKGNoYXJfdSAqKSIkSE9NRSIsIE5hbWVCdWZmLCBNQVhQQVRITCk7CisjIGVuZGlmCisJICAgIG5ld19kaXIgPSBOYW1lQnVmZjsKKwl9CisjZW5kaWYKKwlpZiAobmV3X2RpciA9PSBOVUxMIHx8IHZpbV9jaGRpcihuZXdfZGlyKSkKKwkgICAgRU1TRyhfKGVfZmFpbGVkKSk7CisJZWxzZQorCXsKKwkgICAgdmltX2ZyZWUoY3Vyd2luLT53X2xvY2FsZGlyKTsKKwkgICAgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9sY2QgfHwgZWFwLT5jbWRpZHggPT0gQ01EX2xjaGRpcikKKwkgICAgeworCQkvKiBJZiBzdGlsbCBpbiBnbG9iYWwgZGlyZWN0b3J5LCBuZWVkIHRvIHJlbWVtYmVyIGN1cnJlbnQKKwkJICogZGlyZWN0b3J5IGFzIGdsb2JhbCBkaXJlY3RvcnkuICovCisJCWlmIChnbG9iYWxkaXIgPT0gTlVMTCAmJiBwcmV2X2RpciAhPSBOVUxMKQorCQkgICAgZ2xvYmFsZGlyID0gdmltX3N0cnNhdmUocHJldl9kaXIpOworCQkvKiBSZW1lbWJlciB0aGlzIGxvY2FsIGRpcmVjdG9yeSBmb3IgdGhlIHdpbmRvdy4gKi8KKwkJaWYgKG1jaF9kaXJuYW1lKE5hbWVCdWZmLCBNQVhQQVRITCkgPT0gT0spCisJCSAgICBjdXJ3aW4tPndfbG9jYWxkaXIgPSB2aW1fc3Ryc2F2ZShOYW1lQnVmZik7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qIFdlIGFyZSBub3cgaW4gdGhlIGdsb2JhbCBkaXJlY3RvcnksIG5vIG5lZWQgdG8gcmVtZW1iZXIgaXRzCisJCSAqIG5hbWUuICovCisJCXZpbV9mcmVlKGdsb2JhbGRpcik7CisJCWdsb2JhbGRpciA9IE5VTEw7CisJCWN1cndpbi0+d19sb2NhbGRpciA9IE5VTEw7CisJICAgIH0KKworCSAgICBzaG9ydGVuX2ZuYW1lcyhUUlVFKTsKKworCSAgICAvKiBFY2hvIHRoZSBuZXcgY3VycmVudCBkaXJlY3RvcnkgaWYgdGhlIGNvbW1hbmQgd2FzIHR5cGVkLiAqLworCSAgICBpZiAoS2V5VHlwZWQpCisJCWV4X3B3ZChlYXApOworCX0KKwl2aW1fZnJlZSh0b2ZyZWUpOworICAgIH0KK30KKworLyoKKyAqICI6cHdkIi4KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2V4X3B3ZChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGlmIChtY2hfZGlybmFtZShOYW1lQnVmZiwgTUFYUEFUSEwpID09IE9LKQorICAgIHsKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwlzbGFzaF9hZGp1c3QoTmFtZUJ1ZmYpOworI2VuZGlmCisJbXNnKE5hbWVCdWZmKTsKKyAgICB9CisgICAgZWxzZQorCUVNU0coXygiRTE4NzogVW5rbm93biIpKTsKK30KKworLyoKKyAqICI6PSIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfZXF1YWwoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBzbXNnKChjaGFyX3UgKikiJWxkIiwgKGxvbmcpZWFwLT5saW5lMik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZXhfc2xlZXAoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJICAgIG47CisKKyAgICBpZiAoY3Vyc29yX3ZhbGlkKCkpCisgICAgeworCW4gPSBXX1dJTlJPVyhjdXJ3aW4pICsgY3Vyd2luLT53X3dyb3cgLSBtc2dfc2Nyb2xsZWQ7CisJaWYgKG4gPj0gMCkKKwkgICAgd2luZGdvdG8oKGludCluLCBjdXJ3aW4tPndfd2NvbCk7CisgICAgfQorICAgIGRvX3NsZWVwKGVhcC0+bGluZTIgKiAoKmVhcC0+YXJnID09ICdtJyA/IDFMIDogMTAwMEwpKTsKK30KKworLyoKKyAqIFNsZWVwIGZvciAibXNlYyIgbWlsbGlzZWNvbmRzLCBidXQga2VlcCBjaGVja2luZyBmb3IgYSBDVFJMLUMgZXZlcnkgc2Vjb25kLgorICovCisgICAgdm9pZAorZG9fc2xlZXAobXNlYykKKyAgICBsb25nCW1zZWM7Cit7CisgICAgbG9uZwlkb25lOworCisgICAgY3Vyc29yX29uKCk7CisgICAgb3V0X2ZsdXNoKCk7CisgICAgZm9yIChkb25lID0gMDsgIWdvdF9pbnQgJiYgZG9uZSA8IG1zZWM7IGRvbmUgKz0gMTAwMEwpCisgICAgeworCXVpX2RlbGF5KG1zZWMgLSBkb25lID4gMTAwMEwgPyAxMDAwTCA6IG1zZWMgLSBkb25lLCBUUlVFKTsKKwl1aV9icmVha2NoZWNrKCk7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK2RvX2V4bWFwKGVhcCwgaXNhYmJyZXYpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGludAkJaXNhYmJyZXY7Cit7CisgICAgaW50CSAgICBtb2RlOworICAgIGNoYXJfdSAgKmNtZHA7CisKKyAgICBjbWRwID0gZWFwLT5jbWQ7CisgICAgbW9kZSA9IGdldF9tYXBfbW9kZSgmY21kcCwgZWFwLT5mb3JjZWl0IHx8IGlzYWJicmV2KTsKKworICAgIHN3aXRjaCAoZG9fbWFwKCgqY21kcCA9PSAnbicpID8gMiA6ICgqY21kcCA9PSAndScpLAorCQkJCQkJICAgIGVhcC0+YXJnLCBtb2RlLCBpc2FiYnJldikpCisgICAgeworCWNhc2UgMTogRU1TRyhfKGVfaW52YXJnKSk7CisJCWJyZWFrOworCWNhc2UgMjogRU1TRyhpc2FiYnJldiA/IF8oZV9ub2FiYnIpIDogXyhlX25vbWFwKSk7CisJCWJyZWFrOworICAgIH0KK30KKworLyoKKyAqICI6d2luc2l6ZSIgY29tbWFuZCAob2Jzb2xldGUpLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X3dpbnNpemUoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCXcsIGg7CisgICAgY2hhcl91CSphcmcgPSBlYXAtPmFyZzsKKyAgICBjaGFyX3UJKnA7CisKKyAgICB3ID0gZ2V0ZGlnaXRzKCZhcmcpOworICAgIGFyZyA9IHNraXB3aGl0ZShhcmcpOworICAgIHAgPSBhcmc7CisgICAgaCA9IGdldGRpZ2l0cygmYXJnKTsKKyAgICBpZiAoKnAgIT0gTlVMICYmICphcmcgPT0gTlVMKQorCXNldF9zaGVsbHNpemUodywgaCwgVFJVRSk7CisgICAgZWxzZQorCUVNU0coXygiRTQ2NTogOndpbnNpemUgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiKSk7Cit9CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBzdGF0aWMgdm9pZAorZXhfd2luY21kKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQl4Y2hhciA9IE5VTDsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBpZiAoKmVhcC0+YXJnID09ICdnJyB8fCAqZWFwLT5hcmcgPT0gQ3RybF9HKQorICAgIHsKKwkvKiBDVFJMLVcgZyBhbmQgQ1RSTC1XIENUUkwtRyAgaGF2ZSBhbiBleHRyYSBjb21tYW5kIGNoYXJhY3RlciAqLworCWlmIChlYXAtPmFyZ1sxXSA9PSBOVUwpCisJeworCSAgICBFTVNHKF8oZV9pbnZhcmcpKTsKKwkgICAgcmV0dXJuOworCX0KKwl4Y2hhciA9IGVhcC0+YXJnWzFdOworCXAgPSBlYXAtPmFyZyArIDI7CisgICAgfQorICAgIGVsc2UKKwlwID0gZWFwLT5hcmcgKyAxOworCisgICAgZWFwLT5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChwKTsKKyAgICBwID0gc2tpcHdoaXRlKHApOworICAgIGlmICgqcCAhPSBOVUwgJiYgKnAgIT0gJyInICYmIGVhcC0+bmV4dGNtZCA9PSBOVUxMKQorCUVNU0coXyhlX2ludmFyZykpOworICAgIGVsc2UKKyAgICB7CisJLyogUGFzcyBmbGFncyBvbiBmb3IgIjp2ZXJ0aWNhbCB3aW5jbWQgXSIuICovCisJcG9zdHBvbmVkX3NwbGl0X2ZsYWdzID0gY21kbW9kLnNwbGl0OworCWRvX3dpbmRvdygqZWFwLT5hcmcsIGVhcC0+YWRkcl9jb3VudCA+IDAgPyBlYXAtPmxpbmUyIDogMEwsIHhjaGFyKTsKKwlwb3N0cG9uZWRfc3BsaXRfZmxhZ3MgPSAwOworICAgIH0KK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykKKy8qCisgKiAiOndpbnBvcyIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfd2lucG9zKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQl4LCB5OworICAgIGNoYXJfdQkqYXJnID0gZWFwLT5hcmc7CisgICAgY2hhcl91CSpwOworCisgICAgaWYgKCphcmcgPT0gTlVMKQorICAgIHsKKyMgaWZkZWYgRkVBVF9HVUkKKwlpZiAoZ3VpLmluX3VzZSAmJiBndWlfbWNoX2dldF93aW5wb3MoJngsICZ5KSAhPSBGQUlMKQorCXsKKwkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiV2luZG93IHBvc2l0aW9uOiBYICVkLCBZICVkIiksIHgsIHkpOworCSAgICBtc2coSU9idWZmKTsKKwl9CisJZWxzZQorIyBlbmRpZgorCSAgICBFTVNHKF8oIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXggPSBnZXRkaWdpdHMoJmFyZyk7CisJYXJnID0gc2tpcHdoaXRlKGFyZyk7CisJcCA9IGFyZzsKKwl5ID0gZ2V0ZGlnaXRzKCZhcmcpOworCWlmICgqcCA9PSBOVUwgfHwgKmFyZyAhPSBOVUwpCisJeworCSAgICBFTVNHKF8oIkU0NjY6IDp3aW5wb3MgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiKSk7CisJICAgIHJldHVybjsKKwl9CisjIGlmZGVmIEZFQVRfR1VJCisJaWYgKGd1aS5pbl91c2UpCisJICAgIGd1aV9tY2hfc2V0X3dpbnBvcyh4LCB5KTsKKwllbHNlIGlmIChndWkuc3RhcnRpbmcpCisJeworCSAgICAvKiBSZW1lbWJlciB0aGUgY29vcmRpbmF0ZXMgZm9yIHdoZW4gdGhlIHdpbmRvdyBpcyBvcGVuZWQuICovCisJICAgIGd1aV93aW5feCA9IHg7CisJICAgIGd1aV93aW5feSA9IHk7CisJfQorIyAgaWZkZWYgSEFWRV9UR0VURU5UCisJZWxzZQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9UR0VURU5UCisJaWYgKCpUX0NXUCkKKwkgICAgdGVybV9zZXRfd2lucG9zKHgsIHkpOworIyBlbmRpZgorICAgIH0KK30KKyNlbmRpZgorCisvKgorICogSGFuZGxlIGNvbW1hbmQgdGhhdCB3b3JrIGxpa2Ugb3BlcmF0b3JzOiAiOmRlbGV0ZSIsICI6eWFuayIsICI6PiIgYW5kICI6PCIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfb3BlcmF0b3JzKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgb3BhcmdfVAlvYTsKKworICAgIGNsZWFyX29wYXJnKCZvYSk7CisgICAgb2EucmVnbmFtZSA9IGVhcC0+cmVnbmFtZTsKKyAgICBvYS5zdGFydC5sbnVtID0gZWFwLT5saW5lMTsKKyAgICBvYS5lbmQubG51bSA9IGVhcC0+bGluZTI7CisgICAgb2EubGluZV9jb3VudCA9IGVhcC0+bGluZTIgLSBlYXAtPmxpbmUxICsgMTsKKyAgICBvYS5tb3Rpb25fdHlwZSA9IE1MSU5FOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICB2aXJ0dWFsX29wID0gRkFMU0U7CisjZW5kaWYKKyAgICBpZiAoZWFwLT5jbWRpZHggIT0gQ01EX3lhbmspCS8qIHBvc2l0aW9uIGN1cnNvciBmb3IgdW5kbyAqLworICAgIHsKKwlzZXRwY21hcmsoKTsKKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBlYXAtPmxpbmUxOworCWJlZ2lubGluZShCTF9TT0wgfCBCTF9GSVgpOworICAgIH0KKworICAgIHN3aXRjaCAoZWFwLT5jbWRpZHgpCisgICAgeworCWNhc2UgQ01EX2RlbGV0ZToKKwkgICAgb2Eub3BfdHlwZSA9IE9QX0RFTEVURTsKKwkgICAgb3BfZGVsZXRlKCZvYSk7CisJICAgIGJyZWFrOworCisJY2FzZSBDTURfeWFuazoKKwkgICAgb2Eub3BfdHlwZSA9IE9QX1lBTks7CisJICAgICh2b2lkKW9wX3lhbmsoJm9hLCBGQUxTRSwgVFJVRSk7CisJICAgIGJyZWFrOworCisJZGVmYXVsdDogICAgLyogQ01EX3JzaGlmdCBvciBDTURfbHNoaWZ0ICovCisJICAgIGlmICgoZWFwLT5jbWRpZHggPT0gQ01EX3JzaGlmdCkKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkJCSAgICBeIGN1cndpbi0+d19wX3JsCisjZW5kaWYKKwkJCQkJCSAgICApCisJCW9hLm9wX3R5cGUgPSBPUF9SU0hJRlQ7CisJICAgIGVsc2UKKwkJb2Eub3BfdHlwZSA9IE9QX0xTSElGVDsKKwkgICAgb3Bfc2hpZnQoJm9hLCBGQUxTRSwgZWFwLT5hbW91bnQpOworCSAgICBicmVhazsKKyAgICB9CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorICAgIHZpcnR1YWxfb3AgPSBNQVlCRTsKKyNlbmRpZgorfQorCisvKgorICogIjpwdXQiLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X3B1dChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIC8qICI6MHB1dCIgd29ya3MgbGlrZSAiOjFwdXQhIi4gKi8KKyAgICBpZiAoZWFwLT5saW5lMiA9PSAwKQorICAgIHsKKwllYXAtPmxpbmUyID0gMTsKKwllYXAtPmZvcmNlaXQgPSBUUlVFOworICAgIH0KKyAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBlYXAtPmxpbmUyOworICAgIGRvX3B1dChlYXAtPnJlZ25hbWUsIGVhcC0+Zm9yY2VpdCA/IEJBQ0tXQVJEIDogRk9SV0FSRCwgMUwsIFBVVF9MSU5FKTsKK30KKworLyoKKyAqIEhhbmRsZSAiOmNvcHkiIGFuZCAiOm1vdmUiLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X2NvcHltb3ZlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgbG9uZwluOworCisgICAgbiA9IGdldF9hZGRyZXNzKCZlYXAtPmFyZywgRkFMU0UsIEZBTFNFKTsKKyAgICBpZiAoZWFwLT5hcmcgPT0gTlVMTCkJICAgIC8qIGVycm9yIGRldGVjdGVkICovCisgICAgeworCWVhcC0+bmV4dGNtZCA9IE5VTEw7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogbW92ZSBvciBjb3B5IGxpbmVzIGZyb20gJ2VhcC0+bGluZTEnLSdlYXAtPmxpbmUyJyB0byBiZWxvdyBsaW5lICduJworICAgICAqLworICAgIGlmIChuID09IE1BWExOVU0gfHwgbiA8IDAgfHwgbiA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorICAgIHsKKwlFTVNHKF8oZV9pbnZhZGRyKSk7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfbW92ZSkKKyAgICB7CisJaWYgKGRvX21vdmUoZWFwLT5saW5lMSwgZWFwLT5saW5lMiwgbikgPT0gRkFJTCkKKwkgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlCisJZXhfY29weShlYXAtPmxpbmUxLCBlYXAtPmxpbmUyLCBuKTsKKyAgICB1X2NsZWFybGluZSgpOworICAgIGJlZ2lubGluZShCTF9TT0wgfCBCTF9GSVgpOworfQorCisvKgorICogIjpzbWFnaWMiIGFuZCAiOnNub21hZ2ljIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9zdWJtYWdpYyhlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJbWFnaWNfc2F2ZSA9IHBfbWFnaWM7CisKKyAgICBwX21hZ2ljID0gKGVhcC0+Y21kaWR4ID09IENNRF9zbWFnaWMpOworICAgIGRvX3N1YihlYXApOworICAgIHBfbWFnaWMgPSBtYWdpY19zYXZlOworfQorCisvKgorICogIjpqb2luIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9qb2luKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gZWFwLT5saW5lMTsKKyAgICBpZiAoZWFwLT5saW5lMSA9PSBlYXAtPmxpbmUyKQorICAgIHsKKwlpZiAoZWFwLT5hZGRyX2NvdW50ID49IDIpICAgLyogOjIsMmpvaW4gZG9lcyBub3RoaW5nICovCisJICAgIHJldHVybjsKKwlpZiAoZWFwLT5saW5lMiA9PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwl7CisJICAgIGJlZXBfZmx1c2goKTsKKwkgICAgcmV0dXJuOworCX0KKwkrK2VhcC0+bGluZTI7CisgICAgfQorICAgIGRvX2RvX2pvaW4oZWFwLT5saW5lMiAtIGVhcC0+bGluZTEgKyAxLCAhZWFwLT5mb3JjZWl0KTsKKyAgICBiZWdpbmxpbmUoQkxfV0hJVEUgfCBCTF9GSVgpOworfQorCisvKgorICogIjpbYWRkcl1AciIgb3IgIjpbYWRkcl0qciI6IGV4ZWN1dGUgcmVnaXN0ZXIKKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9hdChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJYzsKKworICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGVhcC0+bGluZTI7CisKKyNpZmRlZiBVU0VfT05fRkxZX1NDUk9MTAorICAgIGRvbnRfc2Nyb2xsID0gVFJVRTsJCS8qIGRpc2FsbG93IHNjcm9sbGluZyBoZXJlICovCisjZW5kaWYKKworICAgIC8qIGdldCB0aGUgcmVnaXN0ZXIgbmFtZS4gIE5vIG5hbWUgbWVhbnMgdG8gdXNlIHRoZSBwcmV2aW91cyBvbmUgKi8KKyAgICBjID0gKmVhcC0+YXJnOworICAgIGlmIChjID09IE5VTCB8fCAoYyA9PSAnKicgJiYgKmVhcC0+Y21kID09ICcqJykpCisJYyA9ICdAJzsKKyAgICAvKiBwdXQgdGhlIHJlZ2lzdGVyIGluIG1hcGJ1ZiAqLworICAgIGlmIChkb19leGVjcmVnKGMsIFRSVUUsIHZpbV9zdHJjaHIocF9jcG8sIENQT19FWEVDQlVGKSAhPSBOVUxMKSA9PSBGQUlMKQorCWJlZXBfZmx1c2goKTsKKyAgICBlbHNlCisgICAgeworCWludAlzYXZlX2VmciA9IGV4ZWNfZnJvbV9yZWc7CisKKwlleGVjX2Zyb21fcmVnID0gVFJVRTsKKworCS8qCisJICogRXhlY3V0ZSBmcm9tIHRoZSB0eXBlYWhlYWQgYnVmZmVyLgorCSAqIE9yaWdpbmFsbHkgdGhpcyBkaWRuJ3QgY2hlY2sgZm9yIHRoZSB0eXBlYWhlYWQgYnVmZmVyIHRvIGJlIGVtcHR5LAorCSAqIHRodXMgY291bGQgcmVhZCBtb3JlIEV4IGNvbW1hbmRzIGZyb20gc3RkaW4uICBJdCdzIG5vdCBjbGVhciB3aHksCisJICogaXQgaXMgY2VydGFpbmx5IHVuZXhwZWN0ZWQuCisJICovCisJd2hpbGUgKCghc3R1ZmZfZW1wdHkoKSB8fCB0eXBlYnVmLnRiX2xlbiA+IDApICYmIHZwZWVrYygpID09ICc6JykKKwkgICAgKHZvaWQpZG9fY21kbGluZShOVUxMLCBnZXRleGxpbmUsIE5VTEwsIERPQ01EX05PV0FJVHxET0NNRF9WRVJCT1NFKTsKKworCWV4ZWNfZnJvbV9yZWcgPSBzYXZlX2VmcjsKKyAgICB9Cit9CisKKy8qCisgKiAiOiEiLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X2JhbmcoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBkb19iYW5nKGVhcC0+YWRkcl9jb3VudCwgZWFwLCBlYXAtPmZvcmNlaXQsIFRSVUUsIFRSVUUpOworfQorCisvKgorICogIjp1bmRvIi4KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2V4X3VuZG8oZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICB1X3VuZG8oMSk7Cit9CisKKy8qCisgKiAiOnJlZG8iLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfcmVkbyhlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIHVfcmVkbygxKTsKK30KKworLyoKKyAqICI6cmVkaXIiOiBzdGFydC9zdG9wIHJlZGlyZWN0aW9uLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X3JlZGlyKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcgkqbW9kZTsKKyAgICBjaGFyX3UJKmZuYW1lOworCisgICAgaWYgKFNUUklDTVAoZWFwLT5hcmcsICJFTkQiKSA9PSAwKQorCWNsb3NlX3JlZGlyKCk7CisgICAgZWxzZQorICAgIHsKKwlpZiAoKmVhcC0+YXJnID09ICc+JykKKwl7CisJICAgICsrZWFwLT5hcmc7CisJICAgIGlmICgqZWFwLT5hcmcgPT0gJz4nKQorCSAgICB7CisJCSsrZWFwLT5hcmc7CisJCW1vZGUgPSAiYSI7CisJICAgIH0KKwkgICAgZWxzZQorCQltb2RlID0gInciOworCSAgICBlYXAtPmFyZyA9IHNraXB3aGl0ZShlYXAtPmFyZyk7CisKKwkgICAgY2xvc2VfcmVkaXIoKTsKKworCSAgICAvKiBFeHBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCAifi8iLiAqLworCSAgICBmbmFtZSA9IGV4cGFuZF9lbnZfc2F2ZShlYXAtPmFyZyk7CisJICAgIGlmIChmbmFtZSA9PSBOVUxMKQorCQlyZXR1cm47CisjaWZkZWYgRkVBVF9CUk9XU0UKKwkgICAgaWYgKGNtZG1vZC5icm93c2UpCisJICAgIHsKKwkJY2hhcl91CSpicm93c2VGaWxlOworCisJCWJyb3dzZUZpbGUgPSBkb19icm93c2UoVFJVRSwgKGNoYXJfdSAqKV8oIlNhdmUgUmVkaXJlY3Rpb24iKSwKKwkJICAgICAgIGZuYW1lLCBOVUxMLCBOVUxMLCBCUk9XU0VfRklMVEVSX0FMTF9GSUxFUywgY3VyYnVmKTsKKwkJaWYgKGJyb3dzZUZpbGUgPT0gTlVMTCkKKwkJICAgIHJldHVybjsJCS8qIG9wZXJhdGlvbiBjYW5jZWxsZWQgKi8KKwkJdmltX2ZyZWUoZm5hbWUpOworCQlmbmFtZSA9IGJyb3dzZUZpbGU7CisJCWVhcC0+Zm9yY2VpdCA9IFRSVUU7CS8qIHNpbmNlIGRpYWxvZyBhbHJlYWR5IGFza2VkICovCisJICAgIH0KKyNlbmRpZgorCisJICAgIHJlZGlyX2ZkID0gb3Blbl9leGZpbGUoZm5hbWUsIGVhcC0+Zm9yY2VpdCwgbW9kZSk7CisJICAgIHZpbV9mcmVlKGZuYW1lKTsKKwl9CisjaWZkZWYgRkVBVF9FVkFMCisJZWxzZSBpZiAoKmVhcC0+YXJnID09ICdAJykKKwl7CisJICAgIC8qIHJlZGlyZWN0IHRvIGEgcmVnaXN0ZXIgYS16IChyZXNwLiBBLVogZm9yIGFwcGVuZGluZykgKi8KKwkgICAgY2xvc2VfcmVkaXIoKTsKKwkgICAgKytlYXAtPmFyZzsKKwkgICAgaWYgKEFTQ0lJX0lTQUxQSEEoKmVhcC0+YXJnKQorIyBpZmRlZiBGRUFUX0NMSVBCT0FSRAorCQkgICAgfHwgKmVhcC0+YXJnID09ICcqJworIyBlbmRpZgorCQkgICAgfHwgKmVhcC0+YXJnID09ICciJykKKwkgICAgeworCQlyZWRpcl9yZWcgPSAqZWFwLT5hcmc7CisJCWlmIChpc2xvd2VyKHJlZGlyX3JlZykKKyMgaWZkZWYgRkVBVF9DTElQQk9BUkQKKwkJCXx8IHJlZGlyX3JlZyA9PSAnKicKKyMgZW5kaWYKKwkJCXx8IHJlZGlyX3JlZyA9PSAnIicpCisJCXsKKwkJICAgIC8qIG1ha2UgcmVnaXN0ZXIgZW1wdHkgKi8KKwkJICAgIHdyaXRlX3JlZ19jb250ZW50cyhyZWRpcl9yZWcsIChjaGFyX3UgKikiIiwgLTEsIEZBTFNFKTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKwkJRU1TRyhfKGVfaW52YXJnKSk7CisJfQorI2VuZGlmCisKKwkvKiBUT0RPOiByZWRpcmVjdCB0byBhIGJ1ZmZlciAqLworCisJLyogVE9ETzogcmVkaXJlY3QgdG8gYW4gaW50ZXJuYWwgdmFyaWFibGUgKi8KKworCWVsc2UKKwkgICAgRU1TRyhfKGVfaW52YXJnKSk7CisgICAgfQorfQorCisvKgorICogIjpyZWRyYXciOiBmb3JjZSByZWRyYXcKKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9yZWRyYXcoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCXIgPSBSZWRyYXdpbmdEaXNhYmxlZDsKKyAgICBpbnQJCXAgPSBwX2x6OworCisgICAgUmVkcmF3aW5nRGlzYWJsZWQgPSAwOworICAgIHBfbHogPSBGQUxTRTsKKyAgICB1cGRhdGVfdG9wbGluZSgpOworICAgIHVwZGF0ZV9zY3JlZW4oZWFwLT5mb3JjZWl0ID8gQ0xFQVIgOgorI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIFZJc3VhbF9hY3RpdmUgPyBJTlZFUlRFRCA6CisjZW5kaWYKKwkgICAgMCk7CisjaWZkZWYgRkVBVF9USVRMRQorICAgIGlmIChuZWVkX21ha2V0aXRsZSkKKwltYWtldGl0bGUoKTsKKyNlbmRpZgorICAgIFJlZHJhd2luZ0Rpc2FibGVkID0gcjsKKyAgICBwX2x6ID0gcDsKKworICAgIC8qIFJlc2V0IG1zZ19kaWRvdXQsIHNvIHRoYXQgYSBtZXNzYWdlIHRoYXQncyB0aGVyZSBpcyBvdmVyd3JpdHRlbi4gKi8KKyAgICBtc2dfZGlkb3V0ID0gRkFMU0U7CisgICAgbXNnX2NvbCA9IDA7CisKKyAgICBvdXRfZmx1c2goKTsKK30KKworLyoKKyAqICI6cmVkcmF3c3RhdHVzIjogZm9yY2UgcmVkcmF3IG9mIHN0YXR1cyBsaW5lKHMpCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitleF9yZWRyYXdzdGF0dXMoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykKKyAgICBpbnQJCXIgPSBSZWRyYXdpbmdEaXNhYmxlZDsKKyAgICBpbnQJCXAgPSBwX2x6OworCisgICAgUmVkcmF3aW5nRGlzYWJsZWQgPSAwOworICAgIHBfbHogPSBGQUxTRTsKKyAgICBpZiAoZWFwLT5mb3JjZWl0KQorCXN0YXR1c19yZWRyYXdfYWxsKCk7CisgICAgZWxzZQorCXN0YXR1c19yZWRyYXdfY3VyYnVmKCk7CisgICAgdXBkYXRlX3NjcmVlbigKKyMgaWZkZWYgRkVBVF9WSVNVQUwKKwkgICAgVklzdWFsX2FjdGl2ZSA/IElOVkVSVEVEIDoKKyMgZW5kaWYKKwkgICAgMCk7CisgICAgUmVkcmF3aW5nRGlzYWJsZWQgPSByOworICAgIHBfbHogPSBwOworICAgIG91dF9mbHVzaCgpOworI2VuZGlmCit9CisKKyAgICBzdGF0aWMgdm9pZAorY2xvc2VfcmVkaXIoKQoreworICAgIGlmIChyZWRpcl9mZCAhPSBOVUxMKQorICAgIHsKKwlmY2xvc2UocmVkaXJfZmQpOworCXJlZGlyX2ZkID0gTlVMTDsKKyAgICB9CisjaWZkZWYgRkVBVF9FVkFMCisgICAgcmVkaXJfcmVnID0gMDsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChGRUFUX1NFU1NJT04pICYmIGRlZmluZWQoVVNFX0NSTkwpCisjIGRlZmluZSBNS1NFU1NJT05fTkwKK3N0YXRpYyBpbnQgbWtzZXNzaW9uX25sID0gRkFMU0U7ICAgIC8qIHVzZSBOTCBvbmx5IGluIHB1dF9lb2woKSAqLworI2VuZGlmCisKKy8qCisgKiAiOm1rZXhyYyIsICI6bWt2aW1yYyIsICI6bWt2aWV3IiBhbmQgIjpta3Nlc3Npb24iLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X21rcmMoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBGSUxFCSpmZDsKKyAgICBpbnQJCWZhaWxlZCA9IEZBTFNFOworICAgIGNoYXJfdQkqZm5hbWU7CisjaWZkZWYgRkVBVF9CUk9XU0UKKyAgICBjaGFyX3UJKmJyb3dzZUZpbGUgPSBOVUxMOworI2VuZGlmCisjaWZkZWYgRkVBVF9TRVNTSU9OCisgICAgaW50CQl2aWV3X3Nlc3Npb24gPSBGQUxTRTsKKyAgICBpbnQJCXVzaW5nX3ZkaXIgPSBGQUxTRTsJLyogdXNpbmcgJ3ZpZXdkaXInPyAqLworICAgIGNoYXJfdQkqdmlld0ZpbGUgPSBOVUxMOworICAgIHVuc2lnbmVkCSpmbGFncDsKKyNlbmRpZgorCisgICAgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9ta3Nlc3Npb24gfHwgZWFwLT5jbWRpZHggPT0gQ01EX21rdmlldykKKyAgICB7CisjaWZkZWYgRkVBVF9TRVNTSU9OCisJdmlld19zZXNzaW9uID0gVFJVRTsKKyNlbHNlCisJZXhfbmkoZWFwKTsKKwlyZXR1cm47CisjZW5kaWYKKyAgICB9CisKKyNpZmRlZiBGRUFUX1NFU1NJT04KKyAgICAvKiAiOm1rdmlldyIgb3IgIjpta3ZpZXcgOSI6IGdlbmVyYXRlIGZpbGUgbmFtZSB3aXRoICd2aWV3ZGlyJyAqLworICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfbWt2aWV3CisJICAgICYmICgqZWFwLT5hcmcgPT0gTlVMCisJCXx8ICh2aW1faXNkaWdpdCgqZWFwLT5hcmcpICYmIGVhcC0+YXJnWzFdID09IE5VTCkpKQorICAgIHsKKwllYXAtPmZvcmNlaXQgPSBUUlVFOworCWZuYW1lID0gZ2V0X3ZpZXdfZmlsZSgqZWFwLT5hcmcpOworCWlmIChmbmFtZSA9PSBOVUxMKQorCSAgICByZXR1cm47CisJdmlld0ZpbGUgPSBmbmFtZTsKKwl1c2luZ192ZGlyID0gVFJVRTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJaWYgKCplYXAtPmFyZyAhPSBOVUwpCisJZm5hbWUgPSBlYXAtPmFyZzsKKyAgICBlbHNlIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfbWt2aW1yYykKKwlmbmFtZSA9IChjaGFyX3UgKilWSU1SQ19GSUxFOworI2lmZGVmIEZFQVRfU0VTU0lPTgorICAgIGVsc2UgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9ta3Nlc3Npb24pCisJZm5hbWUgPSAoY2hhcl91ICopU0VTU0lPTl9GSUxFOworI2VuZGlmCisgICAgZWxzZQorCWZuYW1lID0gKGNoYXJfdSAqKUVYUkNfRklMRTsKKworI2lmZGVmIEZFQVRfQlJPV1NFCisgICAgaWYgKGNtZG1vZC5icm93c2UpCisgICAgeworCWJyb3dzZUZpbGUgPSBkb19icm93c2UoVFJVRSwKKyMgaWZkZWYgRkVBVF9TRVNTSU9OCisJCWVhcC0+Y21kaWR4ID09IENNRF9ta3ZpZXcgPyAoY2hhcl91ICopXygiU2F2ZSBWaWV3IikgOgorCQllYXAtPmNtZGlkeCA9PSBDTURfbWtzZXNzaW9uID8gKGNoYXJfdSAqKV8oIlNhdmUgU2Vzc2lvbiIpIDoKKyMgZW5kaWYKKwkJKGNoYXJfdSAqKV8oIlNhdmUgU2V0dXAiKSwKKwkJZm5hbWUsIChjaGFyX3UgKikidmltIiwgTlVMTCwgQlJPV1NFX0ZJTFRFUl9NQUNST1MsIE5VTEwpOworCWlmIChicm93c2VGaWxlID09IE5VTEwpCisJICAgIGdvdG8gdGhlZW5kOworCWZuYW1lID0gYnJvd3NlRmlsZTsKKwllYXAtPmZvcmNlaXQgPSBUUlVFOwkvKiBzaW5jZSBkaWFsb2cgYWxyZWFkeSBhc2tlZCAqLworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1NFU1NJT04pICYmIGRlZmluZWQodmltX21rZGlyKQorICAgIC8qIFdoZW4gdXNpbmcgJ3ZpZXdkaXInIG1heSBoYXZlIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5LiAqLworICAgIGlmICh1c2luZ192ZGlyICYmICFtY2hfaXNkaXIocF92ZGlyKSkKKwl2aW1fbWtkaXIocF92ZGlyLCAwNzU1KTsgLyogaWdub3JlIGVycm9ycywgb3Blbl9leGZpbGUoKSB3aWxsIGZhaWwgKi8KKyNlbmRpZgorCisgICAgZmQgPSBvcGVuX2V4ZmlsZShmbmFtZSwgZWFwLT5mb3JjZWl0LCBXUklURUJJTik7CisgICAgaWYgKGZkICE9IE5VTEwpCisgICAgeworI2lmZGVmIEZFQVRfU0VTU0lPTgorCWlmIChlYXAtPmNtZGlkeCA9PSBDTURfbWt2aWV3KQorCSAgICBmbGFncCA9ICZ2b3BfZmxhZ3M7CisJZWxzZQorCSAgICBmbGFncCA9ICZzc29wX2ZsYWdzOworI2VuZGlmCisKKyNpZmRlZiBNS1NFU1NJT05fTkwKKwkvKiAidW5peCIgaW4gJ3Nlc3Npb25vcHRpb25zJzogdXNlIE5MIGxpbmUgc2VwYXJhdG9yICovCisJaWYgKHZpZXdfc2Vzc2lvbiAmJiAoKmZsYWdwICYgU1NPUF9VTklYKSkKKwkgICAgbWtzZXNzaW9uX25sID0gVFJVRTsKKyNlbmRpZgorCisJLyogV3JpdGUgdGhlIHZlcnNpb24gY29tbWFuZCBmb3IgOm1rdmltcmMgKi8KKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX21rdmltcmMpCisJICAgICh2b2lkKXB1dF9saW5lKGZkLCAidmVyc2lvbiA2LjAiKTsKKworI2lmZGVmIEZFQVRfU0VTU0lPTgorCWlmIChlYXAtPmNtZGlkeCAhPSBDTURfbWt2aWV3KQorI2VuZGlmCisJeworCSAgICAvKiBXcml0ZSBzZXR0aW5nICdjb21wYXRpYmxlJyBmaXJzdCwgYmVjYXVzZSBpdCBoYXMgc2lkZSBlZmZlY3RzLgorCSAgICAgKiBGb3IgdGhhdCBzYW1lIHJlYXNvbiBvbmx5IGRvIGl0IHdoZW4gbmVlZGVkLiAqLworCSAgICBpZiAocF9jcCkKKwkJKHZvaWQpcHV0X2xpbmUoZmQsICJpZiAhJmNwIHwgc2V0IGNwIHwgZW5kaWYiKTsKKwkgICAgZWxzZQorCQkodm9pZClwdXRfbGluZShmZCwgImlmICZjcCB8IHNldCBub2NwIHwgZW5kaWYiKTsKKwl9CisKKyNpZmRlZiBGRUFUX1NFU1NJT04KKwlpZiAoIXZpZXdfc2Vzc2lvbgorCQl8fCAoZWFwLT5jbWRpZHggPT0gQ01EX21rc2Vzc2lvbgorCQkgICAgJiYgKCpmbGFncCAmIFNTT1BfT1BUSU9OUykpKQorI2VuZGlmCisJICAgIGZhaWxlZCB8PSAobWFrZW1hcChmZCwgTlVMTCkgPT0gRkFJTAorCQkJCSAgIHx8IG1ha2VzZXQoZmQsIE9QVF9HTE9CQUwsIEZBTFNFKSA9PSBGQUlMKTsKKworI2lmZGVmIEZFQVRfU0VTU0lPTgorCWlmICghZmFpbGVkICYmIHZpZXdfc2Vzc2lvbikKKwl7CisJICAgIGlmIChwdXRfbGluZShmZCwgImxldCBzOnNvX3NhdmUgPSAmc28gfCBsZXQgczpzaXNvX3NhdmUgPSAmc2lzbyB8IHNldCBzbz0wIHNpc289MCIpID09IEZBSUwpCisJCWZhaWxlZCA9IFRSVUU7CisJICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfbWtzZXNzaW9uKQorCSAgICB7CisJCWNoYXJfdSBkaXJub3dbTUFYUEFUSExdOwkvKiBjdXJyZW50IGRpcmVjdG9yeSAqLworCisJCS8qCisJCSAqIENoYW5nZSB0byBzZXNzaW9uIGZpbGUncyBkaXIuCisJCSAqLworCQlpZiAobWNoX2Rpcm5hbWUoZGlybm93LCBNQVhQQVRITCkgPT0gRkFJTAorCQkJCQkgICAgfHwgbWNoX2NoZGlyKChjaGFyICopZGlybm93KSAhPSAwKQorCQkgICAgKmRpcm5vdyA9IE5VTDsKKwkJaWYgKCpkaXJub3cgIT0gTlVMICYmIChzc29wX2ZsYWdzICYgU1NPUF9TRVNESVIpKQorCQl7CisJCSAgICBpZiAodmltX2NoZGlyZmlsZShmbmFtZSkgPT0gT0spCisJCQlzaG9ydGVuX2ZuYW1lcyhUUlVFKTsKKwkJfQorCQllbHNlIGlmICgqZGlybm93ICE9IE5VTAorCQkJJiYgKHNzb3BfZmxhZ3MgJiBTU09QX0NVUkRJUikgJiYgZ2xvYmFsZGlyICE9IE5VTEwpCisJCXsKKwkJICAgICh2b2lkKW1jaF9jaGRpcigoY2hhciAqKWdsb2JhbGRpcik7CisJCSAgICBzaG9ydGVuX2ZuYW1lcyhUUlVFKTsKKwkJfQorCisJCWZhaWxlZCB8PSAobWFrZW9wZW5zKGZkLCBkaXJub3cpID09IEZBSUwpOworCisJCS8qIHJlc3RvcmUgb3JpZ2luYWwgZGlyICovCisJCWlmICgqZGlybm93ICE9IE5VTCAmJiAoKHNzb3BfZmxhZ3MgJiBTU09QX1NFU0RJUikKKwkJCXx8ICgoc3NvcF9mbGFncyAmIFNTT1BfQ1VSRElSKSAmJiBnbG9iYWxkaXIgIT0gTlVMTCkpKQorCQl7CisJCSAgICBpZiAobWNoX2NoZGlyKChjaGFyICopZGlybm93KSAhPSAwKQorCQkJRU1TRyhfKGVfcHJldl9kaXIpKTsKKwkJICAgIHNob3J0ZW5fZm5hbWVzKFRSVUUpOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWZhaWxlZCB8PSAocHV0X3ZpZXcoZmQsIGN1cndpbiwgIXVzaW5nX3ZkaXIsIGZsYWdwKSA9PSBGQUlMKTsKKwkgICAgfQorCSAgICBpZiAocHV0X2xpbmUoZmQsICJsZXQgJnNvID0gczpzb19zYXZlIHwgbGV0ICZzaXNvID0gczpzaXNvX3NhdmUiKQorCQkJCQkJCQkgICAgICA9PSBGQUlMKQorCQlmYWlsZWQgPSBUUlVFOworCX0KKyNlbmRpZgorCWZhaWxlZCB8PSBmY2xvc2UoZmQpOworCisJaWYgKGZhaWxlZCkKKwkgICAgRU1TRyhfKGVfd3JpdGUpKTsKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgJiYgZGVmaW5lZChGRUFUX1NFU1NJT04pCisJZWxzZSBpZiAoZWFwLT5jbWRpZHggPT0gQ01EX21rc2Vzc2lvbikKKwl7CisJICAgIC8qIHN1Y2Nlc3NmdWwgc2Vzc2lvbiB3cml0ZSAtIHNldCB0aGlzX3Nlc3Npb24gdmFyICovCisJICAgIGNoYXJfdQl0YnVmW01BWFBBVEhMXTsKKworCSAgICBpZiAodmltX0Z1bGxOYW1lKGZuYW1lLCB0YnVmLCBNQVhQQVRITCwgRkFMU0UpID09IE9LKQorCQlzZXRfdmltX3Zhcl9zdHJpbmcoVlZfVEhJU19TRVNTSU9OLCB0YnVmLCAtMSk7CisJfQorI2VuZGlmCisjaWZkZWYgTUtTRVNTSU9OX05MCisJbWtzZXNzaW9uX25sID0gRkFMU0U7CisjZW5kaWYKKyAgICB9CisKKyNpZmRlZiBGRUFUX0JST1dTRQordGhlZW5kOgorICAgIHZpbV9mcmVlKGJyb3dzZUZpbGUpOworI2VuZGlmCisjaWZkZWYgRkVBVF9TRVNTSU9OCisgICAgdmltX2ZyZWUodmlld0ZpbGUpOworI2VuZGlmCit9CisKKy8qCisgKiBPcGVuIGEgZmlsZSBmb3Igd3JpdGluZyBmb3IgYW4gRXggY29tbWFuZCwgd2l0aCBzb21lIGNoZWNrcy4KKyAqIFJldHVybiBmaWxlIGRlc2NyaXB0b3IsIG9yIE5VTEwgb24gZmFpbHVyZS4KKyAqLworICAgIEZJTEUgKgorb3Blbl9leGZpbGUoZm5hbWUsIGZvcmNlaXQsIG1vZGUpCisgICAgY2hhcl91CSpmbmFtZTsKKyAgICBpbnQJCWZvcmNlaXQ7CisgICAgY2hhcgkqbW9kZTsJICAgIC8qICJ3IiBmb3IgY3JlYXRlIG5ldyBmaWxlIG9yICJhIiBmb3IgYXBwZW5kICovCit7CisgICAgRklMRQkqZmQ7CisKKyNpZmRlZiBVTklYCisgICAgLyogd2l0aCBVbml4IGl0IGlzIHBvc3NpYmxlIHRvIG9wZW4gYSBkaXJlY3RvcnkgKi8KKyAgICBpZiAobWNoX2lzZGlyKGZuYW1lKSkKKyAgICB7CisJRU1TRzIoXyhlX2lzYWRpcjIpLCBmbmFtZSk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCisgICAgaWYgKCFmb3JjZWl0ICYmICptb2RlICE9ICdhJyAmJiB2aW1fZmV4aXN0cyhmbmFtZSkpCisgICAgeworCUVNU0cyKF8oIkUxODk6IFwiJXNcIiBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIpLCBmbmFtZSk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKChmZCA9IG1jaF9mb3BlbigoY2hhciAqKWZuYW1lLCBtb2RlKSkgPT0gTlVMTCkKKwlFTVNHMihfKCJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciKSwgZm5hbWUpOworCisgICAgcmV0dXJuIGZkOworfQorCisvKgorICogIjptYXJrIiBhbmQgIjprIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9tYXJrKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgcG9zX1QJcG9zOworCisgICAgaWYgKCplYXAtPmFyZyA9PSBOVUwpCQkvKiBObyBhcmd1bWVudD8gKi8KKwlFTVNHKF8oZV9hcmdyZXEpKTsKKyAgICBlbHNlIGlmIChlYXAtPmFyZ1sxXSAhPSBOVUwpCS8qIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyPyAqLworCUVNU0coXyhlX3RyYWlsaW5nKSk7CisgICAgZWxzZQorICAgIHsKKwlwb3MgPSBjdXJ3aW4tPndfY3Vyc29yOwkJLyogc2F2ZSBjdXJ3aW4tPndfY3Vyc29yICovCisJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gZWFwLT5saW5lMjsKKwliZWdpbmxpbmUoQkxfV0hJVEUgfCBCTF9GSVgpOworCWlmIChzZXRtYXJrKCplYXAtPmFyZykgPT0gRkFJTCkJLyogc2V0IG1hcmsgKi8KKwkgICAgRU1TRyhfKCJFMTkxOiBBcmd1bWVudCBtdXN0IGJlIGEgbGV0dGVyIG9yIGZvcndhcmQvYmFja3dhcmQgcXVvdGUiKSk7CisJY3Vyd2luLT53X2N1cnNvciA9IHBvczsJCS8qIHJlc3RvcmUgY3Vyd2luLT53X2N1cnNvciAqLworICAgIH0KK30KKworLyoKKyAqIFVwZGF0ZSB3X3RvcGxpbmUsIHdfbGVmdGNvbCBhbmQgdGhlIGN1cnNvciBwb3NpdGlvbi4KKyAqLworICAgIHZvaWQKK3VwZGF0ZV90b3BsaW5lX2N1cnNvcigpCit7CisgICAgY2hlY2tfY3Vyc29yKCk7CQkvKiBwdXQgY3Vyc29yIG9uIHZhbGlkIGxpbmUgKi8KKyAgICB1cGRhdGVfdG9wbGluZSgpOworICAgIGlmICghY3Vyd2luLT53X3Bfd3JhcCkKKwl2YWxpZGF0ZV9jdXJzb3IoKTsKKyAgICB1cGRhdGVfY3Vyc3dhbnQoKTsKK30KKworI2lmZGVmIEZFQVRfRVhfRVhUUkEKKy8qCisgKiAiOm5vcm1hbFshXSB7Y29tbWFuZHN9IjogRXhlY3V0ZSBub3JtYWwgbW9kZSBjb21tYW5kcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9ub3JtYWwoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBvcGFyZ19UCW9hOworICAgIGludAkJc2F2ZV9tc2dfc2Nyb2xsID0gbXNnX3Njcm9sbDsKKyAgICBpbnQJCXNhdmVfcmVzdGFydF9lZGl0ID0gcmVzdGFydF9lZGl0OworICAgIGludAkJc2F2ZV9tc2dfZGlkb3V0ID0gbXNnX2RpZG91dDsKKyAgICBpbnQJCXNhdmVfU3RhdGUgPSBTdGF0ZTsKKyAgICB0YXNhdmVfVAl0YWJ1ZjsKKyAgICBpbnQJCXNhdmVfaW5zZXJ0bW9kZSA9IHBfaW07CisgICAgaW50CQlzYXZlX2ZpbmlzaF9vcCA9IGZpbmlzaF9vcDsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgY2hhcl91CSphcmcgPSBOVUxMOworICAgIGludAkJbDsKKyAgICBjaGFyX3UJKnA7CisjZW5kaWYKKworICAgIGlmIChleF9ub3JtYWxfYnVzeSA+PSBwX21tZCkKKyAgICB7CisJRU1TRyhfKCJFMTkyOiBSZWN1cnNpdmUgdXNlIG9mIDpub3JtYWwgdG9vIGRlZXAiKSk7CisJcmV0dXJuOworICAgIH0KKyAgICArK2V4X25vcm1hbF9idXN5OworCisgICAgbXNnX3Njcm9sbCA9IEZBTFNFOwkgICAgLyogbm8gbXNnIHNjcm9sbGluZyBpbiBOb3JtYWwgbW9kZSAqLworICAgIHJlc3RhcnRfZWRpdCA9IDA7CSAgICAvKiBkb24ndCBnbyB0byBJbnNlcnQgbW9kZSAqLworICAgIHBfaW0gPSBGQUxTRTsJICAgIC8qIGRvbid0IHVzZSAnaW5zZXJ0bW9kZScgKi8KKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKgorICAgICAqIHZnZXRjKCkgZXhwZWN0cyBhIENTSSBhbmQgS19TUEVDSUFMIHRvIGhhdmUgYmVlbiBlc2NhcGVkLiAgRG9uJ3QgZG8KKyAgICAgKiB0aGlzIGZvciB0aGUgS19TUEVDSUFMIGxlYWRpbmcgYnl0ZSwgb3RoZXJ3aXNlIHNwZWNpYWwga2V5cyB3aWxsIG5vdAorICAgICAqIHdvcmsuCisgICAgICovCisgICAgaWYgKGhhc19tYnl0ZSkKKyAgICB7CisJaW50CWxlbiA9IDA7CisKKwkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgZXNjYXBlZC4gKi8KKwlmb3IgKHAgPSBlYXAtPmFyZzsgKnAgIT0gTlVMOyArK3ApCisJeworIyBpZmRlZiBGRUFUX0dVSQorCSAgICBpZiAoKnAgPT0gQ1NJKSAgLyogbGVhZGJ5dGUgQ1NJICovCisJCWxlbiArPSAyOworIyBlbmRpZgorCSAgICBmb3IgKGwgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsgbCA+IDA7IC0tbCkKKwkJaWYgKCorK3AgPT0gS19TUEVDSUFMCSAgLyogdHJhaWxieXRlIEtfU1BFQ0lBTCBvciBDU0kgKi8KKyMgaWZkZWYgRkVBVF9HVUkKKwkJCXx8ICpwID09IENTSQorIyBlbmRpZgorCQkJKQorCQkgICAgbGVuICs9IDI7CisJfQorCWlmIChsZW4gPiAwKQorCXsKKwkgICAgYXJnID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4oZWFwLT5hcmcpICsgbGVuICsgMSkpOworCSAgICBpZiAoYXJnICE9IE5VTEwpCisJICAgIHsKKwkJbGVuID0gMDsKKwkJZm9yIChwID0gZWFwLT5hcmc7ICpwICE9IE5VTDsgKytwKQorCQl7CisJCSAgICBhcmdbbGVuKytdID0gKnA7CisjIGlmZGVmIEZFQVRfR1VJCisJCSAgICBpZiAoKnAgPT0gQ1NJKQorCQkgICAgeworCQkJYXJnW2xlbisrXSA9IEtTX0VYVFJBOworCQkJYXJnW2xlbisrXSA9IChpbnQpS0VfQ1NJOworCQkgICAgfQorIyBlbmRpZgorCQkgICAgZm9yIChsID0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7IGwgPiAwOyAtLWwpCisJCSAgICB7CisJCQlhcmdbbGVuKytdID0gKisrcDsKKwkJCWlmICgqcCA9PSBLX1NQRUNJQUwpCisJCQl7CisJCQkgICAgYXJnW2xlbisrXSA9IEtTX1NQRUNJQUw7CisJCQkgICAgYXJnW2xlbisrXSA9IEtFX0ZJTExFUjsKKwkJCX0KKyMgaWZkZWYgRkVBVF9HVUkKKwkJCWVsc2UgaWYgKCpwID09IENTSSkKKwkJCXsKKwkJCSAgICBhcmdbbGVuKytdID0gS1NfRVhUUkE7CisJCQkgICAgYXJnW2xlbisrXSA9IChpbnQpS0VfQ1NJOworCQkJfQorIyBlbmRpZgorCQkgICAgfQorCQkgICAgYXJnW2xlbl0gPSBOVUw7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogU2F2ZSB0aGUgY3VycmVudCB0eXBlYWhlYWQuICBUaGlzIGlzIHJlcXVpcmVkIHRvIGFsbG93IHVzaW5nICI6bm9ybWFsIgorICAgICAqIGZyb20gYW4gZXZlbnQgaGFuZGxlciBhbmQgbWFrZXMgc3VyZSB3ZSBkb24ndCBoYW5nIHdoZW4gdGhlIGFyZ3VtZW50CisgICAgICogZW5kcyB3aXRoIGhhbGYgYSBjb21tYW5kLgorICAgICAqLworICAgIHNhdmVfdHlwZWFoZWFkKCZ0YWJ1Zik7CisgICAgaWYgKHRhYnVmLnR5cGVidWZfdmFsaWQpCisgICAgeworCS8qCisJICogUmVwZWF0IHRoZSA6bm9ybWFsIGNvbW1hbmQgZm9yIGVhY2ggbGluZSBpbiB0aGUgcmFuZ2UuICBXaGVuIG5vCisJICogcmFuZ2UgZ2l2ZW4sIGV4ZWN1dGUgaXQganVzdCBvbmNlLCB3aXRob3V0IHBvc2l0aW9uaW5nIHRoZSBjdXJzb3IKKwkgKiBmaXJzdC4KKwkgKi8KKwlkbworCXsKKwkgICAgY2xlYXJfb3BhcmcoJm9hKTsKKwkgICAgZmluaXNoX29wID0gRkFMU0U7CisJICAgIGlmIChlYXAtPmFkZHJfY291bnQgIT0gMCkKKwkgICAgeworCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBlYXAtPmxpbmUxKys7CisJCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIFN0dWZmIHRoZSBhcmd1bWVudCBpbnRvIHRoZSB0eXBlYWhlYWQgYnVmZmVyLgorCSAgICAgKiBFeGVjdXRlIG5vcm1hbF9jbWQoKSB1bnRpbCB0aGVyZSBpcyBubyB0eXBlYWhlYWQgbGVmdC4KKwkgICAgICovCisJICAgIGluc190eXBlYnVmKAorI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIGFyZyAhPSBOVUxMID8gYXJnIDoKKyNlbmRpZgorCQkgICAgZWFwLT5hcmcsIGVhcC0+Zm9yY2VpdCA/IFJFTUFQX05PTkUgOiBSRU1BUF9ZRVMsIDAsCisJCQkJCQkJCSBUUlVFLCBGQUxTRSk7CisJICAgIHdoaWxlICgoIXN0dWZmX2VtcHR5KCkgfHwgKCF0eXBlYnVmX3R5cGVkKCkgJiYgdHlwZWJ1Zi50Yl9sZW4gPiAwKSkKKwkJICAgICYmICFnb3RfaW50KQorCSAgICB7CisJCXVwZGF0ZV90b3BsaW5lX2N1cnNvcigpOworCQlub3JtYWxfY21kKCZvYSwgRkFMU0UpOwkvKiBleGVjdXRlIGEgTm9ybWFsIG1vZGUgY21kICovCisJICAgIH0KKwl9CisJd2hpbGUgKGVhcC0+YWRkcl9jb3VudCA+IDAgJiYgZWFwLT5saW5lMSA8PSBlYXAtPmxpbmUyICYmICFnb3RfaW50KTsKKyAgICB9CisKKyAgICAvKiBNaWdodCBub3QgcmV0dXJuIHRvIHRoZSBtYWluIGxvb3Agd2hlbiBpbiBhbiBldmVudCBoYW5kbGVyLiAqLworICAgIHVwZGF0ZV90b3BsaW5lX2N1cnNvcigpOworCisgICAgLyogUmVzdG9yZSB0aGUgcHJldmlvdXMgdHlwZWFoZWFkLiAqLworICAgIHJlc3RvcmVfdHlwZWFoZWFkKCZ0YWJ1Zik7CisKKyAgICAtLWV4X25vcm1hbF9idXN5OworICAgIG1zZ19zY3JvbGwgPSBzYXZlX21zZ19zY3JvbGw7CisgICAgcmVzdGFydF9lZGl0ID0gc2F2ZV9yZXN0YXJ0X2VkaXQ7CisgICAgcF9pbSA9IHNhdmVfaW5zZXJ0bW9kZTsKKyAgICBmaW5pc2hfb3AgPSBzYXZlX2ZpbmlzaF9vcDsKKyAgICBtc2dfZGlkb3V0IHw9IHNhdmVfbXNnX2RpZG91dDsJLyogZG9uJ3QgcmVzZXQgbXNnX2RpZG91dCBub3cgKi8KKworICAgIC8qIFJlc3RvcmUgdGhlIHN0YXRlIChuZWVkZWQgd2hlbiBjYWxsZWQgZnJvbSBhIGZ1bmN0aW9uIGV4ZWN1dGVkIGZvcgorICAgICAqICdpbmRlbnRleHByJykuICovCisgICAgU3RhdGUgPSBzYXZlX1N0YXRlOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICB2aW1fZnJlZShhcmcpOworI2VuZGlmCit9CisKKy8qCisgKiAiOnN0YXJ0aW5zZXJ0IgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X3N0YXJ0aW5zZXJ0KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKGVhcC0+Zm9yY2VpdCkKKyAgICB7CisJY29sYWR2YW5jZSgoY29sbnJfVClNQVhDT0wpOworCWN1cndpbi0+d19jdXJzd2FudCA9IE1BWENPTDsKKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gRkFMU0U7CisJcmVzdGFydF9lZGl0ID0gJ2EnOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXJlc3RhcnRfZWRpdCA9ICdpJzsKKwljdXJ3aW4tPndfY3Vyc3dhbnQgPSAwOwkgICAgLyogYXZvaWQgTUFYQ09MICovCisgICAgfQorfQorCisvKgorICogIjpzdG9waW5zZXJ0IgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfc3RvcGluc2VydChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIHJlc3RhcnRfZWRpdCA9IDA7CisgICAgc3RvcF9pbnNlcnRfbW9kZSA9IFRSVUU7Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfRklORF9JRAorICAgIHN0YXRpYyB2b2lkCitleF9jaGVja3BhdGgoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBmaW5kX3BhdHRlcm5faW5fcGF0aChOVUxMLCAwLCAwLCBGQUxTRSwgRkFMU0UsIENIRUNLX1BBVEgsIDFMLAorCQkJCSAgIGVhcC0+Zm9yY2VpdCA/IEFDVElPTl9TSE9XX0FMTCA6IEFDVElPTl9TSE9XLAorCQkJCQkgICAgICAobGluZW5yX1QpMSwgKGxpbmVucl9UKU1BWExOVU0pOworfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKy8qCisgKiAiOnBzZWFyY2giCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfcHNlYXJjaChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGdfZG9fdGFncHJldmlldyA9IHBfcHZoOworICAgIGV4X2ZpbmRwYXQoZWFwKTsKKyAgICBnX2RvX3RhZ3ByZXZpZXcgPSAwOworfQorI2VuZGlmCisKKyAgICBzdGF0aWMgdm9pZAorZXhfZmluZHBhdChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJd2hvbGUgPSBUUlVFOworICAgIGxvbmcJbjsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlhY3Rpb247CisKKyAgICBzd2l0Y2ggKGNtZG5hbWVzW2VhcC0+Y21kaWR4XS5jbWRfbmFtZVsyXSkKKyAgICB7CisJY2FzZSAnZSc6CS8qICI6cHNlYXJjaCIsICI6aXNlYXJjaCIgYW5kICI6ZHNlYXJjaCIgKi8KKwkJaWYgKGNtZG5hbWVzW2VhcC0+Y21kaWR4XS5jbWRfbmFtZVswXSA9PSAncCcpCisJCSAgICBhY3Rpb24gPSBBQ1RJT05fR09UTzsKKwkJZWxzZQorCQkgICAgYWN0aW9uID0gQUNUSU9OX1NIT1c7CisJCWJyZWFrOworCWNhc2UgJ2knOgkvKiAiOmlsaXN0IiBhbmQgIjpkbGlzdCIgKi8KKwkJYWN0aW9uID0gQUNUSU9OX1NIT1dfQUxMOworCQlicmVhazsKKwljYXNlICd1JzoJLyogIjppanVtcCIgYW5kICI6ZGp1bXAiICovCisJCWFjdGlvbiA9IEFDVElPTl9HT1RPOworCQlicmVhazsKKwlkZWZhdWx0OgkvKiAiOmlzcGxpdCIgYW5kICI6ZHNwbGl0IiAqLworCQlhY3Rpb24gPSBBQ1RJT05fU1BMSVQ7CisJCWJyZWFrOworICAgIH0KKworICAgIG4gPSAxOworICAgIGlmICh2aW1faXNkaWdpdCgqZWFwLT5hcmcpKQkvKiBnZXQgY291bnQgKi8KKyAgICB7CisJbiA9IGdldGRpZ2l0cygmZWFwLT5hcmcpOworCWVhcC0+YXJnID0gc2tpcHdoaXRlKGVhcC0+YXJnKTsKKyAgICB9CisgICAgaWYgKCplYXAtPmFyZyA9PSAnLycpICAgLyogTWF0Y2ggcmVnZXhwLCBub3QganVzdCB3aG9sZSB3b3JkcyAqLworICAgIHsKKwl3aG9sZSA9IEZBTFNFOworCSsrZWFwLT5hcmc7CisJcCA9IHNraXBfcmVnZXhwKGVhcC0+YXJnLCAnLycsIHBfbWFnaWMsIE5VTEwpOworCWlmICgqcCkKKwl7CisJICAgICpwKysgPSBOVUw7CisJICAgIHAgPSBza2lwd2hpdGUocCk7CisKKwkgICAgLyogQ2hlY2sgZm9yIHRyYWlsaW5nIGlsbGVnYWwgY2hhcmFjdGVycyAqLworCSAgICBpZiAoIWVuZHNfZXhjbWQoKnApKQorCQllYXAtPmVycm1zZyA9IGVfdHJhaWxpbmc7CisJICAgIGVsc2UKKwkJZWFwLT5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChwKTsKKwl9CisgICAgfQorICAgIGlmICghZWFwLT5za2lwKQorCWZpbmRfcGF0dGVybl9pbl9wYXRoKGVhcC0+YXJnLCAwLCAoaW50KVNUUkxFTihlYXAtPmFyZyksCisJCQkgICAgd2hvbGUsICFlYXAtPmZvcmNlaXQsCisJCQkgICAgKmVhcC0+Y21kID09ICdkJyA/CUZJTkRfREVGSU5FIDogRklORF9BTlksCisJCQkgICAgbiwgYWN0aW9uLCBlYXAtPmxpbmUxLCBlYXAtPmxpbmUyKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9XSU5ET1dTCisKKyMgaWZkZWYgRkVBVF9RVUlDS0ZJWAorLyoKKyAqICI6cHRhZyIsICI6cHRzZWxlY3QiLCAiOnB0anVtcCIsICI6cHRuZXh0IiwgZXRjLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X3B0YWcoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBnX2RvX3RhZ3ByZXZpZXcgPSBwX3B2aDsKKyAgICBleF90YWdfY21kKGVhcCwgY21kbmFtZXNbZWFwLT5jbWRpZHhdLmNtZF9uYW1lICsgMSk7Cit9CisKKy8qCisgKiAiOnBlZGl0IgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X3BlZGl0KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgd2luX1QJKmN1cndpbl9zYXZlID0gY3Vyd2luOworCisgICAgZ19kb190YWdwcmV2aWV3ID0gcF9wdmg7CisgICAgcHJlcGFyZV90YWdwcmV2aWV3KCk7CisgICAga2VlcF9oZWxwX2ZsYWcgPSBjdXJ3aW5fc2F2ZS0+d19idWZmZXItPmJfaGVscDsKKyAgICBkb19leGVkaXQoZWFwLCBOVUxMKTsKKyAgICBrZWVwX2hlbHBfZmxhZyA9IEZBTFNFOworICAgIGlmIChjdXJ3aW4gIT0gY3Vyd2luX3NhdmUgJiYgd2luX3ZhbGlkKGN1cndpbl9zYXZlKSkKKyAgICB7CisJLyogUmV0dXJuIGN1cnNvciB0byB3aGVyZSB3ZSB3ZXJlICovCisJdmFsaWRhdGVfY3Vyc29yKCk7CisJcmVkcmF3X2xhdGVyKFZBTElEKTsKKwl3aW5fZW50ZXIoY3Vyd2luX3NhdmUsIFRSVUUpOworICAgIH0KKyAgICBnX2RvX3RhZ3ByZXZpZXcgPSAwOworfQorIyBlbmRpZgorCisvKgorICogIjpzdGFnIiwgIjpzdHNlbGVjdCIgYW5kICI6c3RqdW1wIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9zdGFnKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgcG9zdHBvbmVkX3NwbGl0ID0gLTE7CisgICAgcG9zdHBvbmVkX3NwbGl0X2ZsYWdzID0gY21kbW9kLnNwbGl0OworICAgIGV4X3RhZ19jbWQoZWFwLCBjbWRuYW1lc1tlYXAtPmNtZGlkeF0uY21kX25hbWUgKyAxKTsKKyAgICBwb3N0cG9uZWRfc3BsaXRfZmxhZ3MgPSAwOworfQorI2VuZGlmCisKKy8qCisgKiAiOnRhZyIsICI6dHNlbGVjdCIsICI6dGp1bXAiLCAiOnRuZXh0IiwgZXRjLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X3RhZyhlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGV4X3RhZ19jbWQoZWFwLCBjbWRuYW1lc1tlYXAtPmNtZGlkeF0uY21kX25hbWUpOworfQorCisgICAgc3RhdGljIHZvaWQKK2V4X3RhZ19jbWQoZWFwLCBuYW1lKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgaW50CQljbWQ7CisKKyAgICBzd2l0Y2ggKG5hbWVbMV0pCisgICAgeworCWNhc2UgJ2onOiBjbWQgPSBEVF9KVU1QOwkvKiAiOnRqdW1wIiAqLworCQkgIGJyZWFrOworCWNhc2UgJ3MnOiBjbWQgPSBEVF9TRUxFQ1Q7CS8qICI6dHNlbGVjdCIgKi8KKwkJICBicmVhazsKKwljYXNlICdwJzogY21kID0gRFRfUFJFVjsJLyogIjp0cHJldmlvdXMiICovCisJCSAgYnJlYWs7CisJY2FzZSAnTic6IGNtZCA9IERUX1BSRVY7CS8qICI6dE5leHQiICovCisJCSAgYnJlYWs7CisJY2FzZSAnbic6IGNtZCA9IERUX05FWFQ7CS8qICI6dG5leHQiICovCisJCSAgYnJlYWs7CisJY2FzZSAnbyc6IGNtZCA9IERUX1BPUDsJCS8qICI6cG9wIiAqLworCQkgIGJyZWFrOworCWNhc2UgJ2YnOgkJCS8qICI6dGZpcnN0IiAqLworCWNhc2UgJ3InOiBjbWQgPSBEVF9GSVJTVDsJLyogIjp0cmV3aW5kIiAqLworCQkgIGJyZWFrOworCWNhc2UgJ2wnOiBjbWQgPSBEVF9MQVNUOwkvKiAiOnRsYXN0IiAqLworCQkgIGJyZWFrOworCWRlZmF1bHQ6CQkJLyogIjp0YWciICovCisjaWZkZWYgRkVBVF9DU0NPUEUKKwkJICBpZiAocF9jc3QpCisJCSAgeworCQkgICAgICBkb19jc3RhZyhlYXApOworCQkgICAgICByZXR1cm47CisJCSAgfQorI2VuZGlmCisJCSAgY21kID0gRFRfVEFHOworCQkgIGJyZWFrOworICAgIH0KKworICAgIGRvX3RhZyhlYXAtPmFyZywgY21kLCBlYXAtPmFkZHJfY291bnQgPiAwID8gKGludCllYXAtPmxpbmUyIDogMSwKKwkJCQkJCQkgIGVhcC0+Zm9yY2VpdCwgVFJVRSk7Cit9CisKKy8qCisgKiBFdmFsdWF0ZSBjbWRsaW5lIHZhcmlhYmxlcy4KKyAqCisgKiBjaGFuZ2UgJyUnCSAgICB0byBjdXJidWYtPmJfZmZuYW1lCisgKgkgICcjJwkgICAgdG8gY3Vyd2luLT53X2FsdGZpbGUKKyAqCSAgJzxjd29yZD4nIHRvIHdvcmQgdW5kZXIgdGhlIGN1cnNvcgorICoJICAnPGNXT1JEPicgdG8gV09SRCB1bmRlciB0aGUgY3Vyc29yCisgKgkgICc8Y2ZpbGU+JyB0byBwYXRoIG5hbWUgdW5kZXIgdGhlIGN1cnNvcgorICoJICAnPHNmaWxlPicgdG8gc291cmNlZCBmaWxlIG5hbWUKKyAqCSAgJzxhZmlsZT4nIHRvIGZpbGUgbmFtZSBmb3IgYXV0b2NvbW1hbmQKKyAqCSAgJzxhYnVmPicgIHRvIGJ1ZmZlciBudW1iZXIgZm9yIGF1dG9jb21tYW5kCisgKgkgICc8YW1hdGNoPicgdG8gbWF0Y2hpbmcgbmFtZSBmb3IgYXV0b2NvbW1hbmQKKyAqCisgKiBXaGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLCAiZXJyb3Jtc2ciIGlzIHNldCB0byBhIG5vbi1OVUxMIHBvaW50ZXIgKG1heSBiZQorICogIiIgZm9yIGVycm9yIHdpdGhvdXQgYSBtZXNzYWdlKSBhbmQgTlVMTCBpcyByZXR1cm5lZC4KKyAqIFJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZyBpZiBhIHZhbGlkIG1hdGNoIHdhcyBmb3VuZC4KKyAqIFJldHVybnMgTlVMTCBpZiBubyBtYXRjaCB3YXMgZm91bmQuCSJ1c2VkbGVuIiB0aGVuIHN0aWxsIGNvbnRhaW5zIHRoZQorICogbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc2tpcC4KKyAqLworICAgIGNoYXJfdSAqCitldmFsX3ZhcnMoc3JjLCB1c2VkbGVuLCBsbnVtcCwgZXJyb3Jtc2csIHNyY3N0YXJ0KQorICAgIGNoYXJfdQkqc3JjOwkJLyogcG9pbnRlciBpbnRvIGNvbW1hbmRsaW5lICovCisgICAgaW50CQkqdXNlZGxlbjsJLyogY2hhcmFjdGVycyBhZnRlciBzcmMgdGhhdCBhcmUgdXNlZCAqLworICAgIGxpbmVucl9UCSpsbnVtcDsJCS8qIGxpbmUgbnVtYmVyIGZvciA6ZSBjb21tYW5kLCBvciBOVUxMICovCisgICAgY2hhcl91CSoqZXJyb3Jtc2c7CS8qIHBvaW50ZXIgdG8gZXJyb3IgbWVzc2FnZSAqLworICAgIGNoYXJfdQkqc3Jjc3RhcnQ7CS8qIGJlZ2lubmluZyBvZiB2YWxpZCBtZW1vcnkgZm9yIHNyYyAqLworeworICAgIGludAkJaTsKKyAgICBjaGFyX3UJKnM7CisgICAgY2hhcl91CSpyZXN1bHQ7CisgICAgY2hhcl91CSpyZXN1bHRidWYgPSBOVUxMOworICAgIGludAkJcmVzdWx0bGVuOworICAgIGJ1Zl9UCSpidWY7CisgICAgaW50CQl2YWxpZCA9IFZBTElEX0hFQUQgKyBWQUxJRF9QQVRIOyAgICAvKiBhc3N1bWUgdmFsaWQgcmVzdWx0ICovCisgICAgaW50CQlzcGVjX2lkeDsKKyNpZmRlZiBGRUFUX01PRElGWV9GTkFNRQorICAgIGludAkJc2tpcF9tb2QgPSBGQUxTRTsKKyNlbmRpZgorICAgIHN0YXRpYyBjaGFyICooc3BlY19zdHJbXSkgPQorCXsKKwkJICAgICIlIiwKKyNkZWZpbmUgU1BFQ19QRVJDICAgMAorCQkgICAgIiMiLAorI2RlZmluZSBTUEVDX0hBU0ggICAxCisJCSAgICAiPGN3b3JkPiIsCQkvKiBjdXJzb3Igd29yZCAqLworI2RlZmluZSBTUEVDX0NXT1JEICAyCisJCSAgICAiPGNXT1JEPiIsCQkvKiBjdXJzb3IgV09SRCAqLworI2RlZmluZSBTUEVDX0NDV09SRCAzCisJCSAgICAiPGNmaWxlPiIsCQkvKiBjdXJzb3IgcGF0aCBuYW1lICovCisjZGVmaW5lIFNQRUNfQ0ZJTEUgIDQKKwkJICAgICI8c2ZpbGU+IiwJCS8qICI6c28iIGZpbGUgbmFtZSAqLworI2RlZmluZSBTUEVDX1NGSUxFICA1CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJCSAgICAiPGFmaWxlPiIsCQkvKiBhdXRvY29tbWFuZCBmaWxlIG5hbWUgKi8KKyMgZGVmaW5lIFNQRUNfQUZJTEUgNgorCQkgICAgIjxhYnVmPiIsCQkvKiBhdXRvY29tbWFuZCBidWZmZXIgbnVtYmVyICovCisjIGRlZmluZSBTUEVDX0FCVUYgIDcKKwkJICAgICI8YW1hdGNoPiIsCQkvKiBhdXRvY29tbWFuZCBtYXRjaCBuYW1lICovCisjIGRlZmluZSBTUEVDX0FNQVRDSCA4CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorCQkgICAgIjxjbGllbnQ+IgorIyBkZWZpbmUgU1BFQ19DTElFTlQgOQorI2VuZGlmCisJCX07CisjZGVmaW5lIFNQRUNfQ09VTlQgIChzaXplb2Yoc3BlY19zdHIpIC8gc2l6ZW9mKGNoYXIgKikpCisKKyNpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkgfHwgZGVmaW5lZChGRUFUX0NMSUVOVFNFUlZFUikKKyAgICBjaGFyX3UJc3RyYnVmWzMwXTsKKyNlbmRpZgorCisgICAgKmVycm9ybXNnID0gTlVMTDsKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvLgorICAgICAqLworICAgIGZvciAoc3BlY19pZHggPSAwOyBzcGVjX2lkeCA8IFNQRUNfQ09VTlQ7ICsrc3BlY19pZHgpCisgICAgeworCSp1c2VkbGVuID0gKGludClTVFJMRU4oc3BlY19zdHJbc3BlY19pZHhdKTsKKwlpZiAoU1RSTkNNUChzcmMsIHNwZWNfc3RyW3NwZWNfaWR4XSwgKnVzZWRsZW4pID09IDApCisJICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoc3BlY19pZHggPT0gU1BFQ19DT1VOVCkJICAgIC8qIG5vIG1hdGNoICovCisgICAgeworCSp1c2VkbGVuID0gMTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNraXAgd2hlbiBwcmVjZWRlZCB3aXRoIGEgYmFja3NsYXNoICJcJSIgYW5kICJcIyIuCisgICAgICogTm90ZTogSW4gIlxcJSIgdGhlICUgaXMgYWxzbyBub3QgcmVjb2duaXplZCEKKyAgICAgKi8KKyAgICBpZiAoc3JjID4gc3Jjc3RhcnQgJiYgc3JjWy0xXSA9PSAnXFwnKQorICAgIHsKKwkqdXNlZGxlbiA9IDA7CisJU1RSQ1BZKHNyYyAtIDEsIHNyYyk7CQkvKiByZW1vdmUgYmFja3NsYXNoICovCisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiB3b3JkIG9yIFdPUkQgdW5kZXIgY3Vyc29yCisgICAgICovCisgICAgaWYgKHNwZWNfaWR4ID09IFNQRUNfQ1dPUkQgfHwgc3BlY19pZHggPT0gU1BFQ19DQ1dPUkQpCisgICAgeworCXJlc3VsdGxlbiA9IGZpbmRfaWRlbnRfdW5kZXJfY3Vyc29yKCZyZXN1bHQsIHNwZWNfaWR4ID09IFNQRUNfQ1dPUkQgPworCQkJCSAgICAgIChGSU5EX0lERU5UfEZJTkRfU1RSSU5HKSA6IEZJTkRfU1RSSU5HKTsKKwlpZiAocmVzdWx0bGVuID09IDApCisJeworCSAgICAqZXJyb3Jtc2cgPSAoY2hhcl91ICopIiI7CisJICAgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqICcjJzogQWx0ZXJuYXRlIGZpbGUgbmFtZQorICAgICAqICclJzogQ3VycmVudCBmaWxlIG5hbWUKKyAgICAgKgkgICAgRmlsZSBuYW1lIHVuZGVyIHRoZSBjdXJzb3IKKyAgICAgKgkgICAgRmlsZSBuYW1lIGZvciBhdXRvY29tbWFuZAorICAgICAqCWFuZCBmb2xsb3dpbmcgbW9kaWZpZXJzCisgICAgICovCisgICAgZWxzZQorICAgIHsKKwlzd2l0Y2ggKHNwZWNfaWR4KQorCXsKKwljYXNlIFNQRUNfUEVSQzoJCS8qICclJzogY3VycmVudCBmaWxlICovCisJCWlmIChjdXJidWYtPmJfZm5hbWUgPT0gTlVMTCkKKwkJeworCQkgICAgcmVzdWx0ID0gKGNoYXJfdSAqKSIiOworCQkgICAgdmFsaWQgPSAwOwkgICAgLyogTXVzdCBoYXZlICI6cDpoIiB0byBiZSB2YWxpZCAqLworCQl9CisJCWVsc2UKKyNpZmRlZiBSSVNDT1MKKwkJICAgIC8qIEFsd2F5cyB1c2UgdGhlIGZ1bGwgcGF0aCBmb3IgUklTQyBPUyBpZiBwb3NzaWJsZS4gKi8KKwkJICAgIHJlc3VsdCA9IGN1cmJ1Zi0+Yl9mZm5hbWU7CisJCSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisJCQlyZXN1bHQgPSBjdXJidWYtPmJfZm5hbWU7CisjZWxzZQorCQkgICAgcmVzdWx0ID0gY3VyYnVmLT5iX2ZuYW1lOworI2VuZGlmCisJCWJyZWFrOworCisJY2FzZSBTUEVDX0hBU0g6CQkvKiAnIycgb3IgIiM5OSI6IGFsdGVybmF0ZSBmaWxlICovCisJCWlmIChzcmNbMV0gPT0gJyMnKSAgLyogIiMjIjogdGhlIGFyZ3VtZW50IGxpc3QgKi8KKwkJeworCQkgICAgcmVzdWx0ID0gYXJnX2FsbCgpOworCQkgICAgcmVzdWx0YnVmID0gcmVzdWx0OworCQkgICAgKnVzZWRsZW4gPSAyOworI2lmZGVmIEZFQVRfTU9ESUZZX0ZOQU1FCisJCSAgICBza2lwX21vZCA9IFRSVUU7CisjZW5kaWYKKwkJICAgIGJyZWFrOworCQl9CisJCXMgPSBzcmMgKyAxOworCQlpID0gKGludClnZXRkaWdpdHMoJnMpOworCQkqdXNlZGxlbiA9IChpbnQpKHMgLSBzcmMpOyAvKiBsZW5ndGggb2Ygd2hhdCB3ZSBleHBhbmQgKi8KKworCQlidWYgPSBidWZsaXN0X2ZpbmRucihpKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQorCQl7CisJCSAgICAqZXJyb3Jtc2cgPSAoY2hhcl91ICopXygiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciKTsKKwkJICAgIHJldHVybiBOVUxMOworCQl9CisJCWlmIChsbnVtcCAhPSBOVUxMKQorCQkgICAgKmxudW1wID0gRUNNRF9MQVNUOworCQlpZiAoYnVmLT5iX2ZuYW1lID09IE5VTEwpCisJCXsKKwkJICAgIHJlc3VsdCA9IChjaGFyX3UgKikiIjsKKwkJICAgIHZhbGlkID0gMDsJICAgIC8qIE11c3QgaGF2ZSAiOnA6aCIgdG8gYmUgdmFsaWQgKi8KKwkJfQorCQllbHNlCisJCSAgICByZXN1bHQgPSBidWYtPmJfZm5hbWU7CisJCWJyZWFrOworCisjaWZkZWYgRkVBVF9TRUFSQ0hQQVRICisJY2FzZSBTUEVDX0NGSUxFOgkvKiBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yICovCisJCXJlc3VsdCA9IGZpbGVfbmFtZV9hdF9jdXJzb3IoRk5BTUVfTUVTU3xGTkFNRV9IWVAsIDFMKTsKKwkJaWYgKHJlc3VsdCA9PSBOVUxMKQorCQl7CisJCSAgICAqZXJyb3Jtc2cgPSAoY2hhcl91ICopIiI7CisJCSAgICByZXR1cm4gTlVMTDsKKwkJfQorCQlyZXN1bHRidWYgPSByZXN1bHQ7CSAgICAvKiByZW1lbWJlciBhbGxvY2F0ZWQgc3RyaW5nICovCisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwljYXNlIFNQRUNfQUZJTEU6CS8qIGZpbGUgbmFtZSBmb3IgYXV0b2NvbW1hbmQgKi8KKwkJcmVzdWx0ID0gYXV0b2NtZF9mbmFtZTsKKwkJaWYgKHJlc3VsdCA9PSBOVUxMKQorCQl7CisJCSAgICAqZXJyb3Jtc2cgPSAoY2hhcl91ICopXygiRTQ5NTogbm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIik7CisJCSAgICByZXR1cm4gTlVMTDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU1BFQ19BQlVGOgkJLyogYnVmZmVyIG51bWJlciBmb3IgYXV0b2NvbW1hbmQgKi8KKwkJaWYgKGF1dG9jbWRfYnVmbnIgPD0gMCkKKwkJeworCQkgICAgKmVycm9ybXNnID0gKGNoYXJfdSAqKV8oIkU0OTY6IG5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIpOworCQkgICAgcmV0dXJuIE5VTEw7CisJCX0KKwkJc3ByaW50ZigoY2hhciAqKXN0cmJ1ZiwgIiVkIiwgYXV0b2NtZF9idWZucik7CisJCXJlc3VsdCA9IHN0cmJ1ZjsKKwkJYnJlYWs7CisKKwljYXNlIFNQRUNfQU1BVENIOgkvKiBtYXRjaCBuYW1lIGZvciBhdXRvY29tbWFuZCAqLworCQlyZXN1bHQgPSBhdXRvY21kX21hdGNoOworCQlpZiAocmVzdWx0ID09IE5VTEwpCisJCXsKKwkJICAgICplcnJvcm1zZyA9IChjaGFyX3UgKilfKCJFNDk3OiBubyBhdXRvY29tbWFuZCBtYXRjaCBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFtYXRjaD5cIiIpOworCQkgICAgcmV0dXJuIE5VTEw7CisJCX0KKwkJYnJlYWs7CisKKyNlbmRpZgorCWNhc2UgU1BFQ19TRklMRToJLyogZmlsZSBuYW1lIGZvciAiOnNvIiBjb21tYW5kICovCisJCXJlc3VsdCA9IHNvdXJjaW5nX25hbWU7CisJCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJeworCQkgICAgKmVycm9ybXNnID0gKGNoYXJfdSAqKV8oIkU0OTg6IG5vIDpzb3VyY2UgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPHNmaWxlPlwiIik7CisJCSAgICByZXR1cm4gTlVMTDsKKwkJfQorCQlicmVhazsKKyNpZiBkZWZpbmVkKEZFQVRfQ0xJRU5UU0VSVkVSKQorCWNhc2UgU1BFQ19DTElFTlQ6CS8qIFNvdXJjZSBvZiBsYXN0IHN1Ym1pdHRlZCBpbnB1dCAqLworCQlzcHJpbnRmKChjaGFyICopc3RyYnVmLCAiMHgleCIsICh1bnNpZ25lZCBpbnQpY2xpZW50V2luZG93KTsKKwkJcmVzdWx0ID0gc3RyYnVmOworCQlicmVhazsKKyNlbmRpZgorCX0KKworCXJlc3VsdGxlbiA9IChpbnQpU1RSTEVOKHJlc3VsdCk7CS8qIGxlbmd0aCBvZiBuZXcgc3RyaW5nICovCisJaWYgKHNyY1sqdXNlZGxlbl0gPT0gJzwnKQkvKiByZW1vdmUgdGhlIGZpbGUgbmFtZSBleHRlbnNpb24gKi8KKwl7CisJICAgICsrKnVzZWRsZW47CisjaWZkZWYgUklTQ09TCisJICAgIGlmICgocyA9IHZpbV9zdHJyY2hyKHJlc3VsdCwgJy8nKSkgIT0gTlVMTCAmJiBzID49IGdldHRhaWwocmVzdWx0KSkKKyNlbHNlCisJICAgIGlmICgocyA9IHZpbV9zdHJyY2hyKHJlc3VsdCwgJy4nKSkgIT0gTlVMTCAmJiBzID49IGdldHRhaWwocmVzdWx0KSkKKyNlbmRpZgorCQlyZXN1bHRsZW4gPSAoaW50KShzIC0gcmVzdWx0KTsKKwl9CisjaWZkZWYgRkVBVF9NT0RJRllfRk5BTUUKKwllbHNlIGlmICghc2tpcF9tb2QpCisJeworCSAgICB2YWxpZCB8PSBtb2RpZnlfZm5hbWUoc3JjLCB1c2VkbGVuLCAmcmVzdWx0LCAmcmVzdWx0YnVmLAorCQkJCQkJCQkgICZyZXN1bHRsZW4pOworCSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisJICAgIHsKKwkJKmVycm9ybXNnID0gKGNoYXJfdSAqKSIiOworCQlyZXR1cm4gTlVMTDsKKwkgICAgfQorCX0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChyZXN1bHRsZW4gPT0gMCB8fCB2YWxpZCAhPSBWQUxJRF9IRUFEICsgVkFMSURfUEFUSCkKKyAgICB7CisJaWYgKHZhbGlkICE9IFZBTElEX0hFQUQgKyBWQUxJRF9QQVRIKQorCSAgICAvKiB4Z2V0dGV4dDpuby1jLWZvcm1hdCAqLworCSAgICAqZXJyb3Jtc2cgPSAoY2hhcl91ICopXygiRTQ5OTogRW1wdHkgZmlsZSBuYW1lIGZvciAnJScgb3IgJyMnLCBvbmx5IHdvcmtzIHdpdGggXCI6cDpoXCIiKTsKKwllbHNlCisJICAgICplcnJvcm1zZyA9IChjaGFyX3UgKilfKCJFNTAwOiBFdmFsdWF0ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIik7CisJcmVzdWx0ID0gTlVMTDsKKyAgICB9CisgICAgZWxzZQorCXJlc3VsdCA9IHZpbV9zdHJuc2F2ZShyZXN1bHQsIHJlc3VsdGxlbik7CisgICAgdmltX2ZyZWUocmVzdWx0YnVmKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ29uY2F0ZW5hdGUgYWxsIGZpbGVzIGluIHRoZSBhcmd1bWVudCBsaXN0LCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBhbmQgcmV0dXJuCisgKiBpdCBpbiBvbmUgYWxsb2NhdGVkIHN0cmluZy4KKyAqIFNwYWNlcyBhbmQgYmFja3NsYXNoZXMgaW4gdGhlIGZpbGUgbmFtZXMgYXJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaC4KKyAqIFJldHVybnMgTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2FyZ19hbGwoKQoreworICAgIGludAkJbGVuOworICAgIGludAkJaWR4OworICAgIGNoYXJfdQkqcmV0dmFsID0gTlVMTDsKKyAgICBjaGFyX3UJKnA7CisKKyAgICAvKgorICAgICAqIERvIHRoaXMgbG9vcCB0d28gdGltZXM6CisgICAgICogZmlyc3QgdGltZTogY29tcHV0ZSB0aGUgdG90YWwgbGVuZ3RoCisgICAgICogc2Vjb25kIHRpbWU6IGNvbmNhdGVuYXRlIHRoZSBuYW1lcworICAgICAqLworICAgIGZvciAoOzspCisgICAgeworCWxlbiA9IDA7CisJZm9yIChpZHggPSAwOyBpZHggPCBBUkdDT1VOVDsgKytpZHgpCisJeworCSAgICBwID0gYWxpc3RfbmFtZSgmQVJHTElTVFtpZHhdKTsKKwkgICAgaWYgKHAgIT0gTlVMTCkKKwkgICAgeworCQlpZiAobGVuID4gMCkKKwkJeworCQkgICAgLyogaW5zZXJ0IGEgc3BhY2UgaW4gYmV0d2VlbiBuYW1lcyAqLworCQkgICAgaWYgKHJldHZhbCAhPSBOVUxMKQorCQkJcmV0dmFsW2xlbl0gPSAnICc7CisJCSAgICArK2xlbjsKKwkJfQorCQlmb3IgKCA7ICpwICE9IE5VTDsgKytwKQorCQl7CisJCSAgICBpZiAoKnAgPT0gJyAnIHx8ICpwID09ICdcXCcpCisJCSAgICB7CisJCQkvKiBpbnNlcnQgYSBiYWNrc2xhc2ggKi8KKwkJCWlmIChyZXR2YWwgIT0gTlVMTCkKKwkJCSAgICByZXR2YWxbbGVuXSA9ICdcXCc7CisJCQkrK2xlbjsKKwkJICAgIH0KKwkJICAgIGlmIChyZXR2YWwgIT0gTlVMTCkKKwkJCXJldHZhbFtsZW5dID0gKnA7CisJCSAgICArK2xlbjsKKwkJfQorCSAgICB9CisJfQorCisJLyogc2Vjb25kIHRpbWU6IGJyZWFrIGhlcmUgKi8KKwlpZiAocmV0dmFsICE9IE5VTEwpCisJeworCSAgICByZXR2YWxbbGVuXSA9IE5VTDsKKwkgICAgYnJlYWs7CisJfQorCisJLyogYWxsb2NhdGUgbWVtb3J5ICovCisJcmV0dmFsID0gYWxsb2MobGVuICsgMSk7CisJaWYgKHJldHZhbCA9PSBOVUxMKQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogRXhwYW5kIHRoZSA8c2ZpbGU+IHN0cmluZyBpbiAiYXJnIi4KKyAqCisgKiBSZXR1cm5zIGFuIGFsbG9jYXRlZCBzdHJpbmcsIG9yIE5VTEwgZm9yIGFueSBlcnJvci4KKyAqLworICAgIGNoYXJfdSAqCitleHBhbmRfc2ZpbGUoYXJnKQorICAgIGNoYXJfdQkqYXJnOworeworICAgIGNoYXJfdQkqZXJyb3Jtc2c7CisgICAgaW50CQlsZW47CisgICAgY2hhcl91CSpyZXN1bHQ7CisgICAgY2hhcl91CSpuZXdyZXM7CisgICAgY2hhcl91CSpyZXBsOworICAgIGludAkJc3JjbGVuOworICAgIGNoYXJfdQkqcDsKKworICAgIHJlc3VsdCA9IHZpbV9zdHJzYXZlKGFyZyk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgZm9yIChwID0gcmVzdWx0OyAqcDsgKQorICAgIHsKKwlpZiAoU1RSTkNNUChwLCAiPHNmaWxlPiIsIDcpICE9IDApCisJICAgICsrcDsKKwllbHNlCisJeworCSAgICAvKiByZXBsYWNlICI8c2ZpbGU+IiB3aXRoIHRoZSBzb3VyY2VkIGZpbGUgbmFtZSwgYW5kIGRvICI6IiBzdHVmZiAqLworCSAgICByZXBsID0gZXZhbF92YXJzKHAsICZzcmNsZW4sIE5VTEwsICZlcnJvcm1zZywgcmVzdWx0KTsKKwkgICAgaWYgKGVycm9ybXNnICE9IE5VTEwpCisJICAgIHsKKwkJaWYgKCplcnJvcm1zZykKKwkJICAgIGVtc2coZXJyb3Jtc2cpOworCQl2aW1fZnJlZShyZXN1bHQpOworCQlyZXR1cm4gTlVMTDsKKwkgICAgfQorCSAgICBpZiAocmVwbCA9PSBOVUxMKQkJLyogbm8gbWF0Y2ggKGNhbm5vdCBoYXBwZW4pICovCisJICAgIHsKKwkJcCArPSBzcmNsZW47CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGxlbiA9IChpbnQpU1RSTEVOKHJlc3VsdCkgLSBzcmNsZW4gKyAoaW50KVNUUkxFTihyZXBsKSArIDE7CisJICAgIG5ld3JlcyA9IGFsbG9jKGxlbik7CisJICAgIGlmIChuZXdyZXMgPT0gTlVMTCkKKwkgICAgeworCQl2aW1fZnJlZShyZXBsKTsKKwkJdmltX2ZyZWUocmVzdWx0KTsKKwkJcmV0dXJuIE5VTEw7CisJICAgIH0KKwkgICAgbWNoX21lbW1vdmUobmV3cmVzLCByZXN1bHQsIChzaXplX3QpKHAgLSByZXN1bHQpKTsKKwkgICAgU1RSQ1BZKG5ld3JlcyArIChwIC0gcmVzdWx0KSwgcmVwbCk7CisJICAgIGxlbiA9IChpbnQpU1RSTEVOKG5ld3Jlcyk7CisJICAgIFNUUkNBVChuZXdyZXMsIHAgKyBzcmNsZW4pOworCSAgICB2aW1fZnJlZShyZXBsKTsKKwkgICAgdmltX2ZyZWUocmVzdWx0KTsKKwkgICAgcmVzdWx0ID0gbmV3cmVzOworCSAgICBwID0gbmV3cmVzICsgbGVuOwkJLyogY29udGludWUgYWZ0ZXIgdGhlIG1hdGNoICovCisJfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfU0VTU0lPTgorc3RhdGljIGludCBzZXNfd2luc2l6ZXMgX19BUkdTKChGSUxFICpmZCwgaW50IHJlc3RvcmVfc2l6ZSkpOworc3RhdGljIGludCBzZXNfd2luX3JlYyBfX0FSR1MoKEZJTEUgKmZkLCBmcmFtZV9UICpmcikpOworc3RhdGljIGZyYW1lX1QgKnNlc19za2lwZnJhbWUgX19BUkdTKChmcmFtZV9UICpmcikpOworc3RhdGljIGludCBzZXNfZG9fZnJhbWUgX19BUkdTKChmcmFtZV9UICpmcikpOworc3RhdGljIGludCBzZXNfZG9fd2luIF9fQVJHUygod2luX1QgKndwKSk7CitzdGF0aWMgaW50IHNlc19hcmdsaXN0IF9fQVJHUygoRklMRSAqZmQsIGNoYXIgKmNtZCwgZ2FycmF5X1QgKmdhcCwgaW50IGZ1bGxuYW1lLCB1bnNpZ25lZCAqZmxhZ3ApKTsKK3N0YXRpYyBpbnQgc2VzX3B1dF9mbmFtZSBfX0FSR1MoKEZJTEUgKmZkLCBjaGFyX3UgKm5hbWUsIHVuc2lnbmVkICpmbGFncCkpOworc3RhdGljIGludCBzZXNfZm5hbWUgX19BUkdTKChGSUxFICpmZCwgYnVmX1QgKmJ1ZiwgdW5zaWduZWQgKmZsYWdwKSk7CisKKy8qCisgKiBXcml0ZSBvcGVuZmlsZSBjb21tYW5kcyBmb3IgdGhlIGN1cnJlbnQgYnVmZmVycyB0byBhbiAuZXhyYyBmaWxlLgorICogUmV0dXJuIEZBSUwgb24gZXJyb3IsIE9LIG90aGVyd2lzZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK21ha2VvcGVucyhmZCwgZGlybm93KQorICAgIEZJTEUJKmZkOworICAgIGNoYXJfdQkqZGlybm93OwkvKiBDdXJyZW50IGRpcmVjdG9yeSBuYW1lICovCit7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCW9ubHlfc2F2ZV93aW5kb3dzID0gVFJVRTsKKyAgICBpbnQJCW5yOworICAgIGludAkJY25yID0gMTsKKyAgICBpbnQJCXJlc3RvcmVfc2l6ZSA9IFRSVUU7CisgICAgd2luX1QJKndwOworICAgIGNoYXJfdQkqc25hbWU7CisgICAgd2luX1QJKmVkaXRlZF93aW4gPSBOVUxMOworCisgICAgaWYgKHNzb3BfZmxhZ3MgJiBTU09QX0JVRkZFUlMpCisJb25seV9zYXZlX3dpbmRvd3MgPSBGQUxTRTsJCS8qIFNhdmUgQUxMIGJ1ZmZlcnMgKi8KKworICAgIC8qCisgICAgICogQmVnaW4gYnkgc2V0dGluZyB0aGUgdGhpc19zZXNzaW9uIHZhcmlhYmxlLCBhbmQgdGhlbiBvdGhlcgorICAgICAqIHNlc3Npb25hYmxlIHZhcmlhYmxlcy4KKyAgICAgKi8KKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBpZiAocHV0X2xpbmUoZmQsICJsZXQgdjp0aGlzX3Nlc3Npb249ZXhwYW5kKFwiPHNmaWxlPjpwXCIpIikgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKyAgICBpZiAoc3NvcF9mbGFncyAmIFNTT1BfR0xPQkFMUykKKwlpZiAoc3RvcmVfc2Vzc2lvbl9nbG9iYWxzKGZkKSA9PSBGQUlMKQorCSAgICByZXR1cm4gRkFJTDsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDbG9zZSBhbGwgd2luZG93cyBidXQgb25lLgorICAgICAqLworICAgIGlmIChwdXRfbGluZShmZCwgInNpbGVudCBvbmx5IikgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogTm93IGEgOmNkIGNvbW1hbmQgdG8gdGhlIHNlc3Npb24gZGlyZWN0b3J5IG9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorICAgICAqLworICAgIGlmIChzc29wX2ZsYWdzICYgU1NPUF9TRVNESVIpCisgICAgeworCWlmIChwdXRfbGluZShmZCwgImV4ZSBcImNkIFwiIC4gZXhwYW5kKFwiPHNmaWxlPjpwOmhcIikiKSA9PSBGQUlMKQorCSAgICByZXR1cm4gRkFJTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc3NvcF9mbGFncyAmIFNTT1BfQ1VSRElSKQorICAgIHsKKwlzbmFtZSA9IGhvbWVfcmVwbGFjZV9zYXZlKE5VTEwsIGdsb2JhbGRpciAhPSBOVUxMID8gZ2xvYmFsZGlyIDogZGlybm93KTsKKwlpZiAoc25hbWUgPT0gTlVMTAorCQl8fCBmcHJpbnRmKGZkLCAiY2QgJXMiLCBzbmFtZSkgPCAwIHx8IHB1dF9lb2woZmQpID09IEZBSUwpCisJICAgIHJldHVybiBGQUlMOworCXZpbV9mcmVlKHNuYW1lKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE5vdyBzYXZlIHRoZSBjdXJyZW50IGZpbGVzLCBjdXJyZW50IGJ1ZmZlciBmaXJzdC4KKyAgICAgKi8KKyAgICBpZiAocHV0X2xpbmUoZmQsICJzZXQgc2hvcnRtZXNzPWFvTyIpID09IEZBSUwpCisJcmV0dXJuIEZBSUw7CisKKyAgICAvKiBOb3cgcHV0IHRoZSBvdGhlciBidWZmZXJzIGludG8gdGhlIGJ1ZmZlciBsaXN0ICovCisgICAgZm9yIChidWYgPSBmaXJzdGJ1ZjsgYnVmICE9IE5VTEw7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorICAgIHsKKwlpZiAoIShvbmx5X3NhdmVfd2luZG93cyAmJiBidWYtPmJfbndpbmRvd3MgPT0gMCkKKwkJJiYgIShidWYtPmJfaGVscCAmJiAhKHNzb3BfZmxhZ3MgJiBTU09QX0hFTFApKQorCQkmJiBidWYtPmJfZm5hbWUgIT0gTlVMTAorCQkmJiBidWYtPmJfcF9ibCkKKwl7CisJICAgIGlmIChmcHJpbnRmKGZkLCAiYmFkZCArJWxkICIsIGJ1Zi0+Yl93aW5pbmZvID09IE5VTEwgPyAxTAorCQkJCQkgICA6IGJ1Zi0+Yl93aW5pbmZvLT53aV9mcG9zLmxudW0pIDwgMAorCQkgICAgfHwgc2VzX2ZuYW1lKGZkLCBidWYsICZzc29wX2ZsYWdzKSA9PSBGQUlMKQorCQlyZXR1cm4gRkFJTDsKKwl9CisgICAgfQorCisgICAgLyogdGhlIGdsb2JhbCBhcmd1bWVudCBsaXN0ICovCisgICAgaWYgKHNlc19hcmdsaXN0KGZkLCAiYXJncyIsICZnbG9iYWxfYWxpc3QuYWxfZ2EsCisJCQkgICAgIShzc29wX2ZsYWdzICYgU1NPUF9DVVJESVIpLCAmc3NvcF9mbGFncykgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIGlmIChzc29wX2ZsYWdzICYgU1NPUF9SRVNJWkUpCisgICAgeworCS8qIE5vdGU6IGFmdGVyIHRoZSByZXN0b3JlIHdlIHN0aWxsIGNoZWNrIGl0IHdvcmtlZCEqLworCWlmIChmcHJpbnRmKGZkLCAic2V0IGxpbmVzPSVsZCBjb2x1bW5zPSVsZCIgLCBSb3dzLCBDb2x1bW5zKSA8IDAKKwkJfHwgcHV0X2VvbChmZCkgPT0gRkFJTCkKKwkgICAgcmV0dXJuIEZBSUw7CisgICAgfQorCisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSAmJiAoc3NvcF9mbGFncyAmIFNTT1BfV0lOUE9TKSkKKyAgICB7CisJaW50CXgsIHk7CisKKwlpZiAoZ3VpX21jaF9nZXRfd2lucG9zKCZ4LCAmeSkgPT0gT0spCisJeworCSAgICAvKiBOb3RlOiBhZnRlciB0aGUgcmVzdG9yZSB3ZSBzdGlsbCBjaGVjayBpdCB3b3JrZWQhKi8KKwkgICAgaWYgKGZwcmludGYoZmQsICJ3aW5wb3MgJWQgJWQiLCB4LCB5KSA8IDAgfHwgcHV0X2VvbChmZCkgPT0gRkFJTCkKKwkJcmV0dXJuIEZBSUw7CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBCZWZvcmUgY3JlYXRpbmcgdGhlIHdpbmRvdyBsYXlvdXQsIHRyeSBsb2FkaW5nIG9uZSBmaWxlLiAgSWYgdGhpcyBpcworICAgICAqIGFib3J0ZWQgd2UgZG9uJ3QgZW5kIHVwIHdpdGggYSBudW1iZXIgb2YgdXNlbGVzcyB3aW5kb3dzLgorICAgICAqIFRoaXMgbWF5IGhhdmUgc2lkZSBlZmZlY3RzISAoZS5nLiwgY29tcHJlc3NlZCBvciBuZXR3b3JrIGZpbGUpLgorICAgICAqLworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gTlVMTDsgd3AgPSB3cC0+d19uZXh0KQorICAgIHsKKwlpZiAoc2VzX2RvX3dpbih3cCkKKwkJJiYgd3AtPndfYnVmZmVyLT5iX2ZmbmFtZSAhPSBOVUxMCisJCSYmICF3cC0+d19idWZmZXItPmJfaGVscAorI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKwkJJiYgIWJ0X25vZmlsZSh3cC0+d19idWZmZXIpCisjZW5kaWYKKwkJKQorCXsKKwkgICAgaWYgKGZwdXRzKCJlZGl0ICIsIGZkKSA8IDAKKwkJICAgIHx8IHNlc19mbmFtZShmZCwgd3AtPndfYnVmZmVyLCAmc3NvcF9mbGFncykgPT0gRkFJTCkKKwkJcmV0dXJuIEZBSUw7CisJICAgIGlmICghd3AtPndfYXJnX2lkeF9pbnZhbGlkKQorCQllZGl0ZWRfd2luID0gd3A7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFNhdmUgY3VycmVudCB3aW5kb3cgbGF5b3V0LgorICAgICAqLworICAgIGlmIChwdXRfbGluZShmZCwgInNldCBzcGxpdGJlbG93IHNwbGl0cmlnaHQiKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworICAgIGlmIChzZXNfd2luX3JlYyhmZCwgdG9wZnJhbWUpID09IEZBSUwpCisJcmV0dXJuIEZBSUw7CisgICAgaWYgKCFwX3NiICYmIHB1dF9saW5lKGZkLCAic2V0IG5vc3BsaXRiZWxvdyIpID09IEZBSUwpCisJcmV0dXJuIEZBSUw7CisgICAgaWYgKCFwX3NwciAmJiBwdXRfbGluZShmZCwgInNldCBub3NwbGl0cmlnaHQiKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiB3aW5kb3cgc2l6ZXMgY2FuIGJlIHJlc3RvcmVkIChubyB3aW5kb3dzIG9taXR0ZWQpLgorICAgICAqIFJlbWVtYmVyIHRoZSB3aW5kb3cgbnVtYmVyIG9mIHRoZSBjdXJyZW50IHdpbmRvdyBhZnRlciByZXN0b3JpbmcuCisgICAgICovCisgICAgbnIgPSAwOworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gTlVMTDsgd3AgPSBXX05FWFQod3ApKQorICAgIHsKKwlpZiAoc2VzX2RvX3dpbih3cCkpCisJICAgICsrbnI7CisJZWxzZQorCSAgICByZXN0b3JlX3NpemUgPSBGQUxTRTsKKwlpZiAoY3Vyd2luID09IHdwKQorCSAgICBjbnIgPSBucjsKKyAgICB9CisKKyAgICAvKiBHbyB0byB0aGUgZmlyc3Qgd2luZG93LiAqLworICAgIGlmIChwdXRfbGluZShmZCwgIndpbmNtZCB0IikgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogSWYgbW9yZSB0aGFuIG9uZSB3aW5kb3csIHNlZSBpZiBzaXplcyBjYW4gYmUgcmVzdG9yZWQuCisgICAgICogRmlyc3Qgc2V0ICd3aW5oZWlnaHQnIGFuZCAnd2lud2lkdGgnIHRvIDEgdG8gYXZvaWQgdGhlIHdpbmRvd3MgYmVpbmcKKyAgICAgKiByZXNpemVkIHdoZW4gbW92aW5nIGJldHdlZW4gd2luZG93cy4KKyAgICAgKiBEbyB0aGlzIGJlZm9yZSByZXN0b3JpbmcgdGhlIHZpZXcsIHNvIHRoYXQgdGhlIHRvcGxpbmUgYW5kIHRoZSBjdXJzb3IKKyAgICAgKiBjYW4gYmUgc2V0LiAgVGhpcyBpcyBkb25lIGFnYWluIGJlbG93LgorICAgICAqLworICAgIGlmIChwdXRfbGluZShmZCwgInNldCB3aW5oZWlnaHQ9MSB3aW53aWR0aD0xIikgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKyAgICBpZiAobnIgPiAxICYmIHNlc193aW5zaXplcyhmZCwgcmVzdG9yZV9zaXplKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworCisgICAgLyoKKyAgICAgKiBSZXN0b3JlIHRoZSB2aWV3IG9mIHRoZSB3aW5kb3cgKG9wdGlvbnMsIGZpbGUsIGN1cnNvciwgZXRjLikuCisgICAgICovCisgICAgZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSBOVUxMOyB3cCA9IHdwLT53X25leHQpCisgICAgeworCWlmICghc2VzX2RvX3dpbih3cCkpCisJICAgIGNvbnRpbnVlOworCWlmIChwdXRfdmlldyhmZCwgd3AsIHdwICE9IGVkaXRlZF93aW4sICZzc29wX2ZsYWdzKSA9PSBGQUlMKQorCSAgICByZXR1cm4gRkFJTDsKKwlpZiAobnIgPiAxICYmIHB1dF9saW5lKGZkLCAid2luY21kIHciKSA9PSBGQUlMKQorCSAgICByZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlc3RvcmUgY3Vyc29yIHRvIHRoZSBjdXJyZW50IHdpbmRvdyBpZiBpdCdzIG5vdCB0aGUgZmlyc3Qgb25lLgorICAgICAqLworICAgIGlmIChjbnIgPiAxICYmIChmcHJpbnRmKGZkLCAiJWR3aW5jbWQgdyIsIGNucikgPCAwIHx8IHB1dF9lb2woZmQpID09IEZBSUwpKQorCXJldHVybiBGQUlMOworCisgICAgLyoKKyAgICAgKiBSZXN0b3JlIHdpbmRvdyBzaXplcyBhZ2FpbiBhZnRlciBqdW1waW5nIGFyb3VuZCBpbiB3aW5kb3dzLCBiZWNhdXNlIHRoZQorICAgICAqIGN1cnJlbnQgd2luZG93IGhhcyBhIG1pbmltdW0gc2l6ZSB3aGlsZSBvdGhlcnMgbWF5IG5vdC4KKyAgICAgKi8KKyAgICBpZiAobnIgPiAxICYmIHNlc193aW5zaXplcyhmZCwgcmVzdG9yZV9zaXplKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworCisgICAgLyogUmUtYXBwbHkgJ3dpbmhlaWdodCcsICd3aW53aWR0aCcgYW5kICdzaG9ydG1lc3MnLiAqLworICAgIGlmIChmcHJpbnRmKGZkLCAic2V0IHdpbmhlaWdodD0lbGQgd2lud2lkdGg9JWxkIHNob3J0bWVzcz0lcyIsCisJCQkgICAgICAgcF93aCwgcF93aXcsIHBfc2htKSA8IDAgfHwgcHV0X2VvbChmZCkgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogTGFzdGx5LCBleGVjdXRlIHRoZSB4LnZpbSBmaWxlIGlmIGl0IGV4aXN0cy4KKyAgICAgKi8KKyAgICBpZiAocHV0X2xpbmUoZmQsICJsZXQgczpzeCA9IGV4cGFuZChcIjxzZmlsZT46cDpyXCIpLlwieC52aW1cIiIpID09IEZBSUwKKwkgICAgfHwgcHV0X2xpbmUoZmQsICJpZiBmaWxlX3JlYWRhYmxlKHM6c3gpIikgPT0gRkFJTAorCSAgICB8fCBwdXRfbGluZShmZCwgIiAgZXhlIFwic291cmNlIFwiIC4gczpzeCIpID09IEZBSUwKKwkgICAgfHwgcHV0X2xpbmUoZmQsICJlbmRpZiIpID09IEZBSUwpCisJcmV0dXJuIEZBSUw7CisKKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICBzdGF0aWMgaW50CitzZXNfd2luc2l6ZXMoZmQsIHJlc3RvcmVfc2l6ZSkKKyAgICBGSUxFCSpmZDsKKyAgICBpbnQJCXJlc3RvcmVfc2l6ZTsKK3sKKyAgICBpbnQJCW4gPSAwOworICAgIHdpbl9UCSp3cDsKKworICAgIGlmIChyZXN0b3JlX3NpemUgJiYgKHNzb3BfZmxhZ3MgJiBTU09QX1dJTlNJWkUpKQorICAgIHsKKwlmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwl7CisJICAgIGlmICghc2VzX2RvX3dpbih3cCkpCisJCWNvbnRpbnVlOworCSAgICArK247CisKKwkgICAgLyogcmVzdG9yZSBoZWlnaHQgd2hlbiBub3QgZnVsbCBoZWlnaHQgKi8KKwkgICAgaWYgKHdwLT53X2hlaWdodCArIHdwLT53X3N0YXR1c19oZWlnaHQgPCB0b3BmcmFtZS0+ZnJfaGVpZ2h0CisJCSAgICAmJiAoZnByaW50ZihmZCwKKwkJCSAgImV4ZSAnJWRyZXNpemUgJyAuICgoJmxpbmVzICogJWxkICsgJWxkKSAvICVsZCkiLAorCQkJICAgIG4sIChsb25nKXdwLT53X2hlaWdodCwgUm93cyAvIDIsIFJvd3MpIDwgMAorCQkJCQkJICB8fCBwdXRfZW9sKGZkKSA9PSBGQUlMKSkKKwkJcmV0dXJuIEZBSUw7CisKKwkgICAgLyogcmVzdG9yZSB3aWR0aCB3aGVuIG5vdCBmdWxsIHdpZHRoICovCisJICAgIGlmICh3cC0+d193aWR0aCA8IENvbHVtbnMgJiYgKGZwcmludGYoZmQsCisJCSAgICJleGUgJ3ZlcnQgJWRyZXNpemUgJyAuICgoJmNvbHVtbnMgKiAlbGQgKyAlbGQpIC8gJWxkKSIsCisJCQkgICAgbiwgKGxvbmcpd3AtPndfd2lkdGgsIENvbHVtbnMgLyAyLCBDb2x1bW5zKSA8IDAKKwkJCQkJCSAgfHwgcHV0X2VvbChmZCkgPT0gRkFJTCkpCisJCXJldHVybiBGQUlMOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBKdXN0IGVxdWFsaXNlIHdpbmRvdyBzaXplcyAqLworCWlmIChwdXRfbGluZShmZCwgIndpbmNtZCA9IikgPT0gRkFJTCkKKwkgICAgcmV0dXJuIEZBSUw7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFdyaXRlIGNvbW1hbmRzIHRvICJmZCIgdG8gcmVjdXJzaXZlbHkgY3JlYXRlIHdpbmRvd3MgZm9yIGZyYW1lICJmciIsCisgKiBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkgc3BsaXQuCisgKiBBZnRlciB0aGUgY29tbWFuZHMgdGhlIGxhc3Qgd2luZG93IGluIHRoZSBmcmFtZSBpcyB0aGUgY3VycmVudCB3aW5kb3cuCisgKiBSZXR1cm5zIEZBSUwgd2hlbiB3cml0aW5nIHRoZSBjb21tYW5kcyB0byAiZmQiIGZhaWxzLgorICovCisgICAgc3RhdGljIGludAorc2VzX3dpbl9yZWMoZmQsIGZyKQorICAgIEZJTEUJKmZkOworICAgIGZyYW1lX1QJKmZyOworeworICAgIGZyYW1lX1QJKmZyYzsKKyAgICBpbnQJCWNvdW50ID0gMDsKKworICAgIGlmIChmci0+ZnJfbGF5b3V0ICE9IEZSX0xFQUYpCisgICAgeworCS8qIEZpbmQgZmlyc3QgZnJhbWUgdGhhdCdzIG5vdCBza2lwcGVkIGFuZCB0aGVuIGNyZWF0ZSBhIHdpbmRvdyBmb3IKKwkgKiBlYWNoIGZvbGxvd2luZyBvbmUgKGZpcnN0IGZyYW1lIGlzIGFscmVhZHkgdGhlcmUpLiAqLworCWZyYyA9IHNlc19za2lwZnJhbWUoZnItPmZyX2NoaWxkKTsKKwlpZiAoZnJjICE9IE5VTEwpCisJICAgIHdoaWxlICgoZnJjID0gc2VzX3NraXBmcmFtZShmcmMtPmZyX25leHQpKSAhPSBOVUxMKQorCSAgICB7CisJCS8qIE1ha2Ugd2luZG93IGFzIGJpZyBhcyBwb3NzaWJsZSBzbyB0aGF0IHdlIGhhdmUgbG90cyBvZiByb29tCisJCSAqIHRvIHNwbGl0LiAqLworCQlpZiAocHV0X2xpbmUoZmQsICJ3aW5jbWQgXyB8IHdpbmNtZCB8IikgPT0gRkFJTAorCQkJfHwgcHV0X2xpbmUoZmQsIGZyLT5mcl9sYXlvdXQgPT0gRlJfQ09MCisJCQkJCQk/ICJzcGxpdCIgOiAidnNwbGl0IikgPT0gRkFJTCkKKwkJICAgIHJldHVybiBGQUlMOworCQkrK2NvdW50OworCSAgICB9CisKKwkvKiBHbyBiYWNrIHRvIHRoZSBmaXJzdCB3aW5kb3cuICovCisJaWYgKGNvdW50ID4gMCAmJiAoZnByaW50ZihmZCwgZnItPmZyX2xheW91dCA9PSBGUl9DT0wKKwkJCT8gIiVkd2luY21kIGsiIDogIiVkd2luY21kIGgiLCBjb3VudCkgPCAwCisJCQkJCQkgICAgICB8fCBwdXRfZW9sKGZkKSA9PSBGQUlMKSkKKwkgICAgcmV0dXJuIEZBSUw7CisKKwkvKiBSZWN1cnNpdmVseSBjcmVhdGUgZnJhbWVzL3dpbmRvd3MgaW4gZWFjaCB3aW5kb3cgb2YgdGhpcyBjb2x1bW4gb3IKKwkgKiByb3cuICovCisJZnJjID0gc2VzX3NraXBmcmFtZShmci0+ZnJfY2hpbGQpOworCXdoaWxlIChmcmMgIT0gTlVMTCkKKwl7CisJICAgIHNlc193aW5fcmVjKGZkLCBmcmMpOworCSAgICBmcmMgPSBzZXNfc2tpcGZyYW1lKGZyYy0+ZnJfbmV4dCk7CisJICAgIC8qIEdvIHRvIG5leHQgd2luZG93LiAqLworCSAgICBpZiAoZnJjICE9IE5VTEwgJiYgcHV0X2xpbmUoZmQsICJ3aW5jbWQgdyIpID09IEZBSUwpCisJCXJldHVybiBGQUlMOworCX0KKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogU2tpcCBmcmFtZXMgdGhhdCBkb24ndCBjb250YWluIHdpbmRvd3Mgd2Ugd2FudCB0byBzYXZlIGluIHRoZSBTZXNzaW9uLgorICogUmV0dXJucyBOVUxMIHdoZW4gdGhlcmUgbm9uZS4KKyAqLworICAgIHN0YXRpYyBmcmFtZV9UICoKK3Nlc19za2lwZnJhbWUoZnIpCisgICAgZnJhbWVfVAkqZnI7Cit7CisgICAgZnJhbWVfVAkqZnJjOworCisgICAgZm9yIChmcmMgPSBmcjsgZnJjICE9IE5VTEw7IGZyYyA9IGZyYy0+ZnJfbmV4dCkKKwlpZiAoc2VzX2RvX2ZyYW1lKGZyYykpCisJICAgIGJyZWFrOworICAgIHJldHVybiBmcmM7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBmcmFtZSAiZnIiIGhhcyBhIHdpbmRvdyBzb21ld2hlcmUgdGhhdCB3ZSB3YW50IHRvIHNhdmUgaW4KKyAqIHRoZSBTZXNzaW9uLgorICovCisgICAgc3RhdGljIGludAorc2VzX2RvX2ZyYW1lKGZyKQorICAgIGZyYW1lX1QJKmZyOworeworICAgIGZyYW1lX1QJKmZyYzsKKworICAgIGlmIChmci0+ZnJfbGF5b3V0ID09IEZSX0xFQUYpCisJcmV0dXJuIHNlc19kb193aW4oZnItPmZyX3dpbik7CisgICAgZm9yIChmcmMgPSBmci0+ZnJfY2hpbGQ7IGZyYyAhPSBOVUxMOyBmcmMgPSBmcmMtPmZyX25leHQpCisJaWYgKHNlc19kb19mcmFtZShmcmMpKQorCSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgd2luZG93ICJ3cCIgaXMgdG8gYmUgc3RvcmVkIGluIHRoZSBTZXNzaW9uLgorICovCisgICAgc3RhdGljIGludAorc2VzX2RvX3dpbih3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgaWYgKHdwLT53X2J1ZmZlci0+Yl9mbmFtZSA9PSBOVUxMCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCSAgICAvKiBXaGVuICdidWZ0eXBlJyBpcyAibm9maWxlIiBjYW4ndCByZXN0b3JlIHRoZSB3aW5kb3cgY29udGVudHMuICovCisJICAgIHx8IGJ0X25vZmlsZSh3cC0+d19idWZmZXIpCisjZW5kaWYKKyAgICAgICApCisJcmV0dXJuIChzc29wX2ZsYWdzICYgU1NPUF9CTEFOSyk7CisgICAgaWYgKHdwLT53X2J1ZmZlci0+Yl9oZWxwKQorCXJldHVybiAoc3NvcF9mbGFncyAmIFNTT1BfSEVMUCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBXcml0ZSBjb21tYW5kcyB0byAiZmQiIHRvIHJlc3RvcmUgdGhlIHZpZXcgb2YgYSB3aW5kb3cuCisgKiBDYWxsZXIgbXVzdCBtYWtlIHN1cmUgJ3Njcm9sbG9mZicgaXMgemVyby4KKyAqLworICAgIHN0YXRpYyBpbnQKK3B1dF92aWV3KGZkLCB3cCwgYWRkX2VkaXQsIGZsYWdwKQorICAgIEZJTEUJKmZkOworICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCWFkZF9lZGl0OwkvKiBhZGQgIjplZGl0IiBjb21tYW5kIHRvIHZpZXcgKi8KKyAgICB1bnNpZ25lZAkqZmxhZ3A7CQkvKiB2b3BfZmxhZ3Mgb3Igc3NvcF9mbGFncyAqLworeworICAgIHdpbl9UCSpzYXZlX2N1cndpbjsKKyAgICBpbnQJCWY7CisgICAgaW50CQlkb19jdXJzb3I7CisKKyAgICAvKiBBbHdheXMgcmVzdG9yZSBjdXJzb3IgcG9zaXRpb24gZm9yICI6bWtzZXNzaW9uIi4gIEZvciAiOm1rdmlldyIgb25seQorICAgICAqIHdoZW4gJ3ZpZXdvcHRpb25zJyBjb250YWlucyAiY3Vyc29yIi4gKi8KKyAgICBkb19jdXJzb3IgPSAoZmxhZ3AgPT0gJnNzb3BfZmxhZ3MgfHwgKmZsYWdwICYgU1NPUF9DVVJTT1IpOworCisgICAgLyoKKyAgICAgKiBMb2NhbCBhcmd1bWVudCBsaXN0LgorICAgICAqLworICAgIGlmICh3cC0+d19hbGlzdCA9PSAmZ2xvYmFsX2FsaXN0KQorICAgIHsKKwlpZiAocHV0X2xpbmUoZmQsICJhcmdnbG9iYWwiKSA9PSBGQUlMKQorCSAgICByZXR1cm4gRkFJTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoc2VzX2FyZ2xpc3QoZmQsICJhcmdsb2NhbCIsICZ3cC0+d19hbGlzdC0+YWxfZ2EsCisJCQlmbGFncCA9PSAmdm9wX2ZsYWdzCisJCQl8fCAhKCpmbGFncCAmIFNTT1BfQ1VSRElSKQorCQkJfHwgd3AtPndfbG9jYWxkaXIgIT0gTlVMTCwgZmxhZ3ApID09IEZBSUwpCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKworICAgIC8qIE9ubHkgd2hlbiBwYXJ0IG9mIGEgc2Vzc2lvbjogcmVzdG9yZSB0aGUgYXJndW1lbnQgaW5kZXguICovCisgICAgaWYgKHdwLT53X2FyZ19pZHggIT0gMCAmJiBmbGFncCA9PSAmc3NvcF9mbGFncykKKyAgICB7CisJaWYgKGZwcmludGYoZmQsICIlbGRuZXh0IiwgKGxvbmcpd3AtPndfYXJnX2lkeCkgPCAwCisJCXx8IHB1dF9lb2woZmQpID09IEZBSUwpCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKworICAgIC8qIEVkaXQgdGhlIGZpbGUuICBTa2lwIHRoaXMgd2hlbiAiOm5leHQiIGFscmVhZHkgZGlkIGl0LiAqLworICAgIGlmIChhZGRfZWRpdCAmJiAod3AtPndfYXJnX2lkeCA9PSAwIHx8IGZsYWdwICE9ICZzc29wX2ZsYWdzCisJCQkJCQkgICAgfHwgd3AtPndfYXJnX2lkeF9pbnZhbGlkKSkKKyAgICB7CisJLyoKKwkgKiBMb2FkIHRoZSBmaWxlLgorCSAqLworCWlmICh3cC0+d19idWZmZXItPmJfZmZuYW1lICE9IE5VTEwKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJCSYmICFidF9ub2ZpbGUod3AtPndfYnVmZmVyKQorI2VuZGlmCisJCSkKKwl7CisJICAgIC8qCisJICAgICAqIEVkaXRpbmcgYSBmaWxlIGluIHRoaXMgYnVmZmVyOiB1c2UgIjplZGl0IGZpbGUiLgorCSAgICAgKiBUaGlzIG1heSBoYXZlIHNpZGUgZWZmZWN0cyEgKGUuZy4sIGNvbXByZXNzZWQgb3IgbmV0d29yayBmaWxlKS4KKwkgICAgICovCisJICAgIGlmIChmcHV0cygiZWRpdCAiLCBmZCkgPCAwCisJCSAgICB8fCBzZXNfZm5hbWUoZmQsIHdwLT53X2J1ZmZlciwgZmxhZ3ApID09IEZBSUwpCisJCXJldHVybiBGQUlMOworCX0KKwllbHNlCisJeworCSAgICAvKiBObyBmaWxlIGluIHRoaXMgYnVmZmVyLCBqdXN0IG1ha2UgaXQgZW1wdHkuICovCisJICAgIGlmIChwdXRfbGluZShmZCwgImVuZXciKSA9PSBGQUlMKQorCQlyZXR1cm4gRkFJTDsKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJICAgIGlmICh3cC0+d19idWZmZXItPmJfZmZuYW1lICE9IE5VTEwpCisJICAgIHsKKwkJLyogVGhlIGJ1ZmZlciBkb2VzIGhhdmUgYSBuYW1lLCBidXQgaXQncyBub3QgYSBmaWxlIG5hbWUuICovCisJCWlmIChmcHV0cygiZmlsZSAiLCBmZCkgPCAwCisJCQl8fCBzZXNfZm5hbWUoZmQsIHdwLT53X2J1ZmZlciwgZmxhZ3ApID09IEZBSUwpCisJCSAgICByZXR1cm4gRkFJTDsKKwkgICAgfQorI2VuZGlmCisJICAgIGRvX2N1cnNvciA9IEZBTFNFOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIExvY2FsIG1hcHBpbmdzIGFuZCBhYmJyZXZpYXRpb25zLgorICAgICAqLworICAgIGlmICgoKmZsYWdwICYgKFNTT1BfT1BUSU9OUyB8IFNTT1BfTE9DQUxPUFRJT05TKSkKKwkJCQkJICYmIG1ha2VtYXAoZmQsIHdwLT53X2J1ZmZlcikgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogTG9jYWwgb3B0aW9ucy4gIE5lZWQgdG8gZ28gdG8gdGhlIHdpbmRvdyB0ZW1wb3JhcmlseS4KKyAgICAgKiBTdG9yZSBvbmx5IGxvY2FsIHZhbHVlcyB3aGVuIHVzaW5nICI6bWt2aWV3IiBhbmQgd2hlbiAiOm1rc2Vzc2lvbiIgaXMKKyAgICAgKiB1c2VkIGFuZCAnc2Vzc2lvbm9wdGlvbnMnIGRvZXNuJ3QgaW5jbHVkZSAib3B0aW9ucyIuCisgICAgICogU29tZSBmb2xkaW5nIG9wdGlvbnMgYXJlIGFsd2F5cyBzdG9yZWQgd2hlbiAiZm9sZHMiIGlzIGluY2x1ZGVkLAorICAgICAqIG90aGVyd2lzZSB0aGUgZm9sZHMgd291bGQgbm90IGJlIHJlc3RvcmVkIGNvcnJlY3RseS4KKyAgICAgKi8KKyAgICBzYXZlX2N1cndpbiA9IGN1cndpbjsKKyAgICBjdXJ3aW4gPSB3cDsKKyAgICBjdXJidWYgPSBjdXJ3aW4tPndfYnVmZmVyOworICAgIGlmICgqZmxhZ3AgJiAoU1NPUF9PUFRJT05TIHwgU1NPUF9MT0NBTE9QVElPTlMpKQorCWYgPSBtYWtlc2V0KGZkLCBPUFRfTE9DQUwsCisJCQkgICAgIGZsYWdwID09ICZ2b3BfZmxhZ3MgfHwgISgqZmxhZ3AgJiBTU09QX09QVElPTlMpKTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBlbHNlIGlmICgqZmxhZ3AgJiBTU09QX0ZPTERTKQorCWYgPSBtYWtlZm9sZHNldChmZCk7CisjZW5kaWYKKyAgICBlbHNlCisJZiA9IE9LOworICAgIGN1cndpbiA9IHNhdmVfY3Vyd2luOworICAgIGN1cmJ1ZiA9IGN1cndpbi0+d19idWZmZXI7CisgICAgaWYgKGYgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworI2lmZGVmIEZFQVRfRk9MRElORworICAgIC8qCisgICAgICogU2F2ZSBGb2xkcyB3aGVuICdidWZ0eXBlJyBpcyBlbXB0eSBhbmQgZm9yIGhlbHAgZmlsZXMuCisgICAgICovCisgICAgaWYgKCgqZmxhZ3AgJiBTU09QX0ZPTERTKQorCSAgICAmJiB3cC0+d19idWZmZXItPmJfZmZuYW1lICE9IE5VTEwKKwkgICAgJiYgKCp3cC0+d19idWZmZXItPmJfcF9idCA9PSBOVUwgfHwgd3AtPndfYnVmZmVyLT5iX2hlbHApKQorICAgIHsKKwlpZiAocHV0X2ZvbGRzKGZkLCB3cCkgPT0gRkFJTCkKKwkgICAgcmV0dXJuIEZBSUw7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIFNldCB0aGUgY3Vyc29yIGFmdGVyIGNyZWF0aW5nIGZvbGRzLCBzaW5jZSB0aGF0IG1vdmVzIHRoZSBjdXJzb3IuCisgICAgICovCisgICAgaWYgKGRvX2N1cnNvcikKKyAgICB7CisKKwkvKiBSZXN0b3JlIHRoZSBjdXJzb3IgbGluZSBpbiB0aGUgZmlsZSBhbmQgcmVsYXRpdmVseSBpbiB0aGUKKwkgKiB3aW5kb3cuICBEb24ndCB1c2UgIkciLCBpdCBjaGFuZ2VzIHRoZSBqdW1wbGlzdC4gKi8KKwlpZiAoZnByaW50ZihmZCwgImxldCBzOmwgPSAlbGQgLSAoKCVsZCAqIHdpbmhlaWdodCgwKSArICVsZCkgLyAlbGQpIiwKKwkJICAgIChsb25nKXdwLT53X2N1cnNvci5sbnVtLAorCQkgICAgKGxvbmcpKHdwLT53X2N1cnNvci5sbnVtIC0gd3AtPndfdG9wbGluZSksCisJCSAgICAobG9uZyl3cC0+d19oZWlnaHQgLyAyLCAobG9uZyl3cC0+d19oZWlnaHQpIDwgMAorCQl8fCBwdXRfZW9sKGZkKSA9PSBGQUlMCisJCXx8IHB1dF9saW5lKGZkLCAiaWYgczpsIDwgMSB8IGxldCBzOmwgPSAxIHwgZW5kaWYiKSA9PSBGQUlMCisJCXx8IHB1dF9saW5lKGZkLCAiZXhlIHM6bCIpID09IEZBSUwKKwkJfHwgcHV0X2xpbmUoZmQsICJub3JtYWwhIHp0IikgPT0gRkFJTAorCQl8fCBmcHJpbnRmKGZkLCAiJWxkIiwgKGxvbmcpd3AtPndfY3Vyc29yLmxudW0pIDwgMAorCQl8fCBwdXRfZW9sKGZkKSA9PSBGQUlMKQorCSAgICByZXR1cm4gRkFJTDsKKwkvKiBSZXN0b3JlIHRoZSBjdXJzb3IgY29sdW1uIGFuZCBsZWZ0IG9mZnNldCB3aGVuIG5vdCB3cmFwcGluZy4gKi8KKwlpZiAod3AtPndfY3Vyc29yLmNvbCA9PSAwKQorCXsKKwkgICAgaWYgKHB1dF9saW5lKGZkLCAibm9ybWFsISAwIikgPT0gRkFJTCkKKwkJcmV0dXJuIEZBSUw7CisJfQorCWVsc2UKKwl7CisJICAgIGlmICghd3AtPndfcF93cmFwICYmIHdwLT53X2xlZnRjb2wgPiAwICYmIHdwLT53X3dpZHRoID4gMCkKKwkgICAgeworCQlpZiAoZnByaW50ZihmZCwKKwkJCSAgImxldCBzOmMgPSAlbGQgLSAoKCVsZCAqIHdpbndpZHRoKDApICsgJWxkKSAvICVsZCkiLAorCQkJICAgIChsb25nKXdwLT53X2N1cnNvci5jb2wsCisJCQkgICAgKGxvbmcpKHdwLT53X2N1cnNvci5jb2wgLSB3cC0+d19sZWZ0Y29sKSwKKwkJCSAgICAobG9uZyl3cC0+d193aWR0aCAvIDIsIChsb25nKXdwLT53X3dpZHRoKSA8IDAKKwkJCXx8IHB1dF9lb2woZmQpID09IEZBSUwKKwkJCXx8IHB1dF9saW5lKGZkLCAiaWYgczpjID4gMCIpID09IEZBSUwKKwkJCXx8IGZwcmludGYoZmQsCisJCQkgICAgIiAgZXhlICdub3JtYWwhIDAnIC4gczpjIC4gJ2x6cycgLiAoJWxkIC0gczpjKSAuICdsJyIsCisJCQkgICAgKGxvbmcpd3AtPndfY3Vyc29yLmNvbCkgPCAwCisJCQl8fCBwdXRfZW9sKGZkKSA9PSBGQUlMCisJCQl8fCBwdXRfbGluZShmZCwgImVsc2UiKSA9PSBGQUlMCisJCQl8fCBmcHJpbnRmKGZkLCAiICBub3JtYWwhIDAlZGwiLCB3cC0+d19jdXJzb3IuY29sKSA8IDAKKwkJCXx8IHB1dF9lb2woZmQpID09IEZBSUwKKwkJCXx8IHB1dF9saW5lKGZkLCAiZW5kaWYiKSA9PSBGQUlMKQorCQkgICAgcmV0dXJuIEZBSUw7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlmIChmcHJpbnRmKGZkLCAibm9ybWFsISAwJWRsIiwgd3AtPndfY3Vyc29yLmNvbCkgPCAwCisJCQl8fCBwdXRfZW9sKGZkKSA9PSBGQUlMKQorCQkgICAgcmV0dXJuIEZBSUw7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBMb2NhbCBkaXJlY3RvcnkuCisgICAgICovCisgICAgaWYgKHdwLT53X2xvY2FsZGlyICE9IE5VTEwpCisgICAgeworCWlmIChmcHV0cygibGNkICIsIGZkKSA8IDAKKwkJfHwgc2VzX3B1dF9mbmFtZShmZCwgd3AtPndfbG9jYWxkaXIsIGZsYWdwKSA9PSBGQUlMCisJCXx8IHB1dF9lb2woZmQpID09IEZBSUwpCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFdyaXRlIGFuIGFyZ3VtZW50IGxpc3QgdG8gdGhlIHNlc3Npb24gZmlsZS4KKyAqIFJldHVybnMgRkFJTCBpZiB3cml0aW5nIGZhaWxzLgorICovCisgICAgc3RhdGljIGludAorc2VzX2FyZ2xpc3QoZmQsIGNtZCwgZ2FwLCBmdWxsbmFtZSwgZmxhZ3ApCisgICAgRklMRQkqZmQ7CisgICAgY2hhcgkqY21kOworICAgIGdhcnJheV9UCSpnYXA7CisgICAgaW50CQlmdWxsbmFtZTsJLyogVFJVRTogdXNlIGZ1bGwgcGF0aCBuYW1lICovCisgICAgdW5zaWduZWQJKmZsYWdwOworeworICAgIGludAkJaTsKKyAgICBjaGFyX3UJYnVmW01BWFBBVEhMXTsKKyAgICBjaGFyX3UJKnM7CisKKyAgICBpZiAoZ2FwLT5nYV9sZW4gPT0gMCkKKwlyZXR1cm4gcHV0X2xpbmUoZmQsICJzaWxlbnQhIGFyZ2RlbCAqIik7CisgICAgaWYgKGZwdXRzKGNtZCwgZmQpIDwgMCkKKwlyZXR1cm4gRkFJTDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZ2FwLT5nYV9sZW47ICsraSkKKyAgICB7CisJLyogTlVMTCBmaWxlIG5hbWVzIGFyZSBza2lwcGVkIChvbmx5IGhhcHBlbnMgd2hlbiBvdXQgb2YgbWVtb3J5KS4gKi8KKwlzID0gYWxpc3RfbmFtZSgmKChhZW50cnlfVCAqKWdhcC0+Z2FfZGF0YSlbaV0pOworCWlmIChzICE9IE5VTEwpCisJeworCSAgICBpZiAoZnVsbG5hbWUpCisJICAgIHsKKwkJKHZvaWQpdmltX0Z1bGxOYW1lKHMsIGJ1ZiwgTUFYUEFUSEwsIEZBTFNFKTsKKwkJcyA9IGJ1ZjsKKwkgICAgfQorCSAgICBpZiAoZnB1dHMoIiAiLCBmZCkgPCAwIHx8IHNlc19wdXRfZm5hbWUoZmQsIHMsIGZsYWdwKSA9PSBGQUlMKQorCQlyZXR1cm4gRkFJTDsKKwl9CisgICAgfQorICAgIHJldHVybiBwdXRfZW9sKGZkKTsKK30KKworLyoKKyAqIFdyaXRlIGEgYnVmZmVyIG5hbWUgdG8gdGhlIHNlc3Npb24gZmlsZS4KKyAqIEFsc28gZW5kcyB0aGUgbGluZS4KKyAqIFJldHVybnMgRkFJTCBpZiB3cml0aW5nIGZhaWxzLgorICovCisgICAgc3RhdGljIGludAorc2VzX2ZuYW1lKGZkLCBidWYsIGZsYWdwKQorICAgIEZJTEUJKmZkOworICAgIGJ1Zl9UCSpidWY7CisgICAgdW5zaWduZWQJKmZsYWdwOworeworICAgIGNoYXJfdQkqbmFtZTsKKworICAgIC8qIFVzZSB0aGUgc2hvcnQgZmlsZSBuYW1lIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBrbm93biBhdCB0aGUgdGltZQorICAgICAqIHRoZSBzZXNzaW9uIGZpbGUgd2lsbCBiZSBzb3VyY2VkLiAgRG9uJ3QgZG8gdGhpcyBmb3IgIjpta3ZpZXciLCB3ZQorICAgICAqIGRvbid0IGtub3cgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAqLworICAgIGlmIChidWYtPmJfc2ZuYW1lICE9IE5VTEwKKwkgICAgJiYgZmxhZ3AgPT0gJnNzb3BfZmxhZ3MKKwkgICAgJiYgKHNzb3BfZmxhZ3MgJiAoU1NPUF9DVVJESVIgfCBTU09QX1NFU0RJUikpKQorCW5hbWUgPSBidWYtPmJfc2ZuYW1lOworICAgIGVsc2UKKwluYW1lID0gYnVmLT5iX2ZmbmFtZTsKKyAgICBpZiAoc2VzX3B1dF9mbmFtZShmZCwgbmFtZSwgZmxhZ3ApID09IEZBSUwgfHwgcHV0X2VvbChmZCkgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBXcml0ZSBhIGZpbGUgbmFtZSB0byB0aGUgc2Vzc2lvbiBmaWxlLgorICogVGFrZXMgY2FyZSBvZiB0aGUgInNsYXNoIiBvcHRpb24gaW4gJ3Nlc3Npb25vcHRpb25zJyBhbmQgZXNjYXBlcyBzcGVjaWFsCisgKiBjaGFyYWN0ZXJzLgorICogUmV0dXJucyBGQUlMIGlmIHdyaXRpbmcgZmFpbHMuCisgKi8KKyAgICBzdGF0aWMgaW50CitzZXNfcHV0X2ZuYW1lKGZkLCBuYW1lLCBmbGFncCkKKyAgICBGSUxFCSpmZDsKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgdW5zaWduZWQJKmZsYWdwOworeworICAgIGNoYXJfdQkqc25hbWU7CisgICAgaW50CQlyZXR2YWwgPSBPSzsKKyAgICBpbnQJCWM7CisKKyAgICBzbmFtZSA9IGhvbWVfcmVwbGFjZV9zYXZlKE5VTEwsIG5hbWUpOworICAgIGlmIChzbmFtZSAhPSBOVUxMKQorCW5hbWUgPSBzbmFtZTsKKyAgICB3aGlsZSAoKm5hbWUgIT0gTlVMKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJeworCSAgICBpbnQgbDsKKworCSAgICBpZiAoaGFzX21ieXRlICYmIChsID0gKCptYl9wdHIybGVuX2NoZWNrKShuYW1lKSkgPiAxKQorCSAgICB7CisJCS8qIGNvcHkgYSBtdWx0aWJ5dGUgY2hhciAqLworCQl3aGlsZSAoLS1sID49IDApCisJCXsKKwkJICAgIGlmIChwdXRjKCpuYW1lLCBmZCkgIT0gKm5hbWUpCisJCQlyZXR2YWwgPSBGQUlMOworCQkgICAgKytuYW1lOworCQl9CisJCWNvbnRpbnVlOworCSAgICB9CisJfQorI2VuZGlmCisJYyA9ICpuYW1lKys7CisJaWYgKGMgPT0gJ1xcJyAmJiAoKmZsYWdwICYgU1NPUF9TTEFTSCkpCisJICAgIC8qIGNoYW5nZSBhIGJhY2tzbGFzaCB0byBhIGZvcndhcmQgc2xhc2ggKi8KKwkgICAgYyA9ICcvJzsKKwllbHNlIGlmICgodmltX3N0cmNocihlc2NhcGVfY2hhcnMsIGMpICE9IE5VTEwKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwkJICAgICYmIGMgIT0gJ1xcJworI2VuZGlmCisJCSApIHx8IGMgPT0gJyMnIHx8IGMgPT0gJyUnKQorCXsKKwkgICAgLyogZXNjYXBlIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2l0aCBhIGJhY2tzbGFzaCAqLworCSAgICBpZiAocHV0YygnXFwnLCBmZCkgIT0gJ1xcJykKKwkJcmV0dmFsID0gRkFJTDsKKwl9CisJaWYgKHB1dGMoYywgZmQpICE9IGMpCisJICAgIHJldHZhbCA9IEZBSUw7CisgICAgfQorICAgIHZpbV9mcmVlKHNuYW1lKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogIjpsb2FkdmlldyBbbnJdIgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X2xvYWR2aWV3KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcl91CSpmbmFtZTsKKworICAgIGZuYW1lID0gZ2V0X3ZpZXdfZmlsZSgqZWFwLT5hcmcpOworICAgIGlmIChmbmFtZSAhPSBOVUxMKQorICAgIHsKKwlkb19zb3VyY2UoZm5hbWUsIEZBTFNFLCBGQUxTRSk7CisJdmltX2ZyZWUoZm5hbWUpOworICAgIH0KK30KKworLyoKKyAqIEdldCB0aGUgbmFtZSBvZiB0aGUgdmlldyBmaWxlIGZvciB0aGUgY3VycmVudCBidWZmZXIuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2dldF92aWV3X2ZpbGUoYykKKyAgICBpbnQJCWM7Cit7CisgICAgaW50CQlsZW4gPSAwOworICAgIGNoYXJfdQkqcCwgKnM7CisgICAgY2hhcl91CSpyZXR2YWw7CisgICAgY2hhcl91CSpzbmFtZTsKKworICAgIGlmIChjdXJidWYtPmJfZmZuYW1lID09IE5VTEwpCisgICAgeworCUVNU0coXyhlX25vbmFtZSkpOworCXJldHVybiBOVUxMOworICAgIH0KKyAgICBzbmFtZSA9IGhvbWVfcmVwbGFjZV9zYXZlKE5VTEwsIGN1cmJ1Zi0+Yl9mZm5hbWUpOworICAgIGlmIChzbmFtZSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgLyoKKyAgICAgKiBXZSB3YW50IGEgZmlsZSBuYW1lIHdpdGhvdXQgc2VwYXJhdG9ycywgYmVjYXVzZSB3ZSdyZSBub3QgZ29pbmcgdG8gbWFrZQorICAgICAqIGEgZGlyZWN0b3J5LgorICAgICAqICJub3JtYWwiIHBhdGggc2VwYXJhdG9yCS0+ICI9KyIKKyAgICAgKiAiPSIJCQktPiAiPT0iCisgICAgICogIjoiIHBhdGggc2VwYXJhdG9yCS0+ICI9LSIKKyAgICAgKi8KKyAgICBmb3IgKHAgPSBzbmFtZTsgKnA7ICsrcCkKKwlpZiAoKnAgPT0gJz0nIHx8IHZpbV9pc3BhdGhzZXAoKnApKQorCSAgICArK2xlbjsKKyAgICByZXR2YWwgPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTihzbmFtZSkgKyBsZW4gKyBTVFJMRU4ocF92ZGlyKSArIDkpKTsKKyAgICBpZiAocmV0dmFsICE9IE5VTEwpCisgICAgeworCVNUUkNQWShyZXR2YWwsIHBfdmRpcik7CisJYWRkX3BhdGhzZXAocmV0dmFsKTsKKwlzID0gcmV0dmFsICsgU1RSTEVOKHJldHZhbCk7CisJZm9yIChwID0gc25hbWU7ICpwOyArK3ApCisJeworCSAgICBpZiAoKnAgPT0gJz0nKQorCSAgICB7CisJCSpzKysgPSAnPSc7CisJCSpzKysgPSAnPSc7CisJICAgIH0KKwkgICAgZWxzZSBpZiAodmltX2lzcGF0aHNlcCgqcCkpCisJICAgIHsKKwkJKnMrKyA9ICc9JzsKKyNpZmRlZiBNQUNPU19DTEFTU0lDIC8qIFRPRE86IElzIGl0IGFsc28gbmVlZGVkIGZvciBNQUNPU19YPyAoRGFueSkgKi8KKwkJKnMrKyA9ICcrJzsKKyNlbHNlCisjIGlmIGRlZmluZWQoQkFDS1NMQVNIX0lOX0ZJTEVOQU1FKSB8fCBkZWZpbmVkKEFNSUdBKSB8fCBkZWZpbmVkKFJJU0NPUykgXAorCXx8IGRlZmluZWQoVk1TKQorCQlpZiAoKnAgPT0gJzonKQorCQkgICAgKnMrKyA9ICctJzsKKwkJZWxzZQorIyBlbmRpZgorCQkgICAgKnMrKyA9ICcrJzsKKyNlbmRpZgorCSAgICB9CisJICAgIGVsc2UKKwkJKnMrKyA9ICpwOworCX0KKwkqcysrID0gJz0nOworCSpzKysgPSBjOworCVNUUkNQWShzLCAiLnZpbSIpOworICAgIH0KKworICAgIHZpbV9mcmVlKHNuYW1lKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisjZW5kaWYgLyogRkVBVF9TRVNTSU9OICovCisKKy8qCisgKiBXcml0ZSBlbmQtb2YtbGluZSBjaGFyYWN0ZXIocykgZm9yICI6bWtleHJjIiwgIjpta3ZpbXJjIiBhbmQgIjpta3Nlc3Npb24iLgorICogUmV0dXJuIEZBSUwgZm9yIGEgd3JpdGUgZXJyb3IuCisgKi8KKyAgICBpbnQKK3B1dF9lb2woZmQpCisgICAgRklMRQkqZmQ7Cit7CisgICAgaWYgKAorI2lmZGVmIFVTRV9DUk5MCisJICAgICgKKyMgaWZkZWYgTUtTRVNTSU9OX05MCisJICAgICAhbWtzZXNzaW9uX25sICYmCisjIGVuZGlmCisJICAgICAocHV0YygnXHInLCBmZCkgPCAwKSkgfHwKKyNlbmRpZgorCSAgICAocHV0YygnXG4nLCBmZCkgPCAwKSkKKwlyZXR1cm4gRkFJTDsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBXcml0ZSBhIGxpbmUgdG8gImZkIi4KKyAqIFJldHVybiBGQUlMIGZvciBhIHdyaXRlIGVycm9yLgorICovCisgICAgaW50CitwdXRfbGluZShmZCwgcykKKyAgICBGSUxFCSpmZDsKKyAgICBjaGFyCSpzOworeworICAgIGlmIChmcHV0cyhzLCBmZCkgPCAwIHx8IHB1dF9lb2woZmQpID09IEZBSUwpCisJcmV0dXJuIEZBSUw7CisgICAgcmV0dXJuIE9LOworfQorCisjaWZkZWYgRkVBVF9WSU1JTkZPCisvKgorICogIjpydmltaW5mbyIgYW5kICI6d3ZpbWluZm8iLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X3ZpbWluZm8oZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UJKnNhdmVfdmltaW5mbzsKKworICAgIHNhdmVfdmltaW5mbyA9IHBfdmltaW5mbzsKKyAgICBpZiAoKnBfdmltaW5mbyA9PSBOVUwpCisJcF92aW1pbmZvID0gKGNoYXJfdSAqKSInMTAwIjsKKyAgICBpZiAoZWFwLT5jbWRpZHggPT0gQ01EX3J2aW1pbmZvKQorICAgIHsKKwlpZiAocmVhZF92aW1pbmZvKGVhcC0+YXJnLCBUUlVFLCBUUlVFLCBlYXAtPmZvcmNlaXQpID09IEZBSUwpCisJICAgIEVNU0coXygiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIikpOworICAgIH0KKyAgICBlbHNlCisJd3JpdGVfdmltaW5mbyhlYXAtPmFyZywgZWFwLT5mb3JjZWl0KTsKKyAgICBwX3ZpbWluZm8gPSBzYXZlX3ZpbWluZm87Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykgfHwgZGVmaW5lZChQUk9UTykKKyAgICB2b2lkCitkaWFsb2dfbXNnKGJ1ZmYsIGZvcm1hdCwgZm5hbWUpCisgICAgY2hhcl91CSpidWZmOworICAgIGNoYXIJKmZvcm1hdDsKKyAgICBjaGFyX3UJKmZuYW1lOworeworICAgIGludAkJbGVuOworCisgICAgaWYgKGZuYW1lID09IE5VTEwpCisJZm5hbWUgPSAoY2hhcl91ICopXygiVW50aXRsZWQiKTsKKyAgICBsZW4gPSAoaW50KVNUUkxFTihmb3JtYXQpICsgKGludClTVFJMRU4oZm5hbWUpOworICAgIGlmIChsZW4gPj0gSU9TSVpFKQorCXNwcmludGYoKGNoYXIgKilidWZmLCBmb3JtYXQsIChpbnQpKElPU0laRSAtIFNUUkxFTihmb3JtYXQpKSwgZm5hbWUpOworICAgIGVsc2UKKwlzcHJpbnRmKChjaGFyICopYnVmZiwgZm9ybWF0LCAoaW50KVNUUkxFTihmbmFtZSksIGZuYW1lKTsKK30KKyNlbmRpZgorCisvKgorICogIjpiZWhhdmUge21zd2luLHh0ZXJtfSIKKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9iZWhhdmUoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpZiAoU1RSQ01QKGVhcC0+YXJnLCAibXN3aW4iKSA9PSAwKQorICAgIHsKKwlzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikic2VsZWN0aW9uIiwgMEwsIChjaGFyX3UgKikiZXhjbHVzaXZlIiwgMCk7CisJc2V0X29wdGlvbl92YWx1ZSgoY2hhcl91ICopInNlbGVjdG1vZGUiLCAwTCwgKGNoYXJfdSAqKSJtb3VzZSxrZXkiLCAwKTsKKwlzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikibW91c2Vtb2RlbCIsIDBMLCAoY2hhcl91ICopInBvcHVwIiwgMCk7CisJc2V0X29wdGlvbl92YWx1ZSgoY2hhcl91ICopImtleW1vZGVsIiwgMEwsCisJCQkJCSAgICAgKGNoYXJfdSAqKSJzdGFydHNlbCxzdG9wc2VsIiwgMCk7CisgICAgfQorICAgIGVsc2UgaWYgKFNUUkNNUChlYXAtPmFyZywgInh0ZXJtIikgPT0gMCkKKyAgICB7CisJc2V0X29wdGlvbl92YWx1ZSgoY2hhcl91ICopInNlbGVjdGlvbiIsIDBMLCAoY2hhcl91ICopImluY2x1c2l2ZSIsIDApOworCXNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJzZWxlY3Rtb2RlIiwgMEwsIChjaGFyX3UgKikiIiwgMCk7CisJc2V0X29wdGlvbl92YWx1ZSgoY2hhcl91ICopIm1vdXNlbW9kZWwiLCAwTCwgKGNoYXJfdSAqKSJleHRlbmQiLCAwKTsKKwlzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikia2V5bW9kZWwiLCAwTCwgKGNoYXJfdSAqKSIiLCAwKTsKKyAgICB9CisgICAgZWxzZQorCUVNU0cyKF8oZV9pbnZhcmcyKSwgZWFwLT5hcmcpOworfQorCisjaWZkZWYgRkVBVF9BVVRPQ01ECitzdGF0aWMgaW50IGZpbGV0eXBlX2RldGVjdCA9IEZBTFNFOworc3RhdGljIGludCBmaWxldHlwZV9wbHVnaW4gPSBGQUxTRTsKK3N0YXRpYyBpbnQgZmlsZXR5cGVfaW5kZW50ID0gRkFMU0U7CisKKy8qCisgKiAiOmZpbGV0eXBlIFtwbHVnaW5dIFtpbmRlbnRdIHtvbixvZmYsZGV0ZWN0fSIKKyAqIG9uOiBMb2FkIHRoZSBmaWxldHlwZS52aW0gZmlsZSB0byBpbnN0YWxsIGF1dG9jb21tYW5kcyBmb3IgZmlsZSB0eXBlcy4KKyAqIG9mZjogTG9hZCB0aGUgZnRvZmYudmltIGZpbGUgdG8gcmVtb3ZlIGFsbCBhdXRvY29tbWFuZHMgZm9yIGZpbGUgdHlwZXMuCisgKiBwbHVnaW4gb246IGxvYWQgZmlsZXR5cGUudmltIGFuZCBmdHBsdWdpbi52aW0KKyAqIHBsdWdpbiBvZmY6IGxvYWQgZnRwbHVnb2YudmltCisgKiBpbmRlbnQgb246IGxvYWQgZmlsZXR5cGUudmltIGFuZCBpbmRlbnQudmltCisgKiBpbmRlbnQgb2ZmOiBsb2FkIGluZG9mZi52aW0KKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9maWxldHlwZShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGNoYXJfdQkqYXJnID0gZWFwLT5hcmc7CisgICAgaW50CQlwbHVnaW4gPSBGQUxTRTsKKyAgICBpbnQJCWluZGVudCA9IEZBTFNFOworCisgICAgaWYgKCplYXAtPmFyZyA9PSBOVUwpCisgICAgeworCS8qIFByaW50IGN1cnJlbnQgc3RhdHVzLiAqLworCXNtc2coKGNoYXJfdSAqKSJmaWxldHlwZSBkZXRlY3Rpb246JXMgIHBsdWdpbjolcyAgaW5kZW50OiVzIiwKKwkJZmlsZXR5cGVfZGV0ZWN0ID8gIk9OIiA6ICJPRkYiLAorCQlmaWxldHlwZV9wbHVnaW4gPyAoZmlsZXR5cGVfZGV0ZWN0ID8gIk9OIiA6ICIob24pIikgOiAiT0ZGIiwKKwkJZmlsZXR5cGVfaW5kZW50ID8gKGZpbGV0eXBlX2RldGVjdCA/ICJPTiIgOiAiKG9uKSIpIDogIk9GRiIpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBBY2NlcHQgInBsdWdpbiIgYW5kICJpbmRlbnQiIGluIGFueSBvcmRlci4gKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwlpZiAoU1RSTkNNUChhcmcsICJwbHVnaW4iLCA2KSA9PSAwKQorCXsKKwkgICAgcGx1Z2luID0gVFJVRTsKKwkgICAgYXJnID0gc2tpcHdoaXRlKGFyZyArIDYpOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKFNUUk5DTVAoYXJnLCAiaW5kZW50IiwgNikgPT0gMCkKKwl7CisJICAgIGluZGVudCA9IFRSVUU7CisJICAgIGFyZyA9IHNraXB3aGl0ZShhcmcgKyA2KTsKKwkgICAgY29udGludWU7CisJfQorCWJyZWFrOworICAgIH0KKyAgICBpZiAoU1RSQ01QKGFyZywgIm9uIikgPT0gMCB8fCBTVFJDTVAoYXJnLCAiZGV0ZWN0IikgPT0gMCkKKyAgICB7CisJaWYgKCphcmcgPT0gJ28nIHx8ICFmaWxldHlwZV9kZXRlY3QpCisJeworCSAgICBjbWRfcnVudGltZSgoY2hhcl91ICopRklMRVRZUEVfRklMRSwgVFJVRSk7CisJICAgIGZpbGV0eXBlX2RldGVjdCA9IFRSVUU7CisJICAgIGlmIChwbHVnaW4pCisJICAgIHsKKwkJY21kX3J1bnRpbWUoKGNoYXJfdSAqKUZUUExVR0lOX0ZJTEUsIFRSVUUpOworCQlmaWxldHlwZV9wbHVnaW4gPSBUUlVFOworCSAgICB9CisJICAgIGlmIChpbmRlbnQpCisJICAgIHsKKwkJY21kX3J1bnRpbWUoKGNoYXJfdSAqKUlOREVOVF9GSUxFLCBUUlVFKTsKKwkJZmlsZXR5cGVfaW5kZW50ID0gVFJVRTsKKwkgICAgfQorCX0KKwlpZiAoKmFyZyA9PSAnZCcpCisJeworCSAgICAodm9pZClkb19kb2F1dG9jbWQoKGNoYXJfdSAqKSJmaWxldHlwZWRldGVjdCBCdWZSZWFkIiwgVFJVRSk7CisJICAgIGRvX21vZGVsaW5lcygpOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAoU1RSQ01QKGFyZywgIm9mZiIpID09IDApCisgICAgeworCWlmIChwbHVnaW4gfHwgaW5kZW50KQorCXsKKwkgICAgaWYgKHBsdWdpbikKKwkgICAgeworCQljbWRfcnVudGltZSgoY2hhcl91ICopRlRQTFVHT0ZfRklMRSwgVFJVRSk7CisJCWZpbGV0eXBlX3BsdWdpbiA9IEZBTFNFOworCSAgICB9CisJICAgIGlmIChpbmRlbnQpCisJICAgIHsKKwkJY21kX3J1bnRpbWUoKGNoYXJfdSAqKUlORE9GRl9GSUxFLCBUUlVFKTsKKwkJZmlsZXR5cGVfaW5kZW50ID0gRkFMU0U7CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgY21kX3J1bnRpbWUoKGNoYXJfdSAqKUZUT0ZGX0ZJTEUsIFRSVUUpOworCSAgICBmaWxldHlwZV9kZXRlY3QgPSBGQUxTRTsKKwl9CisgICAgfQorICAgIGVsc2UKKwlFTVNHMihfKGVfaW52YXJnMiksIGFyZyk7Cit9CisKKy8qCisgKiAiOnNldGZpbGV0eXBlIHtuYW1lfSIKKyAqLworICAgIHN0YXRpYyB2b2lkCitleF9zZXRmaWxldHlwZShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGlmICghZGlkX2ZpbGV0eXBlKQorCXNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJmaWxldHlwZSIsIDBMLCBlYXAtPmFyZywgT1BUX0xPQ0FMKTsKK30KKyNlbmRpZgorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfZGlncmFwaHMoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyNpZmRlZiBGRUFUX0RJR1JBUEhTCisgICAgaWYgKCplYXAtPmFyZyAhPSBOVUwpCisJcHV0ZGlncmFwaChlYXAtPmFyZyk7CisgICAgZWxzZQorCWxpc3RkaWdyYXBocygpOworI2Vsc2UKKyAgICBFTVNHKF8oIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIpKTsKKyNlbmRpZgorfQorCisgICAgc3RhdGljIHZvaWQKK2V4X3NldChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJZmxhZ3MgPSAwOworCisgICAgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9zZXRsb2NhbCkKKwlmbGFncyA9IE9QVF9MT0NBTDsKKyAgICBlbHNlIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfc2V0Z2xvYmFsKQorCWZsYWdzID0gT1BUX0dMT0JBTDsKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgJiYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9CUk9XU0UpCisgICAgaWYgKGNtZG1vZC5icm93c2UgJiYgZmxhZ3MgPT0gMCkKKwlleF9vcHRpb25zKGVhcCk7CisgICAgZWxzZQorI2VuZGlmCisJKHZvaWQpZG9fc2V0KGVhcC0+YXJnLCBmbGFncyk7Cit9CisKKyNpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorLyoKKyAqICI6bm9obHNlYXJjaCIKKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2V4X25vaGxzZWFyY2goZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBub19obHNlYXJjaCA9IFRSVUU7CisgICAgcmVkcmF3X2FsbF9sYXRlcihOT1RfVkFMSUQpOworfQorCisvKgorICogIjptYXRjaCB7Z3JvdXB9IHtwYXR0ZXJufSIKKyAqIFNldHMgbmV4dGNtZCB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tbWFuZCwgaWYgYW55LiAgQWxzbyBjYWxsZWQgd2hlbgorICogc2tpcHBpbmcgY29tbWFuZHMgdG8gZmluZCB0aGUgbmV4dCBjb21tYW5kLgorICovCisgICAgc3RhdGljIHZvaWQKK2V4X21hdGNoKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqZW5kOworICAgIGludAkJYzsKKworICAgIC8qIEZpcnN0IGNsZWFyIGFueSBvbGQgcGF0dGVybi4gKi8KKyAgICBpZiAoIWVhcC0+c2tpcCkKKyAgICB7CisJdmltX2ZyZWUoY3Vyd2luLT53X21hdGNoLnJlZ3Byb2cpOworCWN1cndpbi0+d19tYXRjaC5yZWdwcm9nID0gTlVMTDsKKwlyZWRyYXdfbGF0ZXIoTk9UX1ZBTElEKTsJLyogYWx3YXlzIG5lZWQgYSByZWRyYXcgKi8KKyAgICB9CisKKyAgICBpZiAoZW5kc19leGNtZCgqZWFwLT5hcmcpKQorCWVuZCA9IGVhcC0+YXJnOworICAgIGVsc2UgaWYgKChTVFJOSUNNUChlYXAtPmFyZywgIm5vbmUiLCA0KSA9PSAwCisJCSYmICh2aW1faXN3aGl0ZShlYXAtPmFyZ1s0XSkgfHwgZW5kc19leGNtZChlYXAtPmFyZ1s0XSkpKSkKKwllbmQgPSBlYXAtPmFyZyArIDQ7CisgICAgZWxzZQorICAgIHsKKwlwID0gc2tpcHRvd2hpdGUoZWFwLT5hcmcpOworCWlmICghZWFwLT5za2lwKQorCXsKKwkgICAgY3Vyd2luLT53X21hdGNoX2lkID0gc3luX25hbWVuMmlkKGVhcC0+YXJnLCAoaW50KShwIC0gZWFwLT5hcmcpKTsKKwkgICAgaWYgKGN1cndpbi0+d19tYXRjaF9pZCA9PSAwKQorCSAgICB7CisJCUVNU0cyKF8oZV9ub2dyb3VwKSwgZWFwLT5hcmcpOworCQlyZXR1cm47CisJICAgIH0KKwl9CisJcCA9IHNraXB3aGl0ZShwKTsKKwlpZiAoKnAgPT0gTlVMKQorCXsKKwkgICAgLyogVGhlcmUgbXVzdCBiZSB0d28gYXJndW1lbnRzLiAqLworCSAgICBFTVNHMihfKGVfaW52YXJnMiksIGVhcC0+YXJnKTsKKwkgICAgcmV0dXJuOworCX0KKwllbmQgPSBza2lwX3JlZ2V4cChwICsgMSwgKnAsIFRSVUUsIE5VTEwpOworCWlmICghZWFwLT5za2lwKQorCXsKKwkgICAgaWYgKCplbmQgIT0gTlVMICYmICFlbmRzX2V4Y21kKCpza2lwd2hpdGUoZW5kICsgMSkpKQorCSAgICB7CisJCWVhcC0+ZXJybXNnID0gZV90cmFpbGluZzsKKwkJcmV0dXJuOworCSAgICB9CisKKwkgICAgYyA9ICplbmQ7CisJICAgICplbmQgPSBOVUw7CisJICAgIGN1cndpbi0+d19tYXRjaC5yZWdwcm9nID0gdmltX3JlZ2NvbXAocCArIDEsIFJFX01BR0lDKTsKKwkgICAgKmVuZCA9IGM7CisJICAgIGlmIChjdXJ3aW4tPndfbWF0Y2gucmVncHJvZyA9PSBOVUxMKQorCSAgICB7CisJCUVNU0cyKF8oZV9pbnZhcmcyKSwgcCk7CisJCXJldHVybjsKKwkgICAgfQorCX0KKyAgICB9CisgICAgZWFwLT5uZXh0Y21kID0gZmluZF9uZXh0Y21kKGVuZCk7Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfQ1JZUFQKKy8qCisgKiAiOlgiOiBHZXQgY3J5cHQga2V5CisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitleF9YKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgKHZvaWQpZ2V0X2NyeXB0X2tleShUUlVFLCBUUlVFKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgc3RhdGljIHZvaWQKK2V4X2ZvbGQoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpZiAoZm9sZE1hbnVhbEFsbG93ZWQoVFJVRSkpCisJZm9sZENyZWF0ZShlYXAtPmxpbmUxLCBlYXAtPmxpbmUyKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitleF9mb2xkb3BlbihlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIG9wRm9sZFJhbmdlKGVhcC0+bGluZTEsIGVhcC0+bGluZTIsIGVhcC0+Y21kaWR4ID09IENNRF9mb2xkb3BlbiwKKwkJCQkJCQkgZWFwLT5mb3JjZWl0LCBGQUxTRSk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZXhfZm9sZGRvKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgbGluZW5yX1QJbG51bTsKKworICAgIC8qIEZpcnN0IHNldCB0aGUgbWFya3MgZm9yIGFsbCBsaW5lcyBjbG9zZWQvb3Blbi4gKi8KKyAgICBmb3IgKGxudW0gPSBlYXAtPmxpbmUxOyBsbnVtIDw9IGVhcC0+bGluZTI7ICsrbG51bSkKKwlpZiAoaGFzRm9sZGluZyhsbnVtLCBOVUxMLCBOVUxMKSA9PSAoZWFwLT5jbWRpZHggPT0gQ01EX2ZvbGRkb2Nsb3NlZCkpCisJICAgIG1sX3NldG1hcmtlZChsbnVtKTsKKworICAgIC8qIEV4ZWN1dGUgdGhlIGNvbW1hbmQgb24gdGhlIG1hcmtlZCBsaW5lcy4gKi8KKyAgICBnbG9iYWxfZXhlKGVhcC0+YXJnKTsKKyAgICBtbF9jbGVhcm1hcmtlZCgpOwkgICAvKiBjbGVhciByZXN0IG9mIHRoZSBtYXJrcyAqLworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZXhfZXZhbC5jIGIvc3JjL2V4X2V2YWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjFkNjA4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2V4X2V2YWwuYwpAQCAtMCwwICsxLDIwMDQgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIGV4X2V2YWwuYzogZnVuY3Rpb25zIGZvciBFeCBjb21tYW5kIGxpbmUgZm9yIHRoZSArZXZhbCBmZWF0dXJlLgorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorCitzdGF0aWMgdm9pZAlmcmVlX21zZ2xpc3QgX19BUkdTKChzdHJ1Y3QgbXNnbGlzdCAqbCkpOworc3RhdGljIGludAl0aHJvd19leGNlcHRpb24gX19BUkdTKCh2b2lkICosIGludCwgY2hhcl91ICopKTsKK3N0YXRpYyB2b2lkCXJld2luZF9jb25kaXRpb25hbHMgX19BUkdTKChzdHJ1Y3QgY29uZHN0YWNrICosCisJCQkJCQkJICAgIGludCwgaW50LCBpbnQgKikpOworCisvKgorICogRXhjZXB0aW9uIGhhbmRsaW5nIHRlcm1zOgorICoKKyAqCTp0cnkJCSI6dHJ5IiBjb21tYW5kCQlcCisgKgkgICAgLi4uCQl0cnkgYmxvY2sJCXwKKyAqCTpjYXRjaCBSRQkiOmNhdGNoIiBjb21tYW5kCXwKKyAqCSAgICAuLi4JCWNhdGNoIGNsYXVzZQkJfC0gdHJ5IGNvbmRpdGlvbmFsCisgKgk6ZmluYWxseQkiOmZpbmFsbHkiIGNvbW1hbmQJfAorICoJICAgIC4uLgkJZmluYWxseSBjbGF1c2UJCXwKKyAqCTplbmR0cnkJCSI6ZW5kdHJ5IiBjb21tYW5kCS8KKyAqCisgKiBUaGUgdHJ5IGNvbmRpdGlvbmFsIG1heSBoYXZlIGFueSBudW1iZXIgb2YgY2F0Y2ggY2xhdXNlcyBhbmQgYXQgbW9zdCBvbmUKKyAqIGZpbmFsbHkgY2xhdXNlLiAgQSAiOnRocm93IiBjb21tYW5kIGNhbiBiZSBpbnNpZGUgdGhlIHRyeSBibG9jaywgYSBjYXRjaAorICogY2xhdXNlLCB0aGUgZmluYWxseSBjbGF1c2UsIG9yIGluIGEgZnVuY3Rpb24gY2FsbGVkIG9yIHNjcmlwdCBzb3VyY2VkIGZyb20KKyAqIHRoZXJlIG9yIGV2ZW4gb3V0c2lkZSB0aGUgdHJ5IGNvbmRpdGlvbmFsLiAgVHJ5IGNvbmRpdGlvbmFscyBtYXkgYmUgbmVzdGVkLgorICovCisKKy8qCisgKiBDb25maWd1cmF0aW9uIHdoZXRoZXIgYW4gZXhjZXB0aW9uIGlzIHRocm93biBvbiBlcnJvciBvciBpbnRlcnJ1cHQuICBXaGVuCisgKiB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvcyBiZWxvdyBldmFsdWF0ZSB0byBGQUxTRSwgYW4gZXJyb3IgKGRpZF9lbXNnKSBvcgorICogaW50ZXJydXB0IChnb3RfaW50KSB1bmRlciBhbiBhY3RpdmUgdHJ5IGNvbmRpdGlvbmFsIHRlcm1pbmF0ZXMgdGhlIHNjcmlwdAorICogYWZ0ZXIgdGhlIG5vbi1hY3RpdmUgZmluYWxseSBjbGF1c2VzIG9mIGFsbCBhY3RpdmUgdHJ5IGNvbmRpdGlvbmFscyBoYXZlIGJlZW4KKyAqIGV4ZWN1dGVkLiAgT3RoZXJ3aXNlLCBlcnJvcnMgYW5kL29yIGludGVycnVwdHMgYXJlIGNvbnZlcnRlZCBpbnRvIGNhdGNoYWJsZQorICogZXhjZXB0aW9ucyAoZGlkX3Rocm93IGFkZGl0aW9uYWxseSBzZXQpLCB3aGljaCB0ZXJtaW5hdGUgdGhlIHNjcmlwdCBvbmx5IGlmCisgKiBub3QgY2F1Z2h0LiAgRm9yIHVzZXIgZXhjZXB0aW9ucywgb25seSBkaWRfdGhyb3cgaXMgc2V0LiAgKE5vdGU6IGdvdF9pbnQgY2FuCisgKiBiZSBzZXQgYXN5bmNyb25vdXNseSBhZnRlcndhcmRzIGJ5IGEgU0lHSU5ULCBzbyBkaWRfdGhyb3cgJiYgZ290X2ludCBpcyBub3QKKyAqIGEgcmVsaWFudCB0ZXN0IHRoYXQgdGhlIGV4Y2VwdGlvbiBjdXJyZW50bHkgYmVpbmcgdGhyb3duIGlzIGFuIGludGVycnVwdAorICogZXhjZXB0aW9uLiAgU2ltaWxhcmx5LCBkaWRfZW1zZyBjYW4gYmUgc2V0IGFmdGVyd2FyZHMgb24gYW4gZXJyb3IgaW4gYW4KKyAqICh1bnNraXBwZWQpIGNvbmRpdGlvbmFsIGNvbW1hbmQgaW5zaWRlIGFuIGluYWN0aXZlIGNvbmRpdGlvbmFsLCBzbyBkaWRfdGhyb3cKKyAqICYmIGRpZF9lbXNnIGlzIG5vdCBhIHJlbGlhbnQgdGVzdCB0aGF0IHRoZSBleGNlcHRpb24gY3VycmVudGx5IGJlaW5nIHRocm93bgorICogaXMgYW4gZXJyb3IgZXhjZXB0aW9uLikgIC0gIFRoZSBtYWNyb3MgY2FuIGJlIGRlZmluZWQgYXMgZXhwcmVzc2lvbnMgY2hlY2tpbmcKKyAqIGZvciBhIHZhcmlhYmxlIHRoYXQgaXMgYWxsb3dlZCB0byBiZSBjaGFuZ2VkIGR1cmluZyBleGVjdXRpb24gb2YgYSBzY3JpcHQuCisgKi8KKyNpZiAwCisvKiBFeHByZXNzaW9ucyB1c2VkIGZvciB0ZXN0aW5nIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQgcGhhc2UuICovCisjIGRlZmluZSBUSFJPV19PTl9FUlJPUgkJKCFldmFsX3RvX251bWJlcigiJFZJTU5PRVJSVEhST1ciKSkKKyMgZGVmaW5lIFRIUk9XX09OX0lOVEVSUlVQVAkoIWV2YWxfdG9fbnVtYmVyKCIkVklNTk9JTlRUSFJPVyIpKQorIyBkZWZpbmUgVEhST1dfVEVTVAorI2Vsc2UKKy8qIFZhbHVlcyB1c2VkIGZvciB0aGUgVmltIHJlbGVhc2UuICovCisjIGRlZmluZSBUSFJPV19PTl9FUlJPUgkJVFJVRQorIyBkZWZpbmUgVEhST1dfT05fSU5URVJSVVBUCVRSVUUKKyNlbmRpZgorCitzdGF0aWMgdm9pZAljYXRjaF9leGNlcHRpb24gX19BUkdTKChleGNlcHRfVCAqZXhjcCkpOworc3RhdGljIHZvaWQJZmluaXNoX2V4Y2VwdGlvbiBfX0FSR1MoKGV4Y2VwdF9UICpleGNwKSk7CitzdGF0aWMgdm9pZAlkaXNjYXJkX2V4Y2VwdGlvbiBfX0FSR1MoKGV4Y2VwdF9UICpleGNwLCBpbnQgd2FzX2ZpbmlzaGVkKSk7CitzdGF0aWMgdm9pZAlyZXBvcnRfcGVuZGluZyBfX0FSR1MoKGludCBhY3Rpb24sIGludCBwZW5kaW5nLCB2b2lkICp2YWx1ZSkpOworCisvKgorICogV2hlbiBzZXZlcmFsIGVycm9ycyBhcHBlYXIgaW4gYSByb3csIHNldHRpbmcgImZvcmNlX2Fib3J0IiBpcyBkZWxheWVkIHVudGlsCisgKiB0aGUgZmFpbGluZyBjb21tYW5kIHJldHVybmVkLiAgImNhdXNlX2Fib3J0IiBpcyBzZXQgdG8gVFJVRSBtZWFud2hpbGUsIGluCisgKiBvcmRlciB0byBpbmRpY2F0ZSB0aGF0IHNpdHVhdGlvbi4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gImZvcmNlX2Fib3J0IiB3YXMgc2V0CisgKiBkdXJpbmcgZXhlY3V0aW9uIG9mIGEgZnVuY3Rpb24gY2FsbCBmcm9tIGFuIGV4cHJlc3Npb246IHRoZSBhYm9ydGluZyBvZiB0aGUKKyAqIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBpcyBkb25lIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBlcnJvciBtZXNzYWdlcywgYnV0IGFsbAorICogZXJyb3IgbWVzc2FnZXMgb24gcGFyc2luZyBlcnJvcnMgZHVyaW5nIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24gYXJlIGdpdmVuCisgKiAoZXZlbiBpZiBhIHRyeSBjb25kaXRpb25hbCBpcyBhY3RpdmUpLgorICovCitzdGF0aWMgaW50IGNhdXNlX2Fib3J0ID0gRkFMU0U7CisKKy8qCisgKiBSZXR1cm4gVFJVRSB3aGVuIGltbWRlZGlhdGVseSBhYm9ydGluZyBvbiBlcnJvciwgb3Igd2hlbiBhbiBpbnRlcnJ1cHQKKyAqIG9jY3VycmVkIG9yIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGJ1dCBub3QgY2F1Z2h0LiAgVXNlIGZvciAiOntyYW5nZX1jYWxsIgorICogdG8gY2hlY2sgd2hldGhlciBhbiBhYm9ydGVkIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgaGFuZGxlIGEgcmFuZ2UgaXRzZWxmCisgKiBzaG91bGQgYmUgY2FsbGVkIGFnYWluIGZvciB0aGUgbmV4dCBsaW5lIGluIHRoZSByYW5nZS4gIEFsc28gdXNlZCBmb3IKKyAqIGNhbmNlbGxpbmcgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGFmdGVyIGEgZnVuY3Rpb24gY2FsbCBjYXVzZWQgYW4gaW1tZWRpYXRlCisgKiBhYm9ydC4gIE5vdGUgdGhhdCB0aGUgZmlyc3QgZW1zZygpIGNhbGwgdGVtcG9yYXJpbHkgcmVzZXRzICJmb3JjZV9hYm9ydCIKKyAqIHVudGlsIHRoZSB0aHJvdyBwb2ludCBmb3IgZXJyb3IgbWVzc2FnZXMgaGFzIGJlZW4gcmVhY2hlZC4gIFRoYXQgaXMsIGR1cmluZworICogY2FuY2VsbGF0aW9uIG9mIGFuIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBhZnRlciBhbiBhYm9ydGluZyBmdW5jdGlvbiBjYWxsIG9yCisgKiBkdWUgdG8gYSBwYXJzaW5nIGVycm9yLCBhYm9ydGluZygpIGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIHZhbHVlLgorICovCisgICAgaW50CithYm9ydGluZygpCit7CisgICAgcmV0dXJuIChkaWRfZW1zZyAmJiBmb3JjZV9hYm9ydCkgfHwgZ290X2ludCB8fCBkaWRfdGhyb3c7Cit9CisKKy8qCisgKiBUaGUgdmFsdWUgb2YgImZvcmNlX2Fib3J0IiBpcyB0ZW1wb3JhcmlseSByZXNldCBieSB0aGUgZmlyc3QgZW1zZygpIGNhbGwKKyAqIGR1cmluZyBhbiBleHByZXNzaW9uIGV2YWx1YXRpb24sIGFuZCAiY2F1c2VfYWJvcnQiIGlzIHVzZWQgaW5zdGVhZC4gIEl0IG1pZ2h0CisgKiBiZSBuZWNlc3NhcnkgdG8gcmVzdG9yZSAiZm9yY2VfYWJvcnQiIGV2ZW4gYmVmb3JlIHRoZSB0aHJvdyBwb2ludCBmb3IgdGhlCisgKiBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIHJlYWNoZWQuICB1cGRhdGVfZm9yY2VfYWJvcnQoKSBzaG91bGQgYmUgY2FsbGVkIHRoZW4uCisgKi8KKyAgICB2b2lkCit1cGRhdGVfZm9yY2VfYWJvcnQoKQoreworICAgIGlmIChjYXVzZV9hYm9ydCkKKwlmb3JjZV9hYm9ydCA9IFRSVUU7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBhIGNvbW1hbmQgd2l0aCBhIHN1YmNvbW1hbmQgcmVzdWx0aW5nIGluICJyZXRjb2RlIiBzaG91bGQKKyAqIGFib3J0IHRoZSBzY3JpcHQgcHJvY2Vzc2luZy4gIENhbiBiZSB1c2VkIHRvIHN1cHByZXNzIGFuIGF1dG9jb21tYW5kIGFmdGVyCisgKiBleGVjdXRpb24gb2YgYSBmYWlsaW5nIHN1YmNvbW1hbmQgYXMgbG9uZyBhcyB0aGUgZXJyb3IgbWVzc2FnZSBoYXMgbm90IGJlZW4KKyAqIGRpc3BsYXllZCBhbmQgYWN0dWFsbHkgY2F1c2VkIHRoZSBhYm9ydGlvbi4KKyAqLworICAgIGludAorc2hvdWxkX2Fib3J0KHJldGNvZGUpCisgICAgaW50CQlyZXRjb2RlOworeworICAgIHJldHVybiAoKHJldGNvZGUgPT0gRkFJTCAmJiB0cnlsZXZlbCAhPSAwICYmICFlbXNnX3NpbGVudCkgfHwgYWJvcnRpbmcoKSk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBhIGZ1bmN0aW9uIHdpdGggdGhlICJhYm9ydCIgZmxhZyBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQKKyAqIGVuZGVkIG9uIGFuIGVycm9yLiAgVGhpcyBtZWFucyB0aGF0IHBhcnNpbmcgY29tbWFuZHMgaXMgY29udGludWVkIGluIG9yZGVyCisgKiB0byBmaW5kIGZpbmFsbHkgY2xhdXNlcyB0byBiZSBleGVjdXRlZCwgYW5kIHRoYXQgc29tZSBlcnJvcnMgaW4gc2tpcHBlZAorICogY29tbWFuZHMgYXJlIHN0aWxsIHJlcG9ydGVkLgorICovCisgICAgaW50CithYm9ydGVkX2luX3RyeSgpCit7CisgICAgLyogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbiBlcnJvci4gIEluIHRoaXMgY2FzZSwgImZvcmNlX2Fib3J0IgorICAgICAqIGRldGVybWluZXMgd2hldGhlciBzZWFyY2hpbmcgZm9yIGZpbmFsbHkgY2xhdXNlcyBpcyBuZWNlc3NhcnkuICovCisgICAgcmV0dXJuIGZvcmNlX2Fib3J0OworfQorCisvKgorICogY2F1c2VfZXJydGhyb3coKTogQ2F1c2UgYSB0aHJvdyBvZiBhbiBlcnJvciBleGNlcHRpb24gaWYgYXBwcm9wcmlhdGUuCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgZXJyb3IgbWVzc2FnZSBzaG91bGQgbm90IGJlIGRpc3BsYXllZCBieSBlbXNnKCkuCisgKiBTZXRzICJpZ25vcmUiLCBpZiB0aGUgZW1zZygpIGNhbGwgc2hvdWxkIGJlIGlnbm9yZWQgY29tcGxldGVseS4KKyAqCisgKiBXaGVuIHNldmVyYWwgbWVzc2FnZXMgYXBwZWFyIGluIHRoZSBzYW1lIGNvbW1hbmQsIHRoZSBmaXJzdCBpcyB1c3VhbGx5IHRoZQorICogbW9zdCBzcGVjaWZpYyBvbmUgYW5kIHVzZWQgYXMgdGhlIGV4Y2VwdGlvbiB2YWx1ZS4gIFRoZSAic2V2ZXJlIiBmbGFnIGNhbiBiZQorICogc2V0IHRvIFRSVUUsIGlmIGEgbGF0ZXIgYnV0IHNldmVyZXIgbWVzc2FnZSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorICovCisgICAgaW50CitjYXVzZV9lcnJ0aHJvdyhtZXNnLCBzZXZlcmUsIGlnbm9yZSkKKyAgICBjaGFyX3UJKm1lc2c7CisgICAgaW50CQlzZXZlcmU7CisgICAgaW50CQkqaWdub3JlOworeworICAgIHN0cnVjdCBtc2dsaXN0ICplbGVtOworICAgIHN0cnVjdCBtc2dsaXN0ICoqcGxpc3Q7CisKKyAgICAvKgorICAgICAqIERvIG5vdGhpbmcgd2hlbiBkaXNwbGF5aW5nIHRoZSBpbnRlcnJ1cHQgbWVzc2FnZSBvciByZXBvcnRpbmcgYW4gdW5jYXVnaHQKKyAgICAgKiBleGNlcHRpb24gKHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gZGlzY2FyZGVkIHRoZW4pIGF0IHRoZSB0b3AgbGV2ZWwuICBBbHNvCisgICAgICogd2hlbiBubyBleGNlcHRpb24gY2FuIGJlIHRocm93bi4gIFRoZSBtZXNzYWdlIHdpbGwgYmUgZGlzcGxheWVkIGJ5CisgICAgICogZW1zZygpLgorICAgICAqLworICAgIGlmIChzdXBwcmVzc19lcnJ0aHJvdykKKwlyZXR1cm4gRkFMU0U7CisKKyAgICAvKgorICAgICAqIElmIGVtc2coKSBoYXMgbm90IGJlZW4gY2FsbGVkIHByZXZpb3VzbHksIHRlbXBvcmFyaWx5IHJlc2V0ICJmb3JjZV9hYm9ydCIKKyAgICAgKiB1bnRpbCB0aGUgdGhyb3cgcG9pbnQgZm9yIGVycm9yIG1lc3NhZ2VzIGhhcyBiZWVuIHJlYWNoZWQuICBUaGlzIGVuc3VyZXMKKyAgICAgKiB0aGF0IGFib3J0aW5nKCkgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBmb3IgYWxsIGVycm9ycyB0aGF0IGFwcGVhciBpbiB0aGUKKyAgICAgKiBzYW1lIGNvbW1hbmQuICBUaGlzIG1lYW5zIHBhcnRpY3VsYXJseSB0aGF0IGZvciBwYXJzaW5nIGVycm9ycyBkdXJpbmcKKyAgICAgKiBleHByZXNzaW9uIGV2YWx1YXRpb24gZW1zZygpIHdpbGwgYmUgY2FsbGVkIG11bHRpcGx5LCBldmVuIHdoZW4gdGhlCisgICAgICogZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgZnJvbSBhIGZpbmFsbHkgY2xhdXNlIHRoYXQgd2FzIGFjdGl2YXRlZCBkdWUgdG8KKyAgICAgKiBhbiBhYm9ydGluZyBlcnJvciwgaW50ZXJydXB0LCBvciBleGNlcHRpb24uCisgICAgICovCisgICAgaWYgKCFkaWRfZW1zZykKKyAgICB7CisJY2F1c2VfYWJvcnQgPSBmb3JjZV9hYm9ydDsKKwlmb3JjZV9hYm9ydCA9IEZBTFNFOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgbm8gdHJ5IGNvbmRpdGlvbmFsIGlzIGFjdGl2ZSBhbmQgbm8gZXhjZXB0aW9uIGlzIGJlaW5nIHRocm93biBhbmQKKyAgICAgKiB0aGVyZSBoYXMgbm90IGJlZW4gYW4gZXJyb3IgaW4gYSB0cnkgY29uZGl0aW9uYWwgb3IgYSB0aHJvdyBzbyBmYXIsIGRvCisgICAgICogbm90aGluZyAoZm9yIGNvbXBhdGliaWxpdHkgb2Ygbm9uLUVIIHNjcmlwdHMpLiAgVGhlIG1lc3NhZ2Ugd2lsbCB0aGVuIGJlCisgICAgICogZGlzcGxheWVkIGJ5IGVtc2coKS4gIFdoZW4gIjpzaWxlbnQhIiB3YXMgdXNlZCBhbmQgd2UgYXJlIG5vdCBjdXJyZW50bHkKKyAgICAgKiB0aHJvd2luZyBhbiBleGNlcHRpb24sIGRvIG5vdGhpbmcuICBUaGUgbWVzc2FnZSB0ZXh0IHdpbGwgdGhlbiBiZSBzdG9yZWQKKyAgICAgKiB0byB2OmVycm1zZyBieSBlbXNnKCkgd2l0aG91dCBkaXNwbGF5aW5nIGl0LgorICAgICAqLworICAgIGlmICgoKHRyeWxldmVsID09IDAgJiYgIWNhdXNlX2Fib3J0KSB8fCBlbXNnX3NpbGVudCkgJiYgIWRpZF90aHJvdykKKwlyZXR1cm4gRkFMU0U7CisKKyAgICAvKgorICAgICAqIElnbm9yZSBhbiBpbnRlcnJ1cHQgbWVzc2FnZSB3aGVuIGluc2lkZSBhIHRyeSBjb25kaXRpb25hbCBvciB3aGVuIGFuCisgICAgICogZXhjZXB0aW9uIGlzIGJlaW5nIHRocm93biBvciB3aGVuIGFuIGVycm9yIGluIGEgdHJ5IGNvbmRpdGlvbmFsIG9yIHRocm93CisgICAgICogaGFzIGJlZW4gZGV0ZWN0ZWQgcHJldmlvdXNseS4gIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRoYXQgYW4KKyAgICAgKiBpbnRlcnJ1cHQgZXhjZXB0aW9uIGlzIGNhdGNoYWJsZSBieSB0aGUgaW5uZXJtb3N0IHRyeSBjb25kaXRpb25hbCBhbmQKKyAgICAgKiBub3QgcmVwbGFjZWQgYnkgYW4gaW50ZXJydXB0IG1lc3NhZ2UgZXJyb3IgZXhjZXB0aW9uLgorICAgICAqLworICAgIGlmIChtZXNnID09IChjaGFyX3UgKilfKGVfaW50ZXJyKSkKKyAgICB7CisJKmlnbm9yZSA9IFRSVUU7CisJcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBFbnN1cmUgdGhhdCBhbGwgY29tbWFuZHMgaW4gbmVzdGVkIGZ1bmN0aW9uIGNhbGxzIGFuZCBzb3VyY2VkIGZpbGVzCisgICAgICogYXJlIGFib3J0ZWQgaW1tZWRpYXRlbHkuCisgICAgICovCisgICAgY2F1c2VfYWJvcnQgPSBUUlVFOworCisgICAgLyoKKyAgICAgKiBXaGVuIGFuIGV4Y2VwdGlvbiBpcyBiZWluZyB0aHJvd24sIHNvbWUgY29tbWFuZHMgKGxpa2UgY29uZGl0aW9uYWxzKSBhcmUKKyAgICAgKiBub3Qgc2tpcHBlZC4gIEVycm9ycyBpbiB0aG9zZSBjb21tYW5kcyBtYXkgYWZmZWN0IHdoYXQgb2YgdGhlIHN1YnNlcXVlbnQKKyAgICAgKiBjb21tYW5kcyBhcmUgcmVnYXJkZWQgcGFydCBvZiBjYXRjaCBhbmQgZmluYWxseSBjbGF1c2VzLiAgQ2F0Y2hpbmcgdGhlCisgICAgICogZXhjZXB0aW9uIHdvdWxkIHRoZW4gY2F1c2UgZXhlY3V0aW9uIG9mIGNvbW1hbmRzIG5vdCBpbnRlbmRlZCBieSB0aGUKKyAgICAgKiB1c2VyLCB3aG8gd291bGRuJ3QgZXZlbiBnZXQgYXdhcmUgb2YgdGhlIHByb2JsZW0uICBUaGVyZWZvciwgZGlzY2FyZCB0aGUKKyAgICAgKiBleGNlcHRpb24gY3VycmVudGx5IGJlaW5nIHRocm93biB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2F1Z2h0LiAgSnVzdAorICAgICAqIGV4ZWN1dGUgZmluYWxseSBjbGF1c2VzIGFuZCB0ZXJtaW5hdGUuCisgICAgICovCisgICAgaWYgKGRpZF90aHJvdykKKyAgICB7CisJLyogV2hlbiBkaXNjYXJkaW5nIGFuIGludGVycnVwdCBleGNlcHRpb24sIHJlc2V0IGdvdF9pbnQgdG8gcHJldmVudCB0aGUKKwkgKiBzYW1lIGludGVycnVwdCBiZWluZyBjb252ZXJ0ZWQgdG8gYW4gZXhjZXB0aW9uIGFnYWluIGFuZCBkaXNjYXJkaW5nCisJICogdGhlIGVycm9yIGV4Y2VwdGlvbiB3ZSBhcmUgYWJvdXQgdG8gdGhyb3cgaGVyZS4gKi8KKwlpZiAoY3VycmVudF9leGNlcHRpb24tPnR5cGUgPT0gRVRfSU5URVJSVVBUKQorCSAgICBnb3RfaW50ID0gRkFMU0U7CisJZGlzY2FyZF9jdXJyZW50X2V4Y2VwdGlvbigpOworICAgIH0KKworI2lmZGVmIFRIUk9XX1RFU1QKKyAgICBpZiAoIVRIUk9XX09OX0VSUk9SKQorICAgIHsKKwkvKgorCSAqIFByaW50IGVycm9yIG1lc3NhZ2UgaW1tZWRpYXRlbHkgd2l0aG91dCBzZWFyY2hpbmcgZm9yIGEgbWF0Y2hpbmcKKwkgKiBjYXRjaCBjbGF1c2U7IGp1c3QgZmluYWxseSBjbGF1c2VzIGFyZSBleGVjdXRlZCBiZWZvcmUgdGhlIHNjcmlwdAorCSAqIGlzIHRlcm1pbmF0ZWQuCisJICovCisJcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJLyoKKwkgKiBQcmVwYXJlIHRoZSB0aHJvdyBvZiBhbiBlcnJvciBleGNlcHRpb24sIHNvIHRoYXQgZXZlcnl0aGluZyB3aWxsCisJICogYmUgYWJvcnRlZCAoZXhjZXB0IGZvciBleGVjdXRpbmcgZmluYWxseSBjbGF1c2VzKSwgdW50aWwgdGhlIGVycm9yCisJICogZXhjZXB0aW9uIGlzIGNhdWdodDsgaWYgc3RpbGwgdW5jYXVnaHQgYXQgdGhlIHRvcCBsZXZlbCwgdGhlIGVycm9yCisJICogbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZCBhbmQgdGhlIHNjcmlwdCBwcm9jZXNzaW5nIHRlcm1pbmF0ZWQKKwkgKiB0aGVuLiAgLSAgVGhpcyBmdW5jdGlvbiBoYXMgbm8gYWNjZXNzIHRvIHRoZSBjb25kaXRpb25hbCBzdGFjay4KKwkgKiBUaHVzLCB0aGUgYWN0dWFsIHRocm93IGlzIG1hZGUgYWZ0ZXIgdGhlIGZhaWxpbmcgY29tbWFuZCBoYXMKKwkgKiByZXR1cm5lZC4gIC0gIFRocm93IG9ubHkgdGhlIGZpcnN0IG9mIHNldmVyYWwgZXJyb3JzIGluIGEgcm93LCBleGNlcHQKKwkgKiBhIHNldmVyZSBlcnJvciBpcyBmb2xsb3dpbmcuCisJICovCisJaWYgKG1zZ19saXN0ICE9IE5VTEwpCisJeworCSAgICBwbGlzdCA9IG1zZ19saXN0OworCSAgICB3aGlsZSAoKnBsaXN0ICE9IE5VTEwpCisJCXBsaXN0ID0gJigqcGxpc3QpLT5uZXh0OworCisJICAgIGVsZW0gPSAoc3RydWN0IG1zZ2xpc3QgKilhbGxvYygodW5zaWduZWQpc2l6ZW9mKHN0cnVjdCBtc2dsaXN0KSk7CisJICAgIGlmIChlbGVtID09IE5VTEwpCisJICAgIHsKKwkJc3VwcHJlc3NfZXJydGhyb3cgPSBUUlVFOworCQlFTVNHKF8oZV9vdXRvZm1lbSkpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQllbGVtLT5tc2cgPSB2aW1fc3Ryc2F2ZShtZXNnKTsKKwkJaWYgKGVsZW0tPm1zZyA9PSBOVUxMKQorCQl7CisJCSAgICB2aW1fZnJlZShlbGVtKTsKKwkJICAgIHN1cHByZXNzX2VycnRocm93ID0gVFJVRTsKKwkJICAgIEVNU0coXyhlX291dG9mbWVtKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBlbGVtLT5uZXh0ID0gTlVMTDsKKwkJICAgIGVsZW0tPnRocm93X21zZyA9IE5VTEw7CisJCSAgICAqcGxpc3QgPSBlbGVtOworCQkgICAgaWYgKHBsaXN0ID09IG1zZ19saXN0IHx8IHNldmVyZSkKKwkJICAgIHsKKwkJCWNoYXJfdQkgICAgKnRtc2c7CisKKwkJCS8qIFNraXAgdGhlIGV4dHJhICJWaW0gIiBwcmVmaXggZm9yIG1lc3NhZ2UgIkU0NTgiLiAqLworCQkJdG1zZyA9IGVsZW0tPm1zZzsKKwkJCWlmIChTVFJOQ01QKHRtc2csICJWaW0gRSIsIDUpID09IDAKKwkJCQkmJiBWSU1fSVNESUdJVCh0bXNnWzVdKQorCQkJCSYmIFZJTV9JU0RJR0lUKHRtc2dbNl0pCisJCQkJJiYgVklNX0lTRElHSVQodG1zZ1s3XSkKKwkJCQkmJiB0bXNnWzhdID09ICc6JworCQkJCSYmIHRtc2dbOV0gPT0gJyAnKQorCQkJICAgICgqbXNnX2xpc3QpLT50aHJvd19tc2cgPSAmdG1zZ1s0XTsKKwkJCWVsc2UKKwkJCSAgICAoKm1zZ19saXN0KS0+dGhyb3dfbXNnID0gdG1zZzsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorCXJldHVybiBUUlVFOworICAgIH0KK30KKworLyoKKyAqIEZyZWUgYSAibXNnX2xpc3QiIGFuZCB0aGUgbWVzc2FnZXMgaXQgY29udGFpbnMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZnJlZV9tc2dsaXN0KGwpCisgICAgc3RydWN0IG1zZ2xpc3QgICpsOworeworICAgIHN0cnVjdCBtc2dsaXN0ICAqbWVzc2FnZXMsICpuZXh0OworCisgICAgbWVzc2FnZXMgPSBsOworICAgIHdoaWxlIChtZXNzYWdlcyAhPSBOVUxMKQorICAgIHsKKwluZXh0ID0gbWVzc2FnZXMtPm5leHQ7CisJdmltX2ZyZWUobWVzc2FnZXMtPm1zZyk7CisJdmltX2ZyZWUobWVzc2FnZXMpOworCW1lc3NhZ2VzID0gbmV4dDsKKyAgICB9Cit9CisKKy8qCisgKiBUaHJvdyB0aGUgbWVzc2FnZSBzcGVjaWZpZWQgaW4gdGhlIGNhbGwgdG8gY2F1c2VfZXJydGhyb3coKSBhYm92ZSBhcyBhbgorICogZXJyb3IgZXhjZXB0aW9uLiAgSWYgY3N0YWNrIGlzIE5VTEwsIHBvc3Rwb25lIHRoZSB0aHJvdyB1bnRpbCBkb19jbWRsaW5lKCkKKyAqIGhhcyByZXR1cm5lZCAoc2VlIGRvX29uZV9jbWQoKSkuCisgKi8KKyAgICB2b2lkCitkb19lcnJ0aHJvdyhjc3RhY2ssIGNtZG5hbWUpCisgICAgc3RydWN0IGNvbmRzdGFjawkqY3N0YWNrOworICAgIGNoYXJfdQkJKmNtZG5hbWU7Cit7CisgICAgLyoKKyAgICAgKiBFbnN1cmUgdGhhdCBhbGwgY29tbWFuZHMgaW4gbmVzdGVkIGZ1bmN0aW9uIGNhbGxzIGFuZCBzb3VyY2VkIGZpbGVzCisgICAgICogYXJlIGFib3J0ZWQgaW1tZWRpYXRlbHkuCisgICAgICovCisgICAgaWYgKGNhdXNlX2Fib3J0KQorICAgIHsKKwljYXVzZV9hYm9ydCA9IEZBTFNFOworCWZvcmNlX2Fib3J0ID0gVFJVRTsKKyAgICB9CisKKyAgICAvKiBJZiBubyBleGNlcHRpb24gaXMgdG8gYmUgdGhyb3duIG9yIHRoZSBjb252ZXJzaW9uIHNob3VsZCBiZSBkb25lIGFmdGVyCisgICAgICogcmV0dXJuaW5nIHRvIGEgcHJldmlvdXMgaW52b2NhdGlvbiBvZiBkb19vbmVfY21kKCksIGRvIG5vdGhpbmcuICovCisgICAgaWYgKCptc2dfbGlzdCA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGlmICh0aHJvd19leGNlcHRpb24oKm1zZ19saXN0LCBFVF9FUlJPUiwgY21kbmFtZSkgPT0gRkFJTCkKKwlmcmVlX21zZ2xpc3QoKm1zZ19saXN0KTsKKyAgICBlbHNlCisgICAgeworCWlmIChjc3RhY2sgIT0gTlVMTCkKKwkgICAgZG9fdGhyb3coY3N0YWNrKTsKKwllbHNlCisJICAgIG5lZWRfcmV0aHJvdyA9IFRSVUU7CisgICAgfQorICAgICptc2dfbGlzdCA9IE5VTEw7Cit9CisKKy8qCisgKiBkb19pbnR0aHJvdygpOiBSZXBsYWNlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBieSBhbiBpbnRlcnJ1cHQgb3IgaW50ZXJydXB0CisgKiBleGNlcHRpb24gaWYgYXBwcm9wcmlhdGUuICBSZXR1cm4gVFJVRSBpZiB0aGUgY3VycmVudCBleGNlcHRpb24gaXMgZGlzY2FyZGVkLAorICogRkFMU0Ugb3RoZXJ3aXNlLgorICovCisgICAgaW50Citkb19pbnR0aHJvdyhjc3RhY2spCisgICAgc3RydWN0IGNvbmRzdGFjawkqY3N0YWNrOworeworICAgIC8qCisgICAgICogSWYgbm8gaW50ZXJydXB0IG9jY3VycmVkIG9yIG5vIHRyeSBjb25kaXRpb25hbCBpcyBhY3RpdmUgYW5kIG5vIGV4Y2VwdGlvbgorICAgICAqIGlzIGJlaW5nIHRocm93biwgZG8gbm90aGluZyAoZm9yIGNvbXBhdGliaWxpdHkgb2Ygbm9uLUVIIHNjcmlwdHMpLgorICAgICAqLworICAgIGlmICghZ290X2ludCB8fCAodHJ5bGV2ZWwgPT0gMCAmJiAhZGlkX3Rocm93KSkKKwlyZXR1cm4gRkFMU0U7CisKKyNpZmRlZiBUSFJPV19URVNUCS8qIGF2b2lkIHdhcm5pbmcgZm9yIGNvbmRpdGlvbiBhbHdheXMgdHJ1ZSAqLworICAgIGlmICghVEhST1dfT05fSU5URVJSVVBUKQorICAgIHsKKwkvKgorCSAqIFRoZSBpbnRlcnJ1cHQgYWJvcnRzIGV2ZXJ5dGhpbmcgZXhjZXB0IGZvciBleGVjdXRpbmcgZmluYWxseSBjbGF1c2VzLgorCSAqIERpc2NhcmQgYW55IHVzZXIgb3IgZXJyb3Igb3IgaW50ZXJydXB0IGV4Y2VwdGlvbiBjdXJyZW50bHkgYmVpbmcKKwkgKiB0aHJvd24uCisJICovCisJaWYgKGRpZF90aHJvdykKKwkgICAgZGlzY2FyZF9jdXJyZW50X2V4Y2VwdGlvbigpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJLyoKKwkgKiBUaHJvdyBhbiBpbnRlcnJ1cHQgZXhjZXB0aW9uLCBzbyB0aGF0IGV2ZXJ5dGhpbmcgd2lsbCBiZSBhYm9ydGVkCisJICogKGV4Y2VwdCBmb3IgZXhlY3V0aW5nIGZpbmFsbHkgY2xhdXNlcyksIHVudGlsIHRoZSBpbnRlcnJ1cHQgZXhjZXB0aW9uCisJICogaXMgY2F1Z2h0OyBpZiBzdGlsbCB1bmNhdWdodCBhdCB0aGUgdG9wIGxldmVsLCB0aGUgc2NyaXB0IHByb2Nlc3NpbmcKKwkgKiB3aWxsIGJlIHRlcm1pbmF0ZWQgdGhlbi4gIC0gIElmIGFuIGludGVycnVwdCBleGNlcHRpb24gaXMgYWxyZWFkeQorCSAqIGJlaW5nIHRocm93biwgZG8gbm90aGluZy4KKwkgKgorCSAqLworCWlmIChkaWRfdGhyb3cpCisJeworCSAgICBpZiAoY3VycmVudF9leGNlcHRpb24tPnR5cGUgPT0gRVRfSU5URVJSVVBUKQorCQlyZXR1cm4gRkFMU0U7CisKKwkgICAgLyogQW4gaW50ZXJydXB0IGV4Y2VwdGlvbiByZXBsYWNlcyBhbnkgdXNlciBvciBlcnJvciBleGNlcHRpb24uICovCisJICAgIGRpc2NhcmRfY3VycmVudF9leGNlcHRpb24oKTsKKwl9CisJaWYgKHRocm93X2V4Y2VwdGlvbigiVmltOkludGVycnVwdCIsIEVUX0lOVEVSUlVQVCwgTlVMTCkgIT0gRkFJTCkKKwkgICAgZG9fdGhyb3coY3N0YWNrKTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogVGhyb3cgYSBuZXcgZXhjZXB0aW9uLiAgUmV0dXJuIEZBSUwgd2hlbiBvdXQgb2YgbWVtb3J5IG9yIGl0IHdhcyB0cmllZCB0bworICogdGhyb3cgYW4gaWxsZWdhbCB1c2VyIGV4Y2VwdGlvbi4gICJ2YWx1ZSIgaXMgdGhlIGV4Y2VwdGlvbiBzdHJpbmcgZm9yIGEgdXNlcgorICogb3IgaW50ZXJydXB0IGV4Y2VwdGlvbiwgb3IgcG9pbnRzIHRvIGEgbWVzc2FnZSBsaXN0IGluIGNhc2Ugb2YgYW4gZXJyb3IKKyAqIGV4Y2VwdGlvbi4KKyAqLworICAgIHN0YXRpYyBpbnQKK3Rocm93X2V4Y2VwdGlvbih2YWx1ZSwgdHlwZSwgY21kbmFtZSkKKyAgICB2b2lkCSp2YWx1ZTsKKyAgICBpbnQJCXR5cGU7CisgICAgY2hhcl91CSpjbWRuYW1lOworeworICAgIGV4Y2VwdF9UCSpleGNwOworICAgIGNoYXJfdQkqcCwgKm1lc2csICp2YWw7CisgICAgaW50CQljbWRsZW47CisKKyAgICAvKgorICAgICAqIERpc2FsbG93IGZha2luZyBJbnRlcnJ1cHQgb3IgZXJyb3IgZXhjZXB0aW9ucyBhcyB1c2VyIGV4Y2VwdGlvbnMuICBUaGV5CisgICAgICogd291bGQgYmUgdHJlYXRlZCBkaWZmZXJlbnRseSBmcm9tIHJlYWwgaW50ZXJydXB0IG9yIGVycm9yIGV4Y2VwdGlvbnMgd2hlbgorICAgICAqIG5vIGFjdGl2ZSB0cnkgYmxvY2sgaXMgZm91bmQsIHNlZSBkb19jbWRsaW5lKCkuCisgICAgICovCisgICAgaWYgKHR5cGUgPT0gRVRfVVNFUikKKyAgICB7CisJaWYgKFNUUk5DTVAoKGNoYXJfdSAqKXZhbHVlLCAiVmltIiwgMykgPT0gMCAmJgorCQkoKChjaGFyX3UgKil2YWx1ZSlbM10gPT0gTlVMIHx8ICgoY2hhcl91ICopdmFsdWUpWzNdID09ICc6JyB8fAorCQkgKChjaGFyX3UgKil2YWx1ZSlbM10gPT0gJygnKSkKKwl7CisJICAgIEVNU0coXygiRTYwODogQ2Fubm90IDp0aHJvdyBleGNlcHRpb25zIHdpdGggJ1ZpbScgcHJlZml4IikpOworCSAgICBnb3RvIGZhaWw7CisJfQorICAgIH0KKworICAgIGV4Y3AgPSAoZXhjZXB0X1QgKilhbGxvYygodW5zaWduZWQpc2l6ZW9mKGV4Y2VwdF9UKSk7CisgICAgaWYgKGV4Y3AgPT0gTlVMTCkKKwlnb3RvIG5vbWVtOworCisgICAgaWYgKHR5cGUgPT0gRVRfRVJST1IpCisgICAgeworCS8qIFN0b3JlIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGFuZCBwcmVmaXggdGhlIGV4Y2VwdGlvbiB2YWx1ZSB3aXRoCisJICogIlZpbToiIG9yLCBpZiBhIGNvbW1hbmQgbmFtZSBpcyBnaXZlbiwgIlZpbShjbWRuYW1lKToiLiAqLworCWV4Y3AtPm1lc3NhZ2VzID0gKHN0cnVjdCBtc2dsaXN0ICopdmFsdWU7CisJbWVzZyA9IGV4Y3AtPm1lc3NhZ2VzLT50aHJvd19tc2c7CisJaWYgKGNtZG5hbWUgIT0gTlVMTCAmJiAqY21kbmFtZSAhPSBOVUwpCisJeworCSAgICBjbWRsZW4gPSBTVFJMRU4oY21kbmFtZSk7CisJICAgIGV4Y3AtPnZhbHVlID0gdmltX3N0cm5zYXZlKChjaGFyX3UgKikiVmltKCIsCisJCQkJCSAgIDQgKyBjbWRsZW4gKyAyICsgKGludClTVFJMRU4obWVzZykpOworCSAgICBpZiAoZXhjcC0+dmFsdWUgPT0gTlVMTCkKKwkJZ290byBub21lbTsKKwkgICAgU1RSQ1BZKCZleGNwLT52YWx1ZVs0XSwgY21kbmFtZSk7CisJICAgIFNUUkNQWSgmZXhjcC0+dmFsdWVbNCArIGNtZGxlbl0sICIpOiIpOworCSAgICB2YWwgPSBleGNwLT52YWx1ZSArIDQgKyBjbWRsZW4gKyAyOworCX0KKwllbHNlCisJeworCSAgICBleGNwLT52YWx1ZSA9IHZpbV9zdHJuc2F2ZSgoY2hhcl91ICopIlZpbToiLCA0ICsgKGludClTVFJMRU4obWVzZykpOworCSAgICBpZiAoZXhjcC0+dmFsdWUgPT0gTlVMTCkKKwkJZ290byBub21lbTsKKwkgICAgdmFsID0gZXhjcC0+dmFsdWUgKyA0OworCX0KKworCS8qIG1zZ19hZGRfZm5hbWUgbWF5IGhhdmUgYmVlbiB1c2VkIHRvIHByZWZpeCB0aGUgbWVzc2FnZSB3aXRoIGEgZmlsZQorCSAqIG5hbWUgaW4gcXVvdGVzLiAgSW4gdGhlIGV4Y2VwdGlvbiB2YWx1ZSwgcHV0IHRoZSBmaWxlIG5hbWUgaW4KKwkgKiBwYXJlbnRoZXNlcyBhbmQgbW92ZSBpdCB0byB0aGUgZW5kLiAqLworCWZvciAocCA9IG1lc2c7IDsgcCsrKQorCXsKKwkgICAgaWYgKCpwID09IE5VTAorCQkgICAgfHwgKCpwID09ICdFJworCQkJJiYgVklNX0lTRElHSVQocFsxXSkKKwkJCSYmIChwWzJdID09ICc6JworCQkJICAgIHx8IChWSU1fSVNESUdJVChwWzJdKQorCQkJCSYmIChwWzNdID09ICc6JworCQkJCSAgICB8fCAoVklNX0lTRElHSVQocFszXSkKKwkJCQkJJiYgcFs0XSA9PSAnOicpKSkpKSkKKwkgICAgeworCQlpZiAoKnAgPT0gTlVMIHx8IHAgPT0gbWVzZykgIC8qICdFMTIzJyBtaXNzaW5nIG9yIGF0IGJlZ2lubmluZyAqLworCQkgICAgU1RSQ0FUKHZhbCwgbWVzZyk7CisJCWVsc2UKKwkJeworCQkgICAgLyogJyJmaWxlbmFtZSIgRTEyMzogbWVzc2FnZSB0ZXh0JyAqLworCQkgICAgaWYgKG1lc2dbMF0gIT0gJyInIHx8IHAtMiA8ICZtZXNnWzFdIHx8CisJCQkgICAgcFstMl0gIT0gJyInIHx8IHBbLTFdICE9ICcgJykKKwkJCS8qICJFMTIzOiIgaXMgcGFydCBvZiB0aGUgZmlsZSBuYW1lLiAqLworCQkJY29udGludWU7CisKKwkJICAgIFNUUkNBVCh2YWwsIHApOworCQkgICAgcFstMl0gPSBOVUw7CisJCSAgICBzcHJpbnRmKChjaGFyICopKHZhbCArIFNUUkxFTihwKSksICIgKCVzKSIsICZtZXNnWzFdKTsKKwkJICAgIHBbLTJdID0gJyInOworCQl9CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICBlbHNlCisJZXhjcC0+dmFsdWUgPSB2YWx1ZTsKKworICAgIGV4Y3AtPnR5cGUgPSB0eXBlOworICAgIGV4Y3AtPnRocm93X25hbWUgPSB2aW1fc3Ryc2F2ZShzb3VyY2luZ19uYW1lID09IE5VTEwKKwkJCQkJICAgICAgPyAoY2hhcl91ICopIiIgOiBzb3VyY2luZ19uYW1lKTsKKyAgICBpZiAoZXhjcC0+dGhyb3dfbmFtZSA9PSBOVUxMKQorICAgIHsKKwlpZiAodHlwZSA9PSBFVF9FUlJPUikKKwkgICAgdmltX2ZyZWUoZXhjcC0+dmFsdWUpOworCWdvdG8gbm9tZW07CisgICAgfQorICAgIGV4Y3AtPnRocm93X2xudW0gPSBzb3VyY2luZ19sbnVtOworCisgICAgaWYgKHBfdmVyYm9zZSA+PSAxMyB8fCBkZWJ1Z19icmVha19sZXZlbCA+IDApCisgICAgeworCWludAlzYXZlX21zZ19zaWxlbnQgPSBtc2dfc2lsZW50OworCisJaWYgKGRlYnVnX2JyZWFrX2xldmVsID4gMCkKKwkgICAgbXNnX3NpbGVudCA9IEZBTFNFOwkJLyogZGlzcGxheSBtZXNzYWdlcyAqLworCSsrbm9fd2FpdF9yZXR1cm47CisJbXNnX3Njcm9sbCA9IFRSVUU7CSAgICAvKiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUgKi8KKwltc2dfc3RyKChjaGFyX3UgKilfKCJFeGNlcHRpb24gdGhyb3duOiAlcyIpLCBleGNwLT52YWx1ZSk7CisJbXNnX3B1dHMoKGNoYXJfdSAqKSJcbiIpOyAgIC8qIGRvbid0IG92ZXJ3cml0ZSB0aGlzIGVpdGhlciAqLworCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKwktLW5vX3dhaXRfcmV0dXJuOworCWlmIChkZWJ1Z19icmVha19sZXZlbCA+IDApCisJICAgIG1zZ19zaWxlbnQgPSBzYXZlX21zZ19zaWxlbnQ7CisgICAgfQorCisgICAgY3VycmVudF9leGNlcHRpb24gPSBleGNwOworICAgIHJldHVybiBPSzsKKworbm9tZW06CisgICAgdmltX2ZyZWUoZXhjcCk7CisgICAgc3VwcHJlc3NfZXJydGhyb3cgPSBUUlVFOworICAgIEVNU0coXyhlX291dG9mbWVtKSk7CitmYWlsOgorICAgIGN1cnJlbnRfZXhjZXB0aW9uID0gTlVMTDsKKyAgICByZXR1cm4gRkFJTDsKK30KKworLyoKKyAqIERpc2NhcmQgYW4gZXhjZXB0aW9uLiAgIndhc19maW5pc2hlZCIgaXMgc2V0IHdoZW4gdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbgorICogY2F1Z2h0IGFuZCB0aGUgY2F0Y2ggY2xhdXNlIGhhcyBiZWVuIGVuZGVkIG5vcm1hbGx5LgorICovCisgICAgc3RhdGljIHZvaWQKK2Rpc2NhcmRfZXhjZXB0aW9uKGV4Y3AsIHdhc19maW5pc2hlZCkKKyAgICBleGNlcHRfVAkJKmV4Y3A7CisgICAgaW50CQkJd2FzX2ZpbmlzaGVkOworeworICAgIGNoYXJfdQkJKnNhdmVkX0lPYnVmZjsKKworICAgIGlmIChleGNwID09IE5VTEwpCisgICAgeworCUVNU0coXyhlX2ludGVybmFsKSk7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmIChwX3ZlcmJvc2UgPj0gMTMgfHwgZGVidWdfYnJlYWtfbGV2ZWwgPiAwKQorICAgIHsKKwlpbnQJc2F2ZV9tc2dfc2lsZW50ID0gbXNnX3NpbGVudDsKKworCXNhdmVkX0lPYnVmZiA9IHZpbV9zdHJzYXZlKElPYnVmZik7CisJaWYgKGRlYnVnX2JyZWFrX2xldmVsID4gMCkKKwkgICAgbXNnX3NpbGVudCA9IEZBTFNFOwkJLyogZGlzcGxheSBtZXNzYWdlcyAqLworCSsrbm9fd2FpdF9yZXR1cm47CisJbXNnX3Njcm9sbCA9IFRSVUU7CSAgICAvKiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUgKi8KKwltc2dfc3RyKHdhc19maW5pc2hlZAorCQkgICAgPyAoY2hhcl91ICopXygiRXhjZXB0aW9uIGZpbmlzaGVkOiAlcyIpCisJCSAgICA6IChjaGFyX3UgKilfKCJFeGNlcHRpb24gZGlzY2FyZGVkOiAlcyIpLAorCQlleGNwLT52YWx1ZSk7CisJbXNnX3B1dHMoKGNoYXJfdSAqKSJcbiIpOyAgIC8qIGRvbid0IG92ZXJ3cml0ZSB0aGlzIGVpdGhlciAqLworCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKwktLW5vX3dhaXRfcmV0dXJuOworCWlmIChkZWJ1Z19icmVha19sZXZlbCA+IDApCisJICAgIG1zZ19zaWxlbnQgPSBzYXZlX21zZ19zaWxlbnQ7CisJU1RSQ1BZKElPYnVmZiwgc2F2ZWRfSU9idWZmKTsKKwl2aW1fZnJlZShzYXZlZF9JT2J1ZmYpOworICAgIH0KKyAgICBpZiAoZXhjcC0+dHlwZSAhPSBFVF9JTlRFUlJVUFQpCisJdmltX2ZyZWUoZXhjcC0+dmFsdWUpOworICAgIGlmIChleGNwLT50eXBlID09IEVUX0VSUk9SKQorCWZyZWVfbXNnbGlzdChleGNwLT5tZXNzYWdlcyk7CisgICAgdmltX2ZyZWUoZXhjcC0+dGhyb3dfbmFtZSk7CisgICAgdmltX2ZyZWUoZXhjcCk7Cit9CisKKy8qCisgKiBEaXNjYXJkIHRoZSBleGNlcHRpb24gY3VycmVudGx5IGJlaW5nIHRocm93bi4KKyAqLworICAgIHZvaWQKK2Rpc2NhcmRfY3VycmVudF9leGNlcHRpb24oKQoreworICAgIGRpc2NhcmRfZXhjZXB0aW9uKGN1cnJlbnRfZXhjZXB0aW9uLCBGQUxTRSk7CisgICAgY3VycmVudF9leGNlcHRpb24gPSBOVUxMOworICAgIGRpZF90aHJvdyA9IEZBTFNFOworICAgIG5lZWRfcmV0aHJvdyA9IEZBTFNFOworfQorCisvKgorICogUHV0IGFuIGV4Y2VwdGlvbiBvbiB0aGUgY2F1Z2h0IHN0YWNrLgorICovCisgICAgc3RhdGljIHZvaWQKK2NhdGNoX2V4Y2VwdGlvbihleGNwKQorICAgIGV4Y2VwdF9UCSpleGNwOworeworICAgIGV4Y3AtPmNhdWdodCA9IGNhdWdodF9zdGFjazsKKyAgICBjYXVnaHRfc3RhY2sgPSBleGNwOworICAgIHNldF92aW1fdmFyX3N0cmluZyhWVl9FWENFUFRJT04sIGV4Y3AtPnZhbHVlLCAtMSk7CisgICAgaWYgKCpleGNwLT50aHJvd19uYW1lICE9IE5VTCkKKyAgICB7CisJaWYgKGV4Y3AtPnRocm93X2xudW0gIT0gMCkKKwkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiJXMsIGxpbmUgJWxkIiksIGV4Y3AtPnRocm93X25hbWUsCisJCSAgICAobG9uZylleGNwLT50aHJvd19sbnVtKTsKKwllbHNlCisJICAgIFNUUkNQWShJT2J1ZmYsIGV4Y3AtPnRocm93X25hbWUpOworCXNldF92aW1fdmFyX3N0cmluZyhWVl9USFJPV1BPSU5ULCBJT2J1ZmYsIC0xKTsKKyAgICB9CisgICAgZWxzZQorCS8qIHRocm93X25hbWUgbm90IHNldCBvbiBhbiBleGNlcHRpb24gZnJvbSBhIGNvbW1hbmQgdGhhdCB3YXMgdHlwZWQuICovCisJc2V0X3ZpbV92YXJfc3RyaW5nKFZWX1RIUk9XUE9JTlQsIE5VTEwsIC0xKTsKKworICAgIGlmIChwX3ZlcmJvc2UgPj0gMTMgfHwgZGVidWdfYnJlYWtfbGV2ZWwgPiAwKQorICAgIHsKKwlpbnQJc2F2ZV9tc2dfc2lsZW50ID0gbXNnX3NpbGVudDsKKworCWlmIChkZWJ1Z19icmVha19sZXZlbCA+IDApCisJICAgIG1zZ19zaWxlbnQgPSBGQUxTRTsJCS8qIGRpc3BsYXkgbWVzc2FnZXMgKi8KKwkrK25vX3dhaXRfcmV0dXJuOworCW1zZ19zY3JvbGwgPSBUUlVFOwkgICAgLyogYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlICovCisJbXNnX3N0cigoY2hhcl91ICopXygiRXhjZXB0aW9uIGNhdWdodDogJXMiKSwgZXhjcC0+dmFsdWUpOworCW1zZ19wdXRzKChjaGFyX3UgKikiXG4iKTsgICAvKiBkb24ndCBvdmVyd3JpdGUgdGhpcyBlaXRoZXIgKi8KKwljbWRsaW5lX3JvdyA9IG1zZ19yb3c7CisJLS1ub193YWl0X3JldHVybjsKKwlpZiAoZGVidWdfYnJlYWtfbGV2ZWwgPiAwKQorCSAgICBtc2dfc2lsZW50ID0gc2F2ZV9tc2dfc2lsZW50OworICAgIH0KK30KKworLyoKKyAqIFJlbW92ZSBhbiBleGNlcHRpb24gZnJvbSB0aGUgY2F1Z2h0IHN0YWNrLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZpbmlzaF9leGNlcHRpb24oZXhjcCkKKyAgICBleGNlcHRfVAkqZXhjcDsKK3sKKyAgICBpZiAoZXhjcCAhPSBjYXVnaHRfc3RhY2spCisJRU1TRyhfKGVfaW50ZXJuYWwpKTsKKyAgICBjYXVnaHRfc3RhY2sgPSBjYXVnaHRfc3RhY2stPmNhdWdodDsKKyAgICBpZiAoY2F1Z2h0X3N0YWNrICE9IE5VTEwpCisgICAgeworCXNldF92aW1fdmFyX3N0cmluZyhWVl9FWENFUFRJT04sIGNhdWdodF9zdGFjay0+dmFsdWUsIC0xKTsKKwlpZiAoKmNhdWdodF9zdGFjay0+dGhyb3dfbmFtZSAhPSBOVUwpCisJeworCSAgICBpZiAoY2F1Z2h0X3N0YWNrLT50aHJvd19sbnVtICE9IDApCisJCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsCisJCQlfKCIlcywgbGluZSAlbGQiKSwgY2F1Z2h0X3N0YWNrLT50aHJvd19uYW1lLAorCQkJKGxvbmcpY2F1Z2h0X3N0YWNrLT50aHJvd19sbnVtKTsKKwkgICAgZWxzZQorCQlTVFJDUFkoSU9idWZmLCBjYXVnaHRfc3RhY2stPnRocm93X25hbWUpOworCSAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfVEhST1dQT0lOVCwgSU9idWZmLCAtMSk7CisJfQorCWVsc2UKKwkgICAgLyogdGhyb3dfbmFtZSBub3Qgc2V0IG9uIGFuIGV4Y2VwdGlvbiBmcm9tIGEgY29tbWFuZCB0aGF0IHdhcworCSAgICAgKiB0eXBlZC4gKi8KKwkgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX1RIUk9XUE9JTlQsIE5VTEwsIC0xKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRVhDRVBUSU9OLCBOVUxMLCAtMSk7CisJc2V0X3ZpbV92YXJfc3RyaW5nKFZWX1RIUk9XUE9JTlQsIE5VTEwsIC0xKTsKKyAgICB9CisKKyAgICAvKiBEaXNjYXJkIHRoZSBleGNlcHRpb24sIGJ1dCB1c2UgdGhlIGZpbmlzaCBtZXNzYWdlIGZvciAndmVyYm9zZScuICovCisgICAgZGlzY2FyZF9leGNlcHRpb24oZXhjcCwgVFJVRSk7Cit9CisKKy8qCisgKiBGbGFncyBzcGVjaWZ5aW5nIHRoZSBtZXNzYWdlIGRpc3BsYXllZCBieSByZXBvcnRfcGVuZGluZy4KKyAqLworI2RlZmluZSBSUF9NQUtFCQkwCisjZGVmaW5lIFJQX1JFU1VNRQkxCisjZGVmaW5lIFJQX0RJU0NBUkQJMgorCisvKgorICogUmVwb3J0IGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyBwZW5kaW5nIGluIGEgZmluYWxseSBjbGF1c2UgaWYgcmVxdWlyZWQgYnkKKyAqIHRoZSAndmVyYm9zZScgb3B0aW9uIG9yIHdoZW4gZGVidWdnaW5nLiAgImFjdGlvbiIgdGVsbHMgd2hldGhlciBzb21ldGhpbmcgaXMKKyAqIG1hZGUgcGVuZGluZyBvciBzb21ldGhpbmcgcGVuZGluZyBpcyByZXN1bWVkIG9yIGRpc2NhcmRlZC4gICJwZW5kaW5nIiB0ZWxscworICogd2hhdCBpcyBwZW5kaW5nLiAgInZhbHVlIiBzcGVjaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBmb3IgYSBwZW5kaW5nICI6cmV0dXJuIgorICogb3IgdGhlIGV4Y2VwdGlvbiB2YWx1ZSBmb3IgYSBwZW5kaW5nIGV4Y2VwdGlvbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCityZXBvcnRfcGVuZGluZyhhY3Rpb24sIHBlbmRpbmcsIHZhbHVlKQorICAgIGludAkJYWN0aW9uOworICAgIGludAkJcGVuZGluZzsKKyAgICB2b2lkCSp2YWx1ZTsKK3sKKyAgICBjaGFyX3UJKm1lc2c7CisgICAgY2hhcgkqczsKKyAgICBpbnQJCXNhdmVfbXNnX3NpbGVudDsKKworCisgICAgc3dpdGNoIChhY3Rpb24pCisgICAgeworCWNhc2UgUlBfTUFLRToKKwkgICAgbWVzZyA9IChjaGFyX3UgKilfKCIlcyBtYWRlIHBlbmRpbmciKTsKKwkgICAgYnJlYWs7CisJY2FzZSBSUF9SRVNVTUU6CisJICAgIG1lc2cgPSAoY2hhcl91ICopXygiJXMgcmVzdW1lZCIpOworCSAgICBicmVhazsKKwkvKiBjYXNlIFJQX0RJU0NBUkQ6ICovCisJZGVmYXVsdDoKKwkgICAgbWVzZyA9IChjaGFyX3UgKilfKCIlcyBkaXNjYXJkZWQiKTsKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChwZW5kaW5nKQorICAgIHsKKwljYXNlIENTVFBfTk9ORToKKwkgICAgcmV0dXJuOworCisJY2FzZSBDU1RQX0NPTlRJTlVFOgorCSAgICBzID0gIjpjb250aW51ZSI7CisJICAgIGJyZWFrOworCWNhc2UgQ1NUUF9CUkVBSzoKKwkgICAgcyA9ICI6YnJlYWsiOworCSAgICBicmVhazsKKwljYXNlIENTVFBfRklOSVNIOgorCSAgICBzID0gIjpmaW5pc2giOworCSAgICBicmVhazsKKwljYXNlIENTVFBfUkVUVVJOOgorCSAgICAvKiAiOnJldHVybiIgY29tbWFuZCBwcm9kdWNpbmcgdmFsdWUsIGFsbG9jYXRlZCAqLworCSAgICBzID0gKGNoYXIgKilnZXRfcmV0dXJuX2NtZCh2YWx1ZSk7CisJICAgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgICAgaWYgKHBlbmRpbmcgJiBDU1RQX1RIUk9XKQorCSAgICB7CisJCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIChjaGFyICopbWVzZywgXygiRXhjZXB0aW9uIikpOworCQltZXNnID0gdmltX3N0cm5zYXZlKElPYnVmZiwgKGludClTVFJMRU4oSU9idWZmKSArIDQpOworCQlTVFJDQVQobWVzZywgIjogJXMiKTsKKwkJcyA9IChjaGFyICopKChleGNlcHRfVCAqKXZhbHVlKS0+dmFsdWU7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKHBlbmRpbmcgJiBDU1RQX0VSUk9SKSAmJiAocGVuZGluZyAmIENTVFBfSU5URVJSVVBUKSkKKwkJcyA9IF8oIkVycm9yIGFuZCBpbnRlcnJ1cHQiKTsKKwkgICAgZWxzZSBpZiAocGVuZGluZyAmIENTVFBfRVJST1IpCisJCXMgPSBfKCJFcnJvciIpOworCSAgICBlbHNlIC8qIGlmIChwZW5kaW5nICYgQ1NUUF9JTlRFUlJVUFQpICovCisJCXMgPSBfKCJJbnRlcnJ1cHQiKTsKKyAgICB9CisKKyAgICBzYXZlX21zZ19zaWxlbnQgPSBtc2dfc2lsZW50OworICAgIGlmIChkZWJ1Z19icmVha19sZXZlbCA+IDApCisJbXNnX3NpbGVudCA9IEZBTFNFOwkvKiBkaXNwbGF5IG1lc3NhZ2VzICovCisgICAgKytub193YWl0X3JldHVybjsKKyAgICBtc2dfc2Nyb2xsID0gVFJVRTsJCS8qIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZSAqLworICAgIG1zZ19zdHIobWVzZywgKGNoYXJfdSAqKXMpOworICAgIG1zZ19wdXRzKChjaGFyX3UgKikiXG4iKTsgICAvKiBkb24ndCBvdmVyd3JpdGUgdGhpcyBlaXRoZXIgKi8KKyAgICBjbWRsaW5lX3JvdyA9IG1zZ19yb3c7CisgICAgLS1ub193YWl0X3JldHVybjsKKyAgICBpZiAoZGVidWdfYnJlYWtfbGV2ZWwgPiAwKQorCW1zZ19zaWxlbnQgPSBzYXZlX21zZ19zaWxlbnQ7CisKKyAgICBpZiAocGVuZGluZyA9PSBDU1RQX1JFVFVSTikKKwl2aW1fZnJlZShzKTsKKyAgICBlbHNlIGlmIChwZW5kaW5nICYgQ1NUUF9USFJPVykKKwl2aW1fZnJlZShtZXNnKTsKK30KKworLyoKKyAqIElmIHNvbWV0aGluZyBpcyBtYWRlIHBlbmRpbmcgaW4gYSBmaW5hbGx5IGNsYXVzZSwgcmVwb3J0IGl0IGlmIHJlcXVpcmVkIGJ5CisgKiB0aGUgJ3ZlcmJvc2UnIG9wdGlvbiBvciB3aGVuIGRlYnVnZ2luZy4KKyAqLworICAgIHZvaWQKK3JlcG9ydF9tYWtlX3BlbmRpbmcocGVuZGluZywgdmFsdWUpCisgICAgaW50CQlwZW5kaW5nOworICAgIHZvaWQJKnZhbHVlOworeworICAgIGlmIChwX3ZlcmJvc2UgPj0gMTQgfHwgZGVidWdfYnJlYWtfbGV2ZWwgPiAwKQorCXJlcG9ydF9wZW5kaW5nKFJQX01BS0UsIHBlbmRpbmcsIHZhbHVlKTsKK30KKworLyoKKyAqIElmIHNvbWV0aGluZyBwZW5kaW5nIGluIGEgZmluYWxseSBjbGF1c2UgaXMgcmVzdW1lZCBhdCB0aGUgIjplbmR0cnkiLCByZXBvcnQKKyAqIGl0IGlmIHJlcXVpcmVkIGJ5IHRoZSAndmVyYm9zZScgb3B0aW9uIG9yIHdoZW4gZGVidWdnaW5nLgorICovCisgICAgdm9pZAorcmVwb3J0X3Jlc3VtZV9wZW5kaW5nKHBlbmRpbmcsIHZhbHVlKQorICAgIGludAkJcGVuZGluZzsKKyAgICB2b2lkCSp2YWx1ZTsKK3sKKyAgICBpZiAocF92ZXJib3NlID49IDE0IHx8IGRlYnVnX2JyZWFrX2xldmVsID4gMCkKKwlyZXBvcnRfcGVuZGluZyhSUF9SRVNVTUUsIHBlbmRpbmcsIHZhbHVlKTsKK30KKworLyoKKyAqIElmIHNvbWV0aGluZyBwZW5kaW5nIGluIGEgZmluYWxseSBjbGF1c2UgaXMgZGlzY2FyZGVkLCByZXBvcnQgaXQgaWYgcmVxdWlyZWQKKyAqIGJ5IHRoZSAndmVyYm9zZScgb3B0aW9uIG9yIHdoZW4gZGVidWdnaW5nLgorICovCisgICAgdm9pZAorcmVwb3J0X2Rpc2NhcmRfcGVuZGluZyhwZW5kaW5nLCB2YWx1ZSkKKyAgICBpbnQJCXBlbmRpbmc7CisgICAgdm9pZAkqdmFsdWU7Cit7CisgICAgaWYgKHBfdmVyYm9zZSA+PSAxNCB8fCBkZWJ1Z19icmVha19sZXZlbCA+IDApCisJcmVwb3J0X3BlbmRpbmcoUlBfRElTQ0FSRCwgcGVuZGluZywgdmFsdWUpOworfQorCisKKy8qCisgKiAiOmlmIi4KKyAqLworICAgIHZvaWQKK2V4X2lmKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQllcnJvcjsKKyAgICBpbnQJCXNraXA7CisgICAgaW50CQlyZXN1bHQ7CisgICAgc3RydWN0IGNvbmRzdGFjawkqY3N0YWNrID0gZWFwLT5jc3RhY2s7CisKKyAgICBpZiAoY3N0YWNrLT5jc19pZHggPT0gQ1NUQUNLX0xFTiAtIDEpCisJZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1Nzk6IDppZiBuZXN0aW5nIHRvbyBkZWVwIik7CisgICAgZWxzZQorICAgIHsKKwkrK2NzdGFjay0+Y3NfaWR4OworCWNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdID0gMDsKKworCS8qCisJICogRG9uJ3QgZG8gc29tZXRoaW5nIGFmdGVyIGFuIGVycm9yLCBpbnRlcnJ1cHQsIG9yIHRocm93LCBvciB3aGVuIHRoZXJlCisJICogaXMgYSBzdXJyb3VuZGluZyBjb25kaXRpb25hbCBhbmQgaXQgd2FzIG5vdCBhY3RpdmUuCisJICovCisJc2tpcCA9IGRpZF9lbXNnIHx8IGdvdF9pbnQgfHwgZGlkX3Rocm93IHx8IChjc3RhY2stPmNzX2lkeCA+IDAKKwkJJiYgIShjc3RhY2stPmNzX2ZsYWdzW2NzdGFjay0+Y3NfaWR4IC0gMV0gJiBDU0ZfQUNUSVZFKSk7CisKKwlyZXN1bHQgPSBldmFsX3RvX2Jvb2woZWFwLT5hcmcsICZlcnJvciwgJmVhcC0+bmV4dGNtZCwgc2tpcCk7CisKKwlpZiAoIXNraXAgJiYgIWVycm9yKQorCXsKKwkgICAgaWYgKHJlc3VsdCkKKwkJY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gPSBDU0ZfQUNUSVZFIHwgQ1NGX1RSVUU7CisJfQorCWVsc2UKKwkgICAgLyogc2V0IFRSVUUsIHNvIHRoaXMgY29uZGl0aW9uYWwgd2lsbCBuZXZlciBnZXQgYWN0aXZlICovCisJICAgIGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdID0gQ1NGX1RSVUU7CisgICAgfQorfQorCisvKgorICogIjplbmRpZiIuCisgKi8KKyAgICB2b2lkCitleF9lbmRpZihlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGRpZF9lbmRpZiA9IFRSVUU7CisgICAgaWYgKGVhcC0+Y3N0YWNrLT5jc19pZHggPCAwCisJICAgIHx8IChlYXAtPmNzdGFjay0+Y3NfZmxhZ3NbZWFwLT5jc3RhY2stPmNzX2lkeF0gJgorCQkoQ1NGX1dISUxFIHwgQ1NGX1RSWSkpKQorCWVhcC0+ZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTgwOiA6ZW5kaWYgd2l0aG91dCA6aWYiKTsKKyAgICBlbHNlCisgICAgeworCS8qCisJICogV2hlbiBkZWJ1Z2dpbmcgb3IgYSBicmVha3BvaW50IHdhcyBlbmNvdW50ZXJlZCwgZGlzcGxheSB0aGUgZGVidWcKKwkgKiBwcm9tcHQgKGlmIG5vdCBhbHJlYWR5IGRvbmUpLiAgVGhpcyBzaG93cyB0aGUgdXNlciB0aGF0IGFuICI6ZW5kaWYiCisJICogaXMgZXhlY3V0ZWQgd2hlbiB0aGUgIjppZiIgb3IgYSBwcmV2aW91cyAiOmVsc2VpZiIgd2FzIG5vdCBUUlVFLgorCSAqIEhhbmRsZSBhICI+cXVpdCIgZGVidWcgY29tbWFuZCBhcyBpZiBhbiBpbnRlcnJ1cHQgaGFkIG9jY3VycmVkIGJlZm9yZQorCSAqIHRoZSAiOmVuZGlmIi4gIFRoYXQgaXMsIHRocm93IGFuIGludGVycnVwdCBleGNlcHRpb24gaWYgYXBwcm9wcmlhdGUuCisJICogRG9pbmcgdGhpcyBoZXJlIHByZXZlbnRzIGFuIGV4Y2VwdGlvbiBmb3IgYSBwYXJzaW5nIGVycm9yIGJlaW5nCisJICogZGlzY2FyZGVkIGJ5IHRocm93aW5nIHRoZSBpbnRlcnJ1cHQgZXhjZXB0aW9uIGxhdGVyIG9uLgorCSAqLworCWlmICghKGVhcC0+Y3N0YWNrLT5jc19mbGFnc1tlYXAtPmNzdGFjay0+Y3NfaWR4XSAmIENTRl9UUlVFKSAmJgorCQlkYmdfY2hlY2tfc2tpcHBlZChlYXApKQorCSAgICAodm9pZClkb19pbnR0aHJvdyhlYXAtPmNzdGFjayk7CisKKwktLWVhcC0+Y3N0YWNrLT5jc19pZHg7CisgICAgfQorfQorCisvKgorICogIjplbHNlIiBhbmQgIjplbHNlaWYiLgorICovCisgICAgdm9pZAorZXhfZWxzZShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJZXJyb3I7CisgICAgaW50CQlza2lwOworICAgIGludAkJcmVzdWx0OworICAgIHN0cnVjdCBjb25kc3RhY2sJKmNzdGFjayA9IGVhcC0+Y3N0YWNrOworCisgICAgLyoKKyAgICAgKiBEb24ndCBkbyBzb21ldGhpbmcgYWZ0ZXIgYW4gZXJyb3IsIGludGVycnVwdCwgb3IgdGhyb3csIG9yIHdoZW4gdGhlcmUgaXMKKyAgICAgKiBhIHN1cnJvdW5kaW5nIGNvbmRpdGlvbmFsIGFuZCBpdCB3YXMgbm90IGFjdGl2ZS4KKyAgICAgKi8KKyAgICBza2lwID0gZGlkX2Vtc2cgfHwgZ290X2ludCB8fCBkaWRfdGhyb3cgfHwgKGNzdGFjay0+Y3NfaWR4ID4gMAorCSAgICAmJiAhKGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHggLSAxXSAmIENTRl9BQ1RJVkUpKTsKKworICAgIGlmIChjc3RhY2stPmNzX2lkeCA8IDAKKwkgICAgfHwgKGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdICYgKENTRl9XSElMRSB8IENTRl9UUlkpKSkKKyAgICB7CisJaWYgKGVhcC0+Y21kaWR4ID09IENNRF9lbHNlKQorCXsKKwkgICAgZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1ODE6IDplbHNlIHdpdGhvdXQgOmlmIik7CisJICAgIHJldHVybjsKKwl9CisJZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1ODI6IDplbHNlaWYgd2l0aG91dCA6aWYiKTsKKwlza2lwID0gVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZiAoY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gJiBDU0ZfRUxTRSkKKyAgICB7CisJaWYgKGVhcC0+Y21kaWR4ID09IENNRF9lbHNlKQorCXsKKwkgICAgZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1ODM6IG11bHRpcGxlIDplbHNlIik7CisJICAgIHJldHVybjsKKwl9CisJZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1ODQ6IDplbHNlaWYgYWZ0ZXIgOmVsc2UiKTsKKwlza2lwID0gVFJVRTsKKyAgICB9CisKKyAgICAvKiBpZiBza2lwcGluZyBvciB0aGUgIjppZiIgd2FzIFRSVUUsIHJlc2V0IEFDVElWRSwgb3RoZXJ3aXNlIHNldCBpdCAqLworICAgIGlmIChza2lwIHx8IGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdICYgQ1NGX1RSVUUpCisgICAgeworCWlmIChlYXAtPmVycm1zZyA9PSBOVUxMKQorCSAgICBjc3RhY2stPmNzX2ZsYWdzW2NzdGFjay0+Y3NfaWR4XSA9IENTRl9UUlVFOworCXNraXAgPSBUUlVFOwkvKiBkb24ndCBldmFsdWF0ZSBhbiAiOmVsc2VpZiIgKi8KKyAgICB9CisgICAgZWxzZQorCWNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdID0gQ1NGX0FDVElWRTsKKworICAgIC8qCisgICAgICogV2hlbiBkZWJ1Z2dpbmcgb3IgYSBicmVha3BvaW50IHdhcyBlbmNvdW50ZXJlZCwgZGlzcGxheSB0aGUgZGVidWcgcHJvbXB0CisgICAgICogKGlmIG5vdCBhbHJlYWR5IGRvbmUpLiAgVGhpcyBzaG93cyB0aGUgdXNlciB0aGF0IGFuICI6ZWxzZSIgb3IgIjplbHNlaWYiCisgICAgICogaXMgZXhlY3V0ZWQgd2hlbiB0aGUgIjppZiIgb3IgcHJldmlvdXMgIjplbHNlaWYiIHdhcyBub3QgVFJVRS4gIEhhbmRsZQorICAgICAqIGEgIj5xdWl0IiBkZWJ1ZyBjb21tYW5kIGFzIGlmIGFuIGludGVycnVwdCBoYWQgb2NjdXJyZWQgYmVmb3JlIHRoZQorICAgICAqICI6ZWxzZSIgb3IgIjplbHNlaWYiLiAgVGhhdCBpcywgc2V0ICJza2lwIiBhbmQgdGhyb3cgYW4gaW50ZXJydXB0CisgICAgICogZXhjZXB0aW9uIGlmIGFwcHJvcHJpYXRlLiAgRG9pbmcgdGhpcyBoZXJlIHByZXZlbnRzIHRoYXQgYW4gZXhjZXB0aW9uCisgICAgICogZm9yIGEgcGFyc2luZyBlcnJvcnMgaXMgZGlzY2FyZGVkIHdoZW4gdGhyb3dpbmcgdGhlIGludGVycnVwdCBleGNlcHRpb24KKyAgICAgKiBsYXRlciBvbi4KKyAgICAgKi8KKyAgICBpZiAoIXNraXAgJiYgZGJnX2NoZWNrX3NraXBwZWQoZWFwKSAmJiBnb3RfaW50KQorICAgIHsKKwkodm9pZClkb19pbnR0aHJvdyhjc3RhY2spOworCXNraXAgPSBUUlVFOworICAgIH0KKworICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfZWxzZWlmKQorICAgIHsKKwlyZXN1bHQgPSBldmFsX3RvX2Jvb2woZWFwLT5hcmcsICZlcnJvciwgJmVhcC0+bmV4dGNtZCwgc2tpcCk7CisJLyogV2hlbiB0aHJvd2luZyBlcnJvciBleGNlcHRpb25zLCB3ZSB3YW50IHRvIHRocm93IGFsd2F5cyB0aGUgZmlyc3QKKwkgKiBvZiBzZXZlcmFsIGVycm9ycyBpbiBhIHJvdy4gIFRoaXMgaXMgd2hhdCBhY3R1YWxseSBoYXBwZW5zIHdoZW4KKwkgKiBhIGNvbmRpdGlvbmFsIGVycm9yIHdhcyBkZXRlY3RlZCBhYm92ZSBhbmQgdGhlcmUgaXMgYW5vdGhlciBmYWlsdXJlCisJICogd2hlbiBwYXJzaW5nIHRoZSBleHByZXNzaW9uLiAgU2luY2UgdGhlIHNraXAgZmxhZyBpcyBzZXQgaW4gdGhpcworCSAqIGNhc2UsIHRoZSBwYXJzaW5nIGVycm9yIHdpbGwgYmUgaWdub3JlZCBieSBlbXNnKCkuICovCisKKwlpZiAoIXNraXAgJiYgIWVycm9yKQorCXsKKwkgICAgaWYgKHJlc3VsdCkKKwkJY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gPSBDU0ZfQUNUSVZFIHwgQ1NGX1RSVUU7CisJICAgIGVsc2UKKwkJY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gPSAwOworCX0KKwllbHNlIGlmIChlYXAtPmVycm1zZyA9PSBOVUxMKQorCSAgICAvKiBzZXQgVFJVRSwgc28gdGhpcyBjb25kaXRpb25hbCB3aWxsIG5ldmVyIGdldCBhY3RpdmUgKi8KKwkgICAgY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gPSBDU0ZfVFJVRTsKKyAgICB9CisgICAgZWxzZQorCWNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdIHw9IENTRl9FTFNFOworfQorCisvKgorICogSGFuZGxlICI6d2hpbGUiLgorICovCisgICAgdm9pZAorZXhfd2hpbGUoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWVycm9yOworICAgIGludAkJc2tpcDsKKyAgICBpbnQJCXJlc3VsdDsKKyAgICBzdHJ1Y3QgY29uZHN0YWNrCSpjc3RhY2sgPSBlYXAtPmNzdGFjazsKKworICAgIGlmIChjc3RhY2stPmNzX2lkeCA9PSBDU1RBQ0tfTEVOIC0gMSkKKwllYXAtPmVycm1zZyA9IChjaGFyX3UgKilOXygiRTU4NTogOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiKTsKKyAgICBlbHNlCisgICAgeworCS8qCisJICogY3NfaGFkX3doaWxlIGlzIHNldCB3aGVuIHdlIGhhdmUganVtcGVkIGJhY2sgZnJvbSB0aGUgbWF0Y2hpbmcKKwkgKiAiOmVuZHdoaWxlIi4gIFdoZW4gbm90IHNldCwgbmVlZCB0byBpbml0aWFsaXNlIHRoaXMgY3N0YWNrIGVudHJ5LgorCSAqLworCWlmICghY3N0YWNrLT5jc19oYWRfd2hpbGUpCisJeworCSAgICArK2NzdGFjay0+Y3NfaWR4OworCSAgICArK2NzdGFjay0+Y3Nfd2hpbGVsZXZlbDsKKwkgICAgY3N0YWNrLT5jc19saW5lW2NzdGFjay0+Y3NfaWR4XSA9IC0xOworCX0KKwljc3RhY2stPmNzX2ZsYWdzW2NzdGFjay0+Y3NfaWR4XSA9IENTRl9XSElMRTsKKworCS8qCisJICogRG9uJ3QgZG8gc29tZXRoaW5nIGFmdGVyIGFuIGVycm9yLCBpbnRlcnJ1cHQsIG9yIHRocm93LCBvciB3aGVuIHRoZXJlCisJICogaXMgYSBzdXJyb3VuZGluZyBjb25kaXRpb25hbCBhbmQgaXQgd2FzIG5vdCBhY3RpdmUuCisJICovCisJc2tpcCA9IGRpZF9lbXNnIHx8IGdvdF9pbnQgfHwgZGlkX3Rocm93IHx8IChjc3RhY2stPmNzX2lkeCA+IDAKKwkJJiYgIShjc3RhY2stPmNzX2ZsYWdzW2NzdGFjay0+Y3NfaWR4IC0gMV0gJiBDU0ZfQUNUSVZFKSk7CisJcmVzdWx0ID0gZXZhbF90b19ib29sKGVhcC0+YXJnLCAmZXJyb3IsICZlYXAtPm5leHRjbWQsIHNraXApOworCisJLyoKKwkgKiBJZiB0aGlzIGNzdGFjayBlbnRyeSB3YXMganVzdCBpbml0aWFsaXNlZCBhbmQgaXMgYWN0aXZlLCBzZXQKKwkgKiBjc19oYWRfd2hpbGUgZmxhZywgc28gZG9fY21kbGluZSgpIHdpbGwgc2V0IHRoZSBsaW5lIG51bWJlcgorCSAqIGluIGNzX2xpbmVbXS4KKwkgKi8KKwlpZiAoIXNraXAgJiYgIWVycm9yICYmIHJlc3VsdCkKKwl7CisJICAgIGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdIHw9IENTRl9BQ1RJVkUgfCBDU0ZfVFJVRTsKKwkgICAgY3N0YWNrLT5jc19oYWRfd2hpbGUgPSAhY3N0YWNrLT5jc19oYWRfd2hpbGU7CisJfQorCWVsc2UKKwl7CisJICAgIGNzdGFjay0+Y3NfaGFkX3doaWxlID0gRkFMU0U7CisJICAgIC8qIElmIHRoZSAiOndoaWxlIiBldmFsdWF0ZXMgdG8gRkFMU0UsIHNob3cgdGhlIGRlYnVnIHByb21wdCBhdCB0aGUKKwkgICAgICogIjplbmR3aGlsZSIgYXMgaWYgdGhlcmUgd2FzIGEgIjpicmVhayIgaW4gYSAiOndoaWxlIiBldmFsdWF0aW5nCisJICAgICAqIHRvIFRSVUUuICovCisJICAgIGlmICghc2tpcCAmJiAhZXJyb3IpCisJCWNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdIHw9IENTRl9UUlVFOworCX0KKyAgICB9Cit9CisKKy8qCisgKiAiOmNvbnRpbnVlIgorICovCisgICAgdm9pZAorZXhfY29udGludWUoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWlkeDsKKyAgICBzdHJ1Y3QgY29uZHN0YWNrCSpjc3RhY2sgPSBlYXAtPmNzdGFjazsKKworICAgIGlmIChjc3RhY2stPmNzX3doaWxlbGV2ZWwgPD0gMCB8fCBjc3RhY2stPmNzX2lkeCA8IDApCisJZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1ODY6IDpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIpOworICAgIGVsc2UKKyAgICB7CisJLyogVHJ5IHRvIGZpbmQgdGhlIG1hdGNoaW5nICI6d2hpbGUiLiAgVGhpcyBtaWdodCBzdG9wIGF0IGEgdHJ5CisJICogY29uZGl0aW9uYWwgbm90IGluIGl0cyBmaW5hbGx5IGNsYXVzZSAod2hpY2ggaXMgdGhlbiB0byBiZSBleGVjdXRlZAorCSAqIG5leHQpLiAgVGhlcmVmb3IsIGluYWN0aXZhdGUgYWxsIGNvbmRpdGlvbmFscyBleGNlcHQgdGhlICI6d2hpbGUiCisJICogaXRzZWxmIChpZiByZWFjaGVkKS4gKi8KKwlpZHggPSBjbGVhbnVwX2NvbmRpdGlvbmFscyhjc3RhY2ssIENTRl9XSElMRSwgRkFMU0UpOworCWlmICgoY3N0YWNrLT5jc19mbGFnc1tpZHhdICYgQ1NGX1dISUxFKSkKKwl7CisJICAgIGlmIChjc3RhY2stPmNzX2lkeCA+IGlkeCkKKwkJcmV3aW5kX2NvbmRpdGlvbmFscyhjc3RhY2ssIGlkeCwgQ1NGX1RSWSwgJmNzdGFjay0+Y3NfdHJ5bGV2ZWwpOworCisJICAgIC8qCisJICAgICAqIFNldCBjc19oYWRfY29udGludWUsIHNvIGRvX2NtZGxpbmUoKSB3aWxsIGp1bXAgYmFjayB0byB0aGUKKwkgICAgICogbWF0Y2hpbmcgIjp3aGlsZSIuCisJICAgICAqLworCSAgICBjc3RhY2stPmNzX2hhZF9jb250aW51ZSA9IFRSVUU7CS8qIGxldCBkb19jbWRsaW5lKCkgaGFuZGxlIGl0ICovCisJfQorCWVsc2UKKwl7CisJICAgIC8qIElmIGEgdHJ5IGNvbmRpdGlvbmFsIG5vdCBpbiBpdHMgZmluYWxseSBjbGF1c2UgaXMgcmVhY2hlZCBmaXJzdCwKKwkgICAgICogbWFrZSB0aGUgIjpjb250aW51ZSIgcGVuZGluZyBmb3IgZXhlY3V0aW9uIGF0IHRoZSAiOmVuZHRyeSIuICovCisJICAgIGNzdGFjay0+Y3NfcGVuZGluZ1tpZHhdID0gQ1NUUF9DT05USU5VRTsKKwkgICAgcmVwb3J0X21ha2VfcGVuZGluZyhDU1RQX0NPTlRJTlVFLCBOVUxMKTsKKwl9CisgICAgfQorfQorCisvKgorICogIjpicmVhayIKKyAqLworICAgIHZvaWQKK2V4X2JyZWFrKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQlpZHg7CisgICAgc3RydWN0IGNvbmRzdGFjawkqY3N0YWNrID0gZWFwLT5jc3RhY2s7CisKKyAgICBpZiAoY3N0YWNrLT5jc193aGlsZWxldmVsIDw9IDAgfHwgY3N0YWNrLT5jc19pZHggPCAwKQorCWVhcC0+ZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTg3OiA6YnJlYWsgd2l0aG91dCA6d2hpbGUiKTsKKyAgICBlbHNlCisgICAgeworCS8qIEluYWN0aXZhdGUgY29uZGl0aW9uYWxzIHVudGlsIHRoZSBtYXRjaGluZyAiOndoaWxlIiBvciBhIHRyeQorCSAqIGNvbmRpdGlvbmFsIG5vdCBpbiBpdHMgZmluYWxseSBjbGF1c2UgKHdoaWNoIGlzIHRoZW4gdG8gYmUKKwkgKiBleGVjdXRlZCBuZXh0KSBpcyBmb3VuZC4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgbWFrZSB0aGUgIjpicmVhayIKKwkgKiBwZW5kaW5nIGZvciBleGVjdXRpb24gYXQgdGhlICI6ZW5kdHJ5Ii4gKi8KKwlpZHggPSBjbGVhbnVwX2NvbmRpdGlvbmFscyhjc3RhY2ssIENTRl9XSElMRSwgVFJVRSk7CisJaWYgKCEoY3N0YWNrLT5jc19mbGFnc1tpZHhdICYgQ1NGX1dISUxFKSkKKwl7CisJICAgIGNzdGFjay0+Y3NfcGVuZGluZ1tpZHhdID0gQ1NUUF9CUkVBSzsKKwkgICAgcmVwb3J0X21ha2VfcGVuZGluZyhDU1RQX0JSRUFLLCBOVUxMKTsKKwl9CisgICAgfQorfQorCisvKgorICogIjplbmR3aGlsZSIKKyAqLworICAgIHZvaWQKK2V4X2VuZHdoaWxlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgc3RydWN0IGNvbmRzdGFjawkqY3N0YWNrID0gZWFwLT5jc3RhY2s7CisgICAgaW50CQlpZHg7CisKKyAgICBpZiAoY3N0YWNrLT5jc193aGlsZWxldmVsIDw9IDAgfHwgY3N0YWNrLT5jc19pZHggPCAwKQorCWVhcC0+ZXJybXNnID0gZV93aGlsZTsKKyAgICBlbHNlCisgICAgeworCWlmICghKGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdICYgQ1NGX1dISUxFKSkKKwl7CisJICAgIC8qIFRyeSB0byBmaW5kIHRoZSBtYXRjaGluZyAiOndoaWxlIiBhbmQgcmVwb3J0IHdoYXQncyBtaXNzaW5nLiAqLworCSAgICBpZiAoIShjc3RhY2stPmNzX2ZsYWdzW2NzdGFjay0+Y3NfaWR4XSAmIENTRl9UUlkpKQorCQllYXAtPmVycm1zZyA9IGVfZW5kaWY7CisJICAgIGVsc2UgaWYgKGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdICYgQ1NGX0ZJTkFMTFkpCisJCWVhcC0+ZXJybXNnID0gZV9lbmR0cnk7CisJICAgIGZvciAoaWR4ID0gY3N0YWNrLT5jc19pZHg7IGlkeCA+IDA7IC0taWR4KQorCSAgICB7CisJCWlmICgoY3N0YWNrLT5jc19mbGFnc1tpZHhdICYgQ1NGX1RSWSkKKwkJCSYmICEoY3N0YWNrLT5jc19mbGFnc1tpZHhdICYgQ1NGX0ZJTkFMTFkpKQorCQl7CisJCSAgICAvKiBHaXZlIHVwIGF0IGEgdHJ5IGNvbmRpdGlvbmFsIG5vdCBpbiBpdHMgZmluYWxseSBjbGF1c2UuCisJCSAgICAgKiBJZ25vcmUgdGhlICI6ZW5kd2hpbGUiLiAqLworCQkgICAgZWFwLT5lcnJtc2cgPSBlX3doaWxlOworCQkgICAgcmV0dXJuOworCQl9CisJCWlmIChjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfV0hJTEUpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICAvKiBDbGVhbnVwIGFuZCByZXdpbmQgYWxsIGNvbnRhaW5lZCAoYW5kIHVuY2xvc2VkKSBjb25kaXRpb25hbHMuICovCisJICAgICh2b2lkKWNsZWFudXBfY29uZGl0aW9uYWxzKGNzdGFjaywgQ1NGX1dISUxFLCBGQUxTRSk7CisJICAgIHJld2luZF9jb25kaXRpb25hbHMoY3N0YWNrLCBpZHgsIENTRl9UUlksICZjc3RhY2stPmNzX3RyeWxldmVsKTsKKwl9CisKKwkvKgorCSAqIFdoZW4gZGVidWdnaW5nIG9yIGEgYnJlYWtwb2ludCB3YXMgZW5jb3VudGVyZWQsIGRpc3BsYXkgdGhlIGRlYnVnCisJICogcHJvbXB0IChpZiBub3QgYWxyZWFkeSBkb25lKS4gIFRoaXMgc2hvd3MgdGhlIHVzZXIgdGhhdCBhbgorCSAqICI6ZW53aGlsZSIgaXMgZXhlY3V0ZWQgd2hlbiB0aGUgIjp3aGlsZSIgd2FzIG5vdCBUUlVFIG9yIGFmdGVyCisJICogYSAiOmJyZWFrIi4gIEhhbmRsZSBhICI+cXVpdCIgZGVidWcgY29tbWFuZCBhcyBpZiBhbiBpbnRlcnJ1cHQKKwkgKiBoYWQgb2NjdXJyZWQgYmVmb3JlIHRoZSAiOmVuZHdoaWxlIi4gIFRoYXQgaXMsIHRocm93IGFuIGludGVycnVwdAorCSAqIGV4Y2VwdGlvbiBpZiBhcHByb3ByaWF0ZS4gIERvaW5nIHRoaXMgaGVyZSBwcmV2ZW50cyB0aGF0IGFuCisJICogZXhjZXB0aW9uIGZvciBhIHBhcnNpbmcgZXJyb3IgaXMgZGlzY2FyZGVkIHdoZW4gdGhyb3dpbmcgdGhlCisJICogaW50ZXJydXB0IGV4Y2VwdGlvbiBsYXRlciBvbi4KKwkgKi8KKwllbHNlIGlmIChjc3RhY2stPmNzX2ZsYWdzW2NzdGFjay0+Y3NfaWR4XSAmIENTRl9UUlVFCisJCSYmICEoY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gJiBDU0ZfQUNUSVZFKQorCQkmJiBkYmdfY2hlY2tfc2tpcHBlZChlYXApKQorCSAgICAodm9pZClkb19pbnR0aHJvdyhjc3RhY2spOworCisJLyoKKwkgKiBTZXQgY3NfaGFkX2VuZHdoaWxlLCBzbyBkb19jbWRsaW5lKCkgd2lsbCBqdW1wIGJhY2sgdG8gdGhlIG1hdGNoaW5nCisJICogIjp3aGlsZSIuCisJICovCisJY3N0YWNrLT5jc19oYWRfZW5kd2hpbGUgPSBUUlVFOworICAgIH0KK30KKworCisvKgorICogIjp0aHJvdyBleHByIgorICovCisgICAgdm9pZAorZXhfdGhyb3coZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIGNoYXJfdQkqdmFsdWU7CisKKyAgICBpZiAoKmFyZyAhPSBOVUwgJiYgKmFyZyAhPSAnfCcgJiYgKmFyZyAhPSAnXG4nKQorCXZhbHVlID0gZXZhbF90b19zdHJpbmdfc2tpcChhcmcsICZlYXAtPm5leHRjbWQsIGVhcC0+c2tpcCk7CisgICAgZWxzZQorICAgIHsKKwlFTVNHKF8oZV9hcmdyZXEpKTsKKwl2YWx1ZSA9IE5VTEw7CisgICAgfQorCisgICAgLyogT24gZXJyb3Igb3Igd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGR1cmluZyBhcmd1bWVudCBldmFsdWF0aW9uLCBkbworICAgICAqIG5vdCB0aHJvdy4gKi8KKyAgICBpZiAoIWVhcC0+c2tpcCAmJiB2YWx1ZSAhPSBOVUxMKQorICAgIHsKKwlpZiAodGhyb3dfZXhjZXB0aW9uKHZhbHVlLCBFVF9VU0VSLCBOVUxMKSA9PSBGQUlMKQorCSAgICB2aW1fZnJlZSh2YWx1ZSk7CisJZWxzZQorCSAgICBkb190aHJvdyhlYXAtPmNzdGFjayk7CisgICAgfQorfQorCisvKgorICogVGhyb3cgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIHRocm91Z2ggdGhlIHNwZWNpZmllZCBjc3RhY2suICBDb21tb24gcm91dGluZSBmb3IKKyAqICI6dGhyb3ciICh1c2VyIGV4Y2VwdGlvbikgYW5kIGVycm9yIGFuZCBpbnRlcnJ1cHQgZXhjZXB0aW9ucy4gIEFsc28gdXNlZCBmb3IKKyAqIHJldGhyb3dpbmcgYW4gdW5jYXVnaHQgZXhjZXB0aW9uLgorICovCisgICAgdm9pZAorZG9fdGhyb3coY3N0YWNrKQorICAgIHN0cnVjdCBjb25kc3RhY2sJKmNzdGFjazsKK3sKKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCWluYWN0aXZhdGVfdHJ5ID0gRkFMU0U7CisKKyAgICAvKgorICAgICAqIENsZWFudXAgYW5kIGluYWN0aXZhdGUgdXAgdG8gdGhlIG5leHQgc3Vycm91bmRpbmcgdHJ5IGNvbmRpdGlvbmFsIHRoYXQKKyAgICAgKiBpcyBub3QgaW4gaXRzIGZpbmFsbHkgY2xhdXNlLiAgTm9ybWFsbHksIGRvIG5vdCBpbmFjdGl2YXRlIHRoZSB0cnkKKyAgICAgKiBjb25kaXRpb25hbCBpdHNlbGYsIHNvIHRoYXQgaXRzIEFDVElWRSBmbGFnIGNhbiBiZSB0ZXN0ZWQgYmVsb3cuICBCdXQKKyAgICAgKiBpZiBhIHByZXZpb3VzIGVycm9yIG9yIGludGVycnVwdCBoYXMgbm90IGJlZW4gY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbiwKKyAgICAgKiBpbmFjdGl2YXRlIHRoZSB0cnkgY29uZGl0aW9uYWwsIHRvbywgYXMgaWYgdGhlIGNvbnZlcnNpb24gaGFkIGJlZW4gZG9uZSwKKyAgICAgKiBhbmQgcmVzZXQgdGhlIGRpZF9lbXNnIG9yIGdvdF9pbnQgZmxhZywgc28gdGhpcyB3b24ndCBoYXBwZW4gYWdhaW4gYXQgdGhlCisgICAgICogbmV4dCBzdXJyb3VuZGluZyB0cnkgY29uZGl0aW9uYWwuCisgICAgICovCisgICAgaWYgKGRpZF9lbXNnICYmICFUSFJPV19PTl9FUlJPUikKKyAgICB7CisJaW5hY3RpdmF0ZV90cnkgPSBUUlVFOworCWRpZF9lbXNnID0gRkFMU0U7CisgICAgfQorICAgIGlmIChnb3RfaW50ICYmICFUSFJPV19PTl9JTlRFUlJVUFQpCisgICAgeworCWluYWN0aXZhdGVfdHJ5ID0gVFJVRTsKKwlnb3RfaW50ID0gRkFMU0U7CisgICAgfQorICAgIGlkeCA9IGNsZWFudXBfY29uZGl0aW9uYWxzKGNzdGFjaywgMCwgaW5hY3RpdmF0ZV90cnkpOworICAgIGlmIChpZHggPj0gMCkKKyAgICB7CisJLyoKKwkgKiBJZiB0aGlzIHRyeSBjb25kaXRpb25hbCBpcyBhY3RpdmUgYW5kIHdlIGFyZSBiZWZvcmUgaXRzIGZpcnN0CisJICogIjpjYXRjaCIsIHNldCBUSFJPV04gc28gdGhhdCB0aGUgIjpjYXRjaCIgY29tbWFuZHMgd2lsbCBjaGVjayB3aGV0aGVyCisJICogdGhlIGV4Y2VwdGlvbiBtYXRjaGVzLiAgV2hlbiB0aGUgZXhjZXB0aW9uIGNhbWUgZnJvbSBhbnkgb2YgdGhlCisJICogY2F0Y2ggY2xhdXNlcywgaXQgd2lsbCBiZSBtYWRlIHBlbmRpbmcgYXQgdGhlICI6ZmluYWxseSIgKGlmIHByZXNlbnQpCisJICogYW5kIHJldGhyb3duIGF0IHRoZSAiOmVuZHRyeSIuICBUaGlzIHdpbGwgYWxzbyBoYXBwZW4gaWYgdGhlIHRyeQorCSAqIGNvbmRpdGlvbmFsIGlzIGluYWN0aXZlLiAgVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHdlIGFyZSB0aHJvd2luZyBhbgorCSAqIGV4Y2VwdGlvbiBkdWUgdG8gYW4gZXJyb3Igb3IgaW50ZXJydXB0IG9uIHRoZSB3YXkgZnJvbSBhIHByZWNlZGluZworCSAqICI6Y29udGludWUiLCAiOmJyZWFrIiwgIjpyZXR1cm4iLCAiOmZpbmlzaCIsIGVycm9yIG9yIGludGVycnVwdCAobm90CisJICogY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbikgdG8gdGhlIGZpbmFsbHkgY2xhdXNlIG9yIGZyb20gYSBwcmVjZWRpbmcKKwkgKiB0aHJvdyBvZiBhIHVzZXIgb3IgZXJyb3Igb3IgaW50ZXJydXB0IGV4Y2VwdGlvbiB0byB0aGUgbWF0Y2hpbmcgY2F0Y2gKKwkgKiBjbGF1c2Ugb3IgdGhlIGZpbmFsbHkgY2xhdXNlLgorCSAqLworCWlmICghKGNzdGFjay0+Y3NfZmxhZ3NbaWR4XSAmIENTRl9DQVVHSFQpKQorCXsKKwkgICAgaWYgKGNzdGFjay0+Y3NfZmxhZ3NbaWR4XSAmIENTRl9BQ1RJVkUpCisJCWNzdGFjay0+Y3NfZmxhZ3NbaWR4XSB8PSBDU0ZfVEhST1dOOworCSAgICBlbHNlCisJCS8qIFRIUk9XTiBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0IGZvciBhIGNhdGNoYWJsZSBleGNlcHRpb24KKwkJICogdGhhdCBoYXMgYmVlbiBkaXNjYXJkZWQuICBFbnN1cmUgaXQgaXMgcmVzZXQgZm9yIHRoZSBuZXcKKwkJICogZXhjZXB0aW9uLiAqLworCQljc3RhY2stPmNzX2ZsYWdzW2lkeF0gJj0gfkNTRl9USFJPV047CisJfQorCWNzdGFjay0+Y3NfZmxhZ3NbaWR4XSAmPSB+Q1NGX0FDVElWRTsKKwljc3RhY2stPmNzX2V4Y2VwdGlvbltpZHhdID0gY3VycmVudF9leGNlcHRpb247CisgICAgfQorI2lmIDAKKyAgICAvKiBUT0RPOiBBZGQgb3B0aW1pemF0aW9uIGJlbG93LiAgTm90IHlldCBkb25lIGJlY2F1c2Ugb2YgaW50ZXJmYWNlIHByb2JsZW1zCisgICAgICogdG8gZXZhbC5jIGFuZCBleF9jbWRzMi5jLiAoU2VydmF0aXVzKSAqLworICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBUaGVyZSBhcmUgbm8gY2F0Y2ggY2xhdXNlcyB0byBjaGVjayBvciBmaW5hbGx5IGNsYXVzZXMgdG8gZXhlY3V0ZS4KKwkgKiBFbmQgdGhlIGN1cnJlbnQgc2NyaXB0IG9yIGZ1bmN0aW9uLiAgVGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHJldGhyb3duCisJICogaW4gdGhlIGNhbGxlci4KKwkgKi8KKwlpZiAoZ2V0bGluZV9lcXVhbChlYXAtPmdldGxpbmUsIGVhcC0+Y29va2llLCBnZXRfZnVuY19saW5lKSkKKwkgICAgY3VycmVudF9mdW5jY2FsLT5yZXR1cm5lZCA9IFRSVUU7CisJZWxzZWlmIChlYXAtPmdldF9mdW5jX2xpbmUgPT0gZ2V0c291cmNlbGluZSkKKwkgICAgKChzdHJ1Y3Qgc291cmNlX2Nvb2tpZSAqKWVhcC0+Y29va2llKS0+ZmluaXNoZWQgPSBUUlVFOworICAgIH0KKyNlbmRpZgorCisgICAgZGlkX3Rocm93ID0gVFJVRTsKK30KKworLyoKKyAqICI6dHJ5IgorICovCisgICAgdm9pZAorZXhfdHJ5KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQlza2lwOworICAgIHN0cnVjdCBjb25kc3RhY2sJKmNzdGFjayA9IGVhcC0+Y3N0YWNrOworCisgICAgaWYgKGNzdGFjay0+Y3NfaWR4ID09IENTVEFDS19MRU4gLSAxKQorCWVhcC0+ZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNjAxOiA6dHJ5IG5lc3RpbmcgdG9vIGRlZXAiKTsKKyAgICBlbHNlCisgICAgeworCSsrY3N0YWNrLT5jc19pZHg7CisJKytjc3RhY2stPmNzX3RyeWxldmVsOworCWNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdID0gQ1NGX1RSWTsKKwljc3RhY2stPmNzX3BlbmRpbmdbY3N0YWNrLT5jc19pZHhdID0gQ1NUUF9OT05FOworCisJLyoKKwkgKiBEb24ndCBkbyBzb21ldGhpbmcgYWZ0ZXIgYW4gZXJyb3IsIGludGVycnVwdCwgb3IgdGhyb3csIG9yIHdoZW4gdGhlcmUKKwkgKiBpcyBhIHN1cnJvdW5kaW5nIGNvbmRpdGlvbmFsIGFuZCBpdCB3YXMgbm90IGFjdGl2ZS4KKwkgKi8KKwlza2lwID0gZGlkX2Vtc2cgfHwgZ290X2ludCB8fCBkaWRfdGhyb3cgfHwgKGNzdGFjay0+Y3NfaWR4ID4gMAorCQkmJiAhKGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHggLSAxXSAmIENTRl9BQ1RJVkUpKTsKKworCWlmICghc2tpcCkKKwl7CisJICAgIC8qIFNldCBBQ1RJVkUgYW5kIFRSVUUuICBUUlVFIG1lYW5zIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgIjpjYXRjaCIKKwkgICAgICogY29tbWFuZHMgc2hvdWxkIGNoZWNrIGZvciBhIG1hdGNoIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gYW5kCisJICAgICAqIHRoYXQgdGhlIGZpbmFsbHkgY2xhdXNlIG5lZWRzIHRvIGJlIGV4ZWN1dGVkLiAqLworCSAgICBjc3RhY2stPmNzX2ZsYWdzW2NzdGFjay0+Y3NfaWR4XSB8PSBDU0ZfQUNUSVZFIHwgQ1NGX1RSVUU7CisKKwkgICAgLyoKKwkgICAgICogIjpzaWxlbnQhIiwgZXZlbiB3aGVuIHVzZWQgaW4gYSB0cnkgY29uZGl0aW9uYWwsIGRpc2FibGVzCisJICAgICAqIGRpc3BsYXlpbmcgb2YgZXJyb3IgbWVzc2FnZXMgYW5kIGNvbnZlcnNpb24gb2YgZXJyb3JzIHRvCisJICAgICAqIGV4Y2VwdGlvbnMuICBXaGVuIHRoZSBzaWxlbnQgY29tbWFuZHMgYWdhaW4gb3BlbiBhIHRyeQorCSAgICAgKiBjb25kaXRpb25hbCwgc2F2ZSAiZW1zZ19zaWxlbnQiIGFuZCByZXNldCBpdCBzbyB0aGF0IGVycm9ycyBhcmUKKwkgICAgICogYWdhaW4gY29udmVydGVkIHRvIGV4Y2VwdGlvbnMuICBUaGUgdmFsdWUgaXMgcmVzdG9yZWQgd2hlbiB0aGF0CisJICAgICAqIHRyeSBjb25kaXRpb25hbCBpcyBsZWZ0LiAgSWYgaXQgaXMgbGVmdCBub3JtYWxseSwgdGhlIGNvbW1hbmRzCisJICAgICAqIGZvbGxvd2luZyB0aGUgIjplbmR0cnkiIGFyZSBhZ2FpbiBzaWxlbnQuICBJZiBpdCBpcyBsZWZ0IGJ5CisJICAgICAqIGEgIjpjb250aW51ZSIsICI6YnJlYWsiLCAiOnJldHVybiIsIG9yICI6ZmluaXNoIiwgdGhlIGNvbW1hbmRzCisJICAgICAqIGV4ZWN1dGVkIG5leHQgYXJlIGFnYWluIHNpbGVudC4gIElmIGl0IGlzIGxlZnQgZHVlIHRvIGFuCisJICAgICAqIGFib3J0aW5nIGVycm9yLCBhbiBpbnRlcnJ1cHQsIG9yIGFuIGV4Y2VwdGlvbiwgcmVzdG9yaW5nCisJICAgICAqICJlbXNnX3NpbGVudCIgZG9lcyBub3QgbWF0dGVyIHNpbmNlIHdlIGFyZSBhbHJlYWR5IGluIHRoZQorCSAgICAgKiBhYm9ydGluZyBzdGF0ZSBhbmQvb3IgdGhlIGV4Y2VwdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHRocm93bi4KKwkgICAgICogVGhlIGVmZmVjdCBpcyB0aGVuIGp1c3QgZnJlZWluZyB0aGUgbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRlZAorCSAgICAgKiB0byBzYXZlIHRoZSB2YWx1ZS4KKwkgICAgICovCisJICAgIGlmIChlbXNnX3NpbGVudCkKKwkgICAgeworCQllc2xpc3RfVAkqZWxlbTsKKworCQllbGVtID0gKGVzbGlzdF9UICopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihzdHJ1Y3QgZXNsaXN0X2VsZW0pKTsKKwkJaWYgKGVsZW0gPT0gTlVMTCkKKwkJICAgIEVNU0coXyhlX291dG9mbWVtKSk7CisJCWVsc2UKKwkJeworCQkgICAgZWxlbS0+c2F2ZWRfZW1zZ19zaWxlbnQgPSBlbXNnX3NpbGVudDsKKwkJICAgIGVsZW0tPm5leHQgPSBjc3RhY2stPmNzX2Vtc2dfc2lsZW50X2xpc3Q7CisJCSAgICBjc3RhY2stPmNzX2Vtc2dfc2lsZW50X2xpc3QgPSBlbGVtOworCQkgICAgY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gfD0gQ1NGX1NJTEVOVDsKKwkJICAgIGVtc2dfc2lsZW50ID0gMDsKKwkJfQorCSAgICB9CisJfQorCisgICAgfQorfQorCisvKgorICogIjpjYXRjaCAve3BhdHRlcm59LyIgYW5kICI6Y2F0Y2giCisgKi8KKyAgICB2b2lkCitleF9jYXRjaChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJaWR4ID0gMDsKKyAgICBpbnQJCWdpdmVfdXAgPSBGQUxTRTsKKyAgICBpbnQJCXNraXAgPSBGQUxTRTsKKyAgICBpbnQJCWNhdWdodCA9IEZBTFNFOworICAgIGNoYXJfdQkqZW5kOworICAgIGludAkJc2F2ZV9jaGFyID0gMDsKKyAgICBjaGFyX3UJKnNhdmVfY3BvOworICAgIHJlZ21hdGNoX1QJcmVnbWF0Y2g7CisgICAgaW50CQlwcmV2X2dvdF9pbnQ7CisgICAgc3RydWN0IGNvbmRzdGFjawkqY3N0YWNrID0gZWFwLT5jc3RhY2s7CisgICAgY2hhcl91CSpwYXQ7CisKKyAgICBpZiAoY3N0YWNrLT5jc190cnlsZXZlbCA8PSAwIHx8IGNzdGFjay0+Y3NfaWR4IDwgMCkKKyAgICB7CisJZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU2MDM6IDpjYXRjaCB3aXRob3V0IDp0cnkiKTsKKwlnaXZlX3VwID0gVFJVRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoIShjc3RhY2stPmNzX2ZsYWdzW2NzdGFjay0+Y3NfaWR4XSAmIENTRl9UUlkpKQorCXsKKwkgICAgLyogUmVwb3J0IHdoYXQncyBtaXNzaW5nIGlmIHRoZSBtYXRjaGluZyAiOnRyeSIgaXMgbm90IGluIGl0cworCSAgICAgKiBmaW5hbGx5IGNsYXVzZS4gKi8KKwkgICAgaWYgKGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdICYgQ1NGX1dISUxFKQorCQllYXAtPmVycm1zZyA9IGVfZW5kd2hpbGU7CisJICAgIGVsc2UKKwkJZWFwLT5lcnJtc2cgPSBlX2VuZGlmOworCSAgICBza2lwID0gVFJVRTsKKwl9CisJZm9yIChpZHggPSBjc3RhY2stPmNzX2lkeDsgaWR4ID4gMDsgLS1pZHgpCisJICAgIGlmIChjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfVFJZKQorCQlicmVhazsKKwlpZiAoY3N0YWNrLT5jc19mbGFnc1tpZHhdICYgQ1NGX0ZJTkFMTFkpCisJeworCSAgICAvKiBHaXZlIHVwIGZvciBhICI6Y2F0Y2giIGFmdGVyICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKwkgICAgICogSnVzdCBwYXJzZS4gKi8KKwkgICAgZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU2MDQ6IDpjYXRjaCBhZnRlciA6ZmluYWxseSIpOworCSAgICBnaXZlX3VwID0gVFJVRTsKKwl9CisJZWxzZSBpZiAoY3N0YWNrLT5jc19pZHggPiBpZHgpCisJICAgIHJld2luZF9jb25kaXRpb25hbHMoY3N0YWNrLCBpZHgsIENTRl9XSElMRSwgJmNzdGFjay0+Y3Nfd2hpbGVsZXZlbCk7CisgICAgfQorCisgICAgaWYgKGVuZHNfZXhjbWQoKmVhcC0+YXJnKSkJLyogbm8gYXJndW1lbnQsIGNhdGNoIGFsbCBlcnJvcnMgKi8KKyAgICB7CisJcGF0ID0gKGNoYXJfdSAqKSIuKiI7CisJZW5kID0gTlVMTDsKKwllYXAtPm5leHRjbWQgPSBmaW5kX25leHRjbWQoZWFwLT5hcmcpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXBhdCA9IGVhcC0+YXJnICsgMTsKKwllbmQgPSBza2lwX3JlZ2V4cChwYXQsICplYXAtPmFyZywgVFJVRSwgTlVMTCk7CisgICAgfQorCisgICAgaWYgKCFnaXZlX3VwKQorICAgIHsKKwkvKgorCSAqIERvbid0IGRvIHNvbWV0aGluZyB3aGVuIG5vIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24gb3Igd2hlbiB0aGUKKwkgKiBjb3JyZXNwb25kaW5nIHRyeSBibG9jayBuZXZlciBnb3QgYWN0aXZlIChiZWNhdXNlIG9mIGFuIGluYWN0aXZlCisJICogc3Vycm91bmRpbmcgY29uZGl0aW9uYWwgb3IgYWZ0ZXIgYW4gZXJyb3Igb3IgaW50ZXJydXB0IG9yIHRocm93KS4KKwkgKi8KKwlpZiAoIWRpZF90aHJvdyB8fCAhKGNzdGFjay0+Y3NfZmxhZ3NbaWR4XSAmIENTRl9UUlVFKSkKKwkgICAgc2tpcCA9IFRSVUU7CisKKwkvKgorCSAqIENoZWNrIGZvciBhIG1hdGNoIG9ubHkgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBidXQgbm90IGNhdWdodCBieQorCSAqIGEgcHJldmlvdXMgIjpjYXRjaCIuICBBbiBleGNlcHRpb24gdGhhdCBoYXMgcmVwbGFjZWQgYSBkaXNjYXJkZWQKKwkgKiBleGNlcHRpb24gaXMgbm90IGNoZWNrZWQgKFRIUk9XTiBpcyBub3Qgc2V0IHRoZW4pLgorCSAqLworCWlmICghc2tpcCAmJiAoY3N0YWNrLT5jc19mbGFnc1tpZHhdICYgQ1NGX1RIUk9XTikKKwkJJiYgIShjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfQ0FVR0hUKSkKKwl7CisJICAgIGlmIChlbmQgIT0gTlVMTCAmJiAqZW5kICE9IE5VTCAmJiAhZW5kc19leGNtZCgqc2tpcHdoaXRlKGVuZCArIDEpKSkKKwkgICAgeworCQlFTVNHKF8oZV90cmFpbGluZykpOworCQlyZXR1cm47CisJICAgIH0KKworCSAgICAvKiBXaGVuIGRlYnVnZ2luZyBvciBhIGJyZWFrcG9pbnQgd2FzIGVuY291bnRlcmVkLCBkaXNwbGF5IHRoZQorCSAgICAgKiBkZWJ1ZyBwcm9tcHQgKGlmIG5vdCBhbHJlYWR5IGRvbmUpIGJlZm9yZSBjaGVja2luZyBmb3IgYSBtYXRjaC4KKwkgICAgICogVGhpcyBpcyBhIGhlbHBmdWwgaGludCBmb3IgdGhlIHVzZXIgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uCisJICAgICAqIG1hdGNoaW5nIGZhaWxzLiAgSGFuZGxlIGEgIj5xdWl0IiBkZWJ1ZyBjb21tYW5kIGFzIGlmIGFuCisJICAgICAqIGludGVycnVwdCBoYWQgb2NjdXJyZWQgYmVmb3JlIHRoZSAiOmNhdGNoIi4gIFRoYXQgaXMsIGRpc2NhcmQKKwkgICAgICogdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiwgcmVwbGFjZSBpdCBieSBhbiBpbnRlcnJ1cHQgZXhjZXB0aW9uLAorCSAgICAgKiBhbmQgZG9uJ3QgY2F0Y2ggaXQgaW4gdGhpcyB0cnkgYmxvY2suICovCisJICAgIGlmICghZGJnX2NoZWNrX3NraXBwZWQoZWFwKSB8fCAhZG9faW50dGhyb3coY3N0YWNrKSkKKwkgICAgeworCQkvKiBUZXJtaW5hdGUgdGhlIHBhdHRlcm4gYW5kIGF2b2lkIHRoZSAnbCcgZmxhZyBpbiAnY3BvcHRpb25zJworCQkgKiB3aGlsZSBjb21waWxpbmcgaXQuICovCisJCWlmIChlbmQgIT0gTlVMTCkKKwkJeworCQkgICAgc2F2ZV9jaGFyID0gKmVuZDsKKwkJICAgICplbmQgPSBOVUw7CisJCX0KKwkJc2F2ZV9jcG8gID0gcF9jcG87CisJCXBfY3BvID0gKGNoYXJfdSAqKSIiOworCQlyZWdtYXRjaC5yZWdwcm9nID0gdmltX3JlZ2NvbXAocGF0LCBUUlVFKTsKKwkJcmVnbWF0Y2gucm1faWMgPSBGQUxTRTsKKwkJaWYgKGVuZCAhPSBOVUxMKQorCQkgICAgKmVuZCA9IHNhdmVfY2hhcjsKKwkJcF9jcG8gPSBzYXZlX2NwbzsKKwkJaWYgKHJlZ21hdGNoLnJlZ3Byb2cgPT0gTlVMTCkKKwkJICAgIEVNU0cyKF8oZV9pbnZhcmcyKSwgcGF0KTsKKwkJZWxzZQorCQl7CisJCSAgICAvKgorCQkgICAgICogU2F2ZSB0aGUgdmFsdWUgb2YgZ290X2ludCBhbmQgcmVzZXQgaXQuICBXZSBkb24ndCB3YW50CisJCSAgICAgKiBhIHByZXZpb3VzIGludGVycnVwdGlvbiBjYW5jZWwgbWF0Y2hpbmcsIG9ubHkgaGl0dGluZworCQkgICAgICogQ1RSTC1DIHdoaWxlIG1hdGNoaW5nIHNob3VsZCBhYm9ydCBpdC4KKwkJICAgICAqLworCQkgICAgcHJldl9nb3RfaW50ID0gZ290X2ludDsKKwkJICAgIGdvdF9pbnQgPSBGQUxTRTsKKwkJICAgIGNhdWdodCA9IHZpbV9yZWdleGVjX25sKCZyZWdtYXRjaCwgY3VycmVudF9leGNlcHRpb24tPnZhbHVlLAorCQkJICAgIChjb2xucl9UKTApOworCQkgICAgZ290X2ludCB8PSBwcmV2X2dvdF9pbnQ7CisJCSAgICB2aW1fZnJlZShyZWdtYXRjaC5yZWdwcm9nKTsKKwkJfQorCSAgICB9CisJfQorCisJaWYgKGNhdWdodCkKKwl7CisJICAgIC8qIE1ha2UgdGhpcyAiOmNhdGNoIiBjbGF1c2UgYWN0aXZlIGFuZCByZXNldCBkaWRfZW1zZywgZ290X2ludCwKKwkgICAgICogYW5kIGRpZF90aHJvdy4gIFB1dCB0aGUgZXhjZXB0aW9uIG9uIHRoZSBjYXVnaHQgc3RhY2suICovCisJICAgIGNzdGFjay0+Y3NfZmxhZ3NbaWR4XSB8PSBDU0ZfQUNUSVZFIHwgQ1NGX0NBVUdIVDsKKwkgICAgZGlkX2Vtc2cgPSBnb3RfaW50ID0gZGlkX3Rocm93ID0gRkFMU0U7CisJICAgIGNhdGNoX2V4Y2VwdGlvbigoZXhjZXB0X1QgKiljc3RhY2stPmNzX2V4Y2VwdGlvbltpZHhdKTsKKwkgICAgLyogSXQncyBtYW5kYXRvcnkgdGhhdCB0aGUgY3VycmVudCBleGNlcHRpb24gaXMgc3RvcmVkIGluIHRoZSBjc3RhY2sKKwkgICAgICogc28gdGhhdCBpdCBjYW4gYmUgZGlzY2FyZGVkIGF0IHRoZSBuZXh0ICI6Y2F0Y2giLCAiOmZpbmFsbHkiLCBvcgorCSAgICAgKiAiOmVuZHRyeSIgb3Igd2hlbiB0aGUgY2F0Y2ggY2xhdXNlIGlzIGxlZnQgYnkgYSAiOmNvbnRpbnVlIiwKKwkgICAgICogIjpicmVhayIsICI6cmV0dXJuIiwgIjpmaW5pc2giLCBlcnJvciwgaW50ZXJydXB0LCBvciBhbm90aGVyCisJICAgICAqIGV4Y2VwdGlvbi4gKi8KKwkgICAgaWYgKGNzdGFjay0+Y3NfZXhjZXB0aW9uW2NzdGFjay0+Y3NfaWR4XSAhPSBjdXJyZW50X2V4Y2VwdGlvbikKKwkJRU1TRyhfKGVfaW50ZXJuYWwpKTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogSWYgdGhlcmUgaXMgYSBwcmVjZWRpbmcgY2F0Y2ggY2xhdXNlIGFuZCBpdCBjYXVnaHQgdGhlIGV4Y2VwdGlvbiwKKwkgICAgICogZmluaXNoIHRoZSBleGNlcHRpb24gbm93LiAgVGhpcyBoYXBwZW5zIGFsc28gYWZ0ZXIgZXJyb3JzIGV4Y2VwdAorCSAgICAgKiB3aGVuIHRoaXMgIjpjYXRjaCIgd2FzIGFmdGVyIHRoZSAiOmZpbmFsbHkiIG9yIG5vdCB3aXRoaW4KKwkgICAgICogYSAiOnRyeSIuICBNYWtlIHRoZSB0cnkgY29uZGl0aW9uYWwgaW5hY3RpdmUgc28gdGhhdCB0aGUKKwkgICAgICogZm9sbG93aW5nIGNhdGNoIGNsYXVzZXMgYXJlIHNraXBwZWQuICBPbiBhbiBlcnJvciBvciBpbnRlcnJ1cHQKKwkgICAgICogYWZ0ZXIgdGhlIHByZWNlZGluZyB0cnkgYmxvY2sgb3IgY2F0Y2ggY2xhdXNlIHdhcyBsZWZ0IGJ5CisJICAgICAqIGEgIjpjb250aW51ZSIsICI6YnJlYWsiLCAiOnJldHVybiIsIG9yICI6ZmluaXNoIiwgZGlzY2FyZCB0aGUKKwkgICAgICogcGVuZGluZyBhY3Rpb24uCisJICAgICAqLworCSAgICBjbGVhbnVwX2NvbmRpdGlvbmFscyhjc3RhY2ssIENTRl9UUlksIFRSVUUpOworCX0KKyAgICB9CisKKyAgICBpZiAoZW5kICE9IE5VTEwpCisJZWFwLT5uZXh0Y21kID0gZmluZF9uZXh0Y21kKGVuZCk7Cit9CisKKy8qCisgKiAiOmZpbmFsbHkiCisgKi8KKyAgICB2b2lkCitleF9maW5hbGx5KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQlpZHg7CisgICAgaW50CQlza2lwID0gRkFMU0U7CisgICAgaW50CQlwZW5kaW5nID0gQ1NUUF9OT05FOworICAgIHN0cnVjdCBjb25kc3RhY2sJKmNzdGFjayA9IGVhcC0+Y3N0YWNrOworCisgICAgaWYgKGNzdGFjay0+Y3NfdHJ5bGV2ZWwgPD0gMCB8fCBjc3RhY2stPmNzX2lkeCA8IDApCisJZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU2MDY6IDpmaW5hbGx5IHdpdGhvdXQgOnRyeSIpOworICAgIGVsc2UKKyAgICB7CisJaWYgKCEoY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gJiBDU0ZfVFJZKSkKKwl7CisJICAgIC8qIEZpbmQgdGhlIG1hdGNoaW5nICI6dHJ5IiBhbmQgcmVwb3J0IHdoYXQncyBtaXNzaW5nLiAqLworCSAgICBpZiAoY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gJiBDU0ZfV0hJTEUpCisJCWVhcC0+ZXJybXNnID0gZV9lbmR3aGlsZTsKKwkgICAgZWxzZQorCQllYXAtPmVycm1zZyA9IGVfZW5kaWY7CisJICAgIGZvciAoaWR4ID0gY3N0YWNrLT5jc19pZHggLSAxOyBpZHggPiAwOyAtLWlkeCkKKwkJaWYgKGNzdGFjay0+Y3NfZmxhZ3NbaWR4XSAmIENTRl9UUlkpCisJCSAgICBicmVhazsKKwkgICAgLyogTWFrZSB0aGlzIGVycm9yIHBlbmRpbmcsIHNvIHRoYXQgdGhlIGNvbW1hbmRzIGluIHRoZSBmb2xsb3dpbmcKKwkgICAgICogZmluYWxseSBjbGF1c2UgY2FuIGJlIGV4ZWN1dGVkLiAgVGhpcyBvdmVycnVsZXMgYWxzbyBhIHBlbmRpbmcKKwkgICAgICogIjpjb250aW51ZSIsICI6YnJlYWsiLCAiOnJldHVybiIsIG9yICI6ZmluaXNoIi4gKi8KKwkgICAgcGVuZGluZyA9IENTVFBfRVJST1I7CisJfQorCWVsc2UKKwkgICAgaWR4ID0gY3N0YWNrLT5jc19pZHg7CisKKwlpZiAoY3N0YWNrLT5jc19mbGFnc1tpZHhdICYgQ1NGX0ZJTkFMTFkpCisJeworCSAgICAvKiBHaXZlIHVwIGZvciBhIG11bHRpcGxlICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4gKi8KKwkgICAgZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU2MDc6IG11bHRpcGxlIDpmaW5hbGx5Iik7CisJICAgIHJldHVybjsKKwl9CisJaWYgKGNzdGFjay0+Y3NfaWR4ID4gaWR4KQorCSAgICByZXdpbmRfY29uZGl0aW9uYWxzKGNzdGFjaywgaWR4LCBDU0ZfV0hJTEUsICZjc3RhY2stPmNzX3doaWxlbGV2ZWwpOworCisJLyoKKwkgKiBEb24ndCBkbyBzb21ldGhpbmcgd2hlbiB0aGUgY29ycmVzcG9uZGluZyB0cnkgYmxvY2sgbmV2ZXIgZ290IGFjdGl2ZQorCSAqIChiZWNhdXNlIG9mIGFuIGluYWN0aXZlIHN1cnJvdW5kaW5nIGNvbmRpdGlvbmFsIG9yIGFmdGVyIGFuIGVycm9yIG9yCisJICogaW50ZXJydXB0IG9yIHRocm93KSBvciBmb3IgYSAiOmZpbmFsbHkiIHdpdGhvdXQgIjp0cnkiIG9yIGEgbXVsdGlwbGUKKwkgKiAiOmZpbmFsbHkiLiAgQWZ0ZXIgZXZlcnkgb3RoZXIgZXJyb3IgKGRpZF9lbXNnIG9yIHRoZSBjb25kaXRpb25hbAorCSAqIGVycm9ycyBkZXRlY3RlZCBhYm92ZSkgb3IgYWZ0ZXIgYW4gaW50ZXJydXB0IChnb3RfaW50KSBvciBhbgorCSAqIGV4Y2VwdGlvbiAoZGlkX3Rocm93KSwgdGhlIGZpbmFsbHkgY2xhdXNlIG11c3QgYmUgZXhlY3V0ZWQuCisJICovCisJc2tpcCA9ICEoY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gJiBDU0ZfVFJVRSk7CisKKwlpZiAoIXNraXApCisJeworCSAgICAvKiBXaGVuIGRlYnVnZ2luZyBvciBhIGJyZWFrcG9pbnQgd2FzIGVuY291bnRlcmVkLCBkaXNwbGF5IHRoZQorCSAgICAgKiBkZWJ1ZyBwcm9tcHQgKGlmIG5vdCBhbHJlYWR5IGRvbmUpLiAgVGhlIHVzZXIgdGhlbiBrbm93cyB0aGF0IHRoZQorCSAgICAgKiBmaW5hbGx5IGNsYXVzZSBpcyBleGVjdXRlZC4gKi8KKwkgICAgaWYgKGRiZ19jaGVja19za2lwcGVkKGVhcCkpCisJICAgIHsKKwkJLyogSGFuZGxlIGEgIj5xdWl0IiBkZWJ1ZyBjb21tYW5kIGFzIGlmIGFuIGludGVycnVwdCBoYWQKKwkJICogb2NjdXJyZWQgYmVmb3JlIHRoZSAiOmZpbmFsbHkiLiAgVGhhdCBpcywgZGlzY2FyZCB0aGUKKwkJICogb3JpZ2luYWwgZXhjZXB0aW9uIGFuZCByZXBsYWNlIGl0IGJ5IGFuIGludGVycnVwdAorCQkgKiBleGNlcHRpb24uICovCisJCSh2b2lkKWRvX2ludHRocm93KGNzdGFjayk7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBJZiB0aGVyZSBpcyBhIHByZWNlZGluZyBjYXRjaCBjbGF1c2UgYW5kIGl0IGNhdWdodCB0aGUgZXhjZXB0aW9uLAorCSAgICAgKiBmaW5pc2ggdGhlIGV4Y2VwdGlvbiBub3cuICBUaGlzIGhhcHBlbnMgYWxzbyBhZnRlciBlcnJvcnMgZXhjZXB0CisJICAgICAqIHdoZW4gdGhpcyBpcyBhIG11bHRpcGxlICI6ZmluYWxseSIgb3Igb25lIG5vdCB3aXRoaW4gYSAiOnRyeSIuCisJICAgICAqIEFmdGVyIGFuIGVycm9yIG9yIGludGVycnVwdCwgdGhpcyBhbHNvIGRpc2NhcmRzIGEgcGVuZGluZworCSAgICAgKiAiOmNvbnRpbnVlIiwgIjpicmVhayIsICI6ZmluaXNoIiwgb3IgIjpyZXR1cm4iIGZyb20gdGhlIHByZWNlZGluZworCSAgICAgKiB0cnkgYmxvY2sgb3IgY2F0Y2ggY2xhdXNlLgorCSAgICAgKi8KKwkgICAgY2xlYW51cF9jb25kaXRpb25hbHMoY3N0YWNrLCBDU0ZfVFJZLCBGQUxTRSk7CisKKwkgICAgLyoKKwkgICAgICogTWFrZSBkaWRfZW1zZywgZ290X2ludCwgZGlkX3Rocm93IHBlbmRpbmcuICBJZiBzZXQsIHRoZXkgb3ZlcnJ1bGUKKwkgICAgICogYSBwZW5kaW5nICI6Y29udGludWUiLCAiOmJyZWFrIiwgIjpyZXR1cm4iLCBvciAiOmZpbmlzaCIuICBUaGVuCisJICAgICAqIHdlIGhhdmUgcGFydGljdWxhcmx5IHRvIGRpc2NhcmQgYSBwZW5kaW5nIHJldHVybiB2YWx1ZSAoYXMgZG9uZQorCSAgICAgKiBieSB0aGUgY2FsbCB0byBjbGVhbnVwX2NvbmRpdGlvbmFscygpIGFib3ZlIHdoZW4gZGlkX2Vtc2cgb3IKKwkgICAgICogZ290X2ludCBpcyBzZXQpLiAgVGhlIHBlbmRpbmcgdmFsdWVzIGFyZSByZXN0b3JlZCBieSB0aGUKKwkgICAgICogIjplbmR0cnkiLCBleGNlcHQgaWYgdGhlcmUgaXMgYSBuZXcgZXJyb3IsIGludGVycnVwdCwgZXhjZXB0aW9uLAorCSAgICAgKiAiOmNvbnRpbnVlIiwgIjpicmVhayIsICI6cmV0dXJuIiwgb3IgIjpmaW5pc2giIGluIHRoZSBmb2xsb3dpbmcKKwkgICAgICogZmluYWxseSBjbGF1c2UuICBBIG1pc3NpbmcgIjplbmR3aGlsZSIgb3IgIjplbmRpZiIgZGV0ZWN0ZWQgaGVyZQorCSAgICAgKiBpcyB0cmVhdGVkIGFzIGlmIGRpZF9lbXNnIGFuZCBkaWRfdGhyb3cgaGFkIGFscmVhZHkgYmVlbiBzZXQsCisJICAgICAqIHJlc3BlY3RpdmVseSBpbiBjYXNlIHRoYXQgdGhlIGVycm9yIGlzIG5vdCBjb252ZXJ0ZWQgdG8gYW4KKwkgICAgICogZXhjZXB0aW9uLCBkaWRfdGhyb3cgaGFkIGFscmVhZHkgYmVlbiB1bnNldC4gIFdlIG11c3Qgbm90IHNldAorCSAgICAgKiBkaWRfZW1zZyBoZXJlIHNpbmNlIHRoYXQgd291bGQgc3VwcHJlc3MgdGhlIGVycm9yIG1lc3NhZ2UuCisJICAgICAqLworCSAgICBpZiAocGVuZGluZyA9PSBDU1RQX0VSUk9SIHx8IGRpZF9lbXNnIHx8IGdvdF9pbnQgfHwgZGlkX3Rocm93KQorCSAgICB7CisJCWlmIChjc3RhY2stPmNzX3BlbmRpbmdbY3N0YWNrLT5jc19pZHhdID09IENTVFBfUkVUVVJOKQorCQl7CisJCSAgICByZXBvcnRfZGlzY2FyZF9wZW5kaW5nKENTVFBfUkVUVVJOLAorCQkJICAgIGNzdGFjay0+Y3NfcmV0dmFyW2NzdGFjay0+Y3NfaWR4XSk7CisJCSAgICBkaXNjYXJkX3BlbmRpbmdfcmV0dXJuKGNzdGFjay0+Y3NfcmV0dmFyW2NzdGFjay0+Y3NfaWR4XSk7CisJCX0KKwkJaWYgKHBlbmRpbmcgPT0gQ1NUUF9FUlJPUiAmJiAhZGlkX2Vtc2cpCisJCSAgICBwZW5kaW5nIHw9IChUSFJPV19PTl9FUlJPUikgPyBDU1RQX1RIUk9XIDogMDsKKwkJZWxzZQorCQkgICAgcGVuZGluZyB8PSBkaWRfdGhyb3cgPyBDU1RQX1RIUk9XIDogMDsKKwkJcGVuZGluZyB8PSBkaWRfZW1zZyAgPyBDU1RQX0VSUk9SICAgICA6IDA7CisJCXBlbmRpbmcgfD0gZ290X2ludCAgID8gQ1NUUF9JTlRFUlJVUFQgOiAwOworCQljc3RhY2stPmNzX3BlbmRpbmdbY3N0YWNrLT5jc19pZHhdID0gcGVuZGluZzsKKworCQkvKiBJdCdzIG1hbmRhdG9yeSB0aGF0IHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBpcyBzdG9yZWQgaW4gdGhlCisJCSAqIGNzdGFjayBzbyB0aGF0IGl0IGNhbiBiZSByZXRocm93biBhdCB0aGUgIjplbmR0cnkiIG9yIGJlCisJCSAqIGRpc2NhcmRlZCBpZiB0aGUgZmluYWxseSBjbGF1c2UgaXMgbGVmdCBieSBhICI6Y29udGludWUiLAorCQkgKiAiOmJyZWFrIiwgIjpyZXR1cm4iLCAiOmZpbmlzaCIsIGVycm9yLCBpbnRlcnJ1cHQsIG9yIGFub3RoZXIKKwkJICogZXhjZXB0aW9uLiAgV2hlbiBlbXNnKCkgaXMgY2FsbGVkIGZvciBhIG1pc3NpbmcgIjplbmRpZiIgb3IKKwkJICogYSBtaXNzaW5nICI6ZW5kd2hpbGUiIGRldGVjdGVkIGhlcmUsIHRoZSBleGNlcHRpb24gd2lsbCBiZQorCQkgKiBkaXNjYXJkZWQuICovCisJCWlmIChkaWRfdGhyb3cgJiYgY3N0YWNrLT5jc19leGNlcHRpb25bY3N0YWNrLT5jc19pZHhdICE9CisJCQljdXJyZW50X2V4Y2VwdGlvbikKKwkJICAgIEVNU0coXyhlX2ludGVybmFsKSk7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBTZXQgY3NfaGFkX2ZpbmFsbHksIHNvIGRvX2NtZGxpbmUoKSB3aWxsIHJlc2V0IGRpZF9lbXNnLCBnb3RfaW50LAorCSAgICAgKiBhbmQgZGlkX3Rocm93IGFuZCBtYWtlIHRoZSBmaW5hbGx5IGNsYXVzZSBhY3RpdmUuICBUaGlzIHdpbGwKKwkgICAgICogaGFwcGVuIGFmdGVyIGVtc2coKSBoYXMgYmVlbiBjYWxsZWQgZm9yIGEgbWlzc2luZyAiOmVuZGlmIiBvcgorCSAgICAgKiBhIG1pc3NpbmcgIjplbmR3aGlsZSIgZGV0ZWN0ZWQgaGVyZSwgc28gdGhhdCB0aGUgZm9sbG93aW5nCisJICAgICAqIGZpbmFsbHkgY2xhdXNlIHdpbGwgYmUgZXhlY3V0ZWQgZXZlbiB0aGVuLgorCSAgICAgKi8KKwkgICAgY3N0YWNrLT5jc19oYWRfZmluYWxseSA9IFRSVUU7CisJfQorICAgIH0KK30KKworLyoKKyAqICI6ZW5kdHJ5IgorICovCisgICAgdm9pZAorZXhfZW5kdHJ5KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQlpZHg7CisgICAgaW50CQlza2lwOworICAgIGludAkJcmV0aHJvdyA9IEZBTFNFOworICAgIGludAkJcGVuZGluZyA9IENTVFBfTk9ORTsKKyAgICB2b2lkCSpyZXR2YXIgPSBOVUxMOworICAgIHN0cnVjdCBjb25kc3RhY2sJKmNzdGFjayA9IGVhcC0+Y3N0YWNrOworCisgICAgaWYgKGNzdGFjay0+Y3NfdHJ5bGV2ZWwgPD0gMCB8fCBjc3RhY2stPmNzX2lkeCA8IDApCisJZWFwLT5lcnJtc2cgPSAoY2hhcl91ICopTl8oIkU2MDI6IDplbmR0cnkgd2l0aG91dCA6dHJ5Iik7CisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIERvbid0IGRvIHNvbWV0aGluZyBhZnRlciBhbiBlcnJvciwgaW50ZXJydXB0IG9yIHRocm93IGluIHRoZSB0cnkKKwkgKiBibG9jaywgY2F0Y2ggY2xhdXNlLCBvciBmaW5hbGx5IGNsYXVzZSBwcmVjZWRpbmcgdGhpcyAiOmVuZHRyeSIgb3IKKwkgKiB3aGVuIGFuIGVycm9yIG9yIGludGVycnVwdCBvY2N1cnJlZCBhZnRlciBhICI6Y29udGludWUiLCAiOmJyZWFrIiwKKwkgKiAiOnJldHVybiIsIG9yICI6ZmluaXNoIiBpbiBhIHRyeSBibG9jayBvciBjYXRjaCBjbGF1c2UgcHJlY2VkaW5nIHRoaXMKKwkgKiAiOmVuZHRyeSIgb3Igd2hlbiB0aGUgdHJ5IGJsb2NrIG5ldmVyIGdvdCBhY3RpdmUgKGJlY2F1c2Ugb2YgYW4KKwkgKiBpbmFjdGl2ZSBzdXJyb3VuZGluZyBjb25kaXRpb25hbCBvciBhZnRlciBhbiBlcnJvciBvciBpbnRlcnJ1cHQgb3IKKwkgKiB0aHJvdykgb3Igd2hlbiB0aGVyZSBpcyBhIHN1cnJvdW5kaW5nIGNvbmRpdGlvbmFsIGFuZCBpdCBoYXMgYmVlbgorCSAqIG1hZGUgaW5hY3RpdmUgYnkgYSAiOmNvbnRpbnVlIiwgIjpicmVhayIsICI6cmV0dXJuIiwgb3IgIjpmaW5pc2giIGluCisJICogdGhlIGZpbmFsbHkgY2xhdXNlLiAgVGhlIGxhdHRlciBjYXNlIG5lZWQgbm90IGJlIHRlc3RlZCBzaW5jZSB0aGVuCisJICogYW55dGhpbmcgcGVuZGluZyBoYXMgYWxyZWFkeSBiZWVuIGRpc2NhcmRlZC4gKi8KKwlza2lwID0gZGlkX2Vtc2cgfHwgZ290X2ludCB8fCBkaWRfdGhyb3cgfHwKKwkgICAgIShjc3RhY2stPmNzX2ZsYWdzW2NzdGFjay0+Y3NfaWR4XSAmIENTRl9UUlVFKTsKKworCWlmICghKGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdICYgQ1NGX1RSWSkpCisJeworCSAgICAvKiBGaW5kIHRoZSBtYXRjaGluZyAiOnRyeSIgYW5kIHJlcG9ydCB3aGF0J3MgbWlzc2luZy4gKi8KKwkgICAgaWYgKGNzdGFjay0+Y3NfZmxhZ3NbY3N0YWNrLT5jc19pZHhdICYgQ1NGX1dISUxFKQorCQllYXAtPmVycm1zZyA9IGVfZW5kd2hpbGU7CisJICAgIGVsc2UKKwkJZWFwLT5lcnJtc2cgPSBlX2VuZGlmOworCSAgICBpZHggPSBjc3RhY2stPmNzX2lkeDsKKwkgICAgZG8KKwkJLS1pZHg7CisJICAgIHdoaWxlIChpZHggPiAwICYmICEoY3N0YWNrLT5jc19mbGFnc1tpZHhdICYgQ1NGX1RSWSkpOworCSAgICByZXdpbmRfY29uZGl0aW9uYWxzKGNzdGFjaywgaWR4LCBDU0ZfV0hJTEUsICZjc3RhY2stPmNzX3doaWxlbGV2ZWwpOworCSAgICBza2lwID0gVFJVRTsKKworCSAgICAvKgorCSAgICAgKiBJZiBhbiBleGNlcHRpb24gaXMgYmVpbmcgdGhyb3duLCBkaXNjYXJkIGl0IHRvIHByZXZlbnQgaXQgZnJvbQorCSAgICAgKiBiZWluZyByZXRocm93biBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uICBJdCB3b3VsZCBiZQorCSAgICAgKiBkaXNjYXJkZWQgYnkgdGhlIGVycm9yIG1lc3NhZ2UsIGFueXdheS4gIFJlc2V0cyBkaWRfdGhyb3cuCisJICAgICAqIFRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSBzY3JpcHQgdGVybWluYXRpb24gZHVlIHRvIHRoZSBlcnJvcgorCSAgICAgKiBzaW5jZSAidHJ5bGV2ZWwiIGlzIGRlY3JlbWVudGVkIGFmdGVyIGVtc2coKSBoYXMgYmVlbiBjYWxsZWQuCisJICAgICAqLworCSAgICBpZiAoZGlkX3Rocm93KQorCQlkaXNjYXJkX2N1cnJlbnRfZXhjZXB0aW9uKCk7CisJfQorCWVsc2UKKwl7CisJICAgIGlkeCA9IGNzdGFjay0+Y3NfaWR4OworCisJICAgIC8qCisJICAgICAqIElmIHdlIHN0b3BwZWQgd2l0aCB0aGUgZXhjZXB0aW9uIGN1cnJlbnRseSBiZWluZyB0aHJvd24gYXQgdGhpcworCSAgICAgKiB0cnkgY29uZGl0aW9uYWwgc2luY2Ugd2UgZGlkbid0IGtub3cgdGhhdCBpdCBkb2Vzbid0IGhhdmUKKwkgICAgICogYSBmaW5hbGx5IGNsYXVzZSwgd2UgbmVlZCB0byByZXRocm93IGl0IGFmdGVyIGNsb3NpbmcgdGhlIHRyeQorCSAgICAgKiBjb25kaXRpb25hbC4KKwkgICAgICovCisJICAgIGlmIChkaWRfdGhyb3cgJiYgKGNzdGFjay0+Y3NfZmxhZ3NbaWR4XSAmIENTRl9UUlVFKQorCQkgICAgJiYgIShjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfRklOQUxMWSkpCisJCXJldGhyb3cgPSBUUlVFOworCX0KKworCS8qIElmIHRoZXJlIHdhcyBubyBmaW5hbGx5IGNsYXVzZSwgc2hvdyB0aGUgdXNlciB3aGVuIGRlYnVnZ2luZyBvcgorCSAqIGEgYnJlYWtwb2ludCB3YXMgZW5jb3VudGVyZWQgdGhhdCB0aGUgZW5kIG9mIHRoZSB0cnkgY29uZGl0aW9uYWwgaGFzCisJICogYmVlbiByZWFjaGVkOiBkaXNwbGF5IHRoZSBkZWJ1ZyBwcm9tcHQgKGlmIG5vdCBhbHJlYWR5IGRvbmUpLiAgRG8KKwkgKiB0aGlzIG9uIG5vcm1hbCBjb250cm9sIGZsb3cgb3Igd2hlbiBhbiBleGNlcHRpb24gd2FzIHRocm93biwgYnV0IG5vdAorCSAqIG9uIGFuIGludGVycnVwdCBvciBlcnJvciBub3QgY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbiBvciB3aGVuCisJICogYSAiOmJyZWFrIiwgIjpjb250aW51ZSIsICI6cmV0dXJuIiwgb3IgIjpmaW5pc2giIGlzIHBlbmRpbmcuICBUaGVzZQorCSAqIGFjdGlvbnMgYXJlIGNhcnJpZWQgb3V0IGltbWVkaWF0ZWx5LgorCSAqLworCWlmICgocmV0aHJvdyB8fCAoIXNraXAKKwkJCSYmICEoY3N0YWNrLT5jc19mbGFnc1tpZHhdICYgQ1NGX0ZJTkFMTFkpCisJCQkmJiAhY3N0YWNrLT5jc19wZW5kaW5nW2lkeF0pKQorCQkmJiBkYmdfY2hlY2tfc2tpcHBlZChlYXApKQorCXsKKwkgICAgLyogSGFuZGxlIGEgIj5xdWl0IiBkZWJ1ZyBjb21tYW5kIGFzIGlmIGFuIGludGVycnVwdCBoYWQgb2NjdXJyZWQKKwkgICAgICogYmVmb3JlIHRoZSAiOmVuZHRyeSIuICBUaGF0IGlzLCB0aHJvdyBhbiBpbnRlcnJ1cHQgZXhjZXB0aW9uIGFuZAorCSAgICAgKiBzZXQgInNraXAiIGFuZCAicmV0aHJvdyIuICovCisJICAgIGlmIChnb3RfaW50KQorCSAgICB7CisJCXNraXAgPSBUUlVFOworCQkodm9pZClkb19pbnR0aHJvdyhjc3RhY2spOworCQkvKiBUaGUgZG9faW50dGhyb3coKSBjYWxsIG1heSBoYXZlIHJlc2V0IGRpZF90aHJvdyBvcgorCQkgKiBjc3RhY2stPmNzX3BlbmRpbmdbaWR4XS4qLworCQlyZXRocm93ID0gRkFMU0U7CisJCWlmIChkaWRfdGhyb3cgJiYgIShjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfRklOQUxMWSkpCisJCSAgICByZXRocm93ID0gVFJVRTsKKwkgICAgfQorCX0KKworCS8qCisJICogSWYgYSAiOnJldHVybiIgaXMgcGVuZGluZywgd2UgbmVlZCB0byByZXN1bWUgaXQgYWZ0ZXIgY2xvc2luZyB0aGUKKwkgKiB0cnkgY29uZGl0aW9uYWw7IHJlbWVtYmVyIHRoZSByZXR1cm4gdmFsdWUuICBJZiB0aGVyZSB3YXMgYSBmaW5hbGx5CisJICogY2xhdXNlIG1ha2luZyBhbiBleGNlcHRpb24gcGVuZGluZywgd2UgbmVlZCB0byByZXRocm93IGl0LiAgTWFrZSBpdAorCSAqIHRoZSBleGNlcHRpb24gY3VycmVudGx5IGJlaW5nIHRocm93bi4KKwkgKi8KKwlpZiAoIXNraXApCisJeworCSAgICBwZW5kaW5nID0gY3N0YWNrLT5jc19wZW5kaW5nW2lkeF07CisJICAgIGNzdGFjay0+Y3NfcGVuZGluZ1tpZHhdID0gQ1NUUF9OT05FOworCSAgICBpZiAocGVuZGluZyA9PSBDU1RQX1JFVFVSTikKKwkJcmV0dmFyID0gY3N0YWNrLT5jc19yZXR2YXJbaWR4XTsKKwkgICAgZWxzZSBpZiAocGVuZGluZyAmIENTVFBfVEhST1cpCisJCWN1cnJlbnRfZXhjZXB0aW9uID0gY3N0YWNrLT5jc19leGNlcHRpb25baWR4XTsKKwl9CisKKwkvKgorCSAqIERpc2NhcmQgYW55dGhpbmcgcGVuZGluZyBvbiBhbiBlcnJvciwgaW50ZXJydXB0LCBvciB0aHJvdyBpbiB0aGUKKwkgKiBmaW5hbGx5IGNsYXVzZS4gIElmIHRoZXJlIHdhcyBubyAiOmZpbmFsbHkiLCBkaXNjYXJkIGEgcGVuZGluZworCSAqICI6Y29udGludWUiLCAiOmJyZWFrIiwgIjpyZXR1cm4iLCBvciAiOmZpbmlzaCIgaWYgYW4gZXJyb3Igb3IKKwkgKiBpbnRlcnJ1cHQgb2NjdXJyZWQgYWZ0ZXJ3YXJkcywgYnV0IGJlZm9yZSB0aGUgIjplbmR0cnkiIHdhcyByZWFjaGVkLgorCSAqIElmIGFuIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IHRoZSBsYXN0IG9mIHRoZSBjYXRjaCBjbGF1c2VzIGFuZCB0aGVyZQorCSAqIHdhcyBubyBmaW5hbGx5IGNsYXVzZSwgZmluaXNoIHRoZSBleGNlcHRpb24gbm93LiAgVGhpcyBoYXBwZW5zIGFsc28KKwkgKiBhZnRlciBlcnJvcnMgZXhjZXB0IHdoZW4gdGhpcyAiOmVuZHRyeSIgaXMgbm90IHdpdGhpbiBhICI6dHJ5Ii4KKwkgKiBSZXN0b3JlICJlbXNnX3NpbGVudCIgaWYgaXQgaGFzIGJlZW4gcmVzZXQgYnkgdGhpcyB0cnkgY29uZGl0aW9uYWwuCisJICovCisJY2xlYW51cF9jb25kaXRpb25hbHMoY3N0YWNrLCBDU0ZfVFJZIHwgQ1NGX1NJTEVOVCwgVFJVRSk7CisKKwktLWNzdGFjay0+Y3NfaWR4OworCS0tY3N0YWNrLT5jc190cnlsZXZlbDsKKworCWlmICghc2tpcCkKKwl7CisJICAgIHJlcG9ydF9yZXN1bWVfcGVuZGluZyhwZW5kaW5nLAorCQkgICAgKHBlbmRpbmcgPT0gQ1NUUF9SRVRVUk4pID8gcmV0dmFyIDoKKwkJICAgIChwZW5kaW5nICYgQ1NUUF9USFJPVykgPyAodm9pZCAqKWN1cnJlbnRfZXhjZXB0aW9uIDogTlVMTCk7CisJICAgIHN3aXRjaCAocGVuZGluZykKKwkgICAgeworCQljYXNlIENTVFBfTk9ORToKKwkJICAgIGJyZWFrOworCisJCS8qIFJlYWN0aXZhdGUgYSBwZW5kaW5nICI6Y29udGludWUiLCAiOmJyZWFrIiwgIjpyZXR1cm4iLAorCQkgKiAiOmZpbmlzaCIgZnJvbSB0aGUgdHJ5IGJsb2NrIG9yIGEgY2F0Y2ggY2xhdXNlIG9mIHRoaXMgdHJ5CisJCSAqIGNvbmRpdGlvbmFsLiAgVGhpcyBpcyBza2lwcGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gYW4KKwkJICogKHVuc2tpcHBlZCkgY29uZGl0aW9uYWwgY29tbWFuZCBvciBhbiBpbnRlcnJ1cHQgYWZ0ZXJ3YXJkcworCQkgKiBvciBpZiB0aGUgZmluYWxseSBjbGF1c2UgaXMgcHJlc2VudCBhbmQgZXhlY3V0ZWQgYSBuZXcgZXJyb3IsCisJCSAqIGludGVycnVwdCwgdGhyb3csICI6Y29udGludWUiLCAiOmJyZWFrIiwgIjpyZXR1cm4iLCBvcgorCQkgKiAiOmZpbmlzaCIuICovCisJCWNhc2UgQ1NUUF9DT05USU5VRToKKwkJICAgIGV4X2NvbnRpbnVlKGVhcCk7CisJCSAgICBicmVhazsKKwkJY2FzZSBDU1RQX0JSRUFLOgorCQkgICAgZXhfYnJlYWsoZWFwKTsKKwkJICAgIGJyZWFrOworCQljYXNlIENTVFBfUkVUVVJOOgorCQkgICAgZG9fcmV0dXJuKGVhcCwgRkFMU0UsIEZBTFNFLCByZXR2YXIpOworCQkgICAgYnJlYWs7CisJCWNhc2UgQ1NUUF9GSU5JU0g6CisJCSAgICBkb19maW5pc2goZWFwLCBGQUxTRSk7CisJCSAgICBicmVhazsKKworCQkvKiBXaGVuIHRoZSBmaW5hbGx5IGNsYXVzZSB3YXMgZW50ZXJlZCBkdWUgdG8gYW4gZXJyb3IsCisJCSAqIGludGVycnVwdCBvciB0aHJvdyAoYXMgb3Bwb3NlZCB0byBhICI6Y29udGludWUiLCAiOmJyZWFrIiwKKwkJICogIjpyZXR1cm4iLCBvciAiOmZpbmlzaCIpLCByZXN0b3JlIHRoZSBwZW5kaW5nIHZhbHVlcyBvZgorCQkgKiBkaWRfZW1zZywgZ290X2ludCwgYW5kIGRpZF90aHJvdy4gIFRoaXMgaXMgc2tpcHBlZCwgaWYgdGhlcmUKKwkJICogd2FzIGEgbmV3IGVycm9yLCBpbnRlcnJ1cHQsIHRocm93LCAiOmNvbnRpbnVlIiwgIjpicmVhayIsCisJCSAqICI6cmV0dXJuIiwgb3IgIjpmaW5pc2giLiAgaW4gdGhlIGZpbmFsbHkgY2xhdXNlLiAqLworCQlkZWZhdWx0OgorCQkgICAgaWYgKHBlbmRpbmcgJiBDU1RQX0VSUk9SKQorCQkJZGlkX2Vtc2cgPSBUUlVFOworCQkgICAgaWYgKHBlbmRpbmcgJiBDU1RQX0lOVEVSUlVQVCkKKwkJCWdvdF9pbnQgPSBUUlVFOworCQkgICAgaWYgKHBlbmRpbmcgJiBDU1RQX1RIUk9XKQorCQkJcmV0aHJvdyA9IFRSVUU7CisJCSAgICBicmVhazsKKwkgICAgfQorCX0KKworCWlmIChyZXRocm93KQorCSAgICAvKiBSZXRocm93IHRoZSBjdXJyZW50IGV4Y2VwdGlvbiAod2l0aGluIHRoaXMgY3N0YWNrKS4gKi8KKwkgICAgZG9fdGhyb3coY3N0YWNrKTsKKyAgICB9Cit9CisKKy8qCisgKiBNYWtlIGNvbmRpdGlvbmFscyBpbmFjdGl2ZSBhbmQgZGlzY2FyZCB3aGF0J3MgcGVuZGluZyBpbiBmaW5hbGx5IGNsYXVzZXMKKyAqIHVudGlsIHRoZSBjb25kaXRpb25hbCB0eXBlIHNlYXJjaGVkIGZvciBvciBhIHRyeSBjb25kaXRpb25hbCBub3QgaW4gaXRzCisgKiBmaW5hbGx5IGNsYXVzZSBpcyByZWFjaGVkLiAgSWYgdGhpcyBpcyBpbiBhbiBhY3RpdmUgY2F0Y2ggY2xhdXNlLCBmaW5pc2ggdGhlCisgKiBjYXVnaHQgZXhjZXB0aW9uLiAgUmV0dXJuIHRoZSBjc3RhY2sgaW5kZXggd2hlcmUgdGhlIHNlYXJjaCBzdG9wcGVkLiAgVmFsdWVzCisgKiB1c2VkIGZvciAic2VhcmNoZWRfY29uZCIgYXJlIENTRl9XSElMRSBvciBDU0ZfVFJZIG9yIDAsIHRoZSBsYXR0ZXIgbWVhbmluZworICogdGhlIGlubmVybW9zdCB0cnkgY29uZGl0aW9uYWwgbm90IGluIGl0cyBmaW5hbGx5IGNsYXVzZS4gICJpbmNsdXNpdmUiIHRlbGxzCisgKiB3aGV0aGVyIHRoZSBjb25kaXRpb25hbCBzZWFyY2hlZCBmb3Igc2hvdWxkIGJlIG1hZGUgaW5hY3RpdmUgaXRzZWxmIChhIHRyeQorICogY29uZGl0aW9uYWwgbm90IGluIGl0cyBmaW5hbGx5IGNsYXVzZWQgcG9zc2libHkgZmluZCBiZWZvcmUgaXMgYWx3YXlzIG1hZGUKKyAqIGluYWN0aXZlKS4gIElmICJpbmNsdXNpdmUiIGlzIFRSVUUgYW5kICJzZWFyY2hlZF9jb25kIiBpcyBDU0ZfVFJZfENTRl9TSUxFTlQsCisgKiB0aGUgc2F2ZWQgZm9ybWVyIHZhbHVlIG9mICJlbXNnX3NpbGVudCIsIGlmIHJlc2V0IHdoZW4gdGhlIHRyeSBjb25kaXRpb25hbAorICogZmluYWxseSByZWFjaGVkIHdhcyBlbnRlcmVkLCBpcyByZXN0b3JlZCAodW5zZWQgYnkgZXhfZW5kdHJ5KCkpLiAgVGhpcyBpcworICogbm9ybWFsbHkgZG9uZSBvbmx5IHdoZW4gc3VjaCBhIHRyeSBjb25kaXRpb25hbCBpcyBsZWZ0LgorICovCisgICAgaW50CitjbGVhbnVwX2NvbmRpdGlvbmFscyhjc3RhY2ssIHNlYXJjaGVkX2NvbmQsIGluY2x1c2l2ZSkKKyAgICBzdHJ1Y3QgY29uZHN0YWNrICAgKmNzdGFjazsKKyAgICBpbnQJCXNlYXJjaGVkX2NvbmQ7CisgICAgaW50CQlpbmNsdXNpdmU7Cit7CisgICAgaW50CQlpZHg7CisgICAgaW50CQlzdG9wID0gRkFMU0U7CisKKyAgICBmb3IgKGlkeCA9IGNzdGFjay0+Y3NfaWR4OyBpZHggPj0gMDsgLS1pZHgpCisgICAgeworCWlmIChjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfVFJZKQorCXsKKwkgICAgLyoKKwkgICAgICogRGlzY2FyZCBhbnl0aGluZyBwZW5kaW5nIGluIGEgZmluYWxseSBjbGF1c2UgYW5kIGNvbnRpbnVlIHRoZQorCSAgICAgKiBzZWFyY2guICBUaGVyZSBtYXkgYWxzbyBiZSBhIHBlbmRpbmcgIjpjb250aW51ZSIsICI6YnJlYWsiLAorCSAgICAgKiAiOnJldHVybiIsIG9yICI6ZmluaXNoIiBiZWZvcmUgdGhlIGZpbmFsbHkgY2xhdXNlLiAgV2UgbXVzdCBub3QKKwkgICAgICogZGlzY2FyZCBpdCwgdW5sZXNzIGFuIGVycm9yIG9yIGludGVycnVwdCBvY2N1cnJlZCBhZnRlcndhcmRzLgorCSAgICAgKi8KKwkgICAgaWYgKGRpZF9lbXNnIHx8IGdvdF9pbnQgfHwKKwkJICAgIChjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfRklOQUxMWSkpCisJICAgIHsKKwkJc3dpdGNoIChjc3RhY2stPmNzX3BlbmRpbmdbaWR4XSkKKwkJeworCQkgICAgY2FzZSBDU1RQX05PTkU6CisJCQlicmVhazsKKworCQkgICAgY2FzZSBDU1RQX0NPTlRJTlVFOgorCQkgICAgY2FzZSBDU1RQX0JSRUFLOgorCQkgICAgY2FzZSBDU1RQX0ZJTklTSDoKKwkJCXJlcG9ydF9kaXNjYXJkX3BlbmRpbmcoY3N0YWNrLT5jc19wZW5kaW5nW2lkeF0sIE5VTEwpOworCQkJY3N0YWNrLT5jc19wZW5kaW5nW2lkeF0gPSBDU1RQX05PTkU7CisJCQlicmVhazsKKworCQkgICAgY2FzZSBDU1RQX1JFVFVSTjoKKwkJCXJlcG9ydF9kaXNjYXJkX3BlbmRpbmcoQ1NUUF9SRVRVUk4sCisJCQkJY3N0YWNrLT5jc19yZXR2YXJbaWR4XSk7CisJCQlkaXNjYXJkX3BlbmRpbmdfcmV0dXJuKGNzdGFjay0+Y3NfcmV0dmFyW2lkeF0pOworCQkJY3N0YWNrLT5jc19wZW5kaW5nW2lkeF0gPSBDU1RQX05PTkU7CisJCQlicmVhazsKKworCQkgICAgZGVmYXVsdDoKKwkJCWlmIChjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfRklOQUxMWSkKKwkJCXsKKwkJCSAgICBpZiAoY3N0YWNrLT5jc19wZW5kaW5nW2lkeF0gJiBDU1RQX1RIUk9XKQorCQkJICAgIHsKKwkJCQkvKiBDYW5jZWwgdGhlIHBlbmRpbmcgZXhjZXB0aW9uLiAgVGhpcyBpcyBpbiB0aGUKKwkJCQkgKiBmaW5hbGx5IGNsYXVzZSwgc28gdGhhdCB0aGUgc3RhY2sgb2YgdGhlCisJCQkJICogY2F1Z2h0IGV4Y2VwdGlvbnMgaXMgbm90IGludm9sdmVkLiAqLworCQkJCWRpc2NhcmRfZXhjZXB0aW9uKChleGNlcHRfVCAqKQorCQkJCQljc3RhY2stPmNzX2V4Y2VwdGlvbltpZHhdLAorCQkJCQlGQUxTRSk7CisJCQkgICAgfQorCQkJICAgIGVsc2UKKwkJCQlyZXBvcnRfZGlzY2FyZF9wZW5kaW5nKGNzdGFjay0+Y3NfcGVuZGluZ1tpZHhdLAorCQkJCQlOVUxMKTsKKwkJCSAgICBjc3RhY2stPmNzX3BlbmRpbmdbaWR4XSA9IENTVFBfTk9ORTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBTdG9wIGF0IGEgdHJ5IGNvbmRpdGlvbmFsIG5vdCBpbiBpdHMgZmluYWxseSBjbGF1c2UuICBJZiB0aGlzIHRyeQorCSAgICAgKiBjb25kaXRpb25hbCBpcyBpbiBhbiBhY3RpdmUgY2F0Y2ggY2xhdXNlLCBmaW5pc2ggdGhlIGNhdWdodAorCSAgICAgKiBleGNlcHRpb24uCisJICAgICAqLworCSAgICBpZiAoIShjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfRklOQUxMWSkpCisJICAgIHsKKwkJaWYgKChjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfQUNUSVZFKQorCQkJJiYgKGNzdGFjay0+Y3NfZmxhZ3NbaWR4XSAmIENTRl9DQVVHSFQpKQorCQkgICAgZmluaXNoX2V4Y2VwdGlvbigoZXhjZXB0X1QgKiljc3RhY2stPmNzX2V4Y2VwdGlvbltpZHhdKTsKKwkJLyogU3RvcCBhdCB0aGlzIHRyeSBjb25kaXRpb25hbCAtIGV4Y2VwdCB0aGUgdHJ5IGJsb2NrIG5ldmVyCisJCSAqIGdvdCBhY3RpdmUgKGJlY2F1c2Ugb2YgYW4gaW5hY3RpdmUgc3Vycm91bmRpbmcgY29uZGl0aW9uYWwKKwkJICogb3Igd2hlbiB0aGUgIjp0cnkiIGFwcGVhcmVkIGFmdGVyIGFuIGVycm9yIG9yIGludGVycnVwdCBvcgorCQkgKiB0aHJvdykuICovCisJCWlmIChjc3RhY2stPmNzX2ZsYWdzW2lkeF0gJiBDU0ZfVFJVRSkKKwkJeworCQkgICAgaWYgKHNlYXJjaGVkX2NvbmQgPT0gMCAmJiAhaW5jbHVzaXZlKQorCQkJYnJlYWs7CisJCSAgICBzdG9wID0gVFJVRTsKKwkJfQorCSAgICB9CisJfQorCisJLyogU3RvcCBvbiB0aGUgc2VhcmNoZWQgY29uZGl0aW9uYWwgdHlwZSAoZXZlbiB3aGVuIHRoZSBzdXJyb3VuZGluZworCSAqIGNvbmRpdGlvbmFsIGlzIG5vdCBhY3RpdmUgb3Igc29tZXRoaW5nIGhhcyBiZWVuIG1hZGUgcGVuZGluZykuCisJICogSWYgImluY2x1c2l2ZSIgaXMgVFJVRSBhbmQgInNlYXJjaGVkX2NvbmQiIGlzIENTRl9UUll8Q1NGX1NJTEVOVCwKKwkgKiBjaGVjayBmaXJzdCB3aGV0aGVyICJlbXNnX3NpbGVudCIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJaWYgKGNzdGFjay0+Y3NfZmxhZ3NbaWR4XSAmIHNlYXJjaGVkX2NvbmQpCisJeworCSAgICBpZiAoIWluY2x1c2l2ZSkKKwkJYnJlYWs7CisJICAgIHN0b3AgPSBUUlVFOworCX0KKwljc3RhY2stPmNzX2ZsYWdzW2lkeF0gJj0gfkNTRl9BQ1RJVkU7CisJaWYgKHN0b3AgJiYgc2VhcmNoZWRfY29uZCAhPSAoQ1NGX1RSWSB8IENTRl9TSUxFTlQpKQorCSAgICBicmVhazsKKworCS8qCisJICogV2hlbiBsZWF2aW5nIGEgdHJ5IGNvbmRpdGluYWwgdGhhdCByZXNldCAiZW1zZ19zaWxlbnQiIG9uIGl0cyBlbnRyeQorCSAqIGFmdGVyIHNhdmluZyB0aGUgb3JpZ2luYWwgdmFsdWUsIHJlc3RvcmUgdGhhdCB2YWx1ZSBoZXJlIGFuZCBmcmVlIHRoZQorCSAqIG1lbW9yeSB1c2VkIHRvIHN0b3JlIGl0LgorCSAqLworCWlmICgoY3N0YWNrLT5jc19mbGFnc1tpZHhdICYgQ1NGX1RSWSkKKwkgICAgJiYgKGNzdGFjay0+Y3NfZmxhZ3NbaWR4XSAmIENTRl9TSUxFTlQpKQorCXsKKwkgICAgZXNsaXN0X1QJKmVsZW07CisKKwkgICAgZWxlbSA9IGNzdGFjay0+Y3NfZW1zZ19zaWxlbnRfbGlzdDsKKwkgICAgY3N0YWNrLT5jc19lbXNnX3NpbGVudF9saXN0ID0gZWxlbS0+bmV4dDsKKwkgICAgZW1zZ19zaWxlbnQgPSBlbGVtLT5zYXZlZF9lbXNnX3NpbGVudDsKKwkgICAgdmltX2ZyZWUoZWxlbSk7CisJICAgIGNzdGFjay0+Y3NfZmxhZ3NbaWR4XSAmPSB+Q1NGX1NJTEVOVDsKKwl9CisJaWYgKHN0b3ApCisJICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gaWR4OworfQorCisvKgorICogUmV3aW5kIGNvbmRpdGlvbmFscyB1bnRpbCBpbmRleCAiaWR4IiBpcyByZWFjaGVkLiAgImNvbmRfdHlwZSIgYW5kCisgKiAiY29uZF9sZXZlbCIgc3BlY2lmeSBhIGNvbmRpdGlvbmFsIHR5cGUgYW5kIHRoZSBhZGRyZXNzIG9mIGEgbGV2ZWwgdmFyaWFibGUKKyAqIHdoaWNoIGlzIHRvIGJlIGRlY3JlbWVudGVkIHdpdGggZWFjaCBza2lwcGVkIGNvbmRpdGlvbmFsIG9mIHRoZSBzcGVjaWZpZWQKKyAqIHR5cGUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcmV3aW5kX2NvbmRpdGlvbmFscyhjc3RhY2ssIGlkeCwgY29uZF90eXBlLCBjb25kX2xldmVsKQorICAgIHN0cnVjdCBjb25kc3RhY2sgICAqY3N0YWNrOworICAgIGludAkJaWR4OworICAgIGludAkJY29uZF90eXBlOworICAgIGludAkJKmNvbmRfbGV2ZWw7Cit7CisgICAgd2hpbGUgKGNzdGFjay0+Y3NfaWR4ID4gaWR4KQorICAgIHsKKwlpZiAoY3N0YWNrLT5jc19mbGFnc1tjc3RhY2stPmNzX2lkeF0gJiBjb25kX3R5cGUpCisJICAgIC0tKmNvbmRfbGV2ZWw7CisJLS1jc3RhY2stPmNzX2lkeDsKKyAgICB9Cit9CisKKy8qCisgKiAiOmVuZGZ1bmN0aW9uIiB3aGVuIG5vdCBhZnRlciBhICI6ZnVuY3Rpb24iCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK2V4X2VuZGZ1bmN0aW9uKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgRU1TRyhfKCJFMTkzOiA6ZW5kZnVuY3Rpb24gbm90IGluc2lkZSBhIGZ1bmN0aW9uIikpOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgdGhlIHN0cmluZyAicCIgbG9va3MgbGlrZSBhICI6d2hpbGUiIGNvbW1hbmQuCisgKi8KKyAgICBpbnQKK2hhc193aGlsZV9jbWQocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgcCA9IHNraXB3aGl0ZShwKTsKKyAgICB3aGlsZSAoKnAgPT0gJzonKQorCXAgPSBza2lwd2hpdGUocCArIDEpOworICAgIGlmIChwWzBdID09ICd3JyAmJiBwWzFdID09ICdoJykKKwlyZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNlbmRpZiAvKiBGRUFUX0VWQUwgKi8KZGlmZiAtLWdpdCBhL3NyYy9leF9nZXRsbi5jIGIvc3JjL2V4X2dldGxuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyNDI4MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9leF9nZXRsbi5jCkBAIC0wLDAgKzEsNTM3MSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogZXhfZ2V0bG4uYzogRnVuY3Rpb25zIGZvciBlbnRlcmluZyBhbmQgZWRpdGluZyBhbiBFeCBjb21tYW5kIGxpbmUuCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisvKgorICogVmFyaWFibGVzIHNoYXJlZCBiZXR3ZWVuIGdldGNtZGxpbmUoKSwgcmVkcmF3Y21kbGluZSgpIGFuZCBvdGhlcnMuCisgKiBUaGVzZSBuZWVkIHRvIGJlIHNhdmVkIHdoZW4gdXNpbmcgQ1RSTC1SIHwsIHRoYXQncyB3aHkgdGhleSBhcmUgaW4gYQorICogc3RydWN0dXJlLgorICovCitzdHJ1Y3QgY21kbGluZV9pbmZvCit7CisgICAgY2hhcl91CSpjbWRidWZmOwkvKiBwb2ludGVyIHRvIGNvbW1hbmQgbGluZSBidWZmZXIgKi8KKyAgICBpbnQJCWNtZGJ1ZmZsZW47CS8qIGxlbmd0aCBvZiBjbWRidWZmICovCisgICAgaW50CQljbWRsZW47CQkvKiBudW1iZXIgb2YgY2hhcnMgaW4gY29tbWFuZCBsaW5lICovCisgICAgaW50CQljbWRwb3M7CQkvKiBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiAqLworICAgIGludAkJY21kc3BvczsJLyogY3Vyc29yIGNvbHVtbiBvbiBzY3JlZW4gKi8KKyAgICBpbnQJCWNtZGZpcnN0YzsJLyogJzonLCAnLycsICc/JywgJz0nIG9yIE5VTCAqLworICAgIGludAkJY21kaW5kZW50OwkvKiBudW1iZXIgb2Ygc3BhY2VzIGJlZm9yZSBjbWRsaW5lICovCisgICAgY2hhcl91CSpjbWRwcm9tcHQ7CS8qIG1lc3NhZ2UgaW4gZnJvbnQgb2YgY21kbGluZSAqLworICAgIGludAkJY21kYXR0cjsJLyogYXR0cmlidXRlcyBmb3IgcHJvbXB0ICovCisgICAgaW50CQlvdmVyc3RyaWtlOwkvKiBUeXBpbmcgbW9kZSBvbiB0aGUgY29tbWFuZCBsaW5lLiAgU2hhcmVkIGJ5CisJCQkJICAgZ2V0Y21kbGluZSgpIGFuZCBwdXRfb25fY21kbGluZSgpLiAqLworfTsKKworc3RhdGljIHN0cnVjdCBjbWRsaW5lX2luZm8gY2NsaW5lOwkvKiBjdXJyZW50IGNtZGxpbmVfaW5mbyAqLworCitzdGF0aWMgaW50CWNtZF9zaG93dGFpbDsJCS8qIE9ubHkgc2hvdyBwYXRoIHRhaWwgaW4gbGlzdHMgPyAqLworCisjaWZkZWYgRkVBVF9FVkFMCitzdGF0aWMgaW50CW5ld19jbWRwb3M7CS8qIHBvc2l0aW9uIHNldCBieSBzZXRfY21kbGluZV9wb3MoKSAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0NNREhJU1QKK3R5cGVkZWYgc3RydWN0IGhpc3RfZW50cnkKK3sKKyAgICBpbnQJCWhpc251bTsJCS8qIGlkZW50aWZ5aW5nIG51bWJlciAqLworICAgIGNoYXJfdQkqaGlzc3RyOwkvKiBhY3R1YWwgZW50cnksIHNlcGFyYXRvciBjaGFyIGFmdGVyIHRoZSBOVUwgKi8KK30gaGlzdGVudHJ5X1Q7CisKK3N0YXRpYyBoaXN0ZW50cnlfVCAqKGhpc3RvcnlbSElTVF9DT1VOVF0pID0ge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9Oworc3RhdGljIGludAloaXNpZHhbSElTVF9DT1VOVF0gPSB7LTEsIC0xLCAtMSwgLTEsIC0xfTsgIC8qIGxhc3R1c2VkIGVudHJ5ICovCitzdGF0aWMgaW50CWhpc251bVtISVNUX0NPVU5UXSA9IHswLCAwLCAwLCAwLCAwfTsKKwkJICAgIC8qIGlkZW50aWZ5aW5nICh1bmlxdWUpIG51bWJlciBvZiBuZXdlc3QgaGlzdG9yeSBlbnRyeSAqLworc3RhdGljIGludAloaXNsZW4gPSAwOwkJLyogYWN0dWFsIGxlbmd0aCBvZiBoaXN0b3J5IHRhYmxlcyAqLworCitzdGF0aWMgaW50CWhpc3RfY2hhcjJ0eXBlIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyB2b2lkCWluaXRfaGlzdG9yeSBfX0FSR1MoKHZvaWQpKTsKKworc3RhdGljIGludAlpbl9oaXN0b3J5IF9fQVJHUygoaW50LCBjaGFyX3UgKiwgaW50KSk7CisjIGlmZGVmIEZFQVRfRVZBTAorc3RhdGljIGludAljYWxjX2hpc3RfaWR4IF9fQVJHUygoaW50IGhpc3R5cGUsIGludCBudW0pKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKK3N0YXRpYyBpbnQJY21kX2hrbWFwID0gMDsJLyogSGVicmV3IG1hcHBpbmcgZHVyaW5nIGNvbW1hbmQgbGluZSAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0ZLTUFQCitzdGF0aWMgaW50CWNtZF9ma21hcCA9IDA7CS8qIEZhcnNpIG1hcHBpbmcgZHVyaW5nIGNvbW1hbmQgbGluZSAqLworI2VuZGlmCisKK3N0YXRpYyBpbnQJY21kbGluZV9jaGFyc2l6ZSBfX0FSR1MoKGludCBpZHgpKTsKK3N0YXRpYyB2b2lkCXNldF9jbWRzcG9zIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQJc2V0X2NtZHNwb3NfY3Vyc29yIF9fQVJHUygodm9pZCkpOworI2lmZGVmIEZFQVRfTUJZVEUKK3N0YXRpYyB2b2lkCWNvcnJlY3RfY21kc3BvcyBfX0FSR1MoKGludCBpZHgsIGludCBjZWxscykpOworI2VuZGlmCitzdGF0aWMgdm9pZAlhbGxvY19jbWRidWZmIF9fQVJHUygoaW50IGxlbikpOworc3RhdGljIGludAlyZWFsbG9jX2NtZGJ1ZmYgX19BUkdTKChpbnQgbGVuKSk7CitzdGF0aWMgdm9pZAlkcmF3X2NtZGxpbmUgX19BUkdTKChpbnQgc3RhcnQsIGludCBsZW4pKTsKKyNpZiBkZWZpbmVkKEZFQVRfWElNKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0dUSykKK3N0YXRpYyB2b2lkCXJlZHJhd2NtZF9wcmVlZGl0IF9fQVJHUygodm9pZCkpOworI2VuZGlmCisjaWZkZWYgRkVBVF9XSUxETUVOVQorc3RhdGljIHZvaWQJY21kbGluZV9kZWwgX19BUkdTKChpbnQgZnJvbSkpOworI2VuZGlmCitzdGF0aWMgdm9pZAlyZWRyYXdjbWRwcm9tcHQgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZAljdXJzb3JjbWQgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50CWNjaGVja19hYmJyIF9fQVJHUygoaW50KSk7CitzdGF0aWMgaW50CW5leHR3aWxkIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBpbnQgdHlwZSwgaW50IG9wdGlvbnMpKTsKK3N0YXRpYyBpbnQJc2hvd21hdGNoZXMgX19BUkdTKChleHBhbmRfVCAqeHAsIGludCB3aWxkbWVudSkpOworc3RhdGljIHZvaWQJc2V0X2V4cGFuZF9jb250ZXh0IF9fQVJHUygoZXhwYW5kX1QgKnhwKSk7CitzdGF0aWMgaW50CUV4cGFuZEZyb21Db250ZXh0IF9fQVJHUygoZXhwYW5kX1QgKnhwLCBjaGFyX3UgKiwgaW50ICosIGNoYXJfdSAqKiosIGludCkpOworc3RhdGljIGludAlleHBhbmRfc2hvd3RhaWwgX19BUkdTKChleHBhbmRfVCAqeHApKTsKKyNpZmRlZiBGRUFUX0NNRExfQ09NUEwKK3N0YXRpYyBpbnQJRXhwYW5kUlREaXIgX19BUkdTKChjaGFyX3UgKnBhdCwgaW50ICpudW1fZmlsZSwgY2hhcl91ICoqKmZpbGUsIGNoYXIgKmRpcm5hbWUpKTsKKyMgaWYgZGVmaW5lZChGRUFUX1VTUl9DTURTKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKK3N0YXRpYyBpbnQJRXhwYW5kVXNlckRlZmluZWQgX19BUkdTKChleHBhbmRfVCAqeHAsIHJlZ21hdGNoX1QgKnJlZ21hdGNoLCBpbnQgKm51bV9maWxlLCBjaGFyX3UgKioqZmlsZSkpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0NNRFdJTgorc3RhdGljIGludAlleF93aW5kb3cgX19BUkdTKCh2b2lkKSk7CisjZW5kaWYKKworLyoKKyAqIGdldGNtZGxpbmUoKSAtIGFjY2VwdCBhIGNvbW1hbmQgbGluZSBzdGFydGluZyB3aXRoIGZpcnN0Yy4KKyAqCisgKiBmaXJzdGMgPT0gJzonCSAgICBnZXQgIjoiIGNvbW1hbmQgbGluZS4KKyAqIGZpcnN0YyA9PSAnLycgb3IgJz8nCSAgICBnZXQgc2VhcmNoIHBhdHRlcm4KKyAqIGZpcnN0YyA9PSAnPScJICAgIGdldCBleHByZXNzaW9uCisgKiBmaXJzdGMgPT0gJ0AnCSAgICBnZXQgdGV4dCBmb3IgaW5wdXQoKSBmdW5jdGlvbgorICogZmlyc3RjID09ICc+JwkgICAgZ2V0IHRleHQgZm9yIGRlYnVnIG1vZGUKKyAqIGZpcnN0YyA9PSBOVUwJICAgIGdldCB0ZXh0IGZvciA6aW5zZXJ0IGNvbW1hbmQKKyAqIGZpcnN0YyA9PSAtMQkJICAgIGxpa2UgTlVMLCBhbmQgYnJlYWsgb24gQ1RSTC1DCisgKgorICogVGhlIGxpbmUgaXMgY29sbGVjdGVkIGluIGNjbGluZS5jbWRidWZmLCB3aGljaCBpcyByZWFsbG9jYXRlZCB0byBmaXQgdGhlCisgKiBjb21tYW5kIGxpbmUuCisgKgorICogQ2FyZWZ1bDogZ2V0Y21kbGluZSgpIGNhbiBiZSBjYWxsZWQgcmVjdXJzaXZlbHkhCisgKgorICogUmV0dXJuIHBvaW50ZXIgdG8gYWxsb2NhdGVkIHN0cmluZyBpZiB0aGVyZSBpcyBhIGNvbW1hbmRsaW5lLCBOVUxMCisgKiBvdGhlcndpc2UuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIGNoYXJfdSAqCitnZXRjbWRsaW5lKGZpcnN0YywgY291bnQsIGluZGVudCkKKyAgICBpbnQJCWZpcnN0YzsKKyAgICBsb25nCWNvdW50OwkJLyogb25seSB1c2VkIGZvciBpbmNyZW1lbnRhbCBzZWFyY2ggKi8KKyAgICBpbnQJCWluZGVudDsJCS8qIGluZGVudCBmb3IgaW5zaWRlIGNvbmRpdGlvbmFscyAqLworeworICAgIGludAkJYzsKKyAgICBpbnQJCWk7CisgICAgaW50CQlqOworICAgIGludAkJZ290ZXNjID0gRkFMU0U7CQkvKiBUUlVFIHdoZW4gPEVTQz4ganVzdCB0eXBlZCAqLworICAgIGludAkJZG9fYWJicjsJCS8qIHdoZW4gVFJVRSBjaGVjayBmb3IgYWJici4gKi8KKyNpZmRlZiBGRUFUX0NNREhJU1QKKyAgICBjaGFyX3UJKmxvb2tmb3IgPSBOVUxMOwkvKiBzdHJpbmcgdG8gbWF0Y2ggKi8KKyAgICBpbnQJCWhpc2NudDsJCQkvKiBjdXJyZW50IGhpc3RvcnkgbGluZSBpbiB1c2UgKi8KKyAgICBpbnQJCWhpc3R5cGU7CQkvKiBoaXN0b3J5IHR5cGUgdG8gYmUgdXNlZCAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKyAgICBwb3NfVAlvbGRfY3Vyc29yOworICAgIGNvbG5yX1QJb2xkX2N1cnN3YW50OworICAgIGNvbG5yX1QJb2xkX2xlZnRjb2w7CisgICAgbGluZW5yX1QJb2xkX3RvcGxpbmU7CisjIGlmZGVmIEZFQVRfRElGRgorICAgIGludAkJb2xkX3RvcGZpbGw7CisjIGVuZGlmCisgICAgbGluZW5yX1QJb2xkX2JvdGxpbmU7CisgICAgaW50CQlkaWRfaW5jc2VhcmNoID0gRkFMU0U7CisgICAgaW50CQlpbmNzZWFyY2hfcG9zdHBvbmVkID0gRkFMU0U7CisjZW5kaWYKKyAgICBpbnQJCWRpZF93aWxkX2xpc3QgPSBGQUxTRTsJLyogZGlkIHdpbGRfbGlzdCgpIHJlY2VudGx5ICovCisgICAgaW50CQl3aW1faW5kZXggPSAwOwkJLyogaW5kZXggaW4gd2ltX2ZsYWdzW10gKi8KKyAgICBpbnQJCXJlczsKKyAgICBpbnQJCXNhdmVfbXNnX3Njcm9sbCA9IG1zZ19zY3JvbGw7CisgICAgaW50CQlzYXZlX1N0YXRlID0gU3RhdGU7CS8qIHJlbWVtYmVyIFN0YXRlIHdoZW4gY2FsbGVkICovCisgICAgaW50CQlzb21lX2tleV90eXBlZCA9IEZBTFNFOwkvKiBvbmUgb2YgdGhlIGtleXMgd2FzIHR5cGVkICovCisjaWZkZWYgRkVBVF9NT1VTRQorICAgIC8qIG1vdXNlIGRyYWcgYW5kIHJlbGVhc2UgZXZlbnRzIGFyZSBpZ25vcmVkLCB1bmxlc3MgdGhleSBhcmUKKyAgICAgKiBwcmVjZWRlZCB3aXRoIGEgbW91c2UgZG93biBldmVudCAqLworICAgIGludAkJaWdub3JlX2RyYWdfcmVsZWFzZSA9IFRSVUU7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBpbnQJCWJyZWFrX2N0cmxfYyA9IEZBTFNFOworI2VuZGlmCisgICAgZXhwYW5kX1QJeHBjOworICAgIGxvbmcJKmJfaW1fcHRyID0gTlVMTDsKKworI2lmZGVmIEZFQVRfU05JRkYKKyAgICB3YW50X3NuaWZmX3JlcXVlc3QgPSAwOworI2VuZGlmCisjaWZkZWYgRkVBVF9FVkFMCisgICAgaWYgKGZpcnN0YyA9PSAtMSkKKyAgICB7CisJZmlyc3RjID0gTlVMOworCWJyZWFrX2N0cmxfYyA9IFRSVUU7CisgICAgfQorI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKyAgICAvKiBzdGFydCB3aXRob3V0IEhlYnJldyBtYXBwaW5nIGZvciBhIGNvbW1hbmQgbGluZSAqLworICAgIGlmIChmaXJzdGMgPT0gJzonIHx8IGZpcnN0YyA9PSAnPScgfHwgZmlyc3RjID09ICc+JykKKwljbWRfaGttYXAgPSAwOworI2VuZGlmCisKKyAgICBjY2xpbmUub3ZlcnN0cmlrZSA9IEZBTFNFOwkJICAgIC8qIGFsd2F5cyBzdGFydCBpbiBpbnNlcnQgbW9kZSAqLworI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisgICAgb2xkX2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7CSAgICAvKiBuZWVkcyB0byBiZSByZXN0b3JlZCBsYXRlciAqLworICAgIG9sZF9jdXJzd2FudCA9IGN1cndpbi0+d19jdXJzd2FudDsKKyAgICBvbGRfbGVmdGNvbCA9IGN1cndpbi0+d19sZWZ0Y29sOworICAgIG9sZF90b3BsaW5lID0gY3Vyd2luLT53X3RvcGxpbmU7CisjIGlmZGVmIEZFQVRfRElGRgorICAgIG9sZF90b3BmaWxsID0gY3Vyd2luLT53X3RvcGZpbGw7CisjIGVuZGlmCisgICAgb2xkX2JvdGxpbmUgPSBjdXJ3aW4tPndfYm90bGluZTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBzZXQgc29tZSB2YXJpYWJsZXMgZm9yIHJlZHJhd2NtZCgpCisgICAgICovCisgICAgY2NsaW5lLmNtZGZpcnN0YyA9IChmaXJzdGMgPT0gJ0AnID8gMCA6IGZpcnN0Yyk7CisgICAgY2NsaW5lLmNtZGluZGVudCA9IGluZGVudDsKKyAgICBhbGxvY19jbWRidWZmKGV4bW9kZV9hY3RpdmUgPyAyNTAgOiAwKTsgLyogYWxsb2MgaW5pdGlhbCBjY2xpbmUuY21kYnVmZiAqLworICAgIGlmIChjY2xpbmUuY21kYnVmZiA9PSBOVUxMKQorCXJldHVybiBOVUxMOwkJCSAgICAvKiBvdXQgb2YgbWVtb3J5ICovCisgICAgY2NsaW5lLmNtZGxlbiA9IGNjbGluZS5jbWRwb3MgPSAwOworICAgIGNjbGluZS5jbWRidWZmWzBdID0gTlVMOworCisgICAgRXhwYW5kSW5pdCgmeHBjKTsKKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgaWYgKGN1cndpbi0+d19wX3JsICYmICpjdXJ3aW4tPndfcF9ybGMgPT0gJ3MnCisJCQkJCSAgJiYgKGZpcnN0YyA9PSAnLycgfHwgZmlyc3RjID09ICc/JykpCisJY21kbXNnX3JsID0gVFJVRTsKKyAgICBlbHNlCisJY21kbXNnX3JsID0gRkFMU0U7CisjZW5kaWYKKworICAgIHJlZGlyX29mZiA9IFRSVUU7CQkvKiBkb24ndCByZWRpcmVjdCB0aGUgdHlwZWQgY29tbWFuZCAqLworICAgIGlmICghY21kX3NpbGVudCkKKyAgICB7CisJaSA9IG1zZ19zY3JvbGxlZDsKKwltc2dfc2Nyb2xsZWQgPSAwOwkJLyogYXZvaWQgd2FpdF9yZXR1cm4gbWVzc2FnZSAqLworCWdvdG9jbWRsaW5lKFRSVUUpOworCW1zZ19zY3JvbGxlZCArPSBpOworCXJlZHJhd2NtZHByb21wdCgpOwkJLyogZHJhdyBwcm9tcHQgb3IgaW5kZW50ICovCisJc2V0X2NtZHNwb3MoKTsKKyAgICB9CisgICAgeHBjLnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKyAgICB4cGMueHBfYmFja3NsYXNoID0gWFBfQlNfTk9ORTsKKworICAgIC8qCisgICAgICogQXZvaWQgc2Nyb2xsaW5nIHdoZW4gY2FsbGVkIGJ5IGEgcmVjdXJzaXZlIGRvX2NtZGxpbmUoKSwgZS5nLiB3aGVuCisgICAgICogZG9pbmcgIjpAMCIgd2hlbiByZWdpc3RlciAwIGRvZXNuJ3QgY29udGFpbiBhIENSLgorICAgICAqLworICAgIG1zZ19zY3JvbGwgPSBGQUxTRTsKKworICAgIFN0YXRlID0gQ01ETElORTsKKworICAgIGlmIChmaXJzdGMgPT0gJy8nIHx8IGZpcnN0YyA9PSAnPycgfHwgZmlyc3RjID09ICdAJykKKyAgICB7CisJLyogVXNlICI6bG1hcCIgbWFwcGluZ3MgZm9yIHNlYXJjaCBwYXR0ZXJuIGFuZCBpbnB1dCgpLiAqLworCWlmIChjdXJidWYtPmJfcF9pbXNlYXJjaCA9PSBCX0lNT0RFX1VTRV9JTlNFUlQpCisJICAgIGJfaW1fcHRyID0gJmN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0OworCWVsc2UKKwkgICAgYl9pbV9wdHIgPSAmY3VyYnVmLT5iX3BfaW1zZWFyY2g7CisJaWYgKCpiX2ltX3B0ciA9PSBCX0lNT0RFX0xNQVApCisJICAgIFN0YXRlIHw9IExBTkdNQVA7CisjaWZkZWYgVVNFX0lNX0NPTlRST0wKKwlpbV9zZXRfYWN0aXZlKCpiX2ltX3B0ciA9PSBCX0lNT0RFX0lNKTsKKyNlbmRpZgorICAgIH0KKyNpZmRlZiBVU0VfSU1fQ09OVFJPTAorICAgIGVsc2UgaWYgKHBfaW1jbWRsaW5lKQorCWltX3NldF9hY3RpdmUoVFJVRSk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTU9VU0UKKyAgICBzZXRtb3VzZSgpOworI2VuZGlmCisjaWZkZWYgQ1VSU09SX1NIQVBFCisgICAgdWlfY3Vyc29yX3NoYXBlKCk7CQkvKiBtYXkgc2hvdyBkaWZmZXJlbnQgY3Vyc29yIHNoYXBlICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfQ01ESElTVAorICAgIGluaXRfaGlzdG9yeSgpOworICAgIGhpc2NudCA9IGhpc2xlbjsJCS8qIHNldCBoaXNjbnQgdG8gaW1wb3NzaWJsZSBoaXN0b3J5IHZhbHVlICovCisgICAgaGlzdHlwZSA9IGhpc3RfY2hhcjJ0eXBlKGZpcnN0Yyk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfRElHUkFQSFMKKyAgICBkb19kaWdyYXBoKC0xKTsJCS8qIGluaXQgZGlncmFwaCB0eXBhaGVhZCAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIENvbGxlY3QgdGhlIGNvbW1hbmQgc3RyaW5nLCBoYW5kbGluZyBlZGl0aW5nIGtleXMuCisgICAgICovCisgICAgZm9yICg7OykKKyAgICB7CisjaWZkZWYgVVNFX09OX0ZMWV9TQ1JPTEwKKwlkb250X3Njcm9sbCA9IEZBTFNFOwkvKiBhbGxvdyBzY3JvbGxpbmcgaGVyZSAqLworI2VuZGlmCisJcXVpdF9tb3JlID0gRkFMU0U7CS8qIHJlc2V0IGFmdGVyIENUUkwtRCB3aGljaCBoYWQgYSBtb3JlLXByb21wdCAqLworCisJY3Vyc29yY21kKCk7CQkvKiBzZXQgdGhlIGN1cnNvciBvbiB0aGUgcmlnaHQgc3BvdCAqLworCWMgPSBzYWZlX3ZnZXRjKCk7CisJaWYgKEtleVR5cGVkKQorCXsKKwkgICAgc29tZV9rZXlfdHlwZWQgPSBUUlVFOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJICAgIGlmIChjbWRfaGttYXApCisJCWMgPSBoa21hcChjKTsKKyMgaWZkZWYgRkVBVF9GS01BUAorCSAgICBpZiAoY21kX2ZrbWFwKQorCQljID0gY21kbF9ma21hcChjKTsKKyMgZW5kaWYKKwkgICAgaWYgKGNtZG1zZ19ybCAmJiAhS2V5U3R1ZmZlZCkKKwkgICAgeworCQkvKiBJbnZlcnQgaG9yaXpvbnRhbCBtb3ZlbWVudHMgYW5kIG9wZXJhdGlvbnMuICBPbmx5IHdoZW4KKwkJICogdHlwZWQgYnkgdGhlIHVzZXIgZGlyZWN0bHksIG5vdCB3aGVuIHRoZSByZXN1bHQgb2YgYQorCQkgKiBtYXBwaW5nLiAqLworCQlzd2l0Y2ggKGMpCisJCXsKKwkJICAgIGNhc2UgS19SSUdIVDogICBjID0gS19MRUZUOyBicmVhazsKKwkJICAgIGNhc2UgS19TX1JJR0hUOiBjID0gS19TX0xFRlQ7IGJyZWFrOworCQkgICAgY2FzZSBLX0NfUklHSFQ6IGMgPSBLX0NfTEVGVDsgYnJlYWs7CisJCSAgICBjYXNlIEtfTEVGVDogICAgYyA9IEtfUklHSFQ7IGJyZWFrOworCQkgICAgY2FzZSBLX1NfTEVGVDogIGMgPSBLX1NfUklHSFQ7IGJyZWFrOworCQkgICAgY2FzZSBLX0NfTEVGVDogIGMgPSBLX0NfUklHSFQ7IGJyZWFrOworCQl9CisJICAgIH0KKyNlbmRpZgorCX0KKworCS8qCisJICogSWdub3JlIGdvdF9pbnQgd2hlbiBDVFJMLUMgd2FzIHR5cGVkIGhlcmUuCisJICogRG9uJ3QgaWdub3JlIGl0IGluIDpnbG9iYWwsIHdlIHJlYWxseSBuZWVkIHRvIGJyZWFrIHRoZW4sIGUuZy4sIGZvcgorCSAqICI6Zy9wYXQvbm9ybWFsIC9wYXQiICh3aXRob3V0IHRoZSA8Q1I+KS4KKwkgKiBEb24ndCBpZ25vcmUgaXQgZm9yIHRoZSBpbnB1dCgpIGZ1bmN0aW9uLgorCSAqLworCWlmICgoYyA9PSBDdHJsX0MKKyNpZmRlZiBVTklYCisJCXx8IGMgPT0gaW50cl9jaGFyCisjZW5kaWYKKwkJCQkpCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoRkVBVF9DUllQVCkKKwkJJiYgZmlyc3RjICE9ICdAJworI2VuZGlmCisjaWZkZWYgRkVBVF9FVkFMCisJCSYmICFicmVha19jdHJsX2MKKyNlbmRpZgorCQkmJiAhZ2xvYmFsX2J1c3kpCisJICAgIGdvdF9pbnQgPSBGQUxTRTsKKworI2lmZGVmIEZFQVRfQ01ESElTVAorCS8qIGZyZWUgb2xkIGNvbW1hbmQgbGluZSB3aGVuIGZpbmlzaGVkIG1vdmluZyBhcm91bmQgaW4gdGhlIGhpc3RvcnkKKwkgKiBsaXN0ICovCisJaWYgKGxvb2tmb3IgIT0gTlVMTAorCQkmJiBjICE9IEtfU19ET1dOICYmIGMgIT0gS19TX1VQICYmIGMgIT0gS19ET1dOICYmIGMgIT0gS19VUAorCQkmJiBjICE9IEtfUEFHRURPV04gJiYgYyAhPSBLX1BBR0VVUAorCQkmJiBjICE9IEtfS1BBR0VET1dOICYmIGMgIT0gS19LUEFHRVVQCisJCSYmIGMgIT0gS19MRUZUICYmIGMgIT0gS19SSUdIVAorCQkmJiAoeHBjLnhwX251bWZpbGVzID4gMCB8fCAoYyAhPSBDdHJsX1AgJiYgYyAhPSBDdHJsX04pKSkKKwl7CisJICAgIHZpbV9mcmVlKGxvb2tmb3IpOworCSAgICBsb29rZm9yID0gTlVMTDsKKwl9CisjZW5kaWYKKworCS8qCisJICogPFMtVGFiPiB3b3JrcyBsaWtlIENUUkwtUCAodW5sZXNzICd3YycgaXMgPFMtVGFiPikuCisJICovCisJaWYgKGMgIT0gcF93YyAmJiBjID09IEtfU19UQUIgJiYgeHBjLnhwX251bWZpbGVzICE9IC0xKQorCSAgICBjID0gQ3RybF9QOworCisjaWZkZWYgRkVBVF9XSUxETUVOVQorCS8qIFNwZWNpYWwgdHJhbnNsYXRpb25zIGZvciAnd2lsZG1lbnUnICovCisJaWYgKGRpZF93aWxkX2xpc3QgJiYgcF93bW51KQorCXsKKwkgICAgaWYgKGMgPT0gS19MRUZUKQorCQljID0gQ3RybF9QOworCSAgICBlbHNlIGlmIChjID09IEtfUklHSFQpCisJCWMgPSBDdHJsX047CisJfQorCS8qIEhpdHRpbmcgQ1IgYWZ0ZXIgImVtZW51IE5hbWUuIjogY29tcGxldGUgc3VibWVudSAqLworCWlmICh4cGMueHBfY29udGV4dCA9PSBFWFBBTkRfTUVOVU5BTUVTICYmIHBfd21udQorCQkmJiBjY2xpbmUuY21kcG9zID4gMQorCQkmJiBjY2xpbmUuY21kYnVmZltjY2xpbmUuY21kcG9zIC0gMV0gPT0gJy4nCisJCSYmIGNjbGluZS5jbWRidWZmW2NjbGluZS5jbWRwb3MgLSAyXSAhPSAnXFwnCisJCSYmIChjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gS19LRU5URVIpKQorCSAgICBjID0gS19ET1dOOworI2VuZGlmCisKKwkvKiBmcmVlIGV4cGFuZGVkIG5hbWVzIHdoZW4gZmluaXNoZWQgd2Fsa2luZyB0aHJvdWdoIG1hdGNoZXMgKi8KKwlpZiAoeHBjLnhwX251bWZpbGVzICE9IC0xCisJCSYmICEoYyA9PSBwX3djICYmIEtleVR5cGVkKSAmJiBjICE9IHBfd2NtCisJCSYmIGMgIT0gQ3RybF9OICYmIGMgIT0gQ3RybF9QICYmIGMgIT0gQ3RybF9BCisJCSYmIGMgIT0gQ3RybF9MKQorCXsKKwkgICAgKHZvaWQpRXhwYW5kT25lKCZ4cGMsIE5VTEwsIE5VTEwsIDAsIFdJTERfRlJFRSk7CisJICAgIGRpZF93aWxkX2xpc3QgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX1dJTERNRU5VCisJICAgIGlmICghcF93bW51IHx8IChjICE9IEtfVVAgJiYgYyAhPSBLX0RPV04pKQorI2VuZGlmCisJCXhwYy54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7CisJICAgIHdpbV9pbmRleCA9IDA7CisjaWZkZWYgRkVBVF9XSUxETUVOVQorCSAgICBpZiAocF93bW51ICYmIHdpbGRfbWVudV9zaG93aW5nICE9IDApCisJICAgIHsKKwkJaW50IHNrdCA9IEtleVR5cGVkOworCisJCWlmICh3aWxkX21lbnVfc2hvd2luZyA9PSBXTV9TQ1JPTExFRCkKKwkJeworCQkgICAgLyogRW50ZXJlZCBjb21tYW5kIGxpbmUsIG1vdmUgaXQgdXAgKi8KKwkJICAgIGNtZGxpbmVfcm93LS07CisJCSAgICByZWRyYXdjbWQoKTsKKwkJfQorCQllbHNlIGlmIChzYXZlX3BfbHMgIT0gLTEpCisJCXsKKwkJICAgIC8qIHJlc3RvcmUgJ2xhc3RzdGF0dXMnIGFuZCAnd2lubWluaGVpZ2h0JyAqLworCQkgICAgcF9scyA9IHNhdmVfcF9sczsKKwkJICAgIHBfd21oID0gc2F2ZV9wX3dtaDsKKwkJICAgIGxhc3Rfc3RhdHVzKEZBTFNFKTsKKwkJICAgIHVwZGF0ZV9zY3JlZW4oVkFMSUQpOwkvKiByZWRyYXcgdGhlIHNjcmVlbiBOT1cgKi8KKwkJICAgIHJlZHJhd2NtZCgpOworCQkgICAgc2F2ZV9wX2xzID0gLTE7CisJCX0KKwkJZWxzZQorCQl7CisjIGlmZGVmIEZFQVRfVkVSVFNQTElUCisJCSAgICB3aW5fcmVkcmF3X2xhc3Rfc3RhdHVzKHRvcGZyYW1lKTsKKyMgZWxzZQorCQkgICAgbGFzdHdpbi0+d19yZWRyX3N0YXR1cyA9IFRSVUU7CisjIGVuZGlmCisJCSAgICByZWRyYXdfc3RhdHVzbGluZXMoKTsKKwkJfQorCQlLZXlUeXBlZCA9IHNrdDsKKwkJd2lsZF9tZW51X3Nob3dpbmcgPSAwOworCSAgICB9CisjZW5kaWYKKwl9CisKKyNpZmRlZiBGRUFUX1dJTERNRU5VCisJLyogU3BlY2lhbCB0cmFuc2xhdGlvbnMgZm9yICd3aWxkbWVudScgKi8KKwlpZiAoeHBjLnhwX2NvbnRleHQgPT0gRVhQQU5EX01FTlVOQU1FUyAmJiBwX3dtbnUpCisJeworCSAgICAvKiBIaXR0aW5nIDxEb3duPiBhZnRlciAiZW1lbnUgTmFtZS4iOiBjb21wbGV0ZSBzdWJtZW51ICovCisJICAgIGlmIChjY2xpbmUuY21kYnVmZltjY2xpbmUuY21kcG9zIC0gMV0gPT0gJy4nICYmIGMgPT0gS19ET1dOKQorCQljID0gcF93YzsKKwkgICAgZWxzZSBpZiAoYyA9PSBLX1VQKQorCSAgICB7CisJCS8qIEhpdHRpbmcgPFVwPjogUmVtb3ZlIG9uZSBzdWJtZW51IG5hbWUgaW4gZnJvbnQgb2YgdGhlCisJCSAqIGN1cnNvciAqLworCQlpbnQgZm91bmQgPSBGQUxTRTsKKworCQlqID0gKGludCkoeHBjLnhwX3BhdHRlcm4gLSBjY2xpbmUuY21kYnVmZik7CisJCWkgPSAwOworCQl3aGlsZSAoLS1qID4gMCkKKwkJeworCQkgICAgLyogY2hlY2sgZm9yIHN0YXJ0IG9mIG1lbnUgbmFtZSAqLworCQkgICAgaWYgKGNjbGluZS5jbWRidWZmW2pdID09ICcgJworCQkJICAgICYmIGNjbGluZS5jbWRidWZmW2ogLSAxXSAhPSAnXFwnKQorCQkgICAgeworCQkJaSA9IGogKyAxOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICAvKiBjaGVjayBmb3Igc3RhcnQgb2Ygc3VibWVudSBuYW1lICovCisJCSAgICBpZiAoY2NsaW5lLmNtZGJ1ZmZbal0gPT0gJy4nCisJCQkgICAgJiYgY2NsaW5lLmNtZGJ1ZmZbaiAtIDFdICE9ICdcXCcpCisJCSAgICB7CisJCQlpZiAoZm91bmQpCisJCQl7CisJCQkgICAgaSA9IGogKyAxOworCQkJICAgIGJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJICAgIGZvdW5kID0gVFJVRTsKKwkJICAgIH0KKwkJfQorCQlpZiAoaSA+IDApCisJCSAgICBjbWRsaW5lX2RlbChpKTsKKwkJYyA9IHBfd2M7CisJCXhwYy54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7CisJICAgIH0KKwl9CisJaWYgKHhwYy54cF9jb250ZXh0ID09IEVYUEFORF9GSUxFUyAmJiBwX3dtbnUpCisJeworCSAgICBjaGFyX3UgdXBzZWdbNV07CisKKwkgICAgdXBzZWdbMF0gPSBQQVRIU0VQOworCSAgICB1cHNlZ1sxXSA9ICcuJzsKKwkgICAgdXBzZWdbMl0gPSAnLic7CisJICAgIHVwc2VnWzNdID0gUEFUSFNFUDsKKwkgICAgdXBzZWdbNF0gPSBOVUw7CisKKwkgICAgaWYgKGNjbGluZS5jbWRidWZmW2NjbGluZS5jbWRwb3MgLSAxXSA9PSBQQVRIU0VQCisJCSAgICAmJiBjID09IEtfRE9XTgorCQkgICAgJiYgKGNjbGluZS5jbWRidWZmW2NjbGluZS5jbWRwb3MgLSAyXSAhPSAnLicKKwkJCXx8IGNjbGluZS5jbWRidWZmW2NjbGluZS5jbWRwb3MgLSAzXSAhPSAnLicpKQorCSAgICB7CisJCS8qIGdvIGRvd24gYSBkaXJlY3RvcnkgKi8KKwkJYyA9IHBfd2M7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoU1RSTkNNUCh4cGMueHBfcGF0dGVybiwgdXBzZWcgKyAxLCAzKSA9PSAwICYmIGMgPT0gS19ET1dOKQorCSAgICB7CisJCS8qIElmIGluIGEgZGlyZWN0IGFuY2VzdG9yLCBzdHJpcCBvZmYgb25lIC4uLyB0byBnbyBkb3duICovCisJCWludCBmb3VuZCA9IEZBTFNFOworCisJCWogPSBjY2xpbmUuY21kcG9zOworCQlpID0gKGludCkoeHBjLnhwX3BhdHRlcm4gLSBjY2xpbmUuY21kYnVmZik7CisJCXdoaWxlICgtLWogPiBpKQorCQl7CisJCSAgICBpZiAodmltX2lzcGF0aHNlcChjY2xpbmUuY21kYnVmZltqXSkpCisJCSAgICB7CisJCQlmb3VuZCA9IFRSVUU7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCQlpZiAoZm91bmQKKwkJCSYmIGNjbGluZS5jbWRidWZmW2ogLSAxXSA9PSAnLicKKwkJCSYmIGNjbGluZS5jbWRidWZmW2ogLSAyXSA9PSAnLicKKwkJCSYmICh2aW1faXNwYXRoc2VwKGNjbGluZS5jbWRidWZmW2ogLSAzXSkgfHwgaiA9PSBpICsgMikpCisJCXsKKwkJICAgIGNtZGxpbmVfZGVsKGogLSAyKTsKKwkJICAgIGMgPSBwX3djOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAoYyA9PSBLX1VQKQorCSAgICB7CisJCS8qIGdvIHVwIGEgZGlyZWN0b3J5ICovCisJCWludCBmb3VuZCA9IEZBTFNFOworCisJCWogPSBjY2xpbmUuY21kcG9zIC0gMTsKKwkJaSA9IChpbnQpKHhwYy54cF9wYXR0ZXJuIC0gY2NsaW5lLmNtZGJ1ZmYpOworCQl3aGlsZSAoLS1qID4gaSkKKwkJeworI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIGlmIChoYXNfbWJ5dGUpCisJCQlqIC09ICgqbWJfaGVhZF9vZmYpKGNjbGluZS5jbWRidWZmLCBjY2xpbmUuY21kYnVmZiArIGopOworI2VuZGlmCisJCSAgICBpZiAodmltX2lzcGF0aHNlcChjY2xpbmUuY21kYnVmZltqXSkKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwkJCSAgICAmJiB2aW1fc3RyY2hyKCIgKj9be2AkJSMiLCBjY2xpbmUuY21kYnVmZltqICsgMV0pCisJCQkgICAgICAgPT0gTlVMTAorI2VuZGlmCisJCSAgICAgICApCisJCSAgICB7CisJCQlpZiAoZm91bmQpCisJCQl7CisJCQkgICAgaSA9IGogKyAxOworCQkJICAgIGJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJICAgIGZvdW5kID0gVFJVRTsKKwkJICAgIH0KKwkJfQorCisJCWlmICghZm91bmQpCisJCSAgICBqID0gaTsKKwkJZWxzZSBpZiAoU1RSTkNNUChjY2xpbmUuY21kYnVmZiArIGosIHVwc2VnLCA0KSA9PSAwKQorCQkgICAgaiArPSA0OworCQllbHNlIGlmIChTVFJOQ01QKGNjbGluZS5jbWRidWZmICsgaiwgdXBzZWcgKyAxLCAzKSA9PSAwCisJCQkgICAgICYmIGogPT0gaSkKKwkJICAgIGogKz0gMzsKKwkJZWxzZQorCQkgICAgaiA9IDA7CisJCWlmIChqID4gMCkKKwkJeworCQkgICAgLyogVE9ETyB0aGlzIGlzIG9ubHkgZm9yIERPUy9VTklYIHN5c3RlbXMgLSBuZWVkIHRvIHB1dCBpbgorCQkgICAgICogbWFjaGluZS1zcGVjaWZpYyBzdHVmZiBoZXJlIGFuZCBpbiB1cHNlZyBpbml0ICovCisJCSAgICBjbWRsaW5lX2RlbChqKTsKKwkJICAgIHB1dF9vbl9jbWRsaW5lKHVwc2VnICsgMSwgMywgRkFMU0UpOworCQl9CisJCWVsc2UgaWYgKGNjbGluZS5jbWRwb3MgPiBpKQorCQkgICAgY21kbGluZV9kZWwoaSk7CisJCWMgPSBwX3djOworCSAgICB9CisJfQorI2lmIDAgLyogSWYgZW5hYmxlZCA8RG93bj4gb24gYSBmaWxlIHRha2VzIHlvdSBfY29tcGxldGVseV8gb3V0IG9mIHdpbGRtZW51ICovCisJaWYgKHBfd21udQorCQkmJiAoeHBjLnhwX2NvbnRleHQgPT0gRVhQQU5EX0ZJTEVTCisJCSAgICB8fCB4cGMueHBfY29udGV4dCA9PSBFWFBBTkRfTUVOVU5BTUVTKQorCQkmJiAoYyA9PSBLX1VQIHx8IGMgPT0gS19ET1dOKSkKKwkgICAgeHBjLnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKyNlbmRpZgorCisjZW5kaWYJLyogRkVBVF9XSUxETUVOVSAqLworCisJLyogQ1RSTC1cIENUUkwtTiBnb2VzIHRvIE5vcm1hbCBtb2RlLCBDVFJMLVwgQ1RSTC1HIGdvZXMgdG8gSW5zZXJ0CisJICogbW9kZSB3aGVuICdpbnNlcnRtb2RlJyBpcyBzZXQsIENUUkwtXCBlIHByb21wdHMgZm9yIGFuIGV4cHJlc3Npb24uICovCisJaWYgKGMgPT0gQ3RybF9CU0wpCisJeworCSAgICArK25vX21hcHBpbmc7CisJICAgICsrYWxsb3dfa2V5czsKKwkgICAgYyA9IHNhZmVfdmdldGMoKTsKKwkgICAgLS1ub19tYXBwaW5nOworCSAgICAtLWFsbG93X2tleXM7CisJICAgIC8qIENUUkwtXCBlIGRvZXNuJ3Qgd29yayB3aGVuIG9idGFpbmluZyBhbiBleHByZXNzaW9uLiAqLworCSAgICBpZiAoYyAhPSBDdHJsX04gJiYgYyAhPSBDdHJsX0cKKwkJCQkgICAgICYmIChjICE9ICdlJyB8fCBjY2xpbmUuY21kZmlyc3RjID09ICc9JykpCisJICAgIHsKKwkJdnVuZ2V0YyhjKTsKKwkJYyA9IEN0cmxfQlNMOworCSAgICB9CisjaWZkZWYgRkVBVF9FVkFMCisJICAgIGVsc2UgaWYgKGMgPT0gJ2UnKQorCSAgICB7CisJCXN0cnVjdCBjbWRsaW5lX2luZm8JICAgIHNhdmVfY2NsaW5lOworCQljaGFyX3UJCSAgICAqcDsKKworCQkvKgorCQkgKiBSZXBsYWNlIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgcmVzdWx0IG9mIGFuIGV4cHJlc3Npb24uCisJCSAqIE5lZWQgdG8gc2F2ZSB0aGUgY3VycmVudCBjb21tYW5kIGxpbmUsIHRvIGJlIGFibGUgdG8gZW50ZXIKKwkJICogYSBuZXcgb25lLi4uCisJCSAqLworCQlpZiAoY2NsaW5lLmNtZHBvcyA9PSBjY2xpbmUuY21kbGVuKQorCQkgICAgbmV3X2NtZHBvcyA9IDk5OTk5OwkvKiBrZWVwIGl0IGF0IHRoZSBlbmQgKi8KKwkJZWxzZQorCQkgICAgbmV3X2NtZHBvcyA9IGNjbGluZS5jbWRwb3M7CisJCXNhdmVfY2NsaW5lID0gY2NsaW5lOworCQljY2xpbmUuY21kYnVmZiA9IE5VTEw7CisJCWNjbGluZS5jbWRwcm9tcHQgPSBOVUxMOworCQljID0gZ2V0X2V4cHJfcmVnaXN0ZXIoKTsKKwkJY2NsaW5lID0gc2F2ZV9jY2xpbmU7CisJCWlmIChjID09ICc9JykKKwkJeworCQkgICAgcCA9IGdldF9leHByX2xpbmUoKTsKKwkJICAgIGlmIChwICE9IE5VTEwKKwkJCSAgICAgJiYgcmVhbGxvY19jbWRidWZmKChpbnQpU1RSTEVOKHApICsgMSkgPT0gT0spCisJCSAgICB7CisJCQljY2xpbmUuY21kbGVuID0gU1RSTEVOKHApOworCQkJU1RSQ1BZKGNjbGluZS5jbWRidWZmLCBwKTsKKwkJCXZpbV9mcmVlKHApOworCisJCQkvKiBSZXN0b3JlIHRoZSBjdXJzb3Igb3IgdXNlIHRoZSBwb3NpdGlvbiBzZXQgd2l0aAorCQkJICogc2V0X2NtZGxpbmVfcG9zKCkuICovCisJCQlpZiAobmV3X2NtZHBvcyA+IGNjbGluZS5jbWRsZW4pCisJCQkgICAgY2NsaW5lLmNtZHBvcyA9IGNjbGluZS5jbWRsZW47CisJCQllbHNlCisJCQkgICAgY2NsaW5lLmNtZHBvcyA9IG5ld19jbWRwb3M7CisKKwkJCUtleVR5cGVkID0gRkFMU0U7CS8qIERvbid0IGRvIHBfd2MgY29tcGxldGlvbi4gKi8KKwkJCXJlZHJhd2NtZCgpOworCQkJZ290byBjbWRsaW5lX2NoYW5nZWQ7CisJCSAgICB9CisJCX0KKwkJYmVlcF9mbHVzaCgpOworCQljID0gRVNDOworCSAgICB9CisjZW5kaWYKKwkgICAgZWxzZQorCSAgICB7CisJCWlmIChjID09IEN0cmxfRyAmJiBwX2ltICYmIHJlc3RhcnRfZWRpdCA9PSAwKQorCQkgICAgcmVzdGFydF9lZGl0ID0gJ2EnOworCQlnb3Rlc2MgPSBUUlVFOwkvKiB3aWxsIGZyZWUgY2NsaW5lLmNtZGJ1ZmYgYWZ0ZXIgcHV0dGluZyBpdAorCQkJCSAgIGluIGhpc3RvcnkgKi8KKwkJZ290byByZXR1cm5jbWQ7CS8qIGJhY2sgdG8gTm9ybWFsIG1vZGUgKi8KKwkgICAgfQorCX0KKworI2lmZGVmIEZFQVRfQ01EV0lOCisJaWYgKGMgPT0gY2VkaXRfa2V5IHx8IGMgPT0gS19DTURXSU4pCisJeworCSAgICAvKgorCSAgICAgKiBPcGVuIGEgd2luZG93IHRvIGVkaXQgdGhlIGNvbW1hbmQgbGluZSAoYW5kIGhpc3RvcnkpLgorCSAgICAgKi8KKwkgICAgYyA9IGV4X3dpbmRvdygpOworCSAgICBzb21lX2tleV90eXBlZCA9IFRSVUU7CisJfQorIyBpZmRlZiBGRUFUX0RJR1JBUEhTCisJZWxzZQorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgRkVBVF9ESUdSQVBIUworCSAgICBjID0gZG9fZGlncmFwaChjKTsKKyNlbmRpZgorCisJaWYgKGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSBLX0tFTlRFUiB8fCAoYyA9PSBFU0MKKwkJCSYmICghS2V5VHlwZWQgfHwgdmltX3N0cmNocihwX2NwbywgQ1BPX0VTQykgIT0gTlVMTCkpKQorCXsKKwkgICAgZ290ZXNjID0gRkFMU0U7CS8qIE1pZ2h0IGhhdmUgdHlwZWQgRVNDIHByZXZpb3VzbHksIGRvbid0CisJCQkJICAgdHJ1bmNhdGUgdGhlIGNtZGxpbmUgbm93LiAqLworCSAgICBpZiAoY2NoZWNrX2FiYnIoYyArIEFCQlJfT0ZGKSkKKwkJZ290byBjbWRsaW5lX2NoYW5nZWQ7CisJICAgIGlmICghY21kX3NpbGVudCkKKwkgICAgeworCQl3aW5kZ290byhtc2dfcm93LCAwKTsKKwkJb3V0X2ZsdXNoKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCisJLyoKKwkgKiBDb21wbGV0aW9uIGZvciAnd2lsZGNoYXInIG9yICd3aWxkY2hhcm0nIGtleS4KKwkgKiAtIGhpdHRpbmcgPEVTQz4gdHdpY2UgbWVhbnM6IGFiYW5kb24gY29tbWFuZCBsaW5lLgorCSAqIC0gd2lsZGNhcmQgZXhwYW5zaW9uIGlzIG9ubHkgZG9uZSB3aGVuIHRoZSAnd2lsZGNoYXInIGtleSBpcyByZWFsbHkKKwkgKiAgIHR5cGVkLCBub3Qgd2hlbiBpdCBjb21lcyBmcm9tIGEgbWFjcm8KKwkgKi8KKwlpZiAoKGMgPT0gcF93YyAmJiAhZ290ZXNjICYmIEtleVR5cGVkKSB8fCBjID09IHBfd2NtKQorCXsKKwkgICAgaWYgKHhwYy54cF9udW1maWxlcyA+IDApICAgLyogdHlwZWQgcF93YyBhdCBsZWFzdCB0d2ljZSAqLworCSAgICB7CisJCS8qIGlmICd3aWxkbW9kZScgY29udGFpbnMgImxpc3QiIG1heSBzdGlsbCBuZWVkIHRvIGxpc3QgKi8KKwkJaWYgKHhwYy54cF9udW1maWxlcyA+IDEKKwkJCSYmICFkaWRfd2lsZF9saXN0CisJCQkmJiAod2ltX2ZsYWdzW3dpbV9pbmRleF0gJiBXSU1fTElTVCkpCisJCXsKKwkJICAgICh2b2lkKXNob3dtYXRjaGVzKCZ4cGMsIEZBTFNFKTsKKwkJICAgIHJlZHJhd2NtZCgpOworCQkgICAgZGlkX3dpbGRfbGlzdCA9IFRSVUU7CisJCX0KKwkJaWYgKHdpbV9mbGFnc1t3aW1faW5kZXhdICYgV0lNX0xPTkdFU1QpCisJCSAgICByZXMgPSBuZXh0d2lsZCgmeHBjLCBXSUxEX0xPTkdFU1QsIFdJTERfTk9fQkVFUCk7CisJCWVsc2UgaWYgKHdpbV9mbGFnc1t3aW1faW5kZXhdICYgV0lNX0ZVTEwpCisJCSAgICByZXMgPSBuZXh0d2lsZCgmeHBjLCBXSUxEX05FWFQsIFdJTERfTk9fQkVFUCk7CisJCWVsc2UKKwkJICAgIHJlcyA9IE9LOwkgICAgLyogZG9uJ3QgaW5zZXJ0ICd3aWxkY2hhcicgbm93ICovCisJICAgIH0KKwkgICAgZWxzZQkJICAgIC8qIHR5cGVkIHBfd2MgZmlyc3QgdGltZSAqLworCSAgICB7CisJCXdpbV9pbmRleCA9IDA7CisJCWogPSBjY2xpbmUuY21kcG9zOworCQkvKiBpZiAnd2lsZG1vZGUnIGZpcnN0IGNvbnRhaW5zICJsb25nZXN0IiwgZ2V0IGxvbmdlc3QKKwkJICogY29tbW9uIHBhcnQgKi8KKwkJaWYgKHdpbV9mbGFnc1swXSAmIFdJTV9MT05HRVNUKQorCQkgICAgcmVzID0gbmV4dHdpbGQoJnhwYywgV0lMRF9MT05HRVNULCBXSUxEX05PX0JFRVApOworCQllbHNlCisJCSAgICByZXMgPSBuZXh0d2lsZCgmeHBjLCBXSUxEX0VYUEFORF9LRUVQLCBXSUxEX05PX0JFRVApOworCisJCS8qIGlmIGludGVycnVwdGVkIHdoaWxlIGNvbXBsZXRpbmcsIGJlaGF2ZSBsaWtlIGl0IGZhaWxlZCAqLworCQlpZiAoZ290X2ludCkKKwkJeworCQkgICAgKHZvaWQpdnBlZWtjKCk7CS8qIHJlbW92ZSA8Qy1DPiBmcm9tIGlucHV0IHN0cmVhbSAqLworCQkgICAgZ290X2ludCA9IEZBTFNFOwkvKiBkb24ndCBhYmFuZG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KKwkJICAgICh2b2lkKUV4cGFuZE9uZSgmeHBjLCBOVUxMLCBOVUxMLCAwLCBXSUxEX0ZSRUUpOworI2lmZGVmIEZFQVRfV0lMRE1FTlUKKwkJICAgIHhwYy54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7CisjZW5kaWYKKwkJICAgIGdvdG8gY21kbGluZV9jaGFuZ2VkOworCQl9CisKKwkJLyogd2hlbiBtb3JlIHRoYW4gb25lIG1hdGNoLCBhbmQgJ3dpbGRtb2RlJyBmaXJzdCBjb250YWlucworCQkgKiAibGlzdCIsIG9yIG5vIGNoYW5nZSBhbmQgJ3dpbGRtb2RlJyBjb250YWlucyAibG9uZ2VzdCxsaXN0IiwKKwkJICogbGlzdCBhbGwgbWF0Y2hlcyAqLworCQlpZiAocmVzID09IE9LICYmIHhwYy54cF9udW1maWxlcyA+IDEpCisJCXsKKwkJICAgIC8qIGEgImxvbmdlc3QiIHRoYXQgZGlkbid0IGRvIGFueXRoaW5nIGlzIHNraXBwZWQgKGJ1dCBub3QKKwkJICAgICAqICJsaXN0Omxvbmdlc3QiKSAqLworCQkgICAgaWYgKHdpbV9mbGFnc1swXSA9PSBXSU1fTE9OR0VTVCAmJiBjY2xpbmUuY21kcG9zID09IGopCisJCQl3aW1faW5kZXggPSAxOworCQkgICAgaWYgKCh3aW1fZmxhZ3Nbd2ltX2luZGV4XSAmIFdJTV9MSVNUKQorI2lmZGVmIEZFQVRfV0lMRE1FTlUKKwkJCSAgICB8fCAocF93bW51ICYmICh3aW1fZmxhZ3Nbd2ltX2luZGV4XSAmIFdJTV9GVUxMKSAhPSAwKQorI2VuZGlmCisJCQkgICAgKQorCQkgICAgeworCQkJaWYgKCEod2ltX2ZsYWdzWzBdICYgV0lNX0xPTkdFU1QpKQorCQkJeworI2lmZGVmIEZFQVRfV0lMRE1FTlUKKwkJCSAgICBpbnQgcF93bW51X3NhdmUgPSBwX3dtbnU7CisJCQkgICAgcF93bW51ID0gMDsKKyNlbmRpZgorCQkJICAgIG5leHR3aWxkKCZ4cGMsIFdJTERfUFJFViwgMCk7IC8qIHJlbW92ZSBtYXRjaCAqLworI2lmZGVmIEZFQVRfV0lMRE1FTlUKKwkJCSAgICBwX3dtbnUgPSBwX3dtbnVfc2F2ZTsKKyNlbmRpZgorCQkJfQorI2lmZGVmIEZFQVRfV0lMRE1FTlUKKwkJCSh2b2lkKXNob3dtYXRjaGVzKCZ4cGMsIHBfd21udQorCQkJCSYmICgod2ltX2ZsYWdzW3dpbV9pbmRleF0gJiBXSU1fTElTVCkgPT0gMCkpOworI2Vsc2UKKwkJCSh2b2lkKXNob3dtYXRjaGVzKCZ4cGMsIEZBTFNFKTsKKyNlbmRpZgorCQkJcmVkcmF3Y21kKCk7CisJCQlkaWRfd2lsZF9saXN0ID0gVFJVRTsKKwkJCWlmICh3aW1fZmxhZ3Nbd2ltX2luZGV4XSAmIFdJTV9MT05HRVNUKQorCQkJICAgIG5leHR3aWxkKCZ4cGMsIFdJTERfTE9OR0VTVCwgV0lMRF9OT19CRUVQKTsKKwkJCWVsc2UgaWYgKHdpbV9mbGFnc1t3aW1faW5kZXhdICYgV0lNX0ZVTEwpCisJCQkgICAgbmV4dHdpbGQoJnhwYywgV0lMRF9ORVhULCBXSUxEX05PX0JFRVApOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJdmltX2JlZXAoKTsKKwkJfQorI2lmZGVmIEZFQVRfV0lMRE1FTlUKKwkJZWxzZSBpZiAoeHBjLnhwX251bWZpbGVzID09IC0xKQorCQkgICAgeHBjLnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKyNlbmRpZgorCSAgICB9CisJICAgIGlmICh3aW1faW5kZXggPCAzKQorCQkrK3dpbV9pbmRleDsKKwkgICAgaWYgKGMgPT0gRVNDKQorCQlnb3Rlc2MgPSBUUlVFOworCSAgICBpZiAocmVzID09IE9LKQorCQlnb3RvIGNtZGxpbmVfY2hhbmdlZDsKKwl9CisKKwlnb3Rlc2MgPSBGQUxTRTsKKworCS8qIDxTLVRhYj4gZ29lcyB0byBsYXN0IG1hdGNoLCBpbiBhIGNsdW1zeSB3YXkgKi8KKwlpZiAoYyA9PSBLX1NfVEFCICYmIEtleVR5cGVkKQorCXsKKwkgICAgaWYgKG5leHR3aWxkKCZ4cGMsIFdJTERfRVhQQU5EX0tFRVAsIDApID09IE9LCisJCSAgICAmJiBuZXh0d2lsZCgmeHBjLCBXSUxEX1BSRVYsIDApID09IE9LCisJCSAgICAmJiBuZXh0d2lsZCgmeHBjLCBXSUxEX1BSRVYsIDApID09IE9LKQorCQlnb3RvIGNtZGxpbmVfY2hhbmdlZDsKKwl9CisKKwlpZiAoYyA9PSBOVUwgfHwgYyA9PSBLX1pFUk8pCSAgICAvKiBOVUwgaXMgc3RvcmVkIGFzIE5MICovCisJICAgIGMgPSBOTDsKKworCWRvX2FiYnIgPSBUUlVFOwkJLyogZGVmYXVsdDogY2hlY2sgZm9yIGFiYnJldmlhdGlvbiAqLworCisJLyoKKwkgKiBCaWcgc3dpdGNoIGZvciBhIHR5cGVkIGNvbW1hbmQgbGluZSBjaGFyYWN0ZXIuCisJICovCisJc3dpdGNoIChjKQorCXsKKwljYXNlIEtfQlM6CisJY2FzZSBDdHJsX0g6CisJY2FzZSBLX0RFTDoKKwljYXNlIEtfS0RFTDoKKwljYXNlIEN0cmxfVzoKKyNpZmRlZiBGRUFUX0ZLTUFQCisJCWlmIChjbWRfZmttYXAgJiYgYyA9PSBLX0JTKQorCQkgICAgYyA9IEtfREVMOworI2VuZGlmCisJCWlmIChjID09IEtfS0RFTCkKKwkJICAgIGMgPSBLX0RFTDsKKworCQkvKgorCQkgKiBkZWxldGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgdGhlIHNhbWUgYXMgYmFja3NwYWNlIG9uIG5leHQKKwkJICogY2hhcmFjdGVyLCBleGNlcHQgYXQgZW5kIG9mIGxpbmUKKwkJICovCisJCWlmIChjID09IEtfREVMICYmIGNjbGluZS5jbWRwb3MgIT0gY2NsaW5lLmNtZGxlbikKKwkJICAgICsrY2NsaW5lLmNtZHBvczsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWlmIChoYXNfbWJ5dGUgJiYgYyA9PSBLX0RFTCkKKwkJICAgIGNjbGluZS5jbWRwb3MgKz0gbWJfb2ZmX25leHQoY2NsaW5lLmNtZGJ1ZmYsCisJCQkJCSAgICAgIGNjbGluZS5jbWRidWZmICsgY2NsaW5lLmNtZHBvcyk7CisjZW5kaWYKKwkJaWYgKGNjbGluZS5jbWRwb3MgPiAwKQorCQl7CisJCSAgICBjaGFyX3UgKnA7CisKKwkJICAgIGogPSBjY2xpbmUuY21kcG9zOworCQkgICAgcCA9IGNjbGluZS5jbWRidWZmICsgajsKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBpZiAoaGFzX21ieXRlKQorCQkgICAgeworCQkJcCA9IG1iX3ByZXZwdHIoY2NsaW5lLmNtZGJ1ZmYsIHApOworCQkJaWYgKGMgPT0gQ3RybF9XKQorCQkJeworCQkJICAgIHdoaWxlIChwID4gY2NsaW5lLmNtZGJ1ZmYgJiYgdmltX2lzc3BhY2UoKnApKQorCQkJCXAgPSBtYl9wcmV2cHRyKGNjbGluZS5jbWRidWZmLCBwKTsKKwkJCSAgICBpID0gbWJfZ2V0X2NsYXNzKHApOworCQkJICAgIHdoaWxlIChwID4gY2NsaW5lLmNtZGJ1ZmYgJiYgbWJfZ2V0X2NsYXNzKHApID09IGkpCisJCQkJcCA9IG1iX3ByZXZwdHIoY2NsaW5lLmNtZGJ1ZmYsIHApOworCQkJICAgIGlmIChtYl9nZXRfY2xhc3MocCkgIT0gaSkKKwkJCQlwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7CisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCWlmIChjID09IEN0cmxfVykKKwkJICAgIHsKKwkJCXdoaWxlIChwID4gY2NsaW5lLmNtZGJ1ZmYgJiYgdmltX2lzc3BhY2UocFstMV0pKQorCQkJICAgIC0tcDsKKwkJCWkgPSB2aW1faXN3b3JkYyhwWy0xXSk7CisJCQl3aGlsZSAocCA+IGNjbGluZS5jbWRidWZmICYmICF2aW1faXNzcGFjZShwWy0xXSkKKwkJCQkmJiB2aW1faXN3b3JkYyhwWy0xXSkgPT0gaSkKKwkJCSAgICAtLXA7CisJCSAgICB9CisJCSAgICBlbHNlCisJCQktLXA7CisJCSAgICBjY2xpbmUuY21kcG9zID0gKGludCkocCAtIGNjbGluZS5jbWRidWZmKTsKKwkJICAgIGNjbGluZS5jbWRsZW4gLT0gaiAtIGNjbGluZS5jbWRwb3M7CisJCSAgICBpID0gY2NsaW5lLmNtZHBvczsKKwkJICAgIHdoaWxlIChpIDwgY2NsaW5lLmNtZGxlbikKKwkJCWNjbGluZS5jbWRidWZmW2krK10gPSBjY2xpbmUuY21kYnVmZltqKytdOworCisJCSAgICAvKiBUcnVuY2F0ZSBhdCB0aGUgZW5kLCByZXF1aXJlZCBmb3IgbXVsdGktYnl0ZSBjaGFycy4gKi8KKwkJICAgIGNjbGluZS5jbWRidWZmW2NjbGluZS5jbWRsZW5dID0gTlVMOworCQkgICAgcmVkcmF3Y21kKCk7CisJCX0KKwkJZWxzZSBpZiAoY2NsaW5lLmNtZGxlbiA9PSAwICYmIGMgIT0gQ3RybF9XCisJCQkJICAgJiYgY2NsaW5lLmNtZHByb21wdCA9PSBOVUxMICYmIGluZGVudCA9PSAwKQorCQl7CisJCSAgICAvKiBJbiBleCBhbmQgZGVidWcgbW9kZSBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcmV0dXJuLiAqLworCQkgICAgaWYgKGV4bW9kZV9hY3RpdmUKKyNpZmRlZiBGRUFUX0VWQUwKKwkJCSAgICB8fCBjY2xpbmUuY21kZmlyc3RjID09ICc+JworI2VuZGlmCisJCQkgICAgKQorCQkJZ290byBjbWRsaW5lX25vdF9jaGFuZ2VkOworCisJCSAgICB2aW1fZnJlZShjY2xpbmUuY21kYnVmZik7CS8qIG5vIGNvbW1hbmRsaW5lIHRvIHJldHVybiAqLworCQkgICAgY2NsaW5lLmNtZGJ1ZmYgPSBOVUxMOworCQkgICAgaWYgKCFjbWRfc2lsZW50KQorCQkgICAgeworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCQlpZiAoY21kbXNnX3JsKQorCQkJICAgIG1zZ19jb2wgPSBDb2x1bW5zOworCQkJZWxzZQorI2VuZGlmCisJCQkgICAgbXNnX2NvbCA9IDA7CisJCQltc2dfcHV0Y2hhcignICcpOwkJLyogZGVsZXRlICc6JyAqLworCQkgICAgfQorCQkgICAgcmVkcmF3X2NtZGxpbmUgPSBUUlVFOworCQkgICAgZ290byByZXR1cm5jbWQ7CQkvKiBiYWNrIHRvIGNtZCBtb2RlICovCisJCX0KKwkJZ290byBjbWRsaW5lX2NoYW5nZWQ7CisKKwljYXNlIEtfSU5TOgorCWNhc2UgS19LSU5TOgorI2lmZGVmIEZFQVRfRktNQVAKKwkJLyogaWYgRmFyc2kgbW9kZSBzZXQsIHdlIGFyZSBpbiByZXZlcnNlIGluc2VydCBtb2RlIC0KKwkJICAgRG8gbm90IGNoYW5nZSB0aGUgbW9kZSAqLworCQlpZiAoY21kX2ZrbWFwKQorCQkgICAgYmVlcF9mbHVzaCgpOworCQllbHNlCisjZW5kaWYKKwkJY2NsaW5lLm92ZXJzdHJpa2UgPSAhY2NsaW5lLm92ZXJzdHJpa2U7CisjaWZkZWYgQ1VSU09SX1NIQVBFCisJCXVpX2N1cnNvcl9zaGFwZSgpOwkvKiBtYXkgc2hvdyBkaWZmZXJlbnQgY3Vyc29yIHNoYXBlICovCisjZW5kaWYKKwkJZ290byBjbWRsaW5lX25vdF9jaGFuZ2VkOworCisJY2FzZSBDdHJsX0hBVDoKKwkJaWYgKG1hcF90b19leGlzdHNfbW9kZSgoY2hhcl91ICopIiIsIExBTkdNQVApKQorCQl7CisJCSAgICAvKiAiOmxtYXAiIG1hcHBpbmdzIGV4aXN0cywgdG9nZ2xlIHVzZSBvZiBtYXBwaW5ncy4gKi8KKwkJICAgIFN0YXRlIF49IExBTkdNQVA7CisjaWZkZWYgVVNFX0lNX0NPTlRST0wKKwkJICAgIGltX3NldF9hY3RpdmUoRkFMU0UpOwkvKiBEaXNhYmxlIGlucHV0IG1ldGhvZCAqLworI2VuZGlmCisJCSAgICBpZiAoYl9pbV9wdHIgIT0gTlVMTCkKKwkJICAgIHsKKwkJCWlmIChTdGF0ZSAmIExBTkdNQVApCisJCQkgICAgKmJfaW1fcHRyID0gQl9JTU9ERV9MTUFQOworCQkJZWxzZQorCQkJICAgICpiX2ltX3B0ciA9IEJfSU1PREVfTk9ORTsKKwkJICAgIH0KKwkJfQorI2lmZGVmIFVTRV9JTV9DT05UUk9MCisJCWVsc2UKKwkJeworCQkgICAgLyogVGhlcmUgYXJlIG5vICI6bG1hcCIgbWFwcGluZ3MsIHRvZ2dsZSBJTS4gIFdoZW4KKwkJICAgICAqICdpbWRpc2FibGUnIGlzIHNldCBkb24ndCB0cnkgZ2V0dGluZyB0aGUgc3RhdHVzLCBpdCdzCisJCSAgICAgKiBhbHdheXMgb2ZmLiAqLworCQkgICAgaWYgKChwX2ltZGlzYWJsZSAmJiBiX2ltX3B0ciAhPSBOVUxMKQorCQkJICAgID8gKmJfaW1fcHRyID09IEJfSU1PREVfSU0gOiBpbV9nZXRfc3RhdHVzKCkpCisJCSAgICB7CisJCQlpbV9zZXRfYWN0aXZlKEZBTFNFKTsJLyogRGlzYWJsZSBpbnB1dCBtZXRob2QgKi8KKwkJCWlmIChiX2ltX3B0ciAhPSBOVUxMKQorCQkJICAgICpiX2ltX3B0ciA9IEJfSU1PREVfTk9ORTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWltX3NldF9hY3RpdmUoVFJVRSk7CS8qIEVuYWJsZSBpbnB1dCBtZXRob2QgKi8KKwkJCWlmIChiX2ltX3B0ciAhPSBOVUxMKQorCQkJICAgICpiX2ltX3B0ciA9IEJfSU1PREVfSU07CisJCSAgICB9CisJCX0KKyNlbmRpZgorCQlpZiAoYl9pbV9wdHIgIT0gTlVMTCkKKwkJeworCQkgICAgaWYgKGJfaW1fcHRyID09ICZjdXJidWYtPmJfcF9pbWluc2VydCkKKwkJCXNldF9pbWluc2VydF9nbG9iYWwoKTsKKwkJICAgIGVsc2UKKwkJCXNldF9pbXNlYXJjaF9nbG9iYWwoKTsKKwkJfQorI2lmZGVmIENVUlNPUl9TSEFQRQorCQl1aV9jdXJzb3Jfc2hhcGUoKTsJLyogbWF5IHNob3cgZGlmZmVyZW50IGN1cnNvciBzaGFwZSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9LRVlNQVApCisJCS8qIFNob3cvdW5zaG93IHZhbHVlIG9mICdrZXltYXAnIGluIHN0YXR1cyBsaW5lcyBsYXRlci4gKi8KKwkJc3RhdHVzX3JlZHJhd19jdXJidWYoKTsKKyNlbmRpZgorCQlnb3RvIGNtZGxpbmVfbm90X2NoYW5nZWQ7CisKKy8qCWNhc2UgJ0AnOiAgIG9ubHkgaW4gdmVyeSBvbGQgdmkgKi8KKwljYXNlIEN0cmxfVToKKwkJLyogZGVsZXRlIGFsbCBjaGFyYWN0ZXJzIGxlZnQgb2YgdGhlIGN1cnNvciAqLworCQlqID0gY2NsaW5lLmNtZHBvczsKKwkJY2NsaW5lLmNtZGxlbiAtPSBqOworCQlpID0gY2NsaW5lLmNtZHBvcyA9IDA7CisJCXdoaWxlIChpIDwgY2NsaW5lLmNtZGxlbikKKwkJICAgIGNjbGluZS5jbWRidWZmW2krK10gPSBjY2xpbmUuY21kYnVmZltqKytdOworCQkvKiBUcnVuY2F0ZSBhdCB0aGUgZW5kLCByZXF1aXJlZCBmb3IgbXVsdGktYnl0ZSBjaGFycy4gKi8KKwkJY2NsaW5lLmNtZGJ1ZmZbY2NsaW5lLmNtZGxlbl0gPSBOVUw7CisJCXJlZHJhd2NtZCgpOworCQlnb3RvIGNtZGxpbmVfY2hhbmdlZDsKKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisJY2FzZSBDdHJsX1k6CisJCS8qIENvcHkgdGhlIG1vZGVsZXNzIHNlbGVjdGlvbiwgaWYgdGhlcmUgaXMgb25lLiAqLworCQlpZiAoY2xpcF9zdGFyLnN0YXRlICE9IFNFTEVDVF9DTEVBUkVEKQorCQl7CisJCSAgICBpZiAoY2xpcF9zdGFyLnN0YXRlID09IFNFTEVDVF9ET05FKQorCQkJY2xpcF9jb3B5X21vZGVsZXNzX3NlbGVjdGlvbihUUlVFKTsKKwkJICAgIGdvdG8gY21kbGluZV9ub3RfY2hhbmdlZDsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorCisJY2FzZSBFU0M6CS8qIGdldCBoZXJlIGlmIHBfd2MgIT0gRVNDIG9yIHdoZW4gRVNDIHR5cGVkIHR3aWNlICovCisJY2FzZSBDdHJsX0M6CisJCS8qIEluIGV4bW9kZSBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcmV0dXJuLiAqLworCQlpZiAoZXhtb2RlX2FjdGl2ZSkKKwkJICAgIGdvdG8gY21kbGluZV9ub3RfY2hhbmdlZDsKKworCQlnb3Rlc2MgPSBUUlVFOwkJLyogd2lsbCBmcmVlIGNjbGluZS5jbWRidWZmIGFmdGVyCisJCQkJCSAgIHB1dHRpbmcgaXQgaW4gaGlzdG9yeSAqLworCQlnb3RvIHJldHVybmNtZDsJCS8qIGJhY2sgdG8gY21kIG1vZGUgKi8KKworCWNhc2UgQ3RybF9SOgkJCS8qIGluc2VydCByZWdpc3RlciAqLworI2lmZGVmIFVTRV9PTl9GTFlfU0NST0xMCisJCWRvbnRfc2Nyb2xsID0gVFJVRTsJLyogZGlzYWxsb3cgc2Nyb2xsaW5nIGhlcmUgKi8KKyNlbmRpZgorCQlwdXRjbWRsaW5lKCciJywgVFJVRSk7CisJCSsrbm9fbWFwcGluZzsKKwkJaSA9IGMgPSBzYWZlX3ZnZXRjKCk7CS8qIENUUkwtUiA8Y2hhcj4gKi8KKwkJaWYgKGkgPT0gQ3RybF9PKQorCQkgICAgaSA9IEN0cmxfUjsJCS8qIENUUkwtUiBDVFJMLU8gPT0gQ1RSTC1SIENUUkwtUiAqLworCQlpZiAoaSA9PSBDdHJsX1IpCisJCSAgICBjID0gc2FmZV92Z2V0YygpOwkvKiBDVFJMLVIgQ1RSTC1SIDxjaGFyPiAqLworCQktLW5vX21hcHBpbmc7CisjaWZkZWYgRkVBVF9FVkFMCisJCS8qCisJCSAqIEluc2VydCB0aGUgcmVzdWx0IG9mIGFuIGV4cHJlc3Npb24uCisJCSAqIE5lZWQgdG8gc2F2ZSB0aGUgY3VycmVudCBjb21tYW5kIGxpbmUsIHRvIGJlIGFibGUgdG8gZW50ZXIKKwkJICogYSBuZXcgb25lLi4uCisJCSAqLworCQluZXdfY21kcG9zID0gLTE7CisJCWlmIChjID09ICc9JykKKwkJeworCQkgICAgc3RydWN0IGNtZGxpbmVfaW5mbwkgICAgc2F2ZV9jY2xpbmU7CisKKwkJICAgIGlmIChjY2xpbmUuY21kZmlyc3RjID09ICc9JykvKiBjYW4ndCBkbyB0aGlzIHJlY3Vyc2l2ZWx5ICovCisJCSAgICB7CisJCQliZWVwX2ZsdXNoKCk7CisJCQljID0gRVNDOworCQkgICAgfQorCQkgICAgZWxzZQorCQkgICAgeworCQkJc2F2ZV9jY2xpbmUgPSBjY2xpbmU7CisJCQljY2xpbmUuY21kYnVmZiA9IE5VTEw7CisJCQljY2xpbmUuY21kcHJvbXB0ID0gTlVMTDsKKwkJCWMgPSBnZXRfZXhwcl9yZWdpc3RlcigpOworCQkJY2NsaW5lID0gc2F2ZV9jY2xpbmU7CisJCSAgICB9CisJCX0KKyNlbmRpZgorCQlpZiAoYyAhPSBFU0MpCSAgICAvKiB1c2UgRVNDIHRvIGNhbmNlbCBpbnNlcnRpbmcgcmVnaXN0ZXIgKi8KKwkJeworCQkgICAgY21kbGluZV9wYXN0ZShjLCBpID09IEN0cmxfUik7CisJCSAgICBLZXlUeXBlZCA9IEZBTFNFOwkvKiBEb24ndCBkbyBwX3djIGNvbXBsZXRpb24uICovCisjaWZkZWYgRkVBVF9FVkFMCisJCSAgICBpZiAobmV3X2NtZHBvcyA+PSAwKQorCQkgICAgeworCQkJLyogc2V0X2NtZGxpbmVfcG9zKCkgd2FzIHVzZWQgKi8KKwkJCWlmIChuZXdfY21kcG9zID4gY2NsaW5lLmNtZGxlbikKKwkJCSAgICBjY2xpbmUuY21kcG9zID0gY2NsaW5lLmNtZGxlbjsKKwkJCWVsc2UKKwkJCSAgICBjY2xpbmUuY21kcG9zID0gbmV3X2NtZHBvczsKKwkJICAgIH0KKyNlbmRpZgorCQl9CisJCXJlZHJhd2NtZCgpOworCQlnb3RvIGNtZGxpbmVfY2hhbmdlZDsKKworCWNhc2UgQ3RybF9EOgorCQlpZiAoc2hvd21hdGNoZXMoJnhwYywgRkFMU0UpID09IEVYUEFORF9OT1RISU5HKQorCQkgICAgYnJlYWs7CS8qIFVzZSBeRCBhcyBub3JtYWwgY2hhciBpbnN0ZWFkICovCisKKwkJcmVkcmF3Y21kKCk7CisJCWNvbnRpbnVlOwkvKiBkb24ndCBkbyBpbmNyZW1lbnRhbCBzZWFyY2ggbm93ICovCisKKwljYXNlIEtfUklHSFQ6CisJY2FzZSBLX1NfUklHSFQ6CisJY2FzZSBLX0NfUklHSFQ6CisJCWRvCisJCXsKKwkJICAgIGlmIChjY2xpbmUuY21kcG9zID49IGNjbGluZS5jbWRsZW4pCisJCQlicmVhazsKKwkJICAgIGkgPSBjbWRsaW5lX2NoYXJzaXplKGNjbGluZS5jbWRwb3MpOworCQkgICAgaWYgKEtleVR5cGVkICYmIGNjbGluZS5jbWRzcG9zICsgaSA+PSBDb2x1bW5zICogUm93cykKKwkJCWJyZWFrOworCQkgICAgY2NsaW5lLmNtZHNwb3MgKz0gaTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBpZiAoaGFzX21ieXRlKQorCQkJY2NsaW5lLmNtZHBvcyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKGNjbGluZS5jbWRidWZmCisJCQkJCQkJICAgICArIGNjbGluZS5jbWRwb3MpOworCQkgICAgZWxzZQorI2VuZGlmCisJCQkrK2NjbGluZS5jbWRwb3M7CisJCX0KKwkJd2hpbGUgKChjID09IEtfU19SSUdIVCB8fCBjID09IEtfQ19SSUdIVCkKKwkJCSYmIGNjbGluZS5jbWRidWZmW2NjbGluZS5jbWRwb3NdICE9ICcgJyk7CisjaWZkZWYgRkVBVF9NQllURQorCQlpZiAoaGFzX21ieXRlKQorCQkgICAgc2V0X2NtZHNwb3NfY3Vyc29yKCk7CisjZW5kaWYKKwkJZ290byBjbWRsaW5lX25vdF9jaGFuZ2VkOworCisJY2FzZSBLX0xFRlQ6CisJY2FzZSBLX1NfTEVGVDoKKwljYXNlIEtfQ19MRUZUOgorCQlkbworCQl7CisJCSAgICBpZiAoY2NsaW5lLmNtZHBvcyA9PSAwKQorCQkJYnJlYWs7CisJCSAgICAtLWNjbGluZS5jbWRwb3M7CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGhhc19tYnl0ZSkJLyogbW92ZSB0byBmaXJzdCBieXRlIG9mIGNoYXIgKi8KKwkJCWNjbGluZS5jbWRwb3MgLT0gKCptYl9oZWFkX29mZikoY2NsaW5lLmNtZGJ1ZmYsCisJCQkJCSAgICAgIGNjbGluZS5jbWRidWZmICsgY2NsaW5lLmNtZHBvcyk7CisjZW5kaWYKKwkJICAgIGNjbGluZS5jbWRzcG9zIC09IGNtZGxpbmVfY2hhcnNpemUoY2NsaW5lLmNtZHBvcyk7CisJCX0KKwkJd2hpbGUgKChjID09IEtfU19MRUZUIHx8IGMgPT0gS19DX0xFRlQpCisJCQkmJiBjY2xpbmUuY21kYnVmZltjY2xpbmUuY21kcG9zIC0gMV0gIT0gJyAnKTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWlmIChoYXNfbWJ5dGUpCisJCSAgICBzZXRfY21kc3Bvc19jdXJzb3IoKTsKKyNlbmRpZgorCQlnb3RvIGNtZGxpbmVfbm90X2NoYW5nZWQ7CisKKwljYXNlIEtfSUdOT1JFOgorCQlnb3RvIGNtZGxpbmVfbm90X2NoYW5nZWQ7CS8qIElnbm9yZSBtb3VzZSAqLworCisjaWZkZWYgRkVBVF9NT1VTRQorCWNhc2UgS19NSURETEVEUkFHOgorCWNhc2UgS19NSURETEVSRUxFQVNFOgorCQlnb3RvIGNtZGxpbmVfbm90X2NoYW5nZWQ7CS8qIElnbm9yZSBtb3VzZSAqLworCisJY2FzZSBLX01JRERMRU1PVVNFOgorIyBpZmRlZiBGRUFUX0dVSQorCQkvKiBXaGVuIEdVSSBpcyBhY3RpdmUsIGFsc28gcGFzdGUgd2hlbiAnbW91c2UnIGlzIGVtcHR5ICovCisJCWlmICghZ3VpLmluX3VzZSkKKyMgZW5kaWYKKwkJICAgIGlmICghbW91c2VfaGFzKE1PVVNFX0NPTU1BTkQpKQorCQkJZ290byBjbWRsaW5lX25vdF9jaGFuZ2VkOyAgIC8qIElnbm9yZSBtb3VzZSAqLworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisJCWlmIChjbGlwX3N0YXIuYXZhaWxhYmxlKQorCQkgICAgY21kbGluZV9wYXN0ZSgnKicsIFRSVUUpOworCQllbHNlCisjZW5kaWYKKwkJICAgIGNtZGxpbmVfcGFzdGUoMCwgVFJVRSk7CisJCXJlZHJhd2NtZCgpOworCQlnb3RvIGNtZGxpbmVfY2hhbmdlZDsKKworI2lmZGVmIEZFQVRfRE5ECisJY2FzZSBLX0RST1A6CisJCWNtZGxpbmVfcGFzdGUoJ34nLCBUUlVFKTsKKwkJcmVkcmF3Y21kKCk7CisJCWdvdG8gY21kbGluZV9jaGFuZ2VkOworI2VuZGlmCisKKwljYXNlIEtfTEVGVERSQUc6CisJY2FzZSBLX0xFRlRSRUxFQVNFOgorCWNhc2UgS19SSUdIVERSQUc6CisJY2FzZSBLX1JJR0hUUkVMRUFTRToKKwkJLyogSWdub3JlIGRyYWcgYW5kIHJlbGVhc2UgZXZlbnRzIHdoZW4gdGhlIGJ1dHRvbi1kb3duIHdhc24ndAorCQkgKiBzZWVuIGJlZm9yZS4gKi8KKwkJaWYgKGlnbm9yZV9kcmFnX3JlbGVhc2UpCisJCSAgICBnb3RvIGNtZGxpbmVfbm90X2NoYW5nZWQ7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBLX0xFRlRNT1VTRToKKwljYXNlIEtfUklHSFRNT1VTRToKKwkJaWYgKGMgPT0gS19MRUZUUkVMRUFTRSB8fCBjID09IEtfUklHSFRSRUxFQVNFKQorCQkgICAgaWdub3JlX2RyYWdfcmVsZWFzZSA9IFRSVUU7CisJCWVsc2UKKwkJICAgIGlnbm9yZV9kcmFnX3JlbGVhc2UgPSBGQUxTRTsKKyMgaWZkZWYgRkVBVF9HVUkKKwkJLyogV2hlbiBHVUkgaXMgYWN0aXZlLCBhbHNvIG1vdmUgd2hlbiAnbW91c2UnIGlzIGVtcHR5ICovCisJCWlmICghZ3VpLmluX3VzZSkKKyMgZW5kaWYKKwkJICAgIGlmICghbW91c2VfaGFzKE1PVVNFX0NPTU1BTkQpKQorCQkJZ290byBjbWRsaW5lX25vdF9jaGFuZ2VkOyAgIC8qIElnbm9yZSBtb3VzZSAqLworIyBpZmRlZiBGRUFUX0NMSVBCT0FSRAorCQlpZiAobW91c2Vfcm93IDwgY21kbGluZV9yb3cgJiYgY2xpcF9zdGFyLmF2YWlsYWJsZSkKKwkJeworCQkgICAgaW50CSAgICBidXR0b24sIGlzX2NsaWNrLCBpc19kcmFnOworCisJCSAgICAvKgorCQkgICAgICogSGFuZGxlIG1vZGVsZXNzIHNlbGVjdGlvbi4KKwkJICAgICAqLworCQkgICAgYnV0dG9uID0gZ2V0X21vdXNlX2J1dHRvbihLRVkyVEVSTUNBUDEoYyksCisJCQkJCQkJICZpc19jbGljaywgJmlzX2RyYWcpOworCQkgICAgaWYgKG1vdXNlX21vZGVsX3BvcHVwKCkgJiYgYnV0dG9uID09IE1PVVNFX0xFRlQKKwkJCQkJICAgICAgICYmIChtb2RfbWFzayAmIE1PRF9NQVNLX1NISUZUKSkKKwkJICAgIHsKKwkJCS8qIFRyYW5zbGF0ZSBzaGlmdC1sZWZ0IHRvIHJpZ2h0IGJ1dHRvbi4gKi8KKwkJCWJ1dHRvbiA9IE1PVVNFX1JJR0hUOworCQkJbW9kX21hc2sgJj0gfk1PRF9NQVNLX1NISUZUOworCQkgICAgfQorCQkgICAgY2xpcF9tb2RlbGVzcyhidXR0b24sIGlzX2NsaWNrLCBpc19kcmFnKTsKKwkJICAgIGdvdG8gY21kbGluZV9ub3RfY2hhbmdlZDsKKwkJfQorIyBlbmRpZgorCisJCXNldF9jbWRzcG9zKCk7CisJCWZvciAoY2NsaW5lLmNtZHBvcyA9IDA7IGNjbGluZS5jbWRwb3MgPCBjY2xpbmUuY21kbGVuOworCQkJCQkJCSAgICAgICsrY2NsaW5lLmNtZHBvcykKKwkJeworCQkgICAgaSA9IGNtZGxpbmVfY2hhcnNpemUoY2NsaW5lLmNtZHBvcyk7CisJCSAgICBpZiAobW91c2Vfcm93IDw9IGNtZGxpbmVfcm93ICsgY2NsaW5lLmNtZHNwb3MgLyBDb2x1bW5zCisJCQkJICAmJiBtb3VzZV9jb2wgPCBjY2xpbmUuY21kc3BvcyAlIENvbHVtbnMgKyBpKQorCQkJYnJlYWs7CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJICAgIHsKKwkJCS8qIENvdW50ICI+IiBmb3IgZG91YmxlLXdpZGUgY2hhciB0aGF0IGRvZXNuJ3QgZml0LiAqLworCQkJY29ycmVjdF9jbWRzcG9zKGNjbGluZS5jbWRwb3MsIGkpOworCQkJY2NsaW5lLmNtZHBvcyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKGNjbGluZS5jbWRidWZmCisJCQkJCQkJICsgY2NsaW5lLmNtZHBvcykgLSAxOworCQkgICAgfQorI2VuZGlmCisJCSAgICBjY2xpbmUuY21kc3BvcyArPSBpOworCQl9CisJCWdvdG8gY21kbGluZV9ub3RfY2hhbmdlZDsKKworCS8qIE1vdXNlIHNjcm9sbCB3aGVlbDogaWdub3JlZCBoZXJlICovCisJY2FzZSBLX01PVVNFRE9XTjoKKwljYXNlIEtfTU9VU0VVUDoKKwkvKiBBbHRlcm5hdGUgYnV0dG9ucyBpZ25vcmVkIGhlcmUgKi8KKwljYXNlIEtfWDFNT1VTRToKKwljYXNlIEtfWDFEUkFHOgorCWNhc2UgS19YMVJFTEVBU0U6CisJY2FzZSBLX1gyTU9VU0U6CisJY2FzZSBLX1gyRFJBRzoKKwljYXNlIEtfWDJSRUxFQVNFOgorCQlnb3RvIGNtZGxpbmVfbm90X2NoYW5nZWQ7CisKKyNlbmRpZgkvKiBGRUFUX01PVVNFICovCisKKyNpZmRlZiBGRUFUX0dVSQorCWNhc2UgS19MRUZUTU9VU0VfTk06CS8qIG1vdXNlZm9jdXMgY2xpY2ssIGlnbm9yZWQgKi8KKwljYXNlIEtfTEVGVFJFTEVBU0VfTk06CisJCWdvdG8gY21kbGluZV9ub3RfY2hhbmdlZDsKKworCWNhc2UgS19WRVJfU0NST0xMQkFSOgorCQlpZiAoIW1zZ19zY3JvbGxlZCkKKwkJeworCQkgICAgZ3VpX2RvX3Njcm9sbCgpOworCQkgICAgcmVkcmF3Y21kKCk7CisJCX0KKwkJZ290byBjbWRsaW5lX25vdF9jaGFuZ2VkOworCisJY2FzZSBLX0hPUl9TQ1JPTExCQVI6CisJCWlmICghbXNnX3Njcm9sbGVkKQorCQl7CisJCSAgICBndWlfZG9faG9yaXpfc2Nyb2xsKCk7CisJCSAgICByZWRyYXdjbWQoKTsKKwkJfQorCQlnb3RvIGNtZGxpbmVfbm90X2NoYW5nZWQ7CisjZW5kaWYKKwljYXNlIEtfU0VMRUNUOgkgICAgLyogZW5kIG9mIFNlbGVjdCBtb2RlIG1hcHBpbmcgLSBpZ25vcmUgKi8KKwkJZ290byBjbWRsaW5lX25vdF9jaGFuZ2VkOworCisJY2FzZSBDdHJsX0I6CSAgICAvKiBiZWdpbiBvZiBjb21tYW5kIGxpbmUgKi8KKwljYXNlIEtfSE9NRToKKwljYXNlIEtfS0hPTUU6CisJY2FzZSBLX1hIT01FOgorCWNhc2UgS19TX0hPTUU6CisJY2FzZSBLX0NfSE9NRToKKwkJY2NsaW5lLmNtZHBvcyA9IDA7CisJCXNldF9jbWRzcG9zKCk7CisJCWdvdG8gY21kbGluZV9ub3RfY2hhbmdlZDsKKworCWNhc2UgQ3RybF9FOgkgICAgLyogZW5kIG9mIGNvbW1hbmQgbGluZSAqLworCWNhc2UgS19FTkQ6CisJY2FzZSBLX0tFTkQ6CisJY2FzZSBLX1hFTkQ6CisJY2FzZSBLX1NfRU5EOgorCWNhc2UgS19DX0VORDoKKwkJY2NsaW5lLmNtZHBvcyA9IGNjbGluZS5jbWRsZW47CisJCXNldF9jbWRzcG9zX2N1cnNvcigpOworCQlnb3RvIGNtZGxpbmVfbm90X2NoYW5nZWQ7CisKKwljYXNlIEN0cmxfQToJICAgIC8qIGFsbCBtYXRjaGVzICovCisJCWlmIChuZXh0d2lsZCgmeHBjLCBXSUxEX0FMTCwgMCkgPT0gRkFJTCkKKwkJICAgIGJyZWFrOworCQlnb3RvIGNtZGxpbmVfY2hhbmdlZDsKKworCWNhc2UgQ3RybF9MOgkgICAgLyogbG9uZ2VzdCBjb21tb24gcGFydCAqLworCQlpZiAobmV4dHdpbGQoJnhwYywgV0lMRF9MT05HRVNULCAwKSA9PSBGQUlMKQorCQkgICAgYnJlYWs7CisJCWdvdG8gY21kbGluZV9jaGFuZ2VkOworCisJY2FzZSBDdHJsX046CSAgICAvKiBuZXh0IG1hdGNoICovCisJY2FzZSBDdHJsX1A6CSAgICAvKiBwcmV2aW91cyBtYXRjaCAqLworCQlpZiAoeHBjLnhwX251bWZpbGVzID4gMCkKKwkJeworCQkgICAgaWYgKG5leHR3aWxkKCZ4cGMsIChjID09IEN0cmxfUCkgPyBXSUxEX1BSRVYgOiBXSUxEX05FWFQsIDApCisJCQkJCQkJCSAgICAgID09IEZBSUwpCisJCQlicmVhazsKKwkJICAgIGdvdG8gY21kbGluZV9jaGFuZ2VkOworCQl9CisKKyNpZmRlZiBGRUFUX0NNREhJU1QKKwljYXNlIEtfVVA6CisJY2FzZSBLX0RPV046CisJY2FzZSBLX1NfVVA6CisJY2FzZSBLX1NfRE9XTjoKKwljYXNlIEtfUEFHRVVQOgorCWNhc2UgS19LUEFHRVVQOgorCWNhc2UgS19QQUdFRE9XTjoKKwljYXNlIEtfS1BBR0VET1dOOgorCQlpZiAoaGlzbGVuID09IDAgfHwgZmlyc3RjID09IE5VTCkJLyogbm8gaGlzdG9yeSAqLworCQkgICAgZ290byBjbWRsaW5lX25vdF9jaGFuZ2VkOworCisJCWkgPSBoaXNjbnQ7CisKKwkJLyogc2F2ZSBjdXJyZW50IGNvbW1hbmQgc3RyaW5nIHNvIGl0IGNhbiBiZSByZXN0b3JlZCBsYXRlciAqLworCQlpZiAobG9va2ZvciA9PSBOVUxMKQorCQl7CisJCSAgICBpZiAoKGxvb2tmb3IgPSB2aW1fc3Ryc2F2ZShjY2xpbmUuY21kYnVmZikpID09IE5VTEwpCisJCQlnb3RvIGNtZGxpbmVfbm90X2NoYW5nZWQ7CisJCSAgICBsb29rZm9yW2NjbGluZS5jbWRwb3NdID0gTlVMOworCQl9CisKKwkJaiA9IChpbnQpU1RSTEVOKGxvb2tmb3IpOworCQlmb3IgKDs7KQorCQl7CisJCSAgICAvKiBvbmUgc3RlcCBiYWNrd2FyZHMgKi8KKwkJICAgIGlmIChjID09IEtfVVAgfHwgYyA9PSBLX1NfVVAgfHwgYyA9PSBDdHJsX1AgfHwKKwkJCSAgICBjID09IEtfUEFHRVVQIHx8IGMgPT0gS19LUEFHRVVQKQorCQkgICAgeworCQkJaWYgKGhpc2NudCA9PSBoaXNsZW4pCS8qIGZpcnN0IHRpbWUgKi8KKwkJCSAgICBoaXNjbnQgPSBoaXNpZHhbaGlzdHlwZV07CisJCQllbHNlIGlmIChoaXNjbnQgPT0gMCAmJiBoaXNpZHhbaGlzdHlwZV0gIT0gaGlzbGVuIC0gMSkKKwkJCSAgICBoaXNjbnQgPSBoaXNsZW4gLSAxOworCQkJZWxzZSBpZiAoaGlzY250ICE9IGhpc2lkeFtoaXN0eXBlXSArIDEpCisJCQkgICAgLS1oaXNjbnQ7CisJCQllbHNlCQkJLyogYXQgdG9wIG9mIGxpc3QgKi8KKwkJCXsKKwkJCSAgICBoaXNjbnQgPSBpOworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQkgICAgZWxzZSAgICAvKiBvbmUgc3RlcCBmb3J3YXJkcyAqLworCQkgICAgeworCQkJLyogb24gbGFzdCBlbnRyeSwgY2xlYXIgdGhlIGxpbmUgKi8KKwkJCWlmIChoaXNjbnQgPT0gaGlzaWR4W2hpc3R5cGVdKQorCQkJeworCQkJICAgIGhpc2NudCA9IGhpc2xlbjsKKwkJCSAgICBicmVhazsKKwkJCX0KKworCQkJLyogbm90IG9uIGEgaGlzdG9yeSBsaW5lLCBub3RoaW5nIHRvIGRvICovCisJCQlpZiAoaGlzY250ID09IGhpc2xlbikKKwkJCSAgICBicmVhazsKKwkJCWlmIChoaXNjbnQgPT0gaGlzbGVuIC0gMSkgICAvKiB3cmFwIGFyb3VuZCAqLworCQkJICAgIGhpc2NudCA9IDA7CisJCQllbHNlCisJCQkgICAgKytoaXNjbnQ7CisJCSAgICB9CisJCSAgICBpZiAoaGlzY250IDwgMCB8fCBoaXN0b3J5W2hpc3R5cGVdW2hpc2NudF0uaGlzc3RyID09IE5VTEwpCisJCSAgICB7CisJCQloaXNjbnQgPSBpOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBpZiAoKGMgIT0gS19VUCAmJiBjICE9IEtfRE9XTikgfHwgaGlzY250ID09IGkKKwkJCSAgICB8fCBTVFJOQ01QKGhpc3RvcnlbaGlzdHlwZV1baGlzY250XS5oaXNzdHIsCisJCQkJCQkgICAgbG9va2ZvciwgKHNpemVfdClqKSA9PSAwKQorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaGlzY250ICE9IGkpCS8qIGp1bXBlZCB0byBvdGhlciBlbnRyeSAqLworCQl7CisJCSAgICBjaGFyX3UJKnA7CisJCSAgICBpbnQJCWxlbjsKKwkJICAgIGludAkJb2xkX2ZpcnN0YzsKKworCQkgICAgdmltX2ZyZWUoY2NsaW5lLmNtZGJ1ZmYpOworCQkgICAgaWYgKGhpc2NudCA9PSBoaXNsZW4pCisJCQlwID0gbG9va2ZvcjsJLyogYmFjayB0byB0aGUgb2xkIG9uZSAqLworCQkgICAgZWxzZQorCQkJcCA9IGhpc3RvcnlbaGlzdHlwZV1baGlzY250XS5oaXNzdHI7CisKKwkJICAgIGlmIChoaXN0eXBlID09IEhJU1RfU0VBUkNICisJCQkgICAgJiYgcCAhPSBsb29rZm9yCisJCQkgICAgJiYgKG9sZF9maXJzdGMgPSBwW1NUUkxFTihwKSArIDFdKSAhPSBmaXJzdGMpCisJCSAgICB7CisJCQkvKiBDb3JyZWN0IGZvciB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciB1c2VkIHdoZW4KKwkJCSAqIGFkZGluZyB0aGUgaGlzdG9yeSBlbnRyeSB2cyB0aGUgb25lIHVzZWQgbm93LgorCQkJICogRmlyc3QgbG9vcDogY291bnQgbGVuZ3RoLgorCQkJICogU2Vjb25kIGxvb3A6IGNvcHkgdGhlIGNoYXJhY3RlcnMuICovCisJCQlmb3IgKGkgPSAwOyBpIDw9IDE7ICsraSkKKwkJCXsKKwkJCSAgICBsZW4gPSAwOworCQkJICAgIGZvciAoaiA9IDA7IHBbal0gIT0gTlVMOyArK2opCisJCQkgICAgeworCQkJCS8qIFJlcGxhY2Ugb2xkIHNlcCB3aXRoIG5ldyBzZXAsIHVubGVzcyBpdCBpcworCQkJCSAqIGVzY2FwZWQuICovCisJCQkJaWYgKHBbal0gPT0gb2xkX2ZpcnN0YworCQkJCQkgICAgICAmJiAoaiA9PSAwIHx8IHBbaiAtIDFdICE9ICdcXCcpKQorCQkJCXsKKwkJCQkgICAgaWYgKGkgPiAwKQorCQkJCQljY2xpbmUuY21kYnVmZltsZW5dID0gZmlyc3RjOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCSAgICAvKiBFc2NhcGUgbmV3IHNlcCwgdW5sZXNzIGl0IGlzIGFscmVhZHkKKwkJCQkgICAgICogZXNjYXBlZC4gKi8KKwkJCQkgICAgaWYgKHBbal0gPT0gZmlyc3RjCisJCQkJCSAgICAgICYmIChqID09IDAgfHwgcFtqIC0gMV0gIT0gJ1xcJykpCisJCQkJICAgIHsKKwkJCQkJaWYgKGkgPiAwKQorCQkJCQkgICAgY2NsaW5lLmNtZGJ1ZmZbbGVuXSA9ICdcXCc7CisJCQkJCSsrbGVuOworCQkJCSAgICB9CisJCQkJICAgIGlmIChpID4gMCkKKwkJCQkJY2NsaW5lLmNtZGJ1ZmZbbGVuXSA9IHBbal07CisJCQkJfQorCQkJCSsrbGVuOworCQkJICAgIH0KKwkJCSAgICBpZiAoaSA9PSAwKQorCQkJICAgIHsKKwkJCQlhbGxvY19jbWRidWZmKGxlbik7CisJCQkJaWYgKGNjbGluZS5jbWRidWZmID09IE5VTEwpCisJCQkJICAgIGdvdG8gcmV0dXJuY21kOworCQkJICAgIH0KKwkJCX0KKwkJCWNjbGluZS5jbWRidWZmW2xlbl0gPSBOVUw7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlhbGxvY19jbWRidWZmKChpbnQpU1RSTEVOKHApKTsKKwkJCWlmIChjY2xpbmUuY21kYnVmZiA9PSBOVUxMKQorCQkJICAgIGdvdG8gcmV0dXJuY21kOworCQkJU1RSQ1BZKGNjbGluZS5jbWRidWZmLCBwKTsKKwkJICAgIH0KKworCQkgICAgY2NsaW5lLmNtZHBvcyA9IGNjbGluZS5jbWRsZW4gPSAoaW50KVNUUkxFTihjY2xpbmUuY21kYnVmZik7CisJCSAgICByZWRyYXdjbWQoKTsKKwkJICAgIGdvdG8gY21kbGluZV9jaGFuZ2VkOworCQl9CisJCWJlZXBfZmx1c2goKTsKKwkJZ290byBjbWRsaW5lX25vdF9jaGFuZ2VkOworI2VuZGlmCisKKwljYXNlIEN0cmxfVjoKKwljYXNlIEN0cmxfUToKKyNpZmRlZiBGRUFUX01PVVNFCisJCWlnbm9yZV9kcmFnX3JlbGVhc2UgPSBUUlVFOworI2VuZGlmCisJCXB1dGNtZGxpbmUoJ14nLCBUUlVFKTsKKwkJYyA9IGdldF9saXRlcmFsKCk7CSAgICAvKiBnZXQgbmV4dCAodHdvKSBjaGFyYWN0ZXIocykgKi8KKwkJZG9fYWJiciA9IEZBTFNFOwkgICAgLyogZG9uJ3QgZG8gYWJicmV2aWF0aW9uIG5vdyAqLworI2lmZGVmIEZFQVRfTUJZVEUKKwkJLyogbWF5IG5lZWQgdG8gcmVtb3ZlIF4gd2hlbiBjb21wb3NpbmcgY2hhciB3YXMgdHlwZWQgKi8KKwkJaWYgKGVuY191dGY4ICYmIHV0Zl9pc2NvbXBvc2luZyhjKSAmJiAhY21kX3NpbGVudCkKKwkJeworCQkgICAgZHJhd19jbWRsaW5lKGNjbGluZS5jbWRwb3MsIGNjbGluZS5jbWRsZW4gLSBjY2xpbmUuY21kcG9zKTsKKwkJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJCSAgICBjdXJzb3JjbWQoKTsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworCisjaWZkZWYgRkVBVF9ESUdSQVBIUworCWNhc2UgQ3RybF9LOgorI2lmZGVmIEZFQVRfTU9VU0UKKwkJaWdub3JlX2RyYWdfcmVsZWFzZSA9IFRSVUU7CisjZW5kaWYKKwkJcHV0Y21kbGluZSgnPycsIFRSVUUpOworI2lmZGVmIFVTRV9PTl9GTFlfU0NST0xMCisJCWRvbnRfc2Nyb2xsID0gVFJVRTsJICAgIC8qIGRpc2FsbG93IHNjcm9sbGluZyBoZXJlICovCisjZW5kaWYKKwkJYyA9IGdldF9kaWdyYXBoKFRSVUUpOworCQlpZiAoYyAhPSBOVUwpCisJCSAgICBicmVhazsKKworCQlyZWRyYXdjbWQoKTsKKwkJZ290byBjbWRsaW5lX25vdF9jaGFuZ2VkOworI2VuZGlmIC8qIEZFQVRfRElHUkFQSFMgKi8KKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJY2FzZSBDdHJsX186CSAgICAvKiBDVFJMLV86IHN3aXRjaCBsYW5ndWFnZSBtb2RlICovCisJCWlmICghcF9hcmkpCisJCSAgICBicmVhazsKKyNpZmRlZiBGRUFUX0ZLTUFQCisJCWlmIChwX2FsdGtleW1hcCkKKwkJeworCQkgICAgY21kX2ZrbWFwID0gIWNtZF9ma21hcDsKKwkJICAgIGlmIChjbWRfZmttYXApCS8qIGluIEZhcnNpIGFsd2F5cyBpbiBJbnNlcnQgbW9kZSAqLworCQkJY2NsaW5lLm92ZXJzdHJpa2UgPSBGQUxTRTsKKwkJfQorCQllbHNlCQkJICAgIC8qIEhlYnJldyBpcyBkZWZhdWx0ICovCisjZW5kaWYKKwkJICAgIGNtZF9oa21hcCA9ICFjbWRfaGttYXA7CisJCWdvdG8gY21kbGluZV9ub3RfY2hhbmdlZDsKKyNlbmRpZgorCisJZGVmYXVsdDoKKyNpZmRlZiBVTklYCisJCWlmIChjID09IGludHJfY2hhcikKKwkJeworCQkgICAgZ290ZXNjID0gVFJVRTsJLyogd2lsbCBmcmVlIGNjbGluZS5jbWRidWZmIGFmdGVyCisJCQkJCSAgIHB1dHRpbmcgaXQgaW4gaGlzdG9yeSAqLworCQkgICAgZ290byByZXR1cm5jbWQ7CS8qIGJhY2sgdG8gTm9ybWFsIG1vZGUgKi8KKwkJfQorI2VuZGlmCisJCS8qCisJCSAqIE5vcm1hbCBjaGFyYWN0ZXIgd2l0aCBubyBzcGVjaWFsIG1lYW5pbmcuICBKdXN0IHNldCBtb2RfbWFzaworCQkgKiB0byAweDAgc28gdGhhdCB0eXBpbmcgU2hpZnQtU3BhY2UgaW4gdGhlIEdVSSBkb2Vzbid0IGVudGVyCisJCSAqIHRoZSBzdHJpbmcgPFMtU3BhY2U+LiAgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gYWZ0ZXIgXlYuCisJCSAqLworCQlpZiAoIUlTX1NQRUNJQUwoYykpCisJCSAgICBtb2RfbWFzayA9IDB4MDsKKwkJYnJlYWs7CisJfQorCS8qCisJICogRW5kIG9mIHN3aXRjaCBvbiBjb21tYW5kIGxpbmUgY2hhcmFjdGVyLgorCSAqIFdlIGNvbWUgaGVyZSBpZiB3ZSBoYXZlIGEgbm9ybWFsIGNoYXJhY3Rlci4KKwkgKi8KKworCWlmIChkb19hYmJyICYmIChJU19TUEVDSUFMKGMpIHx8ICF2aW1faXN3b3JkYyhjKSkgJiYgY2NoZWNrX2FiYnIoCisjaWZkZWYgRkVBVF9NQllURQorCQkJLyogQWRkIEFCQlJfT0ZGIGZvciBjaGFyYWN0ZXJzIGFib3ZlIDB4MTAwLCB0aGlzIGlzCisJCQkgKiB3aGF0IGNoZWNrX2FiYnIoKSBleHBlY3RzLiAqLworCQkJKGhhc19tYnl0ZSAmJiBjID49IDB4MTAwKSA/IChjICsgQUJCUl9PRkYpIDoKKyNlbmRpZgorCQkJCQkJCQkJYykpCisJICAgIGdvdG8gY21kbGluZV9jaGFuZ2VkOworCisJLyoKKwkgKiBwdXQgdGhlIGNoYXJhY3RlciBpbiB0aGUgY29tbWFuZCBsaW5lCisJICovCisJaWYgKElTX1NQRUNJQUwoYykgfHwgbW9kX21hc2sgIT0gMCkKKwkgICAgcHV0X29uX2NtZGxpbmUoZ2V0X3NwZWNpYWxfa2V5X25hbWUoYywgbW9kX21hc2spLCAtMSwgVFJVRSk7CisJZWxzZQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJICAgIHsKKwkJaiA9ICgqbWJfY2hhcjJieXRlcykoYywgSU9idWZmKTsKKwkJSU9idWZmW2pdID0gTlVMOwkvKiBleGNsdWRlIGNvbXBvc2luZyBjaGFycyAqLworCQlwdXRfb25fY21kbGluZShJT2J1ZmYsIGosIFRSVUUpOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCUlPYnVmZlswXSA9IGM7CisJCXB1dF9vbl9jbWRsaW5lKElPYnVmZiwgMSwgVFJVRSk7CisJICAgIH0KKwl9CisJZ290byBjbWRsaW5lX2NoYW5nZWQ7CisKKy8qCisgKiBUaGlzIHBhcnQgaW1wbGVtZW50cyBpbmNyZW1lbnRhbCBzZWFyY2hlcyBmb3IgIi8iIGFuZCAiPyIKKyAqIEp1bXAgdG8gY21kbGluZV9ub3RfY2hhbmdlZCB3aGVuIGEgY2hhcmFjdGVyIGhhcyBiZWVuIHJlYWQgYnV0IHRoZSBjb21tYW5kCisgKiBsaW5lIGRpZCBub3QgY2hhbmdlLiBUaGVuIHdlIG9ubHkgc2VhcmNoIGFuZCByZWRyYXcgaWYgc29tZXRoaW5nIGNoYW5nZWQgaW4KKyAqIHRoZSBwYXN0LgorICogSnVtcCB0byBjbWRsaW5lX2NoYW5nZWQgd2hlbiB0aGUgY29tbWFuZCBsaW5lIGRpZCBjaGFuZ2UuCisgKiAoU29ycnkgZm9yIHRoZSBnb3RvJ3MsIEkga25vdyBpdCBpcyB1Z2x5KS4KKyAqLworY21kbGluZV9ub3RfY2hhbmdlZDoKKyNpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorCWlmICghaW5jc2VhcmNoX3Bvc3Rwb25lZCkKKwkgICAgY29udGludWU7CisjZW5kaWYKKworY21kbGluZV9jaGFuZ2VkOgorI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisJLyoKKwkgKiAnaW5jc2VhcmNoJyBoaWdobGlnaHRpbmcuCisJICovCisJaWYgKHBfaXMgJiYgIWNtZF9zaWxlbnQgJiYgKGZpcnN0YyA9PSAnLycgfHwgZmlyc3RjID09ICc/JykpCisJeworCSAgICAvKiBpZiB0aGVyZSBpcyBhIGNoYXJhY3RlciB3YWl0aW5nLCBzZWFyY2ggYW5kIHJlZHJhdyBsYXRlciAqLworCSAgICBpZiAoY2hhcl9hdmFpbCgpKQorCSAgICB7CisJCWluY3NlYXJjaF9wb3N0cG9uZWQgPSBUUlVFOworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBpbmNzZWFyY2hfcG9zdHBvbmVkID0gRkFMU0U7CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBvbGRfY3Vyc29yOyAgLyogc3RhcnQgYXQgb2xkIHBvc2l0aW9uICovCisKKwkgICAgLyogSWYgdGhlcmUgaXMgbm8gY29tbWFuZCBsaW5lLCBkb24ndCBkbyBhbnl0aGluZyAqLworCSAgICBpZiAoY2NsaW5lLmNtZGxlbiA9PSAwKQorCQlpID0gMDsKKwkgICAgZWxzZQorCSAgICB7CisJCWN1cnNvcl9vZmYoKTsJCS8qIHNvIHRoZSB1c2VyIGtub3dzIHdlJ3JlIGJ1c3kgKi8KKwkJb3V0X2ZsdXNoKCk7CisJCSsrZW1zZ19vZmY7ICAgIC8qIFNvIGl0IGRvZXNuJ3QgYmVlcCBpZiBiYWQgZXhwciAqLworCQlpID0gZG9fc2VhcmNoKE5VTEwsIGZpcnN0YywgY2NsaW5lLmNtZGJ1ZmYsIGNvdW50LAorCQkJU0VBUkNIX0tFRVAgKyBTRUFSQ0hfT1BUICsgU0VBUkNIX05PT0YgKyBTRUFSQ0hfUEVFSyk7CisJCS0tZW1zZ19vZmY7CisJCS8qIGlmIGludGVycnVwdGVkIHdoaWxlIHNlYXJjaGluZywgYmVoYXZlIGxpa2UgaXQgZmFpbGVkICovCisJCWlmIChnb3RfaW50KQorCQl7CisJCSAgICAodm9pZCl2cGVla2MoKTsJLyogcmVtb3ZlIDxDLUM+IGZyb20gaW5wdXQgc3RyZWFtICovCisJCSAgICBnb3RfaW50ID0gRkFMU0U7CS8qIGRvbid0IGFiYW5kb24gdGhlIGNvbW1hbmQgbGluZSAqLworCQkgICAgaSA9IDA7CisJCX0KKwkJZWxzZSBpZiAoY2hhcl9hdmFpbCgpKQorCQkgICAgLyogY2FuY2VsbGVkIHNlYXJjaGluZyBiZWNhdXNlIGEgY2hhciB3YXMgdHlwZWQgKi8KKwkJICAgIGluY3NlYXJjaF9wb3N0cG9uZWQgPSBUUlVFOworCSAgICB9CisJICAgIGlmIChpKQorCQloaWdobGlnaHRfbWF0Y2ggPSBUUlVFOwkJLyogaGlnaGxpZ2h0IHBvc2l0aW9uICovCisJICAgIGVsc2UKKwkJaGlnaGxpZ2h0X21hdGNoID0gRkFMU0U7CS8qIHJlbW92ZSBoaWdobGlnaHQgKi8KKworCSAgICAvKiBmaXJzdCByZXN0b3JlIHRoZSBvbGQgY3Vyd2luIHZhbHVlcywgc28gdGhlIHNjcmVlbiBpcworCSAgICAgKiBwb3NpdGlvbmVkIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgYWN0dWFsIHNlYXJjaCBjb21tYW5kICovCisJICAgIGN1cndpbi0+d19sZWZ0Y29sID0gb2xkX2xlZnRjb2w7CisJICAgIGN1cndpbi0+d190b3BsaW5lID0gb2xkX3RvcGxpbmU7CisjIGlmZGVmIEZFQVRfRElGRgorCSAgICBjdXJ3aW4tPndfdG9wZmlsbCA9IG9sZF90b3BmaWxsOworIyBlbmRpZgorCSAgICBjdXJ3aW4tPndfYm90bGluZSA9IG9sZF9ib3RsaW5lOworCSAgICBjaGFuZ2VkX2NsaW5lX2JlZl9jdXJzKCk7CisJICAgIHVwZGF0ZV90b3BsaW5lKCk7CisKKwkgICAgaWYgKGkgIT0gMCkKKwkgICAgeworCQkvKgorCQkgKiBGaXJzdCBtb3ZlIGN1cnNvciB0byBlbmQgb2YgbWF0Y2gsIHRoZW4gdG8gc3RhcnQuICBUaGlzCisJCSAqIG1vdmVzIHRoZSB3aG9sZSBtYXRjaCBvbnRvIHRoZSBzY3JlZW4gd2hlbiAnbm93cmFwJyBpcyBzZXQuCisJCSAqLworCQlpID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisJCWN1cndpbi0+d19jdXJzb3IubG51bSArPSBzZWFyY2hfbWF0Y2hfbGluZXM7CisJCWN1cndpbi0+d19jdXJzb3IuY29sID0gc2VhcmNoX21hdGNoX2VuZGNvbDsKKwkJdmFsaWRhdGVfY3Vyc29yKCk7CisJCWN1cndpbi0+d19jdXJzb3IubG51bSAtPSBzZWFyY2hfbWF0Y2hfbGluZXM7CisJCWN1cndpbi0+d19jdXJzb3IuY29sID0gaTsKKwkgICAgfQorCSAgICB2YWxpZGF0ZV9jdXJzb3IoKTsKKworCSAgICB1cGRhdGVfc2NyZWVuKE5PVF9WQUxJRCk7CisJICAgIG1zZ19zdGFydGhlcmUoKTsKKwkgICAgcmVkcmF3Y21kbGluZSgpOworCSAgICBkaWRfaW5jc2VhcmNoID0gVFJVRTsKKwl9CisjZWxzZSAvKiBGRUFUX1NFQVJDSF9FWFRSQSAqLworCTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwlpZiAoY21kbXNnX3JsCisjIGlmZGVmIEZFQVRfQVJBQklDCisJCXx8IHBfYXJzaGFwZQorIyBlbmRpZgorCQkpCisJICAgIC8qIEFsd2F5cyByZWRyYXcgdGhlIHdob2xlIGNvbW1hbmQgbGluZSB0byBmaXggc2hhcGluZyBhbmQKKwkgICAgICogcmlnaHQtbGVmdCB0eXBpbmcuICBOb3QgZWZmaWNpZW50LCBidXQgaXQgd29ya3MuICovCisJICAgIHJlZHJhd2NtZCgpOworI2VuZGlmCisgICAgfQorCityZXR1cm5jbWQ6CisKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorICAgIGNtZG1zZ19ybCA9IEZBTFNFOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0ZLTUFQCisgICAgY21kX2ZrbWFwID0gMDsKKyNlbmRpZgorCisgICAgRXhwYW5kQ2xlYW51cCgmeHBjKTsKKworI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisgICAgaWYgKGRpZF9pbmNzZWFyY2gpCisgICAgeworCWN1cndpbi0+d19jdXJzb3IgPSBvbGRfY3Vyc29yOworCWN1cndpbi0+d19jdXJzd2FudCA9IG9sZF9jdXJzd2FudDsKKwljdXJ3aW4tPndfbGVmdGNvbCA9IG9sZF9sZWZ0Y29sOworCWN1cndpbi0+d190b3BsaW5lID0gb2xkX3RvcGxpbmU7CisjIGlmZGVmIEZFQVRfRElGRgorCWN1cndpbi0+d190b3BmaWxsID0gb2xkX3RvcGZpbGw7CisjIGVuZGlmCisJY3Vyd2luLT53X2JvdGxpbmUgPSBvbGRfYm90bGluZTsKKwloaWdobGlnaHRfbWF0Y2ggPSBGQUxTRTsKKwl2YWxpZGF0ZV9jdXJzb3IoKTsJLyogbmVlZGVkIGZvciBUQUIgKi8KKwlyZWRyYXdfbGF0ZXIoTk9UX1ZBTElEKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChjY2xpbmUuY21kYnVmZiAhPSBOVUxMKQorICAgIHsKKwkvKgorCSAqIFB1dCBsaW5lIGluIGhpc3RvcnkgYnVmZmVyICgiOiIgYW5kICI9IiBvbmx5IHdoZW4gaXQgd2FzIHR5cGVkKS4KKwkgKi8KKyNpZmRlZiBGRUFUX0NNREhJU1QKKwlpZiAoY2NsaW5lLmNtZGxlbiAmJiBmaXJzdGMgIT0gTlVMCisJCSYmIChzb21lX2tleV90eXBlZCB8fCBoaXN0eXBlID09IEhJU1RfU0VBUkNIKSkKKwl7CisJICAgIGFkZF90b19oaXN0b3J5KGhpc3R5cGUsIGNjbGluZS5jbWRidWZmLCBUUlVFLAorCQkJCSAgICAgICBoaXN0eXBlID09IEhJU1RfU0VBUkNIID8gZmlyc3RjIDogTlVMKTsKKwkgICAgaWYgKGZpcnN0YyA9PSAnOicpCisJICAgIHsKKwkJdmltX2ZyZWUobmV3X2xhc3RfY21kbGluZSk7CisJCW5ld19sYXN0X2NtZGxpbmUgPSB2aW1fc3Ryc2F2ZShjY2xpbmUuY21kYnVmZik7CisJICAgIH0KKwl9CisjZW5kaWYKKworCWlmIChnb3Rlc2MpCSAgICAvKiBhYmFuZG9uIGNvbW1hbmQgbGluZSAqLworCXsKKwkgICAgdmltX2ZyZWUoY2NsaW5lLmNtZGJ1ZmYpOworCSAgICBjY2xpbmUuY21kYnVmZiA9IE5VTEw7CisJICAgIGlmIChtc2dfc2Nyb2xsZWQgPT0gMCkKKwkJY29tcHV0ZV9jbWRyb3coKTsKKwkgICAgTVNHKCIiKTsKKwkgICAgcmVkcmF3X2NtZGxpbmUgPSBUUlVFOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZSBzY3JlZW4gd2FzIHNoaWZ0ZWQgdXAsIHJlZHJhdyB0aGUgd2hvbGUgc2NyZWVuIChsYXRlcikuCisgICAgICogSWYgdGhlIGxpbmUgaXMgdG9vIGxvbmcsIGNsZWFyIGl0LCBzbyBydWxlciBhbmQgc2hvd24gY29tbWFuZCBkbworICAgICAqIG5vdCBnZXQgcHJpbnRlZCBpbiB0aGUgbWlkZGxlIG9mIGl0LgorICAgICAqLworICAgIG1zZ19jaGVjaygpOworICAgIG1zZ19zY3JvbGwgPSBzYXZlX21zZ19zY3JvbGw7CisgICAgcmVkaXJfb2ZmID0gRkFMU0U7CisKKyAgICAvKiBXaGVuIHRoZSBjb21tYW5kIGxpbmUgd2FzIHR5cGVkLCBubyBuZWVkIGZvciBhIHdhaXQtcmV0dXJuIHByb21wdC4gKi8KKyAgICBpZiAoc29tZV9rZXlfdHlwZWQpCisJbmVlZF93YWl0X3JldHVybiA9IEZBTFNFOworCisgICAgU3RhdGUgPSBzYXZlX1N0YXRlOworI2lmZGVmIFVTRV9JTV9DT05UUk9MCisgICAgaWYgKGJfaW1fcHRyICE9IE5VTEwgJiYgKmJfaW1fcHRyICE9IEJfSU1PREVfTE1BUCkKKwlpbV9zYXZlX3N0YXR1cyhiX2ltX3B0cik7CisgICAgaW1fc2V0X2FjdGl2ZShGQUxTRSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgc2V0bW91c2UoKTsKKyNlbmRpZgorI2lmZGVmIENVUlNPUl9TSEFQRQorICAgIHVpX2N1cnNvcl9zaGFwZSgpOwkJLyogbWF5IHNob3cgZGlmZmVyZW50IGN1cnNvciBzaGFwZSAqLworI2VuZGlmCisKKyAgICByZXR1cm4gY2NsaW5lLmNtZGJ1ZmY7Cit9CisKKyNpZiAoZGVmaW5lZChGRUFUX0NSWVBUKSB8fCBkZWZpbmVkKEZFQVRfRVZBTCkpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogR2V0IGEgY29tbWFuZCBsaW5lIHdpdGggYSBwcm9tcHQuCisgKiBUaGlzIGlzIHByZXBhcmVkIHRvIGJlIGNhbGxlZCByZWN1cnNpdmVseSBmcm9tIGdldGNtZGxpbmUoKSAoZS5nLiBieQorICogZl9pbnB1dCgpIHdoZW4gZXZhbHVhdGluZyBhbiBleHByZXNzaW9uIGZyb20gQ1RSTC1SID0pLgorICogUmV0dXJucyB0aGUgY29tbWFuZCBsaW5lIGluIGFsbG9jYXRlZCBtZW1vcnksIG9yIE5VTEwuCisgKi8KKyAgICBjaGFyX3UgKgorZ2V0Y21kbGluZV9wcm9tcHQoZmlyc3RjLCBwcm9tcHQsIGF0dHIpCisgICAgaW50CQlmaXJzdGM7CisgICAgY2hhcl91CSpwcm9tcHQ7CS8qIGNvbW1hbmQgbGluZSBwcm9tcHQgKi8KKyAgICBpbnQJCWF0dHI7CQkvKiBhdHRyaWJ1dGVzIGZvciBwcm9tcHQgKi8KK3sKKyAgICBjaGFyX3UJCSpzOworICAgIHN0cnVjdCBjbWRsaW5lX2luZm8Jc2F2ZV9jY2xpbmU7CisgICAgaW50CQkJbXNnX2NvbF9zYXZlID0gbXNnX2NvbDsKKworICAgIHNhdmVfY2NsaW5lID0gY2NsaW5lOworICAgIGNjbGluZS5jbWRidWZmID0gTlVMTDsKKyAgICBjY2xpbmUuY21kcHJvbXB0ID0gcHJvbXB0OworICAgIGNjbGluZS5jbWRhdHRyID0gYXR0cjsKKyAgICBzID0gZ2V0Y21kbGluZShmaXJzdGMsIDFMLCAwKTsKKyAgICBjY2xpbmUgPSBzYXZlX2NjbGluZTsKKyAgICAvKiBSZXN0b3JlIG1zZ19jb2wsIHRoZSBwcm9tcHQgZnJvbSBpbnB1dCgpIG1heSBoYXZlIGNoYW5nZWQgaXQuICovCisgICAgbXNnX2NvbCA9IG1zZ19jb2xfc2F2ZTsKKworICAgIHJldHVybiBzOworfQorI2VuZGlmCisKKyAgICBzdGF0aWMgaW50CitjbWRsaW5lX2NoYXJzaXplKGlkeCkKKyAgICBpbnQJCWlkeDsKK3sKKyNpZiBkZWZpbmVkKEZFQVRfQ1JZUFQpIHx8IGRlZmluZWQoRkVBVF9FVkFMKQorICAgIGlmIChjbWRsaW5lX3N0YXIgPiAwKQkgICAgLyogc2hvd2luZyAnKicsIGFsd2F5cyAxIHBvc2l0aW9uICovCisJcmV0dXJuIDE7CisjZW5kaWYKKyAgICByZXR1cm4gcHRyMmNlbGxzKGNjbGluZS5jbWRidWZmICsgaWR4KTsKK30KKworLyoKKyAqIENvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUgY3Vyc29yIG9uIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZSBwcm9tcHQgYW5kCisgKiBpbmRlbnQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc2V0X2NtZHNwb3MoKQoreworICAgIGlmIChjY2xpbmUuY21kZmlyc3RjKQorCWNjbGluZS5jbWRzcG9zID0gMSArIGNjbGluZS5jbWRpbmRlbnQ7CisgICAgZWxzZQorCWNjbGluZS5jbWRzcG9zID0gMCArIGNjbGluZS5jbWRpbmRlbnQ7Cit9CisKKy8qCisgKiBDb21wdXRlIHRoZSBzY3JlZW4gcG9zaXRpb24gZm9yIHRoZSBjdXJzb3Igb24gdGhlIGNvbW1hbmQgbGluZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfY21kc3Bvc19jdXJzb3IoKQoreworICAgIGludAkJaSwgbSwgYzsKKworICAgIHNldF9jbWRzcG9zKCk7CisgICAgaWYgKEtleVR5cGVkKQorCW0gPSBDb2x1bW5zICogUm93czsKKyAgICBlbHNlCisJbSA9IE1BWENPTDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY2NsaW5lLmNtZGxlbiAmJiBpIDwgY2NsaW5lLmNtZHBvczsgKytpKQorICAgIHsKKwljID0gY21kbGluZV9jaGFyc2l6ZShpKTsKKyNpZmRlZiBGRUFUX01CWVRFCisJLyogQ291bnQgIj4iIGZvciBkb3VibGUtd2lkZSBtdWx0aS1ieXRlIGNoYXIgdGhhdCBkb2Vzbid0IGZpdC4gKi8KKwlpZiAoaGFzX21ieXRlKQorCSAgICBjb3JyZWN0X2NtZHNwb3MoaSwgYyk7CisjZW5kaWYKKwkvKiBJZiB0aGUgY21kbGluZSBkb2Vzbid0IGZpdCwgcHV0IGN1cnNvciBvbiBsYXN0IHZpc2libGUgY2hhci4gKi8KKwlpZiAoKGNjbGluZS5jbWRzcG9zICs9IGMpID49IG0pCisJeworCSAgICBjY2xpbmUuY21kcG9zID0gaSAtIDE7CisJICAgIGNjbGluZS5jbWRzcG9zIC09IGM7CisJICAgIGJyZWFrOworCX0KKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgaSArPSAoKm1iX3B0cjJsZW5fY2hlY2spKGNjbGluZS5jbWRidWZmICsgaSkgLSAxOworI2VuZGlmCisgICAgfQorfQorCisjaWZkZWYgRkVBVF9NQllURQorLyoKKyAqIENoZWNrIGlmIHRoZSBjaGFyYWN0ZXIgYXQgImlkeCIsIHdoaWNoIGlzICJjZWxscyIgd2lkZSwgaXMgYSBtdWx0aS1ieXRlCisgKiBjaGFyYWN0ZXIgdGhhdCBkb2Vzbid0IGZpdCwgc28gdGhhdCBhICI+IiBtdXN0IGJlIGRpc3BsYXllZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjb3JyZWN0X2NtZHNwb3MoaWR4LCBjZWxscykKKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCWNlbGxzOworeworICAgIGlmICgoKm1iX3B0cjJsZW5fY2hlY2spKGNjbGluZS5jbWRidWZmICsgaWR4KSA+IDEKKwkJJiYgKCptYl9wdHIyY2VsbHMpKGNjbGluZS5jbWRidWZmICsgaWR4KSA+IDEKKwkJJiYgY2NsaW5lLmNtZHNwb3MgJSBDb2x1bW5zICsgY2VsbHMgPiBDb2x1bW5zKQorCWNjbGluZS5jbWRzcG9zKys7Cit9CisjZW5kaWYKKworLyoKKyAqIEdldCBhbiBFeCBjb21tYW5kIGxpbmUgZm9yIHRoZSAiOiIgY29tbWFuZC4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBjaGFyX3UgKgorZ2V0ZXhsaW5lKGMsIGR1bW15LCBpbmRlbnQpCisgICAgaW50CQljOwkJLyogbm9ybWFsbHkgJzonLCBOVUwgZm9yICI6YXBwZW5kIiAqLworICAgIHZvaWQJKmR1bW15OwkJLyogY29va2llIG5vdCB1c2VkICovCisgICAgaW50CQlpbmRlbnQ7CQkvKiBpbmRlbnQgZm9yIGluc2lkZSBjb25kaXRpb25hbHMgKi8KK3sKKyAgICAvKiBXaGVuIGV4ZWN1dGluZyBhIHJlZ2lzdGVyLCByZW1vdmUgJzonIHRoYXQncyBpbiBmcm9udCBvZiBlYWNoIGxpbmUuICovCisgICAgaWYgKGV4ZWNfZnJvbV9yZWcgJiYgdnBlZWtjKCkgPT0gJzonKQorCSh2b2lkKXZnZXRjKCk7CisgICAgcmV0dXJuIGdldGNtZGxpbmUoYywgMUwsIGluZGVudCk7Cit9CisKKy8qCisgKiBHZXQgYW4gRXggY29tbWFuZCBsaW5lIGZvciBFeCBtb2RlLgorICogSW4gRXggbW9kZSB3ZSBvbmx5IHVzZSB0aGUgT1Mgc3VwcGxpZWQgbGluZSBlZGl0aW5nIGZlYXR1cmVzIGFuZCBubworICogbWFwcGluZ3Mgb3IgYWJicmV2aWF0aW9ucy4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBjaGFyX3UgKgorZ2V0ZXhtb2RlbGluZShjLCBkdW1teSwgaW5kZW50KQorICAgIGludAkJYzsJCS8qIG5vcm1hbGx5ICc6JywgTlVMIGZvciAiOmFwcGVuZCIgKi8KKyAgICB2b2lkCSpkdW1teTsJCS8qIGNvb2tpZSBub3QgdXNlZCAqLworICAgIGludAkJaW5kZW50OwkJLyogaW5kZW50IGZvciBpbnNpZGUgY29uZGl0aW9uYWxzICovCit7CisgICAgZ2FycmF5X1QJCWxpbmVfZ2E7CisgICAgaW50CQkJbGVuOworICAgIGludAkJCW9mZiA9IDA7CisgICAgY2hhcl91CQkqcDsKKyAgICBpbnQJCQlmaW5pc2hlZCA9IEZBTFNFOworI2lmIGRlZmluZWQoRkVBVF9HVUkpIHx8IGRlZmluZWQoTk9fQ09PS0VEX0lOUFVUKQorICAgIGludAkJCXN0YXJ0Y29sID0gMDsKKyAgICBpbnQJCQljMTsKKyAgICBpbnQJCQllc2NhcGVkID0gRkFMU0U7CS8qIENUUkwtViB0eXBlZCAqLworICAgIGludAkJCXZjb2wgPSAwOworI2VuZGlmCisKKyAgICAvKiBTd2l0Y2ggY3Vyc29yIG9uIG5vdy4gIFRoaXMgYXZvaWRzIHRoYXQgaXQgaGFwcGVucyBhZnRlciB0aGUgIlxuIiwgd2hpY2gKKyAgICAgKiBjb25mdXNlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGFic3RvcHMuICovCisgICAgY3Vyc29yX29uKCk7CisKKyAgICAvKiBhbHdheXMgc3RhcnQgaW4gY29sdW1uIDA7IHdyaXRlIGEgbmV3bGluZSBpZiBuZWNlc3NhcnkgKi8KKyAgICBjb21wdXRlX2NtZHJvdygpOworICAgIGlmIChtc2dfY29sKQorCW1zZ19wdXRjaGFyKCdcbicpOworICAgIGlmIChjID09ICc6JykKKyAgICB7CisJbXNnX3B1dGNoYXIoJzonKTsKKwl3aGlsZSAoaW5kZW50LS0gPiAwKQorCSAgICBtc2dfcHV0Y2hhcignICcpOworI2lmIGRlZmluZWQoRkVBVF9HVUkpIHx8IGRlZmluZWQoTk9fQ09PS0VEX0lOUFVUKQorCXN0YXJ0Y29sID0gbXNnX2NvbDsKKyNlbmRpZgorICAgIH0KKworICAgIGdhX2luaXQyKCZsaW5lX2dhLCAxLCAzMCk7CisKKyAgICAvKgorICAgICAqIEdldCB0aGUgbGluZSwgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUuCisgICAgICovCisgICAgZ290X2ludCA9IEZBTFNFOworICAgIHdoaWxlICghZ290X2ludCAmJiAhZmluaXNoZWQpCisgICAgeworCWlmIChnYV9ncm93KCZsaW5lX2dhLCA0MCkgPT0gRkFJTCkKKwkgICAgYnJlYWs7CisJcCA9IChjaGFyX3UgKilsaW5lX2dhLmdhX2RhdGEgKyBsaW5lX2dhLmdhX2xlbjsKKworCS8qIEdldCBvbmUgY2hhcmFjdGVyIChpbmNoYXIgZ2V0cyBhIHRoaXJkIG9mIG1heGxlbiBjaGFyYWN0ZXJzISkgKi8KKwlsZW4gPSBpbmNoYXIocCArIG9mZiwgMywgLTFMLCAwKTsKKwlpZiAobGVuIDwgMCkKKwkgICAgY29udGludWU7CSAgICAvKiBlbmQgb2YgaW5wdXQgc2NyaXB0IHJlYWNoZWQgKi8KKwkvKiBmb3IgYSBzcGVjaWFsIGNoYXJhY3Rlciwgd2UgbmVlZCBhdCBsZWFzdCB0aHJlZSBjaGFyYWN0ZXJzICovCisJaWYgKCgqcCA9PSBLX1NQRUNJQUwgfHwgKnAgPT0gQ1NJKSAmJiBvZmYgKyBsZW4gPCAzKQorCXsKKwkgICAgb2ZmICs9IGxlbjsKKwkgICAgY29udGludWU7CisJfQorCWxlbiArPSBvZmY7CisJb2ZmID0gMDsKKworCS8qCisJICogV2hlbiB1c2luZyB0aGUgR1VJLCBhbmQgZm9yIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIGNvb2tlZCBpbnB1dCwKKwkgKiBoYW5kbGUgbGluZSBlZGl0aW5nIGhlcmUuCisJICovCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChOT19DT09LRURfSU5QVVQpCisjIGlmbmRlZiBOT19DT09LRURfSU5QVVQKKwlpZiAoZ3VpLmluX3VzZSkKKyMgZW5kaWYKKwl7CisJICAgIGlmIChnb3RfaW50KQorCSAgICB7CisJCW1zZ19wdXRjaGFyKCdcbicpOworCQlicmVhazsKKwkgICAgfQorCisJICAgIHdoaWxlIChsZW4gPiAwKQorCSAgICB7CisJCWMxID0gKnArKzsKKwkJLS1sZW47CisJCWlmICgoYzEgPT0gS19TUEVDSUFMCisjICBpZiAhZGVmaW5lZChOT19DT09LRURfSU5QVVQpIHx8IGRlZmluZWQoRkVBVF9HVUkpCisJCQkgICAgfHwgYzEgPT0gQ1NJCisjICBlbmRpZgorCQkgICAgKSAmJiBsZW4gPj0gMikKKwkJeworCQkgICAgYzEgPSBUT19TUEVDSUFMKHBbMF0sIHBbMV0pOworCQkgICAgcCArPSAyOworCQkgICAgbGVuIC09IDI7CisJCX0KKworCQlpZiAoIWVzY2FwZWQpCisJCXsKKwkJICAgIC8qIENSIHR5cGVkIG1lYW5zICJlbnRlciIsIHdoaWNoIGlzIE5MICovCisJCSAgICBpZiAoYzEgPT0gJ1xyJykKKwkJCWMxID0gJ1xuJzsKKworCQkgICAgaWYgKGMxID09IEJTIHx8IGMxID09IEtfQlMKKwkJCQkgIHx8IGMxID09IERFTCB8fCBjMSA9PSBLX0RFTCB8fCBjMSA9PSBLX0tERUwpCisJCSAgICB7CisJCQlpZiAobGluZV9nYS5nYV9sZW4gPiAwKQorCQkJeworCQkJICAgIGludAkJaSwgdjsKKwkJCSAgICBjaGFyX3UJKnE7CisKKwkJCSAgICAtLWxpbmVfZ2EuZ2FfbGVuOworCQkJICAgICsrbGluZV9nYS5nYV9yb29tOworCQkJICAgIC8qIGNvbXB1dGUgY29sdW1uIHRoYXQgY3Vyc29yIHNob3VsZCBiZSBpbiAqLworCQkJICAgIHYgPSAwOworCQkJICAgIHEgPSAoKGNoYXJfdSAqKWxpbmVfZ2EuZ2FfZGF0YSk7CisJCQkgICAgZm9yIChpID0gMDsgaSA8IGxpbmVfZ2EuZ2FfbGVuOyArK2kpCisJCQkgICAgeworCQkJCWlmICgqcSA9PSBUQUIpCisJCQkJICAgIHYgKz0gOCAtIHYgJSA4OworCQkJCWVsc2UKKwkJCQkgICAgdiArPSBwdHIyY2VsbHMocSk7CisJCQkJKytxOworCQkJICAgIH0KKwkJCSAgICAvKiBlcmFzZSBjaGFyYWN0ZXJzIHRvIHBvc2l0aW9uIGN1cnNvciAqLworCQkJICAgIHdoaWxlICh2Y29sID4gdikKKwkJCSAgICB7CisJCQkJbXNnX3B1dGNoYXIoJ1xiJyk7CisJCQkJbXNnX3B1dGNoYXIoJyAnKTsKKwkJCQltc2dfcHV0Y2hhcignXGInKTsKKwkJCQktLXZjb2w7CisJCQkgICAgfQorCQkJfQorCQkJY29udGludWU7CisJCSAgICB9CisKKwkJICAgIGlmIChjMSA9PSBDdHJsX1UpCisJCSAgICB7CisJCQltc2dfY29sID0gc3RhcnRjb2w7CisJCQltc2dfY2xyX2VvcygpOworCQkJbGluZV9nYS5nYV9yb29tICs9IGxpbmVfZ2EuZ2FfbGVuOworCQkJbGluZV9nYS5nYV9sZW4gPSAwOworCQkJY29udGludWU7CisJCSAgICB9CisKKwkJICAgIGlmIChjMSA9PSBDdHJsX1YpCisJCSAgICB7CisJCQllc2NhcGVkID0gVFJVRTsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQl9CisKKwkJaWYgKElTX1NQRUNJQUwoYzEpKQorCQkgICAgYzEgPSAnPyc7CisJCSgoY2hhcl91ICopbGluZV9nYS5nYV9kYXRhKVtsaW5lX2dhLmdhX2xlbl0gPSBjMTsKKwkJaWYgKGMxID09ICdcbicpCisJCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKwkJZWxzZSBpZiAoYzEgPT0gVEFCKQorCQl7CisJCSAgICAvKiBEb24ndCB1c2UgY2hhcnRhYnNpemUoKSwgJ3RzJyBjYW4gYmUgZGlmZmVyZW50ICovCisJCSAgICBkbworCQkgICAgeworCQkJbXNnX3B1dGNoYXIoJyAnKTsKKwkJICAgIH0gd2hpbGUgKCsrdmNvbCAlIDgpOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgbXNnX291dHRyYW5zX2xlbigKKwkJCSAgICAgKChjaGFyX3UgKilsaW5lX2dhLmdhX2RhdGEpICsgbGluZV9nYS5nYV9sZW4sIDEpOworCQkgICAgdmNvbCArPSBjaGFyMmNlbGxzKGMxKTsKKwkJfQorCQkrK2xpbmVfZ2EuZ2FfbGVuOworCQktLWxpbmVfZ2EuZ2Ffcm9vbTsKKwkJZXNjYXBlZCA9IEZBTFNFOworCSAgICB9CisJICAgIHdpbmRnb3RvKG1zZ19yb3csIG1zZ19jb2wpOworCX0KKyMgaWZuZGVmIE5PX0NPT0tFRF9JTlBVVAorCWVsc2UKKyMgZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBOT19DT09LRURfSU5QVVQKKwl7CisJICAgIGxpbmVfZ2EuZ2FfbGVuICs9IGxlbjsKKwkgICAgbGluZV9nYS5nYV9yb29tIC09IGxlbjsKKwl9CisjZW5kaWYKKwlwID0gKGNoYXJfdSAqKShsaW5lX2dhLmdhX2RhdGEpICsgbGluZV9nYS5nYV9sZW47CisJaWYgKGxpbmVfZ2EuZ2FfbGVuICYmIHBbLTFdID09ICdcbicpCisJeworCSAgICBmaW5pc2hlZCA9IFRSVUU7CisJICAgIC0tbGluZV9nYS5nYV9sZW47CisJICAgIC0tcDsKKwkgICAgKnAgPSBOVUw7CisJfQorICAgIH0KKworICAgIC8qIG5vdGUgdGhhdCBjdXJzb3IgaGFzIG1vdmVkLCBiZWNhdXNlIG9mIHRoZSBlY2hvZWQgPENSPiAqLworICAgIHNjcmVlbl9kb3duKCk7CisgICAgLyogbWFrZSBmb2xsb3dpbmcgbWVzc2FnZXMgZ28gdG8gdGhlIG5leHQgbGluZSAqLworICAgIG1zZ19kaWRvdXQgPSBGQUxTRTsKKyAgICBtc2dfY29sID0gMDsKKyAgICBpZiAobXNnX3JvdyA8IFJvd3MgLSAxKQorCSsrbXNnX3JvdzsKKyAgICBlbXNnX29uX2Rpc3BsYXkgPSBGQUxTRTsJCS8qIGRvbid0IHdhbnQgdWlfZGVsYXkoKSAqLworCisgICAgaWYgKGdvdF9pbnQpCisJZ2FfY2xlYXIoJmxpbmVfZ2EpOworCisgICAgcmV0dXJuIChjaGFyX3UgKilsaW5lX2dhLmdhX2RhdGE7Cit9CisKKyNpZmRlZiBDVVJTT1JfU0hBUEUKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBjY2xpbmUub3ZlcnN0cmlrZSBpcyBvbi4KKyAqLworICAgIGludAorY21kbGluZV9vdmVyc3RyaWtlKCkKK3sKKyAgICByZXR1cm4gY2NsaW5lLm92ZXJzdHJpa2U7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgY3Vyc29yIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGNtZGxpbmUuCisgKi8KKyAgICBpbnQKK2NtZGxpbmVfYXRfZW5kKCkKK3sKKyAgICByZXR1cm4gKGNjbGluZS5jbWRwb3MgPj0gY2NsaW5lLmNtZGxlbik7Cit9CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZFQVRfWElNKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0dUSykpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmV0dXJuIHRoZSB2aXJ0dWFsIGNvbHVtbiBudW1iZXIgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorICogVGhpcyBpcyB1c2VkIGJ5IHRoZSBJTSBjb2RlIHRvIG9idGFpbiB0aGUgc3RhcnQgb2YgdGhlIHByZWVkaXQgc3RyaW5nLgorICovCisgICAgY29sbnJfVAorY21kbGluZV9nZXR2Y29sX2N1cnNvcigpCit7CisgICAgaWYgKGNjbGluZS5jbWRidWZmID09IE5VTEwgfHwgY2NsaW5lLmNtZHBvcyA+IGNjbGluZS5jbWRsZW4pCisJcmV0dXJuIE1BWENPTDsKKworIyBpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGhhc19tYnl0ZSkKKyAgICB7CisJY29sbnJfVAljb2w7CisJaW50CWkgPSAwOworCisJZm9yIChjb2wgPSAwOyBpIDwgY2NsaW5lLmNtZHBvczsgKytjb2wpCisJICAgIGkgKz0gKCptYl9wdHIybGVuX2NoZWNrKShjY2xpbmUuY21kYnVmZiArIGkpOworCisJcmV0dXJuIGNvbDsKKyAgICB9CisgICAgZWxzZQorIyBlbmRpZgorCXJldHVybiBjY2xpbmUuY21kcG9zOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfWElNKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0dUSykKKy8qCisgKiBJZiBwYXJ0IG9mIHRoZSBjb21tYW5kIGxpbmUgaXMgYW4gSU0gcHJlZWRpdCBzdHJpbmcsIHJlZHJhdyBpdCB3aXRoCisgKiBJTSBmZWVkYmFjayBhdHRyaWJ1dGVzLiAgVGhlIGN1cnNvciBwb3NpdGlvbiBpcyByZXN0b3JlZCBhZnRlciBkcmF3aW5nLgorICovCisgICAgc3RhdGljIHZvaWQKK3JlZHJhd2NtZF9wcmVlZGl0KCkKK3sKKyAgICBpZiAoKFN0YXRlICYgQ01ETElORSkKKwkgICAgJiYgeGljICE9IE5VTEwKKwkgICAgJiYgaW1fZ2V0X3N0YXR1cygpCisJICAgICYmICFwX2ltZGlzYWJsZQorCSAgICAmJiBpbV9pc19wcmVlZGl0aW5nKCkpCisgICAgeworCWludAljbWRwb3MgPSAwOworCWludAljbWRzcG9zOworCWludAlvbGRfcm93OworCWludAlvbGRfY29sOworCWNvbG5yX1QJY29sOworCisJb2xkX3JvdyA9IG1zZ19yb3c7CisJb2xkX2NvbCA9IG1zZ19jb2w7CisJY21kc3BvcyA9ICgoY2NsaW5lLmNtZGZpcnN0YykgPyAxIDogMCkgKyBjY2xpbmUuY21kaW5kZW50OworCisjIGlmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCXsKKwkgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBwcmVlZGl0X3N0YXJ0X2NvbAorCQkJICAmJiBjbWRwb3MgPCBjY2xpbmUuY21kbGVuOyArK2NvbCkKKwkgICAgeworCQljbWRzcG9zICs9ICgqbWJfcHRyMmNlbGxzKShjY2xpbmUuY21kYnVmZiArIGNtZHBvcyk7CisJCWNtZHBvcyAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShjY2xpbmUuY21kYnVmZiArIGNtZHBvcyk7CisJICAgIH0KKwl9CisJZWxzZQorIyBlbmRpZgorCXsKKwkgICAgY21kc3BvcyArPSBwcmVlZGl0X3N0YXJ0X2NvbDsKKwkgICAgY21kcG9zICArPSBwcmVlZGl0X3N0YXJ0X2NvbDsKKwl9CisKKwltc2dfcm93ID0gY21kbGluZV9yb3cgKyAoY21kc3BvcyAvIChpbnQpQ29sdW1ucyk7CisJbXNnX2NvbCA9IGNtZHNwb3MgJSAoaW50KUNvbHVtbnM7CisJaWYgKG1zZ19yb3cgPj0gUm93cykKKwkgICAgbXNnX3JvdyA9IFJvd3MgLSAxOworCisJZm9yIChjb2wgPSAwOyBjbWRwb3MgPCBjY2xpbmUuY21kbGVuOyArK2NvbCkKKwl7CisJICAgIGludCBjaGFyX2xlbjsKKwkgICAgaW50IGNoYXJfYXR0cjsKKworCSAgICBjaGFyX2F0dHIgPSBpbV9nZXRfZmVlZGJhY2tfYXR0cihjb2wpOworCSAgICBpZiAoY2hhcl9hdHRyIDwgMCkKKwkJYnJlYWs7IC8qIGVuZCBvZiBwcmVlZGl0IHN0cmluZyAqLworCisjIGlmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJY2hhcl9sZW4gPSAoKm1iX3B0cjJsZW5fY2hlY2spKGNjbGluZS5jbWRidWZmICsgY21kcG9zKTsKKwkgICAgZWxzZQorIyBlbmRpZgorCQljaGFyX2xlbiA9IDE7CisKKwkgICAgbXNnX291dHRyYW5zX2xlbl9hdHRyKGNjbGluZS5jbWRidWZmICsgY21kcG9zLCBjaGFyX2xlbiwgY2hhcl9hdHRyKTsKKwkgICAgY21kcG9zICs9IGNoYXJfbGVuOworCX0KKworCW1zZ19yb3cgPSBvbGRfcm93OworCW1zZ19jb2wgPSBvbGRfY29sOworICAgIH0KK30KKyNlbmRpZiAvKiBGRUFUX1hJTSAmJiBGRUFUX0dVSV9HVEsgKi8KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGNvbW1hbmQgbGluZSBidWZmZXIuCisgKiBBc3NpZ25zIHRoZSBuZXcgYnVmZmVyIHRvIGNjbGluZS5jbWRidWZmIGFuZCBjY2xpbmUuY21kYnVmZmxlbi4KKyAqIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBvZiBjY2xpbmUuY21kYnVmZiBhbmQgY2NsaW5lLmNtZGJ1ZmZsZW4uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYWxsb2NfY21kYnVmZihsZW4pCisgICAgaW50CSAgICBsZW47Cit7CisgICAgLyoKKyAgICAgKiBnaXZlIHNvbWUgZXh0cmEgc3BhY2UgdG8gYXZvaWQgaGF2aW5nIHRvIGFsbG9jYXRlIGFsbCB0aGUgdGltZQorICAgICAqLworICAgIGlmIChsZW4gPCA4MCkKKwlsZW4gPSAxMDA7CisgICAgZWxzZQorCWxlbiArPSAyMDsKKworICAgIGNjbGluZS5jbWRidWZmID0gYWxsb2MobGVuKTsgICAgLyogY2FsbGVyIHNob3VsZCBjaGVjayBmb3Igb3V0LW9mLW1lbW9yeSAqLworICAgIGNjbGluZS5jbWRidWZmbGVuID0gbGVuOworfQorCisvKgorICogUmUtYWxsb2NhdGUgdGhlIGNvbW1hbmQgbGluZSB0byBsZW5ndGggbGVuICsgc29tZXRoaW5nIGV4dHJhLgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgc3RhdGljIGludAorcmVhbGxvY19jbWRidWZmKGxlbikKKyAgICBpbnQJICAgIGxlbjsKK3sKKyAgICBjaGFyX3UJKnA7CisKKyAgICBwID0gY2NsaW5lLmNtZGJ1ZmY7CisgICAgYWxsb2NfY21kYnVmZihsZW4pOwkJCS8qIHdpbGwgZ2V0IHNvbWUgbW9yZSAqLworICAgIGlmIChjY2xpbmUuY21kYnVmZiA9PSBOVUxMKQkJLyogb3V0IG9mIG1lbW9yeSAqLworICAgIHsKKwljY2xpbmUuY21kYnVmZiA9IHA7CQkvKiBrZWVwIHRoZSBvbGQgb25lICovCisJcmV0dXJuIEZBSUw7CisgICAgfQorICAgIG1jaF9tZW1tb3ZlKGNjbGluZS5jbWRidWZmLCBwLCAoc2l6ZV90KWNjbGluZS5jbWRsZW4gKyAxKTsKKyAgICB2aW1fZnJlZShwKTsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBEcmF3IHBhcnQgb2YgdGhlIGNtZGxpbmUgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLiAgQnV0IGRyYXcgc3RhcnMKKyAqIHdoZW4gY21kbGluZV9zdGFyIGlzIFRSVUUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZHJhd19jbWRsaW5lKHN0YXJ0LCBsZW4pCisgICAgaW50CQlzdGFydDsKKyAgICBpbnQJCWxlbjsKK3sKKyNpZiBkZWZpbmVkKEZFQVRfQ1JZUFQpIHx8IGRlZmluZWQoRkVBVF9FVkFMKQorICAgIGludAkJaTsKKworICAgIGlmIChjbWRsaW5lX3N0YXIgPiAwKQorCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwl7CisJICAgIG1zZ19wdXRjaGFyKCcqJyk7CisjIGlmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJaSArPSAoKm1iX3B0cjJsZW5fY2hlY2spKGNjbGluZS5jbWRidWZmICsgc3RhcnQgKyBpKSAtIDE7CisjIGVuZGlmCisJfQorICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIEZFQVRfQVJBQklDCisJaWYgKHBfYXJzaGFwZSAmJiAhcF90YmlkaSAmJiBlbmNfdXRmOCAmJiBsZW4gPiAwKQorICAgIHsKKwlzdGF0aWMgY2hhcl91CSpidWY7CisJc3RhdGljIGludAlidWZsZW4gPSAwOworCWNoYXJfdQkJKnA7CisJaW50CQlqOworCWludAkJbmV3bGVuID0gMDsKKwlpbnQJCW1iX2w7CisJaW50CQlwYywgcGMxOworCWludAkJcHJldl9jID0gMDsKKwlpbnQJCXByZXZfYzEgPSAwOworCWludAkJdThjLCB1OGNfYzEsIHU4Y19jMjsKKwlpbnQJCW5jID0gMDsKKwlpbnQJCWR1bW15OworCisJLyoKKwkgKiBEbyBhcmFiaWMgc2hhcGluZyBpbnRvIGEgdGVtcG9yYXJ5IGJ1ZmZlci4gIFRoaXMgaXMgdmVyeQorCSAqIGluZWZmaWNpZW50IQorCSAqLworCWlmIChsZW4gKiAyID4gYnVmbGVuKQorCXsKKwkgICAgLyogUmUtYWxsb2NhdGUgdGhlIGJ1ZmZlci4gIFdlIGtlZXAgaXQgYXJvdW5kIHRvIGF2b2lkIGEgbG90IG9mCisJICAgICAqIGFsbG9jKCkvZnJlZSgpIGNhbGxzLiAqLworCSAgICB2aW1fZnJlZShidWYpOworCSAgICBidWZsZW4gPSBsZW4gKiAyOworCSAgICBidWYgPSBhbGxvYyhidWZsZW4pOworCSAgICBpZiAoYnVmID09IE5VTEwpCisJCXJldHVybjsJLyogb3V0IG9mIG1lbW9yeSAqLworCX0KKworCWZvciAoaiA9IHN0YXJ0OyBqIDwgc3RhcnQgKyBsZW47IGogKz0gbWJfbCkKKwl7CisJICAgIHAgPSBjY2xpbmUuY21kYnVmZiArIGo7CisJICAgIHU4YyA9IHV0ZmNfcHRyMmNoYXJfbGVuKHAsICZ1OGNfYzEsICZ1OGNfYzIsIHN0YXJ0ICsgbGVuIC0gaik7CisJICAgIG1iX2wgPSB1dGZjX3B0cjJsZW5fY2hlY2tfbGVuKHAsIHN0YXJ0ICsgbGVuIC0gaik7CisJICAgIGlmIChBUkFCSUNfQ0hBUih1OGMpKQorCSAgICB7CisJCS8qIERvIEFyYWJpYyBzaGFwaW5nLiAqLworCQlpZiAoY21kbXNnX3JsKQorCQl7CisJCSAgICAvKiBkaXNwbGF5aW5nIGZyb20gcmlnaHQgdG8gbGVmdCAqLworCQkgICAgcGMgPSBwcmV2X2M7CisJCSAgICBwYzEgPSBwcmV2X2MxOworCQkgICAgcHJldl9jMSA9IHU4Y19jMTsKKwkJICAgIGlmIChqICsgbWJfbCA+PSBzdGFydCArIGxlbikKKwkJCW5jID0gTlVMOworCQkgICAgZWxzZQorCQkJbmMgPSB1dGZfcHRyMmNoYXIocCArIG1iX2wpOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgLyogZGlzcGxheWluZyBmcm9tIGxlZnQgdG8gcmlnaHQgKi8KKwkJICAgIGlmIChqICsgbWJfbCA+PSBzdGFydCArIGxlbikKKwkJCXBjID0gTlVMOworCQkgICAgZWxzZQorCQkJcGMgPSB1dGZjX3B0cjJjaGFyX2xlbihwICsgbWJfbCwgJnBjMSwgJmR1bW15LAorCQkJCQkJICAgICAgc3RhcnQgKyBsZW4gLSBqIC0gbWJfbCk7CisJCSAgICBuYyA9IHByZXZfYzsKKwkJfQorCQlwcmV2X2MgPSB1OGM7CisKKwkJdThjID0gYXJhYmljX3NoYXBlKHU4YywgTlVMTCwgJnU4Y19jMSwgcGMsIHBjMSwgbmMpOworCisJCW5ld2xlbiArPSAoKm1iX2NoYXIyYnl0ZXMpKHU4YywgYnVmICsgbmV3bGVuKTsKKwkJaWYgKHU4Y19jMSAhPSAwKQorCQl7CisJCSAgICBuZXdsZW4gKz0gKCptYl9jaGFyMmJ5dGVzKSh1OGNfYzEsIGJ1ZiArIG5ld2xlbik7CisJCSAgICBpZiAodThjX2MyICE9IDApCisJCQluZXdsZW4gKz0gKCptYl9jaGFyMmJ5dGVzKSh1OGNfYzIsIGJ1ZiArIG5ld2xlbik7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJcHJldl9jID0gdThjOworCQltY2hfbWVtbW92ZShidWYgKyBuZXdsZW4sIHAsIG1iX2wpOworCQluZXdsZW4gKz0gbWJfbDsKKwkgICAgfQorCX0KKworCW1zZ19vdXR0cmFuc19sZW4oYnVmLCBuZXdsZW4pOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwltc2dfb3V0dHJhbnNfbGVuKGNjbGluZS5jbWRidWZmICsgc3RhcnQsIGxlbik7Cit9CisKKy8qCisgKiBQdXQgYSBjaGFyYWN0ZXIgb24gdGhlIGNvbW1hbmQgbGluZS4gIFNoaWZ0cyB0aGUgZm9sbG93aW5nIHRleHQgdG8gdGhlCisgKiByaWdodCB3aGVuICJzaGlmdCIgaXMgVFJVRS4gIFVzZWQgZm9yIENUUkwtViwgQ1RSTC1LLCBldGMuCisgKiAiYyIgbXVzdCBiZSBwcmludGFibGUgKGZpdCBpbiBvbmUgZGlzcGxheSBjZWxsKSEKKyAqLworICAgIHZvaWQKK3B1dGNtZGxpbmUoYywgc2hpZnQpCisgICAgaW50CQljOworICAgIGludAkJc2hpZnQ7Cit7CisgICAgaWYgKGNtZF9zaWxlbnQpCisJcmV0dXJuOworICAgIG1zZ19ub19tb3JlID0gVFJVRTsKKyAgICBtc2dfcHV0Y2hhcihjKTsKKyAgICBpZiAoc2hpZnQpCisJZHJhd19jbWRsaW5lKGNjbGluZS5jbWRwb3MsIGNjbGluZS5jbWRsZW4gLSBjY2xpbmUuY21kcG9zKTsKKyAgICBtc2dfbm9fbW9yZSA9IEZBTFNFOworICAgIGN1cnNvcmNtZCgpOworfQorCisvKgorICogVW5kbyBhIHB1dGNtZGxpbmUoYywgRkFMU0UpLgorICovCisgICAgdm9pZAordW5wdXRjbWRsaW5lKCkKK3sKKyAgICBpZiAoY21kX3NpbGVudCkKKwlyZXR1cm47CisgICAgbXNnX25vX21vcmUgPSBUUlVFOworICAgIGlmIChjY2xpbmUuY21kbGVuID09IGNjbGluZS5jbWRwb3MpCisJbXNnX3B1dGNoYXIoJyAnKTsKKyAgICBlbHNlCisJZHJhd19jbWRsaW5lKGNjbGluZS5jbWRwb3MsIDEpOworICAgIG1zZ19ub19tb3JlID0gRkFMU0U7CisgICAgY3Vyc29yY21kKCk7Cit9CisKKy8qCisgKiBQdXQgdGhlIGdpdmVuIHN0cmluZywgb2YgdGhlIGdpdmVuIGxlbmd0aCwgb250byB0aGUgY29tbWFuZCBsaW5lLgorICogSWYgbGVuIGlzIC0xLCB0aGVuIFNUUkxFTigpIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBsZW5ndGguCisgKiBJZiAncmVkcmF3JyBpcyBUUlVFIHRoZW4gdGhlIG5ldyBwYXJ0IG9mIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgcmVtYWluaW5nCisgKiBwYXJ0IHdpbGwgYmUgcmVkcmF3biwgb3RoZXJ3aXNlIGl0IHdpbGwgbm90LiAgSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKKyAqIHR3aWNlIGluIGEgcm93LCB0aGVuICdyZWRyYXcnIHNob3VsZCBiZSBGQUxTRSBhbmQgcmVkcmF3Y21kKCkgc2hvdWxkIGJlCisgKiBjYWxsZWQgYWZ0ZXJ3YXJkcy4KKyAqLworICAgIGludAorcHV0X29uX2NtZGxpbmUoc3RyLCBsZW4sIHJlZHJhdykKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCXJlZHJhdzsKK3sKKyAgICBpbnQJCXJldHZhbDsKKyAgICBpbnQJCWk7CisgICAgaW50CQltOworICAgIGludAkJYzsKKworICAgIGlmIChsZW4gPCAwKQorCWxlbiA9IChpbnQpU1RSTEVOKHN0cik7CisKKyAgICAvKiBDaGVjayBpZiBjY2xpbmUuY21kYnVmZiBuZWVkcyB0byBiZSBsb25nZXIgKi8KKyAgICBpZiAoY2NsaW5lLmNtZGxlbiArIGxlbiArIDEgPj0gY2NsaW5lLmNtZGJ1ZmZsZW4pCisJcmV0dmFsID0gcmVhbGxvY19jbWRidWZmKGNjbGluZS5jbWRsZW4gKyBsZW4pOworICAgIGVsc2UKKwlyZXR2YWwgPSBPSzsKKyAgICBpZiAocmV0dmFsID09IE9LKQorICAgIHsKKwlpZiAoIWNjbGluZS5vdmVyc3RyaWtlKQorCXsKKwkgICAgbWNoX21lbW1vdmUoY2NsaW5lLmNtZGJ1ZmYgKyBjY2xpbmUuY21kcG9zICsgbGVuLAorCQkJCQkgICAgICAgY2NsaW5lLmNtZGJ1ZmYgKyBjY2xpbmUuY21kcG9zLAorCQkJCSAgICAgKHNpemVfdCkoY2NsaW5lLmNtZGxlbiAtIGNjbGluZS5jbWRwb3MpKTsKKwkgICAgY2NsaW5lLmNtZGxlbiArPSBsZW47CisJfQorCWVsc2UKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCSAgICB7CisJCS8qIENvdW50IG5yIG9mIGNoYXJhY3RlcnMgaW4gdGhlIG5ldyBzdHJpbmcuICovCisJCW0gPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9ICgqbWJfcHRyMmxlbl9jaGVjaykoc3RyICsgaSkpCisJCSAgICArK207CisJCS8qIENvdW50IG5yIG9mIGJ5dGVzIGluIGNtZGxpbmUgdGhhdCBhcmUgb3ZlcndyaXR0ZW4gYnkgdGhlc2UKKwkJICogY2hhcmFjdGVycy4gKi8KKwkJZm9yIChpID0gY2NsaW5lLmNtZHBvczsgaSA8IGNjbGluZS5jbWRsZW4gJiYgbSA+IDA7CisJCQkJIGkgKz0gKCptYl9wdHIybGVuX2NoZWNrKShjY2xpbmUuY21kYnVmZiArIGkpKQorCQkgICAgLS1tOworCQlpZiAoaSA8IGNjbGluZS5jbWRsZW4pCisJCXsKKwkJICAgIG1jaF9tZW1tb3ZlKGNjbGluZS5jbWRidWZmICsgY2NsaW5lLmNtZHBvcyArIGxlbiwKKwkJCSAgICBjY2xpbmUuY21kYnVmZiArIGksIChzaXplX3QpKGNjbGluZS5jbWRsZW4gLSBpKSk7CisJCSAgICBjY2xpbmUuY21kbGVuICs9IGNjbGluZS5jbWRwb3MgKyBsZW4gLSBpOworCQl9CisJCWVsc2UKKwkJICAgIGNjbGluZS5jbWRsZW4gPSBjY2xpbmUuY21kcG9zICsgbGVuOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICBpZiAoY2NsaW5lLmNtZHBvcyArIGxlbiA+IGNjbGluZS5jbWRsZW4pCisJCWNjbGluZS5jbWRsZW4gPSBjY2xpbmUuY21kcG9zICsgbGVuOworCX0KKwltY2hfbWVtbW92ZShjY2xpbmUuY21kYnVmZiArIGNjbGluZS5jbWRwb3MsIHN0ciwgKHNpemVfdClsZW4pOworCWNjbGluZS5jbWRidWZmW2NjbGluZS5jbWRsZW5dID0gTlVMOworCisjaWZkZWYgRkVBVF9NQllURQorCWlmIChlbmNfdXRmOCkKKwl7CisJICAgIC8qIFdoZW4gdGhlIGluc2VydGVkIHRleHQgc3RhcnRzIHdpdGggYSBjb21wb3NpbmcgY2hhcmFjdGVyLAorCSAgICAgKiBiYWNrdXAgdG8gdGhlIGNoYXJhY3RlciBiZWZvcmUgaXQuICBUaGVyZSBjb3VsZCBiZSB0d28gb2YgdGhlbS4KKwkgICAgICovCisJICAgIGkgPSAwOworCSAgICBjID0gdXRmX3B0cjJjaGFyKGNjbGluZS5jbWRidWZmICsgY2NsaW5lLmNtZHBvcyk7CisJICAgIHdoaWxlIChjY2xpbmUuY21kcG9zID4gMCAmJiB1dGZfaXNjb21wb3NpbmcoYykpCisJICAgIHsKKwkJaSA9ICgqbWJfaGVhZF9vZmYpKGNjbGluZS5jbWRidWZmLAorCQkJCSAgICAgIGNjbGluZS5jbWRidWZmICsgY2NsaW5lLmNtZHBvcyAtIDEpICsgMTsKKwkJY2NsaW5lLmNtZHBvcyAtPSBpOworCQlsZW4gKz0gaTsKKwkJYyA9IHV0Zl9wdHIyY2hhcihjY2xpbmUuY21kYnVmZiArIGNjbGluZS5jbWRwb3MpOworCSAgICB9CisjIGlmZGVmIEZFQVRfQVJBQklDCisJICAgIGlmIChpID09IDAgJiYgY2NsaW5lLmNtZHBvcyA+IDAgJiYgYXJhYmljX21heWNvbWJpbmUoYykpCisJICAgIHsKKwkJLyogQ2hlY2sgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBmb3IgQXJhYmljIGNvbWJpbmluZyBwYWlyLiAqLworCQlpID0gKCptYl9oZWFkX29mZikoY2NsaW5lLmNtZGJ1ZmYsCisJCQkJICAgICAgY2NsaW5lLmNtZGJ1ZmYgKyBjY2xpbmUuY21kcG9zIC0gMSkgKyAxOworCQlpZiAoYXJhYmljX2NvbWJpbmUodXRmX3B0cjJjaGFyKGNjbGluZS5jbWRidWZmCisJCQkJCQkgICAgICsgY2NsaW5lLmNtZHBvcyAtIGkpLCBjKSkKKwkJeworCQkgICAgY2NsaW5lLmNtZHBvcyAtPSBpOworCQkgICAgbGVuICs9IGk7CisJCX0KKwkJZWxzZQorCQkgICAgaSA9IDA7CisJICAgIH0KKyMgZW5kaWYKKwkgICAgaWYgKGkgIT0gMCkKKwkgICAgeworCQkvKiBBbHNvIGJhY2t1cCB0aGUgY3Vyc29yIHBvc2l0aW9uLiAqLworCQlpID0gcHRyMmNlbGxzKGNjbGluZS5jbWRidWZmICsgY2NsaW5lLmNtZHBvcyk7CisJCWNjbGluZS5jbWRzcG9zIC09IGk7CisJCW1zZ19jb2wgLT0gaTsKKwkJaWYgKG1zZ19jb2wgPCAwKQorCQl7CisJCSAgICBtc2dfY29sICs9IENvbHVtbnM7CisJCSAgICAtLW1zZ19yb3c7CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZgorCisJaWYgKHJlZHJhdyAmJiAhY21kX3NpbGVudCkKKwl7CisJICAgIG1zZ19ub19tb3JlID0gVFJVRTsKKwkgICAgaSA9IGNtZGxpbmVfcm93OworCSAgICBkcmF3X2NtZGxpbmUoY2NsaW5lLmNtZHBvcywgY2NsaW5lLmNtZGxlbiAtIGNjbGluZS5jbWRwb3MpOworCSAgICAvKiBBdm9pZCBjbGVhcmluZyB0aGUgcmVzdCBvZiB0aGUgbGluZSB0b28gb2Z0ZW4uICovCisJICAgIGlmIChjbWRsaW5lX3JvdyAhPSBpIHx8IGNjbGluZS5vdmVyc3RyaWtlKQorCQltc2dfY2xyX2VvcygpOworCSAgICBtc2dfbm9fbW9yZSA9IEZBTFNFOworCX0KKyNpZmRlZiBGRUFUX0ZLTUFQCisJLyoKKwkgKiBJZiB3ZSBhcmUgaW4gRmFyc2kgY29tbWFuZCBtb2RlLCB0aGUgY2hhcmFjdGVyIGlucHV0IG11c3QgYmUgaW4KKwkgKiBJbnNlcnQgbW9kZS4gU28gZG8gbm90IGFkdmFuY2UgdGhlIGNtZHBvcy4KKwkgKi8KKwlpZiAoIWNtZF9ma21hcCkKKyNlbmRpZgorCXsKKwkgICAgaWYgKEtleVR5cGVkKQorCQltID0gQ29sdW1ucyAqIFJvd3M7CisJICAgIGVsc2UKKwkJbSA9IE1BWENPTDsKKwkgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQorCSAgICB7CisJCWMgPSBjbWRsaW5lX2NoYXJzaXplKGNjbGluZS5jbWRwb3MpOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJLyogY291bnQgIj4iIGZvciBhIGRvdWJsZS13aWRlIGNoYXIgdGhhdCBkb2Vzbid0IGZpdC4gKi8KKwkJaWYgKGhhc19tYnl0ZSkKKwkJICAgIGNvcnJlY3RfY21kc3BvcyhjY2xpbmUuY21kcG9zLCBjKTsKKyNlbmRpZgorCQkvKiBTdG9wIGN1cnNvciBhdCB0aGUgZW5kIG9mIHRoZSBzY3JlZW4gKi8KKwkJaWYgKGNjbGluZS5jbWRzcG9zICsgYyA+PSBtKQorCQkgICAgYnJlYWs7CisJCWNjbGluZS5jbWRzcG9zICs9IGM7CisjaWZkZWYgRkVBVF9NQllURQorCQlpZiAoaGFzX21ieXRlKQorCQl7CisJCSAgICBjID0gKCptYl9wdHIybGVuX2NoZWNrKShjY2xpbmUuY21kYnVmZiArIGNjbGluZS5jbWRwb3MpIC0gMTsKKwkJICAgIGlmIChjID4gbGVuIC0gaSAtIDEpCisJCQljID0gbGVuIC0gaSAtIDE7CisJCSAgICBjY2xpbmUuY21kcG9zICs9IGM7CisJCSAgICBpICs9IGM7CisJCX0KKyNlbmRpZgorCQkrK2NjbGluZS5jbWRwb3M7CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIChyZWRyYXcpCisJbXNnX2NoZWNrKCk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIEZFQVRfV0lMRE1FTlUKKy8qCisgKiBEZWxldGUgY2hhcmFjdGVycyBvbiB0aGUgY29tbWFuZCBsaW5lLCBmcm9tICJmcm9tIiB0byB0aGUgY3VycmVudAorICogcG9zaXRpb24uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY21kbGluZV9kZWwoZnJvbSkKKyAgICBpbnQgZnJvbTsKK3sKKyAgICBtY2hfbWVtbW92ZShjY2xpbmUuY21kYnVmZiArIGZyb20sIGNjbGluZS5jbWRidWZmICsgY2NsaW5lLmNtZHBvcywKKwkgICAgKHNpemVfdCkoY2NsaW5lLmNtZGxlbiAtIGNjbGluZS5jbWRwb3MgKyAxKSk7CisgICAgY2NsaW5lLmNtZGxlbiAtPSBjY2xpbmUuY21kcG9zIC0gZnJvbTsKKyAgICBjY2xpbmUuY21kcG9zID0gZnJvbTsKK30KKyNlbmRpZgorCisvKgorICogdGhpcyBmdWN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBzY3JlZW4gc2l6ZSBjaGFuZ2VzIGFuZCB3aXRoIGluY3JlbWVudGFsCisgKiBzZWFyY2gKKyAqLworICAgIHZvaWQKK3JlZHJhd2NtZGxpbmUoKQoreworICAgIGlmIChjbWRfc2lsZW50KQorCXJldHVybjsKKyAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisgICAgY29tcHV0ZV9jbWRyb3coKTsKKyAgICByZWRyYXdjbWQoKTsKKyAgICBjdXJzb3JjbWQoKTsKK30KKworICAgIHN0YXRpYyB2b2lkCityZWRyYXdjbWRwcm9tcHQoKQoreworICAgIGludAkJaTsKKworICAgIGlmIChjbWRfc2lsZW50KQorCXJldHVybjsKKyAgICBpZiAoY2NsaW5lLmNtZGZpcnN0YykKKwltc2dfcHV0Y2hhcihjY2xpbmUuY21kZmlyc3RjKTsKKyAgICBpZiAoY2NsaW5lLmNtZHByb21wdCAhPSBOVUxMKQorICAgIHsKKwltc2dfcHV0c19hdHRyKGNjbGluZS5jbWRwcm9tcHQsIGNjbGluZS5jbWRhdHRyKTsKKwljY2xpbmUuY21kaW5kZW50ID0gbXNnX2NvbCArIChtc2dfcm93IC0gY21kbGluZV9yb3cpICogQ29sdW1uczsKKwkvKiBkbyB0aGUgcmV2ZXJzZSBvZiBzZXRfY21kc3BvcygpICovCisJaWYgKGNjbGluZS5jbWRmaXJzdGMpCisJICAgIC0tY2NsaW5lLmNtZGluZGVudDsKKyAgICB9CisgICAgZWxzZQorCWZvciAoaSA9IGNjbGluZS5jbWRpbmRlbnQ7IGkgPiAwOyAtLWkpCisJICAgIG1zZ19wdXRjaGFyKCcgJyk7Cit9CisKKy8qCisgKiBSZWRyYXcgd2hhdCBpcyBjdXJyZW50bHkgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAqLworICAgIHZvaWQKK3JlZHJhd2NtZCgpCit7CisgICAgaWYgKGNtZF9zaWxlbnQpCisJcmV0dXJuOworCisgICAgbXNnX3N0YXJ0KCk7CisgICAgcmVkcmF3Y21kcHJvbXB0KCk7CisKKyAgICAvKiBEb24ndCB1c2UgbW9yZSBwcm9tcHQsIHRydW5jYXRlIHRoZSBjbWRsaW5lIGlmIGl0IGRvZXNuJ3QgZml0LiAqLworICAgIG1zZ19ub19tb3JlID0gVFJVRTsKKyAgICBkcmF3X2NtZGxpbmUoMCwgY2NsaW5lLmNtZGxlbik7CisgICAgbXNnX2Nscl9lb3MoKTsKKyAgICBtc2dfbm9fbW9yZSA9IEZBTFNFOworCisgICAgc2V0X2NtZHNwb3NfY3Vyc29yKCk7CisKKyAgICAvKgorICAgICAqIEFuIGVtc2coKSBiZWZvcmUgbWF5IGhhdmUgc2V0IG1zZ19zY3JvbGwuIFRoaXMgaXMgdXNlZCBpbiBub3JtYWwgbW9kZSwKKyAgICAgKiBpbiBjbWRsaW5lIG1vZGUgd2UgY2FuIHJlc2V0IHRoZW0gbm93LgorICAgICAqLworICAgIG1zZ19zY3JvbGwgPSBGQUxTRTsJCS8qIG5leHQgbWVzc2FnZSBvdmVyd3JpdGVzIGNtZGxpbmUgKi8KKworICAgIC8qIFR5cGluZyAnOicgYXQgdGhlIG1vcmUgcHJvbXB0IG1heSBzZXQgc2tpcF9yZWRyYXcuICBXZSBkb24ndCB3YW50IHRoaXMKKyAgICAgKiBpbiBjbWRsaW5lIG1vZGUgKi8KKyAgICBza2lwX3JlZHJhdyA9IEZBTFNFOworfQorCisgICAgdm9pZAorY29tcHV0ZV9jbWRyb3coKQoreworICAgIGlmIChleG1vZGVfYWN0aXZlIHx8IG1zZ19zY3JvbGxlZCkKKwljbWRsaW5lX3JvdyA9IFJvd3MgLSAxOworICAgIGVsc2UKKwljbWRsaW5lX3JvdyA9IFdfV0lOUk9XKGxhc3R3aW4pICsgbGFzdHdpbi0+d19oZWlnaHQKKwkJCQkJCSAgICsgV19TVEFUVVNfSEVJR0hUKGxhc3R3aW4pOworfQorCisgICAgc3RhdGljIHZvaWQKK2N1cnNvcmNtZCgpCit7CisgICAgaWYgKGNtZF9zaWxlbnQpCisJcmV0dXJuOworCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKyAgICBpZiAoY21kbXNnX3JsKQorICAgIHsKKwltc2dfcm93ID0gY21kbGluZV9yb3cgICsgKGNjbGluZS5jbWRzcG9zIC8gKGludCkoQ29sdW1ucyAtIDEpKTsKKwltc2dfY29sID0gKGludClDb2x1bW5zIC0gKGNjbGluZS5jbWRzcG9zICUgKGludCkoQ29sdW1ucyAtIDEpKSAtIDE7CisJaWYgKG1zZ19yb3cgPD0gMCkKKwkgICAgbXNnX3JvdyA9IFJvd3MgLSAxOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJbXNnX3JvdyA9IGNtZGxpbmVfcm93ICsgKGNjbGluZS5jbWRzcG9zIC8gKGludClDb2x1bW5zKTsKKwltc2dfY29sID0gY2NsaW5lLmNtZHNwb3MgJSAoaW50KUNvbHVtbnM7CisJaWYgKG1zZ19yb3cgPj0gUm93cykKKwkgICAgbXNnX3JvdyA9IFJvd3MgLSAxOworICAgIH0KKworICAgIHdpbmRnb3RvKG1zZ19yb3csIG1zZ19jb2wpOworI2lmIGRlZmluZWQoRkVBVF9YSU0pICYmIGRlZmluZWQoRkVBVF9HVUlfR1RLKQorICAgIHJlZHJhd2NtZF9wcmVlZGl0KCk7CisjZW5kaWYKKyNpZmRlZiBNQ0hfQ1VSU09SX1NIQVBFCisgICAgbWNoX3VwZGF0ZV9jdXJzb3IoKTsKKyNlbmRpZgorfQorCisgICAgdm9pZAorZ290b2NtZGxpbmUoY2xyKQorICAgIGludAkJICAgIGNscjsKK3sKKyAgICBtc2dfc3RhcnQoKTsKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorICAgIGlmIChjbWRtc2dfcmwpCisJbXNnX2NvbCA9IENvbHVtbnMgLSAxOworICAgIGVsc2UKKyNlbmRpZgorCW1zZ19jb2wgPSAwOwkgICAgLyogYWx3YXlzIHN0YXJ0IGluIGNvbHVtbiAwICovCisgICAgaWYgKGNscikJCSAgICAvKiBjbGVhciB0aGUgYm90dG9tIGxpbmUocykgKi8KKwltc2dfY2xyX2VvcygpOwkgICAgLyogd2lsbCByZXNldCBjbGVhcl9jbWRsaW5lICovCisgICAgd2luZGdvdG8oY21kbGluZV9yb3csIDApOworfQorCisvKgorICogQ2hlY2sgdGhlIHdvcmQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvciBmb3IgYW4gYWJicmV2aWF0aW9uLgorICogQ2FsbGVkIHdoZW4gdGhlIG5vbi1pZCBjaGFyYWN0ZXIgImMiIGhhcyBiZWVuIGVudGVyZWQuCisgKiBXaGVuIGFuIGFiYnJldmlhdGlvbiBpcyByZWNvZ25pemVkIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgdGV4dCB3aXRoCisgKiBiYWNrc3BhY2VzIGFuZCB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nIGlzIGluc2VydGVkLCBmb2xsb3dlZCBieSAiYyIuCisgKi8KKyAgICBzdGF0aWMgaW50CitjY2hlY2tfYWJicihjKQorICAgIGludCBjOworeworICAgIGlmIChwX3Bhc3RlIHx8IG5vX2FiYnIpCSAgICAvKiBubyBhYmJyZXZpYXRpb25zIG9yIGluIHBhc3RlIG1vZGUgKi8KKwlyZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gY2hlY2tfYWJicihjLCBjY2xpbmUuY21kYnVmZiwgY2NsaW5lLmNtZHBvcywgMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gRkFJTCBpZiB0aGlzIGlzIG5vdCBhbiBhcHByb3ByaWF0ZSBjb250ZXh0IGluIHdoaWNoIHRvIGRvCisgKiBjb21wbGV0aW9uIG9mIGFueXRoaW5nLCByZXR1cm4gT0sgaWYgaXQgaXMgKGV2ZW4gaWYgdGhlcmUgYXJlIG5vIG1hdGNoZXMpLgorICogRm9yIHRoZSBjYWxsZXIsIHRoaXMgbWVhbnMgdGhhdCB0aGUgY2hhcmFjdGVyIGlzIGp1c3QgcGFzc2VkIHRocm91Z2ggbGlrZSBhCisgKiBub3JtYWwgY2hhcmFjdGVyIChpbnN0ZWFkIG9mIGJlaW5nIGV4cGFuZGVkKS4gIFRoaXMgYWxsb3dzIDpzL15JXkQgZXRjLgorICovCisgICAgc3RhdGljIGludAorbmV4dHdpbGQoeHAsIHR5cGUsIG9wdGlvbnMpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGludAkJdHlwZTsKKyAgICBpbnQJCW9wdGlvbnM7CS8qIGV4dHJhIG9wdGlvbnMgZm9yIEV4cGFuZE9uZSgpICovCit7CisgICAgaW50CQlpLCBqOworICAgIGNoYXJfdQkqcDE7CisgICAgY2hhcl91CSpwMjsKKyAgICBpbnQJCW9sZGxlbjsKKyAgICBpbnQJCWRpZmZsZW47CisgICAgaW50CQl2OworCisgICAgaWYgKHhwLT54cF9udW1maWxlcyA9PSAtMSkKKyAgICB7CisJc2V0X2V4cGFuZF9jb250ZXh0KHhwKTsKKwljbWRfc2hvd3RhaWwgPSBleHBhbmRfc2hvd3RhaWwoeHApOworICAgIH0KKworICAgIGlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfVU5TVUNDRVNTRlVMKQorICAgIHsKKwliZWVwX2ZsdXNoKCk7CisJcmV0dXJuIE9LOyAgLyogU29tZXRoaW5nIGlsbGVnYWwgb24gY29tbWFuZCBsaW5lICovCisgICAgfQorICAgIGlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfTk9USElORykKKyAgICB7CisJLyogQ2FsbGVyIGNhbiB1c2UgdGhlIGNoYXJhY3RlciBhcyBhIG5vcm1hbCBjaGFyIGluc3RlYWQgKi8KKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICBNU0dfUFVUUygiLi4uIik7CSAgICAvKiBzaG93IHRoYXQgd2UgYXJlIGJ1c3kgKi8KKyAgICBvdXRfZmx1c2goKTsKKworICAgIGkgPSAoaW50KSh4cC0+eHBfcGF0dGVybiAtIGNjbGluZS5jbWRidWZmKTsKKyAgICBvbGRsZW4gPSBjY2xpbmUuY21kcG9zIC0gaTsKKworICAgIGlmICh0eXBlID09IFdJTERfTkVYVCB8fCB0eXBlID09IFdJTERfUFJFVikKKyAgICB7CisJLyoKKwkgKiBHZXQgbmV4dC9wcmV2aW91cyBtYXRjaCBmb3IgYSBwcmV2aW91cyBleHBhbmRlZCBwYXR0ZXJuLgorCSAqLworCXAyID0gRXhwYW5kT25lKHhwLCBOVUxMLCBOVUxMLCAwLCB0eXBlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIFRyYW5zbGF0ZSBzdHJpbmcgaW50byBwYXR0ZXJuIGFuZCBleHBhbmQgaXQuCisJICovCisJaWYgKChwMSA9IGFkZHN0YXIoJmNjbGluZS5jbWRidWZmW2ldLCBvbGRsZW4sIHhwLT54cF9jb250ZXh0KSkgPT0gTlVMTCkKKwkgICAgcDIgPSBOVUxMOworCWVsc2UKKwl7CisJICAgIHAyID0gRXhwYW5kT25lKHhwLCBwMSwgdmltX3N0cm5zYXZlKCZjY2xpbmUuY21kYnVmZltpXSwgb2xkbGVuKSwKKwkJICAgIFdJTERfSE9NRV9SRVBMQUNFfFdJTERfQUREX1NMQVNIfFdJTERfU0lMRU5UfFdJTERfRVNDQVBFCisJCQkJCQkJICAgICAgfG9wdGlvbnMsIHR5cGUpOworCSAgICB2aW1fZnJlZShwMSk7CisJICAgIC8qIGxvbmdlc3QgbWF0Y2g6IG1ha2Ugc3VyZSBpdCBpcyBub3Qgc2hvcnRlciAoaGFwcGVucyB3aXRoIDpoZWxwICovCisJICAgIGlmIChwMiAhPSBOVUxMICYmIHR5cGUgPT0gV0lMRF9MT05HRVNUKQorCSAgICB7CisJCWZvciAoaiA9IDA7IGogPCBvbGRsZW47ICsraikKKwkJICAgICBpZiAoY2NsaW5lLmNtZGJ1ZmZbaSArIGpdID09ICcqJworCQkJICAgICB8fCBjY2xpbmUuY21kYnVmZltpICsgal0gPT0gJz8nKQorCQkJIGJyZWFrOworCQlpZiAoKGludClTVFJMRU4ocDIpIDwgaikKKwkJeworCQkgICAgdmltX2ZyZWUocDIpOworCQkgICAgcDIgPSBOVUxMOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKHAyICE9IE5VTEwgJiYgIWdvdF9pbnQpCisgICAgeworCWRpZmZsZW4gPSAoaW50KVNUUkxFTihwMikgLSBvbGRsZW47CisJaWYgKGNjbGluZS5jbWRsZW4gKyBkaWZmbGVuID4gY2NsaW5lLmNtZGJ1ZmZsZW4gLSA0KQorCXsKKwkgICAgdiA9IHJlYWxsb2NfY21kYnVmZihjY2xpbmUuY21kbGVuICsgZGlmZmxlbik7CisJICAgIHhwLT54cF9wYXR0ZXJuID0gY2NsaW5lLmNtZGJ1ZmYgKyBpOworCX0KKwllbHNlCisJICAgIHYgPSBPSzsKKwlpZiAodiA9PSBPSykKKwl7CisJICAgIHZpbV9zdHJuY3B5KCZjY2xpbmUuY21kYnVmZltjY2xpbmUuY21kcG9zICsgZGlmZmxlbl0sCisJCQkJCSAgICAgICAmY2NsaW5lLmNtZGJ1ZmZbY2NsaW5lLmNtZHBvc10sCisJCSAgICBjY2xpbmUuY21kbGVuIC0gY2NsaW5lLmNtZHBvcyArIDEpOworCSAgICBTVFJOQ1BZKCZjY2xpbmUuY21kYnVmZltpXSwgcDIsIFNUUkxFTihwMikpOworCSAgICBjY2xpbmUuY21kbGVuICs9IGRpZmZsZW47CisJICAgIGNjbGluZS5jbWRwb3MgKz0gZGlmZmxlbjsKKwl9CisgICAgfQorICAgIHZpbV9mcmVlKHAyKTsKKworICAgIHJlZHJhd2NtZCgpOworCisgICAgLyogV2hlbiBleHBhbmRpbmcgYSAiOm1hcCIgY29tbWFuZCBhbmQgbm8gbWF0Y2hlcyBhcmUgZm91bmQsIGFzc3VtZSB0aGF0CisgICAgICogdGhlIGtleSBpcyBzdXBwb3NlZCB0byBiZSBpbnNlcnRlZCBsaXRlcmFsbHkgKi8KKyAgICBpZiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX01BUFBJTkdTICYmIHAyID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBpZiAoeHAtPnhwX251bWZpbGVzIDw9IDAgJiYgcDIgPT0gTlVMTCkKKwliZWVwX2ZsdXNoKCk7CisgICAgZWxzZSBpZiAoeHAtPnhwX251bWZpbGVzID09IDEpCisJLyogZnJlZSBleHBhbmRlZCBwYXR0ZXJuICovCisJKHZvaWQpRXhwYW5kT25lKHhwLCBOVUxMLCBOVUxMLCAwLCBXSUxEX0ZSRUUpOworCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogRG8gd2lsZGNhcmQgZXhwYW5zaW9uIG9uIHRoZSBzdHJpbmcgJ3N0cicuCisgKiBDaGFycyB0aGF0IHNob3VsZCBub3QgYmUgZXhwYW5kZWQgbXVzdCBiZSBwcmVjZWRlZCB3aXRoIGEgYmFja3NsYXNoLgorICogUmV0dXJuIGEgcG9pbnRlciB0byBhbGxvY2VkIG1lbW9yeSBjb250YWluaW5nIHRoZSBuZXcgc3RyaW5nLgorICogUmV0dXJuIE5VTEwgZm9yIGZhaWx1cmUuCisgKgorICogUmVzdWx0cyBhcmUgY2FjaGVkIGluIHhwLT54cF9maWxlcyBhbmQgeHAtPnhwX251bWZpbGVzLgorICoKKyAqIG1vZGUgPSBXSUxEX0ZSRUU6CSAgICBqdXN0IGZyZWUgcHJldmlvdXNseSBleHBhbmRlZCBtYXRjaGVzCisgKiBtb2RlID0gV0lMRF9FWFBBTkRfRlJFRTogbm9ybWFsIGV4cGFuc2lvbiwgZG8gbm90IGtlZXAgbWF0Y2hlcworICogbW9kZSA9IFdJTERfRVhQQU5EX0tFRVA6IG5vcm1hbCBleHBhbnNpb24sIGtlZXAgbWF0Y2hlcworICogbW9kZSA9IFdJTERfTkVYVDoJICAgIHVzZSBuZXh0IG1hdGNoIGluIG11bHRpcGxlIG1hdGNoLCB3cmFwIHRvIGZpcnN0CisgKiBtb2RlID0gV0lMRF9QUkVWOgkgICAgdXNlIHByZXZpb3VzIG1hdGNoIGluIG11bHRpcGxlIG1hdGNoLCB3cmFwIHRvIGZpcnN0CisgKiBtb2RlID0gV0lMRF9BTEw6CSAgICByZXR1cm4gYWxsIG1hdGNoZXMgY29uY2F0ZW5hdGVkCisgKiBtb2RlID0gV0lMRF9MT05HRVNUOgkgICAgcmV0dXJuIGxvbmdlc3QgbWF0Y2hlZCBwYXJ0CisgKgorICogb3B0aW9ucyA9IFdJTERfTElTVF9OT1RGT1VORDogICAgbGlzdCBlbnRyaWVzIHdpdGhvdXQgYSBtYXRjaAorICogb3B0aW9ucyA9IFdJTERfSE9NRV9SRVBMQUNFOgkgICAgZG8gaG9tZV9yZXBsYWNlKCkgZm9yIGJ1ZmZlciBuYW1lcworICogb3B0aW9ucyA9IFdJTERfVVNFX05MOgkgICAgVXNlICdcbicgZm9yIFdJTERfQUxMCisgKiBvcHRpb25zID0gV0lMRF9OT19CRUVQOgkgICAgRG9uJ3QgYmVlcCBmb3IgbXVsdGlwbGUgbWF0Y2hlcworICogb3B0aW9ucyA9IFdJTERfQUREX1NMQVNIOgkgICAgYWRkIGEgc2xhc2ggYWZ0ZXIgZGlyZWN0b3J5IG5hbWVzCisgKiBvcHRpb25zID0gV0lMRF9LRUVQX0FMTDoJICAgIGRvbid0IHJlbW92ZSAnd2lsZGlnbm9yZScgZW50cmllcworICogb3B0aW9ucyA9IFdJTERfU0lMRU5UOgkgICAgZG9uJ3QgcHJpbnQgd2FybmluZyBtZXNzYWdlcworICogb3B0aW9ucyA9IFdJTERfRVNDQVBFOgkgICAgcHV0IGJhY2tzbGFzaCBiZWZvcmUgc3BlY2lhbCBjaGFycworICoKKyAqIFRoZSB2YXJpYWJsZXMgeHAtPnhwX2NvbnRleHQgYW5kIHhwLT54cF9iYWNrc2xhc2ggbXVzdCBoYXZlIGJlZW4gc2V0IQorICovCisgICAgY2hhcl91ICoKK0V4cGFuZE9uZSh4cCwgc3RyLCBvcmlnLCBvcHRpb25zLCBtb2RlKQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBjaGFyX3UJKm9yaWc7CSAgICAvKiBhbGxvY2F0ZWQgY29weSBvZiBvcmlnaW5hbCBvZiBleHBhbmRlZCBzdHJpbmcgKi8KKyAgICBpbnQJCW9wdGlvbnM7CisgICAgaW50CQltb2RlOworeworICAgIGNoYXJfdQkqc3MgPSBOVUxMOworICAgIHN0YXRpYyBpbnQJZmluZGV4OworICAgIHN0YXRpYyBjaGFyX3UgKm9yaWdfc2F2ZSA9IE5VTEw7CS8qIGtlcHQgdmFsdWUgb2Ygb3JpZyAqLworICAgIGludAkJaTsKKyAgICBsb25nX3UJbGVuOworICAgIGludAkJbm9uX3N1Zl9tYXRjaDsJCS8qIG51bWJlciB3aXRob3V0IG1hdGNoaW5nIHN1ZmZpeCAqLworCisgICAgLyoKKyAgICAgKiBmaXJzdCBoYW5kbGUgdGhlIGNhc2Ugb2YgdXNpbmcgYW4gb2xkIG1hdGNoCisgICAgICovCisgICAgaWYgKG1vZGUgPT0gV0lMRF9ORVhUIHx8IG1vZGUgPT0gV0lMRF9QUkVWKQorICAgIHsKKwlpZiAoeHAtPnhwX251bWZpbGVzID4gMCkKKwl7CisJICAgIGlmIChtb2RlID09IFdJTERfUFJFVikKKwkgICAgeworCQlpZiAoZmluZGV4ID09IC0xKQorCQkgICAgZmluZGV4ID0geHAtPnhwX251bWZpbGVzOworCQktLWZpbmRleDsKKwkgICAgfQorCSAgICBlbHNlICAgIC8qIG1vZGUgPT0gV0lMRF9ORVhUICovCisJCSsrZmluZGV4OworCisJICAgIC8qCisJICAgICAqIFdoZW4gd3JhcHBpbmcgYXJvdW5kLCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZywgc2V0IGZpbmRleCB0bworCSAgICAgKiAtMS4KKwkgICAgICovCisJICAgIGlmIChmaW5kZXggPCAwKQorCSAgICB7CisJCWlmIChvcmlnX3NhdmUgPT0gTlVMTCkKKwkJICAgIGZpbmRleCA9IHhwLT54cF9udW1maWxlcyAtIDE7CisJCWVsc2UKKwkJICAgIGZpbmRleCA9IC0xOworCSAgICB9CisJICAgIGlmIChmaW5kZXggPj0geHAtPnhwX251bWZpbGVzKQorCSAgICB7CisJCWlmIChvcmlnX3NhdmUgPT0gTlVMTCkKKwkJICAgIGZpbmRleCA9IDA7CisJCWVsc2UKKwkJICAgIGZpbmRleCA9IC0xOworCSAgICB9CisjaWZkZWYgRkVBVF9XSUxETUVOVQorCSAgICBpZiAocF93bW51KQorCQl3aW5fcmVkcl9zdGF0dXNfbWF0Y2hlcyh4cCwgeHAtPnhwX251bWZpbGVzLCB4cC0+eHBfZmlsZXMsCisJCQkJCQkJZmluZGV4LCBjbWRfc2hvd3RhaWwpOworI2VuZGlmCisJICAgIGlmIChmaW5kZXggPT0gLTEpCisJCXJldHVybiB2aW1fc3Ryc2F2ZShvcmlnX3NhdmUpOworCSAgICByZXR1cm4gdmltX3N0cnNhdmUoeHAtPnhwX2ZpbGVzW2ZpbmRleF0pOworCX0KKwllbHNlCisJICAgIHJldHVybiBOVUxMOworICAgIH0KKworLyogZnJlZSBvbGQgbmFtZXMgKi8KKyAgICBpZiAoeHAtPnhwX251bWZpbGVzICE9IC0xICYmIG1vZGUgIT0gV0lMRF9BTEwgJiYgbW9kZSAhPSBXSUxEX0xPTkdFU1QpCisgICAgeworCUZyZWVXaWxkKHhwLT54cF9udW1maWxlcywgeHAtPnhwX2ZpbGVzKTsKKwl4cC0+eHBfbnVtZmlsZXMgPSAtMTsKKwl2aW1fZnJlZShvcmlnX3NhdmUpOworCW9yaWdfc2F2ZSA9IE5VTEw7CisgICAgfQorICAgIGZpbmRleCA9IDA7CisKKyAgICBpZiAobW9kZSA9PSBXSUxEX0ZSRUUpCS8qIG9ubHkgcmVsZWFzZSBmaWxlIG5hbWUgKi8KKwlyZXR1cm4gTlVMTDsKKworICAgIGlmICh4cC0+eHBfbnVtZmlsZXMgPT0gLTEpCisgICAgeworCXZpbV9mcmVlKG9yaWdfc2F2ZSk7CisJb3JpZ19zYXZlID0gb3JpZzsKKworCS8qCisJICogRG8gdGhlIGV4cGFuc2lvbi4KKwkgKi8KKwlpZiAoRXhwYW5kRnJvbUNvbnRleHQoeHAsIHN0ciwgJnhwLT54cF9udW1maWxlcywgJnhwLT54cF9maWxlcywKKwkJCQkJCQkgICAgIG9wdGlvbnMpID09IEZBSUwpCisJeworI2lmZGVmIEZOQU1FX0lMTEVHQUwKKwkgICAgLyogSWxsZWdhbCBmaWxlIG5hbWUgaGFzIGJlZW4gc2lsZW50bHkgc2tpcHBlZC4gIEJ1dCB3aGVuIHRoZXJlCisJICAgICAqIGFyZSB3aWxkY2FyZHMsIHRoZSByZWFsIHByb2JsZW0gaXMgdGhhdCB0aGVyZSB3YXMgbm8gbWF0Y2gsCisJICAgICAqIGNhdXNpbmcgdGhlIHBhdHRlcm4gdG8gYmUgYWRkZWQsIHdoaWNoIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMuCisJICAgICAqLworCSAgICBpZiAoIShvcHRpb25zICYgV0lMRF9TSUxFTlQpICYmIChvcHRpb25zICYgV0lMRF9MSVNUX05PVEZPVU5EKSkKKwkJRU1TRzIoXyhlX25vbWF0Y2gyKSwgc3RyKTsKKyNlbmRpZgorCX0KKwllbHNlIGlmICh4cC0+eHBfbnVtZmlsZXMgPT0gMCkKKwl7CisJICAgIGlmICghKG9wdGlvbnMgJiBXSUxEX1NJTEVOVCkpCisJCUVNU0cyKF8oZV9ub21hdGNoMiksIHN0cik7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIEVzY2FwZSB0aGUgbWF0Y2hlcyBmb3IgdXNlIG9uIHRoZSBjb21tYW5kIGxpbmUuICovCisJICAgIEV4cGFuZEVzY2FwZSh4cCwgc3RyLCB4cC0+eHBfbnVtZmlsZXMsIHhwLT54cF9maWxlcywgb3B0aW9ucyk7CisKKwkgICAgLyoKKwkgICAgICogQ2hlY2sgZm9yIG1hdGNoaW5nIHN1ZmZpeGVzIGluIGZpbGUgbmFtZXMuCisJICAgICAqLworCSAgICBpZiAobW9kZSAhPSBXSUxEX0FMTCAmJiBtb2RlICE9IFdJTERfTE9OR0VTVCkKKwkgICAgeworCQlpZiAoeHAtPnhwX251bWZpbGVzKQorCQkgICAgbm9uX3N1Zl9tYXRjaCA9IHhwLT54cF9udW1maWxlczsKKwkJZWxzZQorCQkgICAgbm9uX3N1Zl9tYXRjaCA9IDE7CisJCWlmICgoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0ZJTEVTCisJCQkgICAgfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0RJUkVDVE9SSUVTKQorCQkJJiYgeHAtPnhwX251bWZpbGVzID4gMSkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIE1vcmUgdGhhbiBvbmUgbWF0Y2g7IGNoZWNrIHN1ZmZpeC4KKwkJICAgICAqIFRoZSBmaWxlcyB3aWxsIGhhdmUgYmVlbiBzb3J0ZWQgb24gbWF0Y2hpbmcgc3VmZml4IGluCisJCSAgICAgKiBleHBhbmRfd2lsZGNhcmRzLCBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlIGZpcnN0IHR3by4KKwkJICAgICAqLworCQkgICAgbm9uX3N1Zl9tYXRjaCA9IDA7CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQorCQkJaWYgKG1hdGNoX3N1ZmZpeCh4cC0+eHBfZmlsZXNbaV0pKQorCQkJICAgICsrbm9uX3N1Zl9tYXRjaDsKKwkJfQorCQlpZiAobm9uX3N1Zl9tYXRjaCAhPSAxKQorCQl7CisJCSAgICAvKiBDYW4gd2UgZXZlciBnZXQgaGVyZSB1bmxlc3MgaXQncyB3aGlsZSBleHBhbmRpbmcKKwkJICAgICAqIGludGVyYWN0aXZlbHk/ICBJZiBub3QsIHdlIGNhbiBnZXQgcmlkIG9mIHRoaXMgYWxsCisJCSAgICAgKiB0b2dldGhlci4gRG9uJ3QgcmVhbGx5IHdhbnQgdG8gd2FpdCBmb3IgdGhpcyBtZXNzYWdlCisJCSAgICAgKiAoYW5kIHBvc3NpYmx5IGhhdmUgdG8gaGl0IHJldHVybiB0byBjb250aW51ZSEpLgorCQkgICAgICovCisJCSAgICBpZiAoIShvcHRpb25zICYgV0lMRF9TSUxFTlQpKQorCQkJRU1TRyhfKGVfdG9vbWFueSkpOworCQkgICAgZWxzZSBpZiAoIShvcHRpb25zICYgV0lMRF9OT19CRUVQKSkKKwkJCWJlZXBfZmx1c2goKTsKKwkJfQorCQlpZiAoIShub25fc3VmX21hdGNoICE9IDEgJiYgbW9kZSA9PSBXSUxEX0VYUEFORF9GUkVFKSkKKwkJICAgIHNzID0gdmltX3N0cnNhdmUoeHAtPnhwX2ZpbGVzWzBdKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiBGaW5kIGxvbmdlc3QgY29tbW9uIHBhcnQgKi8KKyAgICBpZiAobW9kZSA9PSBXSUxEX0xPTkdFU1QgJiYgeHAtPnhwX251bWZpbGVzID4gMCkKKyAgICB7CisJZm9yIChsZW4gPSAwOyB4cC0+eHBfZmlsZXNbMF1bbGVuXTsgKytsZW4pCisJeworCSAgICBmb3IgKGkgPSAwOyBpIDwgeHAtPnhwX251bWZpbGVzOyArK2kpCisJICAgIHsKKyNpZmRlZiBDQVNFX0lOU0VOU0lUSVZFX0ZJTEVOQU1FCisJCWlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfRElSRUNUT1JJRVMKKwkJCXx8IHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9GSUxFUworCQkJfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0JVRkZFUlMpCisJCXsKKwkJICAgIGlmIChUT0xPV0VSX0xPQyh4cC0+eHBfZmlsZXNbaV1bbGVuXSkgIT0KKwkJCQkJICAgIFRPTE9XRVJfTE9DKHhwLT54cF9maWxlc1swXVtsZW5dKSkKKwkJCWJyZWFrOworCQl9CisJCWVsc2UKKyNlbmRpZgorCQkgICAgIGlmICh4cC0+eHBfZmlsZXNbaV1bbGVuXSAhPSB4cC0+eHBfZmlsZXNbMF1bbGVuXSkKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIGlmIChpIDwgeHAtPnhwX251bWZpbGVzKQorCSAgICB7CisJCWlmICghKG9wdGlvbnMgJiBXSUxEX05PX0JFRVApKQorCQkgICAgdmltX2JlZXAoKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJc3MgPSBhbGxvYygodW5zaWduZWQpbGVuICsgMSk7CisJaWYgKHNzKQorCXsKKwkgICAgU1RSTkNQWShzcywgeHAtPnhwX2ZpbGVzWzBdLCBsZW4pOworCSAgICBzc1tsZW5dID0gTlVMOworCX0KKwlmaW5kZXggPSAtMTsJCQkgICAgLyogbmV4dCBwX3djIGdldHMgZmlyc3Qgb25lICovCisgICAgfQorCisgICAgLyogQ29uY2F0ZW5hdGUgYWxsIG1hdGNoaW5nIG5hbWVzICovCisgICAgaWYgKG1vZGUgPT0gV0lMRF9BTEwgJiYgeHAtPnhwX251bWZpbGVzID4gMCkKKyAgICB7CisJbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgeHAtPnhwX251bWZpbGVzOyArK2kpCisJICAgIGxlbiArPSAobG9uZ191KVNUUkxFTih4cC0+eHBfZmlsZXNbaV0pICsgMTsKKwlzcyA9IGxhbGxvYyhsZW4sIFRSVUUpOworCWlmIChzcyAhPSBOVUxMKQorCXsKKwkgICAgKnNzID0gTlVMOworCSAgICBmb3IgKGkgPSAwOyBpIDwgeHAtPnhwX251bWZpbGVzOyArK2kpCisJICAgIHsKKwkJU1RSQ0FUKHNzLCB4cC0+eHBfZmlsZXNbaV0pOworCQlpZiAoaSAhPSB4cC0+eHBfbnVtZmlsZXMgLSAxKQorCQkgICAgU1RSQ0FUKHNzLCAob3B0aW9ucyAmIFdJTERfVVNFX05MKSA/ICJcbiIgOiAiICIpOworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIChtb2RlID09IFdJTERfRVhQQU5EX0ZSRUUgfHwgbW9kZSA9PSBXSUxEX0FMTCkKKwlFeHBhbmRDbGVhbnVwKHhwKTsKKworICAgIHJldHVybiBzczsKK30KKworLyoKKyAqIFByZXBhcmUgYW4gZXhwYW5kIHN0cnVjdHVyZSBmb3IgdXNlLgorICovCisgICAgdm9pZAorRXhwYW5kSW5pdCh4cCkKKyAgICBleHBhbmRfVAkqeHA7Cit7CisgICAgeHAtPnhwX2JhY2tzbGFzaCA9IFhQX0JTX05PTkU7CisgICAgeHAtPnhwX251bWZpbGVzID0gLTE7CisgICAgeHAtPnhwX2ZpbGVzID0gTlVMTDsKK30KKworLyoKKyAqIENsZWFudXAgYW4gZXhwYW5kIHN0cnVjdHVyZSBhZnRlciB1c2UuCisgKi8KKyAgICB2b2lkCitFeHBhbmRDbGVhbnVwKHhwKQorICAgIGV4cGFuZF9UCSp4cDsKK3sKKyAgICBpZiAoeHAtPnhwX251bWZpbGVzID49IDApCisgICAgeworCUZyZWVXaWxkKHhwLT54cF9udW1maWxlcywgeHAtPnhwX2ZpbGVzKTsKKwl4cC0+eHBfbnVtZmlsZXMgPSAtMTsKKyAgICB9Cit9CisKKyAgICB2b2lkCitFeHBhbmRFc2NhcGUoeHAsIHN0ciwgbnVtZmlsZXMsIGZpbGVzLCBvcHRpb25zKQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBpbnQJCW51bWZpbGVzOworICAgIGNoYXJfdQkqKmZpbGVzOworICAgIGludAkJb3B0aW9uczsKK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpwOworCisgICAgLyoKKyAgICAgKiBNYXkgY2hhbmdlIGhvbWUgZGlyZWN0b3J5IGJhY2sgdG8gIn4iCisgICAgICovCisgICAgaWYgKG9wdGlvbnMgJiBXSUxEX0hPTUVfUkVQTEFDRSkKKwl0aWxkZV9yZXBsYWNlKHN0ciwgbnVtZmlsZXMsIGZpbGVzKTsKKworICAgIGlmIChvcHRpb25zICYgV0lMRF9FU0NBUEUpCisgICAgeworCWlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfRklMRVMKKwkJfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0JVRkZFUlMKKwkJfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0RJUkVDVE9SSUVTKQorCXsKKwkgICAgLyoKKwkgICAgICogSW5zZXJ0IGEgYmFja3NsYXNoIGludG8gYSBmaWxlIG5hbWUgYmVmb3JlIGEgc3BhY2UsIFwsICUsICMKKwkgICAgICogYW5kIHdpbGRtYXRjaCBjaGFyYWN0ZXJzLCBleGNlcHQgJ34nLgorCSAgICAgKi8KKwkgICAgZm9yIChpID0gMDsgaSA8IG51bWZpbGVzOyArK2kpCisJICAgIHsKKwkJLyogZm9yICI6c2V0IHBhdGg9IiB3ZSBuZWVkIHRvIGVzY2FwZSBzcGFjZXMgdHdpY2UgKi8KKwkJaWYgKHhwLT54cF9iYWNrc2xhc2ggPT0gWFBfQlNfVEhSRUUpCisJCXsKKwkJICAgIHAgPSB2aW1fc3Ryc2F2ZV9lc2NhcGVkKGZpbGVzW2ldLCAoY2hhcl91ICopIiAiKTsKKwkJICAgIGlmIChwICE9IE5VTEwpCisJCSAgICB7CisJCQl2aW1fZnJlZShmaWxlc1tpXSk7CisJCQlmaWxlc1tpXSA9IHA7CisjaWYgZGVmaW5lZChCQUNLU0xBU0hfSU5fRklMRU5BTUUpIHx8IGRlZmluZWQoQ09MT05fQVNfUEFUSFNFUCkKKwkJCXAgPSB2aW1fc3Ryc2F2ZV9lc2NhcGVkKGZpbGVzW2ldLCAoY2hhcl91ICopIiAiKTsKKwkJCWlmIChwICE9IE5VTEwpCisJCQl7CisJCQkgICAgdmltX2ZyZWUoZmlsZXNbaV0pOworCQkJICAgIGZpbGVzW2ldID0gcDsKKwkJCX0KKyNlbmRpZgorCQkgICAgfQorCQl9CisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJCXsKKwkJICAgIGNoYXJfdQlidWZbMjBdOworCQkgICAgaW50CQlqID0gMDsKKworCQkgICAgLyogRG9uJ3QgZXNjYXBlICdbJyBhbmQgJ3snIGlmIHRoZXkgYXJlIGluICdpc2ZuYW1lJy4gKi8KKwkJICAgIGZvciAocCA9IFBBVEhfRVNDX0NIQVJTOyAqcCAhPSBOVUw7ICsrcCkKKwkJCWlmICgoKnAgIT0gJ1snICYmICpwICE9ICd7JykgfHwgIXZpbV9pc2ZpbGVjKCpwKSkKKwkJCSAgICBidWZbaisrXSA9ICpwOworCQkgICAgYnVmW2pdID0gTlVMOworCQkgICAgcCA9IHZpbV9zdHJzYXZlX2VzY2FwZWQoZmlsZXNbaV0sIGJ1Zik7CisJCX0KKyNlbHNlCisJCXAgPSB2aW1fc3Ryc2F2ZV9lc2NhcGVkKGZpbGVzW2ldLCBQQVRIX0VTQ19DSEFSUyk7CisjZW5kaWYKKwkJaWYgKHAgIT0gTlVMTCkKKwkJeworCQkgICAgdmltX2ZyZWUoZmlsZXNbaV0pOworCQkgICAgZmlsZXNbaV0gPSBwOworCQl9CisKKwkJLyogSWYgJ3N0cicgc3RhcnRzIHdpdGggIlx+IiwgcmVwbGFjZSAifiIgYXQgc3RhcnQgb2YKKwkJICogZmlsZXNbaV0gd2l0aCAiXH4iLiAqLworCQlpZiAoc3RyWzBdID09ICdcXCcgJiYgc3RyWzFdID09ICd+JyAmJiBmaWxlc1tpXVswXSA9PSAnficpCisJCXsKKwkJICAgIHAgPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTihmaWxlc1tpXSkgKyAyKSk7CisJCSAgICBpZiAocCAhPSBOVUxMKQorCQkgICAgeworCQkJcFswXSA9ICdcXCc7CisJCQlTVFJDUFkocCArIDEsIGZpbGVzW2ldKTsKKwkJCXZpbV9mcmVlKGZpbGVzW2ldKTsKKwkJCWZpbGVzW2ldID0gcDsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHhwLT54cF9iYWNrc2xhc2ggPSBYUF9CU19OT05FOworCX0KKwllbHNlIGlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfVEFHUykKKwl7CisJICAgIC8qCisJICAgICAqIEluc2VydCBhIGJhY2tzbGFzaCBiZWZvcmUgY2hhcmFjdGVycyBpbiBhIHRhZyBuYW1lIHRoYXQKKwkgICAgICogd291bGQgdGVybWluYXRlIHRoZSAiOnRhZyIgY29tbWFuZC4KKwkgICAgICovCisJICAgIGZvciAoaSA9IDA7IGkgPCBudW1maWxlczsgKytpKQorCSAgICB7CisJCXAgPSB2aW1fc3Ryc2F2ZV9lc2NhcGVkKGZpbGVzW2ldLCAoY2hhcl91ICopIlxcfFwiIik7CisJCWlmIChwICE9IE5VTEwpCisJCXsKKwkJICAgIHZpbV9mcmVlKGZpbGVzW2ldKTsKKwkJICAgIGZpbGVzW2ldID0gcDsKKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKworLyoKKyAqIEZvciBlYWNoIGZpbGUgbmFtZSBpbiBmaWxlc1tudW1fZmlsZXNdOgorICogSWYgJ29yaWdfcGF0JyBzdGFydHMgd2l0aCAifi8iLCByZXBsYWNlIHRoZSBob21lIGRpcmVjdG9yeSB3aXRoICJ+Ii4KKyAqLworICAgIHZvaWQKK3RpbGRlX3JlcGxhY2Uob3JpZ19wYXQsIG51bV9maWxlcywgZmlsZXMpCisgICAgY2hhcl91ICAqb3JpZ19wYXQ7CisgICAgaW50CSAgICBudW1fZmlsZXM7CisgICAgY2hhcl91ICAqKmZpbGVzOworeworICAgIGludAkgICAgaTsKKyAgICBjaGFyX3UgICpwOworCisgICAgaWYgKG9yaWdfcGF0WzBdID09ICd+JyAmJiB2aW1faXNwYXRoc2VwKG9yaWdfcGF0WzFdKSkKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IG51bV9maWxlczsgKytpKQorCXsKKwkgICAgcCA9IGhvbWVfcmVwbGFjZV9zYXZlKE5VTEwsIGZpbGVzW2ldKTsKKwkgICAgaWYgKHAgIT0gTlVMTCkKKwkgICAgeworCQl2aW1fZnJlZShmaWxlc1tpXSk7CisJCWZpbGVzW2ldID0gcDsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8qCisgKiBTaG93IGFsbCBtYXRjaGVzIGZvciBjb21wbGV0aW9uIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgKiBSZXR1cm5zIEVYUEFORF9OT1RISU5HIHdoZW4gdGhlIGNoYXJhY3RlciB0aGF0IHRyaWdnZXJlZCBleHBhbnNpb24gc2hvdWxkCisgKiBiZSBpbnNlcnRlZCBsaWtlIGEgbm9ybWFsIGNoYXJhY3Rlci4KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIGludAorc2hvd21hdGNoZXMoeHAsIHdpbGRtZW51KQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBpbnQJCXdpbGRtZW51OworeworI2RlZmluZSBMX1NIT1dGSUxFKG0pIChzaG93dGFpbCA/IHNtX2dldHRhaWwoZmlsZXNfZm91bmRbbV0pIDogZmlsZXNfZm91bmRbbV0pCisgICAgaW50CQludW1fZmlsZXM7CisgICAgY2hhcl91CSoqZmlsZXNfZm91bmQ7CisgICAgaW50CQlpLCBqLCBrOworICAgIGludAkJbWF4bGVuOworICAgIGludAkJbGluZXM7CisgICAgaW50CQljb2x1bW5zOworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWxhc3RsZW47CisgICAgaW50CQlhdHRyOworICAgIGludAkJc2hvd3RhaWw7CisKKyAgICBpZiAoeHAtPnhwX251bWZpbGVzID09IC0xKQorICAgIHsKKwlzZXRfZXhwYW5kX2NvbnRleHQoeHApOworCWkgPSBleHBhbmRfY21kbGluZSh4cCwgY2NsaW5lLmNtZGJ1ZmYsIGNjbGluZS5jbWRwb3MsCisJCQkJCQkgICAgJm51bV9maWxlcywgJmZpbGVzX2ZvdW5kKTsKKwlzaG93dGFpbCA9IGV4cGFuZF9zaG93dGFpbCh4cCk7CisJaWYgKGkgIT0gRVhQQU5EX09LKQorCSAgICByZXR1cm4gaTsKKworICAgIH0KKyAgICBlbHNlCisgICAgeworCW51bV9maWxlcyA9IHhwLT54cF9udW1maWxlczsKKwlmaWxlc19mb3VuZCA9IHhwLT54cF9maWxlczsKKwlzaG93dGFpbCA9IGNtZF9zaG93dGFpbDsKKyAgICB9CisKKyNpZmRlZiBGRUFUX1dJTERNRU5VCisgICAgaWYgKCF3aWxkbWVudSkKKyAgICB7CisjZW5kaWYKKwltc2dfZGlkYW55ID0gRkFMU0U7CQkvKiBsaW5lc19sZWZ0IHdpbGwgYmUgc2V0ICovCisJbXNnX3N0YXJ0KCk7CQkJLyogcHJlcGFyZSBmb3IgcGFnaW5nICovCisJbXNnX3B1dGNoYXIoJ1xuJyk7CisJb3V0X2ZsdXNoKCk7CisJY21kbGluZV9yb3cgPSBtc2dfcm93OworCW1zZ19kaWRhbnkgPSBGQUxTRTsJCS8qIGxpbmVzX2xlZnQgd2lsbCBiZSBzZXQgYWdhaW4gKi8KKwltc2dfc3RhcnQoKTsJCQkvKiBwcmVwYXJlIGZvciBwYWdpbmcgKi8KKyNpZmRlZiBGRUFUX1dJTERNRU5VCisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoZ290X2ludCkKKwlnb3RfaW50ID0gRkFMU0U7CS8qIG9ubHkgaW50LiB0aGUgY29tcGxldGlvbiwgbm90IHRoZSBjbWQgbGluZSAqLworI2lmZGVmIEZFQVRfV0lMRE1FTlUKKyAgICBlbHNlIGlmICh3aWxkbWVudSkKKwl3aW5fcmVkcl9zdGF0dXNfbWF0Y2hlcyh4cCwgbnVtX2ZpbGVzLCBmaWxlc19mb3VuZCwgMCwgc2hvd3RhaWwpOworI2VuZGlmCisgICAgZWxzZQorICAgIHsKKwkvKiBmaW5kIHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QgZmlsZSBuYW1lICovCisJbWF4bGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZpbGVzOyArK2kpCisJeworCSAgICBpZiAoIXNob3d0YWlsICYmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfRklMRVMKKwkJCSAgfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0JVRkZFUlMpKQorCSAgICB7CisJCWhvbWVfcmVwbGFjZShOVUxMLCBmaWxlc19mb3VuZFtpXSwgTmFtZUJ1ZmYsIE1BWFBBVEhMLCBUUlVFKTsKKwkJaiA9IHZpbV9zdHJzaXplKE5hbWVCdWZmKTsKKwkgICAgfQorCSAgICBlbHNlCisJCWogPSB2aW1fc3Ryc2l6ZShMX1NIT1dGSUxFKGkpKTsKKwkgICAgaWYgKGogPiBtYXhsZW4pCisJCW1heGxlbiA9IGo7CisJfQorCisJaWYgKHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9UQUdTX0xJU1RGSUxFUykKKwkgICAgbGluZXMgPSBudW1fZmlsZXM7CisJZWxzZQorCXsKKwkgICAgLyogY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgYW5kIGxpbmVzIGZvciB0aGUgbGlzdGluZyAqLworCSAgICBtYXhsZW4gKz0gMjsgICAgLyogdHdvIHNwYWNlcyBiZXR3ZWVuIGZpbGUgbmFtZXMgKi8KKwkgICAgY29sdW1ucyA9ICgoaW50KUNvbHVtbnMgKyAyKSAvIG1heGxlbjsKKwkgICAgaWYgKGNvbHVtbnMgPCAxKQorCQljb2x1bW5zID0gMTsKKwkgICAgbGluZXMgPSAobnVtX2ZpbGVzICsgY29sdW1ucyAtIDEpIC8gY29sdW1uczsKKwl9CisKKwlhdHRyID0gaGxfYXR0cihITEZfRCk7CS8qIGZpbmQgb3V0IGhpZ2hsaWdodGluZyBmb3IgZGlyZWN0b3JpZXMgKi8KKworCWlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfVEFHU19MSVNURklMRVMpCisJeworCSAgICBNU0dfUFVUU19BVFRSKF8oInRhZ25hbWUiKSwgaGxfYXR0cihITEZfVCkpOworCSAgICBtc2dfY2xyX2VvcygpOworCSAgICBtc2dfYWR2YW5jZShtYXhsZW4gLSAzKTsKKwkgICAgTVNHX1BVVFNfQVRUUihfKCIga2luZCBmaWxlXG4iKSwgaGxfYXR0cihITEZfVCkpOworCX0KKworCS8qIGxpc3QgdGhlIGZpbGVzIGxpbmUgYnkgbGluZSAqLworCWZvciAoaSA9IDA7IGkgPCBsaW5lczsgKytpKQorCXsKKwkgICAgbGFzdGxlbiA9IDk5OTsKKwkgICAgZm9yIChrID0gaTsgayA8IG51bV9maWxlczsgayArPSBsaW5lcykKKwkgICAgeworCQlpZiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX1RBR1NfTElTVEZJTEVTKQorCQl7CisJCSAgICBtc2dfb3V0dHJhbnNfYXR0cihmaWxlc19mb3VuZFtrXSwgaGxfYXR0cihITEZfRCkpOworCQkgICAgcCA9IGZpbGVzX2ZvdW5kW2tdICsgU1RSTEVOKGZpbGVzX2ZvdW5kW2tdKSArIDE7CisJCSAgICBtc2dfYWR2YW5jZShtYXhsZW4gKyAxKTsKKwkJICAgIG1zZ19wdXRzKHApOworCQkgICAgbXNnX2FkdmFuY2UobWF4bGVuICsgMyk7CisJCSAgICBtc2dfcHV0c19sb25nX2F0dHIocCArIDIsIGhsX2F0dHIoSExGX0QpKTsKKwkJICAgIGJyZWFrOworCQl9CisJCWZvciAoaiA9IG1heGxlbiAtIGxhc3RsZW47IC0taiA+PSAwOyApCisJCSAgICBtc2dfcHV0Y2hhcignICcpOworCQlpZiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0ZJTEVTCisJCQkJCSAgfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0JVRkZFUlMpCisJCXsKKwkJCSAgICAvKiBoaWdobGlnaHQgZGlyZWN0b3JpZXMgKi8KKwkJICAgIGogPSAobWNoX2lzZGlyKGZpbGVzX2ZvdW5kW2tdKSk7CisJCSAgICBpZiAoc2hvd3RhaWwpCisJCQlwID0gTF9TSE9XRklMRShrKTsKKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWhvbWVfcmVwbGFjZShOVUxMLCBmaWxlc19mb3VuZFtrXSwgTmFtZUJ1ZmYsIE1BWFBBVEhMLAorCQkJCQkJCQkJVFJVRSk7CisJCQlwID0gTmFtZUJ1ZmY7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBqID0gRkFMU0U7CisJCSAgICBwID0gTF9TSE9XRklMRShrKTsKKwkJfQorCQlsYXN0bGVuID0gbXNnX291dHRyYW5zX2F0dHIocCwgaiA/IGF0dHIgOiAwKTsKKwkgICAgfQorCSAgICBpZiAobXNnX2NvbCA+IDApCS8qIHdoZW4gbm90IHdyYXBwZWQgYXJvdW5kICovCisJICAgIHsKKwkJbXNnX2Nscl9lb3MoKTsKKwkJbXNnX3B1dGNoYXIoJ1xuJyk7CisJICAgIH0KKwkgICAgb3V0X2ZsdXNoKCk7CQkgICAgLyogc2hvdyBvbmUgbGluZSBhdCBhIHRpbWUgKi8KKwkgICAgaWYgKGdvdF9pbnQpCisJICAgIHsKKwkJZ290X2ludCA9IEZBTFNFOworCQlicmVhazsKKwkgICAgfQorCX0KKworCS8qCisJICogd2UgcmVkcmF3IHRoZSBjb21tYW5kIGJlbG93IHRoZSBsaW5lcyB0aGF0IHdlIGhhdmUganVzdCBsaXN0ZWQKKwkgKiBUaGlzIGlzIGEgYml0IHRyaWNreSwgYnV0IGl0IHNhdmVzIGEgbG90IG9mIHNjcmVlbiB1cGRhdGluZy4KKwkgKi8KKwljbWRsaW5lX3JvdyA9IG1zZ19yb3c7CS8qIHdpbGwgcHV0IGl0IGJhY2sgbGF0ZXIgKi8KKyAgICB9CisKKyAgICBpZiAoeHAtPnhwX251bWZpbGVzID09IC0xKQorCUZyZWVXaWxkKG51bV9maWxlcywgZmlsZXNfZm91bmQpOworCisgICAgcmV0dXJuIEVYUEFORF9PSzsKK30KKworLyoKKyAqIFByaXZhdGUgZ2V0dGFpbCBmb3Igc2hvd21hdGNoZXMoKSAoYW5kIHdpbl9yZWRyX3N0YXR1c19tYXRjaGVzKCkpOgorICogRmluZCB0YWlsIG9mIGZpbGUgbmFtZSBwYXRoLCBidXQgaWdub3JlIHRyYWlsaW5nICIvIi4KKyAqLworICAgIGNoYXJfdSAqCitzbV9nZXR0YWlsKHMpCisgICAgY2hhcl91CSpzOworeworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKnQgPSBzOworICAgIGludAkJaGFkX3NlcCA9IEZBTFNFOworCisgICAgZm9yIChwID0gczsgKnAgIT0gTlVMOyApCisgICAgeworCWlmICh2aW1faXNwYXRoc2VwKCpwKQorI2lmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorCQkmJiAhcmVtX2JhY2tzbGFzaChwKQorI2VuZGlmCisJICAgKQorCSAgICBoYWRfc2VwID0gVFJVRTsKKwllbHNlIGlmIChoYWRfc2VwKQorCXsKKwkgICAgdCA9IHA7CisJICAgIGhhZF9zZXAgPSBGQUxTRTsKKwl9CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKTsKKwllbHNlCisjZW5kaWYKKwkgICAgKytwOworICAgIH0KKyAgICByZXR1cm4gdDsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHdlIG9ubHkgbmVlZCB0byBzaG93IHRoZSB0YWlsIG9mIGNvbXBsZXRpb24gbWF0Y2hlcy4KKyAqIFdoZW4gbm90IGNvbXBsZXRpbmcgZmlsZSBuYW1lcyBvciB0aGVyZSBpcyBhIHdpbGRjYXJkIGluIHRoZSBwYXRoIEZBTFNFIGlzCisgKiByZXR1cm5lZC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2V4cGFuZF9zaG93dGFpbCh4cCkKKyAgICBleHBhbmRfVAkqeHA7Cit7CisgICAgY2hhcl91CSpzOworICAgIGNoYXJfdQkqZW5kOworCisgICAgLyogV2hlbiBub3QgY29tcGxldGluZyBmaWxlIG5hbWVzIGEgIi8iIG1heSBtZWFuIHNvbWV0aGluZyBkaWZmZXJlbnQuICovCisgICAgaWYgKHhwLT54cF9jb250ZXh0ICE9IEVYUEFORF9GSUxFUyAmJiB4cC0+eHBfY29udGV4dCAhPSBFWFBBTkRfRElSRUNUT1JJRVMpCisJcmV0dXJuIEZBTFNFOworCisgICAgZW5kID0gZ2V0dGFpbCh4cC0+eHBfcGF0dGVybik7CisgICAgaWYgKGVuZCA9PSB4cC0+eHBfcGF0dGVybikJCS8qIHRoZXJlIGlzIG5vIHBhdGggc2VwYXJhdG9yICovCisJcmV0dXJuIEZBTFNFOworCisgICAgZm9yIChzID0geHAtPnhwX3BhdHRlcm47IHMgPCBlbmQ7IHMrKykKKyAgICB7CisJLyogU2tpcCBlc2NhcGVkIHdpbGRjYXJkcy4gIE9ubHkgd2hlbiB0aGUgYmFja3NsYXNoIGlzIG5vdCBhIHBhdGgKKwkgKiBzZXBhcmF0b3IsIG9uIERPUyB0aGUgJyonICJwYXRoXCpcZmlsZSIgbXVzdCBub3QgYmUgc2tpcHBlZC4gKi8KKwlpZiAocmVtX2JhY2tzbGFzaChzKSkKKwkgICAgKytzOworCWVsc2UgaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSIqP1siLCAqcykgIT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAqIFByZXBhcmUgYSBzdHJpbmcgZm9yIGV4cGFuc2lvbi4KKyAqIFdoZW4gZXhwYW5kaW5nIGZpbGUgbmFtZXM6IFRoZSBzdHJpbmcgd2lsbCBiZSB1c2VkIHdpdGggZXhwYW5kX3dpbGRjYXJkcygpLgorICogQ29weSB0aGUgZmlsZSBuYW1lIGludG8gYWxsb2NhdGVkIG1lbW9yeSBhbmQgYWRkIGEgJyonIGF0IHRoZSBlbmQuCisgKiBXaGVuIGV4cGFuZGluZyBvdGhlciBuYW1lczogVGhlIHN0cmluZyB3aWxsIGJlIHVzZWQgd2l0aCByZWdjb21wKCkuICBDb3B5CisgKiB0aGUgbmFtZSBpbnRvIGFsbG9jYXRlZCBtZW1vcnkgYW5kIHByZXBlbmQgIl4iLgorICovCisgICAgY2hhcl91ICoKK2FkZHN0YXIoZm5hbWUsIGxlbiwgY29udGV4dCkKKyAgICBjaGFyX3UJKmZuYW1lOworICAgIGludAkJbGVuOworICAgIGludAkJY29udGV4dDsJLyogRVhQQU5EX0ZJTEVTIGV0Yy4gKi8KK3sKKyAgICBjaGFyX3UJKnJldHZhbDsKKyAgICBpbnQJCWksIGo7CisgICAgaW50CQluZXdfbGVuOworICAgIGNoYXJfdQkqdGFpbDsKKworICAgIGlmIChjb250ZXh0ICE9IEVYUEFORF9GSUxFUyAmJiBjb250ZXh0ICE9IEVYUEFORF9ESVJFQ1RPUklFUykKKyAgICB7CisJLyoKKwkgKiBNYXRjaGluZyB3aWxsIGJlIGRvbmUgaW50ZXJuYWxseSAob24gc29tZXRoaW5nIG90aGVyIHRoYW4gZmlsZXMpLgorCSAqIFNvIHdlIGNvbnZlcnQgdGhlIGZpbGUtbWF0Y2hpbmctdHlwZSB3aWxkY2FyZHMgaW50byBvdXIga2luZCBmb3IKKwkgKiB1c2Ugd2l0aCB2aW1fcmVnY29tcCgpLiAgRmlyc3Qgd29yayBvdXQgaG93IGxvbmcgaXQgd2lsbCBiZToKKwkgKi8KKworCS8qIEZvciBoZWxwIHRhZ3MgdGhlIHRyYW5zbGF0aW9uIGlzIGRvbmUgaW4gZmluZF9oZWxwX3RhZ3MoKS4KKwkgKiBGb3IgYSB0YWcgcGF0dGVybiBzdGFydGluZyB3aXRoICIvIiBubyB0cmFuc2xhdGlvbiBpcyBuZWVkZWQuICovCisJaWYgKGNvbnRleHQgPT0gRVhQQU5EX0hFTFAKKwkJfHwgY29udGV4dCA9PSBFWFBBTkRfQ09MT1JTCisJCXx8IGNvbnRleHQgPT0gRVhQQU5EX0NPTVBJTEVSCisJCXx8IChjb250ZXh0ID09IEVYUEFORF9UQUdTICYmIGZuYW1lWzBdID09ICcvJykpCisJICAgIHJldHZhbCA9IHZpbV9zdHJuc2F2ZShmbmFtZSwgbGVuKTsKKwllbHNlCisJeworCSAgICBuZXdfbGVuID0gbGVuICsgMjsJCS8qICsyIGZvciAnXicgYXQgc3RhcnQsIE5VTCBhdCBlbmQgKi8KKwkgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCSAgICB7CisJCWlmIChmbmFtZVtpXSA9PSAnKicgfHwgZm5hbWVbaV0gPT0gJ34nKQorCQkgICAgbmV3X2xlbisrOwkJLyogJyonIG5lZWRzIHRvIGJlIHJlcGxhY2VkIGJ5ICIuKiIKKwkJCQkJICAgJ34nIG5lZWRzIHRvIGJlIHJlcGxhY2VkIGJ5ICJcfiIgKi8KKworCQkvKiBCdWZmZXIgbmFtZXMgYXJlIGxpa2UgZmlsZSBuYW1lcy4gICIuIiBzaG91bGQgYmUgbGl0ZXJhbCAqLworCQlpZiAoY29udGV4dCA9PSBFWFBBTkRfQlVGRkVSUyAmJiBmbmFtZVtpXSA9PSAnLicpCisJCSAgICBuZXdfbGVuKys7CQkvKiAiLiIgYmVjb21lcyAiXC4iICovCisKKwkJLyogQ3VzdG9tIGV4cGFuc2lvbiB0YWtlcyBjYXJlIG9mIHNwZWNpYWwgdGhpbmdzLCBtYXRjaAorCQkgKiBiYWNrc2xhc2hlcyBsaXRlcmFsbHkgKHBlcmhhcHMgYWxzbyBmb3Igb3RoZXIgdHlwZXM/KSAqLworCQlpZiAoY29udGV4dCA9PSBFWFBBTkRfVVNFUl9ERUZJTkVEICYmIGZuYW1lW2ldID09ICdcXCcpCisJCSAgICBuZXdfbGVuKys7CQkvKiAnXCcgYmVjb21lcyAiXFwiICovCisJICAgIH0KKwkgICAgcmV0dmFsID0gYWxsb2MobmV3X2xlbik7CisJICAgIGlmIChyZXR2YWwgIT0gTlVMTCkKKwkgICAgeworCQlyZXR2YWxbMF0gPSAnXic7CisJCWogPSAxOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIGorKykKKwkJeworCQkgICAgLyogU2tpcCBiYWNrc2xhc2guICBCdXQgd2h5PyAgQXQgbGVhc3Qga2VlcCBpdCBmb3IgY3VzdG9tCisJCSAgICAgKiBleHBhbnNpb24uICovCisJCSAgICBpZiAoY29udGV4dCAhPSBFWFBBTkRfVVNFUl9ERUZJTkVECisJCQkJCSAgICAmJiBmbmFtZVtpXSA9PSAnXFwnICYmICsraSA9PSBsZW4pCisJCQlicmVhazsKKworCQkgICAgc3dpdGNoIChmbmFtZVtpXSkKKwkJICAgIHsKKwkJCWNhc2UgJyonOiAgIHJldHZhbFtqKytdID0gJy4nOworCQkJCSAgICBicmVhazsKKwkJCWNhc2UgJ34nOiAgIHJldHZhbFtqKytdID0gJ1xcJzsKKwkJCQkgICAgYnJlYWs7CisJCQljYXNlICc/JzogICByZXR2YWxbal0gPSAnLic7CisJCQkJICAgIGNvbnRpbnVlOworCQkJY2FzZSAnLic6ICAgaWYgKGNvbnRleHQgPT0gRVhQQU5EX0JVRkZFUlMpCisJCQkJCXJldHZhbFtqKytdID0gJ1xcJzsKKwkJCQkgICAgYnJlYWs7CisJCQljYXNlICdcXCc6ICBpZiAoY29udGV4dCA9PSBFWFBBTkRfVVNFUl9ERUZJTkVEKQorCQkJCQlyZXR2YWxbaisrXSA9ICdcXCc7CisJCQkJICAgIGJyZWFrOworCQkgICAgfQorCQkgICAgcmV0dmFsW2pdID0gZm5hbWVbaV07CisJCX0KKwkJcmV0dmFsW2pdID0gTlVMOworCSAgICB9CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCXJldHZhbCA9IGFsbG9jKGxlbiArIDQpOworCWlmIChyZXR2YWwgIT0gTlVMTCkKKwl7CisJICAgIFNUUk5DUFkocmV0dmFsLCBmbmFtZSwgbGVuKTsKKwkgICAgcmV0dmFsW2xlbl0gPSBOVUw7CisKKwkgICAgLyoKKwkgICAgICogRG9uJ3QgYWRkIGEgc3RhciB0byB+LCB+dXNlciwgJHZhciBvciBgY21kYC4KKwkgICAgICogfiB3b3VsZCBiZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgbmFtZSwgYnV0IG5vdCB0aGUgdGFpbC4KKwkgICAgICogJCBjb3VsZCBiZSBhbnl3aGVyZSBpbiB0aGUgdGFpbC4KKwkgICAgICogYCBjb3VsZCBiZSBhbnl3aGVyZSBpbiB0aGUgZmlsZSBuYW1lLgorCSAgICAgKi8KKwkgICAgdGFpbCA9IGdldHRhaWwocmV0dmFsKTsKKwkgICAgaWYgKCgqcmV0dmFsICE9ICd+JyB8fCB0YWlsICE9IHJldHZhbCkKKwkJICAgICYmIHZpbV9zdHJjaHIodGFpbCwgJyQnKSA9PSBOVUxMCisJCSAgICAmJiB2aW1fc3RyY2hyKHJldHZhbCwgJ2AnKSA9PSBOVUxMKQorCQlyZXR2YWxbbGVuKytdID0gJyonOworCSAgICByZXR2YWxbbGVuXSA9IE5VTDsKKwl9CisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBNdXN0IHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgc28gZmFyIHRvIHdvcmsgb3V0IHdoYXQgY29udGV4dCB3ZSBhcmUgaW4uCisgKiBDb21wbGV0aW9uIGNhbiB0aGVuIGJlIGRvbmUgYmFzZWQgb24gdGhhdCBjb250ZXh0LgorICogVGhpcyByb3V0aW5lIHNldHMgdGhlIHZhcmlhYmxlczoKKyAqICB4cC0+eHBfcGF0dGVybgkgICAgVGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIHRvIGJlIGV4cGFuZGVkIHdpdGhpbgorICoJCQkJdGhlIGNvbW1hbmQgbGluZSAoZW5kcyBhdCB0aGUgY3Vyc29yKS4KKyAqICB4cC0+eHBfY29udGV4dAkgICAgVGhlIHR5cGUgb2YgdGhpbmcgdG8gZXhwYW5kLiAgV2lsbCBiZSBvbmUgb2Y6CisgKgorICogIEVYUEFORF9VTlNVQ0NFU1NGVUwJICAgIFVzZWQgc29tZXRpbWVzIHdoZW4gdGhlcmUgaXMgc29tZXRoaW5nIGlsbGVnYWwgb24KKyAqCQkJICAgIHRoZSBjb21tYW5kIGxpbmUsIGxpa2UgYW4gdW5rbm93biBjb21tYW5kLglDYWxsZXIKKyAqCQkJICAgIHNob3VsZCBiZWVwLgorICogIEVYUEFORF9OT1RISU5HCSAgICBVbnJlY29nbmlzZWQgY29udGV4dCBmb3IgY29tcGxldGlvbiwgdXNlIGNoYXIgbGlrZQorICoJCQkgICAgYSBub3JtYWwgY2hhciwgcmF0aGVyIHRoYW4gZm9yIGNvbXBsZXRpb24uCWVnCisgKgkJCSAgICA6cy9eSS8KKyAqICBFWFBBTkRfQ09NTUFORFMJICAgIEN1cnNvciBpcyBzdGlsbCB0b3VjaGluZyB0aGUgY29tbWFuZCwgc28gY29tcGxldGUKKyAqCQkJICAgIGl0LgorICogIEVYUEFORF9CVUZGRVJTCSAgICBDb21wbGV0ZSBmaWxlIG5hbWVzIGZvciA6YnVmIGFuZCA6c2J1ZiBjb21tYW5kcy4KKyAqICBFWFBBTkRfRklMRVMJICAgIEFmdGVyIGNvbW1hbmQgd2l0aCBYRklMRSBzZXQsIG9yIGFmdGVyIHNldHRpbmcKKyAqCQkJICAgIHdpdGggUF9FWFBBTkQgc2V0LgllZyA6ZSBeSSwgOnc+Pl5JCisgKiAgRVhQQU5EX0RJUkVDVE9SSUVTCSAgICBJbiBzb21lIGNhc2VzIHRoaXMgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBsYXR0ZXIKKyAqCQkJICAgIHdoZW4gd2Uga25vdyBvbmx5IGRpcmVjdG9yaWVzIGFyZSBvZiBpbnRlcmVzdC4gIGVnCisgKgkJCSAgICA6c2V0IGRpcj1eSQorICogIEVYUEFORF9TRVRUSU5HUwkgICAgQ29tcGxldGUgdmFyaWFibGUgbmFtZXMuICBlZyA6c2V0IGReSQorICogIEVYUEFORF9CT09MX1NFVFRJTkdTICAgIENvbXBsZXRlIGJvb2xlYW4gdmFyaWFibGVzIG9ubHksICBlZyA6c2V0IG5vXkkKKyAqICBFWFBBTkRfVEFHUwkJICAgIENvbXBsZXRlIHRhZ3MgZnJvbSB0aGUgZmlsZXMgaW4gcF90YWdzLiAgZWcgOnRhIGFeSQorICogIEVYUEFORF9UQUdTX0xJU1RGSUxFUyAgIEFzIGFib3ZlLCBidXQgbGlzdCBmaWxlbmFtZXMgb24gXkQsIGFmdGVyIDp0c2VsZWN0CisgKiAgRVhQQU5EX0hFTFAJCSAgICBDb21wbGV0ZSB0YWdzIGZyb20gdGhlIGZpbGUgJ2hlbHBmaWxlJy90YWdzCisgKiAgRVhQQU5EX0VWRU5UUwkgICAgQ29tcGxldGUgZXZlbnQgbmFtZXMKKyAqICBFWFBBTkRfU1lOVEFYCSAgICBDb21wbGV0ZSA6c3ludGF4IGNvbW1hbmQgYXJndW1lbnRzCisgKiAgRVhQQU5EX0hJR0hMSUdIVAkgICAgQ29tcGxldGUgaGlnaGxpZ2h0IChzeW50YXgpIGdyb3VwIG5hbWVzCisgKiAgRVhQQU5EX0FVR1JPVVAJICAgIENvbXBsZXRlIGF1dG9jb21tYW5kIGdyb3VwIG5hbWVzCisgKiAgRVhQQU5EX1VTRVJfVkFSUwkgICAgQ29tcGxldGUgdXNlciBkZWZpbmVkIHZhcmlhYmxlIG5hbWVzLCBlZyA6dW5sZXQgYV5JCisgKiAgRVhQQU5EX01BUFBJTkdTCSAgICBDb21wbGV0ZSBtYXBwaW5nIGFuZCBhYmJyZXZpYXRpb24gbmFtZXMsCisgKgkJCSAgICAgIGVnIDp1bm1hcCBhXkkgLCA6Y3VuYWIgeF5JCisgKiAgRVhQQU5EX0ZVTkNUSU9OUwkgICAgQ29tcGxldGUgaW50ZXJuYWwgb3IgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIG5hbWVzLAorICoJCQkgICAgICBlZyA6Y2FsbCBzdWJeSQorICogIEVYUEFORF9VU0VSX0ZVTkMJICAgIENvbXBsZXRlIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBuYW1lcywgZWcgOmRlbGYgRl5JCisgKiAgRVhQQU5EX0VYUFJFU1NJT04JICAgIENvbXBsZXRlIGludGVybmFsIG9yIHVzZXIgZGVmaW5lZCBmdW5jdGlvbi92YXJpYWJsZQorICoJCQkgICAgbmFtZXMgaW4gZXhwcmVzc2lvbnMsIGVnIDp3aGlsZSBzXkkKKyAqICBFWFBBTkRfRU5WX1ZBUlMJICAgIENvbXBsZXRlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc2V0X2V4cGFuZF9jb250ZXh0KHhwKQorICAgIGV4cGFuZF9UCSp4cDsKK3sKKyAgICAvKiBvbmx5IGV4cGFuc2lvbiBmb3IgJzonIGFuZCAnPicgY29tbWFuZHMgKi8KKyAgICBpZiAoY2NsaW5lLmNtZGZpcnN0YyAhPSAnOicKKyNpZmRlZiBGRUFUX0VWQUwKKwkgICAgJiYgY2NsaW5lLmNtZGZpcnN0YyAhPSAnPicKKyNlbmRpZgorCSAgICApCisgICAgeworCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7CisJcmV0dXJuOworICAgIH0KKyAgICBzZXRfY21kX2NvbnRleHQoeHAsIGNjbGluZS5jbWRidWZmLCBjY2xpbmUuY21kbGVuLCBjY2xpbmUuY21kcG9zKTsKK30KKworICAgIHZvaWQKK3NldF9jbWRfY29udGV4dCh4cCwgc3RyLCBsZW4sIGNvbCkKKyAgICBleHBhbmRfVAkqeHA7CisgICAgY2hhcl91CSpzdHI7CSAgICAvKiBzdGFydCBvZiBjb21tYW5kIGxpbmUgKi8KKyAgICBpbnQJCWxlbjsJICAgIC8qIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgKGV4Y2wuIE5VTCkgKi8KKyAgICBpbnQJCWNvbDsJICAgIC8qIHBvc2l0aW9uIG9mIGN1cnNvciAqLworeworICAgIGludAkJb2xkX2NoYXIgPSBOVUw7CisgICAgY2hhcl91CSpuZXh0Y29tbTsKKworICAgIC8qCisgICAgICogQXZvaWQgYSBVTVIgd2FybmluZyBmcm9tIFB1cmlmeSwgb25seSBzYXZlIHRoZSBjaGFyYWN0ZXIgaWYgaXQgaGFzIGJlZW4KKyAgICAgKiB3cml0dGVuIGJlZm9yZS4KKyAgICAgKi8KKyAgICBpZiAoY29sIDwgbGVuKQorCW9sZF9jaGFyID0gc3RyW2NvbF07CisgICAgc3RyW2NvbF0gPSBOVUw7CisgICAgbmV4dGNvbW0gPSBzdHI7CisgICAgd2hpbGUgKG5leHRjb21tICE9IE5VTEwpCisJbmV4dGNvbW0gPSBzZXRfb25lX2NtZF9jb250ZXh0KHhwLCBuZXh0Y29tbSk7CisgICAgc3RyW2NvbF0gPSBvbGRfY2hhcjsKK30KKworLyoKKyAqIEV4cGFuZCB0aGUgY29tbWFuZCBsaW5lICJzdHIiIGZyb20gY29udGV4dCAieHAiLgorICogInhwIiBtdXN0IGhhdmUgYmVlbiBzZXQgYnkgc2V0X2NtZF9jb250ZXh0KCkuCisgKiB4cC0+eHBfcGF0dGVybiBwb2ludHMgaW50byAic3RyIiwgdG8gd2hlcmUgdGhlIHRleHQgdGhhdCBpcyB0byBiZSBleHBhbmRlZAorICogc3RhcnRzLgorICogUmV0dXJucyBFWFBBTkRfVU5TVUNDRVNTRlVMIHdoZW4gdGhlcmUgaXMgc29tZXRoaW5nIGlsbGVnYWwgYmVmb3JlIHRoZQorICogY3Vyc29yLgorICogUmV0dXJucyBFWFBBTkRfTk9USElORyB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZXhwYW5kLCBtaWdodCBpbnNlcnQgdGhlCisgKiBrZXkgdGhhdCB0cmlnZ2VyZWQgZXhwYW5zaW9uIGxpdGVyYWxseS4KKyAqIFJldHVybnMgRVhQQU5EX09LIG90aGVyd2lzZS4KKyAqLworICAgIGludAorZXhwYW5kX2NtZGxpbmUoeHAsIHN0ciwgY29sLCBtYXRjaGNvdW50LCBtYXRjaGVzKQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBjaGFyX3UJKnN0cjsJCS8qIHN0YXJ0IG9mIGNvbW1hbmQgbGluZSAqLworICAgIGludAkJY29sOwkJLyogcG9zaXRpb24gb2YgY3Vyc29yICovCisgICAgaW50CQkqbWF0Y2hjb3VudDsJLyogcmV0dXJuOiBuciBvZiBtYXRjaGVzICovCisgICAgY2hhcl91CSoqKm1hdGNoZXM7CS8qIHJldHVybjogYXJyYXkgb2YgcG9pbnRlcnMgdG8gbWF0Y2hlcyAqLworeworICAgIGNoYXJfdQkqZmlsZV9zdHIgPSBOVUxMOworCisgICAgaWYgKHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9VTlNVQ0NFU1NGVUwpCisgICAgeworCWJlZXBfZmx1c2goKTsKKwlyZXR1cm4gRVhQQU5EX1VOU1VDQ0VTU0ZVTDsgIC8qIFNvbWV0aGluZyBpbGxlZ2FsIG9uIGNvbW1hbmQgbGluZSAqLworICAgIH0KKyAgICBpZiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX05PVEhJTkcpCisgICAgeworCS8qIENhbGxlciBjYW4gdXNlIHRoZSBjaGFyYWN0ZXIgYXMgYSBub3JtYWwgY2hhciBpbnN0ZWFkICovCisJcmV0dXJuIEVYUEFORF9OT1RISU5HOworICAgIH0KKworICAgIC8qIGFkZCBzdGFyIHRvIGZpbGUgbmFtZSwgb3IgY29udmVydCB0byByZWdleHAgaWYgbm90IGV4cC4gZmlsZXMuICovCisgICAgZmlsZV9zdHIgPSBhZGRzdGFyKHhwLT54cF9wYXR0ZXJuLAorCQkJICAgKGludCkoc3RyICsgY29sIC0geHAtPnhwX3BhdHRlcm4pLCB4cC0+eHBfY29udGV4dCk7CisgICAgaWYgKGZpbGVfc3RyID09IE5VTEwpCisJcmV0dXJuIEVYUEFORF9VTlNVQ0NFU1NGVUw7CisKKyAgICAvKiBmaW5kIGFsbCBmaWxlcyB0aGF0IG1hdGNoIHRoZSBkZXNjcmlwdGlvbiAqLworICAgIGlmIChFeHBhbmRGcm9tQ29udGV4dCh4cCwgZmlsZV9zdHIsIG1hdGNoY291bnQsIG1hdGNoZXMsCisJCQkJCSAgV0lMRF9BRERfU0xBU0h8V0lMRF9TSUxFTlQpID09IEZBSUwpCisgICAgeworCSptYXRjaGNvdW50ID0gMDsKKwkqbWF0Y2hlcyA9IE5VTEw7CisgICAgfQorICAgIHZpbV9mcmVlKGZpbGVfc3RyKTsKKworICAgIHJldHVybiBFWFBBTkRfT0s7Cit9CisKKyNpZmRlZiBGRUFUX01VTFRJX0xBTkcKKy8qCisgKiBDbGVhbnVwIG1hdGNoZXMgZm9yIGhlbHAgdGFnczogcmVtb3ZlICJAZW4iIGlmICJlbiIgaXMgdGhlIG9ubHkgbGFuZ3VhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCWNsZWFudXBfaGVscF90YWdzIF9fQVJHUygoaW50IG51bV9maWxlLCBjaGFyX3UgKipmaWxlKSk7CisKKyAgICBzdGF0aWMgdm9pZAorY2xlYW51cF9oZWxwX3RhZ3MobnVtX2ZpbGUsIGZpbGUpCisgICAgaW50CQludW1fZmlsZTsKKyAgICBjaGFyX3UJKipmaWxlOworeworICAgIGludAkJaSwgajsKKyAgICBpbnQJCWxlbjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZmlsZTsgKytpKQorICAgIHsKKwlsZW4gPSAoaW50KVNUUkxFTihmaWxlW2ldKSAtIDM7CisJaWYgKGxlbiA+IDAgJiYgU1RSQ01QKGZpbGVbaV0gKyBsZW4sICJAZW4iKSA9PSAwKQorCXsKKwkgICAgLyogU29ydGluZyBvbiBwcmlvcml0eSBtZWFucyB0aGUgc2FtZSBpdGVtIGluIGFub3RoZXIgbGFuZ3VhZ2UgbWF5CisJICAgICAqIGJlIGFueXdoZXJlLiAgU2VhcmNoIGFsbCBpdGVtcyBmb3IgYSBtYXRjaCB1cCB0byB0aGUgIkBlbiIuICovCisJICAgIGZvciAoaiA9IDA7IGogPCBudW1fZmlsZTsgKytqKQorCQlpZiAoaiAhPSBpCisJCQkmJiAoaW50KVNUUkxFTihmaWxlW2pdKSA9PSBsZW4gKyAzCisJCQkmJiBTVFJOQ01QKGZpbGVbaV0sIGZpbGVbal0sIGxlbiArIDEpID09IDApCisJCSAgICBicmVhazsKKwkgICAgaWYgKGogPT0gbnVtX2ZpbGUpCisJCWZpbGVbaV1bbGVuXSA9IE5VTDsKKwl9CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBEbyB0aGUgZXhwYW5zaW9uIGJhc2VkIG9uIHhwLT54cF9jb250ZXh0IGFuZCAicGF0Ii4KKyAqLworICAgIHN0YXRpYyBpbnQKK0V4cGFuZEZyb21Db250ZXh0KHhwLCBwYXQsIG51bV9maWxlLCBmaWxlLCBvcHRpb25zKQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBjaGFyX3UJKnBhdDsKKyAgICBpbnQJCSpudW1fZmlsZTsKKyAgICBjaGFyX3UJKioqZmlsZTsKKyAgICBpbnQJCW9wdGlvbnM7Cit7CisjaWZkZWYgRkVBVF9DTURMX0NPTVBMCisgICAgcmVnbWF0Y2hfVAlyZWdtYXRjaDsKKyNlbmRpZgorICAgIGludAkJcmV0OworICAgIGludAkJZmxhZ3M7CisKKyAgICBmbGFncyA9IEVXX0RJUjsJLyogaW5jbHVkZSBkaXJlY3RvcmllcyAqLworICAgIGlmIChvcHRpb25zICYgV0lMRF9MSVNUX05PVEZPVU5EKQorCWZsYWdzIHw9IEVXX05PVEZPVU5EOworICAgIGlmIChvcHRpb25zICYgV0lMRF9BRERfU0xBU0gpCisJZmxhZ3MgfD0gRVdfQUREU0xBU0g7CisgICAgaWYgKG9wdGlvbnMgJiBXSUxEX0tFRVBfQUxMKQorCWZsYWdzIHw9IEVXX0tFRVBBTEw7CisgICAgaWYgKG9wdGlvbnMgJiBXSUxEX1NJTEVOVCkKKwlmbGFncyB8PSBFV19TSUxFTlQ7CisKKyAgICBpZiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0ZJTEVTIHx8IHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9ESVJFQ1RPUklFUykKKyAgICB7CisJLyoKKwkgKiBFeHBhbmQgZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMuCisJICovCisJaW50CWZyZWVfcGF0ID0gRkFMU0U7CisJaW50CWk7CisKKwkvKiBmb3IgIjpzZXQgcGF0aD0iIGFuZCAiOnNldCB0YWdzPSIgaGFsdmUgYmFja3NsYXNoZXMgZm9yIGVzY2FwZWQKKwkgKiBzcGFjZSAqLworCWlmICh4cC0+eHBfYmFja3NsYXNoICE9IFhQX0JTX05PTkUpCisJeworCSAgICBmcmVlX3BhdCA9IFRSVUU7CisJICAgIHBhdCA9IHZpbV9zdHJzYXZlKHBhdCk7CisJICAgIGZvciAoaSA9IDA7IHBhdFtpXTsgKytpKQorCQlpZiAocGF0W2ldID09ICdcXCcpCisJCXsKKwkJICAgIGlmICh4cC0+eHBfYmFja3NsYXNoID09IFhQX0JTX1RIUkVFCisJCQkgICAgJiYgcGF0W2kgKyAxXSA9PSAnXFwnCisJCQkgICAgJiYgcGF0W2kgKyAyXSA9PSAnXFwnCisJCQkgICAgJiYgcGF0W2kgKyAzXSA9PSAnICcpCisJCQlTVFJDUFkocGF0ICsgaSwgcGF0ICsgaSArIDMpOworCQkgICAgaWYgKHhwLT54cF9iYWNrc2xhc2ggPT0gWFBfQlNfT05FCisJCQkgICAgJiYgcGF0W2kgKyAxXSA9PSAnICcpCisJCQlTVFJDUFkocGF0ICsgaSwgcGF0ICsgaSArIDEpOworCQl9CisJfQorCisJaWYgKHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9GSUxFUykKKwkgICAgZmxhZ3MgfD0gRVdfRklMRTsKKwllbHNlCisJICAgIGZsYWdzID0gKGZsYWdzIHwgRVdfRElSKSAmIH5FV19GSUxFOworCXJldCA9IGV4cGFuZF93aWxkY2FyZHMoMSwgJnBhdCwgbnVtX2ZpbGUsIGZpbGUsIGZsYWdzKTsKKwlpZiAoZnJlZV9wYXQpCisJICAgIHZpbV9mcmVlKHBhdCk7CisJcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAqZmlsZSA9IChjaGFyX3UgKiopIiI7CisgICAgKm51bV9maWxlID0gMDsKKyAgICBpZiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0hFTFApCisgICAgeworCWlmIChmaW5kX2hlbHBfdGFncyhwYXQsIG51bV9maWxlLCBmaWxlLCBGQUxTRSkgPT0gT0spCisJeworI2lmZGVmIEZFQVRfTVVMVElfTEFORworCSAgICBjbGVhbnVwX2hlbHBfdGFncygqbnVtX2ZpbGUsICpmaWxlKTsKKyNlbmRpZgorCSAgICByZXR1cm4gT0s7CisJfQorCXJldHVybiBGQUlMOworICAgIH0KKworI2lmbmRlZiBGRUFUX0NNRExfQ09NUEwKKyAgICByZXR1cm4gRkFJTDsKKyNlbHNlCisgICAgaWYgKHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9PTERfU0VUVElORykKKwlyZXR1cm4gRXhwYW5kT2xkU2V0dGluZyhudW1fZmlsZSwgZmlsZSk7CisgICAgaWYgKHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9CVUZGRVJTKQorCXJldHVybiBFeHBhbmRCdWZuYW1lcyhwYXQsIG51bV9maWxlLCBmaWxlLCBvcHRpb25zKTsKKyAgICBpZiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX1RBR1MKKwkgICAgfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX1RBR1NfTElTVEZJTEVTKQorCXJldHVybiBleHBhbmRfdGFncyh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfVEFHUywgcGF0LCBudW1fZmlsZSwgZmlsZSk7CisgICAgaWYgKHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9DT0xPUlMpCisJcmV0dXJuIEV4cGFuZFJURGlyKHBhdCwgbnVtX2ZpbGUsIGZpbGUsICJjb2xvcnMiKTsKKyAgICBpZiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0NPTVBJTEVSKQorCXJldHVybiBFeHBhbmRSVERpcihwYXQsIG51bV9maWxlLCBmaWxlLCAiY29tcGlsZXIiKTsKKworICAgIHJlZ21hdGNoLnJlZ3Byb2cgPSB2aW1fcmVnY29tcChwYXQsIHBfbWFnaWMgPyBSRV9NQUdJQyA6IDApOworICAgIGlmIChyZWdtYXRjaC5yZWdwcm9nID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICAvKiBzZXQgaWdub3JlLWNhc2UgYWNjb3JkaW5nIHRvIHBfaWMsIHBfc2NzIGFuZCBwYXQgKi8KKyAgICByZWdtYXRjaC5ybV9pYyA9IGlnbm9yZWNhc2UocGF0KTsKKworICAgIGlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfU0VUVElOR1MKKwkgICAgfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0JPT0xfU0VUVElOR1MpCisJcmV0ID0gRXhwYW5kU2V0dGluZ3MoeHAsICZyZWdtYXRjaCwgbnVtX2ZpbGUsIGZpbGUpOworICAgIGVsc2UgaWYgKHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9NQVBQSU5HUykKKwlyZXQgPSBFeHBhbmRNYXBwaW5ncygmcmVnbWF0Y2gsIG51bV9maWxlLCBmaWxlKTsKKyMgaWYgZGVmaW5lZChGRUFUX1VTUl9DTURTKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKyAgICBlbHNlIGlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfVVNFUl9ERUZJTkVEKQorCXJldCA9IEV4cGFuZFVzZXJEZWZpbmVkKHhwLCAmcmVnbWF0Y2gsIG51bV9maWxlLCBmaWxlKTsKKyMgZW5kaWYKKyAgICBlbHNlCisgICAgeworCXN0YXRpYyBzdHJ1Y3QgZXhwZ2VuCisJeworCSAgICBpbnQJCWNvbnRleHQ7CisJICAgIGNoYXJfdQkqKCgqZnVuYylfX0FSR1MoKGV4cGFuZF9UICosIGludCkpKTsKKwkgICAgaW50CQlpYzsKKwl9IHRhYltdID0KKwl7CisJICAgIHtFWFBBTkRfQ09NTUFORFMsIGdldF9jb21tYW5kX25hbWUsIEZBTFNFfSwKKyNpZmRlZiBGRUFUX1VTUl9DTURTCisJICAgIHtFWFBBTkRfVVNFUl9DT01NQU5EUywgZ2V0X3VzZXJfY29tbWFuZHMsIEZBTFNFfSwKKwkgICAge0VYUEFORF9VU0VSX0NNRF9GTEFHUywgZ2V0X3VzZXJfY21kX2ZsYWdzLCBGQUxTRX0sCisJICAgIHtFWFBBTkRfVVNFUl9OQVJHUywgZ2V0X3VzZXJfY21kX25hcmdzLCBGQUxTRX0sCisJICAgIHtFWFBBTkRfVVNFUl9DT01QTEVURSwgZ2V0X3VzZXJfY21kX2NvbXBsZXRlLCBGQUxTRX0sCisjZW5kaWYKKyNpZmRlZiBGRUFUX0VWQUwKKwkgICAge0VYUEFORF9VU0VSX1ZBUlMsIGdldF91c2VyX3Zhcl9uYW1lLCBGQUxTRX0sCisJICAgIHtFWFBBTkRfRlVOQ1RJT05TLCBnZXRfZnVuY3Rpb25fbmFtZSwgRkFMU0V9LAorCSAgICB7RVhQQU5EX1VTRVJfRlVOQywgZ2V0X3VzZXJfZnVuY19uYW1lLCBGQUxTRX0sCisJICAgIHtFWFBBTkRfRVhQUkVTU0lPTiwgZ2V0X2V4cHJfbmFtZSwgRkFMU0V9LAorI2VuZGlmCisjaWZkZWYgRkVBVF9NRU5VCisJICAgIHtFWFBBTkRfTUVOVVMsIGdldF9tZW51X25hbWUsIEZBTFNFfSwKKwkgICAge0VYUEFORF9NRU5VTkFNRVMsIGdldF9tZW51X25hbWVzLCBGQUxTRX0sCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NZTl9ITAorCSAgICB7RVhQQU5EX1NZTlRBWCwgZ2V0X3N5bnRheF9uYW1lLCBUUlVFfSwKKyNlbmRpZgorCSAgICB7RVhQQU5EX0hJR0hMSUdIVCwgZ2V0X2hpZ2hsaWdodF9uYW1lLCBUUlVFfSwKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAge0VYUEFORF9FVkVOVFMsIGdldF9ldmVudF9uYW1lLCBUUlVFfSwKKwkgICAge0VYUEFORF9BVUdST1VQLCBnZXRfYXVncm91cF9uYW1lLCBUUlVFfSwKKyNlbmRpZgorI2lmIChkZWZpbmVkKEhBVkVfTE9DQUxFX0gpIHx8IGRlZmluZWQoWF9MT0NBTEUpKSBcCisJJiYgKGRlZmluZWQoRkVBVF9HRVRURVhUKSB8fCBkZWZpbmVkKEZFQVRfTUJZVEUpKQorCSAgICB7RVhQQU5EX0xBTkdVQUdFLCBnZXRfbGFuZ19hcmcsIFRSVUV9LAorI2VuZGlmCisJICAgIHtFWFBBTkRfRU5WX1ZBUlMsIGdldF9lbnZfbmFtZSwgVFJVRX0sCisJfTsKKwlpbnQJaTsKKworCS8qCisJICogRmluZCBhIGNvbnRleHQgaW4gdGhlIHRhYmxlIGFuZCBjYWxsIHRoZSBFeHBhbmRHZW5lcmljKCkgd2l0aCB0aGUKKwkgKiByaWdodCBmdW5jdGlvbiB0byBkbyB0aGUgZXhwYW5zaW9uLgorCSAqLworCXJldCA9IEZBSUw7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZih0YWIpIC8gc2l6ZW9mKHN0cnVjdCBleHBnZW4pOyArK2kpCisJICAgIGlmICh4cC0+eHBfY29udGV4dCA9PSB0YWJbaV0uY29udGV4dCkKKwkgICAgeworCQlpZiAodGFiW2ldLmljKQorCQkgICAgcmVnbWF0Y2gucm1faWMgPSBUUlVFOworCQlyZXQgPSBFeHBhbmRHZW5lcmljKHhwLCAmcmVnbWF0Y2gsIG51bV9maWxlLCBmaWxlLCB0YWJbaV0uZnVuYyk7CisJCWJyZWFrOworCSAgICB9CisgICAgfQorCisgICAgdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7CisKKyAgICByZXR1cm4gcmV0OworI2VuZGlmIC8qIEZFQVRfQ01ETF9DT01QTCAqLworfQorCisjaWYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogRXhwYW5kIGEgbGlzdCBvZiBuYW1lcy4KKyAqCisgKiBHZW5lcmljIGZ1bmN0aW9uIGZvciBjb21tYW5kIGxpbmUgY29tcGxldGlvbi4gIEl0IGNhbGxzIGEgZnVuY3Rpb24gdG8KKyAqIG9idGFpbiBzdHJpbmdzLCBvbmUgYnkgb25lLglUaGUgc3RyaW5ncyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IGEgcmVnZXhwCisgKiBwcm9ncmFtLiAgTWF0Y2hpbmcgc3RyaW5ncyBhcmUgY29waWVkIGludG8gYW4gYXJyYXksIHdoaWNoIGlzIHJldHVybmVkLgorICoKKyAqIFJldHVybnMgT0sgd2hlbiBubyBwcm9ibGVtcyBlbmNvdW50ZXJlZCwgRkFJTCBmb3IgZXJyb3IgKG91dCBvZiBtZW1vcnkpLgorICovCisgICAgaW50CitFeHBhbmRHZW5lcmljKHhwLCByZWdtYXRjaCwgbnVtX2ZpbGUsIGZpbGUsIGZ1bmMpCisgICAgZXhwYW5kX1QJKnhwOworICAgIHJlZ21hdGNoX1QJKnJlZ21hdGNoOworICAgIGludAkJKm51bV9maWxlOworICAgIGNoYXJfdQkqKipmaWxlOworICAgIGNoYXJfdQkqKCgqZnVuYylfX0FSR1MoKGV4cGFuZF9UICosIGludCkpKTsKKwkJCQkJICAvKiByZXR1cm5zIGEgc3RyaW5nIGZyb20gdGhlIGxpc3QgKi8KK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQljb3VudCA9IDA7CisgICAgaW50CQlsb29wOworICAgIGNoYXJfdQkqc3RyOworCisgICAgLyogZG8gdGhpcyBsb29wIHR3aWNlOgorICAgICAqIGxvb3AgPT0gMDogY291bnQgdGhlIG51bWJlciBvZiBtYXRjaGluZyBuYW1lcworICAgICAqIGxvb3AgPT0gMTogY29weSB0aGUgbWF0Y2hpbmcgbmFtZXMgaW50byBhbGxvY2F0ZWQgbWVtb3J5CisgICAgICovCisgICAgZm9yIChsb29wID0gMDsgbG9vcCA8PSAxOyArK2xvb3ApCisgICAgeworCWZvciAoaSA9IDA7IDsgKytpKQorCXsKKwkgICAgc3RyID0gKCpmdW5jKSh4cCwgaSk7CisJICAgIGlmIChzdHIgPT0gTlVMTCkJICAgIC8qIGVuZCBvZiBsaXN0ICovCisJCWJyZWFrOworCSAgICBpZiAoKnN0ciA9PSBOVUwpCSAgICAvKiBza2lwIGVtcHR5IHN0cmluZ3MgKi8KKwkJY29udGludWU7CisKKwkgICAgaWYgKHZpbV9yZWdleGVjKHJlZ21hdGNoLCBzdHIsIChjb2xucl9UKTApKQorCSAgICB7CisJCWlmIChsb29wKQorCQl7CisJCSAgICBzdHIgPSB2aW1fc3Ryc2F2ZV9lc2NhcGVkKHN0ciwgKGNoYXJfdSAqKSIgXHRcXC4iKTsKKwkJICAgICgqZmlsZSlbY291bnRdID0gc3RyOworI2lmZGVmIEZFQVRfTUVOVQorCQkgICAgaWYgKGZ1bmMgPT0gZ2V0X21lbnVfbmFtZXMgJiYgc3RyICE9IE5VTEwpCisJCSAgICB7CisJCQkvKiB0ZXN0IGZvciBzZXBhcmF0b3IgYWRkZWQgYnkgZ2V0X21lbnVfbmFtZXMoKSAqLworCQkJc3RyICs9IFNUUkxFTihzdHIpIC0gMTsKKwkJCWlmICgqc3RyID09ICdcMDAxJykKKwkJCSAgICAqc3RyID0gJy4nOworCQkgICAgfQorI2VuZGlmCisJCX0KKwkJKytjb3VudDsKKwkgICAgfQorCX0KKwlpZiAobG9vcCA9PSAwKQorCXsKKwkgICAgaWYgKGNvdW50ID09IDApCisJCXJldHVybiBPSzsKKwkgICAgKm51bV9maWxlID0gY291bnQ7CisJICAgICpmaWxlID0gKGNoYXJfdSAqKilhbGxvYygodW5zaWduZWQpKGNvdW50ICogc2l6ZW9mKGNoYXJfdSAqKSkpOworCSAgICBpZiAoKmZpbGUgPT0gTlVMTCkKKwkgICAgeworCQkqZmlsZSA9IChjaGFyX3UgKiopIiI7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJICAgIGNvdW50ID0gMDsKKwl9CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworIyBpZiBkZWZpbmVkKEZFQVRfVVNSX0NNRFMpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorLyoKKyAqIEV4cGFuZCBuYW1lcyB3aXRoIGEgZnVuY3Rpb24gZGVmaW5lZCBieSB0aGUgdXNlci4KKyAqLworICAgIHN0YXRpYyBpbnQKK0V4cGFuZFVzZXJEZWZpbmVkKHhwLCByZWdtYXRjaCwgbnVtX2ZpbGUsIGZpbGUpCisgICAgZXhwYW5kX1QJKnhwOworICAgIHJlZ21hdGNoX1QJKnJlZ21hdGNoOworICAgIGludAkJKm51bV9maWxlOworICAgIGNoYXJfdQkqKipmaWxlOworeworICAgIGNoYXJfdQkqYXJnc1szXTsKKyAgICBjaGFyX3UJKmFsbDsKKyAgICBjaGFyX3UJKnM7CisgICAgY2hhcl91CSplOworICAgIGNoYXJfdSAgICAgIGtlZXA7CisgICAgY2hhcl91ICAgICAgbnVtWzUwXTsKKyAgICBnYXJyYXlfVAlnYTsKKyAgICBpbnQJCXNhdmVfY3VycmVudF9TSUQgPSBjdXJyZW50X1NJRDsKKworICAgIGlmICh4cC0+eHBfYXJnID09IE5VTEwgfHwgeHAtPnhwX2FyZ1swXSA9PSAnXDAnKQorCXJldHVybiBGQUlMOworICAgICpudW1fZmlsZSA9IDA7CisgICAgKmZpbGUgPSBOVUxMOworCisgICAga2VlcCA9IGNjbGluZS5jbWRidWZmW2NjbGluZS5jbWRsZW5dOworICAgIGNjbGluZS5jbWRidWZmW2NjbGluZS5jbWRsZW5dID0gMDsKKyAgICBzcHJpbnRmKChjaGFyICopbnVtLCAiJWQiLCBjY2xpbmUuY21kcG9zKTsKKyAgICBhcmdzWzBdID0geHAtPnhwX3BhdHRlcm47CisgICAgYXJnc1sxXSA9IGNjbGluZS5jbWRidWZmOworICAgIGFyZ3NbMl0gPSBudW07CisKKyAgICBjdXJyZW50X1NJRCA9IHhwLT54cF9zY3JpcHRJRDsKKyAgICBhbGwgPSBjYWxsX3ZpbV9mdW5jdGlvbih4cC0+eHBfYXJnLCAzLCBhcmdzLCBGQUxTRSk7CisgICAgY3VycmVudF9TSUQgPSBzYXZlX2N1cnJlbnRfU0lEOworICAgIGNjbGluZS5jbWRidWZmW2NjbGluZS5jbWRsZW5dID0ga2VlcDsKKyAgICBpZiAoYWxsID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBnYV9pbml0MigmZ2EsIChpbnQpc2l6ZW9mKGNoYXIgKiksIDMpOworICAgIGZvciAocyA9IGFsbDsgKnMgIT0gTlVMOyBzID0gZSkKKyAgICB7CisJZSA9IHZpbV9zdHJjaHIocywgJ1xuJyk7CisJaWYgKGUgPT0gTlVMTCkKKwkgICAgZSA9IHMgKyBTVFJMRU4ocyk7CisJa2VlcCA9ICplOworCSplID0gMDsKKworCWlmICh4cC0+eHBfcGF0dGVyblswXSAmJiB2aW1fcmVnZXhlYyhyZWdtYXRjaCwgcywgKGNvbG5yX1QpMCkgPT0gMCkKKwl7CisJICAgICplID0ga2VlcDsKKwkgICAgaWYgKCplICE9IE5VTCkKKwkJKytlOworCSAgICBjb250aW51ZTsKKwl9CisKKwlpZiAoZ2FfZ3JvdygmZ2EsIDEpID09IEZBSUwpCisJICAgIGJyZWFrOworCisJKChjaGFyX3UgKiopZ2EuZ2FfZGF0YSlbZ2EuZ2FfbGVuXSA9IHZpbV9zdHJuc2F2ZShzLCAoaW50KShlIC0gcykpOworCSsrZ2EuZ2FfbGVuOworCS0tZ2EuZ2Ffcm9vbTsKKworCSplID0ga2VlcDsKKwlpZiAoKmUgIT0gTlVMKQorCSAgICArK2U7CisgICAgfQorICAgIHZpbV9mcmVlKGFsbCk7CisgICAgKmZpbGUgPSBnYS5nYV9kYXRhOworICAgICpudW1fZmlsZSA9IGdhLmdhX2xlbjsKKyAgICByZXR1cm4gT0s7Cit9CisjZW5kaWYKKworLyoKKyAqIEV4cGFuZCBjb2xvciBzY2hlbWUgbmFtZXM6ICdydW50aW1lcGF0aCcvY29sb3JzL3twYXR9LnZpbQorICogb3IgY29tcGlsZXIgbmFtZXMuCisgKi8KKyAgICBzdGF0aWMgaW50CitFeHBhbmRSVERpcihwYXQsIG51bV9maWxlLCBmaWxlLCBkaXJuYW1lKQorICAgIGNoYXJfdQkqcGF0OworICAgIGludAkJKm51bV9maWxlOworICAgIGNoYXJfdQkqKipmaWxlOworICAgIGNoYXIJKmRpcm5hbWU7CS8qICJjb2xvcnMiIG9yICJjb21waWxlciIgKi8KK3sKKyAgICBjaGFyX3UJKmFsbDsKKyAgICBjaGFyX3UJKnM7CisgICAgY2hhcl91CSplOworICAgIGdhcnJheV9UCWdhOworCisgICAgKm51bV9maWxlID0gMDsKKyAgICAqZmlsZSA9IE5VTEw7CisgICAgcyA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKHBhdCkgKyBTVFJMRU4oZGlybmFtZSkgKyA3KSk7CisgICAgaWYgKHMgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKyAgICBzcHJpbnRmKChjaGFyICopcywgIiVzLyVzKi52aW0iLCBkaXJuYW1lLCBwYXQpOworICAgIGFsbCA9IGdsb2JwYXRoKHBfcnRwLCBzKTsKKyAgICB2aW1fZnJlZShzKTsKKyAgICBpZiAoYWxsID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBnYV9pbml0MigmZ2EsIChpbnQpc2l6ZW9mKGNoYXIgKiksIDMpOworICAgIGZvciAocyA9IGFsbDsgKnMgIT0gTlVMOyBzID0gZSkKKyAgICB7CisJZSA9IHZpbV9zdHJjaHIocywgJ1xuJyk7CisJaWYgKGUgPT0gTlVMTCkKKwkgICAgZSA9IHMgKyBTVFJMRU4ocyk7CisJaWYgKGdhX2dyb3coJmdhLCAxKSA9PSBGQUlMKQorCSAgICBicmVhazsKKwlpZiAoZSAtIDQgPiBzICYmIFNUUk5JQ01QKGUgLSA0LCAiLnZpbSIsIDQpID09IDApCisJeworCSAgICBmb3IgKHMgPSBlIC0gNDsgcyA+IGFsbDsgLS1zKQorCQlpZiAoKnMgPT0gJ1xuJyB8fCB2aW1faXNwYXRoc2VwKCpzKSkKKwkJICAgIGJyZWFrOworCSAgICArK3M7CisJICAgICgoY2hhcl91ICoqKWdhLmdhX2RhdGEpW2dhLmdhX2xlbl0gPQorCQkJCQkgICAgdmltX3N0cm5zYXZlKHMsIChpbnQpKGUgLSBzIC0gNCkpOworCSAgICArK2dhLmdhX2xlbjsKKwkgICAgLS1nYS5nYV9yb29tOworCX0KKwlpZiAoKmUgIT0gTlVMKQorCSAgICArK2U7CisgICAgfQorICAgIHZpbV9mcmVlKGFsbCk7CisgICAgKmZpbGUgPSBnYS5nYV9kYXRhOworICAgICpudW1fZmlsZSA9IGdhLmdhX2xlbjsKKyAgICByZXR1cm4gT0s7Cit9CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpIHx8IGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEV4cGFuZCAiZmlsZSIgZm9yIGFsbCBjb21tYS1zZXBhcmF0ZWQgZGlyZWN0b3JpZXMgaW4gInBhdGgiLgorICogUmV0dXJucyBhbiBhbGxvY2F0ZWQgc3RyaW5nIHdpdGggYWxsIG1hdGNoZXMgY29uY2F0ZW5hdGVkLCBzZXBhcmF0ZWQgYnkKKyAqIG5ld2xpbmVzLiAgUmV0dXJucyBOVUxMIGZvciBhbiBlcnJvciBvciBubyBtYXRjaGVzLgorICovCisgICAgY2hhcl91ICoKK2dsb2JwYXRoKHBhdGgsIGZpbGUpCisgICAgY2hhcl91CSpwYXRoOworICAgIGNoYXJfdQkqZmlsZTsKK3sKKyAgICBleHBhbmRfVAl4cGM7CisgICAgY2hhcl91CSpidWY7CisgICAgZ2FycmF5X1QJZ2E7CisgICAgaW50CQlpOworICAgIGludAkJbGVuOworICAgIGludAkJbnVtX3A7CisgICAgY2hhcl91CSoqcDsKKyAgICBjaGFyX3UJKmN1ciA9IE5VTEw7CisKKyAgICBidWYgPSBhbGxvYyhNQVhQQVRITCk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgeHBjLnhwX2NvbnRleHQgPSBFWFBBTkRfRklMRVM7CisgICAgeHBjLnhwX2JhY2tzbGFzaCA9IFhQX0JTX05PTkU7CisgICAgZ2FfaW5pdDIoJmdhLCAxLCAxMDApOworCisgICAgLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzIGluIHtwYXRofS4gKi8KKyAgICB3aGlsZSAoKnBhdGggIT0gTlVMKQorICAgIHsKKwkvKiBDb3B5IG9uZSBpdGVtIG9mIHRoZSBwYXRoIHRvIGJ1ZltdIGFuZCBjb25jYXRlbmF0ZSB0aGUgZmlsZSBuYW1lLiAqLworCWNvcHlfb3B0aW9uX3BhcnQoJnBhdGgsIGJ1ZiwgTUFYUEFUSEwsICIsIik7CisJaWYgKFNUUkxFTihidWYpICsgU1RSTEVOKGZpbGUpICsgMiA8IE1BWFBBVEhMKQorCXsKKwkgICAgYWRkX3BhdGhzZXAoYnVmKTsKKwkgICAgU1RSQ0FUKGJ1ZiwgZmlsZSk7CisJICAgIGlmIChFeHBhbmRGcm9tQ29udGV4dCgmeHBjLCBidWYsICZudW1fcCwgJnAsIFdJTERfU0lMRU5UKSAhPSBGQUlMCisJCQkJCQkJCSAmJiBudW1fcCA+IDApCisJICAgIHsKKwkJRXhwYW5kRXNjYXBlKCZ4cGMsIGJ1ZiwgbnVtX3AsIHAsIFdJTERfU0lMRU5UKTsKKwkJZm9yIChsZW4gPSAwLCBpID0gMDsgaSA8IG51bV9wOyArK2kpCisJCSAgICBsZW4gKz0gKGxvbmdfdSlTVFJMRU4ocFtpXSkgKyAxOworCisJCS8qIENvbmNhdGVuYXRlIG5ldyByZXN1bHRzIHRvIHByZXZpb3VzIG9uZXMuICovCisJCWlmIChnYV9ncm93KCZnYSwgbGVuKSA9PSBPSykKKwkJeworCQkgICAgY3VyID0gKGNoYXJfdSAqKWdhLmdhX2RhdGEgKyBnYS5nYV9sZW47CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3A7ICsraSkKKwkJICAgIHsKKwkJCVNUUkNQWShjdXIsIHBbaV0pOworCQkJY3VyICs9IFNUUkxFTihwW2ldKTsKKwkJCSpjdXIrKyA9ICdcbic7CisJCSAgICB9CisJCSAgICBnYS5nYV9sZW4gKz0gbGVuOworCQkgICAgZ2EuZ2Ffcm9vbSAtPSBsZW47CisJCX0KKwkJRnJlZVdpbGQobnVtX3AsIHApOworCSAgICB9CisJfQorICAgIH0KKyAgICBpZiAoY3VyICE9IE5VTEwpCisJKi0tY3VyID0gMDsgLyogUmVwbGFjZSB0cmFpbGluZyBuZXdsaW5lIHdpdGggTlVMICovCisKKyAgICB2aW1fZnJlZShidWYpOworICAgIHJldHVybiAoY2hhcl91ICopZ2EuZ2FfZGF0YTsKK30KKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfQ01ESElTVCkgfHwgZGVmaW5lZChQUk9UTykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIENvbW1hbmQgbGluZSBoaXN0b3J5IHN0dWZmCSAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVHJhbnNsYXRlIGEgaGlzdG9yeSBjaGFyYWN0ZXIgdG8gdGhlIGFzc29jaWF0ZWQgdHlwZSBudW1iZXIuCisgKi8KKyAgICBzdGF0aWMgaW50CitoaXN0X2NoYXIydHlwZShjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBpZiAoYyA9PSAnOicpCisJcmV0dXJuIEhJU1RfQ01EOworICAgIGlmIChjID09ICc9JykKKwlyZXR1cm4gSElTVF9FWFBSOworICAgIGlmIChjID09ICdAJykKKwlyZXR1cm4gSElTVF9JTlBVVDsKKyAgICBpZiAoYyA9PSAnPicpCisJcmV0dXJuIEhJU1RfREVCVUc7CisgICAgcmV0dXJuIEhJU1RfU0VBUkNIOwkgICAgLyogbXVzdCBiZSAnPycgb3IgJy8nICovCit9CisKKy8qCisgKiBUYWJsZSBvZiBoaXN0b3J5IG5hbWVzLgorICogVGhlc2UgbmFtZXMgYXJlIHVzZWQgaW4gOmhpc3RvcnkgYW5kIHZhcmlvdXMgaGlzdC4uLigpIGZ1bmN0aW9ucy4KKyAqIEl0IGlzIHN1ZmZpY2llbnQgdG8gZ2l2ZSB0aGUgc2lnbmlmaWNhbnQgcHJlZml4IG9mIGEgaGlzdG9yeSBuYW1lLgorICovCisKK3N0YXRpYyBjaGFyICooaGlzdG9yeV9uYW1lc1tdKSA9Cit7CisgICAgImNtZCIsCisgICAgInNlYXJjaCIsCisgICAgImV4cHIiLAorICAgICJpbnB1dCIsCisgICAgImRlYnVnIiwKKyAgICBOVUxMCit9OworCisvKgorICogaW5pdF9oaXN0b3J5KCkgLSBJbml0aWFsaXplIHRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeS4KKyAqIEFsc28gdXNlZCB0byByZS1hbGxvY2F0ZSB0aGUgaGlzdG9yeSB3aGVuIHRoZSBzaXplIGNoYW5nZXMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5pdF9oaXN0b3J5KCkKK3sKKyAgICBpbnQJCW5ld2xlbjsJICAgIC8qIG5ldyBsZW5ndGggb2YgaGlzdG9yeSB0YWJsZSAqLworICAgIGhpc3RlbnRyeV9UCSp0ZW1wOworICAgIGludAkJaTsKKyAgICBpbnQJCWo7CisgICAgaW50CQl0eXBlOworCisgICAgLyoKKyAgICAgKiBJZiBzaXplIG9mIGhpc3RvcnkgdGFibGUgY2hhbmdlZCwgcmVhbGxvY2F0ZSBpdAorICAgICAqLworICAgIG5ld2xlbiA9IChpbnQpcF9oaTsKKyAgICBpZiAobmV3bGVuICE9IGhpc2xlbikJCQkvKiBoaXN0b3J5IGxlbmd0aCBjaGFuZ2VkICovCisgICAgeworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBISVNUX0NPVU5UOyArK3R5cGUpICAgLyogYWRqdXN0IHRoZSB0YWJsZXMgKi8KKwl7CisJICAgIGlmIChuZXdsZW4pCisJICAgIHsKKwkJdGVtcCA9IChoaXN0ZW50cnlfVCAqKWxhbGxvYygKKwkJCQkobG9uZ191KShuZXdsZW4gKiBzaXplb2YoaGlzdGVudHJ5X1QpKSwgVFJVRSk7CisJCWlmICh0ZW1wID09IE5VTEwpICAgLyogb3V0IG9mIG1lbW9yeSEgKi8KKwkJeworCQkgICAgaWYgKHR5cGUgPT0gMCkgIC8qIGZpcnN0IG9uZToganVzdCBrZWVwIHRoZSBvbGQgbGVuZ3RoICovCisJCSAgICB7CisJCQluZXdsZW4gPSBoaXNsZW47CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIC8qIEFscmVhZHkgY2hhbmdlZCBvbmUgdGFibGUsIG5vdyB3ZSBjYW4gb25seSBoYXZlIHplcm8KKwkJICAgICAqIGxlbmd0aCBmb3IgYWxsIHRhYmxlcy4gKi8KKwkJICAgIG5ld2xlbiA9IDA7CisJCSAgICB0eXBlID0gLTE7CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKwkJdGVtcCA9IE5VTEw7CisJICAgIGlmIChuZXdsZW4gPT0gMCB8fCB0ZW1wICE9IE5VTEwpCisJICAgIHsKKwkJaWYgKGhpc2lkeFt0eXBlXSA8IDApCQkvKiB0aGVyZSBhcmUgbm8gZW50cmllcyB5ZXQgKi8KKwkJeworCQkgICAgZm9yIChpID0gMDsgaSA8IG5ld2xlbjsgKytpKQorCQkgICAgeworCQkJdGVtcFtpXS5oaXNudW0gPSAwOworCQkJdGVtcFtpXS5oaXNzdHIgPSBOVUxMOworCQkgICAgfQorCQl9CisJCWVsc2UgaWYgKG5ld2xlbiA+IGhpc2xlbikJLyogYXJyYXkgYmVjb21lcyBiaWdnZXIgKi8KKwkJeworCQkgICAgZm9yIChpID0gMDsgaSA8PSBoaXNpZHhbdHlwZV07ICsraSkKKwkJCXRlbXBbaV0gPSBoaXN0b3J5W3R5cGVdW2ldOworCQkgICAgaiA9IGk7CisJCSAgICBmb3IgKCA7IGkgPD0gbmV3bGVuIC0gKGhpc2xlbiAtIGhpc2lkeFt0eXBlXSk7ICsraSkKKwkJICAgIHsKKwkJCXRlbXBbaV0uaGlzbnVtID0gMDsKKwkJCXRlbXBbaV0uaGlzc3RyID0gTlVMTDsKKwkJICAgIH0KKwkJICAgIGZvciAoIDsgaiA8IGhpc2xlbjsgKytpLCArK2opCisJCQl0ZW1wW2ldID0gaGlzdG9yeVt0eXBlXVtqXTsKKwkJfQorCQllbHNlCQkJCS8qIGFycmF5IGJlY29tZXMgc21hbGxlciBvciAwICovCisJCXsKKwkJICAgIGogPSBoaXNpZHhbdHlwZV07CisJCSAgICBmb3IgKGkgPSBuZXdsZW4gLSAxOyA7IC0taSkKKwkJICAgIHsKKwkJCWlmIChpID49IDApCQkvKiBjb3B5IG5ld2VzdCBlbnRyaWVzICovCisJCQkgICAgdGVtcFtpXSA9IGhpc3RvcnlbdHlwZV1bal07CisJCQllbHNlCQkJLyogcmVtb3ZlIG9sZGVyIGVudHJpZXMgKi8KKwkJCSAgICB2aW1fZnJlZShoaXN0b3J5W3R5cGVdW2pdLmhpc3N0cik7CisJCQlpZiAoLS1qIDwgMCkKKwkJCSAgICBqID0gaGlzbGVuIC0gMTsKKwkJCWlmIChqID09IGhpc2lkeFt0eXBlXSkKKwkJCSAgICBicmVhazsKKwkJICAgIH0KKwkJICAgIGhpc2lkeFt0eXBlXSA9IG5ld2xlbiAtIDE7CisJCX0KKwkJdmltX2ZyZWUoaGlzdG9yeVt0eXBlXSk7CisJCWhpc3RvcnlbdHlwZV0gPSB0ZW1wOworCSAgICB9CisJfQorCWhpc2xlbiA9IG5ld2xlbjsKKyAgICB9Cit9CisKKy8qCisgKiBDaGVjayBpZiBjb21tYW5kIGxpbmUgJ3N0cicgaXMgYWxyZWFkeSBpbiBoaXN0b3J5LgorICogSWYgJ21vdmVfdG9fZnJvbnQnIGlzIFRSVUUsIG1hdGNoaW5nIGVudHJ5IGlzIG1vdmVkIHRvIGVuZCBvZiBoaXN0b3J5LgorICovCisgICAgc3RhdGljIGludAoraW5faGlzdG9yeSh0eXBlLCBzdHIsIG1vdmVfdG9fZnJvbnQpCisgICAgaW50CSAgICB0eXBlOworICAgIGNoYXJfdSAgKnN0cjsKKyAgICBpbnQJICAgIG1vdmVfdG9fZnJvbnQ7CS8qIE1vdmUgdGhlIGVudHJ5IHRvIHRoZSBmcm9udCBpZiBpdCBleGlzdHMgKi8KK3sKKyAgICBpbnQJICAgIGk7CisgICAgaW50CSAgICBsYXN0X2kgPSAtMTsKKworICAgIGlmIChoaXNpZHhbdHlwZV0gPCAwKQorCXJldHVybiBGQUxTRTsKKyAgICBpID0gaGlzaWR4W3R5cGVdOworICAgIGRvCisgICAgeworCWlmIChoaXN0b3J5W3R5cGVdW2ldLmhpc3N0ciA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFMU0U7CisJaWYgKFNUUkNNUChzdHIsIGhpc3RvcnlbdHlwZV1baV0uaGlzc3RyKSA9PSAwKQorCXsKKwkgICAgaWYgKCFtb3ZlX3RvX2Zyb250KQorCQlyZXR1cm4gVFJVRTsKKwkgICAgbGFzdF9pID0gaTsKKwkgICAgYnJlYWs7CisJfQorCWlmICgtLWkgPCAwKQorCSAgICBpID0gaGlzbGVuIC0gMTsKKyAgICB9IHdoaWxlIChpICE9IGhpc2lkeFt0eXBlXSk7CisKKyAgICBpZiAobGFzdF9pID49IDApCisgICAgeworCXN0ciA9IGhpc3RvcnlbdHlwZV1baV0uaGlzc3RyOworCXdoaWxlIChpICE9IGhpc2lkeFt0eXBlXSkKKwl7CisJICAgIGlmICgrK2kgPj0gaGlzbGVuKQorCQlpID0gMDsKKwkgICAgaGlzdG9yeVt0eXBlXVtsYXN0X2ldID0gaGlzdG9yeVt0eXBlXVtpXTsKKwkgICAgbGFzdF9pID0gaTsKKwl9CisJaGlzdG9yeVt0eXBlXVtpXS5oaXNzdHIgPSBzdHI7CisJaGlzdG9yeVt0eXBlXVtpXS5oaXNudW0gPSArK2hpc251bVt0eXBlXTsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogQ29udmVydCBoaXN0b3J5IG5hbWUgKGZyb20gdGFibGUgYWJvdmUpIHRvIGl0cyBISVNUXyBlcXVpdmFsZW50LgorICogV2hlbiAibmFtZSIgaXMgZW1wdHksIHJldHVybiAiY21kIiBoaXN0b3J5LgorICogUmV0dXJucyAtMSBmb3IgdW5rbm93biBoaXN0b3J5IG5hbWUuCisgKi8KKyAgICBpbnQKK2dldF9oaXN0dHlwZShuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQlsZW4gPSAoaW50KVNUUkxFTihuYW1lKTsKKworICAgIC8qIE5vIGFyZ3VtZW50OiB1c2UgY3VycmVudCBoaXN0b3J5LiAqLworICAgIGlmIChsZW4gPT0gMCkKKwlyZXR1cm4gaGlzdF9jaGFyMnR5cGUoY2NsaW5lLmNtZGZpcnN0Yyk7CisKKyAgICBmb3IgKGkgPSAwOyBoaXN0b3J5X25hbWVzW2ldICE9IE5VTEw7ICsraSkKKwlpZiAoU1RSTklDTVAobmFtZSwgaGlzdG9yeV9uYW1lc1tpXSwgbGVuKSA9PSAwKQorCSAgICByZXR1cm4gaTsKKworICAgIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiOj1APj8vIiwgbmFtZVswXSkgIT0gTlVMTCAmJiBuYW1lWzFdID09IE5VTCkKKwlyZXR1cm4gaGlzdF9jaGFyMnR5cGUobmFtZVswXSk7CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQJbGFzdF9tYXB0aWNrID0gLTE7CS8qIGxhc3Qgc2VlbiBtYXB0aWNrICovCisKKy8qCisgKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgZ2l2ZW4gaGlzdG9yeS4gIElmIHRoZSBzdHJpbmcgaXMgYWxyZWFkeSBpbiB0aGUKKyAqIGhpc3RvcnkgdGhlbiBpdCBpcyBtb3ZlZCB0byB0aGUgZnJvbnQuICAiaGlzdHlwZSIgbWF5IGJlIG9uZSBvZiBoZSBISVNUXworICogdmFsdWVzLgorICovCisgICAgdm9pZAorYWRkX3RvX2hpc3RvcnkoaGlzdHlwZSwgbmV3X2VudHJ5LCBpbl9tYXAsIHNlcCkKKyAgICBpbnQJCWhpc3R5cGU7CisgICAgY2hhcl91CSpuZXdfZW50cnk7CisgICAgaW50CQlpbl9tYXA7CQkvKiBjb25zaWRlciBtYXB0aWNrIHdoZW4gaW5zaWRlIGEgbWFwcGluZyAqLworICAgIGludAkJc2VwOwkJLyogc2VwYXJhdG9yIGNoYXJhY3RlciB1c2VkIChzZWFyY2ggaGlzdCkgKi8KK3sKKyAgICBoaXN0ZW50cnlfVAkqaGlzcHRyOworICAgIGludAkJbGVuOworCisgICAgaWYgKGhpc2xlbiA9PSAwKQkJLyogbm8gaGlzdG9yeSAqLworCXJldHVybjsKKworICAgIC8qCisgICAgICogU2VhcmNoZXMgaW5zaWRlIHRoZSBzYW1lIG1hcHBpbmcgb3ZlcndyaXRlIGVhY2ggb3RoZXIsIHNvIHRoYXQgb25seQorICAgICAqIHRoZSBsYXN0IGxpbmUgaXMga2VwdC4gIEJlIGNhcmVmdWwgbm90IHRvIHJlbW92ZSBhIGxpbmUgdGhhdCB3YXMgbW92ZWQKKyAgICAgKiBkb3duLCBvbmx5IGxpbmVzIHRoYXQgd2VyZSBhZGRlZC4KKyAgICAgKi8KKyAgICBpZiAoaGlzdHlwZSA9PSBISVNUX1NFQVJDSCAmJiBpbl9tYXApCisgICAgeworCWlmIChtYXB0aWNrID09IGxhc3RfbWFwdGljaykKKwl7CisJICAgIC8qIEN1cnJlbnQgbGluZSBpcyBmcm9tIHRoZSBzYW1lIG1hcHBpbmcsIHJlbW92ZSBpdCAqLworCSAgICBoaXNwdHIgPSAmaGlzdG9yeVtISVNUX1NFQVJDSF1baGlzaWR4W0hJU1RfU0VBUkNIXV07CisJICAgIHZpbV9mcmVlKGhpc3B0ci0+aGlzc3RyKTsKKwkgICAgaGlzcHRyLT5oaXNzdHIgPSBOVUxMOworCSAgICBoaXNwdHItPmhpc251bSA9IDA7CisJICAgIC0taGlzbnVtW2hpc3R5cGVdOworCSAgICBpZiAoLS1oaXNpZHhbSElTVF9TRUFSQ0hdIDwgMCkKKwkJaGlzaWR4W0hJU1RfU0VBUkNIXSA9IGhpc2xlbiAtIDE7CisJfQorCWxhc3RfbWFwdGljayA9IC0xOworICAgIH0KKyAgICBpZiAoIWluX2hpc3RvcnkoaGlzdHlwZSwgbmV3X2VudHJ5LCBUUlVFKSkKKyAgICB7CisJaWYgKCsraGlzaWR4W2hpc3R5cGVdID09IGhpc2xlbikKKwkgICAgaGlzaWR4W2hpc3R5cGVdID0gMDsKKwloaXNwdHIgPSAmaGlzdG9yeVtoaXN0eXBlXVtoaXNpZHhbaGlzdHlwZV1dOworCXZpbV9mcmVlKGhpc3B0ci0+aGlzc3RyKTsKKworCS8qIFN0b3JlIHRoZSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIE5VTCBvZiB0aGUgc3RyaW5nLiAqLworCWxlbiA9IFNUUkxFTihuZXdfZW50cnkpOworCWhpc3B0ci0+aGlzc3RyID0gdmltX3N0cm5zYXZlKG5ld19lbnRyeSwgbGVuICsgMik7CisJaWYgKGhpc3B0ci0+aGlzc3RyICE9IE5VTEwpCisJICAgIGhpc3B0ci0+aGlzc3RyW2xlbiArIDFdID0gc2VwOworCisJaGlzcHRyLT5oaXNudW0gPSArK2hpc251bVtoaXN0eXBlXTsKKwlpZiAoaGlzdHlwZSA9PSBISVNUX1NFQVJDSCAmJiBpbl9tYXApCisJICAgIGxhc3RfbWFwdGljayA9IG1hcHRpY2s7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qCisgKiBHZXQgaWRlbnRpZmllciBvZiBuZXdlc3QgaGlzdG9yeSBlbnRyeS4KKyAqICJoaXN0eXBlIiBtYXkgYmUgb25lIG9mIHRoZSBISVNUXyB2YWx1ZXMuCisgKi8KKyAgICBpbnQKK2dldF9oaXN0b3J5X2lkeChoaXN0eXBlKQorICAgIGludAkgICAgaGlzdHlwZTsKK3sKKyAgICBpZiAoaGlzbGVuID09IDAgfHwgaGlzdHlwZSA8IDAgfHwgaGlzdHlwZSA+PSBISVNUX0NPVU5UCisJCSAgICB8fCBoaXNpZHhbaGlzdHlwZV0gPCAwKQorCXJldHVybiAtMTsKKworICAgIHJldHVybiBoaXN0b3J5W2hpc3R5cGVdW2hpc2lkeFtoaXN0eXBlXV0uaGlzbnVtOworfQorCisvKgorICogR2V0IHRoZSBjdXJyZW50IGNvbW1hbmQgbGluZSBpbiBhbGxvY2F0ZWQgbWVtb3J5LgorICogT25seSB3b3JrcyB3aGVuIHRoZSBjb21tYW5kIGxpbmUgaXMgYmVpbmcgZWRpdGVkLgorICogUmV0dXJucyBOVUxMIHdoZW4gc29tZXRoaW5nIGlzIHdyb25nLgorICovCisgICAgY2hhcl91ICoKK2dldF9jbWRsaW5lX3N0cigpCit7CisgICAgaWYgKGNjbGluZS5jbWRidWZmID09IE5VTEwgfHwgKFN0YXRlICYgQ01ETElORSkgPT0gMCkKKwlyZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gdmltX3N0cm5zYXZlKGNjbGluZS5jbWRidWZmLCBjY2xpbmUuY21kbGVuKTsKK30KKworLyoKKyAqIEdldCB0aGUgY3VycmVudCBjb21tYW5kIGxpbmUgcG9zaXRpb24sIGNvdW50ZWQgaW4gYnl0ZXMuCisgKiBaZXJvIGlzIHRoZSBmaXJzdCBwb3NpdGlvbi4KKyAqIE9ubHkgd29ya3Mgd2hlbiB0aGUgY29tbWFuZCBsaW5lIGlzIGJlaW5nIGVkaXRlZC4KKyAqIFJldHVybnMgLTEgd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuCisgKi8KKyAgICBpbnQKK2dldF9jbWRsaW5lX3BvcygpCit7CisgICAgaWYgKGNjbGluZS5jbWRidWZmID09IE5VTEwgfHwgKFN0YXRlICYgQ01ETElORSkgPT0gMCkKKwlyZXR1cm4gLTE7CisgICAgcmV0dXJuIGNjbGluZS5jbWRwb3M7Cit9CisKKy8qCisgKiBTZXQgdGhlIGNvbW1hbmQgbGluZSBieXRlIHBvc2l0aW9uIHRvICJwb3MiLiAgWmVybyBpcyB0aGUgZmlyc3QgcG9zaXRpb24uCisgKiBPbmx5IHdvcmtzIHdoZW4gdGhlIGNvbW1hbmQgbGluZSBpcyBiZWluZyBlZGl0ZWQuCisgKiBSZXR1cm5zIDEgd2hlbiBmYWlsZWQsIDAgd2hlbiBPSy4KKyAqLworICAgIGludAorc2V0X2NtZGxpbmVfcG9zKHBvcykKKyAgICBpbnQJCXBvczsKK3sKKyAgICBpZiAoY2NsaW5lLmNtZGJ1ZmYgPT0gTlVMTCB8fCAoU3RhdGUgJiBDTURMSU5FKSA9PSAwKQorCXJldHVybiAxOworCisgICAgLyogVGhlIHBvc2l0aW9uIGlzIG5vdCBzZXQgZGlyZWN0bHkgYnV0IGFmdGVyIENUUkwtXCBlIG9yIENUUkwtUiA9IGhhcworICAgICAqIGNoYW5nZWQgdGhlIGNvbW1hbmQgbGluZS4gKi8KKyAgICBpZiAocG9zIDwgMCkKKwluZXdfY21kcG9zID0gMDsKKyAgICBlbHNlCisJbmV3X2NtZHBvcyA9IHBvczsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGN1bGF0ZSBoaXN0b3J5IGluZGV4IGZyb20gYSBudW1iZXI6CisgKiAgIG51bSA+IDA6IHNlZW4gYXMgaWRlbnRpZnlpbmcgbnVtYmVyIG9mIGEgaGlzdG9yeSBlbnRyeQorICogICBudW0gPCAwOiByZWxhdGl2ZSBwb3NpdGlvbiBpbiBoaXN0b3J5IHdydCBuZXdlc3QgZW50cnkKKyAqICJoaXN0eXBlIiBtYXkgYmUgb25lIG9mIHRoZSBISVNUXyB2YWx1ZXMuCisgKi8KKyAgICBzdGF0aWMgaW50CitjYWxjX2hpc3RfaWR4KGhpc3R5cGUsIG51bSkKKyAgICBpbnQJCWhpc3R5cGU7CisgICAgaW50CQludW07Cit7CisgICAgaW50CQlpOworICAgIGhpc3RlbnRyeV9UCSpoaXN0OworICAgIGludAkJd3JhcHBlZCA9IEZBTFNFOworCisgICAgaWYgKGhpc2xlbiA9PSAwIHx8IGhpc3R5cGUgPCAwIHx8IGhpc3R5cGUgPj0gSElTVF9DT1VOVAorCQkgICAgfHwgKGkgPSBoaXNpZHhbaGlzdHlwZV0pIDwgMCB8fCBudW0gPT0gMCkKKwlyZXR1cm4gLTE7CisKKyAgICBoaXN0ID0gaGlzdG9yeVtoaXN0eXBlXTsKKyAgICBpZiAobnVtID4gMCkKKyAgICB7CisJd2hpbGUgKGhpc3RbaV0uaGlzbnVtID4gbnVtKQorCSAgICBpZiAoLS1pIDwgMCkKKwkgICAgeworCQlpZiAod3JhcHBlZCkKKwkJICAgIGJyZWFrOworCQlpICs9IGhpc2xlbjsKKwkJd3JhcHBlZCA9IFRSVUU7CisJICAgIH0KKwlpZiAoaGlzdFtpXS5oaXNudW0gPT0gbnVtICYmIGhpc3RbaV0uaGlzc3RyICE9IE5VTEwpCisJICAgIHJldHVybiBpOworICAgIH0KKyAgICBlbHNlIGlmICgtbnVtIDw9IGhpc2xlbikKKyAgICB7CisJaSArPSBudW0gKyAxOworCWlmIChpIDwgMCkKKwkgICAgaSArPSBoaXNsZW47CisJaWYgKGhpc3RbaV0uaGlzc3RyICE9IE5VTEwpCisJICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKKy8qCisgKiBHZXQgYSBoaXN0b3J5IGVudHJ5IGJ5IGl0cyBpbmRleC4KKyAqICJoaXN0eXBlIiBtYXkgYmUgb25lIG9mIHRoZSBISVNUXyB2YWx1ZXMuCisgKi8KKyAgICBjaGFyX3UgKgorZ2V0X2hpc3RvcnlfZW50cnkoaGlzdHlwZSwgaWR4KQorICAgIGludAkgICAgaGlzdHlwZTsKKyAgICBpbnQJICAgIGlkeDsKK3sKKyAgICBpZHggPSBjYWxjX2hpc3RfaWR4KGhpc3R5cGUsIGlkeCk7CisgICAgaWYgKGlkeCA+PSAwKQorCXJldHVybiBoaXN0b3J5W2hpc3R5cGVdW2lkeF0uaGlzc3RyOworICAgIGVsc2UKKwlyZXR1cm4gKGNoYXJfdSAqKSIiOworfQorCisvKgorICogQ2xlYXIgYWxsIGVudHJpZXMgb2YgYSBoaXN0b3J5LgorICogImhpc3R5cGUiIG1heSBiZSBvbmUgb2YgdGhlIEhJU1RfIHZhbHVlcy4KKyAqLworICAgIGludAorY2xyX2hpc3RvcnkoaGlzdHlwZSkKKyAgICBpbnQJCWhpc3R5cGU7Cit7CisgICAgaW50CQlpOworICAgIGhpc3RlbnRyeV9UCSpoaXNwdHI7CisKKyAgICBpZiAoaGlzbGVuICE9IDAgJiYgaGlzdHlwZSA+PSAwICYmIGhpc3R5cGUgPCBISVNUX0NPVU5UKQorICAgIHsKKwloaXNwdHIgPSBoaXN0b3J5W2hpc3R5cGVdOworCWZvciAoaSA9IGhpc2xlbjsgaS0tOykKKwl7CisJICAgIHZpbV9mcmVlKGhpc3B0ci0+aGlzc3RyKTsKKwkgICAgaGlzcHRyLT5oaXNudW0gPSAwOworCSAgICBoaXNwdHIrKy0+aGlzc3RyID0gTlVMTDsKKwl9CisJaGlzaWR4W2hpc3R5cGVdID0gLTE7CS8qIG1hcmsgaGlzdG9yeSBhcyBjbGVhcmVkICovCisJaGlzbnVtW2hpc3R5cGVdID0gMDsJLyogcmVzZXQgaWRlbnRpZmllciBjb3VudGVyICovCisJcmV0dXJuIE9LOworICAgIH0KKyAgICByZXR1cm4gRkFJTDsKK30KKworLyoKKyAqIFJlbW92ZSBhbGwgZW50cmllcyBtYXRjaGluZyB7c3RyfSBmcm9tIGEgaGlzdG9yeS4KKyAqICJoaXN0eXBlIiBtYXkgYmUgb25lIG9mIHRoZSBISVNUXyB2YWx1ZXMuCisgKi8KKyAgICBpbnQKK2RlbF9oaXN0b3J5X2VudHJ5KGhpc3R5cGUsIHN0cikKKyAgICBpbnQJCWhpc3R5cGU7CisgICAgY2hhcl91CSpzdHI7Cit7CisgICAgcmVnbWF0Y2hfVAlyZWdtYXRjaDsKKyAgICBoaXN0ZW50cnlfVAkqaGlzcHRyOworICAgIGludAkJaWR4OworICAgIGludAkJaTsKKyAgICBpbnQJCWxhc3Q7CisgICAgaW50CQlmb3VuZCA9IEZBTFNFOworCisgICAgcmVnbWF0Y2gucmVncHJvZyA9IE5VTEw7CisgICAgcmVnbWF0Y2gucm1faWMgPSBGQUxTRTsJLyogYWx3YXlzIG1hdGNoIGNhc2UgKi8KKyAgICBpZiAoaGlzbGVuICE9IDAKKwkgICAgJiYgaGlzdHlwZSA+PSAwCisJICAgICYmIGhpc3R5cGUgPCBISVNUX0NPVU5UCisJICAgICYmICpzdHIgIT0gTlVMCisJICAgICYmIChpZHggPSBoaXNpZHhbaGlzdHlwZV0pID49IDAKKwkgICAgJiYgKHJlZ21hdGNoLnJlZ3Byb2cgPSB2aW1fcmVnY29tcChzdHIsIFJFX01BR0lDICsgUkVfU1RSSU5HKSkKKwkJCQkJCQkJICAgICAgIT0gTlVMTCkKKyAgICB7CisJaSA9IGxhc3QgPSBpZHg7CisJZG8KKwl7CisJICAgIGhpc3B0ciA9ICZoaXN0b3J5W2hpc3R5cGVdW2ldOworCSAgICBpZiAoaGlzcHRyLT5oaXNzdHIgPT0gTlVMTCkKKwkJYnJlYWs7CisJICAgIGlmICh2aW1fcmVnZXhlYygmcmVnbWF0Y2gsIGhpc3B0ci0+aGlzc3RyLCAoY29sbnJfVCkwKSkKKwkgICAgeworCQlmb3VuZCA9IFRSVUU7CisJCXZpbV9mcmVlKGhpc3B0ci0+aGlzc3RyKTsKKwkJaGlzcHRyLT5oaXNzdHIgPSBOVUxMOworCQloaXNwdHItPmhpc251bSA9IDA7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlmIChpICE9IGxhc3QpCisJCXsKKwkJICAgIGhpc3RvcnlbaGlzdHlwZV1bbGFzdF0gPSAqaGlzcHRyOworCQkgICAgaGlzcHRyLT5oaXNzdHIgPSBOVUxMOworCQkgICAgaGlzcHRyLT5oaXNudW0gPSAwOworCQl9CisJCWlmICgtLWxhc3QgPCAwKQorCQkgICAgbGFzdCArPSBoaXNsZW47CisJICAgIH0KKwkgICAgaWYgKC0taSA8IDApCisJCWkgKz0gaGlzbGVuOworCX0gd2hpbGUgKGkgIT0gaWR4KTsKKwlpZiAoaGlzdG9yeVtoaXN0eXBlXVtpZHhdLmhpc3N0ciA9PSBOVUxMKQorCSAgICBoaXNpZHhbaGlzdHlwZV0gPSAtMTsKKyAgICB9CisgICAgdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7CisgICAgcmV0dXJuIGZvdW5kOworfQorCisvKgorICogUmVtb3ZlIGFuIGluZGV4ZWQgZW50cnkgZnJvbSBhIGhpc3RvcnkuCisgKiAiaGlzdHlwZSIgbWF5IGJlIG9uZSBvZiB0aGUgSElTVF8gdmFsdWVzLgorICovCisgICAgaW50CitkZWxfaGlzdG9yeV9pZHgoaGlzdHlwZSwgaWR4KQorICAgIGludAkgICAgaGlzdHlwZTsKKyAgICBpbnQJICAgIGlkeDsKK3sKKyAgICBpbnQJICAgIGksIGo7CisKKyAgICBpID0gY2FsY19oaXN0X2lkeChoaXN0eXBlLCBpZHgpOworICAgIGlmIChpIDwgMCkKKwlyZXR1cm4gRkFMU0U7CisgICAgaWR4ID0gaGlzaWR4W2hpc3R5cGVdOworICAgIHZpbV9mcmVlKGhpc3RvcnlbaGlzdHlwZV1baV0uaGlzc3RyKTsKKworICAgIC8qIFdoZW4gZGVsZXRpbmcgdGhlIGxhc3QgYWRkZWQgc2VhcmNoIHN0cmluZyBpbiBhIG1hcHBpbmcsIHJlc2V0CisgICAgICogbGFzdF9tYXB0aWNrLCBzbyB0aGF0IHRoZSBsYXN0IGFkZGVkIHNlYXJjaCBzdHJpbmcgaXNuJ3QgZGVsZXRlZCBhZ2Fpbi4KKyAgICAgKi8KKyAgICBpZiAoaGlzdHlwZSA9PSBISVNUX1NFQVJDSCAmJiBtYXB0aWNrID09IGxhc3RfbWFwdGljayAmJiBpID09IGlkeCkKKwlsYXN0X21hcHRpY2sgPSAtMTsKKworICAgIHdoaWxlIChpICE9IGlkeCkKKyAgICB7CisJaiA9IChpICsgMSkgJSBoaXNsZW47CisJaGlzdG9yeVtoaXN0eXBlXVtpXSA9IGhpc3RvcnlbaGlzdHlwZV1bal07CisJaSA9IGo7CisgICAgfQorICAgIGhpc3RvcnlbaGlzdHlwZV1baV0uaGlzc3RyID0gTlVMTDsKKyAgICBoaXN0b3J5W2hpc3R5cGVdW2ldLmhpc251bSA9IDA7CisgICAgaWYgKC0taSA8IDApCisJaSArPSBoaXNsZW47CisgICAgaGlzaWR4W2hpc3R5cGVdID0gaTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworI2VuZGlmIC8qIEZFQVRfRVZBTCAqLworCisjaWYgZGVmaW5lZChGRUFUX0NSWVBUKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFZlcnkgc3BlY2lmaWMgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSB2YWx1ZSBpbiAiOnNldCBrZXk9dmFsIiBmcm9tIHRoZQorICogaGlzdG9yeS4KKyAqLworICAgIHZvaWQKK3JlbW92ZV9rZXlfZnJvbV9oaXN0b3J5KCkKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpOworCisgICAgaSA9IGhpc2lkeFtISVNUX0NNRF07CisgICAgaWYgKGkgPCAwKQorCXJldHVybjsKKyAgICBwID0gaGlzdG9yeVtISVNUX0NNRF1baV0uaGlzc3RyOworICAgIGlmIChwICE9IE5VTEwpCisJZm9yICggOyAqcDsgKytwKQorCSAgICBpZiAoU1RSTkNNUChwLCAia2V5IiwgMykgPT0gMCAmJiAhaXNhbHBoYShwWzNdKSkKKwkgICAgeworCQlwID0gdmltX3N0cmNocihwICsgMywgJz0nKTsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJICAgIGJyZWFrOworCQkrK3A7CisJCWZvciAoaSA9IDA7IHBbaV0gJiYgIXZpbV9pc3doaXRlKHBbaV0pOyArK2kpCisJCSAgICBpZiAocFtpXSA9PSAnXFwnICYmIHBbaSArIDFdKQorCQkJKytpOworCQltY2hfbWVtbW92ZShwLCBwICsgaSwgU1RSTEVOKHAgKyBpKSArIDEpOworCQktLXA7CisJICAgIH0KK30KKyNlbmRpZgorCisjZW5kaWYgLyogRkVBVF9DTURISVNUICovCisKKyNpZiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpIHx8IGRlZmluZWQoRkVBVF9DTURISVNUKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEdldCBpbmRpY2VzICJudW0xLG51bTIiIHRoYXQgc3BlY2lmeSBhIHJhbmdlIHdpdGhpbiBhIGxpc3QgKG5vdCBhIHJhbmdlIG9mCisgKiB0ZXh0IGxpbmVzIGluIGEgYnVmZmVyISkgZnJvbSBhIHN0cmluZy4gIFVzZWQgZm9yICI6aGlzdG9yeSIgYW5kICI6Y2xpc3QiLgorICogUmV0dXJucyBPSyBpZiBwYXJzZWQgc3VjY2Vzc2Z1bGx5LCBvdGhlcndpc2UgRkFJTC4KKyAqLworICAgIGludAorZ2V0X2xpc3RfcmFuZ2Uoc3RyLCBudW0xLCBudW0yKQorICAgIGNoYXJfdQkqKnN0cjsKKyAgICBpbnQJCSpudW0xOworICAgIGludAkJKm51bTI7Cit7CisgICAgaW50CQlsZW47CisgICAgaW50CQlmaXJzdCA9IEZBTFNFOworICAgIGxvbmcJbnVtOworCisgICAgKnN0ciA9IHNraXB3aGl0ZSgqc3RyKTsKKyAgICBpZiAoKipzdHIgPT0gJy0nIHx8IHZpbV9pc2RpZ2l0KCoqc3RyKSkgIC8qIHBhcnNlICJmcm9tIiBwYXJ0IG9mIHJhbmdlICovCisgICAgeworCXZpbV9zdHIybnIoKnN0ciwgTlVMTCwgJmxlbiwgRkFMU0UsIEZBTFNFLCAmbnVtLCBOVUxMKTsKKwkqc3RyICs9IGxlbjsKKwkqbnVtMSA9IChpbnQpbnVtOworCWZpcnN0ID0gVFJVRTsKKyAgICB9CisgICAgKnN0ciA9IHNraXB3aGl0ZSgqc3RyKTsKKyAgICBpZiAoKipzdHIgPT0gJywnKQkJCS8qIHBhcnNlICJ0byIgcGFydCBvZiByYW5nZSAqLworICAgIHsKKwkqc3RyID0gc2tpcHdoaXRlKCpzdHIgKyAxKTsKKwl2aW1fc3RyMm5yKCpzdHIsIE5VTEwsICZsZW4sIEZBTFNFLCBGQUxTRSwgJm51bSwgTlVMTCk7CisJaWYgKGxlbiA+IDApCisJeworCSAgICAqbnVtMiA9IChpbnQpbnVtOworCSAgICAqc3RyID0gc2tpcHdoaXRlKCpzdHIgKyBsZW4pOworCX0KKwllbHNlIGlmICghZmlyc3QpCQkvKiBubyBudW1iZXIgZ2l2ZW4gYXQgYWxsICovCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKyAgICBlbHNlIGlmIChmaXJzdCkJCQkvKiBvbmx5IG9uZSBudW1iZXIgZ2l2ZW4gKi8KKwkqbnVtMiA9ICpudW0xOworICAgIHJldHVybiBPSzsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0NNREhJU1QpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogOmhpc3RvcnkgY29tbWFuZCAtIHByaW50IGEgaGlzdG9yeQorICovCisgICAgdm9pZAorZXhfaGlzdG9yeShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGhpc3RlbnRyeV9UCSpoaXN0OworICAgIGludAkJaGlzdHlwZTEgPSBISVNUX0NNRDsKKyAgICBpbnQJCWhpc3R5cGUyID0gSElTVF9DTUQ7CisgICAgaW50CQloaXNpZHgxID0gMTsKKyAgICBpbnQJCWhpc2lkeDIgPSAtMTsKKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCWksIGosIGs7CisgICAgY2hhcl91CSplbmQ7CisgICAgY2hhcl91CSphcmcgPSBlYXAtPmFyZzsKKworICAgIGlmIChoaXNsZW4gPT0gMCkKKyAgICB7CisJTVNHKF8oIidoaXN0b3J5JyBvcHRpb24gaXMgemVybyIpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgaWYgKCEoVklNX0lTRElHSVQoKmFyZykgfHwgKmFyZyA9PSAnLScgfHwgKmFyZyA9PSAnLCcpKQorICAgIHsKKwllbmQgPSBhcmc7CisJd2hpbGUgKEFTQ0lJX0lTQUxQSEEoKmVuZCkKKwkJfHwgdmltX3N0cmNocigoY2hhcl91ICopIjo9QD4vPyIsICplbmQpICE9IE5VTEwpCisJICAgIGVuZCsrOworCWkgPSAqZW5kOworCSplbmQgPSBOVUw7CisJaGlzdHlwZTEgPSBnZXRfaGlzdHR5cGUoYXJnKTsKKwlpZiAoaGlzdHlwZTEgPT0gLTEpCisJeworCSAgICBpZiAoU1RSSUNNUChhcmcsICJhbGwiKSA9PSAwKQorCSAgICB7CisJCWhpc3R5cGUxID0gMDsKKwkJaGlzdHlwZTIgPSBISVNUX0NPVU5ULTE7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCSplbmQgPSBpOworCQlFTVNHKF8oZV90cmFpbGluZykpOworCQlyZXR1cm47CisJICAgIH0KKwl9CisJZWxzZQorCSAgICBoaXN0eXBlMiA9IGhpc3R5cGUxOworCSplbmQgPSBpOworICAgIH0KKyAgICBlbHNlCisJZW5kID0gYXJnOworICAgIGlmICghZ2V0X2xpc3RfcmFuZ2UoJmVuZCwgJmhpc2lkeDEsICZoaXNpZHgyKSB8fCAqZW5kICE9IE5VTCkKKyAgICB7CisJRU1TRyhfKGVfdHJhaWxpbmcpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgZm9yICg7ICFnb3RfaW50ICYmIGhpc3R5cGUxIDw9IGhpc3R5cGUyOyArK2hpc3R5cGUxKQorICAgIHsKKwlTVFJDUFkoSU9idWZmLCAiXG4gICAgICAjICAiKTsKKwlTVFJDQVQoU1RSQ0FUKElPYnVmZiwgaGlzdG9yeV9uYW1lc1toaXN0eXBlMV0pLCAiIGhpc3RvcnkiKTsKKwlNU0dfUFVUU19USVRMRShJT2J1ZmYpOworCWlkeCA9IGhpc2lkeFtoaXN0eXBlMV07CisJaGlzdCA9IGhpc3RvcnlbaGlzdHlwZTFdOworCWogPSBoaXNpZHgxOworCWsgPSBoaXNpZHgyOworCWlmIChqIDwgMCkKKwkgICAgaiA9ICgtaiA+IGhpc2xlbikgPyAwIDogaGlzdFsoaGlzbGVuK2oraWR4KzEpICUgaGlzbGVuXS5oaXNudW07CisJaWYgKGsgPCAwKQorCSAgICBrID0gKC1rID4gaGlzbGVuKSA/IDAgOiBoaXN0WyhoaXNsZW4raytpZHgrMSkgJSBoaXNsZW5dLmhpc251bTsKKwlpZiAoaWR4ID49IDAgJiYgaiA8PSBrKQorCSAgICBmb3IgKGkgPSBpZHggKyAxOyAhZ290X2ludDsgKytpKQorCSAgICB7CisJCWlmIChpID09IGhpc2xlbikKKwkJICAgIGkgPSAwOworCQlpZiAoaGlzdFtpXS5oaXNzdHIgIT0gTlVMTAorCQkJJiYgaGlzdFtpXS5oaXNudW0gPj0gaiAmJiBoaXN0W2ldLmhpc251bSA8PSBrKQorCQl7CisJCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKwkJICAgIHNwcmludGYoKGNoYXIgKilJT2J1ZmYsICIlYyU2ZCAgIiwgaSA9PSBpZHggPyAnPicgOiAnICcsCisJCQkJCQkJICAgICAgaGlzdFtpXS5oaXNudW0pOworCQkgICAgaWYgKHZpbV9zdHJzaXplKGhpc3RbaV0uaGlzc3RyKSA+IChpbnQpQ29sdW1ucyAtIDEwKQorCQkJdHJ1bmNfc3RyaW5nKGhpc3RbaV0uaGlzc3RyLCBJT2J1ZmYgKyBTVFJMRU4oSU9idWZmKSwKKwkJCQkJCQkgICAoaW50KUNvbHVtbnMgLSAxMCk7CisJCSAgICBlbHNlCisJCQlTVFJDQVQoSU9idWZmLCBoaXN0W2ldLmhpc3N0cik7CisJCSAgICBtc2dfb3V0dHJhbnMoSU9idWZmKTsKKwkJICAgIG91dF9mbHVzaCgpOworCQl9CisJCWlmIChpID09IGlkeCkKKwkJICAgIGJyZWFrOworCSAgICB9CisgICAgfQorfQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGRUFUX1ZJTUlORk8pICYmIGRlZmluZWQoRkVBVF9DTURISVNUKSkgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBjaGFyX3UgKip2aW1pbmZvX2hpc3RvcnlbSElTVF9DT1VOVF0gPSB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH07CitzdGF0aWMgaW50CXZpbWluZm9faGlzaWR4W0hJU1RfQ09VTlRdID0gezAsIDAsIDAsIDB9Oworc3RhdGljIGludAl2aW1pbmZvX2hpc2xlbltISVNUX0NPVU5UXSA9IHswLCAwLCAwLCAwfTsKK3N0YXRpYyBpbnQJdmltaW5mb19hZGRfYXRfZnJvbnQgPSBGQUxTRTsKKworc3RhdGljIGludAloaXN0X3R5cGUyY2hhciBfX0FSR1MoKGludCB0eXBlLCBpbnQgdXNlX3F1ZXN0aW9uKSk7CisKKy8qCisgKiBUcmFuc2xhdGUgYSBoaXN0b3J5IHR5cGUgbnVtYmVyIHRvIHRoZSBhc3NvY2lhdGVkIGNoYXJhY3Rlci4KKyAqLworICAgIHN0YXRpYyBpbnQKK2hpc3RfdHlwZTJjaGFyKHR5cGUsIHVzZV9xdWVzdGlvbikKKyAgICBpbnQJICAgIHR5cGU7CisgICAgaW50CSAgICB1c2VfcXVlc3Rpb247CSAgICAvKiB1c2UgJz8nIGluc3RlYWQgb2YgJy8nICovCit7CisgICAgaWYgKHR5cGUgPT0gSElTVF9DTUQpCisJcmV0dXJuICc6JzsKKyAgICBpZiAodHlwZSA9PSBISVNUX1NFQVJDSCkKKyAgICB7CisJaWYgKHVzZV9xdWVzdGlvbikKKwkgICAgcmV0dXJuICc/JzsKKwllbHNlCisJICAgIHJldHVybiAnLyc7CisgICAgfQorICAgIGlmICh0eXBlID09IEhJU1RfRVhQUikKKwlyZXR1cm4gJz0nOworICAgIHJldHVybiAnQCc7Cit9CisKKy8qCisgKiBQcmVwYXJlIGZvciByZWFkaW5nIHRoZSBoaXN0b3J5IGZyb20gdGhlIHZpbWluZm8gZmlsZS4KKyAqIFRoaXMgYWxsb2NhdGVzIGhpc3RvcnkgYXJyYXlzIHRvIHN0b3JlIHRoZSByZWFkIGhpc3RvcnkgbGluZXMuCisgKi8KKyAgICB2b2lkCitwcmVwYXJlX3ZpbWluZm9faGlzdG9yeShhc2tsZW4pCisgICAgaW50CSAgICBhc2tsZW47Cit7CisgICAgaW50CSAgICBpOworICAgIGludAkgICAgbnVtOworICAgIGludAkgICAgdHlwZTsKKyAgICBpbnQJICAgIGxlbjsKKworICAgIGluaXRfaGlzdG9yeSgpOworICAgIHZpbWluZm9fYWRkX2F0X2Zyb250ID0gKGFza2xlbiAhPSAwKTsKKyAgICBpZiAoYXNrbGVuID4gaGlzbGVuKQorCWFza2xlbiA9IGhpc2xlbjsKKworICAgIGZvciAodHlwZSA9IDA7IHR5cGUgPCBISVNUX0NPVU5UOyArK3R5cGUpCisgICAgeworCS8qCisJICogQ291bnQgdGhlIG51bWJlciBvZiBlbXB0eSBzcGFjZXMgaW4gdGhlIGhpc3RvcnkgbGlzdC4gIElmIHRoZXJlIGFyZQorCSAqIG1vcmUgc3BhY2VzIGF2YWlsYWJsZSB0aGFuIHdlIHJlcXVlc3QsIHRoZW4gZmlsbCB0aGVtIHVwLgorCSAqLworCWZvciAoaSA9IDAsIG51bSA9IDA7IGkgPCBoaXNsZW47IGkrKykKKwkgICAgaWYgKGhpc3RvcnlbdHlwZV1baV0uaGlzc3RyID09IE5VTEwpCisJCW51bSsrOworCWxlbiA9IGFza2xlbjsKKwlpZiAobnVtID4gbGVuKQorCSAgICBsZW4gPSBudW07CisJaWYgKGxlbiA8PSAwKQorCSAgICB2aW1pbmZvX2hpc3RvcnlbdHlwZV0gPSBOVUxMOworCWVsc2UKKwkgICAgdmltaW5mb19oaXN0b3J5W3R5cGVdID0KKwkJICAgKGNoYXJfdSAqKilsYWxsb2MoKGxvbmdfdSkobGVuICogc2l6ZW9mKGNoYXJfdSAqKSksIEZBTFNFKTsKKwlpZiAodmltaW5mb19oaXN0b3J5W3R5cGVdID09IE5VTEwpCisJICAgIGxlbiA9IDA7CisJdmltaW5mb19oaXNsZW5bdHlwZV0gPSBsZW47CisJdmltaW5mb19oaXNpZHhbdHlwZV0gPSAwOworICAgIH0KK30KKworLyoKKyAqIEFjY2VwdCBhIGxpbmUgZnJvbSB0aGUgdmltaW5mbywgc3RvcmUgaXQgaW4gdGhlIGhpc3RvcnkgYXJyYXkgd2hlbiBpdCdzCisgKiBuZXcuCisgKi8KKyAgICBpbnQKK3JlYWRfdmltaW5mb19oaXN0b3J5KHZpcnApCisgICAgdmlyX1QJKnZpcnA7Cit7CisgICAgaW50CQl0eXBlOworICAgIGxvbmdfdQlsZW47CisgICAgY2hhcl91CSp2YWw7CisgICAgY2hhcl91CSpwOworCisgICAgdHlwZSA9IGhpc3RfY2hhcjJ0eXBlKHZpcnAtPnZpcl9saW5lWzBdKTsKKyAgICBpZiAodmltaW5mb19oaXNpZHhbdHlwZV0gPCB2aW1pbmZvX2hpc2xlblt0eXBlXSkKKyAgICB7CisJdmFsID0gdmltaW5mb19yZWFkc3RyaW5nKHZpcnAsIDEsIFRSVUUpOworCWlmICh2YWwgIT0gTlVMTCAmJiAqdmFsICE9IE5VTCkKKwl7CisJICAgIGlmICghaW5faGlzdG9yeSh0eXBlLCB2YWwgKyAodHlwZSA9PSBISVNUX1NFQVJDSCksCisJCQkJCQkJdmltaW5mb19hZGRfYXRfZnJvbnQpKQorCSAgICB7CisJCS8qIE5lZWQgdG8gcmUtYWxsb2NhdGUgdG8gYXBwZW5kIHRoZSBzZXBhcmF0b3IgYnl0ZS4gKi8KKwkJbGVuID0gU1RSTEVOKHZhbCk7CisJCXAgPSBsYWxsb2MobGVuICsgMiwgVFJVRSk7CisJCWlmIChwICE9IE5VTEwpCisJCXsKKwkJICAgIGlmICh0eXBlID09IEhJU1RfU0VBUkNIKQorCQkgICAgeworCQkJLyogU2VhcmNoIGVudHJ5OiBNb3ZlIHRoZSBzZXBhcmF0b3IgZnJvbSB0aGUgZmlyc3QKKwkJCSAqIGNvbHVtbiB0byBhZnRlciB0aGUgTlVMLiAqLworCQkJbWNoX21lbW1vdmUocCwgdmFsICsgMSwgKHNpemVfdClsZW4pOworCQkJcFtsZW5dID0gKCp2YWwgPT0gJyAnID8gTlVMIDogKnZhbCk7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQkvKiBOb3QgYSBzZWFyY2ggZW50cnk6IE5vIHNlcGFyYXRvciBpbiB0aGUgdmltaW5mbworCQkJICogZmlsZSwgYWRkIGEgTlVMIHNlcGFyYXRvci4gKi8KKwkJCW1jaF9tZW1tb3ZlKHAsIHZhbCwgKHNpemVfdClsZW4gKyAxKTsKKwkJCXBbbGVuICsgMV0gPSBOVUw7CisJCSAgICB9CisJCSAgICB2aW1pbmZvX2hpc3RvcnlbdHlwZV1bdmltaW5mb19oaXNpZHhbdHlwZV0rK10gPSBwOworCQl9CisJICAgIH0KKwl9CisJdmltX2ZyZWUodmFsKTsKKyAgICB9CisgICAgcmV0dXJuIHZpbWluZm9fcmVhZGxpbmUodmlycCk7Cit9CisKKyAgICB2b2lkCitmaW5pc2hfdmltaW5mb19oaXN0b3J5KCkKK3sKKyAgICBpbnQgaWR4OworICAgIGludCBpOworICAgIGludAl0eXBlOworCisgICAgZm9yICh0eXBlID0gMDsgdHlwZSA8IEhJU1RfQ09VTlQ7ICsrdHlwZSkKKyAgICB7CisJaWYgKGhpc3RvcnlbdHlwZV0gPT0gTlVMTCkKKwkgICAgcmV0dXJuOworCWlkeCA9IGhpc2lkeFt0eXBlXSArIHZpbWluZm9faGlzaWR4W3R5cGVdOworCWlmIChpZHggPj0gaGlzbGVuKQorCSAgICBpZHggLT0gaGlzbGVuOworCWVsc2UgaWYgKGlkeCA8IDApCisJICAgIGlkeCA9IGhpc2xlbiAtIDE7CisJaWYgKHZpbWluZm9fYWRkX2F0X2Zyb250KQorCSAgICBoaXNpZHhbdHlwZV0gPSBpZHg7CisJZWxzZQorCXsKKwkgICAgaWYgKGhpc2lkeFt0eXBlXSA9PSAtMSkKKwkJaGlzaWR4W3R5cGVdID0gaGlzbGVuIC0gMTsKKwkgICAgZG8KKwkgICAgeworCQlpZiAoaGlzdG9yeVt0eXBlXVtpZHhdLmhpc3N0ciAhPSBOVUxMKQorCQkgICAgYnJlYWs7CisJCWlmICgrK2lkeCA9PSBoaXNsZW4pCisJCSAgICBpZHggPSAwOworCSAgICB9IHdoaWxlIChpZHggIT0gaGlzaWR4W3R5cGVdKTsKKwkgICAgaWYgKGlkeCAhPSBoaXNpZHhbdHlwZV0gJiYgLS1pZHggPCAwKQorCQlpZHggPSBoaXNsZW4gLSAxOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgdmltaW5mb19oaXNpZHhbdHlwZV07IGkrKykKKwl7CisJICAgIHZpbV9mcmVlKGhpc3RvcnlbdHlwZV1baWR4XS5oaXNzdHIpOworCSAgICBoaXN0b3J5W3R5cGVdW2lkeF0uaGlzc3RyID0gdmltaW5mb19oaXN0b3J5W3R5cGVdW2ldOworCSAgICBpZiAoLS1pZHggPCAwKQorCQlpZHggPSBoaXNsZW4gLSAxOworCX0KKwlpZHggKz0gMTsKKwlpZHggJT0gaGlzbGVuOworCWZvciAoaSA9IDA7IGkgPCB2aW1pbmZvX2hpc2lkeFt0eXBlXTsgaSsrKQorCXsKKwkgICAgaGlzdG9yeVt0eXBlXVtpZHgrK10uaGlzbnVtID0gKytoaXNudW1bdHlwZV07CisJICAgIGlkeCAlPSBoaXNsZW47CisJfQorCXZpbV9mcmVlKHZpbWluZm9faGlzdG9yeVt0eXBlXSk7CisJdmltaW5mb19oaXN0b3J5W3R5cGVdID0gTlVMTDsKKyAgICB9Cit9CisKKyAgICB2b2lkCit3cml0ZV92aW1pbmZvX2hpc3RvcnkoZnApCisgICAgRklMRSAgICAqZnA7Cit7CisgICAgaW50CSAgICBpOworICAgIGludAkgICAgdHlwZTsKKyAgICBpbnQJICAgIG51bV9zYXZlZDsKKyAgICBjaGFyX3UgICpwOworICAgIGludAkgICAgYzsKKworICAgIGluaXRfaGlzdG9yeSgpOworICAgIGlmIChoaXNsZW4gPT0gMCkKKwlyZXR1cm47CisgICAgZm9yICh0eXBlID0gMDsgdHlwZSA8IEhJU1RfQ09VTlQ7ICsrdHlwZSkKKyAgICB7CisJbnVtX3NhdmVkID0gZ2V0X3ZpbWluZm9fcGFyYW1ldGVyKGhpc3RfdHlwZTJjaGFyKHR5cGUsIEZBTFNFKSk7CisJaWYgKG51bV9zYXZlZCA9PSAwKQorCSAgICBjb250aW51ZTsKKwlpZiAobnVtX3NhdmVkIDwgMCkgIC8qIFVzZSBkZWZhdWx0ICovCisJICAgIG51bV9zYXZlZCA9IGhpc2xlbjsKKwlmcHJpbnRmKGZwLCBfKCJcbiMgJXMgSGlzdG9yeSAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iKSwKKwkJCSAgICB0eXBlID09IEhJU1RfQ01EID8gXygiQ29tbWFuZCBMaW5lIikgOgorCQkJICAgIHR5cGUgPT0gSElTVF9TRUFSQ0ggPyBfKCJTZWFyY2ggU3RyaW5nIikgOgorCQkJICAgIHR5cGUgPT0gSElTVF9FWFBSID8gIF8oIkV4cHJlc3Npb24iKSA6CisJCQkJCV8oIklucHV0IExpbmUiKSk7CisJaWYgKG51bV9zYXZlZCA+IGhpc2xlbikKKwkgICAgbnVtX3NhdmVkID0gaGlzbGVuOworCWkgPSBoaXNpZHhbdHlwZV07CisJaWYgKGkgPj0gMCkKKwkgICAgd2hpbGUgKG51bV9zYXZlZC0tKQorCSAgICB7CisJCXAgPSBoaXN0b3J5W3R5cGVdW2ldLmhpc3N0cjsKKwkJaWYgKHAgIT0gTlVMTCkKKwkJeworCQkgICAgcHV0YyhoaXN0X3R5cGUyY2hhcih0eXBlLCBUUlVFKSwgZnApOworCQkgICAgLyogRm9yIHRoZSBzZWFyY2ggaGlzdG9yeTogcHV0IHRoZSBzZXBhcmF0b3IgaW4gdGhlIHNlY29uZAorCQkgICAgICogY29sdW1uOyB1c2UgYSBzcGFjZSBpZiB0aGVyZSBpc24ndCBvbmUuICovCisJCSAgICBpZiAodHlwZSA9PSBISVNUX1NFQVJDSCkKKwkJICAgIHsKKwkJCWMgPSBwW1NUUkxFTihwKSArIDFdOworCQkJcHV0YyhjID09IE5VTCA/ICcgJyA6IGMsIGZwKTsKKwkJICAgIH0KKwkJICAgIHZpbWluZm9fd3JpdGVzdHJpbmcoZnAsIHApOworCQl9CisJCWlmICgtLWkgPCAwKQorCQkgICAgaSA9IGhpc2xlbiAtIDE7CisJICAgIH0KKyAgICB9Cit9CisjZW5kaWYgLyogRkVBVF9WSU1JTkZPICovCisKKyNpZiBkZWZpbmVkKEZFQVRfRktNQVApIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogV3JpdGUgYSBjaGFyYWN0ZXIgYXQgdGhlIGN1cnJlbnQgY3Vyc29yK29mZnNldCBwb3NpdGlvbi4KKyAqIEl0IGlzIGRpcmVjdGx5IHdyaXR0ZW4gaW50byB0aGUgY29tbWFuZCBidWZmZXIgYmxvY2suCisgKi8KKyAgICB2b2lkCitjbWRfcGNoYXIoYywgb2Zmc2V0KQorICAgIGludAkgICAgYywgb2Zmc2V0OworeworICAgIGlmIChjY2xpbmUuY21kcG9zICsgb2Zmc2V0ID49IGNjbGluZS5jbWRsZW4gfHwgY2NsaW5lLmNtZHBvcyArIG9mZnNldCA8IDApCisgICAgeworCUVNU0coXygiRTE5ODogY21kX3BjaGFyIGJleW9uZCB0aGUgY29tbWFuZCBsZW5ndGgiKSk7CisJcmV0dXJuOworICAgIH0KKyAgICBjY2xpbmUuY21kYnVmZltjY2xpbmUuY21kcG9zICsgb2Zmc2V0XSA9IChjaGFyX3UpYzsKKyAgICBjY2xpbmUuY21kYnVmZltjY2xpbmUuY21kbGVuXSA9IE5VTDsKK30KKworICAgIGludAorY21kX2djaGFyKG9mZnNldCkKKyAgICBpbnQJICAgIG9mZnNldDsKK3sKKyAgICBpZiAoY2NsaW5lLmNtZHBvcyArIG9mZnNldCA+PSBjY2xpbmUuY21kbGVuIHx8IGNjbGluZS5jbWRwb3MgKyBvZmZzZXQgPCAwKQorICAgIHsKKwkvKiAgRU1TRyhfKCJjbWRfZ2NoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIpKTsgKi8KKwlyZXR1cm4gTlVMOworICAgIH0KKyAgICByZXR1cm4gKGludCljY2xpbmUuY21kYnVmZltjY2xpbmUuY21kcG9zICsgb2Zmc2V0XTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0NNRFdJTikgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBPcGVuIGEgd2luZG93IG9uIHRoZSBjdXJyZW50IGNvbW1hbmQgbGluZSBhbmQgaGlzdG9yeS4gIEFsbG93IGVkaXRpbmcgaW4KKyAqIHRoZSB3aW5kb3cuICBSZXR1cm5zIHdoZW4gdGhlIHdpbmRvdyBpcyBjbG9zZWQuCisgKiBSZXR1cm5zOgorICoJQ1IJIGlmIHRoZSBjb21tYW5kIGlzIHRvIGJlIGV4ZWN1dGVkCisgKglDdHJsX0MJIGlmIGl0IGlzIHRvIGJlIGFiYW5kb25lZAorICoJS19JR05PUkUgaWYgZWRpdGluZyBjb250aW51ZXMKKyAqLworICAgIHN0YXRpYyBpbnQKK2V4X3dpbmRvdygpCit7CisgICAgc3RydWN0IGNtZGxpbmVfaW5mbwlzYXZlX2NjbGluZTsKKyAgICBidWZfVAkJKm9sZF9jdXJidWYgPSBjdXJidWY7CisgICAgd2luX1QJCSpvbGRfY3Vyd2luID0gY3Vyd2luOworICAgIGJ1Zl9UCQkqYnA7CisgICAgd2luX1QJCSp3cDsKKyAgICBpbnQJCQlpOworICAgIGxpbmVucl9UCQlsbnVtOworICAgIGludAkJCWhpc3R0eXBlOworICAgIGdhcnJheV9UCQl3aW5zaXplczsKKyAgICBjaGFyX3UJCXR5cGVzdHJbMl07CisgICAgaW50CQkJc2F2ZV9yZXN0YXJ0X2VkaXQgPSByZXN0YXJ0X2VkaXQ7CisgICAgaW50CQkJc2F2ZV9TdGF0ZSA9IFN0YXRlOworICAgIGludAkJCXNhdmVfZXhtb2RlID0gZXhtb2RlX2FjdGl2ZTsKKworICAgIC8qIENhbid0IGRvIHRoaXMgcmVjdXJzaXZlbHkuICBDYW4ndCBkbyBpdCB3aGVuIHR5cGluZyBhIHBhc3N3b3JkLiAqLworICAgIGlmIChjbWR3aW5fdHlwZSAhPSAwCisjIGlmIGRlZmluZWQoRkVBVF9DUllQVCkgfHwgZGVmaW5lZChGRUFUX0VWQUwpCisJICAgIHx8IGNtZGxpbmVfc3RhciA+IDAKKyMgZW5kaWYKKwkgICAgKQorICAgIHsKKwliZWVwX2ZsdXNoKCk7CisJcmV0dXJuIEtfSUdOT1JFOworICAgIH0KKworICAgIC8qIFNhdmUgY3VycmVudCB3aW5kb3cgc2l6ZXMuICovCisgICAgd2luX3NpemVfc2F2ZSgmd2luc2l6ZXMpOworCisjIGlmZGVmIEZFQVRfQVVUT0NNRAorICAgIC8qIERvbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIHdoaWxlIGNyZWF0aW5nIHRoZSB3aW5kb3cuICovCisgICAgKythdXRvY21kX2Jsb2NrOworIyBlbmRpZgorICAgIC8qIENyZWF0ZSBhIHdpbmRvdyBmb3IgdGhlIGNvbW1hbmQtbGluZSBidWZmZXIuICovCisgICAgaWYgKHdpbl9zcGxpdCgoaW50KXBfY3doLCBXU1BfQk9UKSA9PSBGQUlMKQorICAgIHsKKwliZWVwX2ZsdXNoKCk7CisJcmV0dXJuIEtfSUdOT1JFOworICAgIH0KKyAgICBjbWR3aW5fdHlwZSA9IGNjbGluZS5jbWRmaXJzdGM7CisgICAgaWYgKGNtZHdpbl90eXBlID09IE5VTCkKKwljbWR3aW5fdHlwZSA9ICctJzsKKworICAgIC8qIENyZWF0ZSB0aGUgY29tbWFuZC1saW5lIGJ1ZmZlciBlbXB0eS4gKi8KKyAgICAodm9pZClkb19lY21kKDAsIE5VTEwsIE5VTEwsIE5VTEwsIEVDTURfT05FLCBFQ01EX0hJREUpOworICAgICh2b2lkKXNldGZuYW1lKGN1cmJ1ZiwgKGNoYXJfdSAqKSJjb21tYW5kLWxpbmUiLCBOVUxMLCBUUlVFKTsKKyAgICBzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikiYnQiLCAwTCwgKGNoYXJfdSAqKSJub2ZpbGUiLCBPUFRfTE9DQUwpOworICAgIHNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJzd2YiLCAwTCwgTlVMTCwgT1BUX0xPQ0FMKTsKKyAgICBjdXJidWYtPmJfcF9tYSA9IFRSVUU7CisjIGlmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgY3Vyd2luLT53X3BfcmwgPSBGQUxTRTsKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisgICAgY3Vyd2luLT53X3Bfc2NiID0gRkFMU0U7CisjIGVuZGlmCisKKyMgaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgLyogRG8gZXhlY3V0ZSBhdXRvY29tbWFuZHMgZm9yIHNldHRpbmcgdGhlIGZpbGV0eXBlIChsb2FkIHN5bnRheCkuICovCisgICAgLS1hdXRvY21kX2Jsb2NrOworIyBlbmRpZgorCisgICAgaGlzdHR5cGUgPSBoaXN0X2NoYXIydHlwZShjY2xpbmUuY21kZmlyc3RjKTsKKyAgICBpZiAoaGlzdHR5cGUgPT0gSElTVF9DTUQgfHwgaGlzdHR5cGUgPT0gSElTVF9ERUJVRykKKyAgICB7CisJaWYgKHBfd2MgPT0gVEFCKQorCXsKKwkgICAgYWRkX21hcCgoY2hhcl91ICopIjxidWZmZXI+IDxUYWI+IDxDLVg+PEMtVj4iLCBJTlNFUlQpOworCSAgICBhZGRfbWFwKChjaGFyX3UgKikiPGJ1ZmZlcj4gPFRhYj4gYTxDLVg+PEMtVj4iLCBOT1JNQUwpOworCX0KKwlzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikiZnQiLCAwTCwgKGNoYXJfdSAqKSJ2aW0iLCBPUFRfTE9DQUwpOworICAgIH0KKworICAgIC8qIEZpbGwgdGhlIGJ1ZmZlciB3aXRoIHRoZSBoaXN0b3J5LiAqLworICAgIGluaXRfaGlzdG9yeSgpOworICAgIGlmIChoaXNsZW4gPiAwKQorICAgIHsKKwlpID0gaGlzaWR4W2hpc3R0eXBlXTsKKwlpZiAoaSA+PSAwKQorCXsKKwkgICAgbG51bSA9IDA7CisJICAgIGRvCisJICAgIHsKKwkJaWYgKCsraSA9PSBoaXNsZW4pCisJCSAgICBpID0gMDsKKwkJaWYgKGhpc3RvcnlbaGlzdHR5cGVdW2ldLmhpc3N0ciAhPSBOVUxMKQorCQkgICAgbWxfYXBwZW5kKGxudW0rKywgaGlzdG9yeVtoaXN0dHlwZV1baV0uaGlzc3RyLAorCQkJCQkJCSAgIChjb2xucl9UKTAsIEZBTFNFKTsKKwkgICAgfQorCSAgICB3aGlsZSAoaSAhPSBoaXNpZHhbaGlzdHR5cGVdKTsKKwl9CisgICAgfQorCisgICAgLyogUmVwbGFjZSB0aGUgZW1wdHkgbGFzdCBsaW5lIHdpdGggdGhlIGN1cnJlbnQgY29tbWFuZC1saW5lIGFuZCBwdXQgdGhlCisgICAgICogY3Vyc29yIHRoZXJlLiAqLworICAgIG1sX3JlcGxhY2UoY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQsIGNjbGluZS5jbWRidWZmLCBUUlVFKTsKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGNjbGluZS5jbWRwb3M7CisgICAgcmVkcmF3X2xhdGVyKE5PVF9WQUxJRCk7CisKKyAgICAvKiBTYXZlIHRoZSBjb21tYW5kIGxpbmUgaW5mbywgY2FuIGJlIHVzZWQgcmVjdXJzaXZlbHkuICovCisgICAgc2F2ZV9jY2xpbmUgPSBjY2xpbmU7CisgICAgY2NsaW5lLmNtZGJ1ZmYgPSBOVUxMOworICAgIGNjbGluZS5jbWRwcm9tcHQgPSBOVUxMOworCisgICAgLyogTm8gRXggbW9kZSBoZXJlISAqLworICAgIGV4bW9kZV9hY3RpdmUgPSAwOworCisgICAgU3RhdGUgPSBOT1JNQUw7CisjIGlmZGVmIEZFQVRfTU9VU0UKKyAgICBzZXRtb3VzZSgpOworIyBlbmRpZgorCisjIGlmZGVmIEZFQVRfQVVUT0NNRAorICAgIC8qIFRyaWdnZXIgQ21kd2luRW50ZXIgYXV0b2NvbW1hbmRzLiAqLworICAgIHR5cGVzdHJbMF0gPSBjbWR3aW5fdHlwZTsKKyAgICB0eXBlc3RyWzFdID0gTlVMOworICAgIGFwcGx5X2F1dG9jbWRzKEVWRU5UX0NNRFdJTkVOVEVSLCB0eXBlc3RyLCB0eXBlc3RyLCBGQUxTRSwgY3VyYnVmKTsKKyMgZW5kaWYKKworICAgIGkgPSBSZWRyYXdpbmdEaXNhYmxlZDsKKyAgICBSZWRyYXdpbmdEaXNhYmxlZCA9IDA7CisKKyAgICAvKgorICAgICAqIENhbGwgdGhlIG1haW4gbG9vcCB1bnRpbCA8Q1I+IG9yIENUUkwtQyBpcyB0eXBlZC4KKyAgICAgKi8KKyAgICBjbWR3aW5fcmVzdWx0ID0gMDsKKyAgICBtYWluX2xvb3AoVFJVRSk7CisKKyAgICBSZWRyYXdpbmdEaXNhYmxlZCA9IGk7CisKKyMgaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgLyogVHJpZ2dlciBDbWR3aW5MZWF2ZSBhdXRvY29tbWFuZHMuICovCisgICAgYXBwbHlfYXV0b2NtZHMoRVZFTlRfQ01EV0lOTEVBVkUsIHR5cGVzdHIsIHR5cGVzdHIsIEZBTFNFLCBjdXJidWYpOworIyBlbmRpZgorCisgICAgLyogUmVzdG9yZSB0aGUgY29tYW5kIGxpbmUgaW5mby4gKi8KKyAgICBjY2xpbmUgPSBzYXZlX2NjbGluZTsKKyAgICBjbWR3aW5fdHlwZSA9IDA7CisKKyAgICBleG1vZGVfYWN0aXZlID0gc2F2ZV9leG1vZGU7CisKKyAgICAvKiBTYWZldHkgY2hlY2s6IFRoZSBvbGQgd2luZG93IG9yIGJ1ZmZlciB3YXMgZGVsZXRlZDogSXQncyBhIGEgYnVnIHdoZW4KKyAgICAgKiB0aGlzIGhhcHBlbnMhICovCisgICAgaWYgKCF3aW5fdmFsaWQob2xkX2N1cndpbikgfHwgIWJ1Zl92YWxpZChvbGRfY3VyYnVmKSkKKyAgICB7CisJY21kd2luX3Jlc3VsdCA9IEN0cmxfQzsKKwlFTVNHKF8oIkUxOTk6IEFjdGl2ZSB3aW5kb3cgb3IgYnVmZmVyIGRlbGV0ZWQiKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjIGlmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwkvKiBhdXRvY21kcyBtYXkgYWJvcnQgc2NyaXB0IHByb2Nlc3NpbmcgKi8KKwlpZiAoYWJvcnRpbmcoKSAmJiBjbWR3aW5fcmVzdWx0ICE9IEtfSUdOT1JFKQorCSAgICBjbWR3aW5fcmVzdWx0ID0gQ3RybF9DOworIyBlbmRpZgorCS8qIFNldCB0aGUgbmV3IGNvbW1hbmQgbGluZSBmcm9tIHRoZSBjbWRsaW5lIGJ1ZmZlci4gKi8KKwl2aW1fZnJlZShjY2xpbmUuY21kYnVmZik7CisJaWYgKGNtZHdpbl9yZXN1bHQgPT0gS19YRjEpCQkvKiA6cWEhIHR5cGVkICovCisJeworCSAgICBjY2xpbmUuY21kYnVmZiA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKikicWEhIik7CisJICAgIGNtZHdpbl9yZXN1bHQgPSBDQVI7CisJfQorCWVsc2UgaWYgKGNtZHdpbl9yZXN1bHQgPT0gS19YRjIpCS8qIDpxYSB0eXBlZCAqLworCXsKKwkgICAgY2NsaW5lLmNtZGJ1ZmYgPSB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopInFhIik7CisJICAgIGNtZHdpbl9yZXN1bHQgPSBDQVI7CisJfQorCWVsc2UKKwkgICAgY2NsaW5lLmNtZGJ1ZmYgPSB2aW1fc3Ryc2F2ZShtbF9nZXRfY3VybGluZSgpKTsKKwlpZiAoY2NsaW5lLmNtZGJ1ZmYgPT0gTlVMTCkKKwkgICAgY21kd2luX3Jlc3VsdCA9IEN0cmxfQzsKKwllbHNlCisJeworCSAgICBjY2xpbmUuY21kbGVuID0gKGludClTVFJMRU4oY2NsaW5lLmNtZGJ1ZmYpOworCSAgICBjY2xpbmUuY21kYnVmZmxlbiA9IGNjbGluZS5jbWRsZW4gKyAxOworCSAgICBjY2xpbmUuY21kcG9zID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisJICAgIGlmIChjY2xpbmUuY21kcG9zID4gY2NsaW5lLmNtZGxlbikKKwkJY2NsaW5lLmNtZHBvcyA9IGNjbGluZS5jbWRsZW47CisJICAgIGlmIChjbWR3aW5fcmVzdWx0ID09IEtfSUdOT1JFKQorCSAgICB7CisJCXNldF9jbWRzcG9zX2N1cnNvcigpOworCQlyZWRyYXdjbWQoKTsKKwkgICAgfQorCX0KKworIyBpZmRlZiBGRUFUX0FVVE9DTUQKKwkvKiBEb24ndCBleGVjdXRlIGF1dG9jb21tYW5kcyB3aGlsZSBkZWxldGluZyB0aGUgd2luZG93LiAqLworCSsrYXV0b2NtZF9ibG9jazsKKyMgZW5kaWYKKwl3cCA9IGN1cndpbjsKKwlicCA9IGN1cmJ1ZjsKKwl3aW5fZ290byhvbGRfY3Vyd2luKTsKKwl3aW5fY2xvc2Uod3AsIFRSVUUpOworCWNsb3NlX2J1ZmZlcihOVUxMLCBicCwgRE9CVUZfV0lQRSk7CisKKwkvKiBSZXN0b3JlIHdpbmRvdyBzaXplcy4gKi8KKwl3aW5fc2l6ZV9yZXN0b3JlKCZ3aW5zaXplcyk7CisKKyMgaWZkZWYgRkVBVF9BVVRPQ01ECisJLS1hdXRvY21kX2Jsb2NrOworIyBlbmRpZgorICAgIH0KKworICAgIGdhX2NsZWFyKCZ3aW5zaXplcyk7CisgICAgcmVzdGFydF9lZGl0ID0gc2F2ZV9yZXN0YXJ0X2VkaXQ7CisKKyAgICBTdGF0ZSA9IHNhdmVfU3RhdGU7CisjIGlmZGVmIEZFQVRfTU9VU0UKKyAgICBzZXRtb3VzZSgpOworIyBlbmRpZgorCisgICAgcmV0dXJuIGNtZHdpbl9yZXN1bHQ7Cit9CisjZW5kaWYgLyogRkVBVF9DTURXSU4gKi8KKworLyoKKyAqIFVzZWQgZm9yIGNvbW1hbmRzIHRoYXQgZWl0aGVyIHRha2UgYSBzaW1wbGUgY29tbWFuZCBzdHJpbmcgYXJndW1lbnQsIG9yOgorICoJY21kIDw8IGVuZG1hcmtlcgorICoJICB7c2NyaXB0fQorICoJZW5kbWFya2VyCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IHdpdGgge3NjcmlwdH0gb3IgTlVMTC4KKyAqLworICAgIGNoYXJfdSAqCitzY3JpcHRfZ2V0KGVhcCwgY21kKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICBjaGFyX3UJKmNtZDsKK3sKKyAgICBjaGFyX3UJKnRoZWxpbmU7CisgICAgY2hhcgkqZW5kX3BhdHRlcm4gPSBOVUxMOworICAgIGNoYXIJZG90W10gPSAiLiI7CisgICAgZ2FycmF5X1QJZ2E7CisKKyAgICBpZiAoY21kWzBdICE9ICc8JyB8fCBjbWRbMV0gIT0gJzwnIHx8IGVhcC0+Z2V0bGluZSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgZ2FfaW5pdDIoJmdhLCAxLCAweDQwMCk7CisKKyAgICBpZiAoY21kWzJdICE9IE5VTCkKKwllbmRfcGF0dGVybiA9IChjaGFyICopc2tpcHdoaXRlKGNtZCArIDIpOworICAgIGVsc2UKKwllbmRfcGF0dGVybiA9IGRvdDsKKworICAgIGZvciAoOzspCisgICAgeworCXRoZWxpbmUgPSBlYXAtPmdldGxpbmUoCisjaWZkZWYgRkVBVF9FVkFMCisJICAgIGVhcC0+Y3N0YWNrLT5jc193aGlsZWxldmVsID4gMCA/IC0xIDoKKyNlbmRpZgorCSAgICBOVUwsIGVhcC0+Y29va2llLCAwKTsKKworCWlmICh0aGVsaW5lID09IE5VTEwgfHwgU1RSQ01QKGVuZF9wYXR0ZXJuLCB0aGVsaW5lKSA9PSAwKQorCSAgICBicmVhazsKKworCWdhX2NvbmNhdCgmZ2EsIHRoZWxpbmUpOworCWdhX2FwcGVuZCgmZ2EsICdcbicpOworCXZpbV9mcmVlKHRoZWxpbmUpOworICAgIH0KKworICAgIHJldHVybiAoY2hhcl91ICopZ2EuZ2FfZGF0YTsKK30KZGlmZiAtLWdpdCBhL3NyYy9mYXJzaS5jIGIvc3JjL2ZhcnNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0NDQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9mYXJzaS5jCkBAIC0wLDAgKzEsMjMxMiBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogZmFyc2kuYzogZnVuY3Rpb25zIGZvciBGYXJzaSBsYW5ndWFnZQorICoKKyAqIEluY2x1ZGVkIGJ5IG1haW4uYywgd2hlbiBGRUFUX0ZLTUFQIGlzIGRlZmluZWQuCisgKi8KKworc3RhdGljIGludCB0b0ZfWG9yX1hfIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyBpbnQgRl9pc19UeUUgX19BUkdTKChpbnQgYykpOworc3RhdGljIGludCBGX2lzX1R5Q19UeUQgX19BUkdTKChpbnQgYykpOworc3RhdGljIGludCBGX2lzX1R5Ql9UeUNfVHlEIF9fQVJHUygoaW50IHNyYywgaW50IG9mZnNldCkpOworc3RhdGljIGludCB0b0ZfVHlCIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyB2b2lkIHB1dF9jdXJyX2FuZF9sX3RvX1ggX19BUkdTKChpbnQgYykpOworc3RhdGljIHZvaWQgcHV0X2FuZF9yZWRvIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyB2b2lkIGNoZ19jX3RvWF9vclggX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBjaGdfY190b19YX29yWF8gX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBjaGdfY190b19YX29yX1ggX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBjaGdfbF90b19YX29yWF8gX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBjaGdfbF90b1hvcl9YIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgY2hnX3JfdG9fWG9yX1hfIF9fQVJHUygodm9pZCkpOworc3RhdGljIGludCB0b0ZfbGVhZGluZyBfX0FSR1MoKGludCBjKSk7CitzdGF0aWMgaW50IHRvRl9Sam9pbiBfX0FSR1MoKGludCBjKSk7CitzdGF0aWMgaW50IGNhbkZfTGpvaW4gX19BUkdTKChpbnQgYykpOworc3RhdGljIGludCBjYW5GX1Jqb2luIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyBpbnQgRl9pc3Rlcm0gX19BUkdTKChpbnQgYykpOworc3RhdGljIGludCB0b0ZfZW5kaW5nIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyB2b2lkIGxyc3dhcGJ1ZiBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgbGVuKSk7CisKKy8qCisqKiBDb252ZXJ0IHRoZSBnaXZlbiBGYXJzaSBjaGFyYWN0ZXIgaW50byBhIF9YIG9yIF9YXyB0eXBlCisqLworICAgIHN0YXRpYyBpbnQKK3RvRl9Yb3JfWF8oYykKKyAgICBpbnQJYzsKK3sKKyAgICBpbnQgdGVtcGM7CisKKyAgICBzd2l0Y2ggKGMpCisgICAgeworCWNhc2UgQkU6CisJCXJldHVybiBfQkU7CisJY2FzZSBQRToKKwkJcmV0dXJuIF9QRTsKKwljYXNlIFRFOgorCQlyZXR1cm4gX1RFOworCWNhc2UgU0U6CisJCXJldHVybiBfU0U7CisJY2FzZSBKSU06CisJCXJldHVybiBfSklNOworCWNhc2UgQ0hFOgorCQlyZXR1cm4gX0NIRTsKKwljYXNlIEhFX0o6CisJCXJldHVybiBfSEVfSjsKKwljYXNlIFhFOgorCQlyZXR1cm4gX1hFOworCWNhc2UgU0lOOgorCQlyZXR1cm4gX1NJTjsKKwljYXNlIFNISU46CisJCXJldHVybiBfU0hJTjsKKwljYXNlIFNBRDoKKwkJcmV0dXJuIF9TQUQ7CisJY2FzZSBaQUQ6CisJCXJldHVybiBfWkFEOworCWNhc2UgQVlOOgorCQlyZXR1cm4gX0FZTjsKKwljYXNlIEFZTl86CisJCXJldHVybiBfQVlOXzsKKwljYXNlIEdIQVlOOgorCQlyZXR1cm4gX0dIQVlOOworCWNhc2UgR0hBWU5fOgorCQlyZXR1cm4gX0dIQVlOXzsKKwljYXNlIEZFOgorCQlyZXR1cm4gX0ZFOworCWNhc2UgR0hBRjoKKwkJcmV0dXJuIF9HSEFGOworCWNhc2UgS0FGOgorCQlyZXR1cm4gX0tBRjsKKwljYXNlIEdBRjoKKwkJcmV0dXJuIF9HQUY7CisJY2FzZSBMQU06CisJCXJldHVybiBfTEFNOworCWNhc2UgTUlNOgorCQlyZXR1cm4gX01JTTsKKwljYXNlIE5PT046CisJCXJldHVybiBfTk9PTjsKKwljYXNlIFlFOgorCWNhc2UgWUVfOgorCQlyZXR1cm4gX1lFOworCWNhc2UgWUVFOgorCWNhc2UgWUVFXzoKKwkJcmV0dXJuIF9ZRUU7CisJY2FzZSBJRToKKwljYXNlIElFXzoKKwkJcmV0dXJuIF9JRTsKKwljYXNlIEZfSEU6CisJCXRlbXBjID0gX0hFOworCisJCWlmIChwX3JpICYmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCsxIDwgU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpKSkKKwkJeworCQkgICAgaW5jX2N1cnNvcigpOworCisJCSAgICBpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfRURULCBBVF9DVVJTT1IpKQorCQkJdGVtcGMgPSBfSEVfOworCisJCSAgICBkZWNfY3Vyc29yKCk7CisJCX0KKwkJaWYgKCFwX3JpICYmIFNUUkxFTihtbF9nZXRfY3VybGluZSgpKSkKKwkJeworCQkgICAgZGVjX2N1cnNvcigpOworCisJCSAgICBpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfRURULCBBVF9DVVJTT1IpKQorCQkJdGVtcGMgPSBfSEVfOworCisJCSAgICBpbmNfY3Vyc29yKCk7CisJCX0KKworCQlyZXR1cm4gdGVtcGM7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorKiogQ29udmVydCB0aGUgZ2l2ZW4gRmFyc2kgY2hhcmFjdGVyIGludG8gRmFyc2kgY2FwaXRhbCBjaGFyYWN0ZXIgLgorKi8KKyAgICBpbnQKK3RvRl9UeUEoYykKKyAgICBpbnQJYyA7Cit7CisgICAgc3dpdGNoIChjKQorICAgIHsKKwljYXNlIEFMRUZfOgorCQlyZXR1cm4gQUxFRjsKKwljYXNlIEFMRUZfVV9IXzoKKwkJcmV0dXJuIEFMRUZfVV9IOworCWNhc2UgX0JFOgorCQlyZXR1cm4gQkU7CisJY2FzZSBfUEU6CisJCXJldHVybiBQRTsKKwljYXNlIF9URToKKwkJcmV0dXJuIFRFOworCWNhc2UgX1NFOgorCQlyZXR1cm4gU0U7CisJY2FzZSBfSklNOgorCQlyZXR1cm4gSklNOworCWNhc2UgX0NIRToKKwkJcmV0dXJuIENIRTsKKwljYXNlIF9IRV9KOgorCQlyZXR1cm4gSEVfSjsKKwljYXNlIF9YRToKKwkJcmV0dXJuIFhFOworCWNhc2UgX1NJTjoKKwkJcmV0dXJuIFNJTjsKKwljYXNlIF9TSElOOgorCQlyZXR1cm4gU0hJTjsKKwljYXNlIF9TQUQ6CisJCXJldHVybiBTQUQ7CisJY2FzZSBfWkFEOgorCQlyZXR1cm4gWkFEOworCWNhc2UgX0FZTjoKKwljYXNlIEFZTl86CisJY2FzZSBfQVlOXzoKKwkJcmV0dXJuIEFZTjsKKwljYXNlIF9HSEFZTjoKKwljYXNlIEdIQVlOXzoKKwljYXNlIF9HSEFZTl86CisJCXJldHVybiBHSEFZTjsKKwljYXNlIF9GRToKKwkJcmV0dXJuIEZFOworCWNhc2UgX0dIQUY6CisJCXJldHVybiBHSEFGOworLyogSSBhbSBub3Qgc3VyZSB3aGF0IGl0IGlzICEhIQkgICAgY2FzZSBfS0FGX0g6ICovCisJY2FzZSBfS0FGOgorCQlyZXR1cm4gS0FGOworCWNhc2UgX0dBRjoKKwkJcmV0dXJuIEdBRjsKKwljYXNlIF9MQU06CisJCXJldHVybiBMQU07CisJY2FzZSBfTUlNOgorCQlyZXR1cm4gTUlNOworCWNhc2UgX05PT046CisJCXJldHVybiBOT09OOworCWNhc2UgX1lFOgorCWNhc2UgWUVfOgorCQlyZXR1cm4gWUU7CisJY2FzZSBfWUVFOgorCWNhc2UgWUVFXzoKKwkJcmV0dXJuIFlFRTsKKwljYXNlIFRFRV86CisJCXJldHVybiBURUU7CisJY2FzZSBfSUU6CisJY2FzZSBJRV86CisJCXJldHVybiBJRTsKKwljYXNlIF9IRToKKwljYXNlIF9IRV86CisJCXJldHVybiBGX0hFOworICAgIH0KKyAgICByZXR1cm4gYzsKK30KKworLyoKKyoqIElzIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvcitvZmZzZXQgaW4gdGhlIGdpdmVuIGJ1ZmZlciBhIGpvaW4gdHlwZS4KKyoqIFRoYXQgaXMgYSBjaGFyYWN0ZXIgdGhhdCBpcyBjb21iaW5lZCB3aXRoIHRoZSBvdGhlcnMuCisqKiBOb3RlOiB0aGUgb2Zmc2V0IGlzIHVzZWQgb25seSBmb3IgY29tbWFuZCBsaW5lIGJ1ZmZlci4KKyovCisgICAgc3RhdGljIGludAorRl9pc19UeUJfVHlDX1R5RChzcmMsIG9mZnNldCkKKyAgICBpbnQJCXNyYywgb2Zmc2V0OworeworICAgIGludAkJYzsKKworICAgIGlmIChzcmMgPT0gU1JDX0VEVCkKKwljID0gZ2NoYXJfY3Vyc29yKCk7CisgICAgZWxzZQorCWMgPSBjbWRfZ2NoYXIoQVRfQ1VSU09SK29mZnNldCk7CisKKyAgICBzd2l0Y2ggKGMpCisgICAgeworCWNhc2UgX0xBTToKKwljYXNlIF9CRToKKwljYXNlIF9QRToKKwljYXNlIF9URToKKwljYXNlIF9TRToKKwljYXNlIF9KSU06CisJY2FzZSBfQ0hFOgorCWNhc2UgX0hFX0o6CisJY2FzZSBfWEU6CisJY2FzZSBfU0lOOgorCWNhc2UgX1NISU46CisJY2FzZSBfU0FEOgorCWNhc2UgX1pBRDoKKwljYXNlIF9UQToKKwljYXNlIF9aQToKKwljYXNlIF9BWU46CisJY2FzZSBfQVlOXzoKKwljYXNlIF9HSEFZTjoKKwljYXNlIF9HSEFZTl86CisJY2FzZSBfRkU6CisJY2FzZSBfR0hBRjoKKwljYXNlIF9LQUY6CisJY2FzZSBfS0FGX0g6CisJY2FzZSBfR0FGOgorCWNhc2UgX01JTToKKwljYXNlIF9OT09OOgorCWNhc2UgX1lFOgorCWNhc2UgX1lFRToKKwljYXNlIF9JRToKKwljYXNlIF9IRV86CisJY2FzZSBfSEU6CisJCXJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisqKiBJcyB0aGUgRmFyc2kgY2hhcmFjdGVyIG9uZSBvZiB0aGUgdGVybWluYXRpbmcgb25seSB0eXBlLgorKi8KKyAgICBzdGF0aWMgaW50CitGX2lzX1R5RShjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBzd2l0Y2ggKGMpCisgICAgeworCWNhc2UgQUxFRl9BOgorCWNhc2UgQUxFRl9EX0g6CisJY2FzZSBEQUw6CisJY2FzZSBaQUw6CisJY2FzZSBSRToKKwljYXNlIFpFOgorCWNhc2UgSkU6CisJY2FzZSBXQVc6CisJY2FzZSBXQVdfSDoKKwljYXNlIEhBTVpFOgorCQlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorKiogSXMgdGhlIEZhcnNpIGNoYXJhY3RlciBvbmUgb2YgdGhlIG5vbmUgbGVhZGluZyB0eXBlLgorKi8KKyAgICBzdGF0aWMgaW50CitGX2lzX1R5Q19UeUQoYykKKyAgICBpbnQJICAgIGM7Cit7CisgICAgc3dpdGNoIChjKQorICAgIHsKKwljYXNlIEFMRUZfOgorCWNhc2UgQUxFRl9VX0hfOgorCWNhc2UgX0FZTl86CisJY2FzZSBBWU5fOgorCWNhc2UgX0dIQVlOXzoKKwljYXNlIEdIQVlOXzoKKwljYXNlIF9IRV86CisJY2FzZSBZRV86CisJY2FzZSBJRV86CisJY2FzZSBURUVfOgorCWNhc2UgWUVFXzoKKwkJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyoqIENvbnZlcnQgYSBub25lIGxlYWRpbmcgRmFyc2kgY2hhciBpbnRvIGEgbGVhZGluZyB0eXBlLgorKi8KKyAgICBzdGF0aWMgaW50Cit0b0ZfVHlCKGMpCisgICAgaW50CSAgICBjOworeworICAgIHN3aXRjaCAoYykKKyAgICB7CisJY2FzZSBBTEVGXzoJcmV0dXJuIEFMRUY7CisJY2FzZSBBTEVGX1VfSF86CSAgICByZXR1cm4gQUxFRl9VX0g7CisJY2FzZSBfQVlOXzoJcmV0dXJuIF9BWU47CisJY2FzZSBBWU5fOglyZXR1cm4gQVlOOwkvKiBleGNlcHRpb24gLSB0aGVyZSBhcmUgbWFueSBvZiB0aGVtICovCisJY2FzZSBfR0hBWU5fOglyZXR1cm4gX0dIQVlOOworCWNhc2UgR0hBWU5fOglyZXR1cm4gR0hBWU47CS8qIGV4Y2VwdGlvbiAtIHRoZXJlIGFyZSBtYW55IG9mIHRoZW0gKi8KKwljYXNlIF9IRV86CXJldHVybiBfSEU7CisJY2FzZSBZRV86CXJldHVybiBZRTsKKwljYXNlIElFXzoJcmV0dXJuIElFOworCWNhc2UgVEVFXzoJcmV0dXJuIFRFRTsKKwljYXNlIFlFRV86CXJldHVybiBZRUU7CisgICAgfQorICAgIHJldHVybiBjOworfQorCisvKgorKiogT3ZlcndyaXRlIHRoZSBjdXJyZW50IHJlZG8gYW5kIGN1cnNvciBjaGFyYWN0ZXJzICsgbGVmdCBhZGp1c3QKKyovCisgICAgc3RhdGljIHZvaWQKK3B1dF9jdXJyX2FuZF9sX3RvX1goYykKKyAgICBpbnQJCSAgYzsKK3sKKyAgICBpbnQJdGVtcGM7CisKKyAgICBpZiAoY3Vyd2luLT53X3BfcmwgJiYgcF9yaSkKKwlyZXR1cm47CisKKyAgICBpZiAoIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA8IFNUUkxFTihtbF9nZXRfY3VybGluZSgpKSkpCisgICAgeworCWlmICgocF9yaSAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbCkgfHwgIXBfcmkpCisJeworCSAgICBpZiAocF9yaSkKKwkJZGVjX2N1cnNvcigpOworCSAgICBlbHNlCisJCWluY19jdXJzb3IoKTsKKworCSAgICBpZiAoRl9pc19UeUNfVHlEKCh0ZW1wYyA9IGdjaGFyX2N1cnNvcigpKSkpCisJICAgIHsKKwkJcGNoYXJfY3Vyc29yKHRvRl9UeUIodGVtcGMpKTsKKwkJQXBwZW5kQ2hhclRvUmVkb2J1ZmYoS19CUyk7CisJCUFwcGVuZENoYXJUb1JlZG9idWZmKHRlbXBjKTsKKwkgICAgfQorCisJICAgIGlmIChwX3JpKQorCQlpbmNfY3Vyc29yKCk7CisJICAgIGVsc2UKKwkJZGVjX2N1cnNvcigpOworCX0KKyAgICB9CisKKyAgICBwdXRfYW5kX3JlZG8oYyk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcHV0X2FuZF9yZWRvKGMpCisgICAgaW50IGM7Cit7CisgICAgcGNoYXJfY3Vyc29yKGMpOworICAgIEFwcGVuZENoYXJUb1JlZG9idWZmKEtfQlMpOworICAgIEFwcGVuZENoYXJUb1JlZG9idWZmKGMpOworfQorCisvKgorKiogQ2hhbmdlIHRoZSBjaGFyLiB1bmRlciB0aGUgY3Vyc29yIHRvIGEgWF8gb3IgWCB0eXBlCisqLworICAgIHN0YXRpYyB2b2lkCitjaGdfY190b1hfb3JYKCkKK3sKKyAgICBpbnQJdGVtcGMsIGN1cmM7CisKKyAgICBzd2l0Y2ggKChjdXJjID0gZ2NoYXJfY3Vyc29yKCkpKQorICAgIHsKKwljYXNlIF9CRToKKwkJdGVtcGMgPSBCRTsKKwkJYnJlYWs7CisJY2FzZSBfUEU6CisJCXRlbXBjID0gUEU7CisJCWJyZWFrOworCWNhc2UgX1RFOgorCQl0ZW1wYyA9IFRFOworCQlicmVhazsKKwljYXNlIF9TRToKKwkJdGVtcGMgPSBTRTsKKwkJYnJlYWs7CisJY2FzZSBfSklNOgorCQl0ZW1wYyA9IEpJTTsKKwkJYnJlYWs7CisJY2FzZSBfQ0hFOgorCQl0ZW1wYyA9IENIRTsKKwkJYnJlYWs7CisJY2FzZSBfSEVfSjoKKwkJdGVtcGMgPSBIRV9KOworCQlicmVhazsKKwljYXNlIF9YRToKKwkJdGVtcGMgPSBYRTsKKwkJYnJlYWs7CisJY2FzZSBfU0lOOgorCQl0ZW1wYyA9IFNJTjsKKwkJYnJlYWs7CisJY2FzZSBfU0hJTjoKKwkJdGVtcGMgPSBTSElOOworCQlicmVhazsKKwljYXNlIF9TQUQ6CisJCXRlbXBjID0gU0FEOworCQlicmVhazsKKwljYXNlIF9aQUQ6CisJCXRlbXBjID0gWkFEOworCQlicmVhazsKKwljYXNlIF9GRToKKwkJdGVtcGMgPSBGRTsKKwkJYnJlYWs7CisJY2FzZSBfR0hBRjoKKwkJdGVtcGMgPSBHSEFGOworCQlicmVhazsKKwljYXNlIF9LQUZfSDoKKwljYXNlIF9LQUY6CisJCXRlbXBjID0gS0FGOworCQlicmVhazsKKwljYXNlIF9HQUY6CisJCXRlbXBjID0gR0FGOworCQlicmVhazsKKwljYXNlIF9BWU46CisJCXRlbXBjID0gQVlOOworCQlicmVhazsKKwljYXNlIF9BWU5fOgorCQl0ZW1wYyA9IEFZTl87CisJCWJyZWFrOworCWNhc2UgX0dIQVlOOgorCQl0ZW1wYyA9IEdIQVlOOworCQlicmVhazsKKwljYXNlIF9HSEFZTl86CisJCXRlbXBjID0gR0hBWU5fOworCQlicmVhazsKKwljYXNlIF9MQU06CisJCXRlbXBjID0gTEFNOworCQlicmVhazsKKwljYXNlIF9NSU06CisJCXRlbXBjID0gTUlNOworCQlicmVhazsKKwljYXNlIF9OT09OOgorCQl0ZW1wYyA9IE5PT047CisJCWJyZWFrOworCWNhc2UgX0hFOgorCWNhc2UgX0hFXzoKKwkJdGVtcGMgPSBGX0hFOworCQlicmVhazsKKwljYXNlIF9ZRToKKwljYXNlIF9JRToKKwljYXNlIF9ZRUU6CisJCWlmIChwX3JpKQorCQl7CisJCSAgICBpbmNfY3Vyc29yKCk7CisJCSAgICBpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfRURULCBBVF9DVVJTT1IpKQorCQkJICAgIHRlbXBjID0gKGN1cmMgPT0gX1lFID8gWUVfIDoKKwkJCSAgICAoY3VyYyA9PSBfSUUgPyBJRV8gOiBZRUVfKSk7CisJCSAgICBlbHNlCisJCQkgICAgdGVtcGMgPSAoY3VyYyA9PSBfWUUgPyBZRSA6CisJCQkgICAgKGN1cmMgPT0gX0lFID8gSUUgOiBZRUUpKTsKKwkJICAgIGRlY19jdXJzb3IoKTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkJICAgIHsKKwkJCWRlY19jdXJzb3IoKTsKKwkJCWlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19FRFQsIEFUX0NVUlNPUikpCisJCQkJdGVtcGMgPSAoY3VyYyA9PSBfWUUgPyBZRV8gOgorCQkJCShjdXJjID09IF9JRSA/IElFXyA6IFlFRV8pKTsKKwkJCWVsc2UKKwkJCQl0ZW1wYyA9IChjdXJjID09IF9ZRSA/IFlFIDoKKwkJCQkoY3VyYyA9PSBfSUUgPyBJRSA6IFlFRSkpOworCQkJaW5jX2N1cnNvcigpOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJICAgIHRlbXBjID0gKGN1cmMgPT0gX1lFID8gWUUgOgorCQkJICAgIChjdXJjID09IF9JRSA/IElFIDogWUVFKSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdGVtcGMgPSAwOworICAgIH0KKworICAgIGlmICh0ZW1wYykKKwlwdXRfYW5kX3JlZG8odGVtcGMpOworfQorCisvKgorKiogQ2hhbmdlIHRoZSBjaGFyLiB1bmRlciB0aGUgY3Vyc29yIHRvIGEgX1hfIG9yIFhfIHR5cGUKKyovCisKKyAgICBzdGF0aWMgdm9pZAorY2hnX2NfdG9fWF9vclhfKCkKK3sKKyAgICBpbnQJdGVtcGM7CisKKyAgICBzd2l0Y2ggKGdjaGFyX2N1cnNvcigpKQorICAgIHsKKwljYXNlIEFMRUY6CisJCXRlbXBjID0gQUxFRl87CisJCWJyZWFrOworCWNhc2UgQUxFRl9VX0g6CisJCXRlbXBjID0gQUxFRl9VX0hfOworCQlicmVhazsKKwljYXNlIF9BWU46CisJCXRlbXBjID0gX0FZTl87CisJCWJyZWFrOworCWNhc2UgQVlOOgorCQl0ZW1wYyA9IEFZTl87CisJCWJyZWFrOworCWNhc2UgX0dIQVlOOgorCQl0ZW1wYyA9IF9HSEFZTl87CisJCWJyZWFrOworCWNhc2UgR0hBWU46CisJCXRlbXBjID0gR0hBWU5fOworCQlicmVhazsKKwljYXNlIF9IRToKKwkJdGVtcGMgPSBfSEVfOworCQlicmVhazsKKwljYXNlIFlFOgorCQl0ZW1wYyA9IFlFXzsKKwkJYnJlYWs7CisJY2FzZSBJRToKKwkJdGVtcGMgPSBJRV87CisJCWJyZWFrOworCWNhc2UgVEVFOgorCQl0ZW1wYyA9IFRFRV87CisJCWJyZWFrOworCWNhc2UgWUVFOgorCQl0ZW1wYyA9IFlFRV87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRlbXBjID0gMDsKKyAgICB9CisKKyAgICBpZiAodGVtcGMpCisJcHV0X2FuZF9yZWRvKHRlbXBjKTsKK30KKworLyoKKyoqIENoYW5nZSB0aGUgY2hhci4gdW5kZXIgdGhlIGN1cnNvciB0byBhIF9YXyBvciBfWCB0eXBlCisqLworICAgIHN0YXRpYyB2b2lkCitjaGdfY190b19YX29yX1ggKCkKK3sKKyAgICBpbnQJdGVtcGM7CisKKyAgICB0ZW1wYyA9IGdjaGFyX2N1cnNvcigpOworCisgICAgaWYgKGN1cndpbi0+d19jdXJzb3IuY29sKzEgPCBTVFJMRU4obWxfZ2V0X2N1cmxpbmUoKSkpCisgICAgeworCWluY19jdXJzb3IoKTsKKworCWlmICgodGVtcGMgPT0gRl9IRSkgJiYgKEZfaXNfVHlCX1R5Q19UeUQoU1JDX0VEVCwgQVRfQ1VSU09SKSkpCisJeworCSAgICB0ZW1wYyA9IF9IRV87CisKKwkgICAgZGVjX2N1cnNvcigpOworCisJICAgIHB1dF9hbmRfcmVkbyh0ZW1wYyk7CisJICAgIHJldHVybjsKKwl9CisKKwlkZWNfY3Vyc29yKCk7CisgICAgfQorCisgICAgaWYgKCh0ZW1wYyA9IHRvRl9Yb3JfWF8odGVtcGMpKSAhPSAwKQorCXB1dF9hbmRfcmVkbyh0ZW1wYyk7Cit9CisKKy8qCisqKiBDaGFuZ2UgdGhlIGNoYXJhY3RlciBsZWZ0IHRvIHRoZSBjdXJzb3IgdG8gYSBfWF8gb3IgWF8gdHlwZQorKi8KKyAgICBzdGF0aWMgdm9pZAorY2hnX2xfdG9fWF9vclhfICgpCit7CisgICAgaW50CXRlbXBjOworCisgICAgaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCAmJgorCShjdXJ3aW4tPndfY3Vyc29yLmNvbCsxID09IFNUUkxFTihtbF9nZXRfY3VybGluZSgpKSkpCisJcmV0dXJuOworCisgICAgaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCAmJiBwX3JpKQorCXJldHVybjsKKworICAgIGlmIChwX3JpKQorCWRlY19jdXJzb3IoKTsKKyAgICBlbHNlCisJaW5jX2N1cnNvcigpOworCisgICAgc3dpdGNoIChnY2hhcl9jdXJzb3IoKSkKKyAgICB7CisJY2FzZSBBTEVGOgorCQl0ZW1wYyA9IEFMRUZfOworCQlicmVhazsKKwljYXNlIEFMRUZfVV9IOgorCQl0ZW1wYyA9IEFMRUZfVV9IXzsKKwkJYnJlYWs7CisJY2FzZSBfQVlOOgorCQl0ZW1wYyA9IF9BWU5fOworCQlicmVhazsKKwljYXNlIEFZTjoKKwkJdGVtcGMgPSBBWU5fOworCQlicmVhazsKKwljYXNlIF9HSEFZTjoKKwkJdGVtcGMgPSBfR0hBWU5fOworCQlicmVhazsKKwljYXNlIEdIQVlOOgorCQl0ZW1wYyA9IEdIQVlOXzsKKwkJYnJlYWs7CisJY2FzZSBfSEU6CisJCXRlbXBjID0gX0hFXzsKKwkJYnJlYWs7CisJY2FzZSBZRToKKwkJdGVtcGMgPSBZRV87CisJCWJyZWFrOworCWNhc2UgSUU6CisJCXRlbXBjID0gSUVfOworCQlicmVhazsKKwljYXNlIFRFRToKKwkJdGVtcGMgPSBURUVfOworCQlicmVhazsKKwljYXNlIFlFRToKKwkJdGVtcGMgPSBZRUVfOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0ZW1wYyA9IDA7CisgICAgfQorCisgICAgaWYgKHRlbXBjKQorCXB1dF9hbmRfcmVkbyh0ZW1wYyk7CisKKyAgICBpZiAocF9yaSkKKwlpbmNfY3Vyc29yKCk7CisgICAgZWxzZQorCWRlY19jdXJzb3IoKTsKK30KKworLyoKKyoqIENoYW5nZSB0aGUgY2hhcmN0ZXIgbGVmdCB0byB0aGUgY3Vyc29yIHRvIGEgWCBvciBfWCB0eXBlCisqLworCisgICAgc3RhdGljIHZvaWQKK2NoZ19sX3RvWG9yX1ggKCkKK3sKKyAgICBpbnQJdGVtcGM7CisKKyAgICBpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sICYmCisJKGN1cndpbi0+d19jdXJzb3IuY29sKzEgPT0gU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpKSkKKwlyZXR1cm47CisKKyAgICBpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sICYmIHBfcmkpCisJcmV0dXJuOworCisgICAgaWYgKHBfcmkpCisJZGVjX2N1cnNvcigpOworICAgIGVsc2UKKwlpbmNfY3Vyc29yKCk7CisKKyAgICBzd2l0Y2ggKGdjaGFyX2N1cnNvcigpKQorICAgIHsKKwljYXNlIEFMRUZfOgorCQl0ZW1wYyA9IEFMRUY7CisJCWJyZWFrOworCWNhc2UgQUxFRl9VX0hfOgorCQl0ZW1wYyA9IEFMRUZfVV9IOworCQlicmVhazsKKwljYXNlIF9BWU5fOgorCQl0ZW1wYyA9IF9BWU47CisJCWJyZWFrOworCWNhc2UgQVlOXzoKKwkJdGVtcGMgPSBBWU47CisJCWJyZWFrOworCWNhc2UgX0dIQVlOXzoKKwkJdGVtcGMgPSBfR0hBWU47CisJCWJyZWFrOworCWNhc2UgR0hBWU5fOgorCQl0ZW1wYyA9IEdIQVlOOworCQlicmVhazsKKwljYXNlIF9IRV86CisJCXRlbXBjID0gX0hFOworCQlicmVhazsKKwljYXNlIFlFXzoKKwkJdGVtcGMgPSBZRTsKKwkJYnJlYWs7CisJY2FzZSBJRV86CisJCXRlbXBjID0gSUU7CisJCWJyZWFrOworCWNhc2UgVEVFXzoKKwkJdGVtcGMgPSBURUU7CisJCWJyZWFrOworCWNhc2UgWUVFXzoKKwkJdGVtcGMgPSBZRUU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRlbXBjID0gMDsKKyAgICB9CisKKyAgICBpZiAodGVtcGMpCisJcHV0X2FuZF9yZWRvKHRlbXBjKTsKKworICAgIGlmIChwX3JpKQorCWluY19jdXJzb3IoKTsKKyAgICBlbHNlCisJZGVjX2N1cnNvcigpOworfQorCisvKgorKiogQ2hhbmdlIHRoZSBjaGFyY3RlciByaWdodCB0byB0aGUgY3Vyc29yIHRvIGEgX1ggb3IgX1hfIHR5cGUKKyovCisKKyAgICBzdGF0aWMgdm9pZAorY2hnX3JfdG9fWG9yX1hfKCkKK3sKKyAgICBpbnQgdGVtcGMsIGM7CisKKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wpCisgICAgeworCWlmICghcF9yaSkKKwkgICAgZGVjX2N1cnNvcigpOworCisJdGVtcGMgPSBnY2hhcl9jdXJzb3IoKTsKKworCWlmICgoYyA9IHRvRl9Yb3JfWF8odGVtcGMpKSAhPSAwKQorCSAgICBwdXRfYW5kX3JlZG8oYyk7CisKKwlpZiAoIXBfcmkpCisJICAgIGluY19jdXJzb3IoKTsKKworICAgIH0KK30KKworLyoKKyoqIE1hcCBGYXJzaSBrZXlib2FyZCB3aGVuIGluIGZrbWFwIG1vZGUuCisqLworCisgICAgaW50Citma21hcChjKQorICAgIGludCBjOworeworICAgIGludAkJdGVtcGM7CisgICAgc3RhdGljIGludAlyZXZpbnM7CisKKyAgICBpZiAoSVNfU1BFQ0lBTChjKSkKKwlyZXR1cm4gYzsKKworICAgIGlmIChWSU1fSVNESUdJVChjKSB8fCAoKGMgPT0gJy4nIHx8IGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8CisJYyA9PSAnXicgfHwgYyA9PSAnJScgfHwgYyA9PSAnIycgfHwgYyA9PSAnPScpICAmJiByZXZpbnMpKQorICAgIHsKKwlpZiAoIXJldmlucykKKwl7CisJICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkgICAgeworCQlpZiAoIXBfcmkpCisJCSAgICBkZWNfY3Vyc29yKCk7CisKKwkJICAgIGNoZ19jX3RvWF9vclggKCk7CisJCSAgICBjaGdfbF90b1hvcl9YICgpOworCisJCWlmICghcF9yaSkKKwkJICAgIGluY19jdXJzb3IoKTsKKwkgICAgfQorCX0KKworCWFycm93X3VzZWQgPSBUUlVFOworCSh2b2lkKXN0b3BfYXJyb3coKTsKKworCWlmICghY3Vyd2luLT53X3BfcmwgJiYgcmV2aW5zKQorCSAgICBpbmNfY3Vyc29yKCk7CisKKwkrK3JldmluczsKKwlwX3JpPTE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKHJldmlucykKKwl7CisJICAgIGFycm93X3VzZWQgPSBUUlVFOworCSAgICAodm9pZClzdG9wX2Fycm93KCk7CisKKwkgICAgcmV2aW5zID0gMDsKKwkgICAgaWYgKGN1cndpbi0+d19wX3JsKQorCSAgICB7CisJCXdoaWxlICgoRl9pc2RpZ2l0KGdjaGFyX2N1cnNvcigpKQorCQkJICAgIHx8IChnY2hhcl9jdXJzb3IoKSA9PSBGX1BFUklPRAorCQkJCXx8IGdjaGFyX2N1cnNvcigpID09IEZfUExVUworCQkJCXx8IGdjaGFyX2N1cnNvcigpID09IEZfTUlOVVMKKwkJCQl8fCBnY2hhcl9jdXJzb3IoKSA9PSBGX01VTAorCQkJCXx8IGdjaGFyX2N1cnNvcigpID09IEZfRElWSURFCisJCQkJfHwgZ2NoYXJfY3Vyc29yKCkgPT0gRl9QRVJDRU5UCisJCQkJfHwgZ2NoYXJfY3Vyc29yKCkgPT0gRl9FUVVBTFMpKQorCQkJJiYgZ2NoYXJfY3Vyc29yKCkgIT0gTlVMKQorCQkgICAgKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKGN1cndpbi0+d19jdXJzb3IuY29sKQorCQkgICAgd2hpbGUgKChGX2lzZGlnaXQoZ2NoYXJfY3Vyc29yKCkpCisJCQkgICAgfHwgKGdjaGFyX2N1cnNvcigpID09IEZfUEVSSU9ECisJCQkJfHwgZ2NoYXJfY3Vyc29yKCkgPT0gRl9QTFVTCisJCQkJfHwgZ2NoYXJfY3Vyc29yKCkgPT0gRl9NSU5VUworCQkJCXx8IGdjaGFyX2N1cnNvcigpID09IEZfTVVMCisJCQkJfHwgZ2NoYXJfY3Vyc29yKCkgPT0gRl9ESVZJREUKKwkJCQl8fCBnY2hhcl9jdXJzb3IoKSA9PSBGX1BFUkNFTlQKKwkJCQl8fCBnY2hhcl9jdXJzb3IoKSA9PSBGX0VRVUFMUykpCisJCQkgICAgJiYgLS1jdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkJCTsKKworCQlpZiAoIUZfaXNkaWdpdChnY2hhcl9jdXJzb3IoKSkpCisJCSAgICArK2N1cndpbi0+d19jdXJzb3IuY29sOworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmICghcmV2aW5zKQorICAgIHsKKwlpZiAoY3Vyd2luLT53X3BfcmwpCisJICAgIHBfcmk9MDsKKwlpZiAoIWN1cndpbi0+d19wX3JsKQorCSAgICBwX3JpPTE7CisgICAgfQorCisgICAgaWYgKChjIDwgMHgxMDApICYmIChpc2FscGhhKGMpIHx8IGMgPT0gJyYnIHx8ICAgYyA9PSAnXicgfHwJYyA9PSAnOycgfHwKKwkJCSAgICBjID09ICdcJyd8fAljID09ICcsJyB8fCBjID09ICdbJyB8fAorCQkJICAgIGMgPT0gJ10nIHx8CWMgPT0gJ3snIHx8IGMgPT0gJ30nCSkpCisJY2hnX3JfdG9fWG9yX1hfKCk7CisKKyAgICB0ZW1wYyA9IDA7CisKKyAgICBzd2l0Y2ggKGMpCisgICAgeworCWNhc2UgJ2AnOgorCWNhc2UgJyAnOgorCWNhc2UgJy4nOgorCWNhc2UgJyEnOgorCWNhc2UgJyInOgorCWNhc2UgJyQnOgorCWNhc2UgJyUnOgorCWNhc2UgJ14nOgorCWNhc2UgJyYnOgorCWNhc2UgJy8nOgorCWNhc2UgJygnOgorCWNhc2UgJyknOgorCWNhc2UgJz0nOgorCWNhc2UgJ1xcJzoKKwljYXNlICc/JzoKKwljYXNlICcrJzoKKwljYXNlICctJzoKKwljYXNlICdfJzoKKwljYXNlICcqJzoKKwljYXNlICc6JzoKKwljYXNlICcjJzoKKwljYXNlICd+JzoKKwljYXNlICdAJzoKKwljYXNlICc8JzoKKwljYXNlICc+JzoKKwljYXNlICd7JzoKKwljYXNlICd9JzoKKwljYXNlICd8JzoKKwljYXNlICcwJzoKKwljYXNlICcxJzoKKwljYXNlICcyJzoKKwljYXNlICczJzoKKwljYXNlICc0JzoKKwljYXNlICc1JzoKKwljYXNlICc2JzoKKwljYXNlICc3JzoKKwljYXNlICc4JzoKKwljYXNlICc5JzoKKwljYXNlICdCJzoKKwljYXNlICdFJzoKKwljYXNlICdGJzoKKwljYXNlICdIJzoKKwljYXNlICdJJzoKKwljYXNlICdLJzoKKwljYXNlICdMJzoKKwljYXNlICdNJzoKKwljYXNlICdPJzoKKwljYXNlICdQJzoKKwljYXNlICdRJzoKKwljYXNlICdSJzoKKwljYXNlICdUJzoKKwljYXNlICdVJzoKKwljYXNlICdXJzoKKwljYXNlICdZJzoKKwljYXNlICBOTDoKKwljYXNlICBUQUI6CisKKwkgICAgaWYgKHBfcmkgJiYgYyA9PSBOTCAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkgICAgeworCQkvKgorCQkqKiBJZiB0aGUgY2hhciBiZWZvcmUgdGhlIGN1cnNvciBpcyBfWF8gb3IgWF8gZG8gbm90IGNoYW5nZQorCQkqKiB0aGUgb25lIHVuZGVyIHRoZSBjdXJzb3Igd2l0aCBYIHR5cGUuCisJCSovCisKKwkJZGVjX2N1cnNvcigpOworCisJCWlmIChGX2lzYWxwaGEoZ2NoYXJfY3Vyc29yKCkpKQorCQl7CisJCSAgICBpbmNfY3Vyc29yKCk7CisJCSAgICByZXR1cm4gTkw7CisJCX0KKworCQlpbmNfY3Vyc29yKCk7CisJICAgIH0KKworCSAgICBpZiAoIXBfcmkpCisJICAgIGlmICghY3Vyd2luLT53X2N1cnNvci5jb2wpCisJICAgIHsKKwkJc3dpdGNoIChjKQorCQl7CisJCSAgICBjYXNlICcwJzoJcmV0dXJuIEZBUlNJXzA7CisJCSAgICBjYXNlICcxJzoJcmV0dXJuIEZBUlNJXzE7CisJCSAgICBjYXNlICcyJzoJcmV0dXJuIEZBUlNJXzI7CisJCSAgICBjYXNlICczJzoJcmV0dXJuIEZBUlNJXzM7CisJCSAgICBjYXNlICc0JzoJcmV0dXJuIEZBUlNJXzQ7CisJCSAgICBjYXNlICc1JzoJcmV0dXJuIEZBUlNJXzU7CisJCSAgICBjYXNlICc2JzoJcmV0dXJuIEZBUlNJXzY7CisJCSAgICBjYXNlICc3JzoJcmV0dXJuIEZBUlNJXzc7CisJCSAgICBjYXNlICc4JzoJcmV0dXJuIEZBUlNJXzg7CisJCSAgICBjYXNlICc5JzoJcmV0dXJuIEZBUlNJXzk7CisJCSAgICBjYXNlICdCJzoJcmV0dXJuIEZfUFNQOworCQkgICAgY2FzZSAnRSc6CXJldHVybiBKQVpSX047CisJCSAgICBjYXNlICdGJzoJcmV0dXJuIEFMRUZfRF9IOworCQkgICAgY2FzZSAnSCc6CXJldHVybiBBTEVGX0E7CisJCSAgICBjYXNlICdJJzoJcmV0dXJuIFRBU0g7CisJCSAgICBjYXNlICdLJzoJcmV0dXJuIEZfTFFVT1Q7CisJCSAgICBjYXNlICdMJzoJcmV0dXJuIEZfUlFVT1Q7CisJCSAgICBjYXNlICdNJzoJcmV0dXJuIEhBTVpFOworCQkgICAgY2FzZSAnTyc6CXJldHVybiAnWyc7CisJCSAgICBjYXNlICdQJzoJcmV0dXJuICddJzsKKwkJICAgIGNhc2UgJ1EnOglyZXR1cm4gT087CisJCSAgICBjYXNlICdSJzoJcmV0dXJuIE1BRF9OOworCQkgICAgY2FzZSAnVCc6CXJldHVybiBPVzsKKwkJICAgIGNhc2UgJ1UnOglyZXR1cm4gTUFEOworCQkgICAgY2FzZSAnVyc6CXJldHVybiBPV19PVzsKKwkJICAgIGNhc2UgJ1knOglyZXR1cm4gSkFaUjsKKwkJICAgIGNhc2UgJ2AnOglyZXR1cm4gRl9QQ047CisJCSAgICBjYXNlICchJzoJcmV0dXJuIEZfRVhDTDsKKwkJICAgIGNhc2UgJ0AnOglyZXR1cm4gRl9DT01NQTsKKwkJICAgIGNhc2UgJyMnOglyZXR1cm4gRl9ESVZJREU7CisJCSAgICBjYXNlICckJzoJcmV0dXJuIEZfQ1VSUkVOQ1k7CisJCSAgICBjYXNlICclJzoJcmV0dXJuIEZfUEVSQ0VOVDsKKwkJICAgIGNhc2UgJ14nOglyZXR1cm4gRl9NVUw7CisJCSAgICBjYXNlICcmJzoJcmV0dXJuIEZfQkNPTU1BOworCQkgICAgY2FzZSAnKic6CXJldHVybiBGX1NUQVI7CisJCSAgICBjYXNlICcoJzoJcmV0dXJuIEZfTFBBUkVOVDsKKwkJICAgIGNhc2UgJyknOglyZXR1cm4gRl9SUEFSRU5UOworCQkgICAgY2FzZSAnLSc6CXJldHVybiBGX01JTlVTOworCQkgICAgY2FzZSAnXyc6CXJldHVybiBGX1VOREVSTElORTsKKwkJICAgIGNhc2UgJz0nOglyZXR1cm4gRl9FUVVBTFM7CisJCSAgICBjYXNlICcrJzoJcmV0dXJuIEZfUExVUzsKKwkJICAgIGNhc2UgJ1xcJzoJcmV0dXJuIEZfQlNMQVNIOworCQkgICAgY2FzZSAnfCc6CXJldHVybiBGX1BJUEU7CisJCSAgICBjYXNlICc6JzoJcmV0dXJuIEZfRENPTE9OOworCQkgICAgY2FzZSAnIic6CXJldHVybiBGX1NFTUlDT0xPTjsKKwkJICAgIGNhc2UgJy4nOglyZXR1cm4gRl9QRVJJT0Q7CisJCSAgICBjYXNlICcvJzoJcmV0dXJuIEZfU0xBU0g7CisJCSAgICBjYXNlICc8JzoJcmV0dXJuIEZfTEVTUzsKKwkJICAgIGNhc2UgJz4nOglyZXR1cm4gRl9HUkVBVEVSOworCQkgICAgY2FzZSAnPyc6CXJldHVybiBGX1FVRVNUSU9OOworCQkgICAgY2FzZSAnICc6CXJldHVybiBGX0JMQU5LOworCQl9CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmICghcF9yaSkKKwkJZGVjX2N1cnNvcigpOworCisJICAgIHN3aXRjaCAoKHRlbXBjID0gZ2NoYXJfY3Vyc29yKCkpKQorCSAgICB7CisJCWNhc2UgX0JFOgorCQljYXNlIF9QRToKKwkJY2FzZSBfVEU6CisJCWNhc2UgX1NFOgorCQljYXNlIF9KSU06CisJCWNhc2UgX0NIRToKKwkJY2FzZSBfSEVfSjoKKwkJY2FzZSBfWEU6CisJCWNhc2UgX1NJTjoKKwkJY2FzZSBfU0hJTjoKKwkJY2FzZSBfU0FEOgorCQljYXNlIF9aQUQ6CisJCWNhc2UgX0ZFOgorCQljYXNlIF9HSEFGOgorCQljYXNlIF9LQUY6CisJCWNhc2UgX0tBRl9IOgorCQljYXNlIF9HQUY6CisJCWNhc2UgX0xBTToKKwkJY2FzZSBfTUlNOgorCQljYXNlIF9OT09OOgorCQljYXNlIF9IRToKKwkJY2FzZSBfSEVfOgorCQljYXNlIF9UQToKKwkJY2FzZSBfWkE6CisJCQlwdXRfY3Vycl9hbmRfbF90b19YKHRvRl9UeUEodGVtcGMpKTsKKwkJCWJyZWFrOworCQljYXNlIF9BWU46CisJCWNhc2UgX0FZTl86CisKKwkJCWlmICghcF9yaSkKKwkJCSAgICBpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sKQorCQkJICAgIHsKKwkJCQlwdXRfY3Vycl9hbmRfbF90b19YKEFZTik7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCisJCQlpZiAocF9yaSkKKwkJCSAgICBpbmNfY3Vyc29yKCk7CisJCQllbHNlCisJCQkgICAgZGVjX2N1cnNvcigpOworCisJCQlpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfRURULCBBVF9DVVJTT1IpKQorCQkJICAgIHRlbXBjID0gQVlOXzsKKwkJCWVsc2UKKwkJCSAgICB0ZW1wYyA9IEFZTjsKKworCQkJaWYgKHBfcmkpCisJCQkgICAgZGVjX2N1cnNvcigpOworCQkJZWxzZQorCQkJICAgIGluY19jdXJzb3IoKTsKKworCQkJcHV0X2N1cnJfYW5kX2xfdG9fWCh0ZW1wYyk7CisKKwkJCWJyZWFrOworCQljYXNlIF9HSEFZTjoKKwkJY2FzZSBfR0hBWU5fOgorCisJCQlpZiAoIXBfcmkpCisJCQkgICAgaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkJCSAgICB7CisJCQkJcHV0X2N1cnJfYW5kX2xfdG9fWChHSEFZTik7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCisJCQlpZiAocF9yaSkKKwkJCSAgICBpbmNfY3Vyc29yKCk7CisJCQllbHNlCisJCQkgICAgZGVjX2N1cnNvcigpOworCisJCQlpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfRURULCBBVF9DVVJTT1IpKQorCQkJICAgIHRlbXBjID0gR0hBWU5fOworCQkJZWxzZQorCQkJICAgIHRlbXBjID0gR0hBWU47CisKKwkJCWlmIChwX3JpKQorCQkJICAgIGRlY19jdXJzb3IoKTsKKwkJCWVsc2UKKwkJCSAgICBpbmNfY3Vyc29yKCk7CisKKwkJCXB1dF9jdXJyX2FuZF9sX3RvX1godGVtcGMpOworCQkJYnJlYWs7CisJCWNhc2UgX1lFOgorCQljYXNlIF9JRToKKwkJY2FzZSBfWUVFOgorCQkJaWYgKCFwX3JpKQorCQkJICAgIGlmICghY3Vyd2luLT53X2N1cnNvci5jb2wpCisJCQkgICAgeworCQkJCXB1dF9jdXJyX2FuZF9sX3RvX1goKHRlbXBjID09IF9ZRSA/IFlFIDoKKwkJCQkJICAgICh0ZW1wYyA9PSBfSUUgPyBJRSA6IFlFRSkpKTsKKwkJCQlicmVhazsKKwkJCSAgICB9CisKKwkJCWlmIChwX3JpKQorCQkJICAgIGluY19jdXJzb3IoKTsKKwkJCWVsc2UKKwkJCSAgICBkZWNfY3Vyc29yKCk7CisKKwkJCWlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19FRFQsIEFUX0NVUlNPUikpCisJCQkJdGVtcGMgPSAodGVtcGMgPT0gX1lFID8gWUVfIDoKKwkJCQkgICAgKHRlbXBjID09IF9JRSA/IElFXyA6IFlFRV8pKTsKKwkJCWVsc2UKKwkJCQl0ZW1wYyA9ICh0ZW1wYyA9PSBfWUUgPyBZRSA6CisJCQkJICAgICh0ZW1wYyA9PSBfSUUgPyBJRSA6IFlFRSkpOworCisJCQlpZiAocF9yaSkKKwkJCSAgICBkZWNfY3Vyc29yKCk7CisJCQllbHNlCisJCQkgICAgaW5jX2N1cnNvcigpOworCisJCQlwdXRfY3Vycl9hbmRfbF90b19YKHRlbXBjKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFwX3JpKQorCQkgICAgaW5jX2N1cnNvcigpOworCisJCXRlbXBjID0gMDsKKworCQlzd2l0Y2ggKGMpCisJCXsKKwkJICAgIGNhc2UgJzAnOglyZXR1cm4gRkFSU0lfMDsKKwkJICAgIGNhc2UgJzEnOglyZXR1cm4gRkFSU0lfMTsKKwkJICAgIGNhc2UgJzInOglyZXR1cm4gRkFSU0lfMjsKKwkJICAgIGNhc2UgJzMnOglyZXR1cm4gRkFSU0lfMzsKKwkJICAgIGNhc2UgJzQnOglyZXR1cm4gRkFSU0lfNDsKKwkJICAgIGNhc2UgJzUnOglyZXR1cm4gRkFSU0lfNTsKKwkJICAgIGNhc2UgJzYnOglyZXR1cm4gRkFSU0lfNjsKKwkJICAgIGNhc2UgJzcnOglyZXR1cm4gRkFSU0lfNzsKKwkJICAgIGNhc2UgJzgnOglyZXR1cm4gRkFSU0lfODsKKwkJICAgIGNhc2UgJzknOglyZXR1cm4gRkFSU0lfOTsKKwkJICAgIGNhc2UgJ0InOglyZXR1cm4gRl9QU1A7CisJCSAgICBjYXNlICdFJzoJcmV0dXJuIEpBWlJfTjsKKwkJICAgIGNhc2UgJ0YnOglyZXR1cm4gQUxFRl9EX0g7CisJCSAgICBjYXNlICdIJzoJcmV0dXJuIEFMRUZfQTsKKwkJICAgIGNhc2UgJ0knOglyZXR1cm4gVEFTSDsKKwkJICAgIGNhc2UgJ0snOglyZXR1cm4gRl9MUVVPVDsKKwkJICAgIGNhc2UgJ0wnOglyZXR1cm4gRl9SUVVPVDsKKwkJICAgIGNhc2UgJ00nOglyZXR1cm4gSEFNWkU7CisJCSAgICBjYXNlICdPJzoJcmV0dXJuICdbJzsKKwkJICAgIGNhc2UgJ1AnOglyZXR1cm4gJ10nOworCQkgICAgY2FzZSAnUSc6CXJldHVybiBPTzsKKwkJICAgIGNhc2UgJ1InOglyZXR1cm4gTUFEX047CisJCSAgICBjYXNlICdUJzoJcmV0dXJuIE9XOworCQkgICAgY2FzZSAnVSc6CXJldHVybiBNQUQ7CisJCSAgICBjYXNlICdXJzoJcmV0dXJuIE9XX09XOworCQkgICAgY2FzZSAnWSc6CXJldHVybiBKQVpSOworCQkgICAgY2FzZSAnYCc6CXJldHVybiBGX1BDTjsKKwkJICAgIGNhc2UgJyEnOglyZXR1cm4gRl9FWENMOworCQkgICAgY2FzZSAnQCc6CXJldHVybiBGX0NPTU1BOworCQkgICAgY2FzZSAnIyc6CXJldHVybiBGX0RJVklERTsKKwkJICAgIGNhc2UgJyQnOglyZXR1cm4gRl9DVVJSRU5DWTsKKwkJICAgIGNhc2UgJyUnOglyZXR1cm4gRl9QRVJDRU5UOworCQkgICAgY2FzZSAnXic6CXJldHVybiBGX01VTDsKKwkJICAgIGNhc2UgJyYnOglyZXR1cm4gRl9CQ09NTUE7CisJCSAgICBjYXNlICcqJzoJcmV0dXJuIEZfU1RBUjsKKwkJICAgIGNhc2UgJygnOglyZXR1cm4gRl9MUEFSRU5UOworCQkgICAgY2FzZSAnKSc6CXJldHVybiBGX1JQQVJFTlQ7CisJCSAgICBjYXNlICctJzoJcmV0dXJuIEZfTUlOVVM7CisJCSAgICBjYXNlICdfJzoJcmV0dXJuIEZfVU5ERVJMSU5FOworCQkgICAgY2FzZSAnPSc6CXJldHVybiBGX0VRVUFMUzsKKwkJICAgIGNhc2UgJysnOglyZXR1cm4gRl9QTFVTOworCQkgICAgY2FzZSAnXFwnOglyZXR1cm4gRl9CU0xBU0g7CisJCSAgICBjYXNlICd8JzoJcmV0dXJuIEZfUElQRTsKKwkJICAgIGNhc2UgJzonOglyZXR1cm4gRl9EQ09MT047CisJCSAgICBjYXNlICciJzoJcmV0dXJuIEZfU0VNSUNPTE9OOworCQkgICAgY2FzZSAnLic6CXJldHVybiBGX1BFUklPRDsKKwkJICAgIGNhc2UgJy8nOglyZXR1cm4gRl9TTEFTSDsKKwkJICAgIGNhc2UgJzwnOglyZXR1cm4gRl9MRVNTOworCQkgICAgY2FzZSAnPic6CXJldHVybiBGX0dSRUFURVI7CisJCSAgICBjYXNlICc/JzoJcmV0dXJuIEZfUVVFU1RJT047CisJCSAgICBjYXNlICcgJzoJcmV0dXJuIEZfQkxBTks7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlICdhJzoKKwkJdGVtcGMgPSBfU0hJTjsKKwkgICAgYnJlYWs7CisJY2FzZSAnQSc6CisJCXRlbXBjID0gV0FXX0g7CisJICAgIGJyZWFrOworCWNhc2UgJ2InOgorCQl0ZW1wYyA9IFpBTDsKKwkgICAgYnJlYWs7CisJY2FzZSAnYyc6CisJCXRlbXBjID0gWkU7CisJICAgIGJyZWFrOworCWNhc2UgJ0MnOgorCQl0ZW1wYyA9IEpFOworCSAgICBicmVhazsKKwljYXNlICdkJzoKKwkJdGVtcGMgPSBfWUU7CisJICAgIGJyZWFrOworCWNhc2UgJ0QnOgorCQl0ZW1wYyA9IF9ZRUU7CisJICAgIGJyZWFrOworCWNhc2UgJ2UnOgorCQl0ZW1wYyA9IF9TRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnZic6CisJCXRlbXBjID0gX0JFOworCSAgICBicmVhazsKKwljYXNlICdnJzoKKwkJdGVtcGMgPSBfTEFNOworCSAgICBicmVhazsKKwljYXNlICdHJzoKKwkgICAgaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCAgJiYgIFNUUkxFTihtbF9nZXRfY3VybGluZSgpKSkKKwkJeworCisJCWlmIChnY2hhcl9jdXJzb3IoKSA9PSBfTEFNKQorCQkgICAgY2hnX2NfdG9YX29yWCAoKTsKKwkJZWxzZQorCQkgICAgaWYgKHBfcmkpCisJCQljaGdfY190b19YX29yX1ggKCk7CisJICAgIH0KKworCSAgICBpZiAoIXBfcmkpCisJCWlmICghY3Vyd2luLT53X2N1cnNvci5jb2wpCisJCSAgICByZXR1cm4gQUxFRl9VX0g7CisKKwkgICAgaWYgKCFwX3JpKQorCQlkZWNfY3Vyc29yKCk7CisKKwkgICAgaWYgKGdjaGFyX2N1cnNvcigpID09IF9MQU0pCisJICAgIHsKKwkJY2hnX2NfdG9YX29yWCAoKTsKKwkJY2hnX2xfdG9Yb3JfWCAoKTsKKwkJICAgIHRlbXBjID0gQUxFRl9VX0g7CisJICAgIH0KKwkgICAgZWxzZQorCQlpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfRURULCBBVF9DVVJTT1IpKQorCQl7CisJCQl0ZW1wYyA9IEFMRUZfVV9IXzsKKwkJICAgIGNoZ19sX3RvWG9yX1ggKCk7CisJCX0KKwkJZWxzZQorCQkJdGVtcGMgPSBBTEVGX1VfSDsKKworCSAgICBpZiAoIXBfcmkpCisJCWluY19jdXJzb3IoKTsKKworCSAgICByZXR1cm4gdGVtcGM7CisJY2FzZSAnaCc6CisJICAgIGlmICghY3Vyd2luLT53X2N1cnNvci5jb2wgICYmICBTVFJMRU4obWxfZ2V0X2N1cmxpbmUoKSkpCisJCXsKKwkJaWYgKHBfcmkpCisJCSAgICBjaGdfY190b19YX29yX1ggKCk7CisKKwkgICAgfQorCisJICAgIGlmICghcF9yaSkKKwkJaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkJICAgIHJldHVybiBBTEVGOworCisJICAgIGlmICghcF9yaSkKKwkJZGVjX2N1cnNvcigpOworCisJICAgIGlmIChnY2hhcl9jdXJzb3IoKSA9PSBfTEFNKQorCSAgICB7CisJCWNoZ19sX3RvWG9yX1goKTsKKwkJZGVsX2NoYXIoRkFMU0UpOworCQlBcHBlbmRDaGFyVG9SZWRvYnVmZihLX0JTKTsKKworCQlpZiAoIXBfcmkpCisJCSAgICBkZWNfY3Vyc29yKCk7CisKKwkJICAgIHRlbXBjID0gTEE7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19FRFQsIEFUX0NVUlNPUikpCisJCXsKKwkJCXRlbXBjID0gQUxFRl87CisJCSAgICBjaGdfbF90b1hvcl9YICgpOworCQl9CisJCWVsc2UKKwkJCXRlbXBjID0gQUxFRjsKKwkgICAgfQorCisJICAgIGlmICghcF9yaSkKKwkJaW5jX2N1cnNvcigpOworCisJICAgIHJldHVybiB0ZW1wYzsKKwljYXNlICdpJzoKKwkgICAgaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCAgJiYgIFNUUkxFTihtbF9nZXRfY3VybGluZSgpKSkKKwkJeworCQlpZiAoIXBfcmkgJiYgIUZfaXNfVHlFKHRlbXBjKSkKKwkJICAgIGNoZ19jX3RvX1hfb3JYXyAoKTsKKwkJaWYgKHBfcmkpCisJCSAgICBjaGdfY190b19YX29yX1ggKCk7CisKKwkgICAgfQorCisJICAgIGlmICghcF9yaSAmJiAhY3Vyd2luLT53X2N1cnNvci5jb2wpCisJCXJldHVybiBfSEU7CisKKwkgICAgaWYgKCFwX3JpKQorCQlkZWNfY3Vyc29yKCk7CisKKwkgICAgaWYgKEZfaXNfVHlCX1R5Q19UeUQoU1JDX0VEVCwgQVRfQ1VSU09SKSkKKwkJICAgIHRlbXBjID0gX0hFXzsKKwkgICAgZWxzZQorCQkgICAgdGVtcGMgPSBfSEU7CisKKwkgICAgaWYgKCFwX3JpKQorCQlpbmNfY3Vyc29yKCk7CisJICAgIGJyZWFrOworCWNhc2UgJ2onOgorCQl0ZW1wYyA9IF9URTsKKwkgICAgYnJlYWs7CisJY2FzZSAnSic6CisJICAgIGlmICghY3Vyd2luLT53X2N1cnNvci5jb2wgICYmICBTVFJMRU4obWxfZ2V0X2N1cmxpbmUoKSkpCisJCXsKKwkJaWYgKHBfcmkpCisJCSAgICBjaGdfY190b19YX29yX1ggKCk7CisKKwkgICAgfQorCisJICAgIGlmICghcF9yaSkKKwkJaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkJICAgIHJldHVybiBURUU7CisKKwkgICAgaWYgKCFwX3JpKQorCQlkZWNfY3Vyc29yKCk7CisKKwkgICAgaWYgKEZfaXNfVHlCX1R5Q19UeUQoU1JDX0VEVCwgQVRfQ1VSU09SKSkKKwkgICAgeworCQkgICAgdGVtcGMgPSBURUVfOworCQljaGdfbF90b1hvcl9YICgpOworCSAgICB9CisJICAgIGVsc2UKKwkJCXRlbXBjID0gVEVFOworCisJICAgIGlmICghcF9yaSkKKwkJaW5jX2N1cnNvcigpOworCisJICAgIHJldHVybiB0ZW1wYzsKKwljYXNlICdrJzoKKwkJdGVtcGMgPSBfTk9PTjsKKwkgICAgYnJlYWs7CisJY2FzZSAnbCc6CisJCXRlbXBjID0gX01JTTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbSc6CisJCXRlbXBjID0gX1BFOworCSAgICBicmVhazsKKwljYXNlICduJzoKKwljYXNlICdOJzoKKwkJdGVtcGMgPSBEQUw7CisJICAgIGJyZWFrOworCWNhc2UgJ28nOgorCQl0ZW1wYyA9IF9YRTsKKwkgICAgYnJlYWs7CisJY2FzZSAncCc6CisJCXRlbXBjID0gX0hFX0o7CisJICAgIGJyZWFrOworCWNhc2UgJ3EnOgorCQl0ZW1wYyA9IF9aQUQ7CisJICAgIGJyZWFrOworCWNhc2UgJ3InOgorCQl0ZW1wYyA9IF9HSEFGOworCSAgICBicmVhazsKKwljYXNlICdzJzoKKwkJdGVtcGMgPSBfU0lOOworCSAgICBicmVhazsKKwljYXNlICdTJzoKKwkJdGVtcGMgPSBfSUU7CisJICAgIGJyZWFrOworCWNhc2UgJ3QnOgorCQl0ZW1wYyA9IF9GRTsKKwkgICAgYnJlYWs7CisJY2FzZSAndSc6CisJCWlmICghY3Vyd2luLT53X2N1cnNvci5jb2wgICYmICBTVFJMRU4obWxfZ2V0X2N1cmxpbmUoKSkpCisJCXsKKwkJICAgIGlmICghcF9yaSAmJiAhRl9pc19UeUUodGVtcGMpKQorCQkJY2hnX2NfdG9fWF9vclhfICgpOworCQkgICAgaWYgKHBfcmkpCisJCQljaGdfY190b19YX29yX1ggKCk7CisKKwkJfQorCisJCWlmICghcF9yaSAmJiAhY3Vyd2luLT53X2N1cnNvci5jb2wpCisJCSAgICByZXR1cm4gX0FZTjsKKworCQlpZiAoIXBfcmkpCisJCSAgICBkZWNfY3Vyc29yKCk7CisKKwkJaWYgKEZfaXNfVHlCX1R5Q19UeUQoU1JDX0VEVCwgQVRfQ1VSU09SKSkKKwkJICAgIHRlbXBjID0gX0FZTl87CisJCWVsc2UKKwkJICAgIHRlbXBjID0gX0FZTjsKKworCQlpZiAoIXBfcmkpCisJCSAgICBpbmNfY3Vyc29yKCk7CisJICAgIGJyZWFrOworCWNhc2UgJ3YnOgorCWNhc2UgJ1YnOgorCQl0ZW1wYyA9IFJFOworCSAgICBicmVhazsKKwljYXNlICd3JzoKKwkJdGVtcGMgPSBfU0FEOworCSAgICBicmVhazsKKwljYXNlICd4JzoKKwljYXNlICdYJzoKKwkJdGVtcGMgPSBfVEE7CisJICAgIGJyZWFrOworCWNhc2UgJ3knOgorCSAgICBpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sICAmJiAgU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpKQorCQl7CisJCWlmICghcF9yaSAmJiAhRl9pc19UeUUodGVtcGMpKQorCQkgICAgY2hnX2NfdG9fWF9vclhfICgpOworCQlpZiAocF9yaSkKKwkJICAgIGNoZ19jX3RvX1hfb3JfWCAoKTsKKworCSAgICB9CisKKwkgICAgaWYgKCFwX3JpICYmICFjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkJcmV0dXJuIF9HSEFZTjsKKworCSAgICBpZiAoIXBfcmkpCisJCWRlY19jdXJzb3IoKTsKKworCSAgICBpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfRURULCBBVF9DVVJTT1IpKQorCQl0ZW1wYyA9IF9HSEFZTl87CisJICAgIGVsc2UKKwkJdGVtcGMgPSBfR0hBWU47CisKKwkgICAgaWYgKCFwX3JpKQorCQlpbmNfY3Vyc29yKCk7CisKKwkgICAgYnJlYWs7CisJY2FzZSAneic6CisJCXRlbXBjID0gX1pBOworCSAgICBicmVhazsKKwljYXNlICdaJzoKKwkJdGVtcGMgPSBfS0FGX0g7CisJICAgIGJyZWFrOworCWNhc2UgJzsnOgorCQl0ZW1wYyA9IF9LQUY7CisJICAgIGJyZWFrOworCWNhc2UgJ1wnJzoKKwkJdGVtcGMgPSBfR0FGOworCSAgICBicmVhazsKKwljYXNlICcsJzoKKwkJdGVtcGMgPSBXQVc7CisJICAgIGJyZWFrOworCWNhc2UgJ1snOgorCQl0ZW1wYyA9IF9KSU07CisJICAgIGJyZWFrOworCWNhc2UgJ10nOgorCQl0ZW1wYyA9IF9DSEU7CisJICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICgoRl9pc2FscGhhKHRlbXBjKSB8fCBGX2lzZGlnaXQodGVtcGMpKSkKKyAgICB7CisJaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCAgJiYgIFNUUkxFTihtbF9nZXRfY3VybGluZSgpKSkKKwkgICAgeworCSAgICBpZiAoIXBfcmkgJiYgIUZfaXNfVHlFKHRlbXBjKSkKKwkJY2hnX2NfdG9fWF9vclhfICgpOworCSAgICBpZiAocF9yaSkKKwkJY2hnX2NfdG9fWF9vcl9YICgpOworCX0KKworCWlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwl7CisJICAgIGlmICghcF9yaSkKKwkJZGVjX2N1cnNvcigpOworCisJICAgIGlmIChGX2lzX1R5RSh0ZW1wYykpCisJCWNoZ19sX3RvWG9yX1ggKCk7CisJICAgIGVsc2UKKwkJY2hnX2xfdG9fWF9vclhfICgpOworCisJICAgIGlmICghcF9yaSkKKwkJaW5jX2N1cnNvcigpOworCX0KKyAgICB9CisgICAgaWYgKHRlbXBjKQorCXJldHVybiB0ZW1wYzsKKyAgICByZXR1cm4gYzsKK30KKworLyoKKyoqIENvbnZlcnQgYSBub25lIGxlYWRpbmcgRmFyc2kgY2hhciBpbnRvIGEgbGVhZGluZyB0eXBlLgorKi8KKyAgICBzdGF0aWMgaW50Cit0b0ZfbGVhZGluZyhjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBzd2l0Y2ggKGMpCisgICAgeworCWNhc2UgQUxFRl86CXJldHVybiBBTEVGOworCWNhc2UgQUxFRl9VX0hfOgkgICAgcmV0dXJuIEFMRUZfVV9IOworCWNhc2UgQkU6ICAgIHJldHVybiBfQkU7CisJY2FzZSBQRTogICAgcmV0dXJuIF9QRTsKKwljYXNlIFRFOiAgICByZXR1cm4gX1RFOworCWNhc2UgU0U6ICAgIHJldHVybiBfU0U7CisJY2FzZSBKSU06ICAgcmV0dXJuIF9KSU07CisJY2FzZSBDSEU6ICAgcmV0dXJuIF9DSEU7CisJY2FzZSBIRV9KOiAgcmV0dXJuIF9IRV9KOworCWNhc2UgWEU6ICAgIHJldHVybiBfWEU7CisJY2FzZSBTSU46ICAgcmV0dXJuIF9TSU47CisJY2FzZSBTSElOOiAgcmV0dXJuIF9TSElOOworCWNhc2UgU0FEOiAgIHJldHVybiBfU0FEOworCWNhc2UgWkFEOiAgIHJldHVybiBfWkFEOworCisJY2FzZSBBWU46CisJY2FzZSBBWU5fOgorCWNhc2UgX0FZTl86IHJldHVybiBfQVlOOworCisJY2FzZSBHSEFZTjoKKwljYXNlIEdIQVlOXzoKKwljYXNlIF9HSEFZTl86CXJldHVybiBfR0hBWU47CisKKwljYXNlIEZFOiAgICByZXR1cm4gX0ZFOworCWNhc2UgR0hBRjogIHJldHVybiBfR0hBRjsKKwljYXNlIEtBRjogICByZXR1cm4gX0tBRjsKKwljYXNlIEdBRjogICByZXR1cm4gX0dBRjsKKwljYXNlIExBTTogICByZXR1cm4gX0xBTTsKKwljYXNlIE1JTTogICByZXR1cm4gX01JTTsKKwljYXNlIE5PT046ICByZXR1cm4gX05PT047CisKKwljYXNlIF9IRV86CisJY2FzZSBGX0hFOglyZXR1cm4gX0hFOworCisJY2FzZSBZRToKKwljYXNlIFlFXzoJcmV0dXJuIF9ZRTsKKworCWNhc2UgSUVfOgorCWNhc2UgSUU6CXJldHVybiBfSUU7CisKKwljYXNlIFlFRToKKwljYXNlIFlFRV86CXJldHVybiBfWUVFOworICAgIH0KKyAgICByZXR1cm4gYzsKK30KKworLyoKKyoqIENvbnZlcnQgYSBnaXZlbiBGYXJzaSBjaGFyIGludG8gcmlnaHQgam9pbmluZyB0eXBlLgorKi8KKyAgICBzdGF0aWMgaW50Cit0b0ZfUmpvaW4oYykKKyAgICBpbnQJICAgIGM7Cit7CisgICAgc3dpdGNoIChjKQorICAgIHsKKwljYXNlIEFMRUY6ICByZXR1cm4gQUxFRl87CisJY2FzZSBBTEVGX1VfSDoJcmV0dXJuIEFMRUZfVV9IXzsKKwljYXNlIEJFOiAgICByZXR1cm4gX0JFOworCWNhc2UgUEU6ICAgIHJldHVybiBfUEU7CisJY2FzZSBURTogICAgcmV0dXJuIF9URTsKKwljYXNlIFNFOiAgICByZXR1cm4gX1NFOworCWNhc2UgSklNOiAgIHJldHVybiBfSklNOworCWNhc2UgQ0hFOiAgIHJldHVybiBfQ0hFOworCWNhc2UgSEVfSjogIHJldHVybiBfSEVfSjsKKwljYXNlIFhFOiAgICByZXR1cm4gX1hFOworCWNhc2UgU0lOOiAgIHJldHVybiBfU0lOOworCWNhc2UgU0hJTjogIHJldHVybiBfU0hJTjsKKwljYXNlIFNBRDogICByZXR1cm4gX1NBRDsKKwljYXNlIFpBRDogICByZXR1cm4gX1pBRDsKKworCWNhc2UgQVlOOgorCWNhc2UgQVlOXzoKKwljYXNlIF9BWU46ICByZXR1cm4gX0FZTl87CisKKwljYXNlIEdIQVlOOgorCWNhc2UgR0hBWU5fOgorCWNhc2UgX0dIQVlOXzoJcmV0dXJuIF9HSEFZTl87CisKKwljYXNlIEZFOiAgICByZXR1cm4gX0ZFOworCWNhc2UgR0hBRjogIHJldHVybiBfR0hBRjsKKwljYXNlIEtBRjogICByZXR1cm4gX0tBRjsKKwljYXNlIEdBRjogICByZXR1cm4gX0dBRjsKKwljYXNlIExBTTogICByZXR1cm4gX0xBTTsKKwljYXNlIE1JTTogICByZXR1cm4gX01JTTsKKwljYXNlIE5PT046ICByZXR1cm4gX05PT047CisKKwljYXNlIF9IRToKKwljYXNlIEZfSEU6CXJldHVybiBfSEVfOworCisJY2FzZSBZRToKKwljYXNlIFlFXzoJcmV0dXJuIF9ZRTsKKworCWNhc2UgSUVfOgorCWNhc2UgSUU6CXJldHVybiBfSUU7CisKKwljYXNlIFRFRToJcmV0dXJuIFRFRV87CisKKwljYXNlIFlFRToKKwljYXNlIFlFRV86CXJldHVybiBfWUVFOworICAgIH0KKyAgICByZXR1cm4gYzsKK30KKworLyoKKyoqIENhbiBhIGdpdmVuIEZhcnNpIGNoYXJhY3RlciBqb2luIHZpYSBpdHMgbGVmdCBlZGouCisqLworICAgIHN0YXRpYyBpbnQKK2NhbkZfTGpvaW4oYykKKyAgICBpbnQJYzsKK3sKKyAgICBzd2l0Y2ggKGMpCisgICAgeworCWNhc2UgX0JFOgorCWNhc2UgQkU6CisJY2FzZSBQRToKKwljYXNlIF9QRToKKwljYXNlIFRFOgorCWNhc2UgX1RFOgorCWNhc2UgU0U6CisJY2FzZSBfU0U6CisJY2FzZSBKSU06CisJY2FzZSBfSklNOgorCWNhc2UgQ0hFOgorCWNhc2UgX0NIRToKKwljYXNlIEhFX0o6CisJY2FzZSBfSEVfSjoKKwljYXNlIFhFOgorCWNhc2UgX1hFOgorCWNhc2UgU0lOOgorCWNhc2UgX1NJTjoKKwljYXNlIFNISU46CisJY2FzZSBfU0hJTjoKKwljYXNlIFNBRDoKKwljYXNlIF9TQUQ6CisJY2FzZSBaQUQ6CisJY2FzZSBfWkFEOgorCWNhc2UgX1RBOgorCWNhc2UgX1pBOgorCWNhc2UgQVlOOgorCWNhc2UgX0FZTjoKKwljYXNlIF9BWU5fOgorCWNhc2UgQVlOXzoKKwljYXNlIEdIQVlOOgorCWNhc2UgR0hBWU5fOgorCWNhc2UgX0dIQVlOXzoKKwljYXNlIF9HSEFZTjoKKwljYXNlIEZFOgorCWNhc2UgX0ZFOgorCWNhc2UgR0hBRjoKKwljYXNlIF9HSEFGOgorCWNhc2UgX0tBRl9IOgorCWNhc2UgS0FGOgorCWNhc2UgX0tBRjoKKwljYXNlIEdBRjoKKwljYXNlIF9HQUY6CisJY2FzZSBMQU06CisJY2FzZSBfTEFNOgorCWNhc2UgTUlNOgorCWNhc2UgX01JTToKKwljYXNlIE5PT046CisJY2FzZSBfTk9PTjoKKwljYXNlIElFOgorCWNhc2UgX0lFOgorCWNhc2UgSUVfOgorCWNhc2UgWUU6CisJY2FzZSBfWUU6CisJY2FzZSBZRV86CisJY2FzZSBZRUU6CisJY2FzZSBfWUVFOgorCWNhc2UgWUVFXzoKKwljYXNlIEZfSEU6CisJY2FzZSBfSEU6CisJY2FzZSBfSEVfOgorCSAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorKiogQ2FuIGEgZ2l2ZW4gRmFyc2kgY2hhcmFjdGVyIGpvaW4gdmlhIGl0cyByaWdodCBlZGouCisqLworICAgIHN0YXRpYyBpbnQKK2NhbkZfUmpvaW4oYykKKyAgICBpbnQJICAgIGM7Cit7CisgICAgc3dpdGNoIChjKQorICAgIHsKKwljYXNlIEFMRUY6CisJY2FzZSBBTEVGXzoKKwljYXNlIEFMRUZfVV9IOgorCWNhc2UgQUxFRl9VX0hfOgorCWNhc2UgREFMOgorCWNhc2UgWkFMOgorCWNhc2UgUkU6CisJY2FzZSBKRToKKwljYXNlIFpFOgorCWNhc2UgVEVFOgorCWNhc2UgVEVFXzoKKwljYXNlIFdBVzoKKwljYXNlIFdBV19IOgorCSAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICByZXR1cm4gY2FuRl9Mam9pbihjKTsKKworfQorCisvKgorKiogaXMgYSBnaXZlbiBGYXJzaSBjaGFyYWN0ZXIgYSB0ZXJtaW5hdGluZyB0eXBlLgorKi8KKyAgICBzdGF0aWMgaW50CitGX2lzdGVybShjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBzd2l0Y2ggKGMpCisgICAgeworCWNhc2UgQUxFRjoKKwljYXNlIEFMRUZfOgorCWNhc2UgQUxFRl9VX0g6CisJY2FzZSBBTEVGX1VfSF86CisJY2FzZSBEQUw6CisJY2FzZSBaQUw6CisJY2FzZSBSRToKKwljYXNlIEpFOgorCWNhc2UgWkU6CisJY2FzZSBXQVc6CisJY2FzZSBXQVdfSDoKKwljYXNlIFRFRToKKwljYXNlIFRFRV86CisJICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyoqIENvbnZlcnQgdGhlIGdpdmVuIEZhcnNpIGNoYXJhY3RlciBpbnRvIGEgZW5kaW5nIHR5cGUgLgorKi8KKyAgICBzdGF0aWMgaW50Cit0b0ZfZW5kaW5nKGMpCisgICAgaW50CSAgICBjOworeworCisgICAgc3dpdGNoIChjKQorICAgIHsKKwljYXNlIF9CRToKKwkJcmV0dXJuIEJFOworCWNhc2UgX1BFOgorCQlyZXR1cm4gUEU7CisJY2FzZSBfVEU6CisJCXJldHVybiBURTsKKwljYXNlIF9TRToKKwkJcmV0dXJuIFNFOworCWNhc2UgX0pJTToKKwkJcmV0dXJuIEpJTTsKKwljYXNlIF9DSEU6CisJCXJldHVybiBDSEU7CisJY2FzZSBfSEVfSjoKKwkJcmV0dXJuIEhFX0o7CisJY2FzZSBfWEU6CisJCXJldHVybiBYRTsKKwljYXNlIF9TSU46CisJCXJldHVybiBTSU47CisJY2FzZSBfU0hJTjoKKwkJcmV0dXJuIFNISU47CisJY2FzZSBfU0FEOgorCQlyZXR1cm4gU0FEOworCWNhc2UgX1pBRDoKKwkJcmV0dXJuIFpBRDsKKwljYXNlIF9BWU46CisJCXJldHVybiBBWU47CisJY2FzZSBfQVlOXzoKKwkJcmV0dXJuIEFZTl87CisJY2FzZSBfR0hBWU46CisJCXJldHVybiBHSEFZTjsKKwljYXNlIF9HSEFZTl86CisJCXJldHVybiBHSEFZTl87CisJY2FzZSBfRkU6CisJCXJldHVybiBGRTsKKwljYXNlIF9HSEFGOgorCQlyZXR1cm4gR0hBRjsKKwljYXNlIF9LQUZfSDoKKwljYXNlIF9LQUY6CisJCXJldHVybiBLQUY7CisJY2FzZSBfR0FGOgorCQlyZXR1cm4gR0FGOworCWNhc2UgX0xBTToKKwkJcmV0dXJuIExBTTsKKwljYXNlIF9NSU06CisJCXJldHVybiBNSU07CisJY2FzZSBfTk9PTjoKKwkJcmV0dXJuIE5PT047CisJY2FzZSBfWUU6CisJCXJldHVybiBZRV87CisJY2FzZSBZRV86CisJCXJldHVybiBZRTsKKwljYXNlIF9ZRUU6CisJCXJldHVybiBZRUVfOworCWNhc2UgWUVFXzoKKwkJcmV0dXJuIFlFRTsKKwljYXNlIFRFRToKKwkJcmV0dXJuIFRFRV87CisJY2FzZSBfSUU6CisJCXJldHVybiBJRV87CisJY2FzZSBJRV86CisJCXJldHVybiBJRTsKKwljYXNlIF9IRToKKwljYXNlIF9IRV86CisJCXJldHVybiBGX0hFOworICAgIH0KKyAgICByZXR1cm4gYzsKK30KKworLyoKKyoqIENvbnZlcnQgdGhlIEZhcnNpIDMzNDIgc3RhbmRhcmQgaW50byBGYXJzaSBWSU0uCisqLworICAgIHZvaWQKK2NvbnZfdG9fcHZpbSgpCit7CisgICAgY2hhcl91CSpwdHI7CisgICAgaW50CQlsbnVtLCBsbGVuLCBpOworCisgICAgZm9yIChsbnVtID0gMTsgbG51bSA8PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsgKytsbnVtKQorICAgIHsKKwlwdHIgPSBtbF9nZXQoKGxpbmVucl9UKWxudW0pOworCisJbGxlbiA9IChpbnQpU1RSTEVOKHB0cik7CisKKwlmb3IgKCBpID0gMDsgaSA8IGxsZW4tMTsgaSsrKQorCXsKKwkgICAgaWYgKGNhbkZfTGpvaW4ocHRyW2ldKSAmJiBjYW5GX1Jqb2luKHB0cltpKzFdKSkKKwkgICAgeworCQlwdHJbaV0gPSB0b0ZfbGVhZGluZyhwdHJbaV0pOworCQkrK2k7CisKKwkJd2hpbGUoY2FuRl9Sam9pbihwdHJbaV0pICYmIChpIDwgbGxlbikpCisJCXsKKwkJICAgIHB0cltpXSA9IHRvRl9Sam9pbihwdHJbaV0pOworCQkgICAgaWYgKEZfaXN0ZXJtKHB0cltpXSkgfHwgIUZfaXNhbHBoYShwdHJbaV0pKQorCQkJYnJlYWs7CisJCSAgICArK2k7CisJCX0KKwkJaWYgKCFGX2lzYWxwaGEocHRyW2ldKSB8fCAhY2FuRl9Sam9pbihwdHJbaV0pKQorCQkgICAgcHRyW2ktMV0gPSB0b0ZfZW5kaW5nKHB0cltpLTFdKTsKKwkgICAgfQorCSAgICBlbHNlCisJCXB0cltpXSA9IHRvRl9UeUEocHRyW2ldKTsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb2xsb3dpbmcgbGluZXMgY29udGFpbnMgRmFyc2kgZW5jb2RlZCBjaGFyYWN0ZXIuCisgICAgICovCisKKyAgICBkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopIiVzL1wyMDJcMjMxL1wyMzIvZyIpOworICAgIGRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikiJXMvXDIwMVwyMzEvXDM3MFwzMzQvZyIpOworCisgICAgLyogQXNzdW1lIHRoZSBzY3JlZW4gaGFzIGJlZW4gbWVzc2VkIHVwOiBjbGVhciBpdCBhbmQgcmVkcmF3LiAqLworICAgIHJlZHJhd19sYXRlcihDTEVBUik7CisgICAgTVNHX0FUVFIoZmFyc2lfdGV4dF8xLCBobF9hdHRyKEhMRl9TKSk7Cit9CisKKy8qCisgKiBDb252ZXJ0IHRoZSBGYXJzaSBWSU0gaW50byBGYXJzaSAzMzQyIHN0YW5kYWQuCisgKi8KKyAgICB2b2lkCitjb252X3RvX3BzdGQoKQoreworICAgIGNoYXJfdQkqcHRyOworICAgIGludAkJbG51bSwgbGxlbiwgaTsKKworICAgIC8qCisgICAgICogRm9sbG93aW5nIGxpbmUgY29udGFpbnMgRmFyc2kgZW5jb2RlZCBjaGFyYWN0ZXIuCisgICAgICovCisKKyAgICBkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopIiVzL1wyMzIvXDIwMlwyMzEvZyIpOworCisgICAgZm9yIChsbnVtID0gMTsgbG51bSA8PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsgKytsbnVtKQorICAgIHsKKwlwdHIgPSBtbF9nZXQoKGxpbmVucl9UKWxudW0pOworCisJbGxlbiA9IChpbnQpU1RSTEVOKHB0cik7CisKKwlmb3IgKCBpID0gMDsgaSA8IGxsZW47IGkrKykKKwl7CisJICAgIHB0cltpXSA9IHRvRl9UeUEocHRyW2ldKTsKKworCX0KKyAgICB9CisKKyAgICAvKiBBc3N1bWUgdGhlIHNjcmVlbiBoYXMgYmVlbiBtZXNzZWQgdXA6IGNsZWFyIGl0IGFuZCByZWRyYXcuICovCisgICAgcmVkcmF3X2xhdGVyKENMRUFSKTsKKyAgICBNU0dfQVRUUihmYXJzaV90ZXh0XzIsIGhsX2F0dHIoSExGX1MpKTsKK30KKworLyoKKyAqIGxlZnQtcmlnaHQgc3dhcCB0aGUgY2hhcmFjdGVycyBpbiBidWZbbGVuXS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitscnN3YXBidWYoYnVmLCBsZW4pCisgICAgY2hhcl91CSpidWY7CisgICAgaW50CQlsZW47Cit7CisgICAgY2hhcl91CSpzLCAqZTsKKyAgICBpbnQJCWM7CisKKyAgICBzID0gYnVmOworICAgIGUgPSBidWYgKyBsZW4gLSAxOworCisgICAgd2hpbGUgKGUgPiBzKQorICAgIHsKKwljID0gKnM7CisJKnMgPSAqZTsKKwkqZSA9IGM7CisJKytzOworCS0tZTsKKyAgICB9Cit9CisKKy8qCisgKiBzd2FwIGFsbCB0aGUgY2hhcmFjdGVycyBpbiByZXZlcnNlIGRpcmVjdGlvbgorICovCisgICAgY2hhcl91ICoKK2xyc3dhcChpYnVmKQorICAgIGNoYXJfdQkqaWJ1ZjsKK3sKKyAgICBpZiAoaWJ1ZiAhPSBOVUxMICYmICppYnVmICE9IE5VTCkKKwlscnN3YXBidWYoaWJ1ZiwgKGludClTVFJMRU4oaWJ1ZikpOworICAgIHJldHVybiBpYnVmOworfQorCisvKgorICogc3dhcCBhbGwgdGhlIEZhcnNpIGNoYXJhY3RlcnMgaW4gcmV2ZXJzZSBkaXJlY3Rpb24KKyAqLworICAgIGNoYXJfdSAqCitsckZzd2FwKGNtZGJ1ZiwgbGVuKQorICAgIGNoYXJfdQkqY21kYnVmOworICAgIGludAkJbGVuOworeworICAgIGludAkJaSwgY250OworCisgICAgaWYgKGNtZGJ1ZiA9PSBOVUxMKQorCXJldHVybiBjbWRidWY7CisKKyAgICBpZiAobGVuID09IDAgJiYgKGxlbiA9IChpbnQpU1RSTEVOKGNtZGJ1ZikpID09IDApCisJcmV0dXJuIGNtZGJ1ZjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7CisJZm9yIChjbnQgPSAwOyBpICsgY250IDwgbGVuCisJCQkmJiAoRl9pc2FscGhhKGNtZGJ1ZltpICsgY250XSkKKwkJCSAgICB8fCBGX2lzZGlnaXQoY21kYnVmW2kgKyBjbnRdKQorCQkJICAgIHx8IGNtZGJ1ZltpICsgY250XSA9PSAnICcpOyArK2NudCkKKwkgICAgOworCisJbHJzd2FwYnVmKGNtZGJ1ZiArIGksIGNudCk7CisJaSArPSBjbnQ7CisgICAgfQorICAgIHJldHVybiBjbWRidWY7Cit9CisKKy8qCisgKiBSZXZlcnNlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBzZWFjaCBwYXRoIGFuZCBzdWJzdGl0dWRlIHNlY3Rpb24gYWNjb3JkaW5nbHkKKyAqLworICAgIGNoYXJfdSAqCitsckZfc3ViKGlidWYpCisgICAgY2hhcl91CSppYnVmOworeworICAgIGNoYXJfdQkqcCwgKmVwOworICAgIGludAkJaSwgY250OworCisgICAgcCA9IGlidWY7CisKKyAgICAvKiBGaW5kIHRoZSBib3VuZHJ5IG9mIHRoZSBzZWFyY2ggcGF0aCAqLworICAgIHdoaWxlICgoKHAgPSB2aW1fc3RyY2hyKCsrcCwgJy8nKSkgIT0gTlVMTCkgJiYgcFstMV0gPT0gJ1xcJykKKwk7CisKKyAgICBpZiAocCA9PSBOVUxMKQorCXJldHVybiBpYnVmOworCisgICAgLyogUmV2ZXJzZSB0aGUgRmFyc2kgY2hhcmFjdGVycyBpbiB0aGUgc2VhcmNoIHBhdGguICovCisgICAgbHJGc3dhcChpYnVmLCAoaW50KShwLWlidWYpKTsKKworICAgIC8qIE5vdyBmaW5kIHRoZSBib3VuZHJ5IG9mIHRoZSBzdWJzdGl0dXRlIHNlY3Rpb24gKi8KKyAgICBpZiAoKGVwID0gKGNoYXJfdSAqKXN0cnJjaHIoKGNoYXIgKikrK3AsICcvJykpICE9IE5VTEwpCisJY250ID0gKGludCkoZXAgLSBwKTsKKyAgICBlbHNlCisJY250ID0gKGludClTVFJMRU4ocCk7CisKKyAgICAvKiBSZXZlcnNlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBzdWJzdGl0dXRlIHNlY3Rpb24gYW5kIHRha2UgY2FyZSBvZiAnXCcgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgY250LTE7IGkrKykKKwlpZiAocFtpXSA9PSAnXFwnKQorCXsKKwkgICAgcFtpXSA9IHBbaSsxXSA7CisJICAgIHBbKytpXSA9ICdcXCc7CisJfQorCisgICAgbHJzd2FwYnVmKHAsIGNudCk7CisKKyAgICByZXR1cm4gaWJ1ZjsKK30KKworLyoKKyAqIE1hcCBGYXJzaSBrZXlib2FyZCB3aGVuIGluIGNtZF9ma21hcCBtb2RlLgorICovCisgICAgaW50CitjbWRsX2ZrbWFwKGMpCisgICAgaW50IGM7Cit7CisgICAgaW50CSAgICB0ZW1wYzsKKworICAgIHN3aXRjaCAoYykKKyAgICB7CisJY2FzZSAnMCc6CisJY2FzZSAnMSc6CisJY2FzZSAnMic6CisJY2FzZSAnMyc6CisJY2FzZSAnNCc6CisJY2FzZSAnNSc6CisJY2FzZSAnNic6CisJY2FzZSAnNyc6CisJY2FzZSAnOCc6CisJY2FzZSAnOSc6CisJY2FzZSAnYCc6CisJY2FzZSAnICc6CisJY2FzZSAnLic6CisJY2FzZSAnISc6CisJY2FzZSAnIic6CisJY2FzZSAnJCc6CisJY2FzZSAnJSc6CisJY2FzZSAnXic6CisJY2FzZSAnJic6CisJY2FzZSAnLyc6CisJY2FzZSAnKCc6CisJY2FzZSAnKSc6CisJY2FzZSAnPSc6CisJY2FzZSAnXFwnOgorCWNhc2UgJz8nOgorCWNhc2UgJysnOgorCWNhc2UgJy0nOgorCWNhc2UgJ18nOgorCWNhc2UgJyonOgorCWNhc2UgJzonOgorCWNhc2UgJyMnOgorCWNhc2UgJ34nOgorCWNhc2UgJ0AnOgorCWNhc2UgJzwnOgorCWNhc2UgJz4nOgorCWNhc2UgJ3snOgorCWNhc2UgJ30nOgorCWNhc2UgJ3wnOgorCWNhc2UgJ0InOgorCWNhc2UgJ0UnOgorCWNhc2UgJ0YnOgorCWNhc2UgJ0gnOgorCWNhc2UgJ0knOgorCWNhc2UgJ0snOgorCWNhc2UgJ0wnOgorCWNhc2UgJ00nOgorCWNhc2UgJ08nOgorCWNhc2UgJ1AnOgorCWNhc2UgJ1EnOgorCWNhc2UgJ1InOgorCWNhc2UgJ1QnOgorCWNhc2UgJ1UnOgorCWNhc2UgJ1cnOgorCWNhc2UgJ1knOgorCWNhc2UgIE5MOgorCWNhc2UgIFRBQjoKKworCSAgICAgICBzd2l0Y2ggKCh0ZW1wYyA9IGNtZF9nY2hhcihBVF9DVVJTT1IpKSkKKwkgICAgICAgeworCSAgICBjYXNlIF9CRToKKwkgICAgY2FzZSBfUEU6CisJICAgIGNhc2UgX1RFOgorCSAgICBjYXNlIF9TRToKKwkgICAgY2FzZSBfSklNOgorCSAgICBjYXNlIF9DSEU6CisJICAgIGNhc2UgX0hFX0o6CisJICAgIGNhc2UgX1hFOgorCSAgICBjYXNlIF9TSU46CisJICAgIGNhc2UgX1NISU46CisJICAgIGNhc2UgX1NBRDoKKwkgICAgY2FzZSBfWkFEOgorCSAgICBjYXNlIF9BWU46CisJICAgIGNhc2UgX0dIQVlOOgorCSAgICBjYXNlIF9GRToKKwkgICAgY2FzZSBfR0hBRjoKKwkgICAgY2FzZSBfS0FGOgorCSAgICBjYXNlIF9HQUY6CisJICAgIGNhc2UgX0xBTToKKwkgICAgY2FzZSBfTUlNOgorCSAgICBjYXNlIF9OT09OOgorCSAgICBjYXNlIF9IRToKKwkgICAgY2FzZSBfSEVfOgorCQkJY21kX3BjaGFyKHRvRl9UeUEodGVtcGMpLCBBVF9DVVJTT1IpOworCQlicmVhazsKKwkgICAgY2FzZSBfQVlOXzoKKwkJCWNtZF9wY2hhcihBWU5fLCBBVF9DVVJTT1IpOworCQlicmVhazsKKwkgICAgY2FzZSBfR0hBWU5fOgorCQkJY21kX3BjaGFyKEdIQVlOXywgQVRfQ1VSU09SKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgX0lFOgorCQlpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfQ01ELCBBVF9DVVJTT1IrMSkpCisJCQkgICAgY21kX3BjaGFyKElFXywgQVRfQ1VSU09SKTsKKwkJZWxzZQorCQkJICAgIGNtZF9wY2hhcihJRSwgQVRfQ1VSU09SKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgX1lFRToKKwkJaWYgKEZfaXNfVHlCX1R5Q19UeUQoU1JDX0NNRCwgQVRfQ1VSU09SKzEpKQorCQkJICAgIGNtZF9wY2hhcihZRUVfLCBBVF9DVVJTT1IpOworCQkJZWxzZQorCQkJICAgIGNtZF9wY2hhcihZRUUsIEFUX0NVUlNPUik7CisJCWJyZWFrOworCSAgICBjYXNlIF9ZRToKKwkJaWYgKEZfaXNfVHlCX1R5Q19UeUQoU1JDX0NNRCwgQVRfQ1VSU09SKzEpKQorCQkJICAgIGNtZF9wY2hhcihZRV8sIEFUX0NVUlNPUik7CisJCQllbHNlCisJCQkgICAgY21kX3BjaGFyKFlFLCBBVF9DVVJTT1IpOworCSAgICB9CisKKwkgICAgc3dpdGNoIChjKQorCSAgICB7CisJCWNhc2UgJzAnOiAgIHJldHVybiBGQVJTSV8wOworCQljYXNlICcxJzogICByZXR1cm4gRkFSU0lfMTsKKwkJY2FzZSAnMic6ICAgcmV0dXJuIEZBUlNJXzI7CisJCWNhc2UgJzMnOiAgIHJldHVybiBGQVJTSV8zOworCQljYXNlICc0JzogICByZXR1cm4gRkFSU0lfNDsKKwkJY2FzZSAnNSc6ICAgcmV0dXJuIEZBUlNJXzU7CisJCWNhc2UgJzYnOiAgIHJldHVybiBGQVJTSV82OworCQljYXNlICc3JzogICByZXR1cm4gRkFSU0lfNzsKKwkJY2FzZSAnOCc6ICAgcmV0dXJuIEZBUlNJXzg7CisJCWNhc2UgJzknOiAgIHJldHVybiBGQVJTSV85OworCQljYXNlICdCJzogICByZXR1cm4gRl9QU1A7CisJCWNhc2UgJ0UnOiAgIHJldHVybiBKQVpSX047CisJCWNhc2UgJ0YnOiAgIHJldHVybiBBTEVGX0RfSDsKKwkJY2FzZSAnSCc6ICAgcmV0dXJuIEFMRUZfQTsKKwkJY2FzZSAnSSc6ICAgcmV0dXJuIFRBU0g7CisJCWNhc2UgJ0snOiAgIHJldHVybiBGX0xRVU9UOworCQljYXNlICdMJzogICByZXR1cm4gRl9SUVVPVDsKKwkJY2FzZSAnTSc6ICAgcmV0dXJuIEhBTVpFOworCQljYXNlICdPJzogICByZXR1cm4gJ1snOworCQljYXNlICdQJzogICByZXR1cm4gJ10nOworCQljYXNlICdRJzogICByZXR1cm4gT087CisJCWNhc2UgJ1InOiAgIHJldHVybiBNQURfTjsKKwkJY2FzZSAnVCc6ICAgcmV0dXJuIE9XOworCQljYXNlICdVJzogICByZXR1cm4gTUFEOworCQljYXNlICdXJzogICByZXR1cm4gT1dfT1c7CisJCWNhc2UgJ1knOiAgIHJldHVybiBKQVpSOworCQljYXNlICdgJzogICByZXR1cm4gRl9QQ047CisJCWNhc2UgJyEnOiAgIHJldHVybiBGX0VYQ0w7CisJCWNhc2UgJ0AnOiAgIHJldHVybiBGX0NPTU1BOworCQljYXNlICcjJzogICByZXR1cm4gRl9ESVZJREU7CisJCWNhc2UgJyQnOiAgIHJldHVybiBGX0NVUlJFTkNZOworCQljYXNlICclJzogICByZXR1cm4gRl9QRVJDRU5UOworCQljYXNlICdeJzogICByZXR1cm4gRl9NVUw7CisJCWNhc2UgJyYnOiAgIHJldHVybiBGX0JDT01NQTsKKwkJY2FzZSAnKic6ICAgcmV0dXJuIEZfU1RBUjsKKwkJY2FzZSAnKCc6ICAgcmV0dXJuIEZfTFBBUkVOVDsKKwkJY2FzZSAnKSc6ICAgcmV0dXJuIEZfUlBBUkVOVDsKKwkJY2FzZSAnLSc6ICAgcmV0dXJuIEZfTUlOVVM7CisJCWNhc2UgJ18nOiAgIHJldHVybiBGX1VOREVSTElORTsKKwkJY2FzZSAnPSc6ICAgcmV0dXJuIEZfRVFVQUxTOworCQljYXNlICcrJzogICByZXR1cm4gRl9QTFVTOworCQljYXNlICdcXCc6ICByZXR1cm4gRl9CU0xBU0g7CisJCWNhc2UgJ3wnOiAgIHJldHVybiBGX1BJUEU7CisJCWNhc2UgJzonOiAgIHJldHVybiBGX0RDT0xPTjsKKwkJY2FzZSAnIic6ICAgcmV0dXJuIEZfU0VNSUNPTE9OOworCQljYXNlICcuJzogICByZXR1cm4gRl9QRVJJT0Q7CisJCWNhc2UgJy8nOiAgIHJldHVybiBGX1NMQVNIOworCQljYXNlICc8JzogICByZXR1cm4gRl9MRVNTOworCQljYXNlICc+JzogICByZXR1cm4gRl9HUkVBVEVSOworCQljYXNlICc/JzogICByZXR1cm4gRl9RVUVTVElPTjsKKwkJY2FzZSAnICc6ICAgcmV0dXJuIEZfQkxBTks7CisJICAgIH0KKworCSAgICBicmVhazsKKworCWNhc2UgJ2EnOiAgIHJldHVybiBfU0hJTjsKKwljYXNlICdBJzogICByZXR1cm4gV0FXX0g7CisJY2FzZSAnYic6ICAgcmV0dXJuIFpBTDsKKwljYXNlICdjJzogICByZXR1cm4gWkU7CisJY2FzZSAnQyc6ICAgcmV0dXJuIEpFOworCWNhc2UgJ2QnOiAgIHJldHVybiBfWUU7CisJY2FzZSAnRCc6ICAgcmV0dXJuIF9ZRUU7CisJY2FzZSAnZSc6ICAgcmV0dXJuIF9TRTsKKwljYXNlICdmJzogICByZXR1cm4gX0JFOworCWNhc2UgJ2cnOiAgIHJldHVybiBfTEFNOworCWNhc2UgJ0cnOgorCQkgICAgaWYgKGNtZF9nY2hhcihBVF9DVVJTT1IpID09IF9MQU0gKQorCQl7CisJCSAgICBjbWRfcGNoYXIoTEFNLCBBVF9DVVJTT1IpOworCQkJICAgIHJldHVybiBBTEVGX1VfSDsKKwkJfQorCisJCWlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19DTUQsIEFUX0NVUlNPUikpCisJCQlyZXR1cm4gQUxFRl9VX0hfOworCQllbHNlCisJCQlyZXR1cm4gQUxFRl9VX0g7CisJY2FzZSAnaCc6CisJCSAgICBpZiAoY21kX2djaGFyKEFUX0NVUlNPUikgPT0gX0xBTSApCisJCXsKKwkJICAgIGNtZF9wY2hhcihMQSwgQVRfQ1VSU09SKTsKKwkJICAgIHJlZHJhd2NtZGxpbmUoKTsKKwkJICAgIHJldHVybiBLX0lHTk9SRTsKKwkJfQorCisJCWlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19DTUQsIEFUX0NVUlNPUikpCisJCQlyZXR1cm4gQUxFRl87CisJCWVsc2UKKwkJCXJldHVybiBBTEVGOworCWNhc2UgJ2knOgorCQlpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfQ01ELCBBVF9DVVJTT1IpKQorCQkJcmV0dXJuIF9IRV87CisJCWVsc2UKKwkJCXJldHVybiBfSEU7CisJY2FzZSAnaic6ICAgcmV0dXJuIF9URTsKKwljYXNlICdKJzoKKwkJaWYgKEZfaXNfVHlCX1R5Q19UeUQoU1JDX0NNRCwgQVRfQ1VSU09SKSkKKwkJCXJldHVybiBURUVfOworCQllbHNlCisJCQlyZXR1cm4gVEVFOworCWNhc2UgJ2snOiAgIHJldHVybiBfTk9PTjsKKwljYXNlICdsJzogICByZXR1cm4gX01JTTsKKwljYXNlICdtJzogICByZXR1cm4gX1BFOworCWNhc2UgJ24nOgorCWNhc2UgJ04nOiAgIHJldHVybiBEQUw7CisJY2FzZSAnbyc6ICAgcmV0dXJuIF9YRTsKKwljYXNlICdwJzogICByZXR1cm4gX0hFX0o7CisJY2FzZSAncSc6ICAgcmV0dXJuIF9aQUQ7CisJY2FzZSAncic6ICAgcmV0dXJuIF9HSEFGOworCWNhc2UgJ3MnOiAgIHJldHVybiBfU0lOOworCWNhc2UgJ1MnOiAgIHJldHVybiBfSUU7CisJY2FzZSAndCc6ICAgcmV0dXJuIF9GRTsKKwljYXNlICd1JzoKKwkJaWYgKEZfaXNfVHlCX1R5Q19UeUQoU1JDX0NNRCwgQVRfQ1VSU09SKSkKKwkJCXJldHVybiBfQVlOXzsKKwkJZWxzZQorCQkJcmV0dXJuIF9BWU47CisJY2FzZSAndic6CisJY2FzZSAnVic6ICAgcmV0dXJuIFJFOworCWNhc2UgJ3cnOiAgIHJldHVybiBfU0FEOworCWNhc2UgJ3gnOgorCWNhc2UgJ1gnOiAgIHJldHVybiBfVEE7CisJY2FzZSAneSc6CisJCWlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19DTUQsIEFUX0NVUlNPUikpCisJCQlyZXR1cm4gX0dIQVlOXzsKKwkJZWxzZQorCQkJcmV0dXJuIF9HSEFZTjsKKwljYXNlICd6JzoKKwljYXNlICdaJzogICByZXR1cm4gX1pBOworCWNhc2UgJzsnOiAgIHJldHVybiBfS0FGOworCWNhc2UgJ1wnJzogIHJldHVybiBfR0FGOworCWNhc2UgJywnOiAgIHJldHVybiBXQVc7CisJY2FzZSAnWyc6ICAgcmV0dXJuIF9KSU07CisJY2FzZSAnXSc6ICAgcmV0dXJuIF9DSEU7CisJfQorCisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBGX2lzYWxwaGEgcmV0dXJucyBUUlVFIGlmICdjJyBpcyBhIEZhcnNpIGFscGhhYmV0CisgKi8KKyAgICBpbnQKK0ZfaXNhbHBoYShjKQorICAgIGludAljOworeworICAgIHJldHVybiAoKCBjID49IFRFRV8gJiYgYyA8PSBfWUUpCisJICAgIHx8IChjID49IEFMRUZfQSAmJiBjIDw9IFlFKQorCSAgICB8fCAoYyA+PSBfSUUgJiYgYyA8PSBZRV8pKTsKK30KKworLyoKKyAqIEZfaXNkaWdpdCByZXR1cm5zIFRSVUUgaWYgJ2MnIGlzIGEgRmFyc2kgZGlnaXQKKyAqLworICAgIGludAorRl9pc2RpZ2l0KGMpCisgICAgaW50CWM7Cit7CisgICAgcmV0dXJuIChjID49IEZBUlNJXzAgJiYgYyA8PSBGQVJTSV85KTsKK30KKworLyoKKyAqIEZfaXNjaGFyIHJldHVybnMgVFJVRSBpZiAnYycgaXMgYSBGYXJzaSBjaGFyYWN0ZXIuCisgKi8KKyAgICBpbnQKK0ZfaXNjaGFyKGMpCisgICAgaW50CWM7Cit7CisgICAgcmV0dXJuIChjID49IFRFRV8gJiYgYyA8PSBZRV8pOworfQorCisgICAgdm9pZAorZmFyc2lfZmtleShjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpbnQJCWMgPSBjYXAtPmNtZGNoYXI7CisKKyAgICBpZiAoYyA9PSBLX0Y4KQorICAgIHsKKwlpZiAocF9hbHRrZXltYXApCisJeworCSAgICBpZiAoY3Vyd2luLT53X2ZhcnNpICYgV19SX0wpCisJICAgIHsKKwkJcF9ma21hcCA9IDA7CisJCWRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikic2V0IG5vcmwiKTsKKwkJTVNHKCIiKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJcF9ma21hcCA9IDE7CisJCWRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikic2V0IHJsIik7CisJCU1TRygiIik7CisJICAgIH0KKworCSAgICBjdXJ3aW4tPndfZmFyc2kgPSBjdXJ3aW4tPndfZmFyc2kgXiBXX1JfTDsKKwl9CisgICAgfQorCisgICAgaWYgKGMgPT0gS19GOSkKKyAgICB7CisJaWYgKHBfYWx0a2V5bWFwICYmIGN1cndpbi0+d19wX3JsKQorCXsKKwkgICAgY3Vyd2luLT53X2ZhcnNpID0gY3Vyd2luLT53X2ZhcnNpIF4gV19DT05WOworCSAgICBpZiAoY3Vyd2luLT53X2ZhcnNpICYgV19DT05WKQorCQljb252X3RvX3B2aW0oKTsKKwkgICAgZWxzZQorCQljb252X3RvX3BzdGQoKTsKKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2ZhcnNpLmggYi9zcmMvZmFyc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGVhNDIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ZhcnNpLmgKQEAgLTAsMCArMSwyMzQgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKy8qCisgKiBGYXJzaSBjaGFyYWN0ZXJzIGFyZSBjYXRhZ29yaXplZCBpbnRvIGZvbGxvd2luZyB0eXBlczoKKyAqCisgKiBUeUEJKGZvciBjYXBpdGFsIGxldHRlciByZXByZXNlbnRhdGlvbikKKyAqIFR5QgkoZm9yIHR5cGVzIHRoYXQgbG9vayBsaWtlIF9YICBlLmcuIEFZTikKKyAqIFR5QwkoZm9yIHR5cGVzIHRoYXQgbG9vayBsaWtlIFhfICBlLmcuIFlFXykKKyAqIFR5RAkoZm9yIHR5cGVzIHRoYXQgbG9vayBsaWtlIF9YXyAgZS5nLiBfQVlOXykKKyAqIFR5RQkoZm9yIHR5cGVzIHRoYXQgbG9vayBsaWtlIFggIGUuZy4gUkUpCisgKi8KKworLyoKKyAqIEZhcnNpIGNoYXJhY3RlciBzZXQgZGVmaW5pdGlvbgorICovCisKKy8qCisgKiBCZWdpbiBvZiB0aGUgbm9uLXN0YW5kYXJkIHBhcnQKKyAqLworCisjZGVmaW5lIFRFRV8JCTB4ODAKKyNkZWZpbmUgQUxFRl9VX0hfCTB4ODEKKyNkZWZpbmUgQUxFRl8JCTB4ODIKKyNkZWZpbmUgX0JFCQkweDgzCisjZGVmaW5lIF9QRQkJMHg4NAorI2RlZmluZSBfVEUJCTB4ODUKKyNkZWZpbmUgX1NFCQkweDg2CisjZGVmaW5lIF9KSU0JCTB4ODcKKyNkZWZpbmUgX0NIRQkJMHg4OAorI2RlZmluZSBfSEVfSgkJMHg4OQorI2RlZmluZSBfWEUJCTB4OGEKKyNkZWZpbmUgX1NJTgkJMHg4YgorI2RlZmluZSBfU0hJTgkJMHg4YworI2RlZmluZSBfU0FECQkweDhkCisjZGVmaW5lIF9aQUQJCTB4OGUKKyNkZWZpbmUgX0FZTgkJMHg4ZgorI2RlZmluZSBfQVlOXwkJMHg5MAorI2RlZmluZSBBWU5fCQkweDkxCisjZGVmaW5lIF9HSEFZTgkJMHg5MgorI2RlZmluZSBfR0hBWU5fCQkweDkzCisjZGVmaW5lIEdIQVlOXwkJMHg5NAorI2RlZmluZSBfRkUJCTB4OTUKKyNkZWZpbmUgX0dIQUYJCTB4OTYKKyNkZWZpbmUgX0tBRgkJMHg5NworI2RlZmluZSBfR0FGCQkweDk4CisjZGVmaW5lIF9MQU0JCTB4OTkKKyNkZWZpbmUgTEEJCTB4OWEKKyNkZWZpbmUgX01JTQkJMHg5YgorI2RlZmluZSBfTk9PTgkJMHg5YworI2RlZmluZSBfSEUJCTB4OWQKKyNkZWZpbmUgX0hFXwkJMHg5ZQorI2RlZmluZSBfWUUJCTB4OWYKKyNkZWZpbmUgX0lFCQkweGVjCisjZGVmaW5lIElFXwkJMHhlZAorI2RlZmluZSBJRQkJMHhmYgorI2RlZmluZSBfWUVFCQkweGVlCisjZGVmaW5lIFlFRV8JCTB4ZWYKKyNkZWZpbmUgWUVfCQkweGZmCisKKy8qCisgKiBFbmQgb2YgdGhlIG5vbi1zdGFuZGFyZCBwYXJ0CisgKi8KKworLyoKKyAqIFN0YW5kYXJkIHBhcnQKKyAqLworCisjZGVmaW5lIEZfQkxBTksJCTB4YTAJLyogRmFyc2kgJyAnIChTUCkgY2hhcmFjdGVyICovCisjZGVmaW5lIEZfUFNQCQkweGExCS8qIFBTUCBmb3IgY2FwaXRhbGl6aW5nIG9mIGEgY2hhcmFjdGVyICovCisjZGVmaW5lIEZfUENOCQkweGEyCS8qIFBDTiBmb3IgcmVkZWZpbmluZyBvZiB0aGUgaGFteWUgbWVhbmluZyAqLworI2RlZmluZSBGX0VYQ0wJCTB4YTMJLyogRmFyc2kgISBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9DVVJSRU5DWQkweGE0CS8qIEZhcnNpIFJpYWwgY2hhcmFjdGVyICovCisjZGVmaW5lIEZfUEVSQ0VOVAkweGE1CS8qIEZhcnNpICUgY2hhcmFjdGVyICovCisjZGVmaW5lIEZfUEVSSU9ECTB4YTYJLyogRmFyc2kgJy4nIGNoYXJhY3RlciAqLworI2RlZmluZSBGX0NPTU1BCQkweGE3CS8qIEZhcnNpICcsJyBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9MUEFSRU5UCTB4YTgJLyogRmFyc2kgJygnIGNoYXJhY3RlciAqLworI2RlZmluZSBGX1JQQVJFTlQJMHhhOQkvKiBGYXJzaSAnKScgY2hhcmFjdGVyICovCisjZGVmaW5lIEZfTVVMCQkweGFhCS8qIEZhcnNpICd4JyBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9QTFVTCQkweGFiCS8qIEZhcnNpICcrJyBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9CQ09NTUEJMHhhYwkvKiBGYXJzaSBjb21tYSBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9NSU5VUwkJMHhhZAkvKiBGYXJzaSAnLScgY2hhcmFjdGVyICovCisjZGVmaW5lIEZfRElWSURFCTB4YWUJLyogRmFyc2kgZGl2aWRlICgvKSBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9TTEFTSAkJMHhhZgkvKiBGYXJzaSAnLycgY2hhcmFjdGVyICovCisKKyNkZWZpbmUgRkFSU0lfMAkJMHhiMAorI2RlZmluZSBGQVJTSV8xCQkweGIxCisjZGVmaW5lIEZBUlNJXzIJCTB4YjIKKyNkZWZpbmUgRkFSU0lfMwkJMHhiMworI2RlZmluZSBGQVJTSV80CQkweGI0CisjZGVmaW5lIEZBUlNJXzUJCTB4YjUKKyNkZWZpbmUgRkFSU0lfNgkJMHhiNgorI2RlZmluZSBGQVJTSV83CQkweGI3CisjZGVmaW5lIEZBUlNJXzgJCTB4YjgKKyNkZWZpbmUgRkFSU0lfOQkJMHhiOQorCisjZGVmaW5lIEZfRENPTE9OCTB4YmEJLyogRmFyc2kgJzonIGNoYXJhY3RlciAqLworI2RlZmluZSBGX1NFTUlDT0xPTgkweGJiCS8qIEZhcnNpICc7JyBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9HUkVBVEVSCTB4YmMJLyogRmFyc2kgJz4nIGNoYXJhY3RlciAqLworI2RlZmluZSBGX0VRVUFMUwkweGJkCS8qIEZhcnNpICc9JyBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9MRVNTCQkweGJlCS8qIEZhcnNpICc8JyBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9RVUVTVElPTgkweGJmCS8qIEZhcnNpID8gY2hhcmFjdGVyICovCisKKyNkZWZpbmUgQUxFRl9BCTB4YzAKKyNkZWZpbmUgQUxFRgkweGMxCisjZGVmaW5lIEhBTVpFCTB4YzIKKyNkZWZpbmUgQkUJMHhjMworI2RlZmluZSBQRQkweGM0CisjZGVmaW5lIFRFCTB4YzUKKyNkZWZpbmUgU0UJMHhjNgorI2RlZmluZSBKSU0JMHhjNworI2RlZmluZSBDSEUJMHhjOAorI2RlZmluZSBIRV9KCTB4YzkKKyNkZWZpbmUgWEUJMHhjYQorI2RlZmluZSBEQUwJMHhjYgorI2RlZmluZSBaQUwJMHhjYworI2RlZmluZSBSRQkweGNkCisjZGVmaW5lIFpFCTB4Y2UKKyNkZWZpbmUgSkUJMHhjZgorI2RlZmluZSBTSU4JMHhkMAorI2RlZmluZSBTSElOCTB4ZDEKKyNkZWZpbmUgU0FECTB4ZDIKKyNkZWZpbmUgWkFECTB4ZDMKKyNkZWZpbmUgX1RBCTB4ZDQKKyNkZWZpbmUgX1pBCTB4ZDUKKyNkZWZpbmUgQVlOCTB4ZDYKKyNkZWZpbmUgR0hBWU4JMHhkNworI2RlZmluZSBGRQkweGQ4CisjZGVmaW5lIEdIQUYJMHhkOQorI2RlZmluZSBLQUYJMHhkYQorI2RlZmluZSBHQUYJMHhkYgorI2RlZmluZSBMQU0JMHhkYworI2RlZmluZSBNSU0JMHhkZAorI2RlZmluZSBOT09OCTB4ZGUKKyNkZWZpbmUgV0FXCTB4ZGYKKyNkZWZpbmUgRl9IRQkweGUwCQkvKiBGXyBhZGRlZCBmb3IgbmFtZSBjbGFzaCB3aXRoIFBlcmwgKi8KKyNkZWZpbmUgWUUJMHhlMQorI2RlZmluZSBURUUJMHhmYworI2RlZmluZSBfS0FGX0gJMHhmZAorI2RlZmluZSBZRUUJMHhmZQorCisjZGVmaW5lIEZfTEJSQUNLCTB4ZTIJLyogRmFyc2kgJ1snIGNoYXJhY3RlciAqLworI2RlZmluZSBGX1JCUkFDSwkweGUzCS8qIEZhcnNpICddJyBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9MQlJBQ0UJMHhlNAkvKiBGYXJzaSAneycgY2hhcmFjdGVyICovCisjZGVmaW5lIEZfUkJSQUNFCTB4ZTUJLyogRmFyc2kgJ30nIGNoYXJhY3RlciAqLworI2RlZmluZSBGX0xRVU9UCQkweGU2CS8qIEZhcnNpIGxlZnQgcXVvdGF0aW9uIGNoYXJhY3RlciAqLworI2RlZmluZSBGX1JRVU9UCQkweGU3CS8qIEZhcnNpIHJpZ2h0IHF1b3RhdGlvbiBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9TVEFSCQkweGU4CS8qIEZhcnNpICcqJyBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRl9VTkRFUkxJTkUJMHhlOQkvKiBGYXJzaSAnXycgY2hhcmFjdGVyICovCisjZGVmaW5lIEZfUElQRQkJMHhlYQkvKiBGYXJzaSAnfCcgY2hhcmFjdGVyICovCisjZGVmaW5lIEZfQlNMQVNICTB4ZWIJLyogRmFyc2kgJ1wnIGNoYXJhY3RlciAqLworCisjZGVmaW5lIE1BRAkJMHhmMAorI2RlZmluZSBKQVpSCQkweGYxCisjZGVmaW5lIE9XCQkweGYyCisjZGVmaW5lIE1BRF9OCQkweGYzCisjZGVmaW5lIEpBWlJfTgkJMHhmNAorI2RlZmluZSBPV19PVwkJMHhmNQorI2RlZmluZSBUQVNICQkweGY2CisjZGVmaW5lIE9PCQkweGY3CisjZGVmaW5lIEFMRUZfVV9ICTB4ZjgKKyNkZWZpbmUgV0FXX0gJCTB4ZjkKKyNkZWZpbmUgQUxFRl9EX0gJMHhmYQorCisvKgorICogZ2xvYmFsIGRlZmluaXRpb25zCisgKiA9PT09PT09PT09PT09PT09PT0KKyAqLworCisjZGVmaW5lIFNSQ19FRFQJMAorI2RlZmluZSBTUkNfQ01EIDEKKworI2RlZmluZSBBVF9DVVJTT1IgMAorCisvKgorICogZGVmaW5pdGlvbnMgZm9yIHRoZSB3aW5kb3cgZGVwZW5kZW50IGZ1bmN0aW9ucyAod19mYXJzaSkuCisgKi8KKyNkZWZpbmUgV19DT05WIDB4MQorI2RlZmluZSBXX1JfTCAgMHgyCisKKworLyogc3BlY2lhbCBGYXJzaSB0ZXh0IG1lc3NhZ2VzICovCisKK0VYVEVSTiBjaGFyX3UgZmFyc2lfdGV4dF8xW10KKyNpZmRlZiBET19JTklUCisJCT0geyBZRV8sIF9TSU4sIFJFLCBBTEVGXywgX0ZFLCAnICcsICdWJywgJ0knLCAnTScsCisJCSAgICAnICcsIEZfSEUsIF9CRSwgJyAnLCBTSElOLCBSRSwgX0dBRiwgREFMLCcgJywgTk9PTiwKKwkJICAgIEFMRUZfLCBfWUUsIEFMRUZfLCBfUEUsICdcMCd9CisjZW5kaWYKKwkJICAgICA7CisKK0VYVEVSTiBjaGFyX3UgZmFyc2lfdGV4dF8yW10KKyNpZmRlZiBET19JTklUCisJCT0geyBZRV8sIF9TSU4sIFJFLCBBTEVGXywgX0ZFLCAnICcsIEZBUlNJXzMsIEZBUlNJXzMsCisJCSAgICBGQVJTSV80LCBGQVJTSV8yLCAnICcsIERBTCwgUkUsIEFMRUYsIERBTCwgX05PT04sCisJCSAgICBBTEVGXywgX1RFLCBfU0lOLCBBTEVGLCAnICcsIEZfSEUsIF9CRSwgJyAnLCBTSElOLAorCQkgICAgUkUsICBfR0FGLCBEQUwsICcgJywgTk9PTiwgQUxFRl8sIF9ZRSwgQUxFRl8sIF9QRSwgJ1wwJ30KKyNlbmRpZgorCQkgICAgIDsKKworRVhURVJOIGNoYXJfdSBmYXJzaV90ZXh0XzNbXQorI2lmZGVmIERPX0lOSVQKKwkJPSB7IERBTCwgV0FXLCBfU0hJTiwgX1lFLCBfTUlNLCBfTk9PTiwgJyAnLCBZRV8sIF9OT09OLAorCQkgICAgQUxFRl8sX0JFLCBfWUUsIF9URSwgX1NISU4sIF9QRSwgJyAnLCAnUicsJ0UnLCdQJywnTCcsCisJCSAgICAnQScsJ0MnLCdFJywgJyAnLCBOT09OLCBBTEVGXywgX01JTSwgUkUsIF9GRSwgWkUsIEFMRUYsCisJCSAgICAnICcsICdSJywgJ0UnLCAnVicsICdFJywgJ1InLCAnUycsICdFJywgJyAnLCAnSScsICdOJywKKwkJICAgICdTJywgJ0UnLCAnUicsICdUJywgJyAnLCBTSElOLCBXQVcsIFJFLCAnICcsIEFMRUZfLCBfQkUsCisJCSAgICAnICcsIFlFXywgX1NJTiwgUkUsIEFMRUZfLCBfRkUsICcgJywgUkUsIERBTCwgJyAnLCBSRSwKKwkJICAgIEFMRUZfLCBfS0FGLCcgJywgTUlNLCBBTEVGXywgX0dBRiwgX05PT04sIF9IRSwgJ1wwJ30KKyNlbmRpZgorCQkgICAgOworCisjaWYgMCAvKiBub3QgdXNlZCAqLworRVhURVJOIGNoYXJfdSBmYXJzaV90ZXh0XzRbXQorI2lmZGVmIERPX0lOSVQKKwkJPSB7IERBTCwgV0FXLCBfU0hJTiwgX1lFLCBfTUlNLCBfTk9PTiwgJyAnLCBZRV8sIF9OT09OLAorCQkgICAgQUxFRl8sIF9CRSwgX1lFLCBfVEUsIF9TSElOLCBfUEUsICcgJywgJzwnLCAnQycsJ1QnLCdSJywKKwkJICAgICdMJywnLScsJ0InLCc+JywgJyAnLCBOT09OLCBBTEVGXywgX01JTSwgUkUsIF9GRSwgWkUsCisJCSAgICBBTEVGLCAnICcsIFlFXywgX1NJTiwgUkUsIEFMRUZfLCBfRkUsICcgJywgUkUsIERBTCwgJyAnLAorCQkgICAgUkUsIEFMRUZfLCBfS0FGLCcgJywgTUlNLCBBTEVGXywgX0dBRiwgX05PT04sIF9IRSwgJ1wwJ30KKyNlbmRpZgorCQkgICAgOworI2VuZGlmCisKK0VYVEVSTiBjaGFyX3UgZmFyc2lfdGV4dF81W10KKyNpZmRlZiBET19JTklUCisJCT0geyAnICcsIFlFXywgX1NJTiwgUkUsIEFMRUZfLCBfRkUsICdcMCd9CisjZW5kaWYKKwkJICAgIDsKZGlmZiAtLWdpdCBhL3NyYy9mZWF0dXJlLmggYi9zcmMvZmVhdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNWMwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZmVhdHVyZS5oCkBAIC0wLDAgKzEsMTE4NCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTAgc3c9ODoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAkJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisvKgorICogZmVhdHVyZS5oOiBEZWZpbmVzIGZvciBvcHRpb25hbCBjb2RlIGFuZCBwcmVmZXJlbmNlcworICoKKyAqIEVkaXQgdGhpcyBmaWxlIHRvIGluY2x1ZGUvZXhjbHVkZSBwYXJ0cyBvZiBWaW0sIGJlZm9yZSBjb21waWxpbmcuCisgKiBUaGUgb25seSBvdGhlciBmaWxlIHRoYXQgbWF5IGJlIGVkaXRlZCBpcyBNYWtlZmlsZSwgaXQgY29udGFpbnMgbWFjaGluZQorICogc3BlY2lmaWMgb3B0aW9ucy4KKyAqCisgKiBUbyBpbmNsdWRlIHNwZWNpZmljIG9wdGlvbnMsIGNoYW5nZSB0aGUgIiNpZioiIGFuZCAiI2VuZGlmIiBpbnRvIGNvbW1lbnRzLAorICogb3IgdW5jb21tZW50IHRoZSAiI2RlZmluZSIuCisgKiBUbyBleGNsdWRlIHNwZWNpZmljIG9wdGlvbnMsIGNoYW5nZSB0aGUgIiNkZWZpbmUiIGludG8gYSBjb21tZW50LgorICovCisKKy8qCisgKiBXaGVuIGFkZGluZyBhIG5ldyBmZWF0dXJlOgorICogLSBBZGQgYSAjZGVmaW5lIGJlbG93LgorICogLSBBZGQgYSBtZXNzYWdlIGluIHRoZSB0YWJsZSBhYm92ZSBleF92ZXJzaW9uKCkuCisgKiAtIEFkZCBhIHN0cmluZyB0byBmX2hhcygpLgorICogLSBBZGQgYSBmZWF0dXJlIHRvICI6aGVscCBmZWF0dXJlLWxpc3QiIGluIGRvYy9ldmFsLnR4dC4KKyAqIC0gQWRkIGZlYXR1cmUgdG8gIjpoZWxwICtmZWF0dXJlLWxpc3QiIGluIGRvYy92YXJpb3VzLnR4dC4KKyAqIC0gQWRkIGNvbW1lbnQgZm9yIHRoZSBkb2N1bWVudGF0aW9uIG9mIGNvbW1hbmRzIHRoYXQgdXNlIHRoZSBmZWF0dXJlLgorICovCisKKy8qCisgKiBCYXNpYyBjaG9pY2VzOgorICogPT09PT09PT09PT09PT0KKyAqCisgKiArdGlueQkJYWxtb3N0IG5vIGZlYXR1cmVzIGVuYWJsZWQsIG5vdCBldmVuIG11bHRpcGxlIHdpbmRvd3MKKyAqICtzbWFsbAkJZmV3IGZlYXR1cmVzIGVuYWJsZWQsIGFzIGJhc2ljIGFzIHBvc3NpYmxlCisgKiArbm9ybWFsCQlBIGRlZmF1bHQgc2VsZWN0aW9uIG9mIGZlYXR1cmVzIGVuYWJsZWQKKyAqICtiaWcJCQltYW55IGZlYXR1cmVzIGVuYWJsZWQsIGFzIHJpY2ggYXMgcG9zc2libGUuCisgKiAraHVnZQkJYWxsIHBvc3NpYmxlIGZlYXR1ZXMgZW5hYmxlZC4KKyAqCisgKiBXaGVuICtzbWFsbCBpcyB1c2VkLCArdGlueSBpcyBhbHNvIGluY2x1ZGVkLiAgK25vcm1hbCBpbXBsaWVzICtzbWFsbCwgZXRjLgorICovCisKKy8qCisgKiBVbmNvbW1lbnQgb25lIG9mIHRoZXNlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0LiAgRm9yIHVuaXggdXNlIGEgY29uZmlndXJlCisgKiBhcmd1bWVudCwgc2VlIE1ha2VmaWxlLgorICovCisjaWYgIWRlZmluZWQoRkVBVF9USU5ZKSAmJiAhZGVmaW5lZChGRUFUX1NNQUxMKSAmJiAhZGVmaW5lZChGRUFUX05PUk1BTCkgXAorCSYmICFkZWZpbmVkKEZFQVRfQklHKSAmJiAhZGVmaW5lZChGRUFUX0hVR0UpCisvKiAjZGVmaW5lIEZFQVRfVElOWSAqLworLyogI2RlZmluZSBGRUFUX1NNQUxMICovCisvKiAjZGVmaW5lIEZFQVRfTk9STUFMICovCisvKiAjZGVmaW5lIEZFQVRfQklHICovCisvKiAjZGVmaW5lIEZFQVRfSFVHRSAqLworI2VuZGlmCisKKy8qCisgKiBUaGVzZSBleGVjdXRhYmxlcyBhcmUgbWFkZSBhdmFpbGFibGUgd2l0aCB0aGUgK2JpZyBmZWF0dXJlLCBiZWNhdXNlIHRoZXkKKyAqIGFyZSBzdXBwb3NlZCB0byBoYXZlIGVub3VnaCBSQU06IFdpbjMyIChjb25zb2xlICYgR1VJKSwgZG9zMzIsIE9TLzIgYW5kIFZNUy4KKyAqIFRoZSBkb3MxNiB2ZXJzaW9uIGhhcyB2ZXJ5IGxpdHRsZSBSQU0gYXZhaWxhYmxlLCB1c2UgK3NtYWxsLgorICovCisjaWYgIWRlZmluZWQoRkVBVF9USU5ZKSAmJiAhZGVmaW5lZChGRUFUX1NNQUxMKSAmJiAhZGVmaW5lZChGRUFUX05PUk1BTCkgXAorCSYmICFkZWZpbmVkKEZFQVRfQklHKSAmJiAhZGVmaW5lZChGRUFUX0hVR0UpCisjIGlmIGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoREpHUFApIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFZNUykgfHwgZGVmaW5lZChNQUNPUykgfHwgZGVmaW5lZChBTUlHQSkKKyMgIGRlZmluZSBGRUFUX0JJRworIyBlbHNlCisjICBpZmRlZiBNU0RPUworIyAgIGRlZmluZSBGRUFUX1NNQUxMCisjICBlbHNlCisjICAgZGVmaW5lIEZFQVRfTk9STUFMCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBFYWNoIGZlYXR1cmUgaW1wbGllcyBpbmNsdWRpbmcgdGhlICJzbWFsbGVyIiBvbmVzLgorICovCisjaWZkZWYgRkVBVF9IVUdFCisjIGRlZmluZSBGRUFUX0JJRworI2VuZGlmCisjaWZkZWYgRkVBVF9CSUcKKyMgZGVmaW5lIEZFQVRfTk9STUFMCisjZW5kaWYKKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9TTUFMTAorI2VuZGlmCisjaWZkZWYgRkVBVF9TTUFMTAorIyBkZWZpbmUgRkVBVF9USU5ZCisjZW5kaWYKKworLyoKKyAqIE9wdGlvbmFsIGNvZGUgKHNlZSAiOmhlbHAgK2ZlYXR1cmUtbGlzdCIpCisgKiA9PT09PT09PT09PT09CisgKi8KKworLyoKKyAqICt3aW5kb3dzCQlNdWx0aXBsZSB3aW5kb3dzLiAgV2l0aG91dCB0aGlzIHRoZXJlIGlzIG5vIGhlbHAKKyAqCQkJd2luZG93IGFuZCBubyBzdGF0dXMgbGluZXMuCisgKi8KKyNpZmRlZiBGRUFUX1NNQUxMCisjIGRlZmluZSBGRUFUX1dJTkRPV1MKKyNlbmRpZgorCisvKgorICogK2xpc3RjbWRzCQlWaW0gY29tbWFuZHMgZm9yIHRoZSBidWZmZXIgbGlzdCBhbmQgdGhlIGFyZ3VtZW50CisgKgkJCWxpc3QuICBXaXRob3V0IHRoaXMgdGhlcmUgaXMgbm8gIjpidWZmZXIiICI6Ym5leHQiLAorICoJCQkiOmJkZWwiLCAiOmFyZ2RlbGV0ZSIsIGV0Yy4KKyAqLworI2lmZGVmIEZFQVRfTk9STUFMCisjIGRlZmluZSBGRUFUX0xJU1RDTURTCisjZW5kaWYKKworLyoKKyAqICt2ZXJ0c3BsaXQJCVZlcnRpY2FsbHkgc3BsaXQgd2luZG93cy4KKyAqLworI2lmZGVmIEZFQVRfTk9STUFMCisjIGRlZmluZSBGRUFUX1ZFUlRTUExJVAorI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX1ZFUlRTUExJVCkgJiYgIWRlZmluZWQoRkVBVF9XSU5ET1dTKQorIyBkZWZpbmUgRkVBVF9XSU5ET1dTCisjZW5kaWYKKworLyoKKyAqICtjbWRoaXN0CQlDb21tYW5kIGxpbmUgaGlzdG9yeS4KKyAqLworI2lmZGVmIEZFQVRfU01BTEwKKyMgZGVmaW5lIEZFQVRfQ01ESElTVAorI2VuZGlmCisKKy8qCisgKiAranVtcGxpc3QJCUp1bXBsaXN0LCBDVFJMLU8gYW5kIENUUkwtSSBjb21tYW5kcy4KKyAqLworI2lmZGVmIEZFQVRfU01BTEwKKyMgZGVmaW5lIEZFQVRfSlVNUExJU1QKKyNlbmRpZgorCisvKiB0aGUgY21kbGluZS13aW5kb3cgcmVxdWlyZXMgRkVBVF9WRVJUU1BMSVQgYW5kIEZFQVRfQ01ESElTVCAqLworI2lmIGRlZmluZWQoRkVBVF9WRVJUU1BMSVQpICYmIGRlZmluZWQoRkVBVF9DTURISVNUKQorIyBkZWZpbmUgRkVBVF9DTURXSU4KKyNlbmRpZgorCisvKgorICogK2ZvbGRpbmcJCUZvbGQgbGluZXMuCisgKi8KKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9GT0xESU5HCisjZW5kaWYKKworLyoKKyAqICtkaWdyYXBocwkJRGlncmFwaHMuCisgKgkJCUluIGluc2VydCBtb2RlIGFuZCBvbiB0aGUgY29tbWFuZCBsaW5lIHlvdSB3aWxsIGJlCisgKgkJCWFibGUgdG8gdXNlIGRpZ3JhcGhzLiBUaGUgQ1RSTC1LIGNvbW1hbmQgd2lsbCB3b3JrLgorICoJCQlEZWZpbmUgT0xEX0RJR1JBUEhTIHRvIGdldCBkaWdyYXBocyBjb21wYXRpYmxlIHdpdGgKKyAqCQkJVmltIDUueC4gIFRoZSBuZXcgb25lcyBhcmUgZnJvbSBSRkMgMTM0NS4KKyAqLworI2lmZGVmIEZFQVRfTk9STUFMCisjIGRlZmluZSBGRUFUX0RJR1JBUEhTCisvKiAjZGVmaW5lIE9MRF9ESUdSQVBIUyAqLworI2VuZGlmCisKKy8qCisgKiArbGFuZ21hcAkJJ2xhbmdtYXAnIG9wdGlvbi4gIE9ubHkgdXNlZnVsIHdoZW4geW91IHB1dCB5b3VyCisgKgkJCWtleWJvYXJkIGluIGEgc3BlY2lhbCBsYW5ndWFnZSBtb2RlLCBlLmcuIGZvciB0eXBpbmcKKyAqCQkJZ3JlZWsuCisgKi8KKyNpZmRlZiBGRUFUX0JJRworIyBkZWZpbmUgRkVBVF9MQU5HTUFQCisjZW5kaWYKKworLyoKKyAqICtrZXltYXAJCSdrZXltYXAnIG9wdGlvbi4gIEFsbG93cyB5b3UgdG8gbWFwIHR5cGVkIGtleXMgaW4KKyAqCQkJSW5zZXJ0IG1vZGUgZm9yIGEgc3BlY2lhbCBsYW5ndWFnZS4KKyAqLworI2lmZGVmIEZFQVRfQklHCisjIGRlZmluZSBGRUFUX0tFWU1BUAorI2VuZGlmCisKKy8qCisgKiArbG9jYWxtYXAJCU1hcHBpbmdzIGFuZCBhYmJyZXZpYXRpb25zIGxvY2FsIHRvIGEgYnVmZmVyLgorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgZGVmaW5lIEZFQVRfTE9DQUxNQVAKKyNlbmRpZgorCisvKgorICogK2luc2VydF9leHBhbmQJQ1RSTC1OL0NUUkwtUC9DVFJMLVggaW4gaW5zZXJ0IG1vZGUuIFRha2VzIGFib3V0CisgKgkJCTRLYnl0ZSBvZiBjb2RlLgorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgZGVmaW5lIEZFQVRfSU5TX0VYUEFORAorI2VuZGlmCisKKy8qCisgKiArY21kbGluZV9jb21wbAljb21wbGV0aW9uIG9mIG1hcHBpbmdzL2FiYnJldmlhdGlvbnMgaW4gY21kbGluZSBtb2RlLgorICoJCQlUYWtlcyBhIGZldyBLYnl0ZSBvZiBjb2RlLgorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgZGVmaW5lIEZFQVRfQ01ETF9DT01QTAorI2VuZGlmCisKKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgVklNX0JBQ0tUSUNLCQkvKiBpbnRlcm5hbCBiYWNrdGljayBleHBhbnNpb24gKi8KKyNlbmRpZgorCisvKgorICogK3RleHRvYmplY3RzCQlUZXh0IG9iamVjdHM6ICJ2YXciLCAiZGFzIiwgZXRjLgorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgZGVmaW5lIEZFQVRfVEVYVE9CSgorI2VuZGlmCisKKy8qCisgKiArdmlzdWFsCQlWaXN1YWwgbW9kZS4KKyAqICt2aXN1YWxleHRyYQkJRXh0cmEgZmVhdHVyZXMgZm9yIFZpc3VhbCBtb2RlIChtb3N0bHkgYmxvY2sgb3BlcmF0b3JzKS4KKyAqLworI2lmZGVmIEZFQVRfU01BTEwKKyMgZGVmaW5lIEZFQVRfVklTVUFMCisjIGlmZGVmIEZFQVRfTk9STUFMCisjICBkZWZpbmUgRkVBVF9WSVNVQUxFWFRSQQorIyBlbmRpZgorI2Vsc2UKKyMgaWZkZWYgRkVBVF9DTElQQk9BUkQKKyMgIHVuZGVmIEZFQVRfQ0xJUEJPQVJECS8qIGNhbid0IHVzZSBjbGlwYm9hcmQgd2l0aG91dCBWaXN1YWwgbW9kZSAqLworIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiArdmlydHVhbGVkaXQJCSd2aXJ0dWFsZWRpdCcgb3B0aW9uIGFuZCBpdHMgaW1wbGVtZW50YXRpb24KKyAqLworI2lmZGVmIEZFQVRfTk9STUFMCisjIGRlZmluZSBGRUFUX1ZJUlRVQUxFRElUCisjZW5kaWYKKworLyoKKyAqICt2cmVwbGFjZQkJImdSIiBhbmQgImdyIiBjb21tYW5kcy4KKyAqLworI2lmZGVmIEZFQVRfTk9STUFMCisjIGRlZmluZSBGRUFUX1ZSRVBMQUNFCisjZW5kaWYKKworLyoKKyAqICtjbWRsaW5lX2luZm8JJ3Nob3djbWQnIGFuZCAncnVsZXInIG9wdGlvbnMuCisgKi8KKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9DTURMX0lORk8KKyNlbmRpZgorCisvKgorICogK2xpbmVicmVhawkJJ3Nob3dicmVhaycsICdicmVha2F0JyAgYW5kICdsaW5lYnJlYWsnIG9wdGlvbnMuCisgKi8KKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9MSU5FQlJFQUsKKyNlbmRpZgorCisvKgorICogK2V4X2V4dHJhCQkiOnJldGFiIiwgIjpyaWdodCIsICI6bGVmdCIsICI6Y2VudGVyIiwgIjpub3JtYWwiLgorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgZGVmaW5lIEZFQVRfRVhfRVhUUkEKKyNlbmRpZgorCisvKgorICogK2V4dHJhX3NlYXJjaAknaGxzZWFyY2gnIGFuZCAnaW5jc2VhcmNoJyBvcHRpb25zLgorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgZGVmaW5lIEZFQVRfU0VBUkNIX0VYVFJBCisjZW5kaWYKKworLyoKKyAqICtxdWlja2ZpeAkJUXVpY2tmaXggY29tbWFuZHMuCisgKi8KKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9RVUlDS0ZJWAorI2VuZGlmCisKKy8qCisgKiArZmlsZV9pbl9wYXRoCSJnZiIgYW5kICI8Y2ZpbGU+IiBjb21tYW5kcy4KKyAqLworI2lmZGVmIEZFQVRfTk9STUFMCisjIGRlZmluZSBGRUFUX1NFQVJDSFBBVEgKKyNlbmRpZgorCisvKgorICogK2ZpbmRfaW5fcGF0aAkiW0kiICI6aXNlYXJjaCIgIl5XXkkiLCAiOmNoZWNrcGF0aCIsIGV0Yy4KKyAqLworI2lmZGVmIEZFQVRfTk9STUFMCisjIGlmZGVmIEZFQVRfU0VBUkNIUEFUSAkvKiBGRUFUX1NFQVJDSFBBVEggaXMgcmVxdWlyZWQgKi8KKyMgIGRlZmluZSBGRUFUX0ZJTkRfSUQKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogK3BhdGhfZXh0cmEJCXVwL2Rvd253YXJkcyBzZWFyY2hpbmcgaW4gJ3BhdGgnIGFuZCAndGFncycuCisgKi8KKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9QQVRIX0VYVFJBCisjZW5kaWYKKworLyoKKyAqICtyaWdodGxlZnQJCVJpZ2h0LXRvLWxlZnQgZWRpdGluZy90eXBpbmcgc3VwcG9ydC4KKyAqLworI2lmZGVmIEZFQVRfQklHCisjIGRlZmluZSBGRUFUX1JJR0hUTEVGVAorI2VuZGlmCisKKy8qCisgKiArZmFyc2kJCUZhcnNpIChQZXJzaWFuIGxhbmd1YWdlKSBLZXltYXAgc3VwcG9ydC4KKyAqCQkJUmVxdWlyZXMgRkVBVF9SSUdIVExFRlQuCisgKi8KKyNpZmRlZiBGRUFUX0JJRworIyBkZWZpbmUgRkVBVF9GS01BUAorI2VuZGlmCisjaWZkZWYgRkVBVF9GS01BUAorIyBpZm5kZWYgRkVBVF9SSUdIVExFRlQKKyMgICBkZWZpbmUgRkVBVF9SSUdIVExFRlQKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogK2FyYWJpYwkJQXJhYmljIGtleW1hcCBhbmQgc2hhcGluZyBzdXBwb3J0LgorICoJCQlSZXF1aXJlcyBGRUFUX1JJR0hUTEVGVCBhbmQgRkVBVF9NQllURS4KKyAqLworI2lmIGRlZmluZWQoRkVBVF9CSUcpICYmICFkZWZpbmVkKFdJTjE2KSAmJiBTSVpFT0ZfSU5UID49IDQgJiYgIWRlZmluZWQoRUJDRElDKQorIyBkZWZpbmUgRkVBVF9BUkFCSUMKKyNlbmRpZgorI2lmZGVmIEZFQVRfQVJBQklDCisjIGlmbmRlZiBGRUFUX1JJR0hUTEVGVAorIyAgIGRlZmluZSBGRUFUX1JJR0hUTEVGVAorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiArZW1hY3NfdGFncwkJV2hlbiBGRUFUX0VNQUNTX1RBR1MgZGVmaW5lZDogSW5jbHVkZSBzdXBwb3J0IGZvcgorICoJCQllbWFjcyBzdHlsZSBUQUdTIGZpbGUuCisgKi8KKyNpZmRlZiBGRUFUX0JJRworIyBkZWZpbmUgRkVBVF9FTUFDU19UQUdTCisjZW5kaWYKKworLyoKKyAqICt0YWdfYmluYXJ5CQlDYW4gdXNlIGEgYmluYXJ5IHNlYXJjaCBmb3IgdGhlIHRhZ3MgZmlsZS4KKyAqCisgKiBEaXNhYmxlZCBmb3IgRUJDRElDOgorICogT24gT1MvMzkwIFVuaXggd2UgaGF2ZSB0aGUgcHJvYmxlbSB0aGF0IC9iaW4vc29ydCBzb3J0cyBBU0NJSSBpbnN0ZWFkIG9mCisgKiBFQkNESUMuICBXaXRoIHRoaXMgYmluYXJ5IHNlYXJjaCBkb2Vzbid0IHdvcmssIGFzIFZJTSBleHBlY3RzIGEgdGFnIGZpbGUKKyAqIHNvcnRlZCBieSBjaGFyYWN0ZXIgdmFsdWVzLiAgSSdtIG5vdCBzdXJlIGhvdyB0byBmaXggdGhpcy4gU2hvdWxkIHdlIHJlYWxseQorICogZG8gYSBFQkNESUMgdG8gQVNDSUkgY29udmVyc2lvbiBmb3IgdGhpcz8/CisgKi8KKyNpZiBkZWZpbmVkKEZFQVRfTk9STUFMKSAmJiAhZGVmaW5lZChFQkNESUMpCisjIGRlZmluZSBGRUFUX1RBR19CSU5TCisjZW5kaWYKKworLyoKKyAqICt0YWdfb2xkX3N0YXRpYwlPbGQgc3R5bGUgc3RhdGljIHRhZ3M6ICJmaWxlOnRhZyAgZmlsZSAgLi4iLiAgU2xvd3MKKyAqCQkJZG93biB0YWcgc2VhcmNoaW5nIGEgYml0LgorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgZGVmaW5lIEZFQVRfVEFHX09MRFNUQVRJQworI2VuZGlmCisKKy8qCisgKiArdGFnX2FueV93aGl0ZQlBbGxvdyBhbnkgd2hpdGUgc3BhY2UgdG8gc2VwYXJhdGUgdGhlIGZpZWxkcyBpbiBhIHRhZ3MKKyAqCQkJZmlsZS4gIFdoZW4gbm90IGRlZmluZWQsIG9ubHkgYSBUQUIgaXMgYWxsb3dlZC4KKyAqLworLyogI2RlZmluZSBGRUFUX1RBR19BTllXSElURSAqLworCisvKgorICogK2NzY29wZQkJVW5peCBvbmx5OiBDc2NvcGUgc3VwcG9ydC4KKyAqLworI2lmIGRlZmluZWQoVU5JWCkgJiYgZGVmaW5lZChGRUFUX0JJRykgJiYgIWRlZmluZWQoRkVBVF9DU0NPUEUpICYmICFkZWZpbmVkKE1BQ09TX1gpCisjIGRlZmluZSBGRUFUX0NTQ09QRQorI2VuZGlmCisKKy8qCisgKiArZXZhbAkJQnVpbHQtaW4gc2NyaXB0IGxhbmd1YWdlIGFuZCBleHByZXNzaW9uIGV2YWx1YXRpb24sCisgKgkJCSI6bGV0IiwgIjppZiIsIGV0Yy4KKyAqLworI2lmZGVmIEZFQVRfTk9STUFMCisjIGRlZmluZSBGRUFUX0VWQUwKKyNlbmRpZgorCisvKgorICogK3VzZXJfY29tbWFuZHMJQWxsb3cgdGhlIHVzZXIgdG8gZGVmaW5lIGhpcyBvd24gY29tbWFuZHMuCisgKi8KKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9VU1JfQ01EUworI2VuZGlmCisKKy8qCisgKiArcHJpbnRlcgkJIjpoYXJkY29weSIgY29tbWFuZAorICogK3Bvc3RzY3JpcHQJCVByaW50aW5nIHVzZXMgUG9zdFNjcmlwdCBmaWxlIG91dHB1dC4KKyAqLworI2lmIGRlZmluZWQoRkVBVF9OT1JNQUwpICYmIChkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKEZFQVRfRVZBTCkpIFwKKwkmJiAhZGVmaW5lZChBTUlHQSkKKyMgZGVmaW5lIEZFQVRfUFJJTlRFUgorI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX1BSSU5URVIpICYmICgoZGVmaW5lZChNU1dJTikgJiYgZGVmaW5lZChNU1dJTlBTKSkgXAorCXx8ICghZGVmaW5lZChNU1dJTikgJiYgZGVmaW5lZChGRUFUX0VWQUwpKSkKKyMgZGVmaW5lIEZFQVRfUE9TVFNDUklQVAorI2VuZGlmCisKKy8qCisgKiArbW9kaWZ5X2ZuYW1lCW1vZGlmaWVycyBmb3IgZmlsZSBuYW1lLiAgRS5nLiwgIiU6cDpoIi4KKyAqLworI2lmZGVmIEZFQVRfTk9STUFMCisjIGRlZmluZSBGRUFUX01PRElGWV9GTkFNRQorI2VuZGlmCisKKy8qCisgKiArYXV0b2NtZAkJIjphdXRvY21kIiBjb21tYW5kCisgKi8KKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9BVVRPQ01ECisjZW5kaWYKKworLyoKKyAqICtkaWZmCQlEaXNwbGF5aW5nIGRpZmZzIGluIGEgbmljZSB3YXkuCisgKgkJCVJlcXVpcmVzICt3aW5kb3dzIGFuZCArYXV0b2NtZC4KKyAqLworI2lmIGRlZmluZWQoRkVBVF9OT1JNQUwpICYmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkKKyMgZGVmaW5lIEZFQVRfRElGRgorI2VuZGlmCisKKy8qCisgKiArdGl0bGUJCSd0aXRsZScgYW5kICdpY29uJyBvcHRpb25zCisgKiArc3RhdHVzbGluZQkJJ3N0YXR1c2xpbmUnLCAncnVsZXJmb3JtYXQnIGFuZCBzcGVjaWFsIGZvcm1hdCBvZgorICoJCQkndGl0bGVzdHJpbmcnIGFuZCAnaWNvbnN0cmluZycgb3B0aW9ucy4KKyAqICtieXRlX29mZnNldAkJJyVvJyBpbiAnc3RhdHVzbGluZScgYW5kIGJ1aWx0aW4gZnVuY3Rpb25zIGxpbmUyYnl0ZSgpCisgKgkJCWFuZCBieXRlMmxpbmUoKS4KKyAqCQkJTm90ZTogUmVxdWlyZWQgZm9yIE1hY2ludG9zaC4KKyAqLworI2lmIGRlZmluZWQoRkVBVF9OT1JNQUwpICYmICFkZWZpbmVkKE1TRE9TKQorIyBkZWZpbmUgRkVBVF9USVRMRQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9TVExfT1BUCisjIGlmbmRlZiBGRUFUX0NNRExfSU5GTworIyAgZGVmaW5lIEZFQVRfQ01ETF9JTkZPCS8qICdydWxlcicgaXMgcmVxdWlyZWQgZm9yICdzdGF0dXNsaW5lJyAqLworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9CWVRFT0ZGCisjZW5kaWYKKworLyoKKyAqICt3aWxkaWdub3JlCQknd2lsZGlnbm9yZScgYW5kICdiYWNrdXBza2lwJyBvcHRpb25zCisgKgkJCU5lZWRlZCBmb3IgVW5peCB0byBtYWtlICJjcm9udGFiIC1lIiB3b3JrLgorICovCisjaWYgZGVmaW5lZChGRUFUX05PUk1BTCkgfHwgZGVmaW5lZChVTklYKQorIyBkZWZpbmUgRkVBVF9XSUxESUdOCisjZW5kaWYKKworLyoKKyAqICt3aWxkbWVudQkJJ3dpbGRtZW51JyBvcHRpb24KKyAqLworI2lmIGRlZmluZWQoRkVBVF9OT1JNQUwpICYmIGRlZmluZWQoRkVBVF9XSU5ET1dTKQorIyBkZWZpbmUgRkVBVF9XSUxETUVOVQorI2VuZGlmCisKKy8qCisgKiArb3NmaWxldHlwZQkJZmlsZXR5cGUgY2hlY2tpbmcgaW4gYXV0b2NvbW1hbmQgcGF0dGVybnMuCisgKgkJCU9ubHkgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgZmlsZXR5cGVzIChSSVNDIE9TKS4KKyAqLworI2lmIDAKKyMgZGVmaW5lIEZFQVRfT1NGSUxFVFlQRQorIyBkZWZpbmUgREZMVF9PRlQgIlRleHQiCisjZW5kaWYKKworLyoKKyAqICt2aW1pbmZvCQlyZWFkaW5nL3dyaXRpbmcgdGhlIHZpbWluZm8gZmlsZS4gVGFrZXMgYWJvdXQgOEtieXRlCisgKgkJCW9mIGNvZGUuCisgKiBWSU1JTkZPX0ZJTEUJCUxvY2F0aW9uIG9mIHVzZXIgLnZpbWluZm8gZmlsZSAoc2hvdWxkIHN0YXJ0IHdpdGggJCkuCisgKiBWSU1JTkZPX0ZJTEUyCUxvY2F0aW9uIG9mIGFsdGVybmF0ZSB1c2VyIC52aW1pbmZvIGZpbGUuCisgKi8KKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9WSU1JTkZPCisvKiAjZGVmaW5lIFZJTUlORk9fRklMRQkiJEhPTUUvZm9vLy52aW1pbmZvIiAqLworLyogI2RlZmluZSBWSU1JTkZPX0ZJTEUyICJ+L2Jhci8udmltaW5mbyIgKi8KKyNlbmRpZgorCisvKgorICogK3N5bnRheAkJc3ludGF4IGhpZ2hsaWdodGluZy4gIFdoZW4gdXNpbmcgdGhpcywgaXQncyBhIGdvb2QKKyAqCQkJaWRlYSB0byBoYXZlICthdXRvY21kIGFuZCArZXZhbCB0b28uCisgKi8KKyNpZiBkZWZpbmVkKEZFQVRfTk9STUFMKSB8fCBkZWZpbmVkKFBST1RPKQorIyBkZWZpbmUgRkVBVF9TWU5fSEwKKyNlbmRpZgorCisvKgorICogK2J1aWx0aW5fdGVybXMJQ2hvb3NlIG9uZSBvdXQgb2YgdGhlIGZvbGxvd2luZyBmb3VyOgorICoKKyAqIE5PX0JVSUxUSU5fVENBUFMJRG8gbm90IGluY2x1ZGUgYW55IGJ1aWx0aW4gdGVybWNhcCBlbnRyaWVzICh1c2VkIG9ubHkKKyAqCQkJd2l0aCBIQVZFX1RHRVRFTlQgZGVmaW5lZCkuCisgKgorICogKG5vdGhpbmcpCQlNYWNoaW5lIHNwZWNpZmljIHRlcm1jYXAgZW50cmllcyB3aWxsIGJlIGluY2x1ZGVkLgorICoJCQlUaGlzIGlzIGRlZmF1bHQgZm9yIHdpbjE2IHRvIHNhdmUgc3RhdGljIGRhdGEuCisgKgorICogU09NRV9CVUlMVElOX1RDQVBTCUluY2x1ZGUgbW9zdCB1c2VmdWwgYnVpbHRpbiB0ZXJtY2FwIGVudHJpZXMgKHVzZWQgb25seQorICoJCQl3aXRoIE5PX0JVSUxUSU5fVENBUFMgbm90IGRlZmluZWQpLgorICoJCQlUaGlzIGlzIHRoZSBkZWZhdWx0LgorICoKKyAqIEFMTF9CVUlMVElOX1RDQVBTCUluY2x1ZGUgYWxsIGJ1aWx0aW4gdGVybWNhcCBlbnRyaWVzCisgKgkJCSh1c2VkIG9ubHkgd2l0aCBOT19CVUlMVElOX1RDQVBTIG5vdCBkZWZpbmVkKS4KKyAqLworI2lmZGVmIEhBVkVfVEdFVEVOVAorLyogI2RlZmluZSBOT19CVUlMVElOX1RDQVBTICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5PX0JVSUxUSU5fVENBUFMpICYmICFkZWZpbmVkKEZFQVRfR1VJX1cxNikKKyMgaWZkZWYgRkVBVF9CSUcKKyMgIGRlZmluZSBBTExfQlVJTFRJTl9UQ0FQUworIyBlbHNlCisjICBkZWZpbmUgU09NRV9CVUlMVElOX1RDQVBTCQkvKiBkZWZhdWx0ICovCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqICtsaXNwaW5kZW50CQlsaXNwIGluZGVudGluZyAoRnJvbSBFcmljIEZpc2NoZXIpLgorICogK2NpbmRlbnQJCUMgY29kZSBpbmRlbnRpbmcgKEZyb20gRXJpYyBGaXNjaGVyKS4KKyAqICtzbWFydGluZGVudAkJc21hcnQgQyBjb2RlIGluZGVudGluZyB3aGVuIHRoZSAnc2knIG9wdGlvbiBpcyBzZXQuCisgKgorICogVGhlc2UgdHdvIG5lZWQgdG8gYmUgZGVmaW5lZCB3aGVuIG1ha2luZyBwcm90b3R5cGVzLgorICovCisjaWYgZGVmaW5lZChGRUFUX05PUk1BTCkgfHwgZGVmaW5lZChQUk9UTykKKyMgZGVmaW5lIEZFQVRfTElTUAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTk9STUFMKSB8fCBkZWZpbmVkKFBST1RPKQorIyBkZWZpbmUgRkVBVF9DSU5ERU5UCisjZW5kaWYKKworI2lmZGVmIEZFQVRfTk9STUFMCisjIGRlZmluZSBGRUFUX1NNQVJUSU5ERU5UCisjZW5kaWYKKworLyoKKyAqICtjb21tZW50cwkJJ2NvbW1lbnRzJyBvcHRpb24uCisgKi8KKyNpZmRlZiBGRUFUX05PUk1BTAorIyBkZWZpbmUgRkVBVF9DT01NRU5UUworI2VuZGlmCisKKy8qCisgKiArY3J5cHR2CQlFbmNyeXB0aW9uIChieSBNb2hzaW4gQWhtZWQgPG1vc2hAc2FzaS5jb20+KS4KKyAqLworI2lmIGRlZmluZWQoRkVBVF9OT1JNQUwpIHx8IGRlZmluZWQoUFJPVE8pCisjIGRlZmluZSBGRUFUX0NSWVBUCisjZW5kaWYKKworLyoKKyAqICtta3Nlc3Npb24JCSI6bWtzZXNzaW9uIiBjb21tYW5kLgorICoJCQlSZXF1aXJlcyArd2luZG93cyBhbmQgK3ZlcnRzcGxpdC4KKyAqLworI2lmIGRlZmluZWQoRkVBVF9OT1JNQUwpICYmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfVkVSVFNQTElUKQorIyBkZWZpbmUgRkVBVF9TRVNTSU9OCisjZW5kaWYKKworLyoKKyAqICttdWx0aV9sYW5nCQlNdWx0aSBsYW5ndWFnZSBzdXBwb3J0LiAiOm1lbnV0cmFucyIsICI6bGFuZ3VhZ2UiLCBldGMuCisgKiArZ2V0dGV4dAkJTWVzc2FnZSB0cmFuc2xhdGlvbnMgKHJlcXVpcmVzICttdWx0aV9sYW5nKQorICoJCQkob25seSB3aGVuICJsYW5nIiBhcmNoaXZlIHVucGFja2VkKQorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgZGVmaW5lIEZFQVRfTVVMVElfTEFORworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0dFVFRFWFQpICYmIGRlZmluZWQoRkVBVF9NVUxUSV9MQU5HKSBcCisJJiYgKGRlZmluZWQoSEFWRV9MT0NBTEVfSCkgfHwgZGVmaW5lZChYX0xPQ0FMRSkpCisjIGRlZmluZSBGRUFUX0dFVFRFWFQKKyNlbmRpZgorCisvKgorICogK211bHRpX2J5dGUJCUdlbmVyaWMgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgaGFuZGxpbmcuICBEb2Vzbid0IHdvcmsKKyAqCQkJd2l0aCAxNiBiaXQgaW50cy4gIFJlcXVpcmVkIGZvciBHVEsrIDIuCisgKgorICogRGlzYWJsZWQgZm9yIEVCQ0RJQzoKKyAqIE11bHRpYnl0ZSBzdXBwb3J0IGRvZXNuJ3Qgd29yayBvbiBPUzM5MCBVbml4IGN1cnJlbnRseS4KKyAqLworI2lmIChkZWZpbmVkKEZFQVRfQklHKSB8fCBkZWZpbmVkKEhBVkVfR1RLMikgfHwgZGVmaW5lZChGRUFUX0FSQUJJQykpIFwKKwkmJiAhZGVmaW5lZChGRUFUX01CWVRFKSAmJiAhZGVmaW5lZChXSU4xNikgXAorCSYmIFNJWkVPRl9JTlQgPj0gNCAmJiAhZGVmaW5lZChFQkNESUMpCisjIGRlZmluZSBGRUFUX01CWVRFCisjZW5kaWYKKworLyoKKyAqICttdWx0aV9ieXRlX2ltZQlXaW4zMiBJTUUgaW5wdXQgbWV0aG9kLiAgUmVxdWlyZXMgK211bHRpX2J5dGUuCisgKgkJCU9ubHkgZm9yIGZhci1lYXN0IFdpbmRvd3MsIHNvIElNRSBjYW4gYmUgdXNlZCB0byBpbnB1dAorICoJCQljaGFycy4gIE5vdCB0ZXN0ZWQgbXVjaCEKKyAqLworI2lmIGRlZmluZWQoRkVBVF9HVUlfVzMyKSAmJiAhZGVmaW5lZChGRUFUX01CWVRFX0lNRSkKKy8qICNkZWZpbmUgRkVBVF9NQllURV9JTUUgKi8KKyMgZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9NQllURV9JTUUpICYmICFkZWZpbmVkKEZFQVRfTUJZVEUpCisjIGRlZmluZSBGRUFUX01CWVRFCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9NQllURSkgJiYgU0laRU9GX0lOVCA8IDQgJiYgIWRlZmluZWQoUFJPVE8pCisJRXJyb3I6IENhbiBvbmx5IGhhbmRsZSBtdWx0aS1ieXRlIGZlYXR1cmUgd2l0aCAzMiBiaXQgaW50IG9yIGxhcmdlcgorI2VuZGlmCisKKy8qIFVzZSBpY29udigpIHdoZW4gaXQncyBhdmFpbGFibGUuICovCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiAoKGRlZmluZWQoSEFWRV9JQ09OVl9IKSAmJiBkZWZpbmVkKEhBVkVfSUNPTlYpKSBcCisJCXx8IGRlZmluZWQoRFlOQU1JQ19JQ09OVikpCisjIGRlZmluZSBVU0VfSUNPTlYKKyNlbmRpZgorCisvKgorICogK3hpbQkJCVggSW5wdXQgTWV0aG9kLiAgRm9yIGVudGVyaW5nIHNwZWNpYWwgbGFuZ3VhZ2VzIGxpa2UKKyAqCQkJY2hpbmVzZSBhbmQgSmFwYW5lc2UuCisgKiAraGFuZ3VsX2lucHV0CUludGVybmFsIEhhbmd1bCBpbnB1dCBtZXRob2QuICBNdXN0IGJlIGluY2x1ZGVkCisgKgkJCXRocm91Z2ggY29uZmlndXJlOiAiLS1lbmFibGUtaGFuZ3VsaW4iCisgKiBCb3RoIGFyZSBmb3IgVW5peCBhbmQgVk1TIG9ubHkuCisgKi8KKyNpZm5kZWYgRkVBVF9YSU0KKy8qICNkZWZpbmUgRkVBVF9YSU0gKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1hJTSkgJiYgZGVmaW5lZChGRUFUX0dVSV9HVEspCisjIGRlZmluZSBVU0VfWElNIDEJCS8qIG5lZWRlZCBmb3IgR1RLIGluY2x1ZGUgZmlsZXMgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9IQU5HVUxJTgorIyBkZWZpbmUgSEFOR1VMX0RFRkFVTFRfS0VZQk9BUkQgMgkvKiAyIG9yIDMgYnVsc2lrIGtleWJvYXJkICovCisjIGRlZmluZSBFU0NfQ0hHX1RPX0VOR19NT0RFCQkvKiBpZiBkZWZpbmVkLCB3aGVuIEVTQyBwcmVzc2VkLAorCQkJCQkgKiB0dXJuIHRvIGVuZ2xpc2ggbW9kZQorCQkJCQkgKi8KKyMgaWYgIWRlZmluZWQoRkVBVF9YRk9OVFNFVCkgJiYgZGVmaW5lZChIQVZFX1gxMSkKKyMgIGRlZmluZSBGRUFUX1hGT05UU0VUCQkJLyogSGFuZ3VsIGlucHV0IHJlcXVpcmVzIHhmb250c2V0ICovCisjIGVuZGlmCisjIGlmIGRlZmluZWQoRkVBVF9YSU0pICYmICFkZWZpbmVkKExJTlQpCisJRXJyb3I6IFlvdSBzaG91bGQgc2VsZWN0IG9ubHkgT05FIG9mIFhJTSBhbmQgSEFOR1VMIElOUFVUCisjIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfSEFOR1VMSU4pIHx8IGRlZmluZWQoRkVBVF9YSU0pCisvKiAjIGRlZmluZSBYX0xPQ0FMRSAqLwkJCS8qIGZvciBPUyB3aXRoIGluY29tcGxldGUgbG9jYWxlCisJCQkJCSAgIHN1cHBvcnQsIGxpa2Ugb2xkIGxpbnV4IHZlcnNpb25zLiAqLworLyogIyBkZWZpbmUgU0xPV19YU0VSVkVSICovCQkvKiBmb3IgZXh0cmVtZWx5IHNsb3cgWCBzZXJ2ZXIgKi8KKyNlbmRpZgorCisvKgorICogK3hmb250c2V0CQlYIGZvbnRzZXQgc3VwcG9ydC4gIEZvciBvdXRwdXR0aW5nIHdpZGUgY2hhcmFjdGVycy4KKyAqLworI2lmbmRlZiBGRUFUX1hGT05UU0VUCisjIGlmIGRlZmluZWQoRkVBVF9NQllURSkgJiYgZGVmaW5lZChIQVZFX1gxMSkgJiYgIWRlZmluZWQoSEFWRV9HVEsyKQorIyAgZGVmaW5lIEZFQVRfWEZPTlRTRVQKKyMgZWxzZQorLyogIyAgZGVmaW5lIEZFQVRfWEZPTlRTRVQgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogK2xpYmNhbGwJCWxpYmNhbGwoKSBmdW5jdGlvbgorICovCisvKiBVc2luZyBkbG9wZW4oKSBhbHNvIHJlcXVpcmVzIGRsc3ltKCkgdG8gYmUgYXZhaWxhYmxlLiAqLworI2lmIGRlZmluZWQoSEFWRV9ETE9QRU4pICYmIGRlZmluZWQoSEFWRV9ETFNZTSkKKyMgZGVmaW5lIFVTRV9ETE9QRU4KKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9FVkFMKSAmJiAoZGVmaW5lZChXSU4zMjY0KSB8fCAoKGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpKSBcCisJJiYgKGRlZmluZWQoVVNFX0RMT1BFTikgfHwgZGVmaW5lZChIQVZFX1NITF9MT0FEKSkpKQorIyBkZWZpbmUgRkVBVF9MSUJDQUxMCisjZW5kaWYKKworLyoKKyAqICtzY3JvbGxiaW5kCQlzeW5jaHJvbml6YXRpb24gb2Ygc3BsaXQgd2luZG93cworICovCisjaWYgZGVmaW5lZChGRUFUX05PUk1BTCkgJiYgZGVmaW5lZChGRUFUX1dJTkRPV1MpCisjIGRlZmluZSBGRUFUX1NDUk9MTEJJTkQKKyNlbmRpZgorCisvKgorICogK21lbnUJCSI6bWVudSIgY29tbWFuZAorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgZGVmaW5lIEZFQVRfTUVOVQorIyBpZmRlZiBGRUFUX0dVSV9XMzIKKyMgIGRlZmluZSBGRUFUX1RFQVJPRkYKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gdXNlIFhQTS4gKi8KKyNpZiAoZGVmaW5lZChIQVZFX1hNX1hQTVBfSCkgJiYgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikpIFwKKwkJfHwgZGVmaW5lZChIQVZFX1gxMV9YUE1fSCkKKyMgZGVmaW5lIEhBVkVfWFBNIDEKKyNlbmRpZgorCisvKgorICogK3Rvb2xiYXIJCUluY2x1ZGUgY29kZSBmb3IgYSB0b29sYmFyIChmb3IgdGhlIFdpbjMyIEdVSSwgR1RLCisgKgkJCWFsd2F5cyBoYXMgaXQpLiAgQnV0IG9ubHkgaWYgbWVudXMgYXJlIGVuYWJsZWQuCisgKi8KKyNpZiBkZWZpbmVkKEZFQVRfTk9STUFMKSAmJiBkZWZpbmVkKEZFQVRfTUVOVSkgXAorCSYmIChkZWZpbmVkKEZFQVRfR1VJX0dUSykgXAorCQl8fCBkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSBcCisJCXx8ICgoZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgfHwgZGVmaW5lZChGRUFUX0dVSV9BVEhFTkEpKSBcCisJCQkmJiBkZWZpbmVkKEhBVkVfWFBNKSkgXAorCQl8fCBkZWZpbmVkKEZFQVRfR1VJX1BIT1RPTikpCisjIGRlZmluZSBGRUFUX1RPT0xCQVIKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiAhZGVmaW5lZChGRUFUX01FTlUpCisjIGRlZmluZSBGRUFUX01FTlUKKyNlbmRpZgorCisvKgorICogK2Jyb3dzZQkJIjpicm93c2UiIGNvbW1hbmQuCisgKgorICogQlJPV1NFX0NVUlJCVUYJT3BlbiBmaWxlIGJyb3dzZXIgaW4gdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudAorICoJCQlidWZmZXIsIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICovCisjaWYgZGVmaW5lZChGRUFUX05PUk1BTCkgJiYgKGRlZmluZWQoRkVBVF9HVUlfTVNXSU4pIHx8IGRlZmluZWQoRkVBVF9HVUlfTU9USUYpIHx8IGRlZmluZWQoRkVBVF9HVUlfQVRIRU5BKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykgfHwgZGVmaW5lZChGRUFUX0dVSV9QSE9UT04pIHx8IGRlZmluZWQoRkVBVF9HVUlfTUFDKSkKKyMgZGVmaW5lIEZFQVRfQlJPV1NFCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfTk9STUFMKSAmJiBkZWZpbmVkKEZFQVRfR1VJX01TV0lOKQorIyBkZWZpbmUgQlJPV1NFX0NVUlJCVUYKKyNlbmRpZgorCisvKgorICogK2RpYWxvZ19ndWkJCVVzZSBHVUkgZGlhbG9nLgorICogK2RpYWxvZ19jb24JCU1heSB1c2UgQ29uc29sZSBkaWFsb2cuCisgKgkJCVdoZW4gbm9uZSBvZiB0aGVzZSBkZWZpbmVkIHRoZXJlIGlzIG5vIGRpYWxvZyBzdXBwb3J0LgorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgaWYgKChkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkgfHwgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikpIFwKKwkJJiYgZGVmaW5lZChIQVZFX1gxMV9YUE1fSCkpIFwKKwl8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKSBcCisJfHwgZGVmaW5lZChGRUFUX0dVSV9NU1dJTikgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfTUFDKQorIyAgZGVmaW5lIEZFQVRfQ09OX0RJQUxPRworIyAgZGVmaW5lIEZFQVRfR1VJX0RJQUxPRworIyBlbHNlCisjICBkZWZpbmUgRkVBVF9DT05fRElBTE9HCisjIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpICYmIChkZWZpbmVkKEZFQVRfR1VJX01PVElGKSBcCisJfHwgZGVmaW5lZChGRUFUX0dVSV9BVEhFTkEpIHx8IGRlZmluZWQoRkVBVF9HVUlfR1RLKSkKKy8qIG5lZWQgYSBkaWFsb2cgdG8gc2hvdyBlcnJvciBtZXNzYWdlcyB3aGVuIHN0YXJ0aW5nIGZyb20gdGhlIGRlc2t0b3AgKi8KKyMgZGVmaW5lIEZFQVRfR1VJX0RJQUxPRworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpICYmIFwKKwkoZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgfHwgZGVmaW5lZChGRUFUX0dVSV9BVEhFTkEpIFwKKwkgfHwgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfTVNXSU4pIFwKKwkgfHwgZGVmaW5lZChGRUFUX0dVSV9QSE9UT04pIHx8IGRlZmluZWQoRkVBVF9HVUlfTUFDKSkKKyMgZGVmaW5lIEZFQVRfR1VJX1RFWFRESUFMT0cKKyNlbmRpZgorCisvKiBNYWMgc3BlY2lmaWMgdGhpbmc6IENvZGV3YXJyaW9yIGludGVyZmFjZS4gKi8KKyNpZmRlZiBGRUFUX0dVSV9NQUMKKyMgZGVmaW5lIEZFQVRfQ1dfRURJVE9SCisjZW5kaWYKKworLyoKKyAqIFByZWZlcmVuY2VzOgorICogPT09PT09PT09PT09CisgKi8KKworLyoKKyAqICt3cml0ZWJhY2t1cAkJJ3dyaXRlYmFja3VwJyBpcyBkZWZhdWx0IG9uOgorICoJCQlVc2UgYSBiYWNrdXAgZmlsZSB3aGlsZSBvdmVyd3JpdGluZyBhIGZpbGUuICBCdXQgaXQncworICoJCQlkZWxldGVkIGFnYWluIHdoZW4gJ2JhY2t1cCcgaXMgbm90IHNldC4gIENoYW5naW5nIHRoaXMKKyAqCQkJaXMgc3Ryb25nbHkgZGlzY291cmFnZWQ6IFlvdSBjYW4gbG9vc2UgYWxsIHlvdXIKKyAqCQkJY2hhbmdlcyB3aGVuIHRoZSBjb21wdXRlciBjcmFzaGVzIHdoaWxlIHdyaXRpbmcgdGhlCisgKgkJCWZpbGUuCisgKgkJCVZNUyBub3RlOiBJdCBkb2VzIHdvcmsgb24gVk1TIGFzIHdlbGwsIGJ1dCBiZWNhdXNlIG9mCisgKgkJCXZlcnNpb24gaGFuZGxpbmcgaXQgZG9lcyBub3QgaGF2ZSBhbnkgcHVycG9zZS4KKyAqCQkJT3ZlcndyaXRlIHdpbGwgd3JpdGUgdG8gdGhlIG5ldyB2ZXJzaW9uLgorICovCisjaWZuZGVmIFZNUworIyBkZWZpbmUgRkVBVF9XUklURUJBQ0tVUAorI2VuZGlmCisKKy8qCisgKiAreHRlcm1fc2F2ZQkJVGhlIHRfdGkgYW5kIHRfdGUgZW50cmllcyBmb3IgdGhlIGJ1aWx0aW4geHRlcm0gd2lsbAorICoJCQliZSBzZXQgdG8gc2F2ZSB0aGUgc2NyZWVuIHdoZW4gc3RhcnRpbmcgVmltIGFuZAorICoJCQlyZXN0b3JpbmcgaXQgd2hlbiBleGl0aW5nLgorICovCisvKiAjZGVmaW5lIEZFQVRfWFRFUk1fU0FWRSAqLworCisvKgorICogREVCVUcJCU91dHB1dCBhIGxvdCBvZiBkZWJ1Z2dpbmcgZ2FyYmFnZS4KKyAqLworLyogI2RlZmluZSBERUJVRyAqLworCisvKgorICogU1RBUlRVUFRJTUUJCVRpbWUgdGhlIHN0YXJ0dXAgcHJvY2Vzcy4gIFdyaXRlcyBhICJ2aW1zdGFydHVwIiBmaWxlCisgKgkJCXdpdGggdGltZXN0YW1wcy4KKyAqLworLyogI2RlZmluZSBTVEFSVFVQVElNRSAidmltc3RhcnR1cCIgKi8KKworLyoKKyAqIE1FTV9QUk9GSUxFCQlEZWJ1Z2dpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcuCisgKi8KKy8qICNkZWZpbmUgTUVNX1BST0ZJTEUgKi8KKworLyoKKyAqIFZJTVJDX0ZJTEUJCU5hbWUgb2YgdGhlIC52aW1yYyBmaWxlIGluIGN1cnJlbnQgZGlyLgorICovCisvKiAjZGVmaW5lIFZJTVJDX0ZJTEUJIi52aW1yYyIgKi8KKworLyoKKyAqIEVYUkNfRklMRQkJTmFtZSBvZiB0aGUgLmV4cmMgZmlsZSBpbiBjdXJyZW50IGRpci4KKyAqLworLyogI2RlZmluZSBFWFJDX0ZJTEUJIi5leHJjIiAqLworCisvKgorICogR1ZJTVJDX0ZJTEUJCU5hbWUgb2YgdGhlIC5ndmltcmMgZmlsZSBpbiBjdXJyZW50IGRpci4KKyAqLworLyogI2RlZmluZSBHVklNUkNfRklMRQkiLmd2aW1yYyIgKi8KKworLyoKKyAqIFZJRVdfRklMRQkJTmFtZSBvZiB0aGUgZGVmYXVsdCAiOm1rdmlldyIgZmlsZS4KKyAqLworI2RlZmluZSBWSUVXX0ZJTEUJIlZpZXcudmltIgorCisvKgorICogU0VTU0lPTl9GSUxFCQlOYW1lIG9mIHRoZSBkZWZhdWx0ICI6bWtzZXNzaW9uIiBmaWxlLgorICovCisjZGVmaW5lIFNFU1NJT05fRklMRQkiU2Vzc2lvbi52aW0iCisKKy8qCisgKiBVU1JfVklNUkNfRklMRQlOYW1lIG9mIHRoZSB1c2VyIC52aW1yYyBmaWxlLgorICogVVNSX1ZJTVJDX0ZJTEUyCU5hbWUgb2YgYWx0ZXJuYXRlIHVzZXIgLnZpbXJjIGZpbGUuCisgKiBVU1JfVklNUkNfRklMRTMJTmFtZSBvZiBhbHRlcm5hdGUgdXNlciAudmltcmMgZmlsZS4KKyAqLworLyogI2RlZmluZSBVU1JfVklNUkNfRklMRQkifi9mb28vLnZpbXJjIiAqLworLyogI2RlZmluZSBVU1JfVklNUkNfRklMRTIJIn4vYmFyLy52aW1yYyIgKi8KKy8qICNkZWZpbmUgVVNSX1ZJTVJDX0ZJTEUzCSIkVklNLy52aW1yYyIgKi8KKworLyoKKyAqIEVWSU1fRklMRQkJTmFtZSBvZiB0aGUgZXZpbS52aW0gc2NyaXB0IGZpbGUKKyAqLworLyogI2RlZmluZSBFVklNX0ZJTEUJCSIkVklNUlVOVElNRS9ldmltLnZpbSIgKi8KKworLyoKKyAqIFVTUl9FWFJDX0ZJTEUJTmFtZSBvZiB0aGUgdXNlciAuZXhyYyBmaWxlLgorICogVVNSX0VYUkNfRklMRTIJTmFtZSBvZiB0aGUgYWx0ZXJuYXRlIHVzZXIgLmV4cmMgZmlsZS4KKyAqLworLyogI2RlZmluZSBVU1JfRVhSQ19GSUxFCSJ+L2Zvby8uZXhyYyIgKi8KKy8qICNkZWZpbmUgVVNSX0VYUkNfRklMRTIJIn4vYmFyLy5leHJjIiAqLworCisvKgorICogVVNSX0dWSU1SQ19GSUxFCU5hbWUgb2YgdGhlIHVzZXIgLmd2aW1yYyBmaWxlLgorICogVVNSX0dWSU1SQ19GSUxFMglOYW1lIG9mIHRoZSBhbHRlcm5hdGUgdXNlciAuZ3ZpbXJjIGZpbGUuCisgKi8KKy8qICNkZWZpbmUgVVNSX0dWSU1SQ19GSUxFCSJ+L2Zvby8uZ3ZpbXJjIiAqLworLyogI2RlZmluZSBVU1JfR1ZJTVJDX0ZJTEUyCSJ+L2Jhci8uZ3ZpbXJjIiAqLworLyogI2RlZmluZSBVU1JfR1ZJTVJDX0ZJTEUzCSIkVklNLy5ndmltcmMiICovCisKKy8qCisgKiBTWVNfVklNUkNfRklMRQlOYW1lIG9mIHRoZSBzeXN0ZW0td2lkZSAudmltcmMgZmlsZS4KKyAqLworLyogI2RlZmluZSBTWVNfVklNUkNfRklMRQkiL2V0Yy92aW1yYyIgKi8KKworLyoKKyAqIFNZU19HVklNUkNfRklMRQlOYW1lIG9mIHRoZSBzeXN0ZW0td2lkZSAuZ3ZpbXJjIGZpbGUuCisgKi8KKy8qICNkZWZpbmUgU1lTX0dWSU1SQ19GSUxFCSIvZXRjL2d2aW1yYyIgKi8KKworLyoKKyAqIERGTFRfSEVMUEZJTEUJTmFtZSBvZiB0aGUgaGVscCBmaWxlLgorICovCisvKiAjIGRlZmluZSBERkxUX0hFTFBGSUxFCSIkVklNUlVOVElNRS9kb2MvaGVscC50eHQuZ3oiICovCisKKy8qCisgKiBGaWxlIG5hbWVzIGZvcjoKKyAqIEZJTEVUWVBFX0ZJTEUJc3dpdGNoIG9uIGZpbGUgdHlwZSBkZXRlY3Rpb24KKyAqIEZUUExVR0lOX0ZJTEUJc3dpdGNoIG9uIGxvYWRpbmcgZmlsZXR5cGUgcGx1Z2luIGZpbGVzCisgKiBJTkRFTlRfRklMRQkJc3dpdGNoIG9uIGxvYWRpbmcgaW5kZW50IGZpbGVzCisgKiBGVE9GRl9GSUxFCQlzd2l0Y2ggb2ZmIGZpbGUgdHlwZSBkZXRlY3Rpb24KKyAqIEZUUExVR09GX0ZJTEUJc3dpdGNoIG9mZiBsb2FkaW5nIHNldHRpbmdzIGZpbGVzCisgKiBJTkRPRkZfRklMRQkJc3dpdGNoIG9mZiBsb2FkaW5nIGluZGVudCBmaWxlcworICovCisvKiAjIGRlZmluZSBGSUxFVFlQRV9GSUxFCSJmaWxldHlwZS52aW0iICovCisvKiAjIGRlZmluZSBGVFBMVUdJTl9GSUxFCSJmdHBsdWdpbi52aW0iICovCisvKiAjIGRlZmluZSBJTkRFTlRfRklMRQkJImluZGVudC52aW0iICovCisvKiAjIGRlZmluZSBGVE9GRl9GSUxFCQkiZnRvZmYudmltIiAqLworLyogIyBkZWZpbmUgRlRQTFVHT0ZfRklMRQkiZnRwbHVnb2YudmltIiAqLworLyogIyBkZWZpbmUgSU5ET0ZGX0ZJTEUJCSJpbmRvZmYudmltIiAqLworCisvKgorICogU1lTX01FTlVfRklMRQlOYW1lIG9mIHRoZSBkZWZhdWx0IG1lbnUudmltIGZpbGUuCisgKi8KKy8qICMgZGVmaW5lIFNZU19NRU5VX0ZJTEUJIiRWSU1SVU5USU1FL21lbnUudmltIiAqLworCisvKgorICogU1lTX09QVFdJTl9GSUxFCU5hbWUgb2YgdGhlIGRlZmF1bHQgb3B0d2luLnZpbSBmaWxlLgorICovCisjaWZuZGVmIFNZU19PUFRXSU5fRklMRQorIyBkZWZpbmUgU1lTX09QVFdJTl9GSUxFCSIkVklNUlVOVElNRS9vcHR3aW4udmltIgorI2VuZGlmCisKKy8qCisgKiBTWU5UQVhfRk5BTUUJCU5hbWUgb2YgYSBzeW50YXggZmlsZSwgd2hlcmUgJXMgaXMgdGhlIHN5bnRheCBuYW1lLgorICovCisvKiAjZGVmaW5lIFNZTlRBWF9GTkFNRQkiL2Zvby8lcy52aW0iICovCisKKy8qCisgKiBSVU5USU1FX0RJUk5BTUUJR2VuZXJpYyBuYW1lIGZvciB0aGUgZGlyZWN0b3J5IG9mIHRoZSBydW50aW1lIGZpbGVzLgorICovCisjaWZuZGVmIFJVTlRJTUVfRElSTkFNRQorIyBkZWZpbmUgUlVOVElNRV9ESVJOQU1FICJydW50aW1lIgorI2VuZGlmCisKKy8qCisgKiBSVU5USU1FX0dMT0JBTAlEaXJlY3RvcnkgbmFtZSBmb3IgZ2xvYmFsIFZpbSBydW50aW1lIGRpcmVjdG9yeS4KKyAqCQkJRG9uJ3QgZGVmaW5lIHRoaXMgaWYgdGhlIHByZXByb2Nlc3NvciBjYW4ndCBoYW5kbGUKKyAqCQkJc3RyaW5nIGNvbmNhdGVuYXRpb24uCisgKgkJCUFsc28gc2V0IGJ5ICItLXdpdGgtZ2xvYmFsLXJ1bnRpbWUiIGNvbmZpZ3VyZSBhcmd1bWVudC4KKyAqLworLyogI2RlZmluZSBSVU5USU1FX0dMT0JBTCAiL2V0Yy92aW0iICovCisKKy8qCisgKiBNT0RJRklFRF9CWQkJTmFtZSBvZiB3aG8gbW9kaWZpZWQgVmltLiAgUmVxdWlyZWQgd2hlbiBkaXN0cmlidXRpbmcKKyAqCQkJYSBtb2RpZmVkIHZlcnNpb24gb2YgVmltLgorICoJCQlBbHNvIGZyb20gdGhlICItLXdpdGgtbW9kaWZpZWQtYnkiIGNvbmZpZ3VyZSBhcmd1bWVudC4KKyAqLworLyogI2RlZmluZSBNT0RJRklFRF9CWSAiSm9obiBEb2UiICovCisKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudDoKKyAqID09PT09PT09PT09PT09PT09PQorICovCisKKy8qCisgKiArZm9yawkJVW5peCBvbmx5OiBmb3JrKCkgc3VwcG9ydCAoZGV0ZWN0ZWQgYnkgY29uZmlndXJlKQorICogK3N5c3RlbQkJVXNlIHN5c3RlbSgpIGluc3RlYWQgb2YgZm9yay9leGVjIGZvciBzdGFydGluZyBhCisgKgkJCXNoZWxsLiAgRG9lc24ndCB3b3JrIGZvciB0aGUgR1VJIQorICovCisvKiAjZGVmaW5lIFVTRV9TWVNURU0gKi8KKworLyoKKyAqICtYMTEJCQlVbml4IG9ubHkuICBJbmNsdWRlIGNvZGUgZm9yIHh0ZXJtIHRpdGxlIHNhdmluZyBhbmQgWAorICoJCQljbGlwYm9hcmQuICBPbmx5IHdvcmtzIGlmIEhBVkVfWDExIGlzIGFsc28gZGVmaW5lZC4KKyAqLworI2lmIGRlZmluZWQoRkVBVF9OT1JNQUwpIHx8IGRlZmluZWQoRkVBVF9HVUlfTU9USUYpIHx8IGRlZmluZWQoRkVBVF9HVUlfQVRIRU5BKQorIyBkZWZpbmUgV0FOVF9YMTEKKyNlbmRpZgorCisvKgorICogWFNNUCAtIFgxMSBTZXNzaW9uIE1hbmFnZW1lbnQgUHJvdG9jb2wKKyAqIEl0IG1heSBiZSBwcmVmZXJyZWQgdG8gZGlzYWJsZSB0aGlzIGlmIHRoZSBHVUkgc3VwcG9ydHMgaXQgKGUuZy4sCisgKiBHTk9NRS9LREUpIGFuZCBpbXBsZW1lbnQgc2F2ZS15b3Vyc2VsZiBldGMuIHRocm91Z2ggdGhhdCwgYnV0IGl0IG1heSBhbHNvCisgKiBiZSBjbGVhbmVyIHRvIGhhdmUgYWxsIFNNLWF3YXJlIHZpbXMgZG8gdGhlIHNhbWUgdGhpbmcgKGxpYlNNIGRvZXMgbm90CisgKiBkZXBlbmQgdXBvbiBYMTEpLgorICogSWYgeW91ciBHVUkgd2FudHMgdG8gc3VwcG9ydCBTTSBpdHNlbGYsIGNoYW5nZSB0aGlzIGlmZGVmLgorICogSSdtIGFzc3VtaW5nIHRoYXQgYW55IFgxMSBpbXBsZW1lbnRhdGlvbiB3aWxsIGNvcGUgd2l0aCB0aGlzIGZvciBub3cuCisgKi8KKyNpZiBkZWZpbmVkKEhBVkVfWDExKSAmJiBkZWZpbmVkKFdBTlRfWDExKSAmJiBkZWZpbmVkKEhBVkVfWDExX1NNX1NNTElCX0gpCisjIGRlZmluZSBVU0VfWFNNUAorI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfWFNNUF9JTlRFUkFDVCkgJiYgIWRlZmluZWQoVVNFX1hTTVApCisjIHVuZGVmIFVTRV9YU01QX0lOVEVSQUNUCisjZW5kaWYKKworLyoKKyAqICttb3VzZV94dGVybQkJVW5peCBvbmx5OiBJbmNsdWRlIGNvZGUgZm9yIHh0ZXJtIG1vdXNlIGhhbmRsaW5nLgorICogK21vdXNlX2RlYwkJaWRlbSwgZm9yIERlYyBtb3VzZSBoYW5kbGluZy4KKyAqICttb3VzZV9qc2J0ZXJtCWlkZW0sIGZvciBKc2J0ZXJtIG1vdXNlIGhhbmRsaW5nLgorICogK21vdXNlX25ldHRlcm0JaWRlbSwgZm9yIE5ldHRlcm0gbW91c2UgaGFuZGxpbmcuCisgKiAobm9uZSkJCU1TLURPUyBtb3VzZSBzdXBwb3J0LgorICogK21vdXNlX2dwbQkJVW5peCBvbmx5OiBJbmNsdWRlIGNvZGUgZm9yIExpbnV4IGNvbnNvbGUgbW91c2UKKyAqCQkJaGFuZGxpbmcuCisgKiArbW91c2VfcHRlcm0JCVBUZXJtIG1vdXNlIHN1cHBvcnQgZm9yIFFOWAorICogK21vdXNlCQlBbnkgbW91c2Ugc3VwcG9ydCAoYW55IG9mIHRoZSBhYm92ZSBlbmFibGVkKS4KKyAqLworLyogT1MvMiBhbmQgQW1pZ2EgY29uc29sZSBoYXZlIG5vIG1vdXNlIHN1cHBvcnQgKi8KKyNpZiAoIWRlZmluZWQoQU1JR0EpICYmICFkZWZpbmVkKE9TMikgJiYgIWRlZmluZWQoTUFDT1MpKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0FNSUdBKQorIyBpZmRlZiBGRUFUX05PUk1BTAorIyAgZGVmaW5lIEZFQVRfTU9VU0VfWFRFUk0KKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9CSUcKKyMgIGRlZmluZSBGRUFUX01PVVNFX05FVAorIyBlbmRpZgorIyBpZmRlZiBGRUFUX0JJRworIyAgZGVmaW5lIEZFQVRfTU9VU0VfREVDCisjIGVuZGlmCisjIGlmIGRlZmluZWQoRkVBVF9OT1JNQUwpICYmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTjMyNjQpKQorIyAgZGVmaW5lIERPU19NT1VTRQorIyBlbmRpZgorIyBpZiBkZWZpbmVkKEZFQVRfTk9STUFMKSAmJiBkZWZpbmVkKF9fUU5YX18pCisjICBkZWZpbmUgRkVBVF9NT1VTRV9QVEVSTQorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTk9STUFMKSAmJiBkZWZpbmVkKEhBVkVfR1BNKQorIyBkZWZpbmUgRkVBVF9NT1VTRV9HUE0KKyNlbmRpZgorLyogRGVmaW5lIEZFQVRfTU9VU0Ugd2hlbiBhbnkgb2YgdGhlIGFib3ZlIGlzIGRlZmluZWQgb3IgRkVBVF9HVUkuICovCisjaWYgIWRlZmluZWQoRkVBVF9NT1VTRV9UVFkpICYmIChkZWZpbmVkKEZFQVRfTU9VU0VfWFRFUk0pIFwKKwl8fCBkZWZpbmVkKEZFQVRfTU9VU0VfTkVUKSB8fCBkZWZpbmVkKEZFQVRfTU9VU0VfREVDKSBcCisJfHwgZGVmaW5lZChET1NfTU9VU0UpIHx8IGRlZmluZWQoRkVBVF9NT1VTRV9HUE0pIFwKKwl8fCBkZWZpbmVkKEZFQVRfTU9VU0VfSlNCKSB8fCBkZWZpbmVkKEZFQVRfTU9VU0VfUFRFUk0pKQorIyBkZWZpbmUgRkVBVF9NT1VTRV9UVFkJCS8qIGluY2x1ZGUgbm9uLUdVSSBtb3VzZSBzdXBwb3J0ICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChGRUFUX01PVVNFKSAmJiAoZGVmaW5lZChGRUFUX01PVVNFX1RUWSkgfHwgZGVmaW5lZChGRUFUX0dVSSkpCisjIGRlZmluZSBGRUFUX01PVVNFCQkvKiBpbmNsdWRlIGdlbmVyaWMgbW91c2Ugc3VwcG9ydCAqLworI2VuZGlmCisKKy8qCisgKiArY2xpcGJvYXJkCQlDbGlwYm9hcmQgc3VwcG9ydC4gIEFsd2F5cyB1c2VkIGZvciB0aGUgR1VJLgorICogK3h0ZXJtX2NsaXBib2FyZAlVbml4IG9ubHk6IEluY2x1ZGUgY29kZSBmb3IgaGFuZGxpbmcgdGhlIGNsaXBib2FyZAorICoJCQlpbiBhbiB4dGVybSBsaWtlIGluIHRoZSBHVUkuCisgKi8KKyNpZmRlZiBGRUFUX0dVSQorIyBpZm5kZWYgRkVBVF9DTElQQk9BUkQKKyMgIGRlZmluZSBGRUFUX0NMSVBCT0FSRAorIyAgaWZuZGVmIEZFQVRfVklTVUFMCisjICAgZGVmaW5lIEZFQVRfVklTVUFMCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTk9STUFMKSAmJiBkZWZpbmVkKEZFQVRfVklTVUFMKSBcCisJJiYgKGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpKSBcCisJJiYgZGVmaW5lZChXQU5UX1gxMSkgJiYgZGVmaW5lZChIQVZFX1gxMSkKKyMgZGVmaW5lIEZFQVRfWENMSVBCT0FSRAorIyBpZm5kZWYgRkVBVF9DTElQQk9BUkQKKyMgIGRlZmluZSBGRUFUX0NMSVBCT0FSRAorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiArZG5kCQlEcmFnJ24nZHJvcCBzdXBwb3J0LiAgQWx3YXlzIHVzZWQgZm9yIHRoZSBHVEsrIEdVSS4KKyAqLworI2lmIGRlZmluZWQoRkVBVF9DTElQQk9BUkQpICYmIGRlZmluZWQoRkVBVF9HVUlfR1RLKQorIyBkZWZpbmUgRkVBVF9ETkQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9NU1dJTikgJiYgZGVmaW5lZChGRUFUX1NNQUxMKQorIyBkZWZpbmUgTVNXSU5fRklORF9SRVBMQUNFCS8qIGluY2x1ZGUgY29kZSBmb3IgZmluZC9yZXBsYWNlIGRpYWxvZyAqLworIyBkZWZpbmUgTVNXSU5fRlJfQlVGU0laRSAyNTYKKyNlbmRpZgorCisvKgorICogK2NsaWVudHNlcnZlcglSZW1vdGUgY29udHJvbCB2aWEgdGhlIHJlbW90ZV9zZW5kKCkgZnVuY3Rpb24KKyAqCQkJYW5kIHRoZSAtLXJlbW90ZSBhcmd1bWVudAorICovCisjaWYgKGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoRkVBVF9YQ0xJUEJPQVJEKSkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCisjIGRlZmluZSBGRUFUX0NMSUVOVFNFUlZFUgorI2VuZGlmCisKKy8qCisgKiArdGVybXJlc3BvbnNlCXNlbmQgdF9SViB0byBvYnRhaW4gdGVybWluYWwgcmVzcG9uc2UuICBVc2VkIGZvciB4dGVybQorICoJCQl0byBjaGVjayBpZiBtb3VzZSBkcmFnZ2luZyBjYW4gYmUgdXNlZCBhbmQgaWYgdGVybQorICoJCQljb2RlcyBjYW4gYmUgb2J0YWluZC4KKyAqLworI2lmIChkZWZpbmVkKEZFQVRfTk9STUFMKSB8fCBkZWZpbmVkKEZFQVRfTU9VU0UpKSAmJiBkZWZpbmVkKEhBVkVfVEdFVEVOVCkKKyMgZGVmaW5lIEZFQVRfVEVSTVJFU1BPTlNFCisjZW5kaWYKKworLyoKKyAqIGN1cnNvciBzaGFwZQkJQWRqdXN0IHRoZSBzaGFwZSBvZiB0aGUgY3Vyc29yIHRvIHRoZSBtb2RlLgorICogbW91c2Ugc2hhcGUJCUFkanVzdCB0aGUgc2hhcGUgb2YgdGhlIG1vdXNlIHBvaW50ZXIgdG8gdGhlIG1vZGUuCisgKi8KKyNpZmRlZiBGRUFUX05PUk1BTAorLyogTVMtRE9TIGNvbnNvbGUgYW5kIFdpbjMyIGNvbnNvbGUgY2FuIGNoYW5nZSBjdXJzb3Igc2hhcGUgKi8KKyMgaWYgZGVmaW5lZChNU0RPUykgfHwgKGRlZmluZWQoV0lOMzI2NCkgJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKSkKKyMgIGRlZmluZSBNQ0hfQ1VSU09SX1NIQVBFCisjIGVuZGlmCisjIGlmIGRlZmluZWQoRkVBVF9HVUlfVzMyKSB8fCBkZWZpbmVkKEZFQVRfR1VJX1cxNikgfHwgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfQVRIRU5BKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKQorIyAgZGVmaW5lIEZFQVRfTU9VU0VTSEFQRQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEdVSSBhbmQgc29tZSBjb25zb2xlcyBjYW4gY2hhbmdlIHRoZSBzaGFwZSBvZiB0aGUgY3Vyc29yLiAgVGhlIGNvZGUgaXMgYWxzbworICogbmVlZGVkIGZvciB0aGUgJ21vdXNlc2hhcGUnIG9wdGlvbi4gKi8KKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKE1DSF9DVVJTT1JfU0hBUEUpIHx8IGRlZmluZWQoRkVBVF9NT1VTRVNIQVBFKQorIyBkZWZpbmUgQ1VSU09SX1NIQVBFCisjZW5kaWYKKworLyoKKyAqICtBUlAJCQlBbWlnYSBvbmx5LiBVc2UgYXJwLmxpYnJhcnksIERPUyAyLjAgaXMgbm90IHJlcXVpcmVkLgorICovCisjaWZuZGVmIE5PX0FSUAorIyBkZWZpbmUgRkVBVF9BUlAKKyNlbmRpZgorCisvKgorICogK0dVSV9BdGhlbmEJCVRvIGNvbXBpbGUgVmltIHdpdGggb3Igd2l0aG91dCB0aGUgR1VJIChndmltKSB5b3UgaGF2ZQorICogK0dVSV9CZU9TCQl0byBlZGl0IHRoZSBNYWtlZmlsZS4KKyAqICtHVUlfTW90aWYKKyAqLworCisvKgorICogK29sZQkJCVdpbjMyIE9MRSBhdXRvbWF0aW9uOiBVc2UgTWFrZWZpbGUub3ZjLgorICovCisKKy8qCisgKiBUaGVzZSBmZWF0dXJlcyBjYW4gb25seSBiZSBpbmNsdWRlZCBieSB1c2luZyBhIGNvbmZpZ3VyZSBhcmd1bWVudC4gIFNlZSB0aGUKKyAqIE1ha2VmaWxlIGZvciBhIGxpbmUgdG8gdW5jb21tZW50LgorICogK3BlcmwJCVBlcmwgaW50ZXJmYWNlOiAiLS1lbmFibGUtcGVybGludGVycCIKKyAqICtweXRob24JCVB5dGhvbiBpbnRlcmZhY2U6ICItLWVuYWJsZS1weXRob25pbnRlcnAiCisgKiArdGNsCQkJVENMIGludGVyZmFjZTogIi0tZW5hYmxlLXRjbGludGVycCIKKyAqICtzbmlmZgkJU25pZmYgaW50ZXJmYWNlOiAiLS1lbmFibGUtc25pZmYiCisgKiArc3VuX3dvcmtzaG9wCVN1biBXb3Jrc2hvcCBpbnRlZ2VncmF0aW9uCisgKiArbmV0YmVhbnNfaW50ZwlOZXRiZWFucyBpbnRlZ3JhdGlvbgorICovCisKKy8qCisgKiBUaGVzZSBmZWF0dXJlcyBhcmUgYXV0b21hdGljYWxseSBkZXRlY3RlZDoKKyAqICt0ZXJtaW5mbworICogK3RnZXRlbnQKKyAqLworCisvKgorICogVGhlIFN1biBXb3Jrc2hvcCBmZWF0dXJlcyBjdXJyZW50bHkgb25seSB3b3JrIHdpdGggTW90aWYuCisgKi8KKyNpZiAhZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgJiYgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkKKyMgdW5kZWYgRkVBVF9TVU5fV09SS1NIT1AKKyNlbmRpZgorCisvKgorICogVGhlIE5ldGJlYW5zIGZlYXR1cmVzIGN1cnJlbnRseSBvbmx5IHdvcmsgd2l0aCBNb3RpZiBhbmQgR1RLIGFuZCBXaW4zMi4KKyAqIEl0IGFsc28gcmVxdWlyZXMgK2xpc3RjbWRzIGFuZCArZXZhbC4KKyAqLworI2lmICgoIWRlZmluZWQoRkVBVF9HVUlfTU9USUYpICYmICFkZWZpbmVkKEZFQVRfR1VJX0dUSykgJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKSkgXAorCQl8fCAhZGVmaW5lZChGRUFUX0xJU1RDTURTKSB8fCAhZGVmaW5lZChGRUFUX0VWQUwpKSBcCisJJiYgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpCisjIHVuZGVmIEZFQVRfTkVUQkVBTlNfSU5URworI2VuZGlmCisKKy8qCisgKiArc2lnbnMJCUFsbG93IHNpZ25zIHRvIGJlIGRpc3BsYXllZCB0byB0aGUgbGVmdCBvZiB0ZXh0IGxpbmVzLgorICoJCQlBZGRzIHRoZSAiOnNpZ24iIGNvbW1hbmQuCisgKi8KKyNpZiBkZWZpbmVkKEZFQVRfQklHKSB8fCBkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKSBcCisJICAgIHx8IGRlZmluZWQoRkVBVF9ORVRCRUFOU19JTlRHKQorIyBkZWZpbmUgRkVBVF9TSUdOUworIyBpZiAoKGRlZmluZWQoRkVBVF9HVUlfTU9USUYpIHx8IGRlZmluZWQoRkVBVF9HVUlfQVRIRU5BKSkgXAorCQkmJiBkZWZpbmVkKEhBVkVfWDExX1hQTV9IKSkgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfR1RLKSBcCisJfHwgKGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoRkVBVF9HVUkpKQorIyAgZGVmaW5lIEZFQVRfU0lHTl9JQ09OUworIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiArYmFsbG9vbl9ldmFsCUFsbG93IGJhbGxvb24gZXhwcmVzc2lvbiBldmFsdWF0aW9uLiBVc2VkIHdpdGggYQorICoJCQlkZWJ1Z2dlciBhbmQgZm9yIHRvb2x0aXBzLgorICoJCQlPbmx5IGZvciBHVUlzIHdoZXJlIGl0IHdhcyBpbXBsZW1lbnRlZC4KKyAqLworI2lmIChkZWZpbmVkKEZFQVRfR1VJX01PVElGKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfR1RLKSB8fCBkZWZpbmVkKEZFQVRfR1VJX1czMikpIFwKKwkmJiAoICAgKGRlZmluZWQoRkVBVF9UT09MQkFSKSBcCisJCSYmICFkZWZpbmVkKEZFQVRfR1VJX0dUSykgJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKSkgXAorCSAgICB8fCBkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKSBcCisJICAgIHx8IGRlZmluZWQoRkVBVF9ORVRCRUFOU19JTlRHKSkKKyMgZGVmaW5lIEZFQVRfQkVWQUwKKyMgaWYgIWRlZmluZWQoRkVBVF9YRk9OVFNFVCkgJiYgIWRlZmluZWQoRkVBVF9HVUlfR1RLKSBcCisJJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKQorIyAgZGVmaW5lIEZFQVRfWEZPTlRTRVQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0JFVkFMKSAmJiAoZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgfHwgZGVmaW5lZChGRUFUX0dVSV9BVEhFTkEpKQorIyBkZWZpbmUgRkVBVF9CRVZBTF9USVAJCS8qIGJhbGxvb24gZXZhbCB1c2VkIGZvciB0b29sYmFyIHRvb2x0aXAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkgfHwgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpCisvKgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgKGN1cnJlbnRseSkgb25seSB1c2VkIGJ5IFN1biBWaXN1YWwgV29ya1Nob3AgNgorICogYW5kIE5ldEJlYW5zLiBUaGVzZSBmZWF0dXJlcyBjb3VsZCBiZSB1c2VkIHdpdGggb3RoZXIgaW50ZWdyYXRpb25zIHdpdGgKKyAqIGRlYnVnZ2VycyBzbyBJJ3ZlIHVzZWQgc2VwYXJhdGUgZmVhdHVyZSBkZWZpbmVzLgorICovCisjIGlmICFkZWZpbmVkKEZFQVRfTUVOVSkKKyMgIGRlZmluZSBGRUFUX01FTlUKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkKKy8qCisgKgkJCVVzZSBhbiBhbHRlcm5hdGl2ZSBtZXRob2Qgb2YgWCBpbnB1dCBmb3IgYSBzZWNvbmRhcnkKKyAqCQkJY29tbWFuZCBpbnB1dC4KKyAqLworIyBkZWZpbmUgQUxUX1hfSU5QVVQKKworLyoKKyAqICtmb290ZXIJCU1vdGlmIG9ubHk6IEFkZCBhIG1lc3NhZ2UgYXJlYSBhdCB0aGUgYm90dG9tIG9mIHRoZQorICoJCQltYWluIHdpbmRvdyBhcmVhLgorICovCisjIGRlZmluZSBGRUFUX0ZPT1RFUgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9maWxlaW8uYyBiL3NyYy9maWxlaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjMzOWJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ZpbGVpby5jCkBAIC0wLDAgKzEsODc1MCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogZmlsZWlvLmM6IHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gYSBmaWxlCisgKi8KKworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lOMTYpIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQorIyBpbmNsdWRlIDxpby5oPgkvKiBmb3IgbHNlZWsoKSwgbXVzdCBiZSBiZWZvcmUgdmltLmggKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX0VNWF9fCisjIGluY2x1ZGUgPGlvLmg+CS8qIGZvciBta3RlbXAoKSwgQ0pXIDE5OTctMTItMDMgKi8KKyNlbmRpZgorCisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWZkZWYgX19UQU5ERU0KKyMgaW5jbHVkZSA8bGltaXRzLmg+CQkvKiBmb3IgU1NJWkVfTUFYICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9VVElNRSkgJiYgZGVmaW5lZChIQVZFX1VUSU1FX0gpCisjIGluY2x1ZGUgPHV0aW1lLmg+CQkvKiBmb3Igc3RydWN0IHV0aW1idWYgKi8KKyNlbmRpZgorCisjZGVmaW5lIEJVRlNJWkUJCTgxOTIJLyogc2l6ZSBvZiBub3JtYWwgd3JpdGUgYnVmZmVyICovCisjZGVmaW5lIFNNQlVGU0laRQkyNTYJLyogc2l6ZSBvZiBlbWVyZ2VuY3kgd3JpdGUgYnVmZmVyICovCisKKyNpZmRlZiBGRUFUX0NSWVBUCisjIGRlZmluZSBDUllQVF9NQUdJQwkJIlZpbUNyeXB0fjAxISIJLyogIjAxIiBpcyB0aGUgdmVyc2lvbiBuciAqLworIyBkZWZpbmUgQ1JZUFRfTUFHSUNfTEVOCTEyCQkvKiBtdXN0IGJlIG11bHRpcGxlIG9mIDQhICovCisjZW5kaWYKKworLyogSXMgdGhlcmUgYW55IHN5c3RlbSB0aGF0IGRvZXNuJ3QgaGF2ZSBhY2Nlc3MoKT8gKi8KKyNpZm5kZWYgTUFDT1NfQ0xBU1NJQyAvKiBOb3QgYXZhaWxhYmxlIG9uIE1hY09TIDkgKi8KKyMgZGVmaW5lIFVTRV9NQ0hfQUNDRVNTCisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUJZVEUKK3N0YXRpYyBjaGFyX3UgKm5leHRfZmVuYyBfX0FSR1MoKGNoYXJfdSAqKnBwKSk7CisjIGlmZGVmIEZFQVRfRVZBTAorc3RhdGljIGNoYXJfdSAqcmVhZGZpbGVfY2hhcmNvbnZlcnQgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBjaGFyX3UgKmZlbmMsIGludCAqZmRwKSk7CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJTUlORk8KK3N0YXRpYyB2b2lkIGNoZWNrX21hcmtzX3JlYWQgX19BUkdTKCh2b2lkKSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NSWVBUCitzdGF0aWMgY2hhcl91ICpjaGVja19mb3JfY3J5cHRrZXkgX19BUkdTKChjaGFyX3UgKmNyeXB0a2V5LCBjaGFyX3UgKnB0ciwgbG9uZyAqc2l6ZXAsIGxvbmcgKmZpbGVzaXplcCwgaW50IG5ld2ZpbGUpKTsKKyNlbmRpZgorI2lmZGVmIFVOSVgKK3N0YXRpYyB2b2lkIHNldF9maWxlX3RpbWUgX19BUkdTKChjaGFyX3UgKmZuYW1lLCB0aW1lX3QgYXRpbWUsIHRpbWVfdCBtdGltZSkpOworI2VuZGlmCitzdGF0aWMgdm9pZCBtc2dfYWRkX2ZuYW1lIF9fQVJHUygoYnVmX1QgKiwgY2hhcl91ICopKTsKK3N0YXRpYyBpbnQgbXNnX2FkZF9maWxlZm9ybWF0IF9fQVJHUygoaW50IGVvbF90eXBlKSk7CitzdGF0aWMgdm9pZCBtc2dfYWRkX2xpbmVzIF9fQVJHUygoaW50LCBsb25nLCBsb25nKSk7CitzdGF0aWMgdm9pZCBtc2dfYWRkX2VvbCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQgY2hlY2tfbXRpbWUgX19BUkdTKChidWZfVCAqYnVmLCBzdHJ1Y3Qgc3RhdCAqcykpOworc3RhdGljIGludCB0aW1lX2RpZmZlcnMgX19BUkdTKChsb25nIHQxLCBsb25nIHQyKSk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECitzdGF0aWMgaW50IGFwcGx5X2F1dG9jbWRzX2V4YXJnIF9fQVJHUygoRVZFTlRfVCBldmVudCwgY2hhcl91ICpmbmFtZSwgY2hhcl91ICpmbmFtZV9pbywgaW50IGZvcmNlLCBidWZfVCAqYnVmLCBleGFyZ19UICplYXApKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0NSWVBUKSB8fCBkZWZpbmVkKEZFQVRfTUJZVEUpCisjIGRlZmluZSBIQVNfQldfRkxBR1MKKyMgZGVmaW5lIEZJT19MQVRJTjEJMHgwMQkvKiBjb252ZXJ0IExhdGluMSAqLworIyBkZWZpbmUgRklPX1VURjgJMHgwMgkvKiBjb252ZXJ0IFVURi04ICovCisjIGRlZmluZSBGSU9fVUNTMgkweDA0CS8qIGNvbnZlcnQgVUNTLTIgKi8KKyMgZGVmaW5lIEZJT19VQ1M0CTB4MDgJLyogY29udmVydCBVQ1MtNCAqLworIyBkZWZpbmUgRklPX1VURjE2CTB4MTAJLyogY29udmVydCBVVEYtMTYgKi8KKyMgaWZkZWYgV0lOMzI2NAorIyAgZGVmaW5lIEZJT19DT0RFUEFHRQkweDIwCS8qIGNvbnZlcnQgTVMtV2luZG93cyBjb2RlcGFnZSAqLworIyAgZGVmaW5lIEZJT19QVVRfQ1AoeCkgKCgoeCkgJiAweGZmZmYpIDw8IDE2KQkvKiBwdXQgY29kZXBhZ2UgaW4gdG9wIHdvcmQgKi8KKyMgIGRlZmluZSBGSU9fR0VUX0NQKHgpCSgoKHgpPj4xNikgJiAweGZmZmYpCS8qIGdldCBjb2RlcGFnZSBmcm9tIHRvcCB3b3JkICovCisjIGVuZGlmCisjIGlmZGVmIE1BQ09TX1gKKyMgIGRlZmluZSBGSU9fTUFDUk9NQU4JMHgyMAkvKiBjb252ZXJ0IE1hY1JvbWFuICovCisjIGVuZGlmCisjIGRlZmluZSBGSU9fRU5ESUFOX0wJMHg4MAkvKiBsaXR0bGUgZW5kaWFuICovCisjIGRlZmluZSBGSU9fRU5DUllQVEVECTB4MTAwMAkvKiBlbmNyeXB0IHdyaXR0ZW4gYnl0ZXMgKi8KKyMgZGVmaW5lIEZJT19OT0NPTlZFUlQJMHgyMDAwCS8qIHNraXAgZW5jb2RpbmcgY29udmVyc2lvbiAqLworIyBkZWZpbmUgRklPX1VDU0JPTQkweDQwMDAJLyogY2hlY2sgZm9yIEJPTSBhdCBzdGFydCBvZiBmaWxlICovCisjIGRlZmluZSBGSU9fQUxMCS0xCS8qIGFsbG93IGFsbCBmb3JtYXRzICovCisjZW5kaWYKKworLyogV2hlbiBjb252ZXJ0aW5nLCBhIHJlYWQoKSBvciB3cml0ZSgpIG1heSBsZWF2ZSBzb21lIGJ5dGVzIHRvIGJlIGNvbnZlcnRlZAorICogZm9yIHRoZSBuZXh0IGNhbGwuICBUaGUgdmFsdWUgaXMgZ3Vlc3NlZC4uLiAqLworI2RlZmluZSBDT05WX1JFU1RMRU4gMzAKKworLyogV2UgaGF2ZSB0byBndWVzcyBob3cgbXVjaCBhIHNlcXVlbmNlIG9mIGJ5dGVzIG1heSBleHBhbmQgd2hlbiBjb252ZXJ0aW5nCisgKiB3aXRoIGljb252KCkgdG8gYmUgYWJsZSB0byBhbGxvY2F0ZSBhIGJ1ZmZlci4gKi8KKyNkZWZpbmUgSUNPTlZfTVVMVCA4CisKKy8qCisgKiBTdHJ1Y3R1cmUgdG8gcGFzcyBhcmd1bWVudHMgZnJvbSBidWZfd3JpdGUoKSB0byBidWZfd3JpdGVfYnl0ZXMoKS4KKyAqLworc3RydWN0IGJ3X2luZm8KK3sKKyAgICBpbnQJCWJ3X2ZkOwkJLyogZmlsZSBkZXNjcmlwdG9yICovCisgICAgY2hhcl91CSpid19idWY7CS8qIGJ1ZmZlciB3aXRoIGRhdGEgdG8gYmUgd3JpdHRlbiAqLworICAgIGludAkJYndfbGVuOwkvKiBsZW5naHQgb2YgZGF0YSAqLworI2lmZGVmIEhBU19CV19GTEFHUworICAgIGludAkJYndfZmxhZ3M7CS8qIEZJT18gZmxhZ3MgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBjaGFyX3UJYndfcmVzdFtDT05WX1JFU1RMRU5dOyAvKiBub3QgY29udmVydGVkIGJ5dGVzICovCisgICAgaW50CQlid19yZXN0bGVuOwkvKiBuciBvZiBieXRlcyBpbiBid19yZXN0W10gKi8KKyAgICBpbnQJCWJ3X2ZpcnN0OwkvKiBmaXJzdCB3cml0ZSBjYWxsICovCisgICAgY2hhcl91CSpid19jb252X2J1ZjsJLyogYnVmZmVyIGZvciB3cml0aW5nIGNvbnZlcnRlZCBjaGFycyAqLworICAgIGludAkJYndfY29udl9idWZsZW47IC8qIHNpemUgb2YgYndfY29udl9idWYgKi8KKyAgICBpbnQJCWJ3X2NvbnZfZXJyb3I7CS8qIHNldCBmb3IgY29udmVyc2lvbiBlcnJvciAqLworIyBpZmRlZiBVU0VfSUNPTlYKKyAgICBpY29udl90CWJ3X2ljb252X2ZkOwkvKiBkZXNjcmlwdG9yIGZvciBpY29udigpIG9yIC0xICovCisjIGVuZGlmCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgIGJ1Zl93cml0ZV9ieXRlcyBfX0FSR1MoKHN0cnVjdCBid19pbmZvICppcCkpOworCisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIGludCB1Y3MyYnl0ZXMgX19BUkdTKCh1bnNpZ25lZCBjLCBjaGFyX3UgKipwcCwgaW50IGZsYWdzKSk7CitzdGF0aWMgaW50IHNhbWVfZW5jb2RpbmcgX19BUkdTKChjaGFyX3UgKmEsIGNoYXJfdSAqYikpOworc3RhdGljIGludCBnZXRfZmlvX2ZsYWdzIF9fQVJHUygoY2hhcl91ICpwdHIpKTsKK3N0YXRpYyBjaGFyX3UgKmNoZWNrX2Zvcl9ib20gX19BUkdTKChjaGFyX3UgKnAsIGxvbmcgc2l6ZSwgaW50ICpsZW5wLCBpbnQgZmxhZ3MpKTsKK3N0YXRpYyBpbnQgbWFrZV9ib20gX19BUkdTKChjaGFyX3UgKmJ1ZiwgY2hhcl91ICpuYW1lKSk7CisjIGlmZGVmIFdJTjMyNjQKK3N0YXRpYyBpbnQgZ2V0X3dpbl9maW9fZmxhZ3MgX19BUkdTKChjaGFyX3UgKnB0cikpOworIyBlbmRpZgorIyBpZmRlZiBNQUNPU19YCitzdGF0aWMgaW50IGdldF9tYWNfZmlvX2ZsYWdzIF9fQVJHUygoY2hhcl91ICpwdHIpKTsKKyMgZW5kaWYKKyNlbmRpZgorc3RhdGljIGludCBtb3ZlX2xpbmVzIF9fQVJHUygoYnVmX1QgKmZyb21idWYsIGJ1Zl9UICp0b2J1ZikpOworCitzdGF0aWMgbGluZW5yX1QJd3JpdGVfbm9fZW9sX2xudW0gPSAwOwkvKiBub24temVybyBsbnVtIHdoZW4gbGFzdCBsaW5lIG9mCisJCQkJCSAgIG5leHQgYmluYXJ5IHdyaXRlIHNob3VsZCBub3QgaGF2ZQorCQkJCQkgICBhbiBlbmQtb2YtbGluZSAqLworCisgICAgdm9pZAorZmlsZW1lc3MoYnVmLCBuYW1lLCBzLCBhdHRyKQorICAgIGJ1Zl9UCSpidWY7CisgICAgY2hhcl91CSpuYW1lOworICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWF0dHI7Cit7CisgICAgaW50CQltc2dfc2Nyb2xsX3NhdmU7CisKKyAgICBpZiAobXNnX3NpbGVudCAhPSAwKQorCXJldHVybjsKKyAgICBtc2dfYWRkX2ZuYW1lKGJ1ZiwgbmFtZSk7CSAgICAvKiBwdXQgZmlsZSBuYW1lIGluIElPYnVmZiB3aXRoIHF1b3RlcyAqLworICAgIC8qIElmIGl0J3MgZXh0cmVtZWx5IGxvbmcsIHRydW5jYXRlIGl0LiAqLworICAgIGlmIChTVFJMRU4oSU9idWZmKSA+IElPU0laRSAtIDgwKQorCUlPYnVmZltJT1NJWkUgLSA4MF0gPSBOVUw7CisgICAgU1RSQ0FUKElPYnVmZiwgcyk7CisgICAgLyoKKyAgICAgKiBGb3IgdGhlIGZpcnN0IG1lc3NhZ2UgbWF5IGhhdmUgdG8gc3RhcnQgYSBuZXcgbGluZS4KKyAgICAgKiBGb3IgZnVydGhlciBvbmVzIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgb25lLCByZXNldCBtc2dfc2Nyb2xsIGJlZm9yZQorICAgICAqIGNhbGxpbmcgZmlsZW1lc3MoKS4KKyAgICAgKi8KKyAgICBtc2dfc2Nyb2xsX3NhdmUgPSBtc2dfc2Nyb2xsOworICAgIGlmIChzaG9ydG1lc3MoU0hNX09WRVJBTEwpICYmICFleGl0aW5nICYmIHBfdmVyYm9zZSA9PSAwKQorCW1zZ19zY3JvbGwgPSBGQUxTRTsKKyAgICBpZiAoIW1zZ19zY3JvbGwpCS8qIHdhaXQgYSBiaXQgd2hlbiBvdmVyd3JpdGluZyBhbiBlcnJvciBtc2cgKi8KKwljaGVja19mb3JfZGVsYXkoRkFMU0UpOworICAgIG1zZ19zdGFydCgpOworICAgIG1zZ19zY3JvbGwgPSBtc2dfc2Nyb2xsX3NhdmU7CisgICAgbXNnX3Njcm9sbGVkX2lnbiA9IFRSVUU7CisgICAgLyogbWF5IHRydW5jYXRlIHRoZSBtZXNzYWdlIHRvIGF2b2lkIGEgaGl0LXJldHVybiBwcm9tcHQgKi8KKyAgICBtc2dfb3V0dHJhbnNfYXR0cihtc2dfbWF5X3RydW5jKEZBTFNFLCBJT2J1ZmYpLCBhdHRyKTsKKyAgICBtc2dfY2xyX2VvcygpOworICAgIG91dF9mbHVzaCgpOworICAgIG1zZ19zY3JvbGxlZF9pZ24gPSBGQUxTRTsKK30KKworLyoKKyAqIFJlYWQgbGluZXMgZnJvbSBmaWxlICJmbmFtZSIgaW50byB0aGUgYnVmZmVyIGFmdGVyIGxpbmUgImZyb20iLgorICoKKyAqIDEuIFdlIGFsbG9jYXRlIGJsb2NrcyB3aXRoIGxhbGxvYywgYXMgYmlnIGFzIHBvc3NpYmxlLgorICogMi4gRWFjaCBibG9jayBpcyBmaWxsZWQgd2l0aCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZpbGUgd2l0aCBhIHNpbmdsZSByZWFkKCkuCisgKiAzLiBUaGUgbGluZXMgYXJlIGluc2VydGVkIGluIHRoZSBidWZmZXIgd2l0aCBtbF9hcHBlbmQoKS4KKyAqCisgKiAoY2FsbGVyIG11c3QgY2hlY2sgdGhhdCBmbmFtZSAhPSBOVUxMLCB1bmxlc3MgUkVBRF9TVERJTiBpcyB1c2VkKQorICoKKyAqICJsaW5lc190b19za2lwIiBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgbXVzdCBiZSBza2lwcGVkCisgKiAibGluZXNfdG9fcmVhZCIgaXMgdGhlIG51bWJlciBvZiBsaW5lcyB0aGF0IGFyZSBhcHBlbmRlZAorICogV2hlbiBub3QgcmVjb3ZlcmluZyBsaW5lc190b19za2lwIGlzIDAgYW5kIGxpbmVzX3RvX3JlYWQgTUFYTE5VTS4KKyAqCisgKiBmbGFnczoKKyAqIFJFQURfTkVXCXN0YXJ0aW5nIHRvIGVkaXQgYSBuZXcgYnVmZmVyCisgKiBSRUFEX0ZJTFRFUglyZWFkaW5nIGZpbHRlciBvdXRwdXQKKyAqIFJFQURfU1RESU4JcmVhZCBmcm9tIHN0ZGluIGluc3RlYWQgb2YgYSBmaWxlCisgKiBSRUFEX0JVRkZFUglyZWFkIGZyb20gY3VyYnVmIGluc3RlYWQgb2YgYSBmaWxlIChjb252ZXJ0aW5nIGFmdGVyIHJlYWRpbmcKKyAqCQlzdGRpbikKKyAqIFJFQURfRFVNTVkJcmVhZCBpbnRvIGEgZHVtbXkgYnVmZmVyICh0byBjaGVjayBpZiBmaWxlIGNvbnRlbnRzIGNoYW5nZWQpCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CityZWFkZmlsZShmbmFtZSwgc2ZuYW1lLCBmcm9tLCBsaW5lc190b19za2lwLCBsaW5lc190b19yZWFkLCBlYXAsIGZsYWdzKQorICAgIGNoYXJfdQkqZm5hbWU7CisgICAgY2hhcl91CSpzZm5hbWU7CisgICAgbGluZW5yX1QJZnJvbTsKKyAgICBsaW5lbnJfVAlsaW5lc190b19za2lwOworICAgIGxpbmVucl9UCWxpbmVzX3RvX3JlYWQ7CisgICAgZXhhcmdfVAkqZWFwOwkJCS8qIGNhbiBiZSBOVUxMISAqLworICAgIGludAkJZmxhZ3M7Cit7CisgICAgaW50CQlmZCA9IDA7CisgICAgaW50CQluZXdmaWxlID0gKGZsYWdzICYgUkVBRF9ORVcpOworICAgIGludAkJY2hlY2tfcmVhZG9ubHk7CisgICAgaW50CQlmaWx0ZXJpbmcgPSAoZmxhZ3MgJiBSRUFEX0ZJTFRFUik7CisgICAgaW50CQlyZWFkX3N0ZGluID0gKGZsYWdzICYgUkVBRF9TVERJTik7CisgICAgaW50CQlyZWFkX2J1ZmZlciA9IChmbGFncyAmIFJFQURfQlVGRkVSKTsKKyAgICBsaW5lbnJfVAlyZWFkX2J1Zl9sbnVtID0gMTsJLyogbmV4dCBsaW5lIHRvIHJlYWQgZnJvbSBjdXJidWYgKi8KKyAgICBjb2xucl9UCXJlYWRfYnVmX2NvbCA9IDA7CS8qIG5leHQgY2hhciB0byByZWFkIGZyb20gdGhpcyBsaW5lICovCisgICAgY2hhcl91CWM7CisgICAgbGluZW5yX1QJbG51bSA9IGZyb207CisgICAgY2hhcl91CSpwdHIgPSBOVUxMOwkJLyogcG9pbnRlciBpbnRvIHJlYWQgYnVmZmVyICovCisgICAgY2hhcl91CSpidWZmZXIgPSBOVUxMOwkJLyogcmVhZCBidWZmZXIgKi8KKyAgICBjaGFyX3UJKm5ld19idWZmZXIgPSBOVUxMOwkvKiBpbml0IHRvIHNodXQgdXAgZ2NjICovCisgICAgY2hhcl91CSpsaW5lX3N0YXJ0ID0gTlVMTDsJLyogaW5pdCB0byBzaHV0IHVwIGdjYyAqLworICAgIGludAkJd2FzZW1wdHk7CQkvKiBidWZmZXIgd2FzIGVtcHR5IGJlZm9yZSByZWFkaW5nICovCisgICAgY29sbnJfVAlsZW47CisgICAgbG9uZwlzaXplID0gMDsKKyAgICBjaGFyX3UJKnA7CisgICAgbG9uZwlmaWxlc2l6ZSA9IDA7CisgICAgaW50CQlza2lwX3JlYWQgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX0NSWVBUCisgICAgY2hhcl91CSpjcnlwdGtleSA9IE5VTEw7CisjZW5kaWYKKyAgICBpbnQJCXNwbGl0ID0gMDsJCS8qIG51bWJlciBvZiBzcGxpdCBsaW5lcyAqLworI2RlZmluZSBVTktOT1dOCSAweDBmZmZmZmZmCQkvKiBmaWxlIHNpemUgaXMgdW5rbm93biAqLworICAgIGxpbmVucl9UCWxpbmVjbnQ7CisgICAgaW50CQllcnJvciA9IEZBTFNFOwkJLyogZXJyb3JzIGVuY291bnRlcmVkICovCisgICAgaW50CQlmZl9lcnJvciA9IEVPTF9VTktOT1dOOyAvKiBmaWxlIGZvcm1hdCB3aXRoIGVycm9ycyAqLworICAgIGxvbmcJbGluZXJlc3QgPSAwOwkJLyogcmVtYWluaW5nIGNoYXJzIGluIGxpbmUgKi8KKyNpZmRlZiBVTklYCisgICAgaW50CQlwZXJtID0gMDsKKyAgICBpbnQJCXN3YXBfbW9kZSA9IC0xOwkJLyogcHJvdGVjdGlvbiBiaXRzIGZvciBzd2FwIGZpbGUgKi8KKyNlbHNlCisgICAgaW50CQlwZXJtOworI2VuZGlmCisgICAgaW50CQlmaWxlZm9ybWF0ID0gMDsJCS8qIGVuZC1vZi1saW5lIGZvcm1hdCAqLworICAgIGludAkJa2VlcF9maWxlZm9ybWF0ID0gRkFMU0U7CisgICAgc3RydWN0IHN0YXQJc3Q7CisgICAgaW50CQlmaWxlX3JlYWRvbmx5OworICAgIGxpbmVucl9UCXNraXBfY291bnQgPSAwOworICAgIGxpbmVucl9UCXJlYWRfY291bnQgPSAwOworICAgIGludAkJbXNnX3NhdmUgPSBtc2dfc2Nyb2xsOworICAgIGxpbmVucl9UCXJlYWRfbm9fZW9sX2xudW0gPSAwOyAgIC8qIG5vbi16ZXJvIGxudW0gd2hlbiBsYXN0IGxpbmUgb2YKKwkJCQkJICogbGFzdCByZWFkIHdhcyBtaXNzaW5nIHRoZSBlb2wgKi8KKyAgICBpbnQJCXRyeV9tYWMgPSAodmltX3N0cmNocihwX2ZmcywgJ20nKSAhPSBOVUxMKTsKKyAgICBpbnQJCXRyeV9kb3MgPSAodmltX3N0cmNocihwX2ZmcywgJ2QnKSAhPSBOVUxMKTsKKyAgICBpbnQJCXRyeV91bml4ID0gKHZpbV9zdHJjaHIocF9mZnMsICd4JykgIT0gTlVMTCk7CisgICAgaW50CQlmaWxlX3Jld2luZCA9IEZBTFNFOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCWNhbl9yZXRyeTsKKyAgICBpbnQJCWNvbnZfZXJyb3IgPSBGQUxTRTsJLyogY29udmVyc2lvbiBlcnJvciBkZXRlY3RlZCAqLworICAgIGludAkJa2VlcF9kZXN0X2VuYyA9IEZBTFNFOwkvKiBkb24ndCByZXRyeSB3aGVuIGNoYXIgZG9lc24ndCBmaXQKKwkJCQkJICAgaW4gZGVzdGluYXRpb24gZW5jb2RpbmcgKi8KKyAgICBsaW5lbnJfVAlpbGxlZ2FsX2J5dGUgPSAwOwkvKiBsaW5lIG5yIHdpdGggaWxsZWdhbCBieXRlICovCisgICAgY2hhcl91CSp0bXBuYW1lID0gTlVMTDsJLyogbmFtZSBvZiAnY2hhcmNvbnZlcnQnIG91dHB1dCBmaWxlICovCisgICAgaW50CQlmaW9fZmxhZ3MgPSAwOworICAgIGNoYXJfdQkqZmVuYzsJCQkvKiBmaWxlZW5jb2RpbmcgdG8gdXNlICovCisgICAgaW50CQlmZW5jX2FsbG9jZWQ7CQkvKiBmZW5jX25leHQgaXMgaW4gYWxsb2NhdGVkIG1lbW9yeSAqLworICAgIGNoYXJfdQkqZmVuY19uZXh0ID0gTlVMTDsJLyogbmV4dCBpdGVtIGluICdmZW5jcycgb3IgTlVMTCAqLworICAgIGludAkJYWR2YW5jZV9mZW5jID0gRkFMU0U7CisgICAgbG9uZwlyZWFsX3NpemUgPSAwOworIyBpZmRlZiBVU0VfSUNPTlYKKyAgICBpY29udl90CWljb252X2ZkID0gKGljb252X3QpLTE7CS8qIGRlc2NyaXB0b3IgZm9yIGljb252KCkgb3IgLTEgKi8KKyMgIGlmZGVmIEZFQVRfRVZBTAorICAgIGludAkJZGlkX2ljb252ID0gRkFMU0U7CS8qIFRSVUUgd2hlbiBpY29udigpIGZhaWxlZCBhbmQgdHJ5aW5nCisJCQkJCSAgICdjaGFyY29udmVydCcgbmV4dCAqLworIyAgZW5kaWYKKyMgZW5kaWYKKyAgICBpbnQJCWNvbnZlcnRlZCA9IEZBTFNFOwkvKiBUUlVFIGlmIGNvbnZlcnNpb24gZG9uZSAqLworICAgIGludAkJbm90Y29udmVydGVkID0gRkFMU0U7CS8qIFRSVUUgaWYgY29udmVyc2lvbiB3YW50ZWQgYnV0IGl0CisJCQkJCSAgIHdhc24ndCBwb3NzaWJsZSAqLworICAgIGNoYXJfdQljb252X3Jlc3RbQ09OVl9SRVNUTEVOXTsKKyAgICBpbnQJCWNvbnZfcmVzdGxlbiA9IDA7CS8qIG5yIG9mIGJ5dGVzIGluIGNvbnZfcmVzdFtdICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIHdyaXRlX25vX2VvbF9sbnVtID0gMDsJLyogaW4gY2FzZSBpdCB3YXMgc2V0IGJ5IHRoZSBwcmV2aW91cyByZWFkICovCisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgdGhlcmUgaXMgbm8gZmlsZSBuYW1lIHlldCwgdXNlIHRoZSBvbmUgZm9yIHRoZSByZWFkIGZpbGUuCisgICAgICogQkZfTk9URURJVEVEIGlzIHNldCB0byByZWZsZWN0IHRoaXMuCisgICAgICogRG9uJ3QgZG8gdGhpcyBmb3IgYSByZWFkIGZyb20gYSBmaWx0ZXIuCisgICAgICogT25seSBkbyB0aGlzIHdoZW4gJ2Nwb3B0aW9ucycgY29udGFpbnMgdGhlICdmJyBmbGFnLgorICAgICAqLworICAgIGlmIChjdXJidWYtPmJfZmZuYW1lID09IE5VTEwKKwkgICAgJiYgIWZpbHRlcmluZworCSAgICAmJiBmbmFtZSAhPSBOVUxMCisJICAgICYmIHZpbV9zdHJjaHIocF9jcG8sIENQT19GTkFNRVIpICE9IE5VTEwKKwkgICAgJiYgIShmbGFncyAmIFJFQURfRFVNTVkpKQorICAgIHsKKwlpZiAoc2V0Zm5hbWUoY3VyYnVmLCBmbmFtZSwgc2ZuYW1lLCBGQUxTRSkgPT0gT0spCisJICAgIGN1cmJ1Zi0+Yl9mbGFncyB8PSBCRl9OT1RFRElURUQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3IgVW5peDogVXNlIHRoZSBzaG9ydCBmaWxlIG5hbWUgd2hlbmV2ZXIgcG9zc2libGUuCisgICAgICogQXZvaWRzIHByb2JsZW1zIHdpdGggbmV0d29ya3MgYW5kIHdoZW4gZGlyZWN0b3J5IG5hbWVzIGFyZSBjaGFuZ2VkLgorICAgICAqIERvbid0IGRvIHRoaXMgZm9yIE1TLURPUywgYSAiY2QiIGluIGEgc3ViLXNoZWxsIG1heSBoYXZlIG1vdmVkIHVzIHRvCisgICAgICogYW5vdGhlciBkaXJlY3RvcnksIHdoaWNoIHdlIGRvbid0IGRldGVjdC4KKyAgICAgKi8KKyAgICBpZiAoc2ZuYW1lID09IE5VTEwpCisJc2ZuYW1lID0gZm5hbWU7CisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKF9fRU1YX18pCisgICAgZm5hbWUgPSBzZm5hbWU7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIC8qCisgICAgICogVGhlIEJ1ZlJlYWRDbWQgYW5kIEZpbGVSZWFkQ21kIGV2ZW50cyBpbnRlcmNlcHQgdGhlIHJlYWRpbmcgcHJvY2VzcyBieQorICAgICAqIGV4ZWN1dGluZyB0aGUgYXNzb2NpYXRlZCBjb21tYW5kcyBpbnN0ZWFkLgorICAgICAqLworICAgIGlmICghZmlsdGVyaW5nICYmICFyZWFkX3N0ZGluICYmICFyZWFkX2J1ZmZlcikKKyAgICB7CisJcG9zX1QJICAgIHBvczsKKworCXBvcyA9IGN1cmJ1Zi0+Yl9vcF9zdGFydDsKKworCS8qIFNldCAnWyBtYXJrIHRvIHRoZSBsaW5lIGFib3ZlIHdoZXJlIHRoZSBsaW5lcyBnbyAobGluZSAxIGlmIHplcm8pLiAqLworCWN1cmJ1Zi0+Yl9vcF9zdGFydC5sbnVtID0gKChmcm9tID09IDApID8gMSA6IGZyb20pOworCWN1cmJ1Zi0+Yl9vcF9zdGFydC5jb2wgPSAwOworCisJaWYgKG5ld2ZpbGUpCisJeworCSAgICBpZiAoYXBwbHlfYXV0b2NtZHNfZXhhcmcoRVZFTlRfQlVGUkVBRENNRCwgTlVMTCwgc2ZuYW1lLAorCQkJCQkJCSAgRkFMU0UsIGN1cmJ1ZiwgZWFwKSkKKyNpZmRlZiBGRUFUX0VWQUwKKwkJcmV0dXJuIGFib3J0aW5nKCkgPyBGQUlMIDogT0s7CisjZWxzZQorCQlyZXR1cm4gT0s7CisjZW5kaWYKKwl9CisJZWxzZSBpZiAoYXBwbHlfYXV0b2NtZHNfZXhhcmcoRVZFTlRfRklMRVJFQURDTUQsIHNmbmFtZSwgc2ZuYW1lLAorCQkJCQkJCSAgICBGQUxTRSwgTlVMTCwgZWFwKSkKKyNpZmRlZiBGRUFUX0VWQUwKKwkgICAgcmV0dXJuIGFib3J0aW5nKCkgPyBGQUlMIDogT0s7CisjZWxzZQorCSAgICByZXR1cm4gT0s7CisjZW5kaWYKKworCWN1cmJ1Zi0+Yl9vcF9zdGFydCA9IHBvczsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICgoc2hvcnRtZXNzKFNITV9PVkVSKSB8fCBjdXJidWYtPmJfaGVscCkgJiYgcF92ZXJib3NlID09IDApCisJbXNnX3Njcm9sbCA9IEZBTFNFOwkvKiBvdmVyd3JpdGUgcHJldmlvdXMgZmlsZSBtZXNzYWdlICovCisgICAgZWxzZQorCW1zZ19zY3JvbGwgPSBUUlVFOwkvKiBkb24ndCBvdmVyd3JpdGUgcHJldmlvdXMgZmlsZSBtZXNzYWdlICovCisKKyAgICAvKgorICAgICAqIElmIHRoZSBuYW1lIGVuZHMgaW4gYSBwYXRoIHNlcGFyYXRvciwgd2UgY2FuJ3Qgb3BlbiBpdC4gIENoZWNrIGhlcmUsCisgICAgICogYmVjYXVzZSByZWFkaW5nIHRoZSBmaWxlIG1heSBhY3R1YWxseSB3b3JrLCBidXQgdGhlbiBjcmVhdGluZyB0aGUgc3dhcAorICAgICAqIGZpbGUgbWF5IGRlc3Ryb3kgaXQhICBSZXBvcnRlZCBvbiBNUy1ET1MgYW5kIFdpbiA5NS4KKyAgICAgKiBJZiB0aGUgbmFtZSBpcyB0b28gbG9uZyB3ZSBtaWdodCBjcmFzaCBmdXJ0aGVyIG9uLCBxdWl0IGhlcmUuCisgICAgICovCisgICAgaWYgKGZuYW1lICE9IE5VTEwKKwkgICAgJiYgKmZuYW1lICE9IE5VTAorCSAgICAmJiAodmltX2lzcGF0aHNlcCgqKGZuYW1lICsgU1RSTEVOKGZuYW1lKSAtIDEpKQorCQl8fCBTVFJMRU4oZm5hbWUpID49IE1BWFBBVEhMKSkKKyAgICB7CisJZmlsZW1lc3MoY3VyYnVmLCBmbmFtZSwgKGNoYXJfdSAqKV8oIklsbGVnYWwgZmlsZSBuYW1lIiksIDApOworCW1zZ19lbmQoKTsKKwltc2dfc2Nyb2xsID0gbXNnX3NhdmU7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisjaWZkZWYgVU5JWAorICAgIC8qCisgICAgICogT24gVW5peCBpdCBpcyBwb3NzaWJsZSB0byByZWFkIGEgZGlyZWN0b3J5LCBzbyB3ZSBoYXZlIHRvCisgICAgICogY2hlY2sgZm9yIGl0IGJlZm9yZSB0aGUgbWNoX29wZW4oKS4KKyAgICAgKi8KKyAgICBpZiAoIXJlYWRfc3RkaW4gJiYgIXJlYWRfYnVmZmVyKQorICAgIHsKKwlwZXJtID0gbWNoX2dldHBlcm0oZm5hbWUpOworCWlmIChwZXJtID49IDAgJiYgIVNfSVNSRUcocGVybSkJCSAgICAvKiBub3QgYSByZWd1bGFyIGZpbGUgLi4uICovCisjIGlmZGVmIFNfSVNGSUZPCisJCSAgICAgICYmICFTX0lTRklGTyhwZXJtKQkgICAgLyogLi4uIG9yIGZpZm8gKi8KKyMgZW5kaWYKKyMgaWZkZWYgU19JU1NPQ0sKKwkJICAgICAgJiYgIVNfSVNTT0NLKHBlcm0pCSAgICAvKiAuLi4gb3Igc29ja2V0ICovCisjIGVuZGlmCisJCQkJCQkpCisJeworCSAgICBpZiAoU19JU0RJUihwZXJtKSkKKwkJZmlsZW1lc3MoY3VyYnVmLCBmbmFtZSwgKGNoYXJfdSAqKV8oImlzIGEgZGlyZWN0b3J5IiksIDApOworCSAgICBlbHNlCisJCWZpbGVtZXNzKGN1cmJ1ZiwgZm5hbWUsIChjaGFyX3UgKilfKCJpcyBub3QgYSBmaWxlIiksIDApOworCSAgICBtc2dfZW5kKCk7CisJICAgIG1zZ19zY3JvbGwgPSBtc2dfc2F2ZTsKKwkgICAgcmV0dXJuIEZBSUw7CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgLyogc2V0IGRlZmF1bHQgJ2ZpbGVmb3JtYXQnICovCisgICAgaWYgKG5ld2ZpbGUpCisgICAgeworCWlmIChlYXAgIT0gTlVMTCAmJiBlYXAtPmZvcmNlX2ZmICE9IDApCisJICAgIHNldF9maWxlZm9ybWF0KGdldF9maWxlZm9ybWF0X2ZvcmNlKGN1cmJ1ZiwgZWFwKSwgT1BUX0xPQ0FMKTsKKwllbHNlIGlmICgqcF9mZnMgIT0gTlVMKQorCSAgICBzZXRfZmlsZWZvcm1hdChkZWZhdWx0X2ZpbGVmb3JtYXQoKSwgT1BUX0xPQ0FMKTsKKyAgICB9CisKKyAgICAvKiBzZXQgb3IgcmVzZXQgJ2JpbmFyeScgKi8KKyAgICBpZiAoZWFwICE9IE5VTEwgJiYgZWFwLT5mb3JjZV9iaW4gIT0gMCkKKyAgICB7CisJaW50CW9sZHZhbCA9IGN1cmJ1Zi0+Yl9wX2JpbjsKKworCWN1cmJ1Zi0+Yl9wX2JpbiA9IChlYXAtPmZvcmNlX2JpbiA9PSBGT1JDRV9CSU4pOworCXNldF9vcHRpb25zX2JpbihvbGR2YWwsIGN1cmJ1Zi0+Yl9wX2JpbiwgT1BUX0xPQ0FMKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdoZW4gb3BlbmluZyBhIG5ldyBmaWxlIHdlIHRha2UgdGhlIHJlYWRvbmx5IGZsYWcgZnJvbSB0aGUgZmlsZS4KKyAgICAgKiBEZWZhdWx0IGlzIHIvdywgY2FuIGJlIHNldCB0byByL28gYmVsb3cuCisgICAgICogRG9uJ3QgcmVzZXQgaXQgd2hlbiBpbiByZWFkb25seSBtb2RlCisgICAgICogT25seSBzZXQvcmVzZXQgYl9wX3JvIHdoZW4gQkZfQ0hFQ0tfUk8gaXMgc2V0LgorICAgICAqLworICAgIGNoZWNrX3JlYWRvbmx5ID0gKG5ld2ZpbGUgJiYgKGN1cmJ1Zi0+Yl9mbGFncyAmIEJGX0NIRUNLX1JPKSk7CisgICAgaWYgKGNoZWNrX3JlYWRvbmx5ICYmICFyZWFkb25seW1vZGUpICAgIC8qIGRlZmF1bHQ6IHNldCBmaWxlIG5vdCByZWFkb25seSAqLworCWN1cmJ1Zi0+Yl9wX3JvID0gRkFMU0U7CisKKyAgICBpZiAobmV3ZmlsZSAmJiAhcmVhZF9zdGRpbiAmJiAhcmVhZF9idWZmZXIpCisgICAgeworCS8qIFJlbWVtYmVyIHRpbWUgb2YgZmlsZS4KKwkgKiBGb3IgUklTQ09TLCBhbHNvIHJlbWVtYmVyIHRoZSBmaWxldHlwZS4KKwkgKi8KKwlpZiAobWNoX3N0YXQoKGNoYXIgKilmbmFtZSwgJnN0KSA+PSAwKQorCXsKKwkgICAgYnVmX3N0b3JlX3RpbWUoY3VyYnVmLCAmc3QsIGZuYW1lKTsKKwkgICAgY3VyYnVmLT5iX210aW1lX3JlYWQgPSBjdXJidWYtPmJfbXRpbWU7CisKKyNpZiBkZWZpbmVkKFJJU0NPUykgJiYgZGVmaW5lZChGRUFUX09TRklMRVRZUEUpCisJICAgIC8qIFJlYWQgdGhlIGZpbGV0eXBlIGludG8gdGhlIGJ1ZmZlciBsb2NhbCBmaWxldHlwZSBvcHRpb24uICovCisJICAgIG1jaF9yZWFkX2ZpbGV0eXBlKGZuYW1lKTsKKyNlbmRpZgorI2lmZGVmIFVOSVgKKwkgICAgLyoKKwkgICAgICogVXNlIHRoZSBwcm90ZWN0aW9uIGJpdHMgb2YgdGhlIG9yaWdpbmFsIGZpbGUgZm9yIHRoZSBzd2FwIGZpbGUuCisJICAgICAqIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIG90aGVycyB0byByZWFkIHRoZSBuYW1lIG9mIHRoZQorCSAgICAgKiBlZGl0ZWQgZmlsZSBmcm9tIHRoZSBzd2FwZmlsZSwgYnV0IG9ubHkgaWYgdGhleSBjYW4gcmVhZCB0aGUKKwkgICAgICogZWRpdGVkIGZpbGUuCisJICAgICAqIFJlbW92ZSB0aGUgIndyaXRlIiBhbmQgImV4ZWN1dGUiIGJpdHMgZm9yIGdyb3VwIGFuZCBvdGhlcnMKKwkgICAgICogKHRoZXkgbXVzdCBub3Qgd3JpdGUgdGhlIHN3YXBmaWxlKS4KKwkgICAgICogQWRkIHRoZSAicmVhZCIgYW5kICJ3cml0ZSIgYml0cyBmb3IgdGhlIHVzZXIsIG90aGVyd2lzZSB3ZSBtYXkKKwkgICAgICogbm90IGJlIGFibGUgdG8gd3JpdGUgdG8gdGhlIGZpbGUgb3Vyc2VsdmVzLgorCSAgICAgKiBTZXR0aW5nIHRoZSBiaXRzIGlzIGRvbmUgYmVsb3csIGFmdGVyIGNyZWF0aW5nIHRoZSBzd2FwIGZpbGUuCisJICAgICAqLworCSAgICBzd2FwX21vZGUgPSAoc3Quc3RfbW9kZSAmIDA2NDQpIHwgMDYwMDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ1dfRURJVE9SCisJICAgIC8qIEdldCB0aGUgRlNTcGVjIG9uIE1hY09TCisJICAgICAqIFRPRE86IFVwZGF0ZSBpdCBwcm9wZXJseSB3aGVuIHRoZSBidWZmZXIgbmFtZSBjaGFuZ2VzCisJICAgICAqLworCSAgICAodm9pZClHZXRGU1NwZWNGcm9tUGF0aChjdXJidWYtPmJfZmZuYW1lLCAmY3VyYnVmLT5iX0ZTU3BlYyk7CisjZW5kaWYKKyNpZmRlZiBWTVMKKwkgICAgY3VyYnVmLT5iX2ZhYl9yZm0gPSBzdC5zdF9mYWJfcmZtOworI2VuZGlmCisJfQorCWVsc2UKKwl7CisJICAgIGN1cmJ1Zi0+Yl9tdGltZSA9IDA7CisJICAgIGN1cmJ1Zi0+Yl9tdGltZV9yZWFkID0gMDsKKwkgICAgY3VyYnVmLT5iX29yaWdfc2l6ZSA9IDA7CisJICAgIGN1cmJ1Zi0+Yl9vcmlnX21vZGUgPSAwOworCX0KKworCS8qIFJlc2V0IHRoZSAibmV3IGZpbGUiIGZsYWcuICBJdCB3aWxsIGJlIHNldCBhZ2FpbiBiZWxvdyB3aGVuIHRoZQorCSAqIGZpbGUgZG9lc24ndCBleGlzdC4gKi8KKwljdXJidWYtPmJfZmxhZ3MgJj0gfihCRl9ORVcgfCBCRl9ORVdfVyk7CisgICAgfQorCisvKgorICogZm9yIFVOSVg6IGNoZWNrIHJlYWRvbmx5IHdpdGggcGVybSBhbmQgbWNoX2FjY2VzcygpCisgKiBmb3IgUklTQ09TOiBzYW1lIGFzIFVuaXgsIG90aGVyd2lzZSBmaWxlIGdldHMgcmUtZGF0ZXN0YW1wZWQhCisgKiBmb3IgTVNET1MgYW5kIEFtaWdhOiBjaGVjayByZWFkb25seSBieSB0cnlpbmcgdG8gb3BlbiB0aGUgZmlsZSBmb3Igd3JpdGluZworICovCisgICAgZmlsZV9yZWFkb25seSA9IEZBTFNFOworICAgIGlmIChyZWFkX3N0ZGluKQorICAgIHsKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKE9TMikKKwkvKiBGb3JjZSBiaW5hcnkgSS9PIG9uIHN0ZGluIHRvIGF2b2lkIENSLUxGIC0+IExGIGNvbnZlcnNpb24uICovCisJc2V0bW9kZSgwLCBPX0JJTkFSWSk7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZSBpZiAoIXJlYWRfYnVmZmVyKQorICAgIHsKKyNpZmRlZiBVU0VfTUNIX0FDQ0VTUworCWlmICgKKyMgaWZkZWYgVU5JWAorCSAgICAhKHBlcm0gJiAwMjIyKSB8fAorIyBlbmRpZgorCQkJCW1jaF9hY2Nlc3MoKGNoYXIgKilmbmFtZSwgV19PSykpCisJICAgIGZpbGVfcmVhZG9ubHkgPSBUUlVFOworCWZkID0gbWNoX29wZW4oKGNoYXIgKilmbmFtZSwgT19SRE9OTFkgfCBPX0VYVFJBLCAwKTsKKyNlbHNlCisJaWYgKCFuZXdmaWxlCisJCXx8IHJlYWRvbmx5bW9kZQorCQl8fCAoZmQgPSBtY2hfb3BlbigoY2hhciAqKWZuYW1lLCBPX1JEV1IgfCBPX0VYVFJBLCAwKSkgPCAwKQorCXsKKwkgICAgZmlsZV9yZWFkb25seSA9IFRSVUU7CisJICAgIC8qIHRyeSB0byBvcGVuIHJvICovCisJICAgIGZkID0gbWNoX29wZW4oKGNoYXIgKilmbmFtZSwgT19SRE9OTFkgfCBPX0VYVFJBLCAwKTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoZmQgPCAwKQkJCSAgICAvKiBjYW5ub3Qgb3BlbiBhdCBhbGwgKi8KKyAgICB7CisjaWZuZGVmIFVOSVgKKwlpbnQJaXNkaXJfZjsKKyNlbmRpZgorCW1zZ19zY3JvbGwgPSBtc2dfc2F2ZTsKKyNpZm5kZWYgVU5JWAorCS8qCisJICogT24gTVNET1MgYW5kIEFtaWdhIHdlIGNhbid0IG9wZW4gYSBkaXJlY3RvcnksIGNoZWNrIGhlcmUuCisJICovCisJaXNkaXJfZiA9IChtY2hfaXNkaXIoZm5hbWUpKTsKKwlwZXJtID0gbWNoX2dldHBlcm0oZm5hbWUpOyAgLyogY2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzICovCisJaWYgKGlzZGlyX2YpCisJeworCSAgICBmaWxlbWVzcyhjdXJidWYsIHNmbmFtZSwgKGNoYXJfdSAqKV8oImlzIGEgZGlyZWN0b3J5IiksIDApOworCSAgICBjdXJidWYtPmJfcF9ybyA9IFRSVUU7CS8qIG11c3QgdXNlICJ3ISIgbm93ICovCisJfQorCWVsc2UKKyNlbmRpZgorCSAgICBpZiAobmV3ZmlsZSkKKwkgICAgeworCQlpZiAocGVybSA8IDApCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBTZXQgdGhlICduZXctZmlsZScgZmxhZywgc28gdGhhdCB3aGVuIHRoZSBmaWxlIGhhcworCQkgICAgICogYmVlbiBjcmVhdGVkIGJ5IHNvbWVvbmUgZWxzZSwgYSAiOnciIHdpbGwgY29tcGxhaW4uCisJCSAgICAgKi8KKwkJICAgIGN1cmJ1Zi0+Yl9mbGFncyB8PSBCRl9ORVc7CisKKwkJICAgIC8qIENyZWF0ZSBhIHN3YXAgZmlsZSBub3csIHNvIHRoYXQgb3RoZXIgVmltcyBhcmUgd2FybmVkCisJCSAgICAgKiB0aGF0IHdlIGFyZSBlZGl0aW5nIHRoaXMgZmlsZS4gIERvbid0IGRvIHRoaXMgZm9yIGEKKwkJICAgICAqICJub2ZpbGUiIG9yICJub3dyaXRlIiBidWZmZXIgdHlwZS4gKi8KKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJCSAgICBpZiAoIWJ0X2RvbnR3cml0ZShjdXJidWYpKQorI2VuZGlmCisJCQljaGVja19uZWVkX3N3YXAobmV3ZmlsZSk7CisJCSAgICBmaWxlbWVzcyhjdXJidWYsIHNmbmFtZSwgKGNoYXJfdSAqKV8oIltOZXcgRmlsZV0iKSwgMCk7CisjaWZkZWYgRkVBVF9WSU1JTkZPCisJCSAgICAvKiBFdmVuIHRob3VnaCB0aGlzIGlzIGEgbmV3IGZpbGUsIGl0IG1pZ2h0IGhhdmUgYmVlbgorCQkgICAgICogZWRpdGVkIGJlZm9yZSBhbmQgZGVsZXRlZC4gIEdldCB0aGUgb2xkIG1hcmtzLiAqLworCQkgICAgY2hlY2tfbWFya3NfcmVhZCgpOworI2VuZGlmCisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGVhcCAhPSBOVUxMICYmIGVhcC0+Zm9yY2VfZW5jICE9IDApCisJCSAgICB7CisJCQkvKiBzZXQgZm9yY2VkICdmaWxlZW5jb2RpbmcnICovCisJCQlmZW5jID0gZW5jX2Nhbm9uaXplKGVhcC0+Y21kICsgZWFwLT5mb3JjZV9lbmMpOworCQkJaWYgKGZlbmMgIT0gTlVMTCkKKwkJCSAgICBzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QoKGNoYXJfdSAqKSJmZW5jIiwgLTEsCisJCQkJCQkgICAgZmVuYywgT1BUX0ZSRUV8T1BUX0xPQ0FMKTsKKwkJCXZpbV9mcmVlKGZlbmMpOworCQkgICAgfQorI2VuZGlmCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJCSAgICBhcHBseV9hdXRvY21kc19leGFyZyhFVkVOVF9CVUZORVdGSUxFLCBzZm5hbWUsIHNmbmFtZSwKKwkJCQkJCQkgIEZBTFNFLCBjdXJidWYsIGVhcCk7CisjZW5kaWYKKwkJICAgIC8qIHJlbWVtYmVyIHRoZSBjdXJyZW50IGZpbGVmb3JtYXQgKi8KKwkJICAgIHNhdmVfZmlsZV9mZihjdXJidWYpOworCisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCQkgICAgaWYgKGFib3J0aW5nKCkpICAgLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCisJCQlyZXR1cm4gRkFJTDsKKyNlbmRpZgorCQkgICAgcmV0dXJuIE9LOwkgICAgLyogYSBuZXcgZmlsZSBpcyBub3QgYW4gZXJyb3IgKi8KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGZpbGVtZXNzKGN1cmJ1Ziwgc2ZuYW1lLAorCQkJCSAgICAgICAoY2hhcl91ICopXygiW1Blcm1pc3Npb24gRGVuaWVkXSIpLCAwKTsKKwkJICAgIGN1cmJ1Zi0+Yl9wX3JvID0gVFJVRTsJLyogbXVzdCB1c2UgInchIiBub3cgKi8KKwkJfQorCSAgICB9CisKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE9ubHkgc2V0IHRoZSAncm8nIGZsYWcgZm9yIHJlYWRvbmx5IGZpbGVzIHRoZSBmaXJzdCB0aW1lIHRoZXkgYXJlCisgICAgICogbG9hZGVkLglIZWxwIGZpbGVzIGFsd2F5cyBnZXQgcmVhZG9ubHkgbW9kZQorICAgICAqLworICAgIGlmICgoY2hlY2tfcmVhZG9ubHkgJiYgZmlsZV9yZWFkb25seSkgfHwgY3VyYnVmLT5iX2hlbHApCisJY3VyYnVmLT5iX3Bfcm8gPSBUUlVFOworCisgICAgaWYgKG5ld2ZpbGUpCisgICAgeworCWN1cmJ1Zi0+Yl9wX2VvbCA9IFRSVUU7CisJY3VyYnVmLT5iX3N0YXJ0X2VvbCA9IFRSVUU7CisjaWZkZWYgRkVBVF9NQllURQorCWN1cmJ1Zi0+Yl9wX2JvbWIgPSBGQUxTRTsKKyNlbmRpZgorICAgIH0KKworICAgIC8qIENyZWF0ZSBhIHN3YXAgZmlsZSBub3csIHNvIHRoYXQgb3RoZXIgVmltcyBhcmUgd2FybmVkIHRoYXQgd2UgYXJlCisgICAgICogZWRpdGluZyB0aGlzIGZpbGUuCisgICAgICogRG9uJ3QgZG8gdGhpcyBmb3IgYSAibm9maWxlIiBvciAibm93cml0ZSIgYnVmZmVyIHR5cGUuICovCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorICAgIGlmICghYnRfZG9udHdyaXRlKGN1cmJ1ZikpCisjZW5kaWYKKyAgICB7CisJY2hlY2tfbmVlZF9zd2FwKG5ld2ZpbGUpOworI2lmZGVmIFVOSVgKKwkvKiBTZXQgc3dhcCBmaWxlIHByb3RlY3Rpb24gYml0cyBhZnRlciBjcmVhdGluZyBpdC4gKi8KKwlpZiAoc3dhcF9tb2RlID4gMCAmJiBjdXJidWYtPmJfbWwubWxfbWZwLT5tZl9mbmFtZSAhPSBOVUxMKQorCSAgICAodm9pZCltY2hfc2V0cGVybShjdXJidWYtPmJfbWwubWxfbWZwLT5tZl9mbmFtZSwgKGxvbmcpc3dhcF9tb2RlKTsKKyNlbmRpZgorICAgIH0KKworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKyAgICAvKiBJZiAiUXVpdCIgc2VsZWN0ZWQgYXQgQVRURU5USU9OIGRpYWxvZywgZG9uJ3QgbG9hZCB0aGUgZmlsZSAqLworICAgIGlmIChzd2FwX2V4aXN0c19hY3Rpb24gPT0gU0VBX1FVSVQpCisgICAgeworCWlmICghcmVhZF9idWZmZXIgJiYgIXJlYWRfc3RkaW4pCisJICAgIGNsb3NlKGZkKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisjZW5kaWYKKworICAgICsrbm9fd2FpdF9yZXR1cm47CSAgICAvKiBkb24ndCB3YWl0IGZvciByZXR1cm4geWV0ICovCisKKyAgICAvKgorICAgICAqIFNldCAnWyBtYXJrIHRvIHRoZSBsaW5lIGFib3ZlIHdoZXJlIHRoZSBsaW5lcyBnbyAobGluZSAxIGlmIHplcm8pLgorICAgICAqLworICAgIGN1cmJ1Zi0+Yl9vcF9zdGFydC5sbnVtID0gKChmcm9tID09IDApID8gMSA6IGZyb20pOworICAgIGN1cmJ1Zi0+Yl9vcF9zdGFydC5jb2wgPSAwOworCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgaWYgKCFyZWFkX2J1ZmZlcikKKyAgICB7CisJaW50CW0gPSBtc2dfc2Nyb2xsOworCWludAluID0gbXNnX3Njcm9sbGVkOworCWJ1Zl9UCSpvbGRfY3VyYnVmID0gY3VyYnVmOworCisJLyoKKwkgKiBUaGUgZmlsZSBtdXN0IGJlIGNsb3NlZCBhZ2FpbiwgdGhlIGF1dG9jb21tYW5kcyBtYXkgd2FudCB0byBjaGFuZ2UKKwkgKiB0aGUgZmlsZSBiZWZvcmUgcmVhZGluZyBpdC4KKwkgKi8KKwlpZiAoIXJlYWRfc3RkaW4pCisJICAgIGNsb3NlKGZkKTsJCS8qIGlnbm9yZSBlcnJvcnMgKi8KKworCS8qCisJICogVGhlIG91dHB1dCBmcm9tIHRoZSBhdXRvY29tbWFuZHMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgYW55dGhpbmcgYW5kCisJICogc2hvdWxkIG5vdCBiZSBvdmVyd3JpdHRlbjogU2V0IG1zZ19zY3JvbGwsIHJlc3RvcmUgaXRzIHZhbHVlIGlmIG5vCisJICogb3V0cHV0IHdhcyBkb25lLgorCSAqLworCW1zZ19zY3JvbGwgPSBUUlVFOworCWlmIChmaWx0ZXJpbmcpCisJICAgIGFwcGx5X2F1dG9jbWRzX2V4YXJnKEVWRU5UX0ZJTFRFUlJFQURQUkUsIE5VTEwsIHNmbmFtZSwKKwkJCQkJCQkgIEZBTFNFLCBjdXJidWYsIGVhcCk7CisJZWxzZSBpZiAocmVhZF9zdGRpbikKKwkgICAgYXBwbHlfYXV0b2NtZHNfZXhhcmcoRVZFTlRfU1RESU5SRUFEUFJFLCBOVUxMLCBzZm5hbWUsCisJCQkJCQkJICBGQUxTRSwgY3VyYnVmLCBlYXApOworCWVsc2UgaWYgKG5ld2ZpbGUpCisJICAgIGFwcGx5X2F1dG9jbWRzX2V4YXJnKEVWRU5UX0JVRlJFQURQUkUsIE5VTEwsIHNmbmFtZSwKKwkJCQkJCQkgIEZBTFNFLCBjdXJidWYsIGVhcCk7CisJZWxzZQorCSAgICBhcHBseV9hdXRvY21kc19leGFyZyhFVkVOVF9GSUxFUkVBRFBSRSwgc2ZuYW1lLCBzZm5hbWUsCisJCQkJCQkJICAgIEZBTFNFLCBOVUxMLCBlYXApOworCWlmIChtc2dfc2Nyb2xsZWQgPT0gbikKKwkgICAgbXNnX3Njcm9sbCA9IG07CisKKyNpZmRlZiBGRUFUX0VWQUwKKwlpZiAoYWJvcnRpbmcoKSkJICAgIC8qIGF1dG9jbWRzIG1heSBhYm9ydCBzY3JpcHQgcHJvY2Vzc2luZyAqLworCXsKKwkgICAgLS1ub193YWl0X3JldHVybjsKKwkgICAgbXNnX3Njcm9sbCA9IG1zZ19zYXZlOworCSAgICBjdXJidWYtPmJfcF9ybyA9IFRSVUU7CS8qIG11c3QgdXNlICJ3ISIgbm93ICovCisJICAgIHJldHVybiBGQUlMOworCX0KKyNlbmRpZgorCS8qCisJICogRG9uJ3QgYWxsb3cgdGhlIGF1dG9jb21tYW5kcyB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgYnVmZmVyLgorCSAqIFRyeSB0byByZS1vcGVuIHRoZSBmaWxlLgorCSAqLworCWlmICghcmVhZF9zdGRpbiAmJiAoY3VyYnVmICE9IG9sZF9jdXJidWYKKwkJfHwgKGZkID0gbWNoX29wZW4oKGNoYXIgKilmbmFtZSwgT19SRE9OTFkgfCBPX0VYVFJBLCAwKSkgPCAwKSkKKwl7CisJICAgIC0tbm9fd2FpdF9yZXR1cm47CisJICAgIG1zZ19zY3JvbGwgPSBtc2dfc2F2ZTsKKwkgICAgaWYgKGZkIDwgMCkKKwkJRU1TRyhfKCJFMjAwOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbWFkZSB0aGUgZmlsZSB1bnJlYWRhYmxlIikpOworCSAgICBlbHNlCisJCUVNU0coXygiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIpKTsKKwkgICAgY3VyYnVmLT5iX3Bfcm8gPSBUUlVFOwkvKiBtdXN0IHVzZSAidyEiIG5vdyAqLworCSAgICByZXR1cm4gRkFJTDsKKwl9CisgICAgfQorI2VuZGlmIC8qIEZFQVRfQVVUT0NNRCAqLworCisgICAgLyogQXV0b2NvbW1hbmRzIG1heSBhZGQgbGluZXMgdG8gdGhlIGZpbGUsIG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgZW1wdHkgKi8KKyAgICB3YXNlbXB0eSA9IChjdXJidWYtPmJfbWwubWxfZmxhZ3MgJiBNTF9FTVBUWSk7CisKKyAgICBpZiAoIXJlY292ZXJ5bW9kZSAmJiAhZmlsdGVyaW5nICYmICEoZmxhZ3MgJiBSRUFEX0RVTU1ZKSkKKyAgICB7CisJLyoKKwkgKiBTaG93IHRoZSB1c2VyIHRoYXQgd2UgYXJlIGJ1c3kgcmVhZGluZyB0aGUgaW5wdXQuICBTb21ldGltZXMgdGhpcworCSAqIG1heSB0YWtlIGEgd2hpbGUuICBXaGVuIHJlYWRpbmcgZnJvbSBzdGRpbiBhbm90aGVyIHByb2dyYW0gbWF5CisJICogc3RpbGwgYmUgcnVubmluZywgZG9uJ3QgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsYXN0IGxpbmUsIHVubGVzcworCSAqIGFsd2F5cyB1c2luZyB0aGUgR1VJLgorCSAqLworCWlmIChyZWFkX3N0ZGluKQorCXsKKyNpZm5kZWYgQUxXQVlTX1VTRV9HVUkKKwkgICAgbWNoX21zZyhfKCJWaW06IFJlYWRpbmcgZnJvbSBzdGRpbi4uLlxuIikpOworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUkKKwkgICAgLyogQWxzbyB3cml0ZSBhIG1lc3NhZ2UgaW4gdGhlIEdVSSB3aW5kb3csIGlmIHRoZXJlIGlzIG9uZS4gKi8KKwkgICAgaWYgKGd1aS5pbl91c2UgJiYgIWd1aS5keWluZyAmJiAhZ3VpLnN0YXJ0aW5nKQorCSAgICB7CisJCXAgPSAoY2hhcl91ICopXygiUmVhZGluZyBmcm9tIHN0ZGluLi4uIik7CisJCWd1aV93cml0ZShwLCAoaW50KVNUUkxFTihwKSk7CisJICAgIH0KKyNlbmRpZgorCX0KKwllbHNlIGlmICghcmVhZF9idWZmZXIpCisJICAgIGZpbGVtZXNzKGN1cmJ1Ziwgc2ZuYW1lLCAoY2hhcl91ICopIiIsIDApOworICAgIH0KKworICAgIG1zZ19zY3JvbGwgPSBGQUxTRTsJCQkvKiBvdmVyd3JpdGUgdGhlIGZpbGUgbWVzc2FnZSAqLworCisgICAgLyoKKyAgICAgKiBTZXQgbGluZWNudCBub3csIGJlZm9yZSB0aGUgInJldHJ5IiBjYXVzZWQgYnkgYSB3cm9uZyBndWVzcyBmb3IKKyAgICAgKiBmaWxlZm9ybWF0LCBhbmQgYWZ0ZXIgdGhlIGF1dG9jb21tYW5kcywgd2hpY2ggbWF5IGNoYW5nZSB0aGVtLgorICAgICAqLworICAgIGxpbmVjbnQgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKgorICAgICAqIERlY2lkZSB3aGljaCAnZW5jb2RpbmcnIHRvIHVzZSBmaXJzdC4KKyAgICAgKi8KKyAgICBpZiAoZWFwICE9IE5VTEwgJiYgZWFwLT5mb3JjZV9lbmMgIT0gMCkKKyAgICB7CisJZmVuYyA9IGVuY19jYW5vbml6ZShlYXAtPmNtZCArIGVhcC0+Zm9yY2VfZW5jKTsKKwlmZW5jX2FsbG9jZWQgPSBUUlVFOworICAgIH0KKyAgICBlbHNlIGlmIChjdXJidWYtPmJfcF9iaW4pCisgICAgeworCWZlbmMgPSAoY2hhcl91ICopIiI7CQkvKiBiaW5hcnk6IGRvbid0IGNvbnZlcnQgKi8KKwlmZW5jX2FsbG9jZWQgPSBGQUxTRTsKKyAgICB9CisgICAgZWxzZSBpZiAoY3VyYnVmLT5iX2hlbHApCisgICAgeworCWNoYXJfdQkgICAgZmlyc3RsaW5lWzgwXTsKKworCS8qIEhlbHAgZmlsZXMgYXJlIGVpdGhlciB1dGYtOCBvciBsYXRpbjEuICBUcnkgdXRmLTggZmlyc3QsIGlmIHRoaXMKKwkgKiBmYWlscyBpdCBtdXN0IGJlIGxhdGluMS4KKwkgKiBBbHdheXMgZG8gdGhpcyB3aGVuICdlbmNvZGluZycgaXMgInV0Zi04Ii4gIE90aGVyd2lzZSBvbmx5IGRvCisJICogdGhpcyB3aGVuIG5lZWRlZCB0byBhdm9pZCBbY29udmVydGVkXSByZW1hcmtzIGFsbCB0aGUgdGltZS4KKwkgKiBJdCBpcyBuZWVkZWQgd2hlbiB0aGUgZmlyc3QgbGluZSBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycy4KKwkgKiBUaGF0IGlzIG9ubHkgaW4gKi4/P3ggZmlsZXMuICovCisJZmVuYyA9IChjaGFyX3UgKikibGF0aW4xIjsKKwljID0gZW5jX3V0Zjg7CisJaWYgKCFjICYmICFyZWFkX3N0ZGluICYmIFRPTE9XRVJfQVNDKGZuYW1lW1NUUkxFTihmbmFtZSkgLSAxXSkgPT0gJ3gnKQorCXsKKwkgICAgLyogUmVhZCB0aGUgZmlyc3QgbGluZSAoYW5kIGEgYml0IG1vcmUpLiAgSW1tZWRpYXRlbHkgcmV3aW5kIHRvCisJICAgICAqIHRoZSBzdGFydCBvZiB0aGUgZmlsZS4gIElmIHRoZSByZWFkKCkgZmFpbHMgImxlbiIgaXMgLTEuICovCisJICAgIGxlbiA9IHZpbV9yZWFkKGZkLCBmaXJzdGxpbmUsIDgwKTsKKwkgICAgbHNlZWsoZmQsIChvZmZfdCkwTCwgU0VFS19TRVQpOworCSAgICBmb3IgKHAgPSBmaXJzdGxpbmU7IHAgPCBmaXJzdGxpbmUgKyBsZW47ICsrcCkKKwkJaWYgKCpwID49IDB4ODApCisJCXsKKwkJICAgIGMgPSBUUlVFOworCQkgICAgYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYykKKwl7CisJICAgIGZlbmNfbmV4dCA9IGZlbmM7CisJICAgIGZlbmMgPSAoY2hhcl91ICopInV0Zi04IjsKKworCSAgICAvKiBXaGVuIHRoZSBmaWxlIGlzIHV0Zi04IGJ1dCBhIGNoYXJhY3RlciBkb2Vzbid0IGZpdCBpbgorCSAgICAgKiAnZW5jb2RpbmcnIGRvbid0IHJldHJ5LiAgSW4gaGVscCB0ZXh0IGVkaXRpbmcgdXRmLTggYnl0ZXMKKwkgICAgICogZG9lc24ndCBtYWtlIHNlbnNlLiAqLworCSAgICBrZWVwX2Rlc3RfZW5jID0gVFJVRTsKKwl9CisJZmVuY19hbGxvY2VkID0gRkFMU0U7CisgICAgfQorICAgIGVsc2UgaWYgKCpwX2ZlbmNzID09IE5VTCkKKyAgICB7CisJZmVuYyA9IGN1cmJ1Zi0+Yl9wX2ZlbmM7CS8qIHVzZSBmb3JtYXQgZnJvbSBidWZmZXIgKi8KKwlmZW5jX2FsbG9jZWQgPSBGQUxTRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlmZW5jX25leHQgPSBwX2ZlbmNzOwkJLyogdHJ5IGl0ZW1zIGluICdmaWxlZW5jb2RpbmdzJyAqLworCWZlbmMgPSBuZXh0X2ZlbmMoJmZlbmNfbmV4dCk7CisJZmVuY19hbGxvY2VkID0gVFJVRTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogSnVtcCBiYWNrIGhlcmUgdG8gcmV0cnkgcmVhZGluZyB0aGUgZmlsZSBpbiBkaWZmZXJlbnQgd2F5cy4KKyAgICAgKiBSZWFzb25zIHRvIHJldHJ5OgorICAgICAqIC0gZW5jb2RpbmcgY29udmVyc2lvbiBmYWlsZWQ6IHRyeSBhbm90aGVyIG9uZSBmcm9tICJmZW5jX25leHQiCisgICAgICogLSBCT00gZGV0ZWN0ZWQgYW5kIGZlbmMgd2FzIHNldCwgbmVlZCB0byBzZXR1cCBjb252ZXJzaW9uCisgICAgICogLSAiZmlsZWZvcm1hdCIgY2hlY2sgZmFpbGVkOiB0cnkgYW5vdGhlcgorICAgICAqCisgICAgICogVmFyaWFibGVzIHNldCBmb3Igc3BlY2lhbCByZXRyeSBhY3Rpb25zOgorICAgICAqICJmaWxlX3Jld2luZCIJUmV3aW5kIHRoZSBmaWxlIHRvIHN0YXJ0IHJlYWRpbmcgaXQgYWdhaW4uCisgICAgICogImFkdmFuY2VfZmVuYyIJQWR2YW5jZSAiZmVuYyIgdXNpbmcgImZlbmNfbmV4dCIuCisgICAgICogInNraXBfcmVhZCIJUmUtdXNlIGFscmVhZHkgcmVhZCBieXRlcyAoQk9NIGRldGVjdGVkKS4KKyAgICAgKiAiZGlkX2ljb252IglpY29udigpIGNvbnZlcnNpb24gZmFpbGVkLCB0cnkgJ2NoYXJjb252ZXJ0Jy4KKyAgICAgKiAia2VlcF9maWxlZm9ybWF0IiBEb24ndCByZXNldCAiZmlsZWZvcm1hdCIuCisgICAgICoKKyAgICAgKiBPdGhlciBzdGF0dXMgaW5kaWNhdG9yczoKKyAgICAgKiAidG1wbmFtZSIJV2hlbiAhPSBOVUxMIGRpZCBjb252ZXJzaW9uIHdpdGggJ2NoYXJjb252ZXJ0Jy4KKyAgICAgKgkJCU91dHB1dCBmaWxlIGhhcyB0byBiZSBkZWxldGVkIGFmdGVyd2FyZHMuCisgICAgICogImljb252X2ZkIglXaGVuICE9IC0xIGRpZCBjb252ZXJzaW9uIHdpdGggaWNvbnYoKS4KKyAgICAgKi8KK3JldHJ5OgorCisgICAgaWYgKGZpbGVfcmV3aW5kKQorICAgIHsKKwlpZiAocmVhZF9idWZmZXIpCisJeworCSAgICByZWFkX2J1Zl9sbnVtID0gMTsKKwkgICAgcmVhZF9idWZfY29sID0gMDsKKwl9CisJZWxzZSBpZiAocmVhZF9zdGRpbiB8fCBsc2VlayhmZCwgKG9mZl90KTBMLCBTRUVLX1NFVCkgIT0gMCkKKwl7CisJICAgIC8qIENhbid0IHJld2luZCB0aGUgZmlsZSwgZ2l2ZSB1cC4gKi8KKwkgICAgZXJyb3IgPSBUUlVFOworCSAgICBnb3RvIGZhaWxlZDsKKwl9CisJLyogRGVsZXRlIHRoZSBwcmV2aW91c2x5IHJlYWQgbGluZXMuICovCisJd2hpbGUgKGxudW0gPiBmcm9tKQorCSAgICBtbF9kZWxldGUobG51bS0tLCBGQUxTRSk7CisJZmlsZV9yZXdpbmQgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKG5ld2ZpbGUpCisJICAgIGN1cmJ1Zi0+Yl9wX2JvbWIgPSBGQUxTRTsKKwljb252X2Vycm9yID0gRkFMU0U7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdoZW4gcmV0cnlpbmcgd2l0aCBhbm90aGVyICJmZW5jIiBhbmQgdGhlIGZpcnN0IHRpbWUgImZpbGVmb3JtYXQiCisgICAgICogd2lsbCBiZSByZXNldC4KKyAgICAgKi8KKyAgICBpZiAoa2VlcF9maWxlZm9ybWF0KQorCWtlZXBfZmlsZWZvcm1hdCA9IEZBTFNFOworICAgIGVsc2UKKyAgICB7CisJaWYgKGVhcCAhPSBOVUxMICYmIGVhcC0+Zm9yY2VfZmYgIT0gMCkKKwkgICAgZmlsZWZvcm1hdCA9IGdldF9maWxlZm9ybWF0X2ZvcmNlKGN1cmJ1ZiwgZWFwKTsKKwllbHNlIGlmIChjdXJidWYtPmJfcF9iaW4pCisJICAgIGZpbGVmb3JtYXQgPSBFT0xfVU5JWDsJCS8qIGJpbmFyeTogdXNlIFVuaXggZm9ybWF0ICovCisJZWxzZSBpZiAoKnBfZmZzID09IE5VTCkKKwkgICAgZmlsZWZvcm1hdCA9IGdldF9maWxlZm9ybWF0KGN1cmJ1Zik7LyogdXNlIGZvcm1hdCBmcm9tIGJ1ZmZlciAqLworCWVsc2UKKwkgICAgZmlsZWZvcm1hdCA9IEVPTF9VTktOT1dOOwkJLyogZGV0ZWN0IGZyb20gZmlsZSAqLworICAgIH0KKworI2lmZGVmIEZFQVRfTUJZVEUKKyMgaWZkZWYgVVNFX0lDT05WCisgICAgaWYgKGljb252X2ZkICE9IChpY29udl90KS0xKQorICAgIHsKKwkvKiBhYm9ydGVkIGNvbnZlcnNpb24gd2l0aCBpY29udigpLCBjbG9zZSB0aGUgZGVzY3JpcHRvciAqLworCWljb252X2Nsb3NlKGljb252X2ZkKTsKKwlpY29udl9mZCA9IChpY29udl90KS0xOworICAgIH0KKyMgZW5kaWYKKworICAgIGlmIChhZHZhbmNlX2ZlbmMpCisgICAgeworCS8qCisJICogVHJ5IHRoZSBuZXh0IGVudHJ5IGluICdmaWxlZW5jb2RpbmdzJy4KKwkgKi8KKwlhZHZhbmNlX2ZlbmMgPSBGQUxTRTsKKworCWlmIChlYXAgIT0gTlVMTCAmJiBlYXAtPmZvcmNlX2VuYyAhPSAwKQorCXsKKwkgICAgLyogQ29udmVyc2lvbiBnaXZlbiB3aXRoICIrK2NjPSIgd2Fzbid0IHBvc3NpYmxlLCByZWFkCisJICAgICAqIHdpdGhvdXQgY29udmVyc2lvbi4gKi8KKwkgICAgbm90Y29udmVydGVkID0gVFJVRTsKKwkgICAgY29udl9lcnJvciA9IEZBTFNFOworCSAgICBpZiAoZmVuY19hbGxvY2VkKQorCQl2aW1fZnJlZShmZW5jKTsKKwkgICAgZmVuYyA9IChjaGFyX3UgKikiIjsKKwkgICAgZmVuY19hbGxvY2VkID0gRkFMU0U7CisJfQorCWVsc2UKKwl7CisJICAgIGlmIChmZW5jX2FsbG9jZWQpCisJCXZpbV9mcmVlKGZlbmMpOworCSAgICBpZiAoZmVuY19uZXh0ICE9IE5VTEwpCisJICAgIHsKKwkJZmVuYyA9IG5leHRfZmVuYygmZmVuY19uZXh0KTsKKwkJZmVuY19hbGxvY2VkID0gKGZlbmNfbmV4dCAhPSBOVUxMKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJZmVuYyA9IChjaGFyX3UgKikiIjsKKwkJZmVuY19hbGxvY2VkID0gRkFMU0U7CisJICAgIH0KKwl9CisJaWYgKHRtcG5hbWUgIT0gTlVMTCkKKwl7CisJICAgIG1jaF9yZW1vdmUodG1wbmFtZSk7CQkvKiBkZWxldGUgY29udmVydGVkIGZpbGUgKi8KKwkgICAgdmltX2ZyZWUodG1wbmFtZSk7CisJICAgIHRtcG5hbWUgPSBOVUxMOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIENvbnZlcnNpb24gaXMgcmVxdWlyZWQgd2hlbiB0aGUgZW5jb2Rpbmcgb2YgdGhlIGZpbGUgaXMgZGlmZmVyZW50CisgICAgICogZnJvbSAnZW5jb2RpbmcnIG9yICdlbmNvZGluZycgaXMgVVRGLTE2LCBVQ1MtMiBvciBVQ1MtNCAocmVxdWlyZXMKKyAgICAgKiBjb252ZXJzaW9uIHRvIFVURi04KS4KKyAgICAgKi8KKyAgICBmaW9fZmxhZ3MgPSAwOworICAgIGNvbnZlcnRlZCA9ICgqZmVuYyAhPSBOVUwgJiYgIXNhbWVfZW5jb2RpbmcocF9lbmMsIGZlbmMpKTsKKyAgICBpZiAoY29udmVydGVkIHx8IGVuY191bmljb2RlICE9IDApCisgICAgeworCisJLyogInVjcy1ib20iIG1lYW5zIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGZpcnN0IGJ5dGVzIG9mIHRoZSBmaWxlCisJICogZm9yIGEgQk9NLiAqLworCWlmIChTVFJDTVAoZmVuYywgRU5DX1VDU0JPTSkgPT0gMCkKKwkgICAgZmlvX2ZsYWdzID0gRklPX1VDU0JPTTsKKworCS8qCisJICogQ2hlY2sgaWYgVUNTLTIvNCBvciBMYXRpbjEgdG8gVVRGLTggY29udmVyc2lvbiBuZWVkcyB0byBiZQorCSAqIGRvbmUuICBUaGlzIGlzIGhhbmRsZWQgYmVsb3cgYWZ0ZXIgcmVhZCgpLiAgUHJlcGFyZSB0aGUKKwkgKiBmaW9fZmxhZ3MgdG8gYXZvaWQgaGF2aW5nIHRvIHBhcnNlIHRoZSBzdHJpbmcgZWFjaCB0aW1lLgorCSAqIEFsc28gY2hlY2sgZm9yIFVuaWNvZGUgdG8gTGF0aW4xIGNvbnZlcnNpb24sIGJlY2F1c2UgaWNvbnYoKQorCSAqIGFwcGVhcnMgbm90IHRvIGhhbmRsZSB0aGlzIGNvcnJlY3RseS4gIFRoaXMgd29ya3MganVzdCBsaWtlCisJICogY29udmVyc2lvbiB0byBVVEYtOCBleGNlcHQgaG93IHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyIGlzIHB1dCBpbgorCSAqIHRoZSBidWZmZXIuCisJICovCisJZWxzZSBpZiAoZW5jX3V0ZjggfHwgU1RSQ01QKHBfZW5jLCAibGF0aW4xIikgPT0gMCkKKwkgICAgZmlvX2ZsYWdzID0gZ2V0X2Zpb19mbGFncyhmZW5jKTsKKworIyBpZmRlZiBXSU4zMjY0CisJLyoKKwkgKiBDb252ZXJzaW9uIGZyb20gYW4gTVMtV2luZG93cyBjb2RlcGFnZSB0byBVVEYtOCBvciBhbm90aGVyIGNvZGVwYWdlCisJICogaXMgaGFuZGxlZCB3aXRoIE11bHRpQnl0ZVRvV2lkZUNoYXIoKS4KKwkgKi8KKwlpZiAoZmlvX2ZsYWdzID09IDApCisJICAgIGZpb19mbGFncyA9IGdldF93aW5fZmlvX2ZsYWdzKGZlbmMpOworIyBlbmRpZgorCisjIGlmZGVmIE1BQ09TX1gKKwkvKiBDb252ZXJzaW9uIGZyb20gQXBwbGUgTWFjUm9tYW4gdG8gbGF0aW4xIG9yIFVURi04ICovCisJaWYgKGZpb19mbGFncyA9PSAwKQorCSAgICBmaW9fZmxhZ3MgPSBnZXRfbWFjX2Zpb19mbGFncyhmZW5jKTsKKyMgZW5kaWYKKworIyBpZmRlZiBVU0VfSUNPTlYKKwkvKgorCSAqIFRyeSB1c2luZyBpY29udigpIGlmIHdlIGNhbid0IGNvbnZlcnQgaW50ZXJuYWxseS4KKwkgKi8KKwlpZiAoZmlvX2ZsYWdzID09IDAKKyMgIGlmZGVmIEZFQVRfRVZBTAorCQkmJiAhZGlkX2ljb252CisjICBlbmRpZgorCQkpCisJICAgIGljb252X2ZkID0gKGljb252X3QpbXlfaWNvbnZfb3BlbigKKwkJCQkgIGVuY191dGY4ID8gKGNoYXJfdSAqKSJ1dGYtOCIgOiBwX2VuYywgZmVuYyk7CisjIGVuZGlmCisKKyMgaWZkZWYgRkVBVF9FVkFMCisJLyoKKwkgKiBVc2UgdGhlICdjaGFyY29udmVydCcgZXhwcmVzc2lvbiB3aGVuIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQKKwkgKiBhbmQgd2UgY2FuJ3QgZG8gaXQgaW50ZXJuYWxseSBvciB3aXRoIGljb252KCkuCisJICovCisJaWYgKGZpb19mbGFncyA9PSAwICYmICFyZWFkX3N0ZGluICYmICFyZWFkX2J1ZmZlciAmJiAqcF9jY3YgIT0gTlVMCisjICBpZmRlZiBVU0VfSUNPTlYKKwkJCQkJCSAgICAmJiBpY29udl9mZCA9PSAoaWNvbnZfdCktMQorIyAgZW5kaWYKKwkJKQorCXsKKyMgIGlmZGVmIFVTRV9JQ09OVgorCSAgICBkaWRfaWNvbnYgPSBGQUxTRTsKKyMgIGVuZGlmCisJICAgIC8qIFNraXAgY29udmVyc2lvbiB3aGVuIGl0J3MgYWxyZWFkeSBkb25lIChyZXRyeSBmb3Igd3JvbmcKKwkgICAgICogImZpbGVmb3JtYXQiKS4gKi8KKwkgICAgaWYgKHRtcG5hbWUgPT0gTlVMTCkKKwkgICAgeworCQl0bXBuYW1lID0gcmVhZGZpbGVfY2hhcmNvbnZlcnQoZm5hbWUsIGZlbmMsICZmZCk7CisJCWlmICh0bXBuYW1lID09IE5VTEwpCisJCXsKKwkJICAgIC8qIENvbnZlcnNpb24gZmFpbGVkLiAgVHJ5IGFub3RoZXIgb25lLiAqLworCQkgICAgYWR2YW5jZV9mZW5jID0gVFJVRTsKKwkJICAgIGlmIChmZCA8IDApCisJCSAgICB7CisJCQkvKiBSZS1vcGVuaW5nIHRoZSBvcmlnaW5hbCBmaWxlIGZhaWxlZCEgKi8KKwkJCUVNU0coXygiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiKSk7CisJCQllcnJvciA9IFRSVUU7CisJCQlnb3RvIGZhaWxlZDsKKwkJICAgIH0KKwkJICAgIGdvdG8gcmV0cnk7CisJCX0KKwkgICAgfQorCX0KKwllbHNlCisjIGVuZGlmCisJeworCSAgICBpZiAoZmlvX2ZsYWdzID09IDAKKyMgaWZkZWYgVVNFX0lDT05WCisJCSAgICAmJiBpY29udl9mZCA9PSAoaWNvbnZfdCktMQorIyBlbmRpZgorCSAgICAgICApCisJICAgIHsKKwkJLyogQ29udmVyc2lvbiB3YW50ZWQgYnV0IHdlIGNhbid0LgorCQkgKiBUcnkgdGhlIG5leHQgY29udmVyc2lvbiBpbiAnZmlsZWVuY29kaW5ncycgKi8KKwkJYWR2YW5jZV9mZW5jID0gVFJVRTsKKwkJZ290byByZXRyeTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiBTZXQgY2FuX3JldHJ5IHdoZW4gaXQncyBwb3NzaWJsZSB0byByZXdpbmQgdGhlIGZpbGUgYW5kIHRyeSB3aXRoCisgICAgICogYW5vdGhlciAiZmVuYyIgdmFsdWUuICBJdCdzIEZBTFNFIHdoZW4gbm8gb3RoZXIgImZlbmMiIHRvIHRyeSwgcmVhZGluZworICAgICAqIHN0ZGluIG9yICJmZW5jIiB3YXMgc3BlY2lmaWVkIHdpdGggIisrZW5jPSIuICovCisgICAgY2FuX3JldHJ5ID0gKCpmZW5jICE9IE5VTCAmJiAhcmVhZF9zdGRpbgorCQkJCSAgICAgJiYgKGVhcCA9PSBOVUxMIHx8IGVhcC0+Zm9yY2VfZW5jID09IDApKTsKKyNlbmRpZgorCisgICAgaWYgKCFza2lwX3JlYWQpCisgICAgeworCWxpbmVyZXN0ID0gMDsKKwlmaWxlc2l6ZSA9IDA7CisJc2tpcF9jb3VudCA9IGxpbmVzX3RvX3NraXA7CisJcmVhZF9jb3VudCA9IGxpbmVzX3RvX3JlYWQ7CisjaWZkZWYgRkVBVF9NQllURQorCWNvbnZfcmVzdGxlbiA9IDA7CisjZW5kaWYKKyAgICB9CisKKyAgICB3aGlsZSAoIWVycm9yICYmICFnb3RfaW50KQorICAgIHsKKwkvKgorCSAqIFdlIGFsbG9jYXRlIGFzIG11Y2ggc3BhY2UgZm9yIHRoZSBmaWxlIGFzIHdlIGNhbiBnZXQsIHBsdXMKKwkgKiBzcGFjZSBmb3IgdGhlIG9sZCBsaW5lIHBsdXMgcm9vbSBmb3Igb25lIHRlcm1pbmF0aW5nIE5VTC4KKwkgKiBUaGUgYW1vdW50IGlzIGxpbWl0ZWQgYnkgdGhlIGZhY3QgdGhhdCByZWFkKCkgb25seSBjYW4gcmVhZAorCSAqIHVwdG8gbWF4X3Vuc2lnbmVkIGNoYXJhY3RlcnMgKGFuZCBvdGhlciB0aGluZ3MpLgorCSAqLworI2lmIFNJWkVPRl9JTlQgPD0gMgorCWlmIChsaW5lcmVzdCA+PSAweDdmZjApCisJeworCSAgICArK3NwbGl0OworCSAgICAqcHRyID0gTkw7CQkgICAgLyogc3BsaXQgbGluZSBieSBpbnNlcnRpbmcgYSBOTCAqLworCSAgICBzaXplID0gMTsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBpZiAoIXNraXBfcmVhZCkKKwkgICAgeworI2lmIFNJWkVPRl9JTlQgPiAyCisjIGlmZGVmIF9fVEFOREVNCisJCXNpemUgPSBTU0laRV9NQVg7CQkgICAgLyogdXNlIG1heCBJL08gc2l6ZSwgNTJLICovCisjIGVsc2UKKwkJc2l6ZSA9IDB4MTAwMDBMOwkJICAgIC8qIHVzZSBidWZmZXIgPj0gNjRLICovCisjIGVuZGlmCisjZWxzZQorCQlzaXplID0gMHg3ZmYwTCAtIGxpbmVyZXN0OwkgICAgLyogbGltaXQgYnVmZmVyIHRvIDMySyAqLworI2VuZGlmCisKKwkJZm9yICggOyBzaXplID49IDEwOyBzaXplID0gKGxvbmdfdSlzaXplID4+IDEpCisJCXsKKwkJICAgIGlmICgobmV3X2J1ZmZlciA9IGxhbGxvYygobG9uZ191KShzaXplICsgbGluZXJlc3QgKyAxKSwKKwkJCQkJCQkgICAgICBGQUxTRSkpICE9IE5VTEwpCisJCQlicmVhazsKKwkJfQorCQlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQl7CisJCSAgICBkb19vdXRvZm1lbV9tc2coKGxvbmdfdSkoc2l6ZSAqIDIgKyBsaW5lcmVzdCArIDEpKTsKKwkJICAgIGVycm9yID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisJCWlmIChsaW5lcmVzdCkJLyogY29weSBjaGFyYWN0ZXJzIGZyb20gdGhlIHByZXZpb3VzIGJ1ZmZlciAqLworCQkgICAgbWNoX21lbW1vdmUobmV3X2J1ZmZlciwgcHRyIC0gbGluZXJlc3QsIChzaXplX3QpbGluZXJlc3QpOworCQl2aW1fZnJlZShidWZmZXIpOworCQlidWZmZXIgPSBuZXdfYnVmZmVyOworCQlwdHIgPSBidWZmZXIgKyBsaW5lcmVzdDsKKwkJbGluZV9zdGFydCA9IGJ1ZmZlcjsKKworI2lmZGVmIEZFQVRfTUJZVEUKKwkJLyogTWF5IG5lZWQgcm9vbSB0byB0cmFuc2xhdGUgaW50by4KKwkJICogRm9yIGljb252KCkgd2UgZG9uJ3QgcmVhbGx5IGtub3cgdGhlIHJlcXVpcmVkIHNwYWNlLCB1c2UgYQorCQkgKiBmYWN0b3IgSUNPTlZfTVVMVC4KKwkJICogbGF0aW4xIHRvIHV0Zi04OiAxIGJ5dGUgYmVjb21lcyB1cCB0byAyIGJ5dGVzCisJCSAqIHV0Zi0xNiB0byB1dGYtODogMiBieXRlcyBiZWNvbWUgdXAgdG8gMyBieXRlcywgNCBieXRlcworCQkgKiBiZWNvbWUgdXAgdG8gNCBieXRlcywgc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIDIKKwkJICogdWNzLTIgdG8gdXRmLTg6IDIgYnl0ZXMgYmVjb21lIHVwIHRvIDMgYnl0ZXMsIHNpemUgbXVzdCBiZQorCQkgKiBtdWx0aXBsZSBvZiAyCisJCSAqIHVjcy00IHRvIHV0Zi04OiA0IGJ5dGVzIGJlY29tZSB1cCB0byA2IGJ5dGVzLCBzaXplIG11c3QgYmUKKwkJICogbXVsdGlwbGUgb2YgNCAqLworCQlyZWFsX3NpemUgPSBzaXplOworIyBpZmRlZiBVU0VfSUNPTlYKKwkJaWYgKGljb252X2ZkICE9IChpY29udl90KS0xKQorCQkgICAgc2l6ZSA9IHNpemUgLyBJQ09OVl9NVUxUOworCQllbHNlCisjIGVuZGlmCisJCSAgICBpZiAoZmlvX2ZsYWdzICYgRklPX0xBVElOMSkKKwkJICAgIHNpemUgPSBzaXplIC8gMjsKKwkJZWxzZSBpZiAoZmlvX2ZsYWdzICYgKEZJT19VQ1MyIHwgRklPX1VURjE2KSkKKwkJICAgIHNpemUgPSAoc2l6ZSAqIDIgLyAzKSAmIH4xOworCQllbHNlIGlmIChmaW9fZmxhZ3MgJiBGSU9fVUNTNCkKKwkJICAgIHNpemUgPSAoc2l6ZSAqIDIgLyAzKSAmIH4zOworCQllbHNlIGlmIChmaW9fZmxhZ3MgPT0gRklPX1VDU0JPTSkKKwkJICAgIHNpemUgPSBzaXplIC8gSUNPTlZfTVVMVDsJLyogd29yc3QgY2FzZSAqLworIyBpZmRlZiBXSU4zMjY0CisJCWVsc2UgaWYgKGZpb19mbGFncyAmIEZJT19DT0RFUEFHRSkKKwkJICAgIHNpemUgPSBzaXplIC8gSUNPTlZfTVVMVDsJLyogYWxzbyB3b3JzdCBjYXNlICovCisjIGVuZGlmCisjIGlmZGVmIE1BQ09TX1gKKwkJZWxzZSBpZiAoZmlvX2ZsYWdzICYgRklPX01BQ1JPTUFOKQorCQkgICAgc2l6ZSA9IHNpemUgLyBJQ09OVl9NVUxUOwkvKiBhbHNvIHdvcnN0IGNhc2UgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NQllURQorCQlpZiAoY29udl9yZXN0bGVuID4gMCkKKwkJeworCQkgICAgLyogSW5zZXJ0IHVuY29udmVydGVkIGJ5dGVzIGZyb20gcHJldmlvdXMgbGluZS4gKi8KKwkJICAgIG1jaF9tZW1tb3ZlKHB0ciwgY29udl9yZXN0LCBjb252X3Jlc3RsZW4pOworCQkgICAgcHRyICs9IGNvbnZfcmVzdGxlbjsKKwkJICAgIHNpemUgLT0gY29udl9yZXN0bGVuOworCQl9CisjZW5kaWYKKworCQlpZiAocmVhZF9idWZmZXIpCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBSZWFkIGJ5dGVzIGZyb20gY3VyYnVmLiAgVXNlZCBmb3IgY29udmVydGluZyB0ZXh0IHJlYWQKKwkJICAgICAqIGZyb20gc3RkaW4uCisJCSAgICAgKi8KKwkJICAgIGlmIChyZWFkX2J1Zl9sbnVtID4gZnJvbSkKKwkJCXNpemUgPSAwOworCQkgICAgZWxzZQorCQkgICAgeworCQkJaW50CW4sIG5pOworCQkJbG9uZwl0bGVuOworCisJCQl0bGVuID0gMDsKKwkJCWZvciAoOzspCisJCQl7CisJCQkgICAgcCA9IG1sX2dldChyZWFkX2J1Zl9sbnVtKSArIHJlYWRfYnVmX2NvbDsKKwkJCSAgICBuID0gKGludClTVFJMRU4ocCk7CisJCQkgICAgaWYgKChpbnQpdGxlbiArIG4gKyAxID4gc2l6ZSkKKwkJCSAgICB7CisJCQkJLyogRmlsbGVkIHVwIHRvICJzaXplIiwgYXBwZW5kIHBhcnRpYWwgbGluZS4KKwkJCQkgKiBDaGFuZ2UgTkwgdG8gTlVMIHRvIHJldmVyc2UgdGhlIGVmZmVjdCBkb25lCisJCQkJICogYmVsb3cuICovCisJCQkJbiA9IHNpemUgLSB0bGVuOworCQkJCWZvciAobmkgPSAwOyBuaSA8IG47ICsrbmkpCisJCQkJeworCQkJCSAgICBpZiAocFtuaV0gPT0gTkwpCisJCQkJCXB0clt0bGVuKytdID0gTlVMOworCQkJCSAgICBlbHNlCisJCQkJCXB0clt0bGVuKytdID0gcFtuaV07CisJCQkJfQorCQkJCXJlYWRfYnVmX2NvbCArPSBuOworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCSAgICBlbHNlCisJCQkgICAgeworCQkJCS8qIEFwcGVuZCB3aG9sZSBsaW5lIGFuZCBuZXctbGluZS4gIENoYW5nZSBOTAorCQkJCSAqIHRvIE5VTCB0byByZXZlcnNlIHRoZSBlZmZlY3QgZG9uZSBiZWxvdy4gKi8KKwkJCQlmb3IgKG5pID0gMDsgbmkgPCBuOyArK25pKQorCQkJCXsKKwkJCQkgICAgaWYgKHBbbmldID09IE5MKQorCQkJCQlwdHJbdGxlbisrXSA9IE5VTDsKKwkJCQkgICAgZWxzZQorCQkJCQlwdHJbdGxlbisrXSA9IHBbbmldOworCQkJCX0KKwkJCQlwdHJbdGxlbisrXSA9IE5MOworCQkJCXJlYWRfYnVmX2NvbCA9IDA7CisJCQkJaWYgKCsrcmVhZF9idWZfbG51bSA+IGZyb20pCisJCQkJeworCQkJCSAgICAvKiBXaGVuIHRoZSBsYXN0IGxpbmUgZGlkbid0IGhhdmUgYW4KKwkJCQkgICAgICogZW5kLW9mLWxpbmUgZG9uJ3QgYWRkIGl0IG5vdyBlaXRoZXIuICovCisJCQkJICAgIGlmICghY3VyYnVmLT5iX3BfZW9sKQorCQkJCQktLXRsZW47CisJCQkJICAgIHNpemUgPSB0bGVuOworCQkJCSAgICBicmVhazsKKwkJCQl9CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJCWVsc2UKKwkJeworCQkgICAgLyoKKwkJICAgICAqIFJlYWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KKwkJICAgICAqLworCQkgICAgc2l6ZSA9IHZpbV9yZWFkKGZkLCBwdHIsIHNpemUpOworCQl9CisKKwkJaWYgKHNpemUgPD0gMCkKKwkJeworCQkgICAgaWYgKHNpemUgPCAwKQkJICAgIC8qIHJlYWQgZXJyb3IgKi8KKwkJCWVycm9yID0gVFJVRTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBlbHNlIGlmIChjb252X3Jlc3RsZW4gPiAwKQorCQkJLyogc29tZSB0cmFpbGluZyBieXRlcyB1bmNvbnZlcnRlZCAqLworCQkJY29udl9lcnJvciA9IFRSVUU7CisjZW5kaWYKKwkJfQorCisjaWZkZWYgRkVBVF9DUllQVAorCQkvKgorCQkgKiBBdCBzdGFydCBvZiBmaWxlOiBDaGVjayBmb3IgbWFnaWMgbnVtYmVyIG9mIGVuY3J5cHRpb24uCisJCSAqLworCQlpZiAoZmlsZXNpemUgPT0gMCkKKwkJICAgIGNyeXB0a2V5ID0gY2hlY2tfZm9yX2NyeXB0a2V5KGNyeXB0a2V5LCBwdHIsICZzaXplLAorCQkJCQkJCSAgJmZpbGVzaXplLCBuZXdmaWxlKTsKKwkJLyoKKwkJICogRGVjcnlwdCB0aGUgcmVhZCBieXRlcy4KKwkJICovCisJCWlmIChjcnlwdGtleSAhPSBOVUxMICYmIHNpemUgPiAwKQorCQkgICAgZm9yIChwID0gcHRyOyBwIDwgcHRyICsgc2l6ZTsgKytwKQorCQkJWkRFQ09ERSgqcCk7CisjZW5kaWYKKwkgICAgfQorCSAgICBza2lwX3JlYWQgPSBGQUxTRTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgLyoKKwkgICAgICogQXQgc3RhcnQgb2YgZmlsZSAob3IgYWZ0ZXIgY3J5cHQgbWFnaWMgbnVtYmVyKTogQ2hlY2sgZm9yIEJPTS4KKwkgICAgICogQWxzbyBjaGVjayBmb3IgYSBCT00gZm9yIG90aGVyIFVuaWNvZGUgZW5jb2RpbmdzLCBidXQgbm90IGFmdGVyCisJICAgICAqIGNvbnZlcnRpbmcgd2l0aCAnY2hhcmNvbnZlcnQnIG9yIHdoZW4gYSBCT00gaGFzIGFscmVhZHkgYmVlbgorCSAgICAgKiBmb3VuZC4KKwkgICAgICovCisJICAgIGlmICgoZmlsZXNpemUgPT0gMAorIyBpZmRlZiBGRUFUX0NSWVBUCisJCQl8fCAoZmlsZXNpemUgPT0gQ1JZUFRfTUFHSUNfTEVOICYmIGNyeXB0a2V5ICE9IE5VTEwpCisjIGVuZGlmCisJCSAgICAgICApCisJCSAgICAmJiAoZmlvX2ZsYWdzID09IEZJT19VQ1NCT00KKwkJCXx8ICghY3VyYnVmLT5iX3BfYm9tYgorCQkJICAgICYmIHRtcG5hbWUgPT0gTlVMTAorCQkJICAgICYmICgqZmVuYyA9PSAndScgfHwgKCpmZW5jID09IE5VTCAmJiBlbmNfdXRmOCkpKSkpCisJICAgIHsKKwkJY2hhcl91CSpjY25hbWU7CisJCWludAlibGVuOworCisJCS8qIG5vIEJPTSBkZXRlY3Rpb24gaW4gYSBzaG9ydCBmaWxlIG9yIGluIGJpbmFyeSBtb2RlICovCisJCWlmIChzaXplIDwgMiB8fCBjdXJidWYtPmJfcF9iaW4pCisJCSAgICBjY25hbWUgPSBOVUxMOworCQllbHNlCisJCSAgICBjY25hbWUgPSBjaGVja19mb3JfYm9tKHB0ciwgc2l6ZSwgJmJsZW4sCisJCSAgICAgIGZpb19mbGFncyA9PSBGSU9fVUNTQk9NID8gRklPX0FMTCA6IGdldF9maW9fZmxhZ3MoZmVuYykpOworCQlpZiAoY2NuYW1lICE9IE5VTEwpCisJCXsKKwkJICAgIC8qIFJlbW92ZSBCT00gZnJvbSB0aGUgdGV4dCAqLworCQkgICAgZmlsZXNpemUgKz0gYmxlbjsKKwkJICAgIHNpemUgLT0gYmxlbjsKKwkJICAgIG1jaF9tZW1tb3ZlKHB0ciwgcHRyICsgYmxlbiwgKHNpemVfdClzaXplKTsKKwkJICAgIGlmIChuZXdmaWxlKQorCQkJY3VyYnVmLT5iX3BfYm9tYiA9IFRSVUU7CisJCX0KKworCQlpZiAoZmlvX2ZsYWdzID09IEZJT19VQ1NCT00pCisJCXsKKwkJICAgIGlmIChjY25hbWUgPT0gTlVMTCkKKwkJICAgIHsKKwkJCS8qIE5vIEJPTSBkZXRlY3RlZDogcmV0cnkgd2l0aCBuZXh0IGVuY29kaW5nLiAqLworCQkJYWR2YW5jZV9mZW5jID0gVFJVRTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCS8qIEJPTSBkZXRlY3RlZDogc2V0ICJmZW5jIiBhbmQganVtcCBiYWNrICovCisJCQlpZiAoZmVuY19hbGxvY2VkKQorCQkJICAgIHZpbV9mcmVlKGZlbmMpOworCQkJZmVuYyA9IGNjbmFtZTsKKwkJCWZlbmNfYWxsb2NlZCA9IEZBTFNFOworCQkgICAgfQorCQkgICAgLyogcmV0cnkgcmVhZGluZyB3aXRob3V0IGdldHRpbmcgbmV3IGJ5dGVzIG9yIHJld2luZGluZyAqLworCQkgICAgc2tpcF9yZWFkID0gVFJVRTsKKwkJICAgIGdvdG8gcmV0cnk7CisJCX0KKwkgICAgfQorI2VuZGlmCisJICAgIC8qCisJICAgICAqIEJyZWFrIGhlcmUgZm9yIGEgcmVhZCBlcnJvciBvciBlbmQtb2YtZmlsZS4KKwkgICAgICovCisJICAgIGlmIChzaXplIDw9IDApCisJCWJyZWFrOworCisjaWZkZWYgRkVBVF9NQllURQorCisJICAgIC8qIEluY2x1ZGUgbm90IGNvbnZlcnRlZCBieXRlcy4gKi8KKwkgICAgcHRyIC09IGNvbnZfcmVzdGxlbjsKKwkgICAgc2l6ZSArPSBjb252X3Jlc3RsZW47CisJICAgIGNvbnZfcmVzdGxlbiA9IDA7CisKKyMgaWZkZWYgVVNFX0lDT05WCisJICAgIGlmIChpY29udl9mZCAhPSAoaWNvbnZfdCktMSkKKwkgICAgeworCQkvKgorCQkgKiBBdHRlbXB0IGNvbnZlcnNpb24gb2YgdGhlIHJlYWQgYnl0ZXMgdG8gJ2VuY29kaW5nJyB1c2luZworCQkgKiBpY29udigpLgorCQkgKi8KKwkJY29uc3QgY2hhcgkqZnJvbXA7CisJCWNoYXIJCSp0b3A7CisJCXNpemVfdAkJZnJvbV9zaXplOworCQlzaXplX3QJCXRvX3NpemU7CisKKwkJZnJvbXAgPSAoY2hhciAqKXB0cjsKKwkJZnJvbV9zaXplID0gc2l6ZTsKKwkJcHRyICs9IHNpemU7CisJCXRvcCA9IChjaGFyICopcHRyOworCQl0b19zaXplID0gcmVhbF9zaXplIC0gc2l6ZTsKKworCQkvKgorCQkgKiBJZiB0aGVyZSBpcyBjb252ZXJzaW9uIGVycm9yIG9yIG5vdCBlbm91Z2ggcm9vbSB0cnkgdXNpbmcKKwkJICogYW5vdGhlciBjb252ZXJzaW9uLgorCQkgKi8KKwkJaWYgKChpY29udihpY29udl9mZCwgKHZvaWQgKikmZnJvbXAsICZmcm9tX3NpemUsICZ0b3AsICZ0b19zaXplKQorCQkJICAgID09IChzaXplX3QpLTEgJiYgSUNPTlZfRVJSTk8gIT0gSUNPTlZfRUlOVkFMKQorCQkJCQkJICB8fCBmcm9tX3NpemUgPiBDT05WX1JFU1RMRU4pCisJCSAgICBnb3RvIHJld2luZF9yZXRyeTsKKworCQlpZiAoZnJvbV9zaXplID4gMCkKKwkJeworCQkgICAgLyogU29tZSByZW1haW5pbmcgY2hhcmFjdGVycywga2VlcCB0aGVtIGZvciB0aGUgbmV4dAorCQkgICAgICogcm91bmQuICovCisJCSAgICBtY2hfbWVtbW92ZShjb252X3Jlc3QsIChjaGFyX3UgKilmcm9tcCwgZnJvbV9zaXplKTsKKwkJICAgIGNvbnZfcmVzdGxlbiA9IChpbnQpZnJvbV9zaXplOworCQl9CisKKwkJLyogbW92ZSB0aGUgbGluZXJlc3QgdG8gYmVmb3JlIHRoZSBjb252ZXJ0ZWQgY2hhcmFjdGVycyAqLworCQlsaW5lX3N0YXJ0ID0gcHRyIC0gbGluZXJlc3Q7CisJCW1jaF9tZW1tb3ZlKGxpbmVfc3RhcnQsIGJ1ZmZlciwgKHNpemVfdClsaW5lcmVzdCk7CisJCXNpemUgPSAobG9uZykoKGNoYXJfdSAqKXRvcCAtIHB0cik7CisJICAgIH0KKyMgZW5kaWYKKworIyBpZmRlZiBXSU4zMjY0CisJICAgIGlmIChmaW9fZmxhZ3MgJiBGSU9fQ09ERVBBR0UpCisJICAgIHsKKwkJLyoKKwkJICogQ29udmVyc2lvbiBmcm9tIGFuIE1TLVdpbmRvd3MgY29kZXBhZ2Ugb3IgVVRGLTggdG8gVVRGLTggb3IKKwkJICogYSBjb2RlcGFnZSwgdXNpbmcgc3RhbmRhcmQgTVMtV2luZG93cyBmdW5jdGlvbnMuCisJCSAqIDEuIGZpbmQgb3V0IGhvdyBtYW55IHVjcy0yIGNoYXJhY3RlcnMgdGhlcmUgYXJlLgorCQkgKiAyLiBjb252ZXJ0IGZyb20gJ2ZpbGVlbmNvZGluZycgdG8gdWNzLTIKKwkJICogMy4gY29udmVydCBmcm9tIHVjcy0yIHRvICdlbmNvZGluZycKKwkJICovCisJCWNoYXJfdQkqdWNzcDsKKwkJc2l6ZV90CWZyb21fc2l6ZSA9IHNpemU7CisJCWludAluZWVkZWQ7CisJCWNoYXJfdQkqcDsKKwkJaW50CXU4YzsKKworCQkvKgorCQkgKiAxLiBmaW5kIG91dCBob3cgbWFueSB1Y3MtMiBjaGFyYWN0ZXJzIHRoZXJlIGFyZS4KKwkJICovCisjICBpZmRlZiBDUF9VVEY4CS8qIFZDIDQuMSBkb2Vzbid0IGRlZmluZSBDUF9VVEY4ICovCisJCWlmIChGSU9fR0VUX0NQKGZpb19mbGFncykgPT0gQ1BfVVRGOCkKKwkJeworCQkgICAgaW50CQlsLCBmbGVuOworCisJCSAgICAvKiBIYW5kbGUgQ1BfVVRGOCBvdXJzZWx2ZXMgdG8gYmUgYWJsZSB0byBoYW5kbGUgdHJhaWxpbmcKKwkJICAgICAqIGJ5dGVzIHByb3Blcmx5LiAgRmlyc3QgZmluZCBvdXQgdGhlIG51bWJlciBvZgorCQkgICAgICogY2hhcmFjdGVycyBhbmQgY2hlY2sgZm9yIHRyYWlsaW5nIGJ5dGVzLiAqLworCQkgICAgbmVlZGVkID0gMDsKKwkJICAgIHAgPSBwdHI7CisJCSAgICBmb3IgKGZsZW4gPSBmcm9tX3NpemU7IGZsZW4gPiAwOyBmbGVuIC09IGwpCisJCSAgICB7CisJCQlsID0gdXRmX3B0cjJsZW5fY2hlY2tfbGVuKHAsIGZsZW4pOworCQkJaWYgKGwgPiBmbGVuKQkJCS8qIGluY29tcGxldGUgY2hhciAqLworCQkJeworCQkJICAgIGlmIChsID4gQ09OVl9SRVNUTEVOKQorCQkJCS8qIHdlaXJkIG92ZXJsb25nIGJ5dGUgc2VxdWVuY2UgKi8KKwkJCQlnb3RvIHJld2luZF9yZXRyeTsKKwkJCSAgICBtY2hfbWVtbW92ZShjb252X3Jlc3QsIHAsIGZsZW4pOworCQkJICAgIGNvbnZfcmVzdGxlbiA9IGZsZW47CisJCQkgICAgZnJvbV9zaXplIC09IGZsZW47CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQlpZiAobCA9PSAxICYmICpwID49IDB4ODApCS8qIGlsbGVnYWwgYnl0ZSAqLworCQkJICAgIGdvdG8gcmV3aW5kX3JldHJ5OworCQkJKytuZWVkZWQ7CisJCQlwICs9IGw7CisJCSAgICB9CisJCX0KKwkJZWxzZQorIyAgZW5kaWYKKwkJeworCQkgICAgLyogV2UgY2FuJ3QgdGVsbCBpZiB0aGUgbGFzdCBieXRlIG9mIGFuIE1CQ1Mgc3RyaW5nIGlzCisJCSAgICAgKiB2YWxpZCBhbmQgTXVsdGlCeXRlVG9XaWRlQ2hhcigpIHJldHVybnMgemVybyBpZiBpdAorCQkgICAgICogaXNuJ3QuICBUcnkgdGhlIHdob2xlIHN0cmluZywgYW5kIGlmIHRoYXQgZmFpbHMsIGJ1bXAKKwkJICAgICAqIHRoZSBsYXN0IGJ5dGUgaW50byBjb252X3Jlc3QgYW5kIHRyeSBhZ2Fpbi4gKi8KKwkJICAgIG5lZWRlZCA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoRklPX0dFVF9DUChmaW9fZmxhZ3MpLAorCQkJCSBNQl9FUlJfSU5WQUxJRF9DSEFSUywgKExQQ1NUUilwdHIsIGZyb21fc2l6ZSwKKwkJCQkJCQkJICAgICBOVUxMLCAwKTsKKwkJICAgIGlmIChuZWVkZWQgPT0gMCkKKwkJICAgIHsKKwkJCWNvbnZfcmVzdFswXSA9IHB0cltmcm9tX3NpemUgLSAxXTsKKwkJCWNvbnZfcmVzdGxlbiA9IDE7CisJCQktLWZyb21fc2l6ZTsKKwkJCW5lZWRlZCA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoRklPX0dFVF9DUChmaW9fZmxhZ3MpLAorCQkJCSBNQl9FUlJfSU5WQUxJRF9DSEFSUywgKExQQ1NUUilwdHIsIGZyb21fc2l6ZSwKKwkJCQkJCQkJICAgICBOVUxMLCAwKTsKKwkJICAgIH0KKworCQkgICAgLyogSWYgdGhlcmUgcmVhbGx5IGlzIGEgY29udmVyc2lvbiBlcnJvciwgdHJ5IHVzaW5nIGFub3RoZXIKKwkJICAgICAqIGNvbnZlcnNpb24uICovCisJCSAgICBpZiAobmVlZGVkID09IDApCisJCQlnb3RvIHJld2luZF9yZXRyeTsKKwkJfQorCisJCS8qCisJCSAqIDIuIGNvbnZlcnQgZnJvbSAnZmlsZWVuY29kaW5nJyB0byB1Y3MtMgorCQkgKgorCQkgKiBQdXQgdGhlIHJlc3VsdCBvZiBjb252ZXJzaW9uIHRvIFVDUy0yIGF0IHRoZSBlbmQgb2YgdGhlCisJCSAqIGJ1ZmZlciwgdGhlbiBjb252ZXJ0IGZyb20gVUNTLTIgdG8gVVRGLTggb3IgImVuY19jb2RlcGFnZSIKKwkJICogaW50byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UKKwkJICoganVzdCBmYWlsLCB0aGVyZSBpcyBwcm9iYWJseSBzb21ldGhpbmcgd3JvbmcuCisJCSAqLworCQl1Y3NwID0gcHRyICsgcmVhbF9zaXplIC0gKG5lZWRlZCAqIHNpemVvZihXQ0hBUikpOworCQlpZiAodWNzcCA8IHB0ciArIHNpemUpCisJCSAgICBnb3RvIHJld2luZF9yZXRyeTsKKworIyAgaWZkZWYgQ1BfVVRGOAkvKiBWQyA0LjEgZG9lc24ndCBkZWZpbmUgQ1BfVVRGOCAqLworCQlpZiAoRklPX0dFVF9DUChmaW9fZmxhZ3MpID09IENQX1VURjgpCisJCXsKKwkJICAgIGludAkJbCwgZmxlbjsKKworCQkgICAgLyogQ29udmVydCBmcm9tIHV0Zi04IHRvIHVjcy0yLiAqLworCQkgICAgbmVlZGVkID0gMDsKKwkJICAgIHAgPSBwdHI7CisJCSAgICBmb3IgKGZsZW4gPSBmcm9tX3NpemU7IGZsZW4gPiAwOyBmbGVuIC09IGwpCisJCSAgICB7CisJCQlsID0gdXRmX3B0cjJsZW5fY2hlY2tfbGVuKHAsIGZsZW4pOworCQkJdThjID0gdXRmX3B0cjJjaGFyKHApOworCQkJdWNzcFtuZWVkZWQgKiAyXSA9ICh1OGMgJiAweGZmKTsKKwkJCXVjc3BbbmVlZGVkICogMiArIDFdID0gKHU4YyA+PiA4KTsKKwkJCSsrbmVlZGVkOworCQkJcCArPSBsOworCQkgICAgfQorCQl9CisJCWVsc2UKKyMgIGVuZGlmCisJCSAgICBuZWVkZWQgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKEZJT19HRVRfQ1AoZmlvX2ZsYWdzKSwKKwkJCQkJICAgIE1CX0VSUl9JTlZBTElEX0NIQVJTLCAoTFBDU1RSKXB0ciwKKwkJCQkJICAgICBmcm9tX3NpemUsIChMUFdTVFIpdWNzcCwgbmVlZGVkKTsKKworCQkvKgorCQkgKiAzLiBjb252ZXJ0IGZyb20gdWNzLTIgdG8gJ2VuY29kaW5nJworCQkgKi8KKwkJaWYgKGVuY191dGY4KQorCQl7CisJCSAgICAvKiBGcm9tIFVDUy0yIHRvIFVURi04LiAgQ2Fubm90IGZhaWwuICovCisJCSAgICBwID0gcHRyOworCQkgICAgZm9yICg7IG5lZWRlZCA+IDA7IC0tbmVlZGVkKQorCQkgICAgeworCQkJdThjID0gKnVjc3ArKzsKKwkJCXU4YyArPSAoKnVjc3ArKyA8PCA4KTsKKwkJCXAgKz0gdXRmX2NoYXIyYnl0ZXModThjLCBwKTsKKwkJICAgIH0KKwkJICAgIHNpemUgPSBwIC0gcHRyOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgQk9PTAliYWQgPSBGQUxTRTsKKworCQkgICAgLyogRnJvbSBVQ1MtMiB0byAiZW5jX2NvZGVwYWdlIi4gSWYgdGhlIGNvbnZlcnNpb24gdXNlcworCQkgICAgICogdGhlIGRlZmF1bHQgY2hhcmFjdGVyICI/IiwgdGhlIGRhdGEgZG9lc24ndCBmaXQgaW4gdGhpcworCQkgICAgICogZW5jb2RpbmcsIHNvIGZhaWwgKHVubGVzcyBmb3JjZWQpLiAqLworCQkgICAgc2l6ZSA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoZW5jX2NvZGVwYWdlLCAwLAorCQkJCQkJCShMUENXU1RSKXVjc3AsIG5lZWRlZCwKKwkJCQkJICAgIChMUFNUUilwdHIsIHJlYWxfc2l6ZSwgIj8iLCAmYmFkKTsKKwkJICAgIGlmIChiYWQgJiYgIWtlZXBfZGVzdF9lbmMpCisJCQlnb3RvIHJld2luZF9yZXRyeTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKyMgZW5kaWYKKyMgaWZkZWYgTUFDT1NfWAorCSAgICBpZiAoZmlvX2ZsYWdzICYgRklPX01BQ1JPTUFOKQorCSAgICB7CisJCS8qCisJCSAqIENvbnZlcnNpb24gZnJvbSBBcHBsZSBNYWNSb21hbiBjaGFyIGVuY29kaW5nIHRvIFVURi04IG9yCisJCSAqIGxhdGluMSwgdXNpbmcgc3RhbmRhcmQgQ2FyYm9uIGZyYW1ld29yay4KKwkJICovCisJCUNGU3RyaW5nUmVmCWNmc3RyOworCQlDRlJhbmdlCQlyOworCQlDRkluZGV4CQlsZW4gPSBzaXplOworCisJCS8qIE1hY1JvbWFuIGlzIGFuIDgtYml0IGVuY29kaW5nLCBubyBuZWVkIHRvIG1vdmUgYnl0ZXMgdG8KKwkJICogY29udl9yZXN0W10uICovCisJCWNmc3RyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoTlVMTCwgcHRyLCBsZW4sCisJCQkJCQlrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuLCAwKTsKKwkJLyoKKwkJICogSWYgdGhlcmUgaXMgYSBjb252ZXJzaW9uIGVycm9yLCB0cnkgdXNpbmcgYW5vdGhlcgorCQkgKiBjb252ZXJzaW9uLgorCQkgKi8KKwkJaWYgKGNmc3RyID09IE5VTEwpCisJCSAgICBnb3RvIHJld2luZF9yZXRyeTsKKworCQlyLmxvY2F0aW9uID0gMDsKKwkJci5sZW5ndGggPSBDRlN0cmluZ0dldExlbmd0aChjZnN0cik7CisJCWlmIChyLmxlbmd0aCAhPSBDRlN0cmluZ0dldEJ5dGVzKGNmc3RyLCByLAorCQkJKGVuY191dGY4KSA/IGtDRlN0cmluZ0VuY29kaW5nVVRGOAorCQkJCQkJIDoga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsCisJCQkwLCAvKiBubyBsb3NzeSBjb252ZXJzaW9uICovCisJCQkwLCAvKiBub3QgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gKi8KKwkJCXB0ciArIHNpemUsIHJlYWxfc2l6ZSAtIHNpemUsICZsZW4pKQorCQl7CisJCSAgICBDRlJlbGVhc2UoY2ZzdHIpOworCQkgICAgZ290byByZXdpbmRfcmV0cnk7CisJCX0KKwkJQ0ZSZWxlYXNlKGNmc3RyKTsKKwkJbWNoX21lbW1vdmUocHRyLCBwdHIgKyBzaXplLCBsZW4pOworCQlzaXplID0gbGVuOworCSAgICB9CisJICAgIGVsc2UKKyMgZW5kaWYKKwkgICAgaWYgKGZpb19mbGFncyAhPSAwKQorCSAgICB7CisJCWludAl1OGM7CisJCWNoYXJfdQkqZGVzdDsKKwkJY2hhcl91CSp0YWlsID0gTlVMTDsKKworCQkvKgorCQkgKiAiZW5jX3V0ZjgiIHNldDogQ29udmVydCBVbmljb2RlIG9yIExhdGluMSB0byBVVEYtOC4KKwkJICogImVuY191dGY4IiBub3Qgc2V0OiBDb252ZXJ0IFVuaWNvZGUgdG8gTGF0aW4xLgorCQkgKiBHbyBmcm9tIGVuZCB0byBzdGFydCB0aHJvdWdoIHRoZSBidWZmZXIsIGJlY2F1c2UgdGhlIG51bWJlcgorCQkgKiBvZiBieXRlcyBtYXkgaW5jcmVhc2UuCisJCSAqICJkZXN0IiBwb2ludHMgdG8gYWZ0ZXIgd2hlcmUgdGhlIFVURi04IGJ5dGVzIGdvLCAicCIgcG9pbnRzCisJCSAqIHRvIGFmdGVyIHRoZSBuZXh0IGNoYXJhY3RlciB0byBjb252ZXJ0LgorCQkgKi8KKwkJZGVzdCA9IHB0ciArIHJlYWxfc2l6ZTsKKwkJaWYgKGZpb19mbGFncyA9PSBGSU9fTEFUSU4xIHx8IGZpb19mbGFncyA9PSBGSU9fVVRGOCkKKwkJeworCQkgICAgcCA9IHB0ciArIHNpemU7CisJCSAgICBpZiAoZmlvX2ZsYWdzID09IEZJT19VVEY4KQorCQkgICAgeworCQkJLyogQ2hlY2sgZm9yIGEgdHJhaWxpbmcgaW5jb21wbGV0ZSBVVEYtOCBzZXF1ZW5jZSAqLworCQkJdGFpbCA9IHB0ciArIHNpemUgLSAxOworCQkJd2hpbGUgKHRhaWwgPiBwdHIgJiYgKCp0YWlsICYgMHhjMCkgPT0gMHg4MCkKKwkJCSAgICAtLXRhaWw7CisJCQlpZiAodGFpbCArIHV0Zl9ieXRlMmxlbigqdGFpbCkgPD0gcHRyICsgc2l6ZSkKKwkJCSAgICB0YWlsID0gTlVMTDsKKwkJCWVsc2UKKwkJCSAgICBwID0gdGFpbDsKKwkJICAgIH0KKwkJfQorCQllbHNlIGlmIChmaW9fZmxhZ3MgJiAoRklPX1VDUzIgfCBGSU9fVVRGMTYpKQorCQl7CisJCSAgICAvKiBDaGVjayBmb3IgYSB0cmFpbGluZyBieXRlICovCisJCSAgICBwID0gcHRyICsgKHNpemUgJiB+MSk7CisJCSAgICBpZiAoc2l6ZSAmIDEpCisJCQl0YWlsID0gcDsKKwkJICAgIGlmICgoZmlvX2ZsYWdzICYgRklPX1VURjE2KSAmJiBwID4gcHRyKQorCQkgICAgeworCQkJLyogQ2hlY2sgZm9yIGEgdHJhaWxpbmcgbGVhZGluZyB3b3JkICovCisJCQlpZiAoZmlvX2ZsYWdzICYgRklPX0VORElBTl9MKQorCQkJeworCQkJICAgIHU4YyA9ICgqLS1wIDw8IDgpOworCQkJICAgIHU4YyArPSAqLS1wOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJICAgIHU4YyA9ICotLXA7CisJCQkgICAgdThjICs9ICgqLS1wIDw8IDgpOworCQkJfQorCQkJaWYgKHU4YyA+PSAweGQ4MDAgJiYgdThjIDw9IDB4ZGJmZikKKwkJCSAgICB0YWlsID0gcDsKKwkJCWVsc2UKKwkJCSAgICBwICs9IDI7CisJCSAgICB9CisJCX0KKwkJZWxzZSAvKiAgRklPX1VDUzQgKi8KKwkJeworCQkgICAgLyogQ2hlY2sgZm9yIHRyYWlsaW5nIDEsIDIgb3IgMyBieXRlcyAqLworCQkgICAgcCA9IHB0ciArIChzaXplICYgfjMpOworCQkgICAgaWYgKHNpemUgJiAzKQorCQkJdGFpbCA9IHA7CisJCX0KKworCQkvKiBJZiB0aGVyZSBpcyBhIHRyYWlsaW5nIGluY29tcGxldGUgc2VxdWVuY2UgbW92ZSBpdCB0bworCQkgKiBjb252X3Jlc3RbXS4gKi8KKwkJaWYgKHRhaWwgIT0gTlVMTCkKKwkJeworCQkgICAgY29udl9yZXN0bGVuID0gKGludCkoKHB0ciArIHNpemUpIC0gdGFpbCk7CisJCSAgICBtY2hfbWVtbW92ZShjb252X3Jlc3QsIChjaGFyX3UgKil0YWlsLCBjb252X3Jlc3RsZW4pOworCQkgICAgc2l6ZSAtPSBjb252X3Jlc3RsZW47CisJCX0KKworCisJCXdoaWxlIChwID4gcHRyKQorCQl7CisJCSAgICBpZiAoZmlvX2ZsYWdzICYgRklPX0xBVElOMSkKKwkJCXU4YyA9ICotLXA7CisJCSAgICBlbHNlIGlmIChmaW9fZmxhZ3MgJiAoRklPX1VDUzIgfCBGSU9fVVRGMTYpKQorCQkgICAgeworCQkJaWYgKGZpb19mbGFncyAmIEZJT19FTkRJQU5fTCkKKwkJCXsKKwkJCSAgICB1OGMgPSAoKi0tcCA8PCA4KTsKKwkJCSAgICB1OGMgKz0gKi0tcDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCSAgICB1OGMgPSAqLS1wOworCQkJICAgIHU4YyArPSAoKi0tcCA8PCA4KTsKKwkJCX0KKwkJCWlmICgoZmlvX2ZsYWdzICYgRklPX1VURjE2KQorCQkJCQkgICAgJiYgdThjID49IDB4ZGMwMCAmJiB1OGMgPD0gMHhkZmZmKQorCQkJeworCQkJICAgIGludCB1MTZjOworCisJCQkgICAgaWYgKHAgPT0gcHRyKQorCQkJICAgIHsKKwkJCQkvKiBNaXNzaW5nIGxlYWRpbmcgd29yZC4gKi8KKwkJCQlpZiAoY2FuX3JldHJ5KQorCQkJCSAgICBnb3RvIHJld2luZF9yZXRyeTsKKwkJCQljb252X2Vycm9yID0gVFJVRTsKKwkJCSAgICB9CisKKwkJCSAgICAvKiBmb3VuZCBzZWNvbmQgd29yZCBvZiBkb3VibGUtd29yZCwgZ2V0IHRoZSBmaXJzdAorCQkJICAgICAqIHdvcmQgYW5kIGNvbXB1dGUgdGhlIHJlc3VsdGluZyBjaGFyYWN0ZXIgKi8KKwkJCSAgICBpZiAoZmlvX2ZsYWdzICYgRklPX0VORElBTl9MKQorCQkJICAgIHsKKwkJCQl1MTZjID0gKCotLXAgPDwgOCk7CisJCQkJdTE2YyArPSAqLS1wOworCQkJICAgIH0KKwkJCSAgICBlbHNlCisJCQkgICAgeworCQkJCXUxNmMgPSAqLS1wOworCQkJCXUxNmMgKz0gKCotLXAgPDwgOCk7CisJCQkgICAgfQorCQkJICAgIC8qIENoZWNrIGlmIHRoZSB3b3JkIGlzIGluZGVlZCBhIGxlYWRpbmcgd29yZC4gKi8KKwkJCSAgICBpZiAodTE2YyA8IDB4ZDgwMCB8fCB1MTZjID4gMHhkYmZmKQorCQkJICAgIHsKKwkJCQlpZiAoY2FuX3JldHJ5KQorCQkJCSAgICBnb3RvIHJld2luZF9yZXRyeTsKKwkJCQljb252X2Vycm9yID0gVFJVRTsKKwkJCSAgICB9CisJCQkgICAgdThjID0gMHgxMDAwMCArICgodTE2YyAmIDB4M2ZmKSA8PCAxMCkKKwkJCQkJCQkgICAgICArICh1OGMgJiAweDNmZik7CisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChmaW9fZmxhZ3MgJiBGSU9fVUNTNCkKKwkJICAgIHsKKwkJCWlmIChmaW9fZmxhZ3MgJiBGSU9fRU5ESUFOX0wpCisJCQl7CisJCQkgICAgdThjID0gKCotLXAgPDwgMjQpOworCQkJICAgIHU4YyArPSAoKi0tcCA8PCAxNik7CisJCQkgICAgdThjICs9ICgqLS1wIDw8IDgpOworCQkJICAgIHU4YyArPSAqLS1wOworCQkJfQorCQkJZWxzZQkvKiBiaWcgZW5kaWFuICovCisJCQl7CisJCQkgICAgdThjID0gKi0tcDsKKwkJCSAgICB1OGMgKz0gKCotLXAgPDwgOCk7CisJCQkgICAgdThjICs9ICgqLS1wIDw8IDE2KTsKKwkJCSAgICB1OGMgKz0gKCotLXAgPDwgMjQpOworCQkJfQorCQkgICAgfQorCQkgICAgZWxzZSAgICAvKiBVVEYtOCAqLworCQkgICAgeworCQkJaWYgKCotLXAgPCAweDgwKQorCQkJICAgIHU4YyA9ICpwOworCQkJZWxzZQorCQkJeworCQkJICAgIGxlbiA9IHV0Zl9oZWFkX29mZihwdHIsIHApOworCQkJICAgIGlmIChsZW4gPT0gMCkKKwkJCSAgICB7CisJCQkJLyogTm90IGEgdmFsaWQgVVRGLTggY2hhcmFjdGVyLCByZXRyeSB3aXRoCisJCQkJICogYW5vdGhlciBmZW5jIHdoZW4gcG9zc2libGUsIG90aGVyd2lzZSBqdXN0CisJCQkJICogcmVwb3J0IHRoZSBlcnJvci4gKi8KKwkJCQlpZiAoY2FuX3JldHJ5KQorCQkJCSAgICBnb3RvIHJld2luZF9yZXRyeTsKKwkJCQljb252X2Vycm9yID0gVFJVRTsKKwkJCSAgICB9CisJCQkgICAgcCAtPSBsZW47CisJCQkgICAgdThjID0gdXRmX3B0cjJjaGFyKHApOworCQkJfQorCQkgICAgfQorCQkgICAgaWYgKGVuY191dGY4KQkvKiBwcm9kdWNlIFVURi04ICovCisJCSAgICB7CisJCQlkZXN0IC09IHV0Zl9jaGFyMmxlbih1OGMpOworCQkJKHZvaWQpdXRmX2NoYXIyYnl0ZXModThjLCBkZXN0KTsKKwkJICAgIH0KKwkJICAgIGVsc2UJCS8qIHByb2R1Y2UgTGF0aW4xICovCisJCSAgICB7CisJCQktLWRlc3Q7CisJCQlpZiAodThjID49IDB4MTAwKQorCQkJeworCQkJICAgIC8qIGNoYXJhY3RlciBkb2Vzbid0IGZpdCBpbiBsYXRpbjEsIHJldHJ5IHdpdGgKKwkJCSAgICAgKiBhbm90aGVyIGZlbmMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGp1c3QKKwkJCSAgICAgKiByZXBvcnQgdGhlIGVycm9yLiAqLworCQkJICAgIGlmIChjYW5fcmV0cnkgJiYgIWtlZXBfZGVzdF9lbmMpCisJCQkJZ290byByZXdpbmRfcmV0cnk7CisJCQkgICAgKmRlc3QgPSAweEJGOworCQkJICAgIGNvbnZfZXJyb3IgPSBUUlVFOworCQkJfQorCQkJZWxzZQorCQkJICAgICpkZXN0ID0gdThjOworCQkgICAgfQorCQl9CisKKwkJLyogbW92ZSB0aGUgbGluZXJlc3QgdG8gYmVmb3JlIHRoZSBjb252ZXJ0ZWQgY2hhcmFjdGVycyAqLworCQlsaW5lX3N0YXJ0ID0gZGVzdCAtIGxpbmVyZXN0OworCQltY2hfbWVtbW92ZShsaW5lX3N0YXJ0LCBidWZmZXIsIChzaXplX3QpbGluZXJlc3QpOworCQlzaXplID0gKGxvbmcpKChwdHIgKyByZWFsX3NpemUpIC0gZGVzdCk7CisJCXB0ciA9IGRlc3Q7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoZW5jX3V0ZjggJiYgIWNvbnZfZXJyb3IgJiYgIWN1cmJ1Zi0+Yl9wX2JpbikKKwkgICAgeworCQkvKiBSZWFkaW5nIFVURi04OiBDaGVjayBpZiB0aGUgYnl0ZXMgYXJlIHZhbGlkIFVURi04LgorCQkgKiBOZWVkIHRvIHN0YXJ0IGJlZm9yZSAicHRyIiB3aGVuIHBhcnQgb2YgdGhlIGNoYXJhY3RlciB3YXMKKwkJICogcmVhZCBpbiB0aGUgcHJldmlvdXMgcmVhZCgpIGNhbGwuICovCisJCWZvciAocCA9IHB0ciAtIHV0Zl9oZWFkX29mZihidWZmZXIsIHB0cik7IHAgPCBwdHIgKyBzaXplOyArK3ApCisJCXsKKwkJICAgIGlmICgqcCA+PSAweDgwKQorCQkgICAgeworCQkJbGVuID0gdXRmX3B0cjJsZW5fY2hlY2socCk7CisJCQkvKiBBIGxlbmd0aCBvZiAxIG1lYW5zIGl0J3MgYW4gaWxsZWdhbCBieXRlLiAgQWNjZXB0CisJCQkgKiBhbiBpbmNvbXBsZXRlIGNoYXJhY3RlciBhdCB0aGUgZW5kIHRob3VnaCwgdGhlIG5leHQKKwkJCSAqIHJlYWQoKSB3aWxsIGdldCB0aGUgbmV4dCBieXRlcywgd2UnbGwgY2hlY2sgaXQKKwkJCSAqIHRoZW4uICovCisJCQlpZiAobGVuID09IDEpCisJCQl7CisJCQkgICAgcCArPSB1dGZfYnl0ZTJsZW4oKnApIC0gMTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCXAgKz0gbGVuIC0gMTsKKwkJICAgIH0KKwkJfQorCQlpZiAocCA8IHB0ciArIHNpemUpCisJCXsKKwkJICAgIC8qIERldGVjdGVkIGEgVVRGLTggZXJyb3IuICovCisJCSAgICBpZiAoY2FuX3JldHJ5KQorCQkgICAgeworcmV3aW5kX3JldHJ5OgorCQkJLyogUmV0cnkgcmVhZGluZyB3aXRoIGFub3RoZXIgY29udmVyc2lvbi4gKi8KKyMgaWYgZGVmaW5lZChGRUFUX0VWQUwpICYmIGRlZmluZWQoVVNFX0lDT05WKQorCQkJaWYgKCpwX2NjdiAhPSBOVUwgJiYgaWNvbnZfZmQgIT0gKGljb252X3QpLTEpCisJCQkgICAgLyogaWNvbnYoKSBmYWlsZWQsIHRyeSAnY2hhcmNvbnZlcnQnICovCisJCQkgICAgZGlkX2ljb252ID0gVFJVRTsKKwkJCWVsc2UKKyMgZW5kaWYKKwkJCSAgICAvKiB1c2UgbmV4dCBpdGVtIGZyb20gJ2ZpbGVlbmNvZGluZ3MnICovCisJCQkgICAgYWR2YW5jZV9mZW5jID0gVFJVRTsKKwkJCWZpbGVfcmV3aW5kID0gVFJVRTsKKwkJCWdvdG8gcmV0cnk7CisJCSAgICB9CisKKwkJICAgIC8qIFRoZXJlIGlzIG5vIGFsdGVybmF0aXZlIGZlbmMsIGp1c3QgcmVwb3J0IHRoZSBlcnJvci4gKi8KKyMgaWZkZWYgVVNFX0lDT05WCisJCSAgICBpZiAoaWNvbnZfZmQgIT0gKGljb252X3QpLTEpCisJCQljb252X2Vycm9yID0gVFJVRTsKKwkJICAgIGVsc2UKKyMgZW5kaWYKKwkJICAgIHsKKwkJCWNoYXJfdQkJKnM7CisKKwkJCS8qIEVzdGltYXRlIHRoZSBsaW5lIG51bWJlci4gKi8KKwkJCWlsbGVnYWxfYnl0ZSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50IC0gbGluZWNudCArIDE7CisJCQlmb3IgKHMgPSBwdHI7IHMgPCBwOyArK3MpCisJCQkgICAgaWYgKCpzID09ICdcbicpCisJCQkJKytpbGxlZ2FsX2J5dGU7CisJCSAgICB9CisJCX0KKwkgICAgfQorI2VuZGlmCisKKwkgICAgLyogY291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIChhZnRlciBjb252ZXJzaW9uISkgKi8KKwkgICAgZmlsZXNpemUgKz0gc2l6ZTsKKworCSAgICAvKgorCSAgICAgKiB3aGVuIHJlYWRpbmcgdGhlIGZpcnN0IHBhcnQgb2YgYSBmaWxlOiBndWVzcyBFT0wgdHlwZQorCSAgICAgKi8KKwkgICAgaWYgKGZpbGVmb3JtYXQgPT0gRU9MX1VOS05PV04pCisJICAgIHsKKwkJLyogRmlyc3QgdHJ5IGZpbmRpbmcgYSBOTCwgZm9yIERvcyBhbmQgVW5peCAqLworCQlpZiAodHJ5X2RvcyB8fCB0cnlfdW5peCkKKwkJeworCQkgICAgZm9yIChwID0gcHRyOyBwIDwgcHRyICsgc2l6ZTsgKytwKQorCQkgICAgeworCQkJaWYgKCpwID09IE5MKQorCQkJeworCQkJICAgIGlmICghdHJ5X3VuaXgKKwkJCQkgICAgfHwgKHRyeV9kb3MgJiYgcCA+IHB0ciAmJiBwWy0xXSA9PSBDQVIpKQorCQkJCWZpbGVmb3JtYXQgPSBFT0xfRE9TOworCQkJICAgIGVsc2UKKwkJCQlmaWxlZm9ybWF0ID0gRU9MX1VOSVg7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisKKwkJICAgIC8qIERvbid0IGdpdmUgaW4gdG8gRU9MX1VOSVggaWYgRU9MX01BQyBpcyBtb3JlIGxpa2VseSAqLworCQkgICAgaWYgKGZpbGVmb3JtYXQgPT0gRU9MX1VOSVggJiYgdHJ5X21hYykKKwkJICAgIHsKKwkJCS8qIE5lZWQgdG8gcmVzZXQgdGhlIGNvdW50ZXJzIHdoZW4gcmV0cnlpbmcgZmVuYy4gKi8KKwkJCXRyeV9tYWMgPSAxOworCQkJdHJ5X3VuaXggPSAxOworCQkJZm9yICg7IHAgPj0gcHRyICYmICpwICE9IENBUjsgcC0tKQorCQkJICAgIDsKKwkJCWlmIChwID49IHB0cikKKwkJCXsKKwkJCSAgICBmb3IgKHAgPSBwdHI7IHAgPCBwdHIgKyBzaXplOyArK3ApCisJCQkgICAgeworCQkJCWlmICgqcCA9PSBOTCkKKwkJCQkgICAgdHJ5X3VuaXgrKzsKKwkJCQllbHNlIGlmICgqcCA9PSBDQVIpCisJCQkJICAgIHRyeV9tYWMrKzsKKwkJCSAgICB9CisJCQkgICAgaWYgKHRyeV9tYWMgPiB0cnlfdW5peCkKKwkJCQlmaWxlZm9ybWF0ID0gRU9MX01BQzsKKwkJCX0KKwkJICAgIH0KKwkJfQorCisJCS8qIE5vIE5MIGZvdW5kOiBtYXkgdXNlIE1hYyBmb3JtYXQgKi8KKwkJaWYgKGZpbGVmb3JtYXQgPT0gRU9MX1VOS05PV04gJiYgdHJ5X21hYykKKwkJICAgIGZpbGVmb3JtYXQgPSBFT0xfTUFDOworCisJCS8qIFN0aWxsIG5vdGhpbmcgZm91bmQ/ICBVc2UgZmlyc3QgZm9ybWF0IGluICdmZnMnICovCisJCWlmIChmaWxlZm9ybWF0ID09IEVPTF9VTktOT1dOKQorCQkgICAgZmlsZWZvcm1hdCA9IGRlZmF1bHRfZmlsZWZvcm1hdCgpOworCisJCS8qIGlmIGVkaXRpbmcgYSBuZXcgZmlsZTogbWF5IHNldCBwX3R4IGFuZCBwX2ZmICovCisJCWlmIChuZXdmaWxlKQorCQkgICAgc2V0X2ZpbGVmb3JtYXQoZmlsZWZvcm1hdCwgT1BUX0xPQ0FMKTsKKwkgICAgfQorCX0KKworCS8qCisJICogVGhpcyBsb29wIGlzIGV4ZWN1dGVkIG9uY2UgZm9yIGV2ZXJ5IGNoYXJhY3RlciByZWFkLgorCSAqIEtlZXAgaXQgZmFzdCEKKwkgKi8KKwlpZiAoZmlsZWZvcm1hdCA9PSBFT0xfTUFDKQorCXsKKwkgICAgLS1wdHI7CisJICAgIHdoaWxlICgrK3B0ciwgLS1zaXplID49IDApCisJICAgIHsKKwkJLyogY2F0Y2ggbW9zdCBjb21tb24gY2FzZSBmaXJzdCAqLworCQlpZiAoKGMgPSAqcHRyKSAhPSBOVUwgJiYgYyAhPSBDQVIgJiYgYyAhPSBOTCkKKwkJICAgIGNvbnRpbnVlOworCQlpZiAoYyA9PSBOVUwpCisJCSAgICAqcHRyID0gTkw7CS8qIE5VTHMgYXJlIHJlcGxhY2VkIGJ5IG5ld2xpbmVzISAqLworCQllbHNlIGlmIChjID09IE5MKQorCQkgICAgKnB0ciA9IENBUjsJLyogTkxzIGFyZSByZXBsYWNlZCBieSBDUnMhICovCisJCWVsc2UKKwkJeworCQkgICAgaWYgKHNraXBfY291bnQgPT0gMCkKKwkJICAgIHsKKwkJCSpwdHIgPSBOVUw7CSAgICAvKiBlbmQgb2YgbGluZSAqLworCQkJbGVuID0gKGNvbG5yX1QpIChwdHIgLSBsaW5lX3N0YXJ0ICsgMSk7CisJCQlpZiAobWxfYXBwZW5kKGxudW0sIGxpbmVfc3RhcnQsIGxlbiwgbmV3ZmlsZSkgPT0gRkFJTCkKKwkJCXsKKwkJCSAgICBlcnJvciA9IFRSVUU7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQkrK2xudW07CisJCQlpZiAoLS1yZWFkX2NvdW50ID09IDApCisJCQl7CisJCQkgICAgZXJyb3IgPSBUUlVFOwkvKiBicmVhayBsb29wICovCisJCQkgICAgbGluZV9zdGFydCA9IHB0cjsJLyogbm90aGluZyBsZWZ0IHRvIHdyaXRlICovCisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlCisJCQktLXNraXBfY291bnQ7CisJCSAgICBsaW5lX3N0YXJ0ID0gcHRyICsgMTsKKwkJfQorCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIC0tcHRyOworCSAgICB3aGlsZSAoKytwdHIsIC0tc2l6ZSA+PSAwKQorCSAgICB7CisJCWlmICgoYyA9ICpwdHIpICE9IE5VTCAmJiBjICE9IE5MKSAgLyogY2F0Y2ggbW9zdCBjb21tb24gY2FzZSAqLworCQkgICAgY29udGludWU7CisJCWlmIChjID09IE5VTCkKKwkJICAgICpwdHIgPSBOTDsJLyogTlVMcyBhcmUgcmVwbGFjZWQgYnkgbmV3bGluZXMhICovCisJCWVsc2UKKwkJeworCQkgICAgaWYgKHNraXBfY291bnQgPT0gMCkKKwkJICAgIHsKKwkJCSpwdHIgPSBOVUw7CQkvKiBlbmQgb2YgbGluZSAqLworCQkJbGVuID0gKGNvbG5yX1QpKHB0ciAtIGxpbmVfc3RhcnQgKyAxKTsKKwkJCWlmIChmaWxlZm9ybWF0ID09IEVPTF9ET1MpCisJCQl7CisJCQkgICAgaWYgKHB0clstMV0gPT0gQ0FSKQkvKiByZW1vdmUgQ1IgKi8KKwkJCSAgICB7CisJCQkJcHRyWy0xXSA9IE5VTDsKKwkJCQktLWxlbjsKKwkJCSAgICB9CisJCQkgICAgLyoKKwkJCSAgICAgKiBSZWFkaW5nIGluIERvcyBmb3JtYXQsIGJ1dCBubyBDUi1MRiBmb3VuZCEKKwkJCSAgICAgKiBXaGVuICdmaWxlZm9ybWF0cycgaW5jbHVkZXMgInVuaXgiLCBkZWxldGUgYWxsCisJCQkgICAgICogdGhlIGxpbmVzIHJlYWQgc28gZmFyIGFuZCBzdGFydCBhbGwgb3ZlciBhZ2Fpbi4KKwkJCSAgICAgKiBPdGhlcndpc2UgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGxhdGVyLgorCQkJICAgICAqLworCQkJICAgIGVsc2UgaWYgKGZmX2Vycm9yICE9IEVPTF9ET1MpCisJCQkgICAgeworCQkJCWlmICggICB0cnlfdW5peAorCQkJCSAgICAmJiAhcmVhZF9zdGRpbgorCQkJCSAgICAmJiAocmVhZF9idWZmZXIKKwkJCQkJfHwgbHNlZWsoZmQsIChvZmZfdCkwTCwgU0VFS19TRVQpID09IDApKQorCQkJCXsKKwkJCQkgICAgZmlsZWZvcm1hdCA9IEVPTF9VTklYOworCQkJCSAgICBpZiAobmV3ZmlsZSkKKwkJCQkJc2V0X2ZpbGVmb3JtYXQoRU9MX1VOSVgsIE9QVF9MT0NBTCk7CisJCQkJICAgIGZpbGVfcmV3aW5kID0gVFJVRTsKKwkJCQkgICAga2VlcF9maWxlZm9ybWF0ID0gVFJVRTsKKwkJCQkgICAgZ290byByZXRyeTsKKwkJCQl9CisJCQkJZmZfZXJyb3IgPSBFT0xfRE9TOworCQkJICAgIH0KKwkJCX0KKwkJCWlmIChtbF9hcHBlbmQobG51bSwgbGluZV9zdGFydCwgbGVuLCBuZXdmaWxlKSA9PSBGQUlMKQorCQkJeworCQkJICAgIGVycm9yID0gVFJVRTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCSsrbG51bTsKKwkJCWlmICgtLXJlYWRfY291bnQgPT0gMCkKKwkJCXsKKwkJCSAgICBlcnJvciA9IFRSVUU7CSAgICAvKiBicmVhayBsb29wICovCisJCQkgICAgbGluZV9zdGFydCA9IHB0cjsJLyogbm90aGluZyBsZWZ0IHRvIHdyaXRlICovCisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlCisJCQktLXNraXBfY291bnQ7CisJCSAgICBsaW5lX3N0YXJ0ID0gcHRyICsgMTsKKwkJfQorCSAgICB9CisJfQorCWxpbmVyZXN0ID0gKGxvbmcpKHB0ciAtIGxpbmVfc3RhcnQpOworCXVpX2JyZWFrY2hlY2soKTsKKyAgICB9CisKK2ZhaWxlZDoKKyAgICAvKiBub3QgYW4gZXJyb3IsIG1heC4gbnVtYmVyIG9mIGxpbmVzIHJlYWNoZWQgKi8KKyAgICBpZiAoZXJyb3IgJiYgcmVhZF9jb3VudCA9PSAwKQorCWVycm9yID0gRkFMU0U7CisKKyAgICAvKgorICAgICAqIElmIHdlIGdldCBFT0YgaW4gdGhlIG1pZGRsZSBvZiBhIGxpbmUsIG5vdGUgdGhlIGZhY3QgYW5kCisgICAgICogY29tcGxldGUgdGhlIGxpbmUgb3Vyc2VsdmVzLgorICAgICAqIEluIERvcyBmb3JtYXQgaWdub3JlIGEgdHJhaWxpbmcgQ1RSTC1aLCB1bmxlc3MgJ2JpbmFyeScgc2V0LgorICAgICAqLworICAgIGlmICghZXJyb3IKKwkgICAgJiYgIWdvdF9pbnQKKwkgICAgJiYgbGluZXJlc3QgIT0gMAorCSAgICAmJiAhKCFjdXJidWYtPmJfcF9iaW4KKwkJJiYgZmlsZWZvcm1hdCA9PSBFT0xfRE9TCisJCSYmICpsaW5lX3N0YXJ0ID09IEN0cmxfWgorCQkmJiBwdHIgPT0gbGluZV9zdGFydCArIDEpKQorICAgIHsKKwlpZiAobmV3ZmlsZSkJCQkvKiByZW1lbWJlciBmb3Igd2hlbiB3cml0aW5nICovCisJICAgIGN1cmJ1Zi0+Yl9wX2VvbCA9IEZBTFNFOworCSpwdHIgPSBOVUw7CisJaWYgKG1sX2FwcGVuZChsbnVtLCBsaW5lX3N0YXJ0LAorCQkJKGNvbG5yX1QpKHB0ciAtIGxpbmVfc3RhcnQgKyAxKSwgbmV3ZmlsZSkgPT0gRkFJTCkKKwkgICAgZXJyb3IgPSBUUlVFOworCWVsc2UKKwkgICAgcmVhZF9ub19lb2xfbG51bSA9ICsrbG51bTsKKyAgICB9CisKKyAgICBpZiAobmV3ZmlsZSkKKwlzYXZlX2ZpbGVfZmYoY3VyYnVmKTsJCS8qIHJlbWVtYmVyIHRoZSBjdXJyZW50IGZpbGUgZm9ybWF0ICovCisKKyNpZmRlZiBGRUFUX0NSWVBUCisgICAgaWYgKGNyeXB0a2V5ICE9IGN1cmJ1Zi0+Yl9wX2tleSkKKwl2aW1fZnJlZShjcnlwdGtleSk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKiBJZiBlZGl0aW5nIGEgbmV3IGZpbGU6IHNldCAnZmVuYycgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlci4gKi8KKyAgICBpZiAobmV3ZmlsZSkKKwlzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QoKGNoYXJfdSAqKSJmZW5jIiwgLTEsIGZlbmMsCisJCQkJCQkJICBPUFRfRlJFRXxPUFRfTE9DQUwpOworICAgIGlmIChmZW5jX2FsbG9jZWQpCisJdmltX2ZyZWUoZmVuYyk7CisjIGlmZGVmIFVTRV9JQ09OVgorICAgIGlmIChpY29udl9mZCAhPSAoaWNvbnZfdCktMSkKKyAgICB7CisJaWNvbnZfY2xvc2UoaWNvbnZfZmQpOworCWljb252X2ZkID0gKGljb252X3QpLTE7CisgICAgfQorIyBlbmRpZgorI2VuZGlmCisKKyAgICBpZiAoIXJlYWRfYnVmZmVyICYmICFyZWFkX3N0ZGluKQorCWNsb3NlKGZkKTsJCQkJLyogZXJyb3JzIGFyZSBpZ25vcmVkICovCisgICAgdmltX2ZyZWUoYnVmZmVyKTsKKworI2lmZGVmIEhBVkVfRFVQCisgICAgaWYgKHJlYWRfc3RkaW4pCisgICAgeworCS8qIFVzZSBzdGRlcnIgZm9yIHN0ZGluLCBtYWtlcyBzaGVsbCBjb21tYW5kcyB3b3JrLiAqLworCWNsb3NlKDApOworCWR1cCgyKTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAodG1wbmFtZSAhPSBOVUxMKQorICAgIHsKKwltY2hfcmVtb3ZlKHRtcG5hbWUpOwkJLyogZGVsZXRlIGNvbnZlcnRlZCBmaWxlICovCisJdmltX2ZyZWUodG1wbmFtZSk7CisgICAgfQorI2VuZGlmCisgICAgLS1ub193YWl0X3JldHVybjsJCQkvKiBtYXkgd2FpdCBmb3IgcmV0dXJuIG5vdyAqLworCisgICAgLyoKKyAgICAgKiBJbiByZWNvdmVyeSBtb2RlIGV2ZXJ5dGhpbmcgYnV0IGF1dG9jb21tYW5kcyBpcyBza2lwcGVkLgorICAgICAqLworICAgIGlmICghcmVjb3Zlcnltb2RlKQorICAgIHsKKwkvKiBuZWVkIHRvIGRlbGV0ZSB0aGUgbGFzdCBsaW5lLCB3aGljaCBjb21lcyBmcm9tIHRoZSBlbXB0eSBidWZmZXIgKi8KKwlpZiAobmV3ZmlsZSAmJiB3YXNlbXB0eSAmJiAhKGN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZKSkKKwl7CisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJICAgIG5ldGJlYW5zRmlyZUNoYW5nZXMgPSAwOworI2VuZGlmCisJICAgIG1sX2RlbGV0ZShjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCwgRkFMU0UpOworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCSAgICBuZXRiZWFuc0ZpcmVDaGFuZ2VzID0gMTsKKyNlbmRpZgorCSAgICAtLWxpbmVjbnQ7CisJfQorCWxpbmVjbnQgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCAtIGxpbmVjbnQ7CisJaWYgKGZpbGVzaXplID09IDApCisJICAgIGxpbmVjbnQgPSAwOworCWlmIChuZXdmaWxlIHx8IHJlYWRfYnVmZmVyKQorCSAgICByZWRyYXdfY3VyYnVmX2xhdGVyKE5PVF9WQUxJRCk7CisJZWxzZSBpZiAobGluZWNudCkJCS8qIGFwcGVuZGVkIGF0IGxlYXN0IG9uZSBsaW5lICovCisJICAgIGFwcGVuZGVkX2xpbmVzX21hcmsoZnJvbSwgbGluZWNudCk7CisKKyNpZmRlZiBGRUFUX0RJRkYKKwkvKiBBZnRlciByZWFkaW5nIHRoZSB0ZXh0IGludG8gdGhlIGJ1ZmZlciB0aGUgZGlmZiBpbmZvIG5lZWRzIHRvIGJlCisJICogdXBkYXRlZC4gKi8KKwlpZiAoKG5ld2ZpbGUgfHwgcmVhZF9idWZmZXIpKQorCSAgICBkaWZmX2ludmFsaWRhdGUoKTsKKyNlbmRpZgorI2lmbmRlZiBBTFdBWVNfVVNFX0dVSQorCS8qCisJICogSWYgd2Ugd2VyZSByZWFkaW5nIGZyb20gdGhlIHNhbWUgdGVybWluYWwgYXMgd2hlcmUgbWVzc2FnZXMgZ28sCisJICogdGhlIHNjcmVlbiB3aWxsIGhhdmUgYmVlbiBtZXNzZWQgdXAuCisJICogU3dpdGNoIG9uIHJhdyBtb2RlIG5vdyBhbmQgY2xlYXIgdGhlIHNjcmVlbi4KKwkgKi8KKwlpZiAocmVhZF9zdGRpbikKKwl7CisJICAgIHNldHRtb2RlKFRNT0RFX1JBVyk7CS8qIHNldCB0byByYXcgbW9kZSAqLworCSAgICBzdGFydHRlcm1jYXAoKTsKKwkgICAgc2NyZWVuY2xlYXIoKTsKKwl9CisjZW5kaWYKKworCWlmIChnb3RfaW50KQorCXsKKwkgICAgaWYgKCEoZmxhZ3MgJiBSRUFEX0RVTU1ZKSkKKwkgICAgeworCQlmaWxlbWVzcyhjdXJidWYsIHNmbmFtZSwgKGNoYXJfdSAqKV8oZV9pbnRlcnIpLCAwKTsKKwkJaWYgKG5ld2ZpbGUpCisJCSAgICBjdXJidWYtPmJfcF9ybyA9IFRSVUU7CS8qIG11c3QgdXNlICJ3ISIgbm93ICovCisJICAgIH0KKwkgICAgbXNnX3Njcm9sbCA9IG1zZ19zYXZlOworI2lmZGVmIEZFQVRfVklNSU5GTworCSAgICBjaGVja19tYXJrc19yZWFkKCk7CisjZW5kaWYKKwkgICAgcmV0dXJuIE9LOwkJLyogYW4gaW50ZXJydXB0IGlzbid0IHJlYWxseSBhbiBlcnJvciAqLworCX0KKworCWlmICghZmlsdGVyaW5nICYmICEoZmxhZ3MgJiBSRUFEX0RVTU1ZKSkKKwl7CisJICAgIG1zZ19hZGRfZm5hbWUoY3VyYnVmLCBzZm5hbWUpOyAgIC8qIGZuYW1lIGluIElPYnVmZiB3aXRoIHF1b3RlcyAqLworCSAgICBjID0gRkFMU0U7CisKKyNpZmRlZiBVTklYCisjIGlmZGVmIFNfSVNGSUZPCisJICAgIGlmIChTX0lTRklGTyhwZXJtKSkJCQkgICAgLyogZmlmbyBvciBzb2NrZXQgKi8KKwkgICAgeworCQlTVFJDQVQoSU9idWZmLCBfKCJbZmlmby9zb2NrZXRdIikpOworCQljID0gVFJVRTsKKwkgICAgfQorIyBlbHNlCisjICBpZmRlZiBTX0lGSUZPCisJICAgIGlmICgocGVybSAmIFNfSUZNVCkgPT0gU19JRklGTykJICAgIC8qIGZpZm8gKi8KKwkgICAgeworCQlTVFJDQVQoSU9idWZmLCBfKCJbZmlmb10iKSk7CisJCWMgPSBUUlVFOworCSAgICB9CisjICBlbmRpZgorIyAgaWZkZWYgU19JRlNPQ0sKKwkgICAgaWYgKChwZXJtICYgU19JRk1UKSA9PSBTX0lGU09DSykJICAgIC8qIG9yIHNvY2tldCAqLworCSAgICB7CisJCVNUUkNBVChJT2J1ZmYsIF8oIltzb2NrZXRdIikpOworCQljID0gVFJVRTsKKwkgICAgfQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCSAgICBpZiAoY3VyYnVmLT5iX3Bfcm8pCisJICAgIHsKKwkJU1RSQ0FUKElPYnVmZiwgc2hvcnRtZXNzKFNITV9STykgPyBfKCJbUk9dIikgOiBfKCJbcmVhZG9ubHldIikpOworCQljID0gVFJVRTsKKwkgICAgfQorCSAgICBpZiAocmVhZF9ub19lb2xfbG51bSkKKwkgICAgeworCQltc2dfYWRkX2VvbCgpOworCQljID0gVFJVRTsKKwkgICAgfQorCSAgICBpZiAoZmZfZXJyb3IgPT0gRU9MX0RPUykKKwkgICAgeworCQlTVFJDQVQoSU9idWZmLCBfKCJbQ1IgbWlzc2luZ10iKSk7CisJCWMgPSBUUlVFOworCSAgICB9CisJICAgIGlmIChmZl9lcnJvciA9PSBFT0xfTUFDKQorCSAgICB7CisJCVNUUkNBVChJT2J1ZmYsIF8oIltOTCBmb3VuZF0iKSk7CisJCWMgPSBUUlVFOworCSAgICB9CisJICAgIGlmIChzcGxpdCkKKwkgICAgeworCQlTVFJDQVQoSU9idWZmLCBfKCJbbG9uZyBsaW5lcyBzcGxpdF0iKSk7CisJCWMgPSBUUlVFOworCSAgICB9CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAobm90Y29udmVydGVkKQorCSAgICB7CisJCVNUUkNBVChJT2J1ZmYsIF8oIltOT1QgY29udmVydGVkXSIpKTsKKwkJYyA9IFRSVUU7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoY29udmVydGVkKQorCSAgICB7CisJCVNUUkNBVChJT2J1ZmYsIF8oIltjb252ZXJ0ZWRdIikpOworCQljID0gVFJVRTsKKwkgICAgfQorI2VuZGlmCisjaWZkZWYgRkVBVF9DUllQVAorCSAgICBpZiAoY3J5cHRrZXkgIT0gTlVMTCkKKwkgICAgeworCQlTVFJDQVQoSU9idWZmLCBfKCJbY3J5cHRlZF0iKSk7CisJCWMgPSBUUlVFOworCSAgICB9CisjZW5kaWYKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChjb252X2Vycm9yKQorCSAgICB7CisJCVNUUkNBVChJT2J1ZmYsIF8oIltDT05WRVJTSU9OIEVSUk9SXSIpKTsKKwkJYyA9IFRSVUU7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoaWxsZWdhbF9ieXRlID4gMCkKKwkgICAgeworCQlzcHJpbnRmKChjaGFyICopSU9idWZmICsgU1RSTEVOKElPYnVmZiksCisJCQkgXygiW0lMTEVHQUwgQllURSBpbiBsaW5lICVsZF0iKSwgKGxvbmcpaWxsZWdhbF9ieXRlKTsKKwkJYyA9IFRSVUU7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJCWlmIChlcnJvcikKKwkgICAgeworCQlTVFJDQVQoSU9idWZmLCBfKCJbUkVBRCBFUlJPUlNdIikpOworCQljID0gVFJVRTsKKwkgICAgfQorCSAgICBpZiAobXNnX2FkZF9maWxlZm9ybWF0KGZpbGVmb3JtYXQpKQorCQljID0gVFJVRTsKKyNpZmRlZiBGRUFUX0NSWVBUCisJICAgIGlmIChjcnlwdGtleSAhPSBOVUxMKQorCQltc2dfYWRkX2xpbmVzKGMsIChsb25nKWxpbmVjbnQsIGZpbGVzaXplIC0gQ1JZUFRfTUFHSUNfTEVOKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCW1zZ19hZGRfbGluZXMoYywgKGxvbmcpbGluZWNudCwgZmlsZXNpemUpOworCisJICAgIHZpbV9mcmVlKGtlZXBfbXNnKTsKKwkgICAga2VlcF9tc2cgPSBOVUxMOworCSAgICBtc2dfc2Nyb2xsZWRfaWduID0gVFJVRTsKKyNpZmRlZiBBTFdBWVNfVVNFX0dVSQorCSAgICAvKiBEb24ndCBzaG93IHRoZSBtZXNzYWdlIHdoZW4gcmVhZGluZyBzdGRpbiwgaXQgd291bGQgZW5kIHVwIGluIGEKKwkgICAgICogbWVzc2FnZSBib3ggKHdoaWNoIG1pZ2h0IGJlIHNob3duIHdoZW4gZXhpdGluZyEpICovCisJICAgIGlmIChyZWFkX3N0ZGluIHx8IHJlYWRfYnVmZmVyKQorCQlwID0gbXNnX21heV90cnVuYyhGQUxTRSwgSU9idWZmKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCXAgPSBtc2dfdHJ1bmNfYXR0cihJT2J1ZmYsIEZBTFNFLCAwKTsKKwkgICAgaWYgKHJlYWRfc3RkaW4gfHwgcmVhZF9idWZmZXIgfHwgcmVzdGFydF9lZGl0ICE9IDAKKwkJICAgIHx8IChtc2dfc2Nyb2xsZWQgJiYgIW5lZWRfd2FpdF9yZXR1cm4pKQorCSAgICB7CisJCS8qIE5lZWQgdG8gcmVwZWF0IHRoZSBtZXNzYWdlIGFmdGVyIHJlZHJhd2luZyB3aGVuOgorCQkgKiAtIFdoZW4gcmVhZGluZyBmcm9tIHN0ZGluICh0aGUgc2NyZWVuIHdpbGwgYmUgY2xlYXJlZCBuZXh0KS4KKwkJICogLSBXaGVuIHJlc3RhcnRfZWRpdCBpcyBzZXQgKG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgZGVsYXkKKwkJICogICBiZWZvcmUgcmVkcmF3aW5nKS4KKwkJICogLSBXaGVuIHRoZSBzY3JlZW4gd2FzIHNjcm9sbGVkIGJ1dCB0aGVyZSBpcyBubyB3YWl0LXJldHVybgorCQkgKiAgIHByb21wdC4gKi8KKwkJc2V0X2tlZXBfbXNnKHApOworCQlrZWVwX21zZ19hdHRyID0gMDsKKwkgICAgfQorCSAgICBtc2dfc2Nyb2xsZWRfaWduID0gRkFMU0U7CisJfQorCisJLyogd2l0aCBlcnJvcnMgd3JpdGluZyB0aGUgZmlsZSByZXF1aXJlcyAiOnchIiAqLworCWlmIChuZXdmaWxlICYmIChlcnJvcgorI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIHx8IGNvbnZfZXJyb3IKKyNlbmRpZgorCQkgICAgKSkKKwkgICAgY3VyYnVmLT5iX3Bfcm8gPSBUUlVFOworCisJdV9jbGVhcmxpbmUoKTsJICAgIC8qIGNhbm5vdCB1c2UgIlUiIGNvbW1hbmQgYWZ0ZXIgYWRkaW5nIGxpbmVzICovCisKKwkvKgorCSAqIEluIEV4IG1vZGU6IGN1cnNvciBhdCBsYXN0IG5ldyBsaW5lLgorCSAqIE90aGVyd2lzZTogY3Vyc29yIGF0IGZpcnN0IG5ldyBsaW5lLgorCSAqLworCWlmIChleG1vZGVfYWN0aXZlKQorCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBmcm9tICsgbGluZWNudDsKKwllbHNlCisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGZyb20gKyAxOworCWNoZWNrX2N1cnNvcl9sbnVtKCk7CisJYmVnaW5saW5lKEJMX1dISVRFIHwgQkxfRklYKTsJICAgIC8qIG9uIGZpcnN0IG5vbi1ibGFuayAqLworCisJLyoKKwkgKiBTZXQgJ1sgYW5kICddIG1hcmtzIHRvIHRoZSBuZXdseSByZWFkIGxpbmVzLgorCSAqLworCWN1cmJ1Zi0+Yl9vcF9zdGFydC5sbnVtID0gZnJvbSArIDE7CisJY3VyYnVmLT5iX29wX3N0YXJ0LmNvbCA9IDA7CisJY3VyYnVmLT5iX29wX2VuZC5sbnVtID0gZnJvbSArIGxpbmVjbnQ7CisJY3VyYnVmLT5iX29wX2VuZC5jb2wgPSAwOworICAgIH0KKyAgICBtc2dfc2Nyb2xsID0gbXNnX3NhdmU7CisKKyNpZmRlZiBGRUFUX1ZJTUlORk8KKyAgICAvKgorICAgICAqIEdldCB0aGUgbWFya3MgYmVmb3JlIGV4ZWN1dGluZyBhdXRvY29tbWFuZHMsIHNvIHRoZXkgY2FuIGJlIHVzZWQgdGhlcmUuCisgICAgICovCisgICAgY2hlY2tfbWFya3NfcmVhZCgpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICAvKgorICAgICAqIFRyaWNrOiBXZSByZW1lbWJlciBpZiB0aGUgbGFzdCBsaW5lIG9mIHRoZSByZWFkIGRpZG4ndCBoYXZlCisgICAgICogYW4gZW9sIGZvciB3aGVuIHdyaXRpbmcgaXQgYWdhaW4uICBUaGlzIGlzIHJlcXVpcmVkIGZvcgorICAgICAqICI6YXV0b2NtZCBGaWxlUmVhZFBvc3QgKi5neiBzZXQgYmlufCdbLCddIWd1bnppcCIgdG8gd29yay4KKyAgICAgKi8KKyAgICB3cml0ZV9ub19lb2xfbG51bSA9IHJlYWRfbm9fZW9sX2xudW07CisKKyAgICBpZiAoIXJlYWRfc3RkaW4gJiYgIXJlYWRfYnVmZmVyKQorICAgIHsKKwlpbnQgbSA9IG1zZ19zY3JvbGw7CisJaW50IG4gPSBtc2dfc2Nyb2xsZWQ7CisKKwkvKiBTYXZlIHRoZSBmaWxlZm9ybWF0IG5vdywgb3RoZXJ3aXNlIHRoZSBidWZmZXIgd2lsbCBiZSBjb25zaWRlcmVkCisJICogbW9kaWZpZWQgaWYgdGhlIGZvcm1hdC9lbmNvZGluZyB3YXMgYXV0b21hdGljYWxseSBkZXRlY3RlZC4gKi8KKwlpZiAobmV3ZmlsZSkKKwkgICAgc2F2ZV9maWxlX2ZmKGN1cmJ1Zik7CisKKwkvKgorCSAqIFRoZSBvdXRwdXQgZnJvbSB0aGUgYXV0b2NvbW1hbmRzIHNob3VsZCBub3Qgb3ZlcndyaXRlIGFueXRoaW5nIGFuZAorCSAqIHNob3VsZCBub3QgYmUgb3ZlcndyaXR0ZW46IFNldCBtc2dfc2Nyb2xsLCByZXN0b3JlIGl0cyB2YWx1ZSBpZiBubworCSAqIG91dHB1dCB3YXMgZG9uZS4KKwkgKi8KKwltc2dfc2Nyb2xsID0gVFJVRTsKKwlpZiAoZmlsdGVyaW5nKQorCSAgICBhcHBseV9hdXRvY21kc19leGFyZyhFVkVOVF9GSUxURVJSRUFEUE9TVCwgTlVMTCwgc2ZuYW1lLAorCQkJCQkJCSAgRkFMU0UsIGN1cmJ1ZiwgZWFwKTsKKwllbHNlIGlmIChuZXdmaWxlKQorCSAgICBhcHBseV9hdXRvY21kc19leGFyZyhFVkVOVF9CVUZSRUFEUE9TVCwgTlVMTCwgc2ZuYW1lLAorCQkJCQkJCSAgRkFMU0UsIGN1cmJ1ZiwgZWFwKTsKKwllbHNlCisJICAgIGFwcGx5X2F1dG9jbWRzX2V4YXJnKEVWRU5UX0ZJTEVSRUFEUE9TVCwgc2ZuYW1lLCBzZm5hbWUsCisJCQkJCQkJICAgIEZBTFNFLCBOVUxMLCBlYXApOworCWlmIChtc2dfc2Nyb2xsZWQgPT0gbikKKwkgICAgbXNnX3Njcm9sbCA9IG07CisjaWZkZWYgRkVBVF9FVkFMCisJaWYgKGFib3J0aW5nKCkpCSAgICAvKiBhdXRvY21kcyBtYXkgYWJvcnQgc2NyaXB0IHByb2Nlc3NpbmcgKi8KKwkgICAgcmV0dXJuIEZBSUw7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChyZWNvdmVyeW1vZGUgJiYgZXJyb3IpCisJcmV0dXJuIEZBSUw7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogRmlsbCAiKmVhcCIgdG8gZm9yY2UgdGhlICdmaWxlZW5jb2RpbmcnIGFuZCAnZmlsZWZvcm1hdCcgdG8gYmUgZXF1YWwgdG8gdGhlCisgKiBidWZmZXIgImJ1ZiIuICBVc2VkIGZvciBjYWxsaW5nIHJlYWRmaWxlKCkuCisgKiBSZXR1cm5zIE9LIG9yIEZBSUwuCisgKi8KKyAgICBpbnQKK3ByZXBfZXhhcmcoZWFwLCBidWYpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgZWFwLT5jbWQgPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTihidWYtPmJfcF9mZikKKyNpZmRlZiBGRUFUX01CWVRFCisJCSsgU1RSTEVOKGJ1Zi0+Yl9wX2ZlbmMpCisjZW5kaWYKKwkJCQkJCSArIDE1KSk7CisgICAgaWYgKGVhcC0+Y21kID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgc3ByaW50ZigoY2hhciAqKWVhcC0+Y21kLCAiZSArK2ZmPSVzICsrZW5jPSVzIiwgYnVmLT5iX3BfZmYsIGJ1Zi0+Yl9wX2ZlbmMpOworICAgIGVhcC0+Zm9yY2VfZW5jID0gMTQgKyAoaW50KVNUUkxFTihidWYtPmJfcF9mZik7CisjZWxzZQorICAgIHNwcmludGYoKGNoYXIgKillYXAtPmNtZCwgImUgKytmZj0lcyIsIGJ1Zi0+Yl9wX2ZmKTsKKyNlbmRpZgorICAgIGVhcC0+Zm9yY2VfZmYgPSA3OworICAgIHJldHVybiBPSzsKK30KKworI2lmZGVmIEZFQVRfTUJZVEUKKy8qCisgKiBGaW5kIG5leHQgZmlsZWVuY29kaW5nIHRvIHVzZSBmcm9tICdmaWxlZW5jb2RpbmdzJy4KKyAqICJwcCIgcG9pbnRzIHRvIGZlbmNfbmV4dC4gIEl0J3MgYWR2YW5jZWQgdG8gdGhlIG5leHQgaXRlbS4KKyAqIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBhbmQgKnBwIGlzIHNldCB0bworICogTlVMTC4KKyAqIFdoZW4gKnBwIGlzIG5vdCBzZXQgdG8gTlVMTCwgdGhlIHJlc3VsdCBpcyBpbiBhbGxvY2F0ZWQgbWVtb3J5LgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCituZXh0X2ZlbmMocHApCisgICAgY2hhcl91CSoqcHA7Cit7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqcjsKKworICAgIGlmICgqKnBwID09IE5VTCkKKyAgICB7CisJKnBwID0gTlVMTDsKKwlyZXR1cm4gKGNoYXJfdSAqKSIiOworICAgIH0KKyAgICBwID0gdmltX3N0cmNocigqcHAsICcsJyk7CisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICB7CisJciA9IGVuY19jYW5vbml6ZSgqcHApOworCSpwcCArPSBTVFJMRU4oKnBwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlyID0gdmltX3N0cm5zYXZlKCpwcCwgKGludCkocCAtICpwcCkpOworCSpwcCA9IHAgKyAxOworCWlmIChyICE9IE5VTEwpCisJeworCSAgICBwID0gZW5jX2Nhbm9uaXplKHIpOworCSAgICB2aW1fZnJlZShyKTsKKwkgICAgciA9IHA7CisJfQorICAgIH0KKyAgICBpZiAociA9PSBOVUxMKQkvKiBvdXQgb2YgbWVtb3J5ICovCisgICAgeworCXIgPSAoY2hhcl91ICopIiI7CisJKnBwID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHI7Cit9CisKKyMgaWZkZWYgRkVBVF9FVkFMCisvKgorICogQ29udmVydCBhIGZpbGUgd2l0aCB0aGUgJ2NoYXJjb252ZXJ0JyBleHByZXNzaW9uLgorICogVGhpcyBjbG9zZXMgdGhlIGZpbGUgd2hpY2ggaXMgdG8gYmUgcmVhZCwgY29udmVydHMgaXQgYW5kIG9wZW5zIHRoZQorICogcmVzdWx0aW5nIGZpbGUgZm9yIHJlYWRpbmcuCisgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHJlc3VsdGluZyBjb252ZXJ0ZWQgZmlsZSAodGhlIGNhbGxlciBzaG91bGQgZGVsZXRlIGl0CisgKiBhZnRlciByZWFkaW5nIGl0KS4KKyAqIFJldHVybnMgTlVMTCBpZiB0aGUgY29udmVyc2lvbiBmYWlsZWQgKCIqZmRwIiBpcyBub3Qgc2V0KSAuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3JlYWRmaWxlX2NoYXJjb252ZXJ0KGZuYW1lLCBmZW5jLCBmZHApCisgICAgY2hhcl91CSpmbmFtZTsJCS8qIG5hbWUgb2YgaW5wdXQgZmlsZSAqLworICAgIGNoYXJfdQkqZmVuYzsJCS8qIGNvbnZlcnRlZCBmcm9tICovCisgICAgaW50CQkqZmRwOwkJLyogaW4vb3V0OiBmaWxlIGRlc2NyaXB0b3Igb2YgZmlsZSAqLworeworICAgIGNoYXJfdQkqdG1wbmFtZTsKKyAgICBjaGFyX3UJKmVycm1zZyA9IE5VTEw7CisKKyAgICB0bXBuYW1lID0gdmltX3RlbXBuYW1lKCdyJyk7CisgICAgaWYgKHRtcG5hbWUgPT0gTlVMTCkKKwllcnJtc2cgPSAoY2hhcl91ICopXygiQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIGNvbnZlcnNpb24iKTsKKyAgICBlbHNlCisgICAgeworCWNsb3NlKCpmZHApOwkJLyogY2xvc2UgdGhlIGlucHV0IGZpbGUsIGlnbm9yZSBlcnJvcnMgKi8KKwkqZmRwID0gLTE7CisJaWYgKGV2YWxfY2hhcmNvbnZlcnQoZmVuYywgZW5jX3V0ZjggPyAoY2hhcl91ICopInV0Zi04IiA6IHBfZW5jLAorCQkJCQkJICAgICAgZm5hbWUsIHRtcG5hbWUpID09IEZBSUwpCisJICAgIGVycm1zZyA9IChjaGFyX3UgKilfKCJDb252ZXJzaW9uIHdpdGggJ2NoYXJjb252ZXJ0JyBmYWlsZWQiKTsKKwlpZiAoZXJybXNnID09IE5VTEwgJiYgKCpmZHAgPSBtY2hfb3BlbigoY2hhciAqKXRtcG5hbWUsCisJCQkJCQkgIE9fUkRPTkxZIHwgT19FWFRSQSwgMCkpIDwgMCkKKwkgICAgZXJybXNnID0gKGNoYXJfdSAqKV8oImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciKTsKKyAgICB9CisKKyAgICBpZiAoZXJybXNnICE9IE5VTEwpCisgICAgeworCS8qIERvbid0IHVzZSBlbXNnKCksIGl0IGJyZWFrcyBtYXBwaW5ncywgdGhlIHJldHJ5IHdpdGgKKwkgKiBhbm90aGVyIHR5cGUgb2YgY29udmVyc2lvbiBtaWdodCBzdGlsbCB3b3JrLiAqLworCU1TRyhlcnJtc2cpOworCWlmICh0bXBuYW1lICE9IE5VTEwpCisJeworCSAgICBtY2hfcmVtb3ZlKHRtcG5hbWUpOwkvKiBkZWxldGUgY29udmVydGVkIGZpbGUgKi8KKwkgICAgdmltX2ZyZWUodG1wbmFtZSk7CisJICAgIHRtcG5hbWUgPSBOVUxMOworCX0KKyAgICB9CisKKyAgICAvKiBJZiB0aGUgaW5wdXQgZmlsZSBpcyBjbG9zZWQsIG9wZW4gaXQgKGNhbGxlciBzaG91bGQgY2hlY2sgZm9yIGVycm9yKS4gKi8KKyAgICBpZiAoKmZkcCA8IDApCisJKmZkcCA9IG1jaF9vcGVuKChjaGFyICopZm5hbWUsIE9fUkRPTkxZIHwgT19FWFRSQSwgMCk7CisKKyAgICByZXR1cm4gdG1wbmFtZTsKK30KKyMgZW5kaWYKKworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1ZJTUlORk8KKy8qCisgKiBSZWFkIG1hcmtzIGZvciB0aGUgY3VycmVudCBidWZmZXIgZnJvbSB0aGUgdmltaW5mbyBmaWxlLCB3aGVuIHdlIHN1cHBvcnQKKyAqIGJ1ZmZlciBtYXJrcyBhbmQgdGhlIGJ1ZmZlciBoYXMgYSBuYW1lLgorICovCisgICAgc3RhdGljIHZvaWQKK2NoZWNrX21hcmtzX3JlYWQoKQoreworICAgIGlmICghY3VyYnVmLT5iX21hcmtzX3JlYWQgJiYgZ2V0X3ZpbWluZm9fcGFyYW1ldGVyKCdcJycpID4gMAorCQkJCQkJICAmJiBjdXJidWYtPmJfZmZuYW1lICE9IE5VTEwpCisJcmVhZF92aW1pbmZvKE5VTEwsIEZBTFNFLCBUUlVFLCBGQUxTRSk7CisKKyAgICAvKiBBbHdheXMgc2V0IGJfbWFya3NfcmVhZDsgbmVlZGVkIHdoZW4gJ3ZpbWluZm8nIGlzIGNoYW5nZWQgdG8gaW5jbHVkZQorICAgICAqIHRoZSAnIHBhcmFtZXRlciBhZnRlciBvcGVuaW5nIGEgYnVmZmVyLiAqLworICAgIGN1cmJ1Zi0+Yl9tYXJrc19yZWFkID0gVFJVRTsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9DUllQVAorLyoKKyAqIENoZWNrIGZvciBtYWdpYyBudW1iZXIgdXNlZCBmb3IgZW5jcnlwdGlvbi4KKyAqIElmIGZvdW5kLCB0aGUgbWFnaWMgbnVtYmVyIGlzIHJlbW92ZWQgZnJvbSBwdHJbKnNpemVwXSBhbmQgKnNpemVwIGFuZAorICogKmZpbGVzaXplcCBhcmUgdXBkYXRlZC4KKyAqIFJldHVybiB0aGUgKG5ldykgZW5jcnlwdGlvbiBrZXksIE5VTEwgZm9yIG5vIGVuY3J5cHRpb24uCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2NoZWNrX2Zvcl9jcnlwdGtleShjcnlwdGtleSwgcHRyLCBzaXplcCwgZmlsZXNpemVwLCBuZXdmaWxlKQorICAgIGNoYXJfdQkqY3J5cHRrZXk7CS8qIHByZXZpb3VzIGVuY3J5cHRpb24ga2V5IG9yIE5VTEwgKi8KKyAgICBjaGFyX3UJKnB0cjsJCS8qIHBvaW50ZXIgdG8gcmVhZCBieXRlcyAqLworICAgIGxvbmcJKnNpemVwOwkJLyogbGVuZ3RoIG9mIHJlYWQgYnl0ZXMgKi8KKyAgICBsb25nCSpmaWxlc2l6ZXA7CS8qIG5yIG9mIGJ5dGVzIHVzZWQgZnJvbSBmaWxlICovCisgICAgaW50CQluZXdmaWxlOwkvKiBlZGl0aW5nIGEgbmV3IGJ1ZmZlciAqLworeworICAgIGlmICgqc2l6ZXAgPj0gQ1JZUFRfTUFHSUNfTEVOCisJICAgICYmIFNUUk5DTVAocHRyLCBDUllQVF9NQUdJQywgQ1JZUFRfTUFHSUNfTEVOKSA9PSAwKQorICAgIHsKKwlpZiAoY3J5cHRrZXkgPT0gTlVMTCkKKwl7CisJICAgIGlmICgqY3VyYnVmLT5iX3Bfa2V5KQorCQljcnlwdGtleSA9IGN1cmJ1Zi0+Yl9wX2tleTsKKwkgICAgZWxzZQorCSAgICB7CisJCS8qIFdoZW4gbmV3ZmlsZSBpcyBUUlVFLCBzdG9yZSB0aGUgdHlwZWQga2V5CisJCSAqIGluIHRoZSAna2V5JyBvcHRpb24gYW5kIGRvbid0IGZyZWUgaXQuICovCisJCWNyeXB0a2V5ID0gZ2V0X2NyeXB0X2tleShuZXdmaWxlLCBGQUxTRSk7CisJCS8qIGNoZWNrIGlmIGVtcHR5IGtleSBlbnRlcmVkICovCisJCWlmIChjcnlwdGtleSAhPSBOVUxMICYmICpjcnlwdGtleSA9PSBOVUwpCisJCXsKKwkJICAgIGlmIChjcnlwdGtleSAhPSBjdXJidWYtPmJfcF9rZXkpCisJCQl2aW1fZnJlZShjcnlwdGtleSk7CisJCSAgICBjcnlwdGtleSA9IE5VTEw7CisJCX0KKwkgICAgfQorCX0KKworCWlmIChjcnlwdGtleSAhPSBOVUxMKQorCXsKKwkgICAgY3J5cHRfaW5pdF9rZXlzKGNyeXB0a2V5KTsKKworCSAgICAvKiBSZW1vdmUgbWFnaWMgbnVtYmVyIGZyb20gdGhlIHRleHQgKi8KKwkgICAgKmZpbGVzaXplcCArPSBDUllQVF9NQUdJQ19MRU47CisJICAgICpzaXplcCAtPSBDUllQVF9NQUdJQ19MRU47CisJICAgIG1jaF9tZW1tb3ZlKHB0ciwgcHRyICsgQ1JZUFRfTUFHSUNfTEVOLCAoc2l6ZV90KSpzaXplcCk7CisJfQorICAgIH0KKyAgICAvKiBXaGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBuZXcgZmlsZSB3aGljaCBkb2VzIG5vdCBoYXZlCisgICAgICogZW5jcnlwdGlvbiwgY2xlYXIgdGhlICdrZXknIG9wdGlvbiwgZXhjZXB0IHdoZW4KKyAgICAgKiBzdGFydGluZyB1cCAoY2FsbGVkIHdpdGggLXggYXJndW1lbnQpICovCisgICAgZWxzZSBpZiAobmV3ZmlsZSAmJiAqY3VyYnVmLT5iX3Bfa2V5ICYmICFzdGFydGluZykKKwlzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikia2V5IiwgMEwsIChjaGFyX3UgKikiIiwgT1BUX0xPQ0FMKTsKKworICAgIHJldHVybiBjcnlwdGtleTsKK30KKyNlbmRpZgorCisjaWZkZWYgVU5JWAorICAgIHN0YXRpYyB2b2lkCitzZXRfZmlsZV90aW1lKGZuYW1lLCBhdGltZSwgbXRpbWUpCisgICAgY2hhcl91ICAqZm5hbWU7CisgICAgdGltZV90ICBhdGltZTsJICAgIC8qIGFjY2VzcyB0aW1lICovCisgICAgdGltZV90ICBtdGltZTsJICAgIC8qIG1vZGlmaWNhdGlvbiB0aW1lICovCit7CisjIGlmIGRlZmluZWQoSEFWRV9VVElNRSkgJiYgZGVmaW5lZChIQVZFX1VUSU1FX0gpCisgICAgc3RydWN0IHV0aW1idWYgIGJ1ZjsKKworICAgIGJ1Zi5hY3RpbWUJPSBhdGltZTsKKyAgICBidWYubW9kdGltZQk9IG10aW1lOworICAgICh2b2lkKXV0aW1lKChjaGFyICopZm5hbWUsICZidWYpOworIyBlbHNlCisjICBpZiBkZWZpbmVkKEhBVkVfVVRJTUVTKQorICAgIHN0cnVjdCB0aW1ldmFsICB0dnBbMl07CisKKyAgICB0dnBbMF0udHZfc2VjICAgPSBhdGltZTsKKyAgICB0dnBbMF0udHZfdXNlYyAgPSAwOworICAgIHR2cFsxXS50dl9zZWMgICA9IG10aW1lOworICAgIHR2cFsxXS50dl91c2VjICA9IDA7CisjICAgaWZkZWYgTmVYVAorICAgICh2b2lkKXV0aW1lcygoY2hhciAqKWZuYW1lLCB0dnApOworIyAgIGVsc2UKKyAgICAodm9pZCl1dGltZXMoKGNoYXIgKilmbmFtZSwgKGNvbnN0IHN0cnVjdCB0aW1ldmFsICopJnR2cCk7CisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCit9CisjZW5kaWYgLyogVU5JWCAqLworCisvKgorICogYnVmX3dyaXRlKCkgLSB3cml0ZSB0byBmaWxlICdmbmFtZScgbGluZXMgJ3N0YXJ0JyB0aHJvdWdoICdlbmQnCisgKgorICogV2UgZG8gb3VyIG93biBidWZmZXJpbmcgaGVyZSBiZWNhdXNlIGZ3cml0ZSgpIGlzIHNvIHNsb3cuCisgKgorICogSWYgZm9yY2VpdCBpcyB0cnVlLCB3ZSBkb24ndCBjYXJlIGZvciBlcnJvcnMgd2hlbiBhdHRlbXB0aW5nIGJhY2t1cHMgKGp3KS4KKyAqIEluIGNhc2Ugb2YgYW4gZXJyb3IgZXZlcnl0aGluZyBwb3NzaWJsZSBpcyBkb25lIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGZpbGUuCisgKiBCdXQgd2hlbiBmb3JjZWl0IGlzIFRSVUUsIHdlIHJpc2sgbG9vc2luZyBpdC4KKyAqIFdoZW4gcmVzZXRfY2hhbmdlZCBpcyBUUlVFIGFuZCBzdGFydCA9PSAxIGFuZCBlbmQgPT0KKyAqIGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LCByZXNldCBjdXJidWYtPmJfY2hhbmdlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgTk9UIHVzZSBOYW1lQnVmZiAoYmVjYXVzZSBpdCdzIGNhbGxlZCBieSBhdXRvd3JpdGUoKSkuCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CitidWZfd3JpdGUoYnVmLCBmbmFtZSwgc2ZuYW1lLCBzdGFydCwgZW5kLCBlYXAsIGFwcGVuZCwgZm9yY2VpdCwKKwkJCQkJCSAgICAgIHJlc2V0X2NoYW5nZWQsIGZpbHRlcmluZykKKyAgICBidWZfVAkgICAgKmJ1ZjsKKyAgICBjaGFyX3UJICAgICpmbmFtZTsKKyAgICBjaGFyX3UJICAgICpzZm5hbWU7CisgICAgbGluZW5yX1QJICAgIHN0YXJ0LCBlbmQ7CisgICAgZXhhcmdfVAkgICAgKmVhcDsJCS8qIGZvciBmb3JjZWQgJ2ZmJyBhbmQgJ2ZlbmMnLCBjYW4gYmUKKwkJCQkJICAgTlVMTCEgKi8KKyAgICBpbnQJCSAgICBhcHBlbmQ7CisgICAgaW50CQkgICAgZm9yY2VpdDsKKyAgICBpbnQJCSAgICByZXNldF9jaGFuZ2VkOworICAgIGludAkJICAgIGZpbHRlcmluZzsKK3sKKyAgICBpbnQJCSAgICBmZDsKKyAgICBjaGFyX3UJICAgICpiYWNrdXAgPSBOVUxMOworICAgIGludAkJICAgIGJhY2t1cF9jb3B5ID0gRkFMU0U7IC8qIGNvcHkgdGhlIG9yaWdpbmFsIGZpbGU/ICovCisgICAgaW50CQkgICAgZG9iYWNrdXA7CisgICAgY2hhcl91CSAgICAqZmZuYW1lOworICAgIGNoYXJfdQkgICAgKndmbmFtZSA9IE5VTEw7CS8qIG5hbWUgb2YgZmlsZSB0byB3cml0ZSB0byAqLworICAgIGNoYXJfdQkgICAgKnM7CisgICAgY2hhcl91CSAgICAqcHRyOworICAgIGNoYXJfdQkgICAgYzsKKyAgICBpbnQJCSAgICBsZW47CisgICAgbGluZW5yX1QJICAgIGxudW07CisgICAgbG9uZwkgICAgbmNoYXJzOworICAgIGNoYXJfdQkgICAgKmVycm1zZyA9IE5VTEw7CisgICAgY2hhcl91CSAgICAqZXJybnVtID0gTlVMTDsKKyAgICBjaGFyX3UJICAgICpidWZmZXI7CisgICAgY2hhcl91CSAgICBzbWFsbGJ1ZltTTUJVRlNJWkVdOworICAgIGNoYXJfdQkgICAgKmJhY2t1cF9leHQ7CisgICAgaW50CQkgICAgYnVmc2l6ZTsKKyAgICBsb25nCSAgICBwZXJtOwkJICAgIC8qIGZpbGUgcGVybWlzc2lvbnMgKi8KKyAgICBpbnQJCSAgICByZXR2YWwgPSBPSzsKKyAgICBpbnQJCSAgICBuZXdmaWxlID0gRkFMU0U7CSAgICAvKiBUUlVFIGlmIGZpbGUgZG9lc24ndCBleGlzdCB5ZXQgKi8KKyAgICBpbnQJCSAgICBtc2dfc2F2ZSA9IG1zZ19zY3JvbGw7CisgICAgaW50CQkgICAgb3ZlcndyaXRpbmc7CSAgICAvKiBUUlVFIGlmIHdyaXRpbmcgb3ZlciBvcmlnaW5hbCAqLworICAgIGludAkJICAgIG5vX2VvbCA9IEZBTFNFOwkgICAgLyogbm8gZW5kLW9mLWxpbmUgd3JpdHRlbiAqLworICAgIGludAkJICAgIGRldmljZSA9IEZBTFNFOwkgICAgLyogd3JpdGluZyB0byBhIGRldmljZSAqLworICAgIHN0cnVjdCBzdGF0CSAgICBzdF9vbGQ7CisgICAgaW50CQkgICAgcHJldl9nb3RfaW50ID0gZ290X2ludDsKKyAgICBpbnQJCSAgICBmaWxlX3JlYWRvbmx5ID0gRkFMU0U7ICAvKiBvdmVyd3JpdHRlbiBmaWxlIGlzIHJlYWQtb25seSAqLworICAgIHN0YXRpYyBjaGFyCSAgICAqZXJyX3JlYWRvbmx5ID0gImlzIHJlYWQtb25seSAoY2Fubm90IG92ZXJyaWRlOiBcIldcIiBpbiAnY3BvcHRpb25zJykiOworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChfX0VNWF9fWFgpCSAgICAvKlhYWCBmaXggbWUgc29tZXRpbWU/ICovCisgICAgaW50CQkgICAgbWFkZV93cml0YWJsZSA9IEZBTFNFOyAgLyogJ3cnIGJpdCBoYXMgYmVlbiBzZXQgKi8KKyNlbmRpZgorCQkJCQkvKiB3cml0aW5nIGV2ZXJ5dGhpbmcgKi8KKyAgICBpbnQJCSAgICB3aG9sZSA9IChzdGFydCA9PSAxICYmIGVuZCA9PSBidWYtPmJfbWwubWxfbGluZV9jb3VudCk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgbGluZW5yX1QJICAgIG9sZF9saW5lX2NvdW50ID0gYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisjZW5kaWYKKyAgICBpbnQJCSAgICBhdHRyOworICAgIGludAkJICAgIGZpbGVmb3JtYXQ7CisgICAgaW50CQkgICAgd3JpdGVfYmluOworICAgIHN0cnVjdCBid19pbmZvICB3cml0ZV9pbmZvOwkJLyogaW5mbyBmb3IgYnVmX3dyaXRlX2J5dGVzKCkgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQkgICAgY29udmVydGVkID0gRkFMU0U7CisgICAgaW50CQkgICAgbm90Y29udmVydGVkID0gRkFMU0U7CisgICAgY2hhcl91CSAgICAqZmVuYzsJCS8qIGVmZmVjdGl2ZSAnZmlsZWVuY29kaW5nJyAqLworICAgIGNoYXJfdQkgICAgKmZlbmNfdG9mcmVlID0gTlVMTDsgLyogYWxsb2NhdGVkICJmZW5jIiAqLworI2VuZGlmCisjaWZkZWYgSEFTX0JXX0ZMQUdTCisgICAgaW50CQkgICAgd2JfZmxhZ3MgPSAwOworI2VuZGlmCisjaWZkZWYgSEFWRV9BQ0wKKyAgICB2aW1fYWNsX1QJICAgIGFjbCA9IE5VTEw7CQkvKiBBQ0wgY29waWVkIGZyb20gb3JpZ2luYWwgZmlsZSB0bworCQkJCQkgICBiYWNrdXAgb3IgbmV3IGZpbGUgKi8KKyNlbmRpZgorCisgICAgaWYgKGZuYW1lID09IE5VTEwgfHwgKmZuYW1lID09IE5VTCkJLyogc2FmZXR5IGNoZWNrICovCisJcmV0dXJuIEZBSUw7CisKKyAgICAvKgorICAgICAqIERpc2FsbG93IHdyaXRpbmcgZnJvbSAuZXhyYyBhbmQgLnZpbXJjIGluIGN1cnJlbnQgZGlyZWN0b3J5IGZvcgorICAgICAqIHNlY3VyaXR5IHJlYXNvbnMuCisgICAgICovCisgICAgaWYgKGNoZWNrX3NlY3VyZSgpKQorCXJldHVybiBGQUlMOworCisgICAgLyogQXZvaWQgYSBjcmFzaCBmb3IgYSBsb25nIG5hbWUuICovCisgICAgaWYgKFNUUkxFTihmbmFtZSkgPj0gTUFYUEFUSEwpCisgICAgeworCUVNU0coXyhlX2xvbmduYW1lKSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIG11c3QgaW5pdCBid19jb252X2J1ZiBhbmQgYndfaWNvbnZfZmQgYmVmb3JlIGp1bXBpbmcgdG8gImZhaWwiICovCisgICAgd3JpdGVfaW5mby5id19jb252X2J1ZiA9IE5VTEw7CisgICAgd3JpdGVfaW5mby5id19jb252X2Vycm9yID0gRkFMU0U7CisgICAgd3JpdGVfaW5mby5id19yZXN0bGVuID0gMDsKKyMgaWZkZWYgVVNFX0lDT05WCisgICAgd3JpdGVfaW5mby5id19pY29udl9mZCA9IChpY29udl90KS0xOworIyBlbmRpZgorI2VuZGlmCisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGlzIG5vIGZpbGUgbmFtZSB5ZXQsIHVzZSB0aGUgb25lIGZvciB0aGUgd3JpdHRlbiBmaWxlLgorICAgICAqIEJGX05PVEVESVRFRCBpcyBzZXQgdG8gcmVmbGVjdCB0aGlzIChpbiBjYXNlIHRoZSB3cml0ZSBmYWlscykuCisgICAgICogRG9uJ3QgZG8gdGhpcyB3aGVuIHRoZSB3cml0ZSBpcyBmb3IgYSBmaWx0ZXIgY29tbWFuZC4KKyAgICAgKiBPbmx5IGRvIHRoaXMgd2hlbiAnY3BvcHRpb25zJyBjb250YWlucyB0aGUgJ2YnIGZsYWcuCisgICAgICovCisgICAgaWYgKHJlc2V0X2NoYW5nZWQKKwkgICAgJiYgd2hvbGUKKwkgICAgJiYgYnVmID09IGN1cmJ1ZgorCSAgICAmJiBjdXJidWYtPmJfZmZuYW1lID09IE5VTEwKKwkgICAgJiYgIWZpbHRlcmluZworCSAgICAmJiB2aW1fc3RyY2hyKHBfY3BvLCBDUE9fRk5BTUVXKSAhPSBOVUxMKQorICAgIHsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkvKiBJdCdzIGxpa2UgdGhlIHVubmFtZWQgYnVmZmVyIGlzIGRlbGV0ZWQuLi4uICovCisJaWYgKGN1cmJ1Zi0+Yl9wX2JsKQorCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZERUxFVEUsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYpOworCWFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRldJUEVPVVQsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYpOworI2lmZGVmIEZFQVRfRVZBTAorCWlmIChhYm9ydGluZygpKQkgICAgLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCisJICAgIHJldHVybiBGQUlMOworI2VuZGlmCisjZW5kaWYKKwlpZiAoc2V0Zm5hbWUoY3VyYnVmLCBmbmFtZSwgc2ZuYW1lLCBGQUxTRSkgPT0gT0spCisJICAgIGN1cmJ1Zi0+Yl9mbGFncyB8PSBCRl9OT1RFRElURUQ7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJLyogLi4uLmFuZCBhIG5ldyBuYW1lZCBvbmUgaXMgY3JlYXRlZCAqLworCWFwcGx5X2F1dG9jbWRzKEVWRU5UX0JVRk5FVywgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisJaWYgKGN1cmJ1Zi0+Yl9wX2JsKQorCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZBREQsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKHNmbmFtZSA9PSBOVUxMKQorCXNmbmFtZSA9IGZuYW1lOworICAgIC8qCisgICAgICogRm9yIFVuaXg6IFVzZSB0aGUgc2hvcnQgZmlsZSBuYW1lIHdoZW5ldmVyIHBvc3NpYmxlLgorICAgICAqIEF2b2lkcyBwcm9ibGVtcyB3aXRoIG5ldHdvcmtzIGFuZCB3aGVuIGRpcmVjdG9yeSBuYW1lcyBhcmUgY2hhbmdlZC4KKyAgICAgKiBEb24ndCBkbyB0aGlzIGZvciBNUy1ET1MsIGEgImNkIiBpbiBhIHN1Yi1zaGVsbCBtYXkgaGF2ZSBtb3ZlZCB1cyB0bworICAgICAqIGFub3RoZXIgZGlyZWN0b3J5LCB3aGljaCB3ZSBkb24ndCBkZXRlY3QKKyAgICAgKi8KKyAgICBmZm5hbWUgPSBmbmFtZTsJCQkgICAgLyogcmVtZW1iZXIgZnVsbCBmbmFtZSAqLworI2lmZGVmIFVOSVgKKyAgICBmbmFtZSA9IHNmbmFtZTsKKyNlbmRpZgorCisgICAgaWYgKGJ1Zi0+Yl9mZm5hbWUgIT0gTlVMTCAmJiBmbmFtZWNtcChmZm5hbWUsIGJ1Zi0+Yl9mZm5hbWUpID09IDApCisJb3ZlcndyaXRpbmcgPSBUUlVFOworICAgIGVsc2UKKwlvdmVyd3JpdGluZyA9IEZBTFNFOworCisgICAgaWYgKGV4aXRpbmcpCisJc2V0dG1vZGUoVE1PREVfQ09PSyk7CSAgICAvKiB3aGVuIGV4aXRpbmcgYWxsb3cgdHlwYWhlYWQgbm93ICovCisKKyAgICArK25vX3dhaXRfcmV0dXJuOwkJICAgIC8qIGRvbid0IHdhaXQgZm9yIHJldHVybiB5ZXQgKi8KKworICAgIC8qCisgICAgICogU2V0ICdbIGFuZCAnXSBtYXJrcyB0byB0aGUgbGluZXMgdG8gYmUgd3JpdHRlbi4KKyAgICAgKi8KKyAgICBidWYtPmJfb3Bfc3RhcnQubG51bSA9IHN0YXJ0OworICAgIGJ1Zi0+Yl9vcF9zdGFydC5jb2wgPSAwOworICAgIGJ1Zi0+Yl9vcF9lbmQubG51bSA9IGVuZDsKKyAgICBidWYtPmJfb3BfZW5kLmNvbCA9IDA7CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICB7CisJYWNvX3NhdmVfVAlhY287CisJaW50CQlidWZfZmZuYW1lID0gRkFMU0U7CisJaW50CQlidWZfc2ZuYW1lID0gRkFMU0U7CisJaW50CQlidWZfZm5hbWVfZiA9IEZBTFNFOworCWludAkJYnVmX2ZuYW1lX3MgPSBGQUxTRTsKKwlpbnQJCWRpZF9jbWQgPSBGQUxTRTsKKworCS8qCisJICogQXBwbHkgUFJFIGF1Y29jb21tYW5kcy4KKwkgKiBTZXQgY3VyYnVmIHRvIHRoZSBidWZmZXIgdG8gYmUgd3JpdHRlbi4KKwkgKiBDYXJlZnVsOiBUaGUgYXV0b2NvbW1hbmRzIG1heSBjYWxsIGJ1Zl93cml0ZSgpIHJlY3Vyc2l2ZWx5IQorCSAqLworCWlmIChmZm5hbWUgPT0gYnVmLT5iX2ZmbmFtZSkKKwkgICAgYnVmX2ZmbmFtZSA9IFRSVUU7CisJaWYgKHNmbmFtZSA9PSBidWYtPmJfc2ZuYW1lKQorCSAgICBidWZfc2ZuYW1lID0gVFJVRTsKKwlpZiAoZm5hbWUgPT0gYnVmLT5iX2ZmbmFtZSkKKwkgICAgYnVmX2ZuYW1lX2YgPSBUUlVFOworCWlmIChmbmFtZSA9PSBidWYtPmJfc2ZuYW1lKQorCSAgICBidWZfZm5hbWVfcyA9IFRSVUU7CisKKwkvKiBzZXQgY3Vyd2luL2N1cmJ1ZiB0byBidWYgYW5kIHNhdmUgYSBmZXcgdGhpbmdzICovCisJYXVjbWRfcHJlcGJ1ZigmYWNvLCBidWYpOworCisJaWYgKGFwcGVuZCkKKwl7CisJICAgIGlmICghKGRpZF9jbWQgPSBhcHBseV9hdXRvY21kc19leGFyZyhFVkVOVF9GSUxFQVBQRU5EQ01ELAorCQkJCQkgc2ZuYW1lLCBzZm5hbWUsIEZBTFNFLCBjdXJidWYsIGVhcCkpKQorCQlhcHBseV9hdXRvY21kc19leGFyZyhFVkVOVF9GSUxFQVBQRU5EUFJFLAorCQkJCQkgIHNmbmFtZSwgc2ZuYW1lLCBGQUxTRSwgY3VyYnVmLCBlYXApOworCX0KKwllbHNlIGlmIChmaWx0ZXJpbmcpCisJeworCSAgICBhcHBseV9hdXRvY21kc19leGFyZyhFVkVOVF9GSUxURVJXUklURVBSRSwKKwkJCQkJICAgIE5VTEwsIHNmbmFtZSwgRkFMU0UsIGN1cmJ1ZiwgZWFwKTsKKwl9CisJZWxzZSBpZiAocmVzZXRfY2hhbmdlZCAmJiB3aG9sZSkKKwl7CisJICAgIGlmICghKGRpZF9jbWQgPSBhcHBseV9hdXRvY21kc19leGFyZyhFVkVOVF9CVUZXUklURUNNRCwKKwkJCQkJIHNmbmFtZSwgc2ZuYW1lLCBGQUxTRSwgY3VyYnVmLCBlYXApKSkKKwkJYXBwbHlfYXV0b2NtZHNfZXhhcmcoRVZFTlRfQlVGV1JJVEVQUkUsCisJCQkJCSAgc2ZuYW1lLCBzZm5hbWUsIEZBTFNFLCBjdXJidWYsIGVhcCk7CisJfQorCWVsc2UKKwl7CisJICAgIGlmICghKGRpZF9jbWQgPSBhcHBseV9hdXRvY21kc19leGFyZyhFVkVOVF9GSUxFV1JJVEVDTUQsCisJCQkJCSBzZm5hbWUsIHNmbmFtZSwgRkFMU0UsIGN1cmJ1ZiwgZWFwKSkpCisJCWFwcGx5X2F1dG9jbWRzX2V4YXJnKEVWRU5UX0ZJTEVXUklURVBSRSwKKwkJCQkJICBzZm5hbWUsIHNmbmFtZSwgRkFMU0UsIGN1cmJ1ZiwgZWFwKTsKKwl9CisKKwkvKiByZXN0b3JlIGN1cndpbi9jdXJidWYgYW5kIGEgZmV3IG90aGVyIHRoaW5ncyAqLworCWF1Y21kX3Jlc3RidWYoJmFjbyk7CisKKwkvKgorCSAqIEluIHRocmVlIHNpdHVhdGlvbnMgd2UgcmV0dXJuIGhlcmUgYW5kIGRvbid0IHdyaXRlIHRoZSBmaWxlOgorCSAqIDEuIHRoZSBhdXRvY29tbWFuZHMgZGVsZXRlZCBvciB1bmxvYWRlZCB0aGUgYnVmZmVyLgorCSAqIDIuIFRoZSBhdXRvY29tbWFuZHMgYWJvcnQgc2NyaXB0IHByb2Nlc3NpbmcuCisJICogMy4gSWYgb25lIG9mIHRoZSAiQ21kIiBhdXRvY29tbWFuZHMgd2FzIGV4ZWN1dGVkLgorCSAqLworCWlmICghYnVmX3ZhbGlkKGJ1ZikpCisJICAgIGJ1ZiA9IE5VTEw7CisJaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCB8fCBkaWRfY21kIHx8IGFib3J0aW5nKCkpCisJeworCSAgICAtLW5vX3dhaXRfcmV0dXJuOworCSAgICBtc2dfc2Nyb2xsID0gbXNnX3NhdmU7CisJICAgIGlmIChhYm9ydGluZygpKQorCQkvKiBBbiBhYm9ydGluZyBlcnJvciwgaW50ZXJydXB0IG9yIGV4Y2VwdGlvbiBpbiB0aGUKKwkJICogYXV0b2NvbW1hbmRzLiAqLworCQlyZXR1cm4gRkFJTDsKKwkgICAgaWYgKGRpZF9jbWQpCisJICAgIHsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQorCQkgICAgLyogVGhlIGJ1ZmZlciB3YXMgZGVsZXRlZC4gIFdlIGFzc3VtZSBpdCB3YXMgd3JpdHRlbgorCQkgICAgICogKGNhbid0IHJldHJ5IGFueXdheSkuICovCisJCSAgICByZXR1cm4gT0s7CisJCWlmIChvdmVyd3JpdGluZykKKwkJeworCQkgICAgLyogQXNzdW1lIHRoZSBidWZmZXIgd2FzIHdyaXR0ZW4sIHVwZGF0ZSB0aGUgdGltZXN0YW1wLiAqLworCQkgICAgbWxfdGltZXN0YW1wKGJ1Zik7CisJCSAgICBidWYtPmJfZmxhZ3MgJj0gfkJGX1dSSVRFX01BU0s7CisJCX0KKwkJaWYgKHJlc2V0X2NoYW5nZWQgJiYgYnVmLT5iX2NoYW5nZWQpCisJCSAgICAvKiBCdWZmZXIgc3RpbGwgY2hhbmdlZCwgdGhlIGF1dG9jb21tYW5kcyBkaWRuJ3Qgd29yaworCQkgICAgICogcHJvcGVybHkuICovCisJCSAgICByZXR1cm4gRkFJTDsKKwkJcmV0dXJuIE9LOworCSAgICB9CisjaWZkZWYgRkVBVF9FVkFMCisJICAgIGlmICghYWJvcnRpbmcoKSkKKyNlbmRpZgorCQlFTVNHKF8oIkUyMDM6IEF1dG9jb21tYW5kcyBkZWxldGVkIG9yIHVubG9hZGVkIGJ1ZmZlciB0byBiZSB3cml0dGVuIikpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisKKwkvKgorCSAqIFRoZSBhdXRvY29tbWFuZHMgbWF5IGhhdmUgY2hhbmdlZCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBmaWxlLgorCSAqIFdoZW4gd3JpdGluZyB0aGUgd2hvbGUgZmlsZSwgYWRqdXN0IHRoZSBlbmQuCisJICogV2hlbiB3cml0aW5nIHBhcnQgb2YgdGhlIGZpbGUsIGFzc3VtZSB0aGF0IHRoZSBhdXRvY29tbWFuZHMgb25seQorCSAqIGNoYW5nZWQgdGhlIG51bWJlciBvZiBsaW5lcyB0aGF0IGFyZSB0byBiZSB3cml0dGVuICh0cmlja3khKS4KKwkgKi8KKwlpZiAoYnVmLT5iX21sLm1sX2xpbmVfY291bnQgIT0gb2xkX2xpbmVfY291bnQpCisJeworCSAgICBpZiAod2hvbGUpCQkJCQkJLyogd3JpdGUgYWxsICovCisJCWVuZCA9IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCSAgICBlbHNlIGlmIChidWYtPmJfbWwubWxfbGluZV9jb3VudCA+IG9sZF9saW5lX2NvdW50KQkvKiBtb3JlIGxpbmVzICovCisJCWVuZCArPSBidWYtPmJfbWwubWxfbGluZV9jb3VudCAtIG9sZF9saW5lX2NvdW50OworCSAgICBlbHNlCQkJCQkJLyogbGVzcyBsaW5lcyAqLworCSAgICB7CisJCWVuZCAtPSBvbGRfbGluZV9jb3VudCAtIGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCQlpZiAoZW5kIDwgc3RhcnQpCisJCXsKKwkJICAgIC0tbm9fd2FpdF9yZXR1cm47CisJCSAgICBtc2dfc2Nyb2xsID0gbXNnX3NhdmU7CisJCSAgICBFTVNHKF8oIkUyMDQ6IEF1dG9jb21tYW5kIGNoYW5nZWQgbnVtYmVyIG9mIGxpbmVzIGluIHVuZXhwZWN0ZWQgd2F5IikpOworCQkgICAgcmV0dXJuIEZBSUw7CisJCX0KKwkgICAgfQorCX0KKworCS8qCisJICogVGhlIGF1dG9jb21tYW5kcyBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBuYW1lIG9mIHRoZSBidWZmZXIsIHdoaWNoIG1heQorCSAqIGJlIGtlcHQgaW4gZm5hbWUsIGZmbmFtZSBhbmQgc2ZuYW1lLgorCSAqLworCWlmIChidWZfZmZuYW1lKQorCSAgICBmZm5hbWUgPSBidWYtPmJfZmZuYW1lOworCWlmIChidWZfc2ZuYW1lKQorCSAgICBzZm5hbWUgPSBidWYtPmJfc2ZuYW1lOworCWlmIChidWZfZm5hbWVfZikKKwkgICAgZm5hbWUgPSBidWYtPmJfZmZuYW1lOworCWlmIChidWZfZm5hbWVfcykKKwkgICAgZm5hbWUgPSBidWYtPmJfc2ZuYW1lOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgaWYgKHVzaW5nTmV0YmVhbnMgJiYgaXNOZXRiZWFuc0J1ZmZlcihidWYpKQorICAgIHsKKwlpZiAod2hvbGUpCisJeworCSAgICAvKgorCSAgICAgKiBiX2NoYW5nZWQgY2FuIGJlIDAgYWZ0ZXIgYW4gdW5kbywgYnV0IHdlIHN0aWxsIG5lZWQgdG8gd3JpdGUKKwkgICAgICogdGhlIGJ1ZmZlciB0byBOZXRCZWFucy4KKwkgICAgICovCisJICAgIGlmIChidWYtPmJfY2hhbmdlZCB8fCBpc05ldGJlYW5zTW9kaWZpZWQoYnVmKSkKKwkgICAgeworCQluZXRiZWFuc19zYXZlX2J1ZmZlcihidWYpOworCQlyZXR1cm4gcmV0dmFsOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQllcnJudW0gPSAoY2hhcl91ICopIkU2NTY6ICI7CisJCWVycm1zZyA9IChjaGFyX3UgKilfKCJOZXRCZWFucyBkaXNzYWxsb3dzIHdyaXRlcyBvZiB1bm1vZGlmaWVkIGJ1ZmZlcnMiKTsKKwkJYnVmZmVyID0gTlVMTDsKKwkJZ290byBmYWlsOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIGVycm51bSA9IChjaGFyX3UgKikiRTY1NzogIjsKKwkgICAgZXJybXNnID0gKGNoYXJfdSAqKV8oIlBhcnRpYWwgd3JpdGVzIGRpc2FsbG93ZWQgZm9yIE5ldEJlYW5zIGJ1ZmZlcnMiKTsKKwkgICAgYnVmZmVyID0gTlVMTDsKKwkgICAgZ290byBmYWlsOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIGlmIChzaG9ydG1lc3MoU0hNX09WRVIpICYmICFleGl0aW5nKQorCW1zZ19zY3JvbGwgPSBGQUxTRTsJICAgIC8qIG92ZXJ3cml0ZSBwcmV2aW91cyBmaWxlIG1lc3NhZ2UgKi8KKyAgICBlbHNlCisJbXNnX3Njcm9sbCA9IFRSVUU7CSAgICAvKiBkb24ndCBvdmVyd3JpdGUgcHJldmlvdXMgZmlsZSBtZXNzYWdlICovCisgICAgaWYgKCFmaWx0ZXJpbmcpCisJZmlsZW1lc3MoYnVmLAorI2lmbmRlZiBVTklYCisJCXNmbmFtZSwKKyNlbHNlCisJCWZuYW1lLAorI2VuZGlmCisJCSAgICAoY2hhcl91ICopIiIsIDApOwkvKiBzaG93IHRoYXQgd2UgYXJlIGJ1c3kgKi8KKyAgICBtc2dfc2Nyb2xsID0gRkFMU0U7CQkgICAgLyogYWx3YXlzIG92ZXJ3cml0ZSB0aGUgZmlsZSBtZXNzYWdlIG5vdyAqLworCisgICAgYnVmZmVyID0gYWxsb2MoQlVGU0laRSk7CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQkJICAgIC8qIGNhbid0IGFsbG9jYXRlIGJpZyBidWZmZXIsIHVzZSBzbWFsbAorCQkJCSAgICAgKiBvbmUgKHRvIGJlIGFibGUgdG8gd3JpdGUgd2hlbiBvdXQgb2YKKwkJCQkgICAgICogbWVtb3J5KSAqLworICAgIHsKKwlidWZmZXIgPSBzbWFsbGJ1ZjsKKwlidWZzaXplID0gU01CVUZTSVpFOworICAgIH0KKyAgICBlbHNlCisJYnVmc2l6ZSA9IEJVRlNJWkU7CisKKyAgICAvKgorICAgICAqIEdldCBpbmZvcm1hdGlvbiBhYm91dCBvcmlnaW5hbCBmaWxlIChpZiB0aGVyZSBpcyBvbmUpLgorICAgICAqLworI2lmIGRlZmluZWQoVU5JWCkgJiYgIWRlZmluZWQoQVJDSElFKQorICAgIHN0X29sZC5zdF9kZXYgPSBzdF9vbGQuc3RfaW5vID0gMDsKKyAgICBwZXJtID0gLTE7CisgICAgaWYgKG1jaF9zdGF0KChjaGFyICopZm5hbWUsICZzdF9vbGQpIDwgMCkKKwluZXdmaWxlID0gVFJVRTsKKyAgICBlbHNlCisgICAgeworCXBlcm0gPSBzdF9vbGQuc3RfbW9kZTsKKwlpZiAoIVNfSVNSRUcoc3Rfb2xkLnN0X21vZGUpKQkJLyogbm90IGEgZmlsZSAqLworCXsKKwkgICAgaWYgKFNfSVNESVIoc3Rfb2xkLnN0X21vZGUpKQorCSAgICB7CisJCWVycm51bSA9IChjaGFyX3UgKikiRTUwMjogIjsKKwkJZXJybXNnID0gKGNoYXJfdSAqKV8oImlzIGEgZGlyZWN0b3J5Iik7CisJCWdvdG8gZmFpbDsKKwkgICAgfQorCSAgICBpZiAobWNoX25vZGV0eXBlKGZuYW1lKSAhPSBOT0RFX1dSSVRBQkxFKQorCSAgICB7CisJCWVycm51bSA9IChjaGFyX3UgKikiRTUwMzogIjsKKwkJZXJybXNnID0gKGNoYXJfdSAqKV8oImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIik7CisJCWdvdG8gZmFpbDsKKwkgICAgfQorCSAgICAvKiBJdCdzIGEgZGV2aWNlIG9mIHNvbWUga2luZCAob3IgYSBmaWZvKSB3aGljaCB3ZSBjYW4gd3JpdGUgdG8KKwkgICAgICogYnV0IGZvciB3aGljaCB3ZSBjYW4ndCBtYWtlIGEgYmFja3VwLiAqLworCSAgICBkZXZpY2UgPSBUUlVFOworCSAgICBuZXdmaWxlID0gVFJVRTsKKwkgICAgcGVybSA9IC0xOworCX0KKyAgICB9CisjZWxzZSAvKiAhVU5JWCAqLworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIGEgd3JpdGFibGUgZGV2aWNlIG5hbWUuCisgICAgICovCisgICAgYyA9IG1jaF9ub2RldHlwZShmbmFtZSk7CisgICAgaWYgKGMgPT0gTk9ERV9PVEhFUikKKyAgICB7CisJZXJybnVtID0gKGNoYXJfdSAqKSJFNTAzOiAiOworCWVycm1zZyA9IChjaGFyX3UgKilfKCJpcyBub3QgYSBmaWxlIG9yIHdyaXRhYmxlIGRldmljZSIpOworCWdvdG8gZmFpbDsKKyAgICB9CisgICAgaWYgKGMgPT0gTk9ERV9XUklUQUJMRSkKKyAgICB7CisJZGV2aWNlID0gVFJVRTsKKwluZXdmaWxlID0gVFJVRTsKKwlwZXJtID0gLTE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJcGVybSA9IG1jaF9nZXRwZXJtKGZuYW1lKTsKKwlpZiAocGVybSA8IDApCisJICAgIG5ld2ZpbGUgPSBUUlVFOworCWVsc2UgaWYgKG1jaF9pc2RpcihmbmFtZSkpCisJeworCSAgICBlcnJudW0gPSAoY2hhcl91ICopIkU1MDI6ICI7CisJICAgIGVycm1zZyA9IChjaGFyX3UgKilfKCJpcyBhIGRpcmVjdG9yeSIpOworCSAgICBnb3RvIGZhaWw7CisJfQorCWlmIChvdmVyd3JpdGluZykKKwkgICAgKHZvaWQpbWNoX3N0YXQoKGNoYXIgKilmbmFtZSwgJnN0X29sZCk7CisgICAgfQorI2VuZGlmIC8qICFVTklYICovCisKKyAgICBpZiAoIWRldmljZSAmJiAhbmV3ZmlsZSkKKyAgICB7CisJLyoKKwkgKiBDaGVjayBpZiB0aGUgZmlsZSBpcyByZWFsbHkgd3JpdGFibGUgKHdoZW4gcmVuYW1pbmcgdGhlIGZpbGUgdG8KKwkgKiBtYWtlIGEgYmFja3VwIHdlIHdvbid0IGRpc2NvdmVyIGl0IGxhdGVyKS4KKwkgKi8KKwlmaWxlX3JlYWRvbmx5ID0gKAorIyBpZmRlZiBVU0VfTUNIX0FDQ0VTUworIyAgaWZkZWYgVU5JWAorCQkgICAgKHBlcm0gJiAwMjIyKSA9PSAwIHx8CisjICBlbmRpZgorCQkgICAgbWNoX2FjY2VzcygoY2hhciAqKWZuYW1lLCBXX09LKQorIyBlbHNlCisJCSAgICAoZmQgPSBtY2hfb3BlbigoY2hhciAqKWZuYW1lLCBPX1JEV1IgfCBPX0VYVFJBLCAwKSkgPCAwCisJCQkJCQkgICA/IFRSVUUgOiAoY2xvc2UoZmQpLCBGQUxTRSkKKyMgZW5kaWYKKwkJICAgICk7CisJaWYgKCFmb3JjZWl0ICYmIGZpbGVfcmVhZG9ubHkpCisJeworCSAgICBpZiAodmltX3N0cmNocihwX2NwbywgQ1BPX0ZXUklURSkgIT0gTlVMTCkKKwkgICAgeworCQllcnJudW0gPSAoY2hhcl91ICopIkU1MDQ6ICI7CisJCWVycm1zZyA9IChjaGFyX3UgKilfKGVycl9yZWFkb25seSk7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWVycm51bSA9IChjaGFyX3UgKikiRTUwNTogIjsKKwkJZXJybXNnID0gKGNoYXJfdSAqKV8oImlzIHJlYWQtb25seSAoYWRkICEgdG8gb3ZlcnJpZGUpIik7CisJICAgIH0KKwkgICAgZ290byBmYWlsOworCX0KKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHRpbWVzdGFtcCBoYXNuJ3QgY2hhbmdlZCBzaW5jZSByZWFkaW5nIHRoZSBmaWxlLgorCSAqLworCWlmIChvdmVyd3JpdGluZykKKwl7CisJICAgIHJldHZhbCA9IGNoZWNrX210aW1lKGJ1ZiwgJnN0X29sZCk7CisJICAgIGlmIChyZXR2YWwgPT0gRkFJTCkKKwkJZ290byBmYWlsOworCX0KKyAgICB9CisKKyNpZmRlZiBIQVZFX0FDTAorICAgIC8qCisgICAgICogRm9yIHN5c3RlbXMgdGhhdCBzdXBwb3J0IEFDTDogZ2V0IHRoZSBBQ0wgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZS4KKyAgICAgKi8KKyAgICBpZiAoIW5ld2ZpbGUpCisJYWNsID0gbWNoX2dldF9hY2woZm5hbWUpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIElmICdiYWNrdXBza2lwJyBpcyBub3QgZW1wdHksIGRvbid0IG1ha2UgYSBiYWNrdXAgZm9yIHNvbWUgZmlsZXMuCisgICAgICovCisgICAgZG9iYWNrdXAgPSAocF93YiB8fCBwX2JrIHx8ICpwX3BtICE9IE5VTCk7CisjaWZkZWYgRkVBVF9XSUxESUdOCisgICAgaWYgKGRvYmFja3VwICYmICpwX2JzayAhPSBOVUwgJiYgbWF0Y2hfZmlsZV9saXN0KHBfYnNrLCBzZm5hbWUsIGZmbmFtZSkpCisJZG9iYWNrdXAgPSBGQUxTRTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBTYXZlIHRoZSB2YWx1ZSBvZiBnb3RfaW50IGFuZCByZXNldCBpdC4gIFdlIGRvbid0IHdhbnQgYSBwcmV2aW91cworICAgICAqIGludGVycnVwdGlvbiBjYW5jZWwgd3JpdGluZywgb25seSBoaXR0aW5nIENUUkwtQyB3aGlsZSB3cml0aW5nIHNob3VsZAorICAgICAqIGFib3J0IGl0LgorICAgICAqLworICAgIHByZXZfZ290X2ludCA9IGdvdF9pbnQ7CisgICAgZ290X2ludCA9IEZBTFNFOworCisgICAgLyogTWFyayB0aGUgYnVmZmVyIGFzICdiZWluZyBzYXZlZCcgdG8gcHJldmVudCBjaGFuZ2VkIGJ1ZmZlciB3YXJuaW5ncyAqLworICAgIGJ1Zi0+Yl9zYXZpbmcgPSBUUlVFOworCisgICAgLyoKKyAgICAgKiBJZiB3ZSBhcmUgbm90IGFwcGVuZGluZyBvciBmaWx0ZXJpbmcsIHRoZSBmaWxlIGV4aXN0cywgYW5kIHRoZQorICAgICAqICd3cml0ZWJhY2t1cCcsICdiYWNrdXAnIG9yICdwYXRjaG1vZGUnIG9wdGlvbiBpcyBzZXQsIG5lZWQgYSBiYWNrdXAuCisgICAgICogV2hlbiAncGF0Y2htb2RlJyBpcyBzZXQgYWxzbyBtYWtlIGEgYmFja3VwIHdoZW4gYXBwZW5kaW5nLgorICAgICAqCisgICAgICogRG8gbm90IG1ha2UgYW55IGJhY2t1cCwgaWYgJ3dyaXRlYmFja3VwJyBhbmQgJ2JhY2t1cCcgYXJlIGJvdGggc3dpdGNoZWQKKyAgICAgKiBvZmYuICBUaGlzIGhlbHBzIHdoZW4gZWRpdGluZyBsYXJnZSBmaWxlcyBvbiBhbG1vc3QtZnVsbCBkaXNrcy4KKyAgICAgKi8KKyAgICBpZiAoIShhcHBlbmQgJiYgKnBfcG0gPT0gTlVMKSAmJiAhZmlsdGVyaW5nICYmIHBlcm0gPj0gMCAmJiBkb2JhY2t1cCkKKyAgICB7CisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFdJTjMyKQorCXN0cnVjdCBzdGF0IHN0OworI2VuZGlmCisKKwlpZiAoKGJrY19mbGFncyAmIEJLQ19ZRVMpIHx8IGFwcGVuZCkJLyogInllcyIgKi8KKwkgICAgYmFja3VwX2NvcHkgPSBUUlVFOworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChXSU4zMikKKwllbHNlIGlmICgoYmtjX2ZsYWdzICYgQktDX0FVVE8pKQkvKiAiYXV0byIgKi8KKwl7CisJICAgIGludAkJaTsKKworIyBpZmRlZiBVTklYCisJICAgIC8qCisJICAgICAqIERvbid0IHJlbmFtZSB0aGUgZmlsZSB3aGVuOgorCSAgICAgKiAtIGl0J3MgYSBoYXJkIGxpbmsKKwkgICAgICogLSBpdCdzIGEgc3ltYm9saWMgbGluaworCSAgICAgKiAtIHdlIGRvbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbiBpbiB0aGUgZGlyZWN0b3J5CisJICAgICAqIC0gd2UgY2FuJ3Qgc2V0IHRoZSBvd25lci9ncm91cCBvZiB0aGUgbmV3IGZpbGUKKwkgICAgICovCisJICAgIGlmIChzdF9vbGQuc3RfbmxpbmsgPiAxCisJCSAgICB8fCBtY2hfbHN0YXQoKGNoYXIgKilmbmFtZSwgJnN0KSA8IDAKKwkJICAgIHx8IHN0LnN0X2RldiAhPSBzdF9vbGQuc3RfZGV2CisJCSAgICB8fCBzdC5zdF9pbm8gIT0gc3Rfb2xkLnN0X2lubykKKwkJYmFja3VwX2NvcHkgPSBUUlVFOworCSAgICBlbHNlCisjIGVuZGlmCisJICAgIHsKKwkJLyoKKwkJICogQ2hlY2sgaWYgd2UgY2FuIGNyZWF0ZSBhIGZpbGUgYW5kIHNldCB0aGUgb3duZXIvZ3JvdXAgdG8KKwkJICogdGhlIG9uZXMgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZS4KKwkJICogRmlyc3QgZmluZCBhIGZpbGUgbmFtZSB0aGF0IGRvZXNuJ3QgZXhpc3QgeWV0ICh1c2Ugc29tZQorCQkgKiBhcmJpdHJhcnkgbnVtYmVycykuCisJCSAqLworCQlTVFJDUFkoSU9idWZmLCBmbmFtZSk7CisJCWZvciAoaSA9IDQ5MTM7IDsgaSArPSAxMjMpCisJCXsKKwkJICAgIHNwcmludGYoKGNoYXIgKilnZXR0YWlsKElPYnVmZiksICIlZCIsIGkpOworCQkgICAgaWYgKG1jaF9zdGF0KChjaGFyICopSU9idWZmLCAmc3QpIDwgMCkKKwkJCWJyZWFrOworCQl9CisJCWZkID0gbWNoX29wZW4oKGNoYXIgKilJT2J1ZmYsIE9fQ1JFQVR8T19XUk9OTFl8T19FWENMLCBwZXJtKTsKKwkJY2xvc2UoZmQpOworCQlpZiAoZmQgPCAwKQkvKiBjYW4ndCB3cml0ZSBpbiBkaXJlY3RvcnkgKi8KKwkJICAgIGJhY2t1cF9jb3B5ID0gVFJVRTsKKwkJZWxzZQorCQl7CisjIGlmZGVmIFVOSVgKKwkJICAgIGNob3duKChjaGFyICopSU9idWZmLCBzdF9vbGQuc3RfdWlkLCBzdF9vbGQuc3RfZ2lkKTsKKwkJICAgICh2b2lkKW1jaF9zZXRwZXJtKElPYnVmZiwgcGVybSk7CisJCSAgICBpZiAobWNoX3N0YXQoKGNoYXIgKilJT2J1ZmYsICZzdCkgPCAwCisJCQkgICAgfHwgc3Quc3RfdWlkICE9IHN0X29sZC5zdF91aWQKKwkJCSAgICB8fCBzdC5zdF9naWQgIT0gc3Rfb2xkLnN0X2dpZAorCQkJICAgIHx8IHN0LnN0X21vZGUgIT0gcGVybSkKKwkJCWJhY2t1cF9jb3B5ID0gVFJVRTsKKyMgZW5kaWYKKwkJICAgIG1jaF9yZW1vdmUoSU9idWZmKTsKKwkJfQorCSAgICB9CisJfQorCisjIGlmZGVmIFVOSVgKKwkvKgorCSAqIEJyZWFrIHN5bWxpbmtzIGFuZC9vciBoYXJkbGlua3MgaWYgd2UndmUgYmVlbiBhc2tlZCB0by4KKwkgKi8KKwlpZiAoKGJrY19mbGFncyAmIEJLQ19CUkVBS1NZTUxJTkspIHx8IChia2NfZmxhZ3MgJiBCS0NfQlJFQUtIQVJETElOSykpCisJeworCSAgICBpbnQJbHN0YXRfcmVzOworCisJICAgIGxzdGF0X3JlcyA9IG1jaF9sc3RhdCgoY2hhciAqKWZuYW1lLCAmc3QpOworCisJICAgIC8qIFN5bWxpbmtzLiAqLworCSAgICBpZiAoKGJrY19mbGFncyAmIEJLQ19CUkVBS1NZTUxJTkspCisJCSAgICAmJiBsc3RhdF9yZXMgPT0gMAorCQkgICAgJiYgc3Quc3RfaW5vICE9IHN0X29sZC5zdF9pbm8pCisJCWJhY2t1cF9jb3B5ID0gRkFMU0U7CisKKwkgICAgLyogSGFyZGxpbmtzLiAqLworCSAgICBpZiAoKGJrY19mbGFncyAmIEJLQ19CUkVBS0hBUkRMSU5LKQorCQkgICAgJiYgc3Rfb2xkLnN0X25saW5rID4gMQorCQkgICAgJiYgKGxzdGF0X3JlcyAhPSAwIHx8IHN0LnN0X2lubyA9PSBzdF9vbGQuc3RfaW5vKSkKKwkJYmFja3VwX2NvcHkgPSBGQUxTRTsKKwl9CisjZW5kaWYKKworI2VuZGlmCisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIGJhY2t1cCBleHRlbnNpb24gdG8gdXNlICovCisJaWYgKCpwX2JleCA9PSBOVUwpCisJeworI2lmZGVmIFJJU0NPUworCSAgICBiYWNrdXBfZXh0ID0gKGNoYXJfdSAqKSIvYmFrIjsKKyNlbHNlCisJICAgIGJhY2t1cF9leHQgPSAoY2hhcl91ICopIi5iYWsiOworI2VuZGlmCisJfQorCWVsc2UKKwkgICAgYmFja3VwX2V4dCA9IHBfYmV4OworCisJaWYgKGJhY2t1cF9jb3B5CisJCSYmIChmZCA9IG1jaF9vcGVuKChjaGFyICopZm5hbWUsIE9fUkRPTkxZIHwgT19FWFRSQSwgMCkpID49IDApCisJeworCSAgICBpbnQJCWJmZDsKKwkgICAgY2hhcl91CSpjb3B5YnVmLCAqd3A7CisJICAgIGludAkJc29tZV9lcnJvciA9IEZBTFNFOworCSAgICBzdHJ1Y3Qgc3RhdAlzdF9uZXc7CisJICAgIGNoYXJfdQkqZGlycDsKKwkgICAgY2hhcl91CSpyb290bmFtZTsKKyNpZm5kZWYgU0hPUlRfRk5BTUUKKwkgICAgaW50CQlkaWRfc2V0X3Nob3J0bmFtZTsKKyNlbmRpZgorCisJICAgIGNvcHlidWYgPSBhbGxvYyhCVUZTSVpFICsgMSk7CisJICAgIGlmIChjb3B5YnVmID09IE5VTEwpCisJICAgIHsKKwkJc29tZV9lcnJvciA9IFRSVUU7CSAgICAvKiBvdXQgb2YgbWVtb3J5ICovCisJCWdvdG8gbm9iYWNrdXA7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBUcnkgdG8gbWFrZSB0aGUgYmFja3VwIGluIGVhY2ggZGlyZWN0b3J5IGluIHRoZSAnYmRpcicgb3B0aW9uLgorCSAgICAgKgorCSAgICAgKiBVbml4IHNlbWFudGljcyBoYXMgaXQsIHRoYXQgd2UgbWF5IGhhdmUgYSB3cml0YWJsZSBmaWxlLAorCSAgICAgKiB0aGF0IGNhbm5vdCBiZSByZWNyZWF0ZWQgd2l0aCBhIHNpbXBsZSBvcGVuKC4uLiwgT19DUkVBVCwgKSBlLmc6CisJICAgICAqICAtIHRoZSBkaXJlY3RvcnkgaXMgbm90IHdyaXRhYmxlLAorCSAgICAgKiAgLSB0aGUgZmlsZSBtYXkgYmUgYSBzeW1ib2xpYyBsaW5rLAorCSAgICAgKiAgLSB0aGUgZmlsZSBtYXkgYmVsb25nIHRvIGFub3RoZXIgdXNlci9ncm91cCwgZXRjLgorCSAgICAgKgorCSAgICAgKiBGb3IgdGhlc2UgcmVhc29ucywgdGhlIGV4aXN0aW5nIHdyaXRhYmxlIGZpbGUgbXVzdCBiZSB0cnVuY2F0ZWQKKwkgICAgICogYW5kIHJldXNlZC4gQ3JlYXRpb24gb2YgYSBiYWNrdXAgQ09QWSB3aWxsIGJlIGF0dGVtcHRlZC4KKwkgICAgICovCisJICAgIGRpcnAgPSBwX2JkaXI7CisJICAgIHdoaWxlICgqZGlycCkKKwkgICAgeworI2lmZGVmIFVOSVgKKwkJc3RfbmV3LnN0X2lubyA9IDA7CisJCXN0X25ldy5zdF9kZXYgPSAwOworCQlzdF9uZXcuc3RfZ2lkID0gMDsKKyNlbmRpZgorCisJCS8qCisJCSAqIElzb2xhdGUgb25lIGRpcmVjdG9yeSBuYW1lLCB1c2luZyBhbiBlbnRyeSBpbiAnYmRpcicuCisJCSAqLworCQkodm9pZCljb3B5X29wdGlvbl9wYXJ0KCZkaXJwLCBjb3B5YnVmLCBCVUZTSVpFLCAiLCIpOworCQlyb290bmFtZSA9IGdldF9maWxlX2luX2RpcihmbmFtZSwgY29weWJ1Zik7CisJCWlmIChyb290bmFtZSA9PSBOVUxMKQorCQl7CisJCSAgICBzb21lX2Vycm9yID0gVFJVRTsJICAgIC8qIG91dCBvZiBtZW1vcnkgKi8KKwkJICAgIGdvdG8gbm9iYWNrdXA7CisJCX0KKworI2lmbmRlZiBTSE9SVF9GTkFNRQorCQlkaWRfc2V0X3Nob3J0bmFtZSA9IEZBTFNFOworI2VuZGlmCisKKwkJLyoKKwkJICogTWF5IHRyeSB0d2ljZSBpZiAnc2hvcnRuYW1lJyBub3Qgc2V0LgorCQkgKi8KKwkJZm9yICg7OykKKwkJeworCQkgICAgLyoKKwkJICAgICAqIE1ha2UgYmFja3VwIGZpbGUgbmFtZS4KKwkJICAgICAqLworCQkgICAgYmFja3VwID0gYnVmX21vZG5hbWUoCisjaWZkZWYgU0hPUlRfRk5BTUUKKwkJCSAgICBUUlVFLAorI2Vsc2UKKwkJCSAgICAoYnVmLT5iX3Bfc24gfHwgYnVmLT5iX3Nob3J0bmFtZSksCisjZW5kaWYKKwkJCQkJCSByb290bmFtZSwgYmFja3VwX2V4dCwgRkFMU0UpOworCQkgICAgaWYgKGJhY2t1cCA9PSBOVUxMKQorCQkgICAgeworCQkJdmltX2ZyZWUocm9vdG5hbWUpOworCQkJc29tZV9lcnJvciA9IFRSVUU7CQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCQlnb3RvIG5vYmFja3VwOworCQkgICAgfQorCisJCSAgICAvKgorCQkgICAgICogQ2hlY2sgaWYgYmFja3VwIGZpbGUgYWxyZWFkeSBleGlzdHMuCisJCSAgICAgKi8KKwkJICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWJhY2t1cCwgJnN0X25ldykgPj0gMCkKKwkJICAgIHsKKyNpZmRlZiBVTklYCisJCQkvKgorCQkJICogQ2hlY2sgaWYgYmFja3VwIGZpbGUgaXMgc2FtZSBhcyBvcmlnaW5hbCBmaWxlLgorCQkJICogTWF5IGhhcHBlbiB3aGVuIG1vZG5hbWUoKSBnYXZlIHRoZSBzYW1lIGZpbGUgYmFjay4KKwkJCSAqIEUuZy4gc2lsbHkgbGluaywgb3IgZmlsZSBuYW1lLWxlbmd0aCByZWFjaGVkLgorCQkJICogSWYgd2UgZG9uJ3QgY2hlY2sgaGVyZSwgd2UgZWl0aGVyIHJ1aW4gdGhlIGZpbGUKKwkJCSAqIHdoZW4gY29weWluZyBvciBlcmFzZSBpdCBhZnRlciB3cml0aW5nLiBqdy4KKwkJCSAqLworCQkJaWYgKHN0X25ldy5zdF9kZXYgPT0gc3Rfb2xkLnN0X2RldgorCQkJCQkgICAgJiYgc3RfbmV3LnN0X2lubyA9PSBzdF9vbGQuc3RfaW5vKQorCQkJeworCQkJICAgIHZpbV9mcmVlKGJhY2t1cCk7CisJCQkgICAgYmFja3VwID0gTlVMTDsJLyogbm8gYmFja3VwIGZpbGUgdG8gZGVsZXRlICovCisjIGlmbmRlZiBTSE9SVF9GTkFNRQorCQkJICAgIC8qCisJCQkgICAgICogbWF5IHRyeSBhZ2FpbiB3aXRoICdzaG9ydG5hbWUnIHNldAorCQkJICAgICAqLworCQkJICAgIGlmICghKGJ1Zi0+Yl9zaG9ydG5hbWUgfHwgYnVmLT5iX3Bfc24pKQorCQkJICAgIHsKKwkJCQlidWYtPmJfc2hvcnRuYW1lID0gVFJVRTsKKwkJCQlkaWRfc2V0X3Nob3J0bmFtZSA9IFRSVUU7CisJCQkJY29udGludWU7CisJCQkgICAgfQorCQkJCS8qIHNldHRpbmcgc2hvcnRuYW1lIGRpZG4ndCBoZWxwICovCisJCQkgICAgaWYgKGRpZF9zZXRfc2hvcnRuYW1lKQorCQkJCWJ1Zi0+Yl9zaG9ydG5hbWUgPSBGQUxTRTsKKyMgZW5kaWYKKwkJCSAgICBicmVhazsKKwkJCX0KKyNlbmRpZgorCisJCQkvKgorCQkJICogSWYgd2UgYXJlIG5vdCBnb2luZyB0byBrZWVwIHRoZSBiYWNrdXAgZmlsZSwgZG9uJ3QKKwkJCSAqIGRlbGV0ZSBhbiBleGlzdGluZyBvbmUsIHRyeSB0byB1c2UgYW5vdGhlciBuYW1lLgorCQkJICogQ2hhbmdlIG9uZSBjaGFyYWN0ZXIsIGp1c3QgYmVmb3JlIHRoZSBleHRlbnNpb24uCisJCQkgKi8KKwkJCWlmICghcF9iaykKKwkJCXsKKwkJCSAgICB3cCA9IGJhY2t1cCArIFNUUkxFTihiYWNrdXApIC0gMQorCQkJCQkJCSAtIFNUUkxFTihiYWNrdXBfZXh0KTsKKwkJCSAgICBpZiAod3AgPCBiYWNrdXApCS8qIGVtcHR5IGZpbGUgbmFtZSA/Pz8gKi8KKwkJCQl3cCA9IGJhY2t1cDsKKwkJCSAgICAqd3AgPSAneic7CisJCQkgICAgd2hpbGUgKCp3cCA+ICdhJworCQkJCSAgICAmJiBtY2hfc3RhdCgoY2hhciAqKWJhY2t1cCwgJnN0X25ldykgPj0gMCkKKwkJCQktLSp3cDsKKwkJCSAgICAvKiBUaGV5IGFsbCBleGlzdD8/PyBNdXN0IGJlIHNvbWV0aGluZyB3cm9uZy4gKi8KKwkJCSAgICBpZiAoKndwID09ICdhJykKKwkJCSAgICB7CisJCQkJdmltX2ZyZWUoYmFja3VwKTsKKwkJCQliYWNrdXAgPSBOVUxMOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQl9CisJCXZpbV9mcmVlKHJvb3RuYW1lKTsKKworCQkvKgorCQkgKiBUcnkgdG8gY3JlYXRlIHRoZSBiYWNrdXAgZmlsZQorCQkgKi8KKwkJaWYgKGJhY2t1cCAhPSBOVUxMKQorCQl7CisJCSAgICAvKiByZW1vdmUgb2xkIGJhY2t1cCwgaWYgcHJlc2VudCAqLworCQkgICAgbWNoX3JlbW92ZShiYWNrdXApOworCQkgICAgLyogT3BlbiB3aXRoIE9fRVhDTCB0byBhdm9pZCB0aGUgZmlsZSBiZWluZyBjcmVhdGVkIHdoaWxlCisJCSAgICAgKiB3ZSB3ZXJlIHNsZWVwaW5nIChzeW1saW5rIGhhY2tlciBhdHRhY2s/KSAqLworCQkgICAgYmZkID0gbWNoX29wZW4oKGNoYXIgKiliYWNrdXAsCisJCQkJICAgICAgIE9fV1JPTkxZfE9fQ1JFQVR8T19FWFRSQXxPX0VYQ0wsIDA2NjYpOworCQkgICAgaWYgKGJmZCA8IDApCisJCSAgICB7CisJCQl2aW1fZnJlZShiYWNrdXApOworCQkJYmFja3VwID0gTlVMTDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCS8qIHNldCBmaWxlIHByb3RlY3Rpb24gc2FtZSBhcyBvcmlnaW5hbCBmaWxlLCBidXQKKwkJCSAqIHN0cmlwIHMtYml0ICovCisJCQkodm9pZCltY2hfc2V0cGVybShiYWNrdXAsIHBlcm0gJiAwNzc3KTsKKworI2lmZGVmIFVOSVgKKwkJCS8qCisJCQkgKiBUcnkgdG8gc2V0IHRoZSBncm91cCBvZiB0aGUgYmFja3VwIHNhbWUgYXMgdGhlCisJCQkgKiBvcmlnaW5hbCBmaWxlLiBJZiB0aGlzIGZhaWxzLCBzZXQgdGhlIHByb3RlY3Rpb24KKwkJCSAqIGJpdHMgZm9yIHRoZSBncm91cCBzYW1lIGFzIHRoZSBwcm90ZWN0aW9uIGJpdHMgZm9yCisJCQkgKiBvdGhlcnMuCisJCQkgKi8KKwkJCWlmIChzdF9uZXcuc3RfZ2lkICE9IHN0X29sZC5zdF9naWQgJiYKKyMgaWZkZWYgSEFWRV9GQ0hPV04gIC8qIHNlcXVlbnQtcHR4IGxhY2tzIGZjaG93bigpICovCisJCQkJICAgIGZjaG93bihiZmQsICh1aWRfdCktMSwgc3Rfb2xkLnN0X2dpZCkgIT0gMAorIyBlbHNlCisJCQkgIGNob3duKChjaGFyICopYmFja3VwLCAodWlkX3QpLTEsIHN0X29sZC5zdF9naWQpICE9IDAKKyMgZW5kaWYKKwkJCQkJCSkKKwkJCSAgICBtY2hfc2V0cGVybShiYWNrdXAsCisJCQkJCSAgKHBlcm0gJiAwNzA3KSB8ICgocGVybSAmIDA3KSA8PCAzKSk7CisjZW5kaWYKKworCQkJLyoKKwkJCSAqIGNvcHkgdGhlIGZpbGUuCisJCQkgKi8KKwkJCXdyaXRlX2luZm8uYndfZmQgPSBiZmQ7CisJCQl3cml0ZV9pbmZvLmJ3X2J1ZiA9IGNvcHlidWY7CisjaWZkZWYgSEFTX0JXX0ZMQUdTCisJCQl3cml0ZV9pbmZvLmJ3X2ZsYWdzID0gRklPX05PQ09OVkVSVDsKKyNlbmRpZgorCQkJd2hpbGUgKCh3cml0ZV9pbmZvLmJ3X2xlbiA9IHZpbV9yZWFkKGZkLCBjb3B5YnVmLAorCQkJCQkJCQlCVUZTSVpFKSkgPiAwKQorCQkJeworCQkJICAgIGlmIChidWZfd3JpdGVfYnl0ZXMoJndyaXRlX2luZm8pID09IEZBSUwpCisJCQkgICAgeworCQkJCWVycm1zZyA9IChjaGFyX3UgKilfKCJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIik7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJICAgIHVpX2JyZWFrY2hlY2soKTsKKwkJCSAgICBpZiAoZ290X2ludCkKKwkJCSAgICB7CisJCQkJZXJybXNnID0gKGNoYXJfdSAqKV8oZV9pbnRlcnIpOworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCX0KKworCQkJaWYgKGNsb3NlKGJmZCkgPCAwICYmIGVycm1zZyA9PSBOVUxMKQorCQkJICAgIGVycm1zZyA9IChjaGFyX3UgKilfKCJFNTA3OiBDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIpOworCQkJaWYgKHdyaXRlX2luZm8uYndfbGVuIDwgMCkKKwkJCSAgICBlcnJtc2cgPSAoY2hhcl91ICopXygiRTUwODogQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKGFkZCAhIHRvIG92ZXJyaWRlKSIpOworI2lmZGVmIFVOSVgKKwkJCXNldF9maWxlX3RpbWUoYmFja3VwLCBzdF9vbGQuc3RfYXRpbWUsIHN0X29sZC5zdF9tdGltZSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FDTAorCQkJbWNoX3NldF9hY2woYmFja3VwLCBhY2wpOworI2VuZGlmCisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisgICAgbm9iYWNrdXA6CisJICAgIGNsb3NlKGZkKTsJCS8qIGlnbm9yZSBlcnJvcnMgZm9yIGNsb3NpbmcgcmVhZCBmaWxlICovCisJICAgIHZpbV9mcmVlKGNvcHlidWYpOworCisJICAgIGlmIChiYWNrdXAgPT0gTlVMTCAmJiBlcnJtc2cgPT0gTlVMTCkKKwkJZXJybXNnID0gKGNoYXJfdSAqKV8oIkU1MDk6IENhbm5vdCBjcmVhdGUgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIpOworCSAgICAvKiBpZ25vcmUgZXJyb3JzIHdoZW4gZm9yY2VpdCBpcyBUUlVFICovCisJICAgIGlmICgoc29tZV9lcnJvciB8fCBlcnJtc2cgIT0gTlVMTCkgJiYgIWZvcmNlaXQpCisJICAgIHsKKwkJcmV0dmFsID0gRkFJTDsKKwkJZ290byBmYWlsOworCSAgICB9CisJICAgIGVycm1zZyA9IE5VTEw7CisJfQorCWVsc2UKKwl7CisJICAgIGNoYXJfdQkqZGlycDsKKwkgICAgY2hhcl91CSpwOworCSAgICBjaGFyX3UJKnJvb3RuYW1lOworCisJICAgIC8qCisJICAgICAqIE1ha2UgYSBiYWNrdXAgYnkgcmVuYW1pbmcgdGhlIG9yaWdpbmFsIGZpbGUuCisJICAgICAqLworCSAgICAvKgorCSAgICAgKiBJZiAnY3BvcHRpb25zJyBpbmNsdWRlcyB0aGUgIlciIGZsYWcsIHdlIGRvbid0IHdhbnQgdG8KKwkgICAgICogb3ZlcndyaXRlIGEgcmVhZC1vbmx5IGZpbGUuICBCdXQgcmVuYW1lIG1heSBiZSBwb3NzaWJsZQorCSAgICAgKiBhbnl3YXksIHRodXMgd2UgbmVlZCBhbiBleHRyYSBjaGVjayBoZXJlLgorCSAgICAgKi8KKwkgICAgaWYgKGZpbGVfcmVhZG9ubHkgJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0ZXUklURSkgIT0gTlVMTCkKKwkgICAgeworCQllcnJudW0gPSAoY2hhcl91ICopIkU1MDQ6ICI7CisJCWVycm1zZyA9IChjaGFyX3UgKilfKGVycl9yZWFkb25seSk7CisJCWdvdG8gZmFpbDsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqCisJICAgICAqIEZvcm0gdGhlIGJhY2t1cCBmaWxlIG5hbWUgLSBjaGFuZ2UgcGF0aC9mby5vLmggdG8KKwkgICAgICogcGF0aC9mby5vLmguYmFrIFRyeSBhbGwgZGlyZWN0b3JpZXMgaW4gJ2JhY2t1cGRpcicsIGZpcnN0IG9uZQorCSAgICAgKiB0aGF0IHdvcmtzIGlzIHVzZWQuCisJICAgICAqLworCSAgICBkaXJwID0gcF9iZGlyOworCSAgICB3aGlsZSAoKmRpcnApCisJICAgIHsKKwkJLyoKKwkJICogSXNvbGF0ZSBvbmUgZGlyZWN0b3J5IG5hbWUgYW5kIG1ha2UgdGhlIGJhY2t1cCBmaWxlIG5hbWUuCisJCSAqLworCQkodm9pZCljb3B5X29wdGlvbl9wYXJ0KCZkaXJwLCBJT2J1ZmYsIElPU0laRSwgIiwiKTsKKwkJcm9vdG5hbWUgPSBnZXRfZmlsZV9pbl9kaXIoZm5hbWUsIElPYnVmZik7CisJCWlmIChyb290bmFtZSA9PSBOVUxMKQorCQkgICAgYmFja3VwID0gTlVMTDsKKwkJZWxzZQorCQl7CisJCSAgICBiYWNrdXAgPSBidWZfbW9kbmFtZSgKKyNpZmRlZiBTSE9SVF9GTkFNRQorCQkJICAgIFRSVUUsCisjZWxzZQorCQkJICAgIChidWYtPmJfcF9zbiB8fCBidWYtPmJfc2hvcnRuYW1lKSwKKyNlbmRpZgorCQkJCQkJIHJvb3RuYW1lLCBiYWNrdXBfZXh0LCBGQUxTRSk7CisJCSAgICB2aW1fZnJlZShyb290bmFtZSk7CisJCX0KKworCQlpZiAoYmFja3VwICE9IE5VTEwpCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBJZiB3ZSBhcmUgbm90IGdvaW5nIHRvIGtlZXAgdGhlIGJhY2t1cCBmaWxlLCBkb24ndAorCQkgICAgICogZGVsZXRlIGFuIGV4aXN0aW5nIG9uZSwgdHJ5IHRvIHVzZSBhbm90aGVyIG5hbWUuCisJCSAgICAgKiBDaGFuZ2Ugb25lIGNoYXJhY3RlciwganVzdCBiZWZvcmUgdGhlIGV4dGVuc2lvbi4KKwkJICAgICAqLworCQkgICAgaWYgKCFwX2JrICYmIG1jaF9nZXRwZXJtKGJhY2t1cCkgPj0gMCkKKwkJICAgIHsKKwkJCXAgPSBiYWNrdXAgKyBTVFJMRU4oYmFja3VwKSAtIDEgLSBTVFJMRU4oYmFja3VwX2V4dCk7CisJCQlpZiAocCA8IGJhY2t1cCkJLyogZW1wdHkgZmlsZSBuYW1lID8/PyAqLworCQkJICAgIHAgPSBiYWNrdXA7CisJCQkqcCA9ICd6JzsKKwkJCXdoaWxlICgqcCA+ICdhJyAmJiBtY2hfZ2V0cGVybShiYWNrdXApID49IDApCisJCQkgICAgLS0qcDsKKwkJCS8qIFRoZXkgYWxsIGV4aXN0Pz8/IE11c3QgYmUgc29tZXRoaW5nIHdyb25nISAqLworCQkJaWYgKCpwID09ICdhJykKKwkJCXsKKwkJCSAgICB2aW1fZnJlZShiYWNrdXApOworCQkJICAgIGJhY2t1cCA9IE5VTEw7CisJCQl9CisJCSAgICB9CisJCX0KKwkJaWYgKGJhY2t1cCAhPSBOVUxMKQorCQl7CisKKwkJICAgIC8qCisJCSAgICAgKiBEZWxldGUgYW55IGV4aXN0aW5nIGJhY2t1cCBhbmQgbW92ZSB0aGUgY3VycmVudCB2ZXJzaW9uIHRvCisJCSAgICAgKiB0aGUgYmFja3VwLglGb3Igc2FmZXR5LCB3ZSBkb24ndCByZW1vdmUgdGhlIGJhY2t1cCB1bnRpbAorCQkgICAgICogdGhlIHdyaXRlIGhhcyBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuIEFuZCBpZiB0aGUgJ2JhY2t1cCcKKwkJICAgICAqIG9wdGlvbiBpcyBzZXQsIGxlYXZlIGl0IGFyb3VuZC4KKwkJICAgICAqLworCQkgICAgLyoKKwkJICAgICAqIElmIHRoZSByZW5hbWluZyBvZiB0aGUgb3JpZ2luYWwgZmlsZSB0byB0aGUgYmFja3VwIGZpbGUKKwkJICAgICAqIHdvcmtzLCBxdWl0IGhlcmUuCisJCSAgICAgKi8KKwkJICAgIGlmICh2aW1fcmVuYW1lKGZuYW1lLCBiYWNrdXApID09IDApCisJCQlicmVhazsKKworCQkgICAgdmltX2ZyZWUoYmFja3VwKTsgICAvKiBkb24ndCBkbyB0aGUgcmVuYW1lIGJlbG93ICovCisJCSAgICBiYWNrdXAgPSBOVUxMOworCQl9CisJICAgIH0KKwkgICAgaWYgKGJhY2t1cCA9PSBOVUxMICYmICFmb3JjZWl0KQorCSAgICB7CisJCWVycm1zZyA9IChjaGFyX3UgKilfKCJFNTEwOiBDYW4ndCBtYWtlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiKTsKKwkJZ290byBmYWlsOworCSAgICB9CisJfQorICAgIH0KKworI2lmIGRlZmluZWQoVU5JWCkgJiYgIWRlZmluZWQoQVJDSElFKQorICAgIC8qIFdoZW4gdXNpbmcgIjp3ISIgYW5kIHRoZSBmaWxlIHdhcyByZWFkLW9ubHk6IG1ha2UgaXQgd3JpdGFibGUgKi8KKyAgICBpZiAoZm9yY2VpdCAmJiBwZXJtID49IDAgJiYgIShwZXJtICYgMDIwMCkgJiYgc3Rfb2xkLnN0X3VpZCA9PSBnZXR1aWQoKQorCQkJCSAgICAgJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0ZXUklURSkgPT0gTlVMTCkKKyAgICB7CisJcGVybSB8PSAwMjAwOworCSh2b2lkKW1jaF9zZXRwZXJtKGZuYW1lLCBwZXJtKTsKKwltYWRlX3dyaXRhYmxlID0gVFJVRTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIFdoZW4gdXNpbmcgIjp3ISIgYW5kIHdyaXRpbmcgdG8gdGhlIGN1cnJlbnQgZmlsZSwgcmVhZG9ubHkgbWFrZXMgbm8KKyAgICAgKiBzZW5zZSwgcmVzZXQgaXQgKi8KKyAgICBpZiAoZm9yY2VpdCAmJiBvdmVyd3JpdGluZykKKyAgICB7CisJYnVmLT5iX3Bfcm8gPSBGQUxTRTsKKyNpZmRlZiBGRUFUX1RJVExFCisJbmVlZF9tYWtldGl0bGUgPSBUUlVFOwkgICAgLyogc2V0IHdpbmRvdyB0aXRsZSBsYXRlciAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9XSU5ET1dTCisJc3RhdHVzX3JlZHJhd19hbGwoKTsJICAgIC8qIHJlZHJhdyBzdGF0dXMgbGluZXMgbGF0ZXIgKi8KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChlbmQgPiBidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwllbmQgPSBidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKyAgICBpZiAoYnVmLT5iX21sLm1sX2ZsYWdzICYgTUxfRU1QVFkpCisJc3RhcnQgPSBlbmQgKyAxOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgb3JpZ2luYWwgZmlsZSBpcyBiZWluZyBvdmVyd3JpdHRlbiwgdGhlcmUgaXMgYSBzbWFsbCBjaGFuY2UgdGhhdAorICAgICAqIHdlIGNyYXNoIGluIHRoZSBtaWRkbGUgb2Ygd3JpdGluZy4gVGhlcmVmb3JlIHRoZSBmaWxlIGlzIHByZXNlcnZlZCBub3cuCisgICAgICogVGhpcyBtYWtlcyBhbGwgYmxvY2sgbnVtYmVycyBwb3NpdGl2ZSBzbyB0aGF0IHJlY292ZXJ5IGRvZXMgbm90IG5lZWQKKyAgICAgKiB0aGUgb3JpZ2luYWwgZmlsZS4KKyAgICAgKiBEb24ndCBkbyB0aGlzIGlmIHRoZXJlIGlzIGEgYmFja3VwIGZpbGUgYW5kIHdlIGFyZSBleGl0aW5nLgorICAgICAqLworICAgIGlmIChyZXNldF9jaGFuZ2VkICYmICFuZXdmaWxlICYmICFvdGhlcmZpbGUoZmZuYW1lKQorCQkJCQkgICAgICAmJiAhKGV4aXRpbmcgJiYgYmFja3VwICE9IE5VTEwpKQorICAgIHsKKwltbF9wcmVzZXJ2ZShidWYsIEZBTFNFKTsKKwlpZiAoZ290X2ludCkKKwl7CisJICAgIGVycm1zZyA9IChjaGFyX3UgKilfKGVfaW50ZXJyKTsKKwkgICAgZ290byByZXN0b3JlX2JhY2t1cDsKKwl9CisgICAgfQorCisjaWZkZWYgTUFDT1NfQ0xBU1NJQyAvKiBUT0RPOiBJcyBpdCBuZWVkIGZvciBNQUNPU19YPyAoRGFueSkgKi8KKyAgICAvKgorICAgICAqIEJlZm9yZSByaXNraW5nIHRvIGxvc2UgdGhlIG9yaWdpbmFsIGZpbGUgdmVyaWZ5IGlmIHRoZXJlJ3MKKyAgICAgKiBhIHJlc291cmNlIGZvcmsgdG8gcHJlc2VydmUsIGFuZCBpZiBjYW5ub3QgYmUgZG9uZSB3YXJuCisgICAgICogdGhlIHVzZXJzLiBUaGlzIGhhcHBlbnMgd2hlbiBvdmVyd3JpdGluZyB3aXRob3V0IGJhY2t1cHMuCisgICAgICovCisgICAgaWYgKGJhY2t1cCA9PSBOVUxMICYmIG92ZXJ3cml0aW5nICYmICFhcHBlbmQpCisJaWYgKG1jaF9oYXNfcmVzb3VyY2VfZm9yayhmbmFtZSkpCisJeworCSAgICBlcnJtc2cgPSAoY2hhcl91ICopXygiRTQ2MDogVGhlIHJlc291cmNlIGZvcmsgd291bGQgYmUgbG9zdCAoYWRkICEgdG8gb3ZlcnJpZGUpIik7CisJICAgIGdvdG8gcmVzdG9yZV9iYWNrdXA7CisJfQorI2VuZGlmCisKKyNpZmRlZiBWTVMKKyAgICB2bXNfcmVtb3ZlX3ZlcnNpb24oZm5hbWUpOyAvKiByZW1vdmUgdmVyc2lvbiAqLworI2VuZGlmCisgICAgLyogRGVmYXVsdDogd3JpdGUgdGhlIHRoZSBmaWxlIGRpcmVjdGx5LiAgTWF5IHdyaXRlIHRvIGEgdGVtcCBmaWxlIGZvcgorICAgICAqIG11bHRpLWJ5dGUgY29udmVyc2lvbi4gKi8KKyAgICB3Zm5hbWUgPSBmbmFtZTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKiBDaGVjayBmb3IgZm9yY2VkICdmaWxlZW5jb2RpbmcnIGZyb20gIisrb3B0PXZhbCIgYXJndW1lbnQuICovCisgICAgaWYgKGVhcCAhPSBOVUxMICYmIGVhcC0+Zm9yY2VfZW5jICE9IDApCisgICAgeworCWZlbmMgPSBlYXAtPmNtZCArIGVhcC0+Zm9yY2VfZW5jOworCWZlbmMgPSBlbmNfY2Fub25pemUoZmVuYyk7CisJZmVuY190b2ZyZWUgPSBmZW5jOworICAgIH0KKyAgICBlbHNlCisJZmVuYyA9IGJ1Zi0+Yl9wX2ZlbmM7CisKKyAgICAvKgorICAgICAqIFRoZSBmaWxlIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB3aGVuICdmaWxlZW5jb2RpbmcnIGlzIHNldCBhbmQKKyAgICAgKiAnZmlsZWVuY29kaW5nJyBkaWZmZXJzIGZyb20gJ2VuY29kaW5nJy4KKyAgICAgKi8KKyAgICBjb252ZXJ0ZWQgPSAoKmZlbmMgIT0gTlVMICYmICFzYW1lX2VuY29kaW5nKHBfZW5jLCBmZW5jKSk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIFVURi04IHRvIFVDUy0yLzQgb3IgTGF0aW4xIGNvbnZlcnNpb24gbmVlZHMgdG8gYmUgZG9uZS4gIE9yCisgICAgICogTGF0aW4xIHRvIFVuaWNvZGUgY29udmVyc2lvbi4gIFRoaXMgaXMgaGFuZGxlZCBpbiBidWZfd3JpdGVfYnl0ZXMoKS4KKyAgICAgKiBQcmVwYXJlIHRoZSBmbGFncyBmb3IgaXQgYW5kIGFsbG9jYXRlIGJ3X2NvbnZfYnVmIHdoZW4gbmVlZGVkLgorICAgICAqLworICAgIGlmIChjb252ZXJ0ZWQgJiYgKGVuY191dGY4IHx8IFNUUkNNUChwX2VuYywgImxhdGluMSIpID09IDApKQorICAgIHsKKwl3Yl9mbGFncyA9IGdldF9maW9fZmxhZ3MoZmVuYyk7CisJaWYgKHdiX2ZsYWdzICYgKEZJT19VQ1MyIHwgRklPX1VDUzQgfCBGSU9fVVRGMTYgfCBGSU9fVVRGOCkpCisJeworCSAgICAvKiBOZWVkIHRvIGFsbG9jYXRlIGEgYnVmZmVyIHRvIHRyYW5zbGF0ZSBpbnRvLiAqLworCSAgICBpZiAod2JfZmxhZ3MgJiAoRklPX1VDUzIgfCBGSU9fVVRGMTYgfCBGSU9fVVRGOCkpCisJCXdyaXRlX2luZm8uYndfY29udl9idWZsZW4gPSBidWZzaXplICogMjsKKwkgICAgZWxzZSAvKiBGSU9fVUNTNCAqLworCQl3cml0ZV9pbmZvLmJ3X2NvbnZfYnVmbGVuID0gYnVmc2l6ZSAqIDQ7CisJICAgIHdyaXRlX2luZm8uYndfY29udl9idWYKKwkJCSAgID0gbGFsbG9jKChsb25nX3Upd3JpdGVfaW5mby5id19jb252X2J1ZmxlbiwgVFJVRSk7CisJICAgIGlmICh3cml0ZV9pbmZvLmJ3X2NvbnZfYnVmID09IE5VTEwpCisJCWVuZCA9IDA7CisJfQorICAgIH0KKworIyBpZmRlZiBXSU4zMjY0CisgICAgaWYgKGNvbnZlcnRlZCAmJiB3Yl9mbGFncyA9PSAwICYmICh3Yl9mbGFncyA9IGdldF93aW5fZmlvX2ZsYWdzKGZlbmMpKSAhPSAwKQorICAgIHsKKwkvKiBDb252ZXJ0IFVURi04IC0+IFVDUy0yIGFuZCBVQ1MtMiAtPiBEQkNTLiAgV29yc3QtY2FzZSAqIDQ6ICovCisJd3JpdGVfaW5mby5id19jb252X2J1ZmxlbiA9IGJ1ZnNpemUgKiA0OworCXdyaXRlX2luZm8uYndfY29udl9idWYKKwkJCSAgICA9IGxhbGxvYygobG9uZ191KXdyaXRlX2luZm8uYndfY29udl9idWZsZW4sIFRSVUUpOworCWlmICh3cml0ZV9pbmZvLmJ3X2NvbnZfYnVmID09IE5VTEwpCisJICAgIGVuZCA9IDA7CisgICAgfQorIyBlbmRpZgorCisjIGlmZGVmIE1BQ09TX1gKKyAgICBpZiAoY29udmVydGVkICYmIHdiX2ZsYWdzID09IDAgJiYgKHdiX2ZsYWdzID0gZ2V0X21hY19maW9fZmxhZ3MoZmVuYykpICE9IDApCisgICAgeworCXdyaXRlX2luZm8uYndfY29udl9idWZsZW4gPSBidWZzaXplICogMzsKKwl3cml0ZV9pbmZvLmJ3X2NvbnZfYnVmCisJCQkgICAgPSBsYWxsb2MoKGxvbmdfdSl3cml0ZV9pbmZvLmJ3X2NvbnZfYnVmbGVuLCBUUlVFKTsKKwlpZiAod3JpdGVfaW5mby5id19jb252X2J1ZiA9PSBOVUxMKQorCSAgICBlbmQgPSAwOworICAgIH0KKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChVU0VfSUNPTlYpCisgICAgaWYgKGNvbnZlcnRlZCAmJiB3Yl9mbGFncyA9PSAwKQorICAgIHsKKyMgIGlmZGVmIFVTRV9JQ09OVgorCS8qCisJICogVXNlIGljb252KCkgY29udmVyc2lvbiB3aGVuIGNvbnZlcnNpb24gaXMgbmVlZGVkIGFuZCBpdCdzIG5vdCBkb25lCisJICogaW50ZXJuYWxseS4KKwkgKi8KKwl3cml0ZV9pbmZvLmJ3X2ljb252X2ZkID0gKGljb252X3QpbXlfaWNvbnZfb3BlbihmZW5jLAorCQkJCQllbmNfdXRmOCA/IChjaGFyX3UgKikidXRmLTgiIDogcF9lbmMpOworCWlmICh3cml0ZV9pbmZvLmJ3X2ljb252X2ZkICE9IChpY29udl90KS0xKQorCXsKKwkgICAgLyogV2UncmUgZ29pbmcgdG8gdXNlIGljb252KCksIGFsbG9jYXRlIGEgYnVmZmVyIHRvIGNvbnZlcnQgaW4uICovCisJICAgIHdyaXRlX2luZm8uYndfY29udl9idWZsZW4gPSBidWZzaXplICogSUNPTlZfTVVMVDsKKwkgICAgd3JpdGVfaW5mby5id19jb252X2J1ZgorCQkJICAgPSBsYWxsb2MoKGxvbmdfdSl3cml0ZV9pbmZvLmJ3X2NvbnZfYnVmbGVuLCBUUlVFKTsKKwkgICAgaWYgKHdyaXRlX2luZm8uYndfY29udl9idWYgPT0gTlVMTCkKKwkJZW5kID0gMDsKKwkgICAgd3JpdGVfaW5mby5id19maXJzdCA9IFRSVUU7CisJfQorIyAgIGlmZGVmIEZFQVRfRVZBTAorCWVsc2UKKyMgICBlbmRpZgorIyAgZW5kaWYKKworIyAgaWZkZWYgRkVBVF9FVkFMCisJICAgIC8qCisJICAgICAqIFdoZW4gdGhlIGZpbGUgbmVlZHMgdG8gYmUgY29udmVydGVkIHdpdGggJ2NoYXJjb252ZXJ0JyBhZnRlcgorCSAgICAgKiB3cml0aW5nLCB3cml0ZSB0byBhIHRlbXAgZmlsZSBpbnN0ZWFkIGFuZCBsZXQgdGhlIGNvbnZlcnNpb24KKwkgICAgICogb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBmaWxlLgorCSAgICAgKi8KKwkgICAgaWYgKCpwX2NjdiAhPSBOVUwpCisJICAgIHsKKwkJd2ZuYW1lID0gdmltX3RlbXBuYW1lKCd3Jyk7CisJCWlmICh3Zm5hbWUgPT0gTlVMTCkJLyogQ2FuJ3Qgd3JpdGUgd2l0aG91dCBhIHRlbXBmaWxlISAqLworCQl7CisJCSAgICBlcnJtc2cgPSAoY2hhcl91ICopXygiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciKTsKKwkJICAgIGdvdG8gcmVzdG9yZV9iYWNrdXA7CisJCX0KKwkgICAgfQorIyAgZW5kaWYKKyAgICB9CisjIGVuZGlmCisgICAgaWYgKGNvbnZlcnRlZCAmJiB3Yl9mbGFncyA9PSAwCisjICBpZmRlZiBVU0VfSUNPTlYKKwkgICAgJiYgd3JpdGVfaW5mby5id19pY29udl9mZCA9PSAoaWNvbnZfdCktMQorIyAgZW5kaWYKKyMgIGlmZGVmIEZFQVRfRVZBTAorCSAgICAmJiB3Zm5hbWUgPT0gZm5hbWUKKyMgIGVuZGlmCisJICAgICkKKyAgICB7CisJaWYgKCFmb3JjZWl0KQorCXsKKwkgICAgZXJybXNnID0gKGNoYXJfdSAqKV8oIkUyMTM6IENhbm5vdCBjb252ZXJ0IChhZGQgISB0byB3cml0ZSB3aXRob3V0IGNvbnZlcnNpb24pIik7CisJICAgIGdvdG8gcmVzdG9yZV9iYWNrdXA7CisJfQorCW5vdGNvbnZlcnRlZCA9IFRSVUU7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIE9wZW4gdGhlIGZpbGUgIndmbmFtZSIgZm9yIHdyaXRpbmcuCisgICAgICogV2UgbWF5IHRyeSB0byBvcGVuIHRoZSBmaWxlIHR3aWNlOiBJZiB3ZSBjYW4ndCB3cml0ZSB0byB0aGUKKyAgICAgKiBmaWxlIGFuZCBmb3JjZWl0IGlzIFRSVUUgd2UgZGVsZXRlIHRoZSBleGlzdGluZyBmaWxlIGFuZCB0cnkgdG8gY3JlYXRlCisgICAgICogYSBuZXcgb25lLiBJZiB0aGlzIHN0aWxsIGZhaWxzIHdlIG1heSBoYXZlIGxvc3QgdGhlIG9yaWdpbmFsIGZpbGUhCisgICAgICogKHRoaXMgbWF5IGhhcHBlbiB3aGVuIHRoZSB1c2VyIHJlYWNoZWQgaGlzIHF1b3R1bSBmb3IgbnVtYmVyIG9mIGZpbGVzKS4KKyAgICAgKiBBcHBlbmRpbmcgd2lsbCBmYWlsIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IGFuZCBmb3JjZWl0IGlzIEZBTFNFLgorICAgICAqLworICAgIHdoaWxlICgoZmQgPSBtY2hfb3BlbigoY2hhciAqKXdmbmFtZSwgT19XUk9OTFkgfCBPX0VYVFJBIHwgKGFwcGVuZAorCQkJPyAoZm9yY2VpdCA/IChPX0FQUEVORCB8IE9fQ1JFQVQpIDogT19BUFBFTkQpCisJCQk6IChPX0NSRUFUIHwgT19UUlVOQykpCisJCQksIDA2NjYpKSA8IDApCisgICAgeworCS8qCisJICogQSBmb3JjZWQgd3JpdGUgd2lsbCB0cnkgdG8gY3JlYXRlIGEgbmV3IGZpbGUgaWYgdGhlIG9sZCBvbmUgaXMKKwkgKiBzdGlsbCByZWFkb25seS4gVGhpcyBtYXkgYWxzbyBoYXBwZW4gd2hlbiB0aGUgZGlyZWN0b3J5IGlzCisJICogcmVhZC1vbmx5LiBJbiB0aGF0IGNhc2UgdGhlIG1jaF9yZW1vdmUoKSB3aWxsIGZhaWwuCisJICovCisJaWYgKGVycm1zZyA9PSBOVUxMKQorCXsKKyNpZmRlZiBVTklYCisJICAgIHN0cnVjdCBzdGF0CXN0OworCisJICAgIC8qIERvbid0IGRlbGV0ZSB0aGUgZmlsZSB3aGVuIGl0J3MgYSBoYXJkIG9yIHN5bWJvbGljIGxpbmsuICovCisJICAgIGlmICgoIW5ld2ZpbGUgJiYgc3Rfb2xkLnN0X25saW5rID4gMSkKKwkJICAgIHx8IChtY2hfbHN0YXQoKGNoYXIgKilmbmFtZSwgJnN0KSA9PSAwCisJCQkmJiAoc3Quc3RfZGV2ICE9IHN0X29sZC5zdF9kZXYKKwkJCSAgICB8fCBzdC5zdF9pbm8gIT0gc3Rfb2xkLnN0X2lubykpKQorCQllcnJtc2cgPSAoY2hhcl91ICopXygiRTE2NjogQ2FuJ3Qgb3BlbiBsaW5rZWQgZmlsZSBmb3Igd3JpdGluZyIpOworCSAgICBlbHNlCisjZW5kaWYKKwkgICAgeworCQllcnJtc2cgPSAoY2hhcl91ICopXygiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIik7CisJCWlmIChmb3JjZWl0ICYmIHZpbV9zdHJjaHIocF9jcG8sIENQT19GV1JJVEUpID09IE5VTEwKKwkJCQkJCQkJICYmIHBlcm0gPj0gMCkKKwkJeworI2lmZGVmIFVOSVgKKwkJICAgIC8qIHdlIHdyaXRlIHRvIHRoZSBmaWxlLCB0aHVzIGl0IHNob3VsZCBiZSBtYXJrZWQKKwkJICAgICAgIHdyaXRhYmxlIGFmdGVyIGFsbCAqLworCQkgICAgaWYgKCEocGVybSAmIDAyMDApKQorCQkJbWFkZV93cml0YWJsZSA9IFRSVUU7CisJCSAgICBwZXJtIHw9IDAyMDA7CisJCSAgICBpZiAoc3Rfb2xkLnN0X3VpZCAhPSBnZXR1aWQoKSB8fCBzdF9vbGQuc3RfZ2lkICE9IGdldGdpZCgpKQorCQkJcGVybSAmPSAwNzc3OworI2VuZGlmCisJCSAgICBpZiAoIWFwcGVuZCkJICAgIC8qIGRvbid0IHJlbW92ZSB3aGVuIGFwcGVuZGluZyAqLworCQkJbWNoX3JlbW92ZSh3Zm5hbWUpOworCQkgICAgY29udGludWU7CisJCX0KKwkgICAgfQorCX0KKworcmVzdG9yZV9iYWNrdXA6CisJeworCSAgICBzdHJ1Y3Qgc3RhdCBzdDsKKworCSAgICAvKgorCSAgICAgKiBJZiB3ZSBmYWlsZWQgdG8gb3BlbiB0aGUgZmlsZSwgd2UgZG9uJ3QgbmVlZCBhIGJhY2t1cC4gVGhyb3cgaXQKKwkgICAgICogYXdheS4gIElmIHdlIG1vdmVkIG9yIHJlbW92ZWQgdGhlIG9yaWdpbmFsIGZpbGUgdHJ5IHRvIHB1dCB0aGUKKwkgICAgICogYmFja3VwIGluIGl0cyBwbGFjZS4KKwkgICAgICovCisJICAgIGlmIChiYWNrdXAgIT0gTlVMTCAmJiB3Zm5hbWUgPT0gZm5hbWUpCisJICAgIHsKKwkJaWYgKGJhY2t1cF9jb3B5KQorCQl7CisJCSAgICAvKgorCQkgICAgICogVGhlcmUgaXMgYSBzbWFsbCBjaGFuY2UgdGhhdCB3ZSByZW1vdmVkIHRoZSBvcmlnaW5hbCwKKwkJICAgICAqIHRyeSB0byBtb3ZlIHRoZSBjb3B5IGluIGl0cyBwbGFjZS4KKwkJICAgICAqIFRoaXMgbWF5IG5vdCB3b3JrIGlmIHRoZSB2aW1fcmVuYW1lKCkgZmFpbHMuCisJCSAgICAgKiBJbiB0aGF0IGNhc2Ugd2UgbGVhdmUgdGhlIGNvcHkgYXJvdW5kLgorCQkgICAgICovCisJCSAgICAvKiBJZiBmaWxlIGRvZXMgbm90IGV4aXN0LCBwdXQgdGhlIGNvcHkgaW4gaXRzIHBsYWNlICovCisJCSAgICBpZiAobWNoX3N0YXQoKGNoYXIgKilmbmFtZSwgJnN0KSA8IDApCisJCQl2aW1fcmVuYW1lKGJhY2t1cCwgZm5hbWUpOworCQkgICAgLyogaWYgb3JpZ2luYWwgZmlsZSBkb2VzIGV4aXN0IHRocm93IGF3YXkgdGhlIGNvcHkgKi8KKwkJICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWZuYW1lLCAmc3QpID49IDApCisJCQltY2hfcmVtb3ZlKGJhY2t1cCk7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICAvKiB0cnkgdG8gcHV0IHRoZSBvcmlnaW5hbCBmaWxlIGJhY2sgKi8KKwkJICAgIHZpbV9yZW5hbWUoYmFja3VwLCBmbmFtZSk7CisJCX0KKwkgICAgfQorCisJICAgIC8qIGlmIG9yaWdpbmFsIGZpbGUgbm8gbG9uZ2VyIGV4aXN0cyBnaXZlIGFuIGV4dHJhIHdhcm5pbmcgKi8KKwkgICAgaWYgKCFuZXdmaWxlICYmIG1jaF9zdGF0KChjaGFyICopZm5hbWUsICZzdCkgPCAwKQorCQllbmQgPSAwOworCX0KKworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAod2ZuYW1lICE9IGZuYW1lKQorCSAgICB2aW1fZnJlZSh3Zm5hbWUpOworI2VuZGlmCisJZ290byBmYWlsOworICAgIH0KKyAgICBlcnJtc2cgPSBOVUxMOworCisjaWYgZGVmaW5lZChNQUNPU19DTEFTU0lDKSB8fCBkZWZpbmVkKFdJTjMyNjQpCisgICAgLyogVE9ETzogSXMgaXQgbmVlZCBmb3IgTUFDT1NfWD8gKERhbnkpICovCisgICAgLyoKKyAgICAgKiBPbiBtYWNpbnRvc2ggY29weSB0aGUgb3JpZ2luYWwgZmlsZXMgYXR0cmlidXRlcyAoaS5lLiB0aGUgYmFja3VwKQorICAgICAqIFRoaXMgaXMgZG9uZSBpbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgcmVzc291cmNlIGZvcmsgYW5kIHRoZQorICAgICAqIEZpbmRlciBhdHRyaWJ1dGUgKGxhYmVsLCBjb21tZW50cywgY3VzdG9tIGljb25zLCBmaWxlIGNyZWF0b3JlKQorICAgICAqLworICAgIGlmIChiYWNrdXAgIT0gTlVMTCAmJiBvdmVyd3JpdGluZyAmJiAhYXBwZW5kKQorICAgIHsKKwlpZiAoYmFja3VwX2NvcHkpCisJICAgICh2b2lkKW1jaF9jb3B5X2ZpbGVfYXR0cmlidXRlKHdmbmFtZSwgYmFja3VwKTsKKwllbHNlCisJICAgICh2b2lkKW1jaF9jb3B5X2ZpbGVfYXR0cmlidXRlKGJhY2t1cCwgd2ZuYW1lKTsKKyAgICB9CisKKyAgICBpZiAoIW92ZXJ3cml0aW5nICYmICFhcHBlbmQpCisgICAgeworCWlmIChidWYtPmJfZmZuYW1lICE9IE5VTEwpCisJICAgICh2b2lkKW1jaF9jb3B5X2ZpbGVfYXR0cmlidXRlKGJ1Zi0+Yl9mZm5hbWUsIHdmbmFtZSk7CisJLyogU2hvdWxkIGNvcHkgcmVzc291cmNlIGZvcmsgKi8KKyAgICB9CisjZW5kaWYKKworICAgIHdyaXRlX2luZm8uYndfZmQgPSBmZDsKKworI2lmZGVmIEZFQVRfQ1JZUFQKKyAgICBpZiAoKmJ1Zi0+Yl9wX2tleSAmJiAhZmlsdGVyaW5nKQorICAgIHsKKwljcnlwdF9pbml0X2tleXMoYnVmLT5iX3Bfa2V5KTsKKwkvKiBXcml0ZSBtYWdpYyBudW1iZXIsIHNvIHRoYXQgVmltIGtub3dzIHRoYXQgdGhpcyBmaWxlIGlzIGVuY3J5cHRlZAorCSAqIHdoZW4gcmVhZGluZyBpdCBhZ2Fpbi4gIFRoaXMgYWxzbyB1bmRlcmdvZXMgdXRmLTggdG8gdWNzLTIvNAorCSAqIGNvbnZlcnNpb24gd2hlbiBuZWVkZWQuICovCisJd3JpdGVfaW5mby5id19idWYgPSAoY2hhcl91ICopQ1JZUFRfTUFHSUM7CisJd3JpdGVfaW5mby5id19sZW4gPSBDUllQVF9NQUdJQ19MRU47CisJd3JpdGVfaW5mby5id19mbGFncyA9IEZJT19OT0NPTlZFUlQ7CisJaWYgKGJ1Zl93cml0ZV9ieXRlcygmd3JpdGVfaW5mbykgPT0gRkFJTCkKKwkgICAgZW5kID0gMDsKKwl3Yl9mbGFncyB8PSBGSU9fRU5DUllQVEVEOworICAgIH0KKyNlbmRpZgorCisgICAgd3JpdGVfaW5mby5id19idWYgPSBidWZmZXI7CisgICAgbmNoYXJzID0gMDsKKworICAgIC8qIHVzZSAiKytiaW4iLCAiKytub2JpbiIgb3IgJ2JpbmFyeScgKi8KKyAgICBpZiAoZWFwICE9IE5VTEwgJiYgZWFwLT5mb3JjZV9iaW4gIT0gMCkKKwl3cml0ZV9iaW4gPSAoZWFwLT5mb3JjZV9iaW4gPT0gRk9SQ0VfQklOKTsKKyAgICBlbHNlCisJd3JpdGVfYmluID0gYnVmLT5iX3BfYmluOworCisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qCisgICAgICogVGhlIEJPTSBpcyB3cml0dGVuIGp1c3QgYWZ0ZXIgdGhlIGVuY3J5cHRpb24gbWFnaWMgbnVtYmVyLgorICAgICAqLworICAgIGlmIChidWYtPmJfcF9ib21iICYmICF3cml0ZV9iaW4pCisgICAgeworCXdyaXRlX2luZm8uYndfbGVuID0gbWFrZV9ib20oYnVmZmVyLCBmZW5jKTsKKwlpZiAod3JpdGVfaW5mby5id19sZW4gPiAwKQorCXsKKwkgICAgLyogZG9uJ3QgY29udmVydCwgZG8gZW5jcnlwdGlvbiAqLworCSAgICB3cml0ZV9pbmZvLmJ3X2ZsYWdzID0gRklPX05PQ09OVkVSVCB8IHdiX2ZsYWdzOworCSAgICBpZiAoYnVmX3dyaXRlX2J5dGVzKCZ3cml0ZV9pbmZvKSA9PSBGQUlMKQorCQllbmQgPSAwOworCSAgICBlbHNlCisJCW5jaGFycyArPSB3cml0ZV9pbmZvLmJ3X2xlbjsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICB3cml0ZV9pbmZvLmJ3X2xlbiA9IGJ1ZnNpemU7CisjaWZkZWYgSEFTX0JXX0ZMQUdTCisgICAgd3JpdGVfaW5mby5id19mbGFncyA9IHdiX2ZsYWdzOworI2VuZGlmCisgICAgZmlsZWZvcm1hdCA9IGdldF9maWxlZm9ybWF0X2ZvcmNlKGJ1ZiwgZWFwKTsKKyAgICBzID0gYnVmZmVyOworICAgIGxlbiA9IDA7CisgICAgZm9yIChsbnVtID0gc3RhcnQ7IGxudW0gPD0gZW5kOyArK2xudW0pCisgICAgeworCS8qCisJICogVGhlIG5leHQgd2hpbGUgbG9vcCBpcyBkb25lIG9uY2UgZm9yIGVhY2ggY2hhcmFjdGVyIHdyaXR0ZW4uCisJICogS2VlcCBpdCBmYXN0IQorCSAqLworCXB0ciA9IG1sX2dldF9idWYoYnVmLCBsbnVtLCBGQUxTRSkgLSAxOworCXdoaWxlICgoYyA9ICorK3B0cikgIT0gTlVMKQorCXsKKwkgICAgaWYgKGMgPT0gTkwpCisJCSpzID0gTlVMOwkJLyogcmVwbGFjZSBuZXdsaW5lcyB3aXRoIE5VTHMgKi8KKwkgICAgZWxzZSBpZiAoYyA9PSBDQVIgJiYgZmlsZWZvcm1hdCA9PSBFT0xfTUFDKQorCQkqcyA9IE5MOwkJLyogTWFjOiByZXBsYWNlIENScyB3aXRoIE5McyAqLworCSAgICBlbHNlCisJCSpzID0gYzsKKwkgICAgKytzOworCSAgICBpZiAoKytsZW4gIT0gYnVmc2l6ZSkKKwkJY29udGludWU7CisJICAgIGlmIChidWZfd3JpdGVfYnl0ZXMoJndyaXRlX2luZm8pID09IEZBSUwpCisJICAgIHsKKwkJZW5kID0gMDsJCS8qIHdyaXRlIGVycm9yOiBicmVhayBsb29wICovCisJCWJyZWFrOworCSAgICB9CisJICAgIG5jaGFycyArPSBidWZzaXplOworCSAgICBzID0gYnVmZmVyOworCSAgICBsZW4gPSAwOworCX0KKwkvKiB3cml0ZSBmYWlsZWQgb3IgbGFzdCBsaW5lIGhhcyBubyBFT0w6IHN0b3AgaGVyZSAqLworCWlmIChlbmQgPT0gMAorCQl8fCAobG51bSA9PSBlbmQKKwkJICAgICYmIHdyaXRlX2JpbgorCQkgICAgJiYgKGxudW0gPT0gd3JpdGVfbm9fZW9sX2xudW0KKwkJCXx8IChsbnVtID09IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ICYmICFidWYtPmJfcF9lb2wpKSkpCisJeworCSAgICArK2xudW07CQkJLyogd3JpdHRlbiB0aGUgbGluZSwgY291bnQgaXQgKi8KKwkgICAgbm9fZW9sID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorCWlmIChmaWxlZm9ybWF0ID09IEVPTF9VTklYKQorCSAgICAqcysrID0gTkw7CisJZWxzZQorCXsKKwkgICAgKnMrKyA9IENBUjsJCQkvKiBFT0xfTUFDIG9yIEVPTF9ET1M6IHdyaXRlIENSICovCisJICAgIGlmIChmaWxlZm9ybWF0ID09IEVPTF9ET1MpCS8qIHdyaXRlIENSLU5MICovCisJICAgIHsKKwkJaWYgKCsrbGVuID09IGJ1ZnNpemUpCisJCXsKKwkJICAgIGlmIChidWZfd3JpdGVfYnl0ZXMoJndyaXRlX2luZm8pID09IEZBSUwpCisJCSAgICB7CisJCQllbmQgPSAwOwkvKiB3cml0ZSBlcnJvcjogYnJlYWsgbG9vcCAqLworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBuY2hhcnMgKz0gYnVmc2l6ZTsKKwkJICAgIHMgPSBidWZmZXI7CisJCSAgICBsZW4gPSAwOworCQl9CisJCSpzKysgPSBOTDsKKwkgICAgfQorCX0KKwlpZiAoKytsZW4gPT0gYnVmc2l6ZSAmJiBlbmQpCisJeworCSAgICBpZiAoYnVmX3dyaXRlX2J5dGVzKCZ3cml0ZV9pbmZvKSA9PSBGQUlMKQorCSAgICB7CisJCWVuZCA9IDA7CQkvKiB3cml0ZSBlcnJvcjogYnJlYWsgbG9vcCAqLworCQlicmVhazsKKwkgICAgfQorCSAgICBuY2hhcnMgKz0gYnVmc2l6ZTsKKwkgICAgcyA9IGJ1ZmZlcjsKKwkgICAgbGVuID0gMDsKKworCSAgICB1aV9icmVha2NoZWNrKCk7CisJICAgIGlmIChnb3RfaW50KQorCSAgICB7CisJCWVuZCA9IDA7CQkvKiBJbnRlcnJ1cHRlZCwgYnJlYWsgbG9vcCAqLworCQlicmVhazsKKwkgICAgfQorCX0KKyNpZmRlZiBWTVMKKwkvKgorCSAqIE9uIFZNUyB0aGVyZSBpcyBhIHByb2JsZW06IG5ld2xpbmVzIGdldCBhZGRlZCB3aGVuIHdyaXRpbmcgYmxvY2tzCisJICogYXQgYSB0aW1lLiBGaXggaXQgYnkgd3JpdGluZyBhIGxpbmUgYXQgYSB0aW1lLgorCSAqIFRoaXMgaXMgbXVjaCBzbG93ZXIhCisJICogRXhwbGFuYXRpb246IFZpbSBjYW4gbm90IGhhbmRsZSwgc28gZmFyLCB2YXJpYWJsZSByZWNvcmQgZm9ybWF0LgorCSAqIFdpdGggJGFuYWxpemUvcm1zIGZpbGVuYW1lIHlvdSBjYW4gZ2V0IHRoZSBybXMgZmlsZSBzdHJ1Y3R1cmUsIGFuZAorCSAqIGlmIHRoZSBSZWNvcmQgZm9ybWF0IGZpbGVkIGlzIHZhcmlhYmxlLCBDUiB3aWxsIGJlIGFkZGVkIGFmdGVyCisJICogZXZlcnkgd3JpdHRlbiBidWZmZXIuICBJbiBvdGhlciBjYXNlcyBpdCB3b3JrcyB3aXRob3V0IHRoaXMgZml4LgorCSAqIEZyb20gb3RoZXIgc2lkZSByZWFkIGlzIGFib3V0IDUgdGltZXMgc2xvd2VyIGZvciAidmFyaWFibGUgcmVjb3JkCisJICogZm9ybWF0IiBmaWxlcy4KKwkgKi8KKwlpZiAoYnVmLT5iX2ZhYl9yZm0gPT0gRkFCJENfVkFSKQorCXsKKwkgICAgd3JpdGVfaW5mby5id19sZW4gPSBsZW47CisJICAgIGlmIChidWZfd3JpdGVfYnl0ZXMoJndyaXRlX2luZm8pID09IEZBSUwpCisJICAgIHsKKwkJZW5kID0gMDsJCS8qIHdyaXRlIGVycm9yOiBicmVhayBsb29wICovCisJCWJyZWFrOworCSAgICB9CisJICAgIHdyaXRlX2luZm8uYndfbGVuID0gYnVmc2l6ZTsKKwkgICAgbmNoYXJzICs9IGxlbjsKKwkgICAgcyA9IGJ1ZmZlcjsKKwkgICAgbGVuID0gMDsKKwl9CisjZW5kaWYKKyAgICB9CisgICAgaWYgKGxlbiA+IDAgJiYgZW5kID4gMCkKKyAgICB7CisJd3JpdGVfaW5mby5id19sZW4gPSBsZW47CisJaWYgKGJ1Zl93cml0ZV9ieXRlcygmd3JpdGVfaW5mbykgPT0gRkFJTCkKKwkgICAgZW5kID0gMDsJCSAgICAvKiB3cml0ZSBlcnJvciAqLworCW5jaGFycyArPSBsZW47CisgICAgfQorCisjaWYgZGVmaW5lZChVTklYKSAmJiBkZWZpbmVkKEhBVkVfRlNZTkMpCisgICAgLyogT24gbWFueSBqb3VybmFsbGluZyBmaWxlIHN5c3RlbXMgdGhlcmUgaXMgYSBidWcgdGhhdCBjYXVzZXMgYm90aCB0aGUKKyAgICAgKiBvcmlnaW5hbCBhbmQgdGhlIGJhY2t1cCBmaWxlIHRvIGJlIGxvc3Qgd2hlbiBoYWx0aW5nIHRoZSBzeXN0ZW0gcmlnaHQKKyAgICAgKiBhZnRlciB3cml0aW5nIHRoZSBmaWxlLiAgVGhhdCdzIGJlY2F1c2Ugb25seSB0aGUgbWV0YS1kYXRhIGlzCisgICAgICogam91cm5hbGxlZC4gIFN5bmNpbmcgdGhlIGZpbGUgc2xvd3MgZG93biB0aGUgc3lzdGVtLCBidXQgYXNzdXJlcyBpdCBoYXMKKyAgICAgKiBiZWVuIHdyaXR0ZW4gdG8gZGlzayBhbmQgd2UgZG9uJ3QgbG9zZSBpdC4gKi8KKyAgICBpZiAoZnN5bmMoZmQpICE9IDApCisgICAgeworCWVycm1zZyA9IChjaGFyX3UgKilfKCJFNjY3OiBGc3luYyBmYWlsZWQiKTsKKwllbmQgPSAwOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKGNsb3NlKGZkKSAhPSAwKQorICAgIHsKKwllcnJtc2cgPSAoY2hhcl91ICopXygiRTUxMjogQ2xvc2UgZmFpbGVkIik7CisJZW5kID0gMDsKKyAgICB9CisKKyNpZmRlZiBVTklYCisgICAgaWYgKG1hZGVfd3JpdGFibGUpCisJcGVybSAmPSB+MDIwMDsJCS8qIHJlc2V0ICd3JyBiaXQgZm9yIHNlY3VyaXR5IHJlYXNvbnMgKi8KKyNlbmRpZgorICAgIGlmIChwZXJtID49IDApCQkvKiBzZXQgcGVybS4gb2YgbmV3IGZpbGUgc2FtZSBhcyBvbGQgZmlsZSAqLworCSh2b2lkKW1jaF9zZXRwZXJtKHdmbmFtZSwgcGVybSk7CisjaWZkZWYgUklTQ09TCisgICAgaWYgKCFhcHBlbmQgJiYgIWZpbHRlcmluZykKKwkvKiBTZXQgdGhlIGZpbGV0eXBlIGFmdGVyIHdyaXRpbmcgdGhlIGZpbGUuICovCisJbWNoX3NldF9maWxldHlwZSh3Zm5hbWUsIGJ1Zi0+Yl9wX29mdCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FDTAorICAgIC8qIFByb2JhYmx5IG5lZWQgdG8gc2V0IHRoZSBBQ0wgYmVmb3JlIGNoYW5naW5nIHRoZSB1c2VyIChjYW4ndCBzZXQgdGhlCisgICAgICogQUNMIG9uIGEgZmlsZSB0aGUgdXNlciBkb2Vzbid0IG93bikuICovCisgICAgaWYgKCFiYWNrdXBfY29weSkKKwltY2hfc2V0X2FjbCh3Zm5hbWUsIGFjbCk7CisjZW5kaWYKKworI2lmZGVmIFVOSVgKKyAgICAvKiBXaGVuIGNyZWF0aW5nIGEgbmV3IGZpbGUsIHNldCBpdHMgb3duZXIvZ3JvdXAgdG8gdGhhdCBvZiB0aGUgb3JpZ2luYWwKKyAgICAgKiBmaWxlLiAgR2V0IHRoZSBuZXcgZGV2aWNlIGFuZCBpbm9kZSBudW1iZXIuICovCisgICAgaWYgKGJhY2t1cCAhPSBOVUxMICYmICFiYWNrdXBfY29weSkKKyAgICB7CisJc3RydWN0IHN0YXQJc3Q7CisKKwkvKiBkb24ndCBjaGFuZ2UgdGhlIG93bmVyIHdoZW4gaXQncyBhbHJlYWR5IE9LLCBzb21lIHN5c3RlbXMgcmVtb3ZlCisJICogcGVybWlzc2lvbiBvciBBQ0wgc3R1ZmYgKi8KKwlpZiAobWNoX3N0YXQoKGNoYXIgKil3Zm5hbWUsICZzdCkgPCAwCisJCXx8IHN0LnN0X3VpZCAhPSBzdF9vbGQuc3RfdWlkCisJCXx8IHN0LnN0X2dpZCAhPSBzdF9vbGQuc3RfZ2lkKQorCXsKKwkgICAgY2hvd24oKGNoYXIgKil3Zm5hbWUsIHN0X29sZC5zdF91aWQsIHN0X29sZC5zdF9naWQpOworCSAgICBpZiAocGVybSA+PSAwKQkvKiBzZXQgcGVybWlzc2lvbiBhZ2FpbiwgbWF5IGhhdmUgY2hhbmdlZCAqLworCQkodm9pZCltY2hfc2V0cGVybSh3Zm5hbWUsIHBlcm0pOworCX0KKwlidWZfc2V0aW5vKGJ1Zik7CisgICAgfQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoRkVBVF9NQllURSkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCisgICAgaWYgKHdmbmFtZSAhPSBmbmFtZSkKKyAgICB7CisJLyoKKwkgKiBUaGUgZmlsZSB3YXMgd3JpdHRlbiB0byBhIHRlbXAgZmlsZSwgbm93IGl0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZAorCSAqIHdpdGggJ2NoYXJjb252ZXJ0JyB0byAob3ZlcndyaXRlKSB0aGUgb3V0cHV0IGZpbGUuCisJICovCisJaWYgKGVuZCAhPSAwKQorCXsKKwkgICAgaWYgKGV2YWxfY2hhcmNvbnZlcnQoZW5jX3V0ZjggPyAoY2hhcl91ICopInV0Zi04IiA6IHBfZW5jLCBmZW5jLAorCQkJCQkJICAgICAgIHdmbmFtZSwgZm5hbWUpID09IEZBSUwpCisJICAgIHsKKwkJd3JpdGVfaW5mby5id19jb252X2Vycm9yID0gVFJVRTsKKwkJZW5kID0gMDsKKwkgICAgfQorCX0KKwltY2hfcmVtb3ZlKHdmbmFtZSk7CisJdmltX2ZyZWUod2ZuYW1lKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChlbmQgPT0gMCkKKyAgICB7CisJaWYgKGVycm1zZyA9PSBOVUxMKQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmICh3cml0ZV9pbmZvLmJ3X2NvbnZfZXJyb3IpCisJCWVycm1zZyA9IChjaGFyX3UgKilfKCJFNTEzOiB3cml0ZSBlcnJvciwgY29udmVyc2lvbiBmYWlsZWQiKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCWlmIChnb3RfaW50KQorCQkgICAgZXJybXNnID0gKGNoYXJfdSAqKV8oZV9pbnRlcnIpOworCQllbHNlCisJCSAgICBlcnJtc2cgPSAoY2hhcl91ICopXygiRTUxNDogd3JpdGUgZXJyb3IgKGZpbGUgc3lzdGVtIGZ1bGw/KSIpOworCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBhIGJhY2t1cCBmaWxlLCB0cnkgdG8gcHV0IGl0IGluIHBsYWNlIG9mIHRoZSBuZXcgZmlsZSwKKwkgKiBiZWNhdXNlIHRoZSBuZXcgZmlsZSBpcyBwcm9iYWJseSBjb3JydXB0LiAgVGhpcyBhdm9pZHMgbG9vc2luZyB0aGUKKwkgKiBvcmlnaW5hbCBmaWxlIHdoZW4gdHJ5aW5nIHRvIG1ha2UgYSBiYWNrdXAgd2hlbiB3cml0aW5nIHRoZSBmaWxlIGEKKwkgKiBzZWNvbmQgdGltZS4KKwkgKiBXaGVuICJiYWNrdXBfY29weSIgaXMgc2V0IHdlIG5lZWQgdG8gY29weSB0aGUgYmFja3VwIG92ZXIgdGhlIG5ldworCSAqIGZpbGUuICBPdGhlcndpc2UgcmVuYW1lIHRoZSBiYWNrdXAgZmlsZS4KKwkgKiBJZiB0aGlzIGlzIE9LLCBkb24ndCBnaXZlIHRoZSBleHRyYSB3YXJuaW5nIG1lc3NhZ2UuCisJICovCisJaWYgKGJhY2t1cCAhPSBOVUxMKQorCXsKKwkgICAgaWYgKGJhY2t1cF9jb3B5KQorCSAgICB7CisJCS8qIFRoaXMgbWF5IHRha2UgYSB3aGlsZSwgaWYgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBsZXQgdGhlIHVzZXIKKwkJICoga25vdyB3ZSBnb3QgdGhlIG1lc3NhZ2UuICovCisJCWlmIChnb3RfaW50KQorCQl7CisJCSAgICBNU0coXyhlX2ludGVycikpOworCQkgICAgb3V0X2ZsdXNoKCk7CisJCX0KKwkJaWYgKChmZCA9IG1jaF9vcGVuKChjaGFyICopYmFja3VwLCBPX1JET05MWSB8IE9fRVhUUkEsIDApKSA+PSAwKQorCQl7CisJCSAgICBpZiAoKHdyaXRlX2luZm8uYndfZmQgPSBtY2hfb3BlbigoY2hhciAqKWZuYW1lLAorCQkJICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19FWFRSQSwgMDY2NikpID49IDApCisJCSAgICB7CisJCQkvKiBjb3B5IHRoZSBmaWxlLiAqLworCQkJd3JpdGVfaW5mby5id19idWYgPSBzbWFsbGJ1ZjsKKyNpZmRlZiBIQVNfQldfRkxBR1MKKwkJCXdyaXRlX2luZm8uYndfZmxhZ3MgPSBGSU9fTk9DT05WRVJUOworI2VuZGlmCisJCQl3aGlsZSAoKHdyaXRlX2luZm8uYndfbGVuID0gdmltX3JlYWQoZmQsIHNtYWxsYnVmLAorCQkJCQkJICAgICAgU01CVUZTSVpFKSkgPiAwKQorCQkJICAgIGlmIChidWZfd3JpdGVfYnl0ZXMoJndyaXRlX2luZm8pID09IEZBSUwpCisJCQkJYnJlYWs7CisKKwkJCWlmIChjbG9zZSh3cml0ZV9pbmZvLmJ3X2ZkKSA+PSAwCisJCQkJCQkgICAmJiB3cml0ZV9pbmZvLmJ3X2xlbiA9PSAwKQorCQkJICAgIGVuZCA9IDE7CQkvKiBzdWNjZXNzICovCisJCSAgICB9CisJCSAgICBjbG9zZShmZCk7CS8qIGlnbm9yZSBlcnJvcnMgZm9yIGNsb3NpbmcgcmVhZCBmaWxlICovCisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKHZpbV9yZW5hbWUoYmFja3VwLCBmbmFtZSkgPT0gMCkKKwkJICAgIGVuZCA9IDE7CisJICAgIH0KKwl9CisJZ290byBmYWlsOworICAgIH0KKworICAgIGxudW0gLT0gc3RhcnQ7CSAgICAvKiBjb21wdXRlIG51bWJlciBvZiB3cml0dGVuIGxpbmVzICovCisgICAgLS1ub193YWl0X3JldHVybjsJICAgIC8qIG1heSB3YWl0IGZvciByZXR1cm4gbm93ICovCisKKyNpZiAhKGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpKQorICAgIGZuYW1lID0gc2ZuYW1lOwkgICAgLyogdXNlIHNob3J0bmFtZSBub3csIGZvciB0aGUgbWVzc2FnZXMgKi8KKyNlbmRpZgorICAgIGlmICghZmlsdGVyaW5nKQorICAgIHsKKwltc2dfYWRkX2ZuYW1lKGJ1ZiwgZm5hbWUpOwkvKiBwdXQgZm5hbWUgaW4gSU9idWZmIHdpdGggcXVvdGVzICovCisJYyA9IEZBTFNFOworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAod3JpdGVfaW5mby5id19jb252X2Vycm9yKQorCXsKKwkgICAgU1RSQ0FUKElPYnVmZiwgXygiIENPTlZFUlNJT04gRVJST1IiKSk7CisJICAgIGMgPSBUUlVFOworCX0KKwllbHNlIGlmIChub3Rjb252ZXJ0ZWQpCisJeworCSAgICBTVFJDQVQoSU9idWZmLCBfKCJbTk9UIGNvbnZlcnRlZF0iKSk7CisJICAgIGMgPSBUUlVFOworCX0KKwllbHNlIGlmIChjb252ZXJ0ZWQpCisJeworCSAgICBTVFJDQVQoSU9idWZmLCBfKCJbY29udmVydGVkXSIpKTsKKwkgICAgYyA9IFRSVUU7CisJfQorI2VuZGlmCisJaWYgKGRldmljZSkKKwl7CisJICAgIFNUUkNBVChJT2J1ZmYsIF8oIltEZXZpY2VdIikpOworCSAgICBjID0gVFJVRTsKKwl9CisJZWxzZSBpZiAobmV3ZmlsZSkKKwl7CisJICAgIFNUUkNBVChJT2J1ZmYsIHNob3J0bWVzcyhTSE1fTkVXKSA/IF8oIltOZXddIikgOiBfKCJbTmV3IEZpbGVdIikpOworCSAgICBjID0gVFJVRTsKKwl9CisJaWYgKG5vX2VvbCkKKwl7CisJICAgIG1zZ19hZGRfZW9sKCk7CisJICAgIGMgPSBUUlVFOworCX0KKwkvKiBtYXkgYWRkIFt1bml4L2Rvcy9tYWNdICovCisJaWYgKG1zZ19hZGRfZmlsZWZvcm1hdChmaWxlZm9ybWF0KSkKKwkgICAgYyA9IFRSVUU7CisjaWZkZWYgRkVBVF9DUllQVAorCWlmICh3Yl9mbGFncyAmIEZJT19FTkNSWVBURUQpCisJeworCSAgICBTVFJDQVQoSU9idWZmLCBfKCJbY3J5cHRlZF0iKSk7CisJICAgIGMgPSBUUlVFOworCX0KKyNlbmRpZgorCW1zZ19hZGRfbGluZXMoYywgKGxvbmcpbG51bSwgbmNoYXJzKTsJLyogYWRkIGxpbmUvY2hhciBjb3VudCAqLworCWlmICghc2hvcnRtZXNzKFNITV9XUklURSkpCisJeworCSAgICBpZiAoYXBwZW5kKQorCQlTVFJDQVQoSU9idWZmLCBzaG9ydG1lc3MoU0hNX1dSSSkgPyBfKCIgW2FdIikgOiBfKCIgYXBwZW5kZWQiKSk7CisJICAgIGVsc2UKKwkJU1RSQ0FUKElPYnVmZiwgc2hvcnRtZXNzKFNITV9XUkkpID8gXygiIFt3XSIpIDogXygiIHdyaXR0ZW4iKSk7CisJfQorCisJc2V0X2tlZXBfbXNnKG1zZ190cnVuY19hdHRyKElPYnVmZiwgRkFMU0UsIDApKTsKKwlrZWVwX21zZ19hdHRyID0gMDsKKyAgICB9CisKKyAgICBpZiAocmVzZXRfY2hhbmdlZCAmJiB3aG9sZQorI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgJiYgIXdyaXRlX2luZm8uYndfY29udl9lcnJvcgorI2VuZGlmCisJICAgICkJCS8qIHdoZW4gd3JpdHRlbiBldmVyeXRoaW5nIGNvcnJlY3RseSAqLworICAgIHsKKwl1bmNoYW5nZWQoYnVmLCBUUlVFKTsKKwl1X3VuY2hhbmdlZChidWYpOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgd3JpdHRlbiB0byB0aGUgY3VycmVudCBmaWxlLCB1cGRhdGUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgc3dhcCBmaWxlCisgICAgICogYW5kIHJlc2V0IHRoZSBCRl9XUklURV9NQVNLIGZsYWdzLiBBbHNvIHNldHMgYnVmLT5iX210aW1lLgorICAgICAqLworICAgIGlmIChvdmVyd3JpdGluZykKKyAgICB7CisJbWxfdGltZXN0YW1wKGJ1Zik7CisJYnVmLT5iX2ZsYWdzICY9IH5CRl9XUklURV9NQVNLOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgd2Uga2VwdCBhIGJhY2t1cCB1bnRpbCBub3csIGFuZCB3ZSBhcmUgaW4gcGF0Y2ggbW9kZSwgdGhlbiB3ZSBtYWtlCisgICAgICogdGhlIGJhY2t1cCBmaWxlIG91ciAnb3JpZ2luYWwnIGZpbGUuCisgICAgICovCisgICAgaWYgKCpwX3BtICYmIGRvYmFja3VwKQorICAgIHsKKwljaGFyICpvcmcgPSAoY2hhciAqKWJ1Zl9tb2RuYW1lKAorI2lmZGVmIFNIT1JUX0ZOQU1FCisJCQkJCVRSVUUsCisjZWxzZQorCQkJCQkoYnVmLT5iX3Bfc24gfHwgYnVmLT5iX3Nob3J0bmFtZSksCisjZW5kaWYKKwkJCQkJCQkgIGZuYW1lLCBwX3BtLCBGQUxTRSk7CisKKwlpZiAoYmFja3VwICE9IE5VTEwpCisJeworCSAgICBzdHJ1Y3Qgc3RhdCBzdDsKKworCSAgICAvKgorCSAgICAgKiBJZiB0aGUgb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCB5ZXQKKwkgICAgICogdGhlIGN1cnJlbnQgYmFja3VwIGZpbGUgYmVjb21lcyB0aGUgb3JpZ2luYWwgZmlsZQorCSAgICAgKi8KKwkgICAgaWYgKG9yZyA9PSBOVUxMKQorCQlFTVNHKF8oIkUyMDU6IFBhdGNobW9kZTogY2FuJ3Qgc2F2ZSBvcmlnaW5hbCBmaWxlIikpOworCSAgICBlbHNlIGlmIChtY2hfc3RhdChvcmcsICZzdCkgPCAwKQorCSAgICB7CisJCXZpbV9yZW5hbWUoYmFja3VwLCAoY2hhcl91ICopb3JnKTsKKwkJdmltX2ZyZWUoYmFja3VwKTsJICAgIC8qIGRvbid0IGRlbGV0ZSB0aGUgZmlsZSAqLworCQliYWNrdXAgPSBOVUxMOworI2lmZGVmIFVOSVgKKwkJc2V0X2ZpbGVfdGltZSgoY2hhcl91ICopb3JnLCBzdF9vbGQuc3RfYXRpbWUsIHN0X29sZC5zdF9tdGltZSk7CisjZW5kaWYKKwkgICAgfQorCX0KKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIGJhY2t1cCBmaWxlLCByZW1lbWJlciB0aGF0IGEgKG5ldykgZmlsZSB3YXMKKwkgKiBjcmVhdGVkLgorCSAqLworCWVsc2UKKwl7CisJICAgIGludCBlbXB0eV9mZDsKKworCSAgICBpZiAob3JnID09IE5VTEwKKwkJICAgIHx8IChlbXB0eV9mZCA9IG1jaF9vcGVuKG9yZywgT19DUkVBVCB8IE9fRVhUUkEgfCBPX0VYQ0wsCisJCQkJCQkJCSAgIDA2NjYpKSA8IDApCisJICAgICAgRU1TRyhfKCJFMjA2OiBwYXRjaG1vZGU6IGNhbid0IHRvdWNoIGVtcHR5IG9yaWdpbmFsIGZpbGUiKSk7CisJICAgIGVsc2UKKwkgICAgICBjbG9zZShlbXB0eV9mZCk7CisJfQorCWlmIChvcmcgIT0gTlVMTCkKKwl7CisJICAgIG1jaF9zZXRwZXJtKChjaGFyX3UgKilvcmcsIG1jaF9nZXRwZXJtKGZuYW1lKSAmIDA3NzcpOworCSAgICB2aW1fZnJlZShvcmcpOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlbW92ZSB0aGUgYmFja3VwIHVubGVzcyAnYmFja3VwJyBvcHRpb24gaXMgc2V0CisgICAgICovCisgICAgaWYgKCFwX2JrICYmIGJhY2t1cCAhPSBOVUxMICYmIG1jaF9yZW1vdmUoYmFja3VwKSAhPSAwKQorCUVNU0coXygiRTIwNzogQ2FuJ3QgZGVsZXRlIGJhY2t1cCBmaWxlIikpOworCisjaWZkZWYgRkVBVF9TVU5fV09SS1NIT1AKKyAgICBpZiAodXNpbmdTdW5Xb3JrU2hvcCkKKwl3b3Jrc2hvcF9maWxlX3NhdmVkKChjaGFyICopIGZmbmFtZSk7CisjZW5kaWYKKworICAgIGdvdG8gbm9mYWlsOworCisgICAgLyoKKyAgICAgKiBGaW5pc2ggdXAuICBXZSBnZXQgaGVyZSBlaXRoZXIgYWZ0ZXIgZmFpbHVyZSBvciBzdWNjZXNzLgorICAgICAqLworZmFpbDoKKyAgICAtLW5vX3dhaXRfcmV0dXJuOwkJLyogbWF5IHdhaXQgZm9yIHJldHVybiBub3cgKi8KK25vZmFpbDoKKworICAgIC8qIERvbmUgc2F2aW5nLCB3ZSBhY2NlcHQgY2hhbmdlZCBidWZmZXIgd2FybmluZ3MgYWdhaW4gKi8KKyAgICBidWYtPmJfc2F2aW5nID0gRkFMU0U7CisKKyAgICB2aW1fZnJlZShiYWNrdXApOworICAgIGlmIChidWZmZXIgIT0gc21hbGxidWYpCisJdmltX2ZyZWUoYnVmZmVyKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgdmltX2ZyZWUoZmVuY190b2ZyZWUpOworICAgIHZpbV9mcmVlKHdyaXRlX2luZm8uYndfY29udl9idWYpOworIyBpZmRlZiBVU0VfSUNPTlYKKyAgICBpZiAod3JpdGVfaW5mby5id19pY29udl9mZCAhPSAoaWNvbnZfdCktMSkKKyAgICB7CisJaWNvbnZfY2xvc2Uod3JpdGVfaW5mby5id19pY29udl9mZCk7CisJd3JpdGVfaW5mby5id19pY29udl9mZCA9IChpY29udl90KS0xOworICAgIH0KKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfQUNMCisgICAgbWNoX2ZyZWVfYWNsKGFjbCk7CisjZW5kaWYKKworICAgIGlmIChlcnJtc2cgIT0gTlVMTCkKKyAgICB7CisJaW50IG51bWxlbiA9IGVycm51bSAhPSBOVUxMID8gU1RSTEVOKGVycm51bSkgOiAwOworCisJYXR0ciA9IGhsX2F0dHIoSExGX0UpOwkvKiBzZXQgaGlnaGxpZ2h0IGZvciBlcnJvciBtZXNzYWdlcyAqLworCW1zZ19hZGRfZm5hbWUoYnVmLAorI2lmbmRlZiBVTklYCisJCXNmbmFtZQorI2Vsc2UKKwkJZm5hbWUKKyNlbmRpZgorCQkgICAgICk7CQkvKiBwdXQgZmlsZSBuYW1lIGluIElPYnVmZiB3aXRoIHF1b3RlcyAqLworCWlmIChTVFJMRU4oSU9idWZmKSArIFNUUkxFTihlcnJtc2cpICsgbnVtbGVuID49IElPU0laRSkKKwkgICAgSU9idWZmW0lPU0laRSAtIFNUUkxFTihlcnJtc2cpIC0gbnVtbGVuIC0gMV0gPSBOVUw7CisJLyogSWYgdGhlIGVycm9yIG1lc3NhZ2UgaGFzIHRoZSBmb3JtICJpcyAuLi4iLCBwdXQgdGhlIGVycm9yIG51bWJlciBpbgorCSAqIGZyb250IG9mIHRoZSBmaWxlIG5hbWUuICovCisJaWYgKGVycm51bSAhPSBOVUxMKQorCXsKKwkgICAgbWNoX21lbW1vdmUoSU9idWZmICsgbnVtbGVuLCBJT2J1ZmYsIFNUUkxFTihJT2J1ZmYpICsgMSk7CisJICAgIG1jaF9tZW1tb3ZlKElPYnVmZiwgZXJybnVtLCAoc2l6ZV90KW51bWxlbik7CisJfQorCVNUUkNBVChJT2J1ZmYsIGVycm1zZyk7CisJZW1zZyhJT2J1ZmYpOworCisJcmV0dmFsID0gRkFJTDsKKwlpZiAoZW5kID09IDApCisJeworCSAgICBNU0dfUFVUU19BVFRSKF8oIlxuV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iKSwKKwkJICAgIGF0dHIgfCBNU0dfSElTVCk7CisJICAgIE1TR19QVVRTX0FUVFIoXygiZG9uJ3QgcXVpdCB0aGUgZWRpdG9yIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIpLAorCQkgICAgYXR0ciB8IE1TR19ISVNUKTsKKworCSAgICAvKiBVcGRhdGUgdGhlIHRpbWVzdGFtcCB0byBhdm9pZCBhbiAib3ZlcndyaXRlIGNoYW5nZWQgZmlsZSIKKwkgICAgICogcHJvbXB0IHdoZW4gd3JpdGluZyBhZ2Fpbi4gKi8KKwkgICAgaWYgKG1jaF9zdGF0KChjaGFyICopZm5hbWUsICZzdF9vbGQpID49IDApCisJICAgIHsKKwkJYnVmX3N0b3JlX3RpbWUoYnVmLCAmc3Rfb2xkLCBmbmFtZSk7CisJCWJ1Zi0+Yl9tdGltZV9yZWFkID0gYnVmLT5iX210aW1lOworCSAgICB9CisJfQorICAgIH0KKyAgICBtc2dfc2Nyb2xsID0gbXNnX3NhdmU7CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBpZiAoIXNob3VsZF9hYm9ydChyZXR2YWwpKQorI2Vsc2UKKyAgICBpZiAoIWdvdF9pbnQpCisjZW5kaWYKKyAgICB7CisJYWNvX3NhdmVfVAlhY287CisKKwl3cml0ZV9ub19lb2xfbG51bSA9IDA7CS8qIGluIGNhc2UgaXQgd2FzIHNldCBieSB0aGUgcHJldmlvdXMgcmVhZCAqLworCisJLyoKKwkgKiBBcHBseSBQT1NUIGF1dG9jb21tYW5kcy4KKwkgKiBDYXJlZnVsOiBUaGUgYXV0b2NvbW1hbmRzIG1heSBjYWxsIGJ1Zl93cml0ZSgpIHJlY3Vyc2l2ZWx5IQorCSAqLworCWF1Y21kX3ByZXBidWYoJmFjbywgYnVmKTsKKworCWlmIChhcHBlbmQpCisJICAgIGFwcGx5X2F1dG9jbWRzX2V4YXJnKEVWRU5UX0ZJTEVBUFBFTkRQT1NULCBmbmFtZSwgZm5hbWUsCisJCQkJCQkJICBGQUxTRSwgY3VyYnVmLCBlYXApOworCWVsc2UgaWYgKGZpbHRlcmluZykKKwkgICAgYXBwbHlfYXV0b2NtZHNfZXhhcmcoRVZFTlRfRklMVEVSV1JJVEVQT1NULCBOVUxMLCBmbmFtZSwKKwkJCQkJCQkgIEZBTFNFLCBjdXJidWYsIGVhcCk7CisJZWxzZSBpZiAocmVzZXRfY2hhbmdlZCAmJiB3aG9sZSkKKwkgICAgYXBwbHlfYXV0b2NtZHNfZXhhcmcoRVZFTlRfQlVGV1JJVEVQT1NULCBmbmFtZSwgZm5hbWUsCisJCQkJCQkJICBGQUxTRSwgY3VyYnVmLCBlYXApOworCWVsc2UKKwkgICAgYXBwbHlfYXV0b2NtZHNfZXhhcmcoRVZFTlRfRklMRVdSSVRFUE9TVCwgZm5hbWUsIGZuYW1lLAorCQkJCQkJCSAgRkFMU0UsIGN1cmJ1ZiwgZWFwKTsKKworCS8qIHJlc3RvcmUgY3Vyd2luL2N1cmJ1ZiBhbmQgYSBmZXcgb3RoZXIgdGhpbmdzICovCisJYXVjbWRfcmVzdGJ1ZigmYWNvKTsKKworI2lmZGVmIEZFQVRfRVZBTAorCWlmIChhYm9ydGluZygpKQkgICAgLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCisJICAgIHJldHZhbCA9IEZBTFNFOworI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyAgICBnb3RfaW50IHw9IHByZXZfZ290X2ludDsKKworI2lmZGVmIE1BQ09TX0NMQVNTSUMgLyogVE9ETzogSXMgaXQgbmVlZCBmb3IgTUFDT1NfWD8gKERhbnkpICovCisgICAgLyogVXBkYXRlIG1hY2hpbmUgc3BlY2lmaWMgaW5mb3JtYXRpb24uICovCisgICAgbWNoX3Bvc3RfYnVmZmVyX3dyaXRlKGJ1Zik7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogUHV0IGZpbGUgbmFtZSBpbnRvIElPYnVmZiB3aXRoIHF1b3Rlcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCittc2dfYWRkX2ZuYW1lKGJ1ZiwgZm5hbWUpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBjaGFyX3UJKmZuYW1lOworeworICAgIGlmIChmbmFtZSA9PSBOVUxMKQorCWZuYW1lID0gKGNoYXJfdSAqKSItc3RkaW4tIjsKKyAgICBob21lX3JlcGxhY2UoYnVmLCBmbmFtZSwgSU9idWZmICsgMSwgSU9TSVpFIC0gNCwgVFJVRSk7CisgICAgSU9idWZmWzBdID0gJyInOworICAgIFNUUkNBVChJT2J1ZmYsICJcIiAiKTsKK30KKworLyoKKyAqIEFwcGVuZCBtZXNzYWdlIGZvciB0ZXh0IG1vZGUgdG8gSU9idWZmLgorICogUmV0dXJuIFRSVUUgaWYgc29tZXRoaW5nIGFwcGVuZGVkLgorICovCisgICAgc3RhdGljIGludAorbXNnX2FkZF9maWxlZm9ybWF0KGVvbF90eXBlKQorICAgIGludAkgICAgZW9sX3R5cGU7Cit7CisjaWZuZGVmIFVTRV9DUk5MCisgICAgaWYgKGVvbF90eXBlID09IEVPTF9ET1MpCisgICAgeworCVNUUkNBVChJT2J1ZmYsIHNob3J0bWVzcyhTSE1fVEVYVCkgPyBfKCJbZG9zXSIpIDogXygiW2RvcyBmb3JtYXRdIikpOworCXJldHVybiBUUlVFOworICAgIH0KKyNlbmRpZgorI2lmbmRlZiBVU0VfQ1IKKyAgICBpZiAoZW9sX3R5cGUgPT0gRU9MX01BQykKKyAgICB7CisJU1RSQ0FUKElPYnVmZiwgc2hvcnRtZXNzKFNITV9URVhUKSA/IF8oIlttYWNdIikgOiBfKCJbbWFjIGZvcm1hdF0iKSk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfQ1JOTCkgfHwgZGVmaW5lZChVU0VfQ1IpCisgICAgaWYgKGVvbF90eXBlID09IEVPTF9VTklYKQorICAgIHsKKwlTVFJDQVQoSU9idWZmLCBzaG9ydG1lc3MoU0hNX1RFWFQpID8gXygiW3VuaXhdIikgOiBfKCJbdW5peCBmb3JtYXRdIikpOworCXJldHVybiBUUlVFOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIEFwcGVuZCBsaW5lIGFuZCBjaGFyYWN0ZXIgY291bnQgdG8gSU9idWZmLgorICovCisgICAgc3RhdGljIHZvaWQKK21zZ19hZGRfbGluZXMoaW5zZXJ0X3NwYWNlLCBsbnVtLCBuY2hhcnMpCisgICAgaW50CSAgICBpbnNlcnRfc3BhY2U7CisgICAgbG9uZyAgICBsbnVtOworICAgIGxvbmcgICAgbmNoYXJzOworeworICAgIGNoYXJfdSAgKnA7CisKKyAgICBwID0gSU9idWZmICsgU1RSTEVOKElPYnVmZik7CisKKyAgICBpZiAoaW5zZXJ0X3NwYWNlKQorCSpwKysgPSAnICc7CisgICAgaWYgKHNob3J0bWVzcyhTSE1fTElORVMpKQorCXNwcmludGYoKGNoYXIgKilwLCAiJWxkTCwgJWxkQyIsIGxudW0sIG5jaGFycyk7CisgICAgZWxzZQorICAgIHsKKwlpZiAobG51bSA9PSAxKQorCSAgICBTVFJDUFkocCwgXygiMSBsaW5lLCAiKSk7CisJZWxzZQorCSAgICBzcHJpbnRmKChjaGFyICopcCwgXygiJWxkIGxpbmVzLCAiKSwgbG51bSk7CisJcCArPSBTVFJMRU4ocCk7CisJaWYgKG5jaGFycyA9PSAxKQorCSAgICBTVFJDUFkocCwgXygiMSBjaGFyYWN0ZXIiKSk7CisJZWxzZQorCSAgICBzcHJpbnRmKChjaGFyICopcCwgXygiJWxkIGNoYXJhY3RlcnMiKSwgbmNoYXJzKTsKKyAgICB9Cit9CisKKy8qCisgKiBBcHBlbmQgbWVzc2FnZSBmb3IgbWlzc2luZyBsaW5lIHNlcGFyYXRvciB0byBJT2J1ZmYuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbXNnX2FkZF9lb2woKQoreworICAgIFNUUkNBVChJT2J1ZmYsIHNob3J0bWVzcyhTSE1fTEFTVCkgPyBfKCJbbm9lb2xdIikgOiBfKCJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIikpOworfQorCisvKgorICogQ2hlY2sgbW9kaWZpY2F0aW9uIHRpbWUgb2YgZmlsZSwgYmVmb3JlIHdyaXRpbmcgdG8gaXQuCisgKiBUaGUgc2l6ZSBpc24ndCBjaGVja2VkLCBiZWNhdXNlIHVzaW5nIGEgdG9vbCBsaWtlICJnemlwIiB0YWtlcyBjYXJlIG9mCisgKiB1c2luZyB0aGUgc2FtZSB0aW1lc3RhbXAgYnV0IGNhbid0IHNldCB0aGUgc2l6ZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NoZWNrX210aW1lKGJ1Ziwgc3QpCisgICAgYnVmX1QJCSpidWY7CisgICAgc3RydWN0IHN0YXQJCSpzdDsKK3sKKyAgICBpZiAoYnVmLT5iX210aW1lX3JlYWQgIT0gMAorCSAgICAmJiB0aW1lX2RpZmZlcnMoKGxvbmcpc3QtPnN0X210aW1lLCBidWYtPmJfbXRpbWVfcmVhZCkpCisgICAgeworCW1zZ19zY3JvbGwgPSBUUlVFOwkgICAgLyogZG9uJ3Qgb3ZlcndyaXRlIG1lc3NhZ2VzIGhlcmUgKi8KKwltc2dfc2lsZW50ID0gMDsJCSAgICAvKiBtdXN0IGdpdmUgdGhpcyBwcm9tcHQgKi8KKwkvKiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMgKi8KKwlNU0dfQVRUUihfKCJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiKSwKKwkJCQkJCSAgICAgICBobF9hdHRyKEhMRl9FKSk7CisJaWYgKGFza195ZXNubygoY2hhcl91ICopXygiRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0IiksCisJCQkJCQkJCSBUUlVFKSA9PSAnbicpCisJICAgIHJldHVybiBGQUlMOworCW1zZ19zY3JvbGwgPSBGQUxTRTsJICAgIC8qIGFsd2F5cyBvdmVyd3JpdGUgdGhlIGZpbGUgbWVzc2FnZSBub3cgKi8KKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisgICAgc3RhdGljIGludAordGltZV9kaWZmZXJzKHQxLCB0MikKKyAgICBsb25nCXQxLCB0MjsKK3sKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChNU1dJTikKKyAgICAvKiBPbiBhIEZBVCBmaWxlc3lzdGVtLCBlc3AuIHVuZGVyIExpbnV4LCB0aGVyZSBhcmUgb25seSA1IGJpdHMgdG8gc3RvcmUKKyAgICAgKiB0aGUgc2Vjb25kcy4gIFNpbmNlIHRoZSByb3VuZG9mZiBpcyBkb25lIHdoZW4gZmx1c2hpbmcgdGhlIGlub2RlLCB0aGUKKyAgICAgKiB0aW1lIG1heSBjaGFuZ2UgdW5leHBlY3RlZGx5IGJ5IG9uZSBzZWNvbmQhISEgKi8KKyAgICByZXR1cm4gKHQxIC0gdDIgPiAxIHx8IHQyIC0gdDEgPiAxKTsKKyNlbHNlCisgICAgcmV0dXJuICh0MSAhPSB0Mik7CisjZW5kaWYKK30KKworLyoKKyAqIENhbGwgd3JpdGUoKSB0byB3cml0ZSBhIG51bWJlciBvZiBieXRlcyB0byB0aGUgZmlsZS4KKyAqIEFsc28gaGFuZGxlcyBlbmNyeXB0aW9uIGFuZCAnZW5jb2RpbmcnIGNvbnZlcnNpb24uCisgKgorICogUmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2J1Zl93cml0ZV9ieXRlcyhpcCkKKyAgICBzdHJ1Y3QgYndfaW5mbyAqaXA7Cit7CisgICAgaW50CQl3bGVuOworICAgIGNoYXJfdQkqYnVmID0gaXAtPmJ3X2J1ZjsJLyogZGF0YSB0byB3cml0ZSAqLworICAgIGludAkJbGVuID0gaXAtPmJ3X2xlbjsJLyogbGVuZ3RoIG9mIGRhdGEgKi8KKyNpZmRlZiBIQVNfQldfRkxBR1MKKyAgICBpbnQJCWZsYWdzID0gaXAtPmJ3X2ZsYWdzOwkvKiBleHRyYSBmbGFncyAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyoKKyAgICAgKiBTa2lwIGNvbnZlcnNpb24gd2hlbiB3cml0aW5nIHRoZSBjcnlwdCBtYWdpYyBudW1iZXIgb3IgdGhlIEJPTS4KKyAgICAgKi8KKyAgICBpZiAoIShmbGFncyAmIEZJT19OT0NPTlZFUlQpKQorICAgIHsKKwljaGFyX3UJCSpwOworCXVuc2lnbmVkCWM7CisJaW50CQluOworCisJaWYgKGZsYWdzICYgRklPX1VURjgpCisJeworCSAgICAvKgorCSAgICAgKiBDb252ZXJ0IGxhdGluMSBpbiB0aGUgYnVmZmVyIHRvIFVURi04IGluIHRoZSBmaWxlLgorCSAgICAgKi8KKwkgICAgcCA9IGlwLT5id19jb252X2J1ZjsJLyogdHJhbnNsYXRlIHRvIGJ1ZmZlciAqLworCSAgICBmb3IgKHdsZW4gPSAwOyB3bGVuIDwgbGVuOyArK3dsZW4pCisJCXAgKz0gdXRmX2NoYXIyYnl0ZXMoYnVmW3dsZW5dLCBwKTsKKwkgICAgYnVmID0gaXAtPmJ3X2NvbnZfYnVmOworCSAgICBsZW4gPSAoaW50KShwIC0gaXAtPmJ3X2NvbnZfYnVmKTsKKwl9CisJZWxzZSBpZiAoZmxhZ3MgJiAoRklPX1VDUzQgfCBGSU9fVVRGMTYgfCBGSU9fVUNTMiB8IEZJT19MQVRJTjEpKQorCXsKKwkgICAgLyoKKwkgICAgICogQ29udmVydCBVVEYtOCBieXRlcyBpbiB0aGUgYnVmZmVyIHRvIFVDUy0yLCBVQ1MtNCwgVVRGLTE2IG9yCisJICAgICAqIExhdGluMSBjaGFycyBpbiB0aGUgZmlsZS4KKwkgICAgICovCisJICAgIGlmIChmbGFncyAmIEZJT19MQVRJTjEpCisJCXAgPSBidWY7CS8qIHRyYW5zbGF0ZSBpbi1wbGFjZSAoY2FuIG9ubHkgZ2V0IHNob3J0ZXIpICovCisJICAgIGVsc2UKKwkJcCA9IGlwLT5id19jb252X2J1ZjsJLyogdHJhbnNsYXRlIHRvIGJ1ZmZlciAqLworCSAgICBmb3IgKHdsZW4gPSAwOyB3bGVuIDwgbGVuOyB3bGVuICs9IG4pCisJICAgIHsKKwkJaWYgKHdsZW4gPT0gMCAmJiBpcC0+YndfcmVzdGxlbiAhPSAwKQorCQl7CisJCSAgICBpbnQJCWw7CisKKwkJICAgIC8qIFVzZSByZW1haW5kZXIgb2YgcHJldmlvdXMgY2FsbC4gIEFwcGVuZCB0aGUgc3RhcnQgb2YKKwkJICAgICAqIGJ1ZltdIHRvIGdldCBhIGZ1bGwgc2VxdWVuY2UuICBNaWdodCBzdGlsbCBiZSB0b28KKwkJICAgICAqIHNob3J0ISAqLworCQkgICAgbCA9IENPTlZfUkVTVExFTiAtIGlwLT5id19yZXN0bGVuOworCQkgICAgaWYgKGwgPiBsZW4pCisJCQlsID0gbGVuOworCQkgICAgbWNoX21lbW1vdmUoaXAtPmJ3X3Jlc3QgKyBpcC0+YndfcmVzdGxlbiwgYnVmLCAoc2l6ZV90KWwpOworCQkgICAgbiA9IHV0Zl9wdHIybGVuX2NoZWNrX2xlbihpcC0+YndfcmVzdCwgaXAtPmJ3X3Jlc3RsZW4gKyBsKTsKKwkJICAgIGlmIChuID4gaXAtPmJ3X3Jlc3RsZW4gKyBsZW4pCisJCSAgICB7CisJCQkvKiBXZSBoYXZlIGFuIGluY29tcGxldGUgYnl0ZSBzZXF1ZW5jZSBhdCB0aGUgZW5kIHRvCisJCQkgKiBiZSB3cml0dGVuLiAgV2UgY2FuJ3QgY29udmVydCBpdCB3aXRob3V0IHRoZQorCQkJICogcmVtYWluaW5nIGJ5dGVzLiAgS2VlcCB0aGVtIGZvciB0aGUgbmV4dCBjYWxsLiAqLworCQkJaWYgKGlwLT5id19yZXN0bGVuICsgbGVuID4gQ09OVl9SRVNUTEVOKQorCQkJICAgIHJldHVybiBGQUlMOworCQkJaXAtPmJ3X3Jlc3RsZW4gKz0gbGVuOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBpZiAobiA+IDEpCisJCQljID0gdXRmX3B0cjJjaGFyKGlwLT5id19yZXN0KTsKKwkJICAgIGVsc2UKKwkJCWMgPSBpcC0+YndfcmVzdFswXTsKKwkJICAgIGlmIChuID49IGlwLT5id19yZXN0bGVuKQorCQkgICAgeworCQkJbiAtPSBpcC0+YndfcmVzdGxlbjsKKwkJCWlwLT5id19yZXN0bGVuID0gMDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWlwLT5id19yZXN0bGVuIC09IG47CisJCQltY2hfbWVtbW92ZShpcC0+YndfcmVzdCwgaXAtPmJ3X3Jlc3QgKyBuLAorCQkJCQkJICAgICAgKHNpemVfdClpcC0+YndfcmVzdGxlbik7CisJCQluID0gMDsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIG4gPSB1dGZfcHRyMmxlbl9jaGVja19sZW4oYnVmICsgd2xlbiwgbGVuIC0gd2xlbik7CisJCSAgICBpZiAobiA+IGxlbiAtIHdsZW4pCisJCSAgICB7CisJCQkvKiBXZSBoYXZlIGFuIGluY29tcGxldGUgYnl0ZSBzZXF1ZW5jZSBhdCB0aGUgZW5kIHRvCisJCQkgKiBiZSB3cml0dGVuLiAgV2UgY2FuJ3QgY29udmVydCBpdCB3aXRob3V0IHRoZQorCQkJICogcmVtYWluaW5nIGJ5dGVzLiAgS2VlcCB0aGVtIGZvciB0aGUgbmV4dCBjYWxsLiAqLworCQkJaWYgKGxlbiAtIHdsZW4gPiBDT05WX1JFU1RMRU4pCisJCQkgICAgcmV0dXJuIEZBSUw7CisJCQlpcC0+YndfcmVzdGxlbiA9IGxlbiAtIHdsZW47CisJCQltY2hfbWVtbW92ZShpcC0+YndfcmVzdCwgYnVmICsgd2xlbiwKKwkJCQkJCSAgICAgIChzaXplX3QpaXAtPmJ3X3Jlc3RsZW4pOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBpZiAobiA+IDEpCisJCQljID0gdXRmX3B0cjJjaGFyKGJ1ZiArIHdsZW4pOworCQkgICAgZWxzZQorCQkJYyA9IGJ1Zlt3bGVuXTsKKwkJfQorCisJCWlwLT5id19jb252X2Vycm9yIHw9IHVjczJieXRlcyhjLCAmcCwgZmxhZ3MpOworCSAgICB9CisJICAgIGlmIChmbGFncyAmIEZJT19MQVRJTjEpCisJCWxlbiA9IChpbnQpKHAgLSBidWYpOworCSAgICBlbHNlCisJICAgIHsKKwkJYnVmID0gaXAtPmJ3X2NvbnZfYnVmOworCQlsZW4gPSAoaW50KShwIC0gaXAtPmJ3X2NvbnZfYnVmKTsKKwkgICAgfQorCX0KKworIyBpZmRlZiBXSU4zMjY0CisJZWxzZSBpZiAoZmxhZ3MgJiBGSU9fQ09ERVBBR0UpCisJeworCSAgICAvKgorCSAgICAgKiBDb252ZXJ0IFVURi04IG9yIGNvZGVwYWdlIHRvIFVDUy0yIGFuZCB0aGVuIHRvIE1TLVdpbmRvd3MKKwkgICAgICogY29kZXBhZ2UuCisJICAgICAqLworCSAgICBjaGFyX3UJKmZyb207CisJICAgIHNpemVfdAlmcm9tbGVuOworCSAgICBjaGFyX3UJKnRvOworCSAgICBpbnQJCXU4YzsKKwkgICAgQk9PTAliYWQgPSBGQUxTRTsKKwkgICAgaW50CQluZWVkZWQ7CisKKwkgICAgaWYgKGlwLT5id19yZXN0bGVuID4gMCkKKwkgICAgeworCQkvKiBOZWVkIHRvIGNvbmNhdGVuYXRlIHRoZSByZW1haW5kZXIgb2YgdGhlIHByZXZpb3VzIGNhbGwgYW5kCisJCSAqIHRoZSBieXRlcyBvZiB0aGUgY3VycmVudCBjYWxsLiAgVXNlIHRoZSBlbmQgb2YgdGhlCisJCSAqIGNvbnZlcnNpb24gYnVmZmVyIGZvciB0aGlzLiAqLworCQlmcm9tbGVuID0gbGVuICsgaXAtPmJ3X3Jlc3RsZW47CisJCWZyb20gPSBpcC0+YndfY29udl9idWYgKyBpcC0+YndfY29udl9idWZsZW4gLSBmcm9tbGVuOworCQltY2hfbWVtbW92ZShmcm9tLCBpcC0+YndfcmVzdCwgKHNpemVfdClpcC0+YndfcmVzdGxlbik7CisJCW1jaF9tZW1tb3ZlKGZyb20gKyBpcC0+YndfcmVzdGxlbiwgYnVmLCAoc2l6ZV90KWxlbik7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWZyb20gPSBidWY7CisJCWZyb21sZW4gPSBsZW47CisJICAgIH0KKworCSAgICB0byA9IGlwLT5id19jb252X2J1ZjsKKwkgICAgaWYgKGVuY191dGY4KQorCSAgICB7CisJCS8qIENvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtMiwgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuCisJCSAqIFRoZSBidWZmZXIgaGFzIGJlZW4gYWxsb2NhdGVkIHRvIGJlIGJpZyBlbm91Z2guICovCisJCXdoaWxlIChmcm9tbGVuID4gMCkKKwkJeworCQkgICAgbiA9IHV0Zl9wdHIybGVuX2NoZWNrX2xlbihmcm9tLCBmcm9tbGVuKTsKKwkJICAgIGlmIChuID4gKGludClmcm9tbGVuKQkvKiBpbmNvbXBsZXRlIGJ5dGUgc2VxdWVuY2UgKi8KKwkJCWJyZWFrOworCQkgICAgdThjID0gdXRmX3B0cjJjaGFyKGZyb20pOworCQkgICAgKnRvKysgPSAodThjICYgMHhmZik7CisJCSAgICAqdG8rKyA9ICh1OGMgPj4gOCk7CisJCSAgICBmcm9tbGVuIC09IG47CisJCSAgICBmcm9tICs9IG47CisJCX0KKworCQkvKiBDb3B5IHJlbWFpbmRlciB0byBpcC0+YndfcmVzdFtdIHRvIGJlIHVzZWQgZm9yIHRoZSBuZXh0CisJCSAqIGNhbGwuICovCisJCWlmIChmcm9tbGVuID4gQ09OVl9SRVNUTEVOKQorCQl7CisJCSAgICAvKiB3ZWlyZCBvdmVybG9uZyBzZXF1ZW5jZSAqLworCQkgICAgaXAtPmJ3X2NvbnZfZXJyb3IgPSBUUlVFOworCQkgICAgcmV0dXJuIEZBSUw7CisJCX0KKwkJbWNoX21lbW1vdmUoaXAtPmJ3X3Jlc3QsIGZyb20sIGZyb21sZW4pOworCQlpcC0+YndfcmVzdGxlbiA9IGZyb21sZW47CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qIENvbnZlcnQgZnJvbSBlbmNfY29kZXBhZ2UgdG8gVUNTLTIsIHRvIHRoZSBzdGFydCBvZiB0aGUKKwkJICogYnVmZmVyLiAgVGhlIGJ1ZmZlciBoYXMgYmVlbiBhbGxvY2F0ZWQgdG8gYmUgYmlnIGVub3VnaC4gKi8KKwkJaXAtPmJ3X3Jlc3RsZW4gPSAwOworCQluZWVkZWQgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKGVuY19jb2RlcGFnZSwKKwkJCQkgIE1CX0VSUl9JTlZBTElEX0NIQVJTLCAoTFBDU1RSKWZyb20sIGZyb21sZW4sCisJCQkJCQkJCSAgICAgTlVMTCwgMCk7CisJCWlmIChuZWVkZWQgPT0gMCkKKwkJeworCQkgICAgLyogV2hlbiBjb252ZXJzaW9uIGZhaWxzIHRoZXJlIG1heSBiZSBhIHRyYWlsaW5nIGJ5dGUuICovCisJCSAgICBuZWVkZWQgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKGVuY19jb2RlcGFnZSwKKwkJCSAgICAgIE1CX0VSUl9JTlZBTElEX0NIQVJTLCAoTFBDU1RSKWZyb20sIGZyb21sZW4gLSAxLAorCQkJCQkJCQkgICAgIE5VTEwsIDApOworCQkgICAgaWYgKG5lZWRlZCA9PSAwKQorCQkgICAgeworCQkJLyogQ29udmVyc2lvbiBkb2Vzbid0IHdvcmsuICovCisJCQlpcC0+YndfY29udl9lcnJvciA9IFRSVUU7CisJCQlyZXR1cm4gRkFJTDsKKwkJICAgIH0KKwkJICAgIC8qIFNhdmUgdGhlIHRyYWlsaW5nIGJ5dGUgZm9yIHRoZSBuZXh0IGNhbGwuICovCisJCSAgICBpcC0+YndfcmVzdFswXSA9IGZyb21bZnJvbWxlbiAtIDFdOworCQkgICAgaXAtPmJ3X3Jlc3RsZW4gPSAxOworCQl9CisJCW5lZWRlZCA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoZW5jX2NvZGVwYWdlLCBNQl9FUlJfSU5WQUxJRF9DSEFSUywKKwkJCQkgICAgICAgKExQQ1NUUilmcm9tLCBmcm9tbGVuIC0gaXAtPmJ3X3Jlc3RsZW4sCisJCQkJCQkJICAoTFBXU1RSKXRvLCBuZWVkZWQpOworCQlpZiAobmVlZGVkID09IDApCisJCXsKKwkJICAgIC8qIFNhZmV0eSBjaGVjazogQ29udmVyc2lvbiBkb2Vzbid0IHdvcmsuICovCisJCSAgICBpcC0+YndfY29udl9lcnJvciA9IFRSVUU7CisJCSAgICByZXR1cm4gRkFJTDsKKwkJfQorCQl0byArPSBuZWVkZWQgKiAyOworCSAgICB9CisKKwkgICAgZnJvbWxlbiA9IHRvIC0gaXAtPmJ3X2NvbnZfYnVmOworCSAgICBidWYgPSB0bzsKKyMgIGlmZGVmIENQX1VURjgJLyogVkMgNC4xIGRvZXNuJ3QgZGVmaW5lIENQX1VURjggKi8KKwkgICAgaWYgKEZJT19HRVRfQ1AoZmxhZ3MpID09IENQX1VURjgpCisJICAgIHsKKwkJLyogQ29udmVydCBmcm9tIFVDUy0yIHRvIFVURi04LCB1c2luZyB0aGUgcmVtYWluZGVyIG9mIHRoZQorCQkgKiBjb252ZXJzaW9uIGJ1ZmZlci4gIEZhaWxzIHdoZW4gb3V0IG9mIHNwYWNlLiAqLworCQlmb3IgKGZyb20gPSBpcC0+YndfY29udl9idWY7IGZyb21sZW4gPiAxOyBmcm9tbGVuIC09IDIpCisJCXsKKwkJICAgIHU4YyA9ICpmcm9tKys7CisJCSAgICB1OGMgKz0gKCpmcm9tKysgPDwgOCk7CisJCSAgICB0byArPSB1dGZfY2hhcjJieXRlcyh1OGMsIHRvKTsKKwkJICAgIGlmICh0byArIDYgPj0gaXAtPmJ3X2NvbnZfYnVmICsgaXAtPmJ3X2NvbnZfYnVmbGVuKQorCQkgICAgeworCQkJaXAtPmJ3X2NvbnZfZXJyb3IgPSBUUlVFOworCQkJcmV0dXJuIEZBSUw7CisJCSAgICB9CisJCX0KKwkJbGVuID0gdG8gLSBidWY7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkJLyogQ29udmVydCBmcm9tIFVDUy0yIHRvIHRoZSBjb2RlcGFnZSwgdXNpbmcgdGhlIHJlbWFpbmRlciBvZgorCQkgKiB0aGUgY29udmVyc2lvbiBidWZmZXIuICBJZiB0aGUgY29udmVyc2lvbiB1c2VzIHRoZSBkZWZhdWx0CisJCSAqIGNoYXJhY3RlciAiMCIsIHRoZSBkYXRhIGRvZXNuJ3QgZml0IGluIHRoaXMgZW5jb2RpbmcsIHNvCisJCSAqIGZhaWwuICovCisJCWxlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoRklPX0dFVF9DUChmbGFncyksIDAsCisJCQkoTFBDV1NUUilpcC0+YndfY29udl9idWYsIChpbnQpZnJvbWxlbiAvIHNpemVvZihXQ0hBUiksCisJCQkoTFBTVFIpdG8sIGlwLT5id19jb252X2J1ZmxlbiAtIGZyb21sZW4sIDAsICZiYWQpOworCQlpZiAoYmFkKQorCQl7CisJCSAgICBpcC0+YndfY29udl9lcnJvciA9IFRSVUU7CisJCSAgICByZXR1cm4gRkFJTDsKKwkJfQorCSAgICB9CisJfQorIyBlbmRpZgorCisjIGlmZGVmIE1BQ09TX1gKKwllbHNlIGlmIChmbGFncyAmIEZJT19NQUNST01BTikKKwl7CisJICAgIC8qCisJICAgICAqIENvbnZlcnQgVVRGLTggb3IgbGF0aW4xIHRvIEFwcGxlIE1hY1JvbWFuLgorCSAgICAgKi8KKwkgICAgQ0ZTdHJpbmdSZWYJY2ZzdHI7CisJICAgIENGUmFuZ2UJcjsKKwkgICAgQ0ZJbmRleAlsOworCSAgICBjaGFyX3UJKmZyb207CisJICAgIHNpemVfdAlmcm9tbGVuOworCisJICAgIGlmIChpcC0+YndfcmVzdGxlbiA+IDApCisJICAgIHsKKwkJLyogTmVlZCB0byBjb25jYXRlbmF0ZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBwcmV2aW91cyBjYWxsIGFuZAorCQkgKiB0aGUgYnl0ZXMgb2YgdGhlIGN1cnJlbnQgY2FsbC4gIFVzZSB0aGUgZW5kIG9mIHRoZQorCQkgKiBjb252ZXJzaW9uIGJ1ZmZlciBmb3IgdGhpcy4gKi8KKwkJZnJvbWxlbiA9IGxlbiArIGlwLT5id19yZXN0bGVuOworCQlmcm9tID0gaXAtPmJ3X2NvbnZfYnVmICsgaXAtPmJ3X2NvbnZfYnVmbGVuIC0gZnJvbWxlbjsKKwkJbWNoX21lbW1vdmUoZnJvbSwgaXAtPmJ3X3Jlc3QsIChzaXplX3QpaXAtPmJ3X3Jlc3RsZW4pOworCQltY2hfbWVtbW92ZShmcm9tICsgaXAtPmJ3X3Jlc3RsZW4sIGJ1ZiwgKHNpemVfdClsZW4pOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlmcm9tID0gYnVmOworCQlmcm9tbGVuID0gbGVuOworCSAgICB9CisKKwkgICAgaXAtPmJ3X3Jlc3RsZW4gPSAwOworCSAgICBjZnN0ciA9IENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIGZyb20sIGZyb21sZW4sCisJCSAgICAoZW5jX3V0ZjgpID8KKwkJICAgIGtDRlN0cmluZ0VuY29kaW5nVVRGOCA6IGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xLAorCQkgICAgMCk7CisJICAgIHdoaWxlIChjZnN0ciA9PSBOVUxMICYmIGlwLT5id19yZXN0bGVuIDwgMyAmJiBmcm9tbGVuID4gMSkKKwkgICAgeworCQlpcC0+YndfcmVzdFtpcC0+YndfcmVzdGxlbisrXSA9IGZyb21bLS1mcm9tbGVuXTsKKwkJY2ZzdHIgPSBDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhOVUxMLCBmcm9tLCBmcm9tbGVuLAorCQkgICAgKGVuY191dGY4KSA/CisJCSAgICBrQ0ZTdHJpbmdFbmNvZGluZ1VURjggOiBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwKKwkJICAgIDApOworCSAgICB9CisJICAgIGlmIChjZnN0ciA9PSBOVUxMKQorCSAgICB7CisJCWlwLT5id19jb252X2Vycm9yID0gVFJVRTsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKworCSAgICByLmxvY2F0aW9uID0gMDsKKwkgICAgci5sZW5ndGggPSBDRlN0cmluZ0dldExlbmd0aChjZnN0cik7CisJICAgIGlmIChyLmxlbmd0aCAhPSBDRlN0cmluZ0dldEJ5dGVzKGNmc3RyLCByLAorCQkJa0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbiwKKwkJCTAsIC8qIG5vIGxvc3N5IGNvbnZlcnNpb24gKi8KKwkJCTAsIC8qIG5vdCBleHRlcm5hbCByZXByZXNlbnRhdGlvbiAoc2luY2UgdmltCisJCQkgICAgKiBoYW5kbGVzIHRoaXMgaW50ZXJuYWxseSAqLworCQkJaXAtPmJ3X2NvbnZfYnVmLCBpcC0+YndfY29udl9idWZsZW4sICZsKSkKKwkgICAgeworCQlDRlJlbGVhc2UoY2ZzdHIpOworCQlpcC0+YndfY29udl9lcnJvciA9IFRSVUU7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJICAgIENGUmVsZWFzZShjZnN0cik7CisJICAgIGJ1ZiA9IGlwLT5id19jb252X2J1ZjsKKwkgICAgbGVuID0gbDsKKwl9CisjIGVuZGlmCisKKyMgaWZkZWYgVVNFX0lDT05WCisJaWYgKGlwLT5id19pY29udl9mZCAhPSAoaWNvbnZfdCktMSkKKwl7CisJICAgIGNvbnN0IGNoYXIJKmZyb207CisJICAgIHNpemVfdAlmcm9tbGVuOworCSAgICBjaGFyCSp0bzsKKwkgICAgc2l6ZV90CXRvbGVuOworCisJICAgIC8qIENvbnZlcnQgd2l0aCBpY29udigpLiAqLworCSAgICBpZiAoaXAtPmJ3X3Jlc3RsZW4gPiAwKQorCSAgICB7CisJCS8qIE5lZWQgdG8gY29uY2F0ZW5hdGUgdGhlIHJlbWFpbmRlciBvZiB0aGUgcHJldmlvdXMgY2FsbCBhbmQKKwkJICogdGhlIGJ5dGVzIG9mIHRoZSBjdXJyZW50IGNhbGwuICBVc2UgdGhlIGVuZCBvZiB0aGUKKwkJICogY29udmVyc2lvbiBidWZmZXIgZm9yIHRoaXMuICovCisJCWZyb21sZW4gPSBsZW4gKyBpcC0+YndfcmVzdGxlbjsKKwkJZnJvbSA9IChjaGFyICopaXAtPmJ3X2NvbnZfYnVmICsgaXAtPmJ3X2NvbnZfYnVmbGVuIC0gZnJvbWxlbjsKKwkJbWNoX21lbW1vdmUoKHZvaWQgKilmcm9tLCBpcC0+YndfcmVzdCwgKHNpemVfdClpcC0+YndfcmVzdGxlbik7CisJCW1jaF9tZW1tb3ZlKCh2b2lkICopKGZyb20gKyBpcC0+YndfcmVzdGxlbiksIGJ1ZiwgKHNpemVfdClsZW4pOworCQl0b2xlbiA9IGlwLT5id19jb252X2J1ZmxlbiAtIGZyb21sZW47CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWZyb20gPSAoY29uc3QgY2hhciAqKWJ1ZjsKKwkJZnJvbWxlbiA9IGxlbjsKKwkJdG9sZW4gPSBpcC0+YndfY29udl9idWZsZW47CisJICAgIH0KKwkgICAgdG8gPSAoY2hhciAqKWlwLT5id19jb252X2J1ZjsKKworCSAgICBpZiAoaXAtPmJ3X2ZpcnN0KQorCSAgICB7CisJCXNpemVfdAlzYXZlX2xlbiA9IHRvbGVuOworCisJCS8qIG91dHB1dCB0aGUgaW5pdGlhbCBzaGlmdCBzdGF0ZSBzZXF1ZW5jZSAqLworCQkodm9pZClpY29udihpcC0+YndfaWNvbnZfZmQsIE5VTEwsIE5VTEwsICZ0bywgJnRvbGVuKTsKKworCQkvKiBUaGVyZSBpcyBhIGJ1ZyBpbiBpY29udigpIG9uIExpbnV4ICh3aGljaCBhcHBlYXJzIHRvIGJlCisJCSAqIHdpZGUtc3ByZWFkKSB3aGljaCBzZXRzICJ0byIgdG8gTlVMTCBhbmQgbWVzc2VzIHVwICJ0b2xlbiIuCisJCSAqLworCQlpZiAodG8gPT0gTlVMTCkKKwkJeworCQkgICAgdG8gPSAoY2hhciAqKWlwLT5id19jb252X2J1ZjsKKwkJICAgIHRvbGVuID0gc2F2ZV9sZW47CisJCX0KKwkJaXAtPmJ3X2ZpcnN0ID0gRkFMU0U7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBJZiBpY29udigpIGhhcyBhbiBlcnJvciBvciB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20sIGZhaWwuCisJICAgICAqLworCSAgICBpZiAoKGljb252KGlwLT5id19pY29udl9mZCwgKHZvaWQgKikmZnJvbSwgJmZyb21sZW4sICZ0bywgJnRvbGVuKQorCQkJPT0gKHNpemVfdCktMSAmJiBJQ09OVl9FUlJOTyAhPSBJQ09OVl9FSU5WQUwpCisJCQkJCQkgICAgfHwgZnJvbWxlbiA+IENPTlZfUkVTVExFTikKKwkgICAgeworCQlpcC0+YndfY29udl9lcnJvciA9IFRSVUU7CisJCXJldHVybiBGQUlMOworCSAgICB9CisKKwkgICAgLyogY29weSByZW1haW5kZXIgdG8gaXAtPmJ3X3Jlc3RbXSB0byBiZSB1c2VkIGZvciB0aGUgbmV4dCBjYWxsLiAqLworCSAgICBpZiAoZnJvbWxlbiA+IDApCisJCW1jaF9tZW1tb3ZlKGlwLT5id19yZXN0LCAodm9pZCAqKWZyb20sIGZyb21sZW4pOworCSAgICBpcC0+YndfcmVzdGxlbiA9IChpbnQpZnJvbWxlbjsKKworCSAgICBidWYgPSBpcC0+YndfY29udl9idWY7CisJICAgIGxlbiA9IChpbnQpKChjaGFyX3UgKil0byAtIGlwLT5id19jb252X2J1Zik7CisJfQorIyBlbmRpZgorICAgIH0KKyNlbmRpZiAvKiBGRUFUX01CWVRFICovCisKKyNpZmRlZiBGRUFUX0NSWVBUCisgICAgaWYgKGZsYWdzICYgRklPX0VOQ1JZUFRFRCkJCS8qIGVuY3J5cHQgdGhlIGRhdGEgKi8KKyAgICB7CisJaW50IHp0ZW1wLCB0LCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCXsKKwkgICAgenRlbXAgID0gYnVmW2ldOworCSAgICBidWZbaV0gPSBaRU5DT0RFKHp0ZW1wLCB0KTsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBSZXBlYXQgdGhlIHdyaXRlKCksIGl0IG1heSBiZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4gKi8KKyAgICB3aGlsZSAobGVuKQorICAgIHsKKwl3bGVuID0gdmltX3dyaXRlKGlwLT5id19mZCwgYnVmLCBsZW4pOworCWlmICh3bGVuIDw9IDApCQkgICAgLyogZXJyb3IhICovCisJICAgIHJldHVybiBGQUlMOworCWxlbiAtPSB3bGVuOworCWJ1ZiArPSB3bGVuOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKyNpZmRlZiBGRUFUX01CWVRFCisvKgorICogQ29udmVydCBhIFVuaWNvZGUgY2hhcmFjdGVyIHRvIGJ5dGVzLgorICovCisgICAgc3RhdGljIGludAordWNzMmJ5dGVzKGMsIHBwLCBmbGFncykKKyAgICB1bnNpZ25lZAljOwkJLyogaW46IGNoYXJhY3RlciAqLworICAgIGNoYXJfdQkqKnBwOwkJLyogaW4vb3V0OiBwb2ludGVyIHRvIHJlc3VsdCAqLworICAgIGludAkJZmxhZ3M7CQkvKiBGSU9fIGZsYWdzICovCit7CisgICAgY2hhcl91CSpwID0gKnBwOworICAgIGludAkJZXJyb3IgPSBGQUxTRTsKKyAgICBpbnQJCWNjOworCisKKyAgICBpZiAoZmxhZ3MgJiBGSU9fVUNTNCkKKyAgICB7CisJaWYgKGZsYWdzICYgRklPX0VORElBTl9MKQorCXsKKwkgICAgKnArKyA9IGM7CisJICAgICpwKysgPSAoYyA+PiA4KTsKKwkgICAgKnArKyA9IChjID4+IDE2KTsKKwkgICAgKnArKyA9IChjID4+IDI0KTsKKwl9CisJZWxzZQorCXsKKwkgICAgKnArKyA9IChjID4+IDI0KTsKKwkgICAgKnArKyA9IChjID4+IDE2KTsKKwkgICAgKnArKyA9IChjID4+IDgpOworCSAgICAqcCsrID0gYzsKKwl9CisgICAgfQorICAgIGVsc2UgaWYgKGZsYWdzICYgKEZJT19VQ1MyIHwgRklPX1VURjE2KSkKKyAgICB7CisJaWYgKGMgPj0gMHgxMDAwMCkKKwl7CisJICAgIGlmIChmbGFncyAmIEZJT19VVEYxNikKKwkgICAgeworCQkvKiBNYWtlIHR3byB3b3JkcywgdGVuIGJpdHMgb2YgdGhlIGNoYXJhY3RlciBpbiBlYWNoLiAgRmlyc3QKKwkJICogd29yZCBpcyAweGQ4MDAgLSAweGRiZmYsIHNlY29uZCBvbmUgMHhkYzAwIC0gMHhkZmZmICovCisJCWMgLT0gMHgxMDAwMDsKKwkJaWYgKGMgPj0gMHgxMDAwMDApCisJCSAgICBlcnJvciA9IFRSVUU7CisJCWNjID0gKChjID4+IDEwKSAmIDB4M2ZmKSArIDB4ZDgwMDsKKwkJaWYgKGZsYWdzICYgRklPX0VORElBTl9MKQorCQl7CisJCSAgICAqcCsrID0gY2M7CisJCSAgICAqcCsrID0gKCh1bnNpZ25lZCljYyA+PiA4KTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgICpwKysgPSAoKHVuc2lnbmVkKWNjID4+IDgpOworCQkgICAgKnArKyA9IGNjOworCQl9CisJCWMgPSAoYyAmIDB4M2ZmKSArIDB4ZGMwMDsKKwkgICAgfQorCSAgICBlbHNlCisJCWVycm9yID0gVFJVRTsKKwl9CisJaWYgKGZsYWdzICYgRklPX0VORElBTl9MKQorCXsKKwkgICAgKnArKyA9IGM7CisJICAgICpwKysgPSAoYyA+PiA4KTsKKwl9CisJZWxzZQorCXsKKwkgICAgKnArKyA9IChjID4+IDgpOworCSAgICAqcCsrID0gYzsKKwl9CisgICAgfQorICAgIGVsc2UgICAgLyogTGF0aW4xICovCisgICAgeworCWlmIChjID49IDB4MTAwKQorCXsKKwkgICAgZXJyb3IgPSBUUlVFOworCSAgICAqcCsrID0gMHhCRjsKKwl9CisJZWxzZQorCSAgICAqcCsrID0gYzsKKyAgICB9CisKKyAgICAqcHAgPSBwOworICAgIHJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmICJhIiBhbmQgImIiIGFyZSB0aGUgc2FtZSAnZW5jb2RpbmcnLgorICogSWdub3JlcyBkaWZmZXJlbmNlIGJldHdlZW4gImFuc2kiIGFuZCAibGF0aW4xIiwgInVjcy00IiBhbmQgInVjcy00YmUiLCBldGMuCisgKi8KKyAgICBzdGF0aWMgaW50CitzYW1lX2VuY29kaW5nKGEsIGIpCisgICAgY2hhcl91CSphOworICAgIGNoYXJfdQkqYjsKK3sKKyAgICBpbnQJCWY7CisKKyAgICBpZiAoU1RSQ01QKGEsIGIpID09IDApCisJcmV0dXJuIFRSVUU7CisgICAgZiA9IGdldF9maW9fZmxhZ3MoYSk7CisgICAgcmV0dXJuIChmICE9IDAgJiYgZ2V0X2Zpb19mbGFncyhiKSA9PSBmKTsKK30KKworLyoKKyAqIENoZWNrICJwdHIiIGZvciBhIHVuaWNvZGUgZW5jb2RpbmcgYW5kIHJldHVybiB0aGUgRklPXyBmbGFncyBuZWVkZWQgZm9yIHRoZQorICogaW50ZXJuYWwgY29udmVyc2lvbi4KKyAqIGlmICJwdHIiIGlzIGFuIGVtcHR5IHN0cmluZywgdXNlICdlbmNvZGluZycuCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfZmlvX2ZsYWdzKHB0cikKKyAgICBjaGFyX3UJKnB0cjsKK3sKKyAgICBpbnQJCXByb3A7CisKKyAgICBpZiAoKnB0ciA9PSBOVUwpCisJcHRyID0gcF9lbmM7CisKKyAgICBwcm9wID0gZW5jX2Nhbm9uX3Byb3BzKHB0cik7CisgICAgaWYgKHByb3AgJiBFTkNfVU5JQ09ERSkKKyAgICB7CisJaWYgKHByb3AgJiBFTkNfMkJZVEUpCisJeworCSAgICBpZiAocHJvcCAmIEVOQ19FTkRJQU5fTCkKKwkJcmV0dXJuIEZJT19VQ1MyIHwgRklPX0VORElBTl9MOworCSAgICByZXR1cm4gRklPX1VDUzI7CisJfQorCWlmIChwcm9wICYgRU5DXzRCWVRFKQorCXsKKwkgICAgaWYgKHByb3AgJiBFTkNfRU5ESUFOX0wpCisJCXJldHVybiBGSU9fVUNTNCB8IEZJT19FTkRJQU5fTDsKKwkgICAgcmV0dXJuIEZJT19VQ1M0OworCX0KKwlpZiAocHJvcCAmIEVOQ18yV09SRCkKKwl7CisJICAgIGlmIChwcm9wICYgRU5DX0VORElBTl9MKQorCQlyZXR1cm4gRklPX1VURjE2IHwgRklPX0VORElBTl9MOworCSAgICByZXR1cm4gRklPX1VURjE2OworCX0KKwlyZXR1cm4gRklPX1VURjg7CisgICAgfQorICAgIGlmIChwcm9wICYgRU5DX0xBVElOMSkKKwlyZXR1cm4gRklPX0xBVElOMTsKKyAgICAvKiBtdXN0IGJlIEVOQ19EQkNTLCByZXF1aXJlcyBpY29udigpICovCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBXSU4zMjY0CisvKgorICogQ2hlY2sgInB0ciIgZm9yIGEgTVMtV2luZG93cyBjb2RlcGFnZSBuYW1lIGFuZCByZXR1cm4gdGhlIEZJT18gZmxhZ3MgbmVlZGVkCisgKiBmb3IgdGhlIGNvbnZlcnNpb24gTVMtV2luZG93cyBjYW4gZG8gZm9yIHVzLiAgQWxzbyBhY2NlcHQgInV0Zi04Ii4KKyAqIFVzZWQgZm9yIGNvbnZlcnNpb24gYmV0d2VlbiAnZW5jb2RpbmcnIGFuZCAnZmlsZWVuY29kaW5nJy4KKyAqLworICAgIHN0YXRpYyBpbnQKK2dldF93aW5fZmlvX2ZsYWdzKHB0cikKKyAgICBjaGFyX3UJKnB0cjsKK3sKKyAgICBpbnQJCWNwOworCisgICAgLyogQ2Fubm90IGRvIHRoaXMgd2hlbiAnZW5jb2RpbmcnIGlzIG5vdCB1dGYtOCBhbmQgbm90IGEgY29kZXBhZ2UuICovCisgICAgaWYgKCFlbmNfdXRmOCAmJiBlbmNfY29kZXBhZ2UgPD0gMCkKKwlyZXR1cm4gMDsKKworICAgIGNwID0gZW5jbmFtZTJjb2RlcGFnZShwdHIpOworICAgIGlmIChjcCA9PSAwKQorICAgIHsKKyMgIGlmZGVmIENQX1VURjgJLyogVkMgNC4xIGRvZXNuJ3QgZGVmaW5lIENQX1VURjggKi8KKwlpZiAoU1RSQ01QKHB0ciwgInV0Zi04IikgPT0gMCkKKwkgICAgY3AgPSBDUF9VVEY4OworCWVsc2UKKyMgIGVuZGlmCisJICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gRklPX1BVVF9DUChjcCkgfCBGSU9fQ09ERVBBR0U7Cit9CisjZW5kaWYKKworI2lmZGVmIE1BQ09TX1gKKy8qCisgKiBDaGVjayAicHRyIiBmb3IgYSBDYXJib24gc3VwcG9ydGVkIGVuY29kaW5nIGFuZCByZXR1cm4gdGhlIEZJT18gZmxhZ3MKKyAqIG5lZWRlZCBmb3IgdGhlIGludGVybmFsIGNvbnZlcnNpb24gdG8vZnJvbSB1dGYtOCBvciBsYXRpbjEuCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfbWFjX2Zpb19mbGFncyhwdHIpCisgICAgY2hhcl91CSpwdHI7Cit7CisgICAgaWYgKChlbmNfdXRmOCB8fCBTVFJDTVAocF9lbmMsICJsYXRpbjEiKSA9PSAwKQorCQkJCSAgICAgJiYgKGVuY19jYW5vbl9wcm9wcyhwdHIpICYgRU5DX01BQ1JPTUFOKSkKKwlyZXR1cm4gRklPX01BQ1JPTUFOOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBDaGVjayBmb3IgYSBVbmljb2RlIEJPTSAoQnl0ZSBPcmRlciBNYXJrKSBhdCB0aGUgc3RhcnQgb2YgcFtzaXplXS4KKyAqICJzaXplIiBtdXN0IGJlIGF0IGxlYXN0IDIuCisgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIGFuZCBzZXQgIipsZW5wIiB0byB0aGUgbGVuZ3RoLgorICogUmV0dXJucyBOVUxMIHdoZW4gbm8gQk9NIGZvdW5kLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitjaGVja19mb3JfYm9tKHAsIHNpemUsIGxlbnAsIGZsYWdzKQorICAgIGNoYXJfdQkqcDsKKyAgICBsb25nCXNpemU7CisgICAgaW50CQkqbGVucDsKKyAgICBpbnQJCWZsYWdzOworeworICAgIGNoYXIJKm5hbWUgPSBOVUxMOworICAgIGludAkJbGVuID0gMjsKKworICAgIGlmIChwWzBdID09IDB4ZWYgJiYgcFsxXSA9PSAweGJiICYmIHNpemUgPj0gMyAmJiBwWzJdID09IDB4YmYKKwkgICAgJiYgKGZsYWdzID09IEZJT19BTEwgfHwgZmxhZ3MgPT0gMCkpCisgICAgeworCW5hbWUgPSAidXRmLTgiOwkJLyogRUYgQkIgQkYgKi8KKwlsZW4gPSAzOworICAgIH0KKyAgICBlbHNlIGlmIChwWzBdID09IDB4ZmYgJiYgcFsxXSA9PSAweGZlKQorICAgIHsKKwlpZiAoc2l6ZSA+PSA0ICYmIHBbMl0gPT0gMCAmJiBwWzNdID09IDAKKwkgICAgJiYgKGZsYWdzID09IEZJT19BTEwgfHwgZmxhZ3MgPT0gKEZJT19VQ1M0IHwgRklPX0VORElBTl9MKSkpCisJeworCSAgICBuYW1lID0gInVjcy00bGUiOwkvKiBGRiBGRSAwMCAwMCAqLworCSAgICBsZW4gPSA0OworCX0KKwllbHNlIGlmIChmbGFncyA9PSBGSU9fQUxMIHx8IGZsYWdzID09IChGSU9fVUNTMiB8IEZJT19FTkRJQU5fTCkpCisJICAgIG5hbWUgPSAidWNzLTJsZSI7CS8qIEZGIEZFICovCisJZWxzZSBpZiAoZmxhZ3MgPT0gKEZJT19VVEYxNiB8IEZJT19FTkRJQU5fTCkpCisJICAgIG5hbWUgPSAidXRmLTE2bGUiOwkvKiBGRiBGRSAqLworICAgIH0KKyAgICBlbHNlIGlmIChwWzBdID09IDB4ZmUgJiYgcFsxXSA9PSAweGZmCisJICAgICYmIChmbGFncyA9PSBGSU9fQUxMIHx8IGZsYWdzID09IEZJT19VQ1MyIHx8IGZsYWdzID09IEZJT19VVEYxNikpCisgICAgeworCWlmIChmbGFncyA9PSBGSU9fVVRGMTYpCisJICAgIG5hbWUgPSAidXRmLTE2IjsJLyogRkUgRkYgKi8KKwllbHNlCisJICAgIG5hbWUgPSAidWNzLTIiOwkvKiBGRSBGRiAqLworICAgIH0KKyAgICBlbHNlIGlmIChzaXplID49IDQgJiYgcFswXSA9PSAwICYmIHBbMV0gPT0gMCAmJiBwWzJdID09IDB4ZmUKKwkgICAgJiYgcFszXSA9PSAweGZmICYmIChmbGFncyA9PSBGSU9fQUxMIHx8IGZsYWdzID09IEZJT19VQ1M0KSkKKyAgICB7CisJbmFtZSA9ICJ1Y3MtNCI7CQkvKiAwMCAwMCBGRSBGRiAqLworCWxlbiA9IDQ7CisgICAgfQorCisgICAgKmxlbnAgPSBsZW47CisgICAgcmV0dXJuIChjaGFyX3UgKiluYW1lOworfQorCisvKgorICogR2VuZXJhdGUgYSBCT00gaW4gImJ1Zls0XSIgZm9yIGVuY29kaW5nICJuYW1lIi4KKyAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBCT00gKHplcm8gd2hlbiBubyBCT00pLgorICovCisgICAgc3RhdGljIGludAorbWFrZV9ib20oYnVmLCBuYW1lKQorICAgIGNoYXJfdQkqYnVmOworICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBpbnQJCWZsYWdzOworICAgIGNoYXJfdQkqcDsKKworICAgIGZsYWdzID0gZ2V0X2Zpb19mbGFncyhuYW1lKTsKKworICAgIC8qIENhbid0IHB1dCBhIEJPTSBpbiBhIG5vbi1Vbmljb2RlIGZpbGUuICovCisgICAgaWYgKGZsYWdzID09IEZJT19MQVRJTjEgfHwgZmxhZ3MgPT0gMCkKKwlyZXR1cm4gMDsKKworICAgIGlmIChmbGFncyA9PSBGSU9fVVRGOCkJLyogVVRGLTggKi8KKyAgICB7CisJYnVmWzBdID0gMHhlZjsKKwlidWZbMV0gPSAweGJiOworCWJ1ZlsyXSA9IDB4YmY7CisJcmV0dXJuIDM7CisgICAgfQorICAgIHAgPSBidWY7CisgICAgKHZvaWQpdWNzMmJ5dGVzKDB4ZmVmZiwgJnAsIGZsYWdzKTsKKyAgICByZXR1cm4gKGludCkocCAtIGJ1Zik7Cit9CisjZW5kaWYKKworLyoKKyAqIFRyeSB0byBmaW5kIGEgc2hvcnRuYW1lIGJ5IGNvbXBhcmluZyB0aGUgZnVsbG5hbWUgd2l0aCB0aGUgY3VycmVudAorICogZGlyZWN0b3J5LgorICogUmV0dXJucyBOVUxMIGlmIG5vdCBzaG9ydGVyIG5hbWUgcG9zc2libGUsIHBvaW50ZXIgaW50byAiZnVsbF9wYXRoIgorICogb3RoZXJ3aXNlLgorICovCisgICAgY2hhcl91ICoKK3Nob3J0ZW5fZm5hbWUoZnVsbF9wYXRoLCBkaXJfbmFtZSkKKyAgICBjaGFyX3UJKmZ1bGxfcGF0aDsKKyAgICBjaGFyX3UJKmRpcl9uYW1lOworeworICAgIGludAkJbGVuOworICAgIGNoYXJfdQkqcDsKKworICAgIGlmIChmdWxsX3BhdGggPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyAgICBsZW4gPSAoaW50KVNUUkxFTihkaXJfbmFtZSk7CisgICAgaWYgKGZuYW1lbmNtcChkaXJfbmFtZSwgZnVsbF9wYXRoLCBsZW4pID09IDApCisgICAgeworCXAgPSBmdWxsX3BhdGggKyBsZW47CisjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChNU1dJTikgfHwgZGVmaW5lZChPUzIpCisJLyoKKwkgKiBNU0RPUzogd2hlbiBhIGZpbGUgaXMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LCBkaXJfbmFtZSB3aWxsIGVuZCBpbiBhCisJICogc2xhc2gsIHNpbmNlIEM6IGJ5IGl0c2VsZiBkb2VzIG5vdCBkZWZpbmUgYSBzcGVjaWZpYyBkaXIuIEluIHRoaXMKKwkgKiBjYXNlIHAgbWF5IGFscmVhZHkgYmUgY29ycmVjdC4gPG5lZ3JpPgorCSAqLworCWlmICghKChsZW4gPiAyKSAmJiAoKihwIC0gMikgPT0gJzonKSkpCisjZW5kaWYKKwl7CisJICAgIGlmICh2aW1faXNwYXRoc2VwKCpwKSkKKwkJKytwOworI2lmbmRlZiBWTVMgICAvKiB0aGUgcGF0aCBzZXBhcmF0b3IgaXMgYWx3YXlzIHBhcnQgb2YgdGhlIHBhdGggKi8KKwkgICAgZWxzZQorCQlwID0gTlVMTDsKKyNlbmRpZgorCX0KKyAgICB9CisjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChNU1dJTikgfHwgZGVmaW5lZChPUzIpCisgICAgLyoKKyAgICAgKiBXaGVuIHVzaW5nIGEgZmlsZSBpbiB0aGUgY3VycmVudCBkcml2ZSwgcmVtb3ZlIHRoZSBkcml2ZSBuYW1lOgorICAgICAqICJBOlxkaXJcZmlsZSIgLT4gIlxkaXJcZmlsZSIuICBUaGlzIGhlbHBzIHdoZW4gbW92aW5nIGEgc2Vzc2lvbiBmaWxlIG9uCisgICAgICogYSBmbG9wcHkgZnJvbSAiQTpcZGlyIiB0byAiQjpcZGlyIi4KKyAgICAgKi8KKyAgICBlbHNlIGlmIChsZW4gPiAzCisJICAgICYmIFRPVVBQRVJfTE9DKGZ1bGxfcGF0aFswXSkgPT0gVE9VUFBFUl9MT0MoZGlyX25hbWVbMF0pCisJICAgICYmIGZ1bGxfcGF0aFsxXSA9PSAnOicKKwkgICAgJiYgdmltX2lzcGF0aHNlcChmdWxsX3BhdGhbMl0pKQorCXAgPSBmdWxsX3BhdGggKyAyOworI2VuZGlmCisgICAgZWxzZQorCXAgPSBOVUxMOworICAgIHJldHVybiBwOworfQorCisvKgorICogU2hvcnRlbiBmaWxlbmFtZXMgZm9yIGFsbCBidWZmZXJzLgorICogV2hlbiAiZm9yY2UiIGlzIFRSVUU6IFVzZSBmdWxsIHBhdGggZnJvbSBub3cgb24gZm9yIGZpbGVzIGN1cnJlbnRseSBiZWluZworICogZWRpdGVkLCBib3RoIGZvciBmaWxlIG5hbWUgYW5kIHN3YXAgZmlsZSBuYW1lLiAgVHJ5IHRvIHNob3J0ZW4gdGhlIGZpbGUKKyAqIG5hbWVzIGEgYml0LCBpZiBzYWZlIHRvIGRvIHNvLgorICogV2hlbiAiZm9yY2UiIGlzIEZBTFNFOiBPbmx5IHRyeSB0byBzaG9ydGVuIGFic29sdXRlIGZpbGUgbmFtZXMuCisgKiBGb3IgYnVmZmVycyB0aGF0IGhhdmUgYnVmdHlwZSAibm9maWxlIiBvciAic2NyYXRjaCI6IG5ldmVyIGNoYW5nZSB0aGUgZmlsZQorICogbmFtZS4KKyAqLworICAgIHZvaWQKK3Nob3J0ZW5fZm5hbWVzKGZvcmNlKQorICAgIGludAkJZm9yY2U7Cit7CisgICAgY2hhcl91CWRpcm5hbWVbTUFYUEFUSExdOworICAgIGJ1Zl9UCSpidWY7CisgICAgY2hhcl91CSpwOworCisgICAgbWNoX2Rpcm5hbWUoZGlybmFtZSwgTUFYUEFUSEwpOworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKyAgICB7CisJaWYgKGJ1Zi0+Yl9mbmFtZSAhPSBOVUxMCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCQkmJiAhYnRfbm9maWxlKGJ1ZikKKyNlbmRpZgorCQkmJiAhcGF0aF93aXRoX3VybChidWYtPmJfZm5hbWUpCisJCSYmIChmb3JjZQorCQkgICAgfHwgYnVmLT5iX3NmbmFtZSA9PSBOVUxMCisJCSAgICB8fCBtY2hfaXNGdWxsTmFtZShidWYtPmJfc2ZuYW1lKSkpCisJeworCSAgICB2aW1fZnJlZShidWYtPmJfc2ZuYW1lKTsKKwkgICAgYnVmLT5iX3NmbmFtZSA9IE5VTEw7CisJICAgIHAgPSBzaG9ydGVuX2ZuYW1lKGJ1Zi0+Yl9mZm5hbWUsIGRpcm5hbWUpOworCSAgICBpZiAocCAhPSBOVUxMKQorCSAgICB7CisJCWJ1Zi0+Yl9zZm5hbWUgPSB2aW1fc3Ryc2F2ZShwKTsKKwkJYnVmLT5iX2ZuYW1lID0gYnVmLT5iX3NmbmFtZTsKKwkgICAgfQorCSAgICBpZiAocCA9PSBOVUxMIHx8IGJ1Zi0+Yl9mbmFtZSA9PSBOVUxMKQorCQlidWYtPmJfZm5hbWUgPSBidWYtPmJfZmZuYW1lOworCSAgICBtZl9mdWxsbmFtZShidWYtPmJfbWwubWxfbWZwKTsKKwl9CisgICAgfQorI2lmZGVmIEZFQVRfV0lORE9XUworICAgIHN0YXR1c19yZWRyYXdfYWxsKCk7CisjZW5kaWYKK30KKworI2lmIChkZWZpbmVkKEZFQVRfRE5EKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0dUSykpIFwKKwl8fCBkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSBcCisJfHwgZGVmaW5lZChGRUFUX0dVSV9NQUMpIFwKKwl8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFNob3J0ZW4gYWxsIGZpbGVuYW1lcyBpbiAiZm5hbWVzW2NvdW50XSIgYnkgY3VycmVudCBkaXJlY3RvcnkuCisgKi8KKyAgICB2b2lkCitzaG9ydGVuX2ZpbGVuYW1lcyhmbmFtZXMsIGNvdW50KQorICAgIGNoYXJfdQkqKmZuYW1lczsKKyAgICBpbnQJCWNvdW50OworeworICAgIGludAkJaTsKKyAgICBjaGFyX3UJZGlybmFtZVtNQVhQQVRITF07CisgICAgY2hhcl91CSpwOworCisgICAgaWYgKGZuYW1lcyA9PSBOVUxMIHx8IGNvdW50IDwgMSkKKwlyZXR1cm47CisgICAgbWNoX2Rpcm5hbWUoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICB7CisJaWYgKChwID0gc2hvcnRlbl9mbmFtZShmbmFtZXNbaV0sIGRpcm5hbWUpKSAhPSBOVUxMKQorCXsKKwkgICAgLyogc2hvcnRlbl9mbmFtZSgpIHJldHVybnMgcG9pbnRlciBpbiBnaXZlbiAiZm5hbWVzW2ldIi4gIElmIGZyZWUKKwkgICAgICogImZuYW1lc1tpXSIgZmlyc3QsICJwIiBiZWNvbWVzIGludmFsaWQuICBTbyB3ZSBuZWVkIHRvIGNvcHkKKwkgICAgICogInAiIGZpcnN0IHRoZW4gZnJlZSBmbmFtZXNbaV0uICovCisJICAgIHAgPSB2aW1fc3Ryc2F2ZShwKTsKKwkgICAgdmltX2ZyZWUoZm5hbWVzW2ldKTsKKwkgICAgZm5hbWVzW2ldID0gcDsKKwl9CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBhZGQgZXh0ZW50aW9uIHRvIGZpbGUgbmFtZSAtIGNoYW5nZSBwYXRoL2ZvLm8uaCB0byBwYXRoL2ZvLm8uaC5leHQgb3IKKyAqIGZvX29faC5leHQgZm9yIE1TRE9TIG9yIHdoZW4gc2hvcnRuYW1lIG9wdGlvbiBzZXQuCisgKgorICogQXNzdW1lZCB0aGF0IGZuYW1lIGlzIGEgdmFsaWQgbmFtZSBmb3VuZCBpbiB0aGUgZmlsZXN5c3RlbSB3ZSBhc3N1cmUgdGhhdAorICogdGhlIHJldHVybiB2YWx1ZSBpcyBhIGRpZmZlcmVudCBuYW1lIGFuZCBlbmRzIGluICdleHQnLgorICogImV4dCIgTVVTVCBiZSBhdCBtb3N0IDQgY2hhcmFjdGVycyBsb25nIGlmIGl0IHN0YXJ0cyB3aXRoIGEgZG90LCAzCisgKiBjaGFyYWN0ZXJzIG90aGVyd2lzZS4KKyAqIFNwYWNlIGZvciB0aGUgcmV0dXJuZWQgbmFtZSBpcyBhbGxvY2F0ZWQsIG11c3QgYmUgZnJlZWQgbGF0ZXIuCisgKiBSZXR1cm5zIE5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LgorICovCisgICAgY2hhcl91ICoKK21vZG5hbWUoZm5hbWUsIGV4dCwgcHJlcGVuZF9kb3QpCisgICAgY2hhcl91ICpmbmFtZSwgKmV4dDsKKyAgICBpbnQJICAgIHByZXBlbmRfZG90OwkvKiBtYXkgcHJlcGVuZCBhICcuJyB0byBmaWxlIG5hbWUgKi8KK3sKKyAgICByZXR1cm4gYnVmX21vZG5hbWUoCisjaWZkZWYgU0hPUlRfRk5BTUUKKwkJCVRSVUUsCisjZWxzZQorCQkJKGN1cmJ1Zi0+Yl9wX3NuIHx8IGN1cmJ1Zi0+Yl9zaG9ydG5hbWUpLAorI2VuZGlmCisJCQkJCQkgICAgIGZuYW1lLCBleHQsIHByZXBlbmRfZG90KTsKK30KKworICAgIGNoYXJfdSAqCitidWZfbW9kbmFtZShzaG9ydG5hbWUsIGZuYW1lLCBleHQsIHByZXBlbmRfZG90KQorICAgIGludAkgICAgc2hvcnRuYW1lOwkJLyogdXNlIDguMyBmaWxlIG5hbWUgKi8KKyAgICBjaGFyX3UgICpmbmFtZSwgKmV4dDsKKyAgICBpbnQJICAgIHByZXBlbmRfZG90OwkvKiBtYXkgcHJlcGVuZCBhICcuJyB0byBmaWxlIG5hbWUgKi8KK3sKKyAgICBjaGFyX3UJKnJldHZhbDsKKyAgICBjaGFyX3UJKnM7CisgICAgY2hhcl91CSplOworICAgIGNoYXJfdQkqcHRyOworICAgIGludAkJZm5hbWVsZW4sIGV4dGxlbjsKKworICAgIGV4dGxlbiA9IChpbnQpU1RSTEVOKGV4dCk7CisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGlzIG5vIGZpbGUgbmFtZSB3ZSBtdXN0IGdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKyAgICAgKiAod2UgbmVlZCB0aGUgZnVsbCBwYXRoIGluIGNhc2UgOmNkIGlzIHVzZWQpLgorICAgICAqLworICAgIGlmIChmbmFtZSA9PSBOVUxMIHx8ICpmbmFtZSA9PSBOVUwpCisgICAgeworCXJldHZhbCA9IGFsbG9jKCh1bnNpZ25lZCkoTUFYUEFUSEwgKyBleHRsZW4gKyAzKSk7CisJaWYgKHJldHZhbCA9PSBOVUxMKQorCSAgICByZXR1cm4gTlVMTDsKKwlpZiAobWNoX2Rpcm5hbWUocmV0dmFsLCBNQVhQQVRITCkgPT0gRkFJTCB8fAorCQkJCSAgICAgKGZuYW1lbGVuID0gKGludClTVFJMRU4ocmV0dmFsKSkgPT0gMCkKKwl7CisJICAgIHZpbV9mcmVlKHJldHZhbCk7CisJICAgIHJldHVybiBOVUxMOworCX0KKwlpZiAoIXZpbV9pc3BhdGhzZXAocmV0dmFsW2ZuYW1lbGVuIC0gMV0pKQorCXsKKwkgICAgcmV0dmFsW2ZuYW1lbGVuKytdID0gUEFUSFNFUDsKKwkgICAgcmV0dmFsW2ZuYW1lbGVuXSA9IE5VTDsKKwl9CisjaWZuZGVmIFNIT1JUX0ZOQU1FCisJcHJlcGVuZF9kb3QgPSBGQUxTRTsJICAgIC8qIG5vdGhpbmcgdG8gcHJlcGVuZCBhIGRvdCB0byAqLworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZm5hbWVsZW4gPSAoaW50KVNUUkxFTihmbmFtZSk7CisJcmV0dmFsID0gYWxsb2MoKHVuc2lnbmVkKShmbmFtZWxlbiArIGV4dGxlbiArIDMpKTsKKwlpZiAocmV0dmFsID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCVNUUkNQWShyZXR2YWwsIGZuYW1lKTsKKyNpZmRlZiBWTVMKKwl2bXNfcmVtb3ZlX3ZlcnNpb24ocmV0dmFsKTsgLyogd2UgZG8gbm90IG5lZWQgdmVyc2lvbnMgaGVyZSAqLworI2VuZGlmCisgICAgfQorCisgICAgLyoKKyAgICAgKiBzZWFyY2ggYmFja3dhcmRzIHVudGlsIHdlIGhpdCBhICcvJywgJ1wnIG9yICc6JyByZXBsYWNpbmcgYWxsICcuJworICAgICAqIGJ5ICdfJyBmb3IgTVNET1Mgb3Igd2hlbiBzaG9ydG5hbWUgb3B0aW9uIHNldCBhbmQgZXh0IHN0YXJ0cyB3aXRoIGEgZG90LgorICAgICAqIFRoZW4gdHJ1bmNhdGUgd2hhdCBpcyBhZnRlciB0aGUgJy8nLCAnXCcgb3IgJzonIHRvIDggY2hhcmFjdGVycyBmb3IKKyAgICAgKiBNU0RPUyBhbmQgMjYgY2hhcmFjdGVycyBmb3IgQU1JR0EsIGEgbG90IG1vcmUgZm9yIFVOSVguCisgICAgICovCisgICAgZm9yIChwdHIgPSByZXR2YWwgKyBmbmFtZWxlbjsgcHRyID49IHJldHZhbDsgcHRyLS0pCisgICAgeworI2lmbmRlZiBSSVNDT1MKKwlpZiAoKmV4dCA9PSAnLicKKyNpZmRlZiBVU0VfTE9OR19GTkFNRQorCQkgICAgJiYgKCFVU0VfTE9OR19GTkFNRSB8fCBzaG9ydG5hbWUpCisjZWxzZQorIyBpZm5kZWYgU0hPUlRfRk5BTUUKKwkJICAgICYmIHNob3J0bmFtZQorIyBlbmRpZgorI2VuZGlmCisJCQkJCQkJCSkKKwkgICAgaWYgKCpwdHIgPT0gJy4nKQkvKiByZXBsYWNlICcuJyBieSAnXycgKi8KKwkJKnB0ciA9ICdfJzsKKyNlbmRpZiAvKiBSSVNDT1MgKi8KKwlpZiAodmltX2lzcGF0aHNlcCgqcHRyKSkKKwkgICAgYnJlYWs7CisgICAgfQorICAgIHB0cisrOworCisgICAgLyogdGhlIGZpbGUgbmFtZSBoYXMgYXQgbW9zdCBCQVNFTkFNRUxFTiBjaGFyYWN0ZXJzLiAqLworI2lmbmRlZiBTSE9SVF9GTkFNRQorICAgIGlmIChTVFJMRU4ocHRyKSA+ICh1bnNpZ25lZClCQVNFTkFNRUxFTikKKwlwdHJbQkFTRU5BTUVMRU5dID0gJ1wwJzsKKyNlbmRpZgorCisgICAgcyA9IHB0ciArIFNUUkxFTihwdHIpOworCisgICAgLyoKKyAgICAgKiBGb3IgOC4zIGZpbGUgbmFtZXMgd2UgbWF5IGhhdmUgdG8gcmVkdWNlIHRoZSBsZW5ndGguCisgICAgICovCisjaWZkZWYgVVNFX0xPTkdfRk5BTUUKKyAgICBpZiAoIVVTRV9MT05HX0ZOQU1FIHx8IHNob3J0bmFtZSkKKyNlbHNlCisjIGlmbmRlZiBTSE9SVF9GTkFNRQorICAgIGlmIChzaG9ydG5hbWUpCisjIGVuZGlmCisjZW5kaWYKKyAgICB7CisJLyoKKwkgKiBJZiB0aGVyZSBpcyBubyBmaWxlIG5hbWUsIG9yIHRoZSBmaWxlIG5hbWUgZW5kcyBpbiAnLycsIGFuZCB0aGUKKwkgKiBleHRlbnNpb24gc3RhcnRzIHdpdGggJy4nLCBwdXQgYSAnXycgYmVmb3JlIHRoZSBkb3QsIGJlY2F1c2UganVzdAorCSAqICIuZXh0IiBpcyBpbnZhbGlkLgorCSAqLworCWlmIChmbmFtZSA9PSBOVUxMIHx8ICpmbmFtZSA9PSBOVUwKKwkJCQkgICB8fCB2aW1faXNwYXRoc2VwKGZuYW1lW1NUUkxFTihmbmFtZSkgLSAxXSkpCisJeworI2lmZGVmIFJJU0NPUworCSAgICBpZiAoKmV4dCA9PSAnLycpCisjZWxzZQorCSAgICBpZiAoKmV4dCA9PSAnLicpCisjZW5kaWYKKwkJKnMrKyA9ICdfJzsKKwl9CisJLyoKKwkgKiBJZiB0aGUgZXh0ZW5zaW9uIHN0YXJ0cyB3aXRoICcuJywgdHJ1bmNhdGUgdGhlIGJhc2UgbmFtZSBhdCA4CisJICogY2hhcmFjdGVycworCSAqLworI2lmZGVmIFJJU0NPUworCS8qIFdlIG5vcm1hbGx5IHVzZSAnLycsIGJ1dCBzd2FwIGZpbGVzIGFyZSAnXycgKi8KKwllbHNlIGlmICgqZXh0ID09ICcvJyB8fCAqZXh0ID09ICdfJykKKyNlbHNlCisJZWxzZSBpZiAoKmV4dCA9PSAnLicpCisjZW5kaWYKKwl7CisJICAgIGlmIChzIC0gcHRyID4gKHNpemVfdCk4KQorCSAgICB7CisJCXMgPSBwdHIgKyA4OworCQkqcyA9ICdcMCc7CisJICAgIH0KKwl9CisJLyoKKwkgKiBJZiB0aGUgZXh0ZW5zaW9uIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLicsIGFuZCB0aGUgZmlsZSBuYW1lCisJICogZG9lc24ndCBoYXZlIGFuIGV4dGVuc2lvbiB5ZXQsIGFwcGVuZCBhICcuJworCSAqLworI2lmZGVmIFJJU0NPUworCWVsc2UgaWYgKChlID0gdmltX3N0cmNocihwdHIsICcvJykpID09IE5VTEwpCisJICAgICpzKysgPSAnLyc7CisjZWxzZQorCWVsc2UgaWYgKChlID0gdmltX3N0cmNocihwdHIsICcuJykpID09IE5VTEwpCisJICAgICpzKysgPSAnLic7CisjZW5kaWYKKwkvKgorCSAqIElmIHRoZSBleHRlbnNpb24gZG9lc24ndCBzdGFydCB3aXRoICcuJywgYW5kIHRoZXJlIGFscmVhZHkgaXMgYW4KKwkgKiBleHRlbnNpb24sIGl0IG1heSBuZWVkIHRvIGJlIHRydWN0YXRlZAorCSAqLworCWVsc2UgaWYgKChpbnQpU1RSTEVOKGUpICsgZXh0bGVuID4gNCkKKwkgICAgcyA9IGUgKyA0IC0gZXh0bGVuOworICAgIH0KKyNpZiBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChVU0VfTE9OR19GTkFNRSkgfHwgZGVmaW5lZChXSU4zMjY0KQorICAgIC8qCisgICAgICogSWYgdGhlcmUgaXMgbm8gZmlsZSBuYW1lLCBhbmQgdGhlIGV4dGVuc2lvbiBzdGFydHMgd2l0aCAnLicsIHB1dCBhCisgICAgICogJ18nIGJlZm9yZSB0aGUgZG90LCBiZWNhdXNlIGp1c3QgIi5leHQiIG1heSBiZSBpbnZhbGlkIGlmIGl0J3Mgb24gYQorICAgICAqIEZBVCBwYXJ0aXRpb24sIGFuZCBvbiBIUEZTIGl0IGRvZXNuJ3QgbWF0dGVyLgorICAgICAqLworICAgIGVsc2UgaWYgKChmbmFtZSA9PSBOVUxMIHx8ICpmbmFtZSA9PSBOVUwpICYmICpleHQgPT0gJy4nKQorCSpzKysgPSAnXyc7CisjZW5kaWYKKworICAgIC8qCisgICAgICogQXBwZW5kIHRoZSBleHRlbnRpb24uCisgICAgICogZXh0IGNhbiBzdGFydCB3aXRoICcuJyBhbmQgY2Fubm90IGV4Y2VlZCAzIG1vcmUgY2hhcmFjdGVycy4KKyAgICAgKi8KKyAgICBTVFJDUFkocywgZXh0KTsKKworI2lmbmRlZiBTSE9SVF9GTkFNRQorICAgIC8qCisgICAgICogUHJlcGVuZCB0aGUgZG90LgorICAgICAqLworICAgIGlmIChwcmVwZW5kX2RvdCAmJiAhc2hvcnRuYW1lICYmICooZSA9IGdldHRhaWwocmV0dmFsKSkgIT0KKyNpZmRlZiBSSVNDT1MKKwkgICAgJy8nCisjZWxzZQorCSAgICAnLicKKyNlbmRpZgorI2lmZGVmIFVTRV9MT05HX0ZOQU1FCisJICAgICYmIFVTRV9MT05HX0ZOQU1FCisjZW5kaWYKKwkJCQkpCisgICAgeworCW1jaF9tZW1tb3ZlKGUgKyAxLCBlLCBTVFJMRU4oZSkgKyAxKTsKKyNpZmRlZiBSSVNDT1MKKwkqZSA9ICcvJzsKKyNlbHNlCisJKmUgPSAnLic7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogQ2hlY2sgdGhhdCwgYWZ0ZXIgYXBwZW5kaW5nIHRoZSBleHRlbnNpb24sIHRoZSBmaWxlIG5hbWUgaXMgcmVhbGx5CisgICAgICogZGlmZmVyZW50LgorICAgICAqLworICAgIGlmIChmbmFtZSAhPSBOVUxMICYmIFNUUkNNUChmbmFtZSwgcmV0dmFsKSA9PSAwKQorICAgIHsKKwkvKiB3ZSBzZWFyY2ggZm9yIGEgY2hhcmFjdGVyIHRoYXQgY2FuIGJlIHJlcGxhY2VkIGJ5ICdfJyAqLworCXdoaWxlICgtLXMgPj0gcHRyKQorCXsKKwkgICAgaWYgKCpzICE9ICdfJykKKwkgICAgeworCQkqcyA9ICdfJzsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJaWYgKHMgPCBwdHIpCS8qIGZuYW1lIHdhcyAiX19fX19fX18uPGV4dD4iLCBob3cgdHJpY2t5ISAqLworCSAgICAqcHRyID0gJ3YnOworICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogTGlrZSBmZ2V0cygpLCBidXQgaWYgdGhlIGZpbGUgbGluZSBpcyB0b28gbG9uZywgaXQgaXMgdHJ1bmNhdGVkIGFuZCB0aGUKKyAqIHJlc3Qgb2YgdGhlIGxpbmUgaXMgdGhyb3duIGF3YXkuICBSZXR1cm5zIFRSVUUgZm9yIGVuZC1vZi1maWxlLgorICovCisgICAgaW50Cit2aW1fZmdldHMoYnVmLCBzaXplLCBmcCkKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCXNpemU7CisgICAgRklMRQkqZnA7Cit7CisgICAgY2hhcgkqZW9mOworI2RlZmluZSBGR0VUU19TSVpFIDIwMAorICAgIGNoYXIJdGJ1ZltGR0VUU19TSVpFXTsKKworICAgIGJ1ZltzaXplIC0gMl0gPSBOVUw7CisjaWZkZWYgVVNFX0NSCisgICAgZW9mID0gZmdldHNfY3IoKGNoYXIgKilidWYsIHNpemUsIGZwKTsKKyNlbHNlCisgICAgZW9mID0gZmdldHMoKGNoYXIgKilidWYsIHNpemUsIGZwKTsKKyNlbmRpZgorICAgIGlmIChidWZbc2l6ZSAtIDJdICE9IE5VTCAmJiBidWZbc2l6ZSAtIDJdICE9ICdcbicpCisgICAgeworCWJ1ZltzaXplIC0gMV0gPSBOVUw7CSAgICAvKiBUcnVuY2F0ZSB0aGUgbGluZSAqLworCisJLyogTm93IHRocm93IGF3YXkgdGhlIHJlc3Qgb2YgdGhlIGxpbmU6ICovCisJZG8KKwl7CisJICAgIHRidWZbRkdFVFNfU0laRSAtIDJdID0gTlVMOworI2lmZGVmIFVTRV9DUgorCSAgICBmZ2V0c19jcigoY2hhciAqKXRidWYsIEZHRVRTX1NJWkUsIGZwKTsKKyNlbHNlCisJICAgIGZnZXRzKChjaGFyICopdGJ1ZiwgRkdFVFNfU0laRSwgZnApOworI2VuZGlmCisJfSB3aGlsZSAodGJ1ZltGR0VUU19TSVpFIC0gMl0gIT0gTlVMICYmIHRidWZbRkdFVFNfU0laRSAtIDJdICE9ICdcbicpOworICAgIH0KKyAgICByZXR1cm4gKGVvZiA9PSBOVUxMKTsKK30KKworI2lmIGRlZmluZWQoVVNFX0NSKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIExpa2UgdmltX2ZnZXRzKCksIGJ1dCBhY2NlcHQgYW55IGxpbmUgdGVybWluYXRvcjogQ1IsIENSLUxGIG9yIExGLgorICogUmV0dXJucyBUUlVFIGZvciBlbmQtb2YtZmlsZS4KKyAqIE9ubHkgdXNlZCBmb3IgdGhlIE1hYywgYmVjYXVzZSBpdCdzIG11Y2ggc2xvd2VyIHRoYW4gdmltX2ZnZXRzKCkuCisgKi8KKyAgICBpbnQKK3RhZ19mZ2V0cyhidWYsIHNpemUsIGZwKQorICAgIGNoYXJfdQkqYnVmOworICAgIGludAkJc2l6ZTsKKyAgICBGSUxFCSpmcDsKK3sKKyAgICBpbnQJCWkgPSAwOworICAgIGludAkJYzsKKyAgICBpbnQJCWVvZiA9IEZBTFNFOworCisgICAgZm9yICg7OykKKyAgICB7CisJYyA9IGZnZXRjKGZwKTsKKwlpZiAoYyA9PSBFT0YpCisJeworCSAgICBlb2YgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisJaWYgKGMgPT0gJ1xyJykKKwl7CisJICAgIC8qIEFsd2F5cyBzdG9yZSBhIE5MIGZvciBlbmQtb2YtbGluZS4gKi8KKwkgICAgaWYgKGkgPCBzaXplIC0gMSkKKwkJYnVmW2krK10gPSAnXG4nOworCSAgICBjID0gZmdldGMoZnApOworCSAgICBpZiAoYyAhPSAnXG4nKQkvKiBNYWNpbnRvc2ggZm9ybWF0OiBzaW5nbGUgQ1IuICovCisJCXVuZ2V0YyhjLCBmcCk7CisJICAgIGJyZWFrOworCX0KKwlpZiAoaSA8IHNpemUgLSAxKQorCSAgICBidWZbaSsrXSA9IGM7CisJaWYgKGMgPT0gJ1xuJykKKwkgICAgYnJlYWs7CisgICAgfQorICAgIGJ1ZltpXSA9IE5VTDsKKyAgICByZXR1cm4gZW9mOworfQorI2VuZGlmCisKKy8qCisgKiByZW5hbWUoKSBvbmx5IHdvcmtzIGlmIGJvdGggZmlsZXMgYXJlIG9uIHRoZSBzYW1lIGZpbGUgc3lzdGVtLCB0aGlzCisgKiBmdW5jdGlvbiB3aWxsIChhdHRlbXB0cyB0bz8pIGNvcHkgdGhlIGZpbGUgYWNyb3NzIGlmIHJlbmFtZSBmYWlscyAtLSB3ZWJiCisgKiBSZXR1cm4gLTEgZm9yIGZhaWx1cmUsIDAgZm9yIHN1Y2Nlc3MuCisgKi8KKyAgICBpbnQKK3ZpbV9yZW5hbWUoZnJvbSwgdG8pCisgICAgY2hhcl91CSpmcm9tOworICAgIGNoYXJfdQkqdG87Cit7CisgICAgaW50CQlmZF9pbjsKKyAgICBpbnQJCWZkX291dDsKKyAgICBpbnQJCW47CisgICAgY2hhcgkqZXJybXNnID0gTlVMTDsKKyAgICBjaGFyCSpidWZmZXI7CisjaWZkZWYgQU1JR0EKKyAgICBCUFRSCWZsb2NrOworI2VuZGlmCisgICAgc3RydWN0IHN0YXQJc3Q7CisKKyAgICAvKgorICAgICAqIFdoZW4gdGhlIG5hbWVzIGFyZSBpZGVudGljYWwsIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uCisgICAgICovCisgICAgaWYgKGZuYW1lY21wKGZyb20sIHRvKSA9PSAwKQorCXJldHVybiAwOworCisgICAgLyoKKyAgICAgKiBGYWlsIGlmIHRoZSAiZnJvbSIgZmlsZSBkb2Vzbid0IGV4aXN0LiAgQXZvaWRzIHRoYXQgInRvIiBpcyBkZWxldGVkLgorICAgICAqLworICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWZyb20sICZzdCkgPCAwKQorCXJldHVybiAtMTsKKworICAgIC8qCisgICAgICogRGVsZXRlIHRoZSAidG8iIGZpbGUsIHRoaXMgaXMgcmVxdWlyZWQgb24gc29tZSBzeXN0ZW1zIHRvIG1ha2UgdGhlCisgICAgICogbWNoX3JlbmFtZSgpIHdvcmssIG9uIG90aGVyIHN5c3RlbXMgaXQgbWFrZXMgc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUKKyAgICAgKiB0d28gZmlsZXMgd2hlbiB0aGUgbWNoX3JlbmFtZSgpIGZhaWxzLgorICAgICAqLworCisjaWZkZWYgQU1JR0EKKyAgICAvKgorICAgICAqIFdpdGggTVNET1MtY29tcGF0aWJsZSBmaWxlc3lzdGVtcyAoY3Jvc3Nkb3MsIG1lc3N5ZG9zKSBpdCBpcyBwb3NzaWJsZQorICAgICAqIHRoYXQgdGhlIG5hbWUgb2YgdGhlICJ0byIgZmlsZSBpcyB0aGUgc2FtZSBhcyB0aGUgImZyb20iIGZpbGUsIGV2ZW4KKyAgICAgKiB0aG91Z2ggdGhlIG5hbWVzIGFyZSBkaWZmZXJlbnQuIFRvIGF2b2lkIHRoZSBjaGFuY2Ugb2YgYWNjaWRlbnRseQorICAgICAqIGRlbGV0aW5nIHRoZSAiZnJvbSIgZmlsZSAoaG9ycm9yISkgd2UgbG9jayBpdCBkdXJpbmcgdGhlIHJlbW92ZS4KKyAgICAgKgorICAgICAqIFdoZW4gdXNlZCBmb3IgbWFraW5nIGEgYmFja3VwIGJlZm9yZSB3cml0aW5nIHRoZSBmaWxlOiBUaGlzIHNob3VsZCBub3QKKyAgICAgKiBoYXBwZW4gd2l0aCAiOnciLCBiZWNhdXNlIHN0YXJ0c2NyaXB0KCkgc2hvdWxkIGRldGVjdCB0aGlzIHByb2JsZW0gYW5kCisgICAgICogc2V0IGJ1Zi0+Yl9zaG9ydG5hbWUsIGNhdXNpbmcgbW9kbmFtZSgpIHRvIHJldHVybiBhIGNvcnJlY3QgIi5iYWsiIGZpbGUKKyAgICAgKiBuYW1lLiAgVGhpcyBwcm9ibGVtIGRvZXMgZXhpc3Qgd2l0aCAiOncgZmlsZW5hbWUiLCBidXQgdGhlbiB0aGUKKyAgICAgKiBvcmlnaW5hbCBmaWxlIHdpbGwgYmUgc29tZXdoZXJlIGVsc2Ugc28gdGhlIGJhY2t1cCBpc24ndCByZWFsbHkKKyAgICAgKiBpbXBvcnRhbnQuIElmIGF1dG9zY3JpcHRpbmcgaXMgb2ZmIHRoZSByZW5hbWUgbWF5IGZhaWwuCisgICAgICovCisgICAgZmxvY2sgPSBMb2NrKChVQllURSAqKWZyb20sIChsb25nKUFDQ0VTU19SRUFEKTsKKyNlbmRpZgorICAgIG1jaF9yZW1vdmUodG8pOworI2lmZGVmIEFNSUdBCisgICAgaWYgKGZsb2NrKQorCVVuTG9jayhmbG9jayk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogRmlyc3QgdHJ5IGEgbm9ybWFsIHJlbmFtZSwgcmV0dXJuIGlmIGl0IHdvcmtzLgorICAgICAqLworICAgIGlmIChtY2hfcmVuYW1lKChjaGFyICopZnJvbSwgKGNoYXIgKil0bykgPT0gMCkKKwlyZXR1cm4gMDsKKworICAgIC8qCisgICAgICogUmVuYW1lKCkgZmFpbGVkLCB0cnkgY29weWluZyB0aGUgZmlsZS4KKyAgICAgKi8KKyAgICBmZF9pbiA9IG1jaF9vcGVuKChjaGFyICopZnJvbSwgT19SRE9OTFl8T19FWFRSQSwgMCk7CisgICAgaWYgKGZkX2luID09IC0xKQorCXJldHVybiAtMTsKKyAgICBmZF9vdXQgPSBtY2hfb3BlbigoY2hhciAqKXRvLCBPX0NSRUFUfE9fRVhDTHxPX1dST05MWXxPX0VYVFJBLCAwNjY2KTsKKyAgICBpZiAoZmRfb3V0ID09IC0xKQorICAgIHsKKwljbG9zZShmZF9pbik7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIGJ1ZmZlciA9IChjaGFyICopYWxsb2MoQlVGU0laRSk7CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgIHsKKwljbG9zZShmZF9pbik7CisJY2xvc2UoZmRfb3V0KTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgd2hpbGUgKChuID0gdmltX3JlYWQoZmRfaW4sIGJ1ZmZlciwgQlVGU0laRSkpID4gMCkKKwlpZiAodmltX3dyaXRlKGZkX291dCwgYnVmZmVyLCBuKSAhPSBuKQorCXsKKwkgICAgZXJybXNnID0gXygiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiKTsKKwkgICAgYnJlYWs7CisJfQorCisgICAgdmltX2ZyZWUoYnVmZmVyKTsKKyAgICBjbG9zZShmZF9pbik7CisgICAgaWYgKGNsb3NlKGZkX291dCkgPCAwKQorCWVycm1zZyA9IF8oIkUyMDk6IEVycm9yIGNsb3NpbmcgXCIlc1wiIik7CisgICAgaWYgKG4gPCAwKQorICAgIHsKKwllcnJtc2cgPSBfKCJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIpOworCXRvID0gZnJvbTsKKyAgICB9CisgICAgaWYgKGVycm1zZyAhPSBOVUxMKQorICAgIHsKKwlFTVNHMihlcnJtc2csIHRvKTsKKwlyZXR1cm4gLTE7CisgICAgfQorICAgIG1jaF9yZW1vdmUoZnJvbSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxyZWFkeV93YXJuZWQgPSBGQUxTRTsKKworLyoKKyAqIENoZWNrIGlmIGFueSBub3QgaGlkZGVuIGJ1ZmZlciBoYXMgYmVlbiBjaGFuZ2VkLgorICogUG9zdHBvbmUgdGhlIGNoZWNrIGlmIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHVmZiBidWZmZXIsIGEgZ2xvYmFsCisgKiBjb21tYW5kIGlzIGJlaW5nIGV4ZWN1dGVkLCBhIG1hcHBpbmcgaXMgYmVpbmcgZXhlY3V0ZWQgb3IgYW4gYXV0b2NvbW1hbmQgaXMKKyAqIGJ1c3kuCisgKiBSZXR1cm5zIFRSVUUgaWYgc29tZSBtZXNzYWdlIHdhcyB3cml0dGVuIChzY3JlZW4gc2hvdWxkIGJlIHJlZHJhd24gYW5kCisgKiBjdXJzb3IgcG9zaXRpb25lZCkuCisgKi8KKyAgICBpbnQKK2NoZWNrX3RpbWVzdGFtcHMoZm9jdXMpCisgICAgaW50CQlmb2N1czsJCS8qIGNhbGxlZCBmb3IgR1VJIGZvY3VzIGV2ZW50ICovCit7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWRpZGl0ID0gMDsKKyAgICBpbnQJCW47CisKKyAgICAvKiBEb24ndCBjaGVjayB0aW1lc3RhbXBzIHdoaWxlIHN5c3RlbSgpIG9yIGFub3RoZXIgbG93LWxldmVsIGZ1bmN0aW9uIG1heQorICAgICAqIGNhdXNlIHVzIHRvIGxvc2UgYW5kIGdhaW4gZm9jdXMuICovCisgICAgaWYgKG5vX2NoZWNrX3RpbWVzdGFtcHMgPiAwKQorCXJldHVybiBGQUxTRTsKKworICAgIC8qIEF2b2lkIGRvaW5nIGEgY2hlY2sgdHdpY2UuICBUaGUgT0svUmVsb2FkIGRpYWxvZyBjYW4gY2F1c2UgYSBmb2N1cworICAgICAqIGV2ZW50IGFuZCB3ZSB3b3VsZCBrZWVwIG9uIGNoZWNraW5nIGlmIHRoZSBmaWxlIGlzIHN0ZWFkaWx5IGdyb3dpbmcuCisgICAgICogRG8gY2hlY2sgYWdhaW4gYWZ0ZXIgdHlwaW5nIHNvbWV0aGluZy4gKi8KKyAgICBpZiAoZm9jdXMgJiYgZGlkX2NoZWNrX3RpbWVzdGFtcHMpCisgICAgeworCW5lZWRfY2hlY2tfdGltZXN0YW1wcyA9IFRSVUU7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmICghc3R1ZmZfZW1wdHkoKSB8fCBnbG9iYWxfYnVzeSB8fCAhdHlwZWJ1Zl90eXBlZCgpCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJCQl8fCBhdXRvY21kX2J1c3kKKyNlbmRpZgorCQkJCQkpCisJbmVlZF9jaGVja190aW1lc3RhbXBzID0gVFJVRTsJCS8qIGNoZWNrIGxhdGVyICovCisgICAgZWxzZQorICAgIHsKKwkrK25vX3dhaXRfcmV0dXJuOworCWRpZF9jaGVja190aW1lc3RhbXBzID0gVFJVRTsKKwlhbHJlYWR5X3dhcm5lZCA9IEZBTFNFOworCWZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyApCisJeworCSAgICAvKiBPbmx5IGNoZWNrIGJ1ZmZlcnMgaW4gYSB3aW5kb3cuICovCisJICAgIGlmIChidWYtPmJfbndpbmRvd3MgPiAwKQorCSAgICB7CisJCW4gPSBidWZfY2hlY2tfdGltZXN0YW1wKGJ1ZiwgZm9jdXMpOworCQlpZiAoZGlkaXQgPCBuKQorCQkgICAgZGlkaXQgPSBuOworCQlpZiAobiA+IDAgJiYgIWJ1Zl92YWxpZChidWYpKQorCQl7CisJCSAgICAvKiBBdXRvY29tbWFuZHMgaGF2ZSByZW1vdmVkIHRoZSBidWZmZXIsIHN0YXJ0IGF0IHRoZQorCQkgICAgICogZmlyc3Qgb25lIGFnYWluLiAqLworCQkgICAgYnVmID0gZmlyc3RidWY7CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICAgIGJ1ZiA9IGJ1Zi0+Yl9uZXh0OworCX0KKwktLW5vX3dhaXRfcmV0dXJuOworCW5lZWRfY2hlY2tfdGltZXN0YW1wcyA9IEZBTFNFOworCWlmIChuZWVkX3dhaXRfcmV0dXJuICYmIGRpZGl0ID09IDIpCisJeworCSAgICAvKiBtYWtlIHN1cmUgbXNnIGlzbid0IG92ZXJ3cml0dGVuICovCisJICAgIG1zZ19wdXRzKChjaGFyX3UgKikiXG4iKTsKKwkgICAgb3V0X2ZsdXNoKCk7CisJfQorICAgIH0KKyAgICByZXR1cm4gZGlkaXQ7Cit9CisKKy8qCisgKiBNb3ZlIGFsbCB0aGUgbGluZXMgZnJvbSBidWZmZXIgImZyb21idWYiIHRvIGJ1ZmZlciAidG9idWYiLgorICogUmV0dXJuIE9LIG9yIEZBSUwuICBXaGVuIEZBSUwgInRvYnVmIiBpcyBpbmNvbXBsZXRlIGFuZC9vciAiZnJvbWJ1ZiIgaXMgbm90CisgKiBlbXB0eS4KKyAqLworICAgIHN0YXRpYyBpbnQKK21vdmVfbGluZXMoZnJvbWJ1ZiwgdG9idWYpCisgICAgYnVmX1QJKmZyb21idWY7CisgICAgYnVmX1QJKnRvYnVmOworeworICAgIGJ1Zl9UCSp0YnVmID0gY3VyYnVmOworICAgIGludAkJcmV0dmFsID0gT0s7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBjaGFyX3UJKnA7CisKKyAgICAvKiBDb3B5IHRoZSBsaW5lcyBpbiAiZnJvbWJ1ZiIgdG8gInRvYnVmIi4gKi8KKyAgICBjdXJidWYgPSB0b2J1ZjsKKyAgICBmb3IgKGxudW0gPSAxOyBsbnVtIDw9IGZyb21idWYtPmJfbWwubWxfbGluZV9jb3VudDsgKytsbnVtKQorICAgIHsKKwlwID0gdmltX3N0cnNhdmUobWxfZ2V0X2J1Zihmcm9tYnVmLCBsbnVtLCBGQUxTRSkpOworCWlmIChwID09IE5VTEwgfHwgbWxfYXBwZW5kKGxudW0gLSAxLCBwLCAwLCBGQUxTRSkgPT0gRkFJTCkKKwl7CisJICAgIHZpbV9mcmVlKHApOworCSAgICByZXR2YWwgPSBGQUlMOworCSAgICBicmVhazsKKwl9CisJdmltX2ZyZWUocCk7CisgICAgfQorCisgICAgLyogRGVsZXRlIGFsbCB0aGUgbGluZXMgaW4gImZyb21idWYiLiAqLworICAgIGlmIChyZXR2YWwgIT0gRkFJTCkKKyAgICB7CisJY3VyYnVmID0gZnJvbWJ1ZjsKKwl3aGlsZSAoIWJ1ZmVtcHR5KCkpCisJICAgIGlmIChtbF9kZWxldGUoY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQsIEZBTFNFKSA9PSBGQUlMKQorCSAgICB7CisJCS8qIE9vcHMhICBXZSBjb3VsZCB0cnkgcHV0dGluZyBiYWNrIHRoZSBzYXZlZCBsaW5lcywgYnV0IHRoYXQKKwkJICogbWlnaHQgZmFpbCBhZ2Fpbi4uLiAqLworCQlyZXR2YWwgPSBGQUlMOworCQlicmVhazsKKwkgICAgfQorICAgIH0KKworICAgIGN1cmJ1ZiA9IHRidWY7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIENoZWNrIGlmIGJ1ZmZlciAiYnVmIiBoYXMgYmVlbiBjaGFuZ2VkLgorICogQWxzbyBjaGVjayBpZiB0aGUgZmlsZSBmb3IgYSBuZXcgYnVmZmVyIHVuZXhwZWN0ZWRseSBhcHBlYXJlZC4KKyAqIHJldHVybiAxIGlmIGEgY2hhbmdlZCBidWZmZXIgd2FzIGZvdW5kLgorICogcmV0dXJuIDIgaWYgYSBtZXNzYWdlIGhhcyBiZWVuIGRpc3BsYXllZC4KKyAqIHJldHVybiAwIG90aGVyd2lzZS4KKyAqLworLypBUkdTVVNFRCovCisgICAgaW50CitidWZfY2hlY2tfdGltZXN0YW1wKGJ1ZiwgZm9jdXMpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWZvY3VzOwkJLyogY2FsbGVkIGZvciBHVUkgZm9jdXMgZXZlbnQgKi8KK3sKKyAgICBzdHJ1Y3Qgc3RhdAlzdDsKKyAgICBpbnQJCXN0YXRfcmVzOworICAgIGludAkJcmV0dmFsID0gMDsKKyAgICBjaGFyX3UJKnBhdGg7CisgICAgY2hhcl91CSp0YnVmOworICAgIGNoYXIJKm1lc2cgPSBOVUxMOworICAgIGNoYXIJKm1lc2cyOworICAgIGludAkJaGVscG1lc2cgPSBGQUxTRTsKKyAgICBpbnQJCXJlbG9hZCA9IEZBTFNFOworI2lmIGRlZmluZWQoRkVBVF9DT05fRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykKKyAgICBpbnQJCWNhbl9yZWxvYWQgPSBGQUxTRTsKKyNlbmRpZgorICAgIHNpemVfdAlvcmlnX3NpemUgPSBidWYtPmJfb3JpZ19zaXplOworICAgIGludAkJb3JpZ19tb2RlID0gYnVmLT5iX29yaWdfbW9kZTsKKyNpZmRlZiBGRUFUX0dVSQorICAgIGludAkJc2F2ZV9tb3VzZV9jb3JyZWN0ID0gbmVlZF9tb3VzZV9jb3JyZWN0OworI2VuZGlmCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgc3RhdGljIGludAlidXN5ID0gRkFMU0U7CisjZW5kaWYKKworICAgIC8qIElmIHRoZXJlIGlzIG5vIGZpbGUgbmFtZSwgdGhlIGJ1ZmZlciBpcyBub3QgbG9hZGVkLCAnYnVmdHlwZScgaXMKKyAgICAgKiBzZXQsIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2F2ZSBvciBiZWluZyBjYWxsZWQgcmVjdXJzaXZlbHk6IGlnbm9yZQorICAgICAqIHRoaXMgYnVmZmVyLiAqLworICAgIGlmIChidWYtPmJfZmZuYW1lID09IE5VTEwKKwkgICAgfHwgYnVmLT5iX21sLm1sX21mcCA9PSBOVUxMCisjaWYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCSAgICB8fCAqYnVmLT5iX3BfYnQgIT0gTlVMCisjZW5kaWYKKwkgICAgfHwgYnVmLT5iX3NhdmluZworI2lmZGVmIEZFQVRfQVVUT0NNRAorCSAgICB8fCBidXN5CisjZW5kaWYKKwkgICAgKQorCXJldHVybiAwOworCisgICAgaWYgKCAgICAgICAhKGJ1Zi0+Yl9mbGFncyAmIEJGX05PVEVESVRFRCkKKwkgICAgJiYgYnVmLT5iX210aW1lICE9IDAKKwkgICAgJiYgKChzdGF0X3JlcyA9IG1jaF9zdGF0KChjaGFyICopYnVmLT5iX2ZmbmFtZSwgJnN0KSkgPCAwCisJCXx8IHRpbWVfZGlmZmVycygobG9uZylzdC5zdF9tdGltZSwgYnVmLT5iX210aW1lKQorI2lmZGVmIEhBVkVfU1RfTU9ERQorCQl8fCAoaW50KXN0LnN0X21vZGUgIT0gYnVmLT5iX29yaWdfbW9kZQorI2Vsc2UKKwkJfHwgbWNoX2dldHBlcm0oYnVmLT5iX2ZmbmFtZSkgIT0gYnVmLT5iX29yaWdfbW9kZQorI2VuZGlmCisJCSkpCisgICAgeworCXJldHZhbCA9IDE7CisKKwkvKiBzZXQgYl9tdGltZSB0byBzdG9wIGZ1cnRoZXIgd2FybmluZ3MgKi8KKwlpZiAoc3RhdF9yZXMgPCAwKQorCXsKKwkgICAgYnVmLT5iX210aW1lID0gMDsKKwkgICAgYnVmLT5iX29yaWdfc2l6ZSA9IDA7CisJICAgIGJ1Zi0+Yl9vcmlnX21vZGUgPSAwOworCX0KKwllbHNlCisJICAgIGJ1Zl9zdG9yZV90aW1lKGJ1ZiwgJnN0LCBidWYtPmJfZmZuYW1lKTsKKworCS8qIERvbid0IGRvIGFueXRoaW5nIGZvciBhIGRpcmVjdG9yeS4gIE1pZ2h0IGNvbnRhaW4gdGhlIGZpbGUKKwkgKiBleHBsb3Jlci4gKi8KKwlpZiAobWNoX2lzZGlyKGJ1Zi0+Yl9mbmFtZSkpCisJICAgIDsKKworCS8qCisJICogSWYgJ2F1dG9yZWFkJyBpcyBzZXQsIHRoZSBidWZmZXIgaGFzIG5vIGNoYW5nZXMgYW5kIHRoZSBmaWxlIHN0aWxsCisJICogZXhpc3RzLCByZWxvYWQgdGhlIGJ1ZmZlci4gIFVzZSB0aGUgYnVmZmVyLWxvY2FsIG9wdGlvbiB2YWx1ZSBpZiBpdAorCSAqIHdhcyBzZXQsIHRoZSBnbG9iYWwgb3B0aW9uIHZhbHVlIG90aGVyd2lzZS4KKwkgKi8KKwllbHNlIGlmICgoYnVmLT5iX3BfYXIgPj0gMCA/IGJ1Zi0+Yl9wX2FyIDogcF9hcikKKwkJCQkgICAgICAgJiYgIWJ1ZklzQ2hhbmdlZChidWYpICYmIHN0YXRfcmVzID49IDApCisJICAgIHJlbG9hZCA9IFRSVUU7CisJZWxzZQorCXsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgaW50IG47CisKKwkgICAgLyoKKwkgICAgICogT25seSBnaXZlIHRoZSB3YXJuaW5nIGlmIHRoZXJlIGFyZSBubyBGaWxlQ2hhbmdlZFNoZWxsCisJICAgICAqIGF1dG9jb21tYW5kcy4KKwkgICAgICogQXZvaWQgYmVpbmcgY2FsbGVkIHJlY3Vyc2l2ZWx5IGJ5IHNldHRpbmcgImJ1c3kiLgorCSAgICAgKi8KKwkgICAgYnVzeSA9IFRSVUU7CisJICAgIG4gPSBhcHBseV9hdXRvY21kcyhFVkVOVF9GSUxFQ0hBTkdFRFNIRUxMLAorCQkJCSAgICAgIGJ1Zi0+Yl9mbmFtZSwgYnVmLT5iX2ZuYW1lLCBGQUxTRSwgYnVmKTsKKwkgICAgYnVzeSA9IEZBTFNFOworCSAgICBpZiAobikKKwkgICAgeworCQlpZiAoIWJ1Zl92YWxpZChidWYpKQorCQkgICAgRU1TRyhfKCJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIikpOworCQlyZXR1cm4gMjsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkgICAgeworCQlpZiAoc3RhdF9yZXMgPCAwKQorCQkgICAgbWVzZyA9IF8oIkUyMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIG5vIGxvbmdlciBhdmFpbGFibGUiKTsKKwkJZWxzZQorCQl7CisJCSAgICBoZWxwbWVzZyA9IFRSVUU7CisjaWYgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKQorCQkgICAgY2FuX3JlbG9hZCA9IFRSVUU7CisjZW5kaWYKKwkJICAgIC8qCisJCSAgICAgKiBDaGVjayBpZiB0aGUgZmlsZSBjb250ZW50cyByZWFsbHkgY2hhbmdlZCB0byBhdm9pZAorCQkgICAgICogZ2l2aW5nIGEgd2FybmluZyB3aGVuIG9ubHkgdGhlIHRpbWVzdGFtcCB3YXMgc2V0IChlLmcuLAorCQkgICAgICogY2hlY2tlZCBvdXQgb2YgQ1ZTKS4gIEFsd2F5cyB3YXJuIHdoZW4gdGhlIGJ1ZmZlciB3YXMKKwkJICAgICAqIGNoYW5nZWQuCisJCSAgICAgKi8KKwkJICAgIGlmIChidWZJc0NoYW5nZWQoYnVmKSkKKwkJCW1lc2cgPSBfKCJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyB3ZWxsIik7CisJCSAgICBlbHNlIGlmIChvcmlnX3NpemUgIT0gYnVmLT5iX29yaWdfc2l6ZQorCQkJICAgIHx8IGJ1Zl9jb250ZW50c19jaGFuZ2VkKGJ1ZikpCisJCQltZXNnID0gXygiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiKTsKKwkJICAgIGVsc2UgaWYgKG9yaWdfbW9kZSAhPSBidWYtPmJfb3JpZ19tb2RlKQorCQkJbWVzZyA9IF8oIlcxNjogV2FybmluZzogTW9kZSBvZiBmaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiKTsKKwkJfQorCSAgICB9CisJfQorCisgICAgfQorICAgIGVsc2UgaWYgKChidWYtPmJfZmxhZ3MgJiBCRl9ORVcpICYmICEoYnVmLT5iX2ZsYWdzICYgQkZfTkVXX1cpCisJCQkJCQkmJiB2aW1fZmV4aXN0cyhidWYtPmJfZmZuYW1lKSkKKyAgICB7CisJcmV0dmFsID0gMTsKKwltZXNnID0gXygiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIpOworCWJ1Zi0+Yl9mbGFncyB8PSBCRl9ORVdfVzsKKyNpZiBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpCisJY2FuX3JlbG9hZCA9IFRSVUU7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAobWVzZyAhPSBOVUxMKQorICAgIHsKKwlwYXRoID0gaG9tZV9yZXBsYWNlX3NhdmUoYnVmLCBidWYtPmJfZm5hbWUpOworCWlmIChwYXRoICE9IE5VTEwpCisJeworCSAgICBpZiAoaGVscG1lc2cpCisJCW1lc2cyID0gXygiU2VlIFwiOmhlbHAgVzExXCIgZm9yIG1vcmUgaW5mby4iKTsKKwkgICAgZWxzZQorCQltZXNnMiA9ICIiOworCSAgICB0YnVmID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4ocGF0aCkgKyBTVFJMRU4obWVzZykKKwkJCQkJCQkrIFNUUkxFTihtZXNnMikgKyAyKSk7CisJICAgIHNwcmludGYoKGNoYXIgKil0YnVmLCBtZXNnLCBwYXRoKTsKKyNpZiBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpCisJICAgIGlmIChjYW5fcmVsb2FkKQorCSAgICB7CisJCWlmICgqbWVzZzIgIT0gTlVMKQorCQl7CisJCSAgICBTVFJDQVQodGJ1ZiwgIlxuIik7CisJCSAgICBTVFJDQVQodGJ1ZiwgbWVzZzIpOworCQl9CisJCWlmIChkb19kaWFsb2coVklNX1dBUk5JTkcsIChjaGFyX3UgKilfKCJXYXJuaW5nIiksIHRidWYsCisJCQkJKGNoYXJfdSAqKV8oIiZPS1xuJkxvYWQgRmlsZSIpLCAxLCBOVUxMKSA9PSAyKQorCQkgICAgcmVsb2FkID0gVFJVRTsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkgICAgaWYgKFN0YXRlID4gTk9STUFMX0JVU1kgfHwgKFN0YXRlICYgQ01ETElORSkgfHwgYWxyZWFkeV93YXJuZWQpCisJICAgIHsKKwkJaWYgKCptZXNnMiAhPSBOVUwpCisJCXsKKwkJICAgIFNUUkNBVCh0YnVmLCAiOyAiKTsKKwkJICAgIFNUUkNBVCh0YnVmLCBtZXNnMik7CisJCX0KKwkJRU1TRyh0YnVmKTsKKwkJcmV0dmFsID0gMjsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKyMgaWZkZWYgVklNQlVERFkKKwkJVmltQnVkZHlUZXh0KHRidWYgKyA5LCAyKTsKKyMgZWxzZQorIyAgaWZkZWYgRkVBVF9BVVRPQ01ECisJCWlmICghYXV0b2NtZF9idXN5KQorIyAgZW5kaWYKKwkJeworCQkgICAgbXNnX3N0YXJ0KCk7CisJCSAgICBtc2dfcHV0c19hdHRyKHRidWYsIGhsX2F0dHIoSExGX0UpICsgTVNHX0hJU1QpOworCQkgICAgaWYgKCptZXNnMiAhPSBOVUwpCisJCQltc2dfcHV0c19hdHRyKChjaGFyX3UgKiltZXNnMiwKKwkJCQkJCSAgIGhsX2F0dHIoSExGX1cpICsgTVNHX0hJU1QpOworCQkgICAgbXNnX2Nscl9lb3MoKTsKKwkJICAgICh2b2lkKW1zZ19lbmQoKTsKKwkJICAgIGlmIChlbXNnX3NpbGVudCA9PSAwKQorCQkgICAgeworCQkJb3V0X2ZsdXNoKCk7CisjICBpZmRlZiBGRUFUX0dVSQorCQkJaWYgKCFmb2N1cykKKyMgIGVuZGlmCisJCQkgICAgLyogZ2l2ZSB0aGUgdXNlciBzb21lIHRpbWUgdG8gdGhpbmsgYWJvdXQgaXQgKi8KKwkJCSAgICB1aV9kZWxheSgxMDAwTCwgVFJVRSk7CisKKwkJCS8qIGRvbid0IHJlZHJhdyBhbmQgZXJhc2UgdGhlIG1lc3NhZ2UgKi8KKwkJCXJlZHJhd19jbWRsaW5lID0gRkFMU0U7CisJCSAgICB9CisJCX0KKwkJYWxyZWFkeV93YXJuZWQgPSBUUlVFOworIyBlbmRpZgorCSAgICB9CisKKwkgICAgdmltX2ZyZWUocGF0aCk7CisJICAgIHZpbV9mcmVlKHRidWYpOworCX0KKyAgICB9CisKKyAgICBpZiAocmVsb2FkKQorICAgIHsKKwlleGFyZ19UCQllYTsKKwlwb3NfVAkJb2xkX2N1cnNvcjsKKwlsaW5lbnJfVAlvbGRfdG9wbGluZTsKKwlpbnQJCW9sZF9ybyA9IGJ1Zi0+Yl9wX3JvOworCWJ1Zl9UCQkqc2F2ZWJ1ZjsKKwlpbnQJCXNhdmVkID0gT0s7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJYWNvX3NhdmVfVAlhY287CisKKwkvKiBzZXQgY3Vyd2luL2N1cmJ1ZiBmb3IgImJ1ZiIgYW5kIHNhdmUgc29tZSB0aGluZ3MgKi8KKwlhdWNtZF9wcmVwYnVmKCZhY28sIGJ1Zik7CisjZWxzZQorCWJ1Zl9UCSpzYXZlX2N1cmJ1ZiA9IGN1cmJ1ZjsKKworCWN1cmJ1ZiA9IGJ1ZjsKKwljdXJ3aW4tPndfYnVmZmVyID0gYnVmOworI2VuZGlmCisKKwkvKiBXZSBvbmx5IHdhbnQgdG8gcmVhZCB0aGUgdGV4dCBmcm9tIHRoZSBmaWxlLCBub3QgcmVzZXQgdGhlIHN5bnRheAorCSAqIGhpZ2hsaWdodGluZywgY2xlYXIgbWFya3MsIGRpZmYgc3RhdHVzLCBldGMuICBGb3JjZSB0aGUgZmlsZWZvcm1hdAorCSAqIGFuZCBlbmNvZGluZyB0byBiZSB0aGUgc2FtZS4gKi8KKwlpZiAocHJlcF9leGFyZygmZWEsIGJ1ZikgPT0gT0spCisJeworCSAgICBvbGRfY3Vyc29yID0gY3Vyd2luLT53X2N1cnNvcjsKKwkgICAgb2xkX3RvcGxpbmUgPSBjdXJ3aW4tPndfdG9wbGluZTsKKworCSAgICAvKgorCSAgICAgKiBUbyBiZWhhdmUgbGlrZSB3aGVuIGEgbmV3IGZpbGUgaXMgZWRpdGVkIChtYXR0ZXJzIGZvcgorCSAgICAgKiBCdWZSZWFkUG9zdCBhdXRvY29tbWFuZHMpIHdlIGZpcnN0IG5lZWQgdG8gZGVsZXRlIHRoZSBjdXJyZW50CisJICAgICAqIGJ1ZmZlciBjb250ZW50cy4gIEJ1dCBpZiByZWFkaW5nIHRoZSBmaWxlIGZhaWxzIHdlIHNob3VsZCBrZWVwCisJICAgICAqIHRoZSBvbGQgY29udGVudHMuICBDYW4ndCB1c2UgbWVtb3J5IG9ubHksIHRoZSBmaWxlIG1pZ2h0IGJlCisJICAgICAqIHRvbyBiaWcuICBVc2UgYSBoaWRkZW4gYnVmZmVyIHRvIG1vdmUgdGhlIGJ1ZmZlciBjb250ZW50cyB0by4KKwkgICAgICovCisJICAgIGlmIChidWZlbXB0eSgpKQorCQlzYXZlYnVmID0gTlVMTDsKKwkgICAgZWxzZQorCSAgICB7CisJCS8qIEFsbG9jYXRlIGEgYnVmZmVyIHdpdGhvdXQgcHV0dGluZyBpdCBpbiB0aGUgYnVmZmVyIGxpc3QuICovCisJCXNhdmVidWYgPSBidWZsaXN0X25ldyhOVUxMLCBOVUxMLCAobGluZW5yX1QpMSwgQkxOX0RVTU1ZKTsKKwkJaWYgKHNhdmVidWYgIT0gTlVMTCkKKwkJeworCQkgICAgLyogT3BlbiB0aGUgbWVtbGluZS4gKi8KKwkJICAgIGN1cmJ1ZiA9IHNhdmVidWY7CisJCSAgICBjdXJ3aW4tPndfYnVmZmVyID0gc2F2ZWJ1ZjsKKwkJICAgIHNhdmVkID0gbWxfb3BlbigpOworCQkgICAgY3VyYnVmID0gYnVmOworCQkgICAgY3Vyd2luLT53X2J1ZmZlciA9IGJ1ZjsKKwkJfQorCQlpZiAoc2F2ZWJ1ZiA9PSBOVUxMIHx8IHNhdmVkID09IEZBSUwKKwkJCQkJICB8fCBtb3ZlX2xpbmVzKGJ1Ziwgc2F2ZWJ1ZikgPT0gRkFJTCkKKwkJeworCQkgICAgRU1TRzIoXygiRTQ2MjogQ291bGQgbm90IHByZXBhcmUgZm9yIHJlbG9hZGluZyBcIiVzXCIiKSwKKwkJCQkJCQkJYnVmLT5iX2ZuYW1lKTsKKwkJICAgIHNhdmVkID0gRkFJTDsKKwkJfQorCSAgICB9CisKKwkgICAgaWYgKHNhdmVkID09IE9LKQorCSAgICB7CisJCWN1cmJ1Zi0+Yl9mbGFncyB8PSBCRl9DSEVDS19STzsJLyogY2hlY2sgZm9yIFJPIGFnYWluICovCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJCWtlZXBfZmlsZXR5cGUgPSBUUlVFOwkJLyogZG9uJ3QgZGV0ZWN0ICdmaWxldHlwZScgKi8KKyNlbmRpZgorCQlpZiAocmVhZGZpbGUoYnVmLT5iX2ZmbmFtZSwgYnVmLT5iX2ZuYW1lLCAobGluZW5yX1QpMCwKKwkJCSAgICAobGluZW5yX1QpMCwKKwkJCSAgICAobGluZW5yX1QpTUFYTE5VTSwgJmVhLCBSRUFEX05FVykgPT0gRkFJTCkKKwkJeworI2lmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwkJICAgIGlmICghYWJvcnRpbmcoKSkKKyNlbmRpZgorCQkJRU1TRzIoXygiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiKSwgYnVmLT5iX2ZuYW1lKTsKKwkJICAgIGlmIChzYXZlYnVmICE9IE5VTEwpCisJCSAgICB7CisJCQkvKiBQdXQgdGhlIHRleHQgYmFjayBmcm9tIHRoZSBzYXZlIGJ1ZmZlci4gIEZpcnN0CisJCQkgKiBkZWxldGUgYW55IGxpbmVzIHRoYXQgcmVhZGZpbGUoKSBhZGRlZC4gKi8KKwkJCXdoaWxlICghYnVmZW1wdHkoKSkKKwkJCSAgICBpZiAobWxfZGVsZXRlKGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LCBGQUxTRSkKKwkJCQkJCQkJICAgICAgPT0gRkFJTCkKKwkJCQlicmVhazsKKwkJCSh2b2lkKW1vdmVfbGluZXMoc2F2ZWJ1ZiwgYnVmKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIC8qIE1hcmsgdGhlIGJ1ZmZlciBhcyB1bm1vZGlmaWVkIGFuZCBmcmVlIHVuZG8gaW5mby4gKi8KKwkJICAgIHVuY2hhbmdlZChidWYsIFRSVUUpOworCQkgICAgdV9ibG9ja2ZyZWUoYnVmKTsKKwkJICAgIHVfY2xlYXJhbGwoYnVmKTsKKwkJfQorCSAgICB9CisJICAgIHZpbV9mcmVlKGVhLmNtZCk7CisKKwkgICAgaWYgKHNhdmVidWYgIT0gTlVMTCkKKwkJd2lwZV9idWZmZXIoc2F2ZWJ1ZiwgRkFMU0UpOworCisjaWZkZWYgRkVBVF9ESUZGCisJICAgIC8qIEludmFsaWRhdGUgZGlmZiBpbmZvIGlmIG5lY2Vzc2FyeS4gKi8KKwkgICAgZGlmZl9pbnZhbGlkYXRlKCk7CisjZW5kaWYKKworCSAgICAvKiBSZXN0b3JlIHRoZSB0b3BsaW5lIGFuZCBjdXJzb3IgcG9zaXRpb24gYW5kIGNoZWNrIGl0IChsaW5lcyBtYXkKKwkgICAgICogaGF2ZSBiZWVuIHJlbW92ZWQpLiAqLworCSAgICBpZiAob2xkX3RvcGxpbmUgPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkJY3Vyd2luLT53X3RvcGxpbmUgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwkgICAgZWxzZQorCQljdXJ3aW4tPndfdG9wbGluZSA9IG9sZF90b3BsaW5lOworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gb2xkX2N1cnNvcjsKKwkgICAgY2hlY2tfY3Vyc29yKCk7CisJICAgIHVwZGF0ZV90b3BsaW5lKCk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJICAgIGtlZXBfZmlsZXR5cGUgPSBGQUxTRTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworCSAgICB7CisJCXdpbl9UICp3cDsKKworCQkvKiBVcGRhdGUgZm9sZHMgdW5sZXNzIHRoZXkgYXJlIGRlZmluZWQgbWFudWFsbHkuICovCisJCUZPUl9BTExfV0lORE9XUyh3cCkKKwkJICAgIGlmICh3cC0+d19idWZmZXIgPT0gY3Vyd2luLT53X2J1ZmZlcgorCQkJICAgICYmICFmb2xkbWV0aG9kSXNNYW51YWwod3ApKQorCQkJZm9sZFVwZGF0ZUFsbCh3cCk7CisJICAgIH0KKyNlbmRpZgorCSAgICAvKiBJZiB0aGUgbW9kZSBkaWRuJ3QgY2hhbmdlIGFuZCAncmVhZG9ubHknIHdhcyBzZXQsIGtlZXAgdGhlIG9sZAorCSAgICAgKiB2YWx1ZTsgdGhlIHVzZXIgcHJvYmFibHkgdXNlZCB0aGUgIjp2aWV3IiBjb21tYW5kLiAgQnV0IGRvbid0CisJICAgICAqIHJlc2V0IGl0LCBtaWdodCBoYXZlIGhhZCBhIHJlYWQgZXJyb3IuICovCisJICAgIGlmIChvcmlnX21vZGUgPT0gY3VyYnVmLT5iX29yaWdfbW9kZSkKKwkJY3VyYnVmLT5iX3Bfcm8gfD0gb2xkX3JvOworCX0KKworI2lmZGVmIEZFQVRfQVVUT0NNRAorCS8qIHJlc3RvcmUgY3Vyd2luL2N1cmJ1ZiBhbmQgYSBmZXcgb3RoZXIgdGhpbmdzICovCisJYXVjbWRfcmVzdGJ1ZigmYWNvKTsKKwkvKiBDYXJlZnVsOiBhdXRvY29tbWFuZHMgbWF5IGhhdmUgbWFkZSAiYnVmIiBpbnZhbGlkISAqLworI2Vsc2UKKwljdXJ3aW4tPndfYnVmZmVyID0gc2F2ZV9jdXJidWY7CisJY3VyYnVmID0gc2F2ZV9jdXJidWY7CisjZW5kaWYKKyAgICB9CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIC8qIHJlc3RvcmUgdGhpcyBpbiBjYXNlIGFuIGF1dG9jb21tYW5kIGhhcyBzZXQgaXQ7IGl0IHdvdWxkIGJyZWFrCisgICAgICogJ21vdXNlZm9jdXMnICovCisgICAgbmVlZF9tb3VzZV9jb3JyZWN0ID0gc2F2ZV9tb3VzZV9jb3JyZWN0OworI2VuZGlmCisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitidWZfc3RvcmVfdGltZShidWYsIHN0LCBmbmFtZSkKKyAgICBidWZfVAkqYnVmOworICAgIHN0cnVjdCBzdGF0CSpzdDsKKyAgICBjaGFyX3UJKmZuYW1lOworeworICAgIGJ1Zi0+Yl9tdGltZSA9IChsb25nKXN0LT5zdF9tdGltZTsKKyAgICBidWYtPmJfb3JpZ19zaXplID0gKHNpemVfdClzdC0+c3Rfc2l6ZTsKKyNpZmRlZiBIQVZFX1NUX01PREUKKyAgICBidWYtPmJfb3JpZ19tb2RlID0gKGludClzdC0+c3RfbW9kZTsKKyNlbHNlCisgICAgYnVmLT5iX29yaWdfbW9kZSA9IG1jaF9nZXRwZXJtKGZuYW1lKTsKKyNlbmRpZgorfQorCisvKgorICogQWRqdXN0IHRoZSBsaW5lIHdpdGggbWlzc2luZyBlb2wsIHVzZWQgZm9yIHRoZSBuZXh0IHdyaXRlLgorICogVXNlZCBmb3IgZG9fZmlsdGVyKCksIHdoZW4gdGhlIGlucHV0IGxpbmVzIGZvciB0aGUgZmlsdGVyIGFyZSBkZWxldGVkLgorICovCisgICAgdm9pZAord3JpdGVfbG51bV9hZGp1c3Qob2Zmc2V0KQorICAgIGxpbmVucl9UCW9mZnNldDsKK3sKKyAgICBpZiAod3JpdGVfbm9fZW9sX2xudW0pCQkvKiBvbmx5IGlmIHRoZXJlIGlzIGEgbWlzc2luZyBlb2wgKi8KKwl3cml0ZV9ub19lb2xfbG51bSArPSBvZmZzZXQ7Cit9CisKKyNpZiBkZWZpbmVkKFRFTVBESVJOQU1FUykgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBsb25nCXRlbXBfY291bnQgPSAwOwkJLyogVGVtcCBmaWxlbmFtZSBjb3VudGVyLiAqLworCisvKgorICogRGVsZXRlIHRoZSB0ZW1wIGRpcmVjdG9yeSBhbmQgYWxsIGZpbGVzIGl0IGNvbnRhaW5zLgorICovCisgICAgdm9pZAordmltX2RlbHRlbXBkaXIoKQoreworICAgIGNoYXJfdQkqKmZpbGVzOworICAgIGludAkJZmlsZV9jb3VudDsKKyAgICBpbnQJCWk7CisKKyAgICBpZiAodmltX3RlbXBkaXIgIT0gTlVMTCkKKyAgICB7CisJc3ByaW50ZigoY2hhciAqKU5hbWVCdWZmLCAiJXMqIiwgdmltX3RlbXBkaXIpOworCWlmIChnZW5fZXhwYW5kX3dpbGRjYXJkcygxLCAmTmFtZUJ1ZmYsICZmaWxlX2NvdW50LCAmZmlsZXMsCisJCQkJCSAgICAgIEVXX0RJUnxFV19GSUxFfEVXX1NJTEVOVCkgPT0gT0spCisJeworCSAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZV9jb3VudDsgKytpKQorCQltY2hfcmVtb3ZlKGZpbGVzW2ldKTsKKwkgICAgRnJlZVdpbGQoZmlsZV9jb3VudCwgZmlsZXMpOworCX0KKwlnZXR0YWlsKE5hbWVCdWZmKVstMV0gPSBOVUw7CisJKHZvaWQpbWNoX3JtZGlyKE5hbWVCdWZmKTsKKworCXZpbV9mcmVlKHZpbV90ZW1wZGlyKTsKKwl2aW1fdGVtcGRpciA9IE5VTEw7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiB2aW1fdGVtcG5hbWUoKTogUmV0dXJuIGEgdW5pcXVlIG5hbWUgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYSB0ZW1wIGZpbGUuCisgKgorICogVGhlIHRlbXAgZmlsZSBpcyBOT1QgY3JlYXRlZC4KKyAqCisgKiBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyB0byBhbGxvY2F0ZWQgbWVtb3J5LgorICogVGhlIHJldHVybmVkIHBvaW50ZXIgaXMgTlVMTCBpZiBubyB2YWxpZCBuYW1lIHdhcyBmb3VuZC4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICAqCit2aW1fdGVtcG5hbWUoZXh0cmFfY2hhcikKKyAgICBpbnQJICAgIGV4dHJhX2NoYXI7CSAgICAvKiBjaGFyYWN0ZXIgdG8gdXNlIGluIHRoZSBuYW1lIGluc3RlYWQgb2YgJz8nICovCit7CisjaWZkZWYgVVNFX1RNUE5BTQorICAgIGNoYXJfdQlpdG1wW0xfdG1wbmFtXTsJLyogdXNlIHRtcG5hbSgpICovCisjZWxzZQorICAgIGNoYXJfdQlpdG1wW1RFTVBOQU1FTEVOXTsKKyNlbmRpZgorCisjaWZkZWYgVEVNUERJUk5BTUVTCisgICAgc3RhdGljIGNoYXIJKih0ZW1wZGlyc1tdKSA9IHtURU1QRElSTkFNRVN9OworICAgIGludAkJaTsKKyAgICBsb25nCW5yOworICAgIGxvbmcJb2ZmOworIyBpZm5kZWYgRUVYSVNUCisgICAgc3RydWN0IHN0YXQJc3Q7CisjIGVuZGlmCisKKyAgICAvKgorICAgICAqIFRoaXMgd2lsbCBjcmVhdGUgYSBkaXJlY3RvcnkgZm9yIHByaXZhdGUgdXNlIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgVmltLgorICAgICAqIFRoaXMgaXMgZG9uZSBvbmNlLCBhbmQgdGhlIHNhbWUgZGlyZWN0b3J5IGlzIHVzZWQgZm9yIGFsbCB0ZW1wIGZpbGVzLgorICAgICAqIFRoaXMgbWV0aG9kIGF2b2lkcyBzZWN1cml0eSBwcm9ibGVtcyBiZWNhdXNlIG9mIHN5bWxpbmsgYXR0YWNrcyBldCBhbC4KKyAgICAgKiBJdCdzIGFsc28gYSBiaXQgZmFzdGVyLCBiZWNhdXNlIHdlIG9ubHkgbmVlZCB0byBjaGVjayBmb3IgYW4gZXhpc3RpbmcKKyAgICAgKiBmaWxlIHdoZW4gY3JlYXRpbmcgdGhlIGRpcmVjdG9yeSBhbmQgbm90IGZvciBlYWNoIHRlbXAgZmlsZS4KKyAgICAgKi8KKyAgICBpZiAodmltX3RlbXBkaXIgPT0gTlVMTCkKKyAgICB7CisJLyoKKwkgKiBUcnkgdGhlIGVudHJpZXMgaW4gVEVNUERJUk5BTUVTIHRvIGNyZWF0ZSB0aGUgdGVtcCBkaXJlY3RvcnkuCisJICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZW1wZGlycykgLyBzaXplb2YoY2hhciAqKTsgKytpKQorCXsKKwkgICAgLyogZXhwYW5kICRUTVAsIGxlYXZlIHJvb20gZm9yICIvdjExMDAwMDAvOTk5OTk5OTk5IiAqLworCSAgICBleHBhbmRfZW52KChjaGFyX3UgKil0ZW1wZGlyc1tpXSwgaXRtcCwgVEVNUE5BTUVMRU4gLSAyMCk7CisJICAgIGlmIChtY2hfaXNkaXIoaXRtcCkpCQkvKiBkaXJlY3RvcnkgZXhpc3RzICovCisJICAgIHsKKyMgaWZkZWYgX19FTVhfXworCQkvKiBJZiAkVE1QIGNvbnRhaW5zIGEgZm9yd2FyZCBzbGFzaCAocGVyaGFwcyB1c2luZyBiYXNoIG9yCisJCSAqIHRjc2gpLCBkb24ndCBhZGQgYSBiYWNrc2xhc2gsIHVzZSBhIGZvcndhcmQgc2xhc2ghCisJCSAqIEFkZGluZyAyIGJhY2tzbGFzaGVzIGRpZG4ndCB3b3JrLiAqLworCQlpZiAodmltX3N0cmNocihpdG1wLCAnLycpICE9IE5VTEwpCisJCSAgICBTVFJDQVQoaXRtcCwgIi8iKTsKKwkJZWxzZQorIyBlbmRpZgorCQkgICAgYWRkX3BhdGhzZXAoaXRtcCk7CisKKwkJLyogR2V0IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgdXAgdG8gNiBkaWdpdHMuICBXaGVuIGl0J3MKKwkJICogdW5saWtlbHkgdGhhdCBpdCBhbHJlYWR5IGV4aXN0cyBpdCB3aWxsIGJlIGZhc3RlciwKKwkJICogb3RoZXJ3aXNlIGl0IGRvZXNuJ3QgbWF0dGVyLiAgVGhlIHVzZSBvZiBta2RpcigpIGF2b2lkcyBhbnkKKwkJICogc2VjdXJpdHkgcHJvYmxlbXMgYmVjYXVzZSBvZiB0aGUgcHJlZGljdGFibGUgbnVtYmVyLiAqLworCQluciA9IChtY2hfZ2V0X3BpZCgpICsgKGxvbmcpdGltZShOVUxMKSkgJSAxMDAwMDAwTDsKKworCQkvKiBUcnkgdXAgdG8gMTAwMDAgZGlmZmVyZW50IHZhbHVlcyB1bnRpbCB3ZSBmaW5kIGEgbmFtZSB0aGF0CisJCSAqIGRvZXNuJ3QgZXhpc3QuICovCisJCWZvciAob2ZmID0gMDsgb2ZmIDwgMTAwMDBMOyArK29mZikKKwkJeworCQkgICAgaW50CQlyOworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpCisJCSAgICBtb2RlX3QJdW1hc2tfc2F2ZTsKKyNlbmRpZgorCisJCSAgICBzcHJpbnRmKChjaGFyICopaXRtcCArIFNUUkxFTihpdG1wKSwgInYlbGQiLCBuciArIG9mZik7CisjIGlmbmRlZiBFRVhJU1QKKwkJICAgIC8qIElmIG1rZGlyKCkgZG9lcyBub3Qgc2V0IGVycm5vIHRvIEVFWElTVCwgY2hlY2sgZm9yCisJCSAgICAgKiBleGlzdGluZyBmaWxlIGhlcmUuICBUaGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIHRoZW4sCisJCSAgICAgKiBhbHRob3VnaCBpdCdzIGZhaWwtc2FmZS4gKi8KKwkJICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWl0bXAsICZzdCkgPj0gMCkKKwkJCWNvbnRpbnVlOworIyBlbmRpZgorI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpCisJCSAgICAvKiBNYWtlIHN1cmUgdGhlIHVtYXNrIGRvZXNuJ3QgcmVtb3ZlIHRoZSBleGVjdXRhYmxlIGJpdC4KKwkJICAgICAqICJyZXBsIiBoYXMgYmVlbiByZXBvcnRlZCB0byB1c2UgIjE3NyIuICovCisJCSAgICB1bWFza19zYXZlID0gdW1hc2soMDc3KTsKKyNlbmRpZgorCQkgICAgciA9IHZpbV9ta2RpcihpdG1wLCAwNzAwKTsKKyNpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoVk1TKQorCQkgICAgKHZvaWQpdW1hc2sodW1hc2tfc2F2ZSk7CisjZW5kaWYKKwkJICAgIGlmIChyID09IDApCisJCSAgICB7CisJCQljaGFyX3UJKmJ1ZjsKKworCQkJLyogRGlyZWN0b3J5IHdhcyBjcmVhdGVkLCB1c2UgdGhpcyBuYW1lLgorCQkJICogRXhwYW5kIHRvIGZ1bGwgcGF0aDsgV2hlbiB1c2luZyB0aGUgY3VycmVudAorCQkJICogZGlyZWN0b3J5IGEgIjpjZCIgd291bGQgY29uZnVzZSB1cy4gKi8KKwkJCWJ1ZiA9IGFsbG9jKCh1bnNpZ25lZClNQVhQQVRITCArIDEpOworCQkJaWYgKGJ1ZiAhPSBOVUxMKQorCQkJeworCQkJICAgIGlmICh2aW1fRnVsbE5hbWUoaXRtcCwgYnVmLCBNQVhQQVRITCwgRkFMU0UpCisJCQkJCQkJCSAgICAgID09IEZBSUwpCisJCQkJU1RSQ1BZKGJ1ZiwgaXRtcCk7CisjIGlmZGVmIF9fRU1YX18KKwkJCSAgICBpZiAodmltX3N0cmNocihidWYsICcvJykgIT0gTlVMTCkKKwkJCQlTVFJDQVQoYnVmLCAiLyIpOworCQkJICAgIGVsc2UKKyMgZW5kaWYKKwkJCQlhZGRfcGF0aHNlcChidWYpOworCQkJICAgIHZpbV90ZW1wZGlyID0gdmltX3N0cnNhdmUoYnVmKTsKKwkJCSAgICB2aW1fZnJlZShidWYpOworCQkJfQorCQkJYnJlYWs7CisJCSAgICB9CisjIGlmZGVmIEVFWElTVAorCQkgICAgLyogSWYgdGhlIG1rZGlyKCkgZGlkbid0IGZhaWwgYmVjYXVzZSB0aGUgZmlsZS9kaXIgZXhpc3RzLAorCQkgICAgICogd2UgcHJvYmFibHkgY2FuJ3QgY3JlYXRlIGFueSBkaXIgaGVyZSwgdHJ5IGFub3RoZXIKKwkJICAgICAqIHBsYWNlLiAqLworCQkgICAgaWYgKGVycm5vICE9IEVFWElTVCkKKyMgZW5kaWYKKwkJCWJyZWFrOworCQl9CisJCWlmICh2aW1fdGVtcGRpciAhPSBOVUxMKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKHZpbV90ZW1wZGlyICE9IE5VTEwpCisgICAgeworCS8qIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzLCBiZWNhdXNlIHdlIG93biB0aGUKKwkgKiBkaXJlY3RvcnkgYW5kIG5vYm9keSBlbHNlIGNyZWF0ZXMgYSBmaWxlIGluIGl0LiAqLworCXNwcmludGYoKGNoYXIgKilpdG1wLCAiJXMlbGQiLCB2aW1fdGVtcGRpciwgdGVtcF9jb3VudCsrKTsKKwlyZXR1cm4gdmltX3N0cnNhdmUoaXRtcCk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7CisKKyNlbHNlIC8qIFRFTVBESVJOQU1FUyAqLworCisjIGlmZGVmIFdJTjMyNjQKKyAgICBjaGFyCXN6VGVtcEZpbGVbX01BWF9QQVRIICsgMV07CisgICAgY2hhcglidWY0WzRdOworICAgIGNoYXJfdQkqcmV0dmFsOworICAgIGNoYXJfdQkqcDsKKworICAgIFNUUkNQWShpdG1wLCAiIik7CisgICAgaWYgKEdldFRlbXBQYXRoKF9NQVhfUEFUSCwgc3pUZW1wRmlsZSkgPT0gMCkKKwlzelRlbXBGaWxlWzBdID0gTlVMOwkvKiBHZXRUZW1wUGF0aCgpIGZhaWxlZCwgdXNlIGN1cnJlbnQgZGlyICovCisgICAgc3RyY3B5KGJ1ZjQsICJWSU0iKTsKKyAgICBidWY0WzJdID0gZXh0cmFfY2hhcjsgICAvKiBtYWtlIGl0ICJWSWEiLCAiVkliIiwgZXRjLiAqLworICAgIGlmIChHZXRUZW1wRmlsZU5hbWUoc3pUZW1wRmlsZSwgYnVmNCwgMCwgaXRtcCkgPT0gMCkKKwlyZXR1cm4gTlVMTDsKKyAgICAvKiBHZXRUZW1wRmlsZU5hbWUoKSB3aWxsIGNyZWF0ZSB0aGUgZmlsZSwgd2UgZG9uJ3Qgd2FudCB0aGF0ICovCisgICAgKHZvaWQpRGVsZXRlRmlsZShpdG1wKTsKKworICAgIC8qIEJhY2tzbGFzaGVzIGluIGEgdGVtcCBmaWxlIG5hbWUgY2F1c2UgcHJvYmxlbXMgd2hlbiBmaWx0ZXJpbmcgd2l0aAorICAgICAqICJzaCIuICBOT1RFOiBUaGlzIGFsc28gY2hlY2tzICdzaGVsbGNtZGZsYWcnIHRvIGhlbHAgdGhvc2UgcGVvcGxlIHdobworICAgICAqIGRpZG4ndCBzZXQgJ3NoZWxsc2xhc2gnLiAqLworICAgIHJldHZhbCA9IHZpbV9zdHJzYXZlKGl0bXApOworICAgIGlmICgqcF9zaGNmID09ICctJyB8fCBwX3NzbCkKKwlmb3IgKHAgPSByZXR2YWw7ICpwOyArK3ApCisJICAgIGlmICgqcCA9PSAnXFwnKQorCQkqcCA9ICcvJzsKKyAgICByZXR1cm4gcmV0dmFsOworCisjIGVsc2UgLyogV0lOMzI2NCAqLworCisjICBpZmRlZiBVU0VfVE1QTkFNCisgICAgLyogdG1wbmFtKCkgd2lsbCBtYWtlIGl0cyBvd24gbmFtZSAqLworICAgIGlmICgqdG1wbmFtKChjaGFyICopaXRtcCkgPT0gTlVMKQorCXJldHVybiBOVUxMOworIyAgZWxzZQorICAgIGNoYXJfdQkqcDsKKworIyAgIGlmZGVmIFZNU19URU1QTkFNCisgICAgLyogbWt0ZW1wKCkgaXMgbm90IHdvcmtpbmcgb24gVk1TLiAgSXQgc2VlbXMgdG8gYmUKKyAgICAgKiBhIGRvLW5vdGhpbmcgZnVuY3Rpb24uIFRoZXJlZm9yZSB3ZSB1c2UgdGVtcG5hbSgpLgorICAgICAqLworICAgIHNwcmludGYoKGNoYXIgKilpdG1wLCAiVklNJWMiLCBleHRyYV9jaGFyKTsKKyAgICBwID0gKGNoYXJfdSAqKXRlbXBuYW0oInRtcDoiLCAoY2hhciAqKWl0bXApOworICAgIGlmIChwICE9IE5VTEwpCisgICAgeworCS8qIFZNUyB3aWxsIHVzZSAnLkxPRycgaWYgd2UgZG9uJ3QgZXhwbGljaXRseSBzcGVjaWZ5IGFuIGV4dGVuc2lvbiwKKwkgKiBhbmQgVklNIHdpbGwgdGhlbiBiZSB1bmFibGUgdG8gZmluZCB0aGUgZmlsZSBsYXRlciAqLworCVNUUkNQWShpdG1wLCBwKTsKKwlTVFJDQVQoaXRtcCwgIi50eHQiKTsKKwlmcmVlKHApOworICAgIH0KKyAgICBlbHNlCisJcmV0dXJuIE5VTEw7CisjICAgZWxzZQorICAgIFNUUkNQWShpdG1wLCBURU1QTkFNRSk7CisgICAgaWYgKChwID0gdmltX3N0cmNocihpdG1wLCAnPycpKSAhPSBOVUxMKQorCSpwID0gZXh0cmFfY2hhcjsKKyAgICBpZiAobWt0ZW1wKChjaGFyICopaXRtcCkgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyMgICBlbmRpZgorIyAgZW5kaWYKKworICAgIHJldHVybiB2aW1fc3Ryc2F2ZShpdG1wKTsKKyMgZW5kaWYgLyogV0lOMzI2NCAqLworI2VuZGlmIC8qIFRFTVBESVJOQU1FUyAqLworfQorCisjaWYgZGVmaW5lZChCQUNLU0xBU0hfSU5fRklMRU5BTUUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ29udmVydCBhbGwgYmFja3NsYXNoZXMgaW4gZm5hbWUgdG8gZm9yd2FyZCBzbGFzaGVzIGluLXBsYWNlLgorICovCisgICAgdm9pZAorZm9yd2FyZF9zbGFzaChmbmFtZSkKKyAgICBjaGFyX3UJKmZuYW1lOworeworICAgIGNoYXJfdQkqcDsKKworICAgIGZvciAocCA9IGZuYW1lOyAqcCAhPSBOVUw7ICsrcCkKKyMgaWZkZWYgIEZFQVRfTUJZVEUKKwkvKiBUaGUgQmlnNSBlbmNvZGluZyBjYW4gaGF2ZSAnXCcgaW4gdGhlIHRyYWlsIGJ5dGUuICovCisJaWYgKGVuY19kYmNzICE9IDAgJiYgKCptYl9wdHIybGVuX2NoZWNrKShwKSA+IDEpCisJICAgICsrcDsKKwllbHNlCisjIGVuZGlmCisJaWYgKCpwID09ICdcXCcpCisJICAgICpwID0gJy8nOworfQorI2VuZGlmCisKKworLyoKKyAqIENvZGUgZm9yIGF1dG9tYXRpYyBjb21tYW5kcy4KKyAqCisgKiBPbmx5IGluY2x1ZGVkIHdoZW4gIkZFQVRfQVVUT0NNRCIgaGFzIGJlZW4gZGVmaW5lZC4KKyAqLworCisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qCisgKiBUaGUgYXV0b2NvbW1hbmRzIGFyZSBzdG9yZWQgaW4gYSBsaXN0IGZvciBlYWNoIGV2ZW50LgorICogQXV0b2NvbW1hbmRzIGZvciB0aGUgc2FtZSBwYXR0ZXJuLCB0aGF0IGFyZSBjb25zZWN1dGl2ZSwgYXJlIGpvaW5lZAorICogdG9nZXRoZXIsIHRvIGF2b2lkIGhhdmluZyB0byBtYXRjaCB0aGUgcGF0dGVybiB0b28gb2Z0ZW4uCisgKiBUaGUgcmVzdWx0IGlzIGFuIGFycmF5IG9mIEF1dG9wYXQgbGlzdHMsIHdoaWNoIHBvaW50IHRvIEF1dG9DbWQgbGlzdHM6CisgKgorICogZmlyc3RfYXV0b3BhdFswXSAtLT4gQXV0b3BhdC5uZXh0ICAtLT4gIEF1dG9wYXQubmV4dCAtLT4gIE5VTEwKKyAqCQkJQXV0b3BhdC5jbWRzCSAgIEF1dG9wYXQuY21kcworICoJCQkgICAgfAkJCSB8CisgKgkJCSAgICBWCQkJIFYKKyAqCQkJQXV0b0NtZC5uZXh0CSAgIEF1dG9DbWQubmV4dAorICoJCQkgICAgfAkJCSB8CisgKgkJCSAgICBWCQkJIFYKKyAqCQkJQXV0b0NtZC5uZXh0CQlOVUxMCisgKgkJCSAgICB8CisgKgkJCSAgICBWCisgKgkJCSAgIE5VTEwKKyAqCisgKiBmaXJzdF9hdXRvcGF0WzFdIC0tPiBBdXRvcGF0Lm5leHQgIC0tPiAgTlVMTAorICoJCQlBdXRvcGF0LmNtZHMKKyAqCQkJICAgIHwKKyAqCQkJICAgIFYKKyAqCQkJQXV0b0NtZC5uZXh0CisgKgkJCSAgICB8CisgKgkJCSAgICBWCisgKgkJCSAgIE5VTEwKKyAqICAgZXRjLgorICoKKyAqICAgVGhlIG9yZGVyIG9mIEF1dG9DbWRzIGlzIGltcG9ydGFudCwgdGhpcyBpcyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlCisgKiAgIGRlZmluZWQgYW5kIHdpbGwgaGF2ZSB0byBiZSBleGVjdXRlZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQXV0b0NtZAoreworICAgIGNoYXJfdQkgICAgKmNtZDsJCS8qIFRoZSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkIChOVUxMCisJCQkJCSAgIHdoZW4gY29tbWFuZCBoYXMgYmVlbiByZW1vdmVkKSAqLworICAgIGNoYXIJICAgIG5lc3RlZDsJCS8qIElmIGF1dG9jb21tYW5kcyBuZXN0IGhlcmUgKi8KKyAgICBjaGFyCSAgICBsYXN0OwkJLyogbGFzdCBjb21tYW5kIGluIGxpc3QgKi8KKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBzY2lkX1QJICAgIHNjcmlwdElEOwkJLyogc2NyaXB0IElEIHdoZXJlIGRlZmluZWQgKi8KKyNlbmRpZgorICAgIHN0cnVjdCBBdXRvQ21kICAqbmV4dDsJCS8qIE5leHQgQXV0b0NtZCBpbiBsaXN0ICovCit9IEF1dG9DbWQ7CisKK3R5cGVkZWYgc3RydWN0IEF1dG9QYXQKK3sKKyAgICBpbnQJCSAgICBncm91cDsJCS8qIGdyb3VwIElEICovCisgICAgY2hhcl91CSAgICAqcGF0OwkJLyogcGF0dGVybiBhcyB0eXBlZCAoTlVMTCB3aGVuIHBhdHRlcm4KKwkJCQkJICAgaGFzIGJlZW4gcmVtb3ZlZCkgKi8KKyAgICBpbnQJCSAgICBwYXRsZW47CQkvKiBzdHJsZW4oKSBvZiBwYXQgKi8KKyAgICBjaGFyX3UJICAgICpyZWdfcGF0OwkJLyogcGF0dGVybiBjb252ZXJ0ZWQgdG8gcmVnZXhwICovCisgICAgY2hhcgkgICAgYWxsb3dfZGlyczsJCS8qIFBhdHRlcm4gbWF5IG1hdGNoIHdob2xlIHBhdGggKi8KKyAgICBjaGFyCSAgICBsYXN0OwkJLyogbGFzdCBwYXR0ZXJuIGZvciBhcHBseV9hdXRvY21kcygpICovCisgICAgQXV0b0NtZAkgICAgKmNtZHM7CQkvKiBsaXN0IG9mIGNvbW1hbmRzIHRvIGRvICovCisgICAgc3RydWN0IEF1dG9QYXQgICpuZXh0OwkJLyogbmV4dCBBdXRvUGF0IGluIEF1dG9QYXQgbGlzdCAqLworfSBBdXRvUGF0OworCitzdGF0aWMgc3RydWN0IGV2ZW50X25hbWUKK3sKKyAgICBjaGFyCSpuYW1lOwkvKiBldmVudCBuYW1lICovCisgICAgRVZFTlRfVAlldmVudDsJLyogZXZlbnQgbnVtYmVyICovCit9IGV2ZW50X25hbWVzW10gPQoreworICAgIHsiQnVmQWRkIiwJCUVWRU5UX0JVRkFERH0sCisgICAgeyJCdWZDcmVhdGUiLAlFVkVOVF9CVUZBRER9LAorICAgIHsiQnVmRGVsZXRlIiwJRVZFTlRfQlVGREVMRVRFfSwKKyAgICB7IkJ1ZkVudGVyIiwJRVZFTlRfQlVGRU5URVJ9LAorICAgIHsiQnVmRmlsZVBvc3QiLAlFVkVOVF9CVUZGSUxFUE9TVH0sCisgICAgeyJCdWZGaWxlUHJlIiwJRVZFTlRfQlVGRklMRVBSRX0sCisgICAgeyJCdWZIaWRkZW4iLAlFVkVOVF9CVUZISURERU59LAorICAgIHsiQnVmTGVhdmUiLAlFVkVOVF9CVUZMRUFWRX0sCisgICAgeyJCdWZOZXciLAkJRVZFTlRfQlVGTkVXfSwKKyAgICB7IkJ1Zk5ld0ZpbGUiLAlFVkVOVF9CVUZORVdGSUxFfSwKKyAgICB7IkJ1ZlJlYWQiLAkJRVZFTlRfQlVGUkVBRFBPU1R9LAorICAgIHsiQnVmUmVhZENtZCIsCUVWRU5UX0JVRlJFQURDTUR9LAorICAgIHsiQnVmUmVhZFBvc3QiLAlFVkVOVF9CVUZSRUFEUE9TVH0sCisgICAgeyJCdWZSZWFkUHJlIiwJRVZFTlRfQlVGUkVBRFBSRX0sCisgICAgeyJCdWZVbmxvYWQiLAlFVkVOVF9CVUZVTkxPQUR9LAorICAgIHsiQnVmV2luRW50ZXIiLAlFVkVOVF9CVUZXSU5FTlRFUn0sCisgICAgeyJCdWZXaW5MZWF2ZSIsCUVWRU5UX0JVRldJTkxFQVZFfSwKKyAgICB7IkJ1ZldpcGVvdXQiLAlFVkVOVF9CVUZXSVBFT1VUfSwKKyAgICB7IkJ1ZldyaXRlIiwJRVZFTlRfQlVGV1JJVEVQUkV9LAorICAgIHsiQnVmV3JpdGVQb3N0IiwJRVZFTlRfQlVGV1JJVEVQT1NUfSwKKyAgICB7IkJ1ZldyaXRlUHJlIiwJRVZFTlRfQlVGV1JJVEVQUkV9LAorICAgIHsiQnVmV3JpdGVDbWQiLAlFVkVOVF9CVUZXUklURUNNRH0sCisgICAgeyJDbWR3aW5FbnRlciIsCUVWRU5UX0NNRFdJTkVOVEVSfSwKKyAgICB7IkNtZHdpbkxlYXZlIiwJRVZFTlRfQ01EV0lOTEVBVkV9LAorICAgIHsiRW5jb2RpbmdDaGFuZ2VkIiwJRVZFTlRfRU5DT0RJTkdDSEFOR0VEfSwKKyAgICB7IkZpbGVFbmNvZGluZyIsCUVWRU5UX0VOQ09ESU5HQ0hBTkdFRH0sCisgICAgeyJDdXJzb3JIb2xkIiwJRVZFTlRfQ1VSU09SSE9MRH0sCisgICAgeyJGaWxlQXBwZW5kUG9zdCIsCUVWRU5UX0ZJTEVBUFBFTkRQT1NUfSwKKyAgICB7IkZpbGVBcHBlbmRQcmUiLAlFVkVOVF9GSUxFQVBQRU5EUFJFfSwKKyAgICB7IkZpbGVBcHBlbmRDbWQiLAlFVkVOVF9GSUxFQVBQRU5EQ01EfSwKKyAgICB7IkZpbGVDaGFuZ2VkU2hlbGwiLEVWRU5UX0ZJTEVDSEFOR0VEU0hFTEx9LAorICAgIHsiRmlsZUNoYW5nZWRSTyIsCUVWRU5UX0ZJTEVDSEFOR0VEUk99LAorICAgIHsiRmlsZVJlYWRQb3N0IiwJRVZFTlRfRklMRVJFQURQT1NUfSwKKyAgICB7IkZpbGVSZWFkUHJlIiwJRVZFTlRfRklMRVJFQURQUkV9LAorICAgIHsiRmlsZVJlYWRDbWQiLAlFVkVOVF9GSUxFUkVBRENNRH0sCisgICAgeyJGaWxlVHlwZSIsCUVWRU5UX0ZJTEVUWVBFfSwKKyAgICB7IkZpbGVXcml0ZVBvc3QiLAlFVkVOVF9GSUxFV1JJVEVQT1NUfSwKKyAgICB7IkZpbGVXcml0ZVByZSIsCUVWRU5UX0ZJTEVXUklURVBSRX0sCisgICAgeyJGaWxlV3JpdGVDbWQiLAlFVkVOVF9GSUxFV1JJVEVDTUR9LAorICAgIHsiRmlsdGVyUmVhZFBvc3QiLAlFVkVOVF9GSUxURVJSRUFEUE9TVH0sCisgICAgeyJGaWx0ZXJSZWFkUHJlIiwJRVZFTlRfRklMVEVSUkVBRFBSRX0sCisgICAgeyJGaWx0ZXJXcml0ZVBvc3QiLAlFVkVOVF9GSUxURVJXUklURVBPU1R9LAorICAgIHsiRmlsdGVyV3JpdGVQcmUiLAlFVkVOVF9GSUxURVJXUklURVBSRX0sCisgICAgeyJGb2N1c0dhaW5lZCIsCUVWRU5UX0ZPQ1VTR0FJTkVEfSwKKyAgICB7IkZvY3VzTG9zdCIsCUVWRU5UX0ZPQ1VTTE9TVH0sCisgICAgeyJGdW5jVW5kZWZpbmVkIiwJRVZFTlRfRlVOQ1VOREVGSU5FRH0sCisgICAgeyJHVUlFbnRlciIsCUVWRU5UX0dVSUVOVEVSfSwKKyAgICB7IlJlbW90ZVJlcGx5IiwJRVZFTlRfUkVNT1RFUkVQTFl9LAorICAgIHsiU3RkaW5SZWFkUG9zdCIsCUVWRU5UX1NURElOUkVBRFBPU1R9LAorICAgIHsiU3RkaW5SZWFkUHJlIiwJRVZFTlRfU1RESU5SRUFEUFJFfSwKKyAgICB7IlN5bnRheCIsCQlFVkVOVF9TWU5UQVh9LAorICAgIHsiVGVybUNoYW5nZWQiLAlFVkVOVF9URVJNQ0hBTkdFRH0sCisgICAgeyJUZXJtUmVzcG9uc2UiLAlFVkVOVF9URVJNUkVTUE9OU0V9LAorICAgIHsiVXNlciIsCQlFVkVOVF9VU0VSfSwKKyAgICB7IlZpbUVudGVyIiwJRVZFTlRfVklNRU5URVJ9LAorICAgIHsiVmltTGVhdmUiLAlFVkVOVF9WSU1MRUFWRX0sCisgICAgeyJWaW1MZWF2ZVByZSIsCUVWRU5UX1ZJTUxFQVZFUFJFfSwKKyAgICB7IldpbkVudGVyIiwJRVZFTlRfV0lORU5URVJ9LAorICAgIHsiV2luTGVhdmUiLAlFVkVOVF9XSU5MRUFWRX0sCisgICAge05VTEwsCQkoRVZFTlRfVCkwfQorfTsKKworc3RhdGljIEF1dG9QYXQgKmZpcnN0X2F1dG9wYXRbTlVNX0VWRU5UU10gPQoreworICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKKworLyoKKyAqIHN0cnVjdCB1c2VkIHRvIGtlZXAgc3RhdHVzIHdoaWxlIGV4ZWN1dGluZyBhdXRvY29tbWFuZHMgZm9yIGFuIGV2ZW50LgorICovCit0eXBlZGVmIHN0cnVjdCBBdXRvUGF0Q21kCit7CisgICAgQXV0b1BhdAkqY3VycGF0OwkvKiBuZXh0IEF1dG9QYXQgdG8gZXhhbWluZSAqLworICAgIEF1dG9DbWQJKm5leHRjbWQ7CS8qIG5leHQgQXV0b0NtZCB0byBleGVjdXRlICovCisgICAgaW50CQlncm91cDsJCS8qIGdyb3VwIGJlaW5nIHVzZWQgKi8KKyAgICBjaGFyX3UJKmZuYW1lOwkJLyogZm5hbWUgdG8gbWF0Y2ggd2l0aCAqLworICAgIGNoYXJfdQkqc2ZuYW1lOwkvKiBzZm5hbWUgdG8gbWF0Y2ggd2l0aCAqLworICAgIGNoYXJfdQkqdGFpbDsJCS8qIHRhaWwgb2YgZm5hbWUgKi8KKyAgICBFVkVOVF9UCWV2ZW50OwkJLyogY3VycmVudCBldmVudCAqLworfSBBdXRvUGF0Q21kOworCisvKgorICogYXVncm91cHMgc3RvcmVzIGEgbGlzdCBvZiBhdXRvY21kIGdyb3VwIG5hbWVzLgorICovCitnYXJyYXlfVCBhdWdyb3VwcyA9IHswLCAwLCBzaXplb2YoY2hhcl91ICopLCAxMCwgTlVMTH07CisjZGVmaW5lIEFVR1JPVVBfTkFNRShpKSAoKChjaGFyX3UgKiopYXVncm91cHMuZ2FfZGF0YSlbaV0pCisKKy8qCisgKiBUaGUgSUQgb2YgdGhlIGN1cnJlbnQgZ3JvdXAuICBHcm91cCAwIGlzIHRoZSBkZWZhdWx0IG9uZS4KKyAqLworI2RlZmluZSBBVUdST1VQX0RFRkFVTFQJICAgIC0xCSAgICAvKiBkZWZhdWx0IGF1dG9jbWQgZ3JvdXAgKi8KKyNkZWZpbmUgQVVHUk9VUF9FUlJPUgkgICAgLTIJICAgIC8qIGVycm9ybm91c2UgYXV0b2NtZCBncm91cCAqLworI2RlZmluZSBBVUdST1VQX0FMTAkgICAgLTMJICAgIC8qIGFsbCBhdXRvY21kIGdyb3VwcyAqLworc3RhdGljIGludCBjdXJyZW50X2F1Z3JvdXAgPSBBVUdST1VQX0RFRkFVTFQ7CisKK3N0YXRpYyBpbnQgYXVfbmVlZF9jbGVhbiA9IEZBTFNFOyAgIC8qIG5lZWQgdG8gZGVsZXRlIG1hcmtlZCBwYXR0ZXJucyAqLworCitzdGF0aWMgdm9pZCBzaG93X2F1dG9jbWQgX19BUkdTKChBdXRvUGF0ICphcCwgRVZFTlRfVCBldmVudCkpOworc3RhdGljIHZvaWQgYXVfcmVtb3ZlX3BhdCBfX0FSR1MoKEF1dG9QYXQgKmFwKSk7CitzdGF0aWMgdm9pZCBhdV9yZW1vdmVfY21kcyBfX0FSR1MoKEF1dG9QYXQgKmFwKSk7CitzdGF0aWMgdm9pZCBhdV9jbGVhbnVwIF9fQVJHUygodm9pZCkpOworc3RhdGljIGludCBhdV9uZXdfZ3JvdXAgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK3N0YXRpYyB2b2lkIGF1X2RlbF9ncm91cCBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworc3RhdGljIGludCBhdV9maW5kX2dyb3VwIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitzdGF0aWMgRVZFTlRfVCBldmVudF9uYW1lMm5yIF9fQVJHUygoY2hhcl91ICpzdGFydCwgY2hhcl91ICoqZW5kKSk7CitzdGF0aWMgY2hhcl91ICpldmVudF9ucjJuYW1lIF9fQVJHUygoRVZFTlRfVCBldmVudCkpOworc3RhdGljIGNoYXJfdSAqZmluZF9lbmRfZXZlbnQgX19BUkdTKChjaGFyX3UgKmFyZywgaW50IGhhdmVfZ3JvdXApKTsKK3N0YXRpYyBpbnQgZXZlbnRfaWdub3JlZCBfX0FSR1MoKEVWRU5UX1QgZXZlbnQpKTsKK3N0YXRpYyBpbnQgYXVfZ2V0X2dyb3VwYXJnIF9fQVJHUygoY2hhcl91ICoqYXJncCkpOworc3RhdGljIGludCBkb19hdXRvY21kX2V2ZW50IF9fQVJHUygoRVZFTlRfVCBldmVudCwgY2hhcl91ICpwYXQsIGludCBuZXN0ZWQsIGNoYXJfdSAqY21kLCBpbnQgZm9yY2VpdCwgaW50IGdyb3VwKSk7CitzdGF0aWMgY2hhcl91ICpnZXRuZXh0YWMgX19BUkdTKChpbnQgYywgdm9pZCAqY29va2llLCBpbnQgaW5kZW50KSk7CitzdGF0aWMgaW50IGFwcGx5X2F1dG9jbWRzX2dyb3VwIF9fQVJHUygoRVZFTlRfVCBldmVudCwgY2hhcl91ICpmbmFtZSwgY2hhcl91ICpmbmFtZV9pbywgaW50IGZvcmNlLCBpbnQgZ3JvdXAsIGJ1Zl9UICpidWYsIGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQgYXV0b19uZXh0X3BhdCBfX0FSR1MoKEF1dG9QYXRDbWQgKmFwYywgaW50IHN0b3BfYXRfbGFzdCkpOworCitzdGF0aWMgRVZFTlRfVAlsYXN0X2V2ZW50Oworc3RhdGljIGludAlsYXN0X2dyb3VwOworCisvKgorICogU2hvdyB0aGUgYXV0b2NvbW1hbmRzIGZvciBvbmUgQXV0b1BhdC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzaG93X2F1dG9jbWQoYXAsIGV2ZW50KQorICAgIEF1dG9QYXQJKmFwOworICAgIEVWRU5UX1QJZXZlbnQ7Cit7CisgICAgQXV0b0NtZCAqYWM7CisKKyAgICAvKiBDaGVjayBmb3IgImdvdF9pbnQiIChoZXJlIGFuZCBhdCB2YXJpb3VzIHBsYWNlcyBiZWxvdyksIHdoaWNoIGlzIHNldAorICAgICAqIHdoZW4gInEiIGhhcyBiZWVuIGhpdCBmb3IgdGhlICItLW1vcmUtLSIgcHJvbXB0ICovCisgICAgaWYgKGdvdF9pbnQpCisJcmV0dXJuOworICAgIGlmIChhcC0+cGF0ID09IE5VTEwpCQkvKiBwYXR0ZXJuIGhhcyBiZWVuIHJlbW92ZWQgKi8KKwlyZXR1cm47CisKKyAgICBtc2dfcHV0Y2hhcignXG4nKTsKKyAgICBpZiAoZ290X2ludCkKKwlyZXR1cm47CisgICAgaWYgKGV2ZW50ICE9IGxhc3RfZXZlbnQgfHwgYXAtPmdyb3VwICE9IGxhc3RfZ3JvdXApCisgICAgeworCWlmIChhcC0+Z3JvdXAgIT0gQVVHUk9VUF9ERUZBVUxUKQorCXsKKwkgICAgaWYgKEFVR1JPVVBfTkFNRShhcC0+Z3JvdXApID09IE5VTEwpCisJCW1zZ19wdXRzX2F0dHIoKGNoYXJfdSAqKV8oIi0tRGVsZXRlZC0tIiksIGhsX2F0dHIoSExGX0UpKTsKKwkgICAgZWxzZQorCQltc2dfcHV0c19hdHRyKEFVR1JPVVBfTkFNRShhcC0+Z3JvdXApLCBobF9hdHRyKEhMRl9UKSk7CisJICAgIG1zZ19wdXRzKChjaGFyX3UgKikiICAiKTsKKwl9CisJbXNnX3B1dHNfYXR0cihldmVudF9ucjJuYW1lKGV2ZW50KSwgaGxfYXR0cihITEZfVCkpOworCWxhc3RfZXZlbnQgPSBldmVudDsKKwlsYXN0X2dyb3VwID0gYXAtPmdyb3VwOworCW1zZ19wdXRjaGFyKCdcbicpOworCWlmIChnb3RfaW50KQorCSAgICByZXR1cm47CisgICAgfQorICAgIG1zZ19jb2wgPSA0OworICAgIG1zZ19vdXR0cmFucyhhcC0+cGF0KTsKKworICAgIGZvciAoYWMgPSBhcC0+Y21kczsgYWMgIT0gTlVMTDsgYWMgPSBhYy0+bmV4dCkKKyAgICB7CisJaWYgKGFjLT5jbWQgIT0gTlVMTCkJCS8qIHNraXAgcmVtb3ZlZCBjb21tYW5kcyAqLworCXsKKwkgICAgaWYgKG1zZ19jb2wgPj0gMTQpCisJCW1zZ19wdXRjaGFyKCdcbicpOworCSAgICBtc2dfY29sID0gMTQ7CisJICAgIGlmIChnb3RfaW50KQorCQlyZXR1cm47CisJICAgIG1zZ19vdXR0cmFucyhhYy0+Y21kKTsKKwkgICAgaWYgKGdvdF9pbnQpCisJCXJldHVybjsKKwkgICAgaWYgKGFjLT5uZXh0ICE9IE5VTEwpCisJICAgIHsKKwkJbXNnX3B1dGNoYXIoJ1xuJyk7CisJCWlmIChnb3RfaW50KQorCQkgICAgcmV0dXJuOworCSAgICB9CisJfQorICAgIH0KK30KKworLyoKKyAqIE1hcmsgYW4gYXV0b2NvbW1hbmQgcGF0dGVybiBmb3IgZGVsZXRpb24uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYXVfcmVtb3ZlX3BhdChhcCkKKyAgICBBdXRvUGF0ICphcDsKK3sKKyAgICB2aW1fZnJlZShhcC0+cGF0KTsKKyAgICBhcC0+cGF0ID0gTlVMTDsKKyAgICBhdV9uZWVkX2NsZWFuID0gVFJVRTsKK30KKworLyoKKyAqIE1hcmsgYWxsIGNvbW1hbmRzIGZvciBhIHBhdHRlcm4gZm9yIGRlbGV0aW9uLgorICovCisgICAgc3RhdGljIHZvaWQKK2F1X3JlbW92ZV9jbWRzKGFwKQorICAgIEF1dG9QYXQgKmFwOworeworICAgIEF1dG9DbWQgKmFjOworCisgICAgZm9yIChhYyA9IGFwLT5jbWRzOyBhYyAhPSBOVUxMOyBhYyA9IGFjLT5uZXh0KQorICAgIHsKKwl2aW1fZnJlZShhYy0+Y21kKTsKKwlhYy0+Y21kID0gTlVMTDsKKyAgICB9CisgICAgYXVfbmVlZF9jbGVhbiA9IFRSVUU7Cit9CisKKy8qCisgKiBDbGVhbnVwIGF1dG9jb21tYW5kcyBhbmQgcGF0dGVybnMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZC4KKyAqIFRoaXMgaXMgb25seSBkb25lIHdoZW4gbm90IGV4ZWN1dGluZyBhdXRvY29tbWFuZHMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYXVfY2xlYW51cCgpCit7CisgICAgQXV0b1BhdAkqYXAsICoqcHJldl9hcDsKKyAgICBBdXRvQ21kCSphYywgKipwcmV2X2FjOworICAgIEVWRU5UX1QJZXZlbnQ7CisKKyAgICBpZiAoYXV0b2NtZF9idXN5IHx8ICFhdV9uZWVkX2NsZWFuKQorCXJldHVybjsKKworICAgIC8qIGxvb3Agb3ZlciBhbGwgZXZlbnRzICovCisgICAgZm9yIChldmVudCA9IChFVkVOVF9UKTA7IChpbnQpZXZlbnQgPCAoaW50KU5VTV9FVkVOVFM7CisJCQkJCSAgICBldmVudCA9IChFVkVOVF9UKSgoaW50KWV2ZW50ICsgMSkpCisgICAgeworCS8qIGxvb3Agb3ZlciBhbGwgYXV0b2NvbW1hbmQgcGF0dGVybnMgKi8KKwlwcmV2X2FwID0gJihmaXJzdF9hdXRvcGF0WyhpbnQpZXZlbnRdKTsKKwlmb3IgKGFwID0gKnByZXZfYXA7IGFwICE9IE5VTEw7IGFwID0gKnByZXZfYXApCisJeworCSAgICAvKiBsb29wIG92ZXIgYWxsIGNvbW1hbmRzIGZvciB0aGlzIHBhdHRlcm4gKi8KKwkgICAgcHJldl9hYyA9ICYoYXAtPmNtZHMpOworCSAgICBmb3IgKGFjID0gKnByZXZfYWM7IGFjICE9IE5VTEw7IGFjID0gKnByZXZfYWMpCisJICAgIHsKKwkJLyogcmVtb3ZlIHRoZSBjb21tYW5kIGlmIHRoZSBwYXR0ZXJuIGlzIHRvIGJlIGRlbGV0ZWQgb3Igd2hlbgorCQkgKiB0aGUgY29tbWFuZCBoYXMgYmVlbiBtYXJrZWQgZm9yIGRlbGV0aW9uICovCisJCWlmIChhcC0+cGF0ID09IE5VTEwgfHwgYWMtPmNtZCA9PSBOVUxMKQorCQl7CisJCSAgICAqcHJldl9hYyA9IGFjLT5uZXh0OworCQkgICAgdmltX2ZyZWUoYWMtPmNtZCk7CisJCSAgICB2aW1fZnJlZShhYyk7CisJCX0KKwkJZWxzZQorCQkgICAgcHJldl9hYyA9ICYoYWMtPm5leHQpOworCSAgICB9CisKKwkgICAgLyogcmVtb3ZlIHRoZSBwYXR0ZXJuIGlmIGl0IGhhcyBiZWVuIG1hcmtlZCBmb3IgZGVsZXRpb24gKi8KKwkgICAgaWYgKGFwLT5wYXQgPT0gTlVMTCkKKwkgICAgeworCQkqcHJldl9hcCA9IGFwLT5uZXh0OworCQl2aW1fZnJlZShhcC0+cmVnX3BhdCk7CisJCXZpbV9mcmVlKGFwKTsKKwkgICAgfQorCSAgICBlbHNlCisJCXByZXZfYXAgPSAmKGFwLT5uZXh0KTsKKwl9CisgICAgfQorCisgICAgYXVfbmVlZF9jbGVhbiA9IEZBTFNFOworfQorCisvKgorICogQWRkIGFuIGF1dG9jbWQgZ3JvdXAgbmFtZS4KKyAqIFJldHVybiBpdCdzIElELiAgUmV0dXJucyBBVUdST1VQX0VSUk9SICg8IDApIGZvciBlcnJvci4KKyAqLworICAgIHN0YXRpYyBpbnQKK2F1X25ld19ncm91cChuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBpID0gYXVfZmluZF9ncm91cChuYW1lKTsKKyAgICBpZiAoaSA9PSBBVUdST1VQX0VSUk9SKQkvKiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdCB5ZXQsIGFkZCBpdCAqLworICAgIHsKKwkvKiBGaXJzdCB0cnkgdXNpbmcgYSBmcmVlIGVudHJ5LiAqLworCWZvciAoaSA9IDA7IGkgPCBhdWdyb3Vwcy5nYV9sZW47ICsraSkKKwkgICAgaWYgKEFVR1JPVVBfTkFNRShpKSA9PSBOVUxMKQorCQlicmVhazsKKwlpZiAoaSA9PSBhdWdyb3Vwcy5nYV9sZW4gJiYgZ2FfZ3JvdygmYXVncm91cHMsIDEpID09IEZBSUwpCisJICAgIHJldHVybiBBVUdST1VQX0VSUk9SOworCisJQVVHUk9VUF9OQU1FKGkpID0gdmltX3N0cnNhdmUobmFtZSk7CisJaWYgKEFVR1JPVVBfTkFNRShpKSA9PSBOVUxMKQorCSAgICByZXR1cm4gQVVHUk9VUF9FUlJPUjsKKwlpZiAoaSA9PSBhdWdyb3Vwcy5nYV9sZW4pCisJeworCSAgICArK2F1Z3JvdXBzLmdhX2xlbjsKKwkgICAgLS1hdWdyb3Vwcy5nYV9yb29tOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gaTsKK30KKworICAgIHN0YXRpYyB2b2lkCithdV9kZWxfZ3JvdXAobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgaW50CSAgICBpOworCisgICAgaSA9IGF1X2ZpbmRfZ3JvdXAobmFtZSk7CisgICAgaWYgKGkgPT0gQVVHUk9VUF9FUlJPUikJLyogdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3QgKi8KKwlFTVNHMihfKCJFMzY3OiBObyBzdWNoIGdyb3VwOiBcIiVzXCIiKSwgbmFtZSk7CisgICAgZWxzZQorICAgIHsKKwl2aW1fZnJlZShBVUdST1VQX05BTUUoaSkpOworCUFVR1JPVVBfTkFNRShpKSA9IE5VTEw7CisgICAgfQorfQorCisvKgorICogRmluZCB0aGUgSUQgb2YgYW4gYXV0b2NtZCBncm91cCBuYW1lLgorICogUmV0dXJuIGl0J3MgSUQuICBSZXR1cm5zIEFVR1JPVVBfRVJST1IgKDwgMCkgZm9yIGVycm9yLgorICovCisgICAgc3RhdGljIGludAorYXVfZmluZF9ncm91cChuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBpbnQJICAgIGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXVncm91cHMuZ2FfbGVuOyArK2kpCisJaWYgKEFVR1JPVVBfTkFNRShpKSAhPSBOVUxMICYmIFNUUkNNUChBVUdST1VQX05BTUUoaSksIG5hbWUpID09IDApCisJICAgIHJldHVybiBpOworICAgIHJldHVybiBBVUdST1VQX0VSUk9SOworfQorCisvKgorICogIjphdWdyb3VwIHtuYW1lfSIuCisgKi8KKyAgICB2b2lkCitkb19hdWdyb3VwKGFyZywgZGVsX2dyb3VwKQorICAgIGNoYXJfdQkqYXJnOworICAgIGludAkJZGVsX2dyb3VwOworeworICAgIGludAkgICAgaTsKKworICAgIGlmIChkZWxfZ3JvdXApCisgICAgeworCWlmICgqYXJnID09IE5VTCkKKwkgICAgRU1TRyhfKGVfYXJncmVxKSk7CisJZWxzZQorCSAgICBhdV9kZWxfZ3JvdXAoYXJnKTsKKyAgICB9CisgICAgZWxzZSBpZiAoU1RSSUNNUChhcmcsICJlbmQiKSA9PSAwKSAgIC8qICI6YXVnIGVuZCI6IGJhY2sgdG8gZ3JvdXAgMCAqLworCWN1cnJlbnRfYXVncm91cCA9IEFVR1JPVVBfREVGQVVMVDsKKyAgICBlbHNlIGlmICgqYXJnKQkJICAgIC8qICI6YXVnIHh4eCI6IHN3aXRjaCB0byBncm91cCB4eHggKi8KKyAgICB7CisJaSA9IGF1X25ld19ncm91cChhcmcpOworCWlmIChpICE9IEFVR1JPVVBfRVJST1IpCisJICAgIGN1cnJlbnRfYXVncm91cCA9IGk7CisgICAgfQorICAgIGVsc2UJCQkgICAgLyogIjphdWciOiBsaXN0IHRoZSBncm91cCBuYW1lcyAqLworICAgIHsKKwltc2dfc3RhcnQoKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXVncm91cHMuZ2FfbGVuOyArK2kpCisJeworCSAgICBpZiAoQVVHUk9VUF9OQU1FKGkpICE9IE5VTEwpCisJICAgIHsKKwkJbXNnX3B1dHMoQVVHUk9VUF9OQU1FKGkpKTsKKwkJbXNnX3B1dHMoKGNoYXJfdSAqKSIgICIpOworCSAgICB9CisJfQorCW1zZ19jbHJfZW9zKCk7CisJbXNnX2VuZCgpOworICAgIH0KK30KKworLyoKKyAqIFJldHVybiB0aGUgZXZlbnQgbnVtYmVyIGZvciBldmVudCBuYW1lICJzdGFydCIuCisgKiBSZXR1cm4gTlVNX0VWRU5UUyBpZiB0aGUgZXZlbnQgbmFtZSB3YXMgbm90IGZvdW5kLgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV4dCBldmVudCBuYW1lIGluICJlbmQiLgorICovCisgICAgc3RhdGljIEVWRU5UX1QKK2V2ZW50X25hbWUybnIoc3RhcnQsIGVuZCkKKyAgICBjaGFyX3UgICpzdGFydDsKKyAgICBjaGFyX3UgICoqZW5kOworeworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWk7CisgICAgaW50CQlsZW47CisKKyAgICAvKiB0aGUgZXZlbnQgbmFtZSBlbmRzIHdpdGggZW5kIG9mIGxpbmUsIGEgYmxhbmsgb3IgYSBjb21tYSAqLworICAgIGZvciAocCA9IHN0YXJ0OyAqcCAmJiAhdmltX2lzd2hpdGUoKnApICYmICpwICE9ICcsJzsgKytwKQorCTsKKyAgICBmb3IgKGkgPSAwOyBldmVudF9uYW1lc1tpXS5uYW1lICE9IE5VTEw7ICsraSkKKyAgICB7CisJbGVuID0gKGludClTVFJMRU4oZXZlbnRfbmFtZXNbaV0ubmFtZSk7CisJaWYgKGxlbiA9PSBwIC0gc3RhcnQgJiYgU1RSTklDTVAoZXZlbnRfbmFtZXNbaV0ubmFtZSwgc3RhcnQsIGxlbikgPT0gMCkKKwkgICAgYnJlYWs7CisgICAgfQorICAgIGlmICgqcCA9PSAnLCcpCisJKytwOworICAgICplbmQgPSBwOworICAgIGlmIChldmVudF9uYW1lc1tpXS5uYW1lID09IE5VTEwpCisJcmV0dXJuIE5VTV9FVkVOVFM7CisgICAgcmV0dXJuIGV2ZW50X25hbWVzW2ldLmV2ZW50OworfQorCisvKgorICogUmV0dXJuIHRoZSBuYW1lIGZvciBldmVudCAiZXZlbnQiLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitldmVudF9ucjJuYW1lKGV2ZW50KQorICAgIEVWRU5UX1QJZXZlbnQ7Cit7CisgICAgaW50CSAgICBpOworCisgICAgZm9yIChpID0gMDsgZXZlbnRfbmFtZXNbaV0ubmFtZSAhPSBOVUxMOyArK2kpCisJaWYgKGV2ZW50X25hbWVzW2ldLmV2ZW50ID09IGV2ZW50KQorCSAgICByZXR1cm4gKGNoYXJfdSAqKWV2ZW50X25hbWVzW2ldLm5hbWU7CisgICAgcmV0dXJuIChjaGFyX3UgKikiVW5rbm93biI7Cit9CisKKy8qCisgKiBTY2FuIG92ZXIgdGhlIGV2ZW50cy4gICIqIiBzdGFuZHMgZm9yIGFsbCBldmVudHMuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2ZpbmRfZW5kX2V2ZW50KGFyZywgaGF2ZV9ncm91cCkKKyAgICBjaGFyX3UgICphcmc7CisgICAgaW50CSAgICBoYXZlX2dyb3VwOwkgICAgLyogVFJVRSB3aGVuIGdyb3VwIG5hbWUgd2FzIGZvdW5kICovCit7CisgICAgY2hhcl91ICAqcGF0OworICAgIGNoYXJfdSAgKnA7CisKKyAgICBpZiAoKmFyZyA9PSAnKicpCisgICAgeworCWlmIChhcmdbMV0gJiYgIXZpbV9pc3doaXRlKGFyZ1sxXSkpCisJeworCSAgICBFTVNHMihfKCJFMjE1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciAqOiAlcyIpLCBhcmcpOworCSAgICByZXR1cm4gTlVMTDsKKwl9CisJcGF0ID0gYXJnICsgMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlmb3IgKHBhdCA9IGFyZzsgKnBhdCAmJiAhdmltX2lzd2hpdGUoKnBhdCk7IHBhdCA9IHApCisJeworCSAgICBpZiAoKGludClldmVudF9uYW1lMm5yKHBhdCwgJnApID49IChpbnQpTlVNX0VWRU5UUykKKwkgICAgeworCQlpZiAoaGF2ZV9ncm91cCkKKwkJICAgIEVNU0cyKF8oIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIiksIHBhdCk7CisJCWVsc2UKKwkJICAgIEVNU0cyKF8oIkUyMTY6IE5vIHN1Y2ggZ3JvdXAgb3IgZXZlbnQ6ICVzIiksIHBhdCk7CisJCXJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gcGF0OworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgImV2ZW50IiBpcyBpbmNsdWRlZCBpbiAnZXZlbnRpZ25vcmUnLgorICovCisgICAgc3RhdGljIGludAorZXZlbnRfaWdub3JlZChldmVudCkKKyAgICBFVkVOVF9UCWV2ZW50OworeworICAgIGNoYXJfdQkqcCA9IHBfZWk7CisKKyAgICBpZiAoU1RSSUNNUChwX2VpLCAiYWxsIikgPT0gMCkKKwlyZXR1cm4gVFJVRTsKKworICAgIHdoaWxlICgqcCkKKwlpZiAoZXZlbnRfbmFtZTJucihwLCAmcCkgPT0gZXZlbnQpCisJICAgIHJldHVybiBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogUmV0dXJuIE9LIHdoZW4gdGhlIGNvbnRlbnRzIG9mIHBfZWkgaXMgdmFsaWQsIEZBSUwgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitjaGVja19laSgpCit7CisgICAgY2hhcl91CSpwID0gcF9laTsKKworICAgIGlmIChTVFJJQ01QKHBfZWksICJhbGwiKSA9PSAwKQorCXJldHVybiBPSzsKKworICAgIHdoaWxlICgqcCkKKwlpZiAoZXZlbnRfbmFtZTJucihwLCAmcCkgPT0gTlVNX0VWRU5UUykKKwkgICAgcmV0dXJuIEZBSUw7CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBkb19hdXRvY21kKCkgLS0gaW1wbGVtZW50cyB0aGUgOmF1dG9jbWQgY29tbWFuZC4gIENhbiBiZSB1c2VkIGluIHRoZQorICogIGZvbGxvd2luZyB3YXlzOgorICoKKyAqIDphdXRvY21kIDxldmVudD4gPHBhdD4gPGNtZD4JICAgIEFkZCA8Y21kPiB0byB0aGUgbGlzdCBvZiBjb21tYW5kcyB0aGF0CisgKgkJCQkgICAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciA8ZXZlbnQ+CisgKgkJCQkgICAgd2hlbiBlZGl0aW5nIGEgZmlsZSBtYXRjaGluZyA8cGF0PiwgaW4KKyAqCQkJCSAgICB0aGUgY3VycmVudCBncm91cC4KKyAqIDphdXRvY21kIDxldmVudD4gPHBhdD4JICAgIFNob3cgdGhlIGF1dG8tY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoCisgKgkJCQkgICAgPGV2ZW50PiBhbmQgPHBhdD4uCisgKiA6YXV0b2NtZCA8ZXZlbnQ+CQkgICAgU2hvdyB0aGUgYXV0by1jb21tYW5kcyBhc3NvY2lhdGVkIHdpdGgKKyAqCQkJCSAgICA8ZXZlbnQ+LgorICogOmF1dG9jbWQJCQkgICAgU2hvdyBhbGwgYXV0by1jb21tYW5kcy4KKyAqIDphdXRvY21kISA8ZXZlbnQ+IDxwYXQ+IDxjbWQ+ICAgIFJlbW92ZSBhbGwgYXV0by1jb21tYW5kcyBhc3NvY2lhdGVkIHdpdGgKKyAqCQkJCSAgICA8ZXZlbnQ+IGFuZCA8cGF0PiwgYW5kIGFkZCB0aGUgY29tbWFuZAorICoJCQkJICAgIDxjbWQ+LCBmb3IgdGhlIGN1cnJlbnQgZ3JvdXAuCisgKiA6YXV0b2NtZCEgPGV2ZW50PiA8cGF0PgkgICAgUmVtb3ZlIGFsbCBhdXRvLWNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aAorICoJCQkJICAgIDxldmVudD4gYW5kIDxwYXQ+IGZvciB0aGUgY3VycmVudCBncm91cC4KKyAqIDphdXRvY21kISA8ZXZlbnQ+CQkgICAgUmVtb3ZlIGFsbCBhdXRvLWNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aAorICoJCQkJICAgIDxldmVudD4gZm9yIHRoZSBjdXJyZW50IGdyb3VwLgorICogOmF1dG9jbWQhCQkJICAgIFJlbW92ZSBBTEwgYXV0by1jb21tYW5kcyBmb3IgdGhlIGN1cnJlbnQKKyAqCQkJCSAgICBncm91cC4KKyAqCisgKiAgTXVsdGlwbGUgZXZlbnRzIGFuZCBwYXR0ZXJucyBtYXkgYmUgZ2l2ZW4gc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIEhlcmUgYXJlCisgKiAgc29tZSBleGFtcGxlczoKKyAqIDphdXRvY21kIGJ1ZnJlYWQsYnVmZW50ZXIgKi5jLCouaAlzZXQgdHc9MCBzbWFydGluZGVudCBub2ljCisgKiA6YXV0b2NtZCBidWZsZWF2ZQkgICAgICoJCXNldCB0dz03OSBub3NtYXJ0aW5kZW50IGljIGluZmVyY2FzZQorICoKKyAqIDphdXRvY21kICogKi5jCQlzaG93IGFsbCBhdXRvY29tbWFuZHMgZm9yICouYyBmaWxlcy4KKyAqLworICAgIHZvaWQKK2RvX2F1dG9jbWQoYXJnLCBmb3JjZWl0KQorICAgIGNoYXJfdSAgKmFyZzsKKyAgICBpbnQJICAgIGZvcmNlaXQ7Cit7CisgICAgY2hhcl91CSpwYXQ7CisgICAgY2hhcl91CSplbnZwYXQgPSBOVUxMOworICAgIGNoYXJfdQkqY21kOworICAgIEVWRU5UX1QJZXZlbnQ7CisgICAgaW50CQluZWVkX2ZyZWUgPSBGQUxTRTsKKyAgICBpbnQJCW5lc3RlZCA9IEZBTFNFOworICAgIGludAkJZ3JvdXA7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBhIGxlZ2FsIGdyb3VwIG5hbWUuICBJZiBub3QsIHVzZSBBVUdST1VQX0FMTC4KKyAgICAgKi8KKyAgICBncm91cCA9IGF1X2dldF9ncm91cGFyZygmYXJnKTsKKyAgICBpZiAoYXJnID09IE5VTEwpCSAgICAvKiBvdXQgb2YgbWVtb3J5ICovCisJcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBTY2FuIG92ZXIgdGhlIGV2ZW50cy4KKyAgICAgKiBJZiB3ZSBmaW5kIGFuIGlsbGVnYWwgbmFtZSwgcmV0dXJuIGhlcmUsIGRvbid0IGRvIGFueXRoaW5nLgorICAgICAqLworICAgIHBhdCA9IGZpbmRfZW5kX2V2ZW50KGFyZywgZ3JvdXAgIT0gQVVHUk9VUF9BTEwpOworICAgIGlmIChwYXQgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICAvKgorICAgICAqIFNjYW4gb3ZlciB0aGUgcGF0dGVybi4gIFB1dCBhIE5VTCBhdCB0aGUgZW5kLgorICAgICAqLworICAgIHBhdCA9IHNraXB3aGl0ZShwYXQpOworICAgIGNtZCA9IHBhdDsKKyAgICB3aGlsZSAoKmNtZCAmJiAoIXZpbV9pc3doaXRlKCpjbWQpIHx8IGNtZFstMV0gPT0gJ1xcJykpCisJY21kKys7CisgICAgaWYgKCpjbWQpCisJKmNtZCsrID0gTlVMOworCisgICAgLyogRXhwYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB0aGUgcGF0dGVybi4gIFNldCAnc2hlbGxzbGFzaCcsIHdlIHdhbnQKKyAgICAgKiBmb3J3YXJkIHNsYXNoZXMgaGVyZS4gKi8KKyAgICBpZiAodmltX3N0cmNocihwYXQsICckJykgIT0gTlVMTCB8fCB2aW1fc3RyY2hyKHBhdCwgJ34nKSAhPSBOVUxMKQorICAgIHsKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwlpbnQJcF9zc2xfc2F2ZSA9IHBfc3NsOworCisJcF9zc2wgPSBUUlVFOworI2VuZGlmCisJZW52cGF0ID0gZXhwYW5kX2Vudl9zYXZlKHBhdCk7CisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJcF9zc2wgPSBwX3NzbF9zYXZlOworI2VuZGlmCisJaWYgKGVudnBhdCAhPSBOVUxMKQorCSAgICBwYXQgPSBlbnZwYXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgIm5lc3RlZCIgZmxhZy4KKyAgICAgKi8KKyAgICBjbWQgPSBza2lwd2hpdGUoY21kKTsKKyAgICBpZiAoKmNtZCAhPSBOVUwgJiYgU1RSTkNNUChjbWQsICJuZXN0ZWQiLCA2KSA9PSAwICYmIHZpbV9pc3doaXRlKGNtZFs2XSkpCisgICAgeworCW5lc3RlZCA9IFRSVUU7CisJY21kID0gc2tpcHdoaXRlKGNtZCArIDYpOworICAgIH0KKworICAgIC8qCisgICAgICogRmluZCB0aGUgc3RhcnQgb2YgdGhlIGNvbW1hbmRzLgorICAgICAqIEV4cGFuZCA8c2ZpbGU+IGluIGl0LgorICAgICAqLworICAgIGlmICgqY21kICE9IE5VTCkKKyAgICB7CisJY21kID0gZXhwYW5kX3NmaWxlKGNtZCk7CisJaWYgKGNtZCA9PSBOVUxMKQkgICAgLyogc29tZSBlcnJvciAqLworCSAgICByZXR1cm47CisJbmVlZF9mcmVlID0gVFJVRTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFByaW50IGhlYWRlciB3aGVuIHNob3dpbmcgYXV0b2NvbW1hbmRzLgorICAgICAqLworICAgIGlmICghZm9yY2VpdCAmJiAqY21kID09IE5VTCkKKyAgICB7CisJLyogSGlnaGxpZ2h0IHRpdGxlICovCisJTVNHX1BVVFNfVElUTEUoXygiXG4tLS0gQXV0by1Db21tYW5kcyAtLS0iKSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBMb29wIG92ZXIgdGhlIGV2ZW50cy4KKyAgICAgKi8KKyAgICBsYXN0X2V2ZW50ID0gKEVWRU5UX1QpLTE7CQkvKiBmb3IgbGlzdGluZyB0aGUgZXZlbnQgbmFtZSAqLworICAgIGxhc3RfZ3JvdXAgPSBBVUdST1VQX0VSUk9SOwkJLyogZm9yIGxpc3RpbmcgdGhlIGdyb3VwIG5hbWUgKi8KKyAgICBpZiAoKmFyZyA9PSAnKicgfHwgKmFyZyA9PSBOVUwpCisgICAgeworCWZvciAoZXZlbnQgPSAoRVZFTlRfVCkwOyAoaW50KWV2ZW50IDwgKGludClOVU1fRVZFTlRTOworCQkJCQkgICAgZXZlbnQgPSAoRVZFTlRfVCkoKGludClldmVudCArIDEpKQorCSAgICBpZiAoZG9fYXV0b2NtZF9ldmVudChldmVudCwgcGF0LAorCQkJCQkgbmVzdGVkLCBjbWQsIGZvcmNlaXQsIGdyb3VwKSA9PSBGQUlMKQorCQlicmVhazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwl3aGlsZSAoKmFyZyAmJiAhdmltX2lzd2hpdGUoKmFyZykpCisJICAgIGlmIChkb19hdXRvY21kX2V2ZW50KGV2ZW50X25hbWUybnIoYXJnLCAmYXJnKSwgcGF0LAorCQkJCQluZXN0ZWQsCWNtZCwgZm9yY2VpdCwgZ3JvdXApID09IEZBSUwpCisJCWJyZWFrOworICAgIH0KKworICAgIGlmIChuZWVkX2ZyZWUpCisJdmltX2ZyZWUoY21kKTsKKyAgICB2aW1fZnJlZShlbnZwYXQpOworfQorCisvKgorICogRmluZCB0aGUgZ3JvdXAgSUQgaW4gYSAiOmF1dG9jbWQiIG9yICI6ZG9hdXRvY21kIiBhcmd1bWVudC4KKyAqIFRoZSAiYXJncCIgYXJndW1lbnQgaXMgYWR2YW5jZWQgdG8gdGhlIGZvbGxvd2luZyBhcmd1bWVudC4KKyAqCisgKiBSZXR1cm5zIHRoZSBncm91cCBJRCwgQVVHUk9VUF9FUlJPUiBmb3IgZXJyb3IgKG91dCBvZiBtZW1vcnkpLgorICovCisgICAgc3RhdGljIGludAorYXVfZ2V0X2dyb3VwYXJnKGFyZ3ApCisgICAgY2hhcl91CSoqYXJncDsKK3sKKyAgICBjaGFyX3UJKmdyb3VwX25hbWU7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqYXJnID0gKmFyZ3A7CisgICAgaW50CQlncm91cCA9IEFVR1JPVVBfQUxMOworCisgICAgcCA9IHNraXB0b3doaXRlKGFyZyk7CisgICAgaWYgKHAgPiBhcmcpCisgICAgeworCWdyb3VwX25hbWUgPSB2aW1fc3RybnNhdmUoYXJnLCAoaW50KShwIC0gYXJnKSk7CisJaWYgKGdyb3VwX25hbWUgPT0gTlVMTCkJCS8qIG91dCBvZiBtZW1vcnkgKi8KKwkgICAgcmV0dXJuIEFVR1JPVVBfRVJST1I7CisJZ3JvdXAgPSBhdV9maW5kX2dyb3VwKGdyb3VwX25hbWUpOworCWlmIChncm91cCA9PSBBVUdST1VQX0VSUk9SKQorCSAgICBncm91cCA9IEFVR1JPVVBfQUxMOwkvKiBubyBtYXRjaCwgdXNlIGFsbCBncm91cHMgKi8KKwllbHNlCisJICAgICphcmdwID0gc2tpcHdoaXRlKHApOwkvKiBtYXRjaCwgc2tpcCBvdmVyIGdyb3VwIG5hbWUgKi8KKwl2aW1fZnJlZShncm91cF9uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIGdyb3VwOworfQorCisvKgorICogZG9fYXV0b2NtZCgpIGZvciBvbmUgZXZlbnQuCisgKiBJZiAqcGF0ID09IE5VTCBkbyBmb3IgYWxsIHBhdHRlcm5zLgorICogSWYgKmNtZCA9PSBOVUwgc2hvdyBlbnRyaWVzLgorICogSWYgZm9yY2VpdCA9PSBUUlVFIGRlbGV0ZSBlbnRyaWVzLgorICogSWYgZ3JvdXAgaXMgbm90IEFVR1JPVVBfQUxMLCBvbmx5IHVzZSB0aGlzIGdyb3VwLgorICovCisgICAgc3RhdGljIGludAorZG9fYXV0b2NtZF9ldmVudChldmVudCwgcGF0LCBuZXN0ZWQsIGNtZCwgZm9yY2VpdCwgZ3JvdXApCisgICAgRVZFTlRfVAlldmVudDsKKyAgICBjaGFyX3UJKnBhdDsKKyAgICBpbnQJCW5lc3RlZDsKKyAgICBjaGFyX3UJKmNtZDsKKyAgICBpbnQJCWZvcmNlaXQ7CisgICAgaW50CQlncm91cDsKK3sKKyAgICBBdXRvUGF0CSphcDsKKyAgICBBdXRvUGF0CSoqcHJldl9hcDsKKyAgICBBdXRvQ21kCSphYzsKKyAgICBBdXRvQ21kCSoqcHJldl9hYzsKKyAgICBpbnQJCWJyYWNlX2xldmVsOworICAgIGNoYXJfdQkqZW5kcGF0OworICAgIGludAkJZmluZGdyb3VwOworICAgIGludAkJYWxsZ3JvdXBzOworICAgIGludAkJcGF0bGVuOworCisgICAgaWYgKGdyb3VwID09IEFVR1JPVVBfQUxMKQorCWZpbmRncm91cCA9IGN1cnJlbnRfYXVncm91cDsKKyAgICBlbHNlCisJZmluZGdyb3VwID0gZ3JvdXA7CisgICAgYWxsZ3JvdXBzID0gKGdyb3VwID09IEFVR1JPVVBfQUxMICYmICFmb3JjZWl0ICYmICpjbWQgPT0gTlVMKTsKKworICAgIC8qCisgICAgICogU2hvdyBvciBkZWxldGUgYWxsIHBhdHRlcm5zIGZvciBhbiBldmVudC4KKyAgICAgKi8KKyAgICBpZiAoKnBhdCA9PSBOVUwpCisgICAgeworCWZvciAoYXAgPSBmaXJzdF9hdXRvcGF0WyhpbnQpZXZlbnRdOyBhcCAhPSBOVUxMOyBhcCA9IGFwLT5uZXh0KQorCXsKKwkgICAgaWYgKGZvcmNlaXQpICAvKiBkZWxldGUgdGhlIEF1dG9QYXQsIGlmIGl0J3MgaW4gdGhlIGN1cnJlbnQgZ3JvdXAgKi8KKwkgICAgeworCQlpZiAoYXAtPmdyb3VwID09IGZpbmRncm91cCkKKwkJICAgIGF1X3JlbW92ZV9wYXQoYXApOworCSAgICB9CisJICAgIGVsc2UgaWYgKGdyb3VwID09IEFVR1JPVVBfQUxMIHx8IGFwLT5ncm91cCA9PSBncm91cCkKKwkJc2hvd19hdXRvY21kKGFwLCBldmVudCk7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogTG9vcCB0aHJvdWdoIGFsbCB0aGUgc3BlY2lmaWVkIHBhdHRlcm5zLgorICAgICAqLworICAgIGZvciAoIDsgKnBhdDsgcGF0ID0gKCplbmRwYXQgPT0gJywnID8gZW5kcGF0ICsgMSA6IGVuZHBhdCkpCisgICAgeworCS8qCisJICogRmluZCBlbmQgb2YgdGhlIHBhdHRlcm4uCisJICogV2F0Y2ggb3V0IGZvciBhIGNvbW1hIGluIGJyYWNlcywgbGlrZSAiKi5ce29iaixvXH0iLgorCSAqLworCWJyYWNlX2xldmVsID0gMDsKKwlmb3IgKGVuZHBhdCA9IHBhdDsgKmVuZHBhdCAmJiAoKmVuZHBhdCAhPSAnLCcgfHwgYnJhY2VfbGV2ZWwKKwkJCQkJICAgICB8fCBlbmRwYXRbLTFdID09ICdcXCcpOyArK2VuZHBhdCkKKwl7CisJICAgIGlmICgqZW5kcGF0ID09ICd7JykKKwkJYnJhY2VfbGV2ZWwrKzsKKwkgICAgZWxzZSBpZiAoKmVuZHBhdCA9PSAnfScpCisJCWJyYWNlX2xldmVsLS07CisJfQorCWlmIChwYXQgPT0gZW5kcGF0KQkJLyogaWdub3JlIHNpbmdsZSBjb21tYSAqLworCSAgICBjb250aW51ZTsKKwlwYXRsZW4gPSAoaW50KShlbmRwYXQgLSBwYXQpOworCisJLyoKKwkgKiBGaW5kIEF1dG9QYXQgZW50cmllcyB3aXRoIHRoaXMgcGF0dGVybi4KKwkgKi8KKwlwcmV2X2FwID0gJmZpcnN0X2F1dG9wYXRbKGludClldmVudF07CisJd2hpbGUgKChhcCA9ICpwcmV2X2FwKSAhPSBOVUxMKQorCXsKKwkgICAgaWYgKGFwLT5wYXQgIT0gTlVMTCkKKwkgICAgeworCQkvKiBBY2NlcHQgYSBwYXR0ZXJuIHdoZW46CisJCSAqIC0gYSBncm91cCB3YXMgc3BlY2lmaWVkIGFuZCBpdCdzIHRoYXQgZ3JvdXAsIG9yIGEgZ3JvdXAgd2FzCisJCSAqICAgbm90IHNwZWNpZmllZCBhbmQgaXQncyB0aGUgY3VycmVudCBncm91cCwgb3IgYSBncm91cCB3YXMKKwkJICogICBub3Qgc3BlY2lmaWVkIGFuZCB3ZSBhcmUgbGlzdGluZworCQkgKiAtIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4gbWF0Y2hlcworCQkgKiAtIHRoZSBwYXR0ZXJuIG1hdGNoZXMKKwkJICovCisJCWlmICgoYWxsZ3JvdXBzIHx8IGFwLT5ncm91cCA9PSBmaW5kZ3JvdXApCisJCQkmJiBhcC0+cGF0bGVuID09IHBhdGxlbgorCQkJJiYgU1RSTkNNUChwYXQsIGFwLT5wYXQsIHBhdGxlbikgPT0gMCkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIFJlbW92ZSBleGlzdGluZyBhdXRvY29tbWFuZHMuCisJCSAgICAgKiBJZiBhZGRpbmcgYW55IG5ldyBhdXRvY21kJ3MgZm9yIHRoaXMgQXV0b1BhdCwgZG9uJ3QKKwkJICAgICAqIGRlbGV0ZSB0aGUgcGF0dGVybiBmcm9tIHRoZSBhdXRvcGF0IGxpc3QsIGFwcGVuZCB0bworCQkgICAgICogdGhpcyBsaXN0LgorCQkgICAgICovCisJCSAgICBpZiAoZm9yY2VpdCkKKwkJICAgIHsKKwkJCWlmICgqY21kICE9IE5VTCAmJiBhcC0+bmV4dCA9PSBOVUxMKQorCQkJeworCQkJICAgIGF1X3JlbW92ZV9jbWRzKGFwKTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCWF1X3JlbW92ZV9wYXQoYXApOworCQkgICAgfQorCisJCSAgICAvKgorCQkgICAgICogU2hvdyBhdXRvY21kJ3MgZm9yIHRoaXMgYXV0b3BhdAorCQkgICAgICovCisJCSAgICBlbHNlIGlmICgqY21kID09IE5VTCkKKwkJCXNob3dfYXV0b2NtZChhcCwgZXZlbnQpOworCisJCSAgICAvKgorCQkgICAgICogQWRkIGF1dG9jbWQgdG8gdGhpcyBhdXRvcGF0LCBpZiBpdCdzIHRoZSBsYXN0IG9uZS4KKwkJICAgICAqLworCQkgICAgZWxzZSBpZiAoYXAtPm5leHQgPT0gTlVMTCkKKwkJCWJyZWFrOworCQl9CisJICAgIH0KKwkgICAgcHJldl9hcCA9ICZhcC0+bmV4dDsKKwl9CisKKwkvKgorCSAqIEFkZCBhIG5ldyBjb21tYW5kLgorCSAqLworCWlmICgqY21kICE9IE5VTCkKKwl7CisJICAgIC8qCisJICAgICAqIElmIHRoZSBwYXR0ZXJuIHdlIHdhbnQgdG8gYWRkIGEgY29tbWFuZCB0byBkb2VzIGFwcGVhciBhdCB0aGUKKwkgICAgICogZW5kIG9mIHRoZSBsaXN0IChvciBub3QgaXMgbm90IGluIHRoZSBsaXN0IGF0IGFsbCksIGFkZCB0aGUKKwkgICAgICogcGF0dGVybiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgorCSAgICAgKi8KKwkgICAgaWYgKGFwID09IE5VTEwpCisJICAgIHsKKwkJYXAgPSAoQXV0b1BhdCAqKWFsbG9jKCh1bnNpZ25lZClzaXplb2YoQXV0b1BhdCkpOworCQlpZiAoYXAgPT0gTlVMTCkKKwkJICAgIHJldHVybiBGQUlMOworCQlhcC0+cGF0ID0gdmltX3N0cm5zYXZlKHBhdCwgcGF0bGVuKTsKKwkJYXAtPnBhdGxlbiA9IHBhdGxlbjsKKwkJaWYgKGFwLT5wYXQgPT0gTlVMTCkKKwkJeworCQkgICAgdmltX2ZyZWUoYXApOworCQkgICAgcmV0dXJuIEZBSUw7CisJCX0KKwkJYXAtPnJlZ19wYXQgPSBmaWxlX3BhdF90b19yZWdfcGF0KHBhdCwgZW5kcGF0LAorCQkJCQkJICAgICAgICZhcC0+YWxsb3dfZGlycywgVFJVRSk7CisJCWlmIChhcC0+cmVnX3BhdCA9PSBOVUxMKQorCQl7CisJCSAgICB2aW1fZnJlZShhcC0+cGF0KTsKKwkJICAgIHZpbV9mcmVlKGFwKTsKKwkJICAgIHJldHVybiBGQUlMOworCQl9CisJCWFwLT5jbWRzID0gTlVMTDsKKwkJKnByZXZfYXAgPSBhcDsKKwkJYXAtPm5leHQgPSBOVUxMOworCQlpZiAoZ3JvdXAgPT0gQVVHUk9VUF9BTEwpCisJCSAgICBhcC0+Z3JvdXAgPSBjdXJyZW50X2F1Z3JvdXA7CisJCWVsc2UKKwkJICAgIGFwLT5ncm91cCA9IGdyb3VwOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogQWRkIHRoZSBhdXRvY21kIGF0IHRoZSBlbmQgb2YgdGhlIEF1dG9DbWQgbGlzdC4KKwkgICAgICovCisJICAgIHByZXZfYWMgPSAmKGFwLT5jbWRzKTsKKwkgICAgd2hpbGUgKChhYyA9ICpwcmV2X2FjKSAhPSBOVUxMKQorCQlwcmV2X2FjID0gJmFjLT5uZXh0OworCSAgICBhYyA9IChBdXRvQ21kICopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihBdXRvQ21kKSk7CisJICAgIGlmIChhYyA9PSBOVUxMKQorCQlyZXR1cm4gRkFJTDsKKwkgICAgYWMtPmNtZCA9IHZpbV9zdHJzYXZlKGNtZCk7CisjaWZkZWYgRkVBVF9FVkFMCisJICAgIGFjLT5zY3JpcHRJRCA9IGN1cnJlbnRfU0lEOworI2VuZGlmCisJICAgIGlmIChhYy0+Y21kID09IE5VTEwpCisJICAgIHsKKwkJdmltX2ZyZWUoYWMpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICBhYy0+bmV4dCA9IE5VTEw7CisJICAgICpwcmV2X2FjID0gYWM7CisJICAgIGFjLT5uZXN0ZWQgPSBuZXN0ZWQ7CisJfQorICAgIH0KKworICAgIGF1X2NsZWFudXAoKTsJLyogbWF5IHJlYWxseSBkZWxldGUgcmVtb3ZlZCBwYXR0ZXJucy9jb21tYW5kcyBub3cgKi8KKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiAiOmRvYXV0b2NtZCBbZ3JvdXBdIGV2ZW50IFtmbmFtZV0iLgorICogUmV0dXJuIE9LIGZvciBzdWNjZXNzLCBGQUlMIGZvciBmYWlsdXJlOworICovCisgICAgaW50Citkb19kb2F1dG9jbWQoYXJnLCBkb19tc2cpCisgICAgY2hhcl91CSphcmc7CisgICAgaW50CQlkb19tc2c7CSAgICAvKiBnaXZlIG1lc3NhZ2UgZm9yIG5vIG1hdGNoaW5nIGF1dG9jbWRzPyAqLworeworICAgIGNoYXJfdQkqZm5hbWU7CisgICAgaW50CQlub3RoaW5nX2RvbmUgPSBUUlVFOworICAgIGludAkJZ3JvdXA7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBhIGxlZ2FsIGdyb3VwIG5hbWUuICBJZiBub3QsIHVzZSBBVUdST1VQX0FMTC4KKyAgICAgKi8KKyAgICBncm91cCA9IGF1X2dldF9ncm91cGFyZygmYXJnKTsKKyAgICBpZiAoYXJnID09IE5VTEwpCSAgICAvKiBvdXQgb2YgbWVtb3J5ICovCisJcmV0dXJuIEZBSUw7CisKKyAgICBpZiAoKmFyZyA9PSAnKicpCisgICAgeworCUVNU0coXygiRTIxNzogQ2FuJ3QgZXhlY3V0ZSBhdXRvY29tbWFuZHMgZm9yIEFMTCBldmVudHMiKSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTY2FuIG92ZXIgdGhlIGV2ZW50cy4KKyAgICAgKiBJZiB3ZSBmaW5kIGFuIGlsbGVnYWwgbmFtZSwgcmV0dXJuIGhlcmUsIGRvbid0IGRvIGFueXRoaW5nLgorICAgICAqLworICAgIGZuYW1lID0gZmluZF9lbmRfZXZlbnQoYXJnLCBncm91cCAhPSBBVUdST1VQX0FMTCk7CisgICAgaWYgKGZuYW1lID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBmbmFtZSA9IHNraXB3aGl0ZShmbmFtZSk7CisKKyAgICAvKgorICAgICAqIExvb3Agb3ZlciB0aGUgZXZlbnRzLgorICAgICAqLworICAgIHdoaWxlICgqYXJnICYmICF2aW1faXN3aGl0ZSgqYXJnKSkKKwlpZiAoYXBwbHlfYXV0b2NtZHNfZ3JvdXAoZXZlbnRfbmFtZTJucihhcmcsICZhcmcpLAorCQkJCSAgICAgIGZuYW1lLCBOVUxMLCBUUlVFLCBncm91cCwgY3VyYnVmLCBOVUxMKSkKKwkgICAgbm90aGluZ19kb25lID0gRkFMU0U7CisKKyAgICBpZiAobm90aGluZ19kb25lICYmIGRvX21zZykKKwlNU0coXygiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIikpOworCisjaWZkZWYgRkVBVF9FVkFMCisgICAgcmV0dXJuIGFib3J0aW5nKCkgPyBGQUlMIDogT0s7CisjZWxzZQorICAgIHJldHVybiBPSzsKKyNlbmRpZgorfQorCisvKgorICogIjpkb2F1dG9hbGwiOiBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgZWFjaCBsb2FkZWQgYnVmZmVyLgorICovCisgICAgdm9pZAorZXhfZG9hdXRvYWxsKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQlyZXR2YWw7CisgICAgYWNvX3NhdmVfVAlhY287CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIC8qCisgICAgICogVGhpcyBpcyBhIGJpdCB0cmlja3k6IEZvciBzb21lIGNvbW1hbmRzIGN1cndpbi0+d19idWZmZXIgbmVlZHMgdG8gYmUKKyAgICAgKiBlcXVhbCB0byBjdXJidWYsIGJ1dCBmb3Igc29tZSBidWZmZXJzIHRoZXJlIG1heSBub3QgYmUgYSB3aW5kb3cuCisgICAgICogU28gd2UgY2hhbmdlIHRoZSBidWZmZXIgZm9yIHRoZSBjdXJyZW50IHdpbmRvdyBmb3IgYSBtb21lbnQuICBUaGlzCisgICAgICogZ2l2ZXMgcHJvYmxlbXMgd2hlbiB0aGUgYXV0b2NvbW1hbmRzIG1ha2UgY2hhbmdlcyB0byB0aGUgbGlzdCBvZgorICAgICAqIGJ1ZmZlcnMgb3Igd2luZG93cy4uLgorICAgICAqLworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKyAgICB7CisJaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9tZnAgIT0gTlVMTCkKKwl7CisJICAgIC8qIGZpbmQgYSB3aW5kb3cgZm9yIHRoaXMgYnVmZmVyIGFuZCBzYXZlIHNvbWUgdmFsdWVzICovCisJICAgIGF1Y21kX3ByZXBidWYoJmFjbywgYnVmKTsKKworCSAgICAvKiBleGVjdXRlIHRoZSBhdXRvY29tbWFuZHMgZm9yIHRoaXMgYnVmZmVyICovCisJICAgIHJldHZhbCA9IGRvX2RvYXV0b2NtZChlYXAtPmFyZywgRkFMU0UpOworCSAgICBkb19tb2RlbGluZXMoKTsKKworCSAgICAvKiByZXN0b3JlIHRoZSBjdXJyZW50IHdpbmRvdyAqLworCSAgICBhdWNtZF9yZXN0YnVmKCZhY28pOworCisJICAgIC8qIHN0b3AgaWYgdGhlcmUgaXMgc29tZSBlcnJvciBvciBidWZmZXIgd2FzIGRlbGV0ZWQgKi8KKwkgICAgaWYgKHJldHZhbCA9PSBGQUlMIHx8ICFidWZfdmFsaWQoYnVmKSkKKwkJYnJlYWs7CisJfQorICAgIH0KKworICAgIGNoZWNrX2N1cnNvcigpOwkgICAgLyoganVzdCBpbiBjYXNlIGxpbmVzIGdvdCBkZWxldGVkICovCit9CisKKy8qCisgKiBQcmVwYXJlIGZvciBleGVjdXRpbmcgYXV0b2NvbW1hbmRzIGZvciAoaGlkZGVuKSBidWZmZXIgImJ1ZiIuCisgKiBTZWFyY2ggYSB3aW5kb3cgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlci4gIFNhdmUgdGhlIGN1cnNvciBwb3NpdGlvbiBhbmQKKyAqIHNjcmVlbiBvZmZzZXQuCisgKiBTZXQgImN1cmJ1ZiIgYW5kICJjdXJ3aW4iIHRvIG1hdGNoICJidWYiLgorICovCisgICAgdm9pZAorYXVjbWRfcHJlcGJ1ZihhY28sIGJ1ZikKKyAgICBhY29fc2F2ZV9UCSphY287CQkvKiBzdHJ1Y3R1cmUgdG8gc2F2ZSB2YWx1ZXMgaW4gKi8KKyAgICBidWZfVAkqYnVmOwkJLyogbmV3IGN1cmJ1ZiAqLworeworICAgIHdpbl9UCSp3aW47CisKKyAgICBhY28tPm5ld19jdXJidWYgPSBidWY7CisKKyAgICAvKiBGaW5kIGEgd2luZG93IHRoYXQgaXMgZm9yIHRoZSBuZXcgYnVmZmVyICovCisgICAgaWYgKGJ1ZiA9PSBjdXJidWYpCQkvKiBiZSBxdWljayB3aGVuIGJ1ZiBpcyBjdXJidWYgKi8KKwl3aW4gPSBjdXJ3aW47CisgICAgZWxzZQorI2lmZGVmIEZFQVRfV0lORE9XUworCWZvciAod2luID0gZmlyc3R3aW47IHdpbiAhPSBOVUxMOyB3aW4gPSB3aW4tPndfbmV4dCkKKwkgICAgaWYgKHdpbi0+d19idWZmZXIgPT0gYnVmKQorCQlicmVhazsKKyNlbHNlCisJd2luID0gTlVMTDsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBQcmVmZXIgdG8gdXNlIGFuIGV4aXN0aW5nIHdpbmRvdyBmb3IgdGhlIGJ1ZmZlciwgaXQgaGFzIHRoZSBsZWFzdCBzaWRlCisgICAgICogZWZmZWN0cyAoZXNwLiBpZiAiYnVmIiBpcyBjdXJidWYpLgorICAgICAqIE90aGVyd2lzZSwgdXNlIGN1cndpbiBmb3IgImJ1ZiIuICBJdCBtaWdodCBtYWtlIHNvbWUgaXRlbXMgaW4gdGhlCisgICAgICogd2luZG93IGludmFsaWQuICBBdCBsZWFzdCBzYXZlIHRoZSBjdXJzb3IgYW5kIHRvcGxpbmUuCisgICAgICovCisgICAgaWYgKHdpbiAhPSBOVUxMKQorICAgIHsKKwkvKiB0aGVyZSBpcyBhIHdpbmRvdyBmb3IgImJ1ZiIsIG1ha2UgaXQgdGhlIGN1cndpbiAqLworCWFjby0+c2F2ZV9jdXJ3aW4gPSBjdXJ3aW47CisJY3Vyd2luID0gd2luOworCWFjby0+c2F2ZV9idWYgPSB3aW4tPndfYnVmZmVyOworCWFjby0+bmV3X2N1cndpbiA9IHdpbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiB0aGVyZSBpcyBubyB3aW5kb3cgZm9yICJidWYiLCB1c2UgY3Vyd2luICovCisJYWNvLT5zYXZlX2N1cndpbiA9IE5VTEw7CisJYWNvLT5zYXZlX2J1ZiA9IGN1cmJ1ZjsKKwktLWN1cmJ1Zi0+Yl9ud2luZG93czsKKwljdXJ3aW4tPndfYnVmZmVyID0gYnVmOworCSsrYnVmLT5iX253aW5kb3dzOworCisJLyogc2F2ZSBjdXJzb3IgYW5kIHRvcGxpbmUsIHNldCB0aGVtIHRvIHNhZmUgdmFsdWVzICovCisJYWNvLT5zYXZlX2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7CisJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gMTsKKwljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisJYWNvLT5zYXZlX3RvcGxpbmUgPSBjdXJ3aW4tPndfdG9wbGluZTsKKwljdXJ3aW4tPndfdG9wbGluZSA9IDE7CisjaWZkZWYgRkVBVF9ESUZGCisJYWNvLT5zYXZlX3RvcGZpbGwgPSBjdXJ3aW4tPndfdG9wZmlsbDsKKwljdXJ3aW4tPndfdG9wZmlsbCA9IDA7CisjZW5kaWYKKyAgICB9CisKKyAgICBjdXJidWYgPSBidWY7Cit9CisKKy8qCisgKiBDbGVhbnVwIGFmdGVyIGV4ZWN1dGluZyBhdXRvY29tbWFuZHMgZm9yIGEgKGhpZGRlbikgYnVmZmVyLgorICogUmVzdG9yZSB0aGUgd2luZG93IGFzIGl0IHdhcyAoaWYgcG9zc2libGUpLgorICovCisgICAgdm9pZAorYXVjbWRfcmVzdGJ1ZihhY28pCisgICAgYWNvX3NhdmVfVAkqYWNvOwkJLyogc3RydWN0dXJlIGhvbGRpbmcgc2F2ZWQgdmFsdWVzICovCit7CisgICAgaWYgKGFjby0+c2F2ZV9jdXJ3aW4gIT0gTlVMTCkKKyAgICB7CisJLyogcmVzdG9yZSBjdXJ3aW4gKi8KKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwlpZiAod2luX3ZhbGlkKGFjby0+c2F2ZV9jdXJ3aW4pKQorI2VuZGlmCisJeworCSAgICAvKiByZXN0b3JlIHRoZSBidWZmZXIgd2hpY2ggd2FzIHByZXZpb3VzbHkgZWRpdGVkIGJ5IGN1cndpbiwgaWYKKwkgICAgICogaXQncyBzdGlsbCB0aGUgc2FtZSB3aW5kb3cgYW5kIGl0J3MgdmFsaWQgKi8KKwkgICAgaWYgKGN1cndpbiA9PSBhY28tPm5ld19jdXJ3aW4KKwkJICAgICYmIGJ1Zl92YWxpZChhY28tPnNhdmVfYnVmKQorCQkgICAgJiYgYWNvLT5zYXZlX2J1Zi0+Yl9tbC5tbF9tZnAgIT0gTlVMTCkKKwkgICAgeworCQktLWN1cmJ1Zi0+Yl9ud2luZG93czsKKwkJY3VyYnVmID0gYWNvLT5zYXZlX2J1ZjsKKwkJY3Vyd2luLT53X2J1ZmZlciA9IGN1cmJ1ZjsKKwkJKytjdXJidWYtPmJfbndpbmRvd3M7CisJICAgIH0KKworCSAgICBjdXJ3aW4gPSBhY28tPnNhdmVfY3Vyd2luOworCSAgICBjdXJidWYgPSBjdXJ3aW4tPndfYnVmZmVyOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiByZXN0b3JlIGJ1ZmZlciBmb3IgY3Vyd2luIGlmIGl0IHN0aWxsIGV4aXN0cyBhbmQgaXMgbG9hZGVkICovCisJaWYgKGJ1Zl92YWxpZChhY28tPnNhdmVfYnVmKSAmJiBhY28tPnNhdmVfYnVmLT5iX21sLm1sX21mcCAhPSBOVUxMKQorCXsKKwkgICAgLS1jdXJidWYtPmJfbndpbmRvd3M7CisJICAgIGN1cmJ1ZiA9IGFjby0+c2F2ZV9idWY7CisJICAgIGN1cndpbi0+d19idWZmZXIgPSBjdXJidWY7CisJICAgICsrY3VyYnVmLT5iX253aW5kb3dzOworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gYWNvLT5zYXZlX2N1cnNvcjsKKwkgICAgY2hlY2tfY3Vyc29yKCk7CisJICAgIC8qIGNoZWNrIHRvcGxpbmUgPCBsaW5lX2NvdW50LCBpbiBjYXNlIGxpbmVzIGdvdCBkZWxldGVkICovCisJICAgIGlmIChhY28tPnNhdmVfdG9wbGluZSA8PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkgICAgeworCQljdXJ3aW4tPndfdG9wbGluZSA9IGFjby0+c2F2ZV90b3BsaW5lOworI2lmZGVmIEZFQVRfRElGRgorCQljdXJ3aW4tPndfdG9wZmlsbCA9IGFjby0+c2F2ZV90b3BmaWxsOworI2VuZGlmCisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWN1cndpbi0+d190b3BsaW5lID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisjaWZkZWYgRkVBVF9ESUZGCisJCWN1cndpbi0+d190b3BmaWxsID0gMDsKKyNlbmRpZgorCSAgICB9CisJfQorICAgIH0KK30KKworc3RhdGljIGludAlhdXRvY21kX25lc3RlZCA9IEZBTFNFOworCisvKgorICogRXhlY3V0ZSBhdXRvY29tbWFuZHMgZm9yICJldmVudCIgYW5kIGZpbGUgbmFtZSAiZm5hbWUiLgorICogUmV0dXJuIFRSVUUgaWYgc29tZSBjb21tYW5kcyB3ZXJlIGV4ZWN1dGVkLgorICovCisgICAgaW50CithcHBseV9hdXRvY21kcyhldmVudCwgZm5hbWUsIGZuYW1lX2lvLCBmb3JjZSwgYnVmKQorICAgIEVWRU5UX1QJZXZlbnQ7CisgICAgY2hhcl91CSpmbmFtZTsJICAgIC8qIE5VTEwgb3IgZW1wdHkgbWVhbnMgdXNlIGFjdHVhbCBmaWxlIG5hbWUgKi8KKyAgICBjaGFyX3UJKmZuYW1lX2lvOyAgLyogZm5hbWUgdG8gdXNlIGZvciA8YWZpbGU+IG9uIGNtZGxpbmUgKi8KKyAgICBpbnQJCWZvcmNlOwkgICAgLyogd2hlbiBUUlVFLCBpZ25vcmUgYXV0b2NtZF9idXN5ICovCisgICAgYnVmX1QJKmJ1ZjsJICAgIC8qIGJ1ZmZlciBmb3IgPGFidWY+ICovCit7CisgICAgcmV0dXJuIGFwcGx5X2F1dG9jbWRzX2dyb3VwKGV2ZW50LCBmbmFtZSwgZm5hbWVfaW8sIGZvcmNlLAorCQkJCQkJICAgICAgQVVHUk9VUF9BTEwsIGJ1ZiwgTlVMTCk7Cit9CisKKy8qCisgKiBMaWtlIGFwcGx5X2F1dG9jbWRzKCksIGJ1dCB3aXRoIGV4dHJhICJlYXAiIGFyZ3VtZW50LiAgVGhpcyB0YWtlcyBjYXJlIG9mCisgKiBzZXR0aW5nIHY6ZmlsZWFyZy4KKyAqLworICAgIHN0YXRpYyBpbnQKK2FwcGx5X2F1dG9jbWRzX2V4YXJnKGV2ZW50LCBmbmFtZSwgZm5hbWVfaW8sIGZvcmNlLCBidWYsIGVhcCkKKyAgICBFVkVOVF9UCWV2ZW50OworICAgIGNoYXJfdQkqZm5hbWU7CisgICAgY2hhcl91CSpmbmFtZV9pbzsKKyAgICBpbnQJCWZvcmNlOworICAgIGJ1Zl9UCSpidWY7CisgICAgZXhhcmdfVAkqZWFwOworeworICAgIHJldHVybiBhcHBseV9hdXRvY21kc19ncm91cChldmVudCwgZm5hbWUsIGZuYW1lX2lvLCBmb3JjZSwKKwkJCQkJCSAgICAgICBBVUdST1VQX0FMTCwgYnVmLCBlYXApOworfQorCisvKgorICogTGlrZSBhcHBseV9hdXRvY21kcygpLCBidXQgaGFuZGxlcyB0aGUgY2FsbGVyJ3MgcmV0dmFsLiAgSWYgdGhlIHNjcmlwdAorICogcHJvY2Vzc2luZyBpcyBiZWluZyBhYm9ydGVkIG9yIGlmIHJldHZhbCBpcyBGQUlMIHdoZW4gaW5zaWRlIGEgdHJ5CisgKiBjb25kaXRpb25hbCwgbm8gYXV0b2NvbW1hbmRzIGFyZSBleGVjdXRlZC4gIElmIG90aGVyd2lzZSB0aGUgYXV0b2NvbW1hbmRzCisgKiBjYXVzZSB0aGUgc2NyaXB0IHRvIGJlIGFib3J0ZWQsIHJldHZhbCBpcyBzZXQgdG8gRkFJTC4KKyAqLworICAgIGludAorYXBwbHlfYXV0b2NtZHNfcmV0dmFsKGV2ZW50LCBmbmFtZSwgZm5hbWVfaW8sIGZvcmNlLCBidWYsIHJldHZhbCkKKyAgICBFVkVOVF9UCWV2ZW50OworICAgIGNoYXJfdQkqZm5hbWU7CSAgICAvKiBOVUxMIG9yIGVtcHR5IG1lYW5zIHVzZSBhY3R1YWwgZmlsZSBuYW1lICovCisgICAgY2hhcl91CSpmbmFtZV9pbzsgIC8qIGZuYW1lIHRvIHVzZSBmb3IgPGFmaWxlPiBvbiBjbWRsaW5lICovCisgICAgaW50CQlmb3JjZTsJICAgIC8qIHdoZW4gVFJVRSwgaWdub3JlIGF1dG9jbWRfYnVzeSAqLworICAgIGJ1Zl9UCSpidWY7CSAgICAvKiBidWZmZXIgZm9yIDxhYnVmPiAqLworICAgIGludAkJKnJldHZhbDsgICAgLyogcG9pbnRlciB0byBjYWxsZXIncyByZXR2YWwgKi8KK3sKKyAgICBpbnQJCWRpZF9jbWQ7CisKKyAgICBpZiAoc2hvdWxkX2Fib3J0KCpyZXR2YWwpKQorCXJldHVybiBGQUxTRTsKKworICAgIGRpZF9jbWQgPSBhcHBseV9hdXRvY21kc19ncm91cChldmVudCwgZm5hbWUsIGZuYW1lX2lvLCBmb3JjZSwKKwkJCQkJCSAgICAgIEFVR1JPVVBfQUxMLCBidWYsIE5VTEwpOworICAgIGlmIChkaWRfY21kICYmIGFib3J0aW5nKCkpCisJKnJldHZhbCA9IEZBSUw7CisgICAgcmV0dXJuIGRpZF9jbWQ7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkgfHwgZGVmaW5lZChQUk9UTykKKyAgICBpbnQKK2hhc19jdXJzb3Job2xkKCkKK3sKKyAgICByZXR1cm4gKGZpcnN0X2F1dG9wYXRbKGludClFVkVOVF9DVVJTT1JIT0xEXSAhPSBOVUxMKTsKK30KKyNlbmRpZgorCisgICAgc3RhdGljIGludAorYXBwbHlfYXV0b2NtZHNfZ3JvdXAoZXZlbnQsIGZuYW1lLCBmbmFtZV9pbywgZm9yY2UsIGdyb3VwLCBidWYsIGVhcCkKKyAgICBFVkVOVF9UCWV2ZW50OworICAgIGNoYXJfdQkqZm5hbWU7CSAgICAvKiBOVUxMIG9yIGVtcHR5IG1lYW5zIHVzZSBhY3R1YWwgZmlsZSBuYW1lICovCisgICAgY2hhcl91CSpmbmFtZV9pbzsgIC8qIGZuYW1lIHRvIHVzZSBmb3IgPGFmaWxlPiBvbiBjbWRsaW5lLCBOVUxMIG1lYW5zCisJCQkgICAgICAgdXNlIGZuYW1lICovCisgICAgaW50CQlmb3JjZTsJICAgIC8qIHdoZW4gVFJVRSwgaWdub3JlIGF1dG9jbWRfYnVzeSAqLworICAgIGludAkJZ3JvdXA7CSAgICAvKiBncm91cCBJRCwgb3IgQVVHUk9VUF9BTEwgKi8KKyAgICBidWZfVAkqYnVmOwkgICAgLyogYnVmZmVyIGZvciA8YWJ1Zj4gKi8KKyAgICBleGFyZ19UCSplYXA7CSAgICAvKiBjb21tYW5kIGFyZ3VtZW50cyAqLworeworICAgIGNoYXJfdQkqc2ZuYW1lID0gTlVMTDsJLyogc2hvcnQgZmlsZSBuYW1lICovCisgICAgY2hhcl91CSp0YWlsOworICAgIGludAkJc2F2ZV9jaGFuZ2VkOworICAgIGJ1Zl9UCSpvbGRfY3VyYnVmOworICAgIGludAkJcmV0dmFsID0gRkFMU0U7CisgICAgY2hhcl91CSpzYXZlX3NvdXJjaW5nX25hbWU7CisgICAgbGluZW5yX1QJc2F2ZV9zb3VyY2luZ19sbnVtOworICAgIGNoYXJfdQkqc2F2ZV9hdXRvY21kX2ZuYW1lOworICAgIGludAkJc2F2ZV9hdXRvY21kX2J1Zm5yOworICAgIGNoYXJfdQkqc2F2ZV9hdXRvY21kX21hdGNoOworICAgIGludAkJc2F2ZV9hdXRvY21kX2J1c3k7CisgICAgaW50CQlzYXZlX2F1dG9jbWRfbmVzdGVkOworICAgIHN0YXRpYyBpbnQJbmVzdGluZyA9IDA7CisgICAgQXV0b1BhdENtZAlwYXRjbWQ7CisgICAgQXV0b1BhdAkqYXA7CisjaWZkZWYgRkVBVF9FVkFMCisgICAgc2NpZF9UCXNhdmVfY3VycmVudF9TSUQ7CisgICAgdm9pZAkqc2F2ZV9mdW5jY2FscDsKKyAgICBjaGFyX3UJKnNhdmVfY21kYXJnOworICAgIGxvbmcJc2F2ZV9jbWRiYW5nOworI2VuZGlmCisgICAgc3RhdGljIGludAlmaWxlY2hhbmdlc2hlbGxfYnVzeSA9IEZBTFNFOworCisgICAgLyoKKyAgICAgKiBRdWlja2x5IHJldHVybiBpZiB0aGVyZSBhcmUgbm8gYXV0b2NvbW1hbmRzIGZvciB0aGlzIGV2ZW50IG9yCisgICAgICogYXV0b2NvbW1hbmRzIGFyZSBibG9ja2VkLgorICAgICAqLworICAgIGlmIChmaXJzdF9hdXRvcGF0WyhpbnQpZXZlbnRdID09IE5VTEwgfHwgYXV0b2NtZF9ibG9jayA+IDApCisJcmV0dXJuIHJldHZhbDsKKworICAgIC8qCisgICAgICogV2hlbiBhdXRvY29tbWFuZHMgYXJlIGJ1c3ksIG5ldyBhdXRvY29tbWFuZHMgYXJlIG9ubHkgZXhlY3V0ZWQgd2hlbgorICAgICAqIGV4cGxpY2l0bHkgZW5hYmxlZCB3aXRoIHRoZSAibmVzdGVkIiBmbGFnLgorICAgICAqLworICAgIGlmIChhdXRvY21kX2J1c3kgJiYgIShmb3JjZSB8fCBhdXRvY21kX25lc3RlZCkpCisJcmV0dXJuIHJldHZhbDsKKworI2lmZGVmIEZFQVRfRVZBTAorICAgIC8qCisgICAgICogUXVpY2tseSByZXR1cm4gd2hlbiBpbW1kZWRpYXRlbHkgYWJvcnRpbmcgb24gZXJyb3IsIG9yIHdoZW4gYW4gaW50ZXJydXB0CisgICAgICogb2NjdXJyZWQgb3IgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24gYnV0IG5vdCBjYXVnaHQuCisgICAgICovCisgICAgaWYgKGFib3J0aW5nKCkpCisJcmV0dXJuIHJldHZhbDsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBGaWxlQ2hhbmdlZFNoZWxsIG5ldmVyIG5lc3RzLCBiZWNhdXNlIGl0IGNhbiBjcmVhdGUgYW4gZW5kbGVzcyBsb29wLgorICAgICAqLworICAgIGlmIChmaWxlY2hhbmdlc2hlbGxfYnVzeSAmJiBldmVudCA9PSBFVkVOVF9GSUxFQ0hBTkdFRFNIRUxMKQorCXJldHVybiByZXR2YWw7CisKKyAgICAvKgorICAgICAqIElnbm9yZSBldmVudHMgaW4gJ2V2ZW50aWdub3JlJy4KKyAgICAgKi8KKyAgICBpZiAoZXZlbnRfaWdub3JlZChldmVudCkpCisJcmV0dXJuIHJldHZhbDsKKworICAgIC8qCisgICAgICogQWxsb3cgbmVzdGluZyBvZiBhdXRvY29tbWFuZHMsIGJ1dCByZXN0cmljdCB0aGUgZGVwdGgsIGJlY2F1c2UgaXQncworICAgICAqIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbiBlbmRsZXNzIGxvb3AuCisgICAgICovCisgICAgaWYgKG5lc3RpbmcgPT0gMTApCisgICAgeworCUVNU0coXygiRTIxODogYXV0b2NvbW1hbmQgbmVzdGluZyB0b28gZGVlcCIpKTsKKwlyZXR1cm4gcmV0dmFsOworICAgIH0KKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlc2UgYXV0b2NvbW1hbmRzIGFyZSBkaXNhYmxlZC4gIFVzZWQgd2hlbiBkb2luZyAiOmFsbCIgb3IKKyAgICAgKiAiOmJhbGwiLgorICAgICAqLworICAgIGlmICggICAgICAgKGF1dG9jbWRfbm9fZW50ZXIKKwkJJiYgKGV2ZW50ID09IEVWRU5UX1dJTkVOVEVSIHx8IGV2ZW50ID09IEVWRU5UX0JVRkVOVEVSKSkKKwkgICAgfHwgKGF1dG9jbWRfbm9fbGVhdmUKKwkJJiYgKGV2ZW50ID09IEVWRU5UX1dJTkxFQVZFIHx8IGV2ZW50ID09IEVWRU5UX0JVRkxFQVZFKSkpCisJcmV0dXJuIHJldHZhbDsKKworICAgIC8qCisgICAgICogU2F2ZSB0aGUgYXV0b2NtZF8qIHZhcmlhYmxlcyBhbmQgaW5mbyBhYm91dCB0aGUgY3VycmVudCBidWZmZXIuCisgICAgICovCisgICAgc2F2ZV9hdXRvY21kX2ZuYW1lID0gYXV0b2NtZF9mbmFtZTsKKyAgICBzYXZlX2F1dG9jbWRfYnVmbnIgPSBhdXRvY21kX2J1Zm5yOworICAgIHNhdmVfYXV0b2NtZF9tYXRjaCA9IGF1dG9jbWRfbWF0Y2g7CisgICAgc2F2ZV9hdXRvY21kX2J1c3kgPSBhdXRvY21kX2J1c3k7CisgICAgc2F2ZV9hdXRvY21kX25lc3RlZCA9IGF1dG9jbWRfbmVzdGVkOworICAgIHNhdmVfY2hhbmdlZCA9IGN1cmJ1Zi0+Yl9jaGFuZ2VkOworICAgIG9sZF9jdXJidWYgPSBjdXJidWY7CisKKyAgICAvKgorICAgICAqIFNldCB0aGUgZmlsZSBuYW1lIHRvIGJlIHVzZWQgZm9yIDxhZmlsZT4uCisgICAgICovCisgICAgaWYgKGZuYW1lX2lvID09IE5VTEwpCisgICAgeworCWlmIChmbmFtZSAhPSBOVUxMICYmICpmbmFtZSAhPSBOVUwpCisJICAgIGF1dG9jbWRfZm5hbWUgPSBmbmFtZTsKKwllbHNlIGlmIChidWYgIT0gTlVMTCkKKwkgICAgYXV0b2NtZF9mbmFtZSA9IGJ1Zi0+Yl9mbmFtZTsKKwllbHNlCisJICAgIGF1dG9jbWRfZm5hbWUgPSBOVUxMOworICAgIH0KKyAgICBlbHNlCisJYXV0b2NtZF9mbmFtZSA9IGZuYW1lX2lvOworCisgICAgLyoKKyAgICAgKiBTZXQgdGhlIGJ1ZmZlciBudW1iZXIgdG8gYmUgdXNlZCBmb3IgPGFidWY+LgorICAgICAqLworICAgIGlmIChidWYgPT0gTlVMTCkKKwlhdXRvY21kX2J1Zm5yID0gMDsKKyAgICBlbHNlCisJYXV0b2NtZF9idWZuciA9IGJ1Zi0+Yl9mbnVtOworCisgICAgLyoKKyAgICAgKiBXaGVuIHRoZSBmaWxlIG5hbWUgaXMgTlVMTCBvciBlbXB0eSwgdXNlIHRoZSBmaWxlIG5hbWUgb2YgYnVmZmVyICJidWYiLgorICAgICAqIEFsd2F5cyB1c2UgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgZmlsZSBuYW1lIHRvIG1hdGNoIHdpdGgsIGluIGNhc2UKKyAgICAgKiAiYWxsb3dfZGlycyIgaXMgc2V0LgorICAgICAqLworICAgIGlmIChmbmFtZSA9PSBOVUxMIHx8ICpmbmFtZSA9PSBOVUwpCisgICAgeworCWlmIChidWYgPT0gTlVMTCkKKwkgICAgZm5hbWUgPSBOVUxMOworCWVsc2UKKwl7CisjaWZkZWYgRkVBVF9TWU5fSEwKKwkgICAgaWYgKGV2ZW50ID09IEVWRU5UX1NZTlRBWCkKKwkJZm5hbWUgPSBidWYtPmJfcF9zeW47CisJICAgIGVsc2UKKyNlbmRpZgorCQlpZiAoZXZlbnQgPT0gRVZFTlRfRklMRVRZUEUpCisJCSAgICBmbmFtZSA9IGJ1Zi0+Yl9wX2Z0OworCQllbHNlCisJCXsKKwkJICAgIGlmIChidWYtPmJfc2ZuYW1lICE9IE5VTEwpCisJCQlzZm5hbWUgPSB2aW1fc3Ryc2F2ZShidWYtPmJfc2ZuYW1lKTsKKwkJICAgIGZuYW1lID0gYnVmLT5iX2ZmbmFtZTsKKwkJfQorCX0KKwlpZiAoZm5hbWUgPT0gTlVMTCkKKwkgICAgZm5hbWUgPSAoY2hhcl91ICopIiI7CisJZm5hbWUgPSB2aW1fc3Ryc2F2ZShmbmFtZSk7CS8qIG1ha2UgYSBjb3B5LCBzbyB3ZSBjYW4gY2hhbmdlIGl0ICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisJc2ZuYW1lID0gdmltX3N0cnNhdmUoZm5hbWUpOworCS8qIERvbid0IHRyeSBleHBhbmRpbmcgRmlsZVR5cGUsIFN5bnRheCBvciBXaW5kb3dJRC4gKi8KKwlpZiAoZXZlbnQgPT0gRVZFTlRfRklMRVRZUEUgfHwgZXZlbnQgPT0gRVZFTlRfU1lOVEFYCisJCXx8IGV2ZW50ID09IEVWRU5UX1JFTU9URVJFUExZKQorCSAgICBmbmFtZSA9IHZpbV9zdHJzYXZlKGZuYW1lKTsKKwllbHNlCisJICAgIGZuYW1lID0gRnVsbE5hbWVfc2F2ZShmbmFtZSwgRkFMU0UpOworICAgIH0KKyAgICBpZiAoZm5hbWUgPT0gTlVMTCkJICAgIC8qIG91dCBvZiBtZW1vcnkgKi8KKyAgICB7CisJdmltX2ZyZWUoc2ZuYW1lKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisgICAgLyoKKyAgICAgKiBSZXBsYWNlIGFsbCBiYWNrc2xhc2hlcyB3aXRoIGZvcndhcmQgc2xhc2hlcy4gIFRoaXMgbWFrZXMgdGhlCisgICAgICogYXV0b2NvbW1hbmQgcGF0dGVybnMgcG9ydGFibGUgYmV0d2VlbiBVbml4IGFuZCBNUy1ET1MuCisgICAgICovCisgICAgaWYgKHNmbmFtZSAhPSBOVUxMKQorCWZvcndhcmRfc2xhc2goc2ZuYW1lKTsKKyAgICBmb3J3YXJkX3NsYXNoKGZuYW1lKTsKKyNlbmRpZgorCisjaWZkZWYgVk1TCisgICAgLyogcmVtb3ZlIHZlcnNpb24gZm9yIGNvcnJlY3QgbWF0Y2ggKi8KKyAgICBpZiAoc2ZuYW1lICE9IE5VTEwpCisJdm1zX3JlbW92ZV92ZXJzaW9uKHNmbmFtZSk7CisgICAgdm1zX3JlbW92ZV92ZXJzaW9uKGZuYW1lKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBTZXQgdGhlIG5hbWUgdG8gYmUgdXNlZCBmb3IgPGFtYXRjaD4uCisgICAgICovCisgICAgYXV0b2NtZF9tYXRjaCA9IGZuYW1lOworCisKKyAgICAvKiBEb24ndCByZWRyYXcgd2hpbGUgZG9pbmcgYXV0byBjb21tYW5kcy4gKi8KKyAgICArK1JlZHJhd2luZ0Rpc2FibGVkOworICAgIHNhdmVfc291cmNpbmdfbmFtZSA9IHNvdXJjaW5nX25hbWU7CisgICAgc291cmNpbmdfbmFtZSA9IE5VTEw7CS8qIGRvbid0IGZyZWUgdGhpcyBvbmUgKi8KKyAgICBzYXZlX3NvdXJjaW5nX2xudW0gPSBzb3VyY2luZ19sbnVtOworICAgIHNvdXJjaW5nX2xudW0gPSAwOwkJLyogbm8gbGluZSBudW1iZXIgaGVyZSAqLworCisjaWZkZWYgRkVBVF9FVkFMCisgICAgc2F2ZV9jdXJyZW50X1NJRCA9IGN1cnJlbnRfU0lEOworCisgICAgLyogRG9uJ3QgdXNlIGxvY2FsIGZ1bmN0aW9uIHZhcmlhYmxlcywgaWYgY2FsbGVkIGZyb20gYSBmdW5jdGlvbiAqLworICAgIHNhdmVfZnVuY2NhbHAgPSBzYXZlX2Z1bmNjYWwoKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBXaGVuIHN0YXJ0aW5nIHRvIGV4ZWN1dGUgYXV0b2NvbW1hbmRzLCBzYXZlIHRoZSBzZWFyY2ggcGF0dGVybnMuCisgICAgICovCisgICAgaWYgKCFhdXRvY21kX2J1c3kpCisgICAgeworCXNhdmVfc2VhcmNoX3BhdHRlcm5zKCk7CisJc2F2ZVJlZG9idWZmKCk7CisJZGlkX2ZpbGV0eXBlID0ga2VlcF9maWxldHlwZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE5vdGUgdGhhdCB3ZSBhcmUgYXBwbHlpbmcgYXV0b2NtZHMuICBTb21lIGNvbW1hbmRzIG5lZWQgdG8ga25vdy4KKyAgICAgKi8KKyAgICBhdXRvY21kX2J1c3kgPSBUUlVFOworICAgIGZpbGVjaGFuZ2VzaGVsbF9idXN5ID0gKGV2ZW50ID09IEVWRU5UX0ZJTEVDSEFOR0VEU0hFTEwpOworICAgICsrbmVzdGluZzsJCS8qIHNlZSBtYXRjaGluZyBkZWNyZW1lbnQgYmVsb3cgKi8KKworICAgIC8qIFJlbWVtYmVyIHRoYXQgRmlsZVR5cGUgd2FzIHRyaWdnZXJlZC4gIFVzZWQgZm9yIGRpZF9maWxldHlwZSgpLiAqLworICAgIGlmIChldmVudCA9PSBFVkVOVF9GSUxFVFlQRSkKKwlkaWRfZmlsZXR5cGUgPSBUUlVFOworCisgICAgdGFpbCA9IGdldHRhaWwoZm5hbWUpOworCisgICAgLyogRmluZCBmaXJzdCBhdXRvY29tbWFuZCB0aGF0IG1hdGNoZXMgKi8KKyAgICBwYXRjbWQuY3VycGF0ID0gZmlyc3RfYXV0b3BhdFsoaW50KWV2ZW50XTsKKyAgICBwYXRjbWQubmV4dGNtZCA9IE5VTEw7CisgICAgcGF0Y21kLmdyb3VwID0gZ3JvdXA7CisgICAgcGF0Y21kLmZuYW1lID0gZm5hbWU7CisgICAgcGF0Y21kLnNmbmFtZSA9IHNmbmFtZTsKKyAgICBwYXRjbWQudGFpbCA9IHRhaWw7CisgICAgcGF0Y21kLmV2ZW50ID0gZXZlbnQ7CisgICAgYXV0b19uZXh0X3BhdCgmcGF0Y21kLCBGQUxTRSk7CisKKyAgICAvKiBmb3VuZCBvbmUsIHN0YXJ0IGV4ZWN1dGluZyB0aGUgYXV0b2NvbW1hbmRzICovCisgICAgaWYgKHBhdGNtZC5jdXJwYXQgIT0gTlVMTCkKKyAgICB7CisjaWZkZWYgRkVBVF9FVkFMCisJLyogc2V0IHY6Y21kYXJnIChvbmx5IHdoZW4gdGhlcmUgaXMgYSBtYXRjaGluZyBwYXR0ZXJuKSAqLworCXNhdmVfY21kYmFuZyA9IGdldF92aW1fdmFyX25yKFZWX0NNREJBTkcpOworCWlmIChlYXAgIT0gTlVMTCkKKwl7CisJICAgIHNhdmVfY21kYXJnID0gc2V0X2NtZGFyZyhlYXAsIE5VTEwpOworCSAgICBzZXRfdmltX3Zhcl9ucihWVl9DTURCQU5HLCAobG9uZyllYXAtPmZvcmNlaXQpOworCX0KKwllbHNlCisJICAgIHNhdmVfY21kYXJnID0gTlVMTDsJLyogYXZvaWQgZ2NjIHdhcm5pbmcgKi8KKyNlbmRpZgorCXJldHZhbCA9IFRSVUU7CisJLyogbWFyayB0aGUgbGFzdCBwYXR0ZXJuLCB0byBhdm9pZCBhbiBlbmRsZXNzIGxvb3Agd2hlbiBtb3JlIHBhdHRlcm5zCisJICogYXJlIGFkZGVkIHdoZW4gZXhlY3V0aW5nIGF1dG9jb21tYW5kcyAqLworCWZvciAoYXAgPSBwYXRjbWQuY3VycGF0OyBhcC0+bmV4dCAhPSBOVUxMOyBhcCA9IGFwLT5uZXh0KQorCSAgICBhcC0+bGFzdCA9IEZBTFNFOworCWFwLT5sYXN0ID0gVFJVRTsKKwljaGVja19sbnVtcyhUUlVFKTsJLyogbWFrZSBzdXJlIGN1cnNvciBhbmQgdG9wbGluZSBhcmUgdmFsaWQgKi8KKwlkb19jbWRsaW5lKE5VTEwsIGdldG5leHRhYywgKHZvaWQgKikmcGF0Y21kLAorCQkJCSAgICAgRE9DTURfTk9XQUlUfERPQ01EX1ZFUkJPU0V8RE9DTURfUkVQRUFUKTsKKyNpZmRlZiBGRUFUX0VWQUwKKwlpZiAoZWFwICE9IE5VTEwpCisJeworCSAgICAodm9pZClzZXRfY21kYXJnKE5VTEwsIHNhdmVfY21kYXJnKTsKKwkgICAgc2V0X3ZpbV92YXJfbnIoVlZfQ01EQkFORywgc2F2ZV9jbWRiYW5nKTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgICAtLVJlZHJhd2luZ0Rpc2FibGVkOworICAgIGF1dG9jbWRfYnVzeSA9IHNhdmVfYXV0b2NtZF9idXN5OworICAgIGZpbGVjaGFuZ2VzaGVsbF9idXN5ID0gRkFMU0U7CisgICAgYXV0b2NtZF9uZXN0ZWQgPSBzYXZlX2F1dG9jbWRfbmVzdGVkOworICAgIHZpbV9mcmVlKHNvdXJjaW5nX25hbWUpOworICAgIHNvdXJjaW5nX25hbWUgPSBzYXZlX3NvdXJjaW5nX25hbWU7CisgICAgc291cmNpbmdfbG51bSA9IHNhdmVfc291cmNpbmdfbG51bTsKKyAgICBhdXRvY21kX2ZuYW1lID0gc2F2ZV9hdXRvY21kX2ZuYW1lOworICAgIGF1dG9jbWRfYnVmbnIgPSBzYXZlX2F1dG9jbWRfYnVmbnI7CisgICAgYXV0b2NtZF9tYXRjaCA9IHNhdmVfYXV0b2NtZF9tYXRjaDsKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBjdXJyZW50X1NJRCA9IHNhdmVfY3VycmVudF9TSUQ7CisgICAgcmVzdG9yZV9mdW5jY2FsKHNhdmVfZnVuY2NhbHApOworI2VuZGlmCisgICAgdmltX2ZyZWUoZm5hbWUpOworICAgIHZpbV9mcmVlKHNmbmFtZSk7CisgICAgLS1uZXN0aW5nOwkJLyogc2VlIG1hdGNoaW5nIGluY3JlbWVudCBhYm92ZSAqLworCisgICAgLyoKKyAgICAgKiBXaGVuIHN0b3BwaW5nIHRvIGV4ZWN1dGUgYXV0b2NvbW1hbmRzLCByZXN0b3JlIHRoZSBzZWFyY2ggcGF0dGVybnMgYW5kCisgICAgICogdGhlIHJlZG8gYnVmZmVyLgorICAgICAqLworICAgIGlmICghYXV0b2NtZF9idXN5KQorICAgIHsKKwlyZXN0b3JlX3NlYXJjaF9wYXR0ZXJucygpOworCXJlc3RvcmVSZWRvYnVmZigpOworCWRpZF9maWxldHlwZSA9IEZBTFNFOworICAgIH0KKworICAgIC8qCisgICAgICogU29tZSBldmVudHMgZG9uJ3Qgc2V0IG9yIHJlc2V0IHRoZSBDaGFuZ2VkIGZsYWcuCisgICAgICogQ2hlY2sgaWYgc3RpbGwgaW4gdGhlIHNhbWUgYnVmZmVyIQorICAgICAqLworICAgIGlmIChjdXJidWYgPT0gb2xkX2N1cmJ1ZgorCSAgICAmJiAoZXZlbnQgPT0gRVZFTlRfQlVGUkVBRFBPU1QKKwkJfHwgZXZlbnQgPT0gRVZFTlRfQlVGV1JJVEVQT1NUCisJCXx8IGV2ZW50ID09IEVWRU5UX0ZJTEVBUFBFTkRQT1NUCisJCXx8IGV2ZW50ID09IEVWRU5UX1ZJTUxFQVZFCisJCXx8IGV2ZW50ID09IEVWRU5UX1ZJTUxFQVZFUFJFKSkKKyAgICB7CisjaWZkZWYgRkVBVF9USVRMRQorCWlmIChjdXJidWYtPmJfY2hhbmdlZCAhPSBzYXZlX2NoYW5nZWQpCisJICAgIG5lZWRfbWFrZXRpdGxlID0gVFJVRTsKKyNlbmRpZgorCWN1cmJ1Zi0+Yl9jaGFuZ2VkID0gc2F2ZV9jaGFuZ2VkOworICAgIH0KKworICAgIGF1X2NsZWFudXAoKTsJLyogbWF5IHJlYWxseSBkZWxldGUgcmVtb3ZlZCBwYXR0ZXJucy9jb21tYW5kcyBub3cgKi8KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogRmluZCBuZXh0IGF1dG9jb21tYW5kIHBhdHRlcm4gdGhhdCBtYXRjaGVzLgorICovCisgICAgc3RhdGljIHZvaWQKK2F1dG9fbmV4dF9wYXQoYXBjLCBzdG9wX2F0X2xhc3QpCisgICAgQXV0b1BhdENtZAkqYXBjOworICAgIGludAkJc3RvcF9hdF9sYXN0OwkgICAgLyogc3RvcCB3aGVuICdsYXN0JyBmbGFnIGlzIHNldCAqLworeworICAgIEF1dG9QYXQJKmFwOworICAgIEF1dG9DbWQJKmNwOworICAgIGNoYXJfdQkqbmFtZTsKKyAgICBjaGFyCSpzOworCisgICAgdmltX2ZyZWUoc291cmNpbmdfbmFtZSk7CisgICAgc291cmNpbmdfbmFtZSA9IE5VTEw7CisKKyAgICBmb3IgKGFwID0gYXBjLT5jdXJwYXQ7IGFwICE9IE5VTEwgJiYgIWdvdF9pbnQ7IGFwID0gYXAtPm5leHQpCisgICAgeworCWFwYy0+Y3VycGF0ID0gTlVMTDsKKworCS8qIG9ubHkgdXNlIGEgcGF0dGVybiB3aGVuIGl0IGhhcyBub3QgYmVlbiByZW1vdmVkLCBoYXMgY29tbWFuZHMgYW5kCisJICogdGhlIGdyb3VwIG1hdGNoZXMgKi8KKwlpZiAoYXAtPnBhdCAhPSBOVUxMICYmIGFwLT5jbWRzICE9IE5VTEwKKwkJJiYgKGFwYy0+Z3JvdXAgPT0gQVVHUk9VUF9BTEwgfHwgYXBjLT5ncm91cCA9PSBhcC0+Z3JvdXApKQorCXsKKwkgICAgaWYgKG1hdGNoX2ZpbGVfcGF0KGFwLT5yZWdfcGF0LCBhcGMtPmZuYW1lLCBhcGMtPnNmbmFtZSwgYXBjLT50YWlsLAorCQkJCQkJCSAgICAgIGFwLT5hbGxvd19kaXJzKSkKKwkgICAgeworCQluYW1lID0gZXZlbnRfbnIybmFtZShhcGMtPmV2ZW50KTsKKwkJcyA9IF8oIiVzIEF1dG8gY29tbWFuZHMgZm9yIFwiJXNcIiIpOworCQlzb3VyY2luZ19uYW1lID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4ocykKKwkJCQkJICAgICsgU1RSTEVOKG5hbWUpICsgYXAtPnBhdGxlbiArIDEpKTsKKwkJaWYgKHNvdXJjaW5nX25hbWUgIT0gTlVMTCkKKwkJeworCQkgICAgc3ByaW50ZigoY2hhciAqKXNvdXJjaW5nX25hbWUsIHMsCisJCQkJCSAgICAgICAoY2hhciAqKW5hbWUsIChjaGFyICopYXAtPnBhdCk7CisJCSAgICBpZiAocF92ZXJib3NlID49IDgpCisJCQltc2dfc3RyKChjaGFyX3UgKilfKCJFeGVjdXRpbmcgJXMiKSwgc291cmNpbmdfbmFtZSk7CisJCX0KKworCQlhcGMtPmN1cnBhdCA9IGFwOworCQlhcGMtPm5leHRjbWQgPSBhcC0+Y21kczsKKwkJLyogbWFyayBsYXN0IGNvbW1hbmQgKi8KKwkJZm9yIChjcCA9IGFwLT5jbWRzOyBjcC0+bmV4dCAhPSBOVUxMOyBjcCA9IGNwLT5uZXh0KQorCQkgICAgY3AtPmxhc3QgPSBGQUxTRTsKKwkJY3AtPmxhc3QgPSBUUlVFOworCSAgICB9CisJICAgIGxpbmVfYnJlYWtjaGVjaygpOworCSAgICBpZiAoYXBjLT5jdXJwYXQgIT0gTlVMTCkJICAgIC8qIGZvdW5kIGEgbWF0Y2ggKi8KKwkJYnJlYWs7CisJfQorCWlmIChzdG9wX2F0X2xhc3QgJiYgYXAtPmxhc3QpCisJICAgIGJyZWFrOworICAgIH0KK30KKworLyoKKyAqIEdldCBuZXh0IGF1dG9jb21tYW5kIGNvbW1hbmQuCisgKiBDYWxsZWQgYnkgZG9fY21kbGluZSgpIHRvIGdldCB0aGUgbmV4dCBsaW5lIGZvciAiOmlmIi4KKyAqIFJldHVybnMgYWxsb2NhdGVkIHN0cmluZywgb3IgTlVMTCBmb3IgZW5kIG9mIGF1dG9jb21tYW5kcy4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2dldG5leHRhYyhjLCBjb29raWUsIGluZGVudCkKKyAgICBpbnQJICAgIGM7CQkgICAgLyogbm90IHVzZWQgKi8KKyAgICB2b2lkICAgICpjb29raWU7CisgICAgaW50CSAgICBpbmRlbnQ7CSAgICAvKiBub3QgdXNlZCAqLworeworICAgIEF1dG9QYXRDbWQJICAgICphY3AgPSAoQXV0b1BhdENtZCAqKWNvb2tpZTsKKyAgICBjaGFyX3UJICAgICpyZXR2YWw7CisgICAgQXV0b0NtZAkgICAgKmFjOworCisgICAgLyogQ2FuIGJlIGNhbGxlZCBhZ2FpbiBhZnRlciByZXR1cm5pbmcgdGhlIGxhc3QgbGluZS4gKi8KKyAgICBpZiAoYWNwLT5jdXJwYXQgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIC8qIHJlcGVhdCB1bnRpbCB3ZSBmaW5kIGFuIGF1dG9jb21tYW5kIHRvIGV4ZWN1dGUgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwkvKiBza2lwIHJlbW92ZWQgY29tbWFuZHMgKi8KKwl3aGlsZSAoYWNwLT5uZXh0Y21kICE9IE5VTEwgJiYgYWNwLT5uZXh0Y21kLT5jbWQgPT0gTlVMTCkKKwkgICAgaWYgKGFjcC0+bmV4dGNtZC0+bGFzdCkKKwkJYWNwLT5uZXh0Y21kID0gTlVMTDsKKwkgICAgZWxzZQorCQlhY3AtPm5leHRjbWQgPSBhY3AtPm5leHRjbWQtPm5leHQ7CisKKwlpZiAoYWNwLT5uZXh0Y21kICE9IE5VTEwpCisJICAgIGJyZWFrOworCisJLyogYXQgZW5kIG9mIGNvbW1hbmRzLCBmaW5kIG5leHQgcGF0dGVybiB0aGF0IG1hdGNoZXMgKi8KKwlpZiAoYWNwLT5jdXJwYXQtPmxhc3QpCisJICAgIGFjcC0+Y3VycGF0ID0gTlVMTDsKKwllbHNlCisJICAgIGFjcC0+Y3VycGF0ID0gYWNwLT5jdXJwYXQtPm5leHQ7CisJaWYgKGFjcC0+Y3VycGF0ICE9IE5VTEwpCisJICAgIGF1dG9fbmV4dF9wYXQoYWNwLCBUUlVFKTsKKwlpZiAoYWNwLT5jdXJwYXQgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgYWMgPSBhY3AtPm5leHRjbWQ7CisKKyAgICBpZiAocF92ZXJib3NlID49IDkpCisgICAgeworCW1zZ19zY3JvbGwgPSBUUlVFOwkgICAgLyogYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlICovCisJbXNnX3N0cigoY2hhcl91ICopXygiYXV0b2NvbW1hbmQgJXMiKSwgYWMtPmNtZCk7CisJbXNnX3B1dHMoKGNoYXJfdSAqKSJcbiIpOyAgIC8qIGRvbid0IG92ZXJ3cml0ZSB0aGlzIGVpdGhlciAqLworCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKyAgICB9CisgICAgcmV0dmFsID0gdmltX3N0cnNhdmUoYWMtPmNtZCk7CisgICAgYXV0b2NtZF9uZXN0ZWQgPSBhYy0+bmVzdGVkOworI2lmZGVmIEZFQVRfRVZBTAorICAgIGN1cnJlbnRfU0lEID0gYWMtPnNjcmlwdElEOworI2VuZGlmCisgICAgaWYgKGFjLT5sYXN0KQorCWFjcC0+bmV4dGNtZCA9IE5VTEw7CisgICAgZWxzZQorCWFjcC0+bmV4dGNtZCA9IGFjLT5uZXh0OworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGVyZSBpcyBhIG1hdGNoaW5nIGF1dG9jb21tYW5kIGZvciAiZm5hbWUiLgorICovCisgICAgaW50CitoYXNfYXV0b2NtZChldmVudCwgc2ZuYW1lKQorICAgIEVWRU5UX1QJZXZlbnQ7CisgICAgY2hhcl91CSpzZm5hbWU7Cit7CisgICAgQXV0b1BhdAkqYXA7CisgICAgY2hhcl91CSpmbmFtZTsKKyAgICBjaGFyX3UJKnRhaWwgPSBnZXR0YWlsKHNmbmFtZSk7CisgICAgaW50CQlyZXR2YWwgPSBGQUxTRTsKKworICAgIGZuYW1lID0gRnVsbE5hbWVfc2F2ZShzZm5hbWUsIEZBTFNFKTsKKyAgICBpZiAoZm5hbWUgPT0gTlVMTCkKKwlyZXR1cm4gRkFMU0U7CisKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKyAgICAvKgorICAgICAqIFJlcGxhY2UgYWxsIGJhY2tzbGFzaGVzIHdpdGggZm9yd2FyZCBzbGFzaGVzLiAgVGhpcyBtYWtlcyB0aGUKKyAgICAgKiBhdXRvY29tbWFuZCBwYXR0ZXJucyBwb3J0YWJsZSBiZXR3ZWVuIFVuaXggYW5kIE1TLURPUy4KKyAgICAgKi8KKyAgICBzZm5hbWUgPSB2aW1fc3Ryc2F2ZShzZm5hbWUpOworICAgIGlmIChzZm5hbWUgIT0gTlVMTCkKKwlmb3J3YXJkX3NsYXNoKHNmbmFtZSk7CisgICAgZm9yd2FyZF9zbGFzaChmbmFtZSk7CisjZW5kaWYKKworICAgIGZvciAoYXAgPSBmaXJzdF9hdXRvcGF0WyhpbnQpZXZlbnRdOyBhcCAhPSBOVUxMOyBhcCA9IGFwLT5uZXh0KQorCWlmIChhcC0+cGF0ICE9IE5VTEwgJiYgYXAtPmNtZHMgIT0gTlVMTAorCQkmJiBtYXRjaF9maWxlX3BhdChhcC0+cmVnX3BhdCwgZm5hbWUsIHNmbmFtZSwgdGFpbCwKKwkJCQkJCQkgICAgICBhcC0+YWxsb3dfZGlycykpCisJeworCSAgICByZXR2YWwgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisKKyAgICB2aW1fZnJlZShmbmFtZSk7CisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisgICAgdmltX2ZyZWUoc2ZuYW1lKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworI2lmIGRlZmluZWQoRkVBVF9DTURMX0NPTVBMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEZ1bmN0aW9uIGdpdmVuIHRvIEV4cGFuZEdlbmVyaWMoKSB0byBvYnRhaW4gdGhlIGxpc3Qgb2YgYXV0b2NvbW1hbmQgZ3JvdXAKKyAqIG5hbWVzLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBjaGFyX3UgKgorZ2V0X2F1Z3JvdXBfbmFtZSh4cCwgaWR4KQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBpbnQJCWlkeDsKK3sKKyAgICBpZiAoaWR4ID09IGF1Z3JvdXBzLmdhX2xlbikJCS8qIGFkZCAiRU5EIiBhZGQgdGhlIGVuZCAqLworCXJldHVybiAoY2hhcl91ICopIkVORCI7CisgICAgaWYgKGlkeCA+PSBhdWdyb3Vwcy5nYV9sZW4pCQkvKiBlbmQgb2YgbGlzdCAqLworCXJldHVybiBOVUxMOworICAgIGlmIChBVUdST1VQX05BTUUoaWR4KSA9PSBOVUxMKQkvKiBza2lwIGRlbGV0ZWQgZW50cmllcyAqLworCXJldHVybiAoY2hhcl91ICopIiI7CisgICAgcmV0dXJuIEFVR1JPVVBfTkFNRShpZHgpOwkJLyogcmV0dXJuIGEgbmFtZSAqLworfQorCitzdGF0aWMgaW50IGluY2x1ZGVfZ3JvdXBzID0gRkFMU0U7CisKKyAgICBjaGFyX3UgICoKK3NldF9jb250ZXh0X2luX2F1dG9jbWQoeHAsIGFyZywgZG9hdXRvY21kKQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBpbnQJCWRvYXV0b2NtZDsJLyogVFJVRSBmb3IgOmRvYXV0b2NtZCwgRkFMU0UgZm9yIDphdXRvY21kICovCit7CisgICAgY2hhcl91CSpwOworICAgIGludAkJZ3JvdXA7CisKKyAgICAvKiBjaGVjayBmb3IgYSBncm91cCBuYW1lLCBza2lwIGl0IGlmIHByZXNlbnQgKi8KKyAgICBpbmNsdWRlX2dyb3VwcyA9IEZBTFNFOworICAgIHAgPSBhcmc7CisgICAgZ3JvdXAgPSBhdV9nZXRfZ3JvdXBhcmcoJmFyZyk7CisgICAgaWYgKGdyb3VwID09IEFVR1JPVVBfRVJST1IpCisJcmV0dXJuIE5VTEw7CisgICAgLyogSWYgdGhlcmUgb25seSBpcyBhIGdyb3VwIG5hbWUgdGhhdCdzIHdoYXQgd2UgZXhwYW5kLiAqLworICAgIGlmICgqYXJnID09IE5VTCAmJiBncm91cCAhPSBBVUdST1VQX0FMTCAmJiAhdmltX2lzd2hpdGUoYXJnWy0xXSkpCisgICAgeworCWFyZyA9IHA7CisJZ3JvdXAgPSBBVUdST1VQX0FMTDsKKyAgICB9CisKKyAgICAvKiBza2lwIG92ZXIgZXZlbnQgbmFtZSAqLworICAgIGZvciAocCA9IGFyZzsgKnAgIT0gTlVMICYmICF2aW1faXN3aGl0ZSgqcCk7ICsrcCkKKwlpZiAoKnAgPT0gJywnKQorCSAgICBhcmcgPSBwICsgMTsKKyAgICBpZiAoKnAgPT0gTlVMKQorICAgIHsKKwlpZiAoZ3JvdXAgPT0gQVVHUk9VUF9BTEwpCisJICAgIGluY2x1ZGVfZ3JvdXBzID0gVFJVRTsKKwl4cC0+eHBfY29udGV4dCA9IEVYUEFORF9FVkVOVFM7CSAgICAvKiBleHBhbmQgZXZlbnQgbmFtZSAqLworCXhwLT54cF9wYXR0ZXJuID0gYXJnOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIHNraXAgb3ZlciBwYXR0ZXJuICovCisgICAgYXJnID0gc2tpcHdoaXRlKHApOworICAgIHdoaWxlICgqYXJnICYmICghdmltX2lzd2hpdGUoKmFyZykgfHwgYXJnWy0xXSA9PSAnXFwnKSkKKwlhcmcrKzsKKyAgICBpZiAoKmFyZykKKwlyZXR1cm4gYXJnOwkJCSAgICAvKiBleHBhbmQgKG5leHQpIGNvbW1hbmQgKi8KKworICAgIGlmIChkb2F1dG9jbWQpCisJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfRklMRVM7CSAgICAvKiBleHBhbmQgZmlsZSBuYW1lcyAqLworICAgIGVsc2UKKwl4cC0+eHBfY29udGV4dCA9IEVYUEFORF9OT1RISU5HOyAgICAvKiBwYXR0ZXJuIGlzIG5vdCBleHBhbmRlZCAqLworICAgIHJldHVybiBOVUxMOworfQorCisvKgorICogRnVuY3Rpb24gZ2l2ZW4gdG8gRXhwYW5kR2VuZXJpYygpIHRvIG9idGFpbiB0aGUgbGlzdCBvZiBldmVudCBuYW1lcy4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICoKK2dldF9ldmVudF9uYW1lKHhwLCBpZHgpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGludAkJaWR4OworeworICAgIGlmIChpZHggPCBhdWdyb3Vwcy5nYV9sZW4pCQkvKiBGaXJzdCBsaXN0IGdyb3VwIG5hbWVzLCBpZiB3YW50ZWQgKi8KKyAgICB7CisJaWYgKCFpbmNsdWRlX2dyb3VwcyB8fCBBVUdST1VQX05BTUUoaWR4KSA9PSBOVUxMKQorCSAgICByZXR1cm4gKGNoYXJfdSAqKSIiOwkvKiBza2lwIGRlbGV0ZWQgZW50cmllcyAqLworCXJldHVybiBBVUdST1VQX05BTUUoaWR4KTsJLyogcmV0dXJuIGEgbmFtZSAqLworICAgIH0KKyAgICByZXR1cm4gKGNoYXJfdSAqKWV2ZW50X25hbWVzW2lkeCAtIGF1Z3JvdXBzLmdhX2xlbl0ubmFtZTsKK30KKworI2VuZGlmCS8qIEZFQVRfQ01ETF9DT01QTCAqLworCisvKgorICogUmV0dXJuIFRSVUUgaWYgYW4gYXV0b2NvbW1hbmQgaXMgZGVmaW5lZCBmb3IgImV2ZW50IiBhbmQgInBhdHRlcm4iLgorICogInBhdHRlcm4iIGNhbiBiZSBOVUxMIHRvIGFjY2VwdCBhbnkgcGF0dGVybi4KKyAqLworICAgIGludAorYXVfZXhpc3RzKG5hbWUsIG5hbWVfZW5kLCBwYXR0ZXJuKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBjaGFyX3UJKm5hbWVfZW5kOworICAgIGNoYXJfdQkqcGF0dGVybjsKK3sKKyAgICBjaGFyX3UJKmV2ZW50X25hbWU7CisgICAgY2hhcl91CSpwOworICAgIEVWRU5UX1QJZXZlbnQ7CisgICAgQXV0b1BhdAkqYXA7CisKKyAgICAvKiBmaW5kIHRoZSBpbmRleCAoZW51bSkgZm9yIHRoZSBldmVudCBuYW1lICovCisgICAgZXZlbnRfbmFtZSA9IHZpbV9zdHJuc2F2ZShuYW1lLCAoaW50KShuYW1lX2VuZCAtIG5hbWUpKTsKKyAgICBpZiAoZXZlbnRfbmFtZSA9PSBOVUxMKQorCXJldHVybiBGQUxTRTsKKyAgICBldmVudCA9IGV2ZW50X25hbWUybnIoZXZlbnRfbmFtZSwgJnApOworICAgIHZpbV9mcmVlKGV2ZW50X25hbWUpOworCisgICAgLyogcmV0dXJuIEZBTFNFIGlmIHRoZSBldmVudCBuYW1lIGlzIG5vdCByZWNvZ25pemVkICovCisgICAgaWYgKGV2ZW50ID09IE5VTV9FVkVOVFMpCSAgICAvKiB1bmtub3duIGV2ZW50IG5hbWUgKi8KKwlyZXR1cm4gRkFMU0U7CisKKyAgICAvKiBGaW5kIHRoZSBmaXJzdCBhdXRvY29tbWFuZCBmb3IgdGhpcyBldmVudC4KKyAgICAgKiBJZiB0aGVyZSBpc24ndCBhbnksIHJldHVybiBGQUxTRTsKKyAgICAgKiBJZiB0aGVyZSBpcyBvbmUgYW5kIG5vIHBhdHRlcm4gZ2l2ZW4sIHJldHVybiBUUlVFOyAqLworICAgIGFwID0gZmlyc3RfYXV0b3BhdFsoaW50KWV2ZW50XTsKKyAgICBpZiAoYXAgPT0gTlVMTCkKKwlyZXR1cm4gRkFMU0U7CisgICAgaWYgKHBhdHRlcm4gPT0gTlVMTCkKKwlyZXR1cm4gVFJVRTsKKworICAgIC8qIENoZWNrIGlmIHRoZXJlIGlzIGFuIGF1dG9jb21tYW5kIHdpdGggdGhlIGdpdmVuIHBhdHRlcm4uICovCisgICAgZm9yICggOyBhcCAhPSBOVUxMOyBhcCA9IGFwLT5uZXh0KQorCS8qIG9ubHkgdXNlIGEgcGF0dGVybiB3aGVuIGl0IGhhcyBub3QgYmVlbiByZW1vdmVkIGFuZCBoYXMgY29tbWFuZHMgKi8KKwlpZiAoYXAtPnBhdCAhPSBOVUxMICYmIGFwLT5jbWRzICE9IE5VTEwKKwkJCQkJICAgJiYgZm5hbWVjbXAoYXAtPnBhdCwgcGF0dGVybikgPT0gMCkKKwkgICAgcmV0dXJuIFRSVUU7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZW5kaWYJLyogRkVBVF9BVVRPQ01EICovCisKKyNpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkgfHwgZGVmaW5lZChGRUFUX1dJTERJR04pIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogVHJ5IG1hdGNoaW5nIGEgZmlsZW5hbWUgd2l0aCBhIHBhdHRlcm4uCisgKiBVc2VkIGZvciBhdXRvY29tbWFuZHMgYW5kICd3aWxkaWdub3JlJy4KKyAqIFJldHVybnMgVFJVRSBpZiB0aGVyZSBpcyBhIG1hdGNoLCBGQUxTRSBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK21hdGNoX2ZpbGVfcGF0KHBhdHRlcm4sIGZuYW1lLCBzZm5hbWUsIHRhaWwsIGFsbG93X2RpcnMpCisgICAgY2hhcl91CSpwYXR0ZXJuOwkJLyogcGF0dGVybiB0byBtYXRjaCB3aXRoICovCisgICAgY2hhcl91CSpmbmFtZTsJCQkvKiBmdWxsIHBhdGggb2YgZmlsZSBuYW1lICovCisgICAgY2hhcl91CSpzZm5hbWU7CQkvKiBzaG9ydCBmaWxlIG5hbWUgb3IgTlVMTCAqLworICAgIGNoYXJfdQkqdGFpbDsJCQkvKiB0YWlsIG9mIHBhdGggKi8KKyAgICBpbnQJCWFsbG93X2RpcnM7CQkvKiBhbGxvdyBtYXRjaGluZyB3aXRoIGRpciAqLworeworICAgIHJlZ21hdGNoX1QJcmVnbWF0Y2g7CisgICAgaW50CQlyZXN1bHQgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX09TRklMRVRZUEUKKyAgICBpbnQJCW5vX3BhdHRlcm4gPSBGQUxTRTsgLyogVFJVRSBpZiBjaGVjayBpcyBmaWxldHlwZSBvbmx5ICovCisgICAgY2hhcl91CSp0eXBlX3N0YXJ0OworICAgIGNoYXJfdQljOworICAgIGludAkJbWF0Y2ggPSBGQUxTRTsKKyNlbmRpZgorCisjaWZkZWYgQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRQorICAgIHJlZ21hdGNoLnJtX2ljID0gVFJVRTsJCS8qIEFsd2F5cyBpZ25vcmUgY2FzZSAqLworI2Vsc2UKKyAgICByZWdtYXRjaC5ybV9pYyA9IEZBTFNFOwkJLyogRG9uJ3QgZXZlciBpZ25vcmUgY2FzZSAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9PU0ZJTEVUWVBFCisgICAgaWYgKCpwYXR0ZXJuID09ICc8JykKKyAgICB7CisJLyogVGhlcmUgaXMgYSBmaWxldHlwZSBjb25kaXRpb24gc3BlY2lmaWVkIHdpdGggdGhpcyBwYXR0ZXJuLgorCSAqIENoZWNrIHRoZSBmaWxldHlwZSBtYXRjaGVzIGZpcnN0LiBJZiBub3QsIGRvbid0IGJvdGhlciB3aXRoIHRoZQorCSAqIHBhdHRlcm4gKHNldCByZWdwcm9nIHRvIE5VTEwpLgorCSAqIEFsd2F5cyB1c2UgbWFnaWMgZm9yIHRoZSByZWdleHAuCisJICovCisKKwlmb3IgKHR5cGVfc3RhcnQgPSBwYXR0ZXJuICsgMTsgKGMgPSAqcGF0dGVybik7IHBhdHRlcm4rKykKKwl7CisJICAgIGlmICgoYyA9PSAnOycgfHwgYyA9PSAnPicpICYmIG1hdGNoID09IEZBTFNFKQorCSAgICB7CisJCSpwYXR0ZXJuID0gTlVMOwkgICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcgKi8KKwkJbWF0Y2ggPSBtY2hfY2hlY2tfZmlsZXR5cGUoZm5hbWUsIHR5cGVfc3RhcnQpOworCQkqcGF0dGVybiA9IGM7CSAgICAvKiBSZXN0b3JlIHRoZSB0ZXJtaW5hdG9yICovCisJCXR5cGVfc3RhcnQgPSBwYXR0ZXJuICsgMTsKKwkgICAgfQorCSAgICBpZiAoYyA9PSAnPicpCisJCWJyZWFrOworCX0KKworCS8qIChjIHNob3VsZCBuZXZlciBiZSBOVUwsIGJ1dCBjaGVjayBhbnl3YXkpICovCisJaWYgKG1hdGNoID09IEZBTFNFIHx8IGMgPT0gTlVMKQorCSAgICByZWdtYXRjaC5yZWdwcm9nID0gTlVMTDsJLyogRG9lc24ndCBtYXRjaCAtIGRvbid0IGNoZWNrIHBhdC4gKi8KKwllbHNlIGlmICgqcGF0dGVybiA9PSBOVUwpCisJeworCSAgICByZWdtYXRjaC5yZWdwcm9nID0gTlVMTDsJLyogVmltIHdpbGwgdHJ5IHRvIGZyZWUgcmVncHJvZyBsYXRlciAqLworCSAgICBub19wYXR0ZXJuID0gVFJVRTsJLyogQWx3YXlzIG1hdGNoZXMgLSBkb24ndCBjaGVjayBwYXQuICovCisJfQorCWVsc2UKKwkgICAgcmVnbWF0Y2gucmVncHJvZyA9IHZpbV9yZWdjb21wKHBhdHRlcm4gKyAxLCBSRV9NQUdJQyk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCXJlZ21hdGNoLnJlZ3Byb2cgPSB2aW1fcmVnY29tcChwYXR0ZXJuLCBSRV9NQUdJQyk7CisKKyAgICAvKgorICAgICAqIFRyeSBmb3IgYSBtYXRjaCB3aXRoIHRoZSBwYXR0ZXJuIHdpdGg6CisgICAgICogMS4gdGhlIGZ1bGwgZmlsZSBuYW1lLCB3aGVuIHRoZSBwYXR0ZXJuIGhhcyBhICcvJy4KKyAgICAgKiAyLiB0aGUgc2hvcnQgZmlsZSBuYW1lLCB3aGVuIHRoZSBwYXR0ZXJuIGhhcyBhICcvJy4KKyAgICAgKiAzLiB0aGUgdGFpbCBvZiB0aGUgZmlsZSBuYW1lLCB3aGVuIHRoZSBwYXR0ZXJuIGhhcyBubyAnLycuCisgICAgICovCisgICAgaWYgKAorI2lmZGVmIEZFQVRfT1NGSUxFVFlQRQorCSAgICAvKiBJZiB0aGUgY2hlY2sgaXMgZm9yIGEgZmlsZXR5cGUgb25seSBhbmQgd2UgZG9uJ3QgY2FyZQorCSAgICAgKiBhYm91dCB0aGUgcGF0aCB0aGVuIHNraXAgYWxsIHRoZSByZWdleHAgc3R1ZmYuCisJICAgICAqLworCSAgICBub19wYXR0ZXJuIHx8CisjZW5kaWYKKwkgICAgKHJlZ21hdGNoLnJlZ3Byb2cgIT0gTlVMTAorCSAgICAgJiYgKChhbGxvd19kaXJzCisJCSAgICAgJiYgKHZpbV9yZWdleGVjKCZyZWdtYXRjaCwgZm5hbWUsIChjb2xucl9UKTApCisJCQkgfHwgKHNmbmFtZSAhPSBOVUxMCisJCQkgICAgICYmIHZpbV9yZWdleGVjKCZyZWdtYXRjaCwgc2ZuYW1lLCAoY29sbnJfVCkwKSkpKQorCQkgfHwgKCFhbGxvd19kaXJzICYmIHZpbV9yZWdleGVjKCZyZWdtYXRjaCwgdGFpbCwgKGNvbG5yX1QpMCkpKSkpCisJcmVzdWx0ID0gVFJVRTsKKworICAgIHZpbV9mcmVlKHJlZ21hdGNoLnJlZ3Byb2cpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9XSUxESUdOKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiBUUlVFIGlmIGEgZmlsZSBtYXRjaGVzIHdpdGggYSBwYXR0ZXJuIGluICJsaXN0Ii4KKyAqICJsaXN0IiBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zLCBsaWtlICd3aWxkaWdub3JlJy4KKyAqICJzZm5hbWUiIGlzIHRoZSBzaG9ydCBmaWxlIG5hbWUgb3IgTlVMTCwgImZmbmFtZSIgdGhlIGxvbmcgZmlsZSBuYW1lLgorICovCisgICAgaW50CittYXRjaF9maWxlX2xpc3QobGlzdCwgc2ZuYW1lLCBmZm5hbWUpCisgICAgY2hhcl91CSpsaXN0OworICAgIGNoYXJfdQkqc2ZuYW1lOworICAgIGNoYXJfdQkqZmZuYW1lOworeworICAgIGNoYXJfdQlidWZbMTAwXTsKKyAgICBjaGFyX3UJKnRhaWw7CisgICAgY2hhcl91CSpyZWdwYXQ7CisgICAgY2hhcglhbGxvd19kaXJzOworICAgIGludAkJbWF0Y2g7CisgICAgY2hhcl91CSpwOworCisgICAgdGFpbCA9IGdldHRhaWwoc2ZuYW1lKTsKKworICAgIC8qIHRyeSBhbGwgcGF0dGVybnMgaW4gJ3dpbGRpZ25vcmUnICovCisgICAgcCA9IGxpc3Q7CisgICAgd2hpbGUgKCpwKQorICAgIHsKKwljb3B5X29wdGlvbl9wYXJ0KCZwLCBidWYsIDEwMCwgIiwiKTsKKwlyZWdwYXQgPSBmaWxlX3BhdF90b19yZWdfcGF0KGJ1ZiwgTlVMTCwgJmFsbG93X2RpcnMsIEZBTFNFKTsKKwlpZiAocmVncGF0ID09IE5VTEwpCisJICAgIGJyZWFrOworCW1hdGNoID0gbWF0Y2hfZmlsZV9wYXQocmVncGF0LCBmZm5hbWUsIHNmbmFtZSwgdGFpbCwgKGludClhbGxvd19kaXJzKTsKKwl2aW1fZnJlZShyZWdwYXQpOworCWlmIChtYXRjaCkKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgorCisvKgorICogQ29udmVydCB0aGUgZ2l2ZW4gcGF0dGVybiAicGF0IiB3aGljaCBoYXMgc2hlbGwgc3R5bGUgd2lsZGNhcmRzIGluIGl0LCBpbnRvCisgKiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYW5kIHJldHVybiB0aGUgcmVzdWx0IGluIGFsbG9jYXRlZCBtZW1vcnkuICBJZiB0aGVyZQorICogaXMgYSBkaXJlY3RvcnkgcGF0aCBzZXBhcmF0b3IgdG8gYmUgbWF0Y2hlZCwgdGhlbiBUUlVFIGlzIHB1dCBpbgorICogYWxsb3dfZGlycywgb3RoZXJ3aXNlIEZBTFNFIGlzIHB1dCB0aGVyZSAtLSB3ZWJiLgorICogSGFuZGxlIGJhY2tzbGFzaGVzIGJlZm9yZSBzcGVjaWFsIGNoYXJhY3RlcnMsIGxpa2UgIlwqIiBhbmQgIlwgIi4KKyAqCisgKiBJZiBGRUFUX09TRklMRVRZUEUgZGVmaW5lZCB0aGVuIHBhc3MgaW5pdGlhbCA8dHlwZT4gdGhyb3VnaCB1bmNoYW5nZWQuIEVnOgorICogJzxodG1sPm15ZmlsZScgYmVjb21lcyAnPGh0bWw+Xm15ZmlsZSQnIC0tIGxlb25hcmQuCisgKgorICogUmV0dXJucyBOVUxMIHdoZW4gb3V0IG9mIG1lbW9yeS4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICoKK2ZpbGVfcGF0X3RvX3JlZ19wYXQocGF0LCBwYXRfZW5kLCBhbGxvd19kaXJzLCBub19ic2xhc2gpCisgICAgY2hhcl91CSpwYXQ7CisgICAgY2hhcl91CSpwYXRfZW5kOwkvKiBmaXJzdCBjaGFyIGFmdGVyIHBhdHRlcm4gb3IgTlVMTCAqLworICAgIGNoYXIJKmFsbG93X2RpcnM7CS8qIFJlc3VsdCBwYXNzZWQgYmFjayBvdXQgaW4gaGVyZSAqLworICAgIGludAkJbm9fYnNsYXNoOwkvKiBEb24ndCB1c2UgYSBiYWNrd2FyZCBzbGFzaCBhcyBwYXRoc2VwICovCit7CisgICAgaW50CQlzaXplOworICAgIGNoYXJfdQkqZW5kcDsKKyAgICBjaGFyX3UJKnJlZ19wYXQ7CisgICAgY2hhcl91CSpwOworICAgIGludAkJaTsKKyAgICBpbnQJCW5lc3RlZCA9IDA7CisgICAgaW50CQlhZGRfZG9sbGFyID0gVFJVRTsKKyNpZmRlZiBGRUFUX09TRklMRVRZUEUKKyAgICBpbnQJCWNoZWNrX2xlbmd0aCA9IDA7CisjZW5kaWYKKworICAgIGlmIChhbGxvd19kaXJzICE9IE5VTEwpCisJKmFsbG93X2RpcnMgPSBGQUxTRTsKKyAgICBpZiAocGF0X2VuZCA9PSBOVUxMKQorCXBhdF9lbmQgPSBwYXQgKyBTVFJMRU4ocGF0KTsKKworI2lmZGVmIEZFQVRfT1NGSUxFVFlQRQorICAgIC8qIEZpbmQgb3V0IGhvdyBtdWNoIG9mIHRoZSBzdHJpbmcgaXMgdGhlIGZpbGV0eXBlIGNoZWNrICovCisgICAgaWYgKCpwYXQgPT0gJzwnKQorICAgIHsKKwkvKiBDb3VudCBjaGFycyB1bnRpbCB0aGUgbmV4dCAnPicgKi8KKwlmb3IgKHAgPSBwYXQgKyAxOyBwIDwgcGF0X2VuZCAmJiAqcCAhPSAnPic7IHArKykKKwkgICAgOworCWlmIChwIDwgcGF0X2VuZCkKKwl7CisJICAgIC8qIFBhdHRlcm4gaXMgb2YgdGhlIGZvcm0gPC4qPi4qICAqLworCSAgICBjaGVja19sZW5ndGggPSBwIC0gcGF0ICsgMTsKKwkgICAgaWYgKHAgKyAxID49IHBhdF9lbmQpCisJICAgIHsKKwkJLyogVGhlICdwYXR0ZXJuJyBpcyBhIGZpbGV0eXBlIGNoZWNrIE9OTFkgKi8KKwkJcmVnX3BhdCA9IChjaGFyX3UgKilhbGxvYyhjaGVja19sZW5ndGggKyAxKTsKKwkJaWYgKHJlZ19wYXQgIT0gTlVMTCkKKwkJeworCQkgICAgbWNoX21lbW1vdmUocmVnX3BhdCwgcGF0LCAoc2l6ZV90KWNoZWNrX2xlbmd0aCk7CisJCSAgICByZWdfcGF0W2NoZWNrX2xlbmd0aF0gPSBOVUw7CisJCX0KKwkJcmV0dXJuIHJlZ19wYXQ7CisJICAgIH0KKwl9CisJLyogZWxzZTogdGhlcmUgd2FzIG5vIGNsb3NpbmcgJz4nIC0gYXNzdW1lIGl0IHdhcyBhIG5vcm1hbCBwYXR0ZXJuICovCisKKyAgICB9CisgICAgcGF0ICs9IGNoZWNrX2xlbmd0aDsKKyAgICBzaXplID0gMiArIGNoZWNrX2xlbmd0aDsKKyNlbHNlCisgICAgc2l6ZSA9IDI7CQkvKiAnXicgYXQgc3RhcnQsICckJyBhdCBlbmQgKi8KKyNlbmRpZgorCisgICAgZm9yIChwID0gcGF0OyBwIDwgcGF0X2VuZDsgcCsrKQorICAgIHsKKwlzd2l0Y2ggKCpwKQorCXsKKwkgICAgY2FzZSAnKic6CisJICAgIGNhc2UgJy4nOgorCSAgICBjYXNlICcsJzoKKwkgICAgY2FzZSAneyc6CisJICAgIGNhc2UgJ30nOgorCSAgICBjYXNlICd+JzoKKwkJc2l6ZSArPSAyOwkvKiBleHRyYSBiYWNrc2xhc2ggKi8KKwkJYnJlYWs7CisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJICAgIGNhc2UgJ1xcJzoKKwkgICAgY2FzZSAnLyc6CisJCXNpemUgKz0gNDsJLyogY291bGQgYmVjb21lICJbXC9dIiAqLworCQlicmVhazsKKyNlbmRpZgorCSAgICBkZWZhdWx0OgorCQlzaXplKys7CisjIGlmZGVmICBGRUFUX01CWVRFCisJCWlmIChlbmNfZGJjcyAhPSAwICYmICgqbWJfcHRyMmxlbl9jaGVjaykocCkgPiAxKQorCQl7CisJCSAgICArK3A7CisJCSAgICArK3NpemU7CisJCX0KKyMgZW5kaWYKKwkJYnJlYWs7CisJfQorICAgIH0KKyAgICByZWdfcGF0ID0gYWxsb2Moc2l6ZSArIDEpOworICAgIGlmIChyZWdfcGF0ID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBGRUFUX09TRklMRVRZUEUKKyAgICAvKiBDb3B5IHRoZSB0eXBlIGNoZWNrIGluIHRvIHRoZSBzdGFydC4gKi8KKyAgICBpZiAoY2hlY2tfbGVuZ3RoKQorCW1jaF9tZW1tb3ZlKHJlZ19wYXQsIHBhdCAtIGNoZWNrX2xlbmd0aCwgKHNpemVfdCljaGVja19sZW5ndGgpOworICAgIGkgPSBjaGVja19sZW5ndGg7CisjZWxzZQorICAgIGkgPSAwOworI2VuZGlmCisKKyAgICBpZiAocGF0WzBdID09ICcqJykKKwl3aGlsZSAocGF0WzBdID09ICcqJyAmJiBwYXQgPCBwYXRfZW5kIC0gMSkKKwkgICAgcGF0Kys7CisgICAgZWxzZQorCXJlZ19wYXRbaSsrXSA9ICdeJzsKKyAgICBlbmRwID0gcGF0X2VuZCAtIDE7CisgICAgaWYgKCplbmRwID09ICcqJykKKyAgICB7CisJd2hpbGUgKGVuZHAgLSBwYXQgPiAwICYmICplbmRwID09ICcqJykKKwkgICAgZW5kcC0tOworCWFkZF9kb2xsYXIgPSBGQUxTRTsKKyAgICB9CisgICAgZm9yIChwID0gcGF0OyAqcCAmJiBuZXN0ZWQgPj0gMCAmJiBwIDw9IGVuZHA7IHArKykKKyAgICB7CisJc3dpdGNoICgqcCkKKwl7CisJICAgIGNhc2UgJyonOgorCQlyZWdfcGF0W2krK10gPSAnLic7CisJCXJlZ19wYXRbaSsrXSA9ICcqJzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJy4nOgorI2lmZGVmIFJJU0NPUworCQlpZiAoYWxsb3dfZGlycyAhPSBOVUxMKQorCQkgICAgICphbGxvd19kaXJzID0gVFJVRTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKyNlbmRpZgorCSAgICBjYXNlICd+JzoKKwkJcmVnX3BhdFtpKytdID0gJ1xcJzsKKwkJcmVnX3BhdFtpKytdID0gKnA7CisJCWJyZWFrOworCSAgICBjYXNlICc/JzoKKyNpZmRlZiBSSVNDT1MKKwkgICAgY2FzZSAnIyc6CisjZW5kaWYKKwkJcmVnX3BhdFtpKytdID0gJy4nOworCQlicmVhazsKKwkgICAgY2FzZSAnXFwnOgorCQlpZiAocFsxXSA9PSBOVUwpCisJCSAgICBicmVhazsKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwkJaWYgKCFub19ic2xhc2gpCisJCXsKKwkJICAgIC8qIHRyYW5zbGF0ZToKKwkJICAgICAqICJceCIgdG8gIlxceCIgIGUuZy4sICJkaXJcZmlsZSIKKwkJICAgICAqICJcKiIgdG8gIlxcLioiIGUuZy4sICJkaXJcKi5jIgorCQkgICAgICogIlw/IiB0byAiXFwuIiAgZS5nLiwgImRpclw/Py5jIgorCQkgICAgICogIlwrIiB0byAiXCsiICAgZS5nLiwgImZpbGVYXCsuYyIKKwkJICAgICAqLworCQkgICAgaWYgKCh2aW1faXNmaWxlYyhwWzFdKSB8fCBwWzFdID09ICcqJyB8fCBwWzFdID09ICc/JykKKwkJCSAgICAmJiBwWzFdICE9ICcrJykKKwkJICAgIHsKKwkJCXJlZ19wYXRbaSsrXSA9ICdbJzsKKwkJCXJlZ19wYXRbaSsrXSA9ICdcXCc7CisJCQlyZWdfcGF0W2krK10gPSAnLyc7CisJCQlyZWdfcGF0W2krK10gPSAnXSc7CisJCQlpZiAoYWxsb3dfZGlycyAhPSBOVUxMKQorCQkJICAgICphbGxvd19kaXJzID0gVFJVRTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisjZW5kaWYKKwkJaWYgKCorK3AgPT0gJz8nCisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJCQkmJiBub19ic2xhc2gKKyNlbmRpZgorCQkJKQorCQkgICAgcmVnX3BhdFtpKytdID0gJz8nOworCQllbHNlCisJCSAgICBpZiAoKnAgPT0gJywnKQorCQkJcmVnX3BhdFtpKytdID0gJywnOworCQkgICAgZWxzZQorCQkgICAgeworCQkJaWYgKGFsbG93X2RpcnMgIT0gTlVMTCAmJiB2aW1faXNwYXRoc2VwKCpwKQorI2lmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorCQkJCSYmICghbm9fYnNsYXNoIHx8ICpwICE9ICdcXCcpCisjZW5kaWYKKwkJCQkpCisJCQkgICAgKmFsbG93X2RpcnMgPSBUUlVFOworCQkJcmVnX3BhdFtpKytdID0gJ1xcJzsKKwkJCXJlZ19wYXRbaSsrXSA9ICpwOworCQkgICAgfQorCQlicmVhazsKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwkgICAgY2FzZSAnLyc6CisJCXJlZ19wYXRbaSsrXSA9ICdbJzsKKwkJcmVnX3BhdFtpKytdID0gJ1xcJzsKKwkJcmVnX3BhdFtpKytdID0gJy8nOworCQlyZWdfcGF0W2krK10gPSAnXSc7CisJCWlmIChhbGxvd19kaXJzICE9IE5VTEwpCisJCSAgICAqYWxsb3dfZGlycyA9IFRSVUU7CisJCWJyZWFrOworI2VuZGlmCisJICAgIGNhc2UgJ3snOgorCQlyZWdfcGF0W2krK10gPSAnXFwnOworCQlyZWdfcGF0W2krK10gPSAnKCc7CisJCW5lc3RlZCsrOworCQlicmVhazsKKwkgICAgY2FzZSAnfSc6CisJCXJlZ19wYXRbaSsrXSA9ICdcXCc7CisJCXJlZ19wYXRbaSsrXSA9ICcpJzsKKwkJLS1uZXN0ZWQ7CisJCWJyZWFrOworCSAgICBjYXNlICcsJzoKKwkJaWYgKG5lc3RlZCkKKwkJeworCQkgICAgcmVnX3BhdFtpKytdID0gJ1xcJzsKKwkJICAgIHJlZ19wYXRbaSsrXSA9ICd8JzsKKwkJfQorCQllbHNlCisJCSAgICByZWdfcGF0W2krK10gPSAnLCc7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorIyBpZmRlZiAgRkVBVF9NQllURQorCQlpZiAoZW5jX2RiY3MgIT0gMCAmJiAoKm1iX3B0cjJsZW5fY2hlY2spKHApID4gMSkKKwkJICAgIHJlZ19wYXRbaSsrXSA9ICpwKys7CisJCWVsc2UKKyMgZW5kaWYKKwkJaWYgKGFsbG93X2RpcnMgIT0gTlVMTCAmJiB2aW1faXNwYXRoc2VwKCpwKSkKKwkJICAgICphbGxvd19kaXJzID0gVFJVRTsKKwkJcmVnX3BhdFtpKytdID0gKnA7CisJCWJyZWFrOworCX0KKyAgICB9CisgICAgaWYgKGFkZF9kb2xsYXIpCisJcmVnX3BhdFtpKytdID0gJyQnOworICAgIHJlZ19wYXRbaV0gPSBOVUw7CisgICAgaWYgKG5lc3RlZCAhPSAwKQorICAgIHsKKwlpZiAobmVzdGVkIDwgMCkKKwkgICAgRU1TRyhfKCJFMjE5OiBNaXNzaW5nIHsuIikpOworCWVsc2UKKwkgICAgRU1TRyhfKCJFMjIwOiBNaXNzaW5nIH0uIikpOworCXZpbV9mcmVlKHJlZ19wYXQpOworCXJlZ19wYXQgPSBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmVnX3BhdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9mb2xkLmMgYi9zcmMvZm9sZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYWMwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZm9sZC5jCkBAIC0wLDAgKzEsMzI1MCBAQAorLyogdmltOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKiB2aW02MDA6ZmRtPW1hcmtlciBmZGw9MSBmZGM9MzoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogZm9sZC5jOiBjb2RlIGZvciBmb2xkaW5nCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisjaWYgZGVmaW5lZChGRUFUX0ZPTERJTkcpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qIGxvY2FsIGRlY2xhcmF0aW9ucy4ge3t7MSAqLworLyogdHlwZWRlZiBmb2xkX1Qge3t7MiAqLworLyoKKyAqIFRoZSB0b3BsZXZlbCBmb2xkcyBmb3IgZWFjaCB3aW5kb3cgYXJlIHN0b3JlZCBpbiB0aGUgd19mb2xkcyBncm93YXJyYXkuCisgKiBFYWNoIHRvcGxldmVsIGZvbGQgY2FuIGNvbnRhaW4gYW4gYXJyYXkgb2Ygc2Vjb25kIGxldmVsIGZvbGRzIGluIHRoZQorICogZmRfbmVzdGVkIGdyb3dhcnJheS4KKyAqIFRoZSBpbmZvIHN0b3JlZCBpbiBib3RoIGdyb3dhcnJheXMgaXMgdGhlIHNhbWU6IEFuIGFycmF5IG9mIGZvbGRfVC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBsaW5lbnJfVAlmZF90b3A7CQkvKiBmaXJzdCBsaW5lIG9mIGZvbGQ7IGZvciBuZXN0ZWQgZm9sZAorCQkJCSAqIHJlbGF0aXZlIHRvIHBhcmVudCAqLworICAgIGxpbmVucl9UCWZkX2xlbjsJCS8qIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZm9sZCAqLworICAgIGdhcnJheV9UCWZkX25lc3RlZDsJLyogYXJyYXkgb2YgbmVzdGVkIGZvbGRzICovCisgICAgY2hhcglmZF9mbGFnczsJLyogc2VlIGJlbG93ICovCisgICAgY2hhcglmZF9zbWFsbDsJLyogVFJVRSwgRkFMU0Ugb3IgTUFZQkU6IGZvbGQgc21hbGxlciB0aGFuCisJCQkJICAgJ2ZvbGRtaW5saW5lcyc7IE1BWUJFIGFwcGxpZXMgdG8gbmVzdGVkCisJCQkJICAgZm9sZHMgdG9vICovCit9IGZvbGRfVDsKKworI2RlZmluZSBGRF9PUEVOCQkwCS8qIGZvbGQgaXMgb3BlbiAobmVzdGVkIG9uZXMgY2FuIGJlIGNsb3NlZCkgKi8KKyNkZWZpbmUgRkRfQ0xPU0VECTEJLyogZm9sZCBpcyBjbG9zZWQgKi8KKyNkZWZpbmUgRkRfTEVWRUwJMgkvKiBkZXBlbmRzIG9uICdmb2xkbGV2ZWwnIChuZXN0ZWQgZm9sZHMgdG9vKSAqLworCisjZGVmaW5lIE1BWF9MRVZFTAkyMAkvKiBtYXhpbXVtIGZvbGQgZGVwdGggKi8KKworLyogc3RhdGljIGZ1bmN0aW9ucyB7e3syICovCitzdGF0aWMgdm9pZCBuZXdGb2xkTGV2ZWxXaW4gX19BUkdTKCh3aW5fVCAqd3ApKTsKK3N0YXRpYyBpbnQgY2hlY2tDbG9zZVJlYyBfX0FSR1MoKGdhcnJheV9UICpnYXAsIGxpbmVucl9UIGxudW0sIGludCBsZXZlbCkpOworc3RhdGljIGludCBmb2xkRmluZCBfX0FSR1MoKGdhcnJheV9UICpnYXAsIGxpbmVucl9UIGxudW0sIGZvbGRfVCAqKmZwcCkpOworc3RhdGljIGludCBmb2xkTGV2ZWxXaW4gX19BUkdTKCh3aW5fVCAqd3AsIGxpbmVucl9UIGxudW0pKTsKK3N0YXRpYyB2b2lkIGNoZWNrdXBkYXRlIF9fQVJHUygod2luX1QgKndwKSk7CitzdGF0aWMgdm9pZCBzZXRGb2xkUmVwZWF0IF9fQVJHUygobGluZW5yX1QgbG51bSwgbG9uZyBjb3VudCwgaW50IG9wZW4pKTsKK3N0YXRpYyBsaW5lbnJfVCBzZXRNYW51YWxGb2xkIF9fQVJHUygobGluZW5yX1QgbG51bSwgaW50IG9wZW5pbmcsIGludCByZWN1cnNlLCBpbnQgKmRvbmVwKSk7CitzdGF0aWMgbGluZW5yX1Qgc2V0TWFudWFsRm9sZFdpbiBfX0FSR1MoKHdpbl9UICp3cCwgbGluZW5yX1QgbG51bSwgaW50IG9wZW5pbmcsIGludCByZWN1cnNlLCBpbnQgKmRvbmVwKSk7CitzdGF0aWMgdm9pZCBmb2xkT3Blbk5lc3RlZCBfX0FSR1MoKGZvbGRfVCAqZnByKSk7CitzdGF0aWMgdm9pZCBkZWxldGVGb2xkRW50cnkgX19BUkdTKChnYXJyYXlfVCAqZ2FwLCBpbnQgaWR4LCBpbnQgcmVjdXJzaXZlKSk7CitzdGF0aWMgdm9pZCBmb2xkTWFya0FkanVzdFJlY3Vyc2UgX19BUkdTKChnYXJyYXlfVCAqZ2FwLCBsaW5lbnJfVCBsaW5lMSwgbGluZW5yX1QgbGluZTIsIGxvbmcgYW1vdW50LCBsb25nIGFtb3VudF9hZnRlcikpOworc3RhdGljIGludCBnZXREZWVwZXN0TmVzdGluZ1JlY3Vyc2UgX19BUkdTKChnYXJyYXlfVCAqZ2FwKSk7CitzdGF0aWMgaW50IGNoZWNrX2Nsb3NlZCBfX0FSR1MoKHdpbl9UICp3aW4sIGZvbGRfVCAqZnAsIGludCAqdXNlX2xldmVscCwgaW50IGxldmVsLCBpbnQgKm1heWJlX3NtYWxscCwgbGluZW5yX1QgbG51bV9vZmYpKTsKK3N0YXRpYyB2b2lkIGNoZWNrU21hbGwgX19BUkdTKCh3aW5fVCAqd3AsIGZvbGRfVCAqZnAsIGxpbmVucl9UIGxudW1fb2ZmKSk7CitzdGF0aWMgdm9pZCBzZXRTbWFsbE1heWJlIF9fQVJHUygoZ2FycmF5X1QgKmdhcCkpOworc3RhdGljIHZvaWQgZm9sZENyZWF0ZU1hcmtlcnMgX19BUkdTKChsaW5lbnJfVCBzdGFydCwgbGluZW5yX1QgZW5kKSk7CitzdGF0aWMgdm9pZCBmb2xkQWRkTWFya2VyIF9fQVJHUygobGluZW5yX1QgbG51bSwgY2hhcl91ICptYXJrZXIsIGludCBtYXJrZXJsZW4pKTsKK3N0YXRpYyB2b2lkIGRlbGV0ZUZvbGRNYXJrZXJzIF9fQVJHUygoZm9sZF9UICpmcCwgaW50IHJlY3Vyc2l2ZSwgbGluZW5yX1QgbG51bV9vZmYpKTsKK3N0YXRpYyB2b2lkIGZvbGREZWxNYXJrZXIgX19BUkdTKChsaW5lbnJfVCBsbnVtLCBjaGFyX3UgKm1hcmtlciwgaW50IG1hcmtlcmxlbikpOworc3RhdGljIHZvaWQgZm9sZFVwZGF0ZUlFTVMgX19BUkdTKCh3aW5fVCAqd3AsIGxpbmVucl9UIHRvcCwgbGluZW5yX1QgYm90KSk7CitzdGF0aWMgdm9pZCBwYXJzZU1hcmtlciBfX0FSR1MoKHdpbl9UICp3cCkpOworCitzdGF0aWMgY2hhciAqZV9ub2ZvbGQgPSBOXygiRTQ5MDogTm8gZm9sZCBmb3VuZCIpOworCisvKgorICogV2hpbGUgdXBkYXRpbmcgdGhlIGZvbGRzIGxpbmVzIGJldHdlZW4gaW52YWxpZF90b3AgYW5kIGludmFsaWRfYm90IGhhdmUgYW4KKyAqIHVuZGVmaW5lZCBmb2xkIGxldmVsLiAgT25seSB1c2VkIGZvciB0aGUgd2luZG93IGN1cnJlbnRseSBiZWluZyB1cGRhdGVkLgorICovCitzdGF0aWMgbGluZW5yX1QgaW52YWxpZF90b3AgPSAobGluZW5yX1QpMDsKK3N0YXRpYyBsaW5lbnJfVCBpbnZhbGlkX2JvdCA9IChsaW5lbnJfVCkwOworCisvKgorICogV2hlbiB1c2luZyAnZm9sZGV4cHInIHdlIHNvbWV0aW1lcyBnZXQgdGhlIGxldmVsIG9mIHRoZSBuZXh0IGxpbmUsIHdoaWNoCisgKiBjYWxscyBmb2xkbGV2ZWwoKSB0byBnZXQgdGhlIGxldmVsIG9mIHRoZSBjdXJyZW50IGxpbmUsIHdoaWNoIGhhc24ndCBiZWVuCisgKiBzdG9yZWQgeWV0LiAgVG8gZ2V0IGFyb3VuZCB0aGlzIGNoaWNrZW4tZWdnIHByb2JsZW0gdGhlIGxldmVsIG9mIHRoZQorICogcHJldmlvdXMgbGluZSBpcyBzdG9yZWQgaGVyZSB3aGVuIGF2YWlsYWJsZS4gIHByZXZfbG51bSBpcyB6ZXJvIHdoZW4gdGhlCisgKiBsZXZlbCBpcyBub3QgYXZhaWxhYmxlLgorICovCitzdGF0aWMgbGluZW5yX1QgcHJldl9sbnVtID0gMDsKK3N0YXRpYyBpbnQgcHJldl9sbnVtX2x2bCA9IC0xOworCisvKiBGbGFncyB1c2VkIGZvciAiZG9uZSIgYXJndW1lbnQgb2Ygc2V0TWFudWFsRm9sZC4gKi8KKyNkZWZpbmUgRE9ORV9OT1RISU5HCTAKKyNkZWZpbmUgRE9ORV9BQ1RJT04JMQkvKiBkaWQgY2xvc2Ugb3Igb3BlbiBhIGZvbGQgKi8KKyNkZWZpbmUgRE9ORV9GT0xECTIJLyogZGlkIGZpbmQgYSBmb2xkICovCisKK3N0YXRpYyBpbnQgZm9sZHN0YXJ0bWFya2VybGVuOworc3RhdGljIGNoYXJfdSAqZm9sZGVuZG1hcmtlcjsKK3N0YXRpYyBpbnQgZm9sZGVuZG1hcmtlcmxlbjsKKworLyogRXhwb3J0ZWQgZm9sZGluZyBmdW5jdGlvbnMuIHt7ezEgKi8KKy8qIGNvcHlGb2xkaW5nU3RhdGUoKSB7e3syICovCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ29weSB0aGF0IGZvbGRpbmcgc3RhdGUgZnJvbSB3aW5kb3cgIndwX2Zyb20iIHRvIHdpbmRvdyAid3BfdG8iLgorICovCisgICAgdm9pZAorY29weUZvbGRpbmdTdGF0ZSh3cF9mcm9tLCB3cF90bykKKyAgICB3aW5fVAkqd3BfZnJvbTsKKyAgICB3aW5fVAkqd3BfdG87Cit7CisgICAgd3BfdG8tPndfZm9sZF9tYW51YWwgPSB3cF9mcm9tLT53X2ZvbGRfbWFudWFsOworICAgIHdwX3RvLT53X2ZvbGRpbnZhbGlkID0gd3BfZnJvbS0+d19mb2xkaW52YWxpZDsKKyAgICBjbG9uZUZvbGRHcm93QXJyYXkoJndwX2Zyb20tPndfZm9sZHMsICZ3cF90by0+d19mb2xkcyk7Cit9CisjZW5kaWYKKworLyogaGFzQW55Rm9sZGluZygpIHt7ezIgKi8KKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGVyZSBtYXkgYmUgZm9sZGVkIGxpbmVzIGluIHRoZSBjdXJyZW50IHdpbmRvdy4KKyAqLworICAgIGludAoraGFzQW55Rm9sZGluZyh3aW4pCisgICAgd2luX1QJKndpbjsKK3sKKyAgICAvKiB2ZXJ5IHNpbXBsZSBub3csIGJ1dCBjYW4gYmVjb21lIG1vcmUgY29tcGxleCBsYXRlciAqLworICAgIHJldHVybiAod2luLT53X3BfZmVuCisJICAgICYmICghZm9sZG1ldGhvZElzTWFudWFsKHdpbikgfHwgd2luLT53X2ZvbGRzLmdhX2xlbiA+IDApKTsKK30KKworLyogaGFzRm9sZGluZygpIHt7ezIgKi8KKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBsaW5lICJsbnVtIiBpbiB0aGUgY3VycmVudCB3aW5kb3cgaXMgcGFydCBvZiBhIGNsb3NlZAorICogZm9sZC4KKyAqIFdoZW4gcmV0dXJuaW5nIFRSVUUsICpmaXJzdHAgYW5kICpsYXN0cCBhcmUgc2V0IHRvIHRoZSBmaXJzdCBhbmQgbGFzdAorICogbG51bSBvZiB0aGUgc2VxdWVuY2Ugb2YgZm9sZGVkIGxpbmVzIChza2lwcGVkIHdoZW4gTlVMTCkuCisgKi8KKyAgICBpbnQKK2hhc0ZvbGRpbmcobG51bSwgZmlyc3RwLCBsYXN0cCkKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGxpbmVucl9UCSpmaXJzdHA7CisgICAgbGluZW5yX1QJKmxhc3RwOworeworICAgIHJldHVybiBoYXNGb2xkaW5nV2luKGN1cndpbiwgbG51bSwgZmlyc3RwLCBsYXN0cCwgVFJVRSwgTlVMTCk7Cit9CisKKy8qIGhhc0ZvbGRpbmdXaW4oKSB7e3syICovCisgICAgaW50CitoYXNGb2xkaW5nV2luKHdpbiwgbG51bSwgZmlyc3RwLCBsYXN0cCwgY2FjaGUsIGluZm9wKQorICAgIHdpbl9UCSp3aW47CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBsaW5lbnJfVAkqZmlyc3RwOworICAgIGxpbmVucl9UCSpsYXN0cDsKKyAgICBpbnQJCWNhY2hlOwkJLyogd2hlbiBUUlVFOiB1c2UgY2FjaGVkIHZhbHVlcyBvZiB3aW5kb3cgKi8KKyAgICBmb2xkaW5mb19UCSppbmZvcDsJCS8qIHdoZXJlIHRvIHN0b3JlIGZvbGQgaW5mbyAqLworeworICAgIGludAkJaGFkX2ZvbGRlZCA9IEZBTFNFOworICAgIGxpbmVucl9UCWZpcnN0ID0gMDsKKyAgICBsaW5lbnJfVAlsYXN0ID0gMDsKKyAgICBsaW5lbnJfVAlsbnVtX3JlbCA9IGxudW07CisgICAgaW50CQl4OworICAgIGZvbGRfVAkqZnA7CisgICAgaW50CQlsZXZlbCA9IDA7CisgICAgaW50CQl1c2VfbGV2ZWwgPSBGQUxTRTsKKyAgICBpbnQJCW1heWJlX3NtYWxsID0gRkFMU0U7CisgICAgZ2FycmF5X1QJKmdhcDsKKyAgICBpbnQJCWxvd19sZXZlbCA9IDA7OworCisgICAgY2hlY2t1cGRhdGUod2luKTsKKyAgICAvKgorICAgICAqIFJldHVybiBxdWlja2x5IHdoZW4gdGhlcmUgaXMgbm8gZm9sZGluZyBhdCBhbGwgaW4gdGhpcyB3aW5kb3cuCisgICAgICovCisgICAgaWYgKCFoYXNBbnlGb2xkaW5nKHdpbikpCisgICAgeworCWlmIChpbmZvcCAhPSBOVUxMKQorCSAgICBpbmZvcC0+ZmlfbGV2ZWwgPSAwOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoY2FjaGUpCisgICAgeworCS8qCisJICogRmlyc3QgbG9vayBpbiBjYWNoZWQgaW5mbyBmb3IgZGlzcGxheWVkIGxpbmVzLiAgVGhpcyBpcyBwcm9iYWJseQorCSAqIHRoZSBmYXN0ZXN0LCBidXQgaXQgY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgZW50cnkgaXMgc3RpbGwgdmFsaWQuCisJICovCisJeCA9IGZpbmRfd2xfZW50cnkod2luLCBsbnVtKTsKKwlpZiAoeCA+PSAwKQorCXsKKwkgICAgZmlyc3QgPSB3aW4tPndfbGluZXNbeF0ud2xfbG51bTsKKwkgICAgbGFzdCA9IHdpbi0+d19saW5lc1t4XS53bF9sYXN0bG51bTsKKwkgICAgaGFkX2ZvbGRlZCA9IHdpbi0+d19saW5lc1t4XS53bF9mb2xkZWQ7CisJfQorICAgIH0KKworICAgIGlmIChmaXJzdCA9PSAwKQorICAgIHsKKwkvKgorCSAqIFJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgYSBmb2xkIHRoYXQgY29udGFpbnMgImxudW0iLgorCSAqLworCWdhcCA9ICZ3aW4tPndfZm9sZHM7CisJZm9yICg7OykKKwl7CisJICAgIGlmICghZm9sZEZpbmQoZ2FwLCBsbnVtX3JlbCwgJmZwKSkKKwkJYnJlYWs7CisKKwkgICAgLyogUmVtZW1iZXIgbG93ZXN0IGxldmVsIG9mIGZvbGQgdGhhdCBzdGFydHMgaW4gImxudW0iLiAqLworCSAgICBpZiAobG51bV9yZWwgPT0gZnAtPmZkX3RvcCAmJiBsb3dfbGV2ZWwgPT0gMCkKKwkJbG93X2xldmVsID0gbGV2ZWwgKyAxOworCisJICAgIGZpcnN0ICs9IGZwLT5mZF90b3A7CisJICAgIGxhc3QgKz0gZnAtPmZkX3RvcDsKKworCSAgICAvKiBpcyB0aGlzIGZvbGQgY2xvc2VkPyAqLworCSAgICBoYWRfZm9sZGVkID0gY2hlY2tfY2xvc2VkKHdpbiwgZnAsICZ1c2VfbGV2ZWwsIGxldmVsLAorCQkJCQkgICAgICAgJm1heWJlX3NtYWxsLCBsbnVtIC0gbG51bV9yZWwpOworCSAgICBpZiAoaGFkX2ZvbGRlZCkKKwkgICAgeworCQkvKiBGb2xkIGNsb3NlZDogU2V0IGxhc3QgYW5kIHF1aXQgbG9vcC4gKi8KKwkJbGFzdCArPSBmcC0+ZmRfbGVuIC0gMTsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICAvKiBGb2xkIGZvdW5kLCBidXQgaXQncyBvcGVuOiBDaGVjayBuZXN0ZWQgZm9sZHMuICBMaW5lIG51bWJlciBpcworCSAgICAgKiByZWxhdGl2ZSB0byBjb250YWluaW5nIGZvbGQuICovCisJICAgIGdhcCA9ICZmcC0+ZmRfbmVzdGVkOworCSAgICBsbnVtX3JlbCAtPSBmcC0+ZmRfdG9wOworCSAgICArK2xldmVsOworCX0KKyAgICB9CisKKyAgICBpZiAoIWhhZF9mb2xkZWQpCisgICAgeworCWlmIChpbmZvcCAhPSBOVUxMKQorCXsKKwkgICAgaW5mb3AtPmZpX2xldmVsID0gbGV2ZWw7CisJICAgIGluZm9wLT5maV9sbnVtID0gbG51bSAtIGxudW1fcmVsOworCSAgICBpbmZvcC0+ZmlfbG93X2xldmVsID0gbG93X2xldmVsID09IDAgPyBsZXZlbCA6IGxvd19sZXZlbDsKKwl9CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChsYXN0cCAhPSBOVUxMKQorCSpsYXN0cCA9IGxhc3Q7CisgICAgaWYgKGZpcnN0cCAhPSBOVUxMKQorCSpmaXJzdHAgPSBmaXJzdDsKKyAgICBpZiAoaW5mb3AgIT0gTlVMTCkKKyAgICB7CisJaW5mb3AtPmZpX2xldmVsID0gbGV2ZWwgKyAxOworCWluZm9wLT5maV9sbnVtID0gZmlyc3Q7CisJaW5mb3AtPmZpX2xvd19sZXZlbCA9IGxvd19sZXZlbCA9PSAwID8gbGV2ZWwgKyAxIDogbG93X2xldmVsOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworLyogZm9sZExldmVsKCkge3t7MiAqLworLyoKKyAqIFJldHVybiBmb2xkIGxldmVsIGF0IGxpbmUgbnVtYmVyICJsbnVtIiBpbiB0aGUgY3VycmVudCB3aW5kb3cuCisgKi8KKyAgICBpbnQKK2ZvbGRMZXZlbChsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgLyogV2hpbGUgdXBkYXRpbmcgdGhlIGZvbGRzIGxpbmVzIGJldHdlZW4gaW52YWxpZF90b3AgYW5kIGludmFsaWRfYm90IGhhdmUKKyAgICAgKiBhbiB1bmRlZmluZWQgZm9sZCBsZXZlbC4gIE90aGVyd2lzZSB1cGRhdGUgdGhlIGZvbGRzIGZpcnN0LiAqLworICAgIGlmIChpbnZhbGlkX3RvcCA9PSAobGluZW5yX1QpMCkKKwljaGVja3VwZGF0ZShjdXJ3aW4pOworICAgIGVsc2UgaWYgKGxudW0gPT0gcHJldl9sbnVtICYmIHByZXZfbG51bV9sdmwgPj0gMCkKKwlyZXR1cm4gcHJldl9sbnVtX2x2bDsKKyAgICBlbHNlIGlmIChsbnVtID49IGludmFsaWRfdG9wICYmIGxudW0gPD0gaW52YWxpZF9ib3QpCisJcmV0dXJuIC0xOworCisgICAgLyogUmV0dXJuIHF1aWNrbHkgd2hlbiB0aGVyZSBpcyBubyBmb2xkaW5nIGF0IGFsbCBpbiB0aGlzIHdpbmRvdy4gKi8KKyAgICBpZiAoIWhhc0FueUZvbGRpbmcoY3Vyd2luKSkKKwlyZXR1cm4gMDsKKworICAgIHJldHVybiBmb2xkTGV2ZWxXaW4oY3Vyd2luLCBsbnVtKTsKK30KKworLyogbGluZUZvbGRlZCgpCXt7ezIgKi8KKy8qCisgKiBMb3cgbGV2ZWwgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBsaW5lIGlzIGZvbGRlZC4gIERvZXNuJ3QgdXNlIGFueSBjYWNoaW5nLgorICogUmV0dXJuIFRSVUUgaWYgbGluZSBpcyBmb2xkZWQuCisgKiBSZXR1cm4gRkFMU0UgaWYgbGluZSBpcyBub3QgZm9sZGVkLgorICogUmV0dXJuIE1BWUJFIGlmIHRoZSBsaW5lIGlzIGZvbGRlZCB3aGVuIG5leHQgdG8gYSBmb2xkZWQgbGluZS4KKyAqLworICAgIGludAorbGluZUZvbGRlZCh3aW4sIGxudW0pCisgICAgd2luX1QJKndpbjsKKyAgICBsaW5lbnJfVAlsbnVtOworeworICAgIHJldHVybiBmb2xkZWRDb3VudCh3aW4sIGxudW0sIE5VTEwpICE9IDA7Cit9CisKKy8qIGZvbGRlZENvdW50KCkge3t7MiAqLworLyoKKyAqIENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBhcmUgZm9sZGVkIGF0IGxpbmUgbnVtYmVyICJsbnVtIi4KKyAqIE5vcm1hbGx5ICJsbnVtIiBpcyB0aGUgZmlyc3QgbGluZSBvZiBhIHBvc3NpYmxlIGZvbGQsIGFuZCB0aGUgcmV0dXJuZWQKKyAqIG51bWJlciBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBmb2xkLgorICogRG9lc24ndCB1c2UgY2FjaGluZyBmcm9tIHRoZSBkaXNwbGF5ZWQgd2luZG93LgorICogUmV0dXJucyBudW1iZXIgb2YgZm9sZGVkIGxpbmVzIGZyb20gImxudW0iLCBvciAwIGlmIGxpbmUgaXMgbm90IGZvbGRlZC4KKyAqIFdoZW4gImluZm9wIiBpcyBub3QgTlVMTCwgZmlsbHMgKmluZm9wIHdpdGggdGhlIGZvbGQgbGV2ZWwgaW5mby4KKyAqLworICAgIGxvbmcKK2ZvbGRlZENvdW50KHdpbiwgbG51bSwgaW5mb3ApCisgICAgd2luX1QJKndpbjsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGZvbGRpbmZvX1QJKmluZm9wOworeworICAgIGxpbmVucl9UCWxhc3Q7CisKKyAgICBpZiAoaGFzRm9sZGluZ1dpbih3aW4sIGxudW0sIE5VTEwsICZsYXN0LCBGQUxTRSwgaW5mb3ApKQorCXJldHVybiAobG9uZykobGFzdCAtIGxudW0gKyAxKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogZm9sZG1ldGhvZElzTWFudWFsKCkge3t7MiAqLworLyoKKyAqIFJldHVybiBUUlVFIGlmICdmb2xkbWV0aG9kJyBpcyAibWFudWFsIgorICovCisgICAgaW50Citmb2xkbWV0aG9kSXNNYW51YWwod3ApCisgICAgd2luX1QJKndwOworeworICAgIHJldHVybiAod3AtPndfcF9mZG1bM10gPT0gJ3UnKTsKK30KKworLyogZm9sZG1ldGhvZElzSW5kZW50KCkge3t7MiAqLworLyoKKyAqIFJldHVybiBUUlVFIGlmICdmb2xkbWV0aG9kJyBpcyAiaW5kZW50IgorICovCisgICAgaW50Citmb2xkbWV0aG9kSXNJbmRlbnQod3ApCisgICAgd2luX1QJKndwOworeworICAgIHJldHVybiAod3AtPndfcF9mZG1bMF0gPT0gJ2knKTsKK30KKworLyogZm9sZG1ldGhvZElzRXhwcigpIHt7ezIgKi8KKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAnZm9sZG1ldGhvZCcgaXMgImV4cHIiCisgKi8KKyAgICBpbnQKK2ZvbGRtZXRob2RJc0V4cHIod3ApCisgICAgd2luX1QJKndwOworeworICAgIHJldHVybiAod3AtPndfcF9mZG1bMV0gPT0gJ3gnKTsKK30KKworLyogZm9sZG1ldGhvZElzTWFya2VyKCkge3t7MiAqLworLyoKKyAqIFJldHVybiBUUlVFIGlmICdmb2xkbWV0aG9kJyBpcyAibWFya2VyIgorICovCisgICAgaW50Citmb2xkbWV0aG9kSXNNYXJrZXIod3ApCisgICAgd2luX1QJKndwOworeworICAgIHJldHVybiAod3AtPndfcF9mZG1bMl0gPT0gJ3InKTsKK30KKworLyogZm9sZG1ldGhvZElzU3ludGF4KCkge3t7MiAqLworLyoKKyAqIFJldHVybiBUUlVFIGlmICdmb2xkbWV0aG9kJyBpcyAic3ludGF4IgorICovCisgICAgaW50Citmb2xkbWV0aG9kSXNTeW50YXgod3ApCisgICAgd2luX1QJKndwOworeworICAgIHJldHVybiAod3AtPndfcF9mZG1bMF0gPT0gJ3MnKTsKK30KKworLyogZm9sZG1ldGhvZElzRGlmZigpIHt7ezIgKi8KKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAnZm9sZG1ldGhvZCcgaXMgImRpZmYiCisgKi8KKyAgICBpbnQKK2ZvbGRtZXRob2RJc0RpZmYod3ApCisgICAgd2luX1QJKndwOworeworICAgIHJldHVybiAod3AtPndfcF9mZG1bMF0gPT0gJ2QnKTsKK30KKworLyogY2xvc2VGb2xkKCkge3t7MiAqLworLyoKKyAqIENsb3NlIGZvbGQgZm9yIGN1cnJlbnQgd2luZG93IGF0IGxpbmUgImxudW0iLgorICogUmVwZWF0ICJjb3VudCIgdGltZXMuCisgKi8KKyAgICB2b2lkCitjbG9zZUZvbGQobG51bSwgY291bnQpCisgICAgbGluZW5yX1QJbG51bTsKKyAgICBsb25nCWNvdW50OworeworICAgIHNldEZvbGRSZXBlYXQobG51bSwgY291bnQsIEZBTFNFKTsKK30KKworLyogY2xvc2VGb2xkUmVjdXJzZSgpIHt7ezIgKi8KKy8qCisgKiBDbG9zZSBmb2xkIGZvciBjdXJyZW50IHdpbmRvdyBhdCBsaW5lICJsbnVtIiByZWN1cnNpdmVseS4KKyAqLworICAgIHZvaWQKK2Nsb3NlRm9sZFJlY3Vyc2UobG51bSkKKyAgICBsaW5lbnJfVAlsbnVtOworeworICAgICh2b2lkKXNldE1hbnVhbEZvbGQobG51bSwgRkFMU0UsIFRSVUUsIE5VTEwpOworfQorCisvKiBvcEZvbGRSYW5nZSgpIHt7ezIgKi8KKy8qCisgKiBPcGVuIG9yIENsb3NlIGZvbGRzIGZvciBjdXJyZW50IHdpbmRvdyBpbiBsaW5lcyAiZmlyc3QiIHRvICJsYXN0Ii4KKyAqIFVzZWQgZm9yICJ6byIsICJ6TyIsICJ6YyIgYW5kICJ6QyIgaW4gVmlzdWFsIG1vZGUuCisgKi8KKyAgICB2b2lkCitvcEZvbGRSYW5nZShmaXJzdCwgbGFzdCwgb3BlbmluZywgcmVjdXJzZSwgaGFkX3Zpc3VhbCkKKyAgICBsaW5lbnJfVAlmaXJzdDsKKyAgICBsaW5lbnJfVAlsYXN0OworICAgIGludAkJb3BlbmluZzsJLyogVFJVRSB0byBvcGVuLCBGQUxTRSB0byBjbG9zZSAqLworICAgIGludAkJcmVjdXJzZTsJLyogVFJVRSB0byBkbyBpdCByZWN1cnNpdmVseSAqLworICAgIGludAkJaGFkX3Zpc3VhbDsJLyogVFJVRSB3aGVuIFZpc3VhbCBzZWxlY3Rpb24gdXNlZCAqLworeworICAgIGludAkJZG9uZSA9IERPTkVfTk9USElORzsJLyogYXZvaWQgZXJyb3IgbWVzc2FnZXMgKi8KKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGxpbmVucl9UCWxudW1fbmV4dDsKKworICAgIGZvciAobG51bSA9IGZpcnN0OyBsbnVtIDw9IGxhc3Q7IGxudW0gPSBsbnVtX25leHQgKyAxKQorICAgIHsKKwlsbnVtX25leHQgPSBsbnVtOworCS8qIE9wZW5pbmcgb25lIGxldmVsIG9ubHk6IG5leHQgZm9sZCB0byBvcGVuIGlzIGFmdGVyIHRoZSBvbmUgZ29pbmcgdG8KKwkgKiBiZSBvcGVuZWQuICovCisJaWYgKG9wZW5pbmcgJiYgIXJlY3Vyc2UpCisJICAgICh2b2lkKWhhc0ZvbGRpbmcobG51bSwgTlVMTCwgJmxudW1fbmV4dCk7CisJKHZvaWQpc2V0TWFudWFsRm9sZChsbnVtLCBvcGVuaW5nLCByZWN1cnNlLCAmZG9uZSk7CisJLyogQ2xvc2luZyBvbmUgbGV2ZWwgb25seTogbmV4dCBsaW5lIHRvIGNsb3NlIGEgZm9sZCBpcyBhZnRlciBqdXN0CisJICogY2xvc2VkIGZvbGQuICovCisJaWYgKCFvcGVuaW5nICYmICFyZWN1cnNlKQorCSAgICAodm9pZCloYXNGb2xkaW5nKGxudW0sIE5VTEwsICZsbnVtX25leHQpOworICAgIH0KKyAgICBpZiAoZG9uZSA9PSBET05FX05PVEhJTkcpCisJRU1TRyhfKGVfbm9mb2xkKSk7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICAvKiBGb3JjZSBhIHJlZHJhdyB0byByZW1vdmUgdGhlIFZpc3VhbCBoaWdobGlnaHRpbmcuICovCisgICAgaWYgKGhhZF92aXN1YWwpCisJcmVkcmF3X2N1cmJ1Zl9sYXRlcihJTlZFUlRFRCk7CisjZW5kaWYKK30KKworLyogb3BlbkZvbGQoKSB7e3syICovCisvKgorICogT3BlbiBmb2xkIGZvciBjdXJyZW50IHdpbmRvdyBhdCBsaW5lICJsbnVtIi4KKyAqIFJlcGVhdCAiY291bnQiIHRpbWVzLgorICovCisgICAgdm9pZAorb3BlbkZvbGQobG51bSwgY291bnQpCisgICAgbGluZW5yX1QJbG51bTsKKyAgICBsb25nCWNvdW50OworeworICAgIHNldEZvbGRSZXBlYXQobG51bSwgY291bnQsIFRSVUUpOworfQorCisvKiBvcGVuRm9sZFJlY3Vyc2UoKSB7e3syICovCisvKgorICogT3BlbiBmb2xkIGZvciBjdXJyZW50IHdpbmRvdyBhdCBsaW5lICJsbnVtIiByZWN1cnNpdmVseS4KKyAqLworICAgIHZvaWQKK29wZW5Gb2xkUmVjdXJzZShsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgKHZvaWQpc2V0TWFudWFsRm9sZChsbnVtLCBUUlVFLCBUUlVFLCBOVUxMKTsKK30KKworLyogZm9sZE9wZW5DdXJzb3IoKSB7e3syICovCisvKgorICogT3BlbiBmb2xkcyB1bnRpbCB0aGUgY3Vyc29yIGxpbmUgaXMgbm90IGluIGEgY2xvc2VkIGZvbGQuCisgKi8KKyAgICB2b2lkCitmb2xkT3BlbkN1cnNvcigpCit7CisgICAgaW50CQlkb25lOworCisgICAgY2hlY2t1cGRhdGUoY3Vyd2luKTsKKyAgICBpZiAoaGFzQW55Rm9sZGluZyhjdXJ3aW4pKQorCWZvciAoOzspCisJeworCSAgICBkb25lID0gRE9ORV9OT1RISU5HOworCSAgICAodm9pZClzZXRNYW51YWxGb2xkKGN1cndpbi0+d19jdXJzb3IubG51bSwgVFJVRSwgRkFMU0UsICZkb25lKTsKKwkgICAgaWYgKCEoZG9uZSAmIERPTkVfQUNUSU9OKSkKKwkJYnJlYWs7CisJfQorfQorCisvKiBuZXdGb2xkTGV2ZWwoKSB7e3syICovCisvKgorICogU2V0IG5ldyBmb2xkbGV2ZWwgZm9yIGN1cnJlbnQgd2luZG93LgorICovCisgICAgdm9pZAorbmV3Rm9sZExldmVsKCkKK3sKKyAgICBuZXdGb2xkTGV2ZWxXaW4oY3Vyd2luKTsKKworI2lmZGVmIEZFQVRfRElGRgorICAgIGlmIChmb2xkbWV0aG9kSXNEaWZmKGN1cndpbikgJiYgY3Vyd2luLT53X3Bfc2NiKQorICAgIHsKKwl3aW5fVAkgICAgKndwOworCisJLyoKKwkgKiBTZXQgdGhlIHNhbWUgZm9sZGxldmVsIGluIG90aGVyIHdpbmRvd3MgaW4gZGlmZiBtb2RlLgorCSAqLworCUZPUl9BTExfV0lORE9XUyh3cCkKKwl7CisJICAgIGlmICh3cCAhPSBjdXJ3aW4gJiYgZm9sZG1ldGhvZElzRGlmZih3cCkgJiYgd3AtPndfcF9zY2IpCisJICAgIHsKKwkJd3AtPndfcF9mZGwgPSBjdXJ3aW4tPndfcF9mZGw7CisJCW5ld0ZvbGRMZXZlbFdpbih3cCk7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCit9CisKKyAgICBzdGF0aWMgdm9pZAorbmV3Rm9sZExldmVsV2luKHdwKQorICAgIHdpbl9UCSp3cDsKK3sKKyAgICBmb2xkX1QJKmZwOworICAgIGludAkJaTsKKworICAgIGNoZWNrdXBkYXRlKHdwKTsKKyAgICBpZiAod3AtPndfZm9sZF9tYW51YWwpCisgICAgeworCS8qIFNldCBhbGwgZmxhZ3MgZm9yIHRoZSBmaXJzdCBsZXZlbCBvZiBmb2xkcyB0byBGRF9MRVZFTC4gIEZvbGxvd2luZworCSAqIG1hbnVhbCBvcGVuL2Nsb3NlIHdpbGwgdGhlbiBjaGFuZ2UgdGhlIGZsYWdzIHRvIEZEX09QRU4gb3IKKwkgKiBGRF9DTE9TRUQgZm9yIHRob3NlIGZvbGRzIHRoYXQgZG9uJ3QgdXNlICdmb2xkbGV2ZWwnLiAqLworCWZwID0gKGZvbGRfVCAqKXdwLT53X2ZvbGRzLmdhX2RhdGE7CisJZm9yIChpID0gMDsgaSA8IHdwLT53X2ZvbGRzLmdhX2xlbjsgKytpKQorCSAgICBmcFtpXS5mZF9mbGFncyA9IEZEX0xFVkVMOworCXdwLT53X2ZvbGRfbWFudWFsID0gRkFMU0U7CisgICAgfQorICAgIGNoYW5nZWRfd2luZG93X3NldHRpbmdfd2luKHdwKTsKK30KKworLyogZm9sZENoZWNrQ2xvc2UoKSB7e3syICovCisvKgorICogQXBwbHkgJ2ZvbGRsZXZlbCcgdG8gYWxsIGZvbGRzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY3Vyc29yLgorICovCisgICAgdm9pZAorZm9sZENoZWNrQ2xvc2UoKQoreworICAgIGlmICgqcF9mY2wgIT0gTlVMKQkvKiBjYW4gb25seSBiZSAiYWxsIiByaWdodCBub3cgKi8KKyAgICB7CisJY2hlY2t1cGRhdGUoY3Vyd2luKTsKKwlpZiAoY2hlY2tDbG9zZVJlYygmY3Vyd2luLT53X2ZvbGRzLCBjdXJ3aW4tPndfY3Vyc29yLmxudW0sCisJCQkJCQkJKGludCljdXJ3aW4tPndfcF9mZGwpKQorCSAgICBjaGFuZ2VkX3dpbmRvd19zZXR0aW5nKCk7CisgICAgfQorfQorCisvKiBjaGVja0Nsb3NlUmVjKCkge3t7MiAqLworICAgIHN0YXRpYyBpbnQKK2NoZWNrQ2xvc2VSZWMoZ2FwLCBsbnVtLCBsZXZlbCkKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQlsZXZlbDsKK3sKKyAgICBmb2xkX1QJKmZwOworICAgIGludAkJcmV0dmFsID0gRkFMU0U7CisgICAgaW50CQlpOworCisgICAgZnAgPSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhOworICAgIGZvciAoaSA9IDA7IGkgPCBnYXAtPmdhX2xlbjsgKytpKQorICAgIHsKKwkvKiBPbmx5IG1hbnVhbGx5IG9wZW5lZCBmb2xkcyBtYXkgbmVlZCB0byBiZSBjbG9zZWQuICovCisJaWYgKGZwW2ldLmZkX2ZsYWdzID09IEZEX09QRU4pCisJeworCSAgICBpZiAobGV2ZWwgPD0gMCAmJiAobG51bSA8IGZwW2ldLmZkX3RvcAorCQkJCSAgICAgIHx8IGxudW0gPj0gZnBbaV0uZmRfdG9wICsgZnBbaV0uZmRfbGVuKSkKKwkgICAgeworCQlmcFtpXS5mZF9mbGFncyA9IEZEX0xFVkVMOworCQlyZXR2YWwgPSBUUlVFOworCSAgICB9CisJICAgIGVsc2UKKwkJcmV0dmFsIHw9IGNoZWNrQ2xvc2VSZWMoJmZwW2ldLmZkX25lc3RlZCwgbG51bSAtIGZwW2ldLmZkX3RvcCwKKwkJCQkJCQkJICAgbGV2ZWwgLSAxKTsKKwl9CisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIGZvbGRDcmVhdGVBbGxvd2VkKCkge3t7MiAqLworLyoKKyAqIFJldHVybiBUUlVFIGlmIGl0J3MgYWxsb3dlZCB0byBtYW51YWxseSBjcmVhdGUgb3IgZGVsZXRlIGEgZm9sZC4KKyAqIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIEZBTFNFIGlmIG5vdC4KKyAqLworICAgIGludAorZm9sZE1hbnVhbEFsbG93ZWQoY3JlYXRlKQorICAgIGludAkJY3JlYXRlOworeworICAgIGlmIChmb2xkbWV0aG9kSXNNYW51YWwoY3Vyd2luKSB8fCBmb2xkbWV0aG9kSXNNYXJrZXIoY3Vyd2luKSkKKwlyZXR1cm4gVFJVRTsKKyAgICBpZiAoY3JlYXRlKQorCUVNU0coXygiRTM1MDogQ2Fubm90IGNyZWF0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciKSk7CisgICAgZWxzZQorCUVNU0coXygiRTM1MTogQ2Fubm90IGRlbGV0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciKSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKiBmb2xkQ3JlYXRlKCkge3t7MiAqLworLyoKKyAqIENyZWF0ZSBhIGZvbGQgZnJvbSBsaW5lICJzdGFydCIgdG8gbGluZSAiZW5kIiAoaW5jbHVzaXZlKSBpbiB0aGUgY3VycmVudAorICogd2luZG93LgorICovCisgICAgdm9pZAorZm9sZENyZWF0ZShzdGFydCwgZW5kKQorICAgIGxpbmVucl9UCXN0YXJ0OworICAgIGxpbmVucl9UCWVuZDsKK3sKKyAgICBmb2xkX1QJKmZwOworICAgIGdhcnJheV9UCSpnYXA7CisgICAgZ2FycmF5X1QJZm9sZF9nYTsKKyAgICBpbnQJCWksIGo7CisgICAgaW50CQljb250OworICAgIGludAkJdXNlX2xldmVsID0gRkFMU0U7CisgICAgaW50CQljbG9zZWQgPSBGQUxTRTsKKyAgICBpbnQJCWxldmVsID0gMDsKKyAgICBsaW5lbnJfVAlzdGFydF9yZWwgPSBzdGFydDsKKyAgICBsaW5lbnJfVAllbmRfcmVsID0gZW5kOworCisgICAgaWYgKHN0YXJ0ID4gZW5kKQorICAgIHsKKwkvKiByZXZlcnNlIHRoZSByYW5nZSAqLworCWVuZCA9IHN0YXJ0X3JlbDsKKwlzdGFydCA9IGVuZF9yZWw7CisJc3RhcnRfcmVsID0gc3RhcnQ7CisJZW5kX3JlbCA9IGVuZDsKKyAgICB9CisKKyAgICAvKiBXaGVuICdmb2xkbWV0aG9kJyBpcyAibWFya2VyIiBhZGQgbWFya2Vycywgd2hpY2ggY3JlYXRlcyB0aGUgZm9sZHMuICovCisgICAgaWYgKGZvbGRtZXRob2RJc01hcmtlcihjdXJ3aW4pKQorICAgIHsKKwlmb2xkQ3JlYXRlTWFya2VycyhzdGFydCwgZW5kKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgY2hlY2t1cGRhdGUoY3Vyd2luKTsKKworICAgIC8qIEZpbmQgdGhlIHBsYWNlIHRvIGluc2VydCB0aGUgbmV3IGZvbGQuICovCisgICAgZ2FwID0gJmN1cndpbi0+d19mb2xkczsKKyAgICBmb3IgKDs7KQorICAgIHsKKwlpZiAoIWZvbGRGaW5kKGdhcCwgc3RhcnRfcmVsLCAmZnApKQorCSAgICBicmVhazsKKwlpZiAoZnAtPmZkX3RvcCArIGZwLT5mZF9sZW4gPiBlbmRfcmVsKQorCXsKKwkgICAgLyogTmV3IGZvbGQgaXMgY29tcGxldGVseSBpbnNpZGUgdGhpcyBmb2xkOiBHbyBvbmUgbGV2ZWwgZGVlcGVyLiAqLworCSAgICBnYXAgPSAmZnAtPmZkX25lc3RlZDsKKwkgICAgc3RhcnRfcmVsIC09IGZwLT5mZF90b3A7CisJICAgIGVuZF9yZWwgLT0gZnAtPmZkX3RvcDsKKwkgICAgaWYgKHVzZV9sZXZlbCB8fCBmcC0+ZmRfZmxhZ3MgPT0gRkRfTEVWRUwpCisJICAgIHsKKwkJdXNlX2xldmVsID0gVFJVRTsKKwkJaWYgKGxldmVsID49IGN1cndpbi0+d19wX2ZkbCkKKwkJICAgIGNsb3NlZCA9IFRSVUU7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoZnAtPmZkX2ZsYWdzID09IEZEX0NMT1NFRCkKKwkJY2xvc2VkID0gVFJVRTsKKwkgICAgKytsZXZlbDsKKwl9CisJZWxzZQorCXsKKwkgICAgLyogVGhpcyBmb2xkIGFuZCBuZXcgZm9sZCBvdmVybGFwOiBJbnNlcnQgaGVyZSBhbmQgbW92ZSBzb21lIGZvbGRzCisJICAgICAqIGluc2lkZSB0aGUgbmV3IGZvbGQuICovCisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICBpID0gKGludCkoZnAgLSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhKTsKKyAgICBpZiAoZ2FfZ3JvdyhnYXAsIDEpID09IE9LKQorICAgIHsKKwlmcCA9IChmb2xkX1QgKilnYXAtPmdhX2RhdGEgKyBpOworCWdhX2luaXQyKCZmb2xkX2dhLCAoaW50KXNpemVvZihmb2xkX1QpLCAxMCk7CisKKwkvKiBDb3VudCBudW1iZXIgb2YgZm9sZHMgdGhhdCB3aWxsIGJlIGNvbnRhaW5lZCBpbiB0aGUgbmV3IGZvbGQuICovCisJZm9yIChjb250ID0gMDsgaSArIGNvbnQgPCBnYXAtPmdhX2xlbjsgKytjb250KQorCSAgICBpZiAoZnBbY29udF0uZmRfdG9wID4gZW5kX3JlbCkKKwkJYnJlYWs7CisJaWYgKGNvbnQgPiAwICYmIGdhX2dyb3coJmZvbGRfZ2EsIGNvbnQpID09IE9LKQorCXsKKwkgICAgLyogSWYgdGhlIGZpcnN0IGZvbGQgc3RhcnRzIGJlZm9yZSB0aGUgbmV3IGZvbGQsIGxldCB0aGUgbmV3IGZvbGQKKwkgICAgICogc3RhcnQgdGhlcmUuICBPdGhlcndpc2UgdGhlIGV4aXN0aW5nIGZvbGQgd291bGQgY2hhbmdlLiAqLworCSAgICBpZiAoc3RhcnRfcmVsID4gZnAtPmZkX3RvcCkKKwkJc3RhcnRfcmVsID0gZnAtPmZkX3RvcDsKKworCSAgICAvKiBXaGVuIGxhc3QgY29udGFpbmVkIGZvbGQgaXNuJ3QgY29tcGxldGVseSBjb250YWluZWQsIGFkanVzdCBlbmQKKwkgICAgICogb2YgbmV3IGZvbGQuICovCisJICAgIGlmIChlbmRfcmVsIDwgZnBbY29udCAtIDFdLmZkX3RvcCArIGZwW2NvbnQgLSAxXS5mZF9sZW4gLSAxKQorCQllbmRfcmVsID0gZnBbY29udCAtIDFdLmZkX3RvcCArIGZwW2NvbnQgLSAxXS5mZF9sZW4gLSAxOworCSAgICAvKiBNb3ZlIGNvbnRhaW5lZCBmb2xkcyB0byBpbnNpZGUgbmV3IGZvbGQuICovCisJICAgIG1jaF9tZW1tb3ZlKGZvbGRfZ2EuZ2FfZGF0YSwgZnAsIHNpemVvZihmb2xkX1QpICogY29udCk7CisJICAgIGZvbGRfZ2EuZ2FfbGVuICs9IGNvbnQ7CisJICAgIGZvbGRfZ2EuZ2Ffcm9vbSAtPSBjb250OworCSAgICBpICs9IGNvbnQ7CisKKwkgICAgLyogQWRqdXN0IGxpbmUgbnVtYmVycyBpbiBjb250YWluZWQgZm9sZHMgdG8gYmUgcmVsYXRpdmUgdG8gdGhlCisJICAgICAqIG5ldyBmb2xkLiAqLworCSAgICBmb3IgKGogPSAwOyBqIDwgY29udDsgKytqKQorCQkoKGZvbGRfVCAqKWZvbGRfZ2EuZ2FfZGF0YSlbal0uZmRfdG9wIC09IHN0YXJ0X3JlbDsKKwl9CisJLyogTW92ZSByZW1haW5pbmcgZW50cmllcyB0byBhZnRlciB0aGUgbmV3IGZvbGQuICovCisJaWYgKGkgPCBnYXAtPmdhX2xlbikKKwkgICAgbWNoX21lbW1vdmUoZnAgKyAxLCAoZm9sZF9UICopZ2FwLT5nYV9kYXRhICsgaSwKKwkJCQkgICAgIHNpemVvZihmb2xkX1QpICogKGdhcC0+Z2FfbGVuIC0gaSkpOworCWdhcC0+Z2FfbGVuID0gZ2FwLT5nYV9sZW4gKyAxIC0gY29udDsKKwlnYXAtPmdhX3Jvb20gPSBnYXAtPmdhX3Jvb20gLSAxICsgY29udDsKKworCS8qIGluc2VydCBuZXcgZm9sZCAqLworCWZwLT5mZF9uZXN0ZWQgPSBmb2xkX2dhOworCWZwLT5mZF90b3AgPSBzdGFydF9yZWw7CisJZnAtPmZkX2xlbiA9IGVuZF9yZWwgLSBzdGFydF9yZWwgKyAxOworCisJLyogV2Ugd2FudCB0aGUgbmV3IGZvbGQgdG8gYmUgY2xvc2VkLiAgSWYgaXQgd291bGQgcmVtYWluIG9wZW4gYmVjYXVzZQorCSAqIG9mIHVzaW5nICdmb2xkbGV2ZWwnLCBuZWVkIHRvIGFkanVzdCBmZF9mbGFncyBvZiBjb250YWluaW5nIGZvbGRzLgorCSAqLworCWlmICh1c2VfbGV2ZWwgJiYgIWNsb3NlZCAmJiBsZXZlbCA8IGN1cndpbi0+d19wX2ZkbCkKKwkgICAgY2xvc2VGb2xkKHN0YXJ0LCAxTCk7CisJaWYgKCF1c2VfbGV2ZWwpCisJICAgIGN1cndpbi0+d19mb2xkX21hbnVhbCA9IFRSVUU7CisJZnAtPmZkX2ZsYWdzID0gRkRfQ0xPU0VEOworCWZwLT5mZF9zbWFsbCA9IE1BWUJFOworCisJLyogcmVkcmF3ICovCisJY2hhbmdlZF93aW5kb3dfc2V0dGluZygpOworICAgIH0KK30KKworLyogZGVsZXRlRm9sZCgpIHt7ezIgKi8KKy8qCisgKiBEZWxldGUgYSBmb2xkIGF0IGxpbmUgInN0YXJ0IiBpbiB0aGUgY3VycmVudCB3aW5kb3cuCisgKiBXaGVuICJlbmQiIGlzIG5vdCAwLCBkZWxldGUgYWxsIGZvbGRzIGZyb20gInN0YXJ0IiB0byAiZW5kIi4KKyAqIFdoZW4gInJlY3Vyc2l2ZSIgaXMgVFJVRSBkZWxldGUgcmVjdXJzaXZlbHkuCisgKi8KKyAgICB2b2lkCitkZWxldGVGb2xkKHN0YXJ0LCBlbmQsIHJlY3Vyc2l2ZSwgaGFkX3Zpc3VhbCkKKyAgICBsaW5lbnJfVAlzdGFydDsKKyAgICBsaW5lbnJfVAllbmQ7CisgICAgaW50CQlyZWN1cnNpdmU7CisgICAgaW50CQloYWRfdmlzdWFsOwkvKiBUUlVFIHdoZW4gVmlzdWFsIHNlbGVjdGlvbiB1c2VkICovCit7CisgICAgZ2FycmF5X1QJKmdhcDsKKyAgICBmb2xkX1QJKmZwOworICAgIGdhcnJheV9UCSpmb3VuZF9nYTsKKyAgICBmb2xkX1QJKmZvdW5kX2ZwID0gTlVMTDsKKyAgICBsaW5lbnJfVAlmb3VuZF9vZmYgPSAwOworICAgIGludAkJdXNlX2xldmVsID0gRkFMU0U7CisgICAgaW50CQltYXliZV9zbWFsbCA9IEZBTFNFOworICAgIGludAkJbGV2ZWwgPSAwOworICAgIGxpbmVucl9UCWxudW0gPSBzdGFydDsKKyAgICBsaW5lbnJfVAlsbnVtX29mZjsKKyAgICBpbnQJCWRpZF9vbmUgPSBGQUxTRTsKKyAgICBsaW5lbnJfVAlmaXJzdF9sbnVtID0gTUFYTE5VTTsKKyAgICBsaW5lbnJfVAlsYXN0X2xudW0gPSAwOworCisgICAgY2hlY2t1cGRhdGUoY3Vyd2luKTsKKworICAgIHdoaWxlIChsbnVtIDw9IGVuZCkKKyAgICB7CisJLyogRmluZCB0aGUgZGVlcGVzdCBmb2xkIGZvciAic3RhcnQiLiAqLworCWdhcCA9ICZjdXJ3aW4tPndfZm9sZHM7CisJZm91bmRfZ2EgPSBOVUxMOworCWxudW1fb2ZmID0gMDsKKwlmb3IgKDs7KQorCXsKKwkgICAgaWYgKCFmb2xkRmluZChnYXAsIGxudW0gLSBsbnVtX29mZiwgJmZwKSkKKwkJYnJlYWs7CisJICAgIC8qIGxudW0gaXMgaW5zaWRlIHRoaXMgZm9sZCwgcmVtZW1iZXIgaW5mbyAqLworCSAgICBmb3VuZF9nYSA9IGdhcDsKKwkgICAgZm91bmRfZnAgPSBmcDsKKwkgICAgZm91bmRfb2ZmID0gbG51bV9vZmY7CisKKwkgICAgLyogaWYgImxudW0iIGlzIGZvbGRlZCwgZG9uJ3QgY2hlY2sgbmVzdGluZyAqLworCSAgICBpZiAoY2hlY2tfY2xvc2VkKGN1cndpbiwgZnAsICZ1c2VfbGV2ZWwsIGxldmVsLAorCQkJCQkJICAgICAgJm1heWJlX3NtYWxsLCBsbnVtX29mZikpCisJCWJyZWFrOworCisJICAgIC8qIGNoZWNrIG5lc3RlZCBmb2xkcyAqLworCSAgICBnYXAgPSAmZnAtPmZkX25lc3RlZDsKKwkgICAgbG51bV9vZmYgKz0gZnAtPmZkX3RvcDsKKwkgICAgKytsZXZlbDsKKwl9CisJaWYgKGZvdW5kX2dhID09IE5VTEwpCisJeworCSAgICArK2xudW07CisJfQorCWVsc2UKKwl7CisJICAgIGxudW0gPSBmb3VuZF9mcC0+ZmRfdG9wICsgZm91bmRfZnAtPmZkX2xlbiArIGZvdW5kX29mZjsKKwkgICAgZGlkX29uZSA9IFRSVUU7CisKKwkgICAgaWYgKGZvbGRtZXRob2RJc01hbnVhbChjdXJ3aW4pKQorCQlkZWxldGVGb2xkRW50cnkoZm91bmRfZ2EsCisJCSAgICAoaW50KShmb3VuZF9mcCAtIChmb2xkX1QgKilmb3VuZF9nYS0+Z2FfZGF0YSksIHJlY3Vyc2l2ZSk7CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoZm91bmRfZnAtPmZkX3RvcCArIGZvdW5kX29mZiA8IGZpcnN0X2xudW0pCisJCSAgICBmaXJzdF9sbnVtID0gZm91bmRfZnAtPmZkX3RvcDsKKwkJaWYgKGxudW0gPiBsYXN0X2xudW0pCisJCSAgICBsYXN0X2xudW0gPSBsbnVtOworCQlwYXJzZU1hcmtlcihjdXJ3aW4pOworCQlkZWxldGVGb2xkTWFya2Vycyhmb3VuZF9mcCwgcmVjdXJzaXZlLCBmb3VuZF9vZmYpOworCSAgICB9CisKKwkgICAgLyogcmVkcmF3IHdpbmRvdyAqLworCSAgICBjaGFuZ2VkX3dpbmRvd19zZXR0aW5nKCk7CisJfQorICAgIH0KKyAgICBpZiAoIWRpZF9vbmUpCisgICAgeworCUVNU0coXyhlX25vZm9sZCkpOworI2lmZGVmIEZFQVRfVklTVUFMCisJLyogRm9yY2UgYSByZWRyYXcgdG8gcmVtb3ZlIHRoZSBWaXN1YWwgaGlnaGxpZ2h0aW5nLiAqLworCWlmIChoYWRfdmlzdWFsKQorCSAgICByZWRyYXdfY3VyYnVmX2xhdGVyKElOVkVSVEVEKTsKKyNlbmRpZgorICAgIH0KKyAgICBpZiAobGFzdF9sbnVtID4gMCkKKwljaGFuZ2VkX2xpbmVzKGZpcnN0X2xudW0sIChjb2xucl9UKTAsIGxhc3RfbG51bSwgMEwpOworfQorCisvKiBjbGVhckZvbGRpbmcoKSB7e3syICovCisvKgorICogUmVtb3ZlIGFsbCBmb2xkaW5nIGZvciB3aW5kb3cgIndpbiIuCisgKi8KKyAgICB2b2lkCitjbGVhckZvbGRpbmcod2luKQorICAgIHdpbl9UCSp3aW47Cit7CisgICAgZGVsZXRlRm9sZFJlY3Vyc2UoJndpbi0+d19mb2xkcyk7CisgICAgd2luLT53X2ZvbGRpbnZhbGlkID0gRkFMU0U7Cit9CisKKy8qIGZvbGRVcGRhdGUoKSB7e3syICovCisvKgorICogVXBkYXRlIGZvbGRzIGZvciBjaGFuZ2VzIGluIHRoZSBidWZmZXIgb2YgYSB3aW5kb3cuCisgKiBOb3RlIHRoYXQgaW5zZXJ0ZWQvZGVsZXRlZCBsaW5lcyBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIHRha2VuIGNhcmUgb2YgYnkKKyAqIGNhbGxpbmcgZm9sZE1hcmtBZGp1c3QoKS4KKyAqIFRoZSBjaGFuZ2VzIGluIGxpbmVzIGZyb20gdG9wIHRvIGJvdCAoaW5jbHVzaXZlKS4KKyAqLworICAgIHZvaWQKK2ZvbGRVcGRhdGUod3AsIHRvcCwgYm90KQorICAgIHdpbl9UCSp3cDsKKyAgICBsaW5lbnJfVAl0b3A7CisgICAgbGluZW5yX1QJYm90OworeworICAgIGZvbGRfVAkqZnA7CisKKyAgICAvKiBNYXJrIGFsbCBmb2xkcyBmcm9tIHRvcCB0byBib3QgYXMgbWF5YmUtc21hbGwuICovCisgICAgKHZvaWQpZm9sZEZpbmQoJmN1cndpbi0+d19mb2xkcywgY3Vyd2luLT53X2N1cnNvci5sbnVtLCAmZnApOworICAgIHdoaWxlIChmcCA8IChmb2xkX1QgKiljdXJ3aW4tPndfZm9sZHMuZ2FfZGF0YSArIGN1cndpbi0+d19mb2xkcy5nYV9sZW4KKwkgICAgJiYgZnAtPmZkX3RvcCA8IGJvdCkKKyAgICB7CisJZnAtPmZkX3NtYWxsID0gTUFZQkU7CisJKytmcDsKKyAgICB9CisKKyAgICBpZiAoZm9sZG1ldGhvZElzSW5kZW50KHdwKQorCSAgICB8fCBmb2xkbWV0aG9kSXNFeHByKHdwKQorCSAgICB8fCBmb2xkbWV0aG9kSXNNYXJrZXIod3ApCisjaWZkZWYgRkVBVF9ESUZGCisJICAgIHx8IGZvbGRtZXRob2RJc0RpZmYod3ApCisjZW5kaWYKKwkgICAgfHwgZm9sZG1ldGhvZElzU3ludGF4KHdwKSkKKwlmb2xkVXBkYXRlSUVNUyh3cCwgdG9wLCBib3QpOworfQorCisvKiBmb2xkVXBkYXRlQWxsKCkge3t7MiAqLworLyoKKyAqIFVwZGF0ZSBhbGwgbGluZXMgaW4gYSB3aW5kb3cgZm9yIGZvbGRpbmcuCisgKiBVc2VkIHdoZW4gYSBmb2xkIHNldHRpbmcgY2hhbmdlcyBvciBhZnRlciByZWxvYWRpbmcgdGhlIGJ1ZmZlci4KKyAqIFRoZSBhY3R1YWwgdXBkYXRpbmcgaXMgcG9zdHBvbmVkIHVudGlsIGZvbGQgaW5mbyBpcyB1c2VkLCB0byBhdm9pZCBkb2luZworICogZXZlcnkgdGltZSBhIHNldHRpbmcgaXMgY2hhbmdlZCBvciBhIHN5bnRheCBpdGVtIGlzIGFkZGVkLgorICovCisgICAgdm9pZAorZm9sZFVwZGF0ZUFsbCh3aW4pCisgICAgd2luX1QJKndpbjsKK3sKKyAgICB3aW4tPndfZm9sZGludmFsaWQgPSBUUlVFOworICAgIHJlZHJhd193aW5fbGF0ZXIod2luLCBOT1RfVkFMSUQpOworfQorCisvKiBmb2xkTW92ZVRvKCkge3t7MiAqLworLyoKKyAqIElmICJ1cGRvd24iIGlzIEZBTFNFOiBNb3ZlIHRvIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGZvbGQuCisgKiBJZiAidXBkb3duIiBpcyBUUlVFOiBtb3ZlIHRvIGZvbGQgYXQgdGhlIHNhbWUgbGV2ZWwuCisgKiBJZiBub3QgbW92ZWQgcmV0dXJuIEZBSUwuCisgKi8KKyAgICBpbnQKK2ZvbGRNb3ZlVG8odXBkb3duLCBkaXIsIGNvdW50KQorICAgIGludAkJdXBkb3duOworICAgIGludAkJZGlyOwkgICAgLyogRk9SV0FSRCBvciBCQUNLV0FSRCAqLworICAgIGxvbmcJY291bnQ7Cit7CisgICAgbG9uZwluOworICAgIGludAkJcmV0dmFsID0gRkFJTDsKKyAgICBsaW5lbnJfVAlsbnVtX29mZjsKKyAgICBsaW5lbnJfVAlsbnVtX2ZvdW5kOworICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQl1c2VfbGV2ZWw7CisgICAgaW50CQltYXliZV9zbWFsbDsKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGZvbGRfVAkqZnA7CisgICAgaW50CQlsZXZlbDsKKyAgICBpbnQJCWxhc3Q7CisKKyAgICAvKiBSZXBlYXQgImNvdW50IiB0aW1lcy4gKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgY291bnQ7ICsrbikKKyAgICB7CisJLyogRmluZCBuZXN0ZWQgZm9sZHMuICBTdG9wIHdoZW4gYSBmb2xkIGlzIGNsb3NlZC4gIFRoZSBkZWVwZXN0IGZvbGQKKwkgKiB0aGF0IG1vdmVzIHRoZSBjdXJzb3IgaXMgdXNlZC4gKi8KKwlsbnVtX29mZiA9IDA7CisJZ2FwID0gJmN1cndpbi0+d19mb2xkczsKKwl1c2VfbGV2ZWwgPSBGQUxTRTsKKwltYXliZV9zbWFsbCA9IEZBTFNFOworCWxudW1fZm91bmQgPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJbGV2ZWwgPSAwOworCWxhc3QgPSBGQUxTRTsKKwlmb3IgKDs7KQorCXsKKwkgICAgaWYgKCFmb2xkRmluZChnYXAsIGN1cndpbi0+d19jdXJzb3IubG51bSAtIGxudW1fb2ZmLCAmZnApKQorCSAgICB7CisJCWlmICghdXBkb3duKQorCQkgICAgYnJlYWs7CisKKwkJLyogV2hlbiBtb3ZpbmcgdXAsIGNvbnNpZGVyIGEgZm9sZCBhYm92ZSB0aGUgY3Vyc29yOyB3aGVuCisJCSAqIG1vdmluZyBkb3duIGNvbnNpZGVyIGEgZm9sZCBiZWxvdyB0aGUgY3Vyc29yLiAqLworCQlpZiAoZGlyID09IEZPUldBUkQpCisJCXsKKwkJICAgIGlmIChmcCAtIChmb2xkX1QgKilnYXAtPmdhX2RhdGEgPj0gZ2FwLT5nYV9sZW4pCisJCQlicmVhazsKKwkJICAgIC0tZnA7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBpZiAoZnAgPT0gKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSkKKwkJCWJyZWFrOworCQl9CisJCS8qIGRvbid0IGxvb2sgZm9yIGNvbnRhaW5lZCBmb2xkcywgdGhleSB3aWxsIGFsd2F5cyBtb3ZlCisJCSAqIHRoZSBjdXJzb3IgdG9vIGZhci4gKi8KKwkJbGFzdCA9IFRSVUU7CisJICAgIH0KKworCSAgICBpZiAoIWxhc3QpCisJICAgIHsKKwkJLyogQ2hlY2sgaWYgdGhpcyBmb2xkIGlzIGNsb3NlZC4gKi8KKwkJaWYgKGNoZWNrX2Nsb3NlZChjdXJ3aW4sIGZwLCAmdXNlX2xldmVsLCBsZXZlbCwKKwkJCQkJCSAgICAgICZtYXliZV9zbWFsbCwgbG51bV9vZmYpKQorCQkgICAgbGFzdCA9IFRSVUU7CisKKwkJLyogIlt6IiBhbmQgIl16IiBzdG9wIGF0IGNsb3NlZCBmb2xkICovCisJCWlmIChsYXN0ICYmICF1cGRvd24pCisJCSAgICBicmVhazsKKwkgICAgfQorCisJICAgIGlmICh1cGRvd24pCisJICAgIHsKKwkJaWYgKGRpciA9PSBGT1JXQVJEKQorCQl7CisJCSAgICAvKiB0byBzdGFydCBvZiBuZXh0IGZvbGQgaWYgdGhlcmUgaXMgb25lICovCisJCSAgICBpZiAoZnAgKyAxIC0gKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSA8IGdhcC0+Z2FfbGVuKQorCQkgICAgeworCQkJbG51bSA9IGZwWzFdLmZkX3RvcCArIGxudW1fb2ZmOworCQkJaWYgKGxudW0gPiBjdXJ3aW4tPndfY3Vyc29yLmxudW0pCisJCQkgICAgbG51bV9mb3VuZCA9IGxudW07CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICAvKiB0byBlbmQgb2YgcHJldmlvdXMgZm9sZCBpZiB0aGVyZSBpcyBvbmUgKi8KKwkJICAgIGlmIChmcCA+IChmb2xkX1QgKilnYXAtPmdhX2RhdGEpCisJCSAgICB7CisJCQlsbnVtID0gZnBbLTFdLmZkX3RvcCArIGxudW1fb2ZmICsgZnBbLTFdLmZkX2xlbiAtIDE7CisJCQlpZiAobG51bSA8IGN1cndpbi0+d19jdXJzb3IubG51bSkKKwkJCSAgICBsbnVtX2ZvdW5kID0gbG51bTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBPcGVuIGZvbGQgZm91bmQsIHNldCBjdXJzb3IgdG8gaXRzIHN0YXJ0L2VuZCBhbmQgdGhlbiBjaGVjaworCQkgKiBuZXN0ZWQgZm9sZHMuICovCisJCWlmIChkaXIgPT0gRk9SV0FSRCkKKwkJeworCQkgICAgbG51bSA9IGZwLT5mZF90b3AgKyBsbnVtX29mZiArIGZwLT5mZF9sZW4gLSAxOworCQkgICAgaWYgKGxudW0gPiBjdXJ3aW4tPndfY3Vyc29yLmxudW0pCisJCQlsbnVtX2ZvdW5kID0gbG51bTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGxudW0gPSBmcC0+ZmRfdG9wICsgbG51bV9vZmY7CisJCSAgICBpZiAobG51bSA8IGN1cndpbi0+d19jdXJzb3IubG51bSkKKwkJCWxudW1fZm91bmQgPSBsbnVtOworCQl9CisJICAgIH0KKworCSAgICBpZiAobGFzdCkKKwkJYnJlYWs7CisKKwkgICAgLyogQ2hlY2sgbmVzdGVkIGZvbGRzIChpZiBhbnkpLiAqLworCSAgICBnYXAgPSAmZnAtPmZkX25lc3RlZDsKKwkgICAgbG51bV9vZmYgKz0gZnAtPmZkX3RvcDsKKwkgICAgKytsZXZlbDsKKwl9CisJaWYgKGxudW1fZm91bmQgIT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCXsKKwkgICAgaWYgKHJldHZhbCA9PSBGQUlMKQorCQlzZXRwY21hcmsoKTsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbG51bV9mb3VuZDsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOworCSAgICByZXR2YWwgPSBPSzsKKwl9CisJZWxzZQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKiBmb2xkSW5pdFdpbigpIHt7ezIgKi8KKy8qCisgKiBJbml0IHRoZSBmb2xkIGluZm8gaW4gYSBuZXcgd2luZG93LgorICovCisgICAgdm9pZAorZm9sZEluaXRXaW4obmV3d2luKQorICAgIHdpbl9UCSpuZXd3aW47Cit7CisgICAgZ2FfaW5pdDIoJm5ld3dpbi0+d19mb2xkcywgKGludClzaXplb2YoZm9sZF9UKSwgMTApOworfQorCisvKiBmaW5kX3dsX2VudHJ5KCkge3t7MiAqLworLyoKKyAqIEZpbmQgYW4gZW50cnkgaW4gdGhlIHdpbi0+d19saW5lc1tdIGFycmF5IGZvciBidWZmZXIgbGluZSAibG51bSIuCisgKiBPbmx5IHZhbGlkIGVudHJpZXMgYXJlIGNvbnNpZGVyZWQgKGZvciBlbnRyaWVzIHdoZXJlIHdsX3ZhbGlkIGlzIEZBTFNFIHRoZQorICogbGluZSBudW1iZXIgY2FuIGJlIHdyb25nKS4KKyAqIFJldHVybnMgaW5kZXggb2YgZW50cnkgb3IgLTEgaWYgbm90IGZvdW5kLgorICovCisgICAgaW50CitmaW5kX3dsX2VudHJ5KHdpbiwgbG51bSkKKyAgICB3aW5fVAkqd2luOworICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgaW50CQlpOworCisgICAgaWYgKHdpbi0+d19saW5lc192YWxpZCA+IDApCisJZm9yIChpID0gMDsgaSA8IHdpbi0+d19saW5lc192YWxpZDsgKytpKQorCSAgICBpZiAod2luLT53X2xpbmVzW2ldLndsX3ZhbGlkKQorCSAgICB7CisJCWlmIChsbnVtIDwgd2luLT53X2xpbmVzW2ldLndsX2xudW0pCisJCSAgICByZXR1cm4gLTE7CisJCWlmIChsbnVtIDw9IHdpbi0+d19saW5lc1tpXS53bF9sYXN0bG51bSkKKwkJICAgIHJldHVybiBpOworCSAgICB9CisgICAgcmV0dXJuIC0xOworfQorCisvKiBmb2xkQWRqdXN0VmlzdWFsKCkge3t7MiAqLworI2lmZGVmIEZFQVRfVklTVUFMCisvKgorICogQWRqdXN0IHRoZSBWaXN1YWwgYXJlYSB0byBpbmNsdWRlIGFueSBmb2xkIGF0IHRoZSBzdGFydCBvciBlbmQgY29tcGxldGVseS4KKyAqLworICAgIHZvaWQKK2ZvbGRBZGp1c3RWaXN1YWwoKQoreworICAgIHBvc19UCSpzdGFydCwgKmVuZDsKKyAgICBjaGFyX3UJKnB0cjsKKworICAgIGlmICghVklzdWFsX2FjdGl2ZSB8fCAhaGFzQW55Rm9sZGluZyhjdXJ3aW4pKQorCXJldHVybjsKKworICAgIGlmIChsdG9yZXEoVklzdWFsLCBjdXJ3aW4tPndfY3Vyc29yKSkKKyAgICB7CisJc3RhcnQgPSAmVklzdWFsOworCWVuZCA9ICZjdXJ3aW4tPndfY3Vyc29yOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXN0YXJ0ID0gJmN1cndpbi0+d19jdXJzb3I7CisJZW5kID0gJlZJc3VhbDsKKyAgICB9CisgICAgaWYgKGhhc0ZvbGRpbmcoc3RhcnQtPmxudW0sICZzdGFydC0+bG51bSwgTlVMTCkpCisJc3RhcnQtPmNvbCA9IDA7CisgICAgaWYgKGhhc0ZvbGRpbmcoZW5kLT5sbnVtLCBOVUxMLCAmZW5kLT5sbnVtKSkKKyAgICB7CisJcHRyID0gbWxfZ2V0KGVuZC0+bG51bSk7CisJZW5kLT5jb2wgPSAoY29sbnJfVClTVFJMRU4ocHRyKTsKKwlpZiAoZW5kLT5jb2wgPiAwICYmICpwX3NlbCA9PSAnbycpCisJICAgIC0tZW5kLT5jb2w7CisjaWZkZWYgRkVBVF9NQllURQorCS8qIHByZXZlbnQgY3Vyc29yIGZyb20gbW92aW5nIG9uIHRoZSB0cmFpbCBieXRlICovCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgbWJfYWRqdXN0X2N1cnNvcigpOworI2VuZGlmCisgICAgfQorfQorI2VuZGlmCisKKy8qIGN1cnNvcl9mb2xkc3RhcnQoKSB7e3syICovCisvKgorICogTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBsaW5lIG9mIGEgY2xvc2VkIGZvbGQuCisgKi8KKyAgICB2b2lkCitmb2xkQWRqdXN0Q3Vyc29yKCkKK3sKKyAgICAodm9pZCloYXNGb2xkaW5nKGN1cndpbi0+d19jdXJzb3IubG51bSwgJmN1cndpbi0+d19jdXJzb3IubG51bSwgTlVMTCk7Cit9CisKKy8qIEludGVybmFsIGZ1bmN0aW9ucyBmb3IgImZvbGRfVCIge3t7MSAqLworLyogY2xvbmVGb2xkR3Jvd0FycmF5KCkge3t7MiAqLworLyoKKyAqIFdpbGwgImNsb25lIiAoaS5lIGRlZXAgY29weSkgYSBnYXJyYXlfVCBvZiBmb2xkcy4KKyAqCisgKiBSZXR1cm4gRkFJTCBpZiB0aGUgb3BlcmF0aW9uIGNhbm5vdCBiZSBjb21wbGV0ZWQsIG90aGVyd2lzZSBPSy4KKyAqLworICAgIHZvaWQKK2Nsb25lRm9sZEdyb3dBcnJheShmcm9tLCB0bykKKyAgICBnYXJyYXlfVAkqZnJvbTsKKyAgICBnYXJyYXlfVAkqdG87Cit7CisgICAgaW50CQlpOworICAgIGZvbGRfVAkqZnJvbV9wOworICAgIGZvbGRfVAkqdG9fcDsKKworICAgIGdhX2luaXQyKHRvLCBmcm9tLT5nYV9pdGVtc2l6ZSwgZnJvbS0+Z2FfZ3Jvd3NpemUpOworICAgIGlmIChmcm9tLT5nYV9sZW4gPT0gMCB8fCBnYV9ncm93KHRvLCBmcm9tLT5nYV9sZW4pID09IEZBSUwpCisJcmV0dXJuOworCisgICAgZnJvbV9wID0gKGZvbGRfVCAqKWZyb20tPmdhX2RhdGE7CisgICAgdG9fcCA9IChmb2xkX1QgKil0by0+Z2FfZGF0YTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBmcm9tLT5nYV9sZW47IGkrKykKKyAgICB7CisJdG9fcC0+ZmRfdG9wID0gZnJvbV9wLT5mZF90b3A7CisJdG9fcC0+ZmRfbGVuID0gZnJvbV9wLT5mZF9sZW47CisJdG9fcC0+ZmRfZmxhZ3MgPSBmcm9tX3AtPmZkX2ZsYWdzOworCXRvX3AtPmZkX3NtYWxsID0gZnJvbV9wLT5mZF9zbWFsbDsKKwljbG9uZUZvbGRHcm93QXJyYXkoJmZyb21fcC0+ZmRfbmVzdGVkLCAmdG9fcC0+ZmRfbmVzdGVkKTsKKwkrK3RvLT5nYV9sZW47CisJLS10by0+Z2Ffcm9vbTsKKwkrK2Zyb21fcDsKKwkrK3RvX3A7CisgICAgfQorfQorCisvKiBmb2xkRmluZCgpIHt7ezIgKi8KKy8qCisgKiBTZWFyY2ggZm9yIGxpbmUgImxudW0iIGluIGZvbGRzIG9mIGdyb3dhcnJheSAiZ2FwIi4KKyAqIFNldCAqZnBwIHRvIHRoZSBmb2xkIHN0cnVjdCBmb3IgdGhlIGZvbGQgdGhhdCBjb250YWlucyAibG51bSIgb3IKKyAqIHRoZSBmaXJzdCBmb2xkIGJlbG93IGl0IChjYXJlZnVsOiBpdCBjYW4gYmUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFycmF5ISkuCisgKiBSZXR1cm5zIEZBTFNFIHdoZW4gdGhlcmUgaXMgbm8gZm9sZCB0aGF0IGNvbnRhaW5zICJsbnVtIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK2ZvbGRGaW5kKGdhcCwgbG51bSwgZnBwKQorICAgIGdhcnJheV9UCSpnYXA7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBmb2xkX1QJKipmcHA7Cit7CisgICAgbGluZW5yX1QJbG93LCBoaWdoOworICAgIGZvbGRfVAkqZnA7CisgICAgaW50CQlpOworCisgICAgLyoKKyAgICAgKiBQZXJmb3JtIGEgYmluYXJ5IHNlYXJjaC4KKyAgICAgKiAibG93IiBpcyBsb3dlc3QgaW5kZXggb2YgcG9zc2libGUgbWF0Y2guCisgICAgICogImhpZ2giIGlzIGhpZ2hlc3QgaW5kZXggb2YgcG9zc2libGUgbWF0Y2guCisgICAgICovCisgICAgZnAgPSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhOworICAgIGxvdyA9IDA7CisgICAgaGlnaCA9IGdhcC0+Z2FfbGVuIC0gMTsKKyAgICB3aGlsZSAobG93IDw9IGhpZ2gpCisgICAgeworCWkgPSAobG93ICsgaGlnaCkgLyAyOworCWlmIChmcFtpXS5mZF90b3AgPiBsbnVtKQorCSAgICAvKiBmb2xkIGJlbG93IGxudW0sIGFkanVzdCBoaWdoICovCisJICAgIGhpZ2ggPSBpIC0gMTsKKwllbHNlIGlmIChmcFtpXS5mZF90b3AgKyBmcFtpXS5mZF9sZW4gPD0gbG51bSkKKwkgICAgLyogZm9sZCBhYm92ZSBsbnVtLCBhZGp1c3QgbG93ICovCisJICAgIGxvdyA9IGkgKyAxOworCWVsc2UKKwl7CisJICAgIC8qIGxudW0gaXMgaW5zaWRlIHRoaXMgZm9sZCAqLworCSAgICAqZnBwID0gZnAgKyBpOworCSAgICByZXR1cm4gVFJVRTsKKwl9CisgICAgfQorICAgICpmcHAgPSBmcCArIGxvdzsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qIGZvbGRMZXZlbFdpbigpIHt7ezIgKi8KKy8qCisgKiBSZXR1cm4gZm9sZCBsZXZlbCBhdCBsaW5lIG51bWJlciAibG51bSIgaW4gd2luZG93ICJ3cCIuCisgKi8KKyAgICBzdGF0aWMgaW50Citmb2xkTGV2ZWxXaW4od3AsIGxudW0pCisgICAgd2luX1QJKndwOworICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgZm9sZF9UCSpmcDsKKyAgICBsaW5lbnJfVAlsbnVtX3JlbCA9IGxudW07CisgICAgaW50CQlsZXZlbCA9ICAwOworICAgIGdhcnJheV9UCSpnYXA7CisKKyAgICAvKiBSZWN1cnNpdmVseSBzZWFyY2ggZm9yIGEgZm9sZCB0aGF0IGNvbnRhaW5zICJsbnVtIi4gKi8KKyAgICBnYXAgPSAmd3AtPndfZm9sZHM7CisgICAgZm9yICg7OykKKyAgICB7CisJaWYgKCFmb2xkRmluZChnYXAsIGxudW1fcmVsLCAmZnApKQorCSAgICBicmVhazsKKwkvKiBDaGVjayBuZXN0ZWQgZm9sZHMuICBMaW5lIG51bWJlciBpcyByZWxhdGl2ZSB0byBjb250YWluaW5nIGZvbGQuICovCisJZ2FwID0gJmZwLT5mZF9uZXN0ZWQ7CisJbG51bV9yZWwgLT0gZnAtPmZkX3RvcDsKKwkrK2xldmVsOworICAgIH0KKworICAgIHJldHVybiBsZXZlbDsKK30KKworLyogY2hlY2t1cGRhdGUoKSB7e3syICovCisvKgorICogQ2hlY2sgaWYgdGhlIGZvbGRzIGluIHdpbmRvdyAid3AiIGFyZSBpbnZhbGlkIGFuZCB1cGRhdGUgdGhlbSBpZiBuZWVkZWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2hlY2t1cGRhdGUod3ApCisgICAgd2luX1QJKndwOworeworICAgIGlmICh3cC0+d19mb2xkaW52YWxpZCkKKyAgICB7CisJZm9sZFVwZGF0ZSh3cCwgKGxpbmVucl9UKTEsIChsaW5lbnJfVClNQVhMTlVNKTsgLyogd2lsbCB1cGRhdGUgYWxsICovCisJd3AtPndfZm9sZGludmFsaWQgPSBGQUxTRTsKKyAgICB9Cit9CisKKy8qIHNldEZvbGRSZXBlYXQoKSB7e3syICovCisvKgorICogT3BlbiBvciBjbG9zZSBmb2xkIGZvciBjdXJyZW50IHdpbmRvdyBhdCBsaW5lICJsbnVtIi4KKyAqIFJlcGVhdCAiY291bnQiIHRpbWVzLgorICovCisgICAgc3RhdGljIHZvaWQKK3NldEZvbGRSZXBlYXQobG51bSwgY291bnQsIG9wZW4pCisgICAgbGluZW5yX1QJbG51bTsKKyAgICBsb25nCWNvdW50OworICAgIGludAkJb3BlbjsKK3sKKyAgICBpbnQJCWRvbmU7CisgICAgbG9uZwluOworCisgICAgZm9yIChuID0gMDsgbiA8IGNvdW50OyArK24pCisgICAgeworCWRvbmUgPSBET05FX05PVEhJTkc7CisJKHZvaWQpc2V0TWFudWFsRm9sZChsbnVtLCBvcGVuLCBGQUxTRSwgJmRvbmUpOworCWlmICghKGRvbmUgJiBET05FX0FDVElPTikpCisJeworCSAgICAvKiBPbmx5IGdpdmUgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIG5vIGZvbGQgY291bGQgYmUgb3BlbmVkLiAqLworCSAgICBpZiAobiA9PSAwICYmICEoZG9uZSAmIERPTkVfRk9MRCkpCisJCUVNU0coXyhlX25vZm9sZCkpOworCSAgICBicmVhazsKKwl9CisgICAgfQorfQorCisvKiBzZXRNYW51YWxGb2xkKCkge3t7MiAqLworLyoKKyAqIE9wZW4gb3IgY2xvc2UgdGhlIGZvbGQgaW4gdGhlIGN1cnJlbnQgd2luZG93IHdoaWNoIGNvbnRhaW5zICJsbnVtIi4KKyAqIEFsc28gZG9lcyB0aGlzIGZvciBvdGhlciB3aW5kb3dzIGluIGRpZmYgbW9kZSB3aGVuIG5lZWRlZC4KKyAqLworICAgIHN0YXRpYyBsaW5lbnJfVAorc2V0TWFudWFsRm9sZChsbnVtLCBvcGVuaW5nLCByZWN1cnNlLCBkb25lcCkKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJb3BlbmluZzsgICAgLyogVFJVRSB3aGVuIG9wZW5pbmcsIEZBTFNFIHdoZW4gY2xvc2luZyAqLworICAgIGludAkJcmVjdXJzZTsgICAgLyogVFJVRSB3aGVuIGNsb3Npbmcvb3BlbmluZyByZWN1cnNpdmUgKi8KKyAgICBpbnQJCSpkb25lcDsKK3sKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBpZiAoZm9sZG1ldGhvZElzRGlmZihjdXJ3aW4pICYmIGN1cndpbi0+d19wX3NjYikKKyAgICB7CisJd2luX1QJICAgICp3cDsKKwlsaW5lbnJfVCAgICBkbG51bTsKKworCS8qCisJICogRG8gdGhlIHNhbWUgb3BlcmF0aW9uIGluIG90aGVyIHdpbmRvd3MgaW4gZGlmZiBtb2RlLiAgQ2FsY3VsYXRlIHRoZQorCSAqIGxpbmUgbnVtYmVyIGZyb20gdGhlIGRpZmZzLgorCSAqLworCUZPUl9BTExfV0lORE9XUyh3cCkKKwl7CisJICAgIGlmICh3cCAhPSBjdXJ3aW4gJiYgZm9sZG1ldGhvZElzRGlmZih3cCkgJiYgd3AtPndfcF9zY2IpCisJICAgIHsKKwkJZGxudW0gPSBkaWZmX2xudW1fd2luKGN1cndpbi0+d19jdXJzb3IubG51bSwgd3ApOworCQlpZiAoZGxudW0gIT0gMCkKKwkJICAgICh2b2lkKXNldE1hbnVhbEZvbGRXaW4od3AsIGRsbnVtLCBvcGVuaW5nLCByZWN1cnNlLCBOVUxMKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBzZXRNYW51YWxGb2xkV2luKGN1cndpbiwgbG51bSwgb3BlbmluZywgcmVjdXJzZSwgZG9uZXApOworfQorCisvKiBzZXRNYW51YWxGb2xkV2luKCkge3t7MiAqLworLyoKKyAqIE9wZW4gb3IgY2xvc2UgdGhlIGZvbGQgaW4gd2luZG93ICJ3cCIgd2hpY2ggY29udGFpbnMgImxudW0iLgorICogImRvbmVwIiwgd2hlbiBub3QgTlVMTCwgcG9pbnRzIHRvIGZsYWcgdGhhdCBpcyBzZXQgdG8gRE9ORV9GT0xEIHdoZW4gc29tZQorICogZm9sZCB3YXMgZm91bmQgYW5kIHRvIERPTkVfQUNUSU9OIHdoZW4gc29tZSBmb2xkIHdhcyBvcGVuZWQgb3IgY2xvc2VkLgorICogV2hlbiAiZG9uZXAiIGlzIE5VTEwgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIHdoZW4gbm8gZm9sZCB3YXMgZm91bmQgZm9yCisgKiAibG51bSIsIGJ1dCBvbmx5IGlmICJ3cCIgaXMgImN1cndpbiIuCisgKiBSZXR1cm4gdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBuZXh0IGxpbmUgdGhhdCBjb3VsZCBiZSBjbG9zZWQuCisgKiBJdCdzIG9ubHkgdmFsaWQgd2hlbiAib3BlbmluZyIgaXMgVFJVRSEKKyAqLworICAgIHN0YXRpYyBsaW5lbnJfVAorc2V0TWFudWFsRm9sZFdpbih3cCwgbG51bSwgb3BlbmluZywgcmVjdXJzZSwgZG9uZXApCisgICAgd2luX1QJKndwOworICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQlvcGVuaW5nOyAgICAvKiBUUlVFIHdoZW4gb3BlbmluZywgRkFMU0Ugd2hlbiBjbG9zaW5nICovCisgICAgaW50CQlyZWN1cnNlOyAgICAvKiBUUlVFIHdoZW4gY2xvc2luZy9vcGVuaW5nIHJlY3Vyc2l2ZSAqLworICAgIGludAkJKmRvbmVwOworeworICAgIGZvbGRfVAkqZnA7CisgICAgZm9sZF9UCSpmcDI7CisgICAgZm9sZF9UCSpmb3VuZCA9IE5VTEw7CisgICAgaW50CQlqOworICAgIGludAkJbGV2ZWwgPSAwOworICAgIGludAkJdXNlX2xldmVsID0gRkFMU0U7CisgICAgaW50CQlmb3VuZF9mb2xkID0gRkFMU0U7CisgICAgZ2FycmF5X1QJKmdhcDsKKyAgICBsaW5lbnJfVAluZXh0ID0gTUFYTE5VTTsKKyAgICBsaW5lbnJfVAlvZmYgPSAwOworICAgIGludAkJZG9uZSA9IDA7CisKKyAgICBjaGVja3VwZGF0ZSh3cCk7CisKKyAgICAvKgorICAgICAqIEZpbmQgdGhlIGZvbGQsIG9wZW4gb3IgY2xvc2UgaXQuCisgICAgICovCisgICAgZ2FwID0gJndwLT53X2ZvbGRzOworICAgIGZvciAoOzspCisgICAgeworCWlmICghZm9sZEZpbmQoZ2FwLCBsbnVtLCAmZnApKQorCXsKKwkgICAgLyogSWYgdGhlcmUgaXMgYSBmb2xsb3dpbmcgZm9sZCwgY29udGludWUgdGhlcmUgbmV4dCB0aW1lLiAqLworCSAgICBpZiAoZnAgPCAoZm9sZF9UICopZ2FwLT5nYV9kYXRhICsgZ2FwLT5nYV9sZW4pCisJCW5leHQgPSBmcC0+ZmRfdG9wICsgb2ZmOworCSAgICBicmVhazsKKwl9CisKKwkvKiBsbnVtIGlzIGluc2lkZSB0aGlzIGZvbGQgKi8KKwlmb3VuZF9mb2xkID0gVFJVRTsKKworCS8qIElmIHRoZXJlIGlzIGEgZm9sbG93aW5nIGZvbGQsIGNvbnRpbnVlIHRoZXJlIG5leHQgdGltZS4gKi8KKwlpZiAoZnAgKyAxIDwgKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSArIGdhcC0+Z2FfbGVuKQorCSAgICBuZXh0ID0gZnBbMV0uZmRfdG9wICsgb2ZmOworCisJLyogQ2hhbmdlIGZyb20gbGV2ZWwtZGVwZW5kZW50IGZvbGRpbmcgdG8gbWFudWFsLiAqLworCWlmICh1c2VfbGV2ZWwgfHwgZnAtPmZkX2ZsYWdzID09IEZEX0xFVkVMKQorCXsKKwkgICAgdXNlX2xldmVsID0gVFJVRTsKKwkgICAgaWYgKGxldmVsID49IHdwLT53X3BfZmRsKQorCQlmcC0+ZmRfZmxhZ3MgPSBGRF9DTE9TRUQ7CisJICAgIGVsc2UKKwkJZnAtPmZkX2ZsYWdzID0gRkRfT1BFTjsKKwkgICAgZnAyID0gKGZvbGRfVCAqKWZwLT5mZF9uZXN0ZWQuZ2FfZGF0YTsKKwkgICAgZm9yIChqID0gMDsgaiA8IGZwLT5mZF9uZXN0ZWQuZ2FfbGVuOyArK2opCisJCWZwMltqXS5mZF9mbGFncyA9IEZEX0xFVkVMOworCX0KKworCS8qIFNpbXBsZSBjYXNlOiBDbG9zZSByZWN1cnNpdmVseSBtZWFucyBjbG9zaW5nIHRoZSBmb2xkLiAqLworCWlmICghb3BlbmluZyAmJiByZWN1cnNlKQorCXsKKwkgICAgaWYgKGZwLT5mZF9mbGFncyAhPSBGRF9DTE9TRUQpCisJICAgIHsKKwkJZG9uZSB8PSBET05FX0FDVElPTjsKKwkJZnAtPmZkX2ZsYWdzID0gRkRfQ0xPU0VEOworCSAgICB9CisJfQorCWVsc2UgaWYgKGZwLT5mZF9mbGFncyA9PSBGRF9DTE9TRUQpCisJeworCSAgICAvKiBXaGVuIG9wZW5pbmcsIG9wZW4gdG9wbW9zdCBjbG9zZWQgZm9sZC4gKi8KKwkgICAgaWYgKG9wZW5pbmcpCisJICAgIHsKKwkJZnAtPmZkX2ZsYWdzID0gRkRfT1BFTjsKKwkJZG9uZSB8PSBET05FX0FDVElPTjsKKwkJaWYgKHJlY3Vyc2UpCisJCSAgICBmb2xkT3Blbk5lc3RlZChmcCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCisJLyogZm9sZCBpcyBvcGVuLCBjaGVjayBuZXN0ZWQgZm9sZHMgKi8KKwlmb3VuZCA9IGZwOworCWdhcCA9ICZmcC0+ZmRfbmVzdGVkOworCWxudW0gLT0gZnAtPmZkX3RvcDsKKwlvZmYgKz0gZnAtPmZkX3RvcDsKKwkrK2xldmVsOworICAgIH0KKyAgICBpZiAoZm91bmRfZm9sZCkKKyAgICB7CisJLyogV2hlbiBjbG9zaW5nIGFuZCBub3QgcmVjdXJzZSwgY2xvc2UgZGVlcGVzdCBvcGVuIGZvbGQuICovCisJaWYgKCFvcGVuaW5nICYmIGZvdW5kICE9IE5VTEwpCisJeworCSAgICBmb3VuZC0+ZmRfZmxhZ3MgPSBGRF9DTE9TRUQ7CisJICAgIGRvbmUgfD0gRE9ORV9BQ1RJT047CisJfQorCXdwLT53X2ZvbGRfbWFudWFsID0gVFJVRTsKKwlpZiAoZG9uZSAmIERPTkVfQUNUSU9OKQorCSAgICBjaGFuZ2VkX3dpbmRvd19zZXR0aW5nX3dpbih3cCk7CisJZG9uZSB8PSBET05FX0ZPTEQ7CisgICAgfQorICAgIGVsc2UgaWYgKGRvbmVwID09IE5VTEwgJiYgd3AgPT0gY3Vyd2luKQorCUVNU0coXyhlX25vZm9sZCkpOworCisgICAgaWYgKGRvbmVwICE9IE5VTEwpCisJKmRvbmVwIHw9IGRvbmU7CisKKyAgICByZXR1cm4gbmV4dDsKK30KKworLyogZm9sZE9wZW5OZXN0ZWQoKSB7e3syICovCisvKgorICogT3BlbiBhbGwgbmVzdGVkIGZvbGRzIGluIGZvbGQgImZwciIgcmVjdXJzaXZlbHkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZm9sZE9wZW5OZXN0ZWQoZnByKQorICAgIGZvbGRfVAkqZnByOworeworICAgIGludAkJaTsKKyAgICBmb2xkX1QJKmZwOworCisgICAgZnAgPSAoZm9sZF9UICopZnByLT5mZF9uZXN0ZWQuZ2FfZGF0YTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnByLT5mZF9uZXN0ZWQuZ2FfbGVuOyArK2kpCisgICAgeworCWZvbGRPcGVuTmVzdGVkKCZmcFtpXSk7CisJZnBbaV0uZmRfZmxhZ3MgPSBGRF9PUEVOOworICAgIH0KK30KKworLyogZGVsZXRlRm9sZEVudHJ5KCkge3t7MiAqLworLyoKKyAqIERlbGV0ZSBmb2xkICJpZHgiIGZyb20gZ3Jvd2FycmF5ICJnYXAiLgorICogV2hlbiAicmVjdXJzaXZlIiBpcyBUUlVFIGFsc28gZGVsZXRlIGFsbCB0aGUgZm9sZHMgY29udGFpbmVkIGluIGl0LgorICogV2hlbiAicmVjdXJzaXZlIiBpcyBGQUxTRSBjb250YWluZWQgZm9sZHMgYXJlIG1vdmVkIG9uZSBsZXZlbCB1cC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitkZWxldGVGb2xkRW50cnkoZ2FwLCBpZHgsIHJlY3Vyc2l2ZSkKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGludAkJaWR4OworICAgIGludAkJcmVjdXJzaXZlOworeworICAgIGZvbGRfVAkqZnA7CisgICAgaW50CQlpOworICAgIGxvbmcJbW92ZWQ7CisgICAgZm9sZF9UCSpuZnA7CisKKyAgICBmcCA9IChmb2xkX1QgKilnYXAtPmdhX2RhdGEgKyBpZHg7CisgICAgaWYgKHJlY3Vyc2l2ZSB8fCBmcC0+ZmRfbmVzdGVkLmdhX2xlbiA9PSAwKQorICAgIHsKKwkvKiByZWN1cnNpdmVseSBkZWxldGUgdGhlIGNvbnRhaW5lZCBmb2xkcyAqLworCWRlbGV0ZUZvbGRSZWN1cnNlKCZmcC0+ZmRfbmVzdGVkKTsKKwktLWdhcC0+Z2FfbGVuOworCSsrZ2FwLT5nYV9yb29tOworCWlmIChpZHggPCBnYXAtPmdhX2xlbikKKwkgICAgbWNoX21lbW1vdmUoZnAsIGZwICsgMSwgc2l6ZW9mKGZvbGRfVCkgKiAoZ2FwLT5nYV9sZW4gLSBpZHgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBtb3ZlIG5lc3RlZCBmb2xkcyBvbmUgbGV2ZWwgdXAsIHRvIG92ZXJ3cml0ZSB0aGUgZm9sZCB0aGF0IGlzCisJICogZGVsZXRlZC4gKi8KKwltb3ZlZCA9IGZwLT5mZF9uZXN0ZWQuZ2FfbGVuOworCWlmIChnYV9ncm93KGdhcCwgKGludCkobW92ZWQgLSAxKSkgPT0gT0spCisJeworCSAgICAvKiBhZGp1c3QgZmRfdG9wIGFuZCBmZF9mbGFncyBmb3IgdGhlIG1vdmVkIGZvbGRzICovCisJICAgIG5mcCA9IChmb2xkX1QgKilmcC0+ZmRfbmVzdGVkLmdhX2RhdGE7CisJICAgIGZvciAoaSA9IDA7IGkgPCBtb3ZlZDsgKytpKQorCSAgICB7CisJCW5mcFtpXS5mZF90b3AgKz0gZnAtPmZkX3RvcDsKKwkJaWYgKGZwLT5mZF9mbGFncyA9PSBGRF9MRVZFTCkKKwkJICAgIG5mcFtpXS5mZF9mbGFncyA9IEZEX0xFVkVMOworCQlpZiAoZnAtPmZkX3NtYWxsID09IE1BWUJFKQorCQkgICAgbmZwW2ldLmZkX3NtYWxsID0gTUFZQkU7CisJICAgIH0KKworCSAgICAvKiBtb3ZlIHRoZSBleGlzdGluZyBmb2xkcyBkb3duIHRvIG1ha2Ugcm9vbSAqLworCSAgICBpZiAoaWR4IDwgZ2FwLT5nYV9sZW4pCisJCW1jaF9tZW1tb3ZlKGZwICsgbW92ZWQsIGZwICsgMSwKKwkJCQkJc2l6ZW9mKGZvbGRfVCkgKiAoZ2FwLT5nYV9sZW4gLSBpZHgpKTsKKwkgICAgLyogbW92ZSB0aGUgY29udGFpbmVkIGZvbGRzIG9uZSBsZXZlbCB1cCAqLworCSAgICBtY2hfbWVtbW92ZShmcCwgbmZwLCAoc2l6ZV90KShzaXplb2YoZm9sZF9UKSAqIG1vdmVkKSk7CisJICAgIHZpbV9mcmVlKG5mcCk7CisJICAgIGdhcC0+Z2FfbGVuICs9IG1vdmVkIC0gMTsKKwkgICAgZ2FwLT5nYV9yb29tIC09IG1vdmVkIC0gMTsKKwl9CisgICAgfQorfQorCisvKiBkZWxldGVGb2xkUmVjdXJzZSgpIHt7ezIgKi8KKy8qCisgKiBEZWxldGUgbmVzdGVkIGZvbGRzIGluIGEgZm9sZC4KKyAqLworICAgIHZvaWQKK2RlbGV0ZUZvbGRSZWN1cnNlKGdhcCkKKyAgICBnYXJyYXlfVAkqZ2FwOworeworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBnYXAtPmdhX2xlbjsgKytpKQorCWRlbGV0ZUZvbGRSZWN1cnNlKCYoKChmb2xkX1QgKikoZ2FwLT5nYV9kYXRhKSlbaV0uZmRfbmVzdGVkKSk7CisgICAgZ2FfY2xlYXIoZ2FwKTsKK30KKworLyogZm9sZE1hcmtBZGp1c3QoKSB7e3syICovCisvKgorICogVXBkYXRlIGxpbmUgbnVtYmVycyBvZiBmb2xkcyBmb3IgaW5zZXJ0ZWQvZGVsZXRlZCBsaW5lcy4KKyAqLworICAgIHZvaWQKK2ZvbGRNYXJrQWRqdXN0KHdwLCBsaW5lMSwgbGluZTIsIGFtb3VudCwgYW1vdW50X2FmdGVyKQorICAgIHdpbl9UCSp3cDsKKyAgICBsaW5lbnJfVAlsaW5lMTsKKyAgICBsaW5lbnJfVAlsaW5lMjsKKyAgICBsb25nCWFtb3VudDsKKyAgICBsb25nCWFtb3VudF9hZnRlcjsKK3sKKyAgICAvKiBJZiBkZWxldGluZyBtYXJrcyBmcm9tIGxpbmUxIHRvIGxpbmUyLCBidXQgbm90IGRlbGV0aW5nIGFsbCB0aG9zZQorICAgICAqIGxpbmVzLCBzZXQgbGluZTIgc28gdGhhdCBvbmx5IGRlbGV0ZWQgbGluZXMgaGF2ZSB0aGVpciBmb2xkcyByZW1vdmVkLiAqLworICAgIGlmIChhbW91bnQgPT0gTUFYTE5VTSAmJiBsaW5lMiA+PSBsaW5lMSAmJiBsaW5lMiAtIGxpbmUxID49IC1hbW91bnRfYWZ0ZXIpCisJbGluZTIgPSBsaW5lMSAtIGFtb3VudF9hZnRlciAtIDE7CisgICAgLyogSWYgYXBwZW5kaW5nIGEgbGluZSBpbiBJbnNlcnQgbW9kZSwgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBmb2xkCisgICAgICoganVzdCBhYm92ZSB0aGUgbGluZS4gKi8KKyAgICBpZiAoKFN0YXRlICYgSU5TRVJUKSAmJiBhbW91bnQgPT0gKGxpbmVucl9UKTEgJiYgbGluZTIgPT0gTUFYTE5VTSkKKwktLWxpbmUxOworICAgIGZvbGRNYXJrQWRqdXN0UmVjdXJzZSgmd3AtPndfZm9sZHMsIGxpbmUxLCBsaW5lMiwgYW1vdW50LCBhbW91bnRfYWZ0ZXIpOworfQorCisvKiBmb2xkTWFya0FkanVzdFJlY3Vyc2UoKSB7e3syICovCisgICAgc3RhdGljIHZvaWQKK2ZvbGRNYXJrQWRqdXN0UmVjdXJzZShnYXAsIGxpbmUxLCBsaW5lMiwgYW1vdW50LCBhbW91bnRfYWZ0ZXIpCisgICAgZ2FycmF5X1QJKmdhcDsKKyAgICBsaW5lbnJfVAlsaW5lMTsKKyAgICBsaW5lbnJfVAlsaW5lMjsKKyAgICBsb25nCWFtb3VudDsKKyAgICBsb25nCWFtb3VudF9hZnRlcjsKK3sKKyAgICBmb2xkX1QJKmZwOworICAgIGludAkJaTsKKyAgICBsaW5lbnJfVAlsYXN0OworICAgIGxpbmVucl9UCXRvcDsKKworICAgIC8qIEluIEluc2VydCBtb2RlIGFuIGluc2VydGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIGZvbGQgaXMgY29uc2lkZXJlZCBwYXJ0CisgICAgICogb2YgdGhlIGZvbGQsIG90aGVyd2lzZSBpdCBpc24ndC4gKi8KKyAgICBpZiAoKFN0YXRlICYgSU5TRVJUKSAmJiBhbW91bnQgPT0gKGxpbmVucl9UKTEgJiYgbGluZTIgPT0gTUFYTE5VTSkKKwl0b3AgPSBsaW5lMSArIDE7CisgICAgZWxzZQorCXRvcCA9IGxpbmUxOworCisgICAgLyogRmluZCB0aGUgZm9sZCBjb250YWluaW5nIG9yIGp1c3QgYmVsb3cgImxpbmUxIi4gKi8KKyAgICAodm9pZClmb2xkRmluZChnYXAsIGxpbmUxLCAmZnApOworCisgICAgLyoKKyAgICAgKiBBZGp1c3QgYWxsIGZvbGRzIGJlbG93ICJsaW5lMSIgdGhhdCBhcmUgYWZmZWN0ZWQuCisgICAgICovCisgICAgZm9yIChpID0gKGludCkoZnAgLSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhKTsgaSA8IGdhcC0+Z2FfbGVuOyArK2ksICsrZnApCisgICAgeworCS8qCisJICogQ2hlY2sgZm9yIHRoZXNlIHNpdHVhdGlvbnM6CisJICoJICAxICAyCTMKKwkgKgkgIDEgIDIJMworCSAqIGxpbmUxICAgICAyCTMgIDQgIDUKKwkgKgkgICAgIDIJMyAgNCAgNQorCSAqCSAgICAgMgkzICA0ICA1CisJICogbGluZTIgICAgIDIJMyAgNCAgNQorCSAqCQkzICAgICA1ICA2CisJICoJCTMgICAgIDUgIDYKKwkgKi8KKworCWxhc3QgPSBmcC0+ZmRfdG9wICsgZnAtPmZkX2xlbiAtIDE7IC8qIGxhc3QgbGluZSBvZiBmb2xkICovCisKKwkvKiAxLiBmb2xkIGNvbXBsZXRlbHkgYWJvdmUgbGluZTE6IG5vdGhpbmcgdG8gZG8gKi8KKwlpZiAobGFzdCA8IGxpbmUxKQorCSAgICBjb250aW51ZTsKKworCS8qIDYuIGZvbGQgYmVsb3cgbGluZTI6IG9ubHkgYWRqdXN0IGZvciBhbW91bnRfYWZ0ZXIgKi8KKwlpZiAoZnAtPmZkX3RvcCA+IGxpbmUyKQorCXsKKwkgICAgaWYgKGFtb3VudF9hZnRlciA9PSAwKQorCQlicmVhazsKKwkgICAgZnAtPmZkX3RvcCArPSBhbW91bnRfYWZ0ZXI7CisJfQorCWVsc2UKKwl7CisJICAgIGlmIChmcC0+ZmRfdG9wID49IHRvcCAmJiBsYXN0IDw9IGxpbmUyKQorCSAgICB7CisJCS8qIDQuIGZvbGQgY29tcGxldGVseSBjb250YWluZWQgaW4gcmFuZ2UgKi8KKwkJaWYgKGFtb3VudCA9PSBNQVhMTlVNKQorCQl7CisJCSAgICAvKiBEZWxldGluZyBsaW5lczogZGVsZXRlIHRoZSBmb2xkIGNvbXBsZXRlbHkgKi8KKwkJICAgIGRlbGV0ZUZvbGRFbnRyeShnYXAsIGksIFRSVUUpOworCQkgICAgLS1pOyAgICAvKiBhZGp1c3QgaW5kZXggZm9yIGRlbGV0aW9uICovCisJCSAgICAtLWZwOworCQl9CisJCWVsc2UKKwkJICAgIGZwLT5mZF90b3AgKz0gYW1vdW50OworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKiAyLCAzLCBvciA1OiBuZWVkIHRvIGNvcnJlY3QgbmVzdGVkIGZvbGRzIHRvbyAqLworCQlmb2xkTWFya0FkanVzdFJlY3Vyc2UoJmZwLT5mZF9uZXN0ZWQsIGxpbmUxIC0gZnAtPmZkX3RvcCwKKwkJCQkgIGxpbmUyIC0gZnAtPmZkX3RvcCwgYW1vdW50LCBhbW91bnRfYWZ0ZXIpOworCQlpZiAoZnAtPmZkX3RvcCA8IHRvcCkKKwkJeworCQkgICAgaWYgKGxhc3QgPD0gbGluZTIpCisJCSAgICB7CisJCQkvKiAyLiBmb2xkIGNvbnRhaW5zIGxpbmUxLCBsaW5lMiBpcyBiZWxvdyBmb2xkICovCisJCQlpZiAoYW1vdW50ID09IE1BWExOVU0pCisJCQkgICAgZnAtPmZkX2xlbiA9IGxpbmUxIC0gZnAtPmZkX3RvcDsKKwkJCWVsc2UKKwkJCSAgICBmcC0+ZmRfbGVuICs9IGFtb3VudDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCS8qIDMuIGZvbGQgY29udGFpbnMgbGluZTEgYW5kIGxpbmUyICovCisJCQlmcC0+ZmRfbGVuICs9IGFtb3VudF9hZnRlcjsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIC8qIDUuIGZvbGQgaXMgYmVsb3cgbGluZTEgYW5kIGNvbnRhaW5zIGxpbmUyICovCisJCSAgICBpZiAoYW1vdW50ID09IE1BWExOVU0pCisJCSAgICB7CisJCQlmcC0+ZmRfbGVuIC09IGxpbmUyIC0gZnAtPmZkX3RvcCArIDE7CisJCQlmcC0+ZmRfdG9wID0gbGluZTE7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlmcC0+ZmRfbGVuICs9IGFtb3VudF9hZnRlciAtIGFtb3VudDsKKwkJCWZwLT5mZF90b3AgKz0gYW1vdW50OworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKiBnZXREZWVwZXN0TmVzdGluZygpIHt7ezIgKi8KKy8qCisgKiBHZXQgdGhlIGxvd2VzdCAnZm9sZGxldmVsJyB2YWx1ZSB0aGF0IG1ha2VzIHRoZSBkZWVwZXN0IG5lc3RlZCBmb2xkIGluIHRoZQorICogY3VycmVudCB3aW5kb3cgb3Blbi4KKyAqLworICAgIGludAorZ2V0RGVlcGVzdE5lc3RpbmcoKQoreworICAgIGNoZWNrdXBkYXRlKGN1cndpbik7CisgICAgcmV0dXJuIGdldERlZXBlc3ROZXN0aW5nUmVjdXJzZSgmY3Vyd2luLT53X2ZvbGRzKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2dldERlZXBlc3ROZXN0aW5nUmVjdXJzZShnYXApCisgICAgZ2FycmF5X1QJKmdhcDsKK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQlsZXZlbDsKKyAgICBpbnQJCW1heGxldmVsID0gMDsKKyAgICBmb2xkX1QJKmZwOworCisgICAgZnAgPSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhOworICAgIGZvciAoaSA9IDA7IGkgPCBnYXAtPmdhX2xlbjsgKytpKQorICAgIHsKKwlsZXZlbCA9IGdldERlZXBlc3ROZXN0aW5nUmVjdXJzZSgmZnBbaV0uZmRfbmVzdGVkKSArIDE7CisJaWYgKGxldmVsID4gbWF4bGV2ZWwpCisJICAgIG1heGxldmVsID0gbGV2ZWw7CisgICAgfQorCisgICAgcmV0dXJuIG1heGxldmVsOworfQorCisvKiBjaGVja19jbG9zZWQoKSB7e3syICovCisvKgorICogQ2hlY2sgaWYgYSBmb2xkIGlzIGNsb3NlZCBhbmQgdXBkYXRlIHRoZSBpbmZvIG5lZWRlZCB0byBjaGVjayBuZXN0ZWQgZm9sZHMuCisgKi8KKyAgICBzdGF0aWMgaW50CitjaGVja19jbG9zZWQod2luLCBmcCwgdXNlX2xldmVscCwgbGV2ZWwsIG1heWJlX3NtYWxscCwgbG51bV9vZmYpCisgICAgd2luX1QJKndpbjsKKyAgICBmb2xkX1QJKmZwOworICAgIGludAkJKnVzZV9sZXZlbHA7CSAgICAvKiBUUlVFOiBvdXRlciBmb2xkIGhhZCBGRF9MRVZFTCAqLworICAgIGludAkJbGV2ZWw7CQkgICAgLyogZm9sZGluZyBkZXB0aCAqLworICAgIGludAkJKm1heWJlX3NtYWxscDsJICAgIC8qIFRSVUU6IG91dGVyIHRoaXMgaGFkIGZkX3NtYWxsID09IE1BWUJFICovCisgICAgbGluZW5yX1QJbG51bV9vZmY7CSAgICAvKiBsaW5lIG51bWJlciBvZmZzZXQgZm9yIGZwLT5mZF90b3AgKi8KK3sKKyAgICBpbnQJCWNsb3NlZCA9IEZBTFNFOworCisgICAgLyogQ2hlY2sgaWYgdGhpcyBmb2xkIGlzIGNsb3NlZC4gIElmIHRoZSBmbGFnIGlzIEZEX0xFVkVMIHRoaXMKKyAgICAgKiBmb2xkIGFuZCBhbGwgZm9sZHMgaXQgY29udGFpbnMgZGVwZW5kIG9uICdmb2xkbGV2ZWwnLiAqLworICAgIGlmICgqdXNlX2xldmVscCB8fCBmcC0+ZmRfZmxhZ3MgPT0gRkRfTEVWRUwpCisgICAgeworCSp1c2VfbGV2ZWxwID0gVFJVRTsKKwlpZiAobGV2ZWwgPj0gd2luLT53X3BfZmRsKQorCSAgICBjbG9zZWQgPSBUUlVFOworICAgIH0KKyAgICBlbHNlIGlmIChmcC0+ZmRfZmxhZ3MgPT0gRkRfQ0xPU0VEKQorCWNsb3NlZCA9IFRSVUU7CisKKyAgICAvKiBTbWFsbCBmb2xkIGlzbid0IGNsb3NlZCBhbnl3YXkuICovCisgICAgaWYgKGZwLT5mZF9zbWFsbCA9PSBNQVlCRSkKKwkqbWF5YmVfc21hbGxwID0gVFJVRTsKKyAgICBpZiAoY2xvc2VkKQorICAgIHsKKwlpZiAoKm1heWJlX3NtYWxscCkKKwkgICAgZnAtPmZkX3NtYWxsID0gTUFZQkU7CisJY2hlY2tTbWFsbCh3aW4sIGZwLCBsbnVtX29mZik7CisJaWYgKGZwLT5mZF9zbWFsbCA9PSBUUlVFKQorCSAgICBjbG9zZWQgPSBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIGNsb3NlZDsKK30KKworLyogY2hlY2tTbWFsbCgpIHt7ezIgKi8KKy8qCisgKiBVcGRhdGUgZmRfc21hbGwgZmllbGQgb2YgZm9sZCAiZnAiLgorICovCisgICAgc3RhdGljIHZvaWQKK2NoZWNrU21hbGwod3AsIGZwLCBsbnVtX29mZikKKyAgICB3aW5fVAkqd3A7CisgICAgZm9sZF9UCSpmcDsKKyAgICBsaW5lbnJfVAlsbnVtX29mZjsJLyogb2Zmc2V0IGZvciBmcC0+ZmRfdG9wICovCit7CisgICAgaW50CQljb3VudDsKKyAgICBpbnQJCW47CisKKyAgICBpZiAoZnAtPmZkX3NtYWxsID09IE1BWUJFKQorICAgIHsKKwkvKiBNYXJrIGFueSBuZXN0ZWQgZm9sZHMgdG8gbWF5YmUtc21hbGwgKi8KKwlzZXRTbWFsbE1heWJlKCZmcC0+ZmRfbmVzdGVkKTsKKworCWlmIChmcC0+ZmRfbGVuID4gY3Vyd2luLT53X3BfZm1sKQorCSAgICBmcC0+ZmRfc21hbGwgPSBGQUxTRTsKKwllbHNlCisJeworCSAgICBjb3VudCA9IDA7CisJICAgIGZvciAobiA9IDA7IG4gPCBmcC0+ZmRfbGVuOyArK24pCisJICAgIHsKKwkJY291bnQgKz0gcGxpbmVzX3dpbl9ub2ZvbGQod3AsIGZwLT5mZF90b3AgKyBsbnVtX29mZiArIG4pOworCQlpZiAoY291bnQgPiBjdXJ3aW4tPndfcF9mbWwpCisJCXsKKwkJICAgIGZwLT5mZF9zbWFsbCA9IEZBTFNFOworCQkgICAgcmV0dXJuOworCQl9CisJICAgIH0KKwkgICAgZnAtPmZkX3NtYWxsID0gVFJVRTsKKwl9CisgICAgfQorfQorCisvKiBzZXRTbWFsbE1heWJlKCkge3t7MiAqLworLyoKKyAqIFNldCBzbWFsbCBmbGFncyBpbiAiZ2FwIiB0byBNQVlCRS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRTbWFsbE1heWJlKGdhcCkKKyAgICBnYXJyYXlfVAkqZ2FwOworeworICAgIGludAkJaTsKKyAgICBmb2xkX1QJKmZwOworCisgICAgZnAgPSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhOworICAgIGZvciAoaSA9IDA7IGkgPCBnYXAtPmdhX2xlbjsgKytpKQorCWZwW2ldLmZkX3NtYWxsID0gTUFZQkU7Cit9CisKKy8qIGZvbGRDcmVhdGVNYXJrZXJzKCkge3t7MiAqLworLyoKKyAqIENyZWF0ZSBhIGZvbGQgZnJvbSBsaW5lICJzdGFydCIgdG8gbGluZSAiZW5kIiAoaW5jbHVzaXZlKSBpbiB0aGUgY3VycmVudAorICogd2luZG93IGJ5IGFkZGluZyBtYXJrZXJzLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZvbGRDcmVhdGVNYXJrZXJzKHN0YXJ0LCBlbmQpCisgICAgbGluZW5yX1QJc3RhcnQ7CisgICAgbGluZW5yX1QJZW5kOworeworICAgIGlmICghY3VyYnVmLT5iX3BfbWEpCisgICAgeworCUVNU0coXyhlX21vZGlmaWFibGUpKTsKKwlyZXR1cm47CisgICAgfQorICAgIHBhcnNlTWFya2VyKGN1cndpbik7CisKKyAgICBmb2xkQWRkTWFya2VyKHN0YXJ0LCBjdXJ3aW4tPndfcF9mbXIsIGZvbGRzdGFydG1hcmtlcmxlbik7CisgICAgZm9sZEFkZE1hcmtlcihlbmQsIGZvbGRlbmRtYXJrZXIsIGZvbGRlbmRtYXJrZXJsZW4pOworCisgICAgLyogVXBkYXRlIGJvdGggY2hhbmdlcyBoZXJlLCB0byBhdm9pZCBhbGwgZm9sZHMgYWZ0ZXIgdGhlIHN0YXJ0IGFyZQorICAgICAqIGNoYW5nZWQgd2hlbiB0aGUgc3RhcnQgbWFya2VyIGlzIGluc2VydGVkIGFuZCB0aGUgZW5kIGlzbid0LiAqLworICAgIGNoYW5nZWRfbGluZXMoc3RhcnQsIChjb2xucl9UKTAsIGVuZCwgMEwpOworfQorCisvKiBmb2xkQWRkTWFya2VyKCkge3t7MiAqLworLyoKKyAqIEFkZCAibWFya2VyW21hcmtlcmxlbl0iIGluICdjb21tZW50c3RyaW5nJyB0byBsaW5lICJsbnVtIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmb2xkQWRkTWFya2VyKGxudW0sIG1hcmtlciwgbWFya2VybGVuKQorICAgIGxpbmVucl9UCWxudW07CisgICAgY2hhcl91CSptYXJrZXI7CisgICAgaW50CQltYXJrZXJsZW47Cit7CisgICAgY2hhcl91CSpjbXMgPSBjdXJidWYtPmJfcF9jbXM7CisgICAgY2hhcl91CSpsaW5lOworICAgIGludAkJbGluZV9sZW47CisgICAgY2hhcl91CSpuZXdsaW5lOworICAgIGNoYXJfdQkqcCA9IChjaGFyX3UgKilzdHJzdHIoKGNoYXIgKiljdXJidWYtPmJfcF9jbXMsICIlcyIpOworCisgICAgLyogQWxsb2NhdGUgYSBuZXcgbGluZTogb2xkLWxpbmUgKyAnY21zJy1zdGFydCArIG1hcmtlciArICdjbXMnLWVuZCAqLworICAgIGxpbmUgPSBtbF9nZXQobG51bSk7CisgICAgbGluZV9sZW4gPSAoaW50KVNUUkxFTihsaW5lKTsKKworICAgIGlmICh1X3NhdmUobG51bSAtIDEsIGxudW0gKyAxKSA9PSBPSykKKyAgICB7CisJbmV3bGluZSA9IGFsbG9jKCh1bnNpZ25lZCkobGluZV9sZW4gKyBtYXJrZXJsZW4gKyBTVFJMRU4oY21zKSArIDEpKTsKKwlpZiAobmV3bGluZSA9PSBOVUxMKQorCSAgICByZXR1cm47CisJU1RSQ1BZKG5ld2xpbmUsIGxpbmUpOworCWlmIChwID09IE5VTEwpCisJeworCSAgICBTVFJOQ1BZKG5ld2xpbmUgKyBsaW5lX2xlbiwgbWFya2VyLCBtYXJrZXJsZW4pOworCSAgICBuZXdsaW5lW2xpbmVfbGVuICsgbWFya2VybGVuXSA9IE5VTDsKKwl9CisJZWxzZQorCXsKKwkgICAgU1RSQ1BZKG5ld2xpbmUgKyBsaW5lX2xlbiwgY21zKTsKKwkgICAgU1RSTkNQWShuZXdsaW5lICsgbGluZV9sZW4gKyAocCAtIGNtcyksIG1hcmtlciwgbWFya2VybGVuKTsKKwkgICAgU1RSQ1BZKG5ld2xpbmUgKyBsaW5lX2xlbiArIChwIC0gY21zKSArIG1hcmtlcmxlbiwgcCArIDIpOworCX0KKworCW1sX3JlcGxhY2UobG51bSwgbmV3bGluZSwgRkFMU0UpOworICAgIH0KK30KKworLyogZGVsZXRlRm9sZE1hcmtlcnMoKSB7e3syICovCisvKgorICogRGVsZXRlIHRoZSBtYXJrZXJzIGZvciBhIGZvbGQsIGNhdXNpbmcgaXQgdG8gYmUgZGVsZXRlZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitkZWxldGVGb2xkTWFya2VycyhmcCwgcmVjdXJzaXZlLCBsbnVtX29mZikKKyAgICBmb2xkX1QJKmZwOworICAgIGludAkJcmVjdXJzaXZlOworICAgIGxpbmVucl9UCWxudW1fb2ZmOwkvKiBvZmZzZXQgZm9yIGZwLT5mZF90b3AgKi8KK3sKKyAgICBpbnQJCWk7CisKKyAgICBpZiAocmVjdXJzaXZlKQorCWZvciAoaSA9IDA7IGkgPCBmcC0+ZmRfbmVzdGVkLmdhX2xlbjsgKytpKQorCSAgICBkZWxldGVGb2xkTWFya2VycygoZm9sZF9UICopZnAtPmZkX25lc3RlZC5nYV9kYXRhICsgaSwgVFJVRSwKKwkJCQkJCSAgICAgICBsbnVtX29mZiArIGZwLT5mZF90b3ApOworICAgIGZvbGREZWxNYXJrZXIoZnAtPmZkX3RvcCArIGxudW1fb2ZmLCBjdXJ3aW4tPndfcF9mbXIsIGZvbGRzdGFydG1hcmtlcmxlbik7CisgICAgZm9sZERlbE1hcmtlcihmcC0+ZmRfdG9wICsgbG51bV9vZmYgKyBmcC0+ZmRfbGVuIC0gMSwKKwkJCQkJICAgICBmb2xkZW5kbWFya2VyLCBmb2xkZW5kbWFya2VybGVuKTsKK30KKworLyogZm9sZERlbE1hcmtlcigpIHt7ezIgKi8KKy8qCisgKiBEZWxldGUgbWFya2VyICJtYXJrZXJbbWFya2VybGVuXSIgYXQgdGhlIGVuZCBvZiBsaW5lICJsbnVtIi4KKyAqIERlbGV0ZSAnY29tbWVudHN0cmluZycgaWYgaXQgbWF0Y2hlcy4KKyAqIElmIHRoZSBtYXJrZXIgaXMgbm90IGZvdW5kLCB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgQ291bGQgYSBtaXNzaW5nCisgKiBjbG9zZS1tYXJrZXIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZm9sZERlbE1hcmtlcihsbnVtLCBtYXJrZXIsIG1hcmtlcmxlbikKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGNoYXJfdQkqbWFya2VyOworICAgIGludAkJbWFya2VybGVuOworeworICAgIGNoYXJfdQkqbGluZTsKKyAgICBjaGFyX3UJKm5ld2xpbmU7CisgICAgY2hhcl91CSpwOworICAgIGludAkJbGVuOworICAgIGNoYXJfdQkqY21zID0gY3VyYnVmLT5iX3BfY21zOworICAgIGNoYXJfdQkqY21zMjsKKworICAgIGxpbmUgPSBtbF9nZXQobG51bSk7CisgICAgZm9yIChwID0gbGluZTsgKnAgIT0gTlVMOyArK3ApCisJaWYgKFNUUk5DTVAocCwgbWFya2VyLCBtYXJrZXJsZW4pID09IDApCisJeworCSAgICAvKiBGb3VuZCB0aGUgbWFya2VyLCBpbmNsdWRlIGEgZGlnaXQgaWYgaXQncyB0aGVyZS4gKi8KKwkgICAgbGVuID0gbWFya2VybGVuOworCSAgICBpZiAoVklNX0lTRElHSVQocFtsZW5dKSkKKwkJKytsZW47CisJICAgIGlmICgqY21zICE9IE5VTCkKKwkgICAgeworCQkvKiBBbHNvIGRlbGV0ZSAnY29tbWVudHN0cmluZycgaWYgaXQgbWF0Y2hlcy4gKi8KKwkJY21zMiA9IChjaGFyX3UgKilzdHJzdHIoKGNoYXIgKiljbXMsICIlcyIpOworCQlpZiAocCAtIGxpbmUgPj0gY21zMiAtIGNtcworCQkJJiYgU1RSTkNNUChwIC0gKGNtczIgLSBjbXMpLCBjbXMsIGNtczIgLSBjbXMpID09IDAKKwkJCSYmIFNUUk5DTVAocCArIGxlbiwgY21zMiArIDIsIFNUUkxFTihjbXMyICsgMikpID09IDApCisJCXsKKwkJICAgIHAgLT0gY21zMiAtIGNtczsKKwkJICAgIGxlbiArPSAoaW50KVNUUkxFTihjbXMpIC0gMjsKKwkJfQorCSAgICB9CisJICAgIGlmICh1X3NhdmUobG51bSAtIDEsIGxudW0gKyAxKSA9PSBPSykKKwkgICAgeworCQkvKiBNYWtlIG5ldyBsaW5lOiB0ZXh0LWJlZm9yZS1tYXJrZXIgKyB0ZXh0LWFmdGVyLW1hcmtlciAqLworCQluZXdsaW5lID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4obGluZSkgLSBsZW4gKyAxKSk7CisJCWlmIChuZXdsaW5lICE9IE5VTEwpCisJCXsKKwkJICAgIFNUUk5DUFkobmV3bGluZSwgbGluZSwgcCAtIGxpbmUpOworCQkgICAgU1RSQ1BZKG5ld2xpbmUgKyAocCAtIGxpbmUpLCBwICsgbGVuKTsKKwkJICAgIG1sX3JlcGxhY2UobG51bSwgbmV3bGluZSwgRkFMU0UpOworCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorfQorCisvKiBmb2xkdGV4dF9jbGVhbnVwKCkge3t7MiAqLworLyoKKyAqIFJlbW92ZSAnZm9sZG1hcmtlcicgYW5kICdjb21tZW50c3RyaW5nJyBmcm9tICJzdHIiIChpbi1wbGFjZSkuCisgKi8KKyAgICB2b2lkCitmb2xkdGV4dF9jbGVhbnVwKHN0cikKKyAgICBjaGFyX3UJKnN0cjsKK3sKKyAgICBjaGFyX3UJKmNtc19zdGFydDsJLyogZmlyc3QgcGFydCBvciB0aGUgd2hvbGUgY29tbWVudCAqLworICAgIGludAkJY21zX3NsZW4gPSAwOwkvKiBsZW5ndGggb2YgY21zX3N0YXJ0ICovCisgICAgY2hhcl91CSpjbXNfZW5kOwkvKiBsYXN0IHBhcnQgb2YgdGhlIGNvbW1lbnQgb3IgTlVMTCAqLworICAgIGludAkJY21zX2VsZW4gPSAwOwkvKiBsZW5ndGggb2YgY21zX2VuZCAqLworICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWRpZDEgPSBGQUxTRTsKKyAgICBpbnQJCWRpZDIgPSBGQUxTRTsKKworICAgIC8qIElnbm9yZSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSBpbiAnY29tbWVudHN0cmluZycuICovCisgICAgY21zX3N0YXJ0ID0gc2tpcHdoaXRlKGN1cmJ1Zi0+Yl9wX2Ntcyk7CisgICAgY21zX3NsZW4gPSBTVFJMRU4oY21zX3N0YXJ0KTsKKyAgICB3aGlsZSAoY21zX3NsZW4gPiAwICYmIHZpbV9pc3doaXRlKGNtc19zdGFydFtjbXNfc2xlbiAtIDFdKSkKKwktLWNtc19zbGVuOworCisgICAgLyogbG9jYXRlICIlcyIgaW4gJ2NvbW1lbnRzdHJpbmcnLCB1c2UgdGhlIHBhcnQgYmVmb3JlIGFuZCBhZnRlciBpdC4gKi8KKyAgICBjbXNfZW5kID0gKGNoYXJfdSAqKXN0cnN0cigoY2hhciAqKWNtc19zdGFydCwgIiVzIik7CisgICAgaWYgKGNtc19lbmQgIT0gTlVMTCkKKyAgICB7CisJY21zX2VsZW4gPSBjbXNfc2xlbiAtIChjbXNfZW5kIC0gY21zX3N0YXJ0KTsKKwljbXNfc2xlbiA9IGNtc19lbmQgLSBjbXNfc3RhcnQ7CisKKwkvKiBleGNsdWRlIHdoaXRlIHNwYWNlIGJlZm9yZSAiJXMiICovCisJd2hpbGUgKGNtc19zbGVuID4gMCAmJiB2aW1faXN3aGl0ZShjbXNfc3RhcnRbY21zX3NsZW4gLSAxXSkpCisJICAgIC0tY21zX3NsZW47CisKKwkvKiBza2lwICIlcyIgYW5kIHdoaXRlIHNwYWNlIGFmdGVyIGl0ICovCisJcyA9IHNraXB3aGl0ZShjbXNfZW5kICsgMik7CisJY21zX2VsZW4gLT0gcyAtIGNtc19lbmQ7CisJY21zX2VuZCA9IHM7CisgICAgfQorICAgIHBhcnNlTWFya2VyKGN1cndpbik7CisKKyAgICBmb3IgKHMgPSBzdHI7ICpzICE9IE5VTDsgKQorICAgIHsKKwlsZW4gPSAwOworCWlmIChTVFJOQ01QKHMsIGN1cndpbi0+d19wX2ZtciwgZm9sZHN0YXJ0bWFya2VybGVuKSA9PSAwKQorCXsKKwkgICAgbGVuID0gZm9sZHN0YXJ0bWFya2VybGVuOworCSAgICBpZiAoVklNX0lTRElHSVQoc1tsZW5dKSkKKwkJKytsZW47CisJfQorCWVsc2UgaWYgKFNUUk5DTVAocywgZm9sZGVuZG1hcmtlciwgZm9sZGVuZG1hcmtlcmxlbikgPT0gMCkKKwl7CisJICAgIGxlbiA9IGZvbGRlbmRtYXJrZXJsZW47CisJICAgIGlmIChWSU1fSVNESUdJVChzW2xlbl0pKQorCQkrK2xlbjsKKwl9CisJZWxzZSBpZiAoY21zX2VuZCAhPSBOVUxMKQorCXsKKwkgICAgaWYgKCFkaWQxICYmIFNUUk5DTVAocywgY21zX3N0YXJ0LCBjbXNfc2xlbikgPT0gMCkKKwkgICAgeworCQlsZW4gPSBjbXNfc2xlbjsKKwkJZGlkMSA9IFRSVUU7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoIWRpZDIgJiYgU1RSTkNNUChzLCBjbXNfZW5kLCBjbXNfZWxlbikgPT0gMCkKKwkgICAgeworCQlsZW4gPSBjbXNfZWxlbjsKKwkJZGlkMiA9IFRSVUU7CisJICAgIH0KKwl9CisJaWYgKGxlbiAhPSAwKQorCXsKKwkgICAgd2hpbGUgKHZpbV9pc3doaXRlKHNbbGVuXSkpCisJCSsrbGVuOworCSAgICBtY2hfbWVtbW92ZShzLCBzICsgbGVuLCBTVFJMRU4ocyArIGxlbikgKyAxKTsKKwl9CisJZWxzZQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCXMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCSsrczsKKwl9CisgICAgfQorfQorCisvKiBGb2xkaW5nIGJ5IGluZGVudCwgZXhwciwgbWFya2VyIGFuZCBzeW50YXguIHt7ezEgKi8KKy8qIERlZmluZSAiZmxpbmVfVCIsIHBhc3NlZCB0byBnZXQgZm9sZCBsZXZlbCBmb3IgYSBsaW5lLiB7e3syICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHdpbl9UCSp3cDsJCS8qIHdpbmRvdyAqLworICAgIGxpbmVucl9UCWxudW07CQkvKiBjdXJyZW50IGxpbmUgbnVtYmVyICovCisgICAgbGluZW5yX1QJb2ZmOwkJLyogb2Zmc2V0IGJldHdlZW4gbG51bSBhbmQgcmVhbCBsaW5lIG51bWJlciAqLworICAgIGxpbmVucl9UCWxudW1fc2F2ZTsJLyogbGluZSBuciB1c2VkIGJ5IGZvbGRVcGRhdGVJRU1TUmVjdXJzZSgpICovCisgICAgaW50CQlsdmw7CQkvKiBjdXJyZW50IGxldmVsICgtMSBmb3IgdW5kZWZpbmVkKSAqLworICAgIGludAkJbHZsX25leHQ7CS8qIGxldmVsIHVzZWQgZm9yIG5leHQgbGluZSAqLworICAgIGludAkJc3RhcnQ7CQkvKiBudW1iZXIgb2YgZm9sZHMgdGhhdCBhcmUgZm9yY2VkIHRvIHN0YXJ0IGF0CisJCQkJICAgdGhpcyBsaW5lLiAqLworICAgIGludAkJZW5kOwkJLyogbGV2ZWwgb2YgZm9sZCB0aGF0IGlzIGZvcmNlZCB0byBlbmQgYmVsb3cKKwkJCQkgICB0aGlzIGxpbmUgKi8KKyAgICBpbnQJCWhhZF9lbmQ7CS8qIGxldmVsIG9mIGZvbGQgdGhhdCBpcyBmb3JjZWQgdG8gZW5kIGFib3ZlCisJCQkJICAgdGhpcyBsaW5lIChjb3B5IG9mICJlbmQiIG9mIHByZXYuIGxpbmUpICovCit9IGZsaW5lX1Q7CisKKy8qIEZsYWcgaXMgc2V0IHdoZW4gcmVkcmF3aW5nIGlzIG5lZWRlZC4gKi8KK3N0YXRpYyBpbnQgZm9sZF9jaGFuZ2VkOworCisvKiBGdW5jdGlvbiBkZWNsYXJhdGlvbnMuIHt7ezIgKi8KK3N0YXRpYyBsaW5lbnJfVCBmb2xkVXBkYXRlSUVNU1JlY3Vyc2UgX19BUkdTKChnYXJyYXlfVCAqZ2FwLCBpbnQgbGV2ZWwsIGxpbmVucl9UIHN0YXJ0bG51bSwgZmxpbmVfVCAqZmxwLCB2b2lkICgqZ2V0bGV2ZWwpX19BUkdTKChmbGluZV9UICopKSwgbGluZW5yX1QgYm90LCBpbnQgdG9wZmxhZ3MpKTsKK3N0YXRpYyBpbnQgZm9sZEluc2VydCBfX0FSR1MoKGdhcnJheV9UICpnYXAsIGludCBpKSk7CitzdGF0aWMgdm9pZCBmb2xkU3BsaXQgX19BUkdTKChnYXJyYXlfVCAqZ2FwLCBpbnQgaSwgbGluZW5yX1QgdG9wLCBsaW5lbnJfVCBib3QpKTsKK3N0YXRpYyB2b2lkIGZvbGRSZW1vdmUgX19BUkdTKChnYXJyYXlfVCAqZ2FwLCBsaW5lbnJfVCB0b3AsIGxpbmVucl9UIGJvdCkpOworc3RhdGljIHZvaWQgZm9sZE1lcmdlIF9fQVJHUygoZm9sZF9UICpmcDEsIGdhcnJheV9UICpnYXAsIGZvbGRfVCAqZnAyKSk7CitzdGF0aWMgdm9pZCBmb2xkbGV2ZWxJbmRlbnQgX19BUkdTKChmbGluZV9UICpmbHApKTsKKyNpZmRlZiBGRUFUX0RJRkYKK3N0YXRpYyB2b2lkIGZvbGRsZXZlbERpZmYgX19BUkdTKChmbGluZV9UICpmbHApKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgZm9sZGxldmVsRXhwciBfX0FSR1MoKGZsaW5lX1QgKmZscCkpOworc3RhdGljIHZvaWQgZm9sZGxldmVsTWFya2VyIF9fQVJHUygoZmxpbmVfVCAqZmxwKSk7CitzdGF0aWMgdm9pZCBmb2xkbGV2ZWxTeW50YXggX19BUkdTKChmbGluZV9UICpmbHApKTsKKworLyogZm9sZFVwZGF0ZUlFTVMoKSB7e3syICovCisvKgorICogVXBkYXRlIHRoZSBmb2xkaW5nIGZvciB3aW5kb3cgIndwIiwgYXQgbGVhc3QgZnJvbSBsaW5lcyAidG9wIiB0byAiYm90Ii4KKyAqIFJldHVybiBUUlVFIGlmIGFueSBmb2xkcyBkaWQgY2hhbmdlLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZvbGRVcGRhdGVJRU1TKHdwLCB0b3AsIGJvdCkKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJdG9wOworICAgIGxpbmVucl9UCWJvdDsKK3sKKyAgICBsaW5lbnJfVAlzdGFydDsKKyAgICBsaW5lbnJfVAllbmQ7CisgICAgZmxpbmVfVAlmbGluZTsKKyAgICB2b2lkCSgqZ2V0bGV2ZWwpX19BUkdTKChmbGluZV9UICopKTsKKyAgICBpbnQJCWxldmVsOworICAgIGZvbGRfVAkqZnA7CisKKyAgICAvKiBBdm9pZCBwcm9ibGVtcyB3aGVuIGJlaW5nIGNhbGxlZCByZWN1cnNpdmVseS4gKi8KKyAgICBpZiAoaW52YWxpZF90b3AgIT0gKGxpbmVucl9UKTApCisJcmV0dXJuOworCisgICAgaWYgKHdwLT53X2ZvbGRpbnZhbGlkKQorICAgIHsKKwkvKiBOZWVkIHRvIHVwZGF0ZSBhbGwgZm9sZHMuICovCisJdG9wID0gMTsKKwlib3QgPSB3cC0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudDsKKwl3cC0+d19mb2xkaW52YWxpZCA9IEZBTFNFOworCisJLyogTWFyayBhbGwgZm9sZHMgYSBtYXliZS1zbWFsbC4gKi8KKwlzZXRTbWFsbE1heWJlKCZ3cC0+d19mb2xkcyk7CisgICAgfQorCisjaWZkZWYgRkVBVF9ESUZGCisgICAgLyogYWRkIHRoZSBjb250ZXh0IGZvciAiZGlmZiIgZm9sZGluZyAqLworICAgIGlmIChmb2xkbWV0aG9kSXNEaWZmKHdwKSkKKyAgICB7CisJaWYgKHRvcCA+IGRpZmZfY29udGV4dCkKKwkgICAgdG9wIC09IGRpZmZfY29udGV4dDsKKwllbHNlCisJICAgIHRvcCA9IDE7CisJYm90ICs9IGRpZmZfY29udGV4dDsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIFdoZW4gZGVsZXRpbmcgbGluZXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICJ0b3AiIGNhbiBiZSBwYXN0IHRoZSBlbmQKKyAgICAgKiBvZiB0aGUgYnVmZmVyLiAqLworICAgIGlmICh0b3AgPiB3cC0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudCkKKwl0b3AgPSB3cC0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudDsKKworICAgIGZvbGRfY2hhbmdlZCA9IEZBTFNFOworICAgIGZsaW5lLndwID0gd3A7CisgICAgZmxpbmUub2ZmID0gMDsKKyAgICBmbGluZS5sdmwgPSAwOworICAgIGZsaW5lLmx2bF9uZXh0ID0gLTE7CisgICAgZmxpbmUuc3RhcnQgPSAwOworICAgIGZsaW5lLmVuZCA9IE1BWF9MRVZFTCArIDE7CisgICAgZmxpbmUuaGFkX2VuZCA9IE1BWF9MRVZFTCArIDE7CisKKyAgICBpbnZhbGlkX3RvcCA9IHRvcDsKKyAgICBpbnZhbGlkX2JvdCA9IGJvdDsKKworICAgIGlmIChmb2xkbWV0aG9kSXNNYXJrZXIod3ApKQorICAgIHsKKwlnZXRsZXZlbCA9IGZvbGRsZXZlbE1hcmtlcjsKKworCS8qIEluaXQgbWFya2VyIHZhcmlhYmxlcyB0byBzcGVlZCB1cCBmb2xkbGV2ZWxNYXJrZXIoKS4gKi8KKwlwYXJzZU1hcmtlcih3cCk7CisKKwkvKiBOZWVkIHRvIGdldCB0aGUgbGV2ZWwgb2YgdGhlIGxpbmUgYWJvdmUgdG9wLCBpdCBpcyB1c2VkIGlmIHRoZXJlIGlzCisJICogbm8gbWFya2VyIGF0IHRoZSB0b3AuICovCisJaWYgKHRvcCA+IDEpCisJeworCSAgICAvKiBHZXQgdGhlIGZvbGQgbGV2ZWwgYXQgdG9wIC0gMS4gKi8KKwkgICAgbGV2ZWwgPSBmb2xkTGV2ZWxXaW4od3AsIHRvcCAtIDEpOworCisJICAgIC8qIFRoZSBmb2xkIG1heSBlbmQganVzdCBhYm92ZSB0aGUgdG9wLCBjaGVjayBmb3IgdGhhdC4gKi8KKwkgICAgZmxpbmUubG51bSA9IHRvcCAtIDE7CisJICAgIGZsaW5lLmx2bCA9IGxldmVsOworCSAgICBnZXRsZXZlbCgmZmxpbmUpOworCisJICAgIC8qIElmIGEgZm9sZCBzdGFydGVkIGhlcmUsIHdlIGFscmVhZHkgaGFkIHRoZSBsZXZlbCwgaWYgaXQgc3RvcHMKKwkgICAgICogaGVyZSwgd2UgbmVlZCB0byB1c2UgbHZsX25leHQuICBDb3VsZCBhbHNvIHN0YXJ0IGFuZCBlbmQgYSBmb2xkCisJICAgICAqIGluIHRoZSBzYW1lIGxpbmUuICovCisJICAgIGlmIChmbGluZS5sdmwgPiBsZXZlbCkKKwkJZmxpbmUubHZsID0gbGV2ZWwgLSAoZmxpbmUubHZsIC0gZmxpbmUubHZsX25leHQpOworCSAgICBlbHNlCisJCWZsaW5lLmx2bCA9IGZsaW5lLmx2bF9uZXh0OworCX0KKwlmbGluZS5sbnVtID0gdG9wOworCWdldGxldmVsKCZmbGluZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZmxpbmUubG51bSA9IHRvcDsKKwlpZiAoZm9sZG1ldGhvZElzRXhwcih3cCkpCisJeworCSAgICBnZXRsZXZlbCA9IGZvbGRsZXZlbEV4cHI7CisJICAgIC8qIHN0YXJ0IG9uZSBsaW5lIGJhY2ssIGJlY2F1c2UgYSAiPDEiIG1heSBpbmRpY2F0ZSB0aGUgZW5kIG9mIGEKKwkgICAgICogZm9sZCBpbiB0aGUgdG9wbGluZSAqLworCSAgICBpZiAodG9wID4gMSkKKwkJLS1mbGluZS5sbnVtOworCX0KKwllbHNlIGlmIChmb2xkbWV0aG9kSXNTeW50YXgod3ApKQorCSAgICBnZXRsZXZlbCA9IGZvbGRsZXZlbFN5bnRheDsKKyNpZmRlZiBGRUFUX0RJRkYKKwllbHNlIGlmIChmb2xkbWV0aG9kSXNEaWZmKHdwKSkKKwkgICAgZ2V0bGV2ZWwgPSBmb2xkbGV2ZWxEaWZmOworI2VuZGlmCisJZWxzZQorCSAgICBnZXRsZXZlbCA9IGZvbGRsZXZlbEluZGVudDsKKworCS8qIEJhY2t1cCB0byBhIGxpbmUgZm9yIHdoaWNoIHRoZSBmb2xkIGxldmVsIGlzIGRlZmluZWQuICBTaW5jZSBpdCdzCisJICogYWx3YXlzIGRlZmluZWQgZm9yIGxpbmUgb25lLCB3ZSB3aWxsIHN0b3AgdGhlcmUuICovCisJZmxpbmUubHZsID0gLTE7CisJZm9yICggOyAhZ290X2ludDsgLS1mbGluZS5sbnVtKQorCXsKKwkgICAgLyogUmVzZXQgbHZsX25leHQgZWFjaCB0aW1lLCBiZWNhdXNlIGl0IHdpbGwgYmUgc2V0IHRvIGEgdmFsdWUgZm9yCisJICAgICAqIHRoZSBuZXh0IGxpbmUsIGJ1dCB3ZSBzZWFyY2ggYmFja3dhcmRzIGhlcmUuICovCisJICAgIGZsaW5lLmx2bF9uZXh0ID0gLTE7CisJICAgIGdldGxldmVsKCZmbGluZSk7CisJICAgIGlmIChmbGluZS5sdmwgPj0gMCkKKwkJYnJlYWs7CisJfQorICAgIH0KKworICAgIHN0YXJ0ID0gZmxpbmUubG51bTsKKyAgICBlbmQgPSBib3Q7CisgICAgLyogRG8gYXQgbGVhc3Qgb25lIGxpbmUuICovCisgICAgaWYgKHN0YXJ0ID4gZW5kICYmIGVuZCA8IHdwLT53X2J1ZmZlci0+Yl9tbC5tbF9saW5lX2NvdW50KQorCWVuZCA9IHN0YXJ0OworICAgIHdoaWxlICghZ290X2ludCkKKyAgICB7CisJLyogQWx3YXlzIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSAoImVuZCIgY2FuIGJlIHBhc3QgdGhlIGVuZCBvZgorCSAqIHRoZSBmaWxlKS4gKi8KKwlpZiAoZmxpbmUubG51bSA+IHdwLT53X2J1ZmZlci0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSAgICBicmVhazsKKwlpZiAoZmxpbmUubG51bSA+IGVuZCkKKwl7CisJICAgIC8qIEZvciAibWFya2VyIiwgImV4cHIiICBhbmQgInN5bnRheCIgIG1ldGhvZHM6IElmIGEgY2hhbmdlIGNhdXNlZAorCSAgICAgKiBhIGZvbGQgdG8gYmUgcmVtb3ZlZCwgd2UgbmVlZCB0byBjb250aW51ZSBhdCBsZWFzdCB1bnRpbCB3aGVyZQorCSAgICAgKiBpdCBlbmRlZC4gKi8KKwkgICAgaWYgKGdldGxldmVsICE9IGZvbGRsZXZlbE1hcmtlcgorCQkgICAgJiYgZ2V0bGV2ZWwgIT0gZm9sZGxldmVsU3ludGF4CisJCSAgICAmJiBnZXRsZXZlbCAhPSBmb2xkbGV2ZWxFeHByKQorCQlicmVhazsKKwkgICAgaWYgKChzdGFydCA8PSBlbmQKKwkJCSYmIGZvbGRGaW5kKCZ3cC0+d19mb2xkcywgZW5kLCAmZnApCisJCQkmJiBmcC0+ZmRfdG9wICsgZnAtPmZkX2xlbiAtIDEgPiBlbmQpCisJCSAgICB8fCAoZmxpbmUubHZsID09IDAKKwkJCSYmIGZvbGRGaW5kKCZ3cC0+d19mb2xkcywgZmxpbmUubG51bSwgJmZwKQorCQkJJiYgZnAtPmZkX3RvcCA8IGZsaW5lLmxudW0pKQorCQllbmQgPSBmcC0+ZmRfdG9wICsgZnAtPmZkX2xlbiAtIDE7CisJICAgIGVsc2UgaWYgKGdldGxldmVsID09IGZvbGRsZXZlbFN5bnRheAorCQkgICAgJiYgZm9sZExldmVsV2luKHdwLCBmbGluZS5sbnVtKSAhPSBmbGluZS5sdmwpCisJCS8qIEZvciAic3ludGF4IiBtZXRob2Q6IENvbXBhcmUgdGhlIGZvbGRsZXZlbCB0aGF0IHRoZSBzeW50YXgKKwkJICogdGVsbHMgdXMgdG8gdGhlIGZvbGRsZXZlbCBmcm9tIHRoZSBleGlzdGluZyBmb2xkcy4gIElmIHRoZXkKKwkJICogZG9uJ3QgbWF0Y2ggY29udGludWUgdXBkYXRpbmcgZm9sZHMuICovCisJCWVuZCA9IGZsaW5lLmxudW07CisJICAgIGVsc2UKKwkJYnJlYWs7CisJfQorCisJLyogQSBsZXZlbCAxIGZvbGQgc3RhcnRzIGF0IGEgbGluZSB3aXRoIGZvbGRsZXZlbCA+IDAuICovCisJaWYgKGZsaW5lLmx2bCA+IDApCisJeworCSAgICBpbnZhbGlkX3RvcCA9IGZsaW5lLmxudW07CisJICAgIGludmFsaWRfYm90ID0gZW5kOworCSAgICBlbmQgPSBmb2xkVXBkYXRlSUVNU1JlY3Vyc2UoJndwLT53X2ZvbGRzLAorCQkJCSAgIDEsIHN0YXJ0LCAmZmxpbmUsIGdldGxldmVsLCBlbmQsIEZEX0xFVkVMKTsKKwkgICAgc3RhcnQgPSBmbGluZS5sbnVtOworCX0KKwllbHNlCisJeworCSAgICBpZiAoZmxpbmUubG51bSA9PSB3cC0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudCkKKwkJYnJlYWs7CisJICAgICsrZmxpbmUubG51bTsKKwkgICAgZmxpbmUubHZsID0gZmxpbmUubHZsX25leHQ7CisJICAgIGdldGxldmVsKCZmbGluZSk7CisJfQorICAgIH0KKworICAgIC8qIFRoZXJlIGNhbid0IGJlIGFueSBmb2xkcyBmcm9tIHN0YXJ0IHVudGlsIGVuZCBub3cuICovCisgICAgZm9sZFJlbW92ZSgmd3AtPndfZm9sZHMsIHN0YXJ0LCBlbmQpOworCisgICAgLyogSWYgc29tZSBmb2xkIGNoYW5nZWQsIG5lZWQgdG8gcmVkcmF3IGFuZCBwb3NpdGlvbiBjdXJzb3IuICovCisgICAgaWYgKGZvbGRfY2hhbmdlZCAmJiB3cC0+d19wX2ZlbikKKwljaGFuZ2VkX3dpbmRvd19zZXR0aW5nKCk7CisKKyAgICAvKiBJZiB3ZSB1cGRhdGVkIGZvbGRzIHBhc3QgImJvdCIsIG5lZWQgdG8gcmVkcmF3IG1vcmUgbGluZXMuICBEb24ndCBkbworICAgICAqIHRoaXMgaW4gb3RoZXIgc2l0dWF0aW9ucywgdGhlIGNoYW5nZWQgbGluZXMgd2lsbCBiZSByZWRyYXduIGFueXdheSBhbmQKKyAgICAgKiB0aGlzIG1ldGhvZCBjYW4gY2F1c2UgdGhlIHdob2xlIHdpbmRvdyB0byBiZSB1cGRhdGVkLiAqLworICAgIGlmIChlbmQgIT0gYm90KQorICAgIHsKKwlpZiAod3AtPndfcmVkcmF3X3RvcCA9PSAwIHx8IHdwLT53X3JlZHJhd190b3AgPiB0b3ApCisJICAgIHdwLT53X3JlZHJhd190b3AgPSB0b3A7CisJaWYgKHdwLT53X3JlZHJhd19ib3QgPCBlbmQpCisJICAgIHdwLT53X3JlZHJhd19ib3QgPSBlbmQ7CisgICAgfQorCisgICAgaW52YWxpZF90b3AgPSAobGluZW5yX1QpMDsKK30KKworLyogZm9sZFVwZGF0ZUlFTVNSZWN1cnNlKCkge3t7MiAqLworLyoKKyAqIFVwZGF0ZSBhIGZvbGQgdGhhdCBzdGFydHMgYXQgImZscC0+bG51bSIuICBBdCB0aGlzIGxpbmUgdGhlcmUgaXMgYWx3YXlzIGEKKyAqIHZhbGlkIGZvbGRsZXZlbCwgYW5kIGl0cyBsZXZlbCA+PSAibGV2ZWwiLgorICogImZscCIgaXMgdmFsaWQgZm9yICJmbHAtPmxudW0iIHdoZW4gY2FsbGVkIGFuZCBpdCdzIHZhbGlkIHdoZW4gcmV0dXJuaW5nLgorICogImZscC0+bG51bSIgaXMgc2V0IHRvIHRoZSBsbnVtIGp1c3QgYmVsb3cgdGhlIGZvbGQsIGlmIGl0IGVuZHMgYmVmb3JlCisgKiAiYm90IiwgaXQncyAiYm90IiBwbHVzIG9uZSBpZiB0aGUgZm9sZCBjb250aW51ZXMgYW5kIGl0J3MgYmlnZ2VyIHdoZW4gdXNpbmcKKyAqIHRoZSBtYXJrZXIgbWV0aG9kIGFuZCBhIHRleHQgY2hhbmdlIG1hZGUgZm9sbG93aW5nIGZvbGRzIHRvIGNoYW5nZS4KKyAqIFdoZW4gcmV0dXJuaW5nLCAiZmxwLT5sbnVtX3NhdmUiIGlzIHRoZSBsaW5lIG51bWJlciB0aGF0IHdhcyB1c2VkIHRvIGdldAorICogdGhlIGxldmVsIHdoZW4gdGhlIGxldmVsIGF0ICJmbHAtPmxudW0iIGlzIGludmFsaWQuCisgKiBSZW1vdmUgYW55IGZvbGRzIGZyb20gInN0YXJ0bG51bSIgdXAgdG8gaGVyZSBhdCB0aGlzIGxldmVsLgorICogUmVjdXJzaXZlbHkgdXBkYXRlIG5lc3RlZCBmb2xkcy4KKyAqIEJlbG93IGxpbmUgImJvdCIgdGhlcmUgYXJlIG5vIGNoYW5nZXMgaW4gdGhlIHRleHQuCisgKiAiZmxwLT5sbnVtIiwgImZscC0+bG51bV9zYXZlIiBhbmQgImJvdCIgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUKKyAqIG91dGVyIGZvbGQuCisgKiAiZmxwLT5vZmYiIGlzIHRoZSBvZmZzZXQgdG8gdGhlIHJlYWwgbGluZSBudW1iZXIgaW4gdGhlIGJ1ZmZlci4KKyAqCisgKiBBbGwgdGhpcyB3b3VsZCBiZSBhIGxvdCBzaW1wbGVyIGlmIGFsbCBmb2xkcyBpbiB0aGUgcmFuZ2Ugd291bGQgYmUgZGVsZXRlZAorICogYW5kIHRoZW4gY3JlYXRlZCBhZ2Fpbi4gIEJ1dCB3ZSB3b3VsZCBsb29zZSBhbGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgKiBmb2xkcywgZXZlbiB3aGVuIG1ha2luZyBjaGFuZ2VzIHRoYXQgZG9uJ3QgYWZmZWN0IHRoZSBmb2xkaW5nIChlLmcuICJ2an4iKS4KKyAqCisgKiBSZXR1cm5zIGJvdCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBpbmNyZWFzZWQgZm9yIGxpbmVzIHRoYXQgYWxzbyBuZWVkIHRvIGJlCisgKiB1cGRhdGVkIGFzIGEgcmVzdWx0IG9mIGEgZGV0ZWN0ZWQgY2hhbmdlIGluIHRoZSBmb2xkLgorICovCisgICAgc3RhdGljIGxpbmVucl9UCitmb2xkVXBkYXRlSUVNU1JlY3Vyc2UoZ2FwLCBsZXZlbCwgc3RhcnRsbnVtLCBmbHAsIGdldGxldmVsLCBib3QsIHRvcGZsYWdzKQorICAgIGdhcnJheV9UCSpnYXA7CisgICAgaW50CQlsZXZlbDsKKyAgICBsaW5lbnJfVAlzdGFydGxudW07CisgICAgZmxpbmVfVAkqZmxwOworICAgIHZvaWQJKCpnZXRsZXZlbClfX0FSR1MoKGZsaW5lX1QgKikpOworICAgIGxpbmVucl9UCWJvdDsKKyAgICBpbnQJCXRvcGZsYWdzOwkvKiBmbGFncyB1c2VkIGJ5IGNvbnRhaW5pbmcgZm9sZCAqLworeworICAgIGxpbmVucl9UCWxsOworICAgIGZvbGRfVAkqZnAgPSBOVUxMOworICAgIGZvbGRfVAkqZnAyOworICAgIGludAkJbHZsID0gbGV2ZWw7CisgICAgbGluZW5yX1QJc3RhcnRsbnVtMiA9IHN0YXJ0bG51bTsKKyAgICBsaW5lbnJfVAlmaXJzdGxudW0gPSBmbHAtPmxudW07CS8qIGZpcnN0IGxudW0gd2UgZ290ICovCisgICAgaW50CQlpOworICAgIGludAkJZmluaXNoID0gRkFMU0U7CisgICAgbGluZW5yX1QJbGluZWNvdW50ID0gZmxwLT53cC0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudCAtIGZscC0+b2ZmOworICAgIGludAkJY29uY2F0OworCisgICAgLyoKKyAgICAgKiBJZiB1c2luZyB0aGUgbWFya2VyIG1ldGhvZCwgdGhlIHN0YXJ0IGxpbmUgaXMgbm90IHRoZSBzdGFydCBvZiBhIGZvbGQKKyAgICAgKiBhdCB0aGUgbGV2ZWwgd2UncmUgZGVhbGluZyB3aXRoIGFuZCB0aGUgbGV2ZWwgaXMgbm9uLXplcm8sIHdlIG11c3QgdXNlCisgICAgICogdGhlIHByZXZpb3VzIGZvbGQuICBCdXQgaWdub3JlIGEgZm9sZCB0aGF0IHN0YXJ0cyBhdCBvciBiZWxvdworICAgICAqIHN0YXJ0bG51bSwgaXQgbXVzdCBiZSBkZWxldGVkLgorICAgICAqLworICAgIGlmIChnZXRsZXZlbCA9PSBmb2xkbGV2ZWxNYXJrZXIgJiYgZmxwLT5zdGFydCA8PSBmbHAtPmx2bCAtIGxldmVsCisJCQkJCQkJICAgICAgJiYgZmxwLT5sdmwgPiAwKQorICAgIHsKKwlmb2xkRmluZChnYXAsIHN0YXJ0bG51bSAtIDEsICZmcCk7CisJaWYgKGZwID49ICgoZm9sZF9UICopZ2FwLT5nYV9kYXRhKSArIGdhcC0+Z2FfbGVuCisJCQkJCQkgICB8fCBmcC0+ZmRfdG9wID49IHN0YXJ0bG51bSkKKwkgICAgZnAgPSBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogTG9vcCBvdmVyIGFsbCBsaW5lcyBpbiB0aGlzIGZvbGQsIG9yIHVudGlsICJib3QiIGlzIGhpdC4KKyAgICAgKiBIYW5kbGUgbmVzdGVkIGZvbGRzIGluc2lkZSBvZiB0aGlzIGZvbGQuCisgICAgICogImZscC0+bG51bSIgaXMgdGhlIGN1cnJlbnQgbGluZS4gIFdoZW4gZmluZGluZyB0aGUgZW5kIG9mIHRoZSBmb2xkLCBpdAorICAgICAqIGlzIGp1c3QgYmVsb3cgdGhlIGVuZCBvZiB0aGUgZm9sZC4KKyAgICAgKiAiKmZscCIgY29udGFpbnMgdGhlIGxldmVsIG9mIHRoZSBsaW5lICJmbHAtPmxudW0iIG9yIGEgZm9sbG93aW5nIG9uZSBpZgorICAgICAqIHRoZXJlIGFyZSBsaW5lcyB3aXRoIGFuIGludmFsaWQgZm9sZCBsZXZlbC4gICJmbHAtPmxudW1fc2F2ZSIgaXMgdGhlCisgICAgICogbGluZSBudW1iZXIgdGhhdCB3YXMgdXNlZCB0byBnZXQgdGhlIGZvbGQgbGV2ZWwgKGJlbG93ICJmbHAtPmxudW0iIHdoZW4KKyAgICAgKiBpdCBoYXMgYW4gaW52YWxpZCBmb2xkIGxldmVsKS4gIFdoZW4gY2FsbGVkIHRoZSBmb2xkIGxldmVsIGlzIGFsd2F5cworICAgICAqIHZhbGlkLCB0aHVzICJmbHAtPmxudW1fc2F2ZSIgaXMgZXF1YWwgdG8gImZscC0+bG51bSIuCisgICAgICovCisgICAgZmxwLT5sbnVtX3NhdmUgPSBmbHAtPmxudW07CisgICAgd2hpbGUgKCFnb3RfaW50KQorICAgIHsKKwkvKiBVcGRhdGluZyBmb2xkcyBjYW4gYmUgc2xvdywgY2hlY2sgZm9yIENUUkwtQy4gKi8KKwlsaW5lX2JyZWFrY2hlY2soKTsKKworCS8qIFNldCAibHZsIiB0byB0aGUgbGV2ZWwgb2YgbGluZSAiZmxwLT5sbnVtIi4gIFdoZW4gZmxwLT5zdGFydCBpcyBzZXQKKwkgKiBhbmQgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZvbGQsIHNldCB0aGUgbGV2ZWwgdG8gemVybyB0bworCSAqIGZvcmNlIHRoZSBmb2xkIHRvIGVuZC4gIERvIHRoZSBzYW1lIHdoZW4gaGFkX2VuZCBpcyBzZXQ6IFByZXZpb3VzCisJICogbGluZSB3YXMgbWFya2VkIGFzIGVuZCBvZiBhIGZvbGQuICovCisJbHZsID0gZmxwLT5sdmw7CisJaWYgKGx2bCA+IE1BWF9MRVZFTCkKKwkgICAgbHZsID0gTUFYX0xFVkVMOworCWlmIChmbHAtPmxudW0gPiBmaXJzdGxudW0KKwkJJiYgKGxldmVsID4gbHZsIC0gZmxwLT5zdGFydCB8fCBsZXZlbCA+PSBmbHAtPmhhZF9lbmQpKQorCSAgICBsdmwgPSAwOworCisJaWYgKGZscC0+bG51bSA+IGJvdCAmJiAhZmluaXNoICYmIGZwICE9IE5VTEwpCisJeworCSAgICAvKiBGb3IgIm1hcmtlciIgYW5kICJzeW50YXgiIG1ldGhvZHM6CisJICAgICAqIC0gSWYgYSBjaGFuZ2UgY2F1c2VkIGEgbmVzdGVkIGZvbGQgdG8gYmUgcmVtb3ZlZCwgd2UgbmVlZCB0bworCSAgICAgKiAgIGRlbGV0ZSBpdCBhbmQgY29udGludWUgYXQgbGVhc3QgdW50aWwgd2hlcmUgaXQgZW5kZWQuCisJICAgICAqIC0gSWYgYSBjaGFuZ2UgY2F1c2VkIGEgbmVzdGVkIGZvbGQgdG8gYmUgY3JlYXRlZCwgb3IgdGhpcyBmb2xkCisJICAgICAqICAgdG8gY29udGludWUgYmVsb3cgaXRzIG9yaWdpbmFsIGVuZCwgbmVlZCB0byBmaW5pc2ggdGhpcyBmb2xkLgorCSAgICAgKi8KKwkgICAgaWYgKGdldGxldmVsICE9IGZvbGRsZXZlbE1hcmtlcgorCQkgICAgJiYgZ2V0bGV2ZWwgIT0gZm9sZGxldmVsRXhwcgorCQkgICAgJiYgZ2V0bGV2ZWwgIT0gZm9sZGxldmVsU3ludGF4KQorCQlicmVhazsKKwkgICAgaSA9IDA7CisJICAgIGZwMiA9IGZwOworCSAgICBpZiAobHZsID49IGxldmVsKQorCSAgICB7CisJCS8qIENvbXB1dGUgaG93IGRlZXAgdGhlIGZvbGRzIGN1cnJlbnRseSBhcmUsIGlmIGl0J3MgZGVlcGVyCisJCSAqIHRoYW4gImx2bCIgdGhlbiBzb21lIG11c3QgYmUgZGVsZXRlZCwgbmVlZCB0byB1cGRhdGUKKwkJICogYXQgbGVhc3Qgb25lIG5lc3RlZCBmb2xkLiAqLworCQlsbCA9IGZscC0+bG51bSAtIGZwLT5mZF90b3A7CisJCXdoaWxlIChmb2xkRmluZCgmZnAyLT5mZF9uZXN0ZWQsIGxsLCAmZnAyKSkKKwkJeworCQkgICAgKytpOworCQkgICAgbGwgLT0gZnAyLT5mZF90b3A7CisJCX0KKwkgICAgfQorCSAgICBpZiAobHZsIDwgbGV2ZWwgKyBpKQorCSAgICB7CisJCWZvbGRGaW5kKCZmcC0+ZmRfbmVzdGVkLCBmbHAtPmxudW0gLSBmcC0+ZmRfdG9wLCAmZnAyKTsKKwkJaWYgKGZwMiAhPSBOVUxMKQorCQkgICAgYm90ID0gZnAyLT5mZF90b3AgKyBmcDItPmZkX2xlbiAtIDEgKyBmcC0+ZmRfdG9wOworCSAgICB9CisJICAgIGVsc2UgaWYgKGZwLT5mZF90b3AgKyBmcC0+ZmRfbGVuIDw9IGZscC0+bG51bSAmJiBsdmwgPj0gbGV2ZWwpCisJCWZpbmlzaCA9IFRSVUU7CisJICAgIGVsc2UKKwkJYnJlYWs7CisJfQorCisJLyogQXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBuZXN0ZWQgZm9sZCBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudAorCSAqIGZvbGQ6IGNoZWNrIGlmIGV4aXN0aW5nIGZvbGRzIGF0IHRoaXMgbGV2ZWwsIGJlZm9yZSB0aGUgY3VycmVudAorCSAqIG9uZSwgbmVlZCB0byBiZSBkZWxldGVkIG9yIHRydW5jYXRlZC4gKi8KKwlpZiAoZnAgPT0gTlVMTAorCQkmJiAobHZsICE9IGxldmVsCisJCSAgICB8fCBmbHAtPmxudW1fc2F2ZSA+PSBib3QKKwkJICAgIHx8IGZscC0+c3RhcnQgIT0gMAorCQkgICAgfHwgZmxwLT5oYWRfZW5kIDw9IE1BWF9MRVZFTAorCQkgICAgfHwgZmxwLT5sbnVtID09IGxpbmVjb3VudCkpCisJeworCSAgICAvKgorCSAgICAgKiBSZW1vdmUgb3IgdXBkYXRlIGZvbGRzIHRoYXQgaGF2ZSBsaW5lcyBiZXR3ZWVuIHN0YXJ0bG51bSBhbmQKKwkgICAgICogZmlyc3RsbnVtLgorCSAgICAgKi8KKwkgICAgd2hpbGUgKCFnb3RfaW50KQorCSAgICB7CisJCS8qIHNldCBjb25jYXQgdG8gMSBpZiBpdCdzIGFsbG93ZWQgdG8gY29uY2F0ZW5hdGVkIHRoaXMgZm9sZAorCQkgKiB3aXRoIGEgcHJldmlvdXMgb25lIHRoYXQgdG91Y2hlcyBpdC4gKi8KKwkJaWYgKGZscC0+c3RhcnQgIT0gMCB8fCBmbHAtPmhhZF9lbmQgPD0gTUFYX0xFVkVMKQorCQkgICAgY29uY2F0ID0gMDsKKwkJZWxzZQorCQkgICAgY29uY2F0ID0gMTsKKworCQkvKiBGaW5kIGFuIGV4aXN0aW5nIGZvbGQgdG8gcmUtdXNlLiAgUHJlZmVyYWJseSBvbmUgdGhhdAorCQkgKiBpbmNsdWRlcyBzdGFydGxudW0sIG90aGVyd2lzZSBvbmUgdGhhdCBlbmRzIGp1c3QgYmVmb3JlCisJCSAqIHN0YXJ0bG51bSBvciBzdGFydHMgYWZ0ZXIgaXQuICovCisJCWlmIChmb2xkRmluZChnYXAsIHN0YXJ0bG51bSwgJmZwKQorCQkJfHwgKGZwIDwgKChmb2xkX1QgKilnYXAtPmdhX2RhdGEpICsgZ2FwLT5nYV9sZW4KKwkJCSAgICAmJiBmcC0+ZmRfdG9wIDw9IGZpcnN0bG51bSkKKwkJCXx8IGZvbGRGaW5kKGdhcCwgZmlyc3RsbnVtIC0gY29uY2F0LCAmZnApCisJCQl8fCAoZnAgPCAoKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSkgKyBnYXAtPmdhX2xlbgorCQkJICAgICYmICgobHZsIDwgbGV2ZWwgJiYgZnAtPmZkX3RvcCA8IGZscC0+bG51bSkKKwkJCQl8fCAobHZsID49IGxldmVsCisJCQkJCSAgICYmIGZwLT5mZF90b3AgPD0gZmxwLT5sbnVtX3NhdmUpKSkpCisJCXsKKwkJICAgIGlmIChmcC0+ZmRfdG9wICsgZnAtPmZkX2xlbiArIGNvbmNhdCA+IGZpcnN0bG51bSkKKwkJICAgIHsKKwkJCS8qIFVzZSBleGlzdGluZyBmb2xkIGZvciB0aGUgbmV3IGZvbGQuICBJZiBpdCBzdGFydHMKKwkJCSAqIGJlZm9yZSB3aGVyZSB3ZSBzdGFydGVkIGxvb2tpbmcsIGV4dGVuZCBpdC4gIElmIGl0CisJCQkgKiBzdGFydHMgYXQgYW5vdGhlciBsaW5lLCB1cGRhdGUgbmVzdGVkIGZvbGRzIHRvIGtlZXAKKwkJCSAqIHRoZWlyIHBvc2l0aW9uLCBjb21wZW5zYXRpbmcgZm9yIHRoZSBuZXcgZmRfdG9wLiAqLworCQkJaWYgKGZwLT5mZF90b3AgPj0gc3RhcnRsbnVtICYmIGZwLT5mZF90b3AgIT0gZmlyc3RsbnVtKQorCQkJeworCQkJICAgIGlmIChmcC0+ZmRfdG9wID4gZmlyc3RsbnVtKQorCQkJCS8qIGxpa2UgbGluZXMgYXJlIGluc2VydGVkICovCisJCQkJZm9sZE1hcmtBZGp1c3RSZWN1cnNlKCZmcC0+ZmRfbmVzdGVkLAorCQkJCQkobGluZW5yX1QpMCwgKGxpbmVucl9UKU1BWExOVU0sCisJCQkJCShsb25nKShmcC0+ZmRfdG9wIC0gZmlyc3RsbnVtKSwgMEwpOworCQkJICAgIGVsc2UKKwkJCQkvKiBsaWtlIGxpbmVzIGFyZSBkZWxldGVkICovCisJCQkJZm9sZE1hcmtBZGp1c3RSZWN1cnNlKCZmcC0+ZmRfbmVzdGVkLAorCQkJCQkobGluZW5yX1QpMCwKKwkJCQkJKGxvbmcpKGZpcnN0bG51bSAtIGZwLT5mZF90b3AgLSAxKSwKKwkJCQkJKGxpbmVucl9UKU1BWExOVU0sCisJCQkJCShsb25nKShmcC0+ZmRfdG9wIC0gZmlyc3RsbnVtKSk7CisJCQkgICAgZnAtPmZkX2xlbiArPSBmcC0+ZmRfdG9wIC0gZmlyc3RsbnVtOworCQkJICAgIGZwLT5mZF90b3AgPSBmaXJzdGxudW07CisJCQkgICAgZm9sZF9jaGFuZ2VkID0gVFJVRTsKKwkJCX0KKwkJCWVsc2UgaWYgKGZscC0+c3RhcnQgIT0gMCAmJiBsdmwgPT0gbGV2ZWwKKwkJCQkJCSAgICYmIGZwLT5mZF90b3AgIT0gZmlyc3RsbnVtKQorCQkJeworCQkJICAgIC8qIEV4aXN0aW5nIGZvbGQgdGhhdCBpbmNsdWRlcyBzdGFydGxudW0gbXVzdCBzdG9wCisJCQkgICAgICogaWYgd2UgZmluZCB0aGUgc3RhcnQgb2YgYSBuZXcgZm9sZCBhdCB0aGUgc2FtZQorCQkJICAgICAqIGxldmVsLiAgU3BsaXQgaXQuICBEZWxldGUgY29udGFpbmVkIGZvbGRzIGF0CisJCQkgICAgICogdGhpcyBwb2ludCB0byBzcGxpdCB0aGVtIHRvby4gKi8KKwkJCSAgICBmb2xkUmVtb3ZlKCZmcC0+ZmRfbmVzdGVkLCBmbHAtPmxudW0gLSBmcC0+ZmRfdG9wLAorCQkJCQkJICAgICAgZmxwLT5sbnVtIC0gZnAtPmZkX3RvcCk7CisJCQkgICAgaSA9IChpbnQpKGZwIC0gKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSk7CisJCQkgICAgZm9sZFNwbGl0KGdhcCwgaSwgZmxwLT5sbnVtLCBmbHAtPmxudW0gLSAxKTsKKwkJCSAgICBmcCA9IChmb2xkX1QgKilnYXAtPmdhX2RhdGEgKyBpICsgMTsKKwkJCSAgICAvKiBJZiB1c2luZyB0aGUgIm1hcmtlciIgb3IgInN5bnRheCIgbWV0aG9kLCB3ZQorCQkJICAgICAqIG5lZWQgdG8gY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgZm9sZCBpcworCQkJICAgICAqIGZvdW5kLiAqLworCQkJICAgIGlmIChnZXRsZXZlbCA9PSBmb2xkbGV2ZWxNYXJrZXIKKwkJCQkgICAgfHwgZ2V0bGV2ZWwgPT0gZm9sZGxldmVsRXhwcgorCQkJCSAgICB8fCBnZXRsZXZlbCA9PSBmb2xkbGV2ZWxTeW50YXgpCisJCQkJZmluaXNoID0gVFJVRTsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAgaWYgKGZwLT5mZF90b3AgPj0gc3RhcnRsbnVtKQorCQkgICAgeworCQkJLyogQSBmb2xkIHRoYXQgc3RhcnRzIGF0IG9yIGFmdGVyIHN0YXJ0bG51bSBhbmQgc3RvcHMKKwkJCSAqIGJlZm9yZSB0aGUgbmV3IGZvbGQgbXVzdCBiZSBkZWxldGVkLiAgQ29udGludWUKKwkJCSAqIGxvb2tpbmcgZm9yIHRoZSBuZXh0IG9uZS4gKi8KKwkJCWRlbGV0ZUZvbGRFbnRyeShnYXAsCisJCQkJICAgICAoaW50KShmcCAtIChmb2xkX1QgKilnYXAtPmdhX2RhdGEpLCBUUlVFKTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCS8qIEEgZm9sZCBoYXMgc29tZSBsaW5lcyBhYm92ZSBzdGFydGxudW0sIHRydW5jYXRlIGl0CisJCQkgKiB0byBzdG9wIGp1c3QgYWJvdmUgc3RhcnRsbnVtLiAgKi8KKwkJCWZwLT5mZF9sZW4gPSBzdGFydGxudW0gLSBmcC0+ZmRfdG9wOworCQkJZm9sZE1hcmtBZGp1c3RSZWN1cnNlKCZmcC0+ZmRfbmVzdGVkLAorCQkJCShsaW5lbnJfVClmcC0+ZmRfbGVuLCAobGluZW5yX1QpTUFYTE5VTSwKKwkJCQkJCSAgICAgICAobGluZW5yX1QpTUFYTE5VTSwgMEwpOworCQkJZm9sZF9jaGFuZ2VkID0gVFJVRTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIC8qIEluc2VydCBuZXcgZm9sZC4gIENhcmVmdWw6IGdhX2RhdGEgbWF5IGJlIE5VTEwgYW5kIGl0CisJCSAgICAgKiBtYXkgY2hhbmdlISAqLworCQkgICAgaSA9IChpbnQpKGZwIC0gKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSk7CisJCSAgICBpZiAoZm9sZEluc2VydChnYXAsIGkpICE9IE9LKQorCQkJcmV0dXJuIGJvdDsKKwkJICAgIGZwID0gKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSArIGk7CisJCSAgICAvKiBUaGUgbmV3IGZvbGQgY29udGludWVzIHVudGlsIGJvdCwgdW5sZXNzIHdlIGZpbmQgdGhlCisJCSAgICAgKiBlbmQgZWFybGllci4gKi8KKwkJICAgIGZwLT5mZF90b3AgPSBmaXJzdGxudW07CisJCSAgICBmcC0+ZmRfbGVuID0gYm90IC0gZmlyc3RsbnVtICsgMTsKKwkJICAgIC8qIFdoZW4gdGhlIGNvbnRhaW5pbmcgZm9sZCBpcyBvcGVuLCB0aGUgbmV3IGZvbGQgaXMgb3Blbi4KKwkJICAgICAqIFRoZSBuZXcgZm9sZCBpcyBjbG9zZWQgaWYgdGhlIGZvbGQgYWJvdmUgaXQgaXMgY2xvc2VkLgorCQkgICAgICogVGhlIGZpcnN0IGZvbGQgZGVwZW5kcyBvbiB0aGUgY29udGFpbmluZyBmb2xkLiAqLworCQkgICAgaWYgKHRvcGZsYWdzID09IEZEX09QRU4pCisJCSAgICB7CisJCQlmbHAtPndwLT53X2ZvbGRfbWFudWFsID0gVFJVRTsKKwkJCWZwLT5mZF9mbGFncyA9IEZEX09QRU47CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChpIDw9IDApCisJCSAgICB7CisJCQlmcC0+ZmRfZmxhZ3MgPSB0b3BmbGFnczsKKwkJCWlmICh0b3BmbGFncyAhPSBGRF9MRVZFTCkKKwkJCSAgICBmbHAtPndwLT53X2ZvbGRfbWFudWFsID0gVFJVRTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCWZwLT5mZF9mbGFncyA9IChmcCAtIDEpLT5mZF9mbGFnczsKKwkJICAgIGZwLT5mZF9zbWFsbCA9IE1BWUJFOworCQkgICAgLyogSWYgdXNpbmcgdGhlICJtYXJrZXIiLCAiZXhwciIgb3IgInN5bnRheCIgbWV0aG9kLCB3ZQorCQkgICAgICogbmVlZCB0byBjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBmb2xkIGlzIGZvdW5kLiAqLworCQkgICAgaWYgKGdldGxldmVsID09IGZvbGRsZXZlbE1hcmtlcgorCQkJICAgIHx8IGdldGxldmVsID09IGZvbGRsZXZlbEV4cHIKKwkJCSAgICB8fCBnZXRsZXZlbCA9PSBmb2xkbGV2ZWxTeW50YXgpCisJCQlmaW5pc2ggPSBUUlVFOworCQkgICAgZm9sZF9jaGFuZ2VkID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisKKwlpZiAobHZsIDwgbGV2ZWwgfHwgZmxwLT5sbnVtID4gbGluZWNvdW50KQorCXsKKwkgICAgLyoKKwkgICAgICogRm91bmQgYSBsaW5lIHdpdGggYSBsb3dlciBmb2xkbGV2ZWwsIHRoaXMgZm9sZCBlbmRzIGp1c3QgYWJvdmUKKwkgICAgICogImZscC0+bG51bSIuCisJICAgICAqLworCSAgICBicmVhazsKKwl9CisKKwkvKgorCSAqIFRoZSBmb2xkIGluY2x1ZGVzIHRoZSBsaW5lICJmbHAtPmxudW0iIGFuZCAiZmxwLT5sbnVtX3NhdmUiLgorCSAqLworCWlmIChsdmwgPiBsZXZlbCkKKwl7CisJICAgIC8qCisJICAgICAqIFRoZXJlIGlzIGEgbmVzdGVkIGZvbGQsIGhhbmRsZSBpdCByZWN1cnNpdmVseS4KKwkgICAgICovCisJICAgIC8qIEF0IGxlYXN0IGRvIG9uZSBsaW5lIChjYW4gaGFwcGVuIHdoZW4gZmluaXNoIGlzIFRSVUUpLiAqLworCSAgICBpZiAoYm90IDwgZmxwLT5sbnVtKQorCQlib3QgPSBmbHAtPmxudW07CisKKwkgICAgLyogTGluZSBudW1iZXJzIGluIHRoZSBuZXN0ZWQgZm9sZCBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mCisJICAgICAqIHRoaXMgZm9sZC4gKi8KKwkgICAgZmxwLT5sbnVtID0gZmxwLT5sbnVtX3NhdmUgLSBmcC0+ZmRfdG9wOworCSAgICBmbHAtPm9mZiArPSBmcC0+ZmRfdG9wOworCSAgICBpID0gKGludCkoZnAgLSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhKTsKKwkgICAgYm90ID0gZm9sZFVwZGF0ZUlFTVNSZWN1cnNlKCZmcC0+ZmRfbmVzdGVkLCBsZXZlbCArIDEsCisJCQkJICAgICAgIHN0YXJ0bG51bTIgLSBmcC0+ZmRfdG9wLCBmbHAsIGdldGxldmVsLAorCQkJCQkgICAgICBib3QgLSBmcC0+ZmRfdG9wLCBmcC0+ZmRfZmxhZ3MpOworCSAgICBmcCA9IChmb2xkX1QgKilnYXAtPmdhX2RhdGEgKyBpOworCSAgICBmbHAtPmxudW0gKz0gZnAtPmZkX3RvcDsKKwkgICAgZmxwLT5sbnVtX3NhdmUgKz0gZnAtPmZkX3RvcDsKKwkgICAgZmxwLT5vZmYgLT0gZnAtPmZkX3RvcDsKKwkgICAgYm90ICs9IGZwLT5mZF90b3A7CisJICAgIHN0YXJ0bG51bTIgPSBmbHAtPmxudW07CisKKwkgICAgLyogVGhpcyBmb2xkIG1heSBlbmQgYXQgdGhlIHNhbWUgbGluZSwgZG9uJ3QgaW5jci4gZmxwLT5sbnVtLiAqLworCX0KKwllbHNlCisJeworCSAgICAvKgorCSAgICAgKiBHZXQgdGhlIGxldmVsIG9mIHRoZSBuZXh0IGxpbmUsIHRoZW4gY29udGludWUgdGhlIGxvb3AgdG8gY2hlY2sKKwkgICAgICogaWYgaXQgZW5kcyB0aGVyZS4KKwkgICAgICogU2tpcCBvdmVyIHVuZGVmaW5lZCBsaW5lcywgdG8gZmluZCB0aGUgZm9sZGxldmVsIGFmdGVyIGl0LgorCSAgICAgKiBGb3IgdGhlIGxhc3QgbGluZSBpbiB0aGUgZmlsZSB0aGUgZm9sZGxldmVsIGlzIGFsd2F5cyB2YWxpZC4KKwkgICAgICovCisJICAgIGZscC0+bG51bSA9IGZscC0+bG51bV9zYXZlOworCSAgICBsbCA9IGZscC0+bG51bSArIDE7CisJICAgIHdoaWxlICghZ290X2ludCkKKwkgICAgeworCQkvKiBNYWtlIHRoZSBwcmV2aW91cyBsZXZlbCBhdmFpbGFibGUgdG8gZm9sZGxldmVsKCkuICovCisJCXByZXZfbG51bSA9IGZscC0+bG51bTsKKwkJcHJldl9sbnVtX2x2bCA9IGZscC0+bHZsOworCisJCWlmICgrK2ZscC0+bG51bSA+IGxpbmVjb3VudCkKKwkJICAgIGJyZWFrOworCQlmbHAtPmx2bCA9IGZscC0+bHZsX25leHQ7CisJCWdldGxldmVsKGZscCk7CisJCWlmIChmbHAtPmx2bCA+PSAwIHx8IGZscC0+aGFkX2VuZCA8PSBNQVhfTEVWRUwpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBwcmV2X2xudW0gPSAwOworCSAgICBpZiAoZmxwLT5sbnVtID4gbGluZWNvdW50KQorCQlicmVhazsKKworCSAgICAvKiBsZWF2ZSBmbHAtPmxudW1fc2F2ZSB0byBsbnVtIG9mIHRoZSBsaW5lIHRoYXQgd2FzIHVzZWQgdG8gZ2V0CisJICAgICAqIHRoZSBsZXZlbCwgZmxwLT5sbnVtIHRvIHRoZSBsbnVtIG9mIHRoZSBuZXh0IGxpbmUuICovCisJICAgIGZscC0+bG51bV9zYXZlID0gZmxwLT5sbnVtOworCSAgICBmbHAtPmxudW0gPSBsbDsKKwl9CisgICAgfQorCisgICAgaWYgKGZwID09IE5VTEwpCS8qIG9ubHkgaGFwcGVucyB3aGVuIGdvdF9pbnQgaXMgc2V0ICovCisJcmV0dXJuIGJvdDsKKworICAgIC8qCisgICAgICogR2V0IGhlcmUgd2hlbjoKKyAgICAgKiBsdmwgPCBsZXZlbDogdGhlIGZvbGRzIGVuZHMganVzdCBhYm92ZSAiZmxwLT5sbnVtIgorICAgICAqIGx2bCA+PSBsZXZlbDogZm9sZCBjb250aW51ZXMgYmVsb3cgImJvdCIKKyAgICAgKi8KKworICAgIC8qIEN1cnJlbnQgZm9sZCBhdCBsZWFzdCBleHRlbmRzIHVudGlsIGxudW0uICovCisgICAgaWYgKGZwLT5mZF9sZW4gPCBmbHAtPmxudW0gLSBmcC0+ZmRfdG9wKQorICAgIHsKKwlmcC0+ZmRfbGVuID0gZmxwLT5sbnVtIC0gZnAtPmZkX3RvcDsKKwlmb2xkX2NoYW5nZWQgPSBUUlVFOworICAgIH0KKworICAgIC8qIERlbGV0ZSBjb250YWluZWQgZm9sZHMgZnJvbSB0aGUgZW5kIG9mIHRoZSBsYXN0IG9uZSBmb3VuZCB1bnRpbCB3aGVyZQorICAgICAqIHdlIHN0b3BwZWQgbG9va2luZy4gKi8KKyAgICBmb2xkUmVtb3ZlKCZmcC0+ZmRfbmVzdGVkLCBzdGFydGxudW0yIC0gZnAtPmZkX3RvcCwKKwkJCQkJCSAgZmxwLT5sbnVtIC0gMSAtIGZwLT5mZF90b3ApOworCisgICAgaWYgKGx2bCA8IGxldmVsKQorICAgIHsKKwkvKiBFbmQgb2YgZm9sZCBmb3VuZCwgdXBkYXRlIHRoZSBsZW5ndGggd2hlbiBpdCBnb3Qgc2hvcnRlci4gKi8KKwlpZiAoZnAtPmZkX2xlbiAhPSBmbHAtPmxudW0gLSBmcC0+ZmRfdG9wKQorCXsKKwkgICAgaWYgKGZwLT5mZF90b3AgKyBmcC0+ZmRfbGVuID4gYm90ICsgMSkKKwkgICAgeworCQkvKiBmb2xkIGNvbmludWVkIGJlbG93IGJvdCAqLworCQlpZiAoZ2V0bGV2ZWwgPT0gZm9sZGxldmVsTWFya2VyCisJCQl8fCBnZXRsZXZlbCA9PSBmb2xkbGV2ZWxFeHByCisJCQl8fCBnZXRsZXZlbCA9PSBmb2xkbGV2ZWxTeW50YXgpCisJCXsKKwkJICAgIC8qIG1hcmtlciBtZXRob2Q6IHRydW5jYXRlIHRoZSBmb2xkIGFuZCBtYWtlIHN1cmUgdGhlCisJCSAgICAgKiBwcmV2aW91c2x5IGluY2x1ZGVkIGxpbmVzIGFyZSBwcm9jZXNzZWQgYWdhaW4gKi8KKwkJICAgIGJvdCA9IGZwLT5mZF90b3AgKyBmcC0+ZmRfbGVuIC0gMTsKKwkJICAgIGZwLT5mZF9sZW4gPSBmbHAtPmxudW0gLSBmcC0+ZmRfdG9wOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgLyogaW5kZW50IG9yIGV4cHIgbWV0aG9kOiBzcGxpdCBmb2xkIHRvIGNyZWF0ZSBhIG5ldyBvbmUKKwkJICAgICAqIGJlbG93IGJvdCAqLworCQkgICAgaSA9IChpbnQpKGZwIC0gKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSk7CisJCSAgICBmb2xkU3BsaXQoZ2FwLCBpLCBmbHAtPmxudW0sIGJvdCk7CisJCSAgICBmcCA9IChmb2xkX1QgKilnYXAtPmdhX2RhdGEgKyBpOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCQlmcC0+ZmRfbGVuID0gZmxwLT5sbnVtIC0gZnAtPmZkX3RvcDsKKwkgICAgZm9sZF9jaGFuZ2VkID0gVFJVRTsKKwl9CisgICAgfQorCisgICAgLyogZGVsZXRlIGZvbGxvd2luZyBmb2xkcyB0aGF0IGVuZCBiZWZvcmUgdGhlIGN1cnJlbnQgbGluZSAqLworICAgIGZvciAoOzspCisgICAgeworCWZwMiA9IGZwICsgMTsKKwlpZiAoZnAyID49IChmb2xkX1QgKilnYXAtPmdhX2RhdGEgKyBnYXAtPmdhX2xlbgorCQkJCQkJICB8fCBmcDItPmZkX3RvcCA+IGZscC0+bG51bSkKKwkgICAgYnJlYWs7CisJaWYgKGZwMi0+ZmRfdG9wICsgZnAyLT5mZF9sZW4gPiBmbHAtPmxudW0pCisJeworCSAgICBpZiAoZnAyLT5mZF90b3AgPCBmbHAtPmxudW0pCisJICAgIHsKKwkJLyogTWFrZSBmb2xkIHRoYXQgaW5jbHVkZXMgbG51bSBzdGFydCBhdCBsbnVtLiAqLworCQlmb2xkTWFya0FkanVzdFJlY3Vyc2UoJmZwMi0+ZmRfbmVzdGVkLAorCQkJKGxpbmVucl9UKTAsIChsb25nKShmbHAtPmxudW0gLSBmcDItPmZkX3RvcCAtIDEpLAorCQkJKGxpbmVucl9UKU1BWExOVU0sIChsb25nKShmcDItPmZkX3RvcCAtIGZscC0+bG51bSkpOworCQlmcDItPmZkX2xlbiAtPSBmbHAtPmxudW0gLSBmcDItPmZkX3RvcDsKKwkJZnAyLT5mZF90b3AgPSBmbHAtPmxudW07CisJCWZvbGRfY2hhbmdlZCA9IFRSVUU7CisJICAgIH0KKworCSAgICBpZiAobHZsID49IGxldmVsKQorCSAgICB7CisJCS8qIG1lcmdlIG5ldyBmb2xkIHdpdGggZXhpc3RpbmcgZm9sZCB0aGF0IGZvbGxvd3MgKi8KKwkJZm9sZE1lcmdlKGZwLCBnYXAsIGZwMik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCWZvbGRfY2hhbmdlZCA9IFRSVUU7CisJZGVsZXRlRm9sZEVudHJ5KGdhcCwgKGludCkoZnAyIC0gKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSksIFRSVUUpOworICAgIH0KKworICAgIC8qIE5lZWQgdG8gcmVkcmF3IHRoZSBsaW5lcyB3ZSBpbnNwZWN0ZWQsIHdoaWNoIG1pZ2h0IGJlIGZ1cnRoZXIgZG93biB0aGFuCisgICAgICogd2FzIGFza2VkIGZvci4gKi8KKyAgICBpZiAoYm90IDwgZmxwLT5sbnVtIC0gMSkKKwlib3QgPSBmbHAtPmxudW0gLSAxOworCisgICAgcmV0dXJuIGJvdDsKK30KKworLyogZm9sZEluc2VydCgpIHt7ezIgKi8KKy8qCisgKiBJbnNlcnQgYSBuZXcgZm9sZCBpbiAiZ2FwIiBhdCBwb3NpdGlvbiAiaSIuCisgKiBSZXR1cm5zIE9LIGZvciBzdWNjZXNzLCBGQUlMIGZvciBmYWlsdXJlLgorICovCisgICAgc3RhdGljIGludAorZm9sZEluc2VydChnYXAsIGkpCisgICAgZ2FycmF5X1QJKmdhcDsKKyAgICBpbnQJCWk7Cit7CisgICAgZm9sZF9UCSpmcDsKKworICAgIGlmIChnYV9ncm93KGdhcCwgMSkgIT0gT0spCisJcmV0dXJuIEZBSUw7CisgICAgZnAgPSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhICsgaTsKKyAgICBpZiAoaSA8IGdhcC0+Z2FfbGVuKQorCW1jaF9tZW1tb3ZlKGZwICsgMSwgZnAsIHNpemVvZihmb2xkX1QpICogKGdhcC0+Z2FfbGVuIC0gaSkpOworICAgICsrZ2FwLT5nYV9sZW47CisgICAgLS1nYXAtPmdhX3Jvb207CisgICAgZ2FfaW5pdDIoJmZwLT5mZF9uZXN0ZWQsIChpbnQpc2l6ZW9mKGZvbGRfVCksIDEwKTsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qIGZvbGRTcGxpdCgpIHt7ezIgKi8KKy8qCisgKiBTcGxpdCB0aGUgImkidGggZm9sZCBpbiAiZ2FwIiwgd2hpY2ggc3RhcnRzIGJlZm9yZSAidG9wIiBhbmQgZW5kcyBiZWxvdworICogImJvdCIgaW4gdHdvIHBpZWNlcywgb25lIGVuZGluZyBhYm92ZSAidG9wIiBhbmQgdGhlIG90aGVyIHN0YXJ0aW5nIGJlbG93CisgKiAiYm90Ii4KKyAqIFRoZSBjYWxsZXIgbXVzdCBmaXJzdCBoYXZlIHRha2VuIGNhcmUgb2YgYW55IG5lc3RlZCBmb2xkcyBmcm9tICJ0b3AiIHRvCisgKiAiYm90IiEKKyAqLworICAgIHN0YXRpYyB2b2lkCitmb2xkU3BsaXQoZ2FwLCBpLCB0b3AsIGJvdCkKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGludAkJaTsKKyAgICBsaW5lbnJfVAl0b3A7CisgICAgbGluZW5yX1QJYm90OworeworICAgIGZvbGRfVAkqZnA7CisgICAgZm9sZF9UCSpmcDI7CisgICAgZ2FycmF5X1QJKmdhcDE7CisgICAgZ2FycmF5X1QJKmdhcDI7CisgICAgaW50CQlpZHg7CisgICAgaW50CQlsZW47CisKKyAgICAvKiBUaGUgZm9sZCBjb250aW51ZXMgYmVsb3cgYm90LCBuZWVkIHRvIHNwbGl0IGl0LiAqLworICAgIGlmIChmb2xkSW5zZXJ0KGdhcCwgaSArIDEpID09IEZBSUwpCisJcmV0dXJuOworICAgIGZwID0gKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSArIGk7CisgICAgZnBbMV0uZmRfdG9wID0gYm90ICsgMTsKKyAgICBmcFsxXS5mZF9sZW4gPSBmcC0+ZmRfbGVuIC0gKGZwWzFdLmZkX3RvcCAtIGZwLT5mZF90b3ApOworICAgIGZwWzFdLmZkX2ZsYWdzID0gZnAtPmZkX2ZsYWdzOworCisgICAgLyogTW92ZSBuZXN0ZWQgZm9sZHMgYmVsb3cgYm90IHRvIG5ldyBmb2xkLiAgVGhlcmUgY2FuJ3QgYmUKKyAgICAgKiBhbnkgYmV0d2VlbiB0b3AgYW5kIGJvdCwgdGhleSBoYXZlIGJlZW4gcmVtb3ZlZCBieSB0aGUgY2FsbGVyLiAqLworICAgIGdhcDEgPSAmZnAtPmZkX25lc3RlZDsKKyAgICBnYXAyID0gJmZwWzFdLmZkX25lc3RlZDsKKyAgICAodm9pZCkoZm9sZEZpbmQoZ2FwMSwgYm90ICsgMSAtIGZwLT5mZF90b3AsICZmcDIpKTsKKyAgICBsZW4gPSAoaW50KSgoZm9sZF9UICopZ2FwMS0+Z2FfZGF0YSArIGdhcDEtPmdhX2xlbiAtIGZwMik7CisgICAgaWYgKGxlbiA+IDAgJiYgZ2FfZ3JvdyhnYXAyLCBsZW4pID09IE9LKQorICAgIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbjsgKytpZHgpCisJeworCSAgICAoKGZvbGRfVCAqKWdhcDItPmdhX2RhdGEpW2lkeF0gPSBmcDJbaWR4XTsKKwkgICAgKChmb2xkX1QgKilnYXAyLT5nYV9kYXRhKVtpZHhdLmZkX3RvcAorCQkJCQkJIC09IGZwWzFdLmZkX3RvcCAtIGZwLT5mZF90b3A7CisJfQorCWdhcDItPmdhX2xlbiA9IGxlbjsKKwlnYXAyLT5nYV9yb29tIC09IGxlbjsKKwlnYXAxLT5nYV9sZW4gLT0gbGVuOworCWdhcDEtPmdhX3Jvb20gKz0gbGVuOworICAgIH0KKyAgICBmcC0+ZmRfbGVuID0gdG9wIC0gZnAtPmZkX3RvcDsKKyAgICBmb2xkX2NoYW5nZWQgPSBUUlVFOworfQorCisvKiBmb2xkUmVtb3ZlKCkge3t7MiAqLworLyoKKyAqIFJlbW92ZSBmb2xkcyB3aXRoaW4gdGhlIHJhbmdlICJ0b3AiIHRvIGFuZCBpbmNsdWRpbmcgImJvdCIuCisgKiBDaGVjayBmb3IgdGhlc2Ugc2l0dWF0aW9uczoKKyAqICAgICAgMSAgMiAgMworICogICAgICAxICAyICAzCisgKiB0b3AgICAgIDIgIDMgIDQgIDUKKyAqCSAgIDIgIDMgIDQgIDUKKyAqIGJvdAkgICAyICAzICA0ICA1CisgKgkgICAgICAzICAgICA1ICA2CisgKgkgICAgICAzICAgICA1ICA2CisgKgorICogMTogbm90IGNoYW5nZWQKKyAqIDI6IHRydW5hdGUgdG8gc3RvcCBhYm92ZSAidG9wIgorICogMzogc3BsaXQgaW4gdHdvIHBhcnRzLCBvbmUgc3RvcHMgYWJvdmUgInRvcCIsIG90aGVyIHN0YXJ0cyBiZWxvdyAiYm90Ii4KKyAqIDQ6IGRlbGV0ZWQKKyAqIDU6IG1hZGUgdG8gc3RhcnQgYmVsb3cgImJvdCIuCisgKiA2OiBub3QgY2hhbmdlZAorICovCisgICAgc3RhdGljIHZvaWQKK2ZvbGRSZW1vdmUoZ2FwLCB0b3AsIGJvdCkKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGxpbmVucl9UCXRvcDsKKyAgICBsaW5lbnJfVAlib3Q7Cit7CisgICAgZm9sZF9UCSpmcCA9IE5VTEw7CisKKyAgICBpZiAoYm90IDwgdG9wKQorCXJldHVybjsJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKworICAgIGZvciAoOzspCisgICAgeworCS8qIEZpbmQgZm9sZCB0aGF0IGluY2x1ZGVzIHRvcCBvciBhIGZvbGxvd2luZyBvbmUuICovCisJaWYgKGZvbGRGaW5kKGdhcCwgdG9wLCAmZnApICYmIGZwLT5mZF90b3AgPCB0b3ApCisJeworCSAgICAvKiAyOiBvciAzOiBuZWVkIHRvIGRlbGV0ZSBuZXN0ZWQgZm9sZHMgKi8KKwkgICAgZm9sZFJlbW92ZSgmZnAtPmZkX25lc3RlZCwgdG9wIC0gZnAtPmZkX3RvcCwgYm90IC0gZnAtPmZkX3RvcCk7CisJICAgIGlmIChmcC0+ZmRfdG9wICsgZnAtPmZkX2xlbiA+IGJvdCArIDEpCisJICAgIHsKKwkJLyogMzogbmVlZCB0byBzcGxpdCBpdC4gKi8KKwkJZm9sZFNwbGl0KGdhcCwgKGludCkoZnAgLSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhKSwgdG9wLCBib3QpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKiAyOiB0cnVuY2F0ZSBmb2xkIGF0ICJ0b3AiLiAqLworCQlmcC0+ZmRfbGVuID0gdG9wIC0gZnAtPmZkX3RvcDsKKwkgICAgfQorCSAgICBmb2xkX2NoYW5nZWQgPSBUUlVFOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKGZwID49IChmb2xkX1QgKikoZ2FwLT5nYV9kYXRhKSArIGdhcC0+Z2FfbGVuCisJCXx8IGZwLT5mZF90b3AgPiBib3QpCisJeworCSAgICAvKiA2OiBGb3VuZCBhIGZvbGQgYmVsb3cgYm90LCBjYW4gc3RvcCBsb29raW5nLiAqLworCSAgICBicmVhazsKKwl9CisJaWYgKGZwLT5mZF90b3AgPj0gdG9wKQorCXsKKwkgICAgLyogRm91bmQgYW4gZW50cnkgYmVsb3cgdG9wLiAqLworCSAgICBmb2xkX2NoYW5nZWQgPSBUUlVFOworCSAgICBpZiAoZnAtPmZkX3RvcCArIGZwLT5mZF9sZW4gPiBib3QpCisJICAgIHsKKwkJLyogNTogTWFrZSBmb2xkIHRoYXQgaW5jbHVkZXMgYm90IHN0YXJ0IGJlbG93IGJvdC4gKi8KKwkJZm9sZE1hcmtBZGp1c3RSZWN1cnNlKCZmcC0+ZmRfbmVzdGVkLAorCQkJKGxpbmVucl9UKTAsIChsb25nKShib3QgLSBmcC0+ZmRfdG9wKSwKKwkJCShsaW5lbnJfVClNQVhMTlVNLCAobG9uZykoZnAtPmZkX3RvcCAtIGJvdCAtIDEpKTsKKwkJZnAtPmZkX2xlbiAtPSBib3QgLSBmcC0+ZmRfdG9wICsgMTsKKwkJZnAtPmZkX3RvcCA9IGJvdCArIDE7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgLyogNDogRGVsZXRlIGNvbXBsZXRlbHkgY29udGFpbmVkIGZvbGQuICovCisJICAgIGRlbGV0ZUZvbGRFbnRyeShnYXAsIChpbnQpKGZwIC0gKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YSksIFRSVUUpOworCX0KKyAgICB9Cit9CisKKy8qIGZvbGRNZXJnZSgpIHt7ezIgKi8KKy8qCisgKiBNZXJnZSB0d28gYWRqZWNlbnQgZm9sZHMgKGFuZCB0aGUgbmVzdGVkIG9uZXMgaW4gdGhlbSkuCisgKiBUaGlzIG9ubHkgd29ya3MgY29ycmVjdGx5IHdoZW4gdGhlIGZvbGRzIGFyZSByZWFsbHkgYWRqZWNlbnQhICBUaHVzICJmcDEiCisgKiBtdXN0IGVuZCBqdXN0IGFib3ZlICJmcDIiLgorICogVGhlIHJlc3VsdGluZyBmb2xkIGlzICJmcDEiLCBuZXN0ZWQgZm9sZHMgYXJlIG1vdmVkIGZyb20gImZwMiIgdG8gImZwMSIuCisgKiBGb2xkIGVudHJ5ICJmcDIiIGluICJnYXAiIGlzIGRlbGV0ZWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZm9sZE1lcmdlKGZwMSwgZ2FwLCBmcDIpCisgICAgZm9sZF9UCSpmcDE7CisgICAgZ2FycmF5X1QJKmdhcDsKKyAgICBmb2xkX1QJKmZwMjsKK3sKKyAgICBmb2xkX1QJKmZwMzsKKyAgICBmb2xkX1QJKmZwNDsKKyAgICBpbnQJCWlkeDsKKyAgICBnYXJyYXlfVAkqZ2FwMSA9ICZmcDEtPmZkX25lc3RlZDsKKyAgICBnYXJyYXlfVAkqZ2FwMiA9ICZmcDItPmZkX25lc3RlZDsKKworICAgIC8qIElmIHRoZSBsYXN0IG5lc3RlZCBmb2xkIGluIGZwMSB0b3VjaGVzIHRoZSBmaXJzdCBuZXN0ZWQgZm9sZCBpbiBmcDIsCisgICAgICogbWVyZ2UgdGhlbSByZWN1cnNpdmVseS4gKi8KKyAgICBpZiAoZm9sZEZpbmQoZ2FwMSwgZnAxLT5mZF9sZW4gLSAxTCwgJmZwMykgJiYgZm9sZEZpbmQoZ2FwMiwgMEwsICZmcDQpKQorCWZvbGRNZXJnZShmcDMsIGdhcDIsIGZwNCk7CisKKyAgICAvKiBNb3ZlIG5lc3RlZCBmb2xkcyBpbiBmcDIgdG8gdGhlIGVuZCBvZiBmcDEuICovCisgICAgaWYgKGdhcDItPmdhX2xlbiA+IDAgJiYgZ2FfZ3JvdyhnYXAxLCBnYXAyLT5nYV9sZW4pID09IE9LKQorICAgIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGdhcDItPmdhX2xlbjsgKytpZHgpCisJeworCSAgICAoKGZvbGRfVCAqKWdhcDEtPmdhX2RhdGEpW2dhcDEtPmdhX2xlbl0KKwkJCQkJPSAoKGZvbGRfVCAqKWdhcDItPmdhX2RhdGEpW2lkeF07CisJICAgICgoZm9sZF9UICopZ2FwMS0+Z2FfZGF0YSlbZ2FwMS0+Z2FfbGVuXS5mZF90b3AgKz0gZnAxLT5mZF9sZW47CisJICAgICsrZ2FwMS0+Z2FfbGVuOworCSAgICAtLWdhcDEtPmdhX3Jvb207CisJfQorCWdhcDItPmdhX2xlbiA9IDA7CisJLyogZnAyLT5mZF9uZXN0ZWQuZ2Ffcm9vbSBpc24ndCB1cGRhdGVkLCB3ZSBkZWxldGUgaXQgYmVsb3cgKi8KKyAgICB9CisKKyAgICBmcDEtPmZkX2xlbiArPSBmcDItPmZkX2xlbjsKKyAgICBkZWxldGVGb2xkRW50cnkoZ2FwLCAoaW50KShmcDIgLSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhKSwgVFJVRSk7CisgICAgZm9sZF9jaGFuZ2VkID0gVFJVRTsKK30KKworLyogZm9sZGxldmVsSW5kZW50KCkge3t7MiAqLworLyoKKyAqIExvdyBsZXZlbCBmdW5jdGlvbiB0byBnZXQgdGhlIGZvbGRsZXZlbCBmb3IgdGhlICJpbmRlbnQiIG1ldGhvZC4KKyAqIERvZXNuJ3QgdXNlIGFueSBjYWNoaW5nLgorICogUmV0dXJucyBhIGxldmVsIG9mIC0xIGlmIHRoZSBmb2xkbGV2ZWwgZGVwZW5kcyBvbiBzdXJyb3VuZGluZyBsaW5lcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmb2xkbGV2ZWxJbmRlbnQoZmxwKQorICAgIGZsaW5lX1QJKmZscDsKK3sKKyAgICBjaGFyX3UJKnM7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBsaW5lbnJfVAlsbnVtID0gZmxwLT5sbnVtICsgZmxwLT5vZmY7CisKKyAgICBidWYgPSBmbHAtPndwLT53X2J1ZmZlcjsKKyAgICBzID0gc2tpcHdoaXRlKG1sX2dldF9idWYoYnVmLCBsbnVtLCBGQUxTRSkpOworCisgICAgLyogZW1wdHkgbGluZSBvciBsaW5lcyBzdGFydGluZyB3aXRoIGEgY2hhcmFjdGVyIGluICdmb2xkaWdub3JlJzogbGV2ZWwKKyAgICAgKiBkZXBlbmRzIG9uIHN1cnJvdW5kaW5nIGxpbmVzICovCisgICAgaWYgKCpzID09IE5VTCB8fCB2aW1fc3RyY2hyKGZscC0+d3AtPndfcF9mZGksICpzKSAhPSBOVUxMKQorICAgIHsKKwkvKiBmaXJzdCBhbmQgbGFzdCBsaW5lIGNhbid0IGJlIHVuZGVmaW5lZCwgdXNlIGxldmVsIDAgKi8KKwlpZiAobG51bSA9PSAxIHx8IGxudW0gPT0gYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJICAgIGZscC0+bHZsID0gMDsKKwllbHNlCisJICAgIGZscC0+bHZsID0gLTE7CisgICAgfQorICAgIGVsc2UKKwlmbHAtPmx2bCA9IGdldF9pbmRlbnRfYnVmKGJ1ZiwgbG51bSkgLyBidWYtPmJfcF9zdzsKKyAgICBpZiAoZmxwLT5sdmwgPiBmbHAtPndwLT53X3BfZmRuKQorCWZscC0+bHZsID0gZmxwLT53cC0+d19wX2ZkbjsKK30KKworLyogZm9sZGxldmVsRGlmZigpIHt7ezIgKi8KKyNpZmRlZiBGRUFUX0RJRkYKKy8qCisgKiBMb3cgbGV2ZWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBmb2xkbGV2ZWwgZm9yIHRoZSAiZGlmZiIgbWV0aG9kLgorICogRG9lc24ndCB1c2UgYW55IGNhY2hpbmcuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZm9sZGxldmVsRGlmZihmbHApCisgICAgZmxpbmVfVAkqZmxwOworeworICAgIGlmIChkaWZmX2luZm9sZChmbHAtPndwLCBmbHAtPmxudW0gKyBmbHAtPm9mZikpCisJZmxwLT5sdmwgPSAxOworICAgIGVsc2UKKwlmbHAtPmx2bCA9IDA7Cit9CisjZW5kaWYKKworLyogZm9sZGxldmVsRXhwcigpIHt7ezIgKi8KKy8qCisgKiBMb3cgbGV2ZWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBmb2xkbGV2ZWwgZm9yIHRoZSAiZXhwciIgbWV0aG9kLgorICogRG9lc24ndCB1c2UgYW55IGNhY2hpbmcuCisgKiBSZXR1cm5zIGEgbGV2ZWwgb2YgLTEgaWYgdGhlIGZvbGRsZXZlbCBkZXBlbmRzIG9uIHN1cnJvdW5kaW5nIGxpbmVzLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZvbGRsZXZlbEV4cHIoZmxwKQorICAgIGZsaW5lX1QJKmZscDsKK3sKKyNpZm5kZWYgRkVBVF9FVkFMCisgICAgZmxwLT5zdGFydCA9IEZBTFNFOworICAgIGZscC0+bHZsID0gMDsKKyNlbHNlCisgICAgd2luX1QJKndpbjsKKyAgICBpbnQJCW47CisgICAgaW50CQljOworICAgIGxpbmVucl9UCWxudW0gPSBmbHAtPmxudW0gKyBmbHAtPm9mZjsKKyAgICBpbnQJCXNhdmVfa2V5dHlwZWQ7CisKKyAgICB3aW4gPSBjdXJ3aW47CisgICAgY3Vyd2luID0gZmxwLT53cDsKKyAgICBjdXJidWYgPSBmbHAtPndwLT53X2J1ZmZlcjsKKyAgICBzZXRfdmltX3Zhcl9ucihWVl9MTlVNLCBsbnVtKTsKKworICAgIGZscC0+c3RhcnQgPSAwOworICAgIGZscC0+aGFkX2VuZCA9IGZscC0+ZW5kOworICAgIGZscC0+ZW5kID0gTUFYX0xFVkVMICsgMTsKKyAgICBpZiAobG51bSA8PSAxKQorCWZscC0+bHZsID0gMDsKKworICAgIC8qIEtleVR5cGVkIG1heSBiZSByZXNldCB0byAwIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMKKyAgICAgKiBkb19jbWRsaW5lKCkuICBUbyBtYWtlICdmb2xkb3Blbicgd29yayBjb3JyZWN0bHkgcmVzdG9yZSBLZXlUeXBlZC4gKi8KKyAgICBzYXZlX2tleXR5cGVkID0gS2V5VHlwZWQ7CisgICAgbiA9IGV2YWxfZm9sZGV4cHIoZmxwLT53cC0+d19wX2ZkZSwgJmMpOworICAgIEtleVR5cGVkID0gc2F2ZV9rZXl0eXBlZDsKKworICAgIHN3aXRjaCAoYykKKyAgICB7CisJLyogImExIiwgImEyIiwgLi4gOiBhZGQgdG8gdGhlIGZvbGQgbGV2ZWwgKi8KKwljYXNlICdhJzogaWYgKGZscC0+bHZsID49IDApCisJCSAgeworCQkgICAgICBmbHAtPmx2bCArPSBuOworCQkgICAgICBmbHAtPmx2bF9uZXh0ID0gZmxwLT5sdmw7CisJCSAgfQorCQkgIGZscC0+c3RhcnQgPSBuOworCQkgIGJyZWFrOworCisJLyogInMxIiwgInMyIiwgLi4gOiBzdWJ0cmFjdCBmcm9tIHRoZSBmb2xkIGxldmVsICovCisJY2FzZSAncyc6IGlmIChmbHAtPmx2bCA+PSAwKQorCQkgIHsKKwkJICAgICAgaWYgKG4gPiBmbHAtPmx2bCkKKwkJCSAgZmxwLT5sdmxfbmV4dCA9IDA7CisJCSAgICAgIGVsc2UKKwkJCSAgZmxwLT5sdmxfbmV4dCA9IGZscC0+bHZsIC0gbjsKKwkJICAgICAgZmxwLT5lbmQgPSBmbHAtPmx2bF9uZXh0ICsgMTsKKwkJICB9CisJCSAgYnJlYWs7CisKKwkvKiAiPjEiLCAiPjIiLCAuLiA6IHN0YXJ0IGEgZm9sZCB3aXRoIGEgY2VydGFpbiBsZXZlbCAqLworCWNhc2UgJz4nOiBmbHAtPmx2bCA9IG47CisJCSAgZmxwLT5sdmxfbmV4dCA9IG47CisJCSAgZmxwLT5zdGFydCA9IDE7CisJCSAgYnJlYWs7CisKKwkvKiAiPDEiLCAiPDIiLCAuLiA6IGVuZCBhIGZvbGQgd2l0aCBhIGNlcnRhaW4gbGV2ZWwgKi8KKwljYXNlICc8JzogZmxwLT5sdmxfbmV4dCA9IG4gLSAxOworCQkgIGZscC0+ZW5kID0gbjsKKwkJICBicmVhazsKKworCS8qICI9IjogTm8gY2hhbmdlIGluIGxldmVsICovCisJY2FzZSAnPSc6IGZscC0+bHZsX25leHQgPSBmbHAtPmx2bDsKKwkJICBicmVhazsKKworCS8qICItMSIsICIwIiwgIjEiLCAuLjogc2V0IGZvbGQgbGV2ZWwgKi8KKwlkZWZhdWx0OiAgaWYgKG4gPCAwKQorCQkgICAgICAvKiBVc2UgdGhlIGN1cnJlbnQgbGV2ZWwgZm9yIHRoZSBuZXh0IGxpbmUsIHNvIHRoYXQgImExIgorCQkgICAgICAgKiB3aWxsIHdvcmsgdGhlcmUuICovCisJCSAgICAgIGZscC0+bHZsX25leHQgPSBmbHAtPmx2bDsKKwkJICBlbHNlCisJCSAgICAgIGZscC0+bHZsX25leHQgPSBuOworCQkgIGZscC0+bHZsID0gbjsKKwkJICBicmVhazsKKyAgICB9CisKKyAgICAvKiBJZiB0aGUgbGV2ZWwgaXMgdW5rbm93biBmb3IgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGZpbGUsIHVzZQorICAgICAqIGxldmVsIDAuICovCisgICAgaWYgKGZscC0+bHZsIDwgMCkKKyAgICB7CisJaWYgKGxudW0gPD0gMSkKKwl7CisJICAgIGZscC0+bHZsID0gMDsKKwkgICAgZmxwLT5sdmxfbmV4dCA9IDA7CisJfQorCWlmIChsbnVtID09IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSAgICBmbHAtPmx2bF9uZXh0ID0gMDsKKyAgICB9CisKKyAgICBjdXJ3aW4gPSB3aW47CisgICAgY3VyYnVmID0gY3Vyd2luLT53X2J1ZmZlcjsKKyNlbmRpZgorfQorCisvKiBwYXJzZU1hcmtlcigpIHt7ezIgKi8KKy8qCisgKiBQYXJzZSAnZm9sZG1hcmtlcicgYW5kIHNldCAiZm9sZGVuZG1hcmtlciIsICJmb2xkc3RhcnRtYXJrZXJsZW4iIGFuZAorICogImZvbGRlbmRtYXJrZXJsZW4iLgorICogUmVsaWVzIG9uIHRoZSBvcHRpb24gdmFsdWUgdG8gaGF2ZSBiZWVuIGNoZWNrZWQgZm9yIGNvcnJlY3RuZXNzIGFscmVhZHkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcGFyc2VNYXJrZXIod3ApCisgICAgd2luX1QJKndwOworeworICAgIGZvbGRlbmRtYXJrZXIgPSB2aW1fc3RyY2hyKHdwLT53X3BfZm1yLCAnLCcpOworICAgIGZvbGRzdGFydG1hcmtlcmxlbiA9IChpbnQpKGZvbGRlbmRtYXJrZXIrKyAtIHdwLT53X3BfZm1yKTsKKyAgICBmb2xkZW5kbWFya2VybGVuID0gKGludClTVFJMRU4oZm9sZGVuZG1hcmtlcik7Cit9CisKKy8qIGZvbGRsZXZlbE1hcmtlcigpIHt7ezIgKi8KKy8qCisgKiBMb3cgbGV2ZWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBmb2xkbGV2ZWwgZm9yIHRoZSAibWFya2VyIiBtZXRob2QuCisgKiAiZm9sZGVuZG1hcmtlciIsICJmb2xkc3RhcnRtYXJrZXJsZW4iIGFuZCAiZm9sZGVuZG1hcmtlcmxlbiIgbXVzdCBoYXZlIGJlZW4KKyAqIHNldCBiZWZvcmUgY2FsbGluZyB0aGlzLgorICogUmVxdWlyZXMgdGhhdCBmbHAtPmx2bCBpcyBzZXQgdG8gdGhlIGZvbGQgbGV2ZWwgb2YgdGhlIHByZXZpb3VzIGxpbmUhCisgKiBDYXJlZnVsOiBUaGlzIG1lYW5zIHlvdSBjYW4ndCBjYWxsIHRoaXMgZnVuY3Rpb24gdHdpY2Ugb24gdGhlIHNhbWUgbGluZS4KKyAqIERvZXNuJ3QgdXNlIGFueSBjYWNoaW5nLgorICogU2V0cyBmbHAtPnN0YXJ0IHdoZW4gYSBzdGFydCBtYXJrZXIgd2FzIGZvdW5kLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZvbGRsZXZlbE1hcmtlcihmbHApCisgICAgZmxpbmVfVAkqZmxwOworeworICAgIGNoYXJfdQkqc3RhcnRtYXJrZXI7CisgICAgaW50CQljc3RhcnQ7CisgICAgaW50CQljZW5kOworICAgIGludAkJc3RhcnRfbHZsID0gZmxwLT5sdmw7CisgICAgY2hhcl91CSpzOworICAgIGludAkJbjsKKworICAgIC8qIGNhY2hlIGEgZmV3IHZhbHVlcyBmb3Igc3BlZWQgKi8KKyAgICBzdGFydG1hcmtlciA9IGZscC0+d3AtPndfcF9mbXI7CisgICAgY3N0YXJ0ID0gKnN0YXJ0bWFya2VyOworICAgICsrc3RhcnRtYXJrZXI7CisgICAgY2VuZCA9ICpmb2xkZW5kbWFya2VyOworCisgICAgLyogRGVmYXVsdDogbm8gc3RhcnQgZm91bmQsIG5leHQgbGV2ZWwgaXMgc2FtZSBhcyBjdXJyZW50IGxldmVsICovCisgICAgZmxwLT5zdGFydCA9IDA7CisgICAgZmxwLT5sdmxfbmV4dCA9IGZscC0+bHZsOworCisgICAgcyA9IG1sX2dldF9idWYoZmxwLT53cC0+d19idWZmZXIsIGZscC0+bG51bSArIGZscC0+b2ZmLCBGQUxTRSk7CisgICAgd2hpbGUgKCpzKQorICAgIHsKKwlpZiAoKnMgPT0gY3N0YXJ0CisJCSAgJiYgU1RSTkNNUChzICsgMSwgc3RhcnRtYXJrZXIsIGZvbGRzdGFydG1hcmtlcmxlbiAtIDEpID09IDApCisJeworCSAgICAvKiBmb3VuZCBzdGFydG1hcmtlcjogc2V0IGZscC0+bHZsICovCisJICAgIHMgKz0gZm9sZHN0YXJ0bWFya2VybGVuOworCSAgICBpZiAoVklNX0lTRElHSVQoKnMpKQorCSAgICB7CisJCW4gPSBhdG9pKChjaGFyICopcyk7CisJCWlmIChuID4gMCkKKwkJeworCQkgICAgZmxwLT5sdmwgPSBuOworCQkgICAgZmxwLT5sdmxfbmV4dCA9IG47CisJCSAgICBpZiAobiA8PSBzdGFydF9sdmwpCisJCQlmbHAtPnN0YXJ0ID0gMTsKKwkJICAgIGVsc2UKKwkJCWZscC0+c3RhcnQgPSBuIC0gc3RhcnRfbHZsOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCSsrZmxwLT5sdmw7CisJCSsrZmxwLT5sdmxfbmV4dDsKKwkJKytmbHAtPnN0YXJ0OworCSAgICB9CisJfQorCWVsc2UgaWYgKCpzID09IGNlbmQKKwkgICAgICAmJiBTVFJOQ01QKHMgKyAxLCBmb2xkZW5kbWFya2VyICsgMSwgZm9sZGVuZG1hcmtlcmxlbiAtIDEpID09IDApCisJeworCSAgICAvKiBmb3VuZCBlbmRtYXJrZXI6IHNldCBmbHAtPmx2bF9uZXh0ICovCisJICAgIHMgKz0gZm9sZGVuZG1hcmtlcmxlbjsKKwkgICAgaWYgKFZJTV9JU0RJR0lUKCpzKSkKKwkgICAgeworCQluID0gYXRvaSgoY2hhciAqKXMpOworCQlpZiAobiA+IDApCisJCXsKKwkJICAgIGZscC0+bHZsID0gbjsKKwkJICAgIGZscC0+bHZsX25leHQgPSBuIC0gMTsKKwkJICAgIC8qIG5ldmVyIHN0YXJ0IGEgZm9sZCB3aXRoIGFuIGVuZCBtYXJrZXIgKi8KKwkJICAgIGlmIChmbHAtPmx2bF9uZXh0ID4gZmxwLT5sdmwpCisJCQlmbHAtPmx2bF9uZXh0ID0gZmxwLT5sdmw7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJCS0tZmxwLT5sdmxfbmV4dDsKKwl9CisJZWxzZQorCSAgICArK3M7CisgICAgfQorCisgICAgLyogVGhlIGxldmVsIGNhbid0IGdvIG5lZ2F0aXZlLCBtdXN0IGJlIG1pc3NpbmcgYSBzdGFydCBtYXJrZXIuICovCisgICAgaWYgKGZscC0+bHZsX25leHQgPCAwKQorCWZscC0+bHZsX25leHQgPSAwOworfQorCisvKiBmb2xkbGV2ZWxTeW50YXgoKSB7e3syICovCisvKgorICogTG93IGxldmVsIGZ1bmN0aW9uIHRvIGdldCB0aGUgZm9sZGxldmVsIGZvciB0aGUgInN5bnRheCIgbWV0aG9kLgorICogRG9lc24ndCB1c2UgYW55IGNhY2hpbmcuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZm9sZGxldmVsU3ludGF4KGZscCkKKyAgICBmbGluZV9UCSpmbHA7Cit7CisjaWZuZGVmIEZFQVRfU1lOX0hMCisgICAgZmxwLT5zdGFydCA9IDA7CisgICAgZmxwLT5sdmwgPSAwOworI2Vsc2UKKyAgICBsaW5lbnJfVAlsbnVtID0gZmxwLT5sbnVtICsgZmxwLT5vZmY7CisgICAgaW50CQluOworCisgICAgLyogVXNlIHRoZSBtYXhpbXVtIGZvbGQgbGV2ZWwgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgbGluZSBhbmQgdGhlIG5leHQuICovCisgICAgZmxwLT5sdmwgPSBzeW5fZ2V0X2ZvbGRsZXZlbChmbHAtPndwLCBsbnVtKTsKKyAgICBmbHAtPnN0YXJ0ID0gMDsKKyAgICBpZiAobG51bSA8IGZscC0+d3AtPndfYnVmZmVyLT5iX21sLm1sX2xpbmVfY291bnQpCisgICAgeworCW4gPSBzeW5fZ2V0X2ZvbGRsZXZlbChmbHAtPndwLCBsbnVtICsgMSk7CisJaWYgKG4gPiBmbHAtPmx2bCkKKwl7CisJICAgIGZscC0+c3RhcnQgPSBuIC0gZmxwLT5sdmw7CS8qIGZvbGQocykgc3RhcnQgaGVyZSAqLworCSAgICBmbHAtPmx2bCA9IG47CisJfQorICAgIH0KKyNlbmRpZgorfQorCisvKiBmdW5jdGlvbnMgZm9yIHN0b3JpbmcgdGhlIGZvbGQgc3RhdGUgaW4gYSBWaWV3IHt7ezEgKi8KKy8qIHB1dF9mb2xkcygpIHt7ezIgKi8KKyNpZiBkZWZpbmVkKEZFQVRfU0VTU0lPTikgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBpbnQgcHV0X2ZvbGRzX3JlY3Vyc2UgX19BUkdTKChGSUxFICpmZCwgZ2FycmF5X1QgKmdhcCwgbGluZW5yX1Qgb2ZmKSk7CitzdGF0aWMgaW50IHB1dF9mb2xkb3Blbl9yZWN1cnNlIF9fQVJHUygoRklMRSAqZmQsIGdhcnJheV9UICpnYXAsIGxpbmVucl9UIG9mZikpOworCisvKgorICogV3JpdGUgY29tbWFuZHMgdG8gImZkIiB0byByZXN0b3JlIHRoZSBtYW51YWwgZm9sZHMgaW4gd2luZG93ICJ3cCIuCisgKiBSZXR1cm4gRkFJTCBpZiB3cml0aW5nIGZhaWxzLgorICovCisgICAgaW50CitwdXRfZm9sZHMoZmQsIHdwKQorICAgIEZJTEUJKmZkOworICAgIHdpbl9UCSp3cDsKK3sKKyAgICBpZiAoZm9sZG1ldGhvZElzTWFudWFsKHdwKSkKKyAgICB7CisJaWYgKHB1dF9saW5lKGZkLCAic2lsZW50ISBub3JtYWwhIHpFIikgPT0gRkFJTAorCQl8fCBwdXRfZm9sZHNfcmVjdXJzZShmZCwgJndwLT53X2ZvbGRzLCAobGluZW5yX1QpMCkgPT0gRkFJTCkKKwkgICAgcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgLyogSWYgc29tZSBmb2xkcyBhcmUgbWFudWFsbHkgb3BlbmVkL2Nsb3NlZCwgbmVlZCB0byByZXN0b3JlIHRoYXQuICovCisgICAgaWYgKHdwLT53X2ZvbGRfbWFudWFsKQorCXJldHVybiBwdXRfZm9sZG9wZW5fcmVjdXJzZShmZCwgJndwLT53X2ZvbGRzLCAobGluZW5yX1QpMCk7CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qIHB1dF9mb2xkc19yZWN1cnNlKCkge3t7MiAqLworLyoKKyAqIFdyaXRlIGNvbW1hbmRzIHRvICJmZCIgdG8gcmVjcmVhdGUgbWFudWFsbHkgY3JlYXRlZCBmb2xkcy4KKyAqIFJldHVybnMgRkFJTCB3aGVuIHdyaXRpbmcgZmFpbGVkLgorICovCisgICAgc3RhdGljIGludAorcHV0X2ZvbGRzX3JlY3Vyc2UoZmQsIGdhcCwgb2ZmKQorICAgIEZJTEUJKmZkOworICAgIGdhcnJheV9UCSpnYXA7CisgICAgbGluZW5yX1QJb2ZmOworeworICAgIGludAkJaTsKKyAgICBmb2xkX1QJKmZwOworCisgICAgZnAgPSAoZm9sZF9UICopZ2FwLT5nYV9kYXRhOworICAgIGZvciAoaSA9IDA7IGkgPCBnYXAtPmdhX2xlbjsgaSsrKQorICAgIHsKKwkvKiBEbyBuZXN0ZWQgZm9sZHMgZmlyc3QsIHRoZXkgd2lsbCBiZSBjcmVhdGVkIGNsb3NlZC4gKi8KKwlpZiAocHV0X2ZvbGRzX3JlY3Vyc2UoZmQsICZmcC0+ZmRfbmVzdGVkLCBvZmYgKyBmcC0+ZmRfdG9wKSA9PSBGQUlMKQorCSAgICByZXR1cm4gRkFJTDsKKwlpZiAoZnByaW50ZihmZCwgIiVsZCwlbGRmb2xkIiwgZnAtPmZkX3RvcCArIG9mZiwKKwkJCQkJZnAtPmZkX3RvcCArIG9mZiArIGZwLT5mZF9sZW4gLSAxKSA8IDAKKwkJfHwgcHV0X2VvbChmZCkgPT0gRkFJTCkKKwkgICAgcmV0dXJuIEZBSUw7CisJKytmcDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvKiBwdXRfZm9sZG9wZW5fcmVjdXJzZSgpIHt7ezIgKi8KKy8qCisgKiBXcml0ZSBjb21tYW5kcyB0byAiZmQiIHRvIG9wZW4gYW5kIGNsb3NlIG1hbnVhbGx5IG9wZW5lZC9jbG9zZWQgZm9sZHMuCisgKiBSZXR1cm5zIEZBSUwgd2hlbiB3cml0aW5nIGZhaWxlZC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3B1dF9mb2xkb3Blbl9yZWN1cnNlKGZkLCBnYXAsIG9mZikKKyAgICBGSUxFCSpmZDsKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGxpbmVucl9UCW9mZjsKK3sKKyAgICBpbnQJCWk7CisgICAgZm9sZF9UCSpmcDsKKworICAgIGZwID0gKGZvbGRfVCAqKWdhcC0+Z2FfZGF0YTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZ2FwLT5nYV9sZW47IGkrKykKKyAgICB7CisJaWYgKGZwLT5mZF9mbGFncyAhPSBGRF9MRVZFTCkKKwl7CisJICAgIGlmIChmcC0+ZmRfbmVzdGVkLmdhX2xlbiA+IDApCisJICAgIHsKKwkJLyogb3Blbi9jbG9zZSBuZXN0ZWQgZm9sZHMgd2hpbGUgdGhpcyBmb2xkIGlzIG9wZW4gKi8KKwkJaWYgKGZwcmludGYoZmQsICIlbGQiLCBmcC0+ZmRfdG9wICsgb2ZmKSA8IDAKKwkJCXx8IHB1dF9lb2woZmQpID09IEZBSUwKKwkJCXx8IHB1dF9saW5lKGZkLCAibm9ybWFsIHpvIikgPT0gRkFJTCkKKwkJICAgIHJldHVybiBGQUlMOworCQlpZiAocHV0X2ZvbGRvcGVuX3JlY3Vyc2UoZmQsICZmcC0+ZmRfbmVzdGVkLCBvZmYgKyBmcC0+ZmRfdG9wKQorCQkJPT0gRkFJTCkKKwkJICAgIHJldHVybiBGQUlMOworCSAgICB9CisJICAgIGlmIChmcHJpbnRmKGZkLCAiJWxkIiwgZnAtPmZkX3RvcCArIG9mZikgPCAwCisJCSAgICB8fCBwdXRfZW9sKGZkKSA9PSBGQUlMCisJCSAgICB8fCBmcHJpbnRmKGZkLCAibm9ybWFsIHolYyIsCisJCQkJICAgIGZwLT5mZF9mbGFncyA9PSBGRF9DTE9TRUQgPyAnYycgOiAnbycpIDwgMAorCQkgICAgfHwgcHV0X2VvbChmZCkgPT0gRkFJTCkKKwkJcmV0dXJuIEZBSUw7CisJfQorCSsrZnA7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorI2VuZGlmIC8qIEZFQVRfU0VTU0lPTiAqLworCisvKiB9fX0xICovCisjZW5kaWYgLyogZGVmaW5lZChGRUFUX0ZPTERJTkcpIHx8IGRlZmluZWQoUFJPVE8pICovCmRpZmYgLS1naXQgYS9zcmMvZ2V0Y2hhci5jIGIvc3JjL2dldGNoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg0MzgzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2dldGNoYXIuYwpAQCAtMCwwICsxLDQ2MzYgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIGdldGNoYXIuYworICoKKyAqIGZ1bmN0aW9ucyByZWxhdGVkIHdpdGggZ2V0dGluZyBhIGNoYXJhY3RlciBmcm9tIHRoZSB1c2VyL21hcHBpbmcvcmVkby8uLi4KKyAqCisgKiBtYW5pcHVsYXRpb25zIHdpdGggcmVkbyBidWZmZXIgYW5kIHN0dWZmIGJ1ZmZlcgorICogbWFwcGluZ3MgYW5kIGFiYnJldmlhdGlvbnMKKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKy8qCisgKiBUaGVzZSBidWZmZXJzIGFyZSB1c2VkIGZvciBzdG9yaW5nOgorICogLSBzdHVmZmVkIGNoYXJhY3RlcnM6IEEgY29tbWFuZCB0aGF0IGlzIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGNvbW1hbmQuCisgKiAtIHJlZG8gY2hhcmFjdGVyczogd2lsbCByZWRvIHRoZSBsYXN0IGNoYW5nZS4KKyAqIC0gcmVjb3JkZWQgY2hyYWN0ZXJzOiBmb3IgdGhlICJxIiBjb21tYW5kLgorICoKKyAqIFRoZSBieXRlcyBhcmUgc3RvcmVkIGxpa2UgaW4gdGhlIHR5cGVhaGVhZCBidWZmZXI6CisgKiAtIEtfU1BFQ0lBTCBpbnRyb2R1Y2VzIGEgc3BlY2lhbCBrZXkgKHR3byBtb3JlIGJ5dGVzIGZvbGxvdykuICBBIGxpdGVyYWwKKyAqICAgS19TUEVDSUFMIGlzIHN0b3JlZCBhcyBLX1NQRUNJQUwgS1NfU1BFQ0lBTCBLRV9GSUxMRVIuCisgKiAtIENTSSBpbnRyb2R1Y2VzIGEgR1VJIHRlcm1jYXAgY29kZSAoYWxzbyB3aGVuIGd1aS5pbl91c2UgaXMgRkFMU0UsCisgKiAgIG90aGVyd2lzZSBzd2l0Y2hpbmcgdGhlIEdVSSBvbiB3b3VsZCBtYWtlIG1hcHBpbmdzIGludmFsaWQpLgorICogICBBIGxpdGVyYWwgQ1NJIGlzIHN0b3JlZCBhcyBDU0kgS1NfRVhUUkEgS0VfQ1NJLgorICogVGhlc2UgdHJhbnNsYXRpb25zIGFyZSBhbHNvIGRvbmUgb24gbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIQorICoKKyAqIEVzY2FwaW5nIENTSSBieXRlcyBpcyBkb25lIGJ5IHRoZSBzeXN0ZW0tc3BlY2lmaWMgaW5wdXQgZnVuY3Rpb25zLCBjYWxsZWQKKyAqIGJ5IHVpX2luY2hhcigpLgorICogRXNjYXBpbmcgS19TUEVDSUFMIGlzIGRvbmUgYnkgaW5jaGFyKCkuCisgKiBVbi1lc2NhcGluZyBpcyBkb25lIGJ5IHZnZXRjKCkuCisgKi8KKworI2RlZmluZSBNSU5JTUFMX1NJWkUgMjAJCQkvKiBtaW5pbWFsIHNpemUgZm9yIGJfc3RyICovCisKK3N0YXRpYyBzdHJ1Y3QgYnVmZmhlYWRlciByZWRvYnVmZiA9IHt7TlVMTCwge05VTH19LCBOVUxMLCAwLCAwfTsKK3N0YXRpYyBzdHJ1Y3QgYnVmZmhlYWRlciBvbGRfcmVkb2J1ZmYgPSB7e05VTEwsIHtOVUx9fSwgTlVMTCwgMCwgMH07CisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpIHx8IGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorc3RhdGljIHN0cnVjdCBidWZmaGVhZGVyIHNhdmVfcmVkb2J1ZmYgPSB7e05VTEwsIHtOVUx9fSwgTlVMTCwgMCwgMH07CitzdGF0aWMgc3RydWN0IGJ1ZmZoZWFkZXIgc2F2ZV9vbGRfcmVkb2J1ZmYgPSB7e05VTEwsIHtOVUx9fSwgTlVMTCwgMCwgMH07CisjZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgYnVmZmhlYWRlciByZWNvcmRidWZmID0ge3tOVUxMLCB7TlVMfX0sIE5VTEwsIDAsIDB9OworCitzdGF0aWMgaW50IHR5cGVhaGVhZF9jaGFyID0gMDsJCS8qIHR5cGVhaGVhZCBjaGFyIHRoYXQncyBub3QgZmx1c2hlZCAqLworCisvKgorICogd2hlbiBibG9ja19yZWRvIGlzIFRSVUUgcmVkbyBidWZmZXIgd2lsbCBub3QgYmUgY2hhbmdlZAorICogdXNlZCBieSBlZGl0KCkgdG8gcmVwZWF0IGluc2VydGlvbnMgYW5kICdWJyBjb21tYW5kIGZvciByZWRvaW5nCisgKi8KK3N0YXRpYyBpbnQJYmxvY2tfcmVkbyA9IEZBTFNFOworCisvKgorICogTWFrZSBhIGhhc2ggdmFsdWUgZm9yIGEgbWFwcGluZy4KKyAqICJtb2RlIiBpcyB0aGUgbG93ZXIgNCBiaXRzIG9mIHRoZSBTdGF0ZSBmb3IgdGhlIG1hcHBpbmcuCisgKiAiYzEiIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlICJsaHMiLgorICogUmV0dXJucyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LCBpbmRleCBpbiBtYXBoYXNoLgorICogUHV0IE5vcm1hbC9WaXN1YWwgbW9kZSBtYXBwaW5ncyBtb3N0bHkgc2VwYXJhdGVseSBmcm9tIEluc2VydC9DbWRsaW5lIG1vZGUuCisgKi8KKyNkZWZpbmUgTUFQX0hBU0gobW9kZSwgYzEpICgoKG1vZGUpICYgKE5PUk1BTCArIFZJU1VBTCArIE9QX1BFTkRJTkcpKSA/IChjMSkgOiAoKGMxKSBeIDB4ODApKQorCisvKgorICogRWFjaCBtYXBwaW5nIGlzIHB1dCBpbiBvbmUgb2YgdGhlIDI1NiBoYXNoIGxpc3RzLCB0byBzcGVlZCB1cCBmaW5kaW5nIGl0LgorICovCitzdGF0aWMgbWFwYmxvY2tfVAkqKG1hcGhhc2hbMjU2XSk7CitzdGF0aWMgaW50CQltYXBoYXNoX3ZhbGlkID0gRkFMU0U7CisKKy8qCisgKiBMaXN0IHVzZWQgZm9yIGFiYnJldmlhdGlvbnMuCisgKi8KK3N0YXRpYyBtYXBibG9ja19UCSpmaXJzdF9hYmJyID0gTlVMTDsgLyogZmlyc3QgZW50cnkgaW4gYWJicmxpc3QgKi8KKworc3RhdGljIGludAkJS2V5Tm9yZW1hcCA9IEZBTFNFOyAvKiByZW1hcHBpbmcgZGlzYWJsZWQgKi8KKworLyoKKyAqIHZhcmlhYmxlcyB1c2VkIGJ5IHZnZXRvcnBlZWsoKSBhbmQgZmx1c2hfYnVmZmVycygpCisgKgorICogdHlwZWJ1Zi50Yl9idWZbXSBjb250YWlucyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgY29uc3VtZWQgeWV0LgorICogdHlwZWJ1Zi50Yl9idWZbdHlwZWJ1Zi50Yl9vZmZdIGlzIHRoZSBmaXJzdCB2YWxpZCBjaGFyYWN0ZXIuCisgKiB0eXBlYnVmLnRiX2J1Zlt0eXBlYnVmLnRiX29mZiArIHR5cGVidWYudGJfbGVuIC0gMV0gaXMgdGhlIGxhc3QgdmFsaWQgY2hhci4KKyAqIHR5cGVidWYudGJfYnVmW3R5cGVidWYudGJfb2ZmICsgdHlwZWJ1Zi50Yl9sZW5dIG11c3QgYmUgTlVMLgorICogVGhlIGhlYWQgb2YgdGhlIGJ1ZmZlciBtYXkgY29udGFpbiB0aGUgcmVzdWx0IG9mIG1hcHBpbmdzLCBhYmJyZXZpYXRpb25zCisgKiBhbmQgQGEgY29tbWFuZHMuICBUaGUgbGVuZ3RoIG9mIHRoaXMgcGFydCBpcyB0eXBlYnVmLnRiX21hcGxlbi4KKyAqIHR5cGVidWYudGJfc2lsZW50IGlzIHRoZSBwYXJ0IHdoZXJlIDxzaWxlbnQ+IGFwcGxpZXMuCisgKiBBZnRlciB0aGUgaGVhZCBhcmUgY2hhcmFjdGVycyB0aGF0IGNvbWUgZnJvbSB0aGUgdGVybWluYWwuCisgKiB0eXBlYnVmLnRiX25vX2FiYnJfY250IGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0eXBlYnVmLnRiX2J1ZiB0aGF0CisgKiBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgZm9yIGFiYnJldmlhdGlvbnMuCisgKiBTb21lIHBhcnRzIG9mIHR5cGVidWYudGJfYnVmIG1heSBub3QgYmUgbWFwcGVkLiBUaGVzZSBwYXJ0cyBhcmUgcmVtZW1iZXJlZAorICogaW4gdHlwZWJ1Zi50Yl9ub3JlbWFwW10sIHdoaWNoIGlzIHRoZSBzYW1lIGxlbmd0aCBhcyB0eXBlYnVmLnRiX2J1ZiBhbmQKKyAqIGNvbnRhaW5zIFJNX05PTkUgZm9yIHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCB0byBiZSByZW1hcHBlZC4KKyAqIHR5cGVidWYudGJfbm9yZW1hcFt0eXBlYnVmLnRiX29mZl0gaXMgdGhlIGZpcnN0IHZhbGlkIGZsYWcuCisgKiAodHlwZWJ1ZiBoYXMgYmVlbiBwdXQgaW4gZ2xvYmFscy5oLCBiZWNhdXNlIGNoZWNrX3Rlcm1jb2RlKCkgbmVlZHMgaXQpLgorICovCisjZGVmaW5lIFJNX1lFUwkJMAkvKiB0Yl9ub3JlbWFwOiByZW1hcCAqLworI2RlZmluZSBSTV9OT05FCQkxCS8qIHRiX25vcmVtYXA6IGRvbid0IHJlbWFwICovCisjZGVmaW5lIFJNX1NDUklQVAkyCS8qIHRiX25vcmVtYXA6IHJlbWFwIGxvY2FsIHNjcmlwdCBtYXBwaW5ncyAqLworCisvKiB0eXBlYnVmLnRiX2J1ZiBoYXMgdGhyZWUgcGFydHM6IHJvb20gaW4gZnJvbnQgKGZvciByZXN1bHQgb2YgbWFwcGluZ3MpLCB0aGUKKyAqIG1pZGRsZSBmb3IgdHlwZWFoZWFkIGFuZCByb29tIGZvciBuZXcgY2hhcmFjdGVycyAod2hpY2ggbmVlZHMgdG8gYmUgMyAqCisgKiBNQVhNQVBMRU4pIGZvciB0aGUgQW1pZ2EpLgorICovCisjZGVmaW5lIFRZUEVMRU5fSU5JVAkoNSAqIChNQVhNQVBMRU4gKyAzKSkKK3N0YXRpYyBjaGFyX3UJdHlwZWJ1Zl9pbml0W1RZUEVMRU5fSU5JVF07CS8qIGluaXRpYWwgdHlwZWJ1Zi50Yl9idWYgKi8KK3N0YXRpYyBjaGFyX3UJbm9yZW1hcGJ1Zl9pbml0W1RZUEVMRU5fSU5JVF07CS8qIGluaXRpYWwgdHlwZWJ1Zi50Yl9ub3JlbWFwICovCisKK3N0YXRpYyBpbnQJbGFzdF9yZWNvcmRlZF9sZW4gPSAwOwkvKiBudW1iZXIgb2YgbGFzdCByZWNvcmRlZCBjaGFycyAqLworCitzdGF0aWMgY2hhcl91CSpnZXRfYnVmZmNvbnQgX19BUkdTKChzdHJ1Y3QgYnVmZmhlYWRlciAqLCBpbnQpKTsKK3N0YXRpYyB2b2lkCWFkZF9idWZmIF9fQVJHUygoc3RydWN0IGJ1ZmZoZWFkZXIgKiwgY2hhcl91ICosIGxvbmcgbikpOworc3RhdGljIHZvaWQJYWRkX251bV9idWZmIF9fQVJHUygoc3RydWN0IGJ1ZmZoZWFkZXIgKiwgbG9uZykpOworc3RhdGljIHZvaWQJYWRkX2NoYXJfYnVmZiBfX0FSR1MoKHN0cnVjdCBidWZmaGVhZGVyICosIGludCkpOworc3RhdGljIGludAlyZWFkX3N0dWZmIF9fQVJHUygoaW50IGFkdmFuY2UpKTsKK3N0YXRpYyB2b2lkCXN0YXJ0X3N0dWZmIF9fQVJHUygodm9pZCkpOworc3RhdGljIGludAlyZWFkX3JlZG8gX19BUkdTKChpbnQsIGludCkpOworc3RhdGljIHZvaWQJY29weV9yZWRvIF9fQVJHUygoaW50KSk7CitzdGF0aWMgdm9pZAlpbml0X3R5cGVidWYgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZAlnb3RjaGFycyBfX0FSR1MoKGNoYXJfdSAqLCBpbnQpKTsKK3N0YXRpYyB2b2lkCW1heV9zeW5jX3VuZG8gX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZAljbG9zZXNjcmlwdCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQJdmdldG9ycGVlayBfX0FSR1MoKGludCkpOworc3RhdGljIHZvaWQJbWFwX2ZyZWUgX19BUkdTKChtYXBibG9ja19UICoqKSk7CitzdGF0aWMgdm9pZAl2YWxpZGF0ZV9tYXBoYXNoIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQJc2hvd21hcCBfX0FSR1MoKG1hcGJsb2NrX1QgKm1wLCBpbnQgbG9jYWwpKTsKKworLyoKKyAqIEZyZWUgYW5kIGNsZWFyIGEgYnVmZmVyLgorICovCisgICAgdm9pZAorZnJlZV9idWZmKGJ1ZikKKyAgICBzdHJ1Y3QgYnVmZmhlYWRlcgkqYnVmOworeworICAgIHN0cnVjdCBidWZmYmxvY2sJKnAsICpucDsKKworICAgIGZvciAocCA9IGJ1Zi0+YmhfZmlyc3QuYl9uZXh0OyBwICE9IE5VTEw7IHAgPSBucCkKKyAgICB7CisJbnAgPSBwLT5iX25leHQ7CisJdmltX2ZyZWUocCk7CisgICAgfQorICAgIGJ1Zi0+YmhfZmlyc3QuYl9uZXh0ID0gTlVMTDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgY29udGVudHMgb2YgYSBidWZmZXIgYXMgYSBzaW5nbGUgc3RyaW5nLgorICogS19TUEVDSUFMIGFuZCBDU0kgaW4gdGhlIHJldHVybmVkIHN0cmluZyBhcmUgZXNjYXBlZC4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorZ2V0X2J1ZmZjb250KGJ1ZmZlciwgZG96ZXJvKQorICAgIHN0cnVjdCBidWZmaGVhZGVyCSpidWZmZXI7CisgICAgaW50CQkJZG96ZXJvOwkgICAgLyogY291bnQgPT0gemVybyBpcyBub3QgYW4gZXJyb3IgKi8KK3sKKyAgICBsb25nX3UJICAgIGNvdW50ID0gMDsKKyAgICBjaGFyX3UJICAgICpwID0gTlVMTDsKKyAgICBjaGFyX3UJICAgICpwMjsKKyAgICBjaGFyX3UJICAgICpzdHI7CisgICAgc3RydWN0IGJ1ZmZibG9jayAqYnA7CisKKyAgICAvKiBjb21wdXRlIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHN0cmluZyAqLworICAgIGZvciAoYnAgPSBidWZmZXItPmJoX2ZpcnN0LmJfbmV4dDsgYnAgIT0gTlVMTDsgYnAgPSBicC0+Yl9uZXh0KQorCWNvdW50ICs9IChsb25nX3UpU1RSTEVOKGJwLT5iX3N0cik7CisKKyAgICBpZiAoKGNvdW50IHx8IGRvemVybykgJiYgKHAgPSBsYWxsb2MoY291bnQgKyAxLCBUUlVFKSkgIT0gTlVMTCkKKyAgICB7CisJcDIgPSBwOworCWZvciAoYnAgPSBidWZmZXItPmJoX2ZpcnN0LmJfbmV4dDsgYnAgIT0gTlVMTDsgYnAgPSBicC0+Yl9uZXh0KQorCSAgICBmb3IgKHN0ciA9IGJwLT5iX3N0cjsgKnN0cjsgKQorCQkqcDIrKyA9ICpzdHIrKzsKKwkqcDIgPSBOVUw7CisgICAgfQorICAgIHJldHVybiAocCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSByZWNvcmQgYnVmZmVyIGFzIGEgc2luZ2xlIHN0cmluZworICogYW5kIGNsZWFyIHRoZSByZWNvcmQgYnVmZmVyLgorICogS19TUEVDSUFMIGFuZCBDU0kgaW4gdGhlIHJldHVybmVkIHN0cmluZyBhcmUgZXNjYXBlZC4KKyAqLworICAgIGNoYXJfdSAqCitnZXRfcmVjb3JkZWQoKQoreworICAgIGNoYXJfdQkqcDsKKyAgICBzaXplX3QJbGVuOworCisgICAgcCA9IGdldF9idWZmY29udCgmcmVjb3JkYnVmZiwgVFJVRSk7CisgICAgZnJlZV9idWZmKCZyZWNvcmRidWZmKTsKKworICAgIC8qCisgICAgICogUmVtb3ZlIHRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBhZGRlZCB0aGUgbGFzdCB0aW1lLCB0aGVzZSBtdXN0IGJlIHRoZQorICAgICAqIChwb3NzaWJseSBtYXBwZWQpIGNoYXJhY3RlcnMgdGhhdCBzdG9wcGVkIHRoZSByZWNvcmRpbmcuCisgICAgICovCisgICAgbGVuID0gU1RSTEVOKHApOworICAgIGlmICgoaW50KWxlbiA+PSBsYXN0X3JlY29yZGVkX2xlbikKKyAgICB7CisJbGVuIC09IGxhc3RfcmVjb3JkZWRfbGVuOworCXBbbGVuXSA9IE5VTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdoZW4gc3RvcHBpbmcgcmVjb3JkaW5nIGZyb20gSW5zZXJ0IG1vZGUgd2l0aCBDVFJMLU8gcSwgYWxzbyByZW1vdmUgdGhlCisgICAgICogQ1RSTC1PLgorICAgICAqLworICAgIGlmIChsZW4gPiAwICYmIHJlc3RhcnRfZWRpdCAhPSAwICYmIHBbbGVuIC0gMV0gPT0gQ3RybF9PKQorCXBbbGVuIC0gMV0gPSBOVUw7CisKKyAgICByZXR1cm4gKHApOworfQorCisvKgorICogUmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgcmVkbyBidWZmZXIgYXMgYSBzaW5nbGUgc3RyaW5nLgorICogS19TUEVDSUFMIGFuZCBDU0kgaW4gdGhlIHJldHVybmVkIHN0cmluZyBhcmUgZXNjYXBlZC4KKyAqLworICAgIGNoYXJfdSAqCitnZXRfaW5zZXJ0ZWQoKQoreworICAgIHJldHVybihnZXRfYnVmZmNvbnQoJnJlZG9idWZmLCBGQUxTRSkpOworfQorCisvKgorICogYWRkIHN0cmluZyAicyIgYWZ0ZXIgdGhlIGN1cnJlbnQgYmxvY2sgb2YgYnVmZmVyICJidWYiCisgKiBLX1NQRUNJQUwgYW5kIENTSSBzaG91bGQgaGF2ZSBiZWVuIGVzY2FwZWQgYWxyZWFkeS4KKyAqLworICAgIHN0YXRpYyB2b2lkCithZGRfYnVmZihidWYsIHMsIHNsZW4pCisgICAgc3RydWN0IGJ1ZmZoZWFkZXIJKmJ1ZjsKKyAgICBjaGFyX3UJCSpzOworICAgIGxvbmcJCXNsZW47CS8qIGxlbmd0aCBvZiAicyIgb3IgLTEgKi8KK3sKKyAgICBzdHJ1Y3QgYnVmZmJsb2NrICpwOworICAgIGxvbmdfdQkgICAgbGVuOworCisgICAgaWYgKHNsZW4gPCAwKQorCXNsZW4gPSAobG9uZylTVFJMRU4ocyk7CisgICAgaWYgKHNsZW4gPT0gMCkJCQkJLyogZG9uJ3QgYWRkIGVtcHR5IHN0cmluZ3MgKi8KKwlyZXR1cm47CisKKyAgICBpZiAoYnVmLT5iaF9maXJzdC5iX25leHQgPT0gTlVMTCkJLyogZmlyc3QgYWRkIHRvIGxpc3QgKi8KKyAgICB7CisJYnVmLT5iaF9zcGFjZSA9IDA7CisJYnVmLT5iaF9jdXJyID0gJihidWYtPmJoX2ZpcnN0KTsKKyAgICB9CisgICAgZWxzZSBpZiAoYnVmLT5iaF9jdXJyID09IE5VTEwpCS8qIGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIHJlYWQgKi8KKyAgICB7CisJRU1TRyhfKCJFMjIyOiBBZGQgdG8gcmVhZCBidWZmZXIiKSk7CisJcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChidWYtPmJoX2luZGV4ICE9IDApCisJU1RSQ1BZKGJ1Zi0+YmhfZmlyc3QuYl9uZXh0LT5iX3N0ciwKKwkJCQkgYnVmLT5iaF9maXJzdC5iX25leHQtPmJfc3RyICsgYnVmLT5iaF9pbmRleCk7CisgICAgYnVmLT5iaF9pbmRleCA9IDA7CisKKyAgICBpZiAoYnVmLT5iaF9zcGFjZSA+PSAoaW50KXNsZW4pCisgICAgeworCWxlbiA9IChsb25nX3UpU1RSTEVOKGJ1Zi0+YmhfY3Vyci0+Yl9zdHIpOworCVNUUk5DUFkoYnVmLT5iaF9jdXJyLT5iX3N0ciArIGxlbiwgcywgc2xlbik7CisJYnVmLT5iaF9jdXJyLT5iX3N0cltsZW4gKyBzbGVuXSA9IE5VTDsKKwlidWYtPmJoX3NwYWNlIC09IHNsZW47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKHNsZW4gPCBNSU5JTUFMX1NJWkUpCisJICAgIGxlbiA9IE1JTklNQUxfU0laRTsKKwllbHNlCisJICAgIGxlbiA9IHNsZW47CisJcCA9IChzdHJ1Y3QgYnVmZmJsb2NrICopbGFsbG9jKChsb25nX3UpKHNpemVvZihzdHJ1Y3QgYnVmZmJsb2NrKSArIGxlbiksCisJCQkJCQkJCQlUUlVFKTsKKwlpZiAocCA9PSBOVUxMKQorCSAgICByZXR1cm47IC8qIG5vIHNwYWNlLCBqdXN0IGZvcmdldCBpdCAqLworCWJ1Zi0+Ymhfc3BhY2UgPSBsZW4gLSBzbGVuOworCVNUUk5DUFkocC0+Yl9zdHIsIHMsIHNsZW4pOworCXAtPmJfc3RyW3NsZW5dID0gTlVMOworCisJcC0+Yl9uZXh0ID0gYnVmLT5iaF9jdXJyLT5iX25leHQ7CisJYnVmLT5iaF9jdXJyLT5iX25leHQgPSBwOworCWJ1Zi0+YmhfY3VyciA9IHA7CisgICAgfQorICAgIHJldHVybjsKK30KKworLyoKKyAqIEFkZCBudW1iZXIgIm4iIHRvIGJ1ZmZlciAiYnVmIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCithZGRfbnVtX2J1ZmYoYnVmLCBuKQorICAgIHN0cnVjdCBidWZmaGVhZGVyICpidWY7CisgICAgbG9uZwkgICAgICBuOworeworICAgIGNoYXJfdQludW1iZXJbMzJdOworCisgICAgc3ByaW50ZigoY2hhciAqKW51bWJlciwgIiVsZCIsIG4pOworICAgIGFkZF9idWZmKGJ1ZiwgbnVtYmVyLCAtMUwpOworfQorCisvKgorICogQWRkIGNoYXJhY3RlciAnYycgdG8gYnVmZmVyICJidWYiLgorICogVHJhbnNsYXRlcyBzcGVjaWFsIGtleXMsIE5VTCwgQ1NJLCBLX1NQRUNJQUwgYW5kIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLgorICovCisgICAgc3RhdGljIHZvaWQKK2FkZF9jaGFyX2J1ZmYoYnVmLCBjKQorICAgIHN0cnVjdCBidWZmaGVhZGVyCSpidWY7CisgICAgaW50CQkJYzsKK3sKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgY2hhcl91CWJ5dGVzW01CX01BWEJZVEVTICsgMV07CisgICAgaW50CQlsZW47CisgICAgaW50CQlpOworI2VuZGlmCisgICAgY2hhcl91CXRlbXBbNF07CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKElTX1NQRUNJQUwoYykpCisJbGVuID0gMTsKKyAgICBlbHNlCisJbGVuID0gKCptYl9jaGFyMmJ5dGVzKShjLCBieXRlcyk7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQorICAgIHsKKwlpZiAoIUlTX1NQRUNJQUwoYykpCisJICAgIGMgPSBieXRlc1tpXTsKKyNlbmRpZgorCisJaWYgKElTX1NQRUNJQUwoYykgfHwgYyA9PSBLX1NQRUNJQUwgfHwgYyA9PSBOVUwpCisJeworCSAgICAvKiB0cmFuc2xhdGUgc3BlY2lhbCBrZXkgY29kZSBpbnRvIHRocmVlIGJ5dGUgc2VxdWVuY2UgKi8KKwkgICAgdGVtcFswXSA9IEtfU1BFQ0lBTDsKKwkgICAgdGVtcFsxXSA9IEtfU0VDT05EKGMpOworCSAgICB0ZW1wWzJdID0gS19USElSRChjKTsKKwkgICAgdGVtcFszXSA9IE5VTDsKKwl9CisjaWZkZWYgRkVBVF9HVUkKKwllbHNlIGlmIChjID09IENTSSkKKwl7CisJICAgIC8qIFRyYW5zbGF0ZSBhIENTSSB0byBhIENTSSAtIEtTX0VYVFJBIC0gS0VfQ1NJIHNlcXVlbmNlICovCisJICAgIHRlbXBbMF0gPSBDU0k7CisJICAgIHRlbXBbMV0gPSBLU19FWFRSQTsKKwkgICAgdGVtcFsyXSA9IChpbnQpS0VfQ1NJOworCSAgICB0ZW1wWzNdID0gTlVMOworCX0KKyNlbmRpZgorCWVsc2UKKwl7CisJICAgIHRlbXBbMF0gPSBjOworCSAgICB0ZW1wWzFdID0gTlVMOworCX0KKwlhZGRfYnVmZihidWYsIHRlbXAsIC0xTCk7CisjaWZkZWYgRkVBVF9NQllURQorICAgIH0KKyNlbmRpZgorfQorCisvKgorICogR2V0IG9uZSBieXRlIGZyb20gdGhlIHN0dWZmIGJ1ZmZlci4KKyAqIElmIGFkdmFuY2UgPT0gVFJVRSBnbyB0byB0aGUgbmV4dCBjaGFyLgorICogTm8gdHJhbnNsYXRpb24gaXMgZG9uZSBLX1NQRUNJQUwgYW5kIENTSSBhcmUgZXNjYXBlZC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3JlYWRfc3R1ZmYoYWR2YW5jZSkKKyAgICBpbnQJCWFkdmFuY2U7Cit7CisgICAgY2hhcl91CQljOworICAgIHN0cnVjdCBidWZmYmxvY2sJKmN1cnI7CisKKyAgICBpZiAoc3R1ZmZidWZmLmJoX2ZpcnN0LmJfbmV4dCA9PSBOVUxMKSAgLyogYnVmZmVyIGlzIGVtcHR5ICovCisJcmV0dXJuIE5VTDsKKworICAgIGN1cnIgPSBzdHVmZmJ1ZmYuYmhfZmlyc3QuYl9uZXh0OworICAgIGMgPSBjdXJyLT5iX3N0cltzdHVmZmJ1ZmYuYmhfaW5kZXhdOworCisgICAgaWYgKGFkdmFuY2UpCisgICAgeworCWlmIChjdXJyLT5iX3N0clsrK3N0dWZmYnVmZi5iaF9pbmRleF0gPT0gTlVMKQorCXsKKwkgICAgc3R1ZmZidWZmLmJoX2ZpcnN0LmJfbmV4dCA9IGN1cnItPmJfbmV4dDsKKwkgICAgdmltX2ZyZWUoY3Vycik7CisJICAgIHN0dWZmYnVmZi5iaF9pbmRleCA9IDA7CisJfQorICAgIH0KKyAgICByZXR1cm4gYzsKK30KKworLyoKKyAqIFByZXBhcmUgdGhlIHN0dWZmIGJ1ZmZlciBmb3IgcmVhZGluZyAoaWYgaXQgY29udGFpbnMgc29tZXRoaW5nKS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzdGFydF9zdHVmZigpCit7CisgICAgaWYgKHN0dWZmYnVmZi5iaF9maXJzdC5iX25leHQgIT0gTlVMTCkKKyAgICB7CisJc3R1ZmZidWZmLmJoX2N1cnIgPSAmKHN0dWZmYnVmZi5iaF9maXJzdCk7CisJc3R1ZmZidWZmLmJoX3NwYWNlID0gMDsKKyAgICB9Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgc3R1ZmYgYnVmZmVyIGlzIGVtcHR5LgorICovCisgICAgaW50CitzdHVmZl9lbXB0eSgpCit7CisgICAgcmV0dXJuIChzdHVmZmJ1ZmYuYmhfZmlyc3QuYl9uZXh0ID09IE5VTEwpOworfQorCisvKgorICogU2V0IGEgdHlwZWFoZWFkIGNoYXJhY3RlciB0aGF0IHdvbid0IGJlIGZsdXNoZWQuCisgKi8KKyAgICB2b2lkCit0eXBlYWhlYWRfbm9mbHVzaChjKQorICAgIGludAkJYzsKK3sKKyAgICB0eXBlYWhlYWRfY2hhciA9IGM7Cit9CisKKy8qCisgKiBSZW1vdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHVmZiBidWZmZXIgYW5kIHRoZSBtYXBwZWQgY2hhcmFjdGVycyBpbiB0aGUKKyAqIHR5cGVhaGVhZCBidWZmZXIgKHVzZWQgaW4gY2FzZSBvZiBhbiBlcnJvcikuICBJZiAndHlwZWFoZWFkJyBpcyB0cnVlLAorICogZmx1c2ggYWxsIHR5cGVhaGVhZCBjaGFyYWN0ZXJzICh1c2VkIHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBDVFJMLUMpLgorICovCisgICAgdm9pZAorZmx1c2hfYnVmZmVycyh0eXBlYWhlYWQpCisgICAgaW50IHR5cGVhaGVhZDsKK3sKKyAgICBpbml0X3R5cGVidWYoKTsKKworICAgIHN0YXJ0X3N0dWZmKCk7CisgICAgd2hpbGUgKHJlYWRfc3R1ZmYoVFJVRSkgIT0gTlVMKQorCTsKKworICAgIGlmICh0eXBlYWhlYWQpCSAgICAvKiByZW1vdmUgYWxsIHR5cGVhaGVhZCAqLworICAgIHsKKwkvKgorCSAqIFdlIGhhdmUgdG8gZ2V0IGFsbCBjaGFyYWN0ZXJzLCBiZWNhdXNlIHdlIG1heSBkZWxldGUgdGhlIGZpcnN0IHBhcnQKKwkgKiBvZiBhbiBlc2NhcGUgc2VxdWVuY2UuCisJICogSW4gYW4geHRlcm0gd2UgZ2V0IG9uZSBjaGFyIGF0IGEgdGltZSBhbmQgd2UgaGF2ZSB0byBnZXQgdGhlbSBhbGwuCisJICovCisJd2hpbGUgKGluY2hhcih0eXBlYnVmLnRiX2J1ZiwgdHlwZWJ1Zi50Yl9idWZsZW4gLSAxLCAxMEwsCisJCQkJCQkgIHR5cGVidWYudGJfY2hhbmdlX2NudCkgIT0gMCkKKwkgICAgOworCXR5cGVidWYudGJfb2ZmID0gTUFYTUFQTEVOOworCXR5cGVidWYudGJfbGVuID0gMDsKKyAgICB9CisgICAgZWxzZQkJICAgIC8qIHJlbW92ZSBtYXBwZWQgY2hhcmFjdGVycyBvbmx5ICovCisgICAgeworCXR5cGVidWYudGJfb2ZmICs9IHR5cGVidWYudGJfbWFwbGVuOworCXR5cGVidWYudGJfbGVuIC09IHR5cGVidWYudGJfbWFwbGVuOworICAgIH0KKyAgICB0eXBlYnVmLnRiX21hcGxlbiA9IDA7CisgICAgdHlwZWJ1Zi50Yl9zaWxlbnQgPSAwOworICAgIGNtZF9zaWxlbnQgPSBGQUxTRTsKKyAgICB0eXBlYnVmLnRiX25vX2FiYnJfY250ID0gMDsKK30KKworLyoKKyAqIFRoZSBwcmV2aW91cyBjb250ZW50cyBvZiB0aGUgcmVkbyBidWZmZXIgaXMga2VwdCBpbiBvbGRfcmVkb2J1ZmZlci4KKyAqIFRoaXMgaXMgdXNlZCBmb3IgdGhlIENUUkwtTyA8Lj4gY29tbWFuZCBpbiBpbnNlcnQgbW9kZS4KKyAqLworICAgIHZvaWQKK1Jlc2V0UmVkb2J1ZmYoKQoreworICAgIGlmICghYmxvY2tfcmVkbykKKyAgICB7CisJZnJlZV9idWZmKCZvbGRfcmVkb2J1ZmYpOworCW9sZF9yZWRvYnVmZiA9IHJlZG9idWZmOworCXJlZG9idWZmLmJoX2ZpcnN0LmJfbmV4dCA9IE5VTEw7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpIHx8IGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFNhdmUgcmVkb2J1ZmYgYW5kIG9sZF9yZWRvYnVmZiB0byBzYXZlX3JlZG9idWZmIGFuZCBzYXZlX29sZF9yZWRvYnVmZi4KKyAqIFVzZWQgYmVmb3JlIGV4ZWN1dGluZyBhdXRvY29tbWFuZHMgYW5kIHVzZXIgZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW50IHNhdmVfbGV2ZWwgPSAwOworCisgICAgdm9pZAorc2F2ZVJlZG9idWZmKCkKK3sKKyAgICBjaGFyX3UJKnM7CisKKyAgICBpZiAoc2F2ZV9sZXZlbCsrID09IDApCisgICAgeworCXNhdmVfcmVkb2J1ZmYgPSByZWRvYnVmZjsKKwlyZWRvYnVmZi5iaF9maXJzdC5iX25leHQgPSBOVUxMOworCXNhdmVfb2xkX3JlZG9idWZmID0gb2xkX3JlZG9idWZmOworCW9sZF9yZWRvYnVmZi5iaF9maXJzdC5iX25leHQgPSBOVUxMOworCisJLyogTWFrZSBhIGNvcHksIHNvIHRoYXQgIjpub3JtYWwgLiIgaW4gYSBmdW5jdGlvbiB3b3Jrcy4gKi8KKwlzID0gZ2V0X2J1ZmZjb250KCZzYXZlX3JlZG9idWZmLCBGQUxTRSk7CisJaWYgKHMgIT0gTlVMTCkKKwl7CisJICAgIGFkZF9idWZmKCZyZWRvYnVmZiwgcywgLTFMKTsKKwkgICAgdmltX2ZyZWUocyk7CisJfQorICAgIH0KK30KKworLyoKKyAqIFJlc3RvcmUgcmVkb2J1ZmYgYW5kIG9sZF9yZWRvYnVmZiBmcm9tIHNhdmVfcmVkb2J1ZmYgYW5kIHNhdmVfb2xkX3JlZG9idWZmLgorICogVXNlZCBhZnRlciBleGVjdXRpbmcgYXV0b2NvbW1hbmRzIGFuZCB1c2VyIGZ1bmN0aW9ucy4KKyAqLworICAgIHZvaWQKK3Jlc3RvcmVSZWRvYnVmZigpCit7CisgICAgaWYgKC0tc2F2ZV9sZXZlbCA9PSAwKQorICAgIHsKKwlmcmVlX2J1ZmYoJnJlZG9idWZmKTsKKwlyZWRvYnVmZiA9IHNhdmVfcmVkb2J1ZmY7CisJZnJlZV9idWZmKCZvbGRfcmVkb2J1ZmYpOworCW9sZF9yZWRvYnVmZiA9IHNhdmVfb2xkX3JlZG9idWZmOworICAgIH0KK30KKyNlbmRpZgorCisvKgorICogQXBwZW5kICJzIiB0byB0aGUgcmVkbyBidWZmZXIuCisgKiBLX1NQRUNJQUwgYW5kIENTSSBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gZXNjYXBlZC4KKyAqLworICAgIHZvaWQKK0FwcGVuZFRvUmVkb2J1ZmYocykKKyAgICBjaGFyX3UJICAgKnM7Cit7CisgICAgaWYgKCFibG9ja19yZWRvKQorCWFkZF9idWZmKCZyZWRvYnVmZiwgcywgLTFMKTsKK30KKworLyoKKyAqIEFwcGVuZCB0byBSZWRvIGJ1ZmZlciBsaXRlcmFsbHksIGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyB3aXRoIENUUkwtVi4KKyAqIEtfU1BFQ0lBTCBhbmQgQ1NJIGFyZSBlc2NhcGVkIGFzIHdlbGwuCisgKi8KKyAgICB2b2lkCitBcHBlbmRUb1JlZG9idWZmTGl0KHMpCisgICAgY2hhcl91CSpzOworeworICAgIGludAkJYzsKKyAgICBjaGFyX3UJKnN0YXJ0OworCisgICAgaWYgKGJsb2NrX3JlZG8pCisJcmV0dXJuOworCisgICAgd2hpbGUgKCpzICE9IE5VTCkKKyAgICB7CisJLyogUHV0IGEgc3RyaW5nIG9mIG5vcm1hbCBjaGFyYWN0ZXJzIGluIHRoZSByZWRvIGJ1ZmZlciAodGhhdCdzCisJICogZmFzdGVyKS4gKi8KKwlzdGFydCA9IHM7CisJd2hpbGUgKCpzID49ICcgJworI2lmbmRlZiBFQkNESUMKKwkJJiYgKnMgPCBERUwJLyogRUJDRElDOiBhbGwgY2hhcnMgYWJvdmUgc3BhY2UgYXJlIG5vcm1hbCAqLworI2VuZGlmCisJCSkKKwkgICAgKytzOworCisJLyogRG9uJ3QgcHV0ICcwJyBvciAnXicgYXMgbGFzdCBjaGFyYWN0ZXIsIGp1c3QgaW4gY2FzZSBhIENUUkwtRCBpcworCSAqIHR5cGVkIG5leHQuICovCisJaWYgKCpzID09IE5VTCAmJiAoc1stMV0gPT0gJzAnIHx8IHNbLTFdID09ICdeJykpCisJICAgIC0tczsKKwlpZiAocyA+IHN0YXJ0KQorCSAgICBhZGRfYnVmZigmcmVkb2J1ZmYsIHN0YXJ0LCAobG9uZykocyAtIHN0YXJ0KSk7CisKKwlpZiAoKnMgIT0gTlVMKQorCXsKKwkgICAgLyogSGFuZGxlIGEgc3BlY2lhbCBvciBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAqLworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkgICAgeworCQljID0gKCptYl9wdHIyY2hhcikocyk7CisJCWlmIChlbmNfdXRmOCkKKwkJICAgIC8qIEhhbmRsZSBjb21wb3NpbmcgY2hhcnMgYXMgd2VsbC4gKi8KKwkJICAgIHMgKz0gdXRmX3B0cjJsZW5fY2hlY2socyk7CisJCWVsc2UKKwkJICAgIHMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKTsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJYyA9ICpzKys7CisJICAgIGlmIChjIDwgJyAnIHx8IGMgPT0gREVMIHx8ICgqcyA9PSBOVUwgJiYgKGMgPT0gJzAnIHx8IGMgPT0gJ14nKSkpCisJCWFkZF9jaGFyX2J1ZmYoJnJlZG9idWZmLCBDdHJsX1YpOworCisJICAgIC8qIENUUkwtViAnMCcgbXVzdCBiZSBpbnNlcnRlZCBhcyBDVFJMLVYgMDQ4IChFQkNESUM6IHhmMCkgKi8KKwkgICAgaWYgKCpzID09IE5VTCAmJiBjID09ICcwJykKKyNpZmRlZiBFQkNESUMKKwkJYWRkX2J1ZmYoJnJlZG9idWZmLCAoY2hhcl91ICopInhmMCIsIDNMKTsKKyNlbHNlCisJCWFkZF9idWZmKCZyZWRvYnVmZiwgKGNoYXJfdSAqKSIwNDgiLCAzTCk7CisjZW5kaWYKKwkgICAgZWxzZQorCQlhZGRfY2hhcl9idWZmKCZyZWRvYnVmZiwgYyk7CisJfQorICAgIH0KK30KKworLyoKKyAqIEFwcGVuZCBhIGNoYXJhY3RlciB0byB0aGUgcmVkbyBidWZmZXIuCisgKiBUcmFuc2xhdGVzIHNwZWNpYWwga2V5cywgTlVMLCBDU0ksIEtfU1BFQ0lBTCBhbmQgbXVsdGlieXRlIGNoYXJhY3RlcnMuCisgKi8KKyAgICB2b2lkCitBcHBlbmRDaGFyVG9SZWRvYnVmZihjKQorICAgIGludAkJICAgYzsKK3sKKyAgICBpZiAoIWJsb2NrX3JlZG8pCisJYWRkX2NoYXJfYnVmZigmcmVkb2J1ZmYsIGMpOworfQorCisvKgorICogQXBwZW5kIGEgbnVtYmVyIHRvIHRoZSByZWRvIGJ1ZmZlci4KKyAqLworICAgIHZvaWQKK0FwcGVuZE51bWJlclRvUmVkb2J1ZmYobikKKyAgICBsb25nCSAgICBuOworeworICAgIGlmICghYmxvY2tfcmVkbykKKwlhZGRfbnVtX2J1ZmYoJnJlZG9idWZmLCBuKTsKK30KKworLyoKKyAqIEFwcGVuZCBzdHJpbmcgInMiIHRvIHRoZSBzdHVmZiBidWZmZXIuCisgKiBDU0kgYW5kIEtfU1BFQ0lBTCBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIGVzY2FwZWQuCisgKi8KKyAgICB2b2lkCitzdHVmZlJlYWRidWZmKHMpCisgICAgY2hhcl91CSpzOworeworICAgIGFkZF9idWZmKCZzdHVmZmJ1ZmYsIHMsIC0xTCk7Cit9CisKKyAgICB2b2lkCitzdHVmZlJlYWRidWZmTGVuKHMsIGxlbikKKyAgICBjaGFyX3UJKnM7CisgICAgbG9uZwlsZW47Cit7CisgICAgYWRkX2J1ZmYoJnN0dWZmYnVmZiwgcywgbGVuKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFN0dWZmICJzIiBpbnRvIHRoZSBzdHVmZiBidWZmZXIsIGxlYXZpbmcgc3BlY2lhbCBrZXkgY29kZXMgdW5tb2RpZmllZCBhbmQKKyAqIGVzY2FwaW5nIG90aGVyIEtfU1BFQ0lBTCBhbmQgQ1NJIGJ5dGVzLgorICovCisgICAgdm9pZAorc3R1ZmZSZWFkYnVmZlNwZWMocykKKyAgICBjaGFyX3UJKnM7Cit7CisgICAgd2hpbGUgKCpzICE9IE5VTCkKKyAgICB7CisJaWYgKCpzID09IEtfU1BFQ0lBTCAmJiBzWzFdICE9IE5VTCAmJiBzWzJdICE9IE5VTCkKKwl7CisJICAgIC8qIEluc2VydCBzcGVjaWFsIGtleSBsaXRlcmFsbHkuICovCisJICAgIHN0dWZmUmVhZGJ1ZmZMZW4ocywgM0wpOworCSAgICBzICs9IDM7CisJfQorCWVsc2UKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIHN0dWZmY2hhclJlYWRidWZmKG1iX3B0cjJjaGFyX2FkdigmcykpOworI2Vsc2UKKwkgICAgc3R1ZmZjaGFyUmVhZGJ1ZmYoKnMrKyk7CisjZW5kaWYKKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqIEFwcGVuZCBhIGNoYXJhY3RlciB0byB0aGUgc3R1ZmYgYnVmZmVyLgorICogVHJhbnNsYXRlcyBzcGVjaWFsIGtleXMsIE5VTCwgQ1NJLCBLX1NQRUNJQUwgYW5kIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLgorICovCisgICAgdm9pZAorc3R1ZmZjaGFyUmVhZGJ1ZmYoYykKKyAgICBpbnQJCSAgIGM7Cit7CisgICAgYWRkX2NoYXJfYnVmZigmc3R1ZmZidWZmLCBjKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIG51bWJlciB0byB0aGUgc3R1ZmYgYnVmZmVyLgorICovCisgICAgdm9pZAorc3R1ZmZudW1SZWFkYnVmZihuKQorICAgIGxvbmcgICAgbjsKK3sKKyAgICBhZGRfbnVtX2J1ZmYoJnN0dWZmYnVmZiwgbik7Cit9CisKKy8qCisgKiBSZWFkIGEgY2hhcmFjdGVyIGZyb20gdGhlIHJlZG8gYnVmZmVyLiAgVHJhbnNsYXRlcyBLX1NQRUNJQUwsIENTSSBhbmQKKyAqIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLgorICogVGhlIHJlZG8gYnVmZmVyIGlzIGxlZnQgYXMgaXQgaXMuCisgKiBpZiBpbml0IGlzIFRSVUUsIHByZXBhcmUgZm9yIHJlZG8sIHJldHVybiBGQUlMIGlmIG5vdGhpbmcgdG8gcmVkbywgT0sKKyAqIG90aGVyd2lzZQorICogaWYgb2xkIGlzIFRSVUUsIHVzZSBvbGRfcmVkb2J1ZmYgaW5zdGVhZCBvZiByZWRvYnVmZgorICovCisgICAgc3RhdGljIGludAorcmVhZF9yZWRvKGluaXQsIG9sZF9yZWRvKQorICAgIGludAkJaW5pdDsKKyAgICBpbnQJCW9sZF9yZWRvOworeworICAgIHN0YXRpYyBzdHJ1Y3QgYnVmZmJsb2NrCSpicDsKKyAgICBzdGF0aWMgY2hhcl91CQkqcDsKKyAgICBpbnQJCQkJYzsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQkJCW47CisgICAgY2hhcl91CQkJYnVmW01CX01BWEJZVEVTXTsKKyAgICBpbnQJCQkJaTsKKyNlbmRpZgorCisgICAgaWYgKGluaXQpCisgICAgeworCWlmIChvbGRfcmVkbykKKwkgICAgYnAgPSBvbGRfcmVkb2J1ZmYuYmhfZmlyc3QuYl9uZXh0OworCWVsc2UKKwkgICAgYnAgPSByZWRvYnVmZi5iaF9maXJzdC5iX25leHQ7CisJaWYgKGJwID09IE5VTEwpCisJICAgIHJldHVybiBGQUlMOworCXAgPSBicC0+Yl9zdHI7CisJcmV0dXJuIE9LOworICAgIH0KKyAgICBpZiAoKGMgPSAqcCkgIT0gTlVMKQorICAgIHsKKwkvKiBSZXZlcnNlIHRoZSBjb252ZXJzaW9uIGRvbmUgYnkgYWRkX2NoYXJfYnVmZigpICovCisjaWZkZWYgRkVBVF9NQllURQorCS8qIEZvciBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGdldCBhbGwgdGhlIGJ5dGVzIGFuZCByZXR1cm4gdGhlCisJICogY29udmVydGVkIGNoYXJhY3Rlci4gKi8KKwlpZiAoaGFzX21ieXRlICYmIChjICE9IEtfU1BFQ0lBTCB8fCBwWzFdID09IEtTX1NQRUNJQUwpKQorCSAgICBuID0gTUJfQllURTJMRU5fQ0hFQ0soYyk7CisJZWxzZQorCSAgICBuID0gMTsKKwlmb3IgKGkgPSAwOyA7ICsraSkKKyNlbmRpZgorCXsKKwkgICAgaWYgKGMgPT0gS19TUEVDSUFMKSAvKiBzcGVjaWFsIGtleSBvciBlc2NhcGVkIEtfU1BFQ0lBTCAqLworCSAgICB7CisJCWMgPSBUT19TUEVDSUFMKHBbMV0sIHBbMl0pOworCQlwICs9IDI7CisJICAgIH0KKyNpZmRlZiBGRUFUX0dVSQorCSAgICBpZiAoYyA9PSBDU0kpCS8qIGVzY2FwZWQgQ1NJICovCisJCXAgKz0gMjsKKyNlbmRpZgorCSAgICBpZiAoKisrcCA9PSBOVUwgJiYgYnAtPmJfbmV4dCAhPSBOVUxMKQorCSAgICB7CisJCWJwID0gYnAtPmJfbmV4dDsKKwkJcCA9IGJwLT5iX3N0cjsKKwkgICAgfQorI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgYnVmW2ldID0gYzsKKwkgICAgaWYgKGkgPT0gbiAtIDEpCS8qIGxhc3QgYnl0ZSBvZiBhIGNoYXJhY3RlciAqLworCSAgICB7CisJCWlmIChuICE9IDEpCisJCSAgICBjID0gKCptYl9wdHIyY2hhcikoYnVmKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYyA9ICpwOworCSAgICBpZiAoYyA9PSBOVUwpCS8qIGNhbm5vdCBoYXBwZW4/ICovCisJCWJyZWFrOworI2VuZGlmCisJfQorICAgIH0KKworICAgIHJldHVybiBjOworfQorCisvKgorICogQ29weSB0aGUgcmVzdCBvZiB0aGUgcmVkbyBidWZmZXIgaW50byB0aGUgc3R1ZmYgYnVmZmVyIChpbiBhIHNsb3cgd2F5KS4KKyAqIElmIG9sZF9yZWRvIGlzIFRSVUUsIHVzZSBvbGRfcmVkb2J1ZmYgaW5zdGVhZCBvZiByZWRvYnVmZi4KKyAqIFRoZSBlc2NhcGVkIEtfU1BFQ0lBTCBhbmQgQ1NJIGFyZSBjb3BpZWQgd2l0aG91dCB0cmFuc2xhdGlvbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjb3B5X3JlZG8ob2xkX3JlZG8pCisgICAgaW50CSAgICBvbGRfcmVkbzsKK3sKKyAgICBpbnQJICAgIGM7CisKKyAgICB3aGlsZSAoKGMgPSByZWFkX3JlZG8oRkFMU0UsIG9sZF9yZWRvKSkgIT0gTlVMKQorCXN0dWZmY2hhclJlYWRidWZmKGMpOworfQorCisvKgorICogU3R1ZmYgdGhlIHJlZG8gYnVmZmVyIGludG8gdGhlIHN0dWZmYnVmZi4KKyAqIEluc2VydCB0aGUgcmVkbyBjb3VudCBpbnRvIHRoZSBjb21tYW5kLgorICogSWYgIm9sZF9yZWRvIiBpcyBUUlVFLCB0aGUgbGFzdCBidXQgb25lIGNvbW1hbmQgaXMgcmVwZWF0ZWQKKyAqIGluc3RlYWQgb2YgdGhlIGxhc3QgY29tbWFuZCAoaW5zZXJ0aW5nIHRleHQpLiBUaGlzIGlzIHVzZWQgZm9yCisgKiBDVFJMLU8gPC4+IGluIGluc2VydCBtb2RlCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CitzdGFydF9yZWRvKGNvdW50LCBvbGRfcmVkbykKKyAgICBsb25nICAgIGNvdW50OworICAgIGludAkgICAgb2xkX3JlZG87Cit7CisgICAgaW50CSAgICBjOworCisgICAgLyogaW5pdCB0aGUgcG9pbnRlcnM7IHJldHVybiBpZiBub3RoaW5nIHRvIHJlZG8gKi8KKyAgICBpZiAocmVhZF9yZWRvKFRSVUUsIG9sZF9yZWRvKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworCisgICAgYyA9IHJlYWRfcmVkbyhGQUxTRSwgb2xkX3JlZG8pOworCisgICAgLyogY29weSB0aGUgYnVmZmVyIG5hbWUsIGlmIHByZXNlbnQgKi8KKyAgICBpZiAoYyA9PSAnIicpCisgICAgeworCWFkZF9idWZmKCZzdHVmZmJ1ZmYsIChjaGFyX3UgKikiXCIiLCAxTCk7CisJYyA9IHJlYWRfcmVkbyhGQUxTRSwgb2xkX3JlZG8pOworCisJLyogaWYgYSBudW1iZXJlZCBidWZmZXIgaXMgdXNlZCwgaW5jcmVtZW50IHRoZSBudW1iZXIgKi8KKwlpZiAoYyA+PSAnMScgJiYgYyA8ICc5JykKKwkgICAgKytjOworCWFkZF9jaGFyX2J1ZmYoJnN0dWZmYnVmZiwgYyk7CisJYyA9IHJlYWRfcmVkbyhGQUxTRSwgb2xkX3JlZG8pOworICAgIH0KKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKGMgPT0gJ3YnKSAgIC8qIHJlZG8gVmlzdWFsICovCisgICAgeworCVZJc3VhbCA9IGN1cndpbi0+d19jdXJzb3I7CisJVklzdWFsX2FjdGl2ZSA9IFRSVUU7CisJVklzdWFsX3NlbGVjdCA9IEZBTFNFOworCVZJc3VhbF9yZXNlbGVjdCA9IFRSVUU7CisJcmVkb19WSXN1YWxfYnVzeSA9IFRSVUU7CisJYyA9IHJlYWRfcmVkbyhGQUxTRSwgb2xkX3JlZG8pOworICAgIH0KKyNlbmRpZgorCisgICAgLyogdHJ5IHRvIGVudGVyIHRoZSBjb3VudCAoaW4gcGxhY2Ugb2YgYSBwcmV2aW91cyBjb3VudCkgKi8KKyAgICBpZiAoY291bnQpCisgICAgeworCXdoaWxlIChWSU1fSVNESUdJVChjKSkJLyogc2tpcCAib2xkIiBjb3VudCAqLworCSAgICBjID0gcmVhZF9yZWRvKEZBTFNFLCBvbGRfcmVkbyk7CisJYWRkX251bV9idWZmKCZzdHVmZmJ1ZmYsIGNvdW50KTsKKyAgICB9CisKKyAgICAvKiBjb3B5IGZyb20gdGhlIHJlZG8gYnVmZmVyIGludG8gdGhlIHN0dWZmIGJ1ZmZlciAqLworICAgIGFkZF9jaGFyX2J1ZmYoJnN0dWZmYnVmZiwgYyk7CisgICAgY29weV9yZWRvKG9sZF9yZWRvKTsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBSZXBlYXQgdGhlIGxhc3QgaW5zZXJ0IChSLCBvLCBPLCBhLCBBLCBpIG9yIEkgY29tbWFuZCkgYnkgc3R1ZmZpbmcKKyAqIHRoZSByZWRvIGJ1ZmZlciBpbnRvIHRoZSBzdHVmZmJ1ZmYuCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK3N0YXJ0X3JlZG9faW5zKCkKK3sKKyAgICBpbnQJICAgIGM7CisKKyAgICBpZiAocmVhZF9yZWRvKFRSVUUsIEZBTFNFKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworICAgIHN0YXJ0X3N0dWZmKCk7CisKKyAgICAvKiBza2lwIHRoZSBjb3VudCBhbmQgdGhlIGNvbW1hbmQgY2hhcmFjdGVyICovCisgICAgd2hpbGUgKChjID0gcmVhZF9yZWRvKEZBTFNFLCBGQUxTRSkpICE9IE5VTCkKKyAgICB7CisJaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSJBYUlpUnJPbyIsIGMpICE9IE5VTEwpCisJeworCSAgICBpZiAoYyA9PSAnTycgfHwgYyA9PSAnbycpCisJCXN0dWZmUmVhZGJ1ZmYoTkxfU1RSKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIC8qIGNvcHkgdGhlIHR5cGVkIHRleHQgZnJvbSB0aGUgcmVkbyBidWZmZXIgaW50byB0aGUgc3R1ZmYgYnVmZmVyICovCisgICAgY29weV9yZWRvKEZBTFNFKTsKKyAgICBibG9ja19yZWRvID0gVFJVRTsKKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICB2b2lkCitzdG9wX3JlZG9faW5zKCkKK3sKKyAgICBibG9ja19yZWRvID0gRkFMU0U7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHR5cGVidWYudGJfYnVmIHRvIHBvaW50IHRvIHR5cGVidWZfaW5pdC4KKyAqIGFsbG9jKCkgY2Fubm90IGJlIHVzZWQgaGVyZTogSW4gb3V0LW9mLW1lbW9yeSBzaXR1YXRpb25zIGl0IHdvdWxkCisgKiBiZSBpbXBvc3NpYmxlIHRvIHR5cGUgYW55dGhpbmcuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5pdF90eXBlYnVmKCkKK3sKKyAgICBpZiAodHlwZWJ1Zi50Yl9idWYgPT0gTlVMTCkKKyAgICB7CisJdHlwZWJ1Zi50Yl9idWYgPSB0eXBlYnVmX2luaXQ7CisJdHlwZWJ1Zi50Yl9ub3JlbWFwID0gbm9yZW1hcGJ1Zl9pbml0OworCXR5cGVidWYudGJfYnVmbGVuID0gVFlQRUxFTl9JTklUOworCXR5cGVidWYudGJfbGVuID0gMDsKKwl0eXBlYnVmLnRiX29mZiA9IDA7CisJdHlwZWJ1Zi50Yl9jaGFuZ2VfY250ID0gMTsKKyAgICB9Cit9CisKKy8qCisgKiBpbnNlcnQgYSBzdHJpbmcgaW4gcG9zaXRpb24gJ29mZnNldCcgaW4gdGhlIHR5cGVhaGVhZCBidWZmZXIgKGZvciAiQHIiCisgKiBhbmQgIjpub3JtYWwiIGNvbW1hbmQsIHZnZXRvcnBlZWsoKSBhbmQgY2hlY2tfdGVybWNvZGUoKSkKKyAqCisgKiBJZiBub3JlbWFwIGlzIFJFTUFQX1lFUywgbmV3IHN0cmluZyBjYW4gYmUgbWFwcGVkIGFnYWluLgorICogSWYgbm9yZW1hcCBpcyBSRU1BUF9OT05FLCBuZXcgc3RyaW5nIGNhbm5vdCBiZSBtYXBwZWQgYWdhaW4uCisgKiBJZiBub3JlbWFwIGlzIFJFTUFQX1NDUklQVCwgbmV3IHN0cmluZyBjYW5ub3QgYmUgbWFwcGVkIGFnYWluLCBleGNlcHQgZm9yCisgKgkJCXNjcmlwdC1sb2NhbCBtYXBwaW5ncy4KKyAqIElmIG5vcmVtYXAgaXMgPiAwLCB0aGF0IG1hbnkgY2hhcmFjdGVycyBvZiB0aGUgbmV3IHN0cmluZyBjYW5ub3QgYmUgbWFwcGVkLgorICoKKyAqIElmIG5vdHR5cGVkIGlzIFRSVUUsIHRoZSBzdHJpbmcgZG9lcyBub3QgcmV0dXJuIEtleVR5cGVkIChkb24ndCB1c2Ugd2hlbgorICogb2Zmc2V0IGlzIG5vbi16ZXJvISkuCisgKgorICogSWYgc2lsZW50IGlzIFRSVUUsIGNtZF9zaWxlbnQgaXMgc2V0IHdoZW4gdGhlIGNoYXJhY3RlcnMgYXJlIG9idGFpbmVkLgorICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAoraW5zX3R5cGVidWYoc3RyLCBub3JlbWFwLCBvZmZzZXQsIG5vdHR5cGVkLCBzaWxlbnQpCisgICAgY2hhcl91CSpzdHI7CisgICAgaW50CQlub3JlbWFwOworICAgIGludAkJb2Zmc2V0OworICAgIGludAkJbm90dHlwZWQ7CisgICAgaW50CQlzaWxlbnQ7Cit7CisgICAgY2hhcl91CSpzMSwgKnMyOworICAgIGludAkJbmV3bGVuOworICAgIGludAkJYWRkbGVuOworICAgIGludAkJaTsKKyAgICBpbnQJCW5ld29mZjsKKyAgICBpbnQJCXZhbDsKKyAgICBpbnQJCW5ybTsKKworICAgIGluaXRfdHlwZWJ1ZigpOworICAgIGlmICgrK3R5cGVidWYudGJfY2hhbmdlX2NudCA9PSAwKQorCXR5cGVidWYudGJfY2hhbmdlX2NudCA9IDE7CisKKyAgICBhZGRsZW4gPSAoaW50KVNUUkxFTihzdHIpOworICAgIC8qCisgICAgICogRWFzeSBjYXNlOiB0aGVyZSBpcyByb29tIGluIGZyb250IG9mIHR5cGVidWYudGJfYnVmW3R5cGVidWYudGJfb2ZmXQorICAgICAqLworICAgIGlmIChvZmZzZXQgPT0gMCAmJiBhZGRsZW4gPD0gdHlwZWJ1Zi50Yl9vZmYpCisgICAgeworCXR5cGVidWYudGJfb2ZmIC09IGFkZGxlbjsKKwltY2hfbWVtbW92ZSh0eXBlYnVmLnRiX2J1ZiArIHR5cGVidWYudGJfb2ZmLCBzdHIsIChzaXplX3QpYWRkbGVuKTsKKyAgICB9CisgICAgLyoKKyAgICAgKiBOZWVkIHRvIGFsbG9jYXRlIG5ldyBidWZmZXIuCisgICAgICogSW4gdHlwZWJ1Zi50Yl9idWYgdGhlcmUgbXVzdCBhbHdheXMgYmUgcm9vbSBmb3IgMyAqIE1BWE1BUExFTiArIDQKKyAgICAgKiBjaGFyYWN0ZXJzLiAgV2UgYWRkIHNvbWUgZXh0cmEgcm9vbSB0byBhdm9pZCBoYXZpbmcgdG8gYWxsb2NhdGUgdG9vCisgICAgICogb2Z0ZW4uCisgICAgICovCisgICAgZWxzZQorICAgIHsKKwluZXdvZmYgPSBNQVhNQVBMRU4gKyA0OworCW5ld2xlbiA9IHR5cGVidWYudGJfbGVuICsgYWRkbGVuICsgbmV3b2ZmICsgNCAqIChNQVhNQVBMRU4gKyA0KTsKKwlpZiAobmV3bGVuIDwgMCkJCSAgICAvKiBzdHJpbmcgaXMgZ2V0dGluZyB0b28gbG9uZyAqLworCXsKKwkgICAgRU1TRyhfKGVfdG9vY29tcGwpKTsgICAgLyogYWxzbyBjYWxscyBmbHVzaF9idWZmZXJzICovCisJICAgIHNldGN1cnNvcigpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisJczEgPSBhbGxvYyhuZXdsZW4pOworCWlmIChzMSA9PSBOVUxMKQkJICAgIC8qIG91dCBvZiBtZW1vcnkgKi8KKwkgICAgcmV0dXJuIEZBSUw7CisJczIgPSBhbGxvYyhuZXdsZW4pOworCWlmIChzMiA9PSBOVUxMKQkJICAgIC8qIG91dCBvZiBtZW1vcnkgKi8KKwl7CisJICAgIHZpbV9mcmVlKHMxKTsKKwkgICAgcmV0dXJuIEZBSUw7CisJfQorCXR5cGVidWYudGJfYnVmbGVuID0gbmV3bGVuOworCisJLyogY29weSB0aGUgb2xkIGNoYXJzLCBiZWZvcmUgdGhlIGluc2VydGlvbiBwb2ludCAqLworCW1jaF9tZW1tb3ZlKHMxICsgbmV3b2ZmLCB0eXBlYnVmLnRiX2J1ZiArIHR5cGVidWYudGJfb2ZmLAorCQkJCQkJCSAgICAgIChzaXplX3Qpb2Zmc2V0KTsKKwkvKiBjb3B5IHRoZSBuZXcgY2hhcnMgKi8KKwltY2hfbWVtbW92ZShzMSArIG5ld29mZiArIG9mZnNldCwgc3RyLCAoc2l6ZV90KWFkZGxlbik7CisJLyogY29weSB0aGUgb2xkIGNoYXJzLCBhZnRlciB0aGUgaW5zZXJ0aW9uIHBvaW50LCBpbmNsdWRpbmcgdGhlCU5VTCBhdAorCSAqIHRoZSBlbmQgKi8KKwltY2hfbWVtbW92ZShzMSArIG5ld29mZiArIG9mZnNldCArIGFkZGxlbiwKKwkJCQkgICAgIHR5cGVidWYudGJfYnVmICsgdHlwZWJ1Zi50Yl9vZmYgKyBvZmZzZXQsCisJCQkJICAgICAgIChzaXplX3QpKHR5cGVidWYudGJfbGVuIC0gb2Zmc2V0ICsgMSkpOworCWlmICh0eXBlYnVmLnRiX2J1ZiAhPSB0eXBlYnVmX2luaXQpCisJICAgIHZpbV9mcmVlKHR5cGVidWYudGJfYnVmKTsKKwl0eXBlYnVmLnRiX2J1ZiA9IHMxOworCisJbWNoX21lbW1vdmUoczIgKyBuZXdvZmYsIHR5cGVidWYudGJfbm9yZW1hcCArIHR5cGVidWYudGJfb2ZmLAorCQkJCQkJCSAgICAgIChzaXplX3Qpb2Zmc2V0KTsKKwltY2hfbWVtbW92ZShzMiArIG5ld29mZiArIG9mZnNldCArIGFkZGxlbiwKKwkJICAgdHlwZWJ1Zi50Yl9ub3JlbWFwICsgdHlwZWJ1Zi50Yl9vZmYgKyBvZmZzZXQsCisJCQkJCSAgIChzaXplX3QpKHR5cGVidWYudGJfbGVuIC0gb2Zmc2V0KSk7CisJaWYgKHR5cGVidWYudGJfbm9yZW1hcCAhPSBub3JlbWFwYnVmX2luaXQpCisJICAgIHZpbV9mcmVlKHR5cGVidWYudGJfbm9yZW1hcCk7CisJdHlwZWJ1Zi50Yl9ub3JlbWFwID0gczI7CisKKwl0eXBlYnVmLnRiX29mZiA9IG5ld29mZjsKKyAgICB9CisgICAgdHlwZWJ1Zi50Yl9sZW4gKz0gYWRkbGVuOworCisgICAgLyogSWYgbm9yZW1hcCA9PSBSRU1BUF9TQ1JJUFQ6IGRvIHJlbWFwIHNjcmlwdC1sb2NhbCBtYXBwaW5ncy4gKi8KKyAgICBpZiAobm9yZW1hcCA9PSBSRU1BUF9TQ1JJUFQpCisJdmFsID0gUk1fU0NSSVBUOworICAgIGVsc2UKKwl2YWwgPSBSTV9OT05FOworCisgICAgLyoKKyAgICAgKiBBZGp1c3QgdHlwZWJ1Zi50Yl9ub3JlbWFwW10gZm9yIHRoZSBuZXcgY2hhcmFjdGVyczoKKyAgICAgKiBJZiBub3JlbWFwID09IFJFTUFQX05PTkUgb3IgUkVNQVBfU0NSSVBUOiBuZXcgY2hhcmFjdGVycyBhcmUKKyAgICAgKgkJCShzb21ldGltZXMpIG5vdCByZW1hcHBhYmxlCisgICAgICogSWYgbm9yZW1hcCA9PSBSRU1BUF9ZRVM6IGFsbCB0aGUgbmV3IGNoYXJhY3RlcnMgYXJlIG1hcHBhYmxlCisgICAgICogSWYgbm9yZW1hcCAgPiAwOiAibm9yZW1hcCIgY2hhcmFjdGVycyBhcmUgbm90IHJlbWFwcGFibGUsIHRoZSByZXN0CisgICAgICoJCQltYXBwYWJsZQorICAgICAqLworICAgIGlmIChub3JlbWFwIDwgMCkKKwlucm0gPSBhZGRsZW47CisgICAgZWxzZQorCW5ybSA9IG5vcmVtYXA7CisgICAgZm9yIChpID0gMDsgaSA8IGFkZGxlbjsgKytpKQorCXR5cGVidWYudGJfbm9yZW1hcFt0eXBlYnVmLnRiX29mZiArIGkgKyBvZmZzZXRdID0KKwkJCQkJCSAgKC0tbnJtID49IDApID8gdmFsIDogUk1fWUVTOworCisgICAgLyogdGJfbWFwbGVuIGFuZCB0Yl9zaWxlbnQgb25seSByZW1lbWJlciB0aGUgbGVuZ3RoIG9mIG1hcHBlZCBhbmQvb3IKKyAgICAgKiBzaWxlbnQgbWFwcGluZ3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIsIGFzc3VtaW5nIHRoYXQgYSBtYXBwZWQKKyAgICAgKiBzZXF1ZW5jZSBkb2Vzbid0IHJlc3VsdCBpbiB0eXBlZCBjaGFyYWN0ZXJzLiAqLworICAgIGlmIChub3R0eXBlZCB8fCB0eXBlYnVmLnRiX21hcGxlbiA+IG9mZnNldCkKKwl0eXBlYnVmLnRiX21hcGxlbiArPSBhZGRsZW47CisgICAgaWYgKHNpbGVudCB8fCB0eXBlYnVmLnRiX3NpbGVudCA+IG9mZnNldCkKKyAgICB7CisJdHlwZWJ1Zi50Yl9zaWxlbnQgKz0gYWRkbGVuOworCWNtZF9zaWxlbnQgPSBUUlVFOworICAgIH0KKyAgICBpZiAodHlwZWJ1Zi50Yl9ub19hYmJyX2NudCAmJiBvZmZzZXQgPT0gMCkJLyogYW5kIG5vdCB1c2VkIGZvciBhYmJyZXYucyAqLworCXR5cGVidWYudGJfbm9fYWJicl9jbnQgKz0gYWRkbGVuOworCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgdGhlIHR5cGVhaGVhZCBidWZmZXIgd2FzIGNoYW5nZWQgKHdoaWxlIHdhaXRpbmcgZm9yIGEKKyAqIGNoYXJhY3RlciB0byBhcnJpdmUpLiAgSGFwcGVucyB3aGVuIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBhIGNsaWVudC4KKyAqIEJ1dCBjaGVjayBpbiBhIG1vcmUgZ2VuZXJpYyB3YXkgdG8gYXZvaWQgdHJvdWJsZTogV2hlbiAidHlwZWJ1Zi50Yl9idWYiCisgKiBjaGFuZ2VkIGl0IHdhcyByZWFsbG9jYXRlZCBhbmQgdGhlIG9sZCBwb2ludGVyIGNhbiBubyBsb25nZXIgYmUgdXNlZC4KKyAqIE9yICJ0eXBlYnVmLnRiX29mZiIgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIGFuZCB3ZSB3b3VsZCBvdmVyd3JpdGUgY2hhcmFjdGVycworICogdGhhdCB3YXMganVzdCBhZGRlZC4KKyAqLworICAgIGludAordHlwZWJ1Zl9jaGFuZ2VkKHRiX2NoYW5nZV9jbnQpCisgICAgaW50CQl0Yl9jaGFuZ2VfY250OwkvKiBvbGQgdmFsdWUgb2YgdHlwZWJ1Zi50Yl9jaGFuZ2VfY250ICovCit7CisgICAgcmV0dXJuICh0Yl9jaGFuZ2VfY250ICE9IDAgJiYgKHR5cGVidWYudGJfY2hhbmdlX2NudCAhPSB0Yl9jaGFuZ2VfY250CisjaWZkZWYgRkVBVF9DTElFTlRTRVJWRVIKKwkgICAgfHwgcmVjZWl2ZWRfZnJvbV9jbGllbnQKKyNlbmRpZgorCSAgICkpOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgdGhlcmUgYXJlIG5vIGNoYXJhY3RlcnMgaW4gdGhlIHR5cGVhaGVhZCBidWZmZXIgdGhhdCBoYXZlCisgKiBub3QgYmVlbiB0eXBlZCAocmVzdWx0IGZyb20gYSBtYXBwaW5nIG9yIGNvbWUgZnJvbSAiOm5vcm1hbCIpLgorICovCisgICAgaW50Cit0eXBlYnVmX3R5cGVkKCkKK3sKKyAgICByZXR1cm4gdHlwZWJ1Zi50Yl9tYXBsZW4gPT0gMDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbWFwcGVkIChvciBub3QgdHlwZWQpLgorICovCisgICAgaW50Cit0eXBlYnVmX21hcGxlbigpCit7CisgICAgcmV0dXJuIHR5cGVidWYudGJfbWFwbGVuOworfQorCisvKgorICogcmVtb3ZlICJsZW4iIGNoYXJhY3RlcnMgZnJvbSB0eXBlYnVmLnRiX2J1Zlt0eXBlYnVmLnRiX29mZiArIG9mZnNldF0KKyAqLworICAgIHZvaWQKK2RlbF90eXBlYnVmKGxlbiwgb2Zmc2V0KQorICAgIGludAlsZW47CisgICAgaW50CW9mZnNldDsKK3sKKyAgICBpbnQJICAgIGk7CisKKyAgICBpZiAobGVuID09IDApCisJcmV0dXJuOwkJLyogbm90aGluZyB0byBkbyAqLworCisgICAgdHlwZWJ1Zi50Yl9sZW4gLT0gbGVuOworCisgICAgLyoKKyAgICAgKiBFYXN5IGNhc2U6IEp1c3QgaW5jcmVhc2UgdHlwZWJ1Zi50Yl9vZmYuCisgICAgICovCisgICAgaWYgKG9mZnNldCA9PSAwICYmIHR5cGVidWYudGJfYnVmbGVuIC0gKHR5cGVidWYudGJfb2ZmICsgbGVuKQorCQkJCQkJCSA+PSAzICogTUFYTUFQTEVOICsgMykKKwl0eXBlYnVmLnRiX29mZiArPSBsZW47CisgICAgLyoKKyAgICAgKiBIYXZlIHRvIG1vdmUgdGhlIGNoYXJhY3RlcnMgaW4gdHlwZWJ1Zi50Yl9idWZbXSBhbmQgdHlwZWJ1Zi50Yl9ub3JlbWFwW10KKyAgICAgKi8KKyAgICBlbHNlCisgICAgeworCWkgPSB0eXBlYnVmLnRiX29mZiArIG9mZnNldDsKKwkvKgorCSAqIExlYXZlIHNvbWUgZXh0cmEgcm9vbSBhdCB0aGUgZW5kIHRvIGF2b2lkIHJlYWxsb2NhdGlvbi4KKwkgKi8KKwlpZiAodHlwZWJ1Zi50Yl9vZmYgPiBNQVhNQVBMRU4pCisJeworCSAgICBtY2hfbWVtbW92ZSh0eXBlYnVmLnRiX2J1ZiArIE1BWE1BUExFTiwKKwkJCSAgICAgdHlwZWJ1Zi50Yl9idWYgKyB0eXBlYnVmLnRiX29mZiwgKHNpemVfdClvZmZzZXQpOworCSAgICBtY2hfbWVtbW92ZSh0eXBlYnVmLnRiX25vcmVtYXAgKyBNQVhNQVBMRU4sCisJCQkgdHlwZWJ1Zi50Yl9ub3JlbWFwICsgdHlwZWJ1Zi50Yl9vZmYsIChzaXplX3Qpb2Zmc2V0KTsKKwkgICAgdHlwZWJ1Zi50Yl9vZmYgPSBNQVhNQVBMRU47CisJfQorCS8qIGFkanVzdCB0eXBlYnVmLnRiX2J1ZiAoaW5jbHVkZSB0aGUgTlVMIGF0IHRoZSBlbmQpICovCisJbWNoX21lbW1vdmUodHlwZWJ1Zi50Yl9idWYgKyB0eXBlYnVmLnRiX29mZiArIG9mZnNldCwKKwkJCQkJCSAgICAgdHlwZWJ1Zi50Yl9idWYgKyBpICsgbGVuLAorCQkJCSAgICAgICAoc2l6ZV90KSh0eXBlYnVmLnRiX2xlbiAtIG9mZnNldCArIDEpKTsKKwkvKiBhZGp1c3QgdHlwZWJ1Zi50Yl9ub3JlbWFwW10gKi8KKwltY2hfbWVtbW92ZSh0eXBlYnVmLnRiX25vcmVtYXAgKyB0eXBlYnVmLnRiX29mZiArIG9mZnNldCwKKwkJCQkJCSB0eXBlYnVmLnRiX25vcmVtYXAgKyBpICsgbGVuLAorCQkJCQkgICAoc2l6ZV90KSh0eXBlYnVmLnRiX2xlbiAtIG9mZnNldCkpOworICAgIH0KKworICAgIGlmICh0eXBlYnVmLnRiX21hcGxlbiA+IG9mZnNldCkJCS8qIGFkanVzdCB0Yl9tYXBsZW4gKi8KKyAgICB7CisJaWYgKHR5cGVidWYudGJfbWFwbGVuIDwgb2Zmc2V0ICsgbGVuKQorCSAgICB0eXBlYnVmLnRiX21hcGxlbiA9IG9mZnNldDsKKwllbHNlCisJICAgIHR5cGVidWYudGJfbWFwbGVuIC09IGxlbjsKKyAgICB9CisgICAgaWYgKHR5cGVidWYudGJfc2lsZW50ID4gb2Zmc2V0KQkJLyogYWRqdXN0IHRiX3NpbGVudCAqLworICAgIHsKKwlpZiAodHlwZWJ1Zi50Yl9zaWxlbnQgPCBvZmZzZXQgKyBsZW4pCisJICAgIHR5cGVidWYudGJfc2lsZW50ID0gb2Zmc2V0OworCWVsc2UKKwkgICAgdHlwZWJ1Zi50Yl9zaWxlbnQgLT0gbGVuOworICAgIH0KKyAgICBpZiAodHlwZWJ1Zi50Yl9ub19hYmJyX2NudCA+IG9mZnNldCkJLyogYWRqdXN0IHRiX25vX2FiYnJfY250ICovCisgICAgeworCWlmICh0eXBlYnVmLnRiX25vX2FiYnJfY250IDwgb2Zmc2V0ICsgbGVuKQorCSAgICB0eXBlYnVmLnRiX25vX2FiYnJfY250ID0gb2Zmc2V0OworCWVsc2UKKwkgICAgdHlwZWJ1Zi50Yl9ub19hYmJyX2NudCAtPSBsZW47CisgICAgfQorCisjaWZkZWYgRkVBVF9DTElFTlRTRVJWRVIKKyAgICAvKiBSZXNldCB0aGUgZmxhZyB0aGF0IHRleHQgcmVjZWl2ZWQgZnJvbSBhIGNsaWVudCB3YXMgaW5zZXJ0ZWQgaW4gdGhlCisgICAgICogdHlwZWFoZWFkIGJ1ZmZlci4gKi8KKyAgICByZWNlaXZlZF9mcm9tX2NsaWVudCA9IEZBTFNFOworI2VuZGlmCisgICAgaWYgKCsrdHlwZWJ1Zi50Yl9jaGFuZ2VfY250ID09IDApCisJdHlwZWJ1Zi50Yl9jaGFuZ2VfY250ID0gMTsKK30KKworLyoKKyAqIFdyaXRlIHR5cGVkIGNoYXJhY3RlcnMgdG8gc2NyaXB0IGZpbGUuCisgKiBJZiByZWNvcmRpbmcgaXMgb24gcHV0IHRoZSBjaGFyYWN0ZXIgaW4gdGhlIHJlY29yZGJ1ZmZlci4KKyAqLworICAgIHN0YXRpYyB2b2lkCitnb3RjaGFycyhzLCBsZW4pCisgICAgY2hhcl91CSpzOworICAgIGludAkJbGVuOworeworICAgIGludAkJYzsKKyAgICBjaGFyX3UJYnVmWzJdOworCisgICAgLyogcmVtZW1iZXIgaG93IG1hbnkgY2hhcnMgd2VyZSBsYXN0IHJlY29yZGVkICovCisgICAgaWYgKFJlY29yZGluZykKKwlsYXN0X3JlY29yZGVkX2xlbiArPSBsZW47CisKKyAgICBidWZbMV0gPSBOVUw7CisgICAgd2hpbGUgKGxlbi0tKQorICAgIHsKKwkvKiBIYW5kbGUgb25lIGJ5dGUgYXQgYSB0aW1lOyBubyB0cmFuc2xhdGlvbiB0byBiZSBkb25lLiAqLworCWMgPSAqcysrOworCXVwZGF0ZXNjcmlwdChjKTsKKworCWlmIChSZWNvcmRpbmcpCisJeworCSAgICBidWZbMF0gPSBjOworCSAgICBhZGRfYnVmZigmcmVjb3JkYnVmZiwgYnVmLCAxTCk7CisJfQorICAgIH0KKyAgICBtYXlfc3luY191bmRvKCk7CisKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICAvKiBvdXRwdXQgImRlYnVnIG1vZGUiIG1lc3NhZ2UgbmV4dCB0aW1lIGluIGRlYnVnIG1vZGUgKi8KKyAgICBkZWJ1Z19kaWRfbXNnID0gRkFMU0U7CisjZW5kaWYKKworICAgIC8qIFNpbmNlIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIHR5cGVkLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHRvIGJlIGluCisgICAgICogYW5vdGhlciBtYXBwaW5nLiAgU2VhcmNoIHN0cmluZyB3aWxsIGJlIGtlcHQgaW4gaGlzdG9yeS4gKi8KKyAgICArK21hcHRpY2s7Cit9CisKKy8qCisgKiBTeW5jIHVuZG8uICBDYWxsZWQgd2hlbiB0eXBlZCBjaGFyYWN0ZXJzIGFyZSBvYnRhaW5lZCBmcm9tIHRoZSB0eXBlYWhlYWQKKyAqIGJ1ZmZlciwgb3Igd2hlbiBhIG1lbnUgaXMgdXNlZC4KKyAqIERvIG5vdCBzeW5jOgorICogLSBJbiBJbnNlcnQgbW9kZSwgdW5sZXNzIGN1cnNvciBrZXkgaGFzIGJlZW4gdXNlZC4KKyAqIC0gV2hpbGUgcmVhZGluZyBhIHNjcmlwdCBmaWxlLgorICogLSBXaGVuIG5vX3Vfc3luYyBpcyBub24temVyby4KKyAqLworICAgIHN0YXRpYyB2b2lkCittYXlfc3luY191bmRvKCkKK3sKKyAgICBpZiAoKCEoU3RhdGUgJiAoSU5TRVJUICsgQ01ETElORSkpIHx8IGFycm93X3VzZWQpCisJICAgICYmIHNjcmlwdGluW2N1cnNjcmlwdF0gPT0gTlVMTCAmJiBub191X3N5bmMgPT0gMCkKKwl1X3N5bmMoKTsKK30KKworLyoKKyAqIE1ha2UgInR5cGVidWYiIGVtcHR5IGFuZCBhbGxvY2F0ZSBuZXcgYnVmZmVycy4KKyAqIFJldHVybnMgRkFJTCB3aGVuIG91dCBvZiBtZW1vcnkuCisgKi8KKyAgICBpbnQKK2FsbG9jX3R5cGVidWYoKQoreworICAgIHR5cGVidWYudGJfYnVmID0gYWxsb2MoVFlQRUxFTl9JTklUKTsKKyAgICB0eXBlYnVmLnRiX25vcmVtYXAgPSBhbGxvYyhUWVBFTEVOX0lOSVQpOworICAgIGlmICh0eXBlYnVmLnRiX2J1ZiA9PSBOVUxMIHx8IHR5cGVidWYudGJfbm9yZW1hcCA9PSBOVUxMKQorICAgIHsKKwlmcmVlX3R5cGVidWYoKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisgICAgdHlwZWJ1Zi50Yl9idWZsZW4gPSBUWVBFTEVOX0lOSVQ7CisgICAgdHlwZWJ1Zi50Yl9vZmYgPSAwOworICAgIHR5cGVidWYudGJfbGVuID0gMDsKKyAgICB0eXBlYnVmLnRiX21hcGxlbiA9IDA7CisgICAgdHlwZWJ1Zi50Yl9zaWxlbnQgPSAwOworICAgIHR5cGVidWYudGJfbm9fYWJicl9jbnQgPSAwOworICAgIGlmICgrK3R5cGVidWYudGJfY2hhbmdlX2NudCA9PSAwKQorCXR5cGVidWYudGJfY2hhbmdlX2NudCA9IDE7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogRnJlZSB0aGUgYnVmZmVycyBvZiAidHlwZWJ1ZiIuCisgKi8KKyAgICB2b2lkCitmcmVlX3R5cGVidWYoKQoreworICAgIHZpbV9mcmVlKHR5cGVidWYudGJfYnVmKTsKKyAgICB2aW1fZnJlZSh0eXBlYnVmLnRiX25vcmVtYXApOworfQorCisvKgorICogV2hlbiBkb2luZyAiOnNvISBmaWxlIiwgdGhlIGN1cnJlbnQgdHlwZWFoZWFkIG5lZWRzIHRvIGJlIHNhdmVkLCBhbmQKKyAqIHJlc3RvcmVkIHdoZW4gImZpbGUiIGhhcyBiZWVuIHJlYWQgY29tcGxldGVseS4KKyAqLworc3RhdGljIHR5cGVidWZfVCBzYXZlZF90eXBlYnVmW05TQ1JJUFRdOworCisgICAgaW50CitzYXZlX3R5cGVidWYoKQoreworICAgIGluaXRfdHlwZWJ1ZigpOworICAgIHNhdmVkX3R5cGVidWZbY3Vyc2NyaXB0XSA9IHR5cGVidWY7CisgICAgLyogSWYgb3V0IG9mIG1lbW9yeTogcmVzdG9yZSB0eXBlYnVmIGFuZCBjbG9zZSBmaWxlLiAqLworICAgIGlmIChhbGxvY190eXBlYnVmKCkgPT0gRkFJTCkKKyAgICB7CisJY2xvc2VzY3JpcHQoKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoRkVBVF9FWF9FWFRSQSkgfHwgZGVmaW5lZChQUk9UTykKKworLyoKKyAqIFNhdmUgYWxsIHRocmVlIGtpbmRzIG9mIHR5cGVhaGVhZCwgc28gdGhhdCB0aGUgdXNlciBtdXN0IHR5cGUgYXQgYSBwcm9tcHQuCisgKi8KKyAgICB2b2lkCitzYXZlX3R5cGVhaGVhZCh0cCkKKyAgICB0YXNhdmVfVAkqdHA7Cit7CisgICAgdHAtPnNhdmVfdHlwZWJ1ZiA9IHR5cGVidWY7CisgICAgdHAtPnR5cGVidWZfdmFsaWQgPSAoYWxsb2NfdHlwZWJ1ZigpID09IE9LKTsKKyAgICBpZiAoIXRwLT50eXBlYnVmX3ZhbGlkKQorCXR5cGVidWYgPSB0cC0+c2F2ZV90eXBlYnVmOworCisgICAgdHAtPnNhdmVfc3R1ZmZidWZmID0gc3R1ZmZidWZmOworICAgIHN0dWZmYnVmZi5iaF9maXJzdC5iX25leHQgPSBOVUxMOworIyBpZmRlZiBVU0VfSU5QVVRfQlVGCisgICAgdHAtPnNhdmVfaW5wdXRidWYgPSBnZXRfaW5wdXRfYnVmKCk7CisjIGVuZGlmCit9CisKKy8qCisgKiBSZXN0b3JlIHRoZSB0eXBlYWhlYWQgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIGNhbGxpbmcgc2F2ZV90eXBlYWhlYWQoKS4KKyAqIFRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkLCBjYW4gb25seSBiZSBjYWxsZWQgb25jZSEKKyAqLworICAgIHZvaWQKK3Jlc3RvcmVfdHlwZWFoZWFkKHRwKQorICAgIHRhc2F2ZV9UCSp0cDsKK3sKKyAgICBpZiAodHAtPnR5cGVidWZfdmFsaWQpCisgICAgeworCWZyZWVfdHlwZWJ1ZigpOworCXR5cGVidWYgPSB0cC0+c2F2ZV90eXBlYnVmOworICAgIH0KKworICAgIGZyZWVfYnVmZigmc3R1ZmZidWZmKTsKKyAgICBzdHVmZmJ1ZmYgPSB0cC0+c2F2ZV9zdHVmZmJ1ZmY7CisjIGlmZGVmIFVTRV9JTlBVVF9CVUYKKyAgICBzZXRfaW5wdXRfYnVmKHRwLT5zYXZlX2lucHV0YnVmKTsKKyMgZW5kaWYKK30KKyNlbmRpZgorCisvKgorICogT3BlbiBhIG5ldyBzY3JpcHQgZmlsZSBmb3IgdGhlICI6c291cmNlISIgY29tbWFuZC4KKyAqLworICAgIHZvaWQKK29wZW5zY3JpcHQobmFtZSwgZGlyZWN0bHkpCisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJZGlyZWN0bHk7CS8qIHdoZW4gVFJVRSBleGVjdXRlIGRpcmVjdGx5ICovCit7CisgICAgaWYgKGN1cnNjcmlwdCArIDEgPT0gTlNDUklQVCkKKyAgICB7CisJRU1TRyhfKGVfbmVzdGluZykpOworCXJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc2NyaXB0aW5bY3Vyc2NyaXB0XSAhPSBOVUxMKQkvKiBhbHJlYWR5IHJlYWRpbmcgc2NyaXB0ICovCisJKytjdXJzY3JpcHQ7CisJCQkJLyogdXNlIE5hbWVCdWZmIGZvciBleHBhbmRlZCBuYW1lICovCisgICAgZXhwYW5kX2VudihuYW1lLCBOYW1lQnVmZiwgTUFYUEFUSEwpOworICAgIGlmICgoc2NyaXB0aW5bY3Vyc2NyaXB0XSA9IG1jaF9mb3BlbigoY2hhciAqKU5hbWVCdWZmLCBSRUFEQklOKSkgPT0gTlVMTCkKKyAgICB7CisJRU1TRzIoXyhlX25vdG9wZW4pLCBuYW1lKTsKKwlpZiAoY3Vyc2NyaXB0KQorCSAgICAtLWN1cnNjcmlwdDsKKwlyZXR1cm47CisgICAgfQorICAgIGlmIChzYXZlX3R5cGVidWYoKSA9PSBGQUlMKQorCXJldHVybjsKKworICAgIC8qCisgICAgICogRXhlY3V0ZSB0aGUgY29tbWFuZHMgZnJvbSB0aGUgZmlsZSByaWdodCBub3cgd2hlbiB1c2luZyAiOnNvdXJjZSEiCisgICAgICogYWZ0ZXIgIjpnbG9iYWwiIG9yICI6YXJnZG8iIG9yIGluIGEgbG9vcC4gIEFsc28gd2hlbiBhbm90aGVyIGNvbW1hbmQKKyAgICAgKiBmb2xsb3dzLiAgVGhpcyBtZWFucyB0aGUgZGlzcGxheSB3b24ndCBiZSB1cGRhdGVkLiAgRG9uJ3QgZG8gdGhpcworICAgICAqIGFsd2F5cywgIm1ha2UgdGVzdCIgd291bGQgZmFpbC4KKyAgICAgKi8KKyAgICBpZiAoZGlyZWN0bHkpCisgICAgeworCW9wYXJnX1QJb2E7CisJaW50CW9sZGN1cnNjcmlwdDsKKwlpbnQJc2F2ZV9TdGF0ZSA9IFN0YXRlOworCWludAlzYXZlX3Jlc3RhcnRfZWRpdCA9IHJlc3RhcnRfZWRpdDsKKwlpbnQJc2F2ZV9pbnNlcnRtb2RlID0gcF9pbTsKKwlpbnQJc2F2ZV9maW5pc2hfb3AgPSBmaW5pc2hfb3A7CisJaW50CXNhdmVfbXNnX3Njcm9sbCA9IG1zZ19zY3JvbGw7CisKKwlTdGF0ZSA9IE5PUk1BTDsKKwltc2dfc2Nyb2xsID0gRkFMU0U7CS8qIG5vIG1zZyBzY3JvbGxpbmcgaW4gTm9ybWFsIG1vZGUgKi8KKwlyZXN0YXJ0X2VkaXQgPSAwOwkvKiBkb24ndCBnbyB0byBJbnNlcnQgbW9kZSAqLworCXBfaW0gPSBGQUxTRTsJCS8qIGRvbid0IHVzZSAnaW5zZXJ0bW9kZScgKi8KKwljbGVhcl9vcGFyZygmb2EpOworCWZpbmlzaF9vcCA9IEZBTFNFOworCisJb2xkY3Vyc2NyaXB0ID0gY3Vyc2NyaXB0OworCWRvCisJeworCSAgICB1cGRhdGVfdG9wbGluZV9jdXJzb3IoKTsJLyogdXBkYXRlIGN1cnNvciBwb3NpdGlvbiBhbmQgdG9wbGluZSAqLworCSAgICBub3JtYWxfY21kKCZvYSwgRkFMU0UpOwkvKiBleGVjdXRlIG9uZSBjb21tYW5kICovCisJICAgIHZwZWVrYygpOwkJCS8qIGNoZWNrIGZvciBlbmQgb2YgZmlsZSAqLworCX0KKwl3aGlsZSAoc2NyaXB0aW5bb2xkY3Vyc2NyaXB0XSAhPSBOVUxMKTsKKworCVN0YXRlID0gc2F2ZV9TdGF0ZTsKKwltc2dfc2Nyb2xsID0gc2F2ZV9tc2dfc2Nyb2xsOworCXJlc3RhcnRfZWRpdCA9IHNhdmVfcmVzdGFydF9lZGl0OworCXBfaW0gPSBzYXZlX2luc2VydG1vZGU7CisJZmluaXNoX29wID0gc2F2ZV9maW5pc2hfb3A7CisgICAgfQorfQorCisvKgorICogQ2xvc2UgdGhlIGN1cnJlbnRseSBhY3RpdmUgaW5wdXQgc2NyaXB0LgorICovCisgICAgc3RhdGljIHZvaWQKK2Nsb3Nlc2NyaXB0KCkKK3sKKyAgICBmcmVlX3R5cGVidWYoKTsKKyAgICB0eXBlYnVmID0gc2F2ZWRfdHlwZWJ1ZltjdXJzY3JpcHRdOworCisgICAgZmNsb3NlKHNjcmlwdGluW2N1cnNjcmlwdF0pOworICAgIHNjcmlwdGluW2N1cnNjcmlwdF0gPSBOVUxMOworICAgIGlmIChjdXJzY3JpcHQgPiAwKQorCS0tY3Vyc2NyaXB0OworfQorCisjaWYgZGVmaW5lZChGRUFUX0lOU19FWFBBTkQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmV0dXJuIFRSVUUgd2hlbiByZWFkaW5nIGtleXMgZnJvbSBhIHNjcmlwdCBmaWxlLgorICovCisgICAgaW50Cit1c2luZ19zY3JpcHQoKQoreworICAgIHJldHVybiBzY3JpcHRpbltjdXJzY3JpcHRdICE9IE5VTEw7Cit9CisjZW5kaWYKKworLyoKKyAqIHVwZGF0ZXNjaXB0KCkgaXMgY2FsbGVkIHdoZW4gYSBjaGFyYWN0ZXIgY2FuIGJlIHdyaXR0ZW4gaW50byB0aGUgc2NyaXB0IGZpbGUKKyAqIG9yIHdoZW4gd2UgaGF2ZSB3YWl0ZWQgc29tZSB0aW1lIGZvciBhIGNoYXJhY3RlciAoYyA9PSAwKQorICoKKyAqIEFsbCB0aGUgY2hhbmdlZCBtZW1maWxlcyBhcmUgc3luY2VkIGlmIGMgPT0gMCBvciB3aGVuIHRoZSBudW1iZXIgb2YgdHlwZWQKKyAqIGNoYXJhY3RlcnMgcmVhY2hlcyAndXBkYXRlY291bnQnIGFuZCAndXBkYXRlY291bnQnIGlzIG5vbi16ZXJvLgorICovCisgICAgdm9pZAordXBkYXRlc2NyaXB0KGMpCisgICAgaW50IGM7Cit7CisgICAgc3RhdGljIGludAkgICAgY291bnQgPSAwOworCisgICAgaWYgKGMgJiYgc2NyaXB0b3V0KQorCXB1dGMoYywgc2NyaXB0b3V0KTsKKyAgICBpZiAoYyA9PSAwIHx8IChwX3VjID4gMCAmJiArK2NvdW50ID49IHBfdWMpKQorICAgIHsKKwltbF9zeW5jX2FsbChjID09IDAsIFRSVUUpOworCWNvdW50ID0gMDsKKyAgICB9Cit9CisKKyNkZWZpbmUgS0xfUEFSVF9LRVkgLTEJCS8qIGtleWxlbiB2YWx1ZSBmb3IgaW5jb21wbGV0ZSBrZXktY29kZSAqLworI2RlZmluZSBLTF9QQVJUX01BUCAtMgkJLyoga2V5bGVuIHZhbHVlIGZvciBpbmNvbXBsZXRlIG1hcHBpbmcgKi8KKworc3RhdGljIGludCBvbGRfY2hhciA9IC0xOwkvKiBjaGFyYWN0ZXIgcHV0IGJhY2sgYnkgdnVuZ2V0YygpICovCitzdGF0aWMgaW50IG9sZF9tb2RfbWFzazsJLyogbW9kX21hc2sgZm9yIHVuZ290dGVuIGNoYXJhY3RlciAqLworCisvKgorICogR2V0IHRoZSBuZXh0IGlucHV0IGNoYXJhY3Rlci4KKyAqIENhbiByZXR1cm4gYSBzcGVjaWFsIGtleSBvciBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLgorICogQ2FuIHJldHVybiBOVUwgd2hlbiBjYWxsZWQgcmVjdXJzaXZlbHksIHVzZSBzYWZlX3ZnZXRjKCkgaWYgdGhhdCdzIG5vdAorICogd2FudGVkLgorICogVGhpcyB0cmFuc2xhdGVzIGVzY2FwZWQgS19TUEVDSUFMIGFuZCBDU0kgYnl0ZXMgdG8gYSBLX1NQRUNJQUwgb3IgQ1NJIGJ5dGUuCisgKiBDb2xsZWN0cyB0aGUgYnl0ZXMgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGludG8gdGhlIHdob2xlIGNoYXJhY3Rlci4KKyAqIFJldHVybnMgdGhlIG1vZGlmZXJzIGluIHRoZSBnbG9iYWwgIm1vZF9tYXNrIi4KKyAqLworICAgIGludAordmdldGMoKQoreworICAgIGludAkJYywgYzI7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJbjsKKyAgICBjaGFyX3UJYnVmW01CX01BWEJZVEVTXTsKKyAgICBpbnQJCWk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgYSBjaGFyYWN0ZXIgd2FzIHB1dCBiYWNrIHdpdGggdnVuZ2V0YywgaXQgd2FzIGFscmVhZHkgcHJvY2Vzc2VkLgorICAgICAqIFJldHVybiBpdCBkaXJlY3RseS4KKyAgICAgKi8KKyAgICBpZiAob2xkX2NoYXIgIT0gLTEpCisgICAgeworCWMgPSBvbGRfY2hhcjsKKwlvbGRfY2hhciA9IC0xOworCW1vZF9tYXNrID0gb2xkX21vZF9tYXNrOworCXJldHVybiBjOworICAgIH0KKworICAgIG1vZF9tYXNrID0gMHgwOworICAgIGxhc3RfcmVjb3JkZWRfbGVuID0gMDsKKyAgICBmb3IgKDs7KQkJCS8qIHRoaXMgaXMgZG9uZSB0d2ljZSBpZiB0aGVyZSBhcmUgbW9kaWZpZXJzICovCisgICAgeworCWlmIChtb2RfbWFzaykJCS8qIG5vIG1hcHBpbmcgYWZ0ZXIgbW9kaWZpZXIgaGFzIGJlZW4gcmVhZCAqLworCXsKKwkgICAgKytub19tYXBwaW5nOworCSAgICArK2FsbG93X2tleXM7CisJfQorCWMgPSB2Z2V0b3JwZWVrKFRSVUUpOworCWlmIChtb2RfbWFzaykKKwl7CisJICAgIC0tbm9fbWFwcGluZzsKKwkgICAgLS1hbGxvd19rZXlzOworCX0KKworCS8qIEdldCB0d28gZXh0cmEgYnl0ZXMgZm9yIHNwZWNpYWwga2V5cyAqLworCWlmIChjID09IEtfU1BFQ0lBTAorI2lmZGVmIEZFQVRfR1VJCisJCXx8IGMgPT0gQ1NJCisjZW5kaWYKKwkgICApCisJeworCSAgICArK25vX21hcHBpbmc7CisJICAgIGMyID0gdmdldG9ycGVlayhUUlVFKTsJLyogbm8gbWFwcGluZyBmb3IgdGhlc2UgY2hhcnMgKi8KKwkgICAgYyA9IHZnZXRvcnBlZWsoVFJVRSk7CisJICAgIC0tbm9fbWFwcGluZzsKKwkgICAgaWYgKGMyID09IEtTX01PRElGSUVSKQorCSAgICB7CisJCW1vZF9tYXNrID0gYzsKKwkJY29udGludWU7CisJICAgIH0KKwkgICAgYyA9IFRPX1NQRUNJQUwoYzIsIGMpOworCisjaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpICYmIGRlZmluZWQoRkVBVF9NRU5VKSAmJiBkZWZpbmVkKEZFQVRfVEVBUk9GRikKKwkgICAgLyogSGFuZGxlIEtfVEVBUk9GRiBoZXJlLCB0aGUgY2FsbGVyIG9mIHZnZXRjKCkgZG9lc24ndCBuZWVkIHRvCisJICAgICAqIGtub3cgdGhhdCBhIG1lbnUgd2FzIHRvcm4gb2ZmICovCisJICAgIGlmIChjID09IEtfVEVBUk9GRikKKwkgICAgeworCQljaGFyX3UJbmFtZVsyMDBdOworCQlpbnQJaTsKKworCQkvKiBnZXQgbWVudSBwYXRoLCBpdCBlbmRzIHdpdGggYSA8Q1I+ICovCisJCWZvciAoaSA9IDA7IChjID0gdmdldG9ycGVlayhUUlVFKSkgIT0gJ1xyJzsgKQorCQl7CisJCSAgICBuYW1lW2ldID0gYzsKKwkJICAgIGlmIChpIDwgMTk5KQorCQkJKytpOworCQl9CisJCW5hbWVbaV0gPSBOVUw7CisJCWd1aV9tYWtlX3RlYXJvZmYobmFtZSk7CisJCWNvbnRpbnVlOworCSAgICB9CisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSQorCSAgICAvKiBUcmFuc2xhdGUgS19DU0kgdG8gQ1NJLiAgVGhlIHNwZWNpYWwga2V5IGlzIG9ubHkgdXNlZCB0byBhdm9pZAorCSAgICAgKiBpdCBiZWluZyByZWNvZ25pemVkIGFzIHRoZSBzdGFydCBvZiBhIHNwZWNpYWwga2V5LiAqLworCSAgICBpZiAoYyA9PSBLX0NTSSkKKwkJYyA9IENTSTsKKyNlbmRpZgorCX0KKyNpZmRlZiBNU0RPUworCS8qCisJICogSWYgS19OVUwgd2FzIHR5cGVkLCBpdCBpcyByZXBsYWNlZCBieSBLX05VTCwgMyBpbiBtY2hfaW5jaGFyKCkuCisJICogRGVsZXRlIHRoZSAzIGhlcmUuCisJICovCisJZWxzZSBpZiAoYyA9PSBLX05VTCAmJiB2cGVla2MoKSA9PSAzKQorCSAgICAodm9pZCl2Z2V0b3JwZWVrKFRSVUUpOworI2VuZGlmCisKKwlpZiAoYyA+PSBGSVJTVF9LRVlQQUQgJiYgYyA8PSBMQVNUX0tFWVBBRCkKKwl7CisJICAgIC8qIGEga2V5cGFkIGtleSB3YXMgbm90IG1hcHBlZCwgdXNlIGl0IGxpa2UgaXRzIEFTQ0lJIGVxdWl2YWxlbnQgKi8KKwkgICAgc3dpdGNoIChjKQorCSAgICB7CisJCWNhc2UgS19LUExVUzoJCWMgPSAnKyc7IGJyZWFrOworCQljYXNlIEtfS01JTlVTOgkJYyA9ICctJzsgYnJlYWs7CisJCWNhc2UgS19LRElWSURFOgkJYyA9ICcvJzsgYnJlYWs7CisJCWNhc2UgS19LTVVMVElQTFk6CWMgPSAnKic7IGJyZWFrOworCQljYXNlIEtfS0VOVEVSOgkJYyA9IENBUjsgYnJlYWs7CisJCWNhc2UgS19LUE9JTlQ6CQljID0gJy4nOyBicmVhazsKKwkJY2FzZSBLX0swOgkJYyA9ICcwJzsgYnJlYWs7CisJCWNhc2UgS19LMToJCWMgPSAnMSc7IGJyZWFrOworCQljYXNlIEtfSzI6CQljID0gJzInOyBicmVhazsKKwkJY2FzZSBLX0szOgkJYyA9ICczJzsgYnJlYWs7CisJCWNhc2UgS19LNDoJCWMgPSAnNCc7IGJyZWFrOworCQljYXNlIEtfSzU6CQljID0gJzUnOyBicmVhazsKKwkJY2FzZSBLX0s2OgkJYyA9ICc2JzsgYnJlYWs7CisJCWNhc2UgS19LNzoJCWMgPSAnNyc7IGJyZWFrOworCQljYXNlIEtfSzg6CQljID0gJzgnOyBicmVhazsKKwkJY2FzZSBLX0s5OgkJYyA9ICc5JzsgYnJlYWs7CisJICAgIH0KKwl9CisKKyNpZmRlZiBGRUFUX01CWVRFCisJLyogRm9yIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgZ2V0IGFsbCB0aGUgYnl0ZXMgYW5kIHJldHVybiB0aGUKKwkgKiBjb252ZXJ0ZWQgY2hhcmFjdGVyLgorCSAqIE5vdGU6IFRoaXMgd2lsbCBsb29wIHVudGlsIGVub3VnaCBieXRlcyBhcmUgcmVjZWl2ZWQhCisJICovCisJaWYgKGhhc19tYnl0ZSAmJiAobiA9IE1CX0JZVEUyTEVOX0NIRUNLKGMpKSA+IDEpCisJeworCSAgICArK25vX21hcHBpbmc7CisJICAgIGJ1ZlswXSA9IGM7CisJICAgIGZvciAoaSA9IDE7IGkgPCBuOyArK2kpCisJICAgIHsKKwkJYnVmW2ldID0gdmdldG9ycGVlayhUUlVFKTsKKwkJaWYgKGJ1ZltpXSA9PSBLX1NQRUNJQUwKKyNpZmRlZiBGRUFUX0dVSQorCQkJfHwgYnVmW2ldID09IENTSQorI2VuZGlmCisJCQkpCisJCXsKKwkJICAgIC8qIE11c3QgYmUgYSBLX1NQRUNJQUwgLSBLU19TUEVDSUFMIC0gS0VfRklMTEVSIHNlcXVlbmNlLAorCQkgICAgICogd2hpY2ggcmVwcmVzZW50cyBhIEtfU1BFQ0lBTCAoMHg4MCksCisJCSAgICAgKiBvciBhIENTSSAtIEtTX0VYVFJBIC0gS0VfQ1NJIHNlcXVlbmNlLCB3aGljaCByZXByZXNlbnRzCisJCSAgICAgKiBhIENTSSAoMHg5QiksCisJCSAgICAgKiBvZiBhIEtfU1BFQ0lBTCAtIEtTX0VYVFJBIC0gS0VfQ1NJLCB3aGljaCBpcyBDU0kgdG9vLiAqLworCQkgICAgYyA9IHZnZXRvcnBlZWsoVFJVRSk7CisJCSAgICBpZiAodmdldG9ycGVlayhUUlVFKSA9PSAoaW50KUtFX0NTSSAmJiBjID09IEtTX0VYVFJBKQorCQkJYnVmW2ldID0gQ1NJOworCQl9CisJICAgIH0KKwkgICAgLS1ub19tYXBwaW5nOworCSAgICBjID0gKCptYl9wdHIyY2hhcikoYnVmKTsKKwl9CisjZW5kaWYKKworCXJldHVybiBjOworICAgIH0KK30KKworLyoKKyAqIExpa2UgdmdldGMoKSwgYnV0IG5ldmVyIHJldHVybiBhIE5VTCB3aGVuIGNhbGxlZCByZWN1cnNpdmVseSwgZ2V0IGEga2V5CisgKiBkaXJlY3RseSBmcm9tIHRoZSB1c2VyIChpZ25vcmluZyB0eXBlYWhlYWQpLgorICovCisgICAgaW50CitzYWZlX3ZnZXRjKCkKK3sKKyAgICBpbnQJYzsKKworICAgIGMgPSB2Z2V0YygpOworICAgIGlmIChjID09IE5VTCkKKwljID0gZ2V0X2tleXN0cm9rZSgpOworICAgIHJldHVybiBjOworfQorCisvKgorICogQ2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlLCBzdWNoIHRoYXQgdmdldGMoKSB3aWxsIG5vdCBibG9jay4KKyAqIElmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhIHNwZWNpYWwgY2hhcmFjdGVyIG9yIG11bHRpLWJ5dGUsIHRoZSByZXR1cm5lZAorICogY2hhcmFjdGVyIGlzIG5vdCB2YWxpZCEuCisgKi8KKyAgICBpbnQKK3ZwZWVrYygpCit7CisgICAgaWYgKG9sZF9jaGFyICE9IC0xKQorCXJldHVybiBvbGRfY2hhcjsKKyAgICByZXR1cm4gdmdldG9ycGVlayhGQUxTRSk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfVEVSTVJFU1BPTlNFKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIExpa2UgdnBlZWtjKCksIGJ1dCBkb24ndCBhbGxvdyBtYXBwaW5nLiAgRG8gYWxsb3cgY2hlY2tpbmcgZm9yIHRlcm1pbmFsCisgKiBjb2Rlcy4KKyAqLworICAgIGludAordnBlZWtjX25vbWFwKCkKK3sKKyAgICBpbnQJCWM7CisKKyAgICArK25vX21hcHBpbmc7CisgICAgKythbGxvd19rZXlzOworICAgIGMgPSB2cGVla2MoKTsKKyAgICAtLW5vX21hcHBpbmc7CisgICAgLS1hbGxvd19rZXlzOworICAgIHJldHVybiBjOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfSU5TX0VYUEFORCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDaGVjayBpZiBhbnkgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZSwgYWxzbyBoYWxmIGFuIGVzY2FwZSBzZXF1ZW5jZS4KKyAqIFRyaWNrOiB3aGVuIG5vIHR5cGVhaGVhZCBmb3VuZCwgYnV0IHRoZXJlIGlzIHNvbWV0aGluZyBpbiB0aGUgdHlwZWFoZWFkCisgKiBidWZmZXIsIGl0IG11c3QgYmUgYW4gRVNDIHRoYXQgaXMgcmVjb2duaXplZCBhcyB0aGUgc3RhcnQgb2YgYSBrZXkgY29kZS4KKyAqLworICAgIGludAordnBlZWtjX2FueSgpCit7CisgICAgaW50CQljOworCisgICAgYyA9IHZwZWVrYygpOworICAgIGlmIChjID09IE5VTCAmJiB0eXBlYnVmLnRiX2xlbiA+IDApCisJYyA9IEVTQzsKKyAgICByZXR1cm4gYzsKK30KKyNlbmRpZgorCisvKgorICogQ2FsbCB2cGVla2MoKSB3aXRob3V0IGNhdXNpbmcgYW55dGhpbmcgdG8gYmUgbWFwcGVkLgorICogUmV0dXJuIFRSVUUgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlLCBGQUxTRSBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK2NoYXJfYXZhaWwoKQoreworICAgIGludAkgICAgcmV0dmFsOworCisgICAgKytub19tYXBwaW5nOworICAgIHJldHZhbCA9IHZwZWVrYygpOworICAgIC0tbm9fbWFwcGluZzsKKyAgICByZXR1cm4gKHJldHZhbCAhPSBOVUwpOworfQorCisgICAgdm9pZAordnVuZ2V0YyhjKQkvKiB1bmdldCBvbmUgY2hhcmFjdGVyIChjYW4gb25seSBiZSBkb25lIG9uY2UhKSAqLworICAgIGludAkJYzsKK3sKKyAgICBvbGRfY2hhciA9IGM7CisgICAgb2xkX21vZF9tYXNrID0gbW9kX21hc2s7Cit9CisKKy8qCisgKiBnZXQgYSBjaGFyYWN0ZXI6CisgKiAxLiBmcm9tIHRoZSBzdHVmZmJ1ZmZlcgorICoJVGhpcyBpcyB1c2VkIGZvciBhYmJyZXZpYXRlZCBjb21tYW5kcyBsaWtlICJEIiAtPiAiZCQiLgorICoJQWxzbyB1c2VkIHRvIHJlZG8gYSBjb21tYW5kIGZvciAiLiIuCisgKiAyLiBmcm9tIHRoZSB0eXBlYWhlYWQgYnVmZmVyCisgKglTdG9yZXMgdGV4dCBvYnRhaW5lZCBwcmV2aW91c2x5IGJ1dCBub3QgdXNlZCB5ZXQuCisgKglBbHNvIHN0b3JlcyB0aGUgcmVzdWx0IG9mIG1hcHBpbmdzLgorICoJQWxzbyB1c2VkIGZvciB0aGUgIjpub3JtYWwiIGNvbW1hbmQuCisgKiAzLiBmcm9tIHRoZSB1c2VyCisgKglUaGlzIG1heSBkbyBhIGJsb2NraW5nIHdhaXQgaWYgImFkdmFuY2UiIGlzIFRSVUUuCisgKgorICogaWYgImFkdmFuY2UiIGlzIFRSVUUgKHZnZXRjKCkpOgorICoJcmVhbGx5IGdldCB0aGUgY2hhcmFjdGVyLgorICoJS2V5VHlwZWQgaXMgc2V0IHRvIFRSVUUgaW4gdGhlIGNhc2UgdGhlIHVzZXIgdHlwZWQgdGhlIGtleS4KKyAqCUtleVN0dWZmZWQgaXMgVFJVRSBpZiB0aGUgY2hhcmFjdGVyIGNvbWVzIGZyb20gdGhlIHN0dWZmIGJ1ZmZlci4KKyAqIGlmICJhZHZhbmNlIiBpcyBGQUxTRSAodnBlZWtjKCkpOgorICoJanVzdCBsb29rIHdoZXRoZXIgdGhlcmUgaXMgYSBjaGFyYWN0ZXIgYXZhaWxhYmxlLgorICoKKyAqIFdoZW4gIm5vX21hcHBpbmciIGlzIHplcm8sIGNoZWNrcyBmb3IgbWFwcGluZ3MgaW4gdGhlIGN1cnJlbnQgbW9kZS4KKyAqIE9ubHkgcmV0dXJucyBvbmUgYnl0ZSAob2YgYSBtdWx0aS1ieXRlIGNoYXJhY3RlcikuCisgKiBLX1NQRUNJQUwgYW5kIENTSSBtYXkgYmUgZXNjYXBlZCwgbmVlZCB0byBnZXQgdHdvIG1vcmUgYnl0ZXMgdGhlbi4KKyAqLworICAgIHN0YXRpYyBpbnQKK3ZnZXRvcnBlZWsoYWR2YW5jZSkKKyAgICBpbnQJICAgIGFkdmFuY2U7Cit7CisgICAgaW50CQljLCBjMTsKKyAgICBpbnQJCWtleWxlbjsKKyAgICBjaGFyX3UJKnM7CisgICAgbWFwYmxvY2tfVAkqbXA7CisjaWZkZWYgRkVBVF9MT0NBTE1BUAorICAgIG1hcGJsb2NrX1QJKm1wMjsKKyNlbmRpZgorICAgIG1hcGJsb2NrX1QJKm1wX21hdGNoOworICAgIGludAkJbXBfbWF0Y2hfbGVuID0gMDsKKyAgICBpbnQJCXRpbWVkb3V0ID0gRkFMU0U7CSAgICAvKiB3YWl0ZWQgZm9yIG1vcmUgdGhhbiAxIHNlY29uZAorCQkJCQkJZm9yIG1hcHBpbmcgdG8gY29tcGxldGUgKi8KKyAgICBpbnQJCW1hcGRlcHRoID0gMDsJICAgIC8qIGNoZWNrIGZvciByZWN1cnNpdmUgbWFwcGluZyAqLworICAgIGludAkJbW9kZV9kZWxldGVkID0gRkFMU0U7ICAgLyogc2V0IHdoZW4gbW9kZSBoYXMgYmVlbiBkZWxldGVkICovCisgICAgaW50CQlsb2NhbF9TdGF0ZTsKKyAgICBpbnQJCW1sZW47CisgICAgaW50CQltYXhfbWxlbjsKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworICAgIGludAkJaTsKKyAgICBpbnQJCW5ld193Y29sLCBuZXdfd3JvdzsKKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJCisjIGlmZGVmIEZFQVRfTUVOVQorICAgIGludAkJaWR4OworIyBlbmRpZgorICAgIGludAkJc2hhcGVfY2hhbmdlZCA9IEZBTFNFOyAgLyogYWRqdXN0ZWQgY3Vyc29yIHNoYXBlICovCisjZW5kaWYKKyAgICBpbnQJCW47CisjaWZkZWYgRkVBVF9MQU5HTUFQCisgICAgaW50CQlub2xtYXBsZW47CisjZW5kaWYKKyAgICBpbnQJCW9sZF93Y29sLCBvbGRfd3JvdzsKKworICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIHdoZW4gY2FsbGVkIHJlY3Vyc2l2ZWx5LiAgVGhpcyBtYXkKKyAgICAgKiBoYXBwZW4gdGhvdWdoLCBiZWNhdXNlIG9mOgorICAgICAqIDEuIFRoZSBjYWxsIHRvIGFkZF90b19zaG93Y21kKCkuCWNoYXJfYXZhaWwoKSBpcyB0aGVuIHVzZWQgdG8gY2hlY2sgaWYKKyAgICAgKiB0aGVyZSBpcyBhIGNoYXJhY3RlciBhdmFpbGFibGUsIHdoaWNoIGNhbGxzIHRoaXMgZnVuY3Rpb24uICBJbiB0aGF0CisgICAgICogY2FzZSB3ZSBtdXN0IHJldHVybiBOVUwsIHRvIGluZGljYXRlIG5vIGNoYXJhY3RlciBpcyBhdmFpbGFibGUuCisgICAgICogMi4gQSBHVUkgY2FsbGJhY2sgZnVuY3Rpb24gd3JpdGVzIHRvIHRoZSBzY3JlZW4sIGNhdXNpbmcgYQorICAgICAqIHdhaXRfcmV0dXJuKCkuCisgICAgICogVXNpbmcgIjpub3JtYWwiIGNhbiBhbHNvIGRvIHRoaXMsIGJ1dCBpdCBzYXZlcyB0aGUgdHlwZWFoZWFkIGJ1ZmZlciwKKyAgICAgKiB0aHVzIGl0IHNob3VsZCBiZSBPSy4gIEJ1dCBkb24ndCBnZXQgYSBrZXkgZnJvbSB0aGUgdXNlciB0aGVuLgorICAgICAqLworICAgIGlmICh2Z2V0Y19idXN5CisjaWZkZWYgRkVBVF9FWF9FWFRSQQorCSAgICAmJiBleF9ub3JtYWxfYnVzeSA9PSAwCisjZW5kaWYKKwkgICAgKQorCXJldHVybiBOVUw7CisKKyAgICBsb2NhbF9TdGF0ZSA9IGdldF9yZWFsX3N0YXRlKCk7CisKKyAgICB2Z2V0Y19idXN5ID0gVFJVRTsKKworICAgIGlmIChhZHZhbmNlKQorCUtleVN0dWZmZWQgPSBGQUxTRTsKKworICAgIGluaXRfdHlwZWJ1ZigpOworICAgIHN0YXJ0X3N0dWZmKCk7CisgICAgaWYgKGFkdmFuY2UgJiYgdHlwZWJ1Zi50Yl9tYXBsZW4gPT0gMCkKKwlFeGVjX3JlZyA9IEZBTFNFOworICAgIGRvCisgICAgeworLyoKKyAqIGdldCBhIGNoYXJhY3RlcjogMS4gZnJvbSB0aGUgc3R1ZmZidWZmZXIKKyAqLworCWlmICh0eXBlYWhlYWRfY2hhciAhPSAwKQorCXsKKwkgICAgYyA9IHR5cGVhaGVhZF9jaGFyOworCSAgICBpZiAoYWR2YW5jZSkKKwkJdHlwZWFoZWFkX2NoYXIgPSAwOworCX0KKwllbHNlCisJICAgIGMgPSByZWFkX3N0dWZmKGFkdmFuY2UpOworCWlmIChjICE9IE5VTCAmJiAhZ290X2ludCkKKwl7CisJICAgIGlmIChhZHZhbmNlKQorCSAgICB7CisJCS8qIEtleVR5cGVkID0gRkFMU0U7ICBXaGVuIHRoZSBjb21tYW5kIHRoYXQgc3R1ZmZlZCBzb21ldGhpbmcKKwkJICogd2FzIHR5cGVkLCBiZWhhdmUgbGlrZSB0aGUgc3R1ZmZlZCBjb21tYW5kIHdhcyB0eXBlZC4KKwkJICogbmVlZGVkIGZvciBDVFJMLVcgQ1RSbC1dIHRvIG9wZW4gYSBmb2xkLCBmb3IgZXhhbXBsZS4gKi8KKwkJS2V5U3R1ZmZlZCA9IFRSVUU7CisJICAgIH0KKwkgICAgaWYgKHR5cGVidWYudGJfbm9fYWJicl9jbnQgPT0gMCkKKwkJdHlwZWJ1Zi50Yl9ub19hYmJyX2NudCA9IDE7CS8qIG5vIGFiYnJldmlhdGlvbnMgbm93ICovCisJfQorCWVsc2UKKwl7CisJICAgIC8qCisJICAgICAqIExvb3AgdW50aWwgd2UgZWl0aGVyIGZpbmQgYSBtYXRjaGluZyBtYXBwZWQga2V5LCBvciB3ZQorCSAgICAgKiBhcmUgc3VyZSB0aGF0IGl0IGlzIG5vdCBhIG1hcHBlZCBrZXkuCisJICAgICAqIElmIGEgbWFwcGVkIGtleSBzZXF1ZW5jZSBpcyBmb3VuZCB3ZSBnbyBiYWNrIHRvIHRoZSBzdGFydCB0bworCSAgICAgKiB0cnkgcmUtbWFwcGluZy4KKwkgICAgICovCisJICAgIGZvciAoOzspCisJICAgIHsKKwkJLyoKKwkJICogdWlfYnJlYWtjaGVjaygpIGlzIHNsb3csIGRvbid0IHVzZSBpdCB0b28gb2Z0ZW4gd2hlbgorCQkgKiBpbnNpZGUgYSBtYXBwaW5nLiAgQnV0IGNhbGwgaXQgZWFjaCB0aW1lIGZvciB0eXBlZAorCQkgKiBjaGFyYWN0ZXJzLgorCQkgKi8KKwkJaWYgKHR5cGVidWYudGJfbWFwbGVuKQorCQkgICAgbGluZV9icmVha2NoZWNrKCk7CisJCWVsc2UKKwkJICAgIHVpX2JyZWFrY2hlY2soKTsJCS8qIGNoZWNrIGZvciBDVFJMLUMgKi8KKwkJa2V5bGVuID0gMDsKKwkJaWYgKGdvdF9pbnQpCisJCXsKKwkJICAgIC8qIGZsdXNoIGFsbCBpbnB1dCAqLworCQkgICAgYyA9IGluY2hhcih0eXBlYnVmLnRiX2J1ZiwgdHlwZWJ1Zi50Yl9idWZsZW4gLSAxLCAwTCwKKwkJCQkJCSAgICAgICB0eXBlYnVmLnRiX2NoYW5nZV9jbnQpOworCQkgICAgLyoKKwkJICAgICAqIElmIGluY2hhcigpIHJldHVybnMgVFJVRSAoc2NyaXB0IGZpbGUgd2FzIGFjdGl2ZSkgb3Igd2UKKwkJICAgICAqIGFyZSBpbnNpZGUgYSBtYXBwaW5nLCBnZXQgb3V0IG9mIGluc2VydCBtb2RlLgorCQkgICAgICogT3RoZXJ3aXNlIHdlIGJlaGF2ZSBsaWtlIGhhdmluZyBnb3R0ZW4gYSBDVFJMLUMuCisJCSAgICAgKiBBcyBhIHJlc3VsdCB0eXBpbmcgQ1RSTC1DIGluIGluc2VydCBtb2RlIHdpbGwKKwkJICAgICAqIHJlYWxseSBpbnNlcnQgYSBDVFJMLUMuCisJCSAgICAgKi8KKwkJICAgIGlmICgoYyB8fCB0eXBlYnVmLnRiX21hcGxlbikKKwkJCQkJICAgICAgJiYgKFN0YXRlICYgKElOU0VSVCArIENNRExJTkUpKSkKKwkJCWMgPSBFU0M7CisJCSAgICBlbHNlCisJCQljID0gQ3RybF9DOworCQkgICAgZmx1c2hfYnVmZmVycyhUUlVFKTsJLyogZmx1c2ggYWxsIHR5cGVhaGVhZCAqLworCisJCSAgICAvKiBBbHNvIHJlY29yZCB0aGlzIGNoYXJhY3RlciwgaXQgbWlnaHQgYmUgbmVlZGVkIHRvCisJCSAgICAgKiBnZXQgb3V0IG9mIEluc2VydCBtb2RlLiAqLworCQkgICAgKnR5cGVidWYudGJfYnVmID0gYzsKKwkJICAgIGdvdGNoYXJzKHR5cGVidWYudGJfYnVmLCAxKTsKKwkJICAgIGNtZF9zaWxlbnQgPSBGQUxTRTsKKworCQkgICAgYnJlYWs7CisJCX0KKwkJZWxzZSBpZiAodHlwZWJ1Zi50Yl9sZW4gPiAwKQorCQl7CisJCSAgICAvKgorCQkgICAgICogQ2hlY2sgZm9yIGEgbWFwcGFibGUga2V5IHNlcXVlbmNlLgorCQkgICAgICogV2FsayB0aHJvdWdoIG9uZSBtYXBoYXNoW10gbGlzdCB1bnRpbCB3ZSBmaW5kIGFuCisJCSAgICAgKiBlbnRyeSB0aGF0IG1hdGNoZXMuCisJCSAgICAgKgorCQkgICAgICogRG9uJ3QgbG9vayBmb3IgbWFwcGluZ3MgaWY6CisJCSAgICAgKiAtIG5vX21hcHBpbmcgc2V0OiBtYXBwaW5nIGRpc2FibGVkIChlLmcuIGZvciBDVFJMLVYpCisJCSAgICAgKiAtIG1hcGhhc2hfdmFsaWQgbm90IHNldDogbm8gbWFwcGluZ3MgcHJlc2VudC4KKwkJICAgICAqIC0gdHlwZWJ1Zi50Yl9idWZbdHlwZWJ1Zi50Yl9vZmZdIHNob3VsZCBub3QgYmUgcmVtYXBwZWQKKwkJICAgICAqIC0gaW4gaW5zZXJ0IG9yIGNtZGxpbmUgbW9kZSBhbmQgJ3Bhc3RlJyBvcHRpb24gc2V0CisJCSAgICAgKiAtIHdhaXRpbmcgZm9yICJoaXQgcmV0dXJuIHRvIGNvbnRpbnVlIiBhbmQgQ1Igb3IgU1BBQ0UKKwkJICAgICAqCSB0eXBlZAorCQkgICAgICogLSB3YWl0aW5nIGZvciBhIGNoYXIgd2l0aCAtLW1vcmUtLQorCQkgICAgICogLSBpbiBDdHJsLVggbW9kZSwgYW5kIHdlIGdldCBhIHZhbGlkIGNoYXIgZm9yIHRoYXQgbW9kZQorCQkgICAgICovCisJCSAgICBtcCA9IE5VTEw7CisJCSAgICBtYXhfbWxlbiA9IDA7CisJCSAgICBjMSA9IHR5cGVidWYudGJfYnVmW3R5cGVidWYudGJfb2ZmXTsKKwkJICAgIGlmIChub19tYXBwaW5nID09IDAgJiYgbWFwaGFzaF92YWxpZAorCQkJICAgICYmIChub196ZXJvX21hcHBpbmcgPT0gMCB8fCBjMSAhPSAnMCcpCisJCQkgICAgJiYgKHR5cGVidWYudGJfbWFwbGVuID09IDAKKwkJCQl8fCAocF9yZW1hcAorCQkJCSAgICAmJiB0eXBlYnVmLnRiX25vcmVtYXBbdHlwZWJ1Zi50Yl9vZmZdCisJCQkJCQkJCSAgIT0gUk1fTk9ORSkpCisJCQkgICAgJiYgIShwX3Bhc3RlICYmIChTdGF0ZSAmIChJTlNFUlQgKyBDTURMSU5FKSkpCisJCQkgICAgJiYgIShTdGF0ZSA9PSBISVRSRVRVUk4gJiYgKGMxID09IENBUiB8fCBjMSA9PSAnICcpKQorCQkJICAgICYmIFN0YXRlICE9IEFTS01PUkUKKwkJCSAgICAmJiBTdGF0ZSAhPSBDT05GSVJNCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJCQkgICAgJiYgISgoY3RybF94X21vZGUgIT0gMCAmJiB2aW1faXNfY3RybF94X2tleShjMSkpCisJCQkJICAgIHx8ICgoY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCkKKwkJCQkJJiYgKGMxID09IEN0cmxfTiB8fCBjMSA9PSBDdHJsX1ApKSkKKyNlbmRpZgorCQkJICAgICkKKwkJICAgIHsKKyNpZmRlZiBGRUFUX0xBTkdNQVAKKwkJCWlmIChjMSA9PSBLX1NQRUNJQUwpCisJCQkgICAgbm9sbWFwbGVuID0gMjsKKwkJCWVsc2UKKwkJCXsKKwkJCSAgICBMQU5HTUFQX0FESlVTVChjMSwgVFJVRSk7CisJCQkgICAgbm9sbWFwbGVuID0gMDsKKwkJCX0KKyNlbmRpZgorI2lmZGVmIEZFQVRfTE9DQUxNQVAKKwkJCS8qIEZpcnN0IHRyeSBidWZmZXItbG9jYWwgbWFwcGluZ3MuICovCisJCQltcCA9IGN1cmJ1Zi0+Yl9tYXBoYXNoW01BUF9IQVNIKGxvY2FsX1N0YXRlLCBjMSldOworCQkJbXAyID0gbWFwaGFzaFtNQVBfSEFTSChsb2NhbF9TdGF0ZSwgYzEpXTsKKwkJCWlmIChtcCA9PSBOVUxMKQorCQkJeworCQkJICAgIG1wID0gbXAyOworCQkJICAgIG1wMiA9IE5VTEw7CisJCQl9CisjZWxzZQorCQkJbXAgPSBtYXBoYXNoW01BUF9IQVNIKGxvY2FsX1N0YXRlLCBjMSldOworI2VuZGlmCisJCQkvKgorCQkJICogTG9vcCB1bnRpbCBhIHBhcnRseSBtYXRjaGluZyBtYXBwaW5nIGlzIGZvdW5kIG9yCisJCQkgKiBhbGwgKGxvY2FsKSBtYXBwaW5ncyBoYXZlIGJlZW4gY2hlY2tlZC4KKwkJCSAqIFRoZSBsb25nZXN0IGZ1bGwgbWF0Y2ggaXMgcmVtZW1iZXJlZCBpbiAibXBfbWF0Y2giLgorCQkJICogQSBmdWxsIG1hdGNoIGlzIG9ubHkgYWNjZXB0ZWQgaWYgdGhlcmUgaXMgbm8gcGFydGx5CisJCQkgKiBtYXRjaCwgc28gImFhIiBhbmQgImFhYSIgY2FuIGJvdGggYmUgbWFwcGVkLgorCQkJICovCisJCQltcF9tYXRjaCA9IE5VTEw7CisJCQltcF9tYXRjaF9sZW4gPSAwOworCQkJZm9yICggOyBtcCAhPSBOVUxMOworI2lmZGVmIEZFQVRfTE9DQUxNQVAKKwkJCQltcC0+bV9uZXh0ID09IE5VTEwgPyAobXAgPSBtcDIsIG1wMiA9IE5VTEwpIDoKKyNlbmRpZgorCQkJCShtcCA9IG1wLT5tX25leHQpKQorCQkJeworCQkJICAgIC8qCisJCQkgICAgICogT25seSBjb25zaWRlciBhbiBlbnRyeSBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyCisJCQkgICAgICogbWF0Y2hlcyBhbmQgaXQgaXMgZm9yIHRoZSBjdXJyZW50IHN0YXRlLgorCQkJICAgICAqIFNraXAgIjpsbWFwIiBtYXBwaW5ncyBpZiBrZXlzIHdlcmUgbWFwcGVkLgorCQkJICAgICAqLworCQkJICAgIGlmIChtcC0+bV9rZXlzWzBdID09IGMxCisJCQkJICAgICYmIChtcC0+bV9tb2RlICYgbG9jYWxfU3RhdGUpCisJCQkJICAgICYmICgobXAtPm1fbW9kZSAmIExBTkdNQVApID09IDAKKwkJCQkJfHwgdHlwZWJ1Zi50Yl9tYXBsZW4gPT0gMCkpCisJCQkgICAgeworI2lmZGVmIEZFQVRfTEFOR01BUAorCQkJCWludAlub21hcCA9IG5vbG1hcGxlbjsKKwkJCQlpbnQJYzI7CisjZW5kaWYKKwkJCQkvKiBmaW5kIHRoZSBtYXRjaCBsZW5ndGggb2YgdGhpcyBtYXBwaW5nICovCisJCQkJZm9yIChtbGVuID0gMTsgbWxlbiA8IHR5cGVidWYudGJfbGVuOyArK21sZW4pCisJCQkJeworI2lmZGVmIEZFQVRfTEFOR01BUAorCQkJCSAgICBjMiA9IHR5cGVidWYudGJfYnVmW3R5cGVidWYudGJfb2ZmICsgbWxlbl07CisJCQkJICAgIGlmIChub21hcCA+IDApCisJCQkJCS0tbm9tYXA7CisJCQkJICAgIGVsc2UgaWYgKGMyID09IEtfU1BFQ0lBTCkKKwkJCQkJbm9tYXAgPSAyOworCQkJCSAgICBlbHNlCisJCQkJCUxBTkdNQVBfQURKVVNUKGMyLCBUUlVFKTsKKwkJCQkgICAgaWYgKG1wLT5tX2tleXNbbWxlbl0gIT0gYzIpCisjZWxzZQorCQkJCSAgICBpZiAobXAtPm1fa2V5c1ttbGVuXSAhPQorCQkJCQl0eXBlYnVmLnRiX2J1Zlt0eXBlYnVmLnRiX29mZiArIG1sZW5dKQorI2VuZGlmCisJCQkJCWJyZWFrOworCQkJCX0KKworI2lmZGVmIEZFQVRfTUJZVEUKKwkJCQkvKiBEb24ndCBhbGxvdyBtYXBwaW5nIHRoZSBmaXJzdCBieXRlKHMpIG9mIGEKKwkJCQkgKiBtdWx0aS1ieXRlIGNoYXIuICBIYXBwZW5zIHdoZW4gbWFwcGluZworCQkJCSAqIDxNLWE+IGFuZCB0aGVuIGNoYW5naW5nICdlbmNvZGluZycuICovCisJCQkJaWYgKGhhc19tYnl0ZSAmJiBNQl9CWVRFMkxFTihjMSkKKwkJCQkJICAgID4gKCptYl9wdHIybGVuX2NoZWNrKShtcC0+bV9rZXlzKSkKKwkJCQkgICAgbWxlbiA9IDA7CisjZW5kaWYKKwkJCQkvKgorCQkJCSAqIENoZWNrIGFuIGVudHJ5IHdoZXRoZXIgaXQgbWF0Y2hlcy4KKwkJCQkgKiAtIEZ1bGwgbWF0Y2g6IG1sZW4gPT0ga2V5bGVuCisJCQkJICogLSBQYXJ0bHkgbWF0Y2g6IG1sZW4gPT0gdHlwZWJ1Zi50Yl9sZW4KKwkJCQkgKi8KKwkJCQlrZXlsZW4gPSBtcC0+bV9rZXlsZW47CisJCQkJaWYgKG1sZW4gPT0ga2V5bGVuCisJCQkJICAgICB8fCAobWxlbiA9PSB0eXBlYnVmLnRiX2xlbgorCQkJCQkJICAmJiB0eXBlYnVmLnRiX2xlbiA8IGtleWxlbikpCisJCQkJeworCQkJCSAgICAvKgorCQkJCSAgICAgKiBJZiBvbmx5IHNjcmlwdC1sb2NhbCBtYXBwaW5ncyBhcmUKKwkJCQkgICAgICogYWxsb3dlZCwgY2hlY2sgaWYgdGhlIG1hcHBpbmcgc3RhcnRzCisJCQkJICAgICAqIHdpdGggS19TTlIuCisJCQkJICAgICAqLworCQkJCSAgICBzID0gdHlwZWJ1Zi50Yl9ub3JlbWFwICsgdHlwZWJ1Zi50Yl9vZmY7CisJCQkJICAgIGlmICgqcyA9PSBSTV9TQ1JJUFQKKwkJCQkJICAgICYmIChtcC0+bV9rZXlzWzBdICE9IEtfU1BFQ0lBTAorCQkJCQkJfHwgbXAtPm1fa2V5c1sxXSAhPSBLU19FWFRSQQorCQkJCQkJfHwgbXAtPm1fa2V5c1syXQorCQkJCQkJCSAgICAgICE9IChpbnQpS0VfU05SKSkKKwkJCQkJY29udGludWU7CisJCQkJICAgIC8qCisJCQkJICAgICAqIElmIG9uZSBvZiB0aGUgdHlwZWQga2V5cyBjYW5ub3QgYmUKKwkJCQkgICAgICogcmVtYXBwZWQsIHNraXAgdGhlIGVudHJ5LgorCQkJCSAgICAgKi8KKwkJCQkgICAgZm9yIChuID0gbWxlbjsgLS1uID49IDA7ICkKKwkJCQkJaWYgKCpzKysgPT0gUk1fTk9ORSkKKwkJCQkJICAgIGJyZWFrOworCQkJCSAgICBpZiAobiA+PSAwKQorCQkJCQljb250aW51ZTsKKworCQkJCSAgICBpZiAoa2V5bGVuID4gdHlwZWJ1Zi50Yl9sZW4pCisJCQkJICAgIHsKKwkJCQkJaWYgKCF0aW1lZG91dCkKKwkJCQkJeworCQkJCQkgICAgLyogYnJlYWsgYXQgYSBwYXJ0bHkgbWF0Y2ggKi8KKwkJCQkJICAgIGtleWxlbiA9IEtMX1BBUlRfTUFQOworCQkJCQkgICAgYnJlYWs7CisJCQkJCX0KKwkJCQkgICAgfQorCQkJCSAgICBlbHNlIGlmIChrZXlsZW4gPiBtcF9tYXRjaF9sZW4pCisJCQkJICAgIHsKKwkJCQkJLyogZm91bmQgYSBsb25nZXIgbWF0Y2ggKi8KKwkJCQkJbXBfbWF0Y2ggPSBtcDsKKwkJCQkJbXBfbWF0Y2hfbGVuID0ga2V5bGVuOworCQkJCSAgICB9CisJCQkJfQorCQkJCWVsc2UKKwkJCQkgICAgLyogTm8gbWF0Y2g7IG1heSBoYXZlIHRvIGNoZWNrIGZvcgorCQkJCSAgICAgKiB0ZXJtY29kZSBhdCBuZXh0IGNoYXJhY3Rlci4gKi8KKwkJCQkgICAgaWYgKG1heF9tbGVuIDwgbWxlbikKKwkJCQkJbWF4X21sZW4gPSBtbGVuOworCQkJICAgIH0KKwkJCX0KKworCQkJLyogSWYgbm8gcGFydGx5IG1hdGNoIGZvdW5kLCB1c2UgdGhlIGxvbmdlc3QgZnVsbAorCQkJICogbWF0Y2guICovCisJCQlpZiAoa2V5bGVuICE9IEtMX1BBUlRfTUFQKQorCQkJeworCQkJICAgIG1wID0gbXBfbWF0Y2g7CisJCQkgICAga2V5bGVuID0gbXBfbWF0Y2hfbGVuOworCQkJfQorCQkgICAgfQorCisJCSAgICAvKiBDaGVjayBmb3IgbWF0Y2ggd2l0aCAncGFzdGV0b2dnbGUnICovCisJCSAgICBpZiAoKnBfcHQgIT0gTlVMICYmIG1wID09IE5VTEwgJiYgKFN0YXRlICYgKElOU0VSVHxOT1JNQUwpKSkKKwkJICAgIHsKKwkJCWZvciAobWxlbiA9IDA7IG1sZW4gPCB0eXBlYnVmLnRiX2xlbiAmJiBwX3B0W21sZW5dOworCQkJCQkJCQkgICAgICAgKyttbGVuKQorCQkJICAgIGlmIChwX3B0W21sZW5dICE9IHR5cGVidWYudGJfYnVmW3R5cGVidWYudGJfb2ZmCisJCQkJCQkJCSAgICAgICsgbWxlbl0pCisJCQkJICAgIGJyZWFrOworCQkJaWYgKHBfcHRbbWxlbl0gPT0gTlVMKQkvKiBtYXRjaCAqLworCQkJeworCQkJICAgIC8qIHdyaXRlIGNoYXJzIHRvIHNjcmlwdCBmaWxlKHMpICovCisJCQkgICAgaWYgKG1sZW4gPiB0eXBlYnVmLnRiX21hcGxlbikKKwkJCQlnb3RjaGFycyh0eXBlYnVmLnRiX2J1ZiArIHR5cGVidWYudGJfb2ZmCisJCQkJCQkJICArIHR5cGVidWYudGJfbWFwbGVuLAorCQkJCQkJICAgIG1sZW4gLSB0eXBlYnVmLnRiX21hcGxlbik7CisKKwkJCSAgICBkZWxfdHlwZWJ1ZihtbGVuLCAwKTsgLyogcmVtb3ZlIHRoZSBjaGFycyAqLworCQkJICAgIHNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJwYXN0ZSIsCisJCQkJCQkgICAgIChsb25nKSFwX3Bhc3RlLCBOVUxMLCAwKTsKKwkJCSAgICBpZiAoIShTdGF0ZSAmIElOU0VSVCkpCisJCQkgICAgeworCQkJCW1zZ19jb2wgPSAwOworCQkJCW1zZ19yb3cgPSBSb3dzIC0gMTsKKwkJCQltc2dfY2xyX2VvcygpOwkJLyogY2xlYXIgcnVsZXIgKi8KKwkJCSAgICB9CisJCQkgICAgc2hvd21vZGUoKTsKKwkJCSAgICBzZXRjdXJzb3IoKTsKKwkJCSAgICBjb250aW51ZTsKKwkJCX0KKwkJCS8qIE5lZWQgbW9yZSBjaGFycyBmb3IgcGFydGx5IG1hdGNoLiAqLworCQkJaWYgKG1sZW4gPT0gdHlwZWJ1Zi50Yl9sZW4pCisJCQkgICAga2V5bGVuID0gS0xfUEFSVF9NQVA7CisJCQllbHNlIGlmIChtYXhfbWxlbiA8IG1sZW4pCisJCQkgICAgLyogbm8gbWF0Y2gsIG1heSBoYXZlIHRvIGNoZWNrIGZvciB0ZXJtY29kZSBhdAorCQkJICAgICAqIG5leHQgY2hhcmFjdGVyICovCisJCQkgICAgbWF4X21sZW4gPSBtbGVuICsgMTsKKwkJICAgIH0KKworCQkgICAgaWYgKChtcCA9PSBOVUxMIHx8IG1heF9tbGVuID49IG1wX21hdGNoX2xlbikKKwkJCQkJCSAgICAgJiYga2V5bGVuICE9IEtMX1BBUlRfTUFQKQorCQkgICAgeworCQkJLyoKKwkJCSAqIFdoZW4gbm8gbWF0Y2hpbmcgbWFwcGluZyBmb3VuZCBvciBmb3VuZCBhCisJCQkgKiBub24tbWF0Y2hpbmcgbWFwcGluZyB0aGF0IG1hdGNoZXMgYXQgbGVhc3Qgd2hhdCB0aGUKKwkJCSAqIG1hdGNoaW5nIG1hcHBpbmcgbWF0Y2hlZDoKKwkJCSAqIENoZWNrIGlmIHdlIGhhdmUgYSB0ZXJtaW5hbCBjb2RlLCB3aGVuOgorCQkJICogIG1hcHBpbmcgaXMgYWxsb3dlZCwKKwkJCSAqICBrZXlzIGhhdmUgbm90IGJlZW4gbWFwcGVkLAorCQkJICogIGFuZCBub3QgYW4gRVNDIHNlcXVlbmNlLCBub3QgaW4gaW5zZXJ0IG1vZGUgb3IKKwkJCSAqCXBfZWsgaXMgb24sCisJCQkgKiAgYW5kIHdoZW4gbm90IHRpbWVkIG91dCwKKwkJCSAqLworCQkJaWYgKChub19tYXBwaW5nID09IDAgfHwgYWxsb3dfa2V5cyAhPSAwKQorCQkJCSYmICh0eXBlYnVmLnRiX21hcGxlbiA9PSAwCisJCQkJICAgIHx8IChwX3JlbWFwICYmIHR5cGVidWYudGJfbm9yZW1hcFsKKwkJCQkJCSAgIHR5cGVidWYudGJfb2ZmXSA9PSBSTV9ZRVMpKQorCQkJCSYmICF0aW1lZG91dCkKKwkJCXsKKwkJCSAgICBrZXlsZW4gPSBjaGVja190ZXJtY29kZShtYXhfbWxlbiArIDEsIE5VTEwsIDApOworCisJCQkgICAgLyoKKwkJCSAgICAgKiBXaGVuIGdldHRpbmcgYSBwYXJ0aWFsIG1hdGNoLCBidXQgdGhlIGxhc3QKKwkJCSAgICAgKiBjaGFyYWN0ZXJzIHdlcmUgbm90IHR5cGVkLCBkb24ndCB3YWl0IGZvciBhCisJCQkgICAgICogdHlwZWQgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIHRoZSB0ZXJtY29kZS4KKwkJCSAgICAgKiBUaGlzIGhlbHBzIGEgbG90IHdoZW4gYSAiOm5vcm1hbCIgY29tbWFuZCBlbmRzCisJCQkgICAgICogaW4gYW4gRVNDLgorCQkJICAgICAqLworCQkJICAgIGlmIChrZXlsZW4gPCAwCisJCQkJICAgICAgICYmIHR5cGVidWYudGJfbGVuID09IHR5cGVidWYudGJfbWFwbGVuKQorCQkJCWtleWxlbiA9IDA7CisJCQl9CisJCQllbHNlCisJCQkgICAga2V5bGVuID0gMDsKKwkJCWlmIChrZXlsZW4gPT0gMCkJLyogbm8gbWF0Y2hpbmcgdGVybWluYWwgY29kZSAqLworCQkJeworI2lmZGVmIEFNSUdBCQkJLyogY2hlY2sgZm9yIHdpbmRvdyBib3VuZHMgcmVwb3J0ICovCisJCQkgICAgaWYgKHR5cGVidWYudGJfbWFwbGVuID09IDAgJiYgKHR5cGVidWYudGJfYnVmWworCQkJCQkgICAgICAgdHlwZWJ1Zi50Yl9vZmZdICYgMHhmZikgPT0gQ1NJKQorCQkJICAgIHsKKwkJCQlmb3IgKHMgPSB0eXBlYnVmLnRiX2J1ZiArIHR5cGVidWYudGJfb2ZmICsgMTsKKwkJCQkJcyA8IHR5cGVidWYudGJfYnVmICsgdHlwZWJ1Zi50Yl9vZmYKKwkJCQkJCQkgICAgICArIHR5cGVidWYudGJfbGVuCisJCQkJICAgJiYgKFZJTV9JU0RJR0lUKCpzKSB8fCAqcyA9PSAnOycKKwkJCQkJCQkJfHwgKnMgPT0gJyAnKTsKKwkJCQkJKytzKQorCQkJCSAgICA7CisJCQkJaWYgKCpzID09ICdyJyB8fCAqcyA9PSAnfCcpIC8qIGZvdW5kIG9uZSAqLworCQkJCXsKKwkJCQkgICAgZGVsX3R5cGVidWYoKGludCkocyArIDEgLQorCQkJCSAgICAgICAodHlwZWJ1Zi50Yl9idWYgKyB0eXBlYnVmLnRiX29mZikpLCAwKTsKKwkJCQkgICAgLyogZ2V0IHNpemUgYW5kIHJlZHJhdyBzY3JlZW4gKi8KKwkJCQkgICAgc2hlbGxfcmVzaXplZCgpOworCQkJCSAgICBjb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKCpzID09IE5VTCkJICAgIC8qIG5lZWQgbW9yZSBjaGFyYWN0ZXJzICovCisJCQkJICAgIGtleWxlbiA9IEtMX1BBUlRfS0VZOworCQkJICAgIH0KKwkJCSAgICBpZiAoa2V5bGVuID49IDApCisjZW5kaWYKKwkJCSAgICAgIC8qIFdoZW4gdGhlcmUgd2FzIGEgbWF0Y2hpbmcgbWFwcGluZyBhbmQgbm8KKwkJCSAgICAgICAqIHRlcm1jb2RlIGNvdWxkIGJlIHJlcGxhY2VkIGFmdGVyIGFub3RoZXIgb25lLAorCQkJICAgICAgICogdXNlIHRoYXQgbWFwcGluZy4gKi8KKwkJCSAgICAgIGlmIChtcCA9PSBOVUxMKQorCQkJICAgICAgeworLyoKKyAqIGdldCBhIGNoYXJhY3RlcjogMi4gZnJvbSB0aGUgdHlwZWFoZWFkIGJ1ZmZlcgorICovCisJCQkJYyA9IHR5cGVidWYudGJfYnVmW3R5cGVidWYudGJfb2ZmXSAmIDI1NTsKKwkJCQlpZiAoYWR2YW5jZSkJLyogcmVtb3ZlIGNoYXJzIGZyb20gdGJfYnVmICovCisJCQkJeworCQkJCSAgICBjbWRfc2lsZW50ID0gKHR5cGVidWYudGJfc2lsZW50ID4gMCk7CisJCQkJICAgIGlmICh0eXBlYnVmLnRiX21hcGxlbiA+IDApCisJCQkJCUtleVR5cGVkID0gRkFMU0U7CisJCQkJICAgIGVsc2UKKwkJCQkgICAgeworCQkJCQlLZXlUeXBlZCA9IFRSVUU7CisJCQkJCS8qIHdyaXRlIGNoYXIgdG8gc2NyaXB0IGZpbGUocykgKi8KKwkJCQkJZ290Y2hhcnModHlwZWJ1Zi50Yl9idWYKKwkJCQkJCQkgKyB0eXBlYnVmLnRiX29mZiwgMSk7CisJCQkJICAgIH0KKwkJCQkgICAgS2V5Tm9yZW1hcCA9ICh0eXBlYnVmLnRiX25vcmVtYXBbCisJCQkJCQl0eXBlYnVmLnRiX29mZl0gIT0gUkVNQVBfWUVTKTsKKwkJCQkgICAgZGVsX3R5cGVidWYoMSwgMCk7CisJCQkJfQorCQkJCWJyZWFrOwkgICAgLyogZ290IGNoYXJhY3RlciwgYnJlYWsgZm9yIGxvb3AgKi8KKwkJCSAgICAgIH0KKwkJCX0KKwkJCWlmIChrZXlsZW4gPiAwKQkgICAgLyogZnVsbCBtYXRjaGluZyB0ZXJtaW5hbCBjb2RlICovCisJCQl7CisjaWYgZGVmaW5lZChGRUFUX0dVSSkgJiYgZGVmaW5lZChGRUFUX01FTlUpCisJCQkgICAgaWYgKHR5cGVidWYudGJfYnVmW3R5cGVidWYudGJfb2ZmXSA9PSBLX1NQRUNJQUwKKwkJCQkJICYmIHR5cGVidWYudGJfYnVmW3R5cGVidWYudGJfb2ZmICsgMV0KKwkJCQkJCQkJICAgPT0gS1NfTUVOVSkKKwkJCSAgICB7CisJCQkJLyoKKwkJCQkgKiBVc2luZyBhIG1lbnUgbWF5IGNhdXNlIGEgYnJlYWsgaW4gdW5kbyEKKwkJCQkgKiBJdCdzIGxpa2UgdXNpbmcgZ290Y2hhcnMoKSwgYnV0IHdpdGhvdXQKKwkJCQkgKiByZWNvcmRpbmcgb3Igd3JpdGluZyB0byBhIHNjcmlwdCBmaWxlLgorCQkJCSAqLworCQkJCW1heV9zeW5jX3VuZG8oKTsKKwkJCQlkZWxfdHlwZWJ1ZigzLCAwKTsKKwkJCQlpZHggPSBnZXRfbWVudV9pbmRleChjdXJyZW50X21lbnUsIGxvY2FsX1N0YXRlKTsKKwkJCQlpZiAoaWR4ICE9IE1FTlVfSU5ERVhfSU5WQUxJRCkKKwkJCQl7CisjIGlmZGVmIEZFQVRfVklTVUFMCisJCQkJICAgIC8qCisJCQkJICAgICAqIEluIFNlbGVjdCBtb2RlLCBhIFZpc3VhbCBtb2RlIG1lbnUgaXMKKwkJCQkgICAgICogdXNlZC4gIFN3aXRjaCB0byBWaXN1YWwgbW9kZQorCQkJCSAgICAgKiB0ZW1wb3JhcmlseS4gIEFwcGVuZCBLX1NFTEVDVCB0byBzd2l0Y2gKKwkJCQkgICAgICogYmFjayB0byBTZWxlY3QgbW9kZS4KKwkJCQkgICAgICovCisJCQkJICAgIGlmIChWSXN1YWxfYWN0aXZlICYmIFZJc3VhbF9zZWxlY3QpCisJCQkJICAgIHsKKwkJCQkJVklzdWFsX3NlbGVjdCA9IEZBTFNFOworCQkJCQkodm9pZClpbnNfdHlwZWJ1ZihLX1NFTEVDVF9TVFJJTkcsCisJCQkJCQkgIFJFTUFQX05PTkUsIDAsIFRSVUUsIEZBTFNFKTsKKwkJCQkgICAgfQorIyBlbmRpZgorCQkJCSAgICBpbnNfdHlwZWJ1ZihjdXJyZW50X21lbnUtPnN0cmluZ3NbaWR4XSwKKwkJCQkJCWN1cnJlbnRfbWVudS0+bm9yZW1hcFtpZHhdLAorCQkJCQkJMCwgVFJVRSwKKwkJCQkJCSAgIGN1cnJlbnRfbWVudS0+c2lsZW50W2lkeF0pOworCQkJCX0KKwkJCSAgICB9CisjZW5kaWYgLyogRkVBVF9HVUkgKi8KKwkJCSAgICBjb250aW51ZTsJLyogdHJ5IG1hcHBpbmcgYWdhaW4gKi8KKwkJCX0KKworCQkJLyogUGFydGlhbCBtYXRjaDogZ2V0IHNvbWUgbW9yZSBjaGFyYWN0ZXJzLiAgV2hlbiBhCisJCQkgKiBtYXRjaGluZyBtYXBwaW5nIHdhcyBmb3VuZCB1c2UgdGhhdCBvbmUuICovCisJCQlpZiAobXAgPT0gTlVMTCB8fCBrZXlsZW4gPCAwKQorCQkJICAgIGtleWxlbiA9IEtMX1BBUlRfS0VZOworCQkJZWxzZQorCQkJICAgIGtleWxlbiA9IG1wX21hdGNoX2xlbjsKKwkJICAgIH0KKworCQkgICAgLyogY29tcGxldGUgbWF0Y2ggKi8KKwkJICAgIGlmIChrZXlsZW4gPj0gMCAmJiBrZXlsZW4gPD0gdHlwZWJ1Zi50Yl9sZW4pCisJCSAgICB7CisJCQkvKiB3cml0ZSBjaGFycyB0byBzY3JpcHQgZmlsZShzKSAqLworCQkJaWYgKGtleWxlbiA+IHR5cGVidWYudGJfbWFwbGVuKQorCQkJICAgIGdvdGNoYXJzKHR5cGVidWYudGJfYnVmICsgdHlwZWJ1Zi50Yl9vZmYKKwkJCQkJCQkgICsgdHlwZWJ1Zi50Yl9tYXBsZW4sCisJCQkJCQkgIGtleWxlbiAtIHR5cGVidWYudGJfbWFwbGVuKTsKKworCQkJY21kX3NpbGVudCA9ICh0eXBlYnVmLnRiX3NpbGVudCA+IDApOworCQkJZGVsX3R5cGVidWYoa2V5bGVuLCAwKTsJLyogcmVtb3ZlIHRoZSBtYXBwZWQga2V5cyAqLworCisJCQkvKgorCQkJICogUHV0IHRoZSByZXBsYWNlbWVudCBzdHJpbmcgaW4gZnJvbnQgb2YgbWFwc3RyLgorCQkJICogVGhlIGRlcHRoIGNoZWNrIGNhdGNoZXMgIjptYXAgeCB5IiBhbmQgIjptYXAgeSB4Ii4KKwkJCSAqLworCQkJaWYgKCsrbWFwZGVwdGggPj0gcF9tbWQpCisJCQl7CisJCQkgICAgRU1TRyhfKCJFMjIzOiByZWN1cnNpdmUgbWFwcGluZyIpKTsKKwkJCSAgICBpZiAoU3RhdGUgJiBDTURMSU5FKQorCQkJCXJlZHJhd2NtZGxpbmUoKTsKKwkJCSAgICBlbHNlCisJCQkJc2V0Y3Vyc29yKCk7CisJCQkgICAgZmx1c2hfYnVmZmVycyhGQUxTRSk7CisJCQkgICAgbWFwZGVwdGggPSAwOwkvKiBmb3IgbmV4dCBvbmUgKi8KKwkJCSAgICBjID0gLTE7CisJCQkgICAgYnJlYWs7CisJCQl9CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkJLyoKKwkJCSAqIEluIFNlbGVjdCBtb2RlLCBhIFZpc3VhbCBtb2RlIG1hcHBpbmcgaXMgdXNlZC4KKwkJCSAqIFN3aXRjaCB0byBWaXN1YWwgbW9kZSB0ZW1wb3JhcmlseS4gIEFwcGVuZCBLX1NFTEVDVAorCQkJICogdG8gc3dpdGNoIGJhY2sgdG8gU2VsZWN0IG1vZGUuCisJCQkgKi8KKwkJCWlmIChWSXN1YWxfYWN0aXZlICYmIFZJc3VhbF9zZWxlY3QpCisJCQl7CisJCQkgICAgVklzdWFsX3NlbGVjdCA9IEZBTFNFOworCQkJICAgICh2b2lkKWluc190eXBlYnVmKEtfU0VMRUNUX1NUUklORywgUkVNQVBfTk9ORSwKKwkJCQkJCQkgICAgICAwLCBUUlVFLCBGQUxTRSk7CisJCQl9CisjZW5kaWYKKworCQkJLyoKKwkJCSAqIEluc2VydCB0aGUgJ3RvJyBwYXJ0IGluIHRoZSB0eXBlYnVmLnRiX2J1Zi4KKwkJCSAqIElmICdmcm9tJyBmaWVsZCBpcyB0aGUgc2FtZSBhcyB0aGUgc3RhcnQgb2YgdGhlCisJCQkgKiAndG8nIGZpZWxkLCBkb24ndCByZW1hcCB0aGUgZmlyc3QgY2hhcmFjdGVyLgorCQkJICogSWYgbV9ub3JlbWFwIGlzIHNldCwgZG9uJ3QgcmVtYXAgdGhlIHdob2xlICd0bycKKwkJCSAqIHBhcnQuCisJCQkgKi8KKwkJCWlmIChpbnNfdHlwZWJ1ZihtcC0+bV9zdHIsCisJCQkJbXAtPm1fbm9yZW1hcCAhPSBSRU1BUF9ZRVMKKwkJCQkJICAgID8gbXAtPm1fbm9yZW1hcAorCQkJCQkgICAgOiBTVFJOQ01QKG1wLT5tX3N0ciwgbXAtPm1fa2V5cywKKwkJCQkJCQkgICAgICAgKHNpemVfdClrZXlsZW4pCisJCQkJCQkJICAgICAgPyBSRU1BUF9ZRVMgOiAxLAorCQkJCTAsIFRSVUUsIGNtZF9zaWxlbnQgfHwgbXAtPm1fc2lsZW50KSA9PSBGQUlMKQorCQkJeworCQkJICAgIGMgPSAtMTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQl9CisKKy8qCisgKiBnZXQgYSBjaGFyYWN0ZXI6IDMuIGZyb20gdGhlIHVzZXIgLSBoYW5kbGUgPEVzYz4gaW4gSW5zZXJ0IG1vZGUKKyAqLworCQkvKgorCQkgKiBzcGVjaWFsIGNhc2U6IGlmIHdlIGdldCBhbiA8RVNDPiBpbiBpbnNlcnQgbW9kZSBhbmQgdGhlcmUKKwkJICogYXJlIG5vIG1vcmUgY2hhcmFjdGVycyBhdCBvbmNlLCB3ZSBwcmV0ZW5kIHRvIGdvIG91dCBvZgorCQkgKiBpbnNlcnQgbW9kZS4gIFRoaXMgcHJldmVudHMgdGhlIG9uZSBzZWNvbmQgZGVsYXkgYWZ0ZXIKKwkJICogdHlwaW5nIGFuIDxFU0M+LiAgSWYgd2UgZ2V0IHNvbWV0aGluZyBhZnRlciBhbGwsIHdlIG1heQorCQkgKiBoYXZlIHRvIHJlZGlzcGxheSB0aGUgbW9kZS4gVGhhdCB0aGUgY3Vyc29yIGlzIGluIHRoZSB3cm9uZworCQkgKiBwbGFjZSBkb2VzIG5vdCBtYXR0ZXIuCisJCSAqLworCQljID0gMDsKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworCQluZXdfd2NvbCA9IGN1cndpbi0+d193Y29sOworCQluZXdfd3JvdyA9IGN1cndpbi0+d193cm93OworI2VuZGlmCisJCWlmICgJICAgYWR2YW5jZQorCQkJJiYgdHlwZWJ1Zi50Yl9sZW4gPT0gMQorCQkJJiYgdHlwZWJ1Zi50Yl9idWZbdHlwZWJ1Zi50Yl9vZmZdID09IEVTQworCQkJJiYgIW5vX21hcHBpbmcKKyNpZmRlZiBGRUFUX0VYX0VYVFJBCisJCQkmJiBleF9ub3JtYWxfYnVzeSA9PSAwCisjZW5kaWYKKwkJCSYmIHR5cGVidWYudGJfbWFwbGVuID09IDAKKwkJCSYmIChTdGF0ZSAmIElOU0VSVCkKKwkJCSYmIChwX3RpbWVvdXQgfHwgKGtleWxlbiA9PSBLTF9QQVJUX0tFWSAmJiBwX3R0aW1lb3V0KSkKKwkJCSYmIChjID0gaW5jaGFyKHR5cGVidWYudGJfYnVmICsgdHlwZWJ1Zi50Yl9vZmYKKwkJCQkJCSAgICAgKyB0eXBlYnVmLnRiX2xlbiwgMywgMjVMLAorCQkJCQkJIHR5cGVidWYudGJfY2hhbmdlX2NudCkpID09IDApCisJCXsKKwkJICAgIGNvbG5yX1QJY29sID0gMCwgdmNvbDsKKwkJICAgIGNoYXJfdQkqcHRyOworCisJCSAgICBpZiAocF9zbWQpCisJCSAgICB7CisJCQl1bnNob3dtb2RlKFRSVUUpOworCQkJbW9kZV9kZWxldGVkID0gVFJVRTsKKwkJICAgIH0KKyNpZmRlZiBGRUFUX0dVSQorCQkgICAgLyogbWF5IHNob3cgZGlmZmVyZW50IGN1cnNvciBzaGFwZSAqLworCQkgICAgaWYgKGd1aS5pbl91c2UpCisJCSAgICB7CisJCQlpbnQJICAgIHNhdmVfU3RhdGU7CisKKwkJCXNhdmVfU3RhdGUgPSBTdGF0ZTsKKwkJCVN0YXRlID0gTk9STUFMOworCQkJZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworCQkJU3RhdGUgPSBzYXZlX1N0YXRlOworCQkJc2hhcGVfY2hhbmdlZCA9IFRSVUU7CisJCSAgICB9CisjZW5kaWYKKwkJICAgIHZhbGlkYXRlX2N1cnNvcigpOworCQkgICAgb2xkX3djb2wgPSBjdXJ3aW4tPndfd2NvbDsKKwkJICAgIG9sZF93cm93ID0gY3Vyd2luLT53X3dyb3c7CisKKwkJICAgIC8qIG1vdmUgY3Vyc29yIGxlZnQsIGlmIHBvc3NpYmxlICovCisJCSAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgIT0gMCkKKwkJICAgIHsKKwkJCWlmIChjdXJ3aW4tPndfd2NvbCA+IDApCisJCQl7CisJCQkgICAgaWYgKGRpZF9haSkKKwkJCSAgICB7CisJCQkJLyoKKwkJCQkgKiBXZSBhcmUgZXhwZWN0aW5nIHRvIHRydW5jYXRlIHRoZSB0cmFpbGluZworCQkJCSAqIHdoaXRlLXNwYWNlLCBzbyBmaW5kIHRoZSBsYXN0IG5vbi13aGl0ZQorCQkJCSAqIGNoYXJhY3RlciAtLSB3ZWJiCisJCQkJICovCisJCQkJY29sID0gdmNvbCA9IGN1cndpbi0+d193Y29sID0gMDsKKwkJCQlwdHIgPSBtbF9nZXRfY3VybGluZSgpOworCQkJCXdoaWxlIChjb2wgPCBjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkJCQl7CisJCQkJICAgIGlmICghdmltX2lzd2hpdGUocHRyW2NvbF0pKQorCQkJCQljdXJ3aW4tPndfd2NvbCA9IHZjb2w7CisJCQkJICAgIHZjb2wgKz0gbGJyX2NoYXJ0YWJzaXplKHB0ciArIGNvbCwKKwkJCQkJCQkgICAgICAgKGNvbG5yX1QpdmNvbCk7CisjaWZkZWYgRkVBVF9NQllURQorCQkJCSAgICBpZiAoaGFzX21ieXRlKQorCQkJCQljb2wgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIgKyBjb2wpOworCQkJCSAgICBlbHNlCisjZW5kaWYKKwkJCQkJKytjb2w7CisJCQkJfQorCQkJCWN1cndpbi0+d193cm93ID0gY3Vyd2luLT53X2NsaW5lX3JvdworCQkJCQkgICArIGN1cndpbi0+d193Y29sIC8gV19XSURUSChjdXJ3aW4pOworCQkJCWN1cndpbi0+d193Y29sICU9IFdfV0lEVEgoY3Vyd2luKTsKKwkJCQljdXJ3aW4tPndfd2NvbCArPSBjdXJ3aW5fY29sX29mZigpOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJCQljb2wgPSAwOwkvKiBubyBjb3JyZWN0aW9uIG5lZWRlZCAqLworI2VuZGlmCisJCQkgICAgfQorCQkJICAgIGVsc2UKKwkJCSAgICB7CisJCQkJLS1jdXJ3aW4tPndfd2NvbDsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkJY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2wgLSAxOworI2VuZGlmCisJCQkgICAgfQorCQkJfQorCQkJZWxzZSBpZiAoY3Vyd2luLT53X3Bfd3JhcCAmJiBjdXJ3aW4tPndfd3JvdykKKwkJCXsKKwkJCSAgICAtLWN1cndpbi0+d193cm93OworCQkJICAgIGN1cndpbi0+d193Y29sID0gV19XSURUSChjdXJ3aW4pIC0gMTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2wgLSAxOworI2VuZGlmCisJCQl9CisjaWZkZWYgRkVBVF9NQllURQorCQkJaWYgKGhhc19tYnl0ZSAmJiBjb2wgPiAwICYmIGN1cndpbi0+d193Y29sID4gMCkKKwkJCXsKKwkJCSAgICAvKiBDb3JyZWN0IHdoZW4gdGhlIGN1cnNvciBpcyBvbiB0aGUgcmlnaHQgaGFsdmUKKwkJCSAgICAgKiBvZiBhIGRvdWJsZS13aWRlIGNoYXJhY3Rlci4gKi8KKwkJCSAgICBwdHIgPSBtbF9nZXRfY3VybGluZSgpOworCQkJICAgIGNvbCAtPSAoKm1iX2hlYWRfb2ZmKShwdHIsIHB0ciArIGNvbCk7CisJCQkgICAgaWYgKCgqbWJfcHRyMmNlbGxzKShwdHIgKyBjb2wpID4gMSkKKwkJCQktLWN1cndpbi0+d193Y29sOworCQkJfQorI2VuZGlmCisJCSAgICB9CisJCSAgICBzZXRjdXJzb3IoKTsKKwkJICAgIG91dF9mbHVzaCgpOworI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJCSAgICBuZXdfd2NvbCA9IGN1cndpbi0+d193Y29sOworCQkgICAgbmV3X3dyb3cgPSBjdXJ3aW4tPndfd3JvdzsKKyNlbmRpZgorCQkgICAgY3Vyd2luLT53X3djb2wgPSBvbGRfd2NvbDsKKwkJICAgIGN1cndpbi0+d193cm93ID0gb2xkX3dyb3c7CisJCX0KKwkJaWYgKGMgPCAwKQorCQkgICAgY29udGludWU7CS8qIGVuZCBvZiBpbnB1dCBzY3JpcHQgcmVhY2hlZCAqLworCQl0eXBlYnVmLnRiX2xlbiArPSBjOworCisJCS8qIGJ1ZmZlciBmdWxsLCBkb24ndCBtYXAgKi8KKwkJaWYgKHR5cGVidWYudGJfbGVuID49IHR5cGVidWYudGJfbWFwbGVuICsgTUFYTUFQTEVOKQorCQl7CisJCSAgICB0aW1lZG91dCA9IFRSVUU7CisJCSAgICBjb250aW51ZTsKKwkJfQorCisjaWZkZWYgRkVBVF9FWF9FWFRSQQorCQlpZiAoZXhfbm9ybWFsX2J1c3kgPiAwKQorCQl7CisjIGlmZGVmIEZFQVRfQ01EV0lOCisJCSAgICBzdGF0aWMgaW50IHRjID0gMDsKKyMgZW5kaWYKKworCQkgICAgLyogTm8gdHlwZWFoZWFkIGxlZnQgYW5kIGluc2lkZSAiOm5vcm1hbCIuICBNdXN0IHJldHVybgorCQkgICAgICogc29tZXRoaW5nIHRvIGF2b2lkIGdldHRpbmcgc3R1Y2suICBXaGVuIGFuIGluY29tcGxldGUKKwkJICAgICAqIG1hcHBpbmcgaXMgcHJlc2VudCwgYmVoYXZlIGxpa2UgaXQgdGltZWQgb3V0LiAqLworCQkgICAgaWYgKHR5cGVidWYudGJfbGVuID4gMCkKKwkJICAgIHsKKwkJCXRpbWVkb3V0ID0gVFJVRTsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQkgICAgLyogV2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0LCBFU0MganVzdCBiZWVwcyBpbiBJbnNlcnQKKwkJICAgICAqIG1vZGUuICBVc2UgQ1RSTC1MIHRvIG1ha2UgZWRpdCgpIHJldHVybi4KKwkJICAgICAqIEZvciB0aGUgY29tbWFuZCBsaW5lIG9ubHkgQ1RSTC1DIGFsd2F5cyBicmVha3MgaXQuCisJCSAgICAgKiBGb3IgdGhlIGNtZGxpbmUgd2luZG93OiBBbHRlcm5hdGUgYmV0d2VlbiBFU0MgYW5kCisJCSAgICAgKiBDVFJMLUM6IEVTQyBmb3IgbW9zdCBzaXR1YXRpb25zIGFuZCBDVFJMLUMgdG8gY2xvc2UgdGhlCisJCSAgICAgKiBjbWRsaW5lIHdpbmRvdy4gKi8KKwkJICAgIGlmIChwX2ltICYmIChTdGF0ZSAmIElOU0VSVCkpCisJCQljID0gQ3RybF9MOworCQkgICAgZWxzZSBpZiAoKFN0YXRlICYgQ01ETElORSkKKyMgaWZkZWYgRkVBVF9DTURXSU4KKwkJCSAgICB8fCAoY21kd2luX3R5cGUgPiAwICYmIHRjID09IEVTQykKKyMgZW5kaWYKKwkJCSAgICApCisJCQljID0gQ3RybF9DOworCQkgICAgZWxzZQorCQkJYyA9IEVTQzsKKyMgaWZkZWYgRkVBVF9DTURXSU4KKwkJICAgIHRjID0gYzsKKyMgZW5kaWYKKwkJICAgIGJyZWFrOworCQl9CisjZW5kaWYKKworLyoKKyAqIGdldCBhIGNoYXJhY3RlcjogMy4gZnJvbSB0aGUgdXNlciAtIHVwZGF0ZSBkaXNwbGF5CisgKi8KKwkJLyogSW4gaW5zZXJ0IG1vZGUgYSBzY3JlZW4gdXBkYXRlIGlzIHNraXBwZWQgd2hlbiBjaGFyYWN0ZXJzCisJCSAqIGFyZSBzdGlsbCBhdmFpbGFibGUuICBCdXQgd2hlbiB0aG9zZSBhdmFpbGFibGUgY2hhcmFjdGVycworCQkgKiBhcmUgcGFydCBvZiBhIG1hcHBpbmcsIGFuZCB3ZSBhcmUgZ29pbmcgdG8gZG8gYSBibG9ja2luZworCQkgKiB3YWl0IGhlcmUuICBOZWVkIHRvIHVwZGF0ZSB0aGUgc2NyZWVuIHRvIGRpc3BsYXkgdGhlCisJCSAqIGNoYW5nZWQgdGV4dCBzbyBmYXIuICovCisJCWlmICgoU3RhdGUgJiBJTlNFUlQpICYmIGFkdmFuY2UgJiYgbXVzdF9yZWRyYXcgIT0gMCkKKwkJeworCQkgICAgdXBkYXRlX3NjcmVlbigwKTsKKwkJICAgIHNldGN1cnNvcigpOyAvKiBwdXQgY3Vyc29yIGJhY2sgd2hlcmUgaXQgYmVsb25ncyAqLworCQl9CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhIHBhcnRpYWwgbWF0Y2ggKGFuZCBhcmUgZ29pbmcgdG8gd2FpdCBmb3IgbW9yZQorCQkgKiBpbnB1dCBmcm9tIHRoZSB1c2VyKSwgc2hvdyB0aGUgcGFydGlhbGx5IG1hdGNoZWQgY2hhcmFjdGVycworCQkgKiB0byB0aGUgdXNlciB3aXRoIHNob3djbWQuCisJCSAqLworI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJCWkgPSAwOworI2VuZGlmCisJCWMxID0gMDsKKwkJaWYgKHR5cGVidWYudGJfbGVuID4gMCAmJiBhZHZhbmNlICYmICFleG1vZGVfYWN0aXZlKQorCQl7CisJCSAgICBpZiAoKChTdGF0ZSAmIChOT1JNQUwgfCBJTlNFUlQpKSB8fCBTdGF0ZSA9PSBMQU5HTUFQKQorCQkJICAgICYmIFN0YXRlICE9IEhJVFJFVFVSTikKKwkJICAgIHsKKwkJCS8qIHRoaXMgbG9va3MgbmljZSB3aGVuIHR5cGluZyBhIGRlYWQgY2hhcmFjdGVyIG1hcCAqLworCQkJaWYgKFN0YXRlICYgSU5TRVJUCisJCQkgICAgJiYgcHRyMmNlbGxzKHR5cGVidWYudGJfYnVmICsgdHlwZWJ1Zi50Yl9vZmYKKwkJCQkJCSAgICsgdHlwZWJ1Zi50Yl9sZW4gLSAxKSA9PSAxKQorCQkJeworCQkJICAgIGVkaXRfcHV0Y2hhcih0eXBlYnVmLnRiX2J1Zlt0eXBlYnVmLnRiX29mZgorCQkJCQkJKyB0eXBlYnVmLnRiX2xlbiAtIDFdLCBGQUxTRSk7CisJCQkgICAgc2V0Y3Vyc29yKCk7IC8qIHB1dCBjdXJzb3IgYmFjayB3aGVyZSBpdCBiZWxvbmdzICovCisJCQkgICAgYzEgPSAxOworCQkJfQorI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJCQkvKiBuZWVkIHRvIHVzZSB0aGUgY29sIGFuZCByb3cgZnJvbSBhYm92ZSBoZXJlICovCisJCQlvbGRfd2NvbCA9IGN1cndpbi0+d193Y29sOworCQkJb2xkX3dyb3cgPSBjdXJ3aW4tPndfd3JvdzsKKwkJCWN1cndpbi0+d193Y29sID0gbmV3X3djb2w7CisJCQljdXJ3aW4tPndfd3JvdyA9IG5ld193cm93OworCQkJcHVzaF9zaG93Y21kKCk7CisJCQlpZiAodHlwZWJ1Zi50Yl9sZW4gPiBTSE9XQ01EX0NPTFMpCisJCQkgICAgaSA9IHR5cGVidWYudGJfbGVuIC0gU0hPV0NNRF9DT0xTOworCQkJd2hpbGUgKGkgPCB0eXBlYnVmLnRiX2xlbikKKwkJCSAgICAodm9pZClhZGRfdG9fc2hvd2NtZCh0eXBlYnVmLnRiX2J1Zlt0eXBlYnVmLnRiX29mZgorCQkJCQkJCQkgICAgICArIGkrK10pOworCQkJY3Vyd2luLT53X3djb2wgPSBvbGRfd2NvbDsKKwkJCWN1cndpbi0+d193cm93ID0gb2xkX3dyb3c7CisjZW5kaWYKKwkJICAgIH0KKworCQkgICAgLyogdGhpcyBsb29rcyBuaWNlIHdoZW4gdHlwaW5nIGEgZGVhZCBjaGFyYWN0ZXIgbWFwICovCisJCSAgICBpZiAoKFN0YXRlICYgQ01ETElORSkKKyNpZiBkZWZpbmVkKEZFQVRfQ1JZUFQpIHx8IGRlZmluZWQoRkVBVF9FVkFMKQorCQkJICAgICYmIGNtZGxpbmVfc3RhciA9PSAwCisjZW5kaWYKKwkJCSAgICAmJiBwdHIyY2VsbHModHlwZWJ1Zi50Yl9idWYgKyB0eXBlYnVmLnRiX29mZgorCQkJCQkJICAgKyB0eXBlYnVmLnRiX2xlbiAtIDEpID09IDEpCisJCSAgICB7CisJCQlwdXRjbWRsaW5lKHR5cGVidWYudGJfYnVmW3R5cGVidWYudGJfb2ZmCisJCQkJCQkrIHR5cGVidWYudGJfbGVuIC0gMV0sIEZBTFNFKTsKKwkJCWMxID0gMTsKKwkJICAgIH0KKwkJfQorCisvKgorICogZ2V0IGEgY2hhcmFjdGVyOiAzLiBmcm9tIHRoZSB1c2VyIC0gZ2V0IGl0CisgKi8KKwkJYyA9IGluY2hhcih0eXBlYnVmLnRiX2J1ZiArIHR5cGVidWYudGJfb2ZmICsgdHlwZWJ1Zi50Yl9sZW4sCisJCQl0eXBlYnVmLnRiX2J1ZmxlbiAtIHR5cGVidWYudGJfb2ZmIC0gdHlwZWJ1Zi50Yl9sZW4gLSAxLAorCQkJIWFkdmFuY2UKKwkJCSAgICA/IDAKKwkJCSAgICA6ICgodHlwZWJ1Zi50Yl9sZW4gPT0gMAorCQkJCSAgICB8fCAhKHBfdGltZW91dCB8fCAocF90dGltZW91dAorCQkJCQkJICAgJiYga2V5bGVuID09IEtMX1BBUlRfS0VZKSkpCisJCQkJICAgID8gLTFMCisJCQkJICAgIDogKChrZXlsZW4gPT0gS0xfUEFSVF9LRVkgJiYgcF90dG0gPj0gMCkKKwkJCQkJICAgID8gcF90dG0KKwkJCQkJICAgIDogcF90bSkpLCB0eXBlYnVmLnRiX2NoYW5nZV9jbnQpOworCisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwkJaWYgKGkgIT0gMCkKKwkJICAgIHBvcF9zaG93Y21kKCk7CisjZW5kaWYKKwkJaWYgKGMxID09IDEpCisJCXsKKwkJICAgIGlmIChTdGF0ZSAmIElOU0VSVCkKKwkJCWVkaXRfdW5wdXRjaGFyKCk7CisJCSAgICBpZiAoU3RhdGUgJiBDTURMSU5FKQorCQkJdW5wdXRjbWRsaW5lKCk7CisJCSAgICBzZXRjdXJzb3IoKTsJLyogcHV0IGN1cnNvciBiYWNrIHdoZXJlIGl0IGJlbG9uZ3MgKi8KKwkJfQorCisJCWlmIChjIDwgMCkKKwkJICAgIGNvbnRpbnVlOwkJLyogZW5kIG9mIGlucHV0IHNjcmlwdCByZWFjaGVkICovCisJCWlmIChjID09IE5VTCkJCS8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKwkJeworCQkgICAgaWYgKCFhZHZhbmNlKQorCQkJYnJlYWs7CisJCSAgICBpZiAodHlwZWJ1Zi50Yl9sZW4gPiAwKQkvKiB0aW1lZCBvdXQgKi8KKwkJICAgIHsKKwkJCXRpbWVkb3V0ID0gVFJVRTsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJewkgICAgLyogYWxsb3cgbWFwcGluZyBmb3IganVzdCB0eXBlZCBjaGFyYWN0ZXJzICovCisJCSAgICB3aGlsZSAodHlwZWJ1Zi50Yl9idWZbdHlwZWJ1Zi50Yl9vZmYKKwkJCQkJCSAgICAgKyB0eXBlYnVmLnRiX2xlbl0gIT0gTlVMKQorCQkJdHlwZWJ1Zi50Yl9ub3JlbWFwW3R5cGVidWYudGJfb2ZmCisJCQkJCQkgKyB0eXBlYnVmLnRiX2xlbisrXSA9IFJNX1lFUzsKKyNpZmRlZiBVU0VfSU1fQ09OVFJPTAorCQkgICAgLyogR2V0IElNIHN0YXR1cyByaWdodCBhZnRlciBnZXR0aW5nIGtleXMsIG5vdCBhZnRlciB0aGUKKwkJICAgICAqIHRpbWVvdXQgZm9yIGEgbWFwcGluZyAoZm9jdXMgbWF5IGJlIGxvc3QgYnkgdGhlbikuICovCisJCSAgICB2Z2V0Y19pbV9hY3RpdmUgPSBpbV9nZXRfc3RhdHVzKCk7CisjZW5kaWYKKwkJfQorCSAgICB9CSAgICAvKiBmb3IgKDs7KSAqLworCX0JLyogaWYgKCFjaGFyYWN0ZXIgZnJvbSBzdHVmZmJ1ZikgKi8KKworCQkJLyogaWYgYWR2YW5jZSBpcyBGQUxTRSBkb24ndCBsb29wIG9uIE5VTHMgKi8KKyAgICB9IHdoaWxlIChjIDwgMCB8fCAoYWR2YW5jZSAmJiBjID09IE5VTCkpOworCisgICAgLyoKKyAgICAgKiBUaGUgIklOU0VSVCIgbWVzc2FnZSBpcyB0YWtlbiBjYXJlIG9mIGhlcmU6CisgICAgICoJIGlmIHdlIHJldHVybiBhbiBFU0MgdG8gZXhpdCBpbnNlcnQgbW9kZSwgdGhlIG1lc3NhZ2UgaXMgZGVsZXRlZAorICAgICAqCSBpZiB3ZSBkb24ndCByZXR1cm4gYW4gRVNDIGJ1dCBkZWxldGVkIHRoZSBtZXNzYWdlIGJlZm9yZSwgcmVkaXNwbGF5IGl0CisgICAgICovCisgICAgaWYgKGFkdmFuY2UgJiYgcF9zbWQgJiYgKFN0YXRlICYgSU5TRVJUKSkKKyAgICB7CisJaWYgKGMgPT0gRVNDICYmICFtb2RlX2RlbGV0ZWQgJiYgIW5vX21hcHBpbmcpCisJeworCSAgICBpZiAodHlwZWJ1Zi50Yl9sZW4gJiYgIUtleVR5cGVkKQorCQlyZWRyYXdfY21kbGluZSA9IFRSVUU7CSAgICAvKiBkZWxldGUgbW9kZSBsYXRlciAqLworCSAgICBlbHNlCisJCXVuc2hvd21vZGUoRkFMU0UpOworCX0KKwllbHNlIGlmIChjICE9IEVTQyAmJiBtb2RlX2RlbGV0ZWQpCisJeworCSAgICBpZiAodHlwZWJ1Zi50Yl9sZW4gJiYgIUtleVR5cGVkKQorCQlyZWRyYXdfY21kbGluZSA9IFRSVUU7CSAgICAvKiBzaG93IG1vZGUgbGF0ZXIgKi8KKwkgICAgZWxzZQorCQlzaG93bW9kZSgpOworCX0KKyAgICB9CisjaWZkZWYgRkVBVF9HVUkKKyAgICAvKiBtYXkgdW5zaG93IGRpZmZlcmVudCBjdXJzb3Igc2hhcGUgKi8KKyAgICBpZiAoZ3VpLmluX3VzZSAmJiBzaGFwZV9jaGFuZ2VkKQorCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKyNlbmRpZgorCisgICAgdmdldGNfYnVzeSA9IEZBTFNFOworCisgICAgcmV0dXJuIGM7Cit9CisKKy8qCisgKiBpbmNoYXIoKSAtIGdldCBvbmUgY2hhcmFjdGVyIGZyb20KKyAqCTEuIGEgc2NyaXB0ZmlsZQorICoJMi4gdGhlIGtleWJvYXJkCisgKgorICogIEFzIG11Y2ggY2hhcmFjdGVycyBhcyB3ZSBjYW4gZ2V0ICh1cHRvICdtYXhsZW4nKSBhcmUgcHV0IGluICJidWYiIGFuZAorICogIE5VTCB0ZXJtaW5hdGVkIChidWZmZXIgbGVuZ3RoIG11c3QgYmUgJ21heGxlbicgKyAxKS4KKyAqICBNaW5pbXVtIGZvciAibWF4bGVuIiBpcyAzISEhIQorICoKKyAqICAidGJfY2hhbmdlX2NudCIgaXMgdGhlIHZhbHVlIG9mIHR5cGVidWYudGJfY2hhbmdlX2NudCBpZiAiYnVmIiBwb2ludHMgaW50bworICogIGl0LiAgV2hlbiB0eXBlYnVmLnRiX2NoYW5nZV9jbnQgY2hhbmdlcyAoZS5nLiwgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQKKyAqICBmcm9tIGEgcmVtb3RlIGNsaWVudCkgImJ1ZiIgY2FuIG5vIGxvbmdlciBiZSB1c2VkLiAgInRiX2NoYW5nZV9jbnQiIGlzIDAKKyAqICBvdGhlcndpc2UuCisgKgorICogIElmIHdlIGdvdCBhbiBpbnRlcnJ1cHQgYWxsIGlucHV0IGlzIHJlYWQgdW50aWwgbm9uZSBpcyBhdmFpbGFibGUuCisgKgorICogIElmIHdhaXRfdGltZSA9PSAwICB0aGVyZSBpcyBubyB3YWl0aW5nIGZvciB0aGUgY2hhci4KKyAqICBJZiB3YWl0X3RpbWUgPT0gbiAgd2Ugd2FpdCBmb3IgbiBtc2VjIGZvciBhIGNoYXJhY3RlciB0byBhcnJpdmUuCisgKiAgSWYgd2FpdF90aW1lID09IC0xIHdlIHdhaXQgZm9yZXZlciBmb3IgYSBjaGFyYWN0ZXIgdG8gYXJyaXZlLgorICoKKyAqICBSZXR1cm4gdGhlIG51bWJlciBvZiBvYnRhaW5lZCBjaGFyYWN0ZXJzLgorICogIFJldHVybiAtMSB3aGVuIGVuZCBvZiBpbnB1dCBzY3JpcHQgcmVhY2hlZC4KKyAqLworICAgIGludAoraW5jaGFyKGJ1ZiwgbWF4bGVuLCB3YWl0X3RpbWUsIHRiX2NoYW5nZV9jbnQpCisgICAgY2hhcl91CSpidWY7CisgICAgaW50CQltYXhsZW47CisgICAgbG9uZwl3YWl0X3RpbWU7CSAgICAvKiBtaWxsaSBzZWNvbmRzICovCisgICAgaW50CQl0Yl9jaGFuZ2VfY250OworeworICAgIGludAkJbGVuID0gMDsJICAgIC8qIGluaXQgZm9yIEdDQyAqLworICAgIGludAkJcmV0ZXNjID0gRkFMU0U7CSAgICAvKiByZXR1cm4gRVNDIHdpdGggZ290aW50ICovCisgICAgaW50CQlzY3JpcHRfY2hhcjsKKworICAgIGlmICh3YWl0X3RpbWUgPT0gLTFMIHx8IHdhaXRfdGltZSA+IDEwMEwpICAvKiBmbHVzaCBvdXRwdXQgYmVmb3JlIHdhaXRpbmcgKi8KKyAgICB7CisJY3Vyc29yX29uKCk7CisJb3V0X2ZsdXNoKCk7CisjaWZkZWYgRkVBVF9HVUkKKwlpZiAoZ3VpLmluX3VzZSkKKwl7CisJICAgIGd1aV91cGRhdGVfY3Vyc29yKEZBTFNFLCBGQUxTRSk7CisjIGlmZGVmIEZFQVRfTU9VU0VTSEFQRQorCSAgICBpZiAocG9zdHBvbmVkX21vdXNlc2hhcGUpCisJCXVwZGF0ZV9tb3VzZXNoYXBlKC0xKTsKKyMgZW5kaWYKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgICAvKgorICAgICAqIERvbid0IHJlc2V0IHRoZXNlIHdoZW4gYXQgdGhlIGhpdC1yZXR1cm4gcHJvbXB0LCBvdGhlcndpc2UgYSBlbmRsZXNzCisgICAgICogcmVjdXJzaXZlIGxvb3AgbWF5IHJlc3VsdCAod3JpdGUgZXJyb3IgaW4gc3dhcGZpbGUsIGhpdC1yZXR1cm4sIHRpbWVvdXQKKyAgICAgKiBvbiBjaGFyIHdhaXQsIGZsdXNoIHN3YXBmaWxlLCB3cml0ZSBlcnJvci4uLi4pLgorICAgICAqLworICAgIGlmIChTdGF0ZSAhPSBISVRSRVRVUk4pCisgICAgeworCWRpZF9vdXRvZm1lbV9tc2cgPSBGQUxTRTsgICAvKiBkaXNwbGF5IG91dCBvZiBtZW1vcnkgbWVzc2FnZSAoYWdhaW4pICovCisJZGlkX3N3YXB3cml0ZV9tc2cgPSBGQUxTRTsgIC8qIGRpc3BsYXkgc3dhcCBmaWxlIHdyaXRlIGVycm9yIGFnYWluICovCisgICAgfQorICAgIHVuZG9fb2ZmID0gRkFMU0U7CQkgICAgLyogcmVzdGFydCB1bmRvIG5vdyAqLworCisgICAgLyoKKyAgICAgKiBmaXJzdCB0cnkgc2NyaXB0IGZpbGUKKyAgICAgKglJZiBpbnRlcnJ1cHRlZDogU3RvcCByZWFkaW5nIHNjcmlwdCBmaWxlcy4KKyAgICAgKi8KKyAgICBzY3JpcHRfY2hhciA9IC0xOworICAgIHdoaWxlIChzY3JpcHRpbltjdXJzY3JpcHRdICE9IE5VTEwgJiYgc2NyaXB0X2NoYXIgPCAwKQorICAgIHsKKwlpZiAoZ290X2ludCB8fCAoc2NyaXB0X2NoYXIgPSBnZXRjKHNjcmlwdGluW2N1cnNjcmlwdF0pKSA8IDApCisJeworCSAgICAvKiBSZWFjaGVkIEVPRi4KKwkgICAgICogQ2FyZWZ1bDogY2xvc2VzY3JpcHQoKSBmcmVlcyB0eXBlYnVmLnRiX2J1ZltdIGFuZCBidWZbXSBtYXkKKwkgICAgICogcG9pbnQgaW5zaWRlIHR5cGVidWYudGJfYnVmW10uICBEb24ndCB1c2UgYnVmW10gYWZ0ZXIgdGhpcyEgKi8KKwkgICAgY2xvc2VzY3JpcHQoKTsKKwkgICAgLyoKKwkgICAgICogV2hlbiByZWFkaW5nIHNjcmlwdCBmaWxlIGlzIGludGVycnVwdGVkLCByZXR1cm4gYW4gRVNDIHRvIGdldAorCSAgICAgKiBiYWNrIHRvIG5vcm1hbCBtb2RlLgorCSAgICAgKiBPdGhlcndpc2UgcmV0dXJuIC0xLCBiZWNhdXNlIHR5cGVidWYudGJfYnVmW10gaGFzIGNoYW5nZWQuCisJICAgICAqLworCSAgICBpZiAoZ290X2ludCkKKwkJcmV0ZXNjID0gVFJVRTsKKwkgICAgZWxzZQorCQlyZXR1cm4gLTE7CisJfQorCWVsc2UKKwl7CisJICAgIGJ1ZlswXSA9IHNjcmlwdF9jaGFyOworCSAgICBsZW4gPSAxOworCX0KKyAgICB9CisKKyAgICBpZiAoc2NyaXB0X2NoYXIgPCAwKQkvKiBkaWQgbm90IGdldCBhIGNoYXJhY3RlciBmcm9tIHNjcmlwdCAqLworICAgIHsKKwkvKgorCSAqIElmIHdlIGdvdCBhbiBpbnRlcnJ1cHQsIHNraXAgYWxsIHByZXZpb3VzbHkgdHlwZWQgY2hhcmFjdGVycyBhbmQKKwkgKiByZXR1cm4gVFJVRSBpZiBxdWl0IHJlYWRpbmcgc2NyaXB0IGZpbGUuCisJICogU3RvcCByZWFkaW5nIHR5cGVhaGVhZCB3aGVuIGEgc2luZ2xlIENUUkwtQyB3YXMgcmVhZCwKKwkgKiBmaWxsX2lucHV0X2J1ZigpIHJldHVybnMgdGhpcyB3aGVuIG5vdCBhYmxlIHRvIHJlYWQgZnJvbSBzdGRpbi4KKwkgKiBEb24ndCB1c2UgYnVmW10gaGVyZSwgY2xvc2VzY3JpcHQoKSBtYXkgaGF2ZSBmcmVlZCB0eXBlYnVmLnRiX2J1ZltdCisJICogYW5kIGJ1ZiBtYXkgYmUgcG9pbnRpbmcgaW5zaWRlIHR5cGVidWYudGJfYnVmW10uCisJICovCisJaWYgKGdvdF9pbnQpCisJeworI2RlZmluZSBEVU1fTEVOIE1BWE1BUExFTiAqIDMgKyAzCisJICAgIGNoYXJfdQlkdW1bRFVNX0xFTiArIDFdOworCisJICAgIGZvciAoOzspCisJICAgIHsKKwkJbGVuID0gdWlfaW5jaGFyKGR1bSwgRFVNX0xFTiwgMEwsIDApOworCQlpZiAobGVuID09IDAgfHwgKGxlbiA9PSAxICYmIGR1bVswXSA9PSAzKSkKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIHJldHVybiByZXRlc2M7CisJfQorCisJLyoKKwkgKiBBbHdheXMgZmx1c2ggdGhlIG91dHB1dCBjaGFyYWN0ZXJzIHdoZW4gZ2V0dGluZyBpbnB1dCBjaGFyYWN0ZXJzCisJICogZnJvbSB0aGUgdXNlci4KKwkgKi8KKwlvdXRfZmx1c2goKTsKKworCS8qCisJICogRmlsbCB1cCB0byBhIHRoaXJkIG9mIHRoZSBidWZmZXIsIGJlY2F1c2UgZWFjaCBjaGFyYWN0ZXIgbWF5IGJlCisJICogdHJpcGxlZCBiZWxvdy4KKwkgKi8KKwlsZW4gPSB1aV9pbmNoYXIoYnVmLCBtYXhsZW4gLyAzLCB3YWl0X3RpbWUsIHRiX2NoYW5nZV9jbnQpOworICAgIH0KKworICAgIGlmICh0eXBlYnVmX2NoYW5nZWQodGJfY2hhbmdlX2NudCkpCisJcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZml4X2lucHV0X2J1ZmZlcihidWYsIGxlbiwgc2NyaXB0X2NoYXIgPj0gMCk7Cit9CisKKy8qCisgKiBGaXggdHlwZWQgY2hhcmFjdGVycyBmb3IgdXNlIGJ5IHZnZXRjKCkgYW5kIGNoZWNrX3Rlcm1jb2RlKCkuCisgKiBidWZbXSBtdXN0IGhhdmUgcm9vbSB0byB0cmlwbGUgdGhlIG51bWJlciBvZiBieXRlcyEKKyAqIFJldHVybnMgdGhlIG5ldyBsZW5ndGguCisgKi8KKyAgICBpbnQKK2ZpeF9pbnB1dF9idWZmZXIoYnVmLCBsZW4sIHNjcmlwdCkKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCXNjcmlwdDsJCS8qIFRSVUUgd2hlbiByZWFkaW5nIGZyb20gYSBzY3JpcHQgKi8KK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpwID0gYnVmOworCisgICAgLyoKKyAgICAgKiBUd28gY2hhcmFjdGVycyBhcmUgc3BlY2lhbDogTlVMIGFuZCBLX1NQRUNJQUwuCisgICAgICogV2hlbiBjb21waWxlZCBXaXRoIHRoZSBHVUkgQ1NJIGlzIGFsc28gc3BlY2lhbC4KKyAgICAgKiBSZXBsYWNlCSAgICAgTlVMIGJ5IEtfU1BFQ0lBTCBLU19aRVJPCSBLRV9GSUxMRVIKKyAgICAgKiBSZXBsYWNlIEtfU1BFQ0lBTCBieSBLX1NQRUNJQUwgS1NfU1BFQ0lBTCBLRV9GSUxMRVIKKyAgICAgKiBSZXBsYWNlICAgICAgIENTSSBieSBLX1NQRUNJQUwgS1NfRVhUUkEgICBLRV9DU0kKKyAgICAgKiBEb24ndCByZXBsYWNlIEtfU1BFQ0lBTCB3aGVuIHJlYWRpbmcgYSBzY3JpcHQgZmlsZS4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSBsZW47IC0taSA+PSAwOyArK3ApCisgICAgeworI2lmZGVmIEZFQVRfR1VJCisJLyogV2hlbiB0aGUgR1VJIGlzIHVzZWQgYW55IGNoYXJhY3RlciBjYW4gY29tZSBhZnRlciBhIENTSSwgZG9uJ3QKKwkgKiBlc2NhcGUgaXQuICovCisJaWYgKGd1aS5pbl91c2UgJiYgcFswXSA9PSBDU0kgJiYgaSA+PSAyKQorCXsKKwkgICAgcCArPSAyOworCSAgICBpIC09IDI7CisJfQorCS8qIFdoZW4gdGhlIEdVSSBpcyBub3QgdXNlZCBDU0kgbmVlZHMgdG8gYmUgZXNjYXBlZC4gKi8KKwllbHNlIGlmICghZ3VpLmluX3VzZSAmJiBwWzBdID09IENTSSkKKwl7CisJICAgIG1jaF9tZW1tb3ZlKHAgKyAzLCBwICsgMSwgKHNpemVfdClpKTsKKwkgICAgKnArKyA9IEtfU1BFQ0lBTDsKKwkgICAgKnArKyA9IEtTX0VYVFJBOworCSAgICAqcCA9IChpbnQpS0VfQ1NJOworCSAgICBsZW4gKz0gMjsKKwl9CisJZWxzZQorI2VuZGlmCisJaWYgKHBbMF0gPT0gTlVMIHx8IChwWzBdID09IEtfU1BFQ0lBTCAmJiAhc2NyaXB0CisjaWYgZGVmaW5lZChXSU4zMjY0KSAmJiAhZGVmaW5lZChGRUFUX0dVSSkKKwkJICAgIC8qIFdpbjMyIGNvbnNvbGUgcGFzc2VzIG1vZGlmaWVycyAqLworCQkgICAgJiYgKGkgPCAyIHx8IHBbMV0gIT0gS1NfTU9ESUZJRVIpCisjZW5kaWYKKwkJICAgICkpCisJeworCSAgICBtY2hfbWVtbW92ZShwICsgMywgcCArIDEsIChzaXplX3QpaSk7CisJICAgIHBbMl0gPSBLX1RISVJEKHBbMF0pOworCSAgICBwWzFdID0gS19TRUNPTkQocFswXSk7CisJICAgIHBbMF0gPSBLX1NQRUNJQUw7CisJICAgIHAgKz0gMjsKKwkgICAgbGVuICs9IDI7CisJfQorICAgIH0KKyAgICAqcCA9IE5VTDsJCS8qIGFkZCB0cmFpbGluZyBOVUwgKi8KKyAgICByZXR1cm4gbGVuOworfQorCisjaWYgZGVmaW5lZChVU0VfSU5QVVRfQlVGKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiBUUlVFIHdoZW4gYnl0ZXMgYXJlIGluIHRoZSBpbnB1dCBidWZmZXIgb3IgaW4gdGhlIHR5cGVhaGVhZCBidWZmZXIuCisgKiBOb3JtYWxseSB0aGUgaW5wdXQgYnVmZmVyIHdvdWxkIGJlIHN1ZmZpY2llbnQsIGJ1dCB0aGUgc2VydmVyX3RvX2lucHV0X2J1ZigpCisgKiBtYXkgaW5zZXJ0IGNoYXJhY3RlcnMgaW4gdGhlIHR5cGVhaGVhZCBidWZmZXIgd2hpbGUgd2UgYXJlIHdhaXRpbmcgZm9yCisgKiBpbnB1dCB0byBhcnJpdmUuCisgKi8KKyAgICBpbnQKK2lucHV0X2F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuICghdmltX2lzX2lucHV0X2J1Zl9lbXB0eSgpCisjIGlmZGVmIEZFQVRfQ0xJRU5UU0VSVkVSCisJICAgIHx8IHJlY2VpdmVkX2Zyb21fY2xpZW50CisjIGVuZGlmCisJICAgICk7Cit9CisjZW5kaWYKKworLyoKKyAqIG1hcFshXQkJICAgIDogc2hvdyBhbGwga2V5IG1hcHBpbmdzCisgKiBtYXBbIV0ge2xoc30JCSAgICA6IHNob3cga2V5IG1hcHBpbmcgZm9yIHtsaHN9CisgKiBtYXBbIV0ge2xoc30ge3Joc30JICAgIDogc2V0IGtleSBtYXBwaW5nIGZvciB7bGhzfSB0byB7cmhzfQorICogbm9yZW1hcFshXSB7bGhzfSB7cmhzfSAgIDogc2FtZSwgYnV0IG5vIHJlbWFwcGluZyBmb3Ige3Joc30KKyAqIHVubWFwWyFdIHtsaHN9CSAgICA6IHJlbW92ZSBrZXkgbWFwcGluZyBmb3Ige2xoc30KKyAqIGFiYnIJCQkgICAgOiBzaG93IGFsbCBhYmJyZXZpYXRpb25zCisgKiBhYmJyIHtsaHN9CQkgICAgOiBzaG93IGFiYnJldmlhdGlvbnMgZm9yIHtsaHN9CisgKiBhYmJyIHtsaHN9IHtyaHN9CSAgICA6IHNldCBhYmJyZXZpYXRpb24gZm9yIHtsaHN9IHRvIHtyaHN9CisgKiBub3JlYWJiciB7bGhzfSB7cmhzfQkgICAgOiBzYW1lLCBidXQgbm8gcmVtYXBwaW5nIGZvciB7cmhzfQorICogdW5hYmJyIHtsaHN9CQkgICAgOiByZW1vdmUgYWJicmV2aWF0aW9uIGZvciB7bGhzfQorICoKKyAqIG1hcHR5cGU6IDAgZm9yIDptYXAsIDEgZm9yIDp1bm1hcCwgMiBmb3Igbm9yZW1hcC4KKyAqCisgKiBhcmcgaXMgcG9pbnRlciB0byBhbnkgYXJndW1lbnRzLiBOb3RlOiBhcmcgY2Fubm90IGJlIGEgcmVhZC1vbmx5IHN0cmluZywKKyAqIGl0IHdpbGwgYmUgbW9kaWZpZWQuCisgKgorICogZm9yIDptYXAgICBtb2RlIGlzIE5PUk1BTCArIFZJU1VBTCArIE9QX1BFTkRJTkcKKyAqIGZvciA6bWFwISAgbW9kZSBpcyBJTlNFUlQgKyBDTURMSU5FCisgKiBmb3IgOmNtYXAgIG1vZGUgaXMgQ01ETElORQorICogZm9yIDppbWFwICBtb2RlIGlzIElOU0VSVAorICogZm9yIDpsbWFwICBtb2RlIGlzIExBTkdNQVAKKyAqIGZvciA6bm1hcCAgbW9kZSBpcyBOT1JNQUwKKyAqIGZvciA6dm1hcCAgbW9kZSBpcyBWSVNVQUwKKyAqIGZvciA6b21hcCAgbW9kZSBpcyBPUF9QRU5ESU5HCisgKgorICogZm9yIDphYmJyICBtb2RlIGlzIElOU0VSVCArIENNRExJTkUKKyAqIGZvciA6aWFiYnIgbW9kZSBpcyBJTlNFUlQKKyAqIGZvciA6Y2FiYnIgbW9kZSBpcyBDTURMSU5FCisgKgorICogUmV0dXJuIDAgZm9yIHN1Y2Nlc3MKKyAqCSAgMSBmb3IgaW52YWxpZCBhcmd1bWVudHMKKyAqCSAgMiBmb3Igbm8gbWF0Y2gKKyAqCSAgNCBmb3Igb3V0IG9mIG1lbQorICoJICA1IGZvciBlbnRyeSBub3QgdW5pcXVlCisgKi8KKyAgICBpbnQKK2RvX21hcChtYXB0eXBlLCBhcmcsIG1vZGUsIGFiYnJldikKKyAgICBpbnQJCW1hcHR5cGU7CisgICAgY2hhcl91CSphcmc7CisgICAgaW50CQltb2RlOworICAgIGludAkJYWJicmV2OwkJLyogbm90IGEgbWFwcGluZyBidXQgYW4gYWJicmV2aWF0aW9uICovCit7CisgICAgY2hhcl91CSprZXlzOworICAgIG1hcGJsb2NrX1QJKm1wLCAqKm1wcDsKKyAgICBjaGFyX3UJKnJoczsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQluOworICAgIGludAkJbGVuID0gMDsJLyogaW5pdCBmb3IgR0NDICovCisgICAgY2hhcl91CSpuZXdzdHI7CisgICAgaW50CQloYXNhcmc7CisgICAgaW50CQloYXNrZXk7CisgICAgaW50CQlkaWRfaXQgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisgICAgaW50CQlkaWRfbG9jYWwgPSBGQUxTRTsKKyNlbmRpZgorICAgIGludAkJcm91bmQ7CisgICAgY2hhcl91CSprZXlzX2J1ZiA9IE5VTEw7CisgICAgY2hhcl91CSphcmdfYnVmID0gTlVMTDsKKyAgICBpbnQJCXJldHZhbCA9IDA7CisgICAgaW50CQlkb19iYWNrc2xhc2g7CisgICAgaW50CQloYXNoOworICAgIGludAkJbmV3X2hhc2g7CisgICAgbWFwYmxvY2tfVAkqKmFiYnJfdGFibGU7CisgICAgbWFwYmxvY2tfVAkqKm1hcF90YWJsZTsKKyAgICBpbnQJCXVuaXF1ZSA9IEZBTFNFOworICAgIGludAkJc2lsZW50ID0gRkFMU0U7CisgICAgaW50CQlub3JlbWFwOworCisgICAga2V5cyA9IGFyZzsKKyAgICBtYXBfdGFibGUgPSBtYXBoYXNoOworICAgIGFiYnJfdGFibGUgPSAmZmlyc3RfYWJicjsKKworICAgIC8qIEZvciAiOm5vcmVtYXAiIGRvbid0IHJlbWFwLCBvdGhlcndpc2UgZG8gcmVtYXAuICovCisgICAgaWYgKG1hcHR5cGUgPT0gMikKKwlub3JlbWFwID0gUkVNQVBfTk9ORTsKKyAgICBlbHNlCisJbm9yZW1hcCA9IFJFTUFQX1lFUzsKKworICAgIC8qIEFjY2VwdCA8YnVmZmVyPiwgPHNpbGVudD4sIDxzY3JpcHQ+IGFuZCA8dW5pcXVlPiBpbiBhbnkgb3JkZXIuICovCisgICAgZm9yICg7OykKKyAgICB7CisjaWZkZWYgRkVBVF9MT0NBTE1BUAorCS8qCisJICogQ2hlY2sgZm9yICI8YnVmZmVyPiI6IG1hcHBpbmcgbG9jYWwgdG8gYnVmZmVyLgorCSAqLworCWlmIChTVFJOQ01QKGtleXMsICI8YnVmZmVyPiIsIDgpID09IDApCisJeworCSAgICBrZXlzID0gc2tpcHdoaXRlKGtleXMgKyA4KTsKKwkgICAgbWFwX3RhYmxlID0gY3VyYnVmLT5iX21hcGhhc2g7CisJICAgIGFiYnJfdGFibGUgPSAmY3VyYnVmLT5iX2ZpcnN0X2FiYnI7CisJICAgIGNvbnRpbnVlOworCX0KKyNlbmRpZgorCisJLyoKKwkgKiBDaGVjayBmb3IgIjxzaWxlbnQ+IjogZG9uJ3QgZWNobyBjb21tYW5kcy4KKwkgKi8KKwlpZiAoU1RSTkNNUChrZXlzLCAiPHNpbGVudD4iLCA4KSA9PSAwKQorCXsKKwkgICAga2V5cyA9IHNraXB3aGl0ZShrZXlzICsgOCk7CisJICAgIHNpbGVudCA9IFRSVUU7CisJICAgIGNvbnRpbnVlOworCX0KKworI2lmZGVmIEZFQVRfRVZBTAorCS8qCisJICogQ2hlY2sgZm9yICI8c2NyaXB0PiI6IHJlbWFwIHNjcmlwdC1sb2NhbCBtYXBwaW5ncyBvbmx5CisJICovCisJaWYgKFNUUk5DTVAoa2V5cywgIjxzY3JpcHQ+IiwgOCkgPT0gMCkKKwl7CisJICAgIGtleXMgPSBza2lwd2hpdGUoa2V5cyArIDgpOworCSAgICBub3JlbWFwID0gUkVNQVBfU0NSSVBUOworCSAgICBjb250aW51ZTsKKwl9CisjZW5kaWYKKwkvKgorCSAqIENoZWNrIGZvciAiPHVuaXF1ZT4iOiBkb24ndCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgbWFwcGluZy4KKwkgKi8KKwlpZiAoU1RSTkNNUChrZXlzLCAiPHVuaXF1ZT4iLCA4KSA9PSAwKQorCXsKKwkgICAga2V5cyA9IHNraXB3aGl0ZShrZXlzICsgOCk7CisJICAgIHVuaXF1ZSA9IFRSVUU7CisJICAgIGNvbnRpbnVlOworCX0KKwlicmVhazsKKyAgICB9CisKKyAgICB2YWxpZGF0ZV9tYXBoYXNoKCk7CisKKyAgICAvKgorICAgICAqIGZpbmQgZW5kIG9mIGtleXMgYW5kIHNraXAgQ1RSTC1WcyAoYW5kIGJhY2tzbGFzaGVzKSBpbiBpdAorICAgICAqIEFjY2VwdCBiYWNrc2xhc2ggbGlrZSBDVFJMLVYgd2hlbiAnY3BvcHRpb25zJyBkb2VzIG5vdCBjb250YWluICdCJy4KKyAgICAgKiB3aXRoIDp1bm1hcCB3aGl0ZSBzcGFjZSBpcyBpbmNsdWRlZCBpbiB0aGUga2V5cywgbm8gYXJndW1lbnQgcG9zc2libGUKKyAgICAgKi8KKyAgICBwID0ga2V5czsKKyAgICBkb19iYWNrc2xhc2ggPSAodmltX3N0cmNocihwX2NwbywgQ1BPX0JTTEFTSCkgPT0gTlVMTCk7CisgICAgd2hpbGUgKCpwICYmIChtYXB0eXBlID09IDEgfHwgIXZpbV9pc3doaXRlKCpwKSkpCisgICAgeworCWlmICgocFswXSA9PSBDdHJsX1YgfHwgKGRvX2JhY2tzbGFzaCAmJiBwWzBdID09ICdcXCcpKSAmJgorCQkJCQkJCQkgIHBbMV0gIT0gTlVMKQorCSAgICArK3A7CQkvKiBza2lwIENUUkwtViBvciBiYWNrc2xhc2ggKi8KKwkrK3A7CisgICAgfQorICAgIGlmICgqcCAhPSBOVUwpCisJKnArKyA9IE5VTDsKKyAgICBwID0gc2tpcHdoaXRlKHApOworICAgIHJocyA9IHA7CisgICAgaGFzYXJnID0gKCpyaHMgIT0gTlVMKTsKKyAgICBoYXNrZXkgPSAoKmtleXMgIT0gTlVMKTsKKworICAgIC8qIGNoZWNrIGZvciA6dW5tYXAgd2l0aG91dCBhcmd1bWVudCAqLworICAgIGlmIChtYXB0eXBlID09IDEgJiYgIWhhc2tleSkKKyAgICB7CisJcmV0dmFsID0gMTsKKwlnb3RvIHRoZWVuZDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIG1hcHBpbmcgaGFzIGJlZW4gZ2l2ZW4gYXMgXlY8Q19VUD4gc2F5LCB0aGVuIHJlcGxhY2UgdGhlIHRlcm0gY29kZXMKKyAgICAgKiB3aXRoIHRoZSBhcHByb3ByaWF0ZSB0d28gYnl0ZXMuIElmIGl0IGlzIGEgc2hpZnRlZCBzcGVjaWFsIGtleSwgdW5zaGlmdAorICAgICAqIGl0IHRvbywgZ2l2aW5nIGFub3RoZXIgdHdvIGJ5dGVzLgorICAgICAqIHJlcGxhY2VfdGVybWNvZGVzKCkgbWF5IG1vdmUgdGhlIHJlc3VsdCB0byBhbGxvY2F0ZWQgbWVtb3J5LCB3aGljaAorICAgICAqIG5lZWRzIHRvIGJlIGZyZWVkIGxhdGVyICgqa2V5c19idWYgYW5kICphcmdfYnVmKS4KKyAgICAgKiByZXBsYWNlX3Rlcm1jb2RlcygpIGFsc28gcmVtb3ZlcyBDVFJMLVZzIGFuZCBzb21ldGltZXMgYmFja3NsYXNoZXMuCisgICAgICovCisgICAgaWYgKGhhc2tleSkKKwlrZXlzID0gcmVwbGFjZV90ZXJtY29kZXMoa2V5cywgJmtleXNfYnVmLCBUUlVFLCBUUlVFKTsKKyAgICBpZiAoaGFzYXJnKQorICAgIHsKKwlpZiAoU1RSSUNNUChyaHMsICI8bm9wPiIpID09IDApCSAgICAvKiAiPE5vcD4iIG1lYW5zIG5vdGhpbmcgKi8KKwkgICAgcmhzID0gKGNoYXJfdSAqKSIiOworCWVsc2UKKwkgICAgcmhzID0gcmVwbGFjZV90ZXJtY29kZXMocmhzLCAmYXJnX2J1ZiwgRkFMU0UsIFRSVUUpOworICAgIH0KKworI2lmZGVmIEZFQVRfRktNQVAKKyAgICAvKgorICAgICAqIHdoZW4gaW4gcmlnaHQtdG8tbGVmdCBtb2RlIGFuZCBhbHRlcm5hdGUga2V5bWFwIG9wdGlvbiBzZXQsCisgICAgICogcmV2ZXJzZSB0aGUgY2hhcmFjdGVyIGZsb3cgaW4gdGhlIHJocyBpbiBGYXJzaS4KKyAgICAgKi8KKyAgICBpZiAocF9hbHRrZXltYXAgJiYgY3Vyd2luLT53X3BfcmwpCisJbHJzd2FwKHJocyk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogY2hlY2sgYXJndW1lbnRzIGFuZCB0cmFuc2xhdGUgZnVuY3Rpb24ga2V5cworICAgICAqLworICAgIGlmIChoYXNrZXkpCisgICAgeworCWxlbiA9IChpbnQpU1RSTEVOKGtleXMpOworCWlmIChsZW4gPiBNQVhNQVBMRU4pCQkvKiBtYXhpbXVtIGxlbmd0aCBvZiBNQVhNQVBMRU4gY2hhcnMgKi8KKwl7CisJICAgIHJldHZhbCA9IDE7CisJICAgIGdvdG8gdGhlZW5kOworCX0KKworCWlmIChhYmJyZXYgJiYgbWFwdHlwZSAhPSAxKQorCXsKKwkgICAgLyoKKwkgICAgICogSWYgYW4gYWJicmV2aWF0aW9uIGVuZHMgaW4gYSBrZXl3b3JkIGNoYXJhY3RlciwgdGhlCisJICAgICAqIHJlc3QgbXVzdCBiZSBhbGwga2V5d29yZC1jaGFyIG9yIGFsbCBub24ta2V5d29yZC1jaGFyLgorCSAgICAgKiBPdGhlcndpc2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byBmaW5kIHRoZSBzdGFydCBvZiBpdCBpbiBhCisJICAgICAqIHZpLWNvbXBhdGlibGUgd2F5LgorCSAgICAgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJICAgIHsKKwkJaW50CWZpcnN0LCBsYXN0OworCQlpbnQJc2FtZSA9IC0xOworCisJCWZpcnN0ID0gdmltX2lzd29yZHAoa2V5cyk7CisJCWxhc3QgPSBmaXJzdDsKKwkJcCA9IGtleXMgKyBtYl9wdHIybGVuX2NoZWNrKGtleXMpOworCQluID0gMTsKKwkJd2hpbGUgKHAgPCBrZXlzICsgbGVuKQorCQl7CisJCSAgICArK247CQkJLyogbnIgb2YgKG11bHRpLWJ5dGUpIGNoYXJzICovCisJCSAgICBsYXN0ID0gdmltX2lzd29yZHAocCk7CS8qIHR5cGUgb2YgbGFzdCBjaGFyICovCisJCSAgICBpZiAoc2FtZSA9PSAtMSAmJiBsYXN0ICE9IGZpcnN0KQorCQkJc2FtZSA9IG4gLSAxOwkJLyogY291bnQgb2Ygc2FtZSBjaGFyIHR5cGUgKi8KKwkJICAgIHAgKz0gbWJfcHRyMmxlbl9jaGVjayhwKTsKKwkJfQorCQlpZiAobGFzdCAmJiBuID4gMiAmJiBzYW1lID49IDAgJiYgc2FtZSA8IG4gLSAxKQorCQl7CisJCSAgICByZXR2YWwgPSAxOworCQkgICAgZ290byB0aGVlbmQ7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJaWYgKHZpbV9pc3dvcmRjKGtleXNbbGVuIC0gMV0pKQkvKiBlbmRzIGluIGtleXdvcmQgY2hhciAqLworCQkgICAgZm9yIChuID0gMDsgbiA8IGxlbiAtIDI7ICsrbikKKwkJCWlmICh2aW1faXN3b3JkYyhrZXlzW25dKSAhPSB2aW1faXN3b3JkYyhrZXlzW2xlbiAtIDJdKSkKKwkJCXsKKwkJCSAgICByZXR2YWwgPSAxOworCQkJICAgIGdvdG8gdGhlZW5kOworCQkJfQorCSAgICAvKiBBbiBhYmJyZXZhdGlvbiBjYW5ub3QgY29udGFpbiB3aGl0ZSBzcGFjZS4gKi8KKwkgICAgZm9yIChuID0gMDsgbiA8IGxlbjsgKytuKQorCQlpZiAodmltX2lzd2hpdGUoa2V5c1tuXSkpCisJCXsKKwkJICAgIHJldHZhbCA9IDE7CisJCSAgICBnb3RvIHRoZWVuZDsKKwkJfQorCX0KKyAgICB9CisKKyAgICBpZiAoaGFza2V5ICYmIGhhc2FyZyAmJiBhYmJyZXYpCS8qIGlmIHdlIHdpbGwgYWRkIGFuIGFiYnJldmlhdGlvbiAqLworCW5vX2FiYnIgPSBGQUxTRTsJCS8qIHJlc2V0IGZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhlcmUgYXJlCisJCQkJCQkJICAgIG5vIGFiYnJldmlhdGlvbnMgKi8KKworICAgIGlmICghaGFza2V5IHx8IChtYXB0eXBlICE9IDEgJiYgIWhhc2FyZykpCisJbXNnX3N0YXJ0KCk7CisKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiBhIG5ldyBsb2NhbCBtYXBwaW5nIHdhc24ndCBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuCisgICAgICovCisgICAgaWYgKG1hcF90YWJsZSA9PSBjdXJidWYtPmJfbWFwaGFzaCAmJiBoYXNrZXkgJiYgaGFzYXJnICYmIG1hcHR5cGUgIT0gMSkKKyAgICB7CisJLyogbmVlZCB0byBsb29wIG92ZXIgYWxsIGdsb2JhbCBoYXNoIGxpc3RzICovCisJZm9yIChoYXNoID0gMDsgaGFzaCA8IDI1NiAmJiAhZ290X2ludDsgKytoYXNoKQorCXsKKwkgICAgaWYgKGFiYnJldikKKwkgICAgeworCQlpZiAoaGFzaCAhPSAwKQkvKiB0aGVyZSBpcyBvbmx5IG9uZSBhYmJyZXZpYXRpb24gbGlzdCAqLworCQkgICAgYnJlYWs7CisJCW1wID0gZmlyc3RfYWJicjsKKwkgICAgfQorCSAgICBlbHNlCisJCW1wID0gbWFwaGFzaFtoYXNoXTsKKwkgICAgZm9yICggOyBtcCAhPSBOVUxMICYmICFnb3RfaW50OyBtcCA9IG1wLT5tX25leHQpCisJICAgIHsKKwkJLyogY2hlY2sgZW50cmllcyB3aXRoIHRoZSBzYW1lIG1vZGUgKi8KKwkJaWYgKChtcC0+bV9tb2RlICYgbW9kZSkgIT0gMAorCQkJJiYgbXAtPm1fa2V5bGVuID09IGxlbgorCQkJJiYgdW5pcXVlCisJCQkmJiBTVFJOQ01QKG1wLT5tX2tleXMsIGtleXMsIChzaXplX3QpbGVuKSA9PSAwKQorCQl7CisJCSAgICBpZiAoYWJicmV2KQorCQkJRU1TRzIoXygiRTIyNDogZ2xvYmFsIGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiKSwKKwkJCQltcC0+bV9rZXlzKTsKKwkJICAgIGVsc2UKKwkJCUVNU0cyKF8oIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIpLAorCQkJCW1wLT5tX2tleXMpOworCQkgICAgcmV0dmFsID0gNTsKKwkJICAgIGdvdG8gdGhlZW5kOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXaGVuIGxpc3RpbmcgZ2xvYmFsIG1hcHBpbmdzLCBhbHNvIGxpc3QgYnVmZmVyLWxvY2FsIG9uZXMgaGVyZS4KKyAgICAgKi8KKyAgICBpZiAobWFwX3RhYmxlICE9IGN1cmJ1Zi0+Yl9tYXBoYXNoICYmICFoYXNhcmcgJiYgbWFwdHlwZSAhPSAxKQorICAgIHsKKwkvKiBuZWVkIHRvIGxvb3Agb3ZlciBhbGwgZ2xvYmFsIGhhc2ggbGlzdHMgKi8KKwlmb3IgKGhhc2ggPSAwOyBoYXNoIDwgMjU2ICYmICFnb3RfaW50OyArK2hhc2gpCisJeworCSAgICBpZiAoYWJicmV2KQorCSAgICB7CisJCWlmIChoYXNoICE9IDApCS8qIHRoZXJlIGlzIG9ubHkgb25lIGFiYnJldmlhdGlvbiBsaXN0ICovCisJCSAgICBicmVhazsKKwkJbXAgPSBjdXJidWYtPmJfZmlyc3RfYWJicjsKKwkgICAgfQorCSAgICBlbHNlCisJCW1wID0gY3VyYnVmLT5iX21hcGhhc2hbaGFzaF07CisJICAgIGZvciAoIDsgbXAgIT0gTlVMTCAmJiAhZ290X2ludDsgbXAgPSBtcC0+bV9uZXh0KQorCSAgICB7CisJCS8qIGNoZWNrIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBtb2RlICovCisJCWlmICgobXAtPm1fbW9kZSAmIG1vZGUpICE9IDApCisJCXsKKwkJICAgIGlmICghaGFza2V5KQkJICAgIC8qIHNob3cgYWxsIGVudHJpZXMgKi8KKwkJICAgIHsKKwkJCXNob3dtYXAobXAsIFRSVUUpOworCQkJZGlkX2xvY2FsID0gVFJVRTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCW4gPSBtcC0+bV9rZXlsZW47CisJCQlpZiAoU1RSTkNNUChtcC0+bV9rZXlzLCBrZXlzLAorCQkJCQkgICAgKHNpemVfdCkobiA8IGxlbiA/IG4gOiBsZW4pKSA9PSAwKQorCQkJeworCQkJICAgIHNob3dtYXAobXAsIFRSVUUpOworCQkJICAgIGRpZF9sb2NhbCA9IFRSVUU7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogRmluZCBhbiBlbnRyeSBpbiB0aGUgbWFwaGFzaFtdIGxpc3QgdGhhdCBtYXRjaGVzLgorICAgICAqIEZvciA6dW5tYXAgd2UgbWF5IGxvb3AgdHdvIHRpbWVzOiBvbmNlIHRvIHRyeSB0byB1bm1hcCBhbiBlbnRyeSB3aXRoIGEKKyAgICAgKiBtYXRjaGluZyAnZnJvbScgcGFydCwgYSBzZWNvbmQgdGltZSwgaWYgdGhlIGZpcnN0IGZhaWxzLCB0byB1bm1hcCBhbgorICAgICAqIGVudHJ5IHdpdGggYSBtYXRjaGluZyAndG8nIHBhcnQuIFRoaXMgd2FzIGRvbmUgdG8gYWxsb3cgIjphYiBmb28gYmFyIgorICAgICAqIHRvIGJlIHVubWFwcGVkIGJ5IHR5cGluZyAiOnVuYWIgZm9vIiwgd2hlcmUgImZvbyIgd2lsbCBiZSByZXBsYWNlZCBieQorICAgICAqICJiYXIiIGJlY2F1c2Ugb2YgdGhlIGFiYnJldmlhdGlvbi4KKyAgICAgKi8KKyAgICBmb3IgKHJvdW5kID0gMDsgKHJvdW5kID09IDAgfHwgbWFwdHlwZSA9PSAxKSAmJiByb3VuZCA8PSAxCisJCQkJCSAgICAgICYmICFkaWRfaXQgJiYgIWdvdF9pbnQ7ICsrcm91bmQpCisgICAgeworCS8qIG5lZWQgdG8gbG9vcCBvdmVyIGFsbCBoYXNoIGxpc3RzICovCisJZm9yIChoYXNoID0gMDsgaGFzaCA8IDI1NiAmJiAhZ290X2ludDsgKytoYXNoKQorCXsKKwkgICAgaWYgKGFiYnJldikKKwkgICAgeworCQlpZiAoaGFzaCAhPSAwKQkvKiB0aGVyZSBpcyBvbmx5IG9uZSBhYmJyZXZpYXRpb24gbGlzdCAqLworCQkgICAgYnJlYWs7CisJCW1wcCA9IGFiYnJfdGFibGU7CisJICAgIH0KKwkgICAgZWxzZQorCQltcHAgPSAmKG1hcF90YWJsZVtoYXNoXSk7CisJICAgIGZvciAobXAgPSAqbXBwOyBtcCAhPSBOVUxMICYmICFnb3RfaW50OyBtcCA9ICptcHApCisJICAgIHsKKworCQlpZiAoIShtcC0+bV9tb2RlICYgbW9kZSkpICAgLyogc2tpcCBlbnRyaWVzIHdpdGggd3JvbmcgbW9kZSAqLworCQl7CisJCSAgICBtcHAgPSAmKG1wLT5tX25leHQpOworCQkgICAgY29udGludWU7CisJCX0KKwkJaWYgKCFoYXNrZXkpCQkgICAgLyogc2hvdyBhbGwgZW50cmllcyAqLworCQl7CisJCSAgICBzaG93bWFwKG1wLCBtYXBfdGFibGUgIT0gbWFwaGFzaCk7CisJCSAgICBkaWRfaXQgPSBUUlVFOworCQl9CisJCWVsc2UJCQkgICAgLyogZG8gd2UgaGF2ZSBhIG1hdGNoPyAqLworCQl7CisJCSAgICBpZiAocm91bmQpCSAgICAvKiBzZWNvbmQgcm91bmQ6IFRyeSB1bm1hcCAicmhzIiBzdHJpbmcgKi8KKwkJICAgIHsKKwkJCW4gPSAoaW50KVNUUkxFTihtcC0+bV9zdHIpOworCQkJcCA9IG1wLT5tX3N0cjsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCW4gPSBtcC0+bV9rZXlsZW47CisJCQlwID0gbXAtPm1fa2V5czsKKwkJICAgIH0KKwkJICAgIGlmIChTVFJOQ01QKHAsIGtleXMsIChzaXplX3QpKG4gPCBsZW4gPyBuIDogbGVuKSkgPT0gMCkKKwkJICAgIHsKKwkJCWlmIChtYXB0eXBlID09IDEpCS8qIGRlbGV0ZSBlbnRyeSAqLworCQkJeworCQkJICAgIC8qIE9ubHkgYWNjZXB0IGEgZnVsbCBtYXRjaC4gIEZvciBhYmJyZXZpYXRpb25zIHdlCisJCQkgICAgICogaWdub3JlIHRyYWlsaW5nIHNwYWNlIHdoZW4gbWF0Y2hpbmcgd2l0aCB0aGUKKwkJCSAgICAgKiAibGhzIiwgc2luY2UgYW4gYWJicmV2aWF0aW9uIGNhbid0IGhhdmUKKwkJCSAgICAgKiB0cmFpbGluZyBzcGFjZS4gKi8KKwkJCSAgICBpZiAobiAhPSBsZW4gJiYgKCFhYmJyZXYgfHwgcm91bmQgfHwgbiA+IGxlbgorCQkJCQkgICAgICAgfHwgKnNraXB3aGl0ZShrZXlzICsgbikgIT0gTlVMKSkKKwkJCSAgICB7CisJCQkJbXBwID0gJihtcC0+bV9uZXh0KTsKKwkJCQljb250aW51ZTsKKwkJCSAgICB9CisJCQkgICAgLyoKKwkJCSAgICAgKiBXZSByZXNldCB0aGUgaW5kaWNhdGVkIG1vZGUgYml0cy4gSWYgbm90aGluZyBpcworCQkJICAgICAqIGxlZnQgdGhlIGVudHJ5IGlzIGRlbGV0ZWQgYmVsb3cuCisJCQkgICAgICovCisJCQkgICAgbXAtPm1fbW9kZSAmPSB+bW9kZTsKKwkJCSAgICBkaWRfaXQgPSBUUlVFOwkvKiByZW1lbWJlciB3ZSBkaWQgc29tZXRoaW5nICovCisJCQl9CisJCQllbHNlIGlmICghaGFzYXJnKQkvKiBzaG93IG1hdGNoaW5nIGVudHJ5ICovCisJCQl7CisJCQkgICAgc2hvd21hcChtcCwgbWFwX3RhYmxlICE9IG1hcGhhc2gpOworCQkJICAgIGRpZF9pdCA9IFRSVUU7CisJCQl9CisJCQllbHNlIGlmIChuICE9IGxlbikJLyogbmV3IGVudHJ5IGlzIGFtYmlnaW91cyAqLworCQkJeworCQkJICAgIG1wcCA9ICYobXAtPm1fbmV4dCk7CisJCQkgICAgY29udGludWU7CisJCQl9CisJCQllbHNlIGlmICh1bmlxdWUpCisJCQl7CisJCQkgICAgaWYgKGFiYnJldikKKwkJCQlFTVNHMihfKCJFMjI2OiBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIiksCisJCQkJCQkJCQkgICBwKTsKKwkJCSAgICBlbHNlCisJCQkJRU1TRzIoXygiRTIyNzogbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiKSwgcCk7CisJCQkgICAgcmV0dmFsID0gNTsKKwkJCSAgICBnb3RvIHRoZWVuZDsKKwkJCX0KKwkJCWVsc2UJCQkvKiBuZXcgcmhzIGZvciBleGlzdGluZyBlbnRyeSAqLworCQkJeworCQkJICAgIG1wLT5tX21vZGUgJj0gfm1vZGU7CS8qIHJlbW92ZSBtb2RlIGJpdHMgKi8KKwkJCSAgICBpZiAobXAtPm1fbW9kZSA9PSAwICYmICFkaWRfaXQpIC8qIHJldXNlIGVudHJ5ICovCisJCQkgICAgeworCQkJCW5ld3N0ciA9IHZpbV9zdHJzYXZlKHJocyk7CisJCQkJaWYgKG5ld3N0ciA9PSBOVUxMKQorCQkJCXsKKwkJCQkgICAgcmV0dmFsID0gNDsJCS8qIG5vIG1lbSAqLworCQkJCSAgICBnb3RvIHRoZWVuZDsKKwkJCQl9CisJCQkJdmltX2ZyZWUobXAtPm1fc3RyKTsKKwkJCQltcC0+bV9zdHIgPSBuZXdzdHI7CisJCQkJbXAtPm1fbm9yZW1hcCA9IG5vcmVtYXA7CisJCQkJbXAtPm1fc2lsZW50ID0gc2lsZW50OworCQkJCW1wLT5tX21vZGUgPSBtb2RlOworCQkJCWRpZF9pdCA9IFRSVUU7CisJCQkgICAgfQorCQkJfQorCQkJaWYgKG1wLT5tX21vZGUgPT0gMCkJLyogZW50cnkgY2FuIGJlIGRlbGV0ZWQgKi8KKwkJCXsKKwkJCSAgICBtYXBfZnJlZShtcHApOworCQkJICAgIGNvbnRpbnVlOwkJLyogY29udGludWUgd2l0aCAqbXBwICovCisJCQl9CisKKwkJCS8qCisJCQkgKiBNYXkgbmVlZCB0byBwdXQgdGhpcyBlbnRyeSBpbnRvIGFub3RoZXIgaGFzaCBsaXN0LgorCQkJICovCisJCQluZXdfaGFzaCA9IE1BUF9IQVNIKG1wLT5tX21vZGUsIG1wLT5tX2tleXNbMF0pOworCQkJaWYgKCFhYmJyZXYgJiYgbmV3X2hhc2ggIT0gaGFzaCkKKwkJCXsKKwkJCSAgICAqbXBwID0gbXAtPm1fbmV4dDsKKwkJCSAgICBtcC0+bV9uZXh0ID0gbWFwX3RhYmxlW25ld19oYXNoXTsKKwkJCSAgICBtYXBfdGFibGVbbmV3X2hhc2hdID0gbXA7CisKKwkJCSAgICBjb250aW51ZTsJCS8qIGNvbnRpbnVlIHdpdGggKm1wcCAqLworCQkJfQorCQkgICAgfQorCQl9CisJCW1wcCA9ICYobXAtPm1fbmV4dCk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKG1hcHR5cGUgPT0gMSkJCQkgICAgLyogZGVsZXRlIGVudHJ5ICovCisgICAgeworCWlmICghZGlkX2l0KQorCSAgICByZXR2YWwgPSAyOwkJCSAgICAvKiBubyBtYXRjaCAqLworCWdvdG8gdGhlZW5kOworICAgIH0KKworICAgIGlmICghaGFza2V5IHx8ICFoYXNhcmcpCQkgICAgLyogcHJpbnQgZW50cmllcyAqLworICAgIHsKKwlpZiAoIWRpZF9pdAorI2lmZGVmIEZFQVRfTE9DQUxNQVAKKwkJJiYgIWRpZF9sb2NhbAorI2VuZGlmCisJCSkKKwl7CisJICAgIGlmIChhYmJyZXYpCisJCU1TRyhfKCJObyBhYmJyZXZpYXRpb24gZm91bmQiKSk7CisJICAgIGVsc2UKKwkJTVNHKF8oIk5vIG1hcHBpbmcgZm91bmQiKSk7CisJfQorCWdvdG8gdGhlZW5kOwkJCSAgICAvKiBsaXN0aW5nIGZpbmlzaGVkICovCisgICAgfQorCisgICAgaWYgKGRpZF9pdCkJCQkvKiBoYXZlIGFkZGVkIHRoZSBuZXcgZW50cnkgYWxyZWFkeSAqLworCWdvdG8gdGhlZW5kOworCisgICAgLyoKKyAgICAgKiBHZXQgaGVyZSB3aGVuIGFkZGluZyBhIG5ldyBlbnRyeSB0byB0aGUgbWFwaGFzaFtdIGxpc3Qgb3IgYWJicmxpc3QuCisgICAgICovCisgICAgbXAgPSAobWFwYmxvY2tfVCAqKWFsbG9jKCh1bnNpZ25lZClzaXplb2YobWFwYmxvY2tfVCkpOworICAgIGlmIChtcCA9PSBOVUxMKQorICAgIHsKKwlyZXR2YWwgPSA0OwkgICAgLyogbm8gbWVtICovCisJZ290byB0aGVlbmQ7CisgICAgfQorCisgICAgLyogSWYgQ1RSTC1DIGhhcyBiZWVuIG1hcHBlZCwgZG9uJ3QgYWx3YXlzIHVzZSBpdCBmb3IgSW50ZXJydXB0aW5nICovCisgICAgaWYgKCprZXlzID09IEN0cmxfQykKKwltYXBwZWRfY3RybF9jID0gVFJVRTsKKworICAgIG1wLT5tX2tleXMgPSB2aW1fc3Ryc2F2ZShrZXlzKTsKKyAgICBtcC0+bV9zdHIgPSB2aW1fc3Ryc2F2ZShyaHMpOworICAgIGlmIChtcC0+bV9rZXlzID09IE5VTEwgfHwgbXAtPm1fc3RyID09IE5VTEwpCisgICAgeworCXZpbV9mcmVlKG1wLT5tX2tleXMpOworCXZpbV9mcmVlKG1wLT5tX3N0cik7CisJdmltX2ZyZWUobXApOworCXJldHZhbCA9IDQ7CS8qIG5vIG1lbSAqLworCWdvdG8gdGhlZW5kOworICAgIH0KKyAgICBtcC0+bV9rZXlsZW4gPSAoaW50KVNUUkxFTihtcC0+bV9rZXlzKTsKKyAgICBtcC0+bV9ub3JlbWFwID0gbm9yZW1hcDsKKyAgICBtcC0+bV9zaWxlbnQgPSBzaWxlbnQ7CisgICAgbXAtPm1fbW9kZSA9IG1vZGU7CisKKyAgICAvKiBhZGQgdGhlIG5ldyBlbnRyeSBpbiBmcm9udCBvZiB0aGUgYWJicmxpc3Qgb3IgbWFwaGFzaFtdIGxpc3QgKi8KKyAgICBpZiAoYWJicmV2KQorICAgIHsKKwltcC0+bV9uZXh0ID0gKmFiYnJfdGFibGU7CisJKmFiYnJfdGFibGUgPSBtcDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwluID0gTUFQX0hBU0gobXAtPm1fbW9kZSwgbXAtPm1fa2V5c1swXSk7CisJbXAtPm1fbmV4dCA9IG1hcF90YWJsZVtuXTsKKwltYXBfdGFibGVbbl0gPSBtcDsKKyAgICB9CisKK3RoZWVuZDoKKyAgICB2aW1fZnJlZShrZXlzX2J1Zik7CisgICAgdmltX2ZyZWUoYXJnX2J1Zik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIERlbGV0ZSBvbmUgZW50cnkgZnJvbSB0aGUgYWJicmxpc3Qgb3IgbWFwaGFzaFtdLgorICogIm1wcCIgaXMgYSBwb2ludGVyIHRvIHRoZSBtX25leHQgZmllbGQgb2YgdGhlIFBSRVZJT1VTIGVudHJ5IQorICovCisgICAgc3RhdGljIHZvaWQKK21hcF9mcmVlKG1wcCkKKyAgICBtYXBibG9ja19UCSoqbXBwOworeworICAgIG1hcGJsb2NrX1QJKm1wOworCisgICAgbXAgPSAqbXBwOworICAgIHZpbV9mcmVlKG1wLT5tX2tleXMpOworICAgIHZpbV9mcmVlKG1wLT5tX3N0cik7CisgICAgKm1wcCA9IG1wLT5tX25leHQ7CisgICAgdmltX2ZyZWUobXApOworfQorCisvKgorICogSW5pdGlhbGl6ZSBtYXBoYXNoW10gZm9yIGZpcnN0IHVzZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCit2YWxpZGF0ZV9tYXBoYXNoKCkKK3sKKyAgICBpZiAoIW1hcGhhc2hfdmFsaWQpCisgICAgeworCXZpbV9tZW1zZXQobWFwaGFzaCwgMCwgc2l6ZW9mKG1hcGhhc2gpKTsKKwltYXBoYXNoX3ZhbGlkID0gVFJVRTsKKyAgICB9Cit9CisKKy8qCisgKiBHZXQgdGhlIG1hcHBpbmcgbW9kZSBmcm9tIHRoZSBjb21tYW5kIG5hbWUuCisgKi8KKyAgICBpbnQKK2dldF9tYXBfbW9kZShjbWRwLCBmb3JjZWl0KQorICAgIGNoYXJfdQkqKmNtZHA7CisgICAgaW50CQlmb3JjZWl0OworeworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCW1vZGVjOworICAgIGludAkJbW9kZTsKKworICAgIHAgPSAqY21kcDsKKyAgICBtb2RlYyA9ICpwKys7CisgICAgaWYgKG1vZGVjID09ICdpJykKKwltb2RlID0gSU5TRVJUOwkJCQkvKiA6aW1hcCAqLworICAgIGVsc2UgaWYgKG1vZGVjID09ICdsJykKKwltb2RlID0gTEFOR01BUDsJCQkJLyogOmxtYXAgKi8KKyAgICBlbHNlIGlmIChtb2RlYyA9PSAnYycpCisJbW9kZSA9IENNRExJTkU7CQkJCS8qIDpjbWFwICovCisgICAgZWxzZSBpZiAobW9kZWMgPT0gJ24nICYmICpwICE9ICdvJykJCSAgICAvKiBhdm9pZCA6bm9yZW1hcCAqLworCW1vZGUgPSBOT1JNQUw7CQkJCS8qIDpubWFwICovCisgICAgZWxzZSBpZiAobW9kZWMgPT0gJ3YnKQorCW1vZGUgPSBWSVNVQUw7CQkJCS8qIDp2bWFwICovCisgICAgZWxzZSBpZiAobW9kZWMgPT0gJ28nKQorCW1vZGUgPSBPUF9QRU5ESU5HOwkJCS8qIDpvbWFwICovCisgICAgZWxzZQorICAgIHsKKwktLXA7CisJaWYgKGZvcmNlaXQpCisJICAgIG1vZGUgPSBJTlNFUlQgKyBDTURMSU5FOwkJLyogOm1hcCAhICovCisJZWxzZQorCSAgICBtb2RlID0gVklTVUFMICsgTk9STUFMICsgT1BfUEVORElORzsvKiA6bWFwICovCisgICAgfQorCisgICAgKmNtZHAgPSBwOworICAgIHJldHVybiBtb2RlOworfQorCisvKgorICogQ2xlYXIgYWxsIG1hcHBpbmdzIG9yIGFiYnJldmlhdGlvbnMuCisgKiAnYWJicicgc2hvdWxkIGJlIEZBTFNFIGZvciBtYXBwaW5ncywgVFJVRSBmb3IgYWJicmV2aWF0aW9ucy4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorbWFwX2NsZWFyKGNtZHAsIGFyZywgZm9yY2VpdCwgYWJicikKKyAgICBjaGFyX3UJKmNtZHA7CisgICAgY2hhcl91CSphcmc7CisgICAgaW50CQlmb3JjZWl0OworICAgIGludAkJYWJicjsKK3sKKyAgICBpbnQJCW1vZGU7CisjaWZkZWYgRkVBVF9MT0NBTE1BUAorICAgIGludAkJbG9jYWw7CisKKyAgICBsb2NhbCA9IChTVFJDTVAoYXJnLCAiPGJ1ZmZlcj4iKSA9PSAwKTsKKyAgICBpZiAoIWxvY2FsICYmICphcmcgIT0gTlVMKQorICAgIHsKKwlFTVNHKF8oZV9pbnZhcmcpKTsKKwlyZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBtb2RlID0gZ2V0X21hcF9tb2RlKCZjbWRwLCBmb3JjZWl0KTsKKyAgICBtYXBfY2xlYXJfaW50KGN1cmJ1ZiwgbW9kZSwKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisJICAgIGxvY2FsLAorI2Vsc2UKKwkgICAgRkFMU0UsCisjZW5kaWYKKwkgICAgYWJicik7Cit9CisKKy8qCisgKiBDbGVhciBhbGwgbWFwcGluZ3MgaW4gIm1vZGUiLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCittYXBfY2xlYXJfaW50KGJ1ZiwgbW9kZSwgbG9jYWwsIGFiYnIpCisgICAgYnVmX1QJKmJ1ZjsJICAgIC8qIGJ1ZmZlciBmb3IgbG9jYWwgbWFwcGluZ3MgKi8KKyAgICBpbnQJCW1vZGU7CSAgICAvKiBtb2RlIGluIHdoaWNoIHRvIGRlbGV0ZSAqLworICAgIGludAkJbG9jYWw7CSAgICAvKiBUUlVFIGZvciBidWZmZXItbG9jYWwgbWFwcGluZ3MgKi8KKyAgICBpbnQJCWFiYnI7CSAgICAvKiBUUlVFIGZvciBhYmJyZXZpYXRpb25zICovCit7CisgICAgbWFwYmxvY2tfVAkqbXAsICoqbXBwOworICAgIGludAkJaGFzaDsKKyAgICBpbnQJCW5ld19oYXNoOworCisgICAgdmFsaWRhdGVfbWFwaGFzaCgpOworCisgICAgZm9yIChoYXNoID0gMDsgaGFzaCA8IDI1NjsgKytoYXNoKQorICAgIHsKKwlpZiAoYWJicikKKwl7CisJICAgIGlmIChoYXNoKQkgICAgLyogdGhlcmUgaXMgb25seSBvbmUgYWJicmxpc3QgKi8KKwkJYnJlYWs7CisjaWZkZWYgRkVBVF9MT0NBTE1BUAorCSAgICBpZiAobG9jYWwpCisJCW1wcCA9ICZidWYtPmJfZmlyc3RfYWJicjsKKwkgICAgZWxzZQorI2VuZGlmCisJCW1wcCA9ICZmaXJzdF9hYmJyOworCX0KKwllbHNlCisJeworI2lmZGVmIEZFQVRfTE9DQUxNQVAKKwkgICAgaWYgKGxvY2FsKQorCQltcHAgPSAmYnVmLT5iX21hcGhhc2hbaGFzaF07CisJICAgIGVsc2UKKyNlbmRpZgorCQltcHAgPSAmbWFwaGFzaFtoYXNoXTsKKwl9CisJd2hpbGUgKCptcHAgIT0gTlVMTCkKKwl7CisJICAgIG1wID0gKm1wcDsKKwkgICAgaWYgKG1wLT5tX21vZGUgJiBtb2RlKQorCSAgICB7CisJCW1wLT5tX21vZGUgJj0gfm1vZGU7CisJCWlmIChtcC0+bV9tb2RlID09IDApIC8qIGVudHJ5IGNhbiBiZSBkZWxldGVkICovCisJCXsKKwkJICAgIG1hcF9mcmVlKG1wcCk7CisJCSAgICBjb250aW51ZTsKKwkJfQorCQkvKgorCQkgKiBNYXkgbmVlZCB0byBwdXQgdGhpcyBlbnRyeSBpbnRvIGFub3RoZXIgaGFzaCBsaXN0LgorCQkgKi8KKwkJbmV3X2hhc2ggPSBNQVBfSEFTSChtcC0+bV9tb2RlLCBtcC0+bV9rZXlzWzBdKTsKKwkJaWYgKCFhYmJyICYmIG5ld19oYXNoICE9IGhhc2gpCisJCXsKKwkJICAgICptcHAgPSBtcC0+bV9uZXh0OworI2lmZGVmIEZFQVRfTE9DQUxNQVAKKwkJICAgIGlmIChsb2NhbCkKKwkJICAgIHsKKwkJCW1wLT5tX25leHQgPSBidWYtPmJfbWFwaGFzaFtuZXdfaGFzaF07CisJCQlidWYtPmJfbWFwaGFzaFtuZXdfaGFzaF0gPSBtcDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKyNlbmRpZgorCQkgICAgeworCQkJbXAtPm1fbmV4dCA9IG1hcGhhc2hbbmV3X2hhc2hdOworCQkJbWFwaGFzaFtuZXdfaGFzaF0gPSBtcDsKKwkJICAgIH0KKwkJICAgIGNvbnRpbnVlOwkJLyogY29udGludWUgd2l0aCAqbXBwICovCisJCX0KKwkgICAgfQorCSAgICBtcHAgPSAmKG1wLT5tX25leHQpOworCX0KKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorc2hvd21hcChtcCwgbG9jYWwpCisgICAgbWFwYmxvY2tfVAkqbXA7CisgICAgaW50CQlsb2NhbDsJICAgIC8qIFRSVUUgZm9yIGJ1ZmZlci1sb2NhbCBtYXAgKi8KK3sKKyAgICBpbnQgbGVuID0gMTsKKworICAgIGlmIChtc2dfZGlkb3V0IHx8IG1zZ19zaWxlbnQgIT0gMCkKKwltc2dfcHV0Y2hhcignXG4nKTsKKyAgICBpZiAoKG1wLT5tX21vZGUgJiAoSU5TRVJUICsgQ01ETElORSkpID09IElOU0VSVCArIENNRExJTkUpCisJbXNnX3B1dGNoYXIoJyEnKTsJCQkvKiA6bWFwISAqLworICAgIGVsc2UgaWYgKG1wLT5tX21vZGUgJiBJTlNFUlQpCisJbXNnX3B1dGNoYXIoJ2knKTsJCQkvKiA6aW1hcCAqLworICAgIGVsc2UgaWYgKG1wLT5tX21vZGUgJiBMQU5HTUFQKQorCW1zZ19wdXRjaGFyKCdsJyk7CQkJLyogOmxtYXAgKi8KKyAgICBlbHNlIGlmIChtcC0+bV9tb2RlICYgQ01ETElORSkKKwltc2dfcHV0Y2hhcignYycpOwkJCS8qIDpjbWFwICovCisgICAgZWxzZSBpZiAoKG1wLT5tX21vZGUgJiAoTk9STUFMICsgVklTVUFMICsgT1BfUEVORElORykpCisJCQkJCSAgICAgID09IE5PUk1BTCArIFZJU1VBTCArIE9QX1BFTkRJTkcpCisJbXNnX3B1dGNoYXIoJyAnKTsJCQkvKiA6bWFwICovCisgICAgZWxzZQorICAgIHsKKwlsZW4gPSAwOworCWlmIChtcC0+bV9tb2RlICYgTk9STUFMKQorCXsKKwkgICAgbXNnX3B1dGNoYXIoJ24nKTsJCS8qIDpubWFwICovCisJICAgICsrbGVuOworCX0KKwlpZiAobXAtPm1fbW9kZSAmIE9QX1BFTkRJTkcpCisJeworCSAgICBtc2dfcHV0Y2hhcignbycpOwkJLyogOm9tYXAgKi8KKwkgICAgKytsZW47CisJfQorCWlmIChtcC0+bV9tb2RlICYgVklTVUFMKQorCXsKKwkgICAgbXNnX3B1dGNoYXIoJ3YnKTsJCS8qIDp2bWFwICovCisJICAgICsrbGVuOworCX0KKyAgICB9CisgICAgd2hpbGUgKCsrbGVuIDw9IDMpCisJbXNnX3B1dGNoYXIoJyAnKTsKKworICAgIC8qIEdldCBsZW5ndGggb2Ygd2hhdCB3ZSB3cml0ZSAqLworICAgIGxlbiA9IG1zZ19vdXR0cmFuc19zcGVjaWFsKG1wLT5tX2tleXMsIFRSVUUpOworICAgIGRvCisgICAgeworCW1zZ19wdXRjaGFyKCcgJyk7CQkvKiBwYWRkIHdpdGggYmxhbmtzICovCisJKytsZW47CisgICAgfSB3aGlsZSAobGVuIDwgMTIpOworCisgICAgaWYgKG1wLT5tX25vcmVtYXAgPT0gUkVNQVBfTk9ORSkKKwltc2dfcHV0c19hdHRyKChjaGFyX3UgKikiKiIsIGhsX2F0dHIoSExGXzgpKTsKKyAgICBlbHNlIGlmIChtcC0+bV9ub3JlbWFwID09IFJFTUFQX1NDUklQVCkKKwltc2dfcHV0c19hdHRyKChjaGFyX3UgKikiJiIsIGhsX2F0dHIoSExGXzgpKTsKKyAgICBlbHNlCisJbXNnX3B1dGNoYXIoJyAnKTsKKworICAgIGlmIChsb2NhbCkKKwltc2dfcHV0Y2hhcignQCcpOworICAgIGVsc2UKKwltc2dfcHV0Y2hhcignICcpOworCisgICAgLyogVXNlIEZBTFNFIGJlbG93IGlmIHdlIG9ubHkgd2FudCB0aGluZ3MgbGlrZSA8VXA+IHRvIHNob3cgdXAgYXMgc3VjaCBvbgorICAgICAqIHRoZSByaHMsIGFuZCBub3QgTS14IGV0YywgVFJVRSBnZXRzIGJvdGggLS0gd2ViYgorICAgICAqLworICAgIGlmICgqbXAtPm1fc3RyID09IE5VTCkKKwltc2dfcHV0c19hdHRyKChjaGFyX3UgKikiPE5vcD4iLCBobF9hdHRyKEhMRl84KSk7CisgICAgZWxzZQorCW1zZ19vdXR0cmFuc19zcGVjaWFsKG1wLT5tX3N0ciwgRkFMU0UpOworICAgIG91dF9mbHVzaCgpOwkJCS8qIHNob3cgb25lIGxpbmUgYXQgYSB0aW1lICovCit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBhIG1hcCBleGlzdHMgdGhhdCBoYXMgInN0ciIgaW4gdGhlIHJocyBmb3IgbW9kZSAibW9kZWNoYXJzIi4KKyAqIFJlY29nbml6ZSB0ZXJtY2FwIGNvZGVzIGluICJzdHIiLgorICogQWxzbyBjaGVja3MgbWFwcGluZ3MgbG9jYWwgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLgorICovCisgICAgaW50CittYXBfdG9fZXhpc3RzKHN0ciwgbW9kZWNoYXJzKQorICAgIGNoYXJfdQkqc3RyOworICAgIGNoYXJfdQkqbW9kZWNoYXJzOworeworICAgIGludAkJbW9kZSA9IDA7CisgICAgY2hhcl91CSpyaHM7CisgICAgY2hhcl91CSpidWY7CisgICAgaW50CQlyZXR2YWw7CisKKyAgICByaHMgPSByZXBsYWNlX3Rlcm1jb2RlcyhzdHIsICZidWYsIEZBTFNFLCBUUlVFKTsKKworICAgIGlmICh2aW1fc3RyY2hyKG1vZGVjaGFycywgJ24nKSAhPSBOVUxMKQorCW1vZGUgfD0gTk9STUFMOworICAgIGlmICh2aW1fc3RyY2hyKG1vZGVjaGFycywgJ3YnKSAhPSBOVUxMKQorCW1vZGUgfD0gVklTVUFMOworICAgIGlmICh2aW1fc3RyY2hyKG1vZGVjaGFycywgJ28nKSAhPSBOVUxMKQorCW1vZGUgfD0gT1BfUEVORElORzsKKyAgICBpZiAodmltX3N0cmNocihtb2RlY2hhcnMsICdpJykgIT0gTlVMTCkKKwltb2RlIHw9IElOU0VSVDsKKyAgICBpZiAodmltX3N0cmNocihtb2RlY2hhcnMsICdsJykgIT0gTlVMTCkKKwltb2RlIHw9IExBTkdNQVA7CisgICAgaWYgKHZpbV9zdHJjaHIobW9kZWNoYXJzLCAnYycpICE9IE5VTEwpCisJbW9kZSB8PSBDTURMSU5FOworCisgICAgcmV0dmFsID0gbWFwX3RvX2V4aXN0c19tb2RlKHJocywgbW9kZSk7CisgICAgdmltX2ZyZWUoYnVmKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGEgbWFwIGV4aXN0cyB0aGF0IGhhcyAic3RyIiBpbiB0aGUgcmhzIGZvciBtb2RlICJtb2RlIi4KKyAqIEFsc28gY2hlY2tzIG1hcHBpbmdzIGxvY2FsIHRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KKyAqLworICAgIGludAorbWFwX3RvX2V4aXN0c19tb2RlKHJocywgbW9kZSkKKyAgICBjaGFyX3UJKnJoczsKKyAgICBpbnQJCW1vZGU7Cit7CisgICAgbWFwYmxvY2tfVAkqbXA7CisgICAgaW50CQloYXNoOworIyBpZmRlZiBGRUFUX0xPQ0FMTUFQCisgICAgaW50CQlleHBhbmRfYnVmZmVyID0gRkFMU0U7CisKKyAgICB2YWxpZGF0ZV9tYXBoYXNoKCk7CisKKyAgICAvKiBEbyBpdCB0d2ljZTogb25jZSBmb3IgZ2xvYmFsIG1hcHMgYW5kIG9uY2UgZm9yIGxvY2FsIG1hcHMuICovCisgICAgZm9yICg7OykKKyAgICB7CisjIGVuZGlmCisJZm9yIChoYXNoID0gMDsgaGFzaCA8IDI1NjsgKytoYXNoKQorCXsKKyMgaWZkZWYgRkVBVF9MT0NBTE1BUAorCSAgICBpZiAoZXhwYW5kX2J1ZmZlcikKKwkJbXAgPSBjdXJidWYtPmJfbWFwaGFzaFtoYXNoXTsKKwkgICAgZWxzZQorIyBlbmRpZgorCQltcCA9IG1hcGhhc2hbaGFzaF07CisJICAgIGZvciAoOyBtcDsgbXAgPSBtcC0+bV9uZXh0KQorCSAgICB7CisJCWlmICgobXAtPm1fbW9kZSAmIG1vZGUpCisJCQkmJiBzdHJzdHIoKGNoYXIgKiltcC0+bV9zdHIsIChjaGFyICopcmhzKSAhPSBOVUxMKQorCQkgICAgcmV0dXJuIFRSVUU7CisJICAgIH0KKwl9CisjIGlmZGVmIEZFQVRfTE9DQUxNQVAKKwlpZiAoZXhwYW5kX2J1ZmZlcikKKwkgICAgYnJlYWs7CisJZXhwYW5kX2J1ZmZlciA9IFRSVUU7CisgICAgfQorIyBlbmRpZgorCisgICAgcmV0dXJuIEZBTFNFOworfQorCisjaWYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogVXNlZCBiZWxvdyB3aGVuIGV4cGFuZGluZyBtYXBwaW5nL2FiYnJldmlhdGlvbiBuYW1lcy4KKyAqLworc3RhdGljIGludAlleHBhbmRfbWFwbW9kZXMgPSAwOworc3RhdGljIGludAlleHBhbmRfaXNhYmJyZXYgPSAwOworI2lmZGVmIEZFQVRfTE9DQUxNQVAKK3N0YXRpYyBpbnQJZXhwYW5kX2J1ZmZlciA9IEZBTFNFOworI2VuZGlmCisKKy8qCisgKiBXb3JrIG91dCB3aGF0IHRvIGNvbXBsZXRlIHdoZW4gZG9pbmcgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gb2YgbWFwcGluZworICogb3IgYWJicmV2aWF0aW9uIG5hbWVzLgorICovCisgICAgY2hhcl91ICoKK3NldF9jb250ZXh0X2luX21hcF9jbWQoeHAsIGNtZCwgYXJnLCBmb3JjZWl0LCBpc2FiYnJldiwgaXN1bm1hcCwgY21kaWR4KQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBjaGFyX3UJKmNtZDsKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBpbnQJCWZvcmNlaXQ7CS8qIFRSVUUgaWYgJyEnIGdpdmVuICovCisgICAgaW50CQlpc2FiYnJldjsJLyogVFJVRSBpZiBhYmJyZXZpYXRpb24gKi8KKyAgICBpbnQJCWlzdW5tYXA7CS8qIFRSVUUgaWYgdW5tYXAvdW5hYmJyZXYgY29tbWFuZCAqLworICAgIGNtZGlkeF9UCWNtZGlkeDsKK3sKKyAgICBpZiAoZm9yY2VpdCAmJiBjbWRpZHggIT0gQ01EX21hcCAmJiBjbWRpZHggIT0gQ01EX3VubWFwKQorCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7CisgICAgZWxzZQorICAgIHsKKwlpZiAoaXN1bm1hcCkKKwkgICAgZXhwYW5kX21hcG1vZGVzID0gZ2V0X21hcF9tb2RlKCZjbWQsIGZvcmNlaXQgfHwgaXNhYmJyZXYpOworCWVsc2UKKwl7CisJICAgIGV4cGFuZF9tYXBtb2RlcyA9IElOU0VSVCArIENNRExJTkU7CisJICAgIGlmICghaXNhYmJyZXYpCisJCWV4cGFuZF9tYXBtb2RlcyArPSBWSVNVQUwgKyBOT1JNQUwgKyBPUF9QRU5ESU5HOworCX0KKwlleHBhbmRfaXNhYmJyZXYgPSBpc2FiYnJldjsKKwl4cC0+eHBfY29udGV4dCA9IEVYUEFORF9NQVBQSU5HUzsKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisJZXhwYW5kX2J1ZmZlciA9IEZBTFNFOworI2VuZGlmCisJZm9yICg7OykKKwl7CisjaWZkZWYgRkVBVF9MT0NBTE1BUAorCSAgICBpZiAoU1RSTkNNUChhcmcsICI8YnVmZmVyPiIsIDgpID09IDApCisJICAgIHsKKwkJZXhwYW5kX2J1ZmZlciA9IFRSVUU7CisJCWFyZyA9IHNraXB3aGl0ZShhcmcgKyA4KTsKKwkJY29udGludWU7CisJICAgIH0KKyNlbmRpZgorCSAgICBpZiAoU1RSTkNNUChhcmcsICI8dW5pcXVlPiIsIDgpID09IDApCisJICAgIHsKKwkJYXJnID0gc2tpcHdoaXRlKGFyZyArIDgpOworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBpZiAoU1RSTkNNUChhcmcsICI8c2lsZW50PiIsIDgpID09IDApCisJICAgIHsKKwkJYXJnID0gc2tpcHdoaXRlKGFyZyArIDgpOworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBpZiAoU1RSTkNNUChhcmcsICI8c2NyaXB0PiIsIDgpID09IDApCisJICAgIHsKKwkJYXJnID0gc2tpcHdoaXRlKGFyZyArIDgpOworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJeHAtPnhwX3BhdHRlcm4gPSBhcmc7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBGaW5kIGFsbCBtYXBwaW5nL2FiYnJldmlhdGlvbiBuYW1lcyB0aGF0IG1hdGNoIHJlZ2V4cCAncHJvZycuCisgKiBGb3IgY29tbWFuZCBsaW5lIGV4cGFuc2lvbiBvZiAiOlt1bl1tYXAiIGFuZCAiOlt1bl1hYmJyZXYiIGluIGFsbCBtb2Rlcy4KKyAqIFJldHVybiBPSyBpZiBtYXRjaGVzIGZvdW5kLCBGQUlMIG90aGVyd2lzZS4KKyAqLworICAgIGludAorRXhwYW5kTWFwcGluZ3MocmVnbWF0Y2gsIG51bV9maWxlLCBmaWxlKQorICAgIHJlZ21hdGNoX1QJKnJlZ21hdGNoOworICAgIGludAkJKm51bV9maWxlOworICAgIGNoYXJfdQkqKipmaWxlOworeworICAgIG1hcGJsb2NrX1QJKm1wOworICAgIGludAkJaGFzaDsKKyAgICBpbnQJCWNvdW50OworICAgIGludAkJcm91bmQ7CisgICAgY2hhcl91CSpwOworICAgIGludAkJaTsKKworICAgIHZhbGlkYXRlX21hcGhhc2goKTsKKworICAgICpudW1fZmlsZSA9IDA7CQkgICAgLyogcmV0dXJuIHZhbHVlcyBpbiBjYXNlIG9mIEZBSUwgKi8KKyAgICAqZmlsZSA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIHJvdW5kID09IDE6IENvdW50IHRoZSBtYXRjaGVzLgorICAgICAqIHJvdW5kID09IDI6IEJ1aWxkIHRoZSBhcnJheSB0byBrZWVwIHRoZSBtYXRjaGVzLgorICAgICAqLworICAgIGZvciAocm91bmQgPSAxOyByb3VuZCA8PSAyOyArK3JvdW5kKQorICAgIHsKKwljb3VudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorCXsKKwkgICAgaWYgKGkgPT0gMCkKKwkJcCA9IChjaGFyX3UgKikiPHNpbGVudD4iOworCSAgICBlbHNlIGlmIChpID09IDEpCisJCXAgPSAoY2hhcl91ICopIjx1bmlxdWU+IjsKKyNpZmRlZiBGRUFUX0VWQUwKKwkgICAgZWxzZSBpZiAoaSA9PSAyKQorCQlwID0gKGNoYXJfdSAqKSI8c2NyaXB0PiI7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisJICAgIGVsc2UgaWYgKGkgPT0gMyAmJiAhZXhwYW5kX2J1ZmZlcikKKwkJcCA9IChjaGFyX3UgKikiPGJ1ZmZlcj4iOworI2VuZGlmCisJICAgIGVsc2UKKwkJY29udGludWU7CisKKwkgICAgaWYgKHZpbV9yZWdleGVjKHJlZ21hdGNoLCBwLCAoY29sbnJfVCkwKSkKKwkgICAgeworCQlpZiAocm91bmQgPT0gMSkKKwkJICAgICsrY291bnQ7CisJCWVsc2UKKwkJICAgICgqZmlsZSlbY291bnQrK10gPSB2aW1fc3Ryc2F2ZShwKTsKKwkgICAgfQorCX0KKworCWZvciAoaGFzaCA9IDA7IGhhc2ggPCAyNTY7ICsraGFzaCkKKwl7CisJICAgIGlmIChleHBhbmRfaXNhYmJyZXYpCisJICAgIHsKKwkJaWYgKGhhc2gpCS8qIG9ubHkgb25lIGFiYnJldiBsaXN0ICovCisJCSAgICBicmVhazsgLyogZm9yIChoYXNoKSAqLworCQltcCA9IGZpcnN0X2FiYnI7CisJICAgIH0KKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisJICAgIGVsc2UgaWYgKGV4cGFuZF9idWZmZXIpCisJCW1wID0gY3VyYnVmLT5iX21hcGhhc2hbaGFzaF07CisjZW5kaWYKKwkgICAgZWxzZQorCQltcCA9IG1hcGhhc2hbaGFzaF07CisJICAgIGZvciAoOyBtcDsgbXAgPSBtcC0+bV9uZXh0KQorCSAgICB7CisJCWlmIChtcC0+bV9tb2RlICYgZXhwYW5kX21hcG1vZGVzKQorCQl7CisJCSAgICBwID0gdHJhbnNsYXRlX21hcHBpbmcobXAtPm1fa2V5cywgVFJVRSk7CisJCSAgICBpZiAocCAhPSBOVUxMICYmIHZpbV9yZWdleGVjKHJlZ21hdGNoLCBwLCAoY29sbnJfVCkwKSkKKwkJICAgIHsKKwkJCWlmIChyb3VuZCA9PSAxKQorCQkJICAgICsrY291bnQ7CisJCQllbHNlCisJCQl7CisJCQkgICAgKCpmaWxlKVtjb3VudCsrXSA9IHA7CisJCQkgICAgcCA9IE5VTEw7CisJCQl9CisJCSAgICB9CisJCSAgICB2aW1fZnJlZShwKTsKKwkJfQorCSAgICB9IC8qIGZvciAobXApICovCisJfSAvKiBmb3IgKGhhc2gpICovCisKKwlpZiAoY291bnQgPT0gMCkJCQkvKiBubyBtYXRjaCBmb3VuZCAqLworCSAgICBicmVhazsgLyogZm9yIChyb3VuZCkgKi8KKworCWlmIChyb3VuZCA9PSAxKQorCXsKKwkgICAgKmZpbGUgPSAoY2hhcl91ICoqKWFsbG9jKCh1bnNpZ25lZCkoY291bnQgKiBzaXplb2YoY2hhcl91ICopKSk7CisJICAgIGlmICgqZmlsZSA9PSBOVUxMKQorCQlyZXR1cm4gRkFJTDsKKwl9CisgICAgfSAvKiBmb3IgKHJvdW5kKSAqLworCisgICAgLyogU29ydCB0aGUgbWF0Y2hlcyAqLworICAgIHNvcnRfc3RyaW5ncygqZmlsZSwgY291bnQpOworCisgICAgLyogUmVtb3ZlIG11bHRpcGxlIGVudHJpZXMgKi8KKyAgICB7CisJY2hhcl91CSoqcHRyMSA9ICpmaWxlOworCWNoYXJfdQkqKnB0cjIgPSBwdHIxICsgMTsKKwljaGFyX3UJKipwdHIzID0gcHRyMSArIGNvdW50OworCisJd2hpbGUgKHB0cjIgPCBwdHIzKQorCXsKKwkgICAgaWYgKFNUUkNNUCgqcHRyMSwgKnB0cjIpKQorCQkqKytwdHIxID0gKnB0cjIrKzsKKwkgICAgZWxzZQorCSAgICB7CisJCXZpbV9mcmVlKCpwdHIyKyspOworCQljb3VudC0tOworCSAgICB9CisJfQorICAgIH0KKworICAgICpudW1fZmlsZSA9IGNvdW50OworICAgIHJldHVybiAoY291bnQgPT0gMCA/IEZBSUwgOiBPSyk7Cit9CisjZW5kaWYgLyogRkVBVF9DTURMX0NPTVBMICovCisKKy8qCisgKiBDaGVjayBmb3IgYW4gYWJicmV2aWF0aW9uLgorICogQ3Vyc29yIGlzIGF0IHB0cltjb2xdLiBXaGVuIGluc2VydGluZywgbWluY29sIGlzIHdoZXJlIGluc2VydCBzdGFydGVkLgorICogImMiIGlzIHRoZSBjaGFyYWN0ZXIgdHlwZWQgYmVmb3JlIGNoZWNrX2FiYnIgd2FzIGNhbGxlZC4gIEl0IG1heSBoYXZlCisgKiBBQkJSX09GRiBhZGRlZCB0byBhdm9pZCBwcmVwZW5kaW5nIGEgQ1RSTC1WIHRvIGl0LgorICoKKyAqIEhpc3RvcmljIHZpIHByYWN0aWNlOiBUaGUgbGFzdCBjaGFyYWN0ZXIgb2YgYW4gYWJicmV2aWF0aW9uIG11c3QgYmUgYW4gaWQKKyAqIGNoYXJhY3RlciAoW2EtekEtWjAtOV9dKS4gVGhlIGNoYXJhY3RlcnMgaW4gZnJvbnQgb2YgaXQgbXVzdCBiZSBhbGwgaWQKKyAqIGNoYXJhY3RlcnMgb3IgYWxsIG5vbi1pZCBjaGFyYWN0ZXJzLiBUaGlzIGFsbG93cyBmb3IgYWJici4gIiNpIiB0bworICogIiNpbmNsdWRlIi4KKyAqCisgKiBWaW0gYWRkaXRpb246IEFsbG93IGZvciBhYmJyZXZpYXRpb25zIHRoYXQgZW5kIGluIGEgbm9uLWtleXdvcmQgY2hhcmFjdGVyLgorICogVGhlbiB0aGVyZSBtdXN0IGJlIHdoaXRlIHNwYWNlIGJlZm9yZSB0aGUgYWJici4KKyAqCisgKiByZXR1cm4gVFJVRSBpZiB0aGVyZSBpcyBhbiBhYmJyZXZpYXRpb24sIEZBTFNFIGlmIG5vdAorICovCisgICAgaW50CitjaGVja19hYmJyKGMsIHB0ciwgY29sLCBtaW5jb2wpCisgICAgaW50CQljOworICAgIGNoYXJfdQkqcHRyOworICAgIGludAkJY29sOworICAgIGludAkJbWluY29sOworeworICAgIGludAkJbGVuOworICAgIGludAkJc2NvbDsJCS8qIHN0YXJ0aW5nIGNvbHVtbiBvZiB0aGUgYWJici4gKi8KKyAgICBpbnQJCWo7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGNoYXJfdQl0YltNQl9NQVhCWVRFUyArIDRdOworI2Vsc2UKKyAgICBjaGFyX3UJdGJbNF07CisjZW5kaWYKKyAgICBtYXBibG9ja19UCSptcDsKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisgICAgbWFwYmxvY2tfVAkqbXAyOworI2VuZGlmCisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJY2xlbiA9IDA7CS8qIGxlbmd0aCBpbiBjaGFyYWN0ZXJzICovCisjZW5kaWYKKyAgICBpbnQJCWlzX2lkID0gVFJVRTsKKyAgICBpbnQJCXZpbV9hYmJyOworCisgICAgaWYgKHR5cGVidWYudGJfbm9fYWJicl9jbnQpCS8qIGFiYnJldi4gYXJlIG5vdCByZWN1cnNpdmUgKi8KKwlyZXR1cm4gRkFMU0U7CisgICAgaWYgKEtleU5vcmVtYXApCQkvKiBubyByZW1hcHBpbmcgaW1wbGllcyBubyBhYmJyZXZpYXRpb24gKi8KKwlyZXR1cm4gRkFMU0U7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciB3b3JkIGJlZm9yZSB0aGUgY3Vyc29yOiBJZiBpdCBlbmRzIGluIGEga2V5d29yZCBjaGFyIGFsbAorICAgICAqIGNoYXJzIGJlZm9yZSBpdCBtdXN0IGJlIGFsIGtleXdvcmQgY2hhcnMgb3Igbm9uLWtleXdvcmQgY2hhcnMsIGJ1dCBub3QKKyAgICAgKiB3aGl0ZSBzcGFjZS4gSWYgaXQgZW5kcyBpbiBhIG5vbi1rZXl3b3JkIGNoYXIgd2UgYWNjZXB0IGFueSBjaGFyYWN0ZXJzCisgICAgICogYmVmb3JlIGl0IGV4Y2VwdCB3aGl0ZSBzcGFjZS4KKyAgICAgKi8KKyAgICBpZiAoY29sID09IDApCQkJCS8qIGNhbm5vdCBiZSBhbiBhYmJyLiAqLworCXJldHVybiBGQUxTRTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoaGFzX21ieXRlKQorICAgIHsKKwljaGFyX3UgKnA7CisKKwlwID0gbWJfcHJldnB0cihwdHIsIHB0ciArIGNvbCk7CisJaWYgKCF2aW1faXN3b3JkcChwKSkKKwkgICAgdmltX2FiYnIgPSBUUlVFOwkJCS8qIFZpbSBhZGRlZCBhYmJyLiAqLworCWVsc2UKKwl7CisJICAgIHZpbV9hYmJyID0gRkFMU0U7CQkJLyogdmkgY29tcGF0aWJsZSBhYmJyLiAqLworCSAgICBpZiAocCA+IHB0cikKKwkJaXNfaWQgPSB2aW1faXN3b3JkcChtYl9wcmV2cHRyKHB0ciwgcCkpOworCX0KKwljbGVuID0gMTsKKwl3aGlsZSAocCA+IHB0ciArIG1pbmNvbCkKKwl7CisJICAgIHAgPSBtYl9wcmV2cHRyKHB0ciwgcCk7CisJICAgIGlmICh2aW1faXNzcGFjZSgqcCkgfHwgKCF2aW1fYWJiciAmJiBpc19pZCAhPSB2aW1faXN3b3JkcChwKSkpCisJICAgIHsKKwkJcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOworCQlicmVhazsKKwkgICAgfQorCSAgICArK2NsZW47CisJfQorCXNjb2wgPSAoaW50KShwIC0gcHRyKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCWlmICghdmltX2lzd29yZGMocHRyW2NvbCAtIDFdKSkKKwkgICAgdmltX2FiYnIgPSBUUlVFOwkJCS8qIFZpbSBhZGRlZCBhYmJyLiAqLworCWVsc2UKKwl7CisJICAgIHZpbV9hYmJyID0gRkFMU0U7CQkJLyogdmkgY29tcGF0aWJsZSBhYmJyLiAqLworCSAgICBpZiAoY29sID4gMSkKKwkJaXNfaWQgPSB2aW1faXN3b3JkYyhwdHJbY29sIC0gMl0pOworCX0KKwlmb3IgKHNjb2wgPSBjb2wgLSAxOyBzY29sID4gMCAmJiAhdmltX2lzc3BhY2UocHRyW3Njb2wgLSAxXSkKKwkJJiYgKHZpbV9hYmJyIHx8IGlzX2lkID09IHZpbV9pc3dvcmRjKHB0cltzY29sIC0gMV0pKTsgLS1zY29sKQorCSAgICA7CisgICAgfQorCisgICAgaWYgKHNjb2wgPCBtaW5jb2wpCisJc2NvbCA9IG1pbmNvbDsKKyAgICBpZiAoc2NvbCA8IGNvbCkJCS8qIHRoZXJlIGlzIGEgd29yZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yICovCisgICAgeworCXB0ciArPSBzY29sOworCWxlbiA9IGNvbCAtIHNjb2w7CisjaWZkZWYgRkVBVF9MT0NBTE1BUAorCW1wID0gY3VyYnVmLT5iX2ZpcnN0X2FiYnI7CisJbXAyID0gZmlyc3RfYWJicjsKKwlpZiAobXAgPT0gTlVMTCkKKwl7CisJICAgIG1wID0gbXAyOworCSAgICBtcDIgPSBOVUxMOworCX0KKyNlbHNlCisJbXAgPSBmaXJzdF9hYmJyOworI2VuZGlmCisJZm9yICggOyBtcDsKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisJCW1wLT5tX25leHQgPT0gTlVMTCA/IChtcCA9IG1wMiwgbXAyID0gTlVMTCkgOgorI2VuZGlmCisJCShtcCA9IG1wLT5tX25leHQpKQorCXsKKwkgICAgLyogZmluZCBlbnRyaWVzIHdpdGggcmlnaHQgbW9kZSBhbmQga2V5cyAqLworCSAgICBpZiAoICAgICAgIChtcC0+bV9tb2RlICYgU3RhdGUpCisJCSAgICAmJiBtcC0+bV9rZXlsZW4gPT0gbGVuCisJCSAgICAmJiAhU1RSTkNNUChtcC0+bV9rZXlzLCBwdHIsIChzaXplX3QpbGVuKSkKKwkJYnJlYWs7CisJfQorCWlmIChtcCAhPSBOVUxMKQorCXsKKwkgICAgLyoKKwkgICAgICogRm91bmQgYSBtYXRjaDoKKwkgICAgICogSW5zZXJ0IHRoZSByZXN0IG9mIHRoZSBhYmJyZXZpYXRpb24gaW4gdHlwZWJ1Zi50Yl9idWZbXS4KKwkgICAgICogVGhpcyBnb2VzIGZyb20gZW5kIHRvIHN0YXJ0LgorCSAgICAgKgorCSAgICAgKiBDaGFyYWN0ZXJzIDB4MDAwIC0gMHgxMDA6IG5vcm1hbCBjaGFycywgbWF5IG5lZWQgQ1RSTC1WLAorCSAgICAgKiBleGNlcHQgS19TUEVDSUFMOiBCZWNvbWVzIEtfU1BFQ0lBTCBLU19TUEVDSUFMIEtFX0ZJTExFUgorCSAgICAgKiBDaGFyYWN0ZXJzIHdoZXJlIElTX1NQRUNJQUwoKSA9PSBUUlVFOiBrZXkgY29kZXMsIG5lZWQKKwkgICAgICogS19TUEVDSUFMLiBPdGhlciBjaGFyYWN0ZXJzICh3aXRoIEFCQlJfT0ZGKTogZG9uJ3QgdXNlIENUUkwtVi4KKwkgICAgICoKKwkgICAgICogQ2hhcmFjdGVyIENUUkwtXSBpcyB0cmVhdGVkIHNwZWNpYWxseSAtIGl0IGNvbXBsZXRlcyB0aGUKKwkgICAgICogYWJicmV2aWF0aW9uLCBidXQgaXMgbm90IGluc2VydGVkIGludG8gdGhlIGlucHV0IHN0cmVhbS4KKwkgICAgICovCisJICAgIGogPSAwOworCQkJCQkvKiBzcGVjaWFsIGtleSBjb2RlLCBzcGxpdCB1cCAqLworCSAgICBpZiAoYyAhPSBDdHJsX1JTQikKKwkgICAgeworCQlpZiAoSVNfU1BFQ0lBTChjKSB8fCBjID09IEtfU1BFQ0lBTCkKKwkJeworCQkgICAgdGJbaisrXSA9IEtfU1BFQ0lBTDsKKwkJICAgIHRiW2orK10gPSBLX1NFQ09ORChjKTsKKwkJICAgIHRiW2orK10gPSBLX1RISVJEKGMpOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgaWYgKGMgPCBBQkJSX09GRiAmJiAoYyA8ICcgJyB8fCBjID4gJ34nKSkKKwkJCXRiW2orK10gPSBDdHJsX1Y7CS8qIHNwZWNpYWwgY2hhciBuZWVkcyBDVFJMLVYgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBpZiAoaGFzX21ieXRlKQorCQkgICAgeworCQkJLyogaWYgQUJCUl9PRkYgaGFzIGJlZW4gYWRkZWQsIHJlbW92ZSBpdCBoZXJlICovCisJCQlpZiAoYyA+PSBBQkJSX09GRikKKwkJCSAgICBjIC09IEFCQlJfT0ZGOworCQkJaiArPSAoKm1iX2NoYXIyYnl0ZXMpKGMsIHRiICsgaik7CisJCSAgICB9CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCXRiW2orK10gPSBjOworCQl9CisJCXRiW2pdID0gTlVMOworCQkJCQkvKiBpbnNlcnQgdGhlIGxhc3QgdHlwZWQgY2hhciAqLworCQkodm9pZClpbnNfdHlwZWJ1Zih0YiwgMSwgMCwgVFJVRSwgbXAtPm1fc2lsZW50KTsKKwkgICAgfQorCQkJCQkvKiBpbnNlcnQgdGhlIHRvIHN0cmluZyAqLworCSAgICAodm9pZClpbnNfdHlwZWJ1ZihtcC0+bV9zdHIsIG1wLT5tX25vcmVtYXAsIDAsIFRSVUUsIG1wLT5tX3NpbGVudCk7CisJCQkJCS8qIG5vIGFiYnJldi4gZm9yIHRoZXNlIGNoYXJzICovCisJICAgIHR5cGVidWYudGJfbm9fYWJicl9jbnQgKz0gKGludClTVFJMRU4obXAtPm1fc3RyKSArIGogKyAxOworCisJICAgIHRiWzBdID0gQ3RybF9IOworCSAgICB0YlsxXSA9IE5VTDsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCWxlbiA9IGNsZW47CS8qIERlbGV0ZSBjaGFyYWN0ZXJzIGluc3RlYWQgb2YgYnl0ZXMgKi8KKyNlbmRpZgorCSAgICB3aGlsZSAobGVuLS0gPiAwKQkJLyogZGVsZXRlIHRoZSBmcm9tIHN0cmluZyAqLworCQkodm9pZClpbnNfdHlwZWJ1Zih0YiwgMSwgMCwgVFJVRSwgbXAtPm1fc2lsZW50KTsKKwkgICAgcmV0dXJuIFRSVUU7CisJfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBXcml0ZSBtYXAgY29tbWFuZHMgZm9yIHRoZSBjdXJyZW50IG1hcHBpbmdzIHRvIGFuIC5leHJjIGZpbGUuCisgKiBSZXR1cm4gRkFJTCBvbiBlcnJvciwgT0sgb3RoZXJ3aXNlLgorICovCisgICAgaW50CittYWtlbWFwKGZkLCBidWYpCisgICAgRklMRQkqZmQ7CisgICAgYnVmX1QJKmJ1ZjsJICAgIC8qIGJ1ZmZlciBmb3IgbG9jYWwgbWFwcGluZ3Mgb3IgTlVMTCAqLworeworICAgIG1hcGJsb2NrX1QJKm1wOworICAgIGNoYXJfdQljMSwgYzI7CisgICAgY2hhcl91CSpwOworICAgIGNoYXIJKmNtZDsKKyAgICBpbnQJCWFiYnI7CisgICAgaW50CQloYXNoOworICAgIGludAkJZGlkX2NwbyA9IEZBTFNFOworICAgIGludAkJaTsKKworICAgIHZhbGlkYXRlX21hcGhhc2goKTsKKworICAgIC8qCisgICAgICogRG8gdGhlIGxvb3AgdHdpY2U6IE9uY2UgZm9yIG1hcHBpbmdzLCBvbmNlIGZvciBhYmJyZXZpYXRpb25zLgorICAgICAqIFRoZW4gbG9vcCBvdmVyIGFsbCBtYXAgaGFzaCBsaXN0cy4KKyAgICAgKi8KKyAgICBmb3IgKGFiYnIgPSAwOyBhYmJyIDwgMjsgKythYmJyKQorCWZvciAoaGFzaCA9IDA7IGhhc2ggPCAyNTY7ICsraGFzaCkKKwl7CisJICAgIGlmIChhYmJyKQorCSAgICB7CisJCWlmIChoYXNoKQkgICAgLyogdGhlcmUgaXMgb25seSBvbmUgYWJiciBsaXN0ICovCisJCSAgICBicmVhazsKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisJCWlmIChidWYgIT0gTlVMTCkKKwkJICAgIG1wID0gYnVmLT5iX2ZpcnN0X2FiYnI7CisJCWVsc2UKKyNlbmRpZgorCQkgICAgbXAgPSBmaXJzdF9hYmJyOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworI2lmZGVmIEZFQVRfTE9DQUxNQVAKKwkJaWYgKGJ1ZiAhPSBOVUxMKQorCQkgICAgbXAgPSBidWYtPmJfbWFwaGFzaFtoYXNoXTsKKwkJZWxzZQorI2VuZGlmCisJCSAgICBtcCA9IG1hcGhhc2hbaGFzaF07CisJICAgIH0KKworCSAgICBmb3IgKCA7IG1wOyBtcCA9IG1wLT5tX25leHQpCisJICAgIHsKKwkJLyogc2tpcCBzY3JpcHQtbG9jYWwgbWFwcGluZ3MgKi8KKwkJaWYgKG1wLT5tX25vcmVtYXAgPT0gUkVNQVBfU0NSSVBUKQorCQkgICAgY29udGludWU7CisKKwkJLyogc2tpcCBtYXBwaW5ncyB0aGF0IGNvbnRhaW4gYSA8U05SPiAoc2NyaXB0LWxvY2FsIHRoaW5nKSwKKwkJICogdGhleSBwcm9iYWJseSBkb24ndCB3b3JrIHdoZW4gbG9hZGVkIGFnYWluICovCisJCWZvciAocCA9IG1wLT5tX3N0cjsgKnAgIT0gTlVMOyArK3ApCisJCSAgICBpZiAocFswXSA9PSBLX1NQRUNJQUwgJiYgcFsxXSA9PSBLU19FWFRSQQorCQkJCQkJICAgICAgICYmIHBbMl0gPT0gKGludClLRV9TTlIpCisJCQlicmVhazsKKwkJaWYgKCpwICE9IE5VTCkKKwkJICAgIGNvbnRpbnVlOworCisJCWMxID0gTlVMOworCQljMiA9IE5VTDsKKwkJaWYgKGFiYnIpCisJCSAgICBjbWQgPSAiYWJiciI7CisJCWVsc2UKKwkJICAgIGNtZCA9ICJtYXAiOworCQlzd2l0Y2ggKG1wLT5tX21vZGUpCisJCXsKKwkJICAgIGNhc2UgTk9STUFMICsgVklTVUFMICsgT1BfUEVORElORzoKKwkJCWJyZWFrOworCQkgICAgY2FzZSBOT1JNQUw6CisJCQljMSA9ICduJzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBWSVNVQUw6CisJCQljMSA9ICd2JzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBPUF9QRU5ESU5HOgorCQkJYzEgPSAnbyc7CisJCQlicmVhazsKKwkJICAgIGNhc2UgTk9STUFMICsgVklTVUFMOgorCQkJYzEgPSAnbic7CisJCQljMiA9ICd2JzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBWSVNVQUwgKyBPUF9QRU5ESU5HOgorCQkJYzEgPSAndic7CisJCQljMiA9ICdvJzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBOT1JNQUwgKyBPUF9QRU5ESU5HOgorCQkJYzEgPSAnbic7CisJCQljMiA9ICdvJzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBDTURMSU5FICsgSU5TRVJUOgorCQkJaWYgKCFhYmJyKQorCQkJICAgIGNtZCA9ICJtYXAhIjsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBDTURMSU5FOgorCQkJYzEgPSAnYyc7CisJCQlicmVhazsKKwkJICAgIGNhc2UgSU5TRVJUOgorCQkJYzEgPSAnaSc7CisJCQlicmVhazsKKwkJICAgIGNhc2UgTEFOR01BUDoKKwkJCWMxID0gJ2wnOworCQkJYnJlYWs7CisJCSAgICBkZWZhdWx0OgorCQkJRU1TRyhfKCJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiKSk7CisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQlkbwkvKiBtYXkgZG8gdGhpcyB0d2ljZSBpZiBjMiBpcyBzZXQgKi8KKwkJeworCQkgICAgLyogV2hlbiBvdXRwdXR0aW5nIDw+IGZvcm0sIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgJ2NwbycKKwkJICAgICAqIGlzIHNldCB0byB0aGUgVmltIGRlZmF1bHQuICovCisJCSAgICBpZiAoIWRpZF9jcG8pCisJCSAgICB7CisJCQlpZiAoKm1wLT5tX3N0ciA9PSBOVUwpCQkvKiB3aWxsIHVzZSA8Tm9wPiAqLworCQkJICAgIGRpZF9jcG8gPSBUUlVFOworCQkJZWxzZQorCQkJICAgIGZvciAoaSA9IDA7IGkgPCAyOyArK2kpCisJCQkJZm9yIChwID0gKGkgPyBtcC0+bV9zdHIgOiBtcC0+bV9rZXlzKTsgKnA7ICsrcCkKKwkJCQkgICAgaWYgKCpwID09IEtfU1BFQ0lBTCB8fCAqcCA9PSBOTCkKKwkJCQkJZGlkX2NwbyA9IFRSVUU7CisJCQlpZiAoZGlkX2NwbykKKwkJCXsKKwkJCSAgICBpZiAoZnByaW50ZihmZCwgImxldCBzOmNwb19zYXZlPSZjcG8iKSA8IDAKKwkJCQkgICAgfHwgcHV0X2VvbChmZCkgPCAwCisJCQkJICAgIHx8IGZwcmludGYoZmQsICJzZXQgY3BvJnZpbSIpIDwgMAorCQkJCSAgICB8fCBwdXRfZW9sKGZkKSA8IDApCisJCQkJcmV0dXJuIEZBSUw7CisJCQl9CisJCSAgICB9CisJCSAgICBpZiAoYzEgJiYgcHV0YyhjMSwgZmQpIDwgMCkKKwkJCXJldHVybiBGQUlMOworCQkgICAgaWYgKG1wLT5tX25vcmVtYXAgIT0gUkVNQVBfWUVTICYmIGZwcmludGYoZmQsICJub3JlIikgPCAwKQorCQkJcmV0dXJuIEZBSUw7CisJCSAgICBpZiAoZnByaW50ZihmZCwgY21kKSA8IDApCisJCQlyZXR1cm4gRkFJTDsKKwkJICAgIGlmIChidWYgIT0gTlVMTCAmJiBmcHV0cygiIDxidWZmZXI+IiwgZmQpIDwgMCkKKwkJCXJldHVybiBGQUlMOworCQkgICAgaWYgKG1wLT5tX3NpbGVudCAmJiBmcHV0cygiIDxzaWxlbnQ+IiwgZmQpIDwgMCkKKwkJCXJldHVybiBGQUlMOworCisJCSAgICBpZiAoICAgICAgIHB1dGMoJyAnLCBmZCkgPCAwCisJCQkgICAgfHwgcHV0X2VzY3N0cihmZCwgbXAtPm1fa2V5cywgMCkgPT0gRkFJTAorCQkJICAgIHx8IHB1dGMoJyAnLCBmZCkgPCAwCisJCQkgICAgfHwgcHV0X2VzY3N0cihmZCwgbXAtPm1fc3RyLCAxKSA9PSBGQUlMCisJCQkgICAgfHwgcHV0X2VvbChmZCkgPCAwKQorCQkJcmV0dXJuIEZBSUw7CisJCSAgICBjMSA9IGMyOworCQkgICAgYzIgPSBOVUw7CisJCX0KKwkJd2hpbGUgKGMxKTsKKwkgICAgfQorCX0KKworICAgIGlmIChkaWRfY3BvKQorCWlmIChmcHJpbnRmKGZkLCAibGV0ICZjcG89czpjcG9fc2F2ZSIpIDwgMAorCQl8fCBwdXRfZW9sKGZkKSA8IDAKKwkJfHwgZnByaW50ZihmZCwgInVubGV0IHM6Y3BvX3NhdmUiKSA8IDAKKwkJfHwgcHV0X2VvbChmZCkgPCAwKQorCSAgICByZXR1cm4gRkFJTDsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiB3cml0ZSBlc2NhcGUgc3RyaW5nIHRvIGZpbGUKKyAqICJ3aGF0IjogMCBmb3IgOm1hcCBsaHMsIDEgZm9yIDptYXAgcmhzLCAyIGZvciA6c2V0CisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CitwdXRfZXNjc3RyKGZkLCBzdHJzdGFydCwgd2hhdCkKKyAgICBGSUxFCSpmZDsKKyAgICBjaGFyX3UJKnN0cnN0YXJ0OworICAgIGludAkJd2hhdDsKK3sKKyAgICBjaGFyX3UJKnN0ciA9IHN0cnN0YXJ0OworICAgIGludAkJYzsKKyAgICBpbnQJCW1vZGlmaWVyczsKKworICAgIC8qIDptYXAgeHggPE5vcD4gKi8KKyAgICBpZiAoKnN0ciA9PSBOVUwgJiYgd2hhdCA9PSAxKQorICAgIHsKKwlpZiAoZnByaW50ZihmZCwgIjxOb3A+IikgPCAwKQorCSAgICByZXR1cm4gRkFJTDsKKwlyZXR1cm4gT0s7CisgICAgfQorCisgICAgZm9yICggOyAqc3RyICE9IE5VTDsgKytzdHIpCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwljaGFyX3UJKnA7CisKKwkvKiBDaGVjayBmb3IgYSBtdWx0aS1ieXRlIGNoYXJhY3Rlciwgd2hpY2ggbWF5IGNvbnRhaW4gZXNjYXBlZAorCSAqIEtfU1BFQ0lBTCBhbmQgQ1NJIGJ5dGVzICovCisJcCA9IG1iX3VuZXNjYXBlKCZzdHIpOworCWlmIChwICE9IE5VTEwpCisJeworCSAgICB3aGlsZSAoKnAgIT0gTlVMKQorCQlpZiAocHV0YygqcCsrLCBmZCkgPCAwKQorCQkgICAgcmV0dXJuIEZBSUw7CisJICAgIC0tc3RyOworCSAgICBjb250aW51ZTsKKwl9CisjZW5kaWYKKworCWMgPSAqc3RyOworCS8qCisJICogU3BlY2lhbCBrZXkgY29kZXMgaGF2ZSB0byBiZSB0cmFuc2xhdGVkIHRvIGJlIGFibGUgdG8gbWFrZSBzZW5zZQorCSAqIHdoZW4gdGhleSBhcmUgcmVhZCBiYWNrLgorCSAqLworCWlmIChjID09IEtfU1BFQ0lBTCAmJiB3aGF0ICE9IDIpCisJeworCSAgICBtb2RpZmllcnMgPSAweDA7CisJICAgIGlmIChzdHJbMV0gPT0gS1NfTU9ESUZJRVIpCisJICAgIHsKKwkJbW9kaWZpZXJzID0gc3RyWzJdOworCQlzdHIgKz0gMzsKKwkJYyA9ICpzdHI7CisJICAgIH0KKwkgICAgaWYgKGMgPT0gS19TUEVDSUFMKQorCSAgICB7CisJCWMgPSBUT19TUEVDSUFMKHN0clsxXSwgc3RyWzJdKTsKKwkJc3RyICs9IDI7CisJICAgIH0KKwkgICAgaWYgKElTX1NQRUNJQUwoYykgfHwgbW9kaWZpZXJzKQkvKiBzcGVjaWFsIGtleSAqLworCSAgICB7CisJCWlmIChmcHJpbnRmKGZkLCAoY2hhciAqKWdldF9zcGVjaWFsX2tleV9uYW1lKGMsIG1vZGlmaWVycykpIDwgMCkKKwkJICAgIHJldHVybiBGQUlMOworCQljb250aW51ZTsKKwkgICAgfQorCX0KKworCS8qCisJICogQSAnXG4nIGluIGEgbWFwIGNvbW1hbmQgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgPE5MPi4KKwkgKiBBICdcbicgaW4gYSBzZXQgY29tbWFuZCBzaG91bGQgYmUgd3JpdHRlbiBhcyBcXlZeSi4KKwkgKi8KKwlpZiAoYyA9PSBOTCkKKwl7CisJICAgIGlmICh3aGF0ID09IDIpCisJICAgIHsKKwkJaWYgKGZwcmludGYoZmQsIElGX0VCKCJcXFwwMjZcbiIsICJcXCIgQ1RSTF9WX1NUUiAiXG4iKSkgPCAwKQorCQkgICAgcmV0dXJuIEZBSUw7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlmIChmcHJpbnRmKGZkLCAiPE5MPiIpIDwgMCkKKwkJICAgIHJldHVybiBGQUlMOworCSAgICB9CisJICAgIGNvbnRpbnVlOworCX0KKworCS8qCisJICogU29tZSBjaGFyYWN0ZXJzIGhhdmUgdG8gYmUgZXNjYXBlZCB3aXRoIENUUkwtViB0bworCSAqIHByZXZlbnQgdGhlbSBmcm9tIG1pc2ludGVycHJldGVkIGluIERvT25lQ21kKCkuCisJICogQSBzcGFjZSwgVGFiIGFuZCAnIicgaGFzIHRvIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCB0bworCSAqIHByZXZlbnQgaXQgdG8gYmUgbWlzaW50ZXJwcmV0ZWQgaW4gZG9fc2V0KCkuCisJICogQSBzcGFjZSBoYXMgdG8gYmUgZXNjYXBlZCB3aXRoIGEgQ1RSTC1WIHdoZW4gaXQncyBhdCB0aGUgc3RhcnQgb2YgYQorCSAqICI6bWFwIiByaHMuCisJICogQSAnPCcgaGFzIHRvIGJlIGVzY2FwZWQgd2l0aCBhIENUUkwtViB0byBwcmV2ZW50IGl0IGJlaW5nCisJICogaW50ZXJwcmV0ZWQgYXMgdGhlIHN0YXJ0IG9mIGEgc3BlY2lhbCBrZXkgbmFtZS4KKwkgKiBBIHNwYWNlIGluIHRoZSBsaHMgb2YgYSA6bWFwIG5lZWRzIGEgQ1RSTC1WLgorCSAqLworCWlmICh3aGF0ID09IDIgJiYgKHZpbV9pc3doaXRlKGMpIHx8IGMgPT0gJyInIHx8IGMgPT0gJ1xcJykpCisJeworCSAgICBpZiAocHV0YygnXFwnLCBmZCkgPCAwKQorCQlyZXR1cm4gRkFJTDsKKwl9CisJZWxzZSBpZiAoYyA8ICcgJyB8fCBjID4gJ34nIHx8IGMgPT0gJ3wnCisJCXx8ICh3aGF0ID09IDAgJiYgYyA9PSAnICcpCisJCXx8ICh3aGF0ID09IDEgJiYgc3RyID09IHN0cnN0YXJ0ICYmIGMgPT0gJyAnKQorCQl8fCAod2hhdCAhPSAyICYmIGMgPT0gJzwnKSkKKwl7CisJICAgIGlmIChwdXRjKEN0cmxfViwgZmQpIDwgMCkKKwkJcmV0dXJuIEZBSUw7CisJfQorCWlmIChwdXRjKGMsIGZkKSA8IDApCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBDaGVjayBhbGwgbWFwcGluZ3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBzcGVjaWFsIGtleSBjb2Rlcy4KKyAqIFVzZWQgYWZ0ZXIgIjpzZXQgdGVybT14eHgiLgorICovCisgICAgdm9pZAorY2hlY2tfbWFwX2tleWNvZGVzKCkKK3sKKyAgICBtYXBibG9ja19UCSptcDsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpOworICAgIGNoYXJfdQlidWZbM107CisgICAgY2hhcl91CSpzYXZlX25hbWU7CisgICAgaW50CQlhYmJyOworICAgIGludAkJaGFzaDsKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisgICAgYnVmX1QJKmJwOworI2VuZGlmCisKKyAgICB2YWxpZGF0ZV9tYXBoYXNoKCk7CisgICAgc2F2ZV9uYW1lID0gc291cmNpbmdfbmFtZTsKKyAgICBzb3VyY2luZ19uYW1lID0gKGNoYXJfdSAqKSJtYXBwaW5ncyI7IC8qIGF2b2lkcyBnaXZpbmcgZXJyb3IgbWVzc2FnZXMgKi8KKworI2lmZGVmIEZFQVRfTE9DQUxNQVAKKyAgICAvKiBUaGlzIHRoaXMgb25jZSBmb3IgZWFjaCBidWZmZXIsIGFuZCB0aGVuIG9uY2UgZm9yIGdsb2JhbAorICAgICAqIG1hcHBpbmdzL2FiYnJldmlhdGlvbnMgd2l0aCBicCA9PSBOVUxMICovCisgICAgZm9yIChicCA9IGZpcnN0YnVmOyA7IGJwID0gYnAtPmJfbmV4dCkKKyAgICB7CisjZW5kaWYKKwkvKgorCSAqIERvIHRoZSBsb29wIHR3aWNlOiBPbmNlIGZvciBtYXBwaW5ncywgb25jZSBmb3IgYWJicmV2aWF0aW9ucy4KKwkgKiBUaGVuIGxvb3Agb3ZlciBhbGwgbWFwIGhhc2ggbGlzdHMuCisJICovCisJZm9yIChhYmJyID0gMDsgYWJiciA8PSAxOyArK2FiYnIpCisJICAgIGZvciAoaGFzaCA9IDA7IGhhc2ggPCAyNTY7ICsraGFzaCkKKwkgICAgeworCQlpZiAoYWJicikKKwkJeworCQkgICAgaWYgKGhhc2gpCSAgICAvKiB0aGVyZSBpcyBvbmx5IG9uZSBhYmJyIGxpc3QgKi8KKwkJCWJyZWFrOworI2lmZGVmIEZFQVRfTE9DQUxNQVAKKwkJICAgIGlmIChicCAhPSBOVUxMKQorCQkJbXAgPSBicC0+Yl9maXJzdF9hYmJyOworCQkgICAgZWxzZQorI2VuZGlmCisJCQltcCA9IGZpcnN0X2FiYnI7CisJCX0KKwkJZWxzZQorCQl7CisjaWZkZWYgRkVBVF9MT0NBTE1BUAorCQkgICAgaWYgKGJwICE9IE5VTEwpCisJCQltcCA9IGJwLT5iX21hcGhhc2hbaGFzaF07CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCW1wID0gbWFwaGFzaFtoYXNoXTsKKwkJfQorCQlmb3IgKCA7IG1wICE9IE5VTEw7IG1wID0gbXAtPm1fbmV4dCkKKwkJeworCQkgICAgZm9yIChpID0gMDsgaSA8PSAxOyArK2kpCS8qIGRvIHRoaXMgdHdpY2UgKi8KKwkJICAgIHsKKwkJCWlmIChpID09IDApCisJCQkgICAgcCA9IG1wLT5tX2tleXM7CS8qIG9uY2UgZm9yIHRoZSAiZnJvbSIgcGFydCAqLworCQkJZWxzZQorCQkJICAgIHAgPSBtcC0+bV9zdHI7CS8qIGFuZCBvbmNlIGZvciB0aGUgInRvIiBwYXJ0ICovCisJCQl3aGlsZSAoKnApCisJCQl7CisJCQkgICAgaWYgKCpwID09IEtfU1BFQ0lBTCkKKwkJCSAgICB7CisJCQkJKytwOworCQkJCWlmICgqcCA8IDEyOCkgICAvKiBmb3IgIm5vcm1hbCIgdGNhcCBlbnRyaWVzICovCisJCQkJeworCQkJCSAgICBidWZbMF0gPSBwWzBdOworCQkJCSAgICBidWZbMV0gPSBwWzFdOworCQkJCSAgICBidWZbMl0gPSBOVUw7CisJCQkJICAgICh2b2lkKWFkZF90ZXJtY2FwX2VudHJ5KGJ1ZiwgRkFMU0UpOworCQkJCX0KKwkJCQkrK3A7CisJCQkgICAgfQorCQkJICAgICsrcDsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisjaWZkZWYgRkVBVF9MT0NBTE1BUAorCWlmIChicCA9PSBOVUxMKQorCSAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKyAgICBzb3VyY2luZ19uYW1lID0gc2F2ZV9uYW1lOworfQorCisjaWZkZWYgRkVBVF9FVkFMCisvKgorICogQ2hlY2sgdGhlIHN0cmluZyAia2V5cyIgYWdhaW5zdCB0aGUgbGhzIG9mIGFsbCBtYXBwaW5ncworICogUmV0dXJuIHBvaW50ZXIgdG8gcmhzIG9mIG1hcHBpbmcgKG1hcGJsb2NrLT5tX3N0cikKKyAqIE5VTEwgb3RoZXJ3aXNlCisgKi8KKyAgICBjaGFyX3UgKgorY2hlY2tfbWFwKGtleXMsIG1vZGUsIGV4YWN0KQorICAgIGNoYXJfdQkqa2V5czsKKyAgICBpbnQJCW1vZGU7CisgICAgaW50CQlleGFjdDsJCS8qIHJlcXVpcmUgZXhhY3QgbWF0Y2ggKi8KK3sKKyAgICBpbnQJCWhhc2g7CisgICAgaW50CQlsZW4sIG1pbmxlbjsKKyAgICBtYXBibG9ja19UCSptcDsKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisgICAgaW50CQlsb2NhbDsKKyNlbmRpZgorCisgICAgdmFsaWRhdGVfbWFwaGFzaCgpOworCisgICAgbGVuID0gKGludClTVFJMRU4oa2V5cyk7CisjaWZkZWYgRkVBVF9MT0NBTE1BUAorICAgIGZvciAobG9jYWwgPSAxOyBsb2NhbCA+PSAwOyAtLWxvY2FsKQorI2VuZGlmCisJLyogbG9vcCBvdmVyIGFsbCBoYXNoIGxpc3RzICovCisJZm9yIChoYXNoID0gMDsgaGFzaCA8IDI1NjsgKytoYXNoKQorCXsKKyNpZmRlZiBGRUFUX0xPQ0FMTUFQCisJICAgIGlmIChsb2NhbCkKKwkJbXAgPSBjdXJidWYtPmJfbWFwaGFzaFtoYXNoXTsKKwkgICAgZWxzZQorI2VuZGlmCisJCW1wID0gbWFwaGFzaFtoYXNoXTsKKwkgICAgZm9yICggOyBtcCAhPSBOVUxMOyBtcCA9IG1wLT5tX25leHQpCisJICAgIHsKKwkJLyogc2tpcCBlbnRyaWVzIHdpdGggd3JvbmcgbW9kZSwgd3JvbmcgbGVuZ3RoIGFuZCBub3QgbWF0Y2hpbmcKKwkJICogb25lcyAqLworCQlpZiAobXAtPm1fa2V5bGVuIDwgbGVuKQorCQkgICAgbWlubGVuID0gbXAtPm1fa2V5bGVuOworCQllbHNlCisJCSAgICBtaW5sZW4gPSBsZW47CisJCWlmICgobXAtPm1fbW9kZSAmIG1vZGUpCisJCQkmJiAoIWV4YWN0IHx8IG1wLT5tX2tleWxlbiA9PSBsZW4pCisJCQkmJiBTVFJOQ01QKG1wLT5tX2tleXMsIGtleXMsIG1pbmxlbikgPT0gMCkKKwkJICAgIHJldHVybiBtcC0+bV9zdHI7CisJICAgIH0KKwl9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisvKgorICogRGVmYXVsdCBtYXBwaW5ncyBmb3Igc29tZSBvZnRlbiB1c2VkIGtleXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW5pdG1hcAoreworICAgIGNoYXJfdQkqYXJnOworICAgIGludAkJbW9kZTsKK30gaW5pdG1hcHBpbmdzW10gPQoreworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoT1MyKQorCS8qIFVzZSB0aGUgV2luZG93cyAoQ1VBKSBrZXliaW5kaW5ncy4gKi8KKyMgaWZkZWYgRkVBVF9HVUkKKwl7KGNoYXJfdSAqKSI8Qy1QYWdlVXA+IEgiLCBOT1JNQUwrVklTVUFMfSwKKwl7KGNoYXJfdSAqKSI8Qy1QYWdlVXA+IDxDLU8+SCIsSU5TRVJUfSwKKwl7KGNoYXJfdSAqKSI8Qy1QYWdlRG93bj4gTCQiLCBOT1JNQUwrVklTVUFMfSwKKwl7KGNoYXJfdSAqKSI8Qy1QYWdlRG93bj4gPEMtTz5MPEMtTz4kIiwgSU5TRVJUfSwKKworCS8qIHBhc3RlLCBjb3B5IGFuZCBjdXQgKi8KKwl7KGNoYXJfdSAqKSI8Uy1JbnNlcnQ+IFwiKlAiLCBOT1JNQUx9LAorCXsoY2hhcl91ICopIjxTLUluc2VydD4gXCItZFwiKlAiLCBWSVNVQUx9LAorCXsoY2hhcl91ICopIjxTLUluc2VydD4gPEMtUj48Qy1PPioiLCBJTlNFUlQrQ01ETElORX0sCisJeyhjaGFyX3UgKikiPEMtSW5zZXJ0PiBcIip5IiwgVklTVUFMfSwKKwl7KGNoYXJfdSAqKSI8Uy1EZWw+IFwiKmQiLCBWSVNVQUx9LAorCXsoY2hhcl91ICopIjxDLURlbD4gXCIqZCIsIFZJU1VBTH0sCisJeyhjaGFyX3UgKikiPEMtWD4gXCIqZCIsIFZJU1VBTH0sCisJLyogTWlzc2luZzogQ1RSTC1DIChjYW5jZWwpIGFuZCBDVFJMLVYgKGJsb2NrIHNlbGVjdGlvbikgKi8KKyMgZWxzZQorCXsoY2hhcl91ICopIlwzMTZcMjA0IEgiLCBOT1JNQUwrVklTVUFMfSwgICAgLyogQ1RSTC1QYWdlVXAgaXMgIkgiICovCisJeyhjaGFyX3UgKikiXDMxNlwyMDQgXDAxN0giLElOU0VSVH0sCSAgICAvKiBDVFJMLVBhZ2VVcCBpcyAiXk9IIiovCisJeyhjaGFyX3UgKikiXDMxNnYgTCQiLCBOT1JNQUwrVklTVUFMfSwJICAgIC8qIENUUkwtUGFnZURvd24gaXMgIkwkIiAqLworCXsoY2hhcl91ICopIlwzMTZ2IFwwMTdMXDAxNyQiLCBJTlNFUlR9LAkgICAgLyogQ1RSTC1QYWdlRG93biA9Il5PTF5PJCIqLworCXsoY2hhcl91ICopIlwzMTZ3IDxDLUhvbWU+IiwgTk9STUFMK1ZJU1VBTH0sCisJeyhjaGFyX3UgKikiXDMxNncgPEMtSG9tZT4iLCBJTlNFUlQrQ01ETElORX0sCisJeyhjaGFyX3UgKikiXDMxNnUgPEMtRW5kPiIsIE5PUk1BTCtWSVNVQUx9LAorCXsoY2hhcl91ICopIlwzMTZ1IDxDLUVuZD4iLCBJTlNFUlQrQ01ETElORX0sCisKKwkvKiBwYXN0ZSwgY29weSBhbmQgY3V0ICovCisjICBpZmRlZiBGRUFUX0NMSVBCT0FSRAorIyAgIGlmZGVmIERKR1BQCisJeyhjaGFyX3UgKikiXDMxNlwxMjIgXCIqUCIsIE5PUk1BTH0sCSAgICAvKiBTSElGVC1JbnNlcnQgaXMgIipQICovCisJeyhjaGFyX3UgKikiXDMxNlwxMjIgXCItZFwiKlAiLCBWSVNVQUx9LCAgICAvKiBTSElGVC1JbnNlcnQgaXMgIi1kIipQICovCisJeyhjaGFyX3UgKikiXDMxNlwxMjIgXDAyMlwwMTcqIiwgSU5TRVJUfSwgIC8qIFNISUZULUluc2VydCBpcyBeUl5PKiAqLworCXsoY2hhcl91ICopIlwzMTZcMjIyIFwiKnkiLCBWSVNVQUx9LAkgICAgLyogQ1RSTC1JbnNlcnQgaXMgIip5ICovCisjICAgIGlmIDAgLyogU2hpZnQtRGVsIHByb2R1Y2VzIHRoZSBzYW1lIGNvZGUgYXMgRGVsICovCisJeyhjaGFyX3UgKikiXDMxNlwxMjMgXCIqZCIsIFZJU1VBTH0sCSAgICAvKiBTSElGVC1EZWwgaXMgIipkICovCisjICAgIGVuZGlmCisJeyhjaGFyX3UgKikiXDMxNlwyMjMgXCIqZCIsIFZJU1VBTH0sCSAgICAvKiBDVFJMLURlbCBpcyAiKmQgKi8KKwl7KGNoYXJfdSAqKSJcMDMwIFwiLWQiLCBWSVNVQUx9LAkgICAgLyogQ1RSTC1YIGlzICItZCAqLworIyAgIGVsc2UKKwl7KGNoYXJfdSAqKSJcMzE2XDMyNCBcIipQIiwgTk9STUFMfSwJICAgIC8qIFNISUZULUluc2VydCBpcyAiKlAgKi8KKwl7KGNoYXJfdSAqKSJcMzE2XDMyNCBcIi1kXCIqUCIsIFZJU1VBTH0sICAgIC8qIFNISUZULUluc2VydCBpcyAiLWQiKlAgKi8KKwl7KGNoYXJfdSAqKSJcMzE2XDMyNCBcMDIyXDAxNyoiLCBJTlNFUlR9LCAgLyogU0hJRlQtSW5zZXJ0IGlzIF5SXk8qICovCisJeyhjaGFyX3UgKikiXDMxNlwzMjUgXCIqeSIsIFZJU1VBTH0sCSAgICAvKiBDVFJMLUluc2VydCBpcyAiKnkgKi8KKwl7KGNoYXJfdSAqKSJcMzE2XDMyNyBcIipkIiwgVklTVUFMfSwJICAgIC8qIFNISUZULURlbCBpcyAiKmQgKi8KKwl7KGNoYXJfdSAqKSJcMzE2XDMzMCBcIipkIiwgVklTVUFMfSwJICAgIC8qIENUUkwtRGVsIGlzICIqZCAqLworCXsoY2hhcl91ICopIlwwMzAgXCItZCIsIFZJU1VBTH0sCSAgICAvKiBDVFJMLVggaXMgIi1kICovCisjICAgZW5kaWYKKyMgIGVsc2UKKwl7KGNoYXJfdSAqKSJcMzE2XDMyNCBQIiwgTk9STUFMfSwJICAgIC8qIFNISUZULUluc2VydCBpcyBQICovCisJeyhjaGFyX3UgKikiXDMxNlwzMjQgXCItZFAiLCBWSVNVQUx9LAkgICAgLyogU0hJRlQtSW5zZXJ0IGlzICItZFAgKi8KKwl7KGNoYXJfdSAqKSJcMzE2XDMyNCBcMDIyXDAxN1wiIiwgSU5TRVJUfSwgLyogU0hJRlQtSW5zZXJ0IGlzIF5SXk8iICovCisJeyhjaGFyX3UgKikiXDMxNlwzMjUgeSIsIFZJU1VBTH0sCSAgICAvKiBDVFJMLUluc2VydCBpcyB5ICovCisJeyhjaGFyX3UgKikiXDMxNlwzMjcgZCIsIFZJU1VBTH0sCSAgICAvKiBTSElGVC1EZWwgaXMgZCAqLworCXsoY2hhcl91ICopIlwzMTZcMzMwIGQiLCBWSVNVQUx9LAkgICAgLyogQ1RSTC1EZWwgaXMgZCAqLworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQUNPUykKKwkvKiBVc2UgdGhlIFN0YW5kYXJkIE1hY09TIGJpbmRpbmcuICovCisJLyogcGFzdGUsIGNvcHkgYW5kIGN1dCAqLworCXsoY2hhcl91ICopIjxELXY+IFwiKlAiLCBOT1JNQUx9LAorCXsoY2hhcl91ICopIjxELXY+IFwiLWRcIipQIiwgVklTVUFMfSwKKwl7KGNoYXJfdSAqKSI8RC12PiA8Qy1SPioiLCBJTlNFUlQrQ01ETElORX0sCisJeyhjaGFyX3UgKikiPEQtYz4gXCIqeSIsIFZJU1VBTH0sCisJeyhjaGFyX3UgKikiPEQteD4gXCIqZCIsIFZJU1VBTH0sCisJeyhjaGFyX3UgKikiPEJhY2tzcGFjZT4gXCItZCIsIFZJU1VBTH0sCisjZW5kaWYKKworCS8qIE1hcCBleHRyYSBrZXlzIHRvIHRoZWlyIG5vcm1hbCBlcXVpdmFsZW50cy4gKi8KKwl7KGNoYXJfdSAqKSI8eEYxPiA8RjE+IiwgTk9STUFMK1ZJU1VBTCtPUF9QRU5ESU5HfSwKKwl7KGNoYXJfdSAqKSI8eEYxPiA8RjE+IiwgSU5TRVJUK0NNRExJTkV9LAorCXsoY2hhcl91ICopIjx4RjI+IDxGMj4iLCBOT1JNQUwrVklTVUFMK09QX1BFTkRJTkd9LAorCXsoY2hhcl91ICopIjx4RjI+IDxGMj4iLCBJTlNFUlQrQ01ETElORX0sCisJeyhjaGFyX3UgKikiPHhGMz4gPEYzPiIsIE5PUk1BTCtWSVNVQUwrT1BfUEVORElOR30sCisJeyhjaGFyX3UgKikiPHhGMz4gPEYzPiIsIElOU0VSVCtDTURMSU5FfSwKKwl7KGNoYXJfdSAqKSI8eEY0PiA8RjQ+IiwgTk9STUFMK1ZJU1VBTCtPUF9QRU5ESU5HfSwKKwl7KGNoYXJfdSAqKSI8eEY0PiA8RjQ+IiwgSU5TRVJUK0NNRExJTkV9LAorCXsoY2hhcl91ICopIjxTLXhGMT4gPFMtRjE+IiwgTk9STUFMK1ZJU1VBTCtPUF9QRU5ESU5HfSwKKwl7KGNoYXJfdSAqKSI8Uy14RjE+IDxTLUYxPiIsIElOU0VSVCtDTURMSU5FfSwKKwl7KGNoYXJfdSAqKSI8Uy14RjI+IDxTLUYyPiIsIE5PUk1BTCtWSVNVQUwrT1BfUEVORElOR30sCisJeyhjaGFyX3UgKikiPFMteEYyPiA8Uy1GMj4iLCBJTlNFUlQrQ01ETElORX0sCisJeyhjaGFyX3UgKikiPFMteEYzPiA8Uy1GMz4iLCBOT1JNQUwrVklTVUFMK09QX1BFTkRJTkd9LAorCXsoY2hhcl91ICopIjxTLXhGMz4gPFMtRjM+IiwgSU5TRVJUK0NNRExJTkV9LAorCXsoY2hhcl91ICopIjxTLXhGND4gPFMtRjQ+IiwgTk9STUFMK1ZJU1VBTCtPUF9QRU5ESU5HfSwKKwl7KGNoYXJfdSAqKSI8Uy14RjQ+IDxTLUY0PiIsIElOU0VSVCtDTURMSU5FfSwKKwl7KGNoYXJfdSAqKSI8eEVORD4gPEVORD4iLCBOT1JNQUwrVklTVUFMK09QX1BFTkRJTkd9LAorCXsoY2hhcl91ICopIjx4RU5EPiA8RU5EPiIsIElOU0VSVCtDTURMSU5FfSwKKwl7KGNoYXJfdSAqKSI8eEhPTUU+IDxIT01FPiIsIE5PUk1BTCtWSVNVQUwrT1BfUEVORElOR30sCisJeyhjaGFyX3UgKikiPHhIT01FPiA8SE9NRT4iLCBJTlNFUlQrQ01ETElORX0sCit9OworCisvKgorICogU2V0IHVwIGRlZmF1bHQgbWFwcGluZ3MuCisgKi8KKyAgICB2b2lkCitpbml0X21hcHBpbmdzKCkKK3sKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGluaXRtYXBwaW5ncykgLyBzaXplb2Yoc3RydWN0IGluaXRtYXApOyArK2kpCisJYWRkX21hcChpbml0bWFwcGluZ3NbaV0uYXJnLCBpbml0bWFwcGluZ3NbaV0ubW9kZSk7Cit9CisKKy8qCisgKiBBZGQgYSBtYXBwaW5nICJtYXAiIGZvciBtb2RlICJtb2RlIi4KKyAqIE5lZWQgdG8gcHV0IHN0cmluZyBpbiBhbGxvY2F0ZWQgbWVtb3J5LCBiZWNhdXNlIGRvX21hcCgpIHdpbGwgbW9kaWZ5IGl0LgorICovCisgICAgdm9pZAorYWRkX21hcChtYXAsIG1vZGUpCisgICAgY2hhcl91CSptYXA7CisgICAgaW50CQltb2RlOworeworICAgIGNoYXJfdQkqczsKKyAgICBjaGFyX3UJKmNwb19zYXZlID0gcF9jcG87CisKKyAgICBwX2NwbyA9IChjaGFyX3UgKikiIjsJLyogQWxsb3cgPD4gbm90YXRpb24gKi8KKyAgICBzID0gdmltX3N0cnNhdmUobWFwKTsKKyAgICBpZiAocyAhPSBOVUxMKQorICAgIHsKKwkodm9pZClkb19tYXAoMCwgcywgbW9kZSwgRkFMU0UpOworCXZpbV9mcmVlKHMpOworICAgIH0KKyAgICBwX2NwbyA9IGNwb19zYXZlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2dsYmxfaW1lLmNwcCBiL3NyYy9nbGJsX2ltZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyYTIxOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9nbGJsX2ltZS5jcHAKQEAgLTAsMCArMSwyNjEgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisvKgorICogREVTQ1JJUFRJT046CisgKiBUaGlzIG1vZHVsZSBwcm9kdWNlcyBHbG9iYWwgSU1FIGZvciBWaW0sIG9uIFdpbmRvd3Mgd2l0aCBJbnRlcm5ldAorICogRXhwbG9yZXIgNS4wMSBvciBoaWdoZXIuICBZb3UgbmVlZCB0aHJlZSBmaWxlcyAiZGltbS5pZGwiLCAiZGltbS5oIiwgYW5kCisgKiAiZGltbV9pLmMiIHdoZW4gY29tcGlsZSB0aGlzIG1vZHVsZSBhdCB5b3VyIHNlbGYuICAiZGltbS5oIiwgYW5kCisgKiAiZGltbV9pLmMiIGFyZSBnZW5lcmF0ZWQgZnJvbSAiZGltbS5pZGwiIGJ5IHVzaW5nIE1JREwuRVhFIGFzIGxpa2UKKyAqICJpZl9vbGUuaCIuICBZb3UgY2FuIGdldCAiZGltbS5pZGwiIGluIE1TRE4gd2ViIHNpdGUuICBJIGdvdCBpdCBiZWxvdworICogVVJMLgorICoKKyAqIFdIQVQgSVMgVEhFIEdMT0JBTCBJTUU/OgorICogR2xvYmFsIElNRSBtYWtlcyBjYXBhYmlsaXR5IGlucHV0IENoaW5lc2UsIEphcGFuZXNlLCBhbmQgS29yZWFuIHRleHQgaW50bworICogVmltIGJ1ZmZlciBvbiBhbnkgbGFuZ3VhZ2UgdmVyc2lvbiBvZiBXaW5kb3dzIDk4LCBXaW5kb3dzIDk1LCBhbmQgV2luZG93cworICogTlQgNC4wLiAgU2VlIGJlbG93IFVSTCBmb3IgZGV0YWlsIG9mIEdsb2JhbCBJTUUuICBZb3UgY2FuIGFsc28gZmluZAorICogdmFyaW91cyBsYWd1YWdlIHZlcnNpb24gb2YgR2xvYmFsIElNRSBhdCBzYW1lIHBsYWNlLgorICoKKyAqIFJVTlRJTUUgUkVRVUlSRU1FTlRTOgorICogLSBJbnRlcm5ldCBFeHByb2xlciA1LjAxIG9yIGhpZ2hlci4KKyAqIC0gR2xvYmFsIElNRSAod2l0aCBsYW5ndWFnZSBwYWNrPykuCisgKiAtIE9mIGNvdXJzZSBWaW0gZm9yIFdpbmRvd3MuCisgKgorICogVVJMUzoKKyAqIC0gV2hlcmUgeW91IGNhbiBwcm9iYWJseSBnZXQgImRpbW0uaWRsIi4KKyAqIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZG93bmxvYWRzL3NhbXBsZXMvaW50ZXJuZXQvbGlicmFyaWVzL2llNV9saWIvc2FtcGxlLmFzcAorICogLSBHbG9iYWwgSU1FIGRldGFpbGVkIGluZm9ybWF0aW9uLgorICogaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3dpbmRvd3MvaWUvZmVhdHVyZXMvaW1lLmFzcAorICovCisKKyNpZmRlZiBHTE9CQUxfSU1FCisKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxvYmpiYXNlLmg+CitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJ2aW0uaCIKK30KKyNpbmNsdWRlICJkaW1tLmgiCisjaW5jbHVkZSAiZ2xibF9pbWUuaCIKKworc3RhdGljIElBY3RpdmVJTU1BcHAgKnBJQXBwID0gTlVMTDsKK3N0YXRpYyBJQWN0aXZlSU1NTWVzc2FnZVB1bXBPd25lciAqcElNc2cgPSBOVUxMOworc3RhdGljIEhXTkQgc19oV25kID0gTlVMTDsKK3N0YXRpYyBCT09MIHNfYlN0YXR1cyA9IEZBTFNFOyAvKiBmb3IgZXZhY3VhdGUgKi8KKworLyoKKyAqIEluaXRpYWxpemUgR2xvYmFsIElNRS4KKyAqICJhdG9tIiBtdXN0IGJlIHJldHVybiB2YWx1ZSBvZiBSZWdpc3RlckNsYXNzKEV4KS4KKyAqLworICAgIHZvaWQKK2dsb2JhbF9pbWVfaW5pdChBVE9NIGF0b20sIEhXTkQgaFduZCkKK3sKKyAgICBJVW5rbm93biAqcEk7CisgICAgSFJFU1VMVCBocjsKKworICAgIGlmIChwSUFwcCAhPSBOVUxMIHx8IHBJTXNnICE9IE5VTEwpCisJcmV0dXJuOworICAgIE9sZUluaXRpYWxpemUoTlVMTCk7CisKKyAgICAvKgorICAgICAqIEdldCBpbnRlcmZhY2UgSVVua25vd24KKyAgICAgKi8KKyAgICBociA9IENvQ3JlYXRlSW5zdGFuY2UoQ0xTSURfQ0FjdGl2ZUlNTSwgTlVMTCwgQ0xTQ1RYX1NFUlZFUiwKKwkgICAgSUlEX0lVbmtub3duLCAodm9pZCoqKSZwSSk7CisgICAgaWYgKEZBSUxFRChocikgfHwgIXBJKQorCXJldHVybjsKKworICAgIC8qCisgICAgICogR2V0IGludGVyZmFjZSBJQWN0aXZlSU1NQXBwCisgICAgICovCisgICAgaHIgPSBwSS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lBY3RpdmVJTU1BcHAsICh2b2lkKiopJnBJQXBwKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKwlwSUFwcCA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIEdldCBpbnRlcmZhY2UgSUFjdGl2ZUlNTU1lc3NhZ2VQdW1wT3duZXIKKyAgICAgKi8KKyAgICBociA9IHBJLT5RdWVyeUludGVyZmFjZShJSURfSUFjdGl2ZUlNTU1lc3NhZ2VQdW1wT3duZXIsICh2b2lkKiopJnBJTXNnKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKwlwSU1zZyA9IE5VTEw7CisKKyAgICBpZiAocElBcHAgIT0gTlVMTCkKKyAgICB7CisJcElBcHAtPkFjdGl2YXRlKFRSVUUpOworCXBJQXBwLT5GaWx0ZXJDbGllbnRXaW5kb3dzKCZhdG9tLCAxKTsKKyAgICB9CisgICAgaWYgKHBJTXNnICE9IE5VTEwpCisJcElNc2ctPlN0YXJ0KCk7CisKKyAgICBwSS0+UmVsZWFzZSgpOworICAgIHNfaFduZCA9IGhXbmQ7Cit9CisKKy8qCisgKiBSZXNldCBhbmQgY2xlYXIgR2xvYmFsIElNRS4KKyAqLworICAgIHZvaWQKK2dsb2JhbF9pbWVfZW5kKCkKK3sKKyAgICBpZiAocElBcHAgIT0gTlVMTCkKKyAgICB7CisJSUFjdGl2ZUlNTUFwcCAqcCA9IHBJQXBwOworCisJcElBcHAgPSBOVUxMOworCXAtPkZpbHRlckNsaWVudFdpbmRvd3MoTlVMTCwgMCk7CisJcC0+RGVhY3RpdmF0ZSgpOworCXAtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgaWYgKHBJTXNnICE9IE5VTEwpCisgICAgeworCUlBY3RpdmVJTU1NZXNzYWdlUHVtcE93bmVyICpwID0gcElNc2c7CisKKwlwSU1zZyA9IE5VTEw7CisJcC0+RW5kKCk7CisJcC0+UmVsZWFzZSgpOworICAgIH0KKyAgICBPbGVVbmluaXRpYWxpemUoKTsKK30KKworLyoKKyAqIFJlcGxhY2VtZW50IGZvciBEZWZXaW5kb3dQcm9jKCkuCisgKi8KKyAgICBMUkVTVUxUIFdJTkFQSQorZ2xvYmFsX2ltZV9EZWZXaW5kb3dQcm9jKEhXTkQgaFduZCwgVUlOVCBNc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgTFJFU1VMVCBsUmVzdWx0OworCisgICAgaWYgKHBJQXBwID09IE5VTEwgfHwgcElBcHAtPk9uRGVmV2luZG93UHJvYyhoV25kLCBNc2csCisJCQkJCSAgICB3UGFyYW0sIGxQYXJhbSwgJmxSZXN1bHQpICE9IFNfT0spCisgICAgeworI2lmIGRlZmluZWQoV0lOMzI2NCkgJiYgZGVmaW5lZChGRUFUX01CWVRFKQorCWlmICh3aWRlX1dpbmRvd1Byb2MpCisJICAgIGxSZXN1bHQgPSBEZWZXaW5kb3dQcm9jVyhod25kLCBNc2csIHdQYXJhbSwgbFBhcmFtKTsKKwllbHNlCisjZW5kaWYKKwkgICAgbFJlc3VsdCA9IERlZldpbmRvd1Byb2MoaFduZCwgTXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgfQorICAgIHJldHVybiBsUmVzdWx0OworfQorCisvKgorICogUmVwbGFjZSB3aXRoIFRyYW5zbGF0ZU1lc3NhZ2UoKQorICovCisgICAgQk9PTCBXSU5BUEkKK2dsb2JhbF9pbWVfVHJhbnNsYXRlTWVzc2FnZShDT05TVCBNU0cgKmxwTXNnKQoreworICAgIGlmIChwSU1zZyA9PSBOVUxMIHx8IHBJTXNnLT5PblRyYW5zbGF0ZU1lc3NhZ2UobHBNc2cpID09IFNfRkFMU0UpCisJcmV0dXJuIFRyYW5zbGF0ZU1lc3NhZ2UobHBNc2cpOworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICogU2V0IHBvc2l0aW9uIG9mIElNRSBjb21wb3Rpc2lvbiB3aW5kb3cuCisgKgorICogWW91IGhhdmUgdG8gY2FsbCB0aGlzIGJlZm9yZSBzdGFydGluZyBjb21wb3NpdGlvbi4gIElmIG9uY2UgY29tcG9zaXRpb24KKyAqIHN0YXJ0ZWQsIHRoaXMgY2FuIHRha2Ugbm8gZWZmZWN0IHVudGlsIHRoYXQgY29tcG9zaXRpb24gaGF2ZSBmaW5pc2VkLiAgU28KKyAqIHlvdSBzaG91bGQgaGFuZGxlIFdNX0lNRV9TVEFSVENPTVBPU0lUSU9OIGFuZCBjYWxsIHRoaXMgZnVuY3Rpb24uCisgKi8KKyAgICB2b2lkIFdJTkFQSQorZ2xvYmFsX2ltZV9zZXRfcG9zaXRpb24oUE9JTlQgKnBQb2ludCkKK3sKKyAgICBISU1DIGhJbWMgPSBOVUxMOworCisgICAgaWYgKHBJQXBwID09IE5VTEwgfHwgcFBvaW50ID09IE5VTEwpCisJcmV0dXJuOworCisgICAgaWYgKFNVQ0NFRURFRChwSUFwcC0+R2V0Q29udGV4dChzX2hXbmQsICZoSW1jKSkpCisgICAgeworCUNPTVBPU0lUSU9ORk9STSBDb21wRm9ybTsKKworCUNvbXBGb3JtLmR3U3R5bGUgPSBDRlNfUE9JTlQ7CisJQ29tcEZvcm0ucHRDdXJyZW50UG9zID0gKnBQb2ludDsKKwlwSUFwcC0+U2V0Q29tcG9zaXRpb25XaW5kb3coaEltYywgJkNvbXBGb3JtKTsKKwlwSUFwcC0+UmVsZWFzZUNvbnRleHQoc19oV25kLCBoSW1jKTsKKyAgICB9Cit9CisKKy8qCisgKiBTZXQgZm9udCB0byBHbG9iYWwgSU1FCisgKi8KKy8qIEdJTUVfVEVTVCAqLworICAgIHZvaWQgV0lOQVBJCitnbG9iYWxfaW1lX3NldF9mb250KExPR0ZPTlQgKnBGb250KQoreworICAgIEhJTUMgaEltYyA9IE5VTEw7CisKKyAgICBpZiAocElBcHAgPT0gTlVMTCB8fCBwRm9udCA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGlmIChTVUNDRUVERUQocElBcHAtPkdldENvbnRleHQoc19oV25kLCAmaEltYykpKQorICAgIHsKKwlwSUFwcC0+U2V0Q29tcG9zaXRpb25Gb250QShoSW1jLCBwRm9udCk7CisJcElBcHAtPlJlbGVhc2VDb250ZXh0KHNfaFduZCwgaEltYyk7CisgICAgfQorfQorCisvKgorICogZm9yIElNRSBjb250cm9sLiAgU2F2ZSBjdXJyZW50IHN0YXR1cyBvZiBJTUUsIGFuZCBzZXQgZm9yY2UgbmV3LXN0YXR1cyB0bworICogRW5nbGxpc2ggKHR1cm4gb2ZmKS4KKyAqLworICAgIHZvaWQgV0lOQVBJCitnbG9iYWxfaW1lX3N0YXR1c19ldmFjdWF0ZSgpCit7CisgICAgSElNQyAgICBoSW1jOworCisgICAgaWYgKHBJQXBwICE9IE5VTEwgJiYgU1VDQ0VFREVEKHBJQXBwLT5HZXRDb250ZXh0KHNfaFduZCwgJmhJbWMpKSkKKyAgICB7CisJc19iU3RhdHVzID0gKHBJQXBwLT5HZXRPcGVuU3RhdHVzKGhJbWMpID09IDApID8gVFJVRSA6IEZBTFNFOworCXBJQXBwLT5TZXRPcGVuU3RhdHVzKGhJbWMsIEZBTFNFKTsKKwlwSUFwcC0+UmVsZWFzZUNvbnRleHQoc19oV25kLCBoSW1jKTsKKyAgICB9Cit9CisKKy8qCisgKiBmb3IgSU1FIGNvbnRyb2wuICBDaGFuZ2UgSU1FIHN0YXR1cyB0byBsYXN0IHNhdmVkIG9uZS4KKyAqLworICAgIHZvaWQgV0lOQVBJCitnbG9iYWxfaW1lX3N0YXR1c19yZXN0b3JlKCkKK3sKKyAgICBISU1DICAgIGhJbWM7CisKKyAgICBpZiAocElBcHAgIT0gTlVMTCAmJiBTVUNDRUVERUQocElBcHAtPkdldENvbnRleHQoc19oV25kLCAmaEltYykpKQorICAgIHsKKwlwSUFwcC0+U2V0T3BlblN0YXR1cyhoSW1jLCBzX2JTdGF0dXMpOworCXBJQXBwLT5SZWxlYXNlQ29udGV4dChzX2hXbmQsIGhJbWMpOworICAgIH0KK30KKworICAgIHZvaWQgV0lOQVBJCitnbG9iYWxfaW1lX3NldF9zdGF0dXMoaW50IHN0YXR1cykKK3sKKyAgICBISU1DICAgIGhJbWM7CisKKyAgICBpZiAocElBcHAgIT0gTlVMTCAmJiBTVUNDRUVERUQocElBcHAtPkdldENvbnRleHQoc19oV25kLCAmaEltYykpKQorICAgIHsKKwlwSUFwcC0+U2V0T3BlblN0YXR1cyhoSW1jLCBzdGF0dXMgPyBUUlVFIDogRkFMU0UpOworCXBJQXBwLT5SZWxlYXNlQ29udGV4dChzX2hXbmQsIGhJbWMpOworICAgIH0KK30KKworICAgIGludCBXSU5BUEkKK2dsb2JhbF9pbWVfZ2V0X3N0YXR1cygpCit7CisgICAgaW50IHN0YXR1cyA9IDA7CisgICAgSElNQyAgICBoSW1jOworCisgICAgaWYgKHBJQXBwICE9IE5VTEwgJiYgU1VDQ0VFREVEKHBJQXBwLT5HZXRDb250ZXh0KHNfaFduZCwgJmhJbWMpKSkKKyAgICB7CisJc3RhdHVzID0gcElBcHAtPkdldE9wZW5TdGF0dXMoaEltYykgPyAxIDogMDsKKwlwSUFwcC0+UmVsZWFzZUNvbnRleHQoc19oV25kLCBoSW1jKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworI2VuZGlmIC8qIEdMT0JBTF9JTUUgKi8KZGlmZiAtLWdpdCBhL3NyYy9nbGJsX2ltZS5oIGIvc3JjL2dsYmxfaW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwODgzNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9nbGJsX2ltZS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisjaWZkZWYgR0xPQkFMX0lNRQorI2lmbmRlZiBfSU5DX0dMT0JBTF9JTUUKKyNkZWZpbmUgX0lOQ19HTE9CQUxfSU1FCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyAgICB2b2lkIGdsb2JhbF9pbWVfaW5pdChBVE9NLCBIV05EKTsKKyAgICB2b2lkIGdsb2JhbF9pbWVfZW5kKCk7CisgICAgTFJFU1VMVCBXSU5BUEkgZ2xvYmFsX2ltZV9EZWZXaW5kb3dQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKKyAgICBCT09MIFdJTkFQSSBnbG9iYWxfaW1lX1RyYW5zbGF0ZU1lc3NhZ2UoQ09OU1QgTVNHICopOworICAgIHZvaWQgV0lOQVBJIGdsb2JhbF9pbWVfc2V0X3Bvc2l0aW9uKFBPSU5UKik7CisgICAgdm9pZCBXSU5BUEkgZ2xvYmFsX2ltZV9zZXRfZm9udChMT0dGT05UKik7CisgICAgdm9pZCBXSU5BUEkgZ2xvYmFsX2ltZV9zdGF0dXNfZXZhY3VhdGUoKTsKKyAgICB2b2lkIFdJTkFQSSBnbG9iYWxfaW1lX3N0YXR1c19yZXN0b3JlKCk7CisgICAgdm9pZCBXSU5BUEkgZ2xvYmFsX2ltZV9zZXRfc3RhdHVzKGludCBzdGF0dXMpOworICAgIGludCBXSU5BUEkgZ2xvYmFsX2ltZV9nZXRfc3RhdHVzKCk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogX0lOQ19HTE9CQUxfSU1FICovCisjZW5kaWYgLyogR0xPQkFMX0lNRSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2dsb2JhbHMuaCBiL3NyYy9nbG9iYWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1MzMxNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9nbG9iYWxzLmgKQEAgLTAsMCArMSwxMzgxIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisvKgorICogZGVmaW5pdGlvbiBvZiBnbG9iYWwgdmFyaWFibGVzCisgKi8KKworLyoKKyAqIE51bWJlciBvZiBSb3dzIGFuZCBDb2x1bW5zIGluIHRoZSBzY3JlZW4uCisgKiBNdXN0IGJlIGxvbmcgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBhcyBvcHRpb25zIGluIG9wdGlvbi5jLgorICogTm90ZTogVXNlIHNjcmVlbl9Sb3dzIGFuZCBzY3JlZW5fQ29sdW1ucyB0byBhY2Nlc3MgaXRlbXMgaW4gU2NyZWVuTGluZXNbXS4KKyAqIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50IHZhbHVlcyB3aGVuIHRoZSBzY3JlZW4gd2Fzbid0IChyZSlhbGxvY2F0ZWQgeWV0CisgKiBhZnRlciBzZXR0aW5nIFJvd3Mgb3IgQ29sdW1ucyAoZS5nLiwgd2hlbiBzdGFydGluZyB1cCkuCisgKi8KK0VYVEVSTiBsb25nCVJvd3MJCQkvKiBuciBvZiByb3dzIGluIHRoZSBzY3JlZW4gKi8KKyNpZmRlZiBET19JTklUCisjIGlmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lOMzI2NCkgfHwgZGVmaW5lZChPUzIpCisJCQkgICAgPSAyNUwKKyMgZWxzZQorCQkJICAgID0gMjRMCisjIGVuZGlmCisjZW5kaWYKKwkJCSAgICA7CitFWFRFUk4gbG9uZwlDb2x1bW5zIElOSVQoPSA4MCk7CS8qIG5yIG9mIGNvbHVtbnMgaW4gdGhlIHNjcmVlbiAqLworCisvKgorICogVGhlIGNoYXJhY3RlcnMgdGhhdCBhcmUgY3VycmVudGx5IG9uIHRoZSBzY3JlZW4gYXJlIGtlcHQgaW4gU2NyZWVuTGluZXNbXS4KKyAqIEl0IGlzIGEgc2luZ2xlIGJsb2NrIG9mIGNoYXJhY3RlcnMsIHRoZSBzaXplIG9mIHRoZSBzY3JlZW4gcGx1cyBvbmUgbGluZS4KKyAqIFRoZSBhdHRyaWJ1dGVzIGZvciB0aG9zZSBjaGFyYWN0ZXJzIGFyZSBrZXB0IGluIFNjcmVlbkF0dHJzW10uCisgKgorICogIkxpbmVPZmZzZXRbbl0iIGlzIHRoZSBvZmZzZXQgZnJvbSBTY3JlZW5MaW5lc1tdIGZvciB0aGUgc3RhcnQgb2YgbGluZSAnbicuCisgKiBUaGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciBTY3JlZW5MaW5lc1VDW10gYW5kIFNjcmVlbkF0dHJzW10uCisgKi8KK0VYVEVSTiBzY2hhcl9UCSpTY3JlZW5MaW5lcyBJTklUKD0gTlVMTCk7CitFWFRFUk4gc2F0dHJfVAkqU2NyZWVuQXR0cnMgSU5JVCg9IE5VTEwpOworRVhURVJOIHVuc2lnbmVkCSpMaW5lT2Zmc2V0IElOSVQoPSBOVUxMKTsKK0VYVEVSTiBjaGFyX3UJKkxpbmVXcmFwcyBJTklUKD0gTlVMTCk7CisKKyNpZmRlZiBGRUFUX01CWVRFCisvKgorICogV2hlbiB1c2luZyBVbmljb2RlIGNoYXJhY3RlcnMgKGluIFVURi04IGVuY29kaW5nKSB0aGUgY2hhcmFjdGVyIGluCisgKiBTY3JlZW5MaW5lc1VDW10gY29udGFpbnMgdGhlIFVuaWNvZGUgZm9yIHRoZSBjaGFyYWN0ZXIgYXQgdGhpcyBwb3NpdGlvbiwgb3IKKyAqIE5VTCB3aGVuIHRoZSBjaGFyYWN0ZXIgaW4gU2NyZWVuTGluZXNbXSBpcyB0byBiZSB1c2VkIChBU0NJSSBjaGFyKS4KKyAqIFRoZSBjb21wb3NpbmcgY2hhcmFjdGVycyBhcmUgdG8gYmUgZHJhd24gb24gdG9wIG9mIHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIuCisgKiBOb3RlOiBUaGVzZSB0aHJlZSBhcmUgb25seSBhbGxvY2F0ZWQgd2hlbiBlbmNfdXRmOCBpcyBzZXQhCisgKi8KK0VYVEVSTiB1OGNoYXJfVAkqU2NyZWVuTGluZXNVQyBJTklUKD0gTlVMTCk7CS8qIGRlY29kZWQgVVRGLTggY2hhcmFjdGVycyAqLworRVhURVJOIHU4Y2hhcl9UCSpTY3JlZW5MaW5lc0MxIElOSVQoPSBOVUxMKTsJLyogZmlyc3QgY29tcG9zaW5nIGNoYXIgKi8KK0VYVEVSTiB1OGNoYXJfVAkqU2NyZWVuTGluZXNDMiBJTklUKD0gTlVMTCk7CS8qIHNlY29uZCBjb21wb3NpbmcgY2hhciAqLworCisvKiBPbmx5IHVzZWQgZm9yIGV1Yy1qcDogU2Vjb25kIGJ5dGUgb2YgYSBjaGFyYWN0ZXIgdGhhdCBzdGFydHMgd2l0aCAweDhlLgorICogVGhlc2UgYXJlIHNpbmdsZS13aWR0aC4gKi8KK0VYVEVSTiBzY2hhcl9UCSpTY3JlZW5MaW5lczIgSU5JVCg9IE5VTEwpOworI2VuZGlmCisKK0VYVEVSTiBpbnQJc2NyZWVuX1Jvd3MgSU5JVCg9IDApOwkgICAgLyogYWN0dWFsIHNpemUgb2YgU2NyZWVuTGluZXNbXSAqLworRVhURVJOIGludAlzY3JlZW5fQ29sdW1ucyBJTklUKD0gMCk7ICAgLyogYWN0dWFsIHNpemUgb2YgU2NyZWVuTGluZXNbXSAqLworCisvKgorICogV2hlbiB2Z2V0YygpIGlzIGNhbGxlZCwgaXQgc2V0cyBtb2RfbWFzayB0byB0aGUgc2V0IG9mIG1vZGlmaWVycyB0aGF0IGFyZQorICogaGVsZCBkb3duIGJhc2VkIG9uIHRoZSBLU01PRF8qIHN5bWJvbHMgdGhhdCBhcmUgcmVhZCBmaXJzdC4KKyAqLworRVhURVJOIGludAltb2RfbWFzayBJTklUKD0gMHgwKTsJCS8qIGN1cnJlbnQga2V5IG1vZGlmaWVycyAqLworCisvKgorICogQ21kbGluZV9yb3cgaXMgdGhlIHJvdyB3aGVyZSB0aGUgY29tbWFuZCBsaW5lIHN0YXJ0cywganVzdCBiZWxvdyB0aGUKKyAqIGxhc3Qgd2luZG93LgorICogV2hlbiB0aGUgY21kbGluZSBnZXRzIGxvbmdlciB0aGFuIHRoZSBhdmFpbGFibGUgc3BhY2UgdGhlIHNjcmVlbiBnZXRzCisgKiBzY3JvbGxlZCB1cC4gQWZ0ZXIgYSBDVFJMLUQgKHNob3cgbWF0Y2hlcyksIGFmdGVyIGhpdHRpbmcgJzonIGFmdGVyCisgKiAiaGl0IHJldHVybiIsIGFuZCBmb3IgdGhlIDpnbG9iYWwgY29tbWFuZCwgdGhlIGNvbW1hbmQgbGluZSBpcworICogdGVtcG9yYXJpbHkgbW92ZWQuICBUaGUgb2xkIHBvc2l0aW9uIGlzIHJlc3RvcmVkIHdpdGggdGhlIG5leHQgY2FsbCB0bworICogdXBkYXRlX3NjcmVlbigpLgorICovCitFWFRFUk4gaW50CWNtZGxpbmVfcm93OworCitFWFRFUk4gaW50CXJlZHJhd19jbWRsaW5lIElOSVQoPSBGQUxTRSk7CS8qIGNtZGxpbmUgbXVzdCBiZSByZWRyYXduICovCitFWFRFUk4gaW50CWNsZWFyX2NtZGxpbmUgSU5JVCg9IEZBTFNFKTsJLyogY21kbGluZSBtdXN0IGJlIGNsZWFyZWQgKi8KKyNpZiBkZWZpbmVkKEZFQVRfQ1JZUFQpIHx8IGRlZmluZWQoRkVBVF9FVkFMKQorRVhURVJOIGludAljbWRsaW5lX3N0YXIgSU5JVCg9IEZBTFNFKTsJLyogY21kbGluZSBpcyBjcnlwdGVkICovCisjZW5kaWYKK0VYVEVSTiBpbnQJZXhlY19mcm9tX3JlZyBJTklUKD0gRkFMU0UpOwkvKiBleGVjdXRpbmcgcmVnaXN0ZXIgKi8KKworRVhURVJOIGludAlnbG9iYWxfY2hhbmdlZHRpY2sgSU5JVCg9IDApOwkvKiBpbmNyZW1lbnRlZCBmb3IgZWFjaAorCQkJCQkJICAgY2hhbmdlLCBhbHNvIGZvciB1bmRvICovCitFWFRFUk4gaW50CXNjcmVlbl9jbGVhcmVkIElOSVQoPSBGQUxTRSk7CS8qIHNjcmVlbiBoYXMgYmVlbiBjbGVhcmVkICovCisKKy8qCisgKiBXaGVuICckJyBpcyBpbmNsdWRlZCBpbiAnY3BvcHRpb25zJyBvcHRpb24gc2V0OgorICogV2hlbiBhIGNoYW5nZSBjb21tYW5kIGlzIGdpdmVuIHRoYXQgZGVsZXRlcyBvbmx5IHBhcnQgb2YgYSBsaW5lLCBhIGRvbGxhcgorICogaXMgcHV0IGF0IHRoZSBlbmQgb2YgdGhlIGNoYW5nZWQgdGV4dC4gZG9sbGFyX3Zjb2wgaXMgc2V0IHRvIHRoZSB2aXJ0dWFsCisgKiBjb2x1bW4gb2YgdGhpcyAnJCcuCisgKi8KK0VYVEVSTiBjb2xucl9UCWRvbGxhcl92Y29sIElOSVQoPSAwKTsKKworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorLyoKKyAqIHVzZWQgZm9yIEluc2VydCBtb2RlIGNvbXBsZXRpb24KKyAqLworRVhURVJOIGludAljb21wbGV0aW9uX2xlbmd0aCBJTklUKD0gMCk7CitFWFRFUk4gaW50CWNvbnRpbnVlX3N0YXR1cyAgIElOSVQoPSAwKTsKK0VYVEVSTiBpbnQJY29tcGxldGlvbl9pbnRlcnJ1cHRlZCBJTklUKD0gRkFMU0UpOworCisvKiBmbGFncyBmb3IgY29udGludWVfc3RhdHVzICovCisjZGVmaW5lIENPTlRfQURESU5HCTEJLyogIm5vcm1hbCIgb3IgImFkZGluZyIgZXhwYW5zaW9uICovCisjZGVmaW5lIENPTlRfSU5UUlBUCSgyICsgNCkJLyogYSBeWCBpbnRlcnJ1cHRlZCB0aGUgY3VycmVudCBleHBhbnNpb24gKi8KKwkJCQkvKiBpdCdzIHNldCBvbmx5IGlmZiBOX0FERFMgaXMgc2V0ICovCisjZGVmaW5lIENPTlRfTl9BRERTCTQJLyogbmV4dCBeWDw+IHdpbGwgYWRkLW5ldyBvciBleHBhbmQtY3VycmVudCAqLworI2RlZmluZSBDT05UX1NfSVBPUwk4CS8qIG5leHQgXlg8PiB3aWxsIHNldCBpbml0aWFsX3Bvcz8KKwkJCQkgKiBpZiBzbywgd29yZC13aXNlLWV4cGFuc2lvbiB3aWxsIHNldCBTT0wgKi8KKyNkZWZpbmUgQ09OVF9TT0wJMTYJLyogcGF0dGVybiBpbmNsdWRlcyBzdGFydCBvZiBsaW5lLCBqdXN0IGZvcgorCQkJCSAqIHdvcmQtd2lzZSBleHBhbnNpb24sIG5vdCBzZXQgZm9yIF5YXkwgKi8KKyNkZWZpbmUgQ09OVF9MT0NBTAkzMgkvKiBmb3IgY3RybF94X21vZGUgMCwgXlheUC9eWF5OIGRvIGEgbG9jYWwKKwkJCQkgKiBleHBhbnNpb24sIChlZyB1c2UgY29tcGxldGU9LikgKi8KKyNlbmRpZgorCisvKgorICogRnVuY3Rpb25zIGZvciBwdXR0aW5nIGNoYXJhY3RlcnMgaW4gdGhlIGNvbW1hbmQgbGluZSwKKyAqIHdoaWxlIGtlZXBpbmcgU2NyZWVuTGluZXNbXSB1cGRhdGVkLgorICovCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKK0VYVEVSTiBpbnQJY21kbXNnX3JsIElOSVQoPSBGQUxTRSk7ICAgIC8qIGNtZGxpbmUgaXMgZHJhd24gcmlnaHQgdG8gbGVmdCAqLworI2VuZGlmCitFWFRFUk4gaW50CW1zZ19jb2w7CitFWFRFUk4gaW50CW1zZ19yb3c7CitFWFRFUk4gaW50CW1zZ19zY3JvbGxlZDsJLyogTnVtYmVyIG9mIHNjcmVlbiBsaW5lcyB0aGF0IHdpbmRvd3MgaGF2ZQorCQkJCSAqIHNjcm9sbGVkIGJlY2F1c2Ugb2YgcHJpbnRpbmcgbWVzc2FnZXMuICovCitFWFRFUk4gaW50CW1zZ19zY3JvbGxlZF9pZ24gSU5JVCg9IEZBTFNFKTsKKwkJCQkvKiB3aGVuIFRSVUUgZG9uJ3Qgc2V0IG5lZWRfd2FpdF9yZXR1cm4gaW4KKwkJCQkgICBtc2dfcHV0c19hdHRyKCkgd2hlbiBtc2dfc2Nyb2xsZWQgaXMKKwkJCQkgICBub24temVybyAqLworCitFWFRFUk4gY2hhcl91CSprZWVwX21zZyBJTklUKD0gTlVMTCk7CSAgICAvKiBtc2cgdG8gYmUgc2hvd24gYWZ0ZXIgcmVkcmF3ICovCitFWFRFUk4gaW50CWtlZXBfbXNnX2F0dHIgSU5JVCg9IDApOyAgICAvKiBoaWdobGlnaHQgYXR0ciBmb3Iga2VlcF9tc2cgKi8KK0VYVEVSTiBpbnQJbmVlZF9maWxlaW5mbyBJTklUKD0gRkFMU0UpOy8qIGRvIGZpbGVpbmZvKCkgYWZ0ZXIgcmVkcmF3ICovCitFWFRFUk4gaW50CW1zZ19zY3JvbGwgSU5JVCg9IEZBTFNFKTsgICAvKiBtc2dfc3RhcnQoKSB3aWxsIHNjcm9sbCAqLworRVhURVJOIGludAltc2dfZGlkb3V0IElOSVQoPSBGQUxTRSk7ICAgLyogbXNnX291dHN0cigpIHdhcyB1c2VkIGluIGxpbmUgKi8KK0VYVEVSTiBpbnQJbXNnX2RpZGFueSBJTklUKD0gRkFMU0UpOyAgIC8qIG1zZ19vdXRzdHIoKSB3YXMgdXNlZCBhdCBhbGwgKi8KK0VYVEVSTiBpbnQJbXNnX25vd2FpdCBJTklUKD0gRkFMU0UpOyAgIC8qIGRvbid0IHdhaXQgZm9yIHRoaXMgbXNnICovCitFWFRFUk4gaW50CWVtc2dfb2ZmIElOSVQoPSAwKTsJICAgIC8qIGRvbid0IGRpc3BsYXkgZXJyb3JzIGZvciBub3csCisJCQkJCSAgICAgICB1bmxlc3MgJ2RlYnVnJyBpcyBzZXQuICovCitFWFRFUk4gaW50CWluZm9fbWVzc2FnZSBJTklUKD0gRkFMU0UpOyAvKiBwcmludGluZyBpbmZvcm1hdGl2ZSBtZXNzYWdlICovCisjaWZkZWYgRkVBVF9FVkFMCitFWFRFUk4gaW50CWVtc2dfc2tpcCBJTklUKD0gMCk7CSAgICAvKiBkb24ndCBkaXNwbGF5IGVycm9ycyBmb3IKKwkJCQkJICAgICAgIGV4cHJlc3Npb24gdGhhdCBpcyBza2lwcGVkICovCitFWFRFUk4gaW50CWVtc2dfc2V2ZXJlIElOSVQoPUZBTFNFKTsgICAvKiB1c2UgbWVzc2FnZSBvZiBuZXh0IG9mIHNldmVyYWwKKwkJCQkJICAgICAgIGVtc2coKSBjYWxscyBmb3IgdGhyb3cgKi8KK0VYVEVSTiBpbnQJZGlkX2VuZGlmIElOSVQoPSBGQUxTRSk7ICAgIC8qIGp1c3QgaGFkICI6ZW5kaWYiICovCisjZW5kaWYKK0VYVEVSTiBpbnQJZGlkX2Vtc2c7CQkgICAgLyogc2V0IGJ5IGVtc2coKSB3aGVuIHRoZSBtZXNzYWdlCisJCQkJCSAgICAgICBpcyBkaXNwbGF5ZWQgb3IgdGhyb3duICovCitFWFRFUk4gaW50CWNhbGxlZF9lbXNnOwkJICAgIC8qIGFsd2F5cyBzZXQgYnkgZW1zZygpICovCitFWFRFUk4gaW50CWVtc2dfb25fZGlzcGxheSBJTklUKD0gRkFMU0UpOwkvKiB0aGVyZSBpcyBhbiBlcnJvciBtZXNzYWdlICovCitFWFRFUk4gaW50CXJjX2RpZF9lbXNnIElOSVQoPSBGQUxTRSk7ICAvKiB2aW1fcmVnY29tcCgpIGNhbGxlZCBlbXNnKCkgKi8KKworRVhURVJOIGludAlub193YWl0X3JldHVybiBJTklUKD0gMCk7ICAgLyogZG9uJ3Qgd2FpdCBmb3IgcmV0dXJuIGZvciBub3cgKi8KK0VYVEVSTiBpbnQJbmVlZF93YWl0X3JldHVybiBJTklUKD0gMCk7IC8qIG5lZWQgdG8gd2FpdCBmb3IgcmV0dXJuIGxhdGVyICovCitFWFRFUk4gaW50CWRpZF93YWl0X3JldHVybiBJTklUKD0gRkFMU0UpOwkvKiB3YWl0X3JldHVybigpIHdhcyB1c2VkIGFuZAorCQkJCQkJICAgbm90aGluZyB3cml0dGVuIHNpbmNlIHRoZW4gKi8KKyNpZmRlZiBGRUFUX1RJVExFCitFWFRFUk4gaW50CW5lZWRfbWFrZXRpdGxlIElOSVQoPSBUUlVFKTsgLyogY2FsbCBtYWtldGl0bGUoKSBzb29uICovCisjZW5kaWYKKworRVhURVJOIGludAlxdWl0X21vcmUgSU5JVCg9IEZBTFNFKTsgICAgLyogJ3EnIGhpdCBhdCAiLS1tb3JlLS0iIG1zZyAqLworRVhURVJOIGludAltb3JlX2JhY2sgSU5JVCg9IDApOwkgICAgLyogJ2InIG9yICd1JyBhdCAiLS1tb3JlLS0iIG1zZyAqLworRVhURVJOIGludAltb3JlX2JhY2tfdXNlZCBJTklUKD0gRkFMU0UpOyAvKiB1c2luZyBtb3JlX2JhY2sgKi8KKyNpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoX19FTVhfXykgfHwgZGVmaW5lZChWTVMpIHx8IGRlZmluZWQoTUFDT1NfWCkKK0VYVEVSTiBpbnQJbmV3bGluZV9vbl9leGl0IElOSVQoPSBGQUxTRSk7CS8qIGRpZCBtc2cgaW4gYWx0ZXJuLiBzY3JlZW4gKi8KK0VYVEVSTiBpbnQJaW50cl9jaGFyIElOSVQoPSAwKTsJICAgIC8qIGV4dHJhIGludGVycnVwdCBjaGFyYWN0ZXIgKi8KKyNlbmRpZgorI2lmIChkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoVk1TKSkgJiYgZGVmaW5lZChGRUFUX1gxMSkKK0VYVEVSTiBpbnQJeF9ub19jb25uZWN0IElOSVQoPSBGQUxTRSk7IC8qIGRvbid0IGNvbm5lY3QgdG8gWCBzZXJ2ZXIgKi8KKyMgaWYgZGVmaW5lZChGRUFUX0NMSUVOVFNFUlZFUikKK0VYVEVSTiBpbnQJeF9mb3JjZV9jb25uZWN0IElOSVQoPSBGQUxTRSk7IC8qIERvIGNvbm5lY3QgdG8gWCBzZXJ2ZXIuCisJCQkJCQkgIE92ZXJydWxlcyB4X25vX2Nvbm5lY3QgYW5kCisJCQkJCQkgICJleGNsdWRlIiBpbiAnY2xpcGJvYXJkJy4gKi8KKyMgZW5kaWYKKyNlbmRpZgorRVhURVJOIGludAl2Z2V0Y19idXN5IElOSVQoPSBGQUxTRSk7ICAgLyogaW5zaWRlIHZnZXRjKCkgbm93ICovCisKK0VYVEVSTiBpbnQJZGlkc2V0X3ZpbSBJTklUKD0gRkFMU0UpOyAgIC8qIGRpZCBzZXQgJFZJTSBvdXJzZWx2ZXMgKi8KK0VYVEVSTiBpbnQJZGlkc2V0X3ZpbXJ1bnRpbWUgSU5JVCg9IEZBTFNFKTsgICAvKiBpZGVtIGZvciAkVklNUlVOVElNRSAqLworCisvKgorICogTGluZXMgbGVmdCBiZWZvcmUgYSAibW9yZSIgbWVzc2FnZS4JRXggbW9kZSBuZWVkcyB0byBiZSBhYmxlIHRvIHJlc2V0IHRoaXMKKyAqIGFmdGVyIHlvdSB0eXBlIHNvbWV0aGluZy4KKyAqLworRVhURVJOIGludAlsaW5lc19sZWZ0IElOSVQoPSAtMSk7CSAgICAvKiBsaW5lcyBsZWZ0IGZvciBsaXN0aW5nICovCitFWFRFUk4gaW50CW1zZ19ub19tb3JlIElOSVQoPSBGQUxTRSk7ICAvKiBkb24ndCB1c2UgbW9yZSBwcm9tcHQsIHRydW5jYXRlCisJCQkJCSAgICAgICBtZXNzYWdlcyAqLworCitFWFRFUk4gY2hhcl91CSpzb3VyY2luZ19uYW1lIElOSVQoID0gTlVMTCk7LyogbmFtZSBvZiBlcnJvciBtZXNzYWdlIHNvdXJjZSAqLworRVhURVJOIGxpbmVucl9UCXNvdXJjaW5nX2xudW0gSU5JVCg9IDApOyAgICAvKiBsaW5lIG51bWJlciBvZiB0aGUgc291cmNlIGZpbGUgKi8KKworI2lmZGVmIEZFQVRfRVZBTAorRVhURVJOIGludAlleF9uZXN0aW5nX2xldmVsIElOSVQoPSAwKTsJLyogbmVzdGluZyBsZXZlbCAqLworRVhURVJOIGludAlkZWJ1Z19icmVha19sZXZlbCBJTklUKD0gLTEpOwkvKiBicmVhayBiZWxvdyB0aGlzIGxldmVsICovCitFWFRFUk4gaW50CWRlYnVnX2RpZF9tc2cgSU5JVCg9IEZBTFNFKTsJLyogZGlkICJkZWJ1ZyBtb2RlIiBtZXNzYWdlICovCitFWFRFUk4gaW50CWRlYnVnX3RpY2sgSU5JVCg9IDApOwkJLyogYnJlYWtwb2ludCBjaGFuZ2UgY291bnQgKi8KKworLyoKKyAqIFRoZSBleGNlcHRpb24gY3VycmVudGx5IGJlaW5nIHRocm93bi4gIFVzZWQgdG8gcGFzcyBhbiBleGNlcHRpb24gdG8KKyAqIGEgZGlmZmVyZW50IGNzdGFjay4gIEFsc28gdXNlZCBmb3IgZGlzY2FyZGluZyBhbiBleGNlcHRpb24gYmVmb3JlIGl0IGlzCisgKiBjYXVnaHQgb3IgbWFkZSBwZW5kaW5nLiAgT25seSB2YWxpZCB3aGVuIGRpZF90aHJvdyBpcyBUUlVFLgorICovCitFWFRFUk4gZXhjZXB0X1QgKmN1cnJlbnRfZXhjZXB0aW9uOworCisvKgorICogZGlkX3Rocm93OiBBbiBleGNlcHRpb24gaXMgYmVpbmcgdGhyb3duLiAgUmVzZXQgd2hlbiB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodAorICogb3IgYXMgbG9uZyBhcyBpdCBpcyBwZW5kaW5nIGluIGEgZmluYWxseSBjbGF1c2UuCisgKi8KK0VYVEVSTiBpbnQgZGlkX3Rocm93IElOSVQoPSBGQUxTRSk7CisKKy8qCisgKiBuZWVkX3JldGhyb3c6IHNldCB0byBUUlVFIHdoZW4gYSB0aHJvdyB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIGluIGRvX2NtZGxpbmUoKQorICogbXVzdCBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjc3RhY2sgb2YgdGhlIHByZXZpb3VzbHkgY2FsbGVkIGRvX2NtZGxpbmUoKS4KKyAqLworRVhURVJOIGludCBuZWVkX3JldGhyb3cgSU5JVCg9IEZBTFNFKTsKKworLyoKKyAqIGNoZWNrX2NzdGFjazogc2V0IHRvIFRSVUUgd2hlbiBhICI6ZmluaXNoIiBvciAiOnJldHVybiIgdGhhdCBjYW5ub3QgYmUKKyAqIGhhbmRsZWQgaW4gZG9fY21kbGluZSgpIG11c3QgYmUgcHJvcGFnYXRlZCB0byB0aGUgY3N0YWNrIG9mIHRoZSBwcmV2aW91c2x5CisgKiBjYWxsZWQgZG9fY21kbGluZSgpLgorICovCitFWFRFUk4gaW50IGNoZWNrX2NzdGFjayBJTklUKD0gRkFMU0UpOworCisvKgorICogTnVtYmVyIG9mIG5lc3RlZCB0cnkgY29uZGl0aW9uYWxzIChhY3Jvc3MgZnVuY3Rpb24gY2FsbHMgYW5kICI6c291cmNlIgorICogY29tbWFuZHMpLgorICovCitFWFRFUk4gaW50IHRyeWxldmVsIElOSVQoPSAwKTsKKworLyoKKyAqIFdoZW4gImZvcmNlX2Fib3J0IiBpcyBUUlVFLCBhbHdheXMgc2tpcCBjb21tYW5kcyBhZnRlciBhbiBlcnJvciBtZXNzYWdlLAorICogZXZlbiBhZnRlciB0aGUgb3V0ZXJtb3N0ICI6ZW5kaWYiIG9yICI6ZW5kd2hpbGUiIG9yIGZvciBhIGZ1bmN0aW9uIHdoaXRob3V0CisgKiB0aGUgImFib3J0IiBmbGFnLiAgSXQgaXMgc2V0IHRvIFRSVUUgd2hlbiAidHJ5bGV2ZWwiIGlzIG5vbi16ZXJvIChhbmQKKyAqICI6c2lsZW50ISIgd2FzIG5vdCB1c2VkKSBvciBhbiBleGNlcHRpb24gaXMgYmVpbmcgdGhyb3duIGF0IHRoZSB0aW1lIGFuCisgKiBlcnJvciBpcyBkZXRlY3RlZC4gIEl0IGlzIHNldCB0byBGQUxTRSB3aGVuICJ0cnlsZXZlbCIgZ2V0cyB6ZXJvIGFnYWluIGFuZAorICogdGhlcmUgd2FzIG5vIGVycm9yIG9yIGludGVycnVwdCBvciB0aHJvdy4KKyAqCisgKi8KK0VYVEVSTiBpbnQgZm9yY2VfYWJvcnQgSU5JVCg9IEZBTFNFKTsKKworLyoKKyAqICJtc2dfbGlzdCIgcG9pbnRzIHRvIGEgdmFyaWFibGUgaW4gdGhlIHN0YWNrIG9mIGRvX2NtZGxpbmUoKSB3aGljaCBrZWVwcyB0aGUKKyAqIGxpc3Qgb2YgYXJndW1lbnRzIG9mIHNldmVyYWwgZW1zZygpIGNhbGxzLCBvbmUgb2Ygd2hpY2ggaXMgdG8gYmUgY29udmVydGVkIHRvCisgKiBhbiBlcnJvciBleGNlcHRpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGZhaWxpbmcgY29tbWFuZCByZXR1cm5zLiAgVGhlCisgKiBtZXNzYWdlIHRvIGJlIHVzZWQgZm9yIHRoZSBleGNlcHRpb24gdmFsdWUgaXMgcG9pbnRlZCB0byBieSB0aGUgInRocm93X21zZyIKKyAqIGZpZWxkIG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBsaXN0LiAgSXQgaXMgdXN1YWxseSB0aGUgc2FtZSBhcyB0aGUgIm1zZyIKKyAqIGZpZWxkIG9mIHRoYXQgZWxlbWVudCwgYnV0IGNhbiBiZSBpZGVudGljYWwgdG8gdGhlICJtc2ciIGZpZWxkIG9mIGEgbGF0ZXIKKyAqIGxpc3QgZWxlbWVudCwgd2hlbiB0aGUgImVtc2dfc2V2ZXJlIiBmbGFnIHdhcyBzZXQgd2hlbiB0aGUgZW1zZygpIGNhbGwgd2FzCisgKiBtYWRlLgorICovCitFWFRFUk4gc3RydWN0IG1zZ2xpc3QgKiptc2dfbGlzdCBJTklUKD0gTlVMTCk7CisKKy8qCisgKiBzdXBwcmVzc19lcnJ0aHJvdzogV2hlbiBUUlVFLCBkb24ndCBjb252ZXJ0IGFuIGVycm9yIHRvIGFuIGV4Y2VwdGlvbi4gIFVzZWQKKyAqIHdoZW4gZGlzcGxheWluZyB0aGUgaW50ZXJydXB0IG1lc3NhZ2Ugb3IgcmVwb3J0aW5nIGFuIGV4Y2VwdGlvbiB0aGF0IGlzIHN0aWxsCisgKiB1bmNhdWdodCBhdCB0aGUgdG9wIGxldmVsICh3aGljaCBoYXMgYWxyZWFkeSBiZWVuIGRpc2NhcmRlZCB0aGVuKS4gIEFsc28gdXNlZAorICogZm9yIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gbm8gZXhjZXB0aW9uIGNhbiBiZSB0aHJvd24uCisgKi8KK0VYVEVSTiBpbnQgc3VwcHJlc3NfZXJydGhyb3cgSU5JVCg9IEZBTFNFKTsKKworLyoKKyAqIFRoZSBzdGFjayBvZiBhbGwgY2F1Z2h0IGFuZCBub3QgZmluaXNoZWQgZXhjZXB0aW9ucy4gIFRoZSBleGNlcHRpb24gb24gdGhlCisgKiB0b3Agb2YgdGhlIHN0YWNrIGlzIHRoZSBvbmUgZ290IGJ5IGV2YWx1YXRpb24gb2YgdjpleGNlcHRpb24uICBUaGUgY29tcGxldGUKKyAqIHN0YWNrIG9mIGFsbCBjYXVnaHQgYW5kIHBlbmRpbmcgZXhjZXB0aW9ucyBpcyBlbWJlZGRlZCBpbiB0aGUgdmFyaW91cworICogY3N0YWNrczsgdGhlIHBlbmRpbmcgZXhjZXB0aW9ucywgaG93ZXZlciwgYXJlIG5vdCBvbiB0aGUgY2F1Z2h0IHN0YWNrLgorICovCitFWFRFUk4gZXhjZXB0X1QgKmNhdWdodF9zdGFjayBJTklUKD0gTlVMTCk7CisKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9FVkFMCitFWFRFUk4gc2NpZF9UCWN1cnJlbnRfU0lEIElOSVQoPSAwKTsJICAgIC8qIElEIG9mIHNjcmlwdCBiZWluZyBzb3VyY2VkIG9yCisJCQkJCSAgICAgICB3YXMgc291cmNlZCB0byBkZWZpbmUgdGhlCisJCQkJCSAgICAgICBjdXJyZW50IGZ1bmN0aW9uLiAqLworI2VuZGlmCitFWFRFUk4gaW50CXNjcm9sbF9yZWdpb24gSU5JVCg9IEZBTFNFKTsgLyogdGVybSBzdXBwb3J0cyBzY3JvbGwgcmVnaW9uICovCitFWFRFUk4gaW50CXRfY29sb3JzIElOSVQoPSAwKTsJICAgIC8qIGludCB2YWx1ZSBvZiBUX0NDTyAqLworCisvKgorICogV2hlbiBoaWdobGlnaHRfbWF0Y2ggaXMgVFJVRSwgaGlnaGxpZ2h0IGEgbWF0Y2gsIHN0YXJ0aW5nIGF0IHRoZSBjdXJzb3IKKyAqIHBvc2l0aW9uLiAgU2VhcmNoX21hdGNoX2xpbmVzIGlzIHRoZSBudW1iZXIgb2YgbGluZXMgYWZ0ZXIgdGhlIG1hdGNoICgwIGZvcgorICogYSBtYXRjaCB3aXRoaW4gb25lIGxpbmUpLCBzZWFyY2hfbWF0Y2hfZW5kY29sIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZQorICogY2hhcmFjdGVyIGp1c3QgYWZ0ZXIgdGhlIG1hdGNoIGluIHRoZSBsYXN0IGxpbmUuCisgKi8KK0VYVEVSTiBpbnQJaGlnaGxpZ2h0X21hdGNoIElOSVQoPSBGQUxTRSk7CS8qIHNob3cgc2VhcmNoIG1hdGNoIHBvcyAqLworRVhURVJOIGxpbmVucl9UCXNlYXJjaF9tYXRjaF9saW5lczsJCS8qIGxpbmVzIG9mIG9mIG1hdGNoZWQgc3RyaW5nICovCitFWFRFUk4gY29sbnJfVAlzZWFyY2hfbWF0Y2hfZW5kY29sOwkJLyogY29sIG5yIG9mIG1hdGNoIGVuZCAqLworCitFWFRFUk4gaW50CW5vX3NtYXJ0Y2FzZSBJTklUKD0gRkFMU0UpOwkvKiBkb24ndCB1c2UgJ3NtYXJ0Y2FzZScgb25jZSAqLworCitFWFRFUk4gaW50CW5lZWRfY2hlY2tfdGltZXN0YW1wcyBJTklUKD0gRkFMU0UpOyAvKiBuZWVkIHRvIGNoZWNrIGZpbGUKKwkJCQkJCQl0aW1lc3RhbXBzIGFzYXAgKi8KK0VYVEVSTiBpbnQJZGlkX2NoZWNrX3RpbWVzdGFtcHMgSU5JVCg9IEZBTFNFKTsgLyogZGlkIGNoZWNrIHRpbWVzdGFtcHMKKwkJCQkJCSAgICAgICByZWNlbnRseSAqLworRVhURVJOIGludAlub19jaGVja190aW1lc3RhbXBzIElOSVQoPSAwKTsJLyogRG9uJ3QgY2hlY2sgdGltZXN0YW1wcyAqLworCitFWFRFUk4gaW50CWhpZ2hsaWdodF9hdHRyW0hMRl9DT1VOVF07ICAvKiBIaWdobC4gYXR0ciBmb3IgZWFjaCBjb250ZXh0LiAqLworI2lmZGVmIEZFQVRfU1RMX09QVAorIyBkZWZpbmUgVVNFUl9ISUdITElHSFQKKyNlbmRpZgorI2lmZGVmIFVTRVJfSElHSExJR0hUCitFWFRFUk4gaW50CWhpZ2hsaWdodF91c2VyWzldOwkJLyogVXNlclsxLTldIGF0dHJpYnV0ZXMgKi8KKyMgaWZkZWYgRkVBVF9TVExfT1BUCitFWFRFUk4gaW50CWhpZ2hsaWdodF9zdGxuY1s5XTsJCS8qIE9uIHRvcCBvZiB1c2VyICovCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSQorRVhURVJOIGNoYXJfdQkqdXNlX2d2aW1yYyBJTklUKD0gTlVMTCk7CS8qICItVSIgY21kbGluZSBhcmd1bWVudCAqLworI2VuZGlmCitFWFRFUk4gaW50CWN0ZXJtX25vcm1hbF9mZ19jb2xvciBJTklUKD0gMCk7CitFWFRFUk4gaW50CWN0ZXJtX25vcm1hbF9mZ19ib2xkIElOSVQoPSAwKTsKK0VYVEVSTiBpbnQJY3Rlcm1fbm9ybWFsX2JnX2NvbG9yIElOSVQoPSAwKTsKKworI2lmZGVmIEZFQVRfQVVUT0NNRAorRVhURVJOIGludAlhdXRvY21kX2J1c3kgSU5JVCg9IEZBTFNFKTsJLyogSXMgYXBwbHlfYXV0b2NtZHMoKSBidXN5PyAqLworRVhURVJOIGludAlhdXRvY21kX25vX2VudGVyIElOSVQoPSBGQUxTRSk7IC8qICpFbnRlciBhdXRvY21kcyBkaXNhYmxlZCAqLworRVhURVJOIGludAlhdXRvY21kX25vX2xlYXZlIElOSVQoPSBGQUxTRSk7IC8qICpMZWF2ZSBhdXRvY21kcyBkaXNhYmxlZCAqLworRVhURVJOIGludAlhdXRvY21kX2Jsb2NrIElOSVQoPSAwKTsJLyogYmxvY2sgYWxsIGF1dG9jbWRzICovCitFWFRFUk4gaW50CW1vZGlmaWVkX3dhc19zZXQ7CQkvKiBkaWQgIjpzZXQgbW9kaWZpZWQiICovCitFWFRFUk4gaW50CWRpZF9maWxldHlwZSBJTklUKD0gRkFMU0UpOwkvKiBGaWxlVHlwZSBldmVudCBmb3VuZCAqLworRVhURVJOIGludAlrZWVwX2ZpbGV0eXBlIElOSVQoPSBGQUxTRSk7CS8qIHZhbHVlIGZvciBkaWRfZmlsZXR5cGUgd2hlbgorCQkJCQkJICAgc3RhcnRpbmcgdG8gZXhlY3V0ZQorCQkJCQkJICAgYXV0b2NvbW1hbmRzICovCisKKy8qIFdoZW4gZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnVmZmVyLCBhbm90aGVyIG9uZSBtdXN0IGJlIGxvYWRlZC4gIElmIHdlIGtub3cKKyAqIHdoaWNoIG9uZSBpcyBwcmVmZXJyZWQsIGF1X25ld19jdXJidWYgaXMgc2V0IHRvIGl0ICovCitFWFRFUk4gYnVmX1QJKmF1X25ld19jdXJidWYgSU5JVCg9IE5VTEwpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX01PVVNFCisvKgorICogTW91c2UgY29vcmRpbmF0ZXMsIHNldCBieSBjaGVja190ZXJtY29kZSgpCisgKi8KK0VYVEVSTiBpbnQJbW91c2Vfcm93OworRVhURVJOIGludAltb3VzZV9jb2w7CitFWFRFUk4gaW50CW1vdXNlX3Bhc3RfYm90dG9tIElOSVQoPSBGQUxTRSk7LyogbW91c2UgYmVsb3cgbGFzdCBsaW5lICovCitFWFRFUk4gaW50CW1vdXNlX3Bhc3RfZW9sIElOSVQoPSBGQUxTRSk7CS8qIG1vdXNlIHJpZ2h0IG9mIGxpbmUgKi8KK0VYVEVSTiBpbnQJbW91c2VfZHJhZ2dpbmcgSU5JVCg9IDApOwkvKiBleHRlbmRpbmcgVmlzdWFsIGFyZWEgd2l0aAorCQkJCQkJICAgbW91c2UgZHJhZ2dpbmcgKi8KKyMgaWYgZGVmaW5lZChGRUFUX01PVVNFX0RFQykKKy8qCisgKiBXaGVuIHRoZSBERUMgbW91c2UgaGFzIGJlZW4gcHJlc3NlZCBidXQgbm90IHlldCByZWxlYXNlZCB3ZSBlbmFibGUKKyAqIGF1dG9tYXRpYyBxdWVyeXMgZm9yIHRoZSBtb3VzZSBwb3NpdGlvbi4KKyAqLworRVhURVJOIGludAlXYW50UXVlcnlNb3VzZSBJTklUKD0gMCk7CisjIGVuZGlmCisKKyMgaWZkZWYgRkVBVF9HVUkKKy8qIFdoZW4gdGhlIHdpbmRvdyBsYXlvdXQgaXMgYWJvdXQgdG8gYmUgY2hhbmdlZCwgbmVlZF9tb3VzZV9jb3JyZWN0IGlzIHNldCwKKyAqIHNvIHRoYXQgZ3VpX21vdXNlX2NvcnJlY3QoKSBpcyBjYWxsZWQgYWZ0ZXJ3YXJkcywgdG8gY29ycmVjdCB0aGUgbW91c2UKKyAqIHBvaW50ZXIgd2hlbiBmb2N1cy1mb2xsb3ctbW91c2UgaXMgYmVpbmcgdXNlZC4gKi8KK0VYVEVSTiBpbnQJbmVlZF9tb3VzZV9jb3JyZWN0IElOSVQoPSBGQUxTRSk7CisKKy8qIFdoZW4gZG91YmxlIGNsaWNraW5nLCB0b3BsaW5lIG11c3QgYmUgdGhlIHNhbWUgKi8KK0VYVEVSTiBsaW5lbnJfVCBndWlfcHJldl90b3BsaW5lIElOSVQoPSAwKTsKKyMgIGlmZGVmIEZFQVRfRElGRgorRVhURVJOIGludAlndWlfcHJldl90b3BmaWxsIElOSVQoPSAwKTsKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZkZWYgRkVBVF9NT1VTRVNIQVBFCitFWFRFUk4gaW50CWRyYWdfc3RhdHVzX2xpbmUgSU5JVCg9IEZBTFNFKTsJLyogZHJhZ2dpbmcgdGhlIHN0YXR1cyBsaW5lICovCitFWFRFUk4gaW50CXBvc3Rwb25lZF9tb3VzZXNoYXBlIElOSVQoPSBGQUxTRSk7IC8qIHBvc3Rwb25lZCB1cGRhdGluZyB0aGUKKwkJCQkJCSAgICAgICBtb3VzZSBwb2ludGVyIHNoYXBlICovCisjICBpZmRlZiBGRUFUX1ZFUlRTUExJVAorRVhURVJOIGludAlkcmFnX3NlcF9saW5lIElOSVQoPSBGQUxTRSk7CS8qIGRyYWdnaW5nIHZlcnQgc2VwYXJhdG9yICovCisjICBlbmRpZgorIyBlbmRpZgorCisjZW5kaWYKKworI2lmZGVmIEZFQVRfRElGRgorLyogVmFsdWUgc2V0IGZyb20gJ2RpZmZvcHQnLiAqLworRVhURVJOIGludAlkaWZmX2NvbnRleHQgSU5JVCg9IDYpOwkvKiBjb250ZXh0IGZvciBmb2xkcyAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX01FTlUKKy8qIFRoZSByb290IG9mIHRoZSBtZW51IGhpZXJhcmNoeS4gKi8KK0VYVEVSTiB2aW1tZW51X1QJKnJvb3RfbWVudSBJTklUKD0gTlVMTCk7CisvKgorICogV2hpbGUgZGVmaW5pbmcgdGhlIHN5c3RlbSBtZW51LCBzeXNfbWVudSBpcyBUUlVFLiAgVGhpcyBhdm9pZHMKKyAqIG92ZXJydWxpbmcgb2YgbWVudXMgdGhhdCB0aGUgdXNlciBhbHJlYWR5IGRlZmluZWQuCisgKi8KK0VYVEVSTiBpbnQJc3lzX21lbnUgSU5JVCg9IEZBTFNFKTsKKyNlbmRpZgorCisvKiBXaGlsZSByZWRyYXdpbmcgdGhlIHNjcmVlbiB0aGlzIGZsYWcgaXMgc2V0LiAgSXQgbWVhbnMgdGhlIHNjcmVlbiBzaXplCisgKiAoJ2xpbmVzJyBhbmQgJ3Jvd3MnKSBtdXN0IG5vdCBiZSBjaGFuZ2VkLiAqLworRVhURVJOIGludAl1cGRhdGluZ19zY3JlZW4gSU5JVCg9IEZBTFNFKTsKKworI2lmZGVmIEZFQVRfR1VJCisjIGlmZGVmIEZFQVRfTUVOVQorLyogTWVudSBpdGVtIGp1c3Qgc2VsZWN0ZWQsIHNldCBieSBjaGVja190ZXJtY29kZSgpICovCitFWFRFUk4gdmltbWVudV9UCSpjdXJyZW50X21lbnU7CisKKy8qIFNldCB0byBUUlVFIGFmdGVyIGFkZGluZy9yZW1vdmluZyBtZW51cyB0byBlbnN1cmUgdGhleSBhcmUgdXBkYXRlZCAqLworRVhURVJOIGludCBmb3JjZV9tZW51X3VwZGF0ZSBJTklUKD0gRkFMU0UpOworIyBlbmRpZgorCisvKiBTY3JvbGxiYXIgbW92ZWQgYW5kIG5ldyB2YWx1ZSwgc2V0IGJ5IGNoZWNrX3Rlcm1jb2RlKCkgKi8KK0VYVEVSTiBpbnQJY3VycmVudF9zY3JvbGxiYXI7CitFWFRFUk4gbG9uZ191CXNjcm9sbGJhcl92YWx1ZTsKKworLyogZm91bmQgIi1ydiIgb3IgIi1yZXZlcnNlIiBpbiBjb21tYW5kIGxpbmUgYXJncyAqLworRVhURVJOIGludAlmb3VuZF9yZXZlcnNlX2FyZyBJTklUKD0gRkFMU0UpOworCisvKiAiLWZuIiBvciAiLWZvbnQiIGNvbW1hbmQgbGluZSBhcmd1bWVudCAqLworRVhURVJOIGNoYXIJKmZvbnRfYXJndW1lbnQgSU5JVCg9IE5VTEwpOworCisjIGlmZGVmIEZFQVRfR1VJX0dUSworLyogIi1iZyIgb3IgIi1iYWNrZ3JvdW5kIiBjb21tYW5kIGxpbmUgYXJndW1lbnQgKi8KK0VYVEVSTiBjaGFyCSpiYWNrZ3JvdW5kX2FyZ3VtZW50IElOSVQoPSBOVUxMKTsKKworLyogIi1mZyIgb3IgIi1mb3JlZ3JvdW5kIiBjb21tYW5kIGxpbmUgYXJndW1lbnQgKi8KK0VYVEVSTiBjaGFyCSpmb3JlZ3JvdW5kX2FyZ3VtZW50IElOSVQoPSBOVUxMKTsKKyMgZW5kaWYKKworLyoKKyAqIFdoaWxlIGV4ZWN1dGluZyBleHRlcm5hbCBjb21tYW5kcyBvciBpbiBFeCBtb2RlLCBzaG91bGQgbm90IGluc2VydCBHVUkKKyAqIGV2ZW50cyBpbiB0aGUgaW5wdXQgYnVmZmVyOiBTZXQgaG9sZF9ndWlfZXZlbnRzIHRvIG5vbi16ZXJvLgorICovCitFWFRFUk4gaW50CWhvbGRfZ3VpX2V2ZW50cyBJTklUKD0gMCk7CisKKy8qCisgKiBXaGVuIHJlc2l6aW5nIHRoZSBzaGVsbCBpcyBwb3N0cG9uZWQsIHJlbWVtYmVyIHRoZSBuZXcgc2l6ZSwgYW5kIGNhbGwKKyAqIGd1aV9yZXNpemVfc2hlbGwoKSBsYXRlci4KKyAqLworRVhURVJOIGludAluZXdfcGl4ZWxfd2lkdGggSU5JVCg9IDApOworRVhURVJOIGludAluZXdfcGl4ZWxfaGVpZ2h0IElOSVQoPSAwKTsKKworLyogV2luZG93IHBvc2l0aW9uIGZyb20gIjp3aW5wb3MiLCB0byBiZSB1c2VkIHdoZW4gb3BlbmluZyB0aGUgR1VJIHdpbmRvdy4gKi8KK0VYVEVSTiBpbnQJZ3VpX3dpbl94IElOSVQoPSAtMSk7CitFWFRFUk4gaW50CWd1aV93aW5feSBJTklUKD0gLTEpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorRVhURVJOIFZpbUNsaXBib2FyZCBjbGlwX3N0YXI7CS8qIFBSSU1BUlkgc2VsZWN0aW9uIGluIFgxMSAqLworIyBpZmRlZiBGRUFUX1gxMQorRVhURVJOIFZpbUNsaXBib2FyZCBjbGlwX3BsdXM7CS8qIENMSVBCT0FSRCBzZWxlY3Rpb24gaW4gWDExICovCisjIGVsc2UKKyMgIGRlZmluZSBjbGlwX3BsdXMgY2xpcF9zdGFyCS8qIHRoZXJlIGlzIG9ubHkgb25lIGNsaXBib2FyZCAqLworIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBBbGwgd2luZG93cyBhcmUgbGlua2VkIGluIGEgbGlzdC4gZmlyc3R3aW4gcG9pbnRzIHRvIHRoZSBmaXJzdCBlbnRyeSwKKyAqIGxhc3R3aW4gdG8gdGhlIGxhc3QgZW50cnkgKGNhbiBiZSB0aGUgc2FtZSBhcyBmaXJzdHdpbikgYW5kIGN1cndpbiB0byB0aGUKKyAqIGN1cnJlbnRseSBhY3RpdmUgd2luZG93LgorICogV2l0aG91dCB0aGUgRkVBVF9XSU5ET1dTIHRoZXkgYXJlIGFsbCBlcXVhbC4KKyAqLworI2lmZGVmIEZFQVRfV0lORE9XUworRVhURVJOIHdpbl9UCSpmaXJzdHdpbjsJCS8qIGZpcnN0IHdpbmRvdyAqLworRVhURVJOIHdpbl9UCSpsYXN0d2luOwkJLyogbGFzdCB3aW5kb3cgKi8KK0VYVEVSTiB3aW5fVAkqcHJldndpbiBJTklUKD0gTlVMTCk7CS8qIHByZXZpb3VzIHdpbmRvdyAqLworIyBkZWZpbmUgV19ORVhUKHdwKSAoKHdwKS0+d19uZXh0KQorIyBkZWZpbmUgRk9SX0FMTF9XSU5ET1dTKHdwKSBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKyNlbHNlCisjIGRlZmluZSBmaXJzdHdpbiBjdXJ3aW4KKyMgZGVmaW5lIGxhc3R3aW4gY3Vyd2luCisjIGRlZmluZSBXX05FWFQod3ApIE5VTEwKKyMgZGVmaW5lIEZPUl9BTExfV0lORE9XUyh3cCkgd3AgPSBjdXJ3aW47CisjZW5kaWYKK0VYVEVSTiB3aW5fVAkqY3Vyd2luOwkvKiBjdXJyZW50bHkgYWN0aXZlIHdpbmRvdyAqLworCisvKgorICogVGhlIHdpbmRvdyBsYXlvdXQgaXMga2VwdCBpbiBhIHRyZWUgb2YgZnJhbWVzLiAgdG9wZnJhbWUgcG9pbnRzIHRvIHRoZSB0b3AKKyAqIG9mIHRoZSB0cmVlLgorICovCitFWFRFUk4gZnJhbWVfVAkqdG9wZnJhbWU7CS8qIHRvcCBvZiB0aGUgd2luZG93IGZyYW1lIHRyZWUgKi8KKworLyoKKyAqIEFsbCBidWZmZXJzIGFyZSBsaW5rZWQgaW4gYSBsaXN0LiAnZmlyc3RidWYnIHBvaW50cyB0byB0aGUgZmlyc3QgZW50cnksCisgKiAnbGFzdGJ1ZicgdG8gdGhlIGxhc3QgZW50cnkgYW5kICdjdXJidWYnIHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIGJ1ZmZlci4KKyAqLworRVhURVJOIGJ1Zl9UCSpmaXJzdGJ1ZiBJTklUKD0gTlVMTCk7CS8qIGZpcnN0IGJ1ZmZlciAqLworRVhURVJOIGJ1Zl9UCSpsYXN0YnVmIElOSVQoPSBOVUxMKTsJLyogbGFzdCBidWZmZXIgKi8KK0VYVEVSTiBidWZfVAkqY3VyYnVmIElOSVQoPSBOVUxMKTsJLyogY3VycmVudGx5IGFjdGl2ZSBidWZmZXIgKi8KKworLyoKKyAqIExpc3Qgb2YgZmlsZXMgYmVpbmcgZWRpdGVkIChnbG9iYWwgYXJndW1lbnQgbGlzdCkuICBjdXJ3aW4tPndfYWxpc3QgcG9pbnRzCisgKiB0byB0aGlzIHdoZW4gdGhlIHdpbmRvdyBpcyB1c2luZyB0aGUgZ2xvYmFsIGFyZ3VtZW50IGxpc3QuCisgKi8KK0VYVEVSTiBhbGlzdF9UCWdsb2JhbF9hbGlzdDsJLyogZ2xvYmFsIGFyZ3VtZW50IGxpc3QgKi8KK0VYVEVSTiBpbnQJYXJnX2hhZF9sYXN0IElOSVQoPSBGQUxTRSk7IC8qIGFjY2Vzc2VkIGxhc3QgZmlsZSBpbgorCQkJCQkgICAgICAgZ2xvYmFsX2FsaXN0ICovCisKK0VYVEVSTiBpbnQJcnVfY29sOwkJLyogY29sdW1uIGZvciBydWxlciAqLworI2lmZGVmIEZFQVRfU1RMX09QVAorRVhURVJOIGludAlydV93aWQ7CQkvKiAncnVsZXJmbXQnIHdpZHRoIG9mIHJ1bGVyIHdoZW4gbm9uLXplcm8gKi8KKyNlbmRpZgorRVhURVJOIGludAlzY19jb2w7CQkvKiBjb2x1bW4gZm9yIHNob3duIGNvbW1hbmQgKi8KKworI2lmZGVmIFRFTVBESVJOQU1FUworRVhURVJOIGNoYXJfdQkqdmltX3RlbXBkaXIgSU5JVCg9IE5VTEwpOyAvKiBOYW1lIG9mIFZpbSdzIG93biB0ZW1wIGRpci4KKwkJCQkJICAgICAgRW5kcyBpbiBhIHNsYXNoLiAqLworI2VuZGlmCisKKy8qCisgKiBXaGVuIHN0YXJ0aW5nIG9yIGV4aXRpbmcgc29tZSB0aGluZ3MgYXJlIGRvbmUgZGlmZmVyZW50bHkgKGUuZy4gc2NyZWVuCisgKiB1cGRhdGluZykuCisgKi8KK0VYVEVSTiBpbnQJc3RhcnRpbmcgSU5JVCg9IE5PX1NDUkVFTik7CisJCQkJLyogZmlyc3QgTk9fU0NSRUVOLCB0aGVuIE5PX0JVRkZFUlMgYW5kIHRoZW4KKwkJCQkgKiBzZXQgdG8gMCB3aGVuIHN0YXJ0aW5nIHVwIGZpbmlzaGVkICovCitFWFRFUk4gaW50CWV4aXRpbmcgSU5JVCg9IEZBTFNFKTsKKwkJCQkvKiBUUlVFIHdoZW4gYWJhbmRvbmluZyBWaW0gKi8KK0VYVEVSTiBpbnQJZnVsbF9zY3JlZW4gSU5JVCg9IEZBTFNFKTsKKwkJCQkvKiBUUlVFIHdoZW4gZG9pbmcgZnVsbC1zY3JlZW4gb3V0cHV0CisJCQkJICogb3RoZXJ3aXNlIG9ubHkgd3JpdGluZyBzb21lIG1lc3NhZ2VzICovCisKK0VYVEVSTiBpbnQJcmVzdHJpY3RlZCBJTklUKD0gRkFMU0UpOworCQkJCS8qIFRSVUUgd2hlbiBzdGFydGVkIGFzICJydmltIiAqLworRVhURVJOIGludAlzZWN1cmUgSU5JVCg9IEZBTFNFKTsKKwkJCQkvKiBub24temVybyB3aGVuIG9ubHkgInNhZmUiIGNvbW1hbmRzIGFyZQorCQkJCSAqIGFsbG93ZWQsIGUuZy4gd2hlbiBzb3VyY2luZyAuZXhyYyBvciAudmltcmMKKwkJCQkgKiBpbiBjdXJyZW50IGRpcmVjdG9yeSAqLworCisjaWZkZWYgRkVBVF9FVkFMCisjIGRlZmluZSBIQVZFX1NBTkRCT1gKK0VYVEVSTiBpbnQJc2FuZGJveCBJTklUKD0gMCk7CisJCQkJLyogbm9uLXplcm8gd2hlbiBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gaW4gYQorCQkJCSAqICJzYW5kYm94Ii4gIE5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGUKKwkJCQkgKiBidWZmZXIuICovCisjZW5kaWYKKworRVhURVJOIGludAlzaWxlbnRfbW9kZSBJTklUKD0gRkFMU0UpOworCQkJCS8qIHNldCB0byBUUlVFIHdoZW4gIi1zIiBjb21tYW5kbGluZSBhcmd1bWVudAorCQkJCSAqIHVzZWQgZm9yIGV4ICovCisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorRVhURVJOIHBvc19UCVZJc3VhbDsJCS8qIHN0YXJ0IHBvc2l0aW9uIG9mIGFjdGl2ZSBWaXN1YWwgc2VsZWN0aW9uICovCitFWFRFUk4gaW50CVZJc3VhbF9hY3RpdmUgSU5JVCg9IEZBTFNFKTsKKwkJCQkvKiB3aGV0aGVyIFZpc3VhbCBtb2RlIGlzIGFjdGl2ZSAqLworRVhURVJOIGludAlWSXN1YWxfc2VsZWN0IElOSVQoPSBGQUxTRSk7CisJCQkJLyogd2hldGhlciBTZWxlY3QgbW9kZSBpcyBhY3RpdmUgKi8KK0VYVEVSTiBpbnQJVklzdWFsX3Jlc2VsZWN0OworCQkJCS8qIHdoZXRoZXIgdG8gcmVzdGFydCB0aGUgc2VsZWN0aW9uIGFmdGVyIGEKKwkJCQkgKiBTZWxlY3QgbW9kZSBtYXBwaW5nIG9yIG1lbnUgKi8KKworRVhURVJOIGludAlWSXN1YWxfbW9kZSBJTklUKD0gJ3YnKTsKKwkJCQkvKiB0eXBlIG9mIFZpc3VhbCBtb2RlICovCisKK0VYVEVSTiBpbnQJcmVkb19WSXN1YWxfYnVzeSBJTklUKD0gRkFMU0UpOworCQkJCS8qIFRSVUUgd2hlbiByZWRvaW5nIFZpc3VhbCAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX01PVVNFCisvKgorICogV2hlbiBwYXN0aW5nIHRleHQgd2l0aCB0aGUgbWlkZGxlIG1vdXNlIGJ1dHRvbiBpbiB2aXN1YWwgbW9kZSB3aXRoCisgKiByZXN0YXJ0X2VkaXQgc2V0LCByZW1lbWJlciB3aGVyZSBpdCBzdGFydGVkIHNvIHdlIGNhbiBzZXQgSW5zc3RhcnQuCisgKi8KK0VYVEVSTiBwb3NfVAl3aGVyZV9wYXN0ZV9zdGFydGVkOworI2VuZGlmCisKKy8qCisgKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBtYWtlIGF1dG8taW5kZW50IHdvcmsgcmlnaHQgb24gbGluZXMgd2hlcmUgb25seSBhCisgKiA8UkVUVVJOPiBvciA8RVNDPiBpcyB0eXBlZC4gSXQgaXMgc2V0IHdoZW4gYW4gYXV0by1pbmRlbnQgaXMgZG9uZSwgYW5kCisgKiByZXNldCB3aGVuIGFueSBvdGhlciBlZGl0aW5nIGlzIGRvbmUgb24gdGhlIGxpbmUuIElmIGFuIDxFU0M+IG9yIDxSRVRVUk4+CisgKiBpcyByZWNlaXZlZCwgYW5kIGRpZF9haSBpcyBUUlVFLCB0aGUgbGluZSBpcyB0cnVuY2F0ZWQuCisgKi8KK0VYVEVSTiBpbnQgICAgIGRpZF9haSBJTklUKD0gRkFMU0UpOworCisvKgorICogQ29sdW1uIG9mIGZpcnN0IGNoYXIgYWZ0ZXIgYXV0b2luZGVudC4gIDAgd2hlbiBubyBhdXRvaW5kZW50IGRvbmUuICBVc2VkCisgKiB3aGVuICdiYWNrc3BhY2UnIGlzIDAsIHRvIGF2b2lkIGJhY2tzcGFjaW5nIG92ZXIgYXV0b2luZGVudC4KKyAqLworRVhURVJOIGNvbG5yX1QJYWlfY29sIElOSVQoPSAwKTsKKworI2lmZGVmIEZFQVRfQ09NTUVOVFMKKy8qCisgKiBUaGlzIGlzIGEgY2hhcmFjdGVyIHdoaWNoIHdpbGwgZW5kIGEgc3RhcnQtbWlkZGxlLWVuZCBjb21tZW50IHdoZW4gdHlwZWQgYXMKKyAqIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gYSBuZXcgbGluZS4gIEl0IGlzIHRha2VuIGZyb20gdGhlIGxhc3QgY2hhcmFjdGVyIG9mCisgKiB0aGUgImVuZCIgY29tbWVudCBsZWFkZXIgd2hlbiB0aGUgQ09NX0FVVE9fRU5EIGZsYWcgaXMgZ2l2ZW4gZm9yIHRoYXQKKyAqIGNvbW1lbnQgZW5kIGluICdjb21tZW50cycuICBJdCBpcyBvbmx5IHZhbGlkIHdoZW4gZGlkX2FpIGlzIFRSVUUuCisgKi8KK0VYVEVSTiBpbnQgICAgIGVuZF9jb21tZW50X3BlbmRpbmcgSU5JVCg9IE5VTCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfU0NST0xMQklORAorLyoKKyAqIFRoaXMgZmxhZyBpcyBzZXQgYWZ0ZXIgYSAiOnN5bmNiaW5kIiB0byBsZXQgdGhlIGNoZWNrX3Njcm9sbGJpbmQoKSBmdW5jdGlvbgorICoga25vdyB0aGF0IGl0IHNob3VsZCBub3QgYXR0ZW1wdCB0byBwZXJmb3JtIHNjcm9sbGJpbmRpbmcgZHVlIHRvIHRoZSBzY3JvbGwKKyAqIHRoYXQgd2FzIGEgcmVzdWx0IG9mIHRoZSAiOnN5bmNiaW5kLiIgKE90aGVyd2lzZSwgY2hlY2tfc2Nyb2xsYmluZCgpIHdpbGwKKyAqIHVuZG8gc29tZSBvZiB0aGUgd29yayBkb25lIGJ5ICI6c3luY2JpbmQuIikgIC1yYWxzdG9uCisgKi8KK0VYVEVSTiBpbnQgICAgIGRpZF9zeW5jYmluZCBJTklUKD0gRkFMU0UpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisvKgorICogVGhpcyBmbGFnIGlzIHNldCB3aGVuIGEgc21hcnQgaW5kZW50IGhhcyBiZWVuIHBlcmZvcm1lZC4gV2hlbiB0aGUgbmV4dCB0eXBlZAorICogY2hhcmFjdGVyIGlzIGEgJ3snIHRoZSBpbnNlcnRlZCB0YWIgd2lsbCBiZSBkZWxldGVkIGFnYWluLgorICovCitFWFRFUk4gaW50CWRpZF9zaSBJTklUKD0gRkFMU0UpOworCisvKgorICogVGhpcyBmbGFnIGlzIHNldCBhZnRlciBhbiBhdXRvIGluZGVudC4gSWYgdGhlIG5leHQgdHlwZWQgY2hhcmFjdGVyIGlzIGEgJ30nCisgKiBvbmUgaW5kZW50IHdpbGwgYmUgcmVtb3ZlZC4KKyAqLworRVhURVJOIGludAljYW5fc2kgSU5JVCg9IEZBTFNFKTsKKworLyoKKyAqIFRoaXMgZmxhZyBpcyBzZXQgYWZ0ZXIgYW4gIk8iIGNvbW1hbmQuIElmIHRoZSBuZXh0IHR5cGVkIGNoYXJhY3RlciBpcyBhICd7JworICogb25lIGluZGVudCB3aWxsIGJlIHJlbW92ZWQuCisgKi8KK0VYVEVSTiBpbnQJY2FuX3NpX2JhY2sgSU5JVCg9IEZBTFNFKTsKKyNlbmRpZgorCitFWFRFUk4gcG9zX1QJc2F2ZWRfY3Vyc29yCQkvKiB3X2N1cnNvciBiZWZvcmUgZm9ybWF0dGluZyB0ZXh0LiAqLworIyBpZmRlZiBET19JTklUCisJPSBJTklUX1BPU19UCisjIGVuZGlmCisJOworCisvKgorICogU3R1ZmYgZm9yIGluc2VydCBtb2RlLgorICovCitFWFRFUk4gcG9zX1QJSW5zc3RhcnQ7CQkvKiBUaGlzIGlzIHdoZXJlIHRoZSBsYXRlc3QKKwkJCQkJICogaW5zZXJ0L2FwcGVuZCBtb2RlIHN0YXJ0ZWQuICovCisjaWZkZWYgRkVBVF9WUkVQTEFDRQorLyoKKyAqIFN0dWZmIGZvciBWUkVQTEFDRSBtb2RlLgorICovCitFWFRFUk4gaW50CW9yaWdfbGluZV9jb3VudCBJTklUKD0gMCk7ICAvKiBMaW5lIGNvdW50IHdoZW4gImdSIiBzdGFydGVkICovCitFWFRFUk4gaW50CXZyX2xpbmVzX2NoYW5nZWQgSU5JVCg9IDApOyAvKiAjTGluZXMgY2hhbmdlZCBieSAiZ1IiIHNvIGZhciAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfWDExKSAmJiBkZWZpbmVkKEZFQVRfWENMSVBCT0FSRCkKKy8qIGFyZ3VtZW50IHRvIFNFVEpNUCgpIGZvciBoYW5kbGluZyBYIElPIGVycm9ycyAqLworRVhURVJOIEpNUF9CVUYgeF9qdW1wX2VudjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NFVEpNUF9IKQorLyoKKyAqIFN0dWZmIGZvciBzZXRqbXAoKSBhbmQgbG9uZ2ptcCgpLgorICogVXNlZCB0byBwcm90ZWN0IGFyZWFzIHdoZXJlIHdlIGNvdWxkIGNyYXNoLgorICovCitFWFRFUk4gSk1QX0JVRiBsY19qdW1wX2VudjsJLyogYXJndW1lbnQgdG8gU0VUSk1QKCkgKi8KKyNpZmRlZiBTSUdIQVNBUkcKK0VYVEVSTiBpbnQgbGNfc2lnbmFsOwkJLyogY2F0Y2hlZCBzaWduYWwgbnVtYmVyLCAwIHdoZW4gbm8gd2FzIHNpZ25hbAorCQkJCSAgIGNhdGNoZWQ7IHVzZWQgZm9yIG1jaF9saWJjYWxsKCkgKi8KKyNlbmRpZgorRVhURVJOIGludCBsY19hY3RpdmUgSU5JVCg9IEZBTFNFKTsgLyogVFJVRSB3aGVuIGxjX2p1bXBfZW52IGlzIHZhbGlkLiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpIHx8IGRlZmluZWQoRkVBVF9QT1NUU0NSSVBUKQorLyoKKyAqIFRoZXNlIGZsYWdzIGFyZSBzZXQgYmFzZWQgdXBvbiAnZmlsZWVuY29kaW5nJy4KKyAqIE5vdGUgdGhhdCAiZW5jX3V0ZjgiIGlzIGFsc28gc2V0IGZvciAidW5pY29kZSIsIGJlY2F1c2UgdGhlIGNoYXJhY3RlcnMgYXJlCisgKiBpbnRlcm5hbGx5IHN0b3JlZCBhcyBVVEYtOCAodG8gYXZvaWQgdHJvdWJsZSB3aXRoIE5VTCBieXRlcykuCisgKi8KKyMgZGVmaW5lIERCQ1NfSlBOCTkzMgkvKiBqYXBhbiAqLworIyBkZWZpbmUgREJDU19KUE5VCTk5MzIJLyogZXVjLWpwICovCisjIGRlZmluZSBEQkNTX0tPUgk5NDkJLyoga29yZWEgKi8KKyMgZGVmaW5lIERCQ1NfS09SVQk5OTQ5CS8qIGV1Yy1rciAqLworIyBkZWZpbmUgREJDU19DSFMJOTM2CS8qIGNoaW5lc2UgKi8KKyMgZGVmaW5lIERCQ1NfQ0hTVQk5OTM2CS8qIGV1Yy1jbiAqLworIyBkZWZpbmUgREJDU19DSFQJOTUwCS8qIHRhaXdhbiAqLworIyBkZWZpbmUgREJDU19DSFRVCTk5NTAJLyogZXVjLXR3ICovCisjIGRlZmluZSBEQkNTXzJCWVRFCTEJLyogMmJ5dGUtICovCisjIGRlZmluZSBEQkNTX0RFQlVHCS0xCisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUJZVEUKK0VYVEVSTiBpbnQJZW5jX2RiY3MgSU5JVCg9IDApOwkJLyogT25lIG9mIERCQ1NfeHh4IHZhbHVlcyBpZgorCQkJCQkJICAgREJDUyBlbmNvZGluZyAqLworRVhURVJOIGludAllbmNfdW5pY29kZSBJTklUKD0gMCk7CS8qIDI6IFVDUy0yIG9yIFVURi0xNiwgNDogVUNTLTQgKi8KK0VYVEVSTiBpbnQJZW5jX3V0ZjggSU5JVCg9IEZBTFNFKTsJCS8qIFVURi04IGVuY29kZWQgVW5pY29kZSAqLworIyBpZmRlZiBXSU4zMjY0CisvKiBDb2RlcGFnZSBuciBvZiAnZW5jb2RpbmcnLiAgTmVnYXRpdmUgbWVhbnMgaXQncyBub3QgYmVlbiBzZXQgeWV0LCB6ZXJvCisgKiBtZWFucyAnZW5jb2RpbmcnIGlzIG5vdCBhIHZhbGlkIGNvZGVwYWdlLiAqLworRVhURVJOIGludAllbmNfY29kZXBhZ2UgSU5JVCg9IC0xKTsKKyMgZW5kaWYKK0VYVEVSTiBpbnQJaGFzX21ieXRlIElOSVQoPSAwKTsJCS8qIGFueSBtdWx0aS1ieXRlIGVuY29kaW5nICovCisKKyNpZiBkZWZpbmVkKFdJTjMyNjQpICYmIGRlZmluZWQoRkVBVF9NQllURSkKK0VYVEVSTiBpbnQJd2lkZV9XaW5kb3dQcm9jIElOSVQoPSBGQUxTRSk7CS8qIHVzZSB3aWRlIFdpbmRvd1Byb2MoKSAqLworI2VuZGlmCisKKy8qCisgKiBUbyBzcGVlZCB1cCBCWVRFTEVOKCkgd2UgZmlsbCBhIHRhYmxlIHdpdGggdGhlIGJ5dGUgbGVuZ3RocyB3aGVuZXZlcgorICogZW5jX3V0Zjggb3IgZW5jX2RiY3MgY2hhbmdlcy4KKyAqLworRVhURVJOIGNoYXIJbWJfYnl0ZWxlbl90YWJbMjU2XTsKKworLyogVmFyaWFibGVzIHRoYXQgdGVsbCB3aGF0IGNvbnZlcnNpb24gaXMgdXNlZCBmb3Iga2V5Ym9hcmQgaW5wdXQgYW5kIGRpc3BsYXkKKyAqIG91dHB1dC4gKi8KK0VYVEVSTiB2aW1jb252X1QgaW5wdXRfY29udjsJCQkvKiB0eXBlIG9mIGlucHV0IGNvbnZlcnNpb24gKi8KK0VYVEVSTiB2aW1jb252X1Qgb3V0cHV0X2NvbnY7CQkJLyogdHlwZSBvZiBvdXRwdXQgY29udmVyc2lvbiAqLworCisvKgorICogRnVuY3Rpb24gcG9pbnRlcnMsIHVzZWQgdG8gcXVpY2tseSBnZXQgdG8gdGhlIHJpZ2h0IGZ1bmN0aW9uLiAgRWFjaCBoYXMKKyAqIHRocmVlIHBvc3NpYmxlIHZhbHVlczogbGF0aW5fICg4LWJpdCksIHV0ZmNfIG9yIHV0Zl8gKHV0Zi04KSBhbmQgZGJjc18KKyAqIChEQkNTKS4KKyAqIFRoZSB2YWx1ZSBpcyBzZXQgaW4gbWJfaW5pdCgpOworICovCitFWFRFUk4gaW50ICgqbWJfcHRyMmxlbl9jaGVjaykgX19BUkdTKChjaGFyX3UgKnApKSBJTklUKD0gbGF0aW5fcHRyMmxlbl9jaGVjayk7CitFWFRFUk4gaW50ICgqbWJfY2hhcjJsZW4pIF9fQVJHUygoaW50IGMpKSBJTklUKD0gbGF0aW5fY2hhcjJsZW4pOworRVhURVJOIGludCAoKm1iX2NoYXIyYnl0ZXMpIF9fQVJHUygoaW50IGMsIGNoYXJfdSAqYnVmKSkgSU5JVCg9IGxhdGluX2NoYXIyYnl0ZXMpOworRVhURVJOIGludCAoKm1iX3B0cjJjZWxscykgX19BUkdTKChjaGFyX3UgKnApKSBJTklUKD0gbGF0aW5fcHRyMmNlbGxzKTsKK0VYVEVSTiBpbnQgKCptYl9jaGFyMmNlbGxzKSBfX0FSR1MoKGludCBjKSkgSU5JVCg9IGxhdGluX2NoYXIyY2VsbHMpOworRVhURVJOIGludCAoKm1iX29mZjJjZWxscykgX19BUkdTKCh1bnNpZ25lZCBvZmYpKSBJTklUKD0gbGF0aW5fb2ZmMmNlbGxzKTsKK0VYVEVSTiBpbnQgKCptYl9wdHIyY2hhcikgX19BUkdTKChjaGFyX3UgKnApKSBJTklUKD0gbGF0aW5fcHRyMmNoYXIpOworRVhURVJOIGludCAoKm1iX2hlYWRfb2ZmKSBfX0FSR1MoKGNoYXJfdSAqYmFzZSwgY2hhcl91ICpwKSkgSU5JVCg9IGxhdGluX2hlYWRfb2ZmKTsKKworIyBpZiBkZWZpbmVkKFVTRV9JQ09OVikgJiYgZGVmaW5lZChEWU5BTUlDX0lDT05WKQorLyogUG9pbnRlcnMgdG8gZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgdG8gYmUgbG9hZGVkIGF0IHJ1bnRpbWUgKi8KK0VYVEVSTiBzaXplX3QgKCppY29udikgKGljb252X3QgY2QsIGNvbnN0IGNoYXIgKippbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOworRVhURVJOIGljb252X3QgKCppY29udl9vcGVuKSAoY29uc3QgY2hhciAqdG9jb2RlLCBjb25zdCBjaGFyICpmcm9tY29kZSk7CitFWFRFUk4gaW50ICgqaWNvbnZfY2xvc2UpIChpY29udl90IGNkKTsKK0VYVEVSTiBpbnQgKCppY29udmN0bCkgKGljb252X3QgY2QsIGludCByZXF1ZXN0LCB2b2lkICphcmd1bWVudCk7CitFWFRFUk4gaW50KiAoKmljb252X2Vycm5vKSAodm9pZCk7CisjIGVuZGlmCisKKyNlbmRpZiAvKiBGRUFUX01CWVRFICovCisKKyNpZmRlZiBGRUFUX1hJTQorIyBpZmRlZiBGRUFUX0dVSV9HVEsKKyMgIGlmZGVmIEhBVkVfR1RLMgorRVhURVJOIEd0a0lNQ29udGV4dAkqeGljIElOSVQoPSBOVUxMKTsKKyMgIGVsc2UKK0VYVEVSTiBHZGtJQ0F0dHIJKnhpY19hdHRyIElOSVQoPSBOVUxMKTsKK0VYVEVSTiBHZGtJQwkJKnhpYyBJTklUKD0gTlVMTCk7CitFWFRFUk4gY2hhcgkJKmRyYXdfZmVlZGJhY2sgSU5JVCg9IE5VTEwpOworIyAgZW5kaWYKKy8qCisgKiBTdGFydCBhbmQgZW5kIGNvbHVtbiBvZiB0aGUgcHJlZWRpdCBhcmVhIGluIHZpcnR1YWwgY29sdW1ucyBmcm9tIHRoZSBzdGFydAorICogb2YgdGhlIHRleHQgbGluZS4gIFdoZW4gdGhlcmUgaXMgbm8gcHJlZWRpdCBhcmVhIHRoZXkgYXJlIHNldCB0byBNQVhDT0wuCisgKiAicHJlZWRpdF9lbmRfY29sIiBpcyBuZWVkZWQgZm9yIGNvbG9yaW5nIHRoZSBwcmVlZGl0ZWQgc3RyaW5nLiAgRHJhd2luZyB0aGUKKyAqIGNvbG9yIGJldHdlZW4gInByZWVkaXRfc3RhcnRfY29sIiBhbmQgY3VycG9zIGRpZCBub3Qgd29yaywgYmVjYXVzZSBzb21lIFhJTQorICogc2V0IHRoZSBjdXJzb3IgcG9zaXRpb24gdG8gdGhlIGZpcnN0IGNoYXIgb2YgdGhlIHN0cmluZy4KKyAqLworRVhURVJOIGNvbG5yX1QJCXByZWVkaXRfc3RhcnRfY29sIElOSVQoPSBNQVhDT0wpOworRVhURVJOIGNvbG5yX1QJCXByZWVkaXRfZW5kX2NvbCBJTklUKD0gTUFYQ09MKTsKKworLyogInhpbV9jaGFuZ2VkX3doaWxlX3ByZWVkaXRpbmciIGlzIHNldCB3aGVuIGNoYW5nZWQoKSBjYW4gc2V0IHRoZSAnbW9kaWZpZWQnCisgKiBmbGFnIGV2ZW4gd2hpbGUgcHJlZWRpdGluZy4gKi8KK0VYVEVSTiBpbnQJCXhpbV9jaGFuZ2VkX3doaWxlX3ByZWVkaXRpbmcgSU5JVCg9IEZBTFNFKTsKKyMgZWxzZQorRVhURVJOIFhJQwkJeGljIElOSVQoPSBOVUxMKTsKKyMgZW5kaWYKK0VYVEVSTiBndWljb2xvcl9UCXhpbV9mZ19jb2xvciBJTklUKD0gSU5WQUxDT0xPUik7CitFWFRFUk4gZ3VpY29sb3JfVAl4aW1fYmdfY29sb3IgSU5JVCg9IElOVkFMQ09MT1IpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0hBTkdVTElOCitFWFRFUk4gaW50CQljb21wb3NpbmdfaGFuZ3VsIElOSVQoPSAwKTsKK0VYVEVSTiBjaGFyX3UJCWNvbXBvc2luZ19oYW5ndWxfYnVmZmVyWzVdOworI2VuZGlmCisKKy8qCisgKiAiU3RhdGUiIGlzIHRoZSBtYWluIHN0YXRlIG9mIFZpbS4KKyAqIFRoZXJlIGFyZSBvdGhlciB2YXJpYWJsZXMgdGhhdCBtb2RpZnkgdGhlIHN0YXRlOgorICogIlZpc3VhbF9tb2RlIiAgICBXaGVuIFN0YXRlIGlzIE5PUk1BTCBvciBJTlNFUlQuCisgKiAiZmluaXNoX29wIgkgICAgV2hlbiBTdGF0ZSBpcyBOT1JNQUwsIGFmdGVyIHR5cGluZyB0aGUgb3BlcmF0b3IgYW5kIGJlZm9yZQorICoJCSAgICB0eXBpbmcgdGhlIG1vdGlvbiBjb21tYW5kLgorICovCitFWFRFUk4gaW50CVN0YXRlIElOSVQoPSBOT1JNQUwpOwkvKiBUaGlzIGlzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQorCQkJCQkgKiBjb21tYW5kIGludGVycHJldGVyLiAqLworCitFWFRFUk4gaW50CWZpbmlzaF9vcCBJTklUKD0gRkFMU0UpOy8qIFRSVUUgd2hpbGUgYW4gb3BlcmF0b3IgaXMgcGVuZGluZyAqLworCisvKgorICogZXggbW9kZSAoUSkgc3RhdGUKKyAqLworRVhURVJOIGludCBleG1vZGVfYWN0aXZlIElOSVQoPSAwKTsJLyogemVybywgRVhNT0RFX05PUk1BTCBvciBFWE1PREVfVklNICovCitFWFRFUk4gaW50IGV4X25vX3JlcHJpbnQgSU5JVCg9IEZBTFNFKTsgLyogbm8gbmVlZCB0byBwcmludCBhZnRlciB6IG9yIHAgKi8KKworRVhURVJOIGludAlSZWNvcmRpbmcgSU5JVCg9IEZBTFNFKTsvKiBUUlVFIHdoZW4gcmVjb3JkaW5nIGludG8gYSByZWcuICovCitFWFRFUk4gaW50CUV4ZWNfcmVnIElOSVQoPSBGQUxTRSk7CS8qIFRSVUUgd2hlbiBleGVjdXRpbmcgYSByZWdpc3RlciAqLworCitFWFRFUk4gaW50CW5vX21hcHBpbmcgSU5JVCg9IEZBTFNFKTsgICAvKiBjdXJyZW50bHkgbm8gbWFwcGluZyBhbGxvd2VkICovCitFWFRFUk4gaW50CW5vX3plcm9fbWFwcGluZyBJTklUKD0gMCk7ICAvKiBtYXBwaW5nIHplcm8gbm90IGFsbG93ZWQgKi8KK0VYVEVSTiBpbnQJYWxsb3dfa2V5cyBJTklUKD0gRkFMU0UpOyAgIC8qIGFsbG93IGtleSBjb2RlcyB3aGVuIG5vX21hcHBpbmcKKwkJCQkJICAgICAqIGlzIHNldCAqLworRVhURVJOIGludAlub191X3N5bmMgSU5JVCg9IDApOwkvKiBEb24ndCBjYWxsIHVfc3luYygpICovCisKK0VYVEVSTiBpbnQJcmVzdGFydF9lZGl0IElOSVQoPSAwKTsJLyogY2FsbCBlZGl0IHdoZW4gbmV4dCBjbWQgZmluaXNoZWQgKi8KK0VYVEVSTiBpbnQJYXJyb3dfdXNlZDsJCS8qIE5vcm1hbGx5IEZBTFNFLCBzZXQgdG8gVFJVRSBhZnRlcgorCQkJCQkgKiBoaXR0aW5nIGN1cnNvciBrZXkgaW4gaW5zZXJ0IG1vZGUuCisJCQkJCSAqIFVzZWQgYnkgdmdldG9ycGVlaygpIHRvIGRlY2lkZSB3aGVuCisJCQkJCSAqIHRvIGNhbGwgdV9zeW5jKCkgKi8KKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKK0VYVEVSTiBjaGFyX3UJKmVkaXRfc3VibW9kZSBJTklUKD0gTlVMTCk7IC8qIG1zZyBmb3IgQ1RSTC1YIHN1Ym1vZGUgKi8KK0VYVEVSTiBjaGFyX3UJKmVkaXRfc3VibW9kZV9wcmUgSU5JVCg9IE5VTEwpOyAvKiBwcmVwZW5kZWQgdG8gZWRpdF9zdWJtb2RlICovCitFWFRFUk4gY2hhcl91CSplZGl0X3N1Ym1vZGVfZXh0cmEgSU5JVCg9IE5VTEwpOy8qIGFwcGVuZGVkIHRvIGVkaXRfc3VibW9kZSAqLworRVhURVJOIGVudW0gaGxmX3ZhbHVlCWVkaXRfc3VibW9kZV9oaWdobDsgLyogaGlnaGwuIG1ldGhvZCBmb3IgZXh0cmEgaW5mbyAqLworRVhURVJOIGludAljdHJsX3hfbW9kZSBJTklUKD0gMCk7CS8qIFdoaWNoIEN0cmwtWCBtb2RlIGFyZSB3ZSBpbj8gKi8KKyNlbmRpZgorCitFWFRFUk4gaW50CW5vX2FiYnIgSU5JVCg9IFRSVUUpOwkvKiBUUlVFIHdoZW4gbm8gYWJicmV2aWF0aW9ucyBsb2FkZWQgKi8KKyNpZmRlZiBNU0RPUworRVhURVJOIGludAliZWVwX2NvdW50IElOSVQoPSAwKTsJLyogbnIgb2YgYmVlcHMgc2luY2UgbGFzdCBjaGFyIHR5cGVkICovCisjZW5kaWYKKworI2lmZGVmIFVTRV9FWEVfTkFNRQorRVhURVJOIGNoYXJfdQkqZXhlX25hbWU7CQkvKiB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSAqLworI2VuZGlmCisKKyNpZmRlZiBVU0VfT05fRkxZX1NDUk9MTAorRVhURVJOIGludAlkb250X3Njcm9sbCBJTklUKD0gRkFMU0UpOy8qIGRvbid0IHVzZSBzY3JvbGxiYXJzIHdoZW4gVFJVRSAqLworI2VuZGlmCitFWFRFUk4gaW50CW1hcHBlZF9jdHJsX2MgSU5JVCg9IEZBTFNFKTsgLyogQ1RSTC1DIGlzIG1hcHBlZCAqLworRVhURVJOIGludAljdHJsX2NfaW50ZXJydXB0cyBJTklUKD0gVFJVRSk7CS8qIENUUkwtQyBzZXRzIGdvdF9pbnQgKi8KKworRVhURVJOIGNtZG1vZF9UCWNtZG1vZDsJCQkvKiBFeCBjb21tYW5kIG1vZGlmaWVycyAqLworCitFWFRFUk4gaW50CW1zZ19zaWxlbnQgSU5JVCg9IDApOwkvKiBkb24ndCBwcmludCBtZXNzYWdlcyAqLworRVhURVJOIGludAllbXNnX3NpbGVudCBJTklUKD0gMCk7CS8qIGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzICovCitFWFRFUk4gaW50CWNtZF9zaWxlbnQgSU5JVCg9IEZBTFNFKTsgLyogZG9uJ3QgZWNobyB0aGUgY29tbWFuZCBsaW5lICovCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCitFWFRFUk4gaW50CXN3YXBfZXhpc3RzX2FjdGlvbiBJTklUKD0gMCk7CS8qIHVzZSBkaWFsb2cgd2hlbiBzd2FwIGZpbGUKKwkJCQkJCSAgIGFscmVhZHkgZXhpc3RzICovCisjZW5kaWYKKworRVhURVJOIGNoYXJfdQkqSU9idWZmOwkJLyogc3ByaW50ZidzIGFyZSBkb25lIGluIHRoaXMgYnVmZmVyLAorCQkJCQkgICBzaXplIGlzIElPU0laRSAqLworRVhURVJOIGNoYXJfdQkqTmFtZUJ1ZmY7CQkvKiBmaWxlIG5hbWVzIGFyZSBleHBhbmRlZCBpbiB0aGlzCisJCQkJCSAqIGJ1ZmZlciwgc2l6ZSBpcyBNQVhQQVRITCAqLworRVhURVJOIGNoYXJfdQltc2dfYnVmW01TR19CVUZfTEVOXTsJLyogc21hbGwgYnVmZmVyIGZvciBtZXNzYWdlcyAqLworCisvKiBXaGVuIG5vbi16ZXJvLCBwb3N0cG9uZSByZWRyYXdpbmcuICovCitFWFRFUk4gaW50CVJlZHJhd2luZ0Rpc2FibGVkIElOSVQoPSAwKTsKKworRVhURVJOIGludAlyZWFkb25seW1vZGUgSU5JVCg9IEZBTFNFKTsgLyogU2V0IHRvIFRSVUUgZm9yICJ2aWV3IiAqLworRVhURVJOIGludAlyZWNvdmVyeW1vZGUgSU5JVCg9IEZBTFNFKTsgLyogU2V0IHRvIFRSVUUgZm9yICItciIgb3B0aW9uICovCisKK0VYVEVSTiBzdHJ1Y3QgYnVmZmhlYWRlciBzdHVmZmJ1ZmYJLyogc3R1ZmYgYnVmZmVyICovCisjaWZkZWYgRE9fSU5JVAorCQkgICAgPSB7e05VTEwsIHtOVUx9fSwgTlVMTCwgMCwgMH0KKyNlbmRpZgorCQkgICAgOworRVhURVJOIHR5cGVidWZfVCB0eXBlYnVmCQkvKiB0eXBlYWhlYWQgYnVmZmVyICovCisjaWZkZWYgRE9fSU5JVAorCQkgICAgPSB7TlVMTCwgTlVMTH0KKyNlbmRpZgorCQkgICAgOworI2lmZGVmIEZFQVRfRVhfRVhUUkEKK0VYVEVSTiBpbnQJZXhfbm9ybWFsX2J1c3kgSU5JVCg9IDApOyAvKiByZWN1cnNpdmVuZXMgb2YgZXhfbm9ybWFsKCkgKi8KKyNlbmRpZgorRVhURVJOIGludAlzdG9wX2luc2VydF9tb2RlOwkvKiBmb3IgIjpzdG9waW5zZXJ0IiBhbmQgJ2luc2VydG1vZGUnICovCisKK0VYVEVSTiBpbnQJS2V5VHlwZWQ7CQkvKiBUUlVFIGlmIHVzZXIgdHlwZWQgY3VycmVudCBjaGFyICovCitFWFRFUk4gaW50CUtleVN0dWZmZWQ7CQkvKiBUUlVFIGlmIGN1cnJlbnQgY2hhciBmcm9tIHN0dWZmYnVmICovCisjaWZkZWYgVVNFX0lNX0NPTlRST0wKK0VYVEVSTiBpbnQJdmdldGNfaW1fYWN0aXZlOwkvKiBJbnB1dCBNZXRob2Qgd2FzIGFjdGl2ZSBmb3IgbGFzdAorCQkJCQkgICBjaGFyYWN0ZXIgb2J0YWluZWQgZnJvbSB2Z2V0YygpICovCisjZW5kaWYKK0VYVEVSTiBpbnQJbWFwdGljayBJTklUKD0gMCk7CS8qIHRpY2sgZm9yIGVhY2ggbm9uLW1hcHBlZCBjaGFyICovCisKK0VYVEVSTiBjaGFyX3UJY2hhcnRhYlsyNTZdOwkJLyogdGFibGUgdXNlZCBpbiBjaGFyc2V0LmM7IFNlZQorCQkJCQkgICBpbml0X2NoYXJ0YWIoKSBmb3IgZXhwbGFuYXRpb24gKi8KKworRVhURVJOIGludAltdXN0X3JlZHJhdyBJTklUKD0gMCk7CSAgICAvKiB0eXBlIG9mIHJlZHJhdyBuZWNlc3NhcnkgKi8KK0VYVEVSTiBpbnQJc2tpcF9yZWRyYXcgSU5JVCg9IEZBTFNFKTsgIC8qIHNraXAgcmVkcmF3IG9uY2UgKi8KK0VYVEVSTiBpbnQJZG9fcmVkcmF3IElOSVQoPSBGQUxTRSk7ICAgIC8qIGV4dHJhIHJlZHJhdyBvbmNlICovCisKK0VYVEVSTiBpbnQJbmVlZF9oaWdobGlnaHRfY2hhbmdlZCBJTklUKD0gVFJVRSk7CitFWFRFUk4gY2hhcl91CSp1c2VfdmltaW5mbyBJTklUKD0gTlVMTCk7ICAvKiBuYW1lIG9mIHZpbWluZm8gZmlsZSB0byB1c2UgKi8KKworI2RlZmluZSBOU0NSSVBUIDE1CitFWFRFUk4gRklMRQkqc2NyaXB0aW5bTlNDUklQVF07CSAgICAvKiBzdHJlYW1zIHRvIHJlYWQgc2NyaXB0IGZyb20gKi8KK0VYVEVSTiBpbnQJY3Vyc2NyaXB0IElOSVQoPSAwKTsJICAgIC8qIGluZGV4IGluIHNjcmlwdGluW10gKi8KK0VYVEVSTiBGSUxFCSpzY3JpcHRvdXQgIElOSVQoPSBOVUxMKTsgICAvKiBzdHJlYW0gdG8gd3JpdGUgc2NyaXB0IHRvICovCitFWFRFUk4gaW50CXJlYWRfY21kX2ZkIElOSVQoPSAwKTsJICAgIC8qIGZkIHRvIHJlYWQgY29tbWFuZHMgZnJvbSAqLworCitFWFRFUk4gaW50CWdvdF9pbnQgSU5JVCg9IEZBTFNFKTsJICAgIC8qIHNldCB0byBUUlVFIHdoZW4gaW50ZXJydXB0CisJCQkJCQlzaWduYWwgb2NjdXJyZWQgKi8KKyNpZmRlZiBVU0VfVEVSTV9DT05TT0xFCitFWFRFUk4gaW50CXRlcm1fY29uc29sZSBJTklUKD0gRkFMU0UpOyAvKiBzZXQgdG8gVFJVRSB3aGVuIGNvbnNvbGUgdXNlZCAqLworI2VuZGlmCitFWFRFUk4gaW50CXRlcm1jYXBfYWN0aXZlIElOSVQoPSBGQUxTRSk7CS8qIHNldCBieSBzdGFydHRlcm1jYXAoKSAqLworRVhURVJOIGludAljdXJfdG1vZGUgSU5JVCg9IFRNT0RFX0NPT0spOwkvKiBpbnB1dCB0ZXJtaW5hbCBtb2RlICovCitFWFRFUk4gaW50CWJhbmdyZWRvIElOSVQoPSBGQUxTRSk7CSAgICAvKiBzZXQgdG8gVFJVRSB3aGl0aCAhIGNvbW1hbmQgKi8KK0VYVEVSTiBpbnQJc2VhcmNoY21kbGVuOwkJICAgIC8qIGxlbmd0aCBvZiBwcmV2aW91cyBzZWFyY2ggY21kICovCitFWFRFUk4gaW50CXJlZ19zeW4gSU5JVCg9IDApOwkgICAgLyogdmltX3JlZ2V4ZWMoKSB1c2VkIGZvciBzeW50YXggKi8KKyNpZmRlZiBGRUFUX1NZTl9ITAorRVhURVJOIGludAlyZWdfZG9fZXh0bWF0Y2ggSU5JVCg9IDApOyAgLyogVXNlZCB3aGVuIGNvbXBpbGluZyByZWdleHA6CisJCQkJCSAgICAgKiBSRVhfU0VUIHRvIGFsbG93IFx6XCguLi5cKSwKKwkJCQkJICAgICAqIFJFWF9VU0UgdG8gYWxsb3cgXHpcMSBldCBhbC4gKi8KK0VYVEVSTiByZWdfZXh0bWF0Y2hfVCAqcmVfZXh0bWF0Y2hfaW4gSU5JVCg9IE5VTEwpOyAvKiBVc2VkIGJ5IHZpbV9yZWdleGVjKCk6CisJCQkJCSAgICAgKiBzdHJpbmdzIGZvciBcelwxLi4uXHpcOSAqLworRVhURVJOIHJlZ19leHRtYXRjaF9UICpyZV9leHRtYXRjaF9vdXQgSU5JVCg9IE5VTEwpOyAvKiBTZXQgYnkgdmltX3JlZ2V4ZWMoKQorCQkJCQkgICAgICogdG8gc3RvcmUgXHpcKC4uLlwpIG1hdGNoZXMgKi8KKyNlbmRpZgorCitFWFRFUk4gaW50CWRpZF9vdXRvZm1lbV9tc2cgSU5JVCg9IEZBTFNFKTsKKwkJCQkJICAgIC8qIHNldCBhZnRlciBvdXQgb2YgbWVtb3J5IG1zZyAqLworRVhURVJOIGludAlkaWRfc3dhcHdyaXRlX21zZyBJTklUKD0gRkFMU0UpOworCQkJCQkgICAgLyogc2V0IGFmdGVyIHN3YXAgd3JpdGUgZXJyb3IgbXNnICovCitFWFRFUk4gaW50CXVuZG9fb2ZmIElOSVQoPSBGQUxTRSk7CSAgICAvKiB1bmRvIHN3aXRjaGVkIG9mZiBmb3Igbm93ICovCitFWFRFUk4gaW50CWdsb2JhbF9idXN5IElOSVQoPSAwKTsJICAgIC8qIHNldCB3aGVuIDpnbG9iYWwgaXMgZXhlY3V0aW5nICovCitFWFRFUk4gaW50CWxpc3RjbWRfYnVzeSBJTklUKD0gRkFMU0UpOyAvKiBzZXQgd2hlbiA6YXJnZG8sIDp3aW5kbyBvcgorCQkJCQkgICAgICAgOmJ1ZmRvIGlzIGV4ZWN1dGluZyAqLworRVhURVJOIGludAluZWVkX3N0YXJ0X2luc2VydG1vZGUgSU5JVCg9IEZBTFNFKTsKKwkJCQkJICAgIC8qIHN0YXJ0IGluc2VydCBtb2RlIHNvb24gKi8KK0VYVEVSTiBjaGFyX3UJKmxhc3RfY21kbGluZSBJTklUKD0gTlVMTCk7IC8qIGxhc3QgY29tbWFuZCBsaW5lIChmb3IgIjopICovCitFWFRFUk4gY2hhcl91CSpyZXBlYXRfY21kbGluZSBJTklUKD0gTlVMTCk7IC8qIGNvbW1hbmQgbGluZSBmb3IgIi4iICovCisjaWZkZWYgRkVBVF9DTURISVNUCitFWFRFUk4gY2hhcl91CSpuZXdfbGFzdF9jbWRsaW5lIElOSVQoPSBOVUxMKTsJLyogbmV3IHZhbHVlIGZvciBsYXN0X2NtZGxpbmUgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfQVVUT0NNRAorRVhURVJOIGNoYXJfdQkqYXV0b2NtZF9mbmFtZSBJTklUKD0gTlVMTCk7IC8qIGZuYW1lIGZvciA8YWZpbGU+IG9uIGNtZGxpbmUgKi8KK0VYVEVSTiBpbnQJYXV0b2NtZF9idWZuciBJTklUKD0gMCk7ICAgICAvKiBmbnVtIGZvciA8YWJ1Zj4gb24gY21kbGluZSAqLworRVhURVJOIGNoYXJfdQkqYXV0b2NtZF9tYXRjaCBJTklUKD0gTlVMTCk7IC8qIG5hbWUgZm9yIDxhbWF0Y2g+IG9uIGNtZGxpbmUgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9XSU5ET1dTCitFWFRFUk4gaW50CXBvc3Rwb25lZF9zcGxpdCBJTklUKD0gMCk7ICAvKiBmb3IgQ1RSTC1XIENUUkwtXSBjb21tYW5kICovCitFWFRFUk4gaW50CXBvc3Rwb25lZF9zcGxpdF9mbGFncyBJTklUKD0gMCk7ICAvKiBhcmdzIGZvciB3aW5fc3BsaXQoKSAqLworIyBpZmRlZiBGRUFUX1FVSUNLRklYCitFWFRFUk4gaW50CWdfZG9fdGFncHJldmlldyBJTklUKD0gMCk7ICAvKiBmb3IgdGFnIHByZXZpZXcgY29tbWFuZHM6CisJCQkJCSAgICAgICBoZWlnaHQgb2YgcHJldmlldyB3aW5kb3cgKi8KKyMgZW5kaWYKKyNlbmRpZgorRVhURVJOIGludAlyZXBsYWNlX29mZnNldCBJTklUKD0gMCk7ICAgLyogb2Zmc2V0IGZvciByZXBsYWNlX3B1c2goKSAqLworCitFWFRFUk4gY2hhcl91CSplc2NhcGVfY2hhcnMgSU5JVCg9IChjaGFyX3UgKikiIFx0XFxcInwiKTsKKwkJCQkJICAgIC8qIG5lZWQgYmFja3NsYXNoIGluIGNtZCBsaW5lICovCisKK0VYVEVSTiBpbnQJa2VlcF9oZWxwX2ZsYWcgSU5JVCg9IEZBTFNFKTsgLyogZG9pbmcgOnRhIGZyb20gaGVscCBmaWxlICovCisKKy8qCisgKiBXaGVuIGEgc3RyaW5nIG9wdGlvbiBpcyBOVUxMICh3aGljaCBvbmx5IGhhcHBlbnMgaW4gb3V0LW9mLW1lbW9yeQorICogc2l0dWF0aW9ucyksIGl0IGlzIHNldCB0byBlbXB0eV9vcHRpb24sIHRvIGF2b2lkIGhhdmluZyB0byBjaGVjayBmb3IgTlVMTAorICogZXZlcnl3aGVyZS4KKyAqLworRVhURVJOIGNoYXJfdQkqZW1wdHlfb3B0aW9uIElOSVQoPSAoY2hhcl91ICopIiIpOworCisjaWZkZWYgREVCVUcKK0VYVEVSTiBGSUxFICpkZWJ1Z2ZwIElOSVQoPSBOVUxMKTsKKyNlbmRpZgorCitFWFRFUk4gaW50ICByZWRpcl9vZmYgSU5JVCg9IEZBTFNFKTsJLyogbm8gcmVkaXJlY3Rpb24gZm9yIGEgbW9tZW50ICovCitFWFRFUk4gRklMRSAqcmVkaXJfZmQgSU5JVCg9IE5VTEwpOwkvKiBtZXNzYWdlIHJlZGlyZWN0aW9uIGZpbGUgKi8KKyNpZmRlZiBGRUFUX0VWQUwKK0VYVEVSTiBpbnQgIHJlZGlyX3JlZyBJTklUKD0gMCk7CS8qIG1lc3NhZ2UgcmVkaXJlY3Rpb24gcmVnaXN0ZXIgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9MQU5HTUFQCitFWFRFUk4gY2hhcl91CWxhbmdtYXBfbWFwY2hhclsyNTZdOwkvKiBtYXBwaW5nIGZvciBsYW5ndWFnZSBrZXlzICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfV0lMRE1FTlUKK0VYVEVSTiBpbnQgIHNhdmVfcF9scyBJTklUKD0gLTEpOwkvKiBTYXZlICdsYXN0c3RhdHVzJyBzZXR0aW5nICovCitFWFRFUk4gaW50ICBzYXZlX3Bfd21oIElOSVQoPSAtMSk7CS8qIFNhdmUgJ3dpbm1pbmhlaWdodCcgc2V0dGluZyAqLworRVhURVJOIGludCAgd2lsZF9tZW51X3Nob3dpbmcgSU5JVCg9IDApOworI2RlZmluZSBXTV9TSE9XTgkxCQkvKiB3aWxkbWVudSBzaG93aW5nICovCisjZGVmaW5lIFdNX1NDUk9MTEVECTIJCS8qIHdpbGRtZW51IHNob3dpbmcgd2l0aCBzY3JvbGwgKi8KKyNlbmRpZgorCisjaWZkZWYgTVNXSU4KK0VYVEVSTiBjaGFyX3UJdG91cHBlcl90YWJbMjU2XTsJLyogdGFibGUgZm9yIHRvdXBwZXIoKSAqLworRVhURVJOIGNoYXJfdQl0b2xvd2VyX3RhYlsyNTZdOwkvKiB0YWJsZSBmb3IgdG9sb3dlcigpICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfTElORUJSRUFLCitFWFRFUk4gY2hhcglicmVha2F0X2ZsYWdzWzI1Nl07CS8qIHdoaWNoIGNoYXJhY3RlcnMgYXJlIGluICdicmVha2F0JyAqLworI2VuZGlmCisKKy8qIHRoZXNlIGFyZSBpbiB2ZXJzaW9uLmMgKi8KK2V4dGVybiBjaGFyICpWZXJzaW9uOworZXh0ZXJuIGNoYXIgKm1lZGl1bVZlcnNpb247CisjaWYgZGVmaW5lZChIQVZFX0RBVEVfVElNRSkgJiYgZGVmaW5lZChWTVMpICYmIGRlZmluZWQoVkFYQykKK2V4dGVybiBjaGFyIGxvbmdWZXJzaW9uW107CisjZWxzZQorZXh0ZXJuIGNoYXIgKmxvbmdWZXJzaW9uOworI2VuZGlmCisKKy8qCisgKiBTb21lIGZpbGUgbmFtZXMgYXJlIHN0b3JlZCBpbiBwYXRoZGVmLmMsIHdoaWNoIGlzIGdlbmVyYXRlZCBmcm9tIHRoZQorICogTWFrZWZpbGUgdG8gbWFrZSB0aGVpciB2YWx1ZSBkZXBlbmQgb24gdGhlIE1ha2VmaWxlLgorICovCisjaWZkZWYgSEFWRV9QQVRIREVGCitleHRlcm4gY2hhcl91ICpkZWZhdWx0X3ZpbV9kaXI7CitleHRlcm4gY2hhcl91ICpkZWZhdWx0X3ZpbXJ1bnRpbWVfZGlyOworZXh0ZXJuIGNoYXJfdSAqYWxsX2NmbGFnczsKK2V4dGVybiBjaGFyX3UgKmFsbF9sZmxhZ3M7CisjIGlmZGVmIFZNUworZXh0ZXJuIGNoYXJfdSAqY29tcGlsZXJfdmVyc2lvbjsKKyMgZW5kaWYKK2V4dGVybiBjaGFyX3UgKmNvbXBpbGVkX3VzZXI7CitleHRlcm4gY2hhcl91ICpjb21waWxlZF9zeXM7CisjZW5kaWYKKworLyogV2hlbiBhIHdpbmRvdyBoYXMgYSBsb2NhbCBkaXJlY3RvcnksIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBnbG9iYWwKKyAqIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHN0b3JlZCBoZXJlIChpbiBhbGxvY2F0ZWQgbWVtb3J5KS4gIElmIHRoZSBjdXJyZW50CisgKiBkaXJlY3RvcnkgaXMgbm90IGEgbG9jYWwgZGlyZWN0b3J5LCBnbG9iYWxkaXIgaXMgTlVMTC4gKi8KK0VYVEVSTiBjaGFyX3UJKmdsb2JhbGRpciBJTklUKD0gTlVMTCk7CisKKy8qIENoYXJhY3RlcnMgZnJvbSAnbGlzdGNoYXJzJyBvcHRpb24gKi8KK0VYVEVSTiBpbnQJbGNzX2VvbCBJTklUKD0gJyQnKTsKK0VYVEVSTiBpbnQJbGNzX2V4dCBJTklUKD0gTlVMKTsKK0VYVEVSTiBpbnQJbGNzX3ByZWMgSU5JVCg9IE5VTCk7CitFWFRFUk4gaW50CWxjc190YWIxIElOSVQoPSBOVUwpOworRVhURVJOIGludAlsY3NfdGFiMiBJTklUKD0gTlVMKTsKK0VYVEVSTiBpbnQJbGNzX3RyYWlsIElOSVQoPSBOVUwpOworCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoRkVBVF9XSUxETUVOVSkgfHwgZGVmaW5lZChGRUFUX1NUTF9PUFQpIFwKKwl8fCBkZWZpbmVkKEZFQVRfRk9MRElORykKKy8qIENoYXJhY3RlcnMgZnJvbSAnZmlsbGNoYXJzJyBvcHRpb24gKi8KK0VYVEVSTiBpbnQJZmlsbF9zdGwgSU5JVCg9ICcgJyk7CitFWFRFUk4gaW50CWZpbGxfc3RsbmMgSU5JVCg9ICcgJyk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChGRUFUX0ZPTERJTkcpCitFWFRFUk4gaW50CWZpbGxfdmVydCBJTklUKD0gJyAnKTsKK0VYVEVSTiBpbnQJZmlsbF9mb2xkIElOSVQoPSAnLScpOworRVhURVJOIGludAlmaWxsX2RpZmYgSU5JVCg9ICctJyk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVklTVUFMCisvKiBXaGV0aGVyICdrZXltb2RlbCcgY29udGFpbnMgInN0b3BzZWwiIGFuZCAic3RhcnRzZWwiLiAqLworRVhURVJOIGludAlrbV9zdG9wc2VsIElOSVQoPSBGQUxTRSk7CitFWFRFUk4gaW50CWttX3N0YXJ0c2VsIElOSVQoPSBGQUxTRSk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfQ01EV0lOCitFWFRFUk4gaW50CWNlZGl0X2tleSBJTklUKD0gLTEpOwkvKiBrZXkgdmFsdWUgb2YgJ2NlZGl0JyBvcHRpb24gKi8KK0VYVEVSTiBpbnQJY21kd2luX3R5cGUgSU5JVCg9IDApOwkvKiB0eXBlIG9mIGNtZGxpbmUgd2luZG93IG9yIDAgKi8KK0VYVEVSTiBpbnQJY21kd2luX3Jlc3VsdCBJTklUKD0gMCk7IC8qIHJlc3VsdCBvZiBjbWRsaW5lIHdpbmRvdyBvciAwICovCisjZW5kaWYKKworRVhURVJOIGNoYXJfdSBub19saW5lc19tc2dbXQlJTklUKD0gTl8oIi0tTm8gbGluZXMgaW4gYnVmZmVyLS0iKSk7CisKKy8qIHRhYmxlIHRvIHN0b3JlIHBhcnNlZCAnd2lsZG1vZGUnICovCitFWFRFUk4gY2hhcl91CXdpbV9mbGFnc1s0XTsKKworI2lmIGRlZmluZWQoRkVBVF9USVRMRSkgJiYgZGVmaW5lZChGRUFUX1NUTF9PUFQpCisvKiB3aGV0aGVyIHRpdGxlc3RyaW5nIGFuZCBpY29uc3RyaW5nIGNvbnRhaW5zIHN0YXR1c2xpbmUgc3ludGF4ICovCisjIGRlZmluZSBTVExfSU5fSUNPTgkxCisjIGRlZmluZSBTVExfSU5fVElUTEUJMgorRVhURVJOIGludCAgICAgIHN0bF9zeW50YXggSU5JVCg9IDApOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorLyogZG9uJ3QgdXNlICdobHNlYXJjaCcgdGVtcG9yYXJpbHkgKi8KK0VYVEVSTiBpbnQJbm9faGxzZWFyY2ggSU5JVCg9IEZBTFNFKTsKKyNlbmRpZgorCisjaWZkZWYgQ1VSU09SX1NIQVBFCisvKiB0aGUgdGFibGUgaXMgaW4gbWlzYzIuYywgYmVjYXVzZSBvZiBpbml0aWFsaXphdGlvbnMgKi8KK2V4dGVybiBjdXJzb3JlbnRyeV9UIHNoYXBlX3RhYmxlW1NIQVBFX0lEWF9DT1VOVF07CisjZW5kaWYKKworI2lmZGVmIEZFQVRfUFJJTlRFUgorIyBkZWZpbmUgT1BUX1BSSU5UX1RPUAkJMAorIyBkZWZpbmUgT1BUX1BSSU5UX0JPVAkJMQorIyBkZWZpbmUgT1BUX1BSSU5UX0xFRlQJCTIKKyMgZGVmaW5lIE9QVF9QUklOVF9SSUdIVAkzCisjIGRlZmluZSBPUFRfUFJJTlRfSEVBREVSSEVJR0hUCTQKKyMgZGVmaW5lIE9QVF9QUklOVF9TWU5UQVgJNQorIyBkZWZpbmUgT1BUX1BSSU5UX05VTUJFUgk2CisjIGRlZmluZSBPUFRfUFJJTlRfV1JBUAkJNworIyBkZWZpbmUgT1BUX1BSSU5UX0RVUExFWAk4CisjIGRlZmluZSBPUFRfUFJJTlRfUE9SVFJBSVQJOQorIyBkZWZpbmUgT1BUX1BSSU5UX1BBUEVSCTEwCisjIGRlZmluZSBPUFRfUFJJTlRfQ09MTEFURQkxMQorIyBkZWZpbmUgT1BUX1BSSU5UX0pPQlNQTElUCTEyCisjIGRlZmluZSBPUFRfUFJJTlRfRk9STUZFRUQJMTMKKworIyBkZWZpbmUgT1BUX1BSSU5UX05VTV9PUFRJT05TCTE0CisKK0VYVEVSTiBvcHRpb25fdGFibGVfVCBwcmludGVyX29wdHNbT1BUX1BSSU5UX05VTV9PUFRJT05TXQorIyBpZmRlZiBET19JTklUCisgPQoreworICAgIHsidG9wIiwJVFJVRSwgMCwgTlVMTCwgMCwgRkFMU0V9LAorICAgIHsiYm90dG9tIiwJVFJVRSwgMCwgTlVMTCwgMCwgRkFMU0V9LAorICAgIHsibGVmdCIsCVRSVUUsIDAsIE5VTEwsIDAsIEZBTFNFfSwKKyAgICB7InJpZ2h0IiwJVFJVRSwgMCwgTlVMTCwgMCwgRkFMU0V9LAorICAgIHsiaGVhZGVyIiwJVFJVRSwgMCwgTlVMTCwgMCwgRkFMU0V9LAorICAgIHsic3ludGF4IiwJRkFMU0UsIDAsIE5VTEwsIDAsIEZBTFNFfSwKKyAgICB7Im51bWJlciIsCUZBTFNFLCAwLCBOVUxMLCAwLCBGQUxTRX0sCisgICAgeyJ3cmFwIiwJRkFMU0UsIDAsIE5VTEwsIDAsIEZBTFNFfSwKKyAgICB7ImR1cGxleCIsCUZBTFNFLCAwLCBOVUxMLCAwLCBGQUxTRX0sCisgICAgeyJwb3J0cmFpdCIsIEZBTFNFLCAwLCBOVUxMLCAwLCBGQUxTRX0sCisgICAgeyJwYXBlciIsCUZBTFNFLCAwLCBOVUxMLCAwLCBGQUxTRX0sCisgICAgeyJjb2xsYXRlIiwJRkFMU0UsIDAsIE5VTEwsIDAsIEZBTFNFfSwKKyAgICB7ImpvYnNwbGl0IiwgRkFMU0UsIDAsIE5VTEwsIDAsIEZBTFNFfSwKKyAgICB7ImZvcm1mZWVkIiwgRkFMU0UsIDAsIE5VTEwsIDAsIEZBTFNFfSwKK30KKyMgZW5kaWYKKzsKKworLyogRm9yIHBydF9nZXRfdW5pdCgpLiAqLworIyBkZWZpbmUgUFJUX1VOSVRfTk9ORQktMQorIyBkZWZpbmUgUFJUX1VOSVRfUEVSQwkwCisjIGRlZmluZSBQUlRfVU5JVF9JTkNICTEKKyMgZGVmaW5lIFBSVF9VTklUX01NCTIKKyMgZGVmaW5lIFBSVF9VTklUX1BPSU5UCTMKKyMgZGVmaW5lIFBSVF9VTklUX05BTUVTIHsicGMiLCAiaW4iLCAibW0iLCAicHQifQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1hDTElQQk9BUkQKK0VYVEVSTiBjaGFyCSp4dGVybV9kaXNwbGF5IElOSVQoPSBOVUxMKTsJLyogeHRlcm0gZGlzcGxheSBuYW1lICovCitFWFRFUk4gRGlzcGxheQkqeHRlcm1fZHB5IElOSVQoPSBOVUxMKTsJLyogeHRlcm0gZGlzcGxheSBwb2ludGVyICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfWENMSVBCT0FSRCkgfHwgZGVmaW5lZChGRUFUX0dVSV9YMTEpCitFWFRFUk4gWHRBcHBDb250ZXh0IGFwcF9jb250ZXh0IElOSVQoPSAoWHRBcHBDb250ZXh0KU5VTEwpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSV9HVEsKK0VYVEVSTiBndWludDMyCWd0a19zb2NrZXRfaWQgSU5JVCg9IDApOworRVhURVJOIGludAllY2hvX3dpZF9hcmcgSU5JVCg9IEZBTFNFKTsJLyogLS1lY2hvLXdpZCBhcmd1bWVudCAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorRVhURVJOIGNoYXJfdQkqc2VydmVyTmFtZSBJTklUKD0gTlVMTCk7CS8qIG5hbWUgb2YgdGhlIHNlcnZlciAqLworRVhURVJOIGludAlyZWNlaXZlZF9mcm9tX2NsaWVudCBJTklUKD0gRkFMU0UpOwkvKiByZWNlaXZlZCB0ZXh0IGZyb20KKwkJCQkJCQkgICBjbGllbnQgKi8KKyMgaWZkZWYgRkVBVF9YMTEKK0VYVEVSTiBXaW5kb3cJY29tbVdpbmRvdyBJTklUKD0gTm9uZSk7CitFWFRFUk4gV2luZG93CWNsaWVudFdpbmRvdyBJTklUKD0gTm9uZSk7CitFWFRFUk4gQXRvbQljb21tUHJvcGVydHkgSU5JVCg9IE5vbmUpOworRVhURVJOIGNoYXJfdQkqc2VydmVyRGVsYXllZFN0YXJ0TmFtZSBJTklUKD0gTlVMTCk7CisjIGVsc2UKKyMgaWZkZWYgUFJPVE8KK3R5cGVkZWYgaW50IEhXTkQ7CisjIGVuZGlmCitFWFRFUk4gSFdORAljbGllbnRXaW5kb3cgSU5JVCg9IDApOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoVk1TKQorRVhURVJOIGludAl0ZXJtX2lzX3h0ZXJtIElOSVQoPSBGQUxTRSk7CS8qIHh0ZXJtLWxpa2UgJ3Rlcm0nICovCisjZW5kaWYKKworI2lmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorRVhURVJOIGNoYXIJcHNlcGMgSU5JVCg9ICdcXCcpOwkvKiBub3JtYWwgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyICovCitFWFRFUk4gY2hhcglwc2VwY04gSU5JVCg9ICcvJyk7CS8qIGFibm9ybWFsIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciAqLworRVhURVJOIGNoYXIJcHNlcHNbMl0JCS8qIG5vcm1hbCBwYXRoIHNlcGFyYXRvciBzdHJpbmcgKi8KKyMgaWZkZWYgRE9fSU5JVAorCQkJPSB7J1xcJywgMH0KKyMgZW5kaWYKKwkJCTsKK0VYVEVSTiBjaGFyCXBzZXBzTlsyXQkJLyogYWJub3JtYWwgcGF0aCBzZXBhcmF0b3Igc3RyaW5nICovCisjIGlmZGVmIERPX0lOSVQKKwkJCT0geycvJywgMH0KKyMgZW5kaWYKKwkJCTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorLyogU2V0IHRvIFRSVUUgd2hlbiBhbiBvcGVyYXRvciBpcyBiZWluZyBleGVjdXRlZCB3aXRoIHZpcnR1YWwgZWRpdGluZywgTUFZQkUKKyAqIHdoZW4gbm8gb3BlcmF0b3IgaXMgYmVpbmcgZXhlY3V0ZWQsIEZBTFNFIG90aGVyd2lzZS4gKi8KK0VYVEVSTiBpbnQJdmlydHVhbF9vcCBJTklUKD0gTUFZQkUpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1NZTl9ITAorLyogRGlzcGxheSB0aWNrLCBpbmNyZW1lbnRlZCBmb3IgZWFjaCBjYWxsIHRvIHVwZGF0ZV9zY3JlZW4oKSAqLworRVhURVJOIGRpc3B0aWNrX1QJZGlzcGxheV90aWNrIElOSVQoPSAwKTsKKyNlbmRpZgorCisjaWZkZWYgQUxUX1hfSU5QVVQKKy8qIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBnbyBpbnRvIHRoZSBkaXNwbGF0Y2ggbG9vcCB3aGlsZSBwcm9jZXNzaW5nIGEgY29tbWFuZAorICogcmVjZXZpZWQgdmlhIGFsdGVybmF0ZSBpbnB1dC4gSG93ZXZlciwgd2UgZG9uJ3Qgd2FudCB0byBwcm9jZXNzIGFub3RoZXIKKyAqIGNvbW1hbmQgdW50aWwgdGhlIGZpcnN0IGlzIGNvbXBsZXRlZC4KKyAqLworRVhURVJOIGludAlzdXBwcmVzc19hbHRlcm5hdGVfaW5wdXQgSU5JVCg9IEZBTFNFKTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX01DSF9FUlJNU0cKKy8qIEdyb3cgYXJyYXkgdG8gY29sbGVjdCBlcnJvciBtZXNzYWdlcyBpbiB1bnRpbCB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQuICovCitFWFRFUk4gZ2FycmF5X1QgZXJyb3JfZ2EKKyMgaWZkZWYgRE9fSU5JVAorCT0gezAsIDAsIDAsIDAsIE5VTEx9CisjIGVuZGlmCisJOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKK0VYVEVSTiBjaGFyICpuZXRiZWFuc0FyZyBJTklUKD0gTlVMTCk7CS8qIHRoZSAtbmJbOmhvc3Q6cG9ydDpwYXNzd2RdIGFyZyAqLworRVhURVJOIGludCBuZXRiZWFuc0Nsb3NlRmlsZSBJTklUKD0gMCk7CS8qIHNlbmQga2lsbGVkIGlmICE9IDAgKi8KK0VYVEVSTiBpbnQgbmV0YmVhbnNGaXJlQ2hhbmdlcyBJTklUKD0gMSk7IC8qIHNlbmQgYnVmZmVyIGNoYW5nZXMgaWYgIT0gMCAqLworRVhURVJOIGludCBuZXRiZWFuc0ZvcmNlZFF1aXQgSU5JVCg9IDApOy8qIGRvbid0IHdyaXRlIG1vZGlmaWVkIGZpbGVzICovCitFWFRFUk4gaW50IG5ldGJlYW5zT3BlbkZpbGUgSU5JVCg9IDEpOwkvKiBzZW5kIGZpbGVPcGVuZWQgaWYgIT0gMCAqLworRVhURVJOIGludCBuZXRiZWFuc1JlYWRGaWxlIElOSVQoPSAxKTsJLyogT0sgdG8gcmVhZCBmcm9tIGRpc2sgaWYgIT0gMCAqLworRVhURVJOIGludCBuZXRiZWFuc1N1cHByZXNzTm9MaW5lcyBJTklUKD0gMCk7IC8qIHNraXAgIk5vIGxpbmVzIGluIGJ1ZmZlciIgKi8KK0VYVEVSTiBpbnQgdXNpbmdOZXRiZWFucyBJTklUKD0gMCk7CS8qIHNldCBpZiAtbmIgZmxhZyBpcyB1c2VkICovCisjZW5kaWYKKworLyoKKyAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisgKiBFeGNsdWRlZCBhcmUgZXJyb3JzIHRoYXQgYXJlIG9ubHkgdXNlZCBvbmNlIGFuZCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisgKi8KK0VYVEVSTiBjaGFyX3UgZV9hYm9ydFtdCQlJTklUKD1OXygiRTQ3MDogQ29tbWFuZCBhYm9ydGVkIikpOworRVhURVJOIGNoYXJfdSBlX2FyZ3JlcVtdCUlOSVQoPU5fKCJFNDcxOiBBcmd1bWVudCByZXF1aXJlZCIpKTsKK0VYVEVSTiBjaGFyX3UgZV9iYWNrc2xhc2hbXQlJTklUKD1OXygiRTEwOiBcXCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgLywgPyBvciAmIikpOworI2lmZGVmIEZFQVRfQ01EV0lOCitFWFRFUk4gY2hhcl91IGVfY21kd2luW10JSU5JVCg9Tl8oIkUxMTogSW52YWxpZCBpbiBjb21tYW5kLWxpbmUgd2luZG93OyA8Q1I+IGV4ZWN1dGVzLCBDVFJMLUMgcXVpdHMiKSk7CisjZW5kaWYKK0VYVEVSTiBjaGFyX3UgZV9jdXJkaXJbXQlJTklUKD1OXygiRTEyOiBDb21tYW5kIG5vdCBhbGxvd2VkIGZyb20gZXhyYy92aW1yYyBpbiBjdXJyZW50IGRpciBvciB0YWcgc2VhcmNoIikpOworI2lmZGVmIEZFQVRfRVZBTAorRVhURVJOIGNoYXJfdSBlX2VuZGlmW10JCUlOSVQoPU5fKCJFMTcxOiBNaXNzaW5nIDplbmRpZiIpKTsKK0VYVEVSTiBjaGFyX3UgZV9lbmR0cnlbXQlJTklUKD1OXygiRTYwMDogTWlzc2luZyA6ZW5kdHJ5IikpOworRVhURVJOIGNoYXJfdSBlX2VuZHdoaWxlW10JSU5JVCg9Tl8oIkUxNzA6IE1pc3NpbmcgOmVuZHdoaWxlIikpOworRVhURVJOIGNoYXJfdSBlX3doaWxlW10JCUlOSVQoPU5fKCJFNTg4OiA6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiKSk7CisjZW5kaWYKK0VYVEVSTiBjaGFyX3UgZV9leGlzdHNbXQlJTklUKD1OXygiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIikpOworRVhURVJOIGNoYXJfdSBlX2ZhaWxlZFtdCUlOSVQoPU5fKCJFNDcyOiBDb21tYW5kIGZhaWxlZCIpKTsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKEZFQVRfWEZPTlRTRVQpCitFWFRFUk4gY2hhcl91IGVfZm9udHNldFtdCUlOSVQoPU5fKCJFMjM0OiBVbmtub3duIGZvbnRzZXQ6ICVzIikpOworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0dVSV9YMTEpIHx8IGRlZmluZWQoRkVBVF9HVUlfR1RLKSB8fCBkZWZpbmVkKE1BQ09TKSBcCisJfHwgZGVmaW5lZChGRUFUX0dVSV9QSE9UT04pIHx8IGRlZmluZWQoRkVBVF9HVUlfTVNXSU4pCitFWFRFUk4gY2hhcl91IGVfZm9udFtdCQlJTklUKD1OXygiRTIzNTogVW5rbm93biBmb250OiAlcyIpKTsKKyNlbmRpZgorI2lmIChkZWZpbmVkKEZFQVRfR1VJX1gxMSkgfHwgZGVmaW5lZChGRUFUX0dVSV9HVEspKSAmJiAhZGVmaW5lZChIQVZFX0dUSzIpCitFWFRFUk4gY2hhcl91IGVfZm9udHdpZHRoW10JSU5JVCg9Tl8oIkUyMzY6IEZvbnQgXCIlc1wiIGlzIG5vdCBmaXhlZC13aWR0aCIpKTsKKyNlbmRpZgorRVhURVJOIGNoYXJfdSBlX2ludGVybmFsW10JSU5JVCg9Tl8oIkU0NzM6IEludGVybmFsIGVycm9yIikpOworRVhURVJOIGNoYXJfdSBlX2ludGVycltdCUlOSVQoPU5fKCJJbnRlcnJ1cHRlZCIpKTsKK0VYVEVSTiBjaGFyX3UgZV9pbnZhZGRyW10JSU5JVCg9Tl8oIkUxNDogSW52YWxpZCBhZGRyZXNzIikpOworRVhURVJOIGNoYXJfdSBlX2ludmFyZ1tdCUlOSVQoPU5fKCJFNDc0OiBJbnZhbGlkIGFyZ3VtZW50IikpOworRVhURVJOIGNoYXJfdSBlX2ludmFyZzJbXQlJTklUKD1OXygiRTQ3NTogSW52YWxpZCBhcmd1bWVudDogJXMiKSk7CisjaWZkZWYgRkVBVF9FVkFMCitFWFRFUk4gY2hhcl91IGVfaW52ZXhwcjJbXQlJTklUKD1OXygiRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246ICVzIikpOworI2VuZGlmCitFWFRFUk4gY2hhcl91IGVfaW52cmFuZ2VbXQlJTklUKD1OXygiRTE2OiBJbnZhbGlkIHJhbmdlIikpOworRVhURVJOIGNoYXJfdSBlX2ludmNtZFtdCUlOSVQoPU5fKCJFNDc2OiBJbnZhbGlkIGNvbW1hbmQiKSk7CisjaWZkZWYgVU5JWAorRVhURVJOIGNoYXJfdSBlX2lzYWRpcjJbXQlJTklUKD1OXygiRTE3OiBcIiVzXCIgaXMgYSBkaXJlY3RvcnkiKSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0VWQUwKK0VYVEVSTiBjaGFyX3UgZV9sZXR1bmV4cFtdCUlOSVQoPU5fKCJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIikpOworI2VuZGlmCisjaWZkZWYgRkVBVF9MSUJDQUxMCitFWFRFUk4gY2hhcl91IGVfbGliY2FsbFtdCUlOSVQoPU5fKCJFMzY0OiBMaWJyYXJ5IGNhbGwgZmFpbGVkIGZvciBcIiVzKClcIiIpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRFlOQU1JQ19QRVJMKSB8fCBkZWZpbmVkKERZTkFNSUNfUFlUSE9OKSB8fCBkZWZpbmVkKERZTkFNSUNfUlVCWSkgXAorCXx8IGRlZmluZWQoRFlOQU1JQ19UQ0wpIHx8IGRlZmluZWQoRFlOQU1JQ19JQ09OVikgXAorCXx8IGRlZmluZWQoRFlOQU1JQ19HRVRURVhUKQorRVhURVJOIGNoYXJfdSBlX2xvYWRsaWJbXQlJTklUKD1OXygiRTM3MDogQ291bGQgbm90IGxvYWQgbGlicmFyeSAlcyIpKTsKK0VYVEVSTiBjaGFyX3UgZV9sb2FkZnVuY1tdCUlOSVQoPU5fKCJFNDQ4OiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5IGZ1bmN0aW9uICVzIikpOworI2VuZGlmCitFWFRFUk4gY2hhcl91IGVfbWFya2ludmFsW10JSU5JVCg9Tl8oIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIpKTsKK0VYVEVSTiBjaGFyX3UgZV9tYXJrbm90c2V0W10JSU5JVCg9Tl8oIkUyMDogTWFyayBub3Qgc2V0IikpOworRVhURVJOIGNoYXJfdSBlX21vZGlmaWFibGVbXQlJTklUKD1OXygiRTIxOiBDYW5ub3QgbWFrZSBjaGFuZ2VzLCAnbW9kaWZpYWJsZScgaXMgb2ZmIikpOworRVhURVJOIGNoYXJfdSBlX25lc3RpbmdbXQlJTklUKD1OXygiRTIyOiBTY3JpcHRzIG5lc3RlZCB0b28gZGVlcCIpKTsKK0VYVEVSTiBjaGFyX3UgZV9ub2FsdFtdCQlJTklUKD1OXygiRTIzOiBObyBhbHRlcm5hdGUgZmlsZSIpKTsKK0VYVEVSTiBjaGFyX3UgZV9ub2FiYnJbXQlJTklUKD1OXygiRTI0OiBObyBzdWNoIGFiYnJldmlhdGlvbiIpKTsKK0VYVEVSTiBjaGFyX3UgZV9ub2JhbmdbXQlJTklUKD1OXygiRTQ3NzogTm8gISBhbGxvd2VkIikpOworI2lmbmRlZiBGRUFUX0dVSQorRVhURVJOIGNoYXJfdSBlX25vZ3ZpbVtdCUlOSVQoPU5fKCJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIikpOworI2VuZGlmCisjaWZuZGVmIEZFQVRfUklHSFRMRUZUCitFWFRFUk4gY2hhcl91IGVfbm9oZWJyZXdbXQlJTklUKD1OXygiRTI2OiBIZWJyZXcgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIikpOworI2VuZGlmCisjaWZuZGVmIEZFQVRfRktNQVAKK0VYVEVSTiBjaGFyX3UgZV9ub2ZhcnNpW10JSU5JVCg9Tl8oIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIikpOworI2VuZGlmCisjaWZuZGVmIEZFQVRfQVJBQklDCitFWFRFUk4gY2hhcl91IGVfbm9hcmFiaWNbXQlJTklUKD1OXygiRTgwMDogQXJhYmljIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9TRUFSQ0hfRVhUUkEpIHx8IGRlZmluZWQoRkVBVF9TWU5fSEwpCitFWFRFUk4gY2hhcl91IGVfbm9ncm91cFtdCUlOSVQoPU5fKCJFMjg6IE5vIHN1Y2ggaGlnaGxpZ2h0IGdyb3VwIG5hbWU6ICVzIikpOworI2VuZGlmCitFWFRFUk4gY2hhcl91IGVfbm9pbnN0ZXh0W10JSU5JVCg9Tl8oIkUyOTogTm8gaW5zZXJ0ZWQgdGV4dCB5ZXQiKSk7CitFWFRFUk4gY2hhcl91IGVfbm9sYXN0Y21kW10JSU5JVCg9Tl8oIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIikpOworRVhURVJOIGNoYXJfdSBlX25vbWFwW10JCUlOSVQoPU5fKCJFMzE6IE5vIHN1Y2ggbWFwcGluZyIpKTsKK0VYVEVSTiBjaGFyX3UgZV9ub21hdGNoW10JSU5JVCg9Tl8oIkU0Nzk6IE5vIG1hdGNoIikpOworRVhURVJOIGNoYXJfdSBlX25vbWF0Y2gyW10JSU5JVCg9Tl8oIkU0ODA6IE5vIG1hdGNoOiAlcyIpKTsKK0VYVEVSTiBjaGFyX3UgZV9ub25hbWVbXQlJTklUKD1OXygiRTMyOiBObyBmaWxlIG5hbWUiKSk7CitFWFRFUk4gY2hhcl91IGVfbm9wcmVzdWJbXQlJTklUKD1OXygiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIpKTsKK0VYVEVSTiBjaGFyX3UgZV9ub3ByZXZbXQlJTklUKD1OXygiRTM0OiBObyBwcmV2aW91cyBjb21tYW5kIikpOworRVhURVJOIGNoYXJfdSBlX25vcHJldnJlW10JSU5JVCg9Tl8oIkUzNTogTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIikpOworRVhURVJOIGNoYXJfdSBlX25vcmFuZ2VbXQlJTklUKD1OXygiRTQ4MTogTm8gcmFuZ2UgYWxsb3dlZCIpKTsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKK0VYVEVSTiBjaGFyX3UgZV9ub3Jvb21bXQlJTklUKD1OXygiRTM2OiBOb3QgZW5vdWdoIHJvb20iKSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorRVhURVJOIGNoYXJfdSBlX25vc2VydmVyW10JSU5JVCg9Tl8oIkUyNDc6IG5vIHJlZ2lzdGVyZWQgc2VydmVyIG5hbWVkIFwiJXNcIiIpKTsKKyNlbmRpZgorRVhURVJOIGNoYXJfdSBlX25vdGNyZWF0ZVtdCUlOSVQoPU5fKCJFNDgyOiBDYW4ndCBjcmVhdGUgZmlsZSAlcyIpKTsKK0VYVEVSTiBjaGFyX3UgZV9ub3RtcFtdCQlJTklUKD1OXygiRTQ4MzogQ2FuJ3QgZ2V0IHRlbXAgZmlsZSBuYW1lIikpOworRVhURVJOIGNoYXJfdSBlX25vdG9wZW5bXQlJTklUKD1OXygiRTQ4NDogQ2FuJ3Qgb3BlbiBmaWxlICVzIikpOworRVhURVJOIGNoYXJfdSBlX25vdHJlYWRbXQlJTklUKD1OXygiRTQ4NTogQ2FuJ3QgcmVhZCBmaWxlICVzIikpOworRVhURVJOIGNoYXJfdSBlX25vd3J0bXNnW10JSU5JVCg9Tl8oIkUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKGFkZCAhIHRvIG92ZXJyaWRlKSIpKTsKK0VYVEVSTiBjaGFyX3UgZV9udWxsW10JCUlOSVQoPU5fKCJFMzg6IE51bGwgYXJndW1lbnQiKSk7CisjaWZkZWYgRkVBVF9ESUdSQVBIUworRVhURVJOIGNoYXJfdSBlX251bWJlcl9leHBbXQlJTklUKD1OXygiRTM5OiBOdW1iZXIgZXhwZWN0ZWQiKSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1FVSUNLRklYCitFWFRFUk4gY2hhcl91IGVfb3BlbmVycmZbXQlJTklUKD1OXygiRTQwOiBDYW4ndCBvcGVuIGVycm9yZmlsZSAlcyIpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9HVUlfR1RLKSB8fCBkZWZpbmVkKEZFQVRfR1VJX1gxMSkKK0VYVEVSTiBjaGFyX3UgZV9vcGVuZGlzcFtdCUlOSVQoPU5fKCJFMjMzOiBjYW5ub3Qgb3BlbiBkaXNwbGF5IikpOworI2VuZGlmCitFWFRFUk4gY2hhcl91IGVfb3V0b2ZtZW1bXQlJTklUKD1OXygiRTQxOiBPdXQgb2YgbWVtb3J5ISIpKTsKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKK0VYVEVSTiBjaGFyX3UgZV9wYXRub3RmW10JSU5JVCg9Tl8oIlBhdHRlcm4gbm90IGZvdW5kIikpOworI2VuZGlmCitFWFRFUk4gY2hhcl91IGVfcGF0bm90ZjJbXQlJTklUKD1OXygiRTQ4NjogUGF0dGVybiBub3QgZm91bmQ6ICVzIikpOworRVhURVJOIGNoYXJfdSBlX3Bvc2l0aXZlW10JSU5JVCg9Tl8oIkU0ODc6IEFyZ3VtZW50IG11c3QgYmUgcG9zaXRpdmUiKSk7CisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKEZFQVRfU0VTU0lPTikKK0VYVEVSTiBjaGFyX3UgZV9wcmV2X2RpcltdCUlOSVQoPU5fKCJFNDU5OiBDYW5ub3QgZ28gYmFjayB0byBwcmV2aW91cyBkaXJlY3RvcnkiKSk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfUVVJQ0tGSVgKK0VYVEVSTiBjaGFyX3UgZV9xdWlja2ZpeFtdCUlOSVQoPU5fKCJFNDI6IE5vIEVycm9ycyIpKTsKKyNlbmRpZgorRVhURVJOIGNoYXJfdSBlX3JlX2RhbWdbXQlJTklUKD1OXygiRTQzOiBEYW1hZ2VkIG1hdGNoIHN0cmluZyIpKTsKK0VYVEVSTiBjaGFyX3UgZV9yZV9jb3JyW10JSU5JVCg9Tl8oIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIikpOworRVhURVJOIGNoYXJfdSBlX3JlYWRvbmx5W10JSU5JVCg9Tl8oIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IChhZGQgISB0byBvdmVycmlkZSkiKSk7CisjaWZkZWYgRkVBVF9FVkFMCitFWFRFUk4gY2hhcl91IGVfcmVhZG9ubHl2YXJbXQlJTklUKD1OXygiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiKSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1FVSUNLRklYCitFWFRFUk4gY2hhcl91IGVfcmVhZGVycmZbXQlJTklUKD1OXygiRTQ3OiBFcnJvciB3aGlsZSByZWFkaW5nIGVycm9yZmlsZSIpKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfU0FOREJPWAorRVhURVJOIGNoYXJfdSBlX3NhbmRib3hbXQlJTklUKD1OXygiRTQ4OiBOb3QgYWxsb3dlZCBpbiBzYW5kYm94IikpOworI2VuZGlmCitFWFRFUk4gY2hhcl91IGVfc2VjdXJlW10JSU5JVCg9Tl8oIkU1MjM6IE5vdCBhbGxvd2VkIGhlcmUiKSk7CisjaWYgZGVmaW5lZChBTUlHQSkgfHwgZGVmaW5lZChNQUNPUykgfHwgZGVmaW5lZChNU1dJTikgfHwgZGVmaW5lZChSSVNDT1MpIFwKKwl8fCBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoVk1TKQorRVhURVJOIGNoYXJfdSBlX3NjcmVlbm1vZGVbXQlJTklUKD1OXygiRTM1OTogU2NyZWVuIG1vZGUgc2V0dGluZyBub3Qgc3VwcG9ydGVkIikpOworI2VuZGlmCitFWFRFUk4gY2hhcl91IGVfc2Nyb2xsW10JSU5JVCg9Tl8oIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIpKTsKK0VYVEVSTiBjaGFyX3UgZV9zaGVsbGVtcHR5W10JSU5JVCg9Tl8oIkU5MTogJ3NoZWxsJyBvcHRpb24gaXMgZW1wdHkiKSk7CisjaWYgZGVmaW5lZChGRUFUX1NJR05fSUNPTlMpICYmICFkZWZpbmVkKEhBVkVfR1RLMikKK0VYVEVSTiBjaGFyX3UgZV9zaWduZGF0YVtdCUlOSVQoPU5fKCJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiKSk7CisjZW5kaWYKK0VYVEVSTiBjaGFyX3UgZV9zd2FwY2xvc2VbXQlJTklUKD1OXygiRTcyOiBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUiKSk7CitFWFRFUk4gY2hhcl91IGVfdGFnc3RhY2tbXQlJTklUKD1OXygiRTczOiB0YWcgc3RhY2sgZW1wdHkiKSk7CitFWFRFUk4gY2hhcl91IGVfdG9vY29tcGxbXQlJTklUKD1OXygiRTc0OiBDb21tYW5kIHRvbyBjb21wbGV4IikpOworRVhURVJOIGNoYXJfdSBlX2xvbmduYW1lW10JSU5JVCg9Tl8oIkU3NTogTmFtZSB0b28gbG9uZyIpKTsKK0VYVEVSTiBjaGFyX3UgZV90b29tc2JyYVtdCUlOSVQoPU5fKCJFNzY6IFRvbyBtYW55IFsiKSk7CitFWFRFUk4gY2hhcl91IGVfdG9vbWFueVtdCUlOSVQoPU5fKCJFNzc6IFRvbyBtYW55IGZpbGUgbmFtZXMiKSk7CitFWFRFUk4gY2hhcl91IGVfdHJhaWxpbmdbXQlJTklUKD1OXygiRTQ4ODogVHJhaWxpbmcgY2hhcmFjdGVycyIpKTsKK0VYVEVSTiBjaGFyX3UgZV91bWFya1tdCQlJTklUKD1OXygiRTc4OiBVbmtub3duIG1hcmsiKSk7CitFWFRFUk4gY2hhcl91IGVfd2lsZGV4cGFuZFtdCUlOSVQoPU5fKCJFNzk6IENhbm5vdCBleHBhbmQgd2lsZGNhcmRzIikpOworI2lmZGVmIEZFQVRfV0lORE9XUworRVhURVJOIGNoYXJfdSBlX3dpbmhlaWdodFtdCUlOSVQoPU5fKCJFNTkxOiAnd2luaGVpZ2h0JyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW5oZWlnaHQnIikpOworIyBpZmRlZiBGRUFUX1ZFUlRTUExJVAorRVhURVJOIGNoYXJfdSBlX3dpbndpZHRoW10JSU5JVCg9Tl8oIkU1OTI6ICd3aW53aWR0aCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWlud2lkdGgnIikpOworIyBlbmRpZgorI2VuZGlmCitFWFRFUk4gY2hhcl91IGVfd3JpdGVbXQkJSU5JVCg9Tl8oIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIpKTsKK0VYVEVSTiBjaGFyX3UgZV96ZXJvY291bnRbXQlJTklUKD1OXygiWmVybyBjb3VudCIpKTsKKyNpZmRlZiBGRUFUX0VWQUwKK0VYVEVSTiBjaGFyX3UgZV91c2luZ3NpZFtdCUlOSVQoPU5fKCJFODE6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0IikpOworI2VuZGlmCisjaWZkZWYgRkVBVF9DTElFTlRTRVJWRVIKK0VYVEVSTiBjaGFyX3UgZV9pbnZleHBybXNnW10JSU5JVCg9Tl8oIkU0NDk6IEludmFsaWQgZXhwcmVzc2lvbiByZWNlaXZlZCIpKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworRVhURVJOIGNoYXJfdSBlX2d1YXJkZWRbXQlJTklUKD1OXygiRTQ2MzogUmVnaW9uIGlzIGd1YXJkZWQsIGNhbm5vdCBtb2RpZnkiKSk7CisjZW5kaWYKKyNpZmRlZiBNQUNPU19YX1VOSVgKK0VYVEVSTiBzaG9ydCBkaXNhbGxvd19ndWkJSU5JVCg9IEZBTFNFKTsKKyNlbmRpZgorCisvKgorICogQ29tbXMuIHdpdGggdGhlIHNlc3Npb24gbWFuYWdlciAoWFNNUCkKKyAqLworI2lmZGVmIFVTRV9YU01QCitFWFRFUk4gaW50IHhzbXBfaWNlZmQgSU5JVCg9IC0xKTsgICAvKiBUaGUgYWN0dWFsIGNvbm5lY3Rpb24gKi8KKyNlbmRpZgorCisvKgorICogT3B0aW9uYWwgRmFyc2kgc3VwcG9ydC4gIEluY2x1ZGUgaXQgaGVyZSwgc28gRVhURVJOIGFuZCBJTklUIGFyZSBkZWZpbmVkLgorICovCisjaWZkZWYgRkVBVF9GS01BUAorIyBpbmNsdWRlICJmYXJzaS5oIgorI2VuZGlmCisKKy8qCisgKiBPcHRpb25hbCBBcmFiaWMgc3VwcG9ydC4gSW5jbHVkZSBpdCBoZXJlLCBzbyBFWFRFUk4gYW5kIElOSVQgYXJlIGRlZmluZWQuCisgKi8KKyNpZmRlZiBGRUFUX0FSQUJJQworIyBpbmNsdWRlICJhcmFiaWMuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2d1aS5jIGIvc3JjL2d1aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZmEyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpLmMKQEAgLTAsMCArMSw0NzQwIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCQlieSBCcmFtIE1vb2xlbmFhcgorICoJCQkJR1VJL01vdGlmIHN1cHBvcnQgYnkgUm9iZXJ0IFdlYmIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisvKiBTdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgdGhlIEdVSSBpbmZvcm1hdGlvbiAqLworZ3VpX1QgZ3VpOworCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiAhZGVmaW5lZChIQVZFX0dUSzIpCitzdGF0aWMgdm9pZCBzZXRfZ3VpZm9udHdpZGUgX19BUkdTKChjaGFyX3UgKmZvbnRfbmFtZSkpOworI2VuZGlmCitzdGF0aWMgdm9pZCBndWlfY2hlY2tfcG9zIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgZ3VpX3Bvc2l0aW9uX2NvbXBvbmVudHMgX19BUkdTKChpbnQpKTsKK3N0YXRpYyB2b2lkIGd1aV9vdXRzdHIgX19BUkdTKChjaGFyX3UgKiwgaW50KSk7CitzdGF0aWMgaW50IGd1aV9zY3JlZW5jaGFyIF9fQVJHUygoaW50IG9mZiwgaW50IGZsYWdzLCBndWljb2xvcl9UIGZnLCBndWljb2xvcl9UIGJnLCBpbnQgYmFjaykpOworI2lmZGVmIEhBVkVfR1RLMgorc3RhdGljIGludCBndWlfc2NyZWVuc3RyIF9fQVJHUygoaW50IG9mZiwgaW50IGxlbiwgaW50IGZsYWdzLCBndWljb2xvcl9UIGZnLCBndWljb2xvcl9UIGJnLCBpbnQgYmFjaykpOworI2VuZGlmCitzdGF0aWMgdm9pZCBndWlfZGVsZXRlX2xpbmVzIF9fQVJHUygoaW50IHJvdywgaW50IGNvdW50KSk7CitzdGF0aWMgdm9pZCBndWlfaW5zZXJ0X2xpbmVzIF9fQVJHUygoaW50IHJvdywgaW50IGNvdW50KSk7CitzdGF0aWMgdm9pZCBmaWxsX21vdXNlX2Nvb3JkIF9fQVJHUygoY2hhcl91ICpwLCBpbnQgY29sLCBpbnQgcm93KSk7CitzdGF0aWMgdm9pZCBndWlfZG9fc2Nyb2xsYmFyIF9fQVJHUygod2luX1QgKndwLCBpbnQgd2hpY2gsIGludCBlbmFibGUpKTsKK3N0YXRpYyBjb2xucl9UIHNjcm9sbF9saW5lX2xlbiBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK3N0YXRpYyB2b2lkIGd1aV91cGRhdGVfaG9yaXpfc2Nyb2xsYmFyIF9fQVJHUygoaW50KSk7CitzdGF0aWMgd2luX1QgKnh5MndpbiBfX0FSR1MoKGludCB4LCBpbnQgeSkpOworCitzdGF0aWMgaW50IGNhbl91cGRhdGVfY3Vyc29yID0gVFJVRTsgLyogY2FuIGRpc3BsYXkgdGhlIGN1cnNvciAqLworCisvKgorICogVGhlIEF0aGVuYSBzY3JvbGxiYXJzIGNhbiBtb3ZlIHRoZSB0aHVtYiB0byBhZnRlciB0aGUgZW5kIG9mIHRoZSBzY3JvbGxiYXIsCisgKiB0aGlzIG1ha2VzIHRoZSB0aHVtYiBpbmRpY2F0ZSB0aGUgcGFydCBvZiB0aGUgdGV4dCB0aGF0IGlzIHNob3duLiAgTW90aWYKKyAqIGNhbid0IGRvIHRoaXMuCisgKi8KKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkgfHwgZGVmaW5lZChGRUFUX0dVSV9NQUMpCisjIGRlZmluZSBTQ1JPTExfUEFTVF9FTkQKKyNlbmRpZgorCisvKgorICogZ3VpX3N0YXJ0IC0tIENhbGxlZCB3aGVuIHVzZXIgd2FudHMgdG8gc3RhcnQgdGhlIEdVSS4KKyAqCisgKiBDYXJlZnVsOiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgcmVjdXJzaXZlbHkgd2hlbiB0aGVyZSBpcyBhICI6Z3VpIgorICogY29tbWFuZCBpbiB0aGUgLmd2aW1yYyBmaWxlLiAgT25seSB0aGUgZmlyc3QgY2FsbCBzaG91bGQgZm9yaywgbm90IHRoZQorICogcmVjdXJzaXZlIGNhbGwuCisgKi8KKyAgICB2b2lkCitndWlfc3RhcnQoKQoreworICAgIGNoYXJfdQkqb2xkX3Rlcm07CisjaWYgZGVmaW5lZChVTklYKSAmJiAhZGVmaW5lZChfX0JFT1NfXykgJiYgIWRlZmluZWQoTUFDT1NfWCkKKyMgZGVmaW5lIE1BWV9GT1JLCisgICAgaW50CQlkb2ZvcmsgPSBUUlVFOworI2VuZGlmCisgICAgc3RhdGljIGludAlyZWN1cnNpdmUgPSAwOworCisgICAgb2xkX3Rlcm0gPSB2aW1fc3Ryc2F2ZShUX05BTUUpOworCisgICAgLyoKKyAgICAgKiBTZXRfdGVybW5hbWUoKSB3aWxsIGNhbGwgZ3VpX2luaXQoKSB0byBzdGFydCB0aGUgR1VJLgorICAgICAqIFNldCB0aGUgInN0YXJ0aW5nIiBmbGFnLCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBHVUkgd2lsbCBzdGFydC4KKyAgICAgKgorICAgICAqIFdlIGRvbid0IHdhbnQgdG8gb3BlbiB0aGUgR1VJIHNoZWxsIHVudGlsIGFmdGVyIHdlJ3ZlIHJlYWQgLmd2aW1yYywKKyAgICAgKiBvdGhlcndpc2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGZvbnQgd2Ugd2lsbCB1c2UsIGFuZCBoZW5jZSB3ZSBkb24ndCBrbm93CisgICAgICogd2hhdCBzaXplIHRoZSBzaGVsbCBzaG91bGQgYmUuICBTbyBpZiB0aGVyZSBhcmUgZXJyb3JzIGluIHRoZSAuZ3ZpbXJjCisgICAgICogZmlsZSwgdGhleSB3aWxsIGhhdmUgdG8gZ28gdG8gdGhlIHRlcm1pbmFsOiBTZXQgZnVsbF9zY3JlZW4gdG8gRkFMU0UuCisgICAgICogZnVsbF9zY3JlZW4gd2lsbCBiZSBzZXQgdG8gVFJVRSBhZ2FpbiBieSBhIHN1Y2Nlc3NmdWwgdGVybWNhcGluaXQoKS4KKyAgICAgKi8KKyAgICBzZXR0bW9kZShUTU9ERV9DT09LKTsJCS8qIHN0b3AgUkFXIG1vZGUgKi8KKyAgICBpZiAoZnVsbF9zY3JlZW4pCisJY3Vyc29yX29uKCk7CQkJLyogbmVlZGVkIGZvciAiOmd1aSIgaW4gLnZpbXJjICovCisgICAgZ3VpLnN0YXJ0aW5nID0gVFJVRTsKKyAgICBmdWxsX3NjcmVlbiA9IEZBTFNFOworCisjaWZkZWYgTUFZX0ZPUksKKyAgICBpZiAoIWd1aS5kb2ZvcmsgfHwgdmltX3N0cmNocihwX2dvLCBHT19GT1JHKSB8fCByZWN1cnNpdmUpCisJZG9mb3JrID0gRkFMU0U7CisjZW5kaWYKKyAgICArK3JlY3Vyc2l2ZTsKKworICAgIHRlcm1jYXBpbml0KChjaGFyX3UgKikiYnVpbHRpbl9ndWkiKTsKKyAgICBndWkuc3RhcnRpbmcgPSByZWN1cnNpdmUgLSAxOworCisgICAgaWYgKCFndWkuaW5fdXNlKQkJCS8qIGZhaWxlZCB0byBzdGFydCBHVUkgKi8KKyAgICB7CisJdGVybWNhcGluaXQob2xkX3Rlcm0pOwkJLyogYmFjayB0byBvbGQgdGVybSBzZXR0aW5ncyAqLworCXNldHRtb2RlKFRNT0RFX1JBVyk7CQkvKiByZXN0YXJ0IFJBVyBtb2RlICovCisjaWZkZWYgRkVBVF9USVRMRQorCXNldF90aXRsZV9kZWZhdWx0cygpOwkJLyogc2V0ICd0aXRsZScgYW5kICdpY29uJyBhZ2FpbiAqLworI2VuZGlmCisgICAgfQorCisgICAgdmltX2ZyZWUob2xkX3Rlcm0pOworCisjaWYgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfWDExKQorICAgIGlmIChndWkuaW5fdXNlKQorCS8qIERpc3BsYXkgZXJyb3IgbWVzc2FnZXMgaW4gYSBkaWFsb2cgbm93LiAqLworCWRpc3BsYXlfZXJyb3JzKCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUFZX0ZPUkspICYmICFkZWZpbmVkKF9fUU5YTlRPX18pCisgICAgLyoKKyAgICAgKiBRdWl0IHRoZSBjdXJyZW50IHByb2Nlc3MgYW5kIGNvbnRpbnVlIGluIHRoZSBjaGlsZC4KKyAgICAgKiBNYWtlcyAiZ3ZpbSBmaWxlIiBkaXNjb25uZWN0IGZyb20gdGhlIHNoZWxsIGl0IHdhcyBzdGFydGVkIGluLgorICAgICAqIERvbid0IGRvIHRoaXMgd2hlbiBWaW0gd2FzIHN0YXJ0ZWQgd2l0aCAiLWYiIG9yIHRoZSAnZicgZmxhZyBpcyBwcmVzZW50CisgICAgICogaW4gJ2d1aW9wdGlvbnMnLgorICAgICAqLworICAgIGlmIChndWkuaW5fdXNlICYmIGRvZm9yaykKKyAgICB7CisJaW50CXBpcGVmZFsyXTsJLyogcGlwZSBiZXR3ZWVuIHBhcmVudCBhbmQgY2hpbGQgKi8KKwlpbnQJcGlwZV9lcnJvcjsKKwljaGFyCWR1bW15OworCXBpZF90CXBpZCA9IC0xOworCisJLyogU2V0dXAgYSBwaXBlIGJldHdlZW4gdGhlIGNoaWxkIGFuZCB0aGUgcGFyZW50LCBzbyB0aGF0IHRoZSBwYXJlbnQKKwkgKiBrbm93cyB3aGVuIHRoZSBjaGlsZCBoYXMgZG9uZSB0aGUgc2V0c2lkKCkgY2FsbCBhbmQgaXMgYWxsb3dlZCB0bworCSAqIGV4aXQuICovCisJcGlwZV9lcnJvciA9IChwaXBlKHBpcGVmZCkgPCAwKTsKKwlwaWQgPSBmb3JrKCk7CisJaWYgKHBpZCA+IDApCSAgICAvKiBQYXJlbnQgKi8KKwl7CisJICAgIC8qIEdpdmUgdGhlIGNoaWxkIHNvbWUgdGltZSB0byBkbyB0aGUgc2V0c2lkKCksIG90aGVyd2lzZSB0aGUKKwkgICAgICogZXhpdCgpIG1heSBraWxsIHRoZSBjaGlsZCB0b28gKHdoZW4gc3RhcnRpbmcgZ3ZpbSBmcm9tIGluc2lkZSBhCisJICAgICAqIGd2aW0pLiAqLworCSAgICBpZiAocGlwZV9lcnJvcikKKwkJdWlfZGVsYXkoMzAwTCwgVFJVRSk7CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBUaGUgcmVhZCByZXR1cm5zIHdoZW4gdGhlIGNoaWxkIGNsb3NlcyB0aGUgcGlwZSAob3Igd2hlbgorCQkgKiB0aGUgY2hpbGQgZGllcyBmb3Igc29tZSByZWFzb24pLiAqLworCQljbG9zZShwaXBlZmRbMV0pOworCQkodm9pZClyZWFkKHBpcGVmZFswXSwgJmR1bW15LCAoc2l6ZV90KTEpOworCQljbG9zZShwaXBlZmRbMF0pOworCSAgICB9CisKKwkgICAgLyogV2hlbiBzd2FwcGluZyBzY3JlZW5zIHdlIG1heSBuZWVkIHRvIGdvIHRvIHRoZSBuZXh0IGxpbmUsIGUuZy4sCisJICAgICAqIGFmdGVyIGEgaGl0LWVudGVyIHByb21wdCBhbmQgdXNpbmcgIjpndWkiLiAqLworCSAgICBpZiAobmV3bGluZV9vbl9leGl0KQorCQltY2hfZXJybXNnKCJcclxuIik7CisKKwkgICAgLyoKKwkgICAgICogVGhlIHBhcmVudCBtdXN0IHNraXAgdGhlIG5vcm1hbCBleGl0KCkgcHJvY2Vzc2luZywgdGhlIGNoaWxkCisJICAgICAqIHdpbGwgZG8gaXQuICBGb3IgZXhhbXBsZSwgR1RLIG1lc3NlcyB1cCBzaWduYWxzIHdoZW4gZXhpdGluZy4KKwkgICAgICovCisJICAgIF9leGl0KDApOworCX0KKworIyBpZiBkZWZpbmVkKEhBVkVfU0VUU0lEKSB8fCBkZWZpbmVkKEhBVkVfU0VUUEdJRCkKKwkvKgorCSAqIENoYW5nZSBvdXIgcHJvY2VzcyBncm91cC4gIE9uIHNvbWUgc3lzdGVtcy9zaGVsbHMgYSBDVFJMLUMgaW4gdGhlCisJICogc2hlbGwgd2hlcmUgVmltIHdhcyBzdGFydGVkIHdvdWxkIG90aGVyd2lzZSBraWxsIGd2aW0hCisJICovCisJaWYgKHBpZCA9PSAwKQkgICAgLyogY2hpbGQgKi8KKyMgIGlmIGRlZmluZWQoSEFWRV9TRVRTSUQpCisJICAgICh2b2lkKXNldHNpZCgpOworIyAgZWxzZQorCSAgICAodm9pZClzZXRwZ2lkKDAsIDApOworIyAgZW5kaWYKKyMgZW5kaWYKKwlpZiAoIXBpcGVfZXJyb3IpCisJeworCSAgICBjbG9zZShwaXBlZmRbMF0pOworCSAgICBjbG9zZShwaXBlZmRbMV0pOworCX0KKworIyBpZiBkZWZpbmVkKEZFQVRfR1VJX0dOT01FKSAmJiBkZWZpbmVkKEZFQVRfU0VTU0lPTikKKwkvKiBUZWxsIHRoZSBzZXNzaW9uIG1hbmFnZXIgb3VyIG5ldyBQSUQgKi8KKwlndWlfbWNoX2ZvcmtlZCgpOworIyBlbmRpZgorICAgIH0KKyNlbHNlCisjIGlmIGRlZmluZWQoX19RTlhOVE9fXykKKyAgICBpZiAoZ3VpLmluX3VzZSAmJiBkb2ZvcmspCisJcHJvY21ncl9kYWVtb24oMCwgUFJPQ01HUl9EQUVNT05fS0VFUFVNQVNLIHwgUFJPQ01HUl9EQUVNT05fTk9DSERJUiB8CisJCVBST0NNR1JfREFFTU9OX05PQ0xPU0UgfCBQUk9DTUdSX0RBRU1PTl9OT0RFVk5VTEwpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICAvKiBJZiB0aGUgR1VJIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LCB0cmlnZ2VyIHRoZSBHVUlFbnRlciBldmVudCAqLworICAgIGlmIChndWkuaW5fdXNlKQorCWFwcGx5X2F1dG9jbWRzKEVWRU5UX0dVSUVOVEVSLCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKKyNlbmRpZgorCisgICAgLS1yZWN1cnNpdmU7Cit9CisKKy8qCisgKiBDYWxsIHRoaXMgd2hlbiB2aW0gc3RhcnRzIHVwLCB3aGV0aGVyIG9yIG5vdCB0aGUgR1VJIGlzIHN0YXJ0ZWQKKyAqLworICAgIHZvaWQKK2d1aV9wcmVwYXJlKGFyZ2MsIGFyZ3YpCisgICAgaW50CSAgICAqYXJnYzsKKyAgICBjaGFyICAgICoqYXJndjsKK3sKKyAgICBndWkuaW5fdXNlID0gRkFMU0U7CQkgICAgLyogTm8gR1VJIHlldCAobWF5YmUgbGF0ZXIpICovCisgICAgZ3VpLnN0YXJ0aW5nID0gRkFMU0U7CSAgICAvKiBObyBHVUkgeWV0IChtYXliZSBsYXRlcikgKi8KKyAgICBndWlfbWNoX3ByZXBhcmUoYXJnYywgYXJndik7Cit9CisKKy8qCisgKiBUcnkgaW5pdGlhbGl6aW5nIHRoZSBHVUkgYW5kIGNoZWNrIGlmIGl0IGNhbiBiZSBzdGFydGVkLgorICogVXNlZCBmcm9tIG1haW4oKSB0byBjaGVjayBlYXJseSBpZiAidmltIC1nIiBjYW4gc3RhcnQgdGhlIEdVSS4KKyAqIFVzZWQgZnJvbSBndWlfaW5pdCgpIHRvIHByZXBhcmUgZm9yIHN0YXJ0aW5nIHRoZSBHVUkuCisgKiBSZXR1cm5zIEZBSUwgb3IgT0suCisgKi8KKyAgICBpbnQKK2d1aV9pbml0X2NoZWNrKCkKK3sKKyAgICBzdGF0aWMgaW50IHJlc3VsdCA9IE1BWUJFOworCisgICAgaWYgKHJlc3VsdCAhPSBNQVlCRSkKKyAgICB7CisJaWYgKHJlc3VsdCA9PSBGQUlMKQorCSAgICBFTVNHKF8oIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIikpOworCXJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZ3VpLnNoZWxsX2NyZWF0ZWQgPSBGQUxTRTsKKyAgICBndWkuZHlpbmcgPSBGQUxTRTsKKyAgICBndWkuaW5fZm9jdXMgPSBUUlVFOwkJLyogc28gdGhlIGd1aWN1cnNvciBzZXR0aW5nIHdvcmtzICovCisgICAgZ3VpLmRyYWdnZWRfc2IgPSBTQkFSX05PTkU7CisgICAgZ3VpLmRyYWdnZWRfd3AgPSBOVUxMOworICAgIGd1aS5wb2ludGVyX2hpZGRlbiA9IEZBTFNFOworICAgIGd1aS5jb2wgPSAwOworICAgIGd1aS5yb3cgPSAwOworICAgIGd1aS5udW1fY29scyA9IENvbHVtbnM7CisgICAgZ3VpLm51bV9yb3dzID0gUm93czsKKworICAgIGd1aS5jdXJzb3JfaXNfdmFsaWQgPSBGQUxTRTsKKyAgICBndWkuc2Nyb2xsX3JlZ2lvbl90b3AgPSAwOworICAgIGd1aS5zY3JvbGxfcmVnaW9uX2JvdCA9IFJvd3MgLSAxOworICAgIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQgPSAwOworICAgIGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0ID0gQ29sdW1ucyAtIDE7CisgICAgZ3VpLmhpZ2hsaWdodF9tYXNrID0gSExfTk9STUFMOworICAgIGd1aS5jaGFyX3dpZHRoID0gMTsKKyAgICBndWkuY2hhcl9oZWlnaHQgPSAxOworICAgIGd1aS5jaGFyX2FzY2VudCA9IDA7CisgICAgZ3VpLmJvcmRlcl93aWR0aCA9IDA7CisKKyAgICBndWkubm9ybV9mb250ID0gTk9GT05UOworI2lmbmRlZiBIQVZFX0dUSzIKKyAgICBndWkuYm9sZF9mb250ID0gTk9GT05UOworICAgIGd1aS5pdGFsX2ZvbnQgPSBOT0ZPTlQ7CisgICAgZ3VpLmJvbGRpdGFsX2ZvbnQgPSBOT0ZPTlQ7CisjIGlmZGVmIEZFQVRfWEZPTlRTRVQKKyAgICBndWkuZm9udHNldCA9IE5PRk9OVFNFVDsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NRU5VCisjIGlmbmRlZiBIQVZFX0dUSzIKKyMgIGlmZGVmIEZPTlRTRVRfQUxXQVlTCisgICAgZ3VpLm1lbnVfZm9udHNldCA9IE5PRk9OVFNFVDsKKyMgIGVsc2UKKyAgICBndWkubWVudV9mb250ID0gTk9GT05UOworIyAgZW5kaWYKKyMgZW5kaWYKKyAgICBndWkubWVudV9pc19hY3RpdmUgPSBUUlVFOwkgICAgLyogZGVmYXVsdDogaW5jbHVkZSBtZW51ICovCisjIGlmbmRlZiBGRUFUX0dVSV9HVEsKKyAgICBndWkubWVudV9oZWlnaHQgPSBNRU5VX0RFRkFVTFRfSEVJR0hUOworICAgIGd1aS5tZW51X3dpZHRoID0gMDsKKyMgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiAoZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgfHwgZGVmaW5lZChGRUFUX0dVSV9BVEhFTkEpKQorICAgIGd1aS50b29sYmFyX2hlaWdodCA9IDA7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfRk9PVEVSKSAmJiBkZWZpbmVkKEZFQVRfR1VJX01PVElGKQorICAgIGd1aS5mb290ZXJfaGVpZ2h0ID0gMDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQkVWQUxfVElQCisgICAgZ3VpLnRvb2x0aXBfZm9udHNldCA9IE5PRk9OVFNFVDsKKyNlbmRpZgorCisgICAgZ3VpLnNjcm9sbGJhcl93aWR0aCA9IGd1aS5zY3JvbGxiYXJfaGVpZ2h0ID0gU0JfREVGQVVMVF9XSURUSDsKKyAgICBndWkucHJldl93cmFwID0gLTE7CisKKyNpZmRlZiBBTFdBWVNfVVNFX0dVSQorICAgIHJlc3VsdCA9IE9LOworI2Vsc2UKKyAgICByZXN1bHQgPSBndWlfbWNoX2luaXRfY2hlY2soKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBjYWxsIHdoaWNoIHN0YXJ0cyB0aGUgR1VJLgorICovCisgICAgdm9pZAorZ3VpX2luaXQoKQoreworICAgIHdpbl9UCSp3cDsKKyAgICBzdGF0aWMgaW50CXJlY3Vyc2l2ZSA9IDA7CisKKyAgICAvKgorICAgICAqIEl0J3MgcG9zc2libGUgdG8gdXNlICI6Z3VpIiBpbiBhIC5ndmltcmMgZmlsZS4gIFRoZSBmaXJzdCBoYWx2ZSBvZiB0aGlzCisgICAgICogZnVuY3Rpb24gd2lsbCB0aGVuIGJlIGV4ZWN1dGVkIGF0IHRoZSBmaXJzdCBjYWxsLCB0aGUgcmVzdCBieSB0aGUKKyAgICAgKiByZWN1cnNpdmUgY2FsbC4gIFRoaXMgYWxsb3cgdGhlIHNoZWxsIHRvIGJlIG9wZW5lZCBoYWxmd2F5IHJlYWRpbmcgYQorICAgICAqIGd2aW1yYyBmaWxlLgorICAgICAqLworICAgIGlmICghcmVjdXJzaXZlKQorICAgIHsKKwkrK3JlY3Vyc2l2ZTsKKworCWNsaXBfaW5pdChUUlVFKTsKKworCS8qIElmIGNhbid0IGluaXRpYWxpemUsIGRvbid0IHRyeSBkb2luZyB0aGUgcmVzdCAqLworCWlmIChndWlfaW5pdF9jaGVjaygpID09IEZBSUwpCisJeworCSAgICAtLXJlY3Vyc2l2ZTsKKwkgICAgY2xpcF9pbml0KEZBTFNFKTsKKwkgICAgcmV0dXJuOworCX0KKworCS8qCisJICogU2V0IHVwIHN5c3RlbS13aWRlIGRlZmF1bHQgbWVudXMuCisJICovCisjaWYgZGVmaW5lZChTWVNfTUVOVV9GSUxFKSAmJiBkZWZpbmVkKEZFQVRfTUVOVSkKKwlpZiAodmltX3N0cmNocihwX2dvLCBHT19OT1NZU01FTlUpID09IE5VTEwpCisJeworCSAgICBzeXNfbWVudSA9IFRSVUU7CisJICAgIGRvX3NvdXJjZSgoY2hhcl91ICopU1lTX01FTlVfRklMRSwgRkFMU0UsIEZBTFNFKTsKKwkgICAgc3lzX21lbnUgPSBGQUxTRTsKKwl9CisjZW5kaWYKKworCS8qCisJICogU3dpdGNoIG9uIHRoZSBtb3VzZSBieSBkZWZhdWx0LCB1bmxlc3MgdGhlIHVzZXIgY2hhbmdlZCBpdCBhbHJlYWR5LgorCSAqIFRoaXMgY2FuIHRoZW4gYmUgY2hhbmdlZCBpbiB0aGUgLmd2aW1yYy4KKwkgKi8KKwlpZiAoIW9wdGlvbl93YXNfc2V0KChjaGFyX3UgKikibW91c2UiKSkKKwkgICAgc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0KChjaGFyX3UgKikibW91c2UiLCAtMSwKKwkJCQkJCSAgICAgKGNoYXJfdSAqKSJhIiwgT1BUX0ZSRUUpOworCisJLyoKKwkgKiBJZiAtVSBvcHRpb24gZ2l2ZW4sIHVzZSBvbmx5IHRoZSBpbml0aWFsaXphdGlvbnMgZnJvbSB0aGF0IGZpbGUgYW5kCisJICogbm90aGluZyBlbHNlLiAgU2tpcCBhbGwgaW5pdGlhbGl6YXRpb25zIGZvciAiLVUgTk9ORSIgb3IgIi11IE5PUkMiLgorCSAqLworCWlmICh1c2VfZ3ZpbXJjICE9IE5VTEwpCisJeworCSAgICBpZiAoU1RSQ01QKHVzZV9ndmltcmMsICJOT05FIikgIT0gMAorCQkgICAgJiYgU1RSQ01QKHVzZV9ndmltcmMsICJOT1JDIikgIT0gMAorCQkgICAgJiYgZG9fc291cmNlKHVzZV9ndmltcmMsIEZBTFNFLCBGQUxTRSkgIT0gT0spCisJCUVNU0cyKF8oIkUyMzA6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIiksIHVzZV9ndmltcmMpOworCX0KKwllbHNlCisJeworCSAgICAvKgorCSAgICAgKiBHZXQgc3lzdGVtIHdpZGUgZGVmYXVsdHMgZm9yIGd2aW0sIG9ubHkgd2hlbiBmaWxlIG5hbWUgZGVmaW5lZC4KKwkgICAgICovCisjaWZkZWYgU1lTX0dWSU1SQ19GSUxFCisJICAgIGRvX3NvdXJjZSgoY2hhcl91ICopU1lTX0dWSU1SQ19GSUxFLCBGQUxTRSwgRkFMU0UpOworI2VuZGlmCisKKwkgICAgLyoKKwkgICAgICogVHJ5IHRvIHJlYWQgR1VJIGluaXRpYWxpemF0aW9uIGNvbW1hbmRzIGZyb20gdGhlIGZvbGxvd2luZworCSAgICAgKiBwbGFjZXM6CisJICAgICAqIC0gZW52aXJvbm1lbnQgdmFyaWFibGUgR1ZJTUlOSVQKKwkgICAgICogLSB0aGUgdXNlciBndmltcmMgZmlsZSAofi8uZ3ZpbXJjKQorCSAgICAgKiAtIHRoZSBzZWNvbmQgdXNlciBndmltcmMgZmlsZSAoJFZJTS8uZ3ZpbXJjIGZvciBEb3MpCisJICAgICAqIC0gdGhlIHRoaXJkIHVzZXIgZ3ZpbXJjIGZpbGUgKCRWSU0vLmd2aW1yYyBmb3IgQW1pZ2EpCisJICAgICAqIFRoZSBmaXJzdCB0aGF0IGV4aXN0cyBpcyB1c2VkLCB0aGUgcmVzdCBpcyBpZ25vcmVkLgorCSAgICAgKi8KKwkgICAgaWYgKHByb2Nlc3NfZW52KChjaGFyX3UgKikiR1ZJTUlOSVQiLCBGQUxTRSkgPT0gRkFJTAorCQkgJiYgZG9fc291cmNlKChjaGFyX3UgKilVU1JfR1ZJTVJDX0ZJTEUsIFRSVUUsIEZBTFNFKSA9PSBGQUlMCisjaWZkZWYgVVNSX0dWSU1SQ19GSUxFMgorCQkgJiYgZG9fc291cmNlKChjaGFyX3UgKilVU1JfR1ZJTVJDX0ZJTEUyLCBUUlVFLCBGQUxTRSkgPT0gRkFJTAorI2VuZGlmCisJCQkJKQorCSAgICB7CisjaWZkZWYgVVNSX0dWSU1SQ19GSUxFMworCQkodm9pZClkb19zb3VyY2UoKGNoYXJfdSAqKVVTUl9HVklNUkNfRklMRTMsIFRSVUUsIEZBTFNFKTsKKyNlbmRpZgorCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogUmVhZCBpbml0aWFsaXphdGlvbiBjb21tYW5kcyBmcm9tICIuZ3ZpbXJjIiBpbiBjdXJyZW50CisJICAgICAqIGRpcmVjdG9yeS4gIFRoaXMgaXMgb25seSBkb25lIGlmIHRoZSAnZXhyYycgb3B0aW9uIGlzIHNldC4KKwkgICAgICogQmVjYXVzZSBvZiBzZWN1cml0eSByZWFzb25zIHdlIGRpc2FsbG93IHNoZWxsIGFuZCB3cml0ZQorCSAgICAgKiBjb21tYW5kcyBub3csIGV4Y2VwdCBmb3IgdW5peCBpZiB0aGUgZmlsZSBpcyBvd25lZCBieSB0aGUgdXNlcgorCSAgICAgKiBvciAnc2VjdXJlJyBvcHRpb24gaGFzIGJlZW4gcmVzZXQgaW4gZW52aXJvbm1lbnQgb2YgZ2xvYmFsCisJICAgICAqICIuZ3ZpbXJjIi4KKwkgICAgICogT25seSBkbyB0aGlzIGlmIEdWSU1SQ19GSUxFIGlzIG5vdCB0aGUgc2FtZSBhcyBVU1JfR1ZJTVJDX0ZJTEUsCisJICAgICAqIFVTUl9HVklNUkNfRklMRTIsIFVTUl9HVklNUkNfRklMRTMgb3IgU1lTX0dWSU1SQ19GSUxFLgorCSAgICAgKi8KKwkgICAgaWYgKHBfZXhyYykKKwkgICAgeworI2lmZGVmIFVOSVgKKwkJeworCQkgICAgc3RydWN0IHN0YXQgczsKKworCQkgICAgLyogaWYgIi5ndmltcmMiIGZpbGUgaXMgbm90IG93bmVkIGJ5IHVzZXIsIHNldCAnc2VjdXJlJworCQkgICAgICogbW9kZSAqLworCQkgICAgaWYgKG1jaF9zdGF0KEdWSU1SQ19GSUxFLCAmcykgfHwgcy5zdF91aWQgIT0gZ2V0dWlkKCkpCisJCQlzZWN1cmUgPSBwX3NlY3VyZTsKKwkJfQorI2Vsc2UKKwkJc2VjdXJlID0gcF9zZWN1cmU7CisjZW5kaWYKKworCQlpZiAoICAgICAgIGZ1bGxwYXRoY21wKChjaGFyX3UgKilVU1JfR1ZJTVJDX0ZJTEUsCisJCQkJICAgICAoY2hhcl91ICopR1ZJTVJDX0ZJTEUsIEZBTFNFKSAhPSBGUENfU0FNRQorI2lmZGVmIFNZU19HVklNUkNfRklMRQorCQkJJiYgZnVsbHBhdGhjbXAoKGNoYXJfdSAqKVNZU19HVklNUkNfRklMRSwKKwkJCQkgICAgIChjaGFyX3UgKilHVklNUkNfRklMRSwgRkFMU0UpICE9IEZQQ19TQU1FCisjZW5kaWYKKyNpZmRlZiBVU1JfR1ZJTVJDX0ZJTEUyCisJCQkmJiBmdWxscGF0aGNtcCgoY2hhcl91ICopVVNSX0dWSU1SQ19GSUxFMiwKKwkJCQkgICAgIChjaGFyX3UgKilHVklNUkNfRklMRSwgRkFMU0UpICE9IEZQQ19TQU1FCisjZW5kaWYKKyNpZmRlZiBVU1JfR1ZJTVJDX0ZJTEUzCisJCQkmJiBmdWxscGF0aGNtcCgoY2hhcl91ICopVVNSX0dWSU1SQ19GSUxFMywKKwkJCQkgICAgIChjaGFyX3UgKilHVklNUkNfRklMRSwgRkFMU0UpICE9IEZQQ19TQU1FCisjZW5kaWYKKwkJCSkKKwkJICAgIGRvX3NvdXJjZSgoY2hhcl91ICopR1ZJTVJDX0ZJTEUsIFRSVUUsIEZBTFNFKTsKKworCQlpZiAoc2VjdXJlID09IDIpCisJCSAgICBuZWVkX3dhaXRfcmV0dXJuID0gVFJVRTsKKwkJc2VjdXJlID0gMDsKKwkgICAgfQorCX0KKworCWlmIChuZWVkX3dhaXRfcmV0dXJuIHx8IG1zZ19kaWRhbnkpCisJICAgIHdhaXRfcmV0dXJuKFRSVUUpOworCisJLS1yZWN1cnNpdmU7CisgICAgfQorCisgICAgLyogSWYgcmVjdXJzaXZlIGNhbGwgb3BlbmVkIHRoZSBzaGVsbCwgcmV0dXJuIGhlcmUgZnJvbSB0aGUgZmlyc3QgY2FsbCAqLworICAgIGlmIChndWkuaW5fdXNlKQorCXJldHVybjsKKworICAgIC8qCisgICAgICogQ3JlYXRlIHRoZSBHVUkgc2hlbGwuCisgICAgICovCisgICAgZ3VpLmluX3VzZSA9IFRSVUU7CQkvKiBNdXN0IGJlIHNldCBhZnRlciBtZW51cyBoYXZlIGJlZW4gc2V0IHVwICovCisgICAgaWYgKGd1aV9tY2hfaW5pdCgpID09IEZBSUwpCisJZ290byBlcnJvcjsKKworICAgIC8qIEF2b2lkIGEgZGVsYXkgZm9yIGFuIGVycm9yIG1lc3NhZ2UgdGhhdCB3YXMgcHJpbnRlZCBpbiB0aGUgdGVybWluYWwKKyAgICAgKiB3aGVyZSBWaW0gd2FzIHN0YXJ0ZWQuICovCisgICAgZW1zZ19vbl9kaXNwbGF5ID0gRkFMU0U7CisgICAgbXNnX3Njcm9sbGVkID0gMDsKKyAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisgICAgbXNnX2RpZGFueSA9IEZBTFNFOworCisgICAgLyoKKyAgICAgKiBDaGVjayB2YWxpZGl0eSBvZiBhbnkgZ2VuZXJpYyByZXNvdXJjZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGxvYWRlZC4KKyAgICAgKi8KKyAgICBpZiAoZ3VpLmJvcmRlcl93aWR0aCA8IDApCisJZ3VpLmJvcmRlcl93aWR0aCA9IDA7CisKKyAgICAvKgorICAgICAqIFNldCB1cCB0aGUgZm9udHMuICBGaXJzdCB1c2UgYSBmb250IHNwZWNpZmllZCB3aXRoICItZm4iIG9yICItZm9udCIuCisgICAgICovCisgICAgaWYgKGZvbnRfYXJndW1lbnQgIT0gTlVMTCkKKwlzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikiZ2ZuIiwgMEwsIChjaGFyX3UgKilmb250X2FyZ3VtZW50LCAwKTsKKyAgICBpZiAoCisjaWZkZWYgRkVBVF9YRk9OVFNFVAorCSAgICAoKnBfZ3VpZm9udHNldCA9PSBOVUwKKwkgICAgIHx8IGd1aV9pbml0X2ZvbnQocF9ndWlmb250c2V0LCBUUlVFKSA9PSBGQUlMKSAmJgorI2VuZGlmCisJICAgIGd1aV9pbml0X2ZvbnQoKnBfZ3VpZm9udCA9PSBOVUwgPyBobF9nZXRfZm9udF9uYW1lKCkKKwkJCQkJCSAgOiBwX2d1aWZvbnQsIEZBTFNFKSA9PSBGQUlMKQorICAgIHsKKwlFTVNHKF8oIkU2NjU6IENhbm5vdCBzdGFydCBHVUksIG5vIHZhbGlkIGZvbnQgZm91bmQiKSk7CisJZ290byBlcnJvcjI7CisgICAgfQorI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoZ3VpX2dldF93aWRlX2ZvbnQoKSA9PSBGQUlMKQorCUVNU0coXygiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIikpOworI2VuZGlmCisKKyAgICBndWkubnVtX2NvbHMgPSBDb2x1bW5zOworICAgIGd1aS5udW1fcm93cyA9IFJvd3M7CisgICAgZ3VpX3Jlc2V0X3Njcm9sbF9yZWdpb24oKTsKKworICAgIC8qIENyZWF0ZSBpbml0aWFsIHNjcm9sbGJhcnMgKi8KKyAgICBGT1JfQUxMX1dJTkRPV1Mod3ApCisgICAgeworCWd1aV9jcmVhdGVfc2Nyb2xsYmFyKCZ3cC0+d19zY3JvbGxiYXJzW1NCQVJfTEVGVF0sIFNCQVJfTEVGVCwgd3ApOworCWd1aV9jcmVhdGVfc2Nyb2xsYmFyKCZ3cC0+d19zY3JvbGxiYXJzW1NCQVJfUklHSFRdLCBTQkFSX1JJR0hULCB3cCk7CisgICAgfQorICAgIGd1aV9jcmVhdGVfc2Nyb2xsYmFyKCZndWkuYm90dG9tX3NiYXIsIFNCQVJfQk9UVE9NLCBOVUxMKTsKKworI2lmZGVmIEZFQVRfTUVOVQorICAgIGd1aV9jcmVhdGVfaW5pdGlhbF9tZW51cyhyb290X21lbnUpOworI2VuZGlmCisjaWZkZWYgRkVBVF9TVU5fV09SS1NIT1AKKyAgICBpZiAodXNpbmdTdW5Xb3JrU2hvcCkKKwl3b3Jrc2hvcF9pbml0KCk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1NJR05fSUNPTlMKKyAgICBzaWduX2d1aV9zdGFydGVkKCk7CisjZW5kaWYKKworICAgIC8qIENvbmZpZ3VyZSB0aGUgZGVzaXJlZCBtZW51IGFuZCBzY3JvbGxiYXJzICovCisgICAgZ3VpX2luaXRfd2hpY2hfY29tcG9uZW50cyhOVUxMKTsKKworICAgIC8qIEFsbCBjb21wb25lbnRzIG9mIHRoZSBHVUkgaGF2ZSBiZWVuIGNyZWF0ZWQgbm93ICovCisgICAgZ3VpLnNoZWxsX2NyZWF0ZWQgPSBUUlVFOworCisjaWZuZGVmIEZFQVRfR1VJX0dUSworICAgIC8qIFNldCB0aGUgc2hlbGwgc2l6ZSwgYWRqdXN0ZWQgZm9yIHRoZSBzY3JlZW4gc2l6ZS4gIEZvciBHVEsgdGhpcyBvbmx5CisgICAgICogd29ya3MgYWZ0ZXIgdGhlIHNoZWxsIGhhcyBiZWVuIG9wZW5lZCwgdGh1cyBpdCBpcyBmdXJ0aGVyIGRvd24uICovCisgICAgZ3VpX3NldF9zaGVsbHNpemUoRkFMU0UsIFRSVUUpOworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgJiYgZGVmaW5lZChGRUFUX01FTlUpCisgICAgLyogTmVlZCB0byBzZXQgdGhlIHNpemUgb2YgdGhlIG1lbnViYXIgYWZ0ZXIgYWxsIHRoZSBtZW51cyBoYXZlIGJlZW4KKyAgICAgKiBjcmVhdGVkLiAqLworICAgIGd1aV9tY2hfY29tcHV0ZV9tZW51X2hlaWdodCgoV2lkZ2V0KTApOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEFjdHVhbGx5IG9wZW4gdGhlIEdVSSBzaGVsbC4KKyAgICAgKi8KKyAgICBpZiAoZ3VpX21jaF9vcGVuKCkgIT0gRkFJTCkKKyAgICB7CisjaWZkZWYgRkVBVF9USVRMRQorCW1ha2V0aXRsZSgpOworCXJlc2V0dGl0bGUoKTsKKyNlbmRpZgorCWluaXRfZ3VpX29wdGlvbnMoKTsKKyNpZmRlZiBGRUFUX0FSQUJJQworCS8qIE91ciBHVUkgY2FuJ3QgZG8gYmlkaS4gKi8KKwlwX3RiaWRpID0gRkFMU0U7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9HVEsKKwkvKiBHaXZlIEdUSysgYSBjaGFuY2UgdG8gcHV0IGFsbCB3aWRnZXQncyBpbnRvIHBsYWNlLiAqLworCWd1aV9tY2hfdXBkYXRlKCk7CisJLyogTm93IG1ha2Ugc3VyZSB0aGUgc2hlbGwgZml0cyBvbiB0aGUgc2NyZWVuLiAqLworCWd1aV9zZXRfc2hlbGxzaXplKEZBTFNFLCBUUlVFKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCWlmIChzdGFydGluZyA9PSAwICYmIHVzaW5nTmV0YmVhbnMpCisJICAgIC8qIFRlbGwgdGhlIGNsaWVudCB0aGF0IGl0IGNhbiBzdGFydCBzZW5kaW5nIGNvbW1hbmRzLiAqLworCSAgICBuZXRiZWFuc19zdGFydHVwX2RvbmUoKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9YSU0pICYmIGRlZmluZWQoRkVBVF9HVUlfR1RLKQorCWlmICghaW1feGltX2lzdmFsaWRfaW1hY3RpdmF0ZSgpKQorCSAgICBFTVNHKF8oIkU1OTk6IFZhbHVlIG9mICdpbWFjdGl2YXRla2V5JyBpcyBpbnZhbGlkIikpOworI2VuZGlmCisKKwlyZXR1cm47CisgICAgfQorCitlcnJvcjI6CisjaWZkZWYgRkVBVF9HVUlfWDExCisgICAgLyogdW5kbyBndWlfbWNoX2luaXQoKSAqLworICAgIGd1aV9tY2hfdW5pbml0KCk7CisjZW5kaWYKKworZXJyb3I6CisgICAgZ3VpLmluX3VzZSA9IEZBTFNFOworICAgIGNsaXBfaW5pdChGQUxTRSk7Cit9CisKKworICAgIHZvaWQKK2d1aV9leGl0KHJjKQorICAgIGludAkJcmM7Cit7CisjaWZuZGVmIF9fQkVPU19fCisgICAgLyogZG9uJ3QgZnJlZSB0aGUgZm9udHMsIGl0IGxlYWRzIHRvIGEgQlVTIGVycm9yCisgICAgICogcmljaGFyZEB3aGl0ZXF1ZWVuLmNvbSBKdWwgOTkgKi8KKyAgICBmcmVlX2hpZ2hsaWdodF9mb250cygpOworI2VuZGlmCisgICAgZ3VpLmluX3VzZSA9IEZBTFNFOworICAgIGd1aV9tY2hfZXhpdChyYyk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0dUSykgfHwgZGVmaW5lZChGRUFUX0dVSV9YMTEpIHx8IGRlZmluZWQoRkVBVF9HVUlfTVNXSU4pIFwKKwl8fCBkZWZpbmVkKEZFQVRfR1VJX1BIT1RPTikgfHwgZGVmaW5lZChGRUFUX0dVSV9NQUMpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIEdVSSBzaGVsbCBpcyBjbG9zZWQgYnkgdGhlIHVzZXIuICBJZiB0aGVyZSBhcmUgbm8gY2hhbmdlZAorICogZmlsZXMgVmltIGV4aXRzLCBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIGRpYWxvZyB0byBhc2sgdGhlIHVzZXIgd2hhdCB0bworICogZG8uCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgVmltIHNob3VsZCBOT1QgZXhpdCEKKyAqLworICAgIHZvaWQKK2d1aV9zaGVsbF9jbG9zZWQoKQoreworICAgIGNtZG1vZF9UCSAgICBzYXZlX2NtZG1vZDsKKworICAgIHNhdmVfY21kbW9kID0gY21kbW9kOworCisgICAgLyogT25seSBleGl0IHdoZW4gdGhlcmUgYXJlIG5vIGNoYW5nZWQgZmlsZXMgKi8KKyAgICBleGl0aW5nID0gVFJVRTsKKyMgaWZkZWYgRkVBVF9CUk9XU0UKKyAgICBjbWRtb2QuYnJvd3NlID0gVFJVRTsKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKQorICAgIGNtZG1vZC5jb25maXJtID0gVFJVRTsKKyMgZW5kaWYKKyAgICAvKiBJZiB0aGVyZSBhcmUgY2hhbmdlZCBidWZmZXJzLCBwcmVzZW50IHRoZSB1c2VyIHdpdGggYSBkaWFsb2cgaWYKKyAgICAgKiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGdpdmUgYW4gZXJyb3IgbWVzc2FnZS4gKi8KKyAgICBpZiAoIWNoZWNrX2NoYW5nZWRfYW55KEZBTFNFKSkKKwlnZXRvdXQoMCk7CisKKyAgICBleGl0aW5nID0gRkFMU0U7CisgICAgY21kbW9kID0gc2F2ZV9jbWRtb2Q7CisgICAgc2V0Y3Vyc29yKCk7CQkvKiBwb3NpdGlvbiBjdXJzb3IgKi8KKyAgICBvdXRfZmx1c2goKTsKK30KKyNlbmRpZgorCisvKgorICogU2V0IHRoZSBmb250LiAgImZvbnRfbGlzdCIgaXMgYSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZvbnQgbmFtZXMuICBUaGUKKyAqIGZpcnN0IGZvbnQgbmFtZSB0aGF0IHdvcmtzIGlzIHVzZWQuICBJZiBub25lIGlzIGZvdW5kLCB1c2UgdGhlIGRlZmF1bHQKKyAqIGZvbnQuCisgKiBJZiAiZm9udHNldCIgaXMgVFJVRSwgdGhlICJmb250X2xpc3QiIGlzIHVzZWQgYXMgb25lIG5hbWUgZm9yIHRoZSBmb250c2V0LgorICogUmV0dXJuIE9LIHdoZW4gYWJsZSB0byBzZXQgdGhlIGZvbnQuICBXaGVuIGl0IGZhaWxlZCBGQUlMIGlzIHJldHVybmVkIGFuZAorICogdGhlIGZvbnRzIGFyZSB1bmNoYW5nZWQuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIGludAorZ3VpX2luaXRfZm9udChmb250X2xpc3QsIGZvbnRzZXQpCisgICAgY2hhcl91CSpmb250X2xpc3Q7CisgICAgaW50CQlmb250c2V0OworeworI2RlZmluZSBGT05UTEVOIDMyMAorICAgIGNoYXJfdQlmb250X25hbWVbRk9OVExFTl07CisgICAgaW50CQlmb250X2xpc3RfZW1wdHkgPSBGQUxTRTsKKyAgICBpbnQJCXJldCA9IEZBSUw7CisKKyAgICBpZiAoIWd1aS5pbl91c2UpCisJcmV0dXJuIEZBSUw7CisKKyAgICBmb250X25hbWVbMF0gPSBOVUw7CisgICAgaWYgKCpmb250X2xpc3QgPT0gTlVMKQorCWZvbnRfbGlzdF9lbXB0eSA9IFRSVUU7CisgICAgZWxzZQorICAgIHsKKyNpZmRlZiBGRUFUX1hGT05UU0VUCisJLyogV2hlbiB1c2luZyBhIGZvbnRzZXQsIHRoZSB3aG9sZSBsaXN0IG9mIGZvbnRzIGlzIG9uZSBuYW1lLiAqLworCWlmIChmb250c2V0KQorCSAgICByZXQgPSBndWlfbWNoX2luaXRfZm9udChmb250X2xpc3QsIFRSVUUpOworCWVsc2UKKyNlbmRpZgorCSAgICB3aGlsZSAoKmZvbnRfbGlzdCAhPSBOVUwpCisJICAgIHsKKwkJLyogSXNvbGF0ZSBvbmUgY29tbWEgc2VwYXJhdGVkIGZvbnQgbmFtZS4gKi8KKwkJKHZvaWQpY29weV9vcHRpb25fcGFydCgmZm9udF9saXN0LCBmb250X25hbWUsIEZPTlRMRU4sICIsIik7CisKKwkJLyogQ2FyZWZ1bCEhISAgVGhlIFdpbjMyIHZlcnNpb24gb2YgZ3VpX21jaF9pbml0X2ZvbnQoKSwgd2hlbgorCQkgKiBjYWxsZWQgd2l0aCAiKiIgd2lsbCBjaGFuZ2UgcF9ndWlmb250IHRvIHRoZSBzZWxlY3RlZCBmb250CisJCSAqIG5hbWUsIHdoaWNoIGZyZWVzIHRoZSBvbGQgdmFsdWUuICBUaGlzIG1ha2VzIGZvbnRfbGlzdAorCQkgKiBpbnZhbGlkLiAgVGh1cyB3aGVuIE9LIGlzIHJldHVybmVkIGhlcmUsIGZvbnRfbGlzdCBtdXN0IG5vCisJCSAqIGxvbmdlciBiZSB1c2VkISAqLworCQlpZiAoZ3VpX21jaF9pbml0X2ZvbnQoZm9udF9uYW1lLCBGQUxTRSkgPT0gT0spCisJCXsKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpICYmICFkZWZpbmVkKEhBVkVfR1RLMikKKwkJICAgIC8qIElmIGl0J3MgYSBVbmljb2RlIGZvbnQsIHRyeSBzZXR0aW5nICdndWlmb250d2lkZScgdG8gYQorCQkgICAgICogc2ltaWxhciBkb3VibGUtd2lkdGggZm9udC4gKi8KKwkJICAgIGlmICgocF9ndWlmb250d2lkZSA9PSBOVUxMIHx8ICpwX2d1aWZvbnR3aWRlID09IE5VTCkKKwkJCQkmJiBzdHJzdHIoKGNoYXIgKilmb250X25hbWUsICIxMDY0NiIpICE9IE5VTEwpCisJCQlzZXRfZ3VpZm9udHdpZGUoZm9udF9uYW1lKTsKKyNlbmRpZgorCQkgICAgcmV0ID0gT0s7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisgICAgfQorCisgICAgaWYgKHJldCAhPSBPSworCSAgICAmJiBTVFJDTVAoZm9udF9saXN0LCAiKiIpICE9IDAKKwkgICAgJiYgKGZvbnRfbGlzdF9lbXB0eSB8fCBndWkubm9ybV9mb250ID09IE5PRk9OVCkpCisgICAgeworCS8qCisJICogQ291bGRuJ3QgbG9hZCBhbnkgZm9udCBpbiAnZm9udF9saXN0Jywga2VlcCB0aGUgY3VycmVudCBmb250IGlmCisJICogdGhlcmUgaXMgb25lLiAgSWYgJ2ZvbnRfbGlzdCcgaXMgZW1wdHksIG9yIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQKKwkgKiBmb250LCB0ZWxsIGd1aV9tY2hfaW5pdF9mb250KCkgdG8gdHJ5IHRvIGZpbmQgYSBmb250IHdlIGNhbiBsb2FkLgorCSAqLworCXJldCA9IGd1aV9tY2hfaW5pdF9mb250KE5VTEwsIEZBTFNFKTsKKyAgICB9CisKKyAgICBpZiAocmV0ID09IE9LKQorICAgIHsKKyNpZm5kZWYgSEFWRV9HVEsyCisJLyogU2V0IG5vcm1hbCBmb250IGFzIGN1cnJlbnQgZm9udCAqLworIyBpZmRlZiBGRUFUX1hGT05UU0VUCisJaWYgKGd1aS5mb250c2V0ICE9IE5PRk9OVFNFVCkKKwkgICAgZ3VpX21jaF9zZXRfZm9udHNldChndWkuZm9udHNldCk7CisJZWxzZQorIyBlbmRpZgorCSAgICBndWlfbWNoX3NldF9mb250KGd1aS5ub3JtX2ZvbnQpOworI2VuZGlmCisJZ3VpX3NldF9zaGVsbHNpemUoRkFMU0UsCisjaWZkZWYgTVNXSU4KKwkJVFJVRQorI2Vsc2UKKwkJRkFMU0UKKyNlbmRpZgorCQkpOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpIHx8IGRlZmluZWQoUFJPVE8pCisjIGlmbmRlZiBIQVZFX0dUSzIKKy8qCisgKiBUcnkgc2V0dGluZyAnZ3VpZm9udHdpZGUnIHRvIGEgZm9udCB0d2ljZSBhcyB3aWRlIGFzICJuYW1lIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfZ3VpZm9udHdpZGUobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgaW50CQlpID0gMDsKKyAgICBjaGFyX3UJd2lkZV9uYW1lW0ZPTlRMRU4gKyAxMF07IC8qIHJvb20gZm9yIDIgKiB3aWR0aCBhbmQgJyonICovCisgICAgY2hhcl91CSp3cCA9IE5VTEw7CisgICAgY2hhcl91CSpwOworICAgIEd1aUZvbnQJZm9udDsKKworICAgIHdwID0gd2lkZV9uYW1lOworICAgIGZvciAocCA9IG5hbWU7ICpwICE9IE5VTDsgKytwKQorICAgIHsKKwkqd3ArKyA9ICpwOworCWlmICgqcCA9PSAnLScpCisJeworCSAgICArK2k7CisJICAgIGlmIChpID09IDYpCQkvKiBmb250IHR5cGU6IGNoYW5nZSAiLS0iIHRvICItKi0iICovCisJICAgIHsKKwkJaWYgKHBbMV0gPT0gJy0nKQorCQkgICAgKndwKysgPSAnKic7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoaSA9PSAxMikJLyogZm91bmQgdGhlIHdpZHRoICovCisJICAgIHsKKwkJKytwOworCQlpID0gZ2V0ZGlnaXRzKCZwKTsKKwkJaWYgKGkgIT0gMCkKKwkJeworCQkgICAgLyogRG91YmxlIHRoZSB3aWR0aCBzcGVjaWZpY2F0aW9uLiAqLworCQkgICAgc3ByaW50ZigoY2hhciAqKXdwLCAiJWQlcyIsIGkgKiAyLCBwKTsKKwkJICAgIGZvbnQgPSBndWlfbWNoX2dldF9mb250KHdpZGVfbmFtZSwgRkFMU0UpOworCQkgICAgaWYgKGZvbnQgIT0gTk9GT05UKQorCQkgICAgeworCQkJZ3VpLndpZGVfZm9udCA9IGZvbnQ7CisJCQlzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QoKGNoYXJfdSAqKSJnZnciLCAtMSwKKwkJCQkJCQkgd2lkZV9uYW1lLCBPUFRfRlJFRSk7CisJCSAgICB9CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorfQorIyBlbmRpZiAvKiAhSEFWRV9HVEsyICovCisKKy8qCisgKiBHZXQgdGhlIGZvbnQgZm9yICdndWlmb250d2lkZScuCisgKiBSZXR1cm4gRkFJTCBmb3IgYW4gaW52YWxpZCBmb250IG5hbWUuCisgKi8KKyAgICBpbnQKK2d1aV9nZXRfd2lkZV9mb250KCkKK3sKKyAgICBHdWlGb250CWZvbnQgPSBOT0ZPTlQ7CisgICAgY2hhcl91CWZvbnRfbmFtZVtGT05UTEVOXTsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBpZiAoIWd1aS5pbl91c2UpCSAgICAvKiBDYW4ndCBhbGxvY2F0ZSBmb250IHlldCwgYXNzdW1lIGl0J3MgT0suICovCisJcmV0dXJuIE9LOwkgICAgLyogV2lsbCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgbGF0ZXIuICovCisKKyAgICBpZiAocF9ndWlmb250d2lkZSAhPSBOVUxMICYmICpwX2d1aWZvbnR3aWRlICE9IE5VTCkKKyAgICB7CisJZm9yIChwID0gcF9ndWlmb250d2lkZTsgKnAgIT0gTlVMOyApCisJeworCSAgICAvKiBJc29sYXRlIG9uZSBjb21tYSBzZXBhcmF0ZWQgZm9udCBuYW1lLiAqLworCSAgICAodm9pZCljb3B5X29wdGlvbl9wYXJ0KCZwLCBmb250X25hbWUsIEZPTlRMRU4sICIsIik7CisJICAgIGZvbnQgPSBndWlfbWNoX2dldF9mb250KGZvbnRfbmFtZSwgRkFMU0UpOworCSAgICBpZiAoZm9udCAhPSBOT0ZPTlQpCisJCWJyZWFrOworCX0KKwlpZiAoZm9udCA9PSBOT0ZPTlQpCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKworICAgIGd1aV9tY2hfZnJlZV9mb250KGd1aS53aWRlX2ZvbnQpOworI2lmZGVmIEhBVkVfR1RLMgorICAgIC8qIEF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkIGlmICdndWlmb250d2lkZScgaXMgZXF1YWwgdG8gJ2d1aWZvbnQnLiAqLworICAgIGlmIChmb250ICE9IE5PRk9OVCAmJiBndWkubm9ybV9mb250ICE9IE5PRk9OVAorCQkJICYmIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZXF1YWwoZm9udCwgZ3VpLm5vcm1fZm9udCkpCisgICAgeworCWd1aS53aWRlX2ZvbnQgPSBOT0ZPTlQ7CisJZ3VpX21jaF9mcmVlX2ZvbnQoZm9udCk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCWd1aS53aWRlX2ZvbnQgPSBmb250OworICAgIHJldHVybiBPSzsKK30KKyNlbmRpZgorCisgICAgdm9pZAorZ3VpX3NldF9jdXJzb3Iocm93LCBjb2wpCisgICAgaW50CSAgICByb3c7CisgICAgaW50CSAgICBjb2w7Cit7CisgICAgZ3VpLnJvdyA9IHJvdzsKKyAgICBndWkuY29sID0gY29sOworfQorCisvKgorICogZ3VpX2NoZWNrX3BvcyAtIGNoZWNrIGlmIHRoZSBjdXJzb3IgaXMgb24gdGhlIHNjcmVlbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitndWlfY2hlY2tfcG9zKCkKK3sKKyAgICBpZiAoZ3VpLnJvdyA+PSBzY3JlZW5fUm93cykKKwlndWkucm93ID0gc2NyZWVuX1Jvd3MgLSAxOworICAgIGlmIChndWkuY29sID49IHNjcmVlbl9Db2x1bW5zKQorCWd1aS5jb2wgPSBzY3JlZW5fQ29sdW1ucyAtIDE7CisgICAgaWYgKGd1aS5jdXJzb3Jfcm93ID49IHNjcmVlbl9Sb3dzIHx8IGd1aS5jdXJzb3JfY29sID49IHNjcmVlbl9Db2x1bW5zKQorCWd1aS5jdXJzb3JfaXNfdmFsaWQgPSBGQUxTRTsKK30KKworLyoKKyAqIFJlZHJhdyB0aGUgY3Vyc29yIGlmIG5lY2Vzc2FyeSBvciB3aGVuIGZvcmNlZC4KKyAqIENhcmVmdWw6IFRoZSBjb250ZW50cyBvZiBTY3JlZW5MaW5lc1tdIG11c3QgbWF0Y2ggd2hhdCBpcyBvbiB0aGUgc2NyZWVuLAorICogb3RoZXJ3aXNlIHRoaXMgZ29lcyB3cm9uZy4gIE1heSBuZWVkIHRvIGNhbGwgb3V0X2ZsdXNoKCkgZmlyc3QuCisgKi8KKyAgICB2b2lkCitndWlfdXBkYXRlX2N1cnNvcihmb3JjZSwgY2xlYXJfc2VsZWN0aW9uKQorICAgIGludAkJZm9yY2U7CQkvKiB3aGVuIFRSVUUsIHVwZGF0ZSBldmVuIHdoZW4gbm90IG1vdmVkICovCisgICAgaW50CQljbGVhcl9zZWxlY3Rpb247LyogY2xlYXIgc2VsZWN0aW9uIHVuZGVyIGN1cnNvciAqLworeworICAgIGludAkJY3VyX3dpZHRoID0gMDsKKyAgICBpbnQJCWN1cl9oZWlnaHQgPSAwOworICAgIGludAkJb2xkX2hsX21hc2s7CisgICAgaW50CQlpZHg7CisgICAgaW50CQlpZDsKKyAgICBndWljb2xvcl9UCWNmZywgY2JnLCBjYzsJLyogY3Vyc29yIGZvcmUtL2JhY2tncm91bmQgY29sb3IgKi8KKyAgICBpbnQJCWNhdHRyOwkJLyogY3Vyc29yIGF0dHJpYnV0ZXMgKi8KKyAgICBpbnQJCWF0dHI7CisgICAgYXR0cmVudHJ5X1QgKmFlcCA9IE5VTEw7CisKKyAgICAvKiBEb24ndCB1cGRhdGUgdGhlIGN1cnNvciB3aGVuIGhhbGZ3YXkgYnVzeSBzY3JvbGxpbmcuCisgICAgICogU2NyZWVuTGluZXNbXSBpc24ndCB2YWxpZCB0aGVuLiAqLworICAgIGlmICghY2FuX3VwZGF0ZV9jdXJzb3IpCisJcmV0dXJuOworCisgICAgZ3VpX2NoZWNrX3BvcygpOworICAgIGlmICghZ3VpLmN1cnNvcl9pc192YWxpZCB8fCBmb3JjZQorCQkgICAgfHwgZ3VpLnJvdyAhPSBndWkuY3Vyc29yX3JvdyB8fCBndWkuY29sICE9IGd1aS5jdXJzb3JfY29sKQorICAgIHsKKwlndWlfdW5kcmF3X2N1cnNvcigpOworCWlmIChndWkucm93IDwgMCkKKwkgICAgcmV0dXJuOworI2lmZGVmIFVTRV9JTV9DT05UUk9MCisJaWYgKGd1aS5yb3cgIT0gZ3VpLmN1cnNvcl9yb3cgfHwgZ3VpLmNvbCAhPSBndWkuY3Vyc29yX2NvbCkKKwkgICAgaW1fc2V0X3Bvc2l0aW9uKGd1aS5yb3csIGd1aS5jb2wpOworI2VuZGlmCisJZ3VpLmN1cnNvcl9yb3cgPSBndWkucm93OworCWd1aS5jdXJzb3JfY29sID0gZ3VpLmNvbDsKKworCS8qIE9ubHkgd3JpdGUgdG8gdGhlIHNjcmVlbiBhZnRlciBTY3JlZW5MaW5lc1tdIGhhcyBiZWVuIGluaXRpYWxpemVkICovCisJaWYgKCFzY3JlZW5fY2xlYXJlZCB8fCBTY3JlZW5MaW5lcyA9PSBOVUxMKQorCSAgICByZXR1cm47CisKKwkvKiBDbGVhciB0aGUgc2VsZWN0aW9uIGlmIHdlIGFyZSBhYm91dCB0byB3cml0ZSBvdmVyIGl0ICovCisJaWYgKGNsZWFyX3NlbGVjdGlvbikKKwkgICAgY2xpcF9tYXlfY2xlYXJfc2VsZWN0aW9uKGd1aS5yb3csIGd1aS5yb3cpOworCS8qIENoZWNrIHRoYXQgdGhlIGN1cnNvciBpcyBpbnNpZGUgdGhlIHNoZWxsIChyZXNpemluZyBtYXkgaGF2ZSBtYWRlCisJICogaXQgaW52YWxpZCkgKi8KKwlpZiAoZ3VpLnJvdyA+PSBzY3JlZW5fUm93cyB8fCBndWkuY29sID49IHNjcmVlbl9Db2x1bW5zKQorCSAgICByZXR1cm47CisKKwlndWkuY3Vyc29yX2lzX3ZhbGlkID0gVFJVRTsKKworCS8qCisJICogSG93IHRoZSBjdXJzb3IgaXMgZHJhd24gZGVwZW5kcyBvbiB0aGUgY3VycmVudCBtb2RlLgorCSAqLworCWlkeCA9IGdldF9zaGFwZV9pZHgoRkFMU0UpOworCWlmIChTdGF0ZSAmIExBTkdNQVApCisJICAgIGlkID0gc2hhcGVfdGFibGVbaWR4XS5pZF9sbTsKKwllbHNlCisJICAgIGlkID0gc2hhcGVfdGFibGVbaWR4XS5pZDsKKworCS8qIGdldCB0aGUgY29sb3JzIGFuZCBhdHRyaWJ1dGVzIGZvciB0aGUgY3Vyc29yLiAgRGVmYXVsdCBpcyBpbnZlcnRlZCAqLworCWNmZyA9IElOVkFMQ09MT1I7CisJY2JnID0gSU5WQUxDT0xPUjsKKwljYXR0ciA9IEhMX0lOVkVSU0U7CisJZ3VpX21jaF9zZXRfYmxpbmtpbmcoc2hhcGVfdGFibGVbaWR4XS5ibGlua3dhaXQsCisJCQkgICAgIHNoYXBlX3RhYmxlW2lkeF0uYmxpbmtvbiwKKwkJCSAgICAgc2hhcGVfdGFibGVbaWR4XS5ibGlua29mZik7CisJaWYgKGlkID4gMCkKKwl7CisJICAgIGNhdHRyID0gc3luX2lkMmNvbG9ycyhpZCwgJmNmZywgJmNiZyk7CisjaWYgZGVmaW5lZChVU0VfSU1fQ09OVFJPTCkgfHwgZGVmaW5lZChGRUFUX0hBTkdVTElOKQorCSAgICB7CisJCXN0YXRpYyBpbnQgaWlkOworCQlndWljb2xvcl9UIGZnLCBiZzsKKworCQlpZiAoaW1fZ2V0X3N0YXR1cygpKQorCQl7CisJCSAgICBpaWQgPSBzeW5fbmFtZTJpZCgoY2hhcl91ICopIkN1cnNvcklNIik7CisJCSAgICBpZiAoaWlkID4gMCkKKwkJICAgIHsKKwkJCXN5bl9pZDJjb2xvcnMoaWlkLCAmZmcsICZiZyk7CisJCQlpZiAoYmcgIT0gSU5WQUxDT0xPUikKKwkJCSAgICBjYmcgPSBiZzsKKwkJCWlmIChmZyAhPSBJTlZBTENPTE9SKQorCQkJICAgIGNmZyA9IGZnOworCQkgICAgfQorCQl9CisJICAgIH0KKyNlbmRpZgorCX0KKworCS8qCisJICogR2V0IHRoZSBhdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuCisJICogV2hlbiBubyBjdXJzb3IgY29sb3Igd2FzIGdpdmVuLCB1c2UgdGhlIGNoYXJhY3RlciBjb2xvci4KKwkgKi8KKwlhdHRyID0gU2NyZWVuQXR0cnNbTGluZU9mZnNldFtndWkucm93XSArIGd1aS5jb2xdOworCWlmIChhdHRyID4gSExfQUxMKQorCSAgICBhZXAgPSBzeW5fZ3VpX2F0dHIyZW50cnkoYXR0cik7CisJaWYgKGFlcCAhPSBOVUxMKQorCXsKKwkgICAgYXR0ciA9IGFlcC0+YWVfYXR0cjsKKwkgICAgaWYgKGNmZyA9PSBJTlZBTENPTE9SKQorCQljZmcgPSAoKGF0dHIgJiBITF9JTlZFUlNFKSAgPyBhZXAtPmFlX3UuZ3VpLmJnX2NvbG9yCisJCQkJCSAgICA6IGFlcC0+YWVfdS5ndWkuZmdfY29sb3IpOworCSAgICBpZiAoY2JnID09IElOVkFMQ09MT1IpCisJCWNiZyA9ICgoYXR0ciAmIEhMX0lOVkVSU0UpICA/IGFlcC0+YWVfdS5ndWkuZmdfY29sb3IKKwkJCQkJICAgIDogYWVwLT5hZV91Lmd1aS5iZ19jb2xvcik7CisJfQorCWlmIChjZmcgPT0gSU5WQUxDT0xPUikKKwkgICAgY2ZnID0gKGF0dHIgJiBITF9JTlZFUlNFKSA/IGd1aS5iYWNrX3BpeGVsIDogZ3VpLm5vcm1fcGl4ZWw7CisJaWYgKGNiZyA9PSBJTlZBTENPTE9SKQorCSAgICBjYmcgPSAoYXR0ciAmIEhMX0lOVkVSU0UpID8gZ3VpLm5vcm1fcGl4ZWwgOiBndWkuYmFja19waXhlbDsKKworI2lmZGVmIEZFQVRfWElNCisJaWYgKGFlcCAhPSBOVUxMKQorCXsKKwkgICAgeGltX2JnX2NvbG9yID0gKChhdHRyICYgSExfSU5WRVJTRSkgPyBhZXAtPmFlX3UuZ3VpLmZnX2NvbG9yCisJCQkJCQk6IGFlcC0+YWVfdS5ndWkuYmdfY29sb3IpOworCSAgICB4aW1fZmdfY29sb3IgPSAoKGF0dHIgJiBITF9JTlZFUlNFKSA/IGFlcC0+YWVfdS5ndWkuYmdfY29sb3IKKwkJCQkJCTogYWVwLT5hZV91Lmd1aS5mZ19jb2xvcik7CisJICAgIGlmICh4aW1fYmdfY29sb3IgPT0gSU5WQUxDT0xPUikKKwkJeGltX2JnX2NvbG9yID0gKGF0dHIgJiBITF9JTlZFUlNFKSA/IGd1aS5ub3JtX3BpeGVsCisJCQkJCQkgICA6IGd1aS5iYWNrX3BpeGVsOworCSAgICBpZiAoeGltX2ZnX2NvbG9yID09IElOVkFMQ09MT1IpCisJCXhpbV9mZ19jb2xvciA9IChhdHRyICYgSExfSU5WRVJTRSkgPyBndWkuYmFja19waXhlbAorCQkJCQkJICAgOiBndWkubm9ybV9waXhlbDsKKwl9CisJZWxzZQorCXsKKwkgICAgeGltX2JnX2NvbG9yID0gKGF0dHIgJiBITF9JTlZFUlNFKSA/IGd1aS5ub3JtX3BpeGVsCisJCQkJCSAgICAgICA6IGd1aS5iYWNrX3BpeGVsOworCSAgICB4aW1fZmdfY29sb3IgPSAoYXR0ciAmIEhMX0lOVkVSU0UpID8gZ3VpLmJhY2tfcGl4ZWwKKwkJCQkJICAgICAgIDogZ3VpLm5vcm1fcGl4ZWw7CisJfQorI2VuZGlmCisKKwlhdHRyICY9IH5ITF9JTlZFUlNFOworCWlmIChjYXR0ciAmIEhMX0lOVkVSU0UpCisJeworCSAgICBjYyA9IGNiZzsKKwkgICAgY2JnID0gY2ZnOworCSAgICBjZmcgPSBjYzsKKwl9CisJY2F0dHIgJj0gfkhMX0lOVkVSU0U7CisKKwkvKgorCSAqIFdoZW4gd2UgZG9uJ3QgaGF2ZSB3aW5kb3cgZm9jdXMsIGRyYXcgYSBob2xsb3cgY3Vyc29yLgorCSAqLworCWlmICghZ3VpLmluX2ZvY3VzKQorCXsKKwkgICAgZ3VpX21jaF9kcmF3X2hvbGxvd19jdXJzb3IoY2JnKTsKKwkgICAgcmV0dXJuOworCX0KKworCW9sZF9obF9tYXNrID0gZ3VpLmhpZ2hsaWdodF9tYXNrOworCWlmIChzaGFwZV90YWJsZVtpZHhdLnNoYXBlID09IFNIQVBFX0JMT0NLCisjaWZkZWYgRkVBVF9IQU5HVUxJTgorCQl8fCBjb21wb3NpbmdfaGFuZ3VsCisjZW5kaWYKKwkgICApCisJeworCSAgICAvKgorCSAgICAgKiBEcmF3IHRoZSB0ZXh0IGNoYXJhY3RlciB3aXRoIHRoZSBjdXJzb3IgY29sb3JzLglVc2UgdGhlCisJICAgICAqIGNoYXJhY3RlciBhdHRyaWJ1dGVzIHBsdXMgdGhlIGN1cnNvciBhdHRyaWJ1dGVzLgorCSAgICAgKi8KKwkgICAgZ3VpLmhpZ2hsaWdodF9tYXNrID0gKGNhdHRyIHwgYXR0cik7CisjaWZkZWYgRkVBVF9IQU5HVUxJTgorCSAgICBpZiAoY29tcG9zaW5nX2hhbmd1bCkKKwkJKHZvaWQpZ3VpX291dHN0cl9ub3dyYXAoY29tcG9zaW5nX2hhbmd1bF9idWZmZXIsIDIsCisJCQlHVUlfTU9OX0lTX0NVUlNPUiB8IEdVSV9NT05fTk9DTEVBUiwgY2ZnLCBjYmcsIDApOworCSAgICBlbHNlCisjZW5kaWYKKwkJKHZvaWQpZ3VpX3NjcmVlbmNoYXIoTGluZU9mZnNldFtndWkucm93XSArIGd1aS5jb2wsCisJCQlHVUlfTU9OX0lTX0NVUlNPUiB8IEdVSV9NT05fTk9DTEVBUiwgY2ZnLCBjYmcsIDApOworCX0KKwllbHNlCisJeworI2lmIGRlZmluZWQoRkVBVF9NQllURSkgJiYgZGVmaW5lZChGRUFUX1JJR0hUTEVGVCkKKwkgICAgaW50CSAgICBjb2xfb2ZmID0gRkFMU0U7CisjZW5kaWYKKwkgICAgLyoKKwkgICAgICogRmlyc3QgZHJhdyB0aGUgcGFydGlhbCBjdXJzb3IsIHRoZW4gb3ZlcndyaXRlIHdpdGggdGhlIHRleHQKKwkgICAgICogY2hhcmFjdGVyLCB1c2luZyBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQuCisJICAgICAqLworCSAgICBpZiAoc2hhcGVfdGFibGVbaWR4XS5zaGFwZSA9PSBTSEFQRV9WRVIpCisJICAgIHsKKwkJY3VyX2hlaWdodCA9IGd1aS5jaGFyX2hlaWdodDsKKwkJY3VyX3dpZHRoID0gKGd1aS5jaGFyX3dpZHRoICogc2hhcGVfdGFibGVbaWR4XS5wZXJjZW50YWdlCisJCQkJCQkJCSAgKyA5OSkgLyAxMDA7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWN1cl9oZWlnaHQgPSAoZ3VpLmNoYXJfaGVpZ2h0ICogc2hhcGVfdGFibGVbaWR4XS5wZXJjZW50YWdlCisJCQkJCQkJCSAgKyA5OSkgLyAxMDA7CisJCWN1cl93aWR0aCA9IGd1aS5jaGFyX3dpZHRoOworCSAgICB9CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlICYmICgqbWJfb2ZmMmNlbGxzKShMaW5lT2Zmc2V0W2d1aS5yb3ddICsgZ3VpLmNvbCkgPiAxKQorCSAgICB7CisJCS8qIERvdWJsZSB3aWRlIGNoYXJhY3Rlci4gKi8KKwkJaWYgKHNoYXBlX3RhYmxlW2lkeF0uc2hhcGUgIT0gU0hBUEVfVkVSKQorCQkgICAgY3VyX3dpZHRoICs9IGd1aS5jaGFyX3dpZHRoOworIyBpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQlpZiAoQ1VSU09SX0JBUl9SSUdIVCkKKwkJeworCQkgICAgLyogZ3VpLmNvbCBwb2ludHMgdG8gdGhlIGxlZnQgaGFsdmUgb2YgdGhlIGNoYXJhY3RlciBidXQKKwkJICAgICAqIHRoZSB2ZXJ0aWNhbCBsaW5lIG5lZWRzIHRvIGJlIG9uIHRoZSByaWdodCBoYWx2ZS4KKwkJICAgICAqIEEgZG91YmxlLXdpZGUgaG9yaXpvbnRhbCBsaW5lIGlzIGFsc28gZHJhd24gZnJvbSB0aGUKKwkJICAgICAqIHJpZ2h0IGhhbHZlIGluIGd1aV9tY2hfZHJhd19wYXJ0X2N1cnNvcigpLiAqLworCQkgICAgY29sX29mZiA9IFRSVUU7CisJCSAgICArK2d1aS5jb2w7CisJCX0KKyMgZW5kaWYKKwkgICAgfQorI2VuZGlmCisJICAgIGd1aV9tY2hfZHJhd19wYXJ0X2N1cnNvcihjdXJfd2lkdGgsIGN1cl9oZWlnaHQsIGNiZyk7CisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiBkZWZpbmVkKEZFQVRfUklHSFRMRUZUKQorCSAgICBpZiAoY29sX29mZikKKwkJLS1ndWkuY29sOworI2VuZGlmCisKKyNpZm5kZWYgRkVBVF9HVUlfTVNXSU4JICAgIC8qIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGZvciBNU1dpbmRvd3MgKi8KKwkgICAgZ3VpLmhpZ2hsaWdodF9tYXNrID0gU2NyZWVuQXR0cnNbTGluZU9mZnNldFtndWkucm93XSArIGd1aS5jb2xdOworCSAgICAodm9pZClndWlfc2NyZWVuY2hhcihMaW5lT2Zmc2V0W2d1aS5yb3ddICsgZ3VpLmNvbCwKKwkJICAgIEdVSV9NT05fVFJTX0NVUlNPUiB8IEdVSV9NT05fTk9DTEVBUiwKKwkJICAgIChndWljb2xvcl9UKTAsIChndWljb2xvcl9UKTAsIDApOworI2VuZGlmCisJfQorCWd1aS5oaWdobGlnaHRfbWFzayA9IG9sZF9obF9tYXNrOworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2d1aV9wb3NpdGlvbl9tZW51KCkKK3sKKyMgaWYgIWRlZmluZWQoRkVBVF9HVUlfR1RLKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9NT1RJRikKKyAgICBpZiAoZ3VpLm1lbnVfaXNfYWN0aXZlICYmIGd1aS5pbl91c2UpCisJZ3VpX21jaF9zZXRfbWVudV9wb3MoMCwgMCwgZ3VpLm1lbnVfd2lkdGgsIGd1aS5tZW51X2hlaWdodCk7CisjIGVuZGlmCit9CisjZW5kaWYKKworLyoKKyAqIFBvc2l0aW9uIHRoZSB2YXJpb3VzIEdVSSBjb21wb25lbnRzICh0ZXh0IGFyZWEsIG1lbnUpLiAgVGhlIHZlcnRpY2FsCisgKiBzY3JvbGxiYXJzIGFyZSBOT1QgaGFuZGxlZCBoZXJlLiAgU2VlIGd1aV91cGRhdGVfc2Nyb2xsYmFycygpLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX3Bvc2l0aW9uX2NvbXBvbmVudHModG90YWxfd2lkdGgpCisgICAgaW50CSAgICB0b3RhbF93aWR0aDsKK3sKKyAgICBpbnQJICAgIHRleHRfYXJlYV94OworICAgIGludAkgICAgdGV4dF9hcmVhX3k7CisgICAgaW50CSAgICB0ZXh0X2FyZWFfd2lkdGg7CisgICAgaW50CSAgICB0ZXh0X2FyZWFfaGVpZ2h0OworCisgICAgLyogYXZvaWQgdGhhdCBtb3ZpbmcgY29tcG9uZW50cyBhcm91bmQgZ2VuZXJhdGVzIGV2ZW50cyAqLworICAgICsraG9sZF9ndWlfZXZlbnRzOworCisgICAgdGV4dF9hcmVhX3ggPSAwOworICAgIGlmIChndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdKQorCXRleHRfYXJlYV94ICs9IGd1aS5zY3JvbGxiYXJfd2lkdGg7CisKKyAgICB0ZXh0X2FyZWFfeSA9IDA7CisjaWYgZGVmaW5lZChGRUFUX01FTlUpICYmICEoZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKSkKKyAgICBndWkubWVudV93aWR0aCA9IHRvdGFsX3dpZHRoOworICAgIGlmIChndWkubWVudV9pc19hY3RpdmUpCisJdGV4dF9hcmVhX3kgKz0gZ3VpLm1lbnVfaGVpZ2h0OworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX1RPT0xCQVIpICYmIGRlZmluZWQoRkVBVF9HVUlfTVNXSU4pCisgICAgaWYgKHZpbV9zdHJjaHIocF9nbywgR09fVE9PTEJBUikgIT0gTlVMTCkKKwl0ZXh0X2FyZWFfeSA9IFRPT0xCQVJfQlVUVE9OX0hFSUdIVCArIFRPT0xCQVJfQk9SREVSX0hFSUdIVDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1RPT0xCQVIpICYmIChkZWZpbmVkKEZFQVRfR1VJX01PVElGKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkpCisgICAgaWYgKHZpbV9zdHJjaHIocF9nbywgR09fVE9PTEJBUikgIT0gTlVMTCkKKyAgICB7CisjIGlmZGVmIEZFQVRfR1VJX0FUSEVOQQorCWd1aV9tY2hfc2V0X3Rvb2xiYXJfcG9zKDAsIHRleHRfYXJlYV95LAorCQkJCWd1aS5tZW51X3dpZHRoLCBndWkudG9vbGJhcl9oZWlnaHQpOworIyBlbmRpZgorCXRleHRfYXJlYV95ICs9IGd1aS50b29sYmFyX2hlaWdodDsKKyAgICB9CisjZW5kaWYKKworICAgIHRleHRfYXJlYV93aWR0aCA9IGd1aS5udW1fY29scyAqIGd1aS5jaGFyX3dpZHRoICsgZ3VpLmJvcmRlcl9vZmZzZXQgKiAyOworICAgIHRleHRfYXJlYV9oZWlnaHQgPSBndWkubnVtX3Jvd3MgKiBndWkuY2hhcl9oZWlnaHQgKyBndWkuYm9yZGVyX29mZnNldCAqIDI7CisKKyAgICBndWlfbWNoX3NldF90ZXh0X2FyZWFfcG9zKHRleHRfYXJlYV94LAorCQkJICAgICAgdGV4dF9hcmVhX3ksCisJCQkgICAgICB0ZXh0X2FyZWFfd2lkdGgsCisJCQkgICAgICB0ZXh0X2FyZWFfaGVpZ2h0CisjaWYgZGVmaW5lZChGRUFUX1hJTSkgJiYgIWRlZmluZWQoSEFWRV9HVEsyKQorCQkJCSAgKyB4aW1fZ2V0X3N0YXR1c19hcmVhX2hlaWdodCgpCisjZW5kaWYKKwkJCSAgICAgICk7CisjaWZkZWYgRkVBVF9NRU5VCisgICAgZ3VpX3Bvc2l0aW9uX21lbnUoKTsKKyNlbmRpZgorICAgIGlmIChndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0JPVFRPTV0pCisJZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3BvcygmZ3VpLmJvdHRvbV9zYmFyLAorCQkJCSAgdGV4dF9hcmVhX3gsCisJCQkJICB0ZXh0X2FyZWFfeSArIHRleHRfYXJlYV9oZWlnaHQsCisJCQkJICB0ZXh0X2FyZWFfd2lkdGgsCisJCQkJICBndWkuc2Nyb2xsYmFyX2hlaWdodCk7CisgICAgZ3VpLmxlZnRfc2Jhcl94ID0gMDsKKyAgICBndWkucmlnaHRfc2Jhcl94ID0gdGV4dF9hcmVhX3ggKyB0ZXh0X2FyZWFfd2lkdGg7CisKKyAgICAtLWhvbGRfZ3VpX2V2ZW50czsKK30KKworICAgIGludAorZ3VpX2dldF9iYXNlX3dpZHRoKCkKK3sKKyAgICBpbnQJICAgIGJhc2Vfd2lkdGg7CisKKyAgICBiYXNlX3dpZHRoID0gMiAqIGd1aS5ib3JkZXJfb2Zmc2V0OworICAgIGlmIChndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdKQorCWJhc2Vfd2lkdGggKz0gZ3VpLnNjcm9sbGJhcl93aWR0aDsKKyAgICBpZiAoZ3VpLndoaWNoX3Njcm9sbGJhcnNbU0JBUl9SSUdIVF0pCisJYmFzZV93aWR0aCArPSBndWkuc2Nyb2xsYmFyX3dpZHRoOworICAgIHJldHVybiBiYXNlX3dpZHRoOworfQorCisgICAgaW50CitndWlfZ2V0X2Jhc2VfaGVpZ2h0KCkKK3sKKyAgICBpbnQJICAgIGJhc2VfaGVpZ2h0OworCisgICAgYmFzZV9oZWlnaHQgPSAyICogZ3VpLmJvcmRlcl9vZmZzZXQ7CisgICAgaWYgKGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfQk9UVE9NXSkKKwliYXNlX2hlaWdodCArPSBndWkuc2Nyb2xsYmFyX2hlaWdodDsKKyNpZmRlZiBGRUFUX0dVSV9HVEsKKyAgICAvKiBXZSBjYW4ndCB0YWtlIHRoZSBzaXplcyBwcm9wZXJseSBpbnRvIGFjY291bnQgdW50aWwgYW55dGhpbmcgaXMKKyAgICAgKiByZWFsaXplZC4gIFRoZXJlZm9yZSB3ZSByZWNhbGN1bGF0ZSBhbGwgdGhlIHZhbHVlcyBoZXJlIGp1c3QgYmVmb3JlCisgICAgICogc2V0dGluZyB0aGUgc2l6ZS4gKC0tbWRja2kpICovCisjZWxzZQorIyBpZmRlZiBGRUFUX01FTlUKKyAgICBpZiAoZ3VpLm1lbnVfaXNfYWN0aXZlKQorCWJhc2VfaGVpZ2h0ICs9IGd1aS5tZW51X2hlaWdodDsKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9UT09MQkFSCisgICAgaWYgKHZpbV9zdHJjaHIocF9nbywgR09fVE9PTEJBUikgIT0gTlVMTCkKKyMgIGlmIGRlZmluZWQoRkVBVF9HVUlfTVNXSU4pICYmIGRlZmluZWQoRkVBVF9UT09MQkFSKQorCWJhc2VfaGVpZ2h0ICs9IChUT09MQkFSX0JVVFRPTl9IRUlHSFQgKyBUT09MQkFSX0JPUkRFUl9IRUlHSFQpOworIyAgZWxzZQorCWJhc2VfaGVpZ2h0ICs9IGd1aS50b29sYmFyX2hlaWdodDsKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfRk9PVEVSCisgICAgaWYgKHZpbV9zdHJjaHIocF9nbywgR09fRk9PVEVSKSAhPSBOVUxMKQorCWJhc2VfaGVpZ2h0ICs9IGd1aS5mb290ZXJfaGVpZ2h0OworIyBlbmRpZgorIyBpZiBkZWZpbmVkKEZFQVRfR1VJX01PVElGKSAmJiBkZWZpbmVkKEZFQVRfTUVOVSkKKyAgICBiYXNlX2hlaWdodCArPSBndWlfbWNoX3RleHRfYXJlYV9leHRyYV9oZWlnaHQoKTsKKyMgZW5kaWYKKyNlbmRpZgorICAgIHJldHVybiBiYXNlX2hlaWdodDsKK30KKworLyoKKyAqIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIEdVSSBzaGVsbCBoYXMgYmVlbiByZXNpemVkLiAgSXRzIGFyZ3VtZW50cyBhcmUKKyAqIHRoZSBuZXcgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgc2hlbGwgaW4gcGl4ZWxzLgorICovCisgICAgdm9pZAorZ3VpX3Jlc2l6ZV9zaGVsbChwaXhlbF93aWR0aCwgcGl4ZWxfaGVpZ2h0KQorICAgIGludAkJcGl4ZWxfd2lkdGg7CisgICAgaW50CQlwaXhlbF9oZWlnaHQ7Cit7CisgICAgc3RhdGljIGludAlidXN5ID0gRkFMU0U7CisKKyAgICBpZiAoIWd1aS5zaGVsbF9jcmVhdGVkKQkgICAgLyogaWdub3JlIHdoZW4gc3RpbGwgaW5pdGlhbGl6aW5nICovCisJcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBDYW4ndCByZXNpemUgdGhlIHNjcmVlbiB3aGlsZSBpdCBpcyBiZWluZyByZWRyYXduLiAgUmVtZW1iZXIgdGhlIG5ldworICAgICAqIHNpemUgYW5kIGhhbmRsZSBpdCBsYXRlci4KKyAgICAgKi8KKyAgICBpZiAodXBkYXRpbmdfc2NyZWVuIHx8IGJ1c3kpCisgICAgeworCW5ld19waXhlbF93aWR0aCA9IHBpeGVsX3dpZHRoOworCW5ld19waXhlbF9oZWlnaHQgPSBwaXhlbF9oZWlnaHQ7CisJcmV0dXJuOworICAgIH0KKworYWdhaW46CisgICAgYnVzeSA9IFRSVUU7CisKKyNpZmRlZiBGRUFUX0dVSV9CRU9TCisgICAgdmltX2xvY2tfc2NyZWVuKCk7CisjZW5kaWYKKworICAgIC8qIEZsdXNoIHBlbmRpbmcgb3V0cHV0IGJlZm9yZSByZWRyYXdpbmcgKi8KKyAgICBvdXRfZmx1c2goKTsKKworICAgIGd1aS5udW1fY29scyA9IChwaXhlbF93aWR0aCAtIGd1aV9nZXRfYmFzZV93aWR0aCgpKSAvIGd1aS5jaGFyX3dpZHRoOworICAgIGd1aS5udW1fcm93cyA9IChwaXhlbF9oZWlnaHQgLSBndWlfZ2V0X2Jhc2VfaGVpZ2h0KCkKKyNpZiAhZGVmaW5lZChGRUFUX0dVSV9QSE9UT04pICYmICFkZWZpbmVkKEZFQVRfR1VJX01TV0lOKQorCQkJCSAgICArIChndWkuY2hhcl9oZWlnaHQgLyAyKQorI2VuZGlmCisJCQkJCSkgLyBndWkuY2hhcl9oZWlnaHQ7CisKKyAgICBndWlfcG9zaXRpb25fY29tcG9uZW50cyhwaXhlbF93aWR0aCk7CisKKyAgICBndWlfcmVzZXRfc2Nyb2xsX3JlZ2lvbigpOworICAgIC8qCisgICAgICogQXQgdGhlICJtb3JlIiBhbmQgIjpjb25maXJtIiBwcm9tcHQgdGhlcmUgaXMgbm8gcmVkcmF3LCBwdXQgdGhlIGN1cnNvcgorICAgICAqIGF0IHRoZSBsYXN0IGxpbmUgaGVyZSAod2h5IGRvZXMgaXQgaGF2ZSB0byBiZSBvbmUgcm93IHRvbyBsb3c/KS4KKyAgICAgKi8KKyAgICBpZiAoU3RhdGUgPT0gQVNLTU9SRSB8fCBTdGF0ZSA9PSBDT05GSVJNKQorCWd1aS5yb3cgPSBndWkubnVtX3Jvd3M7CisKKyAgICAvKiBPbmx5IGNvbXBhcmluZyBSb3dzIGFuZCBDb2x1bW5zIG1heSBiZSBzdWZmaWNpZW50LCBidXQgbGV0J3Mgc3RheSBvbgorICAgICAqIHRoZSBzYWZlIHNpZGUuICovCisgICAgaWYgKGd1aS5udW1fcm93cyAhPSBzY3JlZW5fUm93cyB8fCBndWkubnVtX2NvbHMgIT0gc2NyZWVuX0NvbHVtbnMKKwkgICAgfHwgZ3VpLm51bV9yb3dzICE9IFJvd3MgfHwgZ3VpLm51bV9jb2xzICE9IENvbHVtbnMpCisJc2hlbGxfcmVzaXplZCgpOworCisjaWZkZWYgRkVBVF9HVUlfQkVPUworICAgIHZpbV91bmxvY2tfc2NyZWVuKCk7CisjZW5kaWYKKworICAgIGd1aV91cGRhdGVfc2Nyb2xsYmFycyhUUlVFKTsKKyAgICBndWlfdXBkYXRlX2N1cnNvcihGQUxTRSwgVFJVRSk7CisjaWYgZGVmaW5lZChGRUFUX1hJTSkgJiYgIWRlZmluZWQoSEFWRV9HVEsyKQorICAgIHhpbV9zZXRfc3RhdHVzX2FyZWEoKTsKKyNlbmRpZgorCisgICAgYnVzeSA9IEZBTFNFOworICAgIC8qCisgICAgICogV2UgY291bGQgaGF2ZSBiZWVuIGNhbGxlZCBhZ2FpbiB3aGlsZSByZWRyYXdpbmcgdGhlIHNjcmVlbi4KKyAgICAgKiBOZWVkIHRvIGRvIGl0IGFsbCBhZ2FpbiB3aXRoIHRoZSBsYXRlc3Qgc2l6ZSB0aGVuLgorICAgICAqLworICAgIGlmIChuZXdfcGl4ZWxfaGVpZ2h0KQorICAgIHsKKwlwaXhlbF93aWR0aCA9IG5ld19waXhlbF93aWR0aDsKKwlwaXhlbF9oZWlnaHQgPSBuZXdfcGl4ZWxfaGVpZ2h0OworCW5ld19waXhlbF93aWR0aCA9IDA7CisJbmV3X3BpeGVsX2hlaWdodCA9IDA7CisJZ290byBhZ2FpbjsKKyAgICB9Cit9CisKKy8qCisgKiBDaGVjayBpZiBndWlfcmVzaXplX3NoZWxsKCkgbXVzdCBiZSBjYWxsZWQuCisgKi8KKyAgICB2b2lkCitndWlfbWF5X3Jlc2l6ZV9zaGVsbCgpCit7CisgICAgaW50CQloLCB3OworCisgICAgaWYgKG5ld19waXhlbF9oZWlnaHQpCisgICAgeworCS8qIGNhcmVmdWw6IGd1aV9yZXNpemVfc2hlbGwoKSBtYXkgcG9zdHBvbmUgdGhlIHJlc2l6ZSBhZ2FpbiBpZiB3ZQorCSAqIHdlcmUgY2FsbGVkIGluZGlyZWN0bHkgYnkgaXQgKi8KKwl3ID0gbmV3X3BpeGVsX3dpZHRoOworCWggPSBuZXdfcGl4ZWxfaGVpZ2h0OworCW5ld19waXhlbF93aWR0aCA9IDA7CisJbmV3X3BpeGVsX2hlaWdodCA9IDA7CisJZ3VpX3Jlc2l6ZV9zaGVsbCh3LCBoKTsKKyAgICB9Cit9CisKKyAgICBpbnQKK2d1aV9nZXRfc2hlbGxzaXplKCkKK3sKKyAgICBSb3dzID0gZ3VpLm51bV9yb3dzOworICAgIENvbHVtbnMgPSBndWkubnVtX2NvbHM7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogU2V0IHRoZSBzaXplIG9mIHRoZSBWaW0gc2hlbGwgYWNjb3JkaW5nIHRvIFJvd3MgYW5kIENvbHVtbnMuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK2d1aV9zZXRfc2hlbGxzaXplKG11c3RzZXQsIGZpdF90b19kaXNwbGF5KQorICAgIGludAkJbXVzdHNldDsJCS8qIHNldCBieSB0aGUgdXNlciAqLworICAgIGludAkJZml0X3RvX2Rpc3BsYXk7Cit7CisgICAgaW50CQliYXNlX3dpZHRoOworICAgIGludAkJYmFzZV9oZWlnaHQ7CisgICAgaW50CQl3aWR0aDsKKyAgICBpbnQJCWhlaWdodDsKKyAgICBpbnQJCW1pbl93aWR0aDsKKyAgICBpbnQJCW1pbl9oZWlnaHQ7CisgICAgaW50CQlzY3JlZW5fdzsKKyAgICBpbnQJCXNjcmVlbl9oOworCisgICAgaWYgKCFndWkuc2hlbGxfY3JlYXRlZCkKKwlyZXR1cm47CisKKyNpZmRlZiBNU1dJTgorICAgIC8qIElmIG5vdCBzZXR0aW5nIHRvIGEgdXNlciBzcGVjaWZpZWQgc2l6ZSBhbmQgbWF4aW1pemVkLCBjYWxjdWxhdGUgdGhlCisgICAgICogbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBmaXQgaW4gdGhlIG1heGltaXplZCB3aW5kb3cuICovCisgICAgaWYgKCFtdXN0c2V0ICYmIGd1aV9tY2hfbWF4aW1pemVkKCkpCisgICAgeworCWd1aV9tY2hfbmV3Zm9udCgpOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGJhc2Vfd2lkdGggPSBndWlfZ2V0X2Jhc2Vfd2lkdGgoKTsKKyAgICBiYXNlX2hlaWdodCA9IGd1aV9nZXRfYmFzZV9oZWlnaHQoKTsKKyNpZmRlZiBVU0VfU1VOX1dPUktTSE9QCisgICAgaWYgKCFtdXN0c2V0ICYmIHVzaW5nU3VuV29ya1Nob3AKKwkJCQkmJiB3b3Jrc2hvcF9nZXRfd2lkdGhfaGVpZ2h0KCZ3aWR0aCwgJmhlaWdodCkpCisgICAgeworCUNvbHVtbnMgPSAod2lkdGggLSBiYXNlX3dpZHRoICsgZ3VpLmNoYXJfd2lkdGggLSAxKSAvIGd1aS5jaGFyX3dpZHRoOworCVJvd3MgPSAoaGVpZ2h0IC0gYmFzZV9oZWlnaHQgKyBndWkuY2hhcl9oZWlnaHQgLSAxKSAvIGd1aS5jaGFyX2hlaWdodDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCXdpZHRoID0gQ29sdW1ucyAqIGd1aS5jaGFyX3dpZHRoICsgYmFzZV93aWR0aDsKKwloZWlnaHQgPSBSb3dzICogZ3VpLmNoYXJfaGVpZ2h0ICsgYmFzZV9oZWlnaHQ7CisgICAgfQorCisgICAgaWYgKGZpdF90b19kaXNwbGF5KQorICAgIHsKKwlndWlfbWNoX2dldF9zY3JlZW5fZGltZW5zaW9ucygmc2NyZWVuX3csICZzY3JlZW5faCk7CisJaWYgKHdpZHRoID4gc2NyZWVuX3cpCisJeworCSAgICBDb2x1bW5zID0gKHNjcmVlbl93IC0gYmFzZV93aWR0aCkgLyBndWkuY2hhcl93aWR0aDsKKwkgICAgaWYgKENvbHVtbnMgPCBNSU5fQ09MVU1OUykKKwkJQ29sdW1ucyA9IE1JTl9DT0xVTU5TOworCSAgICB3aWR0aCA9IENvbHVtbnMgKiBndWkuY2hhcl93aWR0aCArIGJhc2Vfd2lkdGg7CisJfQorCWlmIChoZWlnaHQgPiBzY3JlZW5faCkKKwl7CisJICAgIFJvd3MgPSAoc2NyZWVuX2ggLSBiYXNlX2hlaWdodCkgLyBndWkuY2hhcl9oZWlnaHQ7CisJICAgIGNoZWNrX3NoZWxsc2l6ZSgpOworCSAgICBoZWlnaHQgPSBSb3dzICogZ3VpLmNoYXJfaGVpZ2h0ICsgYmFzZV9oZWlnaHQ7CisJfQorICAgIH0KKyAgICBndWkubnVtX2NvbHMgPSBDb2x1bW5zOworICAgIGd1aS5udW1fcm93cyA9IFJvd3M7CisKKyAgICBtaW5fd2lkdGggPSBiYXNlX3dpZHRoICsgTUlOX0NPTFVNTlMgKiBndWkuY2hhcl93aWR0aDsKKyAgICBtaW5faGVpZ2h0ID0gYmFzZV9oZWlnaHQgKyBNSU5fTElORVMgKiBndWkuY2hhcl9oZWlnaHQ7CisKKyAgICBndWlfbWNoX3NldF9zaGVsbHNpemUod2lkdGgsIGhlaWdodCwgbWluX3dpZHRoLCBtaW5faGVpZ2h0LAorCQkJCQkJICAgICBiYXNlX3dpZHRoLCBiYXNlX2hlaWdodCk7CisgICAgaWYgKGZpdF90b19kaXNwbGF5KQorICAgIHsKKwlpbnQJICAgIHgsIHk7CisKKwkvKiBTb21lIHdpbmRvdyBtYW5hZ2VycyBwdXQgdGhlIFZpbSB3aW5kb3cgbGVmdCBvZi9hYm92ZSB0aGUgc2NyZWVuLiAqLworCWd1aV9tY2hfdXBkYXRlKCk7CisJaWYgKGd1aV9tY2hfZ2V0X3dpbnBvcygmeCwgJnkpID09IE9LICYmICh4IDwgMCB8fCB5IDwgMCkpCisJICAgIGd1aV9tY2hfc2V0X3dpbnBvcyh4IDwgMCA/IDAgOiB4LCB5IDwgMCA/IDAgOiB5KTsKKyAgICB9CisKKyAgICBndWlfcG9zaXRpb25fY29tcG9uZW50cyh3aWR0aCk7CisgICAgZ3VpX3VwZGF0ZV9zY3JvbGxiYXJzKFRSVUUpOworICAgIGd1aV9yZXNldF9zY3JvbGxfcmVnaW9uKCk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBSb3dzIGFuZC9vciBDb2x1bW5zIGhhcyBjaGFuZ2VkLgorICovCisgICAgdm9pZAorZ3VpX25ld19zaGVsbHNpemUoKQoreworICAgIGd1aV9yZXNldF9zY3JvbGxfcmVnaW9uKCk7Cit9CisKKy8qCisgKiBNYWtlIHNjcm9sbCByZWdpb24gY292ZXIgd2hvbGUgc2NyZWVuLgorICovCisgICAgdm9pZAorZ3VpX3Jlc2V0X3Njcm9sbF9yZWdpb24oKQoreworICAgIGd1aS5zY3JvbGxfcmVnaW9uX3RvcCA9IDA7CisgICAgZ3VpLnNjcm9sbF9yZWdpb25fYm90ID0gZ3VpLm51bV9yb3dzIC0gMTsKKyAgICBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0ID0gMDsKKyAgICBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCA9IGd1aS5udW1fY29scyAtIDE7Cit9CisKKyAgICB2b2lkCitndWlfc3RhcnRfaGlnaGxpZ2h0KG1hc2spCisgICAgaW50CSAgICBtYXNrOworeworICAgIGlmIChtYXNrID4gSExfQUxMKQkJICAgIC8qIGhpZ2hsaWdodCBjb2RlICovCisJZ3VpLmhpZ2hsaWdodF9tYXNrID0gbWFzazsKKyAgICBlbHNlCQkJICAgIC8qIG1hc2sgKi8KKwlndWkuaGlnaGxpZ2h0X21hc2sgfD0gbWFzazsKK30KKworICAgIHZvaWQKK2d1aV9zdG9wX2hpZ2hsaWdodChtYXNrKQorICAgIGludAkgICAgbWFzazsKK3sKKyAgICBpZiAobWFzayA+IEhMX0FMTCkJCSAgICAvKiBoaWdobGlnaHQgY29kZSAqLworCWd1aS5oaWdobGlnaHRfbWFzayA9IEhMX05PUk1BTDsKKyAgICBlbHNlCQkJICAgIC8qIG1hc2sgKi8KKwlndWkuaGlnaGxpZ2h0X21hc2sgJj0gfm1hc2s7Cit9CisKKy8qCisgKiBDbGVhciBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBvZiB0aGUgc2NyZWVuIGZyb20gdGV4dCBwb3MgKHJvdzEsIGNvbDEpIHRvCisgKiAocm93MiwgY29sMikgaW5jbHVzaXZlLgorICovCisgICAgdm9pZAorZ3VpX2NsZWFyX2Jsb2NrKHJvdzEsIGNvbDEsIHJvdzIsIGNvbDIpCisgICAgaW50CSAgICByb3cxOworICAgIGludAkgICAgY29sMTsKKyAgICBpbnQJICAgIHJvdzI7CisgICAgaW50CSAgICBjb2wyOworeworICAgIC8qIENsZWFyIHRoZSBzZWxlY3Rpb24gaWYgd2UgYXJlIGFib3V0IHRvIHdyaXRlIG92ZXIgaXQgKi8KKyAgICBjbGlwX21heV9jbGVhcl9zZWxlY3Rpb24ocm93MSwgcm93Mik7CisKKyAgICBndWlfbWNoX2NsZWFyX2Jsb2NrKHJvdzEsIGNvbDEsIHJvdzIsIGNvbDIpOworCisgICAgLyogSW52YWxpZGF0ZSBjdXJzb3IgaWYgaXQgd2FzIGluIHRoaXMgYmxvY2sgKi8KKyAgICBpZiAoICAgICAgIGd1aS5jdXJzb3Jfcm93ID49IHJvdzEgJiYgZ3VpLmN1cnNvcl9yb3cgPD0gcm93MgorCSAgICAmJiBndWkuY3Vyc29yX2NvbCA+PSBjb2wxICYmIGd1aS5jdXJzb3JfY29sIDw9IGNvbDIpCisJZ3VpLmN1cnNvcl9pc192YWxpZCA9IEZBTFNFOworfQorCisvKgorICogV3JpdGUgY29kZSB0byB1cGRhdGUgdGhlIGN1cnNvciBsYXRlci4gIFRoaXMgYXZvaWRzIHRoZSBuZWVkIHRvIGZsdXNoIHRoZQorICogb3V0cHV0IGJ1ZmZlciBiZWZvcmUgY2FsbGluZyBndWlfdXBkYXRlX2N1cnNvcigpLgorICovCisgICAgdm9pZAorZ3VpX3VwZGF0ZV9jdXJzb3JfbGF0ZXIoKQoreworICAgIE9VVF9TVFIoSUZfRUIoIlwwMzN8cyIsIEVTQ19TVFIgInxzIikpOworfQorCisgICAgdm9pZAorZ3VpX3dyaXRlKHMsIGxlbikKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQlsZW47Cit7CisgICAgY2hhcl91CSpwOworICAgIGludAkJYXJnMSA9IDAsIGFyZzIgPSAwOworICAgIC8qIHRoaXMgZG9lc24ndCBtYWtlIHNlbnNlLCBkaXNhYmxlZCB1bnRpbCBzb21lb25lIGNhbiBleHBsYWluIHdoeSBpdAorICAgICAqIHdvdWxkIGJlIG5lZWRlZCAqLworI2lmIDAgJiYgKGRlZmluZWQoUklTQ09TKSB8fCBkZWZpbmVkKFdJTjE2KSkKKyAgICBpbnQJCWZvcmNlX2N1cnNvciA9IFRSVUU7CS8qIEpLMjMwNzk4LCBzdG9wIFZpbSBiZWluZyBzbWFydCBvcgorCQkJCQkgICBvdXIgcmVkcmF3IHNwZWVkIHdpbGwgc3VmZmVyICovCisjZWxzZQorICAgIGludAkJZm9yY2VfY3Vyc29yID0gRkFMU0U7CS8qIGZvcmNlIGN1cnNvciB1cGRhdGUgKi8KKyNlbmRpZgorICAgIGludAkJZm9yY2Vfc2Nyb2xsYmFyID0gRkFMU0U7CisgICAgc3RhdGljIHdpbl9UCSpvbGRfY3Vyd2luID0gTlVMTDsKKworLyogI2RlZmluZSBERUJVR19HVUlfV1JJVEUgKi8KKyNpZmRlZiBERUJVR19HVUlfV1JJVEUKKyAgICB7CisJaW50IGk7CisJY2hhcl91ICpzdHI7CisKKwlwcmludGYoImd1aV93cml0ZSglZCk6XG4gICAgIiwgbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJICAgIGlmIChzW2ldID09IEVTQykKKwkgICAgeworCQlpZiAoaSAhPSAwKQorCQkgICAgcHJpbnRmKCJcbiAgICAiKTsKKwkJcHJpbnRmKCI8RVNDPiIpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlzdHIgPSB0cmFuc2NoYXJfYnl0ZShzW2ldKTsKKwkJaWYgKHN0clswXSAmJiBzdHJbMV0pCisJCSAgICBwcmludGYoIjwlcz4iLCAoY2hhciAqKXN0cik7CisJCWVsc2UKKwkJICAgIHByaW50ZigiJXMiLCAoY2hhciAqKXN0cik7CisJICAgIH0KKwlwcmludGYoIlxuIik7CisgICAgfQorI2VuZGlmCisgICAgd2hpbGUgKGxlbikKKyAgICB7CisJaWYgKHNbMF0gPT0gRVNDICYmIHNbMV0gPT0gJ3wnKQorCXsKKwkgICAgcCA9IHMgKyAyOworCSAgICBpZiAoVklNX0lTRElHSVQoKnApKQorCSAgICB7CisJCWFyZzEgPSBnZXRkaWdpdHMoJnApOworCQlpZiAocCA+IHMgKyBsZW4pCisJCSAgICBicmVhazsKKwkJaWYgKCpwID09ICc7JykKKwkJeworCQkgICAgKytwOworCQkgICAgYXJnMiA9IGdldGRpZ2l0cygmcCk7CisJCSAgICBpZiAocCA+IHMgKyBsZW4pCisJCQlicmVhazsKKwkJfQorCSAgICB9CisJICAgIHN3aXRjaCAoKnApCisJICAgIHsKKwkJY2FzZSAnQyc6CS8qIENsZWFyIHNjcmVlbiAqLworCQkgICAgY2xpcF9zY3JvbGxfc2VsZWN0aW9uKDk5OTkpOworCQkgICAgZ3VpX21jaF9jbGVhcl9hbGwoKTsKKwkJICAgIGd1aS5jdXJzb3JfaXNfdmFsaWQgPSBGQUxTRTsKKwkJICAgIGZvcmNlX3Njcm9sbGJhciA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJY2FzZSAnTSc6CS8qIE1vdmUgY3Vyc29yICovCisJCSAgICBndWlfc2V0X2N1cnNvcihhcmcxLCBhcmcyKTsKKwkJICAgIGJyZWFrOworCQljYXNlICdzJzoJLyogZm9yY2UgY3Vyc29yIChzaGFwZSkgdXBkYXRlICovCisJCSAgICBmb3JjZV9jdXJzb3IgPSBUUlVFOworCQkgICAgYnJlYWs7CisJCWNhc2UgJ1InOgkvKiBTZXQgc2Nyb2xsIHJlZ2lvbiAqLworCQkgICAgaWYgKGFyZzEgPCBhcmcyKQorCQkgICAgeworCQkJZ3VpLnNjcm9sbF9yZWdpb25fdG9wID0gYXJnMTsKKwkJCWd1aS5zY3JvbGxfcmVnaW9uX2JvdCA9IGFyZzI7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlndWkuc2Nyb2xsX3JlZ2lvbl90b3AgPSBhcmcyOworCQkJZ3VpLnNjcm9sbF9yZWdpb25fYm90ID0gYXJnMTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJCWNhc2UgJ1YnOgkvKiBTZXQgdmVydGljYWwgc2Nyb2xsIHJlZ2lvbiAqLworCQkgICAgaWYgKGFyZzEgPCBhcmcyKQorCQkgICAgeworCQkJZ3VpLnNjcm9sbF9yZWdpb25fbGVmdCA9IGFyZzE7CisJCQlndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCA9IGFyZzI7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0ID0gYXJnMjsKKwkJCWd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0ID0gYXJnMTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworI2VuZGlmCisJCWNhc2UgJ2QnOgkvKiBEZWxldGUgbGluZSAqLworCQkgICAgZ3VpX2RlbGV0ZV9saW5lcyhndWkucm93LCAxKTsKKwkJICAgIGJyZWFrOworCQljYXNlICdEJzoJLyogRGVsZXRlIGxpbmVzICovCisJCSAgICBndWlfZGVsZXRlX2xpbmVzKGd1aS5yb3csIGFyZzEpOworCQkgICAgYnJlYWs7CisJCWNhc2UgJ2knOgkvKiBJbnNlcnQgbGluZSAqLworCQkgICAgZ3VpX2luc2VydF9saW5lcyhndWkucm93LCAxKTsKKwkJICAgIGJyZWFrOworCQljYXNlICdJJzoJLyogSW5zZXJ0IGxpbmVzICovCisJCSAgICBndWlfaW5zZXJ0X2xpbmVzKGd1aS5yb3csIGFyZzEpOworCQkgICAgYnJlYWs7CisJCWNhc2UgJyQnOgkvKiBDbGVhciB0byBlbmQtb2YtbGluZSAqLworCQkgICAgZ3VpX2NsZWFyX2Jsb2NrKGd1aS5yb3csIGd1aS5jb2wsIGd1aS5yb3csCisJCQkJCQkJICAgIChpbnQpQ29sdW1ucyAtIDEpOworCQkgICAgYnJlYWs7CisJCWNhc2UgJ2gnOgkvKiBUdXJuIG9uIGhpZ2hsaWdodGluZyAqLworCQkgICAgZ3VpX3N0YXJ0X2hpZ2hsaWdodChhcmcxKTsKKwkJICAgIGJyZWFrOworCQljYXNlICdIJzoJLyogVHVybiBvZmYgaGlnaGxpZ2h0aW5nICovCisJCSAgICBndWlfc3RvcF9oaWdobGlnaHQoYXJnMSk7CisJCSAgICBicmVhazsKKwkJY2FzZSAnZic6CS8qIGZsYXNoIHRoZSB3aW5kb3cgKHZpc3VhbCBiZWxsKSAqLworCQkgICAgZ3VpX21jaF9mbGFzaChhcmcxID09IDAgPyAyMCA6IGFyZzEpOworCQkgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICBwID0gcyArIDE7CS8qIFNraXAgdGhlIEVTQyAqLworCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgbGVuIC09IChpbnQpKCsrcCAtIHMpOworCSAgICBzID0gcDsKKwl9CisJZWxzZSBpZiAoCisjaWZkZWYgRUJDRElDCisJCUN0cmxDaGFyKHNbMF0pICE9IDAJLyogQ3RybCBjaGFyYWN0ZXIgKi8KKyNlbHNlCisJCXNbMF0gPCAweDIwCQkvKiBDdHJsIGNoYXJhY3RlciAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9TSUdOX0lDT05TCisJCSYmIHNbMF0gIT0gU0lHTl9CWVRFCisjIGlmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCQkmJiBzWzBdICE9IE1VTFRJU0lHTl9CWVRFCisjIGVuZGlmCisjZW5kaWYKKwkJKQorCXsKKwkgICAgaWYgKHNbMF0gPT0gJ1xuJykJCS8qIE5MICovCisJICAgIHsKKwkJZ3VpLmNvbCA9IDA7CisJCWlmIChndWkucm93IDwgZ3VpLnNjcm9sbF9yZWdpb25fYm90KQorCQkgICAgZ3VpLnJvdysrOworCQllbHNlCisJCSAgICBndWlfZGVsZXRlX2xpbmVzKGd1aS5zY3JvbGxfcmVnaW9uX3RvcCwgMSk7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoc1swXSA9PSAnXHInKQkvKiBDUiAqLworCSAgICB7CisJCWd1aS5jb2wgPSAwOworCSAgICB9CisJICAgIGVsc2UgaWYgKHNbMF0gPT0gJ1xiJykJLyogQmFja3NwYWNlICovCisJICAgIHsKKwkJaWYgKGd1aS5jb2wpCisJCSAgICAtLWd1aS5jb2w7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoc1swXSA9PSBDdHJsX0wpCS8qIGN1cnNvci1yaWdodCAqLworCSAgICB7CisJCSsrZ3VpLmNvbDsKKwkgICAgfQorCSAgICBlbHNlIGlmIChzWzBdID09IEN0cmxfRykJLyogQmVlcCAqLworCSAgICB7CisJCWd1aV9tY2hfYmVlcCgpOworCSAgICB9CisJICAgIC8qIE90aGVyIEN0cmwgY2hhcmFjdGVyOiBzaG91bGRuJ3QgaGFwcGVuISAqLworCisJICAgIC0tbGVuOwkvKiBTa2lwIHRoaXMgY2hhciAqLworCSAgICArK3M7CisJfQorCWVsc2UKKwl7CisJICAgIHAgPSBzOworCSAgICB3aGlsZSAobGVuID4gMCAmJiAoCisjaWZkZWYgRUJDRElDCisJCQlDdHJsQ2hhcigqcCkgPT0gMAorI2Vsc2UKKwkJCSpwID49IDB4MjAKKyNlbmRpZgorI2lmZGVmIEZFQVRfU0lHTl9JQ09OUworCQkJfHwgKnAgPT0gU0lHTl9CWVRFCisjIGlmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCQkJfHwgKnAgPT0gTVVMVElTSUdOX0JZVEUKKyMgZW5kaWYKKyNlbmRpZgorCQkJKSkKKwkgICAgeworCQlsZW4tLTsKKwkJcCsrOworCSAgICB9CisJICAgIGd1aV9vdXRzdHIocywgKGludCkocCAtIHMpKTsKKwkgICAgcyA9IHA7CisJfQorICAgIH0KKworICAgIC8qIFBvc3Rwb25lZCB1cGRhdGUgb2YgdGhlIGN1cnNvciAod29uJ3Qgd29yayBpZiAiY2FuX3VwZGF0ZV9jdXJzb3IiIGlzbid0CisgICAgICogc2V0KS4gKi8KKyAgICBpZiAoZm9yY2VfY3Vyc29yKQorCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIFRSVUUpOworCisgICAgLyogV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciB3aW5kb3cgdGhlIGRyYWdnaW5nIG11c3QgaGF2ZSBzdG9wcGVkLgorICAgICAqIFJlcXVpcmVkIGZvciBHVEssIGRyYWdnZWRfc2IgaXNuJ3QgcmVzZXQuICovCisgICAgaWYgKG9sZF9jdXJ3aW4gIT0gY3Vyd2luKQorCWd1aS5kcmFnZ2VkX3NiID0gU0JBUl9OT05FOworCisgICAgLyogVXBkYXRlIHRoZSBzY3JvbGxiYXJzIGFmdGVyIGNsZWFyaW5nIHRoZSBzY3JlZW4gb3Igd2hlbiBzd2l0Y2hlZAorICAgICAqIHRvIGFub3RoZXIgd2luZG93LgorICAgICAqIFVwZGF0ZSB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgYWx3YXlzLCBpdCdzIGRpZmZpY3VsdCB0byBjaGVjayBhbGwKKyAgICAgKiBzaXR1YXRpb25zIHdoZXJlIGl0IG1pZ2h0IGNoYW5nZS4gKi8KKyAgICBpZiAoZm9yY2Vfc2Nyb2xsYmFyIHx8IG9sZF9jdXJ3aW4gIT0gY3Vyd2luKQorCWd1aV91cGRhdGVfc2Nyb2xsYmFycyhmb3JjZV9zY3JvbGxiYXIpOworICAgIGVsc2UKKwlndWlfdXBkYXRlX2hvcml6X3Njcm9sbGJhcihGQUxTRSk7CisgICAgb2xkX2N1cndpbiA9IGN1cndpbjsKKworICAgIC8qCisgICAgICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBjbGVhcmVkIHNpbmNlIEF0aGVuYSBkb2Vzbid0IHRlbGwgdXMgd2hlbgorICAgICAqIGhlIGlzIGRvbmUgZHJhZ2dpbmcuICBEbyB0aGUgc2FtZSBmb3IgR1RLLgorICAgICAqLworI2lmIGRlZmluZWQoRkVBVF9HVUlfQVRIRU5BKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykKKyAgICBndWkuZHJhZ2dlZF9zYiA9IFNCQVJfTk9ORTsKKyNlbmRpZgorCisgICAgZ3VpX21jaF9mbHVzaCgpOwkJICAgIC8qIEluIGNhc2UgdmltIGRlY2lkZXMgdG8gdGFrZSBhIG5hcCAqLworfQorCisvKgorICogV2hlbiBTY3JlZW5MaW5lc1tdIGlzIGludmFsaWQsIHVwZGF0aW5nIHRoZSBjdXJzb3Igc2hvdWxkIG5vdCBiZSBkb25lLCBpdAorICogcHJvZHVjZXMgd3JvbmcgcmVzdWx0cy4gIENhbGwgZ3VpX2RvbnRfdXBkYXRlX2N1cnNvcigpIGJlZm9yZSB0aGF0IGNvZGUgYW5kCisgKiBndWlfY2FuX3VwZGF0ZV9jdXJzb3IoKSBhZnRlcndhcmRzLgorICovCisgICAgdm9pZAorZ3VpX2RvbnRfdXBkYXRlX2N1cnNvcigpCit7CisgICAgaWYgKGd1aS5pbl91c2UpCisgICAgeworCS8qIFVuZHJhdyB0aGUgY3Vyc29yIG5vdywgd2UgcHJvYmFibHkgY2FuJ3QgZG8gaXQgYWZ0ZXIgdGhlIGNoYW5nZS4gKi8KKwlndWlfdW5kcmF3X2N1cnNvcigpOworCWNhbl91cGRhdGVfY3Vyc29yID0gRkFMU0U7CisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX2Nhbl91cGRhdGVfY3Vyc29yKCkKK3sKKyAgICBjYW5fdXBkYXRlX2N1cnNvciA9IFRSVUU7CisgICAgLyogTm8gbmVlZCB0byB1cGRhdGUgdGhlIGN1cnNvciByaWdodCBub3csIHRoZXJlIGlzIGFsd2F5cyBtb3JlIG91dHB1dAorICAgICAqIGFmdGVyIHNjcm9sbGluZy4gKi8KK30KKworICAgIHN0YXRpYyB2b2lkCitndWlfb3V0c3RyKHMsIGxlbikKKyAgICBjaGFyX3UgICpzOworICAgIGludAkgICAgbGVuOworeworICAgIGludAkgICAgdGhpc19sZW47CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkgICAgY2VsbHM7CisjZW5kaWYKKworICAgIGlmIChsZW4gPT0gMCkKKwlyZXR1cm47CisKKyAgICBpZiAobGVuIDwgMCkKKwlsZW4gPSAoaW50KVNUUkxFTihzKTsKKworICAgIHdoaWxlIChsZW4gPiAwKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIC8qIEZpbmQgb3V0IGhvdyBtYW55IGNoYXJzIGZpdCBpbiB0aGUgY3VycmVudCBsaW5lLiAqLworCSAgICBjZWxscyA9IDA7CisJICAgIGZvciAodGhpc19sZW4gPSAwOyB0aGlzX2xlbiA8IGxlbjsgKQorCSAgICB7CisJCWNlbGxzICs9ICgqbWJfcHRyMmNlbGxzKShzICsgdGhpc19sZW4pOworCQlpZiAoZ3VpLmNvbCArIGNlbGxzID4gQ29sdW1ucykKKwkJICAgIGJyZWFrOworCQl0aGlzX2xlbiArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHMgKyB0aGlzX2xlbik7CisJICAgIH0KKwkgICAgaWYgKHRoaXNfbGVuID4gbGVuKQorCQl0aGlzX2xlbiA9IGxlbjsJICAgIC8qIGRvbid0IGluY2x1ZGUgZm9sbG93aW5nIGNvbXBvc2luZyBjaGFyICovCisJfQorCWVsc2UKKyNlbmRpZgorCSAgICBpZiAoZ3VpLmNvbCArIGxlbiA+IENvbHVtbnMpCisJICAgIHRoaXNfbGVuID0gQ29sdW1ucyAtIGd1aS5jb2w7CisJZWxzZQorCSAgICB0aGlzX2xlbiA9IGxlbjsKKworCSh2b2lkKWd1aV9vdXRzdHJfbm93cmFwKHMsIHRoaXNfbGVuLAorCQkJCQkgIDAsIChndWljb2xvcl9UKTAsIChndWljb2xvcl9UKTAsIDApOworCXMgKz0gdGhpc19sZW47CisJbGVuIC09IHRoaXNfbGVuOworI2lmZGVmIEZFQVRfTUJZVEUKKwkvKiBmaWxsIHVwIGZvciBhIGRvdWJsZS13aWR0aCBjaGFyIHRoYXQgZG9lc24ndCBmaXQuICovCisJaWYgKGxlbiA+IDAgJiYgZ3VpLmNvbCA8IENvbHVtbnMpCisJICAgICh2b2lkKWd1aV9vdXRzdHJfbm93cmFwKChjaGFyX3UgKikiICIsIDEsCisJCQkJCSAgMCwgKGd1aWNvbG9yX1QpMCwgKGd1aWNvbG9yX1QpMCwgMCk7CisjZW5kaWYKKwkvKiBUaGUgY3Vyc29yIG1heSB3cmFwIHRvIHRoZSBuZXh0IGxpbmUuICovCisJaWYgKGd1aS5jb2wgPj0gQ29sdW1ucykKKwl7CisJICAgIGd1aS5jb2wgPSAwOworCSAgICBndWkucm93Kys7CisJfQorICAgIH0KK30KKworLyoKKyAqIE91dHB1dCBvbmUgY2hhcmFjdGVyIChtYXkgYmUgb25lIG9yIHR3byBkaXNwbGF5IGNlbGxzKS4KKyAqIENhbGxlciBtdXN0IGNoZWNrIGZvciB2YWxpZCAib2ZmIi4KKyAqIFJldHVybnMgRkFJTCBvciBPSywganVzdCBsaWtlIGd1aV9vdXRzdHJfbm93cmFwKCkuCisgKi8KKyAgICBzdGF0aWMgaW50CitndWlfc2NyZWVuY2hhcihvZmYsIGZsYWdzLCBmZywgYmcsIGJhY2spCisgICAgaW50CQlvZmY7CSAgICAvKiBPZmZzZXQgZnJvbSBzdGFydCBvZiBzY3JlZW4gKi8KKyAgICBpbnQJCWZsYWdzOworICAgIGd1aWNvbG9yX1QJZmcsIGJnOwkgICAgLyogY29sb3JzIGZvciBjdXJzb3IgKi8KKyAgICBpbnQJCWJhY2s7CSAgICAvKiBiYWNrdXAgdGhpcyBtYW55IGNoYXJzIHdoZW4gdXNpbmcgYm9sZCB0cmljayAqLworeworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBjaGFyX3UJYnVmW01CX01BWEJZVEVTICsgMV07CisKKyAgICAvKiBEb24ndCBkcmF3IHJpZ2h0IGhhbHZlIG9mIGEgZG91YmxlLXdpZHRoIFVURi04IGNoYXIuICJjYW5ub3QgaGFwcGVuIiAqLworICAgIGlmIChlbmNfdXRmOCAmJiBTY3JlZW5MaW5lc1tvZmZdID09IDApCisJcmV0dXJuIE9LOworCisgICAgaWYgKGVuY191dGY4ICYmIFNjcmVlbkxpbmVzVUNbb2ZmXSAhPSAwKQorCS8qIERyYXcgVVRGLTggbXVsdGktYnl0ZSBjaGFyYWN0ZXIuICovCisJcmV0dXJuIGd1aV9vdXRzdHJfbm93cmFwKGJ1ZiwgdXRmY19jaGFyMmJ5dGVzKG9mZiwgYnVmKSwKKwkJCQkJCQkgZmxhZ3MsIGZnLCBiZywgYmFjayk7CisKKyAgICBpZiAoZW5jX2RiY3MgPT0gREJDU19KUE5VICYmIFNjcmVlbkxpbmVzW29mZl0gPT0gMHg4ZSkKKyAgICB7CisJYnVmWzBdID0gU2NyZWVuTGluZXNbb2ZmXTsKKwlidWZbMV0gPSBTY3JlZW5MaW5lczJbb2ZmXTsKKwlyZXR1cm4gZ3VpX291dHN0cl9ub3dyYXAoYnVmLCAyLCBmbGFncywgZmcsIGJnLCBiYWNrKTsKKyAgICB9CisKKyAgICAvKiBEcmF3IG5vbi1tdWx0aS1ieXRlIGNoYXJhY3RlciBvciBEQkNTIGNoYXJhY3Rlci4gKi8KKyAgICByZXR1cm4gZ3VpX291dHN0cl9ub3dyYXAoU2NyZWVuTGluZXMgKyBvZmYsCisJICAgIGVuY19kYmNzID8gKCptYl9wdHIybGVuX2NoZWNrKShTY3JlZW5MaW5lcyArIG9mZikgOiAxLAorCQkJCQkJCSBmbGFncywgZmcsIGJnLCBiYWNrKTsKKyNlbHNlCisgICAgcmV0dXJuIGd1aV9vdXRzdHJfbm93cmFwKFNjcmVlbkxpbmVzICsgb2ZmLCAxLCBmbGFncywgZmcsIGJnLCBiYWNrKTsKKyNlbmRpZgorfQorCisjaWZkZWYgSEFWRV9HVEsyCisvKgorICogT3V0cHV0IHRoZSBzdHJpbmcgYXQgdGhlIGdpdmVuIHNjcmVlbiBwb3NpdGlvbi4gIFRoaXMgaXMgdXNlZCBpbiBwbGFjZQorICogb2YgZ3VpX3NjcmVlbmNoYXIoKSB3aGVyZSBwb3NzaWJsZSBiZWNhdXNlIFBhbmdvIG5lZWRzIGFzIG11Y2ggY29udGV4dAorICogYXMgcG9zc2libGUgdG8gd29yayBuaWNlbHkuICBJdCdzIGEgbG90IGZhc3RlciBhcyB3ZWxsLgorICovCisgICAgc3RhdGljIGludAorZ3VpX3NjcmVlbnN0cihvZmYsIGxlbiwgZmxhZ3MsIGZnLCBiZywgYmFjaykKKyAgICBpbnQJCW9mZjsJICAgIC8qIE9mZnNldCBmcm9tIHN0YXJ0IG9mIHNjcmVlbiAqLworICAgIGludAkJbGVuOwkgICAgLyogc3RyaW5nIGxlbmd0aCBpbiBzY3JlZW4gY2VsbHMgKi8KKyAgICBpbnQJCWZsYWdzOworICAgIGd1aWNvbG9yX1QJZmcsIGJnOwkgICAgLyogY29sb3JzIGZvciBjdXJzb3IgKi8KKyAgICBpbnQJCWJhY2s7CSAgICAvKiBiYWNrdXAgdGhpcyBtYW55IGNoYXJzIHdoZW4gdXNpbmcgYm9sZCB0cmljayAqLworeworICAgIGNoYXJfdSAgKmJ1ZjsKKyAgICBpbnQJICAgIG91dGxlbiA9IDA7CisgICAgaW50CSAgICBpOworICAgIGludAkgICAgcmV0dmFsOworCisgICAgaWYgKGxlbiA8PSAwKSAvKiAiY2Fubm90IGhhcHBlbiI/ICovCisJcmV0dXJuIE9LOworCisgICAgaWYgKGVuY191dGY4KQorICAgIHsKKwlidWYgPSBhbGxvYygodW5zaWduZWQpKGxlbiAqIE1CX01BWEJZVEVTICsgMSkpOworCWlmIChidWYgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE9LOyAvKiBub3QgbXVjaCB3ZSBjb3VsZCBkbyBoZXJlLi4uICovCisKKwlmb3IgKGkgPSBvZmY7IGkgPCBvZmYgKyBsZW47ICsraSkKKwl7CisJICAgIGlmIChTY3JlZW5MaW5lc1tpXSA9PSAwKQorCQljb250aW51ZTsgLyogc2tpcCBzZWNvbmQgaGFsZiBvZiBkb3VibGUtd2lkdGggY2hhciAqLworCisJICAgIGlmIChTY3JlZW5MaW5lc1VDW2ldID09IDApCisJCWJ1ZltvdXRsZW4rK10gPSBTY3JlZW5MaW5lc1tpXTsKKwkgICAgZWxzZQorCQlvdXRsZW4gKz0gdXRmY19jaGFyMmJ5dGVzKGksIGJ1ZiArIG91dGxlbik7CisJfQorCisJYnVmW291dGxlbl0gPSBOVUw7IC8qIG9ubHkgdG8gYWlkIGRlYnVnZ2luZyAqLworCXJldHZhbCA9IGd1aV9vdXRzdHJfbm93cmFwKGJ1Ziwgb3V0bGVuLCBmbGFncywgZmcsIGJnLCBiYWNrKTsKKwl2aW1fZnJlZShidWYpOworCisJcmV0dXJuIHJldHZhbDsKKyAgICB9CisgICAgZWxzZSBpZiAoZW5jX2RiY3MgPT0gREJDU19KUE5VKQorICAgIHsKKwlidWYgPSBhbGxvYygodW5zaWduZWQpKGxlbiAqIDIgKyAxKSk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCSAgICByZXR1cm4gT0s7IC8qIG5vdCBtdWNoIHdlIGNvdWxkIGRvIGhlcmUuLi4gKi8KKworCWZvciAoaSA9IG9mZjsgaSA8IG9mZiArIGxlbjsgKytpKQorCXsKKwkgICAgYnVmW291dGxlbisrXSA9IFNjcmVlbkxpbmVzW2ldOworCisJICAgIC8qIGhhbmRsZSBkb3VibGUtYnl0ZSBzaW5nbGUtd2lkdGggY2hhciAqLworCSAgICBpZiAoU2NyZWVuTGluZXNbaV0gPT0gMHg4ZSkKKwkJYnVmW291dGxlbisrXSA9IFNjcmVlbkxpbmVzMltpXTsKKwkgICAgZWxzZSBpZiAoTUJfQllURTJMRU4oU2NyZWVuTGluZXNbaV0pID09IDIpCisJCWJ1ZltvdXRsZW4rK10gPSBTY3JlZW5MaW5lc1srK2ldOworCX0KKworCWJ1ZltvdXRsZW5dID0gTlVMOyAvKiBvbmx5IHRvIGFpZCBkZWJ1Z2dpbmcgKi8KKwlyZXR2YWwgPSBndWlfb3V0c3RyX25vd3JhcChidWYsIG91dGxlbiwgZmxhZ3MsIGZnLCBiZywgYmFjayk7CisJdmltX2ZyZWUoYnVmKTsKKworCXJldHVybiByZXR2YWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJcmV0dXJuIGd1aV9vdXRzdHJfbm93cmFwKCZTY3JlZW5MaW5lc1tvZmZdLCBsZW4sCisJCQkJIGZsYWdzLCBmZywgYmcsIGJhY2spOworICAgIH0KK30KKyNlbmRpZiAvKiBIQVZFX0dUSzIgKi8KKworLyoKKyAqIE91dHB1dCB0aGUgZ2l2ZW4gc3RyaW5nIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4gIElmIHRoZSBzdHJpbmcgaXMKKyAqIHRvbyBsb25nIHRvIGZpdCBvbiB0aGUgbGluZSwgdGhlbiBpdCBpcyB0cnVuY2F0ZWQuCisgKiAiZmxhZ3MiOgorICogR1VJX01PTl9JU19DVVJTT1Igc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIHRvCisgKiBhY3R1YWxseSBkcmF3IChhbiBpbnZlcnRlZCkgY3Vyc29yLgorICogR1VJX01PTl9UUlNfQ1VSU09SIGlzIHVzZWQgdG8gZHJhdyB0aGUgY3Vyc29yIHRleHQgd2l0aCBhIHRyYW5zcGFyYW50CisgKiBiYWNrZ3JvdW5kLgorICogR1VJX01PTl9OT0NMRUFSIGlzIHVzZWQgdG8gYXZvaWQgY2xlYXJpbmcgdGhlIHNlbGVjdGlvbiB3aGVuIGRyYXdpbmcgb3ZlcgorICogaXQuCisgKiBSZXR1cm5zIE9LLCB1bmxlc3MgImJhY2siIGlzIG5vbi16ZXJvIGFuZCB1c2luZyB0aGUgYm9sZCB0cmljaywgdGhlbiByZXR1cm4KKyAqIEZBSUwgKHRoZSBjYWxsZXIgc2hvdWxkIHN0YXJ0IGRyYXdpbmcgImJhY2siIGNoYXJzIGJhY2spLgorICovCisgICAgaW50CitndWlfb3V0c3RyX25vd3JhcChzLCBsZW4sIGZsYWdzLCBmZywgYmcsIGJhY2spCisgICAgY2hhcl91CSpzOworICAgIGludAkJbGVuOworICAgIGludAkJZmxhZ3M7CisgICAgZ3VpY29sb3JfVAlmZywgYmc7CSAgICAvKiBjb2xvcnMgZm9yIGN1cnNvciAqLworICAgIGludAkJYmFjazsJICAgIC8qIGJhY2t1cCB0aGlzIG1hbnkgY2hhcnMgd2hlbiB1c2luZyBib2xkIHRyaWNrICovCit7CisgICAgbG9uZ191CWhpZ2hsaWdodF9tYXNrOworICAgIGxvbmdfdQlobF9tYXNrX3RvZG87CisgICAgZ3VpY29sb3JfVAlmZ19jb2xvcjsKKyAgICBndWljb2xvcl9UCWJnX2NvbG9yOworI2lmICFkZWZpbmVkKE1TV0lOMTZfRkFTVFRFWFQpICYmICFkZWZpbmVkKEhBVkVfR1RLMikKKyAgICBHdWlGb250CWZvbnQgPSBOT0ZPTlQ7CisjIGlmZGVmIEZFQVRfWEZPTlRTRVQKKyAgICBHdWlGb250c2V0CWZvbnRzZXQgPSBOT0ZPTlRTRVQ7CisjIGVuZGlmCisjZW5kaWYKKyAgICBhdHRyZW50cnlfVAkqYWVwID0gTlVMTDsKKyAgICBpbnQJCWRyYXdfZmxhZ3M7CisgICAgaW50CQljb2wgPSBndWkuY29sOworI2lmZGVmIEZFQVRfU0lHTl9JQ09OUworICAgIGludAkJZHJhd19zaWduID0gRkFMU0U7CisjIGlmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIGludAkJbXVsdGlfc2lnbiA9IEZBTFNFOworIyBlbmRpZgorI2VuZGlmCisKKyAgICBpZiAobGVuIDwgMCkKKwlsZW4gPSAoaW50KVNUUkxFTihzKTsKKyAgICBpZiAobGVuID09IDApCisJcmV0dXJuIE9LOworCisjaWZkZWYgRkVBVF9TSUdOX0lDT05TCisgICAgaWYgKCpzID09IFNJR05fQllURQorIyBpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKwkgIHx8ICpzID09IE1VTFRJU0lHTl9CWVRFCisjIGVuZGlmCisgICAgKQorICAgIHsKKyMgaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJaWYgKCpzID09IE1VTFRJU0lHTl9CWVRFKQorCSAgICBtdWx0aV9zaWduID0gVFJVRTsKKyMgZW5kaWYKKwkvKiBkcmF3IHNwYWNlcyBpbnN0ZWFkICovCisJcyA9IChjaGFyX3UgKikiICAiOworCWlmIChsZW4gPT0gMSAmJiBjb2wgPiAwKQorCSAgICAtLWNvbDsKKwlsZW4gPSAyOworCWRyYXdfc2lnbiA9IFRSVUU7CisJaGlnaGxpZ2h0X21hc2sgPSAwOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICBpZiAoZ3VpLmhpZ2hsaWdodF9tYXNrID4gSExfQUxMKQorICAgIHsKKwlhZXAgPSBzeW5fZ3VpX2F0dHIyZW50cnkoZ3VpLmhpZ2hsaWdodF9tYXNrKTsKKwlpZiAoYWVwID09IE5VTEwpCSAgICAvKiBoaWdobGlnaHRpbmcgbm90IHNldCAqLworCSAgICBoaWdobGlnaHRfbWFzayA9IDA7CisJZWxzZQorCSAgICBoaWdobGlnaHRfbWFzayA9IGFlcC0+YWVfYXR0cjsKKyAgICB9CisgICAgZWxzZQorCWhpZ2hsaWdodF9tYXNrID0gZ3VpLmhpZ2hsaWdodF9tYXNrOworICAgIGhsX21hc2tfdG9kbyA9IGhpZ2hsaWdodF9tYXNrOworCisjaWYgIWRlZmluZWQoTVNXSU4xNl9GQVNUVEVYVCkgJiYgIWRlZmluZWQoSEFWRV9HVEsyKQorICAgIC8qIFNldCB0aGUgZm9udCAqLworICAgIGlmIChhZXAgIT0gTlVMTCAmJiBhZXAtPmFlX3UuZ3VpLmZvbnQgIT0gTk9GT05UKQorCWZvbnQgPSBhZXAtPmFlX3UuZ3VpLmZvbnQ7CisjIGlmZGVmIEZFQVRfWEZPTlRTRVQKKyAgICBlbHNlIGlmIChhZXAgIT0gTlVMTCAmJiBhZXAtPmFlX3UuZ3VpLmZvbnRzZXQgIT0gTk9GT05UU0VUKQorCWZvbnRzZXQgPSBhZXAtPmFlX3UuZ3VpLmZvbnRzZXQ7CisjIGVuZGlmCisgICAgZWxzZQorICAgIHsKKyMgaWZkZWYgRkVBVF9YRk9OVFNFVAorCWlmIChndWkuZm9udHNldCAhPSBOT0ZPTlRTRVQpCisJICAgIGZvbnRzZXQgPSBndWkuZm9udHNldDsKKwllbHNlCisjIGVuZGlmCisJICAgIGlmIChobF9tYXNrX3RvZG8gJiAoSExfQk9MRCB8IEhMX1NUQU5ET1VUKSkKKwl7CisJICAgIGlmICgoaGxfbWFza190b2RvICYgSExfSVRBTElDKSAmJiBndWkuYm9sZGl0YWxfZm9udCAhPSBOT0ZPTlQpCisJICAgIHsKKwkJZm9udCA9IGd1aS5ib2xkaXRhbF9mb250OworCQlobF9tYXNrX3RvZG8gJj0gfihITF9CT0xEIHwgSExfU1RBTkRPVVQgfCBITF9JVEFMSUMpOworCSAgICB9CisJICAgIGVsc2UgaWYgKGd1aS5ib2xkX2ZvbnQgIT0gTk9GT05UKQorCSAgICB7CisJCWZvbnQgPSBndWkuYm9sZF9mb250OworCQlobF9tYXNrX3RvZG8gJj0gfihITF9CT0xEIHwgSExfU1RBTkRPVVQpOworCSAgICB9CisJICAgIGVsc2UKKwkJZm9udCA9IGd1aS5ub3JtX2ZvbnQ7CisJfQorCWVsc2UgaWYgKChobF9tYXNrX3RvZG8gJiBITF9JVEFMSUMpICYmIGd1aS5pdGFsX2ZvbnQgIT0gTk9GT05UKQorCXsKKwkgICAgZm9udCA9IGd1aS5pdGFsX2ZvbnQ7CisJICAgIGhsX21hc2tfdG9kbyAmPSB+SExfSVRBTElDOworCX0KKwllbHNlCisJICAgIGZvbnQgPSBndWkubm9ybV9mb250OworICAgIH0KKyMgaWZkZWYgRkVBVF9YRk9OVFNFVAorICAgIGlmIChmb250c2V0ICE9IE5PRk9OVFNFVCkKKwlndWlfbWNoX3NldF9mb250c2V0KGZvbnRzZXQpOworICAgIGVsc2UKKyMgZW5kaWYKKwlndWlfbWNoX3NldF9mb250KGZvbnQpOworI2VuZGlmCisKKyAgICBkcmF3X2ZsYWdzID0gMDsKKworICAgIC8qIFNldCB0aGUgY29sb3IgKi8KKyAgICBiZ19jb2xvciA9IGd1aS5iYWNrX3BpeGVsOworICAgIGlmICgoZmxhZ3MgJiBHVUlfTU9OX0lTX0NVUlNPUikgJiYgZ3VpLmluX2ZvY3VzKQorICAgIHsKKwlkcmF3X2ZsYWdzIHw9IERSQVdfQ1VSU09SOworCWZnX2NvbG9yID0gZmc7CisJYmdfY29sb3IgPSBiZzsKKyAgICB9CisgICAgZWxzZSBpZiAoYWVwICE9IE5VTEwpCisgICAgeworCWZnX2NvbG9yID0gYWVwLT5hZV91Lmd1aS5mZ19jb2xvcjsKKwlpZiAoZmdfY29sb3IgPT0gSU5WQUxDT0xPUikKKwkgICAgZmdfY29sb3IgPSBndWkubm9ybV9waXhlbDsKKwliZ19jb2xvciA9IGFlcC0+YWVfdS5ndWkuYmdfY29sb3I7CisJaWYgKGJnX2NvbG9yID09IElOVkFMQ09MT1IpCisJICAgIGJnX2NvbG9yID0gZ3VpLmJhY2tfcGl4ZWw7CisgICAgfQorICAgIGVsc2UKKwlmZ19jb2xvciA9IGd1aS5ub3JtX3BpeGVsOworCisgICAgaWYgKGhpZ2hsaWdodF9tYXNrICYgKEhMX0lOVkVSU0UgfCBITF9TVEFORE9VVCkpCisgICAgeworI2lmIGRlZmluZWQoQU1JR0EpIHx8IGRlZmluZWQoUklTQ09TKQorCWd1aV9tY2hfc2V0X2NvbG9ycyhiZ19jb2xvciwgZmdfY29sb3IpOworI2Vsc2UKKwlndWlfbWNoX3NldF9mZ19jb2xvcihiZ19jb2xvcik7CisJZ3VpX21jaF9zZXRfYmdfY29sb3IoZmdfY29sb3IpOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWYgZGVmaW5lZChBTUlHQSkgfHwgZGVmaW5lZChSSVNDT1MpCisJZ3VpX21jaF9zZXRfY29sb3JzKGZnX2NvbG9yLCBiZ19jb2xvcik7CisjZWxzZQorCWd1aV9tY2hfc2V0X2ZnX2NvbG9yKGZnX2NvbG9yKTsKKwlndWlfbWNoX3NldF9iZ19jb2xvcihiZ19jb2xvcik7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBDbGVhciB0aGUgc2VsZWN0aW9uIGlmIHdlIGFyZSBhYm91dCB0byB3cml0ZSBvdmVyIGl0ICovCisgICAgaWYgKCEoZmxhZ3MgJiBHVUlfTU9OX05PQ0xFQVIpKQorCWNsaXBfbWF5X2NsZWFyX3NlbGVjdGlvbihndWkucm93LCBndWkucm93KTsKKworCisjaWZuZGVmIE1TV0lOMTZfRkFTVFRFWFQKKyAgICAvKiBJZiB0aGVyZSdzIG5vIGJvbGQgZm9udCwgdGhlbiBmYWtlIGl0ICovCisgICAgaWYgKGhsX21hc2tfdG9kbyAmIChITF9CT0xEIHwgSExfU1RBTkRPVVQpKQorCWRyYXdfZmxhZ3MgfD0gRFJBV19CT0xEOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFdoZW4gZHJhd2luZyBib2xkIG9yIGl0YWxpYyBjaGFyYWN0ZXJzIHRoZSBzcGlsbC1vdmVyIGZyb20gdGhlIGxlZnQKKyAgICAgKiBuZWlnaGJvciBtYXkgYmUgZGVzdHJveWVkLiAgTGV0IHRoZSBjYWxsZXIgYmFja3VwIHRvIHN0YXJ0IHJlZHJhd2luZworICAgICAqIGp1c3QgYWZ0ZXIgYSBibGFuay4KKyAgICAgKi8KKyAgICBpZiAoYmFjayAhPSAwICYmICgoZHJhd19mbGFncyAmIERSQVdfQk9MRCkgfHwgKGhpZ2hsaWdodF9tYXNrICYgSExfSVRBTElDKSkpCisJcmV0dXJuIEZBSUw7CisKKyNpZiBkZWZpbmVkKFJJU0NPUykgfHwgZGVmaW5lZChIQVZFX0dUSzIpCisgICAgLyogSWYgdGhlcmUncyBubyBpdGFsaWMgZm9udCwgdGhlbiBmYWtlIGl0LgorICAgICAqIEZvciBHVEsyLCB3ZSBkb24ndCBuZWVkIGEgZGlmZmVyZW50IGZvbnQgZm9yIGl0YWxpYyBzdHlsZS4gKi8KKyAgICBpZiAoaGxfbWFza190b2RvICYgSExfSVRBTElDKQorCWRyYXdfZmxhZ3MgfD0gRFJBV19JVEFMSUM7CisKKyAgICAvKiBEbyB3ZSB1bmRlcmxpbmUgdGhlIHRleHQ/ICovCisgICAgaWYgKGhsX21hc2tfdG9kbyAmIEhMX1VOREVSTElORSkKKwlkcmF3X2ZsYWdzIHw9IERSQVdfVU5ERVJMOworI2Vsc2UKKyAgICAvKiBEbyB3ZSB1bmRlcmxpbmUgdGhlIHRleHQ/ICovCisgICAgaWYgKChobF9tYXNrX3RvZG8gJiBITF9VTkRFUkxJTkUpCisjIGlmbmRlZiBNU1dJTjE2X0ZBU1RURVhUCisJICAgIHx8IChobF9tYXNrX3RvZG8gJiBITF9JVEFMSUMpCisjIGVuZGlmCisgICAgICAgKQorCWRyYXdfZmxhZ3MgfD0gRFJBV19VTkRFUkw7CisjZW5kaWYKKworICAgIC8qIERvIHdlIGRyYXcgdHJhbnNwYXJhbnRseT8gKi8KKyAgICBpZiAoZmxhZ3MgJiBHVUlfTU9OX1RSU19DVVJTT1IpCisJZHJhd19mbGFncyB8PSBEUkFXX1RSQU5TUDsKKworICAgIC8qCisgICAgICogRHJhdyB0aGUgdGV4dC4KKyAgICAgKi8KKyNpZmRlZiBIQVZFX0dUSzIKKyAgICAvKiBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIGxlbmd0aCBpbiBkaXNwbGF5IGNlbGxzICovCisgICAgbGVuID0gZ3VpX2d0azJfZHJhd19zdHJpbmcoZ3VpLnJvdywgY29sLCBzLCBsZW4sIGRyYXdfZmxhZ3MpOworI2Vsc2UKKyMgaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChlbmNfdXRmOCkKKyAgICB7CisJaW50CXN0YXJ0OwkJLyogaW5kZXggb2YgYnl0ZXMgdG8gYmUgZHJhd24gKi8KKwlpbnQJY2VsbHM7CQkvKiBjZWxsd2lkdGggb2YgYnl0ZXMgdG8gYmUgZHJhd24gKi8KKwlpbnQJdGhpc2xlbjsJLyogbGVuZ3RoIG9mIGJ5dGVzIHRvIGJlIGRyYXdpbiAqLworCWludAljbjsJCS8qIGNlbGx3aWR0aCBvZiBjdXJyZW50IGNoYXIgKi8KKwlpbnQJaTsJCS8qIGluZGV4IG9mIGN1cnJlbnQgY2hhciAqLworCWludAljOwkJLyogY3VycmVudCBjaGFyIHZhbHVlICovCisJaW50CWNsOwkJLyogYnl0ZSBsZW5ndGggb2YgY3VycmVudCBjaGFyICovCisJaW50CWNvbXBpbmc7CS8qIGN1cnJlbnQgY2hhciBpcyBjb21wb3NpbmcgKi8KKwlpbnQJc2NvbCA9IGNvbDsJLyogc2NyZWVuIGNvbHVtbiAqLworCWludAlkb3dpZGU7CQkvKiB1c2UgJ2d1aWZvbnR3aWRlJyAqLworCisJLyogQnJlYWsgdGhlIHN0cmluZyBhdCBhIGNvbXBvc2luZyBjaGFyYWN0ZXIsIGl0IGhhcyB0byBiZSBkcmF3biBvbgorCSAqIHRvcCBvZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLiAqLworCXN0YXJ0ID0gMDsKKwljZWxscyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBjbCkKKwl7CisJICAgIGMgPSB1dGZfcHRyMmNoYXIocyArIGkpOworCSAgICBjbiA9IHV0Zl9jaGFyMmNlbGxzKGMpOworCSAgICBpZiAoY24gPiAxCisjICBpZmRlZiBGRUFUX1hGT05UU0VUCisJCSAgICAmJiBmb250c2V0ID09IE5PRk9OVFNFVAorIyAgZW5kaWYKKwkJICAgICYmIGd1aS53aWRlX2ZvbnQgIT0gTk9GT05UKQorCQlkb3dpZGUgPSBUUlVFOworCSAgICBlbHNlCisJCWRvd2lkZSA9IEZBTFNFOworCSAgICBjb21waW5nID0gdXRmX2lzY29tcG9zaW5nKGMpOworCSAgICBpZiAoIWNvbXBpbmcpCS8qIGNvdW50IGNlbGxzIGZyb20gbm9uLWNvbXBvc2luZyBjaGFycyAqLworCQljZWxscyArPSBjbjsKKwkgICAgY2wgPSB1dGZfcHRyMmxlbl9jaGVjayhzICsgaSk7CisJICAgIGlmIChjbCA9PSAwKQkvKiBoaXQgZW5kIG9mIHN0cmluZyAqLworCQlsZW4gPSBpICsgY2w7CS8qIGxlbiBtdXN0IGJlIHdyb25nICJjYW5ub3QgaGFwcGVuIiAqLworCisJICAgIC8qIHByaW50IHRoZSBzdHJpbmcgc28gZmFyIGlmIGl0J3MgdGhlIGxhc3QgY2hhcmFjdGVyIG9yIHRoZXJlIGlzCisJICAgICAqIGEgY29tcG9zaW5nIGNoYXJhY3Rlci4gKi8KKwkgICAgaWYgKGkgKyBjbCA+PSBsZW4gfHwgKGNvbXBpbmcgJiYgaSA+IHN0YXJ0KSB8fCBkb3dpZGUKKyMgIGlmIGRlZmluZWQoRkVBVF9HVUlfWDExKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykKKwkJICAgIHx8IChjbiA+IDEKKyMgICBpZmRlZiBGRUFUX1hGT05UU0VUCisJCQkvKiBObyBmb250c2V0OiBBdCBsZWFzdCBkcmF3IGNoYXIgYWZ0ZXIgd2lkZSBjaGFyIGF0CisJCQkgKiByaWdodCBwb3NpdGlvbi4gKi8KKwkJCSYmIGZvbnRzZXQgPT0gTk9GT05UU0VUCisjICAgZW5kaWYKKwkJICAgICAgICkKKyMgIGVuZGlmCisJICAgICAgICkKKwkgICAgeworCQlpZiAoY29tcGluZyB8fCBkb3dpZGUpCisJCSAgICB0aGlzbGVuID0gaSAtIHN0YXJ0OworCQllbHNlCisJCSAgICB0aGlzbGVuID0gaSAtIHN0YXJ0ICsgY2w7CisJCWlmICh0aGlzbGVuID4gMCkKKwkJeworCQkgICAgZ3VpX21jaF9kcmF3X3N0cmluZyhndWkucm93LCBzY29sLCBzICsgc3RhcnQsIHRoaXNsZW4sCisJCQkJCQkJCSAgZHJhd19mbGFncyk7CisJCSAgICBzdGFydCArPSB0aGlzbGVuOworCQl9CisJCXNjb2wgKz0gY2VsbHM7CisJCWNlbGxzID0gMDsKKwkJaWYgKGRvd2lkZSkKKwkJeworCQkgICAgZ3VpX21jaF9zZXRfZm9udChndWkud2lkZV9mb250KTsKKwkJICAgIGd1aV9tY2hfZHJhd19zdHJpbmcoZ3VpLnJvdywgc2NvbCAtIGNuLAorCQkJCQkJICAgcyArIHN0YXJ0LCBjbCwgZHJhd19mbGFncyk7CisJCSAgICBndWlfbWNoX3NldF9mb250KGZvbnQpOworCQkgICAgc3RhcnQgKz0gY2w7CisJCX0KKworIyAgaWYgZGVmaW5lZChGRUFUX0dVSV9YMTEpIHx8IGRlZmluZWQoRkVBVF9HVUlfR1RLKQorCQkvKiBObyBmb250c2V0OiBkcmF3IGEgc3BhY2UgdG8gZmlsbCB0aGUgZ2FwIGFmdGVyIGEgd2lkZSBjaGFyICovCisJCWlmIChjbiA+IDEgJiYgKGRyYXdfZmxhZ3MgJiBEUkFXX1RSQU5TUCkgPT0gMAorIyAgIGlmZGVmIEZFQVRfWEZPTlRTRVQKKwkJCSYmIGZvbnRzZXQgPT0gTk9GT05UU0VUCisjICAgZW5kaWYKKwkJCSYmICFkb3dpZGUpCisJCSAgICBndWlfbWNoX2RyYXdfc3RyaW5nKGd1aS5yb3csIHNjb2wgLSAxLCAoY2hhcl91ICopIiAiLAorCQkJCQkJCSAgICAgICAxLCBkcmF3X2ZsYWdzKTsKKyMgIGVuZGlmCisJICAgIH0KKwkgICAgLyogRHJhdyBhIGNvbXBvc2luZyBjaGFyIG9uIHRvcCBvZiB0aGUgcHJldmlvdXMgY2hhci4gKi8KKwkgICAgaWYgKGNvbXBpbmcpCisJICAgIHsKKwkJZ3VpX21jaF9kcmF3X3N0cmluZyhndWkucm93LCBzY29sIC0gY24sIHMgKyBpLCBjbCwKKwkJCQkJCSAgICBkcmF3X2ZsYWdzIHwgRFJBV19UUkFOU1ApOworCQlzdGFydCA9IGkgKyBjbDsKKwkgICAgfQorCX0KKwkvKiBUaGUgc3R1ZmYgYmVsb3cgYXNzdW1lcyAibGVuIiBpcyB0aGUgbGVuZ3RoIGluIHNjcmVlbiBjb2x1bW5zLiAqLworCWxlbiA9IHNjb2wgLSBjb2w7CisgICAgfQorICAgIGVsc2UKKyMgZW5kaWYKKyAgICB7CisJZ3VpX21jaF9kcmF3X3N0cmluZyhndWkucm93LCBjb2wsIHMsIGxlbiwgZHJhd19mbGFncyk7CisjIGlmZGVmIEZFQVRfTUJZVEUKKwlpZiAoZW5jX2RiY3MgPT0gREJDU19KUE5VKQorCXsKKwkgICAgaW50CQljbGVuID0gMDsKKwkgICAgaW50CQlpOworCisJICAgIC8qIEdldCB0aGUgbGVuZ3RoIGluIGRpc3BsYXkgY2VsbHMsIHRoaXMgY2FuIGJlIGRpZmZlcmVudCBmcm9tIHRoZQorCSAgICAgKiBudW1iZXIgb2YgYnl0ZXMgZm9yICJldWMtanAiLiAqLworCSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocyArIGkpKQorCQljbGVuICs9ICgqbWJfcHRyMmNlbGxzKShzICsgaSk7CisJICAgIGxlbiA9IGNsZW47CisJfQorIyBlbmRpZgorICAgIH0KKyNlbmRpZiAvKiAhSEFWRV9HVEsyICovCisKKyAgICBpZiAoIShmbGFncyAmIChHVUlfTU9OX0lTX0NVUlNPUiB8IEdVSV9NT05fVFJTX0NVUlNPUikpKQorCWd1aS5jb2wgPSBjb2wgKyBsZW47CisKKyAgICAvKiBNYXkgbmVlZCB0byBpbnZlcnQgaXQgd2hlbiBpdCdzIHBhcnQgb2YgdGhlIHNlbGVjdGlvbi4gKi8KKyAgICBpZiAoZmxhZ3MgJiBHVUlfTU9OX05PQ0xFQVIpCisJY2xpcF9tYXlfcmVkcmF3X3NlbGVjdGlvbihndWkucm93LCBjb2wsIGxlbik7CisKKyAgICBpZiAoIShmbGFncyAmIChHVUlfTU9OX0lTX0NVUlNPUiB8IEdVSV9NT05fVFJTX0NVUlNPUikpKQorICAgIHsKKwkvKiBJbnZhbGlkYXRlIHRoZSBvbGQgcGh5c2ljYWwgY3Vyc29yIHBvc2l0aW9uIGlmIHdlIHdyb3RlIG92ZXIgaXQgKi8KKwlpZiAoZ3VpLmN1cnNvcl9yb3cgPT0gZ3VpLnJvdworCQkmJiBndWkuY3Vyc29yX2NvbCA+PSBjb2wKKwkJJiYgZ3VpLmN1cnNvcl9jb2wgPCBjb2wgKyBsZW4pCisJICAgIGd1aS5jdXJzb3JfaXNfdmFsaWQgPSBGQUxTRTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX1NJR05fSUNPTlMKKyAgICBpZiAoZHJhd19zaWduKQorCS8qIERyYXcgdGhlIHNpZ24gb24gdG9wIG9mIHRoZSBzcGFjZXMuICovCisJZ3VpX21jaF9kcmF3c2lnbihndWkucm93LCBjb2wsIGd1aS5oaWdobGlnaHRfbWFzayk7CisjIGlmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIGlmIChtdWx0aV9zaWduKQorCW5ldGJlYW5zX2RyYXdfbXVsdGlzaWduX2luZGljYXRvcihndWkucm93KTsKKyMgZW5kaWYKKyNlbmRpZgorCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogVW4tZHJhdyB0aGUgY3Vyc29yLglBY3R1YWxseSB0aGlzIGp1c3QgcmVkcmF3cyB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbgorICogcG9zaXRpb24uICBUaGUgY2hhcmFjdGVyIGp1c3QgYmVmb3JlIGl0IHRvbywgZm9yIHdoZW4gaXQgd2FzIGluIGJvbGQuCisgKi8KKyAgICB2b2lkCitndWlfdW5kcmF3X2N1cnNvcigpCit7CisgICAgaWYgKGd1aS5jdXJzb3JfaXNfdmFsaWQpCisgICAgeworI2lmZGVmIEZFQVRfSEFOR1VMSU4KKwlpZiAoY29tcG9zaW5nX2hhbmd1bAorCQkgICAgJiYgZ3VpLmNvbCA9PSBndWkuY3Vyc29yX2NvbCAmJiBndWkucm93ID09IGd1aS5jdXJzb3Jfcm93KQorCSAgICAodm9pZClndWlfb3V0c3RyX25vd3JhcChjb21wb3NpbmdfaGFuZ3VsX2J1ZmZlciwgMiwKKwkJICAgIEdVSV9NT05fSVNfQ1VSU09SIHwgR1VJX01PTl9OT0NMRUFSLAorCQkgICAgZ3VpLm5vcm1fcGl4ZWwsIGd1aS5iYWNrX3BpeGVsLCAwKTsKKwllbHNlCisJeworI2VuZGlmCisJaWYgKGd1aV9yZWRyYXdfYmxvY2soZ3VpLmN1cnNvcl9yb3csIGd1aS5jdXJzb3JfY29sLAorCQkJICAgICAgZ3VpLmN1cnNvcl9yb3csIGd1aS5jdXJzb3JfY29sLCBHVUlfTU9OX05PQ0xFQVIpCisJCSYmIGd1aS5jdXJzb3JfY29sID4gMCkKKwkgICAgKHZvaWQpZ3VpX3JlZHJhd19ibG9jayhndWkuY3Vyc29yX3JvdywgZ3VpLmN1cnNvcl9jb2wgLSAxLAorCQkJIGd1aS5jdXJzb3Jfcm93LCBndWkuY3Vyc29yX2NvbCAtIDEsIEdVSV9NT05fTk9DTEVBUik7CisjaWZkZWYgRkVBVF9IQU5HVUxJTgorCSAgICBpZiAoY29tcG9zaW5nX2hhbmd1bCkKKwkJKHZvaWQpZ3VpX3JlZHJhd19ibG9jayhndWkuY3Vyc29yX3JvdywgZ3VpLmN1cnNvcl9jb2wgKyAxLAorCQkJZ3VpLmN1cnNvcl9yb3csIGd1aS5jdXJzb3JfY29sICsgMSwgR1VJX01PTl9OT0NMRUFSKTsKKwl9CisjZW5kaWYKKwkvKiBDdXJzb3JfaXNfdmFsaWQgaXMgcmVzZXQgd2hlbiB0aGUgY3Vyc29yIGlzIHVuZHJhd24sIGFsc28gcmVzZXQgaXQKKwkgKiBoZXJlIGluIGNhc2UgaXQgd2Fzbid0IG5lZWRlZCB0byB1bmRyYXcgaXQuICovCisJZ3VpLmN1cnNvcl9pc192YWxpZCA9IEZBTFNFOworICAgIH0KK30KKworICAgIHZvaWQKK2d1aV9yZWRyYXcoeCwgeSwgdywgaCkKKyAgICBpbnQJCXg7CisgICAgaW50CQl5OworICAgIGludAkJdzsKKyAgICBpbnQJCWg7Cit7CisgICAgaW50CQlyb3cxLCBjb2wxLCByb3cyLCBjb2wyOworCisgICAgcm93MSA9IFlfMl9ST1coeSk7CisgICAgY29sMSA9IFhfMl9DT0woeCk7CisgICAgcm93MiA9IFlfMl9ST1coeSArIGggLSAxKTsKKyAgICBjb2wyID0gWF8yX0NPTCh4ICsgdyAtIDEpOworCisgICAgKHZvaWQpZ3VpX3JlZHJhd19ibG9jayhyb3cxLCBjb2wxLCByb3cyLCBjb2wyLCBHVUlfTU9OX05PQ0xFQVIpOworCisgICAgLyoKKyAgICAgKiBXZSBtYXkgbmVlZCB0byByZWRyYXcgdGhlIGN1cnNvciwgYnV0IGRvbid0IHRha2UgaXQgdXBvbiB1cyB0byBjaGFuZ2UKKyAgICAgKiBpdHMgbG9jYXRpb24gYWZ0ZXIgYSBzY3JvbGwuCisgICAgICogKG1heWJlIGJlIG1vcmUgc3RyaWN0IGV2ZW4gYW5kIHRlc3QgY29sIHRvbz8pCisgICAgICogVGhlc2UgdGhpbmdzIG1heSBiZSBvdXRzaWRlIHRoZSB1cGRhdGUvY2xpcHBpbmcgcmVnaW9uIGFuZCByZWFsaXR5IG1heQorICAgICAqIG5vdCByZWZsZWN0IFZpbXMgaW50ZXJuYWwgaWRlYXMgaWYgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgY2xpcHBlZCBhd2F5LgorICAgICAqLworICAgIGlmIChndWkucm93ID09IGd1aS5jdXJzb3Jfcm93KQorCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIFRSVUUpOworfQorCisvKgorICogRHJhdyBhIHJlY3Rhbmd1bGFyIGJsb2NrIG9mIGNoYXJhY3RlcnMsIGZyb20gcm93MSB0byByb3cyIChpbmNsdXNpdmUpIGFuZAorICogZnJvbSBjb2wxIHRvIGNvbDIgKGluY2x1c2l2ZSkuCisgKiBSZXR1cm4gVFJVRSB3aGVuIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBmaXJzdCBkcmF3biBjaGFyYWN0ZXIgaGFzCisgKiBkaWZmZXJlbnQgYXR0cmlidXRlcyAobWF5IGhhdmUgdG8gYmUgcmVkcmF3biB0b28pLgorICovCisgICAgaW50CitndWlfcmVkcmF3X2Jsb2NrKHJvdzEsIGNvbDEsIHJvdzIsIGNvbDIsIGZsYWdzKQorICAgIGludAkJcm93MTsKKyAgICBpbnQJCWNvbDE7CisgICAgaW50CQlyb3cyOworICAgIGludAkJY29sMjsKKyAgICBpbnQJCWZsYWdzOwkvKiBmbGFncyBmb3IgZ3VpX291dHN0cl9ub3dyYXAoKSAqLworeworICAgIGludAkJb2xkX3Jvdywgb2xkX2NvbDsKKyAgICBsb25nX3UJb2xkX2hsX21hc2s7CisgICAgaW50CQlvZmY7CisgICAgY2hhcl91CWZpcnN0X2F0dHI7CisgICAgaW50CQlpZHgsIGxlbjsKKyAgICBpbnQJCWJhY2ssIG5iYWNrOworICAgIGludAkJcmV0dmFsID0gRkFMU0U7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJb3JpZ19jb2wxLCBvcmlnX2NvbDI7CisjZW5kaWYKKworICAgIC8qIERvbid0IHRyeSB0byB1cGRhdGUgd2hlbiBTY3JlZW5MaW5lcyBpcyBub3QgdmFsaWQgKi8KKyAgICBpZiAoIXNjcmVlbl9jbGVhcmVkIHx8IFNjcmVlbkxpbmVzID09IE5VTEwpCisJcmV0dXJuIHJldHZhbDsKKworICAgIC8qIERvbid0IHRyeSB0byBkcmF3IG91dHNpZGUgdGhlIHNoZWxsISAqLworICAgIC8qIENoZWNrIGV2ZXJ5dGhpbmcsIHN0cmFuZ2UgdmFsdWVzIG1heSBiZSBjYXVzZWQgYnkgYSBiaWcgYm9yZGVyIHdpZHRoICovCisgICAgY29sMSA9IGNoZWNrX2NvbChjb2wxKTsKKyAgICBjb2wyID0gY2hlY2tfY29sKGNvbDIpOworICAgIHJvdzEgPSBjaGVja19yb3cocm93MSk7CisgICAgcm93MiA9IGNoZWNrX3Jvdyhyb3cyKTsKKworICAgIC8qIFJlbWVtYmVyIHdoZXJlIG91ciBjdXJzb3Igd2FzICovCisgICAgb2xkX3JvdyA9IGd1aS5yb3c7CisgICAgb2xkX2NvbCA9IGd1aS5jb2w7CisgICAgb2xkX2hsX21hc2sgPSBndWkuaGlnaGxpZ2h0X21hc2s7CisjaWZkZWYgRkVBVF9NQllURQorICAgIG9yaWdfY29sMSA9IGNvbDE7CisgICAgb3JpZ19jb2wyID0gY29sMjsKKyNlbmRpZgorCisgICAgZm9yIChndWkucm93ID0gcm93MTsgZ3VpLnJvdyA8PSByb3cyOyBndWkucm93KyspCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwkvKiBXaGVuIG9ubHkgaGFsZiBvZiBhIGRvdWJsZS13aWRlIGNoYXJhY3RlciBpcyBpbiB0aGUgYmxvY2ssIGluY2x1ZGUKKwkgKiB0aGUgb3RoZXIgaGFsZi4gKi8KKwljb2wxID0gb3JpZ19jb2wxOworCWNvbDIgPSBvcmlnX2NvbDI7CisJb2ZmID0gTGluZU9mZnNldFtndWkucm93XTsKKwlpZiAoZW5jX2RiY3MgIT0gMCkKKwl7CisJICAgIGlmIChjb2wxID4gMCkKKwkJY29sMSAtPSBkYmNzX3NjcmVlbl9oZWFkX29mZihTY3JlZW5MaW5lcyArIG9mZiwKKwkJCQkJCSAgICBTY3JlZW5MaW5lcyArIG9mZiArIGNvbDEpOworCSAgICBjb2wyICs9IGRiY3Nfc2NyZWVuX3RhaWxfb2ZmKFNjcmVlbkxpbmVzICsgb2ZmLAorCQkJCQkJICAgIFNjcmVlbkxpbmVzICsgb2ZmICsgY29sMik7CisJfQorCWVsc2UgaWYgKGVuY191dGY4KQorCXsKKwkgICAgaWYgKFNjcmVlbkxpbmVzW29mZiArIGNvbDFdID09IDApCisJCS0tY29sMTsKKyMgaWZkZWYgSEFWRV9HVEsyCisJICAgIGlmIChjb2wyICsgMSA8IENvbHVtbnMgJiYgU2NyZWVuTGluZXNbb2ZmICsgY29sMiArIDFdID09IDApCisJCSsrY29sMjsKKyMgZW5kaWYKKwl9CisjZW5kaWYKKwlndWkuY29sID0gY29sMTsKKwlvZmYgPSBMaW5lT2Zmc2V0W2d1aS5yb3ddICsgZ3VpLmNvbDsKKwlsZW4gPSBjb2wyIC0gY29sMSArIDE7CisKKwkvKiBGaW5kIGhvdyBtYW55IGNoYXJzIGJhY2sgdGhpcyBoaWdobGlnaHRpbmcgc3RhcnRzLCBvciB3aGVyZSBhIHNwYWNlCisJICogaXMuICBOZWVkZWQgZm9yIHdoZW4gdGhlIGJvbGQgdHJpY2sgaXMgdXNlZCAqLworCWZvciAoYmFjayA9IDA7IGJhY2sgPCBjb2wxOyArK2JhY2spCisJICAgIGlmIChTY3JlZW5BdHRyc1tvZmYgLSAxIC0gYmFja10gIT0gU2NyZWVuQXR0cnNbb2ZmXQorCQkgICAgfHwgU2NyZWVuTGluZXNbb2ZmIC0gMSAtIGJhY2tdID09ICcgJykKKwkJYnJlYWs7CisJcmV0dmFsID0gKGNvbDEgPiAwICYmIFNjcmVlbkF0dHJzW29mZiAtIDFdICE9IDAgJiYgYmFjayA9PSAwCisJCQkJCSAgICAgICYmIFNjcmVlbkxpbmVzW29mZiAtIDFdICE9ICcgJyk7CisKKwkvKiBCcmVhayBpdCB1cCBpbiBzdHJpbmdzIG9mIGNoYXJhY3RlcnMgd2l0aCB0aGUgc2FtZSBhdHRyaWJ1dGVzLiAqLworCS8qIFByaW50IFVURi04IGNoYXJhY3RlcnMgaW5kaXZpZHVhbGx5LiAqLworCXdoaWxlIChsZW4gPiAwKQorCXsKKwkgICAgZmlyc3RfYXR0ciA9IFNjcmVlbkF0dHJzW29mZl07CisJICAgIGd1aS5oaWdobGlnaHRfbWFzayA9IGZpcnN0X2F0dHI7CisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiAhZGVmaW5lZChIQVZFX0dUSzIpCisJICAgIGlmIChlbmNfdXRmOCAmJiBTY3JlZW5MaW5lc1VDW29mZl0gIT0gMCkKKwkgICAgeworCQkvKiBvdXRwdXQgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgc2VwYXJhdGVseSAqLworCQluYmFjayA9IGd1aV9zY3JlZW5jaGFyKG9mZiwgZmxhZ3MsCisJCQkJCSAgKGd1aWNvbG9yX1QpMCwgKGd1aWNvbG9yX1QpMCwgYmFjayk7CisJCWlmIChndWkuY29sIDwgQ29sdW1ucyAmJiBTY3JlZW5MaW5lc1tvZmYgKyAxXSA9PSAwKQorCQkgICAgaWR4ID0gMjsKKwkJZWxzZQorCQkgICAgaWR4ID0gMTsKKwkgICAgfQorCSAgICBlbHNlIGlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUgJiYgU2NyZWVuTGluZXNbb2ZmXSA9PSAweDhlKQorCSAgICB7CisJCS8qIG91dHB1dCBkb3VibGUtYnl0ZSwgc2luZ2xlLXdpZHRoIGNoYXJhY3RlciBzZXBhcmF0ZWx5ICovCisJCW5iYWNrID0gZ3VpX3NjcmVlbmNoYXIob2ZmLCBmbGFncywKKwkJCQkJICAoZ3VpY29sb3JfVCkwLCAoZ3VpY29sb3JfVCkwLCBiYWNrKTsKKwkJaWR4ID0gMTsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkgICAgeworI2lmZGVmIEhBVkVfR1RLMgorCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbjsgKytpZHgpCisJCXsKKwkJICAgIGlmIChlbmNfdXRmOCAmJiBTY3JlZW5MaW5lc1tvZmYgKyBpZHhdID09IDApCisJCQljb250aW51ZTsgLyogc2tpcCBzZWNvbmQgaGFsZiBvZiBkb3VibGUtd2lkdGggY2hhciAqLworCQkgICAgaWYgKFNjcmVlbkF0dHJzW29mZiArIGlkeF0gIT0gZmlyc3RfYXR0cikKKwkJCWJyZWFrOworCQl9CisJCS8qIGd1aV9zY3JlZW5zdHIoKSB0YWtlcyBjYXJlIG9mIG11bHRpYnl0ZSBjaGFycyAqLworCQluYmFjayA9IGd1aV9zY3JlZW5zdHIob2ZmLCBpZHgsIGZsYWdzLAorCQkJCSAgICAgIChndWljb2xvcl9UKTAsIChndWljb2xvcl9UKTAsIGJhY2spOworI2Vsc2UKKwkJZm9yIChpZHggPSAwOyBpZHggPCBsZW4gJiYgU2NyZWVuQXR0cnNbb2ZmICsgaWR4XSA9PSBmaXJzdF9hdHRyOworCQkJCQkJCQkJaWR4KyspCisJCXsKKyMgaWZkZWYgRkVBVF9NQllURQorCQkgICAgLyogU3RvcCBhdCBhIG11bHRpLWJ5dGUgVW5pY29kZSBjaGFyYWN0ZXIuICovCisJCSAgICBpZiAoZW5jX3V0ZjggJiYgU2NyZWVuTGluZXNVQ1tvZmYgKyBpZHhdICE9IDApCisJCQlicmVhazsKKwkJICAgIGlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUpCisJCSAgICB7CisJCQkvKiBTdG9wIGF0IGEgZG91YmxlLWJ5dGUgc2luZ2xlLXdpZHRoIGNoYXIuICovCisJCQlpZiAoU2NyZWVuTGluZXNbb2ZmICsgaWR4XSA9PSAweDhlKQorCQkJICAgIGJyZWFrOworCQkJaWYgKGxlbiA+IDEgJiYgKCptYl9wdHIybGVuX2NoZWNrKShTY3JlZW5MaW5lcworCQkJCQkJCSAgICArIG9mZiArIGlkeCkgPT0gMikKKwkJCSAgICArK2lkeDsgIC8qIHNraXAgc2Vjb25kIGJ5dGUgb2YgZG91YmxlLWJ5dGUgY2hhciAqLworCQkgICAgfQorIyBlbmRpZgorCQl9CisJCW5iYWNrID0gZ3VpX291dHN0cl9ub3dyYXAoU2NyZWVuTGluZXMgKyBvZmYsIGlkeCwgZmxhZ3MsCisJCQkJCSAgKGd1aWNvbG9yX1QpMCwgKGd1aWNvbG9yX1QpMCwgYmFjayk7CisjZW5kaWYKKwkgICAgfQorCSAgICBpZiAobmJhY2sgPT0gRkFJTCkKKwkgICAgeworCQkvKiBNdXN0IGJhY2sgdXAgdG8gc3RhcnQgZHJhd2luZyB3aGVyZSBhIGJvbGQgb3IgaXRhbGljIHdvcmQKKwkJICogc3RhcnRzLiAqLworCQlvZmYgLT0gYmFjazsKKwkJbGVuICs9IGJhY2s7CisJCWd1aS5jb2wgLT0gYmFjazsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJb2ZmICs9IGlkeDsKKwkJbGVuIC09IGlkeDsKKwkgICAgfQorCSAgICBiYWNrID0gMDsKKwl9CisgICAgfQorCisgICAgLyogUHV0IHRoZSBjdXJzb3IgYmFjayB3aGVyZSBpdCB3YXMgKi8KKyAgICBndWkucm93ID0gb2xkX3JvdzsKKyAgICBndWkuY29sID0gb2xkX2NvbDsKKyAgICBndWkuaGlnaGxpZ2h0X21hc2sgPSBvbGRfaGxfbWFzazsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZ3VpX2RlbGV0ZV9saW5lcyhyb3csIGNvdW50KQorICAgIGludAkgICAgcm93OworICAgIGludAkgICAgY291bnQ7Cit7CisgICAgaWYgKGNvdW50IDw9IDApCisJcmV0dXJuOworCisgICAgaWYgKHJvdyArIGNvdW50ID4gZ3VpLnNjcm9sbF9yZWdpb25fYm90KQorCS8qIFNjcm9sbGVkIG91dCBvZiByZWdpb24sIGp1c3QgYmxhbmsgdGhlIGxpbmVzIG91dCAqLworCWd1aV9jbGVhcl9ibG9jayhyb3csIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQsCisJCQkgICAgICBndWkuc2Nyb2xsX3JlZ2lvbl9ib3QsIGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0KTsKKyAgICBlbHNlCisgICAgeworCWd1aV9tY2hfZGVsZXRlX2xpbmVzKHJvdywgY291bnQpOworCisJLyogSWYgdGhlIGN1cnNvciB3YXMgaW4gdGhlIGRlbGV0ZWQgbGluZXMgaXQncyBub3cgZ29uZS4gIElmIHRoZQorCSAqIGN1cnNvciB3YXMgaW4gdGhlIHNjcm9sbGVkIGxpbmVzIGFkanVzdCBpdHMgcG9zaXRpb24uICovCisJaWYgKGd1aS5jdXJzb3Jfcm93ID49IHJvdworCQkmJiBndWkuY3Vyc29yX2NvbCA+PSBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0CisJCSYmIGd1aS5jdXJzb3JfY29sIDw9IGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0KQorCXsKKwkgICAgaWYgKGd1aS5jdXJzb3Jfcm93IDwgcm93ICsgY291bnQpCisJCWd1aS5jdXJzb3JfaXNfdmFsaWQgPSBGQUxTRTsKKwkgICAgZWxzZSBpZiAoZ3VpLmN1cnNvcl9yb3cgPD0gZ3VpLnNjcm9sbF9yZWdpb25fYm90KQorCQlndWkuY3Vyc29yX3JvdyAtPSBjb3VudDsKKwl9CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK2d1aV9pbnNlcnRfbGluZXMocm93LCBjb3VudCkKKyAgICBpbnQJICAgIHJvdzsKKyAgICBpbnQJICAgIGNvdW50OworeworICAgIGlmIChjb3VudCA8PSAwKQorCXJldHVybjsKKworICAgIGlmIChyb3cgKyBjb3VudCA+IGd1aS5zY3JvbGxfcmVnaW9uX2JvdCkKKwkvKiBTY3JvbGxlZCBvdXQgb2YgcmVnaW9uLCBqdXN0IGJsYW5rIHRoZSBsaW5lcyBvdXQgKi8KKwlndWlfY2xlYXJfYmxvY2socm93LCBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0LAorCQkJICAgICAgZ3VpLnNjcm9sbF9yZWdpb25fYm90LCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCk7CisgICAgZWxzZQorICAgIHsKKwlndWlfbWNoX2luc2VydF9saW5lcyhyb3csIGNvdW50KTsKKworCWlmIChndWkuY3Vyc29yX3JvdyA+PSBndWkucm93CisJCSYmIGd1aS5jdXJzb3JfY29sID49IGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQKKwkJJiYgZ3VpLmN1cnNvcl9jb2wgPD0gZ3VpLnNjcm9sbF9yZWdpb25fcmlnaHQpCisJeworCSAgICBpZiAoZ3VpLmN1cnNvcl9yb3cgPD0gZ3VpLnNjcm9sbF9yZWdpb25fYm90IC0gY291bnQpCisJCWd1aS5jdXJzb3Jfcm93ICs9IGNvdW50OworCSAgICBlbHNlIGlmIChndWkuY3Vyc29yX3JvdyA8PSBndWkuc2Nyb2xsX3JlZ2lvbl9ib3QpCisJCWd1aS5jdXJzb3JfaXNfdmFsaWQgPSBGQUxTRTsKKwl9CisgICAgfQorfQorCisvKgorICogVGhlIG1haW4gR1VJIGlucHV0IHJvdXRpbmUuCVdhaXRzIGZvciBhIGNoYXJhY3RlciBmcm9tIHRoZSBrZXlib2FyZC4KKyAqIHd0aW1lID09IC0xCSAgICBXYWl0IGZvcmV2ZXIuCisgKiB3dGltZSA9PSAwCSAgICBEb24ndCB3YWl0LgorICogd3RpbWUgPiAwCSAgICBXYWl0IHd0aW1lIG1pbGxpc2Vjb25kcyBmb3IgYSBjaGFyYWN0ZXIuCisgKiBSZXR1cm5zIE9LIGlmIGEgY2hhcmFjdGVyIHdhcyBmb3VuZCB0byBiZSBhdmFpbGFibGUgd2l0aGluIHRoZSBnaXZlbiB0aW1lLAorICogb3IgRkFJTCBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK2d1aV93YWl0X2Zvcl9jaGFycyh3dGltZSkKKyAgICBsb25nICAgIHd0aW1lOworeworICAgIGludAkgICAgcmV0dmFsOworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIHN0YXRpYyBpbnQgb25jZV9hbHJlYWR5ID0gMDsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBJZiB3ZSdyZSBnb2luZyB0byB3YWl0IGEgYml0LCB1cGRhdGUgdGhlIG1lbnVzIGFuZCBtb3VzZSBzaGFwZSBmb3IgdGhlCisgICAgICogY3VycmVudCBTdGF0ZS4KKyAgICAgKi8KKyAgICBpZiAod3RpbWUgIT0gMCkKKyAgICB7CisjaWZkZWYgRkVBVF9NRU5VCisJZ3VpX3VwZGF0ZV9tZW51cygwKTsKKyNlbmRpZgorICAgIH0KKworICAgIGd1aV9tY2hfdXBkYXRlKCk7CisgICAgaWYgKGlucHV0X2F2YWlsYWJsZSgpKQkvKiBHb3QgY2hhciwgcmV0dXJuIGltbWVkaWF0ZWx5ICovCisgICAgeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCW9uY2VfYWxyZWFkeSA9IDA7CisjZW5kaWYKKwlyZXR1cm4gT0s7CisgICAgfQorICAgIGlmICh3dGltZSA9PSAwKQkvKiBEb24ndCB3YWl0IGZvciBjaGFyICovCisgICAgeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCW9uY2VfYWxyZWFkeSA9IDA7CisjZW5kaWYKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBCZWZvcmUgd2FpdGluZywgZmx1c2ggYW55IG91dHB1dCB0byB0aGUgc2NyZWVuLiAqLworICAgIGd1aV9tY2hfZmx1c2goKTsKKworICAgIGlmICh3dGltZSA+IDApCisgICAgeworCS8qIEJsaW5rIHdoZW4gd2FpdGluZyBmb3IgYSBjaGFyYWN0ZXIuCVByb2JhYmx5IG9ubHkgZG9lcyBzb21ldGhpbmcKKwkgKiBmb3Igc2hvd21hdGNoKCkgKi8KKwlndWlfbWNoX3N0YXJ0X2JsaW5rKCk7CisJcmV0dmFsID0gZ3VpX21jaF93YWl0X2Zvcl9jaGFycyh3dGltZSk7CisJZ3VpX21jaF9zdG9wX2JsaW5rKCk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJb25jZV9hbHJlYWR5ID0gMDsKKyNlbmRpZgorCXJldHVybiByZXR2YWw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXaGlsZSB3ZSBhcmUgd2FpdGluZyBpbmRlZmVuaXRlbHkgZm9yIGEgY2hhcmFjdGVyLCBibGluayB0aGUgY3Vyc29yLgorICAgICAqLworICAgIGd1aV9tY2hfc3RhcnRfYmxpbmsoKTsKKworCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgLyogSWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSB3aXRoaW4gMiBzZWNvbmRzIChkZWZhdWx0KSwKKyAgICAgKiB3cml0ZSB0aGUgYXV0b3NjcmlwdCBmaWxlIHRvIGRpc2sgKi8KKyAgICBpZiAob25jZV9hbHJlYWR5ID09IDIpCisgICAgeworCXVwZGF0ZXNjcmlwdCgwKTsKKwlyZXR2YWwgPSBndWlfbWNoX3dhaXRfZm9yX2NoYXJzKC0xTCk7CisJb25jZV9hbHJlYWR5ID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAob25jZV9hbHJlYWR5ID09IDEpCisgICAgeworCXNldGN1cnNvcigpOworCW9uY2VfYWxyZWFkeSA9IDI7CisJcmV0dmFsID0gMDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJaWYgKGd1aV9tY2hfd2FpdF9mb3JfY2hhcnMocF91dCkgIT0gT0spCisgICAgeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCWlmIChoYXNfY3Vyc29yaG9sZCgpICYmIGdldF9yZWFsX3N0YXRlKCkgPT0gTk9STUFMX0JVU1kpCisJeworCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9DVVJTT1JIT0xELCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKKwkgICAgdXBkYXRlX3NjcmVlbihWQUxJRCk7CisJICAgIHNob3dydWxlcihGQUxTRSk7CisJICAgIHNldGN1cnNvcigpOworCisJICAgIG9uY2VfYWxyZWFkeSA9IDE7CisJICAgIHJldHZhbCA9IDA7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgdXBkYXRlc2NyaXB0KDApOworCSAgICByZXR2YWwgPSBndWlfbWNoX3dhaXRfZm9yX2NoYXJzKC0xTCk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJICAgIG9uY2VfYWxyZWFkeSA9IDA7CisjZW5kaWYKKwl9CisgICAgfQorICAgIGVsc2UKKwlyZXR2YWwgPSBPSzsKKworICAgIGd1aV9tY2hfc3RvcF9ibGluaygpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBGaWxsIGJ1ZmZlciB3aXRoIG1vdXNlIGNvb3JkaW5hdGVzIGVuY29kZWQgZm9yIGNoZWNrX3Rlcm1jb2RlKCkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZmlsbF9tb3VzZV9jb29yZChwLCBjb2wsIHJvdykKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQljb2w7CisgICAgaW50CQlyb3c7Cit7CisgICAgcFswXSA9IChjaGFyX3UpKGNvbCAvIDEyOCArICcgJyArIDEpOworICAgIHBbMV0gPSAoY2hhcl91KShjb2wgJSAxMjggKyAnICcgKyAxKTsKKyAgICBwWzJdID0gKGNoYXJfdSkocm93IC8gMTI4ICsgJyAnICsgMSk7CisgICAgcFszXSA9IChjaGFyX3UpKHJvdyAlIDEyOCArICcgJyArIDEpOworfQorCisvKgorICogR2VuZXJpYyBtb3VzZSBzdXBwb3J0IGZ1bmN0aW9uLiAgQWRkIGEgbW91c2UgZXZlbnQgdG8gdGhlIGlucHV0IGJ1ZmZlciB3aXRoCisgKiB0aGUgZ2l2ZW4gcHJvcGVydGllcy4KKyAqICBidXR0b24JICAgIC0tLSBtYXkgYmUgYW55IG9mIE1PVVNFX0xFRlQsIE1PVVNFX01JRERMRSwgTU9VU0VfUklHSFQsCisgKgkJCU1PVVNFX1gxLCBNT1VTRV9YMgorICoJCQlNT1VTRV9EUkFHLCBvciBNT1VTRV9SRUxFQVNFLgorICoJCQlNT1VTRV80IGFuZCBNT1VTRV81IGFyZSB1c2VkIGZvciBhIHNjcm9sbCB3aGVlbC4KKyAqICB4LCB5CSAgICAtLS0gQ29vcmRpbmF0ZXMgb2YgbW91c2UgaW4gcGl4ZWxzLgorICogIHJlcGVhdGVkX2NsaWNrICAtLS0gVFJVRSBpZiB0aGlzIGNsaWNrIGNvbWVzIG9ubHkgYSBzaG9ydCB0aW1lIGFmdGVyIGEKKyAqCQkJcHJldmlvdXMgY2xpY2suCisgKiAgbW9kaWZpZXJzCSAgICAtLS0gQml0IGZpZWxkIHdoaWNoIG1heSBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBtb2RpZmllcnMKKyAqCQkJb3InZWQgdG9nZXRoZXI6IE1PVVNFX1NISUZUIHwgTU9VU0VfQ1RSTCB8IE1PVVNFX0FMVC4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpZ25vcmUgZHJhZyBldmVudHMgd2hlcmUgdGhlIG1vdXNlIGhhcyBub3QgbW92ZWQgdG8gYSBuZXcKKyAqIGNoYXJhY3Rlci4KKyAqLworICAgIHZvaWQKK2d1aV9zZW5kX21vdXNlX2V2ZW50KGJ1dHRvbiwgeCwgeSwgcmVwZWF0ZWRfY2xpY2ssIG1vZGlmaWVycykKKyAgICBpbnQJICAgIGJ1dHRvbjsKKyAgICBpbnQJICAgIHg7CisgICAgaW50CSAgICB5OworICAgIGludAkgICAgcmVwZWF0ZWRfY2xpY2s7CisgICAgaW50X3UgICBtb2RpZmllcnM7Cit7CisgICAgc3RhdGljIGludAkgICAgcHJldl9yb3cgPSAwLCBwcmV2X2NvbCA9IDA7CisgICAgc3RhdGljIGludAkgICAgcHJldl9idXR0b24gPSAtMTsKKyAgICBzdGF0aWMgaW50CSAgICBudW1fY2xpY2tzID0gMTsKKyAgICBjaGFyX3UJICAgIHN0cmluZ1sxMF07CisgICAgZW51bSBrZXlfZXh0cmEgIGJ1dHRvbl9jaGFyOworICAgIGludAkJICAgIHJvdywgY29sOworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgaW50CQkgICAgY2hlY2tmb3I7CisgICAgaW50CQkgICAgZGlkX2NsaXAgPSBGQUxTRTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBTY3JvbGxpbmcgbWF5IGhhcHBlbiBhdCBhbnkgdGltZSwgYWxzbyB3aGlsZSBhIHNlbGVjdGlvbiBpcyBwcmVzZW50LgorICAgICAqLworICAgIHN3aXRjaCAoYnV0dG9uKQorICAgIHsKKwljYXNlIE1PVVNFX1gxOgorCSAgICBidXR0b25fY2hhciA9IEtFX1gxTU9VU0U7CisJICAgIGdvdG8gYnV0dG9uX3NldDsKKwljYXNlIE1PVVNFX1gyOgorCSAgICBidXR0b25fY2hhciA9IEtFX1gyTU9VU0U7CisJICAgIGdvdG8gYnV0dG9uX3NldDsKKwljYXNlIE1PVVNFXzQ6CisJICAgIGJ1dHRvbl9jaGFyID0gS0VfTU9VU0VET1dOOworCSAgICBnb3RvIGJ1dHRvbl9zZXQ7CisJY2FzZSBNT1VTRV81OgorCSAgICBidXR0b25fY2hhciA9IEtFX01PVVNFVVA7CitidXR0b25fc2V0OgorCSAgICB7CisJCS8qIERvbid0IHB1dCBldmVudHMgaW4gdGhlIGlucHV0IHF1ZXVlIG5vdy4gKi8KKwkJaWYgKGhvbGRfZ3VpX2V2ZW50cykKKwkJICAgIHJldHVybjsKKworCQlzdHJpbmdbM10gPSBDU0k7CisJCXN0cmluZ1s0XSA9IEtTX0VYVFJBOworCQlzdHJpbmdbNV0gPSAoaW50KWJ1dHRvbl9jaGFyOworCisJCS8qIFBhc3MgdGhlIHBvaW50ZXIgY29vcmRpbmF0ZXMgb2YgdGhlIHNjcm9sbCBldmVudCBzbyB0aGF0IHdlCisJCSAqIGtub3cgd2hpY2ggd2luZG93IHRvIHNjcm9sbC4gKi8KKwkJcm93ID0gZ3VpX3h5MmNvbHJvdyh4LCB5LCAmY29sKTsKKwkJc3RyaW5nWzZdID0gKGNoYXJfdSkoY29sIC8gMTI4ICsgJyAnICsgMSk7CisJCXN0cmluZ1s3XSA9IChjaGFyX3UpKGNvbCAlIDEyOCArICcgJyArIDEpOworCQlzdHJpbmdbOF0gPSAoY2hhcl91KShyb3cgLyAxMjggKyAnICcgKyAxKTsKKwkJc3RyaW5nWzldID0gKGNoYXJfdSkocm93ICUgMTI4ICsgJyAnICsgMSk7CisKKwkJaWYgKG1vZGlmaWVycyA9PSAwKQorCQkgICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcgKyAzLCA3KTsKKwkJZWxzZQorCQl7CisJCSAgICBzdHJpbmdbMF0gPSBDU0k7CisJCSAgICBzdHJpbmdbMV0gPSBLU19NT0RJRklFUjsKKwkJICAgIHN0cmluZ1syXSA9IDA7CisJCSAgICBpZiAobW9kaWZpZXJzICYgTU9VU0VfU0hJRlQpCisJCQlzdHJpbmdbMl0gfD0gTU9EX01BU0tfU0hJRlQ7CisJCSAgICBpZiAobW9kaWZpZXJzICYgTU9VU0VfQ1RSTCkKKwkJCXN0cmluZ1syXSB8PSBNT0RfTUFTS19DVFJMOworCQkgICAgaWYgKG1vZGlmaWVycyAmIE1PVVNFX0FMVCkKKwkJCXN0cmluZ1syXSB8PSBNT0RfTUFTS19BTFQ7CisJCSAgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgMTApOworCQl9CisJCXJldHVybjsKKwkgICAgfQorICAgIH0KKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgLyogSWYgYSBjbGlwYm9hcmQgc2VsZWN0aW9uIGlzIGluIHByb2dyZXNzLCBoYW5kbGUgaXQgKi8KKyAgICBpZiAoY2xpcF9zdGFyLnN0YXRlID09IFNFTEVDVF9JTl9QUk9HUkVTUykKKyAgICB7CisJY2xpcF9wcm9jZXNzX3NlbGVjdGlvbihidXR0b24sIFhfMl9DT0woeCksIFlfMl9ST1coeSksIHJlcGVhdGVkX2NsaWNrKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogRGV0ZXJtaW5lIHdoaWNoIG1vdXNlIHNldHRpbmdzIHRvIGxvb2sgZm9yIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1vZGUgKi8KKyAgICBzd2l0Y2ggKGdldF9yZWFsX3N0YXRlKCkpCisgICAgeworCWNhc2UgTk9STUFMX0JVU1k6CisJY2FzZSBPUF9QRU5ESU5HOgorCWNhc2UgTk9STUFMOgkJY2hlY2tmb3IgPSBNT1VTRV9OT1JNQUw7CWJyZWFrOworCWNhc2UgVklTVUFMOgkJY2hlY2tmb3IgPSBNT1VTRV9WSVNVQUw7CWJyZWFrOworCWNhc2UgUkVQTEFDRToKKwljYXNlIFJFUExBQ0UrTEFOR01BUDoKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisJY2FzZSBWUkVQTEFDRToKKwljYXNlIFZSRVBMQUNFK0xBTkdNQVA6CisjZW5kaWYKKwljYXNlIElOU0VSVDoKKwljYXNlIElOU0VSVCtMQU5HTUFQOgljaGVja2ZvciA9IE1PVVNFX0lOU0VSVDsJYnJlYWs7CisJY2FzZSBBU0tNT1JFOgorCWNhc2UgSElUUkVUVVJOOgkJLyogQXQgdGhlIG1vcmUtIGFuZCBoaXQtZW50ZXIgcHJvbXB0IHBhc3MgdGhlCisJCQkJICAgbW91c2UgZXZlbnQgZm9yIGEgY2xpY2sgb24gb3IgYmVsb3cgdGhlCisJCQkJICAgbWVzc2FnZSBsaW5lLiAqLworCQkJCWlmIChZXzJfUk9XKHkpID49IG1zZ19yb3cpCisJCQkJICAgIGNoZWNrZm9yID0gTU9VU0VfTk9STUFMOworCQkJCWVsc2UKKwkJCQkgICAgY2hlY2tmb3IgPSBNT1VTRV9SRVRVUk47CisJCQkJYnJlYWs7CisKKwkgICAgLyoKKwkgICAgICogT24gdGhlIGNvbW1hbmQgbGluZSwgdXNlIHRoZSBjbGlwYm9hcmQgc2VsZWN0aW9uIG9uIGFsbCBsaW5lcworCSAgICAgKiBidXQgdGhlIGNvbW1hbmQgbGluZS4gIEJ1dCBub3Qgd2hlbiBwYXN0aW5nLgorCSAgICAgKi8KKwljYXNlIENNRExJTkU6CisJY2FzZSBDTURMSU5FK0xBTkdNQVA6CisJICAgIGlmIChZXzJfUk9XKHkpIDwgY21kbGluZV9yb3cgJiYgYnV0dG9uICE9IE1PVVNFX01JRERMRSkKKwkJY2hlY2tmb3IgPSBNT1VTRV9OT05FOworCSAgICBlbHNlCisJCWNoZWNrZm9yID0gTU9VU0VfQ09NTUFORDsKKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBjaGVja2ZvciA9IE1PVVNFX05PTkU7CisJICAgIGJyZWFrOworICAgIH07CisKKyAgICAvKgorICAgICAqIEFsbG93IGNsaXBib2FyZCBzZWxlY3Rpb24gb2YgdGV4dCBvbiB0aGUgY29tbWFuZCBsaW5lIGluICJub3JtYWwiCisgICAgICogbW9kZXMuICBEb24ndCBkbyB0aGlzIHdoZW4gZHJhZ2dpbmcgdGhlIHN0YXR1cyBsaW5lLCBvciBleHRlbmRpbmcgYQorICAgICAqIFZpc3VhbCBzZWxlY3Rpb24uCisgICAgICovCisgICAgaWYgKChTdGF0ZSA9PSBOT1JNQUwgfHwgU3RhdGUgPT0gTk9STUFMX0JVU1kgfHwgKFN0YXRlICYgSU5TRVJUKSkKKwkgICAgJiYgWV8yX1JPVyh5KSA+PSB0b3BmcmFtZS0+ZnJfaGVpZ2h0CisJICAgICYmIGJ1dHRvbiAhPSBNT1VTRV9EUkFHCisjIGlmZGVmIEZFQVRfTU9VU0VTSEFQRQorCSAgICAmJiAhZHJhZ19zdGF0dXNfbGluZQorIyAgaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkgICAgJiYgIWRyYWdfc2VwX2xpbmUKKyMgIGVuZGlmCisjIGVuZGlmCisJICAgICkKKwljaGVja2ZvciA9IE1PVVNFX05PTkU7CisKKyAgICAvKgorICAgICAqIFVzZSBtb2RlbGVzcyBzZWxlY3Rpb24gd2hlbiBob2xkaW5nIENUUkwgYW5kIFNISUZUIHByZXNzZWQuCisgICAgICovCisgICAgaWYgKChtb2RpZmllcnMgJiBNT1VTRV9DVFJMKSAmJiAobW9kaWZpZXJzICYgTU9VU0VfU0hJRlQpKQorCWNoZWNrZm9yID0gTU9VU0VfTk9ORUY7CisKKyAgICAvKgorICAgICAqIEluIEV4IG1vZGUsIGFsd2F5cyB1c2UgbW9kZWxlc3Mgc2VsZWN0aW9uLgorICAgICAqLworICAgIGlmIChleG1vZGVfYWN0aXZlKQorCWNoZWNrZm9yID0gTU9VU0VfTk9ORTsKKworICAgIC8qCisgICAgICogSWYgdGhlIG1vdXNlIHNldHRpbmdzIHNheSB0byBub3QgdXNlIHRoZSBtb3VzZSwgdXNlIHRoZSBtb2RlbGVzcworICAgICAqIHNlbGVjdGlvbi4gIEJ1dCBpZiBWaXN1YWwgaXMgYWN0aXZlLCBhc3N1bWUgdGhhdCBvbmx5IHRoZSBWaXN1YWwgYXJlYQorICAgICAqIHdpbGwgYmUgc2VsZWN0ZWQuCisgICAgICogRXhjZXB0aW9uOiBPbiB0aGUgY29tbWFuZCBsaW5lLCBib3RoIHRoZSBzZWxlY3Rpb24gaXMgdXNlZCBhbmQgYSBtb3VzZQorICAgICAqIGtleSBpcyBzZW5kLgorICAgICAqLworICAgIGlmICghbW91c2VfaGFzKGNoZWNrZm9yKSB8fCBjaGVja2ZvciA9PSBNT1VTRV9DT01NQU5EKQorICAgIHsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCS8qIERvbid0IGRvIG1vZGVsZXNzIHNlbGVjdGlvbiBpbiBWaXN1YWwgbW9kZS4gKi8KKwlpZiAoY2hlY2tmb3IgIT0gTU9VU0VfTk9ORUYgJiYgVklzdWFsX2FjdGl2ZSAmJiAoU3RhdGUgJiBOT1JNQUwpKQorCSAgICByZXR1cm47CisjZW5kaWYKKworCS8qCisJICogV2hlbiAnbW91c2Vtb2RlbCcgaXMgInBvcHVwIiwgc2hpZnQtbGVmdCBpcyB0cmFuc2xhdGVkIHRvIHJpZ2h0LgorCSAqIEJ1dCBub3Qgd2hlbiBhbHNvIHVzaW5nIEN0cmwuCisJICovCisJaWYgKG1vdXNlX21vZGVsX3BvcHVwKCkgJiYgYnV0dG9uID09IE1PVVNFX0xFRlQKKwkJJiYgKG1vZGlmaWVycyAmIE1PVVNFX1NISUZUKSAmJiAhKG1vZGlmaWVycyAmIE1PVVNFX0NUUkwpKQorCXsKKwkgICAgYnV0dG9uID0gTU9VU0VfUklHSFQ7CisJICAgIG1vZGlmaWVycyAmPSB+IE1PVVNFX1NISUZUOworCX0KKworCS8qIElmIHRoZSBzZWxlY3Rpb24gaXMgZG9uZSwgYWxsb3cgdGhlIHJpZ2h0IGJ1dHRvbiB0byBleHRlbmQgaXQuCisJICogSWYgdGhlIHNlbGVjdGlvbiBpcyBjbGVhcmVkLCBhbGxvdyB0aGUgcmlnaHQgYnV0dG9uIHRvIHN0YXJ0IGl0CisJICogZnJvbSB0aGUgY3Vyc29yIHBvc2l0aW9uLiAqLworCWlmIChidXR0b24gPT0gTU9VU0VfUklHSFQpCisJeworCSAgICBpZiAoY2xpcF9zdGFyLnN0YXRlID09IFNFTEVDVF9DTEVBUkVEKQorCSAgICB7CisJCWlmIChTdGF0ZSAmIENNRExJTkUpCisJCXsKKwkJICAgIGNvbCA9IG1zZ19jb2w7CisJCSAgICByb3cgPSBtc2dfcm93OworCQl9CisJCWVsc2UKKwkJeworCQkgICAgY29sID0gY3Vyd2luLT53X3djb2w7CisJCSAgICByb3cgPSBjdXJ3aW4tPndfd3JvdyArIFdfV0lOUk9XKGN1cndpbik7CisJCX0KKwkJY2xpcF9zdGFydF9zZWxlY3Rpb24oY29sLCByb3csIEZBTFNFKTsKKwkgICAgfQorCSAgICBjbGlwX3Byb2Nlc3Nfc2VsZWN0aW9uKGJ1dHRvbiwgWF8yX0NPTCh4KSwgWV8yX1JPVyh5KSwKKwkJCQkJCQkgICAgICByZXBlYXRlZF9jbGljayk7CisJICAgIGRpZF9jbGlwID0gVFJVRTsKKwl9CisJLyogQWxsb3cgdGhlIGxlZnQgYnV0dG9uIHRvIHN0YXJ0IHRoZSBzZWxlY3Rpb24gKi8KKwllbHNlIGlmIChidXR0b24gPT0KKyMgaWZkZWYgUklTQ09TCisJCS8qIE9ubHkgc3RhcnQgYSBkcmFnIG9uIGEgZHJhZyBldmVudC4gT3RoZXJ3aXNlCisJCSAqIHdlIGRvbid0IGdldCBhIHJlbGVhc2UgZXZlbnQuICovCisJCSAgICBNT1VTRV9EUkFHCisjIGVsc2UKKwkJICAgIE1PVVNFX0xFRlQKKyMgZW5kaWYKKwkJCQkpCisJeworCSAgICBjbGlwX3N0YXJ0X3NlbGVjdGlvbihYXzJfQ09MKHgpLCBZXzJfUk9XKHkpLCByZXBlYXRlZF9jbGljayk7CisJICAgIGRpZF9jbGlwID0gVFJVRTsKKwl9CisjIGlmZGVmIFJJU0NPUworCWVsc2UgaWYgKGJ1dHRvbiA9PSBNT1VTRV9MRUZUKQorCXsKKwkgICAgY2xpcF9jbGVhcl9zZWxlY3Rpb24oKTsKKwkgICAgZGlkX2NsaXAgPSBUUlVFOworCX0KKyMgZW5kaWYKKworCS8qIEFsd2F5cyBhbGxvdyBwYXN0aW5nICovCisJaWYgKGJ1dHRvbiAhPSBNT1VTRV9NSURETEUpCisJeworCSAgICBpZiAoIW1vdXNlX2hhcyhjaGVja2ZvcikgfHwgYnV0dG9uID09IE1PVVNFX1JFTEVBU0UpCisJCXJldHVybjsKKwkgICAgaWYgKGNoZWNrZm9yICE9IE1PVVNFX0NPTU1BTkQpCisJCWJ1dHRvbiA9IE1PVVNFX0xFRlQ7CisJfQorCXJlcGVhdGVkX2NsaWNrID0gRkFMU0U7CisgICAgfQorCisgICAgaWYgKGNsaXBfc3Rhci5zdGF0ZSAhPSBTRUxFQ1RfQ0xFQVJFRCAmJiAhZGlkX2NsaXApCisJY2xpcF9jbGVhcl9zZWxlY3Rpb24oKTsKKyNlbmRpZgorCisgICAgLyogRG9uJ3QgcHV0IGV2ZW50cyBpbiB0aGUgaW5wdXQgcXVldWUgbm93LiAqLworICAgIGlmIChob2xkX2d1aV9ldmVudHMpCisJcmV0dXJuOworCisgICAgcm93ID0gZ3VpX3h5MmNvbHJvdyh4LCB5LCAmY29sKTsKKworICAgIC8qCisgICAgICogSWYgd2UgYXJlIGRyYWdnaW5nIGFuZCB0aGUgbW91c2UgaGFzbid0IG1vdmVkIGZhciBlbm91Z2ggdG8gYmUgb24gYQorICAgICAqIGRpZmZlcmVudCBjaGFyYWN0ZXIsIHRoZW4gZG9uJ3Qgc2VuZCBhbiBldmVudCB0byB2aW0uCisgICAgICovCisgICAgaWYgKGJ1dHRvbiA9PSBNT1VTRV9EUkFHKQorICAgIHsKKwlpZiAocm93ID09IHByZXZfcm93ICYmIGNvbCA9PSBwcmV2X2NvbCkKKwkgICAgcmV0dXJuOworCS8qIERyYWdnaW5nIGFib3ZlIHRoZSB3aW5kb3csIHNldCAicm93IiB0byAtMSB0byBjYXVzZSBhIHNjcm9sbC4gKi8KKwlpZiAoeSA8IDApCisJICAgIHJvdyA9IC0xOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgdG9wbGluZSBoYXMgY2hhbmdlZCAod2luZG93IHNjcm9sbGVkKSBzaW5jZSB0aGUgbGFzdCBjbGljaywgcmVzZXQKKyAgICAgKiByZXBlYXRlZF9jbGljaywgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHN0YXJ0aW5nIFZpc3VhbCBtb2RlIHdoZW4KKyAgICAgKiBjbGlja2luZyBvbiBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gdGhlIHRleHQuCisgICAgICovCisgICAgaWYgKGN1cndpbi0+d190b3BsaW5lICE9IGd1aV9wcmV2X3RvcGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkgICAgfHwgY3Vyd2luLT53X3RvcGZpbGwgIT0gZ3VpX3ByZXZfdG9wZmlsbAorI2VuZGlmCisJICAgICkKKwlyZXBlYXRlZF9jbGljayA9IEZBTFNFOworCisgICAgc3RyaW5nWzBdID0gQ1NJOwkvKiB0aGlzIHNlcXVlbmNlIGlzIHJlY29nbml6ZWQgYnkgY2hlY2tfdGVybWNvZGUoKSAqLworICAgIHN0cmluZ1sxXSA9IEtTX01PVVNFOworICAgIHN0cmluZ1syXSA9IEtFX0ZJTExFUjsKKyAgICBpZiAoYnV0dG9uICE9IE1PVVNFX0RSQUcgJiYgYnV0dG9uICE9IE1PVVNFX1JFTEVBU0UpCisgICAgeworCWlmIChyZXBlYXRlZF9jbGljaykKKwl7CisJICAgIC8qCisJICAgICAqIEhhbmRsZSBtdWx0aXBsZSBjbGlja3MuCVRoZXkgb25seSBjb3VudCBpZiB0aGUgbW91c2UgaXMgc3RpbGwKKwkgICAgICogcG9pbnRpbmcgYXQgdGhlIHNhbWUgY2hhcmFjdGVyLgorCSAgICAgKi8KKwkgICAgaWYgKGJ1dHRvbiAhPSBwcmV2X2J1dHRvbiB8fCByb3cgIT0gcHJldl9yb3cgfHwgY29sICE9IHByZXZfY29sKQorCQludW1fY2xpY2tzID0gMTsKKwkgICAgZWxzZSBpZiAoKytudW1fY2xpY2tzID4gNCkKKwkJbnVtX2NsaWNrcyA9IDE7CisJfQorCWVsc2UKKwkgICAgbnVtX2NsaWNrcyA9IDE7CisJcHJldl9idXR0b24gPSBidXR0b247CisJZ3VpX3ByZXZfdG9wbGluZSA9IGN1cndpbi0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfRElGRgorCWd1aV9wcmV2X3RvcGZpbGwgPSBjdXJ3aW4tPndfdG9wZmlsbDsKKyNlbmRpZgorCisJc3RyaW5nWzNdID0gKGNoYXJfdSkoYnV0dG9uIHwgMHgyMCk7CisJU0VUX05VTV9NT1VTRV9DTElDS1Moc3RyaW5nWzNdLCBudW1fY2xpY2tzKTsKKyAgICB9CisgICAgZWxzZQorCXN0cmluZ1szXSA9IChjaGFyX3UpYnV0dG9uOworCisgICAgc3RyaW5nWzNdIHw9IG1vZGlmaWVyczsKKyAgICBmaWxsX21vdXNlX2Nvb3JkKHN0cmluZyArIDQsIGNvbCwgcm93KTsKKyAgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgOCk7CisKKyAgICBpZiAocm93IDwgMCkKKwlwcmV2X3JvdyA9IDA7CisgICAgZWxzZQorCXByZXZfcm93ID0gcm93OworICAgIHByZXZfY29sID0gY29sOworCisgICAgLyoKKyAgICAgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGNsZWFyZWQgc2luY2UgQXRoZW5hIGRvZXNuJ3QgdGVsbCB1cyB3aGVuCisgICAgICogaGUgaXMgZG9uZSBkcmFnZ2luZy4gIE5laXRoZXIgZG9lcyBHVEsrIDIgLS0gYXQgbGVhc3QgZm9yIG5vdy4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkgfHwgZGVmaW5lZChIQVZFX0dUSzIpCisgICAgZ3VpLmRyYWdnZWRfc2IgPSBTQkFSX05PTkU7CisjZW5kaWYKK30KKworLyoKKyAqIENvbnZlcnQgeCBhbmQgeSBjb29yZGluYXRlIHRvIGNvbHVtbiBhbmQgcm93IGluIHRleHQgd2luZG93LgorICogQ29ycmVjdHMgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVyLgorICogcmV0dXJucyBjb2x1bW4gaW4gIipjb2xwIiBhbmQgcm93IGFzIHJldHVybiB2YWx1ZTsKKyAqLworICAgIGludAorZ3VpX3h5MmNvbHJvdyh4LCB5LCBjb2xwKQorICAgIGludAkJeDsKKyAgICBpbnQJCXk7CisgICAgaW50CQkqY29scDsKK3sKKyAgICBpbnQJCWNvbCA9IGNoZWNrX2NvbChYXzJfQ09MKHgpKTsKKyAgICBpbnQJCXJvdyA9IGNoZWNrX3JvdyhZXzJfUk9XKHkpKTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAqY29scCA9IG1iX2ZpeF9jb2woY29sLCByb3cpOworI2Vsc2UKKyAgICAqY29scCA9IGNvbDsKKyNlbmRpZgorICAgIHJldHVybiByb3c7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTUVOVSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiBhIG1lbnUgZW50cnkgaGFzIGJlZW4gc2VsZWN0ZWQuCisgKi8KKyAgICB2b2lkCitndWlfbWVudV9jYihtZW51KQorICAgIHZpbW1lbnVfVCAqbWVudTsKK3sKKyAgICBjaGFyX3UgIGJ5dGVzWzMgKyBzaXplb2YobG9uZ191KV07CisKKyAgICAvKiBEb24ndCBwdXQgZXZlbnRzIGluIHRoZSBpbnB1dCBxdWV1ZSBub3cuICovCisgICAgaWYgKGhvbGRfZ3VpX2V2ZW50cykKKwlyZXR1cm47CisKKyAgICBieXRlc1swXSA9IENTSTsKKyAgICBieXRlc1sxXSA9IEtTX01FTlU7CisgICAgYnl0ZXNbMl0gPSBLRV9GSUxMRVI7CisgICAgYWRkX2xvbmdfdG9fYnVmKChsb25nX3UpbWVudSwgYnl0ZXMgKyAzKTsKKyAgICBhZGRfdG9faW5wdXRfYnVmKGJ5dGVzLCAzICsgc2l6ZW9mKGxvbmdfdSkpOworfQorI2VuZGlmCisKKy8qCisgKiBTZXQgd2hpY2ggY29tcG9uZW50cyBhcmUgcHJlc2VudC4KKyAqIElmICJvbGR2YWwiIGlzIG5vdCBOVUxMLCAib2xkdmFsIiBpcyB0aGUgcHJldmlvdXMgdmFsdWUsIHRoZSBuZXcgKiB2YWx1ZSBpcworICogaW4gcF9nby4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorZ3VpX2luaXRfd2hpY2hfY29tcG9uZW50cyhvbGR2YWwpCisgICAgY2hhcl91CSpvbGR2YWw7Cit7CisgICAgc3RhdGljIGludAlwcmV2X3doaWNoX3Njcm9sbGJhcnNbM10gPSB7LTEsIC0xLCAtMX07CisjaWZkZWYgRkVBVF9NRU5VCisgICAgc3RhdGljIGludAlwcmV2X21lbnVfaXNfYWN0aXZlID0gLTE7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICBzdGF0aWMgaW50CXByZXZfdG9vbGJhciA9IC0xOworICAgIGludAkJdXNpbmdfdG9vbGJhciA9IEZBTFNFOworI2VuZGlmCisjaWZkZWYgRkVBVF9GT09URVIKKyAgICBzdGF0aWMgaW50CXByZXZfZm9vdGVyID0gLTE7CisgICAgaW50CQl1c2luZ19mb290ZXIgPSBGQUxTRTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9NRU5VKSAmJiAhZGVmaW5lZChXSU4xNikKKyAgICBzdGF0aWMgaW50CXByZXZfdGVhcm9mZiA9IC0xOworICAgIGludAkJdXNpbmdfdGVhcm9mZiA9IEZBTFNFOworI2VuZGlmCisKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpOworI2lmZGVmIEZFQVRfTUVOVQorICAgIGludAkJZ3JleV9vbGQsIGdyZXlfbmV3OworICAgIGNoYXJfdQkqdGVtcDsKKyNlbmRpZgorICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCW5lZWRfc2V0X3NpemU7CisgICAgaW50CQlmaXhfc2l6ZTsKKworI2lmZGVmIEZFQVRfTUVOVQorICAgIGlmIChvbGR2YWwgIT0gTlVMTCAmJiBndWkuaW5fdXNlKQorICAgIHsKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBtZW51J3MgZ28gZnJvbSBncmV5IHRvIG5vbi1ncmV5IG9yIHZpc2UgdmVyc2EuCisJICovCisJZ3JleV9vbGQgPSAodmltX3N0cmNocihvbGR2YWwsIEdPX0dSRVkpICE9IE5VTEwpOworCWdyZXlfbmV3ID0gKHZpbV9zdHJjaHIocF9nbywgR09fR1JFWSkgIT0gTlVMTCk7CisJaWYgKGdyZXlfb2xkICE9IGdyZXlfbmV3KQorCXsKKwkgICAgdGVtcCA9IHBfZ287CisJICAgIHBfZ28gPSBvbGR2YWw7CisJICAgIGd1aV91cGRhdGVfbWVudXMoTUVOVV9BTExfTU9ERVMpOworCSAgICBwX2dvID0gdGVtcDsKKwl9CisgICAgfQorICAgIGd1aS5tZW51X2lzX2FjdGl2ZSA9IEZBTFNFOworI2VuZGlmCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCWd1aS53aGljaF9zY3JvbGxiYXJzW2ldID0gRkFMU0U7CisgICAgZm9yIChwID0gcF9nbzsgKnA7IHArKykKKwlzd2l0Y2ggKCpwKQorCXsKKwkgICAgY2FzZSBHT19MRUZUOgorCQlndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgR09fUklHSFQ6CisJCWd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfUklHSFRdID0gVFJVRTsKKwkJYnJlYWs7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkgICAgY2FzZSBHT19WTEVGVDoKKwkJaWYgKHdpbl9oYXN2ZXJ0c3BsaXQoKSkKKwkJICAgIGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfTEVGVF0gPSBUUlVFOworCQlicmVhazsKKwkgICAgY2FzZSBHT19WUklHSFQ6CisJCWlmICh3aW5faGFzdmVydHNwbGl0KCkpCisJCSAgICBndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX1JJR0hUXSA9IFRSVUU7CisJCWJyZWFrOworI2VuZGlmCisJICAgIGNhc2UgR09fQk9UOgorCQlndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0JPVFRPTV0gPSBUUlVFOworCQlicmVhazsKKyNpZmRlZiBGRUFUX01FTlUKKwkgICAgY2FzZSBHT19NRU5VUzoKKwkJZ3VpLm1lbnVfaXNfYWN0aXZlID0gVFJVRTsKKwkJYnJlYWs7CisjZW5kaWYKKwkgICAgY2FzZSBHT19HUkVZOgorCQkvKiBtYWtlIG1lbnUncyBoYXZlIGdyZXkgaXRlbXMsIGlnbm9yZWQgaGVyZSAqLworCQlicmVhazsKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKwkgICAgY2FzZSBHT19UT09MQkFSOgorCQl1c2luZ190b29sYmFyID0gVFJVRTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPT1RFUgorCSAgICBjYXNlIEdPX0ZPT1RFUjoKKwkJdXNpbmdfZm9vdGVyID0gVFJVRTsKKwkJYnJlYWs7CisjZW5kaWYKKwkgICAgY2FzZSBHT19URUFST0ZGOgorI2lmIGRlZmluZWQoRkVBVF9NRU5VKSAmJiAhZGVmaW5lZChXSU4xNikKKwkJdXNpbmdfdGVhcm9mZiA9IFRSVUU7CisjZW5kaWYKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCS8qIElnbm9yZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgKi8KKwkJYnJlYWs7CisJfQorICAgIGlmIChndWkuaW5fdXNlKQorICAgIHsKKwluZWVkX3NldF9zaXplID0gRkFMU0U7CisJZml4X3NpemUgPSBGQUxTRTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCXsKKwkgICAgaWYgKGd1aS53aGljaF9zY3JvbGxiYXJzW2ldICE9IHByZXZfd2hpY2hfc2Nyb2xsYmFyc1tpXSkKKwkgICAgeworCQlpZiAoaSA9PSBTQkFSX0JPVFRPTSkKKwkJICAgIGd1aV9tY2hfZW5hYmxlX3Njcm9sbGJhcigmZ3VpLmJvdHRvbV9zYmFyLAorCQkJCQkJICAgICBndWkud2hpY2hfc2Nyb2xsYmFyc1tpXSk7CisJCWVsc2UKKwkJeworCQkgICAgRk9SX0FMTF9XSU5ET1dTKHdwKQorCQkgICAgeworCQkJZ3VpX2RvX3Njcm9sbGJhcih3cCwgaSwgZ3VpLndoaWNoX3Njcm9sbGJhcnNbaV0pOworCQkgICAgfQorCQl9CisJCW5lZWRfc2V0X3NpemUgPSBUUlVFOworCQlpZiAoZ3VpLndoaWNoX3Njcm9sbGJhcnNbaV0pCisJCSAgICBmaXhfc2l6ZSA9IFRSVUU7CisJICAgIH0KKwkgICAgcHJldl93aGljaF9zY3JvbGxiYXJzW2ldID0gZ3VpLndoaWNoX3Njcm9sbGJhcnNbaV07CisJfQorCisjaWZkZWYgRkVBVF9NRU5VCisJaWYgKGd1aS5tZW51X2lzX2FjdGl2ZSAhPSBwcmV2X21lbnVfaXNfYWN0aXZlKQorCXsKKwkgICAgLyogV2UgZG9uJ3Qgd2FudCBhIHJlc2l6ZSBldmVudCBjaGFuZ2UgIlJvd3MiIGhlcmUsIHNhdmUgYW5kCisJICAgICAqIHJlc3RvcmUgaXQuICBSZXNpemluZyBpcyBoYW5kbGVkIGJlbG93LiAqLworCSAgICBpID0gUm93czsKKwkgICAgZ3VpX21jaF9lbmFibGVfbWVudShndWkubWVudV9pc19hY3RpdmUpOworCSAgICBSb3dzID0gaTsKKwkgICAgcHJldl9tZW51X2lzX2FjdGl2ZSA9IGd1aS5tZW51X2lzX2FjdGl2ZTsKKwkgICAgbmVlZF9zZXRfc2l6ZSA9IFRSVUU7CisJICAgIGlmIChndWkubWVudV9pc19hY3RpdmUpCisJCWZpeF9zaXplID0gVFJVRTsKKwl9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVE9PTEJBUgorCWlmICh1c2luZ190b29sYmFyICE9IHByZXZfdG9vbGJhcikKKwl7CisJICAgIGd1aV9tY2hfc2hvd190b29sYmFyKHVzaW5nX3Rvb2xiYXIpOworCSAgICBwcmV2X3Rvb2xiYXIgPSB1c2luZ190b29sYmFyOworCSAgICBuZWVkX3NldF9zaXplID0gVFJVRTsKKwkgICAgaWYgKHVzaW5nX3Rvb2xiYXIpCisJCWZpeF9zaXplID0gVFJVRTsKKwl9CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPT1RFUgorCWlmICh1c2luZ19mb290ZXIgIT0gcHJldl9mb290ZXIpCisJeworCSAgICBndWlfbWNoX2VuYWJsZV9mb290ZXIodXNpbmdfZm9vdGVyKTsKKwkgICAgcHJldl9mb290ZXIgPSB1c2luZ19mb290ZXI7CisJICAgIG5lZWRfc2V0X3NpemUgPSBUUlVFOworCSAgICBpZiAodXNpbmdfZm9vdGVyKQorCQlmaXhfc2l6ZSA9IFRSVUU7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX01FTlUpICYmICFkZWZpbmVkKFdJTjE2KSAmJiAhKGRlZmluZWQoV0lOMzI2NCkgJiYgIWRlZmluZWQoRkVBVF9URUFST0ZGKSkKKwlpZiAodXNpbmdfdGVhcm9mZiAhPSBwcmV2X3RlYXJvZmYpCisJeworCSAgICBndWlfbWNoX3RvZ2dsZV90ZWFyb2Zmcyh1c2luZ190ZWFyb2ZmKTsKKwkgICAgcHJldl90ZWFyb2ZmID0gdXNpbmdfdGVhcm9mZjsKKwl9CisjZW5kaWYKKwlpZiAobmVlZF9zZXRfc2l6ZSkKKwkgICAgLyogQWRqdXN0IHRoZSBzaXplIG9mIHRoZSB3aW5kb3cgdG8gbWFrZSB0aGUgdGV4dCBhcmVhIGtlZXAgdGhlCisJICAgICAqIHNhbWUgc2l6ZSBhbmQgdG8gYXZvaWQgdGhhdCBwYXJ0IG9mIG91ciB3aW5kb3cgaXMgb2ZmLXNjcmVlbgorCSAgICAgKiBhbmQgYSBzY3JvbGxiYXIgY2FuJ3QgYmUgdXNlZCwgZm9yIGV4YW1wbGUuICovCisJICAgIGd1aV9zZXRfc2hlbGxzaXplKEZBTFNFLCBmaXhfc2l6ZSk7CisgICAgfQorfQorCisKKy8qCisgKiBTY3JvbGxiYXIgc3R1ZmY6CisgKi8KKworICAgIHZvaWQKK2d1aV9jcmVhdGVfc2Nyb2xsYmFyKHNiLCB0eXBlLCB3cCkKKyAgICBzY3JvbGxiYXJfVAkqc2I7CisgICAgaW50CQl0eXBlOworICAgIHdpbl9UCSp3cDsKK3sKKyAgICBzdGF0aWMgaW50CXNiYXJfaWRlbnQgPSAwOworCisgICAgc2ItPmlkZW50ID0gc2Jhcl9pZGVudCsrOwkvKiBObyBjaGVjayBmb3IgdG9vIGJpZywgYnV0IHdvdWxkIGl0IGhhcHBlbj8gKi8KKyAgICBzYi0+d3AgPSB3cDsKKyAgICBzYi0+dHlwZSA9IHR5cGU7CisgICAgc2ItPnZhbHVlID0gMDsKKyNpZmRlZiBGRUFUX0dVSV9BVEhFTkEKKyAgICBzYi0+cGl4dmFsID0gMDsKKyNlbmRpZgorICAgIHNiLT5zaXplID0gMTsKKyAgICBzYi0+bWF4ID0gMTsKKyAgICBzYi0+dG9wID0gMDsKKyAgICBzYi0+aGVpZ2h0ID0gMDsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIHNiLT53aWR0aCA9IDA7CisjZW5kaWYKKyAgICBzYi0+c3RhdHVzX2hlaWdodCA9IDA7CisgICAgZ3VpX21jaF9jcmVhdGVfc2Nyb2xsYmFyKHNiLCAod3AgPT0gTlVMTCkgPyBTQkFSX0hPUklaIDogU0JBUl9WRVJUKTsKK30KKworLyoKKyAqIEZpbmQgdGhlIHNjcm9sbGJhciB3aXRoIHRoZSBnaXZlbiBpbmRleC4KKyAqLworICAgIHNjcm9sbGJhcl9UICoKK2d1aV9maW5kX3Njcm9sbGJhcihpZGVudCkKKyAgICBsb25nCWlkZW50OworeworICAgIHdpbl9UCSp3cDsKKworICAgIGlmIChndWkuYm90dG9tX3NiYXIuaWRlbnQgPT0gaWRlbnQpCisJcmV0dXJuICZndWkuYm90dG9tX3NiYXI7CisgICAgRk9SX0FMTF9XSU5ET1dTKHdwKQorICAgIHsKKwlpZiAod3AtPndfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdLmlkZW50ID09IGlkZW50KQorCSAgICByZXR1cm4gJndwLT53X3Njcm9sbGJhcnNbU0JBUl9MRUZUXTsKKwlpZiAod3AtPndfc2Nyb2xsYmFyc1tTQkFSX1JJR0hUXS5pZGVudCA9PSBpZGVudCkKKwkgICAgcmV0dXJuICZ3cC0+d19zY3JvbGxiYXJzW1NCQVJfUklHSFRdOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEZvciBtb3N0IHN5c3RlbXM6IFB1dCBhIGNvZGUgaW4gdGhlIGlucHV0IGJ1ZmZlciBmb3IgYSBkcmFnZ2VkIHNjcm9sbGJhci4KKyAqCisgKiBGb3IgV2luMzIsIE1hY2ludG9zaCBhbmQgR1RLKyAyOgorICogU2Nyb2xsYmFycyBzZWVtIHRvIGdyYWIgZm9jdXMgYW5kIHZpbSBkb2Vzbid0IHJlYWQgdGhlIGlucHV0IHF1ZXVlIHVudGlsCisgKiB5b3Ugc3RvcCBkcmFnZ2luZyB0aGUgc2Nyb2xsYmFyLiAgV2UgZ2V0IGhlcmUgZWFjaCB0aW1lIHRoZSBzY3JvbGxiYXIgaXMKKyAqIGRyYWdnZWQgYW5vdGhlciBwaXhlbCwgYnV0IGFzIGZhciBhcyB0aGUgcmVzdCBvZiB2aW0gZ29lcywgaXQgdGhpbmtzCisgKiB3ZSdyZSBqdXN0IGhhbmdpbmcgaW4gdGhlIGNhbGwgdG8gRGlzcGF0Y2hNZXNzYWdlKCkgaW4KKyAqIHByb2Nlc3NfbWVzc2FnZSgpLiAgVGhlIERpc3BhdGNoTWVzc2FnZSgpIGNhbGwgdGhhdCBoYW5ncyB3YXMgcGFzc2VkIGEKKyAqIG1vdXNlIGJ1dHRvbiBjbGljayBldmVudCBpbiB0aGUgc2Nyb2xsYmFyIHdpbmRvdy4gLS0gd2ViYi4KKyAqCisgKiBTb2x1dGlvbjogRG8gdGhlIHNjcm9sbGluZyByaWdodCBoZXJlLiAgQnV0IG9ubHkgd2hlbiBhbGxvd2VkLgorICogSWdub3JlIHRoZSBzY3JvbGxiYXJzIHdoaWxlIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kIG9yIHdoZW4gdGhlcmUKKyAqIGFyZSBzdGlsbCBjaGFyYWN0ZXJzIHRvIGJlIHByb2Nlc3NlZC4KKyAqLworICAgIHZvaWQKK2d1aV9kcmFnX3Njcm9sbGJhcihzYiwgdmFsdWUsIHN0aWxsX2RyYWdnaW5nKQorICAgIHNjcm9sbGJhcl9UCSpzYjsKKyAgICBsb25nCXZhbHVlOworICAgIGludAkJc3RpbGxfZHJhZ2dpbmc7Cit7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgd2luX1QJKndwOworI2VuZGlmCisgICAgaW50CQlzYl9udW07CisjaWZkZWYgVVNFX09OX0ZMWV9TQ1JPTEwKKyAgICBjb2xucl9UCW9sZF9sZWZ0Y29sID0gY3Vyd2luLT53X2xlZnRjb2w7CisjIGlmZGVmIEZFQVRfU0NST0xMQklORAorICAgIGxpbmVucl9UCW9sZF90b3BsaW5lID0gY3Vyd2luLT53X3RvcGxpbmU7CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfRElGRgorICAgIGludAkJb2xkX3RvcGZpbGwgPSBjdXJ3aW4tPndfdG9wZmlsbDsKKyMgZW5kaWYKKyNlbHNlCisgICAgY2hhcl91CWJ5dGVzWzQgKyBzaXplb2YobG9uZ191KV07CisgICAgaW50CQlieXRlX2NvdW50OworI2VuZGlmCisKKyAgICBpZiAoc2IgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICAvKiBEb24ndCBwdXQgZXZlbnRzIGluIHRoZSBpbnB1dCBxdWV1ZSBub3cuICovCisgICAgaWYgKGhvbGRfZ3VpX2V2ZW50cykKKwlyZXR1cm47CisKKyNpZmRlZiBGRUFUX0NNRFdJTgorICAgIGlmIChjbWR3aW5fdHlwZSAhPSAwICYmIHNiLT53cCAhPSBjdXJ3aW4pCisJcmV0dXJuOworI2VuZGlmCisKKyAgICBpZiAoc3RpbGxfZHJhZ2dpbmcpCisgICAgeworCWlmIChzYi0+d3AgPT0gTlVMTCkKKwkgICAgZ3VpLmRyYWdnZWRfc2IgPSBTQkFSX0JPVFRPTTsKKwllbHNlIGlmIChzYiA9PSAmc2ItPndwLT53X3Njcm9sbGJhcnNbU0JBUl9MRUZUXSkKKwkgICAgZ3VpLmRyYWdnZWRfc2IgPSBTQkFSX0xFRlQ7CisJZWxzZQorCSAgICBndWkuZHJhZ2dlZF9zYiA9IFNCQVJfUklHSFQ7CisJZ3VpLmRyYWdnZWRfd3AgPSBzYi0+d3A7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZ3VpLmRyYWdnZWRfc2IgPSBTQkFSX05PTkU7CisjaWZkZWYgSEFWRV9HVEsyCisJLyogS2VlcCB0aGUgImRyYWdnZWRfd3AiIHZhbHVlIHVudGlsIGFmdGVyIHRoZSBzY3JvbGxpbmcsIGZvciB3aGVuIHRoZQorCSAqIG1vdXN0IGJ1dHRvbiBpcyByZWxlYXNlZC4gIEdUSzIgZG9lc24ndCBzZW5kIHRoZSBidXR0b24tdXAgZXZlbnQuICovCisJZ3VpLmRyYWdnZWRfd3AgPSBOVUxMOworI2VuZGlmCisgICAgfQorCisgICAgLyogVmVydGljYWwgc2JhciBpbmZvIGlzIGtlcHQgaW4gdGhlIGZpcnN0IHNiYXIgKHRoZSBsZWZ0IG9uZSkgKi8KKyAgICBpZiAoc2ItPndwICE9IE5VTEwpCisJc2IgPSAmc2ItPndwLT53X3Njcm9sbGJhcnNbMF07CisKKyAgICAvKgorICAgICAqIENoZWNrIHZhbGlkaXR5IG9mIHZhbHVlCisgICAgICovCisgICAgaWYgKHZhbHVlIDwgMCkKKwl2YWx1ZSA9IDA7CisjaWZkZWYgU0NST0xMX1BBU1RfRU5ECisgICAgZWxzZSBpZiAodmFsdWUgPiBzYi0+bWF4KQorCXZhbHVlID0gc2ItPm1heDsKKyNlbHNlCisgICAgaWYgKHZhbHVlID4gc2ItPm1heCAtIHNiLT5zaXplICsgMSkKKwl2YWx1ZSA9IHNiLT5tYXggLSBzYi0+c2l6ZSArIDE7CisjZW5kaWYKKworICAgIHNiLT52YWx1ZSA9IHZhbHVlOworCisjaWZkZWYgVVNFX09OX0ZMWV9TQ1JPTEwKKyAgICAvKiBXaGVuIG5vdCBhbGxvd2VkIHRvIGRvIHRoZSBzY3JvbGxpbmcgcmlnaHQgbm93LCByZXR1cm4uICovCisgICAgaWYgKGRvbnRfc2Nyb2xsIHx8IGlucHV0X2F2YWlsYWJsZSgpKQorCXJldHVybjsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKyAgICBpZiAoc2ItPndwID09IE5VTEwgJiYgY3Vyd2luLT53X3BfcmwpCisgICAgeworCXZhbHVlID0gc2ItPm1heCArIDEgLSBzYi0+c2l6ZSAtIHZhbHVlOworCWlmICh2YWx1ZSA8IDApCisJICAgIHZhbHVlID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChzYi0+d3AgIT0gTlVMTCkJCS8qIHZlcnRpY2FsIHNjcm9sbGJhciAqLworICAgIHsKKwlzYl9udW0gPSAwOworI2lmZGVmIEZFQVRfV0lORE9XUworCWZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gc2ItPndwICYmIHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwkgICAgc2JfbnVtKys7CisJaWYgKHdwID09IE5VTEwpCisJICAgIHJldHVybjsKKyNlbHNlCisJaWYgKHNiLT53cCAhPSBjdXJ3aW4pCisJICAgIHJldHVybjsKKyNlbmRpZgorCisjaWZkZWYgVVNFX09OX0ZMWV9TQ1JPTEwKKwljdXJyZW50X3Njcm9sbGJhciA9IHNiX251bTsKKwlzY3JvbGxiYXJfdmFsdWUgPSB2YWx1ZTsKKwlpZiAoU3RhdGUgJiBOT1JNQUwpCisJeworCSAgICBndWlfZG9fc2Nyb2xsKCk7CisJICAgIHNldGN1cnNvcigpOworCX0KKwllbHNlIGlmIChTdGF0ZSAmIElOU0VSVCkKKwl7CisJICAgIGluc19zY3JvbGwoKTsKKwkgICAgc2V0Y3Vyc29yKCk7CisJfQorCWVsc2UgaWYgKFN0YXRlICYgQ01ETElORSkKKwl7CisJICAgIGlmIChtc2dfc2Nyb2xsZWQgPT0gMCkKKwkgICAgeworCQlndWlfZG9fc2Nyb2xsKCk7CisJCXJlZHJhd2NtZGxpbmUoKTsKKwkgICAgfQorCX0KKyMgaWZkZWYgRkVBVF9GT0xESU5HCisJLyogVmFsdWUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIGZvciBjbG9zZWQgZm9sZC4gKi8KKwlzYi0+dmFsdWUgPSBzYi0+d3AtPndfdG9wbGluZSAtIDE7CisjIGVuZGlmCisjZWxzZQorCWJ5dGVzWzBdID0gQ1NJOworCWJ5dGVzWzFdID0gS1NfVkVSX1NDUk9MTEJBUjsKKwlieXRlc1syXSA9IEtFX0ZJTExFUjsKKwlieXRlc1szXSA9IChjaGFyX3Upc2JfbnVtOworCWJ5dGVfY291bnQgPSA0OworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWZkZWYgVVNFX09OX0ZMWV9TQ1JPTEwKKwlzY3JvbGxiYXJfdmFsdWUgPSB2YWx1ZTsKKworCWlmIChTdGF0ZSAmIE5PUk1BTCkKKwkgICAgZ3VpX2RvX2hvcml6X3Njcm9sbCgpOworCWVsc2UgaWYgKFN0YXRlICYgSU5TRVJUKQorCSAgICBpbnNfaG9yc2Nyb2xsKCk7CisJZWxzZSBpZiAoU3RhdGUgJiBDTURMSU5FKQorCXsKKwkgICAgaWYgKCFtc2dfc2Nyb2xsZWQpCisJICAgIHsKKwkJZ3VpX2RvX2hvcml6X3Njcm9sbCgpOworCQlyZWRyYXdjbWRsaW5lKCk7CisJICAgIH0KKwl9CisJaWYgKG9sZF9sZWZ0Y29sICE9IGN1cndpbi0+d19sZWZ0Y29sKQorCXsKKwkgICAgdXBkYXRlV2luZG93KGN1cndpbik7ICAgLyogdXBkYXRlIHdpbmRvdywgc3RhdHVzIGFuZCBjbWRsaW5lICovCisJICAgIHNldGN1cnNvcigpOworCX0KKyNlbHNlCisJYnl0ZXNbMF0gPSBDU0k7CisJYnl0ZXNbMV0gPSBLU19IT1JfU0NST0xMQkFSOworCWJ5dGVzWzJdID0gS0VfRklMTEVSOworCWJ5dGVfY291bnQgPSAzOworI2VuZGlmCisgICAgfQorCisjaWZkZWYgVVNFX09OX0ZMWV9TQ1JPTEwKKyMgaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisgICAgLyoKKyAgICAgKiBzeW5jaHJvbml6ZSBvdGhlciB3aW5kb3dzLCBhcyBuZWNlc3NhcnkgYWNjb3JkaW5nIHRvICdzY3JvbGxiaW5kJworICAgICAqLworICAgIGlmIChjdXJ3aW4tPndfcF9zY2IKKwkgICAgJiYgKChzYi0+d3AgPT0gTlVMTCAmJiBjdXJ3aW4tPndfbGVmdGNvbCAhPSBvbGRfbGVmdGNvbCkKKwkJfHwgKHNiLT53cCA9PSBjdXJ3aW4gJiYgKGN1cndpbi0+d190b3BsaW5lICE9IG9sZF90b3BsaW5lCisjICBpZmRlZiBGRUFUX0RJRkYKKwkJCQkJICAgfHwgY3Vyd2luLT53X3RvcGZpbGwgIT0gb2xkX3RvcGZpbGwKKyMgIGVuZGlmCisJCQkpKSkpCisgICAgeworCWRvX2NoZWNrX3Njcm9sbGJpbmQoVFJVRSk7CisJLyogbmVlZCB0byB1cGRhdGUgdGhlIHdpbmRvdyByaWdodCBoZXJlICovCisJZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSBOVUxMOyB3cCA9IHdwLT53X25leHQpCisJICAgIGlmICh3cC0+d19yZWRyX3R5cGUgPiAwKQorCQl1cGRhdGVXaW5kb3cod3ApOworCXNldGN1cnNvcigpOworICAgIH0KKyMgZW5kaWYKKyAgICBvdXRfZmx1c2goKTsKKyAgICBndWlfdXBkYXRlX2N1cnNvcihGQUxTRSwgVFJVRSk7CisjZWxzZQorICAgIGFkZF9sb25nX3RvX2J1ZigobG9uZyl2YWx1ZSwgYnl0ZXMgKyBieXRlX2NvdW50KTsKKyAgICBhZGRfdG9faW5wdXRfYnVmKGJ5dGVzLCBieXRlX2NvdW50ICsgc2l6ZW9mKGxvbmdfdSkpOworI2VuZGlmCit9CisKKy8qCisgKiBTY3JvbGxiYXIgc3R1ZmY6CisgKi8KKworICAgIHZvaWQKK2d1aV91cGRhdGVfc2Nyb2xsYmFycyhmb3JjZSkKKyAgICBpbnQJCWZvcmNlOwkgICAgLyogRm9yY2UgYWxsIHNjcm9sbGJhcnMgdG8gZ2V0IHVwZGF0ZWQgKi8KK3sKKyAgICB3aW5fVAkqd3A7CisgICAgc2Nyb2xsYmFyX1QJKnNiOworICAgIGxvbmcJdmFsLCBzaXplLCBtYXg7CQkvKiBuZWVkIDMyIGJpdHMgaGVyZSAqLworICAgIGludAkJd2hpY2hfc2I7CisgICAgaW50CQloLCB5OworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgc3RhdGljIHdpbl9UICpwcmV2X2N1cndpbiA9IE5VTEw7CisjZW5kaWYKKworICAgIC8qIFVwZGF0ZSB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgKi8KKyAgICBndWlfdXBkYXRlX2hvcml6X3Njcm9sbGJhcihmb3JjZSk7CisKKyNpZm5kZWYgV0lOMzI2NAorICAgIC8qIFJldHVybiBzdHJhaWdodCBhd2F5IGlmIHRoZXJlIGlzIG5laXRoZXIgYSBsZWZ0IG5vciByaWdodCBzY3JvbGxiYXIuCisgICAgICogT24gTVMtV2luZG93cyB0aGlzIGlzIHJlcXVpcmVkIGFueXdheSBmb3Igc2Nyb2xsd2hlZWwgbWVzc2FnZXMuICovCisgICAgaWYgKCFndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdICYmICFndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX1JJR0hUXSkKKwlyZXR1cm47CisjZW5kaWYKKworICAgIC8qCisgICAgICogRG9uJ3Qgd2FudCB0byB1cGRhdGUgYSBzY3JvbGxiYXIgd2hpbGUgd2UncmUgZHJhZ2dpbmcgaXQuICBCdXQgaWYgd2UKKyAgICAgKiBoYXZlIGJvdGggYSBsZWZ0IGFuZCByaWdodCBzY3JvbGxiYXIsIGFuZCB3ZSBkcmFnIG9uZSBvZiB0aGVtLCB3ZSBzdGlsbAorICAgICAqIG5lZWQgdG8gdXBkYXRlIHRoZSBvdGhlciBvbmUuCisgICAgICovCisgICAgaWYgKCAgICAgICAoZ3VpLmRyYWdnZWRfc2IgPT0gU0JBUl9MRUZUCisJCXx8IGd1aS5kcmFnZ2VkX3NiID09IFNCQVJfUklHSFQpCisJICAgICYmICghZ3VpLndoaWNoX3Njcm9sbGJhcnNbU0JBUl9MRUZUXQorCQl8fCAhZ3VpLndoaWNoX3Njcm9sbGJhcnNbU0JBUl9SSUdIVF0pCisJICAgICYmICFmb3JjZSkKKwlyZXR1cm47CisKKyAgICBpZiAoIWZvcmNlICYmIChndWkuZHJhZ2dlZF9zYiA9PSBTQkFSX0xFRlQgfHwgZ3VpLmRyYWdnZWRfc2IgPT0gU0JBUl9SSUdIVCkpCisgICAgeworCS8qCisJICogSWYgd2UgaGF2ZSB0d28gc2Nyb2xsYmFycyBhbmQgb25lIG9mIHRoZW0gaXMgYmVpbmcgZHJhZ2dlZCwganVzdAorCSAqIGNvcHkgdGhlIHNjcm9sbGJhciBwb3NpdGlvbiBmcm9tIHRoZSBkcmFnZ2VkIG9uZSB0byB0aGUgb3RoZXIgb25lLgorCSAqLworCXdoaWNoX3NiID0gU0JBUl9MRUZUICsgU0JBUl9SSUdIVCAtIGd1aS5kcmFnZ2VkX3NiOworCWlmIChndWkuZHJhZ2dlZF93cCAhPSBOVUxMKQorCSAgICBndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIoCisJCSAgICAmZ3VpLmRyYWdnZWRfd3AtPndfc2Nyb2xsYmFyc1t3aGljaF9zYl0sCisJCSAgICBndWkuZHJhZ2dlZF93cC0+d19zY3JvbGxiYXJzWzBdLnZhbHVlLAorCQkgICAgZ3VpLmRyYWdnZWRfd3AtPndfc2Nyb2xsYmFyc1swXS5zaXplLAorCQkgICAgZ3VpLmRyYWdnZWRfd3AtPndfc2Nyb2xsYmFyc1swXS5tYXgpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBhdm9pZCB0aGF0IG1vdmluZyBjb21wb25lbnRzIGFyb3VuZCBnZW5lcmF0ZXMgZXZlbnRzICovCisgICAgKytob2xkX2d1aV9ldmVudHM7CisKKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gV19ORVhUKHdwKSkKKyAgICB7CisJaWYgKHdwLT53X2J1ZmZlciA9PSBOVUxMKQkvKiBqdXN0IGluIGNhc2UgKi8KKwkgICAgY29udGludWU7CisjaWZkZWYgU0NST0xMX1BBU1RfRU5ECisJbWF4ID0gd3AtPndfYnVmZmVyLT5iX21sLm1sX2xpbmVfY291bnQgLSAxOworI2Vsc2UKKwltYXggPSB3cC0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudCArIHdwLT53X2hlaWdodCAtIDI7CisjZW5kaWYKKwlpZiAobWF4IDwgMCkJCQkvKiBlbXB0eSBidWZmZXIgKi8KKwkgICAgbWF4ID0gMDsKKwl2YWwgPSB3cC0+d190b3BsaW5lIC0gMTsKKwlzaXplID0gd3AtPndfaGVpZ2h0OworI2lmZGVmIFNDUk9MTF9QQVNUX0VORAorCWlmICh2YWwgPiBtYXgpCQkJLyoganVzdCBpbiBjYXNlICovCisJICAgIHZhbCA9IG1heDsKKyNlbHNlCisJaWYgKHNpemUgPiBtYXggKyAxKQkJLyoganVzdCBpbiBjYXNlICovCisJICAgIHNpemUgPSBtYXggKyAxOworCWlmICh2YWwgPiBtYXggLSBzaXplICsgMSkKKwkgICAgdmFsID0gbWF4IC0gc2l6ZSArIDE7CisjZW5kaWYKKwlpZiAodmFsIDwgMCkJCQkvKiBtaW5pbWFsIHZhbHVlIGlzIDAgKi8KKwkgICAgdmFsID0gMDsKKworCS8qCisJICogU2Nyb2xsYmFyIGF0IGluZGV4IDAgKHRoZSBsZWZ0IG9uZSkgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbi4KKwkgKiBJdCB3b3VsZCBiZSB0aGUgc2FtZSBpbmZvIGZvciBsZWZ0IGFuZCByaWdodCBzbyB3ZSBqdXN0IHN0b3JlIGl0IGZvcgorCSAqIG9uZSBvZiB0aGVtLgorCSAqLworCXNiID0gJndwLT53X3Njcm9sbGJhcnNbMF07CisKKwkvKgorCSAqIE5vdGU6IG5vIGNoZWNrIGZvciB2YWxpZCB3X2JvdGxpbmUuCUlmIGl0J3Mgbm90IHZhbGlkIHRoZQorCSAqIHNjcm9sbGJhcnMgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIGFueXdheS4KKwkgKi8KKwlpZiAoc2l6ZSA8IDEgfHwgd3AtPndfYm90bGluZSAtIDIgPiBtYXgpCisJeworCSAgICAvKgorCSAgICAgKiBUaGlzIGNhbiBoYXBwZW4gZHVyaW5nIGNoYW5naW5nIGZpbGVzLiAgSnVzdCBkb24ndCB1cGRhdGUgdGhlCisJICAgICAqIHNjcm9sbGJhciBmb3Igbm93LgorCSAgICAgKi8KKwkgICAgc2ItPmhlaWdodCA9IDA7CSAgICAvKiBGb3JjZSB1cGRhdGUgbmV4dCB0aW1lICovCisJICAgIGlmIChndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdKQorCQlndWlfZG9fc2Nyb2xsYmFyKHdwLCBTQkFSX0xFRlQsIEZBTFNFKTsKKwkgICAgaWYgKGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfUklHSFRdKQorCQlndWlfZG9fc2Nyb2xsYmFyKHdwLCBTQkFSX1JJR0hULCBGQUxTRSk7CisJICAgIGNvbnRpbnVlOworCX0KKwlpZiAoZm9yY2UgfHwgc2ItPmhlaWdodCAhPSB3cC0+d19oZWlnaHQKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkgICAgfHwgc2ItPnRvcCAhPSB3cC0+d193aW5yb3cKKwkgICAgfHwgc2ItPnN0YXR1c19oZWlnaHQgIT0gd3AtPndfc3RhdHVzX2hlaWdodAorIyBpZmRlZiBGRUFUX1ZFUlRTUExJVAorCSAgICB8fCBzYi0+d2lkdGggIT0gd3AtPndfd2lkdGgKKwkgICAgfHwgcHJldl9jdXJ3aW4gIT0gY3Vyd2luCisjIGVuZGlmCisjZW5kaWYKKwkgICAgKQorCXsKKwkgICAgLyogSGVpZ2h0LCB3aWR0aCBvciBwb3NpdGlvbiBvZiBzY3JvbGxiYXIgaGFzIGNoYW5nZWQuICBGb3IKKwkgICAgICogdmVydGljYWwgc3BsaXQ6IGN1cndpbiBjaGFuZ2VkLiAqLworCSAgICBzYi0+aGVpZ2h0ID0gd3AtPndfaGVpZ2h0OworI2lmZGVmIEZFQVRfV0lORE9XUworCSAgICBzYi0+dG9wID0gd3AtPndfd2lucm93OworCSAgICBzYi0+c3RhdHVzX2hlaWdodCA9IHdwLT53X3N0YXR1c19oZWlnaHQ7CisjIGlmZGVmIEZFQVRfVkVSVFNQTElUCisJICAgIHNiLT53aWR0aCA9IHdwLT53X3dpZHRoOworIyBlbmRpZgorI2VuZGlmCisKKwkgICAgLyogQ2FsY3VsYXRlIGhlaWdodCBhbmQgcG9zaXRpb24gaW4gcGl4ZWxzICovCisJICAgIGggPSAoc2ItPmhlaWdodCArIHNiLT5zdGF0dXNfaGVpZ2h0KSAqIGd1aS5jaGFyX2hlaWdodDsKKwkgICAgeSA9IHNiLT50b3AgKiBndWkuY2hhcl9oZWlnaHQgKyBndWkuYm9yZGVyX29mZnNldDsKKyNpZiBkZWZpbmVkKEZFQVRfTUVOVSkgJiYgIWRlZmluZWQoRkVBVF9HVUlfR1RLKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgJiYgIWRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKQorCSAgICBpZiAoZ3VpLm1lbnVfaXNfYWN0aXZlKQorCQl5ICs9IGd1aS5tZW51X2hlaWdodDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1RPT0xCQVIpICYmIChkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkpCisJICAgIGlmICh2aW1fc3RyY2hyKHBfZ28sIEdPX1RPT0xCQVIpICE9IE5VTEwpCisjIGlmZGVmIEZFQVRfR1VJX0FUSEVOQQorCQl5ICs9IGd1aS50b29sYmFyX2hlaWdodDsKKyMgZWxzZQorIyAgaWZkZWYgRkVBVF9HVUlfTVNXSU4KKwkJeSArPSBUT09MQkFSX0JVVFRPTl9IRUlHSFQgKyBUT09MQkFSX0JPUkRFUl9IRUlHSFQ7CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkgICAgaWYgKHdwLT53X3dpbnJvdyA9PSAwKQorI2VuZGlmCisJICAgIHsKKwkJLyogSGVpZ2h0IG9mIHRvcCBzY3JvbGxiYXIgaW5jbHVkZXMgd2lkdGggb2YgdG9wIGJvcmRlciAqLworCQloICs9IGd1aS5ib3JkZXJfb2Zmc2V0OworCQl5IC09IGd1aS5ib3JkZXJfb2Zmc2V0OworCSAgICB9CisJICAgIGlmIChndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdKQorCSAgICB7CisJCWd1aV9tY2hfc2V0X3Njcm9sbGJhcl9wb3MoJndwLT53X3Njcm9sbGJhcnNbU0JBUl9MRUZUXSwKKwkJCQkJICBndWkubGVmdF9zYmFyX3gsIHksCisJCQkJCSAgZ3VpLnNjcm9sbGJhcl93aWR0aCwgaCk7CisJCWd1aV9kb19zY3JvbGxiYXIod3AsIFNCQVJfTEVGVCwgVFJVRSk7CisJICAgIH0KKwkgICAgaWYgKGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfUklHSFRdKQorCSAgICB7CisJCWd1aV9tY2hfc2V0X3Njcm9sbGJhcl9wb3MoJndwLT53X3Njcm9sbGJhcnNbU0JBUl9SSUdIVF0sCisJCQkJCSAgZ3VpLnJpZ2h0X3NiYXJfeCwgeSwKKwkJCQkJICBndWkuc2Nyb2xsYmFyX3dpZHRoLCBoKTsKKwkJZ3VpX2RvX3Njcm9sbGJhcih3cCwgU0JBUl9SSUdIVCwgVFJVRSk7CisJICAgIH0KKwl9CisKKwkvKiBSZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyB0byBndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIoKSBieQorCSAqIGNoZWNraW5nIGlmIHRoZSB0aHVtYiBtb3ZlZCBhdCBsZWFzdCBhIHBpeGVsLiAgT25seSBkbyB0aGlzIGZvcgorCSAqIEF0aGVuYSwgbW9zdCBvdGhlciBHVUlzIHJlcXVpcmUgdGhlIHVwZGF0ZSBhbnl3YXkgdG8gbWFrZSB0aGUKKwkgKiBhcnJvd3Mgd29yay4gKi8KKyNpZmRlZiBGRUFUX0dVSV9BVEhFTkEKKwlpZiAobWF4ID09IDApCisJICAgIHkgPSAwOworCWVsc2UKKwkgICAgeSA9ICh2YWwgKiAoc2ItPmhlaWdodCArIDIpICogZ3VpLmNoYXJfaGVpZ2h0ICsgbWF4IC8gMikgLyBtYXg7CisJaWYgKGZvcmNlIHx8IHNiLT5waXh2YWwgIT0geSB8fCBzYi0+c2l6ZSAhPSBzaXplIHx8IHNiLT5tYXggIT0gbWF4KQorI2Vsc2UKKwlpZiAoZm9yY2UgfHwgc2ItPnZhbHVlICE9IHZhbCB8fCBzYi0+c2l6ZSAhPSBzaXplIHx8IHNiLT5tYXggIT0gbWF4KQorI2VuZGlmCisJeworCSAgICAvKiBUaHVtYiBvZiBzY3JvbGxiYXIgaGFzIG1vdmVkICovCisJICAgIHNiLT52YWx1ZSA9IHZhbDsKKyNpZmRlZiBGRUFUX0dVSV9BVEhFTkEKKwkgICAgc2ItPnBpeHZhbCA9IHk7CisjZW5kaWYKKwkgICAgc2ItPnNpemUgPSBzaXplOworCSAgICBzYi0+bWF4ID0gbWF4OworCSAgICBpZiAoZ3VpLndoaWNoX3Njcm9sbGJhcnNbU0JBUl9MRUZUXSAmJiBndWkuZHJhZ2dlZF9zYiAhPSBTQkFSX0xFRlQpCisJCWd1aV9tY2hfc2V0X3Njcm9sbGJhcl90aHVtYigmd3AtPndfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdLAorCQkJCQkgICAgdmFsLCBzaXplLCBtYXgpOworCSAgICBpZiAoZ3VpLndoaWNoX3Njcm9sbGJhcnNbU0JBUl9SSUdIVF0KKwkJCQkJJiYgZ3VpLmRyYWdnZWRfc2IgIT0gU0JBUl9SSUdIVCkKKwkJZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3RodW1iKCZ3cC0+d19zY3JvbGxiYXJzW1NCQVJfUklHSFRdLAorCQkJCQkgICAgdmFsLCBzaXplLCBtYXgpOworCX0KKyAgICB9CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBwcmV2X2N1cndpbiA9IGN1cndpbjsKKyNlbmRpZgorICAgIC0taG9sZF9ndWlfZXZlbnRzOworfQorCisvKgorICogRW5hYmxlIG9yIGRpc2FibGUgYSBzY3JvbGxiYXIuCisgKiBDaGVjayBmb3Igc2Nyb2xsYmFycyBmb3IgdmVydGljYWxseSBzcGxpdCB3aW5kb3dzIHdoaWNoIGFyZSBub3QgZW5hYmxlZAorICogc29tZXRpbWVzLgorICovCisgICAgc3RhdGljIHZvaWQKK2d1aV9kb19zY3JvbGxiYXIod3AsIHdoaWNoLCBlbmFibGUpCisgICAgd2luX1QJKndwOworICAgIGludAkJd2hpY2g7CSAgICAvKiBTQkFSX0xFRlQgb3IgU0JBUl9SSUdIVCAqLworICAgIGludAkJZW5hYmxlOwkgICAgLyogVFJVRSB0byBlbmFibGUgc2Nyb2xsYmFyICovCit7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBpbnQJCW1pZGNvbCA9IGN1cndpbi0+d193aW5jb2wgKyBjdXJ3aW4tPndfd2lkdGggLyAyOworICAgIGludAkJaGFzX21pZGNvbCA9ICh3cC0+d193aW5jb2wgPD0gbWlkY29sCisJCQkJICAgICAmJiB3cC0+d193aW5jb2wgKyB3cC0+d193aWR0aCA+PSBtaWRjb2wpOworCisgICAgLyogT25seSBlbmFibGUgc2Nyb2xsYmFycyB0aGF0IGNvbnRhaW4gdGhlIG1pZGRsZSBjb2x1bW4gb2YgdGhlIGN1cnJlbnQKKyAgICAgKiB3aW5kb3cuICovCisgICAgaWYgKGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfUklHSFRdICE9IGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfTEVGVF0pCisgICAgeworCS8qIFNjcm9sbGJhcnMgb25seSBvbiBvbmUgc2lkZS4gIERvbid0IGVuYWJsZSBzY3JvbGxiYXJzIHRoYXQgZG9uJ3QKKwkgKiBjb250YWluIHRoZSBtaWRkbGUgY29sdW1uIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4gKi8KKwlpZiAoIWhhc19taWRjb2wpCisJICAgIGVuYWJsZSA9IEZBTFNFOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIFNjcm9sbGJhcnMgb24gYm90aCBzaWRlcy4gIERvbid0IGVuYWJsZSBzY3JvbGxiYXJzIHRoYXQgbmVpdGhlcgorCSAqIGNvbnRhaW4gdGhlIG1pZGRsZSBjb2x1bW4gb2YgdGhlIGN1cnJlbnQgd2luZG93IG5vciBhcmUgb24gdGhlIGZhcgorCSAqIHNpZGUuICovCisJaWYgKG1pZGNvbCA+IENvbHVtbnMgLyAyKQorCXsKKwkgICAgaWYgKHdoaWNoID09IFNCQVJfTEVGVCA/IHdwLT53X3dpbmNvbCAhPSAwIDogIWhhc19taWRjb2wpCisJCWVuYWJsZSA9IEZBTFNFOworCX0KKwllbHNlCisJeworCSAgICBpZiAod2hpY2ggPT0gU0JBUl9SSUdIVCA/IHdwLT53X3dpbmNvbCArIHdwLT53X3dpZHRoICE9IENvbHVtbnMKKwkJCQkJCQkJOiAhaGFzX21pZGNvbCkKKwkJZW5hYmxlID0gRkFMU0U7CisJfQorICAgIH0KKyNlbmRpZgorICAgIGd1aV9tY2hfZW5hYmxlX3Njcm9sbGJhcigmd3AtPndfc2Nyb2xsYmFyc1t3aGljaF0sIGVuYWJsZSk7Cit9CisKKy8qCisgKiBTY3JvbGwgYSB3aW5kb3cgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZXMgc2V0IGluIHRoZSBnbG9iYWxzIGN1cnJlbnRfc2Nyb2xsYmFyCisgKiBhbmQgc2Nyb2xsYmFyX3ZhbHVlLiAgUmV0dXJuIFRSVUUgaWYgdGhlIGN1cnNvciBpbiB0aGUgY3VycmVudCB3aW5kb3cgbW92ZWQKKyAqIG9yIEZBTFNFIG90aGVyd2lzZS4KKyAqLworICAgIGludAorZ3VpX2RvX3Njcm9sbCgpCit7CisgICAgd2luX1QJKndwLCAqc2F2ZV93cDsKKyAgICBpbnQJCWk7CisgICAgbG9uZwlubGluZXM7CisgICAgcG9zX1QJb2xkX2N1cnNvcjsKKyAgICBsaW5lbnJfVAlvbGRfdG9wbGluZTsKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBpbnQJCW9sZF90b3BmaWxsOworI2VuZGlmCisKKyAgICBmb3IgKHdwID0gZmlyc3R3aW4sIGkgPSAwOyBpIDwgY3VycmVudF9zY3JvbGxiYXI7IHdwID0gV19ORVhUKHdwKSwgaSsrKQorCWlmICh3cCA9PSBOVUxMKQorCSAgICBicmVhazsKKyAgICBpZiAod3AgPT0gTlVMTCkKKwkvKiBDb3VsZG4ndCBmaW5kIHdpbmRvdyAqLworCXJldHVybiBGQUxTRTsKKworICAgIC8qCisgICAgICogQ29tcHV0ZSBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsLiAgSWYgemVybywgbm90aGluZyB0byBkby4KKyAgICAgKi8KKyAgICBubGluZXMgPSAobG9uZylzY3JvbGxiYXJfdmFsdWUgKyAxIC0gKGxvbmcpd3AtPndfdG9wbGluZTsKKyAgICBpZiAobmxpbmVzID09IDApCisJcmV0dXJuIEZBTFNFOworCisgICAgc2F2ZV93cCA9IGN1cndpbjsKKyAgICBvbGRfdG9wbGluZSA9IHdwLT53X3RvcGxpbmU7CisjaWZkZWYgRkVBVF9ESUZGCisgICAgb2xkX3RvcGZpbGwgPSB3cC0+d190b3BmaWxsOworI2VuZGlmCisgICAgb2xkX2N1cnNvciA9IHdwLT53X2N1cnNvcjsKKyAgICBjdXJ3aW4gPSB3cDsKKyAgICBjdXJidWYgPSB3cC0+d19idWZmZXI7CisgICAgaWYgKG5saW5lcyA8IDApCisJc2Nyb2xsZG93bigtbmxpbmVzLCBndWkuZHJhZ2dlZF93cCA9PSBOVUxMKTsKKyAgICBlbHNlCisJc2Nyb2xsdXAobmxpbmVzLCBndWkuZHJhZ2dlZF93cCA9PSBOVUxMKTsKKyAgICAvKiBSZXNldCBkcmFnZ2VkX3dwIGFmdGVyIHVzaW5nIGl0LiAgImRyYWdnZWRfc2IiIHdpbGwgaGF2ZSBiZWVuIHJlc2V0IGZvcgorICAgICAqIHRoZSBtb3VzZS11cCBldmVudCBhbHJlYWR5LCBidXQgd2Ugc3RpbGwgd2FudCBpdCB0byBiZWhhdmUgbGlrZSB3aGVuCisgICAgICogZHJhZ2dpbmcuICBCdXQgbm90IHRoZSBuZXh0IGNsaWNrIGluIGFuIGFycm93LiAqLworICAgIGlmIChndWkuZHJhZ2dlZF9zYiA9PSBTQkFSX05PTkUpCisJZ3VpLmRyYWdnZWRfd3AgPSBOVUxMOworCisgICAgaWYgKG9sZF90b3BsaW5lICE9IHdwLT53X3RvcGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkgICAgfHwgb2xkX3RvcGZpbGwgIT0gd3AtPndfdG9wZmlsbAorI2VuZGlmCisJICAgICkKKyAgICB7CisJaWYgKHBfc28gIT0gMCkKKwl7CisJICAgIGN1cnNvcl9jb3JyZWN0KCk7CQkvKiBmaXggd2luZG93IGZvciAnc28nICovCisJICAgIHVwZGF0ZV90b3BsaW5lKCk7CQkvKiBhdm9pZCB1cC9kb3duIGp1bXAgKi8KKwl9CisJaWYgKG9sZF9jdXJzb3IubG51bSAhPSB3cC0+d19jdXJzb3IubG51bSkKKwkgICAgY29sYWR2YW5jZSh3cC0+d19jdXJzd2FudCk7CisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisJd3AtPndfc2NiaW5kX3BvcyA9IHdwLT53X3RvcGxpbmU7CisjZW5kaWYKKyAgICB9CisKKyAgICBjdXJ3aW4gPSBzYXZlX3dwOworICAgIGN1cmJ1ZiA9IHNhdmVfd3AtPndfYnVmZmVyOworCisgICAgLyoKKyAgICAgKiBEb24ndCBjYWxsIHVwZGF0ZVdpbmRvdygpIHdoZW4gbm90aGluZyBoYXMgY2hhbmdlZCAoaXQgd2lsbCBvdmVyd3JpdGUKKyAgICAgKiB0aGUgc3RhdHVzIGxpbmUhKS4KKyAgICAgKi8KKyAgICBpZiAob2xkX3RvcGxpbmUgIT0gd3AtPndfdG9wbGluZQorI2lmZGVmIEZFQVRfRElGRgorCSAgICB8fCBvbGRfdG9wZmlsbCAhPSB3cC0+d190b3BmaWxsCisjZW5kaWYKKwkgICAgKQorICAgIHsKKwlyZWRyYXdfd2luX2xhdGVyKHdwLCBWQUxJRCk7CisJdXBkYXRlV2luZG93KHdwKTsgICAvKiB1cGRhdGUgd2luZG93LCBzdGF0dXMgbGluZSwgYW5kIGNtZGxpbmUgKi8KKyAgICB9CisKKyAgICByZXR1cm4gKHdwID09IGN1cndpbiAmJiAhZXF1YWxwb3MoY3Vyd2luLT53X2N1cnNvciwgb2xkX2N1cnNvcikpOworfQorCisKKy8qCisgKiBIb3Jpem9udGFsIHNjcm9sbGJhciBzdHVmZjoKKyAqLworCisvKgorICogUmV0dXJuIGxlbmd0aCBvZiBsaW5lICJsbnVtIiBmb3IgaG9yaXpvbnRhbCBzY3JvbGxpbmcuCisgKi8KKyAgICBzdGF0aWMgY29sbnJfVAorc2Nyb2xsX2xpbmVfbGVuKGxudW0pCisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgY29sbnJfVAljb2w7CisgICAgaW50CQl3OworCisgICAgcCA9IG1sX2dldChsbnVtKTsKKyAgICBjb2wgPSAwOworICAgIGlmICgqcCAhPSBOVUwpCisJZm9yICg7OykKKwl7CisJICAgIHcgPSBjaGFydGFic2l6ZShwLCBjb2wpOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOworCSAgICBlbHNlCisjZW5kaWYKKwkJKytwOworCSAgICBpZiAoKnAgPT0gTlVMKQkJLyogZG9uJ3QgY291bnQgdGhlIGxhc3QgY2hhcmFjdGVyICovCisJCWJyZWFrOworCSAgICBjb2wgKz0gdzsKKwl9CisgICAgcmV0dXJuIGNvbDsKK30KKworLyogUmVtZW1iZXIgd2hpY2ggbGluZSBpcyBjdXJyZW50bHkgdGhlIGxvbmdlc3QsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0bworICogc2VhcmNoIGZvciBpdCB3aGVuIHNjcm9sbGluZyBob3Jpem9udGFsbHkuICovCitzdGF0aWMgbGluZW5yX1QgbG9uZ2VzdF9sbnVtID0gMDsKKworICAgIHN0YXRpYyB2b2lkCitndWlfdXBkYXRlX2hvcml6X3Njcm9sbGJhcihmb3JjZSkKKyAgICBpbnQJCWZvcmNlOworeworICAgIGxvbmcJdmFsdWUsIHNpemUsIG1heDsJLyogbmVlZCAzMiBiaXQgaW50cyBoZXJlICovCisKKyAgICBpZiAoIWd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfQk9UVE9NXSkKKwlyZXR1cm47CisKKyAgICBpZiAoIWZvcmNlICYmIGd1aS5kcmFnZ2VkX3NiID09IFNCQVJfQk9UVE9NKQorCXJldHVybjsKKworICAgIGlmICghZm9yY2UgJiYgY3Vyd2luLT53X3Bfd3JhcCAmJiBndWkucHJldl93cmFwKQorCXJldHVybjsKKworICAgIC8qCisgICAgICogSXQgaXMgcG9zc2libGUgZm9yIHRoZSBjdXJzb3IgdG8gYmUgaW52YWxpZCBpZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mCisgICAgICogc29tZXRoaW5nIChsaWtlIGNoYW5naW5nIGZpbGVzKS4gIElmIHNvLCBkb24ndCBkbyBhbnl0aGluZyBmb3Igbm93LgorICAgICAqLworICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKyAgICB7CisJZ3VpLmJvdHRvbV9zYmFyLnZhbHVlID0gLTE7CisJcmV0dXJuOworICAgIH0KKworICAgIHNpemUgPSBXX1dJRFRIKGN1cndpbik7CisgICAgaWYgKGN1cndpbi0+d19wX3dyYXApCisgICAgeworCXZhbHVlID0gMDsKKyNpZmRlZiBTQ1JPTExfUEFTVF9FTkQKKwltYXggPSAwOworI2Vsc2UKKwltYXggPSBXX1dJRFRIKGN1cndpbikgLSAxOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisJdmFsdWUgPSBjdXJ3aW4tPndfbGVmdGNvbDsKKworCS8qIENhbGN1bGF0ZSBtYXhpbXVtIGZvciBob3Jpem9udGFsIHNjcm9sbGJhci4gIENoZWNrIGZvciByZWFzb25hYmxlCisJICogbGluZSBudW1iZXJzLCB0b3BsaW5lIGFuZCBib3RsaW5lIGNhbiBiZSBpbnZhbGlkIHdoZW4gZGlzcGxheWluZyBpcworCSAqIHBvc3Rwb25lZC4gKi8KKwlpZiAodmltX3N0cmNocihwX2dvLCBHT19IT1JTQ1JPTEwpID09IE5VTEwKKwkJJiYgY3Vyd2luLT53X3RvcGxpbmUgPD0gY3Vyd2luLT53X2N1cnNvci5sbnVtCisJCSYmIGN1cndpbi0+d19ib3RsaW5lID4gY3Vyd2luLT53X2N1cnNvci5sbnVtCisJCSYmIGN1cndpbi0+d19ib3RsaW5lIDw9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ICsgMSkKKwl7CisJICAgIGxpbmVucl9UCWxudW07CisJICAgIGNvbG5yX1QJbjsKKworCSAgICAvKiBVc2UgbWF4aW11bSBvZiBhbGwgdmlzaWJsZSBsaW5lcy4gIFJlbWVtYmVyIHRoZSBsbnVtIG9mIHRoZQorCSAgICAgKiBsb25nZXN0IGxpbmUsIGNsb3N0ZXN0IHRvIHRoZSBjdXJzb3IgbGluZS4gIFVzZWQgd2hlbiBzY3JvbGxpbmcKKwkgICAgICogYmVsb3cuICovCisJICAgIG1heCA9IDA7CisJICAgIGZvciAobG51bSA9IGN1cndpbi0+d190b3BsaW5lOyBsbnVtIDwgY3Vyd2luLT53X2JvdGxpbmU7ICsrbG51bSkKKwkgICAgeworCQluID0gc2Nyb2xsX2xpbmVfbGVuKGxudW0pOworCQlpZiAobiA+IChjb2xucl9UKW1heCkKKwkJeworCQkgICAgbWF4ID0gbjsKKwkJICAgIGxvbmdlc3RfbG51bSA9IGxudW07CisJCX0KKwkJZWxzZSBpZiAobiA9PSAoY29sbnJfVCltYXgKKwkJCSYmIGFicygoaW50KShsbnVtIC0gY3Vyd2luLT53X2N1cnNvci5sbnVtKSkKKwkJCSAgIDwgYWJzKChpbnQpKGxvbmdlc3RfbG51bSAtIGN1cndpbi0+d19jdXJzb3IubG51bSkpKQorCQkgICAgbG9uZ2VzdF9sbnVtID0gbG51bTsKKwkgICAgfQorCX0KKwllbHNlCisJICAgIC8qIFVzZSBjdXJzb3IgbGluZSBvbmx5LiAqLworCSAgICBtYXggPSBzY3JvbGxfbGluZV9sZW4oY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJaWYgKHZpcnR1YWxfYWN0aXZlKCkpCisJeworCSAgICAvKiBNYXkgbW92ZSB0aGUgY3Vyc29yIGV2ZW4gZnVydGhlciB0byB0aGUgcmlnaHQuICovCisJICAgIGlmIChjdXJ3aW4tPndfdmlydGNvbCA+PSAoY29sbnJfVCltYXgpCisJCW1heCA9IGN1cndpbi0+d192aXJ0Y29sOworCX0KKyNlbmRpZgorCisjaWZuZGVmIFNDUk9MTF9QQVNUX0VORAorCW1heCArPSBXX1dJRFRIKGN1cndpbikgLSAxOworI2VuZGlmCisJLyogVGhlIGxpbmUgbnVtYmVyIGlzbid0IHNjcm9sbGVkLCB0aHVzIHRoZXJlIGlzIGxlc3Mgc3BhY2Ugd2hlbgorCSAqICdudW1iZXInIGlzIHNldCAoYWxzbyBmb3IgJ2ZvbGRjb2x1bW4nKS4gKi8KKwlzaXplIC09IGN1cndpbl9jb2xfb2ZmKCk7CisjaWZuZGVmIFNDUk9MTF9QQVNUX0VORAorCW1heCAtPSBjdXJ3aW5fY29sX29mZigpOworI2VuZGlmCisgICAgfQorCisjaWZuZGVmIFNDUk9MTF9QQVNUX0VORAorICAgIGlmICh2YWx1ZSA+IG1heCAtIHNpemUgKyAxKQorCXZhbHVlID0gbWF4IC0gc2l6ZSArIDE7CSAgICAvKiBsaW1pdCB0aGUgdmFsdWUgdG8gYWxsb3dhYmxlIHJhbmdlICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgaWYgKGN1cndpbi0+d19wX3JsKQorICAgIHsKKwl2YWx1ZSA9IG1heCArIDEgLSBzaXplIC0gdmFsdWU7CisJaWYgKHZhbHVlIDwgMCkKKwl7CisJICAgIHNpemUgKz0gdmFsdWU7CisJICAgIHZhbHVlID0gMDsKKwl9CisgICAgfQorI2VuZGlmCisgICAgaWYgKCFmb3JjZSAmJiB2YWx1ZSA9PSBndWkuYm90dG9tX3NiYXIudmFsdWUgJiYgc2l6ZSA9PSBndWkuYm90dG9tX3NiYXIuc2l6ZQorCQkJCQkJJiYgbWF4ID09IGd1aS5ib3R0b21fc2Jhci5tYXgpCisJcmV0dXJuOworCisgICAgZ3VpLmJvdHRvbV9zYmFyLnZhbHVlID0gdmFsdWU7CisgICAgZ3VpLmJvdHRvbV9zYmFyLnNpemUgPSBzaXplOworICAgIGd1aS5ib3R0b21fc2Jhci5tYXggPSBtYXg7CisgICAgZ3VpLnByZXZfd3JhcCA9IGN1cndpbi0+d19wX3dyYXA7CisKKyAgICBndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIoJmd1aS5ib3R0b21fc2JhciwgdmFsdWUsIHNpemUsIG1heCk7Cit9CisKKy8qCisgKiBEbyBhIGhvcml6b250YWwgc2Nyb2xsLiAgUmV0dXJuIFRSVUUgaWYgdGhlIGN1cnNvciBtb3ZlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICovCisgICAgaW50CitndWlfZG9faG9yaXpfc2Nyb2xsKCkKK3sKKyAgICAvKiBubyB3cmFwcGluZywgbm8gc2Nyb2xsaW5nICovCisgICAgaWYgKGN1cndpbi0+d19wX3dyYXApCisJcmV0dXJuIEZBTFNFOworCisgICAgaWYgKGN1cndpbi0+d19sZWZ0Y29sID09IHNjcm9sbGJhcl92YWx1ZSkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBjdXJ3aW4tPndfbGVmdGNvbCA9IHNjcm9sbGJhcl92YWx1ZTsKKworICAgIC8qIFdoZW4gdGhlIGxpbmUgb2YgdGhlIGN1cnNvciBpcyB0b28gc2hvcnQsIG1vdmUgdGhlIGN1cnNvciB0byB0aGUKKyAgICAgKiBsb25nZXN0IHZpc2libGUgbGluZS4gIERvIGEgc2FuaXR5IGNoZWNrIG9uICJsb25nZXN0X2xudW0iLCBqdXN0IGluCisgICAgICogY2FzZS4gKi8KKyAgICBpZiAodmltX3N0cmNocihwX2dvLCBHT19IT1JTQ1JPTEwpID09IE5VTEwKKwkgICAgJiYgbG9uZ2VzdF9sbnVtID49IGN1cndpbi0+d190b3BsaW5lCisJICAgICYmIGxvbmdlc3RfbG51bSA8IGN1cndpbi0+d19ib3RsaW5lCisJICAgICYmICF2aXJ0dWFsX2FjdGl2ZSgpKQorICAgIHsKKwlpZiAoc2Nyb2xsYmFyX3ZhbHVlID4gc2Nyb2xsX2xpbmVfbGVuKGN1cndpbi0+d19jdXJzb3IubG51bSkpCisJeworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsb25nZXN0X2xudW07CisJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIGxlZnRjb2xfY2hhbmdlZCgpOworfQorCisvKgorICogQ2hlY2sgdGhhdCBub25lIG9mIHRoZSBjb2xvcnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yCisgKi8KKyAgICB2b2lkCitndWlfY2hlY2tfY29sb3JzKCkKK3sKKyAgICBpZiAoZ3VpLm5vcm1fcGl4ZWwgPT0gZ3VpLmJhY2tfcGl4ZWwgfHwgZ3VpLm5vcm1fcGl4ZWwgPT0gSU5WQUxDT0xPUikKKyAgICB7CisJZ3VpX3NldF9iZ19jb2xvcigoY2hhcl91ICopIldoaXRlIik7CisJaWYgKGd1aS5ub3JtX3BpeGVsID09IGd1aS5iYWNrX3BpeGVsIHx8IGd1aS5ub3JtX3BpeGVsID09IElOVkFMQ09MT1IpCisJICAgIGd1aV9zZXRfZmdfY29sb3IoKGNoYXJfdSAqKSJCbGFjayIpOworICAgIH0KK30KKworICAgIHZvaWQKK2d1aV9zZXRfZmdfY29sb3IobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgZ3VpLm5vcm1fcGl4ZWwgPSBndWlfZ2V0X2NvbG9yKG5hbWUpOworICAgIGhsX3NldF9mZ19jb2xvcl9uYW1lKHZpbV9zdHJzYXZlKG5hbWUpKTsKK30KKworICAgIHZvaWQKK2d1aV9zZXRfYmdfY29sb3IobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgZ3VpLmJhY2tfcGl4ZWwgPSBndWlfZ2V0X2NvbG9yKG5hbWUpOworICAgIGhsX3NldF9iZ19jb2xvcl9uYW1lKHZpbV9zdHJzYXZlKG5hbWUpKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgY29sb3IgYnkgbmFtZS4KKyAqIFJldHVybnMgSU5WQUxDT0xPUiBhbmQgZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGZhaWxlZC4KKyAqLworICAgIGd1aWNvbG9yX1QKK2d1aV9nZXRfY29sb3IobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgZ3VpY29sb3JfVAl0OworCisgICAgaWYgKCpuYW1lID09IE5VTCkKKwlyZXR1cm4gSU5WQUxDT0xPUjsKKyAgICB0ID0gZ3VpX21jaF9nZXRfY29sb3IobmFtZSk7CisgICAgaWYgKHQgPT0gSU5WQUxDT0xPUgorI2lmIGRlZmluZWQoRkVBVF9HVUlfWDExKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykKKwkgICAgJiYgZ3VpLmluX3VzZQorI2VuZGlmCisJICAgICkKKwlFTVNHMihfKCJFMjU0OiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgJXMiKSwgbmFtZSk7CisgICAgcmV0dXJuIHQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGdyZXkgdmFsdWUgb2YgYSBjb2xvciAocmFuZ2UgMC0yNTUpLgorICovCisgICAgaW50CitndWlfZ2V0X2xpZ2h0bmVzcyhwaXhlbCkKKyAgICBndWljb2xvcl9UCXBpeGVsOworeworICAgIGxvbmdfdQlyZ2IgPSBndWlfbWNoX2dldF9yZ2IocGl4ZWwpOworCisgICAgcmV0dXJuICggICgoKHJnYiA+PiAxNikgJiAweGZmKSAqIDI5OSkKKwkgICAgKyAoKChyZ2IgPj4gOCkgICYgMHhmZikgKiA1ODcpCisJICAgICsgICgocmdiCSAgICAmIDB4ZmYpICogMTE0KSkgLyAxMDAwOworfQorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9YMTEpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorZ3VpX25ld19zY3JvbGxiYXJfY29sb3JzKCkKK3sKKyAgICB3aW5fVAkqd3A7CisKKyAgICAvKiBOb3RoaW5nIHRvIGRvIGlmIEdVSSBoYXNuJ3Qgc3RhcnRlZCB5ZXQuICovCisgICAgaWYgKCFndWkuaW5fdXNlKQorCXJldHVybjsKKworICAgIEZPUl9BTExfV0lORE9XUyh3cCkKKyAgICB7CisJZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX2NvbG9ycygmKHdwLT53X3Njcm9sbGJhcnNbU0JBUl9MRUZUXSkpOworCWd1aV9tY2hfc2V0X3Njcm9sbGJhcl9jb2xvcnMoJih3cC0+d19zY3JvbGxiYXJzW1NCQVJfUklHSFRdKSk7CisgICAgfQorICAgIGd1aV9tY2hfc2V0X3Njcm9sbGJhcl9jb2xvcnMoJmd1aS5ib3R0b21fc2Jhcik7Cit9CisjZW5kaWYKKworLyoKKyAqIENhbGwgdGhpcyB3aGVuIGZvY3VzIGhhcyBjaGFuZ2VkLgorICovCisgICAgdm9pZAorZ3VpX2ZvY3VzX2NoYW5nZShpbl9mb2N1cykKKyAgICBpbnQJCWluX2ZvY3VzOworeworLyoKKyAqIFNraXAgdGhpcyBjb2RlIHRvIGF2b2lkIGRyYXdpbmcgdGhlIGN1cnNvciB3aGVuIGRlYnVnZ2luZyBhbmQgc3dpdGNoaW5nCisgKiBiZXR3ZWVuIHRoZSBkZWJ1Z2dlciB3aW5kb3cgYW5kIGd2aW0uCisgKi8KKyNpZiAxCisgICAgZ3VpLmluX2ZvY3VzID0gaW5fZm9jdXM7CisgICAgb3V0X2ZsdXNoKCk7CQkvKiBtYWtlIHN1cmUgb3V0cHV0IGhhcyBiZWVuIHdyaXR0ZW4gKi8KKyAgICBndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisKKyMgaWZkZWYgRkVBVF9YSU0KKyAgICB4aW1fc2V0X2ZvY3VzKGluX2ZvY3VzKTsKKyMgZW5kaWYKKworICAgIHVpX2ZvY3VzX2NoYW5nZShpbl9mb2N1cyk7CisjZW5kaWYKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlZCAoYnV0IG5vdCB3aGVuIGRyYWdnaW5nKS4KKyAqLworICAgIHZvaWQKK2d1aV9tb3VzZV9tb3ZlZCh4LCB5KQorICAgIGludAkJeDsKKyAgICBpbnQJCXk7Cit7CisgICAgd2luX1QJKndwOworICAgIGNoYXJfdQlzdFs2XTsKKworI2lmZGVmIEZFQVRfTU9VU0VTSEFQRQorICAgIC8qIEdldCB3aW5kb3cgcG9pbnRlciwgYW5kIHVwZGF0ZSBtb3VzZSBzaGFwZSBhcyB3ZWxsLiAqLworICAgIHdwID0geHkyd2luKHgsIHkpOworI2VuZGlmCisKKyAgICAvKiBPbmx5IGhhbmRsZSB0aGlzIHdoZW4gJ21vdXNlZm9jdXMnIHNldCBhbmQgLi4uICovCisgICAgaWYgKHBfbW91c2VmCisJICAgICYmICFob2xkX2d1aV9ldmVudHMJCS8qIG5vdCBob2xkaW5nIGV2ZW50cyAqLworCSAgICAmJiAoU3RhdGUgJiAoTk9STUFMfElOU0VSVCkpLyogTm9ybWFsL1Zpc3VhbC9JbnNlcnQgbW9kZSAqLworCSAgICAmJiBTdGF0ZSAhPSBISVRSRVRVUk4JLyogYnV0IG5vdCBoaXQtcmV0dXJuIHByb21wdCAqLworCSAgICAmJiBtc2dfc2Nyb2xsZWQgPT0gMAkvKiBubyBzY3JvbGxlZCBtZXNzYWdlICovCisJICAgICYmICFuZWVkX21vdXNlX2NvcnJlY3QJLyogbm90IG1vdmluZyB0aGUgcG9pbnRlciAqLworCSAgICAmJiBndWkuaW5fZm9jdXMpCQkvKiBndmltIGluIGZvY3VzICovCisgICAgeworCS8qIERvbid0IG1vdmUgdGhlIG1vdXNlIHdoZW4gaXQncyBsZWZ0IG9yIHJpZ2h0IG9mIHRoZSBWaW0gd2luZG93ICovCisJaWYgKHggPCAwIHx8IHggPiBDb2x1bW5zICogZ3VpLmNoYXJfd2lkdGgpCisJICAgIHJldHVybjsKKyNpZm5kZWYgRkVBVF9NT1VTRVNIQVBFCisJd3AgPSB4eTJ3aW4oeCwgeSk7CisjZW5kaWYKKwlpZiAod3AgPT0gY3Vyd2luIHx8IHdwID09IE5VTEwpCisJICAgIHJldHVybjsJLyogc3RpbGwgaW4gdGhlIHNhbWUgb2xkIHdpbmRvdywgb3Igbm9uZSBhdCBhbGwgKi8KKworCS8qCisJICogZm9ybWF0IGEgbW91c2UgY2xpY2sgb24gc3RhdHVzIGxpbmUgaW5wdXQKKwkgKiBhbGEgZ3VpX3NlbmRfbW91c2VfZXZlbnQoMCwgeCwgeSwgMCwgMCk7CisJICogVHJpY2s6IFVzZSBhIGNvbHVtbiBvZiAtMSwgc28gdGhhdCBjaGVja190ZXJtY29kZSB3aWxsIGdlbmVyYXRlIGEKKwkgKiBLX0xFRlRNT1VTRV9OTSBrZXkgY29kZS4KKwkgKi8KKwlpZiAoZmluaXNoX29wKQorCXsKKwkgICAgLyogYWJvcnQgdGhlIGN1cnJlbnQgb3BlcmF0b3IgZmlyc3QgKi8KKwkgICAgc3RbMF0gPSBFU0M7CisJICAgIGFkZF90b19pbnB1dF9idWYoc3QsIDEpOworCX0KKwlzdFswXSA9IENTSTsKKwlzdFsxXSA9IEtTX01PVVNFOworCXN0WzJdID0gS0VfRklMTEVSOworCXN0WzNdID0gKGNoYXJfdSlNT1VTRV9MRUZUOworCWZpbGxfbW91c2VfY29vcmQoc3QgKyA0LAorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJCVdfV0lOQ09MKHdwKSwKKyNlbHNlCisJCS0xLAorI2VuZGlmCisJCXdwLT53X2hlaWdodCArIFdfV0lOUk9XKHdwKSk7CisKKwlhZGRfdG9faW5wdXRfYnVmKHN0LCA4KTsKKwlzdFszXSA9IChjaGFyX3UpTU9VU0VfUkVMRUFTRTsKKwlhZGRfdG9faW5wdXRfYnVmKHN0LCA4KTsKKworI2lmZGVmIEZFQVRfR1VJX0dUSworCS8qIE5lZWQgdG8gd2FrZSB1cCB0aGUgbWFpbiBsb29wICovCisJaWYgKGd0a19tYWluX2xldmVsKCkgPiAwKQorCSAgICBndGtfbWFpbl9xdWl0KCk7CisjZW5kaWYKKyAgICB9Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBtb3VzZSBzaG91bGQgYmUgbW92ZWQgdG8gd2luZG93IHdpdGggZm9jdXMuCisgKi8KKyAgICB2b2lkCitndWlfbW91c2VfY29ycmVjdCgpCit7CisgICAgaW50CQl4LCB5OworICAgIHdpbl9UCSp3cCA9IE5VTEw7CisKKyAgICBuZWVkX21vdXNlX2NvcnJlY3QgPSBGQUxTRTsKKyAgICBpZiAoZ3VpLmluX3VzZSAmJiBwX21vdXNlZikKKyAgICB7CisJeCA9IGd1aV9tY2hfZ2V0X21vdXNlX3goKTsKKwkvKiBEb24ndCBtb3ZlIHRoZSBtb3VzZSB3aGVuIGl0J3MgbGVmdCBvciByaWdodCBvZiB0aGUgVmltIHdpbmRvdyAqLworCWlmICh4IDwgMCB8fCB4ID4gQ29sdW1ucyAqIGd1aS5jaGFyX3dpZHRoKQorCSAgICByZXR1cm47CisJeSA9IGd1aV9tY2hfZ2V0X21vdXNlX3koKTsKKwlpZiAoeSA+PSAwKQorCSAgICB3cCA9IHh5Mndpbih4LCB5KTsKKwlpZiAod3AgIT0gY3Vyd2luICYmIHdwICE9IE5VTEwpCS8qIElmIGluIG90aGVyIHRoYW4gY3VycmVudCB3aW5kb3cgKi8KKwl7CisJICAgIHZhbGlkYXRlX2NsaW5lX3JvdygpOworCSAgICBndWlfbWNoX3NldG1vdXNlKChpbnQpV19FTkRDT0woY3Vyd2luKSAqIGd1aS5jaGFyX3dpZHRoIC0gMywKKwkJCSAoV19XSU5ST1coY3Vyd2luKSArIGN1cndpbi0+d193cm93KSAqIGd1aS5jaGFyX2hlaWdodAorCQkJCQkJICAgICArIChndWkuY2hhcl9oZWlnaHQpIC8gMik7CisJfQorICAgIH0KK30KKworLyoKKyAqIEZpbmQgd2luZG93IHdoZXJlIHRoZSBtb3VzZSBwb2ludGVyICJ5IiBjb29yZGluYXRlIGlzIGluLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgd2luX1QgKgoreHkyd2luKHgsIHkpCisgICAgaW50CQl4OworICAgIGludAkJeTsKK3sKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCWNvbDsKKyAgICB3aW5fVAkqd3A7CisKKyAgICByb3cgPSBZXzJfUk9XKHkpOworICAgIGNvbCA9IFhfMl9DT0woeCk7CisgICAgaWYgKHJvdyA8IDAgfHwgY29sIDwgMCkJCS8qIGJlZm9yZSBmaXJzdCB3aW5kb3cgKi8KKwlyZXR1cm4gTlVMTDsKKyAgICB3cCA9IG1vdXNlX2ZpbmRfd2luKCZyb3csICZjb2wpOworIyBpZmRlZiBGRUFUX01PVVNFU0hBUEUKKyAgICBpZiAoU3RhdGUgPT0gSElUUkVUVVJOIHx8IFN0YXRlID09IEFTS01PUkUpCisgICAgeworCWlmIChZXzJfUk9XKHkpID49IG1zZ19yb3cpCisJICAgIHVwZGF0ZV9tb3VzZXNoYXBlKFNIQVBFX0lEWF9NT1JFTCk7CisJZWxzZQorCSAgICB1cGRhdGVfbW91c2VzaGFwZShTSEFQRV9JRFhfTU9SRSk7CisgICAgfQorICAgIGVsc2UgaWYgKHJvdyA+IHdwLT53X2hlaWdodCkJLyogYmVsb3cgc3RhdHVzIGxpbmUgKi8KKwl1cGRhdGVfbW91c2VzaGFwZShTSEFQRV9JRFhfQ0xJTkUpOworIyAgaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBlbHNlIGlmICghKFN0YXRlICYgQ01ETElORSkgJiYgV19WU0VQX1dJRFRIKHdwKSA+IDAgJiYgY29sID09IHdwLT53X3dpZHRoCisJICAgICYmIChyb3cgIT0gd3AtPndfaGVpZ2h0IHx8ICFzdGxfY29ubmVjdGVkKHdwKSkpCisJdXBkYXRlX21vdXNlc2hhcGUoU0hBUEVfSURYX1ZTRVApOworIyAgZW5kaWYKKyAgICBlbHNlIGlmICghKFN0YXRlICYgQ01ETElORSkgJiYgV19TVEFUVVNfSEVJR0hUKHdwKSA+IDAKKwkJCQkJCSAgICAgICAmJiByb3cgPT0gd3AtPndfaGVpZ2h0KQorCXVwZGF0ZV9tb3VzZXNoYXBlKFNIQVBFX0lEWF9TVEFUVVMpOworICAgIGVsc2UKKwl1cGRhdGVfbW91c2VzaGFwZSgtMik7CisjIGVuZGlmCisgICAgcmV0dXJuIHdwOworI2Vsc2UKKyAgICByZXR1cm4gZmlyc3R3aW47CisjZW5kaWYKK30KKworLyoKKyAqICI6Z3VpIiBhbmQgIjpndmltIjogQ2hhbmdlIGZyb20gdGhlIHRlcm1pbmFsIHZlcnNpb24gdG8gdGhlIEdVSSB2ZXJzaW9uLgorICogRmlsZSBuYW1lcyBtYXkgYmUgZ2l2ZW4gdG8gcmVkZWZpbmUgdGhlIGFyZ3MgbGlzdC4KKyAqLworICAgIHZvaWQKK2V4X2d1aShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGNoYXJfdQkqYXJnID0gZWFwLT5hcmc7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciAiLWYiIGFyZ3VtZW50OiBmb3JlZ3JvdW5kLCBkb24ndCBmb3JrLgorICAgICAqIEFsc28gZG9uJ3QgZm9yayB3aGVuIHN0YXJ0ZWQgd2l0aCAiZ3ZpbSAtZiIuCisgICAgICogRG8gZm9yayB3aGVuIHVzaW5nICJndWkgLWIiLgorICAgICAqLworICAgIGlmIChhcmdbMF0gPT0gJy0nCisJICAgICYmIChhcmdbMV0gPT0gJ2YnIHx8IGFyZ1sxXSA9PSAnYicpCisJICAgICYmIChhcmdbMl0gPT0gTlVMIHx8IHZpbV9pc3doaXRlKGFyZ1syXSkpKQorICAgIHsKKwlndWkuZG9mb3JrID0gKGFyZ1sxXSA9PSAnYicpOworCWVhcC0+YXJnID0gc2tpcHdoaXRlKGVhcC0+YXJnICsgMik7CisgICAgfQorICAgIGlmICghZ3VpLmluX3VzZSkKKyAgICB7CisJLyogQ2xlYXIgdGhlIGNvbW1hbmQuICBOZWVkZWQgZm9yIHdoZW4gZm9ya2luZytleGl0aW5nLCB0byBhdm9pZCBwYXJ0CisJICogb2YgdGhlIGFyZ3VtZW50IGVuZGluZyB1cCBhZnRlciB0aGUgc2hlbGwgcHJvbXB0LiAqLworCW1zZ19jbHJfZW9zX2ZvcmNlKCk7CisJZ3VpX3N0YXJ0KCk7CisgICAgfQorICAgIGlmICghZW5kc19leGNtZCgqZWFwLT5hcmcpKQorCWV4X25leHQoZWFwKTsKK30KKworI2lmICgoZGVmaW5lZChGRUFUX0dVSV9YMTEpIHx8IGRlZmluZWQoRkVBVF9HVUlfR1RLKSB8fCBkZWZpbmVkKEZFQVRfR1VJX1czMikgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKSkgJiYgZGVmaW5lZChGRUFUX1RPT0xCQVIpKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFRoaXMgaXMgc2hhcmVkIGJldHdlZW4gQXRoZW5hLCBNb3RpZiBhbmQgR1RLLgorICovCitzdGF0aWMgY2hhcl91CSpnZnBfYnVmZmVyOworCitzdGF0aWMgdm9pZCBnZnBfc2V0bmFtZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBkb19pbl9ydW50aW1lcGF0aCgpLgorICovCisgICAgc3RhdGljIHZvaWQKK2dmcF9zZXRuYW1lKGZuYW1lKQorICAgIGNoYXJfdQkqZm5hbWU7Cit7CisgICAgaWYgKFNUUkxFTihmbmFtZSkgPj0gTUFYUEFUSEwpCisJKmdmcF9idWZmZXIgPSBOVUw7CisgICAgZWxzZQorCVNUUkNQWShnZnBfYnVmZmVyLCBmbmFtZSk7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBwYXRoIG9mIGJpdG1hcCAibmFtZSIgd2l0aCBleHRlbnNpb24gImV4dCIgaW4gJ3J1bnRpbWVwYXRoJy4KKyAqIFJldHVybiBGQUlMIGZvciBmYWlsdXJlIGFuZCBPSyBpZiBidWZmZXJbTUFYUEFUSExdIGNvbnRhaW5zIHRoZSByZXN1bHQuCisgKi8KKyAgICBpbnQKK2d1aV9maW5kX2JpdG1hcChuYW1lLCBidWZmZXIsIGV4dCkKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgY2hhcl91CSpidWZmZXI7CisgICAgY2hhcgkqZXh0OworeworICAgIGlmIChTVFJMRU4obmFtZSkgPiBNQVhQQVRITCAtIDE0KQorCXJldHVybiBGQUlMOworICAgIHNwcmludGYoKGNoYXIgKilidWZmZXIsICJiaXRtYXBzLyVzLiVzIiwgbmFtZSwgZXh0KTsKKyAgICBnZnBfYnVmZmVyID0gYnVmZmVyOworICAgIGlmIChkb19pbl9ydW50aW1lcGF0aChidWZmZXIsIEZBTFNFLCBnZnBfc2V0bmFtZSkgPT0gRkFJTCB8fCAqYnVmZmVyID09IE5VTCkKKwlyZXR1cm4gRkFJTDsKKyAgICByZXR1cm4gT0s7Cit9CisKKyMgaWYgIWRlZmluZWQoSEFWRV9HVEsyKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEdpdmVuIHRoZSBuYW1lIG9mIHRoZSAiaWNvbj0iIGFyZ3VtZW50LCB0cnkgZmluZGluZyB0aGUgYml0bWFwIGZpbGUgZm9yIHRoZQorICogaWNvbi4gIElmIGl0IGlzIGFuIGFic29sdXRlIHBhdGggbmFtZSwgdXNlIGl0IGFzIGl0IGlzLiAgT3RoZXJ3aXNlIGFwcGVuZAorICogImV4dCIgYW5kIHNlYXJjaCBmb3IgaXQgaW4gJ3J1bnRpbWVwYXRoJy4KKyAqIFRoZSByZXN1bHQgaXMgcHV0IGluICJidWZmZXJbTUFYUEFUSExdIi4gIElmIHNvbWV0aGluZyBmYWlscyAiYnVmZmVyIgorICogY29udGFpbnMgIm5hbWUiLgorICovCisgICAgdm9pZAorZ3VpX2ZpbmRfaWNvbmZpbGUobmFtZSwgYnVmZmVyLCBleHQpCisgICAgY2hhcl91CSpuYW1lOworICAgIGNoYXJfdQkqYnVmZmVyOworICAgIGNoYXIJKmV4dDsKK3sKKyAgICBjaGFyX3UJYnVmW01BWFBBVEhMICsgMV07CisKKyAgICBleHBhbmRfZW52KG5hbWUsIGJ1ZmZlciwgTUFYUEFUSEwpOworICAgIGlmICghbWNoX2lzRnVsbE5hbWUoYnVmZmVyKSAmJiBndWlfZmluZF9iaXRtYXAoYnVmZmVyLCBidWYsIGV4dCkgPT0gT0spCisJU1RSQ1BZKGJ1ZmZlciwgYnVmKTsKK30KKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfWDExKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2Rpc3BsYXlfZXJyb3JzKCkKK3sKKyAgICBjaGFyX3UJKnA7CisKKyAgICBpZiAoaXNhdHR5KDIpKQorCWZmbHVzaChzdGRlcnIpOworICAgIGVsc2UgaWYgKGVycm9yX2dhLmdhX2RhdGEgIT0gTlVMTCkKKyAgICB7CisJLyogYXZvaWQgcHV0dGluZyB1cCBhIG1lc3NhZ2UgYm94IHdpdGggYmxhbmtzIG9ubHkgKi8KKwlmb3IgKHAgPSAoY2hhcl91ICopZXJyb3JfZ2EuZ2FfZGF0YTsgKnAgIT0gTlVMOyArK3ApCisJICAgIGlmICghaXNzcGFjZSgqcCkpCisJICAgIHsKKwkJLyogVHJ1bmNhdGUgYSB2ZXJ5IGxvbmcgbWVzc2FnZSwgaXQgd2lsbCBnbyBvZmYtc2NyZWVuLiAqLworCQlpZiAoU1RSTEVOKHApID4gMjAwMCkKKwkJICAgIFNUUkNQWShwICsgMjAwMCAtIDE0LCAiLi4uKHRydW5jYXRlZCkiKTsKKwkJKHZvaWQpZG9fZGlhbG9nKFZJTV9FUlJPUiwgKGNoYXJfdSAqKV8oIkVycm9yIiksCisJCQkJCSAgICAgIHAsIChjaGFyX3UgKilfKCImT2siKSwgMSwgTlVMTCk7CisJCWJyZWFrOworCSAgICB9CisJZ2FfY2xlYXIoJmVycm9yX2dhKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTk9fQ09OU09MRV9JTlBVVCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBzdGlsbCBzdGFydGluZyB1cCBhbmQgdGhlcmUgaXMgbm8gcGxhY2UgdG8gZW50ZXIgdGV4dC4KKyAqIEZvciBHVEsgYW5kIFgxMSB3ZSBjaGVjayBpZiBzdGRlcnIgaXMgbm90IGEgdHR5LCB3aGljaCBtZWFucyB3ZSB3ZXJlCisgKiAocHJvYmFibHkpIHN0YXJ0ZWQgZnJvbSB0aGUgZGVza3RvcC4gIEFsc28gY2hlY2sgc3RkaW4sICJ2aW0gPiYgZmlsZSIgZG9lcworICogYWxsb3cgdHlwaW5nIG9uIHN0ZGluLgorICovCisgICAgaW50Citub19jb25zb2xlX2lucHV0KCkKK3sKKyAgICByZXR1cm4gKCghZ3VpLmluX3VzZSB8fCBndWkuc3RhcnRpbmcpCisjIGlmbmRlZiBOT19DT05TT0xFCisJICAgICYmICFpc2F0dHkoMCkgJiYgIWlzYXR0eSgyKQorIyBlbmRpZgorCSAgICApOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0dUSykgfHwgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgXAorCXx8IGRlZmluZWQoTVNXSU5fRklORF9SRVBMQUNFKSB8fCBkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKSBcCisJfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBVcGRhdGUgdGhlIGN1cnJlbnQgd2luZG93IGFuZCB0aGUgc2NyZWVuLgorICovCisgICAgdm9pZAorZ3VpX3VwZGF0ZV9zY3JlZW4oKQoreworICAgIHVwZGF0ZV90b3BsaW5lKCk7CisgICAgdmFsaWRhdGVfY3Vyc29yKCk7CisgICAgdXBkYXRlX3NjcmVlbigwKTsJLyogbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSBzY3JlZW4gKi8KKyAgICBzZXRjdXJzb3IoKTsKKyAgICBvdXRfZmx1c2goKTsJCS8qIG1ha2Ugc3VyZSBvdXRwdXQgaGFzIGJlZW4gd3JpdHRlbiAqLworICAgIGd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKyAgICBndWlfbWNoX2ZsdXNoKCk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9HVUlfR1RLKSB8fCBkZWZpbmVkKEZFQVRfR1VJX01PVElGKSBcCisJfHwgZGVmaW5lZChNU1dJTl9GSU5EX1JFUExBQ0UpIHx8IGRlZmluZWQoUFJPVE8pCitzdGF0aWMgdm9pZCBjb25jYXRfZXNjIF9fQVJHUygoZ2FycmF5X1QgKmdhcCwgY2hhcl91ICp0ZXh0LCBpbnQgd2hhdCkpOworCisvKgorICogR2V0IHRoZSB0ZXh0IHRvIHVzZSBpbiBhIGZpbmQvcmVwbGFjZSBkaWFsb2cuICBVc2VzIHRoZSBsYXN0IHNlYXJjaCBwYXR0ZXJuCisgKiBpZiB0aGUgYXJndW1lbnQgaXMgZW1wdHkuCisgKiBSZXR1cm5zIGFuIGFsbG9jYXRlZCBzdHJpbmcuCisgKi8KKyAgICBjaGFyX3UgKgorZ2V0X2ZpbmRfZGlhbG9nX3RleHQoYXJnLCB3d29yZHAsIG1jYXNlcCkKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBpbnQJCSp3d29yZHA7CS8qIHJldHVybjogVFJVRSBpZiBcPCBcPiBmb3VuZCAqLworICAgIGludAkJKm1jYXNlcDsJLyogcmV0dXJuOiBUUlVFIGlmIFxDIGZvdW5kICovCit7CisgICAgY2hhcl91CSp0ZXh0OworCisgICAgaWYgKCphcmcgPT0gTlVMKQorCXRleHQgPSBsYXN0X3NlYXJjaF9wYXQoKTsKKyAgICBlbHNlCisJdGV4dCA9IGFyZzsKKyAgICBpZiAodGV4dCAhPSBOVUxMKQorICAgIHsKKwl0ZXh0ID0gdmltX3N0cnNhdmUodGV4dCk7CisJaWYgKHRleHQgIT0gTlVMTCkKKwl7CisJICAgIGludCBsZW4gPSBTVFJMRU4odGV4dCk7CisJICAgIGludCBpOworCisJICAgIC8qIFJlbW92ZSAiXFYiICovCisJICAgIGlmIChsZW4gPj0gMiAmJiBTVFJOQ01QKHRleHQsICJcXFYiLCAyKSA9PSAwKQorCSAgICB7CisJCW1jaF9tZW1tb3ZlKHRleHQsIHRleHQgKyAyLCAoc2l6ZV90KShsZW4gLSAxKSk7CisJCWxlbiAtPSAyOworCSAgICB9CisKKwkgICAgLyogUmVjb2duaXplICJcYyIgYW5kICJcQyIgYW5kIHJlbW92ZS4gKi8KKwkgICAgaWYgKGxlbiA+PSAyICYmICp0ZXh0ID09ICdcXCcgJiYgKHRleHRbMV0gPT0gJ2MnIHx8IHRleHRbMV0gPT0gJ0MnKSkKKwkgICAgeworCQkqbWNhc2VwID0gKHRleHRbMV0gPT0gJ0MnKTsKKwkJbWNoX21lbW1vdmUodGV4dCwgdGV4dCArIDIsIChzaXplX3QpKGxlbiAtIDEpKTsKKwkJbGVuIC09IDI7CisJICAgIH0KKworCSAgICAvKiBSZWNvZ25pemUgIlw8dGV4dFw+IiBhbmQgcmVtb3ZlLiAqLworCSAgICBpZiAobGVuID49IDQKKwkJICAgICYmIFNUUk5DTVAodGV4dCwgIlxcPCIsIDIpID09IDAKKwkJICAgICYmIFNUUk5DTVAodGV4dCArIGxlbiAtIDIsICJcXD4iLCAyKSA9PSAwKQorCSAgICB7CisJCSp3d29yZHAgPSBUUlVFOworCQltY2hfbWVtbW92ZSh0ZXh0LCB0ZXh0ICsgMiwgKHNpemVfdCkobGVuIC0gNCkpOworCQl0ZXh0W2xlbiAtIDRdID0gTlVMOworCSAgICB9CisKKwkgICAgLyogUmVjb2duaXplICJcLyIgb3IgIlw/IiBhbmQgcmVtb3ZlLiAqLworCSAgICBmb3IgKGkgPSAwOyBpICsgMSA8IGxlbjsgKytpKQorCQlpZiAodGV4dFtpXSA9PSAnXFwnICYmICh0ZXh0W2kgKyAxXSA9PSAnLycKKwkJCQkJCSAgICAgICB8fCB0ZXh0W2kgKyAxXSA9PSAnPycpKQorCQl7CisJCSAgICBtY2hfbWVtbW92ZSh0ZXh0ICsgaSwgdGV4dCArIGkgKyAxLCAoc2l6ZV90KShsZW4gLSBpKSk7CisJCSAgICAtLWxlbjsKKwkJfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHRleHQ7Cit9CisKKy8qCisgKiBDb25jYXRlbmF0ZSAidGV4dCIgdG8gZ3JvdyBhcnJheSAiZ2FwIiwgZXNjYXBpbmcgIndoYXQiIHdpdGggYSBiYWNrc2xhc2guCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY29uY2F0X2VzYyhnYXAsIHRleHQsIHdoYXQpCisgICAgZ2FycmF5X1QJKmdhcDsKKyAgICBjaGFyX3UJKnRleHQ7CisgICAgaW50CQl3aGF0OworeworICAgIHdoaWxlICgqdGV4dCAhPSBOVUwpCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwlpbnQgbCA9ICgqbWJfcHRyMmxlbl9jaGVjaykodGV4dCk7CisJaWYgKGwgPiAxKQorCXsKKwkgICAgd2hpbGUgKC0tbCA+PSAwKQorCQlnYV9hcHBlbmQoZ2FwLCAqdGV4dCsrKTsKKwkgICAgY29udGludWU7CisJfQorI2VuZGlmCisJaWYgKCp0ZXh0ID09IHdoYXQpCisJICAgIGdhX2FwcGVuZChnYXAsICdcXCcpOworCWdhX2FwcGVuZChnYXAsICp0ZXh0KTsKKwkrK3RleHQ7CisgICAgfQorfQorCisvKgorICogSGFuZGxlIHRoZSBwcmVzcyBvZiBhIGJ1dHRvbiBpbiB0aGUgZmluZC1yZXBsYWNlIGRpYWxvZy4KKyAqIFJldHVybiBUUlVFIHdoZW4gc29tZXRoaW5nIHdhcyBhZGRlZCB0byB0aGUgaW5wdXQgYnVmZmVyLgorICovCisgICAgaW50CitndWlfZG9fZmluZHJlcGwoZmxhZ3MsIGZpbmRfdGV4dCwgcmVwbF90ZXh0LCBkb3duKQorICAgIGludAkJZmxhZ3M7CQkvKiBvbmUgb2YgRlJEX1JFUExBQ0UsIEZSRF9GSU5ETkVYVCwgZXRjLiAqLworICAgIGNoYXJfdQkqZmluZF90ZXh0OworICAgIGNoYXJfdQkqcmVwbF90ZXh0OworICAgIGludAkJZG93bjsJCS8qIFNlYXJjaCBkb3dud2FyZHMuICovCit7CisgICAgZ2FycmF5X1QJZ2E7CisgICAgaW50CQlpOworICAgIGludAkJdHlwZSA9IChmbGFncyAmIEZSRF9UWVBFX01BU0spOworICAgIGNoYXJfdQkqcDsKKworICAgIGdhX2luaXQyKCZnYSwgMSwgMTAwKTsKKworICAgIGlmICh0eXBlID09IEZSRF9SRVBMQUNFKQorICAgIHsKKwkvKiBEbyB0aGUgcmVwbGFjZW1lbnQgd2hlbiB0aGUgdGV4dCB1bmRlciB0aGUgY3Vyc29yIG1hdGNoZXMuICovCisJaSA9IFNUUkxFTihmaW5kX3RleHQpOworCXAgPSBtbF9nZXRfY3Vyc29yKCk7CisJaWYgKCgoZmxhZ3MgJiBGUkRfTUFUQ0hfQ0FTRSkKKwkJICAgID8gU1RSTkNNUChwLCBmaW5kX3RleHQsIGkpID09IDAKKwkJICAgIDogU1RSTklDTVAocCwgZmluZF90ZXh0LCBpKSA9PSAwKQorCQkmJiB1X3NhdmVfY3Vyc29yKCkgPT0gT0spCisJeworCSAgICAvKiBBIGJ1dHRvbiB3YXMgcHJlc3NlZCB0aHVzIHVuZG8gc2hvdWxkIGJlIHN5bmNlZC4gKi8KKwkgICAgaWYgKG5vX3Vfc3luYyA9PSAwKQorCQl1X3N5bmMoKTsKKworCSAgICBkZWxfYnl0ZXMoKGxvbmcpaSwgRkFMU0UpOworCSAgICBpbnNfc3RyKHJlcGxfdGV4dCk7CisJfQorICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IEZSRF9SRVBMQUNFQUxMKQorCWdhX2NvbmNhdCgmZ2EsIChjaGFyX3UgKikiJXMvIik7CisKKyAgICBnYV9jb25jYXQoJmdhLCAoY2hhcl91ICopIlxcViIpOworICAgIGlmIChmbGFncyAmIEZSRF9NQVRDSF9DQVNFKQorCWdhX2NvbmNhdCgmZ2EsIChjaGFyX3UgKikiXFxDIik7CisgICAgZWxzZQorCWdhX2NvbmNhdCgmZ2EsIChjaGFyX3UgKikiXFxjIik7CisgICAgaWYgKGZsYWdzICYgRlJEX1dIT0xFX1dPUkQpCisJZ2FfY29uY2F0KCZnYSwgKGNoYXJfdSAqKSJcXDwiKTsKKyAgICBpZiAodHlwZSA9PSBGUkRfUkVQTEFDRUFMTCB8fCBkb3duKQorCWNvbmNhdF9lc2MoJmdhLCBmaW5kX3RleHQsICcvJyk7CS8qIGVzY2FwZSBzbGFzaGVzICovCisgICAgZWxzZQorCWNvbmNhdF9lc2MoJmdhLCBmaW5kX3RleHQsICc/Jyk7CS8qIGVzY2FwZSAnPycgKi8KKyAgICBpZiAoZmxhZ3MgJiBGUkRfV0hPTEVfV09SRCkKKwlnYV9jb25jYXQoJmdhLCAoY2hhcl91ICopIlxcPiIpOworCisgICAgaWYgKHR5cGUgPT0gRlJEX1JFUExBQ0VBTEwpCisgICAgeworCS8qIEEgYnV0dG9uIHdhcyBwcmVzc2VkLCB0aHVzIHVuZG8gc2hvdWxkIGJlIHN5bmNlZC4gKi8KKwlpZiAobm9fdV9zeW5jID09IDApCisJICAgIHVfc3luYygpOworCisJZ2FfY29uY2F0KCZnYSwgKGNoYXJfdSAqKSIvIik7CisJY29uY2F0X2VzYygmZ2EsIHJlcGxfdGV4dCwgJy8nKTsJLyogZXNjYXBlIHNsYXNoZXMgKi8KKwlnYV9jb25jYXQoJmdhLCAoY2hhcl91ICopIi9nIik7CisJZG9fY21kbGluZV9jbWQoZ2EuZ2FfZGF0YSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogU2VhcmNoIGZvciB0aGUgbmV4dCBtYXRjaC4gKi8KKwlpID0gbXNnX3Njcm9sbDsKKwlkb19zZWFyY2goTlVMTCwgZG93biA/ICcvJyA6ICc/JywgZ2EuZ2FfZGF0YSwgMUwsCisJCQkJCQkgICAgU0VBUkNIX01TRyArIFNFQVJDSF9NQVJLKTsKKwltc2dfc2Nyb2xsID0gaTsJICAgIC8qIGRvbid0IGxldCBhbiBlcnJvciBtZXNzYWdlIHNldCBtc2dfc2Nyb2xsICovCisgICAgfQorCisgICAgaWYgKFN0YXRlICYgKE5PUk1BTCB8IElOU0VSVCkpCisgICAgeworCWd1aV91cGRhdGVfc2NyZWVuKCk7CQkvKiB1cGRhdGUgdGhlIHNjcmVlbiAqLworCW1zZ19kaWRvdXQgPSAwOwkJCS8qIG92ZXJ3cml0ZSBhbnkgbWVzc2FnZSAqLworCW5lZWRfd2FpdF9yZXR1cm4gPSBGQUxTRTsJLyogZG9uJ3Qgd2FpdCBmb3IgcmV0dXJuICovCisgICAgfQorCisgICAgdmltX2ZyZWUoZ2EuZ2FfZGF0YSk7CisgICAgcmV0dXJuIChnYS5nYV9sZW4gPiAwKTsKK30KKworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGRUFUX0RORCkgJiYgZGVmaW5lZChGRUFUX0dVSV9HVEspKSBcCisJfHwgZGVmaW5lZChGRUFUX0dVSV9NU1dJTikgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfTUFDKSBcCisJfHwgZGVmaW5lZChQUk9UTykKKworI2lmZGVmIEZFQVRfV0lORE9XUworc3RhdGljIHZvaWQgZ3VpX3dpbmdvdG9feHkgX19BUkdTKChpbnQgeCwgaW50IHkpKTsKKworLyoKKyAqIEp1bXAgdG8gdGhlIHdpbmRvdyBhdCBzcGVjaWZpZWQgcG9pbnQgKHgsIHkpLgorICovCisgICAgc3RhdGljIHZvaWQKK2d1aV93aW5nb3RvX3h5KHgsIHkpCisgICAgaW50IHg7CisgICAgaW50IHk7Cit7CisgICAgaW50CQlyb3cgPSBZXzJfUk9XKHkpOworICAgIGludAkJY29sID0gWF8yX0NPTCh4KTsKKyAgICB3aW5fVAkqd3A7CisKKyAgICBpZiAocm93ID49IDAgJiYgY29sID49IDApCisgICAgeworCXdwID0gbW91c2VfZmluZF93aW4oJnJvdywgJmNvbCk7CisJaWYgKHdwICE9IE5VTEwgJiYgd3AgIT0gY3Vyd2luKQorCSAgICB3aW5fZ290byh3cCk7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBQcm9jZXNzIGZpbGUgZHJvcC4gIE1vdXNlIGN1cnNvciBwb3NpdGlvbiwga2V5IG1vZGlmaWVycywgbmFtZSBvZiBmaWxlcworICogYW5kIGNvdW50IG9mIGZpbGVzIGFyZSBnaXZlbi4gIEFyZ3VtZW50ICJmbmFtZXNbY291bnRdIiBoYXMgZnVsbCBwYXRobmFtZXMKKyAqIG9mIGRyb3BwZWQgZmlsZXMsIHRoZXkgd2lsbCBiZSBmcmVlZCBpbiB0aGlzIGZ1bmN0aW9uLCBhbmQgY2FsbGVyIGNhbid0IHVzZQorICogZm5hbWVzIGFmdGVyIGNhbGwgdGhpcyBmdW5jdGlvbi4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorZ3VpX2hhbmRsZV9kcm9wKHgsIHksIG1vZGlmaWVycywgZm5hbWVzLCBjb3VudCkKKyAgICBpbnQJCXg7CisgICAgaW50CQl5OworICAgIGludF91CW1vZGlmaWVyczsKKyAgICBjaGFyX3UJKipmbmFtZXM7CisgICAgaW50CQljb3VudDsKK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpwOworCisgICAgLyoKKyAgICAgKiBXaGVuIHRoZSBjdXJzb3IgaXMgYXQgdGhlIGNvbW1hbmQgbGluZSwgYWRkIHRoZSBmaWxlIG5hbWVzIHRvIHRoZQorICAgICAqIGNvbW1hbmQgbGluZSwgZG9uJ3QgZWRpdCB0aGUgZmlsZXMuCisgICAgICovCisgICAgaWYgKFN0YXRlICYgQ01ETElORSkKKyAgICB7CisJc2hvcnRlbl9maWxlbmFtZXMoZm5hbWVzLCBjb3VudCk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJeworCSAgICBpZiAoZm5hbWVzW2ldICE9IE5VTEwpCisJICAgIHsKKwkJaWYgKGkgPiAwKQorCQkgICAgYWRkX3RvX2lucHV0X2J1ZigoY2hhcl91KikiICIsIDEpOworCisJCS8qIFdlIGRvbid0IGtub3cgd2hhdCBjb21tYW5kIGlzIHVzZWQgdGh1cyB3ZSBjYW4ndCBiZSBzdXJlCisJCSAqIGFib3V0IHdoaWNoIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkLiAgT25seSBlc2NhcGUgdGhlCisJCSAqIG1vc3QgY29tbW9uIG9uZXMuICovCisjIGlmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorCQlwID0gdmltX3N0cnNhdmVfZXNjYXBlZChmbmFtZXNbaV0sIChjaGFyX3UgKikiIFx0XCJ8Iik7CisjIGVsc2UKKwkJcCA9IHZpbV9zdHJzYXZlX2VzY2FwZWQoZm5hbWVzW2ldLCAoY2hhcl91ICopIlxcIFx0XCJ8Iik7CisjIGVuZGlmCisJCWlmIChwICE9IE5VTEwpCisJCSAgICBhZGRfdG9faW5wdXRfYnVmKHAsIChpbnQpU1RSTEVOKHApKTsKKwkJdmltX2ZyZWUocCk7CisJCXZpbV9mcmVlKGZuYW1lc1tpXSk7CisJICAgIH0KKwl9CisJdmltX2ZyZWUoZm5hbWVzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBHbyB0byB0aGUgd2luZG93IHVuZGVyIG1vdXNlIGN1cnNvciwgdGhlbiBzaG9ydGVuIGdpdmVuICJmbmFtZXMiIGJ5CisJICogY3VycmVudCB3aW5kb3csIGJlY2F1c2UgYSB3aW5kb3cgY2FuIGhhdmUgbG9jYWwgY3VycmVudCBkaXIuICovCisjIGlmZGVmIEZFQVRfV0lORE9XUworCWd1aV93aW5nb3RvX3h5KHgsIHkpOworIyBlbmRpZgorCXNob3J0ZW5fZmlsZW5hbWVzKGZuYW1lcywgY291bnQpOworCisJLyogSWYgU2hpZnQgaGVsZCBkb3duLCByZW1lbWJlciB0aGUgZmlyc3QgaXRlbS4gKi8KKwlpZiAoKG1vZGlmaWVycyAmIE1PVVNFX1NISUZUKSAhPSAwKQorCSAgICBwID0gdmltX3N0cnNhdmUoZm5hbWVzWzBdKTsKKwllbHNlCisJICAgIHAgPSBOVUxMOworCisJLyogSGFuZGxlIHRoZSBkcm9wLCA6ZWRpdCBvciA6c3BsaXQgdG8gZ2V0IHRvIHRoZSBmaWxlLiAgVGhpcyBhbHNvCisJICogZnJlZXMgZm5hbWVzW10uICBTa2lwIHRoaXMgaWYgdGhlcmUgaXMgb25seSBvbmUgaXRlbSBpdCdzIGEKKwkgKiBkaXJlY3RvcnkgYW5kIFNoaWZ0IGlzIGhlbGQgZG93bi4gKi8KKwlpZiAoY291bnQgPT0gMSAmJiAobW9kaWZpZXJzICYgTU9VU0VfU0hJRlQpICE9IDAKKwkJCQkJCSAgICAgJiYgbWNoX2lzZGlyKGZuYW1lc1swXSkpCisJeworCSAgICB2aW1fZnJlZShmbmFtZXNbMF0pOworCSAgICB2aW1fZnJlZShmbmFtZXMpOworCX0KKwllbHNlCisJICAgIGhhbmRsZV9kcm9wKGNvdW50LCBmbmFtZXMsIChtb2RpZmllcnMgJiBNT1VTRV9DVFJMKSAhPSAwKTsKKworCS8qIElmIFNoaWZ0IGhlbGQgZG93biwgY2hhbmdlIHRvIGZpcnN0IGZpbGUncyBkaXJlY3RvcnkuICBJZiB0aGUgZmlyc3QKKwkgKiBpdGVtIGlzIGEgZGlyZWN0b3J5LCBjaGFuZ2UgdG8gdGhhdCBkaXJlY3RvcnkgKGFuZCBsZXQgdGhlIGV4cGxvcmVyCisJICogcGx1Z2luIHNob3cgdGhlIGNvbnRlbnRzKS4gKi8KKwlpZiAocCAhPSBOVUxMKQorCXsKKwkgICAgaWYgKG1jaF9pc2RpcihwKSkKKwkgICAgeworCQlpZiAobWNoX2NoZGlyKChjaGFyICopcCkgPT0gMCkKKwkJICAgIHNob3J0ZW5fZm5hbWVzKFRSVUUpOworCSAgICB9CisJICAgIGVsc2UgaWYgKHZpbV9jaGRpcmZpbGUocCkgPT0gT0spCisJCXNob3J0ZW5fZm5hbWVzKFRSVUUpOworCSAgICB2aW1fZnJlZShwKTsKKwl9CisKKwkvKiBVcGRhdGUgdGhlIHNjcmVlbiBkaXNwbGF5ICovCisJdXBkYXRlX3NjcmVlbihOT1RfVkFMSUQpOworIyBpZmRlZiBGRUFUX01FTlUKKwlndWlfdXBkYXRlX21lbnVzKDApOworIyBlbmRpZgorCXNldGN1cnNvcigpOworCW91dF9mbHVzaCgpOworCWd1aV91cGRhdGVfY3Vyc29yKEZBTFNFLCBGQUxTRSk7CisJZ3VpX21jaF9mbHVzaCgpOworICAgIH0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2d1aS5oIGIvc3JjL2d1aS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNTdjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpLmgKQEAgLTAsMCArMSw1MjUgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCQlNb3RpZiBzdXBwb3J0IGJ5IFJvYmVydCBXZWJiCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisvKiBGb3IgZGVidWdnaW5nICovCisvKiAjZGVmaW5lIEQoeCkJcHJpbnRmIHg7ICovCisjZGVmaW5lIEQoeCkKKworI2lmIGRlZmluZWQoRkVBVF9HVUlfQU1JR0EpCisjIGluY2x1ZGUgPGludHVpdGlvbi9pbnR1aXRpb24uaD4KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUlfTU9USUYKKyMgZGVmaW5lIEZFQVRfR1VJX1gxMQorIyBpbmNsdWRlIDxYbS9YbS5oPgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSV9BVEhFTkEKKyMgZGVmaW5lIEZFQVRfR1VJX1gxMQorIyBpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjIGluY2x1ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CisjZW5kaWYKKworI2lmZGVmIEZFQVRfQkVWQUwKKyMgaW5jbHVkZSAiZ3VpX2JldmFsLmgiCisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJX0dUSworIyBpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjIGluY2x1ZGUgPGd0ay9ndGsuaD4KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUlfQkVPUworIyBpbmNsdWRlICJndWlfYmVvcy5oIgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSV9NQUMKKyMgaW5jbHVkZSA8VHlwZXMuaD4KKy8qIyBpbmNsdWRlIDxNZW1vcnkuaD4qLworIyBpbmNsdWRlIDxRdWlja2RyYXcuaD4KKyMgaW5jbHVkZSA8Rm9udHMuaD4KKyMgaW5jbHVkZSA8RXZlbnRzLmg+CisjIGluY2x1ZGUgPE1lbnVzLmg+CisjIGlmICEoZGVmaW5lZCAoVEFSR0VUX0FQSV9NQUNfQ0FSQk9OKSAmJiAoVEFSR0VUX0FQSV9NQUNfQ0FSQk9OKSkKKyMgICBpbmNsdWRlIDxXaW5kb3dzLmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPENvbnRyb2xzLmg+CisvKiMgaW5jbHVkZSA8VGV4dEVkaXQuaD4qLworIyBpbmNsdWRlIDxEaWFsb2dzLmg+CisjIGluY2x1ZGUgPE9TVXRpbHMuaD4KKy8qCisjIGluY2x1ZGUgPFRvb2xVdGlscy5oPgorIyBpbmNsdWRlIDxTZWdMb2FkLmg+Ki8KKyNlbmRpZgorCisjaWZkZWYgUklTQ09TCisjIGluY2x1ZGUgImd1aV9yaXNjb3MuaCIKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUlfUEhPVE9OCisjIGluY2x1ZGUgPFBoLmg+CisjIGluY2x1ZGUgPFB0Lmg+CisjIGluY2x1ZGUgInBob3Rvbi9QeFByb3RvLmgiCisjZW5kaWYKKworLyoKKyAqIE9uIHNvbWUgc3lzdGVtcywgd2hlbiB3ZSBjb21waWxlIHdpdGggdGhlIEdVSSwgd2UgYWx3YXlzIHVzZSBpdC4gIE9uIE1hYworICogdGhlcmUgaXMgbm8gdGVybWluYWwgdmVyc2lvbiwgYW5kIG9uIFdpbmRvd3Mgd2UgY2FuJ3QgZmlndXJlIG91dCBob3cgdG8KKyAqIGZvcmsgb25lIG9mZiB3aXRoIDpndWkuCisgKi8KKyNpZiBkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSB8fCAoZGVmaW5lZChGRUFUX0dVSV9NQUMpICYmICFkZWZpbmVkKE1BQ09TX1hfVU5JWCkpCisjIGRlZmluZSBBTFdBWVNfVVNFX0dVSQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSB8fCBkZWZpbmVkKEZFQVRfR1VJX01BQykgfHwgZGVmaW5lZChIQVZFX0dUSzIpCisjIGRlZmluZSBVU0VfT05fRkxZX1NDUk9MTAorI2VuZGlmCisKKy8qCisgKiBHVUlzIHRoYXQgc3VwcG9ydCBkcm9wcGluZyBmaWxlcyBvbiBhIHJ1bm5pbmcgVmltLgorICovCisjaWYgZGVmaW5lZChGRUFUX0dVSV9NU1dJTikgfHwgZGVmaW5lZChGRUFUX0dVSV9NQUMpIFwKKwl8fCBkZWZpbmVkKEZFQVRfR1VJX0JFT1MpIHx8IGRlZmluZWQoRkVBVF9HVUlfR1RLKQorIyBkZWZpbmUgSEFWRV9EUk9QX0ZJTEUKKyNlbmRpZgorCisvKgorICogVGhpcyBkZWZpbmUgbWFrZXMgbWVudXMgYWx3YXlzIHVzZSBhIGZvbnRzZXQuCisgKiBXZSdyZSBub3Qgc3VyZSBpZiB0aGlzIGNvZGUgYWx3YXlzIHdvcmtzLCB0aHVzIGl0IGNhbiBiZSBkaXNhYmxlZC4KKyAqLworI2lmZGVmIEZFQVRfWEZPTlRTRVQKKyMgZGVmaW5lIEZPTlRTRVRfQUxXQVlTCisjZW5kaWYKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBjb252ZXJ0IGJldHdlZW4gY2hhcmFjdGVyIHJvdy9jb2x1bW4gYW5kIHBpeGVsIGNvb3JkaW5hdGVzLgorICogVEVYVF9YICAgLSBDb252ZXJ0IGNoYXJhY3RlciBjb2x1bW4gaW50byBYIHBpeGVsIGNvb3JkIGZvciBkcmF3aW5nIHN0cmluZ3MuCisgKiBURVhUX1kgICAtIENvbnZlcnQgY2hhcmFjdGVyIHJvdyBpbnRvIFkgcGl4ZWwgY29vcmQgZm9yIGRyYXdpbmcgc3RyaW5ncy4KKyAqIEZJTExfWCAgIC0gQ29udmVydCBjaGFyYWN0ZXIgY29sdW1uIGludG8gWCBwaXhlbCBjb29yZCBmb3IgZmlsbGluZyB0aGUgYXJlYQorICoJCXVuZGVyIHRoZSBjaGFyYWN0ZXIuCisgKiBGSUxMX1kgICAtIENvbnZlcnQgY2hhcmFjdGVyIHJvdyBpbnRvIFkgcGl4ZWwgY29vcmQgZm9yIGZpbGxpbmcgdGhlIGFyZWEKKyAqCQl1bmRlciB0aGUgY2hhcmFjdGVyLgorICogWF8yX0NPTCAgLSBDb252ZXJ0IFggcGl4ZWwgY29vcmQgaW50byBjaGFyYWN0ZXIgY29sdW1uLgorICogWV8yX1JPVyAgLSBDb252ZXJ0IFkgcGl4ZWwgY29vcmQgaW50byBjaGFyYWN0ZXIgcm93LgorICovCisjaWZkZWYgRkVBVF9HVUlfVzMyCisjIGRlZmluZSBURVhUX1goY29sKQkoKGNvbCkgKiBndWkuY2hhcl93aWR0aCkKKyMgZGVmaW5lIFRFWFRfWShyb3cpCSgocm93KSAqIGd1aS5jaGFyX2hlaWdodCArIGd1aS5jaGFyX2FzY2VudCkKKyMgZGVmaW5lIEZJTExfWChjb2wpCSgoY29sKSAqIGd1aS5jaGFyX3dpZHRoKQorIyBkZWZpbmUgRklMTF9ZKHJvdykJKChyb3cpICogZ3VpLmNoYXJfaGVpZ2h0KQorIyBkZWZpbmUgWF8yX0NPTCh4KQkoKHgpIC8gZ3VpLmNoYXJfd2lkdGgpCisjIGRlZmluZSBZXzJfUk9XKHkpCSgoeSkgLyBndWkuY2hhcl9oZWlnaHQpCisjZWxzZQorIyBkZWZpbmUgVEVYVF9YKGNvbCkJKChjb2wpICogZ3VpLmNoYXJfd2lkdGggICsgZ3VpLmJvcmRlcl9vZmZzZXQpCisjIGRlZmluZSBGSUxMX1goY29sKQkoKGNvbCkgKiBndWkuY2hhcl93aWR0aCAgKyBndWkuYm9yZGVyX29mZnNldCkKKyMgZGVmaW5lIFhfMl9DT0woeCkJKCgoeCkgLSBndWkuYm9yZGVyX29mZnNldCkgLyBndWkuY2hhcl93aWR0aCkKKyMgZGVmaW5lIFRFWFRfWShyb3cpCSgocm93KSAqIGd1aS5jaGFyX2hlaWdodCArIGd1aS5jaGFyX2FzY2VudCBcCisJCQkJCQkJKyBndWkuYm9yZGVyX29mZnNldCkKKyMgZGVmaW5lIEZJTExfWShyb3cpCSgocm93KSAqIGd1aS5jaGFyX2hlaWdodCArIGd1aS5ib3JkZXJfb2Zmc2V0KQorIyBkZWZpbmUgWV8yX1JPVyh5KQkoKCh5KSAtIGd1aS5ib3JkZXJfb2Zmc2V0KSAvIGd1aS5jaGFyX2hlaWdodCkKKyNlbmRpZgorCisvKiBJbmRpY2VzIGZvciBhcnJheXMgb2Ygc2Nyb2xsYmFycyAqLworI2RlZmluZSBTQkFSX05PTkUJICAgIC0xCisjZGVmaW5lIFNCQVJfTEVGVAkgICAgMAorI2RlZmluZSBTQkFSX1JJR0hUCSAgICAxCisjZGVmaW5lIFNCQVJfQk9UVE9NCSAgICAyCisKKy8qIE9yaWVudGF0aW9ucyBmb3Igc2Nyb2xsYmFycyAqLworI2RlZmluZSBTQkFSX1ZFUlQJICAgIDAKKyNkZWZpbmUgU0JBUl9IT1JJWgkgICAgMQorCisvKiBEZWZhdWx0IHNpemUgb2Ygc2Nyb2xsYmFyICovCisjZGVmaW5lIFNCX0RFRkFVTFRfV0lEVEggICAgMTYKKworLyogRGVmYXVsdCBoZWlnaHQgb2YgdGhlIG1lbnUgYmFyICovCisjZGVmaW5lIE1FTlVfREVGQVVMVF9IRUlHSFQgMQkJLyogZmlndXJlIGl0IG91dCBhdCBydW50aW1lICovCisKKy8qIEZsYWdzIGZvciBndWlfbWNoX291dHN0cl9ub3dyYXAoKSAqLworI2RlZmluZSBHVUlfTU9OX1dSQVBfQ1VSU09SCTB4MDEJLyogd3JhcCBjdXJzb3IgYXQgZW5kIG9mIGxpbmUgKi8KKyNkZWZpbmUgR1VJX01PTl9JTlZFUlQJCTB4MDIJLyogaW52ZXJ0IHRoZSBjaGFyYWN0ZXJzICovCisjZGVmaW5lIEdVSV9NT05fSVNfQ1VSU09SCTB4MDQJLyogZHJhd2luZyBjdXJzb3IgKi8KKyNkZWZpbmUgR1VJX01PTl9UUlNfQ1VSU09SCTB4MDgJLyogZHJhd2luZyB0cmFuc3BhcmVudCBjdXJzb3IgKi8KKyNkZWZpbmUgR1VJX01PTl9OT0NMRUFSCQkweDEwCS8qIGRvbid0IGNsZWFyIHNlbGVjdGlvbiAqLworCisvKiBGbGFncyBmb3IgZ3VpX21jaF9kcmF3X3N0cmluZygpICovCisjZGVmaW5lIERSQVdfVFJBTlNQCQkweDAxCS8qIGRyYXcgd2l0aCB0cmFuc3BhcmFudCBiZyAqLworI2RlZmluZSBEUkFXX0JPTEQJCTB4MDIJLyogZHJhdyBib2xkIHRleHQgKi8KKyNkZWZpbmUgRFJBV19VTkRFUkwJCTB4MDQJLyogZHJhdyB1bmRlcmxpbmUgdGV4dCAqLworI2lmIGRlZmluZWQoUklTQ09TKSB8fCBkZWZpbmVkKEhBVkVfR1RLMikKKyMgZGVmaW5lIERSQVdfSVRBTElDCQkweDA4CS8qIGRyYXcgaXRhbGljIHRleHQgKi8KKyNlbmRpZgorI2RlZmluZSBEUkFXX0NVUlNPUgkJMHgxMAkvKiBkcmF3aW5nIGJsb2NrIGN1cnNvciAod2luMzIpICovCisKKy8qIEZvciBvdXIgb3duIHRlYXJvZmYgbWVudSBpdGVtICovCisjZGVmaW5lIFRFQVJfU1RSSU5HCQkiLS0+RGV0YWNoIgorI2RlZmluZSBURUFSX0xFTgkJKDkpCS8qIGxlbmd0aCBvZiBhYm92ZSBzdHJpbmcgKi8KKworLyogZm9yIHRoZSB0b29sYmFyICovCisjaWZkZWYgRkVBVF9HVUlfVzE2CisjIGRlZmluZSBUT09MQkFSX0JVVFRPTl9IRUlHSFQJMTUKKyMgZGVmaW5lIFRPT0xCQVJfQlVUVE9OX1dJRFRICTE2CisjZWxzZQorIyBkZWZpbmUgVE9PTEJBUl9CVVRUT05fSEVJR0hUCTE4CisjIGRlZmluZSBUT09MQkFSX0JVVFRPTl9XSURUSAkxOAorI2VuZGlmCisjZGVmaW5lIFRPT0xCQVJfQk9SREVSX0hFSUdIVAkxMiAgLyogcm9vbSBhYm92ZStiZWxvdyBidXR0b25zIGZvciBNU1dpbmRvd3MgKi8KKworI2lmIGRlZmluZWQoTk9fQ09OU09MRSkgfHwgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfWDExKQorIyBkZWZpbmUgTk9fQ09OU09MRV9JTlBVVAkvKiB1c2Ugbm9fY29uc29sZV9pbnB1dCgpIHRvIGNoZWNrIGlmIHRoZXJlCisJCQkJICAgaXMgbm8gY29uc29sZSBpbnB1dCBwb3NzaWJsZSAqLworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IEd1aVNjcm9sbGJhcgoreworICAgIGxvbmcJaWRlbnQ7CQkvKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgZWFjaCBzY3JvbGxiYXIgKi8KKyAgICBzdHJ1Y3Qgd2luZG93ICp3cDsJCS8qIFNjcm9sbGJhcidzIHdpbmRvdywgTlVMTCBmb3IgYm90dG9tICovCisgICAgaW50CQl0eXBlOwkJLyogb25lIG9mIFNCQVJfe0xFRlQsUklHSFQsQk9UVE9NfSAqLworICAgIGxvbmcJdmFsdWU7CQkvKiBSZXByZXNlbnRzIHRvcCBsaW5lIG51bWJlciB2aXNpYmxlICovCisjaWZkZWYgRkVBVF9HVUlfQVRIRU5BCisgICAgaW50CQlwaXh2YWw7CQkvKiBwaXhlbCBjb3VudCBvZiB2YWx1ZSAqLworI2VuZGlmCisgICAgbG9uZwlzaXplOwkJLyogU2l6ZSBvZiBzY3JvbGxiYXIgdGh1bWIgKi8KKyAgICBsb25nCW1heDsJCS8qIE51bWJlciBvZiBsaW5lcyBpbiBidWZmZXIgKi8KKworICAgIC8qIFZhbHVlcyBtZWFzdXJlZCBpbiBjaGFyYWN0ZXJzOiAqLworICAgIGludAkJdG9wOwkJLyogVG9wIG9mIHNjcm9sbCBiYXIgKGNoYXJzIGZyb20gcm93IDApICovCisgICAgaW50CQloZWlnaHQ7CQkvKiBDdXJyZW50IGhlaWdodCBvZiBzY3JvbGwgYmFyIGluIHJvd3MgKi8KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGludAkJd2lkdGg7CQkvKiBDdXJyZW50IHdpZHRoIG9mIHNjcm9sbCBiYXIgaW4gY29scyAqLworI2VuZGlmCisgICAgaW50CQlzdGF0dXNfaGVpZ2h0OwkvKiBIZWlnaHQgb2Ygc3RhdHVzIGxpbmUgKi8KKyNpZmRlZiBGRUFUX0dVSV9YMTEKKyAgICBXaWRnZXQJaWQ7CQkvKiBJZCBvZiByZWFsIHNjcm9sbCBiYXIgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJX0dUSworICAgIEd0a1dpZGdldCAqaWQ7CQkvKiBJZCBvZiByZWFsIHNjcm9sbCBiYXIgKi8KKyAgICB1bnNpZ25lZCBsb25nIGhhbmRsZXJfaWQ7ICAgLyogSWQgb2YgInZhbHVlX2NoYW5nZWQiIHNpZ25hbCBoYW5kbGVyICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJX01TV0lOCisgICAgSFdORAlpZDsJCS8qIElkIG9mIHJlYWwgc2Nyb2xsIGJhciAqLworICAgIGludAkJc2Nyb2xsX3NoaWZ0OwkvKiBUaGUgc2Nyb2xsYmFyIHN0dWZmIGNhbiBoYW5kbGUgb25seSB1cCB0bworCQkJCSAgIDMyNzY3IGxpbmVzLiAgV2hlbiB0aGUgZmlsZSBpcyBsb25nZXIsCisJCQkJICAgc2Nyb2xsX3NoaWZ0IGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHNoaWZ0cworCQkJCSAgIHRvIHJlZHVjZSB0aGUgY291bnQuICAqLworI2VuZGlmCisjaWYgRkVBVF9HVUlfQkVPUworICAgIFZpbVNjcm9sbEJhciAqaWQ7CQkvKiBQb2ludGVyIHRvIHJlYWwgc2Nyb2xsIGJhciAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUlfTUFDCisgICAgQ29udHJvbEhhbmRsZSBpZDsJCS8qIEEgaGFuZGxlIHRvIHRoZSBzY3JvbGxiYXIgKi8KKyNlbmRpZgorI2lmZGVmIFJJU0NPUworICAgIGludAkJaWQ7CQkvKiBXaW5kb3cgaGFuZGxlIG9mIHNjcm9sbGJhciB3aW5kb3cgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJX1BIT1RPTgorICAgIFB0V2lkZ2V0X3QJKmlkOworI2VuZGlmCit9IHNjcm9sbGJhcl9UOworCit0eXBlZGVmIGxvbmcJICAgIGd1aWNvbG9yX1Q7CS8qIGhhbmRsZSBmb3IgYSBHVUkgY29sb3I7IGZvciBYMTEgdGhpcyBzaG91bGQKKwkJCQkgICBiZSAiUGl4ZWwiLCBidXQgdGhhdCdzIGFuIHVuc2lnbmVkIGFuZCB3ZQorCQkJCSAgIG5lZWQgYSBzaWduZWQgdmFsdWUgKi8KKyNkZWZpbmUgSU5WQUxDT0xPUiAoZ3VpY29sb3JfVCktMTExMTEJLyogbnVtYmVyIGZvciBpbnZhbGlkIGNvbG9yOyBvbiAzMiBiaXQKKwkJCQkgICBkaXNwbGF5cyB0aGVyZSBpcyBhIHRpbnkgY2hhbmNlIHRoaXMgaXMgYW4KKwkJCQkgICBhY3R1YWwgY29sb3IgKi8KKworI2lmZGVmIEZFQVRfR1VJX0dUSworIyBpZmRlZiBIQVZFX0dUSzIKKyAgdHlwZWRlZiBQYW5nb0ZvbnREZXNjcmlwdGlvbgkqR3VpRm9udDsgICAgICAgLyogaGFuZGxlIGZvciBhIEdVSSBmb250ICovCisgIHR5cGVkZWYgUGFuZ29Gb250RGVzY3JpcHRpb24gICpHdWlGb250c2V0OyAgICAvKiBoYW5kbGUgZm9yIGEgR1VJIGZvbnRzZXQgKi8KKyMgZWxzZQorICB0eXBlZGVmIEdka0ZvbnQJKkd1aUZvbnQ7CS8qIGhhbmRsZSBmb3IgYSBHVUkgZm9udCAqLworICB0eXBlZGVmIEdka0ZvbnQJKkd1aUZvbnRzZXQ7CS8qIGhhbmRsZSBmb3IgYSBHVUkgZm9udHNldCAqLworIyBlbmRpZgorIyBkZWZpbmUgTk9GT05UCQkoR3VpRm9udClOVUxMCisjIGRlZmluZSBOT0ZPTlRTRVQJKEd1aUZvbnRzZXQpTlVMTAorI2Vsc2UKKyMgaWZkZWYgRkVBVF9HVUlfUEhPVE9OCisgIHR5cGVkZWYgY2hhcgkJKkd1aUZvbnQ7CisgIHR5cGVkZWYgY2hhcgkJKkd1aUZvbnRzZXQ7CisjICBkZWZpbmUgTk9GT05UCShHdWlGb250KU5VTEwKKyMgIGRlZmluZSBOT0ZPTlRTRVQJKEd1aUZvbnRzZXQpTlVMTAorIyBlbHNlCisjICBpZmRlZiBGRUFUX0dVSV9YMTEKKyAgdHlwZWRlZiBYRm9udFN0cnVjdAkqR3VpRm9udDsJLyogaGFuZGxlIGZvciBhIEdVSSBmb250ICovCisgIHR5cGVkZWYgWEZvbnRTZXQJR3VpRm9udHNldDsJLyogaGFuZGxlIGZvciBhIEdVSSBmb250c2V0ICovCisjICAgZGVmaW5lIE5PRk9OVAkoR3VpRm9udCkwCisjICAgZGVmaW5lIE5PRk9OVFNFVAkoR3VpRm9udHNldCkwCisjICBlbHNlCisgIHR5cGVkZWYgbG9uZ191CUd1aUZvbnQ7CS8qIGhhbmRsZSBmb3IgYSBHVUkgZm9udCAqLworICB0eXBlZGVmIGxvbmdfdQlHdWlGb250c2V0OwkvKiBoYW5kbGUgZm9yIGEgR1VJIGZvbnRzZXQgKi8KKyMgICBkZWZpbmUgTk9GT05UCShHdWlGb250KTAKKyMgICBkZWZpbmUgTk9GT05UU0VUCShHdWlGb250c2V0KTAKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgR3VpCit7CisgICAgaW50CQlpbl9mb2N1czsJICAgIC8qIFZpbSBoYXMgaW5wdXQgZm9jdXMgKi8KKyAgICBpbnQJCWluX3VzZTsJCSAgICAvKiBJcyB0aGUgR1VJIGJlaW5nIHVzZWQ/ICovCisgICAgaW50CQlzdGFydGluZzsJICAgIC8qIEdVSSB3aWxsIHN0YXJ0IGluIGEgbGl0dGxlIHdoaWxlICovCisgICAgaW50CQlzaGVsbF9jcmVhdGVkOwkgICAgLyogSGFzIHRoZSBzaGVsbCBiZWVuIGNyZWF0ZWQgeWV0PyAqLworICAgIGludAkJZHlpbmc7CQkgICAgLyogSXMgdmltIGR5aW5nPyBUaGVuIG91dHB1dCB0byB0ZXJtaW5hbCAqLworICAgIGludAkJZG9mb3JrOwkJICAgIC8qIFVzZSBmb3JrKCkgd2hlbiBHVUkgaXMgc3RhcnRpbmcgKi8KKyAgICBpbnQJCWRyYWdnZWRfc2I7CSAgICAvKiBXaGljaCBzY3JvbGxiYXIgYmVpbmcgZHJhZ2dlZCwgaWYgYW55PyAqLworICAgIHdpbl9UCSpkcmFnZ2VkX3dwOwkgICAgLyogV2hpY2ggV0lOJ3Mgc2IgYmVpbmcgZHJhZ2dlZCwgaWYgYW55PyAqLworICAgIGludAkJcG9pbnRlcl9oaWRkZW47CSAgICAvKiBJcyB0aGUgbW91c2UgcG9pbnRlciBoaWRkZW4/ICovCisgICAgaW50CQljb2w7CQkgICAgLyogQ3VycmVudCBjdXJzb3IgY29sdW1uIGluIEdVSSBkaXNwbGF5ICovCisgICAgaW50CQlyb3c7CQkgICAgLyogQ3VycmVudCBjdXJzb3Igcm93IGluIEdVSSBkaXNwbGF5ICovCisgICAgaW50CQljdXJzb3JfY29sOwkgICAgLyogUGh5c2ljYWwgY3Vyc29yIGNvbHVtbiBpbiBHVUkgZGlzcGxheSAqLworICAgIGludAkJY3Vyc29yX3JvdzsJICAgIC8qIFBoeXNpY2FsIGN1cnNvciByb3cgaW4gR1VJIGRpc3BsYXkgKi8KKyAgICBjaGFyCWN1cnNvcl9pc192YWxpZDsgICAgLyogVGhlcmUgaXMgYSBjdXJzb3IgYXQgY3Vyc29yX3Jvdy9jb2wgKi8KKyAgICBpbnQJCW51bV9jb2xzOwkgICAgLyogTnVtYmVyIG9mIGNvbHVtbnMgKi8KKyAgICBpbnQJCW51bV9yb3dzOwkgICAgLyogTnVtYmVyIG9mIHJvd3MgKi8KKyAgICBpbnQJCXNjcm9sbF9yZWdpb25fdG9wOyAgLyogVG9wIChmaXJzdCkgbGluZSBvZiBzY3JvbGwgcmVnaW9uICovCisgICAgaW50CQlzY3JvbGxfcmVnaW9uX2JvdDsgIC8qIEJvdHRvbSAobGFzdCkgbGluZSBvZiBzY3JvbGwgcmVnaW9uICovCisgICAgaW50CQlzY3JvbGxfcmVnaW9uX2xlZnQ7ICAvKiBMZWZ0IChmaXJzdCkgY29sdW1uIG9mIHNjcm9sbCByZWdpb24gKi8KKyAgICBpbnQJCXNjcm9sbF9yZWdpb25fcmlnaHQ7ICAvKiBSaWdodCAobGFzdCkgY29sLiBvZiBzY3JvbGwgcmVnaW9uICovCisgICAgaW50CQloaWdobGlnaHRfbWFzazsJICAgIC8qIEhpZ2hsaWdodCBhdHRyaWJ1dGUgbWFzayAqLworICAgIGludAkJc2Nyb2xsYmFyX3dpZHRoOyAgICAvKiBXaWR0aCBvZiB2ZXJ0aWNhbCBzY3JvbGxiYXJzICovCisgICAgaW50CQlzY3JvbGxiYXJfaGVpZ2h0OyAgIC8qIEhlaWdodCBvZiBob3Jpem9udGFsIHNjcm9sbGJhciAqLworICAgIGludAkJbGVmdF9zYmFyX3g7CSAgICAvKiBDYWxjdWxhdGVkIHggY29vcmQgZm9yIGxlZnQgc2Nyb2xsYmFyICovCisgICAgaW50CQlyaWdodF9zYmFyX3g7CSAgICAvKiBDYWxjdWxhdGVkIHggY29vcmQgZm9yIHJpZ2h0IHNjcm9sbGJhciAqLworCisjaWZkZWYgRkVBVF9NRU5VCisjIGlmbmRlZiBGRUFUX0dVSV9HVEsKKyAgICBpbnQJCW1lbnVfaGVpZ2h0OwkgICAgLyogSGVpZ2h0IG9mIHRoZSBtZW51IGJhciAqLworICAgIGludAkJbWVudV93aWR0aDsJICAgIC8qIFdpZHRoIG9mIHRoZSBtZW51IGJhciAqLworIyBlbmRpZgorICAgIGNoYXIJbWVudV9pc19hY3RpdmU7CSAgICAvKiBUUlVFIGlmIG1lbnUgaXMgcHJlc2VudCAqLworIyBpZmRlZiBGRUFUX0dVSV9BVEhFTkEKKyAgICBjaGFyCW1lbnVfaGVpZ2h0X2ZpeGVkOyAgLyogVFJVRSBpZiBtZW51IGhlaWdodCBmaXhlZCAqLworIyBlbmRpZgorI2VuZGlmCisKKyAgICBzY3JvbGxiYXJfVCBib3R0b21fc2JhcjsJICAgIC8qIEJvdHRvbSBzY3JvbGxiYXIgKi8KKyAgICBpbnQJCXdoaWNoX3Njcm9sbGJhcnNbM107LyogV2hpY2ggc2Nyb2xsYmFyIGJveGVzIGFyZSBhY3RpdmU/ICovCisgICAgaW50CQlwcmV2X3dyYXA7CSAgICAvKiBGb3IgdXBkYXRpbmcgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyICovCisgICAgaW50CQljaGFyX3dpZHRoOwkgICAgLyogV2lkdGggb2YgY2hhciBpbiBwaXhlbHMgKi8KKyAgICBpbnQJCWNoYXJfaGVpZ2h0OwkgICAgLyogSGVpZ2h0IG9mIGNoYXIgaW4gcGl4ZWxzICsgJ2xpbmVzcGFjZScgKi8KKyAgICBpbnQJCWNoYXJfYXNjZW50OwkgICAgLyogQXNjZW50IG9mIGNoYXIgaW4gcGl4ZWxzICovCisgICAgaW50CQlib3JkZXJfd2lkdGg7CSAgICAvKiBXaWR0aCBvZiBvdXIgYm9yZGVyIGFyb3VuZCB0ZXh0IGFyZWEgKi8KKyAgICBpbnQJCWJvcmRlcl9vZmZzZXQ7CSAgICAvKiBUb3RhbCBwaXhlbCBvZmZzZXQgZm9yIGFsbCBib3JkZXJzICovCisKKyAgICBHdWlGb250CW5vcm1fZm9udDsJICAgIC8qIE5vcm1hbCBmb250ICovCisjaWZuZGVmIEhBVkVfR1RLMgorICAgIEd1aUZvbnQJYm9sZF9mb250OwkgICAgLyogQm9sZCBmb250ICovCisgICAgR3VpRm9udAlpdGFsX2ZvbnQ7CSAgICAvKiBJdGFsaWMgZm9udCAqLworICAgIEd1aUZvbnQJYm9sZGl0YWxfZm9udDsJICAgIC8qIEJvbGQtSXRhbGljIGZvbnQgKi8KKyNlbHNlCisgICAgaW50CQlmb250X2Nhbl9ib2xkOwkgICAgLyogV2hldGhlciBub3JtX2ZvbnQgc3VwcG9ydHMgYm9sZCB3ZWlnaHQuCisJCQkJICAgICAqIFRoZSBzdHlsZWQgZm9udCB2YXJpYW50cyBhcmUgbm90IHVzZWQuICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSAmJiAhZGVmaW5lZChIQVZFX0dUSzIpCisjIGlmZGVmIEZPTlRTRVRfQUxXQVlTCisgICAgR3VpRm9udHNldAltZW51X2ZvbnRzZXQ7CSAgICAvKiBzZXQgb2YgZm9udHMgZm9yIG11bHRpLWJ5dGUgY2hhcnMgKi8KKyMgZWxzZQorICAgIEd1aUZvbnQJbWVudV9mb250OwkgICAgLyogbWVudSBpdGVtIGZvbnQgKi8KKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBHdWlGb250CXdpZGVfZm9udDsJICAgIC8qICdndWlmb250d2lkZScgZm9udCAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9YRk9OVFNFVAorICAgIEd1aUZvbnRzZXQJZm9udHNldDsJICAgIC8qIHNldCBvZiBmb250cyBmb3IgbXVsdGktYnl0ZSBjaGFycyAqLworI2VuZGlmCisgICAgZ3VpY29sb3JfVAliYWNrX3BpeGVsOwkgICAgLyogQ29sb3Igb2YgYmFja2dyb3VuZCAqLworICAgIGd1aWNvbG9yX1QJbm9ybV9waXhlbDsJICAgIC8qIENvbG9yIG9mIG5vcm1hbCB0ZXh0ICovCisgICAgZ3VpY29sb3JfVAlkZWZfYmFja19waXhlbDsJICAgIC8qIGRlZmF1bHQgQ29sb3Igb2YgYmFja2dyb3VuZCAqLworICAgIGd1aWNvbG9yX1QJZGVmX25vcm1fcGl4ZWw7CSAgICAvKiBkZWZhdWx0IENvbG9yIG9mIG5vcm1hbCB0ZXh0ICovCisKKyNpZmRlZiBGRUFUX0dVSV9YMTEKKyAgICBjaGFyCSpyc3JjX21lbnVfZmdfbmFtZTsJLyogQ29sb3Igb2YgbWVudSBhbmQgZGlhbG9nIGZvcmVnb3VuZCAqLworICAgIGd1aWNvbG9yX1QJbWVudV9mZ19waXhlbDsJCS8qIFNhbWUgaW4gUGl4ZWwgZm9ybWF0ICovCisgICAgY2hhcgkqcnNyY19tZW51X2JnX25hbWU7CS8qIENvbG9yIG9mIG1lbnUgYW5kIGRpYWxvZyBiYWNrZ291bmQgKi8KKyAgICBndWljb2xvcl9UCW1lbnVfYmdfcGl4ZWw7CQkvKiBTYW1lIGluIFBpeGVsIGZvcm1hdCAqLworICAgIGNoYXIJKnJzcmNfc2Nyb2xsX2ZnX25hbWU7CS8qIENvbG9yIG9mIHNjcm9sbGJhciBmb3JlZ3JvdW5kICovCisgICAgZ3VpY29sb3JfVAlzY3JvbGxfZmdfcGl4ZWw7CS8qIFNhbWUgaW4gUGl4ZWwgZm9ybWF0ICovCisgICAgY2hhcgkqcnNyY19zY3JvbGxfYmdfbmFtZTsJLyogQ29sb3Igb2Ygc2Nyb2xsYmFyIGJhY2tncm91bmQgKi8KKyAgICBndWljb2xvcl9UCXNjcm9sbF9iZ19waXhlbDsJLyogU2FtZSBpbiBQaXhlbCBmb3JtYXQgKi8KKworIyBpZmRlZiBGRUFUX0dVSV9NT1RJRgorICAgIGd1aWNvbG9yX1QJbWVudV9kZWZfZmdfcGl4ZWw7ICAvKiBEZWZhdWx0IG1lbnUgZm9yZWdyb3VuZCAqLworICAgIGd1aWNvbG9yX1QJbWVudV9kZWZfYmdfcGl4ZWw7ICAvKiBEZWZhdWx0IG1lbnUgYmFja2dyb3VuZCAqLworICAgIGd1aWNvbG9yX1QJc2Nyb2xsX2RlZl9mZ19waXhlbDsgIC8qIERlZmF1bHQgc2Nyb2xsYmFyIGZvcmVncm91bmQgKi8KKyAgICBndWljb2xvcl9UCXNjcm9sbF9kZWZfYmdfcGl4ZWw7ICAvKiBEZWZhdWx0IHNjcm9sbGJhciBiYWNrZ3JvdW5kICovCisjIGVuZGlmCisgICAgRGlzcGxheQkqZHB5OwkJICAgIC8qIFggZGlzcGxheSAqLworICAgIFdpbmRvdwl3aWQ7CQkgICAgLyogV2luZG93IGlkIG9mIHRleHQgYXJlYSAqLworICAgIGludAkJdmlzaWJpbGl0eTsJICAgIC8qIElzIHNoZWxsIHBhcnRpYWxseS9mdWxseSBvYnNjdXJlZD8gKi8KKyAgICBHQwkJdGV4dF9nYzsKKyAgICBHQwkJYmFja19nYzsKKyAgICBHQwkJaW52ZXJ0X2djOworICAgIEN1cnNvcglibGFua19wb2ludGVyOwkgICAgLyogQmxhbmsgcG9pbnRlciAqLworCisgICAgLyogWCBSZXNvdXJjZXMgKi8KKyAgICBjaGFyX3UJKnJzcmNfZm9udF9uYW1lOyAgICAvKiBSZXNvdXJjZSBmb250IG5hbWUsIHVzZWQgaWYgJ2d1aWZvbnQnCisJCQkJICAgICAgIG5vdCBzZXQgKi8KKyAgICBjaGFyX3UJKnJzcmNfYm9sZF9mb250X25hbWU7IC8qIFJlc291cmNlIGJvbGQgZm9udCBuYW1lICovCisgICAgY2hhcl91CSpyc3JjX2l0YWxfZm9udF9uYW1lOyAvKiBSZXNvdXJjZSBpdGFsaWMgZm9udCBuYW1lICovCisgICAgY2hhcl91CSpyc3JjX2JvbGRpdGFsX2ZvbnRfbmFtZTsgIC8qIFJlc291cmNlIGJvbGQtaXRhbGljIGZvbnQgbmFtZSAqLworICAgIGNoYXJfdQkqcnNyY19tZW51X2ZvbnRfbmFtZTsgICAgLyogUmVzb3VyY2UgbWVudSBGb250IG5hbWUgKi8KKyAgICBCb29sCXJzcmNfcmV2X3ZpZGVvOwkgICAgLyogVXNlIHJldmVyc2UgdmlkZW8/ICovCisKKyAgICBjaGFyX3UJKmdlb207CQkgICAgLyogR2VvbWV0cnksIGVnICI4MHgyNCIgKi8KKyAgICBCb29sCWNvbG9yX2FwcHJveDsJICAgIC8qIFNvbWUgY29sb3Igd2FzIGFwcHJveGltYXRlZCAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSV9HVEsKKyAgICBpbnQJCXZpc2liaWxpdHk7CSAgICAvKiBJcyBzaGVsbCBwYXJ0aWFsbHkvZnVsbHkgb2JzY3VyZWQ/ICovCisgICAgR2RrQ3Vyc29yCSpibGFua19wb2ludGVyOwkgICAgLyogQmxhbmsgcG9pbnRlciAqLworCisgICAgLyogWCBSZXNvdXJjZXMgKi8KKyAgICBjaGFyX3UJKmdlb207CQkgICAgLyogR2VvbWV0cnksIGVnICI4MHgyNCIgKi8KKworICAgIEd0a1dpZGdldAkqbWFpbndpbjsJICAgIC8qIHRvcCBsZXZlbCBHVEsgd2luZG93ICovCisgICAgR3RrV2lkZ2V0CSpmb3Jtd2luOwkgICAgLyogbWFuYWdlcyBhbGwgdGhlIHdpbmRvd3MgYmVsb3cgKi8KKyAgICBHdGtXaWRnZXQJKmRyYXdhcmVhOwkgICAgLyogdGhlICJ0ZXh0IiBhcmVhICovCisjIGlmZGVmIEZFQVRfTUVOVQorICAgIEd0a1dpZGdldAkqbWVudWJhcjsJICAgIC8qIG1lbnViYXIgKi8KKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9UT09MQkFSCisgICAgR3RrV2lkZ2V0CSp0b29sYmFyOwkgICAgLyogdG9vbGJhciAqLworIyBlbmRpZgorIyBpZmRlZiBGRUFUX0dVSV9HTk9NRQorICAgIEd0a1dpZGdldAkqbWVudWJhcl9oOwkgICAgLyogbWVudWJhciBoYW5kbGUgKi8KKyAgICBHdGtXaWRnZXQJKnRvb2xiYXJfaDsJICAgIC8qIHRvb2xiYXIgaGFuZGxlICovCisjIGVuZGlmCisgICAgR2RrQ29sb3IJKmZnY29sb3I7CSAgICAvKiBHREstc3R5bGVkIGZvcmVncm91bmQgY29sb3IgKi8KKyAgICBHZGtDb2xvcgkqYmdjb2xvcjsJICAgIC8qIEdESy1zdHlsZWQgYmFja2dyb3VuZCBjb2xvciAqLworIyBpZm5kZWYgSEFWRV9HVEsyCisgICAgR3VpRm9udAljdXJyZW50X2ZvbnQ7CisjIGVuZGlmCisgICAgR2RrR0MJKnRleHRfZ2M7CSAgICAvKiBjYWNoZWQgR0MgZm9yIG5vcm1hbCB0ZXh0ICovCisjIGlmZGVmIEhBVkVfR1RLMgorICAgIFBhbmdvQ29udGV4dCAgICAgKnRleHRfY29udGV4dDsgLyogdGhlIGNvbnRleHQgdXNlZCBmb3IgYWxsIHRleHQgKi8KKyAgICBQYW5nb0ZvbnQJICAgICAqYXNjaWlfZm9udDsgICAvKiBjYWNoZWQgZm9udCBmb3IgQVNDSUkgc3RyaW5ncyAqLworICAgIFBhbmdvR2x5cGhTdHJpbmcgKmFzY2lpX2dseXBoczsgLyogY2FjaGVkIGNvZGUgcG9pbnQgLT4gZ2x5cGggbWFwICovCisjIGVuZGlmCisKKyAgICBHdGtBY2NlbEdyb3VwICphY2NlbF9ncm91cDsKKyMgaWZuZGVmIEhBVkVfR1RLMgorICAgIEd0a1dpZGdldAkqZm9udGRsZzsJICAgIC8qIGZvbnQgc2VsZWN0aW9uIGRpYWxvZyB3aW5kb3cgKi8KKyAgICBjaGFyX3UJKmZvbnRuYW1lOwkgICAgLyogZm9udCBuYW1lIGZyb20gZm9udCBzZWxlY3Rpb24gZGlhbG9nICovCisjIGVuZGlmCisgICAgR3RrV2lkZ2V0CSpmaWxlZGxnOwkgICAgLyogZmlsZSBzZWxlY3Rpb24gZGlhbG9nICovCisgICAgY2hhcl91CSpicm93c2VfZm5hbWU7CSAgICAvKiBmaWxlIG5hbWUgZnJvbSBmaWxlZGxnICovCisjZW5kaWYJLyogRkVBVF9HVUlfR1RLICovCisKKyNpZmRlZiBGRUFUX0ZPT1RFUgorICAgIGludAkJZm9vdGVyX2hlaWdodDsJICAgIC8qIGhlaWdodCBvZiB0aGUgbWVzc2FnZSBmb290ZXIgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1RPT0xCQVIpIFwKKwkmJiAoZGVmaW5lZChGRUFUX0dVSV9BVEhFTkEpIHx8IGRlZmluZWQoRkVBVF9HVUlfTU9USUYpKQorICAgIGludAkJdG9vbGJhcl9oZWlnaHQ7CSAgICAvKiBoZWlnaHQgb2YgdGhlIHRvb2xiYXIgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9CRVZBTF9USVAKKyAgICAvKiBUb29sdGlwIHByb3BlcnRpZXM7IGFsc28gdXNlZCBmb3IgYmFsbG9vbiBldmFsdWF0aW9uICovCisgICAgY2hhcl91CSpyc3JjX3Rvb2x0aXBfZm9udF9uYW1lOyAvKiB0b29sdGlwIGZvbnQgbmFtZSAqLworICAgIGNoYXIJKnJzcmNfdG9vbHRpcF9mZ19uYW1lOwkvKiB0b29sdGlwIGZvcmVncm91bmQgY29sb3IgbmFtZSAqLworICAgIGNoYXIJKnJzcmNfdG9vbHRpcF9iZ19uYW1lOwkvKiB0b29sdGlwIGJhY2tncm91bmQgY29sb3IgbmFtZSAqLworICAgIGd1aWNvbG9yX1QJdG9vbHRpcF9mZ19waXhlbDsJLyogdG9vbHRpcCBmb3JlZ3JvdW5kIGNvbG9yICovCisgICAgZ3VpY29sb3JfVAl0b29sdGlwX2JnX3BpeGVsOwkvKiB0b29sdGlwIGJhY2tncm91bmQgY29sb3IgKi8KKyAgICBYRm9udFNldAl0b29sdGlwX2ZvbnRzZXQ7CS8qIHRvb2x0aXAgZm9udHNldCAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSV9NU1dJTgorICAgIEd1aUZvbnQJY3VyckZvbnQ7CSAgICAvKiBDdXJyZW50IGZvbnQgKi8KKyAgICBndWljb2xvcl9UCWN1cnJGZ0NvbG9yOwkgICAgLyogQ3VycmVudCBmb3JlZ3JvdW5kIHRleHQgY29sb3IgKi8KKyAgICBndWljb2xvcl9UCWN1cnJCZ0NvbG9yOwkgICAgLyogQ3VycmVudCBiYWNrZ3JvdW5kIHRleHQgY29sb3IgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUlfQkVPUworICAgIFZpbUFwcCAgICAgKnZpbUFwcDsKKyAgICBWaW1XaW5kb3cgICp2aW1XaW5kb3c7CisgICAgVmltRm9ybVZpZXcgKnZpbUZvcm07CisgICAgVmltVGV4dEFyZWFWaWV3ICp2aW1UZXh0QXJlYTsKKyAgICBpbnQJCXZkY21wOwkJICAgIC8qIFZpbSBEaXJlY3QgQ29tbXVuaWNhdGlvbiBNZXNzYWdlIFBvcnQgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUlfTUFDCisgICAgV2luZG93UHRyCVZpbVdpbmRvdzsKKyAgICBNZW51SGFuZGxlCU1hY09TSGVscE1lbnU7CSAgICAvKiBIZWxwIG1lbnUgcHJvdmlkZWQgYnkgdGhlIE1hY09TICovCisgICAgaW50CQlNYWNPU0hlbHBJdGVtczsJICAgIC8qIE5yIG9mIGhlbHAtaXRlbXMgc3VwcGxpZWQgYnkgTWFjT1MgKi8KKyAgICBpbnQJCU1hY09TSGF2ZUNudHhNZW51OyAgLyogQ29udGV4dHVhbCBtZW51IGF2YWlsYWJsZSAqLworICAgIFdpbmRvd1B0cgl3aWQ7CQkgICAgLyogV2luZG93IGlkIG9mIHRleHQgYXJlYSAqLworICAgIGludAkJdmlzaWJpbGl0eTsJICAgIC8qIElzIHdpbmRvdyBwYXJ0aWFsbHkvZnVsbHkgb2JzY3VyZWQ/ICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9HVUlfQU1JR0EpCisgICAgc3RydWN0IFdpbmRvdyAqd2luZG93OwkJLyogYSBoYW5kbGUgdG8gdGhlIGFtaWdhIHdpbmRvdyAqLworICAgIHN0cnVjdCBNZW51CSAgKm1lbnU7CQkvKiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG1lbnUgKi8KKyAgICBzdHJ1Y3QgVGV4dEZvbnQgKnRleHRmb250OwkJLyogYSBwb2ludGVyIHRvIHRoZSBmb250IHN0cnVjdHVyZSAqLworI2VuZGlmCisKKyNpZmRlZiBSSVNDT1MKKyAgICBpbnQJCXdpbmRvd19oYW5kbGU7CisgICAgY2hhcl91CSp3aW5kb3dfdGl0bGU7CisgICAgaW50CQl3aW5kb3dfdGl0bGVfc2l6ZTsKKyAgICBpbnQJCWZnX2NvbG91cjsJCS8qIGluIDB4QkJHR1JSIGZvcm1hdCAqLworICAgIGludAkJYmdfY29sb3VyOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSV9QSE9UT04KKyAgICBQdFdpZGdldF90CSp2aW1XaW5kb3c7CQkvKiBQdFdpbmRvdyAqLworICAgIFB0V2lkZ2V0X3QJKnZpbVRleHRBcmVhOwkJLyogUHRSYXcgKi8KKyAgICBQdFdpZGdldF90CSp2aW1Db250YWluZXI7CQkvKiBQdFBhbmVsICovCisjIGlmIGRlZmluZWQoRkVBVF9NRU5VKSB8fCBkZWZpbmVkKEZFQVRfVE9PTEJBUikKKyAgICBQdFdpZGdldF90CSp2aW1Ub29sQmFyR3JvdXA7CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTUVOVQorICAgIFB0V2lkZ2V0X3QJKnZpbU1lbnVCYXI7CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfVE9PTEJBUgorICAgIFB0V2lkZ2V0X3QJKnZpbVRvb2xCYXI7CisgICAgaW50CQl0b29sYmFyX2hlaWdodDsKKyMgZW5kaWYKKyAgICBQaEV2ZW50X3QJKmV2ZW50X2J1ZmZlcjsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9YSU0KKyAgICBjaGFyCSpyc3JjX2lucHV0X21ldGhvZDsKKyAgICBjaGFyCSpyc3JjX3ByZWVkaXRfdHlwZV9uYW1lOworI2VuZGlmCit9IGd1aV9UOworCitleHRlcm4gZ3VpX1QgZ3VpOwkJCS8qIHRoaXMgaXMgZGVmaW5lZCBpbiBndWkuYyAqLworCisvKiBkZWZpbml0aW9ucyBvZiBhdmFpbGFibGUgd2luZG93IHBvc2l0aW9uaW5ncyBmb3IgZ3VpXypfcG9zaXRpb25faW5fcGFyZW50KCkKKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgVldfUE9TX01PVVNFLAorICAgIFZXX1BPU19DRU5URVIsCisgICAgVldfUE9TX1RPUF9DRU5URVIKK30KK2d1aV93aW5fcG9zX1Q7CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX01PVElGKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykgXAorCXx8IGRlZmluZWQoTVNXSU5fRklORF9SRVBMQUNFKQorLyoKKyAqIEZsYWdzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggdGhlIGRpZmZlcmVudCBjb250ZXh0cyBpbiB3aGljaCB0aGUKKyAqIGZpbmQvcmVwbGFjZSBjYWxsYmFjayBtYXkgYmUgY2FsbGVkLgorICovCisjIGRlZmluZSBGUkRfRklORE5FWFQJMQkvKiBGaW5kIG5leHQgaW4gZmluZCBkaWFsb2cgKi8KKyMgZGVmaW5lIEZSRF9SX0ZJTkRORVhUCTIJLyogRmluZCBuZXh0IGluIHJlcGwgZGlhbG9nICovCisjIGRlZmluZSBGUkRfUkVQTEFDRQkzCS8qIFJlcGxhY2Ugb25jZSAqLworIyBkZWZpbmUgRlJEX1JFUExBQ0VBTEwJNAkvKiBSZXBsYWNlIHJlbWFpbmluZyBtYXRjaGVzICovCisjIGRlZmluZSBGUkRfVU5ETwk1CS8qIFVuZG8gcmVwbGFjZWQgdGV4dCAqLworIyBkZWZpbmUgRlJEX1RZUEVfTUFTSyAgIDcJLyogTWFzayBmb3IgdGhlIGNhbGxiYWNrIHR5cGUgKi8KKy8qIEZsYWdzIHdoaWNoIGNoYW5nZSB0aGUgd2F5IHNlYXJjaGluZyBpcyBkb25lLiAqLworIyBkZWZpbmUgRlJEX1dIT0xFX1dPUkQJMHgwOAkvKiBtYXRjaCB3aG9sZSB3b3JkIG9ubHkgKi8KKyMgZGVmaW5lIEZSRF9NQVRDSF9DQVNFCTB4MTAJLyogbWF0Y2ggY2FzZSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZ3VpX2FtaWdhLmMgYi9zcmMvZ3VpX2FtaWdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3ODZhYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfYW1pZ2EuYwpAQCAtMCwwICsxLDE3OTUgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCQlBbWlnYSBHVUkgc3VwcG9ydCBieSBNaWNoYWVsIE5pZWxzZW4KKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGV4ZWMvdHlwZXMuaD4KKyNpbmNsdWRlIDxpbnR1aXRpb24vaW50dWl0aW9uLmg+CisjaW5jbHVkZSA8dXRpbGl0eS90YWdpdGVtLmg+CisjaW5jbHVkZSA8Z3JhcGhpY3MvdGV4dC5oPgorI2luY2x1ZGUgPGdyYXBoaWNzL3Jhc3Rwb3J0Lmg+CisjaW5jbHVkZSA8Z3JhcGhpY3MvbGF5ZXJzLmg+CisjaW5jbHVkZSA8cHJvdG8vaW50dWl0aW9uLmg+CisjaW5jbHVkZSA8cHJvdG8vZ3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxwcm90by9sYXllcnMuaD4KKyNpbmNsdWRlIDxkZXZpY2VzL3RpbWVyLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSAidmltLmgiCisjaW5jbHVkZSAiZ3VpX2FtaWdhLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaWZkZWYgX19BUk9TX18KKyNpbmNsdWRlIDxhcm9zL2RlYnVnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInZlcnNpb24uaCIKKworI2lmIGRlZmluZWQoRkVBVF9HVUlfQU1JR0EpIHx8IGRlZmluZWQoUFJPVE8pCisKKyNkZWZpbmUgS0VZVVAJCTc2CisjZGVmaW5lIEtFWURPV04JCTc3CisjZGVmaW5lIEtFWVJJR0hUCTc4CisjZGVmaW5lIEtFWUxFRlQJCTc5CisjZGVmaW5lIEtFWUJBQ0tTUEFDRQkweDQxCisjZGVmaW5lIEtFWURFTEVURQkweDQ2CisjZGVmaW5lIEtFWUlOU0VSVAkweDQ3CisjZGVmaW5lIEtFWUhPTUUJCTB4NzAKKyNkZWZpbmUgS0VZRU5ECQkweDcxCisjZGVmaW5lIEtFWVdIRUVMVVAJMHg3QQorI2RlZmluZSBLRVlXSEVFTERPV04JMHg3QgorCisvKiBXaGVuIGdlbmVyYXRpbmcgcHJvdG90eXBlcyBvbiBVbml4LCB0aGVzZSBuZWVkIHRvIGJlIGRlZmluZWQgKi8KKyNpZmRlZiBQUk9UTworIyBkZWZpbmUgU1RSUFRSIGNoYXIgKgorIyBkZWZpbmUgQk9PTCBpbnQKKyMgZGVmaW5lIFVCWVRFIGludAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgUHJvcEluZm8gR2FkZ2V0MlNJbmZvID0geyBBVVRPS05PQitQUk9QQk9SREVSTEVTUytGUkVFVkVSVCtQUk9QTkVXTE9PSywgMCwgMCwgTUFYQk9EWSwgTUFYQk9EWSwgfTsKKy8vc3RhdGljIHN0cnVjdCBJbWFnZSBJbWFnZTEgPSB7IDAsIDAsIDEwLCAzOTcsCTAsIE5VTEwsIDB4MDAwMCwgMHgwMDAwLCBOVUxMIH07CitzdGF0aWMgc3RydWN0IEdhZGdldCBwcm9wR2FkZ2V0ID0geyBOVUxMLCAtMTIsIDE1LCAxMCwgLTI4LAorCUdGTEdfUkVMUklHSFQrR0ZMR19SRUxIRUlHSFQsCisJR0FDVF9SRUxWRVJJRlkrR0FDVF9SSUdIVEJPUkRFUitHQUNUX0lNTUVESUFURSwKKwlHVFlQX1BST1BHQURHRVQrR1RZUF9HWlpHQURHRVQsCisJTlVMTCwgTlVMTCwKKwlOVUxMLCBOVUxMLCAoQVBUUikmR2FkZ2V0MlNJbmZvLCBOVUxMLCBOVUxMIH07CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXJlcXVlc3QgKlRpbWVySU87CitzdGF0aWMgc3RydWN0IE1zZ1BvcnQJICAqVGltZXJNUDsKK3N0YXRpYyBCT09MCQkgICBUaW1lclNlbnQ7CisKK3N0cnVjdCBHRlhCYXNlCQkqZ2Z4QmFzZTsKK3N0cnVjdCBFeGVjQmFzZQkJKmV4ZWNCYXNlOworc3RydWN0IExheWVyc0Jhc2UJKmxheWVyc0Jhc2U7CisKK3N0cnVjdCBNeUNvbG9yCit7CisgICAgV09SRCBwZW47CisgICAgQk9PTCBhbGxvY2VkOworfTsKKworc3RydWN0IE15Q29sb3IgTXlDb2xvclRhYmxlWzI1Nl07CisKK3N0cnVjdCBUYWdJdGVtIHRhZ3NbXSA9Cit7CisgICAge1dBX0xlZnQsIDB9LAorICAgIHtXQV9Ub3AsIDB9LAorICAgIHtXQV9XaWR0aCwgNDAwfSwKKyAgICB7V0FfSGVpZ2h0LCA0MDB9LAorICAgIHtXQV9UaXRsZSwgKFVMT05HKVZJTV9WRVJTSU9OX1NIT1JUfSwKKyAgICB7V0FfU2NyZWVuVGl0bGUsIChVTE9ORylWSU1fVkVSU0lPTl9MT05HfSwKKyAgICB7V0FfRHJhZ0JhciwgVFJVRX0sCQkJLyogZW5hYmxlIGRyYWdnaW5nIG9mIHRoZSB3aW5kb3cgKi8KKyAgICB7V0FfRGVwdGhHYWRnZXQsIFRSVUV9LAkJLyogZW5hYmxlIHRoZSBkZXB0aCBnYWRnZXQgKi8KKyAgICB7V0FfQ2xvc2VHYWRnZXQsIFRSVUV9LAkJLyogZW5hYmxlIHRoZSBjbG9zZSBnYWRnZXQqLworICAgIHtXQV9TaXplR2FkZ2V0LCBUUlVFfSwJCS8qIGVuYWJsZSB0aGUgc2l6ZSBnYWRnZXQgKi8KKyAgICB7V0FfU2l6ZUJCb3R0b20sIFRSVUV9LAkJLyogc2l6ZWdhZGdldCBjb250YWluZWQgaW4gYm90dG9tIGJvcmRlciAqLworICAgIHtXQV9TbWFydFJlZnJlc2gsIFRSVUV9LAkJLyogY2hvb3NlIHNtYXJ0IHJlZnJlc2gsIHNhdmVzIHVzIGRvaW5nIGEgbG90IG9mIHdvcmsgKi8KKyAgICB7V0FfUmVwb3J0TW91c2UsIFRSVUV9LAkJLyogUmVwb3J0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbW91c2UgKi8KKyAgICB7V0FfR2ltbWVaZXJvWmVybywgVFJVRX0sCisgICAge1dBX0FjdGl2YXRlLCBUUlVFfSwJCS8qIEFjdGl2YXRlIHdpbmRvdyBvbiBzdGFydHVwICovCisgICAge1dBX0FjdGl2YXRlLCBUUlVFfSwJCS8qIEFjdGl2YXRlIHdpbmRvdyBvbiBzdGFydHVwICovCisgICAge1dBX05vQ2FyZVJlZnJlc2gsIFRSVUV9LAkJLyogUmVmcmVzaCBzY3JlZW4sIGRvbid0IHRlbGwgdXMgKi8KKyAgICB7V0FfTmV3TG9va01lbnVzLCBUUlVFfSwJCS8qIHVzZSB0aGUgbmV3IG9wdGlvbnMgZm9yIHRoZSBtZW51ICovCisgICAge1dBX0F1dG9BZGp1c3QsIFRSVUV9LAkJLyogSWYgd2luZG93IGlzIHRvbyBiaWcgZm9yIHNjcmVlbiBhZGp1c3Qgc2l6ZSovCisgICAge1dBX05vQ2FyZVJlZnJlc2gsIFRSVUV9LAkJLyogSWYgd2luZG93IGlzIHRvbyBiaWcgZm9yIHNjcmVlbiBhZGp1c3Qgc2l6ZSovCisgICAge1dBX01vdXNlUXVldWUsIDF9LAkJCS8qIExpbWl0IG51bWJlciBvZiBwZW5kaW5nIG1vdXNlIG1vdmVtZW50Ki8KKyAgICB7V0FfUnB0UXVldWUsIDEwfSwJCQkvKiBMaW1pdCBudW1iZXIgb2YgcGVuZGluZyBrZXlzdHJva2VzKi8KKyAgICB7V0FfSURDTVAsCQkJCS8qIElEQ01QLCB3aGF0IGV2ZW50cyBpbnRlcmVzdCB1cyAgKi8KKwlJRENNUF9ORVdTSVpFCQkJLyogTm90aWZ5IHVzIGFib3V0IHNpemUgY2hhbmdlIG9mIHdpbmRvdyovCisJICAgIHxJRENNUF9SRUZSRVNIV0lORE9XCS8qIE5vdGlmeSB1cyB3aGVuIHRoZSB3aW5kb3cgbmVlZHMgcmVmcmVzaGluZyAqLworCSAgICB8SURDTVBfTU9VU0VCVVRUT05TCQkvKiBOb3RpZnkgdXMgd2hlbiB0aGUgbW91c2UgYnV0dG9ucyBoYXZlIGJlZW4gdXNlZCAqLworCSAgICB8SURDTVBfTU9VU0VNT1ZFCQkvKiBOb3RpZnkgdXMgd2hlbiB0aGUgbW91c2UgaXMgbW92aW5nICovCisJICAgIHxJRENNUF9HQURHRVRET1dOCQkvKiBOb3RpZnkgdXMgd2hlbiBhIGdhZGdldCBoYXMgYmVlbiBzZWxlY3RlZCAqLworCSAgICB8SURDTVBfR0FER0VUVVAJCS8qIE5vdGlmeSB1cyB3aGVuIGEgZ2FkZ2V0IGhhcyBiZWVuIHJlbGVhc2VkICovCisJICAgIHxJRENNUF9NRU5VUElDSwkJLyogTm90aWZ5IHVzIHdoZW4gYSBtZW51IGhhcyBiZWVuIHBpY2tlZCAqLworCSAgICB8SURDTVBfQ0xPU0VXSU5ET1cJCS8qIE5vdGlmeSB1cyB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIGNsb3NlIHRoZSB3aW5kb3cgKi8KKwkgICAgfElEQ01QX1ZBTklMTEFLRVkJCS8qIE5vdGlmeSB1cyBhYm91dCBrZXlzdHJva2VzICovCisJICAgIHxJRENNUF9SQVdLRVkJCS8qIE5vdGlmeSB1cyB3aGVuIHJhdyBrZXkgZXZlbnRzIGhhdmUgYmVlbiB1c2VkLCBpZSBjdXJzb3IqLworCSAgICB8SURDTVBfSU5UVUlUSUNLUwkJLyogU2ltcGxlciB0aW1lciBmb3IgdGhlIGJsaW5rIG9wdGlvbiAqLworCSAgICB8SURDTVBfTUVOVUhFTFAJCS8qIEFsbG93IHRoZSBoZWxwIGtleSB0byBiZSB1c2VkIGR1cmluZyBtZW51IGV2ZW50cyAqLworCSAgICB8SURDTVBfR0FER0VUSEVMUAkJLyogQWxsb3cgdGhlIGhlbHAga2V5IHRvIGJlIHVzZWQgZHVyaW5nIGdhZGdldCBldmVudHMgKi8KKwkgICAgfElEQ01QX0lOQUNUSVZFV0lORE9XCS8qIG5vdGlmeSBvZiBpbmFjdGl2ZSB3aW5kb3cgKi8KKwkgICAgfElEQ01QX0FDVElWRVdJTkRPVwkJLyogbm90aWZ5IG9mIGluYWN0aXZlIHdpbmRvdyAqLworICAgIH0sCisgICAge1RBR19ET05FLCBOVUxMfQorfTsKKworI2lmIGRlZmluZWQoRCkKKyN1bmRlZiBECisjZW5kaWYKKworLyojZGVmaW5lIEQoX21zZykgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgX21zZykqLworCisjZGVmaW5lIEQoX0EpCisjZGVmaW5lIGtwcmludGYocywgLi4uKQorCitzdGF0aWMgdm9pZCBBbWlnYUVycm9yKGNvbnN0IGNoYXIgKnN0cmluZyk7CisKK3ZvaWQgSGFuZGxlRXZlbnQodW5zaWduZWQgbG9uZyAqIG9iamVjdCk7CitzdGF0aWMgVUJZVEUgZ2V0cmVhbGNvbG9yKGd1aWNvbG9yX1QgaSk7CisKK3N0YXRpYyBzdHJ1Y3QgTmV3V2luZG93IHZpbU5ld1dpbmRvdyA9Cit7CisgICAgMCwgMCwJCS8qIHdpbmRvdyBYWSBvcmlnaW4gcmVsYXRpdmUgdG8gVG9wTGVmdCBvZiBzY3JlZW4gKi8KKyAgICAwLCAwLAkJLyogd2luZG93IHdpZHRoIGFuZCBoZWlnaHQgKi8KKyAgICAwLCAxLAkJLyogZGV0YWlsIGFuZCBibG9jayBwZW5zICovCisgICAgTlVMTCwJCS8qIElEQ01QIGZsYWdzICovCisgICAgTlVMTCwJCS8qIG90aGVyIHdpbmRvdyBmbGFncyAqLworICAgICZwcm9wR2FkZ2V0LAkvKiBmaXJzdCBnYWRnZXQgaW4gZ2FkZ2V0IGxpc3QgKi8KKyAgICBOVUxMLAkJLyogY3VzdG9tIENIRUNLTUFSSyBpbWFnZXJ5ICovCisgICAgIkFtaWdhIFZpbSBndWkiLAkvKiB3aW5kb3cgdGl0bGUgKi8KKyAgICBOVUxMLAkJLyogY3VzdG9tIHNjcmVlbiBwb2ludGVyICovCisgICAgTlVMTCwJCS8qIGN1c3RvbSBiaXRtYXAgKi8KKyAgICA1MCwgNTAsCQkvKiBtaW5pbXVtIHdpZHRoIGFuZCBoZWlnaHQgKi8KKyAgICAodW5zaWduZWQgc2hvcnQpLTEsICh1bnNpZ25lZCBzaG9ydCktMSwJLyogbWF4aW11bSB3aWR0aCBhbmQgaGVpZ2h0ICovCisgICAgV0JFTkNIU0NSRUVOCS8qIGRlc3RpbmF0aW9uIHNjcmVlbiB0eXBlICovCit9OworCitzdGF0aWMgc3RydWN0Cit7CisgICAgdW5zaWduZWQgaW50ICBrZXlfc3ltOworICAgIGNoYXJfdSAgdmltX2NvZGUwOworICAgIGNoYXJfdSAgdmltX2NvZGUxOworfSBzcGVjaWFsX2tleXNbXSA9Cit7CisgICAgezAsCQkgICAgMCwgMH0KK307CisKKyNpZiAwCisgICAgLyogbm90IHVzZWQ/ICovCisgICAgc3RhdGljIGludAoraGV4X2RpZ2l0KGludCBjKQoreworICAgIGlmIChpc2RpZ2l0KGMpKQorCXJldHVybiBjIC0gJzAnOworICAgIGMgPSBUT0xPV0VSX0FTQyhjKTsKKyAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCisJcmV0dXJuIGMgLSAnYScgKyAxMDsKKyAgICByZXR1cm4gLTEwMDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBjaGFyYWN0ZXJXaWR0aCA9IC0xOworc3RhdGljIGludCBjaGFyYWN0ZXJIZWlnaHQgPSAtMTsKK3N0YXRpYyBzdHJ1Y3QKK3sKKyAgICBCT09MCWFjdGl2ZTsKKyAgICBlbnVtCisgICAgeworCUN1cnNvck9mZiwKKwlDdXJzb3JPbiwKKwlDdXJzb3JXYWl0CisgICAgfQkJc3RhdGU7CisgICAgaW50CQlvblRpbWU7CisgICAgaW50CQlvZmZUaW1lOworICAgIGludAkJd2FpdFRpbWU7CisgICAgaW50CQljdXJyZW50OworfSBjdXJzb3IgPQoreworICAgIFRSVUUsCisgICAgQ3Vyc29yV2FpdCwKKyAgICAxMCwKKyAgICAxMCwKKyAgICA3LAorICAgIDAKK307CisKK2VudW0gRHJhd0JveE1vZGUKK3sKKyAgICBEQl9GaWxsZWQsCisgICAgREJfTm90RmlsbGVkCit9OworCisgICAgc3RhdGljIHZvaWQKK1RleHREaW1lbnNpb25zKHZvaWQpCit7CisgICAgc3RydWN0IFRleHRFeHRlbnQgdGV4dEV4dDsKKworICAgIFRleHRFeHRlbnQoZ3VpLndpbmRvdy0+UlBvcnQsICJzIiwgMSwgJnRleHRFeHQpOworCisgICAgY2hhcmFjdGVyV2lkdGggPSB0ZXh0RXh0LnRlX1dpZHRoOworICAgIGNoYXJhY3RlckhlaWdodCA9IHRleHRFeHQudGVfSGVpZ2h0OworfQorCisgICAgc3RhdGljIGludAorcG9zV2lkdGhDaGFyVG9Qb2ludChpbnQgd2lkdGgpCit7CisgICAgcmV0dXJuICh3aWR0aCkqY2hhcmFjdGVyV2lkdGg7Cit9CisKKyAgICBzdGF0aWMgaW50Citwb3NIZWlnaHRDaGFyVG9Qb2ludChpbnQgaGVpZ2h0KQoreworICAgIHJldHVybiAoaW50KShoZWlnaHQpKmNoYXJhY3RlckhlaWdodDsKK30KKworICAgIHN0YXRpYyBpbnQKK3Bvc1dpZHRoUG9pbnRUb0NoYXIoaW50IHdpZHRoKQoreworICAgIC8vcmV0dXJuIChpbnQpZmxvb3IoKGZsb2F0KXdpZHRoLyhmbG9hdCljaGFyYWN0ZXJXaWR0aCktMTsKKyAgICByZXR1cm4gd2lkdGggL2NoYXJhY3RlcldpZHRoOworfQorCisgICAgc3RhdGljIGludAorcG9zSGVpZ2h0UG9pbnRUb0NoYXIoaW50IGhlaWdodCkKK3sKKyAgICAvL3JldHVybiAoaW50KWZsb29yKChmbG9hdCloZWlnaHQvKGZsb2F0KWNoYXJhY3RlckhlaWdodCktMjsKKyAgICByZXR1cm4gaGVpZ2h0IC8gY2hhcmFjdGVySGVpZ2h0OworfQorCisgICAgc3RhdGljIGludAord2lkdGhDaGFyVG9Qb2ludChpbnQgd2lkdGgpCit7CisgICAgcmV0dXJuICh3aWR0aCkqKGNoYXJhY3RlcldpZHRoKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2hlaWdodENoYXJUb1BvaW50KGludCBoZWlnaHQpCit7CisgICAgcmV0dXJuIChoZWlnaHQpKmNoYXJhY3RlckhlaWdodDsKK30KKworICAgIHN0YXRpYyBpbnQKK3dpZHRoUG9pbnRUb0NoYXIoaW50IHdpZHRoKQoreworICAgIHJldHVybiAod2lkdGgpL2NoYXJhY3RlcldpZHRoOworfQorCisgICAgc3RhdGljIGludAoraGVpZ2h0UG9pbnRUb0NoYXIoaW50IGhlaWdodCkKK3sKKyAgICByZXR1cm4gKGhlaWdodCkvY2hhcmFjdGVySGVpZ2h0OworfQorCisgICAgc3RhdGljIHZvaWQKK3JlZnJlc2hCb3JkZXIodm9pZCkKK3sKKyAgICAvKldhaXRCT1ZQKGd1aS53aW5kb3ctPik7Ki8KKyAgICBSZWZyZXNoV2luZG93RnJhbWUoZ3VpLndpbmRvdyk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZHJhd0JveChlbnVtIERyYXdCb3hNb2RlIG1vZGUsIHVuc2lnbmVkIHNob3J0IGNvbCwgdW5zaWduZWQgc2hvcnQgcm93LCBpbnQgdywgaW50IGgsIGd1aWNvbG9yX1QgY29sb3IpCit7CisgICAgTE9ORyBhcGVuID0gR2V0QVBlbihndWkud2luZG93LT5SUG9ydCk7CisgICAgTE9ORyB4MSwgeTEsIHgyLCB5MjsKKwora3ByaW50ZigiIGRyYXdib3ggJWQsJWQgY29sb3IgJWRcbiIsIGNvbCwgcm93LCBjb2xvcik7CisKKyAgICBTZXRBUGVuKGd1aS53aW5kb3ctPlJQb3J0LCBnZXRyZWFsY29sb3IoY29sb3IpKTsKKworICAgIHgxID0gcG9zV2lkdGhDaGFyVG9Qb2ludChjb2wpOworICAgIHkxID0gcG9zSGVpZ2h0Q2hhclRvUG9pbnQocm93ICsgMSkgLSBoOworICAgIHgyID0geDEgKyB3IC0gMTsKKyAgICB5MiA9IHBvc0hlaWdodENoYXJUb1BvaW50KHJvdyArIDEpIC0gMTsKKworICAgIHN3aXRjaChtb2RlKQorICAgIHsKKwljYXNlIERCX0ZpbGxlZDoKKwkgICAgUmVjdEZpbGwoZ3VpLndpbmRvdy0+UlBvcnQsIHgxLCB5MSwgeDIsIHkyKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIERCX05vdEZpbGxlZDoKKwkgICAgTW92ZShndWkud2luZG93LT5SUG9ydCwgeDEsIHkxKTsKKwkgICAgRHJhdyhndWkud2luZG93LT5SUG9ydCwgeDIsIHkxKTsKKwkgICAgRHJhdyhndWkud2luZG93LT5SUG9ydCwgeDIsIHkyKTsKKwkgICAgRHJhdyhndWkud2luZG93LT5SUG9ydCwgeDEsIHkyKTsKKwkgICAgRHJhdyhndWkud2luZG93LT5SUG9ydCwgeDEsIHkxKTsKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgU2V0QVBlbihndWkud2luZG93LT5SUG9ydCwgYXBlbik7CisKK30KKworICAgIHN0YXRpYyBlbnVtIGV2ZW50CitFdmVudEhhbmRsZXIodm9pZCkKK3sKKyAgICBzdHJ1Y3QgSW50dWlNZXNzYWdlICptc2c7CisgICAgZW51bSBldmVudAkJcmV0dXJuRXZlbnQgPSBldl9JZ25vcmU7CisgICAgaW50CQkJY2xhc3MsIGNvZGU7CisgICAgc3RhdGljIGludAkJZHJhZ2dpbmcgPSAwOworICAgIHN0YXRpYyBpbnQJCW1vdXNlWCwgbW91c2VZOworICAgIGNoYXJfdQkJc3RyaW5nWzQwXTsKKyAgICBCT09MCQlxdWl0X3JlcXVlc3QgPSBGQUxTRTsKKworICAgIG1zZyA9IChzdHJ1Y3QgSW50dWlNZXNzYWdlICopR2V0TXNnKGd1aS53aW5kb3ctPlVzZXJQb3J0KTsKKworICAgIGlmICghbXNnKQorICAgIHsKKwlyZXR1cm5FdmVudCA9IGV2X051bGxFdmVudDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKworCWNsYXNzID0gbXNnLT5DbGFzczsKKwljb2RlID0gbXNnLT5Db2RlOworCisJc3dpdGNoKGNsYXNzKQorCXsKKwkgICAgY2FzZSBJRENNUF9JTlRVSVRJQ0tTOgorCQkvKgorCQkgICBpZiAoY3Vyc29yLmFjdGl2ZSkKKwkJICAgeworCQkgICBjdXJzb3IuY3VycmVudCArKzsKKwkJICAgaWYgKGN1cnNvci5zdGF0ZSA9PSBDdXJzb3JPZmYpCisJCSAgIHsKKwkJICAgcHJpbnRmKCJjdXJzb3IgdHVybmVkIG9uXG4iKTsKKwkJICAgaWYgKGN1cnNvci5vZmZUaW1lIDwgY3Vyc29yLmN1cnJlbnQpCisJCSAgIHsKKwkJICAgZ3VpX3VuZHJhd19jdXJzb3IoKTsKKwkJICAgY3Vyc29yLnN0YXRlID0gQ3Vyc29yT247CisJCSAgIGN1cnNvci5jdXJyZW50ID0gMDsKKwkJICAgfQorCQkgICB9CisJCSAgIGVsc2UgaWYgKGN1cnNvci5zdGF0ZSA9PSBDdXJzb3JPbikKKwkJICAgeworCQkgICBwcmludGYoImN1cnNvciB0dXJuZWQgb2ZmXG4iKTsKKwkJICAgaWYgKGN1cnNvci5vblRpbWUgPCBjdXJzb3IuY3VycmVudCkKKwkJICAgeworCQkgICBjdXJzb3Iuc3RhdGUgPSBDdXJzb3JPZmY7CisJCSAgIGd1aV91cGRhdGVfY3Vyc29yKEZBTFNFKTsKKwkJICAgY3Vyc29yLmN1cnJlbnQgPSAwOworCQkgICB9CisJCSAgIH0KKwkJICAgZWxzZSBpZiAoY3Vyc29yLnN0YXRlID09IEN1cnNvcldhaXQpCisJCSAgIHsKKwkJICAgcHJpbnRmKCJjdXJzb3IgdHVybmVkIFdhaXRcbiIpOworCQkgICBpZiAoY3Vyc29yLndhaXRUaW1lIDwgY3Vyc29yLmN1cnJlbnQpCisJCSAgIHsKKwkJICAgY3Vyc29yLnN0YXRlID0gQ3Vyc29yT247CisJCSAgIGN1cnNvci5jdXJyZW50ID0gMDsKKwkJICAgfQorCX0KKwl9CisJCSAgIGVsc2UKKwkJICAgeworCQkgICB9CisJCSAgIHJldHVybkV2ZW50ID0gZXZfSW50dWlUaWNrczsKKwkJICAgKi8KKwkJICAgYnJlYWs7CisKKwkgICAgY2FzZSBJRENNUF9NT1VTRUJVVFRPTlM6CisJCSAgIHsKKwkJICAgICAgIGludCB2aW1fbW9kaWZpZXJzPTA7CisJCSAgICAgICBEKCJNb3VzZSBidXR0b24gZXZlbnQgZGV0ZWN0ZWQiKTsKKwkJICAgICAgIHN3aXRjaCAobXNnLT5RdWFsaWZpZXIgKQorCQkgICAgICAgeworCQkJICAgY2FzZSBJRVFVQUxJRklFUl9MQUxUOgorCQkJICAgY2FzZSBJRVFVQUxJRklFUl9SQUxUOgorCQkJICAgICAgIEQoImRldGVjdGVkIGEgQWx0IGtleSIpOworCQkJICAgICAgIHZpbV9tb2RpZmllcnN8PU1PVVNFX0FMVDsKKwkJCSAgICAgICBicmVhazsKKworCQkJICAgY2FzZSBJRVFVQUxJRklFUl9MU0hJRlQ6CisJCQkgICBjYXNlIElFUVVBTElGSUVSX1JTSElGVDoKKwkJCSAgICAgICBEKCJkZXRlY3RlZCBhIFNoaWZ0IGtleSIpOworCQkJICAgICAgIHZpbV9tb2RpZmllcnN8PU1PVVNFX1NISUZUOworCQkJICAgICAgIGJyZWFrOworCQkJICAgY2FzZSBJRVFVQUxJRklFUl9DT05UUk9MOgorCQkJICAgICAgIEQoImRldGVjdGVkIGEgQ29udHJvbCBrZXkiKTsKKwkJCSAgICAgICB2aW1fbW9kaWZpZXJzIHw9IE1PVVNFX0NUUkw7CisJCQkgICAgICAgYnJlYWs7CisJCSAgICAgICB9CisJCSAgICAgICBpZiAoY29kZSA9PSBTRUxFQ1RET1dOKQorCQkgICAgICAgeworCQkJICAgRCgiU2VsZWN0IERvd24gZGV0ZWN0ZWRcbiIpOworCQkJICAgZHJhZ2dpbmcgPSAxOworCQkJICAgZ3VpX3NlbmRfbW91c2VfZXZlbnQoTU9VU0VfTEVGVCwKKwkJCQkgICBtb3VzZVggPSBtc2ctPk1vdXNlWCAtIGd1aS53aW5kb3ctPkJvcmRlckxlZnQsCisJCQkJICAgbW91c2VZID0gbXNnLT5Nb3VzZVkgLSBndWkud2luZG93LT5Cb3JkZXJUb3AsCisJCQkJICAgRkFMU0UsCisJCQkJICAgdmltX21vZGlmaWVycyk7CisJCQkgICAvKmd1aV9zdGFydF9oaWdobGlnaHQoSExfQUxMKTsqLworCQkgICAgICAgfQorCQkgICAgICAgZWxzZSBpZiAoY29kZSA9PSBTRUxFQ1RVUCkKKwkJICAgICAgIHsKKwkJCSAgIEQoIlNlbGVjdCBVUCBkZXRlY3RlZFxuIik7CisJCQkgICBkcmFnZ2luZyA9IDA7CisJCQkgICBndWlfc2VuZF9tb3VzZV9ldmVudChNT1VTRV9SRUxFQVNFLAorCQkJCSAgIG1zZy0+TW91c2VYIC0gZ3VpLndpbmRvdy0+Qm9yZGVyTGVmdCwKKwkJCQkgICBtc2ctPk1vdXNlWSAtIGd1aS53aW5kb3ctPkJvcmRlclRvcCwKKwkJCQkgICBGQUxTRSwgdmltX21vZGlmaWVycyk7CisJCQkgICAvKmd1aV9zdG9wX2hpZ2hsaWdodChtYXNrKTsqLworCQkgICAgICAgfQorCQkgICAgICAgcmV0dXJuRXZlbnQgPSBldl9Nb3VzZUJ1dHRvbnM7CisJCSAgICAgICBicmVhazsKKwkJICAgfQorCSAgICBjYXNlIElEQ01QX01PVVNFTU9WRToKKwkJICAgaWYgKChhYnMobW91c2VYLShtc2ctPk1vdXNlWCAtIGd1aS53aW5kb3ctPkJvcmRlckxlZnQpKSA+IGNoYXJhY3RlcldpZHRoKSB8fAorCQkgICAgICAgKGFicyhtb3VzZVktKG1zZy0+TW91c2VZIC0gZ3VpLndpbmRvdy0+Qm9yZGVyVG9wKSk+Y2hhcmFjdGVySGVpZ2h0KSkKKwkJICAgeworCQkgICAgICAgaW50IHZpbV9tb2RpZmllcnM9MDsKKworCQkgICAgICAgc3dpdGNoIChtc2ctPlF1YWxpZmllciApCisJCSAgICAgICB7CisJCQkgICBjYXNlIElFUVVBTElGSUVSX0xBTFQ6CisJCQkgICBjYXNlIElFUVVBTElGSUVSX1JBTFQ6CisJCQkgICAgICAgRCgiZGV0ZWN0ZWQgYSBBbHQga2V5Iik7CisJCQkgICAgICAgdmltX21vZGlmaWVyc3w9TU9VU0VfQUxUOworCQkJICAgICAgIGJyZWFrOworCisJCQkgICBjYXNlIElFUVVBTElGSUVSX0xTSElGVDoKKwkJCSAgIGNhc2UgSUVRVUFMSUZJRVJfUlNISUZUOgorCQkJICAgICAgIEQoImRldGVjdGVkIGEgU2hpZnQga2V5Iik7CisJCQkgICAgICAgdmltX21vZGlmaWVyc3w9TU9VU0VfU0hJRlQ7CisJCQkgICAgICAgYnJlYWs7CisJCQkgICBjYXNlIElFUVVBTElGSUVSX0NPTlRST0w6CisJCQkgICAgICAgRCgiZGV0ZWN0ZWQgYSBDb250cm9sIGtleSIpOworCQkJICAgICAgIHZpbV9tb2RpZmllcnMgfD0gTU9VU0VfQ1RSTDsKKwkJCSAgICAgICBicmVhazsKKwkJICAgICAgIH0KKworCQkgICAgICAgbW91c2VYID0gbXNnLT5Nb3VzZVggLSBndWkud2luZG93LT5Cb3JkZXJMZWZ0OworCQkgICAgICAgbW91c2VZID0gbXNnLT5Nb3VzZVkgLSBndWkud2luZG93LT5Cb3JkZXJUb3A7CisJCSAgICAgICBpZiAoIWRyYWdnaW5nKQorCQkgICAgICAgeworCQkJICAgZ3VpX3NlbmRfbW91c2VfZXZlbnQoTU9VU0VfU0VUUE9TLCBtb3VzZVgsIG1vdXNlWSwgRkFMU0UsIHZpbV9tb2RpZmllcnMpOworCQkJICAgYnJlYWs7CisJCSAgICAgICB9CisJCSAgICAgICBlbHNlCisJCSAgICAgICB7CisJCQkgICBEKCJkcmFnZ2luZ1xuIik7CisJCQkgICBndWlfc2VuZF9tb3VzZV9ldmVudChNT1VTRV9EUkFHLCBtb3VzZVgsIG1vdXNlWSwgRkFMU0UsIHZpbV9tb2RpZmllcnMpOworCQkgICAgICAgfQorCQkgICB9CisJCSAgIHJldHVybkV2ZW50ID0gZXZfTW91c2VNb3ZlOworCQkgICBicmVhazsKKwkgICAgY2FzZSBJRENNUF9WQU5JTExBS0VZOgora3ByaW50ZigiPT09dmFuaWxsYWtleSAlZFxuIiwgY29kZSk7CisJCSAgIHsKKwkJICAgICAgIHN0cmluZ1swXSA9IChjaGFyX3UpY29kZTsKKwkJICAgICAgIGlmIChjb2RlID09IENTSSkKKwkJICAgICAgIHsKKwkJCSAgIC8qIEluc2VydCBDU0kgYXMgS19DU0kuICBVbnRlc3RlZCEgKi8KKwkJCSAgIHN0cmluZ1sxXSA9IEtTX0VYVFJBOworCQkJICAgc3RyaW5nWzJdID0gKGludClLRV9DU0k7CisJCQkgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgMyk7CisJCSAgICAgICB9CisJCSAgICAgICBlbHNlIGlmIChjb2RlID09IDgpCisJCSAgICAgICB7CisJCQkgICAgc3RyaW5nWzBdID0gQ1NJOworCQkJICAgIHN0cmluZ1sxXSA9ICdrJzsKKwkJCSAgICBzdHJpbmdbMl0gPSAnYic7CisJCQkgICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIDMpOworCQkgICAgICAgfQorCQkgICAgICAgZWxzZSBpZiAoY29kZSA9PSAxMjcpCisJCSAgICAgICB7CisJCQkgICAgc3RyaW5nWzBdID0gQ1NJOworCQkJICAgIHN0cmluZ1sxXSA9ICdrJzsKKwkJCSAgICBzdHJpbmdbMl0gPSAnRCc7CisJCQkgICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIDMpOworCQkgICAgICAgfQorCQkgICAgICAgZWxzZQorCQkgICAgICAgeworCQkJICAgaW50CWxlbiA9IDE7CisKKwkJCSAgIGlmIChpbnB1dF9jb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorCQkJICAgICAgIGxlbiA9IGNvbnZlcnRfaW5wdXQoc3RyaW5nLCAxLCBzaXplb2Yoc3RyaW5nKSk7CisJCQkgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgbGVuKTsKKwkJICAgICAgIH0KKwkJICAgICAgIHJldHVybkV2ZW50ID0gZXZfS2V5U3Ryb2tlOworCQkgICAgICAgYnJlYWs7CisKKwkJY2FzZSBJRENNUF9SQVdLRVk6CisJCSAgICAgICBpZiAobXNnLT5RdWFsaWZpZXIgJiBJRVFVQUxJRklFUl9MU0hJRlQpCisJCSAgICAgICB7CisJCSAgICAgICB9CisJCSAgICAgICBlbHNlIGlmIChtc2ctPlF1YWxpZmllciAmIElFUVVBTElGSUVSX1JTSElGVCkKKwkJICAgICAgIHsKKwkJICAgICAgIH0KKwkJICAgICAgIGVsc2UgaWYgKG1zZy0+UXVhbGlmaWVyICYgSUVRVUFMSUZJRVJfQ09OVFJPTCkKKwkJICAgICAgIHsKKwkJCSAgIGlmIChjb2RlID09IDMzKQorCQkJICAgeworCQkJICAgICAgIHRyYXNoX2lucHV0X2J1ZigpOworCQkJICAgfQorCQkgICAgICAgfQorCQkgICAgICAgZWxzZSBpZiAobXNnLT5Db2RlID09IEtFWVVQKQorCQkgICAgICAgeworCQkJICAgc3RyaW5nWzBdID0gQ1NJOworCQkJICAgc3RyaW5nWzFdID0gJ2snOworCQkJICAgc3RyaW5nWzJdID0gJ3UnOworCQkJICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIDMpOworCQkgICAgICAgfQorCQkgICAgICAgZWxzZSBpZiAobXNnLT5Db2RlID09IEtFWUxFRlQpCisJCSAgICAgICB7CisJCQkgICBzdHJpbmdbMF0gPSBDU0k7CisJCQkgICBzdHJpbmdbMV0gPSAnayc7CisJCQkgICBzdHJpbmdbMl0gPSAnbCc7CisJCQkgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgMyk7CisJCSAgICAgICB9CisJCSAgICAgICBlbHNlIGlmIChtc2ctPkNvZGUgPT0gS0VZUklHSFQpCisJCSAgICAgICB7CitrcHJpbnRmKCIjIyBrZXlyaWdodCIpOworCQkJICAgc3RyaW5nWzBdID0gQ1NJOworCQkJICAgc3RyaW5nWzFdID0gJ2snOworCQkJICAgc3RyaW5nWzJdID0gJ3InOworCQkJICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIDMpOworCQkgICAgICAgfQorCQkgICAgICAgZWxzZSBpZiAobXNnLT5Db2RlID09IEtFWURPV04pCisJCSAgICAgICB7CisJCQkgICBzdHJpbmdbMF0gPSBDU0k7CisJCQkgICBzdHJpbmdbMV0gPSAnayc7CisJCQkgICBzdHJpbmdbMl0gPSAnZCc7CisJCQkgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgMyk7CisJCSAgICAgICB9CisJCSAgICAgICBlbHNlIGlmIChtc2ctPkNvZGUgPT0gS0VZQkFDS1NQQUNFKQorCQkgICAgICAgeworCQkJICAgc3RyaW5nWzBdID0gQ1NJOworCQkJICAgc3RyaW5nWzFdID0gJ2snOworCQkJICAgc3RyaW5nWzJdID0gJ2InOworCQkJICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIDMpOworCQkgICAgICAgfQorCQkgICAgICAgZWxzZSBpZiAobXNnLT5Db2RlID09IEtFWURFTEVURSkKKwkJICAgICAgIHsKKwkJCSAgIHN0cmluZ1swXSA9IENTSTsKKwkJCSAgIHN0cmluZ1sxXSA9ICdrJzsKKwkJCSAgIHN0cmluZ1syXSA9ICdEJzsKKwkJCSAgIGFkZF90b19pbnB1dF9idWYoc3RyaW5nLCAzKTsKKwkJICAgICAgIH0KKwkJICAgICAgIGVsc2UgaWYgKG1zZy0+Q29kZSA9PSBLRVlJTlNFUlQpCisJCSAgICAgICB7CisJCQkgICBzdHJpbmdbMF0gPSBDU0k7CisJCQkgICBzdHJpbmdbMV0gPSAnayc7CisJCQkgICBzdHJpbmdbMl0gPSAnSSc7CisJCQkgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgMyk7CisJCSAgICAgICB9CisJCSAgICAgICBlbHNlIGlmIChtc2ctPkNvZGUgPT0gS0VZSE9NRSkKKwkJICAgICAgIHsKKwkJCSAgIHN0cmluZ1swXSA9IENTSTsKKwkJCSAgIHN0cmluZ1sxXSA9ICdrJzsKKwkJCSAgIHN0cmluZ1syXSA9ICdoJzsKKwkJCSAgIGFkZF90b19pbnB1dF9idWYoc3RyaW5nLCAzKTsKKwkJICAgICAgIH0KKwkJICAgICAgIGVsc2UgaWYgKG1zZy0+Q29kZSA9PSBLRVlFTkQpCisJCSAgICAgICB7CisJCQkgICBzdHJpbmdbMF0gPSBDU0k7CisJCQkgICBzdHJpbmdbMV0gPSAnQCc7CisJCQkgICBzdHJpbmdbMl0gPSAnNyc7CisJCQkgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgMyk7CisJCSAgICAgICB9CisJCSAgICAgICBlbHNlIGlmIChtc2ctPkNvZGUgPT0gS0VZV0hFRUxVUCkKKwkJICAgICAgIHsKKwkJCSAgIGludCB2aW1fbW9kaWZpZXJzPTA7CisKKwkJCSAgIHN3aXRjaCAobXNnLT5RdWFsaWZpZXIgKQorCQkJICAgeworCQkJICAgICAgIGNhc2UgSUVRVUFMSUZJRVJfTEFMVDoKKwkJCSAgICAgICBjYXNlIElFUVVBTElGSUVSX1JBTFQ6CisJCQkJICAgRCgiZGV0ZWN0ZWQgYSBBbHQga2V5Iik7CisJCQkJICAgdmltX21vZGlmaWVyc3w9TU9VU0VfQUxUOworCQkJCSAgIGJyZWFrOworCisJCQkgICAgICAgY2FzZSBJRVFVQUxJRklFUl9MU0hJRlQ6CisJCQkgICAgICAgY2FzZSBJRVFVQUxJRklFUl9SU0hJRlQ6CisJCQkJICAgRCgiZGV0ZWN0ZWQgYSBTaGlmdCBrZXkiKTsKKwkJCQkgICB2aW1fbW9kaWZpZXJzfD1NT1VTRV9TSElGVDsKKwkJCQkgICBicmVhazsKKwkJCSAgICAgICBjYXNlIElFUVVBTElGSUVSX0NPTlRST0w6CisJCQkJICAgRCgiZGV0ZWN0ZWQgYSBDb250cm9sIGtleSIpOworCQkJCSAgIHZpbV9tb2RpZmllcnMgfD0gTU9VU0VfQ1RSTDsKKwkJCQkgICBicmVhazsKKwkJCSAgIH0KKwkJCSAgIGd1aV9zZW5kX21vdXNlX2V2ZW50KE1PVVNFXzQsIDAsIDEsIEZBTFNFLCB2aW1fbW9kaWZpZXJzKTsKKworCQkgICAgICAgfQorCQkgICAgICAgZWxzZSBpZiAobXNnLT5Db2RlID09IEtFWVdIRUVMRE9XTikKKwkJICAgICAgIHsKKwkJCSAgIGludCB2aW1fbW9kaWZpZXJzPTA7CisKKwkJCSAgIHN3aXRjaCAobXNnLT5RdWFsaWZpZXIgKQorCQkJICAgeworCQkJICAgICAgIGNhc2UgSUVRVUFMSUZJRVJfTEFMVDoKKwkJCSAgICAgICBjYXNlIElFUVVBTElGSUVSX1JBTFQ6CisJCQkJICAgRCgiZGV0ZWN0ZWQgYSBBbHQga2V5Iik7CisJCQkJICAgdmltX21vZGlmaWVyc3w9TU9VU0VfQUxUOworCQkJCSAgIGJyZWFrOworCisJCQkgICAgICAgY2FzZSBJRVFVQUxJRklFUl9MU0hJRlQ6CisJCQkgICAgICAgY2FzZSBJRVFVQUxJRklFUl9SU0hJRlQ6CisJCQkJICAgRCgiZGV0ZWN0ZWQgYSBTaGlmdCBrZXkiKTsKKwkJCQkgICB2aW1fbW9kaWZpZXJzfD1NT1VTRV9TSElGVDsKKwkJCQkgICBicmVhazsKKwkJCSAgICAgICBjYXNlIElFUVVBTElGSUVSX0NPTlRST0w6CisJCQkJICAgRCgiZGV0ZWN0ZWQgYSBDb250cm9sIGtleSIpOworCQkJCSAgIHZpbV9tb2RpZmllcnMgfD0gTU9VU0VfQ1RSTDsKKwkJCQkgICBicmVhazsKKwkJCSAgIH0KKwkJCSAgIGd1aV9zZW5kX21vdXNlX2V2ZW50KE1PVVNFXzUsIDAsIDEsIEZBTFNFLCB2aW1fbW9kaWZpZXJzKTsKKwkJICAgICAgIH0KKworCQkgICAgICAgcmV0dXJuRXZlbnQgPSBldl9LZXlTdHJva2U7CisJCSAgICAgICBicmVhazsKKwkJICAgfQorCSAgICBjYXNlIElEQ01QX01FTlVWRVJJRlk6CisJCSAgIHJldHVybkV2ZW50ID0gZXZfTWVudVZlcmlmeTsKKwkJICAgLyogTWVudSB2ZXJpZmljYXRpb24gcmVxdWVzdGVkICovCisJCSAgIHN3aXRjaCAoY29kZSkKKwkJICAgeworCQkgICAgICAgY2FzZSBNRU5VV0FJVElORzoKKwkJCSAgIC8qCisJCQkgICAgKiogSXQncyBub3QgZm9yIHVzLCB0aGUgdXNlciBpcyBhY2Nlc3NpbmcgYW5vdGhlcgorCQkJICAgICoqIHByb2dyYW1zIG1lbnUsIHRoaXMgaXMgYSBnb29kIHRpbWUgdG8gZG8gc29tZQorCQkJICAgICoqIGNsZWFudXAgZXRjCisJCQkgICAgKi8KKwkJCSAgIGJyZWFrOworCQkgICAgICAgY2FzZSBNRU5VSE9UOgorCQkJICAgLyoKKwkJCSAgICAqKiBJdCBpcyBvdXIgbWVudSB0aGF0IGlzIGdvaW5nIGhvdCwgd2UgaGF2ZSBrb250cm9sCisJCQkgICAgKiogTWVudSBhY3Rpb24gY2FuIGJlIGNhbmNlbGxlZCBieQorCQkJICAgICoqIG1zZy0+Q29kZSA9IE1FTlVDQU5DRUw7CisJCQkgICAgKi8KKwkJCSAgIGJyZWFrOworCQkgICAgICAgZGVmYXVsdDoKKwkJCSAgIGJyZWFrOworCQkgICB9CisJCSAgIGJyZWFrOworCSAgICBjYXNlIElEQ01QX01FTlVQSUNLOgorCQkgICByZXR1cm5FdmVudCA9IGV2X01lbnVQaWNrOworCQkgICB7CisJCSAgICAgICAvKgorCQkJKiogb25lIG9mIG91ciBtZW51J3MgaGF2ZSBiZWVuIHNlbGVjdGVkLCBsZXQncyBmaW5kIG91dCB3aGljaAorCQkJKi8KKwkJICAgICAgIHVuaW9uIG15TWVudUl0ZW1VbmlvbiAqaXRlbTsKKwkJICAgICAgIGludCBtZW51TnVtYmVyOworCisJCSAgICAgICBtZW51TnVtYmVyID0gY29kZTsKKworCQkgICAgICAgaXRlbSA9ICh1bmlvbiBteU1lbnVJdGVtVW5pb24gKikgSXRlbUFkZHJlc3MoZ3VpLm1lbnUsIG1lbnVOdW1iZXIpOworCisKKwkJICAgICAgIGlmIChpdGVtKQorCQkgICAgICAgeworCQkJICAgZ3VpX21lbnVfY2IoaXRlbS0+bXlNZW51SXRlbS5ndWlNZW51KTsKKwkJICAgICAgIH0KKwkJICAgfQorCQkgICBicmVhazsKKwkgICAgY2FzZSBJRENNUF9DTE9TRVdJTkRPVzoKKwkJICAgIHF1aXRfcmVxdWVzdCA9IFRSVUU7CisJCSAgICBicmVhazsKKworCSAgICBjYXNlIElEQ01QX05FV1NJWkU6CisJCSAgIHsKKwkJICAgICAgIGludCBjeCwgY3k7CisJCSAgICAgICAvL2N4ID0gd2lkdGhQb2ludFRvQ2hhcihndWkud2luZG93LT5HWlpXaWR0aCk7CisJCSAgICAgICAvL2N5ID0gaGVpZ2h0UG9pbnRUb0NoYXIoZ3VpLndpbmRvdy0+R1paSGVpZ2h0KTsKKworCQkgICAgICAgY3ggPSBndWkud2luZG93LT5HWlpXaWR0aDsKKwkJICAgICAgIGN5ID0gZ3VpLndpbmRvdy0+R1paSGVpZ2h0IC0gY2hhcmFjdGVySGVpZ2h0OworCisJCSAgICAgICBndWlfcmVzaXplX3NoZWxsKGN4LCBjeSk7CisKKwkJICAgICAgIHJldHVybkV2ZW50ID0gZXZfTmV3U2l6ZTsKKwkJICAgICAgIGJyZWFrOworCQkgICB9CisJICAgIGNhc2UgSURDTVBfUkVGUkVTSFdJTkRPVzoKKwkJICAgcmVmcmVzaEJvcmRlcigpOworCQkgICByZXR1cm5FdmVudCA9IGV2X1JlZnJlc2hXaW5kb3c7CisJCSAgIGJyZWFrOworCSAgICBjYXNlIElEQ01QX0dBREdFVERPV046CisJCSAgIHJldHVybkV2ZW50ID0gZXZfR2FkZ2V0RG93bjsKKwkJICAgYnJlYWs7CisJICAgIGNhc2UgSURDTVBfR0FER0VUVVA6CisJCSAgIHJldHVybkV2ZW50ID0gZXZfR2FkZ2V0VXA7CisJCSAgIGJyZWFrOworCSAgICBjYXNlIElEQ01QX01FTlVIRUxQOgorCQkgICByZXR1cm5FdmVudCA9IGV2X01lbnVIZWxwOworCQkgICBicmVhazsKKwkgICAgY2FzZSBJRENNUF9HQURHRVRIRUxQOgorCQkgICByZXR1cm5FdmVudCA9IGV2X0dhZGdldEhlbHA7CisJCSAgIGJyZWFrOworCSAgICBjYXNlIElEQ01QX0lOQUNUSVZFV0lORE9XOgorCQkgICBndWkuaW5fZm9jdXMgPSBGQUxTRTsKKwkJICAgZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworCQkgICBicmVhazsKKworCSAgICBjYXNlIElEQ01QX0FDVElWRVdJTkRPVzoKKwkJICAgZ3VpLmluX2ZvY3VzID0gVFJVRTsKKwkJICAgZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworCQkgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJICAgYnJlYWs7CisJfQorCVJlcGx5TXNnKChzdHJ1Y3QgTWVzc2FnZSopbXNnKTsKKyAgICB9CisKKyAgICBpZiAocXVpdF9yZXF1ZXN0KQorICAgIHsKKwlnZXRvdXQoMCk7IC8vIGd1aV9tY2hfZXhpdCgxKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dXJuRXZlbnQ7CisgICAgLyogbW91c2UgcG9zaXRpbiBndWkud2luZG93LT5Nb3NlWSwgZ3VpLndpbmRvdy0+TW91c2VYKSAqLworfQorCisgICAgc3RhdGljIGludAorY2hlY2tFdmVudEhhbmRsZXIodm9pZCkKK3sKKyAgICBlbnVtIGV2ZW50IGhhcHBlbmVkOworCisgICAgZG8KKyAgICB7CisJaGFwcGVuZWQgPSBFdmVudEhhbmRsZXIoKSA7CisgICAgfQorICAgIHdoaWxlICAoaGFwcGVuZWQgIT0gZXZfTnVsbEV2ZW50KTsKKworICAgIHJldHVybiBPSzsKK30KKworICAgIHN0YXRpYyBpbnQKK2NoYXJFdmVudEhhbmRsZXIoaW50IHd0aW1lKQoreworICAgIGVudW0gZXZlbnQgaGFwcGVuZWQ7CisgICAgaW50IHJjOworCisgICAgZG8KKyAgICB7CisJV2FpdCgxPDxndWkud2luZG93LT5Vc2VyUG9ydC0+bXBfU2lnQml0KTsKKworCWhhcHBlbmVkID0gRXZlbnRIYW5kbGVyKCkgOworICAgIH0KKyAgICB3aGlsZSAoKGhhcHBlbmVkICE9IGV2X0ludHVpVGlja3MpICYmIChoYXBwZW5lZCAhPSBldl9LZXlTdHJva2UpICYmIChoYXBwZW5lZCAhPSBldl9NZW51UGljaykgJiYgKGhhcHBlbmVkICE9IGV2X01vdXNlTW92ZSkgJiYoaGFwcGVuZWQgIT0gZXZfTW91c2VCdXR0b25zKSApOworCisgICAgaWYgKGhhcHBlbmVkID09IGV2X0tleVN0cm9rZSB8fCBoYXBwZW5lZCA9PSBldl9NZW51UGljaykKKwlyYyA9IE9LOworICAgIGVsc2UKKwlyYyA9IEZBSUw7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIGFkZCBwcmltYXJ5IG1lbnUKKyAqLworICAgIHZvaWQKK2d1aV9tY2hfYWRkX21lbnVfaXRlbSh2aW1tZW51X1QgKm1lbnUsIGludCBpZHgpCit7CisgICAgdW5pb24gbXlNZW51SXRlbVVuaW9uICptZW51SXRlbVVuaW9uID0gTlVMTDsKKyAgICBzdHJ1Y3QgSW50dWlUZXh0ICptZW51dGV4dCA9IE5VTEw7CisgICAgdmltbWVudV9UICpwYXJlbnQ7CisKKyAgICBhc3NlcnQobWVudSAhPSBOVUxMKTsKKyAgICBhc3NlcnQobWVudS0+cGFyZW50ICE9IE5VTEwpOworICAgIHBhcmVudCA9IG1lbnUtPnBhcmVudDsKKworICAgIC8qIERvbid0IGFkZCBtZW51IHNlcGFyYXRvciAqLworICAgIGlmIChtZW51X2lzX3NlcGFyYXRvcihtZW51LT5uYW1lKSkKKwlyZXR1cm47CisKKyAgICBpZiAocGFyZW50LT5tZW51SXRlbVB0ciA9PSBOVUxMKQorCXJldHVybjsKKworICAgIC8qIFRPRE86IHVzZSBtZW51LT5tbmVtb25pYyBhbmQgbWVudS0+YWN0ZXh0ICovCisgICAgbWVudXRleHQgPSAoc3RydWN0IEludHVpVGV4dCAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBJbnR1aVRleHQpKTsKKworICAgIFNldEF0dHJpYihtZW51dGV4dCwgRnJvbnRQZW4sIDMpOworICAgIFNldEF0dHJpYihtZW51dGV4dCwgQmFja1BlbiwgMSk7CisgICAgU2V0QXR0cmliKG1lbnV0ZXh0LCBEcmF3TW9kZSwgQ09NUExFTUVOVCk7CisgICAgU2V0QXR0cmliKG1lbnV0ZXh0LCBMZWZ0RWRnZSwgMCk7CisgICAgU2V0QXR0cmliKG1lbnV0ZXh0LCBUb3BFZGdlLCAwKTsKKyAgICBTZXRBdHRyaWIobWVudXRleHQsIElUZXh0Rm9udCwgTlVMTCk7CisgICAgU2V0QXR0cmliKG1lbnV0ZXh0LCBOZXh0VGV4dCwgTlVMTCk7CisKKyAgICBtZW51SXRlbVVuaW9uID0gbWFsbG9jKHNpemVvZigqbWVudUl0ZW1VbmlvbikpOworCisgICAgU2V0QXR0cmliKCZtZW51SXRlbVVuaW9uLT5tZW51SXRlbSwgTmV4dEl0ZW0sIHBhcmVudC0+bWVudUl0ZW1QdHIpOworICAgIFNldEF0dHJpYigmbWVudUl0ZW1Vbmlvbi0+bWVudUl0ZW0sIExlZnRFZGdlLCAwKTsKKyAgICBTZXRBdHRyaWIoJm1lbnVJdGVtVW5pb24tPm1lbnVJdGVtLCBXaWR0aCwgY2hhcmFjdGVyV2lkdGgqc3RybGVuKG1lbnUtPmRuYW1lKSk7CisgICAgU2V0QXR0cmliKCZtZW51SXRlbVVuaW9uLT5tZW51SXRlbSwgSGVpZ2h0LCBjaGFyYWN0ZXJIZWlnaHQrMik7CisgICAgU2V0QXR0cmliKCZtZW51SXRlbVVuaW9uLT5tZW51SXRlbSwgRmxhZ3MsIElURU1URVhUK0lURU1FTkFCTEVEK0hJR0hDT01QKTsKKyAgICBTZXRBdHRyaWIoJm1lbnVJdGVtVW5pb24tPm1lbnVJdGVtLCBNdXR1YWxFeGNsdWRlLCAwKTsKKyAgICBTZXRBdHRyaWIoJm1lbnVJdGVtVW5pb24tPm1lbnVJdGVtLCBJdGVtRmlsbCwgKEFQVFIpbWVudXRleHQpOworICAgIFNldEF0dHJpYigmbWVudUl0ZW1Vbmlvbi0+bWVudUl0ZW0sIFNlbGVjdEZpbGwsIE5VTEwpOworICAgIFNldEF0dHJpYigmbWVudUl0ZW1Vbmlvbi0+bWVudUl0ZW0sIENvbW1hbmQsIE5VTEwpOworICAgIFNldEF0dHJpYigmbWVudUl0ZW1Vbmlvbi0+bWVudUl0ZW0sIFN1Ykl0ZW0sIE5VTEwpOworICAgIFNldEF0dHJpYigmbWVudUl0ZW1Vbmlvbi0+bWVudUl0ZW0sIE5leHRTZWxlY3QsIE1FTlVOVUxMKTsKKworICAgIG1lbnV0ZXh0LT5JVGV4dCA9IG1hbGxvYyhzdHJsZW4obWVudS0+ZG5hbWUpICsgMSk7CisKKyAgICBzdHJjcHkobWVudXRleHQtPklUZXh0LCBtZW51LT5kbmFtZSk7CisKKyAgICBtZW51SXRlbVVuaW9uLT5tZW51SXRlbS5OZXh0SXRlbSA9IE5VTEw7CisKKworICAgIGlmIChwYXJlbnQpCisgICAgeworCWlmICghcGFyZW50LT5tZW51SXRlbVB0cikKKwl7CisJICAgIEQoIkFkZGluZyBmaXJzdCBzdWJFbGVtZW50Iik7CisJICAgIFNldEF0dHJpYigmbWVudUl0ZW1Vbmlvbi0+bWVudUl0ZW0sIFRvcEVkZ2UsIDApOworCSAgICBwYXJlbnQtPm1lbnVQdHItPkZpcnN0SXRlbSA9ICZtZW51SXRlbVVuaW9uLT5tZW51SXRlbTsKKwkgICAgcGFyZW50LT5tZW51SXRlbVB0ciA9ICZtZW51SXRlbVVuaW9uLT5tZW51SXRlbTsKKwl9CisJZWxzZQorCXsKKwkgICAgc3RydWN0IE1lbnVJdGVtICp0bXBNZW51SXRlbTsKKwkgICAgdG1wTWVudUl0ZW0gPSBwYXJlbnQtPm1lbnVJdGVtUHRyOworCSAgICB3aGlsZSAodG1wTWVudUl0ZW0tPk5leHRJdGVtKQorCSAgICB7CisJCXRtcE1lbnVJdGVtID0gdG1wTWVudUl0ZW0tPk5leHRJdGVtOworCSAgICB9CisJICAgIHRtcE1lbnVJdGVtLT5OZXh0SXRlbSA9ICZtZW51SXRlbVVuaW9uLT5tZW51SXRlbTsKKwkgICAgU2V0QXR0cmliKCZtZW51SXRlbVVuaW9uLT5tZW51SXRlbSwgVG9wRWRnZSwgdG1wTWVudUl0ZW0tPlRvcEVkZ2UrdG1wTWVudUl0ZW0tPkhlaWdodCk7CisJfQorICAgIH0KKyAgICBtZW51LT5tZW51UHRyPSBOVUxMOworICAgIG1lbnUtPm1lbnVJdGVtUHRyID0gJm1lbnVJdGVtVW5pb24tPm1lbnVJdGVtOworICAgIG1lbnVJdGVtVW5pb24tPm15TWVudUl0ZW0uZ3VpTWVudSA9IG1lbnU7Cit9CisKKworICAgIHN0YXRpYyBzdHJ1Y3QgTWVudSAqCitnZXRNZW51KHN0cnVjdCBSYXN0UG9ydCAqcmFzdCwgaW50IGxlZnQsIFNUUlBUUiBuYW1lKQoreworICAgIHN0cnVjdCBNZW51ICptZW51OworICAgIHN0cnVjdCBUZXh0RXh0ZW50IHRleHRFeHQ7CisKKyAgICBtZW51ID0gbWFsbG9jKHNpemVvZigqbWVudSkpOworICAgIG1lbnUtPk5leHRNZW51ID0gTlVMTDsKKyAgICBtZW51LT5MZWZ0RWRnZSA9IGxlZnQ7CisKKyAgICBUZXh0RXh0ZW50KHJhc3QsIG5hbWUsIHN0cmxlbihuYW1lKSwgJnRleHRFeHQpOworCisgICAgbWVudS0+VG9wRWRnZSA9IDA7CisgICAgbWVudS0+V2lkdGggPSB0ZXh0RXh0LnRlX1dpZHRoOworICAgIG1lbnUtPkhlaWdodCA9IHRleHRFeHQudGVfSGVpZ2h0OworICAgIG1lbnUtPkZsYWdzID0gSVRFTVRFWFQrSElHSENPTVArTUVOVUVOQUJMRUQ7CisgICAgbWVudS0+TWVudU5hbWUgPSBuYW1lOworICAgIG1lbnUtPkZpcnN0SXRlbSA9IE5VTEw7CisKKyAgICByZXR1cm4gbWVudTsKK30KKworLyoKKyAqIGFkZCAgMXN0IGxldmVsIHN1Ym1lbnUgaXRlbQorICovCisgICAgdm9pZAorZ3VpX21jaF9hZGRfbWVudSh2aW1tZW51X1QgKm1lbnUsIGludCBpZHgpCit7CisgICAgc3RydWN0IE1lbnUJKm5ld01lbnU7CisgICAgaW50CQlwb3MgPSAwOworCisgICAgaWYgKCFtZW51X2lzX21lbnViYXIobWVudS0+bmFtZSkpCisJcmV0dXJuOworCisgICAgbWVudS0+bWVudVB0ciA9IG5ld01lbnUgPSBnZXRNZW51KGd1aS53aW5kb3ctPlJQb3J0LCAwLCBtZW51LT5kbmFtZSk7CisgICAgbWVudS0+bWVudUl0ZW1QdHIgPSBOVUxMOworICAgIG5ld01lbnUtPk5leHRNZW51ID0gTlVMTDsKKworICAgIGlmICghZ3VpLm1lbnUpCisgICAgeworCUQoIkFkZGluZyBoZWFkIG1lbnUiKTsKKwlndWkubWVudSA9IG5ld01lbnUgOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXN0cnVjdCBNZW51ICp0bXBNZW51OworCisJdG1wTWVudSA9IGd1aS5tZW51OworCXdoaWxlICh0bXBNZW51LT5OZXh0TWVudSkKKwkgICAgdG1wTWVudSA9IHRtcE1lbnUtPk5leHRNZW51OworCXRtcE1lbnUtPk5leHRNZW51ID0gbmV3TWVudTsKKwlwb3MgPSB0bXBNZW51LT5MZWZ0RWRnZSArCisJICAgIFRleHRMZW5ndGgoZ3VpLndpbmRvdy0+UlBvcnQsIHRtcE1lbnUtPk1lbnVOYW1lLAorCQkgICAgc3RybGVuKHRtcE1lbnUtPk1lbnVOYW1lKSk7CisJbmV3TWVudS0+TGVmdEVkZ2UgPSBwb3M7CisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX21jaF90b2dnbGVfdGVhcm9mZnMoZW5hYmxlKQorICAgIGludAkJZW5hYmxlOworeworICAgIC8qIG5vIHRlYXJvZmYgbWVudXMgKi8KK30KKworICAgIGludAorZ3VpX21jaF9zZXRfYmxpbmtpbmcobG9uZyB3YWl0LCBsb25nIG9uLCBsb25nIG9mZikKK3sKKyAgICBjdXJzb3Iud2FpdFRpbWUgPSB3YWl0LzEwMDsKKyAgICBjdXJzb3Iub25UaW1lID0gb24vMTAwOworICAgIGN1cnNvci5vZmZUaW1lID0gb2ZmLzEwMDsKKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3ByZXBhcmUoaW50ICphcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBEKCJndWlfbWNoX3ByZXBhcmUiKTsKKworICAgIGV4ZWNCYXNlID0gKHN0cnVjdCBFeGVjQmFzZSAqKU9wZW5MaWJyYXJ5KCJleGVjLmxpYnJhcnkiLCBOVUxMKTsKKyAgICBnZnhCYXNlID0gKHN0cnVjdCBHRlhCYXNlICopT3BlbkxpYnJhcnkoImdyYXBoaWNzLmxpYnJhcnkiLCBOVUxMKTsKKyAgICBsYXllcnNCYXNlID0gKHN0cnVjdCBMYXllcnNCYXNlICopT3BlbkxpYnJhcnkoImxheWVycy5saWJyYXJ5IiwgTlVMTCk7CisKKyAgICBpZiAoIWV4ZWNCYXNlKQorICAgIHsKKwlEKCJDYW5ub3Qgb3BlbiBleGVjLmxpYnJhcnksIGFib3J0aW5nIik7CisgICAgfQorICAgIGlmICghZ2Z4QmFzZSkKKyAgICB7CisJRCgiQ2Fubm90IG9wZW4gZ3JhcGhpY3MubGlicmFyeSwgYWJvcnRpbmciKTsKKyAgICB9CisgICAgaWYgKCFsYXllcnNCYXNlKQorICAgIHsKKwlEKCJDYW5ub3Qgb3BlbiBncmFwaGljcy5saWJyYXJ5LCBhYm9ydGluZyIpOworICAgIH0KKyAgICBEKCJndWlfbWNoX3ByZXBhcmUgZG9uZSAiKTsKK30KKworICAgIHZvaWQKK2F0ZXhpdERvVGhpcyh2b2lkKQorewora3ByaW50ZigiYXRleGl0ZG90aGlzIyMjXG4iKTsKKyAgICBndWlfbWNoX2V4aXQoLTEpOworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIEdVSSBjYW4gYmUgc3RhcnRlZC4gIENhbGxlZCBiZWZvcmUgZ3ZpbXJjIGlzIHNvdXJjZWQuCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIGludAorZ3VpX21jaF9pbml0X2NoZWNrKHZvaWQpCit7CisgICAgaWYgKGV4ZWNCYXNlICYmIGdmeEJhc2UgJiYgbGF5ZXJzQmFzZSkKKwlyZXR1cm4gT0s7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfaW5pdCh2b2lkKQoreworICAgIGludCByZXR1cm5Db2RlID0gRkFJTDsgLyogYXNzdW1lIGZhaWx1cmUqLworCisgICAgVGltZXJNUCA9IENyZWF0ZU1zZ1BvcnQoKTsKKyAgICBpZiAoIVRpbWVyTVApIHJldHVybiBGQUlMOworCisgICAgVGltZXJJTyA9IChzdHJ1Y3QgdGltZXJlcXVlc3QgKilDcmVhdGVJT1JlcXVlc3QoVGltZXJNUCwgc2l6ZW9mKCpUaW1lcklPKSk7CisgICAgaWYgKCFUaW1lcklPKSByZXR1cm4gRkFJTDsKKworICAgIGlmIChPcGVuRGV2aWNlKCJ0aW1lci5kZXZpY2UiLCBVTklUX1ZCTEFOSywgJlRpbWVySU8tPnRyX25vZGUsIDApKSByZXR1cm4gRkFJTDsKKworICAgIGd1aS53aW5kb3cgPSBPcGVuV2luZG93VGFnTGlzdCgmdmltTmV3V2luZG93LCB0YWdzKTsKKyAgICBpZiAoZ3VpLndpbmRvdykKKyAgICB7CisJZ3VpLmluX3VzZSA9IFRSVUU7CisJZ3VpLmluX2ZvY3VzPVRSVUU7CisJZ3VpLm5vcm1fcGl4ZWwgPSBndWkuZGVmX25vcm1fcGl4ZWwgPSAxOworCWd1aS5iYWNrX3BpeGVsID0gZ3VpLmRlZl9iYWNrX3BpeGVsID0gMDsKKworCXNldF9ub3JtYWxfY29sb3JzKCk7CisJZ3VpX2NoZWNrX2NvbG9ycygpOworCisJU2V0RHJNZChndWkud2luZG93LT5SUG9ydCwgSkFNMik7CisJZ3VpX21jaF9zZXRfY29sb3JzKGd1aS5ub3JtX3BpeGVsLCBndWkuYmFja19waXhlbCk7CisKKwlhdGV4aXQoYXRleGl0RG9UaGlzKTsKKworCVRleHREaW1lbnNpb25zKCk7CisJcmV0dXJuQ29kZSA9IE9LOyAvKiB3ZSd2ZSBoYWQgc3VjY2VzcyAqLworCWlmIChndWlfd2luX3ggIT0gLTEgJiYgZ3VpX3dpbl95ICE9IC0xKQorCSAgICBndWlfbWNoX3NldF93aW5wb3MoZ3VpX3dpbl94LCBndWlfd2luX3kpOworCisJZ3VpX21jaF9jbGVhcl9hbGwoKTsKKworICAgIH0KKyAgICBndWkubWVudSA9IE5VTEw7CisKKyAgICByZXR1cm4gcmV0dXJuQ29kZTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfbmV3X2NvbG9ycyh2b2lkKQorewora3ByaW50ZigiIyMjIGd1aV9tY2hfbmV3X2NvbG9yc1xuIik7CisgICAgU2V0QVBlbihndWkud2luZG93LT5SUG9ydCwgZ2V0cmVhbGNvbG9yKGd1aS5ub3JtX3BpeGVsKSk7CisgICAgU2V0QlBlbihndWkud2luZG93LT5SUG9ydCwgZ2V0cmVhbGNvbG9yKGd1aS5iYWNrX3BpeGVsKSk7CisKKyAgICBEKCJndWlfbWNoX25ld19jb2xvcnMiKTsKK30KKworICAgIGludAorZ3VpX21jaF9vcGVuKHZvaWQpCit7CisgICAgRCgiZ3VpX21jaF9vcGVuIik7CisKKyAgICBoaWdobGlnaHRfZ3VpX3N0YXJ0ZWQoKTsKKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2V4aXQoaW50IHJldHVybkNvZGUpCit7CitrcHJpbnRmKCIjIyNndWlfbWNoX2V4aXRcbiIpOworICAgIEQoIioqKipndWlfbWNoX2V4aXQiKTsKKworICAgIGlmIChUaW1lclNlbnQpCisgICAgeworCWlmICghQ2hlY2tJTygmVGltZXJJTy0+dHJfbm9kZSkpIEFib3J0SU8oJlRpbWVySU8tPnRyX25vZGUpOworCVdhaXRJTygmVGltZXJJTy0+dHJfbm9kZSk7CisJVGltZXJTZW50ID0gRkFMU0U7CisgICAgfQorCisgICAgaWYgKFRpbWVySU8pCisgICAgeworCUNsb3NlRGV2aWNlKCZUaW1lcklPLT50cl9ub2RlKTsKKwlEZWxldGVJT1JlcXVlc3QoJlRpbWVySU8tPnRyX25vZGUpOworCVRpbWVySU8gPSBOVUxMOworICAgIH0KKworICAgIGlmIChUaW1lck1QKQorICAgIHsKKwlEZWxldGVNc2dQb3J0KFRpbWVyTVApOworCVRpbWVyTVAgPSBOVUxMOworICAgIH0KKworICAgIGlmIChndWkud2luZG93KQorICAgIHsKKwlpbnQgaTsKKworCWZvcihpID0gMDsgaSA8IHNpemVvZihNeUNvbG9yVGFibGUpIC8gc2l6ZW9mKE15Q29sb3JUYWJsZVswXSk7IGkrKykKKwl7CisJICAgIGlmIChNeUNvbG9yVGFibGVbaV0uYWxsb2NlZCkKKwkgICAgeworCQlSZWxlYXNlUGVuKGd1aS53aW5kb3ctPldTY3JlZW4tPlZpZXdQb3J0LkNvbG9yTWFwLCBNeUNvbG9yVGFibGVbaV0ucGVuKTsKKwkJTXlDb2xvclRhYmxlW2ldLmFsbG9jZWQgPSBGQUxTRTsKKwkgICAgfQorCX0KKworCUQoIkNsb3NlaW5nIHdpbmRvdyAiKTsKKwlDbG9zZVdpbmRvdyhndWkud2luZG93KTsKKwlDbG9zZUxpYnJhcnkoKHN0cnVjdCBMaWJyYXJ5KilleGVjQmFzZSk7CisJQ2xvc2VMaWJyYXJ5KChzdHJ1Y3QgTGlicmFyeSopZ2Z4QmFzZSk7CisJZ3VpLndpbmRvdyA9IE5VTEw7CisJZ3VpLmluX3VzZSA9IEZBTFNFOworCS8vZ2V0b3V0KDEpOworICAgIH0KK30KKworLyoKKyAqIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93LgorICovCisgICAgaW50CitndWlfbWNoX2dldF93aW5wb3MoaW50ICp4LCBpbnQgKnkpCit7CisgICAgaWYgKGd1aS53aW5kb3cpCisgICAgeworCSp4ID0gZ3VpLndpbmRvdy0+TGVmdEVkZ2U7CisJKnkgPSBndWkud2luZG93LT5Ub3BFZGdlOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93IHRvIHRoZSBnaXZlbgorICogY29vcmRpbmF0ZXMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF93aW5wb3MoaW50IHgsIGludCB5KQoreworICAgIGlmIChndWkud2luZG93KQorICAgIHsKKwlDaGFuZ2VXaW5kb3dCb3goZ3VpLndpbmRvdywgeCwgeSwgZ3VpLndpbmRvdy0+V2lkdGgsIGd1aS53aW5kb3ctPkhlaWdodCk7CisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2hlbGxzaXplKGludCB3aWR0aCwgaW50IGhlaWdodCwKKwlpbnQgbWluX3dpZHRoLCBpbnQgbWluX2hlaWdodCwgaW50IGJhc2Vfd2lkdGgsIGludCBiYXNlX2hlaWdodCkKK3sKKyAgICBEKCJndWlfbWNoX3NldF9zaGVsbHNpemUiKTsKKworICAgIENoYW5nZVdpbmRvd0JveChndWkud2luZG93LCBndWkud2luZG93LT5MZWZ0RWRnZSwKKwkgICAgZ3VpLndpbmRvdy0+VG9wRWRnZSwgd2lkdGhDaGFyVG9Qb2ludCh3aWR0aCkgKyBndWkud2luZG93LT5Cb3JkZXJMZWZ0ICsgZ3VpLndpbmRvdy0+Qm9yZGVyUmlnaHQsCisJICAgIGhlaWdodENoYXJUb1BvaW50KGhlaWdodCkgKyBndWkud2luZG93LT5Cb3JkZXJUb3AgKyBndWkud2luZG93LT5Cb3JkZXJCb3R0b20pOworICAgIGNoZWNrRXZlbnRIYW5kbGVyKCk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2dldF9zY3JlZW5fZGltZW5zaW9ucyhpbnQgKnNjcmVlbl93LCBpbnQgKnNjcmVlbl9oKQoreworLy8gICAgKnNjcmVlbl93ID0gd2lkdGhQb2ludFRvQ2hhcihndWkud2luZG93LT5HWlpXaWR0aCk7CisvLyAgICAqc2NyZWVuX2ggPSBoZWlnaHRQb2ludFRvQ2hhcihndWkud2luZG93LT5HWlpIZWlnaHQpOworICAgICpzY3JlZW5fdyA9IGd1aS53aW5kb3ctPkdaWldpZHRoOworICAgICpzY3JlZW5faCA9IGd1aS53aW5kb3ctPkdaWkhlaWdodCAtIGNoYXJhY3RlckhlaWdodDsKKworCitrcHJpbnRmKCI9PT0gZ2V0X3NjcmVlbl9kaW1lbnNpb25zOiBzY3JlZW4gJWQsJWQgY2hhcmFjdGVyICVkLCVkICBjb25zb2xlICVkLCVkXG4iLAorZ3VpLndpbmRvdy0+R1paV2lkdGgsCitndWkud2luZG93LT5HWlpIZWlnaHQsCitjaGFyYWN0ZXJXaWR0aCwKK2NoYXJhY3RlckhlaWdodCwKKypzY3JlZW5fdywKKypzY3JlZW5faCk7CisKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3RleHRfYXJlYV9wb3MoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCit7CisgICAgRCgiZ3VpX21jaF9zZXRfdGV4dF9hcmVhX3BvcyIpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9lbmFibGVfc2Nyb2xsYmFyKHNjcm9sbGJhcl9UICpzYiwgaW50IGZsYWcpCit7CisgICAgLyogZG9uZSBieSBkZWZhdWx0ICovCisgICAgLyogVE9ETzogZGlzYWJsZSBzY3JvbGxiYXIgd2hlbiBpdCdzIHRvbyBzbWFsbCAqLworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3RodW1iKHNjcm9sbGJhcl9UICpzYiwgbG9uZyB2YWwsIGxvbmcgc2l6ZSwgbG9uZyBtYXgpCit7CisgICAgVUxPTkcgdG90YWwgPSBtYXg7CisgICAgVUxPTkcgdmlzaWJsZSA9IHNpemU7CisgICAgVUxPTkcgdG9wID0gdmFsOworICAgIFVMT05HIGhpZGRlbjsKKyAgICBVTE9ORyBvdmVybGFwID0gMDsKKyAgICBVV09SRCBib2R5LCBwb3Q7CisKK2twcmludGYoIl9fc2V0X3Njcm9sbGJhcl90aHVtYiB2YWwgJWQgIHNpemUgJWQgIG1heCAlZFxuIiwgdmFsLCBzaXplLCBtYXgpOworCisgICAgaWYgKHRvdGFsID4gdmlzaWJsZSkKKwloaWRkZW4gPSB0b3RhbCAtIHZpc2libGU7CisgICAgZWxzZQorCWhpZGRlbiA9IDA7CisKKyAgICBpZiAodG9wID4gaGlkZGVuKQorCXRvcCA9IGhpZGRlbjsKKworICAgIGJvZHkgPSAoaGlkZGVuID4gMCkgPworCSAgICAoVVdPUkQpKCgoVUxPTkcpKHZpc2libGUgLSBvdmVybGFwKSAqIE1BWEJPRFkpIC8gKHRvdGFsIC0gb3ZlcmxhcCkpIDoKKwkgICAgTUFYQk9EWTsKKworICAgIHBvdCAgPSAoaGlkZGVuID4gMCkgPyAoVVdPUkQpKCgoVUxPTkcpIHRvcCAqIE1BWFBPVCkgLyBoaWRkZW4pIDogMDsKKwora3ByaW50ZigiX19wb3QgJXggIGJvZHkgJXhcbiIsIHBvdCwgYm9keSk7CisKKyAgICBOZXdNb2RpZnlQcm9wKCZwcm9wR2FkZ2V0LCBndWkud2luZG93LCBOVUxMLAorCQkgIEdhZGdldDJTSW5mby5GbGFncywKKwkJICBNQVhQT1QsIHBvdCwKKwkJICBNQVhCT0RZLCBib2R5LAorCQkgIDEpOworICAgIHJldHVybjsKKworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3BvcyhzY3JvbGxiYXJfVCAqc2IsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQoreworICAgIEQoImd1aV9tY2hfc2V0X3Njcm9sbGJhcl9wb3MiKTsKKyAgICAvKk5ld01vZGlmeVByb3AoJnByb3BHYWRnZXQsIGd1aS53aW5kb3csIE5VTEwsIE1BWFBPVCwgTUFYUE9UL3NiLT5tYXgqeSwgTUFYUE9ULCBNQVhCT0RZL3NiLT5tYXgvc2ItPnNpemUsIDEpOyovCit9CisKKyAgICB2b2lkCitndWlfbWNoX2NyZWF0ZV9zY3JvbGxiYXIoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgb3JpZW50KQoreworICAgIC8qIHRoaXMgaXMgZG9uZSBieSBkZWZhdWx0ICovCit9CisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChQUk9UTykKKyAgICB2b2lkCitndWlfbWNoX2Rlc3Ryb3lfc2Nyb2xsYmFyKHNjcm9sbGJhcl9UICpzYikKK3sKKyAgICAvKiB0aGlzIGlzIGRvbmUgYnkgZGVmYXVsdCAqLworfQorI2VuZGlmCisKK2ludCBndWlfbWNoX2luaXRfZm9udChjaGFyX3UgKmZvbnRfbmFtZSwgaW50IGZvbnRzZXQpCit7CisgICAgLypEKCJndWlfbWNoX2luaXRfZm9udCIpOyovCisKKyAgICBndWkuY2hhcl93aWR0aCA9IGNoYXJhY3RlcldpZHRoOworICAgIGd1aS5jaGFyX2hlaWdodCA9IGNoYXJhY3RlckhlaWdodDsKKyAgICBndWkuY2hhcl9hc2NlbnQgPSBndWkud2luZG93LT5SUG9ydC0+VHhCYXNlbGluZTsKKworICAgIHJldHVybiBPSzsKK30KKworICAgIGludAorZ3VpX21jaF9hZGp1c3RfY2hhcnNpemUoKQoreworICAgIHJldHVybiBGQUlMOworfQorCisgICAgR3VpRm9udAorZ3VpX21jaF9nZXRfZm9udCggY2hhcl91ICpuYW1lLCBpbnQgZ2l2ZUVycm9ySWZNaXNzaW5nKQoreworICAgIC8qRCgiZ3VpX21jaF9nZXRfZm9udCIpOyovCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF9mb250KEd1aUZvbnQgZm9udCkKK3sKKyAgICAvKkQoImd1aV9tY2hfc2V0X2ZvbnQiKTsqLworfQorCisjaWYgMCAvKiBub3QgdXNlZCAqLworICAgIGludAorZ3VpX21jaF9zYW1lX2ZvbnQoR3VpRm9udCBmMSwgR3VpRm9udCBmMikKK3sKKyAgICBEKCJndWlfbWNoX3NhbWVfZm9udCIpOworfQorI2VuZGlmCisKKyAgICB2b2lkCitndWlfbWNoX2ZyZWVfZm9udChHdWlGb250IGZvbnQpCit7CisgICAgaWYgKGZvbnQpCisJRCgiZ3VpX21jaF9mcmVlX2ZvbnQiKTsKK30KKworI2RlZmluZSBSR0IoYSwgYiwgYykgKChhICYmIDB4ZmYpICogMHgxMDAwMCArIChiICogMHhmZikgKiAweDEwMCArIChjICYgMHhmZikpCisKKy8qCisgKiBHZXQgY29sb3IgaGFuZGxlIGZvciBjb2xvciAibmFtZSIuCisgKiBSZXR1cm4gSU5WQUxDT0xPUiB3aGVuIG5vdCBwb3NzaWJsZS4KKyAqLworCisgICAgdHlwZWRlZiBzdHJ1Y3QgZ3VpY29sb3JfdFRhYmxlCisgICAgeworCWNoYXIJICAgICpuYW1lOworCXVuc2lnbmVkIGxvbmcgICAgY29sb3I7CisJVUJZVEUJCXJlZDsKKwlVQllURQkJZ3JlZW47CisJVUJZVEUJCWJsdWU7CisgICAgfSBndWljb2xvcl90VGFibGU7CisKKyAgICBzdGF0aWMgZ3VpY29sb3JfdFRhYmxlIHRhYmxlW10gPQorICAgIHsKKwl7IkdyZXkiLAkwLCAxOTAsMTkwLDE5MH0sCisJeyJCbGFjayIsCTEsIDAsIDAsIDB9LAorCXsiRGFya0JsdWUiLAkyLCAwLCAwLCAxMzl9LAorCXsiRGFya0dyZWVuIiwJMywgMCwgMTAwLCAwfSwKKwl7IkRhcmtDeWFuIiwJNCwgMCwgMTM5LCAxMzl9LAorCXsiRGFya1JlZCIsCTUsIDEzOSwgMCwgMH0sCisJeyJEYXJrTWFnZW50YSIsCTYsIDEzOSwgMCwgMTM5fSwKKwl7IkJyb3duIiwJNywgMTY1LCA0MiwgNDJ9LAorCXsiR3JheSIsCTgsIDE5MCwgMTkwLCAxOTB9LAorCXsiR3JleSIsCTksIDE5MCwgMTkwLCAxOTB9LAorCXsiTGlnaHRHcmF5IiwJMTAsIDIxMSwgMjExLCAyMTF9LAorCXsiTGlnaHRHcmV5IiwJMTEsIDIxMSwgMjExLCAyMTF9LAorCXsiRGFya0dyYXkiLAkxMiwgMTY5LCAxNjksIDE2OX0sCisJeyJEYXJrR3JleSIsCTEzLCAxNjksIDE2OSwgMTY5fSwKKwl7IkJsdWUiLAkxNCwgMCwgMCwgMjU1fSwKKwl7IkxpZ2h0Qmx1ZSIsCTE1LCAxNzMsIDIxNiwgMjMwfSwKKwl7IkdyZWVuIiwJMTYsIDAsIDI1NSwgMH0sCisJeyJMaWdodEdyZWVuIiwJMTcsIDE0NCwgMjM4LCAxNDR9LAorCXsiQ3lhbiIsCTE4LCAwLCAyNTUsIDI1NX0sCisJeyJMaWdodEN5YW4iLAkxOSwgMjI0LCAyNTUsIDI1NX0sCisJeyJSZWQiLAkJMjAsIDI1NSwgMCwgMH0sCisJeyJMaWdodFJlZCIsCTIxLCAyNTUsIDAsIDB9LCAvKj8qLworCXsiTWFnZW50YSIsCTIyLCAyNTUsIDAsIDI1NX0sCisJeyJMaWdodE1hZ2VudGEiLDIzLCAyNTUsIDAsIDI1NX0sIC8qPyovCisJeyJZZWxsb3ciLAkyNCwgMjU1LCAyNTUsIDB9LAorCXsiTGlnaHRZZWxsb3ciLAkyNSwgMjU1LCAyNTUsIDIyNH0sCS8qIFRPRE86IGFkZCBEYXJrWWVsbG93ICovCisJeyJXaGl0ZSIsCTI2LCAyNTUsIDI1NSwgMjU1fSwKKwl7IlNlYUdyZWVuIiwJMjcsIDQ2LCAxMzksIDg3fSwKKwl7Ik9yYW5nZSIsCTI4LCAyNTUsIDE2NSwgMH0sCisJeyJQdXJwbGUiLAkzMCwgMTYwLCAzMiwgMjQwfSwKKwl7IlNsYXRlQmx1ZSIsCTMxLCAxMDYsIDkwLCAyMDV9LAorCXsiZ3JleTkwIiwJMzIsIDIyOSwgMjI5LCAyMjl9LAorCXsiZ3JleTk1IiwJMzMsIDI0MiwgMjQyLCAyNDJ9LAorCXsiZ3JleTgwIiwJMzQsIDIwNCwgMjA0LCAyMDR9LAorCXtOVUxMLCBOVUxMfSwKKyAgICB9OworCisgICAgZ3VpY29sb3JfVAorZ3VpX21jaF9nZXRfY29sb3IoY2hhcl91ICpuYW1lKQoreworCisgICAgZ3VpY29sb3JfVCBjb2xvciA9IElOVkFMQ09MT1I7CisKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IHRhYmxlW2ldLm5hbWUgIT0gTlVMTDtpKyspCisgICAgeworCWlmIChzdHJpY21wKG5hbWUsIHRhYmxlW2ldLm5hbWUpID09IDApCisJeworCSAgICAvL2NvbG9yID0gdGFibGVbaV0uY29sb3I7CisJICAgIGNvbG9yID0gaTsKKwl9CisgICAgfQorCisjaWYgMAorICAgIGlmIChjb2xvciA9PSBJTlZBTENPTE9SKQorICAgIHsKKwljaGFyICpsb29reSA9IE5VTEw7CisKKwljb2xvciA9IHN0cnRvbCgoY2hhciopbmFtZSwgJmxvb2t5LCAxMCk7CisJaWYgKCpsb29reSAhPSBOVUwpCisJICAgIGNvbG9yID0gSU5WQUxDT0xPUjsKKyAgICB9CisjZW5kaWYKKworICAgIGtwcmludGYoImd1aV9tY2hfZ2V0X2NvbG9yWyVzXSA9ICVzXG4iLCBuYW1lLCB0YWJsZVtjb2xvcl0ubmFtZSk7CisKKyAgICByZXR1cm4gY29sb3I7Cit9CisKK3N0YXRpYyBVQllURSBnZXRyZWFsY29sb3IoZ3VpY29sb3JfVCBpKQoreworICAgIGlmICghTXlDb2xvclRhYmxlW2ldLmFsbG9jZWQpCisgICAgeworCU15Q29sb3JUYWJsZVtpXS5wZW4gPSBPYnRhaW5CZXN0UGVuKGd1aS53aW5kb3ctPldTY3JlZW4tPlZpZXdQb3J0LkNvbG9yTWFwLAorCQkJCQkgICAgdGFibGVbaV0ucmVkICogMHgwMTAxMDEwMSwKKwkJCQkJICAgIHRhYmxlW2ldLmdyZWVuICogMHgwMTAxMDEwMSwKKwkJCQkJICAgIHRhYmxlW2ldLmJsdWUgKiAweDAxMDEwMTAxLAorCQkJCQkgICAgT0JQX0ZhaWxJZkJhZCwgRkFMU0UsCisJCQkJCSAgICBPQlBfUHJlY2lzaW9uLCBQUkVDSVNJT05fR1VJLAorCQkJCQkgICAgVEFHX0RPTkUpOworCWlmIChNeUNvbG9yVGFibGVbaV0ucGVuICE9IC0xKQorCXsKKwkgICAgTXlDb2xvclRhYmxlW2ldLmFsbG9jZWQgPSBUUlVFOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gTXlDb2xvclRhYmxlW2ldLnBlbjsKK30KKworCisgICAgdm9pZAorZ3VpX21jaF9zZXRfY29sb3JzKGd1aWNvbG9yX1QgZmcsIGd1aWNvbG9yX1QgYmcpCit7CisjaWYgMAorICAgIGlmIChmZyA9PSAwKQorICAgIHsKKwlmZyA9IDE7CisgICAgfQorI2VuZGlmCisgICAgU2V0QUJQZW5Eck1kKGd1aS53aW5kb3ctPlJQb3J0LCBnZXRyZWFsY29sb3IoZmcpLCBnZXRyZWFsY29sb3IoYmcpLCBKQU0yKTsKKwora3ByaW50ZigiZ3VpX21jaF9zZXRfY29sb3JzICVzLCVzXG4iLCB0YWJsZVtmZ10ubmFtZSwgdGFibGVbYmddLm5hbWUpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZmdfY29sb3IoZ3VpY29sb3JfVCBjb2xvcikKK3sKKyNpZiAwCisgICAgaWYgKGNvbG9yID09IDApCisgICAgeworCWNvbG9yID0gMTsgLyogdmltIHNlbmRzIDAgYXMgZGVmYXVsdCBjb2xvciB3aGljaCBpcyBBTFdBWVMgdGhlCisJCSAgICAgIGJhY2tncm91bmQgb24gdGhlIGFtaWdhIHNjcm9sbGluZyB3aXRoIGNvbG91cnMgYXMgdGhlCisJCSAgICAgIGJhY2tncm91bmQgaXMgYSB2ZXJ5IGJhZCBpZGVhIG9uIHNsb3cgbWFjaGluZXMqLworICAgIH0KKyNlbmRpZgorICAgIFNldEFQZW4oZ3VpLndpbmRvdy0+UlBvcnQsIGdldHJlYWxjb2xvcihjb2xvcikpOworICAgIFNldERyTWQoZ3VpLndpbmRvdy0+UlBvcnQsIEpBTTIpOworCitrcHJpbnRmKCJndWlfbWNoX3NldF9mZ19jb2xvciAlc1xuIiwgdGFibGVbY29sb3JdLm5hbWUpOworCit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF9iZ19jb2xvcihndWljb2xvcl9UIGNvbG9yKQoreworICAgIFNldEJQZW4oZ3VpLndpbmRvdy0+UlBvcnQsIGdldHJlYWxjb2xvcihjb2xvcikpOwora3ByaW50ZigiZ3VpX21jaF9zZXRfYmdfY29sb3IgJXNcbiIsIHRhYmxlW2NvbG9yXS5uYW1lKTsKKworfQorCisgICAgdm9pZAorZ3VpX21jaF9kcmF3X3N0cmluZyhpbnQgcm93LCBpbnQgY29sLCBjaGFyX3UgKnMsIGludCBsZW4sIGludCBmbGFncykKK3sKKyNpZiAxCisgICAgY2hhciB0ZW1wc3RyaW5nWzMwMF07CisKKyAgICBtZW1jcHkodGVtcHN0cmluZywgcywgbGVuKTsKKyAgICB0ZW1wc3RyaW5nW2xlbl0gPSAnXDAnOworCisgICAga3ByaW50ZigiZ3VpX21jaF9kcmF3X3N0cmluZyglcykgZmxhZ3MgJXhcbiIsIHRlbXBzdHJpbmcsIGZsYWdzKTsKKyNlbmRpZgorCisgICAgaWYgKGZsYWdzICYgRFJBV19UUkFOU1ApCisgICAgeworCVNldERyTWQoZ3VpLndpbmRvdy0+UlBvcnQsIEpBTTEpOworCU1vdmUoZ3VpLndpbmRvdy0+UlBvcnQsIHBvc1dpZHRoQ2hhclRvUG9pbnQoY29sKSwgcG9zSGVpZ2h0Q2hhclRvUG9pbnQocm93KSArIGd1aS53aW5kb3ctPlJQb3J0LT5UeEJhc2VsaW5lKTsKKwlUZXh0KGd1aS53aW5kb3ctPlJQb3J0LCBzLCBsZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworCVNldERyTWQoZ3VpLndpbmRvdy0+UlBvcnQsIEpBTTIpOworCU1vdmUoZ3VpLndpbmRvdy0+UlBvcnQsIHBvc1dpZHRoQ2hhclRvUG9pbnQoY29sKSwgcG9zSGVpZ2h0Q2hhclRvUG9pbnQocm93KSArIGd1aS53aW5kb3ctPlJQb3J0LT5UeEJhc2VsaW5lKTsKKwlUZXh0KGd1aS53aW5kb3ctPlJQb3J0LCBzLCBsZW4pOworICAgIH0KKworICAgIGlmIChmbGFncyAmIERSQVdfQk9MRCkKKyAgICB7CisJU2V0RHJNZChndWkud2luZG93LT5SUG9ydCwgSkFNMSk7CisJTW92ZShndWkud2luZG93LT5SUG9ydCwgcG9zV2lkdGhDaGFyVG9Qb2ludChjb2wpKzEsIHBvc0hlaWdodENoYXJUb1BvaW50KHJvdykgKyBndWkud2luZG93LT5SUG9ydC0+VHhCYXNlbGluZSk7CisJVGV4dChndWkud2luZG93LT5SUG9ydCwgcywgbGVuKTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBEUkFXX1VOREVSTCkKKyAgICB7CisJTW92ZShndWkud2luZG93LT5SUG9ydCwgcG9zV2lkdGhDaGFyVG9Qb2ludChjb2wpLCBwb3NIZWlnaHRDaGFyVG9Qb2ludChyb3cgKyAxKSAtIDEpOworCURyYXcoZ3VpLndpbmRvdy0+UlBvcnQsIHBvc1dpZHRoQ2hhclRvUG9pbnQoY29sK2xlbikgLSAxLCBwb3NIZWlnaHRDaGFyVG9Qb2ludChyb3cgKyAxKSAtIDEpOworICAgIH0KKworICAgIFNldERyTWQoZ3VpLndpbmRvdy0+UlBvcnQsIEpBTTIpOworfQorCisgICAgaW50CitndWlfbWNoX2hhc2tleShjaGFyX3UgKm5hbWUpCit7CisgICAgaW50IGk7CisKKyAgICBEKCJndWlfbWNoX2hhc2tleSIpOworCisgICAgZm9yIChpID0gMDsgc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMSAhPSBOVUw7IGkrKykKKwlpZiAobmFtZVswXSA9PSBzcGVjaWFsX2tleXNbaV0udmltX2NvZGUwICYmCisJCW5hbWVbMV0gPT0gc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMSkKKwkgICAgcmV0dXJuIE9LOworICAgIHJldHVybiBGQUlMOworfQorCisgICAgdm9pZAorZ3VpX21jaF9iZWVwKHZvaWQpCit7CisgICAgRCgiZ3VpX21jaF9iZWVwIik7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2ZsYXNoKGludCBtc2VjKQoreworICAgIEQoImd1aV9tY2hfZmxhc2giKTsKKworICAgIFNldERyTWQoZ3VpLndpbmRvdy0+UlBvcnQsIENPTVBMRU1FTlQpOworICAgIFJlY3RGaWxsKGd1aS53aW5kb3ctPlJQb3J0LCAwLCAwLCBndWkud2luZG93LT5HWlpXaWR0aCAtIDEsIGd1aS53aW5kb3ctPkdaWkhlaWdodCAtIDEpOworICAgIERlbGF5KG1zZWMgKiA1MCAvIDEwMDApOworICAgIFJlY3RGaWxsKGd1aS53aW5kb3ctPlJQb3J0LCAwLCAwLCBndWkud2luZG93LT5HWlpXaWR0aCAtIDEsIGd1aS53aW5kb3ctPkdaWkhlaWdodCAtIDEpOworICAgIFNldERyTWQoZ3VpLndpbmRvdy0+UlBvcnQsIEpBTTIpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9pbnZlcnRfcmVjdGFuZ2xlKCBpbnQgciwgaW50IGMsIGludCBuciwgaW50IG5jKQoreworICAgIHByaW50ZigiZ3VpX21jaF9pbnZlcnRfcmVjdGFuZ2xlICVkICVkICVkICVkXG4iLCByLCBjLCBuciwgbmMpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9pY29uaWZ5KHZvaWQpCit7CisgICAgRCgiZ3VpX21jaF9pY29uaWZ5Iik7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBCcmluZyB0aGUgVmltIHdpbmRvdyB0byB0aGUgZm9yZWdyb3VuZC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2ZvcmVncm91bmQoKQoreworICAgIFdpbmRvd1RvRnJvbnQoZ3VpLndpbmRvdyk7CisgICAgRCgiZ3VpX21jaF9zZXRfZm9yZWdyb3VuZCIpOworfQorI2VuZGlmCisKKyAgICB2b2lkCitndWlfbWNoX3NldHRpdGxlKGNoYXJfdSAgKnRpdGxlLCBjaGFyX3UgICppY29uKQoreworICAgIFNldFdpbmRvd1RpdGxlcyhndWkud2luZG93LCB0aXRsZSwgKFNUUlBUUil+MCk7CisgICAgRCgiZ3VpX21jaF9zZXR0aXRsZSIpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zdG9wX2JsaW5rKHZvaWQpCit7CisgICAgZ3VpX3VuZHJhd19jdXJzb3IoKTsKKyAgICBEKCJndWlfbWNoX3N0b3BfYmxpbmsiKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc3RhcnRfYmxpbmsodm9pZCkKK3sKKyAgICBndWlfdXBkYXRlX2N1cnNvcihGQUxTRSwgRkFMU0UpOworICAgIEQoImd1aV9tY2hfc3RhcnRfYmxpbmsiKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19ob2xsb3dfY3Vyc29yKGd1aWNvbG9yX1QgY29sb3IpCit7CisgICAgZHJhd0JveChEQl9Ob3RGaWxsZWQsIGd1aS5jb2wsIGd1aS5yb3csIGNoYXJhY3RlcldpZHRoLCBjaGFyYWN0ZXJIZWlnaHQsIGNvbG9yKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19wYXJ0X2N1cnNvciggaW50IHcsIGludCBoLCBndWljb2xvcl9UIGNvbG9yKQoreworICAgIEQoImd1aV9tY2hfcGFydF9jdXJzb3IiKTsKKyAgICBkcmF3Qm94KERCX0ZpbGxlZCwgZ3VpLmNvbCwgZ3VpLnJvdywgdywgaCwgY29sb3IpOworfQorCisgICAgdm9pZAorZ3VpX21jaF91cGRhdGUodm9pZCkKK3sKKyAgICBjaGVja0V2ZW50SGFuZGxlcigpOworICAgIHJldHVybiA7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfd2FpdF9mb3JfY2hhcnMoaW50IHd0aW1lKQoreworICAgIFVMT05HIHRpbWVybWFzayA9IDFMIDw8IFRpbWVyTVAtPm1wX1NpZ0JpdDsKKyAgICBVTE9ORyB3aW5tYXNrID0gMUwgPDwgZ3VpLndpbmRvdy0+VXNlclBvcnQtPm1wX1NpZ0JpdDsKKyAgICBpbnQgcmV0dmFsID0gRkFJTDsKKworICAgIGtwcmludGYoIj09PT09PT09PT0gZ3VpX21jaF93YWl0X2Zvcl9jaGFycyAlZFxuIiwgd3RpbWUpOworCisgICAgaWYgKHd0aW1lID09IC0xKSB3dGltZSA9IDEwMDAwMDAwMDA7CisgICAgaWYgKHd0aW1lIDwgMjApIHd0aW1lID0gMjA7CisKKyAgICBTZXRTaWduYWwoMCwgdGltZXJtYXNrKTsKKyAgICBUaW1lcklPLT50cl9ub2RlLmlvX0NvbW1hbmQgPSBUUl9BRERSRVFVRVNUOworICAgIFRpbWVySU8tPnRyX3RpbWUudHZfc2VjcyA9IHd0aW1lIC8gMTAwMDsKKyAgICBUaW1lcklPLT50cl90aW1lLnR2X21pY3JvID0gKHd0aW1lICUgMTAwMCkgKiAxMDAwOworICAgIFNlbmRJTygmVGltZXJJTy0+dHJfbm9kZSk7CisgICAgVGltZXJTZW50ID0gVFJVRTsKKworICAgIGZvcig7OykKKyAgICB7CisJVUxPTkcgc2lncyA9IFdhaXQod2lubWFzayB8IHRpbWVybWFzayk7CisKKwlpZiAoc2lncyAmIHdpbm1hc2spCisJeworCSAgICBjaGVja0V2ZW50SGFuZGxlcigpOworCSAgICBpZiAoIXZpbV9pc19pbnB1dF9idWZfZW1wdHkoKSkKKwkgICAgeworCQlyZXR2YWwgPSBPSzsKKwkJaWYgKCFDaGVja0lPKCZUaW1lcklPLT50cl9ub2RlKSkgQWJvcnRJTygmVGltZXJJTy0+dHJfbm9kZSk7CisJCVdhaXRJTygmVGltZXJJTy0+dHJfbm9kZSk7CisJCVRpbWVyU2VudCA9IEZBTFNFOworCQlicmVhazsKKwkgICAgfQorCX0KKworCWlmIChzaWdzICYgdGltZXJtYXNrKQorCXsKKwkgICAgc3RydWN0IE1lc3NhZ2UgKm1zZzsKKworCSAgICBpZiAoKG1zZyA9IEdldE1zZyhUaW1lck1QKSkpCisJICAgIHsKKwkJUmVwbHlNc2cobXNnKTsKKwkJVGltZXJTZW50ID0gRkFMU0U7CisJCXJldHZhbCA9IEZBSUw7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVybiByZXR2YWw7CisKKy8vICAgIGFzc2VydCh3dGltZSAhPSAwKTsKKy8vICAgIHJldHVybiBjaGFyRXZlbnRIYW5kbGVyKHd0aW1lKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZmx1c2godm9pZCkKK3sKK30KKworICAgIHZvaWQKK2d1aV9tY2hfY2xlYXJfYmxvY2soaW50IHJvdzEsIGludCBjb2wxLCBpbnQgcm93MiwgaW50IGNvbDIpCit7CisgICAgVUJZVEUgYXBlbiA9IEdldEFQZW4oZ3VpLndpbmRvdy0+UlBvcnQpOworCisgICAgU2V0QVBlbihndWkud2luZG93LT5SUG9ydCwgZ2V0cmVhbGNvbG9yKGd1aS5iYWNrX3BpeGVsKSk7CisgICAgUmVjdEZpbGwoZ3VpLndpbmRvdy0+UlBvcnQsCisJICAgICBwb3NXaWR0aENoYXJUb1BvaW50KGNvbDEpLAorCSAgICAgcG9zSGVpZ2h0Q2hhclRvUG9pbnQocm93MSksCisJICAgICBwb3NXaWR0aENoYXJUb1BvaW50KGNvbDIgKyAxKSAtIDEsCisJICAgICBwb3NIZWlnaHRDaGFyVG9Qb2ludChyb3cyICsgMSkgLSAxKTsKKyAgICBTZXRBUGVuKGd1aS53aW5kb3ctPlJQb3J0LCBhcGVuKTsKKworfQorCisgICAgdm9pZAorZ3VpX21jaF9jbGVhcl9hbGwodm9pZCkKK3sKKyAgICBTZXRSYXN0KGd1aS53aW5kb3ctPlJQb3J0LCBHZXRCUGVuKGd1aS53aW5kb3ctPlJQb3J0KSk7CisgICAgcmVmcmVzaEJvcmRlcigpOworICAgIEQoImd1aV9tY2hfY2xlYXJfYWxsIik7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2RlbGV0ZV9saW5lcyhpbnQgcm93LCBpbnQgbnVtX2xpbmVzKQoreworICAgIFNjcm9sbFdpbmRvd1Jhc3RlcihndWkud2luZG93LAorCSAgICAwLAorCSAgICBjaGFyYWN0ZXJIZWlnaHQgKiBudW1fbGluZXMsCisJICAgIHBvc1dpZHRoQ2hhclRvUG9pbnQoZ3VpLnNjcm9sbF9yZWdpb25fbGVmdCksCisJICAgIHBvc0hlaWdodENoYXJUb1BvaW50KHJvdyksCisJICAgIHBvc1dpZHRoQ2hhclRvUG9pbnQoZ3VpLnNjcm9sbF9yZWdpb25fcmlnaHQgKyAxKSAtIDEsCisJICAgIHBvc0hlaWdodENoYXJUb1BvaW50KGd1aS5zY3JvbGxfcmVnaW9uX2JvdCArIDEpIC0gMSk7CisKKyAgICBndWlfY2xlYXJfYmxvY2soZ3VpLnNjcm9sbF9yZWdpb25fYm90IC0gbnVtX2xpbmVzICsgMSwKKwkJICAgIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQsCisJCSAgICBndWkuc2Nyb2xsX3JlZ2lvbl9ib3QsCisJCSAgICBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCk7CisKK30KKworICAgIHZvaWQKK2d1aV9tY2hfaW5zZXJ0X2xpbmVzKGludCByb3csIGludCBudW1fbGluZXMpCit7CisgICAgIFNjcm9sbFdpbmRvd1Jhc3RlcihndWkud2luZG93LAorCSAgICAwLAorCSAgICAtY2hhcmFjdGVySGVpZ2h0Km51bV9saW5lcywKKwkgICAgcG9zV2lkdGhDaGFyVG9Qb2ludChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KSwKKwkgICAgcG9zSGVpZ2h0Q2hhclRvUG9pbnQocm93KSwKKwkgICAgcG9zV2lkdGhDaGFyVG9Qb2ludChndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCArIDEpIC0gMSwKKwkgICAgcG9zSGVpZ2h0Q2hhclRvUG9pbnQoZ3VpLnNjcm9sbF9yZWdpb25fYm90ICsxICkgLSAxKTsKKworICAgIGd1aV9jbGVhcl9ibG9jayhyb3csIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQsCisJCSAgICByb3cgKyBudW1fbGluZXMgLSAxLCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCk7CisKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZW5hYmxlX21lbnUoaW50IGZsYWcpCit7CisgICAgRCgiZ3VpX21jaF9lbmFibGVfbWVudSIpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfbWVudV9wb3MoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCit7CisgICAgRCgiZ3VpX21jaF9zZXRfbWVudV9wb3MiKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZGVzdHJveV9tZW51KHZpbW1lbnVfVCAqbWVudSkKK3sKKyAgICBEKCJndWlfbWNoX2Rlc3Ryb3lfbWVudSIpOworICAgIENsZWFyTWVudVN0cmlwKGd1aS53aW5kb3cpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9tZW51X2dyZXkodmltbWVudV9UICptZW51LCBpbnQgZ3JleSkKK3sKKyAgICBEKCJndWlfbWNoX21lbnVfZ3JleSIpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9tZW51X2hpZGRlbih2aW1tZW51X1QgKm1lbnUsIGludCBoaWRkZW4pCit7CisgICAgRCgiZ3VpX21jaF9tZW51X2hpZGRlbiIpOworICAgIENsZWFyTWVudVN0cmlwKGd1aS53aW5kb3cpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9kcmF3X21lbnViYXIodm9pZCkKK3sKKyAgICBEKCJndWlfbWNoX2RyYXdfbWVudWJhciIpOworICAgIFNldE1lbnVTdHJpcChndWkud2luZG93LCBndWkubWVudSk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorQW1pZ2FFcnJvcihjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgc3RhdGljIHN0cnVjdCBJbnR1aVRleHQgcG9zID0geyAzLCAwLCBKQU0yLCAxNywgNSwgTlVMTCwgIkNhbmNlbCIsIE5VTEx9IDsKKyAgICBzdGF0aWMgc3RydWN0IEludHVpVGV4dCBuZWcgPSB7IDMsIDAsIEpBTTIsIDE3LCA1LCBOVUxMLCAiQ2FuY2VsIiwgTlVMTH0gOworICAgIHN0YXRpYyBzdHJ1Y3QgSW50dWlUZXh0IG1lc3NhZ2UgPSB7IDMsIDAsIEpBTTIsIDE3LCA1LCBOVUxMLCBOVUxMLCBOVUxMfSA7CisgICAgc3RhdGljIGNoYXIgKnN0cnB0ciA9IDA7CisKKyAgICBpZiAoc3RycHRyKQorCWZyZWUoc3RycHRyKTsKKyAgICBzdHJwdHIgPSBtYWxsb2Moc3RybGVuKHN0cmluZykrMSk7CisKKyAgICBtZXNzYWdlLklUZXh0ID0gc3RycHRyOworICAgIHN0cmNweShzdHJwdHIsIHN0cmluZyk7CisKKyAgICBBdXRvUmVxdWVzdChOVUxMLCAmbWVzc2FnZSwgJnBvcywgJm5lZywgMCwgMCwgMzAwLCAzMDApOworfQorCisgICAgaW50CitjbGlwX21jaF9vd25fc2VsZWN0aW9uKFZpbUNsaXBib2FyZCAqY2JkKQoreworICAgIEQoImNsaWJfbWNoX293bl9zZWxlY3Rpb24iKTsKKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICB2b2lkCittY2hfc2V0bW91c2UoaW50ICBvbikKK3sKK30KKworLyoKKyAqIEdldCBjdXJyZW50IHkgbW91c2UgY29vcmRpbmF0ZSBpbiB0ZXh0IHdpbmRvdy4KKyAqIFJldHVybiAtMSB3aGVuIHVua25vd24uCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfZ2V0X21vdXNlX3goKQoreworICAgIHJldHVybiBndWkud2luZG93LT5HWlpNb3VzZVg7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfZ2V0X21vdXNlX3koKQoreworICAgIHJldHVybiBndWkud2luZG93LT5HWlpNb3VzZVk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldG1vdXNlKHgsIHkpCisgICAgaW50CQl4OworICAgIGludAkJeTsKK3sKKyAgICAvKiBUT0RPICovCit9CisKKyAgICB2b2lkCitndWlfbWNoX3Nob3dfcG9wdXBtZW51KHZpbW1lbnVfVCAqbWVudSkKK3sKKyAgICAvKiBUT0RPICovCit9CisKKyAgICB2b2lkCitjbGlwX21jaF9sb3NlX3NlbGVjdGlvbihWaW1DbGlwYm9hcmQgKmNiZCkKK3sKKyAgICBEKCJjbGlwX21jaF9sb3NlX3NlbGVjY3Rpb24iKTsKK30KKworICAgIHZvaWQKK2NsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uKFZpbUNsaXBib2FyZCAqY2JkKQoreworICAgIEQoImNsaXBfbWNoX3JlcXVzdF9zZWxlY3Rpb24iKTsKK30KKworICAgIHZvaWQKK2NsaXBfbWNoX3NldF9zZWxlY3Rpb24oVmltQ2xpcGJvYXJkICpjYmQpCit7Cit9CisKKyAgICBsb25nX3UKK2d1aV9tY2hfZ2V0X3JnYihndWljb2xvcl9UIHBpeGVsKQoreworICAgIFVMT05HIGNvbHRhYmxlWzNdLCBjb2xvcjsKKworICAgIEdldFJHQjMyKGd1aS53aW5kb3ctPldTY3JlZW4tPlZpZXdQb3J0LkNvbG9yTWFwLAorCSAgICAgZ2V0cmVhbGNvbG9yKHBpeGVsKSwKKwkgICAgIDEsCisJICAgICBjb2x0YWJsZSk7CisKKyAgICBjb2xvciA9ICgoY29sdGFibGVbMF0gJiAweEZGMDAwMDAwKSA+PiA4KSB8CisJICAgICgoY29sdGFibGVbMV0gJiAweEZGMDAwMDAwKSA+PiAxNikgfAorCSAgICAoKGNvbHRhYmxlWzJdICYgMHhGRjAwMDAwMCkgPj4gMjQpOworCisgICAgcmV0dXJuIGNvbG9yOworfQorCisjZW5kaWYgLyogVVNFX0FNSUdBX0dVSSovCmRpZmYgLS1naXQgYS9zcmMvZ3VpX2FtaWdhLmggYi9zcmMvZ3VpX2FtaWdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwMTIyZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfYW1pZ2EuaApAQCAtMCwwICsxLDUyIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCQlieSBCcmFtIE1vb2xlbmFhcgorICoJCQkJQW1pZ2EgR1VJIHN1cHBvcnQgYnkgTWljaGFlbCBOaWVsc2VuCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqCisgKiBBbWlnYSBHVUkgaGVhZGVyIGZpbGUuCisgKi8KKworI2lmICFkZWZpbmVkKF9fR1VJX0FNSUdBX19IKQorI2RlZmluZSBfX0dVSV9BTUlHQV9fSAorCisjZGVmaW5lIFNldEF0dHJpYihfcHRyLF9hdHRyaWIsX3ZhbHVlKSAoKF9wdHIpLT5fYXR0cmliPShfdmFsdWUpKQorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9BTUlHQSkKKworI2luY2x1ZGUgPGludHVpdGlvbi9pbnR1aXRpb24uaD4KKworZW51bSBldmVudCB7CisgICAgZXZfTnVsbEV2ZW50LAorICAgIGV2X01lbnVWZXJpZnksCisgICAgZXZfTWVudVBpY2ssCisgICAgZXZfQ2xvc2VXaW5kb3csCisgICAgZXZfTmV3U2l6ZSwKKyAgICBldl9SZWZyZXNoV2luZG93LAorICAgIGV2X01vdXNlQnV0dG9ucywKKyAgICBldl9Nb3VzZU1vdmUsCisgICAgZXZfR2FkZ2V0RG93biwKKyAgICBldl9HYWRnZXRVcCwKKyAgICBldl9LZXlTdHJva2UsCisgICAgZXZfSW50dWlUaWNrcywKKyAgICBldl9NZW51SGVscCwKKyAgICBldl9HYWRnZXRIZWxwLAorCisgICAgZXZfSWdub3JlCit9OworCitzdHJ1Y3QgTXlNZW51SXRlbSB7CisgICAgc3RydWN0IE1lbnVJdGVtIG1lbnVJdGVtOworICAgIHZpbW1lbnVfVAkqZ3VpTWVudTsKK307CisKK3VuaW9uIG15TWVudUl0ZW1VbmlvbiB7CisgICAgc3RydWN0IE1lbnVJdGVtIG1lbnVJdGVtOworICAgIHN0cnVjdCBNeU1lbnVJdGVtIG15TWVudUl0ZW07Cit9OworCisjZW5kaWYgLyogRkVBVF9HVUlfQU1JR0EqLworI2VuZGlmIC8qIF9fR1VJX0FNSUdBX19IICovCisKZGlmZiAtLWdpdCBhL3NyYy9ndWlfYXRfZnMuYyBiL3NyYy9ndWlfYXRfZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ5NjdlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2d1aV9hdF9mcy5jCkBAIC0wLDAgKzEsMjg4MCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDogKi8KKworLyoKKyAqIENvcHlyaWdodCAxOTg5IFNvZnR3YXJlIFJlc2VhcmNoIEFzc29jaWF0ZXMsIEluYy4sIFRva3lvLCBKYXBhbgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorICogdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFNvZnR3YXJlIFJlc2VhcmNoIEFzc29jaWF0ZXMgbm90IGJlIHVzZWQKKyAqIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFNvZnR3YXJlIFJlc2VhcmNoIEFzc29jaWF0ZXMKKyAqIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBTT0ZUV0FSRSBSRVNFQVJDSCBBU1NPQ0lBVEVTIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTCisgKiBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLAorICogSU4gTk8gRVZFTlQgU0hBTEwgU09GVFdBUkUgUkVTRUFSQ0ggQVNTT0NJQVRFUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAorICogSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcjogRXJpayBNLiB2YW4gZGVyIFBvZWwKKyAqCSAgIFNvZnR3YXJlIFJlc2VhcmNoIEFzc29jaWF0ZXMsIEluYy4sIFRva3lvLCBKYXBhbgorICoJICAgZXJpa0BzcmEuY28uanAKKyAqLworLyoKKyAqIEF1dGhvcidzIGFkZHJlc3NlczoKKyAqCWVyaWtAc3JhLmNvLmpwCisgKgllcmlrJXNyYS5jby5qcEB1dW5ldC51dS5uZXQKKyAqCWVyaWslc3JhLmNvLmpwQG1jdmF4LnV1Y3AKKyAqCXRyeSBqdW5ldCBpbnN0ZWFkIG9mIGNvLmpwCisgKglFcmlrIE0uIHZhbiBkZXIgUG9lbAorICoJU29mdHdhcmUgUmVzZWFyY2ggQXNzb2NpYXRlcywgSW5jLgorICoJMS0xLTEgSGlyYWthd2EtY2hvLCBDaGl5b2RhLWt1CisgKglUb2t5byAxMDIgSmFwYW4uIFRFTCArODEtMy0yMzQtMjY5MgorICovCisKKy8qCisgKiBIZWF2ZWx5IG1vZGlmaWVkIGZvciBWaW0gYnkgQnJhbSBNb29sZW5hYXIKKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKy8qIE9ubHkgaW5jbHVkZSB0aGlzIHdoZW4gdXNpbmcgdGhlIGZpbGUgYnJvd3NlciAqLworCisjaWZkZWYgRkVBVF9CUk9XU0UKKworLyogV2VpcmQgY29tcGxpY2F0aW9uOiBmb3IgIm1ha2UgbGludCIgVGV4dC5oIGRvZXNuJ3QgY29tYmluZSB3aXRoIFhtLmggKi8KKyNpZiBkZWZpbmVkKEZFQVRfR1VJX01PVElGKSAmJiBkZWZpbmVkKEZNVDhCSVQpCisjIHVuZGVmIEZNVDhCSVQKKyNlbmRpZgorCisjaWZuZGVmIEZFQVRfR1VJX05FWFRBVworIyBpbmNsdWRlICJndWlfYXRfc2IuaCIKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKiogU0ZpbnRlcm5hbC5oICovCisKKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WDExL1N0cmluZ0RlZnMuaD4KKyNpbmNsdWRlIDxYMTEvWG9zLmg+CisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisjIGluY2x1ZGUgPFgxMS9uZVh0YXcvVGV4dC5oPgorIyBpbmNsdWRlIDxYMTEvbmVYdGF3L0FzY2lpVGV4dC5oPgorIyBpbmNsdWRlIDxYMTEvbmVYdGF3L1Njcm9sbGJhci5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8WDExL1hhdy9UZXh0Lmg+CisjIGluY2x1ZGUgPFgxMS9YYXcvQXNjaWlUZXh0Lmg+CisjZW5kaWYKKworI2RlZmluZSBTRUxfRklMRV9DQU5DRUwJCS0xCisjZGVmaW5lIFNFTF9GSUxFX09LCQkwCisjZGVmaW5lIFNFTF9GSUxFX05VTEwJCTEKKyNkZWZpbmUgU0VMX0ZJTEVfVEVYVAkJMgorCisjZGVmaW5lIFNGX0RPX1NDUk9MTAkJMQorI2RlZmluZSBTRl9ET19OT1RfU0NST0xMCTAKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQJCXN0YXREb25lOworICAgIGNoYXIJKnJlYWw7CisgICAgY2hhcgkqc2hvd247Cit9IFNGRW50cnk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgY2hhcgkqZGlyOworICAgIGNoYXIJKnBhdGg7CisgICAgU0ZFbnRyeQkqZW50cmllczsKKyAgICBpbnQJCW5FbnRyaWVzOworICAgIGludAkJdk9yaWdpbjsKKyAgICBpbnQJCW5DaGFyczsKKyAgICBpbnQJCWhPcmlnaW47CisgICAgaW50CQljaGFuZ2VkOworICAgIGludAkJYmVnaW5TZWxlY3Rpb247CisgICAgaW50CQllbmRTZWxlY3Rpb247CisgICAgdGltZV90CW10aW1lOworfSBTRkRpcjsKKworc3RhdGljIGNoYXIJU0ZzdGFydERpcltNQVhQQVRITF0sCisJCVNGY3VycmVudFBhdGhbTUFYUEFUSExdLAorCQlTRmN1cnJlbnREaXJbTUFYUEFUSExdOworCitzdGF0aWMgV2lkZ2V0CXNlbEZpbGUsCisJCXNlbEZpbGVGaWVsZCwKKwkJc2VsRmlsZUZvcm0sCisJCXNlbEZpbGVIU2Nyb2xsLAorCQlzZWxGaWxlSFNjcm9sbHNbM10sCisJCXNlbEZpbGVMaXN0c1szXSwKKwkJc2VsRmlsZU9LLAorCQlzZWxGaWxlQ2FuY2VsLAorCQlzZWxGaWxlUHJvbXB0LAorCQlzZWxGaWxlVlNjcm9sbHNbM107CisKK3N0YXRpYyBEaXNwbGF5CSpTRmRpc3BsYXk7CisKK3N0YXRpYyBpbnQJU0ZjaGFyV2lkdGgsIFNGY2hhckFzY2VudCwgU0ZjaGFySGVpZ2h0OworCitzdGF0aWMgU0ZEaXIJKlNGZGlycyA9IE5VTEw7CisKK3N0YXRpYyBpbnQJU0ZkaXJFbmQ7CitzdGF0aWMgaW50CVNGZGlyUHRyOworCitzdGF0aWMgUGl4ZWwJU0Zmb3JlLCBTRmJhY2s7CisKK3N0YXRpYyBBdG9tCVNGd21EZWxldGVXaW5kb3c7CisKK3N0YXRpYyBYU2VnbWVudCBTRnNlZ3NbMl0sIFNGY29tcGxldGlvblNlZ3NbMl07CisKK3N0YXRpYyBYYXdUZXh0UG9zaXRpb24gU0Z0ZXh0UG9zOworCitzdGF0aWMgaW50CVNGdXBwZXJYLCBTRmxvd2VyWSwgU0Z1cHBlclk7CisKK3N0YXRpYyBpbnQJU0Z0ZXh0WCwgU0Z0ZXh0WW9mZnNldDsKKworc3RhdGljIGludAlTRmVudHJ5V2lkdGgsIFNGZW50cnlIZWlnaHQ7CisKK3N0YXRpYyBpbnQJU0ZsaW5lVG9UZXh0SCA9IDM7CitzdGF0aWMgaW50CVNGbGluZVRvVGV4dFYgPSAzOworCitzdGF0aWMgaW50CVNGYmVzaWRlVGV4dCA9IDM7CitzdGF0aWMgaW50CVNGYWJvdmVBbmRCZWxvd1RleHQgPSAyOworCitzdGF0aWMgaW50CVNGY2hhcnNQZXJFbnRyeSA9IDE1OworCitzdGF0aWMgaW50CVNGbGlzdFNpemUgPSAxMDsKKworc3RhdGljIGludAlTRmN1cnJlbnRJbnZlcnRbM10gPSB7IC0xLCAtMSwgLTEgfTsKKworc3RhdGljIGludAlTRndvcmtQcm9jQWRkZWQgPSAwOworCitzdGF0aWMgWHRBcHBDb250ZXh0IFNGYXBwOworCitzdGF0aWMgaW50CVNGcGF0aFNjcm9sbFdpZHRoLCBTRnZTY3JvbGxIZWlnaHQsIFNGaFNjcm9sbFdpZHRoOworCisjaWZkZWYgRkVBVF9YRk9OVFNFVAorc3RhdGljIGNoYXIJU0Z0ZXh0QnVmZmVyW01BWFBBVEhMKnNpemVvZih3Y2hhcl90KV07CisjZWxzZQorc3RhdGljIGNoYXIJU0Z0ZXh0QnVmZmVyW01BWFBBVEhMXTsKKyNlbmRpZgorCitzdGF0aWMgaW50CVNGYnV0dG9uUHJlc3NlZCA9IDA7CisKK3N0YXRpYyBYdEludGVydmFsSWQgU0ZkaXJNb2RUaW1lcklkOworCitzdGF0aWMgaW50CSgqU0ZmdW5jKSgpOworCitzdGF0aWMgaW50CVNGc3RhdHVzID0gU0VMX0ZJTEVfTlVMTDsKKworLyoqKioqKioqKioqKioqKioqIHN0YXRpYyBmdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQgU0ZzZXRUZXh0IF9fQVJHUygoY2hhciAqcGF0aCkpOworc3RhdGljIHZvaWQgU0Z0ZXh0Q2hhbmdlZCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBjaGFyICpTRmdldFRleHQgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBTRnVwZGF0ZVBhdGggX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50IFNGZ2V0RGlyIF9fQVJHUygoU0ZEaXIgKmRpcikpOworc3RhdGljIHZvaWQgU0ZkcmF3TGlzdHMgX19BUkdTKChpbnQgZG9TY3JvbGwpKTsKK3N0YXRpYyB2b2lkIFNGZHJhd0xpc3QgX19BUkdTKChpbnQgbiwgaW50IGRvU2Nyb2xsKSk7CitzdGF0aWMgdm9pZCBTRmNsZWFyTGlzdCBfX0FSR1MoKGludCBuLCBpbnQgZG9TY3JvbGwpKTsKK3N0YXRpYyB2b2lkIFNGYnV0dG9uUHJlc3NMaXN0IF9fQVJHUygoV2lkZ2V0IHcsIGludCBuLCBYQnV0dG9uUHJlc3NlZEV2ZW50ICpldmVudCkpOworc3RhdGljIHZvaWQgU0ZidXR0b25SZWxlYXNlTGlzdCBfX0FSR1MoKFdpZGdldCB3LCBpbnQgbiwgWEJ1dHRvblJlbGVhc2VkRXZlbnQgKmV2ZW50KSk7CitzdGF0aWMgdm9pZCBTRmRpck1vZFRpbWVyIF9fQVJHUygoWHRQb2ludGVyIGNsLCBYdEludGVydmFsSWQgKmlkKSk7CitzdGF0aWMgY2hhciBTRnN0YXRDaGFyIF9fQVJHUygoc3RydWN0IHN0YXQgKnN0YXRCdWYpKTsKK3N0YXRpYyB2b2lkIFNGZHJhd1N0cmluZ3MgX19BUkdTKChXaW5kb3cgdywgU0ZEaXIgKmRpciwgaW50IGZyb20sIGludCB0bykpOworc3RhdGljIGludCBTRm5ld0ludmVydEVudHJ5IF9fQVJHUygoaW50IG4sIFhNb3Rpb25FdmVudCAqZXZlbnQpKTsKK3N0YXRpYyB2b2lkIFNGaW52ZXJ0RW50cnkgX19BUkdTKChpbnQgbikpOworc3RhdGljIHZvaWQgU0ZlbnRlckxpc3QgX19BUkdTKChXaWRnZXQgdywgaW50IG4sIFhFbnRlcldpbmRvd0V2ZW50ICpldmVudCkpOworc3RhdGljIHZvaWQgU0ZsZWF2ZUxpc3QgX19BUkdTKChXaWRnZXQgdywgaW50IG4sIFhFdmVudCAqZXZlbnQpKTsKK3N0YXRpYyB2b2lkIFNGbW90aW9uTGlzdCBfX0FSR1MoKFdpZGdldCB3LCBpbnQgbiwgWE1vdGlvbkV2ZW50ICpldmVudCkpOworc3RhdGljIHZvaWQgU0Z2RmxvYXRTbGlkZXJNb3ZlZENhbGxiYWNrIF9fQVJHUygoV2lkZ2V0IHcsIFh0UG9pbnRlciBuLCBYdFBvaW50ZXIgZm5ldykpOworc3RhdGljIHZvaWQgU0Z2U2xpZGVyTW92ZWRDYWxsYmFjayBfX0FSR1MoKFdpZGdldCB3LCBpbnQgbiwgaW50IG53KSk7CitzdGF0aWMgdm9pZCBTRnZBcmVhU2VsZWN0ZWRDYWxsYmFjayBfX0FSR1MoKFdpZGdldCB3LCBYdFBvaW50ZXIgbiwgWHRQb2ludGVyIHBuZXcpKTsKK3N0YXRpYyB2b2lkIFNGaFNsaWRlck1vdmVkQ2FsbGJhY2sgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIG4sIFh0UG9pbnRlciBudykpOworc3RhdGljIHZvaWQgU0ZoQXJlYVNlbGVjdGVkQ2FsbGJhY2sgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIG4sIFh0UG9pbnRlciBwbmV3KSk7CitzdGF0aWMgdm9pZCBTRnBhdGhTbGlkZXJNb3ZlZENhbGxiYWNrIF9fQVJHUygoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIG53KSk7CitzdGF0aWMgdm9pZCBTRnBhdGhBcmVhU2VsZWN0ZWRDYWxsYmFjayBfX0FSR1MoKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBwbmV3KSk7CitzdGF0aWMgQm9vbGVhbiBTRndvcmtQcm9jIF9fQVJHUygodm9pZCkpOworc3RhdGljIGludCBTRmNvbXBhcmVFbnRyaWVzIF9fQVJHUygoY29uc3Qgdm9pZCAqcCwgY29uc3Qgdm9pZCAqcSkpOworc3RhdGljIHZvaWQgU0ZwcmVwYXJlVG9SZXR1cm4gX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBTRmNyZWF0ZVdpZGdldHMgX19BUkdTKChXaWRnZXQgdG9wbGV2ZWwsIGNoYXIgKnByb21wdCwgY2hhciAqb2ssIGNoYXIgKmNhbmNlbCkpOworc3RhdGljIHZvaWQgU0ZzZXRDb2xvcnMgX19BUkdTKChndWljb2xvcl9UIGJnLCBndWljb2xvcl9UIGZnLCBndWljb2xvcl9UIHNjcm9sbF9iZywgZ3VpY29sb3JfVCBzY3JvbGxmZykpOworCisvKioqKioqKioqKioqKioqKiogeHN0YXQuaCAqLworCisjaWZuZGVmIFNfSVhVU1IKKyMgZGVmaW5lIFNfSVhVU1IgMDEwMAorI2VuZGlmCisjaWZuZGVmIFNfSVhHUlAKKyMgZGVmaW5lIFNfSVhHUlAgMDAxMAorI2VuZGlmCisjaWZuZGVmIFNfSVhPVEgKKyMgZGVmaW5lIFNfSVhPVEggMDAwMQorI2VuZGlmCisKKyNkZWZpbmUgU19JU1hYWChtKSAoKG0pICYgKFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCkpCisKKy8qKioqKioqKioqKioqKioqKiBQYXRoLmMgKi8KKworI2luY2x1ZGUgPHB3ZC5oPgorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGNoYXIJKm5hbWU7CisgICAgY2hhcgkqZGlyOworfSBTRkxvZ2luOworCitzdGF0aWMgaW50CVNGZG9Ob3RUb3VjaERpclB0ciA9IDA7CisKK3N0YXRpYyBpbnQJU0Zkb05vdFRvdWNoVm9yaWdpbiA9IDA7CisKK3N0YXRpYyBTRkRpcglTRnJvb3REaXIsIFNGaG9tZURpcjsKKworc3RhdGljIFNGTG9naW4JKlNGbG9naW5zOworCitzdGF0aWMgaW50CVNGdHdpZGRsZSA9IDA7CisKK3N0YXRpYyBpbnQgU0ZjaGRpciBfX0FSR1MoKGNoYXIgKnBhdGgpKTsKKworICAgIHN0YXRpYyBpbnQKK1NGY2hkaXIocGF0aCkKKyAgICBjaGFyCSpwYXRoOworeworICAgIGludAkJcmVzdWx0OworCisgICAgcmVzdWx0ID0gMDsKKworICAgIGlmIChzdHJjbXAocGF0aCwgU0ZjdXJyZW50RGlyKSkKKyAgICB7CisJcmVzdWx0ID0gbWNoX2NoZGlyKHBhdGgpOworCWlmICghcmVzdWx0KQorCSAgICAodm9pZCkgc3RyY3B5KFNGY3VycmVudERpciwgcGF0aCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgU0ZmcmVlIF9fQVJHUygoaW50IGkpKTsKKworICAgIHN0YXRpYyB2b2lkCitTRmZyZWUoaSkKKyAgICBpbnQJaTsKK3sKKyAgICBTRkRpcgkqZGlyOworICAgIGludAkJajsKKworICAgIGRpciA9ICYoU0ZkaXJzW2ldKTsKKworICAgIGZvciAoaiA9IGRpci0+bkVudHJpZXMgLSAxOyBqID49IDA7IGotLSkKKyAgICB7CisJaWYgKGRpci0+ZW50cmllc1tqXS5zaG93biAhPSBkaXItPmVudHJpZXNbal0ucmVhbCkKKwkgICAgWHRGcmVlKGRpci0+ZW50cmllc1tqXS5zaG93bik7CisJWHRGcmVlKGRpci0+ZW50cmllc1tqXS5yZWFsKTsKKyAgICB9CisKKyAgICBYdEZyZWUoKGNoYXIgKilkaXItPmVudHJpZXMpOworICAgIFh0RnJlZShkaXItPmRpcik7CisKKyAgICBkaXItPmRpciA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIFNGc3RyZHVwIF9fQVJHUygoY2hhciAqKnMxLCBjaGFyICpzMikpOworCisgICAgc3RhdGljIHZvaWQKK1NGc3RyZHVwKHMxLCBzMikKKyAgICBjaGFyCSoqczE7CisgICAgY2hhcgkqczI7Cit7CisgICAgKnMxID0gc3RyY3B5KFh0TWFsbG9jKCh1bnNpZ25lZCkoc3RybGVuKHMyKSArIDEpKSwgczIpOworfQorCitzdGF0aWMgdm9pZCBTRnVucmVhZGFibGVEaXIgX19BUkdTKChTRkRpciAqZGlyKSk7CisKKyAgICBzdGF0aWMgdm9pZAorU0Z1bnJlYWRhYmxlRGlyKGRpcikKKyAgICBTRkRpcgkqZGlyOworeworICAgIGNoYXIJKmNhbm5vdE9wZW4gPSBfKCI8Y2Fubm90IG9wZW4+ICIpOworCisgICAgZGlyLT5lbnRyaWVzID0gKFNGRW50cnkgKikgWHRNYWxsb2Moc2l6ZW9mKFNGRW50cnkpKTsKKyAgICBkaXItPmVudHJpZXNbMF0uc3RhdERvbmUgPSAxOworICAgIFNGc3RyZHVwKCZkaXItPmVudHJpZXNbMF0ucmVhbCwgY2Fubm90T3Blbik7CisgICAgZGlyLT5lbnRyaWVzWzBdLnNob3duID0gZGlyLT5lbnRyaWVzWzBdLnJlYWw7CisgICAgZGlyLT5uRW50cmllcyA9IDE7CisgICAgZGlyLT5uQ2hhcnMgPSBzdHJsZW4oY2Fubm90T3Blbik7Cit9CisKK3N0YXRpYyB2b2lkIFNGcmVwbGFjZVRleHQgX19BUkdTKChTRkRpciAqZGlyLCBjaGFyICpzdHIpKTsKKworICAgIHN0YXRpYyB2b2lkCitTRnJlcGxhY2VUZXh0KGRpciwgc3RyKQorICAgIFNGRGlyCSpkaXI7CisgICAgY2hhcgkqc3RyOworeworICAgIGludAlsZW47CisKKyAgICAqKGRpci0+cGF0aCkgPSAwOworICAgIGxlbiA9IHN0cmxlbihzdHIpOworICAgIGlmIChzdHJbbGVuIC0gMV0gPT0gJy8nKQorCSh2b2lkKSBzdHJjYXQoU0ZjdXJyZW50UGF0aCwgc3RyKTsKKyAgICBlbHNlCisJKHZvaWQpIHN0cm5jYXQoU0ZjdXJyZW50UGF0aCwgc3RyLCBsZW4gLSAxKTsKKyAgICBpZiAoc3RybmNtcChTRmN1cnJlbnRQYXRoLCBTRnN0YXJ0RGlyLCBzdHJsZW4oU0ZzdGFydERpcikpKQorCVNGc2V0VGV4dChTRmN1cnJlbnRQYXRoKTsKKyAgICBlbHNlCisJU0ZzZXRUZXh0KCYoU0ZjdXJyZW50UGF0aFtzdHJsZW4oU0ZzdGFydERpcildKSk7CisKKyAgICBTRnRleHRDaGFuZ2VkKCk7Cit9CisKK3N0YXRpYyB2b2lkIFNGZXhwYW5kIF9fQVJHUygoY2hhciAqc3RyKSk7CisKKyAgICBzdGF0aWMgdm9pZAorU0ZleHBhbmQoc3RyKQorICAgIGNoYXIJKnN0cjsKK3sKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWNtcDsKKyAgICBjaGFyCSpuYW1lLCAqZ3Jvd2luZzsKKyAgICBTRkRpcgkqZGlyOworICAgIFNGRW50cnkJKmVudHJ5LCAqbWF4OworCisgICAgbGVuID0gc3RybGVuKHN0cik7CisKKyAgICBkaXIgPSAmKFNGZGlyc1tTRmRpckVuZCAtIDFdKTsKKworICAgIGlmIChkaXItPmJlZ2luU2VsZWN0aW9uID09IC0xKQorICAgIHsKKwlTRnN0cmR1cCgmc3RyLCBzdHIpOworCVNGcmVwbGFjZVRleHQoZGlyLCBzdHIpOworCVh0RnJlZShzdHIpOworCXJldHVybjsKKyAgICB9CisgICAgZWxzZSBpZiAoZGlyLT5iZWdpblNlbGVjdGlvbiA9PSBkaXItPmVuZFNlbGVjdGlvbikKKyAgICB7CisJU0ZyZXBsYWNlVGV4dChkaXIsIGRpci0+ZW50cmllc1tkaXItPmJlZ2luU2VsZWN0aW9uXS5zaG93bik7CisJcmV0dXJuOworICAgIH0KKworICAgIG1heCA9ICYoZGlyLT5lbnRyaWVzW2Rpci0+ZW5kU2VsZWN0aW9uICsgMV0pOworCisgICAgbmFtZSA9IGRpci0+ZW50cmllc1tkaXItPmJlZ2luU2VsZWN0aW9uXS5zaG93bjsKKyAgICBTRnN0cmR1cCgmZ3Jvd2luZywgbmFtZSk7CisKKyAgICBjbXAgPSAwOworICAgIHdoaWxlICghY21wKQorICAgIHsKKwllbnRyeSA9ICYoZGlyLT5lbnRyaWVzW2Rpci0+YmVnaW5TZWxlY3Rpb25dKTsKKwl3aGlsZSAoZW50cnkgPCBtYXgpCisJeworCSAgICBpZiAoKGNtcCA9IHN0cm5jbXAoZ3Jvd2luZywgZW50cnktPnNob3duLCBsZW4pKSkKKwkJYnJlYWs7CisJICAgIGVudHJ5Kys7CisJfQorCWxlbisrOworICAgIH0KKworICAgIC8qCisgICAgICogU0ZyZXBsYWNlVGV4dCgpIGV4cGVjdHMgZmlsZW5hbWUKKyAgICAgKi8KKyAgICBncm93aW5nW2xlbiAtIDJdID0gJyAnOworCisgICAgZ3Jvd2luZ1tsZW4gLSAxXSA9IDA7CisgICAgU0ZyZXBsYWNlVGV4dChkaXIsIGdyb3dpbmcpOworICAgIFh0RnJlZShncm93aW5nKTsKK30KKworc3RhdGljIGludCBTRmZpbmRGaWxlIF9fQVJHUygoU0ZEaXIgKmRpciwgY2hhciAqc3RyKSk7CisKKyAgICBzdGF0aWMgaW50CitTRmZpbmRGaWxlKGRpciwgc3RyKQorICAgIFNGRGlyCSpkaXI7CisgICAgY2hhcgkqc3RyOworeworICAgIGludAkJaSwgbGFzdCwgbWF4OworICAgIGNoYXIJKm5hbWUsIHNhdmU7CisgICAgU0ZFbnRyeQkqZW50cmllczsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWJlZ2luLCBlbmQ7CisgICAgaW50CQlyZXN1bHQ7CisKKyAgICBsZW4gPSBzdHJsZW4oc3RyKTsKKworICAgIGlmIChzdHJbbGVuIC0gMV0gPT0gJyAnKQorICAgIHsKKwlTRmV4cGFuZChzdHIpOworCXJldHVybiAxOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJbbGVuIC0gMV0gPT0gJy8nKQorCWxlbi0tOworCisgICAgbWF4ID0gZGlyLT5uRW50cmllczsKKworICAgIGVudHJpZXMgPSBkaXItPmVudHJpZXM7CisKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoaSA8IG1heCkKKyAgICB7CisJbmFtZSA9IGVudHJpZXNbaV0uc2hvd247CisJbGFzdCA9IHN0cmxlbihuYW1lKSAtIDE7CisJc2F2ZSA9IG5hbWVbbGFzdF07CisJbmFtZVtsYXN0XSA9IDA7CisKKwlyZXN1bHQgPSBzdHJuY21wKHN0ciwgbmFtZSwgbGVuKTsKKworCW5hbWVbbGFzdF0gPSBzYXZlOworCWlmIChyZXN1bHQgPD0gMCkKKwkgICAgYnJlYWs7CisJaSsrOworICAgIH0KKyAgICBiZWdpbiA9IGk7CisgICAgd2hpbGUgKGkgPCBtYXgpCisgICAgeworCW5hbWUgPSBlbnRyaWVzW2ldLnNob3duOworCWxhc3QgPSBzdHJsZW4obmFtZSkgLSAxOworCXNhdmUgPSBuYW1lW2xhc3RdOworCW5hbWVbbGFzdF0gPSAwOworCisJcmVzdWx0ID0gc3RybmNtcChzdHIsIG5hbWUsIGxlbik7CisKKwluYW1lW2xhc3RdID0gc2F2ZTsKKwlpZiAocmVzdWx0KQorCSAgICBicmVhazsKKwlpKys7CisgICAgfQorICAgIGVuZCA9IGk7CisKKyAgICBpZiAoYmVnaW4gIT0gZW5kKQorICAgIHsKKwlpZiAoKGRpci0+YmVnaW5TZWxlY3Rpb24gIT0gYmVnaW4pIHx8IChkaXItPmVuZFNlbGVjdGlvbiAhPSBlbmQgLSAxKSkKKwl7CisJICAgIGRpci0+Y2hhbmdlZCA9IDE7CisJICAgIGRpci0+YmVnaW5TZWxlY3Rpb24gPSBiZWdpbjsKKwkgICAgaWYgKHN0cltzdHJsZW4oc3RyKSAtIDFdID09ICcvJykKKwkJZGlyLT5lbmRTZWxlY3Rpb24gPSBiZWdpbjsKKwkgICAgZWxzZQorCQlkaXItPmVuZFNlbGVjdGlvbiA9IGVuZCAtIDE7CisJfQorICAgIH0KKyAgICBlbHNlIGlmIChkaXItPmJlZ2luU2VsZWN0aW9uICE9IC0xKQorICAgIHsKKwlkaXItPmNoYW5nZWQgPSAxOworCWRpci0+YmVnaW5TZWxlY3Rpb24gPSAtMTsKKwlkaXItPmVuZFNlbGVjdGlvbiA9IC0xOworICAgIH0KKworICAgIGlmIChTRmRvTm90VG91Y2hWb3JpZ2luCisJICAgIHx8ICgoYmVnaW4gPiBkaXItPnZPcmlnaW4pICYmIChlbmQgPCBkaXItPnZPcmlnaW4gKyBTRmxpc3RTaXplKSkpCisgICAgeworCVNGZG9Ob3RUb3VjaFZvcmlnaW4gPSAwOworCXJldHVybiAwOworICAgIH0KKworICAgIGkgPSBiZWdpbiAtIDE7CisgICAgaWYgKGkgPiBtYXggLSBTRmxpc3RTaXplKQorCWkgPSBtYXggLSBTRmxpc3RTaXplOworICAgIGlmIChpIDwgMCkKKwlpID0gMDsKKworICAgIGlmIChkaXItPnZPcmlnaW4gIT0gaSkKKyAgICB7CisJZGlyLT52T3JpZ2luID0gaTsKKwlkaXItPmNoYW5nZWQgPSAxOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBTRnVuc2VsZWN0IF9fQVJHUygodm9pZCkpOworCisgICAgc3RhdGljIHZvaWQKK1NGdW5zZWxlY3QoKQoreworICAgIFNGRGlyCSpkaXI7CisKKyAgICBkaXIgPSAmKFNGZGlyc1tTRmRpckVuZCAtIDFdKTsKKyAgICBpZiAoZGlyLT5iZWdpblNlbGVjdGlvbiAhPSAtMSkKKwlkaXItPmNoYW5nZWQgPSAxOworICAgIGRpci0+YmVnaW5TZWxlY3Rpb24gPSAtMTsKKyAgICBkaXItPmVuZFNlbGVjdGlvbiA9IC0xOworfQorCitzdGF0aWMgaW50IFNGY29tcGFyZUxvZ2lucyBfX0FSR1MoKGNvbnN0IHZvaWQgKnAsIGNvbnN0IHZvaWQgKnEpKTsKKworICAgIHN0YXRpYyBpbnQKK1NGY29tcGFyZUxvZ2lucyhwLCBxKQorICAgIGNvbnN0IHZvaWQgKnAsICpxOworeworICAgIHJldHVybiBzdHJjbXAoKChTRkxvZ2luICopcCktPm5hbWUsICgoU0ZMb2dpbiAqKXEpLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgU0ZnZXRIb21lRGlycyBfX0FSR1MoKHZvaWQpKTsKKworICAgIHN0YXRpYyB2b2lkCitTRmdldEhvbWVEaXJzKCkKK3sKKyAgICBzdHJ1Y3QJcGFzc3dkCSpwdzsKKyAgICBpbnQJCUFsbG9jOworICAgIGludAkJaTsKKyAgICBTRkVudHJ5CSplbnRyaWVzID0gTlVMTDsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCW1heENoYXJzOworCisgICAgQWxsb2MgPSAxOworICAgIGkgPSAxOworICAgIGVudHJpZXMgPSAoU0ZFbnRyeSAqKVh0TWFsbG9jKHNpemVvZihTRkVudHJ5KSk7CisgICAgU0Zsb2dpbnMgPSAoU0ZMb2dpbiAqKVh0TWFsbG9jKHNpemVvZihTRkxvZ2luKSk7CisgICAgZW50cmllc1swXS5yZWFsID0gWHRNYWxsb2MoMyk7CisgICAgKHZvaWQpIHN0cmNweShlbnRyaWVzWzBdLnJlYWwsICJ+Iik7CisgICAgZW50cmllc1swXS5zaG93biA9IGVudHJpZXNbMF0ucmVhbDsKKyAgICBlbnRyaWVzWzBdLnN0YXREb25lID0gMTsKKyAgICBTRmxvZ2luc1swXS5uYW1lID0gIiI7CisgICAgcHcgPSBnZXRwd3VpZCgoaW50KSBnZXR1aWQoKSk7CisgICAgU0ZzdHJkdXAoJlNGbG9naW5zWzBdLmRpciwgcHcgPyBwdy0+cHdfZGlyIDogIi8iKTsKKyAgICBtYXhDaGFycyA9IDA7CisKKyAgICAodm9pZCkgc2V0cHdlbnQoKTsKKworICAgIHdoaWxlICgocHcgPSBnZXRwd2VudCgpKSAmJiAoKihwdy0+cHdfbmFtZSkpKQorICAgIHsKKwlpZiAoaSA+PSBBbGxvYykKKwl7CisJICAgIEFsbG9jICo9IDI7CisJICAgIGVudHJpZXMgPSAoU0ZFbnRyeSAqKSBYdFJlYWxsb2MoKGNoYXIgKillbnRyaWVzLAorCQkJCQkgKHVuc2lnbmVkKShBbGxvYyAqIHNpemVvZihTRkVudHJ5KSkpOworCSAgICBTRmxvZ2lucyA9IChTRkxvZ2luICopIFh0UmVhbGxvYygoY2hhciAqKVNGbG9naW5zLAorCQkJCQkgKHVuc2lnbmVkKShBbGxvYyAqIHNpemVvZihTRkxvZ2luKSkpOworCX0KKwlsZW4gPSBzdHJsZW4ocHctPnB3X25hbWUpOworCWVudHJpZXNbaV0ucmVhbCA9IFh0TWFsbG9jKCh1bnNpZ25lZCkgKGxlbiArIDMpKTsKKwkodm9pZCkgc3RyY2F0KHN0cmNweShlbnRyaWVzW2ldLnJlYWwsICJ+IiksIHB3LT5wd19uYW1lKTsKKwllbnRyaWVzW2ldLnNob3duID0gZW50cmllc1tpXS5yZWFsOworCWVudHJpZXNbaV0uc3RhdERvbmUgPSAxOworCWlmIChsZW4gPiBtYXhDaGFycykKKwkgICAgbWF4Q2hhcnMgPSBsZW47CisJU0ZzdHJkdXAoJlNGbG9naW5zW2ldLm5hbWUsIHB3LT5wd19uYW1lKTsKKwlTRnN0cmR1cCgmU0Zsb2dpbnNbaV0uZGlyLCBwdy0+cHdfZGlyKTsKKwlpKys7CisgICAgfQorCisgICAgU0Zob21lRGlyLmRpcgkJPSBYdE1hbGxvYygxKTsKKyAgICBTRmhvbWVEaXIuZGlyWzBdCQk9IDA7CisgICAgU0Zob21lRGlyLnBhdGgJCT0gU0ZjdXJyZW50UGF0aDsKKyAgICBTRmhvbWVEaXIuZW50cmllcwkJPSBlbnRyaWVzOworICAgIFNGaG9tZURpci5uRW50cmllcwkJPSBpOworICAgIFNGaG9tZURpci52T3JpZ2luCQk9IDA7CS8qIDotKSAqLworICAgIFNGaG9tZURpci5uQ2hhcnMJCT0gbWF4Q2hhcnMgKyAyOworICAgIFNGaG9tZURpci5oT3JpZ2luCQk9IDA7CisgICAgU0Zob21lRGlyLmNoYW5nZWQJCT0gMTsKKyAgICBTRmhvbWVEaXIuYmVnaW5TZWxlY3Rpb24JPSAtMTsKKyAgICBTRmhvbWVEaXIuZW5kU2VsZWN0aW9uCT0gLTE7CisKKyAgICBxc29ydCgoY2hhciAqKWVudHJpZXMsIChzaXplX3QpaSwgc2l6ZW9mKFNGRW50cnkpLCBTRmNvbXBhcmVFbnRyaWVzKTsKKyAgICBxc29ydCgoY2hhciAqKVNGbG9naW5zLCAoc2l6ZV90KWksIHNpemVvZihTRkxvZ2luKSwgU0Zjb21wYXJlTG9naW5zKTsKKworICAgIGZvciAoaS0tOyBpID49IDA7IGktLSkKKwkodm9pZClzdHJjYXQoZW50cmllc1tpXS5yZWFsLCAiLyIpOworfQorCitzdGF0aWMgaW50IFNGZmluZEhvbWVEaXIgX19BUkdTKChjaGFyICpiZWdpbiwgY2hhciAqZW5kKSk7CisKKyAgICBzdGF0aWMgaW50CitTRmZpbmRIb21lRGlyKGJlZ2luLCBlbmQpCisgICAgY2hhcgkqYmVnaW4sICplbmQ7Cit7CisgICAgY2hhcglzYXZlOworICAgIGNoYXIJKnRoZVJlc3Q7CisgICAgaW50CWk7CisKKyAgICBzYXZlID0gKmVuZDsKKyAgICAqZW5kID0gMDsKKworICAgIGZvciAoaSA9IFNGaG9tZURpci5uRW50cmllcyAtIDE7IGkgPj0gMDsgaS0tKQorICAgIHsKKwlpZiAoIXN0cmNtcChTRmhvbWVEaXIuZW50cmllc1tpXS5yZWFsLCBiZWdpbikpCisJeworCSAgICAqZW5kID0gc2F2ZTsKKwkgICAgU0ZzdHJkdXAoJnRoZVJlc3QsIGVuZCk7CisJICAgICh2b2lkKSBzdHJjYXQoc3RyY2F0KHN0cmNweShTRmN1cnJlbnRQYXRoLAorCQkJCQlTRmxvZ2luc1tpXS5kaXIpLCAiLyIpLCB0aGVSZXN0KTsKKwkgICAgWHRGcmVlKHRoZVJlc3QpOworCSAgICBTRnNldFRleHQoU0ZjdXJyZW50UGF0aCk7CisJICAgIFNGdGV4dENoYW5nZWQoKTsKKwkgICAgcmV0dXJuIDE7CisJfQorICAgIH0KKworICAgICplbmQgPSBzYXZlOworCisgICAgcmV0dXJuIDA7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorU0Z1cGRhdGVQYXRoKCkKK3sKKyAgICBzdGF0aWMgaW50CUFsbG9jOworICAgIHN0YXRpYyBpbnQJd2FzVHdpZGRsZSA9IDA7CisgICAgY2hhcgkqYmVnaW4sICplbmQ7CisgICAgaW50CQlpLCBqOworICAgIGludAkJcHJldkNoYW5nZTsKKyAgICBpbnQJCVNGZGlyUHRyU2F2ZSwgU0ZkaXJFbmRTYXZlOworICAgIFNGRGlyCSpkaXI7CisKKyAgICBpZiAoIVNGZGlycykKKyAgICB7CisJU0ZkaXJzID0gKFNGRGlyICopIFh0TWFsbG9jKChBbGxvYyA9IDEwKSAqIHNpemVvZihTRkRpcikpOworCWRpciA9ICYoU0ZkaXJzWzBdKTsKKwlTRnN0cmR1cCgmZGlyLT5kaXIsICIvIik7CisJKHZvaWQpIFNGY2hkaXIoIi8iKTsKKwkodm9pZCkgU0ZnZXREaXIoZGlyKTsKKwlmb3IgKGogPSAxOyBqIDwgQWxsb2M7IGorKykKKwkgICAgU0ZkaXJzW2pdLmRpciA9IE5VTEw7CisJZGlyLT5wYXRoID0gU0ZjdXJyZW50UGF0aCArIDE7CisJZGlyLT52T3JpZ2luID0gMDsKKwlkaXItPmhPcmlnaW4gPSAwOworCWRpci0+Y2hhbmdlZCA9IDE7CisJZGlyLT5iZWdpblNlbGVjdGlvbiA9IC0xOworCWRpci0+ZW5kU2VsZWN0aW9uID0gLTE7CisJU0Zob21lRGlyLmRpciA9IE5VTEw7CisgICAgfQorCisgICAgU0ZkaXJFbmRTYXZlID0gU0ZkaXJFbmQ7CisgICAgU0ZkaXJFbmQgPSAxOworCisgICAgU0ZkaXJQdHJTYXZlID0gU0ZkaXJQdHI7CisgICAgU0ZkaXJQdHIgPSAwOworCisgICAgYmVnaW4gPSBOVUxMOworCisgICAgaWYgKFNGY3VycmVudFBhdGhbMF0gPT0gJ34nKQorICAgIHsKKwlpZiAoIVNGdHdpZGRsZSkKKwl7CisJICAgIFNGdHdpZGRsZSA9IDE7CisJICAgIGRpciA9ICYoU0ZkaXJzWzBdKTsKKwkgICAgU0Zyb290RGlyID0gKmRpcjsKKwkgICAgaWYgKCFTRmhvbWVEaXIuZGlyKQorCQlTRmdldEhvbWVEaXJzKCk7CisJICAgICpkaXIgPSBTRmhvbWVEaXI7CisJICAgIGRpci0+Y2hhbmdlZCA9IDE7CisJfQorCWVuZCA9IFNGY3VycmVudFBhdGg7CisJU0Zkb05vdFRvdWNoRGlyUHRyID0gMTsKKwl3YXNUd2lkZGxlID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoU0Z0d2lkZGxlKQorCXsKKwkgICAgU0Z0d2lkZGxlID0gMDsKKwkgICAgZGlyID0gJihTRmRpcnNbMF0pOworCSAgICAqZGlyID0gU0Zyb290RGlyOworCSAgICBkaXItPmNoYW5nZWQgPSAxOworCX0KKwllbmQgPSBTRmN1cnJlbnRQYXRoICsgMTsKKyAgICB9CisKKyAgICBpID0gMDsKKworICAgIHByZXZDaGFuZ2UgPSAwOworCisgICAgd2hpbGUgKCplbmQpCisgICAgeworCXdoaWxlICgqZW5kKysgPT0gJy8nKQorCSAgICA7CisJZW5kLS07CisJYmVnaW4gPSBlbmQ7CisJd2hpbGUgKCgqZW5kKSAmJiAoKmVuZCsrICE9ICcvJykpCisJICAgIDsKKwlpZiAoKGVuZCAtIFNGY3VycmVudFBhdGggPD0gU0Z0ZXh0UG9zKSAmJiAoKihlbmQgLSAxKSA9PSAnLycpKQorCXsKKwkgICAgU0ZkaXJQdHIgPSBpIC0gMTsKKwkgICAgaWYgKFNGZGlyUHRyIDwgMCkKKwkJU0ZkaXJQdHIgPSAwOworCX0KKwlpZiAoKmJlZ2luKQorCXsKKwkgICAgaWYgKCooZW5kIC0gMSkgPT0gJy8nKQorCSAgICB7CisJCWNoYXIgc2F2ZSA9ICplbmQ7CisKKwkJaWYgKFNGdHdpZGRsZSkKKwkJeworCQkgICAgaWYgKFNGZmluZEhvbWVEaXIoYmVnaW4sIGVuZCkpCisJCQlyZXR1cm47CisJCX0KKwkJKmVuZCA9IDA7CisJCWkrKzsKKwkJU0ZkaXJFbmQrKzsKKwkJaWYgKGkgPj0gQWxsb2MpCisJCXsKKwkJICAgIFNGZGlycyA9IChTRkRpciAqKSBYdFJlYWxsb2MoKGNoYXIgKikgU0ZkaXJzLAorCQkJCSAgICAodW5zaWduZWQpKChBbGxvYyAqPSAyKSAqIHNpemVvZihTRkRpcikpKTsKKwkJICAgIGZvciAoaiA9IEFsbG9jIC8gMjsgaiA8IEFsbG9jOyBqKyspCisJCQlTRmRpcnNbal0uZGlyID0gTlVMTDsKKwkJfQorCQlkaXIgPSAmKFNGZGlyc1tpXSk7CisJCWlmICgoIShkaXItPmRpcikpIHx8IHByZXZDaGFuZ2UgfHwgc3RyY21wKGRpci0+ZGlyLCBiZWdpbikpCisJCXsKKwkJICAgIGlmIChkaXItPmRpcikKKwkJCVNGZnJlZShpKTsKKwkJICAgIHByZXZDaGFuZ2UgPSAxOworCQkgICAgU0ZzdHJkdXAoJmRpci0+ZGlyLCBiZWdpbik7CisJCSAgICBkaXItPnBhdGggPSBlbmQ7CisJCSAgICBkaXItPnZPcmlnaW4gPSAwOworCQkgICAgZGlyLT5oT3JpZ2luID0gMDsKKwkJICAgIGRpci0+Y2hhbmdlZCA9IDE7CisJCSAgICBkaXItPmJlZ2luU2VsZWN0aW9uID0gLTE7CisJCSAgICBkaXItPmVuZFNlbGVjdGlvbiA9IC0xOworCQkgICAgKHZvaWQpU0ZmaW5kRmlsZShkaXIgLSAxLCBiZWdpbik7CisJCSAgICBpZiAoU0ZjaGRpcihTRmN1cnJlbnRQYXRoKSB8fCBTRmdldERpcihkaXIpKQorCQkgICAgeworCQkJU0Z1bnJlYWRhYmxlRGlyKGRpcik7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCQkqZW5kID0gc2F2ZTsKKwkJaWYgKCFzYXZlKQorCQkgICAgU0Z1bnNlbGVjdCgpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoU0ZmaW5kRmlsZSgmKFNGZGlyc1tTRmRpckVuZC0xXSksIGJlZ2luKSkKKwkJICAgIHJldHVybjsKKwkgICAgfQorCX0KKwllbHNlCisJICAgIFNGdW5zZWxlY3QoKTsKKyAgICB9CisKKyAgICBpZiAoKGVuZCA9PSBTRmN1cnJlbnRQYXRoICsgMSkgJiYgKCFTRnR3aWRkbGUpKQorCVNGdW5zZWxlY3QoKTsKKworICAgIGZvciAoaSA9IFNGZGlyRW5kOyBpIDwgQWxsb2M7IGkrKykKKwlpZiAoU0ZkaXJzW2ldLmRpcikKKwkgICAgU0ZmcmVlKGkpOworCisgICAgaWYgKFNGZG9Ob3RUb3VjaERpclB0cikKKyAgICB7CisJaWYgKHdhc1R3aWRkbGUpCisJeworCSAgICB3YXNUd2lkZGxlID0gMDsKKwkgICAgU0ZkaXJQdHIgPSBTRmRpckVuZCAtIDI7CisJICAgIGlmIChTRmRpclB0ciA8IDApCisJCVNGZGlyUHRyID0gMDsKKwl9CisJZWxzZQorCSAgICBTRmRpclB0ciA9IFNGZGlyUHRyU2F2ZTsKKwlTRmRvTm90VG91Y2hEaXJQdHIgPSAwOworICAgIH0KKworICAgIGlmICgoU0ZkaXJQdHIgIT0gU0ZkaXJQdHJTYXZlKSB8fCAoU0ZkaXJFbmQgIT0gU0ZkaXJFbmRTYXZlKSkKKyAgICB7CisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisJWGF3U2Nyb2xsYmFyU2V0VGh1bWIoIHNlbEZpbGVIU2Nyb2xsLAorCQkoZmxvYXQpICgoKGRvdWJsZSkgU0ZkaXJQdHIpIC8gU0ZkaXJFbmQpLAorCQkoZmxvYXQpICgoKGRvdWJsZSkgKChTRmRpckVuZCA8IDMpID8gU0ZkaXJFbmQgOiAzKSkgLworCQkJIFNGZGlyRW5kKSk7CisjZWxzZQorCXZpbV9YYXdTY3JvbGxiYXJTZXRUaHVtYiggc2VsRmlsZUhTY3JvbGwsCisJCShmbG9hdCkgKCgoZG91YmxlKSBTRmRpclB0cikgLyBTRmRpckVuZCksCisJCShmbG9hdCkgKCgoZG91YmxlKSAoKFNGZGlyRW5kIDwgMykgPyBTRmRpckVuZCA6IDMpKSAvCisJCQkgU0ZkaXJFbmQpLAorCQkoZG91YmxlKVNGZGlyRW5kKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChTRmRpclB0ciAhPSBTRmRpclB0clNhdmUpCisJU0ZkcmF3TGlzdHMoU0ZfRE9fU0NST0xMKTsKKyAgICBlbHNlCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwl7CisJICAgIGlmIChTRmRpclB0ciArIGkgPCBTRmRpckVuZCkKKwkgICAgeworCQlpZiAoU0ZkaXJzW1NGZGlyUHRyICsgaV0uY2hhbmdlZCkKKwkJeworCQkgICAgU0ZkaXJzW1NGZGlyUHRyICsgaV0uY2hhbmdlZCA9IDA7CisJCSAgICBTRmRyYXdMaXN0KGksIFNGX0RPX1NDUk9MTCk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJCVNGY2xlYXJMaXN0KGksIFNGX0RPX1NDUk9MTCk7CisJfQorfQorCisjaWZkZWYgWHROaW50ZXJuYXRpb25hbAorICAgIHN0YXRpYyBpbnQKK1djc0xlbihwKQorICAgIHdjaGFyX3QgKnA7Cit7CisgICAgaW50IGkgPSAwOworICAgIHdoaWxlICgqcCsrICE9IDApCisJaSsrOworICAgIHJldHVybiBpOworfQorI2VuZGlmCisKKyAgICBzdGF0aWMgdm9pZAorU0ZzZXRUZXh0KHBhdGgpCisgICAgY2hhcgkqcGF0aDsKK3sKKyAgICBYYXdUZXh0QmxvY2sJdGV4dDsKKworICAgIHRleHQuZmlyc3RQb3MgPSAwOworICAgIHRleHQubGVuZ3RoID0gc3RybGVuKHBhdGgpOworICAgIHRleHQucHRyID0gcGF0aDsKKyAgICB0ZXh0LmZvcm1hdCA9IEZNVDhCSVQ7CisKKyNpZmRlZiBYdE5pbnRlcm5hdGlvbmFsCisgICAgaWYgKF9YYXdUZXh0Rm9ybWF0KChUZXh0V2lkZ2V0KXNlbEZpbGVGaWVsZCkgPT0gWGF3Rm10V2lkZSkKKyAgICB7CisJWGF3VGV4dFJlcGxhY2Uoc2VsRmlsZUZpZWxkLCAoWGF3VGV4dFBvc2l0aW9uKTAsCisJCQkJICAgIChYYXdUZXh0UG9zaXRpb24pV2NzTGVuKCh3Y2hhcl90ICopJlNGdGV4dEJ1ZmZlclswXSksICZ0ZXh0KTsKKwlYYXdUZXh0U2V0SW5zZXJ0aW9uUG9pbnQoc2VsRmlsZUZpZWxkLAorCQkJCQkgICAoWGF3VGV4dFBvc2l0aW9uKVdjc0xlbigod2NoYXJfdCAqKSZTRnRleHRCdWZmZXJbMF0pKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlYYXdUZXh0UmVwbGFjZShzZWxGaWxlRmllbGQsIChYYXdUZXh0UG9zaXRpb24pMCwKKwkJCQkgICAgKFhhd1RleHRQb3NpdGlvbilzdHJsZW4oU0Z0ZXh0QnVmZmVyKSwgJnRleHQpOworCVhhd1RleHRTZXRJbnNlcnRpb25Qb2ludChzZWxGaWxlRmllbGQsCisJCQkJCSAgIChYYXdUZXh0UG9zaXRpb24pc3RybGVuKFNGdGV4dEJ1ZmZlcikpOworICAgIH0KKyNlbHNlCisgICAgWGF3VGV4dFJlcGxhY2Uoc2VsRmlsZUZpZWxkLCAoWGF3VGV4dFBvc2l0aW9uKTAsCisJCQkJKFhhd1RleHRQb3NpdGlvbilzdHJsZW4oU0Z0ZXh0QnVmZmVyKSwgJnRleHQpOworICAgIFhhd1RleHRTZXRJbnNlcnRpb25Qb2ludChzZWxGaWxlRmllbGQsCisJCQkJICAgICAgIChYYXdUZXh0UG9zaXRpb24pc3RybGVuKFNGdGV4dEJ1ZmZlcikpOworI2VuZGlmCit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1NGYnV0dG9uUHJlc3NMaXN0KHcsIG4sIGV2ZW50KQorICAgIFdpZGdldAkJdzsKKyAgICBpbnQJCQluOworICAgIFhCdXR0b25QcmVzc2VkRXZlbnQJKmV2ZW50OworeworICAgIFNGYnV0dG9uUHJlc3NlZCA9IDE7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1NGYnV0dG9uUmVsZWFzZUxpc3QodywgbiwgZXZlbnQpCisgICAgV2lkZ2V0CQkgdzsKKyAgICBpbnQJCQkgbjsKKyAgICBYQnV0dG9uUmVsZWFzZWRFdmVudCAqZXZlbnQ7Cit7CisgICAgU0ZEaXIJKmRpcjsKKworICAgIFNGYnV0dG9uUHJlc3NlZCA9IDA7CisKKyAgICBpZiAoU0ZjdXJyZW50SW52ZXJ0W25dICE9IC0xKQorICAgIHsKKwlpZiAobiA8IDIpCisJICAgIFNGZG9Ob3RUb3VjaERpclB0ciA9IDE7CisJU0Zkb05vdFRvdWNoVm9yaWdpbiA9IDE7CisJZGlyID0gJihTRmRpcnNbU0ZkaXJQdHIgKyBuXSk7CisJU0ZyZXBsYWNlVGV4dChkaXIsCisJCSAgICAgICBkaXItPmVudHJpZXNbZGlyLT52T3JpZ2luICsgU0ZjdXJyZW50SW52ZXJ0W25dXS5zaG93bik7CisJU0Ztb3Rpb25MaXN0KHcsIG4sIChYTW90aW9uRXZlbnQgKikgZXZlbnQpOworICAgIH0KK30KKworc3RhdGljIGludCBTRmNoZWNrRGlyIF9fQVJHUygoaW50IG4sIFNGRGlyICpkaXIpKTsKKworICAgIHN0YXRpYyBpbnQKK1NGY2hlY2tEaXIobiwgZGlyKQorICAgIGludAkJbjsKKyAgICBTRkRpcgkJKmRpcjsKK3sKKyAgICBzdHJ1Y3Qgc3RhdAlzdGF0QnVmOworICAgIGludAkJaTsKKworICAgIGlmICgoIW1jaF9zdGF0KCIuIiwgJnN0YXRCdWYpKSAmJiAoc3RhdEJ1Zi5zdF9tdGltZSAhPSBkaXItPm10aW1lKSkKKyAgICB7CisJLyoKKwkgKiBJZiB0aGUgcG9pbnRlciBpcyBjdXJyZW50bHkgaW4gdGhlIHdpbmRvdyB0aGF0IHdlIGFyZSBhYm91dAorCSAqIHRvIHVwZGF0ZSwgd2UgbXVzdCB3YXJwIGl0IHRvIHByZXZlbnQgdGhlIHVzZXIgZnJvbQorCSAqIGFjY2lkZW50YWxseSBzZWxlY3RpbmcgdGhlIHdyb25nIGZpbGUuCisJICovCisJaWYgKFNGY3VycmVudEludmVydFtuXSAhPSAtMSkKKwl7CisJICAgIFhXYXJwUG9pbnRlcigKKwkJICAgIFNGZGlzcGxheSwKKwkJICAgIE5vbmUsCisJCSAgICBYdFdpbmRvdyhzZWxGaWxlTGlzdHNbbl0pLAorCQkgICAgMCwKKwkJICAgIDAsCisJCSAgICAwLAorCQkgICAgMCwKKwkJICAgIDAsCisJCSAgICAwKTsKKwl9CisKKwlmb3IgKGkgPSBkaXItPm5FbnRyaWVzIC0gMTsgaSA+PSAwOyBpLS0pCisJeworCSAgICBpZiAoZGlyLT5lbnRyaWVzW2ldLnNob3duICE9IGRpci0+ZW50cmllc1tpXS5yZWFsKQorCQlYdEZyZWUoZGlyLT5lbnRyaWVzW2ldLnNob3duKTsKKwkgICAgWHRGcmVlKGRpci0+ZW50cmllc1tpXS5yZWFsKTsKKwl9CisJWHRGcmVlKChjaGFyICopIGRpci0+ZW50cmllcyk7CisJaWYgKFNGZ2V0RGlyKGRpcikpCisJICAgIFNGdW5yZWFkYWJsZURpcihkaXIpOworCWlmIChkaXItPnZPcmlnaW4gPiBkaXItPm5FbnRyaWVzIC0gU0ZsaXN0U2l6ZSkKKwkgICAgZGlyLT52T3JpZ2luID0gZGlyLT5uRW50cmllcyAtIFNGbGlzdFNpemU7CisJaWYgKGRpci0+dk9yaWdpbiA8IDApCisJICAgIGRpci0+dk9yaWdpbiA9IDA7CisJaWYgKGRpci0+aE9yaWdpbiA+IGRpci0+bkNoYXJzIC0gU0ZjaGFyc1BlckVudHJ5KQorCSAgICBkaXItPmhPcmlnaW4gPSBkaXItPm5DaGFycyAtIFNGY2hhcnNQZXJFbnRyeTsKKwlpZiAoZGlyLT5oT3JpZ2luIDwgMCkKKwkgICAgZGlyLT5oT3JpZ2luID0gMDsKKwlkaXItPmJlZ2luU2VsZWN0aW9uID0gLTE7CisJZGlyLT5lbmRTZWxlY3Rpb24gPSAtMTsKKwlTRmRvTm90VG91Y2hWb3JpZ2luID0gMTsKKwlpZiAoKGRpciArIDEpLT5kaXIpCisJICAgICh2b2lkKSBTRmZpbmRGaWxlKGRpciwgKGRpciArIDEpLT5kaXIpOworCWVsc2UKKwkgICAgKHZvaWQpIFNGZmluZEZpbGUoZGlyLCBkaXItPnBhdGgpOworCisJaWYgKCFTRndvcmtQcm9jQWRkZWQpCisJeworCSAgICAodm9pZCkgWHRBcHBBZGRXb3JrUHJvYyhTRmFwcCwgKFh0V29ya1Byb2MpU0Z3b3JrUHJvYywgTlVMTCk7CisJICAgIFNGd29ya1Byb2NBZGRlZCA9IDE7CisJfQorCXJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBTRmNoZWNrRmlsZXMgX19BUkdTKChTRkRpciAqZGlyKSk7CisKKyAgICBzdGF0aWMgaW50CitTRmNoZWNrRmlsZXMoZGlyKQorCVNGRGlyCSpkaXI7Cit7CisgICAgaW50CQlmcm9tLCB0bzsKKyAgICBpbnQJCXJlc3VsdDsKKyAgICBjaGFyCW9sZGMsIG5ld2M7CisgICAgaW50CQlpOworICAgIGNoYXIJKnN0cjsKKyAgICBpbnQJCWxhc3Q7CisgICAgc3RydWN0IHN0YXQJc3RhdEJ1ZjsKKworICAgIHJlc3VsdCA9IDA7CisKKyAgICBmcm9tID0gZGlyLT52T3JpZ2luOworICAgIHRvID0gZGlyLT52T3JpZ2luICsgU0ZsaXN0U2l6ZTsKKyAgICBpZiAodG8gPiBkaXItPm5FbnRyaWVzKQorCXRvID0gZGlyLT5uRW50cmllczsKKworICAgIGZvciAoaSA9IGZyb207IGkgPCB0bzsgaSsrKQorICAgIHsKKwlzdHIgPSBkaXItPmVudHJpZXNbaV0ucmVhbDsKKwlsYXN0ID0gc3RybGVuKHN0cikgLSAxOworCW9sZGMgPSBzdHJbbGFzdF07CisJc3RyW2xhc3RdID0gMDsKKwlpZiAobWNoX3N0YXQoc3RyLCAmc3RhdEJ1ZikpCisJICAgIG5ld2MgPSAnICc7CisJZWxzZQorCSAgICBuZXdjID0gU0ZzdGF0Q2hhcigmc3RhdEJ1Zik7CisJc3RyW2xhc3RdID0gbmV3YzsKKwlpZiAobmV3YyAhPSBvbGRjKQorCSAgICByZXN1bHQgPSAxOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1NGZGlyTW9kVGltZXIoY2wsIGlkKQorICAgIFh0UG9pbnRlcgkJY2w7CisgICAgWHRJbnRlcnZhbElkCSppZDsKK3sKKyAgICBzdGF0aWMgaW50CQluID0gLTE7CisgICAgc3RhdGljIGludAkJZiA9IDA7CisgICAgY2hhcgkJc2F2ZTsKKyAgICBTRkRpcgkJKmRpcjsKKworICAgIGlmICgoIVNGdHdpZGRsZSkgJiYgKFNGZGlyUHRyIDwgU0ZkaXJFbmQpKQorICAgIHsKKwluKys7CisJaWYgKChuID4gMikgfHwgKFNGZGlyUHRyICsgbiA+PSBTRmRpckVuZCkpCisJeworCSAgICBuID0gMDsKKwkgICAgZisrOworCSAgICBpZiAoKGYgPiAyKSB8fCAoU0ZkaXJQdHIgKyBmID49IFNGZGlyRW5kKSkKKwkJZiA9IDA7CisJfQorCWRpciA9ICYoU0ZkaXJzW1NGZGlyUHRyICsgbl0pOworCXNhdmUgPSAqKGRpci0+cGF0aCk7CisJKihkaXItPnBhdGgpID0gMDsKKwlpZiAoU0ZjaGRpcihTRmN1cnJlbnRQYXRoKSkKKwl7CisJICAgICooZGlyLT5wYXRoKSA9IHNhdmU7CisKKwkgICAgLyoKKwkgICAgICogZm9yY2UgYSByZS1yZWFkCisJICAgICAqLworCSAgICAqKGRpci0+ZGlyKSA9IDA7CisKKwkgICAgU0Z1cGRhdGVQYXRoKCk7CisJfQorCWVsc2UKKwl7CisJICAgICooZGlyLT5wYXRoKSA9IHNhdmU7CisJICAgIGlmIChTRmNoZWNrRGlyKG4sIGRpcikgfHwgKChmID09IG4pICYmIFNGY2hlY2tGaWxlcyhkaXIpKSkKKwkJU0ZkcmF3TGlzdChuLCBTRl9ET19TQ1JPTEwpOworCX0KKyAgICB9CisKKyAgICBTRmRpck1vZFRpbWVySWQgPSBYdEFwcEFkZFRpbWVPdXQoU0ZhcHAsICh1bnNpZ25lZCBsb25nKSAxMDAwLAorCSAgICBTRmRpck1vZFRpbWVyLCAoWHRQb2ludGVyKSBOVUxMKTsKK30KKworLyogUmV0dXJuIGEgc2luZ2xlIGNoYXJhY3RlciBkZXNjcmliaW5nIHdoYXQga2luZCBvZiBmaWxlIFNUQVRCVUYgaXMuICAqLworCisgICAgc3RhdGljIGNoYXIKK1NGc3RhdENoYXIoc3RhdEJ1ZikKKyAgICBzdHJ1Y3Qgc3RhdCAqc3RhdEJ1ZjsKK3sKKyAgICBpZiAoU19JU0RJUiAoc3RhdEJ1Zi0+c3RfbW9kZSkpCisJcmV0dXJuICcvJzsKKyAgICBpZiAoU19JU1JFRyAoc3RhdEJ1Zi0+c3RfbW9kZSkpCisJcmV0dXJuIFNfSVNYWFggKHN0YXRCdWYtPnN0X21vZGUpID8gJyonIDogJyAnOworI2lmZGVmIFNfSVNTT0NLCisgICAgaWYgKFNfSVNTT0NLIChzdGF0QnVmLT5zdF9tb2RlKSkKKwlyZXR1cm4gJz0nOworI2VuZGlmIC8qIFNfSVNTT0NLICovCisgICAgcmV0dXJuICcgJzsKK30KKworLyoqKioqKioqKioqKioqKioqIERyYXcuYyAqLworCisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisjIGluY2x1ZGUgPFgxMS9uZVh0YXcvQ2FyZGluYWxzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxYMTEvWGF3L0NhcmRpbmFscy5oPgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1hGT05UU0VUCisjIGRlZmluZSBTRl9ERUZBVUxUX0ZPTlQgIi1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtKiIKKyNlbHNlCisjIGRlZmluZSBTRl9ERUZBVUxUX0ZPTlQgIjl4MTUiCisjZW5kaWYKKworI2lmZGVmIEFCUworIyB1bmRlZiBBQlMKKyNlbmRpZgorI2RlZmluZSBBQlMoeCkgKCgoeCkgPCAwKSA/ICgtKHgpKSA6ICh4KSkKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBjaGFyICpmb250bmFtZTsKK30gVGV4dERhdGE7CisKK3N0YXRpYyBHQyBTRmxpbmVHQywgU0ZzY3JvbGxHQywgU0ZpbnZlcnRHQywgU0Z0ZXh0R0M7CisKK3N0YXRpYyBYdFJlc291cmNlIHRleHRSZXNvdXJjZXNbXSA9Cit7CisjaWZkZWYgRkVBVF9YRk9OVFNFVAorCXtYdE5mb250U2V0LCBYdENGb250U2V0LCBYdFJTdHJpbmcsIHNpemVvZiAoY2hhciAqKSwKKwkJWHRPZmZzZXRPZihUZXh0RGF0YSwgZm9udG5hbWUpLCBYdFJTdHJpbmcsIFNGX0RFRkFVTFRfRk9OVH0sCisjZWxzZQorCXtYdE5mb250LCBYdENGb250LCBYdFJTdHJpbmcsIHNpemVvZiAoY2hhciAqKSwKKwkJWHRPZmZzZXRPZihUZXh0RGF0YSwgZm9udG5hbWUpLCBYdFJTdHJpbmcsIFNGX0RFRkFVTFRfRk9OVH0sCisjZW5kaWYKK307CisKKyNpZmRlZiBGRUFUX1hGT05UU0VUCitzdGF0aWMgWEZvbnRTZXQgU0Zmb250OworI2Vsc2UKK3N0YXRpYyBYRm9udFN0cnVjdCAqU0Zmb250OworI2VuZGlmCisKK3N0YXRpYyBpbnQgU0ZjdXJyZW50TGlzdFk7CisKK3N0YXRpYyBYdEludGVydmFsSWQgU0ZzY3JvbGxUaW1lcklkOworCitzdGF0aWMgdm9pZCBTRmluaXRGb250IF9fQVJHUygodm9pZCkpOworCisgICAgc3RhdGljIHZvaWQKK1NGaW5pdEZvbnQoKQoreworICAgIFRleHREYXRhCSpkYXRhOworI2lmZGVmIEZFQVRfWEZPTlRTRVQKKyAgICBYRm9udFNldEV4dGVudHMgKmV4dGVudHM7CisgICAgY2hhciAqKm1pc3NpbmcsICpkZWZfc3RyOworICAgIGludCAgbnVtX21pc3Npbmc7CisjZW5kaWYKKworICAgIGRhdGEgPSBYdE5ldyhUZXh0RGF0YSk7CisKKyAgICBYdEdldEFwcGxpY2F0aW9uUmVzb3VyY2VzKHNlbEZpbGVGb3JtLCAoWHRQb2ludGVyKSBkYXRhLCB0ZXh0UmVzb3VyY2VzLAorCSAgICBYdE51bWJlcih0ZXh0UmVzb3VyY2VzKSwgKEFyZyAqKSBOVUxMLCBaRVJPKTsKKworI2lmZGVmIEZFQVRfWEZPTlRTRVQKKyAgICBTRmZvbnQgPSBYQ3JlYXRlRm9udFNldChTRmRpc3BsYXksIGRhdGEtPmZvbnRuYW1lLAorCQkJICAgICZtaXNzaW5nLCAmbnVtX21pc3NpbmcsICZkZWZfc3RyKTsKKyNlbHNlCisgICAgU0Zmb250ID0gWExvYWRRdWVyeUZvbnQoU0ZkaXNwbGF5LCBkYXRhLT5mb250bmFtZSk7CisjZW5kaWYKKyAgICBpZiAoIVNGZm9udCkKKyAgICB7CisjaWZkZWYgRkVBVF9YRk9OVFNFVAorCVNGZm9udCA9IFhDcmVhdGVGb250U2V0KFNGZGlzcGxheSwgU0ZfREVGQVVMVF9GT05ULAorCQkJCQkgICAgJm1pc3NpbmcsICZudW1fbWlzc2luZywgJmRlZl9zdHIpOworI2Vsc2UKKwlTRmZvbnQgPSBYTG9hZFF1ZXJ5Rm9udChTRmRpc3BsYXksIFNGX0RFRkFVTFRfRk9OVCk7CisjZW5kaWYKKwlpZiAoIVNGZm9udCkKKwl7CisJICAgIEVNU0cyKF8oIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIpLCBTRl9ERUZBVUxUX0ZPTlQpOworCSAgICBTRnN0YXR1cyA9IFNFTF9GSUxFX0NBTkNFTDsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9CisKKyNpZmRlZiBGRUFUX1hGT05UU0VUCisgICAgZXh0ZW50cyA9IFhFeHRlbnRzT2ZGb250U2V0KFNGZm9udCk7CisgICAgU0ZjaGFyV2lkdGggPSBleHRlbnRzLT5tYXhfbG9naWNhbF9leHRlbnQud2lkdGg7CisgICAgU0ZjaGFyQXNjZW50ID0gLWV4dGVudHMtPm1heF9sb2dpY2FsX2V4dGVudC55OworICAgIFNGY2hhckhlaWdodCA9IGV4dGVudHMtPm1heF9sb2dpY2FsX2V4dGVudC5oZWlnaHQ7CisjZWxzZQorICAgIFNGY2hhcldpZHRoID0gKFNGZm9udC0+bWF4X2JvdW5kcy53aWR0aCArIFNGZm9udC0+bWluX2JvdW5kcy53aWR0aCkgLyAyOworICAgIFNGY2hhckFzY2VudCA9IFNGZm9udC0+bWF4X2JvdW5kcy5hc2NlbnQ7CisgICAgU0ZjaGFySGVpZ2h0ID0gU0ZjaGFyQXNjZW50ICsgU0Zmb250LT5tYXhfYm91bmRzLmRlc2NlbnQ7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgU0ZjcmVhdGVHQyBfX0FSR1MoKHZvaWQpKTsKKworICAgIHN0YXRpYyB2b2lkCitTRmNyZWF0ZUdDKCkKK3sKKyAgICBYR0NWYWx1ZXMJZ2NWYWx1ZXM7CisgICAgWFJlY3RhbmdsZQlyZWN0YW5nbGVzWzFdOworCisgICAgZ2NWYWx1ZXMuZm9yZWdyb3VuZCA9IFNGZm9yZTsKKworICAgIFNGbGluZUdDID0gWHRHZXRHQygKKwkgICAgc2VsRmlsZUxpc3RzWzBdLAorCSAgICAoWHRHQ01hc2spR0NGb3JlZ3JvdW5kLAorCSAgICAmZ2NWYWx1ZXMpOworCisgICAgU0ZzY3JvbGxHQyA9IFh0R2V0R0MoCisJICAgIHNlbEZpbGVMaXN0c1swXSwKKwkgICAgKFh0R0NNYXNrKTAsCisJICAgICZnY1ZhbHVlcyk7CisKKyAgICBnY1ZhbHVlcy5mdW5jdGlvbiA9IEdYeG9yOworICAgIGdjVmFsdWVzLmZvcmVncm91bmQgPSBTRmZvcmUgXiBTRmJhY2s7CisgICAgZ2NWYWx1ZXMuYmFja2dyb3VuZCA9IFNGZm9yZSBeIFNGYmFjazsKKworICAgIFNGaW52ZXJ0R0MgPSBYdEdldEdDKAorCSAgICBzZWxGaWxlTGlzdHNbMF0sCisJICAgIChYdEdDTWFzaylHQ0Z1bmN0aW9uIHwgR0NGb3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kLAorCSAgICAmZ2NWYWx1ZXMpOworCisgICAgZ2NWYWx1ZXMuZm9yZWdyb3VuZCA9IFNGZm9yZTsKKyAgICBnY1ZhbHVlcy5iYWNrZ3JvdW5kID0gU0ZiYWNrOworI2lmbmRlZiBGRUFUX1hGT05UU0VUCisgICAgZ2NWYWx1ZXMuZm9udCA9IFNGZm9udC0+ZmlkOworI2VuZGlmCisKKyAgICBTRnRleHRHQyA9IFhDcmVhdGVHQygKKwkgICAgU0ZkaXNwbGF5LAorCSAgICBYdFdpbmRvdyhzZWxGaWxlTGlzdHNbMF0pLAorI2lmZGVmIEZFQVRfWEZPTlRTRVQKKwkgICAgKHVuc2lnbmVkIGxvbmcpR0NGb3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kLAorI2Vsc2UKKwkgICAgKHVuc2lnbmVkIGxvbmcpR0NGb3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kIHwgR0NGb250LAorI2VuZGlmCisJICAgICZnY1ZhbHVlcyk7CisKKyAgICByZWN0YW5nbGVzWzBdLnggPSBTRmxpbmVUb1RleHRIICsgU0ZiZXNpZGVUZXh0OworICAgIHJlY3RhbmdsZXNbMF0ueSA9IDA7CisgICAgcmVjdGFuZ2xlc1swXS53aWR0aCA9IFNGY2hhcnNQZXJFbnRyeSAqIFNGY2hhcldpZHRoOworICAgIHJlY3RhbmdsZXNbMF0uaGVpZ2h0ID0gU0Z1cHBlclkgKyAxOworCisgICAgWFNldENsaXBSZWN0YW5nbGVzKAorCSAgICBTRmRpc3BsYXksCisJICAgIFNGdGV4dEdDLAorCSAgICAwLAorCSAgICAwLAorCSAgICByZWN0YW5nbGVzLAorCSAgICAxLAorCSAgICBVbnNvcnRlZCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorU0ZjbGVhckxpc3QobiwgZG9TY3JvbGwpCisgICAgaW50CW47CisgICAgaW50CWRvU2Nyb2xsOworeworICAgIFNGRGlyCSpkaXI7CisKKyAgICBTRmN1cnJlbnRJbnZlcnRbbl0gPSAtMTsKKworICAgIFhDbGVhcldpbmRvdyhTRmRpc3BsYXksIFh0V2luZG93KHNlbEZpbGVMaXN0c1tuXSkpOworCisgICAgWERyYXdTZWdtZW50cyhTRmRpc3BsYXksIFh0V2luZG93KHNlbEZpbGVMaXN0c1tuXSksIFNGbGluZUdDLCBTRnNlZ3MsIDIpOworCisgICAgaWYgKGRvU2Nyb2xsKQorICAgIHsKKwlkaXIgPSAmKFNGZGlyc1tTRmRpclB0ciArIG5dKTsKKworCWlmICgoU0ZkaXJQdHIgKyBuIDwgU0ZkaXJFbmQpICYmIGRpci0+bkVudHJpZXMgJiYgZGlyLT5uQ2hhcnMpCisJeworI2lmZGVmIEZFQVRfR1VJX05FWFRBVworCSAgICBYYXdTY3JvbGxiYXJTZXRUaHVtYigKKwkJICAgIHNlbEZpbGVWU2Nyb2xsc1tuXSwKKwkJICAgIChmbG9hdCkgKCgoZG91YmxlKSBkaXItPnZPcmlnaW4pIC8KKwkJCSAgICAgZGlyLT5uRW50cmllcyksCisJCSAgICAoZmxvYXQpICgoKGRvdWJsZSkgKChkaXItPm5FbnRyaWVzIDwgU0ZsaXN0U2l6ZSkKKwkJCQkJPyBkaXItPm5FbnRyaWVzIDogU0ZsaXN0U2l6ZSkpIC8KKwkJCSAgICAgZGlyLT5uRW50cmllcykpOworI2Vsc2UKKwkgICAgdmltX1hhd1Njcm9sbGJhclNldFRodW1iKAorCQkgICAgc2VsRmlsZVZTY3JvbGxzW25dLAorCQkgICAgKGZsb2F0KSAoKChkb3VibGUpIGRpci0+dk9yaWdpbikgLworCQkJICAgICBkaXItPm5FbnRyaWVzKSwKKwkJICAgIChmbG9hdCkgKCgoZG91YmxlKSAoKGRpci0+bkVudHJpZXMgPCBTRmxpc3RTaXplKQorCQkJCQk/IGRpci0+bkVudHJpZXMgOiBTRmxpc3RTaXplKSkgLworCQkJICAgICBkaXItPm5FbnRyaWVzKSwKKwkJICAgIChkb3VibGUpZGlyLT5uRW50cmllcyk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJX05FWFRBVworCSAgICBYYXdTY3JvbGxiYXJTZXRUaHVtYigKKwkJICAgIHNlbEZpbGVIU2Nyb2xsc1tuXSwKKwkJICAgIChmbG9hdCkgKCgoZG91YmxlKSBkaXItPmhPcmlnaW4pIC8gZGlyLT5uQ2hhcnMpLAorCQkgICAgKGZsb2F0KSAoKChkb3VibGUpICgoZGlyLT5uQ2hhcnMgPAorCQkJCQkgU0ZjaGFyc1BlckVudHJ5KSA/IGRpci0+bkNoYXJzIDoKKwkJCQkJU0ZjaGFyc1BlckVudHJ5KSkgLyBkaXItPm5DaGFycykpOworI2Vsc2UKKwkgICAgdmltX1hhd1Njcm9sbGJhclNldFRodW1iKAorCQkgICAgc2VsRmlsZUhTY3JvbGxzW25dLAorCQkgICAgKGZsb2F0KSAoKChkb3VibGUpIGRpci0+aE9yaWdpbikgLyBkaXItPm5DaGFycyksCisJCSAgICAoZmxvYXQpICgoKGRvdWJsZSkgKChkaXItPm5DaGFycyA8CisJCQkJCSBTRmNoYXJzUGVyRW50cnkpID8gZGlyLT5uQ2hhcnMgOgorCQkJCQlTRmNoYXJzUGVyRW50cnkpKSAvIGRpci0+bkNoYXJzKSwKKwkJICAgIChkb3VibGUpZGlyLT5uQ2hhcnMpOworI2VuZGlmCisJfQorCWVsc2UKKwl7CisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisJICAgIFhhd1Njcm9sbGJhclNldFRodW1iKHNlbEZpbGVWU2Nyb2xsc1tuXSwgKGZsb2F0KSAwLjAsCisJCSAgICAoZmxvYXQpIDEuMCk7CisjZWxzZQorCSAgICB2aW1fWGF3U2Nyb2xsYmFyU2V0VGh1bWIoc2VsRmlsZVZTY3JvbGxzW25dLCAoZmxvYXQpIDAuMCwKKwkJICAgIChmbG9hdCkgMS4wLCAxLjApOworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisJICAgIFhhd1Njcm9sbGJhclNldFRodW1iKHNlbEZpbGVIU2Nyb2xsc1tuXSwgKGZsb2F0KSAwLjAsCisJCSAgICAoZmxvYXQpIDEuMCk7CisjZWxzZQorCSAgICB2aW1fWGF3U2Nyb2xsYmFyU2V0VGh1bWIoc2VsRmlsZUhTY3JvbGxzW25dLCAoZmxvYXQpIDAuMCwKKwkJICAgIChmbG9hdCkgMS4wLCAxLjApOworI2VuZGlmCisJfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgU0ZkZWxldGVFbnRyeSBfX0FSR1MoKFNGRGlyICpkaXIsIFNGRW50cnkgKmVudHJ5KSk7CisKKyAgICBzdGF0aWMgdm9pZAorU0ZkZWxldGVFbnRyeShkaXIsIGVudHJ5KQorICAgIFNGRGlyCSpkaXI7CisgICAgU0ZFbnRyeQkqZW50cnk7Cit7CisgICAgU0ZFbnRyeQkqZTsKKyAgICBTRkVudHJ5CSplbmQ7CisgICAgaW50CQluOworICAgIGludAkJaWR4OworCisgICAgaWR4ID0gZW50cnkgLSBkaXItPmVudHJpZXM7CisKKyAgICBpZiAoaWR4IDwgZGlyLT5iZWdpblNlbGVjdGlvbikKKwlkaXItPmJlZ2luU2VsZWN0aW9uLS07CisgICAgaWYgKGlkeCA8PSBkaXItPmVuZFNlbGVjdGlvbikKKwlkaXItPmVuZFNlbGVjdGlvbi0tOworICAgIGlmIChkaXItPmJlZ2luU2VsZWN0aW9uID4gZGlyLT5lbmRTZWxlY3Rpb24pCisJZGlyLT5iZWdpblNlbGVjdGlvbiA9IGRpci0+ZW5kU2VsZWN0aW9uID0gLTE7CisKKyAgICBpZiAoaWR4IDwgZGlyLT52T3JpZ2luKQorCWRpci0+dk9yaWdpbi0tOworCisgICAgWHRGcmVlKGVudHJ5LT5yZWFsKTsKKworICAgIGVuZCA9ICYoZGlyLT5lbnRyaWVzW2Rpci0+bkVudHJpZXMgLSAxXSk7CisKKyAgICBmb3IgKGUgPSBlbnRyeTsgZSA8IGVuZDsgZSsrKQorCSplID0gKihlICsgMSk7CisKKyAgICBpZiAoISgtLWRpci0+bkVudHJpZXMpKQorCXJldHVybjsKKworICAgIG4gPSBkaXIgLSAmKFNGZGlyc1tTRmRpclB0cl0pOworICAgIGlmICgobiA8IDApIHx8IChuID4gMikpCisJcmV0dXJuOworCisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisgICAgWGF3U2Nyb2xsYmFyU2V0VGh1bWIoCisJICAgIHNlbEZpbGVWU2Nyb2xsc1tuXSwKKwkgICAgKGZsb2F0KSAoKChkb3VibGUpIGRpci0+dk9yaWdpbikgLyBkaXItPm5FbnRyaWVzKSwKKwkgICAgKGZsb2F0KSAoKChkb3VibGUpICgoZGlyLT5uRW50cmllcyA8IFNGbGlzdFNpemUpID8KKwkJCQlkaXItPm5FbnRyaWVzIDogU0ZsaXN0U2l6ZSkpIC8gZGlyLT5uRW50cmllcykpOworI2Vsc2UKKyAgICB2aW1fWGF3U2Nyb2xsYmFyU2V0VGh1bWIoCisJICAgIHNlbEZpbGVWU2Nyb2xsc1tuXSwKKwkgICAgKGZsb2F0KSAoKChkb3VibGUpIGRpci0+dk9yaWdpbikgLyBkaXItPm5FbnRyaWVzKSwKKwkgICAgKGZsb2F0KSAoKChkb3VibGUpICgoZGlyLT5uRW50cmllcyA8IFNGbGlzdFNpemUpID8KKwkJCQlkaXItPm5FbnRyaWVzIDogU0ZsaXN0U2l6ZSkpIC8gZGlyLT5uRW50cmllcyksCisJICAgIChkb3VibGUpZGlyLT5uRW50cmllcyk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgU0Z3cml0ZVN0YXRDaGFyIF9fQVJHUygoY2hhciAqbmFtZSwgaW50IGxhc3QsIHN0cnVjdCBzdGF0ICpzdGF0QnVmKSk7CisKKyAgICBzdGF0aWMgdm9pZAorU0Z3cml0ZVN0YXRDaGFyKG5hbWUsIGxhc3QsIHN0YXRCdWYpCisgICAgY2hhcgkqbmFtZTsKKyAgICBpbnQJCWxhc3Q7CisgICAgc3RydWN0IHN0YXQJKnN0YXRCdWY7Cit7CisgICAgbmFtZVtsYXN0XSA9IFNGc3RhdENoYXIoc3RhdEJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgU0ZzdGF0QW5kQ2hlY2sgX19BUkdTKChTRkRpciAqZGlyLCBTRkVudHJ5ICplbnRyeSkpOworCisgICAgc3RhdGljIGludAorU0ZzdGF0QW5kQ2hlY2soZGlyLCBlbnRyeSkKKyAgICBTRkRpcgkqZGlyOworICAgIFNGRW50cnkJKmVudHJ5OworeworICAgIHN0cnVjdCBzdGF0CXN0YXRCdWY7CisgICAgY2hhcglzYXZlOworICAgIGludAkJbGFzdDsKKworICAgIC8qCisgICAgICogbXVzdCBiZSByZXN0b3JlZCBiZWZvcmUgcmV0dXJuaW5nCisgICAgICovCisgICAgc2F2ZSA9ICooZGlyLT5wYXRoKTsKKyAgICAqKGRpci0+cGF0aCkgPSAwOworCisgICAgaWYgKCFTRmNoZGlyKFNGY3VycmVudFBhdGgpKQorICAgIHsKKwlsYXN0ID0gc3RybGVuKGVudHJ5LT5yZWFsKSAtIDE7CisJZW50cnktPnJlYWxbbGFzdF0gPSAwOworCWVudHJ5LT5zdGF0RG9uZSA9IDE7CisJaWYgKCghbWNoX3N0YXQoZW50cnktPnJlYWwsICZzdGF0QnVmKSkKKyNpZmRlZiBTX0lGTE5LCisJCXx8ICghbWNoX2xzdGF0KGVudHJ5LT5yZWFsLCAmc3RhdEJ1ZikpCisjZW5kaWYKKwkgICApCisJeworCSAgICBpZiAoU0ZmdW5jKQorCSAgICB7CisJCWNoYXIgKnNob3duOworCisJCXNob3duID0gTlVMTDsKKwkJaWYgKFNGZnVuYyhlbnRyeS0+cmVhbCwgJnNob3duLCAmc3RhdEJ1ZikpCisJCXsKKwkJICAgIGlmIChzaG93bikKKwkJICAgIHsKKwkJCWludCBsZW47CisKKwkJCWxlbiA9IHN0cmxlbihzaG93bik7CisJCQllbnRyeS0+c2hvd24gPSBYdE1hbGxvYygodW5zaWduZWQpIChsZW4gKyAyKSk7CisJCQkodm9pZCkgc3RyY3B5KGVudHJ5LT5zaG93biwgc2hvd24pOworCQkJU0Z3cml0ZVN0YXRDaGFyKGVudHJ5LT5zaG93biwgbGVuLCAmc3RhdEJ1Zik7CisJCQllbnRyeS0+c2hvd25bbGVuICsgMV0gPSAwOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJeworCQkgICAgU0ZkZWxldGVFbnRyeShkaXIsIGVudHJ5KTsKKworCQkgICAgKihkaXItPnBhdGgpID0gc2F2ZTsKKwkJICAgIHJldHVybiAxOworCQl9CisJICAgIH0KKwkgICAgU0Z3cml0ZVN0YXRDaGFyKGVudHJ5LT5yZWFsLCBsYXN0LCAmc3RhdEJ1Zik7CisJfQorCWVsc2UKKwkgICAgZW50cnktPnJlYWxbbGFzdF0gPSAnICc7CisgICAgfQorCisgICAgKihkaXItPnBhdGgpID0gc2F2ZTsKKyAgICByZXR1cm4gMDsKK30KKworCisgICAgc3RhdGljIHZvaWQKK1NGZHJhd1N0cmluZ3ModywgZGlyLCBmcm9tLCB0bykKKyAgICBXaW5kb3cJdzsKKyAgICBTRkRpcgkqZGlyOworICAgIGludAkJZnJvbTsKKyAgICBpbnQJCXRvOworeworICAgIGludAkJaTsKKyAgICBTRkVudHJ5CSplbnRyeTsKKyAgICBpbnQJCXg7CisKKyAgICB4ID0gU0Z0ZXh0WCAtIGRpci0+aE9yaWdpbiAqIFNGY2hhcldpZHRoOworCisgICAgaWYgKGRpci0+dk9yaWdpbiArIHRvID49IGRpci0+bkVudHJpZXMpCisJdG8gPSBkaXItPm5FbnRyaWVzIC0gZGlyLT52T3JpZ2luIC0gMTsKKyAgICBmb3IgKGkgPSBmcm9tOyBpIDw9IHRvOyBpKyspCisgICAgeworCWVudHJ5ID0gJihkaXItPmVudHJpZXNbZGlyLT52T3JpZ2luICsgaV0pOworCWlmICghKGVudHJ5LT5zdGF0RG9uZSkpCisJeworCSAgICBpZiAoU0ZzdGF0QW5kQ2hlY2soZGlyLCBlbnRyeSkpCisJICAgIHsKKwkJaWYgKGRpci0+dk9yaWdpbiArIHRvID49IGRpci0+bkVudHJpZXMpCisJCSAgICB0byA9IGRpci0+bkVudHJpZXMgLSBkaXItPnZPcmlnaW4gLSAxOworCQlpLS07CisJCWNvbnRpbnVlOworCSAgICB9CisJfQorI2lmZGVmIEZFQVRfWEZPTlRTRVQKKwlYbWJEcmF3SW1hZ2VTdHJpbmcoCisJCVNGZGlzcGxheSwKKwkJdywKKwkJU0Zmb250LAorCQlTRnRleHRHQywKKwkJeCwKKwkJU0Z0ZXh0WW9mZnNldCArIGkgKiBTRmVudHJ5SGVpZ2h0LAorCQllbnRyeS0+c2hvd24sCisJCXN0cmxlbihlbnRyeS0+c2hvd24pKTsKKyNlbHNlCisJWERyYXdJbWFnZVN0cmluZygKKwkJU0ZkaXNwbGF5LAorCQl3LAorCQlTRnRleHRHQywKKwkJeCwKKwkJU0Z0ZXh0WW9mZnNldCArIGkgKiBTRmVudHJ5SGVpZ2h0LAorCQllbnRyeS0+c2hvd24sCisJCXN0cmxlbihlbnRyeS0+c2hvd24pKTsKKyNlbmRpZgorCWlmIChkaXItPnZPcmlnaW4gKyBpID09IGRpci0+YmVnaW5TZWxlY3Rpb24pCisJeworCSAgICBYRHJhd0xpbmUoCisJCSAgICBTRmRpc3BsYXksCisJCSAgICB3LAorCQkgICAgU0ZsaW5lR0MsCisJCSAgICBTRmxpbmVUb1RleHRIICsgMSwKKwkJICAgIFNGbG93ZXJZICsgaSAqIFNGZW50cnlIZWlnaHQsCisJCSAgICBTRmxpbmVUb1RleHRIICsgU0ZlbnRyeVdpZHRoIC0gMiwKKwkJICAgIFNGbG93ZXJZICsgaSAqIFNGZW50cnlIZWlnaHQpOworCX0KKwlpZiAoKGRpci0+dk9yaWdpbiArIGkgPj0gZGlyLT5iZWdpblNlbGVjdGlvbikgJiYKKwkJKGRpci0+dk9yaWdpbiArIGkgPD0gZGlyLT5lbmRTZWxlY3Rpb24pKQorCXsKKwkgICAgU0Zjb21wbGV0aW9uU2Vnc1swXS55MSA9IFNGY29tcGxldGlvblNlZ3NbMV0ueTEgPQorCQlTRmxvd2VyWSArIGkgKiBTRmVudHJ5SGVpZ2h0OworCSAgICBTRmNvbXBsZXRpb25TZWdzWzBdLnkyID0gU0Zjb21wbGV0aW9uU2Vnc1sxXS55MiA9CisJCVNGbG93ZXJZICsgKGkgKyAxKSAqIFNGZW50cnlIZWlnaHQgLSAxOworCSAgICBYRHJhd1NlZ21lbnRzKAorCQkgICAgU0ZkaXNwbGF5LAorCQkgICAgdywKKwkJICAgIFNGbGluZUdDLAorCQkgICAgU0Zjb21wbGV0aW9uU2VncywKKwkJICAgIDIpOworCX0KKwlpZiAoZGlyLT52T3JpZ2luICsgaSA9PSBkaXItPmVuZFNlbGVjdGlvbikKKwl7CisJICAgIFhEcmF3TGluZSgKKwkJICAgIFNGZGlzcGxheSwKKwkJICAgIHcsCisJCSAgICBTRmxpbmVHQywKKwkJICAgIFNGbGluZVRvVGV4dEggKyAxLAorCQkgICAgU0Zsb3dlclkgKyAoaSArIDEpICogU0ZlbnRyeUhlaWdodCAtIDEsCisJCSAgICBTRmxpbmVUb1RleHRIICsgU0ZlbnRyeVdpZHRoIC0gMiwKKwkJICAgIFNGbG93ZXJZICsgKGkgKyAxKSAqIFNGZW50cnlIZWlnaHQgLSAxKTsKKwl9CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK1NGZHJhd0xpc3QobiwgZG9TY3JvbGwpCisgICAgaW50CW47CisgICAgaW50CWRvU2Nyb2xsOworeworICAgIFNGRGlyCSpkaXI7CisgICAgV2luZG93CXc7CisKKyAgICBTRmNsZWFyTGlzdChuLCBkb1Njcm9sbCk7CisKKyAgICBpZiAoU0ZkaXJQdHIgKyBuIDwgU0ZkaXJFbmQpCisgICAgeworCWRpciA9ICYoU0ZkaXJzW1NGZGlyUHRyICsgbl0pOworCXcgPSBYdFdpbmRvdyhzZWxGaWxlTGlzdHNbbl0pOworI2lmZGVmIEZFQVRfWEZPTlRTRVQKKwlYbWJEcmF3SW1hZ2VTdHJpbmcoCisJCVNGZGlzcGxheSwKKwkJdywKKwkJU0Zmb250LAorCQlTRnRleHRHQywKKwkJU0Z0ZXh0WCAtIGRpci0+aE9yaWdpbiAqIFNGY2hhcldpZHRoLAorCQlTRmxpbmVUb1RleHRWICsgU0ZhYm92ZUFuZEJlbG93VGV4dCArIFNGY2hhckFzY2VudCwKKwkJZGlyLT5kaXIsCisJCXN0cmxlbihkaXItPmRpcikpOworI2Vsc2UKKwlYRHJhd0ltYWdlU3RyaW5nKAorCQlTRmRpc3BsYXksCisJCXcsCisJCVNGdGV4dEdDLAorCQlTRnRleHRYIC0gZGlyLT5oT3JpZ2luICogU0ZjaGFyV2lkdGgsCisJCVNGbGluZVRvVGV4dFYgKyBTRmFib3ZlQW5kQmVsb3dUZXh0ICsgU0ZjaGFyQXNjZW50LAorCQlkaXItPmRpciwKKwkJc3RybGVuKGRpci0+ZGlyKSk7CisjZW5kaWYKKwlTRmRyYXdTdHJpbmdzKHcsIGRpciwgMCwgU0ZsaXN0U2l6ZSAtIDEpOworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitTRmRyYXdMaXN0cyhkb1Njcm9sbCkKKyAgICBpbnQJZG9TY3JvbGw7Cit7CisgICAgaW50CWk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCVNGZHJhd0xpc3QoaSwgZG9TY3JvbGwpOworfQorCisgICAgc3RhdGljIHZvaWQKK1NGaW52ZXJ0RW50cnkobikKKyAgICBpbnQJCW47Cit7CisgICAgWEZpbGxSZWN0YW5nbGUoCisJICAgIFNGZGlzcGxheSwKKwkgICAgWHRXaW5kb3coc2VsRmlsZUxpc3RzW25dKSwKKwkgICAgU0ZpbnZlcnRHQywKKwkgICAgU0ZsaW5lVG9UZXh0SCwKKwkgICAgU0ZjdXJyZW50SW52ZXJ0W25dICogU0ZlbnRyeUhlaWdodCArIFNGbG93ZXJZLAorCSAgICBTRmVudHJ5V2lkdGgsCisJICAgIFNGZW50cnlIZWlnaHQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBTRnNjcm9sbFRpbWVySW50ZXJ2YWwgX19BUkdTKCh2b2lkKSk7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9uZworU0ZzY3JvbGxUaW1lckludGVydmFsKCkKK3sKKyAgICBzdGF0aWMgaW50CW1heFZhbCA9IDIwMDsKKyAgICBzdGF0aWMgaW50CXZhcnlEaXN0ID0gNTA7CisgICAgc3RhdGljIGludAltaW5EaXN0ID0gNTA7CisgICAgaW50CQl0OworICAgIGludAkJZGlzdDsKKworICAgIGlmIChTRmN1cnJlbnRMaXN0WSA8IFNGbG93ZXJZKQorCWRpc3QgPSBTRmxvd2VyWSAtIFNGY3VycmVudExpc3RZOworICAgIGVsc2UgaWYgKFNGY3VycmVudExpc3RZID4gU0Z1cHBlclkpCisJZGlzdCA9IFNGY3VycmVudExpc3RZIC0gU0Z1cHBlclk7CisgICAgZWxzZQorCXJldHVybiAodW5zaWduZWQgbG9uZykgMTsKKworICAgIHQgPSBtYXhWYWwgLSAoKG1heFZhbCAvIHZhcnlEaXN0KSAqIChkaXN0IC0gbWluRGlzdCkpOworCisgICAgaWYgKHQgPCAxKQorCXQgPSAxOworCisgICAgaWYgKHQgPiBtYXhWYWwpCisJdCA9IG1heFZhbDsKKworICAgIHJldHVybiAodW5zaWduZWQgbG9uZyl0OworfQorCitzdGF0aWMgdm9pZCBTRnNjcm9sbFRpbWVyIF9fQVJHUygoWHRQb2ludGVyIHAsIFh0SW50ZXJ2YWxJZCAqaWQpKTsKKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorU0ZzY3JvbGxUaW1lcihwLCBpZCkKKyAgICBYdFBvaW50ZXIJCXA7CisgICAgWHRJbnRlcnZhbElkCSppZDsKK3sKKyAgICBTRkRpcgkqZGlyOworICAgIGludAkJc2F2ZTsKKyAgICBpbnQJCW47CisKKyAgICBuID0gKGxvbmcpcDsKKworICAgIGRpciA9ICYoU0ZkaXJzW1NGZGlyUHRyICsgbl0pOworICAgIHNhdmUgPSBkaXItPnZPcmlnaW47CisKKyAgICBpZiAoU0ZjdXJyZW50TGlzdFkgPCBTRmxvd2VyWSkKKyAgICB7CisJaWYgKGRpci0+dk9yaWdpbiA+IDApCisJICAgIFNGdlNsaWRlck1vdmVkQ2FsbGJhY2soc2VsRmlsZVZTY3JvbGxzW25dLCBuLCBkaXItPnZPcmlnaW4gLSAxKTsKKyAgICB9CisgICAgZWxzZSBpZiAoU0ZjdXJyZW50TGlzdFkgPiBTRnVwcGVyWSkKKyAgICB7CisJaWYgKGRpci0+dk9yaWdpbiA8IGRpci0+bkVudHJpZXMgLSBTRmxpc3RTaXplKQorCSAgICBTRnZTbGlkZXJNb3ZlZENhbGxiYWNrKHNlbEZpbGVWU2Nyb2xsc1tuXSwgbiwgZGlyLT52T3JpZ2luICsgMSk7CisgICAgfQorCisgICAgaWYgKGRpci0+dk9yaWdpbiAhPSBzYXZlKQorICAgIHsKKwlpZiAoZGlyLT5uRW50cmllcykKKwl7CisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisJICAgIFhhd1Njcm9sbGJhclNldFRodW1iKAorCQkgICAgc2VsRmlsZVZTY3JvbGxzW25dLAorCQkgICAgKGZsb2F0KSAoKChkb3VibGUpIGRpci0+dk9yaWdpbikgLyBkaXItPm5FbnRyaWVzKSwKKwkJICAgIChmbG9hdCkgKCgoZG91YmxlKSAoKGRpci0+bkVudHJpZXMgPCBTRmxpc3RTaXplKSA/CisJCQkJZGlyLT5uRW50cmllcyA6IFNGbGlzdFNpemUpKSAvIGRpci0+bkVudHJpZXMpKTsKKyNlbHNlCisJICAgIHZpbV9YYXdTY3JvbGxiYXJTZXRUaHVtYigKKwkJICAgIHNlbEZpbGVWU2Nyb2xsc1tuXSwKKwkJICAgIChmbG9hdCkgKCgoZG91YmxlKSBkaXItPnZPcmlnaW4pIC8gZGlyLT5uRW50cmllcyksCisJCSAgICAoZmxvYXQpICgoKGRvdWJsZSkgKChkaXItPm5FbnRyaWVzIDwgU0ZsaXN0U2l6ZSkgPworCQkJCWRpci0+bkVudHJpZXMgOiBTRmxpc3RTaXplKSkgLyBkaXItPm5FbnRyaWVzKSwKKwkJICAgIChkb3VibGUpZGlyLT5uRW50cmllcyk7CisjZW5kaWYKKwl9CisgICAgfQorCisgICAgaWYgKFNGYnV0dG9uUHJlc3NlZCkKKwlTRnNjcm9sbFRpbWVySWQgPSBYdEFwcEFkZFRpbWVPdXQoU0ZhcHAsCisJCSAgICAgICBTRnNjcm9sbFRpbWVySW50ZXJ2YWwoKSwgU0ZzY3JvbGxUaW1lciwgKFh0UG9pbnRlcikgbik7Cit9CisKKyAgICBzdGF0aWMgaW50CitTRm5ld0ludmVydEVudHJ5KG4sIGV2ZW50KQorICAgIGludAkJCW47CisgICAgWE1vdGlvbkV2ZW50CSpldmVudDsKK3sKKyAgICBpbnQJCQl4LCB5OworICAgIGludAkJCW53OworICAgIHN0YXRpYyBpbnQJCVNGc2Nyb2xsVGltZXJBZGRlZCA9IDA7CisKKyAgICB4ID0gZXZlbnQtPng7CisgICAgeSA9IGV2ZW50LT55OworCisgICAgaWYgKFNGZGlyUHRyICsgbiA+PSBTRmRpckVuZCkKKwlyZXR1cm4gLTE7CisKKyAgICBpZiAoKHggPj0gMCkgJiYgKHggPD0gU0Z1cHBlclgpICYmICh5ID49IFNGbG93ZXJZKSAmJiAoeSA8PSBTRnVwcGVyWSkpCisgICAgeworCVNGRGlyICpkaXIgPSAmKFNGZGlyc1tTRmRpclB0ciArIG5dKTsKKworCWlmIChTRnNjcm9sbFRpbWVyQWRkZWQpCisJeworCSAgICBTRnNjcm9sbFRpbWVyQWRkZWQgPSAwOworCSAgICBYdFJlbW92ZVRpbWVPdXQoU0ZzY3JvbGxUaW1lcklkKTsKKwl9CisKKwludyA9ICh5IC0gU0Zsb3dlclkpIC8gU0ZlbnRyeUhlaWdodDsKKwlpZiAoZGlyLT52T3JpZ2luICsgbncgPj0gZGlyLT5uRW50cmllcykKKwkgICAgcmV0dXJuIC0xOworCXJldHVybiBudzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoU0ZidXR0b25QcmVzc2VkKQorCXsKKwkgICAgU0ZjdXJyZW50TGlzdFkgPSB5OworCSAgICBpZiAoIVNGc2Nyb2xsVGltZXJBZGRlZCkKKwkgICAgeworCQlTRnNjcm9sbFRpbWVyQWRkZWQgPSAxOworCQlTRnNjcm9sbFRpbWVySWQgPSBYdEFwcEFkZFRpbWVPdXQoU0ZhcHAsCisJCQlTRnNjcm9sbFRpbWVySW50ZXJ2YWwoKSwgU0ZzY3JvbGxUaW1lciwKKwkJCShYdFBvaW50ZXIpIG4pOworCSAgICB9CisJfQorCXJldHVybiAtMTsKKyAgICB9Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1NGZW50ZXJMaXN0KHcsIG4sIGV2ZW50KQorICAgIFdpZGdldAkJdzsKKyAgICBpbnQJCQluOworICAgIFhFbnRlcldpbmRvd0V2ZW50CSpldmVudDsKK3sKKyAgICBpbnQJCQludzsKKworICAgIC8qIHNhbml0eSAqLworICAgIGlmIChTRmN1cnJlbnRJbnZlcnRbbl0gIT0gLTEpCisgICAgeworCVNGaW52ZXJ0RW50cnkobik7CisJU0ZjdXJyZW50SW52ZXJ0W25dID0gLTE7CisgICAgfQorCisgICAgbncgPSBTRm5ld0ludmVydEVudHJ5KG4sIChYTW90aW9uRXZlbnQgKikgZXZlbnQpOworICAgIGlmIChudyAhPSAtMSkKKyAgICB7CisJU0ZjdXJyZW50SW52ZXJ0W25dID0gbnc7CisJU0ZpbnZlcnRFbnRyeShuKTsKKyAgICB9Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1NGbGVhdmVMaXN0KHcsIG4sIGV2ZW50KQorICAgIFdpZGdldAl3OworICAgIGludAkJbjsKKyAgICBYRXZlbnQJKmV2ZW50OworeworICAgIGlmIChTRmN1cnJlbnRJbnZlcnRbbl0gIT0gLTEpCisgICAgeworCVNGaW52ZXJ0RW50cnkobik7CisJU0ZjdXJyZW50SW52ZXJ0W25dID0gLTE7CisgICAgfQorfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitTRm1vdGlvbkxpc3QodywgbiwgZXZlbnQpCisgICAgV2lkZ2V0CQl3OworICAgIGludAkJCW47CisgICAgWE1vdGlvbkV2ZW50CSpldmVudDsKK3sKKyAgICBpbnQJCW53OworCisgICAgbncgPSBTRm5ld0ludmVydEVudHJ5KG4sIGV2ZW50KTsKKworICAgIGlmIChudyAhPSBTRmN1cnJlbnRJbnZlcnRbbl0pCisgICAgeworCWlmIChTRmN1cnJlbnRJbnZlcnRbbl0gIT0gLTEpCisJICAgIFNGaW52ZXJ0RW50cnkobik7CisJU0ZjdXJyZW50SW52ZXJ0W25dID0gbnc7CisJaWYgKG53ICE9IC0xKQorCSAgICBTRmludmVydEVudHJ5KG4pOworICAgIH0KK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorU0Z2RmxvYXRTbGlkZXJNb3ZlZENhbGxiYWNrKHcsIG4sIGZuZXcpCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCW47CisgICAgWHRQb2ludGVyCWZuZXc7Cit7CisgICAgaW50CQludzsKKworICAgIG53ID0gKCooZmxvYXQgKilmbmV3KSAqIFNGZGlyc1tTRmRpclB0ciArIChpbnQpKGxvbmcpbl0ubkVudHJpZXM7CisgICAgU0Z2U2xpZGVyTW92ZWRDYWxsYmFjayh3LCAoaW50KShsb25nKW4sIG53KTsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorU0Z2U2xpZGVyTW92ZWRDYWxsYmFjayh3LCBuLCBudykKKyAgICBXaWRnZXQJdzsKKyAgICBpbnQJCW47CisgICAgaW50CQludzsKK3sKKyAgICBpbnQJCW9sZDsKKyAgICBXaW5kb3cJd2luOworICAgIFNGRGlyCSpkaXI7CisKKyAgICBkaXIgPSAmKFNGZGlyc1tTRmRpclB0ciArIG5dKTsKKworICAgIG9sZCA9IGRpci0+dk9yaWdpbjsKKyAgICBkaXItPnZPcmlnaW4gPSBudzsKKworICAgIGlmIChvbGQgPT0gbncpCisJcmV0dXJuOworCisgICAgd2luID0gWHRXaW5kb3coc2VsRmlsZUxpc3RzW25dKTsKKworICAgIGlmIChBQlMobncgLSBvbGQpIDwgU0ZsaXN0U2l6ZSkKKyAgICB7CisJaWYgKG53ID4gb2xkKQorCXsKKwkgICAgWENvcHlBcmVhKAorCQkgICAgU0ZkaXNwbGF5LAorCQkgICAgd2luLAorCQkgICAgd2luLAorCQkgICAgU0ZzY3JvbGxHQywKKwkJICAgIFNGbGluZVRvVGV4dEgsCisJCSAgICBTRmxvd2VyWSArIChudyAtIG9sZCkgKiBTRmVudHJ5SGVpZ2h0LAorCQkgICAgU0ZlbnRyeVdpZHRoICsgU0ZsaW5lVG9UZXh0SCwKKwkJICAgIChTRmxpc3RTaXplIC0gKG53IC0gb2xkKSkgKiBTRmVudHJ5SGVpZ2h0LAorCQkgICAgU0ZsaW5lVG9UZXh0SCwKKwkJICAgIFNGbG93ZXJZKTsKKwkgICAgWENsZWFyQXJlYSgKKwkJICAgIFNGZGlzcGxheSwKKwkJICAgIHdpbiwKKwkJICAgIFNGbGluZVRvVGV4dEgsCisJCSAgICBTRmxvd2VyWSArIChTRmxpc3RTaXplIC0gKG53IC0gb2xkKSkgKgorCQkgICAgU0ZlbnRyeUhlaWdodCwKKwkJICAgIFNGZW50cnlXaWR0aCArIFNGbGluZVRvVGV4dEgsCisJCSAgICAobncgLSBvbGQpICogU0ZlbnRyeUhlaWdodCwKKwkJICAgIEZhbHNlKTsKKwkgICAgU0ZkcmF3U3RyaW5ncyh3aW4sIGRpciwgU0ZsaXN0U2l6ZSAtIChudyAtIG9sZCksCisJCSAgICBTRmxpc3RTaXplIC0gMSk7CisJfQorCWVsc2UKKwl7CisJICAgIFhDb3B5QXJlYSgKKwkJICAgIFNGZGlzcGxheSwKKwkJICAgIHdpbiwKKwkJICAgIHdpbiwKKwkJICAgIFNGc2Nyb2xsR0MsCisJCSAgICBTRmxpbmVUb1RleHRILAorCQkgICAgU0Zsb3dlclksCisJCSAgICBTRmVudHJ5V2lkdGggKyBTRmxpbmVUb1RleHRILAorCQkgICAgKFNGbGlzdFNpemUgLSAob2xkIC0gbncpKSAqIFNGZW50cnlIZWlnaHQsCisJCSAgICBTRmxpbmVUb1RleHRILAorCQkgICAgU0Zsb3dlclkgKyAob2xkIC0gbncpICogU0ZlbnRyeUhlaWdodCk7CisJICAgIFhDbGVhckFyZWEoCisJCSAgICBTRmRpc3BsYXksCisJCSAgICB3aW4sCisJCSAgICBTRmxpbmVUb1RleHRILAorCQkgICAgU0Zsb3dlclksCisJCSAgICBTRmVudHJ5V2lkdGggKyBTRmxpbmVUb1RleHRILAorCQkgICAgKG9sZCAtIG53KSAqIFNGZW50cnlIZWlnaHQsCisJCSAgICBGYWxzZSk7CisJICAgIFNGZHJhd1N0cmluZ3Mod2luLCBkaXIsIDAsIG9sZCAtIG53KTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJWENsZWFyQXJlYSgKKwkJU0ZkaXNwbGF5LAorCQl3aW4sCisJCVNGbGluZVRvVGV4dEgsCisJCVNGbG93ZXJZLAorCQlTRmVudHJ5V2lkdGggKyBTRmxpbmVUb1RleHRILAorCQlTRmxpc3RTaXplICogU0ZlbnRyeUhlaWdodCwKKwkJRmFsc2UpOworCVNGZHJhd1N0cmluZ3Mod2luLCBkaXIsIDAsIFNGbGlzdFNpemUgLSAxKTsKKyAgICB9Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1NGdkFyZWFTZWxlY3RlZENhbGxiYWNrKHcsIG4sIHBuZXcpCisgICAgV2lkZ2V0CQl3OworICAgIFh0UG9pbnRlcgluOworICAgIFh0UG9pbnRlcglwbmV3OworeworICAgIFNGRGlyCSpkaXI7CisgICAgaW50CQludzsKKworICAgIGRpciA9ICYoU0ZkaXJzW1NGZGlyUHRyICsgKGludCkobG9uZyluXSk7CisKKyNpZmRlZiBGRUFUX0dVSV9ORVhUQVcKKyAgICBpZiAoKGludCkobG9uZylwbmV3IDwgMCkKKyAgICB7CisJaWYgKChpbnQpKGxvbmcpcG5ldyA+IC1TRnZTY3JvbGxIZWlnaHQpCisJICAgIChpbnQpKGxvbmcpcG5ldyA9IC0xOworCWVsc2UKKwkgICAgKGludCkobG9uZylwbmV3ID0gLVNGbGlzdFNpemU7CisgICAgfQorICAgIGVsc2UgaWYgKChpbnQpKGxvbmcpcG5ldyA+IDApCisgICAgeworCWlmICgoaW50KShsb25nKXBuZXcgPCBTRnZTY3JvbGxIZWlnaHQpCisJICAgIChpbnQpKGxvbmcpcG5ldyA9IDE7CisJZWxzZQorCSAgICAoaW50KShsb25nKXBuZXcgPSBTRmxpc3RTaXplOworICAgIH0KKyNlbmRpZgorICAgIG53ID0gZGlyLT52T3JpZ2luICsgKGludCkobG9uZylwbmV3OworCisgICAgaWYgKG53ID4gZGlyLT5uRW50cmllcyAtIFNGbGlzdFNpemUpCisJbncgPSBkaXItPm5FbnRyaWVzIC0gU0ZsaXN0U2l6ZTsKKworICAgIGlmIChudyA8IDApCisJbncgPSAwOworCisgICAgaWYgKGRpci0+bkVudHJpZXMpCisgICAgeworCWZsb2F0CWY7CisKKwlmID0gKChkb3VibGUpIG53KSAvIGRpci0+bkVudHJpZXM7CisKKyNpZmRlZiBGRUFUX0dVSV9ORVhUQVcKKwlYYXdTY3JvbGxiYXJTZXRUaHVtYigKKwkJdywKKwkJZiwKKwkJKGZsb2F0KSAoKChkb3VibGUpICgoZGlyLT5uRW50cmllcyA8IFNGbGlzdFNpemUpID8KKwkJCQlkaXItPm5FbnRyaWVzIDogU0ZsaXN0U2l6ZSkpIC8gZGlyLT5uRW50cmllcykpOworI2Vsc2UKKwl2aW1fWGF3U2Nyb2xsYmFyU2V0VGh1bWIoCisJCXcsCisJCWYsCisJCShmbG9hdCkgKCgoZG91YmxlKSAoKGRpci0+bkVudHJpZXMgPCBTRmxpc3RTaXplKSA/CisJCQkJZGlyLT5uRW50cmllcyA6IFNGbGlzdFNpemUpKSAvIGRpci0+bkVudHJpZXMpLAorCQkoZG91YmxlKWRpci0+bkVudHJpZXMpOworI2VuZGlmCisgICAgfQorCisgICAgU0Z2U2xpZGVyTW92ZWRDYWxsYmFjayh3LCAoaW50KShsb25nKW4sIG53KTsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorU0ZoU2xpZGVyTW92ZWRDYWxsYmFjayh3LCBuLCBudykKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJbjsKKyAgICBYdFBvaW50ZXIJbnc7Cit7CisgICAgU0ZEaXIJKmRpcjsKKyAgICBpbnQJc2F2ZTsKKworICAgIGRpciA9ICYoU0ZkaXJzW1NGZGlyUHRyICsgKGludCkobG9uZyluXSk7CisgICAgc2F2ZSA9IGRpci0+aE9yaWdpbjsKKyAgICBkaXItPmhPcmlnaW4gPSAoKihmbG9hdCAqKW53KSAqIGRpci0+bkNoYXJzOworICAgIGlmIChkaXItPmhPcmlnaW4gPT0gc2F2ZSkKKwlyZXR1cm47CisKKyAgICBTRmRyYXdMaXN0KChpbnQpKGxvbmcpbiwgU0ZfRE9fTk9UX1NDUk9MTCk7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1NGaEFyZWFTZWxlY3RlZENhbGxiYWNrKHcsIG4sIHBuZXcpCisgICAgV2lkZ2V0CQl3OworICAgIFh0UG9pbnRlcgluOworICAgIFh0UG9pbnRlcglwbmV3OworeworICAgIFNGRGlyCSpkaXI7CisgICAgaW50CQludzsKKworICAgIGRpciA9ICYoU0ZkaXJzW1NGZGlyUHRyICsgKGludCkobG9uZyluXSk7CisKKyNpZmRlZiBGRUFUX0dVSV9ORVhUQVcKKyAgICBpZiAoKGludCkobG9uZylwbmV3IDwgMCkKKyAgICB7CisJaWYgKChpbnQpKGxvbmcpcG5ldyA+IC1TRmhTY3JvbGxXaWR0aCkKKwkgICAgKGludCkobG9uZylwbmV3ID0gLTE7CisJZWxzZQorCSAgICAoaW50KShsb25nKXBuZXcgPSAtU0ZjaGFyc1BlckVudHJ5OworICAgIH0KKyAgICBlbHNlIGlmICgoaW50KShsb25nKXBuZXcgPiAwKQorICAgIHsKKwlpZiAoKGludCkobG9uZylwbmV3IDwgU0ZoU2Nyb2xsV2lkdGgpCisJICAgIChpbnQpKGxvbmcpcG5ldyA9IDE7CisJZWxzZQorCSAgICAoaW50KShsb25nKXBuZXcgPSBTRmNoYXJzUGVyRW50cnk7CisgICAgfQorI2VuZGlmCisgICAgbncgPSBkaXItPmhPcmlnaW4gKyAoaW50KShsb25nKXBuZXc7CisKKyAgICBpZiAobncgPiBkaXItPm5DaGFycyAtIFNGY2hhcnNQZXJFbnRyeSkKKwludyA9IGRpci0+bkNoYXJzIC0gU0ZjaGFyc1BlckVudHJ5OworCisgICAgaWYgKG53IDwgMCkKKwludyA9IDA7CisKKyAgICBpZiAoZGlyLT5uQ2hhcnMpCisgICAgeworCWZsb2F0CWY7CisKKwlmID0gKChkb3VibGUpIG53KSAvIGRpci0+bkNoYXJzOworCisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisJWGF3U2Nyb2xsYmFyU2V0VGh1bWIoCisJCXcsCisJCWYsCisJCShmbG9hdCkgKCgoZG91YmxlKSAoKGRpci0+bkNoYXJzIDwgU0ZjaGFyc1BlckVudHJ5KSA/CisJCQkgICAgICAgZGlyLT5uQ2hhcnMgOiBTRmNoYXJzUGVyRW50cnkpKSAvIGRpci0+bkNoYXJzKSk7CisjZWxzZQorCXZpbV9YYXdTY3JvbGxiYXJTZXRUaHVtYigKKwkJdywKKwkJZiwKKwkJKGZsb2F0KSAoKChkb3VibGUpICgoZGlyLT5uQ2hhcnMgPCBTRmNoYXJzUGVyRW50cnkpID8KKwkJCSAgICAgICBkaXItPm5DaGFycyA6IFNGY2hhcnNQZXJFbnRyeSkpIC8gZGlyLT5uQ2hhcnMpLAorCQkoZG91YmxlKWRpci0+bkNoYXJzKTsKKyNlbmRpZgorCisJU0ZoU2xpZGVyTW92ZWRDYWxsYmFjayh3LCBuLCAoWHRQb2ludGVyKSZmKTsKKyAgICB9Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1NGcGF0aFNsaWRlck1vdmVkQ2FsbGJhY2sodywgY2xpZW50X2RhdGEsIG53KQorICAgIFdpZGdldAkJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGE7CisgICAgWHRQb2ludGVyCW53OworeworICAgIFNGRGlyCQkqZGlyOworICAgIGludAkJCW47CisgICAgWGF3VGV4dFBvc2l0aW9uCXBvczsKKyAgICBpbnQJCQlTRmRpclB0clNhdmU7CisKKyAgICBTRmRpclB0clNhdmUgPSBTRmRpclB0cjsKKyAgICBTRmRpclB0ciA9ICgqKGZsb2F0ICopbncpICogU0ZkaXJFbmQ7CisgICAgaWYgKFNGZGlyUHRyID09IFNGZGlyUHRyU2F2ZSkKKwlyZXR1cm47CisKKyAgICBTRmRyYXdMaXN0cyhTRl9ET19TQ1JPTEwpOworCisgICAgbiA9IDI7CisgICAgd2hpbGUgKFNGZGlyUHRyICsgbiA+PSBTRmRpckVuZCkKKwluLS07CisKKyAgICBkaXIgPSAmKFNGZGlyc1tTRmRpclB0ciArIG5dKTsKKworICAgIHBvcyA9IGRpci0+cGF0aCAtIFNGY3VycmVudFBhdGg7CisKKyAgICBpZiAoIXN0cm5jbXAoU0ZjdXJyZW50UGF0aCwgU0ZzdGFydERpciwgc3RybGVuKFNGc3RhcnREaXIpKSkKKyAgICB7CisJcG9zIC09IHN0cmxlbihTRnN0YXJ0RGlyKTsKKwlpZiAocG9zIDwgMCkKKwkgICAgcG9zID0gMDsKKyAgICB9CisKKyAgICBYYXdUZXh0U2V0SW5zZXJ0aW9uUG9pbnQoc2VsRmlsZUZpZWxkLCBwb3MpOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitTRnBhdGhBcmVhU2VsZWN0ZWRDYWxsYmFjayh3LCBjbGllbnRfZGF0YSwgcG5ldykKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGE7CisgICAgWHRQb2ludGVyCXBuZXc7Cit7CisgICAgaW50CQludzsKKyAgICBmbG9hdAlmOworCisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisgICAgaWYgKChpbnQpKGxvbmcpcG5ldyA8IDApCisgICAgeworCWlmICgoaW50KShsb25nKXBuZXcgPiAtU0ZwYXRoU2Nyb2xsV2lkdGgpCisJICAgIChpbnQpKGxvbmcpcG5ldyA9IC0xOworCWVsc2UKKwkgICAgKGludCkobG9uZylwbmV3ID0gLTM7CisgICAgfQorICAgIGVsc2UgaWYgKChpbnQpKGxvbmcpcG5ldyA+IDApCisgICAgeworCWlmICgoaW50KShsb25nKXBuZXcgPCBTRnBhdGhTY3JvbGxXaWR0aCkKKwkgICAgKGludCkobG9uZylwbmV3ID0gMTsKKwllbHNlCisJICAgIChpbnQpKGxvbmcpcG5ldyA9IDM7CisgICAgfQorI2VuZGlmCisgICAgbncgPSBTRmRpclB0ciArIChpbnQpKGxvbmcpcG5ldzsKKworICAgIGlmIChudyA+IFNGZGlyRW5kIC0gMykKKwludyA9IFNGZGlyRW5kIC0gMzsKKworICAgIGlmIChudyA8IDApCisJbncgPSAwOworCisgICAgZiA9ICgoZG91YmxlKSBudykgLyBTRmRpckVuZDsKKworI2lmZGVmIEZFQVRfR1VJX05FWFRBVworICAgIFhhd1Njcm9sbGJhclNldFRodW1iKAorCSAgICB3LAorCSAgICBmLAorCSAgICAoZmxvYXQpICgoKGRvdWJsZSkgKChTRmRpckVuZCA8IDMpID8gU0ZkaXJFbmQgOiAzKSkgLyBTRmRpckVuZCkpOworI2Vsc2UKKyAgICB2aW1fWGF3U2Nyb2xsYmFyU2V0VGh1bWIoCisJICAgIHcsCisJICAgIGYsCisJICAgIChmbG9hdCkgKCgoZG91YmxlKSAoKFNGZGlyRW5kIDwgMykgPyBTRmRpckVuZCA6IDMpKSAvIFNGZGlyRW5kKSwKKwkgICAgKGRvdWJsZSlTRmRpckVuZCk7CisjZW5kaWYKKworICAgIFNGcGF0aFNsaWRlck1vdmVkQ2FsbGJhY2sodywgKFh0UG9pbnRlcikgTlVMTCwgKFh0UG9pbnRlcikmZik7Cit9CisKKyAgICBzdGF0aWMgQm9vbGVhbgorU0Z3b3JrUHJvYygpCit7CisgICAgU0ZEaXIJKmRpcjsKKyAgICBTRkVudHJ5CSplbnRyeTsKKworICAgIGZvciAoZGlyID0gJihTRmRpcnNbU0ZkaXJFbmQgLSAxXSk7IGRpciA+PSBTRmRpcnM7IGRpci0tKQorICAgIHsKKwlpZiAoIShkaXItPm5FbnRyaWVzKSkKKwkgICAgY29udGludWU7CisJZm9yIChlbnRyeSA9ICYoZGlyLT5lbnRyaWVzW2Rpci0+bkVudHJpZXMgLSAxXSk7CisJCWVudHJ5ID49IGRpci0+ZW50cmllczsKKwkJZW50cnktLSkKKwl7CisJICAgIGlmICghKGVudHJ5LT5zdGF0RG9uZSkpCisJICAgIHsKKwkJKHZvaWQpU0ZzdGF0QW5kQ2hlY2soZGlyLCBlbnRyeSk7CisJCXJldHVybiBGYWxzZTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBTRndvcmtQcm9jQWRkZWQgPSAwOworCisgICAgcmV0dXJuIFRydWU7Cit9CisKKy8qKioqKioqKioqKioqKioqKiBEaXIuYyAqLworCisgICAgc3RhdGljIGludAorU0Zjb21wYXJlRW50cmllcyhwLCBxKQorICAgIGNvbnN0IHZvaWQJKnA7CisgICAgY29uc3Qgdm9pZAkqcTsKK3sKKyAgICByZXR1cm4gc3RyY21wKCgoU0ZFbnRyeSAqKXApLT5yZWFsLCAoKFNGRW50cnkgKilxKS0+cmVhbCk7Cit9CisKKyAgICBzdGF0aWMgaW50CitTRmdldERpcihkaXIpCisgICAgU0ZEaXIJKmRpcjsKK3sKKyAgICBTRkVudHJ5CQkqcmVzdWx0ID0gTlVMTDsKKyAgICBpbnQJCQlBbGxvYyA9IDA7CisgICAgaW50CQkJaTsKKyAgICBESVIJCQkqZGlycDsKKyAgICBzdHJ1Y3QgZGlyZW50CSpkcDsKKyAgICBjaGFyCQkqc3RyOworICAgIGludAkJCWxlbjsKKyAgICBpbnQJCQltYXhDaGFyczsKKyAgICBzdHJ1Y3Qgc3RhdAkJc3RhdEJ1ZjsKKworICAgIG1heENoYXJzID0gc3RybGVuKGRpci0+ZGlyKSAtIDE7CisKKyAgICBkaXItPmVudHJpZXMgPSBOVUxMOworICAgIGRpci0+bkVudHJpZXMgPSAwOworICAgIGRpci0+bkNoYXJzID0gMDsKKworICAgIHJlc3VsdCA9IE5VTEw7CisgICAgaSA9IDA7CisKKyAgICBkaXJwID0gb3BlbmRpcigiLiIpOworICAgIGlmICghZGlycCkKKwlyZXR1cm4gMTsKKworICAgICh2b2lkKW1jaF9zdGF0KCIuIiwgJnN0YXRCdWYpOworICAgIGRpci0+bXRpbWUgPSBzdGF0QnVmLnN0X210aW1lOworCisgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlycCkpKQorICAgIHsKKwkvKiBJZ25vcmUgIi4iIGFuZCAiLi4iICovCisJaWYgKHN0cmNtcChkcC0+ZF9uYW1lLCAiLiIpID09IDAgfHwgc3RyY21wKGRwLT5kX25hbWUsICIuLiIpID09IDApCisJICAgIGNvbnRpbnVlOworCWlmIChpID49IEFsbG9jKQorCXsKKwkgICAgQWxsb2MgPSAyICogKEFsbG9jICsgMSk7CisJICAgIHJlc3VsdCA9IChTRkVudHJ5ICopIFh0UmVhbGxvYygoY2hhciAqKSByZXN1bHQsCisJCSAgICAodW5zaWduZWQpIChBbGxvYyAqIHNpemVvZihTRkVudHJ5KSkpOworCX0KKwlyZXN1bHRbaV0uc3RhdERvbmUgPSAwOworCXN0ciA9IGRwLT5kX25hbWU7CisJbGVuID0gc3RybGVuKHN0cik7CisJcmVzdWx0W2ldLnJlYWwgPSBYdE1hbGxvYygodW5zaWduZWQpIChsZW4gKyAyKSk7CisJKHZvaWQpIHN0cmNhdChzdHJjcHkocmVzdWx0W2ldLnJlYWwsIHN0ciksICIgIik7CisJaWYgKGxlbiA+IG1heENoYXJzKQorCSAgICBtYXhDaGFycyA9IGxlbjsKKwlyZXN1bHRbaV0uc2hvd24gPSByZXN1bHRbaV0ucmVhbDsKKwlpKys7CisgICAgfQorCisgICAgcXNvcnQoKGNoYXIgKikgcmVzdWx0LCAoc2l6ZV90KSBpLCBzaXplb2YoU0ZFbnRyeSksIFNGY29tcGFyZUVudHJpZXMpOworCisgICAgZGlyLT5lbnRyaWVzID0gcmVzdWx0OworICAgIGRpci0+bkVudHJpZXMgPSBpOworICAgIGRpci0+bkNoYXJzID0gbWF4Q2hhcnMgKyAxOworCisgICAgY2xvc2VkaXIoZGlycCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqIFNGaW50ZXJuYWwuaCAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8WDExL2N1cnNvcmZvbnQuaD4KKyNpbmNsdWRlIDxYMTEvQ29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL1NoZWxsLmg+CisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisjIGluY2x1ZGUgPFgxMS9uZVh0YXcvRm9ybS5oPgorIyBpbmNsdWRlIDxYMTEvbmVYdGF3L0NvbW1hbmQuaD4KKyMgaW5jbHVkZSA8WDExL25lWHRhdy9MYWJlbC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxYMTEvWGF3L0Zvcm0uaD4KKyNpbmNsdWRlIDxYMTEvWGF3L0NvbW1hbmQuaD4KKyNpbmNsdWRlIDxYMTEvWGF3L0xhYmVsLmg+CisjZW5kaWYKKworc3RhdGljIGNoYXIgKm9uZUxpbmVUZXh0RWRpdFRyYW5zbGF0aW9ucyA9ICJcCisJPEtleT5SZXR1cm46CXJlZHJhdy1kaXNwbGF5KClcblwKKwlDdHJsPEtleT5NOglyZWRyYXctZGlzcGxheSgpXG5cCisiOworCitzdGF0aWMgdm9pZCBTRmV4cG9zZUxpc3QgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIG4sIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKmNvbnQpKTsKKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorU0ZleHBvc2VMaXN0KHcsIG4sIGV2ZW50LCBjb250KQorICAgIFdpZGdldAl3OworICAgIFh0UG9pbnRlcgluOworICAgIFhFdmVudAkqZXZlbnQ7CisgICAgQm9vbGVhbgkqY29udDsKK3sKKyAgICBpZiAoKGV2ZW50LT50eXBlID09IE5vRXhwb3NlKSB8fCBldmVudC0+eGV4cG9zZS5jb3VudCkKKwlyZXR1cm47CisKKyAgICBTRmRyYXdMaXN0KChpbnQpKGxvbmcpbiwgU0ZfRE9fTk9UX1NDUk9MTCk7Cit9CisKK3N0YXRpYyB2b2lkIFNGbW9kVmVyaWZ5Q2FsbGJhY2sgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50LCBCb29sZWFuICpjb250KSk7CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1NGbW9kVmVyaWZ5Q2FsbGJhY2sodywgY2xpZW50X2RhdGEsIGV2ZW50LCBjb250KQorICAgIFdpZGdldAkJdzsKKyAgICBYdFBvaW50ZXIJCWNsaWVudF9kYXRhOworICAgIFhFdmVudAkJKmV2ZW50OworICAgIEJvb2xlYW4JCSpjb250OworeworICAgIGNoYXIJYnVmWzJdOworCisgICAgaWYgKChYTG9va3VwU3RyaW5nKCYoZXZlbnQtPnhrZXkpLCBidWYsIDIsIE5VTEwsIE5VTEwpID09IDEpICYmCisJICAgICgoKmJ1ZikgPT0gJ1xyJykpCisJU0ZzdGF0dXMgPSBTRUxfRklMRV9PSzsKKyAgICBlbHNlCisJU0ZzdGF0dXMgPSBTRUxfRklMRV9URVhUOworfQorCitzdGF0aWMgdm9pZCBTRm9rQ2FsbGJhY2sgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIGNsLCBYdFBvaW50ZXIgY2QpKTsKKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorU0Zva0NhbGxiYWNrKHcsIGNsLCBjZCkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2wsIGNkOworeworICAgIFNGc3RhdHVzID0gU0VMX0ZJTEVfT0s7Cit9CisKK3N0YXRpYyBYdENhbGxiYWNrUmVjIFNGb2tTZWxlY3RbXSA9Cit7CisgICAgeyBTRm9rQ2FsbGJhY2ssIChYdFBvaW50ZXIpIE5VTEwgfSwKKyAgICB7IE5VTEwsIChYdFBvaW50ZXIpIE5VTEwgfSwKK307CisKK3N0YXRpYyB2b2lkIFNGY2FuY2VsQ2FsbGJhY2sgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIGNsLCBYdFBvaW50ZXIgY2QpKTsKKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorU0ZjYW5jZWxDYWxsYmFjayh3LCBjbCwgY2QpCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCWNsLCBjZDsKK3sKKyAgICBTRnN0YXR1cyA9IFNFTF9GSUxFX0NBTkNFTDsKK30KKworc3RhdGljIFh0Q2FsbGJhY2tSZWMgU0ZjYW5jZWxTZWxlY3RbXSA9Cit7CisgICAgeyBTRmNhbmNlbENhbGxiYWNrLCAoWHRQb2ludGVyKSBOVUxMIH0sCisgICAgeyBOVUxMLCAoWHRQb2ludGVyKSBOVUxMIH0sCit9OworCitzdGF0aWMgdm9pZCBTRmRpc21pc3NBY3Rpb24gX19BUkdTKChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKSk7CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1NGZGlzbWlzc0FjdGlvbih3LCBldmVudCwgcGFyYW1zLCBudW1fcGFyYW1zKQorICAgIFdpZGdldAl3OworICAgIFhFdmVudCAqZXZlbnQ7CisgICAgU3RyaW5nICpwYXJhbXM7CisgICAgQ2FyZGluYWwgKm51bV9wYXJhbXM7Cit7CisgICAgaWYgKGV2ZW50LT50eXBlID09IENsaWVudE1lc3NhZ2UgJiYKKwkgICAgZXZlbnQtPnhjbGllbnQuZGF0YS5sWzBdICE9IFNGd21EZWxldGVXaW5kb3cpCisJcmV0dXJuOworCisgICAgU0ZzdGF0dXMgPSBTRUxfRklMRV9DQU5DRUw7Cit9CisKK3N0YXRpYyBjaGFyICp3bURlbGV0ZVdpbmRvd1RyYW5zbGF0aW9uID0gIlwKKwk8TWVzc2FnZT5XTV9QUk9UT0NPTFM6CVNlbEZpbGVEaXNtaXNzKClcblwKKyI7CisKK3N0YXRpYyBYdEFjdGlvbnNSZWMgYWN0aW9uc1tdID0KK3sKKyAgICB7IlNlbEZpbGVEaXNtaXNzIiwJU0ZkaXNtaXNzQWN0aW9ufSwKK307CisKKyAgICBzdGF0aWMgdm9pZAorU0ZzZXRDb2xvcnMoYmcsIGZnLCBzY3JvbGxfYmcsIHNjcm9sbF9mZykKKyAgICBndWljb2xvcl9UCWJnOworICAgIGd1aWNvbG9yX1QJZmc7CisgICAgZ3VpY29sb3JfVAlzY3JvbGxfYmc7CisgICAgZ3VpY29sb3JfVAlzY3JvbGxfZmc7Cit7CisgICAgaWYgKHNlbEZpbGVGb3JtKQorICAgIHsKKwlYdFZhU2V0VmFsdWVzKHNlbEZpbGVGb3JtLCBYdE5iYWNrZ3JvdW5kLCAgYmcsCisJCQkJICAgWHROZm9yZWdyb3VuZCwgIGZnLAorCQkJCSAgIFh0TmJvcmRlckNvbG9yLCBiZywKKwkJCQkgICBOVUxMKTsKKyAgICB9CisgICAgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDM7ICsraSkKKwl7CisJICAgIGlmIChzZWxGaWxlTGlzdHNbaV0pCisJICAgIHsKKwkJWHRWYVNldFZhbHVlcyhzZWxGaWxlTGlzdHNbaV0sIFh0TmJhY2tncm91bmQsICBiZywKKwkJCQkJICAgICAgIFh0TmZvcmVncm91bmQsICBmZywKKwkJCQkJICAgICAgIFh0TmJvcmRlckNvbG9yLCBmZywKKwkJCQkJICAgICAgIE5VTEwpOworCSAgICB9CisJfQorICAgIH0KKyAgICBpZiAoc2VsRmlsZU9LKQorICAgIHsKKwlYdFZhU2V0VmFsdWVzKHNlbEZpbGVPSywgWHROYmFja2dyb3VuZCwgIGJnLAorCQkJCSBYdE5mb3JlZ3JvdW5kLCAgZmcsCisJCQkJIFh0TmJvcmRlckNvbG9yLCBmZywKKwkJCQkgTlVMTCk7CisgICAgfQorICAgIGlmIChzZWxGaWxlQ2FuY2VsKQorICAgIHsKKwlYdFZhU2V0VmFsdWVzKHNlbEZpbGVDYW5jZWwsIFh0TmJhY2tncm91bmQsIGJnLAorCQkJCSAgICAgWHROZm9yZWdyb3VuZCwgZmcsCisJCQkJICAgICBYdE5ib3JkZXJDb2xvciwgZmcsCisJCQkJICAgICBOVUxMKTsKKyAgICB9CisgICAgaWYgKHNlbEZpbGVQcm9tcHQpCisgICAgeworCVh0VmFTZXRWYWx1ZXMoc2VsRmlsZVByb21wdCwgWHROYmFja2dyb3VuZCwgYmcsCisJCQkJICAgICBYdE5mb3JlZ3JvdW5kLCBmZywKKwkJCQkgICAgIE5VTEwpOworICAgIH0KKyAgICBpZiAoZ3VpLmRweSkKKyAgICB7CisJWFNldEJhY2tncm91bmQoZ3VpLmRweSwgU0Z0ZXh0R0MsIGJnKTsKKwlYU2V0Rm9yZWdyb3VuZChndWkuZHB5LCBTRnRleHRHQywgZmcpOworCVhTZXRGb3JlZ3JvdW5kKGd1aS5kcHksIFNGbGluZUdDLCBmZyk7CisKKwkvKiBUaGlzIGlzIGFuIHhvciBHQywgc28gY29tYmluZSB0aGUgZmcgYW5kIGJhY2tncm91bmQgKi8KKwlYU2V0QmFja2dyb3VuZChndWkuZHB5LCBTRmludmVydEdDLCBmZyBeIGJnKTsKKwlYU2V0Rm9yZWdyb3VuZChndWkuZHB5LCBTRmludmVydEdDLCBmZyBeIGJnKTsKKyAgICB9CisgICAgaWYgKHNlbEZpbGVIU2Nyb2xsKQorICAgIHsKKwlYdFZhU2V0VmFsdWVzKHNlbEZpbGVIU2Nyb2xsLCBYdE5iYWNrZ3JvdW5kLCBzY3JvbGxfYmcsCisJCQkJICAgICAgWHROZm9yZWdyb3VuZCwgc2Nyb2xsX2ZnLAorCQkJCSAgICAgIFh0TmJvcmRlckNvbG9yLCBmZywKKwkJCQkgICAgICBOVUxMKTsKKyAgICB9CisgICAgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwl7CisJICAgIFh0VmFTZXRWYWx1ZXMoc2VsRmlsZVZTY3JvbGxzW2ldLCBYdE5iYWNrZ3JvdW5kLCBzY3JvbGxfYmcsCisJCQkJCSAgICAgIFh0TmZvcmVncm91bmQsIHNjcm9sbF9mZywKKwkJCQkJICAgICAgWHROYm9yZGVyQ29sb3IsIGZnLAorCQkJCQkgICAgICBOVUxMKTsKKwkgICAgWHRWYVNldFZhbHVlcyhzZWxGaWxlSFNjcm9sbHNbaV0sIFh0TmJhY2tncm91bmQsIHNjcm9sbF9iZywKKwkJCQkJICAgICAgWHROZm9yZWdyb3VuZCwgc2Nyb2xsX2ZnLAorCQkJCQkgICAgICBYdE5ib3JkZXJDb2xvciwgZmcsCisJCQkJCSAgICAgIE5VTEwpOworCX0KKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorU0ZjcmVhdGVXaWRnZXRzKHRvcGxldmVsLCBwcm9tcHQsIG9rLCBjYW5jZWwpCisgICAgV2lkZ2V0CXRvcGxldmVsOworICAgIGNoYXIJKnByb21wdDsKKyAgICBjaGFyCSpvazsKKyAgICBjaGFyCSpjYW5jZWw7Cit7CisgICAgQ2FyZGluYWwJbjsKKyAgICBpbnQJCWxpc3RXaWR0aCwgbGlzdEhlaWdodDsKKyAgICBpbnQJCWxpc3RTcGFjaW5nID0gMTA7CisgICAgaW50CQlzY3JvbGxUaGlja25lc3MgPSAxNTsKKyAgICBpbnQJCWhTY3JvbGxYLCBoU2Nyb2xsWTsKKyAgICBpbnQJCXZTY3JvbGxYLCB2U2Nyb2xsWTsKKworICAgIHNlbEZpbGUgPSBYdFZhQXBwQ3JlYXRlU2hlbGwoInNlbEZpbGUiLCAiU2VsRmlsZSIsCisJCXRyYW5zaWVudFNoZWxsV2lkZ2V0Q2xhc3MsIFNGZGlzcGxheSwKKwkJWHROdHJhbnNpZW50Rm9yLCB0b3BsZXZlbCwKKwkJWHROdGl0bGUsIHByb21wdCwKKwkJTlVMTCk7CisKKyAgICAvKiBBZGQgV01fREVMRVRFX1dJTkRPVyBwcm90b2NvbCAqLworICAgIFh0QXBwQWRkQWN0aW9ucyhYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KHNlbEZpbGUpLAorCSAgICBhY3Rpb25zLCBYdE51bWJlcihhY3Rpb25zKSk7CisgICAgWHRPdmVycmlkZVRyYW5zbGF0aW9ucyhzZWxGaWxlLAorCSAgICBYdFBhcnNlVHJhbnNsYXRpb25UYWJsZSh3bURlbGV0ZVdpbmRvd1RyYW5zbGF0aW9uKSk7CisKKyAgICBzZWxGaWxlRm9ybSA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJzZWxGaWxlRm9ybSIsCisJCWZvcm1XaWRnZXRDbGFzcywgc2VsRmlsZSwKKwkJWHROZGVmYXVsdERpc3RhbmNlLCAzMCwKKwkJWHROZm9yZWdyb3VuZCwgU0Zmb3JlLAorCQlYdE5iYWNrZ3JvdW5kLCBTRmJhY2ssCisJCVh0TmJvcmRlckNvbG9yLCBTRmJhY2ssCisJCU5VTEwpOworCisgICAgc2VsRmlsZVByb21wdCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJzZWxGaWxlUHJvbXB0IiwKKwkJbGFiZWxXaWRnZXRDbGFzcywgc2VsRmlsZUZvcm0sCisJCVh0TmxhYmVsLCBwcm9tcHQsCisJCVh0TnJlc2l6YWJsZSwgVHJ1ZSwKKwkJWHROdG9wLCBYdENoYWluVG9wLAorCQlYdE5ib3R0b20sIFh0Q2hhaW5Ub3AsCisJCVh0TmxlZnQsIFh0Q2hhaW5MZWZ0LAorCQlYdE5yaWdodCwgWHRDaGFpbkxlZnQsCisJCVh0TmJvcmRlcldpZHRoLCAwLAorCQlYdE5mb3JlZ3JvdW5kLCBTRmZvcmUsCisJCVh0TmJhY2tncm91bmQsIFNGYmFjaywKKwkJTlVMTCk7CisKKyAgICAvKgorICAgIFh0VmFHZXRWYWx1ZXMoc2VsRmlsZVByb21wdCwKKwkJWHROZm9yZWdyb3VuZCwgJlNGZm9yZSwKKwkJWHROYmFja2dyb3VuZCwgJlNGYmFjaywKKwkJTlVMTCk7CisgICAgKi8KKworICAgIFNGaW5pdEZvbnQoKTsKKworICAgIFNGZW50cnlXaWR0aCA9IFNGYmVzaWRlVGV4dCArIFNGY2hhcnNQZXJFbnRyeSAqIFNGY2hhcldpZHRoICsKKwlTRmJlc2lkZVRleHQ7CisgICAgU0ZlbnRyeUhlaWdodCA9IFNGYWJvdmVBbmRCZWxvd1RleHQgKyBTRmNoYXJIZWlnaHQgKworCVNGYWJvdmVBbmRCZWxvd1RleHQ7CisKKyAgICBsaXN0V2lkdGggPSBTRmxpbmVUb1RleHRIICsgU0ZlbnRyeVdpZHRoICsgU0ZsaW5lVG9UZXh0SCArIDEgKworCXNjcm9sbFRoaWNrbmVzczsKKyAgICBsaXN0SGVpZ2h0ID0gU0ZsaW5lVG9UZXh0ViArIFNGZW50cnlIZWlnaHQgKyBTRmxpbmVUb1RleHRWICsgMSArCisJU0ZsaW5lVG9UZXh0ViArIFNGbGlzdFNpemUgKiBTRmVudHJ5SGVpZ2h0ICsKKwlTRmxpbmVUb1RleHRWICsgMSArIHNjcm9sbFRoaWNrbmVzczsKKworICAgIFNGcGF0aFNjcm9sbFdpZHRoID0gMyAqIGxpc3RXaWR0aCArIDIgKiBsaXN0U3BhY2luZyArIDQ7CisKKyAgICBoU2Nyb2xsWCA9IC0xOworICAgIGhTY3JvbGxZID0gU0ZsaW5lVG9UZXh0ViArIFNGZW50cnlIZWlnaHQgKyBTRmxpbmVUb1RleHRWICsgMSArCisJU0ZsaW5lVG9UZXh0ViArIFNGbGlzdFNpemUgKiBTRmVudHJ5SGVpZ2h0ICsKKwlTRmxpbmVUb1RleHRWOworICAgIFNGaFNjcm9sbFdpZHRoID0gU0ZsaW5lVG9UZXh0SCArIFNGZW50cnlXaWR0aCArIFNGbGluZVRvVGV4dEg7CisKKyAgICB2U2Nyb2xsWCA9IFNGbGluZVRvVGV4dEggKyBTRmVudHJ5V2lkdGggKyBTRmxpbmVUb1RleHRIOworICAgIHZTY3JvbGxZID0gU0ZsaW5lVG9UZXh0ViArIFNGZW50cnlIZWlnaHQgKyBTRmxpbmVUb1RleHRWOworICAgIFNGdlNjcm9sbEhlaWdodCA9IFNGbGluZVRvVGV4dFYgKyBTRmxpc3RTaXplICogU0ZlbnRyeUhlaWdodCArCisJU0ZsaW5lVG9UZXh0VjsKKworICAgIFNGdXBwZXJYID0gU0ZsaW5lVG9UZXh0SCArIFNGZW50cnlXaWR0aCArIFNGbGluZVRvVGV4dEggLSAxOworICAgIFNGbG93ZXJZID0gU0ZsaW5lVG9UZXh0ViArIFNGZW50cnlIZWlnaHQgKyBTRmxpbmVUb1RleHRWICsgMSArCisJU0ZsaW5lVG9UZXh0VjsKKyAgICBTRnVwcGVyWSA9IFNGbGluZVRvVGV4dFYgKyBTRmVudHJ5SGVpZ2h0ICsgU0ZsaW5lVG9UZXh0ViArIDEgKworCVNGbGluZVRvVGV4dFYgKyBTRmxpc3RTaXplICogU0ZlbnRyeUhlaWdodCAtIDE7CisKKyAgICBTRnRleHRYID0gU0ZsaW5lVG9UZXh0SCArIFNGYmVzaWRlVGV4dDsKKyAgICBTRnRleHRZb2Zmc2V0ID0gU0Zsb3dlclkgKyBTRmFib3ZlQW5kQmVsb3dUZXh0ICsgU0ZjaGFyQXNjZW50OworCisgICAgU0ZzZWdzWzBdLngxID0gMDsKKyAgICBTRnNlZ3NbMF0ueTEgPSB2U2Nyb2xsWTsKKyAgICBTRnNlZ3NbMF0ueDIgPSB2U2Nyb2xsWCAtIDE7CisgICAgU0ZzZWdzWzBdLnkyID0gdlNjcm9sbFk7CisgICAgU0ZzZWdzWzFdLngxID0gdlNjcm9sbFg7CisgICAgU0ZzZWdzWzFdLnkxID0gMDsKKyAgICBTRnNlZ3NbMV0ueDIgPSB2U2Nyb2xsWDsKKyAgICBTRnNlZ3NbMV0ueTIgPSB2U2Nyb2xsWSAtIDE7CisKKyAgICBTRmNvbXBsZXRpb25TZWdzWzBdLngxID0gU0Zjb21wbGV0aW9uU2Vnc1swXS54MiA9IFNGbGluZVRvVGV4dEg7CisgICAgU0Zjb21wbGV0aW9uU2Vnc1sxXS54MSA9IFNGY29tcGxldGlvblNlZ3NbMV0ueDIgPQorCVNGbGluZVRvVGV4dEggKyBTRmVudHJ5V2lkdGggLSAxOworCisgICAgc2VsRmlsZUZpZWxkID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoInNlbEZpbGVGaWVsZCIsCisJCWFzY2lpVGV4dFdpZGdldENsYXNzLCBzZWxGaWxlRm9ybSwKKwkJWHROd2lkdGgsIDMgKiBsaXN0V2lkdGggKyAyICogbGlzdFNwYWNpbmcgKyA0LAorCQlYdE5ib3JkZXJDb2xvciwgU0Zmb3JlLAorCQlYdE5mcm9tVmVydCwgc2VsRmlsZVByb21wdCwKKwkJWHROdmVydERpc3RhbmNlLCAxMCwKKwkJWHROcmVzaXphYmxlLCBUcnVlLAorCQlYdE50b3AsIFh0Q2hhaW5Ub3AsCisJCVh0TmJvdHRvbSwgWHRDaGFpblRvcCwKKwkJWHRObGVmdCwgWHRDaGFpbkxlZnQsCisJCVh0TnJpZ2h0LCBYdENoYWluTGVmdCwKKwkJWHROc3RyaW5nLCBTRnRleHRCdWZmZXIsCisJCVh0Tmxlbmd0aCwgTUFYUEFUSEwsCisJCVh0TmVkaXRUeXBlLCBYYXd0ZXh0RWRpdCwKKwkJWHROd3JhcCwgWGF3dGV4dFdyYXBXb3JkLAorCQlYdE5yZXNpemUsIFhhd3RleHRSZXNpemVIZWlnaHQsCisJCVh0TnVzZVN0cmluZ0luUGxhY2UsIFRydWUsCisJCU5VTEwpOworCisgICAgWHRPdmVycmlkZVRyYW5zbGF0aW9ucyhzZWxGaWxlRmllbGQsCisJICAgIFh0UGFyc2VUcmFuc2xhdGlvblRhYmxlKG9uZUxpbmVUZXh0RWRpdFRyYW5zbGF0aW9ucykpOworICAgIFh0U2V0S2V5Ym9hcmRGb2N1cyhzZWxGaWxlRm9ybSwgc2VsRmlsZUZpZWxkKTsKKworICAgIHNlbEZpbGVIU2Nyb2xsID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoInNlbEZpbGVIU2Nyb2xsIiwKKyNpZmRlZiBGRUFUX0dVSV9ORVhUQVcKKwkJc2Nyb2xsYmFyV2lkZ2V0Q2xhc3MsIHNlbEZpbGVGb3JtLAorI2Vsc2UKKwkJdmltX3Njcm9sbGJhcldpZGdldENsYXNzLCBzZWxGaWxlRm9ybSwKKyNlbmRpZgorCQlYdE5vcmllbnRhdGlvbiwgWHRvcmllbnRIb3Jpem9udGFsLAorCQlYdE53aWR0aCwgU0ZwYXRoU2Nyb2xsV2lkdGgsCisJCVh0TmhlaWdodCwgc2Nyb2xsVGhpY2tuZXNzLAorCQlYdE5ib3JkZXJDb2xvciwgU0Zmb3JlLAorCQlYdE5mcm9tVmVydCwgc2VsRmlsZUZpZWxkLAorCQlYdE52ZXJ0RGlzdGFuY2UsIDMwLAorCQlYdE50b3AsIFh0Q2hhaW5Ub3AsCisJCVh0TmJvdHRvbSwgWHRDaGFpblRvcCwKKwkJWHRObGVmdCwgWHRDaGFpbkxlZnQsCisJCVh0TnJpZ2h0LCBYdENoYWluTGVmdCwKKwkJWHROZm9yZWdyb3VuZCwgZ3VpLnNjcm9sbF9mZ19waXhlbCwKKwkJWHROYmFja2dyb3VuZCwgZ3VpLnNjcm9sbF9iZ19waXhlbCwKKyNpZm5kZWYgRkVBVF9HVUlfTkVYVEFXCisJCVh0TmxpbWl0VGh1bWIsIDEsCisjZW5kaWYKKwkJTlVMTCk7CisKKyAgICBYdEFkZENhbGxiYWNrKHNlbEZpbGVIU2Nyb2xsLCBYdE5qdW1wUHJvYywKKwkgICAgKFh0Q2FsbGJhY2tQcm9jKSBTRnBhdGhTbGlkZXJNb3ZlZENhbGxiYWNrLCAoWHRQb2ludGVyKU5VTEwpOworICAgIFh0QWRkQ2FsbGJhY2soc2VsRmlsZUhTY3JvbGwsIFh0TnNjcm9sbFByb2MsCisJICAgIChYdENhbGxiYWNrUHJvYykgU0ZwYXRoQXJlYVNlbGVjdGVkQ2FsbGJhY2ssIChYdFBvaW50ZXIpTlVMTCk7CisKKyAgICBzZWxGaWxlTGlzdHNbMF0gPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgic2VsRmlsZUxpc3QxIiwKKwkJY29tcG9zaXRlV2lkZ2V0Q2xhc3MsIHNlbEZpbGVGb3JtLAorCQlYdE53aWR0aCwgbGlzdFdpZHRoLAorCQlYdE5oZWlnaHQsIGxpc3RIZWlnaHQsCisJCVh0TmZvcmVncm91bmQsICBTRmZvcmUsCisJCVh0TmJhY2tncm91bmQsICBTRmJhY2ssCisJCVh0TmJvcmRlckNvbG9yLCBTRmZvcmUsCisJCVh0TmZyb21WZXJ0LCBzZWxGaWxlSFNjcm9sbCwKKwkJWHROdmVydERpc3RhbmNlLCAxMCwKKwkJWHROdG9wLCBYdENoYWluVG9wLAorCQlYdE5ib3R0b20sIFh0Q2hhaW5Ub3AsCisJCVh0TmxlZnQsIFh0Q2hhaW5MZWZ0LAorCQlYdE5yaWdodCwgWHRDaGFpbkxlZnQsCisJCU5VTEwpOworCisgICAgc2VsRmlsZUxpc3RzWzFdID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoInNlbEZpbGVMaXN0MiIsCisJCWNvbXBvc2l0ZVdpZGdldENsYXNzLCBzZWxGaWxlRm9ybSwKKwkJWHROd2lkdGgsIGxpc3RXaWR0aCwKKwkJWHROaGVpZ2h0LCBsaXN0SGVpZ2h0LAorCQlYdE5mb3JlZ3JvdW5kLCAgU0Zmb3JlLAorCQlYdE5iYWNrZ3JvdW5kLCAgU0ZiYWNrLAorCQlYdE5ib3JkZXJDb2xvciwgU0Zmb3JlLAorCQlYdE5mcm9tSG9yaXosIHNlbEZpbGVMaXN0c1swXSwKKwkJWHROZnJvbVZlcnQsIHNlbEZpbGVIU2Nyb2xsLAorCQlYdE5ob3JpekRpc3RhbmNlLCBsaXN0U3BhY2luZywKKwkJWHROdmVydERpc3RhbmNlLCAxMCwKKwkJWHROdG9wLCBYdENoYWluVG9wLAorCQlYdE5ib3R0b20sIFh0Q2hhaW5Ub3AsCisJCVh0TmxlZnQsIFh0Q2hhaW5MZWZ0LAorCQlYdE5yaWdodCwgWHRDaGFpbkxlZnQsCisJCU5VTEwpOworCisgICAgc2VsRmlsZUxpc3RzWzJdID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoInNlbEZpbGVMaXN0MyIsCisJCWNvbXBvc2l0ZVdpZGdldENsYXNzLCBzZWxGaWxlRm9ybSwKKwkJWHROd2lkdGgsIGxpc3RXaWR0aCwKKwkJWHROaGVpZ2h0LCBsaXN0SGVpZ2h0LAorCQlYdE5mb3JlZ3JvdW5kLCAgU0Zmb3JlLAorCQlYdE5iYWNrZ3JvdW5kLCAgU0ZiYWNrLAorCQlYdE5ib3JkZXJDb2xvciwgU0Zmb3JlLAorCQlYdE5mcm9tSG9yaXosIHNlbEZpbGVMaXN0c1sxXSwKKwkJWHROZnJvbVZlcnQsIHNlbEZpbGVIU2Nyb2xsLAorCQlYdE5ob3JpekRpc3RhbmNlLCBsaXN0U3BhY2luZywKKwkJWHROdmVydERpc3RhbmNlLCAxMCwKKwkJWHROdG9wLCBYdENoYWluVG9wLAorCQlYdE5ib3R0b20sIFh0Q2hhaW5Ub3AsCisJCVh0TmxlZnQsIFh0Q2hhaW5MZWZ0LAorCQlYdE5yaWdodCwgWHRDaGFpbkxlZnQsCisJCU5VTEwpOworCisgICAgZm9yIChuID0gMDsgbiA8IDM7IG4rKykKKyAgICB7CisJc2VsRmlsZVZTY3JvbGxzW25dID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoInNlbEZpbGVWU2Nyb2xsIiwKKyNpZmRlZiBGRUFUX0dVSV9ORVhUQVcKKwkJICAgIHNjcm9sbGJhcldpZGdldENsYXNzLCBzZWxGaWxlTGlzdHNbbl0sCisjZWxzZQorCQkgICAgdmltX3Njcm9sbGJhcldpZGdldENsYXNzLCBzZWxGaWxlTGlzdHNbbl0sCisjZW5kaWYKKwkJICAgIFh0TngsIHZTY3JvbGxYLAorCQkgICAgWHROeSwgdlNjcm9sbFksCisJCSAgICBYdE53aWR0aCwgc2Nyb2xsVGhpY2tuZXNzLAorCQkgICAgWHROaGVpZ2h0LCBTRnZTY3JvbGxIZWlnaHQsCisJCSAgICBYdE5ib3JkZXJDb2xvciwgU0Zmb3JlLAorCQkgICAgWHROZm9yZWdyb3VuZCwgZ3VpLnNjcm9sbF9mZ19waXhlbCwKKwkJICAgIFh0TmJhY2tncm91bmQsIGd1aS5zY3JvbGxfYmdfcGl4ZWwsCisjaWZuZGVmIEZFQVRfR1VJX05FWFRBVworCQkgICAgWHRObGltaXRUaHVtYiwgMSwKKyNlbmRpZgorCQkgICAgTlVMTCk7CisKKwlYdEFkZENhbGxiYWNrKHNlbEZpbGVWU2Nyb2xsc1tuXSwgWHROanVtcFByb2MsCisJCShYdENhbGxiYWNrUHJvYylTRnZGbG9hdFNsaWRlck1vdmVkQ2FsbGJhY2ssIChYdFBvaW50ZXIpbik7CisJWHRBZGRDYWxsYmFjayhzZWxGaWxlVlNjcm9sbHNbbl0sIFh0TnNjcm9sbFByb2MsCisJCShYdENhbGxiYWNrUHJvYylTRnZBcmVhU2VsZWN0ZWRDYWxsYmFjaywgKFh0UG9pbnRlciluKTsKKworCXNlbEZpbGVIU2Nyb2xsc1tuXSA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJzZWxGaWxlSFNjcm9sbCIsCisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisJCSAgICBzY3JvbGxiYXJXaWRnZXRDbGFzcywgc2VsRmlsZUxpc3RzW25dLAorI2Vsc2UKKwkJICAgIHZpbV9zY3JvbGxiYXJXaWRnZXRDbGFzcywgc2VsRmlsZUxpc3RzW25dLAorI2VuZGlmCisJCSAgICBYdE5vcmllbnRhdGlvbiwgWHRvcmllbnRIb3Jpem9udGFsLAorCQkgICAgWHROeCwgaFNjcm9sbFgsCisJCSAgICBYdE55LCBoU2Nyb2xsWSwKKwkJICAgIFh0TndpZHRoLCBTRmhTY3JvbGxXaWR0aCwKKwkJICAgIFh0TmhlaWdodCwgc2Nyb2xsVGhpY2tuZXNzLAorCQkgICAgWHROYm9yZGVyQ29sb3IsIFNGZm9yZSwKKwkJICAgIFh0TmZvcmVncm91bmQsIGd1aS5zY3JvbGxfZmdfcGl4ZWwsCisJCSAgICBYdE5iYWNrZ3JvdW5kLCBndWkuc2Nyb2xsX2JnX3BpeGVsLAorI2lmbmRlZiBGRUFUX0dVSV9ORVhUQVcKKwkJICAgIFh0TmxpbWl0VGh1bWIsIDEsCisjZW5kaWYKKwkJICAgIE5VTEwpOworCisJWHRBZGRDYWxsYmFjayhzZWxGaWxlSFNjcm9sbHNbbl0sIFh0Tmp1bXBQcm9jLAorCQkoWHRDYWxsYmFja1Byb2MpU0ZoU2xpZGVyTW92ZWRDYWxsYmFjaywgKFh0UG9pbnRlciluKTsKKwlYdEFkZENhbGxiYWNrKHNlbEZpbGVIU2Nyb2xsc1tuXSwgWHROc2Nyb2xsUHJvYywKKwkJKFh0Q2FsbGJhY2tQcm9jKVNGaEFyZWFTZWxlY3RlZENhbGxiYWNrLCAoWHRQb2ludGVyKW4pOworICAgIH0KKworICAgIHNlbEZpbGVPSyA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJzZWxGaWxlT0siLAorCQljb21tYW5kV2lkZ2V0Q2xhc3MsIHNlbEZpbGVGb3JtLAorCQlYdE5sYWJlbCwgb2ssCisJCVh0TnJlc2l6YWJsZSwgVHJ1ZSwKKwkJWHROY2FsbGJhY2ssIFNGb2tTZWxlY3QsCisJCVh0TmZvcmVncm91bmQsICBTRmZvcmUsCisJCVh0TmJhY2tncm91bmQsICBTRmJhY2ssCisJCVh0TmJvcmRlckNvbG9yLCBTRmZvcmUsCisJCVh0TmZyb21Ib3Jpeiwgc2VsRmlsZUxpc3RzWzBdLAorCQlYdE5mcm9tVmVydCwgc2VsRmlsZUxpc3RzWzBdLAorCQlYdE52ZXJ0RGlzdGFuY2UsIDMwLAorCQlYdE50b3AsIFh0Q2hhaW5Ub3AsCisJCVh0TmJvdHRvbSwgWHRDaGFpblRvcCwKKwkJWHRObGVmdCwgWHRDaGFpbkxlZnQsCisJCVh0TnJpZ2h0LCBYdENoYWluTGVmdCwKKwkJTlVMTCk7CisKKyAgICBzZWxGaWxlQ2FuY2VsID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoInNlbEZpbGVDYW5jZWwiLAorCQljb21tYW5kV2lkZ2V0Q2xhc3MsIHNlbEZpbGVGb3JtLAorCQlYdE5sYWJlbCwgY2FuY2VsLAorCQlYdE5yZXNpemFibGUsIFRydWUsCisJCVh0TmNhbGxiYWNrLCBTRmNhbmNlbFNlbGVjdCwKKwkJWHROZm9yZWdyb3VuZCwgIFNGZm9yZSwKKwkJWHROYmFja2dyb3VuZCwgIFNGYmFjaywKKwkJWHROYm9yZGVyQ29sb3IsIFNGZm9yZSwKKwkJWHROZnJvbUhvcml6LCBzZWxGaWxlT0ssCisJCVh0TmZyb21WZXJ0LCBzZWxGaWxlTGlzdHNbMF0sCisJCVh0Tmhvcml6RGlzdGFuY2UsIDMwLAorCQlYdE52ZXJ0RGlzdGFuY2UsIDMwLAorCQlYdE50b3AsIFh0Q2hhaW5Ub3AsCisJCVh0TmJvdHRvbSwgWHRDaGFpblRvcCwKKwkJWHRObGVmdCwgWHRDaGFpbkxlZnQsCisJCVh0TnJpZ2h0LCBYdENoYWluTGVmdCwKKwkJTlVMTCk7CisKKyAgICBYdFNldE1hcHBlZFdoZW5NYW5hZ2VkKHNlbEZpbGUsIEZhbHNlKTsKKyAgICBYdFJlYWxpemVXaWRnZXQoc2VsRmlsZSk7CisKKyAgICAvKiBBZGQgV01fREVMRVRFX1dJTkRPVyBwcm90b2NvbCAqLworICAgIFNGd21EZWxldGVXaW5kb3cgPSBYSW50ZXJuQXRvbShTRmRpc3BsYXksICJXTV9ERUxFVEVfV0lORE9XIiwgRmFsc2UpOworICAgIFhTZXRXTVByb3RvY29scyhTRmRpc3BsYXksIFh0V2luZG93KHNlbEZpbGUpLCAmU0Z3bURlbGV0ZVdpbmRvdywgMSk7CisKKyAgICBTRmNyZWF0ZUdDKCk7CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgMzsgbisrKQorICAgIHsKKwlYdEFkZEV2ZW50SGFuZGxlcihzZWxGaWxlTGlzdHNbbl0sIEV4cG9zdXJlTWFzaywgVHJ1ZSwKKwkJKFh0RXZlbnRIYW5kbGVyKVNGZXhwb3NlTGlzdCwgKFh0UG9pbnRlciluKTsKKwlYdEFkZEV2ZW50SGFuZGxlcihzZWxGaWxlTGlzdHNbbl0sIEVudGVyV2luZG93TWFzaywgRmFsc2UsCisJCShYdEV2ZW50SGFuZGxlcilTRmVudGVyTGlzdCwgKFh0UG9pbnRlciluKTsKKwlYdEFkZEV2ZW50SGFuZGxlcihzZWxGaWxlTGlzdHNbbl0sIExlYXZlV2luZG93TWFzaywgRmFsc2UsCisJCShYdEV2ZW50SGFuZGxlcilTRmxlYXZlTGlzdCwgKFh0UG9pbnRlciluKTsKKwlYdEFkZEV2ZW50SGFuZGxlcihzZWxGaWxlTGlzdHNbbl0sIFBvaW50ZXJNb3Rpb25NYXNrLCBGYWxzZSwKKwkJKFh0RXZlbnRIYW5kbGVyKVNGbW90aW9uTGlzdCwgKFh0UG9pbnRlciluKTsKKwlYdEFkZEV2ZW50SGFuZGxlcihzZWxGaWxlTGlzdHNbbl0sIEJ1dHRvblByZXNzTWFzaywgRmFsc2UsCisJCShYdEV2ZW50SGFuZGxlcilTRmJ1dHRvblByZXNzTGlzdCwgKFh0UG9pbnRlciluKTsKKwlYdEFkZEV2ZW50SGFuZGxlcihzZWxGaWxlTGlzdHNbbl0sIEJ1dHRvblJlbGVhc2VNYXNrLCBGYWxzZSwKKwkJKFh0RXZlbnRIYW5kbGVyKVNGYnV0dG9uUmVsZWFzZUxpc3QsIChYdFBvaW50ZXIpbik7CisgICAgfQorCisgICAgWHRBZGRFdmVudEhhbmRsZXIoc2VsRmlsZUZpZWxkLCBLZXlQcmVzc01hc2ssIEZhbHNlLAorCQkJCSAgICAgICBTRm1vZFZlcmlmeUNhbGxiYWNrLCAoWHRQb2ludGVyKU5VTEwpOworCisgICAgU0ZhcHAgPSBYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KHNlbEZpbGUpOworfQorCisgICAgc3RhdGljIHZvaWQKK1NGdGV4dENoYW5nZWQoKQoreworI2lmIGRlZmluZWQoRkVBVF9YRk9OVFNFVCkgJiYgZGVmaW5lZChYdE5pbnRlcm5hdGlvbmFsKQorICAgIGlmIChfWGF3VGV4dEZvcm1hdCgoVGV4dFdpZGdldClzZWxGaWxlRmllbGQpID09IFhhd0ZtdFdpZGUpCisgICAgeworCXdjaGFyX3QgKndjYnVmPSh3Y2hhcl90ICopU0Z0ZXh0QnVmZmVyOworCisJaWYgKCh3Y2J1ZlswXSA9PSBMJy8nKSB8fCAod2NidWZbMF0gPT0gTCd+JykpCisJeworCSAgICAodm9pZCkgd2NzdG9tYnMoU0ZjdXJyZW50UGF0aCwgd2NidWYsIE1BWFBBVEhMKTsKKwkgICAgU0Z0ZXh0UG9zID0gWGF3VGV4dEdldEluc2VydGlvblBvaW50KHNlbEZpbGVGaWVsZCk7CisJfQorCWVsc2UKKwl7CisJICAgIHN0cmNweShTRmN1cnJlbnRQYXRoLCBTRnN0YXJ0RGlyKTsKKwkgICAgKHZvaWQpIHdjc3RvbWJzKFNGY3VycmVudFBhdGggKyBzdHJsZW4oU0ZjdXJyZW50UGF0aCksIHdjYnVmLCBNQVhQQVRITCk7CisKKwkgICAgU0Z0ZXh0UG9zID0gWGF3VGV4dEdldEluc2VydGlvblBvaW50KHNlbEZpbGVGaWVsZCkgKyBzdHJsZW4oU0ZzdGFydERpcik7CisJfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICBpZiAoKFNGdGV4dEJ1ZmZlclswXSA9PSAnLycpIHx8IChTRnRleHRCdWZmZXJbMF0gPT0gJ34nKSkKKyAgICB7CisJKHZvaWQpIHN0cmNweShTRmN1cnJlbnRQYXRoLCBTRnRleHRCdWZmZXIpOworCVNGdGV4dFBvcyA9IFhhd1RleHRHZXRJbnNlcnRpb25Qb2ludChzZWxGaWxlRmllbGQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCSh2b2lkKSBzdHJjYXQoc3RyY3B5KFNGY3VycmVudFBhdGgsIFNGc3RhcnREaXIpLCBTRnRleHRCdWZmZXIpOworCisJU0Z0ZXh0UG9zID0gWGF3VGV4dEdldEluc2VydGlvblBvaW50KHNlbEZpbGVGaWVsZCkgKyBzdHJsZW4oU0ZzdGFydERpcik7CisgICAgfQorCisgICAgaWYgKCFTRndvcmtQcm9jQWRkZWQpCisgICAgeworCSh2b2lkKSBYdEFwcEFkZFdvcmtQcm9jKFNGYXBwLCAoWHRXb3JrUHJvYylTRndvcmtQcm9jLCBOVUxMKTsKKwlTRndvcmtQcm9jQWRkZWQgPSAxOworICAgIH0KKworICAgIFNGdXBkYXRlUGF0aCgpOworfQorCisgICAgc3RhdGljIGNoYXIgKgorU0ZnZXRUZXh0KCkKK3sKKyNpZiBkZWZpbmVkKEZFQVRfWEZPTlRTRVQpICYmIGRlZmluZWQoWHROaW50ZXJuYXRpb25hbCkKKyAgICBjaGFyICpidWY7CisKKyAgICBpZiAoX1hhd1RleHRGb3JtYXQoKFRleHRXaWRnZXQpc2VsRmlsZUZpZWxkKSA9PSBYYXdGbXRXaWRlKQorICAgIHsKKwl3Y2hhcl90ICp3Y2J1ZjsKKwlpbnQgbWJzbGVuZ3RoOworCisJWHRWYUdldFZhbHVlcyhzZWxGaWxlRmllbGQsCisJICAgIFh0TnN0cmluZywgJndjYnVmLAorCU5VTEwpOworCW1ic2xlbmd0aCA9IHdjc3RvbWJzKE5VTEwsIHdjYnVmLCAwKTsKKwkvKiBIYWNrOiBzb21lIGJyb2tlbiB3Y3N0b21icygpIHJldHVybnMgemVybywganVzdCBnZXQgYSBsYXJnZSBidWZmZXIgKi8KKwlpZiAobWJzbGVuZ3RoID09IDAgJiYgd2NidWYgIT0gTlVMTCAmJiB3Y2J1ZlswXSAhPSAwKQorCSAgICBtYnNsZW5ndGggPSBNQVhQQVRITDsKKwlidWY9KGNoYXIgKilYdE1hbGxvYyhtYnNsZW5ndGggKyAxKTsKKwl3Y3N0b21icyhidWYsIHdjYnVmLCBtYnNsZW5ndGggKzEpOworCXJldHVybiBidWY7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIChjaGFyICopdmltX3N0cnNhdmUoKGNoYXJfdSAqKVNGdGV4dEJ1ZmZlcik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorU0ZwcmVwYXJlVG9SZXR1cm4oKQoreworICAgIFNGc3RhdHVzID0gU0VMX0ZJTEVfTlVMTDsKKyAgICBYdFJlbW92ZUdyYWIoc2VsRmlsZSk7CisgICAgWHRVbm1hcFdpZGdldChzZWxGaWxlKTsKKyAgICBYdFJlbW92ZVRpbWVPdXQoU0ZkaXJNb2RUaW1lcklkKTsKKyAgICBpZiAoU0ZjaGRpcihTRnN0YXJ0RGlyKSkKKyAgICB7CisJRU1TRyhfKCJFNjE0OiB2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IikpOworCVNGc3RhdHVzID0gU0VMX0ZJTEVfQ0FOQ0VMOworICAgIH0KK30KKworICAgIGNoYXIgKgordmltX1NlbEZpbGUodG9wbGV2ZWwsIHByb21wdCwgaW5pdF9wYXRoLCBzaG93X2VudHJ5LCB4LCB5LCBmZywgYmcsIHNjcm9sbF9mZywgc2Nyb2xsX2JnKQorICAgIFdpZGdldAl0b3BsZXZlbDsKKyAgICBjaGFyCSpwcm9tcHQ7CisgICAgY2hhcgkqaW5pdF9wYXRoOworICAgIGludAkJKCpzaG93X2VudHJ5KSgpOworICAgIGludAkJeCwgeTsKKyAgICBndWljb2xvcl9UCWZnLCBiZzsKKyAgICBndWljb2xvcl9UCXNjcm9sbF9mZywgc2Nyb2xsX2JnOyAvKiBUaGUgIlNjcm9sbGJhciIgZ3JvdXAgY29sb3JzICovCit7CisgICAgc3RhdGljIGludAlmaXJzdFRpbWUgPSAxOworICAgIFhFdmVudAlldmVudDsKKyAgICBjaGFyCSpuYW1lX3JldHVybjsKKworICAgIGlmIChwcm9tcHQgPT0gTlVMTCkKKwlwcm9tcHQgPSBfKCJQYXRobmFtZToiKTsKKyAgICBTRmZvcmUgPSBmZzsKKyAgICBTRmJhY2sgPSBiZzsKKworICAgIGlmIChtY2hfZGlybmFtZSgoY2hhcl91ICopU0ZzdGFydERpciwgTUFYUEFUSEwpID09IEZBSUwpCisgICAgeworCUVNU0coXygiRTYxNTogdmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIpKTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoZmlyc3RUaW1lKQorICAgIHsKKwlmaXJzdFRpbWUgPSAwOworCVNGZGlzcGxheSA9IFh0RGlzcGxheSh0b3BsZXZlbCk7CisJU0ZjcmVhdGVXaWRnZXRzKHRvcGxldmVsLCBwcm9tcHQsIF8oIk9LIiksIF8oIkNhbmNlbCIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlYdFZhU2V0VmFsdWVzKHNlbEZpbGVQcm9tcHQsIFh0TmxhYmVsLCBwcm9tcHQsIE5VTEwpOworCVh0VmFTZXRWYWx1ZXMoc2VsRmlsZSwgWHROdGl0bGUsIHByb21wdCwgTlVMTCk7CisJU0ZzZXRDb2xvcnMoYmcsIGZnLCBzY3JvbGxfYmcsIHNjcm9sbF9mZyk7CisgICAgfQorCisgICAgWHRWYVNldFZhbHVlcyhzZWxGaWxlLCBYdE54LCB4LCBYdE55LCB5LCBOVUxMKTsKKyAgICBYdE1hcFdpZGdldChzZWxGaWxlKTsKKworICAgICh2b2lkKXN0cmNhdChTRnN0YXJ0RGlyLCAiLyIpOworICAgICh2b2lkKXN0cmNweShTRmN1cnJlbnREaXIsIFNGc3RhcnREaXIpOworCisgICAgaWYgKGluaXRfcGF0aCkKKyAgICB7CisJaWYgKGluaXRfcGF0aFswXSA9PSAnLycpCisJeworCSAgICAodm9pZClzdHJjcHkoU0ZjdXJyZW50UGF0aCwgaW5pdF9wYXRoKTsKKwkgICAgaWYgKHN0cm5jbXAoU0ZjdXJyZW50UGF0aCwgU0ZzdGFydERpciwgc3RybGVuKFNGc3RhcnREaXIpKSkKKwkJU0ZzZXRUZXh0KFNGY3VycmVudFBhdGgpOworCSAgICBlbHNlCisJCVNGc2V0VGV4dCgmKFNGY3VycmVudFBhdGhbc3RybGVuKFNGc3RhcnREaXIpXSkpOworCX0KKwllbHNlCisJeworCSAgICAodm9pZClzdHJjYXQoc3RyY3B5KFNGY3VycmVudFBhdGgsIFNGc3RhcnREaXIpLCBpbml0X3BhdGgpOworCSAgICBTRnNldFRleHQoJihTRmN1cnJlbnRQYXRoW3N0cmxlbihTRnN0YXJ0RGlyKV0pKTsKKwl9CisgICAgfQorICAgIGVsc2UKKwkodm9pZClzdHJjcHkoU0ZjdXJyZW50UGF0aCwgU0ZzdGFydERpcik7CisKKyAgICBTRmZ1bmMgPSBzaG93X2VudHJ5OworCisgICAgU0Z0ZXh0Q2hhbmdlZCgpOworCisgICAgWHRBZGRHcmFiKHNlbEZpbGUsIFRydWUsIFRydWUpOworCisgICAgU0ZkaXJNb2RUaW1lcklkID0gWHRBcHBBZGRUaW1lT3V0KFNGYXBwLCAodW5zaWduZWQgbG9uZykgMTAwMCwKKwkgICAgU0ZkaXJNb2RUaW1lciwgKFh0UG9pbnRlcikgTlVMTCk7CisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisJWHRBcHBOZXh0RXZlbnQoU0ZhcHAsICZldmVudCk7CisJWHREaXNwYXRjaEV2ZW50KCZldmVudCk7CisJc3dpdGNoIChTRnN0YXR1cykKKwl7CisJICAgIGNhc2UgU0VMX0ZJTEVfVEVYVDoKKwkJU0ZzdGF0dXMgPSBTRUxfRklMRV9OVUxMOworCQlTRnRleHRDaGFuZ2VkKCk7CisJCWJyZWFrOworCSAgICBjYXNlIFNFTF9GSUxFX09LOgorCQluYW1lX3JldHVybiA9IFNGZ2V0VGV4dCgpOworCQlTRnByZXBhcmVUb1JldHVybigpOworCQlyZXR1cm4gbmFtZV9yZXR1cm47CisJICAgIGNhc2UgU0VMX0ZJTEVfQ0FOQ0VMOgorCQlTRnByZXBhcmVUb1JldHVybigpOworCQlyZXR1cm4gTlVMTDsKKwkgICAgY2FzZSBTRUxfRklMRV9OVUxMOgorCQlicmVhazsKKwl9CisgICAgfQorfQorI2VuZGlmIC8qIEZFQVRfQlJPV1NFICovCmRpZmYgLS1naXQgYS9zcmMvZ3VpX2F0X3NiLmMgYi9zcmMvZ3VpX2F0X3NiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlM2FmYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfYXRfc2IuYwpAQCAtMCwwICsxLDEyMTMgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6ICovCisvKgorICogTU9ESUZJRUQgQVRIRU5BIFNDUk9MTEJBUiAoVVNJTkcgQVJST1dIRUFEUyBBVCBFTkRTIE9GIFRSQVZFTCkKKyAqIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IDE5OTIgYnkgTWl0Y2ggVHJhY2h0ZW5iZXJnCisgKiBSaWdodHMsIHBlcm1pc3Npb25zLCBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhcmUgYXMgaW4gdGhlIERFQyBhbmQgTUlUCisgKiBub3RpY2UgYmVsb3cuCisgKiAkWENvbnNvcnRpdW06IFNjcm9sbGJhci5jLHYgMS43MiA5NC8wNC8xNyAyMDoxMjo0MCBrYWxlYiBFeHAgJAorICovCisKKy8qCisgKiBNb2RpZmllZCBmb3IgVmltIGJ5IEJpbGwgRm9zdGVyIGFuZCBCcmFtIE1vb2xlbmFhcgorICovCisKKy8qCisKK0NvcHlyaWdodCAoYykgMTk4NywgMTk4OCwgMTk5NAlYIENvbnNvcnRpdW0KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFgKK0NPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCitXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIFggQ29uc29ydGl1bSBzaGFsbCBub3QgYmUKK3VzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbgordGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBYIENvbnNvcnRpdW0uCisKK0NvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLCBNYXluYXJkLCBNYXNzYWNodXNldHRzLgorCisJCQlBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0Cit0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0Citub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQKK3RoZSBuYW1lIG9mIERpZ2l0YWwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorCitESUdJVEFMIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMCitCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04KK09GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KK0NPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyovCisKKy8qIFNjcm9sbEJhci5jICovCisvKiBjcmVhdGVkIGJ5IHdlaXNzbWFuLCBNb24gSnVsICA3IDEzOjIwOjAzIDE5ODYgKi8KKy8qIGNvbnZlcnRlZCBieSBzd2ljaywgVGh1IEF1ZyAyNyAxOTg3ICovCisKKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljUC5oPgorI2luY2x1ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CisKKyNpbmNsdWRlIDxYMTEvWGF3L1hhd0luaXQuaD4KKyNpbmNsdWRlICJ2aW0uaCIKKyNpbmNsdWRlICJndWlfYXRfc2IuaCIKKworI2luY2x1ZGUgPFgxMS9YbXUvRHJhd2luZy5oPgorCisvKiBQcml2YXRlIGRlZmluaXRpb25zLiAqLworCitzdGF0aWMgY2hhciBkZWZhdWx0VHJhbnNsYXRpb25zW10gPQorICAgICI8QnRuMURvd24+OiBOb3RpZnlTY3JvbGwoKVxuXAorICAgICA8QnRuMkRvd24+OiBNb3ZlVGh1bWIoKSBOb3RpZnlUaHVtYigpXG5cCisgICAgIDxCdG4zRG93bj46IE5vdGlmeVNjcm9sbCgpXG5cCisgICAgIDxCdG40RG93bj46IFNjcm9sbE9uZUxpbmVVcCgpXG5cCisgICAgIFNoaWZ0PEJ0bjREb3duPjogU2Nyb2xsUGFnZVVwKClcblwKKyAgICAgPEJ0bjVEb3duPjogU2Nyb2xsT25lTGluZURvd24oKVxuXAorICAgICBTaGlmdDxCdG41RG93bj46IFNjcm9sbFBhZ2VEb3duKClcblwKKyAgICAgPEJ0bjFNb3Rpb24+OiBIYW5kbGVUaHVtYigpXG5cCisgICAgIDxCdG4zTW90aW9uPjogSGFuZGxlVGh1bWIoKVxuXAorICAgICA8QnRuMk1vdGlvbj46IE1vdmVUaHVtYigpIE5vdGlmeVRodW1iKClcblwKKyAgICAgPEJ0blVwPjogRW5kU2Nyb2xsKCkiOworCitzdGF0aWMgZmxvYXQgZmxvYXRaZXJvID0gMC4wOworCisjZGVmaW5lIE9mZnNldChmaWVsZCkgWHRPZmZzZXRPZihTY3JvbGxiYXJSZWMsIGZpZWxkKQorCitzdGF0aWMgWHRSZXNvdXJjZSByZXNvdXJjZXNbXSA9Cit7CisgIHtYdE5sZW5ndGgsIFh0Q0xlbmd0aCwgWHRSRGltZW5zaW9uLCBzaXplb2YoRGltZW5zaW9uKSwKKyAgICAgICBPZmZzZXQoc2Nyb2xsYmFyLmxlbmd0aCksIFh0UkltbWVkaWF0ZSwgKFh0UG9pbnRlcikgMX0sCisgIHtYdE50aGlja25lc3MsIFh0Q1RoaWNrbmVzcywgWHRSRGltZW5zaW9uLCBzaXplb2YoRGltZW5zaW9uKSwKKyAgICAgICBPZmZzZXQoc2Nyb2xsYmFyLnRoaWNrbmVzcyksIFh0UkltbWVkaWF0ZSwgKFh0UG9pbnRlcikgMTR9LAorICB7WHROb3JpZW50YXRpb24sIFh0Q09yaWVudGF0aW9uLCBYdFJPcmllbnRhdGlvbiwgc2l6ZW9mKFh0T3JpZW50YXRpb24pLAorICAgICAgT2Zmc2V0KHNjcm9sbGJhci5vcmllbnRhdGlvbiksIFh0UkltbWVkaWF0ZSwgKFh0UG9pbnRlcikgWHRvcmllbnRWZXJ0aWNhbH0sCisgIHtYdE5zY3JvbGxQcm9jLCBYdENDYWxsYmFjaywgWHRSQ2FsbGJhY2ssIHNpemVvZihYdFBvaW50ZXIpLAorICAgICAgIE9mZnNldChzY3JvbGxiYXIuc2Nyb2xsUHJvYyksIFh0UkNhbGxiYWNrLCBOVUxMfSwKKyAge1h0TnRodW1iUHJvYywgWHRDQ2FsbGJhY2ssIFh0UkNhbGxiYWNrLCBzaXplb2YoWHRQb2ludGVyKSwKKyAgICAgICBPZmZzZXQoc2Nyb2xsYmFyLnRodW1iUHJvYyksIFh0UkNhbGxiYWNrLCBOVUxMfSwKKyAge1h0Tmp1bXBQcm9jLCBYdENDYWxsYmFjaywgWHRSQ2FsbGJhY2ssIHNpemVvZihYdFBvaW50ZXIpLAorICAgICAgIE9mZnNldChzY3JvbGxiYXIuanVtcFByb2MpLCBYdFJDYWxsYmFjaywgTlVMTH0sCisgIHtYdE50aHVtYiwgWHRDVGh1bWIsIFh0UkJpdG1hcCwgc2l6ZW9mKFBpeG1hcCksCisgICAgICAgT2Zmc2V0KHNjcm9sbGJhci50aHVtYiksIFh0UkltbWVkaWF0ZSwgKFh0UG9pbnRlcikgWHRVbnNwZWNpZmllZFBpeG1hcH0sCisgIHtYdE5mb3JlZ3JvdW5kLCBYdENGb3JlZ3JvdW5kLCBYdFJQaXhlbCwgc2l6ZW9mKFBpeGVsKSwKKyAgICAgICBPZmZzZXQoc2Nyb2xsYmFyLmZvcmVncm91bmQpLCBYdFJTdHJpbmcsIFh0RGVmYXVsdEZvcmVncm91bmR9LAorICB7WHROc2hvd24sIFh0Q1Nob3duLCBYdFJGbG9hdCwgc2l6ZW9mKGZsb2F0KSwKKyAgICAgICBPZmZzZXQoc2Nyb2xsYmFyLnNob3duKSwgWHRSRmxvYXQsIChYdFBvaW50ZXIpJmZsb2F0WmVyb30sCisgIHtYdE50b3BPZlRodW1iLCBYdENUb3BPZlRodW1iLCBYdFJGbG9hdCwgc2l6ZW9mKGZsb2F0KSwKKyAgICAgICBPZmZzZXQoc2Nyb2xsYmFyLnRvcCksIFh0UkZsb2F0LCAoWHRQb2ludGVyKSZmbG9hdFplcm99LAorICB7WHRObWF4T2ZUaHVtYiwgWHRDTWF4T2ZUaHVtYiwgWHRSRmxvYXQsIHNpemVvZihmbG9hdCksCisgICAgICAgT2Zmc2V0KHNjcm9sbGJhci5tYXgpLCBYdFJGbG9hdCwgKFh0UG9pbnRlcikmZmxvYXRaZXJvfSwKKyAge1h0Tm1pbmltdW1UaHVtYiwgWHRDTWluaW11bVRodW1iLCBYdFJEaW1lbnNpb24sIHNpemVvZihEaW1lbnNpb24pLAorICAgICAgIE9mZnNldChzY3JvbGxiYXIubWluX3RodW1iKSwgWHRSSW1tZWRpYXRlLCAoWHRQb2ludGVyKSA3fSwKKyAge1h0TnNoYWRvd1dpZHRoLCBYdENTaGFkb3dXaWR0aCwgWHRSRGltZW5zaW9uLCBzaXplb2YoRGltZW5zaW9uKSwKKyAgICAgICBPZmZzZXQoc2Nyb2xsYmFyLnNoYWRvd193aWR0aCksIFh0UkltbWVkaWF0ZSwgKFh0UG9pbnRlcikgMX0sCisgIHtYdE50b3BTaGFkb3dQaXhlbCwgWHRDVG9wU2hhZG93UGl4ZWwsIFh0UlBpeGVsLCBzaXplb2YoUGl4ZWwpLAorICAgICAgIE9mZnNldChzY3JvbGxiYXIudG9wX3NoYWRvd19waXhlbCksIFh0UlN0cmluZywgWHREZWZhdWx0QmFja2dyb3VuZH0sCisgIHtYdE5ib3R0b21TaGFkb3dQaXhlbCwgWHRDQm90dG9tU2hhZG93UGl4ZWwsIFh0UlBpeGVsLCBzaXplb2YoUGl4ZWwpLAorICAgICAgIE9mZnNldChzY3JvbGxiYXIuYm90X3NoYWRvd19waXhlbCksIFh0UlN0cmluZywgWHREZWZhdWx0Rm9yZWdyb3VuZH0sCisgIHtYdE5saW1pdFRodW1iLCBYdENMaW1pdFRodW1iLCBYdFJCb29sLCBzaXplb2YoQm9vbCksCisgICAgICAgT2Zmc2V0KHNjcm9sbGJhci5saW1pdF90aHVtYiksIFh0UkltbWVkaWF0ZSwgKFh0UG9pbnRlcikwfQorfTsKKyN1bmRlZiBPZmZzZXQKKworc3RhdGljIHZvaWQgQ2xhc3NJbml0aWFsaXplIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgSW5pdGlhbGl6ZSBfX0FSR1MoKFdpZGdldCwgV2lkZ2V0LCBBcmdMaXN0LCBDYXJkaW5hbCAqKSk7CitzdGF0aWMgdm9pZCBEZXN0cm95IF9fQVJHUygoV2lkZ2V0KSk7CitzdGF0aWMgdm9pZCBSZWFsaXplIF9fQVJHUygoV2lkZ2V0LCBNYXNrICosIFhTZXRXaW5kb3dBdHRyaWJ1dGVzICopKTsKK3N0YXRpYyB2b2lkIFJlc2l6ZSBfX0FSR1MoKFdpZGdldCkpOworc3RhdGljIHZvaWQgUmVkaXNwbGF5IF9fQVJHUygoV2lkZ2V0LCBYRXZlbnQgKiwgUmVnaW9uKSk7CitzdGF0aWMgQm9vbGVhbiBTZXRWYWx1ZXMgX19BUkdTKChXaWRnZXQsIFdpZGdldCwgV2lkZ2V0LCBBcmdMaXN0LCBDYXJkaW5hbCAqKSk7CisKK3N0YXRpYyB2b2lkIEhhbmRsZVRodW1iIF9fQVJHUygoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopKTsKK3N0YXRpYyB2b2lkIE1vdmVUaHVtYiBfX0FSR1MoKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKSk7CitzdGF0aWMgdm9pZCBOb3RpZnlUaHVtYiBfX0FSR1MoKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKSk7CitzdGF0aWMgdm9pZCBOb3RpZnlTY3JvbGwgX19BUkdTKChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKikpOworc3RhdGljIHZvaWQgRW5kU2Nyb2xsIF9fQVJHUygoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopKTsKK3N0YXRpYyB2b2lkIFNjcm9sbE9uZUxpbmVVcCBfX0FSR1MoKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKSk7CitzdGF0aWMgdm9pZCBTY3JvbGxPbmVMaW5lRG93biBfX0FSR1MoKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKSk7CitzdGF0aWMgdm9pZCBTY3JvbGxQYWdlVXAgX19BUkdTKChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKikpOworc3RhdGljIHZvaWQgU2Nyb2xsUGFnZURvd24gX19BUkdTKChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKikpOworc3RhdGljIHZvaWQgU2Nyb2xsU29tZSBfX0FSR1MoKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBpbnQgY2FsbF9kYXRhKSk7CitzdGF0aWMgdm9pZCBfWGF3M2REcmF3U2hhZG93cyBfX0FSR1MoKFdpZGdldCwgWEV2ZW50ICosIFJlZ2lvbiwgaW50KSk7CitzdGF0aWMgdm9pZCBBbGxvY1RvcFNoYWRvd0dDIF9fQVJHUygoV2lkZ2V0KSk7CitzdGF0aWMgdm9pZCBBbGxvY0JvdFNoYWRvd0dDIF9fQVJHUygoV2lkZ2V0KSk7CisKK3N0YXRpYyBYdEFjdGlvbnNSZWMgYWN0aW9uc1tdID0KK3sKKyAgICB7IkhhbmRsZVRodW1iIiwJSGFuZGxlVGh1bWJ9LAorICAgIHsiTW92ZVRodW1iIiwJTW92ZVRodW1ifSwKKyAgICB7Ik5vdGlmeVRodW1iIiwJTm90aWZ5VGh1bWJ9LAorICAgIHsiTm90aWZ5U2Nyb2xsIiwJTm90aWZ5U2Nyb2xsfSwKKyAgICB7IkVuZFNjcm9sbCIsCUVuZFNjcm9sbH0sCisgICAgeyJTY3JvbGxPbmVMaW5lVXAiLCBTY3JvbGxPbmVMaW5lVXB9LAorICAgIHsiU2Nyb2xsT25lTGluZURvd24iLCBTY3JvbGxPbmVMaW5lRG93bn0sCisgICAgeyJTY3JvbGxQYWdlVXAiLAlTY3JvbGxQYWdlVXB9LAorICAgIHsiU2Nyb2xsUGFnZURvd24iLAlTY3JvbGxQYWdlRG93bn0KK307CisKKworU2Nyb2xsYmFyQ2xhc3NSZWMgdmltX3Njcm9sbGJhckNsYXNzUmVjID0KK3sKKyAgeyAvKiBjb3JlIGZpZWxkcyAqLworICAgIC8qIHN1cGVyY2xhc3MJKi8gIChXaWRnZXRDbGFzcykgJnNpbXBsZUNsYXNzUmVjLAorICAgIC8qIGNsYXNzX25hbWUJKi8gICJTY3JvbGxiYXIiLAorICAgIC8qIHNpemUJCSovICBzaXplb2YoU2Nyb2xsYmFyUmVjKSwKKyAgICAvKiBjbGFzc19pbml0aWFsaXplCSovICBDbGFzc0luaXRpYWxpemUsCisgICAgLyogY2xhc3NfcGFydF9pbml0CSovICBOVUxMLAorICAgIC8qIGNsYXNzX2luaXRlZAkqLyAgRkFMU0UsCisgICAgLyogaW5pdGlhbGl6ZQkqLyAgSW5pdGlhbGl6ZSwKKyAgICAvKiBpbml0aWFsaXplX2hvb2sJKi8gIE5VTEwsCisgICAgLyogcmVhbGl6ZQkJKi8gIFJlYWxpemUsCisgICAgLyogYWN0aW9ucwkJKi8gIGFjdGlvbnMsCisgICAgLyogbnVtX2FjdGlvbnMJKi8gIFh0TnVtYmVyKGFjdGlvbnMpLAorICAgIC8qIHJlc291cmNlcwkqLyAgcmVzb3VyY2VzLAorICAgIC8qIG51bV9yZXNvdXJjZXMJKi8gIFh0TnVtYmVyKHJlc291cmNlcyksCisgICAgLyogeHJtX2NsYXNzCSovICBOVUxMUVVBUkssCisgICAgLyogY29tcHJlc3NfbW90aW9uCSovICBUUlVFLAorICAgIC8qIGNvbXByZXNzX2V4cG9zdXJlKi8gIFRSVUUsCisgICAgLyogY29tcHJlc3NfZW50ZXJsZWF2ZSovCVRSVUUsCisgICAgLyogdmlzaWJsZV9pbnRlcmVzdCAqLyAgRkFMU0UsCisgICAgLyogZGVzdHJveQkJKi8gIERlc3Ryb3ksCisgICAgLyogcmVzaXplCQkqLyAgUmVzaXplLAorICAgIC8qIGV4cG9zZQkJKi8gIFJlZGlzcGxheSwKKyAgICAvKiBzZXRfdmFsdWVzCSovICBTZXRWYWx1ZXMsCisgICAgLyogc2V0X3ZhbHVlc19ob29rCSovICBOVUxMLAorICAgIC8qIHNldF92YWx1ZXNfYWxtb3N0ICovIFh0SW5oZXJpdFNldFZhbHVlc0FsbW9zdCwKKyAgICAvKiBnZXRfdmFsdWVzX2hvb2sJKi8gIE5VTEwsCisgICAgLyogYWNjZXB0X2ZvY3VzCSovICBOVUxMLAorICAgIC8qIHZlcnNpb24JCSovICBYdFZlcnNpb24sCisgICAgLyogY2FsbGJhY2tfcHJpdmF0ZSAqLyAgTlVMTCwKKyAgICAvKiB0bV90YWJsZQkJKi8gIGRlZmF1bHRUcmFuc2xhdGlvbnMsCisgICAgLyogcXVlcnlfZ2VvbWV0cnkJKi8gIFh0SW5oZXJpdFF1ZXJ5R2VvbWV0cnksCisgICAgLyogZGlzcGxheV9hY2NlbGVyYXRvciovCVh0SW5oZXJpdERpc3BsYXlBY2NlbGVyYXRvciwKKyAgICAvKiBleHRlbnNpb24JKi8gIE5VTEwKKyAgfSwKKyAgeyAvKiBzaW1wbGUgZmllbGRzICovCisgICAgLyogY2hhbmdlX3NlbnNpdGl2ZQkqLyAgWHRJbmhlcml0Q2hhbmdlU2Vuc2l0aXZlCisgIH0sCisgIHsgLyogc2Nyb2xsYmFyIGZpZWxkcyAqLworICAgIC8qIGlnbm9yZQkgICAgKi8JMAorICB9Cit9OworCitXaWRnZXRDbGFzcyB2aW1fc2Nyb2xsYmFyV2lkZ2V0Q2xhc3MgPSAoV2lkZ2V0Q2xhc3MpJnZpbV9zY3JvbGxiYXJDbGFzc1JlYzsKKworI2RlZmluZSBOb0J1dHRvbiAtMQorI2RlZmluZSBQSUNLTEVOR1RIKHdpZGdldCwgeCwgeSkgXAorICAgICgod2lkZ2V0LT5zY3JvbGxiYXIub3JpZW50YXRpb24gPT0gWHRvcmllbnRIb3Jpem9udGFsKSA/ICh4KSA6ICh5KSkKKyNkZWZpbmUgQVRfTUlOKHgseSkgICAgKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKKyNkZWZpbmUgQVRfTUFYKHgseSkgICAgKCh4KSA+ICh5KSA/ICh4KSA6ICh5KSkKKworI2RlZmluZSBMSU5FX0RFTEFZCTMwMAorI2RlZmluZSBQQUdFX0RFTEFZCTMwMAorI2RlZmluZSBMSU5FX1JFUEVBVAkgNTAKKyNkZWZpbmUgUEFHRV9SRVBFQVQJMjUwCisKKyAgICBzdGF0aWMgdm9pZAorQ2xhc3NJbml0aWFsaXplKCkKK3sKKyAgICBYYXdJbml0aWFsaXplV2lkZ2V0U2V0KCk7CisgICAgWHRBZGRDb252ZXJ0ZXIoIFh0UlN0cmluZywgWHRST3JpZW50YXRpb24sIFhtdUN2dFN0cmluZ1RvT3JpZW50YXRpb24sCisJICAgIChYdENvbnZlcnRBcmdMaXN0KU5VTEwsIChDYXJkaW5hbCkwICk7Cit9CisKKyNkZWZpbmUgTUFSR0lOKHNidykgKHNidyktPnNjcm9sbGJhci50aGlja25lc3MgKyAoc2J3KS0+c2Nyb2xsYmFyLnNoYWRvd193aWR0aAorCisgICAgc3RhdGljIHZvaWQKK0ZpbGxBcmVhKHNidywgdG9wLCBib3R0b20sIGZpbGwsIGRyYXdfc2hhZG93KQorICAgIFNjcm9sbGJhcldpZGdldAlzYnc7CisgICAgUG9zaXRpb24JCXRvcCwgYm90dG9tOworICAgIGludAkJCWZpbGw7CisgICAgaW50CQkJZHJhd19zaGFkb3c7Cit7CisgICAgaW50IHRsZW4gPSBib3R0b20gLSB0b3A7CS8qIGxlbmd0aCBvZiB0aHVtYiBpbiBwaXhlbHMgKi8KKyAgICBpbnQgc3csIG1hcmdpbiwgZmxvb3I7CisgICAgaW50IGx4LCBseSwgbHcsIGxoOworCisgICAgaWYgKGJvdHRvbSA8PSAwIHx8IGJvdHRvbSA8PSB0b3ApCisJcmV0dXJuOworICAgIGlmICgoc3cgPSBzYnctPnNjcm9sbGJhci5zaGFkb3dfd2lkdGgpIDwgMCkKKwlzdyA9IDA7CisgICAgbWFyZ2luID0gTUFSR0lOIChzYncpOworICAgIGZsb29yID0gc2J3LT5zY3JvbGxiYXIubGVuZ3RoIC0gbWFyZ2luICsgMjsKKworICAgIGlmIChzYnctPnNjcm9sbGJhci5vcmllbnRhdGlvbiA9PSBYdG9yaWVudEhvcml6b250YWwpCisgICAgeworCWx4ID0gKCh0b3AgPCBtYXJnaW4pID8gbWFyZ2luIDogdG9wKTsKKwlseSA9IHN3OworCWx3ID0gKCgodG9wICsgdGxlbikgPiBmbG9vcikgPyBmbG9vciAtIHRvcCA6IHRsZW4pOworCWxoID0gc2J3LT5jb3JlLmhlaWdodCAtIDIgKiBzdzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlseCA9IHN3OworCWx5ID0gKCh0b3AgPCBtYXJnaW4pID8gbWFyZ2luIDogdG9wKTsKKwlsdyA9IHNidy0+Y29yZS53aWR0aCAtIDIgKiBzdzsKKwlsaCA9ICgoKHRvcCArIHRsZW4pID4gZmxvb3IpID8gZmxvb3IgLSB0b3AgOiB0bGVuKTsKKyAgICB9CisgICAgaWYgKGxoIDw9IDAgfHwgbHcgPD0gMCkKKwlyZXR1cm47CisKKyAgICBpZiAoZHJhd19zaGFkb3cpCisgICAgeworCWlmICghKHNidy0+c2Nyb2xsYmFyLm9yaWVudGF0aW9uID09IFh0b3JpZW50SG9yaXpvbnRhbCkpCisJeworCSAgICAvKiBUb3AgYm9yZGVyICovCisJICAgIFhEcmF3TGluZSAoWHREaXNwbGF5ICgoV2lkZ2V0KSBzYncpLCBYdFdpbmRvdyAoKFdpZGdldCkgc2J3KSwKKwkJICAgIHNidy0+c2Nyb2xsYmFyLnRvcF9zaGFkb3dfR0MsCisJCSAgICBseCwgbHksIGx4ICsgbHcgLSAxLCBseSk7CisKKwkgICAgLyogQm90dG9tIGJvcmRlciAqLworCSAgICBYRHJhd0xpbmUgKFh0RGlzcGxheSAoKFdpZGdldCkgc2J3KSwgWHRXaW5kb3cgKChXaWRnZXQpIHNidyksCisJCSAgICBzYnctPnNjcm9sbGJhci5ib3Rfc2hhZG93X0dDLAorCQkgICAgbHgsIGx5ICsgbGggLSAxLCBseCArIGx3IC0gMSwgbHkgKyBsaCAtIDEpOworCX0KKwllbHNlCisJeworCSAgICAvKiBMZWZ0IGJvcmRlciAqLworCSAgICBYRHJhd0xpbmUgKFh0RGlzcGxheSAoKFdpZGdldCkgc2J3KSwgWHRXaW5kb3cgKChXaWRnZXQpIHNidyksCisJCSAgICBzYnctPnNjcm9sbGJhci50b3Bfc2hhZG93X0dDLAorCQkgICAgbHgsIGx5LCBseCwgbHkgKyBsaCAtIDEpOworCisJICAgIC8qIFJpZ2h0IGJvcmRlciAqLworCSAgICBYRHJhd0xpbmUgKFh0RGlzcGxheSAoKFdpZGdldCkgc2J3KSwgWHRXaW5kb3cgKChXaWRnZXQpIHNidyksCisJCSAgICBzYnctPnNjcm9sbGJhci5ib3Rfc2hhZG93X0dDLAorCQkgICAgbHggKyBsdyAtIDEsIGx5LCBseCArIGx3IC0gMSwgbHkgKyBsaCAtIDEpOworCX0KKwlyZXR1cm47CisgICAgfQorCisgICAgaWYgKGZpbGwpCisgICAgeworCVhGaWxsUmVjdGFuZ2xlKFh0RGlzcGxheSgoV2lkZ2V0KSBzYncpLCBYdFdpbmRvdygoV2lkZ2V0KSBzYncpLAorCQlzYnctPnNjcm9sbGJhci5nYywKKwkJbHgsIGx5LCAodW5zaWduZWQgaW50KSBsdywgKHVuc2lnbmVkIGludCkgbGgpOworCisJaWYgKCEoc2J3LT5zY3JvbGxiYXIub3JpZW50YXRpb24gPT0gWHRvcmllbnRIb3Jpem9udGFsKSkKKwl7CisJICAgIC8qIExlZnQgYm9yZGVyICovCisJICAgIFhEcmF3TGluZShYdERpc3BsYXkgKChXaWRnZXQpIHNidyksIFh0V2luZG93ICgoV2lkZ2V0KSBzYncpLAorCQkgICAgc2J3LT5zY3JvbGxiYXIudG9wX3NoYWRvd19HQywKKwkJICAgIGx4LCBseSwgbHgsIGx5ICsgbGggLSAxKTsKKworCSAgICAvKiBSaWdodCBib3JkZXIgKi8KKwkgICAgWERyYXdMaW5lKFh0RGlzcGxheSAoKFdpZGdldCkgc2J3KSwgWHRXaW5kb3cgKChXaWRnZXQpIHNidyksCisJCSAgICBzYnctPnNjcm9sbGJhci5ib3Rfc2hhZG93X0dDLAorCQkgICAgbHggKyBsdyAtIDEsIGx5LCBseCArIGx3IC0gMSwgbHkgKyBsaCAtIDEpOworCX0KKwllbHNlCisJeworCSAgICAvKiBUb3AgYm9yZGVyICovCisJICAgIFhEcmF3TGluZShYdERpc3BsYXkgKChXaWRnZXQpIHNidyksIFh0V2luZG93ICgoV2lkZ2V0KSBzYncpLAorCQkgICAgc2J3LT5zY3JvbGxiYXIudG9wX3NoYWRvd19HQywKKwkJICAgIGx4LCBseSwgbHggKyBsdyAtIDEsIGx5KTsKKworCSAgICAvKiBCb3R0b20gYm9yZGVyICovCisJICAgIFhEcmF3TGluZShYdERpc3BsYXkgKChXaWRnZXQpIHNidyksIFh0V2luZG93ICgoV2lkZ2V0KSBzYncpLAorCQkgICAgc2J3LT5zY3JvbGxiYXIuYm90X3NoYWRvd19HQywKKwkJICAgIGx4LCBseSArIGxoIC0gMSwgbHggKyBsdyAtIDEsIGx5ICsgbGggLSAxKTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJWENsZWFyQXJlYShYdERpc3BsYXkoKFdpZGdldCkgc2J3KSwgWHRXaW5kb3coKFdpZGdldCkgc2J3KSwKKwkJbHgsIGx5LCAodW5zaWduZWQgaW50KSBsdywgKHVuc2lnbmVkIGludCkgbGgsIEZBTFNFKTsKKyAgICB9Cit9CisKKy8qIFBhaW50IHRoZSB0aHVtYiBpbiB0aGUgYXJlYSBzcGVjaWZpZWQgYnkgc2J3LT50b3AgYW5kCisgICBzYnctPnNob3duLglUaGUgb2xkIGFyZWEgaXMgZXJhc2VkLiAgVGhlIHBhaW50aW5nIGFuZAorICAgZXJhc2luZyBpcyBkb25lIGNsZXZlcmx5IHNvIHRoYXQgbm8gZmxpY2tlcmluZyB3aWxsIG9jY3VyLgorICovCisKKyAgICBzdGF0aWMgdm9pZAorUGFpbnRUaHVtYihzYncpCisgICAgU2Nyb2xsYmFyV2lkZ2V0IHNidzsKK3sKKyAgICBQb3NpdGlvbgkgICAgb2xkdG9wLCBvbGRib3QsIG5ld3RvcCwgbmV3Ym90OworICAgIERpbWVuc2lvbgkgICAgbWFyZ2luLCB0emw7CisKKyAgICBtYXJnaW4gPSBNQVJHSU4gKHNidyk7CisgICAgdHpsID0gc2J3LT5zY3JvbGxiYXIubGVuZ3RoIC0gMiAqIG1hcmdpbjsKKyAgICBuZXd0b3AgPSBtYXJnaW4gKyAoaW50KSh0emwgKiBzYnctPnNjcm9sbGJhci50b3ApOworICAgIG5ld2JvdCA9IG5ld3RvcCArIChpbnQpKHR6bCAqIHNidy0+c2Nyb2xsYmFyLnNob3duKSArIDE7CisgICAgaWYgKG5ld2JvdCA8IG5ld3RvcCArIChpbnQpc2J3LT5zY3JvbGxiYXIubWluX3RodW1iKQorCW5ld2JvdCA9IG5ld3RvcCArIHNidy0+c2Nyb2xsYmFyLm1pbl90aHVtYjsKKworICAgIG9sZHRvcCA9IHNidy0+c2Nyb2xsYmFyLnRvcExvYzsKKyAgICBvbGRib3QgPSBvbGR0b3AgKyBzYnctPnNjcm9sbGJhci5zaG93bkxlbmd0aDsKKyAgICBzYnctPnNjcm9sbGJhci50b3BMb2MgPSBuZXd0b3A7CisgICAgc2J3LT5zY3JvbGxiYXIuc2hvd25MZW5ndGggPSBuZXdib3QgLSBuZXd0b3A7CisgICAgaWYgKFh0SXNSZWFsaXplZCAoKFdpZGdldCkgc2J3KSkKKyAgICB7CisJaWYgKG5ld3RvcCA8IG9sZHRvcCkKKwkgICAgRmlsbEFyZWEoc2J3LCBuZXd0b3AsIEFUX01JTihuZXdib3QsCW9sZHRvcCsxKSwxLDApOworCWlmIChuZXd0b3AgPiBvbGR0b3ApCisJICAgIEZpbGxBcmVhKHNidywgb2xkdG9wLCBBVF9NSU4obmV3dG9wLAlvbGRib3QJKSwwLDApOworCWlmIChuZXdib3QgPCBvbGRib3QpCisJICAgIEZpbGxBcmVhKHNidywgQVRfTUFYKG5ld2JvdCwgb2xkdG9wKSwJb2xkYm90LCAgIDAsMCk7CisJaWYgKG5ld2JvdCA+IG9sZGJvdCkKKwkgICAgRmlsbEFyZWEoc2J3LCBBVF9NQVgobmV3dG9wLCBvbGRib3QtMSksIG5ld2JvdCwgIDEsMCk7CisKKwkvKiBPbmx5IGRyYXcgdGhlIG1pc3Npbmcgc2hhZG93cyAqLworCUZpbGxBcmVhKHNidywgbmV3dG9wLCBuZXdib3QsIDAsIDEpOworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitQYWludEFycm93cyhzYncpCisgICAgU2Nyb2xsYmFyV2lkZ2V0IHNidzsKK3sKKyAgICBYUG9pbnQJcG9pbnRbNl07CisgICAgRGltZW5zaW9uCXRoaWNrbmVzcyA9IHNidy0+c2Nyb2xsYmFyLnRoaWNrbmVzcyAtIDE7CisgICAgRGltZW5zaW9uCXNpemU7CisgICAgRGltZW5zaW9uCW9mZjsKKworICAgIGlmIChYdElzUmVhbGl6ZWQoKFdpZGdldCkgc2J3KSkKKyAgICB7CisJaWYgKChpbnQpdGhpY2tuZXNzICogMiA+IChpbnQpc2J3LT5zY3JvbGxiYXIubGVuZ3RoKQorCXsKKwkgICAgc2l6ZSA9IHNidy0+c2Nyb2xsYmFyLmxlbmd0aCAvIDI7CisJICAgIG9mZiA9IChpbnQpKHRoaWNrbmVzcyAtIHNpemUpIC8gMjsKKwl9CisJZWxzZQorCXsKKwkgICAgc2l6ZSA9IHRoaWNrbmVzczsKKwkgICAgb2ZmID0gMDsKKwl9CisJcG9pbnRbMF0ueCA9IG9mZiArIHNidy0+c2Nyb2xsYmFyLnNoYWRvd193aWR0aDsKKwlwb2ludFswXS55ID0gc2l6ZTsKKwlwb2ludFsxXS54ID0gdGhpY2tuZXNzIC0gb2ZmIC0gc2J3LT5zY3JvbGxiYXIuc2hhZG93X3dpZHRoOworCXBvaW50WzFdLnkgPSBzaXplOworCXBvaW50WzJdLnggPSB0aGlja25lc3MgLyAyOworCXBvaW50WzJdLnkgPSBzYnctPnNjcm9sbGJhci5zaGFkb3dfd2lkdGg7CisKKwlwb2ludFszXS54ID0gb2ZmICsgc2J3LT5zY3JvbGxiYXIuc2hhZG93X3dpZHRoOworCXBvaW50WzNdLnkgPSBzYnctPnNjcm9sbGJhci5sZW5ndGggLSBzaXplOworCXBvaW50WzRdLnggPSB0aGlja25lc3MgLSBvZmYgLSBzYnctPnNjcm9sbGJhci5zaGFkb3dfd2lkdGg7CisJcG9pbnRbNF0ueSA9IHNidy0+c2Nyb2xsYmFyLmxlbmd0aCAtIHNpemU7CisJcG9pbnRbNV0ueCA9IHRoaWNrbmVzcyAvIDI7CisJcG9pbnRbNV0ueSA9IHNidy0+c2Nyb2xsYmFyLmxlbmd0aCAtIHNidy0+c2Nyb2xsYmFyLnNoYWRvd193aWR0aCAtIDE7CisKKwkvKiBob3Jpem9udGFsIGFycm93cyByZXF1aXJlIHRoYXQgeCBhbmQgeSBjb29yZGluYXRlcyBiZSBzd2FwcGVkICovCisJaWYgKHNidy0+c2Nyb2xsYmFyLm9yaWVudGF0aW9uID09IFh0b3JpZW50SG9yaXpvbnRhbCkKKwl7CisJICAgIGludCBuOworCSAgICBpbnQgc3dhcDsKKwkgICAgZm9yIChuID0gMDsgbiA8IDY7IG4rKykKKwkgICAgeworCQlzd2FwID0gcG9pbnRbbl0ueDsKKwkJcG9pbnRbbl0ueCA9IHBvaW50W25dLnk7CisJCXBvaW50W25dLnkgPSBzd2FwOworCSAgICB9CisJfQorCS8qIGRyYXcgdGhlIHVwL2xlZnQgYXJyb3cgKi8KKwlYRmlsbFBvbHlnb24gKFh0RGlzcGxheSAoKFdpZGdldCkgc2J3KSwgWHRXaW5kb3cgKChXaWRnZXQpIHNidyksCisJCXNidy0+c2Nyb2xsYmFyLmdjLAorCQlwb2ludCwgMywKKwkJQ29udmV4LCBDb29yZE1vZGVPcmlnaW4pOworCVhEcmF3TGluZXMgKFh0RGlzcGxheSAoKFdpZGdldCkgc2J3KSwgWHRXaW5kb3cgKChXaWRnZXQpIHNidyksCisJCXNidy0+c2Nyb2xsYmFyLmJvdF9zaGFkb3dfR0MsCisJCXBvaW50LCAzLAorCQlDb29yZE1vZGVPcmlnaW4pOworCVhEcmF3TGluZSAoWHREaXNwbGF5ICgoV2lkZ2V0KSBzYncpLCBYdFdpbmRvdyAoKFdpZGdldCkgc2J3KSwKKwkJc2J3LT5zY3JvbGxiYXIudG9wX3NoYWRvd19HQywKKwkJcG9pbnRbMF0ueCwgcG9pbnRbMF0ueSwKKwkJcG9pbnRbMl0ueCwgcG9pbnRbMl0ueSk7CisJLyogZHJhdyB0aGUgZG93bi9yaWdodCBhcnJvdyAqLworCVhGaWxsUG9seWdvbiAoWHREaXNwbGF5ICgoV2lkZ2V0KSBzYncpLCBYdFdpbmRvdyAoKFdpZGdldCkgc2J3KSwKKwkJc2J3LT5zY3JvbGxiYXIuZ2MsCisJCXBvaW50KzMsIDMsCisJCUNvbnZleCwgQ29vcmRNb2RlT3JpZ2luKTsKKwlYRHJhd0xpbmUgKFh0RGlzcGxheSAoKFdpZGdldCkgc2J3KSwgWHRXaW5kb3cgKChXaWRnZXQpIHNidyksCisJCXNidy0+c2Nyb2xsYmFyLnRvcF9zaGFkb3dfR0MsCisJCXBvaW50WzNdLngsIHBvaW50WzNdLnksCisJCXBvaW50WzRdLngsIHBvaW50WzRdLnkpOworCVhEcmF3TGluZSAoWHREaXNwbGF5ICgoV2lkZ2V0KSBzYncpLCBYdFdpbmRvdyAoKFdpZGdldCkgc2J3KSwKKwkJc2J3LT5zY3JvbGxiYXIudG9wX3NoYWRvd19HQywKKwkJcG9pbnRbM10ueCwgcG9pbnRbM10ueSwKKwkJcG9pbnRbNV0ueCwgcG9pbnRbNV0ueSk7CisJWERyYXdMaW5lIChYdERpc3BsYXkgKChXaWRnZXQpIHNidyksIFh0V2luZG93ICgoV2lkZ2V0KSBzYncpLAorCQlzYnctPnNjcm9sbGJhci5ib3Rfc2hhZG93X0dDLAorCQlwb2ludFs0XS54LCBwb2ludFs0XS55LAorCQlwb2ludFs1XS54LCBwb2ludFs1XS55KTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorRGVzdHJveSh3KQorICAgIFdpZGdldCB3OworeworICAgIFNjcm9sbGJhcldpZGdldCBzYncgPSAoU2Nyb2xsYmFyV2lkZ2V0KSB3OworICAgIGlmIChzYnctPnNjcm9sbGJhci50aW1lcl9pZCAhPSAoWHRJbnRlcnZhbElkKSAwKQorCVh0UmVtb3ZlVGltZU91dCAoc2J3LT5zY3JvbGxiYXIudGltZXJfaWQpOworICAgIFh0UmVsZWFzZUdDKHcsIHNidy0+c2Nyb2xsYmFyLmdjKTsKKyAgICBYdFJlbGVhc2VHQyh3LCBzYnctPnNjcm9sbGJhci50b3Bfc2hhZG93X0dDKTsKKyAgICBYdFJlbGVhc2VHQyh3LCBzYnctPnNjcm9sbGJhci5ib3Rfc2hhZG93X0dDKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitDcmVhdGVHQyh3KQorICAgIFdpZGdldCB3OworeworICAgIFNjcm9sbGJhcldpZGdldAlzYncgPSAoU2Nyb2xsYmFyV2lkZ2V0KSB3OworICAgIFhHQ1ZhbHVlcwkJZ2NWYWx1ZXM7CisgICAgWHRHQ01hc2sJCW1hc2s7CisgICAgdW5zaWduZWQgaW50CWRlcHRoID0gMTsKKworICAgIGlmIChzYnctPnNjcm9sbGJhci50aHVtYiA9PSBYdFVuc3BlY2lmaWVkUGl4bWFwKQorICAgIHsKKwlzYnctPnNjcm9sbGJhci50aHVtYiA9IFhtdUNyZWF0ZVN0aXBwbGVkUGl4bWFwIChYdFNjcmVlbih3KSwKKwkJICAgIChQaXhlbCkgMSwgKFBpeGVsKSAwLCBkZXB0aCk7CisgICAgfQorICAgIGVsc2UgaWYgKHNidy0+c2Nyb2xsYmFyLnRodW1iICE9IE5vbmUpCisgICAgeworCVdpbmRvdwkJcm9vdDsKKwlpbnQJCXgsIHk7CisJdW5zaWduZWQgaW50CXdpZHRoLCBoZWlnaHQsIGJ3OworCisJaWYgKFhHZXRHZW9tZXRyeSAoWHREaXNwbGF5KHcpLCBzYnctPnNjcm9sbGJhci50aHVtYiwgJnJvb3QsICZ4LCAmeSwKKwkJJndpZHRoLCAmaGVpZ2h0LCAmYncsICZkZXB0aCkgPT0gMCkKKwkgICAgRU1TRyhfKCJTY3JvbGxiYXIgV2lkZ2V0OiBDb3VsZCBub3QgZ2V0IGdlb21ldHJ5IG9mIHRodW1iIHBpeG1hcC4iKSk7CisgICAgfQorCisgICAgZ2NWYWx1ZXMuZm9yZWdyb3VuZCA9IHNidy0+c2Nyb2xsYmFyLmZvcmVncm91bmQ7CisgICAgZ2NWYWx1ZXMuYmFja2dyb3VuZCA9IHNidy0+Y29yZS5iYWNrZ3JvdW5kX3BpeGVsOworICAgIG1hc2sgPSBHQ0ZvcmVncm91bmQgfCBHQ0JhY2tncm91bmQ7CisKKyAgICBpZiAoc2J3LT5zY3JvbGxiYXIudGh1bWIgIT0gTm9uZSkKKyAgICB7CisJZ2NWYWx1ZXMuZmlsbF9zdHlsZSA9IEZpbGxTb2xpZDsKKwltYXNrIHw9IEdDRmlsbFN0eWxlOworICAgIH0KKyAgICAvKiB0aGUgY3JlYXRpb24gc2hvdWxkIGJlIG5vbi1jYWNoaW5nLCBiZWNhdXNlICovCisgICAgLyogd2Ugbm93IHNldCBhbmQgY2xlYXIgY2xpcCBtYXNrcyBvbiB0aGUgZ2MgcmV0dXJuZWQgKi8KKyAgICBzYnctPnNjcm9sbGJhci5nYyA9IFh0R2V0R0MgKHcsIG1hc2ssICZnY1ZhbHVlcyk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorU2V0RGltZW5zaW9ucyhzYncpCisgICAgU2Nyb2xsYmFyV2lkZ2V0IHNidzsKK3sKKyAgICBpZiAoc2J3LT5zY3JvbGxiYXIub3JpZW50YXRpb24gPT0gWHRvcmllbnRWZXJ0aWNhbCkKKyAgICB7CisJc2J3LT5zY3JvbGxiYXIubGVuZ3RoID0gc2J3LT5jb3JlLmhlaWdodDsKKwlzYnctPnNjcm9sbGJhci50aGlja25lc3MgPSBzYnctPmNvcmUud2lkdGg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJc2J3LT5zY3JvbGxiYXIubGVuZ3RoID0gc2J3LT5jb3JlLndpZHRoOworCXNidy0+c2Nyb2xsYmFyLnRoaWNrbmVzcyA9IHNidy0+Y29yZS5oZWlnaHQ7CisgICAgfQorfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitJbml0aWFsaXplKHJlcXVlc3QsIG5ldywgYXJncywgbnVtX2FyZ3MpCisgICAgV2lkZ2V0CXJlcXVlc3Q7CS8qIHdoYXQgdGhlIGNsaWVudCBhc2tlZCBmb3IgKi8KKyAgICBXaWRnZXQJbmV3OwkJLyogd2hhdCB3ZSdyZSBnb2luZyB0byBnaXZlIGhpbSAqLworICAgIEFyZ0xpc3QJYXJnczsKKyAgICBDYXJkaW5hbAkqbnVtX2FyZ3M7Cit7CisgICAgU2Nyb2xsYmFyV2lkZ2V0IHNidyA9IChTY3JvbGxiYXJXaWRnZXQpIG5ldzsKKworICAgIENyZWF0ZUdDKG5ldyk7CisgICAgQWxsb2NUb3BTaGFkb3dHQyhuZXcpOworICAgIEFsbG9jQm90U2hhZG93R0MobmV3KTsKKworICAgIGlmIChzYnctPmNvcmUud2lkdGggPT0gMCkKKwlzYnctPmNvcmUud2lkdGggPSAoc2J3LT5zY3JvbGxiYXIub3JpZW50YXRpb24gPT0gWHRvcmllbnRWZXJ0aWNhbCkKKwkgICAgPyBzYnctPnNjcm9sbGJhci50aGlja25lc3MgOiBzYnctPnNjcm9sbGJhci5sZW5ndGg7CisKKyAgICBpZiAoc2J3LT5jb3JlLmhlaWdodCA9PSAwKQorCXNidy0+Y29yZS5oZWlnaHQgPSAoc2J3LT5zY3JvbGxiYXIub3JpZW50YXRpb24gPT0gWHRvcmllbnRIb3Jpem9udGFsKQorCSAgICA/IHNidy0+c2Nyb2xsYmFyLnRoaWNrbmVzcyA6IHNidy0+c2Nyb2xsYmFyLmxlbmd0aDsKKworICAgIFNldERpbWVuc2lvbnMoc2J3KTsKKyAgICBzYnctPnNjcm9sbGJhci5zY3JvbGxfbW9kZSA9IFNNT0RFX05PTkU7CisgICAgc2J3LT5zY3JvbGxiYXIudGltZXJfaWQgPSAoWHRJbnRlcnZhbElkKTA7CisgICAgc2J3LT5zY3JvbGxiYXIudG9wTG9jID0gMDsKKyAgICBzYnctPnNjcm9sbGJhci5zaG93bkxlbmd0aCA9IHNidy0+c2Nyb2xsYmFyLm1pbl90aHVtYjsKK30KKworICAgIHN0YXRpYyB2b2lkCitSZWFsaXplKHcsIHZhbHVlTWFzaywgYXR0cmlidXRlcykKKyAgICBXaWRnZXQgdzsKKyAgICBNYXNrICp2YWx1ZU1hc2s7CisgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgKmF0dHJpYnV0ZXM7Cit7CisgICAgLyogVGhlIFNpbXBsZSB3aWRnZXQgYWN0dWFsbHkgc3R1ZmZzIHRoZSB2YWx1ZSBpbiB0aGUgdmFsdWVtYXNrLiAqLworICAgICgqdmltX3Njcm9sbGJhcldpZGdldENsYXNzLT5jb3JlX2NsYXNzLnN1cGVyY2xhc3MtPmNvcmVfY2xhc3MucmVhbGl6ZSkKKwkodywgdmFsdWVNYXNrLCBhdHRyaWJ1dGVzKTsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgQm9vbGVhbgorU2V0VmFsdWVzKGN1cnJlbnQsIHJlcXVlc3QsIGRlc2lyZWQsIGFyZ3MsIG51bV9hcmdzKQorICAgIFdpZGdldCAgY3VycmVudCwJICAgIC8qIHdoYXQgSSBhbSAqLworCSAgICByZXF1ZXN0LAkgICAgLyogd2hhdCBoZSB3YW50cyBtZSB0byBiZSAqLworCSAgICBkZXNpcmVkOwkgICAgLyogd2hhdCBJIHdpbGwgYmVjb21lICovCisgICAgQXJnTGlzdCBhcmdzOworICAgIENhcmRpbmFsICpudW1fYXJnczsKK3sKKyAgICBTY3JvbGxiYXJXaWRnZXQJc2J3ID0gKFNjcm9sbGJhcldpZGdldCkgY3VycmVudDsKKyAgICBTY3JvbGxiYXJXaWRnZXQJZHNidyA9IChTY3JvbGxiYXJXaWRnZXQpIGRlc2lyZWQ7CisgICAgQm9vbGVhbgkJcmVkcmF3ID0gRkFMU0U7CisKKy8qCisgKiBJZiB0aGVzZSB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UgaWdub3JlIHRoZW0uLi4KKyAqLworICAgIGlmIChkc2J3LT5zY3JvbGxiYXIudG9wIDwgMC4wIHx8IGRzYnctPnNjcm9sbGJhci50b3AgPiAxLjApCisJZHNidy0+c2Nyb2xsYmFyLnRvcCA9IHNidy0+c2Nyb2xsYmFyLnRvcDsKKworICAgIGlmIChkc2J3LT5zY3JvbGxiYXIuc2hvd24gPCAwLjAgfHwgZHNidy0+c2Nyb2xsYmFyLnNob3duID4gMS4wKQorCWRzYnctPnNjcm9sbGJhci5zaG93biA9IHNidy0+c2Nyb2xsYmFyLnNob3duOworCisvKgorICogQ2hhbmdlIGNvbG9ycyBhbmQgc3R1ZmYuLi4KKyAqLworICAgIGlmIChYdElzUmVhbGl6ZWQoZGVzaXJlZCkpCisgICAgeworCWlmIChzYnctPnNjcm9sbGJhci5mb3JlZ3JvdW5kICE9IGRzYnctPnNjcm9sbGJhci5mb3JlZ3JvdW5kIHx8CisJCXNidy0+Y29yZS5iYWNrZ3JvdW5kX3BpeGVsICE9IGRzYnctPmNvcmUuYmFja2dyb3VuZF9waXhlbCB8fAorCQlzYnctPnNjcm9sbGJhci50aHVtYiAhPSBkc2J3LT5zY3JvbGxiYXIudGh1bWIpCisJeworCSAgICBYdFJlbGVhc2VHQyhkZXNpcmVkLCBzYnctPnNjcm9sbGJhci5nYyk7CisJICAgIENyZWF0ZUdDIChkZXNpcmVkKTsKKwkgICAgcmVkcmF3ID0gVFJVRTsKKwl9CisJaWYgKHNidy0+c2Nyb2xsYmFyLnRvcCAhPSBkc2J3LT5zY3JvbGxiYXIudG9wIHx8CisJCXNidy0+c2Nyb2xsYmFyLnNob3duICE9IGRzYnctPnNjcm9sbGJhci5zaG93bikKKwkgICAgcmVkcmF3ID0gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIHJlZHJhdzsKK30KKworICAgIHN0YXRpYyB2b2lkCitSZXNpemUodykKKyAgICBXaWRnZXQgdzsKK3sKKyAgICAvKiBGb3JnZXRHcmF2aXR5IGhhcyB0YWtlbiBjYXJlIG9mIGJhY2tncm91bmQsIGJ1dCB0aHVtYiBtYXkKKyAgICAgKiBoYXZlIHRvIG1vdmUgYXMgYSByZXN1bHQgb2YgdGhlIG5ldyBzaXplLiAqLworICAgIFNldERpbWVuc2lvbnMgKChTY3JvbGxiYXJXaWRnZXQpIHcpOworICAgIFJlZGlzcGxheSh3LCAoWEV2ZW50KikgTlVMTCwgKFJlZ2lvbilOVUxMKTsKK30KKworCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitSZWRpc3BsYXkodywgZXZlbnQsIHJlZ2lvbikKKyAgICBXaWRnZXQgdzsKKyAgICBYRXZlbnQgKmV2ZW50OworICAgIFJlZ2lvbiByZWdpb247Cit7CisgICAgU2Nyb2xsYmFyV2lkZ2V0IHNidyA9IChTY3JvbGxiYXJXaWRnZXQpIHc7CisgICAgaW50IHgsIHk7CisgICAgdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7CisKKyAgICBfWGF3M2REcmF3U2hhZG93cyh3LCBldmVudCwgcmVnaW9uLCBGQUxTRSk7CisKKyAgICBpZiAoc2J3LT5zY3JvbGxiYXIub3JpZW50YXRpb24gPT0gWHRvcmllbnRIb3Jpem9udGFsKQorICAgIHsKKwl4ID0gc2J3LT5zY3JvbGxiYXIudG9wTG9jOworCXkgPSAxOworCXdpZHRoID0gc2J3LT5zY3JvbGxiYXIuc2hvd25MZW5ndGg7CisJaGVpZ2h0ID0gc2J3LT5jb3JlLmhlaWdodCAtIDI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJeCA9IDE7CisJeSA9IHNidy0+c2Nyb2xsYmFyLnRvcExvYzsKKwl3aWR0aCA9IHNidy0+Y29yZS53aWR0aCAtIDI7CisJaGVpZ2h0ID0gc2J3LT5zY3JvbGxiYXIuc2hvd25MZW5ndGg7CisgICAgfQorICAgIGlmIChyZWdpb24gPT0gTlVMTCB8fAorCSAgICBYUmVjdEluUmVnaW9uIChyZWdpb24sIHgsIHksIHdpZHRoLCBoZWlnaHQpICE9IFJlY3RhbmdsZU91dCkKKyAgICB7CisJLyogRm9yY2VzIGVudGlyZSB0aHVtYiB0byBiZSBwYWludGVkLiAqLworCXNidy0+c2Nyb2xsYmFyLnRvcExvYyA9IC0oc2J3LT5zY3JvbGxiYXIubGVuZ3RoICsgMSk7CisJUGFpbnRUaHVtYiAoc2J3KTsKKyAgICB9CisgICAgLyogd2UnZCBsaWtlIHRvIGJlIHJlZ2lvbiBhd2FyZSBoZXJlISEhISAqLworICAgIFBhaW50QXJyb3dzKHNidyk7Cit9CisKKworICAgIHN0YXRpYyBCb29sZWFuCitDb21wYXJlRXZlbnRzKG9sZEV2ZW50LCBuZXdFdmVudCkKKyAgICBYRXZlbnQgKm9sZEV2ZW50LCAqbmV3RXZlbnQ7Cit7CisjZGVmaW5lIENoZWNrKGZpZWxkKSBpZiAobmV3RXZlbnQtPmZpZWxkICE9IG9sZEV2ZW50LT5maWVsZCkgcmV0dXJuIEZhbHNlOworCisgICAgQ2hlY2soeGFueS5kaXNwbGF5KTsKKyAgICBDaGVjayh4YW55LnR5cGUpOworICAgIENoZWNrKHhhbnkud2luZG93KTsKKworICAgIHN3aXRjaCAobmV3RXZlbnQtPnR5cGUpCisgICAgeworCWNhc2UgTW90aW9uTm90aWZ5OgorCSAgICBDaGVjayh4bW90aW9uLnN0YXRlKTsKKwkgICAgYnJlYWs7CisJY2FzZSBCdXR0b25QcmVzczoKKwljYXNlIEJ1dHRvblJlbGVhc2U6CisJICAgIENoZWNrKHhidXR0b24uc3RhdGUpOworCSAgICBDaGVjayh4YnV0dG9uLmJ1dHRvbik7CisJICAgIGJyZWFrOworCWNhc2UgS2V5UHJlc3M6CisJY2FzZSBLZXlSZWxlYXNlOgorCSAgICBDaGVjayh4a2V5LnN0YXRlKTsKKwkgICAgQ2hlY2soeGtleS5rZXljb2RlKTsKKwkgICAgYnJlYWs7CisJY2FzZSBFbnRlck5vdGlmeToKKwljYXNlIExlYXZlTm90aWZ5OgorCSAgICBDaGVjayh4Y3Jvc3NpbmcubW9kZSk7CisJICAgIENoZWNrKHhjcm9zc2luZy5kZXRhaWwpOworCSAgICBDaGVjayh4Y3Jvc3Npbmcuc3RhdGUpOworCSAgICBicmVhazsKKyAgICB9CisjdW5kZWYgQ2hlY2sKKworICAgIHJldHVybiBUcnVlOworfQorCitzdHJ1Y3QgRXZlbnREYXRhCit7CisgICAgWEV2ZW50ICpvbGRFdmVudDsKKyAgICBpbnQgY291bnQ7Cit9OworCisgICAgc3RhdGljIEJvb2wKK1BlZWtOb3RpZnlFdmVudChkcHksIGV2ZW50LCBhcmdzKQorICAgIERpc3BsYXkgKmRweTsKKyAgICBYRXZlbnQgKmV2ZW50OworICAgIGNoYXIgKmFyZ3M7Cit7CisgICAgc3RydWN0IEV2ZW50RGF0YSAqZXZlbnREYXRhID0gKHN0cnVjdCBFdmVudERhdGEqKWFyZ3M7CisKKyAgICByZXR1cm4gKCgrK2V2ZW50RGF0YS0+Y291bnQgPT0gUUxlbmd0aChkcHkpKSAvKiBzaW5jZSBQZWVrSWYgYmxvY2tzICovCisJfHwgQ29tcGFyZUV2ZW50cyhldmVudCwgZXZlbnREYXRhLT5vbGRFdmVudCkpOworfQorCisKKyAgICBzdGF0aWMgQm9vbGVhbgorTG9va0FoZWFkKHcsIGV2ZW50KQorICAgIFdpZGdldCB3OworICAgIFhFdmVudCAqZXZlbnQ7Cit7CisgICAgWEV2ZW50IG5ld0V2ZW50OworICAgIHN0cnVjdCBFdmVudERhdGEgZXZlbnREYXRhOworCisgICAgaWYgKFFMZW5ndGggKFh0RGlzcGxheSAodykpID09IDApCisJcmV0dXJuIEZhbHNlOworCisgICAgZXZlbnREYXRhLmNvdW50ID0gMDsKKyAgICBldmVudERhdGEub2xkRXZlbnQgPSBldmVudDsKKworICAgIFhQZWVrSWZFdmVudCAoWHREaXNwbGF5ICh3KSwgJm5ld0V2ZW50LCBQZWVrTm90aWZ5RXZlbnQsIChjaGFyKikmZXZlbnREYXRhKTsKKworICAgIHJldHVybiBDb21wYXJlRXZlbnRzIChldmVudCwgJm5ld0V2ZW50KTsKK30KKworCisgICAgc3RhdGljIHZvaWQKK0V4dHJhY3RQb3NpdGlvbihldmVudCwgeCwgeSwgc3RhdGUpCisgICAgWEV2ZW50CSAgICAqZXZlbnQ7CisgICAgUG9zaXRpb24JICAgICp4LCAqeTsJLyogUkVUVVJOICovCisgICAgdW5zaWduZWQgaW50ICAgICpzdGF0ZTsJLyogUkVUVVJOICovCit7CisgICAgc3dpdGNoIChldmVudC0+dHlwZSkKKyAgICB7CisJY2FzZSBNb3Rpb25Ob3RpZnk6CisJICAgICp4ID0gZXZlbnQtPnhtb3Rpb24ueDsKKwkgICAgKnkgPSBldmVudC0+eG1vdGlvbi55OworCSAgICBpZiAoc3RhdGUgIT0gTlVMTCkKKwkJKnN0YXRlID0gZXZlbnQtPnhtb3Rpb24uc3RhdGU7CisJICAgIGJyZWFrOworCWNhc2UgQnV0dG9uUHJlc3M6CisJY2FzZSBCdXR0b25SZWxlYXNlOgorCSAgICAqeCA9IGV2ZW50LT54YnV0dG9uLng7CisJICAgICp5ID0gZXZlbnQtPnhidXR0b24ueTsKKwkgICAgaWYgKHN0YXRlICE9IE5VTEwpCisJCSpzdGF0ZSA9IGV2ZW50LT54YnV0dG9uLnN0YXRlOworCSAgICBicmVhazsKKwljYXNlIEtleVByZXNzOgorCWNhc2UgS2V5UmVsZWFzZToKKwkgICAgKnggPSBldmVudC0+eGtleS54OworCSAgICAqeSA9IGV2ZW50LT54a2V5Lnk7CisJICAgIGlmIChzdGF0ZSAhPSBOVUxMKQorCQkqc3RhdGUgPSBldmVudC0+eGtleS5zdGF0ZTsKKwkgICAgYnJlYWs7CisJY2FzZSBFbnRlck5vdGlmeToKKwljYXNlIExlYXZlTm90aWZ5OgorCSAgICAqeCA9IGV2ZW50LT54Y3Jvc3NpbmcueDsKKwkgICAgKnkgPSBldmVudC0+eGNyb3NzaW5nLnk7CisJICAgIGlmIChzdGF0ZSAhPSBOVUxMKQorCQkqc3RhdGUgPSBldmVudC0+eGNyb3NzaW5nLnN0YXRlOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICAqeCA9IDA7ICp5ID0gMDsKKwkgICAgaWYgKHN0YXRlICE9IE5VTEwpCisJCSpzdGF0ZSA9IDA7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK0hhbmRsZVRodW1iKHcsIGV2ZW50LCBwYXJhbXMsIG51bV9wYXJhbXMpCisgICAgV2lkZ2V0IHc7CisgICAgWEV2ZW50ICpldmVudDsKKyAgICBTdHJpbmcgKnBhcmFtczsKKyAgICBDYXJkaW5hbCAqbnVtX3BhcmFtczsKK3sKKyAgICBQb3NpdGlvbiB4LCB5LCBsb2M7CisgICAgU2Nyb2xsYmFyV2lkZ2V0IHNidyA9IChTY3JvbGxiYXJXaWRnZXQpIHc7CisKKyAgICBFeHRyYWN0UG9zaXRpb24oZXZlbnQsICZ4LCAmeSwgKHVuc2lnbmVkIGludCAqKU5VTEwpOworICAgIGxvYyA9IFBJQ0tMRU5HVEgoc2J3LCB4LCB5KTsKKyAgICAvKiBpZiB0aGUgbW90aW9uIGV2ZW50IHB1dHMgdGhlIHBvaW50ZXIgaW4gdGh1bWIsIGNhbGwgTW92ZSBhbmQgTm90aWZ5ICovCisgICAgLyogYWxzbyBjYWxsIE1vdmUgYW5kIE5vdGlmeSBpZiB3ZSdyZSBhbHJlYWR5IGluIGNvbnRpbnVvdXMgc2Nyb2xsIG1vZGUgKi8KKyAgICBpZiAoc2J3LT5zY3JvbGxiYXIuc2Nyb2xsX21vZGUgPT0gU01PREVfQ09OVCB8fAorCSAgICAobG9jID49IHNidy0+c2Nyb2xsYmFyLnRvcExvYyAmJgorCSAgICAgbG9jIDw9IHNidy0+c2Nyb2xsYmFyLnRvcExvYyArIChpbnQpc2J3LT5zY3JvbGxiYXIuc2hvd25MZW5ndGgpKQorICAgIHsKKwlYdENhbGxBY3Rpb25Qcm9jKHcsICJNb3ZlVGh1bWIiLCBldmVudCwgcGFyYW1zLCAqbnVtX3BhcmFtcyk7CisJWHRDYWxsQWN0aW9uUHJvYyh3LCAiTm90aWZ5VGh1bWIiLCBldmVudCwgcGFyYW1zLCAqbnVtX3BhcmFtcyk7CisgICAgfQorfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitSZXBlYXROb3RpZnkoY2xpZW50X2RhdGEsIGlkcCkKKyAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGE7CisgICAgWHRJbnRlcnZhbElkICppZHA7Cit7CisgICAgU2Nyb2xsYmFyV2lkZ2V0IHNidyA9IChTY3JvbGxiYXJXaWRnZXQpIGNsaWVudF9kYXRhOworICAgIGludAkJICAgIGNhbGxfZGF0YTsKKyAgICBjaGFyCSAgICBtb2RlID0gc2J3LT5zY3JvbGxiYXIuc2Nyb2xsX21vZGU7CisgICAgdW5zaWduZWQgbG9uZyAgIHJlcDsKKworICAgIGlmIChtb2RlID09IFNNT0RFX05PTkUgfHwgbW9kZSA9PSBTTU9ERV9DT05UKQorICAgIHsKKwlzYnctPnNjcm9sbGJhci50aW1lcl9pZCA9IChYdEludGVydmFsSWQpMDsKKwlyZXR1cm47CisgICAgfQorCisgICAgaWYgKG1vZGUgPT0gU01PREVfTElORV9ET1dOIHx8IG1vZGUgPT0gU01PREVfTElORV9VUCkKKyAgICB7CisJY2FsbF9kYXRhID0gT05FX0xJTkVfREFUQTsKKwlyZXAgPSBMSU5FX1JFUEVBVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwljYWxsX2RhdGEgPSBPTkVfUEFHRV9EQVRBOworCXJlcCA9IFBBR0VfUkVQRUFUOworICAgIH0KKworICAgIGlmIChtb2RlID09IFNNT0RFX1BBR0VfVVAgfHwgbW9kZSA9PSBTTU9ERV9MSU5FX1VQKQorCWNhbGxfZGF0YSA9IC1jYWxsX2RhdGE7CisKKyAgICBYdENhbGxDYWxsYmFja3MoKFdpZGdldClzYncsIFh0TnNjcm9sbFByb2MsIChYdFBvaW50ZXIpY2FsbF9kYXRhKTsKKworICAgIHNidy0+c2Nyb2xsYmFyLnRpbWVyX2lkID0KKwlYdEFwcEFkZFRpbWVPdXQoWHRXaWRnZXRUb0FwcGxpY2F0aW9uQ29udGV4dCgoV2lkZ2V0KXNidyksCisJCXJlcCwKKwkJUmVwZWF0Tm90aWZ5LAorCQljbGllbnRfZGF0YSk7Cit9CisKKy8qCisgKiBTYW1lIGFzIGFib3ZlLCBidXQgZm9yIGZsb2F0aW5nIG51bWJlcnMuCisgKi8KKyAgICBzdGF0aWMgZmxvYXQKK0Zsb2F0SW5SYW5nZShudW0sIHNtYWxsLCBiaWcpCisgICAgZmxvYXQgbnVtLCBzbWFsbCwgYmlnOworeworICAgIHJldHVybiAobnVtIDwgc21hbGwpID8gc21hbGwgOiAoKG51bSA+IGJpZykgPyBiaWcgOiBudW0pOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitTY3JvbGxPbmVMaW5lVXAodywgZXZlbnQsIHBhcmFtcywgbnVtX3BhcmFtcykKKyAgICBXaWRnZXQJdzsKKyAgICBYRXZlbnQJKmV2ZW50OworICAgIFN0cmluZwkqcGFyYW1zOworICAgIENhcmRpbmFsCSpudW1fcGFyYW1zOworeworICAgIFNjcm9sbFNvbWUodywgZXZlbnQsIC1PTkVfTElORV9EQVRBKTsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorU2Nyb2xsT25lTGluZURvd24odywgZXZlbnQsIHBhcmFtcywgbnVtX3BhcmFtcykKKyAgICBXaWRnZXQJdzsKKyAgICBYRXZlbnQJKmV2ZW50OworICAgIFN0cmluZwkqcGFyYW1zOworICAgIENhcmRpbmFsCSpudW1fcGFyYW1zOworeworICAgIFNjcm9sbFNvbWUodywgZXZlbnQsIE9ORV9MSU5FX0RBVEEpOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitTY3JvbGxQYWdlRG93bih3LCBldmVudCwgcGFyYW1zLCBudW1fcGFyYW1zKQorICAgIFdpZGdldAl3OworICAgIFhFdmVudAkqZXZlbnQ7CisgICAgU3RyaW5nCSpwYXJhbXM7CisgICAgQ2FyZGluYWwJKm51bV9wYXJhbXM7Cit7CisgICAgU2Nyb2xsU29tZSh3LCBldmVudCwgT05FX1BBR0VfREFUQSk7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK1Njcm9sbFBhZ2VVcCh3LCBldmVudCwgcGFyYW1zLCBudW1fcGFyYW1zKQorICAgIFdpZGdldAl3OworICAgIFhFdmVudAkqZXZlbnQ7CisgICAgU3RyaW5nCSpwYXJhbXM7CisgICAgQ2FyZGluYWwJKm51bV9wYXJhbXM7Cit7CisgICAgU2Nyb2xsU29tZSh3LCBldmVudCwgLU9ORV9QQUdFX0RBVEEpOworfQorCisgICAgc3RhdGljIHZvaWQKK1Njcm9sbFNvbWUodywgZXZlbnQsIGNhbGxfZGF0YSkKKyAgICBXaWRnZXQJdzsKKyAgICBYRXZlbnQJKmV2ZW50OworICAgIGludAkJY2FsbF9kYXRhOworeworICAgIFNjcm9sbGJhcldpZGdldAlzYncgPSAoU2Nyb2xsYmFyV2lkZ2V0KSB3OworCisgICAgaWYgKHNidy0+c2Nyb2xsYmFyLnNjcm9sbF9tb2RlID09IFNNT0RFX0NPTlQpICAgLyogaWYgc2Nyb2xsIGNvbnRpbnVvdXMgKi8KKwlyZXR1cm47CisKKyAgICBpZiAoTG9va0FoZWFkKHcsIGV2ZW50KSkKKwlyZXR1cm47CisKKyAgICBzYnctPnNjcm9sbGJhci5zY3JvbGxfbW9kZSA9IFNNT0RFX0xJTkVfVVA7CisgICAgWHRDYWxsQ2FsbGJhY2tzKHcsIFh0TnNjcm9sbFByb2MsIChYdFBvaW50ZXIpY2FsbF9kYXRhKTsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorTm90aWZ5U2Nyb2xsKHcsIGV2ZW50LCBwYXJhbXMsIG51bV9wYXJhbXMpCisgICAgV2lkZ2V0CXc7CisgICAgWEV2ZW50CSpldmVudDsKKyAgICBTdHJpbmcJKnBhcmFtczsKKyAgICBDYXJkaW5hbAkqbnVtX3BhcmFtczsKK3sKKyAgICBTY3JvbGxiYXJXaWRnZXQgc2J3ID0gKFNjcm9sbGJhcldpZGdldCkgdzsKKyAgICBQb3NpdGlvbgkgICAgeCwgeSwgbG9jOworICAgIERpbWVuc2lvbgkgICAgYXJyb3dfc2l6ZTsKKyAgICB1bnNpZ25lZCBsb25nICAgZGVsYXkgPSAwOworICAgIGludAkJICAgIGNhbGxfZGF0YSA9IDA7CisgICAgdW5zaWduZWQgaW50ICAgIHN0YXRlOworCisgICAgaWYgKHNidy0+c2Nyb2xsYmFyLnNjcm9sbF9tb2RlID09IFNNT0RFX0NPTlQpICAgLyogaWYgc2Nyb2xsIGNvbnRpbnVvdXMgKi8KKwlyZXR1cm47CisKKyAgICBpZiAoTG9va0FoZWFkICh3LCBldmVudCkpCisJcmV0dXJuOworCisgICAgRXh0cmFjdFBvc2l0aW9uKGV2ZW50LCAmeCwgJnksICZzdGF0ZSk7CisgICAgbG9jID0gUElDS0xFTkdUSChzYncsIHgsIHkpOworCisgICAgaWYgKChpbnQpc2J3LT5zY3JvbGxiYXIudGhpY2tuZXNzICogMiA+IChpbnQpc2J3LT5zY3JvbGxiYXIubGVuZ3RoKQorCWFycm93X3NpemUgPSBzYnctPnNjcm9sbGJhci5sZW5ndGggLyAyOworICAgIGVsc2UKKwlhcnJvd19zaXplID0gc2J3LT5zY3JvbGxiYXIudGhpY2tuZXNzOworCisgICAgLyoKKyAgICAgKiBoYW5kbGUgQ1RSTCBtb2RpZmllcgorICAgICAqLworICAgIGlmIChzdGF0ZSAmIENvbnRyb2xNYXNrKQorICAgIHsKKwlpZiAobG9jID4gc2J3LT5zY3JvbGxiYXIudG9wTG9jICsgKFBvc2l0aW9uKXNidy0+c2Nyb2xsYmFyLnNob3duTGVuZ3RoKQorCSAgICBjYWxsX2RhdGEgPSBFTkRfUEFHRV9EQVRBOworCWVsc2UKKwkgICAgY2FsbF9kYXRhID0gLUVORF9QQUdFX0RBVEE7CisJc2J3LT5zY3JvbGxiYXIuc2Nyb2xsX21vZGUgPSBTTU9ERV9OT05FOworICAgIH0KKyAgICAvKgorICAgICAqIGhhbmRsZSBmaXJzdCBhcnJvdyB6b25lCisgICAgICovCisgICAgZWxzZSBpZiAobG9jIDwgKFBvc2l0aW9uKWFycm93X3NpemUpCisgICAgeworCWNhbGxfZGF0YSA9IC1PTkVfTElORV9EQVRBOworCXNidy0+c2Nyb2xsYmFyLnNjcm9sbF9tb2RlID0gU01PREVfTElORV9VUDsKKwlkZWxheSA9IExJTkVfREVMQVk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBoYW5kbGUgbGFzdCBhcnJvdyB6b25lCisgICAgICovCisgICAgZWxzZSBpZiAobG9jID4gKFBvc2l0aW9uKShzYnctPnNjcm9sbGJhci5sZW5ndGggLSBhcnJvd19zaXplKSkKKyAgICB7CisJY2FsbF9kYXRhID0gT05FX0xJTkVfREFUQTsKKwlzYnctPnNjcm9sbGJhci5zY3JvbGxfbW9kZSA9IFNNT0RFX0xJTkVfRE9XTjsKKwlkZWxheSA9IExJTkVfREVMQVk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBoYW5kbGUgem9uZSAiYWJvdmUiIHRoZSB0aHVtYgorICAgICAqLworICAgIGVsc2UgaWYgKGxvYyA8IHNidy0+c2Nyb2xsYmFyLnRvcExvYykKKyAgICB7CisJY2FsbF9kYXRhID0gLU9ORV9QQUdFX0RBVEE7CisJc2J3LT5zY3JvbGxiYXIuc2Nyb2xsX21vZGUgPSBTTU9ERV9QQUdFX1VQOworCWRlbGF5ID0gUEFHRV9ERUxBWTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGhhbmRsZSB6b25lICJiZWxvdyIgdGhlIHRodW1iCisgICAgICovCisgICAgZWxzZSBpZiAobG9jID4gc2J3LT5zY3JvbGxiYXIudG9wTG9jICsgKFBvc2l0aW9uKXNidy0+c2Nyb2xsYmFyLnNob3duTGVuZ3RoKQorICAgIHsKKwljYWxsX2RhdGEgPSBPTkVfUEFHRV9EQVRBOworCXNidy0+c2Nyb2xsYmFyLnNjcm9sbF9tb2RlID0gU01PREVfUEFHRV9ET1dOOworCWRlbGF5ID0gUEFHRV9ERUxBWTsKKyAgICB9CisKKyAgICBpZiAoY2FsbF9kYXRhKQorCVh0Q2FsbENhbGxiYWNrcyh3LCBYdE5zY3JvbGxQcm9jLCAoWHRQb2ludGVyKWNhbGxfZGF0YSk7CisKKyAgICAvKiBlc3RhYmxpc2ggYXV0b3Njcm9sbCAqLworICAgIGlmIChkZWxheSkKKwlzYnctPnNjcm9sbGJhci50aW1lcl9pZCA9CisJICAgIFh0QXBwQWRkVGltZU91dChYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KHcpLAorCQkJCQkgICBkZWxheSwgUmVwZWF0Tm90aWZ5LCAoWHRQb2ludGVyKXcpOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitFbmRTY3JvbGwodywgZXZlbnQsIHBhcmFtcywgbnVtX3BhcmFtcykKKyAgICBXaWRnZXQgdzsKKyAgICBYRXZlbnQgKmV2ZW50OwkvKiB1bnVzZWQgKi8KKyAgICBTdHJpbmcgKnBhcmFtczsJLyogdW51c2VkICovCisgICAgQ2FyZGluYWwgKm51bV9wYXJhbXM7ICAgLyogdW51c2VkICovCit7CisgICAgU2Nyb2xsYmFyV2lkZ2V0IHNidyA9IChTY3JvbGxiYXJXaWRnZXQpIHc7CisKKyAgICBzYnctPnNjcm9sbGJhci5zY3JvbGxfbW9kZSA9IFNNT0RFX05PTkU7CisgICAgLyogbm8gbmVlZCB0byByZW1vdmUgYW55IGF1dG9zY3JvbGwgdGltZW91dDsgaXQgd2lsbCBuby1vcCAqLworICAgIC8qIGJlY2F1c2UgdGhlIHNjcm9sbF9tb2RlIGlzIFNNT0RFX05PTkUgKi8KKyAgICAvKiBidXQgYmUgc3VyZSB0byByZW1vdmUgdGltZW91dCBpbiBkZXN0cm95IHByb2MgKi8KK30KKworICAgIHN0YXRpYyBmbG9hdAorRnJhY3Rpb25Mb2Moc2J3LCB4LCB5KQorICAgIFNjcm9sbGJhcldpZGdldCBzYnc7CisgICAgaW50IHgsIHk7Cit7CisgICAgaW50CSAgICBtYXJnaW47CisgICAgZmxvYXQgICBoZWlnaHQsIHdpZHRoOworCisgICAgbWFyZ2luID0gTUFSR0lOKHNidyk7CisgICAgeCAtPSBtYXJnaW47CisgICAgeSAtPSBtYXJnaW47CisgICAgaGVpZ2h0ID0gKGZsb2F0KXNidy0+Y29yZS5oZWlnaHQgLSAyICogbWFyZ2luOworICAgIHdpZHRoID0gKGZsb2F0KXNidy0+Y29yZS53aWR0aCAtIDIgKiBtYXJnaW47CisgICAgcmV0dXJuIFBJQ0tMRU5HVEgoc2J3LCB4IC8gd2lkdGgsIHkgLyBoZWlnaHQpOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitNb3ZlVGh1bWIodywgZXZlbnQsIHBhcmFtcywgbnVtX3BhcmFtcykKKyAgICBXaWRnZXQJdzsKKyAgICBYRXZlbnQJKmV2ZW50OworICAgIFN0cmluZwkqcGFyYW1zOwkvKiB1bnVzZWQgKi8KKyAgICBDYXJkaW5hbAkqbnVtX3BhcmFtczsJLyogdW51c2VkICovCit7CisgICAgU2Nyb2xsYmFyV2lkZ2V0CXNidyA9IChTY3JvbGxiYXJXaWRnZXQpdzsKKyAgICBQb3NpdGlvbgkJeCwgeTsKKyAgICBmbG9hdAkJdG9wOworICAgIGNoYXIJCW9sZF9tb2RlID0gc2J3LT5zY3JvbGxiYXIuc2Nyb2xsX21vZGU7CisKKyAgICBzYnctPnNjcm9sbGJhci5zY3JvbGxfbW9kZSA9IFNNT0RFX0NPTlQ7IC8qIGluZGljYXRlIGNvbnRpbnVvdXMgc2Nyb2xsICovCisKKyAgICBpZiAoTG9va0FoZWFkKHcsIGV2ZW50KSkKKwlyZXR1cm47CisKKyAgICBpZiAoIWV2ZW50LT54bW90aW9uLnNhbWVfc2NyZWVuKQorCXJldHVybjsKKworICAgIEV4dHJhY3RQb3NpdGlvbihldmVudCwgJngsICZ5LCAodW5zaWduZWQgaW50ICopTlVMTCk7CisKKyAgICB0b3AgPSBGcmFjdGlvbkxvYyhzYncsIHgsIHkpOworCisgICAgaWYgKG9sZF9tb2RlICE9IFNNT0RFX0NPTlQpCQkgICAgLyogc3RhcnQgZHJhZ2dpbmc6IHNldCBvZmZzZXQgKi8KKyAgICB7CisJaWYgKGV2ZW50LT54YnV0dG9uLmJ1dHRvbiA9PSBCdXR0b24yKQorCSAgICBzYnctPnNjcm9sbGJhci5zY3JvbGxfb2ZmID0gc2J3LT5zY3JvbGxiYXIuc2hvd24gLyAyLjsKKwllbHNlCisJICAgIHNidy0+c2Nyb2xsYmFyLnNjcm9sbF9vZmYgPSB0b3AgLSBzYnctPnNjcm9sbGJhci50b3A7CisgICAgfQorCisgICAgdG9wIC09IHNidy0+c2Nyb2xsYmFyLnNjcm9sbF9vZmY7CisgICAgaWYgKHNidy0+c2Nyb2xsYmFyLmxpbWl0X3RodW1iKQorCXRvcCA9IEZsb2F0SW5SYW5nZSh0b3AsIDAuMCwKKwkJCXNidy0+c2Nyb2xsYmFyLm1heCAtIHNidy0+c2Nyb2xsYmFyLnNob3duICsgMC4wMDAwMDEpOworICAgIGVsc2UKKwl0b3AgPSBGbG9hdEluUmFuZ2UodG9wLCAwLjAsIHNidy0+c2Nyb2xsYmFyLm1heCk7CisKKyAgICBzYnctPnNjcm9sbGJhci50b3AgPSB0b3A7CisgICAgUGFpbnRUaHVtYihzYncpOworICAgIFhGbHVzaChYdERpc3BsYXkodykpOyAgIC8qIHJlLWRyYXcgaXQgYmVmb3JlIE5vdGlmeWluZyAqLworfQorCisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK05vdGlmeVRodW1iKHcsIGV2ZW50LCBwYXJhbXMsIG51bV9wYXJhbXMpCisgICAgV2lkZ2V0CXc7CisgICAgWEV2ZW50CSpldmVudDsKKyAgICBTdHJpbmcJKnBhcmFtczsJLyogdW51c2VkICovCisgICAgQ2FyZGluYWwJKm51bV9wYXJhbXM7CS8qIHVudXNlZCAqLworeworICAgIFNjcm9sbGJhcldpZGdldCBzYncgPSAoU2Nyb2xsYmFyV2lkZ2V0KXc7CisKKyAgICBpZiAoTG9va0FoZWFkKHcsIGV2ZW50KSkKKwlyZXR1cm47CisKKyAgICAvKiB0aHVtYlByb2MgaXMgbm90IHByZXR0eSwgYnV0IGlzIG5lY2Vzc2FyeSBmb3IgYmFja3dhcmRzCisgICAgICAgY29tcGF0aWJpbGl0eSBvbiB0aG9zZSBhcmNoaXRlY3R1cmVzIGZvciB3aGljaCBpdCB3b3Jre3MsZWR9OworICAgICAgIHRoZSBpbnRlbnQgaXMgdG8gcGFzcyBhICh0cnVuY2F0ZWQpIGZsb2F0IGJ5IHZhbHVlLiAqLworICAgIFh0Q2FsbENhbGxiYWNrcyh3LCBYdE50aHVtYlByb2MsICooWHRQb2ludGVyKikmc2J3LT5zY3JvbGxiYXIudG9wKTsKKyAgICBYdENhbGxDYWxsYmFja3ModywgWHROanVtcFByb2MsIChYdFBvaW50ZXIpJnNidy0+c2Nyb2xsYmFyLnRvcCk7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK0FsbG9jVG9wU2hhZG93R0ModykKKyAgICBXaWRnZXQgdzsKK3sKKyAgICBTY3JvbGxiYXJXaWRnZXQgc2J3ID0gKFNjcm9sbGJhcldpZGdldCkgdzsKKyAgICBYdEdDTWFzawkgICAgdmFsdWVtYXNrOworICAgIFhHQ1ZhbHVlcwkgICAgbXlYR0NWOworCisgICAgdmFsdWVtYXNrID0gR0NGb3JlZ3JvdW5kOworICAgIG15WEdDVi5mb3JlZ3JvdW5kID0gc2J3LT5zY3JvbGxiYXIudG9wX3NoYWRvd19waXhlbDsKKyAgICBzYnctPnNjcm9sbGJhci50b3Bfc2hhZG93X0dDID0gWHRHZXRHQyh3LCB2YWx1ZW1hc2ssICZteVhHQ1YpOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitBbGxvY0JvdFNoYWRvd0dDKHcpCisgICAgV2lkZ2V0IHc7Cit7CisgICAgU2Nyb2xsYmFyV2lkZ2V0IHNidyA9IChTY3JvbGxiYXJXaWRnZXQpIHc7CisgICAgWHRHQ01hc2sJICAgIHZhbHVlbWFzazsKKyAgICBYR0NWYWx1ZXMJICAgIG15WEdDVjsKKworICAgIHZhbHVlbWFzayA9IEdDRm9yZWdyb3VuZDsKKyAgICBteVhHQ1YuZm9yZWdyb3VuZCA9IHNidy0+c2Nyb2xsYmFyLmJvdF9zaGFkb3dfcGl4ZWw7CisgICAgc2J3LT5zY3JvbGxiYXIuYm90X3NoYWRvd19HQyA9IFh0R2V0R0ModywgdmFsdWVtYXNrLCAmbXlYR0NWKTsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorX1hhdzNkRHJhd1NoYWRvd3MoZ3csIGV2ZW50LCByZWdpb24sIG91dCkKKyAgICBXaWRnZXQgIGd3OworICAgIFhFdmVudCAgKmV2ZW50OworICAgIFJlZ2lvbiAgcmVnaW9uOworICAgIGludAkgICAgb3V0OworeworICAgIFhQb2ludCAgcHRbNl07CisgICAgU2Nyb2xsYmFyV2lkZ2V0IHNidyA9IChTY3JvbGxiYXJXaWRnZXQpIGd3OworICAgIERpbWVuc2lvbglzID0gc2J3LT5zY3JvbGxiYXIuc2hhZG93X3dpZHRoOworICAgIC8qCisgICAgICogZHJhdyB0aGUgc2hhZG93cyB1c2luZyB0aGUgY29yZSBwYXJ0IHdpZHRoIGFuZCBoZWlnaHQsCisgICAgICogYW5kIHRoZSBzY3JvbGxiYXIgcGFydCBzaGFkb3dfd2lkdGguCisgICAgICoKKyAgICAgKglubyBwb2ludCB0byBkbyBhbnl0aGluZyBpZiB0aGUgc2hhZG93X3dpZHRoIGlzIDAgb3IgdGhlCisgICAgICoJd2lkZ2V0IGhhcyBub3QgYmVlbiByZWFsaXplZC4KKyAgICAgKi8KKyAgICBpZiAocyA+IDAgJiYgWHRJc1JlYWxpemVkKGd3KSkKKyAgICB7CisJRGltZW5zaW9uICAgaCA9IHNidy0+Y29yZS5oZWlnaHQ7CisJRGltZW5zaW9uICAgdyA9IHNidy0+Y29yZS53aWR0aDsKKwlEaW1lbnNpb24gICB3bXMgPSB3IC0gczsKKwlEaW1lbnNpb24gICBobXMgPSBoIC0gczsKKwlEaXNwbGF5CSAgICAqZHB5ID0gWHREaXNwbGF5IChndyk7CisJV2luZG93CSAgICB3aW4gPSBYdFdpbmRvdyAoZ3cpOworCUdDCXRvcCwgYm90OworCisJaWYgKG91dCkKKwl7CisJICAgIHRvcCA9IHNidy0+c2Nyb2xsYmFyLnRvcF9zaGFkb3dfR0M7CisJICAgIGJvdCA9IHNidy0+c2Nyb2xsYmFyLmJvdF9zaGFkb3dfR0M7CisJfQorCWVsc2UKKwl7CisJICAgIHRvcCA9IHNidy0+c2Nyb2xsYmFyLmJvdF9zaGFkb3dfR0M7CisJICAgIGJvdCA9IHNidy0+c2Nyb2xsYmFyLnRvcF9zaGFkb3dfR0M7CisJfQorCisJLyogdG9wLWxlZnQgc2hhZG93ICovCisJaWYgKChyZWdpb24gPT0gTlVMTCkgfHwKKwkJKFhSZWN0SW5SZWdpb24gKHJlZ2lvbiwgMCwgMCwgdywgcykgIT0gUmVjdGFuZ2xlT3V0KSB8fAorCQkoWFJlY3RJblJlZ2lvbiAocmVnaW9uLCAwLCAwLCBzLCBoKSAhPSBSZWN0YW5nbGVPdXQpKQorCXsKKwkgICAgcHRbMF0ueCA9IDA7ICAgIHB0WzBdLnkgPSBoOworCSAgICBwdFsxXS54ID0JICAgIHB0WzFdLnkgPSAwOworCSAgICBwdFsyXS54ID0gdzsgICAgcHRbMl0ueSA9IDA7CisJICAgIHB0WzNdLnggPSB3bXM7ICBwdFszXS55ID0gczsKKwkgICAgcHRbNF0ueCA9CSAgICBwdFs0XS55ID0gczsKKwkgICAgcHRbNV0ueCA9IHM7ICAgIHB0WzVdLnkgPSBobXM7CisJICAgIFhGaWxsUG9seWdvbiAoZHB5LCB3aW4sIHRvcCwgcHQsIDYsIENvbXBsZXgsIENvb3JkTW9kZU9yaWdpbik7CisJfQorCisJLyogYm90dG9tLXJpZ2h0IHNoYWRvdyAqLworCWlmICgocmVnaW9uID09IE5VTEwpIHx8CisJCShYUmVjdEluUmVnaW9uIChyZWdpb24sIDAsIGhtcywgdywgcykgIT0gUmVjdGFuZ2xlT3V0KSB8fAorCQkoWFJlY3RJblJlZ2lvbiAocmVnaW9uLCB3bXMsIDAsIHMsIGgpICE9IFJlY3RhbmdsZU91dCkpCisJeworCSAgICBwdFswXS54ID0gMDsgICAgcHRbMF0ueSA9IGg7CisJICAgIHB0WzFdLnggPSB3OyAgICBwdFsxXS55ID0gaDsKKwkgICAgcHRbMl0ueCA9IHc7ICAgIHB0WzJdLnkgPSAwOworCSAgICBwdFszXS54ID0gd21zOyAgcHRbM10ueSA9IHM7CisJICAgIHB0WzRdLnggPSB3bXM7ICBwdFs0XS55ID0gaG1zOworCSAgICBwdFs1XS54ID0gczsgICAgcHRbNV0ueSA9IGhtczsKKwkgICAgWEZpbGxQb2x5Z29uIChkcHksIHdpbiwgYm90LCBwdCwgNiwgQ29tcGxleCwgQ29vcmRNb2RlT3JpZ2luKTsKKwl9CisgICAgfQorfQorCisKKy8qCisgKiBTZXQgdGhlIHNjcm9sbCBiYXIgdG8gdGhlIGdpdmVuIGxvY2F0aW9uLgorICovCisgICAgdm9pZAordmltX1hhd1Njcm9sbGJhclNldFRodW1iKHcsIHRvcCwgc2hvd24sIG1heCkKKyAgICBXaWRnZXQgdzsKKyAgICBkb3VibGUgdG9wLCBzaG93biwgbWF4OworeworICAgIFNjcm9sbGJhcldpZGdldCBzYncgPSAoU2Nyb2xsYmFyV2lkZ2V0KSB3OworCisgICAgaWYgKHNidy0+c2Nyb2xsYmFyLnNjcm9sbF9tb2RlID09IFNNT0RFX0NPTlQpIC8qIGlmIHN0aWxsIHRodW1iaW5nICovCisJcmV0dXJuOworCisgICAgc2J3LT5zY3JvbGxiYXIubWF4ID0gKG1heCA+IDEuMCkgPyAxLjAgOgorCQkobWF4ID49IDAuMCkgPyBtYXggOiBzYnctPnNjcm9sbGJhci5tYXg7CisKKyAgICBzYnctPnNjcm9sbGJhci50b3AgPSAodG9wID4gc2J3LT5zY3JvbGxiYXIubWF4KSA/IHNidy0+c2Nyb2xsYmFyLm1heCA6CisJCSh0b3AgPj0gMC4wKSA/IHRvcCA6IHNidy0+c2Nyb2xsYmFyLnRvcDsKKworICAgIHNidy0+c2Nyb2xsYmFyLnNob3duID0gKHNob3duID4gMS4wKSA/IDEuMCA6CisJCShzaG93biA+PSAwLjApID8gc2hvd24gOiBzYnctPnNjcm9sbGJhci5zaG93bjsKKworICAgIFBhaW50VGh1bWIoc2J3KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9ndWlfYXRfc2IuaCBiL3NyYy9ndWlfYXRfc2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDNkMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2d1aV9hdF9zYi5oCkBAIC0wLDAgKzEsMTYxIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OiAqLworLyogTU9ESUZJRUQgQVRIRU5BIFNDUk9MTEJBUiAoVVNJTkcgQVJST1dIRUFEUyBBVCBFTkRTIE9GIFRSQVZFTCkgKi8KKy8qIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IDE5OTIgYnkgTWl0Y2ggVHJhY2h0ZW5iZXJnCQkgICovCisvKiBSaWdodHMsIHBlcm1pc3Npb25zLCBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhcmUgYXMgaW4gdGhlICAqLworLyogREVDIGFuZCBNSVQgbm90aWNlIGJlbG93LiAgU2VlIHVzYWdlIHdhcm5pbmcgaW4gLmMgZmlsZS4JICAqLworLyoKKyAqICRYQ29uc29ydGl1bTogU2Nyb2xsYmFyUC5oLHYgMS4zIDk0LzA0LzE3IDIwOjEyOjQyIGppbSBFeHAgJAorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0NvcHlyaWdodCAoYykgMTk4NywgMTk4OCAgWCBDb25zb3J0aXVtCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KK0NPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MKK2luIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3J0aXVtLgorCisKK0NvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLCBNYXluYXJkLCBNYXNzYWNodXNldHRzLgorCisJCQlBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAorYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCitzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIERpZ2l0YWwgbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKK3NvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKworRElHSVRBTCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HCitBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwKK0RJR0lUQUwgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SCitBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsCitXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCitTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9TY3JvbGxiYXJfaAorI2RlZmluZSBfU2Nyb2xsYmFyX2gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTY3JvbGxiYXIgV2lkZ2V0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljUC5oPgorI2luY2x1ZGUgPFgxMS9YYXcvU2ltcGxlUC5oPgorI2luY2x1ZGUgPFgxMS9YbXUvQ29udmVydGVycy5oPgorCisvKgorICogTW9zdCB0aGluZ3Mgd2UgbmVlZCBhcmUgaW4gU3RyaW5nRGVmcy5oCisgKi8KKyNkZWZpbmUgWHRDTWluaW11bVRodW1iCQkiTWluaW11bVRodW1iIgorI2RlZmluZSBYdENTaG93bgkJIlNob3duIgorI2RlZmluZSBYdENUb3BPZlRodW1iCQkiVG9wT2ZUaHVtYiIKKyNkZWZpbmUgWHRDTWF4T2ZUaHVtYgkJIk1heE9mVGh1bWIiCisjZGVmaW5lIFh0Q1NoYWRvd1dpZHRoCQkiU2hhZG93V2lkdGgiCisjZGVmaW5lIFh0Q1RvcFNoYWRvd1BpeGVsCSJUb3BTaGFkb3dQaXhlbCIKKyNkZWZpbmUgWHRDQm90dG9tU2hhZG93UGl4ZWwJIkJvdHRvbVNoYWRvd1BpeGVsIgorI2RlZmluZSBYdENMaW1pdFRodW1iCQkiTGltaXRUaHVtYiIKKworI2RlZmluZSBYdE5taW5pbXVtVGh1bWIJCSJtaW5pbXVtVGh1bWIiCisjZGVmaW5lIFh0TnRvcE9mVGh1bWIJCSJ0b3BPZlRodW1iIgorI2RlZmluZSBYdE5tYXhPZlRodW1iCQkibWF4T2ZUaHVtYiIKKyNkZWZpbmUgWHROc2hhZG93V2lkdGgJCSJzaGFkb3dXaWR0aCIKKyNkZWZpbmUgWHROdG9wU2hhZG93UGl4ZWwJInRvcFNoYWRvd1BpeGVsIgorI2RlZmluZSBYdE5ib3R0b21TaGFkb3dQaXhlbAkiYm90dG9tU2hhZG93UGl4ZWwiCisjZGVmaW5lIFh0TmxpbWl0VGh1bWIJCSJsaW1pdFRodW1iIgorCit0eXBlZGVmIHN0cnVjdCBfU2Nyb2xsYmFyUmVjCSAgKlNjcm9sbGJhcldpZGdldDsKK3R5cGVkZWYgc3RydWN0IF9TY3JvbGxiYXJDbGFzc1JlYyAqU2Nyb2xsYmFyV2lkZ2V0Q2xhc3M7CisKK2V4dGVybiBXaWRnZXRDbGFzcyB2aW1fc2Nyb2xsYmFyV2lkZ2V0Q2xhc3M7CisKK2V4dGVybiB2b2lkIHZpbV9YYXdTY3JvbGxiYXJTZXRUaHVtYiBfX0FSR1MoKFdpZGdldCwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkpOworCit0eXBlZGVmIHN0cnVjdAoreworICAgICAvKiBwdWJsaWMgKi8KKyAgICBQaXhlbAkgIGZvcmVncm91bmQ7CS8qIHRodW1iIGZvcmVncm91bmQgY29sb3IgKi8KKyAgICBYdE9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwkvKiBob3Jpem9udGFsIG9yIHZlcnRpY2FsICovCisgICAgWHRDYWxsYmFja0xpc3Qgc2Nyb2xsUHJvYzsJLyogcHJvcG9ydGlvbmFsIHNjcm9sbCAqLworICAgIFh0Q2FsbGJhY2tMaXN0IHRodW1iUHJvYzsJLyoganVtcCAodG8gcG9zaXRpb24pIHNjcm9sbCAqLworICAgIFh0Q2FsbGJhY2tMaXN0IGp1bXBQcm9jOwkvKiBzYW1lIGFzIHRodW1iUHJvYyBidXQgcGFzcyBkYXRhIGJ5IHJlZiAqLworICAgIFBpeG1hcAkgIHRodW1iOwkvKiB0aHVtYiBjb2xvciAqLworICAgIGZsb2F0CSAgdG9wOwkJLyogV2hhdCBwZXJjZW50IGlzIGFib3ZlIHRoZSB3aW4ncyB0b3AgKi8KKyAgICBmbG9hdAkgIHNob3duOwkvKiBXaGF0IHBlcmNlbnQgaXMgc2hvd24gaW4gdGhlIHdpbiAqLworICAgIGZsb2F0CSAgbWF4OwkJLyogTWF4aW11bSB2YWx1ZSBmb3IgdG9wICovCisgICAgRGltZW5zaW9uCSAgbGVuZ3RoOwkvKiBlaXRoZXIgaGVpZ2h0IG9yIHdpZHRoICovCisgICAgRGltZW5zaW9uCSAgdGhpY2tuZXNzOwkvKiBlaXRoZXIgd2lkdGggb3IgaGVpZ2h0ICovCisgICAgRGltZW5zaW9uCSAgbWluX3RodW1iOwkvKiBtaW5pdW0gc2l6ZSBmb3IgdGhlIHRodW1iLiAqLworCisgICAgIC8qIHByaXZhdGUgKi8KKyAgICBYdEludGVydmFsSWQgIHRpbWVyX2lkOwkvKiBhdXRvcmVwZWF0IHRpbWVyOyByZW1vdmUgb24gZGVzdHJ1Y3Rpb24gKi8KKyAgICBjaGFyCSAgc2Nyb2xsX21vZGU7CS8qIHNlZSBiZWxvdyAqLworICAgIGZsb2F0CSAgc2Nyb2xsX29mZjsJLyogb2Zmc2V0IGZyb20gZXZlbnQgdG8gdG9wIG9mIHRodW1iICovCisgICAgR0MJCSAgZ2M7CQkvKiBhIChzaGFyZWQpIGdjICovCisgICAgUG9zaXRpb24JICB0b3BMb2M7CS8qIFBpeGVsIHRoYXQgY29ycmVzcG9uZHMgdG8gdG9wICovCisgICAgRGltZW5zaW9uCSAgc2hvd25MZW5ndGg7CS8qIE51bSBwaXhlbHMgY29ycmVzcG9uZGluZyB0byBzaG93biAqLworCisgICAgLyogRnJvbSAzZCB3aWRnZXQgKi8KKyAgICBEaW1lbnNpb24Jc2hhZG93X3dpZHRoOworICAgIFBpeGVsCXRvcF9zaGFkb3dfcGl4ZWw7CisgICAgUGl4ZWwJYm90X3NoYWRvd19waXhlbDsKKyAgICBCb29sCWxpbWl0X3RodW1iOwkvKiBsaW1pdCB0aHVtYiB0byBpbnNpZGUgc2Nyb2xsYmFyICovCisgICAgaW50CQl0b3Bfc2hhZG93X2NvbnRyYXN0OworICAgIGludAkJYm90X3NoYWRvd19jb250cmFzdDsKKyAgICBHQwkJdG9wX3NoYWRvd19HQzsKKyAgICBHQwkJYm90X3NoYWRvd19HQzsKK30gU2Nyb2xsYmFyUGFydDsKKworI2RlZmluZSBTTU9ERV9OT05FCQkwCisjZGVmaW5lIFNNT0RFX0NPTlQJCTEKKyNkZWZpbmUgU01PREVfUEFHRV9VUAkJMgorI2RlZmluZSBTTU9ERV9QQUdFX0RPV04JCTMKKyNkZWZpbmUgU01PREVfTElORV9VUAkJNAorI2RlZmluZSBTTU9ERV9MSU5FX0RPV04JCTUKKworI2RlZmluZSBPTkVfTElORV9EQVRBCQkxCisjZGVmaW5lIE9ORV9QQUdFX0RBVEEJCTEwCisjZGVmaW5lIEVORF9QQUdFX0RBVEEJCTk5OTkKKwordHlwZWRlZiBzdHJ1Y3QgX1Njcm9sbGJhclJlYyB7CisgICAgQ29yZVBhcnQJCWNvcmU7CisgICAgU2ltcGxlUGFydAkJc2ltcGxlOworICAgIFNjcm9sbGJhclBhcnQJc2Nyb2xsYmFyOworfSBTY3JvbGxiYXJSZWM7CisKK3R5cGVkZWYgc3RydWN0IHtpbnQgZW1wdHk7fSBTY3JvbGxiYXJDbGFzc1BhcnQ7CisKK3R5cGVkZWYgc3RydWN0IF9TY3JvbGxiYXJDbGFzc1JlYyB7CisgICAgQ29yZUNsYXNzUGFydAkJY29yZV9jbGFzczsKKyAgICBTaW1wbGVDbGFzc1BhcnQJCXNpbXBsZV9jbGFzczsKKyAgICBTY3JvbGxiYXJDbGFzc1BhcnQJCXNjcm9sbGJhcl9jbGFzczsKK30gU2Nyb2xsYmFyQ2xhc3NSZWM7CisKK2V4dGVybiBTY3JvbGxiYXJDbGFzc1JlYyB2aW1fc2Nyb2xsYmFyQ2xhc3NSZWM7CisKKyNlbmRpZiAvKiBfU2Nyb2xsYmFyX2ggKi8KZGlmZiAtLWdpdCBhL3NyYy9ndWlfYXRoZW5hLmMgYi9zcmMvZ3VpX2F0aGVuYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTc3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpX2F0aGVuYS5jCkBAIC0wLDAgKzEsMjIzMCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAkJYnkgQnJhbSBNb29sZW5hYXIKKyAqCQkJCUdVSS9Nb3RpZiBzdXBwb3J0IGJ5IFJvYmVydCBXZWJiCisgKgkJCQlBdGhlbmEgcG9ydCBieSBCaWxsIEZvc3RlcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisjaW5jbHVkZSA8WDExL1N0cmluZ0RlZnMuaD4KKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaWZkZWYgRkVBVF9HVUlfTkVYVEFXCisjIGluY2x1ZGUgPFgxMS9uZVh0YXcvRm9ybS5oPgorIyBpbmNsdWRlIDxYMTEvbmVYdGF3L1NpbXBsZU1lbnUuaD4KKyMgaW5jbHVkZSA8WDExL25lWHRhdy9NZW51QnV0dG9uLmg+CisjIGluY2x1ZGUgPFgxMS9uZVh0YXcvU21lQlNCLmg+CisjIGluY2x1ZGUgPFgxMS9uZVh0YXcvU21lTGluZS5oPgorIyBpbmNsdWRlIDxYMTEvbmVYdGF3L0JveC5oPgorIyBpbmNsdWRlIDxYMTEvbmVYdGF3L0RpYWxvZy5oPgorIyBpbmNsdWRlIDxYMTEvbmVYdGF3L1RleHQuaD4KKyMgaW5jbHVkZSA8WDExL25lWHRhdy9Bc2NpaVRleHQuaD4KKyMgaW5jbHVkZSA8WDExL25lWHRhdy9TY3JvbGxiYXIuaD4KKyNlbHNlCisjIGluY2x1ZGUgPFgxMS9YYXcvRm9ybS5oPgorIyBpbmNsdWRlIDxYMTEvWGF3L1NpbXBsZU1lbnUuaD4KKyMgaW5jbHVkZSA8WDExL1hhdy9NZW51QnV0dG9uLmg+CisjIGluY2x1ZGUgPFgxMS9YYXcvU21lQlNCLmg+CisjIGluY2x1ZGUgPFgxMS9YYXcvU21lTGluZS5oPgorIyBpbmNsdWRlIDxYMTEvWGF3L0JveC5oPgorIyBpbmNsdWRlIDxYMTEvWGF3L0RpYWxvZy5oPgorIyBpbmNsdWRlIDxYMTEvWGF3L1RleHQuaD4KKyMgaW5jbHVkZSA8WDExL1hhdy9Bc2NpaVRleHQuaD4KKyNlbmRpZiAvKiBGRUFUX0dVSV9ORVhUQVcgKi8KKworI2luY2x1ZGUgInZpbS5oIgorI2lmbmRlZiBGRUFUX0dVSV9ORVhUQVcKKyMgaW5jbHVkZSAiZ3VpX2F0X3NiLmgiCisjZW5kaWYKKworZXh0ZXJuIFdpZGdldCB2aW1TaGVsbDsKKworc3RhdGljIFdpZGdldCB2aW1Gb3JtID0gKFdpZGdldCkwOworc3RhdGljIFdpZGdldCB0ZXh0QXJlYSA9IChXaWRnZXQpMDsKKyNpZmRlZiBGRUFUX01FTlUKK3N0YXRpYyBXaWRnZXQgbWVudUJhciA9IChXaWRnZXQpMDsKK3N0YXRpYyBYdEludGVydmFsSWQgdGltZXIgPSAwOwkgICAgLyogMCA9IGV4cGlyZWQsIG90aGVyd2lzZSBhY3RpdmUgKi8KKworLyogVXNlZCB0byBmaWd1cmUgb3V0IG1lbnUgb3JkZXJpbmcgKi8KK3N0YXRpYyB2aW1tZW51X1QgKmFfY3VyX21lbnUgPSBOVUxMOworc3RhdGljIENhcmRpbmFsCWF0aGVuYV9jYWxjdWxhdGVfaW5zX3BvcyBfX0FSR1MoKFdpZGdldCkpOworCitzdGF0aWMgUGl4bWFwIGd1aV9hdGhlbmFfY3JlYXRlX3B1bGxyaWdodF9waXhtYXAgX19BUkdTKChXaWRnZXQpKTsKK3N0YXRpYyB2b2lkIGd1aV9hdGhlbmFfbWVudV90aW1lb3V0IF9fQVJHUygoWHRQb2ludGVyLCBYdEludGVydmFsSWQgKikpOworc3RhdGljIHZvaWQgZ3VpX2F0aGVuYV9wb3B1cF9jYWxsYmFjayBfX0FSR1MoKFdpZGdldCwgWHRQb2ludGVyLCBYdFBvaW50ZXIpKTsKK3N0YXRpYyB2b2lkIGd1aV9hdGhlbmFfZGVsYXllZF9hcm1fYWN0aW9uIF9fQVJHUygoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosCisJCQkJCQkgQ2FyZGluYWwgKikpOworc3RhdGljIHZvaWQgZ3VpX2F0aGVuYV9wb3Bkb3duX3N1Ym1lbnVzX2FjdGlvbiBfX0FSR1MoKFdpZGdldCwgWEV2ZW50ICosCisJCQkJCQkgICAgICBTdHJpbmcgKiwgQ2FyZGluYWwgKikpOworc3RhdGljIFh0QWN0aW9uc1JlYwlwdWxsQWN0aW9uWzJdID0geworICAgIHsgIm1lbnUtZGVsYXllZHBvcHVwIiwgKFh0QWN0aW9uUHJvYylndWlfYXRoZW5hX2RlbGF5ZWRfYXJtX2FjdGlvbn0sCisgICAgeyAibWVudS1wb3Bkb3duc3VibWVudXMiLCAoWHRBY3Rpb25Qcm9jKWd1aV9hdGhlbmFfcG9wZG93bl9zdWJtZW51c19hY3Rpb259Cit9OworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1RPT0xCQVIKK3N0YXRpYyB2b2lkIGd1aV9tY2hfcmVzZXRfZm9jdXMgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgV2lkZ2V0IHRvb2xCYXIgPSAoV2lkZ2V0KTA7CisjZW5kaWYKKworc3RhdGljIHZvaWQgZ3VpX2F0aGVuYV9zY3JvbGxfY2JfanVtcAlfX0FSR1MoKFdpZGdldCwgWHRQb2ludGVyLCBYdFBvaW50ZXIpKTsKK3N0YXRpYyB2b2lkIGd1aV9hdGhlbmFfc2Nyb2xsX2NiX3Njcm9sbCBfX0FSR1MoKFdpZGdldCwgWHRQb2ludGVyLCBYdFBvaW50ZXIpKTsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX01FTlUpCitzdGF0aWMgdm9pZCBndWlfYXRoZW5hX21lbnVfY29sb3JzIF9fQVJHUygoV2lkZ2V0IGlkKSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIGd1aV9hdGhlbmFfc2Nyb2xsX2NvbG9ycyBfX0FSR1MoKFdpZGdldCBpZCkpOworCisjaWZkZWYgRkVBVF9NRU5VCitzdGF0aWMgWHRUcmFuc2xhdGlvbnMJcG9wdXBUcmFucywgcGFyZW50VHJhbnMsIG1lbnVUcmFucywgc3VwZXJtZW51VHJhbnM7CitzdGF0aWMgUGl4bWFwCQlwdWxsZXJCaXRtYXAgPSBOb25lOworc3RhdGljIGludAkJcHVsbGVyX3dpZHRoID0gMDsKKyNlbmRpZgorCisvKgorICogU2Nyb2xsYmFyIGNhbGxiYWNrIChYdE5qdW1wUHJvYykgZm9yIHdoZW4gdGhlIHNjcm9sbGJhciBpcyBkcmFnZ2VkIHdpdGggdGhlCisgKiBsZWZ0IG9yIG1pZGRsZSBtb3VzZSBidXR0b24uCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK2d1aV9hdGhlbmFfc2Nyb2xsX2NiX2p1bXAodywgY2xpZW50X2RhdGEsIGNhbGxfZGF0YSkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGEsIGNhbGxfZGF0YTsKK3sKKyAgICBzY3JvbGxiYXJfVCAqc2IsICpzYl9pbmZvOworICAgIGxvbmcJdmFsdWU7CisKKyAgICBzYiA9IGd1aV9maW5kX3Njcm9sbGJhcigobG9uZyljbGllbnRfZGF0YSk7CisKKyAgICBpZiAoc2IgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgZWxzZSBpZiAoc2ItPndwICE9IE5VTEwpCSAgICAvKiBMZWZ0IG9yIHJpZ2h0IHNjcm9sbGJhciAqLworICAgIHsKKwkvKgorCSAqIENhcmVmdWw6IG5lZWQgdG8gZ2V0IHNjcm9sbGJhciBpbmZvIG91dCBvZiBmaXJzdCAobGVmdCkgc2Nyb2xsYmFyCisJICogZm9yIHdpbmRvdywgYnV0IGtlZXAgcmVhbCBzY3JvbGxiYXIgdG9vIGJlY2F1c2Ugd2UgbXVzdCBwYXNzIGl0IHRvCisJICogZ3VpX2RyYWdfc2Nyb2xsYmFyKCkuCisJICovCisJc2JfaW5mbyA9ICZzYi0+d3AtPndfc2Nyb2xsYmFyc1swXTsKKyAgICB9CisgICAgZWxzZQkgICAgLyogQm90dG9tIHNjcm9sbGJhciAqLworCXNiX2luZm8gPSBzYjsKKworICAgIHZhbHVlID0gKGxvbmcpKCooKGZsb2F0ICopY2FsbF9kYXRhKSAqIChmbG9hdCkoc2JfaW5mby0+bWF4ICsgMSkgKyAwLjAwMSk7CisgICAgaWYgKHZhbHVlID4gc2JfaW5mby0+bWF4KQorCXZhbHVlID0gc2JfaW5mby0+bWF4OworCisgICAgZ3VpX2RyYWdfc2Nyb2xsYmFyKHNiLCB2YWx1ZSwgVFJVRSk7Cit9CisKKy8qCisgKiBTY3JvbGxiYXIgY2FsbGJhY2sgKFh0TnNjcm9sbFByb2MpIGZvciBwYWdpbmcgdXAgb3IgZG93biB3aXRoIHRoZSBsZWZ0IG9yCisgKiByaWdodCBtb3VzZSBidXR0b25zLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitndWlfYXRoZW5hX3Njcm9sbF9jYl9zY3JvbGwodywgY2xpZW50X2RhdGEsIGNhbGxfZGF0YSkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGEsIGNhbGxfZGF0YTsKK3sKKyAgICBzY3JvbGxiYXJfVCAqc2IsICpzYl9pbmZvOworICAgIGxvbmcJdmFsdWU7CisgICAgaW50CQlkYXRhID0gKGludCkobG9uZyljYWxsX2RhdGE7CisgICAgaW50CQlwYWdlOworCisgICAgc2IgPSBndWlfZmluZF9zY3JvbGxiYXIoKGxvbmcpY2xpZW50X2RhdGEpOworCisgICAgaWYgKHNiID09IE5VTEwpCisJcmV0dXJuOworICAgIGlmIChzYi0+d3AgIT0gTlVMTCkJCS8qIExlZnQgb3IgcmlnaHQgc2Nyb2xsYmFyICovCisgICAgeworCS8qCisJICogQ2FyZWZ1bDogbmVlZCB0byBnZXQgc2Nyb2xsYmFyIGluZm8gb3V0IG9mIGZpcnN0IChsZWZ0KSBzY3JvbGxiYXIKKwkgKiBmb3Igd2luZG93LCBidXQga2VlcCByZWFsIHNjcm9sbGJhciB0b28gYmVjYXVzZSB3ZSBtdXN0IHBhc3MgaXQgdG8KKwkgKiBndWlfZHJhZ19zY3JvbGxiYXIoKS4KKwkgKi8KKwlzYl9pbmZvID0gJnNiLT53cC0+d19zY3JvbGxiYXJzWzBdOworCisJaWYgKHNiX2luZm8tPnNpemUgPiA1KQorCSAgICBwYWdlID0gc2JfaW5mby0+c2l6ZSAtIDI7CSAgICAvKiB1c2UgdHdvIGxpbmVzIG9mIGNvbnRleHQgKi8KKwllbHNlCisJICAgIHBhZ2UgPSBzYl9pbmZvLT5zaXplOworI2lmZGVmIEZFQVRfR1VJX05FWFRBVworCWlmIChkYXRhIDwgMCkKKwl7CisJICAgIGRhdGEgPSAoZGF0YSAtIGd1aS5jaGFyX2hlaWdodCArIDEpIC8gZ3VpLmNoYXJfaGVpZ2h0OworCSAgICBpZiAoZGF0YSA+IC1zYl9pbmZvLT5zaXplKQorCQlkYXRhID0gLTE7CisJICAgIGVsc2UKKwkJZGF0YSA9IC1wYWdlOworCX0KKwllbHNlIGlmIChkYXRhID4gMCkKKwl7CisJICAgIGRhdGEgPSAoZGF0YSArIGd1aS5jaGFyX2hlaWdodCAtIDEpIC8gZ3VpLmNoYXJfaGVpZ2h0OworCSAgICBpZiAoZGF0YSA8IHNiX2luZm8tPnNpemUpCisJCWRhdGEgPSAxOworCSAgICBlbHNlCisJCWRhdGEgPSBwYWdlOworCX0KKyNlbHNlCisJc3dpdGNoIChkYXRhKQorCXsKKwkgICAgY2FzZSAgT05FX0xJTkVfREFUQTogZGF0YSA9IDE7IGJyZWFrOworCSAgICBjYXNlIC1PTkVfTElORV9EQVRBOiBkYXRhID0gLTE7IGJyZWFrOworCSAgICBjYXNlICBPTkVfUEFHRV9EQVRBOiBkYXRhID0gcGFnZTsgYnJlYWs7CisJICAgIGNhc2UgLU9ORV9QQUdFX0RBVEE6IGRhdGEgPSAtcGFnZTsgYnJlYWs7CisJICAgIGNhc2UgIEVORF9QQUdFX0RBVEE6IGRhdGEgPSBzYl9pbmZvLT5tYXg7IGJyZWFrOworCSAgICBjYXNlIC1FTkRfUEFHRV9EQVRBOiBkYXRhID0gLXNiX2luZm8tPm1heDsgYnJlYWs7CisJCQlkZWZhdWx0OiBkYXRhID0gMDsgYnJlYWs7CisJfQorI2VuZGlmCisgICAgfQorICAgIGVsc2UJCQkvKiBCb3R0b20gc2Nyb2xsYmFyICovCisgICAgeworCXNiX2luZm8gPSBzYjsKKyNpZmRlZiBGRUFUX0dVSV9ORVhUQVcKKwlpZiAoZGF0YSA8IDApCisJeworCSAgICBkYXRhID0gKGRhdGEgLSBndWkuY2hhcl93aWR0aCArIDEpIC8gZ3VpLmNoYXJfd2lkdGg7CisJICAgIGlmIChkYXRhID4gLXNiLT5zaXplKQorCQlkYXRhID0gLTE7CisJfQorCWVsc2UgaWYgKGRhdGEgPiAwKQorCXsKKwkgICAgZGF0YSA9IChkYXRhICsgZ3VpLmNoYXJfd2lkdGggLSAxKSAvIGd1aS5jaGFyX3dpZHRoOworCSAgICBpZiAoZGF0YSA8IHNiLT5zaXplKQorCQlkYXRhID0gMTsKKwl9CisjZW5kaWYKKwlpZiAoZGF0YSA8IC0xKQkJLyogcGFnZS13aWR0aCBsZWZ0ICovCisJeworCSAgICBpZiAoc2ItPnNpemUgPiA4KQorCQlkYXRhID0gLShzYi0+c2l6ZSAtIDUpOworCSAgICBlbHNlCisJCWRhdGEgPSAtc2ItPnNpemU7CisJfQorCWVsc2UgaWYgKGRhdGEgPiAxKQkvKiBwYWdlLXdpZHRoIHJpZ2h0ICovCisJeworCSAgICBpZiAoc2ItPnNpemUgPiA4KQorCQlkYXRhID0gKHNiLT5zaXplIC0gNSk7CisJICAgIGVsc2UKKwkJZGF0YSA9IHNiLT5zaXplOworCX0KKyAgICB9CisKKyAgICB2YWx1ZSA9IHNiX2luZm8tPnZhbHVlICsgZGF0YTsKKyAgICBpZiAodmFsdWUgPiBzYl9pbmZvLT5tYXgpCisJdmFsdWUgPSBzYl9pbmZvLT5tYXg7CisgICAgZWxzZSBpZiAodmFsdWUgPCAwKQorCXZhbHVlID0gMDsKKworICAgIC8qIFVwZGF0ZSB0aGUgYm90dG9tIHNjcm9sbGJhciBhbiBleHRyYSB0aW1lICh3aHkgaXMgdGhpcyBuZWVkZWQ/PyAqLworICAgIGlmIChzYi0+d3AgPT0gTlVMTCkJCS8qIEJvdHRvbSBzY3JvbGxiYXIgKi8KKwlndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIoc2IsIHZhbHVlLCBzYi0+c2l6ZSwgc2ItPm1heCk7CisKKyAgICBndWlfZHJhZ19zY3JvbGxiYXIoc2IsIHZhbHVlLCBGQUxTRSk7Cit9CisKKy8qCisgKiBDcmVhdGUgYWxsIHRoZSBBdGhlbmEgd2lkZ2V0cyBuZWNlc3NhcnkuCisgKi8KKyAgICB2b2lkCitndWlfeDExX2NyZWF0ZV93aWRnZXRzKCkKK3sKKyAgICAvKgorICAgICAqIFdlIGRvbid0IGhhdmUgYW55IGJvcmRlcnMgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSB0ZXh0QXJlYSB0byB3b3JyeQorICAgICAqIGFib3V0IHNvIG9ubHkgc2tpcCBvdmVyIHRoZSBjb25maWd1cmVkIGJvcmRlciB3aWR0aC4KKyAgICAgKi8KKyAgICBndWkuYm9yZGVyX29mZnNldCA9IGd1aS5ib3JkZXJfd2lkdGg7CisKKyNpZiAwIC8qIG5vdCBuZWVkZWQ/ICovCisgICAgWHRJbml0aWFsaXplV2lkZ2V0Q2xhc3MoZm9ybVdpZGdldENsYXNzKTsKKyAgICBYdEluaXRpYWxpemVXaWRnZXRDbGFzcyhib3hXaWRnZXRDbGFzcyk7CisgICAgWHRJbml0aWFsaXplV2lkZ2V0Q2xhc3MoY29yZVdpZGdldENsYXNzKTsKKyNpZmRlZiBGRUFUX01FTlUKKyAgICBYdEluaXRpYWxpemVXaWRnZXRDbGFzcyhtZW51QnV0dG9uV2lkZ2V0Q2xhc3MpOworI2VuZGlmCisgICAgWHRJbml0aWFsaXplV2lkZ2V0Q2xhc3Moc2ltcGxlTWVudVdpZGdldENsYXNzKTsKKyNpZmRlZiBGRUFUX0dVSV9ORVhUQVcKKyAgICBYdEluaXRpYWxpemVXaWRnZXRDbGFzcyhzY3JvbGxiYXJXaWRnZXRDbGFzcyk7CisjZWxzZQorICAgIFh0SW5pdGlhbGl6ZVdpZGdldENsYXNzKHZpbV9zY3JvbGxiYXJXaWRnZXRDbGFzcyk7CisjZW5kaWYKKyNlbmRpZgorCisgICAgLyogVGhlIGZvcm0gY29udGFpbmluZyBhbGwgdGhlIG90aGVyIHdpZGdldHMgKi8KKyAgICB2aW1Gb3JtID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoInZpbUZvcm0iLAorCWZvcm1XaWRnZXRDbGFzcywJdmltU2hlbGwsCisJWHROYm9yZGVyV2lkdGgsCQkwLAorCU5VTEwpOworICAgIGd1aV9hdGhlbmFfc2Nyb2xsX2NvbG9ycyh2aW1Gb3JtKTsKKworI2lmZGVmIEZFQVRfTUVOVQorICAgIC8qIFRoZSB0b3AgbWVudSBiYXIgKi8KKyAgICBtZW51QmFyID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoIm1lbnVCYXIiLAorCWJveFdpZGdldENsYXNzLAkJdmltRm9ybSwKKwlYdE5yZXNpemFibGUsCQlUcnVlLAorCVh0TnRvcCwJCQlYdENoYWluVG9wLAorCVh0TmJvdHRvbSwJCVh0Q2hhaW5Ub3AsCisJWHRObGVmdCwJCVh0Q2hhaW5MZWZ0LAorCVh0TnJpZ2h0LAkJWHRDaGFpblJpZ2h0LAorCVh0Tmluc2VydFBvc2l0aW9uLAlhdGhlbmFfY2FsY3VsYXRlX2luc19wb3MsCisJTlVMTCk7CisgICAgZ3VpX2F0aGVuYV9tZW51X2NvbG9ycyhtZW51QmFyKTsKKyAgICBpZiAoZ3VpLm1lbnVfZmdfcGl4ZWwgIT0gSU5WQUxDT0xPUikKKwlYdFZhU2V0VmFsdWVzKG1lbnVCYXIsIFh0TmJvcmRlckNvbG9yLCBndWkubWVudV9mZ19waXhlbCwgTlVMTCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVE9PTEJBUgorICAgIC8qIERvbid0IGNyZWF0ZSBpdCBNYW5hZ2VkLCBpdCB3aWxsIGJlIG1hbmFnZWQgd2hlbiBjcmVhdGluZyB0aGUgZmlyc3QKKyAgICAgKiBpdGVtLiAgT3RoZXJ3aXNlIGFuIGVtcHR5IHRvb2xiYXIgc2hvd3MgdXAuICovCisgICAgdG9vbEJhciA9IFh0VmFDcmVhdGVXaWRnZXQoInRvb2xCYXIiLAorCWJveFdpZGdldENsYXNzLAkJdmltRm9ybSwKKwlYdE5yZXNpemFibGUsCQlUcnVlLAorCVh0TnRvcCwJCQlYdENoYWluVG9wLAorCVh0TmJvdHRvbSwJCVh0Q2hhaW5Ub3AsCisJWHRObGVmdCwJCVh0Q2hhaW5MZWZ0LAorCVh0TnJpZ2h0LAkJWHRDaGFpblJpZ2h0LAorCVh0Tm9yaWVudGF0aW9uLAkJWHRvcmllbnRIb3Jpem9udGFsLAorCVh0TmhTcGFjZSwJCTEsCisJWHROdlNwYWNlLAkJMywKKwlYdE5pbnNlcnRQb3NpdGlvbiwJYXRoZW5hX2NhbGN1bGF0ZV9pbnNfcG9zLAorCU5VTEwpOworICAgIGd1aV9hdGhlbmFfbWVudV9jb2xvcnModG9vbEJhcik7CisjZW5kaWYKKworICAgIC8qIFRoZSB0ZXh0IGFyZWEuICovCisgICAgdGV4dEFyZWEgPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgidGV4dEFyZWEiLAorCWNvcmVXaWRnZXRDbGFzcywJdmltRm9ybSwKKwlYdE5yZXNpemFibGUsCQlUcnVlLAorCVh0TnRvcCwJCQlYdENoYWluVG9wLAorCVh0TmJvdHRvbSwJCVh0Q2hhaW5Ub3AsCisJWHRObGVmdCwJCVh0Q2hhaW5MZWZ0LAorCVh0TnJpZ2h0LAkJWHRDaGFpbkxlZnQsCisJWHROYmFja2dyb3VuZCwJCWd1aS5iYWNrX3BpeGVsLAorCVh0TmJvcmRlcldpZHRoLAkJMCwKKwlOVUxMKTsKKworICAgIC8qCisgICAgICogSW5zdGFsbCB0aGUgY2FsbGJhY2tzLgorICAgICAqLworICAgIGd1aV94MTFfY2FsbGJhY2tzKHRleHRBcmVhLCB2aW1Gb3JtKTsKKworI2lmZGVmIEZFQVRfTUVOVQorICAgIHBvcHVwVHJhbnMgPSBYdFBhcnNlVHJhbnNsYXRpb25UYWJsZSgKKwkgICAgIjxFbnRlcldpbmRvdz46IG1lbnUtcG9wZG93bnN1Ym1lbnVzKCkgaGlnaGxpZ2h0KCkgbWVudS1kZWxheWVkcG9wdXAoKVxuIgorCSAgICAiPExlYXZlV2luZG93PjogdW5oaWdobGlnaHQoKVxuIgorCSAgICAiPEJ0blVwPjogbWVudS1wb3Bkb3duc3VibWVudXMoKSBYdE1lbnVQb3Bkb3duKCkgbm90aWZ5KCkgdW5oaWdobGlnaHQoKVxuIgorCSAgICAiPE1vdGlvbj46IGhpZ2hsaWdodCgpIG1lbnUtZGVsYXllZHBvcHVwKCkiKTsKKyAgICBwYXJlbnRUcmFucyA9IFh0UGFyc2VUcmFuc2xhdGlvblRhYmxlKCI8TGVhdmVXaW5kb3c+OiB1bmhpZ2hsaWdodCgpIik7CisgICAgbWVudVRyYW5zID0gWHRQYXJzZVRyYW5zbGF0aW9uVGFibGUoCisJICAgICI8RW50ZXJXaW5kb3c+OiBtZW51LXBvcGRvd25zdWJtZW51cygpIGhpZ2hsaWdodCgpIG1lbnUtZGVsYXllZHBvcHVwKClcbiIKKwkgICAgIjxMZWF2ZVdpbmRvdz46IG1lbnUtcG9wZG93bnN1Ym1lbnVzKCkgWHRNZW51UG9wZG93bigpIHVuaGlnaGxpZ2h0KClcbiIKKwkgICAgIjxCdG5VcD46IG5vdGlmeSgpIHVuaGlnaGxpZ2h0KClcbiIKKwkgICAgIjxCdG5Nb3Rpb24+OiBoaWdobGlnaHQoKSBtZW51LWRlbGF5ZWRwb3B1cCgpIik7CisgICAgc3VwZXJtZW51VHJhbnMgPSBYdFBhcnNlVHJhbnNsYXRpb25UYWJsZSgKKwkgICAgIjxFbnRlcldpbmRvdz46IG1lbnUtcG9wZG93bnN1Ym1lbnVzKCkgaGlnaGxpZ2h0KCkgbWVudS1kZWxheWVkcG9wdXAoKVxuIgorCSAgICAiPExlYXZlV2luZG93PjogdW5oaWdobGlnaHQoKVxuIgorCSAgICAiPEJ0blVwPjogbWVudS1wb3Bkb3duc3VibWVudXMoKSBYdE1lbnVQb3Bkb3duKCkgbm90aWZ5KCkgdW5oaWdobGlnaHQoKVxuIgorCSAgICAiPEJ0bk1vdGlvbj46IGhpZ2hsaWdodCgpIG1lbnUtZGVsYXllZHBvcHVwKCkiKTsKKworICAgIFh0QXBwQWRkQWN0aW9ucyhYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KHZpbUZvcm0pLCBwdWxsQWN0aW9uLAorCQkgICAgWHROdW1iZXIocHVsbEFjdGlvbikpOworI2VuZGlmCisKKyAgICAvKiBQcmV0ZW5kIHdlIGRvbid0IGhhdmUgaW5wdXQgZm9jdXMsIHdlIHdpbGwgZ2V0IGFuIGV2ZW50IGlmIHdlIGRvLiAqLworICAgIGd1aS5pbl9mb2N1cyA9IEZBTFNFOworfQorCisjaWZkZWYgRkVBVF9NRU5VCisvKgorICogQ2FsY3VsYXRlcyB0aGUgUGl4bWFwIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBjdXJyZW50IG1lbnUgZm9udC4KKyAqLworICAgIHN0YXRpYyBQaXhtYXAKK2d1aV9hdGhlbmFfY3JlYXRlX3B1bGxyaWdodF9waXhtYXAodykKKyAgICBXaWRnZXQgIHc7Cit7CisgICAgUGl4bWFwICByZXR2YWw7CisjaWZkZWYgRk9OVFNFVF9BTFdBWVMKKyAgICBYRm9udFNldAlmb250ID0gTm9uZTsKKyNlbHNlCisgICAgWEZvbnRTdHJ1Y3QJKmZvbnQgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBGT05UU0VUX0FMV0FZUworICAgIGlmIChndWkubWVudV9mb250c2V0ID09IE5PRk9OVFNFVCkKKyNlbHNlCisgICAgaWYgKGd1aS5tZW51X2ZvbnQgPT0gTk9GT05UKQorI2VuZGlmCisgICAgeworCVhybVZhbHVlIGZyb20sIHRvOworCVdpZGdldExpc3QgIGNoaWxkcmVuOworCUNhcmRpbmFsICAgIG51bV9jaGlsZHJlbjsKKworI2lmZGVmIEZPTlRTRVRfQUxXQVlTCisJZnJvbS5zaXplID0gc3RybGVuKGZyb20uYWRkciA9IFh0RGVmYXVsdEZvbnRTZXQpOworCXRvLmFkZHIgPSAoWHRQb2ludGVyKSZmb250OworCXRvLnNpemUgPSBzaXplb2YoWEZvbnRTZXQpOworI2Vsc2UKKwlmcm9tLnNpemUgPSBzdHJsZW4oZnJvbS5hZGRyID0gWHREZWZhdWx0Rm9udCk7CisJdG8uYWRkciA9IChYdFBvaW50ZXIpJmZvbnQ7CisJdG8uc2l6ZSA9IHNpemVvZihYRm9udFN0cnVjdCAqKTsKKyNlbmRpZgorCS8qIEFzc3VtcHRpb246IFRoZSBtZW51QmFyIGNoaWxkcmVuIHdpbGwgdXNlIHRoZSBzYW1lIGZvbnQgYXMgdGhlCisJICoJICAgICAgIHB1bGxkb3duIG1lbnUgaXRlbXMgQU5EIHRoZXkgd2lsbCBhbGwgYmUgb2YgdHlwZQorCSAqCSAgICAgICBYdE5mb250LgorCSAqLworCVh0VmFHZXRWYWx1ZXMobWVudUJhciwgWHROY2hpbGRyZW4sICZjaGlsZHJlbiwKKwkJCSAgICAgICBYdE5udW1DaGlsZHJlbiwgJm51bV9jaGlsZHJlbiwKKwkJCSAgICAgICBOVUxMKTsKKwlpZiAoWHRDb252ZXJ0QW5kU3RvcmUodyA/IHcgOgorCQkJCShudW1fY2hpbGRyZW4gPiAwKSA/IGNoaWxkcmVuWzBdIDogbWVudUJhciwKKwkJCSAgICAgIFh0UlN0cmluZywgJmZyb20sCisjaWZkZWYgRk9OVFNFVF9BTFdBWVMKKwkJCSAgICAgIFh0UkZvbnRTZXQsICZ0bworI2Vsc2UKKwkJCSAgICAgIFh0UkZvbnRTdHJ1Y3QsICZ0bworI2VuZGlmCisJCSAgICApID09IEZhbHNlKQorCSAgICByZXR1cm4gTm9uZTsKKwkvKiAiZm9udCIgc2hvdWxkIG5vdyBjb250YWluIGRhdGEgKi8KKyAgICB9CisgICAgZWxzZQorI2lmZGVmIEZPTlRTRVRfQUxXQVlTCisJZm9udCA9IChYRm9udFNldClndWkubWVudV9mb250c2V0OworI2Vsc2UKKwlmb250ID0gKFhGb250U3RydWN0ICopZ3VpLm1lbnVfZm9udDsKKyNlbmRpZgorCisgICAgeworCWludAkgICAgd2lkdGgsIGhlaWdodDsKKwlHQwkgICAgZHJhd19nYywgdW5kcmF3X2djOworCVhHQ1ZhbHVlcyAgIGdjX3ZhbHVlczsKKwlYUG9pbnQJICAgIHBvaW50c1szXTsKKworI2lmZGVmIEZPTlRTRVRfQUxXQVlTCisJaGVpZ2h0ID0gZm9udHNldF9oZWlnaHQyKGZvbnQpOworI2Vsc2UKKwloZWlnaHQgPSBmb250LT5tYXhfYm91bmRzLmFzY2VudCArIGZvbnQtPm1heF9ib3VuZHMuZGVzY2VudDsKKyNlbmRpZgorCXdpZHRoID0gaGVpZ2h0IC0gMjsKKwlwdWxsZXJfd2lkdGggPSB3aWR0aCArIDQ7CisJcmV0dmFsID0gWENyZWF0ZVBpeG1hcChndWkuZHB5LERlZmF1bHRSb290V2luZG93KGd1aS5kcHkpLHdpZHRoLAorCQkJICAgICAgIGhlaWdodCwgMSk7CisJZ2NfdmFsdWVzLmZvcmVncm91bmQgPSAxOworCWdjX3ZhbHVlcy5iYWNrZ3JvdW5kID0gMDsKKwlkcmF3X2djID0gWENyZWF0ZUdDKGd1aS5kcHksIHJldHZhbCwKKwkJICAgIEdDRm9yZWdyb3VuZCB8IEdDQmFja2dyb3VuZCwKKwkJICAgICZnY192YWx1ZXMpOworCWdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gMDsKKwlnY192YWx1ZXMuYmFja2dyb3VuZCA9IDE7CisJdW5kcmF3X2djID0gWENyZWF0ZUdDKGd1aS5kcHksIHJldHZhbCwKKwkJCSAgICAgIEdDRm9yZWdyb3VuZCB8IEdDQmFja2dyb3VuZCwKKwkJCSAgICAgICZnY192YWx1ZXMpOworCXBvaW50c1swXS54ID0gMDsKKwlwb2ludHNbMF0ueSA9IDA7CisJcG9pbnRzWzFdLnggPSB3aWR0aCAtIDE7CisJcG9pbnRzWzFdLnkgPSAoaGVpZ2h0IC0gMSkgLyAyOworCXBvaW50c1syXS54ID0gMDsKKwlwb2ludHNbMl0ueSA9IGhlaWdodCAtIDE7CisJWEZpbGxSZWN0YW5nbGUoZ3VpLmRweSwgcmV0dmFsLCB1bmRyYXdfZ2MsIDAsIDAsIGhlaWdodCwgaGVpZ2h0KTsKKwlYRmlsbFBvbHlnb24oZ3VpLmRweSwgcmV0dmFsLCBkcmF3X2djLCBwb2ludHMsIFh0TnVtYmVyKHBvaW50cyksCisJCSAgICAgQ29udmV4LCBDb29yZE1vZGVPcmlnaW4pOworCVhGcmVlR0MoZ3VpLmRweSwgZHJhd19nYyk7CisJWEZyZWVHQyhndWkuZHB5LCB1bmRyYXdfZ2MpOworICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorI2VuZGlmCisKKy8qCisgKiBDYWxsZWQgd2hlbiB0aGUgR1VJIGlzIG5vdCBnb2luZyB0byBzdGFydCBhZnRlciBhbGwuCisgKi8KKyAgICB2b2lkCitndWlfeDExX2Rlc3Ryb3lfd2lkZ2V0cygpCit7CisgICAgdGV4dEFyZWEgPSBOVUxMOworI2lmZGVmIEZFQVRfTUVOVQorICAgIG1lbnVCYXIgPSBOVUxMOworI2VuZGlmCisjaWZkZWYgRkVBVF9UT09MQkFSCisgICAgdG9vbEJhciA9IE5VTEw7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2d1aV9tY2hfc2V0X3Rvb2xiYXJfcG9zKHgsIHksIHcsIGgpCisgICAgaW50CSAgICB4OworICAgIGludAkgICAgeTsKKyAgICBpbnQJICAgIHc7CisgICAgaW50CSAgICBoOworeworICAgIERpbWVuc2lvbglib3JkZXI7CisgICAgaW50CQloZWlnaHQ7CisKKyAgICBpZiAoIVh0SXNNYW5hZ2VkKHRvb2xCYXIpKQkvKiBub3RoaW5nIHRvIGRvICovCisJcmV0dXJuOworICAgIFh0VW5tYW5hZ2VDaGlsZCh0b29sQmFyKTsKKyAgICBYdFZhR2V0VmFsdWVzKHRvb2xCYXIsCisJCVh0TmJvcmRlcldpZHRoLCAmYm9yZGVyLAorCQlOVUxMKTsKKyAgICBoZWlnaHQgPSBoIC0gMiAqIGJvcmRlcjsKKyAgICBpZiAoaGVpZ2h0IDwgMCkKKwloZWlnaHQgPSAxOworICAgIFh0VmFTZXRWYWx1ZXModG9vbEJhciwKKwkJICBYdE5ob3JpekRpc3RhbmNlLCB4LAorCQkgIFh0TnZlcnREaXN0YW5jZSwgeSwKKwkJICBYdE53aWR0aCwgdyAtIDIgKiBib3JkZXIsCisJCSAgWHROaGVpZ2h0LAloZWlnaHQsCisJCSAgTlVMTCk7CisgICAgWHRNYW5hZ2VDaGlsZCh0b29sQmFyKTsKK30KKyNlbmRpZgorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfdGV4dF9hcmVhX3Bvcyh4LCB5LCB3LCBoKQorICAgIGludAkgICAgeDsKKyAgICBpbnQJICAgIHk7CisgICAgaW50CSAgICB3OworICAgIGludAkgICAgaDsKK3sKKyAgICBYdFVubWFuYWdlQ2hpbGQodGV4dEFyZWEpOworICAgIFh0VmFTZXRWYWx1ZXModGV4dEFyZWEsCisJCSAgWHROaG9yaXpEaXN0YW5jZSwgeCwKKwkJICBYdE52ZXJ0RGlzdGFuY2UsIHksCisJCSAgWHROd2lkdGgsIHcsCisJCSAgWHROaGVpZ2h0LCBoLAorCQkgIE5VTEwpOworICAgIFh0TWFuYWdlQ2hpbGQodGV4dEFyZWEpOworI2lmZGVmIEZFQVRfVE9PTEJBUgorICAgIC8qIEdpdmUga2V5Ym9hcmQgZm9jdXMgdG8gdGhlIHRleHRBcmVhIGluc3RlYWQgb2YgdGhlIHRvb2xiYXIuICovCisgICAgZ3VpX21jaF9yZXNldF9mb2N1cygpOworI2VuZGlmCit9CisKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKy8qCisgKiBBIHRvb2xiYXIgYnV0dG9uIGhhcyBiZWVuIHB1c2hlZDsgbm93IHJlc2V0IHRoZSBpbnB1dCBmb2N1cworICogc3VjaCB0aGF0IHRoZSB1c2VyIGNhbiB0eXBlIHBhZ2UgdXAvZG93biBldGMuIGFuZCBoYXZlIHRoZQorICogaW5wdXQgZ28gdG8gdGhlIGVkaXRvciB3aW5kb3csIG5vdCB0aGUgYnV0dG9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX21jaF9yZXNldF9mb2N1cygpCit7CisgICAgWHRTZXRLZXlib2FyZEZvY3VzKHZpbUZvcm0sIHRleHRBcmVhKTsKK30KKyNlbmRpZgorCisKKyAgICB2b2lkCitndWlfeDExX3NldF9iYWNrX2NvbG9yKCkKK3sKKyAgICBpZiAodGV4dEFyZWEgIT0gTlVMTCkKKwlYdFZhU2V0VmFsdWVzKHRleHRBcmVhLAorCQkgIFh0TmJhY2tncm91bmQsIGd1aS5iYWNrX3BpeGVsLAorCQkgIE5VTEwpOworfQorCisjaWYgZGVmaW5lZChGRUFUX01FTlUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogTWVudSBzdHVmZi4KKyAqLworCitzdGF0aWMgY2hhcl91CSptYWtlX3B1bGxfbmFtZSBfX0FSR1MoKGNoYXJfdSAqIG5hbWUpKTsKK3N0YXRpYyBXaWRnZXQJZ2V0X3BvcHVwX2VudHJ5IF9fQVJHUygoV2lkZ2V0IHcpKTsKK3N0YXRpYyBXaWRnZXQJc3VibWVudV93aWRnZXQgX19BUkdTKChXaWRnZXQpKTsKK3N0YXRpYyBCb29sZWFuCWhhc19zdWJtZW51IF9fQVJHUygoV2lkZ2V0KSk7CitzdGF0aWMgdm9pZCBndWlfbWNoX3N1Ym1lbnVfY2hhbmdlIF9fQVJHUygodmltbWVudV9UICptcCwgaW50IGNvbG9ycykpOworc3RhdGljIHZvaWQgZ3VpX2F0aGVuYV9tZW51X2ZvbnQgX19BUkdTKChXaWRnZXQgaWQpKTsKK3N0YXRpYyBCb29sZWFuCWd1aV9hdGhlbmFfbWVudV9oYXNfc3VibWVudXMgX19BUkdTKChXaWRnZXQsIFdpZGdldCkpOworCisgICAgdm9pZAorZ3VpX21jaF9lbmFibGVfbWVudShmbGFnKQorICAgIGludAkgICAgZmxhZzsKK3sKKyAgICBpZiAoZmxhZykKKyAgICB7CisJWHRNYW5hZ2VDaGlsZChtZW51QmFyKTsKKyMgaWZkZWYgRkVBVF9UT09MQkFSCisJaWYgKFh0SXNNYW5hZ2VkKHRvb2xCYXIpKQorCXsKKwkgICAgWHRWYVNldFZhbHVlcyh0b29sQmFyLAorCQlYdE52ZXJ0RGlzdGFuY2UsICAgIGd1aS5tZW51X2hlaWdodCwKKwkJTlVMTCk7CisJICAgIFh0VmFTZXRWYWx1ZXModGV4dEFyZWEsCisJCVh0TnZlcnREaXN0YW5jZSwgICAgZ3VpLm1lbnVfaGVpZ2h0ICsgZ3VpLnRvb2xiYXJfaGVpZ2h0LAorCQlOVUxMKTsKKwl9CisjIGVuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisJWHRVbm1hbmFnZUNoaWxkKG1lbnVCYXIpOworIyBpZmRlZiBGRUFUX1RPT0xCQVIKKwlpZiAoWHRJc01hbmFnZWQodG9vbEJhcikpCisJeworCSAgICBYdFZhU2V0VmFsdWVzKHRvb2xCYXIsCisJCVh0TnZlcnREaXN0YW5jZSwgICAgMCwKKwkJTlVMTCk7CisJfQorIyBlbmRpZgorICAgIH0KK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X21lbnVfcG9zKHgsIHksIHcsIGgpCisgICAgaW50CSAgICB4OworICAgIGludAkgICAgeTsKKyAgICBpbnQJICAgIHc7CisgICAgaW50CSAgICBoOworeworICAgIERpbWVuc2lvbglib3JkZXI7CisgICAgaW50CQloZWlnaHQ7CisKKyAgICBYdFVubWFuYWdlQ2hpbGQobWVudUJhcik7CisgICAgWHRWYUdldFZhbHVlcyhtZW51QmFyLCBYdE5ib3JkZXJXaWR0aCwgJmJvcmRlciwgTlVMTCk7CisgICAgLyogYXZvaWQgdHJvdWJsZSB3aGVuIHRoZXJlIGFyZSBubyBtZW51IGl0ZW1zLCBhbmQgaCBpcyAxICovCisgICAgaGVpZ2h0ID0gaCAtIDIgKiBib3JkZXI7CisgICAgaWYgKGhlaWdodCA8IDApCisJaGVpZ2h0ID0gMTsKKyAgICBYdFZhU2V0VmFsdWVzKG1lbnVCYXIsCisJCVh0Tmhvcml6RGlzdGFuY2UsIHgsCisJCVh0TnZlcnREaXN0YW5jZSwgeSwKKwkJWHROd2lkdGgsIHcgLSAyICogYm9yZGVyLAorCQlYdE5oZWlnaHQsIGhlaWdodCwKKwkJTlVMTCk7CisgICAgWHRNYW5hZ2VDaGlsZChtZW51QmFyKTsKK30KKworLyoKKyAqIFVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbnNlcnRpb24gcG9zaXRpb24gb2YgYSB3aWRnZXQgd2l0aCByZXNwZWN0IHRvIGl0cworICogbmVpZ2hib3JzLgorICoKKyAqIFZhbGlkIHJhbmdlIG9mIHJldHVybiB2YWx1ZXMgaXM6IDAgKGJlZ2lubmluZyBvZiBjaGlsZHJlbikgdG8KKyAqCQkJCSAgICBudW1DaGlsZHJlbiAoZW5kIG9mIGNoaWxkcmVuKS4KKyAqLworICAgIHN0YXRpYyBDYXJkaW5hbAorYXRoZW5hX2NhbGN1bGF0ZV9pbnNfcG9zKHdpZGdldCkKKyAgICBXaWRnZXQJd2lkZ2V0OworeworICAgIC8qIEFzc3VtZSB0aGF0IGlmIHRoZSBwYXJlbnQgb2YgdGhlIHZpbW1lbnVfVCBpcyBOVUxMLCB0aGVuIHdlIGNhbiBnZXQKKyAgICAgKiB0byB0aGlzIG1lbnUgYnkgdHJhdmVyc2luZyAibmV4dCIsIHN0YXJ0aW5nIGF0ICJyb290X21lbnUiLgorICAgICAqCisgICAgICogVGhpcyBob2xkcyB0cnVlIGZvciBwb3B1cCBtZW51cywgdG9vbGJhciwgYW5kIHRvcGxldmVsIG1lbnUgaXRlbXMuCisgICAgICovCisKKyAgICAvKiBQb3B1cCBtZW51czogICJpZCIgaXMgTlVMTC4gT25seSBzdWJtZW51X2lkIGlzIHZhbGlkICovCisKKyAgICAvKiBNZW51cyB0aGF0IGFyZSBub3QgdG9wbGV2ZWw6ICJwYXJlbnQiIHdpbGwgYmUgbm9uLU5VTEwsICJpZCIgJgorICAgICAqICJzdWJtZW51X2lkIiB3aWxsIGJlIG5vbi1OVUxMLgorICAgICAqLworCisgICAgLyogVG9wbGV2ZWwgbWVudXM6ICJwYXJlbnQiIGlzIE5VTEwsIGlkIGlzIHRoZSB3aWRnZXQgb2YgdGhlIG1lbnUgaXRlbSAqLworCisgICAgV2lkZ2V0TGlzdAljaGlsZHJlbjsKKyAgICBDYXJkaW5hbAludW1fY2hpbGRyZW4gPSAwOworICAgIGludAkJcmV0dmFsOworICAgIEFyZwkJYXJnc1syXTsKKyAgICBpbnQJCW4gPSAwOworICAgIGludAkJaTsKKworICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmNoaWxkcmVuLCAmY2hpbGRyZW4pOyBuKys7CisgICAgWHRTZXRBcmcoYXJnc1tuXSwgWHRObnVtQ2hpbGRyZW4sICZudW1fY2hpbGRyZW4pOyBuKys7CisgICAgWHRHZXRWYWx1ZXMoWHRQYXJlbnQod2lkZ2V0KSwgYXJncywgbik7CisKKyAgICByZXR2YWwgPSBudW1fY2hpbGRyZW47CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGlsZHJlbjsgKytpKQorICAgIHsKKwlXaWRnZXQJY3VycmVudCA9IGNoaWxkcmVuW2ldOworCXZpbW1lbnVfVAkqbWVudSA9IE5VTEw7CisKKwlmb3IgKG1lbnUgPSAoYV9jdXJfbWVudS0+cGFyZW50ID09IE5VTEwpCisJCQkgICAgICAgPyByb290X21lbnUgOiBhX2N1cl9tZW51LT5wYXJlbnQtPmNoaWxkcmVuOworCQkJICAgICAgIG1lbnUgIT0gTlVMTDsKKwkJCSAgICAgICBtZW51ID0gbWVudS0+bmV4dCkKKwkgICAgaWYgKGN1cnJlbnQgPT0gbWVudS0+aWQKKwkJICAgICYmIGFfY3VyX21lbnUtPnByaW9yaXR5IDwgbWVudS0+cHJpb3JpdHkKKwkJICAgICYmIGkgPCByZXR2YWwpCisJCXJldHZhbCA9IGk7CisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgdm9pZAorZ3VpX21jaF9hZGRfbWVudShtZW51LCBpZHgpCisgICAgdmltbWVudV9UCSptZW51OworICAgIGludAkJaWR4OworeworICAgIGNoYXJfdQkqcHVsbHJpZ2h0X25hbWU7CisgICAgRGltZW5zaW9uCWhlaWdodCwgc3BhY2UsIGJvcmRlcjsKKyAgICB2aW1tZW51X1QJKnBhcmVudCA9IG1lbnUtPnBhcmVudDsKKworICAgIGFfY3VyX21lbnUgPSBtZW51OworICAgIGlmIChwYXJlbnQgPT0gTlVMTCkKKyAgICB7CisJaWYgKG1lbnVfaXNfcG9wdXAobWVudS0+ZG5hbWUpKQorCXsKKwkgICAgbWVudS0+c3VibWVudV9pZCA9IFh0VmFDcmVhdGVQb3B1cFNoZWxsKChjaGFyICopbWVudS0+ZG5hbWUsCisJCXNpbXBsZU1lbnVXaWRnZXRDbGFzcywJdmltU2hlbGwsCisJCVh0Tmluc2VydFBvc2l0aW9uLAlhdGhlbmFfY2FsY3VsYXRlX2luc19wb3MsCisJCVh0TnRyYW5zbGF0aW9ucywJcG9wdXBUcmFucywKKwkJTlVMTCk7CisJICAgIGd1aV9hdGhlbmFfbWVudV9jb2xvcnMobWVudS0+c3VibWVudV9pZCk7CisJfQorCWVsc2UgaWYgKG1lbnVfaXNfbWVudWJhcihtZW51LT5kbmFtZSkpCisJeworCSAgICBtZW51LT5pZCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KChjaGFyICopbWVudS0+ZG5hbWUsCisJCW1lbnVCdXR0b25XaWRnZXRDbGFzcywgbWVudUJhciwKKwkJWHRObWVudU5hbWUsCSAgICBtZW51LT5kbmFtZSwKKyNpZmRlZiBGT05UU0VUX0FMV0FZUworCQlYdE5pbnRlcm5hdGlvbmFsLCAgIFRydWUsCisjZW5kaWYKKwkJTlVMTCk7CisJICAgIGlmIChtZW51LT5pZCA9PSAoV2lkZ2V0KTApCisJCXJldHVybjsKKwkgICAgZ3VpX2F0aGVuYV9tZW51X2NvbG9ycyhtZW51LT5pZCk7CisJICAgIGd1aV9hdGhlbmFfbWVudV9mb250KG1lbnUtPmlkKTsKKworCSAgICBtZW51LT5zdWJtZW51X2lkID0gWHRWYUNyZWF0ZVBvcHVwU2hlbGwoKGNoYXIgKiltZW51LT5kbmFtZSwKKwkJc2ltcGxlTWVudVdpZGdldENsYXNzLCBtZW51LT5pZCwKKwkJWHROaW5zZXJ0UG9zaXRpb24sCWF0aGVuYV9jYWxjdWxhdGVfaW5zX3BvcywKKwkJWHROdHJhbnNsYXRpb25zLAlzdXBlcm1lbnVUcmFucywKKwkJTlVMTCk7CisJICAgIGd1aV9hdGhlbmFfbWVudV9jb2xvcnMobWVudS0+c3VibWVudV9pZCk7CisJICAgIGd1aV9hdGhlbmFfbWVudV9mb250KG1lbnUtPnN1Ym1lbnVfaWQpOworCisJICAgIC8qIERvbid0IHVwZGF0ZSB0aGUgbWVudSBoZWlnaHQgd2hlbiBpdCB3YXMgc2V0IGF0IGEgZml4ZWQgdmFsdWUgKi8KKwkgICAgaWYgKCFndWkubWVudV9oZWlnaHRfZml4ZWQpCisJICAgIHsKKwkJLyoKKwkJICogV2hlbiB3ZSBhZGQgYSB0b3AtbGV2ZWwgaXRlbSB0byB0aGUgbWVudSBiYXIsIHdlIGNhbiBmaWd1cmUKKwkJICogb3V0IGhvdyBoaWdoIHRoZSBtZW51IGJhciBzaG91bGQgYmUuCisJCSAqLworCQlYdFZhR2V0VmFsdWVzKG1lbnVCYXIsCisJCQlYdE52U3BhY2UsCSZzcGFjZSwKKwkJCVh0TmJvcmRlcldpZHRoLCAmYm9yZGVyLAorCQkJTlVMTCk7CisJCVh0VmFHZXRWYWx1ZXMobWVudS0+aWQsCisJCQlYdE5oZWlnaHQsCSZoZWlnaHQsCisJCQlOVUxMKTsKKwkJZ3VpLm1lbnVfaGVpZ2h0ID0gaGVpZ2h0ICsgMiAqIChzcGFjZSArIGJvcmRlcik7CisJICAgIH0KKwl9CisgICAgfQorICAgIGVsc2UgaWYgKHBhcmVudC0+c3VibWVudV9pZCAhPSAoV2lkZ2V0KTApCisgICAgeworCW1lbnUtPmlkID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoKGNoYXIgKiltZW51LT5kbmFtZSwKKwkgICAgc21lQlNCT2JqZWN0Q2xhc3MsIHBhcmVudC0+c3VibWVudV9pZCwKKwkgICAgWHRObGFiZWwsIG1lbnUtPmRuYW1lLAorI2lmZGVmIEZPTlRTRVRfQUxXQVlTCisJICAgIFh0TmludGVybmF0aW9uYWwsCVRydWUsCisjZW5kaWYKKwkgICAgTlVMTCk7CisJaWYgKG1lbnUtPmlkID09IChXaWRnZXQpMCkKKwkgICAgcmV0dXJuOworCWlmIChwdWxsZXJCaXRtYXAgPT0gTm9uZSkKKwkgICAgcHVsbGVyQml0bWFwID0gZ3VpX2F0aGVuYV9jcmVhdGVfcHVsbHJpZ2h0X3BpeG1hcChtZW51LT5pZCk7CisKKwlYdFZhU2V0VmFsdWVzKG1lbnUtPmlkLCBYdE5yaWdodEJpdG1hcCwgcHVsbGVyQml0bWFwLAorCQkJCU5VTEwpOworCS8qIElmIHRoZXJlIGFyZSBvdGhlciBtZW51IGl0ZW1zIHRoYXQgYXJlIG5vdCBwdWxsZG93biBtZW51cywKKwkgKiB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgcmlnaHQgbWFyZ2lucyBvZiB0aG9zZSwgdG9vLgorCSAqLworCXsKKwkgICAgV2lkZ2V0TGlzdAljaGlsZHJlbjsKKwkgICAgQ2FyZGluYWwJbnVtX2NoaWxkcmVuOworCSAgICBpbnQJCWk7CisKKwkgICAgWHRWYUdldFZhbHVlcyhwYXJlbnQtPnN1Ym1lbnVfaWQsIFh0TmNoaWxkcmVuLCAmY2hpbGRyZW4sCisJCQkJCSAgICAgIFh0Tm51bUNoaWxkcmVuLCAmbnVtX2NoaWxkcmVuLAorCQkJCQkgICAgICBOVUxMKTsKKwkgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGlsZHJlbjsgKytpKQorCSAgICB7CisJCVh0VmFTZXRWYWx1ZXMoY2hpbGRyZW5baV0sCisJCQkgICAgICBYdE5yaWdodE1hcmdpbiwgcHVsbGVyX3dpZHRoLAorCQkJICAgICAgTlVMTCk7CisJICAgIH0KKwl9CisJZ3VpX2F0aGVuYV9tZW51X2NvbG9ycyhtZW51LT5pZCk7CisJZ3VpX2F0aGVuYV9tZW51X2ZvbnQobWVudS0+aWQpOworCisJcHVsbHJpZ2h0X25hbWUgPSBtYWtlX3B1bGxfbmFtZShtZW51LT5kbmFtZSk7CisJbWVudS0+c3VibWVudV9pZCA9IFh0VmFDcmVhdGVQb3B1cFNoZWxsKChjaGFyICopcHVsbHJpZ2h0X25hbWUsCisJICAgIHNpbXBsZU1lbnVXaWRnZXRDbGFzcywgcGFyZW50LT5zdWJtZW51X2lkLAorCSAgICBYdE50cmFuc2xhdGlvbnMsIG1lbnVUcmFucywKKwkgICAgTlVMTCk7CisJZ3VpX2F0aGVuYV9tZW51X2NvbG9ycyhtZW51LT5zdWJtZW51X2lkKTsKKwlndWlfYXRoZW5hX21lbnVfZm9udChtZW51LT5zdWJtZW51X2lkKTsKKwl2aW1fZnJlZShwdWxscmlnaHRfbmFtZSk7CisJWHRBZGRDYWxsYmFjayhtZW51LT5zdWJtZW51X2lkLCBYdE5wb3B1cENhbGxiYWNrLAorCQkgICAgICBndWlfYXRoZW5hX3BvcHVwX2NhbGxiYWNrLCAoWHRQb2ludGVyKW1lbnUpOworCisJaWYgKHBhcmVudC0+cGFyZW50ICE9IE5VTEwpCisJICAgIFh0T3ZlcnJpZGVUcmFuc2xhdGlvbnMocGFyZW50LT5zdWJtZW51X2lkLCBwYXJlbnRUcmFucyk7CisgICAgfQorICAgIGFfY3VyX21lbnUgPSBOVUxMOworfQorCisvKiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGEgU2ltcGxlTWVudSBoYXMgcHVsbGRvd24gZW50cmllcy4KKyAqCisgKiAiaWQiIGlzIHRoZSBwYXJlbnQgb2YgdGhlIG1lbnUgaXRlbXMuCisgKiBJZ25vcmUgd2lkZ2V0ICJpZ25vcmUiIGluIHRoZSBwYW5lLgorICovCisgICAgc3RhdGljIEJvb2xlYW4KK2d1aV9hdGhlbmFfbWVudV9oYXNfc3VibWVudXMoaWQsIGlnbm9yZSkKKyAgICBXaWRnZXQJaWQ7CisgICAgV2lkZ2V0CWlnbm9yZTsKK3sKKyAgICBXaWRnZXRMaXN0CWNoaWxkcmVuOworICAgIENhcmRpbmFsCW51bV9jaGlsZHJlbjsKKyAgICBpbnQJCWk7CisKKyAgICBYdFZhR2V0VmFsdWVzKGlkLCBYdE5jaGlsZHJlbiwgJmNoaWxkcmVuLAorCQkgICAgICBYdE5udW1DaGlsZHJlbiwgJm51bV9jaGlsZHJlbiwKKwkJICAgICAgTlVMTCk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGlsZHJlbjsgKytpKQorICAgIHsKKwlpZiAoY2hpbGRyZW5baV0gPT0gaWdub3JlKQorCSAgICBjb250aW51ZTsKKwlpZiAoaGFzX3N1Ym1lbnUoY2hpbGRyZW5baV0pKQorCSAgICByZXR1cm4gVHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEZhbHNlOworfQorCisgICAgc3RhdGljIHZvaWQKK2d1aV9hdGhlbmFfbWVudV9mb250KGlkKQorICAgIFdpZGdldAlpZDsKK3sKKyNpZmRlZiBGT05UU0VUX0FMV0FZUworICAgIGlmIChndWkubWVudV9mb250c2V0ICE9IE5PRk9OVFNFVCkKKyAgICB7CisJaWYgKFh0SXNNYW5hZ2VkKGlkKSkKKwl7CisJICAgIFh0VW5tYW5hZ2VDaGlsZChpZCk7CisJICAgIFh0VmFTZXRWYWx1ZXMoaWQsIFh0TmZvbnRTZXQsIGd1aS5tZW51X2ZvbnRzZXQsIE5VTEwpOworCSAgICAvKiBXZSBzaG91bGQgZm9yY2UgdGhlIHdpZGdldCB0byByZWNhbGN1bGF0ZSBpdCdzCisJICAgICAqIGdlb21ldHJ5IG5vdy4gKi8KKwkgICAgWHRNYW5hZ2VDaGlsZChpZCk7CisJfQorCWVsc2UKKwkgICAgWHRWYVNldFZhbHVlcyhpZCwgWHROZm9udFNldCwgZ3VpLm1lbnVfZm9udHNldCwgTlVMTCk7CisJaWYgKGhhc19zdWJtZW51KGlkKSkKKwkgICAgWHRWYVNldFZhbHVlcyhpZCwgWHROcmlnaHRCaXRtYXAsIHB1bGxlckJpdG1hcCwgTlVMTCk7CisgICAgfQorI2Vsc2UKKyAgICBpbnQJCW1hbmFnZWQgPSBGQUxTRTsKKworICAgIGlmIChndWkubWVudV9mb250ICE9IE5PRk9OVCkKKyAgICB7CisJaWYgKFh0SXNNYW5hZ2VkKGlkKSkKKwl7CisJICAgIFh0VW5tYW5hZ2VDaGlsZChpZCk7CisJICAgIG1hbmFnZWQgPSBUUlVFOworCX0KKworIyBpZmRlZiBGRUFUX1hGT05UU0VUCisJaWYgKGd1aS5mb250c2V0ICE9IE5PRk9OVFNFVCkKKwkgICAgWHRWYVNldFZhbHVlcyhpZCwgWHROZm9udFNldCwgZ3VpLm1lbnVfZm9udCwgTlVMTCk7CisJZWxzZQorIyBlbmRpZgorCSAgICBYdFZhU2V0VmFsdWVzKGlkLCBYdE5mb250LCBndWkubWVudV9mb250LCBOVUxMKTsKKwlpZiAoaGFzX3N1Ym1lbnUoaWQpKQorCSAgICBYdFZhU2V0VmFsdWVzKGlkLCBYdE5yaWdodEJpdG1hcCwgcHVsbGVyQml0bWFwLCBOVUxMKTsKKworCS8qIEZvcmNlIHRoZSB3aWRnZXQgdG8gcmVjYWxjdWxhdGUgaXQncyBnZW9tZXRyeSBub3cuICovCisJaWYgKG1hbmFnZWQpCisJICAgIFh0TWFuYWdlQ2hpbGQoaWQpOworICAgIH0KKyNlbmRpZgorfQorCisKKyAgICB2b2lkCitndWlfbWNoX25ld19tZW51X2ZvbnQoKQoreworICAgIFBpeG1hcCBvbGRwdWxsZXIgPSBOb25lOworCisgICAgaWYgKG1lbnVCYXIgPT0gKFdpZGdldCkwKQorCXJldHVybjsKKworICAgIGlmIChwdWxsZXJCaXRtYXAgIT0gTm9uZSkKKyAgICB7CisJb2xkcHVsbGVyID0gcHVsbGVyQml0bWFwOworCXB1bGxlckJpdG1hcCA9IGd1aV9hdGhlbmFfY3JlYXRlX3B1bGxyaWdodF9waXhtYXAoTlVMTCk7CisgICAgfQorICAgIGd1aV9tY2hfc3VibWVudV9jaGFuZ2Uocm9vdF9tZW51LCBGQUxTRSk7CisKKyAgICB7CisJLyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBtZW51YmFyIG1lbnUgaXRlbXMgYW5kIGdldCB0aGUgaGVpZ2h0IG9mCisJICogZWFjaCBvbmUuICBUaGUgbWVudSBiYXIgaGVpZ2h0IGlzIHNldCB0byB0aGUgbWF4aW11bSBvZiBhbGwKKwkgKiB0aGUgaGVpZ2h0cy4KKwkgKi8KKwl2aW1tZW51X1QgKm1wOworCWludCBtYXhfaGVpZ2h0ID0gOTk5OTsKKworCWZvciAobXAgPSByb290X21lbnU7IG1wICE9IE5VTEw7IG1wID0gbXAtPm5leHQpCisJeworCSAgICBpZiAobWVudV9pc19tZW51YmFyKG1wLT5kbmFtZSkpCisJICAgIHsKKwkJRGltZW5zaW9uIGhlaWdodDsKKworCQlYdFZhR2V0VmFsdWVzKG1wLT5pZCwKKwkJCVh0TmhlaWdodCwoWHRBcmdWYWwgKikmaGVpZ2h0LAorCQkJTlVMTCk7CisJCWlmIChoZWlnaHQgPCBtYXhfaGVpZ2h0KQorCQkgICAgbWF4X2hlaWdodCA9IGhlaWdodDsKKwkgICAgfQorCX0KKwlpZiAobWF4X2hlaWdodCAhPSA5OTk5KQorCXsKKwkgICAgLyogRG9uJ3QgdXBkYXRlIHRoZSBtZW51IGhlaWdodCB3aGVuIGl0IHdhcyBzZXQgYXQgYSBmaXhlZCB2YWx1ZSAqLworCSAgICBpZiAoIWd1aS5tZW51X2hlaWdodF9maXhlZCkKKwkgICAgeworCQlEaW1lbnNpb24gICBzcGFjZSwgYm9yZGVyOworCisJCVh0VmFHZXRWYWx1ZXMobWVudUJhciwKKwkJCVh0TnZTcGFjZSwJJnNwYWNlLAorCQkJWHROYm9yZGVyV2lkdGgsICZib3JkZXIsCisJCQlOVUxMKTsKKwkJZ3VpLm1lbnVfaGVpZ2h0ID0gbWF4X2hlaWdodCArIDIgKiAoc3BhY2UgKyBib3JkZXIpOworCSAgICB9CisJfQorICAgIH0KKyAgICAvKiBOb3csIHRvIHNpbXVsYXRlIHRoZSB3aW5kb3cgYmVpbmcgcmVzaXplZC4gIE9ubHksIHRoaXMKKyAgICAgKiB3aWxsIHJlc2l6ZSB0aGUgd2luZG93IHRvIGl0J3MgY3VycmVudCBzdGF0ZS4KKyAgICAgKgorICAgICAqIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXksIGJ1dCBJIGRvIG5vdCBzZWUgb25lIGF0IHRoaXMgdGltZS4KKyAgICAgKiAoRGF2aWQgSGFycmlzb24pCisgICAgICovCisgICAgeworCVBvc2l0aW9uIHcsIGg7CisKKwlYdFZhR2V0VmFsdWVzKHZpbVNoZWxsLAorCQlYdE53aWR0aCwgJncsCisJCVh0TmhlaWdodCwgJmgsCisJCU5VTEwpOworCWd1aV9yZXNpemVfc2hlbGwodywgaAorI2lmZGVmIEZFQVRfWElNCisJCQkJCQktIHhpbV9nZXRfc3RhdHVzX2FyZWFfaGVpZ2h0KCkKKyNlbmRpZgorCQkgICAgICk7CisgICAgfQorICAgIGd1aV9zZXRfc2hlbGxzaXplKEZBTFNFLCBUUlVFKTsKKyAgICB1aV9uZXdfc2hlbGxzaXplKCk7CisgICAgaWYgKG9sZHB1bGxlciAhPSBOb25lKQorCVhGcmVlUGl4bWFwKGd1aS5kcHksIG9sZHB1bGxlcik7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQkVWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorZ3VpX21jaF9uZXdfdG9vbHRpcF9mb250KCkKK3sKKyMgIGlmZGVmIEZFQVRfVE9PTEJBUgorICAgIHZpbW1lbnVfVCAgICptZW51OworCisgICAgaWYgKHRvb2xCYXIgPT0gKFdpZGdldCkwKQorCXJldHVybjsKKworICAgIG1lbnUgPSBndWlfZmluZF9tZW51KChjaGFyX3UgKikiVG9vbEJhciIpOworICAgIGlmIChtZW51ICE9IE5VTEwpCisJZ3VpX21jaF9zdWJtZW51X2NoYW5nZShtZW51LCBGQUxTRSk7CisjICBlbmRpZgorfQorCisgICAgdm9pZAorZ3VpX21jaF9uZXdfdG9vbHRpcF9jb2xvcnMoKQoreworIyBpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICB2aW1tZW51X1QgICAqbWVudTsKKworICAgIGlmICh0b29sQmFyID09IChXaWRnZXQpMCkKKwlyZXR1cm47CisKKyAgICBtZW51ID0gZ3VpX2ZpbmRfbWVudSgoY2hhcl91ICopIlRvb2xCYXIiKTsKKyAgICBpZiAobWVudSAhPSBOVUxMKQorCWd1aV9tY2hfc3VibWVudV9jaGFuZ2UobWVudSwgVFJVRSk7CisjIGVuZGlmCit9CisjZW5kaWYKKworICAgIHN0YXRpYyB2b2lkCitndWlfbWNoX3N1Ym1lbnVfY2hhbmdlKG1lbnUsIGNvbG9ycykKKyAgICB2aW1tZW51X1QJKm1lbnU7CisgICAgaW50CQljb2xvcnM7CQkvKiBUUlVFIGZvciBjb2xvcnMsIEZBTFNFIGZvciBmb250ICovCit7CisgICAgdmltbWVudV9UCSptcDsKKworICAgIGZvciAobXAgPSBtZW51OyBtcCAhPSBOVUxMOyBtcCA9IG1wLT5uZXh0KQorICAgIHsKKwlpZiAobXAtPmlkICE9IChXaWRnZXQpMCkKKwl7CisJICAgIGlmIChjb2xvcnMpCisJICAgIHsKKwkJZ3VpX2F0aGVuYV9tZW51X2NvbG9ycyhtcC0+aWQpOworI2lmZGVmIEZFQVRfVE9PTEJBUgorCQkvKiBGb3IgYSB0b29sYmFyIGl0ZW06IEZyZWUgdGhlIHBpeG1hcCBhbmQgYWxsb2NhdGUgYSBuZXcgb25lLAorCQkgKiBzbyB0aGF0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGlzIHJpZ2h0LiAqLworCQlpZiAobXAtPmltYWdlICE9IChQaXhtYXApMCkKKwkJeworCQkgICAgWEZyZWVQaXhtYXAoZ3VpLmRweSwgbXAtPmltYWdlKTsKKwkJICAgIGdldF90b29sYmFyX3BpeG1hcChtcCwgJm1wLT5pbWFnZSwgTlVMTCk7CisJCSAgICBpZiAobXAtPmltYWdlICE9IChQaXhtYXApMCkKKwkJCVh0VmFTZXRWYWx1ZXMobXAtPmlkLCBYdE5iaXRtYXAsIG1wLT5pbWFnZSwgTlVMTCk7CisJCX0KKworIyBpZmRlZiBGRUFUX0JFVkFMCisJCS8qIElmIHdlIGhhdmUgYSB0b29sdGlwLCB0aGVuIHdlIG5lZWQgdG8gY2hhbmdlIGl0J3MgY29sb3JzICovCisJCWlmIChtcC0+dGlwICE9IE5VTEwpCisJCXsKKwkJICAgIEFyZyBhcmdzWzJdOworCisJCSAgICBhcmdzWzBdLm5hbWUgPSBYdE5iYWNrZ3JvdW5kOworCQkgICAgYXJnc1swXS52YWx1ZSA9IGd1aS50b29sdGlwX2JnX3BpeGVsOworCQkgICAgYXJnc1sxXS5uYW1lID0gWHROZm9yZWdyb3VuZDsKKwkJICAgIGFyZ3NbMV0udmFsdWUgPSBndWkudG9vbHRpcF9mZ19waXhlbDsKKwkJICAgIFh0U2V0VmFsdWVzKG1wLT50aXAtPmJhbGxvb25MYWJlbCwgJmFyZ3NbMF0sIFh0TnVtYmVyKGFyZ3MpKTsKKwkJfQorIyBlbmRpZgorI2VuZGlmCisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWd1aV9hdGhlbmFfbWVudV9mb250KG1wLT5pZCk7CisjaWZkZWYgRkVBVF9CRVZBTAorCQkvKiBJZiB3ZSBoYXZlIGEgdG9vbHRpcCwgdGhlbiB3ZSBuZWVkIHRvIGNoYW5nZSBpdCdzIGZvbnQgKi8KKwkJLyogQXNzdW1lIFh0TmludGVybmF0aW9uYWwgPT0gVHJ1ZSAoaW4gY3JlYXRlQmFsbG9vbkV2YWxXaW5kb3cpCisJCSAqLworCQlpZiAobXAtPnRpcCAhPSBOVUxMKQorCQl7CisJCSAgICBBcmcgYXJnc1sxXTsKKworCQkgICAgYXJnc1swXS5uYW1lID0gWHROZm9udFNldDsKKwkJICAgIGFyZ3NbMF0udmFsdWUgPSAoWHRBcmdWYWwpZ3VpLnRvb2x0aXBfZm9udHNldDsKKwkJICAgIFh0U2V0VmFsdWVzKG1wLT50aXAtPmJhbGxvb25MYWJlbCwgJmFyZ3NbMF0sIFh0TnVtYmVyKGFyZ3MpKTsKKwkJfQorI2VuZGlmCisJICAgIH0KKwl9CisKKwlpZiAobXAtPmNoaWxkcmVuICE9IE5VTEwpCisJeworCSAgICAvKiBTZXQgdGhlIGNvbG9ycy9mb250IGZvciB0aGUgdGVhciBvZmYgd2lkZ2V0ICovCisJICAgIGlmIChtcC0+c3VibWVudV9pZCAhPSAoV2lkZ2V0KTApCisJICAgIHsKKwkJaWYgKGNvbG9ycykKKwkJICAgIGd1aV9hdGhlbmFfbWVudV9jb2xvcnMobXAtPnN1Ym1lbnVfaWQpOworCQllbHNlCisJCSAgICBndWlfYXRoZW5hX21lbnVfZm9udChtcC0+c3VibWVudV9pZCk7CisJICAgIH0KKwkgICAgLyogU2V0IHRoZSBjb2xvcnMgZm9yIHRoZSBjaGlsZHJlbiAqLworCSAgICBndWlfbWNoX3N1Ym1lbnVfY2hhbmdlKG1wLT5jaGlsZHJlbiwgY29sb3JzKTsKKwl9CisgICAgfQorfQorCisvKgorICogTWFrZSBhIHN1Ym1lbnUgbmFtZSBpbnRvIGEgcHVsbHJpZ2h0IG5hbWUuCisgKiBSZXBsYWNlICcuJyBieSAnXycsIGNhbid0IGluY2x1ZGUgJy4nIGluIHRoZSBzdWJtZW51IG5hbWUuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK21ha2VfcHVsbF9uYW1lKG5hbWUpCisgICAgY2hhcl91ICogbmFtZTsKK3sKKyAgICBjaGFyX3UgICpwbmFtZTsKKyAgICBjaGFyX3UgICpwOworCisgICAgcG5hbWUgPSB2aW1fc3RybnNhdmUobmFtZSwgU1RSTEVOKG5hbWUpICsgc3RybGVuKCItcHVsbHJpZ2h0IikpOworICAgIGlmIChwbmFtZSAhPSBOVUxMKQorICAgIHsKKwlzdHJjYXQoKGNoYXIgKilwbmFtZSwgIi1wdWxscmlnaHQiKTsKKwl3aGlsZSAoKHAgPSB2aW1fc3RyY2hyKHBuYW1lLCAnLicpKSAhPSBOVUxMKQorCSAgICAqcCA9ICdfJzsKKyAgICB9CisgICAgcmV0dXJuIHBuYW1lOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHZvaWQKK2d1aV9tY2hfYWRkX21lbnVfaXRlbShtZW51LCBpZHgpCisgICAgdmltbWVudV9UCSptZW51OworICAgIGludAkJaWR4OworeworICAgIHZpbW1lbnVfVAkqcGFyZW50ID0gbWVudS0+cGFyZW50OworCisgICAgYV9jdXJfbWVudSA9IG1lbnU7CisjIGlmZGVmIEZFQVRfVE9PTEJBUgorICAgIGlmIChtZW51X2lzX3Rvb2xiYXIocGFyZW50LT5uYW1lKSkKKyAgICB7CisJV2lkZ2V0Q2xhc3MJdHlwZTsKKwlpbnQJCW47CisJQXJnCQlhcmdzWzIxXTsKKworCW4gPSAwOworCWlmIChtZW51X2lzX3NlcGFyYXRvcihtZW51LT5uYW1lKSkKKwl7CisJICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmxhYmVsLCAiIik7IG4rKzsKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVyV2lkdGgsIDApOyBuKys7CisJfQorCWVsc2UKKwl7CisJICAgIGdldF90b29sYmFyX3BpeG1hcChtZW51LCAmbWVudS0+aW1hZ2UsIE5VTEwpOworCSAgICBYdFNldEFyZyhhcmdzW25dLCBYdE5sYWJlbCwgbWVudS0+ZG5hbWUpOyBuKys7CisJICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmludGVybmFsSGVpZ2h0LCAxKTsgbisrOworCSAgICBYdFNldEFyZyhhcmdzW25dLCBYdE5pbnRlcm5hbFdpZHRoLCAxKTsgbisrOworCSAgICBYdFNldEFyZyhhcmdzW25dLCBYdE5ib3JkZXJXaWR0aCwgMSk7IG4rKzsKKwkgICAgaWYgKG1lbnUtPmltYWdlICE9IDApCisJCVh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmJpdG1hcCwgbWVudS0+aW1hZ2UpOyBuKys7CisJfQorCVh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmhpZ2hsaWdodFRoaWNrbmVzcywgMCk7IG4rKzsKKwl0eXBlID0gY29tbWFuZFdpZGdldENsYXNzOworCS8qIFRPRE86IGZpZ3VyZSBvdXQgdGhlIHBvc2l0aW9uIGluIHRoZSB0b29sYmFyPworCSAqICAgICAgIFRoaXMgY3VycmVudGx5IHdvcmtzIGZpbmUgZm9yIHRoZSBkZWZhdWx0IHRvb2xiYXIsIGJ1dAorCSAqICAgICAgIHdoYXQgaWYgd2UgYWRkL3JlbW92ZSBpdGVtcyBkdXJpbmcgbGF0ZXIgcnVudGltZT8KKwkgKi8KKworCS8qIE5PVEU6ICJpZHgiIGlzbid0IHVzZWQgaGVyZS4gIFRoZSBwb3NpdGlvbiBpcyBjYWxjdWxhdGVkIGJ5CisJICogICAgICAgYXRoZW5hX2NhbGN1bGF0ZV9pbnNfcG9zKCkuICBUaGUgcG9zaXRpb24gaXQgY2FsY3VsYXRlcworCSAqICAgICAgIHNob3VsZCBiZSBlcXVhbCB0byAiaWR4Ii4KKwkgKi8KKwkvKiBUT0RPOiBDb3VsZCB3ZSBqdXN0IHN0b3JlICJpZHgiIGFuZCB1c2UgdGhhdCBhcyB0aGUgY2hpbGQKKwkgKiBwbGFjZW1lbnQ/CisJICovCisKKwlpZiAobWVudS0+aWQgPT0gTlVMTCkKKwl7CisJICAgIG1lbnUtPmlkID0gWHRDcmVhdGVNYW5hZ2VkV2lkZ2V0KChjaGFyICopbWVudS0+ZG5hbWUsCisJCQl0eXBlLCB0b29sQmFyLCBhcmdzLCBuKTsKKwkgICAgWHRBZGRDYWxsYmFjayhtZW51LT5pZCwKKwkJICAgIFh0TmNhbGxiYWNrLCBndWlfeDExX21lbnVfY2IsIG1lbnUpOworCX0KKwllbHNlCisJICAgIFh0U2V0VmFsdWVzKG1lbnUtPmlkLCBhcmdzLCBuKTsKKwlndWlfYXRoZW5hX21lbnVfY29sb3JzKG1lbnUtPmlkKTsKKworI2lmZGVmIEZFQVRfQkVWQUwKKwlndWlfbWNoX21lbnVfc2V0X3RpcChtZW51KTsKKyNlbmRpZgorCisJbWVudS0+cGFyZW50ID0gcGFyZW50OworCW1lbnUtPnN1Ym1lbnVfaWQgPSBOVUxMOworCWlmICghWHRJc01hbmFnZWQodG9vbEJhcikKKwkJICAgICYmIHZpbV9zdHJjaHIocF9nbywgR09fVE9PTEJBUikgIT0gTlVMTCkKKwkgICAgZ3VpX21jaF9zaG93X3Rvb2xiYXIoVFJVRSk7CisJZ3VpLnRvb2xiYXJfaGVpZ2h0ID0gZ3VpX21jaF9jb21wdXRlX3Rvb2xiYXJfaGVpZ2h0KCk7CisJcmV0dXJuOworICAgIH0gLyogdG9vbGJhciBtZW51IGl0ZW0gKi8KKyMgZW5kaWYKKworICAgIC8qIEFkZCBtZW51IHNlcGFyYXRvciAqLworICAgIGlmIChtZW51X2lzX3NlcGFyYXRvcihtZW51LT5uYW1lKSkKKyAgICB7CisJbWVudS0+c3VibWVudV9pZCA9IChXaWRnZXQpMDsKKwltZW51LT5pZCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KChjaGFyICopbWVudS0+ZG5hbWUsCisJCXNtZUxpbmVPYmplY3RDbGFzcywgcGFyZW50LT5zdWJtZW51X2lkLAorCQlOVUxMKTsKKwlpZiAobWVudS0+aWQgPT0gKFdpZGdldCkwKQorCSAgICByZXR1cm47CisJZ3VpX2F0aGVuYV9tZW51X2NvbG9ycyhtZW51LT5pZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKHBhcmVudCAhPSBOVUxMICYmIHBhcmVudC0+c3VibWVudV9pZCAhPSAoV2lkZ2V0KTApCisJeworCSAgICBtZW51LT5zdWJtZW51X2lkID0gKFdpZGdldCkwOworCSAgICBtZW51LT5pZCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KChjaGFyICopbWVudS0+ZG5hbWUsCisJCSAgICBzbWVCU0JPYmplY3RDbGFzcywgcGFyZW50LT5zdWJtZW51X2lkLAorCQkgICAgWHRObGFiZWwsIG1lbnUtPmRuYW1lLAorI2lmZGVmIEZPTlRTRVRfQUxXQVlTCisJCSAgICBYdE5pbnRlcm5hdGlvbmFsLAlUcnVlLAorI2VuZGlmCisJCSAgICBOVUxMKTsKKwkgICAgaWYgKG1lbnUtPmlkID09IChXaWRnZXQpMCkKKwkJcmV0dXJuOworCisJICAgIC8qIElmIHRoZXJlIGFyZSBvdGhlciAicHVsbGRvd24iIGl0ZW1zIGluIHRoaXMgcGFuZSwgdGhlbiBhZGp1c3QKKwkgICAgICogdGhlIHJpZ2h0IG1hcmdpbiB0byBhY2NvbW9kYXRlIHRoZSBhcnJvdyBwaXhtYXAsIG90aGVyd2lzZQorCSAgICAgKiB0aGUgcmlnaHQgbWFyZ2luIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGxlZnQgbWFyZ2luLgorCSAgICAgKi8KKwkgICAgeworCQlEaW1lbnNpb24gICBsZWZ0X21hcmdpbjsKKworCQlYdFZhR2V0VmFsdWVzKG1lbnUtPmlkLCBYdE5sZWZ0TWFyZ2luLCAmbGVmdF9tYXJnaW4sIE5VTEwpOworCQlYdFZhU2V0VmFsdWVzKG1lbnUtPmlkLCBYdE5yaWdodE1hcmdpbiwKKwkJCWd1aV9hdGhlbmFfbWVudV9oYXNfc3VibWVudXMocGFyZW50LT5zdWJtZW51X2lkLCBOVUxMKSA/CisJCQkgICAgcHVsbGVyX3dpZHRoIDoKKwkJCSAgICBsZWZ0X21hcmdpbiwKKwkJCU5VTEwpOworCSAgICB9CisKKwkgICAgZ3VpX2F0aGVuYV9tZW51X2NvbG9ycyhtZW51LT5pZCk7CisJICAgIGd1aV9hdGhlbmFfbWVudV9mb250KG1lbnUtPmlkKTsKKwkgICAgWHRBZGRDYWxsYmFjayhtZW51LT5pZCwgWHROY2FsbGJhY2ssIGd1aV94MTFfbWVudV9jYiwKKwkJICAgIChYdFBvaW50ZXIpbWVudSk7CisJfQorICAgIH0KKyAgICBhX2N1cl9tZW51ID0gTlVMTDsKK30KKworI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2d1aV9tY2hfc2hvd190b29sYmFyKGludCBzaG93aXQpCit7CisgICAgQ2FyZGluYWwJbnVtQ2hpbGRyZW47CSAgICAvKiBob3cgbWFueSBjaGlsZHJlbiB0b29sQmFyIGhhcyAqLworCisgICAgaWYgKHRvb2xCYXIgPT0gKFdpZGdldCkwKQorCXJldHVybjsKKyAgICBYdFZhR2V0VmFsdWVzKHRvb2xCYXIsIFh0Tm51bUNoaWxkcmVuLCAmbnVtQ2hpbGRyZW4sIE5VTEwpOworICAgIGlmIChzaG93aXQgJiYgbnVtQ2hpbGRyZW4gPiAwKQorICAgIHsKKwkvKiBBc3N1bWUgdGhhdCB3ZSB3YW50IHRvIHNob3cgdGhlIHRvb2xiYXIgaWYgcF90b29sYmFyIGNvbnRhaW5zIHZhbGlkCisJICogb3B0aW9uIHNldHRpbmdzLCB0aGVyZWZvcmUgcF90b29sYmFyIG11c3Qgbm90IGJlIE5VTEwuCisJICovCisJV2lkZ2V0TGlzdCAgY2hpbGRyZW47CisKKwlYdFZhR2V0VmFsdWVzKHRvb2xCYXIsIFh0TmNoaWxkcmVuLCAmY2hpbGRyZW4sIE5VTEwpOworCXsKKwkgICAgdm9pZCAgICAoKmFjdGlvbikoQmFsbG9vbkV2YWwgKik7CisJICAgIGludAkgICAgdGV4dCA9IDA7CisKKwkgICAgaWYgKHN0cnN0cigoY29uc3QgY2hhciAqKXBfdG9vbGJhciwgInRvb2x0aXBzIikpCisJCWFjdGlvbiA9ICZndWlfbWNoX2VuYWJsZV9iZXZhbF9hcmVhOworCSAgICBlbHNlCisJCWFjdGlvbiA9ICZndWlfbWNoX2Rpc2FibGVfYmV2YWxfYXJlYTsKKwkgICAgaWYgKHN0cnN0cigoY29uc3QgY2hhciAqKXBfdG9vbGJhciwgInRleHQiKSkKKwkJdGV4dCA9IDE7CisJICAgIGVsc2UgaWYgKHN0cnN0cigoY29uc3QgY2hhciAqKXBfdG9vbGJhciwgImljb25zIikpCisJCXRleHQgPSAtMTsKKwkgICAgaWYgKHRleHQgIT0gMCkKKwkgICAgeworCQl2aW1tZW51X1QgICAqdG9vbGJhcjsKKwkJdmltbWVudV9UICAgKmN1cjsKKworCQlmb3IgKHRvb2xiYXIgPSByb290X21lbnU7IHRvb2xiYXI7IHRvb2xiYXIgPSB0b29sYmFyLT5uZXh0KQorCQkgICAgaWYgKG1lbnVfaXNfdG9vbGJhcih0b29sYmFyLT5kbmFtZSkpCisJCQlicmVhazsKKwkJLyogQXNzdW1wdGlvbjogdG9vbGJhciBpcyBOVUxMIGlmIHRoZXJlIGlzIG5vIHRvb2xiYXIsCisJCSAqCSAgICAgICBvdGhlcndpc2UgaXQgY29udGFpbnMgdGhlIHRvb2xiYXIgbWVudSBzdHJ1Y3R1cmUuCisJCSAqCisJCSAqIEFzc3VtcHRpb246ICJudW1DaGlsZHJlbiIgPT0gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgbGlzdAorCQkgKgkgICAgICAgb2YgaXRlbXMgYmVnaW5uaW5nIHdpdGggdG9vbGJhci0+Y2hpbGRyZW4uCisJCSAqLworCQlpZiAodG9vbGJhcikKKwkJeworCQkgICAgZm9yIChjdXIgPSB0b29sYmFyLT5jaGlsZHJlbjsgY3VyOyBjdXIgPSBjdXItPm5leHQpCisJCSAgICB7CisJCQlBcmcJICAgIGFyZ3NbMl07CisJCQlpbnQJICAgIG4gPSAwOworCisJCQkvKiBFbmFibGUvRGlzYWJsZSB0b29sdGlwIChPSyB0byBlbmFibGUgd2hpbGUgY3VycmVudGx5CisJCQkgKiBlbmFibGVkKQorCQkJICovCisJCQlpZiAoY3VyLT50aXAgIT0gTlVMTCkKKwkJCSAgICAoKmFjdGlvbikoY3VyLT50aXApOworCQkJaWYgKHRleHQgPT0gMSkKKwkJCXsKKwkJCSAgICBYdFNldEFyZyhhcmdzW25dLCBYdE5iaXRtYXAsIE5vbmUpOworCQkJICAgIG4rKzsKKwkJCSAgICBYdFNldEFyZyhhcmdzW25dLCBYdE5sYWJlbCwKKwkJCQkgICAgbWVudV9pc19zZXBhcmF0b3IoY3VyLT5uYW1lKSA/ICIiIDoKKwkJCQkJKGNoYXIgKiljdXItPmRuYW1lKTsKKwkJCSAgICBuKys7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYml0bWFwLCBjdXItPmltYWdlKTsKKwkJCSAgICBuKys7CisJCQkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWHRObGFiZWwsIChjdXItPmltYWdlID09IE5vbmUpID8KKwkJCQkgICAgbWVudV9pc19zZXBhcmF0b3IoY3VyLT5uYW1lKSA/CisJCQkJCSIiIDoKKwkJCQkJKGNoYXIgKiljdXItPmRuYW1lCisJCQkJICAgIDoKKwkJCQkgICAgKGNoYXIgKilOb25lKTsKKwkJCSAgICBuKys7CisJCQl9CisJCQlpZiAoY3VyLT5pZCAhPSBOVUxMKQorCQkJeworCQkJICAgIFh0VW5tYW5hZ2VDaGlsZChjdXItPmlkKTsKKwkJCSAgICBYdFNldFZhbHVlcyhjdXItPmlkLCBhcmdzLCBuKTsKKwkJCSAgICBYdE1hbmFnZUNoaWxkKGN1ci0+aWQpOworCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisJZ3VpLnRvb2xiYXJfaGVpZ2h0ID0gZ3VpX21jaF9jb21wdXRlX3Rvb2xiYXJfaGVpZ2h0KCk7CisJWHRNYW5hZ2VDaGlsZCh0b29sQmFyKTsKKwlpZiAoWHRJc01hbmFnZWQobWVudUJhcikpCisJeworCSAgICBYdFZhU2V0VmFsdWVzKHRleHRBcmVhLAorCQkgICAgWHROdmVydERpc3RhbmNlLCAgICBndWkudG9vbGJhcl9oZWlnaHQgKyBndWkubWVudV9oZWlnaHQsCisJCSAgICBOVUxMKTsKKwkgICAgWHRWYVNldFZhbHVlcyh0b29sQmFyLAorCQkgICAgWHROdmVydERpc3RhbmNlLCAgICBndWkubWVudV9oZWlnaHQsCisJCSAgICBOVUxMKTsKKwl9CisJZWxzZQorCXsKKwkgICAgWHRWYVNldFZhbHVlcyh0ZXh0QXJlYSwKKwkJICAgIFh0TnZlcnREaXN0YW5jZSwgICAgZ3VpLnRvb2xiYXJfaGVpZ2h0LAorCQkgICAgTlVMTCk7CisJICAgIFh0VmFTZXRWYWx1ZXModG9vbEJhciwKKwkJICAgIFh0TnZlcnREaXN0YW5jZSwgICAgMCwKKwkJICAgIE5VTEwpOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlndWkudG9vbGJhcl9oZWlnaHQgPSAwOworCWlmIChYdElzTWFuYWdlZChtZW51QmFyKSkKKwkgICAgWHRWYVNldFZhbHVlcyh0ZXh0QXJlYSwKKwkJWHROdmVydERpc3RhbmNlLCAgICBndWkubWVudV9oZWlnaHQsCisJCU5VTEwpOworCWVsc2UKKwkgICAgWHRWYVNldFZhbHVlcyh0ZXh0QXJlYSwKKwkJWHROdmVydERpc3RhbmNlLCAgICAwLAorCQlOVUxMKTsKKworCVh0VW5tYW5hZ2VDaGlsZCh0b29sQmFyKTsKKyAgICB9CisgICAgZ3VpX3NldF9zaGVsbHNpemUoRkFMU0UsIEZBTFNFKTsKK30KKworCisgICAgaW50CitndWlfbWNoX2NvbXB1dGVfdG9vbGJhcl9oZWlnaHQoKQoreworICAgIERpbWVuc2lvbgloZWlnaHQ7CQkgICAgLyogdG90YWwgVG9vbGJhciBoZWlnaHQgKi8KKyAgICBEaW1lbnNpb24Jd2hndDsJCSAgICAvKiBoZWlnaHQgb2YgZWFjaCB3aWRnZXQgKi8KKyAgICBEaW1lbnNpb24JbWFyZ2luSGVpZ2h0OwkgICAgLyogWG1ObWFyZ2luSGVpZ2h0IG9mIHRvb2xCYXIgKi8KKyAgICBEaW1lbnNpb24Jc2hhZG93VGhpY2tuZXNzOyAgICAvKiB0aGlja25lc3Mgb2YgWHRwYXJlbnQodG9vbEJhcikgKi8KKyAgICBXaWRnZXRMaXN0CWNoaWxkcmVuOwkgICAgLyogbGlzdCBvZiB0b29sQmFyJ3MgY2hpbGRyZW4gKi8KKyAgICBDYXJkaW5hbAludW1DaGlsZHJlbjsJICAgIC8qIGhvdyBtYW55IGNoaWxkcmVuIHRvb2xCYXIgaGFzICovCisgICAgaW50CQlpOworCisgICAgaGVpZ2h0ID0gMDsKKyAgICBzaGFkb3dUaGlja25lc3MgPSAwOworICAgIG1hcmdpbkhlaWdodCA9IDA7CisgICAgaWYgKHRvb2xCYXIgIT0gKFdpZGdldCkwKQorICAgIHsKKwlYdFZhR2V0VmFsdWVzKHRvb2xCYXIsCisJCVh0TmJvcmRlcldpZHRoLAkgICAgJnNoYWRvd1RoaWNrbmVzcywKKwkJWHROdlNwYWNlLAkgICAgJm1hcmdpbkhlaWdodCwKKwkJWHROY2hpbGRyZW4sCSAgICAmY2hpbGRyZW4sCisJCVh0Tm51bUNoaWxkcmVuLAkgICAgJm51bUNoaWxkcmVuLAorCQlOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47IGkrKykKKwl7CisJICAgIHdoZ3QgPSAwOworCisJICAgIFh0VmFHZXRWYWx1ZXMoY2hpbGRyZW5baV0sIFh0TmhlaWdodCwgJndoZ3QsIE5VTEwpOworCSAgICBpZiAoaGVpZ2h0IDwgd2hndCkKKwkJaGVpZ2h0ID0gd2hndDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIChpbnQpKGhlaWdodCArIChtYXJnaW5IZWlnaHQgPDwgMSkgKyAoc2hhZG93VGhpY2tuZXNzIDw8IDEpKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZ2V0X3Rvb2xiYXJfY29sb3JzKGJncCwgZmdwLCBic3AsIHRzcCwgaHNwKQorICAgIFBpeGVsCSpiZ3A7CisgICAgUGl4ZWwJKmZncDsKKyAgICBQaXhlbCAgICAgICAqYnNwOworICAgIFBpeGVsCSp0c3A7CisgICAgUGl4ZWwJKmhzcDsKK3sKKyAgICBYdFZhR2V0VmFsdWVzKHRvb2xCYXIsIFh0TmJhY2tncm91bmQsIGJncCwgWHROYm9yZGVyQ29sb3IsIGZncCwgTlVMTCk7CisgICAgKmJzcCA9ICpiZ3A7CisgICAgKnRzcCA9ICpmZ3A7CisgICAgKmhzcCA9ICp0c3A7Cit9CisjZW5kaWYKKworCisvKiBBUkdTVVNFRCAqLworICAgIHZvaWQKK2d1aV9tY2hfdG9nZ2xlX3RlYXJvZmZzKGVuYWJsZSkKKyAgICBpbnQJCWVuYWJsZTsKK3sKKyAgICAvKiBubyB0ZWFyb2ZmIG1lbnVzICovCit9CisKKyAgICB2b2lkCitndWlfbWNoX25ld19tZW51X2NvbG9ycygpCit7CisgICAgaWYgKG1lbnVCYXIgPT0gKFdpZGdldCkwKQorCXJldHVybjsKKyAgICBpZiAoZ3VpLm1lbnVfZmdfcGl4ZWwgIT0gSU5WQUxDT0xPUikKKwlYdFZhU2V0VmFsdWVzKG1lbnVCYXIsIFh0TmJvcmRlckNvbG9yLAlndWkubWVudV9mZ19waXhlbCwgTlVMTCk7CisgICAgZ3VpX2F0aGVuYV9tZW51X2NvbG9ycyhtZW51QmFyKTsKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICBndWlfYXRoZW5hX21lbnVfY29sb3JzKHRvb2xCYXIpOworI2VuZGlmCisKKyAgICBndWlfbWNoX3N1Ym1lbnVfY2hhbmdlKHJvb3RfbWVudSwgVFJVRSk7Cit9CisKKy8qCisgKiBEZXN0cm95IHRoZSBtYWNoaW5lIHNwZWNpZmljIG1lbnUgd2lkZ2V0LgorICovCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X21lbnUobWVudSkKKyAgICB2aW1tZW51X1QgKm1lbnU7Cit7CisgICAgV2lkZ2V0CXBhcmVudDsKKworICAgIC8qIFRoZXJlIGlzIG5vIGl0ZW0gZm9yIHRoZSB0b29sYmFyLiAqLworICAgIGlmIChtZW51LT5pZCA9PSAoV2lkZ2V0KTApCisJcmV0dXJuOworCisgICAgcGFyZW50ID0gWHRQYXJlbnQobWVudS0+aWQpOworCisgICAgLyogV2hlbiByZW1vdmluZyB0aGUgbGFzdCAicHVsbGRvd24iIG1lbnUgaXRlbSBmcm9tIGEgcGFuZSwgYWRqdXN0IHRoZQorICAgICAqIHJpZ2h0IG1hcmdpbnMgb2YgdGhlIHJlbWFpbmluZyB3aWRnZXRzLgorICAgICAqLworICAgIGlmIChtZW51LT5zdWJtZW51X2lkICE9IChXaWRnZXQpMCkKKyAgICB7CisJLyogR28gdGhyb3VnaCB0aGUgbWVudSBpdGVtcyBpbiB0aGUgcGFyZW50IG9mIHRoaXMgaXRlbSBhbmQKKwkgKiBhZGp1c3QgdGhlaXIgbWFyZ2lucywgaWYgbmVjZXNzYXJ5LgorCSAqIFRoaXMgdGFrZXMgY2FyZSBvZiB0aGUgY2FzZSB3aGVuIHdlIGRlbGV0ZSB0aGUgbGFzdCBtZW51IGl0ZW0gaW4gYQorCSAqIHBhbmUgdGhhdCBoYXMgYSBzdWJtZW51LiAgSW4gdGhpcyBjYXNlLCB0aGVyZSB3aWxsIGJlIG5vIGFycm93CisJICogcGl4bWFwcyBzaG93biBhbnltb3JlLgorCSAqLworCXsKKwkgICAgV2lkZ2V0TGlzdCAgY2hpbGRyZW47CisJICAgIENhcmRpbmFsICAgIG51bV9jaGlsZHJlbjsKKwkgICAgaW50CQlpOworCSAgICBEaW1lbnNpb24JcmlnaHRfbWFyZ2luID0gMDsKKwkgICAgQm9vbGVhbglnZXRfbGVmdF9tYXJnaW4gPSBGYWxzZTsKKworCSAgICBYdFZhR2V0VmFsdWVzKHBhcmVudCwgWHROY2hpbGRyZW4sICZjaGlsZHJlbiwKKwkJCQkgIFh0Tm51bUNoaWxkcmVuLCAmbnVtX2NoaWxkcmVuLAorCQkJCSAgTlVMTCk7CisJICAgIGlmIChndWlfYXRoZW5hX21lbnVfaGFzX3N1Ym1lbnVzKHBhcmVudCwgbWVudS0+aWQpKQorCQlyaWdodF9tYXJnaW4gPSBwdWxsZXJfd2lkdGg7CisJICAgIGVsc2UKKwkJZ2V0X2xlZnRfbWFyZ2luID0gVHJ1ZTsKKworCSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoaWxkcmVuOyArK2kpCisJICAgIHsKKwkJaWYgKGNoaWxkcmVuW2ldID09IG1lbnUtPmlkKQorCQkgICAgY29udGludWU7CisJCWlmIChnZXRfbGVmdF9tYXJnaW4gPT0gVHJ1ZSkKKwkJeworCQkgICAgRGltZW5zaW9uIGxlZnRfbWFyZ2luOworCisJCSAgICBYdFZhR2V0VmFsdWVzKGNoaWxkcmVuW2ldLCBYdE5sZWZ0TWFyZ2luLCAmbGVmdF9tYXJnaW4sCisJCQkJICBOVUxMKTsKKwkJICAgIFh0VmFTZXRWYWx1ZXMoY2hpbGRyZW5baV0sIFh0TnJpZ2h0TWFyZ2luLCBsZWZ0X21hcmdpbiwKKwkJCQkgIE5VTEwpOworCQl9CisJCWVsc2UKKwkJICAgIFh0VmFTZXRWYWx1ZXMoY2hpbGRyZW5baV0sIFh0TnJpZ2h0TWFyZ2luLCByaWdodF9tYXJnaW4sCisJCQkJICBOVUxMKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgLyogUGxlYXNlIGJlIHN1cmUgdG8gZGVzdHJveSB0aGUgcGFyZW50IHdpZGdldCBmaXJzdCAoaS5lLiBtZW51LT5pZCkuCisgICAgICoKKyAgICAgKiBUaGlzIGNvZGUgc2hvdWxkIGJlIGJhc2ljYWxseSBpZGVudGljYWwgdG8gdGhhdCBpbiB0aGUgZmlsZSBndWlfbW90aWYuYworICAgICAqIGJlY2F1c2UgdGhleSBhcmUgYm90aCBYdCBiYXNlZC4KKyAgICAgKi8KKyAgICBpZiAobWVudS0+aWQgIT0gKFdpZGdldCkwKQorICAgIHsKKwlDYXJkaW5hbCAgICBudW1fY2hpbGRyZW47CisJRGltZW5zaW9uICAgaGVpZ2h0LCBzcGFjZSwgYm9yZGVyOworCisJWHRWYUdldFZhbHVlcyhtZW51QmFyLAorCQlYdE52U3BhY2UsCSZzcGFjZSwKKwkJWHROYm9yZGVyV2lkdGgsICZib3JkZXIsCisJCU5VTEwpOworCVh0VmFHZXRWYWx1ZXMobWVudS0+aWQsCisJCVh0TmhlaWdodCwJJmhlaWdodCwKKwkJTlVMTCk7CisjaWYgZGVmaW5lZChGRUFUX1RPT0xCQVIpICYmIGRlZmluZWQoRkVBVF9CRVZBTCkKKwlpZiAocGFyZW50ID09IHRvb2xCYXIgJiYgbWVudS0+dGlwICE9IE5VTEwpCisJeworCSAgICAvKiBXZSB0cnkgdG8gZGVzdHJveSB0aGlzIGJlZm9yZSB0aGUgYWN0dWFsIG1lbnUsIGJlY2F1c2UgdGhlcmUgYXJlCisJICAgICAqIGNhbGxiYWNrcywgZXRjLiB0aGF0IHdpbGwgYmUgdW5yZWdpc3RlcmVkIGR1cmluZyB0aGUgdG9vbHRpcAorCSAgICAgKiBkZXN0cnVjdGlvbi4KKwkgICAgICoKKwkgICAgICogSWYgeW91IGNhbGwgImd1aV9tY2hfZGVzdHJveV9iZXZhbF9hcmVhKCkiIGFmdGVyIGRlc3Ryb3lpbmcKKwkgICAgICogbWVudS0+aWQsIHRoZW4gdGhlIHRvb2x0aXAncyB3aW5kb3cgd2lsbCBoYXZlIGFscmVhZHkgYmVlbgorCSAgICAgKiBkZWFsbG9jYXRlZCBieSBYdCwgYW5kIHVua25vd24gYmVoYXZpb3VyIHdpbGwgZW5zdWUgKHByb2JhYmx5CisJICAgICAqIGEgY29yZSBkdW1wKS4KKwkgICAgICovCisJICAgIGd1aV9tY2hfZGVzdHJveV9iZXZhbF9hcmVhKG1lbnUtPnRpcCk7CisJICAgIG1lbnUtPnRpcCA9IE5VTEw7CisJfQorI2VuZGlmCisJLyoKKwkgKiBUaGlzIGlzIGEgaGFjayB0byBzdG9wIHRoZSBBdGhlbmEgc2ltcGxlTWVudVdpZGdldCBmcm9tIGdldHRpbmcgYQorCSAqIEJhZFZhbHVlIGVycm9yIHdoZW4gYSBtZW51J3MgbGFzdCBjaGlsZCBpcyBkZXN0cm95ZWQuIFdlIGNoZWNrIHRvCisJICogc2VlIGlmIHRoaXMgaXMgdGhlIGxhc3QgY2hpbGQgYW5kIGlmIHNvLCBkb24ndCBkZWxldGUgaXQuIFRoZSBwYXJlbnQKKwkgKiB3aWxsIGJlIGRlbGV0ZWQgc29vbiBhbnl3YXksIGFuZCBpdCB3aWxsIGRlbGV0ZSBpdCdzIGNoaWxkcmVuIGxpa2UKKwkgKiBhbGwgZ29vZCB3aWRnZXRzIGRvLgorCSAqLworCS8qIE5PVEU6IFRoZSBjYXVzZSBvZiB0aGUgQmFkVmFsdWUgWCBQcm90b2NvbCBFcnJvciBpcyBiZWNhdXNlIHdoZW4gdGhlCisJICogbGFzdCBjaGlsZCBpcyBkZXN0cm95ZWQsIGl0IGlzIGZpcnN0IHVubWFuYWdlZCwgdGh1cyBjYXVzaW5nIGEKKwkgKiBnZW9tZXRyeSByZXNpemUgcmVxdWVzdCBmcm9tIHRoZSBwYXJlbnQgU2hlbGwgd2lkZ2V0LgorCSAqIFNpbmNlIHRoZSBTaGVsbCB3aWRnZXQgaGFzIG5vIG1vcmUgY2hpbGRyZW4sIGl0IGlzIHJlc2l6ZWQgdG8gaGF2ZQorCSAqIHdpZHRoL2hlaWdodCBvZiAwLiAgWENvbmZpZ3VyZVdpbmRvdygpIGlzIHRoZW4gY2FsbGVkIHdpdGggdGhlCisJICogd2lkdGgvaGVpZ2h0IG9mIDAsIHdoaWNoIGdlbmVyYXRlcyB0aGUgQmFkVmFsdWUuCisJICoKKwkgKiBUaGlzIGhhcHBlbnMgaW4gcGhhc2UgdHdvIG9mIHRoZSB3aWRnZXQgZGVzdHJ1Y3Rpb24gcHJvY2Vzcy4KKwkgKi8KKwl7CisJICAgIGlmIChwYXJlbnQgIT0gbWVudUJhcgorI2lmZGVmIEZFQVRfVE9PTEJBUgorCQkgICAgJiYgcGFyZW50ICE9IHRvb2xCYXIKKyNlbmRpZgorCQkgICAgKQorCSAgICB7CisJCVh0VmFHZXRWYWx1ZXMocGFyZW50LCBYdE5udW1DaGlsZHJlbiwgJm51bV9jaGlsZHJlbiwgTlVMTCk7CisJCWlmIChudW1fY2hpbGRyZW4gPiAxKQorCQkgICAgWHREZXN0cm95V2lkZ2V0KG1lbnUtPmlkKTsKKwkgICAgfQorCSAgICBlbHNlCisJCVh0RGVzdHJveVdpZGdldChtZW51LT5pZCk7CisJICAgIG1lbnUtPmlkID0gKFdpZGdldCkwOworCX0KKworCWlmIChwYXJlbnQgPT0gbWVudUJhcikKKwl7CisJICAgIGlmICghZ3VpLm1lbnVfaGVpZ2h0X2ZpeGVkKQorCQlndWkubWVudV9oZWlnaHQgPSBoZWlnaHQgKyAyICogKHNwYWNlICsgYm9yZGVyKTsKKwl9CisjaWZkZWYgRkVBVF9UT09MQkFSCisJZWxzZSBpZiAocGFyZW50ID09IHRvb2xCYXIpCisJeworCSAgICAvKiBXaGVuIHJlbW92aW5nIGxhc3QgdG9vbGJhciBpdGVtLCBkb24ndCBkaXNwbGF5IHRoZSB0b29sYmFyLiAqLworCSAgICBYdFZhR2V0VmFsdWVzKHRvb2xCYXIsIFh0Tm51bUNoaWxkcmVuLCAmbnVtX2NoaWxkcmVuLCBOVUxMKTsKKwkgICAgaWYgKG51bV9jaGlsZHJlbiA9PSAwKQorCQlndWlfbWNoX3Nob3dfdG9vbGJhcihGQUxTRSk7CisJICAgIGVsc2UKKwkJZ3VpLnRvb2xiYXJfaGVpZ2h0ID0gZ3VpX21jaF9jb21wdXRlX3Rvb2xiYXJfaGVpZ2h0KCk7CisJfQorI2VuZGlmCisgICAgfQorICAgIGlmIChtZW51LT5zdWJtZW51X2lkICE9IChXaWRnZXQpMCkKKyAgICB7CisJWHREZXN0cm95V2lkZ2V0KG1lbnUtPnN1Ym1lbnVfaWQpOworCW1lbnUtPnN1Ym1lbnVfaWQgPSAoV2lkZ2V0KTA7CisgICAgfQorfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX2F0aGVuYV9tZW51X3RpbWVvdXQoY2xpZW50X2RhdGEsIGlkKQorICAgIFh0UG9pbnRlcgkgICAgY2xpZW50X2RhdGE7CisgICAgWHRJbnRlcnZhbElkICAgICppZDsKK3sKKyAgICBXaWRnZXQgIHcgPSAoV2lkZ2V0KWNsaWVudF9kYXRhOworICAgIFdpZGdldCAgcG9wdXA7CisKKyAgICB0aW1lciA9IDA7CisgICAgaWYgKFh0SXNTdWJjbGFzcyh3LHNtZUJTQk9iamVjdENsYXNzKSkKKyAgICB7CisJUGl4bWFwIHA7CisKKwlYdFZhR2V0VmFsdWVzKHcsIFh0TnJpZ2h0Qml0bWFwLCAmcCwgTlVMTCk7CisJaWYgKChwICE9IE5vbmUpICYmIChwICE9IFh0VW5zcGVjaWZpZWRQaXhtYXApKQorCXsKKwkgICAgLyogV2UgYXJlIGRlYWxpbmcgd2l0aCBhbiBpdGVtIHRoYXQgaGFzIGEgc3VibWVudSAqLworCSAgICBwb3B1cCA9IGdldF9wb3B1cF9lbnRyeShYdFBhcmVudCh3KSk7CisJICAgIGlmIChwb3B1cCA9PSAoV2lkZ2V0KTApCisJCXJldHVybjsKKwkgICAgWHRQb3B1cChwb3B1cCwgWHRHcmFiTm9uZXhjbHVzaXZlKTsKKwl9CisgICAgfQorfQorCisvKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIChpbiBzY3JlZW4gY29vcmRpbmF0ZXMpCisgKiB3aGVyZSBhIHN1Ym1lbnUgc2hvdWxkIGFwcGVhciByZWxhdGl2ZSB0byB0aGUgbWVudSBlbnRyeSB0aGF0IHBvcHBlZCBpdAorICogdXAuICBJdCBzaG91bGQgYXBwZWFyIGV2ZW4gd2l0aCBhbmQganVzdCBzbGlnaHRseSB0byB0aGUgbGVmdCBvZiB0aGUKKyAqIHJpZ2h0bW9zdCBlbmQgb2YgdGhlIG1lbnUgZW50cnkgdGhhdCBjYXVzZWQgdGhlIHBvcHVwLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gWHRQb3B1cCgpIGlzIGNhbGxlZC4KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2d1aV9hdGhlbmFfcG9wdXBfY2FsbGJhY2sodywgY2xpZW50X2RhdGEsIGNhbGxfZGF0YSkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGE7CisgICAgWHRQb2ludGVyCWNhbGxfZGF0YTsKK3sKKyAgICAvKiBBc3N1bXB0aW9uOiBYdElzU3ViY2xhc3MoWHRQYXJlbnQodyksc2ltcGxlTWVudVdpZGdldENsYXNzKSAqLworICAgIHZpbW1lbnVfVAkqbWVudSA9ICh2aW1tZW51X1QgKiljbGllbnRfZGF0YTsKKyAgICBEaW1lbnNpb24Jd2lkdGg7CisgICAgUG9zaXRpb24Jcm9vdF94LCByb290X3k7CisKKyAgICAvKiBGaXJzdCwgcG9wZG93biBhbnkgc2libGluZ3MgdGhhdCBtYXkgaGF2ZSBtZW51cyBwb3BwZWQgdXAgKi8KKyAgICB7CisJdmltbWVudV9UICppOworCisJZm9yIChpID0gbWVudS0+cGFyZW50LT5jaGlsZHJlbjsgaSAhPSBOVUxMOyBpID0gaS0+bmV4dCkKKwl7CisJICAgIGlmIChpLT5zdWJtZW51X2lkICE9IE5VTEwgJiYgWHRJc01hbmFnZWQoaS0+c3VibWVudV9pZCkpCisJCVh0UG9wZG93bihpLT5zdWJtZW51X2lkKTsKKwl9CisgICAgfQorICAgIFh0VmFHZXRWYWx1ZXMoWHRQYXJlbnQodyksCisJCSAgWHROd2lkdGgsICAgJndpZHRoLAorCQkgIE5VTEwpOworICAgIC8qIEFzc3VtcHRpb246IFhhd1NpbXBsZU1lbnVHZXRBY3RpdmVFbnRyeShYdFBhcmVudCh3KSkgPT0gbWVudS0+aWQgKi8KKyAgICAvKiBpLmUuIFRoaXMgSVMgdGhlIGFjdGl2ZSBlbnRyeSAqLworICAgIFh0VHJhbnNsYXRlQ29vcmRzKG1lbnUtPmlkLHdpZHRoIC0gNSwgMCwgJnJvb3RfeCwgJnJvb3RfeSk7CisgICAgWHRWYVNldFZhbHVlcyh3LCBYdE54LCByb290X3gsCisJCSAgICAgWHROeSwgcm9vdF95LAorCQkgICAgIE5VTEwpOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitndWlfYXRoZW5hX3BvcGRvd25fc3VibWVudXNfYWN0aW9uKHcsIGV2ZW50LCBhcmdzLCBuYXJncykKKyAgICBXaWRnZXQJdzsKKyAgICBYRXZlbnQJKmV2ZW50OworICAgIFN0cmluZwkqYXJnczsKKyAgICBDYXJkaW5hbAkqbmFyZ3M7Cit7CisgICAgV2lkZ2V0TGlzdAljaGlsZHJlbjsKKyAgICBDYXJkaW5hbAludW1fY2hpbGRyZW47CisKKyAgICBYdFZhR2V0VmFsdWVzKHcsIFh0TmNoaWxkcmVuLCAmY2hpbGRyZW4sCisJCSAgICAgWHRObnVtQ2hpbGRyZW4sICZudW1fY2hpbGRyZW4sCisJCSAgICAgTlVMTCk7CisgICAgZm9yICg7IG51bV9jaGlsZHJlbiA+IDA7IC0tbnVtX2NoaWxkcmVuKQorICAgIHsKKwlXaWRnZXQgY2hpbGQgPSBjaGlsZHJlbltudW1fY2hpbGRyZW4gLSAxXTsKKworCWlmIChoYXNfc3VibWVudShjaGlsZCkpCisJeworCSAgICBXaWRnZXQgdGVtcF93OworCisJICAgIHRlbXBfdyA9IHN1Ym1lbnVfd2lkZ2V0KGNoaWxkKTsKKwkgICAgZ3VpX2F0aGVuYV9wb3Bkb3duX3N1Ym1lbnVzX2FjdGlvbih0ZW1wX3csZXZlbnQsYXJncyxuYXJncyk7CisJICAgIFh0UG9wZG93bih0ZW1wX3cpOworCX0KKyAgICB9Cit9CisKKy8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiB3aWRnZXQgaGFzIGEgc3VibWVudSB0aGF0IGNhbiBiZSBwb3BwZWQgdXAuICovCisgICAgc3RhdGljIEJvb2xlYW4KK2hhc19zdWJtZW51KHdpZGdldCkKKyAgICBXaWRnZXQgIHdpZGdldDsKK3sKKyAgICBpZiAoKHdpZGdldCAhPSBOVUxMKSAmJiBYdElzU3ViY2xhc3Mod2lkZ2V0LHNtZUJTQk9iamVjdENsYXNzKSkKKyAgICB7CisJUGl4bWFwIHA7CisKKwlYdFZhR2V0VmFsdWVzKHdpZGdldCwgWHROcmlnaHRCaXRtYXAsICZwLCBOVUxMKTsKKwlpZiAoKHAgIT0gTm9uZSkgJiYgKHAgIT0gWHRVbnNwZWNpZmllZFBpeG1hcCkpCisJICAgIHJldHVybiBUcnVlOworICAgIH0KKyAgICByZXR1cm4gRmFsc2U7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK2d1aV9hdGhlbmFfZGVsYXllZF9hcm1fYWN0aW9uKHcsIGV2ZW50LCBhcmdzLCBuYXJncykKKyAgICBXaWRnZXQJdzsKKyAgICBYRXZlbnQJKmV2ZW50OworICAgIFN0cmluZwkqYXJnczsKKyAgICBDYXJkaW5hbAkqbmFyZ3M7Cit7CisgICAgRGltZW5zaW9uCXdpZHRoLCBoZWlnaHQ7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUgIT0gTW90aW9uTm90aWZ5KQorCXJldHVybjsKKworICAgIFh0VmFHZXRWYWx1ZXModywKKwlYdE53aWR0aCwgICAmd2lkdGgsCisJWHROaGVpZ2h0LCAgJmhlaWdodCwKKwlOVUxMKTsKKworICAgIGlmIChldmVudC0+eG1vdGlvbi54ID49IChpbnQpd2lkdGggfHwgZXZlbnQtPnhtb3Rpb24ueSA+PSAoaW50KWhlaWdodCkKKwlyZXR1cm47CisKKyAgICB7CisJc3RhdGljIFdpZGdldAkgICAgcHJldmlvdXNfYWN0aXZlX3dpZGdldCA9IE5VTEw7CisJV2lkZ2V0CQkgICAgY3VycmVudDsKKworCWN1cnJlbnQgPSBYYXdTaW1wbGVNZW51R2V0QWN0aXZlRW50cnkodyk7CisJaWYgKGN1cnJlbnQgIT0gcHJldmlvdXNfYWN0aXZlX3dpZGdldCkKKwl7CisJICAgIGlmICh0aW1lcikKKwkgICAgeworCQkvKiBJZiB0aGUgdGltZW91dCBoYXNuJ3QgYmVlbiB0cmlnZ2VyZWQsIHJlbW92ZSBpdCAqLworCQlYdFJlbW92ZVRpbWVPdXQodGltZXIpOworCSAgICB9CisJICAgIGd1aV9hdGhlbmFfcG9wZG93bl9zdWJtZW51c19hY3Rpb24odyxldmVudCxhcmdzLG5hcmdzKTsKKwkgICAgaWYgKGhhc19zdWJtZW51KGN1cnJlbnQpKQorCSAgICB7CisJCVh0QXBwQWRkVGltZU91dChYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KHcpLCA2MDBMLAorCQkJCWd1aV9hdGhlbmFfbWVudV90aW1lb3V0LAorCQkJCShYdFBvaW50ZXIpY3VycmVudCk7CisJICAgIH0KKwkgICAgcHJldmlvdXNfYWN0aXZlX3dpZGdldCA9IGN1cnJlbnQ7CisJfQorICAgIH0KK30KKworICAgIHN0YXRpYyBXaWRnZXQKK2dldF9wb3B1cF9lbnRyeSh3KQorICAgIFdpZGdldCAgdzsKK3sKKyAgICBXaWRnZXQJbWVudXc7CisKKyAgICAvKiBHZXQgdGhlIGFjdGl2ZSBlbnRyeSBmb3IgdGhlIGN1cnJlbnQgbWVudSAqLworICAgIGlmICgobWVudXcgPSBYYXdTaW1wbGVNZW51R2V0QWN0aXZlRW50cnkodykpID09IChXaWRnZXQpMCkKKwlyZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBzdWJtZW51X3dpZGdldChtZW51dyk7Cit9CisKKy8qIEdpdmVuIHRoZSB3aWRnZXQgdGhhdCBoYXMgYmVlbiBkZXRlcm1pbmVkIHRvIGhhdmUgYSBzdWJtZW51LCByZXR1cm4gdGhlIHN1Ym1lbnUgd2lkZ2V0CisgKiB0aGF0IGlzIHRvIGJlIHBvcHBlZCB1cC4KKyAqLworICAgIHN0YXRpYyBXaWRnZXQKK3N1Ym1lbnVfd2lkZ2V0KHdpZGdldCkKKyAgICBXaWRnZXQgIHdpZGdldDsKK3sKKyAgICAvKiBQcmVjb25kaXRpb246IGhhc19zdWJtZW51KHdpZGdldCkgPT0gVHJ1ZQorICAgICAqCSAgICBYdElzU3ViY2xhc3MoWHRQYXJlbnQod2lkZ2V0KSxzaW1wbGVNZW51V2lkZ2V0Q2xhc3MpID09IFRydWUKKyAgICAgKi8KKworICAgIGNoYXJfdQkqcHVsbHJpZ2h0X25hbWU7CisgICAgV2lkZ2V0CXBvcHVwOworCisgICAgcHVsbHJpZ2h0X25hbWUgPSBtYWtlX3B1bGxfbmFtZSgoY2hhcl91ICopWHROYW1lKHdpZGdldCkpOworICAgIHBvcHVwID0gWHROYW1lVG9XaWRnZXQoWHRQYXJlbnQod2lkZ2V0KSwgKGNoYXIgKilwdWxscmlnaHRfbmFtZSk7CisgICAgdmltX2ZyZWUocHVsbHJpZ2h0X25hbWUpOworCisgICAgcmV0dXJuIHBvcHVwOworICAgIC8qIFBvc3Rjb25kaXRpb246IChwb3B1cCAhPSBOVUxMKSBpbXBsaWVzCisgICAgICogKFh0SXNTdWJjbGFzcyhwb3B1cCxzaW1wbGVNZW51V2lkZ2V0Q2xhc3MpID09IFRydWUpICovCit9CisKKy8qIEFSR1NVU0VEICovCisgICAgdm9pZAorZ3VpX21jaF9zaG93X3BvcHVwbWVudShtZW51KQorICAgIHZpbW1lbnVfVCAqbWVudTsKK3sKKyAgICBpbnQJCXJvb3R4LCByb290eSwgd2lueCwgd2lueTsKKyAgICBXaW5kb3cJcm9vdCwgY2hpbGQ7CisgICAgdW5zaWduZWQgaW50IG1hc2s7CisKKyAgICBpZiAobWVudS0+c3VibWVudV9pZCA9PSAoV2lkZ2V0KTApCisJcmV0dXJuOworCisgICAgLyogUG9zaXRpb24gdGhlIHBvcHVwIG1lbnUgYXQgdGhlIHBvaW50ZXIgKi8KKyAgICBpZiAoWFF1ZXJ5UG9pbnRlcihndWkuZHB5LCBYdFdpbmRvdyh2aW1TaGVsbCksICZyb290LCAmY2hpbGQsCisJCSZyb290eCwgJnJvb3R5LCAmd2lueCwgJndpbnksICZtYXNrKSkKKyAgICB7CisJcm9vdHggLT0gMzA7CisJaWYgKHJvb3R4IDwgMCkKKwkgICAgcm9vdHggPSAwOworCXJvb3R5IC09IDU7CisJaWYgKHJvb3R5IDwgMCkKKwkgICAgcm9vdHkgPSAwOworCVh0VmFTZXRWYWx1ZXMobWVudS0+c3VibWVudV9pZCwKKwkJWHROeCwgcm9vdHgsCisJCVh0TnksIHJvb3R5LAorCQlOVUxMKTsKKyAgICB9CisKKyAgICBYdE92ZXJyaWRlVHJhbnNsYXRpb25zKG1lbnUtPnN1Ym1lbnVfaWQsIHBvcHVwVHJhbnMpOworICAgIFh0UG9wdXBTcHJpbmdMb2FkZWQobWVudS0+c3VibWVudV9pZCk7Cit9CisKKyNlbmRpZiAvKiBGRUFUX01FTlUgKi8KKworLyoKKyAqIFNldCB0aGUgbWVudSBhbmQgc2Nyb2xsYmFyIGNvbG9ycyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZGVmX2NvbG9ycygpCit7CisgICAgLyoKKyAgICAgKiBHZXQgdGhlIGNvbG9ycyBvdXJzZWx2ZXMuICBVc2luZyB0aGUgYXV0b21hdGljIGNvbnZlcnNpb24gZG9lc24ndAorICAgICAqIGhhbmRsZSBsb29raW5nIGZvciBhcHByb3hpbWF0ZSBjb2xvcnMuCisgICAgICovCisgICAgaWYgKGd1aS5pbl91c2UpCisgICAgeworCWd1aS5tZW51X2ZnX3BpeGVsID0gZ3VpX2dldF9jb2xvcigoY2hhcl91ICopZ3VpLnJzcmNfbWVudV9mZ19uYW1lKTsKKwlndWkubWVudV9iZ19waXhlbCA9IGd1aV9nZXRfY29sb3IoKGNoYXJfdSAqKWd1aS5yc3JjX21lbnVfYmdfbmFtZSk7CisJZ3VpLnNjcm9sbF9mZ19waXhlbCA9IGd1aV9nZXRfY29sb3IoKGNoYXJfdSAqKWd1aS5yc3JjX3Njcm9sbF9mZ19uYW1lKTsKKwlndWkuc2Nyb2xsX2JnX3BpeGVsID0gZ3VpX2dldF9jb2xvcigoY2hhcl91ICopZ3VpLnJzcmNfc2Nyb2xsX2JnX25hbWUpOworI2lmZGVmIEZFQVRfQkVWQUwKKwlndWkudG9vbHRpcF9mZ19waXhlbCA9IGd1aV9nZXRfY29sb3IoKGNoYXJfdSAqKWd1aS5yc3JjX3Rvb2x0aXBfZmdfbmFtZSk7CisJZ3VpLnRvb2x0aXBfYmdfcGl4ZWwgPSBndWlfZ2V0X2NvbG9yKChjaGFyX3UgKilndWkucnNyY190b29sdGlwX2JnX25hbWUpOworI2VuZGlmCisgICAgfQorfQorCisKKy8qCisgKiBTY3JvbGxiYXIgc3R1ZmYuCisgKi8KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3Njcm9sbGJhcl90aHVtYihzYiwgdmFsLCBzaXplLCBtYXgpCisgICAgc2Nyb2xsYmFyX1QJKnNiOworICAgIGxvbmcJdmFsOworICAgIGxvbmcJc2l6ZTsKKyAgICBsb25nCW1heDsKK3sKKyAgICBkb3VibGUJdiwgczsKKworICAgIGlmIChzYi0+aWQgPT0gKFdpZGdldCkwKQorCXJldHVybjsKKworICAgIC8qCisgICAgICogQXRoZW5hIHNjcm9sbGJhciBtdXN0IGdvIGZyb20gMC4wIHRvIDEuMC4KKyAgICAgKi8KKyAgICBpZiAobWF4ID09IDApCisgICAgeworCS8qIFNvIHlvdSBjYW4ndCBzY3JvbGwgaXQgYXQgYWxsIChub3JtYWxseSBpdCBzY3JvbGxzIHBhc3QgZW5kKSAqLworI2lmZGVmIEZFQVRfR1VJX05FWFRBVworCVhhd1Njcm9sbGJhclNldFRodW1iKHNiLT5pZCwgMC4wLCAxLjApOworI2Vsc2UKKwl2aW1fWGF3U2Nyb2xsYmFyU2V0VGh1bWIoc2ItPmlkLCAwLjAsIDEuMCwgMC4wKTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworCXYgPSAoZG91YmxlKXZhbCAvIChkb3VibGUpKG1heCArIDEpOworCXMgPSAoZG91YmxlKXNpemUgLyAoZG91YmxlKShtYXggKyAxKTsKKyNpZmRlZiBGRUFUX0dVSV9ORVhUQVcKKwlYYXdTY3JvbGxiYXJTZXRUaHVtYihzYi0+aWQsIHYsIHMpOworI2Vsc2UKKwl2aW1fWGF3U2Nyb2xsYmFyU2V0VGh1bWIoc2ItPmlkLCB2LCBzLCAxLjApOworI2VuZGlmCisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3BvcyhzYiwgeCwgeSwgdywgaCkKKyAgICBzY3JvbGxiYXJfVCAqc2I7CisgICAgaW50CQl4OworICAgIGludAkJeTsKKyAgICBpbnQJCXc7CisgICAgaW50CQloOworeworICAgIGlmIChzYi0+aWQgPT0gKFdpZGdldCkwKQorCXJldHVybjsKKworICAgIFh0VW5tYW5hZ2VDaGlsZChzYi0+aWQpOworICAgIFh0VmFTZXRWYWx1ZXMoc2ItPmlkLAorCQkgIFh0Tmhvcml6RGlzdGFuY2UsIHgsCisJCSAgWHROdmVydERpc3RhbmNlLCB5LAorCQkgIFh0TndpZHRoLCB3LAorCQkgIFh0TmhlaWdodCwgaCwKKwkJICBOVUxMKTsKKyAgICBYdE1hbmFnZUNoaWxkKHNiLT5pZCk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2VuYWJsZV9zY3JvbGxiYXIoc2IsIGZsYWcpCisgICAgc2Nyb2xsYmFyX1QJKnNiOworICAgIGludAkJZmxhZzsKK3sKKyAgICBpZiAoc2ItPmlkICE9IChXaWRnZXQpMCkKKyAgICB7CisJaWYgKGZsYWcpCisJICAgIFh0TWFuYWdlQ2hpbGQoc2ItPmlkKTsKKwllbHNlCisJICAgIFh0VW5tYW5hZ2VDaGlsZChzYi0+aWQpOworICAgIH0KK30KKworICAgIHZvaWQKK2d1aV9tY2hfY3JlYXRlX3Njcm9sbGJhcihzYiwgb3JpZW50KQorICAgIHNjcm9sbGJhcl9UICpzYjsKKyAgICBpbnQJCW9yaWVudDsJLyogU0JBUl9WRVJUIG9yIFNCQVJfSE9SSVogKi8KK3sKKyAgICBzYi0+aWQgPSBYdFZhQ3JlYXRlV2lkZ2V0KCJzY3JvbGxCYXIiLAorI2lmZGVmIEZFQVRfR1VJX05FWFRBVworCSAgICBzY3JvbGxiYXJXaWRnZXRDbGFzcywgdmltRm9ybSwKKyNlbHNlCisJICAgIHZpbV9zY3JvbGxiYXJXaWRnZXRDbGFzcywgdmltRm9ybSwKKyNlbmRpZgorCSAgICBYdE5yZXNpemFibGUsICAgVHJ1ZSwKKwkgICAgWHROdG9wLAkgICAgWHRDaGFpblRvcCwKKwkgICAgWHROYm90dG9tLAkgICAgWHRDaGFpblRvcCwKKwkgICAgWHRObGVmdCwJICAgIFh0Q2hhaW5MZWZ0LAorCSAgICBYdE5yaWdodCwJICAgIFh0Q2hhaW5MZWZ0LAorCSAgICBYdE5ib3JkZXJXaWR0aCwgMCwKKwkgICAgWHROb3JpZW50YXRpb24sIChvcmllbnQgPT0gU0JBUl9WRVJUKSA/IFh0b3JpZW50VmVydGljYWwKKwkJCQkJCSAgOiBYdG9yaWVudEhvcml6b250YWwsCisJICAgIFh0TmZvcmVncm91bmQsIGd1aS5zY3JvbGxfZmdfcGl4ZWwsCisJICAgIFh0TmJhY2tncm91bmQsIGd1aS5zY3JvbGxfYmdfcGl4ZWwsCisJICAgIE5VTEwpOworICAgIGlmIChzYi0+aWQgPT0gKFdpZGdldCkwKQorCXJldHVybjsKKworICAgIFh0QWRkQ2FsbGJhY2soc2ItPmlkLCBYdE5qdW1wUHJvYywKKwkJICBndWlfYXRoZW5hX3Njcm9sbF9jYl9qdW1wLCAoWHRQb2ludGVyKXNiLT5pZGVudCk7CisgICAgWHRBZGRDYWxsYmFjayhzYi0+aWQsIFh0TnNjcm9sbFByb2MsCisJCSAgZ3VpX2F0aGVuYV9zY3JvbGxfY2Jfc2Nyb2xsLCAoWHRQb2ludGVyKXNiLT5pZGVudCk7CisKKyNpZmRlZiBGRUFUX0dVSV9ORVhUQVcKKyAgICBYYXdTY3JvbGxiYXJTZXRUaHVtYihzYi0+aWQsIDAuMCwgMS4wKTsKKyNlbHNlCisgICAgdmltX1hhd1Njcm9sbGJhclNldFRodW1iKHNiLT5pZCwgMC4wLCAxLjAsIDAuMCk7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2d1aV9tY2hfZGVzdHJveV9zY3JvbGxiYXIoc2IpCisgICAgc2Nyb2xsYmFyX1QgKnNiOworeworICAgIGlmIChzYi0+aWQgIT0gKFdpZGdldCkwKQorCVh0RGVzdHJveVdpZGdldChzYi0+aWQpOworfQorI2VuZGlmCisKKyAgICB2b2lkCitndWlfbWNoX3NldF9zY3JvbGxiYXJfY29sb3JzKHNiKQorICAgIHNjcm9sbGJhcl9UICpzYjsKK3sKKyAgICBpZiAoc2ItPmlkICE9IChXaWRnZXQpMCkKKwlYdFZhU2V0VmFsdWVzKHNiLT5pZCwKKwkgICAgWHROZm9yZWdyb3VuZCwgZ3VpLnNjcm9sbF9mZ19waXhlbCwKKwkgICAgWHROYmFja2dyb3VuZCwgZ3VpLnNjcm9sbF9iZ19waXhlbCwKKwkgICAgTlVMTCk7CisKKyAgICAvKiBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIHJlY3RhbmdsZSBiZWxvdyB0aGUgdmVydGljYWwgc2Nyb2xsYmFycy4gKi8KKyAgICBpZiAoc2IgPT0gJmd1aS5ib3R0b21fc2JhciAmJiB2aW1Gb3JtICE9IChXaWRnZXQpMCkKKwlndWlfYXRoZW5hX3Njcm9sbF9jb2xvcnModmltRm9ybSk7Cit9CisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIHN0dWZmOgorICovCisgICAgV2luZG93CitndWlfeDExX2dldF93aWQoKQoreworICAgIHJldHVybiBYdFdpbmRvdyh0ZXh0QXJlYSk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQlJPV1NFKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFB1dCB1cCBhIGZpbGUgcmVxdWVzdGVyLgorICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgbmFtZSBpbiBhbGxvY2F0ZWQgbWVtb3J5LCBvciBOVUxMIGZvciBDYW5jZWwuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgY2hhcl91ICoKK2d1aV9tY2hfYnJvd3NlKHNhdmluZywgdGl0bGUsIGRmbHQsIGV4dCwgaW5pdGRpciwgZmlsdGVyKQorICAgIGludAkJc2F2aW5nOwkJLyogc2VsZWN0IGZpbGUgdG8gd3JpdGUgKi8KKyAgICBjaGFyX3UJKnRpdGxlOwkJLyogbm90IHVzZWQgKHRpdGxlIGZvciB0aGUgd2luZG93KSAqLworICAgIGNoYXJfdQkqZGZsdDsJCS8qIG5vdCB1c2VkIChkZWZhdWx0IG5hbWUpICovCisgICAgY2hhcl91CSpleHQ7CQkvKiBub3QgdXNlZCAoZXh0ZW5zaW9uIGFkZGVkKSAqLworICAgIGNoYXJfdQkqaW5pdGRpcjsJLyogaW5pdGlhbCBkaXJlY3RvcnksIE5VTEwgZm9yIGN1cnJlbnQgZGlyICovCisgICAgY2hhcl91CSpmaWx0ZXI7CS8qIG5vdCB1c2VkIChmaWxlIG5hbWUgZmlsdGVyKSAqLworeworICAgIFBvc2l0aW9uIHgsIHk7CisgICAgY2hhcl91CWRpcmJ1ZltNQVhQQVRITF07CisKKyAgICAvKiBDb25jYXRlbmF0ZSAiaW5pdGRpciIgYW5kICJkZmx0Ii4gKi8KKyAgICBpZiAoaW5pdGRpciA9PSBOVUxMIHx8ICppbml0ZGlyID09IE5VTCkKKwltY2hfZGlybmFtZShkaXJidWYsIE1BWFBBVEhMKTsKKyAgICBlbHNlIGlmIChTVFJMRU4oaW5pdGRpcikgKyAyIDwgTUFYUEFUSEwpCisJU1RSQ1BZKGRpcmJ1ZiwgaW5pdGRpcik7CisgICAgZWxzZQorCWRpcmJ1ZlswXSA9IE5VTDsKKyAgICBpZiAoZGZsdCAhPSBOVUxMICYmICpkZmx0ICE9IE5VTAorCQkJICAgICAgJiYgU1RSTEVOKGRpcmJ1ZikgKyAyICsgU1RSTEVOKGRmbHQpIDwgTUFYUEFUSEwpCisgICAgeworCWFkZF9wYXRoc2VwKGRpcmJ1Zik7CisJU1RSQ0FUKGRpcmJ1ZiwgZGZsdCk7CisgICAgfQorCisgICAgLyogUG9zaXRpb24gdGhlIGZpbGUgc2VsZWN0b3IganVzdCBiZWxvdyB0aGUgbWVudWJhciAqLworICAgIFh0VHJhbnNsYXRlQ29vcmRzKHZpbVNoZWxsLCAoUG9zaXRpb24pMCwgKFBvc2l0aW9uKQorI2lmZGVmIEZFQVRfTUVOVQorCSAgICBndWkubWVudV9oZWlnaHQKKyNlbHNlCisJICAgIDAKKyNlbmRpZgorCSAgICAsICZ4LCAmeSk7CisgICAgcmV0dXJuIChjaGFyX3UgKil2aW1fU2VsRmlsZSh2aW1TaGVsbCwgKGNoYXIgKil0aXRsZSwgKGNoYXIgKilkaXJidWYsCisJCSAgTlVMTCwgKGludCl4LCAoaW50KXksIGd1aS5tZW51X2ZnX3BpeGVsLCBndWkubWVudV9iZ19waXhlbCwKKwkJICBndWkuc2Nyb2xsX2ZnX3BpeGVsLCBndWkuc2Nyb2xsX2JnX3BpeGVsKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoUFJPVE8pCisKK3N0YXRpYyBpbnQJZGlhbG9nU3RhdHVzOworc3RhdGljIEF0b20JZGlhbG9nYXRvbTsKKworc3RhdGljIHZvaWQga2V5aGl0X2NhbGxiYWNrIF9fQVJHUygoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCwgQm9vbGVhbiAqY29udCkpOworc3RhdGljIHZvaWQgYnV0cHJvYyBfX0FSR1MoKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpKTsKK3N0YXRpYyB2b2lkIGRpYWxvZ193bV9oYW5kbGVyIF9fQVJHUygoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCwgQm9vbGVhbiAqZHVtKSk7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIHRleHRmaWVsZC4gIFdoZW4gQ1IgaXMgaGl0IHRoaXMgd29ya3MgbGlrZQorICogaGl0dGluZyB0aGUgIk9LIiBidXR0b24sIEVTQyBsaWtlICJDYW5jZWwiLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitrZXloaXRfY2FsbGJhY2sodywgY2xpZW50X2RhdGEsIGV2ZW50LCBjb250KQorICAgIFdpZGdldAkJdzsKKyAgICBYdFBvaW50ZXIJCWNsaWVudF9kYXRhOworICAgIFhFdmVudAkJKmV2ZW50OworICAgIEJvb2xlYW4JCSpjb250OworeworICAgIGNoYXIJYnVmWzJdOworCisgICAgaWYgKFhMb29rdXBTdHJpbmcoJihldmVudC0+eGtleSksIGJ1ZiwgMiwgTlVMTCwgTlVMTCkgPT0gMSkKKyAgICB7CisJaWYgKCpidWYgPT0gQ0FSKQorCSAgICBkaWFsb2dTdGF0dXMgPSAxOworCWVsc2UgaWYgKCpidWYgPT0gRVNDKQorCSAgICBkaWFsb2dTdGF0dXMgPSAwOworICAgIH0KK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorYnV0cHJvYyh3LCBjbGllbnRfZGF0YSwgY2FsbF9kYXRhKQorICAgIFdpZGdldAl3OworICAgIFh0UG9pbnRlcgljbGllbnRfZGF0YTsKKyAgICBYdFBvaW50ZXIJY2FsbF9kYXRhOworeworICAgIGRpYWxvZ1N0YXR1cyA9IChpbnQpKGxvbmcpY2xpZW50X2RhdGEgKyAxOworfQorCisvKgorICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gZGlhbG9nIHdpbmRvdyBjbG9zZWQuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitkaWFsb2dfd21faGFuZGxlcih3LCBjbGllbnRfZGF0YSwgZXZlbnQsIGR1bSkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGE7CisgICAgWEV2ZW50CSpldmVudDsKKyAgICBCb29sZWFuCSpkdW07Cit7CisgICAgaWYgKGV2ZW50LT50eXBlID09IENsaWVudE1lc3NhZ2UKKwkgICAgJiYgKChYQ2xpZW50TWVzc2FnZUV2ZW50ICopZXZlbnQpLT5kYXRhLmxbMF0gPT0gZGlhbG9nYXRvbSkKKwlkaWFsb2dTdGF0dXMgPSAwOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIGludAorZ3VpX21jaF9kaWFsb2codHlwZSwgdGl0bGUsIG1lc3NhZ2UsIGJ1dHRvbnMsIGRmbHRidXR0b24sIHRleHRmaWVsZCkKKyAgICBpbnQJCXR5cGU7CisgICAgY2hhcl91CSp0aXRsZTsKKyAgICBjaGFyX3UJKm1lc3NhZ2U7CisgICAgY2hhcl91CSpidXR0b25zOworICAgIGludAkJZGZsdGJ1dHRvbjsKKyAgICBjaGFyX3UJKnRleHRmaWVsZDsKK3sKKyAgICBjaGFyX3UJCSpidXRzOworICAgIGNoYXJfdQkJKnAsICpuZXh0OworICAgIFh0QXBwQ29udGV4dAlhcHA7CisgICAgWEV2ZW50CQlldmVudDsKKyAgICBQb3NpdGlvbgkJd2QsIGhkOworICAgIFBvc2l0aW9uCQl3diwgaHY7CisgICAgUG9zaXRpb24JCXgsIHk7CisgICAgV2lkZ2V0CQlkaWFsb2c7CisgICAgV2lkZ2V0CQlkaWFsb2dzaGVsbDsKKyAgICBXaWRnZXQJCWRpYWxvZ21lc3NhZ2U7CisgICAgV2lkZ2V0CQlkaWFsb2d0ZXh0ZmllbGQgPSAwOworICAgIFdpZGdldAkJZGlhbG9nQnV0dG9uOworICAgIFdpZGdldAkJcHJldl9kaWFsb2dCdXR0b24gPSBOVUxMOworICAgIGludAkJCWJ1dGNvdW50OworICAgIGludAkJCXZlcnRpY2FsOworCisgICAgaWYgKHRpdGxlID09IE5VTEwpCisJdGl0bGUgPSAoY2hhcl91ICopXygiVmltIGRpYWxvZyIpOworICAgIGRpYWxvZ1N0YXR1cyA9IC0xOworCisgICAgLyogaWYgb3VyIHBvaW50ZXIgaXMgY3VycmVudGx5IGhpZGRlbiwgdGhlbiB3ZSBzaG91bGQgc2hvdyBpdC4gKi8KKyAgICBndWlfbWNoX21vdXNlaGlkZShGQUxTRSk7CisKKyAgICAvKiBDaGVjayAndicgZmxhZyBpbiAnZ3Vpb3B0aW9ucyc6IHZlcnRpY2FsIGJ1dHRvbiBwbGFjZW1lbnQuICovCisgICAgdmVydGljYWwgPSAodmltX3N0cmNocihwX2dvLCBHT19WRVJUSUNBTCkgIT0gTlVMTCk7CisKKyAgICAvKiBUaGUgc2hlbGwgaXMgY3JlYXRlZCBlYWNoIHRpbWUsIHRvIG1ha2Ugc3VyZSBpdCBpcyByZXNpemVkIHByb3Blcmx5ICovCisgICAgZGlhbG9nc2hlbGwgPSBYdFZhQ3JlYXRlUG9wdXBTaGVsbCgiZGlhbG9nU2hlbGwiLAorCSAgICB0cmFuc2llbnRTaGVsbFdpZGdldENsYXNzLCB2aW1TaGVsbCwKKwkgICAgWHROdGl0bGUsIHRpdGxlLAorCSAgICBOVUxMKTsKKyAgICBpZiAoZGlhbG9nc2hlbGwgPT0gKFdpZGdldCkwKQorCWdvdG8gZXJyb3I7CisKKyAgICBkaWFsb2cgPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgiZGlhbG9nIiwKKwkgICAgZm9ybVdpZGdldENsYXNzLCBkaWFsb2dzaGVsbCwKKwkgICAgWHROZGVmYXVsdERpc3RhbmNlLCAyMCwKKwkgICAgTlVMTCk7CisgICAgaWYgKGRpYWxvZyA9PSAoV2lkZ2V0KTApCisJZ290byBlcnJvcjsKKyAgICBndWlfYXRoZW5hX21lbnVfY29sb3JzKGRpYWxvZyk7CisgICAgZGlhbG9nbWVzc2FnZSA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJkaWFsb2dNZXNzYWdlIiwKKwkgICAgbGFiZWxXaWRnZXRDbGFzcywgZGlhbG9nLAorCSAgICBYdE5sYWJlbCwgbWVzc2FnZSwKKwkgICAgWHROdG9wLCBYdENoYWluVG9wLAorCSAgICBYdE5ib3R0b20sIFh0Q2hhaW5Ub3AsCisJICAgIFh0TmxlZnQsIFh0Q2hhaW5MZWZ0LAorCSAgICBYdE5yaWdodCwgWHRDaGFpbkxlZnQsCisJICAgIFh0TnJlc2l6YWJsZSwgVHJ1ZSwKKwkgICAgWHROYm9yZGVyV2lkdGgsIDAsCisJICAgIE5VTEwpOworICAgIGd1aV9hdGhlbmFfbWVudV9jb2xvcnMoZGlhbG9nbWVzc2FnZSk7CisKKyAgICBpZiAodGV4dGZpZWxkICE9IE5VTEwpCisgICAgeworCWRpYWxvZ3RleHRmaWVsZCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJ0ZXh0ZmllbGQiLAorCQlhc2NpaVRleHRXaWRnZXRDbGFzcywgZGlhbG9nLAorCQlYdE53aWR0aCwgNDAwLAorCQlYdE50b3AsIFh0Q2hhaW5Ub3AsCisJCVh0TmJvdHRvbSwgWHRDaGFpblRvcCwKKwkJWHRObGVmdCwgWHRDaGFpbkxlZnQsCisJCVh0TnJpZ2h0LCBYdENoYWluUmlnaHQsCisJCVh0TmZyb21WZXJ0LCBkaWFsb2dtZXNzYWdlLAorCQlYdE5yZXNpemFibGUsIFRydWUsCisJCVh0TnN0cmluZywgdGV4dGZpZWxkLAorCQlYdE5sZW5ndGgsIElPU0laRSwKKwkJWHROdXNlU3RyaW5nSW5QbGFjZSwgVHJ1ZSwKKwkJWHROZWRpdFR5cGUsIFhhd3RleHRFZGl0LAorCQlYdE53cmFwLCBYYXd0ZXh0V3JhcE5ldmVyLAorCQlYdE5yZXNpemUsIFhhd3RleHRSZXNpemVIZWlnaHQsCisJCU5VTEwpOworCVh0TWFuYWdlQ2hpbGQoZGlhbG9ndGV4dGZpZWxkKTsKKwlYdEFkZEV2ZW50SGFuZGxlcihkaWFsb2d0ZXh0ZmllbGQsIEtleVByZXNzTWFzaywgRmFsc2UsCisJCQkgICAgKFh0RXZlbnRIYW5kbGVyKWtleWhpdF9jYWxsYmFjaywgKFh0UG9pbnRlcilOVUxMKTsKKwlYYXdUZXh0U2V0SW5zZXJ0aW9uUG9pbnQoZGlhbG9ndGV4dGZpZWxkLAorCQkJCQkgIChYYXdUZXh0UG9zaXRpb24pU1RSTEVOKHRleHRmaWVsZCkpOworCVh0U2V0S2V5Ym9hcmRGb2N1cyhkaWFsb2csIGRpYWxvZ3RleHRmaWVsZCk7CisgICAgfQorCisgICAgLyogbWFrZSBhIGNvcHksIHNvIHRoYXQgd2UgY2FuIGluc2VydCBOVUxzICovCisgICAgYnV0cyA9IHZpbV9zdHJzYXZlKGJ1dHRvbnMpOworICAgIGlmIChidXRzID09IE5VTEwpCisJcmV0dXJuIC0xOworCisgICAgcCA9IGJ1dHM7CisgICAgZm9yIChidXRjb3VudCA9IDA7ICpwOyArK2J1dGNvdW50KQorICAgIHsKKwlmb3IgKG5leHQgPSBwOyAqbmV4dDsgKytuZXh0KQorCXsKKwkgICAgaWYgKCpuZXh0ID09IERMR19IT1RLRVlfQ0hBUikKKwkJbWNoX21lbW1vdmUobmV4dCwgbmV4dCArIDEsIFNUUkxFTihuZXh0KSk7CisJICAgIGlmICgqbmV4dCA9PSBETEdfQlVUVE9OX1NFUCkKKwkgICAgeworCQkqbmV4dCsrID0gTlVMOworCQlicmVhazsKKwkgICAgfQorCX0KKwlkaWFsb2dCdXR0b24gPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgiYnV0dG9uIiwKKwkJY29tbWFuZFdpZGdldENsYXNzLCBkaWFsb2csCisJCVh0TmxhYmVsLCBwLAorCQlYdE50b3AsIFh0Q2hhaW5Cb3R0b20sCisJCVh0TmJvdHRvbSwgWHRDaGFpbkJvdHRvbSwKKwkJWHRObGVmdCwgWHRDaGFpbkxlZnQsCisJCVh0TnJpZ2h0LCBYdENoYWluTGVmdCwKKwkJWHROZnJvbVZlcnQsIHRleHRmaWVsZCA9PSBOVUxMID8gZGlhbG9nbWVzc2FnZSA6IGRpYWxvZ3RleHRmaWVsZCwKKwkJWHROdmVydERpc3RhbmNlLCB2ZXJ0aWNhbCA/IDQgOiAyMCwKKwkJWHROcmVzaXphYmxlLCBGYWxzZSwKKwkJTlVMTCk7CisJZ3VpX2F0aGVuYV9tZW51X2NvbG9ycyhkaWFsb2dCdXR0b24pOworCWlmIChidXRjb3VudCA+IDApCisJICAgIFh0VmFTZXRWYWx1ZXMoZGlhbG9nQnV0dG9uLAorCQkgICAgdmVydGljYWwgPyBYdE5mcm9tVmVydCA6IFh0TmZyb21Ib3JpeiwgcHJldl9kaWFsb2dCdXR0b24sCisJCSAgICBOVUxMKTsKKworCVh0QWRkQ2FsbGJhY2soZGlhbG9nQnV0dG9uLCBYdE5jYWxsYmFjaywgYnV0cHJvYywgKFh0UG9pbnRlcilidXRjb3VudCk7CisJcCA9IG5leHQ7CisJcHJldl9kaWFsb2dCdXR0b24gPSBkaWFsb2dCdXR0b247CisgICAgfQorICAgIHZpbV9mcmVlKGJ1dHMpOworCisgICAgWHRSZWFsaXplV2lkZ2V0KGRpYWxvZ3NoZWxsKTsKKworICAgIC8qIFNldHVwIGZvciBjYXRjaGluZyB0aGUgY2xvc2Utd2luZG93IGV2ZW50LCBkb24ndCBsZXQgaXQgY2xvc2UgVmltISAqLworICAgIGRpYWxvZ2F0b20gPSBYSW50ZXJuQXRvbShndWkuZHB5LCAiV01fREVMRVRFX1dJTkRPVyIsIEZhbHNlKTsKKyAgICBYU2V0V01Qcm90b2NvbHMoZ3VpLmRweSwgWHRXaW5kb3coZGlhbG9nc2hlbGwpLCAmZGlhbG9nYXRvbSwgMSk7CisgICAgWHRBZGRFdmVudEhhbmRsZXIoZGlhbG9nc2hlbGwsIE5vRXZlbnRNYXNrLCBUcnVlLCBkaWFsb2dfd21faGFuZGxlciwgTlVMTCk7CisKKyAgICBYdFZhR2V0VmFsdWVzKGRpYWxvZ3NoZWxsLAorCSAgICBYdE53aWR0aCwgJndkLAorCSAgICBYdE5oZWlnaHQsICZoZCwKKwkgICAgTlVMTCk7CisgICAgWHRWYUdldFZhbHVlcyh2aW1TaGVsbCwKKwkgICAgWHROd2lkdGgsICZ3diwKKwkgICAgWHROaGVpZ2h0LCAmaHYsCisJICAgIE5VTEwpOworICAgIFh0VHJhbnNsYXRlQ29vcmRzKHZpbVNoZWxsLAorCSAgICAoUG9zaXRpb24pKCh3diAtIHdkKSAvIDIpLAorCSAgICAoUG9zaXRpb24pKChodiAtIGhkKSAvIDIpLAorCSAgICAmeCwgJnkpOworICAgIGlmICh4IDwgMCkKKwl4ID0gMDsKKyAgICBpZiAoeSA8IDApCisJeSA9IDA7CisgICAgWHRWYVNldFZhbHVlcyhkaWFsb2dzaGVsbCwgWHROeCwgeCwgWHROeSwgeSwgTlVMTCk7CisKKyAgICAvKiBQb3NpdGlvbiB0aGUgbW91c2UgcG9pbnRlciBpbiB0aGUgZGlhbG9nLCByZXF1aXJlZCBmb3Igd2hlbiBmb2N1cworICAgICAqIGZvbGxvd3MgbW91c2UuICovCisgICAgWFdhcnBQb2ludGVyKGd1aS5kcHksIChXaW5kb3cpMCwgWHRXaW5kb3coZGlhbG9nc2hlbGwpLCAwLCAwLCAwLCAwLCAyMCwgNDApOworCisKKyAgICBhcHAgPSBYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KGRpYWxvZ3NoZWxsKTsKKworICAgIFh0UG9wdXAoZGlhbG9nc2hlbGwsIFh0R3JhYk5vbmV4Y2x1c2l2ZSk7CisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisJWHRBcHBOZXh0RXZlbnQoYXBwLCAmZXZlbnQpOworCVh0RGlzcGF0Y2hFdmVudCgmZXZlbnQpOworCWlmIChkaWFsb2dTdGF0dXMgPj0gMCkKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgWHRQb3Bkb3duKGRpYWxvZ3NoZWxsKTsKKworICAgIGlmICh0ZXh0ZmllbGQgIT0gTlVMTCAmJiBkaWFsb2dTdGF0dXMgPCAwKQorCSp0ZXh0ZmllbGQgPSBOVUw7CisKK2Vycm9yOgorICAgIFh0RGVzdHJveVdpZGdldChkaWFsb2dzaGVsbCk7CisKKyAgICByZXR1cm4gZGlhbG9nU3RhdHVzOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX01FTlUpCisvKgorICogU2V0IHRoZSBjb2xvcnMgb2YgV2lkZ2V0ICJpZCIgdG8gdGhlIG1lbnUgY29sb3JzLgorICovCisgICAgc3RhdGljIHZvaWQKK2d1aV9hdGhlbmFfbWVudV9jb2xvcnMoaWQpCisgICAgV2lkZ2V0ICBpZDsKK3sKKyAgICBpZiAoZ3VpLm1lbnVfYmdfcGl4ZWwgIT0gSU5WQUxDT0xPUikKKwlYdFZhU2V0VmFsdWVzKGlkLCBYdE5iYWNrZ3JvdW5kLCBndWkubWVudV9iZ19waXhlbCwgTlVMTCk7CisgICAgaWYgKGd1aS5tZW51X2ZnX3BpeGVsICE9IElOVkFMQ09MT1IpCisJWHRWYVNldFZhbHVlcyhpZCwgWHROZm9yZWdyb3VuZCwgZ3VpLm1lbnVfZmdfcGl4ZWwsIE5VTEwpOworfQorI2VuZGlmCisKKy8qCisgKiBTZXQgdGhlIGNvbG9ycyBvZiBXaWRnZXQgImlkIiB0byB0aGUgc2Nyb2xsIGNvbG9ycy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitndWlfYXRoZW5hX3Njcm9sbF9jb2xvcnMoaWQpCisgICAgV2lkZ2V0ICBpZDsKK3sKKyAgICBpZiAoZ3VpLnNjcm9sbF9iZ19waXhlbCAhPSBJTlZBTENPTE9SKQorCVh0VmFTZXRWYWx1ZXMoaWQsIFh0TmJhY2tncm91bmQsIGd1aS5zY3JvbGxfYmdfcGl4ZWwsIE5VTEwpOworICAgIGlmIChndWkuc2Nyb2xsX2ZnX3BpeGVsICE9IElOVkFMQ09MT1IpCisJWHRWYVNldFZhbHVlcyhpZCwgWHROZm9yZWdyb3VuZCwgZ3VpLnNjcm9sbF9mZ19waXhlbCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvZ3VpX2Jlb3MuY2MgYi9zcmMvZ3VpX2Jlb3MuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjNjU5OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfYmVvcy5jYwpAQCAtMCwwICsxLDMzNDcgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCQlieSBCcmFtIE1vb2xlbmFhcgorICoJCQkgICAgQmVCb3ggR1VJIHN1cHBvcnQgQ29weXJpZ2h0IDE5OTggYnkgT2xhZiBTZWliZXJ0LgorICoJCQkgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICoKKyAqIEJlT1MgR1VJLgorICoKKyAqIEdVSSBzdXBwb3J0IGZvciB0aGUgQnV6endvcmQgRW5oYW5jZWQgT3BlcmF0aW5nIFN5c3RlbS4KKyAqCisgKiBQb3J0ZWQgdG8gUjQgYnkgUmljaGFyZCBPZmZlciA8cmljaGFyZEB3aGl0ZXF1ZWVuLmNvbT4gSnVsIDk5CisgKgorICovCisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgdGhlIEJlT1MgR1VJIGNvZGU6CisgKgorICogVGhlcmUgYXJlIDMgdGhyZWFkcy4KKyAqIDEuIFRoZSBpbml0aWFsIHRocmVhZC4gSW4gZ3VpX21jaF9wcmVwYXJlKCkgdGhpcyBnZXRzIHRvIHJ1biB0aGUKKyAqICAgIEJBcHBsaWNhdGlvbiBtZXNzYWdlIGxvb3AuIEJ1dCBiZWZvcmUgaXQgc3RhcnRzIGRvaW5nIHRoYXQsCisgKiAgICBpdCBjcmVhdGVzIHRocmVhZCAyOgorICogMi4gVGhlIG1haW4oKSB0aHJlYWQuIFRoaXMgdGhyZWFkIGlzIGNyZWF0ZWQgaW4gZ3VpX21jaF9wcmVwYXJlKCkKKyAqICAgIGFuZCBpdHMgcHVycG9zZSBpbiBsaWZlIGlzIHRvIGNhbGwgbWFpbihhcmdjLCBhcmd2KSBhZ2Fpbi4KKyAqICAgIFRoaXMgdGhyZWFkIGlzIGRvaW5nIHRoZSBidWxrIG9mIHRoZSB3b3JrLgorICogMy4gU29vbmVyIG9yIGxhdGVyLCBhIHdpbmRvdyBpcyBvcGVuZWQgYnkgdGhlIG1haW4oKSB0aHJlYWQuIFRoaXMKKyAqICAgIGNhdXNlcyBhIHNlY29uZCBtZXNzYWdlIGxvb3AgdG8gYmUgY3JlYXRlZDogdGhlIHdpbmRvdyB0aHJlYWQuCisgKgorICogPT0gYWx0ZXJuYXRpdmVseSA9PT0KKyAqCisgKiAjaWYgUlVOX0JBUFBMSUNBVElPTl9JTl9ORVdfVEhSRUFELi4uCisgKgorICogMS4gVGhlIGluaXRpYWwgdGhyZWFkLiBJbiBndWlfbWNoX3ByZXBhcmUoKSB0aGlzIGdldHMgdG8gc3Bhd24KKyAqICAgIHRocmVhZCAyLiBBZnRlciBkb2luZyB0aGF0LCBpdCByZXR1cm5zIHRvIG1haW4oKSB0byBkbyB0aGUKKyAqICAgIGJ1bGsgb2YgdGhlIHdvcmssIGJlaW5nIHRoZSBtYWluKCkgdGhyZWFkLgorICogMi4gUnVucyB0aGUgQkFwcGxpY2F0aW9uLgorICogMy4gVGhlIHdpbmRvdyB0aHJlYWQsIGp1c3QgbGlrZSBpbiB0aGUgZmlyc3QgY2FzZS4KKyAqCisgKiBUaGlzIHNlY29uZCBhbHRlcm5hdGl2ZSBpcyBjbGVhbmVyIGZyb20gVmltJ3Mgdmlld3BvaW50LiBIb3dldmVyLAorICogdGhlIEJlQm9vayBzZWVtcyB0byBhc3N1bWUgZXZlcnl3aGVyZSB0aGF0IHRoZSBCQXBwbGljYXRpb24gKm11c3QqCisgKiBydW4gaW4gdGhlIGluaXRpYWwgdGhyZWFkLiBTbyBwZXJoYXBzIGRvaW5nIG90aGVyd2lzZSBpcyB2ZXJ5IHdyb25nLgorICoKKyAqIEhvd2V2ZXIsIGZyb20gYSBCX1NJTkdMRV9MQVVOQ0ggdmlld3BvaW50LCB0aGUgZmlyc3QgaXMgYmV0dGVyLgorICogSWYgVmltIGlzIG1hcmtlZCAiU2luZ2xlIExhdW5jaCIgaW4gaXRzIGFwcGxpY2F0aW9uIHJlc291cmNlcywKKyAqIGFuZCBhIGZpbGUgaXMgZHJvcHBlZCBvbiB0aGUgVmltIGljb24sIGFuZCBhbm90aGVyIFZpbSBpcyBhbHJlYWR5CisgKiBydW5uaW5nLCB0aGUgZmlsZSBpcyBwYXNzZWQgb24gdG8gdGhlIGVhcmxpZXIgVmltLiBUaGlzIGhhcHBlbnMKKyAqIGluIEJBcHBsaWNhdGlvbjo6UnVuKCkuIFNvIHdlIHdhbnQgVmltIHRvIHRlcm1pbmF0ZSBpZgorICogQkFwcGxpY2F0aW9uOjpSdW4oKSB0ZXJtaW5hdGVzLiAoU2VlIHRoZSBCZUJvb2ssIG9uIEJBcHBsaWNhdGlvbi4KKyAqIEhvd2V2ZXIsIGl0IHNlZW1zIHRoYXQgdGhlIHNlY29uZCBjb3B5IG9mIFZpbSBpc24ndCBldmVuIHN0YXJ0ZWQKKyAqIGluIHRoaXMgY2FzZS4uLiB3aGljaCBpcyBmb3IgdGhlIGJldHRlciBzaW5jZSBJIHdvdWxkbid0IGtub3cgaG93CisgKiB0byBkZXRlY3QgdGhpcyBjYXNlLikKKyAqCisgKiBDb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlc2UgdGhyZWFkcyBvY2N1cnMgbW9zdGx5IGJ5IHRyYW5zbGF0aW5nCisgKiBCTWVzc2FnZXMgdGhhdCBjb21lIGluIGFuZCBwb3N0aW5nIGFuIGFwcHJvcHJpYXRlIHRyYW5zbGF0aW9uIG9uCisgKiB0aGUgVkRDTVAgKFZpbSBEaXJlY3QgQ29tbXVuaWNhdGlvbiBNZXNzYWdlIFBvcnQpLiBUaGVyZWZvcmUgdGhlCisgKiBhY3Rpb25zIHJlcXVpcmVkIGZvciBrZXlwcmVzc2VzIGFuZCB3aW5kb3cgcmVzaXplcywgZXRjLCBhcmUgbW9zdGx5CisgKiBwZXJmb3JtZWQgaW4gdGhlIG1haW4oKSB0aHJlYWQuCisgKgorICogQSBub3RhYmxlIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHRoZSBEcmF3KCkgZXZlbnQuIFRoZSByZWRyYXdpbmcgb2YKKyAqIHRoZSB3aW5kb3cgY29udGVudHMgaXMgcGVyZm9ybWVkIGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIHdpbmRvdworICogdGhyZWFkLiBUbyBtYWtlIHRoaXMgd29yayBjb3JyZWN0bHksIGEgbG9ja2luZyBwcm90b2NvbCBpcyB1c2VkIHdoZW4KKyAqIGFueSB0aHJlYWQgaXMgYWNjZXNzaW5nIHRoZSBlc3NlbnRpYWwgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgYnkKKyAqIHRoZSB3aW5kb3cgdGhyZWFkLgorICoKKyAqIFRoaXMgbG9ja2luZyBwcm90b2NvbCBjb25zaXN0cyBvZiBsb2NraW5nIFZpbSdzIHdpbmRvdy4gVGhpcyBpcyBib3RoCisgKiBjb252ZW5pZW50IGFuZCBuZWNlc3NhcnkuCisgKi8KK2V4dGVybiAiQyIgeworCisjZGVmaW5lIG5ldwkJeHh4X25ld194eHgKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSAidmltLmgiCisjaW5jbHVkZSAiZ2xvYmFscy5oIgorI2luY2x1ZGUgInByb3RvLmgiCisjaW5jbHVkZSAib3B0aW9uLmgiCisKKyN1bmRlZiBuZXcKKworfQkvKiBleHRlcm4gIkMiICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0gc3RhcnQgb2YgaGVhZGVyIHBhcnQgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8YmUvYXBwL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPGJlL2FwcC9DbGlwYm9hcmQuaD4KKyNpbmNsdWRlIDxiZS9rZXJuZWwvT1MuaD4KKyNpbmNsdWRlIDxiZS9zdXBwb3J0L0JlZXAuaD4KKyNpbmNsdWRlIDxiZS9pbnRlcmZhY2UvVmlldy5oPgorI2luY2x1ZGUgPGJlL2ludGVyZmFjZS9XaW5kb3cuaD4KKyNpbmNsdWRlIDxiZS9pbnRlcmZhY2UvTWVudUJhci5oPgorI2luY2x1ZGUgPGJlL2ludGVyZmFjZS9NZW51SXRlbS5oPgorI2luY2x1ZGUgPGJlL2ludGVyZmFjZS9TY3JvbGxCYXIuaD4KKyNpbmNsdWRlIDxiZS9pbnRlcmZhY2UvUmVnaW9uLmg+CisjaW5jbHVkZSA8YmUvaW50ZXJmYWNlL1NjcmVlbi5oPgorI2luY2x1ZGUgPGJlL3N0b3JhZ2UvUGF0aC5oPgorI2luY2x1ZGUgPGJlL3N0b3JhZ2UvRGlyZWN0b3J5Lmg+CisjaW5jbHVkZSA8YmUvc3RvcmFnZS9FbnRyeS5oPgorI2luY2x1ZGUgPGJlL2FwcC9BcHBsaWNhdGlvbi5oPgorI2luY2x1ZGUgPGJlL3N1cHBvcnQvRGVidWcuaD4KKworLyoKKyAqIFRoZSBtYWNybyBCX1BJWEVMX0FMSUdOTUVOVCBzaG93cyB1cyB3aGljaCB2ZXJzaW9uCisgKiBvZiB0aGUgaGVhZGVyIGZpbGVzIHdlJ3JlIHVzaW5nLgorICovCisjaWYgZGVmaW5lZChCX1BJWEVMX0FMSUdOTUVOVCkKKyNkZWZpbmUgSEFWRV9SM19PUl9MQVRFUiAgICAxCisjZWxzZQorI2RlZmluZSBIQVZFX1IzX09SX0xBVEVSICAgIDAKKyNlbmRpZgorCitjbGFzcyBWaW1BcHA7CitjbGFzcyBWaW1Gb3JtVmlldzsKK2NsYXNzIFZpbVRleHRBcmVhVmlldzsKK2NsYXNzIFZpbVdpbmRvdzsKKworZXh0ZXJuIGtleV9tYXAgKmtleU1hcDsKK2V4dGVybiBjaGFyICprZXlNYXBDaGFyczsKKworZXh0ZXJuIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndik7CisKKyNpZm5kZWYgQl9NQVhfUE9SVF9DT1VOVAorI2RlZmluZSBCX01BWF9QT1JUX0NPVU5UICAgIDEwMAorI2VuZGlmCisKKy8qCisgKiBWaW1BcHAgc2VlbXMgY29tcGFyYWJsZSB0byB0aGUgWCAidmltU2hlbGwiCisgKi8KK2NsYXNzIFZpbUFwcDogcHVibGljIEJBcHBsaWNhdGlvbgoreworICAgIHR5cGVkZWYgQkFwcGxpY2F0aW9uIEluaGVyaXRlZDsKK3B1YmxpYzoKKyAgICBWaW1BcHAoY29uc3QgY2hhciAqYXBwc2lnKTsKKyAgICB+VmltQXBwKCk7CisKKyAgICAvLyBjYWxsYmFja3M6CisjaWYgMAorICAgIHZpcnR1YWwgdm9pZCBEaXNwYXRjaE1lc3NhZ2UoQk1lc3NhZ2UgKm0sIEJIYW5kbGVyICpoKQorICAgIHsKKwltLT5QcmludFRvU3RyZWFtKCk7CisJSW5oZXJpdGVkOjpEaXNwYXRjaE1lc3NhZ2UobSwgaCk7CisgICAgfQorI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIFJlYWR5VG9SdW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgQXJndlJlY2VpdmVkKGludDMyIGFyZ2MsIGNoYXIgKiphcmd2KTsKKyAgICB2aXJ0dWFsIHZvaWQgUmVmc1JlY2VpdmVkKEJNZXNzYWdlICptKTsKKyAgICB2aXJ0dWFsIGJvb2wgUXVpdFJlcXVlc3RlZCgpOworCisgICAgc3RhdGljIHZvaWQgU2VuZFJlZnMoQk1lc3NhZ2UgKm0sIGJvb2wgY2hhbmdlZGlyKTsKK3ByaXZhdGU6Cit9OworCitjbGFzcyBWaW1XaW5kb3c6IHB1YmxpYyBCV2luZG93Cit7CisgICAgdHlwZWRlZiBCV2luZG93IEluaGVyaXRlZDsKK3B1YmxpYzoKKyAgICBWaW1XaW5kb3coKTsKKyAgICB+VmltV2luZG93KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgRGlzcGF0Y2hNZXNzYWdlKEJNZXNzYWdlICptLCBCSGFuZGxlciAqaCk7CisgICAgdmlydHVhbCB2b2lkIFdpbmRvd0FjdGl2YXRlZChib29sIGFjdGl2ZSk7CisgICAgdmlydHVhbCBib29sIFF1aXRSZXF1ZXN0ZWQoKTsKKworICAgIFZpbUZvcm1WaWV3CQkqZm9ybVZpZXc7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0KCk7CisKK307CisKK2NsYXNzIFZpbUZvcm1WaWV3OiBwdWJsaWMgQlZpZXcKK3sKKyAgICB0eXBlZGVmIEJWaWV3IEluaGVyaXRlZDsKK3B1YmxpYzoKKyAgICBWaW1Gb3JtVmlldyhCUmVjdCBmcmFtZSk7CisgICAgflZpbUZvcm1WaWV3KCk7CisKKyAgICAvLyBjYWxsYmFja3M6CisgICAgdmlydHVhbCB2b2lkIEFsbEF0dGFjaGVkKCk7CisgICAgdmlydHVhbCB2b2lkIEZyYW1lUmVzaXplZChmbG9hdCBuZXdfd2lkdGgsIGZsb2F0IG5ld19oZWlnaHQpOworCisjZGVmaW5lIE1FTlVCQVJfTUFSR0lOCTEKKyAgICBmbG9hdCBNZW51SGVpZ2h0KCkgY29uc3QKKwl7IHJldHVybiBtZW51QmFyID8gbWVudUJhci0+RnJhbWUoKS5IZWlnaHQoKSArIE1FTlVCQVJfTUFSR0lOOiAwOyB9CisgICAgQk1lbnVCYXIgKk1lbnVCYXIoKSBjb25zdAorCXsgcmV0dXJuIG1lbnVCYXI7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXQoQlJlY3QpOworCisgICAgQk1lbnVCYXIJCSptZW51QmFyOworICAgIFZpbVRleHRBcmVhVmlldwkqdGV4dEFyZWE7Cit9OworCitjbGFzcyBWaW1UZXh0QXJlYVZpZXc6IHB1YmxpYyBCVmlldworeworICAgIHR5cGVkZWYgQlZpZXcgSW5oZXJpdGVkOworcHVibGljOgorICAgIFZpbVRleHRBcmVhVmlldyhCUmVjdCBmcmFtZSk7CisgICAgflZpbVRleHRBcmVhVmlldygpOworCisgICAgLy8gY2FsbGJhY2tzOgorICAgIHZpcnR1YWwgdm9pZCBEcmF3KEJSZWN0IHVwZGF0ZVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBLZXlEb3duKGNvbnN0IGNoYXIgKmJ5dGVzLCBpbnQzMiBudW1CeXRlcyk7CisgICAgdmlydHVhbCB2b2lkIE1vdXNlRG93bihCUG9pbnQgcG9pbnQpOworICAgIHZpcnR1YWwgdm9pZCBNb3VzZVVwKEJQb2ludCBwb2ludCk7CisgICAgdmlydHVhbCB2b2lkIE1vdXNlTW92ZWQoQlBvaW50IHBvaW50LCB1aW50MzIgdHJhbnNpdCwgY29uc3QgQk1lc3NhZ2UgKm1lc3NhZ2UpOworICAgIHZpcnR1YWwgdm9pZCBNZXNzYWdlUmVjZWl2ZWQoQk1lc3NhZ2UgKm0pOworCisgICAgLy8gb3duIGZ1bmN0aW9uczoKKyAgICBpbnQgbWNoSW5pdEZvbnQoY2hhcl91ICpuYW1lKTsKKyAgICB2b2lkIG1jaERyYXdTdHJpbmcoaW50IHJvdywgaW50IGNvbCwgY2hhcl91ICpzLCBpbnQgbGVuLCBpbnQgZmxhZ3MpOworICAgIHZvaWQgbWNoQ2xlYXJCbG9jayhpbnQgcm93MSwgaW50IGNvbDEsIGludCByb3cyLCBpbnQgY29sMik7CisgICAgdm9pZCBtY2hDbGVhckFsbCgpOworICAgIHZvaWQgbWNoRGVsZXRlTGluZXMoaW50IHJvdywgaW50IG51bV9saW5lcyk7CisgICAgdm9pZCBtY2hJbnNlcnRMaW5lcyhpbnQgcm93LCBpbnQgbnVtX2xpbmVzKTsKKworICAgIHN0YXRpYyB2b2lkIGd1aVNlbmRNb3VzZUV2ZW50KGludCBidXR0b24sIGludCB4LCBpbnQgeSwgaW50IHJlcGVhdGVkX2NsaWNrLCBpbnRfdSBtb2RpZmllcnMpOworICAgIHN0YXRpYyB2b2lkIGd1aUJsYW5rTW91c2UoYm9vbCBzaG91bGRfaGlkZSk7CisgICAgc3RhdGljIGludF91IG1vdXNlTW9kaWZpZXJzVG9WaW0oaW50MzIgYmVNb2RpZmllcnMpOworCisgICAgaW50MzIgbW91c2VEcmFnRXZlbnRDb3VudDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXQoQlJlY3QpOworCisgICAgaW50X3UJICAgIHZpbU1vdXNlQnV0dG9uOworICAgIGludF91CSAgICB2aW1Nb3VzZU1vZGlmaWVyczsKK307CisKK2NsYXNzIFZpbVNjcm9sbEJhcjogcHVibGljIEJTY3JvbGxCYXIKK3sKKyAgICB0eXBlZGVmIEJTY3JvbGxCYXIgSW5oZXJpdGVkOworcHVibGljOgorICAgIFZpbVNjcm9sbEJhcihzY3JvbGxiYXJfVCAqZ3NiLCBvcmllbnRhdGlvbiBwb3N0dXJlKTsKKyAgICB+VmltU2Nyb2xsQmFyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgVmFsdWVDaGFuZ2VkKGZsb2F0IG5ld1ZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgTW91c2VVcChCUG9pbnQgd2hlcmUpOworICAgIHZvaWQgU2V0VmFsdWUoZmxvYXQgbmV3dmFsKTsKKyAgICBzY3JvbGxiYXJfVCAqZ2V0R3NiKCkKKwl7IHJldHVybiBnc2I7IH0KKworICAgIGludDMyCSAgICBzY3JvbGxFdmVudENvdW50OworCitwcml2YXRlOgorICAgIHNjcm9sbGJhcl9UICpnc2I7CisgICAgZmxvYXQJaWdub3JlVmFsdWU7Cit9OworCisKKy8qCisgKiBGb3IgY2FjaGluZyB0aGUgZm9udHMgdGhhdCBhcmUgdXNlZDsKKyAqIFZpbSBzZWVtcyByYXRoZXIgc2xvcHB5IGluIHRoaXMgcmVnYXJkLgorICovCitjbGFzcyBWaW1Gb250OiBwdWJsaWMgQkZvbnQKK3sKKyAgICB0eXBlZGVmIEJGb250IEluaGVyaXRlZDsKK3B1YmxpYzoKKyAgICBWaW1Gb250KCk7CisgICAgVmltRm9udChjb25zdCBWaW1Gb250ICpyaHMpOworICAgIFZpbUZvbnQoY29uc3QgQkZvbnQgKnJocyk7CisgICAgVmltRm9udChjb25zdCBWaW1Gb250ICZyaHMpOworICAgIH5WaW1Gb250KCk7CisKKyAgICBWaW1Gb250ICpuZXh0OworICAgIGludCByZWZjb3VudDsKKyAgICBjaGFyX3UgKm5hbWU7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0KCk7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tIGVuZCBvZiBHVUkgY2xhc3NlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCBNYWluQXJncyB7CisgICAgaW50CQkgYXJnYzsKKyAgICBjaGFyCSoqYXJndjsKK307CisKKy8qCisgKiBUaGVzZSBtZXNzYWdlcyBhcmUgY29waWVkIHRocm91Z2ggdGhlIFZEQ01QLgorICogVGhlcmVmb3JlIHRoZXkgb3VnaHQgbm90IHRvIGhhdmUgYW55dGhpbmcgZmFuY3kuCisgKiBUaGV5IG11c3QgYmUgb2YgUE9EIHR5cGUgKFBsYWluIE9sZCBEYXRhKQorICogYXMgdGhlIEMrKyBzdGFuZGFyZCBjYWxscyB0aGVtLgorICovCisKKyNkZWZpbmUJS0VZX01TR19CVUZTSVoJNworI2lmIEtFWV9NU0dfQlVGU0laIDwgTUFYX0tFWV9DT0RFX0xFTgorI2Vycm9yIEluY3JlYXNlIEtFWV9NU0dfQlVGU0laIQorI2VuZGlmCisKK3N0cnVjdCBWaW1LZXlNc2cgeworICAgIGNoYXJfdQlsZW5ndGg7CisgICAgY2hhcl91CWNoYXJzW0tFWV9NU0dfQlVGU0laXTsJLyogY29udGFpbnMgVmltIGVuY29kaW5nICovCit9OworCitzdHJ1Y3QgVmltUmVzaXplTXNnIHsKKyAgICBpbnQJCXdpZHRoOworICAgIGludAkJaGVpZ2h0OworfTsKKworc3RydWN0IFZpbVNjcm9sbEJhck1zZyB7CisgICAgVmltU2Nyb2xsQmFyICpzYjsKKyAgICBsb25nCXZhbHVlOworICAgIGludAkJc3RpbGxEcmFnZ2luZzsKK307CisKK3N0cnVjdCBWaW1NZW51TXNnIHsKKyAgICB2aW1tZW51X1QJKmd1aU1lbnU7Cit9OworCitzdHJ1Y3QgVmltTW91c2VNc2cgeworICAgIGludAkJYnV0dG9uOworICAgIGludAkJeDsKKyAgICBpbnQJCXk7CisgICAgaW50CQlyZXBlYXRlZF9jbGljazsKKyAgICBpbnRfdQltb2RpZmllcnM7Cit9OworCitzdHJ1Y3QgVmltRm9jdXNNc2cgeworICAgIGJvb2wJYWN0aXZlOworfTsKKworc3RydWN0IFZpbVJlZnNNc2cgeworICAgIEJNZXNzYWdlICAgKm1lc3NhZ2U7CisgICAgYm9vbAljaGFuZ2VkaXI7Cit9OworCitzdHJ1Y3QgVmltTXNnIHsKKyAgICBlbnVtIFZpbU1zZ1R5cGUgeworCUtleSwgUmVzaXplLCBTY3JvbGxCYXIsIE1lbnUsIE1vdXNlLCBGb2N1cywgUmVmcworICAgIH07CisKKyAgICB1bmlvbiB7CisJc3RydWN0IFZpbUtleU1zZwlLZXk7CisJc3RydWN0IFZpbVJlc2l6ZU1zZwlOZXdTaXplOworCXN0cnVjdCBWaW1TY3JvbGxCYXJNc2cJU2Nyb2xsOworCXN0cnVjdCBWaW1NZW51TXNnCU1lbnU7CisJc3RydWN0IFZpbU1vdXNlTXNnCU1vdXNlOworCXN0cnVjdCBWaW1Gb2N1c01zZwlGb2N1czsKKwlzdHJ1Y3QgVmltUmVmc01zZwlSZWZzOworICAgIH0gdTsKK307CisKKyNkZWZpbmUgUkdCKHIsIGcsIGIpCSgoY2hhcl91KShyKSA8PCAxNiB8IChjaGFyX3UpKGcpIDw8IDggfCAoY2hhcl91KShiKSA8PCAwKQorI2RlZmluZSBHVUlfVE9fUkdCKGcpCXsgKGcpID4+IDE2LCAoZykgPj4gOCwgKGcpID4+IDAsIDI1NSB9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0gZW5kIG9mIGhlYWRlciBwYXJ0IC0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBzcGVjaWFsa2V5Cit7CisgICAgdWludDE2ICBCZUtleXM7CisjZGVmaW5lIEtFWShhLGIpCSgoYSk8PDh8KGIpKQorI2RlZmluZSBLKGEpCQlLRVkoMCxhKQkJICAgIC8vIGZvciBBU0NJSSBjb2RlcworI2RlZmluZSBGKGIpCQlLRVkoMSxiKQkJICAgIC8vIGZvciBzY2FuY29kZXMKKyAgICBjaGFyX3UgIHZpbV9jb2RlMDsKKyAgICBjaGFyX3UgIHZpbV9jb2RlMTsKK30gc3BlY2lhbF9rZXlzW10gPQoreworICAgIHtLKEJfVVBfQVJST1cpLAkgICAgJ2snLCAndSd9LAorICAgIHtLKEJfRE9XTl9BUlJPVyksCSAgICAnaycsICdkJ30sCisgICAge0soQl9MRUZUX0FSUk9XKSwJICAgICdrJywgJ2wnfSwKKyAgICB7SyhCX1JJR0hUX0FSUk9XKSwJICAgICdrJywgJ3InfSwKKyAgICB7SyhCX0JBQ0tTUEFDRSksCSAgICAnaycsICdiJ30sCisgICAge0soQl9JTlNFUlQpLAkgICAgJ2snLCAnSSd9LAorICAgIHtLKEJfREVMRVRFKSwJICAgICdrJywgJ0QnfSwKKyAgICB7SyhCX0hPTUUpLAkJICAgICdrJywgJ2gnfSwKKyAgICB7SyhCX0VORCksCQkgICAgJ0AnLCAnNyd9LAorICAgIHtLKEJfUEFHRV9VUCksCSAgICAnaycsICdQJ30sCSAgICAvKiBYS19QcmlvciAqLworICAgIHtLKEJfUEFHRV9ET1dOKSwJICAgICdrJywgJ04nfSwJICAgIC8qIFhLX05leHQsICovCisKKyNkZWZpbmUgRklSU1RfRlVOQ1RJT05fS0VZICAxMQorICAgIHtGKEJfRjFfS0VZKSwJICAgICdrJywgJzEnfSwKKyAgICB7RihCX0YyX0tFWSksCSAgICAnaycsICcyJ30sCisgICAge0YoQl9GM19LRVkpLAkgICAgJ2snLCAnMyd9LAorICAgIHtGKEJfRjRfS0VZKSwJICAgICdrJywgJzQnfSwKKyAgICB7RihCX0Y1X0tFWSksCSAgICAnaycsICc1J30sCisgICAge0YoQl9GNl9LRVkpLAkgICAgJ2snLCAnNid9LAorICAgIHtGKEJfRjdfS0VZKSwJICAgICdrJywgJzcnfSwKKyAgICB7RihCX0Y4X0tFWSksCSAgICAnaycsICc4J30sCisgICAge0YoQl9GOV9LRVkpLAkgICAgJ2snLCAnOSd9LAorICAgIHtGKEJfRjEwX0tFWSksCSAgICAnaycsICc7J30sCisKKyAgICB7RihCX0YxMV9LRVkpLAkgICAgJ0YnLCAnMSd9LAorICAgIHtGKEJfRjEyX0tFWSksCSAgICAnRicsICcyJ30sCisvLyAge1hLX0YxMywJCSAgICAnRicsICczJ30sCQkvKiB3b3VsZCBiZSBwcmludCBzY3JlZW4vICovCisJCQkJCQkvKiBzeXNyZXEgKi8KKyAgICB7RigweDBGKSwJCSAgICAnRicsICc0J30sCQkvKiBzY3JvbGwgbG9jayAqLworICAgIHtGKDB4MTApLAkJICAgICdGJywgJzUnfSwJCS8qIHBhdXNlL2JyZWFrICovCisvLyAge1hLX0YxNiwJICAgICdGJywgJzYnfSwKKy8vICB7WEtfRjE3LAkgICAgJ0YnLCAnNyd9LAorLy8gIHtYS19GMTgsCSAgICAnRicsICc4J30sCisvLyAge1hLX0YxOSwJICAgICdGJywgJzknfSwKKy8vICB7WEtfRjIwLAkgICAgJ0YnLCAnQSd9LAorLy8KKy8vICB7WEtfRjIxLAkgICAgJ0YnLCAnQid9LAorLy8gIHtYS19GMjIsCSAgICAnRicsICdDJ30sCisvLyAge1hLX0YyMywJICAgICdGJywgJ0QnfSwKKy8vICB7WEtfRjI0LAkgICAgJ0YnLCAnRSd9LAorLy8gIHtYS19GMjUsCSAgICAnRicsICdGJ30sCisvLyAge1hLX0YyNiwJICAgICdGJywgJ0cnfSwKKy8vICB7WEtfRjI3LAkgICAgJ0YnLCAnSCd9LAorLy8gIHtYS19GMjgsCSAgICAnRicsICdJJ30sCisvLyAge1hLX0YyOSwJICAgICdGJywgJ0onfSwKKy8vICB7WEtfRjMwLAkgICAgJ0YnLCAnSyd9LAorLy8KKy8vICB7WEtfRjMxLAkgICAgJ0YnLCAnTCd9LAorLy8gIHtYS19GMzIsCSAgICAnRicsICdNJ30sCisvLyAge1hLX0YzMywJICAgICdGJywgJ04nfSwKKy8vICB7WEtfRjM0LAkgICAgJ0YnLCAnTyd9LAorLy8gIHtYS19GMzUsCSAgICAnRicsICdQJ30sCSAgICAvKiBrZXlzeW1kZWYuaCBkZWZpbmVzIHVwIHRvIEYzNSAqLworCisvLyAge1hLX0hlbHAsCSAgICAnJScsICcxJ30sCSAgICAvKiBYS19IZWxwICovCisgICAge0YoQl9QUklOVF9LRVkpLAkgICAgJyUnLCAnOSd9LAorCisjaWYgMAorICAgIC8qIEtleXBhZCBrZXlzOiAqLworICAgIHtGKDB4NDgpLAkgICAgJ2snLCAnbCd9LAkgICAgLyogWEtfS1BfTGVmdCAqLworICAgIHtGKDB4NEEpLAkgICAgJ2snLCAncid9LAkgICAgLyogWEtfS1BfUmlnaHQgKi8KKyAgICB7RigweDM4KSwJICAgICdrJywgJ3UnfSwJICAgIC8qIFhLX0tQX1VwICovCisgICAge0YoMHg1OSksCSAgICAnaycsICdkJ30sCSAgICAvKiBYS19LUF9Eb3duICovCisgICAge0YoMHg2NCksCSAgICAnaycsICdJJ30sCSAgICAvKiBYS19LUF9JbnNlcnQgKi8KKyAgICB7RigweDY1KSwJICAgICdrJywgJ0QnfSwJICAgIC8qIFhLX0tQX0RlbGV0ZSAqLworICAgIHtGKDB4MzcpLAkgICAgJ2snLCAnaCd9LAkgICAgLyogWEtfS1BfSG9tZSAqLworICAgIHtGKDB4NTgpLAkgICAgJ0AnLCAnNyd9LAkgICAgLyogWEtfS1BfRW5kICovCisgICAge0YoMHgzOSksCSAgICAnaycsICdQJ30sCSAgICAvKiBYS19LUF9QcmlvciAqLworICAgIHtGKDB4NjApLAkgICAgJ2snLCAnTid9LAkgICAgLyogWEtfS1BfTmV4dCAqLworICAgIHtGKDB4NDkpLAkgICAgJyYnLCAnOCd9LAkgICAgLyogWEtfVW5kbywga2V5cGFkIDUgKi8KKyNlbmRpZgorCisgICAgLyogRW5kIG9mIGxpc3QgbWFya2VyOiAqLworICAgIHswLAkJCSAgICAwLCAwfQorfTsKKworI2RlZmluZSBOVU1fU1BFQ0lBTF9LRVlTICAgIChzaXplb2Yoc3BlY2lhbF9rZXlzKS9zaXplb2Yoc3BlY2lhbF9rZXlzWzBdKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLSBWaW1BcHAgLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgc3RhdGljIHZvaWQKK2RvY2QoQlBhdGggJnBhdGgpCit7CisgICAgbWNoX2NoZGlyKHBhdGguUGF0aCgpKTsKKyAgICAvKiBEbyB0aGlzIHRvIGdldCB0aGUgc2lkZSBlZmZlY3RzIG9mIGEgOmNkIGNvbW1hbmQgKi8KKyAgICBkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopImNkIC4iKTsKK30KKworLyoKKyAqIFJlYWxseSBoYW5kbGUgZHJvcHBlZCBmaWxlcyBhbmQgZm9sZGVycy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitSZWZzUmVjZWl2ZWQoQk1lc3NhZ2UgKm0sIGJvb2wgY2hhbmdlZGlyKQoreworICAgIHVpbnQzMiB0eXBlOworICAgIGludDMyIGNvdW50OworCisgICAgLy9tLT5QcmludFRvU3RyZWFtKCk7CisgICAgc3dpdGNoIChtLT53aGF0KSB7CisgICAgY2FzZSBCX1JFRlNfUkVDRUlWRUQ6CisgICAgY2FzZSBCX1NJTVBMRV9EQVRBOgorCW0tPkdldEluZm8oInJlZnMiLCAmdHlwZSwgJmNvdW50KTsKKwlpZiAodHlwZSAhPSBCX1JFRl9UWVBFKQorCSAgICBnb3RvIGJhZDsKKwlicmVhazsKKyAgICBjYXNlIEJfQVJHVl9SRUNFSVZFRDoKKwltLT5HZXRJbmZvKCJhcmd2IiwgJnR5cGUsICZjb3VudCk7CisJaWYgKHR5cGUgIT0gQl9TVFJJTkdfVFlQRSkKKwkgICAgZ290byBiYWQ7CisJaWYgKGNoYW5nZWRpcikgeworCSAgICBjaGFyICpkaXJuYW1lOworCSAgICBpZiAobS0+RmluZFN0cmluZygiY3dkIiwgKGNvbnN0IGNoYXIgKiopICZkaXJuYW1lKSA9PSBCX09LKSB7CisJCWNoZGlyKGRpcm5hbWUpOworCQlkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopImNkIC4iKTsKKwkgICAgfQorCX0KKwlicmVhazsKKyAgICBkZWZhdWx0OgorICAgIGJhZDoKKwkvL2ZwcmludGYoc3RkZXJyLCAiYmFkIVxuIik7CisJZGVsZXRlIG07CisJcmV0dXJuOworICAgIH0KKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgcmVzZXRfVklzdWFsKCk7CisjZW5kaWYKKworICAgIGNoYXJfdSAgKipmbmFtZXM7CisgICAgZm5hbWVzID0gKGNoYXJfdSAqKikgYWxsb2MoY291bnQgKiBzaXplb2YoY2hhcl91ICopKTsKKyAgICBpbnQgZm5hbWVfaW5kZXggPSAwOworCisgICAgc3dpdGNoIChtLT53aGF0KSB7CisgICAgY2FzZSBCX1JFRlNfUkVDRUlWRUQ6CisgICAgY2FzZSBCX1NJTVBMRV9EQVRBOgorCS8vZnByaW50ZihzdGRlcnIsICJjYXNlIEJfUkVGU19SRUNFSVZFRFxuIik7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorCXsKKwkgICAgZW50cnlfcmVmIHJlZjsKKwkgICAgaWYgKG0tPkZpbmRSZWYoInJlZnMiLCBpLCAmcmVmKSA9PSBCX09LKSB7CisJCUJFbnRyeSBlbnRyeSgmcmVmLCBmYWxzZSk7CisJCUJQYXRoIHBhdGg7CisJCWVudHJ5LkdldFBhdGgoJnBhdGgpOworCisJCS8qIENoYW5nZSB0byBwYXJlbnQgZGlyZWN0b3J5PyAqLworCQlpZiAoY2hhbmdlZGlyKSB7CisJCSAgICBCUGF0aCBwYXJlbnRwYXRoOworCQkgICAgcGF0aC5HZXRQYXJlbnQoJnBhcmVudHBhdGgpOworCQkgICAgZG9jZChwYXJlbnRwYXRoKTsKKwkJfQorCisJCS8qIElzIGl0IGEgZGlyZWN0b3J5PyBJZiBzbywgY2QgaW50byBpdC4gKi8KKwkJQkRpcmVjdG9yeSBiZGlyKCZyZWYpOworCQlpZiAoYmRpci5Jbml0Q2hlY2soKSA9PSBCX09LKSB7CisJCSAgICAvKiBkb24ndCBjZCBpZiB3ZSBhbHJlYWR5IGRpZCBpdCAqLworCQkgICAgaWYgKCFjaGFuZ2VkaXIpCisJCQlkb2NkKHBhdGgpOworCQl9IGVsc2UgeworCQkgICAgbWNoX2Rpcm5hbWUoSU9idWZmLCBJT1NJWkUpOworCQkgICAgY2hhcl91ICpmbmFtZSA9IHNob3J0ZW5fZm5hbWUoKGNoYXJfdSAqKXBhdGguUGF0aCgpLCBJT2J1ZmYpOworCQkgICAgaWYgKGZuYW1lID09IE5VTEwpCisJCQlmbmFtZSA9IChjaGFyX3UgKilwYXRoLlBhdGgoKTsKKwkJICAgIGZuYW1lc1tmbmFtZV9pbmRleCsrXSA9IHZpbV9zdHJzYXZlKGZuYW1lKTsKKwkJICAgIC8vZnByaW50ZihzdGRlcnIsICIlc1xuIiwgZm5hbWUpOworCQl9CisKKwkJLyogT25seSBkbyBpdCBmb3IgdGhlIGZpcnN0IGZpbGUvZGlyICovCisJCWNoYW5nZWRpciA9IGZhbHNlOworCSAgICB9CisJfQorCWJyZWFrOworICAgIGNhc2UgQl9BUkdWX1JFQ0VJVkVEOgorCS8vZnByaW50ZihzdGRlcnIsICJjYXNlIEJfQVJHVl9SRUNFSVZFRFxuIik7CisJZm9yIChpbnQgaSA9IDE7IGkgPCBjb3VudDsgKytpKQorCXsKKwkgICAgY2hhciAqZm5hbWU7CisKKwkgICAgaWYgKG0tPkZpbmRTdHJpbmcoImFyZ3YiLCBpLCAoY29uc3QgY2hhciAqKikgJmZuYW1lKSA9PSBCX09LKSB7CisJCWZuYW1lc1tmbmFtZV9pbmRleCsrXSA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKilmbmFtZSk7CisJICAgIH0KKwl9CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwkvL2ZwcmludGYoc3RkZXJyLCAiY2FzZSBkZWZhdWx0XG4iKTsKKwlicmVhazsKKyAgICB9CisKKyAgICBkZWxldGUgbTsKKworICAgIC8qIEhhbmRsZSB0aGUgZHJvcCwgOmVkaXQgdG8gZ2V0IHRvIHRoZSBmaWxlICovCisgICAgaWYgKGZuYW1lX2luZGV4ID4gMCkgeworCWhhbmRsZV9kcm9wKGZuYW1lX2luZGV4LCBmbmFtZXMsIEZBTFNFKTsKKworCS8qIFVwZGF0ZSB0aGUgc2NyZWVuIGRpc3BsYXkgKi8KKwl1cGRhdGVfc2NyZWVuKE5PVF9WQUxJRCk7CisJc2V0Y3Vyc29yKCk7CisJb3V0X2ZsdXNoKCk7CisgICAgfSBlbHNlIHsKKwl2aW1fZnJlZShmbmFtZXMpOworICAgIH0KK30KKworVmltQXBwOjpWaW1BcHAoY29uc3QgY2hhciAqYXBwc2lnKToKKyAgICBCQXBwbGljYXRpb24oYXBwc2lnKQoreworfQorCitWaW1BcHA6On5WaW1BcHAoKQoreworfQorCisgICAgdm9pZAorVmltQXBwOjpSZWFkeVRvUnVuKCkKK3sKKyAgICAvKgorICAgICAqIEFwcGFyZW50bHkgc2lnbmFscyBhcmUgaW5oZXJpdGVkIGJ5IHRoZSBjcmVhdGVkIHRocmVhZCAtCisgICAgICogZGlzYWJsZSB0aGUgbW9zdCBhbm5veWluZyBvbmVzLgorICAgICAqLworICAgIHNpZ25hbChTSUdJTlQsIFNJR19JR04pOworICAgIHNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKK30KKworICAgIHZvaWQKK1ZpbUFwcDo6QXJndlJlY2VpdmVkKGludDMyIGFyZ19hcmdjLCBjaGFyICoqYXJnX2FyZ3YpCit7CisgICAgaWYgKCFJc0xhdW5jaGluZygpKSB7CisJLyoKKwkgKiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgYXJlIHNldCB0byBTaW5nbGUgb3IgRXhjbHVzaXZlCisJICogTGF1bmNoLiBCZSBuaWNlIGFuZCBvcGVuIHRoZSBmaWxlKHMpLgorCSAqLworCWlmIChndWkudmltV2luZG93KQorCSAgICBndWkudmltV2luZG93LT5NaW5pbWl6ZShmYWxzZSk7CisJQk1lc3NhZ2UgKm0gPSBDdXJyZW50TWVzc2FnZSgpOworCURldGFjaEN1cnJlbnRNZXNzYWdlKCk7CisJU2VuZFJlZnMobSwgdHJ1ZSk7CisgICAgfQorfQorCisgICAgdm9pZAorVmltQXBwOjpSZWZzUmVjZWl2ZWQoQk1lc3NhZ2UgKm0pCit7CisgICAgLyogSG9ycmlibGUgaGFjayEhISBYWFggWFhYIFhYWAorICAgICAqIFRoZSByZWFsIHByb2JsZW0gaXMgdGhhdCBiX3N0YXJ0X2ZmYyBpcyBzZXQgdG9vIGxhdGUgZm9yCisgICAgICogdGhlIGluaXRpYWwgZW1wdHkgYnVmZmVyLiBBcyBhIHJlc3VsdCB0aGUgd2luZG93IHdpbGwgYmUKKyAgICAgKiBzcGxpdCBpbnN0ZWFkIG9mIGFiYW5kb25lZC4KKyAgICAgKi8KKyAgICBpbnQgbGltaXQgPSAxNTsKKyAgICB3aGlsZSAoLS1saW1pdCA+PSAwICYmIChjdXJidWYgPT0gTlVMTCB8fCBjdXJidWYtPmJfc3RhcnRfZmZjID09IDApKQorCXNub296ZSgxMDAwMDApOyAgICAvLyAwLjEgcworICAgIGlmIChndWkudmltV2luZG93KQorCWd1aS52aW1XaW5kb3ctPk1pbmltaXplKGZhbHNlKTsKKyAgICBEZXRhY2hDdXJyZW50TWVzc2FnZSgpOworICAgIFNlbmRSZWZzKG0sIHRydWUpOworfQorCisvKgorICogUGFzcyBhIEJNZXNzYWdlIG9uIHRvIHRoZSBtYWluKCkgdGhyZWFkLgorICogQ2FsbGVyIG11c3QgaGF2ZSBkZXRhY2hlZCB0aGUgbWVzc2FnZS4KKyAqLworICAgIHZvaWQKK1ZpbUFwcDo6U2VuZFJlZnMoQk1lc3NhZ2UgKm0sIGJvb2wgY2hhbmdlZGlyKQoreworICAgIFZpbVJlZnNNc2cgcm07CisgICAgcm0ubWVzc2FnZSA9IG07CisgICAgcm0uY2hhbmdlZGlyID0gY2hhbmdlZGlyOworCisgICAgd3JpdGVfcG9ydChndWkudmRjbXAsIFZpbU1zZzo6UmVmcywgJnJtLCBzaXplb2Yocm0pKTsKKyAgICAvLyBjYWxscyA6OlJlZnNSZWNlaXZlZAorfQorCisgICAgYm9vbAorVmltQXBwOjpRdWl0UmVxdWVzdGVkKCkKK3sKKyAgICAodm9pZClJbmhlcml0ZWQ6OlF1aXRSZXF1ZXN0ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0gVmltV2luZG93IC0tLS0tLS0tLS0tLS0tLS0gKi8KKworVmltV2luZG93OjpWaW1XaW5kb3coKToKKyAgICBCV2luZG93KEJSZWN0KDQwLCA0MCwgMTUwLCAxNTApLAorCSAgICAiVmltIiwKKwkgICAgQl9USVRMRURfV0lORE9XLAorCSAgICAwLAorCSAgICBCX0NVUlJFTlRfV09SS1NQQUNFKQorCit7CisgICAgaW5pdCgpOworfQorCitWaW1XaW5kb3c6On5WaW1XaW5kb3coKQoreworICAgIGlmIChmb3JtVmlldykgeworCVJlbW92ZUNoaWxkKGZvcm1WaWV3KTsKKwlkZWxldGUgZm9ybVZpZXc7CisgICAgfQorICAgIGd1aS52aW1XaW5kb3cgPSBOVUxMOworfQorCisgICAgdm9pZAorVmltV2luZG93Ojppbml0KCkKK3sKKyAgICAvKiBBdHRhY2ggdGhlIFZpbUZvcm1WaWV3ICovCisgICAgZm9ybVZpZXcgPSBuZXcgVmltRm9ybVZpZXcoQm91bmRzKCkpOworICAgIGlmIChmb3JtVmlldyAhPSBOVUxMKSB7CisJQWRkQ2hpbGQoZm9ybVZpZXcpOworICAgIH0KK30KKworICAgIHZvaWQKK1ZpbVdpbmRvdzo6RGlzcGF0Y2hNZXNzYWdlKEJNZXNzYWdlICptLCBCSGFuZGxlciAqaCkKK3sKKyAgICAvKgorICAgICAqIFJvdXRlIEJfTU9VU0VfVVAgbWVzc2FnZXMgdG8gTW91c2VVcCgpLCBpbgorICAgICAqIGEgbWFubmVyIHRoYXQgc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAgICAgKiBpbnRlbmRlZCBmdXR1cmUgc3lzdGVtIGJlaGF2aW91ci4KKyAgICAgKi8KKyAgICBzd2l0Y2ggKG0tPndoYXQpIHsKKyAgICBjYXNlIEJfTU9VU0VfVVA6CisJLy8gaWYgKCFoKSBoID0gUHJlZmVycmVkSGFuZGxlcigpOworLy8gZ2NjIGlzbid0IGhhcHB5IHdpdGhvdXQgdGhpcyBleHRyYSBzZXQgb2YgYnJhY2VzLCBjb21wbGFpbnMgYWJvdXQKKy8vIGp1bXAgdG8gY2FzZSBsYWJlbCBjcm9zc2VzIGluaXQgb2YgJ2NsYXNzIEJWaWV3ICogdicKKy8vIHJpY2hhcmRAd2hpdGVxdWVlbi5jb20ganVsIDk5CisJeworCUJWaWV3ICp2ID0gZHluYW1pY19jYXN0PEJWaWV3ICo+KGgpOworCWlmICh2KSB7CisJICAgIC8vbS0+UHJpbnRUb1N0cmVhbSgpOworCSAgICBCUG9pbnQgd2hlcmU7CisJICAgIG0tPkZpbmRQb2ludCgid2hlcmUiLCAmd2hlcmUpOworCSAgICB2LT5Nb3VzZVVwKHdoZXJlKTsKKwl9IGVsc2UgeworCSAgICBJbmhlcml0ZWQ6OkRpc3BhdGNoTWVzc2FnZShtLCBoKTsKKwl9CisJfQorCWJyZWFrOworICAgIGRlZmF1bHQ6CisJSW5oZXJpdGVkOjpEaXNwYXRjaE1lc3NhZ2UobSwgaCk7CisgICAgfQorfQorCisgICAgdm9pZAorVmltV2luZG93OjpXaW5kb3dBY3RpdmF0ZWQoYm9vbCBhY3RpdmUpCit7CisgICAgSW5oZXJpdGVkOjpXaW5kb3dBY3RpdmF0ZWQoYWN0aXZlKTsKKyAgICAvKiB0aGUgdGV4dEFyZWEgZ2V0cyB0aGUga2V5Ym9hcmQgYWN0aW9uICovCisgICAgaWYgKGFjdGl2ZSAmJiBndWkudmltVGV4dEFyZWEpCisJZ3VpLnZpbVRleHRBcmVhLT5NYWtlRm9jdXModHJ1ZSk7CisKKyAgICBzdHJ1Y3QgVmltRm9jdXNNc2cgZm07CisgICAgZm0uYWN0aXZlID0gYWN0aXZlOworCisgICAgd3JpdGVfcG9ydChndWkudmRjbXAsIFZpbU1zZzo6Rm9jdXMsICZmbSwgc2l6ZW9mKGZtKSk7Cit9CisKKyAgICBib29sCitWaW1XaW5kb3c6OlF1aXRSZXF1ZXN0ZWQoKQoreworICAgIHN0cnVjdCBWaW1LZXlNc2cga207CisgICAga20ubGVuZ3RoID0gNTsKKyAgICBtZW1jcHkoKGNoYXIgKilrbS5jaGFycywgIlwwMzM6cWFcciIsIGttLmxlbmd0aCk7CisKKyAgICB3cml0ZV9wb3J0KGd1aS52ZGNtcCwgVmltTXNnOjpLZXksICZrbSwgc2l6ZW9mKGttKSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0gVmltRm9ybVZpZXcgLS0tLS0tLS0tLS0tLS0tLSAqLworCitWaW1Gb3JtVmlldzo6VmltRm9ybVZpZXcoQlJlY3QgZnJhbWUpOgorICAgIEJWaWV3KGZyYW1lLCAiVmltRm9ybVZpZXciLCBCX0ZPTExPV19BTExfU0lERVMsCisJICAgIEJfV0lMTF9EUkFXIHwgQl9GUkFNRV9FVkVOVFMpLAorICAgIG1lbnVCYXIoTlVMTCksCisgICAgdGV4dEFyZWEoTlVMTCkKK3sKKyAgICBpbml0KGZyYW1lKTsKK30KKworVmltRm9ybVZpZXc6On5WaW1Gb3JtVmlldygpCit7CisgICAgaWYgKG1lbnVCYXIpIHsKKwlSZW1vdmVDaGlsZChtZW51QmFyKTsKKyNpZmRlZiBuZXZlcgorCS8vIGRlbGV0aW5nIHRoZSBtZW51QmFyIGxlYWRzIHRvIFNFR1Ygb24gZXhpdAorCS8vIHJpY2hhcmRAd2hpdGVxdWVlbi5jb20gSnVsIDk5CisJZGVsZXRlIG1lbnVCYXI7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKHRleHRBcmVhKSB7CisJUmVtb3ZlQ2hpbGQodGV4dEFyZWEpOworCWRlbGV0ZSB0ZXh0QXJlYTsKKyAgICB9CisgICAgZ3VpLnZpbUZvcm0gPSBOVUxMOworfQorCisgICAgdm9pZAorVmltRm9ybVZpZXc6OmluaXQoQlJlY3QgZnJhbWUpCit7CisgICAgbWVudUJhciA9IG5ldyBCTWVudUJhcihCUmVjdCgwLDAsLU1FTlVCQVJfTUFSR0lOLC1NRU5VQkFSX01BUkdJTiksCisJICAgICJWaW1NZW51QmFyIik7CisKKyAgICBBZGRDaGlsZChtZW51QmFyKTsKKworICAgIEJSZWN0IHJlbWFpbmluZyA9IGZyYW1lOworICAgIHRleHRBcmVhID0gbmV3IFZpbVRleHRBcmVhVmlldyhyZW1haW5pbmcpOworICAgIEFkZENoaWxkKHRleHRBcmVhKTsKKyAgICAvKiBUaGUgdGV4dEFyZWEgd2lsbCBiZSByZXNpemVkIGxhdGVyIHdoZW4gbWVudXMgYXJlIGFkZGVkICovCisKKyAgICBndWkudmltRm9ybSA9IHRoaXM7Cit9CisKKyAgICB2b2lkCitWaW1Gb3JtVmlldzo6QWxsQXR0YWNoZWQoKQoreworICAgIC8qCisgICAgICogQXBwYXJlbnRseSBzaWduYWxzIGFyZSBpbmhlcml0ZWQgYnkgdGhlIGNyZWF0ZWQgdGhyZWFkIC0KKyAgICAgKiBkaXNhYmxlIHRoZSBtb3N0IGFubm95aW5nIG9uZXMuCisgICAgICovCisgICAgc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CisgICAgc2lnbmFsKFNJR1FVSVQsIFNJR19JR04pOworCisgICAgaWYgKG1lbnVCYXIgJiYgdGV4dEFyZWEpIHsKKwkvKgorCSAqIFJlc2l6ZSB0aGUgdGV4dEFyZWEgdG8gZmlsbCB0aGUgc3BhY2UgbGVmdCBvdmVyIGJ5IHRoZSBtZW51LgorCSAqIFRoaXMgaXMgc29tZXdoYXQgZnV0aWxlIHNpbmNlIGl0IHdpbGwgYmUgZG9uZSBhZ2FpbiBvbmNlCisJICogbWVudXMgYXJlIGFkZGVkIHRvIHRoZSBtZW51IGJhci4KKwkgKi8KKwlCUmVjdCByZW1haW5pbmcgPSBCb3VuZHMoKTsKKwlyZW1haW5pbmcudG9wID0gTWVudUhlaWdodCgpOworCXRleHRBcmVhLT5SZXNpemVUbyhyZW1haW5pbmcuV2lkdGgoKSwgcmVtYWluaW5nLkhlaWdodCgpKTsKKwl0ZXh0QXJlYS0+TW92ZVRvKHJlbWFpbmluZy5sZWZ0LCByZW1haW5pbmcudG9wKTsKKworI2lmZGVmIEZFQVRfTUVOVQorCW1lbnVCYXItPlJlc2l6ZVRvKHJlbWFpbmluZy5yaWdodCwgcmVtYWluaW5nLnRvcCk7CisJZ3VpLm1lbnVfaGVpZ2h0ID0gKGludCkgcmVtYWluaW5nLnRvcDsKKyNlbmRpZgorICAgIH0KKyAgICBJbmhlcml0ZWQ6OkFsbEF0dGFjaGVkKCk7Cit9CisKKyAgICB2b2lkCitWaW1Gb3JtVmlldzo6RnJhbWVSZXNpemVkKGZsb2F0IG5ld193aWR0aCwgZmxvYXQgbmV3X2hlaWdodCkKK3sKKyAgICBCV2luZG93ICp3ID0gV2luZG93KCk7CisjaWYgMQorICAgIC8qCisgICAgICogTG9vayBpZiB0aGVyZSBhcmUgbW9yZSByZXNpemUgbWVzc2FnZXMgaW4gdGhlIHF1ZXVlLgorICAgICAqIElmIHNvLCBpZ25vcmUgdGhpcyBvbmUuIFRoZSBsYXRlciBvbmUgd2lsbCBiZSBoYW5kbGVkCisgICAgICogZXZlbnR1YWxseS4KKyAgICAgKi8KKyAgICBCTWVzc2FnZVF1ZXVlICpxID0gdy0+TWVzc2FnZVF1ZXVlKCk7CisgICAgaWYgKHEtPkZpbmRNZXNzYWdlKEJfVklFV19SRVNJWkVELCAwKSAhPSBOVUxMKSB7CisJcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIG5ld193aWR0aCArPSAxOwkgICAgLy8gYWRqdXN0IGZyb20gd2lkdGggdG8gbnVtYmVyIG9mIHBpeGVscyBvY2N1cGllZAorICAgIG5ld19oZWlnaHQgKz0gMTsKKworI2lmICFIQVZFX1IzX09SX0xBVEVSCisgICAgaW50IGFkanVzdF9oLCBhZGp1c3RfdzsKKworICAgIGFkanVzdF93ID0gKChpbnQpbmV3X3dpZHRoIC0gZ3VpX2dldF9iYXNlX3dpZHRoKCkpICUgZ3VpLmNoYXJfd2lkdGg7CisgICAgYWRqdXN0X2ggPSAoKGludCluZXdfaGVpZ2h0IC0gZ3VpX2dldF9iYXNlX2hlaWdodCgpKSAlIGd1aS5jaGFyX2hlaWdodDsKKworICAgIGlmIChhZGp1c3RfdyA+IDAgfHwgYWRqdXN0X2ggPiAwKSB7CisJLyoKKwkgKiBUaGlzIHdpbGwgZ2VuZXJhdGUgYSBuZXcgRnJhbWVSZXNpemVkKCkgbWVzc2FnZS4KKwkgKiBJZiB3ZSdyZSBydW5uaW5nIFIzIG9yIGxhdGVyLCBTZXRXaW5kb3dBbGlnbm1lbnQoKSBzaG91bGQgbWFrZQorCSAqIHN1cmUgdGhhdCB0aGlzIGRvZXMgbm90IGhhcHBlbi4KKwkgKi8KKwl3LT5SZXNpemVCeSgtYWRqdXN0X3csIC1hZGp1c3RfaCk7CisKKwlyZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBzdHJ1Y3QgVmltUmVzaXplTXNnIHNtOworICAgIHNtLndpZHRoID0gKGludCkgbmV3X3dpZHRoOworICAgIHNtLmhlaWdodCA9IChpbnQpIG5ld19oZWlnaHQ7CisKKyAgICB3cml0ZV9wb3J0KGd1aS52ZGNtcCwgVmltTXNnOjpSZXNpemUsICZzbSwgc2l6ZW9mKHNtKSk7CisgICAgLy8gY2FsbHMgZ3VpX3Jlc2l6ZV9zaGVsbChuZXdfd2lkdGgsIG5ld19oZWlnaHQpOworCisgICAgcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBUaGUgYXJlYSBiZWxvdyB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIGlzIGVyYXNlZCB0byB0aGUgY29sb3VyCisgICAgICogc2V0IHdpdGggU2V0Vmlld0NvbG9yKCkgYXV0b21hdGljYWxseSwgYmVjYXVzZSB3ZSBoYWQgc2V0CisgICAgICogQl9XSUxMX0RSQVcuIFJlc2l6aW5nIHRoZSB3aW5kb3cgdGlnaHQgYXJvdW5kIHRoZSB2ZXJ0aWNhbAorICAgICAqIHNjcm9sbCBiYXIgYWxzbyBoZWxwcyB0byBhdm9pZCBkZWJyaXMuCisgICAgICovCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0gVmltVGV4dEFyZWFWaWV3IC0tLS0tLS0tLS0tLS0tLS0gKi8KKworVmltVGV4dEFyZWFWaWV3OjpWaW1UZXh0QXJlYVZpZXcoQlJlY3QgZnJhbWUpOgorICAgIEJWaWV3KGZyYW1lLCAiVmltVGV4dEFyZWFWaWV3IiwgQl9GT0xMT1dfQUxMX1NJREVTLAorCSAgICBCX1dJTExfRFJBVyB8IEJfRlVMTF9VUERBVEVfT05fUkVTSVpFKSwKKyAgICBtb3VzZURyYWdFdmVudENvdW50KDApCit7CisgICAgaW5pdChmcmFtZSk7Cit9CisKK1ZpbVRleHRBcmVhVmlldzo6flZpbVRleHRBcmVhVmlldygpCit7CisgICAgZ3VpLnZpbVRleHRBcmVhID0gTlVMTDsKK30KKworICAgIHZvaWQKK1ZpbVRleHRBcmVhVmlldzo6aW5pdChCUmVjdCBmcmFtZSkKK3sKKyAgICAvKiBzZXQgdXAgZ2xvYmFsIHZhciBmb3IgZmFzdCBhY2Nlc3MgKi8KKyAgICBndWkudmltVGV4dEFyZWEgPSB0aGlzOworCisgICAgLyoKKyAgICAgKiBUZWxsIHRoZSBhcHAgc2VydmVyIG5vdCB0byBlcmFzZSB0aGUgdmlldzogd2Ugd2lsbAorICAgICAqIGZpbGwgaXQgaW4gY29tcGxldGVseSBieSBvdXJzZWx2ZXMuCisgICAgICogKERvZXMgdGhpcyByZWFsbHkgd29yaz8gRXZlbiBpZiBub3QsIGl0IHdvbid0IGhhcm0gZWl0aGVyLikKKyAgICAgKi8KKyAgICBTZXRWaWV3Q29sb3IoQl9UUkFOU1BBUkVOVF8zMl9CSVQpOworI2RlZmluZSBQRU5fV0lEVEggICAxCisgICAgU2V0UGVuU2l6ZShQRU5fV0lEVEgpOworfQorCisgICAgdm9pZAorVmltVGV4dEFyZWFWaWV3OjpEcmF3KEJSZWN0IHVwZGF0ZVJlY3QpCit7CisgICAgLyoKKyAgICAgKiBYWFggT3RoZXIgcG9ydHMgY2FsbCBoZXJlOgorICAgICAqIG91dF9mbHVzaCgpOwkgICAgICogbWFrZSBzdXJlIGFsbCBvdXRwdXQgaGFzIGJlZW4gcHJvY2Vzc2VkICoKKyAgICAgKiBidXQgd2UgY2FuJ3QgZG8gdGhhdCwgc2luY2UgaXQgaW52b2x2ZXMgdG9vIG11Y2ggaW5mb3JtYXRpb24KKyAgICAgKiB0aGF0IGlzIG93bmVkIGJ5IG90aGVyIHRocmVhZHMuLi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogIE5vIG5lZWQgdG8gdXNlIGd1aS52aW1XaW5kb3ctPkxvY2soKTogd2UgYXJlIGxvY2tlZCBhbHJlYWR5LgorICAgICAqICBIb3dldmVyLCBpdCB3b3VsZCBub3QgaHVydC4KKyAgICAgKi8KKyAgICBndWlfcmVkcmF3KChpbnQpIHVwZGF0ZVJlY3QubGVmdCwgKGludCkgdXBkYXRlUmVjdC50b3AsCisJICAgIChpbnQpICh1cGRhdGVSZWN0LldpZHRoKCkgKyBQRU5fV0lEVEgpLCAoaW50KSAodXBkYXRlUmVjdC5IZWlnaHQoKSArIFBFTl9XSURUSCkpOworCisgICAgLyogQ2xlYXIgdGhlIGJvcmRlciBhcmVhcyBpZiBuZWVkZWQgKi8KKyAgICByZ2JfY29sb3IgcmdiID0gR1VJX1RPX1JHQihndWkuYmFja19waXhlbCk7CisgICAgU2V0TG93Q29sb3IocmdiKTsKKworICAgIGlmICh1cGRhdGVSZWN0LmxlZnQgPCBGSUxMX1goMCkpCS8vIGxlZnQgYm9yZGVyCisJRmlsbFJlY3QoQlJlY3QodXBkYXRlUmVjdC5sZWZ0LCB1cGRhdGVSZWN0LnRvcCwKKwkJICAgICAgIEZJTExfWCgwKS1QRU5fV0lEVEgsIHVwZGF0ZVJlY3QuYm90dG9tKSwgQl9TT0xJRF9MT1cpOworICAgIGlmICh1cGRhdGVSZWN0LnRvcCA8IEZJTExfWSgwKSkJLy8gdG9wIGJvcmRlcgorCUZpbGxSZWN0KEJSZWN0KHVwZGF0ZVJlY3QubGVmdCwgdXBkYXRlUmVjdC50b3AsCisJCSAgICAgICB1cGRhdGVSZWN0LnJpZ2h0LCBGSUxMX1koMCktUEVOX1dJRFRIKSwgQl9TT0xJRF9MT1cpOworICAgIGlmICh1cGRhdGVSZWN0LnJpZ2h0ID49IEZJTExfWChDb2x1bW5zKSkgLy8gcmlnaHQgYm9yZGVyCisJRmlsbFJlY3QoQlJlY3QoRklMTF9YKChpbnQpQ29sdW1ucyksIHVwZGF0ZVJlY3QudG9wLAorCQkgICAgICAgdXBkYXRlUmVjdC5yaWdodCwgdXBkYXRlUmVjdC5ib3R0b20pLCBCX1NPTElEX0xPVyk7CisgICAgaWYgKHVwZGF0ZVJlY3QuYm90dG9tID49IEZJTExfWShSb3dzKSkgICAvLyBib3R0b20gYm9yZGVyCisJRmlsbFJlY3QoQlJlY3QodXBkYXRlUmVjdC5sZWZ0LCBGSUxMX1koKGludClSb3dzKSwKKwkJICAgICAgIHVwZGF0ZVJlY3QucmlnaHQsIHVwZGF0ZVJlY3QuYm90dG9tKSwgQl9TT0xJRF9MT1cpOworfQorCisgICAgdm9pZAorVmltVGV4dEFyZWFWaWV3OjpLZXlEb3duKGNvbnN0IGNoYXIgKmJ5dGVzLCBpbnQzMiBudW1CeXRlcykKK3sKKyAgICBzdHJ1Y3QgVmltS2V5TXNnIGttOworICAgIGNoYXJfdSAqZGVzdCA9IGttLmNoYXJzOworCisgICAgQk1lc3NhZ2UgKm1zZyA9IFdpbmRvdygpLT5DdXJyZW50TWVzc2FnZSgpOworICAgIGFzc2VydChtc2cpOworICAgIC8vbXNnLT5QcmludFRvU3RyZWFtKCk7CisKKyAgICAvKgorICAgICAqIENvbnZlcnQgc3BlY2lhbCBrZXlzIHRvIFZpbSBjb2Rlcy4KKyAgICAgKiBJIHRoaW5rIGl0IGlzIGJldHRlciB0byBkbyBpdCBpbiB0aGUgd2luZG93IHRocmVhZAorICAgICAqIHNvIHdlIHVzZSBhdCBsZWFzdCBhIGxpdHRsZSBiaXQgb2YgdGhlIHBvdGVudGlhbAorICAgICAqIG9mIG91ciAyIENQVXMuIEJlc2lkZXMsIGR1ZSB0byB0aGUgZmFudGFzdGljIG1hcHBpbmcKKyAgICAgKiBvZiBzcGVjaWFsIGtleXMgdG8gVVRGLTgsIHdlIGhhdmUgcXVpdGUgc29tZSB3b3JrIHRvCisgICAgICogZG8uLi4KKyAgICAgKiBUT0RPOiBJJ20gbm90IHF1aXRlIGhhcHB5IHdpdGggZGV0ZWN0aW9uIG9mIHNwZWNpYWwKKyAgICAgKiBrZXlzLiBQZXJoYXBzIEkgc2hvdWxkIHVzZSBzY2FuIGNvZGVzIGFmdGVyIGFsbC4uLgorICAgICAqLworICAgIGlmIChudW1CeXRlcyA+IDEpIHsKKwkvKiBUaGlzIGNhbm5vdCBiZSBhIHNwZWNpYWwga2V5ICovCisJaWYgKG51bUJ5dGVzID4gS0VZX01TR19CVUZTSVopCisJICAgIG51bUJ5dGVzID0gS0VZX01TR19CVUZTSVo7CSAgICAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uID8/PworCWttLmxlbmd0aCA9IG51bUJ5dGVzOworCW1lbWNweSgoY2hhciAqKWRlc3QsIGJ5dGVzLCBudW1CeXRlcyk7CisgICAgfSBlbHNlIHsKKwlpbnQzMiBzY2FuY29kZSA9IDA7CisJbXNnLT5GaW5kSW50MzIoImtleSIsICZzY2FuY29kZSk7CisKKwlpbnQzMiBiZU1vZGlmaWVycyA9IDA7CisJbXNnLT5GaW5kSW50MzIoIm1vZGlmaWVycyIsICZiZU1vZGlmaWVycyk7CisKKwljaGFyX3Ugc3RyaW5nWzNdOworCWludCBsZW4gPSAwOworCWttLmxlbmd0aCA9IDA7CisKKwlib29sIGNhbkhhdmVWaW1Nb2RpZmllcnMgPSBmYWxzZTsKKworCS8qCisJICogRm9yIG5vcm1hbCwgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMsIGRvbid0IGxvb2sgdGhlbSB1cAorCSAqIHRvIGNoZWNrIGlmIHRoZXkgbWlnaHQgYmUgYSBzcGVjaWFsIGtleS4gVGhleSBhcmVuJ3QuCisJICovCisJYXNzZXJ0KEJfQkFDS1NQQUNFIDw9IDB4MjApOworCWFzc2VydChCX0RFTEVURSA9PSAweDdGKTsKKwlpZiAoKChjaGFyX3UpYnl0ZXNbMF0gPD0gMHgyMCB8fCAoY2hhcl91KWJ5dGVzWzBdID09IDB4N0YpICYmCisJCW51bUJ5dGVzID09IDEpIHsKKwkgICAgLyoKKwkgICAgICogRHVlIHRvIHRoZSBncmVhdCBuYXR1cmUgb2YgQmUncyBtYXBwaW5nIG9mIHNwZWNpYWwga2V5cywKKwkgICAgICogdml6LiBpbnRvIHRoZSByYW5nZSBvZiB0aGUgY29udHJvbCBjaGFyYWN0ZXJzLAorCSAgICAgKiB3ZSBjYW4gb25seSBiZSBzdXJlIGl0IGlzICpyZWFsbHkqIGEgc3BlY2lhbCBrZXkgaWYKKwkgICAgICogaWYgaXQgaXMgc3BlY2lhbCB3aXRob3V0IHVzaW5nIGN0cmwuIFNvLCBvbmx5IGlmIGN0cmwgaXMKKwkgICAgICogdXNlZCwgd2UgbmVlZCB0byBjaGVjayBpdCB1bm1vZGlmaWVkLgorCSAgICAgKi8KKwkgICAgaWYgKGJlTW9kaWZpZXJzICYgQl9DT05UUk9MX0tFWSkgeworCQlpbnQgaW5kZXggPSBrZXlNYXAtPm5vcm1hbF9tYXBbc2NhbmNvZGVdOworCQlpbnQgbmV3TnVtQnl0ZXMgPSBrZXlNYXBDaGFyc1tpbmRleF07CisJCWNoYXJfdSAqbmV3Qnl0ZXMgPSAoY2hhcl91ICopJmtleU1hcENoYXJzW2luZGV4ICsgMV07CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgc3RpbGwgc3BlY2lhbCB3aXRob3V0IHRoZSBjb250cm9sIGtleS4KKwkJICogVGhpcyBpcyBuZWVkZWQgZm9yIEJBQ0tTUEFDRTogdGhhdCBrZXkgZG9lcyBwcm9kdWNlCisJCSAqIGRpZmZlcmVudCB2YWx1ZXMgd2l0aCBtb2RpZmllcnMgKERFTCkuCisJCSAqIE90aGVyd2lzZSB3ZSBjb3VsZCBzaW1wbHkgaGF2ZSBjaGVja2VkIGZvciBlcXVhbGl0eS4KKwkJICovCisJCWlmIChuZXdOdW1CeXRlcyAhPSAxIHx8ICgqbmV3Qnl0ZXMgPiAweDIwICYmCisJCQkJCSAqbmV3Qnl0ZXMgIT0gMHg3RiApKSB7CisJCSAgICBnb3RvIG5vdHNwZWNpYWw7CisJCX0KKwkJYnl0ZXMgPSAoY2hhciAqKW5ld0J5dGVzOworCSAgICB9CisJICAgIGNhbkhhdmVWaW1Nb2RpZmllcnMgPSB0cnVlOworCisJICAgIHVpbnQxNiBiZW9za2V5OworCSAgICBpbnQgZmlyc3QsIGxhc3Q7CisKKwkgICAgLyoKKwkgICAgICogSWYgbnVtQnl0ZXMgPT0gMCB0aGF0IHByb2JhYmx5IGFsd2F5cyBpbmRpY2F0ZXMgYSBzcGVjaWFsIGtleS4KKwkgICAgICogKGRvZXMgbm90IGhhcHBlbiB5ZXQpCisJICAgICAqLworCSAgICBpZiAobnVtQnl0ZXMgPT0gMCB8fCBieXRlc1swXSA9PSBCX0ZVTkNUSU9OX0tFWSkgeworCQliZW9za2V5ID0gRihzY2FuY29kZSk7CisJCWZpcnN0ID0gRklSU1RfRlVOQ1RJT05fS0VZOworCQlsYXN0ID0gTlVNX1NQRUNJQUxfS0VZUzsKKwkgICAgfSBlbHNlIGlmICgqYnl0ZXMgPT0gJ1xuJyAmJiBzY2FuY29kZSA9PSAweDQ3KSB7CisJCSAvKiByZW1hcCB0aGUgKG5vbi1rZXlwYWQpIEVOVEVSIGtleSBmcm9tIFxuIHRvIFxyLiAqLworCQlzdHJpbmdbMF0gPSAnXHInOworCQlsZW4gPSAxOworCQlmaXJzdCA9IGxhc3QgPSAwOworCSAgICB9IGVsc2UgeworCQliZW9za2V5ID0gSyhieXRlc1swXSk7CisJCWZpcnN0ID0gMDsKKwkJbGFzdCA9IEZJUlNUX0ZVTkNUSU9OX0tFWTsKKwkgICAgfQorCisJICAgIGZvciAoaW50IGkgPSBmaXJzdDsgaSA8IGxhc3Q7IGkrKykgeworCQlpZiAoc3BlY2lhbF9rZXlzW2ldLkJlS2V5cyA9PSBiZW9za2V5KSB7CisJCSAgICBzdHJpbmdbMF0gPSBDU0k7CisJCSAgICBzdHJpbmdbMV0gPSBzcGVjaWFsX2tleXNbaV0udmltX2NvZGUwOworCQkgICAgc3RyaW5nWzJdID0gc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMTsKKwkJICAgIGxlbiA9IDM7CisJCX0KKwkgICAgfQorCX0KKyAgICBub3RzcGVjaWFsOgorCWlmIChsZW4gPT0gMCkgeworCSAgICBzdHJpbmdbMF0gPSBieXRlc1swXTsKKwkgICAgbGVuID0gMTsKKwl9CisKKwkvKiBTcGVjaWFsIGtleXMgKGFuZCBhIGZldyBvdGhlcnMpIG1heSBoYXZlIG1vZGlmaWVycyAqLworI2lmIDAKKwlpZiAobGVuID09IDMgfHwKKwkJYnl0ZXNbMF0gPT0gQl9TUEFDRSB8fCBieXRlc1swXSA9PSBCX1RBQiB8fAorCQlieXRlc1swXSA9PSBCX1JFVFVSTiB8fCBieXRlc1swXSA9PSAnXHInIHx8CisJCWJ5dGVzWzBdID09IEJfRVNDQVBFKQorI2Vsc2UKKwlpZiAoY2FuSGF2ZVZpbU1vZGlmaWVycykKKyNlbmRpZgorCXsKKwkgICAgaW50IG1vZGlmaWVyczsKKwkgICAgbW9kaWZpZXJzID0gMDsKKwkgICAgaWYgKGJlTW9kaWZpZXJzICYgQl9TSElGVF9LRVkpCisJCW1vZGlmaWVycyB8PSBNT0RfTUFTS19TSElGVDsKKwkgICAgaWYgKGJlTW9kaWZpZXJzICYgQl9DT05UUk9MX0tFWSkKKwkJbW9kaWZpZXJzIHw9IE1PRF9NQVNLX0NUUkw7CisJICAgIGlmIChiZU1vZGlmaWVycyAmIEJfT1BUSU9OX0tFWSkKKwkJbW9kaWZpZXJzIHw9IE1PRF9NQVNLX0FMVDsKKworCSAgICAvKgorCSAgICAgKiBGb3Igc29tZSBrZXlzIGEgc2hpZnQgbW9kaWZpZXIgaXMgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIga2V5CisJICAgICAqIGNvZGUuICBEbyB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBsZW4gIT0gMSBhbmQKKwkgICAgICogc3RyaW5nWzBdICE9IENTST8gKE5vdCBmb3IgQmVPUywgc2luY2UgbGVuID09IDMgaW1wbGllcworCSAgICAgKiBzdHJpbmdbMF0gPT0gQ1NJLi4uKQorCSAgICAgKi8KKwkgICAgaW50IGtleTsKKwkgICAgaWYgKHN0cmluZ1swXSA9PSBDU0kgJiYgbGVuID09IDMpCisJCWtleSA9IFRPX1NQRUNJQUwoc3RyaW5nWzFdLCBzdHJpbmdbMl0pOworCSAgICBlbHNlCisJCWtleSA9IHN0cmluZ1swXTsKKwkgICAga2V5ID0gc2ltcGxpZnlfa2V5KGtleSwgJm1vZGlmaWVycyk7CisJICAgIGlmIChJU19TUEVDSUFMKGtleSkpCisJICAgIHsKKwkJc3RyaW5nWzBdID0gQ1NJOworCQlzdHJpbmdbMV0gPSBLX1NFQ09ORChrZXkpOworCQlzdHJpbmdbMl0gPSBLX1RISVJEKGtleSk7CisJCWxlbiA9IDM7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCXN0cmluZ1swXSA9IGtleTsKKwkJbGVuID0gMTsKKwkgICAgfQorCisJICAgIGlmIChtb2RpZmllcnMpCisJICAgIHsKKwkJKmRlc3QrKyA9IENTSTsKKwkJKmRlc3QrKyA9IEtTX01PRElGSUVSOworCQkqZGVzdCsrID0gbW9kaWZpZXJzOworCQlrbS5sZW5ndGggPSAzOworCSAgICB9CisJfQorCW1lbWNweSgoY2hhciAqKWRlc3QsIHN0cmluZywgbGVuKTsKKwlrbS5sZW5ndGggKz0gbGVuOworICAgIH0KKworICAgIHdyaXRlX3BvcnQoZ3VpLnZkY21wLCBWaW1Nc2c6OktleSwgJmttLCBzaXplb2Yoa20pKTsKKworICAgIC8qCisgICAgICogYmxhbmsgb3V0IHRoZSBwb2ludGVyIGlmIG5lY2Vzc2FyeQorICAgICAqLworICAgIGlmIChwX21oICYmICFndWkucG9pbnRlcl9oaWRkZW4pCisgICAgeworCWd1aUJsYW5rTW91c2UodHJ1ZSk7CisJZ3VpLnBvaW50ZXJfaGlkZGVuID0gVFJVRTsKKyAgICB9Cit9CisgICAgdm9pZAorVmltVGV4dEFyZWFWaWV3OjpndWlTZW5kTW91c2VFdmVudCgKKyAgICBpbnQJICAgIGJ1dHRvbiwKKyAgICBpbnQJICAgIHgsCisgICAgaW50CSAgICB5LAorICAgIGludAkgICAgcmVwZWF0ZWRfY2xpY2ssCisgICAgaW50X3UgICBtb2RpZmllcnMpCit7CisgICAgVmltTW91c2VNc2cgbW07CisKKyAgICBtbS5idXR0b24gPSBidXR0b247CisgICAgbW0ueCA9IHg7CisgICAgbW0ueSA9IHk7CisgICAgbW0ucmVwZWF0ZWRfY2xpY2sgPSByZXBlYXRlZF9jbGljazsKKyAgICBtbS5tb2RpZmllcnMgPSBtb2RpZmllcnM7CisKKyAgICB3cml0ZV9wb3J0KGd1aS52ZGNtcCwgVmltTXNnOjpNb3VzZSwgJm1tLCBzaXplb2YobW0pKTsKKyAgICAvLyBjYWxscyBndWlfc2VuZF9tb3VzZV9ldmVudCgpCisKKyAgICAvKgorICAgICAqIGlmIG91ciBwb2ludGVyIGlzIGN1cnJlbnRseSBoaWRkZW4sIHRoZW4gd2Ugc2hvdWxkIHNob3cgaXQuCisgICAgICovCisgICAgaWYgKGd1aS5wb2ludGVyX2hpZGRlbikKKyAgICB7CisJZ3VpQmxhbmtNb3VzZShmYWxzZSk7CisJZ3VpLnBvaW50ZXJfaGlkZGVuID0gRkFMU0U7CisgICAgfQorfQorCisgICAgdm9pZAorVmltVGV4dEFyZWFWaWV3OjpndWlCbGFua01vdXNlKGJvb2wgc2hvdWxkX2hpZGUpCit7CisgICAgaWYgKHNob3VsZF9oaWRlKSB7CisJLy9ndWkudmltQXBwLT5IaWRlQ3Vyc29yKCk7CisJZ3VpLnZpbUFwcC0+T2JzY3VyZUN1cnNvcigpOworCS8qCisJICogT2JzY3VyZUN1cnNvcigpIHdvdWxkIGV2ZW4gYmUgZWFzaWVyLCBidXQgdGhlbgorCSAqIFZpbSdzIGlkZWEgb2YgbW91c2UgdmlzaWJpbGl0eSBkb2VzIG5vdCBuZWNlc3NhcmlseQorCSAqIGNvcnJlc3BvbmQgdG8gcmVhbGl0eS4KKwkgKi8KKyAgICB9IGVsc2UgeworCS8vZ3VpLnZpbUFwcC0+U2hvd0N1cnNvcigpOworICAgIH0KK30KKworICAgIGludF91CitWaW1UZXh0QXJlYVZpZXc6Om1vdXNlTW9kaWZpZXJzVG9WaW0oaW50MzIgYmVNb2RpZmllcnMpCit7CisgICAgaW50X3UgdmltX21vZGlmaWVycyA9IDB4MDsKKworICAgIGlmIChiZU1vZGlmaWVycyAmIEJfU0hJRlRfS0VZKQorCXZpbV9tb2RpZmllcnMgfD0gTU9VU0VfU0hJRlQ7CisgICAgaWYgKGJlTW9kaWZpZXJzICYgQl9DT05UUk9MX0tFWSkKKwl2aW1fbW9kaWZpZXJzIHw9IE1PVVNFX0NUUkw7CisgICAgaWYgKGJlTW9kaWZpZXJzICYgQl9PUFRJT05fS0VZKQkgICAgLyogQWx0IG9yIE1ldGEga2V5ICovCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9BTFQ7CisKKyAgICByZXR1cm4gdmltX21vZGlmaWVyczsKK30KKworICAgIHZvaWQKK1ZpbVRleHRBcmVhVmlldzo6TW91c2VEb3duKEJQb2ludCBwb2ludCkKK3sKKyAgICBCTWVzc2FnZSAqbSA9IFdpbmRvdygpLT5DdXJyZW50TWVzc2FnZSgpOworICAgIGFzc2VydChtKTsKKworICAgIGludDMyIGJ1dHRvbnMgPSAwOworICAgIG0tPkZpbmRJbnQzMigiYnV0dG9ucyIsICZidXR0b25zKTsKKworICAgIGludCB2aW1CdXR0b247CisKKyAgICBpZiAoYnV0dG9ucyAmIEJfUFJJTUFSWV9NT1VTRV9CVVRUT04pCisJdmltQnV0dG9uID0gTU9VU0VfTEVGVDsKKyAgICBlbHNlIGlmIChidXR0b25zICYgQl9TRUNPTkRBUllfTU9VU0VfQlVUVE9OKQorCXZpbUJ1dHRvbiA9IE1PVVNFX1JJR0hUOworICAgIGVsc2UgaWYgKGJ1dHRvbnMgJiBCX1RFUlRJQVJZX01PVVNFX0JVVFRPTikKKwl2aW1CdXR0b24gPSBNT1VTRV9NSURETEU7CisgICAgZWxzZQorCXJldHVybjsJCQkvKiBVbmtub3duIGJ1dHRvbiAqLworCisgICAgdmltTW91c2VCdXR0b24gPSAxOwkJLyogZG9uJ3QgY2FyZSB3aGljaCBvbmUgKi8KKworICAgIC8qIEhhbmRsZSBtdWx0aXBsZSBjbGlja3MgKi8KKyAgICBpbnQzMiBjbGlja3MgPSAwOworICAgIG0tPkZpbmRJbnQzMigiY2xpY2tzIiwgJmNsaWNrcyk7CisKKyAgICBpbnQzMiBtb2RpZmllcnMgPSAwOworICAgIG0tPkZpbmRJbnQzMigibW9kaWZpZXJzIiwgJm1vZGlmaWVycyk7CisKKyAgICB2aW1Nb3VzZU1vZGlmaWVycyA9IG1vdXNlTW9kaWZpZXJzVG9WaW0obW9kaWZpZXJzKTsKKworICAgIGd1aVNlbmRNb3VzZUV2ZW50KHZpbUJ1dHRvbiwgcG9pbnQueCwgcG9pbnQueSwKKwkgICAgY2xpY2tzID4gMSAvKiA9IHJlcGVhdGVkX2NsaWNrKi8sIHZpbU1vdXNlTW9kaWZpZXJzKTsKK30KKworICAgIHZvaWQKK1ZpbVRleHRBcmVhVmlldzo6TW91c2VVcChCUG9pbnQgcG9pbnQpCit7CisgICAgdmltTW91c2VCdXR0b24gPSAwOworCisgICAgQk1lc3NhZ2UgKm0gPSBXaW5kb3coKS0+Q3VycmVudE1lc3NhZ2UoKTsKKyAgICBhc3NlcnQobSk7CisgICAgLy9tLT5QcmludFRvU3RyZWFtKCk7CisKKyAgICBpbnQzMiBtb2RpZmllcnMgPSAwOworICAgIG0tPkZpbmRJbnQzMigibW9kaWZpZXJzIiwgJm1vZGlmaWVycyk7CisKKyAgICB2aW1Nb3VzZU1vZGlmaWVycyA9IG1vdXNlTW9kaWZpZXJzVG9WaW0obW9kaWZpZXJzKTsKKworICAgIGd1aVNlbmRNb3VzZUV2ZW50KE1PVVNFX1JFTEVBU0UsIHBvaW50LngsIHBvaW50LnksCisJICAgIDAgLyogPSByZXBlYXRlZF9jbGljayovLCB2aW1Nb3VzZU1vZGlmaWVycyk7CisKKyAgICBJbmhlcml0ZWQ6Ok1vdXNlVXAocG9pbnQpOworfQorCisgICAgdm9pZAorVmltVGV4dEFyZWFWaWV3OjpNb3VzZU1vdmVkKEJQb2ludCBwb2ludCwgdWludDMyIHRyYW5zaXQsIGNvbnN0IEJNZXNzYWdlICptZXNzYWdlKQoreworICAgIC8qCisgICAgICogaWYgb3VyIHBvaW50ZXIgaXMgY3VycmVudGx5IGhpZGRlbiwgdGhlbiB3ZSBzaG91bGQgc2hvdyBpdC4KKyAgICAgKi8KKyAgICBpZiAoZ3VpLnBvaW50ZXJfaGlkZGVuKQorICAgIHsKKwlndWlCbGFua01vdXNlKGZhbHNlKTsKKwlndWkucG9pbnRlcl9oaWRkZW4gPSBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoIXZpbU1vdXNlQnV0dG9uKSAgICAvKiBjb3VsZCBhbHNvIGNoZWNrIG0tPiJidXR0b25zIiAqLworCXJldHVybjsKKworICAgIGF0b21pY19hZGQoJm1vdXNlRHJhZ0V2ZW50Q291bnQsIDEpOworCisgICAgLyogRG9uJ3QgY2FyZSBtdWNoIGFib3V0ICJ0cmFuc2l0IiAqLworICAgIGd1aVNlbmRNb3VzZUV2ZW50KE1PVVNFX0RSQUcsIHBvaW50LngsIHBvaW50LnksIDAsIHZpbU1vdXNlTW9kaWZpZXJzKTsKK30KKworICAgIHZvaWQKK1ZpbVRleHRBcmVhVmlldzo6TWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdlICptKQoreworICAgIHN3aXRjaCAobS0+d2hhdCkgeworICAgIGNhc2UgJ21lbnUnOgorCXsKKwkgICAgVmltTWVudU1zZyBtbTsKKwkgICAgbW0uZ3VpTWVudSA9IE5VTEw7CS8qIGluIGNhc2Ugbm8gcG9pbnRlciBpbiBtc2cgKi8KKwkgICAgbS0+RmluZFBvaW50ZXIoIlZpbU1lbnUiLCAodm9pZCAqKikmbW0uZ3VpTWVudSk7CisKKwkgICAgd3JpdGVfcG9ydChndWkudmRjbXAsIFZpbU1zZzo6TWVudSwgJm1tLCBzaXplb2YobW0pKTsKKwl9CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlpZiAobS0+V2FzRHJvcHBlZCgpKSB7CisJICAgIEJXaW5kb3cgKncgPSBXaW5kb3coKTsKKwkgICAgdy0+RGV0YWNoQ3VycmVudE1lc3NhZ2UoKTsKKwkgICAgdy0+TWluaW1pemUoZmFsc2UpOworCSAgICBWaW1BcHA6OlNlbmRSZWZzKG0sIChtb2RpZmllcnMoKSAmIEJfU0hJRlRfS0VZKSAhPSAwKTsKKwl9IGVsc2UgeworCSAgICBJbmhlcml0ZWQ6Ok1lc3NhZ2VSZWNlaXZlZChtKTsKKwl9CisJYnJlYWs7CisgICAgfQorfQorCisgICAgaW50CitWaW1UZXh0QXJlYVZpZXc6Om1jaEluaXRGb250KGNoYXJfdSAqbmFtZSkKK3sKKyAgICBWaW1Gb250ICpuZXdGb250ID0gKFZpbUZvbnQgKilndWlfbWNoX2dldF9mb250KG5hbWUsIDApOworCisgICAgZ3VpLm5vcm1fZm9udCA9IChHdWlGb250KW5ld0ZvbnQ7CisgICAgZ3VpX21jaF9zZXRfZm9udCgoR3VpRm9udCluZXdGb250KTsKKyAgICBpZiAobmFtZSkKKwlobF9zZXRfZm9udF9uYW1lKG5hbWUpOworCisgICAgU2V0RHJhd2luZ01vZGUoQl9PUF9DT1BZKTsKKworICAgIC8qCisgICAgICogVHJ5IHRvIGxvYWQgb3RoZXIgZm9udHMgZm9yIGJvbGQsIGl0YWxpYywgYW5kIGJvbGQtaXRhbGljLgorICAgICAqIFdlIHNob3VsZCBhbHNvIHRyeSB0byB3b3JrIG91dCB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aGVzZSB3aGVuIHRoZXkgYXJlCisgICAgICogbm90IHNwZWNpZmllZCBieSBYIHJlc291cmNlcywgYnV0IHdlIGRvbid0IHlldC4KKyAgICAgKi8KKworICAgIHJldHVybiBPSzsKK30KKworICAgIHZvaWQKK1ZpbVRleHRBcmVhVmlldzo6bWNoRHJhd1N0cmluZyhpbnQgcm93LCBpbnQgY29sLCBjaGFyX3UgKnMsIGludCBsZW4sIGludCBmbGFncykKK3sKKyAgICAvKgorICAgICAqIEZpcnN0IHdlIG11c3QgZXJhc2UgdGhlIGFyZWEsIGJlY2F1c2UgRHJhd1N0cmluZyB3b24ndCBkbworICAgICAqIHRoYXQgZm9yIHVzLiBYWFggTW9zdCBvZiB0aGUgdGltZSB0aGlzIGlzIGEgd2FzdGUgb2YgZWZmb3J0CisgICAgICogc2luY2UgdGhlIGJhY2hncm91bmQgaGFzIGJlZW4gZXJhc2VkIGFscmVhZHkuLi4gRFJBV19UUkFOU1AKKyAgICAgKiBzaG91bGQgYmUgc2V0IHdoZW4gYXBwcm9wcmlhdGUhISEKKyAgICAgKiAoUmVjdGFuZ2xlcyBpbmNsdWRlIHRoZSBib3R0b20gYW5kIHJpZ2h0IGVkZ2UpCisgICAgICovCisgICAgaWYgKCEoZmxhZ3MgJiBEUkFXX1RSQU5TUCkpIHsKKwlCUmVjdCByKEZJTExfWChjb2wpLCBGSUxMX1kocm93KSwKKwkJRklMTF9YKGNvbCArIGxlbikgLSBQRU5fV0lEVEgsIEZJTExfWShyb3cgKyAxKSAtIFBFTl9XSURUSCk7CisJRmlsbFJlY3QociwgQl9TT0xJRF9MT1cpOworICAgIH0KKyAgICBCUG9pbnQgd2hlcmUoVEVYVF9YKGNvbCksIFRFWFRfWShyb3cpKTsKKyAgICBEcmF3U3RyaW5nKChjaGFyICopcywgbGVuLCB3aGVyZSk7CisKKyAgICBpZiAoZmxhZ3MgJiBEUkFXX0JPTEQpIHsKKwl3aGVyZS54ICs9IDEuMDsKKwlTZXREcmF3aW5nTW9kZShCX09QX0JMRU5EKTsKKwlEcmF3U3RyaW5nKChjaGFyICopcywgbGVuLCB3aGVyZSk7CisJU2V0RHJhd2luZ01vZGUoQl9PUF9DT1BZKTsKKyAgICB9CisgICAgaWYgKGZsYWdzICYgRFJBV19VTkRFUkwpIHsKKwlCUG9pbnQgc3RhcnQoRklMTF9YKGNvbCksIEZJTExfWShyb3cgKyAxKSAtIFBFTl9XSURUSCk7CisJQlBvaW50IGVuZChGSUxMX1goY29sICsgbGVuKSAtIFBFTl9XSURUSCwgc3RhcnQueSk7CisKKwlTdHJva2VMaW5lKHN0YXJ0LCBlbmQpOworICAgIH0KK30KKworICAgIHZvaWQKK1ZpbVRleHRBcmVhVmlldzo6bWNoQ2xlYXJCbG9jaygKKyAgICBpbnQJCXJvdzEsCisgICAgaW50CQljb2wxLAorICAgIGludAkJcm93MiwKKyAgICBpbnQJCWNvbDIpCit7CisgICAgQlJlY3QgcihGSUxMX1goY29sMSksIEZJTExfWShyb3cxKSwKKwkgICAgRklMTF9YKGNvbDIgKyAxKSAtIFBFTl9XSURUSCwgRklMTF9ZKHJvdzIgKyAxKSAtIFBFTl9XSURUSCk7CisgICAgZ3VpX21jaF9zZXRfYmdfY29sb3IoZ3VpLmJhY2tfcGl4ZWwpOworICAgIEZpbGxSZWN0KHIsIEJfU09MSURfTE9XKTsKK30KKworICAgIHZvaWQKK1ZpbVRleHRBcmVhVmlldzo6bWNoQ2xlYXJBbGwoKQoreworICAgIGd1aV9tY2hfc2V0X2JnX2NvbG9yKGd1aS5iYWNrX3BpeGVsKTsKKyAgICBGaWxsUmVjdChCb3VuZHMoKSwgQl9TT0xJRF9MT1cpOworfQorCisvKgorICogbWNoRGVsZXRlTGluZXMoKSBMb2NrKClzIHRoZSB3aW5kb3cgYnkgaXRzZWxmLgorICovCisgICAgdm9pZAorVmltVGV4dEFyZWFWaWV3OjptY2hEZWxldGVMaW5lcyhpbnQgcm93LCBpbnQgbnVtX2xpbmVzKQoreworICAgIGlmIChyb3cgKyBudW1fbGluZXMgPiBndWkuc2Nyb2xsX3JlZ2lvbl9ib3QpCisgICAgeworCS8qIFNjcm9sbGVkIG91dCBvZiByZWdpb24sIGp1c3QgYmxhbmsgdGhlIGxpbmVzIG91dCAqLworCWd1aV9jbGVhcl9ibG9jayhyb3csIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQsCisJCWd1aS5zY3JvbGxfcmVnaW9uX2JvdCwgZ3VpLnNjcm9sbF9yZWdpb25fcmlnaHQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIGNvcHkgb25lIGV4dHJhIHBpeGVsLCBmb3Igd2hlbiBib2xkIGhhcyBzcGlsbGVkIG92ZXIgKi8KKwlpbnQgd2lkdGggPSBndWkuY2hhcl93aWR0aCAqIChndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodAorCQkJCS0gZ3VpLnNjcm9sbF9yZWdpb25fbGVmdCArIDEpICsgMSAtIFBFTl9XSURUSDsKKwlpbnQgaGVpZ2h0ID0gZ3VpLmNoYXJfaGVpZ2h0ICoKKwkJICAgICAoZ3VpLnNjcm9sbF9yZWdpb25fYm90IC0gcm93IC0gbnVtX2xpbmVzICsgMSkgLSBQRU5fV0lEVEg7CisKKwlCUmVjdCBzb3VyY2UsIGRlc3Q7CisKKwlzb3VyY2UubGVmdCA9IEZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KTsKKwlzb3VyY2UudG9wID0gRklMTF9ZKHJvdyArIG51bV9saW5lcyk7CisJc291cmNlLnJpZ2h0ID0gc291cmNlLmxlZnQgKyB3aWR0aDsKKwlzb3VyY2UuYm90dG9tID0gc291cmNlLnRvcCArIGhlaWdodDsKKworCWRlc3QubGVmdCA9IEZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KTsKKwlkZXN0LnRvcCA9IEZJTExfWShyb3cpOworCWRlc3QucmlnaHQgPSBkZXN0LmxlZnQgKyB3aWR0aDsKKwlkZXN0LmJvdHRvbSA9IGRlc3QudG9wICsgaGVpZ2h0OworCisJLyogWFhYIEF0dGVtcHQgYXQgYSBoYWNrOiAqLworCWd1aS52aW1XaW5kb3ctPlVwZGF0ZUlmTmVlZGVkKCk7CisjaWYgMAorCS8qIFhYWCBBdHRlbXB0IGF0IGEgaGFjazogKi8KKwlpZiAoZ3VpLnZpbVdpbmRvdy0+TmVlZHNVcGRhdGUoKSkgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgIm1jaERlbGV0ZUxpbmVzOiBOZWVkc1VwZGF0ZSFcbiIpOworCSAgICBndWkudmltV2luZG93LT5VcGRhdGVJZk5lZWRlZCgpOworCSAgICB3aGlsZSAoZ3VpLnZpbVdpbmRvdy0+TmVlZHNVcGRhdGUoKSkgeworCQlpZiAoZmFsc2UgJiYgZ3VpLnZpbVdpbmRvdy0+TG9jaygpKSB7CisJCSAgICBTeW5jKCk7CisJCSAgICBndWkudmltV2luZG93LT5VbmxvY2soKTsKKwkJfQorCQlzbm9vemUoMik7CisJICAgIH0KKwl9CisjZW5kaWYKKworCWlmIChndWkudmltV2luZG93LT5Mb2NrKCkpIHsKKwkgICAgU3luYygpOworCSAgICBDb3B5Qml0cyhzb3VyY2UsIGRlc3QpOworCSAgICAvL1N5bmMoKTsKKworCSAgICAvKiBVcGRhdGUgZ3VpLmN1cnNvcl9yb3cgaWYgdGhlIGN1cnNvciBzY3JvbGxlZCBvciBjb3BpZWQgb3ZlciAqLworCSAgICBpZiAoZ3VpLmN1cnNvcl9yb3cgPj0gcm93CisJCSYmIGd1aS5jdXJzb3JfY29sID49IGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQKKwkJJiYgZ3VpLmN1cnNvcl9jb2wgPD0gZ3VpLnNjcm9sbF9yZWdpb25fcmlnaHQpCisJICAgIHsKKwkJaWYgKGd1aS5jdXJzb3Jfcm93IDwgcm93ICsgbnVtX2xpbmVzKQorCQkgICAgZ3VpLmN1cnNvcl9pc192YWxpZCA9IEZBTFNFOworCQllbHNlIGlmIChndWkuY3Vyc29yX3JvdyA8PSBndWkuc2Nyb2xsX3JlZ2lvbl9ib3QpCisJCSAgICBndWkuY3Vyc29yX3JvdyAtPSBudW1fbGluZXM7CisJICAgIH0KKworCSAgICAvKiBDbGVhciBvbmUgY29sdW1uIG1vcmUgZm9yIHdoZW4gYm9sZCBoYXMgc3BpbGxlZCBvdmVyICovCisJICAgIGd1aV9jbGVhcl9ibG9jayhndWkuc2Nyb2xsX3JlZ2lvbl9ib3QgLSBudW1fbGluZXMgKyAxLAorCQkJCQkJICAgICAgIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQsCisJCWd1aS5zY3JvbGxfcmVnaW9uX2JvdCwgZ3VpLnNjcm9sbF9yZWdpb25fcmlnaHQpOworCisJICAgIGd1aS52aW1XaW5kb3ctPlVubG9jaygpOworCSAgICAvKgorCSAgICAgKiBUaGUgRHJhdygpIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG5vdyBpZiBzb21lIG9mIHRoZSBzb3VyY2UKKwkgICAgICogYml0cyB3ZXJlIG5vdCBpbiB0aGUgdmlzaWJsZSByZWdpb24uCisJICAgICAqLworCisJICAgIC8vZ3VpX3gxMV9jaGVja19jb3B5X2FyZWEoKTsKKwl9CisgICAgfQorfQorCisvKgorICogbWNoSW5zZXJ0TGluZXMoKSBMb2NrKClzIHRoZSB3aW5kb3cgYnkgaXRzZWxmLgorICovCisgICAgdm9pZAorVmltVGV4dEFyZWFWaWV3OjptY2hJbnNlcnRMaW5lcyhpbnQgcm93LCBpbnQgbnVtX2xpbmVzKQoreworICAgIGlmIChyb3cgKyBudW1fbGluZXMgPiBndWkuc2Nyb2xsX3JlZ2lvbl9ib3QpCisgICAgeworCS8qIFNjcm9sbGVkIG91dCBvZiByZWdpb24sIGp1c3QgYmxhbmsgdGhlIGxpbmVzIG91dCAqLworCWd1aV9jbGVhcl9ibG9jayhyb3csIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQsCisJCWd1aS5zY3JvbGxfcmVnaW9uX2JvdCwgZ3VpLnNjcm9sbF9yZWdpb25fcmlnaHQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIGNvcHkgb25lIGV4dHJhIHBpeGVsLCBmb3Igd2hlbiBib2xkIGhhcyBzcGlsbGVkIG92ZXIgKi8KKwlpbnQgd2lkdGggPSBndWkuY2hhcl93aWR0aCAqIChndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodAorCQkJCS0gZ3VpLnNjcm9sbF9yZWdpb25fbGVmdCArIDEpICsgMSAtIFBFTl9XSURUSDsKKwlpbnQgaGVpZ2h0ID0gZ3VpLmNoYXJfaGVpZ2h0ICoKKwkJICAgICAoZ3VpLnNjcm9sbF9yZWdpb25fYm90IC0gcm93IC0gbnVtX2xpbmVzICsgMSkgLSBQRU5fV0lEVEg7CisKKwlCUmVjdCBzb3VyY2UsIGRlc3Q7CisKKwlzb3VyY2UubGVmdCA9IEZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KTsKKwlzb3VyY2UudG9wID0gRklMTF9ZKHJvdyk7CisJc291cmNlLnJpZ2h0ID0gc291cmNlLmxlZnQgKyB3aWR0aDsKKwlzb3VyY2UuYm90dG9tID0gc291cmNlLnRvcCArIGhlaWdodDsKKworCWRlc3QubGVmdCA9IEZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KTsKKwlkZXN0LnRvcCA9IEZJTExfWShyb3cgKyBudW1fbGluZXMpOworCWRlc3QucmlnaHQgPSBkZXN0LmxlZnQgKyB3aWR0aDsKKwlkZXN0LmJvdHRvbSA9IGRlc3QudG9wICsgaGVpZ2h0OworCisJLyogWFhYIEF0dGVtcHQgYXQgYSBoYWNrOiAqLworCWd1aS52aW1XaW5kb3ctPlVwZGF0ZUlmTmVlZGVkKCk7CisjaWYgMAorCS8qIFhYWCBBdHRlbXB0IGF0IGEgaGFjazogKi8KKwlpZiAoZ3VpLnZpbVdpbmRvdy0+TmVlZHNVcGRhdGUoKSkKKwkgICAgZnByaW50ZihzdGRlcnIsICJtY2hJbnNlcnRMaW5lczogTmVlZHNVcGRhdGUhXG4iKTsKKwlndWkudmltV2luZG93LT5VcGRhdGVJZk5lZWRlZCgpOworCXdoaWxlIChndWkudmltV2luZG93LT5OZWVkc1VwZGF0ZSgpKQorCSAgICBzbm9vemUoMik7CisjZW5kaWYKKworCWlmIChndWkudmltV2luZG93LT5Mb2NrKCkpIHsKKwkgICAgU3luYygpOworCSAgICBDb3B5Qml0cyhzb3VyY2UsIGRlc3QpOworCSAgICAvL1N5bmMoKTsKKworCSAgICAvKiBVcGRhdGUgZ3VpLmN1cnNvcl9yb3cgaWYgdGhlIGN1cnNvciBzY3JvbGxlZCBvciBjb3BpZWQgb3ZlciAqLworCSAgICBpZiAoZ3VpLmN1cnNvcl9yb3cgPj0gZ3VpLnJvdworCQkmJiBndWkuY3Vyc29yX2NvbCA+PSBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0CisJCSYmIGd1aS5jdXJzb3JfY29sIDw9IGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0KQorCSAgICB7CisJCWlmIChndWkuY3Vyc29yX3JvdyA8PSBndWkuc2Nyb2xsX3JlZ2lvbl9ib3QgLSBudW1fbGluZXMpCisJCSAgICBndWkuY3Vyc29yX3JvdyArPSBudW1fbGluZXM7CisJCWVsc2UgaWYgKGd1aS5jdXJzb3Jfcm93IDw9IGd1aS5zY3JvbGxfcmVnaW9uX2JvdCkKKwkJICAgIGd1aS5jdXJzb3JfaXNfdmFsaWQgPSBGQUxTRTsKKwkgICAgfQorCSAgICAvKiBDbGVhciBvbmUgY29sdW1uIG1vcmUgZm9yIHdoZW4gYm9sZCBoYXMgc3BpbGxlZCBvdmVyICovCisJICAgIGd1aV9jbGVhcl9ibG9jayhyb3csIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQsCisJCSAgICByb3cgKyBudW1fbGluZXMgLSAxLCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCk7CisKKwkgICAgZ3VpLnZpbVdpbmRvdy0+VW5sb2NrKCk7CisJICAgIC8qCisJICAgICAqIFRoZSBEcmF3KCkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgbm93IGlmIHNvbWUgb2YgdGhlIHNvdXJjZQorCSAgICAgKiBiaXRzIHdlcmUgbm90IGluIHRoZSB2aXNpYmxlIHJlZ2lvbi4KKwkgICAgICogSG93ZXZlciwgaWYgd2Ugc2Nyb2xsIHRvbyBmYXN0IGl0IGNhbid0IGtlZXAgdXAgYW5kIHRoZQorCSAgICAgKiB1cGRhdGUgcmVnaW9uIGdldHMgbWVzc2VkIHVwLiBUaGlzIHNlZW1zIHRvIGJlIGJlY2F1c2UgY29weWluZworCSAgICAgKiB1bi1EcmF3KCluIGJpdHMgZG9lcyBub3QgZ2VuZXJhdGUgRHJhdygpIGNhbGxzIGZvciB0aGUgY29weS4uLgorCSAgICAgKiBJIG1vdmVkIHRoZSBoYWNrIHRvIGJlZm9yZSB0aGUgQ29weUJpdHMoKSB0byByZWR1Y2UgdGhlCisJICAgICAqIGFtb3VudCBvZiBhZGRpdGlvbmFsIHdhaXRpbmcgbmVlZGVkLgorCSAgICAgKi8KKworCSAgICAvL2d1aV94MTFfY2hlY2tfY29weV9hcmVhKCk7CisJfQorICAgIH0KKworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tIFZpbVNjcm9sbEJhciAtLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEJVRzogWFhYCisgKiBJdCBzZWVtcyB0aGF0IEJTY3JvbGxCYXIgZGV0ZXJtaW5lIHRoZWlyIGRpcmVjdGlvbiBub3QgZnJvbQorICogInBvc3R1cmUiIGJ1dCBmcm9tIGlmIHRoZXkgYXJlICJ0YWxsIiBvciAid2lkZSIgaW4gc2hhcGUuLi4KKyAqCisgKiBBbHNvLCBwbGFjZSB0aGVtIG91dCBvZiBzaWdodCwgYmVjYXVzZSBWaW0gZW5hYmxlcyB0aGVtIGJlZm9yZQorICogdGhleSBhcmUgcG9zaXRpb25lZC4KKyAqLworVmltU2Nyb2xsQmFyOjpWaW1TY3JvbGxCYXIoc2Nyb2xsYmFyX1QgKmcsIG9yaWVudGF0aW9uIHBvc3R1cmUpOgorICAgIEJTY3JvbGxCYXIocG9zdHVyZSA9PSBCX0hPUklaT05UQUwgPyAgQlJlY3QoLTEwMCwtMTAwLC0xMCwtOTApIDoKKwkJCQkJICBCUmVjdCgtMTAwLC0xMDAsLTkwLC0xMCksCisJCSJ2aW0gc2Nyb2xsYmFyIiwgKEJWaWV3ICopTlVMTCwKKwkgICAgMC4wLCAxMC4wLCBwb3N0dXJlKSwKKyAgICBpZ25vcmVWYWx1ZSgtMSksCisgICAgc2Nyb2xsRXZlbnRDb3VudCgwKQoreworICAgIGdzYiA9IGc7CisgICAgU2V0UmVzaXppbmdNb2RlKEJfRk9MTE9XX05PTkUpOworfQorCitWaW1TY3JvbGxCYXI6On5WaW1TY3JvbGxCYXIoKQoreworfQorCisgICAgdm9pZAorVmltU2Nyb2xsQmFyOjpWYWx1ZUNoYW5nZWQoZmxvYXQgbmV3VmFsdWUpCit7CisgICAgaWYgKGlnbm9yZVZhbHVlID49IDAuMCAmJiBuZXdWYWx1ZSA9PSBpZ25vcmVWYWx1ZSkgeworCWlnbm9yZVZhbHVlID0gLTE7CisJcmV0dXJuOworICAgIH0KKyAgICBpZ25vcmVWYWx1ZSA9IC0xOworICAgIC8qCisgICAgICogV2Ugd2FudCB0byB0aHJvdHRsZSB0aGUgYW1vdW50IG9mIHNjcm9sbCBtZXNzYWdlcyBnZW5lcmF0ZWQuCisgICAgICogTm9ybWFsbHkgSSBwcmVzdW1lIHlvdSB3b24ndCBnZXQgYSBuZXcgbWVzc2FnZSBiZWZvcmUgd2UndmUKKyAgICAgKiBoYW5kbGVkIHRoZSBwcmV2aW91cyBvbmUsIGJ1dCBiZWNhdXNlIHdlJ3JlIHBhc3NpbmcgdGhlbSBvbiB0aGlzCisgICAgICogaGFwcGVucyB2ZXJ5IHF1aWNrbHkuIFNvIGluc3RlYWQgd2Uga2VlcCBhIGNvdW50ZXIgb2YgaG93IG1hbnkKKyAgICAgKiBzY3JvbGwgZXZlbnRzIHRoZXJlIGFyZSAob3Igd2lsbCBiZSkgaW4gdGhlIFZEQ01QLCBhbmQgdGhlCisgICAgICogdGhyb3R0bGluZyBoYXBwZW5zIGF0IHRoZSByZWNlaXZpbmcgZW5kLgorICAgICAqLworICAgIGF0b21pY19hZGQoJnNjcm9sbEV2ZW50Q291bnQsIDEpOworCisgICAgc3RydWN0IFZpbVNjcm9sbEJhck1zZyBzbTsKKworICAgIHNtLnNiID0gdGhpczsKKyAgICBzbS52YWx1ZSA9IChsb25nKSBuZXdWYWx1ZTsKKyAgICBzbS5zdGlsbERyYWdnaW5nID0gVFJVRTsKKworICAgIHdyaXRlX3BvcnQoZ3VpLnZkY21wLCBWaW1Nc2c6OlNjcm9sbEJhciwgJnNtLCBzaXplb2Yoc20pKTsKKworICAgIC8vIGNhbGxzIGd1aV9kcmFnX3Njcm9sbGJhcihzYiwgbmV3VmFsdWUsIFRSVUUpOworfQorCisvKgorICogV2hlbiB0aGUgbW91c2UgZ29lcyB1cCwgcmVwb3J0IHRoYXQgc2Nyb2xsaW5nIGhhcyBzdG9wcGVkLgorICogTW91c2VVcCgpIGlzIE5PVCBjYWxsZWQgd2hlbiB0aGUgbW91c2UtdXAgb2NjdXJzIG91dHNpZGUKKyAqIHRoZSB3aW5kb3csIGV2ZW4gdGhvdWdoIHRoZSB0aHVtYiBkb2VzIG1vdmUgd2hpbGUgdGhlIG1vdXNlCisgKiBpcyBvdXRzaWRlLi4uIFRoaXMgaGFzIHNvbWUgZnVubnkgZWZmZWN0cy4uLiBYWFgKKyAqIFNvIHdlIGRvIHNwZWNpYWwgcHJvY2Vzc2luZyB3aGVuIHRoZSB3aW5kb3cgZGUvYWN0aXZhdGVzLgorICovCisgICAgdm9pZAorVmltU2Nyb2xsQmFyOjpNb3VzZVVwKEJQb2ludCB3aGVyZSkKK3sKKyAgICAvL0JNZXNzYWdlICptID0gV2luZG93KCktPkN1cnJlbnRNZXNzYWdlKCk7CisgICAgLy9tLT5QcmludFRvU3RyZWFtKCk7CisKKyAgICBhdG9taWNfYWRkKCZzY3JvbGxFdmVudENvdW50LCAxKTsKKworICAgIHN0cnVjdCBWaW1TY3JvbGxCYXJNc2cgc207CisKKyAgICBzbS5zYiA9IHRoaXM7CisgICAgc20udmFsdWUgPSAobG9uZykgVmFsdWUoKTsKKyAgICBzbS5zdGlsbERyYWdnaW5nID0gRkFMU0U7CisKKyAgICB3cml0ZV9wb3J0KGd1aS52ZGNtcCwgVmltTXNnOjpTY3JvbGxCYXIsICZzbSwgc2l6ZW9mKHNtKSk7CisKKyAgICAvLyBjYWxscyBndWlfZHJhZ19zY3JvbGxiYXIoc2IsIG5ld1ZhbHVlLCBGQUxTRSk7CisKKyAgICBJbmhlcml0ZWQ6Ok1vdXNlVXAod2hlcmUpOworfQorCisgICAgdm9pZAorVmltU2Nyb2xsQmFyOjpTZXRWYWx1ZShmbG9hdCBuZXdWYWx1ZSkKK3sKKyAgICBpZiAobmV3VmFsdWUgPT0gVmFsdWUoKSkKKwlyZXR1cm47CisKKyAgICBpZ25vcmVWYWx1ZSA9IG5ld1ZhbHVlOworICAgIEluaGVyaXRlZDo6U2V0VmFsdWUobmV3VmFsdWUpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tIFZpbUZvbnQgLS0tLS0tLS0tLS0tLS0tLSAqLworCitWaW1Gb250OjpWaW1Gb250KCk6IEJGb250KCkKK3sKKyAgICBpbml0KCk7Cit9CisKK1ZpbUZvbnQ6OlZpbUZvbnQoY29uc3QgVmltRm9udCAqcmhzKTogQkZvbnQocmhzKQoreworICAgIGluaXQoKTsKK30KKworVmltRm9udDo6VmltRm9udChjb25zdCBCRm9udCAqcmhzKTogQkZvbnQocmhzKQoreworICAgIGluaXQoKTsKK30KKworVmltRm9udDo6VmltRm9udChjb25zdCBWaW1Gb250ICZyaHMpOiBCRm9udChyaHMpCit7CisgICAgaW5pdCgpOworfQorCitWaW1Gb250Ojp+VmltRm9udCgpCit7Cit9CisKKyAgICB2b2lkCitWaW1Gb250Ojppbml0KCkKK3sKKyAgICBuZXh0ID0gTlVMTDsKKyAgICByZWZjb3VudCA9IDE7CisgICAgbmFtZSA9IE5VTEw7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLSAqLworCisvLyBzb21lIGdsb2JhbCB2YXJpYWJsZXMKK3N0YXRpYyBjaGFyIGFwcHNpZ1tdID0gImFwcGxpY2F0aW9uL3gtdm5kLlJoaWFsdG8tVmltLTUiOwora2V5X21hcCAqa2V5TWFwOworY2hhciAqa2V5TWFwQ2hhcnM7CitpbnQgbWFpbl9leGl0Y29kZSA9IDEyNzsKKworICAgIHN0YXR1c190CitndWlfYmVvc19wcm9jZXNzX2V2ZW50KGJpZ3RpbWVfdCB0aW1lb3V0KQoreworICAgIHN0cnVjdCBWaW1Nc2cgdm07CisgICAgbG9uZyB3aGF0OworICAgIHNzaXplX3Qgc2l6ZTsKKworICAgIHNpemUgPSByZWFkX3BvcnRfZXRjKGd1aS52ZGNtcCwgJndoYXQsICZ2bSwgc2l6ZW9mKHZtKSwKKwkgICAgQl9USU1FT1VULCB0aW1lb3V0KTsKKworICAgIGlmIChzaXplID49IDApIHsKKwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNlIFZpbU1zZzo6S2V5OgorCSAgICB7CisJCWNoYXJfdSAqc3RyaW5nID0gdm0udS5LZXkuY2hhcnM7CisJCWludCBsZW4gPSB2bS51LktleS5sZW5ndGg7CisJCWlmIChsZW4gPT0gMSAmJiBzdHJpbmdbMF0gPT0gQ3RybF9jaHIoJ0MnKSkgeworCQkgICAgdHJhc2hfaW5wdXRfYnVmKCk7CisJCSAgICBnb3RfaW50ID0gVFJVRTsKKwkJfQorCQlhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgbGVuKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIFZpbU1zZzo6UmVzaXplOgorCSAgICBndWlfcmVzaXplX3NoZWxsKHZtLnUuTmV3U2l6ZS53aWR0aCwgdm0udS5OZXdTaXplLmhlaWdodCk7CisJICAgIGJyZWFrOworCWNhc2UgVmltTXNnOjpTY3JvbGxCYXI6CisJICAgIHsKKwkJLyoKKwkJICogSWYgbG9hZHMgb2Ygc2Nyb2xsIG1lc3NhZ2VzIHF1ZXVlIHVwLCB1c2Ugb25seSB0aGUgbGFzdAorCQkgKiBvbmUuIEFsd2F5cyByZXBvcnQgd2hlbiB0aGUgc2Nyb2xsYmFyIHN0b3BzIGRyYWdnaW5nLgorCQkgKiBUaGlzIGlzIG5vdCBwZXJmZWN0IHlldCBhbnl3YXk6IHRoZXNlIGV2ZW50cyBhcmUgcXVldWVkCisJCSAqIHlldCBhZ2FpbiwgdGhpcyB0aW1lIGluIHRoZSBrZXlib2FyZCBpbnB1dCBidWZmZXIuCisJCSAqLworCQlpbnQzMiBvbGRDb3VudCA9CisJCSAgICBhdG9taWNfYWRkKCZ2bS51LlNjcm9sbC5zYi0+c2Nyb2xsRXZlbnRDb3VudCwgLTEpOworCQlpZiAob2xkQ291bnQgPD0gMSB8fCAhdm0udS5TY3JvbGwuc3RpbGxEcmFnZ2luZykKKwkJICAgIGd1aV9kcmFnX3Njcm9sbGJhcih2bS51LlNjcm9sbC5zYi0+Z2V0R3NiKCksCisJCQkgICAgdm0udS5TY3JvbGwudmFsdWUsIHZtLnUuU2Nyb2xsLnN0aWxsRHJhZ2dpbmcpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgVmltTXNnOjpNZW51OgorCSAgICBndWlfbWVudV9jYih2bS51Lk1lbnUuZ3VpTWVudSk7CisJICAgIGJyZWFrOworCWNhc2UgVmltTXNnOjpNb3VzZToKKwkgICAgeworCQlpbnQzMiBvbGRDb3VudDsKKwkJaWYgKHZtLnUuTW91c2UuYnV0dG9uID09IE1PVVNFX0RSQUcpCisJCSAgICBvbGRDb3VudCA9CisJCQlhdG9taWNfYWRkKCZndWkudmltVGV4dEFyZWEtPm1vdXNlRHJhZ0V2ZW50Q291bnQsIC0xKTsKKwkJZWxzZQorCQkgICAgb2xkQ291bnQgPSAwOworCQlpZiAob2xkQ291bnQgPD0gMSkKKwkJICAgIGd1aV9zZW5kX21vdXNlX2V2ZW50KHZtLnUuTW91c2UuYnV0dG9uLCB2bS51Lk1vdXNlLngsCisJCQkgICAgdm0udS5Nb3VzZS55LCB2bS51Lk1vdXNlLnJlcGVhdGVkX2NsaWNrLAorCQkJICAgIHZtLnUuTW91c2UubW9kaWZpZXJzKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIFZpbU1zZzo6Rm9jdXM6CisJICAgIGd1aS5pbl9mb2N1cyA9IHZtLnUuRm9jdXMuYWN0aXZlOworCSAgICAvKiBYWFggU2lnbmFsIHRoYXQgc2Nyb2xsYmFyIGRyYWdnaW5nIGhhcyBzdG9wcGVkPworCSAgICAgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdlIGRvbid0IGdldCBhIE1vdXNlVXAgaWYKKwkgICAgICogdGhhdCBoYXBwZW5zIHdoaWxlIG91dHNpZGUgdGhlIHdpbmRvdy4uLiA6LSgKKwkgICAgICovCisJICAgIGlmIChndWkuZHJhZ2dlZF9zYikgeworCQlndWkuZHJhZ2dlZF9zYiA9IFNCQVJfTk9ORTsKKwkgICAgfQorCSAgICBndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisJICAgIGJyZWFrOworCWNhc2UgVmltTXNnOjpSZWZzOgorCSAgICA6OlJlZnNSZWNlaXZlZCh2bS51LlJlZnMubWVzc2FnZSwgdm0udS5SZWZzLmNoYW5nZWRpcik7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIC8vIHVucmVjb2duaXNlZCBtZXNzYWdlLCBpZ25vcmUgaXQKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSWYgc2l6ZSA8IEJfT0ssIGl0IGlzIGFuIGVycm9yIGNvZGUuCisgICAgICovCisgICAgcmV0dXJuIHNpemU7Cit9CisKKy8qCisgKiBIZXJlIGFyZSBzb21lIGZ1bmN0aW9ucyB0byBwcm90ZWN0IGFjY2VzcyB0byBTY3JlZW5MaW5lc1tdIGFuZAorICogTGluZU9mZnNldFtdLiBUaGVzZSBhcmUgdXNlZCBmcm9tIHRoZSB3aW5kb3cgdGhyZWFkIHRvIHJlc3BvbmQKKyAqIHRvIGEgRHJhdygpIGNhbGxiYWNrLiBXaGVuIHRoYXQgb2NjdXJzLCB0aGUgd2luZG93IGlzIGFscmVhZHkKKyAqIGxvY2tlZCBieSB0aGUgc3lzdGVtLgorICoKKyAqIE90aGVyIGNvZGUgdGhhdCBuZWVkcyB0byBsb2NrIGlzIGFueSBjb2RlIHRoYXQgY2hhbmdlcyB0aGVzZQorICogdmFyaWFibGVzLiBPdGhlciByZWFkLW9ubHkgYWNjZXNzLCBvciBhY2Nlc3MgbWVyZWx5IHRvIHRoZQorICogY29udGVudHMgb2YgdGhlIHNjcmVlbiBidWZmZXIsIG5lZWQgbm90IGJlIGxvY2tlZC4KKyAqCisgKiBJZiB0aGVyZSBpcyBubyB3aW5kb3csIGRvbid0IGNhbGwgTG9jaygpIGJ1dCBkbyBzdWNjZWVkLgorICovCisKKyAgICBpbnQKK3ZpbV9sb2NrX3NjcmVlbigpCit7CisgICAgcmV0dXJuICFndWkudmltV2luZG93IHx8IGd1aS52aW1XaW5kb3ctPkxvY2soKTsKK30KKworICAgIHZvaWQKK3ZpbV91bmxvY2tfc2NyZWVuKCkKK3sKKyAgICBpZiAoZ3VpLnZpbVdpbmRvdykKKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKK30KKworI2RlZmluZSBSVU5fQkFQUExJQ0FUSU9OX0lOX05FV19USFJFQUQJMAorCisjaWYgUlVOX0JBUFBMSUNBVElPTl9JTl9ORVdfVEhSRUFECisKKyAgICBpbnQzMgorcnVuX3ZpbWFwcCh2b2lkICphcmdzKQoreworICAgIFZpbUFwcCBhcHAoYXBwc2lnKTsKKworICAgIGd1aS52aW1BcHAgPSAmYXBwOworICAgIGFwcC5SdW4oKTsJCQkgICAgLyogUnVuIHVudGlsIFF1aXQoKSBjYWxsZWQgKi8KKworICAgIHJldHVybiAwOworfQorCisjZWxzZQorCisgICAgaW50MzIKK2NhbGxfbWFpbih2b2lkICphcmdzKQoreworICAgIHN0cnVjdCBNYWluQXJncyAqbWEgPSAoTWFpbkFyZ3MgKilhcmdzOworCisgICAgcmV0dXJuIG1haW4obWEtPmFyZ2MsIG1hLT5hcmd2KTsKK30KKyNlbmRpZgorCitleHRlcm4gIkMiIHsKKworLyoKKyAqIFBhcnNlIHRoZSBHVUkgcmVsYXRlZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLiAgQW55IGFyZ3VtZW50cyB1c2VkIGFyZQorICogZGVsZXRlZCBmcm9tIGFyZ3YsIGFuZCAqYXJnYyBpcyBkZWNyZW1lbnRlZCBhY2NvcmRpbmdseS4gIFRoaXMgaXMgY2FsbGVkCisgKiB3aGVuIHZpbSBpcyBzdGFydGVkLCB3aGV0aGVyIG9yIG5vdCB0aGUgR1VJIGhhcyBiZWVuIHN0YXJ0ZWQuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3ByZXBhcmUoCisgICAgaW50CQkqYXJnYywKKyAgICBjaGFyCSoqYXJndikKK3sKKyAgICAvKgorICAgICAqIFdlIGRvbid0IGhhdmUgYW55IGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZm9yIHRoZSBCZU9TIEdVSSB5ZXQsCisgICAgICogYnV0IHRoaXMgaXMgYW4gZXhjZWxsZW50IHBsYWNlIHRvIGNyZWF0ZSBvdXIgQXBwbGljYXRpb24gb2JqZWN0LgorICAgICAqLworICAgIGlmICghZ3VpLnZpbUFwcCkgeworCXRocmVhZF9pbmZvIHRpbmZvOworCWdldF90aHJlYWRfaW5mbyhmaW5kX3RocmVhZChOVUxMKSwgJnRpbmZvKTsKKworCS8qIE1heSBuZWVkIHRoZSBwb3J0IHZlcnkgZWFybHkgb24gdG8gcHJvY2VzcyBSZWZzUmVjZWl2ZWQoKSAqLworCWd1aS52ZGNtcCA9IGNyZWF0ZV9wb3J0KEJfTUFYX1BPUlRfQ09VTlQsICJ2aW0gVkRDTVAiKTsKKworI2lmIFJVTl9CQVBQTElDQVRJT05fSU5fTkVXX1RIUkVBRAorCXRocmVhZF9pZCB0aWQgPSBzcGF3bl90aHJlYWQocnVuX3ZpbWFwcCwgInZpbSBWaW1BcHAiLAorCQkJCQkJdGluZm8ucHJpb3JpdHksIE5VTEwpOworCWlmICh0aWQgPj0gQl9PSykgeworCSAgICByZXN1bWVfdGhyZWFkKHRpZCk7CisJfSBlbHNlIHsKKwkgICAgZ2V0b3V0KDEpOworCX0KKyNlbHNlCisJTWFpbkFyZ3MgbWEgPSB7ICphcmdjLCBhcmd2IH07CisJdGhyZWFkX2lkIHRpZCA9IHNwYXduX3RocmVhZChjYWxsX21haW4sICJ2aW0gbWFpbigpIiwKKwkJCQkJCXRpbmZvLnByaW9yaXR5LCAmbWEpOworCWlmICh0aWQgPj0gQl9PSykgeworCSAgICBWaW1BcHAgYXBwKGFwcHNpZyk7CisKKwkgICAgZ3VpLnZpbUFwcCA9ICZhcHA7CisJICAgIHJlc3VtZV90aHJlYWQodGlkKTsKKwkgICAgLyoKKwkgICAgICogVGhpcyBpcyByYXRoZXIgaG9ycmlibGUuCisJICAgICAqIGNhbGxfbWFpbiB3aWxsIGNhbGwgbWFpbigpIGFnYWluLi4uCisJICAgICAqIFRoZXJlIHdpbGwgYmUgbm8gaW5maW5pdGUgcmVjdXJzaW9uIHNpbmNlCisJICAgICAqIGd1aS52aW1BcHAgaXMgc2V0IG5vdy4KKwkgICAgICovCisJICAgIGFwcC5SdW4oKTsJCQkgICAgLyogUnVuIHVudGlsIFF1aXQoKSBjYWxsZWQgKi8KKwkgICAgLy9mcHJpbnRmKHN0ZGVyciwgImFwcC5SdW4oKSByZXR1cm5lZC4uLlxuIik7CisJICAgIHN0YXR1c190IGR1bW15X2V4aXRjb2RlOworCSAgICAodm9pZCl3YWl0X2Zvcl90aHJlYWQodGlkLCAmZHVtbXlfZXhpdGNvZGUpOworCisJICAgIC8qCisJICAgICAqIFRoaXMgcGF0aCBzaG91bGQgYmUgdGhlIG5vcm1hbCBvbmUgdGFrZW4gdG8gZXhpdCBWaW0uCisJICAgICAqIFRoZSBtYWluKCkgdGhyZWFkIGNhbGxzIG1jaF9leGl0KCkgd2hpY2ggY2FsbHMKKwkgICAgICogZ3VpX21jaF9leGl0KCkgd2hpY2ggdGVybWluYXRlcyBpdHMgdGhyZWFkLgorCSAgICAgKi8KKwkgICAgZXhpdChtYWluX2V4aXRjb2RlKTsKKwl9CisjZW5kaWYKKyAgICB9CisgICAgLyogRG9uJ3QgZm9yaygpIHdoZW4gc3RhcnRpbmcgdGhlIEdVSS4gU3Bhd25lZCB0aHJlYWRzIGFyZSBub3QKKyAgICAgKiBkdXBsaWNhdGVkIHdpdGggYSBmb3JrKCkuIFRoZSByZXN1bHQgaXMgYSBtZXNzLgorICAgICAqLworICAgIGd1aS5kb2ZvcmsgPSBGQUxTRTsKKyAgICAvKgorICAgICAqIFhYWCBUcnkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2Ugd2VyZSBzdGFydGVkIGZyb20KKyAgICAgKiB0aGUgVHJhY2tlciBvciB0aGUgdGVybWluYWwuCisgICAgICogSXQgd291bGQgYmUgbmljZSB0byBoYXZlIHRoaXMgd29yaywgYmVjYXVzZSB0aGUgVHJhY2tlcgorICAgICAqIGZvbGxvd3Mgc3ltbGlua3MsIHNvIGV2ZW4gaWYgeW91IGRvdWJsZS1jbGljayBvbiBndmltLAorICAgICAqIHdoZW4gaXQgaXMgYSBsaW5rIHRvIHZpbSBpdCB3aWxsIHN0aWxsIHBhc3MgYSBjb21tYW5kIG5hbWUKKyAgICAgKiBvZiB2aW0uLi4KKyAgICAgKiBXZSB0cnkgaGVyZSB0byBzZWUgaWYgc3RkaW4gY29tZXMgZnJvbSAvZGV2L251bGwuIElmIHNvLAorICAgICAqIChvciBpZiB0aGVyZSBpcyBhbiBlcnJvciwgd2hpY2ggc2hvdWxkIG5ldmVyIGhhcHBlbikgc3RhcnQgdGhlIEdVSS4KKyAgICAgKiBUaGlzIGRvZXMgdGhlIHdyb25nIHRoaW5nIGZvciB2aW0gLSA8L2Rldi9udWxsLCBhbmQgd2UncmUKKyAgICAgKiB0b28gZWFybHkgdG8gc2VlIHRoZSBjb21tYW5kIGxpbmUgcGFyc2luZy4gVG91Z2guCisgICAgICogT24gdGhlIG90aGVyIGhhbmQsIGl0IHN0YXJ0cyB0aGUgZ3VpIGZvciB2aW0gZmlsZSAmIHdoaWNoIGlzIG5pY2UuCisgICAgICovCisgICAgaWYgKCFpc2F0dHkoMCkpIHsKKwlzdHJ1Y3Qgc3RhdCBzdGF0X3N0ZGluLCBzdGF0X2Rldl9udWxsOworCisJaWYgKGZzdGF0KDAsICZzdGF0X3N0ZGluKSA9PSAtMSB8fAorCSAgICBzdGF0KCIvZGV2L251bGwiLCAmc3RhdF9kZXZfbnVsbCkgPT0gLTEgfHwKKwkgICAgKHN0YXRfc3RkaW4uc3RfZGV2ID09IHN0YXRfZGV2X251bGwuc3RfZGV2ICYmCisJICAgICBzdGF0X3N0ZGluLnN0X2lubyA9PSBzdGF0X2Rldl9udWxsLnN0X2lubykpCisJICAgIGd1aS5zdGFydGluZyA9IFRSVUU7CisgICAgfQorfQorCisvKgorICogQ2hlY2sgaWYgdGhlIEdVSSBjYW4gYmUgc3RhcnRlZC4gIENhbGxlZCBiZWZvcmUgZ3ZpbXJjIGlzIHNvdXJjZWQuCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIGludAorZ3VpX21jaF9pbml0X2NoZWNrKHZvaWQpCit7CisgICAgcmV0dXJuIE9LOwkJLyogVE9ETzogR1VJIGNhbiBhbHdheXMgYmUgc3RhcnRlZD8gKi8KK30KKworLyoKKyAqIEluaXRpYWxpc2UgdGhlIEdVSS4gIENyZWF0ZSBhbGwgdGhlIHdpbmRvd3MsIHNldCB1cCBhbGwgdGhlIGNhbGwtYmFja3MKKyAqIGV0Yy4KKyAqLworICAgIGludAorZ3VpX21jaF9pbml0KCkKK3sKKyAgICBndWkuZGVmX25vcm1fcGl4ZWwgPSBSR0IoMHgwMCwgMHgwMCwgMHgwMCk7CS8vIGJsYWNrCisgICAgZ3VpLmRlZl9iYWNrX3BpeGVsID0gUkdCKDB4RkYsIDB4RkYsIDB4RkYpOwkvLyB3aGl0ZQorICAgIGd1aS5ub3JtX3BpeGVsID0gZ3VpLmRlZl9ub3JtX3BpeGVsOworICAgIGd1aS5iYWNrX3BpeGVsID0gZ3VpLmRlZl9iYWNrX3BpeGVsOworCisgICAgZ3VpLnNjcm9sbGJhcl93aWR0aCA9IChpbnQpIEJfVl9TQ1JPTExfQkFSX1dJRFRIOworICAgIGd1aS5zY3JvbGxiYXJfaGVpZ2h0ID0gKGludCkgQl9IX1NDUk9MTF9CQVJfSEVJR0hUOworI2lmZGVmIEZFQVRfTUVOVQorICAgIGd1aS5tZW51X2hlaWdodCA9IDE5OwkvLyBpbml0aWFsIGd1ZXNzIC0KKwkJCQkvLyBjb3JyZWN0IGZvciBteSBkZWZhdWx0IHNldHRpbmdzCisjZW5kaWYKKyAgICBndWkuYm9yZGVyX29mZnNldCA9IDM7CS8vIGNvb3JkaW5hdGVzIGFyZSBpbnNpZGUgd2luZG93IGJvcmRlcnMKKworICAgIGlmIChndWkudmRjbXAgPCBCX09LKQorCXJldHVybiBGQUlMOworICAgIGdldF9rZXlfbWFwKCZrZXlNYXAsICZrZXlNYXBDaGFycyk7CisKKyAgICBndWkudmltV2luZG93ID0gbmV3IFZpbVdpbmRvdygpOwkvKiBoaWRkZW4gYW5kIGxvY2tlZCAqLworICAgIGlmICghZ3VpLnZpbVdpbmRvdykKKwlyZXR1cm4gRkFJTDsKKworICAgIGd1aS52aW1XaW5kb3ctPlJ1bigpOwkJLyogUnVuKCkgdW5sb2NrcyBidXQgZG9lcyBub3Qgc2hvdyAqLworCisgICAgLyogR2V0IHRoZSBjb2xvcnMgZnJvbSB0aGUgIk5vcm1hbCIgZ3JvdXAgKHNldCBpbiBzeW50YXguYyBvciBpbiBhIHZpbXJjCisgICAgICogZmlsZSkgKi8KKyAgICBzZXRfbm9ybWFsX2NvbG9ycygpOworCisgICAgLyoKKyAgICAgKiBDaGVjayB0aGF0IG5vbmUgb2YgdGhlIGNvbG9ycyBhcmUgdGhlIHNhbWUgYXMgdGhlIGJhY2tncm91bmQgY29sb3IKKyAgICAgKi8KKyAgICBndWlfY2hlY2tfY29sb3JzKCk7CisKKyAgICAvKiBHZXQgdGhlIGNvbG9ycyBmb3IgdGhlIGhpZ2hsaWdodCBncm91cHMgKGd1aV9jaGVja19jb2xvcnMoKSBtaWdodCBoYXZlCisgICAgICogY2hhbmdlZCB0aGVtKSAqLworICAgIGhpZ2hsaWdodF9ndWlfc3RhcnRlZCgpOwkJLyogcmUtaW5pdCBjb2xvcnMgYW5kIGZvbnRzICovCisKKyAgICBndWlfbWNoX25ld19jb2xvcnMoKTsJCS8qIHdpbmRvdyBtdXN0IGV4aXN0IGZvciB0aGlzICovCisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB0aGUgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kIGNvbG9yIGhhcyBiZWVuIGNoYW5nZWQuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX25ld19jb2xvcnMoKQoreworICAgIHJnYl9jb2xvciByZ2IgPSBHVUlfVE9fUkdCKGd1aS5iYWNrX3BpeGVsKTsKKworICAgIGlmIChndWkudmltV2luZG93LT5Mb2NrKCkpIHsKKwlndWkudmltRm9ybS0+U2V0Vmlld0NvbG9yKHJnYik7CisJLy8gRG9lcyB0aGlzIG5vdCBoYXZlIHRvbyBtdWNoIGVmZmVjdCBmb3IgdGhvc2Ugc21hbGwgcmVjdGFuZ2xlcz8KKwlndWkudmltRm9ybS0+SW52YWxpZGF0ZSgpOworCWd1aS52aW1XaW5kb3ctPlVubG9jaygpOworICAgIH0KK30KKworLyoKKyAqIE9wZW4gdGhlIEdVSSB3aW5kb3cgd2hpY2ggd2FzIGNyZWF0ZWQgYnkgYSBjYWxsIHRvIGd1aV9tY2hfaW5pdCgpLgorICovCisgICAgaW50CitndWlfbWNoX29wZW4oKQoreworICAgIGlmIChndWlfd2luX3ggIT0gLTEgJiYgZ3VpX3dpbl95ICE9IC0xKQorCWd1aV9tY2hfc2V0X3dpbnBvcyhndWlfd2luX3gsIGd1aV93aW5feSk7CisKKyAgICAvKiBBY3R1YWxseSBvcGVuIHRoZSB3aW5kb3cgKi8KKyAgICBpZiAoZ3VpLnZpbVdpbmRvdy0+TG9jaygpKSB7CisJZ3VpLnZpbVdpbmRvdy0+U2hvdygpOworCWd1aS52aW1XaW5kb3ctPlVubG9jaygpOworCisjaWYgVVNFX1RIUkVBRF9GT1JfSU5QVVRfV0lUSF9USU1FT1VUCisJLyogS2lsbCB0aGUgdGhyZWFkIHRoYXQgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIGZvciB0aGUgVGVybWluYWwgKi8KKwliZW9zX2NsZWFudXBfcmVhZF90aHJlYWQoKTsKKyNlbmRpZgorCisJcmV0dXJuIE9LOworICAgIH0KKworICAgIHJldHVybiBGQUlMOworfQorCisgICAgdm9pZAorZ3VpX21jaF9leGl0KGludCB2aW1fZXhpdGNvZGUpCit7CisgICAgaWYgKGd1aS52aW1XaW5kb3cpIHsKKwl0aHJlYWRfaWQgdGlkID0gZ3VpLnZpbVdpbmRvdy0+VGhyZWFkKCk7CisJZ3VpLnZpbVdpbmRvdy0+TG9jaygpOworCWd1aS52aW1XaW5kb3ctPlF1aXQoKTsKKwkvKiBXYWl0IHVudGlsIGl0IGlzIHRydWVseSBnb25lICovCisJaW50MzIgZXhpdGNvZGU7CisJd2FpdF9mb3JfdGhyZWFkKHRpZCwgJmV4aXRjb2RlKTsKKyAgICB9CisgICAgZGVsZXRlX3BvcnQoZ3VpLnZkY21wKTsKKyNpZiAhUlVOX0JBUFBMSUNBVElPTl9JTl9ORVdfVEhSRUFECisgICAgLyoKKyAgICAgKiBXZSBhcmUgaW4gdGhlIG1haW4oKSB0aHJlYWQgLSBxdWl0IHRoZSBBcHAgdGhyZWFkIGFuZAorICAgICAqIHF1aXQgb3Vyc2VsdmVzIChwYXNzaW5nIG9uIHRoZSBleGl0Y29kZSkuIFVzZSBhIGdsb2JhbCBzaW5jZSB0aGUKKyAgICAgKiB2YWx1ZSBmcm9tIGV4aXRfdGhyZWFkKCkgaXMgb25seSB1c2VkIGlmIHdhaXRfZm9yX3RocmVhZCgpIGlzCisgICAgICogY2FsbGVkIGluIHRpbWUgKHJhY2UgY29uZGl0aW9uKS4KKyAgICAgKi8KKyNlbmRpZgorICAgIGlmIChndWkudmltQXBwKSB7CisJVmltVGV4dEFyZWFWaWV3OjpndWlCbGFua01vdXNlKGZhbHNlKTsKKworCW1haW5fZXhpdGNvZGUgPSB2aW1fZXhpdGNvZGU7CisjaWYgUlVOX0JBUFBMSUNBVElPTl9JTl9ORVdfVEhSRUFECisJdGhyZWFkX2lkIHRpZCA9IGd1aS52aW1BcHAtPlRocmVhZCgpOworCWludDMyIGV4aXRjb2RlOworCWd1aS52aW1BcHAtPkxvY2soKTsKKwlndWkudmltQXBwLT5RdWl0KCk7CisJZ3VpLnZpbUFwcC0+VW5sb2NrKCk7CisJd2FpdF9mb3JfdGhyZWFkKHRpZCwgJmV4aXRjb2RlKTsKKyNlbHNlCisJZ3VpLnZpbUFwcC0+TG9jaygpOworCWd1aS52aW1BcHAtPlF1aXQoKTsKKwlndWkudmltQXBwLT5VbmxvY2soKTsKKwkvKiBzdWljaWRlICovCisJZXhpdF90aHJlYWQodmltX2V4aXRjb2RlKTsKKyNlbmRpZgorICAgIH0KKyAgICAvKiBJZiB3ZSBhcmUgc29tZWhvdyBzdGlsbCBoZXJlLCBsZXQgbWNoX2V4aXQoKSBoYW5kbGUgdGhpbmdzLiAqLworfQorCisvKgorICogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSB3aW5kb3cuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfZ2V0X3dpbnBvcyhpbnQgKngsIGludCAqeSkKK3sKKyAgICAvKiBUT0RPICovCisgICAgcmV0dXJuIEZBSUw7Cit9CisKKy8qCisgKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHdpbmRvdyB0byB0aGUgZ2l2ZW4KKyAqIGNvb3JkaW5hdGVzLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfd2lucG9zKGludCB4LCBpbnQgeSkKK3sKKyAgICAvKiBUT0RPICovCit9CisKKy8qCisgKiBTZXQgdGhlIHNpemUgb2YgdGhlIHdpbmRvdyB0byB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBpbiBwaXhlbHMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9zaGVsbHNpemUoCisgICAgaW50CQl3aWR0aCwKKyAgICBpbnQJCWhlaWdodCwKKyAgICBpbnQJCW1pbl93aWR0aCwKKyAgICBpbnQJCW1pbl9oZWlnaHQsCisgICAgaW50CQliYXNlX3dpZHRoLAorICAgIGludAkJYmFzZV9oZWlnaHQpCit7CisgICAgLyoKKyAgICAgKiBXZSBhcmUgYmFzaWNhbGx5IGdpdmVuIHRoZSBzaXplIG9mIHRoZSBWaW1Gb3JtLCBpZiBJIHVuZGVyc3RhbmQKKyAgICAgKiBjb3JyZWN0bHkuIFNpbmNlIGl0IGZpbGxzIHRoZSB3aW5kb3cgY29tcGxldGVseSwgdGhpcyB3aWxsIGFsc28KKyAgICAgKiBiZSB0aGUgc2l6ZSBvZiB0aGUgd2luZG93LgorICAgICAqLworICAgIGlmIChndWkudmltV2luZG93LT5Mb2NrKCkpIHsKKwlndWkudmltV2luZG93LT5SZXNpemVUbyh3aWR0aCAtIFBFTl9XSURUSCwgaGVpZ2h0IC0gUEVOX1dJRFRIKTsKKworCS8qIHNldCBzaXplIGxpbWl0cyAqLworCWZsb2F0IG1pbldpZHRoLCBtYXhXaWR0aCwgbWluSGVpZ2h0LCBtYXhIZWlnaHQ7CisKKwlndWkudmltV2luZG93LT5HZXRTaXplTGltaXRzKCZtaW5XaWR0aCwgJm1heFdpZHRoLAorCQkJCSAgICAgJm1pbkhlaWdodCwgJm1heEhlaWdodCk7CisJZ3VpLnZpbVdpbmRvdy0+U2V0U2l6ZUxpbWl0cyhtaW5fd2lkdGgsIG1heFdpZHRoLAorCQkJCSAgICAgbWluX2hlaWdodCwgbWF4SGVpZ2h0KTsKKworI2lmIEhBVkVfUjNfT1JfTEFURVIKKwkvKgorCSAqIFNldCB0aGUgcmVzaXppbmcgYWxpZ25tZW50IGRlcGVuZGluZyBvbiBmb250IHNpemUuCisJICogWFhYIFRoaXMgaXMgdW50ZXN0ZWQsIHNpbmNlIEkgZG9uJ3QgaGF2ZSBSMyB5ZXQuCisJICovCisJU2V0V2luZG93QWxpZ25tZW50KAorCSAgICBCX1BJWEVMX0FMSUdOTUVOVCwJCS8vIHdpbmRvd19hbGlnbm1lbnQgbW9kZSwKKwkgICAgMSwJCQkJLy8gaW50MzIgaCwKKwkgICAgMCwJCQkJLy8gaW50MzIgaE9mZnNldCA9IDAsCisJICAgIGd1aS5jaGFyX3dpZHRoLAkJLy8gaW50MzIgd2lkdGggPSAwLAorCSAgICBiYXNlX3dpZHRoLAkJCS8vIGludDMyIHdpZHRoT2Zmc2V0ID0gMCwKKwkgICAgMSwJCQkJLy8gaW50MzIgdiA9IDAsCisJICAgIDAsCQkJCS8vIGludDMyIHZPZmZzZXQgPSAwLAorCSAgICBndWkuY2hhcl9oZWlnaHQsCQkvLyBpbnQzMiBoZWlnaHQgPSAwLAorCSAgICBiYXNlX2hlaWdodAkJCS8vIGludDMyIGhlaWdodE9mZnNldCA9IDAKKwkpOworI2Vsc2UKKwkvKiBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBiYXNlX3t3aWR0aCxoZWlnaHR9LiAqLworI2VuZGlmCisKKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKyAgICB9Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2dldF9zY3JlZW5fZGltZW5zaW9ucygKKyAgICBpbnQJCSpzY3JlZW5fdywKKyAgICBpbnQJCSpzY3JlZW5faCkKK3sKKyAgICBCUmVjdCBmcmFtZTsKKworICAgIHsKKwlCU2NyZWVuIHNjcmVlbihndWkudmltV2luZG93KTsKKworCWlmIChzY3JlZW4uSXNWYWxpZCgpKSB7CisJICAgIGZyYW1lID0gc2NyZWVuLkZyYW1lKCk7CisJfSBlbHNlIHsKKwkgICAgZnJhbWUucmlnaHQgPSA2NDA7CisJICAgIGZyYW1lLmJvdHRvbSA9IDQ4MDsKKwl9CisgICAgfQorCisgICAgLyogWFhYIGFwcHJveGltYXRpb25zLi4uICovCisgICAgKnNjcmVlbl93ID0gKGludCkgZnJhbWUucmlnaHQgLSAyICogZ3VpLnNjcm9sbGJhcl93aWR0aCAtIDIwOworICAgICpzY3JlZW5faCA9IChpbnQpIGZyYW1lLmJvdHRvbSAtIGd1aS5zY3JvbGxiYXJfaGVpZ2h0CisjaWZkZWYgRkVBVF9NRU5VCisJLSBndWkubWVudV9oZWlnaHQKKyNlbmRpZgorCS0gMzA7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF90ZXh0X2FyZWFfcG9zKAorICAgIGludAkJeCwKKyAgICBpbnQJCXksCisgICAgaW50CQl3LAorICAgIGludAkJaCkKK3sKKyAgICBpZiAoIWd1aS52aW1UZXh0QXJlYSkKKwlyZXR1cm47CisKKyAgICBpZiAoZ3VpLnZpbVdpbmRvdy0+TG9jaygpKSB7CisJZ3VpLnZpbVRleHRBcmVhLT5Nb3ZlVG8oeCwgeSk7CisJZ3VpLnZpbVRleHRBcmVhLT5SZXNpemVUbyh3IC0gUEVOX1dJRFRILCBoIC0gUEVOX1dJRFRIKTsKKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKyAgICB9Cit9CisKKworLyoKKyAqIFNjcm9sbGJhciBzdHVmZjoKKyAqLworCisgICAgdm9pZAorZ3VpX21jaF9lbmFibGVfc2Nyb2xsYmFyKAorICAgIHNjcm9sbGJhcl9UCSpzYiwKKyAgICBpbnQJCWZsYWcpCit7CisgICAgVmltU2Nyb2xsQmFyICp2c2IgPSBzYi0+aWQ7CisgICAgaWYgKGd1aS52aW1XaW5kb3ctPkxvY2soKSkgeworCS8qCisJICogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBpZGVtcG90ZW50LCBidXQgU2hvdygpL0hpZGUoKQorCSAqIGlzIG5vdC4gVGhlcmVmb3JlIHdlIHRlc3QgaWYgdGhleSBhcmUgbmVlZGVkLgorCSAqLworCWlmIChmbGFnKSB7CisJICAgIGlmICh2c2ItPklzSGlkZGVuKCkpIHsKKwkJdnNiLT5TaG93KCk7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBpZiAoIXZzYi0+SXNIaWRkZW4oKSkgeworCQl2c2ItPkhpZGUoKTsKKwkgICAgfQorCX0KKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKyAgICB9Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIoCisgICAgc2Nyb2xsYmFyX1QgKnNiLAorICAgIGludAkJdmFsLAorICAgIGludAkJc2l6ZSwKKyAgICBpbnQJCW1heCkKK3sKKyAgICBpZiAoZ3VpLnZpbVdpbmRvdy0+TG9jaygpKSB7CisJVmltU2Nyb2xsQmFyICpzID0gc2ItPmlkOworCWlmIChtYXggPT0gMCkgeworCSAgICBzLT5TZXRWYWx1ZSgwKTsKKwkgICAgcy0+U2V0UmFuZ2UoMC4wLCAwLjApOworCX0gZWxzZSB7CisJICAgIHMtPlNldFByb3BvcnRpb24oKGZsb2F0KXNpemUgLyAobWF4ICsgMS4wKSk7CisJICAgIHMtPlNldFN0ZXBzKDEuMCwgc2l6ZSA+IDUgPyBzaXplIC0gMiA6IHNpemUpOworI2lmbmRlZiBTQ1JPTExfUEFTVF9FTkQJCS8vIHJlYWxseSBvbmx5IGRlZmluZWQgaW4gZ3VpLmMuLi4KKwkgICAgbWF4ID0gbWF4ICsgMSAtIHNpemU7CisjZW5kaWYKKwkgICAgaWYgKG1heCA8IHMtPlZhbHVlKCkpIHsKKwkJLyoKKwkJICogSWYgdGhlIG5ldyBtYXhpbXVtIGlzIGxvd2VyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUsCisJCSAqIHNldHRpbmcgaXQgd291bGQgY2F1c2UgdGhlIHZhbHVlIHRvIGJlIGNsaXBwZWQgYW5kCisJCSAqIHRoZXJlZm9yZSBhIFZhbHVlQ2hhbmdlZCgpIGNhbGwuCisJCSAqIFdlIGF2b2lkIHRoaXMgYnkgc2V0dGluZyB0aGUgdmFsdWUgZmlyc3QsIGJlY2F1c2UKKwkJICogaXQgcHJlc3VtYWJseSBpcyA8PSBtYXguCisJCSAqLworCQlzLT5TZXRWYWx1ZSh2YWwpOworCQlzLT5TZXRSYW5nZSgwLjAsIG1heCk7CisJICAgIH0gZWxzZSB7CisJCS8qCisJCSAqIEluIHRoZSBvdGhlciBjYXNlLCBzZXQgdGhlIHJhbmdlIGZpcnN0LCBzaW5jZSB0aGUKKwkJICogbmV3IHZhbHVlIG1pZ2h0IGJlIGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50IG1heC4KKwkJICovCisJCXMtPlNldFJhbmdlKDAuMCwgbWF4KTsKKwkJcy0+U2V0VmFsdWUodmFsKTsKKwkgICAgfQorCX0KKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKyAgICB9Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF9zY3JvbGxiYXJfcG9zKAorICAgIHNjcm9sbGJhcl9UICpzYiwKKyAgICBpbnQJCXgsCisgICAgaW50CQl5LAorICAgIGludAkJdywKKyAgICBpbnQJCWgpCit7CisgICAgaWYgKGd1aS52aW1XaW5kb3ctPkxvY2soKSkgeworCVZpbVNjcm9sbEJhciAqdnNiID0gc2ItPmlkOworCXZzYi0+TW92ZVRvKHgsIHkpOworCXZzYi0+UmVzaXplVG8odyAtIFBFTl9XSURUSCwgaCAtIFBFTl9XSURUSCk7CisJZ3VpLnZpbVdpbmRvdy0+VW5sb2NrKCk7CisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX21jaF9jcmVhdGVfc2Nyb2xsYmFyKAorICAgIHNjcm9sbGJhcl9UICpzYiwKKyAgICBpbnQJCW9yaWVudCkJCS8qIFNCQVJfVkVSVCBvciBTQkFSX0hPUklaICovCit7CisgICAgb3JpZW50YXRpb24gcG9zdHVyZSA9CisJKG9yaWVudCA9PSBTQkFSX0hPUklaKSA/IEJfSE9SSVpPTlRBTCA6IEJfVkVSVElDQUw7CisKKyAgICBWaW1TY3JvbGxCYXIgKnZzYiA9IHNiLT5pZCA9IG5ldyBWaW1TY3JvbGxCYXIoc2IsIHBvc3R1cmUpOworICAgIGlmIChndWkudmltV2luZG93LT5Mb2NrKCkpIHsKKwl2c2ItPlNldFRhcmdldChndWkudmltVGV4dEFyZWEpOworCXZzYi0+SGlkZSgpOworCWd1aS52aW1Gb3JtLT5BZGRDaGlsZCh2c2IpOworCWd1aS52aW1XaW5kb3ctPlVubG9jaygpOworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2d1aV9tY2hfZGVzdHJveV9zY3JvbGxiYXIoCisgICAgc2Nyb2xsYmFyX1QJKnNiKQoreworICAgIGlmIChndWkudmltV2luZG93LT5Mb2NrKCkpIHsKKwlzYi0+aWQtPlJlbW92ZVNlbGYoKTsKKwlkZWxldGUgc2ItPmlkOworCWd1aS52aW1XaW5kb3ctPlVubG9jaygpOworICAgIH0KK30KKyNlbmRpZgorCisvKgorICogQ3Vyc29yIGJsaW5rIGZ1bmN0aW9ucy4KKyAqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHN0YXRlIG1hY2hpbmU6CisgKiBCTElOS19OT05FCW5vdCBibGlua2luZyBhdCBhbGwKKyAqIEJMSU5LX09GRglibGlua2luZywgY3Vyc29yIGlzIG5vdCBzaG93bgorICogQkxJTktfT04JYmxpbmtpbmcsIGN1cnNvciBpcyBzaG93bgorICovCisKKyNkZWZpbmUgQkxJTktfTk9ORSAgMAorI2RlZmluZSBCTElOS19PRkYgICAxCisjZGVmaW5lIEJMSU5LX09OICAgIDIKKworc3RhdGljIGludAkJYmxpbmtfc3RhdGUgPSBCTElOS19OT05FOworc3RhdGljIGxvbmdfdQkJYmxpbmtfd2FpdHRpbWUgPSA3MDA7CitzdGF0aWMgbG9uZ191CQlibGlua19vbnRpbWUgPSA0MDA7CitzdGF0aWMgbG9uZ191CQlibGlua19vZmZ0aW1lID0gMjUwOworc3RhdGljIGludAlibGlua190aW1lciA9IDA7CisKKyAgICB2b2lkCitndWlfbWNoX3NldF9ibGlua2luZygKKyAgICBsb25nICAgIHdhaXR0aW1lLAorICAgIGxvbmcgICAgb24sCisgICAgbG9uZyAgICBvZmYpCit7CisJLyogVE9ETyAqLworICAgIGJsaW5rX3dhaXR0aW1lID0gd2FpdHRpbWU7CisgICAgYmxpbmtfb250aW1lID0gb247CisgICAgYmxpbmtfb2ZmdGltZSA9IG9mZjsKK30KKworLyoKKyAqIFN0b3AgdGhlIGN1cnNvciBibGlua2luZy4gIFNob3cgdGhlIGN1cnNvciBpZiBpdCB3YXNuJ3Qgc2hvd24uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3N0b3BfYmxpbmsoKQoreworCS8qIFRPRE8gKi8KKyAgICBpZiAoYmxpbmtfdGltZXIgIT0gMCkKKyAgICB7CisJLy9YdFJlbW92ZVRpbWVPdXQoYmxpbmtfdGltZXIpOworCWJsaW5rX3RpbWVyID0gMDsKKyAgICB9CisgICAgaWYgKGJsaW5rX3N0YXRlID09IEJMSU5LX09GRikKKwlndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisgICAgYmxpbmtfc3RhdGUgPSBCTElOS19OT05FOworfQorCisvKgorICogU3RhcnQgdGhlIGN1cnNvciBibGlua2luZy4gIElmIGl0IHdhcyBhbHJlYWR5IGJsaW5raW5nLCB0aGlzIHJlc3RhcnRzIHRoZQorICogd2FpdGluZyB0aW1lIGFuZCBzaG93cyB0aGUgY3Vyc29yLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zdGFydF9ibGluaygpCit7CisJLyogVE9ETyAqLworICAgIGlmIChibGlua190aW1lciAhPSAwKQorCTsvL1h0UmVtb3ZlVGltZU91dChibGlua190aW1lcik7CisgICAgLyogT25seSBzd2l0Y2ggYmxpbmtpbmcgb24gaWYgbm9uZSBvZiB0aGUgdGltZXMgaXMgemVybyAqLworICAgIGlmIChibGlua193YWl0dGltZSAmJiBibGlua19vbnRpbWUgJiYgYmxpbmtfb2ZmdGltZSAmJiBndWkuaW5fZm9jdXMpCisgICAgeworCWJsaW5rX3RpbWVyID0gMTsgLy9YdEFwcEFkZFRpbWVPdXQoYXBwX2NvbnRleHQsIGJsaW5rX3dhaXR0aW1lLAorCWJsaW5rX3N0YXRlID0gQkxJTktfT047CisJZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworICAgIH0KK30KKworLyoKKyAqIEluaXRpYWxpc2UgdmltIHRvIHVzZSB0aGUgZm9udCB3aXRoIHRoZSBnaXZlbiBuYW1lLglSZXR1cm4gRkFJTCBpZiB0aGUgZm9udAorICogY291bGQgbm90IGJlIGxvYWRlZCwgT0sgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitndWlfbWNoX2luaXRfZm9udCgKKyAgICBjaGFyX3UJCSpmb250X25hbWUsCisgICAgaW50CQkJZm9udHNldCkKK3sKKyAgICBpZiAoZ3VpLnZpbVdpbmRvdy0+TG9jaygpKQorICAgIHsKKwlpbnQgcmMgPSBndWkudmltVGV4dEFyZWEtPm1jaEluaXRGb250KGZvbnRfbmFtZSk7CisJZ3VpLnZpbVdpbmRvdy0+VW5sb2NrKCk7CisKKwlyZXR1cm4gcmM7CisgICAgfQorCisgICAgcmV0dXJuIEZBSUw7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfYWRqdXN0X2NoYXJzaXplKCkKK3sKKyAgICByZXR1cm4gRkFJTDsKK30KKworICAgIEd1aUZvbnQKK2d1aV9tY2hfZ2V0X2ZvbnQoCisgICAgY2hhcl91CQkqbmFtZSwKKyAgICBpbnQJCQlnaXZlRXJyb3JJZk1pc3NpbmcpCit7CisgICAgVmltRm9udAkJKmZvbnQgPSAwOworICAgIHN0YXRpYyBWaW1Gb250ICpmb250TGlzdCA9IE5VTEw7CisKKyAgICBpZiAoIWd1aS5pbl91c2UpCQkgICAgLyogY2FuJ3QgZG8gdGhpcyB3aGVuIEdVSSBub3QgcnVubmluZyAqLworCXJldHVybiBOT0ZPTlQ7CisKKyAgICBpZiAoIW5hbWUpCisJbmFtZSA9IChjaGFyX3UgKikiYmVfZml4ZWRfZm9udCI7CisKKyAgICBWaW1Gb250ICpmbHA7CisgICAgZm9yIChmbHAgPSBmb250TGlzdDsgZmxwOyBmbHAgPSBmbHAtPm5leHQpIHsKKwlpZiAoU1RSQ01QKG5hbWUsIGZscC0+bmFtZSkgPT0gMCkgeworCSAgICBmbHAtPnJlZmNvdW50Kys7CisJICAgIHJldHVybiAoR3VpRm9udClmbHA7CisJfQorICAgIH0KKworICAgIGZvbnQgPSBuZXcgVmltRm9udChiZV9maXhlZF9mb250KTsKKworICAgIC8qIFNldCBzb21lIHVuaXZlcnNhbCBmZWF0dXJlczogKi8KKyAgICBmb250LT5TZXRTcGFjaW5nKEJfRklYRURfU1BBQ0lORyk7CisgICAgZm9udC0+U2V0RW5jb2RpbmcoQl9JU09fODg1OV8xKTsKKworICAgIC8qIFJlbWVtYmVyIGZvbnQgZm9yIGxhdGVyIHVzZSAqLworICAgIGZvbnQtPm5hbWUgPSB2aW1fc3Ryc2F2ZShuYW1lKTsKKyAgICBmb250LT5uZXh0ID0gZm9udExpc3Q7CisgICAgZm9udExpc3QgPSBmb250OworCisgICAgZm9udF9mYW1pbHkgZmFtaWx5OworICAgIGZvbnRfc3R5bGUgc3R5bGU7CisgICAgaW50IHNpemU7CisgICAgaW50IGxlbjsKKyAgICBjaGFyX3UgKmVuZDsKKworI2lmZGVmIG5ldmVyCisgICAgLy8gVGhpcyBsZWFkcyB0byBTRUdWL0JVUyBvbiBSNCsKKyAgICAvLyBSZXBsYWNlIHVuZGVyc2NvcmVzIHdpdGggc3BhY2VzLCBhbmQgSSBjYW4ndCBzZWUgd2h5ID8KKyAgICAvLyByaWNoYXJkQHdoaXRlcXVlZW4uY29tIGp1bCA5OQorICAgIHdoaWxlIChlbmQgPSAoY2hhcl91ICopc3RyY2hyKChjaGFyICopbmFtZSwgJ18nKSkKKwkqZW5kID0gJyAnOworI2VuZGlmCisgICAgLyoKKyAgICAgKiAgUGFyc2UgZm9udCBuYW1lcyBhcyBGYW1pbHkvU3R5bGUvU2l6ZS4KKyAgICAgKiAgT24gZXJyb3JzLCBqdXN0IGtlZXAgdGhlIGJlX2ZpeGVkX2ZvbnQuCisgICAgICovCisgICAgZW5kID0gKGNoYXJfdSAqKXN0cmNocigoY2hhciAqKW5hbWUsICcvJyk7CisgICAgaWYgKCFlbmQpCisJZ290byBlcnJvcjsKKyAgICBzdHJuY3B5KGZhbWlseSwgKGNoYXIgKiluYW1lLCBsZW4gPSBlbmQgLSBuYW1lKTsKKyAgICBmYW1pbHlbbGVuXSA9ICdcMCc7CisKKyAgICBuYW1lID0gZW5kICsgMTsKKyAgICBlbmQgPSAoY2hhcl91ICopc3RyY2hyKChjaGFyICopbmFtZSwgJy8nKTsKKyAgICBpZiAoIWVuZCkKKwlnb3RvIGVycm9yOworICAgIHN0cm5jcHkoc3R5bGUsIChjaGFyICopbmFtZSwgbGVuID0gZW5kIC0gbmFtZSk7CisgICAgc3R5bGVbbGVuXSA9ICdcMCc7CisKKyAgICBuYW1lID0gZW5kICsgMTsKKyAgICBzaXplID0gYXRvaSgoY2hhciAqKW5hbWUpOworICAgIGlmIChzaXplIDw9IDApCisJZ290byBlcnJvcjsKKworICAgIGZvbnQtPlNldEZhbWlseUFuZFN0eWxlKGZhbWlseSwgc3R5bGUpOworICAgIGZvbnQtPlNldFNpemUoc2l6ZSk7CisgICAgZm9udC0+U2V0U3BhY2luZyhCX0ZJWEVEX1NQQUNJTkcpOworICAgIGZvbnQtPlNldEVuY29kaW5nKEJfSVNPXzg4NTlfMSk7CisgICAgLy9mb250LT5QcmludFRvU3RyZWFtKCk7CisKKyAgICByZXR1cm4gKEd1aUZvbnQpZm9udDsKKworZXJyb3I6CisgICAgaWYgKGdpdmVFcnJvcklmTWlzc2luZykKKwlFTVNHMigiKGZlMCkgVW5rbm93biBmb250OiAlcyIsIG5hbWUpOworCisgICAgcmV0dXJuIChHdWlGb250KWZvbnQ7Cit9CisKKy8qCisgKiBTZXQgdGhlIGN1cnJlbnQgdGV4dCBmb250LgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZm9udCgKKyAgICBHdWlGb250CWZvbnQpCit7CisgICAgaWYgKGd1aS52aW1XaW5kb3ctPkxvY2soKSkgeworCVZpbUZvbnQgKnZmID0gKFZpbUZvbnQgKilmb250OworCisJZ3VpLnZpbVRleHRBcmVhLT5TZXRGb250KHZmKTsKKworCWd1aS5jaGFyX3dpZHRoID0gKGludCkgdmYtPlN0cmluZ1dpZHRoKCJuIik7CisJZm9udF9oZWlnaHQgZmg7CisJdmYtPkdldEhlaWdodCgmZmgpOworCWd1aS5jaGFyX2hlaWdodCA9IChpbnQpKGZoLmFzY2VudCArIDAuOTk5OSkKKwkJICAgICsgKGludCkoZmguZGVzY2VudCArIDAuOTk5OSkgKyAoaW50KShmaC5sZWFkaW5nICsgMC45OTk5KTsKKwlndWkuY2hhcl9hc2NlbnQgPSAoaW50KShmaC5hc2NlbnQgKyAwLjk5OTkpOworCisJZ3VpLnZpbVdpbmRvdy0+VW5sb2NrKCk7CisgICAgfQorfQorCisjaWYgMCAvKiBub3QgdXNlZCAqLworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSB0d28gZm9udHMgZ2l2ZW4gYXJlIGVxdWl2YWxlbnQuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfc2FtZV9mb250KAorICAgIEd1aUZvbnQJZjEsCisgICAgR3VpRm9udAlmMikKK3sKKyAgICBWaW1Gb250ICp2ZjEgPSAoVmltRm9udCAqKWYxOworICAgIFZpbUZvbnQgKnZmMiA9IChWaW1Gb250ICopZjI7CisKKyAgICByZXR1cm4gZjEgPT0gZjIgfHwKKwkgICAgKHZmMS0+RmFtaWx5QW5kU3R5bGUoKSA9PSB2ZjItPkZhbWlseUFuZFN0eWxlKCkgJiYKKwkgICAgIHZmMS0+U2l6ZSgpID09IHZmMi0+U2l6ZSgpKTsKK30KKyNlbmRpZgorCisvKiBYWFggVE9ETyBUaGlzIGlzIGFwcGFyZW50bHkgbmV2ZXIgY2FsbGVkLi4uICovCisgICAgdm9pZAorZ3VpX21jaF9mcmVlX2ZvbnQoCisgICAgR3VpRm9udAlmb250KQoreworICAgIFZpbUZvbnQgKmYgPSAoVmltRm9udCAqKWZvbnQ7CisgICAgaWYgKC0tZi0+cmVmY291bnQgPD0gMCkgeworCWlmIChmLT5yZWZjb3VudCA8IDApCisJICAgIGZwcmludGYoc3RkZXJyLCAiVmltRm9udDogcmVmY291bnQgPCAwXG4iKTsKKwlkZWxldGUgZjsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgaW50CitoZXhfZGlnaXQoaW50IGMpCit7CisgICAgaWYgKGlzZGlnaXQoYykpCisJcmV0dXJuIGMgLSAnMCc7CisgICAgYyA9IFRPTE9XRVJfQVNDKGMpOworICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKKwlyZXR1cm4gYyAtICdhJyArIDEwOworICAgIHJldHVybiAtMTAwMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gbGlmdGVkIGZyb20gZ3VpX3czMi5jIGFuZCBleHRlbmRlZCBhIGJpdC4KKyAqCisgKiBSZXR1cm4gdGhlIFBpeGVsIHZhbHVlIChjb2xvcikgZm9yIHRoZSBnaXZlbiBjb2xvciBuYW1lLgorICogUmV0dXJuIElOVkFMQ09MT1IgZm9yIGVycm9yLgorICovCisgICAgZ3VpY29sb3JfVAorZ3VpX21jaF9nZXRfY29sb3IoCisgICAgY2hhcl91CSpuYW1lKQoreworICAgIHR5cGVkZWYgc3RydWN0IEd1aUNvbG91clRhYmxlCisgICAgeworCWNoYXIJICAgICpuYW1lOworCWd1aWNvbG9yX1QgICAgIGNvbG91cjsKKyAgICB9IEd1aUNvbG91clRhYmxlOworCisjZGVmaW5lIE5TVEFUSUNfQ09MT1VSUwkJMzIKKyNkZWZpbmUgTkRZTkFNSUNfQ09MT1VSUwkzMworI2RlZmluZSBOQ09MT1VSUwkJKE5TVEFUSUNfQ09MT1VSUyArIE5EWU5BTUlDX0NPTE9VUlMpCisKKyAgICBzdGF0aWMgR3VpQ29sb3VyVGFibGUgdGFibGVbTkNPTE9VUlNdID0KKyAgICB7CisJeyJCbGFjayIsCSAgICBSR0IoMHgwMCwgMHgwMCwgMHgwMCl9LAorCXsiRGFya0dyYXkiLAkgICAgUkdCKDB4ODAsIDB4ODAsIDB4ODApfSwKKwl7IkRhcmtHcmV5IiwJICAgIFJHQigweDgwLCAweDgwLCAweDgwKX0sCisJeyJHcmF5IiwJICAgIFJHQigweEMwLCAweEMwLCAweEMwKX0sCisJeyJHcmV5IiwJICAgIFJHQigweEMwLCAweEMwLCAweEMwKX0sCisJeyJMaWdodEdyYXkiLAkgICAgUkdCKDB4RDMsIDB4RDMsIDB4RDMpfSwKKwl7IkxpZ2h0R3JleSIsCSAgICBSR0IoMHhEMywgMHhEMywgMHhEMyl9LAorCXsiV2hpdGUiLAkgICAgUkdCKDB4RkYsIDB4RkYsIDB4RkYpfSwKKwl7IkRhcmtSZWQiLAkgICAgUkdCKDB4ODAsIDB4MDAsIDB4MDApfSwKKwl7IlJlZCIsCQkgICAgUkdCKDB4RkYsIDB4MDAsIDB4MDApfSwKKwl7IkxpZ2h0UmVkIiwJICAgIFJHQigweEZGLCAweEEwLCAweEEwKX0sCisJeyJEYXJrQmx1ZSIsCSAgICBSR0IoMHgwMCwgMHgwMCwgMHg4MCl9LAorCXsiQmx1ZSIsCSAgICBSR0IoMHgwMCwgMHgwMCwgMHhGRil9LAorCXsiTGlnaHRCbHVlIiwJICAgIFJHQigweEEwLCAweEEwLCAweEZGKX0sCisJeyJEYXJrR3JlZW4iLAkgICAgUkdCKDB4MDAsIDB4ODAsIDB4MDApfSwKKwl7IkdyZWVuIiwJICAgIFJHQigweDAwLCAweEZGLCAweDAwKX0sCisJeyJMaWdodEdyZWVuIiwJICAgIFJHQigweEEwLCAweEZGLCAweEEwKX0sCisJeyJEYXJrQ3lhbiIsCSAgICBSR0IoMHgwMCwgMHg4MCwgMHg4MCl9LAorCXsiQ3lhbiIsCSAgICBSR0IoMHgwMCwgMHhGRiwgMHhGRil9LAorCXsiTGlnaHRDeWFuIiwJICAgIFJHQigweEEwLCAweEZGLCAweEZGKX0sCisJeyJEYXJrTWFnZW50YSIsCSAgICBSR0IoMHg4MCwgMHgwMCwgMHg4MCl9LAorCXsiTWFnZW50YSIsCSAgICBSR0IoMHhGRiwgMHgwMCwgMHhGRil9LAorCXsiTGlnaHRNYWdlbnRhIiwgICAgUkdCKDB4RkYsIDB4QTAsIDB4RkYpfSwKKwl7IkJyb3duIiwJICAgIFJHQigweDgwLCAweDQwLCAweDQwKX0sCisJeyJZZWxsb3ciLAkgICAgUkdCKDB4RkYsIDB4RkYsIDB4MDApfSwKKwl7IkxpZ2h0WWVsbG93IiwJICAgIFJHQigweEZGLCAweEZGLCAweEEwKX0sCisJeyJEYXJrWWVsbG93IiwJICAgIFJHQigweEJCLCAweEJCLCAweDAwKX0sCisJeyJTZWFHcmVlbiIsCSAgICBSR0IoMHgyRSwgMHg4QiwgMHg1Nyl9LAorCXsiT3JhbmdlIiwJICAgIFJHQigweEZGLCAweEE1LCAweDAwKX0sCisJeyJQdXJwbGUiLAkgICAgUkdCKDB4QTAsIDB4MjAsIDB4RjApfSwKKwl7IlNsYXRlQmx1ZSIsCSAgICBSR0IoMHg2QSwgMHg1QSwgMHhDRCl9LAorCXsiVmlvbGV0IiwJICAgIFJHQigweEVFLCAweDgyLCAweEVFKX0sCisgICAgfTsKKworICAgIHN0YXRpYyBpbnQgZW5kQ29sb3VyID0gTlNUQVRJQ19DT0xPVVJTOworICAgIHN0YXRpYyBpbnQgbmV3Q29sb3VyID0gTlNUQVRJQ19DT0xPVVJTOworCisgICAgaW50CQkgICAgciwgZywgYjsKKyAgICBpbnQJCSAgICBpOworCisgICAgaWYgKG5hbWVbMF0gPT0gJyMnICYmIFNUUkxFTihuYW1lKSA9PSA3KQorICAgIHsKKwkvKiBOYW1lIGlzIGluICIjcnJnZ2JiIiBmb3JtYXQgKi8KKwlyID0gaGV4X2RpZ2l0KG5hbWVbMV0pICogMTYgKyBoZXhfZGlnaXQobmFtZVsyXSk7CisJZyA9IGhleF9kaWdpdChuYW1lWzNdKSAqIDE2ICsgaGV4X2RpZ2l0KG5hbWVbNF0pOworCWIgPSBoZXhfZGlnaXQobmFtZVs1XSkgKiAxNiArIGhleF9kaWdpdChuYW1lWzZdKTsKKwlpZiAociA8IDAgfHwgZyA8IDAgfHwgYiA8IDApCisJICAgIHJldHVybiBJTlZBTENPTE9SOworCXJldHVybiBSR0IociwgZywgYik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogQ2hlY2sgaWYgdGhlIG5hbWUgaXMgb25lIG9mIHRoZSBjb2xvdXJzIHdlIGtub3cgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZW5kQ29sb3VyOyBpKyspCisJICAgIGlmIChTVFJJQ01QKG5hbWUsIHRhYmxlW2ldLm5hbWUpID09IDApCisJCXJldHVybiB0YWJsZVtpXS5jb2xvdXI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBMYXN0IGF0dGVtcHQuIExvb2sgaW4gdGhlIGZpbGUgIiRWSU0vcmdiLnR4dCIuCisgICAgICovCisgICAgeworI2RlZmluZSBMSU5FX0xFTiAxMDAKKwlGSUxFCSpmZDsKKwljaGFyCWxpbmVbTElORV9MRU5dOworCWNoYXJfdQkqZm5hbWU7CisKKwlmbmFtZSA9IGV4cGFuZF9lbnZfc2F2ZSgoY2hhcl91ICopIiRWSU0vcmdiLnR4dCIpOworCWlmIChmbmFtZSA9PSBOVUxMKQorCSAgICByZXR1cm4gSU5WQUxDT0xPUjsKKworCWZkID0gZm9wZW4oKGNoYXIgKilmbmFtZSwgInJ0Iik7CisJdmltX2ZyZWUoZm5hbWUpOworCWlmIChmZCA9PSBOVUxMKQorCSAgICByZXR1cm4gSU5WQUxDT0xPUjsKKworCXdoaWxlICghZmVvZihmZCkpCisJeworCSAgICBpbnQJICAgIGxlbjsKKwkgICAgaW50CSAgICBwb3M7CisJICAgIGNoYXIgICAgKmNvbG91cjsKKworCSAgICBmZ2V0cyhsaW5lLCBMSU5FX0xFTiwgZmQpOworCSAgICBsZW4gPSBzdHJsZW4obGluZSk7CisKKwkgICAgaWYgKGxlbiA8PSAxIHx8IGxpbmVbbGVuLTFdICE9ICdcbicpCisJCWNvbnRpbnVlOworCisJICAgIGxpbmVbbGVuLTFdID0gJ1wwJzsKKworCSAgICBpID0gc3NjYW5mKGxpbmUsICIlZCAlZCAlZCAlbiIsICZyLCAmZywgJmIsICZwb3MpOworCSAgICBpZiAoaSAhPSAzKQorCQljb250aW51ZTsKKworCSAgICBjb2xvdXIgPSBsaW5lICsgcG9zOworCisJICAgIGlmIChTVFJJQ01QKGNvbG91ciwgbmFtZSkgPT0gMCkKKwkgICAgeworCQlmY2xvc2UoZmQpOworCQkvKgorCQkgKiBOb3cgcmVtZW1iZXIgdGhpcyBjb2xvdXIgaW4gdGhlIHRhYmxlLgorCQkgKiBBIExSVSBzY2hlbWUgbWlnaHQgYmUgYmV0dGVyIGJ1dCB0aGlzIGlzIHNpbXBsZXIuCisJCSAqIE9yIGNvdWxkIHVzZSBhIGdyb3dpbmcgYXJyYXkuCisJCSAqLworCQlndWljb2xvcl9UIGdjb2xvdXIgPSBSR0IocixnLGIpOworCisJCXZpbV9mcmVlKHRhYmxlW25ld0NvbG91cl0ubmFtZSk7CisJCXRhYmxlW25ld0NvbG91cl0ubmFtZSA9IChjaGFyICopdmltX3N0cnNhdmUoKGNoYXJfdSAqKWNvbG91cik7CisJCXRhYmxlW25ld0NvbG91cl0uY29sb3VyID0gZ2NvbG91cjsKKworCQluZXdDb2xvdXIrKzsKKwkJaWYgKG5ld0NvbG91ciA+PSBOQ09MT1VSUykKKwkJICAgIG5ld0NvbG91ciA9IE5TVEFUSUNfQ09MT1VSUzsKKwkJaWYgKGVuZENvbG91ciA8IE5DT0xPVVJTKQorCQkgICAgZW5kQ29sb3VyID0gbmV3Q29sb3VyOworCisJCXJldHVybiBnY29sb3VyOworCSAgICB9CisJfQorCisJZmNsb3NlKGZkKTsKKyAgICB9CisKKyAgICByZXR1cm4gSU5WQUxDT0xPUjsKK30KKworLyoKKyAqIFNldCB0aGUgY3VycmVudCB0ZXh0IGZvcmVncm91bmQgY29sb3IuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9mZ19jb2xvcigKKyAgICBndWljb2xvcl9UCWNvbG9yKQoreworICAgIHJnYl9jb2xvciByZ2IgPSBHVUlfVE9fUkdCKGNvbG9yKTsKKyAgICBpZiAoZ3VpLnZpbVdpbmRvdy0+TG9jaygpKSB7CisJZ3VpLnZpbVRleHRBcmVhLT5TZXRIaWdoQ29sb3IocmdiKTsKKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKyAgICB9Cit9CisKKy8qCisgKiBTZXQgdGhlIGN1cnJlbnQgdGV4dCBiYWNrZ3JvdW5kIGNvbG9yLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfYmdfY29sb3IoCisgICAgZ3VpY29sb3JfVAljb2xvcikKK3sKKyAgICByZ2JfY29sb3IgcmdiID0gR1VJX1RPX1JHQihjb2xvcik7CisgICAgaWYgKGd1aS52aW1XaW5kb3ctPkxvY2soKSkgeworCWd1aS52aW1UZXh0QXJlYS0+U2V0TG93Q29sb3IocmdiKTsKKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKyAgICB9Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2RyYXdfc3RyaW5nKAorICAgIGludAkJcm93LAorICAgIGludAkJY29sLAorICAgIGNoYXJfdQkqcywKKyAgICBpbnQJCWxlbiwKKyAgICBpbnQJCWZsYWdzKQoreworICAgIGlmIChndWkudmltV2luZG93LT5Mb2NrKCkpIHsKKwlndWkudmltVGV4dEFyZWEtPm1jaERyYXdTdHJpbmcocm93LCBjb2wsIHMsIGxlbiwgZmxhZ3MpOworCWd1aS52aW1XaW5kb3ctPlVubG9jaygpOworICAgIH0KK30KKworLyoKKyAqIFJldHVybiBPSyBpZiB0aGUga2V5IHdpdGggdGhlIHRlcm1jYXAgbmFtZSAibmFtZSIgaXMgc3VwcG9ydGVkLgorICovCisgICAgaW50CitndWlfbWNoX2hhc2tleSgKKyAgICBjaGFyX3UJKm5hbWUpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBzcGVjaWFsX2tleXNbaV0uQmVLZXlzICE9IDA7IGkrKykKKwlpZiAobmFtZVswXSA9PSBzcGVjaWFsX2tleXNbaV0udmltX2NvZGUwICYmCisJCQkJCSBuYW1lWzFdID09IHNwZWNpYWxfa2V5c1tpXS52aW1fY29kZTEpCisJICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gRkFJTDsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfYmVlcCgpCit7CisgICAgOjpiZWVwKCk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2ZsYXNoKGludCBtc2VjKQoreworICAgIC8qIERvIGEgdmlzdWFsIGJlZXAgYnkgcmV2ZXJzaW5nIHRoZSBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyAqLworCisgICAgaWYgKGd1aS52aW1XaW5kb3ctPkxvY2soKSkgeworCUJSZWN0IHJlY3QgPSBndWkudmltVGV4dEFyZWEtPkJvdW5kcygpOworCisJZ3VpLnZpbVRleHRBcmVhLT5TZXREcmF3aW5nTW9kZShCX09QX0lOVkVSVCk7CisJZ3VpLnZpbVRleHRBcmVhLT5GaWxsUmVjdChyZWN0KTsKKwlndWkudmltVGV4dEFyZWEtPlN5bmMoKTsKKwlzbm9vemUobXNlYyAqIDEwMDApOwkgLyogd2FpdCBmb3IgYSBmZXcgbXNlYyAqLworCWd1aS52aW1UZXh0QXJlYS0+RmlsbFJlY3QocmVjdCk7CisJZ3VpLnZpbVRleHRBcmVhLT5TZXREcmF3aW5nTW9kZShCX09QX0NPUFkpOworCWd1aS52aW1UZXh0QXJlYS0+Rmx1c2goKTsKKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKyAgICB9Cit9CisKKy8qCisgKiBJbnZlcnQgYSByZWN0YW5nbGUgZnJvbSByb3cgciwgY29sdW1uIGMsIGZvciBuciByb3dzIGFuZCBuYyBjb2x1bW5zLgorICovCisgICAgdm9pZAorZ3VpX21jaF9pbnZlcnRfcmVjdGFuZ2xlKAorICAgIGludAkJciwKKyAgICBpbnQJCWMsCisgICAgaW50CQluciwKKyAgICBpbnQJCW5jKQoreworICAgIEJSZWN0IHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gRklMTF9YKGMpOworICAgIHJlY3QudG9wID0gRklMTF9ZKHIpOworICAgIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBuYyAqIGd1aS5jaGFyX3dpZHRoIC0gUEVOX1dJRFRIOworICAgIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBuciAqIGd1aS5jaGFyX2hlaWdodCAtIFBFTl9XSURUSDsKKworICAgIGlmIChndWkudmltV2luZG93LT5Mb2NrKCkpIHsKKwlndWkudmltVGV4dEFyZWEtPlNldERyYXdpbmdNb2RlKEJfT1BfSU5WRVJUKTsKKwlndWkudmltVGV4dEFyZWEtPkZpbGxSZWN0KHJlY3QpOworCWd1aS52aW1UZXh0QXJlYS0+U2V0RHJhd2luZ01vZGUoQl9PUF9DT1BZKTsKKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKyAgICB9Cit9CisKKy8qCisgKiBJY29uaWZ5IHRoZSBHVUkgd2luZG93LgorICovCisgICAgdm9pZAorZ3VpX21jaF9pY29uaWZ5KCkKK3sKKyAgICBpZiAoZ3VpLnZpbVdpbmRvdy0+TG9jaygpKSB7CisJZ3VpLnZpbVdpbmRvdy0+TWluaW1pemUodHJ1ZSk7CisJZ3VpLnZpbVdpbmRvdy0+VW5sb2NrKCk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQnJpbmcgdGhlIFZpbSB3aW5kb3cgdG8gdGhlIGZvcmVncm91bmQuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9mb3JlZ3JvdW5kKCkKK3sKKyAgICAvKiBUT0RPICovCit9CisjZW5kaWYKKworLyoKKyAqIFNldCB0aGUgd2luZG93IHRpdGxlCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldHRpdGxlKAorICAgIGNoYXJfdQkqdGl0bGUsCisgICAgY2hhcl91CSppY29uKQoreworICAgIGlmIChndWkudmltV2luZG93LT5Mb2NrKCkpIHsKKwlndWkudmltV2luZG93LT5TZXRUaXRsZSgoY2hhciAqKXRpdGxlKTsKKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKyAgICB9Cit9CisKKy8qCisgKiBEcmF3IGEgY3Vyc29yIHdpdGhvdXQgZm9jdXMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RyYXdfaG9sbG93X2N1cnNvcihndWljb2xvcl9UIGNvbG9yKQoreworICAgIGd1aV9tY2hfc2V0X2ZnX2NvbG9yKGNvbG9yKTsKKworICAgIEJSZWN0IHI7CisgICAgci5sZWZ0ID0gRklMTF9YKGd1aS5jb2wpOworICAgIHIudG9wID0gRklMTF9ZKGd1aS5yb3cpOworICAgIHIucmlnaHQgPSByLmxlZnQgKyBndWkuY2hhcl93aWR0aCAtIFBFTl9XSURUSDsKKyAgICByLmJvdHRvbSA9IHIudG9wICsgZ3VpLmNoYXJfaGVpZ2h0IC0gUEVOX1dJRFRIOworCisgICAgaWYgKGd1aS52aW1XaW5kb3ctPkxvY2soKSkgeworCWd1aS52aW1UZXh0QXJlYS0+U3Ryb2tlUmVjdChyKTsKKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKwkvL2d1aV9tY2hfZmx1c2goKTsKKyAgICB9Cit9CisKKy8qCisgKiBEcmF3IHBhcnQgb2YgYSBjdXJzb3IsIG9ubHkgdyBwaXhlbHMgd2lkZSwgYW5kIGggcGl4ZWxzIGhpZ2guCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RyYXdfcGFydF9jdXJzb3IoCisgICAgaW50CQl3LAorICAgIGludAkJaCwKKyAgICBndWljb2xvcl9UCWNvbG9yKQoreworICAgIGd1aV9tY2hfc2V0X2ZnX2NvbG9yKGNvbG9yKTsKKworICAgIEJSZWN0IHI7CisgICAgci5sZWZ0ID0KKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCS8qIHZlcnRpY2FsIGxpbmUgc2hvdWxkIGJlIG9uIHRoZSByaWdodCBvZiBjdXJyZW50IHBvaW50ICovCisJQ1VSU09SX0JBUl9SSUdIVCA/IEZJTExfWChndWkuY29sICsgMSkgLSB3IDoKKyNlbmRpZgorCSAgICBGSUxMX1goZ3VpLmNvbCk7CisgICAgci5yaWdodCA9IHIubGVmdCArIHcgLSBQRU5fV0lEVEg7CisgICAgci5ib3R0b20gPSBGSUxMX1koZ3VpLnJvdyArIDEpIC0gUEVOX1dJRFRIOworICAgIHIudG9wID0gci5ib3R0b20gLSBoICsgUEVOX1dJRFRIOworCisgICAgaWYgKGd1aS52aW1XaW5kb3ctPkxvY2soKSkgeworCWd1aS52aW1UZXh0QXJlYS0+RmlsbFJlY3Qocik7CisJZ3VpLnZpbVdpbmRvdy0+VW5sb2NrKCk7CisJLy9ndWlfbWNoX2ZsdXNoKCk7CisgICAgfQorfQorCisvKgorICogQ2F0Y2ggdXAgd2l0aCBhbnkgcXVldWVkIGV2ZW50cy4gIFRoaXMgbWF5IHB1dCBrZXlib2FyZCBpbnB1dCBpbnRvIHRoZQorICogaW5wdXQgYnVmZmVyLCBjYWxsIHJlc2l6ZSBjYWxsLWJhY2tzLCB0cmlnZ2VyIHRpbWVycyBldGMuICBJZiB0aGVyZSBpcworICogbm90aGluZyBpbiB0aGUgZXZlbnQgcXVldWUgKCYgbm8gdGltZXJzIHBlbmRpbmcpLCB0aGVuIHdlIHJldHVybgorICogaW1tZWRpYXRlbHkuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3VwZGF0ZSgpCit7CisgICAgZ3VpX21jaF9mbHVzaCgpOworICAgIHdoaWxlIChwb3J0X2NvdW50KGd1aS52ZGNtcCkgPiAwICYmCisJICAgICF2aW1faXNfaW5wdXRfYnVmX2Z1bGwoKSAmJgorCSAgICBndWlfYmVvc19wcm9jZXNzX2V2ZW50KDApID49IEJfT0spCisJLyogbm90aGluZyAqLyA7Cit9CisKKy8qCisgKiBHVUkgaW5wdXQgcm91dGluZSBjYWxsZWQgYnkgZ3VpX3dhaXRfZm9yX2NoYXJzKCkuICBXYWl0cyBmb3IgYSBjaGFyYWN0ZXIKKyAqIGZyb20gdGhlIGtleWJvYXJkLgorICoJd3RpbWUgPT0gLTEJCVdhaXQgZm9yZXZlci4KKyAqCXd0aW1lID09IDAJCVRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4KKyAqCXd0aW1lID4gMAkJV2FpdCB3dGltZSBtaWxsaXNlY29uZHMgZm9yIGEgY2hhcmFjdGVyLgorICogUmV0dXJucyBPSyBpZiBhIGNoYXJhY3RlciB3YXMgZm91bmQgdG8gYmUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgZ2l2ZW4gdGltZSwKKyAqIG9yIEZBSUwgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitndWlfbWNoX3dhaXRfZm9yX2NoYXJzKAorICAgIGludAkJd3RpbWUpCit7CisgICAgaW50CQkgICAgZm9jdXM7CisgICAgYmlndGltZV90CSAgICB1bnRpbCwgdGltZW91dDsKKyAgICBzdGF0dXNfdAkgICAgc3Q7CisKKyAgICBpZiAod3RpbWUgPj0gMCkgeworCXRpbWVvdXQgPSB3dGltZSAqIDEwMDA7CisJdW50aWwgPSBzeXN0ZW1fdGltZSgpICsgdGltZW91dDsKKyAgICB9IGVsc2UgeworCXRpbWVvdXQgPSBCX0lORklOSVRFX1RJTUVPVVQ7CisgICAgfQorCisgICAgZm9jdXMgPSBndWkuaW5fZm9jdXM7CisgICAgZm9yICg7OykKKyAgICB7CisJLyogU3RvcCBvciBzdGFydCBibGlua2luZyB3aGVuIGZvY3VzIGNoYW5nZXMgKi8KKwlpZiAoZ3VpLmluX2ZvY3VzICE9IGZvY3VzKQorCXsKKwkgICAgaWYgKGd1aS5pbl9mb2N1cykKKwkJZ3VpX21jaF9zdGFydF9ibGluaygpOworCSAgICBlbHNlCisJCWd1aV9tY2hfc3RvcF9ibGluaygpOworCSAgICBmb2N1cyA9IGd1aS5pbl9mb2N1czsKKwl9CisKKwlndWlfbWNoX2ZsdXNoKCk7CisJLyoKKwkgKiBEb24ndCB1c2UgZ3VpX21jaF91cGRhdGUoKSBiZWNhdXNlIHRoZW4gd2Ugd2lsbCBzcGluLWxvY2sgdW50aWwgYQorCSAqIGNoYXIgYXJyaXZlcywgaW5zdGVhZCB3ZSB1c2UgZ3VpX2Jlb3NfcHJvY2Vzc19ldmVudCgpIHRvIGhhbmcgdW50aWwKKwkgKiBhbiBldmVudCBhcnJpdmVzLiAgTm8gbmVlZCB0byBjaGVjayBmb3IgaW5wdXRfYnVmX2Z1bGwgYmVjYXVzZSB3ZQorCSAqIGFyZSByZXR1cm5pbmcgYXMgc29vbiBhcyBpdCBjb250YWlucyBhIHNpbmdsZSBjaGFyLgorCSAqLworCXN0ID0gZ3VpX2Jlb3NfcHJvY2Vzc19ldmVudCh0aW1lb3V0KTsKKworCWlmIChpbnB1dF9hdmFpbGFibGUoKSkKKwkgICAgcmV0dXJuIE9LOworCWlmIChzdCA8IEJfT0spCQkgICAgLyogaW5jbHVkZXMgQl9USU1FRF9PVVQgKi8KKwkgICAgcmV0dXJuIEZBSUw7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBob3cgbXVjaCBsb25nZXIgd2UncmUgd2lsbGluZyB0byB3YWl0IGZvciB0aGUKKwkgKiBuZXh0IGV2ZW50LgorCSAqLworCWlmICh3dGltZSA+PSAwKSB7CisJICAgIHRpbWVvdXQgPSB1bnRpbCAtIHN5c3RlbV90aW1lKCk7CisJICAgIGlmICh0aW1lb3V0IDwgMCkKKwkJYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gRkFJTDsKKworfQorCisvKgorICogT3V0cHV0IHJvdXRpbmVzLgorICovCisKKy8qCisgKiBGbHVzaCBhbnkgb3V0cHV0IHRvIHRoZSBzY3JlZW4uIFRoaXMgaXMgdHlwaWNhbGx5IGNhbGxlZCBiZWZvcmUKKyAqIHRoZSBhcHAgZ29lcyB0byBzbGVlcC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZmx1c2goKQoreworICAgIC8vIGRvZXMgdGhpcyBuZWVkIHRvIGxvY2sgdGhlIHdpbmRvdz8gQXBwYXJlbnRseSBub3QgYnV0IGJlIHNhZmUuCisgICAgaWYgKGd1aS52aW1XaW5kb3ctPkxvY2soKSkgeworCWd1aS52aW1XaW5kb3ctPkZsdXNoKCk7CisJZ3VpLnZpbVdpbmRvdy0+VW5sb2NrKCk7CisgICAgfQorICAgIHJldHVybjsKK30KKworLyoKKyAqIENsZWFyIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIG9mIHRoZSBzY3JlZW4gZnJvbSB0ZXh0IHBvcyAocm93MSwgY29sMSkgdG8KKyAqIChyb3cyLCBjb2wyKSBpbmNsdXNpdmUuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2NsZWFyX2Jsb2NrKAorICAgIGludAkJcm93MSwKKyAgICBpbnQJCWNvbDEsCisgICAgaW50CQlyb3cyLAorICAgIGludAkJY29sMikKK3sKKyAgICBpZiAoZ3VpLnZpbVdpbmRvdy0+TG9jaygpKSB7CisJZ3VpLnZpbVRleHRBcmVhLT5tY2hDbGVhckJsb2NrKHJvdzEsIGNvbDEsIHJvdzIsIGNvbDIpOworCWd1aS52aW1XaW5kb3ctPlVubG9jaygpOworICAgIH0KK30KKworICAgIHZvaWQKK2d1aV9tY2hfY2xlYXJfYWxsKCkKK3sKKyAgICBpZiAoZ3VpLnZpbVdpbmRvdy0+TG9jaygpKSB7CisJZ3VpLnZpbVRleHRBcmVhLT5tY2hDbGVhckFsbCgpOworCWd1aS52aW1XaW5kb3ctPlVubG9jaygpOworICAgIH0KK30KKworLyoKKyAqIERlbGV0ZSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIGdpdmVuIHJvdywgc2Nyb2xsaW5nIHVwIGFueQorICogdGV4dCBmdXJ0aGVyIGRvd24gd2l0aGluIHRoZSBzY3JvbGwgcmVnaW9uLgorICovCisgICAgdm9pZAorZ3VpX21jaF9kZWxldGVfbGluZXMoCisgICAgaW50CQlyb3csCisgICAgaW50CQludW1fbGluZXMpCit7CisgICAgZ3VpLnZpbVRleHRBcmVhLT5tY2hEZWxldGVMaW5lcyhyb3csIG51bV9saW5lcyk7Cit9CisKKy8qCisgKiBJbnNlcnQgdGhlIGdpdmVuIG51bWJlciBvZiBsaW5lcyBiZWZvcmUgdGhlIGdpdmVuIHJvdywgc2Nyb2xsaW5nIGRvd24gYW55CisgKiBmb2xsb3dpbmcgdGV4dCB3aXRoaW4gdGhlIHNjcm9sbCByZWdpb24uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2luc2VydF9saW5lcygKKyAgICBpbnQJCXJvdywKKyAgICBpbnQJCW51bV9saW5lcykKK3sKKyAgICBndWkudmltVGV4dEFyZWEtPm1jaEluc2VydExpbmVzKHJvdywgbnVtX2xpbmVzKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIE1lbnUgc3R1ZmYuCisgKi8KKworICAgIHZvaWQKK2d1aV9tY2hfZW5hYmxlX21lbnUoCisgICAgaW50CQlmbGFnKQoreworICAgIGlmIChndWkudmltV2luZG93LT5Mb2NrKCkpCisgICAgeworCUJNZW51QmFyICptZW51YmFyID0gZ3VpLnZpbUZvcm0tPk1lbnVCYXIoKTsKKwltZW51YmFyLT5TZXRFbmFibGVkKGZsYWcpOworCWd1aS52aW1XaW5kb3ctPlVubG9jaygpOworICAgIH0KK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X21lbnVfcG9zKAorICAgIGludAkJeCwKKyAgICBpbnQJCXksCisgICAgaW50CQl3LAorICAgIGludAkJaCkKK3sKKyAgICAvKiBJdCB3aWxsIGJlIGluIHRoZSByaWdodCBwbGFjZSBhbnl3YXkgKi8KK30KKworLyoKKyAqIEFkZCBhIHN1YiBtZW51IHRvIHRoZSBtZW51IGJhci4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfYWRkX21lbnUoCisgICAgdmltbWVudV9UCSptZW51LAorICAgIGludAkJaWR4KQoreworICAgIHZpbW1lbnVfVAkqcGFyZW50ID0gbWVudS0+cGFyZW50OworCisgICAgaWYgKCFtZW51X2lzX21lbnViYXIobWVudS0+bmFtZSkKKwkgICAgfHwgKHBhcmVudCAhPSBOVUxMICYmIHBhcmVudC0+c3VibWVudV9pZCA9PSBOVUxMKSkKKwlyZXR1cm47CisKKyAgICBpZiAoZ3VpLnZpbVdpbmRvdy0+TG9jaygpKQorICAgIHsKKy8qIE1ham9yIHJlLXdyaXRlIG9mIHRoZSBtZW51IGNvZGUsIGl0IHdhcyBmYWlsaW5nIHdpdGggbWVtb3J5IGNvcnJ1cHRpb24gd2hlbgorICogd2Ugc3RhcnRlZCBsb2FkaW5nIG11bHRpcGxlIGZpbGVzICh0aGUgQnVmZmVyIG1lbnUpCisgKgorICogTm90ZSB3ZSBkb24ndCB1c2UgdGhlIHByZWZlcmVuY2UgdmFsdWVzIHlldCwgYWxsIGFyZSBpbnNlcnRlZCBpbnRvIHRoZQorICogbWVudWJhciBvbiBhIGZpcnN0IGNvbWUtZmlyc3Qgc2VydmVkIGJhc2lzLi4uCisgKgorICogcmljaGFyZEB3aGl0ZXF1ZWVuLmNvbSBqdWwgOTkKKyAqLworCisJQk1lbnUgKnRtcDsKKworCWlmICggcGFyZW50ICkKKwkgICAgdG1wID0gcGFyZW50LT5zdWJtZW51X2lkOworCWVsc2UKKwkgICAgdG1wID0gZ3VpLnZpbUZvcm0tPk1lbnVCYXIoKTsKKy8vIG1ha2Ugc3VyZSB3ZSBkb24ndCB0cnkgYW5kIGFkZCB0aGUgc2FtZSBtZW51IHR3aWNlLiBUaGUgQnVmZmVycyBtZW51IHRyaWVzIHRvCisvLyBkbyB0aGlzIGFuZCBCZSBzdGFydHMgdG8gY3Jhc2guLi4KKworCWlmICggISB0bXAtPkZpbmRJdGVtKChjb25zdCBjaGFyICopIG1lbnUtPmRuYW1lKSkgeworCisJICAgIEJNZW51ICpibWVudSA9IG5ldyBCTWVudSgoY2hhciAqKW1lbnUtPmRuYW1lKTsKKworCSAgICBtZW51LT5zdWJtZW51X2lkID0gYm1lbnU7CisKKy8vIHdoZW4gd2UgYWRkIGEgQk1lbnUgdG8gYW5vdGhlciBNZW51LCBpdCBjcmVhdGVzIHRoZSBpbnRlcmNvbm5lY3RpbmcgQk1lbnVJdGVtCisJICAgIHRtcC0+QWRkSXRlbShibWVudSk7CisKKy8vIE5vdyBpdHMgc2FmZSB0byBxdWVyeSB0aGUgbWVudSBmb3IgdGhlIGFzc29jaWF0ZWQgTWVudUl0ZW0uLi4uCisJICAgIG1lbnUtPmlkID0gdG1wLT5GaW5kSXRlbSgoY29uc3QgY2hhciAqKSBtZW51LT5kbmFtZSk7CisKKwl9CisJZ3VpLnZpbVdpbmRvdy0+VW5sb2NrKCk7CisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX21jaF90b2dnbGVfdGVhcm9mZnMoaW50IGVuYWJsZSkKK3sKKyAgICAvKiBubyB0ZWFyb2ZmIG1lbnVzICovCit9CisKKyAgICBzdGF0aWMgQk1lc3NhZ2UgKgorTWVudU1lc3NhZ2UodmltbWVudV9UICptZW51KQoreworICAgIEJNZXNzYWdlICptID0gbmV3IEJNZXNzYWdlKCdtZW51Jyk7CisgICAgbS0+QWRkUG9pbnRlcigiVmltTWVudSIsICh2b2lkICopbWVudSk7CisKKyAgICByZXR1cm4gbTsKK30KKworLyoKKyAqIEFkZCBhIG1lbnUgaXRlbSB0byBhIG1lbnUKKyAqLworICAgIHZvaWQKK2d1aV9tY2hfYWRkX21lbnVfaXRlbSgKKyAgICB2aW1tZW51X1QJKm1lbnUsCisgICAgaW50CQlpZHgpCit7CisgICAgaW50CQltbmVtb25pYyA9IDA7CisgICAgdmltbWVudV9UCSpwYXJlbnQgPSBtZW51LT5wYXJlbnQ7CisKKyAgICBpZiAocGFyZW50LT5zdWJtZW51X2lkID09IE5VTEwpCisJcmV0dXJuOworCisjaWZkZWYgbmV2ZXIKKyAgICAvKiB3aHkgbm90IGFkZCBzZXBhcmF0b3JzID8KKyAgICAgKiByaWNoYXJkCisgICAgICovCisgICAgLyogRG9uJ3QgYWRkIG1lbnUgc2VwYXJhdG9yICovCisgICAgaWYgKG1lbnVfaXNfc2VwYXJhdG9yKG1lbnUtPm5hbWUpKQorCXJldHVybjsKKyNlbmRpZgorCisgICAgLyogVE9ETzogdXNlIG1lbnUtPmFjdGV4dCAqLworICAgIC8qIFRoaXMgaXMgZGlmZmljdWx0LCBzaW5jZSBvbiBCZSwgYW4gYWNjZWxlcmF0b3IgbXVzdCBiZSBhIHNpbmdsZSBjaGFyCisgICAgICogYW5kIGEgbG90IG9mIFZpbSBvbmVzIGFyZSB0aGUgc3RhbmRhcmQgVkkgY29tbWFuZHMuCisgICAgICoKKyAgICAgKiBQdW50IGZvciBOb3cuLi4KKyAgICAgKiByaWNoYXJkQHdoaWVxdWVlbi5jb20ganVsIDk5CisgICAgICovCisgICAgaWYgKGd1aS52aW1XaW5kb3ctPkxvY2soKSkKKyAgICB7CisJaWYgKCBtZW51X2lzX3NlcGFyYXRvcihtZW51LT5uYW1lKSkgeworCSAgICBCU2VwYXJhdG9ySXRlbSAqaXRlbSA9IG5ldyBCU2VwYXJhdG9ySXRlbSgpOworCSAgICBwYXJlbnQtPnN1Ym1lbnVfaWQtPkFkZEl0ZW0oaXRlbSk7CisJICAgIG1lbnUtPmlkID0gaXRlbTsKKwkgICAgbWVudS0+c3VibWVudV9pZCA9IE5VTEw7CisJfQorCWVsc2UgeworCSAgICBCTWVudUl0ZW0gKml0ZW0gPSBuZXcgQk1lbnVJdGVtKChjaGFyICopbWVudS0+ZG5hbWUsCisJCSAgICBNZW51TWVzc2FnZShtZW51KSk7CisJICAgIGl0ZW0tPlNldFRhcmdldChndWkudmltVGV4dEFyZWEpOworCSAgICBpdGVtLT5TZXRUcmlnZ2VyKChjaGFyKSBtZW51LT5tbmVtb25pYyk7CisJICAgIHBhcmVudC0+c3VibWVudV9pZC0+QWRkSXRlbShpdGVtKTsKKwkgICAgbWVudS0+aWQgPSBpdGVtOworCSAgICBtZW51LT5zdWJtZW51X2lkID0gTlVMTDsKKwl9CisJZ3VpLnZpbVdpbmRvdy0+VW5sb2NrKCk7CisgICAgfQorfQorCisvKgorICogRGVzdHJveSB0aGUgbWFjaGluZSBzcGVjaWZpYyBtZW51IHdpZGdldC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZGVzdHJveV9tZW51KAorICAgIHZpbW1lbnVfVAkqbWVudSkKK3sKKyAgICBpZiAoZ3VpLnZpbVdpbmRvdy0+TG9jaygpKQorICAgIHsKKwlhc3NlcnQobWVudS0+c3VibWVudV9pZCA9PSBOVUxMIHx8IG1lbnUtPnN1Ym1lbnVfaWQtPkNvdW50SXRlbXMoKSA9PSAwKTsKKwkvKgorCSAqIERldGFjaCB0aGlzIG1lbnUgZnJvbSBpdHMgcGFyZW50LCBzbyB0aGF0IGl0IGlzIG5vdCBkZWxldGVkCisJICogdHdpY2Ugb25jZSB3ZSBnZXQgdG8gZGVsZXRlIHRoYXQgcGFyZW50LgorCSAqIERlbGV0aW5nIGEgQk1lbnVJdGVtIGFsc28gZGVsZXRlcyB0aGUgYXNzb2NpYXRlZCBCTWVudSwgaWYgYW55CisJICogKHdoaWNoIGRvZXMgbm90IGhhdmUgYW55IGl0ZW1zIGFueW1vcmUgc2luY2UgdGhleSB3ZXJlCisJICogcmVtb3ZlZCBhbmQgZGVsZXRlZCBiZWZvcmUpLgorCSAqLworCUJNZW51ICpibWVudSA9IG1lbnUtPmlkLT5NZW51KCk7CisJaWYgKGJtZW51KQorCXsKKwkgICAgYm1lbnUtPlJlbW92ZUl0ZW0obWVudS0+aWQpOworCSAgICAvKgorCSAgICAgKiBJZiB3ZSByZW1vdmVkIHRoZSBsYXN0IGl0ZW0gZnJvbSB0aGUgbWVudSBiYXIsCisJICAgICAqIHJlc2l6ZSBpdCBvdXQgb2Ygc2lnaHQuCisJICAgICAqLworCSAgICBpZiAoYm1lbnUgPT0gZ3VpLnZpbUZvcm0tPk1lbnVCYXIoKSAmJiBibWVudS0+Q291bnRJdGVtcygpID09IDApCisJICAgIHsKKwkJYm1lbnUtPlJlc2l6ZVRvKC1NRU5VQkFSX01BUkdJTiwgLU1FTlVCQVJfTUFSR0lOKTsKKwkgICAgfQorCX0KKwlkZWxldGUgbWVudS0+aWQ7CisJbWVudS0+aWQgPSBOVUxMOworCW1lbnUtPnN1Ym1lbnVfaWQgPSBOVUxMOworCisJZ3VpLm1lbnVfaGVpZ2h0ID0gKGludCkgZ3VpLnZpbUZvcm0tPk1lbnVIZWlnaHQoKTsKKwlndWkudmltV2luZG93LT5VbmxvY2soKTsKKyAgICB9Cit9CisKKy8qCisgKiBNYWtlIGEgbWVudSBlaXRoZXIgZ3JleSBvciBub3QgZ3JleS4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfbWVudV9ncmV5KAorICAgIHZpbW1lbnVfVAkqbWVudSwKKyAgICBpbnQJCWdyZXkpCit7CisgICAgaWYgKG1lbnUtPmlkICE9IE5VTEwpCisJbWVudS0+aWQtPlNldEVuYWJsZWQoIWdyZXkpOworfQorCisvKgorICogTWFrZSBtZW51IGl0ZW0gaGlkZGVuIG9yIG5vdCBoaWRkZW4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfbWVudV9oaWRkZW4oCisgICAgdmltbWVudV9UCSptZW51LAorICAgIGludAkJaGlkZGVuKQoreworICAgIGlmIChtZW51LT5pZCAhPSBOVUxMKQorCW1lbnUtPmlkLT5TZXRFbmFibGVkKCFoaWRkZW4pOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgc2V0dGluZyBhbGwgdGhlIG1lbnVzIHRvIGdyZXkvaGlkZGVuIG9yIG5vdC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19tZW51YmFyKCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvIGluIEJlT1MgKi8KK30KKworI2VuZGlmIC8qIEZFQVRfTUVOVSAqLworCisvKiBNb3VzZSBzdHVmZiAqLworCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKy8qCisgKiBDbGlwYm9hcmQgc3R1ZmYsIGZvciBjdXR0aW5nIGFuZCBwYXN0aW5nIHRleHQgdG8gb3RoZXIgd2luZG93cy4KKyAqLworY2hhciB0ZXh0cGxhaW5bXSA9ICJ0ZXh0L3BsYWluIjsKK2NoYXIgdmltc2VsZWN0aW9udHlwZVtdID0gImFwcGxpY2F0aW9uL3gtdm5kLlJoaWFsdG8tVmltLXNlbGVjdGlvbnR5cGUiOworCisvKgorICogR2V0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgcHV0IGl0IGluIHRoZSBjbGlwYm9hcmQgcmVnaXN0ZXIuCisgKi8KKyAgICB2b2lkCitjbGlwX21jaF9yZXF1ZXN0X3NlbGVjdGlvbihWaW1DbGlwYm9hcmQgKmNiZCkKK3sKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpCisgICAgeworCUJNZXNzYWdlICptID0gYmVfY2xpcGJvYXJkLT5EYXRhKCk7CisJLy9tLT5QcmludFRvU3RyZWFtKCk7CisKKwljaGFyX3UgKnN0cmluZyA9IE5VTEw7CisJc3NpemVfdCBzdHJpbmdsZW4gPSAtMTsKKworCWlmIChtLT5GaW5kRGF0YSh0ZXh0cGxhaW4sIEJfTUlNRV9UWVBFLAorCQkJCSAgIChjb25zdCB2b2lkICoqKSZzdHJpbmcsICZzdHJpbmdsZW4pID09IEJfT0sKKwkJfHwgbS0+RmluZFN0cmluZygidGV4dCIsIChjb25zdCBjaGFyICoqKSZzdHJpbmcpID09IEJfT0spCisJeworCSAgICBpZiAoc3RyaW5nbGVuID09IC0xKQorCQlzdHJpbmdsZW4gPSBTVFJMRU4oc3RyaW5nKTsKKworCSAgICBpbnQgdHlwZTsKKwkgICAgY2hhciAqc2VsdHlwZTsKKwkgICAgc3NpemVfdCBzZWx0eXBlbGVuOworCisJICAgIC8qCisJICAgICAqIFRyeSB0byBnZXQgdGhlIHNwZWNpYWwgdmltIHNlbGVjdGlvbiB0eXBlIGZpcnN0CisJICAgICAqLworCSAgICBpZiAobS0+RmluZERhdGEodmltc2VsZWN0aW9udHlwZSwgQl9NSU1FX1RZUEUsCisJCSAgICAoY29uc3Qgdm9pZCAqKikmc2VsdHlwZSwgJnNlbHR5cGVsZW4pID09IEJfT0spCisJICAgIHsKKwkJc3dpdGNoICgqc2VsdHlwZSkKKwkJeworCQkgICAgZGVmYXVsdDoKKwkJICAgIGNhc2UgJ0wnOgl0eXBlID0gTUxJTkU7CWJyZWFrOworCQkgICAgY2FzZSAnQyc6CXR5cGUgPSBNQ0hBUjsJYnJlYWs7CisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJICAgIGNhc2UgJ0InOgl0eXBlID0gTUJMT0NLOwlicmVhazsKKyNlbmRpZgorCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qIE90aGVyd2lzZSB1c2UgaGV1cmlzdGljIGFzIGRvY3VtZW50ZWQgKi8KKwkJdHlwZSA9IG1lbWNocihzdHJpbmcsIHN0cmluZ2xlbiwgJ1xuJykgPyBNTElORSA6IE1DSEFSOworCSAgICB9CisJICAgIGNsaXBfeWFua19zZWxlY3Rpb24odHlwZSwgc3RyaW5nLCAobG9uZylzdHJpbmdsZW4sIGNiZCk7CisJfQorCWJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQorfQorLyoKKyAqIE1ha2UgdmltIHRoZSBvd25lciBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uCisgKi8KKyAgICB2b2lkCitjbGlwX21jaF9sb3NlX3NlbGVjdGlvbihWaW1DbGlwYm9hcmQgKmNiZCkKK3sKKyAgICAvKiBOb3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSAqLworfQorCisvKgorICogTWFrZSB2aW0gdGhlIG93bmVyIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIFJldHVybiBPSyB1cG9uIHN1Y2Nlc3MuCisgKi8KKyAgICBpbnQKK2NsaXBfbWNoX293bl9zZWxlY3Rpb24oVmltQ2xpcGJvYXJkICpjYmQpCit7CisgICAgLyoKKyAgICAgKiBOZXZlciBhY3R1YWxseSBvd24gdGhlIGNsaXBib2FyZC4gIElmIGFub3RoZXIgYXBwbGljYXRpb24gc2V0cyB0aGUKKyAgICAgKiBjbGlwYm9hcmQsIHdlIGRvbid0IHdhbnQgdG8gdGhpbmsgdGhhdCB3ZSBzdGlsbCBvd24gaXQuCisgICAgICovCisgICAgcmV0dXJuIEZBSUw7Cit9CisKKy8qCisgKiBTZW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB0byB0aGUgY2xpcGJvYXJkLgorICovCisgICAgdm9pZAorY2xpcF9tY2hfc2V0X3NlbGVjdGlvbihWaW1DbGlwYm9hcmQgKmNiZCkKK3sKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpCisgICAgeworCWJlX2NsaXBib2FyZC0+Q2xlYXIoKTsKKwlCTWVzc2FnZSAqbSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpOworCWFzc2VydChtKTsKKworCS8qIElmIHRoZSAnKicgcmVnaXN0ZXIgaXNuJ3QgYWxyZWFkeSBmaWxsZWQgaW4sIGZpbGwgaXQgaW4gbm93ICovCisJY2JkLT5vd25lZCA9IFRSVUU7CisJY2xpcF9nZXRfc2VsZWN0aW9uKGNiZCk7CisJY2JkLT5vd25lZCA9IEZBTFNFOworCisJY2hhcl91ICAqc3RyID0gTlVMTDsKKwlsb25nX3UgIGNvdW50OworCWludAl0eXBlOworCisJdHlwZSA9IGNsaXBfY29udmVydF9zZWxlY3Rpb24oJnN0ciwgJmNvdW50LCBjYmQpOworCisJaWYgKHR5cGUgPCAwKQorCSAgICByZXR1cm47CisKKwltLT5BZGREYXRhKHRleHRwbGFpbiwgQl9NSU1FX1RZUEUsICh2b2lkICopc3RyLCBjb3VudCk7CisKKwkvKiBBZGQgdHlwZSBvZiBzZWxlY3Rpb24gKi8KKwljaGFyICAgIHZ0eXBlOworCXN3aXRjaCAodHlwZSkKKwl7CisJICAgIGRlZmF1bHQ6CisJICAgIGNhc2UgTUxJTkU6ICAgIHZ0eXBlID0gJ0wnOyAgICBicmVhazsKKwkgICAgY2FzZSBNQ0hBUjogICAgdnR5cGUgPSAnQyc7ICAgIGJyZWFrOworI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIGNhc2UgTUJMT0NLOiAgIHZ0eXBlID0gJ0InOyAgICBicmVhazsKKyNlbmRpZgorCX0KKwltLT5BZGREYXRhKHZpbXNlbGVjdGlvbnR5cGUsIEJfTUlNRV9UWVBFLCAodm9pZCAqKSZ2dHlwZSwgMSk7CisKKwl2aW1fZnJlZShzdHIpOworCisJYmVfY2xpcGJvYXJkLT5Db21taXQoKTsKKwliZV9jbGlwYm9hcmQtPlVubG9jaygpOworICAgIH0KK30KKworI2VuZGlmCS8qIEZFQVRfQ0xJUEJPQVJEICovCisKKy8qCisgKiBSZXR1cm4gdGhlIFJHQiB2YWx1ZSBvZiBhIHBpeGVsIGFzIGxvbmcuCisgKi8KKyAgICBsb25nX3UKK2d1aV9tY2hfZ2V0X3JnYihndWljb2xvcl9UIHBpeGVsKQoreworICAgIHJnYl9jb2xvciByZ2IgPSBHVUlfVE9fUkdCKHBpeGVsKTsKKworICAgIHJldHVybiAoKHJnYi5yZWQgJiAweGZmKSA8PCAxNikgKyAoKHJnYi5ncmVlbiAmIDB4ZmYpIDw8IDgpCisJCQkJCQkJICArIChyZ2IuYmx1ZSAmIDB4ZmYpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRtb3VzZShpbnQgeCwgaW50IHkpCit7CisgICAgVFJBQ0UoKTsKKyAgICAvKiBUT0RPICovCit9CisKKyAgICB2b2lkCitndWlfbWNoX3Nob3dfcG9wdXBtZW51KHZpbW1lbnVfVCAqbWVudSkKK3sKKyAgICBUUkFDRSgpOworICAgIC8qIFRPRE8gKi8KK30KKworaW50CitndWlfbWNoX2dldF9tb3VzZV94KCkKK3sKKyAgICBUUkFDRSgpOworICAgIHJldHVybiAwOworfQorCisKK2ludAorZ3VpX21jaF9nZXRfbW91c2VfeSgpCit7CisgICAgVFJBQ0UoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvKiBleHRlcm4gIkMiICovCmRpZmYgLS1naXQgYS9zcmMvZ3VpX2Jlb3MuaCBiL3NyYy9ndWlfYmVvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZmM0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpX2Jlb3MuaApAQCAtMCwwICsxLDQ5IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCQlieSBCcmFtIE1vb2xlbmFhcgorICoJCQkJR1VJIHN1cHBvcnQgYnkgT2xhZiAiUmhpYWx0byIgU2VpYmVydAorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKgorICogQmVPUyBHVUkuCisgKgorICogR1VJIHN1cHBvcnQgZm9yIHRoZSBCdXp6d29yZCBFbmhhbmNlZCBPcGVyYXRpbmcgU3lzdGVtIGZvciBQUEMuCisgKgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgbXVzdCBiZSBhY2NlcHRhYmxlIGJvdGggYXMgQyBhbmQgQysrLgorICogVGhlIEJlT1MgQVBJIGlzIGRlZmluZWQgaW4gdGVybXMgb2YgQysrLCBidXQgc29tZSBjbGFzc2VzCisgKiBzaG91bGQgYmUgc29tZXdoYXQga25vd24gaW4gdGhlIGNvbW1vbiBDIGNvZGUuCisgKi8KKworLyogU3lzdGVtIGNsYXNzZXMgKi8KKworc3RydWN0IEJNZW51Oworc3RydWN0IEJNZW51SXRlbTsKKworLyogT3VyIG93biBWaW0tcmVsYXRlZCBjbGFzc2VzICovCisKK3N0cnVjdCBWaW1BcHA7CitzdHJ1Y3QgVmltRm9ybVZpZXc7CitzdHJ1Y3QgVmltVGV4dEFyZWFWaWV3Oworc3RydWN0IFZpbVdpbmRvdzsKK3N0cnVjdCBWaW1TY3JvbGxCYXI7CisKKy8qIExvY2tpbmcgZnVuY3Rpb25zICovCisKK2V4dGVybiBpbnQgdmltX2xvY2tfc2NyZWVuKCk7CitleHRlcm4gdm9pZCB2aW1fdW5sb2NrX3NjcmVlbigpOworCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKK3R5cGVkZWYgc3RydWN0IEJNZW51IEJNZW51OwordHlwZWRlZiBzdHJ1Y3QgQk1lbnVJdGVtIEJNZW51SXRlbTsKK3R5cGVkZWYgc3RydWN0IFZpbVdpbmRvdyBWaW1XaW5kb3c7Cit0eXBlZGVmIHN0cnVjdCBWaW1Gb3JtVmlldyBWaW1Gb3JtVmlldzsKK3R5cGVkZWYgc3RydWN0IFZpbVRleHRBcmVhVmlldyBWaW1UZXh0QXJlYVZpZXc7Cit0eXBlZGVmIHN0cnVjdCBWaW1BcHAgVmltQXBwOwordHlwZWRlZiBzdHJ1Y3QgVmltU2Nyb2xsQmFyIFZpbVNjcm9sbEJhcjsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZ3VpX2JldmFsLmMgYi9zcmMvZ3VpX2JldmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5YzFlMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfYmV2YWwuYwpAQCAtMCwwICsxLDEyNjggQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCQkJVmlzdWFsIFdvcmtzaG9wIGludGVncmF0aW9uIGJ5IEdvcmRvbiBQcmlldXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisjaWYgZGVmaW5lZChGRUFUX0JFVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKiBvbiBXaW4zMiBvbmx5IGd1aV9tY2hfZ2V0X2JldmFsX2luZm8gaXMgcmVxdWlyZWQgKi8KKyNpZiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpIHx8IGRlZmluZWQoUFJPVE8pCisKKyNpZmRlZiBGRUFUX0dVSV9HVEsKKyMgaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyMgaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8WDExL2tleXN5bS5oPgorIyBpZmRlZiBGRUFUX0dVSV9NT1RJRgorIyAgaW5jbHVkZSA8WG0vUHVzaEIuaD4KKyMgIGluY2x1ZGUgPFhtL1NlcGFyYXRvci5oPgorIyAgaW5jbHVkZSA8WG0vTGlzdC5oPgorIyAgaW5jbHVkZSA8WG0vTGFiZWwuaD4KKyMgIGluY2x1ZGUgPFhtL0F0b21NZ3IuaD4KKyMgIGluY2x1ZGUgPFhtL1Byb3RvY29scy5oPgorIyBlbHNlCisgICAvKiBBc3N1bWUgQXRoZW5hICovCisjICBpbmNsdWRlIDxYMTEvU2hlbGwuaD4KKyMgIGluY2x1ZGUgPFgxMS9YYXcvTGFiZWwuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSAiZ3VpX2JldmFsLmgiCisKKyNpZm5kZWYgRkVBVF9HVUlfR1RLCitleHRlcm4gV2lkZ2V0IHZpbVNoZWxsOworCisvKgorICogQ3VycmVudGx5LCB3ZSBhc3N1bWUgdGhhdCB0aGVyZSBjYW4gYmUgb25seSBvbmUgQmFsbG9vbkV2YWwgc2hvd2luZworICogb24tc2NyZWVuIGF0IGFueSBnaXZlbiBtb21lbnQuICBUaGlzIHZhcmlhYmxlIHdpbGwgaG9sZCB0aGUgY3VycmVudGx5CisgKiBzaG93aW5nIEJhbGxvb25FdmFsIG9yIE5VTEwgaWYgbm9uZSBpcyBzaG93aW5nLgorICovCitzdGF0aWMgQmFsbG9vbkV2YWwgKmN1cnJlbnRfYmV2YWwgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSV9HVEsKK3N0YXRpYyB2b2lkIGFkZEV2ZW50SGFuZGxlciBfX0FSR1MoKEd0a1dpZGdldCAqLCBCYWxsb29uRXZhbCAqKSk7CitzdGF0aWMgdm9pZCByZW1vdmVFdmVudEhhbmRsZXIgX19BUkdTKChCYWxsb29uRXZhbCAqKSk7CitzdGF0aWMgZ2ludCB0YXJnZXRfZXZlbnRfY2IgX19BUkdTKChHdGtXaWRnZXQgKiwgR2RrRXZlbnQgKiwgZ3BvaW50ZXIpKTsKK3N0YXRpYyBnaW50IG1haW53aW5fZXZlbnRfY2IgX19BUkdTKChHdGtXaWRnZXQgKiwgR2RrRXZlbnQgKiwgZ3BvaW50ZXIpKTsKK3N0YXRpYyB2b2lkIHBvaW50ZXJfZXZlbnQgX19BUkdTKChCYWxsb29uRXZhbCAqLCBpbnQsIGludCwgdW5zaWduZWQpKTsKK3N0YXRpYyB2b2lkIGtleV9ldmVudCBfX0FSR1MoKEJhbGxvb25FdmFsICosIHVuc2lnbmVkLCBpbnQpKTsKK3N0YXRpYyBnaW50IHRpbWVvdXRfY2IgX19BUkdTKChncG9pbnRlcikpOworc3RhdGljIGdpbnQgYmFsbG9vbl9leHBvc2VfZXZlbnRfY2IgX19BUkdTKChHdGtXaWRnZXQgKiwgR2RrRXZlbnRFeHBvc2UgKiwgZ3BvaW50ZXIpKTsKKyMgaWZuZGVmIEhBVkVfR1RLMgorc3RhdGljIHZvaWQgYmFsbG9vbl9kcmF3X2NiIF9fQVJHUygoR3RrV2lkZ2V0ICosIEdka1JlY3RhbmdsZSAqLCBncG9pbnRlcikpOworIyBlbmRpZgorI2Vsc2UKK3N0YXRpYyB2b2lkIGFkZEV2ZW50SGFuZGxlciBfX0FSR1MoKFdpZGdldCwgQmFsbG9vbkV2YWwgKikpOworc3RhdGljIHZvaWQgcmVtb3ZlRXZlbnRIYW5kbGVyIF9fQVJHUygoQmFsbG9vbkV2YWwgKikpOworc3RhdGljIHZvaWQgcG9pbnRlckV2ZW50RUggX19BUkdTKChXaWRnZXQsIFh0UG9pbnRlciwgWEV2ZW50ICosIEJvb2xlYW4gKikpOworc3RhdGljIHZvaWQgcG9pbnRlckV2ZW50IF9fQVJHUygoQmFsbG9vbkV2YWwgKiwgWEV2ZW50ICopKTsKK3N0YXRpYyB2b2lkIHRpbWVyUm91dGluZSBfX0FSR1MoKFh0UG9pbnRlciwgWHRJbnRlcnZhbElkICopKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgY2FuY2VsQmFsbG9vbiBfX0FSR1MoKEJhbGxvb25FdmFsICopKTsKK3N0YXRpYyB2b2lkIHJlcXVlc3RCYWxsb29uIF9fQVJHUygoQmFsbG9vbkV2YWwgKikpOworc3RhdGljIHZvaWQgZHJhd0JhbGxvb24gX19BUkdTKChCYWxsb29uRXZhbCAqKSk7CitzdGF0aWMgdm9pZCB1bmRyYXdCYWxsb29uIF9fQVJHUygoQmFsbG9vbkV2YWwgKmJldmFsKSk7CitzdGF0aWMgdm9pZCBjcmVhdGVCYWxsb29uRXZhbFdpbmRvdyBfX0FSR1MoKEJhbGxvb25FdmFsICopKTsKKworCisKKy8qCisgKiBDcmVhdGUgYSBiYWxsb29uLWV2YWx1YXRpb24gYXJlYSBmb3IgYSBXaWRnZXQuCisgKiBUaGVyZSBjYW4gYmUgZWl0aGVyIGEgIm1lc2ciIGZvciBhIGZpeGVkIHN0cmluZyBvciAibWVzZ0NCIiB0byBnZW5lcmF0ZSBhCisgKiBtZXNzYWdlIGJ5IGNhbGxpbmcgdGhpcyBjYWxsYmFjayBmdW5jdGlvbi4KKyAqIFdoZW4gIm1lc2ciIGlzIG5vdCBOVUxMIGl0IG11c3QgcmVtYWluIHZhbGlkIGZvciBhcyBsb25nIGFzIHRoZSBiYWxsb29uIGlzCisgKiB1c2VkLiAgSXQgaXMgbm90IGZyZWVkIGhlcmUuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcmVzdWx0aW5nIG9iamVjdCAoTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkpLgorICovCisgICAgQmFsbG9vbkV2YWwgKgorZ3VpX21jaF9jcmVhdGVfYmV2YWxfYXJlYSh0YXJnZXQsIG1lc2csIG1lc2dDQiwgY2xpZW50RGF0YSkKKyAgICB2b2lkCSp0YXJnZXQ7CisgICAgY2hhcl91CSptZXNnOworICAgIHZvaWQJKCptZXNnQ0IpX19BUkdTKChCYWxsb29uRXZhbCAqLCBpbnQpKTsKKyAgICB2b2lkCSpjbGllbnREYXRhOworeworI2lmbmRlZiBGRUFUX0dVSV9HVEsKKyAgICBjaGFyCSpkaXNwbGF5X25hbWU7CSAgICAvKiBnZXQgZnJvbSBndWkuZHB5ICovCisgICAgaW50CQlzY3JlZW5fbnVtOworICAgIGNoYXIJKnA7CisjZW5kaWYKKyAgICBCYWxsb29uRXZhbAkqYmV2YWw7CisKKyAgICBpZiAobWVzZyAhPSBOVUxMICYmIG1lc2dDQiAhPSBOVUxMKQorICAgIHsKKwlFTVNHKF8oIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIikpOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIGJldmFsID0gKEJhbGxvb25FdmFsICopYWxsb2Moc2l6ZW9mKEJhbGxvb25FdmFsKSk7CisgICAgaWYgKGJldmFsICE9IE5VTEwpCisgICAgeworI2lmZGVmIEZFQVRfR1VJX0dUSworCWJldmFsLT50YXJnZXQgPSBHVEtfV0lER0VUKHRhcmdldCk7CisJYmV2YWwtPmJhbGxvb25TaGVsbCA9IE5VTEw7CisJYmV2YWwtPnRpbWVySUQgPSAwOworI2Vsc2UKKwliZXZhbC0+dGFyZ2V0ID0gKFdpZGdldCl0YXJnZXQ7CisJYmV2YWwtPmJhbGxvb25TaGVsbCA9IE5VTEw7CisJYmV2YWwtPnRpbWVySUQgPSAoWHRJbnRlcnZhbElkKU5VTEw7CisJYmV2YWwtPmFwcENvbnRleHQgPSBYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KChXaWRnZXQpdGFyZ2V0KTsKKyNlbmRpZgorCWJldmFsLT5zaG93U3RhdGUgPSBTaFNfTkVVVFJBTDsKKwliZXZhbC0+eCA9IDA7CisJYmV2YWwtPnkgPSAwOworCWJldmFsLT5tc2cgPSBtZXNnOworCWJldmFsLT5tc2dDQiA9IG1lc2dDQjsKKwliZXZhbC0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7CisKKwkvKgorCSAqIFNldCB1cCBldmVudCBoYW5kbGVyIHdoaWNoIHdpbGwga2VlcCBpdHMgZXllcyBvbiB0aGUgcG9pbnRlciwKKwkgKiBhbmQgd2hlbiB0aGUgcG9pbnRlciByZXN0cyBpbiBhIGNlcnRhaW4gc3BvdCBmb3IgYSBnaXZlbiB0aW1lCisJICogaW50ZXJ2YWwsIHNob3cgdGhlIGJldmFsLgorCSAqLworCWFkZEV2ZW50SGFuZGxlcihiZXZhbC0+dGFyZ2V0LCBiZXZhbCk7CisJY3JlYXRlQmFsbG9vbkV2YWxXaW5kb3coYmV2YWwpOworCisjaWZuZGVmIEZFQVRfR1VJX0dUSworCS8qCisJICogTm93IGNyZWF0ZSBhbmQgc2F2ZSB0aGUgc2NyZWVuIHdpZHRoIGFuZCBoZWlnaHQuIFVzZWQgaW4gZHJhd2luZy4KKwkgKi8KKwlkaXNwbGF5X25hbWUgPSBEaXNwbGF5U3RyaW5nKGd1aS5kcHkpOworCXAgPSBzdHJyY2hyKGRpc3BsYXlfbmFtZSwgJy4nKTsKKwlpZiAocCAhPSBOVUxMKQorCSAgICBzY3JlZW5fbnVtID0gYXRvaSgrK3ApOworCWVsc2UKKwkgICAgc2NyZWVuX251bSA9IDA7CisJYmV2YWwtPnNjcmVlbl93aWR0aCA9IERpc3BsYXlXaWR0aChndWkuZHB5LCBzY3JlZW5fbnVtKTsKKwliZXZhbC0+c2NyZWVuX2hlaWdodCA9IERpc3BsYXlIZWlnaHQoZ3VpLmRweSwgc2NyZWVuX251bSk7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gYmV2YWw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQkVWQUxfVElQKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIERlc3Ryb3kgYSBiYWxsb24tZXZhbCBhbmQgZnJlZSBpdHMgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2Rlc3Ryb3lfYmV2YWxfYXJlYShiZXZhbCkKKyAgICBCYWxsb29uRXZhbAkqYmV2YWw7Cit7CisgICAgY2FuY2VsQmFsbG9vbihiZXZhbCk7CisgICAgcmVtb3ZlRXZlbnRIYW5kbGVyKGJldmFsKTsKKyAgICAvKiBDaGlsZHJlbiB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZGVzdHJveWVkICovCisjIGlmZGVmIEZFQVRfR1VJX0dUSworICAgIGd0a193aWRnZXRfZGVzdHJveShiZXZhbC0+YmFsbG9vblNoZWxsKTsKKyMgZWxzZQorICAgIFh0RGVzdHJveVdpZGdldChiZXZhbC0+YmFsbG9vblNoZWxsKTsKKyMgZW5kaWYKKyAgICB2aW1fZnJlZShiZXZhbCk7Cit9CisjZW5kaWYKKworICAgIHZvaWQKK2d1aV9tY2hfZW5hYmxlX2JldmFsX2FyZWEoYmV2YWwpCisgICAgQmFsbG9vbkV2YWwJKmJldmFsOworeworICAgIGlmIChiZXZhbCAhPSBOVUxMKQorCWFkZEV2ZW50SGFuZGxlcihiZXZhbC0+dGFyZ2V0LCBiZXZhbCk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2Rpc2FibGVfYmV2YWxfYXJlYShiZXZhbCkKKyAgICBCYWxsb29uRXZhbAkqYmV2YWw7Cit7CisgICAgaWYgKGJldmFsICE9IE5VTEwpCisJcmVtb3ZlRXZlbnRIYW5kbGVyKGJldmFsKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9CRVZBTF9USVApIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBCYWxsb29uRXZhbCAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudGx5CisgKiBkaXNwbGF5ZWQgdG9vbHRpcC4gIFJldHVybnMgTlVMTCBpZiB0aGVyZSBpcyBubyB0b29sdGlwIGN1cnJlbnRseSBzaG93aW5nLgorICoKKyAqIEFzc3VtcHRpb246IE9ubHkgb25lIHRvb2x0aXAgY2FuIGJlIHNob3duIGF0IGEgdGltZS4KKyAqLworICAgIEJhbGxvb25FdmFsICoKK2d1aV9tY2hfY3VycmVudGx5X3Nob3dpbmdfYmV2YWwoKQoreworICAgIHJldHVybiBjdXJyZW50X2JldmFsOworfQorI2VuZGlmCisjZW5kaWYgLyogIUZFQVRfR1VJX1czMiAqLworCisjaWYgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkgfHwgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogR2V0IHRoZSB0ZXh0IGFuZCBwb3NpdGlvbiB0byBiZSBldmFsdWF0ZWQgZm9yICJiZXZhbCIuCisgKiBXaGVuICJ1c2luZ05ldGJlYW5zIiBpcyBzZXQgdGhlIHJldHVybmVkIHRleHQgaXMgaW4gYWxsb2NhdGVkIG1lbW9yeS4KKyAqIFJldHVybnMgT0sgb3IgRkFJTC4KKyAqLworICAgIGludAorZ3VpX21jaF9nZXRfYmV2YWxfaW5mbyhiZXZhbCwgZmlsZW5hbWUsIGxpbmUsIHRleHQsIGlkeCkKKyAgICBCYWxsb29uRXZhbAkqYmV2YWw7CisgICAgY2hhcl91ICAgICAqKmZpbGVuYW1lOworICAgIGludAkJKmxpbmU7CisgICAgY2hhcl91ICAgICAqKnRleHQ7CisgICAgaW50CQkqaWR4OworeworICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCXJvdywgY29sOworICAgIGNoYXJfdQkqbGJ1ZjsKKyAgICBsaW5lbnJfVAlsbnVtOworCisgICAgKnRleHQgPSBOVUxMOworICAgIHJvdyA9IFlfMl9ST1coYmV2YWwtPnkpOworICAgIGNvbCA9IFhfMl9DT0woYmV2YWwtPngpOworICAgIHdwID0gbW91c2VfZmluZF93aW4oJnJvdywgJmNvbCk7CisgICAgaWYgKHdwICE9IE5VTEwgJiYgcm93IDwgd3AtPndfaGVpZ2h0ICYmIGNvbCA8IFdfV0lEVEgod3ApKQorICAgIHsKKwkvKiBGb3VuZCBhIHdpbmRvdyBhbmQgdGhlIGN1cnNvciBpcyBpbiB0aGUgdGV4dC4gIE5vdyBmaW5kIHRoZSBsaW5lCisJICogbnVtYmVyLiAqLworCWlmICghbW91c2VfY29tcF9wb3Mod3AsICZyb3csICZjb2wsICZsbnVtKSkKKwl7CisJICAgIC8qIE5vdCBwYXN0IGVuZCBvZiB0aGUgZmlsZS4gKi8KKwkgICAgbGJ1ZiA9IG1sX2dldF9idWYod3AtPndfYnVmZmVyLCBsbnVtLCBGQUxTRSk7CisJICAgIGlmIChjb2wgPD0gd2luX2xpbmV0YWJzaXplKHdwLCBsYnVmLCAoY29sbnJfVClNQVhDT0wpKQorCSAgICB7CisJCS8qIE5vdCBwYXN0IGVuZCBvZiBsaW5lLiAqLworIyBpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKwkJaWYgKHVzaW5nTmV0YmVhbnMpCisJCXsKKwkJICAgIC8qIEZvciBOZXRiZWFucyB3ZSBnZXQgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIGxpbmUKKwkJICAgICAqIGluc3RlYWQgb2YgdGhlIHdob2xlIGxpbmUuICovCisJCSAgICBpbnQJCWxlbjsKKwkJICAgIHBvc19UCSpzcG9zID0gTlVMTCwgKmVwb3MgPSBOVUxMOworCisJCSAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKwkJICAgIHsKKwkJCWlmIChsdChWSXN1YWwsIGN1cndpbi0+d19jdXJzb3IpKQorCQkJeworCQkJICAgIHNwb3MgPSAmVklzdWFsOworCQkJICAgIGVwb3MgPSAmY3Vyd2luLT53X2N1cnNvcjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCSAgICBzcG9zID0gJmN1cndpbi0+d19jdXJzb3I7CisJCQkgICAgZXBvcyA9ICZWSXN1YWw7CisJCQl9CisJCSAgICB9CisKKwkJICAgIGNvbCA9IHZjb2wyY29sKHdwLCBsbnVtLCBjb2wpIC0gMTsKKworCQkgICAgaWYgKFZJc3VhbF9hY3RpdmUKKwkJCSAgICAmJiB3cC0+d19idWZmZXIgPT0gY3Vyd2luLT53X2J1ZmZlcgorCQkJICAgICYmIChsbnVtID09IHNwb3MtPmxudW0KKwkJCQk/IGNvbCA+PSAoaW50KXNwb3MtPmNvbAorCQkJCTogbG51bSA+IHNwb3MtPmxudW0pCisJCQkgICAgJiYgKGxudW0gPT0gZXBvcy0+bG51bQorCQkJCT8gY29sIDw9IChpbnQpZXBvcy0+Y29sCisJCQkJOiBsbnVtIDwgZXBvcy0+bG51bSkpCisJCSAgICB7CisJCQkvKiBWaXN1YWwgbW9kZSBhbmQgcG9pbnRpbmcgdG8gdGhlIGxpbmUgd2l0aCB0aGUKKwkJCSAqIFZpc3VhbCBzZWxlY3Rpb246IHJldHVybiBzZWxlY3RlZCB0ZXh0LCB3aXRoIGEKKwkJCSAqIG1heGltdW0gb2Ygb25lIGxpbmUuICovCisJCQlpZiAoc3Bvcy0+bG51bSAhPSBlcG9zLT5sbnVtIHx8IHNwb3MtPmNvbCA9PSBlcG9zLT5jb2wpCisJCQkgICAgcmV0dXJuIEZBSUw7CisKKwkJCWxidWYgPSBtbF9nZXRfYnVmKGN1cndpbi0+d19idWZmZXIsIFZJc3VhbC5sbnVtLCBGQUxTRSk7CisJCQlsYnVmID0gdmltX3N0cm5zYXZlKGxidWYgKyBzcG9zLT5jb2wsCisJCQkJICAgICBlcG9zLT5jb2wgLSBzcG9zLT5jb2wgKyAoKnBfc2VsICE9ICdlJykpOworCQkJbG51bSA9IHNwb3MtPmxudW07CisJCQljb2wgPSBzcG9zLT5jb2w7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQkvKiBGaW5kIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuICovCisJCQkrK2Vtc2dfb2ZmOworCQkJbGVuID0gZmluZF9pZGVudF9hdF9wb3Mod3AsIGxudW0sIChjb2xucl9UKWNvbCwgJmxidWYsCisJCQkJCUZJTkRfSURFTlQgKyBGSU5EX1NUUklORyArIEZJTkRfRVZBTCk7CisJCQktLWVtc2dfb2ZmOworCQkJaWYgKGxlbiA9PSAwKQorCQkJICAgIHJldHVybiBGQUlMOworCQkJbGJ1ZiA9IHZpbV9zdHJuc2F2ZShsYnVmLCBsZW4pOworCQkgICAgfQorCQl9CisjIGVuZGlmCisJCSpmaWxlbmFtZSA9IHdwLT53X2J1ZmZlci0+Yl9mZm5hbWU7CisJCSpsaW5lID0gKGludClsbnVtOworCQkqdGV4dCA9IGxidWY7CisJCSppZHggPSBjb2w7CisJCWJldmFsLT50cyA9IHdwLT53X2J1ZmZlci0+Yl9wX3RzOworCQlyZXR1cm4gT0s7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgcmV0dXJuIEZBSUw7Cit9CisKKyMgaWYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogU2hvdyBhIGJhbGxvb24gd2l0aCAibWVzZyIuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3Bvc3RfYmFsbG9vbihiZXZhbCwgbWVzZykKKyAgICBCYWxsb29uRXZhbAkqYmV2YWw7CisgICAgY2hhcl91CSptZXNnOworeworICAgIGJldmFsLT5tc2cgPSBtZXNnOworICAgIGlmIChtZXNnICE9IE5VTEwpCisJZHJhd0JhbGxvb24oYmV2YWwpOworICAgIGVsc2UKKwl1bmRyYXdCYWxsb29uKGJldmFsKTsKK30KKyMgZW5kaWYgLyogRkVBVF9HVUlfVzMyICovCisjZW5kaWYgLyogRkVBVF9TVU5fV09SS1NIT1AgfHwgRkVBVF9ORVRCRUFOU19JTlRHIHx8IFBST1RPICovCisKKyNpZiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpIHx8IGRlZmluZWQoUFJPVE8pCisjaWYgZGVmaW5lZChGRUFUX0JFVkFMX1RJUCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBIaWRlIHRoZSBnaXZlbiBiYWxsb29uLgorICovCisgICAgdm9pZAorZ3VpX21jaF91bnBvc3RfYmFsbG9vbihiZXZhbCkKKyAgICBCYWxsb29uRXZhbAkqYmV2YWw7Cit7CisgICAgdW5kcmF3QmFsbG9vbihiZXZhbCk7Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJX0dUSworLyoKKyAqIFdlIGNhbiB1bmNvbmRpdGlvbmFsbHkgdXNlIEFOU0ktc3R5bGUgcHJvdG90eXBlcyBoZXJlIHNpbmNlCisgKiBHVEsrIHJlcXVpcmVzIGFuIEFOU0kgQyBjb21waWxlciBhbnl3YXkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYWRkRXZlbnRIYW5kbGVyKEd0a1dpZGdldCAqdGFyZ2V0LCBCYWxsb29uRXZhbCAqYmV2YWwpCit7CisgICAgLyoKKyAgICAgKiBDb25uZWN0IHRvIHRoZSBnZW5lcmljICJldmVudCIgc2lnbmFsIGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwKKyAgICAgKiBzaWduYWxzIGZvciBlYWNoIGV2ZW50IHR5cGUsIGJlY2F1c2UgdGhlIGZvcm1lciBpcyBlbWl0dGVkIGVhcmxpZXIuCisgICAgICogVGhpcyBhbGxvd3MgdXMgdG8gY2F0Y2ggZXZlbnRzIGluZGVwZW5kZW50bHkgb2YgdGhlIHNpZ25hbCBoYW5kbGVycworICAgICAqIGluIGd1aV9ndGtfeDExLmMuCisgICAgICovCisgICAgLyogU2hvdWxkIHVzZSBHVEtfT0JKRUNUKCkgaGVyZSwgYnV0IHRoYXQgY2F1c2VzIGEgbGludCB3YXJuaW5nLi4uICovCisgICAgZ3RrX3NpZ25hbF9jb25uZWN0KChHdGtPYmplY3QqKSh0YXJnZXQpLCAiZXZlbnQiLAorCQkgICAgICAgR1RLX1NJR05BTF9GVU5DKHRhcmdldF9ldmVudF9jYiksCisJCSAgICAgICBiZXZhbCk7CisgICAgLyoKKyAgICAgKiBOYXN0eTogIEtleSBwcmVzcyBldmVudHMgZ28gdG8gdGhlIG1haW4gd2luZG93IHRodXMgdGhlIGRyYXdpbmcgYXJlYQorICAgICAqIHdpbGwgbmV2ZXIgc2VlIHRoZW0uICBUaGlzIG1lYW5zIHdlIGhhdmUgdG8gY29ubmVjdCB0byB0aGUgbWFpbiB3aW5kb3cKKyAgICAgKiBhcyB3ZWxsIGluIG9yZGVyIHRvIGNhdGNoIHRob3NlIGV2ZW50cy4KKyAgICAgKi8KKyAgICBpZiAoZ3RrX3NvY2tldF9pZCA9PSAwICYmIGd1aS5tYWlud2luICE9IE5VTEwKKwkgICAgJiYgZ3RrX3dpZGdldF9pc19hbmNlc3Rvcih0YXJnZXQsIGd1aS5tYWlud2luKSkKKyAgICB7CisJZ3RrX3NpZ25hbF9jb25uZWN0KChHdGtPYmplY3QqKShndWkubWFpbndpbiksICJldmVudCIsCisJCQkgICBHVEtfU0lHTkFMX0ZVTkMobWFpbndpbl9ldmVudF9jYiksCisJCQkgICBiZXZhbCk7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK3JlbW92ZUV2ZW50SGFuZGxlcihCYWxsb29uRXZhbCAqYmV2YWwpCit7CisgICAgZ3RrX3NpZ25hbF9kaXNjb25uZWN0X2J5X2Z1bmMoKEd0a09iamVjdCopKGJldmFsLT50YXJnZXQpLAorCQkJCSAgR1RLX1NJR05BTF9GVU5DKHRhcmdldF9ldmVudF9jYiksCisJCQkJICBiZXZhbCk7CisKKyAgICBpZiAoZ3RrX3NvY2tldF9pZCA9PSAwICYmIGd1aS5tYWlud2luICE9IE5VTEwKKwkgICAgJiYgZ3RrX3dpZGdldF9pc19hbmNlc3RvcihiZXZhbC0+dGFyZ2V0LCBndWkubWFpbndpbikpCisgICAgeworCWd0a19zaWduYWxfZGlzY29ubmVjdF9ieV9mdW5jKChHdGtPYmplY3QqKShndWkubWFpbndpbiksCisJCQkJICAgICAgR1RLX1NJR05BTF9GVU5DKG1haW53aW5fZXZlbnRfY2IpLAorCQkJCSAgICAgIGJldmFsKTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgZ2ludAordGFyZ2V0X2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgQmFsbG9vbkV2YWwgKmJldmFsID0gKEJhbGxvb25FdmFsICopZGF0YTsKKworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpCisgICAgeworCWNhc2UgR0RLX0VOVEVSX05PVElGWToKKwkgICAgcG9pbnRlcl9ldmVudChiZXZhbCwgKGludClldmVudC0+Y3Jvc3NpbmcueCwKKwkJCQkgKGludClldmVudC0+Y3Jvc3NpbmcueSwKKwkJCQkgZXZlbnQtPmNyb3NzaW5nLnN0YXRlKTsKKwkgICAgYnJlYWs7CisJY2FzZSBHREtfTU9USU9OX05PVElGWToKKwkgICAgaWYgKGV2ZW50LT5tb3Rpb24uaXNfaGludCkKKwkgICAgeworCQlpbnQJCXg7CisJCWludAkJeTsKKwkJR2RrTW9kaWZpZXJUeXBlCXN0YXRlOworCQkvKgorCQkgKiBHREtfUE9JTlRFUl9NT1RJT05fSElOVF9NQVNLIGlzIHNldCwgdGh1cyB3ZSBjYW5ub3Qgb2J0YWluCisJCSAqIHRoZSBjb29yZGluYXRlcyBmcm9tIHRoZSBHZGtFdmVudE1vdGlvbiBzdHJ1Y3QgZGlyZWN0bHkuCisJCSAqLworCQlnZGtfd2luZG93X2dldF9wb2ludGVyKHdpZGdldC0+d2luZG93LCAmeCwgJnksICZzdGF0ZSk7CisJCXBvaW50ZXJfZXZlbnQoYmV2YWwsIHgsIHksICh1bnNpZ25lZCBpbnQpc3RhdGUpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlwb2ludGVyX2V2ZW50KGJldmFsLCAoaW50KWV2ZW50LT5tb3Rpb24ueCwKKwkJCQkgICAgIChpbnQpZXZlbnQtPm1vdGlvbi55LAorCQkJCSAgICAgZXZlbnQtPm1vdGlvbi5zdGF0ZSk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBHREtfTEVBVkVfTk9USUZZOgorCSAgICAvKgorCSAgICAgKiBJZ25vcmUgTGVhdmVOb3RpZnkgZXZlbnRzIHRoYXQgYXJlIG5vdCAibm9ybWFsIi4KKwkgICAgICogQXBwYXJlbnRseSB3ZSBhbHNvIGdldCBpdCB3aGVuIHNvbWVib2R5IGVsc2UgZ3JhYnMgZm9jdXMuCisJICAgICAqLworCSAgICBpZiAoZXZlbnQtPmNyb3NzaW5nLm1vZGUgPT0gR0RLX0NST1NTSU5HX05PUk1BTCkKKwkJY2FuY2VsQmFsbG9vbihiZXZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKKyMgaWZkZWYgSEFWRV9HVEsyCisJY2FzZSBHREtfU0NST0xMOgorIyBlbmRpZgorCSAgICBjYW5jZWxCYWxsb29uKGJldmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSBHREtfS0VZX1BSRVNTOgorCSAgICBrZXlfZXZlbnQoYmV2YWwsIGV2ZW50LT5rZXkua2V5dmFsLCBUUlVFKTsKKwkgICAgYnJlYWs7CisJY2FzZSBHREtfS0VZX1JFTEVBU0U6CisJICAgIGtleV9ldmVudChiZXZhbCwgZXZlbnQtPmtleS5rZXl2YWwsIEZBTFNFKTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOyAvKiBjb250aW51ZSBlbWlzc2lvbiAqLworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgZ2ludAorbWFpbndpbl9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQgKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIEJhbGxvb25FdmFsICpiZXZhbCA9IChCYWxsb29uRXZhbCAqKWRhdGE7CisKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKQorICAgIHsKKwljYXNlIEdES19LRVlfUFJFU1M6CisJICAgIGtleV9ldmVudChiZXZhbCwgZXZlbnQtPmtleS5rZXl2YWwsIFRSVUUpOworCSAgICBicmVhazsKKwljYXNlIEdES19LRVlfUkVMRUFTRToKKwkgICAga2V5X2V2ZW50KGJldmFsLCBldmVudC0+a2V5LmtleXZhbCwgRkFMU0UpOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gRkFMU0U7IC8qIGNvbnRpbnVlIGVtaXNzaW9uICovCit9CisKKyAgICBzdGF0aWMgdm9pZAorcG9pbnRlcl9ldmVudChCYWxsb29uRXZhbCAqYmV2YWwsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgc3RhdGUpCit7CisgICAgaW50IGRpc3RhbmNlOworCisgICAgZGlzdGFuY2UgPSBBQlMoeCAtIGJldmFsLT54KSArIEFCUyh5IC0gYmV2YWwtPnkpOworCisgICAgaWYgKGRpc3RhbmNlID4gNCkKKyAgICB7CisJLyoKKwkgKiBNb3ZlZCBvdXQgb2YgdGhlIGJhbGxvb24gbG9jYXRpb246IGNhbmNlbCBpdC4KKwkgKiBSZW1lbWJlciBidXR0b24gc3RhdGUKKwkgKi8KKwliZXZhbC0+c3RhdGUgPSBzdGF0ZTsKKwljYW5jZWxCYWxsb29uKGJldmFsKTsKKworCS8qIE1vdXNlIGJ1dHRvbnMgYXJlIHByZXNzZWQgLSBubyBiYWxsb29uIG5vdyAqLworCWlmICghKHN0YXRlICYgKChpbnQpR0RLX0JVVFRPTjFfTUFTSyB8IChpbnQpR0RLX0JVVFRPTjJfTUFTSworCQkJCQkJICAgIHwgKGludClHREtfQlVUVE9OM19NQVNLKSkpCisJeworCSAgICBiZXZhbC0+eCA9IHg7CisJICAgIGJldmFsLT55ID0geTsKKworCSAgICBpZiAoc3RhdGUgJiAoaW50KUdES19NT0QxX01BU0spCisJICAgIHsKKwkJLyoKKwkJICogQWx0IGlzIHByZXNzZWQgLS0gZW50ZXIgc3VwZXItZXZhbHVhdGUtbW9kZSwKKwkJICogd2hlcmUgdGhlcmUgaXMgbm8gdGltZSBkZWxheQorCQkgKi8KKwkJaWYgKGJldmFsLT5tc2dDQiAhPSBOVUxMKQorCQl7CisJCSAgICBiZXZhbC0+c2hvd1N0YXRlID0gU2hTX1BFTkRJTkc7CisJCSAgICAoKmJldmFsLT5tc2dDQikoYmV2YWwsIHN0YXRlKTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQliZXZhbC0+dGltZXJJRCA9IGd0a190aW1lb3V0X2FkZCgoZ3VpbnQzMilwX2JkbGF5LAorCQkJCQkJICZ0aW1lb3V0X2NiLCBiZXZhbCk7CisJICAgIH0KKwl9CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK2tleV9ldmVudChCYWxsb29uRXZhbCAqYmV2YWwsIHVuc2lnbmVkIGtleXZhbCwgaW50IGlzX2tleXByZXNzKQoreworICAgIGlmIChiZXZhbC0+c2hvd1N0YXRlID09IFNoU19TSE9XSU5HICYmIGJldmFsLT5tc2dDQiAhPSBOVUxMKQorICAgIHsKKwlzd2l0Y2ggKGtleXZhbCkKKwl7CisJICAgIGNhc2UgR0RLX1NoaWZ0X0w6CisJICAgIGNhc2UgR0RLX1NoaWZ0X1I6CisJCWJldmFsLT5zaG93U3RhdGUgPSBTaFNfVVBEQVRFX1BFTkRJTkc7CisJCSgqYmV2YWwtPm1zZ0NCKShiZXZhbCwgKGlzX2tleXByZXNzKQorCQkJCQkJICAgPyAoaW50KUdES19TSElGVF9NQVNLIDogMCk7CisJCWJyZWFrOworCSAgICBjYXNlIEdES19Db250cm9sX0w6CisJICAgIGNhc2UgR0RLX0NvbnRyb2xfUjoKKwkJYmV2YWwtPnNob3dTdGF0ZSA9IFNoU19VUERBVEVfUEVORElORzsKKwkJKCpiZXZhbC0+bXNnQ0IpKGJldmFsLCAoaXNfa2V5cHJlc3MpCisJCQkJCQkgPyAoaW50KUdES19DT05UUk9MX01BU0sgOiAwKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWNhbmNlbEJhbGxvb24oYmV2YWwpOworCQlicmVhazsKKwl9CisgICAgfQorICAgIGVsc2UKKwljYW5jZWxCYWxsb29uKGJldmFsKTsKK30KKworICAgIHN0YXRpYyBnaW50Cit0aW1lb3V0X2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgQmFsbG9vbkV2YWwgKmJldmFsID0gKEJhbGxvb25FdmFsICopZGF0YTsKKworICAgIGJldmFsLT50aW1lcklEID0gMDsKKyAgICAvKgorICAgICAqIElmIHRoZSB0aW1lciBldmVudCBoYXBwZW5zIHRoZW4gdGhlIG1vdXNlIGhhcyBzdG9wcGVkIGxvbmcgZW5vdWdoIGZvcgorICAgICAqIGEgcmVxdWVzdCB0byBiZSBzdGFydGVkLiBUaGUgcmVxdWVzdCB3aWxsIG9ubHkgc2VuZCB0byB0aGUgZGVidWdnZXIgaWYKKyAgICAgKiB0aGVyZSB0aGUgbW91c2UgaXMgcG9pbnRpbmcgYXQgcmVhbCBkYXRhLgorICAgICAqLworICAgIHJlcXVlc3RCYWxsb29uKGJldmFsKTsKKworICAgIHJldHVybiBGQUxTRTsgLyogZG9uJ3QgY2FsbCBtZSBhZ2FpbiAqLworfQorCisvKkFSR1NVU0VEMiovCisgICAgc3RhdGljIGdpbnQKK2JhbGxvb25fZXhwb3NlX2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3BhaW50X2ZsYXRfYm94KHdpZGdldC0+c3R5bGUsIHdpZGdldC0+d2luZG93LAorCQkgICAgICAgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19PVVQsCisJCSAgICAgICAmZXZlbnQtPmFyZWEsIHdpZGdldCwgInRvb2x0aXAiLAorCQkgICAgICAgMCwgMCwgLTEsIC0xKTsKKworICAgIHJldHVybiBGQUxTRTsgLyogY29udGludWUgZW1pc3Npb24gKi8KK30KKworIyBpZm5kZWYgSEFWRV9HVEsyCisvKkFSR1NVU0VEMiovCisgICAgc3RhdGljIHZvaWQKK2JhbGxvb25fZHJhd19jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrUmVjdGFuZ2xlICphcmVhLCBncG9pbnRlciBkYXRhKQoreworICAgIEd0a1dpZGdldAkgICAgKmNoaWxkOworICAgIEdka1JlY3RhbmdsZSAgICBjaGlsZF9hcmVhOworCisgICAgZ3RrX3BhaW50X2ZsYXRfYm94KHdpZGdldC0+c3R5bGUsIHdpZGdldC0+d2luZG93LAorCQkgICAgICAgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19PVVQsCisJCSAgICAgICBhcmVhLCB3aWRnZXQsICJ0b29sdGlwIiwKKwkJICAgICAgIDAsIDAsIC0xLCAtMSk7CisKKyAgICBjaGlsZCA9IEdUS19CSU4od2lkZ2V0KS0+Y2hpbGQ7CisKKyAgICBpZiAoZ3RrX3dpZGdldF9pbnRlcnNlY3QoY2hpbGQsIGFyZWEsICZjaGlsZF9hcmVhKSkKKwlndGtfd2lkZ2V0X2RyYXcoY2hpbGQsICZjaGlsZF9hcmVhKTsKK30KKyMgZW5kaWYKKworI2Vsc2UgLyogIUZFQVRfR1VJX0dUSyAqLworCisgICAgc3RhdGljIHZvaWQKK2FkZEV2ZW50SGFuZGxlcih0YXJnZXQsIGJldmFsKQorICAgIFdpZGdldAl0YXJnZXQ7CisgICAgQmFsbG9vbkV2YWwJKmJldmFsOworeworICAgIFh0QWRkRXZlbnRIYW5kbGVyKHRhcmdldCwKKwkJCVBvaW50ZXJNb3Rpb25NYXNrIHwgRW50ZXJXaW5kb3dNYXNrIHwKKwkJCUxlYXZlV2luZG93TWFzayB8IEJ1dHRvblByZXNzTWFzayB8IEtleVByZXNzTWFzayB8CisJCQlLZXlSZWxlYXNlTWFzaywKKwkJCUZhbHNlLAorCQkJcG9pbnRlckV2ZW50RUgsIChYdFBvaW50ZXIpYmV2YWwpOworfQorCisgICAgc3RhdGljIHZvaWQKK3JlbW92ZUV2ZW50SGFuZGxlcihiZXZhbCkKKyAgICBCYWxsb29uRXZhbAkqYmV2YWw7Cit7CisgICAgWHRSZW1vdmVFdmVudEhhbmRsZXIoYmV2YWwtPnRhcmdldCwKKwkJCVBvaW50ZXJNb3Rpb25NYXNrIHwgRW50ZXJXaW5kb3dNYXNrIHwKKwkJCUxlYXZlV2luZG93TWFzayB8IEJ1dHRvblByZXNzTWFzayB8IEtleVByZXNzTWFzayB8CisJCQlLZXlSZWxlYXNlTWFzaywKKwkJCUZhbHNlLAorCQkJcG9pbnRlckV2ZW50RUgsIChYdFBvaW50ZXIpYmV2YWwpOworfQorCisKKy8qCisgKiBUaGUgWCBldmVudCBoYW5kbGVyLiBBbGwgaXQgZG9lcyBpcyBjYWxsIHRoZSByZWFsIGV2ZW50IGhhbmRsZXIuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitwb2ludGVyRXZlbnRFSCh3LCBjbGllbnRfZGF0YSwgZXZlbnQsIHVudXNlZCkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGE7CisgICAgWEV2ZW50CSpldmVudDsKKyAgICBCb29sZWFuCSp1bnVzZWQ7Cit7CisgICAgQmFsbG9vbkV2YWwgKmJldmFsID0gKEJhbGxvb25FdmFsICopY2xpZW50X2RhdGE7CisgICAgcG9pbnRlckV2ZW50KGJldmFsLCBldmVudCk7Cit9CisKKworLyoKKyAqIFRoZSByZWFsIGV2ZW50IGhhbmRsZXIuIENhbGxlZCBieSBwb2ludGVyRXZlbnRFSCgpIHdoZW5ldmVyIGFuIGV2ZW50IHdlIGFyZQorICogaW50ZXJlc3RlZCBpbiBvY3VycnMuCisgKi8KKworICAgIHN0YXRpYyB2b2lkCitwb2ludGVyRXZlbnQoYmV2YWwsIGV2ZW50KQorICAgIEJhbGxvb25FdmFsCSpiZXZhbDsKKyAgICBYRXZlbnQJKmV2ZW50OworeworICAgIFBvc2l0aW9uCWRpc3RhbmNlOwkgICAgLyogYSBtZWFzdXJlIG9mIGhvdyBtdWNoIHRoZSBwb250ZXIgbW92ZWQgKi8KKyAgICBQb3NpdGlvbglkZWx0YTsJCSAgICAvKiB1c2VkIHRvIGNvbXB1dGUgZGlzdGFuY2UgKi8KKworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpCisgICAgeworCWNhc2UgRW50ZXJOb3RpZnk6CisJY2FzZSBNb3Rpb25Ob3RpZnk6CisJICAgIGRlbHRhID0gZXZlbnQtPnhtb3Rpb24ueCAtIGJldmFsLT54OworCSAgICBpZiAoZGVsdGEgPCAwKQorCQlkZWx0YSA9IC1kZWx0YTsKKwkgICAgZGlzdGFuY2UgPSBkZWx0YTsKKwkgICAgZGVsdGEgPSBldmVudC0+eG1vdGlvbi55IC0gYmV2YWwtPnk7CisJICAgIGlmIChkZWx0YSA8IDApCisJCWRlbHRhID0gLWRlbHRhOworCSAgICBkaXN0YW5jZSArPSBkZWx0YTsKKwkgICAgaWYgKGRpc3RhbmNlID4gNCkKKwkgICAgeworCQkvKgorCQkgKiBNb3ZlZCBvdXQgb2YgdGhlIGJhbGxvb24gbG9jYXRpb246IGNhbmNlbCBpdC4KKwkJICogUmVtZW1iZXIgYnV0dG9uIHN0YXRlCisJCSAqLworCQliZXZhbC0+c3RhdGUgPSBldmVudC0+eG1vdGlvbi5zdGF0ZTsKKwkJaWYgKGJldmFsLT5zdGF0ZSAmIChCdXR0b24xTWFza3xCdXR0b24yTWFza3xCdXR0b24zTWFzaykpCisJCXsKKwkJICAgIC8qIE1vdXNlIGJ1dHRvbnMgYXJlIHByZXNzZWQgLSBubyBiYWxsb29uIG5vdyAqLworCQkgICAgY2FuY2VsQmFsbG9vbihiZXZhbCk7CisJCX0KKwkJZWxzZSBpZiAoYmV2YWwtPnN0YXRlICYgKE1vZDFNYXNrfE1vZDJNYXNrfE1vZDNNYXNrKSkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIEFsdCBpcyBwcmVzc2VkIC0tIGVudGVyIHN1cGVyLWV2YWx1YXRlLW1vZGUsCisJCSAgICAgKiB3aGVyZSB0aGVyZSBpcyBubyB0aW1lIGRlbGF5CisJCSAgICAgKi8KKwkJICAgIGJldmFsLT54ID0gZXZlbnQtPnhtb3Rpb24ueDsKKwkJICAgIGJldmFsLT55ID0gZXZlbnQtPnhtb3Rpb24ueTsKKwkJICAgIGJldmFsLT54X3Jvb3QgPSBldmVudC0+eG1vdGlvbi54X3Jvb3Q7CisJCSAgICBiZXZhbC0+eV9yb290ID0gZXZlbnQtPnhtb3Rpb24ueV9yb290OworCQkgICAgY2FuY2VsQmFsbG9vbihiZXZhbCk7CisJCSAgICBpZiAoYmV2YWwtPm1zZ0NCICE9IE5VTEwpCisJCSAgICB7CisJCQliZXZhbC0+c2hvd1N0YXRlID0gU2hTX1BFTkRJTkc7CisJCQkoKmJldmFsLT5tc2dDQikoYmV2YWwsIGJldmFsLT5zdGF0ZSk7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBiZXZhbC0+eCA9IGV2ZW50LT54bW90aW9uLng7CisJCSAgICBiZXZhbC0+eSA9IGV2ZW50LT54bW90aW9uLnk7CisJCSAgICBiZXZhbC0+eF9yb290ID0gZXZlbnQtPnhtb3Rpb24ueF9yb290OworCQkgICAgYmV2YWwtPnlfcm9vdCA9IGV2ZW50LT54bW90aW9uLnlfcm9vdDsKKwkJICAgIGNhbmNlbEJhbGxvb24oYmV2YWwpOworCQkgICAgYmV2YWwtPnRpbWVySUQgPSBYdEFwcEFkZFRpbWVPdXQoIGJldmFsLT5hcHBDb250ZXh0LAorCQkJCQkobG9uZ191KXBfYmRsYXksIHRpbWVyUm91dGluZSwgYmV2YWwpOworCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkvKgorCSAqIE1vdGlmIGFuZCBBdGhlbmEgdmVyc2lvbjogS2V5c3Ryb2tlcyB3aWxsIGJlIGNhdWdodCBieSB0aGUKKwkgKiAidGV4dEFyZWEiIHdpZGdldCwgYW5kIGhhbmRsZWQgaW4gZ3VpX3gxMV9rZXlfaGl0X2NiKCkuCisJICovCisJY2FzZSBLZXlQcmVzczoKKwkgICAgaWYgKGJldmFsLT5zaG93U3RhdGUgPT0gU2hTX1NIT1dJTkcgJiYgYmV2YWwtPm1zZ0NCICE9IE5VTEwpCisJICAgIHsKKwkJTW9kaWZpZXJzICAgbW9kaWZpZXI7CisJCUtleVN5bQkgICAga2V5c3ltOworCisJCVh0VHJhbnNsYXRlS2V5Y29kZShndWkuZHB5LAorCQkJCSAgICAgICBldmVudC0+eGtleS5rZXljb2RlLCBldmVudC0+eGtleS5zdGF0ZSwKKwkJCQkgICAgICAgJm1vZGlmaWVyLCAma2V5c3ltKTsKKwkJaWYgKGtleXN5bSA9PSBYS19TaGlmdF9MIHx8IGtleXN5bSA9PSBYS19TaGlmdF9SKQorCQl7CisJCSAgICBiZXZhbC0+c2hvd1N0YXRlID0gU2hTX1VQREFURV9QRU5ESU5HOworCQkgICAgKCpiZXZhbC0+bXNnQ0IpKGJldmFsLCBTaGlmdE1hc2spOworCQl9CisJCWVsc2UgaWYgKGtleXN5bSA9PSBYS19Db250cm9sX0wgfHwga2V5c3ltID09IFhLX0NvbnRyb2xfUikKKwkJeworCQkgICAgYmV2YWwtPnNob3dTdGF0ZSA9IFNoU19VUERBVEVfUEVORElORzsKKwkJICAgICgqYmV2YWwtPm1zZ0NCKShiZXZhbCwgQ29udHJvbE1hc2spOworCQl9CisJCWVsc2UKKwkJICAgIGNhbmNlbEJhbGxvb24oYmV2YWwpOworCSAgICB9CisJICAgIGVsc2UKKwkJY2FuY2VsQmFsbG9vbihiZXZhbCk7CisJICAgIGJyZWFrOworCisJY2FzZSBLZXlSZWxlYXNlOgorCSAgICBpZiAoYmV2YWwtPnNob3dTdGF0ZSA9PSBTaFNfU0hPV0lORyAmJiBiZXZhbC0+bXNnQ0IgIT0gTlVMTCkKKwkgICAgeworCQlNb2RpZmllcnMgbW9kaWZpZXI7CisJCUtleVN5bSBrZXlzeW07CisKKwkJWHRUcmFuc2xhdGVLZXljb2RlKGd1aS5kcHksIGV2ZW50LT54a2V5LmtleWNvZGUsCisJCQkJZXZlbnQtPnhrZXkuc3RhdGUsICZtb2RpZmllciwgJmtleXN5bSk7CisJCWlmICgoa2V5c3ltID09IFhLX1NoaWZ0X0wpIHx8IChrZXlzeW0gPT0gWEtfU2hpZnRfUikpIHsKKwkJICAgIGJldmFsLT5zaG93U3RhdGUgPSBTaFNfVVBEQVRFX1BFTkRJTkc7CisJCSAgICAoKmJldmFsLT5tc2dDQikoYmV2YWwsIDApOworCQl9CisJCWVsc2UgaWYgKChrZXlzeW0gPT0gWEtfQ29udHJvbF9MKSB8fCAoa2V5c3ltID09IFhLX0NvbnRyb2xfUikpCisJCXsKKwkJICAgIGJldmFsLT5zaG93U3RhdGUgPSBTaFNfVVBEQVRFX1BFTkRJTkc7CisJCSAgICAoKmJldmFsLT5tc2dDQikoYmV2YWwsIDApOworCQl9CisJCWVsc2UKKwkJICAgIGNhbmNlbEJhbGxvb24oYmV2YWwpOworCSAgICB9CisJICAgIGVsc2UKKwkJY2FuY2VsQmFsbG9vbihiZXZhbCk7CisJICAgIGJyZWFrOworCisJY2FzZSBMZWF2ZU5vdGlmeToKKwkJLyogSWdub3JlIExlYXZlTm90aWZ5IGV2ZW50cyB0aGF0IGFyZSBub3QgIm5vcm1hbCIuCisJCSAqIEFwcGFyZW50bHkgd2UgYWxzbyBnZXQgaXQgd2hlbiBzb21lYm9keSBlbHNlIGdyYWJzIGZvY3VzLgorCQkgKiBIYXBwZW5zIGZvciBtZSBldmVyeSB0d28gc2Vjb25kcyAoc29tZSBjbGlwYm9hcmQgdG9vbD8pICovCisJCWlmIChldmVudC0+eGNyb3NzaW5nLm1vZGUgPT0gTm90aWZ5Tm9ybWFsKQorCQkgICAgY2FuY2VsQmFsbG9vbihiZXZhbCk7CisJCWJyZWFrOworCisJY2FzZSBCdXR0b25QcmVzczoKKwkJY2FuY2VsQmFsbG9vbihiZXZhbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkgICAgYnJlYWs7CisgICAgfQorfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAordGltZXJSb3V0aW5lKGR4LCBpZCkKKyAgICBYdFBvaW50ZXIJICAgIGR4OworICAgIFh0SW50ZXJ2YWxJZCAgICAqaWQ7Cit7CisgICAgQmFsbG9vbkV2YWwgKmJldmFsID0gKEJhbGxvb25FdmFsICopZHg7CisKKyAgICBiZXZhbC0+dGltZXJJRCA9IChYdEludGVydmFsSWQpTlVMTDsKKworICAgIC8qCisgICAgICogSWYgdGhlIHRpbWVyIGV2ZW50IGhhcHBlbnMgdGhlbiB0aGUgbW91c2UgaGFzIHN0b3BwZWQgbG9uZyBlbm91Z2ggZm9yCisgICAgICogYSByZXF1ZXN0IHRvIGJlIHN0YXJ0ZWQuIFRoZSByZXF1ZXN0IHdpbGwgb25seSBzZW5kIHRvIHRoZSBkZWJ1Z2dlciBpZgorICAgICAqIHRoZXJlIHRoZSBtb3VzZSBpcyBwb2ludGluZyBhdCByZWFsIGRhdGEuCisgICAgICovCisgICAgcmVxdWVzdEJhbGxvb24oYmV2YWwpOworfQorCisjZW5kaWYgLyogIUZFQVRfR1VJX0dUSyAqLworCisgICAgc3RhdGljIHZvaWQKK3JlcXVlc3RCYWxsb29uKGJldmFsKQorICAgIEJhbGxvb25FdmFsCSpiZXZhbDsKK3sKKyAgICBpZiAoYmV2YWwtPnNob3dTdGF0ZSAhPSBTaFNfUEVORElORykKKyAgICB7CisJLyogRGV0ZXJtaW5lIHRoZSBiZXZhbCB0byBkaXNwbGF5ICovCisJaWYgKGJldmFsLT5tc2dDQiAhPSBOVUxMKQorCXsKKwkgICAgYmV2YWwtPnNob3dTdGF0ZSA9IFNoU19QRU5ESU5HOworCSAgICAoKmJldmFsLT5tc2dDQikoYmV2YWwsIGJldmFsLT5zdGF0ZSk7CisJfQorCWVsc2UgaWYgKGJldmFsLT5tc2cgIT0gTlVMTCkKKwkgICAgZHJhd0JhbGxvb24oYmV2YWwpOworICAgIH0KK30KKworI2lmZGVmIEZFQVRfR1VJX0dUSworCisjIGlmZGVmIEhBVkVfR1RLMgorLyoKKyAqIENvbnZlcnQgdGhlIHN0cmluZyB0byBVVEYtOCBpZiAnZW5jb2RpbmcnIGlzIG5vdCAidXRmLTgiLgorICogUmVwbGFjZSBhbnkgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGFuZCBpbnZhbGlkIGJ5dGVzIHNlcXVlbmNlcyB3aXRoCisgKiAiXlgiIG9yICI8eHg+IiBlc2NhcGVzLCBhbmQgYXBwbHkgU3BlY2lhbEtleSBoaWdobGlnaHRpbmcgdG8gdGhlbS4KKyAqIFRBQiBhbmQgTkwgYXJlIHBhc3NlZCB0aHJvdWdoIHVuc2NhdGhlZC4KKyAqLworIyAgZGVmaW5lIElTX05PTlBSSU5UQUJMRShjKSAoKChjKSA8IDB4MjAgJiYgKGMpICE9IFRBQiAmJiAoYykgIT0gTkwpIFwKKwkJCSAgICAgIHx8IChjKSA9PSBERUwpCisgICAgc3RhdGljIHZvaWQKK3NldF9wcmludGFibGVfbGFiZWxfdGV4dChHdGtMYWJlbCAqbGFiZWwsIGNoYXJfdSAqbXNnKQoreworICAgIGNoYXJfdQkgICAgKmNvbnZidWYgPSBOVUxMOworICAgIGNoYXJfdQkgICAgKmJ1ZjsKKyAgICBjaGFyX3UJICAgICpwOworICAgIGNoYXJfdQkgICAgKnBkZXN0OworICAgIHVuc2lnbmVkIGludCAgICBsZW47CisgICAgaW50CQkgICAgY2hhcmxlbjsKKyAgICBpbnQJCSAgICB1YzsKKyAgICBQYW5nb0F0dHJMaXN0ICAgKmF0dHJfbGlzdDsKKworICAgIC8qIENvbnZlcnQgdG8gVVRGLTggaWYgaXQgaXNuJ3QgYWxyZWFkeSAqLworICAgIGlmIChvdXRwdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKyAgICB7CisJY29udmJ1ZiA9IHN0cmluZ19jb252ZXJ0KCZvdXRwdXRfY29udiwgbXNnLCBOVUxMKTsKKwlpZiAoY29udmJ1ZiAhPSBOVUxMKQorCSAgICBtc2cgPSBjb252YnVmOworICAgIH0KKworICAgIC8qIEZpcnN0IGxldCdzIHNlZSBob3cgbXVjaCB3ZSBuZWVkIHRvIGFsbG9jYXRlICovCisgICAgbGVuID0gMDsKKyAgICBmb3IgKHAgPSBtc2c7ICpwICE9IE5VTDsgcCArPSBjaGFybGVuKQorICAgIHsKKwlpZiAoKCpwICYgMHg4MCkgPT0gMCkJLyogYmUgcXVpY2sgZm9yIEFTQ0lJICovCisJeworCSAgICBjaGFybGVuID0gMTsKKwkgICAgbGVuICs9IElTX05PTlBSSU5UQUJMRSgqcCkgPyAyIDogMTsJLyogbm9ucHJpbnRhYmxlOiBeWCAqLworCX0KKwllbHNlCisJeworCSAgICBjaGFybGVuID0gdXRmX3B0cjJsZW5fY2hlY2socCk7CisJICAgIHVjID0gdXRmX3B0cjJjaGFyKHApOworCisJICAgIGlmIChjaGFybGVuICE9IHV0Zl9jaGFyMmxlbih1YykpCisJCWNoYXJsZW4gPSAxOyAvKiByZWplY3Qgb3Zlcmxvbmcgc2VxdWVuY2VzICovCisKKwkgICAgaWYgKGNoYXJsZW4gPT0gMSB8fCB1YyA8IDB4YTApCS8qIGlsbGVnYWwgYnl0ZSBvciAgICAqLworCQlsZW4gKz0gNDsJCQkvKiBjb250cm9sIGNoYXI6IDx4eD4gKi8KKwkgICAgZWxzZSBpZiAoIXV0Zl9wcmludGFibGUodWMpKQorCQkvKiBOb3RlOiB3ZSBhc3N1bWUgaGVyZSB0aGF0IHV0Zl9wcmludGFibGUoKSBkb2Vzbid0CisJCSAqIGNhcmUgYWJvdXQgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBCTVAuICovCisJCWxlbiArPSA2OwkJCS8qIG5vbnByaW50YWJsZTogPHh4eHg+ICovCisJICAgIGVsc2UKKwkJbGVuICs9IGNoYXJsZW47CisJfQorICAgIH0KKworICAgIGF0dHJfbGlzdCA9IHBhbmdvX2F0dHJfbGlzdF9uZXcoKTsKKyAgICBidWYgPSBhbGxvYyhsZW4gKyAxKTsKKworICAgIC8qIE5vdyBnbyBmb3IgdGhlIHJlYWwgd29yayAqLworICAgIGlmIChidWYgIT0gTlVMTCkKKyAgICB7CisJYXR0cmVudHJ5X1QJKmFlcDsKKwlQYW5nb0F0dHJpYnV0ZQkqYXR0cjsKKwlndWljb2xvcl9UCXBpeGVsOworCUdka0NvbG9yCWNvbG9yID0geyAwLCAwLCAwLCAwIH07CisKKwkvKiBMb29rIHVwIHRoZSBSR0IgdmFsdWVzIG9mIHRoZSBTcGVjaWFsS2V5IGZvcmVncm91bmQgY29sb3IuICovCisJYWVwID0gc3luX2d1aV9hdHRyMmVudHJ5KGhsX2F0dHIoSExGXzgpKTsKKwlwaXhlbCA9IChhZXAgIT0gTlVMTCkgPyBhZXAtPmFlX3UuZ3VpLmZnX2NvbG9yIDogSU5WQUxDT0xPUjsKKwlpZiAocGl4ZWwgIT0gSU5WQUxDT0xPUikKKwkgICAgZ2RrX2NvbG9ybWFwX3F1ZXJ5X2NvbG9yKGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwKGd1aS5kcmF3YXJlYSksCisJCQkJICAgICAodW5zaWduZWQgbG9uZylwaXhlbCwgJmNvbG9yKTsKKworCXBkZXN0ID0gYnVmOworCXAgPSBtc2c7CisJd2hpbGUgKCpwICE9IE5VTCkKKwl7CisJICAgIC8qIEJlIHF1aWNrIGZvciBBU0NJSSAqLworCSAgICBpZiAoKCpwICYgMHg4MCkgPT0gMCAmJiAhSVNfTk9OUFJJTlRBQkxFKCpwKSkKKwkgICAgeworCQkqcGRlc3QrKyA9ICpwKys7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWNoYXJsZW4gPSB1dGZfcHRyMmxlbl9jaGVjayhwKTsKKwkJdWMgPSB1dGZfcHRyMmNoYXIocCk7CisKKwkJaWYgKGNoYXJsZW4gIT0gdXRmX2NoYXIybGVuKHVjKSkKKwkJICAgIGNoYXJsZW4gPSAxOyAvKiByZWplY3Qgb3Zlcmxvbmcgc2VxdWVuY2VzICovCisKKwkJaWYgKGNoYXJsZW4gPT0gMSB8fCB1YyA8IDB4YTAgfHwgIXV0Zl9wcmludGFibGUodWMpKQorCQl7CisJCSAgICBpbnQJb3V0bGVuOworCisJCSAgICAvKiBDYXJlZnVsOiB3ZSBjYW4ndCBqdXN0IHVzZSB0cmFuc2NoYXJfYnl0ZSgpIGhlcmUsCisJCSAgICAgKiBzaW5jZSAnZW5jb2RpbmcnIGlzIG5vdCBuZWNlc3NhcmlseSBzZXQgdG8gInV0Zi04Ii4gKi8KKwkJICAgIGlmICgqcCAmIDB4ODAgJiYgY2hhcmxlbiA9PSAxKQorCQkgICAgeworCQkJdHJhbnNjaGFyX2hleChwZGVzdCwgKnApOwkvKiA8eHg+ICovCisJCQlvdXRsZW4gPSA0OworCQkgICAgfQorCQkgICAgZWxzZSBpZiAodWMgPj0gMHg4MCkKKwkJICAgIHsKKwkJCS8qIE5vdGU6IHdlIGFzc3VtZSBoZXJlIHRoYXQgdXRmX3ByaW50YWJsZSgpIGRvZXNuJ3QKKwkJCSAqIGNhcmUgYWJvdXQgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBCTVAuICovCisJCQl0cmFuc2NoYXJfaGV4KHBkZXN0LCB1Yyk7CS8qIDx4eD4gb3IgPHh4eHg+ICovCisJCQlvdXRsZW4gPSAodWMgPCAweDEwMCkgPyA0IDogNjsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCXRyYW5zY2hhcl9ub25wcmludChwZGVzdCwgKnApOwkvKiBeWCAqLworCQkJb3V0bGVuID0gMjsKKwkJICAgIH0KKwkJICAgIGlmIChwaXhlbCAhPSBJTlZBTENPTE9SKQorCQkgICAgeworCQkJYXR0ciA9IHBhbmdvX2F0dHJfZm9yZWdyb3VuZF9uZXcoCisJCQkJY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7CisJCQlhdHRyLT5zdGFydF9pbmRleCA9IHBkZXN0IC0gYnVmOworCQkJYXR0ci0+ZW5kX2luZGV4ICAgPSBwZGVzdCAtIGJ1ZiArIG91dGxlbjsKKwkJCXBhbmdvX2F0dHJfbGlzdF9pbnNlcnQoYXR0cl9saXN0LCBhdHRyKTsKKwkJICAgIH0KKwkJICAgIHBkZXN0ICs9IG91dGxlbjsKKwkJICAgIHAgKz0gY2hhcmxlbjsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGRvCisJCQkqcGRlc3QrKyA9ICpwKys7CisJCSAgICB3aGlsZSAoLS1jaGFybGVuICE9IDApOworCQl9CisJICAgIH0KKwl9CisJKnBkZXN0ID0gTlVMOworICAgIH0KKworICAgIHZpbV9mcmVlKGNvbnZidWYpOworCisgICAgZ3RrX2xhYmVsX3NldF90ZXh0KGxhYmVsLCAoY29uc3QgY2hhciAqKWJ1Zik7CisgICAgdmltX2ZyZWUoYnVmKTsKKworICAgIGd0a19sYWJlbF9zZXRfYXR0cmlidXRlcyhsYWJlbCwgYXR0cl9saXN0KTsKKyAgICBwYW5nb19hdHRyX2xpc3RfdW5yZWYoYXR0cl9saXN0KTsKK30KKyMgIHVuZGVmIElTX05PTlBSSU5UQUJMRQorIyBlbmRpZiAvKiBIQVZFX0dUSzIgKi8KKworLyoKKyAqIERyYXcgYSBiYWxsb29uLgorICovCisgICAgc3RhdGljIHZvaWQKK2RyYXdCYWxsb29uKEJhbGxvb25FdmFsICpiZXZhbCkKK3sKKyAgICBpZiAoYmV2YWwtPm1zZyAhPSBOVUxMKQorICAgIHsKKwlHdGtSZXF1aXNpdGlvbglyZXF1aXNpdGlvbjsKKwlpbnQJCXNjcmVlbl93OworCWludAkJc2NyZWVuX2g7CisJaW50CQl4OworCWludAkJeTsKKwlpbnQJCXhfb2Zmc2V0ID0gRVZBTF9PRkZTRVRfWDsKKwlpbnQJCXlfb2Zmc2V0ID0gRVZBTF9PRkZTRVRfWTsKKyMgaWZkZWYgSEFWRV9HVEsyCisJUGFuZ29MYXlvdXQJKmxheW91dDsKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9HVEtfTVVMVElIRUFECisJR2RrU2NyZWVuCSpzY3JlZW47CisKKwlzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4oYmV2YWwtPnRhcmdldCk7CisJZ3RrX3dpbmRvd19zZXRfc2NyZWVuKEdUS19XSU5ET1coYmV2YWwtPmJhbGxvb25TaGVsbCksIHNjcmVlbik7CisJc2NyZWVuX3cgPSBnZGtfc2NyZWVuX2dldF93aWR0aChzY3JlZW4pOworCXNjcmVlbl9oID0gZ2RrX3NjcmVlbl9nZXRfaGVpZ2h0KHNjcmVlbik7CisjIGVsc2UKKwlzY3JlZW5fdyA9IGdka19zY3JlZW5fd2lkdGgoKTsKKwlzY3JlZW5faCA9IGdka19zY3JlZW5faGVpZ2h0KCk7CisjIGVuZGlmCisJZ3RrX3dpZGdldF9lbnN1cmVfc3R5bGUoYmV2YWwtPmJhbGxvb25TaGVsbCk7CisJZ3RrX3dpZGdldF9lbnN1cmVfc3R5bGUoYmV2YWwtPmJhbGxvb25MYWJlbCk7CisKKyMgaWZkZWYgSEFWRV9HVEsyCisJc2V0X3ByaW50YWJsZV9sYWJlbF90ZXh0KEdUS19MQUJFTChiZXZhbC0+YmFsbG9vbkxhYmVsKSwgYmV2YWwtPm1zZyk7CisJLyoKKwkgKiBEaXJ0eSB0cmljazogIEVuYWJsZSB3cmFwcGluZyBtb2RlIG9uIHRoZSBsYWJlbCdzIGxheW91dCBiZWhpbmQgaXRzCisJICogYmFjay4gIFRoaXMgd2F5IEd0a0xhYmVsIHdvbid0IHRyeSB0byBjb25zdHJhaW4gdGhlIHdyYXAgd2lkdGggdG8gYQorCSAqIGJ1aWx0aW4gbWF4aW11bSB2YWx1ZSBvZiBhYm91dCA2NSBMYXRpbiBjaGFyYWN0ZXJzLgorCSAqLworCWxheW91dCA9IGd0a19sYWJlbF9nZXRfbGF5b3V0KEdUS19MQUJFTChiZXZhbC0+YmFsbG9vbkxhYmVsKSk7CisjICBpZmRlZiBQQU5HT19XUkFQX1dPUkRfQ0hBUgorCXBhbmdvX2xheW91dF9zZXRfd3JhcChsYXlvdXQsIFBBTkdPX1dSQVBfV09SRF9DSEFSKTsKKyMgIGVsc2UKKwlwYW5nb19sYXlvdXRfc2V0X3dyYXAobGF5b3V0LCBQQU5HT19XUkFQX1dPUkQpOworIyAgZW5kaWYKKwlwYW5nb19sYXlvdXRfc2V0X3dpZHRoKGxheW91dCwKKwkJLyogdHJ5IHRvIGNvbWUgdXAgd2l0aCBzb21lIHJlYXNvbmFibGUgd2lkdGggKi8KKwkJUEFOR09fU0NBTEUgKiBDTEFNUChndWkubnVtX2NvbHMgKiBndWkuY2hhcl93aWR0aCwKKwkJCQkgICAgc2NyZWVuX3cgLyAyLAorCQkJCSAgICBNQVgoMjAsIHNjcmVlbl93IC0gMjApKSk7CisKKwkvKiBDYWxjdWxhdGUgdGhlIGJhbGxvb24ncyB3aWR0aCBhbmQgaGVpZ2h0LiAqLworCWd0a193aWRnZXRfc2l6ZV9yZXF1ZXN0KGJldmFsLT5iYWxsb29uU2hlbGwsICZyZXF1aXNpdGlvbik7CisjIGVsc2UKKwlndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoYmV2YWwtPmJhbGxvb25MYWJlbCksIEZBTFNFKTsKKwlndGtfbGFiZWxfc2V0X3RleHQoR1RLX0xBQkVMKGJldmFsLT5iYWxsb29uTGFiZWwpLAorCQkJICAgKGNvbnN0IGNoYXIgKiliZXZhbC0+bXNnKTsKKworCS8qIENhbGN1bGF0ZSB0aGUgYmFsbG9vbidzIHdpZHRoIGFuZCBoZWlnaHQuICovCisJZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QoYmV2YWwtPmJhbGxvb25TaGVsbCwgJnJlcXVpc2l0aW9uKTsKKwkvKgorCSAqIFVuZm9ydHVuYXRlbHksIHRoZSBkaXJ0eSB0cmljayB1c2VkIGFib3ZlIHRvIGdldCBhcm91bmQgdGhlIGJ1aWx0aW4KKwkgKiBtYXhpbXVtIHdyYXAgd2lkdGggb2YgR3RrTGFiZWwgZG9lc24ndCB3b3JrIHdpdGggR1RLKyAxLiAgVGh1cyBpZgorCSAqIGFuZCBvbmx5IGlmIGl0J3MgYWJzb2x1dGVseSBuZWNlc3NhcnkgdG8gYXZvaWQgZHJhd2luZyBvZmYtc2NyZWVuLAorCSAqIGRvIGVuYWJsZSB3cmFwcGluZyBub3cgYW5kIHJlY2FsY3VsYXRlIHRoZSBzaXplIHJlcXVlc3QuCisJICovCisJaWYgKHJlcXVpc2l0aW9uLndpZHRoID4gc2NyZWVuX3cpCisJeworCSAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoYmV2YWwtPmJhbGxvb25MYWJlbCksIFRSVUUpOworCSAgICBndGtfd2lkZ2V0X3NpemVfcmVxdWVzdChiZXZhbC0+YmFsbG9vblNoZWxsLCAmcmVxdWlzaXRpb24pOworCX0KKyMgZW5kaWYKKworCS8qIENvbXB1dGUgcG9zaXRpb24gb2YgdGhlIGJhbGxvb24gYXJlYSAqLworCWdka193aW5kb3dfZ2V0X29yaWdpbihiZXZhbC0+dGFyZ2V0LT53aW5kb3csICZ4LCAmeSk7CisJeCArPSBiZXZhbC0+eDsKKwl5ICs9IGJldmFsLT55OworCisJLyogR2V0IG91dCBvZiB0aGUgd2F5IG9mIHRoZSBtb3VzZSBwb2ludGVyICovCisJaWYgKHggKyB4X29mZnNldCArIHJlcXVpc2l0aW9uLndpZHRoID4gc2NyZWVuX3cpCisJICAgIHlfb2Zmc2V0ICs9IDE1OworCWlmICh5ICsgeV9vZmZzZXQgKyByZXF1aXNpdGlvbi5oZWlnaHQgPiBzY3JlZW5faCkKKwkgICAgeV9vZmZzZXQgPSAtcmVxdWlzaXRpb24uaGVpZ2h0IC0gRVZBTF9PRkZTRVRfWTsKKworCS8qIFNhbml0aXplIHZhbHVlcyAqLworCXggPSBDTEFNUCh4ICsgeF9vZmZzZXQsIDAsIE1BWCgwLCBzY3JlZW5fdyAtIHJlcXVpc2l0aW9uLndpZHRoKSk7CisJeSA9IENMQU1QKHkgKyB5X29mZnNldCwgMCwgTUFYKDAsIHNjcmVlbl9oIC0gcmVxdWlzaXRpb24uaGVpZ2h0KSk7CisKKwkvKiBTaG93IHRoZSBiYWxsb29uICovCisJZ3RrX3dpZGdldF9zZXRfdXBvc2l0aW9uKGJldmFsLT5iYWxsb29uU2hlbGwsIHgsIHkpOworCWd0a193aWRnZXRfc2hvdyhiZXZhbC0+YmFsbG9vblNoZWxsKTsKKworCWJldmFsLT5zaG93U3RhdGUgPSBTaFNfU0hPV0lORzsKKyAgICB9Cit9CisKKy8qCisgKiBVbmRyYXcgYSBiYWxsb29uLgorICovCisgICAgc3RhdGljIHZvaWQKK3VuZHJhd0JhbGxvb24oQmFsbG9vbkV2YWwgKmJldmFsKQoreworICAgIGlmIChiZXZhbC0+YmFsbG9vblNoZWxsICE9IE5VTEwpCisJZ3RrX3dpZGdldF9oaWRlKGJldmFsLT5iYWxsb29uU2hlbGwpOworICAgIGJldmFsLT5zaG93U3RhdGUgPSBTaFNfTkVVVFJBTDsKK30KKworICAgIHN0YXRpYyB2b2lkCitjYW5jZWxCYWxsb29uKEJhbGxvb25FdmFsICpiZXZhbCkKK3sKKyAgICBpZiAoYmV2YWwtPnNob3dTdGF0ZSA9PSBTaFNfU0hPV0lORworCSAgICB8fCBiZXZhbC0+c2hvd1N0YXRlID09IFNoU19VUERBVEVfUEVORElORykKKwl1bmRyYXdCYWxsb29uKGJldmFsKTsKKworICAgIGlmIChiZXZhbC0+dGltZXJJRCAhPSAwKQorICAgIHsKKwlndGtfdGltZW91dF9yZW1vdmUoYmV2YWwtPnRpbWVySUQpOworCWJldmFsLT50aW1lcklEID0gMDsKKyAgICB9CisgICAgYmV2YWwtPnNob3dTdGF0ZSA9IFNoU19ORVVUUkFMOworfQorCisgICAgc3RhdGljIHZvaWQKK2NyZWF0ZUJhbGxvb25FdmFsV2luZG93KEJhbGxvb25FdmFsICpiZXZhbCkKK3sKKyAgICBiZXZhbC0+YmFsbG9vblNoZWxsID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7CisKKyAgICBndGtfd2lkZ2V0X3NldF9hcHBfcGFpbnRhYmxlKGJldmFsLT5iYWxsb29uU2hlbGwsIFRSVUUpOworICAgIGd0a193aW5kb3dfc2V0X3BvbGljeShHVEtfV0lORE9XKGJldmFsLT5iYWxsb29uU2hlbGwpLCBGQUxTRSwgRkFMU0UsIFRSVUUpOworICAgIGd0a193aWRnZXRfc2V0X25hbWUoYmV2YWwtPmJhbGxvb25TaGVsbCwgImd0ay10b29sdGlwcyIpOworICAgIGd0a19jb250YWluZXJfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoYmV2YWwtPmJhbGxvb25TaGVsbCksIDQpOworCisgICAgZ3RrX3NpZ25hbF9jb25uZWN0KChHdGtPYmplY3QqKShiZXZhbC0+YmFsbG9vblNoZWxsKSwgImV4cG9zZV9ldmVudCIsCisJCSAgICAgICBHVEtfU0lHTkFMX0ZVTkMoYmFsbG9vbl9leHBvc2VfZXZlbnRfY2IpLCBOVUxMKTsKKyMgaWZuZGVmIEhBVkVfR1RLMgorICAgIGd0a19zaWduYWxfY29ubmVjdCgoR3RrT2JqZWN0KikoYmV2YWwtPmJhbGxvb25TaGVsbCksICJkcmF3IiwKKwkJICAgICAgIEdUS19TSUdOQUxfRlVOQyhiYWxsb29uX2RyYXdfY2IpLCBOVUxMKTsKKyMgZW5kaWYKKyAgICBiZXZhbC0+YmFsbG9vbkxhYmVsID0gZ3RrX2xhYmVsX25ldyhOVUxMKTsKKworICAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChiZXZhbC0+YmFsbG9vbkxhYmVsKSwgRkFMU0UpOworICAgIGd0a19sYWJlbF9zZXRfanVzdGlmeShHVEtfTEFCRUwoYmV2YWwtPmJhbGxvb25MYWJlbCksIEdUS19KVVNUSUZZX0xFRlQpOworICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MoYmV2YWwtPmJhbGxvb25MYWJlbCksIDAuNWYsIDAuNWYpOworICAgIGd0a193aWRnZXRfc2V0X25hbWUoYmV2YWwtPmJhbGxvb25MYWJlbCwgInZpbS1iYWxsb29uLWxhYmVsIik7CisgICAgZ3RrX3dpZGdldF9zaG93KGJldmFsLT5iYWxsb29uTGFiZWwpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihiZXZhbC0+YmFsbG9vblNoZWxsKSwgYmV2YWwtPmJhbGxvb25MYWJlbCk7Cit9CisKKyNlbHNlIC8qICFGRUFUX0dVSV9HVEsgKi8KKworLyoKKyAqIERyYXcgYSBiYWxsb29uLgorICovCisgICAgc3RhdGljIHZvaWQKK2RyYXdCYWxsb29uKGJldmFsKQorICAgIEJhbGxvb25FdmFsCSpiZXZhbDsKK3sKKyAgICBEaW1lbnNpb24JdzsKKyAgICBEaW1lbnNpb24JaDsKKyAgICBQb3NpdGlvbiB0eDsKKyAgICBQb3NpdGlvbiB0eTsKKworICAgIGlmIChiZXZhbC0+bXNnICE9IE5VTEwpCisgICAgeworCS8qIFNob3cgdGhlIEJhbGxvb24gKi8KKworCS8qIENhbGN1bGF0ZSB0aGUgbGFiZWwncyB3aWR0aCBhbmQgaGVpZ2h0ICovCisjaWZkZWYgRkVBVF9HVUlfTU9USUYKKwlYbVN0cmluZyBzOworCisJLyogRm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3ZSBwYXJzZSBOTCBjaGFyYWN0ZXJzIHRvIGNyZWF0ZSBhCisJICogbXVsdGktbGluZSBsYWJlbC4gIFRoaXMgZG9lc24ndCB3b3JrIGZvciBhbGwgbGFuZ3VhZ2VzLCBidXQKKwkgKiBYbVN0cmluZ0NyZWF0ZUxvY2FsaXplZCgpIGRvZXNuJ3QgZG8gbXVsdGktbGluZSBsYWJlbHMuLi4gKi8KKwlpZiAoYmV2YWwtPm1zZ0NCICE9IE5VTEwpCisJICAgIHMgPSBYbVN0cmluZ0NyZWF0ZUx0b1IoKGNoYXIgKiliZXZhbC0+bXNnLCBYbUZPTlRMSVNUX0RFRkFVTFRfVEFHKTsKKwllbHNlCisJICAgIHMgPSBYbVN0cmluZ0NyZWF0ZUxvY2FsaXplZCgoY2hhciAqKWJldmFsLT5tc2cpOworCXsKKwkgICAgWG1Gb250TGlzdCBmbDsKKworCSAgICBmbCA9IGd1aV9tb3RpZl9mb250c2V0MmZvbnRsaXN0KCZndWkudG9vbHRpcF9mb250c2V0KTsKKwkgICAgaWYgKGZsICE9IE5VTEwpCisJICAgIHsKKwkJWG1TdHJpbmdFeHRlbnQoZmwsIHMsICZ3LCAmaCk7CisJCVhtRm9udExpc3RGcmVlKGZsKTsKKwkgICAgfQorCX0KKwl3ICs9IGd1aS5ib3JkZXJfb2Zmc2V0IDw8IDE7CisJaCArPSBndWkuYm9yZGVyX29mZnNldCA8PCAxOworCVh0VmFTZXRWYWx1ZXMoYmV2YWwtPmJhbGxvb25MYWJlbCwgWG1ObGFiZWxTdHJpbmcsIHMsIE5VTEwpOworCVhtU3RyaW5nRnJlZShzKTsKKyNlbHNlIC8qIEF0aGVuYSAqLworCS8qIEFzc3VtZSBYdE5pbnRlcm5hdGlvbmFsID09IFRydWUgKi8KKwlYRm9udFNldAlmc2V0OworCVhGb250U2V0RXh0ZW50cyAqZXh0OworCisJWHRWYUdldFZhbHVlcyhiZXZhbC0+YmFsbG9vbkxhYmVsLCBYdE5mb250U2V0LCAmZnNldCwgTlVMTCk7CisJZXh0ID0gWEV4dGVudHNPZkZvbnRTZXQoZnNldCk7CisJaCA9IGV4dC0+bWF4X2lua19leHRlbnQuaGVpZ2h0OworCXcgPSBYbWJUZXh0RXNjYXBlbWVudChmc2V0LAorCQkJICAgICAgKGNoYXIgKiliZXZhbC0+bXNnLAorCQkJICAgICAgKGludClTVFJMRU4oYmV2YWwtPm1zZykpOworCXcgKz0gZ3VpLmJvcmRlcl9vZmZzZXQgPDwgMTsKKwloICs9IGd1aS5ib3JkZXJfb2Zmc2V0IDw8IDE7CisJWHRWYVNldFZhbHVlcyhiZXZhbC0+YmFsbG9vbkxhYmVsLCBYdE5sYWJlbCwgYmV2YWwtPm1zZywgTlVMTCk7CisjZW5kaWYKKworCS8qIENvbXB1dGUgcG9zaXRpb24gb2YgdGhlIGJhbGxvb24gYXJlYSAqLworCXR4ID0gYmV2YWwtPnhfcm9vdCArIEVWQUxfT0ZGU0VUX1g7CisJdHkgPSBiZXZhbC0+eV9yb290ICsgRVZBTF9PRkZTRVRfWTsKKwlpZiAoKHR4ICsgdykgPiBiZXZhbC0+c2NyZWVuX3dpZHRoKQorCSAgICB0eCA9IGJldmFsLT5zY3JlZW5fd2lkdGggLSB3OworCWlmICgodHkgKyBoKSA+IGJldmFsLT5zY3JlZW5faGVpZ2h0KQorCSAgICB0eSA9IGJldmFsLT5zY3JlZW5faGVpZ2h0IC0gaDsKKyNpZmRlZiBGRUFUX0dVSV9NT1RJRgorCVh0VmFTZXRWYWx1ZXMoYmV2YWwtPmJhbGxvb25TaGVsbCwKKwkJWG1OeCwgdHgsCisJCVhtTnksIHR5LAorCQlOVUxMKTsKKyNlbHNlCisJLyogQXRoZW5hICovCisJWHRWYVNldFZhbHVlcyhiZXZhbC0+YmFsbG9vblNoZWxsLAorCQlYdE54LCB0eCwKKwkJWHROeSwgdHksCisJCU5VTEwpOworI2VuZGlmCisKKwlYdFBvcHVwKGJldmFsLT5iYWxsb29uU2hlbGwsIFh0R3JhYk5vbmUpOworCisJYmV2YWwtPnNob3dTdGF0ZSA9IFNoU19TSE9XSU5HOworCisJY3VycmVudF9iZXZhbCA9IGJldmFsOworICAgIH0KK30KKworLyoKKyAqIFVuZHJhdyBhIGJhbGxvb24uCisgKi8KKyAgICBzdGF0aWMgdm9pZAordW5kcmF3QmFsbG9vbihiZXZhbCkKKyAgICBCYWxsb29uRXZhbCAqYmV2YWw7Cit7CisgICAgaWYgKGJldmFsLT5iYWxsb29uU2hlbGwgIT0gKFdpZGdldCkwKQorCVh0UG9wZG93bihiZXZhbC0+YmFsbG9vblNoZWxsKTsKKyAgICBiZXZhbC0+c2hvd1N0YXRlID0gU2hTX05FVVRSQUw7CisKKyAgICBjdXJyZW50X2JldmFsID0gTlVMTDsKK30KKworICAgIHN0YXRpYyB2b2lkCitjYW5jZWxCYWxsb29uKGJldmFsKQorICAgIEJhbGxvb25FdmFsCSpiZXZhbDsKK3sKKyAgICBpZiAoYmV2YWwtPnNob3dTdGF0ZSA9PSBTaFNfU0hPV0lORworCSAgICB8fCBiZXZhbC0+c2hvd1N0YXRlID09IFNoU19VUERBVEVfUEVORElORykKKwl1bmRyYXdCYWxsb29uKGJldmFsKTsKKworICAgIGlmIChiZXZhbC0+dGltZXJJRCAhPSAoWHRJbnRlcnZhbElkKU5VTEwpCisgICAgeworCVh0UmVtb3ZlVGltZU91dChiZXZhbC0+dGltZXJJRCk7CisJYmV2YWwtPnRpbWVySUQgPSAoWHRJbnRlcnZhbElkKU5VTEw7CisgICAgfQorICAgIGJldmFsLT5zaG93U3RhdGUgPSBTaFNfTkVVVFJBTDsKK30KKworCisgICAgc3RhdGljIHZvaWQKK2NyZWF0ZUJhbGxvb25FdmFsV2luZG93KGJldmFsKQorICAgIEJhbGxvb25FdmFsCSpiZXZhbDsKK3sKKyAgICBBcmcJCWFyZ3NbMTJdOworICAgIGludAkJbjsKKworICAgIG4gPSAwOworI2lmZGVmIEZFQVRfR1VJX01PVElGCisgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1OYWxsb3dTaGVsbFJlc2l6ZSwgVHJ1ZSk7IG4rKzsKKyAgICBiZXZhbC0+YmFsbG9vblNoZWxsID0gWHRBcHBDcmVhdGVTaGVsbCgiYmFsbG9vbkV2YWwiLCAiQmFsbG9vbkV2YWwiLAorCQkgICAgb3ZlcnJpZGVTaGVsbFdpZGdldENsYXNzLCBndWkuZHB5LCBhcmdzLCBuKTsKKyNlbHNlCisgICAgLyogQXRoZW5hICovCisgICAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYWxsb3dTaGVsbFJlc2l6ZSwgVHJ1ZSk7IG4rKzsKKyAgICBiZXZhbC0+YmFsbG9vblNoZWxsID0gWHRBcHBDcmVhdGVTaGVsbCgiYmFsbG9vbkV2YWwiLCAiQmFsbG9vbkV2YWwiLAorCQkgICAgb3ZlcnJpZGVTaGVsbFdpZGdldENsYXNzLCBndWkuZHB5LCBhcmdzLCBuKTsKKyNlbmRpZgorCisgICAgbiA9IDA7CisjaWZkZWYgRkVBVF9HVUlfTU9USUYKKyAgICB7CisJWG1Gb250TGlzdCBmbDsKKworCWZsID0gZ3VpX21vdGlmX2ZvbnRzZXQyZm9udGxpc3QoJmd1aS50b29sdGlwX2ZvbnRzZXQpOworCVh0U2V0QXJnKGFyZ3Nbbl0sIFhtTmZvcmVncm91bmQsIGd1aS50b29sdGlwX2ZnX3BpeGVsKTsgbisrOworCVh0U2V0QXJnKGFyZ3Nbbl0sIFhtTmJhY2tncm91bmQsIGd1aS50b29sdGlwX2JnX3BpeGVsKTsgbisrOworCVh0U2V0QXJnKGFyZ3Nbbl0sIFhtTmZvbnRMaXN0LCBmbCk7IG4rKzsKKwlYdFNldEFyZyhhcmdzW25dLCBYbU5hbGlnbm1lbnQsIFhtQUxJR05NRU5UX0JFR0lOTklORyk7IG4rKzsKKwliZXZhbC0+YmFsbG9vbkxhYmVsID0gWHRDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJiYWxsb29uTGFiZWwiLAorCQkJeG1MYWJlbFdpZGdldENsYXNzLCBiZXZhbC0+YmFsbG9vblNoZWxsLCBhcmdzLCBuKTsKKyAgICB9CisjZWxzZSAvKiBGRUFUX0dVSV9BVEhFTkEgKi8KKyAgICBYdFNldEFyZyhhcmdzW25dLCBYdE5mb3JlZ3JvdW5kLCBndWkudG9vbHRpcF9mZ19waXhlbCk7IG4rKzsKKyAgICBYdFNldEFyZyhhcmdzW25dLCBYdE5iYWNrZ3JvdW5kLCBndWkudG9vbHRpcF9iZ19waXhlbCk7IG4rKzsKKyAgICBYdFNldEFyZyhhcmdzW25dLCBYdE5pbnRlcm5hdGlvbmFsLCBUcnVlKTsgbisrOworICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmZvbnRTZXQsIGd1aS50b29sdGlwX2ZvbnRzZXQpOyBuKys7CisgICAgYmV2YWwtPmJhbGxvb25MYWJlbCA9IFh0Q3JlYXRlTWFuYWdlZFdpZGdldCgiYmFsbG9vbkxhYmVsIiwKKwkJICAgIGxhYmVsV2lkZ2V0Q2xhc3MsIGJldmFsLT5iYWxsb29uU2hlbGwsIGFyZ3MsIG4pOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiAhRkVBVF9HVUlfR1RLICovCisjZW5kaWYgLyogIUZFQVRfR1VJX1czMiAqLworCisjZW5kaWYgLyogRkVBVF9CRVZBTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d1aV9iZXZhbC5oIGIvc3JjL2d1aV9iZXZhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDVhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpX2JldmFsLmgKQEAgLTAsMCArMSw3NiBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoJCQlWaXN1YWwgV29ya3Nob3AgaW50ZWdyYXRpb24gYnkgR29yZG9uIFByaWV1cgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworI2lmICFkZWZpbmVkKEdVSV9CRVZBTF9IKSAmJiAoZGVmaW5lZChGRUFUX0JFVkFMKSB8fCBkZWZpbmVkKFBST1RPKSkKKyNkZWZpbmUgR1VJX0JFVkFMX0gKKworI2lmZGVmIEZFQVRfR1VJX0dUSworIyBpbmNsdWRlIDxndGsvZ3Rrd2lkZ2V0Lmg+CisjZWxzZQorIyBpZiBkZWZpbmVkKEZFQVRfR1VJX1gxMSkKKyMgIGluY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyMgZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIGVudW0KK3sKKyAgICBTaFNfTkVVVFJBTCwJCQkvKiBub3RoaW5nIHNob3dpbmcgb3IgcGVuZGluZyAqLworICAgIFNoU19QRU5ESU5HLAkJCS8qIGRhdGEgcmVxdWVzdGVkIGZyb20gZGVidWdnZXIgKi8KKyAgICBTaFNfVVBEQVRFX1BFTkRJTkcsCQkJLyogc3dpdGNoaW5nIGluZm9ybWF0aW9uIGRpc3BsYXllZCAqLworICAgIFNoU19TSE9XSU5HCQkJCS8qIHRoZSBiYWxsb29uIGlzIGJlaW5nIGRpc3BsYXllZCAqLworfSBCZVN0YXRlOworCit0eXBlZGVmIHN0cnVjdCBCYWxsb29uRXZhbFN0cnVjdAoreworI2lmZGVmIEZFQVRfR1VJX0dUSworICAgIEd0a1dpZGdldAkJKnRhcmdldDsJLyogd2lkZ2V0IHdlIGFyZSBtb25pdG9yaW5nICovCisgICAgR3RrV2lkZ2V0CQkqYmFsbG9vblNoZWxsOworICAgIEd0a1dpZGdldAkJKmJhbGxvb25MYWJlbDsKKyAgICB1bnNpZ25lZCBpbnQJdGltZXJJRDsJLyogdGltZXIgZm9yIHJ1biAqLworICAgIEJlU3RhdGUJCXNob3dTdGF0ZTsJLyogdGVsbHMgdXMgd2hhdHMgY3VycmVudGx5IGdvaW5nIG9uICovCisgICAgaW50CQkJeDsKKyAgICBpbnQJCQl5OworICAgIHVuc2lnbmVkIGludAlzdGF0ZTsJCS8qIEJ1dHRvbi9Nb2RpZmllciBrZXkgc3RhdGUgKi8KKyNlbHNlCisjIGlmICFkZWZpbmVkKEZFQVRfR1VJX1czMikKKyAgICBXaWRnZXQJCXRhcmdldDsJCS8qIHdpZGdldCB3ZSBhcmUgbW9uaXRvcmluZyAqLworICAgIFdpZGdldAkJYmFsbG9vblNoZWxsOworICAgIFdpZGdldAkJYmFsbG9vbkxhYmVsOworICAgIFh0SW50ZXJ2YWxJZAl0aW1lcklEOwkvKiB0aW1lciBmb3IgcnVuICovCisgICAgQmVTdGF0ZQkJc2hvd1N0YXRlOwkvKiB0ZWxscyB1cyB3aGF0cyBjdXJyZW50bHkgZ29pbmcgb24gKi8KKyAgICBYdEFwcENvbnRleHQJYXBwQ29udGV4dDsJLyogdXNlZCBpbiBldmVudCBoYW5kbGVyICovCisgICAgUG9zaXRpb24JCXg7CisgICAgUG9zaXRpb24JCXk7CisgICAgUG9zaXRpb24JCXhfcm9vdDsKKyAgICBQb3NpdGlvbgkJeV9yb290OworICAgIGludAkJCXN0YXRlOwkJLyogQnV0dG9uL01vZGlmaWVyIGtleSBzdGF0ZSAqLworIyBlbHNlCisgICAgSFdORAkJdGFyZ2V0OworICAgIEhXTkQJCWJhbGxvb247CisgICAgaW50CQkJeDsKKyAgICBpbnQJCQl5OworICAgIEJlU3RhdGUJCXNob3dTdGF0ZTsJLyogdGVsbHMgdXMgd2hhdHMgY3VycmVudGx5IGdvaW5nIG9uICovCisjIGVuZGlmCisjZW5kaWYKKyAgICBpbnQJCQl0czsJCS8qIHRhYnN0b3Agc2V0dGluZyBmb3IgdGhpcyBidWZmZXIgKi8KKyAgICBjaGFyX3UJCSptc2c7CisgICAgdm9pZAkJKCptc2dDQilfX0FSR1MoKHN0cnVjdCBCYWxsb29uRXZhbFN0cnVjdCAqLCBpbnQpKTsKKyAgICB2b2lkCQkqY2xpZW50RGF0YTsJLyogRm9yIGNhbGxiYWNrICovCisjaWYgIWRlZmluZWQoRkVBVF9HVUlfR1RLKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpCisgICAgRGltZW5zaW9uCQlzY3JlZW5fd2lkdGg7CS8qIHNjcmVlbiB3aWR0aCBpbiBwaXhlbHMgKi8KKyAgICBEaW1lbnNpb24JCXNjcmVlbl9oZWlnaHQ7CS8qIHNjcmVlbiBoZWlnaHQgaW4gcGl4ZWxzICovCisjZW5kaWYKK30gQmFsbG9vbkV2YWw7CisKKyNkZWZpbmUgRVZBTF9PRkZTRVRfWCAxNSAvKiBkaXNwbGFjZW1lbnQgb2YgYmV2YWwgdG9wbGVmdCBjb3JuZXIgZnJvbSBwb2ludGVyICovCisjZGVmaW5lIEVWQUxfT0ZGU0VUX1kgMTAKKworI2luY2x1ZGUgImd1aV9iZXZhbC5wcm8iCisKKyNlbmRpZiAvKiBHVUlfQkVWQUxfSCBhbmQgRkVBVF9CRVZBTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d1aV9ndGsuYyBiL3NyYy9ndWlfZ3RrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ1NTJjMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfZ3RrLmMKQEAgLTAsMCArMSwzMDM1IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCQlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogUG9ydGluZyB0byBHVEsrIHdhcyBkb25lIGJ5OgorICoKKyAqIChDKSAxOTk4LDE5OTksMjAwMCBieSBNYXJjaW4gRGFsZWNraSA8ZGFsZWNraUBldmlzaW9uLmFnPgorICoKKyAqIFdpdGggR1JFQVQgc3VwcG9ydCBhbmQgY29udGludW91cyBlbmNvdXJhZ2VtZW50cyBieSBBbmR5IEthaG4gYW5kIG9mCisgKiBjb3Vyc2UgQnJhbSBNb29sZW5hYXIhCisgKgorICogU3VwcG9ydCBmb3IgR1RLKyAyIHdhcyBhZGRlZCBieToKKyAqCisgKiAoQykgMjAwMiwyMDAzICBKYXNvbiBIaWxkZWJyYW5kICA8amFzb25AcGVhY2V3b3Jrcy5jYT4KKyAqCQkgIERhbmllbCBFbHN0bmVyICA8ZGFuaWVsLmVsc3RuZXJAZ214Lm5ldD4KKyAqCisgKiBCZXN0IHN1cHBvcnRpbmcgYWN0b3IgKEhlIGhlbHBlZCBzb21ld2hhdCwgYWVzdGhldGljYWxseSBzcGVha2luZyk6CisgKiBNYXhpbWUgUm9tYW5vIDx2ZXJib3Bob2JlQGhvdG1haWwuY29tPgorICovCisKKyNpZmRlZiBGRUFUX0dVSV9HVEsKKyMgaW5jbHVkZSAiZ3VpX2d0a19mLmgiCisjZW5kaWYKKworLyogR1RLIGRlZmluZXMgTUFYIGFuZCBNSU4sIGJ1dCBzb21lIHN5c3RlbSBoZWFkZXIgZmlsZXMgYXMgd2VsbC4gIFVuZGVmaW5lCisgKiB0aGVtIGFuZCBkb24ndCB1c2UgdGhlbS4gKi8KKyNpZmRlZiBNSU4KKyMgdW5kZWYgTUlOCisjZW5kaWYKKyNpZmRlZiBNQVgKKyMgdW5kZWYgTUFYCisjZW5kaWYKKworI2luY2x1ZGUgInZpbS5oIgorCisjaWZkZWYgRkVBVF9HVUlfR05PTUUKKy8qIEdub21lIHJlZGVmaW5lcyBfKCkgYW5kIE5fKCkuICBHcnJyLi4uICovCisjIGlmZGVmIF8KKyMgIHVuZGVmIF8KKyMgZW5kaWYKKyMgaWZkZWYgTl8KKyMgIHVuZGVmIE5fCisjIGVuZGlmCisjIGlmZGVmIHRleHRkb21haW4KKyMgIHVuZGVmIHRleHRkb21haW4KKyMgZW5kaWYKKyMgaWZkZWYgYmluZHRleHRkb21haW4KKyMgIHVuZGVmIGJpbmR0ZXh0ZG9tYWluCisjIGVuZGlmCisjIGlmIGRlZmluZWQoRkVBVF9HRVRURVhUKSAmJiAhZGVmaW5lZChFTkFCTEVfTkxTKQorIyAgZGVmaW5lIEVOQUJMRV9OTFMJLyogc28gdGhlIHRleHRzIGluIHRoZSBkaWFsb2cgYm94ZXMgYXJlIHRyYW5zbGF0ZWQgKi8KKyMgZW5kaWYKKyMgaW5jbHVkZSA8Z25vbWUuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpICYmICFkZWZpbmVkKEhBVkVfR1RLMikKKyMgaW5jbHVkZSAiLi4vcGl4bWFwcy9hbGVydC54cG0iCisjIGluY2x1ZGUgIi4uL3BpeG1hcHMvZXJyb3IueHBtIgorIyBpbmNsdWRlICIuLi9waXhtYXBzL2dlbmVyaWMueHBtIgorIyBpbmNsdWRlICIuLi9waXhtYXBzL2luZm8ueHBtIgorIyBpbmNsdWRlICIuLi9waXhtYXBzL3F1ZXN0LnhwbSIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1RPT0xCQVIpICYmICFkZWZpbmVkKEhBVkVfR1RLMikKKy8qCisgKiBJY29ucyB1c2VkIGJ5IHRoZSB0b29sYmFyIGNvZGUuCisgKi8KKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX25ldy54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9vcGVuLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX2Nsb3NlLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX3NhdmUueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfcHJpbnQueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfY3V0LnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX2NvcHkueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfcGFzdGUueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfZmluZC54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9maW5kX25leHQueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfZmluZF9wcmV2LnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX2ZpbmRfaGVscC54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9leGl0LnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX3VuZG8ueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfcmVkby54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9oZWxwLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21hY3JvLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21ha2UueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfc2F2ZV9hbGwueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfanVtcC54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9jdGFncy54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9sb2FkX3Nlc3Npb24ueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfc2F2ZV9zZXNzaW9uLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX25ld19zZXNzaW9uLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX2JsYW5rLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21heGltaXplLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX3NwbGl0LnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21pbmltaXplLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX3NoZWxsLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX3JlcGxhY2UueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfdnNwbGl0LnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21heHdpZHRoLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21pbndpZHRoLnhwbSIKKyNlbmRpZiAvKiBGRUFUX1RPT0xCQVIgJiYgIUhBVkVfR1RLMiAqLworCisjaWZkZWYgRkVBVF9HVUlfR1RLCisjIGluY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjIGluY2x1ZGUgPGdkay9nZGsuaD4KKyMgaWZkZWYgV0lOMzI2NAorIyAgaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPGdkay9nZGt4Lmg+CisjIGVuZGlmCisKKyMgaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2Vsc2UKKy8qIGRlZmluZSB0aGVzZSBpdGVtcyB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIHByb3RvdHlwZXMgd2l0aG91dCBHVEsgKi8KK3R5cGVkZWYgaW50IEd0a1dpZGdldDsKKyMgZGVmaW5lIGdwb2ludGVyIGludAorIyBkZWZpbmUgZ3VpbnQ4IGludAorIyBkZWZpbmUgR2RrUGl4bWFwIGludAorIyBkZWZpbmUgR2RrQml0bWFwIGludAorIyBkZWZpbmUgR3RrSWNvbkZhY3RvcnkgaW50CisjIGRlZmluZSBHdGtUb29sYmFyIGludAorIyBkZWZpbmUgR3RrQWRqdXN0bWVudCBpbnQKKyMgZGVmaW5lIGdib29sZWFuIGludAorIyBkZWZpbmUgR2RrRXZlbnRLZXkgaW50CisjIGRlZmluZSBDYW5jZWxEYXRhIGludAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0dUSzIKKy8qCisgKiBDb252ZW5pZW5jZSBtYWNyb3MgdG8gY29udmVydCBmcm9tICdlbmNvZGluZycgdG8gJ3Rlcm1lbmNvZGluZycgYW5kCisgKiB2aWNlIHZlcnNhLglJZiBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeSB0aGUgcGFzc2VkLWluIHBvaW50ZXIgaXMKKyAqIHJldHVybmVkIGFzIGlzLCB3aXRob3V0IGFsbG9jYXRpbmcgYW55IG1lbW9yeS4gIFRodXMgYWRkaXRpb25hbCBfRlJFRSgpCisgKiBtYWNyb3MgYXJlIHByb3ZpZGVkLiAgVGhlIF9GUkVFKCkgbWFjcm9zIGFsc28gc2V0IHRoZSBwb2ludGVyIHRvIE5VTEwsCisgKiBpbiBvcmRlciB0byBhdm9pZCBidWdzIGR1ZSB0byBpbGxlZ2FsIG1lbW9yeSBhY2Nlc3Mgb25seSBoYXBwZW5pbmcgaWYKKyAqICdlbmNvZGluZycgIT0gdXRmLTguLi4KKyAqCisgKiBEZWZpbmluZyB0aGVzZSBtYWNyb3MgYXMgcHVyZSBleHByZXNzaW9ucyBsb29rcyBhIGJpdCB0cmlja3kgYnV0CisgKiBhdm9pZHMgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBtYWNybyBleHBhbnNpb24uICBPbmUgb2YgdGhlCisgKiByYXJlIG9jY2FzaW9ucyB3aGVyZSB0aGUgY29tbWEgb3BlcmF0b3IgY29tZXMgaW4gaGFuZHkgOikKKyAqCisgKiBOb3RlOiBEbyBOT1Qga2VlcCB0aGUgcmVzdWx0IGFyb3VuZCB3aGVuIGhhbmRsaW5nIGNvbnRyb2wgYmFjayB0bworICogdGhlIG1haW4gVmltISAgVGhlIHVzZXIgY291bGQgY2hhbmdlICdlbmNvZGluZycgYXQgYW55IHRpbWUuCisgKi8KKyMgZGVmaW5lIENPTlZFUlRfVE9fVVRGOChTdHJpbmcpCQkJCVwKKyAgICAoKG91dHB1dF9jb252LnZjX3R5cGUgPT0gQ09OVl9OT05FIHx8IChTdHJpbmcpID09IE5VTEwpCVwKKwkgICAgPyAoU3RyaW5nKQkJCQkJCVwKKwkgICAgOiBzdHJpbmdfY29udmVydCgmb3V0cHV0X2NvbnYsIChTdHJpbmcpLCBOVUxMKSkKKworIyBkZWZpbmUgQ09OVkVSVF9UT19VVEY4X0ZSRUUoU3RyaW5nKQkJCQlcCisgICAgKChTdHJpbmcpID0gKChvdXRwdXRfY29udi52Y190eXBlID09IENPTlZfTk9ORSkJCVwKKwkJCT8gKGNoYXJfdSAqKU5VTEwJCQlcCisJCQk6ICh2aW1fZnJlZShTdHJpbmcpLCAoY2hhcl91ICopTlVMTCkpKQorCisjIGRlZmluZSBDT05WRVJUX0ZST01fVVRGOChTdHJpbmcpCQkJCVwKKyAgICAoKGlucHV0X2NvbnYudmNfdHlwZSA9PSBDT05WX05PTkUgfHwgKFN0cmluZykgPT0gTlVMTCkJXAorCSAgICA/IChTdHJpbmcpCQkJCQkJXAorCSAgICA6IHN0cmluZ19jb252ZXJ0KCZpbnB1dF9jb252LCAoU3RyaW5nKSwgTlVMTCkpCisKKyMgZGVmaW5lIENPTlZFUlRfRlJPTV9VVEY4X0ZSRUUoU3RyaW5nKQkJCQlcCisgICAgKChTdHJpbmcpID0gKChpbnB1dF9jb252LnZjX3R5cGUgPT0gQ09OVl9OT05FKQkJXAorCQkJPyAoY2hhcl91ICopTlVMTAkJCVwKKwkJCTogKHZpbV9mcmVlKFN0cmluZyksIChjaGFyX3UgKilOVUxMKSkpCisKKyNlbmRpZiAvKiBIQVZFX0dUSzIgKi8KKworc3RhdGljIHZvaWQgZW50cnlfYWN0aXZhdGVfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIGdwb2ludGVyIGRhdGEpOworc3RhdGljIHZvaWQgZW50cnlfY2hhbmdlZF9jYihHdGtXaWRnZXQgKmVudHJ5LCBHdGtXaWRnZXQgKmRpYWxvZyk7CitzdGF0aWMgdm9pZCBmaW5kX3JlcGxhY2VfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIGdwb2ludGVyIGRhdGEpOworCisjaWYgZGVmaW5lZChGRUFUX1RPT0xCQVIpICYmIGRlZmluZWQoSEFWRV9HVEsyKQorLyoKKyAqIFRhYmxlIGZyb20gQnVpbHRJbiMjIGljb24gaW5kaWNlcyB0byBHVEsrIHN0b2NrIElEcy4gIE9yZGVyIG11c3QgZXhhY3RseQorICogbWF0Y2ggdG9vbGJhcl9uYW1lc1tdIGluIG1lbnUuYyEgIEFsbCBzdG9jayBpY29ucyBpbmNsdWRpbmcgdGhlICJ2aW0tKiIKKyAqIG9uZXMgY2FuIGJlIG92ZXJyaWRkZW4gaW4geW91ciBndGtyYyBmaWxlLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1lbnVfc3RvY2tfaWRzW10gPQoreworICAgIC8qIDAwICovIEdUS19TVE9DS19ORVcsCisgICAgLyogMDEgKi8gR1RLX1NUT0NLX09QRU4sCisgICAgLyogMDIgKi8gR1RLX1NUT0NLX1NBVkUsCisgICAgLyogMDMgKi8gR1RLX1NUT0NLX1VORE8sCisgICAgLyogMDQgKi8gR1RLX1NUT0NLX1JFRE8sCisgICAgLyogMDUgKi8gR1RLX1NUT0NLX0NVVCwKKyAgICAvKiAwNiAqLyBHVEtfU1RPQ0tfQ09QWSwKKyAgICAvKiAwNyAqLyBHVEtfU1RPQ0tfUEFTVEUsCisgICAgLyogMDggKi8gR1RLX1NUT0NLX1BSSU5ULAorICAgIC8qIDA5ICovIEdUS19TVE9DS19IRUxQLAorICAgIC8qIDEwICovIEdUS19TVE9DS19GSU5ELAorICAgIC8qIDExICovICJ2aW0tc2F2ZS1hbGwiLAorICAgIC8qIDEyICovICJ2aW0tc2Vzc2lvbi1zYXZlIiwKKyAgICAvKiAxMyAqLyAidmltLXNlc3Npb24tbmV3IiwKKyAgICAvKiAxNCAqLyAidmltLXNlc3Npb24tbG9hZCIsCisgICAgLyogMTUgKi8gR1RLX1NUT0NLX0VYRUNVVEUsCisgICAgLyogMTYgKi8gR1RLX1NUT0NLX0ZJTkRfQU5EX1JFUExBQ0UsCisgICAgLyogMTcgKi8gR1RLX1NUT0NLX0NMT1NFLAkJLyogRklYTUU6IGZ1enp5ICovCisgICAgLyogMTggKi8gInZpbS13aW5kb3ctbWF4aW1pemUiLAorICAgIC8qIDE5ICovICJ2aW0td2luZG93LW1pbmltaXplIiwKKyAgICAvKiAyMCAqLyAidmltLXdpbmRvdy1zcGxpdCIsCisgICAgLyogMjEgKi8gInZpbS1zaGVsbCIsCisgICAgLyogMjIgKi8gR1RLX1NUT0NLX0dPX0JBQ0ssCisgICAgLyogMjMgKi8gR1RLX1NUT0NLX0dPX0ZPUldBUkQsCisgICAgLyogMjQgKi8gInZpbS1maW5kLWhlbHAiLAorICAgIC8qIDI1ICovIEdUS19TVE9DS19DT05WRVJULAorICAgIC8qIDI2ICovIEdUS19TVE9DS19KVU1QX1RPLAorICAgIC8qIDI3ICovICJ2aW0tYnVpbGQtdGFncyIsCisgICAgLyogMjggKi8gInZpbS13aW5kb3ctc3BsaXQtdmVydGljYWwiLAorICAgIC8qIDI5ICovICJ2aW0td2luZG93LW1heGltaXplLXdpZHRoIiwKKyAgICAvKiAzMCAqLyAidmltLXdpbmRvdy1taW5pbWl6ZS13aWR0aCIsCisgICAgLyogMzEgKi8gR1RLX1NUT0NLX1FVSVQKK307CisKKyAgICBzdGF0aWMgdm9pZAorYWRkX3N0b2NrX2ljb24oR3RrSWNvbkZhY3RvcnkJKmZhY3RvcnksCisJICAgICAgIGNvbnN0IGNoYXIJKnN0b2NrX2lkLAorCSAgICAgICBjb25zdCBndWludDgJKmlubGluZV9kYXRhLAorCSAgICAgICBpbnQJCWRhdGFfbGVuZ3RoKQoreworICAgIEdka1BpeGJ1ZgkqcGl4YnVmOworICAgIEd0a0ljb25TZXQJKmljb25fc2V0OworCisgICAgcGl4YnVmID0gZ2RrX3BpeGJ1Zl9uZXdfZnJvbV9pbmxpbmUoZGF0YV9sZW5ndGgsIGlubGluZV9kYXRhLCBGQUxTRSwgTlVMTCk7CisgICAgaWNvbl9zZXQgPSBndGtfaWNvbl9zZXRfbmV3X2Zyb21fcGl4YnVmKHBpeGJ1Zik7CisKKyAgICBndGtfaWNvbl9mYWN0b3J5X2FkZChmYWN0b3J5LCBzdG9ja19pZCwgaWNvbl9zZXQpOworCisgICAgZ3RrX2ljb25fc2V0X3VucmVmKGljb25fc2V0KTsKKyAgICBnX29iamVjdF91bnJlZihwaXhidWYpOworfQorCisgICAgc3RhdGljIGludAorbG9va3VwX21lbnVfaWNvbmZpbGUoY2hhcl91ICppY29uZmlsZSwgY2hhcl91ICpkZXN0KQoreworICAgIGV4cGFuZF9lbnYoaWNvbmZpbGUsIGRlc3QsIE1BWFBBVEhMKTsKKworICAgIGlmIChtY2hfaXNGdWxsTmFtZShkZXN0KSkKKyAgICB7CisJcmV0dXJuIHZpbV9mZXhpc3RzKGRlc3QpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXN0YXRpYyBjb25zdCBjaGFyICAgc3VmZml4ZXNbXVs0XSA9IHsicG5nIiwgInhwbSIsICJibXAifTsKKwljaGFyX3UJCSAgICBidWZbTUFYUEFUSExdOworCXVuc2lnbmVkIGludAkgICAgaTsKKworCWZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoc3VmZml4ZXMpOyArK2kpCisJICAgIGlmIChndWlfZmluZF9iaXRtYXAoZGVzdCwgYnVmLCAoY2hhciAqKXN1ZmZpeGVzW2ldKSA9PSBPSykKKwkgICAgeworCQlTVFJDUFkoZGVzdCwgYnVmKTsKKwkJcmV0dXJuIFRSVUU7CisJICAgIH0KKworCXJldHVybiBGQUxTRTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgR3RrV2lkZ2V0ICoKK2xvYWRfbWVudV9pY29uZmlsZShjaGFyX3UgKm5hbWUsIEd0a0ljb25TaXplIGljb25fc2l6ZSkKK3sKKyAgICBHdGtXaWRnZXQJICAgICppbWFnZSA9IE5VTEw7CisgICAgR3RrSWNvblNldAkgICAgKmljb25fc2V0OworICAgIEd0a0ljb25Tb3VyY2UgICAqaWNvbl9zb3VyY2U7CisKKyAgICAvKgorICAgICAqIFJhdGhlciB0aGFuIGxvYWRpbmcgdGhlIGljb24gZGlyZWN0bHkgaW50byBhIEd0a0ltYWdlLCBjcmVhdGUKKyAgICAgKiBhIG5ldyBHdGtJY29uU2V0IGFuZCBwdXQgaXQgaW4gdGhlcmUuICBUaGlzIHdheSB3ZSBjYW4gZWFzaWx5CisgICAgICogc2NhbGUgdGhlIHRvb2xiYXIgaWNvbnMgb24gdGhlIGZseSB3aGVuIG5lZWRlZC4KKyAgICAgKi8KKyAgICBpY29uX3NldCA9IGd0a19pY29uX3NldF9uZXcoKTsKKyAgICBpY29uX3NvdXJjZSA9IGd0a19pY29uX3NvdXJjZV9uZXcoKTsKKworICAgIGd0a19pY29uX3NvdXJjZV9zZXRfZmlsZW5hbWUoaWNvbl9zb3VyY2UsIChjb25zdCBjaGFyICopbmFtZSk7CisgICAgZ3RrX2ljb25fc2V0X2FkZF9zb3VyY2UoaWNvbl9zZXQsIGljb25fc291cmNlKTsKKworICAgIGltYWdlID0gZ3RrX2ltYWdlX25ld19mcm9tX2ljb25fc2V0KGljb25fc2V0LCBpY29uX3NpemUpOworCisgICAgZ3RrX2ljb25fc291cmNlX2ZyZWUoaWNvbl9zb3VyY2UpOworICAgIGd0a19pY29uX3NldF91bnJlZihpY29uX3NldCk7CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKKyAgICBzdGF0aWMgR3RrV2lkZ2V0ICoKK2NyZWF0ZV9tZW51X2ljb24odmltbWVudV9UICptZW51LCBHdGtJY29uU2l6ZSBpY29uX3NpemUpCit7CisgICAgR3RrV2lkZ2V0CSppbWFnZSA9IE5VTEw7CisgICAgY2hhcl91CWJ1ZltNQVhQQVRITF07CisKKyAgICAvKiBGaXJzdCB1c2UgYSBzcGVjaWZpZWQgImljb249IiBhcmd1bWVudC4gKi8KKyAgICBpZiAobWVudS0+aWNvbmZpbGUgIT0gTlVMTCAmJiBsb29rdXBfbWVudV9pY29uZmlsZShtZW51LT5pY29uZmlsZSwgYnVmKSkKKwlpbWFnZSA9IGxvYWRfbWVudV9pY29uZmlsZShidWYsIGljb25fc2l6ZSk7CisKKyAgICAvKiBJZiBub3QgZm91bmQgYW5kIG5vdCBidWlsdGluIHNwZWNpZmllZCB0cnkgdXNpbmcgdGhlIG1lbnUgbmFtZS4gKi8KKyAgICBpZiAoaW1hZ2UgPT0gTlVMTCAmJiAhbWVudS0+aWNvbl9idWlsdGluCisJCQkJICAgICAmJiBsb29rdXBfbWVudV9pY29uZmlsZShtZW51LT5uYW1lLCBidWYpKQorCWltYWdlID0gbG9hZF9tZW51X2ljb25maWxlKGJ1ZiwgaWNvbl9zaXplKTsKKworICAgIC8qIFN0aWxsIG5vdCBmb3VuZD8gIFRoZW4gdXNlIGEgYnVpbHRpbiBpY29uLCBhIGJsYW5rIG9uZSBhcyBmYWxsYmFjay4gKi8KKyAgICBpZiAoaW1hZ2UgPT0gTlVMTCkKKyAgICB7CisJY29uc3QgY2hhciAgKnN0b2NrX2lkOworCWNvbnN0IGludCAgIG5faWRzID0gR19OX0VMRU1FTlRTKG1lbnVfc3RvY2tfaWRzKTsKKworCWlmIChtZW51LT5pY29uaWR4ID49IDAgJiYgbWVudS0+aWNvbmlkeCA8IG5faWRzKQorCSAgICBzdG9ja19pZCA9IG1lbnVfc3RvY2tfaWRzW21lbnUtPmljb25pZHhdOworCWVsc2UKKwkgICAgc3RvY2tfaWQgPSBHVEtfU1RPQ0tfTUlTU0lOR19JTUFHRTsKKworCWltYWdlID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKHN0b2NrX2lkLCBpY29uX3NpemUpOworICAgIH0KKworICAgIHJldHVybiBpbWFnZTsKK30KKworI2VuZGlmIC8qIEZFQVRfVE9PTEJBUiAmJiBIQVZFX0dUSzIgKi8KKworI2lmIChkZWZpbmVkKEZFQVRfVE9PTEJBUikgJiYgZGVmaW5lZChIQVZFX0dUSzIpKSB8fCBkZWZpbmVkKFBST1RPKQorCisgICAgdm9pZAorZ3VpX2d0a19yZWdpc3Rlcl9zdG9ja19pY29ucyh2b2lkKQoreworIyAgIGluY2x1ZGUgIi4uL3BpeG1hcHMvc3RvY2tfaWNvbnMuaCIKKyAgICBHdGtJY29uRmFjdG9yeSAqZmFjdG9yeTsKKworICAgIGZhY3RvcnkgPSBndGtfaWNvbl9mYWN0b3J5X25ldygpOworIyAgIGRlZmluZSBBRERfSUNPTihOYW1lLCBEYXRhKSBhZGRfc3RvY2tfaWNvbihmYWN0b3J5LCBOYW1lLCBEYXRhLCAoaW50KXNpemVvZihEYXRhKSkKKworICAgIEFERF9JQ09OKCJ2aW0tYnVpbGQtdGFncyIsCQkgIHN0b2NrX3ZpbV9idWlsZF90YWdzKTsKKyAgICBBRERfSUNPTigidmltLWZpbmQtaGVscCIsCQkgIHN0b2NrX3ZpbV9maW5kX2hlbHApOworICAgIEFERF9JQ09OKCJ2aW0tc2F2ZS1hbGwiLAkJICBzdG9ja192aW1fc2F2ZV9hbGwpOworICAgIEFERF9JQ09OKCJ2aW0tc2Vzc2lvbi1sb2FkIiwJICBzdG9ja192aW1fc2Vzc2lvbl9sb2FkKTsKKyAgICBBRERfSUNPTigidmltLXNlc3Npb24tbmV3IiwJCSAgc3RvY2tfdmltX3Nlc3Npb25fbmV3KTsKKyAgICBBRERfSUNPTigidmltLXNlc3Npb24tc2F2ZSIsCSAgc3RvY2tfdmltX3Nlc3Npb25fc2F2ZSk7CisgICAgQUREX0lDT04oInZpbS1zaGVsbCIsCQkgIHN0b2NrX3ZpbV9zaGVsbCk7CisgICAgQUREX0lDT04oInZpbS13aW5kb3ctbWF4aW1pemUiLAkgIHN0b2NrX3ZpbV93aW5kb3dfbWF4aW1pemUpOworICAgIEFERF9JQ09OKCJ2aW0td2luZG93LW1heGltaXplLXdpZHRoIiwgc3RvY2tfdmltX3dpbmRvd19tYXhpbWl6ZV93aWR0aCk7CisgICAgQUREX0lDT04oInZpbS13aW5kb3ctbWluaW1pemUiLAkgIHN0b2NrX3ZpbV93aW5kb3dfbWluaW1pemUpOworICAgIEFERF9JQ09OKCJ2aW0td2luZG93LW1pbmltaXplLXdpZHRoIiwgc3RvY2tfdmltX3dpbmRvd19taW5pbWl6ZV93aWR0aCk7CisgICAgQUREX0lDT04oInZpbS13aW5kb3ctc3BsaXQiLAkgIHN0b2NrX3ZpbV93aW5kb3dfc3BsaXQpOworICAgIEFERF9JQ09OKCJ2aW0td2luZG93LXNwbGl0LXZlcnRpY2FsIiwgc3RvY2tfdmltX3dpbmRvd19zcGxpdF92ZXJ0aWNhbCk7CisKKyMgICB1bmRlZiBBRERfSUNPTgorICAgIGd0a19pY29uX2ZhY3RvcnlfYWRkX2RlZmF1bHQoZmFjdG9yeSk7CisgICAgZ19vYmplY3RfdW5yZWYoZmFjdG9yeSk7Cit9CisKKyNlbmRpZiAvKiBGRUFUX1RPT0xCQVIgJiYgSEFWRV9HVEsyICovCisKKworLyoKKyAqIE9ubHkgdXNlIGFjY2VsZXJhdG9ycyB3aGVuIGd0a19tZW51X2Vuc3VyZV91bGluZV9hY2NlbF9ncm91cCgpIGlzCisgKiBhdmFpbGFibGUsIHdoaWNoIGlzIGluIHZlcnNpb24gMS4yLjEuICBUaGF0IHdhcyB0aGUgZmlyc3QgdmVyc2lvbiB3aGVyZQorICogYWNjZWxlcmF0b3JzIHByb3Blcmx5IHdvcmtlZCAoYWNjb3JkaW5nIHRvIHRoZSBjaGFuZ2UgbG9nKS4KKyAqLworI2lmZGVmIEdUS19DSEVDS19WRVJTSU9OCisjIGlmIEdUS19DSEVDS19WRVJTSU9OKDEsIDIsIDEpCisjICBkZWZpbmUgR1RLX1VTRV9BQ0NFTAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTUVOVSkgfHwgZGVmaW5lZChQUk9UTykKKworLyoKKyAqIFRyYW5zbGF0ZSBWaW0ncyBtbmVtb25pYyB0YWdnaW5nIHRvIEdUSysgc3R5bGUgYW5kIGNvbnZlcnQgdG8gVVRGLTgKKyAqIGlmIG5lY2Vzc2FyeS4gIFRoZSBjYWxsZXIgbXVzdCB2aW1fZnJlZSgpIHRoZSByZXR1cm5lZCBzdHJpbmcuCisgKgorICoJSW5wdXQJT3V0cHV0CisgKglfCV9fCisgKgkmJgkmCisgKgkmCV8Jc3RyaXBwZWQgaWYgdXNlX21uZW1vbmljID09IEZBTFNFCisgKgk8VGFiPgkJZW5kIG9mIG1lbnUgbGFiZWwgdGV4dAorICovCisgICAgc3RhdGljIGNoYXJfdSAqCit0cmFuc2xhdGVfbW5lbW9uaWNfdGFnKGNoYXJfdSAqbmFtZSwgaW50IHVzZV9tbmVtb25pYykKK3sKKyAgICBjaGFyX3UgICpidWY7CisgICAgY2hhcl91ICAqcHNyYzsKKyAgICBjaGFyX3UgICpwZGVzdDsKKyAgICBpbnQJICAgIG5fdW5kZXJzY29yZXMgPSAwOworCisjIGlmZGVmIEhBVkVfR1RLMgorICAgIG5hbWUgPSBDT05WRVJUX1RPX1VURjgobmFtZSk7CisjIGVuZGlmCisgICAgaWYgKG5hbWUgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGZvciAocHNyYyA9IG5hbWU7ICpwc3JjICE9IE5VTCAmJiAqcHNyYyAhPSBUQUI7ICsrcHNyYykKKwlpZiAoKnBzcmMgPT0gJ18nKQorCSAgICArK25fdW5kZXJzY29yZXM7CisKKyAgICBidWYgPSBhbGxvYygodW5zaWduZWQpKHBzcmMgLSBuYW1lICsgbl91bmRlcnNjb3JlcyArIDEpKTsKKyAgICBpZiAoYnVmICE9IE5VTEwpCisgICAgeworCXBkZXN0ID0gYnVmOworCWZvciAocHNyYyA9IG5hbWU7ICpwc3JjICE9IE5VTCAmJiAqcHNyYyAhPSBUQUI7ICsrcHNyYykKKwl7CisJICAgIGlmICgqcHNyYyA9PSAnXycpCisJICAgIHsKKwkJKnBkZXN0KysgPSAnXyc7CisJCSpwZGVzdCsrID0gJ18nOworCSAgICB9CisJICAgIGVsc2UgaWYgKCpwc3JjICE9ICcmJykKKwkgICAgeworCQkqcGRlc3QrKyA9ICpwc3JjOworCSAgICB9CisJICAgIGVsc2UgaWYgKCoocHNyYyArIDEpID09ICcmJykKKwkgICAgeworCQkqcGRlc3QrKyA9ICpwc3JjKys7CisJICAgIH0KKwkgICAgZWxzZSBpZiAodXNlX21uZW1vbmljKQorCSAgICB7CisJCSpwZGVzdCsrID0gJ18nOworCSAgICB9CisJfQorCSpwZGVzdCA9IE5VTDsKKyAgICB9CisKKyMgaWZkZWYgSEFWRV9HVEsyCisgICAgQ09OVkVSVF9UT19VVEY4X0ZSRUUobmFtZSk7CisjIGVuZGlmCisgICAgcmV0dXJuIGJ1ZjsKK30KKworIyBpZmRlZiBIQVZFX0dUSzIKKworICAgIHN0YXRpYyB2b2lkCittZW51X2l0ZW1fbmV3KHZpbW1lbnVfVCAqbWVudSwgR3RrV2lkZ2V0ICpwYXJlbnRfd2lkZ2V0KQoreworICAgIEd0a1dpZGdldAkqYm94OworICAgIGNoYXJfdQkqdGV4dDsKKyAgICBpbnQJCXVzZV9tbmVtb25pYzsKKworICAgIC8qIEl0IHdvdWxkIGJlIG5lYXQgdG8gaGF2ZSBpbWFnZSBtZW51IGl0ZW1zLCBidXQgdGhhdCB3b3VsZCByZXF1aXJlIG1ham9yCisgICAgICogY2hhbmdlcyB0byBWaW0ncyBtZW51IHN5c3RlbS4gIE5vdCB0byBtZW50aW9uIHRoYXQgYWxsIHRoZSB0cmFuc2xhdGlvbnMKKyAgICAgKiBoYWQgdG8gYmUgdXBkYXRlZC4gKi8KKyAgICBtZW51LT5pZCA9IGd0a19tZW51X2l0ZW1fbmV3KCk7CisgICAgYm94ID0gZ3RrX2hib3hfbmV3KEZBTFNFLCAyMCk7CisKKyAgICB1c2VfbW5lbW9uaWMgPSAocF93YWtbMF0gIT0gJ24nIHx8ICFHVEtfSVNfTUVOVV9CQVIocGFyZW50X3dpZGdldCkpOworICAgIHRleHQgPSB0cmFuc2xhdGVfbW5lbW9uaWNfdGFnKG1lbnUtPm5hbWUsIHVzZV9tbmVtb25pYyk7CisKKyAgICBtZW51LT5sYWJlbCA9IGd0a19sYWJlbF9uZXdfd2l0aF9tbmVtb25pYygoY29uc3QgY2hhciAqKXRleHQpOworICAgIHZpbV9mcmVlKHRleHQpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgbWVudS0+bGFiZWwsIEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICBpZiAobWVudS0+YWN0ZXh0ICE9IE5VTEwgJiYgbWVudS0+YWN0ZXh0WzBdICE9IE5VTCkKKyAgICB7CisJdGV4dCA9IENPTlZFUlRfVE9fVVRGOChtZW51LT5hY3RleHQpOworCisJZ3RrX2JveF9wYWNrX2VuZChHVEtfQk9YKGJveCksCisJCQkgZ3RrX2xhYmVsX25ldygoY29uc3QgY2hhciAqKXRleHQpLAorCQkJIEZBTFNFLCBGQUxTRSwgMCk7CisKKwlDT05WRVJUX1RPX1VURjhfRlJFRSh0ZXh0KTsKKyAgICB9CisKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1lbnUtPmlkKSwgYm94KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1lbnUtPmlkKTsKK30KKworIyBlbHNlIC8qICFIQVZFX0dUSzIgKi8KKworLyoKKyAqIENyZWF0ZSBhIGhpZ2hseSBjdXN0b21pemVkIG1lbnUgaXRlbSBieSBoYW5kIGluc3RlYWQgb2YgYnkgdXNpbmc6CisgKgorICogZ3RrX21lbnVfaXRlbV9uZXdfd2l0aF9sYWJlbChtZW51LT5kbmFtZSk7CisgKgorICogVGhpcyBpcyBuZWNjZXNzYXJ5LCBzaW5jZSB0aGVyZSBpcyBubyBvdGhlciB3YXkgaW4gR1RLKyAxIHRvIGdldCB0aGUKKyAqIG5vdCBhdXRvbWF0aWNhbGx5IHBhcnNlZCBhY2NlbGxlcmF0b3Igc3R1ZmYgcmlnaHQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbWVudV9pdGVtX25ldyh2aW1tZW51X1QgKm1lbnUsIEd0a1dpZGdldCAqcGFyZW50X3dpZGdldCkKK3sKKyAgICBHdGtXaWRnZXQJKndpZGdldDsKKyAgICBHdGtXaWRnZXQJKmJpbjsKKyAgICBHdGtXaWRnZXQJKmxhYmVsOworICAgIGNoYXJfdQkqbmFtZTsKKyAgICBndWludAlhY2NlbF9rZXk7CisKKyAgICB3aWRnZXQgPSBndGtfd2lkZ2V0X25ldyhHVEtfVFlQRV9NRU5VX0lURU0sCisJCQkgICAgIkd0a1dpZGdldDo6dmlzaWJsZSIsIFRSVUUsCisJCQkgICAgIkd0a1dpZGdldDo6c2Vuc2l0aXZlIiwgVFJVRSwKKwkJCSAgICAvKiAiR3RrV2lkZ2V0OjpwYXJlbnQiLCBwYXJlbnQtPnN1Ym1lbnVfaWQsICovCisJCQkgICAgTlVMTCk7CisgICAgYmluID0gZ3RrX3dpZGdldF9uZXcoR1RLX1RZUEVfSEJPWCwKKwkJCSAiR3RrV2lkZ2V0Ojp2aXNpYmxlIiwgVFJVRSwKKwkJCSAiR3RrV2lkZ2V0OjpwYXJlbnQiLCB3aWRnZXQsCisJCQkgIkd0a0JveDo6c3BhY2luZyIsIDE2LAorCQkJIE5VTEwpOworICAgIGxhYmVsID0gZ3RrX3dpZGdldF9uZXcoR1RLX1RZUEVfQUNDRUxfTEFCRUwsCisJCQkgICAiR3RrV2lkZ2V0Ojp2aXNpYmxlIiwgVFJVRSwKKwkJCSAgICJHdGtXaWRnZXQ6OnBhcmVudCIsIGJpbiwKKwkJCSAgICJHdGtBY2NlbExhYmVsOjphY2NlbF93aWRnZXQiLCB3aWRnZXQsCisJCQkgICAiR3RrTWlzYzo6eGFsaWduIiwgMC4wLAorCQkJICAgTlVMTCk7CisgICAgbWVudS0+bGFiZWwgPSBsYWJlbDsKKworICAgIGlmIChtZW51LT5hY3RleHQpCisJZ3RrX3dpZGdldF9uZXcoR1RLX1RZUEVfTEFCRUwsCisJCSAgICAgICAiR3RrV2lkZ2V0Ojp2aXNpYmxlIiwgVFJVRSwKKwkJICAgICAgICJHdGtXaWRnZXQ6OnBhcmVudCIsIGJpbiwKKwkJICAgICAgICJHdGtMYWJlbDo6bGFiZWwiLCBtZW51LT5hY3RleHQsCisJCSAgICAgICAiR3RrTWlzYzo6eGFsaWduIiwgMS4wLAorCQkJTlVMTCk7CisKKyAgICAvKgorICAgICAqIFRyYW5zbGF0ZSBWSU0gYWNjZWxlcmF0b3IgdGFnZ2luZyBpbnRvIEdUSysncy4gIE5vdGUgdGhhdCBzaW5jZSBHVEsgdXNlcworICAgICAqIHVuZGVyc2NvcmVzIGFzIHRoZSBhY2NlbGVyYXRvciBrZXksIHdlIG5lZWQgdG8gYWRkIGFuIGFkZGl0aW9uYWwgdW5kZXItCisgICAgICogc2NvcmUgZm9yIGVhY2ggdW5kZXJzdG9yZSB0aGF0IGFwcGVhcnMgaW4gdGhlIG1lbnUgbmFtZS4KKyAgICAgKi8KKyMgIGlmZGVmIEdUS19VU0VfQUNDRUwKKyAgICBuYW1lID0gdHJhbnNsYXRlX21uZW1vbmljX3RhZyhtZW51LT5uYW1lLAorCQkocF93YWtbMF0gIT0gJ24nIHx8ICFHVEtfSVNfTUVOVV9CQVIocGFyZW50X3dpZGdldCkpKTsKKyMgIGVsc2UKKyAgICBuYW1lID0gdHJhbnNsYXRlX21uZW1vbmljX3RhZyhtZW51LT5uYW1lLCBGQUxTRSk7CisjICBlbmRpZgorCisgICAgLyogbGV0IEdUSyBkbyBpdHMgdGhpbmcgKi8KKyAgICBhY2NlbF9rZXkgPSBndGtfbGFiZWxfcGFyc2VfdWxpbmUoR1RLX0xBQkVMKGxhYmVsKSwgKGNvbnN0IGNoYXIgKiluYW1lKTsKKyAgICB2aW1fZnJlZShuYW1lKTsKKworIyAgaWZkZWYgR1RLX1VTRV9BQ0NFTAorICAgIC8qIERvbid0IGFkZCBhY2NlbGF0b3IgaWYgJ3dpbmFsdGtleXMnIGlzICJubyIuICovCisgICAgaWYgKGFjY2VsX2tleSAhPSBHREtfVm9pZFN5bWJvbCkKKyAgICB7CisJaWYgKEdUS19JU19NRU5VX0JBUihwYXJlbnRfd2lkZ2V0KSkKKwl7CisJICAgIGlmICgqcF93YWsgIT0gJ24nKQorCQlndGtfd2lkZ2V0X2FkZF9hY2NlbGVyYXRvcih3aWRnZXQsCisJCQkiYWN0aXZhdGVfaXRlbSIsCisJCQlndWkuYWNjZWxfZ3JvdXAsCisJCQlhY2NlbF9rZXksIEdES19NT0QxX01BU0ssCisJCQkoR3RrQWNjZWxGbGFncykwKTsKKwl9CisJZWxzZQorCXsKKwkgICAgZ3RrX3dpZGdldF9hZGRfYWNjZWxlcmF0b3Iod2lkZ2V0LAorCQkgICAgImFjdGl2YXRlX2l0ZW0iLAorCQkgICAgZ3RrX21lbnVfZW5zdXJlX3VsaW5lX2FjY2VsX2dyb3VwKEdUS19NRU5VKHBhcmVudF93aWRnZXQpKSwKKwkJICAgIGFjY2VsX2tleSwgMCwKKwkJICAgIChHdGtBY2NlbEZsYWdzKTApOworCX0KKyAgICB9CisjICBlbmRpZiAvKiBHVEtfVVNFX0FDQ0VMICovCisKKyAgICBtZW51LT5pZCA9IHdpZGdldDsKK30KKworIyBlbmRpZiAvKiAhSEFWRV9HVEsyICovCisKKyAgICB2b2lkCitndWlfbWNoX2FkZF9tZW51KHZpbW1lbnVfVCAqbWVudSwgaW50IGlkeCkKK3sKKyAgICB2aW1tZW51X1QJKnBhcmVudDsKKyAgICBHdGtXaWRnZXQJKnBhcmVudF93aWRnZXQ7CisKKyAgICBpZiAobWVudS0+bmFtZVswXSA9PSAnXScgfHwgbWVudV9pc19wb3B1cChtZW51LT5uYW1lKSkKKyAgICB7CisJbWVudS0+c3VibWVudV9pZCA9IGd0a19tZW51X25ldygpOworCXJldHVybjsKKyAgICB9CisKKyAgICBwYXJlbnQgPSBtZW51LT5wYXJlbnQ7CisKKyAgICBpZiAoKHBhcmVudCAhPSBOVUxMICYmIHBhcmVudC0+c3VibWVudV9pZCA9PSBOVUxMKQorCSAgICB8fCAhbWVudV9pc19tZW51YmFyKG1lbnUtPm5hbWUpKQorCXJldHVybjsKKworICAgIHBhcmVudF93aWRnZXQgPSAocGFyZW50ICE9IE5VTEwpID8gcGFyZW50LT5zdWJtZW51X2lkIDogZ3VpLm1lbnViYXI7CisgICAgbWVudV9pdGVtX25ldyhtZW51LCBwYXJlbnRfd2lkZ2V0KTsKKworICAgIC8qIHNpbmNlIHRoZSB0ZWFyb2ZmIHNob3VsZCBhbHdheXMgYXBwZWFyIGZpcnN0LCBpbmNyZW1lbnQgaWR4ICovCisgICAgaWYgKHBhcmVudCAhPSBOVUxMICYmICFtZW51X2lzX3BvcHVwKHBhcmVudC0+bmFtZSkpCisJKytpZHg7CisKKyAgICBndGtfbWVudV9zaGVsbF9pbnNlcnQoR1RLX01FTlVfU0hFTEwocGFyZW50X3dpZGdldCksIG1lbnUtPmlkLCBpZHgpOworCisjaWZuZGVmIEhBVkVfR1RLMgorICAgIC8qCisgICAgICogVGhlICJIZWxwIiBtZW51IGlzIGEgc3BlY2lhbCBjYXNlLCBhbmQgc2hvdWxkIGJlIHBsYWNlZCBhdCB0aGUgZmFyCisgICAgICogcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBtZW51LWJhci4gIEl0J3MgZGV0ZWN0ZWQgYnkgaXRzIGhpZ2ggcHJpb3JpdHkuCisgICAgICoKKyAgICAgKiBSaWdodC1hbGlnbmluZyAiSGVscCIgaXMgY29uc2lkZXJlZCBiYWQgVUkgZGVzaWduIG5vd2FkYXlzLgorICAgICAqIFRodXMgbGV0cyBkaXNhYmxlIHRoaXMgZm9yIEdUSysgMiB0byBtYXRjaCB0aGUgZW52aXJvbm1lbnQuCisgICAgICovCisgICAgaWYgKHBhcmVudCA9PSBOVUxMICYmIG1lbnUtPnByaW9yaXR5ID49IDk5OTkpCisJZ3RrX21lbnVfaXRlbV9yaWdodF9qdXN0aWZ5KEdUS19NRU5VX0lURU0obWVudS0+aWQpKTsKKyNlbmRpZgorCisgICAgbWVudS0+c3VibWVudV9pZCA9IGd0a19tZW51X25ldygpOworCisgICAgZ3RrX21lbnVfc2V0X2FjY2VsX2dyb3VwKEdUS19NRU5VKG1lbnUtPnN1Ym1lbnVfaWQpLCBndWkuYWNjZWxfZ3JvdXApOworICAgIGd0a19tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoR1RLX01FTlVfSVRFTShtZW51LT5pZCksIG1lbnUtPnN1Ym1lbnVfaWQpOworCisgICAgbWVudS0+dGVhcm9mZl9oYW5kbGUgPSBndGtfdGVhcm9mZl9tZW51X2l0ZW1fbmV3KCk7CisgICAgaWYgKHZpbV9zdHJjaHIocF9nbywgR09fVEVBUk9GRikgIT0gTlVMTCkKKwlndGtfd2lkZ2V0X3Nob3cobWVudS0+dGVhcm9mZl9oYW5kbGUpOworICAgIGd0a19tZW51X3ByZXBlbmQoR1RLX01FTlUobWVudS0+c3VibWVudV9pZCksIG1lbnUtPnRlYXJvZmZfaGFuZGxlKTsKK30KKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK21lbnVfaXRlbV9hY3RpdmF0ZShHdGtXaWRnZXQgKndpZGdldCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBndWlfbWVudV9jYigodmltbWVudV9UICopZGF0YSk7CisKKyMgaWZuZGVmIEhBVkVfR1RLMgorICAgIC8qIFdvcmsgYXJvdW5kIGEgYnVnIGluIEdUSysgMTogd2UgZG9uJ3Qgc2VlbSB0byBnZXQgYSBmb2N1cy1pbgorICAgICAqIGV2ZW50IGFmdGVyIGNsaWNraW5nIGEgbWVudSBpdGVtIHNob3duIHZpYSA6cG9wdXAuICovCisgICAgaWYgKCFndWkuaW5fZm9jdXMpCisJZ3VpX2ZvY3VzX2NoYW5nZShUUlVFKTsKKyMgZW5kaWYKKworICAgIC8qIG1ha2Ugc3VyZSB0aGUgbWVudSBhY3Rpb24gaXMgdGFrZW4gaW1tZWRpYXRlbHkgKi8KKyAgICBpZiAoZ3RrX21haW5fbGV2ZWwoKSA+IDApCisJZ3RrX21haW5fcXVpdCgpOworfQorCisjIGlmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiAhZGVmaW5lZChIQVZFX0dUSzIpCisvKgorICogVGhlc2UgYXJlIHRoZSBwaXhtYXBzIHVzZWQgZm9yIHRoZSBkZWZhdWx0IGJ1dHRvbnMuCisgKiBPcmRlciBtdXN0IGV4YWN0bHkgbWF0Y2ggdG9vbGJhcl9uYW1lc1tdIGluIG1lbnUuYyEKKyAqLworc3RhdGljIGNoYXIgKiooYnVpbHRfaW5fcGl4bWFwc1tdKSA9Cit7CisgICAgdGJfbmV3X3hwbSwKKyAgICB0Yl9vcGVuX3hwbSwKKyAgICB0Yl9zYXZlX3hwbSwKKyAgICB0Yl91bmRvX3hwbSwKKyAgICB0Yl9yZWRvX3hwbSwKKyAgICB0Yl9jdXRfeHBtLAorICAgIHRiX2NvcHlfeHBtLAorICAgIHRiX3Bhc3RlX3hwbSwKKyAgICB0Yl9wcmludF94cG0sCisgICAgdGJfaGVscF94cG0sCisgICAgdGJfZmluZF94cG0sCisgICAgdGJfc2F2ZV9hbGxfeHBtLAorICAgIHRiX3NhdmVfc2Vzc2lvbl94cG0sCisgICAgdGJfbmV3X3Nlc3Npb25feHBtLAorICAgIHRiX2xvYWRfc2Vzc2lvbl94cG0sCisgICAgdGJfbWFjcm9feHBtLAorICAgIHRiX3JlcGxhY2VfeHBtLAorICAgIHRiX2Nsb3NlX3hwbSwKKyAgICB0Yl9tYXhpbWl6ZV94cG0sCisgICAgdGJfbWluaW1pemVfeHBtLAorICAgIHRiX3NwbGl0X3hwbSwKKyAgICB0Yl9zaGVsbF94cG0sCisgICAgdGJfZmluZF9wcmV2X3hwbSwKKyAgICB0Yl9maW5kX25leHRfeHBtLAorICAgIHRiX2ZpbmRfaGVscF94cG0sCisgICAgdGJfbWFrZV94cG0sCisgICAgdGJfanVtcF94cG0sCisgICAgdGJfY3RhZ3NfeHBtLAorICAgIHRiX3ZzcGxpdF94cG0sCisgICAgdGJfbWF4d2lkdGhfeHBtLAorICAgIHRiX21pbndpZHRoX3hwbSwKKyAgICB0Yl9leGl0X3hwbQorfTsKKworLyoKKyAqIGNyZWF0ZXMgYSBibGFuayBwaXhtYXAgdXNpbmcgdGJfYmxhbmsKKyAqLworICAgIHN0YXRpYyB2b2lkCitwaXhtYXBfY3JlYXRlX2Zyb21feHBtKGNoYXIgKip4cG0sIEdka1BpeG1hcCAqKnBpeG1hcCwgR2RrQml0bWFwICoqbWFzaykKK3sKKyAgICAqcGl4bWFwID0gZ2RrX3BpeG1hcF9jb2xvcm1hcF9jcmVhdGVfZnJvbV94cG1fZCgKKwkgICAgTlVMTCwKKwkgICAgZ3RrX3dpZGdldF9nZXRfY29sb3JtYXAoZ3VpLm1haW53aW4pLAorCSAgICBtYXNrLAorCSAgICBOVUxMLAorCSAgICB4cG0pOworfQorCisvKgorICogY3JlYXRlcyBhIHBpeG1hcCBieSB1c2luZyBhIGJ1aWx0LWluIG51bWJlcgorICovCisgICAgc3RhdGljIHZvaWQKK3BpeG1hcF9jcmVhdGVfYnlfbnVtKGludCBwaXhtYXBfbnVtLCBHZGtQaXhtYXAgKipwaXhtYXAsIEdka0JpdG1hcCAqKm1hc2spCit7CisgICAgaWYgKHBpeG1hcF9udW0gPj0gMCAmJiBwaXhtYXBfbnVtIDwgKHNpemVvZihidWlsdF9pbl9waXhtYXBzKQorCQkJCQkgICAgLyBzaXplb2YoYnVpbHRfaW5fcGl4bWFwc1swXSkpKQorCXBpeG1hcF9jcmVhdGVfZnJvbV94cG0oYnVpbHRfaW5fcGl4bWFwc1twaXhtYXBfbnVtXSwgcGl4bWFwLCBtYXNrKTsKK30KKworLyoKKyAqIENyZWF0ZXMgYSBwaXhtYXAgYnkgdXNpbmcgdGhlIHBpeG1hcCAibmFtZSIgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJy9iaXRtYXBzLworICovCisgICAgc3RhdGljIHZvaWQKK3BpeG1hcF9jcmVhdGVfYnlfZGlyKGNoYXJfdSAqbmFtZSwgR2RrUGl4bWFwICoqcGl4bWFwLCBHZGtCaXRtYXAgKiptYXNrKQoreworICAgIGNoYXJfdSBmdWxsX3BhdGhuYW1lW01BWFBBVEhMICsgMV07CisKKyAgICBpZiAoZ3VpX2ZpbmRfYml0bWFwKG5hbWUsIGZ1bGxfcGF0aG5hbWUsICJ4cG0iKSA9PSBPSykKKwkqcGl4bWFwID0gZ2RrX3BpeG1hcF9jb2xvcm1hcF9jcmVhdGVfZnJvbV94cG0oCisJCU5VTEwsCisJCWd0a193aWRnZXRfZ2V0X2NvbG9ybWFwKGd1aS5tYWlud2luKSwKKwkJbWFzaywKKwkJJmd1aS5tYWlud2luLT5zdHlsZS0+YmdbR1RLX1NUQVRFX05PUk1BTF0sCisJCShjb25zdCBjaGFyICopZnVsbF9wYXRobmFtZSk7Cit9CisKKy8qCisgKiBDcmVhdGVzIGEgcGl4bWFwIGJ5IHVzaW5nIHRoZSBwaXhtYXAgImZuYW1lIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitwaXhtYXBfY3JlYXRlX2Zyb21fZmlsZShjaGFyX3UgKmZuYW1lLCBHZGtQaXhtYXAgKipwaXhtYXAsIEdka0JpdG1hcCAqKm1hc2spCit7CisgICAgKnBpeG1hcCA9IGdka19waXhtYXBfY29sb3JtYXBfY3JlYXRlX2Zyb21feHBtKAorCQlOVUxMLAorCQlndGtfd2lkZ2V0X2dldF9jb2xvcm1hcChndWkubWFpbndpbiksCisJCW1hc2ssCisJCSZndWkubWFpbndpbi0+c3R5bGUtPmJnW0dUS19TVEFURV9OT1JNQUxdLAorCQkoY29uc3QgY2hhciAqKWZuYW1lKTsKK30KKworIyBlbmRpZiAvKiBGRUFUX1RPT0xCQVIgJiYgIUhBVkVfR1RLMiAqLworCisgICAgdm9pZAorZ3VpX21jaF9hZGRfbWVudV9pdGVtKHZpbW1lbnVfVCAqbWVudSwgaW50IGlkeCkKK3sKKyAgICB2aW1tZW51X1QgKnBhcmVudDsKKworICAgIHBhcmVudCA9IG1lbnUtPnBhcmVudDsKKworIyBpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICBpZiAobWVudV9pc190b29sYmFyKHBhcmVudC0+bmFtZSkpCisgICAgeworCUd0a1Rvb2xiYXIgKnRvb2xiYXI7CisKKwl0b29sYmFyID0gR1RLX1RPT0xCQVIoZ3VpLnRvb2xiYXIpOworCW1lbnUtPnN1Ym1lbnVfaWQgPSBOVUxMOworCisJaWYgKG1lbnVfaXNfc2VwYXJhdG9yKG1lbnUtPm5hbWUpKQorCXsKKwkgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0X3NwYWNlKHRvb2xiYXIsIGlkeCk7CisJICAgIG1lbnUtPmlkID0gTlVMTDsKKwl9CisJZWxzZQorCXsKKyMgIGlmZGVmIEhBVkVfR1RLMgorCSAgICBjaGFyX3UgKnRleHQ7CisJICAgIGNoYXJfdSAqdG9vbHRpcDsKKworCSAgICB0ZXh0ICAgID0gQ09OVkVSVF9UT19VVEY4KG1lbnUtPmRuYW1lKTsKKwkgICAgdG9vbHRpcCA9IENPTlZFUlRfVE9fVVRGOChtZW51LT5zdHJpbmdzW01FTlVfSU5ERVhfVElQXSk7CisKKwkgICAgbWVudS0+aWQgPSBndGtfdG9vbGJhcl9pbnNlcnRfaXRlbSgKKwkJICAgIHRvb2xiYXIsCisJCSAgICAoY29uc3QgY2hhciAqKXRleHQsCisJCSAgICAoY29uc3QgY2hhciAqKXRvb2x0aXAsCisJCSAgICBOVUxMLAorCQkgICAgY3JlYXRlX21lbnVfaWNvbihtZW51LCBndGtfdG9vbGJhcl9nZXRfaWNvbl9zaXplKHRvb2xiYXIpKSwKKwkJICAgIEdfQ0FMTEJBQ0soJm1lbnVfaXRlbV9hY3RpdmF0ZSksCisJCSAgICBtZW51LAorCQkgICAgaWR4KTsKKworCSAgICBDT05WRVJUX1RPX1VURjhfRlJFRSh0ZXh0KTsKKwkgICAgQ09OVkVSVF9UT19VVEY4X0ZSRUUodG9vbHRpcCk7CisKKyMgIGVsc2UgLyogIUhBVkVfR1RLMiAqLworCisJICAgIEdka1BpeG1hcCAqcGl4bWFwID0gTlVMTDsKKwkgICAgR2RrQml0bWFwICptYXNrID0gTlVMTDsKKworCSAgICAvKiBGaXJzdCB0cnkgdXNlciBzcGVjaWZpZWQgYml0bWFwLCB0aGVuIGJ1aWx0aW4sIHRoZSBhIGJsYW5rLiAqLworCSAgICBpZiAobWVudS0+aWNvbmZpbGUgIT0gTlVMTCkKKwkgICAgeworCQljaGFyX3UgYnVmW01BWFBBVEhMICsgMV07CisKKwkJZ3VpX2ZpbmRfaWNvbmZpbGUobWVudS0+aWNvbmZpbGUsIGJ1ZiwgInhwbSIpOworCQlwaXhtYXBfY3JlYXRlX2Zyb21fZmlsZShidWYsICZwaXhtYXAsICZtYXNrKTsKKwkgICAgfQorCSAgICBpZiAocGl4bWFwID09IE5VTEwgJiYgIW1lbnUtPmljb25fYnVpbHRpbikKKwkJcGl4bWFwX2NyZWF0ZV9ieV9kaXIobWVudS0+bmFtZSwgJnBpeG1hcCwgJm1hc2spOworCSAgICBpZiAocGl4bWFwID09IE5VTEwgJiYgbWVudS0+aWNvbmlkeCA+PSAwKQorCQlwaXhtYXBfY3JlYXRlX2J5X251bShtZW51LT5pY29uaWR4LCAmcGl4bWFwLCAmbWFzayk7CisJICAgIGlmIChwaXhtYXAgPT0gTlVMTCkKKwkJcGl4bWFwX2NyZWF0ZV9mcm9tX3hwbSh0Yl9ibGFua194cG0sICZwaXhtYXAsICZtYXNrKTsKKwkgICAgaWYgKHBpeG1hcCA9PSBOVUxMKQorCQlyZXR1cm47IC8qIHNob3VsZCBhdCBsZWFzdCBoYXZlIGJsYW5rIHBpeG1hcCwgYnV0IGlmIG5vdC4uLiAqLworCisJICAgIG1lbnUtPmlkID0gZ3RrX3Rvb2xiYXJfaW5zZXJ0X2l0ZW0oCisJCQkJICAgIHRvb2xiYXIsCisJCQkJICAgIChjaGFyICopKG1lbnUtPmRuYW1lKSwKKwkJCQkgICAgKGNoYXIgKikobWVudS0+c3RyaW5nc1tNRU5VX0lOREVYX1RJUF0pLAorCQkJCSAgICAoY2hhciAqKShtZW51LT5kbmFtZSksCisJCQkJICAgIGd0a19waXhtYXBfbmV3KHBpeG1hcCwgbWFzayksCisJCQkJICAgIEdUS19TSUdOQUxfRlVOQyhtZW51X2l0ZW1fYWN0aXZhdGUpLAorCQkJCSAgICAoZ3BvaW50ZXIpbWVudSwKKwkJCQkgICAgaWR4KTsKKyMgIGVuZGlmIC8qICFIQVZFX0dUSzIgKi8KKwl9CisgICAgfQorICAgIGVsc2UKKyMgZW5kaWYgLyogRkVBVF9UT09MQkFSICovCisgICAgeworCS8qIE5vIHBhcmVudCwgbXVzdCBiZSBhIG5vbi1tZW51YmFyIG1lbnUgKi8KKwlpZiAocGFyZW50LT5zdWJtZW51X2lkID09IE5VTEwpCisJICAgIHJldHVybjsKKworCS8qIE1ha2UgcGxhY2UgZm9yIHRoZSBwb3NzaWJsZSB0ZWFyb2ZmIGhhbmRsZSBpdGVtLiAgTm90IGluIHRoZSBwb3B1cAorCSAqIG1lbnUsIGl0IGRvZXNuJ3QgaGF2ZSBhIHRlYXJvZmYgaXRlbS4gKi8KKwlpZiAocGFyZW50ICE9IE5VTEwgJiYgIW1lbnVfaXNfcG9wdXAocGFyZW50LT5uYW1lKSkKKwkgICAgKytpZHg7CisKKwlpZiAobWVudV9pc19zZXBhcmF0b3IobWVudS0+bmFtZSkpCisJeworCSAgICAvKiBTZXBhcmF0b3I6IEp1c3QgYWRkIGl0ICovCisJICAgIG1lbnUtPmlkID0gZ3RrX21lbnVfaXRlbV9uZXcoKTsKKwkgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKG1lbnUtPmlkLCBGQUxTRSk7CisJICAgIGd0a193aWRnZXRfc2hvdyhtZW51LT5pZCk7CisJICAgIGd0a19tZW51X2luc2VydChHVEtfTUVOVShwYXJlbnQtPnN1Ym1lbnVfaWQpLCBtZW51LT5pZCwgaWR4KTsKKworCSAgICByZXR1cm47CisJfQorCisJLyogQWRkIHRleHR1YWwgbWVudSBpdGVtLiAqLworCW1lbnVfaXRlbV9uZXcobWVudSwgcGFyZW50LT5zdWJtZW51X2lkKTsKKwlndGtfd2lkZ2V0X3Nob3cobWVudS0+aWQpOworCWd0a19tZW51X2luc2VydChHVEtfTUVOVShwYXJlbnQtPnN1Ym1lbnVfaWQpLCBtZW51LT5pZCwgaWR4KTsKKworCWlmIChtZW51LT5pZCAhPSBOVUxMKQorCSAgICBndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChtZW51LT5pZCksICJhY3RpdmF0ZSIsCisJCQkgICAgICAgR1RLX1NJR05BTF9GVU5DKG1lbnVfaXRlbV9hY3RpdmF0ZSksIG1lbnUpOworICAgIH0KK30KKyNlbmRpZiAvKiBGRUFUX01FTlUgKi8KKworCisgICAgdm9pZAorZ3VpX21jaF9zZXRfdGV4dF9hcmVhX3BvcyhpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKK3sKKyAgICBndGtfZm9ybV9tb3ZlX3Jlc2l6ZShHVEtfRk9STShndWkuZm9ybXdpbiksIGd1aS5kcmF3YXJlYSwgeCwgeSwgdywgaCk7Cit9CisKKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEVuYWJsZSBvciBkaXNhYmxlIGFjY2VsYXRvcnMgZm9yIHRoZSB0b3BsZXZlbCBtZW51cy4KKyAqLworICAgIHZvaWQKK2d1aV9ndGtfc2V0X21uZW1vbmljcyhpbnQgZW5hYmxlKQoreworICAgIHZpbW1lbnVfVAkqbWVudTsKKyAgICBjaGFyX3UJKm5hbWU7CisjIGlmICFkZWZpbmVkKEhBVkVfR1RLMikgJiYgZGVmaW5lZChHVEtfVVNFX0FDQ0VMKQorICAgIGd1aW50CWFjY2VsX2tleTsKKyMgZW5kaWYKKworICAgIGZvciAobWVudSA9IHJvb3RfbWVudTsgbWVudSAhPSBOVUxMOyBtZW51ID0gbWVudS0+bmV4dCkKKyAgICB7CisJaWYgKG1lbnUtPmlkID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworCisjIGlmIGRlZmluZWQoSEFWRV9HVEsyKQorCW5hbWUgPSB0cmFuc2xhdGVfbW5lbW9uaWNfdGFnKG1lbnUtPm5hbWUsIGVuYWJsZSk7CisJZ3RrX2xhYmVsX3NldF90ZXh0X3dpdGhfbW5lbW9uaWMoR1RLX0xBQkVMKG1lbnUtPmxhYmVsKSwKKwkJCQkJIChjb25zdCBjaGFyICopbmFtZSk7CisJdmltX2ZyZWUobmFtZSk7CisjIGVsaWYgZGVmaW5lZChHVEtfVVNFX0FDQ0VMKQorCW5hbWUgPSB0cmFuc2xhdGVfbW5lbW9uaWNfdGFnKG1lbnUtPm5hbWUsIFRSVUUpOworCWlmIChuYW1lICE9IE5VTEwpCisJeworCSAgICBhY2NlbF9rZXkgPSBndGtfbGFiZWxfcGFyc2VfdWxpbmUoR1RLX0xBQkVMKG1lbnUtPmxhYmVsKSwKKwkJCQkJICAgICAgKGNvbnN0IGNoYXIgKiluYW1lKTsKKwkgICAgaWYgKGFjY2VsX2tleSAhPSBHREtfVm9pZFN5bWJvbCkKKwkJZ3RrX3dpZGdldF9yZW1vdmVfYWNjZWxlcmF0b3IobWVudS0+aWQsIGd1aS5hY2NlbF9ncm91cCwKKwkJCQkJICAgICAgYWNjZWxfa2V5LCBHREtfTU9EMV9NQVNLKTsKKwkgICAgaWYgKGVuYWJsZSAmJiBhY2NlbF9rZXkgIT0gR0RLX1ZvaWRTeW1ib2wpCisJCWd0a193aWRnZXRfYWRkX2FjY2VsZXJhdG9yKG1lbnUtPmlkLCAiYWN0aXZhdGVfaXRlbSIsCisJCQkJCSAgIGd1aS5hY2NlbF9ncm91cCwKKwkJCQkJICAgYWNjZWxfa2V5LCBHREtfTU9EMV9NQVNLLAorCQkJCQkgICAoR3RrQWNjZWxGbGFncykwKTsKKwkgICAgdmltX2ZyZWUobmFtZSk7CisJfQorCWlmICghZW5hYmxlKQorCXsKKwkgICAgbmFtZSA9IHRyYW5zbGF0ZV9tbmVtb25pY190YWcobWVudS0+bmFtZSwgRkFMU0UpOworCSAgICBndGtfbGFiZWxfcGFyc2VfdWxpbmUoR1RLX0xBQkVMKG1lbnUtPmxhYmVsKSwgKGNvbnN0IGNoYXIgKiluYW1lKTsKKwkgICAgdmltX2ZyZWUobmFtZSk7CisJfQorIyBlbmRpZgorICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCityZWN1cnNlX3RlYXJvZmZzKHZpbW1lbnVfVCAqbWVudSwgaW50IHZhbCkKK3sKKyAgICBmb3IgKDsgbWVudSAhPSBOVUxMOyBtZW51ID0gbWVudS0+bmV4dCkKKyAgICB7CisJaWYgKG1lbnUtPnN1Ym1lbnVfaWQgIT0gTlVMTCAmJiBtZW51LT50ZWFyb2ZmX2hhbmRsZSAhPSBOVUxMCisJCSYmIG1lbnUtPm5hbWVbMF0gIT0gJ10nICYmICFtZW51X2lzX3BvcHVwKG1lbnUtPm5hbWUpKQorCXsKKwkgICAgaWYgKHZhbCkKKwkJZ3RrX3dpZGdldF9zaG93KG1lbnUtPnRlYXJvZmZfaGFuZGxlKTsKKwkgICAgZWxzZQorCQlndGtfd2lkZ2V0X2hpZGUobWVudS0+dGVhcm9mZl9oYW5kbGUpOworCX0KKwlyZWN1cnNlX3RlYXJvZmZzKG1lbnUtPmNoaWxkcmVuLCB2YWwpOworICAgIH0KK30KKworICAgIHZvaWQKK2d1aV9tY2hfdG9nZ2xlX3RlYXJvZmZzKGludCBlbmFibGUpCit7CisgICAgcmVjdXJzZV90ZWFyb2Zmcyhyb290X21lbnUsIGVuYWJsZSk7Cit9CisjZW5kaWYgLyogRkVBVF9NRU5VICovCisKKworI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiAhZGVmaW5lZChIQVZFX0dUSzIpCisvKgorICogU2VlbXMgbGlrZSB0aGVyZSdzIGEgaG9sZSBpbiB0aGUgR1RLIFRvb2xiYXIgQVBJOiB0aGVyZSdzIG5vIHByb3Zpc2lvbiBmb3IKKyAqIHJlbW92aW5nIGFuIGl0ZW0gZnJvbSB0aGUgdG9vbGJhci4gIFRoZXJlZm9yZSBJIG5lZWQgdG8gcmVzb3J0IHRvIGdvaW5nCisgKiByZWFsbHkgZGVlcGx5IGludG8gdGhlIGludGVybmFsIHdpZGdldCBzdHJ1Y3R1cmVzLgorICoKKyAqIDxkYW5pZWxrPiBJJ20gbm90IHN1cmUgdGhlIHN0YXRlbWVudCBhYm92ZSBpcyB0cnVlIC0tIGF0IGxlYXN0IHdpdGgKKyAqIEdUSysgMiBvbmUgY2FuIGp1c3QgY2FsbCBndGtfd2lkZ2V0X2Rlc3Ryb3koKSBhbmQgYmUgZG9uZSB3aXRoIGl0LgorICogSXQgaXMgdHJ1ZSB0aG91Z2ggdGhhdCB5b3UgY291bGRuJ3QgcmVtb3ZlIHNwYWNlIGl0ZW1zIGJlZm9yZSBHVEsrIDIKKyAqICh3aXRob3V0IGRpZ2dpbmcgaW50byB0aGUgaW50ZXJuYWxzIHRoYXQgaXMpLiAgQnV0IHRoZSBjb2RlIGJlbG93CisgKiBkb2Vzbid0IHNlZW0gdG8gaGFuZGxlIHRob3NlIGVpdGhlci4gIFdlbGwsIGl0J3Mgb2Jzb2xldGUgYW55d2F5LgorICovCisgICAgc3RhdGljIHZvaWQKK3Rvb2xiYXJfcmVtb3ZlX2l0ZW1fYnlfdGV4dChHdGtUb29sYmFyICp0YiwgY29uc3QgY2hhciAqdGV4dCkKK3sKKyAgICBHdGtDb250YWluZXIgKmNvbnRhaW5lcjsKKyAgICBHTGlzdCAqY2hpbGRsOworICAgIEd0a1Rvb2xiYXJDaGlsZCAqZ3RiYzsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwodGIgIT0gTlVMTCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChHVEtfSVNfVE9PTEJBUih0YikpOworICAgIGNvbnRhaW5lciA9IEdUS19DT05UQUlORVIoJnRiLT5jb250YWluZXIpOworCisgICAgZm9yIChjaGlsZGwgPSB0Yi0+Y2hpbGRyZW47IGNoaWxkbDsgY2hpbGRsID0gY2hpbGRsLT5uZXh0KQorICAgIHsKKwlndGJjID0gKEd0a1Rvb2xiYXJDaGlsZCAqKWNoaWxkbC0+ZGF0YTsKKworCWlmIChndGJjLT50eXBlICE9IEdUS19UT09MQkFSX0NISUxEX1NQQUNFCisJCSYmIHN0cmNtcChHVEtfTEFCRUwoZ3RiYy0+bGFiZWwpLT5sYWJlbCwgdGV4dCkgPT0gMCkKKwl7CisJICAgIGdib29sZWFuIHdhc192aXNpYmxlOworCisJICAgIHdhc192aXNpYmxlID0gR1RLX1dJREdFVF9WSVNJQkxFKGd0YmMtPndpZGdldCk7CisJICAgIGd0a193aWRnZXRfdW5wYXJlbnQoZ3RiYy0+d2lkZ2V0KTsKKworCSAgICB0Yi0+Y2hpbGRyZW4gPSBnX2xpc3RfcmVtb3ZlX2xpbmsodGItPmNoaWxkcmVuLCBjaGlsZGwpOworCSAgICBnX2ZyZWUoZ3RiYyk7CisJICAgIGdfbGlzdF9mcmVlKGNoaWxkbCk7CisJICAgIHRiLT5udW1fY2hpbGRyZW4tLTsKKworCSAgICBpZiAod2FzX3Zpc2libGUgJiYgR1RLX1dJREdFVF9WSVNJQkxFKGNvbnRhaW5lcikpCisJCWd0a193aWRnZXRfcXVldWVfcmVzaXplKEdUS19XSURHRVQoY29udGFpbmVyKSk7CisKKwkgICAgYnJlYWs7CisJfQorICAgIH0KK30KKyNlbmRpZiAvKiBGRUFUX1RPT0xCQVIgJiYgIUhBVkVfR1RLMiAqLworCisKKyNpZiBkZWZpbmVkKEZFQVRfVE9PTEJBUikgJiYgZGVmaW5lZChIQVZFX0dUSzIpCisgICAgc3RhdGljIGludAorZ2V0X21lbnVfcG9zaXRpb24odmltbWVudV9UICptZW51KQoreworICAgIHZpbW1lbnVfVAkqbm9kZTsKKyAgICBpbnQJCWluZGV4ID0gMDsKKworICAgIGZvciAobm9kZSA9IG1lbnUtPnBhcmVudC0+Y2hpbGRyZW47IG5vZGUgIT0gbWVudTsgbm9kZSA9IG5vZGUtPm5leHQpCisgICAgeworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5vZGUgIT0gTlVMTCwgLTEpOworCSsraW5kZXg7CisgICAgfQorCisgICAgcmV0dXJuIGluZGV4OworfQorI2VuZGlmIC8qIEZFQVRfVE9PTEJBUiAmJiBIQVZFX0dUSzIgKi8KKworCisjaWYgZGVmaW5lZChGRUFUX1RPT0xCQVIpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorZ3VpX21jaF9tZW51X3NldF90aXAodmltbWVudV9UICptZW51KQoreworICAgIGlmIChtZW51LT5pZCAhPSBOVUxMICYmIG1lbnUtPnBhcmVudCAhPSBOVUxMCisJICAgICYmIGd1aS50b29sYmFyICE9IE5VTEwgJiYgbWVudV9pc190b29sYmFyKG1lbnUtPnBhcmVudC0+bmFtZSkpCisgICAgeworCWNoYXJfdSAqdG9vbHRpcDsKKworIyBpZmRlZiBIQVZFX0dUSzIKKwl0b29sdGlwID0gQ09OVkVSVF9UT19VVEY4KG1lbnUtPnN0cmluZ3NbTUVOVV9JTkRFWF9USVBdKTsKKyMgZWxzZQorCXRvb2x0aXAgPSBtZW51LT5zdHJpbmdzW01FTlVfSU5ERVhfVElQXTsKKyMgZW5kaWYKKwlndGtfdG9vbHRpcHNfc2V0X3RpcChHVEtfVE9PTEJBUihndWkudG9vbGJhciktPnRvb2x0aXBzLAorCQkJICAgICBtZW51LT5pZCwgKGNvbnN0IGNoYXIgKil0b29sdGlwLCBOVUxMKTsKKyMgaWZkZWYgSEFWRV9HVEsyCisJQ09OVkVSVF9UT19VVEY4X0ZSRUUodG9vbHRpcCk7CisjIGVuZGlmCisgICAgfQorfQorI2VuZGlmIC8qIEZFQVRfVE9PTEJBUiAqLworCisKKyNpZiBkZWZpbmVkKEZFQVRfTUVOVSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBEZXN0cm95IHRoZSBtYWNoaW5lIHNwZWNpZmljIG1lbnUgd2lkZ2V0LgorICovCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X21lbnUodmltbWVudV9UICptZW51KQoreworIyBpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICBpZiAobWVudS0+cGFyZW50ICE9IE5VTEwgJiYgbWVudV9pc190b29sYmFyKG1lbnUtPnBhcmVudC0+bmFtZSkpCisgICAgeworIyAgaWZkZWYgSEFWRV9HVEsyCisJaWYgKG1lbnVfaXNfc2VwYXJhdG9yKG1lbnUtPm5hbWUpKQorCSAgICBndGtfdG9vbGJhcl9yZW1vdmVfc3BhY2UoR1RLX1RPT0xCQVIoZ3VpLnRvb2xiYXIpLAorCQkJCSAgICAgZ2V0X21lbnVfcG9zaXRpb24obWVudSkpOworCWVsc2UgaWYgKG1lbnUtPmlkICE9IE5VTEwpCisJICAgIGd0a193aWRnZXRfZGVzdHJveShtZW51LT5pZCk7CisjICBlbHNlCisJdG9vbGJhcl9yZW1vdmVfaXRlbV9ieV90ZXh0KEdUS19UT09MQkFSKGd1aS50b29sYmFyKSwKKwkJCQkgICAgKGNvbnN0IGNoYXIgKiltZW51LT5kbmFtZSk7CisjICBlbmRpZgorICAgIH0KKyAgICBlbHNlCisjIGVuZGlmIC8qIEZFQVRfVE9PTEJBUiAqLworICAgIHsKKwlpZiAobWVudS0+c3VibWVudV9pZCAhPSBOVUxMKQorCSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobWVudS0+c3VibWVudV9pZCk7CisKKwlpZiAobWVudS0+aWQgIT0gTlVMTCkKKwkgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1lbnUtPmlkKTsKKyAgICB9CisKKyAgICBtZW51LT5zdWJtZW51X2lkID0gTlVMTDsKKyAgICBtZW51LT5pZCA9IE5VTEw7Cit9CisjZW5kaWYgLyogRkVBVF9NRU5VICovCisKKworLyoKKyAqIFNjcm9sbGJhciBzdHVmZi4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3Njcm9sbGJhcl90aHVtYihzY3JvbGxiYXJfVCAqc2IsIGxvbmcgdmFsLCBsb25nIHNpemUsIGxvbmcgbWF4KQoreworICAgIGlmIChzYi0+aWQgIT0gTlVMTCkKKyAgICB7CisJR3RrQWRqdXN0bWVudCAqYWRqdXN0bWVudDsKKworCWFkanVzdG1lbnQgPSBndGtfcmFuZ2VfZ2V0X2FkanVzdG1lbnQoR1RLX1JBTkdFKHNiLT5pZCkpOworCisJYWRqdXN0bWVudC0+bG93ZXIgPSAwLjA7CisJYWRqdXN0bWVudC0+dmFsdWUgPSB2YWw7CisJYWRqdXN0bWVudC0+dXBwZXIgPSBtYXggKyAxOworCWFkanVzdG1lbnQtPnBhZ2Vfc2l6ZSA9IHNpemU7CisJYWRqdXN0bWVudC0+cGFnZV9pbmNyZW1lbnQgPSBzaXplIDwgM0wgPyAxTCA6IHNpemUgLSAyTDsKKwlhZGp1c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IDEuMDsKKworI2lmZGVmIEhBVkVfR1RLMgorCWdfc2lnbmFsX2hhbmRsZXJfYmxvY2soR1RLX09CSkVDVChhZGp1c3RtZW50KSwKKwkJCQkJCSAgICAgIChndWxvbmcpc2ItPmhhbmRsZXJfaWQpOworI2Vsc2UKKwlndGtfc2lnbmFsX2hhbmRsZXJfYmxvY2soR1RLX09CSkVDVChhZGp1c3RtZW50KSwKKwkJCQkJCSAgICAgICAoZ3VpbnQpc2ItPmhhbmRsZXJfaWQpOworI2VuZGlmCisJZ3RrX2FkanVzdG1lbnRfY2hhbmdlZChhZGp1c3RtZW50KTsKKyNpZmRlZiBIQVZFX0dUSzIKKwlnX3NpZ25hbF9oYW5kbGVyX3VuYmxvY2soR1RLX09CSkVDVChhZGp1c3RtZW50KSwKKwkJCQkJCSAgICAgIChndWxvbmcpc2ItPmhhbmRsZXJfaWQpOworI2Vsc2UKKwlndGtfc2lnbmFsX2hhbmRsZXJfdW5ibG9jayhHVEtfT0JKRUNUKGFkanVzdG1lbnQpLAorCQkJCQkJICAgICAgIChndWludClzYi0+aGFuZGxlcl9pZCk7CisjZW5kaWYKKyAgICB9Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF9zY3JvbGxiYXJfcG9zKHNjcm9sbGJhcl9UICpzYiwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCit7CisgICAgaWYgKHNiLT5pZCAhPSBOVUxMKQorCWd0a19mb3JtX21vdmVfcmVzaXplKEdUS19GT1JNKGd1aS5mb3Jtd2luKSwgc2ItPmlkLCB4LCB5LCB3LCBoKTsKK30KKworLyoKKyAqIFRha2UgYWN0aW9uIHVwb24gc2Nyb2xsYmFyIGRyYWdnaW5nLgorICovCisgICAgc3RhdGljIHZvaWQKK2FkanVzdG1lbnRfdmFsdWVfY2hhbmdlZChHdGtBZGp1c3RtZW50ICphZGp1c3RtZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIHNjcm9sbGJhcl9UCSpzYjsKKyAgICBsb25nCXZhbHVlOworICAgIGludAkJZHJhZ2dpbmcgPSBGQUxTRTsKKworI2lmZGVmIEZFQVRfWElNCisgICAgLyogY2FuY2VsIGFueSBwcmVlZGl0aW5nICovCisgICAgaWYgKGltX2lzX3ByZWVkaXRpbmcoKSkKKwl4aW1fcmVzZXQoKTsKKyNlbmRpZgorCisgICAgc2IgPSBndWlfZmluZF9zY3JvbGxiYXIoKGxvbmcpZGF0YSk7CisgICAgdmFsdWUgPSAobG9uZylhZGp1c3RtZW50LT52YWx1ZTsKKyAgICAvKgorICAgICAqIFRoZSBkcmFnZ2luZyBhcmd1bWVudCBtdXN0IGJlIHJpZ2h0IGZvciB0aGUgc2Nyb2xsYmFyIHRvIHdvcmsgd2l0aAorICAgICAqIGNsb3NlZCBmb2xkcy4gIFRoaXMgaXNuJ3QgZG9jdW1lbnRlZCwgaG9wZWZ1bGx5IHRoaXMgd2lsbCBrZWVwIG9uCisgICAgICogd29ya2luZyBpbiBsYXRlciBHVEsgdmVyc2lvbnMuCisgICAgICoKKyAgICAgKiBGSVhNRTogV2VsbCwgaXQgZG9lc24ndCB3b3JrIGluIEdUSzIuIDopCisgICAgICogSEFDSzogR2V0IHRoZSBtb3VzZSBwb2ludGVyIHBvc2l0aW9uLCBpZiBpdCBhcHBlYXJzIHRvIGJlIG9uIGFuIGFycm93CisgICAgICogYnV0dG9uIHNldCAiZHJhZ2dpbmciIHRvIEZBTFNFLiAgVGhpcyBhc3N1bWVzIHNxdWFyZSBidXR0b25zIQorICAgICAqLworICAgIGlmIChzYiAhPSBOVUxMKQorICAgIHsKKyNpZmRlZiBIQVZFX0dUSzIKKwlkcmFnZ2luZyA9IFRSVUU7CisKKwlpZiAoc2ItPndwICE9IE5VTEwpCisJeworCSAgICBpbnQJCQl4OworCSAgICBpbnQJCQl5OworCSAgICBHZGtNb2RpZmllclR5cGUJc3RhdGU7CisJICAgIGludAkJCXdpZHRoOworCSAgICBpbnQJCQloZWlnaHQ7CisKKwkgICAgLyogdmVydGljYWwgc2Nyb2xsYmFyOiBuZWVkIHRvIHNldCAiZHJhZ2dpbmciIHByb3Blcmx5IGluIGNhc2UKKwkgICAgICogdGhlcmUgYXJlIGNsb3NlZCBmb2xkcy4gKi8KKwkgICAgZ2RrX3dpbmRvd19nZXRfcG9pbnRlcihzYi0+aWQtPndpbmRvdywgJngsICZ5LCAmc3RhdGUpOworCSAgICBnZGtfd2luZG93X2dldF9zaXplKHNiLT5pZC0+d2luZG93LCAmd2lkdGgsICZoZWlnaHQpOworCSAgICBpZiAoeCA+PSAwICYmIHggPCB3aWR0aCAmJiB5ID49IDAgJiYgeSA8IGhlaWdodCkKKwkgICAgeworCQlpZiAoeSA8IHdpZHRoKQorCQl7CisJCSAgICAvKiB1cCBhcnJvdzogbW92ZSBvbmUgKGNsb3NlZCBmb2xkKSBsaW5lIHVwICovCisJCSAgICBkcmFnZ2luZyA9IEZBTFNFOworCQkgICAgdmFsdWUgPSBzYi0+d3AtPndfdG9wbGluZSAtIDI7CisJCX0KKwkJZWxzZSBpZiAoeSA+IGhlaWdodCAtIHdpZHRoKQorCQl7CisJCSAgICAvKiBkb3duIGFycm93OiBtb3ZlIG9uZSAoY2xvc2VkIGZvbGQpIGxpbmUgZG93biAqLworCQkgICAgZHJhZ2dpbmcgPSBGQUxTRTsKKwkJICAgIHZhbHVlID0gc2ItPndwLT53X3RvcGxpbmU7CisJCX0KKwkgICAgfQorCX0KKyNlbHNlCisJZHJhZ2dpbmcgPSAoR1RLX1JBTkdFKHNiLT5pZCktPnNjcm9sbF90eXBlID09IEdUS19TQ1JPTExfTk9ORSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBndWlfZHJhZ19zY3JvbGxiYXIoc2IsIHZhbHVlLCBkcmFnZ2luZyk7CisKKyAgICBpZiAoZ3RrX21haW5fbGV2ZWwoKSA+IDApCisJZ3RrX21haW5fcXVpdCgpOworfQorCisvKiBTQkFSX1ZFUlQgb3IgU0JBUl9IT1JJWiAqLworICAgIHZvaWQKK2d1aV9tY2hfY3JlYXRlX3Njcm9sbGJhcihzY3JvbGxiYXJfVCAqc2IsIGludCBvcmllbnQpCit7CisgICAgaWYgKG9yaWVudCA9PSBTQkFSX0hPUklaKQorCXNiLT5pZCA9IGd0a19oc2Nyb2xsYmFyX25ldyhOVUxMKTsKKyAgICBlbHNlIGlmIChvcmllbnQgPT0gU0JBUl9WRVJUKQorCXNiLT5pZCA9IGd0a192c2Nyb2xsYmFyX25ldyhOVUxMKTsKKworICAgIGlmIChzYi0+aWQgIT0gTlVMTCkKKyAgICB7CisJR3RrQWRqdXN0bWVudCAqYWRqdXN0bWVudDsKKworCUdUS19XSURHRVRfVU5TRVRfRkxBR1Moc2ItPmlkLCBHVEtfQ0FOX0ZPQ1VTKTsKKwlndGtfZm9ybV9wdXQoR1RLX0ZPUk0oZ3VpLmZvcm13aW4pLCBzYi0+aWQsIDAsIDApOworCisJYWRqdXN0bWVudCA9IGd0a19yYW5nZV9nZXRfYWRqdXN0bWVudChHVEtfUkFOR0Uoc2ItPmlkKSk7CisKKwlzYi0+aGFuZGxlcl9pZCA9IGd0a19zaWduYWxfY29ubmVjdCgKKwkJCSAgICAgR1RLX09CSkVDVChhZGp1c3RtZW50KSwgInZhbHVlX2NoYW5nZWQiLAorCQkJICAgICBHVEtfU0lHTkFMX0ZVTkMoYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKSwKKwkJCSAgICAgR0lOVF9UT19QT0lOVEVSKHNiLT5pZGVudCkpOworCWd1aV9tY2hfdXBkYXRlKCk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X3Njcm9sbGJhcihzY3JvbGxiYXJfVCAqc2IpCit7CisgICAgaWYgKHNiLT5pZCAhPSBOVUxMKQorICAgIHsKKwlndGtfd2lkZ2V0X2Rlc3Ryb3koc2ItPmlkKTsKKwlzYi0+aWQgPSBOVUxMOworICAgIH0KKyAgICBndWlfbWNoX3VwZGF0ZSgpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfQlJPV1NFKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBmaWxlIHNlbGVjdG9yIHJlbGF0ZWQgc3R1ZmYKKyAqLworCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorYnJvd3NlX29rX2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBncG9pbnRlciBjYmRhdGEpCit7CisgICAgZ3VpX1QgKnZ3ID0gKGd1aV9UICopY2JkYXRhOworCisgICAgaWYgKHZ3LT5icm93c2VfZm5hbWUgIT0gTlVMTCkKKwlnX2ZyZWUodnctPmJyb3dzZV9mbmFtZSk7CisKKyAgICB2dy0+YnJvd3NlX2ZuYW1lID0gKGNoYXJfdSAqKWdfc3RyZHVwKGd0a19maWxlX3NlbGVjdGlvbl9nZXRfZmlsZW5hbWUoCisJCQkJCUdUS19GSUxFX1NFTEVDVElPTih2dy0+ZmlsZWRsZykpKTsKKyAgICBndGtfd2lkZ2V0X2hpZGUodnctPmZpbGVkbGcpOworICAgIGlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwlndGtfbWFpbl9xdWl0KCk7Cit9CisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCiticm93c2VfY2FuY2VsX2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBncG9pbnRlciBjYmRhdGEpCit7CisgICAgZ3VpX1QgKnZ3ID0gKGd1aV9UICopY2JkYXRhOworCisgICAgaWYgKHZ3LT5icm93c2VfZm5hbWUgIT0gTlVMTCkKKyAgICB7CisJZ19mcmVlKHZ3LT5icm93c2VfZm5hbWUpOworCXZ3LT5icm93c2VfZm5hbWUgPSBOVUxMOworICAgIH0KKyAgICBndGtfd2lkZ2V0X2hpZGUodnctPmZpbGVkbGcpOworICAgIGlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwlndGtfbWFpbl9xdWl0KCk7Cit9CisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyBnYm9vbGVhbgorYnJvd3NlX2Rlc3Ryb3lfY2IoR3RrV2lkZ2V0ICogd2lkZ2V0KQoreworICAgIGlmIChndWkuYnJvd3NlX2ZuYW1lICE9IE5VTEwpCisgICAgeworCWdfZnJlZShndWkuYnJvd3NlX2ZuYW1lKTsKKwlndWkuYnJvd3NlX2ZuYW1lID0gTlVMTDsKKyAgICB9CisgICAgZ3VpLmZpbGVkbGcgPSBOVUxMOworCisgICAgaWYgKGd0a19tYWluX2xldmVsKCkgPiAwKQorCWd0a19tYWluX3F1aXQoKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFB1dCB1cCBhIGZpbGUgcmVxdWVzdGVyLgorICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgbmFtZSBpbiBhbGxvY2F0ZWQgbWVtb3J5LCBvciBOVUxMIGZvciBDYW5jZWwuCisgKiBzYXZpbmcsCQkJc2VsZWN0IGZpbGUgdG8gd3JpdGUKKyAqIHRpdGxlCQkJdGl0bGUgZm9yIHRoZSB3aW5kb3cKKyAqIGRmbHQJCQkJZGVmYXVsdCBuYW1lCisgKiBleHQJCQkJbm90IHVzZWQgKGV4dGVuc2lvbiBhZGRlZCkKKyAqIGluaXRkaXIJCQlpbml0aWFsIGRpcmVjdG9yeSwgTlVMTCBmb3IgY3VycmVudCBkaXIKKyAqIGZpbHRlcgkJCW5vdCB1c2VkIChmaWxlIG5hbWUgZmlsdGVyKQorICovCisvKkFSR1NVU0VEKi8KKyAgICBjaGFyX3UgKgorZ3VpX21jaF9icm93c2UoaW50IHNhdmluZywKKwkgICAgICAgY2hhcl91ICp0aXRsZSwKKwkgICAgICAgY2hhcl91ICpkZmx0LAorCSAgICAgICBjaGFyX3UgKmV4dCwKKwkgICAgICAgY2hhcl91ICppbml0ZGlyLAorCSAgICAgICBjaGFyX3UgKmZpbHRlcikKK3sKKyAgICBHdGtGaWxlU2VsZWN0aW9uICpmczsJLyogc2hvcnRjdXQgKi8KKyAgICBjaGFyX3UgZGlyYnVmW01BWFBBVEhMXTsKKyAgICBjaGFyX3UgKnA7CisKKyMgaWZkZWYgSEFWRV9HVEsyCisgICAgdGl0bGUgPSBDT05WRVJUX1RPX1VURjgodGl0bGUpOworIyBlbmRpZgorCisgICAgaWYgKCFndWkuZmlsZWRsZykKKyAgICB7CisJZ3VpLmZpbGVkbGcgPSBndGtfZmlsZV9zZWxlY3Rpb25fbmV3KChjb25zdCBnY2hhciAqKXRpdGxlKTsKKwlndGtfd2luZG93X3NldF9tb2RhbChHVEtfV0lORE9XKGd1aS5maWxlZGxnKSwgVFJVRSk7CisJZ3RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2ZvcihHVEtfV0lORE9XKGd1aS5maWxlZGxnKSwKKwkJR1RLX1dJTkRPVyhndWkubWFpbndpbikpOworCWZzID0gR1RLX0ZJTEVfU0VMRUNUSU9OKGd1aS5maWxlZGxnKTsKKworCWd0a19jb250YWluZXJfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoZnMpLCA0KTsKKworCWd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGZzLT5va19idXR0b24pLAorCQkiY2xpY2tlZCIsIEdUS19TSUdOQUxfRlVOQyhicm93c2Vfb2tfY2IpLCAmZ3VpKTsKKwlndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChmcy0+Y2FuY2VsX2J1dHRvbiksCisJCSJjbGlja2VkIiwgR1RLX1NJR05BTF9GVU5DKGJyb3dzZV9jYW5jZWxfY2IpLCAmZ3VpKTsKKwkvKiBndGtfc2lnbmFsX2Nvbm5lY3QoKSBkb2Vzbid0IHdvcmsgZm9yIGRlc3Ryb3ksIGl0IGNhdXNlcyBhIGhhbmcgKi8KKwlndGtfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KEdUS19PQkpFQ1QoZ3VpLmZpbGVkbGcpLAorCQkiZGVzdHJveSIsIEdUS19TSUdOQUxfRlVOQyhicm93c2VfZGVzdHJveV9jYiksCisJCUdUS19PQkpFQ1QoZ3VpLmZpbGVkbGcpKTsKKyAgICB9CisgICAgZWxzZQorCWd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZ3VpLmZpbGVkbGcpLCAoY29uc3QgZ2NoYXIgKil0aXRsZSk7CisKKyMgaWZkZWYgSEFWRV9HVEsyCisgICAgQ09OVkVSVF9UT19VVEY4X0ZSRUUodGl0bGUpOworIyBlbmRpZgorCisgICAgLyogaWYgb3VyIHBvaW50ZXIgaXMgY3VycmVudGx5IGhpZGRlbiwgdGhlbiB3ZSBzaG91bGQgc2hvdyBpdC4gKi8KKyAgICBndWlfbWNoX21vdXNlaGlkZShGQUxTRSk7CisKKyAgICAvKiBDb25jYXRlbmF0ZSAiaW5pdGRpciIgYW5kICJkZmx0Ii4gKi8KKyAgICBpZiAoaW5pdGRpciA9PSBOVUxMIHx8ICppbml0ZGlyID09IE5VTCkKKwltY2hfZGlybmFtZShkaXJidWYsIE1BWFBBVEhMKTsKKyAgICBlbHNlIGlmIChTVFJMRU4oaW5pdGRpcikgKyAyIDwgTUFYUEFUSEwpCisJU1RSQ1BZKGRpcmJ1ZiwgaW5pdGRpcik7CisgICAgZWxzZQorCWRpcmJ1ZlswXSA9IE5VTDsKKyAgICAvKiBBbHdheXMgbmVlZCBhIHRyYWlsaW5nIHNsYXNoIGZvciBhIGRpcmVjdG9yeS4gKi8KKyAgICBhZGRfcGF0aHNlcChkaXJidWYpOworICAgIGlmIChkZmx0ICE9IE5VTEwgJiYgKmRmbHQgIT0gTlVMCisJCQkgICAgICAmJiBTVFJMRU4oZGlyYnVmKSArIDIgKyBTVFJMRU4oZGZsdCkgPCBNQVhQQVRITCkKKwlTVFJDQVQoZGlyYnVmLCBkZmx0KTsKKworICAgIGd0a19maWxlX3NlbGVjdGlvbl9zZXRfZmlsZW5hbWUoR1RLX0ZJTEVfU0VMRUNUSU9OKGd1aS5maWxlZGxnKSwKKwkJCQkJCSAgICAgIChjb25zdCBnY2hhciAqKWRpcmJ1Zik7CisjIGlmbmRlZiBIQVZFX0dUSzIKKyAgICBndWlfZ3RrX3Bvc2l0aW9uX2luX3BhcmVudChHVEtfV0lER0VUKGd1aS5tYWlud2luKSwKKwkJCQkgICAgICAgR1RLX1dJREdFVChndWkuZmlsZWRsZyksIFZXX1BPU19NT1VTRSk7CisjIGVuZGlmCisKKyAgICBndGtfd2lkZ2V0X3Nob3coZ3VpLmZpbGVkbGcpOworICAgIHdoaWxlIChndWkuZmlsZWRsZyAmJiBHVEtfV0lER0VUX0RSQVdBQkxFKGd1aS5maWxlZGxnKSkKKwlndGtfbWFpbl9pdGVyYXRpb25fZG8oVFJVRSk7CisKKyAgICBpZiAoZ3VpLmJyb3dzZV9mbmFtZSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgLyogc2hvcnRlbiB0aGUgZmlsZSBuYW1lIGlmIHBvc3NpYmxlICovCisgICAgbWNoX2Rpcm5hbWUoZGlyYnVmLCBNQVhQQVRITCk7CisgICAgcCA9IHNob3J0ZW5fZm5hbWUoZ3VpLmJyb3dzZV9mbmFtZSwgZGlyYnVmKTsKKyAgICBpZiAocCA9PSBOVUxMKQorCXAgPSBndWkuYnJvd3NlX2ZuYW1lOworICAgIHJldHVybiB2aW1fc3Ryc2F2ZShwKTsKK30KKworI2VuZGlmCS8qIEZFQVRfQlJPV1NFICovCisKKyNpZiAoZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpICYmICFkZWZpbmVkKEhBVkVfR1RLMikpIHx8IGRlZmluZWQoUFJPVE8pCisKK3N0YXRpYyBjaGFyX3UgKmRpYWxvZ190ZXh0ZmllbGQgPSBOVUxMOworc3RhdGljIEd0a1dpZGdldCAqZGlhbG9nX3RleHRlbnRyeTsKKworICAgIHN0YXRpYyB2b2lkCitkbGdfZGVzdHJveShHdGtXaWRnZXQgKmRsZykKK3sKKyAgICBpZiAoZGlhbG9nX3RleHRmaWVsZCAhPSBOVUxMKQorICAgIHsKKwljb25zdCBjaGFyICp0ZXh0OworCisJdGV4dCA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9nX3RleHRlbnRyeSkpOworCVNUUk5DUFkoZGlhbG9nX3RleHRmaWVsZCwgdGV4dCwgSU9TSVpFKTsKKwlkaWFsb2dfdGV4dGZpZWxkW0lPU0laRSAtIDFdID0gTlVMOworICAgIH0KKworICAgIC8qIERlc3Ryb3kgdGhlIGRpYWxvZywgd2lsbCBicmVhayB0aGUgd2FpdGluZyBsb29wLiAqLworICAgIGd0a193aWRnZXRfZGVzdHJveShkbGcpOworfQorCisjIGlmZGVmIEZFQVRfR1VJX0dOT01FCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyBpbnQKK2d1aV9nbm9tZV9kaWFsb2coIGludAl0eXBlLAorCQljaGFyX3UJKnRpdGxlLAorCQljaGFyX3UJKm1lc3NhZ2UsCisJCWNoYXJfdQkqYnV0dG9ucywKKwkJaW50CWRmbHRidXR0b24sCisJCWNoYXJfdQkqdGV4dGZpZWxkKQoreworICAgIEd0a1dpZGdldAkqZGxnOworICAgIGNoYXIJKmdkdHlwZTsKKyAgICBjaGFyX3UJKmJ1dHRvbnNfY29weSwgKnAsICpuZXh0OworICAgIGNoYXIJKipidXR0b25zX2xpc3Q7CisgICAgaW50CQlidXRjb3VudCwgY3VyOworCisgICAgLyogbWFrZSBhIGNvcHksIHNvIHRoYXQgd2UgY2FuIGluc2VydCBOVUxzICovCisgICAgaWYgKChidXR0b25zX2NvcHkgPSB2aW1fc3Ryc2F2ZShidXR0b25zKSkgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisKKyAgICAvKiBkZXRlcm1pbmUgZXhhY3QgbnVtYmVyIG9mIGJ1dHRvbnMgYW5kIGFsbG9jYXRlIGFycmF5IHRvIGhvbGQgdGhlbSAqLworICAgIGZvciAoYnV0Y291bnQgPSAwLCBwID0gYnV0dG9uczsgKnA7IHArKykKKyAgICB7CisJaWYgKCpwID09ICdcbicpCisJICAgIGJ1dGNvdW50Kys7CisgICAgfQorICAgIGJ1dGNvdW50Kys7CisgICAgYnV0dG9uc19saXN0ID0gZ19uZXcwKGNoYXIgKiwgYnV0Y291bnQgKyAxKTsKKworICAgIC8qIEFkZCBwaXhtYXAgKi8KKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgIGNhc2UgVklNX0VSUk9SOgorCWdkdHlwZSA9IEdOT01FX01FU1NBR0VfQk9YX0VSUk9SOworCWJyZWFrOworICAgIGNhc2UgVklNX1dBUk5JTkc6CisJZ2R0eXBlID0gR05PTUVfTUVTU0FHRV9CT1hfV0FSTklORzsKKwlicmVhazsKKyAgICBjYXNlIFZJTV9JTkZPOgorCWdkdHlwZSA9IEdOT01FX01FU1NBR0VfQk9YX0lORk87CisJYnJlYWs7CisgICAgY2FzZSBWSU1fUVVFU1RJT046CisJZ2R0eXBlID0gR05PTUVfTUVTU0FHRV9CT1hfUVVFU1RJT047CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlnZHR5cGUgPSBHTk9NRV9NRVNTQUdFX0JPWF9HRU5FUklDOworICAgIH07CisKKyAgICBwID0gYnV0dG9uc19jb3B5OworICAgIGZvciAoY3VyID0gMDsgY3VyIDwgYnV0Y291bnQ7ICsrY3VyKQorICAgIHsKKwlmb3IgKG5leHQgPSBwOyAqbmV4dDsgKytuZXh0KQorCXsKKwkgICAgaWYgKCpuZXh0ID09IERMR19IT1RLRVlfQ0hBUikKKwkJbWNoX21lbW1vdmUobmV4dCwgbmV4dCArIDEsIFNUUkxFTihuZXh0KSk7CisJICAgIGlmICgqbmV4dCA9PSBETEdfQlVUVE9OX1NFUCkKKwkgICAgeworCQkqbmV4dCsrID0gTlVMOworCQlicmVhazsKKwkgICAgfQorCX0KKworCS8qIHRoaXMgc2hvdWxkIHByb2JhYmx5IGdvIGludG8gYSB0YWJsZSwgYnV0IG9oIHdlbGwgKi8KKwlpZiAoZ19zdHJjYXNlY21wKChjaGFyICopcCwgIk9rIikgPT0gMCkKKwkgICAgYnV0dG9uc19saXN0W2N1cl0gPSBnX3N0cmR1cChHTk9NRV9TVE9DS19CVVRUT05fT0spOworCWVsc2UgaWYgKGdfc3RyY2FzZWNtcCgoY2hhciAqKXAsICJDYW5jZWwiKSA9PSAwKQorCSAgICBidXR0b25zX2xpc3RbY3VyXSA9IGdfc3RyZHVwKEdOT01FX1NUT0NLX0JVVFRPTl9DQU5DRUwpOworCWVsc2UgaWYgKGdfc3RyY2FzZWNtcCgoY2hhciAqKXAsICJZZXMiKSA9PSAwKQorCSAgICBidXR0b25zX2xpc3RbY3VyXSA9IGdfc3RyZHVwKEdOT01FX1NUT0NLX0JVVFRPTl9ZRVMpOworCWVsc2UgaWYgKGdfc3RyY2FzZWNtcCgoY2hhciAqKXAsICJObyIpID09IDApCisJICAgIGJ1dHRvbnNfbGlzdFtjdXJdID0gZ19zdHJkdXAoR05PTUVfU1RPQ0tfQlVUVE9OX05PKTsKKwllbHNlIGlmIChnX3N0cmNhc2VjbXAoKGNoYXIgKilwLCAiQ2xvc2UiKSA9PSAwKQorCSAgICBidXR0b25zX2xpc3RbY3VyXSA9IGdfc3RyZHVwKEdOT01FX1NUT0NLX0JVVFRPTl9DTE9TRSk7CisJZWxzZSBpZiAoZ19zdHJjYXNlY21wKChjaGFyICopcCwgIkhlbHAiKSA9PSAwKQorCSAgICBidXR0b25zX2xpc3RbY3VyXSA9IGdfc3RyZHVwKEdOT01FX1NUT0NLX0JVVFRPTl9IRUxQKTsKKwllbHNlIGlmIChnX3N0cmNhc2VjbXAoKGNoYXIgKilwLCAiQXBwbHkiKSA9PSAwKQorCSAgICBidXR0b25zX2xpc3RbY3VyXSA9IGdfc3RyZHVwKEdOT01FX1NUT0NLX0JVVFRPTl9BUFBMWSk7CisjaWYgMAorCS8qCisJICogdGhlc2UgYXJlbid0IHJlYWxseSB1c2VkIHRoYXQgb2Z0ZW4gYW55d2F5LCBidXQgYXJlIGxpc3RlZCBoZXJlIGFzCisJICogcGxhY2Vob2xkZXJzIGluIGNhc2Ugd2UgbmVlZCB0aGVtLgorCSAqLworCWVsc2UgaWYgKGdfc3RyY2FzZWNtcCgoY2hhciAqKXAsICJOZXh0IikgPT0gMCkKKwkgICAgYnV0dG9uc19saXN0W2N1cl0gPSBnX3N0cmR1cChHTk9NRV9TVE9DS19CVVRUT05fTkVYVCk7CisJZWxzZSBpZiAoZ19zdHJjYXNlY21wKChjaGFyICopcCwgIlByZXYiKSA9PSAwKQorCSAgICBidXR0b25zX2xpc3RbY3VyXSA9IGdfc3RyZHVwKEdOT01FX1NUT0NLX0JVVFRPTl9QUkVWKTsKKwllbHNlIGlmIChnX3N0cmNhc2VjbXAoKGNoYXIgKilwLCAiVXAiKSA9PSAwKQorCSAgICBidXR0b25zX2xpc3RbY3VyXSA9IGdfc3RyZHVwKEdOT01FX1NUT0NLX0JVVFRPTl9VUCk7CisJZWxzZSBpZiAoZ19zdHJjYXNlY21wKChjaGFyICopcCwgIkRvd24iKSA9PSAwKQorCSAgICBidXR0b25zX2xpc3RbY3VyXSA9IGdfc3RyZHVwKEdOT01FX1NUT0NLX0JVVFRPTl9ET1dOKTsKKwllbHNlIGlmIChnX3N0cmNhc2VjbXAoKGNoYXIgKilwLCAiRm9udCIpID09IDApCisJICAgIGJ1dHRvbnNfbGlzdFtjdXJdID0gZ19zdHJkdXAoR05PTUVfU1RPQ0tfQlVUVE9OX0ZPTlQpOworI2VuZGlmCisJZWxzZQorCSAgICBidXR0b25zX2xpc3RbY3VyXSA9IGdfc3RyZHVwKChjaGFyICopcCk7CisKKwlpZiAoKm5leHQgPT0gTlVMKQorCSAgICBicmVhazsKKworCXAgPSBuZXh0OworICAgIH0KKyAgICB2aW1fZnJlZShidXR0b25zX2NvcHkpOworCisgICAgZGxnID0gZ25vbWVfbWVzc2FnZV9ib3hfbmV3digoY29uc3QgY2hhciAqKW1lc3NhZ2UsCisJCQkJIChjb25zdCBjaGFyICopZ2R0eXBlLAorCQkJCSAoY29uc3QgY2hhciAqKilidXR0b25zX2xpc3QpOworICAgIGZvciAoY3VyID0gMDsgY3VyIDwgYnV0Y291bnQ7ICsrY3VyKQorCWdfZnJlZShidXR0b25zX2xpc3RbY3VyXSk7CisgICAgZ19mcmVlKGJ1dHRvbnNfbGlzdCk7CisKKyAgICBkaWFsb2dfdGV4dGZpZWxkID0gdGV4dGZpZWxkOworICAgIGlmICh0ZXh0ZmllbGQgIT0gTlVMTCkKKyAgICB7CisJLyogQWRkIHRleHQgZW50cnkgZmllbGQgKi8KKwlkaWFsb2dfdGV4dGVudHJ5ID0gZ3RrX2VudHJ5X25ldygpOworCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKEdOT01FX0RJQUxPRyhkbGcpLT52Ym94KSwgZGlhbG9nX3RleHRlbnRyeSwKKwkJCSAgIFRSVUUsIFRSVUUsIDApOworCWd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9nX3RleHRlbnRyeSksCisJCQkgICAoY29uc3QgZ2NoYXIgKil0ZXh0ZmllbGQpOworCWd0a19lbnRyeV9zZWxlY3RfcmVnaW9uKEdUS19FTlRSWShkaWFsb2dfdGV4dGVudHJ5KSwgMCwKKwkJCQlTVFJMRU4odGV4dGZpZWxkKSk7CisJZ3RrX2VudHJ5X3NldF9tYXhfbGVuZ3RoKEdUS19FTlRSWShkaWFsb2dfdGV4dGVudHJ5KSwgSU9TSVpFIC0gMSk7CisJZ3RrX2VudHJ5X3NldF9wb3NpdGlvbihHVEtfRU5UUlkoZGlhbG9nX3RleHRlbnRyeSksIFNUUkxFTih0ZXh0ZmllbGQpKTsKKwlndGtfd2lkZ2V0X3Nob3coZGlhbG9nX3RleHRlbnRyeSk7CisJZ3RrX3dpbmRvd19zZXRfZm9jdXMoR1RLX1dJTkRPVyhkbGcpLCBkaWFsb2dfdGV4dGVudHJ5KTsKKyAgICB9CisKKyAgICBndGtfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KEdUS19PQkpFQ1QoZGxnKSwgImRlc3Ryb3kiLAorCQkJICAgICAgR1RLX1NJR05BTF9GVU5DKGRsZ19kZXN0cm95KSwgR1RLX09CSkVDVChkbGcpKTsKKyAgICBnbm9tZV9kaWFsb2dfc2V0X2RlZmF1bHQoR05PTUVfRElBTE9HKGRsZyksIGRmbHRidXR0b24gKyAxKTsKKyAgICBndWlfZ3RrX3Bvc2l0aW9uX2luX3BhcmVudChHVEtfV0lER0VUKGd1aS5tYWlud2luKSwKKwkJCSAgICAgICBHVEtfV0lER0VUKGRsZyksIFZXX1BPU19NT1VTRSk7CisKKyAgICByZXR1cm4gKDEgKyBnbm9tZV9kaWFsb2dfcnVuX2FuZF9jbG9zZShHTk9NRV9ESUFMT0coZGxnKSkpOworfQorCisjIGVuZGlmIC8qIEZFQVRfR1VJX0dOT01FICovCisKK3R5cGVkZWYgc3RydWN0IF9CdXR0b25EYXRhCit7CisgICAgaW50CQkqc3RhdHVzOworICAgIGludAkJaW5kZXg7CisgICAgR3RrV2lkZ2V0CSpkaWFsb2c7Cit9IEJ1dHRvbkRhdGE7CisKK3R5cGVkZWYgc3RydWN0IF9DYW5jZWxEYXRhCit7CisgICAgaW50CQkqc3RhdHVzOworICAgIGludAkJaWdub3JlX2VudGVyOworICAgIEd0a1dpZGdldAkqZGlhbG9nOworfSBDYW5jZWxEYXRhOworCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitkbGdfYnV0dG9uX2NsaWNrZWQoR3RrV2lkZ2V0ICogd2lkZ2V0LCBCdXR0b25EYXRhICpkYXRhKQoreworICAgICooZGF0YS0+c3RhdHVzKSA9IGRhdGEtPmluZGV4ICsgMTsKKyAgICBkbGdfZGVzdHJveShkYXRhLT5kaWFsb2cpOworfQorCisvKgorICogVGhpcyBtYWtlcyB0aGUgRXNjYXBlIGtleSBlcXVpdmFsZW50IHRvIHRoZSBjYW5jZWwgYnV0dG9uLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgaW50CitkbGdfa2V5X3ByZXNzX2V2ZW50KEd0a1dpZGdldCAqIHdpZGdldCwgR2RrRXZlbnRLZXkgKiBldmVudCwgQ2FuY2VsRGF0YSAqZGF0YSkKK3sKKyAgICAvKiBJZ25vcmUgaGl0dGluZyBFbnRlciB3aGVuIHRoZXJlIGlzIG5vIGRlZmF1bHQgYnV0dG9uLiAqLworICAgIGlmIChkYXRhLT5pZ25vcmVfZW50ZXIgJiYgZXZlbnQtPmtleXZhbCA9PSBHREtfUmV0dXJuKQorCXJldHVybiBUUlVFOworCisgICAgaWYgKGV2ZW50LT5rZXl2YWwgIT0gR0RLX0VzY2FwZSAmJiBldmVudC0+a2V5dmFsICE9IEdES19SZXR1cm4pCisJcmV0dXJuIEZBTFNFOworCisgICAgLyogVGhlIHJlc3VsdCB2YWx1ZSBvZiAwIGZyb20gYSBkaWFsb2cgaXMgc2lnbmFsaW5nIGNhbmNlbGF0aW9uLgorICAgICAqIDEgbWVhbnMgT0suICovCisgICAgKihkYXRhLT5zdGF0dXMpID0gKGV2ZW50LT5rZXl2YWwgPT0gR0RLX1JldHVybik7CisgICAgZGxnX2Rlc3Ryb3koZGF0YS0+ZGlhbG9nKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdoZW4gdGhlIGRpYWxvZyB3YXMgZGVzdHJveWVkIGJ5IGEgd2luZG93IG1hbmFnZXIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZGxnX2Rlc3Ryb3lfY2IoaW50ICpwKQoreworICAgICpwID0gVFJVRTsJCS8qIHNldCBkaWFsb2dfZGVzdHJveWVkIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCAqLworICAgIGlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwlndGtfbWFpbl9xdWl0KCk7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgaW50CitndWlfbWNoX2RpYWxvZygJaW50CXR5cGUsCQkvKiB0eXBlIG9mIGRpYWxvZyAqLworCQljaGFyX3UJKnRpdGxlLAkJLyogdGl0bGUgb2YgZGlhbG9nICovCisJCWNoYXJfdQkqbWVzc2FnZSwJLyogbWVzc2FnZSB0ZXh0ICovCisJCWNoYXJfdQkqYnV0dG9ucywJLyogbmFtZXMgb2YgYnV0dG9ucyAqLworCQlpbnQJZGVmX2J1dCwJLyogZGVmYXVsdCBidXR0b24gKi8KKwkJY2hhcl91CSp0ZXh0ZmllbGQpCS8qIHRleHQgZm9yIHRleHRmaWVsZCBvciBOVUxMICovCit7CisgICAgY2hhcl91CSpuYW1lczsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpOworICAgIGludAkJYnV0Y291bnQ7CisgICAgaW50CQlkaWFsb2dfc3RhdHVzID0gLTE7CisgICAgaW50CQlkaWFsb2dfZGVzdHJveWVkID0gRkFMU0U7CisgICAgaW50CQl2ZXJ0aWNhbDsKKworICAgIEd0a1dpZGdldAkJKmRpYWxvZzsKKyAgICBHdGtXaWRnZXQJCSpmcmFtZTsKKyAgICBHdGtXaWRnZXQJCSp2Ym94OworICAgIEd0a1dpZGdldAkJKnRhYmxlOworICAgIEd0a1dpZGdldAkJKmRpYWxvZ21lc3NhZ2U7CisgICAgR3RrV2lkZ2V0CQkqYWN0aW9uX2FyZWE7CisgICAgR3RrV2lkZ2V0CQkqc3ViX2FyZWE7CisgICAgR3RrV2lkZ2V0CQkqc2VwYXJhdG9yOworICAgIEd0a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwOworICAgIEd0a1dpZGdldAkJKnBpeG1hcDsKKyAgICBHZGtQaXhtYXAJCSppY29uID0gTlVMTDsKKyAgICBHZGtCaXRtYXAJCSptYXNrID0gTlVMTDsKKyAgICBjaGFyCQkqKmljb25fZGF0YSA9IE5VTEw7CisKKyAgICBHdGtXaWRnZXQJCSoqYnV0dG9uOworICAgIEJ1dHRvbkRhdGEJCSpkYXRhOworICAgIENhbmNlbERhdGEJCWNhbmNlbF9kYXRhOworCisgICAgLyogaWYgb3VyIHBvaW50ZXIgaXMgY3VycmVudGx5IGhpZGRlbiwgdGhlbiB3ZSBzaG91bGQgc2hvdyBpdC4gKi8KKyAgICBndWlfbWNoX21vdXNlaGlkZShGQUxTRSk7CisKKyMgaWZkZWYgRkVBVF9HVUlfR05PTUUKKyAgICAvKiBJZiBHbm9tZSBpcyBhdmFpbGFibGUsIHVzZSBpdCBmb3IgdGhlIGRpYWxvZy4gKi8KKyAgICBpZiAoZ3RrX3NvY2tldF9pZCA9PSAwKQorCXJldHVybiBndWlfZ25vbWVfZGlhbG9nKHR5cGUsIHRpdGxlLCBtZXNzYWdlLCBidXR0b25zLCBkZWZfYnV0LAorCQkJCQkJCQkgICB0ZXh0ZmllbGQpOworIyBlbmRpZgorCisgICAgaWYgKHRpdGxlID09IE5VTEwpCisJdGl0bGUgPSAoY2hhcl91ICopXygiVmltIGRpYWxvZy4uLiIpOworCisgICAgaWYgKCh0eXBlIDwgMCkgfHwgKHR5cGUgPiBWSU1fTEFTVF9UWVBFKSkKKwl0eXBlID0gVklNX0dFTkVSSUM7CisKKyAgICAvKiBDaGVjayAndicgZmxhZyBpbiAnZ3Vpb3B0aW9ucyc6IHZlcnRpY2FsIGJ1dHRvbiBwbGFjZW1lbnQuICovCisgICAgdmVydGljYWwgPSAodmltX3N0cmNocihwX2dvLCBHT19WRVJUSUNBTCkgIT0gTlVMTCk7CisKKyAgICBkaWFsb2cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX0RJQUxPRyk7CisgICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhkaWFsb2cpLCAoY29uc3QgZ2NoYXIgKil0aXRsZSk7CisgICAgZ3RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2ZvcihHVEtfV0lORE9XKGRpYWxvZyksIEdUS19XSU5ET1coZ3VpLm1haW53aW4pKTsKKyAgICBndGtfd2lkZ2V0X3JlYWxpemUoZGlhbG9nKTsKKyAgICBnZGtfd2luZG93X3NldF9kZWNvcmF0aW9ucyhkaWFsb2ctPndpbmRvdywgR0RLX0RFQ09SX0JPUkRFUik7CisgICAgZ2RrX3dpbmRvd19zZXRfZnVuY3Rpb25zKGRpYWxvZy0+d2luZG93LCBHREtfRlVOQ19NT1ZFKTsKKworICAgIGNhbmNlbF9kYXRhLnN0YXR1cyA9ICZkaWFsb2dfc3RhdHVzOworICAgIGNhbmNlbF9kYXRhLmRpYWxvZyA9IGRpYWxvZzsKKyAgICBndGtfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIoR1RLX09CSkVDVChkaWFsb2cpLCAia2V5X3ByZXNzX2V2ZW50IiwKKwkJICAgIEdUS19TSUdOQUxfRlVOQyhkbGdfa2V5X3ByZXNzX2V2ZW50KSwKKwkJICAgIChncG9pbnRlcikgJmNhbmNlbF9kYXRhKTsKKyAgICAvKiBDYXRjaCB0aGUgZGVzdHJveSBzaWduYWwsIG90aGVyd2lzZSB3ZSBkb24ndCBub3RpY2UgYSB3aW5kb3cgbWFuYWdlcgorICAgICAqIGRlc3Ryb3lpbmcgdGhlIGRpYWxvZyB3aW5kb3cuICovCisgICAgZ3RrX3NpZ25hbF9jb25uZWN0X29iamVjdChHVEtfT0JKRUNUKGRpYWxvZyksICJkZXN0cm95IiwKKwkJICAgIEdUS19TSUdOQUxfRlVOQyhkbGdfZGVzdHJveV9jYiksCisJCSAgICAoZ3BvaW50ZXIpJmRpYWxvZ19kZXN0cm95ZWQpOworCisgICAgZ3RrX2dyYWJfYWRkKGRpYWxvZyk7CisKKyAgICAvKiB0aGlzIG1ha2VzIGl0IGxvb2sgYmV0ZXIgb24gTW90aWYgc3R5bGUgd2luZG93IG1hbmFnZXJzICovCisgICAgZnJhbWUgPSBndGtfZnJhbWVfbmV3KE5VTEwpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZGlhbG9nKSwgZnJhbWUpOworICAgIGd0a193aWRnZXRfc2hvdyhmcmFtZSk7CisKKyAgICB2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGZyYW1lKSwgdmJveCk7CisgICAgZ3RrX3dpZGdldF9zaG93KHZib3gpOworCisgICAgdGFibGUgPSBndGtfdGFibGVfbmV3KDEsIDMsIEZBTFNFKTsKKyAgICBndGtfdGFibGVfc2V0X3Jvd19zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCA0KTsKKyAgICBndGtfdGFibGVfc2V0X2NvbF9zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCA4KTsKKyAgICBndGtfY29udGFpbmVyX2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKHRhYmxlKSwgNCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHRhYmxlLCA0LCA0LCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3codGFibGUpOworCisgICAgLyogQWRkIHBpeG1hcCAqLworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgY2FzZSBWSU1fR0VORVJJQzoKKwlpY29uX2RhdGEgPSBnZW5lcmljX3hwbTsKKwlicmVhazsKKyAgICBjYXNlIFZJTV9FUlJPUjoKKwlpY29uX2RhdGEgPSBlcnJvcl94cG07CisJYnJlYWs7CisgICAgY2FzZSBWSU1fV0FSTklORzoKKwlpY29uX2RhdGEgPSBhbGVydF94cG07CisJYnJlYWs7CisgICAgY2FzZSBWSU1fSU5GTzoKKwlpY29uX2RhdGEgPSBpbmZvX3hwbTsKKwlicmVhazsKKyAgICBjYXNlIFZJTV9RVUVTVElPTjoKKwlpY29uX2RhdGEgPSBxdWVzdF94cG07CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlpY29uX2RhdGEgPSBnZW5lcmljX3hwbTsKKyAgICB9OworICAgIGljb24gPSBnZGtfcGl4bWFwX2NvbG9ybWFwX2NyZWF0ZV9mcm9tX3hwbV9kKE5VTEwsCisJCQkJICAgICBndGtfd2lkZ2V0X2dldF9jb2xvcm1hcChkaWFsb2cpLAorCQkJCSAgICAgJm1hc2ssIE5VTEwsIGljb25fZGF0YSk7CisgICAgaWYgKGljb24pCisgICAgeworCXBpeG1hcCA9IGd0a19waXhtYXBfbmV3KGljb24sIG1hc2spOworCS8qIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MocGl4bWFwKSwgMC41LCAwLjUpOyAqLworCWd0a190YWJsZV9hdHRhY2hfZGVmYXVsdHMoR1RLX1RBQkxFKHRhYmxlKSwgcGl4bWFwLCAwLCAxLCAwLCAxKTsKKwlndGtfd2lkZ2V0X3Nob3cocGl4bWFwKTsKKyAgICB9CisKKyAgICAvKiBBZGQgbGFiZWwgKi8KKyAgICBkaWFsb2dtZXNzYWdlID0gZ3RrX2xhYmVsX25ldygoY29uc3QgZ2NoYXIgKiltZXNzYWdlKTsKKyAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIGRpYWxvZ21lc3NhZ2UsIDEsIDIsIDAsIDEpOworICAgIGd0a193aWRnZXRfc2hvdyhkaWFsb2dtZXNzYWdlKTsKKworICAgIGRpYWxvZ190ZXh0ZmllbGQgPSB0ZXh0ZmllbGQ7CisgICAgaWYgKHRleHRmaWVsZCAhPSBOVUxMKQorICAgIHsKKwkvKiBBZGQgdGV4dCBlbnRyeSBmaWVsZCAqLworCWRpYWxvZ190ZXh0ZW50cnkgPSBndGtfZW50cnlfbmV3KCk7CisJZ3RrX3dpZGdldF9zZXRfdXNpemUoZGlhbG9nX3RleHRlbnRyeSwgNDAwLCAtMik7CisJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGRpYWxvZ190ZXh0ZW50cnksIFRSVUUsIFRSVUUsIDApOworCWd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9nX3RleHRlbnRyeSksCisJCQkJCQkgICAgKGNvbnN0IGdjaGFyICopdGV4dGZpZWxkKTsKKwlndGtfZW50cnlfc2VsZWN0X3JlZ2lvbihHVEtfRU5UUlkoZGlhbG9nX3RleHRlbnRyeSksIDAsCisJCQkJCQkJICAgU1RSTEVOKHRleHRmaWVsZCkpOworCWd0a19lbnRyeV9zZXRfbWF4X2xlbmd0aChHVEtfRU5UUlkoZGlhbG9nX3RleHRlbnRyeSksIElPU0laRSAtIDEpOworCWd0a19lbnRyeV9zZXRfcG9zaXRpb24oR1RLX0VOVFJZKGRpYWxvZ190ZXh0ZW50cnkpLCBTVFJMRU4odGV4dGZpZWxkKSk7CisJZ3RrX3dpZGdldF9zaG93KGRpYWxvZ190ZXh0ZW50cnkpOworICAgIH0KKworICAgIC8qIEFkZCBib3ggZm9yIGJ1dHRvbnMgKi8KKyAgICBhY3Rpb25fYXJlYSA9IGd0a19oYm94X25ldyhGQUxTRSwgMCk7CisgICAgZ3RrX2NvbnRhaW5lcl9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihhY3Rpb25fYXJlYSksIDQpOworICAgIGd0a19ib3hfcGFja19lbmQoR1RLX0JPWCh2Ym94KSwgYWN0aW9uX2FyZWEsIEZBTFNFLCBUUlVFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coYWN0aW9uX2FyZWEpOworCisgICAgLyogQWRkIGEgW3ZoXWJveCBpbiB0aGUgaGJveCB0byBjZW50ZXIgdGhlIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZy4gKi8KKyAgICBpZiAodmVydGljYWwpCisJc3ViX2FyZWEgPSBndGtfdmJveF9uZXcoRkFMU0UsIDApOworICAgIGVsc2UKKwlzdWJfYXJlYSA9IGd0a19oYm94X25ldyhGQUxTRSwgMCk7CisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoc3ViX2FyZWEpLCAwKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChhY3Rpb25fYXJlYSksIHN1Yl9hcmVhLCBUUlVFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KHN1Yl9hcmVhKTsKKworICAgIC8qCisgICAgICogQ3JlYXRlIHRoZSBidXR0b25zLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBUcmFuc2xhdGUgdGhlIFZpbSBhY2NlbGVyYXRvciBjaGFyYWN0ZXIgaW50byBhbiB1bmRlcnNjb3JlIGZvciBHVEsrLgorICAgICAqIERvdWJsZSB1bmRlcnNjb3JlcyB0byBrZWVwIHRoZW0gaW4gdGhlIGxhYmVsLgorICAgICAqLworICAgIC8qIGNvdW50IHRoZSBudW1iZXIgb2YgdW5kZXJzY29yZXMgKi8KKyAgICBpID0gMTsKKyAgICBmb3IgKHAgPSBidXR0b25zOyAqcDsgKytwKQorCWlmICgqcCA9PSAnXycpCisJICAgICsraTsKKworICAgIC8qIG1ha2UgYSBjb3B5IG9mICJidXR0b25zIiB3aXRoIHRoZSB0cmFuc2xhdGVkIGNoYXJhY3RlcnMgKi8KKyAgICBuYW1lcyA9IGFsbG9jKFNUUkxFTihidXR0b25zKSArIGkpOworICAgIGlmIChuYW1lcyA9PSBOVUxMKQorCXJldHVybiAtMTsKKworICAgIHAgPSBuYW1lczsKKyAgICBmb3IgKGkgPSAwOyBidXR0b25zW2ldOyArK2kpCisgICAgeworCWlmIChidXR0b25zW2ldID09IERMR19IT1RLRVlfQ0hBUikKKwkgICAgKnArKyA9ICdfJzsKKwllbHNlCisJeworCSAgICBpZiAoYnV0dG9uc1tpXSA9PSAnXycpCisJCSpwKysgPSAnXyc7CisJICAgICpwKysgPSBidXR0b25zW2ldOworCX0KKyAgICB9CisgICAgKnAgPSBOVUw7CisKKyAgICAvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGJ1dHRvbnMgYW5kIGFsbG9jYXRlIGJ1dHRvbltdIGFuZCBkYXRhW10uICovCisgICAgYnV0Y291bnQgPSAxOworICAgIGZvciAocCA9IG5hbWVzOyAqcDsgKytwKQorCWlmICgqcCA9PSBETEdfQlVUVE9OX1NFUCkKKwkgICAgKytidXRjb3VudDsKKyAgICBidXR0b24gPSAoR3RrV2lkZ2V0ICoqKWFsbG9jKCh1bnNpZ25lZCkoYnV0Y291bnQgKiBzaXplb2YoR3RrV2lkZ2V0ICopKSk7CisgICAgZGF0YSA9IChCdXR0b25EYXRhICopYWxsb2MoKHVuc2lnbmVkKShidXRjb3VudCAqIHNpemVvZihCdXR0b25EYXRhKSkpOworICAgIGlmIChidXR0b24gPT0gTlVMTCB8fCBkYXRhID09IE5VTEwpCisgICAgeworCXZpbV9mcmVlKG5hbWVzKTsKKwl2aW1fZnJlZShidXR0b24pOworCXZpbV9mcmVlKGRhdGEpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBBdHRhY2ggdGhlIG5ldyBhY2NlbGVyYXRvciBncm91cCB0byB0aGUgd2luZG93LiAqLworICAgIGFjY2VsX2dyb3VwID0gZ3RrX2FjY2VsX2dyb3VwX25ldygpOworICAgIGd0a19hY2NlbF9ncm91cF9hdHRhY2goYWNjZWxfZ3JvdXAsIEdUS19PQkpFQ1QoZGlhbG9nKSk7CisKKyAgICBwID0gbmFtZXM7CisgICAgZm9yIChidXRjb3VudCA9IDA7ICpwOyArK2J1dGNvdW50KQorICAgIHsKKwljaGFyX3UJCSpuZXh0OworCUd0a1dpZGdldAkqbGFiZWw7CisjIGlmZGVmIEdUS19VU0VfQUNDRUwKKwlndWludAkJYWNjZWxfa2V5OworIyBlbmRpZgorCisJLyogQ2h1bmsgb3V0IHRoaXMgc2luZ2xlIGJ1dHRvbi4gKi8KKwlmb3IgKG5leHQgPSBwOyAqbmV4dDsgKytuZXh0KQorCXsKKwkgICAgaWYgKCpuZXh0ID09IERMR19CVVRUT05fU0VQKQorCSAgICB7CisJCSpuZXh0KysgPSBOVUw7CisJCWJyZWFrOworCSAgICB9CisJfQorCisJYnV0dG9uW2J1dGNvdW50XSA9IGd0a19idXR0b25fbmV3KCk7CisJR1RLX1dJREdFVF9TRVRfRkxBR1MoYnV0dG9uW2J1dGNvdW50XSwgR1RLX0NBTl9ERUZBVUxUKTsKKworCWxhYmVsID0gZ3RrX2FjY2VsX2xhYmVsX25ldygiIik7CisJZ3RrX2FjY2VsX2xhYmVsX3NldF9hY2NlbF93aWRnZXQoR1RLX0FDQ0VMX0xBQkVMKGxhYmVsKSwgZGlhbG9nKTsKKworIyBpZmRlZiBHVEtfVVNFX0FDQ0VMCisJYWNjZWxfa2V5ID0gZ3RrX2xhYmVsX3BhcnNlX3VsaW5lKEdUS19MQUJFTChsYWJlbCksIChjb25zdCBnY2hhciAqKXApOworCS8qIERvbid0IGFkZCBhY2NlbGF0b3IgaWYgJ3dpbmFsdGtleXMnIGlzICJubyIuICovCisJaWYgKGFjY2VsX2tleSAhPSBHREtfVm9pZFN5bWJvbCkKKwl7CisJICAgIGd0a193aWRnZXRfYWRkX2FjY2VsZXJhdG9yKGJ1dHRvbltidXRjb3VudF0sCisJCSAgICAiY2xpY2tlZCIsCisJCSAgICBhY2NlbF9ncm91cCwKKwkJICAgIGFjY2VsX2tleSwgMCwKKwkJICAgIDApOworCX0KKyMgZWxzZQorCSh2b2lkKWd0a19sYWJlbF9wYXJzZV91bGluZShHVEtfTEFCRUwobGFiZWwpLCAoY29uc3QgZ2NoYXIgKilwKTsKKyMgZW5kaWYKKworCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoYnV0dG9uW2J1dGNvdW50XSksIGxhYmVsKTsKKwlndGtfd2lkZ2V0X3Nob3dfYWxsKGJ1dHRvbltidXRjb3VudF0pOworCisJZGF0YVtidXRjb3VudF0uc3RhdHVzID0gJmRpYWxvZ19zdGF0dXM7CisJZGF0YVtidXRjb3VudF0uaW5kZXggPSBidXRjb3VudDsKKwlkYXRhW2J1dGNvdW50XS5kaWFsb2cgPSBkaWFsb2c7CisJZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoYnV0dG9uW2J1dGNvdW50XSksCisJCQkgICAoY29uc3QgY2hhciAqKSJjbGlja2VkIiwKKwkJCSAgIEdUS19TSUdOQUxfRlVOQyhkbGdfYnV0dG9uX2NsaWNrZWQpLAorCQkJICAgKGdwb2ludGVyKSAmZGF0YVtidXRjb3VudF0pOworCisJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goc3ViX2FyZWEpLCBidXR0b25bYnV0Y291bnRdLAorCQkJICAgVFJVRSwgRkFMU0UsIDApOworCXAgPSBuZXh0OworICAgIH0KKworICAgIHZpbV9mcmVlKG5hbWVzKTsKKworICAgIGNhbmNlbF9kYXRhLmlnbm9yZV9lbnRlciA9IEZBTFNFOworICAgIGlmIChidXRjb3VudCA+IDApCisgICAgeworCS0tZGVmX2J1dDsJCS8qIDEgaXMgZmlyc3QgYnV0dG9uICovCisJaWYgKGRlZl9idXQgPj0gYnV0Y291bnQpCisJICAgIGRlZl9idXQgPSAtMTsKKwlpZiAoZGVmX2J1dCA+PSAwKQorCXsKKwkgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGJ1dHRvbltkZWZfYnV0XSk7CisJICAgIGd0a193aWRnZXRfZ3JhYl9kZWZhdWx0KGJ1dHRvbltkZWZfYnV0XSk7CisJfQorCWVsc2UKKwkgICAgLyogTm8gZGVmYXVsdCwgaWdub3JlIGhpdHRpbmcgRW50ZXIuICovCisJICAgIGNhbmNlbF9kYXRhLmlnbm9yZV9lbnRlciA9IFRSVUU7CisgICAgfQorCisgICAgaWYgKHRleHRmaWVsZCAhPSBOVUxMKQorCWd0a193aW5kb3dfc2V0X2ZvY3VzKEdUS19XSU5ET1coZGlhbG9nKSwgZGlhbG9nX3RleHRlbnRyeSk7CisKKyAgICBzZXBhcmF0b3IgPSBndGtfaHNlcGFyYXRvcl9uZXcoKTsKKyAgICBndGtfYm94X3BhY2tfZW5kKEdUS19CT1godmJveCksIHNlcGFyYXRvciwgRkFMU0UsIFRSVUUsIDApOworICAgIGd0a193aWRnZXRfc2hvdyhzZXBhcmF0b3IpOworCisgICAgZGlhbG9nX3N0YXR1cyA9IC0xOworCisgICAgZ3VpX2d0a19wb3NpdGlvbl9pbl9wYXJlbnQoR1RLX1dJREdFVChndWkubWFpbndpbiksCisJCQkJCSAgICBHVEtfV0lER0VUKGRpYWxvZyksIFZXX1BPU19NT1VTRSk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKworICAgIC8qIGxvb3AgaGVyZSB1bnRpbCB0aGUgZGlhbG9nIGdvZXMgYXdheSAqLworICAgIHdoaWxlIChkaWFsb2dfc3RhdHVzID09IC0xICYmICFkaWFsb2dfZGVzdHJveWVkCisJCQkJCSAgICAgICAmJiBHVEtfV0lER0VUX0RSQVdBQkxFKGRpYWxvZykpCisJZ3RrX21haW5faXRlcmF0aW9uX2RvKFRSVUUpOworCisgICAgaWYgKGRpYWxvZ19zdGF0dXMgPCAwKQorCWRpYWxvZ19zdGF0dXMgPSAwOworICAgIGlmIChkaWFsb2dfc3RhdHVzICE9IDEgJiYgdGV4dGZpZWxkICE9IE5VTEwpCisJKnRleHRmaWVsZCA9IE5VTDsJLyogZGlhbG9nIHdhcyBjYW5jZWxsZWQgKi8KKworICAgIC8qIGxldCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Iga25vdyB0aGF0IHdlIGRvbid0IG5lZWQgaXQgYW55IGxvbmdlciAqLworICAgIGd0a19hY2NlbF9ncm91cF91bnJlZihhY2NlbF9ncm91cCk7CisKKyAgICB2aW1fZnJlZShidXR0b24pOworICAgIHZpbV9mcmVlKGRhdGEpOworCisgICAgcmV0dXJuIGRpYWxvZ19zdGF0dXM7Cit9CisKKyNlbmRpZiAvKiBGRUFUX0dVSV9ESUFMT0cgJiYgIUhBVkVfR1RLMiAqLworCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgJiYgZGVmaW5lZChIQVZFX0dUSzIpCisKKyAgICBzdGF0aWMgR3RrV2lkZ2V0ICoKK2NyZWF0ZV9tZXNzYWdlX2RpYWxvZyhpbnQgdHlwZSwgY2hhcl91ICp0aXRsZSwgY2hhcl91ICptZXNzYWdlKQoreworICAgIEd0a1dpZGdldAkgICAgKmRpYWxvZzsKKyAgICBHdGtNZXNzYWdlVHlwZSAgbWVzc2FnZV90eXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKwljYXNlIFZJTV9FUlJPUjoJICAgIG1lc3NhZ2VfdHlwZSA9IEdUS19NRVNTQUdFX0VSUk9SOwkgYnJlYWs7CisJY2FzZSBWSU1fV0FSTklORzogICBtZXNzYWdlX3R5cGUgPSBHVEtfTUVTU0FHRV9XQVJOSU5HOwkgYnJlYWs7CisJY2FzZSBWSU1fUVVFU1RJT046ICBtZXNzYWdlX3R5cGUgPSBHVEtfTUVTU0FHRV9RVUVTVElPTjsgYnJlYWs7CisJZGVmYXVsdDoJICAgIG1lc3NhZ2VfdHlwZSA9IEdUS19NRVNTQUdFX0lORk87CSBicmVhazsKKyAgICB9CisKKyAgICBtZXNzYWdlID0gQ09OVkVSVF9UT19VVEY4KG1lc3NhZ2UpOworICAgIGRpYWxvZyAgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1coZ3VpLm1haW53aW4pLAorCQkJCSAgICAgR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULAorCQkJCSAgICAgbWVzc2FnZV90eXBlLAorCQkJCSAgICAgR1RLX0JVVFRPTlNfTk9ORSwKKwkJCQkgICAgICIlcyIsIChjb25zdCBjaGFyICopbWVzc2FnZSk7CisgICAgQ09OVkVSVF9UT19VVEY4X0ZSRUUobWVzc2FnZSk7CisKKyAgICBpZiAodGl0bGUgIT0gTlVMTCkKKyAgICB7CisJdGl0bGUgPSBDT05WRVJUX1RPX1VURjgodGl0bGUpOworCWd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZGlhbG9nKSwgKGNvbnN0IGNoYXIgKil0aXRsZSk7CisJQ09OVkVSVF9UT19VVEY4X0ZSRUUodGl0bGUpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IFZJTV9HRU5FUklDKQorICAgIHsKKwlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksICJWSU0iKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlhbG9nOworfQorCisvKgorICogU3BsaXQgdXAgYnV0dG9uX3N0cmluZyBpbnRvIGluZGl2aWR1YWwgYnV0dG9uIGxhYmVscyBieSBpbnNlcnRpbmcKKyAqIE5VTCBieXRlcy4gIEFsc28gcmVwbGFjZSB0aGUgVmltLXN0eWxlIG1uZW1vbmljIGFjY2VsZXJhdG9yIHByZWZpeAorICogJyYnIHdpdGggJ18nLiAgYnV0dG9uX3N0cmluZyBtdXN0IHBvaW50IHRvIGFsbG9jYXRlZCBtZW1vcnkhCisgKiBSZXR1cm4gYW4gYWxsb2NhdGVkIGFycmF5IG9mIHBvaW50ZXJzIGludG8gYnV0dG9uX3N0cmluZy4KKyAqLworICAgIHN0YXRpYyBjaGFyICoqCitzcGxpdF9idXR0b25fc3RyaW5nKGNoYXJfdSAqYnV0dG9uX3N0cmluZywgaW50ICpuX2J1dHRvbnMpCit7CisgICAgY2hhcgkgICAgKiphcnJheTsKKyAgICBjaGFyX3UJICAgICpwOworICAgIHVuc2lnbmVkIGludCAgICBjb3VudCA9IDE7CisKKyAgICBmb3IgKHAgPSBidXR0b25fc3RyaW5nOyAqcCAhPSBOVUw7ICsrcCkKKwlpZiAoKnAgPT0gRExHX0JVVFRPTl9TRVApCisJICAgICsrY291bnQ7CisKKyAgICBhcnJheSA9IChjaGFyICoqKWFsbG9jKChjb3VudCArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgIGNvdW50ID0gMDsKKworICAgIGlmIChhcnJheSAhPSBOVUxMKQorICAgIHsKKwlhcnJheVtjb3VudCsrXSA9IChjaGFyICopYnV0dG9uX3N0cmluZzsKKwlmb3IgKHAgPSBidXR0b25fc3RyaW5nOyAqcCAhPSBOVUw7ICsrcCkKKwl7CisJICAgIGlmICgqcCA9PSBETEdfQlVUVE9OX1NFUCkKKwkgICAgeworCQkqcCA9IE5VTDsKKwkJYXJyYXlbY291bnQrK10gPSAoY2hhciAqKXAgKyAxOworCSAgICB9CisJICAgIGVsc2UgaWYgKCpwID09IERMR19IT1RLRVlfQ0hBUikKKwkJKnAgPSAnXyc7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBlbHNlIGlmIChoYXNfbWJ5dGUpCisJCXAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7CisjZW5kaWYKKwl9CisJYXJyYXlbY291bnRdID0gTlVMTDsgLyogY3VycmVudGx5IG5vdCByZWxpZWQgdXBvbiwgYnV0IGRvZXNuJ3QgaHVydCAqLworICAgIH0KKworICAgICpuX2J1dHRvbnMgPSBjb3VudDsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKKyAgICBzdGF0aWMgY2hhciAqKgorc3BsaXRfYnV0dG9uX3RyYW5zbGF0aW9uKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisgICAgY2hhciAgICAqKmJ1dHRvbnMgPSBOVUxMOworICAgIGNoYXJfdSAgKnN0cjsKKyAgICBpbnQJICAgIG5fYnV0dG9ucyA9IDA7CisgICAgaW50CSAgICBuX2V4cGVjdGVkID0gMTsKKworICAgIGZvciAoc3RyID0gKGNoYXJfdSAqKW1lc3NhZ2U7ICpzdHIgIT0gTlVMOyArK3N0cikKKwlpZiAoKnN0ciA9PSBETEdfQlVUVE9OX1NFUCkKKwkgICAgKytuX2V4cGVjdGVkOworCisgICAgc3RyID0gKGNoYXJfdSAqKV8obWVzc2FnZSk7CisgICAgaWYgKHN0ciAhPSBOVUxMKQorICAgIHsKKwlpZiAob3V0cHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJICAgIHN0ciA9IHN0cmluZ19jb252ZXJ0KCZvdXRwdXRfY29udiwgc3RyLCBOVUxMKTsKKwllbHNlCisJICAgIHN0ciA9IHZpbV9zdHJzYXZlKHN0cik7CisKKwlpZiAoc3RyICE9IE5VTEwpCisJICAgIGJ1dHRvbnMgPSBzcGxpdF9idXR0b25fc3RyaW5nKHN0ciwgJm5fYnV0dG9ucyk7CisgICAgfQorICAgIC8qCisgICAgICogVWgtb2guLi4gdGhpcyBzaG91bGQgbmV2ZXIgZXZlciBoYXBwZW4uCUJ1dCB3ZSBkb24ndCB3YW5uYSBjcmFzaAorICAgICAqIGlmIHRoZSB0cmFuc2xhdGlvbiBpcyBicm9rZW4sIHRodXMgZmFsbCBiYWNrIHRvIHRoZSB1bnRyYW5zbGF0ZWQKKyAgICAgKiBidXR0b25zIHN0cmluZyBpbiBjYXNlIG9mIGVtZXJnZW5jeS4KKyAgICAgKi8KKyAgICBpZiAoYnV0dG9ucyA9PSBOVUxMIHx8IG5fYnV0dG9ucyAhPSBuX2V4cGVjdGVkKQorICAgIHsKKwl2aW1fZnJlZShidXR0b25zKTsKKwl2aW1fZnJlZShzdHIpOworCWJ1dHRvbnMgPSBOVUxMOworCXN0ciA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKiltZXNzYWdlKTsKKworCWlmIChzdHIgIT0gTlVMTCkKKwkgICAgYnV0dG9ucyA9IHNwbGl0X2J1dHRvbl9zdHJpbmcoc3RyLCAmbl9idXR0b25zKTsKKwlpZiAoYnV0dG9ucyA9PSBOVUxMKQorCSAgICB2aW1fZnJlZShzdHIpOworICAgIH0KKworICAgIHJldHVybiBidXR0b25zOworfQorCisgICAgc3RhdGljIGludAorYnV0dG9uX2VxdWFsKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisgICAgd2hpbGUgKCphICE9ICdcMCcgJiYgKmIgIT0gJ1wwJykKKyAgICB7CisJaWYgKCphID09ICdfJyAmJiAqKythID09ICdcMCcpCisJICAgIGJyZWFrOworCWlmICgqYiA9PSAnXycgJiYgKisrYiA9PSAnXDAnKQorCSAgICBicmVhazsKKworCWlmIChnX3VuaWNoYXJfdG9sb3dlcihnX3V0ZjhfZ2V0X2NoYXIoYSkpCisJCSE9IGdfdW5pY2hhcl90b2xvd2VyKGdfdXRmOF9nZXRfY2hhcihiKSkpCisJICAgIHJldHVybiBGQUxTRTsKKworCWEgPSBnX3V0ZjhfbmV4dF9jaGFyKGEpOworCWIgPSBnX3V0ZjhfbmV4dF9jaGFyKGIpOworICAgIH0KKworICAgIHJldHVybiAoKmEgPT0gJ1wwJyAmJiAqYiA9PSAnXDAnKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitkaWFsb2dfYWRkX2J1dHRvbnMoR3RrRGlhbG9nICpkaWFsb2csIGNoYXJfdSAqYnV0dG9uX3N0cmluZykKK3sKKyAgICBjaGFyICAgICoqb2s7CisgICAgY2hhciAgICAqKnluYzsgIC8qICJ5ZXMgbm8gY2FuY2VsIiAqLworICAgIGNoYXIgICAgKipidXR0b25zOworICAgIGludAkgICAgbl9idXR0b25zID0gMDsKKyAgICBpbnQJICAgIGluZGV4OworCisgICAgYnV0dG9uX3N0cmluZyA9IHZpbV9zdHJzYXZlKGJ1dHRvbl9zdHJpbmcpOyAvKiBtdXN0IGJlIHdyaXRhYmxlICovCisgICAgaWYgKGJ1dHRvbl9zdHJpbmcgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICAvKiBDaGVjayAndicgZmxhZyBpbiAnZ3Vpb3B0aW9ucyc6IHZlcnRpY2FsIGJ1dHRvbiBwbGFjZW1lbnQuICovCisgICAgaWYgKHZpbV9zdHJjaHIocF9nbywgR09fVkVSVElDQUwpICE9IE5VTEwpCisgICAgeworCUd0a1dpZGdldAkqdmJ1dHRvbl9ib3g7CisKKwl2YnV0dG9uX2JveCA9IGd0a192YnV0dG9uX2JveF9uZXcoKTsKKwlndGtfd2lkZ2V0X3Nob3codmJ1dHRvbl9ib3gpOworCWd0a19ib3hfcGFja19lbmQoR1RLX0JPWChHVEtfRElBTE9HKGRpYWxvZyktPnZib3gpLAorCQkJCQkJIHZidXR0b25fYm94LCBUUlVFLCBGQUxTRSwgMCk7CisJLyogT3ZlcnJ1bGUgdGhlICJhY3Rpb25fYXJlYSIgdmFsdWUsIGhvcGVmdWxseSB0aGlzIHdvcmtzLi4uICovCisJR1RLX0RJQUxPRyhkaWFsb2cpLT5hY3Rpb25fYXJlYSA9IHZidXR0b25fYm94OworICAgIH0KKworICAgIC8qCisgICAgICogWWVzIHRoaXMgaXMgdWdseSwgSSBkb24ndCBwYXJ0aWN1bGFybHkgbGlrZSBpdCBlaXRoZXIuICBCdXQgZG9pbmcgaXQKKyAgICAgKiB0aGlzIHdheSBoYXMgdGhlIGNvbXBlbGxpbmcgYWR2YW50YWdlIHRoYXQgdHJhbnNsYXRpb25zIG5lZWQgbm90IHRvCisgICAgICogYmUgdG91Y2hlZCBhdCBhbGwuICBTZWUgYmVsb3cgd2hhdCAnb2snIGFuZCAneW5jJyBhcmUgdXNlZCBmb3IuCisgICAgICovCisgICAgb2sJICAgID0gc3BsaXRfYnV0dG9uX3RyYW5zbGF0aW9uKE5fKCImT2siKSk7CisgICAgeW5jICAgICA9IHNwbGl0X2J1dHRvbl90cmFuc2xhdGlvbihOXygiJlllc1xuJk5vXG4mQ2FuY2VsIikpOworICAgIGJ1dHRvbnMgPSBzcGxpdF9idXR0b25fc3RyaW5nKGJ1dHRvbl9zdHJpbmcsICZuX2J1dHRvbnMpOworCisgICAgLyoKKyAgICAgKiBZZXMsIHRoZSBidXR0b25zIGFyZSBpbiByZXZlcnNlZCBvcmRlciB0byBtYXRjaCB0aGUgR05PTUUgMiBkZXNrdG9wCisgICAgICogZW52aXJvbm1lbnQuICBEb24ndCBoaXQgbWUgLS0gaXQncyBhbGwgYWJvdXQgY29uc2lzdGVuY3kuCisgICAgICogV2VsbCwgYXBwYXJlbnRseSBzb21lYm9keSBjaGFuZ2VkIGhpcyBtaW5kOiB3aXRoIEdUSyAyLjIuNCBpdCB3b3JrcyB0aGUKKyAgICAgKiBvdGhlciB3YXkgYXJvdW5kLi4uCisgICAgICovCisgICAgZm9yIChpbmRleCA9IDE7IGluZGV4IDw9IG5fYnV0dG9uczsgKytpbmRleCkKKyAgICB7CisJY2hhcgkqbGFiZWw7CisJY2hhcl91CSpsYWJlbDg7CisKKwlsYWJlbCA9IGJ1dHRvbnNbaW5kZXggLSAxXTsKKwkvKgorCSAqIFBlcmZvcm0gc29tZSBndWVzc3dvcmsgdG8gZmluZCBhcHByb3ByaWF0ZSBzdG9jayBpdGVtcyBmb3IgdGhlCisJICogYnV0dG9ucy4gIFdlIGhhdmUgdG8gY29tcGFyZSB3aXRoIGEgc2FtcGxlIG9mIHRoZSB0cmFuc2xhdGVkCisJICogYnV0dG9uIHN0cmluZyB0byBnZXQgdGhpbmdzIHJpZ2h0LiAgWWVzLCB0aGlzIGlzIGhhY2tpc2ggOi8KKwkgKgorCSAqIEJ1dCBldmVuIHRoZSBjb21tb24gYnV0dG9uIGxhYmVscyBhcmVuJ3QgbmVjZXNzYXJpbHkgdHJhbnNsYXRlZCwKKwkgKiBzaW5jZSBhbnlvbmUgY2FuIGNyZWF0ZSB0aGVpciBvd24gZGlhbG9ncyB1c2luZyBWaW0gZnVuY3Rpb25zLgorCSAqIFRodXMgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhvc2UgdG9vLgorCSAqLworCWlmIChvayAhPSBOVUxMICYmIHluYyAhPSBOVUxMKSAvKiBhbG1vc3QgaW1wb3NzaWJsZSB0byBmYWlsICovCisJeworCSAgICBpZgkgICAgKGJ1dHRvbl9lcXVhbChsYWJlbCwgb2tbMF0pKSAgICBsYWJlbCA9IEdUS19TVE9DS19PSzsKKwkgICAgZWxzZSBpZiAoYnV0dG9uX2VxdWFsKGxhYmVsLCB5bmNbMF0pKSAgIGxhYmVsID0gR1RLX1NUT0NLX1lFUzsKKwkgICAgZWxzZSBpZiAoYnV0dG9uX2VxdWFsKGxhYmVsLCB5bmNbMV0pKSAgIGxhYmVsID0gR1RLX1NUT0NLX05POworCSAgICBlbHNlIGlmIChidXR0b25fZXF1YWwobGFiZWwsIHluY1syXSkpICAgbGFiZWwgPSBHVEtfU1RPQ0tfQ0FOQ0VMOworCSAgICBlbHNlIGlmIChidXR0b25fZXF1YWwobGFiZWwsICJPayIpKSAgICAgbGFiZWwgPSBHVEtfU1RPQ0tfT0s7CisJICAgIGVsc2UgaWYgKGJ1dHRvbl9lcXVhbChsYWJlbCwgIlllcyIpKSAgICBsYWJlbCA9IEdUS19TVE9DS19ZRVM7CisJICAgIGVsc2UgaWYgKGJ1dHRvbl9lcXVhbChsYWJlbCwgIk5vIikpICAgICBsYWJlbCA9IEdUS19TVE9DS19OTzsKKwkgICAgZWxzZSBpZiAoYnV0dG9uX2VxdWFsKGxhYmVsLCAiQ2FuY2VsIikpIGxhYmVsID0gR1RLX1NUT0NLX0NBTkNFTDsKKwl9CisJbGFiZWw4ID0gQ09OVkVSVF9UT19VVEY4KChjaGFyX3UgKilsYWJlbCk7CisJZ3RrX2RpYWxvZ19hZGRfYnV0dG9uKGRpYWxvZywgKGNvbnN0IGdjaGFyICopbGFiZWw4LCBpbmRleCk7CisJQ09OVkVSVF9UT19VVEY4X0ZSRUUobGFiZWw4KTsKKyAgICB9CisKKyAgICBpZiAob2sgIT0gTlVMTCkKKwl2aW1fZnJlZSgqb2spOworICAgIGlmICh5bmMgIT0gTlVMTCkKKwl2aW1fZnJlZSgqeW5jKTsKKyAgICB2aW1fZnJlZShvayk7CisgICAgdmltX2ZyZWUoeW5jKTsKKyAgICB2aW1fZnJlZShidXR0b25zKTsKKyAgICB2aW1fZnJlZShidXR0b25fc3RyaW5nKTsKK30KKworLyoKKyAqIEFsbG93IG1uZW1vbmljIGFjY2VsZXJhdG9ycyB0byBiZSBhY3RpdmF0ZWQgd2l0aG91dCBwcmVzc2luZyA8QWx0Pi4KKyAqIEknbSBub3Qgc3VyZSBpZiBpdCdzIGEgd2lzZSBpZGVhIHRvIGRvIHRoaXMuICBIb3dldmVyLCB0aGUgb2xkIEdUSysgMS4yCisgKiBHVUkgdXNlZCB0byB3b3JrIHRoaXMgd2F5LCBhbmQgSSBjb25zaWRlciB0aGUgaW1wYWN0IG9uIFVJIGNvbnNpc3RlbmN5CisgKiBsb3cgZW5vdWdoIHRvIGp1c3RpZnkgaW1wbGVtZW50aW5nIHRoaXMgYXMgYSBzcGVjaWFsIFZpbSBmZWF0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBfRGlhbG9nSW5mbworeworICAgIGludAkJaWdub3JlX2VudGVyOwkgICAgLyogbm8gZGVmYXVsdCBidXR0b24sIGlnbm9yZSAiRW50ZXIiICovCisgICAgaW50CQlub2FsdDsJCSAgICAvKiBhY2NlcHQgYWNjZWxlcmF0b3JzIHdpdGhvdXQgQWx0ICovCisgICAgR3RrRGlhbG9nCSpkaWFsb2c7CSAgICAvKiBXaWRnZXQgb2YgdGhlIGRpYWxvZyAqLworfSBEaWFsb2dJbmZvOworCisvKkFSR1NVU0VEMiovCisgICAgc3RhdGljIGdib29sZWFuCitkaWFsb2dfa2V5X3ByZXNzX2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudEtleSAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgRGlhbG9nSW5mbyAqZGkgPSAoRGlhbG9nSW5mbyAqKWRhdGE7CisKKyAgICAvKiBJZ25vcmUgaGl0dGluZyAiRW50ZXIiIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQgYnV0dG9uLiAqLworICAgIGlmIChkaS0+aWdub3JlX2VudGVyICYmIGV2ZW50LT5rZXl2YWwgPT0gR0RLX1JldHVybikKKwlyZXR1cm4gVFJVRTsKKworICAgIC8qIENsb3NlIHRoZSBkaWFsb2cgd2hlbiBoaXR0aW5nICJFc2MiLiAqLworICAgIGlmIChldmVudC0+a2V5dmFsID09IEdES19Fc2NhcGUpCisgICAgeworCWd0a19kaWFsb2dfcmVzcG9uc2UoZGktPmRpYWxvZywgR1RLX1JFU1BPTlNFX1JFSkVDVCk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgaWYgKGRpLT5ub2FsdAorCSAgICAgICYmIChldmVudC0+c3RhdGUgJiBndGtfYWNjZWxlcmF0b3JfZ2V0X2RlZmF1bHRfbW9kX21hc2soKSkgPT0gMCkKKyAgICB7CisJcmV0dXJuIGd0a193aW5kb3dfbW5lbW9uaWNfYWN0aXZhdGUoCisJCSAgIEdUS19XSU5ET1cod2lkZ2V0KSwgZXZlbnQtPmtleXZhbCwKKwkJICAgZ3RrX3dpbmRvd19nZXRfbW5lbW9uaWNfbW9kaWZpZXIoR1RLX1dJTkRPVyh3aWRnZXQpKSk7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOyAvKiBjb250aW51ZSBlbWlzc2lvbiAqLworfQorCisgICAgaW50CitndWlfbWNoX2RpYWxvZyhpbnQJdHlwZSwJICAgIC8qIHR5cGUgb2YgZGlhbG9nICovCisJICAgICAgIGNoYXJfdQkqdGl0bGUsCSAgICAvKiB0aXRsZSBvZiBkaWFsb2cgKi8KKwkgICAgICAgY2hhcl91CSptZXNzYWdlLCAgIC8qIG1lc3NhZ2UgdGV4dCAqLworCSAgICAgICBjaGFyX3UJKmJ1dHRvbnMsICAgLyogbmFtZXMgb2YgYnV0dG9ucyAqLworCSAgICAgICBpbnQJZGVmX2J1dCwgICAgLyogZGVmYXVsdCBidXR0b24gKi8KKwkgICAgICAgY2hhcl91CSp0ZXh0ZmllbGQpIC8qIHRleHQgZm9yIHRleHRmaWVsZCBvciBOVUxMICovCit7CisgICAgR3RrV2lkZ2V0CSpkaWFsb2c7CisgICAgR3RrV2lkZ2V0CSplbnRyeSA9IE5VTEw7CisgICAgY2hhcl91CSp0ZXh0OworICAgIGludAkJcmVzcG9uc2U7CisgICAgRGlhbG9nSW5mbyAgZGlhbG9naW5mbzsKKworICAgIGRpYWxvZyA9IGNyZWF0ZV9tZXNzYWdlX2RpYWxvZyh0eXBlLCB0aXRsZSwgbWVzc2FnZSk7CisgICAgZGlhbG9naW5mby5kaWFsb2cgPSBHVEtfRElBTE9HKGRpYWxvZyk7CisgICAgZGlhbG9nX2FkZF9idXR0b25zKEdUS19ESUFMT0coZGlhbG9nKSwgYnV0dG9ucyk7CisKKyAgICBpZiAodGV4dGZpZWxkICE9IE5VTEwpCisgICAgeworCUd0a1dpZGdldCAqYWxpZ25tZW50OworCisJZW50cnkgPSBndGtfZW50cnlfbmV3KCk7CisJZ3RrX3dpZGdldF9zaG93KGVudHJ5KTsKKworCXRleHQgPSBDT05WRVJUX1RPX1VURjgodGV4dGZpZWxkKTsKKwlndGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKGVudHJ5KSwgKGNvbnN0IGNoYXIgKil0ZXh0KTsKKwlDT05WRVJUX1RPX1VURjhfRlJFRSh0ZXh0KTsKKworCWFsaWdubWVudCA9IGd0a19hbGlnbm1lbnRfbmV3KChmbG9hdCkwLjUsIChmbG9hdCkwLjUsCisJCQkJCQkgICAgICAoZmxvYXQpMS4wLCAoZmxvYXQpMS4wKTsKKwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGFsaWdubWVudCksIGVudHJ5KTsKKwlndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihhbGlnbm1lbnQpLCA1KTsKKwlndGtfd2lkZ2V0X3Nob3coYWxpZ25tZW50KTsKKworCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKEdUS19ESUFMT0coZGlhbG9nKS0+dmJveCksCisJCQkgICBhbGlnbm1lbnQsIFRSVUUsIEZBTFNFLCAwKTsKKwlkaWFsb2dpbmZvLm5vYWx0ID0gRkFMU0U7CisgICAgfQorICAgIGVsc2UKKwlkaWFsb2dpbmZvLm5vYWx0ID0gVFJVRTsKKworICAgIC8qIEFsbG93IGFjdGl2YXRpb24gb2YgbW5lbW9uaWMgYWNjZWxlcmF0b3JzIHdpdGhvdXQgcHJlc3NpbmcgPEFsdD4gd2hlbgorICAgICAqIHRoZXJlIGlzIG5vIHRleHRmaWVsZC4gIEhhbmRsZSBwcmVzc2luZyBFbnRlciBhbmQgRXNjLiAqLworICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QoZGlhbG9nKSwgImtleV9wcmVzc19ldmVudCIsCisJCQkgR19DQUxMQkFDSygmZGlhbG9nX2tleV9wcmVzc19ldmVudF9jYiksICZkaWFsb2dpbmZvKTsKKworICAgIGlmIChkZWZfYnV0ID4gMCkKKyAgICB7CisJZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShHVEtfRElBTE9HKGRpYWxvZyksIGRlZl9idXQpOworCWRpYWxvZ2luZm8uaWdub3JlX2VudGVyID0gRkFMU0U7CisgICAgfQorICAgIGVsc2UKKwkvKiBObyBkZWZhdWx0IGJ1dHRvbiwgaWdub3JlIHByZXNzaW5nIEVudGVyLiAqLworCWRpYWxvZ2luZm8uaWdub3JlX2VudGVyID0gVFJVRTsKKworICAgIC8qIFNob3cgdGhlIG1vdXNlIHBvaW50ZXIgaWYgaXQncyBjdXJyZW50bHkgaGlkZGVuLiAqLworICAgIGd1aV9tY2hfbW91c2VoaWRlKEZBTFNFKTsKKworICAgIHJlc3BvbnNlID0gZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTsKKworICAgIC8qIEdUS19SRVNQT05TRV9OT05FIG1lYW5zIHRoZSBkaWFsb2cgd2FzIHByb2dyYW1tYXRpY2FsbHkgZGVzdHJveWVkLiAqLworICAgIGlmIChyZXNwb25zZSAhPSBHVEtfUkVTUE9OU0VfTk9ORSkKKyAgICB7CisJaWYgKHRleHRmaWVsZCAhPSBOVUxMKQorCXsKKwkgICAgdGV4dCA9IChjaGFyX3UgKilndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGVudHJ5KSk7CisJICAgIHRleHQgPSBDT05WRVJUX0ZST01fVVRGOCh0ZXh0KTsKKworCSAgICBTVFJOQ1BZKHRleHRmaWVsZCwgdGV4dCwgSU9TSVpFKTsKKwkgICAgdGV4dGZpZWxkW0lPU0laRSAtIDFdID0gTlVMOworCisJICAgIENPTlZFUlRfRlJPTV9VVEY4X0ZSRUUodGV4dCk7CisJfQorCWd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpOworICAgIH0KKworICAgIC8qIFRlcnJpYmxlIGhhY2s6IFdoZW4gdGhlIHRleHQgYXJlYSBzdGlsbCBoYXMgZm9jdXMgd2hlbiB3ZSByZW1vdmUgdGhlCisgICAgICogZGlhbG9nLCBzb21laG93IGd2aW0gbG9zZXMgd2luZG93IGZvY3VzLiAgVGhpcyBpcyB3aXRoICJwb2ludCB0byB0eXBlIgorICAgICAqIGluIHRoZSBLREUgMy4xIHdpbmRvdyBtYW5hZ2VyLiAgV2FycCB0aGUgbW91c2UgcG9pbnRlciB0byBvdXRzaWRlIHRoZQorICAgICAqIHdpbmRvdyBhbmQgYmFjayB0byBhdm9pZCB0aGF0LiAqLworICAgIGlmICghZ3VpLmluX2ZvY3VzKQorICAgIHsKKwlpbnQgeCwgeTsKKworCWdka193aW5kb3dfZ2V0X3BvaW50ZXIoZ3VpLmRyYXdhcmVhLT53aW5kb3csICZ4LCAmeSwgTlVMTCk7CisJZ3VpX21jaF9zZXRtb3VzZSgtMTAwLCAtMTAwKTsKKwlndWlfbWNoX3NldG1vdXNlKHgsIHkpOworICAgIH0KKworICAgIHJldHVybiByZXNwb25zZSA+IDAgPyByZXNwb25zZSA6IDA7Cit9CisKKyNlbmRpZiAvKiBGRUFUX0dVSV9ESUFMT0cgJiYgSEFWRV9HVEsyICovCisKKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSB8fCBkZWZpbmVkKFBST1RPKQorCisgICAgdm9pZAorZ3VpX21jaF9zaG93X3BvcHVwbWVudSh2aW1tZW51X1QgKm1lbnUpCit7CisjIGlmIGRlZmluZWQoRkVBVF9YSU0pICYmIGRlZmluZWQoSEFWRV9HVEsyKQorICAgIC8qCisgICAgICogQXBwZW5kIGEgc3VibWVudSBmb3Igc2VsZWN0aW5nIGFuIGlucHV0IG1ldGhvZC4JVGhpcyBpcworICAgICAqIGN1cnJlbnRseSB0aGUgb25seSB3YXkgdG8gc3dpdGNoIGlucHV0IG1ldGhvZHMgYXQgcnVudGltZS4KKyAgICAgKi8KKyAgICBpZiAoeGljICE9IE5VTEwgJiYgZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QobWVudS0+c3VibWVudV9pZCksCisJCQkJCSAidmltLWhhcy1pbS1tZW51IikgPT0gTlVMTCkKKyAgICB7CisJR3RrV2lkZ2V0ICAgKm1lbnVpdGVtOworCUd0a1dpZGdldCAgICpzdWJtZW51OworCWNoYXJfdQkgICAgKm5hbWU7CisKKwltZW51aXRlbSA9IGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25ldygpOworCWd0a193aWRnZXRfc2hvdyhtZW51aXRlbSk7CisJZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1lbnUtPnN1Ym1lbnVfaWQpLCBtZW51aXRlbSk7CisKKwluYW1lID0gKGNoYXJfdSAqKV8oIklucHV0IF9NZXRob2RzIik7CisJbmFtZSA9IENPTlZFUlRfVE9fVVRGOChuYW1lKTsKKwltZW51aXRlbSA9IGd0a19tZW51X2l0ZW1fbmV3X3dpdGhfbW5lbW9uaWMoKGNvbnN0IGNoYXIgKiluYW1lKTsKKwlDT05WRVJUX1RPX1VURjhfRlJFRShuYW1lKTsKKwlndGtfd2lkZ2V0X3Nob3cobWVudWl0ZW0pOworCisJc3VibWVudSA9IGd0a19tZW51X25ldygpOworCWd0a19tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoR1RLX01FTlVfSVRFTShtZW51aXRlbSksIHN1Ym1lbnUpOworCWd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtZW51LT5zdWJtZW51X2lkKSwgbWVudWl0ZW0pOworCisJZ3RrX2ltX211bHRpY29udGV4dF9hcHBlbmRfbWVudWl0ZW1zKEdUS19JTV9NVUxUSUNPTlRFWFQoeGljKSwKKwkJCQkJICAgICBHVEtfTUVOVV9TSEVMTChzdWJtZW51KSk7CisJZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobWVudS0+c3VibWVudV9pZCksCisJCQkgICJ2aW0taGFzLWltLW1lbnUiLCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOworICAgIH0KKyMgZW5kaWYgLyogRkVBVF9YSU0gJiYgSEFWRV9HVEsyICovCisKKyAgICBndGtfbWVudV9wb3B1cChHVEtfTUVOVShtZW51LT5zdWJtZW51X2lkKSwKKwkJICAgTlVMTCwgTlVMTCwKKwkJICAgKEd0a01lbnVQb3NpdGlvbkZ1bmMpTlVMTCwgTlVMTCwKKwkJICAgM1UsIChndWludDMyKUdES19DVVJSRU5UX1RJTUUpOworfQorCisvKgorICogTWVudSBwb3NpdGlvbiBjYWxsYmFjazsgdXNlZCBieSBndWlfbWFrZV9wb3B1cCgpIHRvIHBsYWNlIHRoZSBtZW51CisgKiBhdCB0aGUgY3VycmVudCB0ZXh0IGN1cnNvciBwb3NpdGlvbi4KKyAqCisgKiBOb3RlOiBUaGUgcHVzaF9pbiBvdXRwdXQgYXJndW1lbnQgc2VlbXMgdG8gYWZmZWN0IHNjcm9sbGluZyBvZiBodWdlCisgKiBtZW51cyB0aGF0IGRvbid0IGZpdCBvbiB0aGUgc2NyZWVuLglMZWF2ZSBpdCBhdCB0aGUgZGVmYXVsdCBmb3Igbm93LgorICovCisvKkFSR1NVU0VEMCovCisgICAgc3RhdGljIHZvaWQKK3BvcHVwX21lbnVfcG9zaXRpb25fZnVuYyhHdGtNZW51ICptZW51LAorCQkJIGdpbnQgKngsIGdpbnQgKnksCisjIGlmZGVmIEhBVkVfR1RLMgorCQkJIGdib29sZWFuICpwdXNoX2luLAorIyBlbmRpZgorCQkJIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBpZiAoY3Vyd2luICE9IE5VTEwgJiYgZ3VpLmRyYXdhcmVhICE9IE5VTEwgJiYgZ3VpLmRyYXdhcmVhLT53aW5kb3cgIT0gTlVMTCkKKyAgICB7CisJZ2RrX3dpbmRvd19nZXRfb3JpZ2luKGd1aS5kcmF3YXJlYS0+d2luZG93LCB4LCB5KTsKKworCS8qIEZpbmQgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCB3aW5kb3cgKi8KKwkqeCArPSBGSUxMX1goV19XSU5DT0woY3Vyd2luKSArIGN1cndpbi0+d193Y29sICsgMSkgKyAxOworCSp5ICs9IEZJTExfWShXX1dJTlJPVyhjdXJ3aW4pICsgY3Vyd2luLT53X3dyb3cgKyAxKSArIDE7CisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX21ha2VfcG9wdXAoY2hhcl91ICpwYXRoX25hbWUpCit7CisgICAgdmltbWVudV9UICptZW51OworCisgICAgbWVudSA9IGd1aV9maW5kX21lbnUocGF0aF9uYW1lKTsKKworICAgIGlmIChtZW51ICE9IE5VTEwgJiYgbWVudS0+c3VibWVudV9pZCAhPSBOVUxMKQorICAgIHsKKwlndGtfbWVudV9wb3B1cChHVEtfTUVOVShtZW51LT5zdWJtZW51X2lkKSwKKwkJICAgICAgIE5VTEwsIE5VTEwsCisJCSAgICAgICAmcG9wdXBfbWVudV9wb3NpdGlvbl9mdW5jLCBOVUxMLAorCQkgICAgICAgMFUsIChndWludDMyKUdES19DVVJSRU5UX1RJTUUpOworICAgIH0KK30KKworI2VuZGlmIC8qIEZFQVRfTUVOVSAqLworCisKKy8qCisgKiBXZSBkb24ndCBjcmVhdGUgaXQgdHdpY2UuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX1NoYXJlZEZpbmRSZXBsYWNlCit7CisgICAgR3RrV2lkZ2V0ICpkaWFsb2c7CS8qIHRoZSBtYWluIGRpYWxvZyB3aWRnZXQgKi8KKyAgICBHdGtXaWRnZXQgKnd3b3JkOwkvKiAnV2hvbGUgd29yZCBvbmx5JyBjaGVjayBidXR0b24gKi8KKyAgICBHdGtXaWRnZXQgKm1jYXNlOwkvKiAnTWF0Y2ggY2FzZScgY2hlY2sgYnV0dG9uICovCisgICAgR3RrV2lkZ2V0ICp1cDsJLyogc2VhcmNoIGRpcmVjdGlvbiAnVXAnIHJhZGlvIGJ1dHRvbiAqLworICAgIEd0a1dpZGdldCAqZG93bjsJLyogc2VhcmNoIGRpcmVjdGlvbiAnRG93bicgcmFkaW8gYnV0dG9uICovCisgICAgR3RrV2lkZ2V0ICp3aGF0OwkvKiAnRmluZCB3aGF0JyBlbnRyeSB0ZXh0IHdpZGdldCAqLworICAgIEd0a1dpZGdldCAqd2l0aDsJLyogJ1JlcGxhY2Ugd2l0aCcgZW50cnkgdGV4dCB3aWRnZXQgKi8KKyAgICBHdGtXaWRnZXQgKmZpbmQ7CS8qICdGaW5kIE5leHQnIGFjdGlvbiBidXR0b24gKi8KKyAgICBHdGtXaWRnZXQgKnJlcGxhY2U7CS8qICdSZXBsYWNlIFdpdGgnIGFjdGlvbiBidXR0b24gKi8KKyAgICBHdGtXaWRnZXQgKmFsbDsJLyogJ1JlcGxhY2UgQWxsJyBhY3Rpb24gYnV0dG9uICovCit9IFNoYXJlZEZpbmRSZXBsYWNlOworCitzdGF0aWMgU2hhcmVkRmluZFJlcGxhY2UgZmluZF93aWRnZXRzID0geyBOVUxMLCB9Oworc3RhdGljIFNoYXJlZEZpbmRSZXBsYWNlIHJlcGxfd2lkZ2V0cyA9IHsgTlVMTCwgfTsKKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgaW50CitmaW5kX2tleV9wcmVzc19ldmVudCgKKwkJR3RrV2lkZ2V0CSp3aWRnZXQsCisJCUdka0V2ZW50S2V5CSpldmVudCwKKwkJU2hhcmVkRmluZFJlcGxhY2UgKmZyZHApCit7CisgICAgLyogSWYgdGhlIHVzZXIgaXMgaG9sZGluZyBvbmUgb2YgdGhlIGtleSBtb2RpZmllcnMgd2Ugd2lsbCBqdXN0IGJhaWwgb3V0LAorICAgICAqIHRodXMgcHJlc2VydmluZyB0aGUgcG9zc2liaWxpdHkgb2Ygbm9ybWFsIGZvY3VzIHRyYXZlcnNhbC4KKyAgICAgKi8KKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgKEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSykpCisJcmV0dXJuIEZBTFNFOworCisgICAgLyogdGhlIEVzY2FwZSBrZXkgc3ludGhlc2l6ZXMgYSBjYW5jZWxsYXRpb24gYWN0aW9uICovCisgICAgaWYgKGV2ZW50LT5rZXl2YWwgPT0gR0RLX0VzY2FwZSkKKyAgICB7CisJZ3RrX3dpZGdldF9oaWRlKGZyZHAtPmRpYWxvZyk7CisKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgLyoKKyAgICAgKiBXaGF0IHRoZSAqKioqIGlzIHRoaXMgZm9yPyAgRGlzYWJsZWQgZm9yIEdUSysgMiBiZWNhdXNlIGR1ZSB0bworICAgICAqIGd0a19zaWduYWxfY29ubmVjdF9hZnRlcigpIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0IGFueXdheS4KKyAgICAgKiAoRm9ydHVuYXRlbHkuKQorICAgICAqLworI2lmbmRlZiBIQVZFX0dUSzIKKyAgICAvKiBibG9jayB0cmF2ZXJzYWwgcmVzdWx0aW5nIGZyb20gdGhvc2Uga2V5cyAqLworICAgIGlmIChldmVudC0+a2V5dmFsID09IEdES19MZWZ0CisJICAgIHx8IGV2ZW50LT5rZXl2YWwgPT0gR0RLX1JpZ2h0CisJICAgIHx8IGV2ZW50LT5rZXl2YWwgPT0gR0RLX3NwYWNlKQorCXJldHVybiBUUlVFOworI2VuZGlmCisKKyAgICAvKiBJdCB3b3VsZCBiZSBkZWxpZ2h0ZnVsbCBpZiBpdCB3aGVyZSBwb3NzaWJsZSB0byBkbyBzZWFyY2ggaGlzdG9yeQorICAgICAqIG9wZXJhdGlvbnMgb24gdGhlIEtfVVAgYW5kIEtfRE9XTiBrZXlzIGhlcmUuCisgICAgICovCisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICBzdGF0aWMgR3RrV2lkZ2V0ICoKK2NyZWF0ZV9pbWFnZV9idXR0b24oY29uc3QgY2hhciAqc3RvY2tfaWQsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworICAgIGNoYXJfdQkqdGV4dDsKKyAgICBHdGtXaWRnZXQJKmJveDsKKyAgICBHdGtXaWRnZXQJKmFsaWdubWVudDsKKyAgICBHdGtXaWRnZXQJKmJ1dHRvbjsKKworICAgIHRleHQgPSBDT05WRVJUX1RPX1VURjgoKGNoYXJfdSAqKWxhYmVsKTsKKworICAgIGJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgMyk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwKKwkJICAgICAgIGd0a19pbWFnZV9uZXdfZnJvbV9zdG9jayhzdG9ja19pZCwgR1RLX0lDT05fU0laRV9CVVRUT04pLAorCQkgICAgICAgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChib3gpLAorCQkgICAgICAgZ3RrX2xhYmVsX25ldygoY29uc3QgY2hhciAqKXRleHQpLAorCQkgICAgICAgRkFMU0UsIEZBTFNFLCAwKTsKKworICAgIENPTlZFUlRfVE9fVVRGOF9GUkVFKHRleHQpOworCisgICAgYWxpZ25tZW50ID0gZ3RrX2FsaWdubWVudF9uZXcoKGZsb2F0KTAuNSwgKGZsb2F0KTAuNSwKKwkJCQkJCSAgICAgIChmbG9hdCkwLjAsIChmbG9hdCkwLjApOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoYWxpZ25tZW50KSwgYm94KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKGFsaWdubWVudCk7CisKKyAgICBidXR0b24gPSBndGtfYnV0dG9uX25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoYnV0dG9uKSwgYWxpZ25tZW50KTsKKworICAgIHJldHVybiBidXR0b247Cit9CisKKy8qCisgKiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgZmluZF9yZXBsYWNlX2RpYWxvZ19jcmVhdGUoKSwgYW5kCisgKiBJJ2QgcmVhbGx5IGxpa2UgdG8ga2VlcCBpdCBhdCB0aGF0LglJbiBvdGhlciB3b3JkczogZG9uJ3Qgc3ByZWFkCisgKiB0aGlzIG5hc3R5IGhhY2sgYWxsIG92ZXIgdGhlIGNvZGUuICBUaGluayB0d2ljZS4KKyAqLworICAgIHN0YXRpYyBjb25zdCBjaGFyICoKK2NvbnZlcnRfbG9jYWxpemVkX21lc3NhZ2UoY2hhcl91ICoqYnVmZmVyLCBjb25zdCBjaGFyICptZXNzYWdlKQoreworICAgIGlmIChvdXRwdXRfY29udi52Y190eXBlID09IENPTlZfTk9ORSkKKwlyZXR1cm4gbWVzc2FnZTsKKworICAgIHZpbV9mcmVlKCpidWZmZXIpOworICAgICpidWZmZXIgPSBzdHJpbmdfY29udmVydCgmb3V0cHV0X2NvbnYsIChjaGFyX3UgKiltZXNzYWdlLCBOVUxMKTsKKworICAgIHJldHVybiAoY29uc3QgY2hhciAqKSpidWZmZXI7Cit9CisjZW5kaWYgLyogSEFWRV9HVEsyICovCisKKyAgICBzdGF0aWMgdm9pZAorZmluZF9yZXBsYWNlX2RpYWxvZ19jcmVhdGUoY2hhcl91ICphcmcsIGludCBkb19yZXBsYWNlKQoreworI2lmbmRlZiBIQVZFX0dUSzIKKyAgICBHdGtXaWRnZXQJKmZyYW1lOworI2VuZGlmCisgICAgR3RrV2lkZ2V0CSpoYm94OwkJLyogbWFpbiB0b3AgZG93biBib3ggKi8KKyAgICBHdGtXaWRnZXQJKmFjdGlvbmFyZWE7CisgICAgR3RrV2lkZ2V0CSp0YWJsZTsKKyAgICBHdGtXaWRnZXQJKnRtcDsKKyAgICBHdGtXaWRnZXQJKnZib3g7CisgICAgZ2Jvb2xlYW4Jc2Vuc2l0aXZlOworICAgIFNoYXJlZEZpbmRSZXBsYWNlICpmcmRwOworICAgIGNoYXJfdQkqZW50cnlfdGV4dDsKKyAgICBpbnQJCXd3b3JkID0gRkFMU0U7CisgICAgaW50CQltY2FzZSA9ICFwX2ljOworI2lmZGVmIEhBVkVfR1RLMgorICAgIGNoYXJfdQkqY29udl9idWZmZXIgPSBOVUxMOworIyAgIGRlZmluZSBDT05WKG1lc3NhZ2UpIGNvbnZlcnRfbG9jYWxpemVkX21lc3NhZ2UoJmNvbnZfYnVmZmVyLCAobWVzc2FnZSkpCisjZWxzZQorIyAgIGRlZmluZSBDT05WKG1lc3NhZ2UpIChtZXNzYWdlKQorI2VuZGlmCisKKyAgICBmcmRwID0gKGRvX3JlcGxhY2UpID8gKCZyZXBsX3dpZGdldHMpIDogKCZmaW5kX3dpZGdldHMpOworCisgICAgLyogR2V0IHRoZSBzZWFyY2ggc3RyaW5nIHRvIHVzZS4gKi8KKyAgICBlbnRyeV90ZXh0ID0gZ2V0X2ZpbmRfZGlhbG9nX3RleHQoYXJnLCAmd3dvcmQsICZtY2FzZSk7CisKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICBpZiAoZW50cnlfdGV4dCAhPSBOVUxMICYmIG91dHB1dF9jb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorICAgIHsKKwljaGFyX3UgKm9sZF90ZXh0ID0gZW50cnlfdGV4dDsKKwllbnRyeV90ZXh0ID0gc3RyaW5nX2NvbnZlcnQoJm91dHB1dF9jb252LCBlbnRyeV90ZXh0LCBOVUxMKTsKKwl2aW1fZnJlZShvbGRfdGV4dCk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIElmIHRoZSBkaWFsb2cgYWxyZWFkeSBleGlzdHMsIGp1c3QgcmFpc2UgaXQuCisgICAgICovCisgICAgaWYgKGZyZHAtPmRpYWxvZykKKyAgICB7CisjaWZuZGVmIEhBVkVfR1RLMgorCS8qIGFsd2F5cyBtYWtlIHRoZSBkaWFsb2cgYXBwZWFyIHdoZXJlIHlvdSB3YW50IGl0IGV2ZW4gaWYgdGhlIG1haW53aW4KKwkgKiBoYXMgbW92ZWQgLS0gZGJ2ICovCisJZ3VpX2d0a19wb3NpdGlvbl9pbl9wYXJlbnQoR1RLX1dJREdFVChndWkubWFpbndpbiksCisJCQkJICAgICAgR1RLX1dJREdFVChmcmRwLT5kaWFsb2cpLCBWV19QT1NfTU9VU0UpOworCWd1aV9ndGtfc3luY2hfZm9udHMoKTsKKworCWlmICghR1RLX1dJREdFVF9WSVNJQkxFKGZyZHAtPmRpYWxvZykpCisJeworCSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoZnJkcC0+d2hhdCk7CisJICAgIGd0a193aWRnZXRfc2hvdyhmcmRwLT5kaWFsb2cpOworCX0KKyNlbmRpZgorCWlmIChlbnRyeV90ZXh0ICE9IE5VTEwpCisJeworCSAgICBndGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKGZyZHAtPndoYXQpLCAoY2hhciAqKWVudHJ5X3RleHQpOworCSAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfc3RhdGUoR1RLX1RPR0dMRV9CVVRUT04oZnJkcC0+d3dvcmQpLAorCQkJCQkJCSAgICAgKGdib29sZWFuKXd3b3JkKTsKKwkgICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X3N0YXRlKEdUS19UT0dHTEVfQlVUVE9OKGZyZHAtPm1jYXNlKSwKKwkJCQkJCQkgICAgIChnYm9vbGVhbiltY2FzZSk7CisJfQorI2lmZGVmIEhBVkVfR1RLMgorCWd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZyZHAtPmRpYWxvZykpOworI2Vsc2UKKwlnZGtfd2luZG93X3JhaXNlKGZyZHAtPmRpYWxvZy0+d2luZG93KTsKKyNlbmRpZgorCXZpbV9mcmVlKGVudHJ5X3RleHQpOworCXJldHVybjsKKyAgICB9CisKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICBmcmRwLT5kaWFsb2cgPSBndGtfZGlhbG9nX25ldygpOworICAgIGd0a19kaWFsb2dfc2V0X2hhc19zZXBhcmF0b3IoR1RLX0RJQUxPRyhmcmRwLT5kaWFsb2cpLCBGQUxTRSk7CisgICAgZ3RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2ZvcihHVEtfV0lORE9XKGZyZHAtPmRpYWxvZyksIEdUS19XSU5ET1coZ3VpLm1haW53aW4pKTsKKyAgICBndGtfd2luZG93X3NldF9kZXN0cm95X3dpdGhfcGFyZW50KEdUS19XSU5ET1coZnJkcC0+ZGlhbG9nKSwgVFJVRSk7CisjZWxzZQorICAgIGZyZHAtPmRpYWxvZyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfRElBTE9HKTsKKyNlbmRpZgorCisgICAgaWYgKGRvX3JlcGxhY2UpCisgICAgeworI2lmbmRlZiBIQVZFX0dUSzIKKwlndGtfd2luZG93X3NldF93bWNsYXNzKEdUS19XSU5ET1coZnJkcC0+ZGlhbG9nKSwgInNlYXJjaHJlcGwiLCAiZ3ZpbSIpOworI2VuZGlmCisJZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhmcmRwLT5kaWFsb2cpLAorCQkJICAgICBDT05WKF8oIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWZuZGVmIEhBVkVfR1RLMgorCWd0a193aW5kb3dfc2V0X3dtY2xhc3MoR1RLX1dJTkRPVyhmcmRwLT5kaWFsb2cpLCAic2VhcmNoIiwgImd2aW0iKTsKKyNlbmRpZgorCWd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZnJkcC0+ZGlhbG9nKSwKKwkJCSAgICAgQ09OVihfKCJWSU0gLSBTZWFyY2guLi4iKSkpOworICAgIH0KKworI2lmbmRlZiBIQVZFX0dUSzIgLyogVXR0ZXIgY3JhY2suICBTaHVkZGVyLiAqLworICAgIGd0a193aWRnZXRfcmVhbGl6ZShmcmRwLT5kaWFsb2cpOworICAgIGdka193aW5kb3dfc2V0X2RlY29yYXRpb25zKGZyZHAtPmRpYWxvZy0+d2luZG93LAorCSAgICBHREtfREVDT1JfVElUTEUgfCBHREtfREVDT1JfQk9SREVSIHwgR0RLX0RFQ09SX1JFU0laRUgpOworICAgIGdka193aW5kb3dfc2V0X2Z1bmN0aW9ucyhmcmRwLT5kaWFsb2ctPndpbmRvdywKKwkgICAgR0RLX0ZVTkNfUkVTSVpFIHwgR0RLX0ZVTkNfTU9WRSk7CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dUSzIKKyAgICAvKiB0aGlzIG1ha2VzIGl0IGxvb2sgYmV0dGVyIG9uIE1vdGlmIHN0eWxlIHdpbmRvdyBtYW5hZ2VycyAqLworICAgIGZyYW1lID0gZ3RrX2ZyYW1lX25ldyhOVUxMKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGZyZHAtPmRpYWxvZyksIGZyYW1lKTsKKyNlbmRpZgorCisgICAgaGJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgMCk7CisjaWZkZWYgSEFWRV9HVEsyCisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoaGJveCksIDEwKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKEdUS19ESUFMT0coZnJkcC0+ZGlhbG9nKS0+dmJveCksIGhib3gpOworI2Vsc2UKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGZyYW1lKSwgaGJveCk7CisjZW5kaWYKKworICAgIGlmIChkb19yZXBsYWNlKQorCXRhYmxlID0gZ3RrX3RhYmxlX25ldygxMDI0LCA0LCBGQUxTRSk7CisgICAgZWxzZQorCXRhYmxlID0gZ3RrX3RhYmxlX25ldygxMDI0LCAzLCBGQUxTRSk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIHRhYmxlLCBUUlVFLCBUUlVFLCAwKTsKKyAgICBndGtfY29udGFpbmVyX2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKHRhYmxlKSwgNCk7CisKKyAgICB0bXAgPSBndGtfbGFiZWxfbmV3KENPTlYoXygiRmluZCB3aGF0OiIpKSk7CisgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyh0bXApLCAoZ2Zsb2F0KTAuMCwgKGdmbG9hdCkwLjUpOworICAgIGd0a190YWJsZV9hdHRhY2goR1RLX1RBQkxFKHRhYmxlKSwgdG1wLCAwLCAxLCAwLCAxLAorCQkgICAgIEdUS19GSUxMLCBHVEtfRVhQQU5ELCAyLCAyKTsKKyAgICBmcmRwLT53aGF0ID0gZ3RrX2VudHJ5X25ldygpOworICAgIHNlbnNpdGl2ZSA9IChlbnRyeV90ZXh0ICE9IE5VTEwgJiYgZW50cnlfdGV4dFswXSAhPSBOVUwpOworICAgIGlmIChlbnRyeV90ZXh0ICE9IE5VTEwpCisJZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShmcmRwLT53aGF0KSwgKGNoYXIgKillbnRyeV90ZXh0KTsKKyAgICBndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChmcmRwLT53aGF0KSwgImNoYW5nZWQiLAorCQkgICAgICAgR1RLX1NJR05BTF9GVU5DKGVudHJ5X2NoYW5nZWRfY2IpLCBmcmRwLT5kaWFsb2cpOworICAgIGd0a19zaWduYWxfY29ubmVjdF9hZnRlcihHVEtfT0JKRUNUKGZyZHAtPndoYXQpLCAia2V5X3ByZXNzX2V2ZW50IiwKKwkJCQkgR1RLX1NJR05BTF9GVU5DKGZpbmRfa2V5X3ByZXNzX2V2ZW50KSwKKwkJCQkgKGdwb2ludGVyKSBmcmRwKTsKKyAgICBndGtfdGFibGVfYXR0YWNoKEdUS19UQUJMRSh0YWJsZSksIGZyZHAtPndoYXQsIDEsIDEwMjQsIDAsIDEsCisJCSAgICAgR1RLX0VYUEFORCB8IEdUS19GSUxMLCBHVEtfRVhQQU5ELCAyLCAyKTsKKworICAgIGlmIChkb19yZXBsYWNlKQorICAgIHsKKwl0bXAgPSBndGtfbGFiZWxfbmV3KENPTlYoXygiUmVwbGFjZSB3aXRoOiIpKSk7CisJZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyh0bXApLCAoZ2Zsb2F0KTAuMCwgKGdmbG9hdCkwLjUpOworCWd0a190YWJsZV9hdHRhY2goR1RLX1RBQkxFKHRhYmxlKSwgdG1wLCAwLCAxLCAxLCAyLAorCQkJIEdUS19GSUxMLCBHVEtfRVhQQU5ELCAyLCAyKTsKKwlmcmRwLT53aXRoID0gZ3RrX2VudHJ5X25ldygpOworCWd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGZyZHAtPndpdGgpLCAiYWN0aXZhdGUiLAorCQkJICAgR1RLX1NJR05BTF9GVU5DKGZpbmRfcmVwbGFjZV9jYiksCisJCQkgICBHSU5UX1RPX1BPSU5URVIoRlJEX1JfRklORE5FWFQpKTsKKwlndGtfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIoR1RLX09CSkVDVChmcmRwLT53aXRoKSwgImtleV9wcmVzc19ldmVudCIsCisJCQkJIEdUS19TSUdOQUxfRlVOQyhmaW5kX2tleV9wcmVzc19ldmVudCksCisJCQkJIChncG9pbnRlcikgZnJkcCk7CisJZ3RrX3RhYmxlX2F0dGFjaChHVEtfVEFCTEUodGFibGUpLCBmcmRwLT53aXRoLCAxLCAxMDI0LCAxLCAyLAorCQkJIEdUS19FWFBBTkQgfCBHVEtfRklMTCwgR1RLX0VYUEFORCwgMiwgMik7CisKKwkvKgorCSAqIE1ha2UgdGhlIGVudHJ5IGFjdGl2YXRpb24gb25seSBjaGFuZ2UgdGhlIGlucHV0IGZvY3VzIG9udG8gdGhlCisJICogd2l0aCBpdGVtLgorCSAqLworCWd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGZyZHAtPndoYXQpLCAiYWN0aXZhdGUiLAorCQkJICAgR1RLX1NJR05BTF9GVU5DKGVudHJ5X2FjdGl2YXRlX2NiKSwgZnJkcC0+d2l0aCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBNYWtlIHRoZSBlbnRyeSBhY3RpdmF0aW9uIGRvIHRoZSBzZWFyY2guCisJICovCisJZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoZnJkcC0+d2hhdCksICJhY3RpdmF0ZSIsCisJCQkgICBHVEtfU0lHTkFMX0ZVTkMoZmluZF9yZXBsYWNlX2NiKSwKKwkJCSAgIEdJTlRfVE9fUE9JTlRFUihGUkRfRklORE5FWFQpKTsKKyAgICB9CisKKyAgICAvKiB3aG9sZSB3b3JkIG9ubHkgYnV0dG9uICovCisgICAgZnJkcC0+d3dvcmQgPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX2xhYmVsKENPTlYoXygiTWF0Y2ggd2hvbGUgd29yZCBvbmx5IikpKTsKKyAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfc3RhdGUoR1RLX1RPR0dMRV9CVVRUT04oZnJkcC0+d3dvcmQpLAorCQkJCQkJCShnYm9vbGVhbil3d29yZCk7CisgICAgaWYgKGRvX3JlcGxhY2UpCisJZ3RrX3RhYmxlX2F0dGFjaChHVEtfVEFCTEUodGFibGUpLCBmcmRwLT53d29yZCwgMCwgMTAyMywgMiwgMywKKwkJCSBHVEtfRklMTCwgR1RLX0VYUEFORCwgMiwgMik7CisgICAgZWxzZQorCWd0a190YWJsZV9hdHRhY2goR1RLX1RBQkxFKHRhYmxlKSwgZnJkcC0+d3dvcmQsIDAsIDEwMjMsIDEsIDIsCisJCQkgR1RLX0ZJTEwsIEdUS19FWFBBTkQsIDIsIDIpOworCisgICAgLyogbWF0Y2ggY2FzZSBidXR0b24gKi8KKyAgICBmcmRwLT5tY2FzZSA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhfbGFiZWwoQ09OVihfKCJNYXRjaCBjYXNlIikpKTsKKyAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfc3RhdGUoR1RLX1RPR0dMRV9CVVRUT04oZnJkcC0+bWNhc2UpLAorCQkJCQkJCSAgICAgKGdib29sZWFuKW1jYXNlKTsKKyAgICBpZiAoZG9fcmVwbGFjZSkKKwlndGtfdGFibGVfYXR0YWNoKEdUS19UQUJMRSh0YWJsZSksIGZyZHAtPm1jYXNlLCAwLCAxMDIzLCAzLCA0LAorCQkJIEdUS19GSUxMLCBHVEtfRVhQQU5ELCAyLCAyKTsKKyAgICBlbHNlCisJZ3RrX3RhYmxlX2F0dGFjaChHVEtfVEFCTEUodGFibGUpLCBmcmRwLT5tY2FzZSwgMCwgMTAyMywgMiwgMywKKwkJCSBHVEtfRklMTCwgR1RLX0VYUEFORCwgMiwgMik7CisKKyAgICB0bXAgPSBndGtfZnJhbWVfbmV3KENPTlYoXygiRGlyZWN0aW9uIikpKTsKKyAgICBpZiAoZG9fcmVwbGFjZSkKKwlndGtfdGFibGVfYXR0YWNoKEdUS19UQUJMRSh0YWJsZSksIHRtcCwgMTAyMywgMTAyNCwgMiwgNCwKKwkJCSBHVEtfRklMTCwgR1RLX0ZJTEwsIDIsIDIpOworICAgIGVsc2UKKwlndGtfdGFibGVfYXR0YWNoKEdUS19UQUJMRSh0YWJsZSksIHRtcCwgMTAyMywgMTAyNCwgMSwgMywKKwkJCSBHVEtfRklMTCwgR1RLX0ZJTEwsIDIsIDIpOworICAgIHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApOworICAgIGd0a19jb250YWluZXJfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIodmJveCksIDApOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIodG1wKSwgdmJveCk7CisKKyAgICAvKiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucyAqLworICAgIGZyZHAtPnVwID0gZ3RrX3JhZGlvX2J1dHRvbl9uZXdfd2l0aF9sYWJlbChOVUxMLCBDT05WKF8oIlVwIikpKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgZnJkcC0+dXAsIFRSVUUsIFRSVUUsIDApOworICAgIGZyZHAtPmRvd24gPSBndGtfcmFkaW9fYnV0dG9uX25ld193aXRoX2xhYmVsKAorCQkJZ3RrX3JhZGlvX2J1dHRvbl9ncm91cChHVEtfUkFESU9fQlVUVE9OKGZyZHAtPnVwKSksCisJCQlDT05WKF8oIkRvd24iKSkpOworICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9zdGF0ZShHVEtfVE9HR0xFX0JVVFRPTihmcmRwLT5kb3duKSwgVFJVRSk7CisjaWZkZWYgSEFWRV9HVEsyCisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIodmJveCksIDIpOworI2VuZGlmCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGZyZHAtPmRvd24sIFRSVUUsIFRSVUUsIDApOworCisgICAgLyogdmJveCB0byBob2xkIHRoZSBhY3Rpb24gYnV0dG9ucyAqLworICAgIGFjdGlvbmFyZWEgPSBndGtfdmJ1dHRvbl9ib3hfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihhY3Rpb25hcmVhKSwgMik7CisjaWZuZGVmIEhBVkVfR1RLMgorICAgIGlmIChkb19yZXBsYWNlKQorICAgIHsKKwlndGtfYnV0dG9uX2JveF9zZXRfbGF5b3V0KEdUS19CVVRUT05fQk9YKGFjdGlvbmFyZWEpLAorCQkJCSAgR1RLX0JVVFRPTkJPWF9FTkQpOworCWd0a19idXR0b25fYm94X3NldF9zcGFjaW5nKEdUS19CVVRUT05fQk9YKGFjdGlvbmFyZWEpLCAwKTsKKyAgICB9CisjZW5kaWYKKyAgICBndGtfYm94X3BhY2tfZW5kKEdUS19CT1goaGJveCksIGFjdGlvbmFyZWEsIEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICAvKiAnRmluZCBOZXh0JyBidXR0b24gKi8KKyNpZmRlZiBIQVZFX0dUSzIKKyAgICBmcmRwLT5maW5kID0gY3JlYXRlX2ltYWdlX2J1dHRvbihHVEtfU1RPQ0tfRklORCwgXygiRmluZCBOZXh0IikpOworI2Vsc2UKKyAgICBmcmRwLT5maW5kID0gZ3RrX2J1dHRvbl9uZXdfd2l0aF9sYWJlbChfKCJGaW5kIE5leHQiKSk7CisjZW5kaWYKKyAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoZnJkcC0+ZmluZCwgc2Vuc2l0aXZlKTsKKworICAgIGd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGZyZHAtPmZpbmQpLCAiY2xpY2tlZCIsCisJCSAgICAgICBHVEtfU0lHTkFMX0ZVTkMoZmluZF9yZXBsYWNlX2NiKSwKKwkJICAgICAgIChkb19yZXBsYWNlKSA/IEdJTlRfVE9fUE9JTlRFUihGUkRfUl9GSU5ETkVYVCkKKwkJCQkgICAgOiBHSU5UX1RPX1BPSU5URVIoRlJEX0ZJTkRORVhUKSk7CisKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyhmcmRwLT5maW5kLCBHVEtfQ0FOX0RFRkFVTFQpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGFjdGlvbmFyZWEpLCBmcmRwLT5maW5kLCBGQUxTRSwgRkFMU0UsIDApOworICAgIGd0a193aWRnZXRfZ3JhYl9kZWZhdWx0KGZyZHAtPmZpbmQpOworCisgICAgaWYgKGRvX3JlcGxhY2UpCisgICAgeworCS8qICdSZXBsYWNlJyBidXR0b24gKi8KKyNpZmRlZiBIQVZFX0dUSzIKKwlmcmRwLT5yZXBsYWNlID0gY3JlYXRlX2ltYWdlX2J1dHRvbihHVEtfU1RPQ0tfQ09OVkVSVCwgXygiUmVwbGFjZSIpKTsKKyNlbHNlCisJZnJkcC0+cmVwbGFjZSA9IGd0a19idXR0b25fbmV3X3dpdGhfbGFiZWwoXygiUmVwbGFjZSIpKTsKKyNlbmRpZgorCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShmcmRwLT5yZXBsYWNlLCBzZW5zaXRpdmUpOworCUdUS19XSURHRVRfU0VUX0ZMQUdTKGZyZHAtPnJlcGxhY2UsIEdUS19DQU5fREVGQVVMVCk7CisJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYWN0aW9uYXJlYSksIGZyZHAtPnJlcGxhY2UsIEZBTFNFLCBGQUxTRSwgMCk7CisJZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoZnJkcC0+cmVwbGFjZSksICJjbGlja2VkIiwKKwkJCSAgIEdUS19TSUdOQUxfRlVOQyhmaW5kX3JlcGxhY2VfY2IpLAorCQkJICAgR0lOVF9UT19QT0lOVEVSKEZSRF9SRVBMQUNFKSk7CisKKwkvKiAnUmVwbGFjZSBBbGwnIGJ1dHRvbiAqLworI2lmZGVmIEhBVkVfR1RLMgorCWZyZHAtPmFsbCA9IGNyZWF0ZV9pbWFnZV9idXR0b24oR1RLX1NUT0NLX0NPTlZFUlQsIF8oIlJlcGxhY2UgQWxsIikpOworI2Vsc2UKKwlmcmRwLT5hbGwgPSBndGtfYnV0dG9uX25ld193aXRoX2xhYmVsKF8oIlJlcGxhY2UgQWxsIikpOworI2VuZGlmCisJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGZyZHAtPmFsbCwgc2Vuc2l0aXZlKTsKKwlHVEtfV0lER0VUX1NFVF9GTEFHUyhmcmRwLT5hbGwsIEdUS19DQU5fREVGQVVMVCk7CisJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYWN0aW9uYXJlYSksIGZyZHAtPmFsbCwgRkFMU0UsIEZBTFNFLCAwKTsKKwlndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChmcmRwLT5hbGwpLCAiY2xpY2tlZCIsCisJCQkgICBHVEtfU0lHTkFMX0ZVTkMoZmluZF9yZXBsYWNlX2NiKSwKKwkJCSAgIEdJTlRfVE9fUE9JTlRFUihGUkRfUkVQTEFDRUFMTCkpOworICAgIH0KKworICAgIC8qICdDYW5jZWwnIGJ1dHRvbiAqLworI2lmZGVmIEhBVkVfR1RLMgorICAgIHRtcCA9IGd0a19idXR0b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0NMT1NFKTsKKyNlbHNlCisgICAgdG1wID0gZ3RrX2J1dHRvbl9uZXdfd2l0aF9sYWJlbChfKCJDYW5jZWwiKSk7CisjZW5kaWYKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh0bXAsIEdUS19DQU5fREVGQVVMVCk7CisgICAgZ3RrX2JveF9wYWNrX2VuZChHVEtfQk9YKGFjdGlvbmFyZWEpLCB0bXAsIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3NpZ25hbF9jb25uZWN0X29iamVjdChHVEtfT0JKRUNUKHRtcCksCisJCQkgICAgICAiY2xpY2tlZCIsIEdUS19TSUdOQUxfRlVOQyhndGtfd2lkZ2V0X2hpZGUpLAorCQkJICAgICAgR1RLX09CSkVDVChmcmRwLT5kaWFsb2cpKTsKKyAgICBndGtfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KEdUS19PQkpFQ1QoZnJkcC0+ZGlhbG9nKSwKKwkJCSAgICAgICJkZWxldGVfZXZlbnQiLCBHVEtfU0lHTkFMX0ZVTkMoZ3RrX3dpZGdldF9oaWRlX29uX2RlbGV0ZSksCisJCQkgICAgICBHVEtfT0JKRUNUKGZyZHAtPmRpYWxvZykpOworCisgICAgdG1wID0gZ3RrX3ZzZXBhcmF0b3JfbmV3KCk7CisjaWZkZWYgSEFWRV9HVEsyCisgICAgZ3RrX2JveF9wYWNrX2VuZChHVEtfQk9YKGhib3gpLCB0bXAsIEZBTFNFLCBGQUxTRSwgMTApOworI2Vsc2UKKyAgICBndGtfYm94X3BhY2tfZW5kKEdUS19CT1goaGJveCksIHRtcCwgRkFMU0UsIFRSVUUsIDApOworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9HVEsyCisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGZyZHAtPndoYXQpOworCisgICAgLyogc2hvdyB0aGUgZnJhbWUgYW5kIHJlYWxpemUgdGhlIGZyZHAtPmRpYWxvZyB0aGlzIGdpdmVzIHVzIGEgd2luZG93IHNpemUKKyAgICAgKiByZXF1ZXN0IHRoYXQgd2UnbGwgdXNlIHRvIHBvc2l0aW9uIHRoZSB3aW5kb3cgd2l0aGluIHRoZSBib3VuZGFyeSBvZgorICAgICAqIHRoZSBtYWlud2luIC0tZGJ2ICovCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChmcmFtZSk7CisgICAgZ3VpX2d0a19wb3NpdGlvbl9pbl9wYXJlbnQoR1RLX1dJREdFVChndWkubWFpbndpbiksCisJCQkJICAgICAgR1RLX1dJREdFVChmcmRwLT5kaWFsb2cpLCBWV19QT1NfTU9VU0UpOworICAgIGd1aV9ndGtfc3luY2hfZm9udHMoKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKGZyZHAtPmRpYWxvZyk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfR1RLMgorICAgIC8qIFN1cHByZXNzIGF1dG9tYXRpYyBzaG93IG9mIHRoZSB1bnVzZWQgYWN0aW9uIGFyZWEgKi8KKyAgICBndGtfd2lkZ2V0X2hpZGUoR1RLX0RJQUxPRyhmcmRwLT5kaWFsb2cpLT5hY3Rpb25fYXJlYSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChoYm94KTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZnJkcC0+ZGlhbG9nKTsKKyNlbmRpZgorCisgICAgdmltX2ZyZWUoZW50cnlfdGV4dCk7CisjaWZkZWYgSEFWRV9HVEsyCisgICAgdmltX2ZyZWUoY29udl9idWZmZXIpOworI2VuZGlmCisjdW5kZWYgQ09OVgorfQorCisgICAgdm9pZAorZ3VpX21jaF9maW5kX2RpYWxvZyhleGFyZ19UICplYXApCit7CisgICAgaWYgKGd1aS5pbl91c2UpCisJZmluZF9yZXBsYWNlX2RpYWxvZ19jcmVhdGUoZWFwLT5hcmcsIEZBTFNFKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfcmVwbGFjZV9kaWFsb2coZXhhcmdfVCAqZWFwKQoreworICAgIGlmIChndWkuaW5fdXNlKQorCWZpbmRfcmVwbGFjZV9kaWFsb2dfY3JlYXRlKGVhcC0+YXJnLCBUUlVFKTsKK30KKworCisjaWYgIWRlZmluZWQoSEFWRV9HVEsyKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFN5bmNocm9uaXplIGFsbCBndWkgZWxlbWVudHMsIHdoaWNoIGFyZSBkZXBlbmRhbnQgdXBvbiB0aGUKKyAqIG1haW4gdGV4dCBmb250IHVzZWQuIFRob3NlIGFyZSBpbiBlc3AuIHRoZSBmaW5kL3JlcGxhY2UgZGlhbG9ncy4KKyAqIElmIHlvdSBkb24ndCB1bmRlcnN0YW5kIHdoeSB0aGlzIHNob3VsZCBiZSBuZWVkZWQsIHBsZWFzZSB0cnkgdG8KKyAqIHNlYXJjaCBmb3IgInBpxJnFm8SHIiBpbiBpc284ODU5LTIuCisgKgorICogKDxkYW5pZWxrPiBJIGNvbnZlcnRlZCB0aGUgY29tbWVudCBhYm92ZSB0byBVVEYtOCB0byBwdXQKKyAqICBhIHN0b3BwZXIgdG8gdGhlIGVuY29kaW5nIG1lc3MuICBGb3JnaXZlIG1lIDopCisgKgorICogT2Jzb2xldGUgd2l0aCBHVEsyLgorICovCisgICAgdm9pZAorZ3VpX2d0a19zeW5jaF9mb250cyh2b2lkKQoreworICAgIFNoYXJlZEZpbmRSZXBsYWNlICpmcmRwOworICAgIGludCBkb19yZXBsYWNlOworCisgICAgLyogT0sgdGhpcyBsb29wIGlzIGEgYml0IHRyaWNreS4uLiAqLworICAgIGZvciAoZG9fcmVwbGFjZSA9IDA7IGRvX3JlcGxhY2UgPD0gMTsgKytkb19yZXBsYWNlKQorICAgIHsKKwlmcmRwID0gKGRvX3JlcGxhY2UpID8gKCZyZXBsX3dpZGdldHMpIDogKCZmaW5kX3dpZGdldHMpOworCWlmIChmcmRwLT5kaWFsb2cpCisJeworCSAgICBHdGtTdHlsZSAqc3R5bGU7CisKKwkgICAgLyogc3luY2ggdGhlIGZvbnQgd2l0aCB3aGF0cyB1c2VkIGJ5IHRoZSB0ZXh0IGl0c2VsZiAqLworCSAgICBzdHlsZSA9IGd0a19zdHlsZV9jb3B5KGd0a193aWRnZXRfZ2V0X3N0eWxlKGZyZHAtPndoYXQpKTsKKwkgICAgZ2RrX2ZvbnRfdW5yZWYoc3R5bGUtPmZvbnQpOworIyBpZmRlZiBGRUFUX1hGT05UU0VUCisJICAgIGlmIChndWkuZm9udHNldCAhPSBOT0ZPTlRTRVQpCisJCXN0eWxlLT5mb250ID0gZ3VpLmZvbnRzZXQ7CisJICAgIGVsc2UKKyMgZW5kaWYKKwkJc3R5bGUtPmZvbnQgPSBndWkubm9ybV9mb250OworCSAgICBnZGtfZm9udF9yZWYoc3R5bGUtPmZvbnQpOworCSAgICBndGtfd2lkZ2V0X3NldF9zdHlsZShmcmRwLT53aGF0LCBzdHlsZSk7CisJICAgIGd0a19zdHlsZV91bnJlZihzdHlsZSk7CisJICAgIGlmIChkb19yZXBsYWNlKQorCSAgICB7CisJCXN0eWxlID0gZ3RrX3N0eWxlX2NvcHkoZ3RrX3dpZGdldF9nZXRfc3R5bGUoZnJkcC0+d2l0aCkpOworCQlnZGtfZm9udF91bnJlZihzdHlsZS0+Zm9udCk7CisjIGlmZGVmIEZFQVRfWEZPTlRTRVQKKwkJaWYgKGd1aS5mb250c2V0ICE9IE5PRk9OVFNFVCkKKwkJICAgIHN0eWxlLT5mb250ID0gZ3VpLmZvbnRzZXQ7CisJCWVsc2UKKyMgZW5kaWYKKwkJICAgIHN0eWxlLT5mb250ID0gZ3VpLm5vcm1fZm9udDsKKwkJZ2RrX2ZvbnRfcmVmKHN0eWxlLT5mb250KTsKKwkJZ3RrX3dpZGdldF9zZXRfc3R5bGUoZnJkcC0+d2l0aCwgc3R5bGUpOworCQlndGtfc3R5bGVfdW5yZWYoc3R5bGUpOworCSAgICB9CisJfQorICAgIH0KK30KKyNlbmRpZiAvKiAhSEFWRV9HVEsyICovCisKKworLyoKKyAqIENhbGxiYWNrIGZvciBhY3Rpb25zIG9mIHRoZSBmaW5kIGFuZCByZXBsYWNlIGRpYWxvZ3MKKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZpbmRfcmVwbGFjZV9jYihHdGtXaWRnZXQgKndpZGdldCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpbnQJCQlmbGFnczsKKyAgICBjaGFyX3UJCSpmaW5kX3RleHQ7CisgICAgY2hhcl91CQkqcmVwbF90ZXh0OworICAgIGdib29sZWFuCQlkaXJlY3Rpb25fZG93bjsKKyAgICBTaGFyZWRGaW5kUmVwbGFjZQkqc2ZyOworICAgIGludAkJCXJjOworCisgICAgZmxhZ3MgPSAoaW50KShsb25nKWRhdGE7CSAgICAvKiBhdm9pZCBhIGxpbnQgd2FybmluZyBoZXJlICovCisKKyAgICAvKiBHZXQgdGhlIHNlYXJjaC9yZXBsYWNlIHN0cmluZ3MgZnJvbSB0aGUgZGlhbG9nICovCisgICAgaWYgKGZsYWdzID09IEZSRF9GSU5ETkVYVCkKKyAgICB7CisJcmVwbF90ZXh0ID0gTlVMTDsKKwlzZnIgPSAmZmluZF93aWRnZXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXJlcGxfdGV4dCA9IChjaGFyX3UgKilndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKHJlcGxfd2lkZ2V0cy53aXRoKSk7CisJc2ZyID0gJnJlcGxfd2lkZ2V0czsKKyAgICB9CisKKyAgICBmaW5kX3RleHQgPSAoY2hhcl91ICopZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShzZnItPndoYXQpKTsKKyAgICBkaXJlY3Rpb25fZG93biA9IEdUS19UT0dHTEVfQlVUVE9OKHNmci0+ZG93biktPmFjdGl2ZTsKKworICAgIGlmIChHVEtfVE9HR0xFX0JVVFRPTihzZnItPnd3b3JkKS0+YWN0aXZlKQorCWZsYWdzIHw9IEZSRF9XSE9MRV9XT1JEOworICAgIGlmIChHVEtfVE9HR0xFX0JVVFRPTihzZnItPm1jYXNlKS0+YWN0aXZlKQorCWZsYWdzIHw9IEZSRF9NQVRDSF9DQVNFOworCisjaWZkZWYgSEFWRV9HVEsyCisgICAgcmVwbF90ZXh0ID0gQ09OVkVSVF9GUk9NX1VURjgocmVwbF90ZXh0KTsKKyAgICBmaW5kX3RleHQgPSBDT05WRVJUX0ZST01fVVRGOChmaW5kX3RleHQpOworI2VuZGlmCisgICAgcmMgPSBndWlfZG9fZmluZHJlcGwoZmxhZ3MsIGZpbmRfdGV4dCwgcmVwbF90ZXh0LCBkaXJlY3Rpb25fZG93bik7CisjaWZkZWYgSEFWRV9HVEsyCisgICAgQ09OVkVSVF9GUk9NX1VURjhfRlJFRShyZXBsX3RleHQpOworICAgIENPTlZFUlRfRlJPTV9VVEY4X0ZSRUUoZmluZF90ZXh0KTsKKyNlbmRpZgorCisgICAgaWYgKHJjICYmIGd0a19tYWluX2xldmVsKCkgPiAwKQorCWd0a19tYWluX3F1aXQoKTsgLyogbWFrZSBzdXJlIGNtZCB3aWxsIGJlIGhhbmRsZWQgaW1tZWRpYXRlbHkgKi8KK30KKworLyogb3VyIHVzdWFsIGNhbGxiYWNrIGZ1bmN0aW9uICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZW50cnlfYWN0aXZhdGVfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQoZGF0YSkpOworfQorCisvKgorICogU3luY2luZyB0aGUgZmluZC9yZXBsYWNlIGRpYWxvZ3Mgb24gdGhlIGZseSBpcyB1dHRlcmx5IHVzZWxlc3MgY3JhY2ssCisgKiBhbmQgY2F1c2VzIG5vdGhpbmcgYnV0IHByb2JsZW1zLiAgUGxlYXNlIHRlbGwgbWUgYSB1c2UgY2FzZSBmb3Igd2hpY2gKKyAqIHlvdSdkIG5lZWQgYm90aCBhIGZpbmQgZGlhbG9nIGFuZCBhIGZpbmQvcmVwbGFjZSBvbmUgYXQgdGhlIHNhbWUgdGltZSwKKyAqIHdpdGhvdXQgYmVpbmcgYWJsZSB0byBhY3R1YWxseSB1c2UgdGhlbSBzZXBhcmF0ZWx5IHNpbmNlIHRoZXkncmUgc3luY2luZworICogYWxsIHRoZSB0aW1lLiAgSSBkb24ndCB0aGluayBpdCdzIHdvcnRod2hpbGUgdG8gZml4IHRoaXMgbm9uc2Vuc2UsCisgKiBwYXJ0aWN1bGFybHkgZXZpbCBpbmNhcm5hdGlvbiBvZiBicmFpbmRlYWRuZXNzLCB3aGF0ZXZlcjsgSSdkIG11Y2ggcmF0aGVyCisgKiBzZWUgaXQgZXh0aW5ndWlzaGVkIGZyb20gdGhpcyBwbGFuZXQuICBUaGFua3MgZm9yIGxpc3RlbmluZy4gIFNvcnJ5LgorICovCisgICAgc3RhdGljIHZvaWQKK2VudHJ5X2NoYW5nZWRfY2IoR3RrV2lkZ2V0ICogZW50cnksIEd0a1dpZGdldCAqIGRpYWxvZykKK3sKKyAgICBjb25zdCBnY2hhcgkqZW50cnlfdGV4dDsKKyAgICBnYm9vbGVhbglub25lbXB0eTsKKworICAgIGVudHJ5X3RleHQgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGVudHJ5KSk7CisKKyAgICBpZiAoIWVudHJ5X3RleHQpCisJcmV0dXJuOwkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKworICAgIG5vbmVtcHR5ID0gKGVudHJ5X3RleHRbMF0gIT0gJ1wwJyk7CisKKyAgICBpZiAoZGlhbG9nID09IGZpbmRfd2lkZ2V0cy5kaWFsb2cpCisgICAgeworCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShmaW5kX3dpZGdldHMuZmluZCwgbm9uZW1wdHkpOworICAgIH0KKworICAgIGlmIChkaWFsb2cgPT0gcmVwbF93aWRnZXRzLmRpYWxvZykKKyAgICB7CisJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHJlcGxfd2lkZ2V0cy5maW5kLCBub25lbXB0eSk7CisJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHJlcGxfd2lkZ2V0cy5yZXBsYWNlLCBub25lbXB0eSk7CisJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHJlcGxfd2lkZ2V0cy5hbGwsIG5vbmVtcHR5KTsKKyAgICB9Cit9CisKKy8qCisgKiAiOmhlbHBmaW5kIgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitleF9oZWxwZmluZChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIC8qIFRoaXMgd2lsbCBmYWlsIHdoZW4gbWVudXMgYXJlIG5vdCBsb2FkZWQuICBXZWxsLCBpdCdzIG9ubHkgZm9yCisgICAgICogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW55d2F5LiAqLworICAgIGRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikiZW1lbnUgVG9vbEJhci5GaW5kSGVscCIpOworfQorCisjaWYgIWRlZmluZWQoSEFWRV9HVEsyKSB8fCBkZWZpbmVkKFBST1RPKSAvKiBDcmFjayBjcmFjayBjcmFjay4gIEJycnJyLiAqLworCisvKiAgZ3VpX2d0a19wb3NpdGlvbl9pbl9wYXJlbnQKKyAqCisgKiAgdGhpcyBmdW5jdGlvbiBjYXVzZXMgYSBjaGlsZCB3aW5kb3cgdG8gYmUgcGxhY2VkIHdpdGhpbiB0aGUgYm91bmRhcnkgb2YKKyAqICB0aGUgcGFyZW50IChtYWlud2luKSB3aW5kb3cuCisgKgorICogIHlvdSBjYW4gc3BlY2lmeSB3aGVyZSB0aGUgd2luZG93IHdpbGwgYmUgcG9zaXRpb25lZCBieSB0aGUgdGhpcmQgYXJndW1lbnQKKyAqICAoZGVmaW5lZCBpbiBndWkuaCk6CisgKglWV19QT1NfQ0VOVEVSCQlhdCBjZW50ZXIgb2YgcGFyZW50IHdpbmRvdworICoJVldfUE9TX01PVVNFCQljZW50ZXIgb2YgY2hpbGQgYXQgbW91c2UgcG9zaXRpb24KKyAqCVZXX1BPU19UT1BfQ0VOVEVSCXRvcCBvZiBjaGlsZCBhdCB0b3Agb2YgcGFyZW50IGNlbnRlcmVkCisgKgkJCQlob3Jpem9udGFsbHkgYWJvdXQgdGhlIG1vdXNlLgorICoKKyAqICBOT1RFOiBmb3IgdGhpcyBmdW5jdGlvbiB0byBhY3QgYXMgZGVzaXJlZCB0aGUgY2hpbGQgd2luZG93IG11c3QgaGF2ZSBhCisgKgkgIHdpbmRvdyBzaXplIHJlcXVlc3RlZC4gIHRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBwYWNraW5nL3BsYWNpbmcKKyAqCSAgY2hpbGQgd2lkZ2V0cyBvbnRvIGEgZ3RrX2ZyYW1lIHdpZGdldCByYXRoZXIgdGhhbiB0aGUgZ3RrX3dpbmRvdworICoJICB3aWRnZXQuLi4KKyAqCisgKiAgYnJlbnQgLS0gZGJ2CisgKi8KKyAgICB2b2lkCitndWlfZ3RrX3Bvc2l0aW9uX2luX3BhcmVudCgKKwlHdGtXaWRnZXQJKnBhcmVudCwKKwlHdGtXaWRnZXQJKmNoaWxkLAorCWd1aV93aW5fcG9zX1QJd2hlcmUpCit7CisgICAgR3RrUmVxdWlzaXRpb24JY19zaXplOworICAgIGdpbnQJCXhQbSwgeVBtOworICAgIGdpbnQJCXhQLCB5UCwgd1AsIGhQLCBwb3NfeCwgcG9zX3k7CisKKyAgICAvKiBtYWtlIHN1cmUgdGhlIGNoaWxkIHdpZGdldCBpcyBzZXQgdXAgdGhlbiBnZXQgaXRzIHNpemUuICovCisgICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QoY2hpbGQsICZjX3NpemUpOworCisgICAgLyogZ2V0IG9yaWdpbiBhbmQgc2l6ZSBvZiBwYXJlbnQgd2luZG93ICovCisgICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKChHZGtXaW5kb3cgKikocGFyZW50LT53aW5kb3cpLCAmeFAsICZ5UCk7CisgICAgZ2RrX3dpbmRvd19nZXRfc2l6ZSgoR2RrV2luZG93ICopKHBhcmVudC0+d2luZG93KSwgJndQLCAmaFApOworCisgICAgaWYgKGNfc2l6ZS53aWR0aCA+IHdQIHx8IGNfc2l6ZS5oZWlnaHQgPiBoUCkKKyAgICB7CisJLyogZG9oISBtYXliZSB0aGUgdXNlciBzaG91bGQgY29uc2lkZXIgZ2l2aW5nIGdWaW0gYSBsaXR0bGUgbW9yZQorCSAqIHNjcmVlbiByZWFsIGVzdGF0ZSAqLworCWd0a193aWRnZXRfc2V0X3Vwb3NpdGlvbihjaGlsZCAsIHhQICsgMiAsIHlQICsgMik7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmICh3aGVyZSA9PSBWV19QT1NfTU9VU0UpCisgICAgeworCS8qIHBvc2l0aW9uIHdpbmRvdyBhdCBtb3VzZSBwb2ludGVyICovCisJZ3RrX3dpZGdldF9nZXRfcG9pbnRlcihwYXJlbnQsICZ4UG0sICZ5UG0pOworCXBvc194ID0geFAgKyB4UG0gLSAoY19zaXplLndpZHRoKSAvIDI7CisJcG9zX3kgPSB5UCArIHlQbSAtIChjX3NpemUuaGVpZ2h0KSAvIDI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogc2V0IGNoaWxkIHggb3JpZ2luIHNvIGl0IGlzIGluIGNlbnRlciBvZiBWaW0gd2luZG93ICovCisJcG9zX3ggPSAgeFAgKyAod1AgLSBjX3NpemUud2lkdGgpIC8gMjsKKworCWlmICh3aGVyZSA9PSBWV19QT1NfVE9QX0NFTlRFUikKKwkgICAgcG9zX3kgPSB5UCArIDI7CisJZWxzZQorCSAgICAvKiB3aGVyZSA9PSBWV19QT1NfQ0VOVEVSICovCisJICAgIHBvc195ID0geVAgKyAoaFAgLSBjX3NpemUuaGVpZ2h0KSAvIDI7CisgICAgfQorCisgICAgLyogbm93LCBtYWtlIHN1cmUgdGhlIHdpbmRvdyB3aWxsIGJlIGluc2lkZSB0aGUgVmltIHdpbmRvdy4uLiAqLworICAgIGlmIChwb3NfeCA8IHhQKQorCXBvc194ID0geFAgKyAyOworICAgIGlmIChwb3NfeSA8IHlQKQorCXBvc195ID0geVAgKyAyOworICAgIGlmICgocG9zX3ggKyBjX3NpemUud2lkdGgpID4gKHdQICsgeFApKQorCXBvc194ID0geFAgKyB3UCAtIGNfc2l6ZS53aWR0aCAtIDI7CisgICAgLyogQXNzdW1lICdndWloZWFkcm9vbScgaW5kaWNhdGVzIHRoZSB0aXRsZSBiYXIgaGVpZ2h0Li4uICovCisgICAgaWYgKChwb3NfeSArIGNfc2l6ZS5oZWlnaHQgKyBwX2dociAvIDIpID4gKGhQICsgeVApKQorCXBvc195ID0geVAgKyBoUCAtIGNfc2l6ZS5oZWlnaHQgLSAyIC0gcF9naHIgLyAyOworCisgICAgZ3RrX3dpZGdldF9zZXRfdXBvc2l0aW9uKGNoaWxkLCBwb3NfeCwgcG9zX3kpOworfQorCisjZW5kaWYgLyogIUhBVkVfR1RLMiAqLworCmRpZmYgLS1naXQgYS9zcmMvZ3VpX2d0a19mLmMgYi9zcmMvZ3VpX2d0a19mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNiODJkNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfZ3RrX2YuYwpAQCAtMCwwICsxLDk0MiBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAkJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIChDKSAxOTk4LDE5OTkgYnkgTWFyY2luIERhbGVja2kgPGRhbGVja2lAY3MubmV0LnBsPgorICoKKyAqCSJJJ20gYSBvbmUtbWFuIHNvZnR3YXJlIGNvbXBhbnkuIElmIHlvdSBoYXZlIGFueXRoaW5nIFVOSVgsIG5ldCBvcgorICoJZW1iZWRkZWQgc3lzdGVtcyByZWxhdGVkLCB3aGljaCBzZWVtcyB0byBjYXVzZSBzb21lIHNlcmlvdXMgdHJvdWJsZSBmb3IKKyAqCXlvdXIncyBpbi1ob3VzZSBkZXZlbG9wZXJzLCBtYXliZSB3ZSBuZWVkIHRvIHRhbGsgYmFkbHkgd2l0aCBlYWNoIG90aGVyCisgKgk6LSkgPGRhbGVja2lAY3MubmV0LnBsPiAoTXkgbmF0aXZlIGxhbmd1YWdlIGlzIHBvbGlzaCBhbmQgSSBzcGVhaworICoJbmF0aXZlIGdyYWRlIGdlcm1hbiB0b28uIEknbSBsaXZpbmcgaW4gR8O2dHRpbmdlbi5kZS4pCisgKgktLW1kY2tpIgorICoKKyAqIFN1cHBvcnQgZm9yIEdUSysgMiB3YXMgYWRkZWQgYnk6CisgKgorICogKEMpIDIwMDIsMjAwMyAgSmFzb24gSGlsZGVicmFuZCAgPGphc29uQHBlYWNld29ya3MuY2E+CisgKgkJICBEYW5pZWwgRWxzdG5lciAgPGRhbmllbC5lbHN0bmVyQGdteC5uZXQ+CisgKgorICogVGhpcyBpcyBhIHNwZWNpYWwgcHVyc3Bvc2UgY29udGFpbmVyIHdpZGdldCwgd2hpY2ggbWFuYWdlcyBhcmJpdHJhcnkgY2hpbGRzCisgKiBhdCBhcmJpdHJhcnkgcG9zaXRpb25zIHdpZHRoIGFyYml0cmFyeSBzaXplcy4gIFRoaXMgZmluYWxseSBwdXRzIGFuIGVuZCBvbgorICogb3VyIHJlc2l6ZW1lbnQgcHJvYmxlbXMgd2l0aCB3aGljaCB3ZSB3aGVyZSBzdHJ1Z2dsaW5nIGZvciBzdWNoIGEgbG9uZyB0aW1lLgorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CS8qIHdpdGhvdXQgdGhpcyBpdCBjb21waWxlcywgYnV0IGdpdmVzIGVycm9ycyBhdAorCQkJICAgcnVudGltZSEgKi8KKyNpbmNsdWRlICJndWlfZ3RrX2YuaCIKKyNpbmNsdWRlIDxndGsvZ3Rrc2lnbmFsLmg+CisjaWZkZWYgV0lOMzI2NAorIyBpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX0d0a0Zvcm1DaGlsZCBHdGtGb3JtQ2hpbGQ7CisKK3N0cnVjdCBfR3RrRm9ybUNoaWxkCit7CisgICAgR3RrV2lkZ2V0ICp3aWRnZXQ7CisgICAgR2RrV2luZG93ICp3aW5kb3c7CisgICAgZ2ludCB4OwkJLyogcmVsYXRpdmUgc3Vid2lkZ2V0IHggcG9zaXRpb24gKi8KKyAgICBnaW50IHk7CQkvKiByZWxhdGl2ZSBzdWJ3aWRnZXQgeSBwb3NpdGlvbiAqLworICAgIGdpbnQgbWFwcGVkOworfTsKKworCitzdGF0aWMgdm9pZCBndGtfZm9ybV9jbGFzc19pbml0KEd0a0Zvcm1DbGFzcyAqa2xhc3MpOworc3RhdGljIHZvaWQgZ3RrX2Zvcm1faW5pdChHdGtGb3JtICpmb3JtKTsKKworc3RhdGljIHZvaWQgZ3RrX2Zvcm1fcmVhbGl6ZShHdGtXaWRnZXQgKndpZGdldCk7CitzdGF0aWMgdm9pZCBndGtfZm9ybV91bnJlYWxpemUoR3RrV2lkZ2V0ICp3aWRnZXQpOworc3RhdGljIHZvaWQgZ3RrX2Zvcm1fbWFwKEd0a1dpZGdldCAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkIGd0a19mb3JtX3NpemVfcmVxdWVzdChHdGtXaWRnZXQgKndpZGdldCwKKwkJCQkgIEd0a1JlcXVpc2l0aW9uICpyZXF1aXNpdGlvbik7CitzdGF0aWMgdm9pZCBndGtfZm9ybV9zaXplX2FsbG9jYXRlKEd0a1dpZGdldCAqd2lkZ2V0LAorCQkJCSAgIEd0a0FsbG9jYXRpb24gKmFsbG9jYXRpb24pOworI2lmbmRlZiBIQVZFX0dUSzIgIC8qIHRoaXMgaXNuJ3QgbmVlZGVkIGluIGd0azIgKi8KK3N0YXRpYyB2b2lkIGd0a19mb3JtX2RyYXcoR3RrV2lkZ2V0ICp3aWRnZXQsCisJCQkgIEdka1JlY3RhbmdsZSAqYXJlYSk7CisjZW5kaWYKK3N0YXRpYyBnaW50IGd0a19mb3JtX2V4cG9zZShHdGtXaWRnZXQgKndpZGdldCwKKwkJCSAgICBHZGtFdmVudEV4cG9zZSAqZXZlbnQpOworCitzdGF0aWMgdm9pZCBndGtfZm9ybV9yZW1vdmUoR3RrQ29udGFpbmVyICpjb250YWluZXIsCisJCQkgICAgR3RrV2lkZ2V0ICp3aWRnZXQpOworc3RhdGljIHZvaWQgZ3RrX2Zvcm1fZm9yYWxsKEd0a0NvbnRhaW5lciAqY29udGFpbmVyLAorCQkJICAgIGdib29sZWFuIGluY2x1ZGVfaW50ZXJuYWxzLAorCQkJICAgIEd0a0NhbGxiYWNrIGNhbGxiYWNrLAorCQkJICAgIGdwb2ludGVyIGNhbGxiYWNrX2RhdGEpOworCitzdGF0aWMgdm9pZCBndGtfZm9ybV9hdHRhY2hfY2hpbGRfd2luZG93KEd0a0Zvcm0gKmZvcm0sCisJCQkJCSBHdGtGb3JtQ2hpbGQgKmNoaWxkKTsKK3N0YXRpYyB2b2lkIGd0a19mb3JtX3JlYWxpemVfY2hpbGQoR3RrRm9ybSAqZm9ybSwKKwkJCQkgICBHdGtGb3JtQ2hpbGQgKmNoaWxkKTsKK3N0YXRpYyB2b2lkIGd0a19mb3JtX3Bvc2l0aW9uX2NoaWxkKEd0a0Zvcm0gKmZvcm0sCisJCQkJICAgIEd0a0Zvcm1DaGlsZCAqY2hpbGQsCisJCQkJICAgIGdib29sZWFuIGZvcmNlX2FsbG9jYXRlKTsKK3N0YXRpYyB2b2lkIGd0a19mb3JtX3Bvc2l0aW9uX2NoaWxkcmVuKEd0a0Zvcm0gKmZvcm0pOworCitzdGF0aWMgR2RrRmlsdGVyUmV0dXJuIGd0a19mb3JtX2ZpbHRlcihHZGtYRXZlbnQgKmdka194ZXZlbnQsCisJCQkJICAgICAgIEdka0V2ZW50ICpldmVudCwKKwkJCQkgICAgICAgZ3BvaW50ZXIgZGF0YSk7CitzdGF0aWMgR2RrRmlsdGVyUmV0dXJuIGd0a19mb3JtX21haW5fZmlsdGVyKEdka1hFdmVudCAqZ2RrX3hldmVudCwKKwkJCQkJICAgIEdka0V2ZW50ICpldmVudCwKKwkJCQkJICAgIGdwb2ludGVyIGRhdGEpOworCitzdGF0aWMgdm9pZCBndGtfZm9ybV9zZXRfc3RhdGljX2dyYXZpdHkoR2RrV2luZG93ICp3aW5kb3csCisJCQkJCWdib29sZWFuIHVzZV9zdGF0aWMpOworCitzdGF0aWMgdm9pZCBndGtfZm9ybV9zZW5kX2NvbmZpZ3VyZShHdGtGb3JtICpmb3JtKTsKKworc3RhdGljIHZvaWQgZ3RrX2Zvcm1fY2hpbGRfbWFwKEd0a1dpZGdldCAqd2lkZ2V0LCBncG9pbnRlciB1c2VyX2RhdGEpOworc3RhdGljIHZvaWQgZ3RrX2Zvcm1fY2hpbGRfdW5tYXAoR3RrV2lkZ2V0ICp3aWRnZXQsIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKK3N0YXRpYyBHdGtXaWRnZXRDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworLyogUHVibGljIGludGVyZmFjZQorICovCisKKyAgICBHdGtXaWRnZXQgKgorZ3RrX2Zvcm1fbmV3KHZvaWQpCit7CisgICAgR3RrRm9ybSAqZm9ybTsKKworICAgIGZvcm0gPSBndGtfdHlwZV9uZXcoZ3RrX2Zvcm1fZ2V0X3R5cGUoKSk7CisKKyAgICByZXR1cm4gR1RLX1dJREdFVChmb3JtKTsKK30KKworICAgIHZvaWQKK2d0a19mb3JtX3B1dChHdGtGb3JtCSpmb3JtLAorCSAgICAgR3RrV2lkZ2V0CSpjaGlsZF93aWRnZXQsCisJICAgICBnaW50CXgsCisJICAgICBnaW50CXkpCit7CisgICAgR3RrRm9ybUNoaWxkICpjaGlsZDsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1RLX0lTX0ZPUk0oZm9ybSkpOworCisgICAgY2hpbGQgPSBnX25ldyhHdGtGb3JtQ2hpbGQsIDEpOworCisgICAgY2hpbGQtPndpZGdldCA9IGNoaWxkX3dpZGdldDsKKyAgICBjaGlsZC0+d2luZG93ID0gTlVMTDsKKyAgICBjaGlsZC0+eCA9IHg7CisgICAgY2hpbGQtPnkgPSB5OworICAgIGNoaWxkLT53aWRnZXQtPnJlcXVpc2l0aW9uLndpZHRoID0gMDsKKyAgICBjaGlsZC0+d2lkZ2V0LT5yZXF1aXNpdGlvbi5oZWlnaHQgPSAwOworICAgIGNoaWxkLT5tYXBwZWQgPSBGQUxTRTsKKworICAgIGZvcm0tPmNoaWxkcmVuID0gZ19saXN0X2FwcGVuZChmb3JtLT5jaGlsZHJlbiwgY2hpbGQpOworCisgICAgLyogY2hpbGQtPndpbmRvdyBtdXN0IGJlIGNyZWF0ZWQgYW5kIGF0dGFjaGVkIHRvIHRoZSB3aWRnZXQgX2JlZm9yZV8KKyAgICAgKiBpdCBoYXMgYmVlbiByZWFsaXplZCwgb3IgZWxzZSB0aGluZ3Mgd2lsbCBicmVhayB3aXRoIEdUSzIuICBOb3RlCisgICAgICogdGhhdCBndGtfd2lkZ2V0X3NldF9wYXJlbnQoKSByZWFsaXplcyB0aGUgd2lkZ2V0IGlmIGl0J3MgdmlzaWJsZQorICAgICAqIGFuZCBpdHMgcGFyZW50IGlzIG1hcHBlZC4KKyAgICAgKi8KKyAgICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRChmb3JtKSkKKwlndGtfZm9ybV9hdHRhY2hfY2hpbGRfd2luZG93KGZvcm0sIGNoaWxkKTsKKworICAgIGd0a193aWRnZXRfc2V0X3BhcmVudChjaGlsZF93aWRnZXQsIEdUS19XSURHRVQoZm9ybSkpOworICAgIGd0a193aWRnZXRfc2l6ZV9yZXF1ZXN0KGNoaWxkLT53aWRnZXQsIE5VTEwpOworCisgICAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQoZm9ybSkgJiYgIUdUS19XSURHRVRfUkVBTElaRUQoY2hpbGRfd2lkZ2V0KSkKKwlndGtfZm9ybV9yZWFsaXplX2NoaWxkKGZvcm0sIGNoaWxkKTsKKworICAgIGd0a19mb3JtX3Bvc2l0aW9uX2NoaWxkKGZvcm0sIGNoaWxkLCBUUlVFKTsKK30KKworICAgIHZvaWQKK2d0a19mb3JtX21vdmUoR3RrRm9ybQkqZm9ybSwKKwkgICAgICBHdGtXaWRnZXQJKmNoaWxkX3dpZGdldCwKKwkgICAgICBnaW50CXgsCisJICAgICAgZ2ludAl5KQoreworICAgIEdMaXN0ICp0bXBfbGlzdDsKKyAgICBHdGtGb3JtQ2hpbGQgKmNoaWxkOworCisgICAgZ19yZXR1cm5faWZfZmFpbChHVEtfSVNfRk9STShmb3JtKSk7CisKKyAgICBmb3IgKHRtcF9saXN0ID0gZm9ybS0+Y2hpbGRyZW47IHRtcF9saXN0OyB0bXBfbGlzdCA9IHRtcF9saXN0LT5uZXh0KQorICAgIHsKKwljaGlsZCA9IHRtcF9saXN0LT5kYXRhOworCWlmIChjaGlsZC0+d2lkZ2V0ID09IGNoaWxkX3dpZGdldCkKKwl7CisJICAgIGNoaWxkLT54ID0geDsKKwkgICAgY2hpbGQtPnkgPSB5OworCisJICAgIGd0a19mb3JtX3Bvc2l0aW9uX2NoaWxkKGZvcm0sIGNoaWxkLCBUUlVFKTsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9Cit9CisKKyAgICB2b2lkCitndGtfZm9ybV9zZXRfc2l6ZShHdGtGb3JtICpmb3JtLCBndWludCB3aWR0aCwgZ3VpbnQgaGVpZ2h0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1RLX0lTX0ZPUk0oZm9ybSkpOworCisgICAgLyogcHJldmVudCB1bm5lY2Nlc3NhcnkgY2FsbHMgKi8KKyAgICBpZiAoZm9ybS0+d2lkdGggPT0gd2lkdGggJiYgZm9ybS0+aGVpZ2h0ID09IGhlaWdodCkKKwlyZXR1cm47CisgICAgZm9ybS0+d2lkdGggPSB3aWR0aDsKKyAgICBmb3JtLT5oZWlnaHQgPSBoZWlnaHQ7CisKKyAgICAvKiBzaWduYWwgdGhlIGNoYW5nZSAqLworI2lmZGVmIEhBVkVfR1RLMgorICAgIGd0a193aWRnZXRfcXVldWVfcmVzaXplKGd0a193aWRnZXRfZ2V0X3BhcmVudChHVEtfV0lER0VUKGZvcm0pKSk7CisjZWxzZQorICAgIGd0a19jb250YWluZXJfcXVldWVfcmVzaXplKEdUS19DT05UQUlORVIoR1RLX1dJREdFVChmb3JtKS0+cGFyZW50KSk7CisjZW5kaWYKK30KKworICAgIHZvaWQKK2d0a19mb3JtX2ZyZWV6ZShHdGtGb3JtICpmb3JtKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1RLX0lTX0ZPUk0oZm9ybSkpOworCisgICAgKytmb3JtLT5mcmVlemVfY291bnQ7Cit9CisKKyAgICB2b2lkCitndGtfZm9ybV90aGF3KEd0a0Zvcm0gKmZvcm0pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChHVEtfSVNfRk9STShmb3JtKSk7CisKKyAgICBpZiAoZm9ybS0+ZnJlZXplX2NvdW50KQorICAgIHsKKwlpZiAoISgtLWZvcm0tPmZyZWV6ZV9jb3VudCkpCisJeworCSAgICBndGtfZm9ybV9wb3NpdGlvbl9jaGlsZHJlbihmb3JtKTsKKyNpZmRlZiBIQVZFX0dUSzIKKwkgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQoZm9ybSkpOworI2Vsc2UKKwkgICAgZ3RrX3dpZGdldF9kcmF3KEdUS19XSURHRVQoZm9ybSksIE5VTEwpOworI2VuZGlmCisJfQorICAgIH0KK30KKworLyogQmFzaWMgT2JqZWN0IGhhbmRsaW5nIHByb2NlZHVyZXMKKyAqLworICAgIEd0a1R5cGUKK2d0a19mb3JtX2dldF90eXBlKHZvaWQpCit7CisgICAgc3RhdGljIEd0a1R5cGUgZm9ybV90eXBlID0gMDsKKworICAgIGlmICghZm9ybV90eXBlKQorICAgIHsKKwlHdGtUeXBlSW5mbyBmb3JtX2luZm8gPQorCXsKKwkgICAgIkd0a0Zvcm0iLAorCSAgICBzaXplb2YoR3RrRm9ybSksCisJICAgIHNpemVvZihHdGtGb3JtQ2xhc3MpLAorCSAgICAoR3RrQ2xhc3NJbml0RnVuYykgZ3RrX2Zvcm1fY2xhc3NfaW5pdCwKKwkgICAgKEd0a09iamVjdEluaXRGdW5jKSBndGtfZm9ybV9pbml0CisJfTsKKworCWZvcm1fdHlwZSA9IGd0a190eXBlX3VuaXF1ZShHVEtfVFlQRV9DT05UQUlORVIsICZmb3JtX2luZm8pOworICAgIH0KKyAgICByZXR1cm4gZm9ybV90eXBlOworfQorCisgICAgc3RhdGljIHZvaWQKK2d0a19mb3JtX2NsYXNzX2luaXQoR3RrRm9ybUNsYXNzICprbGFzcykKK3sKKyAgICBHdGtXaWRnZXRDbGFzcyAqd2lkZ2V0X2NsYXNzOworICAgIEd0a0NvbnRhaW5lckNsYXNzICpjb250YWluZXJfY2xhc3M7CisKKyAgICB3aWRnZXRfY2xhc3MgPSAoR3RrV2lkZ2V0Q2xhc3MgKikga2xhc3M7CisgICAgY29udGFpbmVyX2NsYXNzID0gKEd0a0NvbnRhaW5lckNsYXNzICopIGtsYXNzOworCisgICAgcGFyZW50X2NsYXNzID0gZ3RrX3R5cGVfY2xhc3MoZ3RrX2NvbnRhaW5lcl9nZXRfdHlwZSgpKTsKKworICAgIHdpZGdldF9jbGFzcy0+cmVhbGl6ZSA9IGd0a19mb3JtX3JlYWxpemU7CisgICAgd2lkZ2V0X2NsYXNzLT51bnJlYWxpemUgPSBndGtfZm9ybV91bnJlYWxpemU7CisgICAgd2lkZ2V0X2NsYXNzLT5tYXAgPSBndGtfZm9ybV9tYXA7CisgICAgd2lkZ2V0X2NsYXNzLT5zaXplX3JlcXVlc3QgPSBndGtfZm9ybV9zaXplX3JlcXVlc3Q7CisgICAgd2lkZ2V0X2NsYXNzLT5zaXplX2FsbG9jYXRlID0gZ3RrX2Zvcm1fc2l6ZV9hbGxvY2F0ZTsKKyNpZm5kZWYgSEFWRV9HVEsyIC8qIG5vdCBuZWVkZWQgZm9yIEdUSzIgKi8KKyAgICB3aWRnZXRfY2xhc3MtPmRyYXcgPSBndGtfZm9ybV9kcmF3OworI2VuZGlmCisgICAgd2lkZ2V0X2NsYXNzLT5leHBvc2VfZXZlbnQgPSBndGtfZm9ybV9leHBvc2U7CisKKyAgICBjb250YWluZXJfY2xhc3MtPnJlbW92ZSA9IGd0a19mb3JtX3JlbW92ZTsKKyAgICBjb250YWluZXJfY2xhc3MtPmZvcmFsbCA9IGd0a19mb3JtX2ZvcmFsbDsKK30KKworICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9pbml0KEd0a0Zvcm0gKmZvcm0pCit7CisgICAgZm9ybS0+Y2hpbGRyZW4gPSBOVUxMOworCisgICAgZm9ybS0+d2lkdGggPSAxOworICAgIGZvcm0tPmhlaWdodCA9IDE7CisKKyAgICBmb3JtLT5iaW5fd2luZG93ID0gTlVMTDsKKworICAgIGZvcm0tPmNvbmZpZ3VyZV9zZXJpYWwgPSAwOworICAgIGZvcm0tPnZpc2liaWxpdHkgPSBHREtfVklTSUJJTElUWV9QQVJUSUFMOworCisgICAgZm9ybS0+ZnJlZXplX2NvdW50ID0gMDsKK30KKworLyoKKyAqIFdpZGdldCBtZXRob2RzCisgKi8KKworICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9yZWFsaXplKEd0a1dpZGdldCAqd2lkZ2V0KQoreworICAgIEdMaXN0ICp0bXBfbGlzdDsKKyAgICBHdGtGb3JtICpmb3JtOworICAgIEdka1dpbmRvd0F0dHIgYXR0cmlidXRlczsKKyAgICBnaW50IGF0dHJpYnV0ZXNfbWFzazsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1RLX0lTX0ZPUk0od2lkZ2V0KSk7CisKKyAgICBmb3JtID0gR1RLX0ZPUk0od2lkZ2V0KTsKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyhmb3JtLCBHVEtfUkVBTElaRUQpOworCisgICAgYXR0cmlidXRlcy53aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfQ0hJTEQ7CisgICAgYXR0cmlidXRlcy54ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLng7CisgICAgYXR0cmlidXRlcy55ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLnk7CisgICAgYXR0cmlidXRlcy53aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlvbi53aWR0aDsKKyAgICBhdHRyaWJ1dGVzLmhlaWdodCA9IHdpZGdldC0+YWxsb2NhdGlvbi5oZWlnaHQ7CisgICAgYXR0cmlidXRlcy53Y2xhc3MgPSBHREtfSU5QVVRfT1VUUFVUOworICAgIGF0dHJpYnV0ZXMudmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsKHdpZGdldCk7CisgICAgYXR0cmlidXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwKHdpZGdldCk7CisgICAgYXR0cmlidXRlcy5ldmVudF9tYXNrID0gR0RLX1ZJU0lCSUxJVFlfTk9USUZZX01BU0s7CisKKyAgICBhdHRyaWJ1dGVzX21hc2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VBTCB8IEdES19XQV9DT0xPUk1BUDsKKworICAgIHdpZGdldC0+d2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQpLAorCQkJCSAgICAmYXR0cmlidXRlcywgYXR0cmlidXRlc19tYXNrKTsKKyAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEod2lkZ2V0LT53aW5kb3csIHdpZGdldCk7CisKKyAgICBhdHRyaWJ1dGVzLnggPSAwOworICAgIGF0dHJpYnV0ZXMueSA9IDA7CisgICAgYXR0cmlidXRlcy5ldmVudF9tYXNrID0gZ3RrX3dpZGdldF9nZXRfZXZlbnRzKHdpZGdldCk7CisKKyAgICBmb3JtLT5iaW5fd2luZG93ID0gZ2RrX3dpbmRvd19uZXcod2lkZ2V0LT53aW5kb3csCisJCQkJICAgICAgJmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNfbWFzayk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKGZvcm0tPmJpbl93aW5kb3csIHdpZGdldCk7CisKKyAgICBndGtfZm9ybV9zZXRfc3RhdGljX2dyYXZpdHkoZm9ybS0+YmluX3dpbmRvdywgVFJVRSk7CisKKyAgICB3aWRnZXQtPnN0eWxlID0gZ3RrX3N0eWxlX2F0dGFjaCh3aWRnZXQtPnN0eWxlLCB3aWRnZXQtPndpbmRvdyk7CisgICAgZ3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kKHdpZGdldC0+c3R5bGUsIHdpZGdldC0+d2luZG93LCBHVEtfU1RBVEVfTk9STUFMKTsKKyAgICBndGtfc3R5bGVfc2V0X2JhY2tncm91bmQod2lkZ2V0LT5zdHlsZSwgZm9ybS0+YmluX3dpbmRvdywgR1RLX1NUQVRFX05PUk1BTCk7CisKKyAgICBnZGtfd2luZG93X2FkZF9maWx0ZXIod2lkZ2V0LT53aW5kb3csIGd0a19mb3JtX21haW5fZmlsdGVyLCBmb3JtKTsKKyAgICBnZGtfd2luZG93X2FkZF9maWx0ZXIoZm9ybS0+YmluX3dpbmRvdywgZ3RrX2Zvcm1fZmlsdGVyLCBmb3JtKTsKKworICAgIGZvciAodG1wX2xpc3QgPSBmb3JtLT5jaGlsZHJlbjsgdG1wX2xpc3Q7IHRtcF9saXN0ID0gdG1wX2xpc3QtPm5leHQpCisgICAgeworCUd0a0Zvcm1DaGlsZCAqY2hpbGQgPSB0bXBfbGlzdC0+ZGF0YTsKKworCWd0a19mb3JtX2F0dGFjaF9jaGlsZF93aW5kb3coZm9ybSwgY2hpbGQpOworCisJaWYgKEdUS19XSURHRVRfVklTSUJMRShjaGlsZC0+d2lkZ2V0KSkKKwkgICAgZ3RrX2Zvcm1fcmVhbGl6ZV9jaGlsZChmb3JtLCBjaGlsZCk7CisgICAgfQorfQorCisKKy8qIEFmdGVyIHJlYWRpbmcgdGhlIGRvY3VtZW50YXRpb24gYXQKKyAqIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2RvYy9BUEkvMi4wL2d0ay9ndGstY2hhbmdlcy0yLTAuaHRtbAorICogSSB0aGluayBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVtb3ZlIHRoaXMgZnVuY3Rpb24gd2hlbiBjb21waWxpbmcKKyAqIGFnYWluc3QgZ3RrLTIuMC4gIEl0IGRvZXNuJ3Qgc2VlbSB0byBjYXVzZSBwcm9ibGVtcywgdGhvdWdoLgorICoKKyAqIFdlbGwsIEkgcmVja29uIGF0IGxlYXN0IHRoZSBnZGtfd2luZG93X3Nob3coZm9ybS0+YmluX3dpbmRvdykKKyAqIGlzIG5lY2Vzc2FyeS4gIEd0a0Zvcm0gaXMgYW55dGhpbmcgYnV0IGEgdXN1YWwgY29udGFpbmVyIHdpZGdldC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9tYXAoR3RrV2lkZ2V0ICp3aWRnZXQpCit7CisgICAgR0xpc3QgKnRtcF9saXN0OworICAgIEd0a0Zvcm0gKmZvcm07CisKKyAgICBnX3JldHVybl9pZl9mYWlsKEdUS19JU19GT1JNKHdpZGdldCkpOworCisgICAgZm9ybSA9IEdUS19GT1JNKHdpZGdldCk7CisKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3aWRnZXQsIEdUS19NQVBQRUQpOworCisgICAgZ2RrX3dpbmRvd19zaG93KHdpZGdldC0+d2luZG93KTsKKyAgICBnZGtfd2luZG93X3Nob3coZm9ybS0+YmluX3dpbmRvdyk7CisKKyAgICBmb3IgKHRtcF9saXN0ID0gZm9ybS0+Y2hpbGRyZW47IHRtcF9saXN0OyB0bXBfbGlzdCA9IHRtcF9saXN0LT5uZXh0KQorICAgIHsKKwlHdGtGb3JtQ2hpbGQgKmNoaWxkID0gdG1wX2xpc3QtPmRhdGE7CisKKwlpZiAoR1RLX1dJREdFVF9WSVNJQkxFKGNoaWxkLT53aWRnZXQpCisJCSYmICFHVEtfV0lER0VUX01BUFBFRChjaGlsZC0+d2lkZ2V0KSkKKwkgICAgZ3RrX3dpZGdldF9tYXAoY2hpbGQtPndpZGdldCk7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK2d0a19mb3JtX3VucmVhbGl6ZShHdGtXaWRnZXQgKndpZGdldCkKK3sKKyAgICBHTGlzdCAqdG1wX2xpc3Q7CisgICAgR3RrRm9ybSAqZm9ybTsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1RLX0lTX0ZPUk0od2lkZ2V0KSk7CisKKyAgICBmb3JtID0gR1RLX0ZPUk0od2lkZ2V0KTsKKworICAgIHRtcF9saXN0ID0gZm9ybS0+Y2hpbGRyZW47CisKKyAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEoZm9ybS0+YmluX3dpbmRvdywgTlVMTCk7CisgICAgZ2RrX3dpbmRvd19kZXN0cm95KGZvcm0tPmJpbl93aW5kb3cpOworICAgIGZvcm0tPmJpbl93aW5kb3cgPSBOVUxMOworCisgICAgd2hpbGUgKHRtcF9saXN0KQorICAgIHsKKwlHdGtGb3JtQ2hpbGQgKmNoaWxkID0gdG1wX2xpc3QtPmRhdGE7CisKKwlpZiAoY2hpbGQtPndpbmRvdyAhPSBOVUxMKQorCXsKKwkgICAgZ3RrX3NpZ25hbF9kaXNjb25uZWN0X2J5X2Z1bmMoR1RLX09CSkVDVChjaGlsZC0+d2lkZ2V0KSwKKwkJCQkJICBHVEtfU0lHTkFMX0ZVTkMoZ3RrX2Zvcm1fY2hpbGRfbWFwKSwKKwkJCQkJICBjaGlsZCk7CisJICAgIGd0a19zaWduYWxfZGlzY29ubmVjdF9ieV9mdW5jKEdUS19PQkpFQ1QoY2hpbGQtPndpZGdldCksCisJCQkJCSAgR1RLX1NJR05BTF9GVU5DKGd0a19mb3JtX2NoaWxkX3VubWFwKSwKKwkJCQkJICBjaGlsZCk7CisKKwkgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKGNoaWxkLT53aW5kb3csIE5VTEwpOworCSAgICBnZGtfd2luZG93X2Rlc3Ryb3koY2hpbGQtPndpbmRvdyk7CisKKwkgICAgY2hpbGQtPndpbmRvdyA9IE5VTEw7CisJfQorCisJdG1wX2xpc3QgPSB0bXBfbGlzdC0+bmV4dDsKKyAgICB9CisKKyAgICBpZiAoR1RLX1dJREdFVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+dW5yZWFsaXplKQorCSAoKiBHVEtfV0lER0VUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT51bnJlYWxpemUpICh3aWRnZXQpOworfQorCisjaWZuZGVmIEhBVkVfR1RLMgorICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9kcmF3KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtSZWN0YW5nbGUgKmFyZWEpCit7CisgICAgR3RrRm9ybQkJKmZvcm07CisgICAgR0xpc3QJCSpjaGlsZHJlbjsKKyAgICBHdGtGb3JtQ2hpbGQJKmNoaWxkOworICAgIEdka1JlY3RhbmdsZQljaGlsZF9hcmVhOworCisgICAgZ19yZXR1cm5faWZfZmFpbChHVEtfSVNfRk9STSh3aWRnZXQpKTsKKworICAgIGlmIChHVEtfV0lER0VUX0RSQVdBQkxFKHdpZGdldCkpCisgICAgeworCWZvcm0gPSBHVEtfRk9STSh3aWRnZXQpOworCisJY2hpbGRyZW4gPSBmb3JtLT5jaGlsZHJlbjsKKworCXdoaWxlIChjaGlsZHJlbikKKwl7CisJICAgIGNoaWxkID0gY2hpbGRyZW4tPmRhdGE7CisKKwkgICAgaWYgKEdUS19XSURHRVRfRFJBV0FCTEUoY2hpbGQtPndpZGdldCkKKwkJICAgICYmIGd0a193aWRnZXRfaW50ZXJzZWN0KGNoaWxkLT53aWRnZXQsIGFyZWEsICZjaGlsZF9hcmVhKSkKKwkJZ3RrX3dpZGdldF9kcmF3KGNoaWxkLT53aWRnZXQsICZjaGlsZF9hcmVhKTsKKworCSAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLT5uZXh0OworCX0KKyAgICB9Cit9CisjZW5kaWYgLyogIUhBVkVfR1RLMiAqLworCisgICAgc3RhdGljIHZvaWQKK2d0a19mb3JtX3NpemVfcmVxdWVzdChHdGtXaWRnZXQgKndpZGdldCwgR3RrUmVxdWlzaXRpb24gKnJlcXVpc2l0aW9uKQoreworICAgIEdMaXN0ICp0bXBfbGlzdDsKKyAgICBHdGtGb3JtICpmb3JtOworCisgICAgZ19yZXR1cm5faWZfZmFpbChHVEtfSVNfRk9STSh3aWRnZXQpKTsKKworICAgIGZvcm0gPSBHVEtfRk9STSh3aWRnZXQpOworCisgICAgcmVxdWlzaXRpb24tPndpZHRoID0gZm9ybS0+d2lkdGg7CisgICAgcmVxdWlzaXRpb24tPmhlaWdodCA9IGZvcm0tPmhlaWdodDsKKworICAgIHRtcF9saXN0ID0gZm9ybS0+Y2hpbGRyZW47CisKKyAgICB3aGlsZSAodG1wX2xpc3QpCisgICAgeworCUd0a0Zvcm1DaGlsZCAqY2hpbGQgPSB0bXBfbGlzdC0+ZGF0YTsKKwlndGtfd2lkZ2V0X3NpemVfcmVxdWVzdChjaGlsZC0+d2lkZ2V0LCBOVUxMKTsKKwl0bXBfbGlzdCA9IHRtcF9saXN0LT5uZXh0OworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9zaXplX2FsbG9jYXRlKEd0a1dpZGdldCAqd2lkZ2V0LCBHdGtBbGxvY2F0aW9uICphbGxvY2F0aW9uKQoreworICAgIEdMaXN0ICp0bXBfbGlzdDsKKyAgICBHdGtGb3JtICpmb3JtOworICAgIGdib29sZWFuIG5lZWRfcmVwb3NpdGlvbjsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1RLX0lTX0ZPUk0od2lkZ2V0KSk7CisKKyAgICBpZiAod2lkZ2V0LT5hbGxvY2F0aW9uLnggPT0gYWxsb2NhdGlvbi0+eAorCSAgICAmJiB3aWRnZXQtPmFsbG9jYXRpb24ueSA9PSBhbGxvY2F0aW9uLT55CisJICAgICYmIHdpZGdldC0+YWxsb2NhdGlvbi53aWR0aCA9PSBhbGxvY2F0aW9uLT53aWR0aAorCSAgICAmJiB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0ID09IGFsbG9jYXRpb24tPmhlaWdodCkKKwlyZXR1cm47CisKKyAgICBuZWVkX3JlcG9zaXRpb24gPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lkdGggIT0gYWxsb2NhdGlvbi0+d2lkdGgKKwkJICAgfHwgd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodCAhPSBhbGxvY2F0aW9uLT5oZWlnaHQ7CisgICAgZm9ybSA9IEdUS19GT1JNKHdpZGdldCk7CisKKyAgICBpZiAobmVlZF9yZXBvc2l0aW9uKQorICAgIHsKKwl0bXBfbGlzdCA9IGZvcm0tPmNoaWxkcmVuOworCisJd2hpbGUgKHRtcF9saXN0KQorCXsKKwkgICAgR3RrRm9ybUNoaWxkICpjaGlsZCA9IHRtcF9saXN0LT5kYXRhOworCSAgICBndGtfZm9ybV9wb3NpdGlvbl9jaGlsZChmb3JtLCBjaGlsZCwgVFJVRSk7CisKKwkgICAgdG1wX2xpc3QgPSB0bXBfbGlzdC0+bmV4dDsKKwl9CisgICAgfQorCisgICAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQod2lkZ2V0KSkKKyAgICB7CisJZ2RrX3dpbmRvd19tb3ZlX3Jlc2l6ZSh3aWRnZXQtPndpbmRvdywKKwkJCSAgICAgICBhbGxvY2F0aW9uLT54LCBhbGxvY2F0aW9uLT55LAorCQkJICAgICAgIGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpOworCWdka193aW5kb3dfbW92ZV9yZXNpemUoR1RLX0ZPUk0od2lkZ2V0KS0+YmluX3dpbmRvdywKKwkJCSAgICAgICAwLCAwLAorCQkJICAgICAgIGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpOworICAgIH0KKyAgICB3aWRnZXQtPmFsbG9jYXRpb24gPSAqYWxsb2NhdGlvbjsKKyAgICBpZiAobmVlZF9yZXBvc2l0aW9uKQorCWd0a19mb3JtX3NlbmRfY29uZmlndXJlKGZvcm0pOworfQorCisgICAgc3RhdGljIGdpbnQKK2d0a19mb3JtX2V4cG9zZShHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnRFeHBvc2UgKmV2ZW50KQoreworICAgIEdMaXN0ICAgKnRtcF9saXN0OworICAgIEd0a0Zvcm0gKmZvcm07CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChHVEtfSVNfRk9STSh3aWRnZXQpLCBGQUxTRSk7CisKKyAgICBmb3JtID0gR1RLX0ZPUk0od2lkZ2V0KTsKKworICAgIGlmIChldmVudC0+d2luZG93ID09IGZvcm0tPmJpbl93aW5kb3cpCisJcmV0dXJuIEZBTFNFOworCisgICAgZm9yICh0bXBfbGlzdCA9IGZvcm0tPmNoaWxkcmVuOyB0bXBfbGlzdDsgdG1wX2xpc3QgPSB0bXBfbGlzdC0+bmV4dCkKKyAgICB7CisjaWZkZWYgSEFWRV9HVEsyCisJR3RrRm9ybUNoaWxkCSpmb3JtY2hpbGQgPSB0bXBfbGlzdC0+ZGF0YTsKKwlHdGtXaWRnZXQJKmNoaWxkCSAgID0gZm9ybWNoaWxkLT53aWRnZXQ7CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGNodW5rIG9mIGNvZGUgaXMgdGFrZW4gZnJvbSBndGtjb250YWluZXIuYy4gIFRoZQorCSAqIGd0azEueCBjb2RlIHN5bnRoZXNpemVkIGV4cG9zZSBldmVudHMgZGlyZWN0bHkgb24gdGhlIGNoaWxkIHdpZGdldHMsCisJICogd2hpY2ggY2FuJ3QgYmUgZG9uZSBpbiBndGsyCisJICovCisJaWYgKEdUS19XSURHRVRfRFJBV0FCTEUoY2hpbGQpICYmIEdUS19XSURHRVRfTk9fV0lORE9XKGNoaWxkKQorCQkmJiBjaGlsZC0+d2luZG93ID09IGV2ZW50LT53aW5kb3cpCisJeworCSAgICBHZGtFdmVudEV4cG9zZSBjaGlsZF9ldmVudDsKKwkgICAgY2hpbGRfZXZlbnQgPSAqZXZlbnQ7CisKKwkgICAgY2hpbGRfZXZlbnQucmVnaW9uID0gZ3RrX3dpZGdldF9yZWdpb25faW50ZXJzZWN0KGNoaWxkLCBldmVudC0+cmVnaW9uKTsKKwkgICAgaWYgKCFnZGtfcmVnaW9uX2VtcHR5KGNoaWxkX2V2ZW50LnJlZ2lvbikpCisJICAgIHsKKwkJZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChjaGlsZF9ldmVudC5yZWdpb24sICZjaGlsZF9ldmVudC5hcmVhKTsKKwkJZ3RrX3dpZGdldF9zZW5kX2V4cG9zZShjaGlsZCwgKEdka0V2ZW50ICopJmNoaWxkX2V2ZW50KTsKKwkgICAgfQorCX0KKyNlbHNlIC8qICFIQVZFX0dUSzIgKi8KKwlHdGtGb3JtQ2hpbGQgKmNoaWxkID0gdG1wX2xpc3QtPmRhdGE7CisKKwlpZiAoZXZlbnQtPndpbmRvdyA9PSBjaGlsZC0+d2luZG93KQorCSAgICByZXR1cm4gZ3RrX3dpZGdldF9ldmVudChjaGlsZC0+d2lkZ2V0LCAoR2RrRXZlbnQgKikgZXZlbnQpOworI2VuZGlmIC8qICFIQVZFX0dUSzIgKi8KKyAgICB9CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qIENvbnRhaW5lciBtZXRob2QKKyAqLworICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9yZW1vdmUoR3RrQ29udGFpbmVyICpjb250YWluZXIsIEd0a1dpZGdldCAqd2lkZ2V0KQoreworICAgIEdMaXN0ICp0bXBfbGlzdDsKKyAgICBHdGtGb3JtICpmb3JtOworICAgIEd0a0Zvcm1DaGlsZCAqY2hpbGQgPSBOVUxMOwkgICAgLyogaW5pdCBmb3IgZ2NjICovCisKKyAgICBnX3JldHVybl9pZl9mYWlsKEdUS19JU19GT1JNKGNvbnRhaW5lcikpOworCisgICAgZm9ybSA9IEdUS19GT1JNKGNvbnRhaW5lcik7CisKKyAgICB0bXBfbGlzdCA9IGZvcm0tPmNoaWxkcmVuOworICAgIHdoaWxlICh0bXBfbGlzdCkKKyAgICB7CisJY2hpbGQgPSB0bXBfbGlzdC0+ZGF0YTsKKwlpZiAoY2hpbGQtPndpZGdldCA9PSB3aWRnZXQpCisJICAgIGJyZWFrOworCXRtcF9saXN0ID0gdG1wX2xpc3QtPm5leHQ7CisgICAgfQorCisgICAgaWYgKHRtcF9saXN0KQorICAgIHsKKwlpZiAoY2hpbGQtPndpbmRvdykKKwl7CisJICAgIGd0a19zaWduYWxfZGlzY29ubmVjdF9ieV9mdW5jKEdUS19PQkpFQ1QoY2hpbGQtPndpZGdldCksCisJCQkJCSAgR1RLX1NJR05BTF9GVU5DKCZndGtfZm9ybV9jaGlsZF9tYXApLCBjaGlsZCk7CisJICAgIGd0a19zaWduYWxfZGlzY29ubmVjdF9ieV9mdW5jKEdUS19PQkpFQ1QoY2hpbGQtPndpZGdldCksCisJCQkJCSAgR1RLX1NJR05BTF9GVU5DKCZndGtfZm9ybV9jaGlsZF91bm1hcCksIGNoaWxkKTsKKworCSAgICAvKiBGSVhNRTogVGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zIGZvciByZXBhcmVudGluZyBOT19XSU5ET1cKKwkgICAgICogd2lkZ2V0cyBvdXQgb2YgYSBHdGtGb3JtCisJICAgICAqLworCSAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEoY2hpbGQtPndpbmRvdywgTlVMTCk7CisJICAgIGdka193aW5kb3dfZGVzdHJveShjaGlsZC0+d2luZG93KTsKKwl9CisJZ3RrX3dpZGdldF91bnBhcmVudCh3aWRnZXQpOworCisJZm9ybS0+Y2hpbGRyZW4gPSBnX2xpc3RfcmVtb3ZlX2xpbmsoZm9ybS0+Y2hpbGRyZW4sIHRtcF9saXN0KTsKKwlnX2xpc3RfZnJlZV8xKHRtcF9saXN0KTsKKwlnX2ZyZWUoY2hpbGQpOworICAgIH0KK30KKworLypBUkdTVVNFRDEqLworICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9mb3JhbGwoR3RrQ29udGFpbmVyCSpjb250YWluZXIsCisJCWdib29sZWFuCWluY2x1ZGVfaW50ZXJuYWxzLAorCQlHdGtDYWxsYmFjawljYWxsYmFjaywKKwkJZ3BvaW50ZXIJY2FsbGJhY2tfZGF0YSkKK3sKKyAgICBHdGtGb3JtICpmb3JtOworICAgIEd0a0Zvcm1DaGlsZCAqY2hpbGQ7CisgICAgR0xpc3QgKnRtcF9saXN0OworCisgICAgZ19yZXR1cm5faWZfZmFpbChHVEtfSVNfRk9STShjb250YWluZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNhbGxiYWNrICE9IE5VTEwpOworCisgICAgZm9ybSA9IEdUS19GT1JNKGNvbnRhaW5lcik7CisKKyAgICB0bXBfbGlzdCA9IGZvcm0tPmNoaWxkcmVuOworICAgIHdoaWxlICh0bXBfbGlzdCkKKyAgICB7CisJY2hpbGQgPSB0bXBfbGlzdC0+ZGF0YTsKKwl0bXBfbGlzdCA9IHRtcF9saXN0LT5uZXh0OworCisJKCpjYWxsYmFjaykgKGNoaWxkLT53aWRnZXQsIGNhbGxiYWNrX2RhdGEpOworICAgIH0KK30KKworLyogT3BlcmF0aW9ucyBvbiBjaGlsZHJlbgorICovCisKKyAgICBzdGF0aWMgdm9pZAorZ3RrX2Zvcm1fYXR0YWNoX2NoaWxkX3dpbmRvdyhHdGtGb3JtICpmb3JtLCBHdGtGb3JtQ2hpbGQgKmNoaWxkKQoreworICAgIGlmIChjaGlsZC0+d2luZG93ICE9IE5VTEwpCisJcmV0dXJuOyAvKiBiZWVuIHRoZXJlLCBkb25lIHRoYXQgKi8KKworICAgIGlmIChHVEtfV0lER0VUX05PX1dJTkRPVyhjaGlsZC0+d2lkZ2V0KSkKKyAgICB7CisJR3RrV2lkZ2V0CSp3aWRnZXQ7CisJR2RrV2luZG93QXR0cglhdHRyaWJ1dGVzOworCWdpbnQJCWF0dHJpYnV0ZXNfbWFzazsKKworCXdpZGdldCA9IEdUS19XSURHRVQoZm9ybSk7CisKKwlhdHRyaWJ1dGVzLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19DSElMRDsKKwlhdHRyaWJ1dGVzLnggPSBjaGlsZC0+eDsKKwlhdHRyaWJ1dGVzLnkgPSBjaGlsZC0+eTsKKwlhdHRyaWJ1dGVzLndpZHRoID0gY2hpbGQtPndpZGdldC0+cmVxdWlzaXRpb24ud2lkdGg7CisJYXR0cmlidXRlcy5oZWlnaHQgPSBjaGlsZC0+d2lkZ2V0LT5yZXF1aXNpdGlvbi5oZWlnaHQ7CisJYXR0cmlidXRlcy53Y2xhc3MgPSBHREtfSU5QVVRfT1VUUFVUOworCWF0dHJpYnV0ZXMudmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsKHdpZGdldCk7CisJYXR0cmlidXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwKHdpZGdldCk7CisJYXR0cmlidXRlcy5ldmVudF9tYXNrID0gR0RLX0VYUE9TVVJFX01BU0s7CisKKwlhdHRyaWJ1dGVzX21hc2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VBTCB8IEdES19XQV9DT0xPUk1BUDsKKwljaGlsZC0+d2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZm9ybS0+YmluX3dpbmRvdywKKwkJCQkgICAgICAgJmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNfbWFzayk7CisJZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKGNoaWxkLT53aW5kb3csIHdpZGdldCk7CisKKwlndGtfc3R5bGVfc2V0X2JhY2tncm91bmQod2lkZ2V0LT5zdHlsZSwKKwkJCQkgY2hpbGQtPndpbmRvdywKKwkJCQkgR1RLX1NUQVRFX05PUk1BTCk7CisKKwlndGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93KGNoaWxkLT53aWRnZXQsIGNoaWxkLT53aW5kb3cpOworCWd0a19mb3JtX3NldF9zdGF0aWNfZ3Jhdml0eShjaGlsZC0+d2luZG93LCBUUlVFKTsKKwkvKgorCSAqIEluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIHRvIG1hcC91bm1hcCBjaGlsZC0+d2luZG93CisJICogYWxvbmdzaWRlIHdpdGggdGhlIGFjdHVhbCB3aWRnZXQuCisJICovCisJZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoY2hpbGQtPndpZGdldCksICJtYXAiLAorCQkJICAgR1RLX1NJR05BTF9GVU5DKCZndGtfZm9ybV9jaGlsZF9tYXApLCBjaGlsZCk7CisJZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoY2hpbGQtPndpZGdldCksICJ1bm1hcCIsCisJCQkgICBHVEtfU0lHTkFMX0ZVTkMoJmd0a19mb3JtX2NoaWxkX3VubWFwKSwgY2hpbGQpOworICAgIH0KKyAgICBlbHNlIGlmICghR1RLX1dJREdFVF9SRUFMSVpFRChjaGlsZC0+d2lkZ2V0KSkKKyAgICB7CisJZ3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyhjaGlsZC0+d2lkZ2V0LCBmb3JtLT5iaW5fd2luZG93KTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZ3RrX2Zvcm1fcmVhbGl6ZV9jaGlsZChHdGtGb3JtICpmb3JtLCBHdGtGb3JtQ2hpbGQgKmNoaWxkKQoreworICAgIGd0a19mb3JtX2F0dGFjaF9jaGlsZF93aW5kb3coZm9ybSwgY2hpbGQpOworICAgIGd0a193aWRnZXRfcmVhbGl6ZShjaGlsZC0+d2lkZ2V0KTsKKworICAgIGlmIChjaGlsZC0+d2luZG93ID09IE5VTEwpIC8qIG1pZ2h0IGJlIGFscmVhZHkgc2V0LCBzZWUgYWJvdmUgKi8KKwlndGtfZm9ybV9zZXRfc3RhdGljX2dyYXZpdHkoY2hpbGQtPndpZGdldC0+d2luZG93LCBUUlVFKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9wb3NpdGlvbl9jaGlsZChHdGtGb3JtICpmb3JtLCBHdGtGb3JtQ2hpbGQgKmNoaWxkLAorCQkJZ2Jvb2xlYW4gZm9yY2VfYWxsb2NhdGUpCit7CisgICAgZ2ludCB4OworICAgIGdpbnQgeTsKKworICAgIHggPSBjaGlsZC0+eDsKKyAgICB5ID0gY2hpbGQtPnk7CisKKyAgICBpZiAoKHggPj0gR19NSU5TSE9SVCkgJiYgKHggPD0gR19NQVhTSE9SVCkgJiYKKwkoeSA+PSBHX01JTlNIT1JUKSAmJiAoeSA8PSBHX01BWFNIT1JUKSkKKyAgICB7CisJaWYgKCFjaGlsZC0+bWFwcGVkKQorCXsKKwkgICAgaWYgKEdUS19XSURHRVRfTUFQUEVEKGZvcm0pICYmIEdUS19XSURHRVRfVklTSUJMRShjaGlsZC0+d2lkZ2V0KSkKKwkgICAgeworCQlpZiAoIUdUS19XSURHRVRfTUFQUEVEKGNoaWxkLT53aWRnZXQpKQorCQkgICAgZ3RrX3dpZGdldF9tYXAoY2hpbGQtPndpZGdldCk7CisKKwkJY2hpbGQtPm1hcHBlZCA9IFRSVUU7CisJCWZvcmNlX2FsbG9jYXRlID0gVFJVRTsKKwkgICAgfQorCX0KKworCWlmIChmb3JjZV9hbGxvY2F0ZSkKKwl7CisJICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKworCSAgICBpZiAoR1RLX1dJREdFVF9OT19XSU5ET1coY2hpbGQtPndpZGdldCkpCisJICAgIHsKKwkJaWYgKGNoaWxkLT53aW5kb3cpCisJCXsKKwkJICAgIGdka193aW5kb3dfbW92ZV9yZXNpemUoY2hpbGQtPndpbmRvdywKKwkJCSAgICB4LCB5LAorCQkJICAgIGNoaWxkLT53aWRnZXQtPnJlcXVpc2l0aW9uLndpZHRoLAorCQkJICAgIGNoaWxkLT53aWRnZXQtPnJlcXVpc2l0aW9uLmhlaWdodCk7CisJCX0KKworCQlhbGxvY2F0aW9uLnggPSAwOworCQlhbGxvY2F0aW9uLnkgPSAwOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlhbGxvY2F0aW9uLnggPSB4OworCQlhbGxvY2F0aW9uLnkgPSB5OworCSAgICB9CisKKwkgICAgYWxsb2NhdGlvbi53aWR0aCA9IGNoaWxkLT53aWRnZXQtPnJlcXVpc2l0aW9uLndpZHRoOworCSAgICBhbGxvY2F0aW9uLmhlaWdodCA9IGNoaWxkLT53aWRnZXQtPnJlcXVpc2l0aW9uLmhlaWdodDsKKworCSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoY2hpbGQtPndpZGdldCwgJmFsbG9jYXRpb24pOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoY2hpbGQtPm1hcHBlZCkKKwl7CisJICAgIGNoaWxkLT5tYXBwZWQgPSBGQUxTRTsKKworCSAgICBpZiAoR1RLX1dJREdFVF9NQVBQRUQoY2hpbGQtPndpZGdldCkpCisJCWd0a193aWRnZXRfdW5tYXAoY2hpbGQtPndpZGdldCk7CisJfQorICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9wb3NpdGlvbl9jaGlsZHJlbihHdGtGb3JtICpmb3JtKQoreworICAgIEdMaXN0ICp0bXBfbGlzdDsKKworICAgIGZvciAodG1wX2xpc3QgPSBmb3JtLT5jaGlsZHJlbjsgdG1wX2xpc3Q7IHRtcF9saXN0ID0gdG1wX2xpc3QtPm5leHQpCisJZ3RrX2Zvcm1fcG9zaXRpb25fY2hpbGQoZm9ybSwgdG1wX2xpc3QtPmRhdGEsIEZBTFNFKTsKK30KKworLyogQ2FsbGJhY2tzICovCisKKy8qIFRoZSBtYWluIGV2ZW50IGZpbHRlci4gQWN0dWFsbHksIHdlIHByb2JhYmx5IGRvbid0IHJlYWxseSBuZWVkCisgKiB0byBpbnN0YWxsIHRoaXMgYXMgYSBmaWx0ZXIgYXQgYWxsLCBzaW5jZSB3ZSBhcmUgY2FsbGluZyBpdAorICogZGlyZWN0bHkgYWJvdmUgaW4gdGhlIGV4cG9zZS1oYW5kbGluZyBoYWNrLgorICoKKyAqIFRoaXMgcm91dGluZSBpZGVudGlmaWVzIGV4cG9zZSBldmVudHMgdGhhdCBhcmUgZ2VuZXJhdGVkIHdoZW4KKyAqIHdlJ3ZlIHRlbXBvcmFyaWx5IG1vdmVkIHRoZSBiaW5fd2luZG93X29yaWdpbiwgYW5kIHRyYW5zbGF0ZXMKKyAqIHRoZW0gb3IgZGlzY2FyZHMgdGhlbSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgYXJlIG9ic2N1cmVkCisgKiBvciBub3QuCisgKi8KKy8qQVJHU1VTRUQxKi8KKyAgICBzdGF0aWMgR2RrRmlsdGVyUmV0dXJuCitndGtfZm9ybV9maWx0ZXIoR2RrWEV2ZW50ICpnZGtfeGV2ZW50LCBHZGtFdmVudCAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgWEV2ZW50ICp4ZXZlbnQ7CisgICAgR3RrRm9ybSAqZm9ybTsKKworICAgIHhldmVudCA9IChYRXZlbnQgKikgZ2RrX3hldmVudDsKKyAgICBmb3JtID0gR1RLX0ZPUk0oZGF0YSk7CisKKyAgICBzd2l0Y2ggKHhldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBFeHBvc2U6CisJaWYgKHhldmVudC0+eGV4cG9zZS5zZXJpYWwgPT0gZm9ybS0+Y29uZmlndXJlX3NlcmlhbCkKKwl7CisJICAgIGlmIChmb3JtLT52aXNpYmlsaXR5ID09IEdES19WSVNJQklMSVRZX1VOT0JTQ1VSRUQpCisJCXJldHVybiBHREtfRklMVEVSX1JFTU9WRTsKKwkgICAgZWxzZQorCQlicmVhazsKKwl9CisJYnJlYWs7CisKKyAgICBjYXNlIENvbmZpZ3VyZU5vdGlmeToKKwlpZiAoKHhldmVudC0+eGNvbmZpZ3VyZS54ICE9IDApIHx8ICh4ZXZlbnQtPnhjb25maWd1cmUueSAhPSAwKSkKKwkgICAgZm9ybS0+Y29uZmlndXJlX3NlcmlhbCA9IHhldmVudC0+eGNvbmZpZ3VyZS5zZXJpYWw7CisJYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7Cit9CisKKy8qIEFsdGhvdWdoIEdESyBkb2VzIGhhdmUgYSBHREtfVklTSUJJTElUWV9OT1RJRlkgZXZlbnQsCisgKiB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGV2ZW50IGluIEdUSywgc28gd2UgaGF2ZQorICogdG8gZ2V0IHRoZSBldmVudHMgZnJvbSBhIGZpbHRlcgorICovCisvKkFSR1NVU0VEMSovCisgICAgc3RhdGljIEdka0ZpbHRlclJldHVybgorZ3RrX2Zvcm1fbWFpbl9maWx0ZXIoR2RrWEV2ZW50ICpnZGtfeGV2ZW50LCBHZGtFdmVudCAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgWEV2ZW50ICp4ZXZlbnQ7CisgICAgR3RrRm9ybSAqZm9ybTsKKworICAgIHhldmVudCA9IChYRXZlbnQgKikgZ2RrX3hldmVudDsKKyAgICBmb3JtID0gR1RLX0ZPUk0oZGF0YSk7CisKKyAgICBpZiAoeGV2ZW50LT50eXBlID09IFZpc2liaWxpdHlOb3RpZnkpCisgICAgeworCXN3aXRjaCAoeGV2ZW50LT54dmlzaWJpbGl0eS5zdGF0ZSkKKwl7CisJY2FzZSBWaXNpYmlsaXR5RnVsbHlPYnNjdXJlZDoKKwkgICAgZm9ybS0+dmlzaWJpbGl0eSA9IEdES19WSVNJQklMSVRZX0ZVTExZX09CU0NVUkVEOworCSAgICBicmVhazsKKworCWNhc2UgVmlzaWJpbGl0eVBhcnRpYWxseU9ic2N1cmVkOgorCSAgICBmb3JtLT52aXNpYmlsaXR5ID0gR0RLX1ZJU0lCSUxJVFlfUEFSVElBTDsKKwkgICAgYnJlYWs7CisKKwljYXNlIFZpc2liaWxpdHlVbm9ic2N1cmVkOgorCSAgICBmb3JtLT52aXNpYmlsaXR5ID0gR0RLX1ZJU0lCSUxJVFlfVU5PQlNDVVJFRDsKKwkgICAgYnJlYWs7CisJfQorCisJcmV0dXJuIEdES19GSUxURVJfUkVNT1ZFOworICAgIH0KKyAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKK30KKworLyogUm91dGluZXMgdG8gc2V0IHRoZSB3aW5kb3cgZ3Jhdml0eSwgYW5kIGNoZWNrIHdoZXRoZXIgaXQgaXMKKyAqIGZ1bmN0aW9uYWwuIEV4dHJhIGNhcGFiaWxpdGllcyBuZWVkIHRvIGJlIGFkZGVkIHRvIEdESywgc28KKyAqIHdlIGRvbid0IGhhdmUgdG8gdXNlIFhsaWIgaGVyZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9zZXRfc3RhdGljX2dyYXZpdHkoR2RrV2luZG93ICp3aW5kb3csIGdib29sZWFuIHVzZV9zdGF0aWMpCit7CisjaWZkZWYgSEFWRV9HVEsyCisgICAgZ2Jvb2xlYW4gc3RhdGljX2dyYXZpdHlfc3VwcG9ydGVkOworCisgICAgc3RhdGljX2dyYXZpdHlfc3VwcG9ydGVkID0gZ2RrX3dpbmRvd19zZXRfc3RhdGljX2dyYXZpdGllcyh3aW5kb3csCisJCQkJCQkJICAgICAgIHVzZV9zdGF0aWMpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RhdGljX2dyYXZpdHlfc3VwcG9ydGVkKTsKKyNlbHNlCisgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgeGF0dHJpYnV0ZXM7CisKKyAgICB4YXR0cmlidXRlcy53aW5fZ3Jhdml0eSA9ICh1c2Vfc3RhdGljKSA/IFN0YXRpY0dyYXZpdHkgOiBOb3J0aFdlc3RHcmF2aXR5OworICAgIHhhdHRyaWJ1dGVzLmJpdF9ncmF2aXR5ID0gKHVzZV9zdGF0aWMpID8gU3RhdGljR3Jhdml0eSA6IE5vcnRoV2VzdEdyYXZpdHk7CisKKyAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhHREtfV0lORE9XX1hESVNQTEFZKHdpbmRvdyksCisJCQkgICAgR0RLX1dJTkRPV19YV0lORE9XKHdpbmRvdyksCisJCQkgICAgQ1dCaXRHcmF2aXR5IHwgQ1dXaW5HcmF2aXR5LAorCQkJICAgICZ4YXR0cmlidXRlcyk7CisjZW5kaWYKK30KKworICAgIHZvaWQKK2d0a19mb3JtX21vdmVfcmVzaXplKEd0a0Zvcm0gKmZvcm0sIEd0a1dpZGdldCAqd2lkZ2V0LAorCQkgICAgIGdpbnQgeCwgZ2ludCB5LCBnaW50IHcsIGdpbnQgaCkKK3sKKyAgICB3aWRnZXQtPnJlcXVpc2l0aW9uLndpZHRoICA9IHc7CisgICAgd2lkZ2V0LT5yZXF1aXNpdGlvbi5oZWlnaHQgPSBoOworCisgICAgZ3RrX2Zvcm1fbW92ZShmb3JtLCB3aWRnZXQsIHgsIHkpOworfQorCisgICAgc3RhdGljIHZvaWQKK2d0a19mb3JtX3NlbmRfY29uZmlndXJlKEd0a0Zvcm0gKmZvcm0pCit7CisgICAgR3RrV2lkZ2V0ICp3aWRnZXQ7CisgICAgR2RrRXZlbnRDb25maWd1cmUgZXZlbnQ7CisKKyAgICB3aWRnZXQgPSBHVEtfV0lER0VUKGZvcm0pOworCisgICAgZXZlbnQudHlwZSA9IEdES19DT05GSUdVUkU7CisgICAgZXZlbnQud2luZG93ID0gd2lkZ2V0LT53aW5kb3c7CisgICAgZXZlbnQueCA9IHdpZGdldC0+YWxsb2NhdGlvbi54OworICAgIGV2ZW50LnkgPSB3aWRnZXQtPmFsbG9jYXRpb24ueTsKKyAgICBldmVudC53aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlvbi53aWR0aDsKKyAgICBldmVudC5oZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0OworCisjaWZkZWYgSEFWRV9HVEsyCisgICAgZ3RrX21haW5fZG9fZXZlbnQoKEdka0V2ZW50KikmZXZlbnQpOworI2Vsc2UKKyAgICBndGtfd2lkZ2V0X2V2ZW50KHdpZGdldCwgKEdka0V2ZW50KikmZXZlbnQpOworI2VuZGlmCit9CisKKy8qQVJHU1VTRUQwKi8KKyAgICBzdGF0aWMgdm9pZAorZ3RrX2Zvcm1fY2hpbGRfbWFwKEd0a1dpZGdldCAqd2lkZ2V0LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgICAgR3RrRm9ybUNoaWxkICpjaGlsZDsKKworICAgIGNoaWxkID0gKEd0a0Zvcm1DaGlsZCAqKXVzZXJfZGF0YTsKKworICAgIGNoaWxkLT5tYXBwZWQgPSBUUlVFOworICAgIGdka193aW5kb3dfc2hvdyhjaGlsZC0+d2luZG93KTsKK30KKworLypBUkdTVVNFRDAqLworICAgIHN0YXRpYyB2b2lkCitndGtfZm9ybV9jaGlsZF91bm1hcChHdGtXaWRnZXQgKndpZGdldCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICAgIEd0a0Zvcm1DaGlsZCAqY2hpbGQ7CisKKyAgICBjaGlsZCA9IChHdGtGb3JtQ2hpbGQgKil1c2VyX2RhdGE7CisKKyAgICBjaGlsZC0+bWFwcGVkID0gRkFMU0U7CisgICAgZ2RrX3dpbmRvd19oaWRlKGNoaWxkLT53aW5kb3cpOworfQorCmRpZmYgLS1naXQgYS9zcmMvZ3VpX2d0a19mLmggYi9zcmMvZ3VpX2d0a19mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjN2VjZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfZ3RrX2YuaApAQCAtMCwwICsxLDgzIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCQlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworI2lmbmRlZiBfX0dUS19GT1JNX0hfXworI2RlZmluZSBfX0dUS19GT1JNX0hfXworCisjaWZkZWYgVk1TCisjIGluY2x1ZGUgImd1aV9ndGtfdm1zLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrY29udGFpbmVyLmg+CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIEdUS19UWVBFX0ZPUk0JCSAgICAgICAoZ3RrX2Zvcm1fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdUS19GT1JNKG9iaikJCSAgICAgICAoR1RLX0NIRUNLX0NBU1QgKChvYmopLCBHVEtfVFlQRV9GT1JNLCBHdGtGb3JtKSkKKyNkZWZpbmUgR1RLX0ZPUk1fQ0xBU1Moa2xhc3MpCSAgICAgICAoR1RLX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdUS19UWVBFX0ZPUk0sIEd0a0Zvcm1DbGFzcykpCisjZGVmaW5lIEdUS19JU19GT1JNKG9iaikJICAgICAgIChHVEtfQ0hFQ0tfVFlQRSAoKG9iaiksIEdUS19UWVBFX0ZPUk0pKQorI2RlZmluZSBHVEtfSVNfRk9STV9DTEFTUyhrbGFzcykgICAgICAgKEdUS19DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHVEtfVFlQRV9GT1JNKSkKKworCit0eXBlZGVmIHN0cnVjdCBfR3RrRm9ybSBHdGtGb3JtOwordHlwZWRlZiBzdHJ1Y3QgX0d0a0Zvcm1DbGFzcyBHdGtGb3JtQ2xhc3M7CisKK3N0cnVjdCBfR3RrRm9ybQoreworICAgIEd0a0NvbnRhaW5lciBjb250YWluZXI7CisKKyAgICBHTGlzdCAqY2hpbGRyZW47CisKKyAgICBndWludCB3aWR0aDsKKyAgICBndWludCBoZWlnaHQ7CisKKyAgICBHZGtXaW5kb3cgKmJpbl93aW5kb3c7CisKKyAgICBHZGtWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eTsKKyAgICBndWxvbmcgY29uZmlndXJlX3NlcmlhbDsKKworICAgIGdpbnQgZnJlZXplX2NvdW50OworfTsKKworc3RydWN0IF9HdGtGb3JtQ2xhc3MKK3sKKyAgICBHdGtDb250YWluZXJDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitHdGtUeXBlIGd0a19mb3JtX2dldF90eXBlKHZvaWQpOworCitHdGtXaWRnZXQgKmd0a19mb3JtX25ldyh2b2lkKTsKKwordm9pZCBndGtfZm9ybV9wdXQoR3RrRm9ybSAqIGZvcm0sIEd0a1dpZGdldCAqIHdpZGdldCwKKwlnaW50IHgsIGdpbnQgeSk7CisKK3ZvaWQgZ3RrX2Zvcm1fbW92ZShHdGtGb3JtICpmb3JtLCBHdGtXaWRnZXQgKiB3aWRnZXQsCisJZ2ludCB4LCBnaW50IHkpOworCit2b2lkIGd0a19mb3JtX21vdmVfcmVzaXplKEd0a0Zvcm0gKiBmb3JtLCBHdGtXaWRnZXQgKiB3aWRnZXQsCisJZ2ludCB4LCBnaW50IHksCisJZ2ludCB3LCBnaW50IGgpOwordm9pZCBndGtfZm9ybV9zZXRfc2l6ZShHdGtGb3JtICogZm9ybSwgZ3VpbnQgd2lkdGgsIGd1aW50IGhlaWdodCk7CisKKy8qIFRoZXNlIGRpc2FibGUgYW5kIGVuYWJsZSBtb3ZpbmcgYW5kIHJlcGFpbnRpbmcgcmVzcGVjdGl2ZWx5LiAgSWYgeW91CisgKiB3YW50IHRvIHVwZGF0ZSB0aGUgbGF5b3V0J3Mgb2Zmc2V0cyBidXQgZG8gbm90IHdhbnQgaXQgdG8gcmVwYWludAorICogaXRzZWxmLCB5b3Ugc2hvdWxkIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KKwordm9pZCBndGtfZm9ybV9mcmVlemUoR3RrRm9ybSAqZm9ybSk7Cit2b2lkIGd0a19mb3JtX3RoYXcoR3RrRm9ybSAqZm9ybSk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgkvKiBfX0dUS19GT1JNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d1aV9ndGtfdm1zLmggYi9zcmMvZ3VpX2d0a192bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODg3MjhmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2d1aV9ndGtfdm1zLmgKQEAgLTAsMCArMSw3MzQgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQgICAgYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkaS4KKyAqCisgKiBGaWxlIE1PVElGX1JFREVGSU5FUy5IIG9yaWdpbmFsbHkgZGVsaXZlcnMgdG9nZXRoZXIgd2l0aAorICogT3BlblZNUyBQb3J0aW5nIExpYnJhcnkKKyAqIGh0dHA6Ly93d3cub3BlbnZtcy5jb21wYXEuY29tL29wZW52bXMvcHJvZHVjdHMvaXBzL3BvcnRpbmcuaHRtbAorICoKKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBmb3IgVmltIGRldmVsb3BtZW50LgorICogT3JpZ2luYWwgZmlsZSBjb250YWlucyBqdXN0IGRlZmluZXMgdGhhdCBHVEsgZm9yIE9wZW5WTVMgdXNlcywKKyAqIGJ1dCBub3QgYWxsIGZ1bmN0aW9ucyB0aGF0IERFQ1cgbGlicmFyeSBoYXMuIFRoZXJlZm9yZSBpdCBoYXMgYmVlbiBleHBhbmRlZAorICogd2l0aCBuZWNlc3NhcnkgZGVmaW5lcyBmb3IgVmltIG9uIE9wZW5WTVMgd2l0aCBHVEsgR1VJLgorICoKKyAqIFpvbHRhbiBBcnBhZGZmeSA8YXJwYWRmZnlAcG9sYXJob21lLmNvbT4KKyAqLworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQkJCQkJICoKKyAqIENvcHlyaWdodCAyMDAwIENvbXBhcSBDb21wdXRlciBDb3Jwb3JhdGlvbgkJCQkgKgorICoJCQkJCQkJCQkgKgorICogQ09NUEFRIFJlZ2lzdGVyZWQgaW4gVS5TLiBQYXRlbnQgYW5kIFRyYWRlbWFyayBPZmZpY2UuCQkgKgorICoJCQkJCQkJCQkgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElNUE9SVEFOVDogQ2FyZWZ1bGx5IHJlYWQgdGhlIExpY2Vuc2UgVGVybXMgYmVsb3cgYmVmb3JlCQkgKgorICogcHJvY2VlZGluZy4JQnkgdXNlIG9mIHRoZXNlIG1hdGVyaWFscyB5b3UgYWdyZWUgdG8gdGhlc2UgdGVybXMuCSAqCisgKiBJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZXNlIHRlcm1zLCB5b3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZSBvciAgKgorICogdGhlIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLgkJCQkJICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMSUNFTlNFIFRFUk1TCQkJCQkJCSAqCisgKiAxLiBHUkFOVAkJCQkJCQkJICoKKyAqIENvbXBhcSBDb21wdXRlciBDb3Jwb3JhdGlvbiAoIkNPTVBBUSIpIGdyYW50cyB5b3UgdGhlIHJpZ2h0IHRvIHVzZSwJICoKKyAqIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIGZvbGxvd2luZyBzb3VyY2UgY29kZSAodGhlICJTb2Z0d2FyZSIpCSAqCisgKiBvbiBhbnkgbnVtYmVyIG9mIGNvbXB1dGVycy4gWW91IG1heSB1c2UgdGhlIFNvZnR3YXJlIGFzIHBhcnQgb2YJICoKKyAqIGNyZWF0aW5nIGEgc29mdHdhcmUgcHJvZ3JhbSBvciBwcm9kdWN0IGludGVuZGVkIGZvciBjb21tZXJjaWFsIG9yCSAqCisgKiBub24tY29tbWVyY2lhbCBkaXN0cmlidXRpb24gaW4gbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgYmluYXJ5LCAgKgorICogb3IgZXhlY3V0YWJsZSBmb3JtYXRzLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFzCQkgKgorICogbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBwcm92aWRlZCB0aGlzIGxpY2Vuc2UgaXMgbm90IHJlbW92ZWQJICoKKyAqIGZyb20gdGhlIFNvZnR3YXJlIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBhcmUgY29uc3BpY3VvdXNseSBpbmRpY2F0ZWQuICAqCisgKiAyLiBDT1BZUklHSFQJCQkJCQkJCSAqCisgKiBUaGUgU29mdHdhcmUgaXMgb3duZWQgYnkgQ09NUEFRIGFuZCBpdHMgc3VwcGxpZXJzIGFuZCBpcyBwcm90ZWN0ZWQgYnkgKgorICogY29weXJpZ2h0IGxhd3MgYW5kIGludGVybmF0aW9uYWwgdHJlYXRpZXMuICBZb3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgICoKKyAqIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gaXMgc3ViamVjdCB0byB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQJICoKKyAqIGxhd3MgYW5kIHRoZSBleHByZXNzIHJpZ2h0cyBhbmQgcmVzdHJpY3Rpb25zIG9mIHRoZXNlIHRlcm1zLgkJICoKKyAqIDMuIFJFU1RSSUNUSU9OUwkJCQkJCQkgKgorICogWW91IG1heSBub3QgcmVtb3ZlIGFueSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgb3Igb3RoZXIgcHJvcHJpZXRhcnkJICoKKyAqIG5vdGljZXMgZnJvbSB0aGUgU29mdHdhcmUgb3IgdGhlIGFzc29jaWF0ZWQJZG9jdW1lbnRhdGlvbi4JCSAqCisgKiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBjb21wbGlhbmNlIHdpdGggYWxsIGFwcGxpY2FibGUgZXhwb3J0IG9yCSAqCisgKiByZS1leHBvcnQgY29udHJvbCBsYXdzIGFuZCByZWd1bGF0aW9ucyBpZiB5b3UgZXhwb3J0IHRoZSBTb2Z0d2FyZS4JICoKKyAqIFRoaXMgbGljZW5zZSBpcyBnb3Zlcm5lZCBieSBhbmQgaXMgdG8gYmUgY29uc3RydWVkIHVuZGVyIHRoZSBsYXdzCSAqCisgKiBvZiB0aGUgU3RhdGUgb2YgVGV4YXMuCQkJCQkJICoKKyAqCQkJCQkJCQkJICoKKyAqIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQU5EIExJQUJJTElUWQkJCQkJICoKKyAqIENvbXBhcSBzaGFsbCBub3QgYmUgbGlhYmxlIGZvciB0ZWNobmljYWwgb3IgZWRpdG9yaWFsIGVycm9ycyBvcgkgKgorICogb21pc3Npb25zIGNvbnRhaW5lZCBoZXJlaW4uIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzCSAqCisgKiBzdWJqZWN0IHRvIGNoYW5nZSB3aXRob3V0IG5vdGljZS4JCQkJCSAqCisgKgkJCQkJCQkJCSAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4JICoKKyAqIFRIRSBFTlRJUkUgUklTSyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgUkVNQUlOUyBXSVRIICAqCisgKiBSRUNJUElFTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBDT01QQVEgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAkgKgorICogQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgUFVOSVRJVkUgT1IgT1RIRVIgREFNQUdFUwkgKgorICogV0hBVFNPRVZFUiAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTICoKKyAqIFBST0ZJVFMsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiksCSAqCisgKiBFVkVOIElGIENPTVBBUSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMJICoKKyAqIEFORCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCBPUiBUT1JUIElOQ0xVRElORyBORUdMSUdFTkNFLgkgKgorICoJCQkJCQkJCQkgKgorICogSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBjb25jZXJuaW5nIHRoaXMgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Q6CSAqCisgKiBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24sIFNvZnR3YXJlIEJ1c2luZXNzIFByYWN0aWNlcywgWktPMS0yL0QyMiwgKgorICogMTEwIFNwaXQgQnJvb2sgUm9hZCwgTmFzaHVhLCBOSC4gMDMwNjItMjY5OC4JCQkJICoKKyAqCQkJCQkJCQkJICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyogSU5UUklOU0lDLkggb21pdHMgcHJvdG8gaWYgWHRGcmVlIGlzIGRlZmluZWQgKi8KKy8qIFZNU19CRUdJTl9DX1BMVVNfUExVUyAqLworZXh0ZXJuIHZvaWQgWHRGcmVlKGNoYXIqKTsKKy8qIFZNU19FTkRfQ19QTFVTX1BMVVMgKi8KKworI2RlZmluZSBfWFJlZ2lzdGVyRmlsdGVyQnlUeXBlIF9YUkVHSVNURVJGSUxURVJCWVRZUEUKKworI2RlZmluZSBYQWxsb2NDbGFzc0hpbnQgWEFMTE9DQ0xBU1NISU5UCisjZGVmaW5lIFhBbGxvY0NvbG9yIFhBTExPQ0NPTE9SCisjZGVmaW5lIFhBbGxvY0NvbG9yQ2VsbHMgWEFMTE9DQ09MT1JDRUxMUworI2RlZmluZSBYQWxsb2NTaXplSGludHMgWEFMTE9DU0laRUhJTlRTCisjZGVmaW5lIFhBbGxvY1dNSGludHMgWEFMTE9DV01ISU5UUworI2RlZmluZSBYQXV0b1JlcGVhdE9mZiBYQVVUT1JFUEVBVE9GRgorI2RlZmluZSBYQXV0b1JlcGVhdE9uIFhBVVRPUkVQRUFUT04KKyNkZWZpbmUgWEJhc2VGb250TmFtZUxpc3RPZkZvbnRTZXQgWEJBU0VGT05UTkFNRUxJU1RPRkZPTlRTRVQKKyNkZWZpbmUgWEJlbGwgWEJFTEwKKyNkZWZpbmUgWEJpdG1hcFBhZCBYQklUTUFQUEFECisjZGVmaW5lIFhDaGFuZ2VBY3RpdmVQb2ludGVyR3JhYiBYQ0hBTkdFQUNUSVZFUE9JTlRFUkdSQUIKKyNkZWZpbmUgWENoYW5nZUdDIFhDSEFOR0VHQworI2RlZmluZSBYQ2hhbmdlUHJvcGVydHkgWENIQU5HRVBST1BFUlRZCisjZGVmaW5lIFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzIFhDSEFOR0VXSU5ET1dBVFRSSUJVVEVTCisjZGVmaW5lIFhDaGVja0lmRXZlbnQgWENIRUNLSUZFVkVOVAorI2RlZmluZSBYQ2hlY2tNYXNrRXZlbnQgWENIRUNLTUFTS0VWRU5UCisjZGVmaW5lIFhDaGVja1R5cGVkRXZlbnQgWENIRUNLVFlQRURFVkVOVAorI2RlZmluZSBYQ2hlY2tUeXBlZFdpbmRvd0V2ZW50IFhDSEVDS1RZUEVEV0lORE9XRVZFTlQKKyNkZWZpbmUgWENoZWNrV2luZG93RXZlbnQgWENIRUNLV0lORE9XRVZFTlQKKyNkZWZpbmUgWENsZWFyQXJlYSBYQ0xFQVJBUkVBCisjZGVmaW5lIFhDbGVhcldpbmRvdyBYQ0xFQVJXSU5ET1cKKyNkZWZpbmUgWENsaXBCb3ggWENMSVBCT1gKKyNkZWZpbmUgWENsb3NlRGlzcGxheSBYQ0xPU0VESVNQTEFZCisjZGVmaW5lIFhDbG9zZUlNIFhDTE9TRUlNCisjZGVmaW5lIFhDb25maWd1cmVXaW5kb3cgWENPTkZJR1VSRVdJTkRPVworI2RlZmluZSBYQ29udmVydFNlbGVjdGlvbiBYQ09OVkVSVFNFTEVDVElPTgorI2RlZmluZSBYQ29weUFyZWEgWENPUFlBUkVBCisjZGVmaW5lIFhDb3B5R0MgWENPUFlHQworI2RlZmluZSBYQ29weVBsYW5lIFhDT1BZUExBTkUKKyNkZWZpbmUgWENyZWF0ZUJpdG1hcEZyb21EYXRhIFhDUkVBVEVCSVRNQVBGUk9NREFUQQorI2RlZmluZSBYQ3JlYXRlQ29sb3JtYXAgWENSRUFURUNPTE9STUFQCisjZGVmaW5lIFhDcmVhdGVGb250Q3Vyc29yIFhDUkVBVEVGT05UQ1VSU09SCisjZGVmaW5lIFhDcmVhdGVGb250U2V0IFhDUkVBVEVGT05UU0VUCisjZGVmaW5lIFhDcmVhdGVHQyBYQ1JFQVRFR0MKKyNkZWZpbmUgWENyZWF0ZUlDIFhDUkVBVEVJQworI2RlZmluZSBYQ3JlYXRlSW1hZ2UgWENSRUFURUlNQUdFCisjZGVmaW5lIFhDcmVhdGVQaXhtYXAgWENSRUFURVBJWE1BUAorI2RlZmluZSBYQ3JlYXRlUGl4bWFwQ3Vyc29yIFhDUkVBVEVQSVhNQVBDVVJTT1IKKyNkZWZpbmUgWENyZWF0ZVBpeG1hcEZyb21CaXRtYXBEYXRhIFhDUkVBVEVQSVhNQVBGUk9NQklUTUFQREFUQQorI2RlZmluZSBYQ3JlYXRlUmVnaW9uIFhDUkVBVEVSRUdJT04KKyNkZWZpbmUgWENyZWF0ZVNpbXBsZVdpbmRvdyBYQ1JFQVRFU0lNUExFV0lORE9XCisjZGVmaW5lIFhDcmVhdGVXaW5kb3cgWENSRUFURVdJTkRPVworI2RlZmluZSBYRGVmYXVsdFNjcmVlbk9mRGlzcGxheSBYREVGQVVMVFNDUkVFTk9GRElTUExBWQorI2RlZmluZSBYRGVmaW5lQ3Vyc29yIFhERUZJTkVDVVJTT1IKKyNkZWZpbmUgWERlbGV0ZVByb3BlcnR5IFhERUxFVEVQUk9QRVJUWQorI2RlZmluZSBYRGVzdHJveUlDIFhERVNUUk9ZSUMKKyNkZWZpbmUgWERlc3Ryb3lSZWdpb24gWERFU1RST1lSRUdJT04KKyNkZWZpbmUgWERlc3Ryb3lXaW5kb3cgWERFU1RST1lXSU5ET1cKKyNkZWZpbmUgWERpc3BsYXlOYW1lIFhESVNQTEFZTkFNRQorI2RlZmluZSBYRGlzcGxheU9mU2NyZWVuIFhESVNQTEFZT0ZTQ1JFRU4KKyNkZWZpbmUgWERpc3BsYXlTdHJpbmcgWERJU1BMQVlTVFJJTkcKKyNkZWZpbmUgWERyYXdBcmMgWERSQVdBUkMKKyNkZWZpbmUgWERyYXdJbWFnZVN0cmluZyBYRFJBV0lNQUdFU1RSSU5HCisjZGVmaW5lIFhEcmF3SW1hZ2VTdHJpbmcxNiBYRFJBV0lNQUdFU1RSSU5HMTYKKyNkZWZpbmUgWERyYXdMaW5lIFhEUkFXTElORQorI2RlZmluZSBYRHJhd0xpbmVzIFhEUkFXTElORVMKKyNkZWZpbmUgWERyYXdQb2ludCBYRFJBV1BPSU5UCisjZGVmaW5lIFhEcmF3UG9pbnRzIFhEUkFXUE9JTlRTCisjZGVmaW5lIFhEcmF3UmVjdGFuZ2xlIFhEUkFXUkVDVEFOR0xFCisjZGVmaW5lIFhEcmF3U2VnbWVudHMgWERSQVdTRUdNRU5UUworI2RlZmluZSBYRHJhd1N0cmluZyBYRFJBV1NUUklORworI2RlZmluZSBYRHJhd1N0cmluZzE2IFhEUkFXU1RSSU5HMTYKKyNkZWZpbmUgWEVtcHR5UmVnaW9uIFhFTVBUWVJFR0lPTgorI2RlZmluZSBYRXF1YWxSZWdpb24gWEVRVUFMUkVHSU9OCisjZGVmaW5lIFhFdmVudHNRdWV1ZWQgWEVWRU5UU1FVRVVFRAorI2RlZmluZSBYRXh0ZW50c09mRm9udFNldCBYRVhURU5UU09GRk9OVFNFVAorI2RlZmluZSBYRmV0Y2hCdWZmZXIgWEZFVENIQlVGRkVSCisjZGVmaW5lIFhGaWxsQXJjIFhGSUxMQVJDCisjZGVmaW5lIFhGaWxsUG9seWdvbiBYRklMTFBPTFlHT04KKyNkZWZpbmUgWEZpbGxSZWN0YW5nbGUgWEZJTExSRUNUQU5HTEUKKyNkZWZpbmUgWEZpbGxSZWN0YW5nbGVzIFhGSUxMUkVDVEFOR0xFUworI2RlZmluZSBYRmlsdGVyRXZlbnQgWEZJTFRFUkVWRU5UCisjZGVmaW5lIFhGbHVzaCBYRkxVU0gKKyNkZWZpbmUgWEZvbnRzT2ZGb250U2V0IFhGT05UU09GRk9OVFNFVAorI2RlZmluZSBYRnJlZSBYRlJFRQorI2RlZmluZSBYRnJlZUNvbG9ybWFwIFhGUkVFQ09MT1JNQVAKKyNkZWZpbmUgWEZyZWVDb2xvcnMgWEZSRUVDT0xPUlMKKyNkZWZpbmUgWEZyZWVDdXJzb3IgWEZSRUVDVVJTT1IKKyNkZWZpbmUgWEZyZWVGb250IFhGUkVFRk9OVAorI2RlZmluZSBYRnJlZUZvbnRJbmZvIFhGUkVFRk9OVElORk8KKyNkZWZpbmUgWEZyZWVGb250TmFtZXMgWEZSRUVGT05UTkFNRVMKKyNkZWZpbmUgWEZyZWVGb250U2V0IFhGUkVFRk9OVFNFVAorI2RlZmluZSBYRnJlZUdDIFhGUkVFR0MKKyNkZWZpbmUgWEZyZWVNb2RpZmllcm1hcCBYRlJFRU1PRElGSUVSTUFQCisjZGVmaW5lIFhGcmVlUGl4bWFwIFhGUkVFUElYTUFQCisjZGVmaW5lIFhGcmVlU3RyaW5nTGlzdCBYRlJFRVNUUklOR0xJU1QKKyNkZWZpbmUgWEdldEF0b21OYW1lIFhHRVRBVE9NTkFNRQorI2RlZmluZSBYR2V0RGVmYXVsdCBYR0VUREVGQVVMVAorI2RlZmluZSBYR2V0RXJyb3JEYXRhYmFzZVRleHQgWEdFVEVSUk9SREFUQUJBU0VURVhUCisjZGVmaW5lIFhHZXRFcnJvclRleHQgWEdFVEVSUk9SVEVYVAorI2RlZmluZSBYR2V0Rm9udFByb3BlcnR5IFhHRVRGT05UUFJPUEVSVFkKKyNkZWZpbmUgWEdldEdDVmFsdWVzIFhHRVRHQ1ZBTFVFUworI2RlZmluZSBYR2V0R2VvbWV0cnkgWEdFVEdFT01FVFJZCisjZGVmaW5lIFhHZXRJY29uU2l6ZXMgWEdFVElDT05TSVpFUworI2RlZmluZSBYR2V0SUNWYWx1ZXMgWEdFVElDVkFMVUVTCisjZGVmaW5lIFhHZXRJTVZhbHVlcyBYR0VUSU1WQUxVRVMKKyNkZWZpbmUgWEdldEltYWdlIFhHRVRJTUFHRQorI2RlZmluZSBYR2V0S2V5Ym9hcmRDb250cm9sIFhHRVRLRVlCT0FSRENPTlRST0wKKyNkZWZpbmUgWEdldE1vZGlmaWVyTWFwcGluZyBYR0VUTU9ESUZJRVJNQVBQSU5HCisjZGVmaW5lIFhHZXRNb3Rpb25FdmVudHMgWEdFVE1PVElPTkVWRU5UUworI2RlZmluZSBYR2V0Tm9ybWFsSGludHMgWEdFVE5PUk1BTEhJTlRTCisjZGVmaW5lIFhHZXRTZWxlY3Rpb25Pd25lciBYR0VUU0VMRUNUSU9OT1dORVIKKyNkZWZpbmUgWEdldFN1YkltYWdlIFhHRVRTVUJJTUFHRQorI2RlZmluZSBYR2V0VmlzdWFsSW5mbyBYR0VUVklTVUFMSU5GTworI2RlZmluZSBYR2V0V01Db2xvcm1hcFdpbmRvd3MgWEdFVFdNQ09MT1JNQVBXSU5ET1dTCisjZGVmaW5lIFhHZXRXTVByb3RvY29scyBYR0VUV01QUk9UT0NPTFMKKyNkZWZpbmUgWEdldFdNSGludHMgWEdFVFdNSElOVFMKKyNkZWZpbmUgWEdldFdNTmFtZSBYR0VUV01OQU1FCisjZGVmaW5lIFhHZXRXTU5vcm1hbEhpbnRzIFhHRVRXTU5PUk1BTEhJTlRTCisjZGVmaW5lIFhHZXRXaW5kb3dBdHRyaWJ1dGVzIFhHRVRXSU5ET1dBVFRSSUJVVEVTCisjZGVmaW5lIFhHZXRXaW5kb3dQcm9wZXJ0eSBYR0VUV0lORE9XUFJPUEVSVFkKKyNkZWZpbmUgWEdyYWJLZXlib2FyZCBYR1JBQktFWUJPQVJECisjZGVmaW5lIFhHcmFiUG9pbnRlciBYR1JBQlBPSU5URVIKKyNkZWZpbmUgWEdyYWJTZXJ2ZXIgWEdSQUJTRVJWRVIKKyNkZWZpbmUgWEhlaWdodE9mU2NyZWVuIFhIRUlHSFRPRlNDUkVFTgorI2RlZmluZSBYSWNvbmlmeVdpbmRvdyBYSUNPTklGWVdJTkRPVworI2RlZmluZSBYSWZFdmVudCBYSUZFVkVOVAorI2RlZmluZSBYSW50ZXJuQXRvbSBYSU5URVJOQVRPTQorI2RlZmluZSBYSW50ZXJzZWN0UmVnaW9uIFhJTlRFUlNFQ1RSRUdJT04KKyNkZWZpbmUgWEtleWNvZGVUb0tleXN5bSBYS0VZQ09ERVRPS0VZU1lNCisjZGVmaW5lIFhLZXlzeW1Ub0tleWNvZGUgWEtFWVNZTVRPS0VZQ09ERQorI2RlZmluZSBYS2V5c3ltVG9TdHJpbmcgWEtFWVNZTVRPU1RSSU5HCisjZGVmaW5lIFhMaXN0Rm9udHMgWExJU1RGT05UUworI2RlZmluZSBYTGlzdEZvbnRzV2l0aEluZm8gWExJU1RGT05UU1dJVEhJTkZPCisjZGVmaW5lIFhMaXN0UGl4bWFwRm9ybWF0cyBYTElTVFBJWE1BUEZPUk1BVFMKKyNkZWZpbmUgWExpc3RQcm9wZXJ0aWVzIFhMSVNUUFJPUEVSVElFUworI2RlZmluZSBYTG9hZFF1ZXJ5Rm9udCBYTE9BRFFVRVJZRk9OVAorI2RlZmluZSBYTG9va3VwU3RyaW5nIFhMT09LVVBTVFJJTkcKKyNkZWZpbmUgWExvd2VyV2luZG93IFhMT1dFUldJTkRPVworI2RlZmluZSBYTWFwUmFpc2VkIFhNQVBSQUlTRUQKKyNkZWZpbmUgWE1hcFdpbmRvdyBYTUFQV0lORE9XCisjZGVmaW5lIFhNYXRjaFZpc3VhbEluZm8gWE1BVENIVklTVUFMSU5GTworI2RlZmluZSBYTW92ZVJlc2l6ZVdpbmRvdyBYTU9WRVJFU0laRVdJTkRPVworI2RlZmluZSBYTW92ZVdpbmRvdyBYTU9WRVdJTkRPVworI2RlZmluZSBYTmV4dEV2ZW50IFhORVhURVZFTlQKKyNkZWZpbmUgWE9mZnNldFJlZ2lvbiBYT0ZGU0VUUkVHSU9OCisjZGVmaW5lIFhPcGVuRGlzcGxheSBYT1BFTkRJU1BMQVkKKyNkZWZpbmUgWE9wZW5JTSBYT1BFTklNCisjZGVmaW5lIFhQYXJzZUNvbG9yIFhQQVJTRUNPTE9SCisjZGVmaW5lIFhQYXJzZUdlb21ldHJ5IFhQQVJTRUdFT01FVFJZCisjZGVmaW5lIFhQZWVrRXZlbnQgWFBFRUtFVkVOVAorI2RlZmluZSBYUGVuZGluZyBYUEVORElORworI2RlZmluZSBYUG9pbnRJblJlZ2lvbiBYUE9JTlRJTlJFR0lPTgorI2RlZmluZSBYUG9seWdvblJlZ2lvbiBYUE9MWUdPTlJFR0lPTgorI2RlZmluZSBYUHV0QmFja0V2ZW50IFhQVVRCQUNLRVZFTlQKKyNkZWZpbmUgWFB1dEltYWdlIFhQVVRJTUFHRQorI2RlZmluZSBYUm9vdFdpbmRvdyBYUk9PVFdJTkRPVworI2RlZmluZSBYUXVlcnlDb2xvciBYUVVFUllDT0xPUgorI2RlZmluZSBYUXVlcnlDb2xvcnMgWFFVRVJZQ09MT1JTCisjZGVmaW5lIFhRdWVyeUV4dGVuc2lvbiBYUVVFUllFWFRFTlNJT04KKyNkZWZpbmUgWFF1ZXJ5UG9pbnRlciBYUVVFUllQT0lOVEVSCisjZGVmaW5lIFhRdWVyeVRyZWUgWFFVRVJZVFJFRQorI2RlZmluZSBYUmFpc2VXaW5kb3cgWFJBSVNFV0lORE9XCisjZGVmaW5lIFhSZWNvbmZpZ3VyZVdNV2luZG93IFhSRUNPTkZJR1VSRVdNV0lORE9XCisjZGVmaW5lIFhSZWN0SW5SZWdpb24gWFJFQ1RJTlJFR0lPTgorI2RlZmluZSBYUmVmcmVzaEtleWJvYXJkTWFwcGluZyBYUkVGUkVTSEtFWUJPQVJETUFQUElORworI2RlZmluZSBYUmVwYXJlbnRXaW5kb3cgWFJFUEFSRU5UV0lORE9XCisjZGVmaW5lIFhSZXNpemVXaW5kb3cgWFJFU0laRVdJTkRPVworI2RlZmluZSBYUmVzdGFja1dpbmRvd3MgWFJFU1RBQ0tXSU5ET1dTCisjZGVmaW5lIFhSb290V2luZG93T2ZTY3JlZW4gWFJPT1RXSU5ET1dPRlNDUkVFTgorI2RlZmluZSBYU2NyZWVuTnVtYmVyT2ZTY3JlZW4gWFNDUkVFTk5VTUJFUk9GU0NSRUVOCisjZGVmaW5lIFhTZWxlY3RBc3luY0V2ZW50IFhTRUxFQ1RBU1lOQ0VWRU5UCisjZGVmaW5lIFhTZWxlY3RBc3luY0lucHV0IFhTRUxFQ1RBU1lOQ0lOUFVUCisjZGVmaW5lIFhTZWxlY3RJbnB1dCBYU0VMRUNUSU5QVVQKKyNkZWZpbmUgWFNlbmRFdmVudCBYU0VOREVWRU5UCisjZGVmaW5lIFhTZXJ2ZXJWZW5kb3IgWFNFUlZFUlZFTkRPUgorI2RlZmluZSBYU2V0QmFja2dyb3VuZCBYU0VUQkFDS0dST1VORAorI2RlZmluZSBYU2V0Q2xhc3NIaW50IFhTRVRDTEFTU0hJTlQKKyNkZWZpbmUgWFNldENsaXBNYXNrIFhTRVRDTElQTUFTSworI2RlZmluZSBYU2V0Q2xpcE9yaWdpbiBYU0VUQ0xJUE9SSUdJTgorI2RlZmluZSBYU2V0Q2xpcFJlY3RhbmdsZXMgWFNFVENMSVBSRUNUQU5HTEVTCisjZGVmaW5lIFhTZXRDbG9zZURvd25Nb2RlIFhTRVRDTE9TRURPV05NT0RFCisjZGVmaW5lIFhTZXRDb21tYW5kIFhTRVRDT01NQU5ECisjZGVmaW5lIFhTZXREYXNoZXMgWFNFVERBU0hFUworI2RlZmluZSBYU2V0RXJyb3JIYW5kbGVyIFhTRVRFUlJPUkhBTkRMRVIKKyNkZWZpbmUgWFNldEZpbGxTdHlsZSBYU0VURklMTFNUWUxFCisjZGVmaW5lIFhTZXRGb250IFhTRVRGT05UCisjZGVmaW5lIFhTZXRGb3JlZ3JvdW5kIFhTRVRGT1JFR1JPVU5ECisjZGVmaW5lIFhTZXRGdW5jdGlvbiBYU0VURlVOQ1RJT04KKyNkZWZpbmUgWFNldEdyYXBoaWNzRXhwb3N1cmVzIFhTRVRHUkFQSElDU0VYUE9TVVJFUworI2RlZmluZSBYU2V0SUNGb2N1cyBYU0VUSUNGT0NVUworI2RlZmluZSBYU2V0SUNWYWx1ZXMgWFNFVElDVkFMVUVTCisjZGVmaW5lIFhTZXRJT0Vycm9ySGFuZGxlciBYU0VUSU9FUlJPUkhBTkRMRVIKKyNkZWZpbmUgWFNldElucHV0Rm9jdXMgWFNFVElOUFVURk9DVVMKKyNkZWZpbmUgWFNldExpbmVBdHRyaWJ1dGVzIFhTRVRMSU5FQVRUUklCVVRFUworI2RlZmluZSBYU2V0TG9jYWxlTW9kaWZpZXJzIFhTRVRMT0NBTEVNT0RJRklFUlMKKyNkZWZpbmUgWFNldE5vcm1hbEhpbnRzIFhTRVROT1JNQUxISU5UUworI2RlZmluZSBYU2V0UmVnaW9uIFhTRVRSRUdJT04KKyNkZWZpbmUgWFNldFNlbGVjdGlvbk93bmVyIFhTRVRTRUxFQ1RJT05PV05FUgorI2RlZmluZSBYU2V0U3RpcHBsZSBYU0VUU1RJUFBMRQorI2RlZmluZSBYU2V0U3Vid2luZG93TW9kZSBYU0VUU1VCV0lORE9XTU9ERQorI2RlZmluZSBYU2V0VFNPcmlnaW4gWFNFVFRTT1JJR0lOCisjZGVmaW5lIFhTZXRUaWxlIFhTRVRUSUxFCisjZGVmaW5lIFhTZXRUcmFuc2llbnRGb3JIaW50IFhTRVRUUkFOU0lFTlRGT1JISU5UCisjZGVmaW5lIFhTZXRXTUNvbG9ybWFwV2luZG93cyBYU0VUV01DT0xPUk1BUFdJTkRPV1MKKyNkZWZpbmUgWFNldFdNSGludHMgWFNFVFdNSElOVFMKKyNkZWZpbmUgWFNldFdNSWNvbk5hbWUgWFNFVFdNSUNPTk5BTUUKKyNkZWZpbmUgWFNldFdNTmFtZSBYU0VUV01OQU1FCisjZGVmaW5lIFhTZXRXTU5vcm1hbEhpbnRzIFhTRVRXTU5PUk1BTEhJTlRTCisjZGVmaW5lIFhTZXRXTVByb3BlcnRpZXMgWFNFVFdNUFJPUEVSVElFUworI2RlZmluZSBYU2V0V01Qcm90b2NvbHMgWFNFVFdNUFJPVE9DT0xTCisjZGVmaW5lIFhTZXRXaW5kb3dCYWNrZ3JvdW5kIFhTRVRXSU5ET1dCQUNLR1JPVU5ECisjZGVmaW5lIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwIFhTRVRXSU5ET1dCQUNLR1JPVU5EUElYTUFQCisjZGVmaW5lIFhTZXRXaW5kb3dDb2xvcm1hcCBYU0VUV0lORE9XQ09MT1JNQVAKKyNkZWZpbmUgWFNoYXBlQ29tYmluZU1hc2sgWFNIQVBFQ09NQklORU1BU0sKKyNkZWZpbmUgWFNoYXBlQ29tYmluZVJlY3RhbmdsZXMgWFNIQVBFQ09NQklORVJFQ1RBTkdMRVMKKyNkZWZpbmUgWFNoYXBlR2V0UmVjdGFuZ2xlcyBYU0hBUEVHRVRSRUNUQU5HTEVTCisjZGVmaW5lIFhTaHJpbmtSZWdpb24gWFNIUklOS1JFR0lPTgorI2RlZmluZSBYU3RvcmVDb2xvciBYU1RPUkVDT0xPUgorI2RlZmluZSBYU3RvcmVDb2xvcnMgWFNUT1JFQ09MT1JTCisjZGVmaW5lIFhTdG9yZU5hbWUgWFNUT1JFTkFNRQorI2RlZmluZSBYU3RyaW5nVG9LZXlzeW0gWFNUUklOR1RPS0VZU1lNCisjZGVmaW5lIFhTdWJ0cmFjdFJlZ2lvbiBYU1VCVFJBQ1RSRUdJT04KKyNkZWZpbmUgWFN1cHBvcnRzTG9jYWxlIFhTVVBQT1JUU0xPQ0FMRQorI2RlZmluZSBYU3luYyBYU1lOQworI2RlZmluZSBYU3luY2hyb25pemUgWFNZTkNIUk9OSVpFCisjZGVmaW5lIFhUZXh0RXh0ZW50cyBYVEVYVEVYVEVOVFMKKyNkZWZpbmUgWFRleHRFeHRlbnRzMTYgWFRFWFRFWFRFTlRTMTYKKyNkZWZpbmUgWFRleHRXaWR0aCBYVEVYVFdJRFRICisjZGVmaW5lIFhUZXh0V2lkdGgxNiBYVEVYVFdJRFRIMTYKKyNkZWZpbmUgWFRyYW5zbGF0ZUNvb3JkaW5hdGVzIFhUUkFOU0xBVEVDT09SRElOQVRFUworI2RlZmluZSBYVW5kZWZpbmVDdXJzb3IgWFVOREVGSU5FQ1VSU09SCisjZGVmaW5lIFhVbmdyYWJLZXlib2FyZCBYVU5HUkFCS0VZQk9BUkQKKyNkZWZpbmUgWFVuZ3JhYlBvaW50ZXIgWFVOR1JBQlBPSU5URVIKKyNkZWZpbmUgWFVuZ3JhYlNlcnZlciBYVU5HUkFCU0VSVkVSCisjZGVmaW5lIFhVbmlvblJlY3RXaXRoUmVnaW9uIFhVTklPTlJFQ1RXSVRIUkVHSU9OCisjZGVmaW5lIFhVbmlvblJlZ2lvbiBYVU5JT05SRUdJT04KKyNkZWZpbmUgWFVubWFwV2luZG93IFhVTk1BUFdJTkRPVworI2RlZmluZSBfWFVucmVnaXN0ZXJGaWx0ZXIgX1hVTlJFR0lTVEVSRklMVEVSCisjZGVmaW5lIFhVbnNldElDRm9jdXMgWFVOU0VUSUNGT0NVUworI2RlZmluZSBYVmFDcmVhdGVOZXN0ZWRMaXN0IFhWQUNSRUFURU5FU1RFRExJU1QKKyNkZWZpbmUgWFZpc3VhbElERnJvbVZpc3VhbCBYVklTVUFMSURGUk9NVklTVUFMCisjZGVmaW5lIFhXYXJwUG9pbnRlciBYV0FSUFBPSU5URVIKKyNkZWZpbmUgWFdpZHRoT2ZTY3JlZW4gWFdJRFRIT0ZTQ1JFRU4KKyNkZWZpbmUgWFdpbmRvd0V2ZW50IFhXSU5ET1dFVkVOVAorI2RlZmluZSBYV2l0aGRyYXdXaW5kb3cgWFdJVEhEUkFXV0lORE9XCisjZGVmaW5lIFhYb3JSZWdpb24gWFhPUlJFR0lPTgorI2RlZmluZSBYbUFkZFByb3RvY29sQ2FsbGJhY2sgWE1BRERQUk9UT0NPTENBTExCQUNLCisjZGVmaW5lIFhtQWRkUHJvdG9jb2xzIFhNQUREUFJPVE9DT0xTCisjZGVmaW5lIFhtQ2hhbmdlQ29sb3IgWE1DSEFOR0VDT0xPUgorI2RlZmluZSBYbUNsaXBib2FyZENvcHkgWE1DTElQQk9BUkRDT1BZCisjZGVmaW5lIFhtQ2xpcGJvYXJkRW5kQ29weSBYTUNMSVBCT0FSREVORENPUFkKKyNkZWZpbmUgWG1DbGlwYm9hcmRJbnF1aXJlTGVuZ3RoIFhNQ0xJUEJPQVJESU5RVUlSRUxFTkdUSAorI2RlZmluZSBYbUNsaXBib2FyZExvY2sgWE1DTElQQk9BUkRMT0NLCisjZGVmaW5lIFhtQ2xpcGJvYXJkUmV0cmlldmUgWE1DTElQQk9BUkRSRVRSSUVWRQorI2RlZmluZSBYbUNsaXBib2FyZFN0YXJ0Q29weSBYTUNMSVBCT0FSRFNUQVJUQ09QWQorI2RlZmluZSBYbUNsaXBib2FyZFVubG9jayBYTUNMSVBCT0FSRFVOTE9DSworI2RlZmluZSBYbUNyZWF0ZUFycm93QnV0dG9uIFhNQ1JFQVRFQVJST1dCVVRUT04KKyNkZWZpbmUgWG1DcmVhdGVBcnJvd0J1dHRvbkdhZGdldCBYTUNSRUFURUFSUk9XQlVUVE9OR0FER0VUCisjZGVmaW5lIFhtQ3JlYXRlQ2FzY2FkZUJ1dHRvbiBYTUNSRUFURUNBU0NBREVCVVRUT04KKyNkZWZpbmUgWG1DcmVhdGVEaWFsb2dTaGVsbCBYTUNSRUFURURJQUxPR1NIRUxMCisjZGVmaW5lIFhtQ3JlYXRlRHJhZ0ljb24gWE1DUkVBVEVEUkFHSUNPTgorI2RlZmluZSBYbUNyZWF0ZURyYXdpbmdBcmVhIFhNQ1JFQVRFRFJBV0lOR0FSRUEKKyNkZWZpbmUgWG1DcmVhdGVEcmF3bkJ1dHRvbiBYTUNSRUFURURSQVdOQlVUVE9OCisjZGVmaW5lIFhtQ3JlYXRlRmlsZVNlbGVjdGlvbkJveCBYTUNSRUFURUZJTEVTRUxFQ1RJT05CT1gKKyNkZWZpbmUgWG1DcmVhdGVGaWxlU2VsZWN0aW9uRGlhbG9nIFhNQ1JFQVRFRklMRVNFTEVDVElPTkRJQUxPRworI2RlZmluZSBYbUNyZWF0ZUZvcm0gWE1DUkVBVEVGT1JNCisjZGVmaW5lIFhtQ3JlYXRlRm9ybURpYWxvZyBYTUNSRUFURUZPUk1ESUFMT0cKKyNkZWZpbmUgWG1DcmVhdGVGcmFtZSBYTUNSRUFURUZSQU1FCisjZGVmaW5lIFhtQ3JlYXRlSW5mb3JtYXRpb25EaWFsb2cgWE1DUkVBVEVJTkZPUk1BVElPTkRJQUxPRworI2RlZmluZSBYbUNyZWF0ZUxhYmVsR2FkZ2V0IFhNQ1JFQVRFTEFCRUxHQURHRVQKKyNkZWZpbmUgWG1DcmVhdGVNYWluV2luZG93IFhNQ1JFQVRFTUFJTldJTkRPVworI2RlZmluZSBYbUNyZWF0ZU1lbnVCYXIgWE1DUkVBVEVNRU5VQkFSCisjZGVmaW5lIFhtQ3JlYXRlTWVzc2FnZUJveCBYTUNSRUFURU1FU1NBR0VCT1gKKyNkZWZpbmUgWG1DcmVhdGVNZXNzYWdlRGlhbG9nIFhNQ1JFQVRFTUVTU0FHRURJQUxPRworI2RlZmluZSBYbUNyZWF0ZU9wdGlvbk1lbnUgWE1DUkVBVEVPUFRJT05NRU5VCisjZGVmaW5lIFhtQ3JlYXRlUGFuZWRXaW5kb3cgWE1DUkVBVEVQQU5FRFdJTkRPVworI2RlZmluZSBYbUNyZWF0ZVBvcHVwTWVudSBYTUNSRUFURVBPUFVQTUVOVQorI2RlZmluZSBYbUNyZWF0ZVByb21wdERpYWxvZyBYTUNSRUFURVBST01QVERJQUxPRworI2RlZmluZSBYbUNyZWF0ZVB1bGxkb3duTWVudSBYTUNSRUFURVBVTExET1dOTUVOVQorI2RlZmluZSBYbUNyZWF0ZVB1c2hCdXR0b24gWE1DUkVBVEVQVVNIQlVUVE9OCisjZGVmaW5lIFhtQ3JlYXRlUHVzaEJ1dHRvbkdhZGdldCBYTUNSRUFURVBVU0hCVVRUT05HQURHRVQKKyNkZWZpbmUgWG1DcmVhdGVRdWVzdGlvbkRpYWxvZyBYTUNSRUFURVFVRVNUSU9ORElBTE9HCisjZGVmaW5lIFhtQ3JlYXRlUmFkaW9Cb3ggWE1DUkVBVEVSQURJT0JPWAorI2RlZmluZSBYbUNyZWF0ZVJvd0NvbHVtbiBYTUNSRUFURVJPV0NPTFVNTgorI2RlZmluZSBYbUNyZWF0ZVNjYWxlIFhNQ1JFQVRFU0NBTEUKKyNkZWZpbmUgWG1DcmVhdGVTY3JvbGxCYXIgWE1DUkVBVEVTQ1JPTExCQVIKKyNkZWZpbmUgWG1DcmVhdGVTY3JvbGxlZExpc3QgWE1DUkVBVEVTQ1JPTExFRExJU1QKKyNkZWZpbmUgWG1DcmVhdGVTY3JvbGxlZFRleHQgWE1DUkVBVEVTQ1JPTExFRFRFWFQKKyNkZWZpbmUgWG1DcmVhdGVTY3JvbGxlZFdpbmRvdyBYTUNSRUFURVNDUk9MTEVEV0lORE9XCisjZGVmaW5lIFhtQ3JlYXRlU2VsZWN0aW9uRGlhbG9nIFhNQ1JFQVRFU0VMRUNUSU9ORElBTE9HCisjZGVmaW5lIFhtQ3JlYXRlU2VwYXJhdG9yIFhNQ1JFQVRFU0VQQVJBVE9SCisjZGVmaW5lIFhtQ3JlYXRlU2VwYXJhdG9yR2FkZ2V0IFhNQ1JFQVRFU0VQQVJBVE9SR0FER0VUCisjZGVmaW5lIFhtQ3JlYXRlVGVtcGxhdGVEaWFsb2cgWE1DUkVBVEVURU1QTEFURURJQUxPRworI2RlZmluZSBYbUNyZWF0ZVRleHQgWE1DUkVBVEVURVhUCisjZGVmaW5lIFhtQ3JlYXRlVGV4dEZpZWxkIFhNQ1JFQVRFVEVYVEZJRUxECisjZGVmaW5lIFhtQ3JlYXRlVG9nZ2xlQnV0dG9uIFhNQ1JFQVRFVE9HR0xFQlVUVE9OCisjZGVmaW5lIFhtQ3JlYXRlVG9nZ2xlQnV0dG9uR2FkZ2V0IFhNQ1JFQVRFVE9HR0xFQlVUVE9OR0FER0VUCisjZGVmaW5lIFhtRHJhZ1N0YXJ0IFhNRFJBR1NUQVJUCisjZGVmaW5lIFhtRHJvcFNpdGVSZWdpc3RlciBYTURST1BTSVRFUkVHSVNURVIKKyNkZWZpbmUgWG1Ecm9wU2l0ZVVucmVnaXN0ZXIgWE1EUk9QU0lURVVOUkVHSVNURVIKKyNkZWZpbmUgWG1Ecm9wU2l0ZVVwZGF0ZSBYTURST1BTSVRFVVBEQVRFCisjZGVmaW5lIFhtRHJvcFRyYW5zZmVyU3RhcnQgWE1EUk9QVFJBTlNGRVJTVEFSVAorI2RlZmluZSBYbUZpbGVTZWxlY3Rpb25Cb3hHZXRDaGlsZCBYTUZJTEVTRUxFQ1RJT05CT1hHRVRDSElMRAorI2RlZmluZSBYbUZpbGVTZWxlY3Rpb25Eb1NlYXJjaCBYTUZJTEVTRUxFQ1RJT05ET1NFQVJDSAorI2RlZmluZSBYbUZvbnRMaXN0QXBwZW5kRW50cnkgWE1GT05UTElTVEFQUEVOREVOVFJZCisjZGVmaW5lIFhtRm9udExpc3RDb3B5IFhNRk9OVExJU1RDT1BZCisjZGVmaW5lIFhtRm9udExpc3RDcmVhdGUgWE1GT05UTElTVENSRUFURQorI2RlZmluZSBYbUZvbnRMaXN0RW50cnlDcmVhdGUgWE1GT05UTElTVEVOVFJZQ1JFQVRFCisjZGVmaW5lIFhtRm9udExpc3RFbnRyeUZyZWUgWE1GT05UTElTVEVOVFJZRlJFRQorI2RlZmluZSBYbUZvbnRMaXN0RW50cnlHZXRGb250IFhNRk9OVExJU1RFTlRSWUdFVEZPTlQKKyNkZWZpbmUgWG1Gb250TGlzdEVudHJ5R2V0VGFnIFhNRk9OVExJU1RFTlRSWUdFVFRBRworI2RlZmluZSBYbUZvbnRMaXN0RW50cnlMb2FkIFhNRk9OVExJU1RFTlRSWUxPQUQKKyNkZWZpbmUgWG1Gb250TGlzdEZyZWUgWE1GT05UTElTVEZSRUUKKyNkZWZpbmUgWG1Gb250TGlzdEZyZWVGb250Q29udGV4dCBYTUZPTlRMSVNURlJFRUZPTlRDT05URVhUCisjZGVmaW5lIFhtRm9udExpc3RHZXROZXh0Rm9udCBYTUZPTlRMSVNUR0VUTkVYVEZPTlQKKyNkZWZpbmUgWG1Gb250TGlzdEluaXRGb250Q29udGV4dCBYTUZPTlRMSVNUSU5JVEZPTlRDT05URVhUCisjZGVmaW5lIFhtRm9udExpc3ROZXh0RW50cnkgWE1GT05UTElTVE5FWFRFTlRSWQorI2RlZmluZSBYbUdldENvbG9ycyBYTUdFVENPTE9SUworI2RlZmluZSBYbUdldEZvY3VzV2lkZ2V0IFhNR0VURk9DVVNXSURHRVQKKyNkZWZpbmUgWG1HZXRNZW51Q3Vyc29yIFhNR0VUTUVOVUNVUlNPUgorI2RlZmluZSBYbUdldFBpeG1hcEJ5RGVwdGggWE1HRVRQSVhNQVBCWURFUFRICisjZGVmaW5lIFhtR2V0VGVhck9mZkNvbnRyb2wgWE1HRVRURUFST0ZGQ09OVFJPTAorI2RlZmluZSBYbUdldFhtRGlzcGxheSBYTUdFVFhNRElTUExBWQorI2RlZmluZSBYbUltTWJMb29rdXBTdHJpbmcgWE1JTU1CTE9PS1VQU1RSSU5HCisjZGVmaW5lIFhtSW1SZWdpc3RlciBYTUlNUkVHSVNURVIKKyNkZWZpbmUgWG1JbVNldEZvY3VzVmFsdWVzIFhNSU1TRVRGT0NVU1ZBTFVFUworI2RlZmluZSBYbUltU2V0VmFsdWVzIFhNSU1TRVRWQUxVRVMKKyNkZWZpbmUgWG1JbVVucmVnaXN0ZXIgWE1JTVVOUkVHSVNURVIKKyNkZWZpbmUgWG1JbVVuc2V0Rm9jdXMgWE1JTVVOU0VURk9DVVMKKyNkZWZpbmUgWG1JbnRlcm5BdG9tIFhNSU5URVJOQVRPTQorI2RlZmluZSBYbUlzTW90aWZXTVJ1bm5pbmcgWE1JU01PVElGV01SVU5OSU5HCisjZGVmaW5lIFhtTGlzdEFkZEl0ZW0gWE1MSVNUQURESVRFTQorI2RlZmluZSBYbUxpc3RBZGRJdGVtVW5zZWxlY3RlZCBYTUxJU1RBRERJVEVNVU5TRUxFQ1RFRAorI2RlZmluZSBYbUxpc3RBZGRJdGVtc1Vuc2VsZWN0ZWQgWE1MSVNUQURESVRFTVNVTlNFTEVDVEVECisjZGVmaW5lIFhtTGlzdERlbGV0ZUFsbEl0ZW1zIFhNTElTVERFTEVURUFMTElURU1TCisjZGVmaW5lIFhtTGlzdERlbGV0ZUl0ZW1zUG9zIFhNTElTVERFTEVURUlURU1TUE9TCisjZGVmaW5lIFhtTGlzdERlbGV0ZVBvcyBYTUxJU1RERUxFVEVQT1MKKyNkZWZpbmUgWG1MaXN0RGVzZWxlY3RBbGxJdGVtcyBYTUxJU1RERVNFTEVDVEFMTElURU1TCisjZGVmaW5lIFhtTGlzdERlc2VsZWN0UG9zIFhNTElTVERFU0VMRUNUUE9TCisjZGVmaW5lIFhtTGlzdEdldEtiZEl0ZW1Qb3MgWE1MSVNUR0VUS0JESVRFTVBPUworI2RlZmluZSBYbUxpc3RHZXRNYXRjaFBvcyBYTUxJU1RHRVRNQVRDSFBPUworI2RlZmluZSBYbUxpc3RHZXRTZWxlY3RlZFBvcyBYTUxJU1RHRVRTRUxFQ1RFRFBPUworI2RlZmluZSBYbUxpc3RQb3NTZWxlY3RlZCBYTUxJU1RQT1NTRUxFQ1RFRAorI2RlZmluZSBYbUxpc3RTZWxlY3RJdGVtIFhNTElTVFNFTEVDVElURU0KKyNkZWZpbmUgWG1MaXN0U2VsZWN0UG9zIFhNTElTVFNFTEVDVFBPUworI2RlZmluZSBYbUxpc3RTZXRCb3R0b21Qb3MgWE1MSVNUU0VUQk9UVE9NUE9TCisjZGVmaW5lIFhtTGlzdFNldEl0ZW0gWE1MSVNUU0VUSVRFTQorI2RlZmluZSBYbUxpc3RTZXRLYmRJdGVtUG9zIFhNTElTVFNFVEtCRElURU1QT1MKKyNkZWZpbmUgWG1MaXN0U2V0UG9zIFhNTElTVFNFVFBPUworI2RlZmluZSBYbU1haW5XaW5kb3dTZXRBcmVhcyBYTU1BSU5XSU5ET1dTRVRBUkVBUworI2RlZmluZSBYbU1lbnVQb3NpdGlvbiBYTU1FTlVQT1NJVElPTgorI2RlZmluZSBYbU1lc3NhZ2VCb3hHZXRDaGlsZCBYTU1FU1NBR0VCT1hHRVRDSElMRAorI2RlZmluZSBYbU9wdGlvbkJ1dHRvbkdhZGdldCBYTU9QVElPTkJVVFRPTkdBREdFVAorI2RlZmluZSBYbU9wdGlvbkxhYmVsR2FkZ2V0IFhNT1BUSU9OTEFCRUxHQURHRVQKKyNkZWZpbmUgWG1Qcm9jZXNzVHJhdmVyc2FsIFhNUFJPQ0VTU1RSQVZFUlNBTAorI2RlZmluZSBYbVFtb3RpZiBYTVFNT1RJRgorI2RlZmluZSBYbVJlbW92ZVByb3RvY29sQ2FsbGJhY2sgWE1SRU1PVkVQUk9UT0NPTENBTExCQUNLCisjZGVmaW5lIFhtUmVwVHlwZUdldElkIFhNUkVQVFlQRUdFVElECisjZGVmaW5lIFhtUmVwVHlwZUdldFJlY29yZCBYTVJFUFRZUEVHRVRSRUNPUkQKKyNkZWZpbmUgWG1SZXBUeXBlUmVnaXN0ZXIgWE1SRVBUWVBFUkVHSVNURVIKKyNkZWZpbmUgWG1SZXBUeXBlVmFsaWRWYWx1ZSBYTVJFUFRZUEVWQUxJRFZBTFVFCisjZGVmaW5lIFhtU2Nyb2xsQmFyU2V0VmFsdWVzIFhNU0NST0xMQkFSU0VUVkFMVUVTCisjZGVmaW5lIFhtU2Nyb2xsZWRXaW5kb3dTZXRBcmVhcyBYTVNDUk9MTEVEV0lORE9XU0VUQVJFQVMKKyNkZWZpbmUgWG1TZWxlY3Rpb25Cb3hHZXRDaGlsZCBYTVNFTEVDVElPTkJPWEdFVENISUxECisjZGVmaW5lIFhtU3RyaW5nQnl0ZUNvbXBhcmUgWE1TVFJJTkdCWVRFQ09NUEFSRQorI2RlZmluZSBYbVN0cmluZ0NvbXBhcmUgWE1TVFJJTkdDT01QQVJFCisjZGVmaW5lIFhtU3RyaW5nQ29uY2F0IFhNU1RSSU5HQ09OQ0FUCisjZGVmaW5lIFhtU3RyaW5nQ29weSBYTVNUUklOR0NPUFkKKyNkZWZpbmUgWG1TdHJpbmdDcmVhdGUgWE1TVFJJTkdDUkVBVEUKKyNkZWZpbmUgWG1TdHJpbmdDcmVhdGVMb2NhbGl6ZWQgWE1TVFJJTkdDUkVBVEVMT0NBTElaRUQKKyNkZWZpbmUgWG1TdHJpbmdDcmVhdGVMdG9SIFhNU1RSSU5HQ1JFQVRFTFRPUgorI2RlZmluZSBYbVN0cmluZ0NyZWF0ZVNpbXBsZSBYTVNUUklOR0NSRUFURVNJTVBMRQorI2RlZmluZSBYbVN0cmluZ0RyYXcgWE1TVFJJTkdEUkFXCisjZGVmaW5lIFhtU3RyaW5nRHJhd1VuZGVybGluZSBYTVNUUklOR0RSQVdVTkRFUkxJTkUKKyNkZWZpbmUgWG1TdHJpbmdFeHRlbnQgWE1TVFJJTkdFWFRFTlQKKyNkZWZpbmUgWG1TdHJpbmdGcmVlIFhNU1RSSU5HRlJFRQorI2RlZmluZSBYbVN0cmluZ0ZyZWVDb250ZXh0IFhNU1RSSU5HRlJFRUNPTlRFWFQKKyNkZWZpbmUgWG1TdHJpbmdHZXRMdG9SIFhNU1RSSU5HR0VUTFRPUgorI2RlZmluZSBYbVN0cmluZ0dldE5leHRDb21wb25lbnQgWE1TVFJJTkdHRVRORVhUQ09NUE9ORU5UCisjZGVmaW5lIFhtU3RyaW5nR2V0TmV4dFNlZ21lbnQgWE1TVFJJTkdHRVRORVhUU0VHTUVOVAorI2RlZmluZSBYbVN0cmluZ0luaXRDb250ZXh0IFhNU1RSSU5HSU5JVENPTlRFWFQKKyNkZWZpbmUgWG1TdHJpbmdMZW5ndGggWE1TVFJJTkdMRU5HVEgKKyNkZWZpbmUgWG1TdHJpbmdMdG9SQ3JlYXRlIFhNU1RSSU5HTFRPUkNSRUFURQorI2RlZmluZSBYbVN0cmluZ05Db25jYXQgWE1TVFJJTkdOQ09OQ0FUCisjZGVmaW5lIFhtU3RyaW5nU2VnbWVudENyZWF0ZSBYTVNUUklOR1NFR01FTlRDUkVBVEUKKyNkZWZpbmUgWG1TdHJpbmdXaWR0aCBYTVNUUklOR1dJRFRICisjZGVmaW5lIFhtVGV4dENsZWFyU2VsZWN0aW9uIFhNVEVYVENMRUFSU0VMRUNUSU9OCisjZGVmaW5lIFhtVGV4dEZpZWxkR2V0RWRpdGFibGUgWE1URVhURklFTERHRVRFRElUQUJMRQorI2RlZmluZSBYbVRleHRGaWVsZEdldEluc2VydGlvblBvc2l0aW9uIFhNVEVYVEZJRUxER0VUSU5TRVJUSU9OUE9TSVRJT04KKyNkZWZpbmUgWG1UZXh0RmllbGRHZXRMYXN0UG9zaXRpb24gWE1URVhURklFTERHRVRMQVNUUE9TSVRJT04KKyNkZWZpbmUgWG1UZXh0RmllbGRHZXRTZWxlY3Rpb24gWE1URVhURklFTERHRVRTRUxFQ1RJT04KKyNkZWZpbmUgWG1UZXh0RmllbGRHZXRTdHJpbmcgWE1URVhURklFTERHRVRTVFJJTkcKKyNkZWZpbmUgWG1UZXh0RmllbGRJbnNlcnQgWE1URVhURklFTERJTlNFUlQKKyNkZWZpbmUgWG1UZXh0RmllbGRSZW1vdmUgWE1URVhURklFTERSRU1PVkUKKyNkZWZpbmUgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24gWE1URVhURklFTERTRVRTRUxFQ1RJT04KKyNkZWZpbmUgWG1UZXh0RmllbGRTZXRTdHJpbmcgWE1URVhURklFTERTRVRTVFJJTkcKKyNkZWZpbmUgWG1UZXh0R2V0Q3Vyc29yUG9zaXRpb24gWE1URVhUR0VUQ1VSU09SUE9TSVRJT04KKyNkZWZpbmUgWG1UZXh0R2V0SW5zZXJ0aW9uUG9zaXRpb24gWE1URVhUR0VUSU5TRVJUSU9OUE9TSVRJT04KKyNkZWZpbmUgWG1UZXh0R2V0TGFzdFBvc2l0aW9uIFhNVEVYVEdFVExBU1RQT1NJVElPTgorI2RlZmluZSBYbVRleHRHZXRNYXhMZW5ndGggWE1URVhUR0VUTUFYTEVOR1RICisjZGVmaW5lIFhtVGV4dEdldFNlbGVjdGlvbiBYTVRFWFRHRVRTRUxFQ1RJT04KKyNkZWZpbmUgWG1UZXh0R2V0U2VsZWN0aW9uUG9zaXRpb24gWE1URVhUR0VUU0VMRUNUSU9OUE9TSVRJT04KKyNkZWZpbmUgWG1UZXh0R2V0U3RyaW5nIFhNVEVYVEdFVFNUUklORworI2RlZmluZSBYbVRleHRJbnNlcnQgWE1URVhUSU5TRVJUCisjZGVmaW5lIFhtVGV4dFJlbW92ZSBYTVRFWFRSRU1PVkUKKyNkZWZpbmUgWG1UZXh0UmVwbGFjZSBYTVRFWFRSRVBMQUNFCisjZGVmaW5lIFhtVGV4dFNldEN1cnNvclBvc2l0aW9uIFhNVEVYVFNFVENVUlNPUlBPU0lUSU9OCisjZGVmaW5lIFhtVGV4dFNldEhpZ2hsaWdodCBYTVRFWFRTRVRISUdITElHSFQKKyNkZWZpbmUgWG1UZXh0U2V0SW5zZXJ0aW9uUG9zaXRpb24gWE1URVhUU0VUSU5TRVJUSU9OUE9TSVRJT04KKyNkZWZpbmUgWG1UZXh0U2V0U2VsZWN0aW9uIFhNVEVYVFNFVFNFTEVDVElPTgorI2RlZmluZSBYbVRleHRTZXRTdHJpbmcgWE1URVhUU0VUU1RSSU5HCisjZGVmaW5lIFhtVG9nZ2xlQnV0dG9uR2FkZ2V0R2V0U3RhdGUgWE1UT0dHTEVCVVRUT05HQURHRVRHRVRTVEFURQorI2RlZmluZSBYbVRvZ2dsZUJ1dHRvbkdhZGdldFNldFN0YXRlIFhNVE9HR0xFQlVUVE9OR0FER0VUU0VUU1RBVEUKKyNkZWZpbmUgWG1Ub2dnbGVCdXR0b25HZXRTdGF0ZSBYTVRPR0dMRUJVVFRPTkdFVFNUQVRFCisjZGVmaW5lIFhtVG9nZ2xlQnV0dG9uU2V0U3RhdGUgWE1UT0dHTEVCVVRUT05TRVRTVEFURQorI2RlZmluZSBYbVVwZGF0ZURpc3BsYXkgWE1VUERBVEVESVNQTEFZCisjZGVmaW5lIFhtVmFDcmVhdGVTaW1wbGVSYWRpb0JveCBYTVZBQ1JFQVRFU0lNUExFUkFESU9CT1gKKyNkZWZpbmUgWG1iRHJhd1N0cmluZyBYTUJEUkFXU1RSSU5HCisjZGVmaW5lIFhtYkxvb2t1cFN0cmluZyBYTUJMT09LVVBTVFJJTkcKKyNkZWZpbmUgWG1iUmVzZXRJQyBYTUJSRVNFVElDCisjZGVmaW5lIFhtYlNldFdNUHJvcGVydGllcyBYTUJTRVRXTVBST1BFUlRJRVMKKyNkZWZpbmUgWG1iVGV4dEVzY2FwZW1lbnQgWE1CVEVYVEVTQ0FQRU1FTlQKKyNkZWZpbmUgWG1iVGV4dEV4dGVudHMgWE1CVEVYVEVYVEVOVFMKKyNkZWZpbmUgWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0eSBYTUJURVhUTElTVFRPVEVYVFBST1BFUlRZCisjZGVmaW5lIFhtYlRleHRQcm9wZXJ0eVRvVGV4dExpc3QgWE1CVEVYVFBST1BFUlRZVE9URVhUTElTVAorI2RlZmluZSBYbXVDbGllbnRXaW5kb3cgWE1VQ0xJRU5UV0lORE9XCisjZGVmaW5lIFhtdVByaW50RGVmYXVsdEVycm9yTWVzc2FnZSBYTVVQUklOVERFRkFVTFRFUlJPUk1FU1NBR0UKKyNkZWZpbmUgWHJtR2V0RGF0YWJhc2UgWFJNR0VUREFUQUJBU0UKKyNkZWZpbmUgWHJtR2V0UmVzb3VyY2UgWFJNR0VUUkVTT1VSQ0UKKyNkZWZpbmUgWHJtUHV0U3RyaW5nUmVzb3VyY2UgWFJNUFVUU1RSSU5HUkVTT1VSQ0UKKyNkZWZpbmUgWHJtUXVhcmtUb1N0cmluZyBYUk1RVUFSS1RPU1RSSU5HCisjZGVmaW5lIFhybVN0cmluZ1RvUXVhcmsgWFJNU1RSSU5HVE9RVUFSSworI2RlZmluZSBYdEFkZENhbGxiYWNrIFhUQUREQ0FMTEJBQ0sKKyNkZWZpbmUgWHRBZGRDYWxsYmFja3MgWFRBRERDQUxMQkFDS1MKKyNkZWZpbmUgWHRBZGRFdmVudEhhbmRsZXIgWFRBRERFVkVOVEhBTkRMRVIKKyNkZWZpbmUgWHRBZGRHcmFiIFhUQURER1JBQgorI2RlZmluZSBYdEFsbG9jYXRlR0MgWFRBTExPQ0FURUdDCisjZGVmaW5lIFh0QXBwQWRkQWN0aW9ucyBYVEFQUEFEREFDVElPTlMKKyNkZWZpbmUgWHRBcHBBZGRJbnB1dCBYVEFQUEFERElOUFVUCisjZGVmaW5lIFh0QXBwQWRkVGltZU91dCBYVEFQUEFERFRJTUVPVVQKKyNkZWZpbmUgWHRBcHBDcmVhdGVTaGVsbCBYVEFQUENSRUFURVNIRUxMCisjZGVmaW5lIFh0QXBwSW5pdGlhbGl6ZSBYVEFQUElOSVRJQUxJWkUKKyNkZWZpbmUgWHRBcHBOZXh0RXZlbnQgWFRBUFBORVhURVZFTlQKKyNkZWZpbmUgWHRBcHBQZWVrRXZlbnQgWFRBUFBQRUVLRVZFTlQKKyNkZWZpbmUgWHRBcHBQZW5kaW5nIFhUQVBQUEVORElORworI2RlZmluZSBYdEFwcFByb2Nlc3NFdmVudCBYVEFQUFBST0NFU1NFVkVOVAorI2RlZmluZSBYdEFwcFNldEVycm9ySGFuZGxlciBYVEFQUFNFVEVSUk9SSEFORExFUgorI2RlZmluZSBYdEFwcFNldEZhbGxiYWNrUmVzb3VyY2VzIFhUQVBQU0VURkFMTEJBQ0tSRVNPVVJDRVMKKyNkZWZpbmUgWHRBcHBTZXRXYXJuaW5nSGFuZGxlciBYVEFQUFNFVFdBUk5JTkdIQU5ETEVSCisjZGVmaW5lIFh0QXBwU2V0V2FybmluZ01zZ0hhbmRsZXIgWFRBUFBTRVRXQVJOSU5HTVNHSEFORExFUgorI2RlZmluZSBYdEFwcFdhcm5pbmcgWFRBUFBXQVJOSU5HCisjZGVmaW5lIFh0Q2FsbEFjdGlvblByb2MgWFRDQUxMQUNUSU9OUFJPQworI2RlZmluZSBYdENhbGxDYWxsYmFja0xpc3QgWFRDQUxMQ0FMTEJBQ0tMSVNUCisjZGVmaW5lIFh0Q2FsbENhbGxiYWNrcyBYVENBTExDQUxMQkFDS1MKKyNkZWZpbmUgWHRDb25maWd1cmVXaWRnZXQgWFRDT05GSUdVUkVXSURHRVQKKyNkZWZpbmUgWHRDb252ZXJ0QW5kU3RvcmUgWFRDT05WRVJUQU5EU1RPUkUKKyNkZWZpbmUgWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQgWFRDUkVBVEVBUFBMSUNBVElPTkNPTlRFWFQKKyNkZWZpbmUgWHRDcmVhdGVNYW5hZ2VkV2lkZ2V0IFhUQ1JFQVRFTUFOQUdFRFdJREdFVAorI2RlZmluZSBYdENyZWF0ZVBvcHVwU2hlbGwgWFRDUkVBVEVQT1BVUFNIRUxMCisjZGVmaW5lIFh0Q3JlYXRlV2lkZ2V0IFhUQ1JFQVRFV0lER0VUCisjZGVmaW5lIFh0RGF0YWJhc2UgWFREQVRBQkFTRQorI2RlZmluZSBYdERlc3Ryb3lXaWRnZXQgWFRERVNUUk9ZV0lER0VUCisjZGVmaW5lIFh0RGlzb3duU2VsZWN0aW9uIFhURElTT1dOU0VMRUNUSU9OCisjZGVmaW5lIFh0RGlzcGF0Y2hFdmVudCBYVERJU1BBVENIRVZFTlQKKyNkZWZpbmUgWHREaXNwbGF5T2ZPYmplY3QgWFRESVNQTEFZT0ZPQkpFQ1QKKyNkZWZpbmUgWHREaXNwbGF5U3RyaW5nQ29udldhcm5pbmcgWFRESVNQTEFZU1RSSU5HQ09OVldBUk5JTkcKKyNkZWZpbmUgWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQgWFRESVNQTEFZVE9BUFBMSUNBVElPTkNPTlRFWFQKKyNkZWZpbmUgWHRGcmVlIFhURlJFRQorI2RlZmluZSBYdEdldEFjdGlvbktleXN5bSBYVEdFVEFDVElPTktFWVNZTQorI2RlZmluZSBYdEdldEFjdGlvbkxpc3QgWFRHRVRBQ1RJT05MSVNUCisjZGVmaW5lIFh0R2V0QXBwbGljYXRpb25OYW1lQW5kQ2xhc3MgWFRHRVRBUFBMSUNBVElPTk5BTUVBTkRDTEFTUworI2RlZmluZSBYdEdldEFwcGxpY2F0aW9uUmVzb3VyY2VzIFhUR0VUQVBQTElDQVRJT05SRVNPVVJDRVMKKyNkZWZpbmUgWHRHZXRHQyBYVEdFVEdDCisjZGVmaW5lIFh0R2V0TXVsdGlDbGlja1RpbWUgWFRHRVRNVUxUSUNMSUNLVElNRQorI2RlZmluZSBYdEdldFNlbGVjdGlvblZhbHVlIFhUR0VUU0VMRUNUSU9OVkFMVUUKKyNkZWZpbmUgWHRHZXRTZWxlY3Rpb25WYWx1ZXMgWFRHRVRTRUxFQ1RJT05WQUxVRVMKKyNkZWZpbmUgWHRHZXRTdWJyZXNvdXJjZXMgWFRHRVRTVUJSRVNPVVJDRVMKKyNkZWZpbmUgWHRHZXRWYWx1ZXMgWFRHRVRWQUxVRVMKKyNkZWZpbmUgWHRHcmFiS2V5Ym9hcmQgWFRHUkFCS0VZQk9BUkQKKyNkZWZpbmUgWHRHcmFiUG9pbnRlciBYVEdSQUJQT0lOVEVSCisjZGVmaW5lIFh0SGFzQ2FsbGJhY2tzIFhUSEFTQ0FMTEJBQ0tTCisjZGVmaW5lIFh0SW5pdGlhbGl6ZVdpZGdldENsYXNzIFhUSU5JVElBTElaRVdJREdFVENMQVNTCisjZGVmaW5lIFh0SW5zZXJ0RXZlbnRIYW5kbGVyIFhUSU5TRVJURVZFTlRIQU5ETEVSCisjZGVmaW5lIFh0SXNNYW5hZ2VkIFhUSVNNQU5BR0VECisjZGVmaW5lIFh0SXNPYmplY3QgWFRJU09CSkVDVAorI2RlZmluZSBYdElzU2Vuc2l0aXZlIFhUSVNTRU5TSVRJVkUKKyNkZWZpbmUgWHRJc1N1YmNsYXNzIFhUSVNTVUJDTEFTUworI2RlZmluZSBYdExhc3RUaW1lc3RhbXBQcm9jZXNzZWQgWFRMQVNUVElNRVNUQU1QUFJPQ0VTU0VECisjZGVmaW5lIFh0TWFrZUdlb21ldHJ5UmVxdWVzdCBYVE1BS0VHRU9NRVRSWVJFUVVFU1QKKyNkZWZpbmUgWHRNYWtlUmVzaXplUmVxdWVzdCBYVE1BS0VSRVNJWkVSRVFVRVNUCisjZGVmaW5lIFh0TWFsbG9jIFhUTUFMTE9DCisjZGVmaW5lIFh0TWFuYWdlQ2hpbGQgWFRNQU5BR0VDSElMRAorI2RlZmluZSBYdE1hbmFnZUNoaWxkcmVuIFhUTUFOQUdFQ0hJTERSRU4KKyNkZWZpbmUgWHRNZXJnZUFyZ0xpc3RzIFhUTUVSR0VBUkdMSVNUUworI2RlZmluZSBYdE1vdmVXaWRnZXQgWFRNT1ZFV0lER0VUCisjZGVmaW5lIFh0TmFtZSBYVE5BTUUKKyNkZWZpbmUgWHROYW1lVG9XaWRnZXQgWFROQU1FVE9XSURHRVQKKyNkZWZpbmUgWHRPcGVuRGlzcGxheSBYVE9QRU5ESVNQTEFZCisjZGVmaW5lIFh0T3ZlcnJpZGVUcmFuc2xhdGlvbnMgWFRPVkVSUklERVRSQU5TTEFUSU9OUworI2RlZmluZSBYdE93blNlbGVjdGlvbiBYVE9XTlNFTEVDVElPTgorI2RlZmluZSBYdFBhcmVudCBYVFBBUkVOVAorI2RlZmluZSBYdFBhcnNlVHJhbnNsYXRpb25UYWJsZSBYVFBBUlNFVFJBTlNMQVRJT05UQUJMRQorI2RlZmluZSBYdFBvcGRvd24gWFRQT1BET1dOCisjZGVmaW5lIFh0UG9wdXAgWFRQT1BVUAorI2RlZmluZSBYdFF1ZXJ5R2VvbWV0cnkgWFRRVUVSWUdFT01FVFJZCisjZGVmaW5lIFh0UmVhbGl6ZVdpZGdldCBYVFJFQUxJWkVXSURHRVQKKyNkZWZpbmUgWHRSZWFsbG9jIFhUUkVBTExPQworI2RlZmluZSBYdFJlbGVhc2VHQyBYVFJFTEVBU0VHQworI2RlZmluZSBYdFJlbW92ZUFsbENhbGxiYWNrcyBYVFJFTU9WRUFMTENBTExCQUNLUworI2RlZmluZSBYdFJlbW92ZUNhbGxiYWNrIFhUUkVNT1ZFQ0FMTEJBQ0sKKyNkZWZpbmUgWHRSZW1vdmVFdmVudEhhbmRsZXIgWFRSRU1PVkVFVkVOVEhBTkRMRVIKKyNkZWZpbmUgWHRSZW1vdmVHcmFiIFhUUkVNT1ZFR1JBQgorI2RlZmluZSBYdFJlbW92ZUlucHV0IFhUUkVNT1ZFSU5QVVQKKyNkZWZpbmUgWHRSZW1vdmVUaW1lT3V0IFhUUkVNT1ZFVElNRU9VVAorI2RlZmluZSBYdFJlc2l6ZVdpZGdldCBYVFJFU0laRVdJREdFVAorI2RlZmluZSBYdFJlc29sdmVQYXRobmFtZSBYVFJFU09MVkVQQVRITkFNRQorI2RlZmluZSBYdFNldEtleWJvYXJkRm9jdXMgWFRTRVRLRVlCT0FSREZPQ1VTCisjZGVmaW5lIFh0U2V0TWFwcGVkV2hlbk1hbmFnZWQgWFRTRVRNQVBQRURXSEVOTUFOQUdFRAorI2RlZmluZSBYdFNldFNlbnNpdGl2ZSBYVFNFVFNFTlNJVElWRQorI2RlZmluZSBYdFNldFR5cGVDb252ZXJ0ZXIgWFRTRVRUWVBFQ09OVkVSVEVSCisjZGVmaW5lIFh0U2V0VmFsdWVzIFhUU0VUVkFMVUVTCisjZGVmaW5lIFh0U2hlbGxTdHJpbmdzIFhUU0hFTExTVFJJTkdTCisjZGVmaW5lIFh0U3RyaW5ncyBYVFNUUklOR1MKKyNkZWZpbmUgWHRUb29sa2l0SW5pdGlhbGl6ZSBYVFRPT0xLSVRJTklUSUFMSVpFCisjZGVmaW5lIFh0VHJhbnNsYXRlQ29vcmRzIFhUVFJBTlNMQVRFQ09PUkRTCisjZGVmaW5lIFh0VHJhbnNsYXRlS2V5Y29kZSBYVFRSQU5TTEFURUtFWUNPREUKKyNkZWZpbmUgWHRVbmdyYWJLZXlib2FyZCBYVFVOR1JBQktFWUJPQVJECisjZGVmaW5lIFh0VW5ncmFiUG9pbnRlciBYVFVOR1JBQlBPSU5URVIKKyNkZWZpbmUgWHRVbm1hbmFnZUNoaWxkIFhUVU5NQU5BR0VDSElMRAorI2RlZmluZSBYdFVubWFuYWdlQ2hpbGRyZW4gWFRVTk1BTkFHRUNISUxEUkVOCisjZGVmaW5lIFh0VW5yZWFsaXplV2lkZ2V0IFhUVU5SRUFMSVpFV0lER0VUCisjZGVmaW5lIFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0IFhUVkFDUkVBVEVNQU5BR0VEV0lER0VUCisjZGVmaW5lIFh0VmFDcmVhdGVXaWRnZXQgWFRWQUNSRUFURVdJREdFVAorI2RlZmluZSBYdFZhR2V0VmFsdWVzIFhUVkFHRVRWQUxVRVMKKyNkZWZpbmUgWHRWYVNldFZhbHVlcyBYVFZBU0VUVkFMVUVTCisjZGVmaW5lIFh0V2FybmluZyBYVFdBUk5JTkcKKyNkZWZpbmUgWHRXaWRnZXRUb0FwcGxpY2F0aW9uQ29udGV4dCBYVFdJREdFVFRPQVBQTElDQVRJT05DT05URVhUCisjZGVmaW5lIFh0V2luZG93IFhUV0lORE9XCisjZGVmaW5lIFh0V2luZG93T2ZPYmplY3QgWFRXSU5ET1dPRk9CSkVDVAorI2RlZmluZSBYdFdpbmRvd1RvV2lkZ2V0IFhUV0lORE9XVE9XSURHRVQKKyNkZWZpbmUgWHdjRHJhd1N0cmluZyBYV0NEUkFXU1RSSU5HCisjZGVmaW5lIFh3Y0ZyZWVTdHJpbmdMaXN0IFhXQ0ZSRUVTVFJJTkdMSVNUCisjZGVmaW5lIFh3Y1RleHRFc2NhcGVtZW50IFhXQ1RFWFRFU0NBUEVNRU5UCisjZGVmaW5lIFh3Y1RleHRFeHRlbnRzIFhXQ1RFWFRFWFRFTlRTCisjZGVmaW5lIFh3Y1RleHRMaXN0VG9UZXh0UHJvcGVydHkgWFdDVEVYVExJU1RUT1RFWFRQUk9QRVJUWQorI2RlZmluZSBYd2NUZXh0UHJvcGVydHlUb1RleHRMaXN0IFhXQ1RFWFRQUk9QRVJUWVRPVEVYVExJU1QKKyNkZWZpbmUgX1htQm90dG9tU2hhZG93Q29sb3JEZWZhdWx0IF9YTUJPVFRPTVNIQURPV0NPTE9SREVGQVVMVAorI2RlZmluZSBfWG1DbGVhckJvcmRlciBfWE1DTEVBUkJPUkRFUgorI2RlZmluZSBfWG1Db25maWd1cmVPYmplY3QgX1hNQ09ORklHVVJFT0JKRUNUCisjZGVmaW5lIF9YbURlc3Ryb3lQYXJlbnRDYWxsYmFjayBfWE1ERVNUUk9ZUEFSRU5UQ0FMTEJBQ0sKKyNkZWZpbmUgX1htRHJhd0Fycm93IF9YTURSQVdBUlJPVworI2RlZmluZSBfWG1EcmF3U2hhZG93cyBfWE1EUkFXU0hBRE9XUworI2RlZmluZSBfWG1Gb250TGlzdEdldERlZmF1bHRGb250IF9YTUZPTlRMSVNUR0VUREVGQVVMVEZPTlQKKyNkZWZpbmUgX1htRnJvbUhvcml6b250YWxQaXhlbHMgX1hNRlJPTUhPUklaT05UQUxQSVhFTFMKKyNkZWZpbmUgX1htRnJvbVZlcnRpY2FsUGl4ZWxzIF9YTUZST01WRVJUSUNBTFBJWEVMUworI2RlZmluZSBfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciBfWE1HRVRDTEFTU0VYVEVOU0lPTlBUUgorI2RlZmluZSBfWG1HZXREZWZhdWx0Rm9udExpc3QgX1hNR0VUREVGQVVMVEZPTlRMSVNUCisjZGVmaW5lIF9YbUdldFRleHR1YWxEcmFnSWNvbiBfWE1HRVRURVhUVUFMRFJBR0lDT04KKyNkZWZpbmUgX1htR2V0V2lkZ2V0RXh0RGF0YSBfWE1HRVRXSURHRVRFWFREQVRBCisjZGVmaW5lIF9YbUdyYWJLZXlib2FyZCBfWE1HUkFCS0VZQk9BUkQKKyNkZWZpbmUgX1htR3JhYlBvaW50ZXIgX1hNR1JBQlBPSU5URVIKKyNkZWZpbmUgX1htSW5oZXJpdENsYXNzIF9YTUlOSEVSSVRDTEFTUworI2RlZmluZSBfWG1JbnB1dEluR2FkZ2V0IF9YTUlOUFVUSU5HQURHRVQKKyNkZWZpbmUgX1htTWFrZUdlb21ldHJ5UmVxdWVzdCBfWE1NQUtFR0VPTUVUUllSRVFVRVNUCisjZGVmaW5lIF9YbU1lbnVQb3BEb3duIF9YTU1FTlVQT1BET1dOCisjZGVmaW5lIF9YbU1vdmVPYmplY3QgX1hNTU9WRU9CSkVDVAorI2RlZmluZSBfWG1OYXZpZ0NoYW5nZU1hbmFnZWQgX1hNTkFWSUdDSEFOR0VNQU5BR0VECisjZGVmaW5lIF9YbU9TQnVpbGRGaWxlTGlzdCBfWE1PU0JVSUxERklMRUxJU1QKKyNkZWZpbmUgX1htT1NGaWxlQ29tcGFyZSBfWE1PU0ZJTEVDT01QQVJFCisjZGVmaW5lIF9YbU9TRmluZFBhdHRlcm5QYXJ0IF9YTU9TRklORFBBVFRFUk5QQVJUCisjZGVmaW5lIF9YbU9TUXVhbGlmeUZpbGVTcGVjIF9YTU9TUVVBTElGWUZJTEVTUEVDCisjZGVmaW5lIF9YbVBvc3RQb3B1cE1lbnUgX1hNUE9TVFBPUFVQTUVOVQorI2RlZmluZSBfWG1QcmltaXRpdmVFbnRlciBfWE1QUklNSVRJVkVFTlRFUgorI2RlZmluZSBfWG1QcmltaXRpdmVMZWF2ZSBfWE1QUklNSVRJVkVMRUFWRQorI2RlZmluZSBfWG1SZWRpc3BsYXlHYWRnZXRzIF9YTVJFRElTUExBWUdBREdFVFMKKyNkZWZpbmUgX1htU2hlbGxJc0V4Y2x1c2l2ZSBfWE1TSEVMTElTRVhDTFVTSVZFCisjZGVmaW5lIF9YbVN0cmluZ0RyYXcgX1hNU1RSSU5HRFJBVworI2RlZmluZSBfWG1TdHJpbmdHZXRUZXh0Q29uY2F0IF9YTVNUUklOR0dFVFRFWFRDT05DQVQKKyNkZWZpbmUgX1htU3RyaW5ncyBfWE1TVFJJTkdTCisjZGVmaW5lIF9YbVRvSG9yaXpvbnRhbFBpeGVscyBfWE1UT0hPUklaT05UQUxQSVhFTFMKKyNkZWZpbmUgX1htVG9WZXJ0aWNhbFBpeGVscyBfWE1UT1ZFUlRJQ0FMUElYRUxTCisjZGVmaW5lIF9YbVRvcFNoYWRvd0NvbG9yRGVmYXVsdCBfWE1UT1BTSEFET1dDT0xPUkRFRkFVTFQKKyNkZWZpbmUgX1htX2Zhc3RQdHIgX1hNX0ZBU1RQVFIKKyNkZWZpbmUgX1h0Q2hlY2tTdWJjbGFzc0ZsYWcgX1hUQ0hFQ0tTVUJDTEFTU0ZMQUcKKyNkZWZpbmUgX1h0SW5oZXJpdCBfWFRJTkhFUklUCisjZGVmaW5lIF9YdEluaGVyaXRUcmFuc2xhdGlvbnMgX1hUSU5IRVJJVFRSQU5TTEFUSU9OUworI2RlZmluZSBhcHBsaWNhdGlvblNoZWxsV2lkZ2V0Q2xhc3MgQVBQTElDQVRJT05TSEVMTFdJREdFVENMQVNTCisjZGVmaW5lIGNvbXBvc2l0ZVdpZGdldENsYXNzIENPTVBPU0lURVdJREdFVENMQVNTCisjZGVmaW5lIG92ZXJyaWRlU2hlbGxXaWRnZXRDbGFzcyBPVkVSUklERVNIRUxMV0lER0VUQ0xBU1MKKyNkZWZpbmUgc2hlbGxXaWRnZXRDbGFzcyBTSEVMTFdJREdFVENMQVNTCisjZGVmaW5lIHRvcExldmVsU2hlbGxDbGFzc1JlYyBUT1BMRVZFTFNIRUxMQ0xBU1NSRUMKKyNkZWZpbmUgdG9wTGV2ZWxTaGVsbFdpZGdldENsYXNzIFRPUExFVkVMU0hFTExXSURHRVRDTEFTUworI2RlZmluZSB0cmFuc2llbnRTaGVsbFdpZGdldENsYXNzIFRSQU5TSUVOVFNIRUxMV0lER0VUQ0xBU1MKKyNkZWZpbmUgdmVuZG9yU2hlbGxDbGFzc1JlYyBWRU5ET1JTSEVMTENMQVNTUkVDCisjZGVmaW5lIHZlbmRvclNoZWxsV2lkZ2V0Q2xhc3MgVkVORE9SU0hFTExXSURHRVRDTEFTUworI2RlZmluZSB3bVNoZWxsV2lkZ2V0Q2xhc3MgV01TSEVMTFdJREdFVENMQVNTCisjZGVmaW5lIHhtQXJyb3dCdXR0b25XaWRnZXRDbGFzcyBYTUFSUk9XQlVUVE9OV0lER0VUQ0xBU1MKKyNkZWZpbmUgeG1DYXNjYWRlQnV0dG9uQ2xhc3NSZWMgWE1DQVNDQURFQlVUVE9OQ0xBU1NSRUMKKyNkZWZpbmUgeG1DYXNjYWRlQnV0dG9uR2FkZ2V0Q2xhc3MgWE1DQVNDQURFQlVUVE9OR0FER0VUQ0xBU1MKKyNkZWZpbmUgeG1DYXNjYWRlQnV0dG9uV2lkZ2V0Q2xhc3MgWE1DQVNDQURFQlVUVE9OV0lER0VUQ0xBU1MKKyNkZWZpbmUgeG1EaWFsb2dTaGVsbFdpZGdldENsYXNzIFhNRElBTE9HU0hFTExXSURHRVRDTEFTUworI2RlZmluZSB4bURyYXdpbmdBcmVhV2lkZ2V0Q2xhc3MgWE1EUkFXSU5HQVJFQVdJREdFVENMQVNTCisjZGVmaW5lIHhtRHJhd25CdXR0b25XaWRnZXRDbGFzcyBYTURSQVdOQlVUVE9OV0lER0VUQ0xBU1MKKyNkZWZpbmUgeG1GaWxlU2VsZWN0aW9uQm94V2lkZ2V0Q2xhc3MgWE1GSUxFU0VMRUNUSU9OQk9YV0lER0VUQ0xBU1MKKyNkZWZpbmUgeG1Gb3JtV2lkZ2V0Q2xhc3MgWE1GT1JNV0lER0VUQ0xBU1MKKyNkZWZpbmUgeG1GcmFtZVdpZGdldENsYXNzIFhNRlJBTUVXSURHRVRDTEFTUworI2RlZmluZSB4bUdhZGdldENsYXNzIFhNR0FER0VUQ0xBU1MKKyNkZWZpbmUgeG1MYWJlbEdhZGdldENsYXNzIFhNTEFCRUxHQURHRVRDTEFTUworI2RlZmluZSB4bUxhYmVsV2lkZ2V0Q2xhc3MgWE1MQUJFTFdJREdFVENMQVNTCisjZGVmaW5lIHhtTGlzdFdpZGdldENsYXNzIFhNTElTVFdJREdFVENMQVNTCisjZGVmaW5lIHhtTWFpbldpbmRvd1dpZGdldENsYXNzIFhNTUFJTldJTkRPV1dJREdFVENMQVNTCisjZGVmaW5lIHhtTWFuYWdlckNsYXNzUmVjIFhNTUFOQUdFUkNMQVNTUkVDCisjZGVmaW5lIHhtTWFuYWdlcldpZGdldENsYXNzIFhNTUFOQUdFUldJREdFVENMQVNTCisjZGVmaW5lIHhtTWVudVNoZWxsV2lkZ2V0Q2xhc3MgWE1NRU5VU0hFTExXSURHRVRDTEFTUworI2RlZmluZSB4bU1lc3NhZ2VCb3hXaWRnZXRDbGFzcyBYTU1FU1NBR0VCT1hXSURHRVRDTEFTUworI2RlZmluZSB4bVByaW1pdGl2ZUNsYXNzUmVjIFhNUFJJTUlUSVZFQ0xBU1NSRUMKKyNkZWZpbmUgeG1QcmltaXRpdmVXaWRnZXRDbGFzcyBYTVBSSU1JVElWRVdJREdFVENMQVNTCisjZGVmaW5lIHhtUHVzaEJ1dHRvbkNsYXNzUmVjIFhNUFVTSEJVVFRPTkNMQVNTUkVDCisjZGVmaW5lIHhtUHVzaEJ1dHRvbkdhZGdldENsYXNzIFhNUFVTSEJVVFRPTkdBREdFVENMQVNTCisjZGVmaW5lIHhtUHVzaEJ1dHRvbldpZGdldENsYXNzIFhNUFVTSEJVVFRPTldJREdFVENMQVNTCisjZGVmaW5lIHhtUm93Q29sdW1uV2lkZ2V0Q2xhc3MgWE1ST1dDT0xVTU5XSURHRVRDTEFTUworI2RlZmluZSB4bVNhc2hXaWRnZXRDbGFzcyBYTVNBU0hXSURHRVRDTEFTUworI2RlZmluZSB4bVNjcm9sbEJhcldpZGdldENsYXNzIFhNU0NST0xMQkFSV0lER0VUQ0xBU1MKKyNkZWZpbmUgeG1TY3JvbGxlZFdpbmRvd0NsYXNzUmVjIFhNU0NST0xMRURXSU5ET1dDTEFTU1JFQworI2RlZmluZSB4bVNjcm9sbGVkV2luZG93V2lkZ2V0Q2xhc3MgWE1TQ1JPTExFRFdJTkRPV1dJREdFVENMQVNTCisjZGVmaW5lIHhtU2VwYXJhdG9yR2FkZ2V0Q2xhc3MgWE1TRVBBUkFUT1JHQURHRVRDTEFTUworI2RlZmluZSB4bVNlcGFyYXRvcldpZGdldENsYXNzIFhNU0VQQVJBVE9SV0lER0VUQ0xBU1MKKyNkZWZpbmUgeG1UZXh0RmllbGRXaWRnZXRDbGFzcyBYTVRFWFRGSUVMRFdJREdFVENMQVNTCisjZGVmaW5lIHhtVGV4dFdpZGdldENsYXNzIFhNVEVYVFdJREdFVENMQVNTCisjZGVmaW5lIHhtVG9nZ2xlQnV0dG9uR2FkZ2V0Q2xhc3MgWE1UT0dHTEVCVVRUT05HQURHRVRDTEFTUworI2RlZmluZSB4bVRvZ2dsZUJ1dHRvbldpZGdldENsYXNzIFhNVE9HR0xFQlVUVE9OV0lER0VUQ0xBU1MKKworLyoKKyoqIFh0UmVnaXN0ZXJEcmF3YWJsZSBhbmQgWHRVbnJlZ2lzdGVyRHJhd2FibGUgZG9uJ3QgZXhpc3QgdW50aWwgUjYuCisqKiBTbyB3ZSBoYXZlIHRvIGZha2UgaXQgZm9yIFI1IGFuZCBlYXJsaWVyLiBJdCB3b3VsZCBiZSByZWFsIG5pY2UgdG8KKyoqIGluY2x1ZGUgWDExLmggaGVyZSBhbmQgdGhlbiB0ZXN0IGZvciBSNiBieSBjaGVja2luZworKiogWGxpYlNwZWNpZmljYXRpb25SZWxlYXNlLiBCdXQgaW5jbHVkaW5nIFgxMS5oIGRlZmluZXMgdGhlIHN5bWJvbCAiTm9uZSIKKyoqIGFuZCB0aGVyZSdzIE1vemlsbGEgY29kZSBpbiBnZngvc3JjL2d0ayB0aGF0IGRlZmluZXMgYW4gZW51bSBlbGVtZW50CisqKiBuYW1lZCBOb25lLiBTbyBmb3Igbm93IGhhcmQgY29kZSB0aGlzIGlzIFI1Li4uLgorKi8KKyNpZm5kZWYgVk1TX1gxMVI2CisvKiBSNSBvciBlYXJsaWVyICovCisjZGVmaW5lIF9YdFJlZ2lzdGVyV2luZG93IF9YVFJFR0lTVEVSV0lORE9XCisjZGVmaW5lIF9YdFVucmVnaXN0ZXJXaW5kb3cgX1hUVU5SRUdJU1RFUldJTkRPVworLyogb3JpZ2luYWwgY29kZSBpcyBmaXhlZCBzbyB3ZSBkb24ndCBuZWVkIHRoaXMgbm93ICovCisjaWYgMAorI2RlZmluZSBYdFJlZ2lzdGVyRHJhd2FibGUoZGlzcGxheSxkcmF3YWJsZSx3aWRnZXQpIFwKK3sgIGV4dGVybiB2b2lkIF9YdFJlZ2lzdGVyV2luZG93KFdpbmRvdyxXaWRnZXQpOyBcCisgICBfWHRSZWdpc3RlcldpbmRvdyhkcmF3YWJsZSx3aWRnZXQpOyBcCit9CisjZGVmaW5lIFh0VW5yZWdpc3RlckRyYXdhYmxlKGRpc3BsYXksZHJhd2FibGUpIFwKK3sgIGV4dGVybiB2b2lkIF9YdFVucmVnaXN0ZXJXaW5kb3coV2luZG93LFdpZGdldCk7IFwKKyAgIF9YdFVucmVnaXN0ZXJXaW5kb3coZHJhd2FibGUsWHRXaW5kb3dUb1dpZGdldChkaXNwbGF5LGRyYXdhYmxlKSk7IFwKK30KKyNlbmRpZgorI2Vsc2UKKy8qIFI2IG9yIGxhdGVyICovCisjZGVmaW5lIFh0UmVnaXN0ZXJEcmF3YWJsZSBYVFJFR0lTVEVSRFJBV0FCTEUKKyNkZWZpbmUgWHRVbnJlZ2lzdGVyRHJhd2FibGUgWFRVTlJFR0lTVEVSRFJBV0FCTEUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2d1aV9ndGtfeDExLmMgYi9zcmMvZ3VpX2d0a194MTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzZjODU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2d1aV9ndGtfeDExLmMKQEAgLTAsMCArMSw2NTg5IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCQlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogUG9ydGluZyB0byBHVEsrIHdhcyBkb25lIGJ5OgorICoKKyAqIChDKSAxOTk4LDE5OTksMjAwMCBieSBNYXJjaW4gRGFsZWNraSA8ZGFsZWNraUBldmlzaW9uLmFnPgorICoKKyAqIFdpdGggR1JFQVQgc3VwcG9ydCBhbmQgY29udGludW91cyBlbmNvdXJhZ2VtZW50cyBieSBBbmR5IEthaG4gYW5kIG9mCisgKiBjb3Vyc2UgQnJhbSBNb29sZW5hYXIhCisgKgorICogU3VwcG9ydCBmb3IgR1RLKyAyIHdhcyBhZGRlZCBieToKKyAqCisgKiAoQykgMjAwMiwyMDAzICBKYXNvbiBIaWxkZWJyYW5kICA8amFzb25AcGVhY2V3b3Jrcy5jYT4KKyAqCQkgIERhbmllbCBFbHN0bmVyICA8ZGFuaWVsLmVsc3RuZXJAZ214Lm5ldD4KKyAqLworCisjaW5jbHVkZSAidmltLmgiCisjaWZkZWYgRkVBVF9HVUlfR05PTUUKKy8qIEdub21lIHJlZGVmaW5lcyBfKCkgYW5kIE5fKCkuICBHcnJyLi4uICovCisjIGlmZGVmIF8KKyMgIHVuZGVmIF8KKyMgZW5kaWYKKyMgaWZkZWYgTl8KKyMgIHVuZGVmIE5fCisjIGVuZGlmCisjIGlmZGVmIHRleHRkb21haW4KKyMgIHVuZGVmIHRleHRkb21haW4KKyMgZW5kaWYKKyMgaWZkZWYgYmluZHRleHRkb21haW4KKyMgIHVuZGVmIGJpbmR0ZXh0ZG9tYWluCisjIGVuZGlmCisjIGlmIGRlZmluZWQoRkVBVF9HRVRURVhUKSAmJiAhZGVmaW5lZChFTkFCTEVfTkxTKQorIyAgZGVmaW5lIEVOQUJMRV9OTFMJLyogc28gdGhlIHRleHRzIGluIHRoZSBkaWFsb2cgYm94ZXMgYXJlIHRyYW5zbGF0ZWQgKi8KKyMgZW5kaWYKKyMgaW5jbHVkZSA8Z25vbWUuaD4KKyMgaW5jbHVkZSAidmVyc2lvbi5oIgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChGRUFUX0dVSV9HVEspICYmIGRlZmluZWQoUFJPVE8pCisvKiBXaGVuIGdlbmVyYXRpbmcgcHJvdG90eXBlcyB3ZSBkb24ndCB3YW50IHN5bnRheCBlcnJvcnMuICovCisjIGRlZmluZSBHZGtBdG9tIGludAorIyBkZWZpbmUgR2RrRXZlbnRFeHBvc2UgaW50CisjIGRlZmluZSBHZGtFdmVudEZvY3VzIGludAorIyBkZWZpbmUgR2RrRXZlbnRWaXNpYmlsaXR5IGludAorIyBkZWZpbmUgR2RrRXZlbnRQcm9wZXJ0eSBpbnQKKyMgZGVmaW5lIEd0a0NvbnRhaW5lciBpbnQKKyMgZGVmaW5lIEd0a1RhcmdldEVudHJ5IGludAorIyBkZWZpbmUgR3RrVHlwZSBpbnQKKyMgZGVmaW5lIEd0a1dpZGdldCBpbnQKKyMgZGVmaW5lIGdpbnQgaW50CisjIGRlZmluZSBncG9pbnRlciBpbnQKKyMgZGVmaW5lIGd1aW50IGludAorIyBkZWZpbmUgR2RrRXZlbnRLZXkgaW50CisjIGRlZmluZSBHZGtFdmVudFNlbGVjdGlvbiBpbnQKKyMgZGVmaW5lIEd0a1NlbGVjdGlvbkRhdGEgaW50CisjIGRlZmluZSBHZGtFdmVudE1vdGlvbiBpbnQKKyMgZGVmaW5lIEdka0V2ZW50QnV0dG9uIGludAorIyBkZWZpbmUgR2RrRHJhZ0NvbnRleHQgaW50CisjIGRlZmluZSBHZGtFdmVudENvbmZpZ3VyZSBpbnQKKyMgZGVmaW5lIEdka0V2ZW50Q2xpZW50IGludAorI2Vsc2UKKyMgaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyMgaW5jbHVkZSA8Z2RrL2dkay5oPgorIyBpZmRlZiBXSU4zMjY0CisjICBpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8Z2RrL2dka3guaD4KKyMgZW5kaWYKKworIyBpbmNsdWRlIDxndGsvZ3RrLmg+CisjIGluY2x1ZGUgImd1aV9ndGtfZi5oIgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1gxMV9TVU5LRVlTWU1fSAorIyBpbmNsdWRlIDxYMTEvU3Vua2V5c3ltLmg+CisjZW5kaWYKKworLyoKKyAqIEVhc3ktdG8tdXNlIG1hY3JvIGZvciBtdWx0aWhlYWQgc3VwcG9ydC4KKyAqLworI2lmZGVmIEhBVkVfR1RLX01VTFRJSEVBRAorIyBkZWZpbmUgR0VUX1hfQVRPTShhdG9tKQlnZGtfeDExX2F0b21fdG9feGF0b21fZm9yX2Rpc3BsYXkoIFwKKwkJCQkgICAgZ3RrX3dpZGdldF9nZXRfZGlzcGxheShndWkubWFpbndpbiksIGF0b20pCisjZWxzZQorIyBkZWZpbmUgR0VUX1hfQVRPTShhdG9tKQkoKEF0b20pKGF0b20pKQorI2VuZGlmCisKKy8qIFNlbGVjdGlvbiB0eXBlIGRpc3Rpbmd1aXNoZXJzICovCitlbnVtCit7CisgICAgVEFSR0VUX1RZUEVfTk9ORSwKKyAgICBUQVJHRVRfVVRGOF9TVFJJTkcsCisgICAgVEFSR0VUX1NUUklORywKKyAgICBUQVJHRVRfQ09NUE9VTkRfVEVYVCwKKyAgICBUQVJHRVRfVEVYVCwKKyAgICBUQVJHRVRfVEVYVF9VUklfTElTVCwKKyAgICBUQVJHRVRfVEVYVF9QTEFJTiwKKyAgICBUQVJHRVRfVklNLAorICAgIFRBUkdFVF9WSU1FTkMKK307CisKKy8qCisgKiBUYWJsZSBvZiBzZWxlY3Rpb24gdGFyZ2V0cyBzdXBwb3J0ZWQgYnkgVmltLgorICogTm90ZTogT3JkZXIgbWF0dGVycywgcHJlZmVycmVkIHR5cGVzIHNob3VsZCBjb21lIGZpcnN0LgorICovCitzdGF0aWMgY29uc3QgR3RrVGFyZ2V0RW50cnkgc2VsZWN0aW9uX3RhcmdldHNbXSA9Cit7CisgICAge1ZJTUVOQ19BVE9NX05BTUUsCTAsIFRBUkdFVF9WSU1FTkN9LAorICAgIHtWSU1fQVRPTV9OQU1FLAkwLCBUQVJHRVRfVklNfSwKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgeyJVVEY4X1NUUklORyIsCTAsIFRBUkdFVF9VVEY4X1NUUklOR30sCisjZW5kaWYKKyAgICB7IkNPTVBPVU5EX1RFWFQiLAkwLCBUQVJHRVRfQ09NUE9VTkRfVEVYVH0sCisgICAgeyJURVhUIiwJCTAsIFRBUkdFVF9URVhUfSwKKyAgICB7IlNUUklORyIsCQkwLCBUQVJHRVRfU1RSSU5HfQorfTsKKyNkZWZpbmUgTl9TRUxFQ1RJT05fVEFSR0VUUyAoc2l6ZW9mKHNlbGVjdGlvbl90YXJnZXRzKSAvIHNpemVvZihzZWxlY3Rpb25fdGFyZ2V0c1swXSkpCisKKyNpZmRlZiBGRUFUX0RORAorLyoKKyAqIFRhYmxlIG9mIERuRCB0YXJnZXRzIHN1cHBvcnRlZCBieSBWaW0uCisgKiBOb3RlOiBPcmRlciBtYXR0ZXJzLCBwcmVmZXJyZWQgdHlwZXMgc2hvdWxkIGNvbWUgZmlyc3QuCisgKi8KK3N0YXRpYyBjb25zdCBHdGtUYXJnZXRFbnRyeSBkbmRfdGFyZ2V0c1tdID0KK3sKKyAgICB7InRleHQvdXJpLWxpc3QiLAkwLCBUQVJHRVRfVEVYVF9VUklfTElTVH0sCisjIGlmZGVmIEZFQVRfTUJZVEUKKyAgICB7IlVURjhfU1RSSU5HIiwJMCwgVEFSR0VUX1VURjhfU1RSSU5HfSwKKyMgZW5kaWYKKyAgICB7IlNUUklORyIsCQkwLCBUQVJHRVRfU1RSSU5HfSwKKyAgICB7InRleHQvcGxhaW4iLAkwLCBUQVJHRVRfVEVYVF9QTEFJTn0KK307CisjIGRlZmluZSBOX0RORF9UQVJHRVRTIChzaXplb2YoZG5kX3RhcmdldHMpIC8gc2l6ZW9mKGRuZF90YXJnZXRzWzBdKSkKKyNlbmRpZgorCisKKyNpZmRlZiBIQVZFX0dUSzIKKy8qCisgKiAiTW9ub3NwYWNlIiBpcyBhIHN0YW5kYXJkIGZvbnQgYWxpYXMgdGhhdCBzaG91bGQgYmUgcHJlc2VudAorICogb24gYWxsIHByb3BlciBQYW5nby9mb250Y29uZmlnIGluc3RhbGxhdGlvbnMuCisgKi8KKyMgZGVmaW5lIERFRkFVTFRfRk9OVAkiTW9ub3NwYWNlIDEwIgorCisjZWxzZSAvKiAhSEFWRV9HVEsyICovCisvKgorICogVGhpcyBpcyB0aGUgc2luZ2xlIG9ubHkgZml4ZWQgd2lkdGggZm9udCBpbiBYMTEsIHdoaWNoIHNlZW1zIHRvIGJlIHByZXNlbnQKKyAqIG9uIGFsbCBzZXJ2ZXJzIGFuZCBhdmFpbGFibGUgaW4gYWxsIHRoZSB2YXJpYW50cyB3ZSBuZWVkLgorICovCisjIGRlZmluZSBERUZBVUxUX0ZPTlQJIi1hZG9iZS1jb3VyaWVyLW1lZGl1bS1yLW5vcm1hbC0qLTE0LSotKi0qLW0tKi0qLSoiCisKKyNlbmRpZiAvKiAhSEFWRV9HVEsyICovCisKKyNpZiAhKGRlZmluZWQoRkVBVF9HVUlfR05PTUUpICYmIGRlZmluZWQoRkVBVF9TRVNTSU9OKSkKKy8qCisgKiBBdG9tcyB1c2VkIHRvIGNvbW11bmljYXRlIHNhdmUteW91cnNlbGYgZnJvbSB0aGUgWDExIHNlc3Npb24gbWFuYWdlci4gVGhlcmUKKyAqIGlzIG5vIG5lZWQgdG8gbW92ZSB0aGVtIGludG8gdGhlIEdVSSBzdHJ1Y3QsIHNpbmNlIHRoZXkgc2hvdWxkIGJlIGNvbnN0YW50LgorICovCitzdGF0aWMgR2RrQXRvbSB3bV9wcm90b2NvbHNfYXRvbSA9IEdES19OT05FOworc3RhdGljIEdka0F0b20gc2F2ZV95b3Vyc2VsZl9hdG9tID0gR0RLX05PTkU7CisjZW5kaWYKKworLyoKKyAqIEF0b21zIHVzZWQgdG8gY29udHJvbC9yZWZlcmVuY2UgWDExIHNlbGVjdGlvbnMuCisgKi8KKyNpZmRlZiBGRUFUX01CWVRFCitzdGF0aWMgR2RrQXRvbSB1dGY4X3N0cmluZ19hdG9tID0gR0RLX05PTkU7CisjZW5kaWYKKyNpZm5kZWYgSEFWRV9HVEsyCitzdGF0aWMgR2RrQXRvbSBjb21wb3VuZF90ZXh0X2F0b20gPSBHREtfTk9ORTsKK3N0YXRpYyBHZGtBdG9tIHRleHRfYXRvbSA9IEdES19OT05FOworI2VuZGlmCitzdGF0aWMgR2RrQXRvbSB2aW1fYXRvbSA9IEdES19OT05FOwkvKiBWaW0ncyBvd24gc3BlY2lhbCBzZWxlY3Rpb24gZm9ybWF0ICovCisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIEdka0F0b20gdmltZW5jX2F0b20gPSBHREtfTk9ORTsJLyogVmltJ3MgZXh0ZW5kZWQgc2VsZWN0aW9uIGZvcm1hdCAqLworI2VuZGlmCisKKy8qCisgKiBLZXljb2RlcyByZWNvZ25pemVkIGJ5IHZpbS4KKyAqIE5PVEU6IHdoZW4gY2hhbmdpbmcgdGhpcywgdGhlIHRhYmxlIGluIGd1aV94MTEuYyBwcm9iYWJseSBuZWVkcyB0aGUgc2FtZQorICogY2hhbmdlIQorICovCitzdGF0aWMgc3RydWN0IHNwZWNpYWxfa2V5Cit7CisgICAgZ3VpbnQga2V5X3N5bTsKKyAgICBjaGFyX3UgY29kZTA7CisgICAgY2hhcl91IGNvZGUxOworfQorY29uc3Qgc3BlY2lhbF9rZXlzW10gPQoreworICAgIHtHREtfVXAsCQknaycsICd1J30sCisgICAge0dES19Eb3duLAkJJ2snLCAnZCd9LAorICAgIHtHREtfTGVmdCwJCSdrJywgJ2wnfSwKKyAgICB7R0RLX1JpZ2h0LAkJJ2snLCAncid9LAorICAgIHtHREtfRjEsCQknaycsICcxJ30sCisgICAge0dES19GMiwJCSdrJywgJzInfSwKKyAgICB7R0RLX0YzLAkJJ2snLCAnMyd9LAorICAgIHtHREtfRjQsCQknaycsICc0J30sCisgICAge0dES19GNSwJCSdrJywgJzUnfSwKKyAgICB7R0RLX0Y2LAkJJ2snLCAnNid9LAorICAgIHtHREtfRjcsCQknaycsICc3J30sCisgICAge0dES19GOCwJCSdrJywgJzgnfSwKKyAgICB7R0RLX0Y5LAkJJ2snLCAnOSd9LAorICAgIHtHREtfRjEwLAkJJ2snLCAnOyd9LAorICAgIHtHREtfRjExLAkJJ0YnLCAnMSd9LAorICAgIHtHREtfRjEyLAkJJ0YnLCAnMid9LAorICAgIHtHREtfRjEzLAkJJ0YnLCAnMyd9LAorICAgIHtHREtfRjE0LAkJJ0YnLCAnNCd9LAorICAgIHtHREtfRjE1LAkJJ0YnLCAnNSd9LAorICAgIHtHREtfRjE2LAkJJ0YnLCAnNid9LAorICAgIHtHREtfRjE3LAkJJ0YnLCAnNyd9LAorICAgIHtHREtfRjE4LAkJJ0YnLCAnOCd9LAorICAgIHtHREtfRjE5LAkJJ0YnLCAnOSd9LAorICAgIHtHREtfRjIwLAkJJ0YnLCAnQSd9LAorICAgIHtHREtfRjIxLAkJJ0YnLCAnQid9LAorICAgIHtHREtfUGF1c2UsCQknRicsICdCJ30sIC8qIFBhdXNlID09IEYyMSBhY2NvcmRpbmcgdG8gbmV0YmVhbnMudHh0ICovCisgICAge0dES19GMjIsCQknRicsICdDJ30sCisgICAge0dES19GMjMsCQknRicsICdEJ30sCisgICAge0dES19GMjQsCQknRicsICdFJ30sCisgICAge0dES19GMjUsCQknRicsICdGJ30sCisgICAge0dES19GMjYsCQknRicsICdHJ30sCisgICAge0dES19GMjcsCQknRicsICdIJ30sCisgICAge0dES19GMjgsCQknRicsICdJJ30sCisgICAge0dES19GMjksCQknRicsICdKJ30sCisgICAge0dES19GMzAsCQknRicsICdLJ30sCisgICAge0dES19GMzEsCQknRicsICdMJ30sCisgICAge0dES19GMzIsCQknRicsICdNJ30sCisgICAge0dES19GMzMsCQknRicsICdOJ30sCisgICAge0dES19GMzQsCQknRicsICdPJ30sCisgICAge0dES19GMzUsCQknRicsICdQJ30sCisjaWZkZWYgU3VuWEtfRjM2CisgICAge1N1blhLX0YzNiwJCSdGJywgJ1EnfSwKKyAgICB7U3VuWEtfRjM3LAkJJ0YnLCAnUid9LAorI2VuZGlmCisgICAge0dES19IZWxwLAkJJyUnLCAnMSd9LAorICAgIHtHREtfVW5kbywJCScmJywgJzgnfSwKKyAgICB7R0RLX0JhY2tTcGFjZSwJJ2snLCAnYid9LAorICAgIHtHREtfSW5zZXJ0LAknaycsICdJJ30sCisgICAge0dES19EZWxldGUsCSdrJywgJ0QnfSwKKyAgICB7R0RLXzMyNzBfQmFja1RhYiwJJ2snLCAnQid9LAorICAgIHtHREtfQ2xlYXIsCQknaycsICdDJ30sCisgICAge0dES19Ib21lLAkJJ2snLCAnaCd9LAorICAgIHtHREtfRW5kLAkJJ0AnLCAnNyd9LAorICAgIHtHREtfUHJpb3IsCQknaycsICdQJ30sCisgICAge0dES19OZXh0LAkJJ2snLCAnTid9LAorICAgIHtHREtfUHJpbnQsCQknJScsICc5J30sCisgICAgLyogS2V5cGFkIGtleXM6ICovCisgICAge0dES19LUF9MZWZ0LAknaycsICdsJ30sCisgICAge0dES19LUF9SaWdodCwJJ2snLCAncid9LAorICAgIHtHREtfS1BfVXAsCQknaycsICd1J30sCisgICAge0dES19LUF9Eb3duLAknaycsICdkJ30sCisgICAge0dES19LUF9JbnNlcnQsCUtTX0VYVFJBLCAoY2hhcl91KUtFX0tJTlN9LAorICAgIHtHREtfS1BfRGVsZXRlLAlLU19FWFRSQSwgKGNoYXJfdSlLRV9LREVMfSwKKyAgICB7R0RLX0tQX0hvbWUsCSdLJywgJzEnfSwKKyAgICB7R0RLX0tQX0VuZCwJJ0snLCAnNCd9LAorICAgIHtHREtfS1BfUHJpb3IsCSdLJywgJzMnfSwgIC8qIHBhZ2UgdXAgKi8KKyAgICB7R0RLX0tQX05leHQsCSdLJywgJzUnfSwgIC8qIHBhZ2UgZG93biAqLworCisgICAge0dES19LUF9BZGQsCSdLJywgJzYnfSwKKyAgICB7R0RLX0tQX1N1YnRyYWN0LAknSycsICc3J30sCisgICAge0dES19LUF9EaXZpZGUsCSdLJywgJzgnfSwKKyAgICB7R0RLX0tQX011bHRpcGx5LAknSycsICc5J30sCisgICAge0dES19LUF9FbnRlciwJJ0snLCAnQSd9LAorICAgIHtHREtfS1BfRGVjaW1hbCwJJ0snLCAnQid9LAorCisgICAge0dES19LUF8wLAkJJ0snLCAnQyd9LAorICAgIHtHREtfS1BfMSwJCSdLJywgJ0QnfSwKKyAgICB7R0RLX0tQXzIsCQknSycsICdFJ30sCisgICAge0dES19LUF8zLAkJJ0snLCAnRid9LAorICAgIHtHREtfS1BfNCwJCSdLJywgJ0cnfSwKKyAgICB7R0RLX0tQXzUsCQknSycsICdIJ30sCisgICAge0dES19LUF82LAkJJ0snLCAnSSd9LAorICAgIHtHREtfS1BfNywJCSdLJywgJ0onfSwKKyAgICB7R0RLX0tQXzgsCQknSycsICdLJ30sCisgICAge0dES19LUF85LAkJJ0snLCAnTCd9LAorCisgICAgLyogRW5kIG9mIGxpc3QgbWFya2VyOiAqLworICAgIHswLCAwLCAwfQorfTsKKworLyoKKyAqIEZsYWdzIGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucyB0YWJsZSBiZWxvdy4KKyAqLworI2RlZmluZSBBUkdfRk9OVAkxCisjZGVmaW5lIEFSR19HRU9NRVRSWQkyCisjZGVmaW5lIEFSR19SRVZFUlNFCTMKKyNkZWZpbmUgQVJHX05PUkVWRVJTRQk0CisjZGVmaW5lIEFSR19CQUNLR1JPVU5ECTUKKyNkZWZpbmUgQVJHX0ZPUkVHUk9VTkQJNgorI2RlZmluZSBBUkdfSUNPTklDCTcKKyNkZWZpbmUgQVJHX1JPTEUJOAorI2RlZmluZSBBUkdfTkVUQkVBTlMJOQorI2RlZmluZSBBUkdfWFJNCQkxMAkvKiBpZ25vcmVkICovCisjZGVmaW5lIEFSR19NRU5VRk9OVAkxMQkvKiBpZ25vcmVkICovCisjZGVmaW5lIEFSR19JTkRFWF9NQVNLCTB4MDBmZgorI2RlZmluZSBBUkdfSEFTX1ZBTFVFCTB4MDEwMAkvKiBhIHZhbHVlIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBhcmd1bWVudCAqLworI2RlZmluZSBBUkdfTkVFRFNfR1VJCTB4MDIwMAkvKiBuZWVkIHRvIGluaXRpYWxpemUgdGhlIEdVSSBmb3IgdGhpcwkgICovCisjZGVmaW5lIEFSR19GT1JfR1RLCTB4MDQwMAkvKiBhcmd1bWVudCBpcyBoYW5kbGVkIGJ5IEdUSysgb3IgR05PTUUgICAqLworI2RlZmluZSBBUkdfQ09NUEFUX0xPTkcJMHgwODAwCS8qIGFjY2VwdCAtZm9vIGJ1dCBzdWJzdGl0dXRlIHdpdGggLS1mb28gICovCisjZGVmaW5lIEFSR19LRUVQCTB4MTAwMAkvKiBkb24ndCByZW1vdmUgYXJndW1lbnQgZnJvbSBhcmd2W10gKi8KKworLyoKKyAqIFRoaXMgdGFibGUgaG9sZHMgYWxsIHRoZSBYIEdVSSBjb21tYW5kIGxpbmUgb3B0aW9ucyBhbGxvd2VkLiAgVGhpcyBpbmNsdWRlcworICogdGhlIHN0YW5kYXJkIG9uZXMgc28gdGhhdCB3ZSBjYW4gc2tpcCB0aGVtIHdoZW4gVmltIGlzIHN0YXJ0ZWQgd2l0aG91dCB0aGUKKyAqIEdVSSAoYnV0IHRoZSBHVUkgbWlnaHQgc3RhcnQgdXAgbGF0ZXIpLgorICoKKyAqIFdoZW4gY2hhbmdpbmcgdGhpcywgYWxzbyB1cGRhdGUgZG9jL2d1aV94MTEudHh0IGFuZCB0aGUgdXNhZ2UgbWVzc2FnZSEhIQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGNvbnN0IGNoYXIJICAgICpuYW1lOworICAgIHVuc2lnbmVkIGludCAgICBmbGFnczsKK30KK2NtZGxpbmVfb3B0aW9uX1Q7CisKK3N0YXRpYyBjb25zdCBjbWRsaW5lX29wdGlvbl9UIGNtZGxpbmVfb3B0aW9uc1tdID0KK3sKKyAgICAvKiBXZSBoYW5kbGUgdGhlc2Ugb3B0aW9ucyBvdXJzZWx2ZXMgKi8KKyAgICB7Ii1mbiIsCQlBUkdfRk9OVHxBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii1mb250IiwJCUFSR19GT05UfEFSR19IQVNfVkFMVUV9LAorICAgIHsiLWdlb20iLAkJQVJHX0dFT01FVFJZfEFSR19IQVNfVkFMVUV9LAorICAgIHsiLWdlb21ldHJ5IiwJQVJHX0dFT01FVFJZfEFSR19IQVNfVkFMVUV9LAorICAgIHsiLXJ2IiwJCUFSR19SRVZFUlNFfSwKKyAgICB7Ii1yZXZlcnNlIiwJQVJHX1JFVkVSU0V9LAorICAgIHsiK3J2IiwJCUFSR19OT1JFVkVSU0V9LAorICAgIHsiK3JldmVyc2UiLAlBUkdfTk9SRVZFUlNFfSwKKyAgICB7Ii1iZyIsCQlBUkdfQkFDS0dST1VORHxBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii1iYWNrZ3JvdW5kIiwJQVJHX0JBQ0tHUk9VTkR8QVJHX0hBU19WQUxVRX0sCisgICAgeyItZmciLAkJQVJHX0ZPUkVHUk9VTkR8QVJHX0hBU19WQUxVRX0sCisgICAgeyItZm9yZWdyb3VuZCIsCUFSR19GT1JFR1JPVU5EfEFSR19IQVNfVkFMVUV9LAorICAgIHsiLWljb25pYyIsCQlBUkdfSUNPTklDfSwKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICB7Ii0tcm9sZSIsCQlBUkdfUk9MRXxBUkdfSEFTX1ZBTFVFfSwKKyNlbmRpZgorI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIHsiLW5iIiwJCUFSR19ORVRCRUFOU30sCSAgICAgIC8qIG5vbi1zdGFuZGFyZCB2YWx1ZSBmb3JtYXQgKi8KKyAgICB7Ii14cm0iLAkJQVJHX1hSTXxBUkdfSEFTX1ZBTFVFfSwJCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworICAgIHsiLW1mIiwJCUFSR19NRU5VRk9OVHxBUkdfSEFTX1ZBTFVFfSwJLyogbm90IGltcGxlbWVudGVkICovCisgICAgeyItbWVudWZvbnQiLAlBUkdfTUVOVUZPTlR8QVJHX0hBU19WQUxVRX0sCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2VuZGlmCisjaWYgMCAvKiBub3QgaW1wbGVtZW50ZWQ7IHRoZXNlIGFyZ3VtZW50cyBkb24ndCBtYWtlIHNlbnNlIGZvciBHVEsrICovCisgICAgeyItYm9sZGZvbnQiLAlBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii1pdGFsaWNmb250IiwJQVJHX0hBU19WQUxVRX0sCisgICAgeyItYnciLAkJQVJHX0hBU19WQUxVRX0sCisgICAgeyItYm9yZGVyd2lkdGgiLAlBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii1zdyIsCQlBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii1zY3JvbGxiYXJ3aWR0aCIsCUFSR19IQVNfVkFMVUV9LAorI2VuZGlmCisgICAgLyogQXJndW1lbnRzIGhhbmRsZWQgYnkgR1RLIChhbmQgR05PTUUpIGludGVybmFsbHkuICovCisgICAgeyItLWctZmF0YWwtd2FybmluZ3MiLAlBUkdfRk9SX0dUS30sCisgICAgeyItLWdkay1kZWJ1ZyIsCQlBUkdfRk9SX0dUS3xBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii0tZ2RrLW5vLWRlYnVnIiwJCUFSR19GT1JfR1RLfEFSR19IQVNfVkFMVUV9LAorICAgIHsiLS1ndGstZGVidWciLAkJQVJHX0ZPUl9HVEt8QVJHX0hBU19WQUxVRX0sCisgICAgeyItLWd0ay1uby1kZWJ1ZyIsCQlBUkdfRk9SX0dUS3xBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii0tZ3RrLW1vZHVsZSIsCQlBUkdfRk9SX0dUS3xBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii0tc3luYyIsCQkJQVJHX0ZPUl9HVEt9LAorICAgIHsiLS1kaXNwbGF5IiwJCUFSR19GT1JfR1RLfEFSR19IQVNfVkFMVUV8QVJHX0NPTVBBVF9MT05HfSwKKyAgICB7Ii0tbmFtZSIsCQkJQVJHX0ZPUl9HVEt8QVJHX0hBU19WQUxVRXxBUkdfQ09NUEFUX0xPTkd9LAorICAgIHsiLS1jbGFzcyIsCQkJQVJHX0ZPUl9HVEt8QVJHX0hBU19WQUxVRXxBUkdfQ09NUEFUX0xPTkd9LAorI2lmZGVmIEhBVkVfR1RLMgorICAgIHsiLS1zY3JlZW4iLAkJQVJHX0ZPUl9HVEt8QVJHX0hBU19WQUxVRX0sCisgICAgeyItLWd4aWQtaG9zdCIsCQlBUkdfRk9SX0dUS3xBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii0tZ3hpZC1wb3J0IiwJCUFSR19GT1JfR1RLfEFSR19IQVNfVkFMVUV9LAorI2Vsc2UgLyogdGhlc2UgZG9uJ3Qgc2VlbSB0byBleGlzdCBhbnltb3JlICovCisgICAgeyItLW5vLXhzaG0iLAkJQVJHX0ZPUl9HVEt9LAorICAgIHsiLS14aW0tcHJlZWRpdCIsCQlBUkdfRk9SX0dUS3xBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii0teGltLXN0YXR1cyIsCQlBUkdfRk9SX0dUS3xBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii0tZ3hpZF9ob3N0IiwJCUFSR19GT1JfR1RLfEFSR19IQVNfVkFMVUV9LAorICAgIHsiLS1neGlkX3BvcnQiLAkJQVJHX0ZPUl9HVEt8QVJHX0hBU19WQUxVRX0sCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9HTk9NRQorICAgIHsiLS1sb2FkLW1vZHVsZXMiLAkJQVJHX0ZPUl9HVEt8QVJHX0hBU19WQUxVRX0sCisgICAgeyItLXNtLWNsaWVudC1pZCIsCQlBUkdfRk9SX0dUS3xBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii0tc20tY29uZmlnLXByZWZpeCIsCUFSR19GT1JfR1RLfEFSR19IQVNfVkFMVUV9LAorICAgIHsiLS1zbS1kaXNhYmxlIiwJCUFSR19GT1JfR1RLfSwKKyAgICB7Ii0tb2FmLWlvci1mZCIsCQlBUkdfRk9SX0dUS3xBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii0tb2FmLWFjdGl2YXRlLWlpZCIsCUFSR19GT1JfR1RLfEFSR19IQVNfVkFMVUV9LAorICAgIHsiLS1vYWYtcHJpdmF0ZSIsCQlBUkdfRk9SX0dUS30sCisgICAgeyItLWVuYWJsZS1zb3VuZCIsCQlBUkdfRk9SX0dUS30sCisgICAgeyItLWRpc2FibGUtc291bmQiLAkJQVJHX0ZPUl9HVEt9LAorICAgIHsiLS1lc3BlYWtlciIsCQlBUkdfRk9SX0dUS3xBUkdfSEFTX1ZBTFVFfSwKKyAgICB7Ii0/IiwJCQlBUkdfRk9SX0dUS3xBUkdfTkVFRFNfR1VJfSwKKyAgICB7Ii0taGVscCIsCQkJQVJHX0ZPUl9HVEt8QVJHX05FRURTX0dVSXxBUkdfS0VFUH0sCisgICAgeyItLXVzYWdlIiwJCQlBUkdfRk9SX0dUS3xBUkdfTkVFRFNfR1VJfSwKKyMgaWYgMCAvKiBjb25mbGljdHMgd2l0aCBWaW0ncyBvd24gLS12ZXJzaW9uIGFyZ3VtZW50ICovCisgICAgeyItLXZlcnNpb24iLAkJQVJHX0ZPUl9HVEt8QVJHX05FRURTX0dVSX0sCisjIGVuZGlmCisgICAgeyItLWRpc2FibGUtY3Jhc2gtZGlhbG9nIiwJQVJHX0ZPUl9HVEt9LAorI2VuZGlmCisgICAge05VTEwsIDB9Cit9OworCitzdGF0aWMgaW50ICAgIGd1aV9hcmdjID0gMDsKK3N0YXRpYyBjaGFyICoqZ3VpX2FyZ3YgPSBOVUxMOworCisjaWZkZWYgSEFWRV9HVEsyCitzdGF0aWMgY29uc3QgY2hhciAqcm9sZV9hcmd1bWVudCA9IE5VTEw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0dOT01FKSAmJiBkZWZpbmVkKEZFQVRfU0VTU0lPTikKK3N0YXRpYyBjb25zdCBjaGFyICpyZXN0YXJ0X2NvbW1hbmQgPSBOVUxMOworI2VuZGlmCitzdGF0aWMgaW50IGZvdW5kX2ljb25pY19hcmcgPSBGQUxTRTsKKworI2lmZGVmIEZFQVRfR1VJX0dOT01FCisvKgorICogQ2FuJ3QgdXNlIEdub21lIGlmIC0tc29ja2V0aWQgZ2l2ZW4KKyAqLworc3RhdGljIGludCB1c2luZ19nbm9tZSA9IDA7CisjZWxzZQorIyBkZWZpbmUgdXNpbmdfZ25vbWUgMAorI2VuZGlmCisKKy8qCisgKiBQYXJzZSB0aGUgR1VJIHJlbGF0ZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4gIEFueSBhcmd1bWVudHMgdXNlZCBhcmUKKyAqIGRlbGV0ZWQgZnJvbSBhcmd2LCBhbmQgKmFyZ2MgaXMgZGVjcmVtZW50ZWQgYWNjb3JkaW5nbHkuICBUaGlzIGlzIGNhbGxlZAorICogd2hlbiB2aW0gaXMgc3RhcnRlZCwgd2hldGhlciBvciBub3QgdGhlIEdVSSBoYXMgYmVlbiBzdGFydGVkLgorICovCisgICAgdm9pZAorZ3VpX21jaF9wcmVwYXJlKGludCAqYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgY29uc3QgY21kbGluZV9vcHRpb25fVCAgKm9wdGlvbjsKKyAgICBpbnQJCQkgICAgaQk9IDA7CisgICAgaW50CQkJICAgIGxlbiA9IDA7CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0dOT01FKSAmJiBkZWZpbmVkKEZFQVRfU0VTU0lPTikKKyAgICAvKgorICAgICAqIERldGVybWluZSB0aGUgY29tbWFuZCB1c2VkIHRvIGludm9rZSBWaW0sIHRvIGJlIHBhc3NlZCBhcyByZXN0YXJ0CisgICAgICogY29tbWFuZCB0byB0aGUgc2Vzc2lvbiBtYW5hZ2VyLglJZiBhcmd2WzBdIGNvbnRhaW5zIGFueSBkaXJlY3RvcnkKKyAgICAgKiBjb21wb25lbnRzIHRyeSBidWlsZGluZyBhbiBhYnNvbHV0ZSBwYXRoLCBvdGhlcndpc2UgbGVhdmUgaXQgYXMgaXMuCisgICAgICovCisgICAgcmVzdGFydF9jb21tYW5kID0gYXJndlswXTsKKworICAgIGlmIChzdHJjaHIoYXJndlswXSwgR19ESVJfU0VQQVJBVE9SKSAhPSBOVUxMKQorICAgIHsKKwljaGFyX3UgYnVmW01BWFBBVEhMXTsKKworCWlmIChtY2hfRnVsbE5hbWUoKGNoYXJfdSAqKWFyZ3ZbMF0sIGJ1ZiwgKGludClzaXplb2YoYnVmKSwgVFJVRSkgPT0gT0spCisJICAgIC8qIFRpbnkgbGVhazsgZG9lc24ndCBtYXR0ZXIsIGFuZCB1c3VhbGx5IHdlIGRvbid0IGV2ZW4gZ2V0IGhlcmUgKi8KKwkgICAgcmVzdGFydF9jb21tYW5kID0gKGNoYXIgKil2aW1fc3Ryc2F2ZShidWYpOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBNb3ZlIGFsbCB0aGUgZW50cmllcyBpbiBhcmd2IHdoaWNoIGFyZSByZWxldmFudCB0byBHVEsrIGFuZCBHTk9NRQorICAgICAqIGludG8gZ3VpX2FyZ3YuICBGcmVlZCBsYXRlciBpbiBndWlfbWNoX2luaXQoKS4KKyAgICAgKi8KKyAgICBndWlfYXJnYyA9IDA7CisgICAgZ3VpX2FyZ3YgPSAoY2hhciAqKilhbGxvYygodW5zaWduZWQpKCgqYXJnYyArIDEpICogc2l6ZW9mKGNoYXIgKikpKTsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZ3VpX2FyZ3YgIT0gTlVMTCk7CisKKyAgICBndWlfYXJndltndWlfYXJnYysrXSA9IGFyZ3ZbaSsrXTsKKworICAgIHdoaWxlIChpIDwgKmFyZ2MpCisgICAgeworCS8qIERvbid0IHdhc3RlIENQVSBjeWNsZXMgb24gbm9uLW9wdGlvbiBhcmd1bWVudHMuICovCisJaWYgKGFyZ3ZbaV1bMF0gIT0gJy0nICYmIGFyZ3ZbaV1bMF0gIT0gJysnKQorCXsKKwkgICAgKytpOworCSAgICBjb250aW51ZTsKKwl9CisKKwkvKiBMb29rIGZvciBhcmd2W2ldIGluIGNtZGxpbmVfb3B0aW9uc1tdIHRhYmxlLiAqLworCWZvciAob3B0aW9uID0gJmNtZGxpbmVfb3B0aW9uc1swXTsgb3B0aW9uLT5uYW1lICE9IE5VTEw7ICsrb3B0aW9uKQorCXsKKwkgICAgbGVuID0gc3RybGVuKG9wdGlvbi0+bmFtZSk7CisKKwkgICAgaWYgKHN0cm5jbXAoYXJndltpXSwgb3B0aW9uLT5uYW1lLCBsZW4pID09IDApCisJICAgIHsKKwkJaWYgKGFyZ3ZbaV1bbGVuXSA9PSAnXDAnKQorCQkgICAgYnJlYWs7CisJCS8qIGFsbG93IC0tZm9vPWJhciBzdHlsZSAqLworCQlpZiAoYXJndltpXVtsZW5dID09ICc9JyAmJiAob3B0aW9uLT5mbGFncyAmIEFSR19IQVNfVkFMVUUpKQorCQkgICAgYnJlYWs7CisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJCS8qIGRhcm4sIC1uYiBoYXMgbm9uLXN0YW5kYXJkIHN5bnRheCAqLworCQlpZiAodmltX3N0cmNocigoY2hhcl91ICopIjo9IiwgYXJndltpXVtsZW5dKSAhPSBOVUxMCisJCQkmJiAob3B0aW9uLT5mbGFncyAmIEFSR19JTkRFWF9NQVNLKSA9PSBBUkdfTkVUQkVBTlMpCisJCSAgICBicmVhazsKKyNlbmRpZgorCSAgICB9CisJICAgIGVsc2UgaWYgKChvcHRpb24tPmZsYWdzICYgQVJHX0NPTVBBVF9MT05HKQorCQkJJiYgc3RyY21wKGFyZ3ZbaV0sIG9wdGlvbi0+bmFtZSArIDEpID09IDApCisJICAgIHsKKwkJLyogUmVwbGFjZSB0aGUgc3RhbmRhcmQgWCBhcmd1bWVudHMgIi1uYW1lIiBhbmQgIi1kaXNwbGF5IgorCQkgKiB3aXRoIHRoZWlyIEdOVS1zdHlsZSBsb25nIG9wdGlvbiBjb3VudGVycGFydHMuICovCisJCWFyZ3ZbaV0gPSAoY2hhciAqKW9wdGlvbi0+bmFtZTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJaWYgKG9wdGlvbi0+bmFtZSA9PSBOVUxMKSAvKiBubyBtYXRjaCAqLworCXsKKwkgICAgKytpOworCSAgICBjb250aW51ZTsKKwl9CisKKwlpZiAob3B0aW9uLT5mbGFncyAmIEFSR19GT1JfR1RLKQorCXsKKwkgICAgLyogTW92ZSB0aGUgYXJndW1lbnQgaW50byBndWlfYXJndiwgd2hpY2gKKwkgICAgICogd2lsbCBsYXRlciBiZSBwYXNzZWQgdG8gZ3RrX2luaXRfY2hlY2soKSAqLworCSAgICBndWlfYXJndltndWlfYXJnYysrXSA9IGFyZ3ZbaV07CisJfQorCWVsc2UKKwl7CisJICAgIGNoYXIgKnZhbHVlID0gTlVMTDsKKworCSAgICAvKiBFeHRyYWN0IHRoZSBvcHRpb24ncyB2YWx1ZSBpZiB0aGVyZSBpcyBvbmUuCisJICAgICAqIEFjY2VwdCBib3RoICItLWZvbyBiYXIiIGFuZCAiLS1mb289YmFyIiBzdHlsZS4gKi8KKwkgICAgaWYgKG9wdGlvbi0+ZmxhZ3MgJiBBUkdfSEFTX1ZBTFVFKQorCSAgICB7CisJCWlmIChhcmd2W2ldW2xlbl0gPT0gJz0nKQorCQkgICAgdmFsdWUgPSAmYXJndltpXVtsZW4gKyAxXTsKKwkJZWxzZSBpZiAoaSArIDEgPCAqYXJnYyAmJiBzdHJjbXAoYXJndltpICsgMV0sICItLSIpICE9IDApCisJCSAgICB2YWx1ZSA9IGFyZ3ZbaSArIDFdOworCSAgICB9CisKKwkgICAgLyogQ2hlY2sgZm9yIG9wdGlvbnMgaGFuZGxlZCBieSBWaW0gaXRzZWxmICovCisJICAgIHN3aXRjaCAob3B0aW9uLT5mbGFncyAmIEFSR19JTkRFWF9NQVNLKQorCSAgICB7CisJCWNhc2UgQVJHX1JFVkVSU0U6CisJCSAgICBmb3VuZF9yZXZlcnNlX2FyZyA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJY2FzZSBBUkdfTk9SRVZFUlNFOgorCQkgICAgZm91bmRfcmV2ZXJzZV9hcmcgPSBGQUxTRTsKKwkJICAgIGJyZWFrOworCQljYXNlIEFSR19GT05UOgorCQkgICAgZm9udF9hcmd1bWVudCA9IHZhbHVlOworCQkgICAgYnJlYWs7CisJCWNhc2UgQVJHX0dFT01FVFJZOgorCQkgICAgaWYgKHZhbHVlICE9IE5VTEwpCisJCQlndWkuZ2VvbSA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKil2YWx1ZSk7CisJCSAgICBicmVhazsKKwkJY2FzZSBBUkdfQkFDS0dST1VORDoKKwkJICAgIGJhY2tncm91bmRfYXJndW1lbnQgPSB2YWx1ZTsKKwkJICAgIGJyZWFrOworCQljYXNlIEFSR19GT1JFR1JPVU5EOgorCQkgICAgZm9yZWdyb3VuZF9hcmd1bWVudCA9IHZhbHVlOworCQkgICAgYnJlYWs7CisJCWNhc2UgQVJHX0lDT05JQzoKKwkJICAgIGZvdW5kX2ljb25pY19hcmcgPSBUUlVFOworCQkgICAgYnJlYWs7CisjaWZkZWYgSEFWRV9HVEsyCisJCWNhc2UgQVJHX1JPTEU6CisJCSAgICByb2xlX2FyZ3VtZW50ID0gdmFsdWU7IC8qIHVzZWQgbGF0ZXIgaW4gZ3VpX21jaF9vcGVuKCkgKi8KKwkJICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJCWNhc2UgQVJHX05FVEJFQU5TOgorCQkgICAgKyt1c2luZ05ldGJlYW5zOworCQkgICAgZ3VpLmRvZm9yayA9IEZBTFNFOyAvKiBkb24ndCBmb3JrKCkgd2hlbiBzdGFydGluZyBHVUkgKi8KKwkJICAgIG5ldGJlYW5zQXJnID0gYXJndltpXTsKKwkJICAgIGJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCSAgICBicmVhazsKKwkgICAgfQorCX0KKworCS8qIFRoZXNlIGFyZ3VtZW50cyBtYWtlIGdub21lX3Byb2dyYW1faW5pdCgpIHByaW50IGEgbWVzc2FnZSBhbmQgZXhpdC4KKwkgKiBNdXN0IHN0YXJ0IHRoZSBHVUkgZm9yIHRoaXMsIG90aGVyd2lzZSAiOmd1aSIgd2lsbCBleGl0IGxhdGVyISAqLworCWlmIChvcHRpb24tPmZsYWdzICYgQVJHX05FRURTX0dVSSkKKwkgICAgZ3VpLnN0YXJ0aW5nID0gVFJVRTsKKworCWlmIChvcHRpb24tPmZsYWdzICYgQVJHX0tFRVApCisJICAgICsraTsKKwllbHNlCisJeworCSAgICAvKiBSZW1vdmUgdGhlIGZsYWcgZnJvbSB0aGUgYXJndW1lbnQgdmVjdG9yLiAqLworCSAgICBpZiAoLS0qYXJnYyA+IGkpCisJICAgIHsKKwkJaW50IG5fc3RyaXAgPSAxOworCisJCS8qIE1vdmUgdGhlIGFyZ3VtZW50J3MgdmFsdWUgYXMgd2VsbCwgaWYgdGhlcmUgaXMgb25lLiAqLworCQlpZiAoKG9wdGlvbi0+ZmxhZ3MgJiBBUkdfSEFTX1ZBTFVFKQorCQkJJiYgYXJndltpXVtsZW5dICE9ICc9JworCQkJJiYgc3RyY21wKGFyZ3ZbaSArIDFdLCAiLS0iKSAhPSAwKQorCQl7CisJCSAgICArK25fc3RyaXA7CisJCSAgICAtLSphcmdjOworCQkgICAgaWYgKG9wdGlvbi0+ZmxhZ3MgJiBBUkdfRk9SX0dUSykKKwkJCWd1aV9hcmd2W2d1aV9hcmdjKytdID0gYXJndltpICsgMV07CisJCX0KKworCQlpZiAoKmFyZ2MgPiBpKQorCQkgICAgbWNoX21lbW1vdmUoJmFyZ3ZbaV0sICZhcmd2W2kgKyBuX3N0cmlwXSwKKwkJCQkJCSgqYXJnYyAtIGkpICogc2l6ZW9mKGNoYXIgKikpOworCSAgICB9CisJICAgIGFyZ3ZbKmFyZ2NdID0gTlVMTDsKKwl9CisgICAgfQorCisgICAgZ3VpX2FyZ3ZbZ3VpX2FyZ2NdID0gTlVMTDsKK30KKworLyoKKyAqIFRoaXMgc2hvdWxkIGJlIG1heWJlIGNvbXBsZXRlbHkgcmVtb3ZlZC4KKyAqIERvZXNuJ3Qgc2VlbSBwb3NzaWJsZSwgc2luY2UgY2hlY2tfY29weV9hcmVhKCkgcmVsaWVzIG9uCisgKiB0aGlzIGluZm9ybWF0aW9uLiAgLS1kYW5pZWxrCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyBnaW50Cit2aXNpYmlsaXR5X2V2ZW50KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudFZpc2liaWxpdHkgKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIGd1aS52aXNpYmlsaXR5ID0gZXZlbnQtPnN0YXRlOworICAgIC8qCisgICAgICogV2hlbiB3ZSBkbyBhbiBnZGtfd2luZG93X2NvcHlfYXJlYSgpLCBhbmQgdGhlIHdpbmRvdyBpcyBwYXJ0aWFsbHkKKyAgICAgKiBvYnNjdXJlZCwgd2Ugd2FudCB0byByZWNlaXZlIGFuIGV2ZW50IHRvIHRlbGwgdXMgd2hldGhlciBpdCB3b3JrZWQKKyAgICAgKiBvciBub3QuCisgICAgICovCisgICAgaWYgKGd1aS50ZXh0X2djICE9IE5VTEwpCisJZ2RrX2djX3NldF9leHBvc3VyZXMoZ3VpLnRleHRfZ2MsCisJCQkgICAgIGd1aS52aXNpYmlsaXR5ICE9IEdES19WSVNJQklMSVRZX1VOT0JTQ1VSRUQpOworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFJlZHJhdyB0aGUgY29ycmVzcG9uZGluZyBwb3J0aW9ucyBvZiB0aGUgc2NyZWVuLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgZ2ludAorZXhwb3NlX2V2ZW50KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgLyogU2tpcCB0aGlzIHdoZW4gdGhlIEdVSSBpc24ndCBzZXQgdXAgeWV0LCB3aWxsIHJlZHJhdyBsYXRlci4gKi8KKyAgICBpZiAoZ3VpLnN0YXJ0aW5nKQorCXJldHVybiBGQUxTRTsKKworICAgIG91dF9mbHVzaCgpOwkJLyogbWFrZSBzdXJlIGFsbCBvdXRwdXQgaGFzIGJlZW4gcHJvY2Vzc2VkICovCisgICAgZ3VpX3JlZHJhdyhldmVudC0+YXJlYS54LCBldmVudC0+YXJlYS55LAorCSAgICAgICBldmVudC0+YXJlYS53aWR0aCwgZXZlbnQtPmFyZWEuaGVpZ2h0KTsKKworICAgIC8qIENsZWFyIHRoZSBib3JkZXIgYXJlYXMgaWYgbmVlZGVkICovCisgICAgaWYgKGV2ZW50LT5hcmVhLnggPCBGSUxMX1goMCkpCisJZ2RrX3dpbmRvd19jbGVhcl9hcmVhKGd1aS5kcmF3YXJlYS0+d2luZG93LCAwLCAwLCBGSUxMX1goMCksIDApOworICAgIGlmIChldmVudC0+YXJlYS55IDwgRklMTF9ZKDApKQorCWdka193aW5kb3dfY2xlYXJfYXJlYShndWkuZHJhd2FyZWEtPndpbmRvdywgMCwgMCwgMCwgRklMTF9ZKDApKTsKKyAgICBpZiAoZXZlbnQtPmFyZWEueCA+IEZJTExfWChDb2x1bW5zKSkKKwlnZGtfd2luZG93X2NsZWFyX2FyZWEoZ3VpLmRyYXdhcmVhLT53aW5kb3csCisJCQkgICAgICBGSUxMX1goKGludClDb2x1bW5zKSwgMCwgMCwgMCk7CisgICAgaWYgKGV2ZW50LT5hcmVhLnkgPiBGSUxMX1koUm93cykpCisJZ2RrX3dpbmRvd19jbGVhcl9hcmVhKGd1aS5kcmF3YXJlYS0+d2luZG93LCAwLCBGSUxMX1koKGludClSb3dzKSwgMCwgMCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorLyoKKyAqIEhhbmRsZSBjaGFuZ2VzIHRvIHRoZSAiQ29tbSIgcHJvcGVydHkKKyAqLworLypBUkdTVVNFRDIqLworICAgIHN0YXRpYyBnaW50Citwcm9wZXJ0eV9ldmVudChHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnRQcm9wZXJ0eSAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19QUk9QRVJUWV9OT1RJRlkKKwkgICAgJiYgZXZlbnQtPnN0YXRlID09IChpbnQpR0RLX1BST1BFUlRZX05FV19WQUxVRQorCSAgICAmJiBHREtfV0lORE9XX1hXSU5ET1coZXZlbnQtPndpbmRvdykgPT0gY29tbVdpbmRvdworCSAgICAmJiBHRVRfWF9BVE9NKGV2ZW50LT5hdG9tKSA9PSBjb21tUHJvcGVydHkpCisgICAgeworCVhFdmVudCB4ZXY7CisKKwkvKiBUcmFuc2xhdGUgdG8gWExpYiAqLworCXhldi54cHJvcGVydHkudHlwZSA9IFByb3BlcnR5Tm90aWZ5OworCXhldi54cHJvcGVydHkuYXRvbSA9IGNvbW1Qcm9wZXJ0eTsKKwl4ZXYueHByb3BlcnR5LndpbmRvdyA9IGNvbW1XaW5kb3c7CisJeGV2Lnhwcm9wZXJ0eS5zdGF0ZSA9IFByb3BlcnR5TmV3VmFsdWU7CisJc2VydmVyRXZlbnRQcm9jKEdES19XSU5ET1dfWERJU1BMQVkod2lkZ2V0LT53aW5kb3cpLCAmeGV2KTsKKworCWlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwkgICAgZ3RrX21haW5fcXVpdCgpOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRm9jdXMgaGFuZGxlcnM6CisgKi8KKworCisvKgorICogVGhpcyBpcyBhIHNpbXBsZSBzdGF0ZSBtYWNoaW5lOgorICogQkxJTktfTk9ORQlub3QgYmxpbmtpbmcgYXQgYWxsCisgKiBCTElOS19PRkYJYmxpbmtpbmcsIGN1cnNvciBpcyBub3Qgc2hvd24KKyAqIEJMSU5LX09OCWJsaW5raW5nLCBjdXJzb3IgaXMgc2hvd24KKyAqLworCisjZGVmaW5lIEJMSU5LX05PTkUgIDAKKyNkZWZpbmUgQkxJTktfT0ZGICAgMQorI2RlZmluZSBCTElOS19PTiAgICAyCisKK3N0YXRpYyBpbnQgYmxpbmtfc3RhdGUgPSBCTElOS19OT05FOworc3RhdGljIGxvbmdfdSBibGlua193YWl0dGltZSA9IDcwMDsKK3N0YXRpYyBsb25nX3UgYmxpbmtfb250aW1lID0gNDAwOworc3RhdGljIGxvbmdfdSBibGlua19vZmZ0aW1lID0gMjUwOworc3RhdGljIGd1aW50IGJsaW5rX3RpbWVyID0gMDsKKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2JsaW5raW5nKGxvbmcgd2FpdHRpbWUsIGxvbmcgb24sIGxvbmcgb2ZmKQoreworICAgIGJsaW5rX3dhaXR0aW1lID0gd2FpdHRpbWU7CisgICAgYmxpbmtfb250aW1lID0gb247CisgICAgYmxpbmtfb2ZmdGltZSA9IG9mZjsKK30KKworLyoKKyAqIFN0b3AgdGhlIGN1cnNvciBibGlua2luZy4gIFNob3cgdGhlIGN1cnNvciBpZiBpdCB3YXNuJ3Qgc2hvd24uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3N0b3BfYmxpbmsodm9pZCkKK3sKKyAgICBpZiAoYmxpbmtfdGltZXIpCisgICAgeworCWd0a190aW1lb3V0X3JlbW92ZShibGlua190aW1lcik7CisJYmxpbmtfdGltZXIgPSAwOworICAgIH0KKyAgICBpZiAoYmxpbmtfc3RhdGUgPT0gQkxJTktfT0ZGKQorCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKyAgICBibGlua19zdGF0ZSA9IEJMSU5LX05PTkU7Cit9CisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyBnaW50CitibGlua19jYihncG9pbnRlciBkYXRhKQoreworICAgIGlmIChibGlua19zdGF0ZSA9PSBCTElOS19PTikKKyAgICB7CisJZ3VpX3VuZHJhd19jdXJzb3IoKTsKKwlibGlua19zdGF0ZSA9IEJMSU5LX09GRjsKKwlibGlua190aW1lciA9IGd0a190aW1lb3V0X2FkZCgoZ3VpbnQzMilibGlua19vZmZ0aW1lLAorCQkJCSAgIChHdGtGdW5jdGlvbikgYmxpbmtfY2IsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKwlibGlua19zdGF0ZSA9IEJMSU5LX09OOworCWJsaW5rX3RpbWVyID0gZ3RrX3RpbWVvdXRfYWRkKChndWludDMyKWJsaW5rX29udGltZSwKKwkJCQkgICAoR3RrRnVuY3Rpb24pIGJsaW5rX2NiLCBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gRkFMU0U7CQkvKiBkb24ndCBoYXBwZW4gYWdhaW4gKi8KK30KKworLyoKKyAqIFN0YXJ0IHRoZSBjdXJzb3IgYmxpbmtpbmcuICBJZiBpdCB3YXMgYWxyZWFkeSBibGlua2luZywgdGhpcyByZXN0YXJ0cyB0aGUKKyAqIHdhaXRpbmcgdGltZSBhbmQgc2hvd3MgdGhlIGN1cnNvci4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc3RhcnRfYmxpbmsodm9pZCkKK3sKKyAgICBpZiAoYmxpbmtfdGltZXIpCisJZ3RrX3RpbWVvdXRfcmVtb3ZlKGJsaW5rX3RpbWVyKTsKKyAgICAvKiBPbmx5IHN3aXRjaCBibGlua2luZyBvbiBpZiBub25lIG9mIHRoZSB0aW1lcyBpcyB6ZXJvICovCisgICAgaWYgKGJsaW5rX3dhaXR0aW1lICYmIGJsaW5rX29udGltZSAmJiBibGlua19vZmZ0aW1lICYmIGd1aS5pbl9mb2N1cykKKyAgICB7CisJYmxpbmtfdGltZXIgPSBndGtfdGltZW91dF9hZGQoKGd1aW50MzIpYmxpbmtfd2FpdHRpbWUsCisJCQkJICAgKEd0a0Z1bmN0aW9uKSBibGlua19jYiwgTlVMTCk7CisJYmxpbmtfc3RhdGUgPSBCTElOS19PTjsKKwlndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisgICAgfQorfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgZ2ludAorZW50ZXJfbm90aWZ5X2V2ZW50KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudENyb3NzaW5nICpldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoYmxpbmtfc3RhdGUgPT0gQkxJTktfTk9ORSkKKwlndWlfbWNoX3N0YXJ0X2JsaW5rKCk7CisKKyAgICAvKiBtYWtlIHN1cmUga2V5Ym9hcmQgaW5wdXQgZ29lcyB0aGVyZSAqLworICAgIGlmIChndGtfc29ja2V0X2lkID09IDAgfHwgIUdUS19XSURHRVRfSEFTX0ZPQ1VTKGd1aS5kcmF3YXJlYSkpCisJZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGd1aS5kcmF3YXJlYSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyBnaW50CitsZWF2ZV9ub3RpZnlfZXZlbnQoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50Q3Jvc3NpbmcgKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChibGlua19zdGF0ZSAhPSBCTElOS19OT05FKQorCWd1aV9tY2hfc3RvcF9ibGluaygpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgZ2ludAorZm9jdXNfaW5fZXZlbnQoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50Rm9jdXMgKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIGd1aV9mb2N1c19jaGFuZ2UoVFJVRSk7CisKKyAgICBpZiAoYmxpbmtfc3RhdGUgPT0gQkxJTktfTk9ORSkKKwlndWlfbWNoX3N0YXJ0X2JsaW5rKCk7CisKKyAgICAvKiBtYWtlIHN1cmUga2V5Ym9hcmQgaW5wdXQgZ29lcyB0aGVyZSAqLworICAgIGlmIChndGtfc29ja2V0X2lkID09IDApCisJZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGd1aS5kcmF3YXJlYSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIGdpbnQKK2ZvY3VzX291dF9ldmVudChHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnRGb2N1cyAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3VpX2ZvY3VzX2NoYW5nZShGQUxTRSk7CisKKyAgICBpZiAoYmxpbmtfc3RhdGUgIT0gQkxJTktfTk9ORSkKKwlndWlfbWNoX3N0b3BfYmxpbmsoKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisKKyNpZmRlZiBIQVZFX0dUSzIKKy8qCisgKiBUcmFuc2xhdGUgYSBHREsga2V5IHZhbHVlIHRvIFVURi04IGluZGVwZW5kZW50bHkgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLgorICogVGhlIG91dHB1dCBpcyB3cml0dGVuIHRvIHN0cmluZywgd2hpY2ggbXVzdCBoYXZlIHJvb20gZm9yIGF0IGxlYXN0IDYgYnl0ZXMKKyAqIHBsdXMgdGhlIE5VTCB0ZXJtaW5hdG9yLiAgUmV0dXJucyB0aGUgbGVuZ3RoIGluIGJ5dGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiB0aGUgR1RLKyAyIEdVSSBvbmx5LiAgVGhlIEdUSysgMSBjb2RlIG1ha2VzIHVzZQorICogb2YgR2RrRXZlbnRLZXk6OnN0cmluZyBpbnN0ZWFkLiAgQnV0IGV2ZW50LT5zdHJpbmcgaXMgZXZpbDsgc2VlIGhlcmUgd2h5OgorICogaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZG9jL0FQSS8yLjAvZ2RrL2dkay1FdmVudC1TdHJ1Y3R1cmVzLmh0bWwjR2RrRXZlbnRLZXkKKyAqLworICAgIHN0YXRpYyBpbnQKK2tleXZhbF90b19zdHJpbmcodW5zaWduZWQgaW50IGtleXZhbCwgdW5zaWduZWQgaW50IHN0YXRlLCBjaGFyX3UgKnN0cmluZykKK3sKKyAgICBpbnQJICAgIGxlbjsKKyAgICBndWludDMyIHVjOworCisgICAgdWMgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoa2V5dmFsKTsKKyAgICBpZiAodWMgIT0gMCkKKyAgICB7CisJLyogQ2hlY2sgZm9yIENUUkwtZm9vICovCisJaWYgKChzdGF0ZSAmIEdES19DT05UUk9MX01BU0spICYmIHVjID49IDB4MjAgJiYgdWMgPCAweDgwKQorCXsKKwkgICAgLyogVGhlc2UgbWFwcGluZ3MgbG9vayBhcmJpdHJhcnkgYXQgdGhlIGZpcnN0IGdsYW5jZSwgYnV0IGluIGZhY3QKKwkgICAgICogcmVzZW1ibGUgcXVpdGUgZXhhY3RseSB0aGUgYmVoYXZpb3VyIG9mIHRoZSBHVEsrIDEuMiBHVUkgb24gbXkKKwkgICAgICogbWFjaGluZS4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgQlMgdnMuIERFTCBmb3IgQ1RSTC04IChtYWtlcworCSAgICAgKiBtb3JlIHNlbnNlIGFuZCBpcyBjb25zaXN0ZW50IHdpdGggdXN1YWwgdGVybWluYWwgYmVoYXZpb3VyKS4gKi8KKwkgICAgaWYgKHVjID49ICdAJykKKwkJc3RyaW5nWzBdID0gdWMgJiAweDFGOworCSAgICBlbHNlIGlmICh1YyA9PSAnMicpCisJCXN0cmluZ1swXSA9IE5VTDsKKwkgICAgZWxzZSBpZiAodWMgPj0gJzMnICYmIHVjIDw9ICc3JykKKwkJc3RyaW5nWzBdID0gdWMgXiAweDI4OworCSAgICBlbHNlIGlmICh1YyA9PSAnOCcpCisJCXN0cmluZ1swXSA9IEJTOworCSAgICBlbHNlIGlmICh1YyA9PSAnPycpCisJCXN0cmluZ1swXSA9IERFTDsKKwkgICAgZWxzZQorCQlzdHJpbmdbMF0gPSB1YzsKKwkgICAgbGVuID0gMTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyogVHJhbnNsYXRlIGEgbm9ybWFsIGtleSB0byBVVEYtOC4gIFRoaXMgZG9lc24ndCB3b3JrIGZvciBkZWFkCisJICAgICAqIGtleXMgb2YgY291cnNlLCB5b3UgX2hhdmVfIHRvIHVzZSBhbiBpbnB1dCBtZXRob2QgZm9yIHRoYXQuICovCisJICAgIGxlbiA9IHV0Zl9jaGFyMmJ5dGVzKChpbnQpdWMsIHN0cmluZyk7CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIFRyYW5zbGF0ZSBrZXlzIHdoaWNoIGFyZSByZXByZXNlbnRlZCBieSBBU0NJSSBjb250cm9sIGNvZGVzIGluIFZpbS4KKwkgKiBUaGVyZSBhcmUgb25seSBhIGZldyBvZiB0aG9zZTsgbW9zdCBjb250cm9sIGtleXMgYXJlIHRyYW5zbGF0ZWQgdG8KKwkgKiBzcGVjaWFsIHRlcm1pbmFsLWxpa2UgY29udHJvbCBzZXF1ZW5jZXMuICovCisJbGVuID0gMTsKKwlzd2l0Y2ggKGtleXZhbCkKKwl7CisJICAgIGNhc2UgR0RLX1RhYjogY2FzZSBHREtfS1BfVGFiOiBjYXNlIEdES19JU09fTGVmdF9UYWI6CisJCXN0cmluZ1swXSA9IFRBQjsKKwkJYnJlYWs7CisJICAgIGNhc2UgR0RLX0xpbmVmZWVkOgorCQlzdHJpbmdbMF0gPSBOTDsKKwkJYnJlYWs7CisJICAgIGNhc2UgR0RLX1JldHVybjogY2FzZSBHREtfSVNPX0VudGVyOiBjYXNlIEdES18zMjcwX0VudGVyOgorCQlzdHJpbmdbMF0gPSBDQVI7CisJCWJyZWFrOworCSAgICBjYXNlIEdES19Fc2NhcGU6CisJCXN0cmluZ1swXSA9IEVTQzsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWxlbiA9IDA7CisJCWJyZWFrOworCX0KKyAgICB9CisgICAgc3RyaW5nW2xlbl0gPSBOVUw7CisKKyAgICByZXR1cm4gbGVuOworfQorI2VuZGlmIC8qIEhBVkVfR1RLMiAqLworCisvKgorICogTWFpbiBrZXlib2FyZCBoYW5kbGVyOgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgZ2ludAora2V5X3ByZXNzX2V2ZW50KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudEtleSAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisjaWZkZWYgSEFWRV9HVEsyCisgICAgLyogMjU2IGJ5dGVzIGlzIHdheSBvdmVyIHRoZSB0b3AsIGJ1dCBmb3Igc2FmZXR5IGxldCdzIHJlZHVjZSBpdCBvbmx5CisgICAgICogZm9yIEdUSysgMiB3aGVyZSB3ZSBrbm93IGZvciBzdXJlIGhvdyBsYXJnZSB0aGUgc3RyaW5nIG1pZ2h0IGdldC4KKyAgICAgKiAoVGhhdCBpcywgdXAgdG8gNiBieXRlcyArIE5VTCArIENTSSBlc2NhcGVzICsgc2FmZXR5IG1lYXN1cmUuKSAqLworICAgIGNoYXJfdQlzdHJpbmdbMzJdLCBzdHJpbmcyWzMyXTsKKyNlbHNlCisgICAgY2hhcl91CXN0cmluZ1syNTZdLCBzdHJpbmcyWzI1Nl07CisjZW5kaWYKKyAgICBndWludAlrZXlfc3ltOworICAgIGludAkJbGVuOworICAgIGludAkJaTsKKyAgICBpbnQJCW1vZGlmaWVyczsKKyAgICBpbnQJCWtleTsKKyAgICBndWludAlzdGF0ZTsKKyAgICBjaGFyX3UJKnMsICpkOworCisgICAga2V5X3N5bSA9IGV2ZW50LT5rZXl2YWw7CisgICAgc3RhdGUgPSBldmVudC0+c3RhdGU7CisjaWZuZGVmIEhBVkVfR1RLMiAvKiBkZXByZWNhdGVkICovCisgICAgbGVuID0gZXZlbnQtPmxlbmd0aDsKKyAgICBnX2Fzc2VydChsZW4gPD0gc2l6ZW9mKHN0cmluZykpOworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9HVEsyCisgICAgLyoKKyAgICAgKiBJdCBhcHBlYXJzIGFzIGlmIHdlIGFsd2F5cyB3YW50IHRvIGNvbnN1bWUgYSBrZXktcHJlc3MgKHRoZXJlIGN1cnJlbnRseQorICAgICAqIGFyZW4ndCBhbnkgJ3JldHVybiBGQUxTRSdzKSwgc28gd2UgYWx3YXlzIGRvIHRoaXM6IHdoZW4gcnVubmluZyBpbiBhCisgICAgICogR3RrUGx1ZyBhbmQgbm90IGEgd2luZG93LCB3ZSBtdXN0IHByZXZlbnQgZW1pc3Npb24gb2YgdGhlIGtleV9wcmVzcworICAgICAqIEVWRU5UIGZyb20gY29udGludWluZyAod2hpY2ggaXMgJ2JleW9uZCcgdGhlIGxldmVsIG9mIHN0b3BwaW5nIG1lcmUKKyAgICAgKiBzaWduYWxzIGJ5IHJldHVybmluZyBGQUxTRSksIG90aGVyd2lzZSB0aGluZ3MgbGlrZSB0YWIvY3Vyc29yLWtleXMgYXJlCisgICAgICogcHJvY2Vzc2VkIGJ5IHRoZSBHdGtQbHVnIGRlZmF1bHQgaGFuZGxlciwgd2hpY2ggbW92ZXMgaW5wdXQgZm9jdXMgYXdheQorICAgICAqIGZyb20gdXMhCisgICAgICogTm90ZTogVGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeSB3aXRoIEdUSysgMi4KKyAgICAgKi8KKyAgICBpZiAoZ3RrX3NvY2tldF9pZCAhPSAwKQorCWd0a19zaWduYWxfZW1pdF9zdG9wX2J5X25hbWUoR1RLX09CSkVDVCh3aWRnZXQpLCAia2V5X3ByZXNzX2V2ZW50Iik7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfWElNCisgICAgaWYgKHhpbV9xdWV1ZV9rZXlfcHJlc3NfZXZlbnQoZXZlbnQsIFRSVUUpKQorCXJldHVybiBUUlVFOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0hBTkdVTElOCisgICAgaWYgKGtleV9zeW0gPT0gR0RLX3NwYWNlICYmIChzdGF0ZSAmIEdES19TSElGVF9NQVNLKSkKKyAgICB7CisJaGFuZ3VsX2lucHV0X3N0YXRlX3RvZ2dsZSgpOworCXJldHVybiBUUlVFOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgU3VuWEtfRjM2CisgICAgLyoKKyAgICAgKiBUaGVzZSBrZXlzIGhhdmUgYm9ndXMgbG9va3VwIHN0cmluZ3MsIGFuZCB0cmFwcGluZyB0aGVtIGhlcmUgaXMKKyAgICAgKiBlYXNpZXIgdGhhbiB0cnlpbmcgdG8gWFJlYmluZEtleXN5bSgpIG9uIHRoZW0gd2l0aCBldmVyeSBwb3NzaWJsZQorICAgICAqIGNvbWJpbmF0aW9uIG9mIG1vZGlmaWVycy4KKyAgICAgKi8KKyAgICBpZiAoa2V5X3N5bSA9PSBTdW5YS19GMzYgfHwga2V5X3N5bSA9PSBTdW5YS19GMzcpCisJbGVuID0gMDsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisjaWZkZWYgSEFWRV9HVEsyCisJbGVuID0ga2V5dmFsX3RvX3N0cmluZyhrZXlfc3ltLCBzdGF0ZSwgc3RyaW5nMik7CisKKwkvKiBDYXJlZnVsOiBjb252ZXJ0X2lucHV0KCkgZG9lc24ndCBoYW5kbGUgdGhlIE5VTCBjaGFyYWN0ZXIuCisJICogTm8gbmVlZCB0byBjb252ZXJ0IHB1cmUgQVNDSUkgYW55d2F5LCB0aHVzIHRoZSBsZW4gPiAxIGNoZWNrLiAqLworCWlmIChsZW4gPiAxICYmIGlucHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJICAgIGxlbiA9IGNvbnZlcnRfaW5wdXQoc3RyaW5nMiwgbGVuLCBzaXplb2Yoc3RyaW5nMikpOworCisJcyA9IHN0cmluZzI7CisjZWxzZQorIyBpZmRlZiBGRUFUX01CWVRFCisJaWYgKGlucHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJeworCSAgICBtY2hfbWVtbW92ZShzdHJpbmcyLCBldmVudC0+c3RyaW5nLCBsZW4pOworCSAgICBsZW4gPSBjb252ZXJ0X2lucHV0KHN0cmluZzIsIGxlbiwgc2l6ZW9mKHN0cmluZzIpKTsKKwkgICAgcyA9IHN0cmluZzI7CisJfQorCWVsc2UKKyMgZW5kaWYKKwkgICAgcyA9IChjaGFyX3UgKilldmVudC0+c3RyaW5nOworI2VuZGlmCisKKwlkID0gc3RyaW5nOworCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwl7CisJICAgICpkKysgPSBzW2ldOworCSAgICBpZiAoZFstMV0gPT0gQ1NJICYmIGQgKyAyIDwgc3RyaW5nICsgc2l6ZW9mKHN0cmluZykpCisJICAgIHsKKwkJLyogVHVybiBDU0kgaW50byBLX0NTSS4gKi8KKwkJKmQrKyA9IEtTX0VYVFJBOworCQkqZCsrID0gKGludClLRV9DU0k7CisJICAgIH0KKwl9CisJbGVuID0gZCAtIHN0cmluZzsKKyAgICB9CisKKyAgICAvKiBTaGlmdC1UYWIgcmVzdWx0cyBpbiBMZWZ0X1RhYiwgYnV0IHdlIHdhbnQgPFMtVGFiPiAqLworICAgIGlmIChrZXlfc3ltID09IEdES19JU09fTGVmdF9UYWIpCisgICAgeworCWtleV9zeW0gPSBHREtfVGFiOworCXN0YXRlIHw9IEdES19TSElGVF9NQVNLOworICAgIH0KKworI2lmbmRlZiBIQVZFX0dUSzIgLyogZm9yIEdUSysgMiwgd2UgaGFuZGxlIHRoaXMgaW4ga2V5dmFsX3RvX3N0cmluZygpICovCisgICAgaWYgKChrZXlfc3ltID09IEdES18yIHx8IGtleV9zeW0gPT0gR0RLX2F0KSAmJiAoc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKSkKKyAgICB7CisJc3RyaW5nWzBdID0gTlVMOwkvKiBDVFJMLTIgYW5kIENUUkwtQCBpcyBOVUwgKi8KKwlsZW4gPSAxOworICAgIH0KKyAgICBlbHNlIGlmIChsZW4gPT0gMCAmJiAoa2V5X3N5bSA9PSBHREtfc3BhY2UgfHwga2V5X3N5bSA9PSBHREtfVGFiKSkKKyAgICB7CisJLyogV2hlbiB0aGVyZSBhcmUgbW9kaWZpZXJzLCB0aGVzZSBrZXlzIGdldCB6ZXJvIGxlbmd0aDsgd2UgbmVlZCB0aGUKKwkgKiBvcmlnaW5hbCBrZXkgaGVyZSB0byBiZSBhYmxlIHRvIGFkZCBhIG1vZGlmaWVyIGJlbG93LiAqLworCXN0cmluZ1swXSA9IChrZXlfc3ltICYgMHhmZik7CisJbGVuID0gMTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUVOVQorICAgIC8qIElmIHRoZXJlIGlzIGEgbWVudSBhbmQgJ3dhaycgaXMgInllcyIsIG9yICd3YWsnIGlzICJtZW51IiBhbmQgdGhlIGtleQorICAgICAqIGlzIGEgbWVudSBzaG9ydGN1dCwgd2UgaWdub3JlIGV2ZXJ5dGhpbmcgd2l0aCB0aGUgQUxUIG1vZGlmaWVyLiAqLworICAgIGlmICgoc3RhdGUgJiBHREtfTU9EMV9NQVNLKQorCSAgICAmJiBndWkubWVudV9pc19hY3RpdmUKKwkgICAgJiYgKCpwX3dhayA9PSAneScKKwkJfHwgKCpwX3dhayA9PSAnbScKKwkJICAgICYmIGxlbiA9PSAxCisJCSAgICAmJiBndWlfaXNfbWVudV9zaG9ydGN1dChzdHJpbmdbMF0pKSkpCisjIGlmZGVmIEhBVkVfR1RLMgorCS8qIEZvciBHVEsyIHdlIHJldHVybiBmYWxzZSB0byBzaWduaWZ5IHRoYXQgd2UgaGF2ZW4ndCBoYW5kbGVkIHRoZQorCSAqIGtleXByZXNzLCBzbyB0aGF0IGd0ayB3aWxsIGhhbmRsZSB0aGUgbW5lbW9uaWMgb3IgYWNjZWxlcmF0b3IuICovCisJcmV0dXJuIEZBTFNFOworIyBlbHNlCisJcmV0dXJuIFRSVUU7CisjIGVuZGlmCisjZW5kaWYKKworICAgIC8qIENoZWNrIGZvciBBbHQvTWV0YSBrZXkgKE1vZDFNYXNrKSwgYnV0IG5vdCBmb3IgYSBCUywgREVMIG9yIGNoYXJhY3RlcgorICAgICAqIHRoYXQgYWxyZWFkeSBoYXMgdGhlIDh0aCBiaXQgc2V0LgorICAgICAqIERvbid0IGRvIHRoaXMgZm9yIDxTLU0tVGFiPiwgdGhhdCBzaG91bGQgYmVjb21lIEtfU19UQUIgd2l0aCBBTFQuCisgICAgICogRG9uJ3QgZG8gdGhpcyBmb3IgZG91YmxlLWJ5dGUgZW5jb2RpbmdzLCBpdCB0dXJucyB0aGUgY2hhciBpbnRvIGEgbGVhZAorICAgICAqIGJ5dGUuICovCisgICAgaWYgKGxlbiA9PSAxCisJICAgICYmIChzdGF0ZSAmIEdES19NT0QxX01BU0spCisJICAgICYmICEoa2V5X3N5bSA9PSBHREtfQmFja1NwYWNlIHx8IGtleV9zeW0gPT0gR0RLX0RlbGV0ZSkKKwkgICAgJiYgKHN0cmluZ1swXSAmIDB4ODApID09IDAKKwkgICAgJiYgIShrZXlfc3ltID09IEdES19UYWIgJiYgKHN0YXRlICYgR0RLX1NISUZUX01BU0spKQorI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgJiYgIWVuY19kYmNzCisjZW5kaWYKKwkgICAgKQorICAgIHsKKwlzdHJpbmdbMF0gfD0gMHg4MDsKKwlzdGF0ZSAmPSB+R0RLX01PRDFfTUFTSzsJLyogZG9uJ3QgdXNlIGl0IGFnYWluICovCisjaWZkZWYgRkVBVF9NQllURQorCWlmIChlbmNfdXRmOCkgLyogY29udmVydCB0byB1dGYtOCAqLworCXsKKwkgICAgc3RyaW5nWzFdID0gc3RyaW5nWzBdICYgMHhiZjsKKwkgICAgc3RyaW5nWzBdID0gKCh1bnNpZ25lZClzdHJpbmdbMF0gPj4gNikgKyAweGMwOworCSAgICBpZiAoc3RyaW5nWzFdID09IENTSSkKKwkgICAgeworCQlzdHJpbmdbMl0gPSBLU19FWFRSQTsKKwkJc3RyaW5nWzNdID0gKGludClLRV9DU0k7CisJCWxlbiA9IDQ7CisJICAgIH0KKwkgICAgZWxzZQorCQlsZW4gPSAyOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIC8qIENoZWNrIGZvciBzcGVjaWFsIGtleXMuCUFsc28gZG8gdGhpcyB3aGVuIGxlbiA9PSAxIChrZXkgaGFzIGFuIEFTQ0lJCisgICAgICogdmFsdWUpIHRvIGRldGVjdCBiYWNrc3BhY2UsIGRlbGV0ZSBhbmQga2V5cGFkIGtleXMuICovCisgICAgaWYgKGxlbiA9PSAwIHx8IGxlbiA9PSAxKQorICAgIHsKKwlmb3IgKGkgPSAwOyBzcGVjaWFsX2tleXNbaV0ua2V5X3N5bSAhPSAwOyBpKyspCisJeworCSAgICBpZiAoc3BlY2lhbF9rZXlzW2ldLmtleV9zeW0gPT0ga2V5X3N5bSkKKwkgICAgeworCQlzdHJpbmdbMF0gPSBDU0k7CisJCXN0cmluZ1sxXSA9IHNwZWNpYWxfa2V5c1tpXS5jb2RlMDsKKwkJc3RyaW5nWzJdID0gc3BlY2lhbF9rZXlzW2ldLmNvZGUxOworCQlsZW4gPSAtMzsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKGxlbiA9PSAwKSAgIC8qIFVucmVjb2duaXplZCBrZXkgKi8KKwlyZXR1cm4gVFJVRTsKKworI2lmIGRlZmluZWQoRkVBVF9YSU0pICYmIGRlZmluZWQoRkVBVF9HVUlfR1RLKSAmJiAhZGVmaW5lZChIQVZFX0dUSzIpCisgICAgLyogQ2FuY2VsIG9yIHR5cGUgYmFja3NwYWNlLiBGb3IgR1RLMiwgaW1fY29tbWl0X2NiKCkgZG9lcyB0aGUgc2FtZS4gKi8KKyAgICBwcmVlZGl0X3N0YXJ0X2NvbCA9IE1BWENPTDsKKyAgICB4aW1fY2hhbmdlZF93aGlsZV9wcmVlZGl0aW5nID0gVFJVRTsKKyNlbmRpZgorCisgICAgLyogU3BlY2lhbCBrZXlzIChhbmQgYSBmZXcgb3RoZXJzKSBtYXkgaGF2ZSBtb2RpZmllcnMuIEFsc28gd2hlbiB1c2luZyBhCisgICAgICogZG91YmxlLWJ5dGUgZW5jb2RpbmcgKGNhbid0IHNldCB0aGUgOHRoIGJpdCkuICovCisgICAgaWYgKGxlbiA9PSAtMyB8fCBrZXlfc3ltID09IEdES19zcGFjZSB8fCBrZXlfc3ltID09IEdES19UYWIKKwkgICAgfHwga2V5X3N5bSA9PSBHREtfUmV0dXJuIHx8IGtleV9zeW0gPT0gR0RLX0xpbmVmZWVkCisJICAgIHx8IGtleV9zeW0gPT0gR0RLX0VzY2FwZSB8fCBrZXlfc3ltID09IEdES19LUF9UYWIKKwkgICAgfHwga2V5X3N5bSA9PSBHREtfSVNPX0VudGVyIHx8IGtleV9zeW0gPT0gR0RLXzMyNzBfRW50ZXIKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIHx8IChlbmNfZGJjcyAmJiBsZW4gPT0gMSAmJiAoc3RhdGUgJiBHREtfTU9EMV9NQVNLKSkKKyNlbmRpZgorCSAgICApCisgICAgeworCW1vZGlmaWVycyA9IDA7CisJaWYgKHN0YXRlICYgR0RLX1NISUZUX01BU0spCisJICAgIG1vZGlmaWVycyB8PSBNT0RfTUFTS19TSElGVDsKKwlpZiAoc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorCSAgICBtb2RpZmllcnMgfD0gTU9EX01BU0tfQ1RSTDsKKwlpZiAoc3RhdGUgJiBHREtfTU9EMV9NQVNLKQorCSAgICBtb2RpZmllcnMgfD0gTU9EX01BU0tfQUxUOworCisJLyoKKwkgKiBGb3Igc29tZSBrZXlzIGEgc2hpZnQgbW9kaWZpZXIgaXMgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIga2V5CisJICogY29kZS4KKwkgKi8KKwlpZiAobGVuID09IC0zKQorCSAgICBrZXkgPSBUT19TUEVDSUFMKHN0cmluZ1sxXSwgc3RyaW5nWzJdKTsKKwllbHNlCisJICAgIGtleSA9IHN0cmluZ1swXTsKKworCWtleSA9IHNpbXBsaWZ5X2tleShrZXksICZtb2RpZmllcnMpOworCWlmIChrZXkgPT0gQ1NJKQorCSAgICBrZXkgPSBLX0NTSTsKKwlpZiAoSVNfU1BFQ0lBTChrZXkpKQorCXsKKwkgICAgc3RyaW5nWzBdID0gQ1NJOworCSAgICBzdHJpbmdbMV0gPSBLX1NFQ09ORChrZXkpOworCSAgICBzdHJpbmdbMl0gPSBLX1RISVJEKGtleSk7CisJICAgIGxlbiA9IDM7CisJfQorCWVsc2UKKwl7CisJICAgIHN0cmluZ1swXSA9IGtleTsKKwkgICAgbGVuID0gMTsKKwl9CisKKwlpZiAobW9kaWZpZXJzICE9IDApCisJeworCSAgICBzdHJpbmcyWzBdID0gQ1NJOworCSAgICBzdHJpbmcyWzFdID0gS1NfTU9ESUZJRVI7CisJICAgIHN0cmluZzJbMl0gPSBtb2RpZmllcnM7CisJICAgIGFkZF90b19pbnB1dF9idWYoc3RyaW5nMiwgMyk7CisJfQorICAgIH0KKworICAgIGlmIChsZW4gPT0gMSAmJiAoKHN0cmluZ1swXSA9PSBDdHJsX0MgJiYgY3RybF9jX2ludGVycnVwdHMpCisJCSAgIHx8IChzdHJpbmdbMF0gPT0gaW50cl9jaGFyICYmIGludHJfY2hhciAhPSBDdHJsX0MpKSkKKyAgICB7CisJdHJhc2hfaW5wdXRfYnVmKCk7CisJZ290X2ludCA9IFRSVUU7CisgICAgfQorCisgICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIGxlbik7CisKKyAgICAvKiBibGFuayBvdXQgdGhlIHBvaW50ZXIgaWYgbmVjZXNzYXJ5ICovCisgICAgaWYgKHBfbWgpCisJZ3VpX21jaF9tb3VzZWhpZGUoVFJVRSk7CisKKyAgICBpZiAoZ3RrX21haW5fbGV2ZWwoKSA+IDApCisJZ3RrX21haW5fcXVpdCgpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfWElNKSAmJiBkZWZpbmVkKEhBVkVfR1RLMikKKy8qQVJHU1VTRUQwKi8KKyAgICBzdGF0aWMgZ2Jvb2xlYW4KK2tleV9yZWxlYXNlX2V2ZW50KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudEtleSAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgLyoKKyAgICAgKiBHVEsrIDIgaW5wdXQgbWV0aG9kcyBtYXkgZG8gZmFuY3kgc3R1ZmYgb24ga2V5IHJlbGVhc2UgZXZlbnRzIHRvby4KKyAgICAgKiBXaXRoIHRoZSBkZWZhdWx0IElNIGZvciBpbnN0YW5jZSwgeW91IGNhbiBlbnRlciBhbnkgVUNTIGNvZGUgcG9pbnQKKyAgICAgKiBieSBob2xkaW5nIGRvd24gQ1RSTC1TSElGVCBhbmQgdHlwaW5nIGhleGFkZWNpbWFsIGRpZ2l0cy4KKyAgICAgKi8KKyAgICByZXR1cm4geGltX3F1ZXVlX2tleV9wcmVzc19ldmVudChldmVudCwgRkFMU0UpOworfQorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNlbGVjdGlvbiBoYW5kbGVyczoKKyAqLworCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgZ2ludAorc2VsZWN0aW9uX2NsZWFyX2V2ZW50KEd0a1dpZGdldAkJKndpZGdldCwKKwkJICAgICAgR2RrRXZlbnRTZWxlY3Rpb24JKmV2ZW50LAorCQkgICAgICBncG9pbnRlcgkJdXNlcl9kYXRhKQoreworICAgIGlmIChldmVudC0+c2VsZWN0aW9uID09IGNsaXBfcGx1cy5ndGtfc2VsX2F0b20pCisJY2xpcF9sb3NlX3NlbGVjdGlvbigmY2xpcF9wbHVzKTsKKyAgICBlbHNlCisJY2xpcF9sb3NlX3NlbGVjdGlvbigmY2xpcF9zdGFyKTsKKworICAgIGlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwlndGtfbWFpbl9xdWl0KCk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworI2RlZmluZSBSU19OT05FCTAJLyogc2VsZWN0aW9uX3JlY2VpdmVkX2NiKCkgbm90IGNhbGxlZCB5ZXQgKi8KKyNkZWZpbmUgUlNfT0sJMQkvKiBzZWxlY3Rpb25fcmVjZWl2ZWRfY2IoKSBjYWxsZWQgYW5kIE9LICovCisjZGVmaW5lIFJTX0ZBSUwJMgkvKiBzZWxlY3Rpb25fcmVjZWl2ZWRfY2IoKSBjYWxsZWQgYW5kIGZhaWxlZCAqLworc3RhdGljIGludCByZWNlaXZlZF9zZWxlY3Rpb24gPSBSU19OT05FOworCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorc2VsZWN0aW9uX3JlY2VpdmVkX2NiKEd0a1dpZGdldAkJKndpZGdldCwKKwkJICAgICAgR3RrU2VsZWN0aW9uRGF0YQkqZGF0YSwKKwkJICAgICAgZ3VpbnQJCXRpbWVfLAorCQkgICAgICBncG9pbnRlcgkJdXNlcl9kYXRhKQoreworICAgIFZpbUNsaXBib2FyZCAgICAqY2JkOworICAgIGNoYXJfdQkgICAgKnRleHQ7CisgICAgY2hhcl91CSAgICAqdG1wYnVmID0gTlVMTDsKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICBndWNoYXIJICAgICp0bXBidWZfdXRmOCA9IE5VTEw7CisjZW5kaWYKKyAgICBpbnQJCSAgICBsZW47CisgICAgaW50CQkgICAgbW90aW9uX3R5cGU7CisKKyAgICBpZiAoZGF0YS0+c2VsZWN0aW9uID09IGNsaXBfcGx1cy5ndGtfc2VsX2F0b20pCisJY2JkID0gJmNsaXBfcGx1czsKKyAgICBlbHNlCisJY2JkID0gJmNsaXBfc3RhcjsKKworICAgIHRleHQgPSAoY2hhcl91ICopZGF0YS0+ZGF0YTsKKyAgICBsZW4gID0gZGF0YS0+bGVuZ3RoOworICAgIG1vdGlvbl90eXBlID0gTUNIQVI7CisKKyAgICBpZiAodGV4dCA9PSBOVUxMIHx8IGxlbiA8PSAwKQorICAgIHsKKwlyZWNlaXZlZF9zZWxlY3Rpb24gPSBSU19GQUlMOworCS8qIGNsaXBfZnJlZV9zZWxlY3Rpb24oY2JkKTsgPz8/ICovCisKKwlpZiAoZ3RrX21haW5fbGV2ZWwoKSA+IDApCisJICAgIGd0a19tYWluX3F1aXQoKTsKKworCXJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGF0YS0+dHlwZSA9PSB2aW1fYXRvbSkKKyAgICB7CisJbW90aW9uX3R5cGUgPSAqdGV4dCsrOworCS0tbGVuOworICAgIH0KKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBlbHNlIGlmIChkYXRhLT50eXBlID09IHZpbWVuY19hdG9tKQorICAgIHsKKwljaGFyX3UJCSplbmM7CisJdmltY29udl9UCWNvbnY7CisKKwltb3Rpb25fdHlwZSA9ICp0ZXh0Kys7CisJLS1sZW47CisKKwllbmMgPSB0ZXh0OworCXRleHQgKz0gU1RSTEVOKHRleHQpICsgMTsKKwlsZW4gLT0gdGV4dCAtIGVuYzsKKworCS8qIElmIHRoZSBlbmNvZGluZyBvZiB0aGUgdGV4dCBpcyBkaWZmZXJlbnQgZnJvbSAnZW5jb2RpbmcnLCBhdHRlbXB0CisJICogY29udmVydGluZyBpdC4gKi8KKwljb252LnZjX3R5cGUgPSBDT05WX05PTkU7CisJY29udmVydF9zZXR1cCgmY29udiwgZW5jLCBwX2VuYyk7CisJaWYgKGNvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJeworCSAgICB0bXBidWYgPSBzdHJpbmdfY29udmVydCgmY29udiwgdGV4dCwgJmxlbik7CisJICAgIGlmICh0bXBidWYgIT0gTlVMTCkKKwkJdGV4dCA9IHRtcGJ1ZjsKKwkgICAgY29udmVydF9zZXR1cCgmY29udiwgTlVMTCwgTlVMTCk7CisJfQorICAgIH0KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9HVEsyCisgICAgLyogZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF90ZXh0KCkgaGFuZGxlcyBhbGwgdGhlIG5hc3R5IGRldGFpbHMKKyAgICAgKiBhbmQgdGFyZ2V0cyBhbmQgZW5jb2RpbmdzIGV0Yy4gIFRoaXMgcm9ja3Mgc28gaGFyZC4gKi8KKyAgICBlbHNlCisgICAgeworCXRtcGJ1Zl91dGY4ID0gZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF90ZXh0KGRhdGEpOworCWlmICh0bXBidWZfdXRmOCAhPSBOVUxMKQorCXsKKwkgICAgbGVuID0gU1RSTEVOKHRtcGJ1Zl91dGY4KTsKKwkgICAgaWYgKGlucHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJICAgIHsKKwkJdG1wYnVmID0gc3RyaW5nX2NvbnZlcnQoJmlucHV0X2NvbnYsIHRtcGJ1Zl91dGY4LCAmbGVuKTsKKwkJaWYgKHRtcGJ1ZiAhPSBOVUxMKQorCQkgICAgdGV4dCA9IHRtcGJ1ZjsKKwkgICAgfQorCSAgICBlbHNlCisJCXRleHQgPSB0bXBidWZfdXRmODsKKwl9CisgICAgfQorI2Vsc2UgLyogIUhBVkVfR1RLMiAqLworIyBpZmRlZiBGRUFUX01CWVRFCisgICAgZWxzZSBpZiAoZGF0YS0+dHlwZSA9PSB1dGY4X3N0cmluZ19hdG9tKQorICAgIHsKKwl2aW1jb252X1QgY29udjsKKworCWNvbnYudmNfdHlwZSA9IENPTlZfTk9ORTsKKwljb252ZXJ0X3NldHVwKCZjb252LCAoY2hhcl91ICopInV0Zi04IiwgcF9lbmMpOworCisJaWYgKGNvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJeworCSAgICB0bXBidWYgPSBzdHJpbmdfY29udmVydCgmY29udiwgdGV4dCwgJmxlbik7CisJICAgIGNvbnZlcnRfc2V0dXAoJmNvbnYsIE5VTEwsIE5VTEwpOworCX0KKwlpZiAodG1wYnVmICE9IE5VTEwpCisJICAgIHRleHQgPSB0bXBidWY7CisgICAgfQorIyBlbmRpZgorICAgIGVsc2UgaWYgKGRhdGEtPnR5cGUgPT0gY29tcG91bmRfdGV4dF9hdG9tIHx8IGRhdGEtPnR5cGUgPT0gdGV4dF9hdG9tKQorICAgIHsKKwljaGFyCSAgICAqKmxpc3QgPSBOVUxMOworCWludAkgICAgY291bnQ7CisJaW50CSAgICBpOworCXVuc2lnbmVkICAgIHRtcGxlbiA9IDA7CisKKwljb3VudCA9IGdka190ZXh0X3Byb3BlcnR5X3RvX3RleHRfbGlzdChkYXRhLT50eXBlLCBkYXRhLT5mb3JtYXQsCisJCQkJCSAgICAgICBkYXRhLT5kYXRhLCBkYXRhLT5sZW5ndGgsCisJCQkJCSAgICAgICAmbGlzdCk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJICAgIHRtcGxlbiArPSBzdHJsZW4obGlzdFtpXSk7CisKKwl0bXBidWYgPSBhbGxvYyh0bXBsZW4gKyAxKTsKKwlpZiAodG1wYnVmICE9IE5VTEwpCisJeworCSAgICB0bXBidWZbMF0gPSBOVUw7CisJICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQorCQlTVFJDQVQodG1wYnVmLCBsaXN0W2ldKTsKKwkgICAgdGV4dCA9IHRtcGJ1ZjsKKwkgICAgbGVuICA9IHRtcGxlbjsKKwl9CisKKwlpZiAobGlzdCAhPSBOVUxMKQorCSAgICBnZGtfZnJlZV90ZXh0X2xpc3QobGlzdCk7CisgICAgfQorI2VuZGlmIC8qICFIQVZFX0dUSzIgKi8KKworICAgIGNsaXBfeWFua19zZWxlY3Rpb24obW90aW9uX3R5cGUsIHRleHQsIChsb25nKWxlbiwgY2JkKTsKKyAgICByZWNlaXZlZF9zZWxlY3Rpb24gPSBSU19PSzsKKyAgICB2aW1fZnJlZSh0bXBidWYpOworI2lmZGVmIEhBVkVfR1RLMgorICAgIGdfZnJlZSh0bXBidWZfdXRmOCk7CisjZW5kaWYKKworICAgIGlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwlndGtfbWFpbl9xdWl0KCk7Cit9CisKKy8qCisgKiBQcmVwYXJlIG91ciBzZWxlY3Rpb24gZGF0YSBmb3IgcGFzc2luZyBpdCB0byB0aGUgZXh0ZXJuYWwgc2VsZWN0aW9uCisgKiBjbGllbnQuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitzZWxlY3Rpb25fZ2V0X2NiKEd0a1dpZGdldAkgICAgKndpZGdldCwKKwkJIEd0a1NlbGVjdGlvbkRhdGEgICAqc2VsZWN0aW9uX2RhdGEsCisJCSBndWludAkJICAgIGluZm8sCisJCSBndWludAkJICAgIHRpbWVfLAorCQkgZ3BvaW50ZXIJICAgIHVzZXJfZGF0YSkKK3sKKyAgICBjaGFyX3UJICAgICpzdHJpbmc7CisgICAgY2hhcl91CSAgICAqdG1wYnVmOworICAgIGxvbmdfdQkgICAgdG1wbGVuOworICAgIGludAkJICAgIGxlbmd0aDsKKyAgICBpbnQJCSAgICBtb3Rpb25fdHlwZTsKKyAgICBHZGtBdG9tCSAgICB0eXBlOworICAgIFZpbUNsaXBib2FyZCAgICAqY2JkOworCisgICAgaWYgKHNlbGVjdGlvbl9kYXRhLT5zZWxlY3Rpb24gPT0gY2xpcF9wbHVzLmd0a19zZWxfYXRvbSkKKwljYmQgPSAmY2xpcF9wbHVzOworICAgIGVsc2UKKwljYmQgPSAmY2xpcF9zdGFyOworCisgICAgaWYgKCFjYmQtPm93bmVkKQorCXJldHVybjsJCQkvKiBTaG91bGRuJ3QgZXZlciBoYXBwZW4gKi8KKworICAgIGlmIChpbmZvICE9IChndWludClUQVJHRVRfU1RSSU5HCisjaWZkZWYgRkVBVF9NQllURQorCSAgICAmJiBpbmZvICE9IChndWludClUQVJHRVRfVVRGOF9TVFJJTkcKKwkgICAgJiYgaW5mbyAhPSAoZ3VpbnQpVEFSR0VUX1ZJTUVOQworI2VuZGlmCisJICAgICYmIGluZm8gIT0gKGd1aW50KVRBUkdFVF9WSU0KKwkgICAgJiYgaW5mbyAhPSAoZ3VpbnQpVEFSR0VUX0NPTVBPVU5EX1RFWFQKKwkgICAgJiYgaW5mbyAhPSAoZ3VpbnQpVEFSR0VUX1RFWFQpCisJcmV0dXJuOworCisgICAgLyogZ2V0IHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgJyonLycrJyByZWdpc3RlciAqLworICAgIGNsaXBfZ2V0X3NlbGVjdGlvbihjYmQpOworCisgICAgbW90aW9uX3R5cGUgPSBjbGlwX2NvbnZlcnRfc2VsZWN0aW9uKCZzdHJpbmcsICZ0bXBsZW4sIGNiZCk7CisgICAgaWYgKG1vdGlvbl90eXBlIDwgMCB8fCBzdHJpbmcgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgLyogRHVlIHRvIGludCBhcmd1bWVudHMgd2UgY2FuJ3QgaGFuZGxlIG1vcmUgdGhhbiBHX01BWElOVC4gIEFsc28KKyAgICAgKiByZXNlcnZlIG9uZSBleHRyYSBieXRlIGZvciBOVUwgb3IgdGhlIG1vdGlvbiB0eXBlOyBqdXN0IGluIGNhc2UuCisgICAgICogKE5vdCB0aGF0IHBhc3RpbmcgMkcgb2YgdGV4dCBpcyBldmVyIGdvaW5nIHRvIHdvcmssIGJ1dC4uLiA7LSkgKi8KKyAgICBsZW5ndGggPSBNSU4odG1wbGVuLCAobG9uZ191KShHX01BWElOVCAtIDEpKTsKKworICAgIGlmIChpbmZvID09IChndWludClUQVJHRVRfVklNKQorICAgIHsKKwl0bXBidWYgPSBhbGxvYygodW5zaWduZWQpbGVuZ3RoICsgMSk7CisJaWYgKHRtcGJ1ZiAhPSBOVUxMKQorCXsKKwkgICAgdG1wYnVmWzBdID0gbW90aW9uX3R5cGU7CisJICAgIG1jaF9tZW1tb3ZlKHRtcGJ1ZiArIDEsIHN0cmluZywgKHNpemVfdClsZW5ndGgpOworCX0KKwkvKiBGb3Igb3VyIG93biBmb3JtYXQsIHRoZSBmaXJzdCBieXRlIGNvbnRhaW5zIHRoZSBtb3Rpb24gdHlwZSAqLworCSsrbGVuZ3RoOworCXZpbV9mcmVlKHN0cmluZyk7CisJc3RyaW5nID0gdG1wYnVmOworCXR5cGUgPSB2aW1fYXRvbTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgZWxzZSBpZiAoaW5mbyA9PSAoZ3VpbnQpVEFSR0VUX1ZJTUVOQykKKyAgICB7CisJaW50IGwgPSBTVFJMRU4ocF9lbmMpOworCisJLyogY29udGVudHM6IG1vdGlvbl90eXBlICdlbmNvZGluZycgTlVMIHRleHQgKi8KKwl0bXBidWYgPSBhbGxvYygodW5zaWduZWQpbGVuZ3RoICsgbCArIDIpOworCWlmICh0bXBidWYgIT0gTlVMTCkKKwl7CisJICAgIHRtcGJ1ZlswXSA9IG1vdGlvbl90eXBlOworCSAgICBTVFJDUFkodG1wYnVmICsgMSwgcF9lbmMpOworCSAgICBtY2hfbWVtbW92ZSh0bXBidWYgKyBsICsgMiwgc3RyaW5nLCAoc2l6ZV90KWxlbmd0aCk7CisJfQorCWxlbmd0aCArPSBsICsgMjsKKwl2aW1fZnJlZShzdHJpbmcpOworCXN0cmluZyA9IHRtcGJ1ZjsKKwl0eXBlID0gdmltZW5jX2F0b207CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICAvKiBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3RleHQoKSBoYW5kbGVzIGV2ZXJ5dGhpbmcgZm9yIHVzLiAgVGhpcyBpcworICAgICAqIHNvIGVhc3kgYW5kIHNpbXBsZSBhbmQgY29vbCwgaXQnZCBiZSBpbnNhbmUgbm90IHRvIHVzZSBpdC4gKi8KKyAgICBlbHNlCisgICAgeworCWlmIChvdXRwdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwl7CisJICAgIHRtcGJ1ZiA9IHN0cmluZ19jb252ZXJ0KCZvdXRwdXRfY29udiwgc3RyaW5nLCAmbGVuZ3RoKTsKKwkgICAgdmltX2ZyZWUoc3RyaW5nKTsKKwkgICAgaWYgKHRtcGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm47CisJICAgIHN0cmluZyA9IHRtcGJ1ZjsKKwl9CisJLyogVmFsaWRhdGUgdGhlIHN0cmluZyB0byBhdm9pZCBydW50aW1lIHdhcm5pbmdzICovCisJaWYgKGdfdXRmOF92YWxpZGF0ZSgoY29uc3QgY2hhciAqKXN0cmluZywgKGdzc2l6ZSlsZW5ndGgsIE5VTEwpKQorCXsKKwkgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KHNlbGVjdGlvbl9kYXRhLAorCQkJCQkoY29uc3QgY2hhciAqKXN0cmluZywgbGVuZ3RoKTsKKwl9CisJdmltX2ZyZWUoc3RyaW5nKTsKKwlyZXR1cm47CisgICAgfQorI2Vsc2UgLyogIUhBVkVfR1RLMiAqLworIyBpZmRlZiBGRUFUX01CWVRFCisgICAgZWxzZSBpZiAoaW5mbyA9PSAoZ3VpbnQpVEFSR0VUX1VURjhfU1RSSU5HKQorICAgIHsKKwl2aW1jb252X1QgY29udjsKKworCWNvbnYudmNfdHlwZSA9IENPTlZfTk9ORTsKKwljb252ZXJ0X3NldHVwKCZjb252LCBwX2VuYywgKGNoYXJfdSAqKSJ1dGYtOCIpOworCisJaWYgKGNvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJeworCSAgICB0bXBidWYgPSBzdHJpbmdfY29udmVydCgmY29udiwgc3RyaW5nLCAmbGVuZ3RoKTsKKwkgICAgY29udmVydF9zZXR1cCgmY29udiwgTlVMTCwgTlVMTCk7CisJICAgIHZpbV9mcmVlKHN0cmluZyk7CisJICAgIHN0cmluZyA9IHRtcGJ1ZjsKKwl9CisJdHlwZSA9IHV0Zjhfc3RyaW5nX2F0b207CisgICAgfQorIyBlbmRpZgorICAgIGVsc2UgaWYgKGluZm8gPT0gKGd1aW50KVRBUkdFVF9DT01QT1VORF9URVhUCisJCXx8IGluZm8gPT0gKGd1aW50KVRBUkdFVF9URVhUKQorICAgIHsKKwlpbnQgZm9ybWF0OworCisJLyogQ29weSB0aGUgc3RyaW5nIHRvIGVuc3VyZSBOVUwtdGVybWluYXRpb24gKi8KKwl0bXBidWYgPSB2aW1fc3RybnNhdmUoc3RyaW5nLCBsZW5ndGgpOworCXZpbV9mcmVlKHN0cmluZyk7CisJaWYgKHRtcGJ1ZiAhPSBOVUxMKQorCXsKKwkgICAgZ2RrX3N0cmluZ190b19jb21wb3VuZF90ZXh0KChjb25zdCBjaGFyICopdG1wYnVmLAorCQkJCQkmdHlwZSwgJmZvcm1hdCwgJnN0cmluZywgJmxlbmd0aCk7CisJICAgIHZpbV9mcmVlKHRtcGJ1Zik7CisJICAgIHNlbGVjdGlvbl9kYXRhLT50eXBlID0gdHlwZTsKKwkgICAgc2VsZWN0aW9uX2RhdGEtPmZvcm1hdCA9IGZvcm1hdDsKKwkgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25fZGF0YSwgdHlwZSwgZm9ybWF0LCBzdHJpbmcsIGxlbmd0aCk7CisJICAgIGdka19mcmVlX2NvbXBvdW5kX3RleHQoc3RyaW5nKTsKKwl9CisJcmV0dXJuOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXR5cGUgPSBHREtfVEFSR0VUX1NUUklORzsKKyAgICB9CisjZW5kaWYgLyogIUhBVkVfR1RLMiAqLworCisgICAgaWYgKHN0cmluZyAhPSBOVUxMKQorICAgIHsKKwlzZWxlY3Rpb25fZGF0YS0+dHlwZSA9IHNlbGVjdGlvbl9kYXRhLT50YXJnZXQ7CisJc2VsZWN0aW9uX2RhdGEtPmZvcm1hdCA9IDg7CS8qIDggYml0cyBwZXIgY2hhciAqLworCisJZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25fZGF0YSwgdHlwZSwgOCwgc3RyaW5nLCBsZW5ndGgpOworCXZpbV9mcmVlKHN0cmluZyk7CisgICAgfQorfQorCisvKgorICogQ2hlY2sgaWYgdGhlIEdVSSBjYW4gYmUgc3RhcnRlZC4gIENhbGxlZCBiZWZvcmUgZ3ZpbXJjIGlzIHNvdXJjZWQuCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIGludAorZ3VpX21jaF9pbml0X2NoZWNrKHZvaWQpCit7CisjaWZuZGVmIEhBVkVfR1RLMgorICAgIC8qIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIGxvY2FsZSBoYW5kbGluZyBjb25zaXN0YW50IGJldHdlZW4gdGhlIEdVSQorICAgICAqIGFuZCB0aGUgcmVzdCBvZiBWSU0uICovCisgICAgZ3RrX3NldF9sb2NhbGUoKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUlfR05PTUUKKyAgICBpZiAoZ3RrX3NvY2tldF9pZCA9PSAwKQorCXVzaW5nX2dub21lID0gMTsKKyNlbmRpZgorCisgICAgLyogRG9uJ3QgdXNlIGd0a19pbml0KCkgb3IgZ25vbWVfaW5pdCgpLCBpdCBleGl0cyBvbiBmYWlsdXJlLiAqLworICAgIGlmICghZ3RrX2luaXRfY2hlY2soJmd1aV9hcmdjLCAmZ3VpX2FyZ3YpKQorICAgIHsKKwlndWkuZHlpbmcgPSBUUlVFOworCUVNU0coXyhlX29wZW5kaXNwKSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb3VzZSBoYW5kbGluZyBjYWxsYmFja3MKKyAqLworCisKK3N0YXRpYyBndWludCBtb3VzZV9jbGlja190aW1lciA9IDA7CitzdGF0aWMgaW50IG1vdXNlX3RpbWVkX291dCA9IFRSVUU7CisKKy8qCisgKiBUaW1lciB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aXBsZSBjbGlja3Mgb2YgdGhlIG1vdXNlIGJ1dHRvbgorICovCisgICAgc3RhdGljIGdpbnQKK21vdXNlX2NsaWNrX3RpbWVyX2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgLyogd2UgZG9uJ3QgdXNlIHRoaXMgaW5mb3JtYXRpb24gY3VycmVudGx5ICovCisgICAgaW50ICp0aW1lZF9vdXQgPSAoaW50ICopIGRhdGE7CisKKyAgICAqdGltZWRfb3V0ID0gVFJVRTsKKyAgICByZXR1cm4gRkFMU0U7CQkvKiBkb24ndCBoYXBwZW4gYWdhaW4gKi8KK30KKworc3RhdGljIGd1aW50IG1vdGlvbl9yZXBlYXRfdGltZXIgID0gMDsKK3N0YXRpYyBpbnQgICBtb3Rpb25fcmVwZWF0X29mZnNldCA9IEZBTFNFOworc3RhdGljIGdpbnQgIG1vdGlvbl9yZXBlYXRfdGltZXJfY2IoZ3BvaW50ZXIpOworCisgICAgc3RhdGljIHZvaWQKK3Byb2Nlc3NfbW90aW9uX25vdGlmeShpbnQgeCwgaW50IHksIEdka01vZGlmaWVyVHlwZSBzdGF0ZSkKK3sKKyAgICBpbnQJICAgIGJ1dHRvbjsKKyAgICBpbnRfdSAgIHZpbV9tb2RpZmllcnM7CisKKyAgICBidXR0b24gPSAoc3RhdGUgJiAoR0RLX0JVVFRPTjFfTUFTSyB8IEdES19CVVRUT04yX01BU0sgfAorCQkgICAgICAgR0RLX0JVVFRPTjNfTUFTSyB8IEdES19CVVRUT040X01BU0sgfAorCQkgICAgICAgR0RLX0JVVFRPTjVfTUFTSykpCisJICAgICAgPyBNT1VTRV9EUkFHIDogJyAnOworCisgICAgLyogSWYgb3VyIHBvaW50ZXIgaXMgY3VycmVudGx5IGhpZGRlbiwgdGhlbiB3ZSBzaG91bGQgc2hvdyBpdC4gKi8KKyAgICBndWlfbWNoX21vdXNlaGlkZShGQUxTRSk7CisKKyAgICAvKiBKdXN0IG1vdmluZyB0aGUgcm9kZW50IGFib3ZlIHRoZSBkcmF3aW5nIGFyZWEgd2l0aG91dCBhbnkgYnV0dG9uCisgICAgICogYmVpbmcgcHJlc3NlZC4gKi8KKyAgICBpZiAoYnV0dG9uICE9IE1PVVNFX0RSQUcpCisgICAgeworCWd1aV9tb3VzZV9tb3ZlZCh4LCB5KTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogdHJhbnNsYXRlIG1vZGlmaWVyIGNvZGluZyBiZXR3ZWVuIHRoZSBtYWluIGVuZ2luZSBhbmQgR1RLICovCisgICAgdmltX21vZGlmaWVycyA9IDB4MDsKKyAgICBpZiAoc3RhdGUgJiBHREtfU0hJRlRfTUFTSykKKwl2aW1fbW9kaWZpZXJzIHw9IE1PVVNFX1NISUZUOworICAgIGlmIChzdGF0ZSAmIEdES19DT05UUk9MX01BU0spCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9DVFJMOworICAgIGlmIChzdGF0ZSAmIEdES19NT0QxX01BU0spCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9BTFQ7CisKKyAgICAvKiBpbmZvcm0gdGhlIGVkaXRvciBlbmdpbmUgYWJvdXQgdGhlIG9jY3VyZW5jZSBvZiB0aGlzIGV2ZW50ICovCisgICAgZ3VpX3NlbmRfbW91c2VfZXZlbnQoYnV0dG9uLCB4LCB5LCBGQUxTRSwgdmltX21vZGlmaWVycyk7CisKKyAgICBpZiAoZ3RrX21haW5fbGV2ZWwoKSA+IDApCisJZ3RrX21haW5fcXVpdCgpOworCisgICAgLyoKKyAgICAgKiBBdXRvIHJlcGVhdCB0aW1lciBoYW5kbGluZy4KKyAgICAgKi8KKyAgICBpZiAoeCA8IDAgfHwgeSA8IDAKKwkgICAgfHwgeCA+PSBndWkuZHJhd2FyZWEtPmFsbG9jYXRpb24ud2lkdGgKKwkgICAgfHwgeSA+PSBndWkuZHJhd2FyZWEtPmFsbG9jYXRpb24uaGVpZ2h0KQorICAgIHsKKworCWludCBkeDsKKwlpbnQgZHk7CisJaW50IG9mZnNob290OworCWludCBkZWxheSA9IDEwOworCisJLyogQ2FsY3VsYXRlIHRoZSBtYXhpbWFsIGRpc3RhbmNlIG9mIHRoZSBjdXJzb3IgZnJvbSB0aGUgZHJhd2luZyBhcmVhLgorCSAqIChvZmZzaG9vdCBjYW4ndCBiZWNvbWUgbmVnYXRpdmUgaGVyZSEpLgorCSAqLworCWR4ID0geCA8IDAgPyAteCA6IHggLSBndWkuZHJhd2FyZWEtPmFsbG9jYXRpb24ud2lkdGg7CisJZHkgPSB5IDwgMCA/IC15IDogeSAtIGd1aS5kcmF3YXJlYS0+YWxsb2NhdGlvbi5oZWlnaHQ7CisKKwlvZmZzaG9vdCA9IGR4ID4gZHkgPyBkeCA6IGR5OworCisJLyogTWFrZSBhIGxpbmVhcmx5IGRlY2xheWluZyB0aW1lciBkZWxheSB3aXRoIGEgdGhyZXNob2xkIG9mIDUgYXQgYQorCSAqIGRpc3RhbmNlIG9mIDEyNyBwaXhlbHMgZnJvbSB0aGUgbWFpbiB3aW5kb3cuCisJICoKKwkgKiBPbmUgY291bGQgdGhpbmsgZW5kbGVzc2x5IGFib3V0IHRoZSBtb3N0IGVyZ29ub21pYyB2YXJpYW50IGhlcmUuCisJICogRm9yIGV4YW1wbGUgaXQgY291bGQgbWFrZSBzZW5zZSB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhlCisJICogZHJhZ3Mgc3RhcnQgaW5zdGVhZC4uLgorCSAqCisJICogTWF5YmUgYSBwYXJhYm9saWMgaW50ZXJwb2xhdGlvbiB3b3VsZCBzdWl0ZSB1cyBiZXR0ZXIgaGVyZSB0b28uLi4KKwkgKi8KKwlpZiAob2Zmc2hvb3QgPiAxMjcpCisJeworCSAgICAvKiA1IGFwcGVhcnMgdG8gYmUgc29tZWhvdyBuZWFyIHRvIG15IHBlcmNlcHR1YWwgbGltaXRzIDotKS4gKi8KKwkgICAgZGVsYXkgPSA1OworCX0KKwllbHNlCisJeworCSAgICBkZWxheSA9ICgxMzAgKiAoMTI3IC0gb2Zmc2hvb3QpKSAvIDEyNyArIDU7CisJfQorCisJLyogc2hvb3QgYWdhaW4gKi8KKwlpZiAoIW1vdGlvbl9yZXBlYXRfdGltZXIpCisJICAgIG1vdGlvbl9yZXBlYXRfdGltZXIgPSBndGtfdGltZW91dF9hZGQoKGd1aW50MzIpZGVsYXksCisJCQkJCQltb3Rpb25fcmVwZWF0X3RpbWVyX2NiLCBOVUxMKTsKKyAgICB9Cit9CisKKy8qCisgKiBUaW1lciB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aXBsZSBjbGlja3Mgb2YgdGhlIG1vdXNlIGJ1dHRvbi4KKyAqLworLypBUkdTVVNFRDAqLworICAgIHN0YXRpYyBnaW50Cittb3Rpb25fcmVwZWF0X3RpbWVyX2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgaW50CQkgICAgeDsKKyAgICBpbnQJCSAgICB5OworICAgIEdka01vZGlmaWVyVHlwZSBzdGF0ZTsKKworICAgIGdka193aW5kb3dfZ2V0X3BvaW50ZXIoZ3VpLmRyYXdhcmVhLT53aW5kb3csICZ4LCAmeSwgJnN0YXRlKTsKKworICAgIGlmICghKHN0YXRlICYgKEdES19CVVRUT04xX01BU0sgfCBHREtfQlVUVE9OMl9NQVNLIHwKKwkJICAgR0RLX0JVVFRPTjNfTUFTSyB8IEdES19CVVRUT040X01BU0sgfAorCQkgICBHREtfQlVUVE9ONV9NQVNLKSkpCisgICAgeworCW1vdGlvbl9yZXBlYXRfdGltZXIgPSAwOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICAvKiBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgbW91c2UgY2xpY2sgaW4gdGhlIGlucHV0IGJ1ZmZlciwgd2FpdCBhbm90aGVyCisgICAgICogdGltZSAob3RoZXJ3aXNlIHdlIHdvdWxkIGNyZWF0ZSBhIGJhY2tsb2cgb2YgY2xpY2tzKSAqLworICAgIGlmICh2aW1fdXNlZF9pbl9pbnB1dF9idWYoKSA+IDEwKQorCXJldHVybiBUUlVFOworCisgICAgbW90aW9uX3JlcGVhdF90aW1lciA9IDA7CisKKyAgICAvKgorICAgICAqIEZha2UgYSBtb3Rpb24gZXZlbnQuCisgICAgICogVHJpY2s6IFByZXRlbmQgdGhlIG1vdXNlIG1vdmVkIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBvbiBldmVyeSBvdGhlcgorICAgICAqIGV2ZW50LCBvdGhlcndpc2UgZHJhZyBldmVudHMgd2lsbCBiZSBkaXNjYXJkZWQsIGJlY2F1c2UgdGhleSBhcmUgc3RpbGwKKyAgICAgKiBpbiB0aGUgc2FtZSBjaGFyYWN0ZXIuCisgICAgICovCisgICAgaWYgKG1vdGlvbl9yZXBlYXRfb2Zmc2V0KQorCXggKz0gZ3VpLmNoYXJfd2lkdGg7CisKKyAgICBtb3Rpb25fcmVwZWF0X29mZnNldCA9ICFtb3Rpb25fcmVwZWF0X29mZnNldDsKKyAgICBwcm9jZXNzX21vdGlvbl9ub3RpZnkoeCwgeSwgc3RhdGUpOworCisgICAgLyogRG9uJ3QgaGFwcGVuIGFnYWluLiAgV2Ugd2lsbCBnZXQgcmVpbnN0YWxsZWQgaW4gdGhlIHN5bnRoZXRpYyBldmVudAorICAgICAqIGlmIG5lZWRlZCAtLSB0aHVzIHJlcGVhdGluZyBzaG91bGQgc3RpbGwgd29yay4gKi8KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qQVJHU1VTRUQyKi8KKyAgICBzdGF0aWMgZ2ludAorbW90aW9uX25vdGlmeV9ldmVudChHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnRNb3Rpb24gKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChldmVudC0+aXNfaGludCkKKyAgICB7CisJaW50CQl4OworCWludAkJeTsKKwlHZGtNb2RpZmllclR5cGUJc3RhdGU7CisKKwlnZGtfd2luZG93X2dldF9wb2ludGVyKHdpZGdldC0+d2luZG93LCAmeCwgJnksICZzdGF0ZSk7CisJcHJvY2Vzc19tb3Rpb25fbm90aWZ5KHgsIHksIHN0YXRlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlwcm9jZXNzX21vdGlvbl9ub3RpZnkoKGludClldmVudC0+eCwgKGludClldmVudC0+eSwKKwkJCSAgICAgIChHZGtNb2RpZmllclR5cGUpZXZlbnQtPnN0YXRlKTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsgLyogaGFuZGxlZCAqLworfQorCisKKy8qCisgKiBNb3VzZSBidXR0b24gaGFuZGxpbmcuICBOb3RlIHBsZWFzZSB0aGF0IHdlIGFyZSBjYXB0dXJpbmcgbXVsdGlwbGUgY2xpY2sncworICogYnkgb3VyIG93biB0aW1lb3V0IG1lY2hhbmlzbSBpbnN0ZWFkIG9mIHRoZSBvbmUgcHJvdmlkZWQgYnkgR1RLKyBpdHNlbGYuCisgKiBUaGlzIGlzIGR1ZSB0byB0aGUgd2F5IHRoZSBnZW5lcmljIFZJTSBjb2RlIGlzIHJlY29nbml6aW5nIG11bHRpcGxlIGNsaWNrcy4KKyAqLworLypBUkdTVVNFRDIqLworICAgIHN0YXRpYyBnaW50CitidXR0b25fcHJlc3NfZXZlbnQoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50QnV0dG9uICpldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpbnQgYnV0dG9uOworICAgIGludCByZXBlYXRlZF9jbGljayA9IEZBTFNFOworICAgIGludCB4LCB5OworICAgIGludF91IHZpbV9tb2RpZmllcnM7CisKKyAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBmb2N1cyBub3cgd2UndmUgYmVlbiBzZWxlY3RlZCAqLworICAgIGlmIChndGtfc29ja2V0X2lkICE9IDAgJiYgIUdUS19XSURHRVRfSEFTX0ZPQ1VTKHdpZGdldCkpCisJZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CisKKyAgICAvKgorICAgICAqIERvbid0IGxldCBhZGRpdGlvbmFsIGV2ZW50cyBhYm91dCBtdWx0aXBsZSBjbGlja3Mgc2VuZCBieSBHVEsgdG8gdXMKKyAgICAgKiBhZnRlciB0aGUgaW5pdGlhbCBidXR0b24gcHJlc3MgZXZlbnQgY29uZnVzZSB1cy4KKyAgICAgKi8KKyAgICBpZiAoZXZlbnQtPnR5cGUgIT0gR0RLX0JVVFRPTl9QUkVTUykKKwlyZXR1cm4gRkFMU0U7CisKKyAgICB4ID0gZXZlbnQtPng7CisgICAgeSA9IGV2ZW50LT55OworCisgICAgLyogSGFuZGxlIG11bHRpcGxlIGNsaWNrcyAqLworICAgIGlmICghbW91c2VfdGltZWRfb3V0ICYmIG1vdXNlX2NsaWNrX3RpbWVyKQorICAgIHsKKwlndGtfdGltZW91dF9yZW1vdmUobW91c2VfY2xpY2tfdGltZXIpOworCW1vdXNlX2NsaWNrX3RpbWVyID0gMDsKKwlyZXBlYXRlZF9jbGljayA9IFRSVUU7CisgICAgfQorCisgICAgbW91c2VfdGltZWRfb3V0ID0gRkFMU0U7CisgICAgbW91c2VfY2xpY2tfdGltZXIgPSBndGtfdGltZW91dF9hZGQoKGd1aW50MzIpcF9tb3VzZXQsCisJCQkJICBtb3VzZV9jbGlja190aW1lcl9jYiwgJm1vdXNlX3RpbWVkX291dCk7CisKKyAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24pCisgICAgeworICAgIGNhc2UgMToKKwlidXR0b24gPSBNT1VTRV9MRUZUOworCWJyZWFrOworICAgIGNhc2UgMjoKKwlidXR0b24gPSBNT1VTRV9NSURETEU7CisJYnJlYWs7CisgICAgY2FzZSAzOgorCWJ1dHRvbiA9IE1PVVNFX1JJR0hUOworCWJyZWFrOworI2lmbmRlZiBIQVZFX0dUSzIKKyAgICBjYXNlIDQ6CisJYnV0dG9uID0gTU9VU0VfNDsKKwlicmVhazsKKyAgICBjYXNlIDU6CisJYnV0dG9uID0gTU9VU0VfNTsKKwlicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisJcmV0dXJuIEZBTFNFOwkJLyogVW5rbm93biBidXR0b24gKi8KKyAgICB9CisKKyNpZmRlZiBGRUFUX1hJTQorICAgIC8qIGNhbmNlbCBhbnkgcHJlZWRpdGluZyAqLworICAgIGlmIChpbV9pc19wcmVlZGl0aW5nKCkpCisJeGltX3Jlc2V0KCk7CisjZW5kaWYKKworICAgIHZpbV9tb2RpZmllcnMgPSAweDA7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLKQorCXZpbV9tb2RpZmllcnMgfD0gTU9VU0VfU0hJRlQ7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0spCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9DVFJMOworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTU9EMV9NQVNLKQorCXZpbV9tb2RpZmllcnMgfD0gTU9VU0VfQUxUOworCisgICAgZ3VpX3NlbmRfbW91c2VfZXZlbnQoYnV0dG9uLCB4LCB5LCByZXBlYXRlZF9jbGljaywgdmltX21vZGlmaWVycyk7CisgICAgaWYgKGd0a19tYWluX2xldmVsKCkgPiAwKQorCWd0a19tYWluX3F1aXQoKTsgLyogbWFrZSBzdXJlIHRoZSBhYm92ZSB3aWxsIGJlIGhhbmRsZWQgaW1tZWRpYXRlbHkgKi8KKworICAgIHJldHVybiBUUlVFOworfQorCisjaWZkZWYgSEFWRV9HVEsyCisvKgorICogR1RLKyAyIGRvZXNuJ3QgaGFuZGxlIG1vdXNlIGJ1dHRvbnMgNCwgNSwgNiBhbmQgNyB0aGUgc2FtZSB3YXkgYXMgR1RLKyAxLgorICogSW5zdGVhZCwgaXQgYWJzdHJhY3RzIHNjcm9sbGluZyB2aWEgdGhlIG5ldyBHZGtFdmVudFNjcm9sbC4KKyAqLworLypBUkdTVVNFRDIqLworICAgIHN0YXRpYyBnYm9vbGVhbgorc2Nyb2xsX2V2ZW50KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudFNjcm9sbCAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaW50CSAgICBidXR0b247CisgICAgaW50X3UgICB2aW1fbW9kaWZpZXJzID0gMDsKKworICAgIGlmIChndGtfc29ja2V0X2lkICE9IDAgJiYgIUdUS19XSURHRVRfSEFTX0ZPQ1VTKHdpZGdldCkpCisJZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CisKKyAgICBzd2l0Y2ggKGV2ZW50LT5kaXJlY3Rpb24pCisgICAgeworCWNhc2UgR0RLX1NDUk9MTF9VUDoKKwkgICAgYnV0dG9uID0gTU9VU0VfNDsKKwkgICAgYnJlYWs7CisJY2FzZSBHREtfU0NST0xMX0RPV046CisJICAgIGJ1dHRvbiA9IE1PVVNFXzU7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6IC8qIFdlIGRvbid0IGNhcmUgYWJvdXQgbGVmdCBhbmQgcmlnaHQuLi4gIFlldC4gKi8KKwkgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworIyBpZmRlZiBGRUFUX1hJTQorICAgIC8qIGNhbmNlbCBhbnkgcHJlZWRpdGluZyAqLworICAgIGlmIChpbV9pc19wcmVlZGl0aW5nKCkpCisJeGltX3Jlc2V0KCk7CisjIGVuZGlmCisKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0spCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9TSElGVDsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKwl2aW1fbW9kaWZpZXJzIHw9IE1PVVNFX0NUUkw7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0spCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9BTFQ7CisKKyAgICBndWlfc2VuZF9tb3VzZV9ldmVudChidXR0b24sIChpbnQpZXZlbnQtPngsIChpbnQpZXZlbnQtPnksCisJCQkJCQkJRkFMU0UsIHZpbV9tb2RpZmllcnMpOworCisgICAgaWYgKGd0a19tYWluX2xldmVsKCkgPiAwKQorCWd0a19tYWluX3F1aXQoKTsgLyogbWFrZSBzdXJlIHRoZSBhYm92ZSB3aWxsIGJlIGhhbmRsZWQgaW1tZWRpYXRlbHkgKi8KKworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmIC8qIEhBVkVfR1RLMiAqLworCisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyBnaW50CitidXR0b25fcmVsZWFzZV9ldmVudChHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnRCdXR0b24gKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIGludCB4LCB5OworICAgIGludF91IHZpbV9tb2RpZmllcnM7CisKKyAgICAvKiBSZW1vdmUgYW55IG1vdGlvbiAibWFjaGluZSBndW4iIHRpbWVycyB1c2VkIGZvciBhdXRvbWF0aWMgZnVydGhlcgorICAgICAgIGV4dGVuc2lvbiBvZiBhbGxvY2F0aW9uIGFyZWFzIGlmIG91dHNpZGUgb2YgdGhlIGFwcGxpY2F0aW9ucyB3aW5kb3cKKyAgICAgICBhcmVhIC4qLworICAgIGlmIChtb3Rpb25fcmVwZWF0X3RpbWVyKQorICAgIHsKKwlndGtfdGltZW91dF9yZW1vdmUobW90aW9uX3JlcGVhdF90aW1lcik7CisJbW90aW9uX3JlcGVhdF90aW1lciA9IDA7CisgICAgfQorCisgICAgeCA9IGV2ZW50LT54OworICAgIHkgPSBldmVudC0+eTsKKworICAgIHZpbV9tb2RpZmllcnMgPSAweDA7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLKQorCXZpbV9tb2RpZmllcnMgfD0gTU9VU0VfU0hJRlQ7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0spCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9DVFJMOworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTU9EMV9NQVNLKQorCXZpbV9tb2RpZmllcnMgfD0gTU9VU0VfQUxUOworCisgICAgZ3VpX3NlbmRfbW91c2VfZXZlbnQoTU9VU0VfUkVMRUFTRSwgeCwgeSwgRkFMU0UsIHZpbV9tb2RpZmllcnMpOworICAgIGlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwlndGtfbWFpbl9xdWl0KCk7CS8qIG1ha2Ugc3VyZSBpdCB3aWxsIGJlIGhhbmRsZWQgaW1tZWRpYXRlbHkgKi8KKworICAgIHJldHVybiBUUlVFOworfQorCisKKyNpZmRlZiBGRUFUX0RORAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERyYWcgYU5kIERyb3Agc3VwcG9ydCBoYW5kbGVycy4KKyAqLworCisvKgorICogQ291bnQgaG93IG1hbnkgaXRlbXMgdGhlcmUgbWF5IGJlIGFuZCBzZXBhcmF0ZSB0aGVtIHdpdGggYSBOVUwuCisgKiBBcHBhcmVudGx5IHRoZSBpdGVtcyBhcmUgc2VwYXJhdGVkIHdpdGggXHJcbi4gIFRoaXMgaXMgbm90IGRvY3VtZW50ZWQsCisgKiB0aHVzIGJlIGNhcmVmdWwgbm90IHRvIGdvIHBhc3QgdGhlIGVuZC4JQWxzbyBhbGxvdyBzZXBhcmF0aW9uIHdpdGgKKyAqIE5VTCBjaGFyYWN0ZXJzLgorICovCisgICAgc3RhdGljIGludAorY291bnRfYW5kX2RlY29kZV91cmlfbGlzdChjaGFyX3UgKm91dCwgY2hhcl91ICpyYXcsIGludCBsZW4pCit7CisgICAgaW50CQlpOworICAgIGNoYXJfdQkqcCA9IG91dDsKKyAgICBpbnQJCWNvdW50ID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICB7CisJaWYgKHJhd1tpXSA9PSBOVUwgfHwgcmF3W2ldID09ICdcbicgfHwgcmF3W2ldID09ICdccicpCisJeworCSAgICBpZiAocCA+IG91dCAmJiBwWy0xXSAhPSBOVUwpCisJICAgIHsKKwkJKytjb3VudDsKKwkJKnArKyA9IE5VTDsKKwkgICAgfQorCX0KKwllbHNlIGlmIChyYXdbaV0gPT0gJyUnICYmIGkgKyAyIDwgbGVuICYmIGhleGhleDJucihyYXcgKyBpICsgMSkgPiAwKQorCXsKKwkgICAgKnArKyA9IGhleGhleDJucihyYXcgKyBpICsgMSk7CisJICAgIGkgKz0gMjsKKwl9CisJZWxzZQorCSAgICAqcCsrID0gcmF3W2ldOworICAgIH0KKyAgICBpZiAocCA+IG91dCAmJiBwWy0xXSAhPSBOVUwpCisgICAgeworCSpwID0gTlVMOwkvKiBsYXN0IGl0ZW0gZGlkbid0IGhhdmUgXHIgb3IgXG4gKi8KKwkrK2NvdW50OworICAgIH0KKyAgICByZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBQYXJzZSBOVUwgc2VwYXJhdGVkICJzcmMiIHN0cmluZ3MuICBNYWtlIGl0IGFuIGFycmF5ICJvdXRsaXN0IiBmb3JtLiAgT24KKyAqIHRoaXMgcHJvY2VzcywgVVJJIHdoaWNoIHByb3RvY29sIGlzIG5vdCAiZmlsZToiIGFyZSByZW1vdmVkLiAgUmV0dXJuCisgKiBsZW5ndGggb2YgYXJyYXkgKGxlc3MgdGhhbiAibWF4IikuCisgKi8KKyAgICBzdGF0aWMgaW50CitmaWx0ZXJfdXJpX2xpc3QoY2hhcl91ICoqb3V0bGlzdCwgaW50IG1heCwgY2hhcl91ICpzcmMpCit7CisgICAgaW50CWksIGo7CisKKyAgICBmb3IgKGkgPSBqID0gMDsgaSA8IG1heDsgKytpKQorICAgIHsKKwlvdXRsaXN0W2ldID0gTlVMTDsKKwlpZiAoU1RSTkNNUChzcmMsICJmaWxlOiIsIDUpID09IDApCisJeworCSAgICBzcmMgKz0gNTsKKwkgICAgaWYgKFNUUk5DTVAoc3JjLCAiLy9sb2NhbGhvc3QiLCAxMSkgPT0gMCkKKwkJc3JjICs9IDExOworCSAgICB3aGlsZSAoc3JjWzBdID09ICcvJyAmJiBzcmNbMV0gPT0gJy8nKQorCQkrK3NyYzsKKwkgICAgb3V0bGlzdFtqKytdID0gdmltX3N0cnNhdmUoc3JjKTsKKwl9CisJc3JjICs9IFNUUkxFTihzcmMpICsgMTsKKyAgICB9CisgICAgcmV0dXJuIGo7Cit9CisKKyAgICBzdGF0aWMgY2hhcl91ICoqCitwYXJzZV91cmlfbGlzdChpbnQgKmNvdW50LCBjaGFyX3UgKmRhdGEsIGludCBsZW4pCit7CisgICAgaW50CSAgICBuCSAgICA9IDA7CisgICAgY2hhcl91ICAqdG1wICAgID0gTlVMTDsKKyAgICBjaGFyX3UgICoqYXJyYXkgPSBOVUxMOzsKKworICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID4gMCAmJiAodG1wID0gKGNoYXJfdSAqKWFsbG9jKGxlbiArIDEpKSAhPSBOVUxMKQorICAgIHsKKwluID0gY291bnRfYW5kX2RlY29kZV91cmlfbGlzdCh0bXAsIGRhdGEsIGxlbik7CisJaWYgKG4gPiAwICYmIChhcnJheSA9IChjaGFyX3UgKiopYWxsb2MobiAqIHNpemVvZihjaGFyX3UgKikpKSAhPSBOVUxMKQorCSAgICBuID0gZmlsdGVyX3VyaV9saXN0KGFycmF5LCBuLCB0bXApOworICAgIH0KKyAgICB2aW1fZnJlZSh0bXApOworICAgICpjb3VudCA9IG47CisgICAgcmV0dXJuIGFycmF5OworfQorCisgICAgc3RhdGljIHZvaWQKK2RyYWdfaGFuZGxlX3VyaV9saXN0KEdka0RyYWdDb250ZXh0CSpjb250ZXh0LAorCQkgICAgIEd0a1NlbGVjdGlvbkRhdGEJKmRhdGEsCisJCSAgICAgZ3VpbnQJCXRpbWVfLAorCQkgICAgIEdka01vZGlmaWVyVHlwZQlzdGF0ZSwKKwkJICAgICBnaW50CQl4LAorCQkgICAgIGdpbnQJCXkpCit7CisgICAgY2hhcl91ICAqKmZuYW1lczsKKyAgICBpbnQJICAgIG5maWxlcyA9IDA7CisKKyAgICBmbmFtZXMgPSBwYXJzZV91cmlfbGlzdCgmbmZpbGVzLCBkYXRhLT5kYXRhLCBkYXRhLT5sZW5ndGgpOworCisgICAgaWYgKGZuYW1lcyAhPSBOVUxMICYmIG5maWxlcyA+IDApCisgICAgeworCWludF91ICAgbW9kaWZpZXJzID0gMDsKKworCWd0a19kcmFnX2ZpbmlzaChjb250ZXh0LCBUUlVFLCBGQUxTRSwgdGltZV8pOyAvKiBhY2NlcHQgKi8KKworCWlmIChzdGF0ZSAmIEdES19TSElGVF9NQVNLKQorCSAgICBtb2RpZmllcnMgfD0gTU9VU0VfU0hJRlQ7CisJaWYgKHN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKwkgICAgbW9kaWZpZXJzIHw9IE1PVVNFX0NUUkw7CisJaWYgKHN0YXRlICYgR0RLX01PRDFfTUFTSykKKwkgICAgbW9kaWZpZXJzIHw9IE1PVVNFX0FMVDsKKworCWd1aV9oYW5kbGVfZHJvcCh4LCB5LCBtb2RpZmllcnMsIGZuYW1lcywgbmZpbGVzKTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZHJhZ19oYW5kbGVfdGV4dChHZGtEcmFnQ29udGV4dAkgICAgKmNvbnRleHQsCisJCSBHdGtTZWxlY3Rpb25EYXRhICAgKmRhdGEsCisJCSBndWludAkJICAgIHRpbWVfLAorCQkgR2RrTW9kaWZpZXJUeXBlICAgIHN0YXRlKQoreworICAgIGNoYXJfdSAgZHJvcGtleVs2XSA9IHtDU0ksIEtTX01PRElGSUVSLCAwLCBDU0ksIEtTX0VYVFJBLCAoY2hhcl91KUtFX0RST1B9OworICAgIGNoYXJfdSAgKnRleHQ7CisgICAgaW50CSAgICBsZW47CisjIGlmZGVmIEZFQVRfTUJZVEUKKyAgICBjaGFyX3UgICp0bXBidWYgPSBOVUxMOworIyBlbmRpZgorCisgICAgdGV4dCA9IGRhdGEtPmRhdGE7CisgICAgbGVuICA9IGRhdGEtPmxlbmd0aDsKKworIyBpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGRhdGEtPnR5cGUgPT0gdXRmOF9zdHJpbmdfYXRvbSkKKyAgICB7CisjICBpZmRlZiBIQVZFX0dUSzIKKwlpZiAoaW5wdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwkgICAgdG1wYnVmID0gc3RyaW5nX2NvbnZlcnQoJmlucHV0X2NvbnYsIHRleHQsICZsZW4pOworIyAgZWxzZQorCXZpbWNvbnZfVCBjb252OworCisJY29udi52Y190eXBlID0gQ09OVl9OT05FOworCWNvbnZlcnRfc2V0dXAoJmNvbnYsIChjaGFyX3UgKikidXRmLTgiLCBwX2VuYyk7CisKKwlpZiAoY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwl7CisJICAgIHRtcGJ1ZiA9IHN0cmluZ19jb252ZXJ0KCZjb252LCB0ZXh0LCAmbGVuKTsKKwkgICAgY29udmVydF9zZXR1cCgmY29udiwgTlVMTCwgTlVMTCk7CisJfQorIyAgZW5kaWYKKwlpZiAodG1wYnVmICE9IE5VTEwpCisJICAgIHRleHQgPSB0bXBidWY7CisgICAgfQorIyBlbmRpZiAvKiBGRUFUX01CWVRFICovCisKKyAgICBkbmRfeWFua19kcmFnX2RhdGEodGV4dCwgKGxvbmcpbGVuKTsKKyAgICBndGtfZHJhZ19maW5pc2goY29udGV4dCwgVFJVRSwgRkFMU0UsIHRpbWVfKTsgLyogYWNjZXB0ICovCisjIGlmZGVmIEZFQVRfTUJZVEUKKyAgICB2aW1fZnJlZSh0bXBidWYpOworIyBlbmRpZgorCisgICAgaWYgKHN0YXRlICYgR0RLX1NISUZUX01BU0spCisJZHJvcGtleVsyXSB8PSBNT0RfTUFTS19TSElGVDsKKyAgICBpZiAoc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorCWRyb3BrZXlbMl0gfD0gTU9EX01BU0tfQ1RSTDsKKyAgICBpZiAoc3RhdGUgJiBHREtfTU9EMV9NQVNLKQorCWRyb3BrZXlbMl0gfD0gTU9EX01BU0tfQUxUOworCisgICAgaWYgKGRyb3BrZXlbMl0gIT0gMCkKKwlhZGRfdG9faW5wdXRfYnVmKGRyb3BrZXksIChpbnQpc2l6ZW9mKGRyb3BrZXkpKTsKKyAgICBlbHNlCisJYWRkX3RvX2lucHV0X2J1Zihkcm9wa2V5ICsgMywgKGludCkoc2l6ZW9mKGRyb3BrZXkpIC0gMykpOworCisgICAgaWYgKGd0a19tYWluX2xldmVsKCkgPiAwKQorCWd0a19tYWluX3F1aXQoKTsKK30KKworLyoKKyAqIERORCByZWNlaXZlci4KKyAqLworLypBUkdTVVNFRDIqLworICAgIHN0YXRpYyB2b2lkCitkcmFnX2RhdGFfcmVjZWl2ZWRfY2IoR3RrV2lkZ2V0CQkqd2lkZ2V0LAorCQkgICAgICBHZGtEcmFnQ29udGV4dAkqY29udGV4dCwKKwkJICAgICAgZ2ludAkJeCwKKwkJICAgICAgZ2ludAkJeSwKKwkJICAgICAgR3RrU2VsZWN0aW9uRGF0YQkqZGF0YSwKKwkJICAgICAgZ3VpbnQJCWluZm8sCisJCSAgICAgIGd1aW50CQl0aW1lXywKKwkJICAgICAgZ3BvaW50ZXIJCXVzZXJfZGF0YSkKK3sKKyAgICBHZGtNb2RpZmllclR5cGUgc3RhdGU7CisKKyAgICAvKiBHdWFyZCBhZ2FpbnN0IHRyYXNoICovCisgICAgaWYgKGRhdGEtPmRhdGEgPT0gTlVMTAorCSAgICB8fCBkYXRhLT5sZW5ndGggPD0gMAorCSAgICB8fCBkYXRhLT5mb3JtYXQgIT0gOAorCSAgICB8fCBkYXRhLT5kYXRhW2RhdGEtPmxlbmd0aF0gIT0gJ1wwJykKKyAgICB7CisJZ3RrX2RyYWdfZmluaXNoKGNvbnRleHQsIEZBTFNFLCBGQUxTRSwgdGltZV8pOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBHZXQgdGhlIGN1cnJlbnQgbW9kaWZpZXIgc3RhdGUgZm9yIHByb3BlciBkaXN0aW5ndWlzaG1lbnQgYmV0d2VlbgorICAgICAqIGRpZmZlcmVudCBvcGVyYXRpb25zIGxhdGVyLiAqLworICAgIGdka193aW5kb3dfZ2V0X3BvaW50ZXIod2lkZ2V0LT53aW5kb3csIE5VTEwsIE5VTEwsICZzdGF0ZSk7CisKKyAgICAvKiBOb3Qgc3VyZSBhYm91dCB0aGUgcm9sZSBvZiAidGV4dC9wbGFpbiIgaGVyZS4uLiAqLworICAgIGlmIChpbmZvID09IChndWludClUQVJHRVRfVEVYVF9VUklfTElTVCkKKwlkcmFnX2hhbmRsZV91cmlfbGlzdChjb250ZXh0LCBkYXRhLCB0aW1lXywgc3RhdGUsIHgsIHkpOworICAgIGVsc2UKKwlkcmFnX2hhbmRsZV90ZXh0KGNvbnRleHQsIGRhdGEsIHRpbWVfLCBzdGF0ZSk7CisKK30KKyNlbmRpZiAvKiBGRUFUX0RORCAqLworCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0dOT01FKSAmJiBkZWZpbmVkKEZFQVRfU0VTU0lPTikKKy8qCisgKiBHbm9tZUNsaWVudCBpbnRlcmFjdCBjYWxsYmFjay4gIENoZWNrIGZvciB1bnNhdmVkIGJ1ZmZlcnMgdGhhdCBjYW5ub3QKKyAqIGJlIGFiYW5kb25lZCBhbmQgcG9wIHVwIGEgZGlhbG9nIGFza2luZyB0aGUgdXNlciBmb3IgY29uZmlybWF0aW9uIGlmCisgKiBuZWNlc3NhcnkuCisgKi8KKy8qQVJHU1VTRUQwKi8KKyAgICBzdGF0aWMgdm9pZAorc21fY2xpZW50X2NoZWNrX2NoYW5nZWRfYW55KEdub21lQ2xpZW50CSAgICAqY2xpZW50LAorCQkJICAgIGdpbnQJICAgIGtleSwKKwkJCSAgICBHbm9tZURpYWxvZ1R5cGUgdHlwZSwKKwkJCSAgICBncG9pbnRlcgkgICAgZGF0YSkKK3sKKyAgICBjbWRtb2RfVAlzYXZlX2NtZG1vZDsKKyAgICBnYm9vbGVhbglzaHV0ZG93bl9jYW5jZWxsZWQ7CisKKyAgICBzYXZlX2NtZG1vZCA9IGNtZG1vZDsKKworIyBpZmRlZiBGRUFUX0JST1dTRQorICAgIGNtZG1vZC5icm93c2UgPSBUUlVFOworIyBlbmRpZgorIyBpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCisgICAgY21kbW9kLmNvbmZpcm0gPSBUUlVFOworIyBlbmRpZgorICAgIC8qCisgICAgICogSWYgdGhlcmUgYXJlIGNoYW5nZWQgYnVmZmVycywgcHJlc2VudCB0aGUgdXNlciB3aXRoCisgICAgICogYSBkaWFsb2cgaWYgcG9zc2libGUsIG90aGVyd2lzZSBnaXZlIGFuIGVycm9yIG1lc3NhZ2UuCisgICAgICovCisgICAgc2h1dGRvd25fY2FuY2VsbGVkID0gY2hlY2tfY2hhbmdlZF9hbnkoRkFMU0UpOworCisgICAgZXhpdGluZyA9IEZBTFNFOworICAgIGNtZG1vZCA9IHNhdmVfY21kbW9kOworICAgIHNldGN1cnNvcigpOyAvKiBwb3NpdGlvbiB0aGUgY3Vyc29yICovCisgICAgb3V0X2ZsdXNoKCk7CisgICAgLyoKKyAgICAgKiBJZiB0aGUgdXNlciBoaXQgdGhlIFtDYW5jZWxdIGJ1dHRvbiB0aGUgd2hvbGUgc2h1dGRvd24KKyAgICAgKiB3aWxsIGJlIGNhbmNlbGxlZC4gIFdvdywgcXVpdGUgcG93ZXJmdWwgZmVhdHVyZSAoOgorICAgICAqLworICAgIGdub21lX2ludGVyYWN0aW9uX2tleV9yZXR1cm4oa2V5LCBzaHV0ZG93bl9jYW5jZWxsZWQpOworfQorCisvKgorICogR2VuZXJhdGUgYSBzY3JpcHQgdGhhdCBjYW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBjdXJyZW50IGVkaXRpbmcgc2Vzc2lvbi4KKyAqIFNhdmUgdGhlIHZhbHVlIG9mIHY6dGhpc19zZXNzaW9uIGJlZm9yZSBydW5uaW5nIDpta3Nlc3Npb24gaW4gb3JkZXIgdG8gbWFrZQorICogYXV0b21hZ2ljIHNlc3Npb24gc2F2ZSBmdWxseSB0cmFuc3BhcmVudC4gIFJldHVybiBUUlVFIG9uIHN1Y2Nlc3MuCisgKi8KKyAgICBzdGF0aWMgaW50Cit3cml0ZV9zZXNzaW9uX2ZpbGUoY2hhcl91ICpmaWxlbmFtZSkKK3sKKyAgICBjaGFyX3UJICAgICplc2NhcGVkX2ZpbGVuYW1lOworICAgIGNoYXIJICAgICpta3Nlc3Npb25fY21kbGluZTsKKyAgICB1bnNpZ25lZCBpbnQgICAgc2F2ZV9zc29wX2ZsYWdzOworICAgIGludAkJICAgIGZhaWxlZDsKKworICAgIC8qCisgICAgICogQnVpbGQgYW4gZXggY29tbWFuZCBsaW5lIHRvIGNyZWF0ZSBhIHNjcmlwdCB0aGF0IHJlc3RvcmVzIHRoZSBjdXJyZW50CisgICAgICogc2Vzc2lvbiBpZiBleGVjdXRlZC4gIEVzY2FwZSB0aGUgZmlsZW5hbWUgdG8gYXZvaWQgbmFzdHkgc3VycHJpc2VzLgorICAgICAqLworICAgIGVzY2FwZWRfZmlsZW5hbWUgPSB2aW1fc3Ryc2F2ZV9lc2NhcGVkKGZpbGVuYW1lLCBlc2NhcGVfY2hhcnMpOworICAgIGlmIChlc2NhcGVkX2ZpbGVuYW1lID09IE5VTEwpCisJcmV0dXJuIEZBTFNFOworICAgIG1rc2Vzc2lvbl9jbWRsaW5lID0gZ19zdHJjb25jYXQoIm1rc2Vzc2lvbiAiLCAoY2hhciAqKWVzY2FwZWRfZmlsZW5hbWUsIE5VTEwpOworICAgIHZpbV9mcmVlKGVzY2FwZWRfZmlsZW5hbWUpOworICAgIC8qCisgICAgICogVXNlIGEgcmVhc29uYWJsZSBoYXJkY29kZWQgc2V0IG9mICdzZXNzaW9ub3B0aW9ucycgZmxhZ3MgdG8gYXZvaWQKKyAgICAgKiB1bnByZWRpY3RhYmxlIGVmZmVjdHMgd2hlbiB0aGUgc2Vzc2lvbiBpcyBzYXZlZCBhdXRvbWF0aWNhbGx5LiAgQWxzbywKKyAgICAgKiB3ZSBkZWZpbml0ZWx5IG5lZWQgU1NPUF9HTE9CQUxTIHRvIGJlIGFibGUgdG8gcmVzdG9yZSB2OnRoaXNfc2Vzc2lvbi4KKyAgICAgKiBEb24ndCB1c2UgU1NPUF9CVUZGRVJTIHRvIHByZXZlbnQgdGhlIGJ1ZmZlciBsaXN0IGZyb20gYmVjb21pbmcKKyAgICAgKiBlbm9ybW91c2x5IGxhcmdlIGlmIHRoZSBHTk9NRSBzZXNzaW9uIGZlYXR1cmUgaXMgdXNlZCByZWd1bGFybHkuCisgICAgICovCisgICAgc2F2ZV9zc29wX2ZsYWdzID0gc3NvcF9mbGFnczsKKyAgICBzc29wX2ZsYWdzID0gKFNTT1BfQkxBTkt8U1NPUF9DVVJESVJ8U1NPUF9GT0xEU3xTU09QX0dMT0JBTFMKKwkJICB8U1NPUF9IRUxQfFNTT1BfT1BUSU9OU3xTU09QX1dJTlNJWkUpOworCisgICAgZG9fY21kbGluZV9jbWQoKGNoYXJfdSAqKSJsZXQgU2F2ZV9WVl90aGlzX3Nlc3Npb24gPSB2OnRoaXNfc2Vzc2lvbiIpOworICAgIGZhaWxlZCA9IChkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopbWtzZXNzaW9uX2NtZGxpbmUpID09IEZBSUwpOworICAgIGRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikibGV0IHY6dGhpc19zZXNzaW9uID0gU2F2ZV9WVl90aGlzX3Nlc3Npb24iKTsKKyAgICBkb191bmxldCgoY2hhcl91ICopIlNhdmVfVlZfdGhpc19zZXNzaW9uIik7CisKKyAgICBzc29wX2ZsYWdzID0gc2F2ZV9zc29wX2ZsYWdzOworICAgIGdfZnJlZShta3Nlc3Npb25fY21kbGluZSk7CisgICAgLyoKKyAgICAgKiBSZW9wZW4gdGhlIGZpbGUgYW5kIGFwcGVuZCBhIGNvbW1hbmQgdG8gcmVzdG9yZSB2OnRoaXNfc2Vzc2lvbiwKKyAgICAgKiBhcyBpZiB0aGlzIHNhdmUgbmV2ZXIgaGFwcGVuZWQuCVRoaXMgaXMgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGgKKyAgICAgKiB0aGUgdXNlcidzIG93biBzZXNzaW9ucy4gIEZJWE1FOiBJdCdzIHByb2JhYmx5IGxlc3MgaGFja2lzaCB0byBhZGQKKyAgICAgKiBhICJzdGVhbHRoIiBmbGFnIHRvICdzZXNzaW9ub3B0aW9ucycgLS0gZ290dGEgYXNrIEJyYW0uCisgICAgICovCisgICAgaWYgKCFmYWlsZWQpCisgICAgeworCUZJTEUgKmZkOworCisJZmQgPSBvcGVuX2V4ZmlsZShmaWxlbmFtZSwgVFJVRSwgQVBQRU5EQklOKTsKKworCWZhaWxlZCA9IChmZCA9PSBOVUxMCisJICAgICAgIHx8IHB1dF9saW5lKGZkLCAibGV0IHY6dGhpc19zZXNzaW9uID0gU2F2ZV9WVl90aGlzX3Nlc3Npb24iKSA9PSBGQUlMCisJICAgICAgIHx8IHB1dF9saW5lKGZkLCAidW5sZXQgU2F2ZV9WVl90aGlzX3Nlc3Npb24iKSA9PSBGQUlMKTsKKworCWlmIChmZCAhPSBOVUxMICYmIGZjbG9zZShmZCkgIT0gMCkKKwkgICAgZmFpbGVkID0gVFJVRTsKKworCWlmIChmYWlsZWQpCisJICAgIG1jaF9yZW1vdmUoZmlsZW5hbWUpOworICAgIH0KKworICAgIHJldHVybiAhZmFpbGVkOworfQorCisvKgorICogInNhdmVfeW91cnNlbGYiIHNpZ25hbCBoYW5kbGVyLiAgSW5pdGlhdGUgYW4gaW50ZXJhY3Rpb24gdG8gYXNrIHRoZSB1c2VyCisgKiBmb3IgY29uZmlybWF0aW9uIGlmIG5lY2Vzc2FyeS4gIFNhdmUgdGhlIGN1cnJlbnQgZWRpdGluZyBzZXNzaW9uIGFuZCB0ZWxsCisgKiB0aGUgc2Vzc2lvbiBtYW5hZ2VyIGhvdyB0byByZXN0YXJ0IFZpbS4KKyAqLworLypBUkdTVVNFRDEqLworICAgIHN0YXRpYyBnYm9vbGVhbgorc21fY2xpZW50X3NhdmVfeW91cnNlbGYoR25vbWVDbGllbnQJICAgICpjbGllbnQsCisJCQlnaW50CQkgICAgcGhhc2UsCisJCQlHbm9tZVNhdmVTdHlsZQkgICAgc2F2ZV9zdHlsZSwKKwkJCWdib29sZWFuCSAgICBzaHV0ZG93biwKKwkJCUdub21lSW50ZXJhY3RTdHlsZSAgaW50ZXJhY3Rfc3R5bGUsCisJCQlnYm9vbGVhbgkgICAgZmFzdCwKKwkJCWdwb2ludGVyCSAgICBkYXRhKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyCXN1ZmZpeFtdID0gIi1zZXNzaW9uLnZpbSI7CisgICAgY2hhcgkJKnNlc3Npb25fZmlsZTsKKyAgICB1bnNpZ25lZCBpbnQJbGVuOworICAgIGdib29sZWFuCQlzdWNjZXNzOworCisgICAgLyogQWx3YXlzIHJlcXVlc3QgYW4gaW50ZXJhY3Rpb24gaWYgcG9zc2libGUuICBjaGVja19jaGFuZ2VkX2FueSgpCisgICAgICogd29uJ3QgYWN0dWFsbHkgc2hvdyBhIGRpYWxvZyB1bmxlc3MgYW55IGJ1ZmZlcnMgaGF2ZSBiZWVuIG1vZGlmaWVkLgorICAgICAqIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbiBvYnZpb3VzIHdheSB0byBjaGVjayB0aGF0IHdpdGhvdXQKKyAgICAgKiBhdXRvbWF0aWNhbGx5IGZpcmluZyB0aGUgZGlhbG9nLiAgQW55d2F5LCBpdCB3b3JrcyBqdXN0IGZpbmUuICovCisgICAgaWYgKGludGVyYWN0X3N0eWxlID09IEdOT01FX0lOVEVSQUNUX0FOWSkKKwlnbm9tZV9jbGllbnRfcmVxdWVzdF9pbnRlcmFjdGlvbihjbGllbnQsIEdOT01FX0RJQUxPR19OT1JNQUwsCisJCQkJCSAmc21fY2xpZW50X2NoZWNrX2NoYW5nZWRfYW55LAorCQkJCQkgTlVMTCk7CisgICAgb3V0X2ZsdXNoKCk7CisgICAgbWxfc3luY19hbGwoRkFMU0UsIEZBTFNFKTsgLyogcHJlc2VydmUgYWxsIHN3YXAgZmlsZXMgKi8KKworICAgIC8qIFRoZSBwYXRoIGlzIHVuaXF1ZSBmb3IgZWFjaCBzZXNzaW9uIHNhdmUuICBXZSBkbyBuZWl0aGVyIGtub3cgbm9yIGNhcmUKKyAgICAgKiB3aGljaCBzZXNzaW9uIHNjcmlwdCB3aWxsIGFjdHVhbGx5IGJlIHVzZWQgbGF0ZXIuICBUaGlzIGRlY2lzaW9uIGlzIGluCisgICAgICogdGhlIGRvbWFpbiBvZiB0aGUgc2Vzc2lvbiBtYW5hZ2VyLiAqLworICAgIHNlc3Npb25fZmlsZSA9IGdub21lX2NvbmZpZ19nZXRfcmVhbF9wYXRoKAorCQkJZ25vbWVfY2xpZW50X2dldF9jb25maWdfcHJlZml4KGNsaWVudCkpOworICAgIGxlbiA9IHN0cmxlbihzZXNzaW9uX2ZpbGUpOworCisgICAgaWYgKGxlbiA+IDAgJiYgc2Vzc2lvbl9maWxlW2xlbi0xXSA9PSBHX0RJUl9TRVBBUkFUT1IpCisJLS1sZW47IC8qIGdldCByaWQgb2YgdGhlIHN1cGVyZmx1b3VzIHRyYWlsaW5nICcvJyAqLworCisgICAgc2Vzc2lvbl9maWxlID0gZ19yZW5ldyhjaGFyLCBzZXNzaW9uX2ZpbGUsIGxlbiArIHNpemVvZihzdWZmaXgpKTsKKyAgICBtZW1jcHkoc2Vzc2lvbl9maWxlICsgbGVuLCBzdWZmaXgsIHNpemVvZihzdWZmaXgpKTsKKworICAgIHN1Y2Nlc3MgPSB3cml0ZV9zZXNzaW9uX2ZpbGUoKGNoYXJfdSAqKXNlc3Npb25fZmlsZSk7CisKKyAgICBpZiAoc3VjY2VzcykKKyAgICB7CisJY29uc3QgY2hhciAgKmFyZ3ZbOF07CisJaW50CSAgICBpOworCisJLyogVGVsbCB0aGUgc2Vzc2lvbiBtYW5hZ2VyIGhvdyB0byB3aXBlIG91dCB0aGUgc3RvcmVkIHNlc3Npb24gZGF0YS4KKwkgKiBUaGlzIGlzbid0IGFzIGRhbmdlcm91cyBhcyBpdCBsb29rcywgZG9uJ3Qgd29ycnkgOikJc2Vzc2lvbl9maWxlCisJICogaXMgYSB1bmlxdWUgYWJzb2x1dGUgZmlsZW5hbWUuICBVc3VhbGx5IGl0J2xsIGJlIHNvbWV0aGluZyBsaWtlCisJICogYC9ob21lL3VzZXIvLmdub21lMi92aW0tWFhYWFhYLXNlc3Npb24udmltJy4gKi8KKwlpID0gMDsKKwlhcmd2W2krK10gPSAicm0iOworCWFyZ3ZbaSsrXSA9IHNlc3Npb25fZmlsZTsKKwlhcmd2W2ldID0gTlVMTDsKKworCWdub21lX2NsaWVudF9zZXRfZGlzY2FyZF9jb21tYW5kKGNsaWVudCwgaSwgKGNoYXIgKiopYXJndik7CisKKwkvKiBUZWxsIHRoZSBzZXNzaW9uIG1hbmFnZXIgaG93IHRvIHJlc3RvcmUgdGhlIGp1c3Qgc2F2ZWQgc2Vzc2lvbi4KKwkgKiBUaGlzIGlzIGVhc2lseSBkb25lIHRoYW5rcyB0byBWaW0ncyAtUyBvcHRpb24uICBQYXNzIHRoZSAtZiBmbGFnCisJICogc2luY2UgdGhlcmUncyBubyBuZWVkIHRvIGZvcmsgLS0gaXQgbWlnaHQgZXZlbiBjYXVzZSBjb25mdXNpb24uCisJICogQWxzbyBwYXNzIHRoZSB3aW5kb3cgcm9sZSB0byBnaXZlIHRoZSBXTSBzb21ldGhpbmcgdG8gbWF0Y2ggb24uCisJICogVGhlIHJvbGUgaXMgc2V0IGluIGd1aV9tY2hfb3BlbigpLCB0aHVzIHNob3VsZCBfbmV2ZXJfIGJlIE5VTEwuICovCisJaSA9IDA7CisJYXJndltpKytdID0gcmVzdGFydF9jb21tYW5kOworCWFyZ3ZbaSsrXSA9ICItZiI7CisJYXJndltpKytdID0gIi1nIjsKKyMgaWZkZWYgSEFWRV9HVEsyCisJYXJndltpKytdID0gIi0tcm9sZSI7CisJYXJndltpKytdID0gZ3RrX3dpbmRvd19nZXRfcm9sZShHVEtfV0lORE9XKGd1aS5tYWlud2luKSk7CisjIGVuZGlmCisJYXJndltpKytdID0gIi1TIjsKKwlhcmd2W2krK10gPSBzZXNzaW9uX2ZpbGU7CisJYXJndltpXSA9IE5VTEw7CisKKwlnbm9tZV9jbGllbnRfc2V0X3Jlc3RhcnRfY29tbWFuZChjbGllbnQsIGksIChjaGFyICoqKWFyZ3YpOworCWdub21lX2NsaWVudF9zZXRfY2xvbmVfY29tbWFuZChjbGllbnQsIDAsIE5VTEwpOworICAgIH0KKworICAgIGdfZnJlZShzZXNzaW9uX2ZpbGUpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB0aGUgc2Vzc2lvbiBtYW5hZ2VyIHdhbnRzIHVzIHRvIGRpZS4gIFRoZXJlIGlzbid0IG11Y2ggdG8gc2F2ZQorICogaGVyZSBzaW5jZSAic2F2ZV95b3Vyc2VsZiIgaGFzIGJlZW4gZW1pdHRlZCBiZWZvcmUgKHVubGVzcyBzZXJpb3VzIHRyb3VibGUKKyAqIGlzIGhhcHBlbmluZykuCisgKi8KKy8qQVJHU1VTRUQwKi8KKyAgICBzdGF0aWMgdm9pZAorc21fY2xpZW50X2RpZShHbm9tZUNsaWVudCAqY2xpZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIC8qIERvbid0IHdyaXRlIG1lc3NhZ2VzIHRvIHRoZSBHVUkgYW55bW9yZSAqLworICAgIGZ1bGxfc2NyZWVuID0gRkFMU0U7CisKKyAgICBTVFJOQ1BZKElPYnVmZiwgXygiVmltOiBSZWNlaXZlZCBcImRpZVwiIHJlcXVlc3QgZnJvbSBzZXNzaW9uIG1hbmFnZXJcbiIpLAorCSAgICBJT1NJWkUpOworICAgIElPYnVmZltJT1NJWkUgLSAxXSA9IE5VTDsKKyAgICBwcmVzZXJ2ZV9leGl0KCk7Cit9CisKKy8qCisgKiBDb25uZWN0IG91ciBzaWduYWwgaGFuZGxlcnMgdG8gYmUgbm90aWZpZWQgb24gc2Vzc2lvbiBzYXZlIGFuZCBzaHV0ZG93bi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXR1cF9zYXZlX3lvdXJzZWxmKHZvaWQpCit7CisgICAgR25vbWVDbGllbnQgKmNsaWVudDsKKworICAgIGNsaWVudCA9IGdub21lX21hc3Rlcl9jbGllbnQoKTsKKworICAgIGlmIChjbGllbnQgIT0gTlVMTCkKKyAgICB7CisJLyogTXVzdCB1c2UgdGhlIGRlcHJlY2F0ZWQgZ3RrX3NpZ25hbF9jb25uZWN0KCkgZm9yIGNvbXBhdGliaWxpdHkKKwkgKiB3aXRoIEdOT01FIDEuICBBcnJnaCwgem9tYmllcyEgKi8KKwlndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChjbGllbnQpLCAic2F2ZV95b3Vyc2VsZiIsCisJCQkgICBHVEtfU0lHTkFMX0ZVTkMoJnNtX2NsaWVudF9zYXZlX3lvdXJzZWxmKSwgTlVMTCk7CisJZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoY2xpZW50KSwgImRpZSIsCisJCQkgICBHVEtfU0lHTkFMX0ZVTkMoJnNtX2NsaWVudF9kaWUpLCBOVUxMKTsKKyAgICB9Cit9CisKKyNlbHNlIC8qICEoRkVBVF9HVUlfR05PTUUgJiYgRkVBVF9TRVNTSU9OKSAqLworCisjIGlmZGVmIFVTRV9YU01QCisvKgorICogR1RLIHRlbGxzIHVzIHRoYXQgWFNNUCBuZWVkcyBhdHRlbnRpb24KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIGdib29sZWFuCitsb2NhbF94c21wX2hhbmRsZV9yZXF1ZXN0cyhzb3VyY2UsIGNvbmRpdGlvbiwgZGF0YSkKKyAgICBHSU9DaGFubmVsCQkqc291cmNlOworICAgIEdJT0NvbmRpdGlvbgljb25kaXRpb247CisgICAgZ3BvaW50ZXIJCWRhdGE7Cit7CisgICAgaWYgKGNvbmRpdGlvbiA9PSBHX0lPX0lOKQorICAgIHsKKwkvKiBEbyBzdHVmZjsgbWF5YmUgY2xvc2UgY29ubmVjdGlvbiAqLworCWlmICh4c21wX2hhbmRsZV9yZXF1ZXN0cygpID09IEZBSUwpCisJICAgIGdfaW9fY2hhbm5lbF91bnJlZigoR0lPQ2hhbm5lbCAqKWRhdGEpOworCXJldHVybiBUUlVFOworICAgIH0KKyAgICAvKiBFcnJvciAqLworICAgIGdfaW9fY2hhbm5lbF91bnJlZigoR0lPQ2hhbm5lbCAqKWRhdGEpOworICAgIHhzbXBfY2xvc2UoKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKyMgZW5kaWYgLyogVVNFX1hTTVAgKi8KKworLyoKKyAqIFNldHVwIHRoZSBXTV9QUk9UT0NPTFMgdG8gaW5kaWNhdGUgd2Ugd2FudCB0aGUgV01fU0FWRV9ZT1VSU0VMRiBldmVudC4KKyAqIFRoaXMgaXMgYW4gdWdseSB1c2Ugb2YgWCBmdW5jdGlvbnMuCUdUSyBkb2Vzbid0IG9mZmVyIGFuIGFsdGVybmF0aXZlLgorICovCisgICAgc3RhdGljIHZvaWQKK3NldHVwX3NhdmVfeW91cnNlbGYodm9pZCkKK3sKKyAgICBBdG9tICAgICpleGlzdGluZ19hdG9tcyA9IE5VTEw7CisgICAgaW50CSAgICBjb3VudCA9IDA7CisKKyNpZmRlZiBVU0VfWFNNUAorICAgIGlmICh4c21wX2ljZWZkICE9IC0xKQorICAgIHsKKwkvKgorCSAqIFVzZSBYU01QIGlzIHByZWZlcmVuY2UgdG8gbGVnYWN5IFdNX1NBVkVfWU9VUlNFTEY7CisJICogc2V0IHVwIEdUSyBJTyBtb25pdG9yCisJICovCisJR0lPQ2hhbm5lbCAqZ19pbyA9IGdfaW9fY2hhbm5lbF91bml4X25ldyh4c21wX2ljZWZkKTsKKworCWdfaW9fYWRkX3dhdGNoKGdfaW8sIEdfSU9fSU4gfCBHX0lPX0VSUiB8IEdfSU9fSFVQLAorCQkJCSAgbG9jYWxfeHNtcF9oYW5kbGVfcmVxdWVzdHMsIChncG9pbnRlcilnX2lvKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCS8qIEZhbGwgYmFjayB0byBvbGQgbWV0aG9kICovCisKKwkvKiBmaXJzdCBnZXQgdGhlIGV4aXN0aW5nIHZhbHVlICovCisJaWYgKFhHZXRXTVByb3RvY29scyhHREtfV0lORE9XX1hESVNQTEFZKGd1aS5tYWlud2luLT53aW5kb3cpLAorCQkgICAgR0RLX1dJTkRPV19YV0lORE9XKGd1aS5tYWlud2luLT53aW5kb3cpLAorCQkgICAgJmV4aXN0aW5nX2F0b21zLCAmY291bnQpKQorCXsKKwkgICAgQXRvbQkqbmV3X2F0b21zOworCSAgICBBdG9tCXNhdmVfeW91cnNlbGZfeGF0b207CisJICAgIGludAlpOworCisJICAgIHNhdmVfeW91cnNlbGZfeGF0b20gPSBHRVRfWF9BVE9NKHNhdmVfeW91cnNlbGZfYXRvbSk7CisKKwkgICAgLyogY2hlY2sgaWYgV01fU0FWRV9ZT1VSU0VMRiBpc24ndCB0aGVyZSB5ZXQgKi8KKwkgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJCWlmIChleGlzdGluZ19hdG9tc1tpXSA9PSBzYXZlX3lvdXJzZWxmX3hhdG9tKQorCQkgICAgYnJlYWs7CisKKwkgICAgaWYgKGkgPT0gY291bnQpCisJICAgIHsKKwkJLyogYWxsb2NhdGUgYW4gQXRvbXMgYXJyYXkgd2hpY2ggaXMgb25lIGl0ZW0gbG9uZ2VyICovCisJCW5ld19hdG9tcyA9IChBdG9tICopYWxsb2MoKHVuc2lnbmVkKSgoY291bnQgKyAxKQorCQkJCQkJCSAgICAgKiBzaXplb2YoQXRvbSkpKTsKKwkJaWYgKG5ld19hdG9tcyAhPSBOVUxMKQorCQl7CisJCSAgICBtZW1jcHkobmV3X2F0b21zLCBleGlzdGluZ19hdG9tcywgY291bnQgKiBzaXplb2YoQXRvbSkpOworCQkgICAgbmV3X2F0b21zW2NvdW50XSA9IHNhdmVfeW91cnNlbGZfeGF0b207CisJCSAgICBYU2V0V01Qcm90b2NvbHMoR0RLX1dJTkRPV19YRElTUExBWShndWkubWFpbndpbi0+d2luZG93KSwKKwkJCSAgICBHREtfV0lORE9XX1hXSU5ET1coZ3VpLm1haW53aW4tPndpbmRvdyksCisJCQkgICAgbmV3X2F0b21zLCBjb3VudCArIDEpOworCQkgICAgdmltX2ZyZWUobmV3X2F0b21zKTsKKwkJfQorCSAgICB9CisJICAgIFhGcmVlKGV4aXN0aW5nX2F0b21zKTsKKwl9CisgICAgfQorfQorCisjIGlmZGVmIEhBVkVfR1RLMgorLyoKKyAqIEluc3RhbGxpbmcgYSBnbG9iYWwgZXZlbnQgZmlsdGVyIHNlZW1zIHRvIGJlIHRoZSBvbmx5IHdheSB0byBjYXRjaAorICogY2xpZW50IG1lc3NhZ2VzIG9mIHR5cGUgV01fUFJPVE9DT0xTIHdpdGhvdXQgb3ZlcnJpZGluZyBHREsncyBvd24KKyAqIGNsaWVudCBtZXNzYWdlIGV2ZW50IGZpbHRlci4gIFdlbGwsIHRoYXQncyBzdGlsbCBiZXR0ZXIgdGhhbiB0cnlpbmcKKyAqIHRvIGd1ZXNzIHdoYXQgdGhlIEdESyBmaWx0ZXIgaGFkIGRvbmUgaWYgaXQgaGFkIGJlZW4gaW52b2tlZCBpbnN0ZWFkCisgKiAoVGhpcyBpcyB3aGF0IHdlIGRpZCBmb3IgR1RLKyAxLjIsIHNlZSBiZWxvdykuCisgKgorICogR1RLMl9GSVhNRToJVGhpcyBkb2Vzbid0IHNlZW0gdG8gd29yay4gIEZvciBzb21lIHJlYXNvbiB3ZSBuZXZlcgorICogcmVjZWl2ZSBXTV9TQVZFX1lPVVJTRUxGIGV2ZW4gdGhvdWdoIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS4KKyAqIEkgaGF2ZSB0aGUgbmFzdHkgZmVlbGluZyBtb2Rlcm4gc2Vzc2lvbiBtYW5hZ2VycyBqdXN0IGRvbid0IHNlbmQgdGhpcworICogZGVwcmVjYXRlZCBtZXNzYWdlIGFueW1vcmUuCUFkZGl0aW9uOiBjb25maXJtZWQgYnkgc2V2ZXJhbCBwZW9wbGUuCisgKgorICogVGhlIEdOT01FIHNlc3Npb24gc3VwcG9ydCBpcyBtdWNoIGNvb2xlciBhbnl3YXkuICBVbmxpa2UgdGhpcyB1Z2x5CisgKiBXTV9TQVZFX1lPVVJTRUxGIGhhY2sgaXQgYWN0dWFsbHkgc3RvcmVzIHRoZSBzZXNzaW9uLi4uICBBbmQgeWVzLAorICogaXQgc2hvdWxkIHdvcmsgd2l0aCBLREUgYXMgd2VsbC4KKyAqLworLypBUkdTVVNFRDEqLworICAgIHN0YXRpYyBHZGtGaWx0ZXJSZXR1cm4KK2dsb2JhbF9ldmVudF9maWx0ZXIoR2RrWEV2ZW50ICp4ZXYsIEdka0V2ZW50ICpldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBYRXZlbnQgKnhldmVudCA9IChYRXZlbnQgKil4ZXY7CisKKyAgICBpZiAoeGV2ZW50ICE9IE5VTEwKKwkgICAgJiYgeGV2ZW50LT50eXBlID09IENsaWVudE1lc3NhZ2UKKwkgICAgJiYgeGV2ZW50LT54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9PSBHRVRfWF9BVE9NKHdtX3Byb3RvY29sc19hdG9tKQorCSAgICAmJiB4ZXZlbnQtPnhjbGllbnQuZGF0YS5sWzBdID09IEdFVF9YX0FUT00oc2F2ZV95b3Vyc2VsZl9hdG9tKSkKKyAgICB7CisJb3V0X2ZsdXNoKCk7CisJbWxfc3luY19hbGwoRkFMU0UsIEZBTFNFKTsgLyogcHJlc2VydmUgYWxsIHN3YXAgZmlsZXMgKi8KKwkvKgorCSAqIFNldCB0aGUgd2luZG93J3MgV01fQ09NTUFORCBwcm9wZXJ0eSwgdG8gbGV0IHRoZSB3aW5kb3cgbWFuYWdlcgorCSAqIGtub3cgd2UgYXJlIGRvbmUgc2F2aW5nIG91cnNlbHZlcy4gIFdlIGRvbid0IHdhbnQgdG8gYmUKKwkgKiByZXN0YXJ0ZWQsIHRodXMgc2V0IGFyZ3YgdG8gTlVMTC4KKwkgKi8KKwlYU2V0Q29tbWFuZChHREtfV0lORE9XX1hESVNQTEFZKGd1aS5tYWlud2luLT53aW5kb3cpLAorCQkgICAgR0RLX1dJTkRPV19YV0lORE9XKGd1aS5tYWlud2luLT53aW5kb3cpLAorCQkgICAgTlVMTCwgMCk7CisJcmV0dXJuIEdES19GSUxURVJfUkVNT1ZFOworICAgIH0KKworICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworfQorCisjIGVsc2UgLyogIUhBVkVfR1RLMiAqLworCisvKgorICogR0RLIGhhbmRsZXIgZm9yIFggQ2xpZW50TWVzc2FnZSBldmVudHMuCisgKi8KKy8qQVJHU1VTRUQyKi8KKyAgICBzdGF0aWMgR2RrRmlsdGVyUmV0dXJuCitnZGtfd21fcHJvdG9jb2xzX2ZpbHRlcihHZGtYRXZlbnQgKnhldiwgR2RrRXZlbnQgKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIC8qIEZyb20gZXhhbXBsZSBpbiBnZGtldmVudHMuYy9nZGtfd21fcHJvdG9jb2xzX2ZpbHRlciAqLworICAgIFhFdmVudCAqeGV2ZW50ID0gKFhFdmVudCAqKXhldjsKKworICAgIGlmICh4ZXZlbnQgIT0gTlVMTCkKKyAgICB7CisJaWYgKHhldmVudC0+eGNsaWVudC5kYXRhLmxbMF0gPT0gR0VUX1hfQVRPTShzYXZlX3lvdXJzZWxmX2F0b20pKQorCXsKKwkgICAgb3V0X2ZsdXNoKCk7CisJICAgIG1sX3N5bmNfYWxsKEZBTFNFLCBGQUxTRSk7CSAgICAvKiBwcmVzZXJ2ZSBhbGwgc3dhcCBmaWxlcyAqLworCisJICAgIC8qIFNldCB0aGUgd2luZG93J3MgV01fQ09NTUFORCBwcm9wZXJ0eSwgdG8gbGV0IHRoZSB3aW5kb3cgbWFuYWdlcgorCSAgICAgKiBrbm93IHdlIGFyZSBkb25lIHNhdmluZyBvdXJzZWx2ZXMuICBXZSBkb24ndCB3YW50IHRvIGJlCisJICAgICAqIHJlc3RhcnRlZCwgdGh1cyBzZXQgYXJndiB0byBOVUxMLiAqLworCSAgICBYU2V0Q29tbWFuZChHREtfV0lORE9XX1hESVNQTEFZKGd1aS5tYWlud2luLT53aW5kb3cpLAorCQkJR0RLX1dJTkRPV19YV0lORE9XKGd1aS5tYWlud2luLT53aW5kb3cpLAorCQkJTlVMTCwgMCk7CisJfQorCS8qCisJICogRnVuY3Rpb25hbGl0eSBmcm9tIGdka2V2ZW50cy5jL2dka193bV9wcm90b2NvbHNfZmlsdGVyOworCSAqIFJlZ2lzdGVyaW5nIHRoaXMgZmlsdGVyIGFwcGFyZW50bHkgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IEdESyBvbmUsCisJICogc28gd2UgbmVlZCB0byBwZXJmb3JtIGl0cyBmdW5jdGlvbmFsaXR5LiAgVGhlcmUgc2VlbXMgbm8gd2F5IHRvCisJICogcmVnaXN0ZXIgZm9yIFdNX1BST1RPQ09MUywgYW5kIG9ubHkgcHJvY2VzcyB0aGUgV01fU0FWRV9ZT1VSU0VMRgorCSAqIGJpdDsgaXQncyBhbGwgb3Igbm90aGluZy4gIFVwZGF0ZTogTm8sIHRoZXJlIGlzIGEgd2F5IC0tIGJ1dCBpdAorCSAqIG9ubHkgd29ya3Mgd2l0aCBHVEsrIDIgYXBwYXJlbnRseS4gIFNlZSBhYm92ZS4KKwkgKi8KKwllbHNlIGlmICh4ZXZlbnQtPnhjbGllbnQuZGF0YS5sWzBdID09IEdFVF9YX0FUT00oZ2RrX3dtX2RlbGV0ZV93aW5kb3cpKQorCXsKKwkgICAgZXZlbnQtPmFueS50eXBlID0gR0RLX0RFTEVURTsKKwkgICAgcmV0dXJuIEdES19GSUxURVJfVFJBTlNMQVRFOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7Cit9CisjIGVuZGlmIC8qICFIQVZFX0dUSzIgKi8KKworI2VuZGlmIC8qICEoRkVBVF9HVUlfR05PTUUgJiYgRkVBVF9TRVNTSU9OKSAqLworCisKKy8qCisgKiBTZXR1cCB0aGUgd2luZG93IGljb24gJiB4Y21kc3J2IGNvbW0gYWZ0ZXIgdGhlIG1haW4gd2luZG93IGhhcyBiZWVuIHJlYWxpemVkLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorbWFpbndpbl9yZWFsaXplKEd0a1dpZGdldCAqd2lkZ2V0LCBncG9pbnRlciBkYXRhKQoreworLyogSWYgeW91IGdldCBhbiBlcnJvciBtZXNzYWdlIGhlcmUsIHlvdSBzdGlsbCBuZWVkIHRvIHVucGFjayB0aGUgcnVudGltZQorICogYXJjaGl2ZSEgKi8KKyNpZmRlZiBtYWdpY2sKKyMgdW5kZWYgbWFnaWNrCisjZW5kaWYKKyNpZmRlZiBIQVZFX0dUSzIKKyAgLyogQSBiaXQgaGFja2lzaCwgYnV0IGF2b2lkcyBjYXN0aW5nIGxhdGVyIGFuZCBhbGxvd3Mgb3B0aW1pemF0aW9uICovCisjIGRlZmluZSBzdGF0aWMgc3RhdGljIGNvbnN0CisjZW5kaWYKKyNkZWZpbmUgbWFnaWNrIHZpbTMyeDMyCisjaW5jbHVkZSAiLi4vcnVudGltZS92aW0zMngzMi54cG0iCisjdW5kZWYgbWFnaWNrCisjZGVmaW5lIG1hZ2ljayB2aW0xNngxNgorI2luY2x1ZGUgIi4uL3J1bnRpbWUvdmltMTZ4MTYueHBtIgorI3VuZGVmIG1hZ2ljaworI2RlZmluZSBtYWdpY2sgdmltNDh4NDgKKyNpbmNsdWRlICIuLi9ydW50aW1lL3ZpbTQ4eDQ4LnhwbSIKKyN1bmRlZiBtYWdpY2sKKyNpZmRlZiBIQVZFX0dUSzIKKyMgdW5kZWYgc3RhdGljCisjZW5kaWYKKworICAgIC8qIFdoZW4gc3RhcnRlZCB3aXRoICItLWVjaG8td2lkIiBhcmd1bWVudCwgd3JpdGUgd2luZG93IElEIG9uIHN0ZG91dC4gKi8KKyAgICBpZiAoZWNob193aWRfYXJnKQorICAgIHsKKwlwcmludGYoIldJRDogJWxkXG4iLCAobG9uZylHREtfV0lORE9XX1hXSU5ET1coZ3VpLm1haW53aW4tPndpbmRvdykpOworCWZmbHVzaChzdGRvdXQpOworICAgIH0KKworICAgIGlmICh2aW1fc3RyY2hyKHBfZ28sIEdPX0lDT04pICE9IE5VTEwpCisgICAgeworCS8qCisJICogQWRkIGFuIGljb24gdG8gdGhlIG1haW4gd2luZG93LiBGb3IgZnVuIGFuZCBjb252ZW5pZW5jZSBvZiB0aGUgdXNlci4KKwkgKi8KKyNpZmRlZiBIQVZFX0dUSzIKKwlHTGlzdCAqaWNvbnMgPSBOVUxMOworCisJaWNvbnMgPSBnX2xpc3RfcHJlcGVuZChpY29ucywgZ2RrX3BpeGJ1Zl9uZXdfZnJvbV94cG1fZGF0YSh2aW0xNngxNikpOworCWljb25zID0gZ19saXN0X3ByZXBlbmQoaWNvbnMsIGdka19waXhidWZfbmV3X2Zyb21feHBtX2RhdGEodmltMzJ4MzIpKTsKKwlpY29ucyA9IGdfbGlzdF9wcmVwZW5kKGljb25zLCBnZGtfcGl4YnVmX25ld19mcm9tX3hwbV9kYXRhKHZpbTQ4eDQ4KSk7CisKKwlndGtfd2luZG93X3NldF9pY29uX2xpc3QoR1RLX1dJTkRPVyhndWkubWFpbndpbiksIGljb25zKTsKKworCWdfbGlzdF9mb3JlYWNoKGljb25zLCAoR0Z1bmMpJmdfb2JqZWN0X3VucmVmLCBOVUxMKTsKKwlnX2xpc3RfZnJlZShpY29ucyk7CisKKyNlbHNlIC8qICFIQVZFX0dUSzIgKi8KKworCUdka1BpeG1hcCAgICppY29uOworCUdka0JpdG1hcCAgICppY29uX21hc2sgPSBOVUxMOworCWNoYXIJICAgICoqbWFnaWNrID0gdmltMzJ4MzI7CisJRGlzcGxheQkgICAgKnhkaXNwbGF5OworCVdpbmRvdwkgICAgcm9vdF93aW5kb3c7CisJWEljb25TaXplICAgKnNpemU7CisJaW50CSAgICBudW1iZXJfc2l6ZXM7CisJLyoKKwkgKiBBZGp1c3QgdGhlIGljb24gdG8gdGhlIHByZWZlcmVuY2VzIG9mIHRoZSBhY3R1YWwgd2luZG93IG1hbmFnZXIuCisJICogVGhpcyBpcyBvbmNlIGFnYWluIGEgd29ya2Fyb3VuZCBmb3IgYSBkZWZmaWNpZW5jeSBpbiBHVEsrIDEuMi4KKwkgKi8KKwl4ZGlzcGxheSA9IEdES19XSU5ET1dfWERJU1BMQVkoZ3VpLm1haW53aW4tPndpbmRvdyk7CisJcm9vdF93aW5kb3cgPSBYUm9vdFdpbmRvdyh4ZGlzcGxheSwgRGVmYXVsdFNjcmVlbih4ZGlzcGxheSkpOworCWlmIChYR2V0SWNvblNpemVzKHhkaXNwbGF5LCByb290X3dpbmRvdywgJnNpemUsICZudW1iZXJfc2l6ZXMpKQorCXsKKwkgICAgaWYgKG51bWJlcl9zaXplcyA+IDApCisJICAgIHsKKwkJaWYgKHNpemUtPm1heF9oZWlnaHQgPj0gNDggJiYgc2l6ZS0+bWF4X2hlaWdodCA+PSA0OCkKKwkJICAgIG1hZ2ljayA9IHZpbTQ4eDQ4OworCQllbHNlIGlmIChzaXplLT5tYXhfaGVpZ2h0ID49IDMyICYmIHNpemUtPm1heF9oZWlnaHQgPj0gMzIpCisJCSAgICBtYWdpY2sgPSB2aW0zMngzMjsKKwkJZWxzZSBpZiAoc2l6ZS0+bWF4X2hlaWdodCA+PSAxNiAmJiBzaXplLT5tYXhfaGVpZ2h0ID49IDE2KQorCQkgICAgbWFnaWNrID0gdmltMTZ4MTY7CisJICAgIH0KKwkgICAgWEZyZWUoc2l6ZSk7CisJfQorCWljb24gPSBnZGtfcGl4bWFwX2NyZWF0ZV9mcm9tX3hwbV9kKGd1aS5tYWlud2luLT53aW5kb3csCisJCQkJCSAgICAmaWNvbl9tYXNrLCBOVUxMLCBtYWdpY2spOworCWlmIChpY29uICE9IE5VTEwpCisJICAgIC8qIE5vdGU6IGZvciBzb21lIHJlYXNvbiBnZGtfd2luZG93X3NldF9pY29uKCkgZG9lc24ndCBhY3F1aXJlCisJICAgICAqIGEgcmVmZXJlbmNlIG9uIHRoZSBwaXhtYXAsIHRodXMgd2UgX2hhdmVfIHRvIGxlYWsgaXQuICovCisJICAgIGdka193aW5kb3dfc2V0X2ljb24oZ3VpLm1haW53aW4tPndpbmRvdywgTlVMTCwgaWNvbiwgaWNvbl9tYXNrKTsKKworI2VuZGlmIC8qICFIQVZFX0dUSzIgKi8KKyAgICB9CisKKyNpZiAhKGRlZmluZWQoRkVBVF9HVUlfR05PTUUpICYmIGRlZmluZWQoRkVBVF9TRVNTSU9OKSkKKyAgICAvKiBSZWdpc3RlciBhIGhhbmRsZXIgZm9yIFdNX1NBVkVfWU9VUlNFTEYgd2l0aCBHREsncyBsb3ctbGV2ZWwgWCBJL0YgKi8KKyMgaWZkZWYgSEFWRV9HVEsyCisgICAgZ2RrX3dpbmRvd19hZGRfZmlsdGVyKE5VTEwsICZnbG9iYWxfZXZlbnRfZmlsdGVyLCBOVUxMKTsKKyMgZWxzZQorICAgIGdka19hZGRfY2xpZW50X21lc3NhZ2VfZmlsdGVyKHdtX3Byb3RvY29sc19hdG9tLAorCQkJCSAgJmdka193bV9wcm90b2NvbHNfZmlsdGVyLCBOVUxMKTsKKyMgZW5kaWYKKyNlbmRpZgorICAgIC8qIFNldHVwIHRvIGluZGljYXRlIHRvIHRoZSB3aW5kb3cgbWFuYWdlciB0aGF0IHdlIHdhbnQgdG8gY2F0Y2ggdGhlCisgICAgICogV01fU0FWRV9ZT1VSU0VMRiBldmVudC4JRm9yIEdOT01FLCB0aGlzIGNvbm5lY3RzIHRvIHRoZSBzZXNzaW9uCisgICAgICogbWFuYWdlciBpbnN0ZWFkLiAqLworI2lmIGRlZmluZWQoRkVBVF9HVUlfR05PTUUpICYmIGRlZmluZWQoRkVBVF9TRVNTSU9OKQorICAgIGlmICh1c2luZ19nbm9tZSkKKyNlbmRpZgorCXNldHVwX3NhdmVfeW91cnNlbGYoKTsKKworI2lmZGVmIEZFQVRfQ0xJRU5UU0VSVkVSCisgICAgaWYgKHNlcnZlck5hbWUgPT0gTlVMTCAmJiBzZXJ2ZXJEZWxheWVkU3RhcnROYW1lICE9IE5VTEwpCisgICAgeworCS8qIFRoaXMgaXMgYSA6Z3VpIGNvbW1hbmQgaW4gYSBwbGFpbiB2aW0gd2l0aCBubyBwcmV2aW91cyBzZXJ2ZXIgKi8KKwljb21tV2luZG93ID0gR0RLX1dJTkRPV19YV0lORE9XKGd1aS5tYWlud2luLT53aW5kb3cpOworCisJKHZvaWQpc2VydmVyUmVnaXN0ZXJOYW1lKEdES19XSU5ET1dfWERJU1BMQVkoZ3VpLm1haW53aW4tPndpbmRvdyksCisJCQkJIHNlcnZlckRlbGF5ZWRTdGFydE5hbWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qCisJICogQ2Fubm90IGhhbmRsZSAiWExpYi1vbmx5IiB3aW5kb3dzIHdpdGggZ3RrIGV2ZW50IHJvdXRpbmVzLCB3ZSdsbAorCSAqIGhhdmUgdG8gY2hhbmdlIHRoZSAic2VydmVyIiByZWdpc3RyYXRpb24gdG8gdGhhdCBvZiB0aGUgbWFpbiB3aW5kb3cKKwkgKiBJZiB3ZSBoYXZlIG5vdCByZWdpc3RlcmVkIGEgbmFtZSB5ZXQsIHJlbWVtYmVyIHRoZSB3aW5kb3cKKwkgKi8KKwlzZXJ2ZXJDaGFuZ2VSZWdpc3RlcmVkV2luZG93KEdES19XSU5ET1dfWERJU1BMQVkoZ3VpLm1haW53aW4tPndpbmRvdyksCisJCQkJICAgICBHREtfV0lORE9XX1hXSU5ET1coZ3VpLm1haW53aW4tPndpbmRvdykpOworICAgIH0KKyAgICBndGtfd2lkZ2V0X2FkZF9ldmVudHMoZ3VpLm1haW53aW4sIEdES19QUk9QRVJUWV9DSEFOR0VfTUFTSyk7CisgICAgZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoZ3VpLm1haW53aW4pLCAicHJvcGVydHlfbm90aWZ5X2V2ZW50IiwKKwkJICAgICAgIEdUS19TSUdOQUxfRlVOQyhwcm9wZXJ0eV9ldmVudCksIE5VTEwpOworI2VuZGlmCit9CisKKyAgICBzdGF0aWMgR2RrQ3Vyc29yICoKK2NyZWF0ZV9ibGFua19wb2ludGVyKHZvaWQpCit7CisgICAgR2RrV2luZG93CSpyb290X3dpbmRvdyA9IE5VTEw7CisgICAgR2RrUGl4bWFwCSpibGFua19tYXNrOworICAgIEdka0N1cnNvcgkqY3Vyc29yOworICAgIEdka0NvbG9yCWNvbG9yID0geyAwLCAwLCAwLCAwIH07CisgICAgY2hhcglibGFua19kYXRhW10gPSB7IDB4MCB9OworCisjaWZkZWYgSEFWRV9HVEtfTVVMVElIRUFECisgICAgcm9vdF93aW5kb3cgPSBndGtfd2lkZ2V0X2dldF9yb290X3dpbmRvdyhndWkubWFpbndpbik7CisjZW5kaWYKKworICAgIC8qIENyZWF0ZSBhIHBzZXVkbyBibGFuayBwb2ludGVyLCB3aGljaCBpcyBpbiBmYWN0IG9uZSBwaXhlbCBieSBvbmUgcGl4ZWwKKyAgICAgKiBpbiBzaXplLiAqLworICAgIGJsYW5rX21hc2sgPSBnZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEocm9vdF93aW5kb3csIGJsYW5rX2RhdGEsIDEsIDEpOworICAgIGN1cnNvciA9IGdka19jdXJzb3JfbmV3X2Zyb21fcGl4bWFwKGJsYW5rX21hc2ssIGJsYW5rX21hc2ssCisJCQkJCSZjb2xvciwgJmNvbG9yLCAwLCAwKTsKKyAgICBnZGtfYml0bWFwX3VucmVmKGJsYW5rX21hc2spOworCisgICAgcmV0dXJuIGN1cnNvcjsKK30KKworI2lmZGVmIEhBVkVfR1RLX01VTFRJSEVBRAorLypBUkdTVVNFRDEqLworICAgIHN0YXRpYyB2b2lkCittYWlud2luX3NjcmVlbl9jaGFuZ2VkX2NiKEd0a1dpZGdldCAgKndpZGdldCwKKwkJCSAgR2RrU2NyZWVuICAqcHJldmlvdXNfc2NyZWVuLAorCQkJICBncG9pbnRlciAgIGRhdGEpCit7CisgICAgaWYgKCFndGtfd2lkZ2V0X2hhc19zY3JlZW4od2lkZ2V0KSkKKwlyZXR1cm47CisKKyAgICAvKgorICAgICAqIFJlY3JlYXRlIHRoZSBpbnZpc2JsZSBtb3VzZSBjdXJzb3IuCisgICAgICovCisgICAgaWYgKGd1aS5ibGFua19wb2ludGVyICE9IE5VTEwpCisJZ2RrX2N1cnNvcl91bnJlZihndWkuYmxhbmtfcG9pbnRlcik7CisKKyAgICBndWkuYmxhbmtfcG9pbnRlciA9IGNyZWF0ZV9ibGFua19wb2ludGVyKCk7CisKKyAgICBpZiAoZ3VpLnBvaW50ZXJfaGlkZGVuICYmIGd1aS5kcmF3YXJlYS0+d2luZG93ICE9IE5VTEwpCisJZ2RrX3dpbmRvd19zZXRfY3Vyc29yKGd1aS5kcmF3YXJlYS0+d2luZG93LCBndWkuYmxhbmtfcG9pbnRlcik7CisKKyAgICAvKgorICAgICAqIENyZWF0ZSBhIG5ldyBQYW5nb0NvbnRleHQgZm9yIHRoaXMgc2NyZWVuLCBhbmQgaW5pdGlhbGl6ZSBpdAorICAgICAqIHdpdGggdGhlIGN1cnJlbnQgZm9udCBpZiBuZWNlc3NhcnkuCisgICAgICovCisgICAgaWYgKGd1aS50ZXh0X2NvbnRleHQgIT0gTlVMTCkKKwlnX29iamVjdF91bnJlZihndWkudGV4dF9jb250ZXh0KTsKKworICAgIGd1aS50ZXh0X2NvbnRleHQgPSBndGtfd2lkZ2V0X2NyZWF0ZV9wYW5nb19jb250ZXh0KHdpZGdldCk7CisgICAgcGFuZ29fY29udGV4dF9zZXRfYmFzZV9kaXIoZ3VpLnRleHRfY29udGV4dCwgUEFOR09fRElSRUNUSU9OX0xUUik7CisKKyAgICBpZiAoZ3VpLm5vcm1fZm9udCAhPSBOVUxMKQorICAgIHsKKwlndWlfbWNoX2luaXRfZm9udChwX2d1aWZvbnQsIDApOworCWd1aV9zZXRfc2hlbGxzaXplKEZBTFNFLCBGQUxTRSk7CisgICAgfQorfQorI2VuZGlmIC8qIEhBVkVfR1RLX01VTFRJSEVBRCAqLworCisvKgorICogQWZ0ZXIgdGhlIGRyYXdpbmcgYXJlYSBjb21lcyB1cCwgd2UgY2FsY3VsYXRlIGFsbCBjb2xvcnMgYW5kIGNyZWF0ZSB0aGUKKyAqIGR1bW15IGJsYW5rIGN1cnNvci4KKyAqCisgKiBEb24ndCB0cnkgdG8gc2V0IGFueSBWSU0gc2Nyb2xsYmFyIHNpemVzIGFueXdoZXJlIGhlcmUuIEknbSByZWx5aW5nIG9uIHRoZQorICogZmFjdCB0aGF0IHRoZSBtYWluIFZJTSBlbmdpbmUgZG9lc24ndCB0YWtlIHRoZW0gaW50byBhY2NvdW50IGFueXdoZXJlLgorICovCisvKkFSR1NVU0VEMSovCisgICAgc3RhdGljIHZvaWQKK2RyYXdhcmVhX3JlYWxpemVfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgR3RrV2lkZ2V0ICpzYmFyOworCisjaWZkZWYgRkVBVF9YSU0KKyAgICB4aW1faW5pdCgpOworI2VuZGlmCisgICAgZ3VpX21jaF9uZXdfY29sb3JzKCk7CisgICAgZ3VpLnRleHRfZ2MgPSBnZGtfZ2NfbmV3KGd1aS5kcmF3YXJlYS0+d2luZG93KTsKKworICAgIGd1aS5ibGFua19wb2ludGVyID0gY3JlYXRlX2JsYW5rX3BvaW50ZXIoKTsKKyAgICBpZiAoZ3VpLnBvaW50ZXJfaGlkZGVuKQorCWdka193aW5kb3dfc2V0X2N1cnNvcih3aWRnZXQtPndpbmRvdywgZ3VpLmJsYW5rX3BvaW50ZXIpOworCisgICAgLyogZ2V0IHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFycywgaWYgdGhleSBhcmUgcmVhbGl6ZWQgKi8KKyAgICBzYmFyID0gZmlyc3R3aW4tPndfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdLmlkOworICAgIGlmICghc2JhciB8fCAoIWd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfTEVGVF0KKwkJCQkgICAgJiYgZmlyc3R3aW4tPndfc2Nyb2xsYmFyc1tTQkFSX1JJR0hUXS5pZCkpCisJc2JhciA9IGZpcnN0d2luLT53X3Njcm9sbGJhcnNbU0JBUl9SSUdIVF0uaWQ7CisgICAgaWYgKHNiYXIgJiYgR1RLX1dJREdFVF9SRUFMSVpFRChzYmFyKSAmJiBzYmFyLT5hbGxvY2F0aW9uLndpZHRoKQorCWd1aS5zY3JvbGxiYXJfd2lkdGggPSBzYmFyLT5hbGxvY2F0aW9uLndpZHRoOworCisgICAgc2JhciA9IGd1aS5ib3R0b21fc2Jhci5pZDsKKyAgICBpZiAoc2JhciAmJiBHVEtfV0lER0VUX1JFQUxJWkVEKHNiYXIpICYmIHNiYXItPmFsbG9jYXRpb24uaGVpZ2h0KQorCWd1aS5zY3JvbGxiYXJfaGVpZ2h0ID0gc2Jhci0+YWxsb2NhdGlvbi5oZWlnaHQ7Cit9CisKKy8qCisgKiBQcm9wZXJseSBjbGVhbiB1cCBvbiBzaHV0ZG93bi4KKyAqLworLypBUkdTVVNFRDAqLworICAgIHN0YXRpYyB2b2lkCitkcmF3YXJlYV91bnJlYWxpemVfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgLyogRG9uJ3Qgd3JpdGUgbWVzc2FnZXMgdG8gdGhlIEdVSSBhbnltb3JlICovCisgICAgZnVsbF9zY3JlZW4gPSBGQUxTRTsKKworI2lmZGVmIEZFQVRfWElNCisgICAgaW1fc2h1dGRvd24oKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfR1RLMgorICAgIGlmIChndWkuYXNjaWlfZ2x5cGhzICE9IE5VTEwpCisgICAgeworCXBhbmdvX2dseXBoX3N0cmluZ19mcmVlKGd1aS5hc2NpaV9nbHlwaHMpOworCWd1aS5hc2NpaV9nbHlwaHMgPSBOVUxMOworICAgIH0KKyAgICBpZiAoZ3VpLmFzY2lpX2ZvbnQgIT0gTlVMTCkKKyAgICB7CisJZ19vYmplY3RfdW5yZWYoZ3VpLmFzY2lpX2ZvbnQpOworCWd1aS5hc2NpaV9mb250ID0gTlVMTDsKKyAgICB9CisgICAgZ19vYmplY3RfdW5yZWYoZ3VpLnRleHRfY29udGV4dCk7CisgICAgZ3VpLnRleHRfY29udGV4dCA9IE5VTEw7CisKKyAgICBnX29iamVjdF91bnJlZihndWkudGV4dF9nYyk7CisgICAgZ3VpLnRleHRfZ2MgPSBOVUxMOworCisgICAgZ2RrX2N1cnNvcl91bnJlZihndWkuYmxhbmtfcG9pbnRlcik7CisgICAgZ3VpLmJsYW5rX3BvaW50ZXIgPSBOVUxMOworI2Vsc2UKKyAgICBnZGtfZ2NfdW5yZWYoZ3VpLnRleHRfZ2MpOworICAgIGd1aS50ZXh0X2djID0gTlVMTDsKKworICAgIGdka19jdXJzb3JfZGVzdHJveShndWkuYmxhbmtfcG9pbnRlcik7CisgICAgZ3VpLmJsYW5rX3BvaW50ZXIgPSBOVUxMOworI2VuZGlmCit9CisKKy8qQVJHU1VTRUQwKi8KKyAgICBzdGF0aWMgdm9pZAorZHJhd2FyZWFfc3R5bGVfc2V0X2NiKEd0a1dpZGdldAkqd2lkZ2V0LAorCQkgICAgICBHdGtTdHlsZQkqcHJldmlvdXNfc3R5bGUsCisJCSAgICAgIGdwb2ludGVyCWRhdGEpCit7CisgICAgZ3VpX21jaF9uZXdfY29sb3JzKCk7Cit9CisKKy8qCisgKiBDYWxsYmFjayByb3V0aW5lIGZvciB0aGUgImRlbGV0ZV9ldmVudCIgc2lnbmFsIG9uIHRoZSB0b3BsZXZlbCB3aW5kb3cuCisgKiBUcmllcyB0byB2aW0gZ3JhY2VmdWxseSwgb3IgcmVmdXNlcyB0byBleGl0IHdpdGggY2hhbmdlZCBidWZmZXJzLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgZ2ludAorZGVsZXRlX2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudEFueSAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3VpX3NoZWxsX2Nsb3NlZCgpOworICAgIHJldHVybiBUUlVFOworfQorCisjaWZkZWYgRkVBVF9UT09MQkFSCisKKyMgaWZkZWYgSEFWRV9HVEsyCisvKgorICogVGhpcyBleHRyYSBlZmZvcnQgd291bGRuJ3QgYmUgbmVjZXNzYXJ5IGlmIHdlIG9ubHkgdXNlZCBzdG9jayBpY29ucyBpbiB0aGUKKyAqIHRvb2xiYXIsIGFzIHdlIGRvIGZvciBhbGwgYnVpbHRpbiBpY29ucy4gIEJ1dCB1c2VyLWRlZmluZWQgdG9vbGJhciBpY29ucworICogc2hvdWxkbid0IGJlIHRyZWF0ZWQgZGlmZmVyZW50bHksIHRodXMgd2UgZG8gbmVlZCB0aGlzLgorICovCisgICAgc3RhdGljIHZvaWQKK2ljb25fc2l6ZV9jaGFuZ2VkX2ZvcmVhY2goR3RrV2lkZ2V0ICp3aWRnZXQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBpZiAoR1RLX0lTX0lNQUdFKHdpZGdldCkpCisgICAgeworCUd0a0ltYWdlICppbWFnZSA9IChHdGtJbWFnZSAqKXdpZGdldDsKKworCS8qIFVzZXItZGVmaW5lZCBpY29ucyBhcmUgc3RvcmVkIGluIGEgR3RrSWNvblNldCAqLworCWlmIChndGtfaW1hZ2VfZ2V0X3N0b3JhZ2VfdHlwZShpbWFnZSkgPT0gR1RLX0lNQUdFX0lDT05fU0VUKQorCXsKKwkgICAgR3RrSWNvblNldAkqaWNvbl9zZXQ7CisJICAgIEd0a0ljb25TaXplCWljb25fc2l6ZTsKKworCSAgICBndGtfaW1hZ2VfZ2V0X2ljb25fc2V0KGltYWdlLCAmaWNvbl9zZXQsICZpY29uX3NpemUpOworCSAgICBpY29uX3NpemUgPSAoR3RrSWNvblNpemUpKGxvbmcpdXNlcl9kYXRhOworCisJICAgIGd0a19pY29uX3NldF9yZWYoaWNvbl9zZXQpOworCSAgICBndGtfaW1hZ2Vfc2V0X2Zyb21faWNvbl9zZXQoaW1hZ2UsIGljb25fc2V0LCBpY29uX3NpemUpOworCSAgICBndGtfaWNvbl9zZXRfdW5yZWYoaWNvbl9zZXQpOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAoR1RLX0lTX0NPTlRBSU5FUih3aWRnZXQpKQorICAgIHsKKwlndGtfY29udGFpbmVyX2ZvcmVhY2goKEd0a0NvbnRhaW5lciAqKXdpZGdldCwKKwkJCSAgICAgICZpY29uX3NpemVfY2hhbmdlZF9mb3JlYWNoLAorCQkJICAgICAgdXNlcl9kYXRhKTsKKyAgICB9Cit9CisjIGVuZGlmIC8qIEhBVkVfR1RLMiAqLworCisgICAgc3RhdGljIHZvaWQKK3NldF90b29sYmFyX3N0eWxlKEd0a1Rvb2xiYXIgKnRvb2xiYXIpCit7CisgICAgR3RrVG9vbGJhclN0eWxlIHN0eWxlOworIyBpZmRlZiBIQVZFX0dUSzIKKyAgICBHdGtJY29uU2l6ZQkgICAgc2l6ZTsKKyAgICBHdGtJY29uU2l6ZQkgICAgb2xkc2l6ZTsKKyMgZW5kaWYKKworIyBpZmRlZiBIQVZFX0dUSzIKKyAgICBpZiAoKHRvb2xiYXJfZmxhZ3MgJiAoVE9PTEJBUl9URVhUIHwgVE9PTEJBUl9JQ09OUyB8IFRPT0xCQVJfSE9SSVopKQorCQkgICAgICA9PSAoVE9PTEJBUl9URVhUIHwgVE9PTEJBUl9JQ09OUyB8IFRPT0xCQVJfSE9SSVopKQorCXN0eWxlID0gR1RLX1RPT0xCQVJfQk9USF9IT1JJWjsKKyAgICBlbHNlCisjIGVuZGlmCisgICAgaWYgKCh0b29sYmFyX2ZsYWdzICYgKFRPT0xCQVJfVEVYVCB8IFRPT0xCQVJfSUNPTlMpKQorCQkgICAgICA9PSAoVE9PTEJBUl9URVhUIHwgVE9PTEJBUl9JQ09OUykpCisJc3R5bGUgPSBHVEtfVE9PTEJBUl9CT1RIOworICAgIGVsc2UgaWYgKHRvb2xiYXJfZmxhZ3MgJiBUT09MQkFSX1RFWFQpCisJc3R5bGUgPSBHVEtfVE9PTEJBUl9URVhUOworICAgIGVsc2UKKwlzdHlsZSA9IEdUS19UT09MQkFSX0lDT05TOworCisgICAgZ3RrX3Rvb2xiYXJfc2V0X3N0eWxlKHRvb2xiYXIsIHN0eWxlKTsKKyAgICBndGtfdG9vbGJhcl9zZXRfdG9vbHRpcHModG9vbGJhciwgKHRvb2xiYXJfZmxhZ3MgJiBUT09MQkFSX1RPT0xUSVBTKSAhPSAwKTsKKworIyBpZmRlZiBIQVZFX0dUSzIKKyAgICBzd2l0Y2ggKHRiaXNfZmxhZ3MpCisgICAgeworCWNhc2UgVEJJU19USU5ZOgkgICAgc2l6ZSA9IEdUS19JQ09OX1NJWkVfTUVOVTsJCWJyZWFrOworCWNhc2UgVEJJU19TTUFMTDogICAgc2l6ZSA9IEdUS19JQ09OX1NJWkVfU01BTExfVE9PTEJBUjsJYnJlYWs7CisJY2FzZSBUQklTX01FRElVTTogICBzaXplID0gR1RLX0lDT05fU0laRV9CVVRUT047CWJyZWFrOworCWNhc2UgVEJJU19MQVJHRTogICAgc2l6ZSA9IEdUS19JQ09OX1NJWkVfTEFSR0VfVE9PTEJBUjsJYnJlYWs7CisJZGVmYXVsdDoJICAgIHNpemUgPSBHVEtfSUNPTl9TSVpFX0lOVkFMSUQ7CWJyZWFrOworICAgIH0KKyAgICBvbGRzaXplID0gZ3RrX3Rvb2xiYXJfZ2V0X2ljb25fc2l6ZSh0b29sYmFyKTsKKworICAgIGlmIChzaXplID09IEdUS19JQ09OX1NJWkVfSU5WQUxJRCkKKyAgICB7CisJLyogTGV0IGdsb2JhbCB1c2VyIHByZWZlcmVuY2VzIGRlY2lkZSB0aGUgaWNvbiBzaXplLiAqLworCWd0a190b29sYmFyX3Vuc2V0X2ljb25fc2l6ZSh0b29sYmFyKTsKKwlzaXplID0gZ3RrX3Rvb2xiYXJfZ2V0X2ljb25fc2l6ZSh0b29sYmFyKTsKKyAgICB9CisgICAgaWYgKHNpemUgIT0gb2xkc2l6ZSkKKyAgICB7CisJZ3RrX2NvbnRhaW5lcl9mb3JlYWNoKEdUS19DT05UQUlORVIodG9vbGJhciksCisJCQkgICAgICAmaWNvbl9zaXplX2NoYW5nZWRfZm9yZWFjaCwKKwkJCSAgICAgIEdJTlRfVE9fUE9JTlRFUigoaW50KXNpemUpKTsKKyAgICB9CisgICAgZ3RrX3Rvb2xiYXJfc2V0X2ljb25fc2l6ZSh0b29sYmFyLCBzaXplKTsKKyMgZW5kaWYKK30KKworI2VuZGlmIC8qIEZFQVRfVE9PTEJBUiAqLworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgR1VJLglDcmVhdGUgYWxsIHRoZSB3aW5kb3dzLCBzZXQgdXAgYWxsIHRoZSBjYWxsYmFja3MgZXRjLgorICogUmV0dXJucyBPSyBmb3Igc3VjY2VzcywgRkFJTCB3aGVuIHRoZSBHVUkgY2FuJ3QgYmUgc3RhcnRlZC4KKyAqLworICAgIGludAorZ3VpX21jaF9pbml0KHZvaWQpCit7CisgICAgR3RrV2lkZ2V0ICp2Ym94OworCisjaWZkZWYgRkVBVF9HVUlfR05PTUUKKyAgICAvKiBJbml0aWFsaXplIHRoZSBHTk9NRSBsaWJyYXJpZXMuCWdub21lX3Byb2dyYW1faW5pdCgpL2dub21lX2luaXQoKQorICAgICAqIGV4aXRzIG9uIGZhaWx1cmUsIGJ1dCB0aGF0J3MgYSBub24taXNzdWUgYmVjYXVzZSB3ZSBhbHJlYWR5IGNhbGxlZAorICAgICAqIGd0a19pbml0X2NoZWNrKCkgaW4gZ3VpX21jaF9pbml0X2NoZWNrKCkuICovCisgICAgaWYgKHVzaW5nX2dub21lKQorIyBpZmRlZiBIQVZFX0dUSzIKKwlnbm9tZV9wcm9ncmFtX2luaXQoVklNUEFDS0FHRSwgVklNX1ZFUlNJT05fU0hPUlQsCisJCQkgICBMSUJHTk9NRVVJX01PRFVMRSwgZ3VpX2FyZ2MsIGd1aV9hcmd2LCBOVUxMKTsKKyMgZWxzZQorCWdub21lX2luaXQoVklNUEFDS0FHRSwgVklNX1ZFUlNJT05fU0hPUlQsIGd1aV9hcmdjLCBndWlfYXJndik7CisjIGVuZGlmCisjZW5kaWYKKyAgICB2aW1fZnJlZShndWlfYXJndik7CisgICAgZ3VpX2FyZ3YgPSBOVUxMOworCisjaWZkZWYgSEFWRV9HVEsyCisjIGlmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLDEsMykKKyAgICAvKiBTZXQgdGhlIGh1bWFuLXJlYWRhYmxlIGFwcGxpY2F0aW9uIG5hbWUgKi8KKyAgICBnX3NldF9hcHBsaWNhdGlvbl9uYW1lKCJWaW0iKTsKKyMgZW5kaWYKKyAgICAvKgorICAgICAqIEZvcmNlIFVURi04IG91dHB1dCBubyBtYXR0ZXIgd2hhdCB0aGUgdmFsdWUgb2YgJ2VuY29kaW5nJyBpcy4KKyAgICAgKiBkaWRfc2V0X3N0cmluZ19vcHRpb24oKSBpbiBvcHRpb24uYyBwcm9oaWJpdHMgY2hhbmdpbmcgJ3Rlcm1lbmNvZGluZycKKyAgICAgKiB0byBzb21ldGhpbmcgZWxzZSB0aGFuIFVURi04IGlmIHRoZSBHVUkgaXMgaW4gdXNlLgorICAgICAqLworICAgIHNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJ0ZXJtZW5jb2RpbmciLCAwTCwgKGNoYXJfdSAqKSJ1dGYtOCIsIDApOworCisjIGlmZGVmIEZFQVRfVE9PTEJBUgorICAgIGd1aV9ndGtfcmVnaXN0ZXJfc3RvY2tfaWNvbnMoKTsKKyMgZW5kaWYKKyAgICAvKiBGSVhNRTogTmVlZCB0byBpbnN0YWxsIHRoZSBjbGFzc2ljIGljb25zIGFuZCBhIGd0a3JjLmNsYXNzaWMgZmlsZS4KKyAgICAgKiBUaGUgaGFyZCBwYXJ0IGlzIGRlY2lkaW5nIGluc3RhbGwgbG9jYXRpb25zIGFuZCB0aGUgTWFrZWZpbGUgbWFnaWMuICovCisjIGlmIDAKKyAgICBndGtfcmNfcGFyc2UoImd0a3JjIik7CisjIGVuZGlmCisjZW5kaWYKKworICAgIC8qIEluaXRpYWxpemUgdmFsdWVzICovCisgICAgZ3VpLmJvcmRlcl93aWR0aCA9IDI7CisgICAgZ3VpLnNjcm9sbGJhcl93aWR0aCA9IFNCX0RFRkFVTFRfV0lEVEg7CisgICAgZ3VpLnNjcm9sbGJhcl9oZWlnaHQgPSBTQl9ERUZBVUxUX1dJRFRIOworICAgIGd1aS5mZ2NvbG9yID0gZ19uZXcwKEdka0NvbG9yLCAxKTsKKyAgICBndWkuYmdjb2xvciA9IGdfbmV3MChHZGtDb2xvciwgMSk7CisKKyAgICAvKiBJbml0aWFsaXNlIGF0b21zICovCisjaWZkZWYgRkVBVF9NQllURQorICAgIHV0Zjhfc3RyaW5nX2F0b20gPSBnZGtfYXRvbV9pbnRlcm4oIlVURjhfU1RSSU5HIiwgRkFMU0UpOworI2VuZGlmCisjaWZuZGVmIEhBVkVfR1RLMgorICAgIGNvbXBvdW5kX3RleHRfYXRvbSA9IGdka19hdG9tX2ludGVybigiQ09NUE9VTkRfVEVYVCIsIEZBTFNFKTsKKyAgICB0ZXh0X2F0b20gPSBnZGtfYXRvbV9pbnRlcm4oIlRFWFQiLCBGQUxTRSk7CisjZW5kaWYKKworICAgIC8qIFNldCBkZWZhdWx0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzLiAqLworICAgIGd1aS5ub3JtX3BpeGVsID0gZ3VpLmRlZl9ub3JtX3BpeGVsOworICAgIGd1aS5iYWNrX3BpeGVsID0gZ3VpLmRlZl9iYWNrX3BpeGVsOworCisgICAgaWYgKGd0a19zb2NrZXRfaWQgIT0gMCkKKyAgICB7CisJR3RrV2lkZ2V0ICpwbHVnOworCisJLyogVXNlIEd0a1NvY2tldCBmcm9tIGFub3RoZXIgYXBwLiAqLworI2lmZGVmIEhBVkVfR1RLX01VTFRJSEVBRAorCXBsdWcgPSBndGtfcGx1Z19uZXdfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwKKwkJCQkJZ3RrX3NvY2tldF9pZCk7CisjZWxzZQorCXBsdWcgPSBndGtfcGx1Z19uZXcoZ3RrX3NvY2tldF9pZCk7CisjZW5kaWYKKwlpZiAocGx1ZyAhPSBOVUxMICYmIEdUS19QTFVHKHBsdWcpLT5zb2NrZXRfd2luZG93ICE9IE5VTEwpCisJeworCSAgICBndWkubWFpbndpbiA9IHBsdWc7CisJfQorCWVsc2UKKwl7CisJICAgIGdfd2FybmluZygiQ29ubmVjdGlvbiB0byBHVEsrIHNvY2tldCAoSUQgJXUpIGZhaWxlZCIsCisJCSAgICAgICh1bnNpZ25lZCBpbnQpZ3RrX3NvY2tldF9pZCk7CisJICAgIC8qIFByZXRlbmQgd2UgbmV2ZXIgd2FudGVkIGl0IGlmIGl0IGZhaWxlZCAoZ2V0IG93biB3aW5kb3cpICovCisJICAgIGd0a19zb2NrZXRfaWQgPSAwOworCX0KKyAgICB9CisKKyAgICBpZiAoZ3RrX3NvY2tldF9pZCA9PSAwKQorICAgIHsKKyNpZmRlZiBGRUFUX0dVSV9HTk9NRQorCWlmICh1c2luZ19nbm9tZSkKKwl7CisJICAgIGd1aS5tYWlud2luID0gZ25vbWVfYXBwX25ldygiVmltIiwgTlVMTCk7CisjIGlmZGVmIFVTRV9YU01QCisJICAgIC8qIFVzZSB0aGUgR05PTUUgc2F2ZS15b3Vyc2VsZiBmdW5jdGlvbmFsaXR5IG5vdy4gKi8KKwkgICAgeHNtcF9jbG9zZSgpOworIyBlbmRpZgorCX0KKwllbHNlCisjZW5kaWYKKwkgICAgZ3VpLm1haW53aW4gPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X3NldF9uYW1lKGd1aS5tYWlud2luLCAidmltLW1haW4td2luZG93Iik7CisKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICAvKiBDcmVhdGUgdGhlIFBhbmdvQ29udGV4dCB1c2VkIGZvciBkcmF3aW5nIGFsbCB0ZXh0LiAqLworICAgIGd1aS50ZXh0X2NvbnRleHQgPSBndGtfd2lkZ2V0X2NyZWF0ZV9wYW5nb19jb250ZXh0KGd1aS5tYWlud2luKTsKKyAgICBwYW5nb19jb250ZXh0X3NldF9iYXNlX2RpcihndWkudGV4dF9jb250ZXh0LCBQQU5HT19ESVJFQ1RJT05fTFRSKTsKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfR1RLMgorICAgIGd0a193aW5kb3dfc2V0X3BvbGljeShHVEtfV0lORE9XKGd1aS5tYWlud2luKSwgVFJVRSwgVFJVRSwgVFJVRSk7CisjZW5kaWYKKyAgICBndGtfY29udGFpbmVyX2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGd1aS5tYWlud2luKSwgMCk7CisgICAgZ3RrX3dpZGdldF9hZGRfZXZlbnRzKGd1aS5tYWlud2luLCBHREtfVklTSUJJTElUWV9OT1RJRllfTUFTSyk7CisKKyAgICBndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChndWkubWFpbndpbiksICJkZWxldGVfZXZlbnQiLAorCQkgICAgICAgR1RLX1NJR05BTF9GVU5DKCZkZWxldGVfZXZlbnRfY2IpLCBOVUxMKTsKKworICAgIGd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGd1aS5tYWlud2luKSwgInJlYWxpemUiLAorCQkgICAgICAgR1RLX1NJR05BTF9GVU5DKCZtYWlud2luX3JlYWxpemUpLCBOVUxMKTsKKyNpZmRlZiBIQVZFX0dUS19NVUxUSUhFQUQKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKGd1aS5tYWlud2luKSwgInNjcmVlbl9jaGFuZ2VkIiwKKwkJICAgICBHX0NBTExCQUNLKCZtYWlud2luX3NjcmVlbl9jaGFuZ2VkX2NiKSwgTlVMTCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICBndWkuYWNjZWxfZ3JvdXAgPSBndGtfYWNjZWxfZ3JvdXBfbmV3KCk7CisgICAgZ3RrX3dpbmRvd19hZGRfYWNjZWxfZ3JvdXAoR1RLX1dJTkRPVyhndWkubWFpbndpbiksIGd1aS5hY2NlbF9ncm91cCk7CisjZWxzZQorICAgIGd1aS5hY2NlbF9ncm91cCA9IGd0a19hY2NlbF9ncm91cF9nZXRfZGVmYXVsdCgpOworI2VuZGlmCisKKyAgICB2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTsKKworI2lmZGVmIEZFQVRfR1VJX0dOT01FCisgICAgaWYgKHVzaW5nX2dub21lKQorICAgIHsKKyMgaWYgZGVmaW5lZChIQVZFX0dUSzIpICYmIGRlZmluZWQoRkVBVF9NRU5VKQorCS8qIGF1dG9tYWdpY2FsbHkgcmVzdG9yZSBtZW51YmFyL3Rvb2xiYXIgcGxhY2VtZW50ICovCisJZ25vbWVfYXBwX2VuYWJsZV9sYXlvdXRfY29uZmlnKEdOT01FX0FQUChndWkubWFpbndpbiksIFRSVUUpOworIyBlbmRpZgorCWdub21lX2FwcF9zZXRfY29udGVudHMoR05PTUVfQVBQKGd1aS5tYWlud2luKSwgdmJveCk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGd1aS5tYWlud2luKSwgdmJveCk7CisJZ3RrX3dpZGdldF9zaG93KHZib3gpOworICAgIH0KKworI2lmZGVmIEZFQVRfTUVOVQorICAgIC8qCisgICAgICogQ3JlYXRlIHRoZSBtZW51YmFyIGFuZCBoYW5kbGUKKyAgICAgKi8KKyAgICBndWkubWVudWJhciA9IGd0a19tZW51X2Jhcl9uZXcoKTsKKyAgICBndGtfd2lkZ2V0X3NldF9uYW1lKGd1aS5tZW51YmFyLCAidmltLW1lbnViYXIiKTsKKworIyBpZmRlZiBGRUFUX0dVSV9HTk9NRQorICAgIGlmICh1c2luZ19nbm9tZSkKKyAgICB7CisjICBpZmRlZiBIQVZFX0dUSzIKKwlCb25vYm9Eb2NrSXRlbSAqZG9ja2l0ZW07CisKKwlnbm9tZV9hcHBfc2V0X21lbnVzKEdOT01FX0FQUChndWkubWFpbndpbiksIEdUS19NRU5VX0JBUihndWkubWVudWJhcikpOworCWRvY2tpdGVtID0gZ25vbWVfYXBwX2dldF9kb2NrX2l0ZW1fYnlfbmFtZShHTk9NRV9BUFAoZ3VpLm1haW53aW4pLAorCQkJCQkJICAgR05PTUVfQVBQX01FTlVCQVJfTkFNRSk7CisJZ3VpLm1lbnViYXJfaCA9IEdUS19XSURHRVQoZG9ja2l0ZW0pOworIyAgZWxzZQorCWd1aS5tZW51YmFyX2ggPSBnbm9tZV9kb2NrX2l0ZW1fbmV3KCJWaW1NYWluTWVudSIsCisJCQkJCSAgICBHTk9NRV9ET0NLX0lURU1fQkVIX0VYQ0xVU0lWRSB8CisJCQkJCSAgICBHTk9NRV9ET0NLX0lURU1fQkVIX05FVkVSX1ZFUlRJQ0FMKTsKKwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGd1aS5tZW51YmFyX2gpLCBndWkubWVudWJhcik7CisKKwlnbm9tZV9kb2NrX2FkZF9pdGVtKEdOT01FX0RPQ0soR05PTUVfQVBQKGd1aS5tYWlud2luKS0+ZG9jayksCisJCQkgICAgR05PTUVfRE9DS19JVEVNKGd1aS5tZW51YmFyX2gpLAorCQkJICAgIEdOT01FX0RPQ0tfVE9QLCAvKiBwbGFjZW1lbnQgKi8KKwkJCSAgICAxLAkvKiBiYW5kX251bSAqLworCQkJICAgIDAsCS8qIGJhbmRfcG9zaXRpb24gKi8KKwkJCSAgICAwLAkvKiBvZmZzZXQgKi8KKwkJCSAgICBUUlVFKTsKKwlndGtfd2lkZ2V0X3Nob3coZ3VpLm1lbnViYXIpOworIyAgZW5kaWYKKyAgICB9CisgICAgZWxzZQorIyBlbmRpZgkvKiBGRUFUX0dVSV9HTk9NRSAqLworICAgIHsKKwlpZiAodmltX3N0cmNocihwX2dvLCBHT19NRU5VUykgIT0gTlVMTCkKKwkgICAgZ3RrX3dpZGdldF9zaG93KGd1aS5tZW51YmFyKTsKKwlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgZ3VpLm1lbnViYXIsIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgfQorI2VuZGlmCS8qIEZFQVRfTUVOVSAqLworCisjaWZkZWYgRkVBVF9UT09MQkFSCisgICAgLyoKKyAgICAgKiBDcmVhdGUgdGhlIHRvb2xiYXIgYW5kIGhhbmRsZQorICAgICAqLworIyBpZmRlZiBIQVZFX0dUSzIKKyAgICAvKiBzb21lIGFlc3RoZXRpY3Mgb24gdGhlIHRvb2xiYXIgKi8KKyAgICBndGtfcmNfcGFyc2Vfc3RyaW5nKAorCSAgICAic3R5bGUgXCJ2aW0tdG9vbGJhci1zdHlsZVwiIHtcbiIKKwkgICAgIiAgR3RrVG9vbGJhcjo6YnV0dG9uX3JlbGllZiA9IEdUS19SRUxJRUZfTk9ORVxuIgorCSAgICAifVxuIgorCSAgICAid2lkZ2V0IFwiKi52aW0tdG9vbGJhclwiIHN0eWxlIFwidmltLXRvb2xiYXItc3R5bGVcIlxuIik7CisgICAgZ3VpLnRvb2xiYXIgPSBndGtfdG9vbGJhcl9uZXcoKTsKKyAgICBndGtfd2lkZ2V0X3NldF9uYW1lKGd1aS50b29sYmFyLCAidmltLXRvb2xiYXIiKTsKKyMgZWxzZQorICAgIGd1aS50b29sYmFyID0gZ3RrX3Rvb2xiYXJfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLAorCQkJCSAgR1RLX1RPT0xCQVJfSUNPTlMpOworICAgIGd0a190b29sYmFyX3NldF9idXR0b25fcmVsaWVmKEdUS19UT09MQkFSKGd1aS50b29sYmFyKSwgR1RLX1JFTElFRl9OT05FKTsKKyMgZW5kaWYKKyAgICBzZXRfdG9vbGJhcl9zdHlsZShHVEtfVE9PTEJBUihndWkudG9vbGJhcikpOworCisjIGlmZGVmIEZFQVRfR1VJX0dOT01FCisgICAgaWYgKHVzaW5nX2dub21lKQorICAgIHsKKyMgIGlmZGVmIEhBVkVfR1RLMgorCUJvbm9ib0RvY2tJdGVtICpkb2NraXRlbTsKKworCWdub21lX2FwcF9zZXRfdG9vbGJhcihHTk9NRV9BUFAoZ3VpLm1haW53aW4pLCBHVEtfVE9PTEJBUihndWkudG9vbGJhcikpOworCWRvY2tpdGVtID0gZ25vbWVfYXBwX2dldF9kb2NrX2l0ZW1fYnlfbmFtZShHTk9NRV9BUFAoZ3VpLm1haW53aW4pLAorCQkJCQkJICAgR05PTUVfQVBQX1RPT0xCQVJfTkFNRSk7CisJZ3VpLnRvb2xiYXJfaCA9IEdUS19XSURHRVQoZG9ja2l0ZW0pOworCWd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGd1aS50b29sYmFyKSwgMCk7CisjICBlbHNlCisJR3RrV2lkZ2V0ICpkb2NraXRlbTsKKworCWRvY2tpdGVtID0gZ25vbWVfZG9ja19pdGVtX25ldygiVmltVG9vbEJhciIsCisJCQkJICAgICAgIEdOT01FX0RPQ0tfSVRFTV9CRUhfRVhDTFVTSVZFKTsKKwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGRvY2tpdGVtKSwgR1RLX1dJREdFVChndWkudG9vbGJhcikpOworCWd1aS50b29sYmFyX2ggPSBkb2NraXRlbTsKKworCWdub21lX2RvY2tfYWRkX2l0ZW0oR05PTUVfRE9DSyhHTk9NRV9BUFAoZ3VpLm1haW53aW4pLT5kb2NrKSwKKwkJCSAgICBHTk9NRV9ET0NLX0lURU0oZG9ja2l0ZW0pLAorCQkJICAgIEdOT01FX0RPQ0tfVE9QLAkvKiBwbGFjZW1lbnQgKi8KKwkJCSAgICAxLAkvKiBiYW5kX251bSAqLworCQkJICAgIDEsCS8qIGJhbmRfcG9zaXRpb24gKi8KKwkJCSAgICAwLAkvKiBvZmZzZXQgKi8KKwkJCSAgICBUUlVFKTsKKwlndGtfY29udGFpbmVyX2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGd1aS50b29sYmFyKSwgMik7CisJZ3RrX3dpZGdldF9zaG93KGd1aS50b29sYmFyKTsKKyMgIGVuZGlmCisgICAgfQorICAgIGVsc2UKKyMgZW5kaWYJLyogRkVBVF9HVUlfR05PTUUgKi8KKyAgICB7CisjIGlmbmRlZiBIQVZFX0dUSzIKKwlndGtfY29udGFpbmVyX2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGd1aS50b29sYmFyKSwgMSk7CisjIGVuZGlmCisJaWYgKHZpbV9zdHJjaHIocF9nbywgR09fVE9PTEJBUikgIT0gTlVMTAorCQkmJiAodG9vbGJhcl9mbGFncyAmIChUT09MQkFSX1RFWFQgfCBUT09MQkFSX0lDT05TKSkpCisJICAgIGd0a193aWRnZXRfc2hvdyhndWkudG9vbGJhcik7CisJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGd1aS50b29sYmFyLCBGQUxTRSwgRkFMU0UsIDApOworICAgIH0KKyNlbmRpZiAvKiBGRUFUX1RPT0xCQVIgKi8KKworICAgIGd1aS5mb3Jtd2luID0gZ3RrX2Zvcm1fbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihndWkuZm9ybXdpbiksIDApOworICAgIGd0a193aWRnZXRfc2V0X2V2ZW50cyhndWkuZm9ybXdpbiwgR0RLX0VYUE9TVVJFX01BU0spOworCisgICAgZ3VpLmRyYXdhcmVhID0gZ3RrX2RyYXdpbmdfYXJlYV9uZXcoKTsKKworICAgIC8qIERldGVybWluZSB3aGljaCBldmVudHMgd2Ugd2lsbCBmaWx0ZXIuICovCisgICAgZ3RrX3dpZGdldF9zZXRfZXZlbnRzKGd1aS5kcmF3YXJlYSwKKwkJCSAgR0RLX0VYUE9TVVJFX01BU0sgfAorCQkJICBHREtfRU5URVJfTk9USUZZX01BU0sgfAorCQkJICBHREtfTEVBVkVfTk9USUZZX01BU0sgfAorCQkJICBHREtfQlVUVE9OX1BSRVNTX01BU0sgfAorCQkJICBHREtfQlVUVE9OX1JFTEVBU0VfTUFTSyB8CisjaWZkZWYgSEFWRV9HVEsyCisJCQkgIEdES19TQ1JPTExfTUFTSyB8CisjZW5kaWYKKwkJCSAgR0RLX0tFWV9QUkVTU19NQVNLIHwKKwkJCSAgR0RLX0tFWV9SRUxFQVNFX01BU0sgfAorCQkJICBHREtfUE9JTlRFUl9NT1RJT05fTUFTSyB8CisJCQkgIEdES19QT0lOVEVSX01PVElPTl9ISU5UX01BU0spOworCisgICAgZ3RrX3dpZGdldF9zaG93KGd1aS5kcmF3YXJlYSk7CisgICAgZ3RrX2Zvcm1fcHV0KEdUS19GT1JNKGd1aS5mb3Jtd2luKSwgZ3VpLmRyYXdhcmVhLCAwLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZ3VpLmZvcm13aW4pOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBndWkuZm9ybXdpbiwgVFJVRSwgVFJVRSwgMCk7CisKKyAgICAvKiBGb3IgR3RrU29ja2V0cywga2V5LXByZXNzZXMgbXVzdCBnbyB0byB0aGUgZm9jdXMgd2lkZ2V0IChkcmF3YXJlYSkKKyAgICAgKiBhbmQgbm90IHRoZSB3aW5kb3cuICovCisgICAgZ3RrX3NpZ25hbF9jb25uZWN0KChndGtfc29ja2V0X2lkID09IDApID8gR1RLX09CSkVDVChndWkubWFpbndpbikKKwkJCQkJICAgIDogR1RLX09CSkVDVChndWkuZHJhd2FyZWEpLAorCQkgICAgICAgImtleV9wcmVzc19ldmVudCIsCisJCSAgICAgICBHVEtfU0lHTkFMX0ZVTkMoa2V5X3ByZXNzX2V2ZW50KSwgTlVMTCk7CisjaWYgZGVmaW5lZChGRUFUX1hJTSkgJiYgZGVmaW5lZChIQVZFX0dUSzIpCisgICAgLyogQWxzbyBmb3J3YXJkIGtleSByZWxlYXNlIGV2ZW50cyBmb3IgdGhlIGJlbmVmaXQgb2YgR1RLKyAyIGlucHV0CisgICAgICogbW9kdWxlcy4gIFRyeSBDVFJMLVNISUZULXhkaWdpdHMgdG8gZW50ZXIgYSBVbmljb2RlIGNvZGUgcG9pbnQuICovCisgICAgZ19zaWduYWxfY29ubmVjdCgoZ3RrX3NvY2tldF9pZCA9PSAwKSA/IEdfT0JKRUNUKGd1aS5tYWlud2luKQorCQkJCQkgIDogR19PQkpFQ1QoZ3VpLmRyYXdhcmVhKSwKKwkJICAgICAia2V5X3JlbGVhc2VfZXZlbnQiLAorCQkgICAgIEdfQ0FMTEJBQ0soJmtleV9yZWxlYXNlX2V2ZW50KSwgTlVMTCk7CisjZW5kaWYKKyAgICBndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChndWkuZHJhd2FyZWEpLCAicmVhbGl6ZSIsCisJCSAgICAgICBHVEtfU0lHTkFMX0ZVTkMoZHJhd2FyZWFfcmVhbGl6ZV9jYiksIE5VTEwpOworICAgIGd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGd1aS5kcmF3YXJlYSksICJ1bnJlYWxpemUiLAorCQkgICAgICAgR1RLX1NJR05BTF9GVU5DKGRyYXdhcmVhX3VucmVhbGl6ZV9jYiksIE5VTEwpOworCisgICAgZ3RrX3NpZ25hbF9jb25uZWN0X2FmdGVyKEdUS19PQkpFQ1QoZ3VpLmRyYXdhcmVhKSwgInN0eWxlX3NldCIsCisJCQkgICAgIEdUS19TSUdOQUxfRlVOQygmZHJhd2FyZWFfc3R5bGVfc2V0X2NiKSwgTlVMTCk7CisKKyAgICBndWkudmlzaWJpbGl0eSA9IEdES19WSVNJQklMSVRZX1VOT0JTQ1VSRUQ7CisKKyNpZiAhKGRlZmluZWQoRkVBVF9HVUlfR05PTUUpICYmIGRlZmluZWQoRkVBVF9TRVNTSU9OKSkKKyAgICB3bV9wcm90b2NvbHNfYXRvbSA9IGdka19hdG9tX2ludGVybigiV01fUFJPVE9DT0xTIiwgRkFMU0UpOworICAgIHNhdmVfeW91cnNlbGZfYXRvbSA9IGdka19hdG9tX2ludGVybigiV01fU0FWRV9ZT1VSU0VMRiIsIEZBTFNFKTsKKyNlbmRpZgorCisgICAgaWYgKGd0a19zb2NrZXRfaWQgIT0gMCkKKwkvKiBtYWtlIHN1cmUga2V5Ym9yZCBpbnB1dCBjYW4gZ28gdG8gdGhlIGRyYXdhcmVhICovCisJR1RLX1dJREdFVF9TRVRfRkxBR1MoZ3VpLmRyYXdhcmVhLCBHVEtfQ0FOX0ZPQ1VTKTsKKworICAgIC8qCisgICAgICogU2V0IGNsaXBib2FyZCBzcGVjaWZpYyBhdG9tcworICAgICAqLworICAgIHZpbV9hdG9tID0gZ2RrX2F0b21faW50ZXJuKFZJTV9BVE9NX05BTUUsIEZBTFNFKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgdmltZW5jX2F0b20gPSBnZGtfYXRvbV9pbnRlcm4oVklNRU5DX0FUT01fTkFNRSwgRkFMU0UpOworI2VuZGlmCisgICAgY2xpcF9zdGFyLmd0a19zZWxfYXRvbSA9IEdES19TRUxFQ1RJT05fUFJJTUFSWTsKKyAgICBjbGlwX3BsdXMuZ3RrX3NlbF9hdG9tID0gZ2RrX2F0b21faW50ZXJuKCJDTElQQk9BUkQiLCBGQUxTRSk7CisKKyAgICAvKgorICAgICAqIFN0YXJ0IG91dCBieSBhZGRpbmcgdGhlIGNvbmZpZ3VyZWQgYm9yZGVyIHdpZHRoIGludG8gdGhlIGJvcmRlciBvZmZzZXQuCisgICAgICovCisgICAgZ3VpLmJvcmRlcl9vZmZzZXQgPSBndWkuYm9yZGVyX3dpZHRoOworCisgICAgZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoZ3VpLm1haW53aW4pLCAidmlzaWJpbGl0eV9ub3RpZnlfZXZlbnQiLAorCQkgICAgICAgR1RLX1NJR05BTF9GVU5DKHZpc2liaWxpdHlfZXZlbnQpLCBOVUxMKTsKKyAgICBndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChndWkuZHJhd2FyZWEpLCAiZXhwb3NlX2V2ZW50IiwKKwkJICAgICAgIEdUS19TSUdOQUxfRlVOQyhleHBvc2VfZXZlbnQpLCBOVUxMKTsKKworICAgIC8qCisgICAgICogT25seSBpbnN0YWxsIHRoZXNlIGVudGVyL2xlYXZlIGNhbGxiYWNrcyB3aGVuICdwJyBpbiAnZ3Vpb3B0aW9ucycuCisgICAgICogT25seSBuZWVkZWQgZm9yIHNvbWUgd2luZG93IG1hbmFnZXJzLgorICAgICAqLworICAgIGlmICh2aW1fc3RyY2hyKHBfZ28sIEdPX1BPSU5URVIpICE9IE5VTEwpCisgICAgeworCWd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGd1aS5kcmF3YXJlYSksICJsZWF2ZV9ub3RpZnlfZXZlbnQiLAorCQkJICAgR1RLX1NJR05BTF9GVU5DKGxlYXZlX25vdGlmeV9ldmVudCksIE5VTEwpOworCWd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGd1aS5kcmF3YXJlYSksICJlbnRlcl9ub3RpZnlfZXZlbnQiLAorCQkJICAgR1RLX1NJR05BTF9GVU5DKGVudGVyX25vdGlmeV9ldmVudCksIE5VTEwpOworICAgIH0KKworICAgIGd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGd1aS5tYWlud2luKSwgImZvY3VzX291dF9ldmVudCIsCisJCQkgICBHVEtfU0lHTkFMX0ZVTkMoZm9jdXNfb3V0X2V2ZW50KSwgTlVMTCk7CisgICAgZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoZ3VpLm1haW53aW4pLCAiZm9jdXNfaW5fZXZlbnQiLAorCQkJICAgR1RLX1NJR05BTF9GVU5DKGZvY3VzX2luX2V2ZW50KSwgTlVMTCk7CisKKyAgICBndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChndWkuZHJhd2FyZWEpLCAibW90aW9uX25vdGlmeV9ldmVudCIsCisJCSAgICAgICBHVEtfU0lHTkFMX0ZVTkMobW90aW9uX25vdGlmeV9ldmVudCksIE5VTEwpOworICAgIGd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGd1aS5kcmF3YXJlYSksICJidXR0b25fcHJlc3NfZXZlbnQiLAorCQkgICAgICAgR1RLX1NJR05BTF9GVU5DKGJ1dHRvbl9wcmVzc19ldmVudCksIE5VTEwpOworICAgIGd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGd1aS5kcmF3YXJlYSksICJidXR0b25fcmVsZWFzZV9ldmVudCIsCisJCSAgICAgICBHVEtfU0lHTkFMX0ZVTkMoYnV0dG9uX3JlbGVhc2VfZXZlbnQpLCBOVUxMKTsKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKGd1aS5kcmF3YXJlYSksICJzY3JvbGxfZXZlbnQiLAorCQkgICAgIEdfQ0FMTEJBQ0soJnNjcm9sbF9ldmVudCksIE5VTEwpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEFkZCBzZWxlY3Rpb24gaGFuZGxlciBmdW5jdGlvbnMuCisgICAgICovCisgICAgZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoZ3VpLmRyYXdhcmVhKSwgInNlbGVjdGlvbl9jbGVhcl9ldmVudCIsCisJCSAgICAgICBHVEtfU0lHTkFMX0ZVTkMoc2VsZWN0aW9uX2NsZWFyX2V2ZW50KSwgTlVMTCk7CisgICAgZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoZ3VpLmRyYXdhcmVhKSwgInNlbGVjdGlvbl9yZWNlaXZlZCIsCisJCSAgICAgICBHVEtfU0lHTkFMX0ZVTkMoc2VsZWN0aW9uX3JlY2VpdmVkX2NiKSwgTlVMTCk7CisKKyAgICAvKgorICAgICAqIEFkZCBzZWxlY3Rpb24gdGFyZ2V0cyBmb3IgUFJJTUFSWSBhbmQgQ0xJUEJPQVJEIHNlbGVjdGlvbnMuCisgICAgICovCisgICAgZ3RrX3NlbGVjdGlvbl9hZGRfdGFyZ2V0cyhndWkuZHJhd2FyZWEsCisJCQkgICAgICAoR2RrQXRvbSlHREtfU0VMRUNUSU9OX1BSSU1BUlksCisJCQkgICAgICBzZWxlY3Rpb25fdGFyZ2V0cywgTl9TRUxFQ1RJT05fVEFSR0VUUyk7CisgICAgZ3RrX3NlbGVjdGlvbl9hZGRfdGFyZ2V0cyhndWkuZHJhd2FyZWEsCisJCQkgICAgICAoR2RrQXRvbSljbGlwX3BsdXMuZ3RrX3NlbF9hdG9tLAorCQkJICAgICAgc2VsZWN0aW9uX3RhcmdldHMsIE5fU0VMRUNUSU9OX1RBUkdFVFMpOworCisgICAgZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoZ3VpLmRyYXdhcmVhKSwgInNlbGVjdGlvbl9nZXQiLAorCQkgICAgICAgR1RLX1NJR05BTF9GVU5DKHNlbGVjdGlvbl9nZXRfY2IpLCBOVUxMKTsKKworICAgIC8qIFByZXRlbmQgd2UgZG9uJ3QgaGF2ZSBpbnB1dCBmb2N1cywgd2Ugd2lsbCBnZXQgYW4gZXZlbnQgaWYgd2UgZG8uICovCisgICAgZ3VpLmluX2ZvY3VzID0gRkFMU0U7CisKKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKyAgICBpZiAodXNpbmdOZXRiZWFucykKKwluZXRiZWFuc19ndGtfY29ubmVjdCgpOworIyBlbmRpZgorCisgICAgcmV0dXJuIE9LOworfQorCisjaWYgKGRlZmluZWQoRkVBVF9HVUlfR05PTUUpICYmIGRlZmluZWQoRkVBVF9TRVNTSU9OKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGd1aV9zdGFydCgpIGFmdGVyIGEgZm9yaygpIGhhcyBiZWVuIGRvbmUuCisgKiBXZSBoYXZlIHRvIHRlbGwgdGhlIHNlc3Npb24gbWFuYWdlciBvdXIgbmV3IFBJRC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZm9ya2VkKHZvaWQpCit7CisgICAgaWYgKHVzaW5nX2dub21lKQorICAgIHsKKwlHbm9tZUNsaWVudCAqY2xpZW50OworCisJY2xpZW50ID0gZ25vbWVfbWFzdGVyX2NsaWVudCgpOworCisJaWYgKGNsaWVudCAhPSBOVUxMKQorCSAgICBnbm9tZV9jbGllbnRfc2V0X3Byb2Nlc3NfaWQoY2xpZW50LCBnZXRwaWQoKSk7CisgICAgfQorfQorI2VuZGlmIC8qIEZFQVRfR1VJX0dOT01FICYmIEZFQVRfU0VTU0lPTiAqLworCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvciBoYXMgYmVlbiBjaGFuZ2VkLgorICogVGhpcyB1c2VkIHRvIGNoYW5nZSB0aGUgZ3JhcGhpY3MgY29udGV4dHMgZGlyZWN0bHkgYnV0IHdlIGFyZQorICogY3VycmVudGx5IG1hbmlwdWxhdGluZyB0aGVtIHdoZXJlIGRlc2lyZWQuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX25ld19jb2xvcnModm9pZCkKK3sKKyAgICBpZiAoZ3VpLmRyYXdhcmVhICE9IE5VTEwgJiYgZ3VpLmRyYXdhcmVhLT53aW5kb3cgIT0gTlVMTCkKKyAgICB7CisJR2RrQ29sb3IgY29sb3IgPSB7IDAsIDAsIDAsIDAgfTsKKworCWNvbG9yLnBpeGVsID0gZ3VpLmJhY2tfcGl4ZWw7CisJZ2RrX3dpbmRvd19zZXRfYmFja2dyb3VuZChndWkuZHJhd2FyZWEtPndpbmRvdywgJmNvbG9yKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTUVOVSkgfHwgZGVmaW5lZChGRUFUX1RPT0xCQVIpCisgICAgc3RhdGljIGludAorZ2V0X2l0ZW1fZGltZW5zaW9ucyhHdGtXaWRnZXQgKndpZGdldCwgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgR3RrT3JpZW50YXRpb24gaXRlbV9vcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMOworCisjaWZkZWYgRkVBVF9HVUlfR05PTUUKKyAgICBpZiAodXNpbmdfZ25vbWUgJiYgd2lkZ2V0ICE9IE5VTEwpCisgICAgeworIyBpZmRlZiBIQVZFX0dUSzIKKwlCb25vYm9Eb2NrSXRlbSAqZG9ja2l0ZW07CisKKwl3aWRnZXQJID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KHdpZGdldCk7CisJZG9ja2l0ZW0gPSBCT05PQk9fRE9DS19JVEVNKHdpZGdldCk7CisKKwlpZiAoZG9ja2l0ZW0gPT0gTlVMTCB8fCBkb2NraXRlbS0+aXNfZmxvYXRpbmcpCisJICAgIHJldHVybiAwOworCWl0ZW1fb3JpZW50YXRpb24gPSBib25vYm9fZG9ja19pdGVtX2dldF9vcmllbnRhdGlvbihkb2NraXRlbSk7CisjIGVsc2UKKwlHbm9tZURvY2tJdGVtICpkb2NraXRlbTsKKworCXdpZGdldAkgPSB3aWRnZXQtPnBhcmVudDsKKwlkb2NraXRlbSA9IEdOT01FX0RPQ0tfSVRFTSh3aWRnZXQpOworCisJaWYgKGRvY2tpdGVtID09IE5VTEwgfHwgZG9ja2l0ZW0tPmlzX2Zsb2F0aW5nKQorCSAgICByZXR1cm4gMDsKKwlpdGVtX29yaWVudGF0aW9uID0gZ25vbWVfZG9ja19pdGVtX2dldF9vcmllbnRhdGlvbihkb2NraXRlbSk7CisjIGVuZGlmCisgICAgfQorI2VuZGlmCisgICAgaWYgKHdpZGdldCAhPSBOVUxMCisJICAgICYmIGl0ZW1fb3JpZW50YXRpb24gPT0gb3JpZW50YXRpb24KKwkgICAgJiYgR1RLX1dJREdFVF9SRUFMSVpFRCh3aWRnZXQpCisJICAgICYmIEdUS19XSURHRVRfVklTSUJMRSh3aWRnZXQpKQorICAgIHsKKwlpZiAob3JpZW50YXRpb24gPT0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpCisJICAgIHJldHVybiB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0OworCWVsc2UKKwkgICAgcmV0dXJuIHdpZGdldC0+YWxsb2NhdGlvbi53aWR0aDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworICAgIHN0YXRpYyBpbnQKK2dldF9tZW51X3Rvb2xfd2lkdGgodm9pZCkKK3sKKyAgICBpbnQgd2lkdGggPSAwOworCisjaWZkZWYgRkVBVF9HVUlfR05PTUUgLyogdGhlc2UgYXJlIG5ldmVyIHZlcnRpY2FsIHdpdGhvdXQgR05PTUUgKi8KKyMgaWZkZWYgRkVBVF9NRU5VCisgICAgd2lkdGggKz0gZ2V0X2l0ZW1fZGltZW5zaW9ucyhndWkubWVudWJhciwgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMKTsKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9UT09MQkFSCisgICAgd2lkdGggKz0gZ2V0X2l0ZW1fZGltZW5zaW9ucyhndWkudG9vbGJhciwgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMKTsKKyMgZW5kaWYKKyNlbmRpZgorCisgICAgcmV0dXJuIHdpZHRoOworfQorCisgICAgc3RhdGljIGludAorZ2V0X21lbnVfdG9vbF9oZWlnaHQodm9pZCkKK3sKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKworI2lmZGVmIEZFQVRfTUVOVQorICAgIGhlaWdodCArPSBnZXRfaXRlbV9kaW1lbnNpb25zKGd1aS5tZW51YmFyLCBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICBoZWlnaHQgKz0gZ2V0X2l0ZW1fZGltZW5zaW9ucyhndWkudG9vbGJhciwgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpOworI2VuZGlmCisKKyAgICByZXR1cm4gaGVpZ2h0OworfQorCisgICAgc3RhdGljIHZvaWQKK3VwZGF0ZV93aW5kb3dfbWFuYWdlcl9oaW50cyh2b2lkKQoreworICAgIHN0YXRpYyBpbnQgb2xkX3dpZHRoICA9IDA7CisgICAgc3RhdGljIGludCBvbGRfaGVpZ2h0ID0gMDsKKyAgICBzdGF0aWMgaW50IG9sZF9jaGFyX3dpZHRoICA9IDA7CisgICAgc3RhdGljIGludCBvbGRfY2hhcl9oZWlnaHQgPSAwOworCisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICAvKiBUaGlzIGFsc28gbmVlZHMgdG8gYmUgZG9uZSB3aGVuIHRoZSBtYWluIHdpbmRvdyBpc24ndCB0aGVyZSB5ZXQsCisgICAgICogb3RoZXJ3aXNlIHRoZSBoaW50cyBkb24ndCB3b3JrLiAqLworICAgIHdpZHRoICA9IGd1aV9nZXRfYmFzZV93aWR0aCgpOworICAgIGhlaWdodCA9IGd1aV9nZXRfYmFzZV9oZWlnaHQoKTsKKyMgaWZkZWYgSEFWRV9HVEsyCisgICAgd2lkdGggICs9IGdldF9tZW51X3Rvb2xfd2lkdGgoKTsKKyAgICBoZWlnaHQgKz0gZ2V0X21lbnVfdG9vbF9oZWlnaHQoKTsKKyMgZW5kaWYKKworICAgIC8qIEF2b2lkIGFuIGV4cG9zZSBldmVudCB3aGVuIHRoZSBzaXplIGRpZG4ndCBjaGFuZ2UuICovCisgICAgaWYgKHdpZHRoICE9IG9sZF93aWR0aAorCSAgICB8fCBoZWlnaHQgIT0gb2xkX2hlaWdodAorCSAgICB8fCBndWkuY2hhcl93aWR0aCAhPSBvbGRfY2hhcl93aWR0aAorCSAgICB8fCBndWkuY2hhcl9oZWlnaHQgIT0gb2xkX2NoYXJfaGVpZ2h0KQorICAgIHsKKwlHZGtHZW9tZXRyeQlnZW9tZXRyeTsKKwlHZGtXaW5kb3dIaW50cwlnZW9tZXRyeV9tYXNrOworCisJZ2VvbWV0cnkud2lkdGhfaW5jICAgPSBndWkuY2hhcl93aWR0aDsKKwlnZW9tZXRyeS5oZWlnaHRfaW5jICA9IGd1aS5jaGFyX2hlaWdodDsKKwlnZW9tZXRyeS5iYXNlX3dpZHRoICA9IHdpZHRoOworCWdlb21ldHJ5LmJhc2VfaGVpZ2h0ID0gaGVpZ2h0OworCWdlb21ldHJ5Lm1pbl93aWR0aCAgID0gd2lkdGggICsgTUlOX0NPTFVNTlMgKiBndWkuY2hhcl93aWR0aDsKKwlnZW9tZXRyeS5taW5faGVpZ2h0ICA9IGhlaWdodCArIE1JTl9MSU5FUyAgICogZ3VpLmNoYXJfaGVpZ2h0OworCWdlb21ldHJ5X21hc2sJICAgICA9IEdES19ISU5UX0JBU0VfU0laRXxHREtfSElOVF9SRVNJWkVfSU5DCisJCQkgICAgICAgfEdES19ISU5UX01JTl9TSVpFOworIyBpZmRlZiBIQVZFX0dUSzIKKwkvKiBVc2luZyBndWkuZm9ybXdpbiBhcyBnZW9tZXRyeSB3aWRnZXQgZG9lc24ndCB3b3JrIGFzIGV4cGVjdGVkCisJICogd2l0aCBHVEsrIDIgLS0gZHVubm8gd2h5LiAgUHJlc3VtYWJseSBhbGwgdGhlIHJlc2l6aW5nIGhhY2tzCisJICogaW4gVmltIGNvbmZ1c2UgR1RLKy4gKi8KKwlndGtfd2luZG93X3NldF9nZW9tZXRyeV9oaW50cyhHVEtfV0lORE9XKGd1aS5tYWlud2luKSwgZ3VpLm1haW53aW4sCisJCQkJICAgICAgJmdlb21ldHJ5LCBnZW9tZXRyeV9tYXNrKTsKKyMgZWxzZQorCWd0a193aW5kb3dfc2V0X2dlb21ldHJ5X2hpbnRzKEdUS19XSU5ET1coZ3VpLm1haW53aW4pLCBndWkuZm9ybXdpbiwKKwkJCQkgICAgICAmZ2VvbWV0cnksIGdlb21ldHJ5X21hc2spOworIyBlbmRpZgorCW9sZF93aWR0aCAgPSB3aWR0aDsKKwlvbGRfaGVpZ2h0ID0gaGVpZ2h0OworCW9sZF9jaGFyX3dpZHRoCT0gZ3VpLmNoYXJfd2lkdGg7CisJb2xkX2NoYXJfaGVpZ2h0ID0gZ3VpLmNoYXJfaGVpZ2h0OworICAgIH0KK30KKworLyoKKyAqIFRoaXMgc2lnbmFsIGluZm9ybXMgdXMgYWJvdXQgdGhlIG5lZWQgdG8gcmVhcnJhbmdlIG91ciBzdWItd2lkZ2V0cy4KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIGdpbnQKK2Zvcm1fY29uZmlndXJlX2V2ZW50KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudENvbmZpZ3VyZSAqZXZlbnQsCisJCSAgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBndGtfZm9ybV9mcmVlemUoR1RLX0ZPUk0oZ3VpLmZvcm13aW4pKTsKKyAgICBndWlfcmVzaXplX3NoZWxsKGV2ZW50LT53aWR0aCwgZXZlbnQtPmhlaWdodCk7CisgICAgZ3RrX2Zvcm1fdGhhdyhHVEtfRk9STShndWkuZm9ybXdpbikpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB3aW5kb3cgYWxyZWFkeSBjbG9zZWQuCisgKiBXZSBjYW4ndCBkbyBtdWNoIG1vcmUgaGVyZSB0aGFuIHRvIHRyeWluZyB0byBwcmVzZXJ2ZSB3aGF0IGhhZCBiZWVuIGRvbmUsCisgKiBzaW5jZSB0aGUgd2luZG93IGlzIGFscmVhZHkgaW5ldml0YWJseSBnb2luZyBhd2F5LgorICovCisvKkFSR1NVU0VEMCovCisgICAgc3RhdGljIHZvaWQKK21haW53aW5fZGVzdHJveV9jYihHdGtPYmplY3QgKm9iamVjdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvKiBEb24ndCB3cml0ZSBtZXNzYWdlcyB0byB0aGUgR1VJIGFueW1vcmUgKi8KKyAgICBmdWxsX3NjcmVlbiA9IEZBTFNFOworCisgICAgZ3VpLm1haW53aW4gID0gTlVMTDsKKyAgICBndWkuZHJhd2FyZWEgPSBOVUxMOworCisgICAgaWYgKCFleGl0aW5nKSAvKiBvbmx5IGRvIGFueXRoaW5nIGlmIHRoZSBkZXN0cm95IHdhcyB1bmV4cGVjdGVkICovCisgICAgeworCVNUUk5DUFkoSU9idWZmLCBfKCJWaW06IE1haW4gd2luZG93IHVuZXhwZWN0ZWRseSBkZXN0cm95ZWRcbiIpLAorCQlJT1NJWkUpOworCUlPYnVmZltJT1NJWkUgLSAxXSA9IE5VTDsKKwlwcmVzZXJ2ZV9leGl0KCk7CisgICAgfQorfQorCisvKgorICogT3BlbiB0aGUgR1VJIHdpbmRvdyB3aGljaCB3YXMgY3JlYXRlZCBieSBhIGNhbGwgdG8gZ3VpX21jaF9pbml0KCkuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfb3Blbih2b2lkKQoreworICAgIGd1aWNvbG9yX1QgZmdfcGl4ZWwgPSBJTlZBTENPTE9SOworICAgIGd1aWNvbG9yX1QgYmdfcGl4ZWwgPSBJTlZBTENPTE9SOworCisjaWZkZWYgSEFWRV9HVEsyCisgICAgLyoKKyAgICAgKiBBbGxvdyBzZXR0aW5nIGEgd2luZG93IHJvbGUgb24gdGhlIGNvbW1hbmQgbGluZSwgb3IgaW52ZW50IG9uZQorICAgICAqIGlmIG5vbmUgd2FzIHNwZWNpZmllZC4gIFRoaXMgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgR05PTUUgc2Vzc2lvbgorICAgICAqIHN1cHBvcnQ7IGFsbG93aW5nIHRoZSBXTSB0byByZXN0b3JlIHdpbmRvdyBwbGFjZW1lbnQuCisgICAgICovCisgICAgaWYgKHJvbGVfYXJndW1lbnQgIT0gTlVMTCkKKyAgICB7CisJZ3RrX3dpbmRvd19zZXRfcm9sZShHVEtfV0lORE9XKGd1aS5tYWlud2luKSwgcm9sZV9hcmd1bWVudCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY2hhciAqcm9sZTsKKworCS8qIEludmVudCBhIHVuaXF1ZS1lbm91Z2ggSUQgc3RyaW5nIGZvciB0aGUgcm9sZSAqLworCXJvbGUgPSBnX3N0cmR1cF9wcmludGYoInZpbS0ldS0ldS0ldSIsCisJCQkgICAgICAgKHVuc2lnbmVkKW1jaF9nZXRfcGlkKCksCisJCQkgICAgICAgKHVuc2lnbmVkKWdfcmFuZG9tX2ludCgpLAorCQkJICAgICAgICh1bnNpZ25lZCl0aW1lKE5VTEwpKTsKKworCWd0a193aW5kb3dfc2V0X3JvbGUoR1RLX1dJTkRPVyhndWkubWFpbndpbiksIHJvbGUpOworCWdfZnJlZShyb2xlKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChndWlfd2luX3ggIT0gLTEgJiYgZ3VpX3dpbl95ICE9IC0xKQorI2lmZGVmIEhBVkVfR1RLMgorCWd0a193aW5kb3dfbW92ZShHVEtfV0lORE9XKGd1aS5tYWlud2luKSwgZ3VpX3dpbl94LCBndWlfd2luX3kpOworI2Vsc2UKKwlndGtfd2lkZ2V0X3NldF91cG9zaXRpb24oZ3VpLm1haW53aW4sIGd1aV93aW5feCwgZ3VpX3dpbl95KTsKKyNlbmRpZgorCisgICAgLyogRGV0ZXJtaW5lIHVzZXIgc3BlY2lmaWVkIGdlb21ldHJ5LCBpZiBwcmVzZW50LiAqLworICAgIGlmIChndWkuZ2VvbSAhPSBOVUxMKQorICAgIHsKKwlpbnQJCW1hc2s7CisJdW5zaWduZWQgaW50CXcsIGg7CisJaW50CQl4ID0gMDsKKwlpbnQJCXkgPSAwOworCisJbWFzayA9IFhQYXJzZUdlb21ldHJ5KChjaGFyICopZ3VpLmdlb20sICZ4LCAmeSwgJncsICZoKTsKKworCWlmIChtYXNrICYgV2lkdGhWYWx1ZSkKKwkgICAgQ29sdW1ucyA9IHc7CisJaWYgKG1hc2sgJiBIZWlnaHRWYWx1ZSkKKwkgICAgUm93cyA9IGg7CisJaWYgKG1hc2sgJiAoWFZhbHVlIHwgWVZhbHVlKSkKKyNpZmRlZiBIQVZFX0dUSzIKKwkgICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5ET1coZ3VpLm1haW53aW4pLCB4LCB5KTsKKyNlbHNlCisJICAgIGd0a193aWRnZXRfc2V0X3Vwb3NpdGlvbihndWkubWFpbndpbiwgeCwgeSk7CisjZW5kaWYKKwl2aW1fZnJlZShndWkuZ2VvbSk7CisJZ3VpLmdlb20gPSBOVUxMOworICAgIH0KKworICAgIGd0a19mb3JtX3NldF9zaXplKEdUS19GT1JNKGd1aS5mb3Jtd2luKSwKKwkgICAgKGd1aW50KShndWlfZ2V0X2Jhc2Vfd2lkdGgoKSArIENvbHVtbnMgKiBndWkuY2hhcl93aWR0aCksCisJICAgIChndWludCkoZ3VpX2dldF9iYXNlX2hlaWdodCgpICsgUm93cyAqIGd1aS5jaGFyX2hlaWdodCkpOworICAgIHVwZGF0ZV93aW5kb3dfbWFuYWdlcl9oaW50cygpOworCisgICAgaWYgKGZvcmVncm91bmRfYXJndW1lbnQgIT0gTlVMTCkKKwlmZ19waXhlbCA9IGd1aV9nZXRfY29sb3IoKGNoYXJfdSAqKWZvcmVncm91bmRfYXJndW1lbnQpOworICAgIGlmIChmZ19waXhlbCA9PSBJTlZBTENPTE9SKQorCWZnX3BpeGVsID0gZ3VpX2dldF9jb2xvcigoY2hhcl91ICopIkJsYWNrIik7CisKKyAgICBpZiAoYmFja2dyb3VuZF9hcmd1bWVudCAhPSBOVUxMKQorCWJnX3BpeGVsID0gZ3VpX2dldF9jb2xvcigoY2hhcl91ICopYmFja2dyb3VuZF9hcmd1bWVudCk7CisgICAgaWYgKGJnX3BpeGVsID09IElOVkFMQ09MT1IpCisJYmdfcGl4ZWwgPSBndWlfZ2V0X2NvbG9yKChjaGFyX3UgKikiV2hpdGUiKTsKKworICAgIGlmIChmb3VuZF9yZXZlcnNlX2FyZykKKyAgICB7CisJZ3VpLmRlZl9ub3JtX3BpeGVsID0gYmdfcGl4ZWw7CisJZ3VpLmRlZl9iYWNrX3BpeGVsID0gZmdfcGl4ZWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZ3VpLmRlZl9ub3JtX3BpeGVsID0gZmdfcGl4ZWw7CisJZ3VpLmRlZl9iYWNrX3BpeGVsID0gYmdfcGl4ZWw7CisgICAgfQorCisgICAgLyogR2V0IHRoZSBjb2xvcnMgZnJvbSB0aGUgIk5vcm1hbCIgYW5kICJNZW51IiBncm91cCAoc2V0IGluIHN5bnRheC5jIG9yCisgICAgICogaW4gYSB2aW1yYyBmaWxlKSAqLworICAgIHNldF9ub3JtYWxfY29sb3JzKCk7CisKKyAgICAvKiBDaGVjayB0aGF0IG5vbmUgb2YgdGhlIGNvbG9ycyBhcmUgdGhlIHNhbWUgYXMgdGhlIGJhY2tncm91bmQgY29sb3IgKi8KKyAgICBndWlfY2hlY2tfY29sb3JzKCk7CisKKyAgICAvKiBHZXQgdGhlIGNvbG9ycyBmb3IgdGhlIGhpZ2hsaWdodCBncm91cHMgKGd1aV9jaGVja19jb2xvcnMoKSBtaWdodCBoYXZlCisgICAgICogY2hhbmdlZCB0aGVtKS4gKi8KKyAgICBoaWdobGlnaHRfZ3VpX3N0YXJ0ZWQoKTsJLyogcmUtaW5pdCBjb2xvcnMgYW5kIGZvbnRzICovCisKKyAgICBndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChndWkubWFpbndpbiksICJkZXN0cm95IiwKKwkJICAgICAgIEdUS19TSUdOQUxfRlVOQyhtYWlud2luX2Rlc3Ryb3lfY2IpLCBOVUxMKTsKKworI2lmZGVmIEZFQVRfSEFOR1VMSU4KKyAgICBoYW5ndWxfa2V5Ym9hcmRfc2V0KCk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogTm90aWZ5IHRoZSBmaXhlZCBhcmVhIGFib3V0IHRoZSBuZWVkIHRvIHJlc2l6ZSB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICogZ3VpLmZvcm13aW4sIHdoaWNoIHdlIHVzZSBmb3IgcmFuZG9tIHBvc2l0aW9uaW5nIG9mIHRoZSBpbmNsdWRlZAorICAgICAqIGNvbXBvbmVudHMuCisgICAgICoKKyAgICAgKiBXZSBjb25uZWN0IHRoaXMgc2lnbmFsIGRlZmVycmVkIGZpbmFsbHkgYWZ0ZXIgYW55dGhpbmcgaXMgaW4gcGxhY2UsCisgICAgICogc2luY2UgdGhpcyBpcyBpbnRlbmRlZCB0byBoYW5kbGUgcmVzaXplbWVudHMgY29taW5nIGZyb20gdGhlIHdpbmRvdworICAgICAqIG1hbmFnZXIgdXBvbiB1cyBhbmQgc2hvdWxkIG5vdCBpbnRlcmZlcmUgd2l0aCB3aGF0IFZJTSBpcyByZXF1ZXN0aW5nCisgICAgICogdXBvbiBzdGFydHVwLgorICAgICAqLworICAgIGd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGd1aS5mb3Jtd2luKSwgImNvbmZpZ3VyZV9ldmVudCIsCisJCSAgICAgICBHVEtfU0lHTkFMX0ZVTkMoZm9ybV9jb25maWd1cmVfZXZlbnQpLCBOVUxMKTsKKworI2lmZGVmIEZFQVRfRE5ECisgICAgLyoKKyAgICAgKiBTZXQgdXAgZm9yIHJlY2VpdmluZyBETkQgaXRlbXMuCisgICAgICovCisgICAgZ3RrX2RyYWdfZGVzdF9zZXQoZ3VpLmRyYXdhcmVhLAorCQkgICAgICBHVEtfREVTVF9ERUZBVUxUX0FMTCwKKwkJICAgICAgZG5kX3RhcmdldHMsIE5fRE5EX1RBUkdFVFMsCisJCSAgICAgIEdES19BQ1RJT05fQ09QWSk7CisKKyAgICBndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChndWkuZHJhd2FyZWEpLCAiZHJhZ19kYXRhX3JlY2VpdmVkIiwKKwkJICAgICAgIEdUS19TSUdOQUxfRlVOQyhkcmFnX2RhdGFfcmVjZWl2ZWRfY2IpLCBOVUxMKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9HVEsyCisJLyogV2l0aCBHVEsrIDIsIHdlIG5lZWQgdG8gaWNvbmlmeSB0aGUgd2luZG93IGJlZm9yZSBjYWxsaW5nIHNob3coKQorCSAqIHRvIGF2b2lkIG1hcHBpbmcgdGhlIHdpbmRvdyBmb3IgYSBzaG9ydCB0aW1lLiAgVGhpcyBpcyBqdXN0IGFzIG9uZQorCSAqIHdvdWxkIGV4cGVjdCBpdCB0byB3b3JrLCBidXQgaXQncyBkaWZmZXJlbnQgaW4gR1RLKyAxLiAgVGhlIGZ1bm55CisJICogdGhpbmcgaXMgdGhhdCBpY29uaWZ5aW5nIGFmdGVyIHNob3coKSBfZG9lc18gd29yayB3aXRoIEdUSysgMS4KKwkgKiAoQlRXIGRvaW5nIHRoaXMgaW4gdGhlICJyZWFsaXplIiBoYW5kbGVyIG1ha2VzIG5vIGRpZmZlcmVuY2UuKSAqLworCWlmIChmb3VuZF9pY29uaWNfYXJnICYmIGd0a19zb2NrZXRfaWQgPT0gMCkKKwkgICAgZ3VpX21jaF9pY29uaWZ5KCk7CisjZW5kaWYKKworICAgIHsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0dOT01FKSAmJiBkZWZpbmVkKEhBVkVfR1RLMikgJiYgZGVmaW5lZChGRUFUX01FTlUpCisJdW5zaWduZWQgbG9uZyBtZW51X2hhbmRsZXIgPSAwOworIyBpZmRlZiBGRUFUX1RPT0xCQVIKKwl1bnNpZ25lZCBsb25nIHRvb2xfaGFuZGxlciA9IDA7CisjIGVuZGlmCisJLyoKKwkgKiBVcmdoIGhhY2tpc2ggOi8gIEZvciBzb21lIHJlYXNvbiBCb25vYm9Eb2NrTGF5b3V0IGFsd2F5cyBmb3JjZXMgYQorCSAqIHNob3cgd2hlbiByZXN0b3JpbmcgdGhlIHNhdmVkIGxheW91dCBjb25maWd1cmF0aW9uLglXZSBjYW4ndCBqdXN0CisJICogaGlkZSB0aGUgd2lkZ2V0cyBhZ2FpbiBhZnRlciBndGtfd2lkZ2V0X3Nob3coZ3VpLm1haW53aW4pIHNpbmNlIGl0J3MKKwkgKiBhIHRvcGxldmVsIHdpbmRvdyBhbmQgdGh1cyB3aWxsIGJlIHJlYWxpemVkIGltbWVkaWF0ZWx5LiAgSW5zdGVhZCwKKwkgKiBjb25uZWN0IHNpZ25hbCBoYW5kbGVycyB0byBoaWRlIHRoZSB3aWRnZXRzIGp1c3QgYWZ0ZXIgdGhleSd2ZSBiZWVuCisJICogbWFya2VkIHZpc2libGUsIGJ1dCBiZWZvcmUgdGhlIG1haW4gd2luZG93IGlzIHJlYWxpemVkLgorCSAqLworCWlmICh1c2luZ19nbm9tZSAmJiB2aW1fc3RyY2hyKHBfZ28sIEdPX01FTlVTKSA9PSBOVUxMKQorCSAgICBtZW51X2hhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0X2FmdGVyKGd1aS5tZW51YmFyX2gsICJzaG93IiwKKwkJCQkJCSAgR19DQUxMQkFDSygmZ3RrX3dpZGdldF9oaWRlKSwKKwkJCQkJCSAgTlVMTCk7CisjIGlmZGVmIEZFQVRfVE9PTEJBUgorCWlmICh1c2luZ19nbm9tZSAmJiB2aW1fc3RyY2hyKHBfZ28sIEdPX1RPT0xCQVIpID09IE5VTEwKKwkJJiYgKHRvb2xiYXJfZmxhZ3MgJiAoVE9PTEJBUl9URVhUIHwgVE9PTEJBUl9JQ09OUykpKQorCSAgICB0b29sX2hhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0X2FmdGVyKGd1aS50b29sYmFyX2gsICJzaG93IiwKKwkJCQkJCSAgR19DQUxMQkFDSygmZ3RrX3dpZGdldF9oaWRlKSwKKwkJCQkJCSAgTlVMTCk7CisjIGVuZGlmCisjZW5kaWYKKwlndGtfd2lkZ2V0X3Nob3coZ3VpLm1haW53aW4pOworCisjaWYgZGVmaW5lZChGRUFUX0dVSV9HTk9NRSkgJiYgZGVmaW5lZChIQVZFX0dUSzIpICYmIGRlZmluZWQoRkVBVF9NRU5VKQorCWlmIChtZW51X2hhbmRsZXIgIT0gMCkKKwkgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KGd1aS5tZW51YmFyX2gsIG1lbnVfaGFuZGxlcik7CisjIGlmZGVmIEZFQVRfVE9PTEJBUgorCWlmICh0b29sX2hhbmRsZXIgIT0gMCkKKwkgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KGd1aS50b29sYmFyX2gsIHRvb2xfaGFuZGxlcik7CisjIGVuZGlmCisjZW5kaWYKKyAgICB9CisKKyNpZm5kZWYgSEFWRV9HVEsyCisJLyogV2l0aCBHVEsrIDEsIHdlIG5lZWQgdG8gaWNvbmlmeSB0aGUgd2luZG93IGFmdGVyIGNhbGxpbmcgc2hvdygpLgorCSAqIFNlZSB0aGUgY29tbWVudCBhYm92ZSBmb3IgZGV0YWlscy4gKi8KKwlpZiAoZm91bmRfaWNvbmljX2FyZyAmJiBndGtfc29ja2V0X2lkID09IDApCisJICAgIGd1aV9tY2hfaWNvbmlmeSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gT0s7Cit9CisKKworLypBUkdTVVNFRDAqLworICAgIHZvaWQKK2d1aV9tY2hfZXhpdChpbnQgcmMpCit7CisgICAgaWYgKGd1aS5tYWlud2luICE9IE5VTEwpCisJZ3RrX3dpZGdldF9kZXN0cm95KGd1aS5tYWlud2luKTsKKworICAgIGlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwlndGtfbWFpbl9xdWl0KCk7Cit9CisKKy8qCisgKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHdpbmRvdy4KKyAqLworICAgIGludAorZ3VpX21jaF9nZXRfd2lucG9zKGludCAqeCwgaW50ICp5KQoreworI2lmZGVmIEhBVkVfR1RLMgorICAgIGd0a193aW5kb3dfZ2V0X3Bvc2l0aW9uKEdUS19XSU5ET1coZ3VpLm1haW53aW4pLCB4LCB5KTsKKyNlbHNlCisgICAgLyogRm9yIHNvbWUgcGVvcGxlIHRoaXMgbXVzdCBiZSBnZGtfd2luZG93X2dldF9vcmlnaW4oKSBmb3IgYSBjb3JyZWN0CisgICAgICogcmVzdWx0LglXaGVyZSBpcyB0aGUgZG9jdW1lbnRhdGlvbiEgKi8KKyAgICBnZGtfd2luZG93X2dldF9yb290X29yaWdpbihndWkubWFpbndpbi0+d2luZG93LCB4LCB5KTsKKyNlbmRpZgorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93IHRvIHRoZSBnaXZlbgorICogY29vcmRpbmF0ZXMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF93aW5wb3MoaW50IHgsIGludCB5KQoreworI2lmZGVmIEhBVkVfR1RLMgorICAgIGd0a193aW5kb3dfbW92ZShHVEtfV0lORE9XKGd1aS5tYWlud2luKSwgeCwgeSk7CisjZWxzZQorICAgIGdka193aW5kb3dfbW92ZShndWkubWFpbndpbi0+d2luZG93LCB4LCB5KTsKKyNlbmRpZgorfQorCisjaWZkZWYgSEFWRV9HVEsyCisjaWYgMAorc3RhdGljIGludCByZXNpemVfaWRsZV9pbnN0YWxsZWQgPSBGQUxTRTsKKy8qCisgKiBJZGxlIGhhbmRsZXIgdG8gZm9yY2UgcmVzaXplLiAgVXNlZCBieSBndWlfbWNoX3NldF9zaGVsbHNpemUoKSB0byBlbnN1cmUKKyAqIHRoZSBzaGVsbCBzaXplIGRvZXNuJ3QgZXhjZWVkIHRoZSB3aW5kb3cgc2l6ZSwgaS5lLiBpZiB0aGUgd2luZG93IG1hbmFnZXIKKyAqIGlnbm9yZWQgb3VyIHNpemUgcmVxdWVzdC4gIFVzdWFsbHkgdGhpcyBoYXBwZW5zIGlmIHRoZSB3aW5kb3cgaXMgbWF4aW1pemVkLgorICoKKyAqIEZJWE1FOiBJdCdkIGJlIG5pY2UgaWYgd2UgY291bGQgZmluZCBhIGxpdHRsZSBtb3JlIG9ydGhvZG94IHNvbHV0aW9uLgorICogU2VlIGFsc28gdGhlIHJlbWFyayBiZWxvdyBpbiBndWlfbWNoX3NldF9zaGVsbHNpemUoKS4KKyAqCisgKiBESVNBQkxFRDogV2hlbiBkb2luZyAiOnNldCBsaW5lcys9MSIgdGhpcyBmdW5jdGlvbiB3b3VsZCBmaXJzdCBpbnZva2UKKyAqIGd1aV9yZXNpemVfc2hlbGwoKSB3aXRoIHRoZSBvbGQgc2l6ZSwgdGhlbiB0aGUgbm9ybWFsIGNhbGxiYWNrIHdvdWxkCisgKiByZXBvcnQgdGhlIG5ldyBzaXplIHRocm91Z2ggZm9ybV9jb25maWd1cmVfZXZlbnQoKS4gIFRoYXQgY2F1c2VkIHRoZSB3aW5kb3cKKyAqIGxheW91dCB0byBiZSBtZXNzZWQgdXAuCisgKi8KKy8qQVJHU1VTRUQwKi8KKyAgICBzdGF0aWMgZ2Jvb2xlYW4KK2ZvcmNlX3NoZWxsX3Jlc2l6ZV9pZGxlKGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKGd1aS5tYWlud2luICE9IE5VTEwKKwkgICAgJiYgR1RLX1dJREdFVF9SRUFMSVpFRChndWkubWFpbndpbikKKwkgICAgJiYgR1RLX1dJREdFVF9WSVNJQkxFKGd1aS5tYWlud2luKSkKKyAgICB7CisJaW50IHdpZHRoOworCWludCBoZWlnaHQ7CisKKwlndGtfd2luZG93X2dldF9zaXplKEdUS19XSU5ET1coZ3VpLm1haW53aW4pLCAmd2lkdGgsICZoZWlnaHQpOworCisJd2lkdGggIC09IGdldF9tZW51X3Rvb2xfd2lkdGgoKTsKKwloZWlnaHQgLT0gZ2V0X21lbnVfdG9vbF9oZWlnaHQoKTsKKworCWd1aV9yZXNpemVfc2hlbGwod2lkdGgsIGhlaWdodCk7CisgICAgfQorCisgICAgcmVzaXplX2lkbGVfaW5zdGFsbGVkID0gRkFMU0U7CisgICAgcmV0dXJuIEZBTFNFOyAvKiBkb24ndCBjYWxsIG1lIGFnYWluICovCit9CisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0dUSzIgKi8KKworLyoKKyAqIFNldCB0aGUgd2luZG93cyBzaXplLgorICovCisvKkFSR1NVU0VEMiovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2hlbGxzaXplKGludCB3aWR0aCwgaW50IGhlaWdodCwKKwkJICAgICAgaW50IG1pbl93aWR0aCwgIGludCBtaW5faGVpZ2h0LAorCQkgICAgICBpbnQgYmFzZV93aWR0aCwgaW50IGJhc2VfaGVpZ2h0KQoreworI2lmbmRlZiBIQVZFX0dUSzIKKyAgICAvKiBIYWNrOiBXaGVuIHRoZSBmb3JtIGFscmVhZHkgaXMgYXQgdGhlIGRlc2lyZWQgc2l6ZSwgdGhlIHdpbmRvdyBtaWdodAorICAgICAqIGhhdmUgYmVlbiByZXNpemVkIHdpdGggdGhlIG1vdXNlLiAgRm9yY2UgYSByZXNpemUgYnkgc2V0dGluZyBhCisgICAgICogZGlmZmVyZW50IHNpemUgZmlyc3QuICovCisgICAgaWYgKEdUS19GT1JNKGd1aS5mb3Jtd2luKS0+d2lkdGggPT0gd2lkdGgKKwkgICAgJiYgR1RLX0ZPUk0oZ3VpLmZvcm13aW4pLT5oZWlnaHQgPT0gaGVpZ2h0KQorICAgIHsKKwlndGtfZm9ybV9zZXRfc2l6ZShHVEtfRk9STShndWkuZm9ybXdpbiksIHdpZHRoICsgMSwgaGVpZ2h0ICsgMSk7CisJZ3VpX21jaF91cGRhdGUoKTsKKyAgICB9CisgICAgZ3RrX2Zvcm1fc2V0X3NpemUoR1RLX0ZPUk0oZ3VpLmZvcm13aW4pLCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorCisgICAgLyogZ2l2ZSBHVEsrIGEgY2hhbmNlIHRvIHB1dCBhbGwgd2lkZ2V0J3MgaW50byBwbGFjZSAqLworICAgIGd1aV9tY2hfdXBkYXRlKCk7CisKKyAgICAvKiB0aGlzIHdpbGwgY2F1c2UgdGhlIHByb3BlciByZXNpemVtZW50IHRvIGhhcHBlbiB0b28gKi8KKyAgICB1cGRhdGVfd2luZG93X21hbmFnZXJfaGludHMoKTsKKworI2lmZGVmIEhBVkVfR1RLMgorICAgIC8qIFdpdGggR1RLKyAyLCBjaGFuZ2luZyB0aGUgc2l6ZSBvZiB0aGUgZm9ybSB3aWRnZXQgZG9lc24ndCByZXNpemUKKyAgICAgKiB0aGUgd2luZG93LiAgU28gbGV0cyBkbyBpdCB0aGUgb3RoZXIgd2F5IGFyb3VuZCBhbmQgcmVzaXplIHRoZQorICAgICAqIG1haW4gd2luZG93IGluc3RlYWQuICovCisgICAgd2lkdGggICs9IGdldF9tZW51X3Rvb2xfd2lkdGgoKTsKKyAgICBoZWlnaHQgKz0gZ2V0X21lbnVfdG9vbF9oZWlnaHQoKTsKKworICAgIGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1coZ3VpLm1haW53aW4pLCB3aWR0aCwgaGVpZ2h0KTsKKworI2lmIDAKKyAgICBpZiAoIXJlc2l6ZV9pZGxlX2luc3RhbGxlZCkKKyAgICB7CisJZ19pZGxlX2FkZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMgKyAxMCwKKwkJCSZmb3JjZV9zaGVsbF9yZXNpemVfaWRsZSwgTlVMTCwgTlVMTCk7CisJcmVzaXplX2lkbGVfaW5zdGFsbGVkID0gVFJVRTsKKyAgICB9CisjZW5kaWYKKyAgICAvKgorICAgICAqIFdhaXQgdW50aWwgYWxsIGV2ZW50cyBhcmUgcHJvY2Vzc2VkIHRvIHByZXZlbnQgYSBjcmFzaCBiZWNhdXNlIHRoZQorICAgICAqIHJlYWwgc2l6ZSBvZiB0aGUgZHJhd2luZyBhcmVhIGRvZXNuJ3QgcmVmbGVjdCBWaW0ncyBpbnRlcm5hbCBpZGVhcy4KKyAgICAgKgorICAgICAqIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBzaW5jZSBWaW0gaXMgYSB0ZXJtaW5hbCBhcHBsaWNhdGlvbiB3aXRoIGEgR1VJCisgICAgICogb24gdG9wLCB3aGlsZSB0aGUgR1VJIGV4cGVjdHMgdG8gYmUgdGhlIGJvc3MuCisgICAgICovCisgICAgZ3VpX21jaF91cGRhdGUoKTsKKyNlbmRpZgorfQorCisKKy8qCisgKiBUaGUgc2NyZWVuIHNpemUgaXMgdXNlZCB0byBtYWtlIHN1cmUgdGhlIGluaXRpYWwgd2luZG93IGRvZXNuJ3QgZ2V0IGJpZ2dlcgorICogdGhhbiB0aGUgc2NyZWVuLiAgVGhpcyBzdWJ0cmFjdHMgc29tZSByb29tIGZvciBtZW51YmFyLCB0b29sYmFyIGFuZCB3aW5kb3cKKyAqIGRlY29yYXRpb25zLgorICovCisgICAgdm9pZAorZ3VpX21jaF9nZXRfc2NyZWVuX2RpbWVuc2lvbnMoaW50ICpzY3JlZW5fdywgaW50ICpzY3JlZW5faCkKK3sKKyNpZmRlZiBIQVZFX0dUS19NVUxUSUhFQUQKKyAgICBHZGtTY3JlZW4qIHNjcmVlbjsKKworICAgIGlmIChndWkubWFpbndpbiAhPSBOVUxMICYmIGd0a193aWRnZXRfaGFzX3NjcmVlbihndWkubWFpbndpbikpCisJc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKGd1aS5tYWlud2luKTsKKyAgICBlbHNlCisJc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOworCisgICAgKnNjcmVlbl93ID0gZ2RrX3NjcmVlbl9nZXRfd2lkdGgoc2NyZWVuKTsKKyAgICAqc2NyZWVuX2ggPSBnZGtfc2NyZWVuX2dldF9oZWlnaHQoc2NyZWVuKSAtIHBfZ2hyOworI2Vsc2UKKyAgICAqc2NyZWVuX3cgPSBnZGtfc2NyZWVuX3dpZHRoKCk7CisgICAgLyogU3VidHJhY3QgJ2d1aWhlYWRyb29tJyBmcm9tIHRoZSBoZWlnaHQgdG8gYWxsb3cgc29tZSByb29tIGZvciB0aGUKKyAgICAgKiB3aW5kb3cgbWFuYWdlciAodGFzayBsaXN0IGFuZCB3aW5kb3cgdGl0bGUgYmFyKS4gKi8KKyAgICAqc2NyZWVuX2ggPSBnZGtfc2NyZWVuX2hlaWdodCgpIC0gcF9naHI7CisjZW5kaWYKKworICAgIC8qCisgICAgICogRklYTUU6IGRpcnR5IHRyaWNrOiBCZWNhdXNlIHRoZSBndWlfZ2V0X2Jhc2VfaGVpZ2h0KCkgZG9lc24ndCBpbmNsdWRlCisgICAgICogdGhlIHRvb2xiYXIgYW5kIG1lbnViYXIgZm9yIEdUSywgd2Ugc3VidHJhY3QgdGhlbSBmcm9tIHRoZSBzY3JlZW4KKyAgICAgKiBoaWdodCwgc28gdGhhdCB0aGUgd2luZG93IHNpemUgY2FuIGJlIG1hZGUgdG8gZml0IG9uIHRoZSBzY3JlZW4uCisgICAgICogVGhpcyBzaG91bGQgYmUgY29tcGxldGVseSBjaGFuZ2VkIGxhdGVyLgorICAgICAqLworICAgICpzY3JlZW5fdyAtPSBnZXRfbWVudV90b29sX3dpZHRoKCk7CisgICAgKnNjcmVlbl9oIC09IGdldF9tZW51X3Rvb2xfaGVpZ2h0KCk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfVElUTEUpIHx8IGRlZmluZWQoUFJPVE8pCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitndWlfbWNoX3NldHRpdGxlKGNoYXJfdSAqdGl0bGUsIGNoYXJfdSAqaWNvbikKK3sKKyMgaWZkZWYgSEFWRV9HVEsyCisgICAgaWYgKHRpdGxlICE9IE5VTEwgJiYgb3V0cHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJdGl0bGUgPSBzdHJpbmdfY29udmVydCgmb3V0cHV0X2NvbnYsIHRpdGxlLCBOVUxMKTsKKyMgZW5kaWYKKworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZ3VpLm1haW53aW4pLCAoY29uc3QgY2hhciAqKXRpdGxlKTsKKworIyBpZmRlZiBIQVZFX0dUSzIKKyAgICBpZiAob3V0cHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJdmltX2ZyZWUodGl0bGUpOworIyBlbmRpZgorfQorI2VuZGlmIC8qIEZFQVRfVElUTEUgKi8KKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2d1aV9tY2hfZW5hYmxlX21lbnUoaW50IHNob3dpdCkKK3sKKyAgICBHdGtXaWRnZXQgKndpZGdldDsKKworIyBpZmRlZiBGRUFUX0dVSV9HTk9NRQorICAgIGlmICh1c2luZ19nbm9tZSkKKwl3aWRnZXQgPSBndWkubWVudWJhcl9oOworICAgIGVsc2UKKyMgZW5kaWYKKwl3aWRnZXQgPSBndWkubWVudWJhcjsKKworICAgIGlmICghc2hvd2l0ICE9ICFHVEtfV0lER0VUX1ZJU0lCTEUod2lkZ2V0KSkKKyAgICB7CisJaWYgKHNob3dpdCkKKwkgICAgZ3RrX3dpZGdldF9zaG93KHdpZGdldCk7CisJZWxzZQorCSAgICBndGtfd2lkZ2V0X2hpZGUod2lkZ2V0KTsKKworCXVwZGF0ZV93aW5kb3dfbWFuYWdlcl9oaW50cygpOworICAgIH0KK30KKyNlbmRpZiAvKiBGRUFUX01FTlUgKi8KKworI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2d1aV9tY2hfc2hvd190b29sYmFyKGludCBzaG93aXQpCit7CisgICAgR3RrV2lkZ2V0ICp3aWRnZXQ7CisKKyAgICBpZiAoZ3VpLnRvb2xiYXIgPT0gTlVMTCkKKwlyZXR1cm47CisKKyMgaWZkZWYgRkVBVF9HVUlfR05PTUUKKyAgICBpZiAodXNpbmdfZ25vbWUpCisJd2lkZ2V0ID0gZ3VpLnRvb2xiYXJfaDsKKyAgICBlbHNlCisjIGVuZGlmCisJd2lkZ2V0ID0gZ3VpLnRvb2xiYXI7CisKKyAgICBpZiAoc2hvd2l0KQorCXNldF90b29sYmFyX3N0eWxlKEdUS19UT09MQkFSKGd1aS50b29sYmFyKSk7CisKKyAgICBpZiAoIXNob3dpdCAhPSAhR1RLX1dJREdFVF9WSVNJQkxFKHdpZGdldCkpCisgICAgeworCWlmIChzaG93aXQpCisJICAgIGd0a193aWRnZXRfc2hvdyh3aWRnZXQpOworCWVsc2UKKwkgICAgZ3RrX3dpZGdldF9oaWRlKHdpZGdldCk7CisKKwl1cGRhdGVfd2luZG93X21hbmFnZXJfaGludHMoKTsKKyAgICB9Cit9CisjZW5kaWYgLyogRkVBVF9UT09MQkFSICovCisKKyNpZm5kZWYgSEFWRV9HVEsyCisvKgorICogR2V0IGEgZm9udCBzdHJ1Y3R1cmUgZm9yIGhpZ2hsaWdodGluZy4KKyAqICJjYmRhdGEiIGlzIGEgcG9pbnRlciB0byB0aGUgZ2xvYmFsIGd1aSBzdHJ1Y3R1cmUuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmb250X3NlbF9vayhHdGtXaWRnZXQgKndndCwgZ3BvaW50ZXIgY2JkYXRhKQoreworICAgIGd1aV9UICp2dyA9IChndWlfVCAqKWNiZGF0YTsKKyAgICBHdGtGb250U2VsZWN0aW9uRGlhbG9nICpmcyA9IChHdGtGb250U2VsZWN0aW9uRGlhbG9nICopdnctPmZvbnRkbGc7CisKKyAgICBpZiAodnctPmZvbnRuYW1lKQorCWdfZnJlZSh2dy0+Zm9udG5hbWUpOworCisgICAgdnctPmZvbnRuYW1lID0gKGNoYXJfdSAqKWd0a19mb250X3NlbGVjdGlvbl9kaWFsb2dfZ2V0X2ZvbnRfbmFtZShmcyk7CisgICAgZ3RrX3dpZGdldF9oaWRlKHZ3LT5mb250ZGxnKTsKKyAgICBpZiAoZ3RrX21haW5fbGV2ZWwoKSA+IDApCisJZ3RrX21haW5fcXVpdCgpOworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZm9udF9zZWxfY2FuY2VsKEd0a1dpZGdldCAqd2d0LCBncG9pbnRlciBjYmRhdGEpCit7CisgICAgZ3VpX1QgKnZ3ID0gKGd1aV9UICopY2JkYXRhOworCisgICAgZ3RrX3dpZGdldF9oaWRlKHZ3LT5mb250ZGxnKTsKKyAgICBpZiAoZ3RrX21haW5fbGV2ZWwoKSA+IDApCisJZ3RrX21haW5fcXVpdCgpOworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZm9udF9zZWxfZGVzdHJveShHdGtXaWRnZXQgKndndCwgZ3BvaW50ZXIgY2JkYXRhKQoreworICAgIGd1aV9UICp2dyA9IChndWlfVCAqKWNiZGF0YTsKKworICAgIHZ3LT5mb250ZGxnID0gTlVMTDsKKyAgICBpZiAoZ3RrX21haW5fbGV2ZWwoKSA+IDApCisJZ3RrX21haW5fcXVpdCgpOworfQorI2VuZGlmIC8qICFIQVZFX0dUSzIgKi8KKworI2lmZGVmIEhBVkVfR1RLMgorLyoKKyAqIENoZWNrIGlmIGEgZ2l2ZW4gZm9udCBpcyBhIENKSyBmb250LiBUaGlzIGlzIGRvbmUgaW4gYSB2ZXJ5IGNydWRlIG1hbm5lci4gSXQKKyAqIGp1c3Qgc2VlIGlmIFUrMDRFMDAgZm9yIHpoIGFuZCBqYSBhbmQgVStBQzAwIGZvciBrbyBhcmUgY292ZXJlZCBpbiBhIGdpdmVuCisgKiBmb250LiBDb25zZXF1ZW50bHksIHRoaXMgZnVuY3Rpb24gY2Fubm90ICBiZSB1c2VkIGFzIGEgZ2VuZXJhbCBwdXJwb3NlIGNoZWNrCisgKiBmb3IgQ0pLLW5lc3MgZm9yIHdoaWNoIGZvbnRjb25maWcgQVBJcyBzaG91bGQgYmUgdXNlZC4gIFRoaXMgaXMgb25seSB1c2VkIGJ5CisgKiBndWlfbWNoX2luaXRfZm9udCgpIHRvIGRlYWwgd2l0aCAnQ0pLIGZpeGVkIHdpZHRoIGZvbnRzJy4KKyAqLworICAgIHN0YXRpYyBpbnQKK2lzX2Nqa19mb250KFBhbmdvRm9udERlc2NyaXB0aW9uICpmb250X2Rlc2MpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjamtfbGFuZ3NbXSA9CisJeyJ6aF9DTiIsICJ6aF9UVyIsICJ6aF9ISyIsICJqYSIsICJrbyJ9OworCisgICAgUGFuZ29Gb250CSpmb250OworICAgIHVuc2lnbmVkCWk7CisgICAgaW50CQlpc19jamsgPSBGQUxTRTsKKworICAgIGZvbnQgPSBwYW5nb19jb250ZXh0X2xvYWRfZm9udChndWkudGV4dF9jb250ZXh0LCBmb250X2Rlc2MpOworCisgICAgaWYgKGZvbnQgPT0gTlVMTCkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBmb3IgKGkgPSAwOyAhaXNfY2prICYmIGkgPCBHX05fRUxFTUVOVFMoY2prX2xhbmdzKTsgKytpKQorICAgIHsKKwlQYW5nb0NvdmVyYWdlCSpjb3ZlcmFnZTsKKwlndW5pY2hhcgl1YzsKKworCWNvdmVyYWdlID0gcGFuZ29fZm9udF9nZXRfY292ZXJhZ2UoCisJCWZvbnQsIHBhbmdvX2xhbmd1YWdlX2Zyb21fc3RyaW5nKGNqa19sYW5nc1tpXSkpOworCisJaWYgKGNvdmVyYWdlICE9IE5VTEwpCisJeworCSAgICB1YyA9IChjamtfbGFuZ3NbaV1bMF0gPT0gJ2snKSA/IDB4QUMwMCA6IDB4NEUwMDsKKwkgICAgaXNfY2prID0gKHBhbmdvX2NvdmVyYWdlX2dldChjb3ZlcmFnZSwgdWMpID09IFBBTkdPX0NPVkVSQUdFX0VYQUNUKTsKKwkgICAgcGFuZ29fY292ZXJhZ2VfdW5yZWYoY292ZXJhZ2UpOworCX0KKyAgICB9CisKKyAgICBnX29iamVjdF91bnJlZihmb250KTsKKworICAgIHJldHVybiBpc19jams7Cit9CisjZW5kaWYgLyogSEFWRV9HVEsyICovCisKKyAgICBpbnQKK2d1aV9tY2hfYWRqdXN0X2NoYXJzaXplKHZvaWQpCit7CisjaWZkZWYgSEFWRV9HVEsyCisgICAgUGFuZ29Gb250TWV0cmljcwkqbWV0cmljczsKKyAgICBpbnQJCQlhc2NlbnQ7CisgICAgaW50CQkJZGVzY2VudDsKKworICAgIG1ldHJpY3MgPSBwYW5nb19jb250ZXh0X2dldF9tZXRyaWNzKGd1aS50ZXh0X2NvbnRleHQsIGd1aS5ub3JtX2ZvbnQsCisJCQkJcGFuZ29fY29udGV4dF9nZXRfbGFuZ3VhZ2UoZ3VpLnRleHRfY29udGV4dCkpOworICAgIGFzY2VudCAgPSBwYW5nb19mb250X21ldHJpY3NfZ2V0X2FzY2VudChtZXRyaWNzKTsKKyAgICBkZXNjZW50ID0gcGFuZ29fZm9udF9tZXRyaWNzX2dldF9kZXNjZW50KG1ldHJpY3MpOworCisgICAgcGFuZ29fZm9udF9tZXRyaWNzX3VucmVmKG1ldHJpY3MpOworCisgICAgZ3VpLmNoYXJfaGVpZ2h0ID0gKGFzY2VudCArIGRlc2NlbnQgKyBQQU5HT19TQ0FMRSAtIDEpIC8gUEFOR09fU0NBTEUKKwkJICAgICAgKyBwX2xpbmVzcGFjZTsKKyAgICBndWkuY2hhcl9hc2NlbnQgPSBQQU5HT19QSVhFTFMoYXNjZW50ICsgcF9saW5lc3BhY2UgKiBQQU5HT19TQ0FMRSAvIDIpOworCisjZWxzZSAvKiAhSEFWRV9HVEsyICovCisKKyAgICBndWkuY2hhcl9oZWlnaHQgPSBndWkuY3VycmVudF9mb250LT5hc2NlbnQgKyBndWkuY3VycmVudF9mb250LT5kZXNjZW50CisJCSAgICAgICsgcF9saW5lc3BhY2U7CisgICAgZ3VpLmNoYXJfYXNjZW50ID0gZ3VpLmN1cnJlbnRfZm9udC0+YXNjZW50ICsgcF9saW5lc3BhY2UgLyAyOworCisjZW5kaWYgLyogIUhBVkVfR1RLMiAqLworCisgICAgLyogQSBub3QtcG9zaXRpdmUgdmFsdWUgb2YgY2hhcl9oZWlnaHQgbWF5IGNyYXNoIFZpbS4gIE9ubHkgaGFwcGVucworICAgICAqIGlmICdsaW5lc3BhY2UnIGlzIG5lZ2F0aXZlICh3aGljaCBkb2VzIG1ha2Ugc2Vuc2Ugc29tZXRpbWVzKS4gKi8KKyAgICBndWkuY2hhcl9hc2NlbnQgPSBNQVgoZ3VpLmNoYXJfYXNjZW50LCAwKTsKKyAgICBndWkuY2hhcl9oZWlnaHQgPSBNQVgoZ3VpLmNoYXJfaGVpZ2h0LCBndWkuY2hhcl9hc2NlbnQgKyAxKTsKKworICAgIHJldHVybiBPSzsKK30KKworI2lmIGRlZmluZWQoRkVBVF9YRk9OVFNFVCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBUcnkgdG8gbG9hZCB0aGUgcmVxdWVzdGVkIGZvbnRzZXQuCisgKi8KKy8qQVJHU1VTRUQyKi8KKyAgICBHdWlGb250c2V0CitndWlfbWNoX2dldF9mb250c2V0KGNoYXJfdSAqbmFtZSwgaW50IHJlcG9ydF9lcnJvciwgaW50IGZpeGVkX3dpZHRoKQoreworICAgIEdka0ZvbnQgKmZvbnQ7CisKKyAgICBpZiAoIWd1aS5pbl91c2UgfHwgbmFtZSA9PSBOVUxMKQorCXJldHVybiBOT0ZPTlQ7CisKKyAgICBmb250ID0gZ2RrX2ZvbnRzZXRfbG9hZCgoZ2NoYXIgKiluYW1lKTsKKworICAgIGlmIChmb250ID09IE5VTEwpCisgICAgeworCWlmIChyZXBvcnRfZXJyb3IpCisJICAgIEVNU0cyKF8oZV9mb250c2V0KSwgbmFtZSk7CisJcmV0dXJuIE5PRk9OVDsKKyAgICB9CisgICAgLyogVE9ETzogY2hlY2sgaWYgdGhlIGZvbnQgaXMgZml4ZWQgd2lkdGguICovCisKKyAgICAvKiByZWZlcmVuY2UgdGhpcyBmb250IGFzIGJlaW5nIGluIHVzZSAqLworICAgIGdka19mb250X3JlZihmb250KTsKKworICAgIHJldHVybiAoR3VpRm9udHNldClmb250OworfQorI2VuZGlmIC8qIEZFQVRfWEZPTlRTRVQgKi8KKworI2lmbmRlZiBIQVZFX0dUSzIKKy8qCisgKiBQdXQgdXAgYSBmb250IGRpYWxvZyBhbmQgcmV0dXJuIHRoZSBzZWxlY3RlZCBmb250IG5hbWUgaW4gYWxsb2NhdGVkIG1lbW9yeS4KKyAqICJvbGR2YWwiIGlzIHRoZSBwcmV2aW91cyB2YWx1ZS4KKyAqIFJldHVybiBOVUxMIHdoZW4gY2FuY2VsbGVkLgorICovCisgICAgY2hhcl91ICoKK2d1aV9tY2hfZm9udF9kaWFsb2coY2hhcl91ICpvbGR2YWwpCit7CisgICAgY2hhcl91ICpmb250bmFtZSA9IE5VTEw7CisKKyAgICBpZiAoIWd1aS5mb250ZGxnKQorICAgIHsKKwlHdGtGb250U2VsZWN0aW9uRGlhbG9nCSpmc2QgPSBOVUxMOworCisJZ3VpLmZvbnRkbGcgPSBndGtfZm9udF9zZWxlY3Rpb25fZGlhbG9nX25ldyhfKCJGb250IFNlbGVjdGlvbiIpKTsKKwlmc2QgPSBHVEtfRk9OVF9TRUxFQ1RJT05fRElBTE9HKGd1aS5mb250ZGxnKTsKKwlndGtfd2luZG93X3NldF9tb2RhbChHVEtfV0lORE9XKGd1aS5mb250ZGxnKSwgVFJVRSk7CisJZ3RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2ZvcihHVEtfV0lORE9XKGd1aS5mb250ZGxnKSwKKwkJR1RLX1dJTkRPVyhndWkubWFpbndpbikpOworCWd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGd1aS5mb250ZGxnKSwgImRlc3Ryb3kiLAorCQlHVEtfU0lHTkFMX0ZVTkMoZm9udF9zZWxfZGVzdHJveSksICZndWkpOworCWd0a19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKGZzZC0+b2tfYnV0dG9uKSwgImNsaWNrZWQiLAorCQlHVEtfU0lHTkFMX0ZVTkMoZm9udF9zZWxfb2spLCAmZ3VpKTsKKwlndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChmc2QtPmNhbmNlbF9idXR0b24pLCAiY2xpY2tlZCIsCisJCUdUS19TSUdOQUxfRlVOQyhmb250X3NlbF9jYW5jZWwpLCAmZ3VpKTsKKyAgICB9CisKKyAgICBpZiAob2xkdmFsICE9IE5VTEwgJiYgKm9sZHZhbCAhPSBOVUwpCisJZ3RrX2ZvbnRfc2VsZWN0aW9uX2RpYWxvZ19zZXRfZm9udF9uYW1lKAorCQlHVEtfRk9OVF9TRUxFQ1RJT05fRElBTE9HKGd1aS5mb250ZGxnKSwgKGNoYXIgKilvbGR2YWwpOworCisgICAgaWYgKGd1aS5mb250bmFtZSkKKyAgICB7CisJZ19mcmVlKGd1aS5mb250bmFtZSk7CisJZ3VpLmZvbnRuYW1lID0gTlVMTDsKKyAgICB9CisgICAgZ3RrX3dpbmRvd19wb3NpdGlvbihHVEtfV0lORE9XKGd1aS5mb250ZGxnKSwgR1RLX1dJTl9QT1NfTU9VU0UpOworICAgIGd0a193aWRnZXRfc2hvdyhndWkuZm9udGRsZyk7CisgICAgeworCXN0YXRpYyBnY2hhcgkqc3BhY2luZ3NbXSA9IHsiYyIsICJtIiwgTlVMTH07CisKKwkvKiBJbiBHVEsgMS4yLjMgdGhpcyBtdXN0IGJlIGFmdGVyIHRoZSBndGtfd2lkZ2V0X3Nob3coKSBjYWxsLAorCSAqIG90aGVyd2lzZSBldmVyeXRoaW5nIGlzIGJsb2NrZWQgZm9yIHRlbiBzZWNvbmRzLiAqLworCWd0a19mb250X3NlbGVjdGlvbl9kaWFsb2dfc2V0X2ZpbHRlcigKKwkJR1RLX0ZPTlRfU0VMRUNUSU9OX0RJQUxPRyhndWkuZm9udGRsZyksCisJCUdUS19GT05UX0ZJTFRFUl9CQVNFLAorCQlHVEtfRk9OVF9BTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIHNwYWNpbmdzLCBOVUxMKTsKKyAgICB9CisKKyAgICAvKiBXYWl0IGZvciB0aGUgZm9udCBkaWFsb2cgdG8gYmUgY2xvc2VkLiAqLworICAgIHdoaWxlIChndWkuZm9udGRsZyAmJiBHVEtfV0lER0VUX0RSQVdBQkxFKGd1aS5mb250ZGxnKSkKKwlndGtfbWFpbl9pdGVyYXRpb25fZG8oVFJVRSk7CisKKyAgICBpZiAoZ3VpLmZvbnRuYW1lICE9IE5VTEwpCisgICAgeworCWZvbnRuYW1lID0gdmltX3N0cnNhdmUoZ3VpLmZvbnRuYW1lKTsKKwlnX2ZyZWUoZ3VpLmZvbnRuYW1lKTsKKwlndWkuZm9udG5hbWUgPSBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZm9udG5hbWU7Cit9CisjZW5kaWYgLyogIUhBVkVfR1RLMiAqLworCisjaWZkZWYgSEFWRV9HVEsyCisvKgorICogUHV0IHVwIGEgZm9udCBkaWFsb2cgYW5kIHJldHVybiB0aGUgc2VsZWN0ZWQgZm9udCBuYW1lIGluIGFsbG9jYXRlZCBtZW1vcnkuCisgKiAib2xkdmFsIiBpcyB0aGUgcHJldmlvdXMgdmFsdWUuICBSZXR1cm4gTlVMTCB3aGVuIGNhbmNlbGxlZC4KKyAqIFRoaXMgc2hvdWxkIHByb2JhYmx5IGdvIGludG8gZ3VpX2d0ay5jLiAgSG1tLgorICogRklYTUU6CisgKiBUaGUgR1RLMiBmb250IHNlbGVjdGlvbiBkaWFsb2cgaGFzIG5vIGZpbHRlcmluZyBBUEkuICBTbyB3ZSBjb3VsZCBlaXRoZXIKKyAqIGEpIGltcGxlbWVudCBvdXIgb3duIChwb3NzaWJseSBjb3B5aW5nIHRoZSBjb2RlIGZyb20gc29tZXdoZXJlIGVsc2UpIG9yCisgKiBiKSBqdXN0IGxpdmUgd2l0aCBpdC4KKyAqLworICAgIGNoYXJfdSAqCitndWlfbWNoX2ZvbnRfZGlhbG9nKGNoYXJfdSAqb2xkdmFsKQoreworICAgIEd0a1dpZGdldAkqZGlhbG9nOworICAgIGludAkJcmVzcG9uc2U7CisgICAgY2hhcl91CSpmb250bmFtZSA9IE5VTEw7CisgICAgY2hhcl91CSpvbGRuYW1lOworCisgICAgZGlhbG9nID0gZ3RrX2ZvbnRfc2VsZWN0aW9uX2RpYWxvZ19uZXcoTlVMTCk7CisKKyAgICBndGtfd2luZG93X3NldF90cmFuc2llbnRfZm9yKEdUS19XSU5ET1coZGlhbG9nKSwgR1RLX1dJTkRPVyhndWkubWFpbndpbikpOworICAgIGd0a193aW5kb3dfc2V0X2Rlc3Ryb3lfd2l0aF9wYXJlbnQoR1RLX1dJTkRPVyhkaWFsb2cpLCBUUlVFKTsKKworICAgIGlmIChvbGR2YWwgIT0gTlVMTCAmJiBvbGR2YWxbMF0gIT0gTlVMKQorICAgIHsKKwlpZiAob3V0cHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJICAgIG9sZG5hbWUgPSBzdHJpbmdfY29udmVydCgmb3V0cHV0X2NvbnYsIG9sZHZhbCwgTlVMTCk7CisJZWxzZQorCSAgICBvbGRuYW1lID0gb2xkdmFsOworCisJLyogQW5ub3lpbmcgYnVnIGluIEdUSyAob3IgUGFuZ28pOiBpZiB0aGUgZm9udCBuYW1lIGRvZXMgbm90IGluY2x1ZGUgYQorCSAqIHNpemUsIHplcm8gaXMgdXNlZC4gIFVzZSBkZWZhdWx0IHBvaW50IHNpemUgdGVuLiAqLworCWlmICghdmltX2lzZGlnaXQob2xkbmFtZVtTVFJMRU4ob2xkbmFtZSkgLSAxXSkpCisJeworCSAgICBjaGFyX3UJKnAgPSB2aW1fc3RybnNhdmUob2xkbmFtZSwgU1RSTEVOKG9sZG5hbWUpICsgMyk7CisKKwkgICAgaWYgKHAgIT0gTlVMTCkKKwkgICAgeworCQlTVFJDUFkocCArIFNUUkxFTihwKSwgIiAxMCIpOworCQlpZiAob2xkbmFtZSAhPSBvbGR2YWwpCisJCSAgICB2aW1fZnJlZShvbGRuYW1lKTsKKwkJb2xkbmFtZSA9IHA7CisJICAgIH0KKwl9CisKKwlndGtfZm9udF9zZWxlY3Rpb25fZGlhbG9nX3NldF9mb250X25hbWUoCisJCUdUS19GT05UX1NFTEVDVElPTl9ESUFMT0coZGlhbG9nKSwgKGNvbnN0IGNoYXIgKilvbGRuYW1lKTsKKworCWlmIChvbGRuYW1lICE9IG9sZHZhbCkKKwkgICAgdmltX2ZyZWUob2xkdmFsKTsKKyAgICB9CisKKyAgICByZXNwb25zZSA9IGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7CisKKyAgICBpZiAocmVzcG9uc2UgPT0gR1RLX1JFU1BPTlNFX09LKQorICAgIHsKKwljaGFyICpuYW1lOworCisJbmFtZSA9IGd0a19mb250X3NlbGVjdGlvbl9kaWFsb2dfZ2V0X2ZvbnRfbmFtZSgKKwkJCSAgICBHVEtfRk9OVF9TRUxFQ1RJT05fRElBTE9HKGRpYWxvZykpOworCWlmIChuYW1lICE9IE5VTEwpCisJeworCSAgICBpZiAoaW5wdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwkJZm9udG5hbWUgPSBzdHJpbmdfY29udmVydCgmaW5wdXRfY29udiwgKGNoYXJfdSAqKW5hbWUsIE5VTEwpOworCSAgICBlbHNlCisJCWZvbnRuYW1lID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKW5hbWUpOworCSAgICBnX2ZyZWUobmFtZSk7CisJfQorICAgIH0KKworICAgIGlmIChyZXNwb25zZSAhPSBHVEtfUkVTUE9OU0VfTk9ORSkKKwlndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKKworICAgIHJldHVybiBmb250bmFtZTsKK30KKworLyoKKyAqIFNvbWUgbW9ub3NwYWNlIGZvbnRzIGRvbid0IHN1cHBvcnQgYSBib2xkIHdlaWdodCwgYW5kIGZhbGwgYmFjaworICogc2lsZW50bHkgdG8gdGhlIHJlZ3VsYXIgd2VpZ2h0LiAgQnV0IHRoaXMgaXMgbm8gZ29vZCBzaW5jZSBvdXIgdGV4dAorICogZHJhd2luZyBmdW5jdGlvbiBjYW4gZW11bGF0ZSBib2xkIGJ5IG92ZXJzdHJpa2luZy4gIFNvIGxldCdzIHRyeQorICogdG8gZGV0ZWN0IHdoZXRoZXIgYm9sZCB3ZWlnaHQgaXMgYWN0dWFsbHkgYXZhaWxhYmxlIGFuZCBlbXVsYXRlIGl0CisgKiBvdGhlcndpc2UuCisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0YWxpYyBzdHlsZSBzaW5jZSBYZnQgY2FuCisgKiBlbXVsYXRlIGl0YWxpYyBvbiBpdHMgb3duLCBwcm92aWRlZCB5b3UgaGF2ZSBhIHByb3BlciBmb250Y29uZmlnCisgKiBzZXR1cC4gIFdlIHdvdWxkbid0IGJlIGFibGUgdG8gZW11bGF0ZSBpdCBpbiBWaW0gYW55d2F5LgorICovCisgICAgc3RhdGljIHZvaWQKK2dldF9zdHlsZWRfZm9udF92YXJpYW50cyh2b2lkKQoreworICAgIFBhbmdvRm9udERlc2NyaXB0aW9uICAgICpib2xkX2ZvbnRfZGVzYzsKKyAgICBQYW5nb0ZvbnQJCSAgICAqcGxhaW5fZm9udDsKKyAgICBQYW5nb0ZvbnQJCSAgICAqYm9sZF9mb250OworCisgICAgZ3VpLmZvbnRfY2FuX2JvbGQgPSBGQUxTRTsKKworICAgIHBsYWluX2ZvbnQgPSBwYW5nb19jb250ZXh0X2xvYWRfZm9udChndWkudGV4dF9jb250ZXh0LCBndWkubm9ybV9mb250KTsKKworICAgIGlmIChwbGFpbl9mb250ID09IE5VTEwpCisJcmV0dXJuOworCisgICAgYm9sZF9mb250X2Rlc2MgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2NvcHlfc3RhdGljKGd1aS5ub3JtX2ZvbnQpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X3dlaWdodChib2xkX2ZvbnRfZGVzYywgUEFOR09fV0VJR0hUX0JPTEQpOworCisgICAgYm9sZF9mb250ID0gcGFuZ29fY29udGV4dF9sb2FkX2ZvbnQoZ3VpLnRleHRfY29udGV4dCwgYm9sZF9mb250X2Rlc2MpOworICAgIC8qCisgICAgICogVGhlIGNvbXBhcmlzb24gcmVsaWVzIG9uIHRoZSB1bmlxdWUgaGFuZGxlIG5hdHVyZSBvZiBhIFBhbmdvRm9udCosCisgICAgICogaS5lLiBpdCdzIGFzc3VtZWQgdGhhdCBhIGRpZmZlcmVudCBQYW5nb0ZvbnQqIHdvbid0IHJlZmVyIHRvIHRoZQorICAgICAqIHNhbWUgZm9udC4gIFNlZW1zIHRvIHdvcmssIGFuZCBmYWlsaW5nIGhlcmUgaXNuJ3QgY3JpdGljYWwgYW55d2F5LgorICAgICAqLworICAgIGlmIChib2xkX2ZvbnQgIT0gTlVMTCkKKyAgICB7CisJZ3VpLmZvbnRfY2FuX2JvbGQgPSAoYm9sZF9mb250ICE9IHBsYWluX2ZvbnQpOworCWdfb2JqZWN0X3VucmVmKGJvbGRfZm9udCk7CisgICAgfQorCisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGJvbGRfZm9udF9kZXNjKTsKKyAgICBnX29iamVjdF91bnJlZihwbGFpbl9mb250KTsKK30KKworI2Vsc2UgLyogIUhBVkVfR1RLMiAqLworCisvKgorICogVGhlcmUgaXMgb25seSBvbmUgZXhjdXNlIEkgY2FuIGdpdmUgZm9yIHRoZSBmb2xsb3dpbmcgYXR0ZW1wdCB0byBtYW5hZ2UgZm9udAorICogc3R5bGVzOgorICoKKyAqIEkgSEFURSBUSEUgQlJBSU4gREVBRCBXQVkgWDExIElTIEhBTkRMSU5HIEZPTlRTICgtLW1kY2tpKQorICogKE1lIHRvby4gLS1kYW5pZWxrKQorICovCisgICAgc3RhdGljIHZvaWQKK2dldF9zdHlsZWRfZm9udF92YXJpYW50cyhjaGFyX3UgKiBmb250X25hbWUpCit7CisgICAgY2hhcgkqY2h1bmtbMzJdOworICAgIGNoYXIJKnNkdXA7CisgICAgY2hhcgkqdG1wOworICAgIGludAkJbGVuLCBpOworICAgIEd1aUZvbnQJKnN0eWxlZF9mb250WzNdOworCisgICAgc3R5bGVkX2ZvbnRbMF0gPSAmZ3VpLmJvbGRfZm9udDsKKyAgICBzdHlsZWRfZm9udFsxXSA9ICZndWkuaXRhbF9mb250OworICAgIHN0eWxlZF9mb250WzJdID0gJmd1aS5ib2xkaXRhbF9mb250OworCisgICAgLyogRmlyc3QgZnJlZSB3aGF0ZXZlciB3YXMgZnJldmlvdXNseSB0aGVyZS4gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgKytpKQorCWlmICgqc3R5bGVkX2ZvbnRbaV0pCisJeworCSAgICBnZGtfZm9udF91bnJlZigqc3R5bGVkX2ZvbnRbaV0pOworCSAgICAqc3R5bGVkX2ZvbnRbaV0gPSBOVUxMOworCX0KKworICAgIGlmICgoc2R1cCA9IGdfc3RyZHVwKChjb25zdCBjaGFyICopZm9udF9uYW1lKSkgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICAvKiBzcGxpdCB1cCB0aGUgd2hvbGUgKi8KKyAgICBpID0gMDsKKyAgICBmb3IgKHRtcCA9IHNkdXA7ICp0bXAgIT0gJ1wwJzsgKyt0bXApCisgICAgeworCWlmICgqdG1wID09ICctJykKKwl7CisJICAgICp0bXAgPSAnXDAnOworCisJICAgIGlmIChpID09IDMyKQorCQlicmVhazsKKworCSAgICBjaHVua1tpXSA9IHRtcCArIDE7CisJICAgICsraTsKKwl9CisgICAgfQorCisgICAgaWYgKGkgPT0gMTQpCisgICAgeworCUdka0ZvbnQJCSpmb250ID0gTlVMTDsKKwljb25zdCBjaGFyCSpib2xkX2NodW5rWzNdCSAgICA9IHsgImJvbGQiLCBOVUxMLAkiYm9sZCIgfTsKKwljb25zdCBjaGFyCSppdGFsaWNfY2h1bmtbM10gICAgPSB7IE5VTEwsCSJvIiwJIm8iIH07CisKKwkvKiBmb250IG5hbWUgd2FzIGNvbXBsZXRlICovCisJbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopZm9udF9uYW1lKSArIDMyOworCisJZm9yIChpID0gMDsgaSA8IDM7ICsraSkKKwl7CisJICAgIGNoYXIgKnN0eWxlZF9uYW1lOworCSAgICBpbnQgajsKKworCSAgICBzdHlsZWRfbmFtZSA9IChjaGFyICopYWxsb2MobGVuKTsKKwkgICAgaWYgKHN0eWxlZF9uYW1lID09IE5VTEwpCisJICAgIHsKKwkJZ19mcmVlKHNkdXApOworCQlyZXR1cm47CisJICAgIH0KKworCSAgICAqc3R5bGVkX25hbWUgPSAnXDAnOworCisJICAgIGZvciAoaiA9IDA7IGogPCAxNDsgKytqKQorCSAgICB7CisJCXN0cmNhdChzdHlsZWRfbmFtZSwgIi0iKTsKKwkJaWYgKGogPT0gMiAmJiBib2xkX2NodW5rW2ldICE9IE5VTEwpCisJCSAgICBzdHJjYXQoc3R5bGVkX25hbWUsIGJvbGRfY2h1bmtbaV0pOworCQllbHNlIGlmIChqID09IDMgJiYgaXRhbGljX2NodW5rW2ldICE9IE5VTEwpCisJCSAgICBzdHJjYXQoc3R5bGVkX25hbWUsIGl0YWxpY19jaHVua1tpXSk7CisJCWVsc2UKKwkJICAgIHN0cmNhdChzdHlsZWRfbmFtZSwgY2h1bmtbal0pOworCSAgICB9CisKKwkgICAgZm9udCA9IGd1aV9tY2hfZ2V0X2ZvbnQoKGNoYXJfdSAqKXN0eWxlZF9uYW1lLCBGQUxTRSk7CisJICAgIGlmIChmb250ICE9IE5VTEwpCisJCSpzdHlsZWRfZm9udFtpXSA9IGZvbnQ7CisKKwkgICAgdmltX2ZyZWUoc3R5bGVkX25hbWUpOworCX0KKyAgICB9CisKKyAgICBnX2ZyZWUoc2R1cCk7Cit9CisjZW5kaWYgLyogIUhBVkVfR1RLMiAqLworCisjaWZkZWYgSEFWRV9HVEsyCitzdGF0aWMgUGFuZ29FbmdpbmVTaGFwZSAqZGVmYXVsdF9zaGFwZV9lbmdpbmUgPSBOVUxMOworCisvKgorICogQ3JlYXRlIGEgbWFwIGZyb20gQVNDSUkgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgWzMyLDEyNl0gdG8gZ2x5cGhzCisgKiBvZiB0aGUgY3VycmVudCBmb250LiAgVGhpcyBpcyB1c2VkIGJ5IGd1aV9ndGsyX2RyYXdfc3RyaW5nKCkgdG8gc2tpcAorICogdGhlIGl0ZW1pemUgYW5kIHNoYXBpbmcgcHJvY2VzcyBmb3IgdGhlIG1vc3QgY29tbW9uIGNhc2UuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYXNjaWlfZ2x5cGhfdGFibGVfaW5pdCh2b2lkKQoreworICAgIGNoYXJfdQkgICAgYXNjaWlfY2hhcnNbMTI4XTsKKyAgICBQYW5nb0F0dHJMaXN0ICAgKmF0dHJfbGlzdDsKKyAgICBHTGlzdAkgICAgKml0ZW1fbGlzdDsKKyAgICBpbnQJCSAgICBpOworCisgICAgaWYgKGd1aS5hc2NpaV9nbHlwaHMgIT0gTlVMTCkKKwlwYW5nb19nbHlwaF9zdHJpbmdfZnJlZShndWkuYXNjaWlfZ2x5cGhzKTsKKyAgICBpZiAoZ3VpLmFzY2lpX2ZvbnQgIT0gTlVMTCkKKwlnX29iamVjdF91bnJlZihndWkuYXNjaWlfZm9udCk7CisKKyAgICBndWkuYXNjaWlfZ2x5cGhzID0gTlVMTDsKKyAgICBndWkuYXNjaWlfZm9udCAgID0gTlVMTDsKKworICAgIC8qIEZvciBzYWZldHksIGZpbGwgaW4gcXVlc3Rpb24gbWFya3MgZm9yIHRoZSBjb250cm9sIGNoYXJhY3RlcnMuICovCisgICAgZm9yIChpID0gMDsgaSA8IDMyOyArK2kpCisJYXNjaWlfY2hhcnNbaV0gPSAnPyc7CisgICAgZm9yICg7IGkgPCAxMjc7ICsraSkKKwlhc2NpaV9jaGFyc1tpXSA9IGk7CisgICAgYXNjaWlfY2hhcnNbaV0gPSAnPyc7CisKKyAgICBhdHRyX2xpc3QgPSBwYW5nb19hdHRyX2xpc3RfbmV3KCk7CisgICAgaXRlbV9saXN0ID0gcGFuZ29faXRlbWl6ZShndWkudGV4dF9jb250ZXh0LCAoY29uc3QgY2hhciAqKWFzY2lpX2NoYXJzLAorCQkJICAgICAgMCwgc2l6ZW9mKGFzY2lpX2NoYXJzKSwgYXR0cl9saXN0LCBOVUxMKTsKKworICAgIGlmIChpdGVtX2xpc3QgIT0gTlVMTCAmJiBpdGVtX2xpc3QtPm5leHQgPT0gTlVMTCkgLyogcGxheSBzYWZlICovCisgICAgeworCVBhbmdvSXRlbSAgICppdGVtOworCWludAkgICAgd2lkdGg7CisKKwlpdGVtICA9IChQYW5nb0l0ZW0gKilpdGVtX2xpc3QtPmRhdGE7CisJd2lkdGggPSBndWkuY2hhcl93aWR0aCAqIFBBTkdPX1NDQUxFOworCisJLyogUmVtZW1iZXIgdGhlIHNoYXBlIGVuZ2luZSB1c2VkIGZvciBBU0NJSS4gKi8KKwlkZWZhdWx0X3NoYXBlX2VuZ2luZSA9IGl0ZW0tPmFuYWx5c2lzLnNoYXBlX2VuZ2luZTsKKworCWd1aS5hc2NpaV9mb250ID0gaXRlbS0+YW5hbHlzaXMuZm9udDsKKwlnX29iamVjdF9yZWYoZ3VpLmFzY2lpX2ZvbnQpOworCisJZ3VpLmFzY2lpX2dseXBocyA9IHBhbmdvX2dseXBoX3N0cmluZ19uZXcoKTsKKworCXBhbmdvX3NoYXBlKChjb25zdCBjaGFyICopYXNjaWlfY2hhcnMsIHNpemVvZihhc2NpaV9jaGFycyksCisJCSAgICAmaXRlbS0+YW5hbHlzaXMsIGd1aS5hc2NpaV9nbHlwaHMpOworCisJZ19yZXR1cm5faWZfZmFpbChndWkuYXNjaWlfZ2x5cGhzLT5udW1fZ2x5cGhzID09IHNpemVvZihhc2NpaV9jaGFycykpOworCisJZm9yIChpID0gMDsgaSA8IGd1aS5hc2NpaV9nbHlwaHMtPm51bV9nbHlwaHM7ICsraSkKKwl7CisJICAgIFBhbmdvR2x5cGhHZW9tZXRyeSAqZ2VvbTsKKworCSAgICBnZW9tID0gJmd1aS5hc2NpaV9nbHlwaHMtPmdseXBoc1tpXS5nZW9tZXRyeTsKKwkgICAgZ2VvbS0+eF9vZmZzZXQgKz0gTUFYKDAsIHdpZHRoIC0gZ2VvbS0+d2lkdGgpIC8gMjsKKwkgICAgZ2VvbS0+d2lkdGggPSB3aWR0aDsKKwl9CisgICAgfQorCisgICAgZ19saXN0X2ZvcmVhY2goaXRlbV9saXN0LCAoR0Z1bmMpJnBhbmdvX2l0ZW1fZnJlZSwgTlVMTCk7CisgICAgZ19saXN0X2ZyZWUoaXRlbV9saXN0KTsKKyAgICBwYW5nb19hdHRyX2xpc3RfdW5yZWYoYXR0cl9saXN0KTsKK30KKyNlbmRpZiAvKiBIQVZFX0dUSzIgKi8KKworLyoKKyAqIEluaXRpYWxpemUgVmltIHRvIHVzZSB0aGUgZm9udCBvciBmb250c2V0IHdpdGggdGhlIGdpdmVuIG5hbWUuCisgKiBSZXR1cm4gRkFJTCBpZiB0aGUgZm9udCBjb3VsZCBub3QgYmUgbG9hZGVkLCBPSyBvdGhlcndpc2UuCisgKi8KKy8qQVJHU1VTRUQxKi8KKyAgICBpbnQKK2d1aV9tY2hfaW5pdF9mb250KGNoYXJfdSAqZm9udF9uYW1lLCBpbnQgZm9udHNldCkKK3sKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiAgICAqZm9udF9kZXNjOworICAgIFBhbmdvTGF5b3V0CQkgICAgKmxheW91dDsKKyAgICBpbnQJCQkgICAgd2lkdGg7CisKKyAgICAvKiBJZiBmb250X25hbWUgaXMgTlVMTCwgdGhpcyBtZWFucyB0byB1c2UgdGhlIGRlZmF1bHQsIHdoaWNoIHNob3VsZAorICAgICAqIGJlIHByZXNlbnQgb24gYWxsIHByb3BlciBQYW5nby9mb250Y29uZmlnIGluc3RhbGxhdGlvbnMuICovCisgICAgaWYgKGZvbnRfbmFtZSA9PSBOVUxMKQorCWZvbnRfbmFtZSA9IChjaGFyX3UgKilERUZBVUxUX0ZPTlQ7CisKKyAgICBmb250X2Rlc2MgPSBndWlfbWNoX2dldF9mb250KGZvbnRfbmFtZSwgRkFMU0UpOworCisgICAgaWYgKGZvbnRfZGVzYyA9PSBOVUxMKQorCXJldHVybiBGQUlMOworCisgICAgZ3VpX21jaF9mcmVlX2ZvbnQoZ3VpLm5vcm1fZm9udCk7CisgICAgZ3VpLm5vcm1fZm9udCA9IGZvbnRfZGVzYzsKKworICAgIHBhbmdvX2NvbnRleHRfc2V0X2ZvbnRfZGVzY3JpcHRpb24oZ3VpLnRleHRfY29udGV4dCwgZm9udF9kZXNjKTsKKworICAgIGxheW91dCA9IHBhbmdvX2xheW91dF9uZXcoZ3VpLnRleHRfY29udGV4dCk7CisgICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgIk1XIiwgMik7CisgICAgcGFuZ29fbGF5b3V0X2dldF9zaXplKGxheW91dCwgJndpZHRoLCBOVUxMKTsKKyAgICAvKgorICAgICAqIFNldCBjaGFyX3dpZHRoIHRvIGhhbGYgdGhlIHdpZHRoIG9idGFpbmVkIGZyb20gcGFuZ29fbGF5b3V0X2dldF9zaXplKCkKKyAgICAgKiBmb3IgQ0pLIGZpeGVkX3dpZHRoL2JpLXdpZHRoIGZvbnRzLiAgQW4gdW5wYXRjaGVkIHZlcnNpb24gb2YgWGZ0IGxlYWRzCisgICAgICogUGFuZ28gdG8gdXNlIHRoZSBzYW1lIHdpZHRoIGZvciBib3RoIG5vbi1DSksgY2hhcmFjdGVycyAoZS5nLiBMYXRpbgorICAgICAqIGxldHRlcnMgYW5kIG51bWJlcnMpIGFuZCBDSksgY2hhcmFjdGVycy4gIFRoaXMgcmVzdWx0cyBpbiAncyBwIGEgYyBlIGQKKyAgICAgKiBvIHUgdCcgcmVuZGVyaW5nIHdoZW4gYSBDSksgJ2ZpeGVkIHdpZHRoJyBmb250IGlzIHVzZWQuIFRvIHdvcmsgYXJvdW5kCisgICAgICogdGhhdCwgZGl2aWRlIHRoZSB3aWR0aCByZXR1cm5lZCBieSBQYW5nbyBieSAyIGlmIGNqa193aWR0aCBpcyBlcXVhbCB0bworICAgICAqIHdpZHRoIGZvciBDSksgZm9udHMuCisgICAgICoKKyAgICAgKiBGb3IgcmVsYXRlZCBidWdzLCBzZWU6CisgICAgICogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjE4CisgICAgICogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjI0CisgICAgICoKKyAgICAgKiBXaXRoIHRoaXMsIGZvciBhbGwgZm91ciBvZiB0aGUgZm9sbG93aW5nIGNhc2VzLCBWaW0gd29ya3MgZmluZToKKyAgICAgKgkgICBndWlmb250PUNKS19maXhlZF93aWR0aF9mb250CisgICAgICoJICAgZ3VpZm9udD1Ob25fQ0pLX2ZpeGVkX2ZvbnQKKyAgICAgKgkgICBndWlmb250PU5vbl9DSktfZml4ZWRfZm9udCxDSktfRml4ZWRfZm9udAorICAgICAqCSAgIGd1aWZvbnQ9Tm9uX0NKS19maXhlZF9mb250IGd1aWZvbnR3aWRlPUNKS19maXhlZF9mb250CisgICAgICovCisgICAgaWYgKGlzX2Nqa19mb250KGd1aS5ub3JtX2ZvbnQpKQorICAgIHsKKwlpbnQgY2prX3dpZHRoOworCisJLyogTWVhc3VyZSB0aGUgdGV4dCBleHRlbnQgb2YgVSs0RTAwIGFuZCBVKzRFOEMgKi8KKwlwYW5nb19sYXlvdXRfc2V0X3RleHQobGF5b3V0LCAiXDM0NFwyNzBcMjAwXDM0NFwyNzJcMjE0IiwgLTEpOworCXBhbmdvX2xheW91dF9nZXRfc2l6ZShsYXlvdXQsICZjamtfd2lkdGgsIE5VTEwpOworCisJaWYgKHdpZHRoID09IGNqa193aWR0aCkgIC8qIFhmdCBub3QgcGF0Y2hlZCAqLworCSAgICB3aWR0aCAvPSAyOworICAgIH0KKyAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOworCisgICAgZ3VpLmNoYXJfd2lkdGggPSAod2lkdGggLyAyICsgUEFOR09fU0NBTEUgLSAxKSAvIFBBTkdPX1NDQUxFOworCisgICAgLyogQSB6ZXJvIHdpZHRoIG1heSBjYXVzZSBhIGNyYXNoLglIYXBwZW5zIGZvciBzZW1pLWludmFsaWQgZm9udHNldHMuICovCisgICAgaWYgKGd1aS5jaGFyX3dpZHRoIDw9IDApCisJZ3VpLmNoYXJfd2lkdGggPSA4OworCisgICAgZ3VpX21jaF9hZGp1c3RfY2hhcnNpemUoKTsKKworICAgIC8qIFNldCB0aGUgZm9udG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgKi8KKyAgICBobF9zZXRfZm9udF9uYW1lKGZvbnRfbmFtZSk7CisKKyAgICBnZXRfc3R5bGVkX2ZvbnRfdmFyaWFudHMoKTsKKyAgICBhc2NpaV9nbHlwaF90YWJsZV9pbml0KCk7CisKKyAgICAvKiBBdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZCBpZiAnZ3VpZm9udHdpZGUnIGlzIGVxdWFsIHRvICdndWlmb250Jy4gKi8KKyAgICBpZiAoZ3VpLndpZGVfZm9udCAhPSBOVUxMCisJJiYgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9lcXVhbChndWkubm9ybV9mb250LCBndWkud2lkZV9mb250KSkKKyAgICB7CisJcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGd1aS53aWRlX2ZvbnQpOworCWd1aS53aWRlX2ZvbnQgPSBOVUxMOworICAgIH0KKworI2Vsc2UgLyogIUhBVkVfR1RLMiAqLworCisgICAgR2RrRm9udAkqZm9udCA9IE5VTEw7CisKKyMgaWZkZWYgRkVBVF9YRk9OVFNFVAorICAgIC8qIFRyeSBsb2FkaW5nIGEgZm9udHNldC4gIElmIHRoaXMgZmFpbHMgd2UgdHJ5IGxvYWRpbmcgYSBub3JtYWwgZm9udC4gKi8KKyAgICBpZiAoZm9udHNldCAmJiBmb250X25hbWUgIT0gTlVMTCkKKwlmb250ID0gZ3VpX21jaF9nZXRfZm9udHNldChmb250X25hbWUsIFRSVUUsIFRSVUUpOworCisgICAgaWYgKGZvbnQgPT0gTlVMTCkKKyMgZW5kaWYKKyAgICB7CisJLyogSWYgZm9udF9uYW1lIGlzIE5VTEwsIHRoaXMgbWVhbnMgdG8gdXNlIHRoZSBkZWZhdWx0LCB3aGljaCBzaG91bGQKKwkgKiBiZSBwcmVzZW50IG9uIGFsbCBYMTEgc2VydmVycy4gKi8KKwlpZiAoZm9udF9uYW1lID09IE5VTEwpCisJICAgIGZvbnRfbmFtZSA9IChjaGFyX3UgKilERUZBVUxUX0ZPTlQ7CisJZm9udCA9IGd1aV9tY2hfZ2V0X2ZvbnQoZm9udF9uYW1lLCBGQUxTRSk7CisgICAgfQorCisgICAgaWYgKGZvbnQgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIGd1aV9tY2hfZnJlZV9mb250KGd1aS5ub3JtX2ZvbnQpOworIyBpZmRlZiBGRUFUX1hGT05UU0VUCisgICAgZ3VpX21jaF9mcmVlX2ZvbnRzZXQoZ3VpLmZvbnRzZXQpOworICAgIGlmIChmb250LT50eXBlID09IEdES19GT05UX0ZPTlRTRVQpCisgICAgeworCWd1aS5ub3JtX2ZvbnQgPSBOT0ZPTlQ7CisJZ3VpLmZvbnRzZXQgPSAoR3VpRm9udHNldClmb250OworCS8qIFVzZSB0d28gYnl0ZXMsIHRoaXMgd29ya3MgYXJvdW5kIHRoZSBwcm9ibGVtIHRoYXQgdGhlIHJlc3VsdCB3b3VsZAorCSAqIGJlIHplcm8gaWYgbm8gOC1iaXQgZm9udCB3YXMgZm91bmQuICovCisJZ3VpLmNoYXJfd2lkdGggPSBnZGtfc3RyaW5nX3dpZHRoKGZvbnQsICJ4VyIpIC8gMjsKKyAgICB9CisgICAgZWxzZQorIyBlbmRpZgorICAgIHsKKwlndWkubm9ybV9mb250ID0gZm9udDsKKyMgaWZkZWYgRkVBVF9YRk9OVFNFVAorCWd1aS5mb250c2V0ID0gTk9GT05UU0VUOworIyBlbmRpZgorCWd1aS5jaGFyX3dpZHRoID0gKChYRm9udFN0cnVjdCAqKQorCQkJCSAgICAgIEdES19GT05UX1hGT05UKGZvbnQpKS0+bWF4X2JvdW5kcy53aWR0aDsKKyAgICB9CisKKyAgICAvKiBBIHplcm8gd2lkdGggbWF5IGNhdXNlIGEgY3Jhc2guCUhhcHBlbnMgZm9yIHNlbWktaW52YWxpZCBmb250c2V0cy4gKi8KKyAgICBpZiAoZ3VpLmNoYXJfd2lkdGggPD0gMCkKKwlndWkuY2hhcl93aWR0aCA9IDg7CisKKyAgICBndWkuY2hhcl9oZWlnaHQgPSBmb250LT5hc2NlbnQgKyBmb250LT5kZXNjZW50ICsgcF9saW5lc3BhY2U7CisgICAgZ3VpLmNoYXJfYXNjZW50ID0gZm9udC0+YXNjZW50ICsgcF9saW5lc3BhY2UgLyAyOworCisgICAgLyogQSBub3QtcG9zaXRpdmUgdmFsdWUgb2YgY2hhcl9oZWlnaHQgbWF5IGNyYXNoIFZpbS4gIE9ubHkgaGFwcGVucworICAgICAqIGlmICdsaW5lc3BhY2UnIGlzIG5lZ2F0aXZlICh3aGljaCBkb2VzIG1ha2Ugc2Vuc2Ugc29tZXRpbWVzKS4gKi8KKyAgICBndWkuY2hhcl9hc2NlbnQgPSBNQVgoZ3VpLmNoYXJfYXNjZW50LCAwKTsKKyAgICBndWkuY2hhcl9oZWlnaHQgPSBNQVgoZ3VpLmNoYXJfaGVpZ2h0LCBndWkuY2hhcl9hc2NlbnQgKyAxKTsKKworICAgIC8qIFNldCB0aGUgZm9udG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgKi8KKyAgICBobF9zZXRfZm9udF9uYW1lKGZvbnRfbmFtZSk7CisKKyAgICBpZiAoZm9udC0+dHlwZSAhPSBHREtfRk9OVF9GT05UU0VUKQorCWdldF9zdHlsZWRfZm9udF92YXJpYW50cyhmb250X25hbWUpOworCisgICAgLyogU3luY2hyb25pemUgdGhlIGZvbnRzIHVzZWQgaW4gdXNlciBpbnB1dCBkaWFsb2dzLCBzaW5jZSBvdGhlcndpc2UKKyAgICAgKiBzZWFyY2gvcmVwbGFjZSB3aWxsIGJlIGVzcC4gYW5ub3lpbmcgaW4gY2FzZSBvZiBpbnRlcm5hdGlvbmFsIGZvbnQKKyAgICAgKiB1c2FnZS4KKyAgICAgKi8KKyAgICBndWlfZ3RrX3N5bmNoX2ZvbnRzKCk7CisKKyMgaWZkZWYgRkVBVF9YSU0KKyAgICAvKiBBZGp1c3QgaW5wdXQgbWFuYWdlbWVudCBiZWhhdmlvdXIgdG8gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgbmV3CisgICAgICogZm9udHNldCAqLworICAgIHhpbV9kZWNpZGVfaW5wdXRfc3R5bGUoKTsKKyAgICBpZiAoeGltX2dldF9zdGF0dXNfYXJlYV9oZWlnaHQoKSkKKyAgICB7CisJLyogU3RhdHVzIGFyZWEgaXMgcmVxdWlyZWQuICBKdXN0IGNyZWF0ZSB0aGUgZW1wdHkgY29udGFpbmVyIHNvIHRoYXQKKwkgKiBtYWlud2luIHdpbGwgYWxsb2NhdGUgdGhlIGV4dHJhIHNwYWNlIGZvciBzdGF0dXMgYXJlYS4gKi8KKwlHdGtXaWRnZXQgKmFsaWdubWVudCA9IGd0a19hbGlnbm1lbnRfbmV3KChnZmxvYXQpMC41LCAoZ2Zsb2F0KTAuNSwKKwkJCQkJCSAgICAoZ2Zsb2F0KTEuMCwgKGdmbG9hdCkxLjApOworCisJZ3RrX3dpZGdldF9zZXRfdXNpemUoYWxpZ25tZW50LCAyMCwgZ3VpLmNoYXJfaGVpZ2h0ICsgMik7CisJZ3RrX2JveF9wYWNrX2VuZChHVEtfQk9YKEdUS19CSU4oZ3VpLm1haW53aW4pLT5jaGlsZCksCisJCQkgYWxpZ25tZW50LCBGQUxTRSwgRkFMU0UsIDApOworCWd0a193aWRnZXRfc2hvdyhhbGlnbm1lbnQpOworICAgIH0KKyMgZW5kaWYKKyNlbmRpZiAvKiAhSEFWRV9HVEsyICovCisKKyAgICAvKiBQcmVzZXJ2ZSB0aGUgbG9naWNhbCBkaW1lbnNpb25zIG9mIHRoZSBzY3JlZW4uICovCisgICAgdXBkYXRlX3dpbmRvd19tYW5hZ2VyX2hpbnRzKCk7CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIGZvbnQgIm5hbWUiLgorICogUmV0dXJuIHplcm8gZm9yIGZhaWx1cmUuCisgKi8KKyAgICBHdWlGb250CitndWlfbWNoX2dldF9mb250KGNoYXJfdSAqbmFtZSwgaW50IHJlcG9ydF9lcnJvcikKK3sKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiAgICAqZm9udDsKKyNlbHNlCisgICAgR2RrRm9udAkJICAgICpmb250OworI2VuZGlmCisKKyAgICAvKiBjYW4ndCBkbyB0aGlzIHdoZW4gR1VJIGlzIG5vdCBydW5uaW5nICovCisgICAgaWYgKCFndWkuaW5fdXNlIHx8IG5hbWUgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworI2lmZGVmIEhBVkVfR1RLMgorICAgIGlmIChvdXRwdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKyAgICB7CisJY2hhcl91ICpidWY7CisKKwlidWYgPSBzdHJpbmdfY29udmVydCgmb3V0cHV0X2NvbnYsIG5hbWUsIE5VTEwpOworCWlmIChidWYgIT0gTlVMTCkKKwl7CisJICAgIGZvbnQgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2Zyb21fc3RyaW5nKChjb25zdCBjaGFyICopYnVmKTsKKwkgICAgdmltX2ZyZWUoYnVmKTsKKwl9CisJZWxzZQorCSAgICBmb250ID0gTlVMTDsKKyAgICB9CisgICAgZWxzZQorCWZvbnQgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2Zyb21fc3RyaW5nKChjb25zdCBjaGFyICopbmFtZSk7CisKKyAgICBpZiAoZm9udCAhPSBOVUxMKQorICAgIHsKKwlQYW5nb0ZvbnQgKnJlYWxfZm9udDsKKworCS8qIHBhbmdvX2NvbnRleHRfbG9hZF9mb250KCkgYmFpbHMgb3V0IGlmIG5vIGZvbnQgc2l6ZSBpcyBzZXQgKi8KKwlpZiAocGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfc2l6ZShmb250KSA8PSAwKQorCSAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF9zaXplKGZvbnQsIDEwICogUEFOR09fU0NBTEUpOworCisJcmVhbF9mb250ID0gcGFuZ29fY29udGV4dF9sb2FkX2ZvbnQoZ3VpLnRleHRfY29udGV4dCwgZm9udCk7CisKKwlpZiAocmVhbF9mb250ID09IE5VTEwpCisJeworCSAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZm9udCk7CisJICAgIGZvbnQgPSBOVUxMOworCX0KKwllbHNlCisJICAgIGdfb2JqZWN0X3VucmVmKHJlYWxfZm9udCk7CisgICAgfQorI2Vsc2UKKyAgICBmb250ID0gZ2RrX2ZvbnRfbG9hZCgoY29uc3QgZ2NoYXIgKiluYW1lKTsKKyNlbmRpZgorCisgICAgaWYgKGZvbnQgPT0gTlVMTCkKKyAgICB7CisJaWYgKHJlcG9ydF9lcnJvcikKKwkgICAgRU1TRzIoXyhlX2ZvbnQpLCBuYW1lKTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICAvKgorICAgICAqIFRoZSBmaXhlZC13aWR0aCBjaGVjayBoYXMgYmVlbiBkaXNhYmxlZCBmb3IgR1RLKyAyLiAgUmF0aW9uYWxlOgorICAgICAqCisgICAgICoJIC0gVGhlIGNoZWNrIHRlbmRzIHRvIHJlcG9ydCBmYWxzZSBwb3NpdGl2ZXMsIHBhcnRpY3VsYXJseQorICAgICAqCSAgIGluIG5vbi1MYXRpbiBsb2NhbGVzIG9yIHdpdGggb2xkIFggZm9udHMuCisgICAgICoJIC0gVGhhbmtzIHRvIG91ciBmaXhlZC13aWR0aCBoYWNrIGluIGd1aV9ndGsyX2RyYXdfc3RyaW5nKCksCisgICAgICoJICAgR1RLKyAyIFZpbSBpcyBhY3R1YWxseSBjYXBhYmxlIG9mIGRpc3BsYXlpbmcgdmFyaWFibGUgd2lkdGgKKyAgICAgKgkgICBmb250cy4gIFRob3NlIHdpbGwganVzdCBiZSBzcGFjZWQgb3V0IGxpa2UgaW4gQUEgeHRlcm0uCisgICAgICoJIC0gRmFpbGluZyBoZXJlIGZvciB0aGUgZGVmYXVsdCBmb250IGNhdXNlcyBHVUkgc3RhcnR1cCB0byBmYWlsCisgICAgICoJICAgZXZlbiB3aXRoIHdpcGVkIG91dCBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAqCSAtIFRoZSBmb250IGRpYWxvZyBkaXNwbGF5cyBhbGwgZm9udHMgdW5maWx0ZXJlZCwgYW5kIGl0J3MgcmF0aGVyCisgICAgICoJICAgYW5ub3lpbmcgaWYgOTUlIG9mIHRoZSBsaXN0ZWQgZm9udHMgcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlLgorICAgICAqLworIyBpZiAwCisgICAgeworCS8qIENoZWNrIHRoYXQgdGhpcyBpcyBhIG1vbm8tc3BhY2VkIGZvbnQuICBOYXR1cmFsbHksIHRoaXMgaXMgYSBiaXQKKwkgKiBoYWNraXNoIC0tIGZpeGVkLXdpZHRoIGlzbid0IHJlYWxseSBzdWl0YWJsZSBmb3IgaTE4biB0ZXh0IDovICovCisJUGFuZ29MYXlvdXQJKmxheW91dDsKKwl1bnNpZ25lZCBpbnQJaTsKKwlpbnQJCWxhc3Rfd2lkdGggICA9IC0xOworCWNvbnN0IGNoYXIJdGVzdF9jaGFyc1tdID0geyAnVycsICdpJywgJywnLCAneCcgfTsgLyogYXJiaXRyYXJ5ICovCisKKwlsYXlvdXQgPSBwYW5nb19sYXlvdXRfbmV3KGd1aS50ZXh0X2NvbnRleHQpOworCXBhbmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlwdGlvbihsYXlvdXQsIGZvbnQpOworCisJZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyh0ZXN0X2NoYXJzKTsgKytpKQorCXsKKwkgICAgaW50IHdpZHRoOworCisJICAgIHBhbmdvX2xheW91dF9zZXRfdGV4dChsYXlvdXQsICZ0ZXN0X2NoYXJzW2ldLCAxKTsKKwkgICAgcGFuZ29fbGF5b3V0X2dldF9zaXplKGxheW91dCwgJndpZHRoLCBOVUxMKTsKKworCSAgICBpZiAobGFzdF93aWR0aCA+PSAwICYmIHdpZHRoICE9IGxhc3Rfd2lkdGgpCisJICAgIHsKKwkJcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGZvbnQpOworCQlmb250ID0gTlVMTDsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICBsYXN0X3dpZHRoID0gd2lkdGg7CisJfQorCisJZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKKyAgICB9CisjIGVuZGlmCisjZWxzZSAvKiAhSEFWRV9HVEsyICovCisgICAgeworCVhGb250U3RydWN0ICp4Zm9udDsKKworCS8qIHJlZmVyZW5jZSB0aGlzIGZvbnQgYXMgYmVpbmcgaW4gdXNlICovCisJZ2RrX2ZvbnRfcmVmKGZvbnQpOworCisJLyogQ2hlY2sgdGhhdCB0aGlzIGlzIGEgbW9uby1zcGFjZWQgZm9udC4KKwkgKi8KKwl4Zm9udCA9IChYRm9udFN0cnVjdCAqKSBHREtfRk9OVF9YRk9OVChmb250KTsKKworCWlmICh4Zm9udC0+bWF4X2JvdW5kcy53aWR0aCAhPSB4Zm9udC0+bWluX2JvdW5kcy53aWR0aCkKKwl7CisJICAgIGdka19mb250X3VucmVmKGZvbnQpOworCSAgICBmb250ID0gTlVMTDsKKwl9CisgICAgfQorI2VuZGlmIC8qICFIQVZFX0dUSzIgKi8KKworI2lmICFkZWZpbmVkKEhBVkVfR1RLMikgfHwgMCAvKiBkaXNhYmxlZCBmb3IgR1RLKyAyLCBzZWUgYWJvdmUgKi8KKyAgICBpZiAoZm9udCA9PSBOVUxMICYmIHJlcG9ydF9lcnJvcikKKwlFTVNHMihfKGVfZm9udHdpZHRoKSwgbmFtZSk7CisjZW5kaWYKKworICAgIHJldHVybiBmb250OworfQorCisjaWYgIWRlZmluZWQoSEFWRV9HVEsyKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFNldCB0aGUgY3VycmVudCB0ZXh0IGZvbnQuCisgKiBTaW5jZSB3ZSBjcmVhdGUgYWxsIEdDIG9uIGRlbWFuZCwgd2UgdXNlIGp1c3QgZ3VpLmN1cnJlbnRfZm9udCB0bworICogaW5kaWNhdGUgdGhlIGRlc2lyZWQgY3VycmVudCBmb250LgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZm9udChHdWlGb250IGZvbnQpCit7CisgICAgZ3VpLmN1cnJlbnRfZm9udCA9IGZvbnQ7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9YRk9OVFNFVCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBTZXQgdGhlIGN1cnJlbnQgdGV4dCBmb250c2V0LgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZm9udHNldChHdWlGb250c2V0IGZvbnRzZXQpCit7CisgICAgZ3VpLmN1cnJlbnRfZm9udCA9IGZvbnRzZXQ7Cit9CisjZW5kaWYKKworLyoKKyAqIElmIGEgZm9udCBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCwgZnJlZSBpdHMgc3RydWN0dXJlLgorICovCisgICAgdm9pZAorZ3VpX21jaF9mcmVlX2ZvbnQoR3VpRm9udCBmb250KQoreworICAgIGlmIChmb250ICE9IE5PRk9OVCkKKyNpZmRlZiBIQVZFX0dUSzIKKwlwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZm9udCk7CisjZWxzZQorCWdka19mb250X3VucmVmKGZvbnQpOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKEZFQVRfWEZPTlRTRVQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogSWYgYSBmb250c2V0IGlzIG5vdCBnb2luZyB0byBiZSB1c2VkLCBmcmVlIGl0cyBzdHJ1Y3R1cmUuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2ZyZWVfZm9udHNldChHdWlGb250c2V0IGZvbnRzZXQpCit7CisgICAgaWYgKGZvbnRzZXQgIT0gTk9GT05UU0VUKQorCWdka19mb250X3VucmVmKGZvbnRzZXQpOworfQorI2VuZGlmCisKKworLyoKKyAqIFJldHVybiB0aGUgUGl4ZWwgdmFsdWUgKGNvbG9yKSBmb3IgdGhlIGdpdmVuIGNvbG9yIG5hbWUuICBUaGlzIHJvdXRpbmUgd2FzCisgKiBwcmV0dHkgbXVjaCB0YWtlbiBmcm9tIGV4YW1wbGUgY29kZSBpbiB0aGUgU2lsaWNvbiBHcmFwaGljcyBPU0YvTW90aWYKKyAqIFByb2dyYW1tZXIncyBHdWlkZS4KKyAqIFJldHVybiBJTlZBTENPTE9SIGZvciBlcnJvci4KKyAqLworICAgIGd1aWNvbG9yX1QKK2d1aV9tY2hfZ2V0X2NvbG9yKGNoYXJfdSAqbmFtZSkKK3sKKyAgICAvKiBBIG51bWJlciBvZiBjb2xvcnMgdGhhdCBzb21lIFgxMSBzeXN0ZW1zIGRvbid0IGhhdmUgKi8KKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdmltbmFtZXNbXVsyXSA9CisgICAgeworCXsiTGlnaHRSZWQiLAkgIiNGRkJCQkIifSwKKwl7IkxpZ2h0R3JlZW4iLAkgIiM4OEZGODgifSwKKwl7IkxpZ2h0TWFnZW50YSIsICIjRkZCQkZGIn0sCisJeyJEYXJrQ3lhbiIsCSAiIzAwODg4OCJ9LAorCXsiRGFya0JsdWUiLAkgIiMwMDAwQkIifSwKKwl7IkRhcmtSZWQiLAkgIiNCQjAwMDAifSwKKwl7IkRhcmtNYWdlbnRhIiwgICIjQkIwMEJCIn0sCisJeyJEYXJrR3JleSIsCSAiI0JCQkJCQiJ9LAorCXsiRGFya1llbGxvdyIsCSAiI0JCQkIwMCJ9LAorCXtOVUxMLCBOVUxMfQorICAgIH07CisKKyAgICBpZiAoIWd1aS5pbl91c2UpCQkvKiBjYW4ndCBkbyB0aGlzIHdoZW4gR1VJIG5vdCBydW5uaW5nICovCisJcmV0dXJuIElOVkFMQ09MT1I7CisKKyAgICB3aGlsZSAobmFtZSAhPSBOVUxMKQorICAgIHsKKwlHZGtDb2xvciAgICBjb2xvcjsKKwlpbnQJICAgIHBhcnNlZDsKKwlpbnQJICAgIGk7CisKKwlwYXJzZWQgPSBnZGtfY29sb3JfcGFyc2UoKGNvbnN0IGNoYXIgKiluYW1lLCAmY29sb3IpOworCisjaWZuZGVmIEhBVkVfR1RLMiAvKiBvaGgsIGxvdmVseSBHVEsrIDIsIGVhc2VzIG91ciBwYWluIDopICovCisJLyoKKwkgKiBTaW5jZSB3ZSBoYXZlIGFscmVhZHkgY2FsbGVkIGd0a19zZXRfbG9jYWxlIGhlcmUgdGhlIGJ1Z2dlcgorCSAqIFhQYXJzZUNvbG9yIHdpbGwgYWNjZXB0IG9ubHkgZXhwbGljaXQgY29sb3IgbmFtZXMgaW4gdGhlIGxhbmd1YWdlCisJICogb2YgdGhlIGN1cnJlbnQgbG9jYWxlLiAgSG93ZXZlciB0aGlzIHdpbGwgaW50ZXJmZXJyZSB3aXRoOgorCSAqIDEuIFZpbSdzIGdsb2JhbCBzdGFydHVwIGZpbGVzCisJICogMi4gRXhwbGljaXQgY29sb3IgbmFtZXMgaW4gLnZpbXJjCisJICoKKwkgKiBUaGVyZWZvcmUgd2UgZmlyc3QgdHJ5IHRvIHBhcnNlIHRoZSBjb2xvciBpbiB0aGUgY3VycmVudCBsb2NhbGUgYW5kCisJICogaWYgaXQgZmFpbHMsIHdlIGZhbGwgYmFjayB0byB0aGUgcG9ydGFibGUgIkMiIG9uZS4KKwkgKi8KKwlpZiAoIXBhcnNlZCkKKwl7CisJICAgIGNoYXIgKmN1cnJlbnQ7CisKKwkgICAgY3VycmVudCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworCSAgICBpZiAoY3VycmVudCAhPSBOVUxMKQorCSAgICB7CisJCWNoYXIgKnNhdmVkOworCisJCXNhdmVkID0gZ19zdHJkdXAoY3VycmVudCk7CisJCXNldGxvY2FsZShMQ19BTEwsICJDIik7CisKKwkJcGFyc2VkID0gZ2RrX2NvbG9yX3BhcnNlKChjb25zdCBnY2hhciAqKW5hbWUsICZjb2xvcik7CisKKwkJc2V0bG9jYWxlKExDX0FMTCwgc2F2ZWQpOworCQlndGtfc2V0X2xvY2FsZSgpOworCisJCWdfZnJlZShzYXZlZCk7CisJICAgIH0KKwl9CisjZW5kaWYgLyogIUhBVkVfR1RLMiAqLworCisJaWYgKHBhcnNlZCkKKwl7CisjaWZkZWYgSEFWRV9HVEsyCisJICAgIGdka19jb2xvcm1hcF9hbGxvY19jb2xvcihndGtfd2lkZ2V0X2dldF9jb2xvcm1hcChndWkuZHJhd2FyZWEpLAorCQkJCSAgICAgJmNvbG9yLCBGQUxTRSwgVFJVRSk7CisjZWxzZQorCSAgICBnZGtfY29sb3JfYWxsb2MoZ3RrX3dpZGdldF9nZXRfY29sb3JtYXAoZ3VpLmRyYXdhcmVhKSwgJmNvbG9yKTsKKyNlbmRpZgorCSAgICByZXR1cm4gKGd1aWNvbG9yX1QpY29sb3IucGl4ZWw7CisJfQorCS8qIGFkZCBhIGZldyBidWlsdGluIG5hbWVzIGFuZCB0cnkgYWdhaW4gKi8KKwlmb3IgKGkgPSAwOyA7ICsraSkKKwl7CisJICAgIGlmICh2aW1uYW1lc1tpXVswXSA9PSBOVUxMKQorCSAgICB7CisJCW5hbWUgPSBOVUxMOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoU1RSSUNNUChuYW1lLCB2aW1uYW1lc1tpXVswXSkgPT0gMCkKKwkgICAgeworCQluYW1lID0gKGNoYXJfdSAqKXZpbW5hbWVzW2ldWzFdOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICByZXR1cm4gSU5WQUxDT0xPUjsKK30KKworLyoKKyAqIFNldCB0aGUgY3VycmVudCB0ZXh0IGZvcmVncm91bmQgY29sb3IuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9mZ19jb2xvcihndWljb2xvcl9UIGNvbG9yKQoreworICAgIGd1aS5mZ2NvbG9yLT5waXhlbCA9ICh1bnNpZ25lZCBsb25nKWNvbG9yOworfQorCisvKgorICogU2V0IHRoZSBjdXJyZW50IHRleHQgYmFja2dyb3VuZCBjb2xvci4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2JnX2NvbG9yKGd1aWNvbG9yX1QgY29sb3IpCit7CisgICAgZ3VpLmJnY29sb3ItPnBpeGVsID0gKHVuc2lnbmVkIGxvbmcpY29sb3I7Cit9CisKKyNpZmRlZiBIQVZFX0dUSzIKKy8qCisgKiBGdW5jdGlvbi1saWtlIGNvbnZlbmllbmNlIG1hY3JvIGZvciB0aGUgc2FrZSBvZiBlZmZpY2llbmN5LgorICovCisjZGVmaW5lIElOU0VSVF9QQU5HT19BVFRSKEF0dHJpYnV0ZSwgQXR0ckxpc3QsIFN0YXJ0LCBFbmQpICBcCisgICAgR19TVE1UX1NUQVJUewkJCQkJICAgIFwKKwlQYW5nb0F0dHJpYnV0ZSAqdG1wX2F0dHJfOwkJCSAgICBcCisJdG1wX2F0dHJfID0gKEF0dHJpYnV0ZSk7CQkJICAgIFwKKwl0bXBfYXR0cl8tPnN0YXJ0X2luZGV4ID0gKFN0YXJ0KTsJCSAgICBcCisJdG1wX2F0dHJfLT5lbmRfaW5kZXggPSAoRW5kKTsJCQkgICAgXAorCXBhbmdvX2F0dHJfbGlzdF9pbnNlcnQoKEF0dHJMaXN0KSwgdG1wX2F0dHJfKTsJICAgIFwKKyAgICB9R19TVE1UX0VORAorCisgICAgc3RhdGljIHZvaWQKK2FwcGx5X3dpZGVfZm9udF9hdHRyKGNoYXJfdSAqcywgaW50IGxlbiwgUGFuZ29BdHRyTGlzdCAqYXR0cl9saXN0KQoreworICAgIGNoYXJfdSAgKnN0YXJ0ID0gTlVMTDsKKyAgICBjaGFyX3UgICpwOworICAgIGludAkgICAgdWM7CisKKyAgICBmb3IgKHAgPSBzOyBwIDwgcyArIGxlbjsgcCArPSB1dGZfYnl0ZTJsZW4oKnApKQorICAgIHsKKwl1YyA9IHV0Zl9wdHIyY2hhcihwKTsKKworCWlmIChzdGFydCA9PSBOVUxMKQorCXsKKwkgICAgaWYgKHVjID49IDB4ODAgJiYgdXRmX2NoYXIyY2VsbHModWMpID09IDIpCisJCXN0YXJ0ID0gcDsKKwl9CisJZWxzZSBpZiAodWMgPCAweDgwIC8qIG9wdGltaXphdGlvbiBzaG9ydGN1dCAqLworCQkgfHwgKHV0Zl9jaGFyMmNlbGxzKHVjKSAhPSAyICYmICF1dGZfaXNjb21wb3NpbmcodWMpKSkKKwl7CisJICAgIElOU0VSVF9QQU5HT19BVFRSKHBhbmdvX2F0dHJfZm9udF9kZXNjX25ldyhndWkud2lkZV9mb250KSwKKwkJCSAgICAgIGF0dHJfbGlzdCwgc3RhcnQgLSBzLCBwIC0gcyk7CisJICAgIHN0YXJ0ID0gTlVMTDsKKwl9CisgICAgfQorCisgICAgaWYgKHN0YXJ0ICE9IE5VTEwpCisJSU5TRVJUX1BBTkdPX0FUVFIocGFuZ29fYXR0cl9mb250X2Rlc2NfbmV3KGd1aS53aWRlX2ZvbnQpLAorCQkJICBhdHRyX2xpc3QsIHN0YXJ0IC0gcywgbGVuKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2NvdW50X2NsdXN0ZXJfY2VsbHMoY2hhcl91ICpzLCBQYW5nb0l0ZW0gKml0ZW0sCisJCSAgICBQYW5nb0dseXBoU3RyaW5nKiBnbHlwaHMsIGludCBpLAorCQkgICAgaW50ICpjbHVzdGVyX3dpZHRoLAorCQkgICAgaW50ICpsYXN0X2dseXBoX3JiZWFyaW5nKQoreworICAgIGNoYXJfdSAgKnA7CisgICAgaW50CSAgICBuZXh0OwkvKiBnbHlwaCBzdGFydCBpbmRleCBvZiBuZXh0IGNsdXN0ZXIgKi8KKyAgICBpbnQJICAgIHN0YXJ0LCBlbmQ7IC8qIHN0cmluZyBzZWdtZW50IG9mIGN1cnJlbnQgY2x1c3RlciAqLworICAgIGludAkgICAgd2lkdGg7CS8qIHJlYWwgY2x1c3RlciB3aWR0aCBpbiBQYW5nbyB1bml0cyAqLworICAgIGludAkgICAgdWM7CisgICAgaW50CSAgICBjZWxsY291bnQgPSAwOworCisgICAgd2lkdGggPSBnbHlwaHMtPmdseXBoc1tpXS5nZW9tZXRyeS53aWR0aDsKKworICAgIGZvciAobmV4dCA9IGkgKyAxOyBuZXh0IDwgZ2x5cGhzLT5udW1fZ2x5cGhzOyArK25leHQpCisgICAgeworCWlmIChnbHlwaHMtPmdseXBoc1tuZXh0XS5hdHRyLmlzX2NsdXN0ZXJfc3RhcnQpCisJICAgIGJyZWFrOworCWVsc2UgaWYgKGdseXBocy0+Z2x5cGhzW25leHRdLmdlb21ldHJ5LndpZHRoID4gd2lkdGgpCisJICAgIHdpZHRoID0gZ2x5cGhzLT5nbHlwaHNbbmV4dF0uZ2VvbWV0cnkud2lkdGg7CisgICAgfQorCisgICAgc3RhcnQgPSBpdGVtLT5vZmZzZXQgKyBnbHlwaHMtPmxvZ19jbHVzdGVyc1tpXTsKKyAgICBlbmQgICA9IGl0ZW0tPm9mZnNldCArICgobmV4dCA8IGdseXBocy0+bnVtX2dseXBocykgPworCQkJICAgIGdseXBocy0+bG9nX2NsdXN0ZXJzW25leHRdIDogaXRlbS0+bGVuZ3RoKTsKKworICAgIGZvciAocCA9IHMgKyBzdGFydDsgcCA8IHMgKyBlbmQ7IHAgKz0gdXRmX2J5dGUybGVuKCpwKSkKKyAgICB7CisJdWMgPSB1dGZfcHRyMmNoYXIocCk7CisJaWYgKHVjIDwgMHg4MCkKKwkgICAgKytjZWxsY291bnQ7CisJZWxzZSBpZiAoIXV0Zl9pc2NvbXBvc2luZyh1YykpCisJICAgIGNlbGxjb3VudCArPSB1dGZfY2hhcjJjZWxscyh1Yyk7CisgICAgfQorCisgICAgaWYgKGxhc3RfZ2x5cGhfcmJlYXJpbmcgIT0gTlVMTAorCSAgICAmJiBjZWxsY291bnQgPiAwICYmIG5leHQgPT0gZ2x5cGhzLT5udW1fZ2x5cGhzKQorICAgIHsKKwlQYW5nb1JlY3RhbmdsZSBpbmtfcmVjdDsKKwkvKgorCSAqIElmIGEgY2VydGFpbiBjb21iaW5pbmcgbWFyayBoYWQgdG8gYmUgdGFrZW4gZnJvbSBhIG5vbi1tb25vc3BhY2UKKwkgKiBmb250LCB3ZSBoYXZlIHRvIGNvbXBlbnNhdGUgbWFudWFsbHkgYnkgYWRhcHRpbmcgeF9vZmZzZXQgYWNjb3JkaW5nCisJICogdG8gdGhlIGluayBleHRlbnRzIG9mIHRoZSBwcmV2aW91cyBnbHlwaC4KKwkgKi8KKwlwYW5nb19mb250X2dldF9nbHlwaF9leHRlbnRzKGl0ZW0tPmFuYWx5c2lzLmZvbnQsCisJCQkJICAgICBnbHlwaHMtPmdseXBoc1tpXS5nbHlwaCwKKwkJCQkgICAgICZpbmtfcmVjdCwgTlVMTCk7CisKKwlpZiAoUEFOR09fUkJFQVJJTkcoaW5rX3JlY3QpID4gMCkKKwkgICAgKmxhc3RfZ2x5cGhfcmJlYXJpbmcgPSBQQU5HT19SQkVBUklORyhpbmtfcmVjdCk7CisgICAgfQorCisgICAgaWYgKGNlbGxjb3VudCA+IDApCisJKmNsdXN0ZXJfd2lkdGggPSB3aWR0aDsKKworICAgIHJldHVybiBjZWxsY291bnQ7Cit9CisKKy8qCisgKiBJZiB0aGVyZSBhcmUgb25seSBjb21iaW5pbmcgY2hhcmFjdGVycyBpbiB0aGUgY2x1c3Rlciwgd2UgY2Fubm90IGp1c3QKKyAqIGNoYW5nZSB0aGUgd2lkdGggb2YgdGhlIHByZXZpb3VzIGdseXBoIHNpbmNlIHRoZXJlIGlzIG5vbmUuCVRoZXJlZm9yZQorICogc29tZSBndWVzc3dvcmsgaXMgbmVlZGVkLgorICoKKyAqIElmIGlua19yZWN0LnggaXMgbmVnYXRpdmUgUGFuZ28gYXBwYXJlbnRseSBoYXMgdGFrZW4gY2FyZSBvZiB0aGUgY29tcG9zaW5nCisgKiBieSBpdHNlbGYuICBBY3R1YWxseSBzZXR0aW5nIHhfb2Zmc2V0ID0gMCBzaG91bGQgYmUgc3VmZmljaWVudCB0aGVuLCBidXQgZHVlCisgKiB0byBwcm9ibGVtcyB3aXRoIGNvbXBvc2luZyBmcm9tIGRpZmZlcmVudCBmb250cyB3ZSBzdGlsbCBuZWVkIHRvIGZpbmUtdHVuZQorICogeF9vZmZzZXQgdG8gYXZvaWQgdWdseW5lc3MuCisgKgorICogSWYgaW5rX3JlY3QueCBpcyBub3QgbmVnYXRpdmUsIGZvcmNlIG92ZXJzdHJpa2luZyBieSBwb2ludGluZyB4X29mZnNldCB0bworICogdGhlIHBvc2l0aW9uIG9mIHRoZSBwcmV2aW91cyBnbHlwaC4JQXBwYXJlbnRseSB0aGlzIGhhcHBlbnMgb25seSB3aXRoIG9sZAorICogWCBmb250cyB3aGljaCBkb24ndCBwcm92aWRlIHRoZSBzcGVjaWFsIGNvbWJpbmluZyBpbmZvcm1hdGlvbiBuZWVkZWQgYnkKKyAqIFBhbmdvLgorICovCisgICAgc3RhdGljIHZvaWQKK3NldHVwX3plcm9fd2lkdGhfY2x1c3RlcihQYW5nb0l0ZW0gKml0ZW0sIFBhbmdvR2x5cGhJbmZvICpnbHlwaCwKKwkJCSBpbnQgbGFzdF9jZWxsY291bnQsIGludCBsYXN0X2NsdXN0ZXJfd2lkdGgsCisJCQkgaW50IGxhc3RfZ2x5cGhfcmJlYXJpbmcpCit7CisgICAgUGFuZ29SZWN0YW5nbGUgIGlua19yZWN0OworICAgIFBhbmdvUmVjdGFuZ2xlICBsb2dpY2FsX3JlY3Q7CisgICAgaW50CQkgICAgd2lkdGg7CisKKyAgICB3aWR0aCA9IGxhc3RfY2VsbGNvdW50ICogZ3VpLmNoYXJfd2lkdGggKiBQQU5HT19TQ0FMRTsKKyAgICBnbHlwaC0+Z2VvbWV0cnkueF9vZmZzZXQgPSAtd2lkdGggKyBNQVgoMCwgd2lkdGggLSBsYXN0X2NsdXN0ZXJfd2lkdGgpIC8gMjsKKyAgICBnbHlwaC0+Z2VvbWV0cnkud2lkdGggPSAwOworCisgICAgcGFuZ29fZm9udF9nZXRfZ2x5cGhfZXh0ZW50cyhpdGVtLT5hbmFseXNpcy5mb250LAorCQkJCSBnbHlwaC0+Z2x5cGgsCisJCQkJICZpbmtfcmVjdCwgJmxvZ2ljYWxfcmVjdCk7CisgICAgaWYgKGlua19yZWN0LnggPCAwKQorICAgIHsKKwlnbHlwaC0+Z2VvbWV0cnkueF9vZmZzZXQgKz0gbGFzdF9nbHlwaF9yYmVhcmluZzsKKwlnbHlwaC0+Z2VvbWV0cnkueV9vZmZzZXQgID0gbG9naWNhbF9yZWN0LmhlaWdodAorCQktIChndWkuY2hhcl9oZWlnaHQgLSBwX2xpbmVzcGFjZSkgKiBQQU5HT19TQ0FMRTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZHJhd19nbHlwaF9zdHJpbmcoaW50IHJvdywgaW50IGNvbCwgaW50IG51bV9jZWxscywgaW50IGZsYWdzLAorCQkgIFBhbmdvRm9udCAqZm9udCwgUGFuZ29HbHlwaFN0cmluZyAqZ2x5cGhzKQoreworICAgIGlmICghKGZsYWdzICYgRFJBV19UUkFOU1ApKQorICAgIHsKKwlnZGtfZ2Nfc2V0X2ZvcmVncm91bmQoZ3VpLnRleHRfZ2MsIGd1aS5iZ2NvbG9yKTsKKworCWdka19kcmF3X3JlY3RhbmdsZShndWkuZHJhd2FyZWEtPndpbmRvdywKKwkJCSAgIGd1aS50ZXh0X2djLAorCQkJICAgVFJVRSwKKwkJCSAgIEZJTExfWChjb2wpLAorCQkJICAgRklMTF9ZKHJvdyksCisJCQkgICBudW1fY2VsbHMgKiBndWkuY2hhcl93aWR0aCwKKwkJCSAgIGd1aS5jaGFyX2hlaWdodCk7CisgICAgfQorCisgICAgZ2RrX2djX3NldF9mb3JlZ3JvdW5kKGd1aS50ZXh0X2djLCBndWkuZmdjb2xvcik7CisKKyAgICBnZGtfZHJhd19nbHlwaHMoZ3VpLmRyYXdhcmVhLT53aW5kb3csCisJCSAgICBndWkudGV4dF9nYywKKwkJICAgIGZvbnQsCisJCSAgICBURVhUX1goY29sKSwKKwkJICAgIFRFWFRfWShyb3cpLAorCQkgICAgZ2x5cGhzKTsKKworICAgIC8qIHJlZHJhdyB0aGUgY29udGVudHMgd2l0aCBhbiBvZmZzZXQgb2YgMSB0byBlbXVsYXRlIGJvbGQgKi8KKyAgICBpZiAoKGZsYWdzICYgRFJBV19CT0xEKSAmJiAhZ3VpLmZvbnRfY2FuX2JvbGQpCisJZ2RrX2RyYXdfZ2x5cGhzKGd1aS5kcmF3YXJlYS0+d2luZG93LAorCQkJZ3VpLnRleHRfZ2MsCisJCQlmb250LAorCQkJVEVYVF9YKGNvbCkgKyAxLAorCQkJVEVYVF9ZKHJvdyksCisJCQlnbHlwaHMpOworfQorCisjZW5kaWYgLyogSEFWRV9HVEsyICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR1RLMikgfHwgZGVmaW5lZChQUk9UTykKKyAgICBpbnQKK2d1aV9ndGsyX2RyYXdfc3RyaW5nKGludCByb3csIGludCBjb2wsIGNoYXJfdSAqcywgaW50IGxlbiwgaW50IGZsYWdzKQoreworICAgIEdka1JlY3RhbmdsZQlhcmVhOwkJICAgIC8qIGFyZWEgZm9yIGNsaXAgbWFzawkgICovCisgICAgUGFuZ29HbHlwaFN0cmluZwkqZ2x5cGhzOwkgICAgLyogZ2x5cGhzIG9mIGN1cnJlbnQgaXRlbQkgICovCisgICAgaW50CQkJY29sdW1uX29mZnNldCA9IDA7ICAvKiBjb2x1bW4gb2Zmc2V0IGluIGNlbGxzCSAgKi8KKyAgICBpbnQJCQlpOworICAgIGNoYXJfdQkJKmNvbnZfYnVmID0gTlVMTDsgICAvKiByZXN1bHQgb2YgVVRGLTggY29udmVyc2lvbiAqLworICAgIGNoYXJfdQkJKm5ld19jb252X2J1ZjsKKyAgICBpbnQJCQljb252bGVuOworICAgIGNoYXJfdQkJKnNwLCAqYnA7CisgICAgaW50CQkJcGxlbjsKKworICAgIGlmIChndWkudGV4dF9jb250ZXh0ID09IE5VTEwgfHwgZ3VpLmRyYXdhcmVhLT53aW5kb3cgPT0gTlVMTCkKKwlyZXR1cm4gbGVuOworCisgICAgaWYgKG91dHB1dF9jb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorICAgIHsKKwkvKgorCSAqIENvbnZlcnQgY2hhcmFjdGVycyBmcm9tICdlbmNvZGluZycgdG8gJ3Rlcm1lbmNvZGluZycsIHdoaWNoIGlzIHNldAorCSAqIHRvIFVURi04IGJ5IGd1aV9tY2hfaW5pdCgpLglkaWRfc2V0X3N0cmluZ19vcHRpb24oKSBpbiBvcHRpb24uYworCSAqIHByb2hpYml0cyBjaGFuZ2luZyB0aGlzIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gVVRGLTggaWYgdGhlIEdVSSBpcworCSAqIGluIHVzZS4KKwkgKi8KKwljb252bGVuID0gbGVuOworCWNvbnZfYnVmID0gc3RyaW5nX2NvbnZlcnQoJm91dHB1dF9jb252LCBzLCAmY29udmxlbik7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udl9idWYgIT0gTlVMTCwgbGVuKTsKKworCS8qIENvcnJlY3QgZm9yIGRpZmZlcmVuY2VzIGluIGNoYXIgd2lkdGg6IHNvbWUgY2hhcnMgYXJlCisJICogZG91YmxlLXdpZGUgaW4gJ2VuY29kaW5nJyBidXQgc2luZ2xlLXdpZGUgaW4gdXRmLTguICBBZGQgYSBzcGFjZSB0bworCSAqIGNvbXBlbnNhdGUgZm9yIHRoYXQuICovCisJZm9yIChzcCA9IHMsIGJwID0gY29udl9idWY7IHNwIDwgcyArIGxlbiAmJiBicCA8IGNvbnZfYnVmICsgY29udmxlbjsgKQorCXsKKwkgICAgcGxlbiA9IHV0Zl9wdHIybGVuX2NoZWNrKGJwKTsKKwkgICAgaWYgKCgqbWJfcHRyMmNlbGxzKShzcCkgPT0gMiAmJiB1dGZfcHRyMmNlbGxzKGJwKSA9PSAxKQorCSAgICB7CisJCW5ld19jb252X2J1ZiA9IGFsbG9jKGNvbnZsZW4gKyAyKTsKKwkJaWYgKG5ld19jb252X2J1ZiA9PSBOVUxMKQorCQkgICAgcmV0dXJuIGxlbjsKKwkJcGxlbiArPSBicCAtIGNvbnZfYnVmOworCQltY2hfbWVtbW92ZShuZXdfY29udl9idWYsIGNvbnZfYnVmLCBwbGVuKTsKKwkJbmV3X2NvbnZfYnVmW3BsZW5dID0gJyAnOworCQltY2hfbWVtbW92ZShuZXdfY29udl9idWYgKyBwbGVuICsgMSwgY29udl9idWYgKyBwbGVuLAorCQkJCQkJCSAgY29udmxlbiAtIHBsZW4gKyAxKTsKKwkJdmltX2ZyZWUoY29udl9idWYpOworCQljb252X2J1ZiA9IG5ld19jb252X2J1ZjsKKwkJKytjb252bGVuOworCQlicCA9IGNvbnZfYnVmICsgcGxlbjsKKwkJcGxlbiA9IDE7CisJICAgIH0KKwkgICAgc3AgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzcCk7CisJICAgIGJwICs9IHBsZW47CisJfQorCXMgPSBjb252X2J1ZjsKKwlsZW4gPSBjb252bGVuOworICAgIH0KKworICAgIC8qCisgICAgICogUmVzdHJpY3QgYWxsIGRyYXdpbmcgdG8gdGhlIGN1cnJlbnQgc2NyZWVuIGxpbmUgaW4gb3JkZXIgdG8gcHJldmVudAorICAgICAqIGZ1enp5IGZvbnQgbG9va3VwcyBmcm9tIG1lc3NpbmcgdXAgdGhlIHNjcmVlbi4KKyAgICAgKi8KKyAgICBhcmVhLnggPSBndWkuYm9yZGVyX29mZnNldDsKKyAgICBhcmVhLnkgPSBGSUxMX1kocm93KTsKKyAgICBhcmVhLndpZHRoCT0gZ3VpLm51bV9jb2xzICogZ3VpLmNoYXJfd2lkdGg7CisgICAgYXJlYS5oZWlnaHQgPSBndWkuY2hhcl9oZWlnaHQ7CisKKyAgICBnZGtfZ2Nfc2V0X2NsaXBfb3JpZ2luKGd1aS50ZXh0X2djLCAwLCAwKTsKKyAgICBnZGtfZ2Nfc2V0X2NsaXBfcmVjdGFuZ2xlKGd1aS50ZXh0X2djLCAmYXJlYSk7CisKKyAgICBnbHlwaHMgPSBwYW5nb19nbHlwaF9zdHJpbmdfbmV3KCk7CisKKyAgICAvKgorICAgICAqIE9wdGltaXphdGlvbiBoYWNrOiAgSWYgcG9zc2libGUsIHNraXAgdGhlIGl0ZW1pemUgYW5kIHNoYXBpbmcgcHJvY2VzcworICAgICAqIGZvciBwdXJlIEFTQ0lJIHN0cmluZ3MuCVRoaXMgb3B0aW1pemF0aW9uIGlzIHBhcnRpY3VsYXJseSBlZmZlY3RpdmUKKyAgICAgKiBiZWNhdXNlIFZpbSBkcmF3cyBzcGFjZSBjaGFyYWN0ZXJzIHRvIGNsZWFyIHBhcnRzIG9mIHRoZSBzY3JlZW4uCisgICAgICovCisgICAgaWYgKCEoZmxhZ3MgJiBEUkFXX0lUQUxJQykKKwkgICAgJiYgISgoZmxhZ3MgJiBEUkFXX0JPTEQpICYmIGd1aS5mb250X2Nhbl9ib2xkKQorCSAgICAmJiBndWkuYXNjaWlfZ2x5cGhzICE9IE5VTEwpCisgICAgeworCWNoYXJfdSAqcDsKKworCWZvciAocCA9IHM7IHAgPCBzICsgbGVuOyArK3ApCisJICAgIGlmICgqcCAmIDB4ODApCisJCWdvdG8gbm90X2FzY2lpOworCisJcGFuZ29fZ2x5cGhfc3RyaW5nX3NldF9zaXplKGdseXBocywgbGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwl7CisJICAgIGdseXBocy0+Z2x5cGhzW2ldID0gZ3VpLmFzY2lpX2dseXBocy0+Z2x5cGhzW3NbaV1dOworCSAgICBnbHlwaHMtPmxvZ19jbHVzdGVyc1tpXSA9IGk7CisJfQorCisJZHJhd19nbHlwaF9zdHJpbmcocm93LCBjb2wsIGxlbiwgZmxhZ3MsIGd1aS5hc2NpaV9mb250LCBnbHlwaHMpOworCisJY29sdW1uX29mZnNldCA9IGxlbjsKKyAgICB9CisgICAgZWxzZQorbm90X2FzY2lpOgorICAgIHsKKwlQYW5nb0F0dHJMaXN0CSphdHRyX2xpc3Q7CisJR0xpc3QJCSppdGVtX2xpc3Q7CisJaW50CQljbHVzdGVyX3dpZHRoOworCWludAkJbGFzdF9nbHlwaF9yYmVhcmluZzsKKwlpbnQJCWNlbGxzID0gMDsgIC8qIGNlbGxzIG9jY3VwaWVkIGJ5IGN1cnJlbnQgY2x1c3RlciAqLworCisJLyogb3JpZ2luYWwgd2lkdGggb2YgdGhlIGN1cnJlbnQgY2x1c3RlciAqLworCWNsdXN0ZXJfd2lkdGggPSBQQU5HT19TQ0FMRSAqIGd1aS5jaGFyX3dpZHRoOworCisJLyogcmlnaHQgYmVhcmluZyBvZiB0aGUgbGFzdCBub24tY29tcG9zaW5nIGdseXBoICovCisJbGFzdF9nbHlwaF9yYmVhcmluZyA9IFBBTkdPX1NDQUxFICogZ3VpLmNoYXJfd2lkdGg7CisKKwlhdHRyX2xpc3QgPSBwYW5nb19hdHRyX2xpc3RfbmV3KCk7CisKKwkvKiBJZiAnZ3VpZm9udHdpZGUnIGlzIHNldCB0aGVuIHVzZSB0aGF0IGZvciBkb3VibGUtd2lkdGggY2hhcmFjdGVycy4KKwkgKiBPdGhlcndpc2UganVzdCBnbyB3aXRoICdndWlmb250JyBhbmQgbGV0IFBhbmdvIGRvIGl0cyB0aGluZy4gKi8KKwlpZiAoZ3VpLndpZGVfZm9udCAhPSBOVUxMKQorCSAgICBhcHBseV93aWRlX2ZvbnRfYXR0cihzLCBsZW4sIGF0dHJfbGlzdCk7CisKKwlpZiAoKGZsYWdzICYgRFJBV19CT0xEKSAmJiBndWkuZm9udF9jYW5fYm9sZCkKKwkgICAgSU5TRVJUX1BBTkdPX0FUVFIocGFuZ29fYXR0cl93ZWlnaHRfbmV3KFBBTkdPX1dFSUdIVF9CT0xEKSwKKwkJCSAgICAgIGF0dHJfbGlzdCwgMCwgbGVuKTsKKwlpZiAoZmxhZ3MgJiBEUkFXX0lUQUxJQykKKwkgICAgSU5TRVJUX1BBTkdPX0FUVFIocGFuZ29fYXR0cl9zdHlsZV9uZXcoUEFOR09fU1RZTEVfSVRBTElDKSwKKwkJCSAgICAgIGF0dHJfbGlzdCwgMCwgbGVuKTsKKwkvKgorCSAqIEJyZWFrIHRoZSB0ZXh0IGludG8gc2VnbWVudHMgd2l0aCBjb25zaXN0ZW50IGRpcmVjdGlvbmFsIGxldmVsCisJICogYW5kIHNoYXBpbmcgZW5naW5lLglQdXJlIExhdGluIHRleHQgbmVlZHMgb25seSBhIHNpbmdsZSBzZWdtZW50LAorCSAqIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgbG9vcCdzIGVmZmljaWVuY3kuICBCZXR0ZXIKKwkgKiB0cnkgdG8gb3B0aW1pemUgZWxzZXdoZXJlLCBlLmcuIHJlZHVjaW5nIGV4cG9zZXMgYW5kIHN0dWZmIDopCisJICovCisJaXRlbV9saXN0ID0gcGFuZ29faXRlbWl6ZShndWkudGV4dF9jb250ZXh0LAorCQkJCSAgKGNvbnN0IGNoYXIgKilzLCAwLCBsZW4sIGF0dHJfbGlzdCwgTlVMTCk7CisKKwl3aGlsZSAoaXRlbV9saXN0ICE9IE5VTEwpCisJeworCSAgICBQYW5nb0l0ZW0JKml0ZW07CisJICAgIGludAkJaXRlbV9jZWxscyA9IDA7IC8qIGl0ZW0gbGVuZ3RoIGluIGNlbGxzICovCisKKwkgICAgaXRlbSA9IChQYW5nb0l0ZW0gKilpdGVtX2xpc3QtPmRhdGE7CisJICAgIGl0ZW1fbGlzdCA9IGdfbGlzdF9kZWxldGVfbGluayhpdGVtX2xpc3QsIGl0ZW1fbGlzdCk7CisJICAgIC8qCisJICAgICAqIEluY3JlbWVudCB0aGUgYmlkaXJlY3Rpb25hbCBlbWJlZGRpbmcgbGV2ZWwgYnkgMSBpZiBpdCBpcyBub3QKKwkgICAgICogZXZlbi4gIEFuIG9kZCBudW1iZXIgbWVhbnMgdGhlIG91dHB1dCB3aWxsIGJlIFJUTCwgYnV0IHdlIGRvbid0CisJICAgICAqIHdhbnQgdGhhdCBzaW5jZSBWaW0gaGFuZGxlcyByaWdodC10by1sZWZ0IHRleHQgb24gaXRzIG93bi4gIEl0CisJICAgICAqIHdvdWxkIHByb2JhYmx5IGJlIHN1ZmZpY2llbnQgdG8ganVzdCBzZXQgbGV2ZWwgPSAwLCBidXQgeW91IGNhbgorCSAgICAgKiBuZXZlciBrbm93IDopCisJICAgICAqCisJICAgICAqIFVuZm9ydHVuYXRlbHkgd2UgY2FuJ3QgdGFrZSBhZHZhbnRhZ2Ugb2YgUGFuZ28ncyBhYmlsaXR5IHRvCisJICAgICAqIHJlbmRlciBib3RoIExUUiBhbmQgUlRMIGF0IHRoZSBzYW1lIHRpbWUuICBJbiBvcmRlciB0byBzdXBwb3J0CisJICAgICAqIHRoYXQsIFZpbSdzIG1haW4gc2NyZWVuIGVuZ2luZSB3b3VsZCBoYXZlIHRvIG1ha2UgdXNlIG9mIFBhbmdvCisJICAgICAqIGZ1bmN0aW9uYWxpdHkuCisJICAgICAqLworCSAgICBpdGVtLT5hbmFseXNpcy5sZXZlbCA9IChpdGVtLT5hbmFseXNpcy5sZXZlbCArIDEpICYgKH4xVSk7CisKKwkgICAgLyogSEFDSzogT3ZlcnJ1bGUgdGhlIHNoYXBlIGVuZ2luZSwgd2UgZG9uJ3Qgd2FudCBzaGFwaW5nIHRvIGJlCisJICAgICAqIGRvbmUsIGJlY2F1c2UgZHJhd2luZyB0aGUgY3Vyc29yIHdvdWxkIGNoYW5nZSB0aGUgZGlzcGxheS4gKi8KKwkgICAgaXRlbS0+YW5hbHlzaXMuc2hhcGVfZW5naW5lID0gZGVmYXVsdF9zaGFwZV9lbmdpbmU7CisKKwkgICAgcGFuZ29fc2hhcGUoKGNvbnN0IGNoYXIgKilzICsgaXRlbS0+b2Zmc2V0LCBpdGVtLT5sZW5ndGgsCisJCQkmaXRlbS0+YW5hbHlzaXMsIGdseXBocyk7CisJICAgIC8qCisJICAgICAqIEZpeGVkLXdpZHRoIGhhY2s6IGl0ZXJhdGUgb3ZlciB0aGUgYXJyYXkgYW5kIGFzc2lnbiBhIGZpeGVkCisJICAgICAqIHdpZHRoIHRvIGVhY2ggZ2x5cGgsIHRodXMgb3ZlcnJpZGluZyB0aGUgY2hvaWNlIG1hZGUgYnkgdGhlCisJICAgICAqIHNoYXBpbmcgZW5naW5lLglXZSB1c2UgdXRmX2NoYXIyY2VsbHMoKSB0byBkZXRlcm1pbmUgdGhlCisJICAgICAqIG51bWJlciBvZiBjZWxscyBuZWVkZWQuCisJICAgICAqCisJICAgICAqIEFsc28gcGVyZm9ybSBhbGwga2luZCBvZiBkYXJrIG1hZ2ljIHRvIGdldCBjb21wb3NpbmcKKwkgICAgICogY2hhcmFjdGVycyByaWdodCAoYW5kIHByZXR0eSB0b28gb2YgY291cnNlKS4KKwkgICAgICovCisJICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaHMtPm51bV9nbHlwaHM7ICsraSkKKwkgICAgeworCQlQYW5nb0dseXBoSW5mbyAqZ2x5cGg7CisKKwkJZ2x5cGggPSAmZ2x5cGhzLT5nbHlwaHNbaV07CisKKwkJaWYgKGdseXBoLT5hdHRyLmlzX2NsdXN0ZXJfc3RhcnQpCisJCXsKKwkJICAgIGludCBjZWxsY291bnQ7CisKKwkJICAgIGNlbGxjb3VudCA9IGNvdW50X2NsdXN0ZXJfY2VsbHMoCisJCQlzLCBpdGVtLCBnbHlwaHMsIGksICZjbHVzdGVyX3dpZHRoLAorCQkJKGl0ZW1fbGlzdCAhPSBOVUxMKSA/ICZsYXN0X2dseXBoX3JiZWFyaW5nIDogTlVMTCk7CisKKwkJICAgIGlmIChjZWxsY291bnQgPiAwKQorCQkgICAgeworCQkJaW50IHdpZHRoOworCisJCQl3aWR0aCA9IGNlbGxjb3VudCAqIGd1aS5jaGFyX3dpZHRoICogUEFOR09fU0NBTEU7CisJCQlnbHlwaC0+Z2VvbWV0cnkueF9vZmZzZXQgKz0KKwkJCQkJICAgIE1BWCgwLCB3aWR0aCAtIGNsdXN0ZXJfd2lkdGgpIC8gMjsKKwkJCWdseXBoLT5nZW9tZXRyeS53aWR0aCA9IHdpZHRoOworCQkgICAgfQorCQkgICAgZWxzZQorCQkgICAgeworCQkJLyogSWYgdGhlcmUgYXJlIG9ubHkgY29tYmluaW5nIGNoYXJhY3RlcnMgaW4gdGhlCisJCQkgKiBjbHVzdGVyLCB3ZSBjYW5ub3QganVzdCBjaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZQorCQkJICogcHJldmlvdXMgZ2x5cGggc2luY2UgdGhlcmUgaXMgbm9uZS4JVGhlcmVmb3JlCisJCQkgKiBzb21lIGd1ZXNzd29yayBpcyBuZWVkZWQuICovCisJCQlzZXR1cF96ZXJvX3dpZHRoX2NsdXN0ZXIoaXRlbSwgZ2x5cGgsIGNlbGxzLAorCQkJCQkJIGNsdXN0ZXJfd2lkdGgsCisJCQkJCQkgbGFzdF9nbHlwaF9yYmVhcmluZyk7CisJCSAgICB9CisKKwkJICAgIGl0ZW1fY2VsbHMgKz0gY2VsbGNvdW50OworCQkgICAgY2VsbHMgPSBjZWxsY291bnQ7CisJCX0KKwkJZWxzZSBpZiAoaSA+IDApCisJCXsKKwkJICAgIGludCB3aWR0aDsKKworCQkgICAgLyogVGhlcmUgaXMgYSBwcmV2aW91cyBnbHlwaCwgc28gd2UgZGVhbCB3aXRoIGNvbWJpbmluZworCQkgICAgICogY2hhcmFjdGVycyB0aGUgY2Fub25pY2FsIHdheS4gIFRoYXQgaXMsIHNldHRpbmcgdGhlCisJCSAgICAgKiB3aWR0aCBvZiB0aGUgcHJldmlvdXMgZ2x5cGggdG8gMC4gKi8KKwkJICAgIGdseXBocy0+Z2x5cGhzW2kgLSAxXS5nZW9tZXRyeS53aWR0aCA9IDA7CisKKwkJICAgIHdpZHRoID0gY2VsbHMgKiBndWkuY2hhcl93aWR0aCAqIFBBTkdPX1NDQUxFOworCQkgICAgZ2x5cGgtPmdlb21ldHJ5Lnhfb2Zmc2V0ICs9CisJCQkJCSAgICBNQVgoMCwgd2lkdGggLSBjbHVzdGVyX3dpZHRoKSAvIDI7CisJCSAgICBnbHlwaC0+Z2VvbWV0cnkud2lkdGggPSB3aWR0aDsKKwkJfQorCQllbHNlIC8qIGkgPT0gMCAiY2Fubm90IGhhcHBlbiIgKi8KKwkJeworCQkgICAgZ2x5cGgtPmdlb21ldHJ5LndpZHRoID0gMDsKKwkJfQorCSAgICB9CisKKwkgICAgLyoqKiBBYWFhYW5kIGFjdGlvbiEgKioqLworCSAgICBkcmF3X2dseXBoX3N0cmluZyhyb3csIGNvbCArIGNvbHVtbl9vZmZzZXQsIGl0ZW1fY2VsbHMsCisJCQkgICAgICBmbGFncywgaXRlbS0+YW5hbHlzaXMuZm9udCwgZ2x5cGhzKTsKKworCSAgICBwYW5nb19pdGVtX2ZyZWUoaXRlbSk7CisKKwkgICAgY29sdW1uX29mZnNldCArPSBpdGVtX2NlbGxzOworCX0KKworCXBhbmdvX2F0dHJfbGlzdF91bnJlZihhdHRyX2xpc3QpOworICAgIH0KKworICAgIGlmIChmbGFncyAmIERSQVdfVU5ERVJMKQorCWdka19kcmF3X2xpbmUoZ3VpLmRyYXdhcmVhLT53aW5kb3csCisJCSAgICAgIGd1aS50ZXh0X2djLAorCQkgICAgICBGSUxMX1goY29sKSwKKwkJICAgICAgRklMTF9ZKHJvdyArIDEpIC0gMSwKKwkJICAgICAgRklMTF9YKGNvbCArIGNvbHVtbl9vZmZzZXQpIC0gMSwKKwkJICAgICAgRklMTF9ZKHJvdyArIDEpIC0gMSk7CisKKyAgICBwYW5nb19nbHlwaF9zdHJpbmdfZnJlZShnbHlwaHMpOworICAgIHZpbV9mcmVlKGNvbnZfYnVmKTsKKworICAgIGdka19nY19zZXRfY2xpcF9yZWN0YW5nbGUoZ3VpLnRleHRfZ2MsIE5VTEwpOworCisgICAgcmV0dXJuIGNvbHVtbl9vZmZzZXQ7Cit9CisjZW5kaWYgLyogSEFWRV9HVEsyICovCisKKyNpZiAhZGVmaW5lZChIQVZFX0dUSzIpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorZ3VpX21jaF9kcmF3X3N0cmluZyhpbnQgcm93LCBpbnQgY29sLCBjaGFyX3UgKnMsIGludCBsZW4sIGludCBmbGFncykKK3sKKyAgICBzdGF0aWMgWENoYXIyYgkqYnVmID0gTlVMTDsKKyAgICBzdGF0aWMgaW50CQlidWZsZW4gPSAwOworICAgIGludAkJCWlzX3dpZGU7CisgICAgWENoYXIyYgkJKnRleHQ7CisgICAgaW50CQkJdGV4dGxlbjsKKyAgICBYRm9udFN0cnVjdAkJKnhmb250OworICAgIGNoYXJfdQkJKnA7CisjIGlmZGVmIEZFQVRfTUJZVEUKKyAgICB1bnNpZ25lZAkJYzsKKyMgZW5kaWYKKyAgICBpbnQJCQl3aWR0aDsKKworICAgIGlmIChndWkuY3VycmVudF9mb250ID09IE5VTEwgfHwgZ3VpLmRyYXdhcmVhLT53aW5kb3cgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICAvKgorICAgICAqIFllYWggeWVhaCBhcHBhcmVudGx5IHRoZSBmb250IHN1cHBvcnQgaW4gR1RLKyAxLjIgb25seSBjYXJlcyBmb3IgZWl0aGVyOgorICAgICAqIGFzaWFucyBvciA4LWJpdCBmb250cy4gSXQgaXMgYnJva2VuIHRoZXJlLCBidXQgbm8gd29uZGVyIHRoZSB3aG9sZSBmb250CisgICAgICogc3R1ZmYgaXMgYnJva2VuIGluIFgxMSBpbiBmaXJzdCBwbGFjZS4gQW5kIHRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkKKyAgICAgKiBpc24ndCBzb21ldGhpbmcgeW91IHdvdWxkIHJlYWxseSBsaWtlIHRvIHVzZS4KKyAgICAgKi8KKworICAgIHhmb250ID0gKFhGb250U3RydWN0ICopKChHZGtGb250UHJpdmF0ZSopZ3VpLmN1cnJlbnRfZm9udCktPnhmb250OworICAgIGlzX3dpZGUgPSAoKHhmb250LT5taW5fYnl0ZTEgIT0gMCB8fCB4Zm9udC0+bWF4X2J5dGUxICE9IDApCisjIGlmZGVmIEZFQVRfWEZPTlRTRVQKKwkgICAgJiYgZ3VpLmZvbnRzZXQgPT0gTk9GT05UU0VUCisjIGVuZGlmCisJICAgICk7CisKKyAgICBpZiAoaXNfd2lkZSkKKyAgICB7CisJLyogQ29udmVydCBhIGJ5dGUgc2VxdWVuY2UgdG8gMTYgYml0IGNoYXJhY3RlcnMgZm9yIHRoZSBHZGsgZnVuY3Rpb25zLgorCSAqIE5lZWQgYSBidWZmZXIgZm9yIHRoZSAxNiBiaXQgY2hhcmFjdGVycy4gIEtlZXAgaXQgYmV0d2VlbiBjYWxscywKKwkgKiBiZWNhdXNlIGFsbG9jYXRpbmcgaXQgZWFjaCB0aW1lIGlzIHNsb3cuICovCisJaWYgKGJ1ZmxlbiA8IGxlbikKKwl7CisJICAgIFh0RnJlZSgoY2hhciAqKWJ1Zik7CisJICAgIGJ1ZiA9IChYQ2hhcjJiICopWHRNYWxsb2MobGVuICogc2l6ZW9mKFhDaGFyMmIpKTsKKwkgICAgYnVmbGVuID0gbGVuOworCX0KKworCXAgPSBzOworCXRleHRsZW4gPSAwOworCXdpZHRoID0gMDsKKwl3aGlsZSAocCA8IHMgKyBsZW4pCisJeworIyBpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChlbmNfdXRmOCkKKwkgICAgeworCQljID0gdXRmX3B0cjJjaGFyKHApOworCQlpZiAoYyA+PSAweDEwMDAwKQkvKiBzaG93IGNoYXJzID4gMHhmZmZmIGFzID8gKi8KKwkJICAgIGMgPSAweGJmOworCQlidWZbdGV4dGxlbl0uYnl0ZTEgPSBjID4+IDg7CisJCWJ1Zlt0ZXh0bGVuXS5ieXRlMiA9IGM7CisJCXAgKz0gdXRmX3B0cjJsZW5fY2hlY2socCk7CisJCXdpZHRoICs9IHV0Zl9jaGFyMmNlbGxzKGMpOworCSAgICB9CisJICAgIGVsc2UKKyMgZW5kaWYKKwkgICAgeworCQlidWZbdGV4dGxlbl0uYnl0ZTEgPSAnXDAnOwkvKiBoaWdoIGVpZ2h0IGJpdHMgKi8KKwkJYnVmW3RleHRsZW5dLmJ5dGUyID0gKnA7CS8qIGxvdyBlaWdodCBiaXRzICovCisJCSsrcDsKKwkJKyt3aWR0aDsKKwkgICAgfQorCSAgICArK3RleHRsZW47CisJfQorCXRleHQgPSBidWY7CisJdGV4dGxlbiA9IHRleHRsZW4gKiAyOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXRleHQgPSAoWENoYXIyYiAqKXM7CisJdGV4dGxlbiA9IGxlbjsKKyMgaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICB3aWR0aCA9IDA7CisJICAgIGZvciAocCA9IHM7IHAgPCBzICsgbGVuOyBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkpCisJCXdpZHRoICs9ICgqbWJfcHRyMmNlbGxzKShwKTsKKwl9CisJZWxzZQorIyBlbmRpZgorCSAgICB3aWR0aCA9IGxlbjsKKyAgICB9CisKKyAgICBpZiAoIShmbGFncyAmIERSQVdfVFJBTlNQKSkKKyAgICB7CisJZ2RrX2djX3NldF9mb3JlZ3JvdW5kKGd1aS50ZXh0X2djLCBndWkuYmdjb2xvcik7CisJZ2RrX2RyYXdfcmVjdGFuZ2xlKGd1aS5kcmF3YXJlYS0+d2luZG93LAorCQkJICAgZ3VpLnRleHRfZ2MsCisJCQkgICBUUlVFLAorCQkJICAgRklMTF9YKGNvbCksIEZJTExfWShyb3cpLAorCQkJICAgd2lkdGggKiBndWkuY2hhcl93aWR0aCwgZ3VpLmNoYXJfaGVpZ2h0KTsKKyAgICB9CisgICAgZ2RrX2djX3NldF9mb3JlZ3JvdW5kKGd1aS50ZXh0X2djLCBndWkuZmdjb2xvcik7CisgICAgZ2RrX2RyYXdfdGV4dChndWkuZHJhd2FyZWEtPndpbmRvdywKKwkJICBndWkuY3VycmVudF9mb250LAorCQkgIGd1aS50ZXh0X2djLAorCQkgIFRFWFRfWChjb2wpLCBURVhUX1kocm93KSwKKwkJICAoY29uc3QgZ2NoYXIgKil0ZXh0LCB0ZXh0bGVuKTsKKworICAgIC8qIHJlZHJhdyB0aGUgY29udGVudHMgd2l0aCBhbiBvZmZzZXQgb2YgMSB0byBlbXVsYXRlIGJvbGQgKi8KKyAgICBpZiAoZmxhZ3MgJiBEUkFXX0JPTEQpCisJZ2RrX2RyYXdfdGV4dChndWkuZHJhd2FyZWEtPndpbmRvdywKKwkJICAgICAgZ3VpLmN1cnJlbnRfZm9udCwKKwkJICAgICAgZ3VpLnRleHRfZ2MsCisJCSAgICAgIFRFWFRfWChjb2wpICsgMSwgVEVYVF9ZKHJvdyksCisJCSAgICAgIChjb25zdCBnY2hhciAqKXRleHQsIHRleHRsZW4pOworCisgICAgaWYgKGZsYWdzICYgRFJBV19VTkRFUkwpCisgICAgeworCWdka19kcmF3X2xpbmUoZ3VpLmRyYXdhcmVhLT53aW5kb3csCisJCSAgICAgIGd1aS50ZXh0X2djLCBGSUxMX1goY29sKSwKKwlGSUxMX1kocm93ICsgMSkgLSAxLCBGSUxMX1goY29sICsgd2lkdGgpIC0gMSwgRklMTF9ZKHJvdyArIDEpIC0gMSk7CisgICAgfQorfQorI2VuZGlmIC8qICFIQVZFX0dUSzIgKi8KKworLyoKKyAqIFJldHVybiBPSyBpZiB0aGUga2V5IHdpdGggdGhlIHRlcm1jYXAgbmFtZSAibmFtZSIgaXMgc3VwcG9ydGVkLgorICovCisgICAgaW50CitndWlfbWNoX2hhc2tleShjaGFyX3UgKm5hbWUpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBzcGVjaWFsX2tleXNbaV0ua2V5X3N5bSAhPSAwOyBpKyspCisJaWYgKG5hbWVbMF0gPT0gc3BlY2lhbF9rZXlzW2ldLmNvZGUwCisJCSYmIG5hbWVbMV0gPT0gc3BlY2lhbF9rZXlzW2ldLmNvZGUxKQorCSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfVElUTEUpIFwKKwl8fCAoZGVmaW5lZChGRUFUX1hJTSkgJiYgIWRlZmluZWQoSEFWRV9HVEsyKSkgXAorCXx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmV0dXJuIHRoZSB0ZXh0IHdpbmRvdy1pZCBhbmQgZGlzcGxheS4gIE9ubHkgcmVxdWlyZWQgZm9yIFgtYmFzZWQgR1VJJ3MKKyAqLworICAgIGludAorZ3VpX2dldF94MTFfd2luZGlzKFdpbmRvdyAqd2luLCBEaXNwbGF5ICoqZGlzKQoreworICAgIGlmIChndWkubWFpbndpbiAhPSBOVUxMICYmIGd1aS5tYWlud2luLT53aW5kb3cgIT0gTlVMTCkKKyAgICB7CisJKmRpcyA9IEdES19XSU5ET1dfWERJU1BMQVkoZ3VpLm1haW53aW4tPndpbmRvdyk7CisJKndpbiA9IEdES19XSU5ET1dfWFdJTkRPVyhndWkubWFpbndpbi0+d2luZG93KTsKKwlyZXR1cm4gT0s7CisgICAgfQorCisgICAgKmRpcyA9IE5VTEw7CisgICAgKndpbiA9IDA7CisgICAgcmV0dXJuIEZBSUw7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9DTElFTlRTRVJWRVIpIFwKKwl8fCAoZGVmaW5lZChGRUFUX1gxMSkgJiYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkpIHx8IGRlZmluZWQoUFJPVE8pCisKKyAgICBEaXNwbGF5ICoKK2d1aV9tY2hfZ2V0X2Rpc3BsYXkodm9pZCkKK3sKKyAgICBpZiAoZ3VpLm1haW53aW4gIT0gTlVMTCAmJiBndWkubWFpbndpbi0+d2luZG93ICE9IE5VTEwpCisJcmV0dXJuIEdES19XSU5ET1dfWERJU1BMQVkoZ3VpLm1haW53aW4tPndpbmRvdyk7CisgICAgZWxzZQorCXJldHVybiBOVUxMOworfQorI2VuZGlmCisKKyAgICB2b2lkCitndWlfbWNoX2JlZXAodm9pZCkKK3sKKyNpZmRlZiBIQVZFX0dUS19NVUxUSUhFQUQKKyAgICBHZGtEaXNwbGF5ICpkaXNwbGF5OworCisgICAgaWYgKGd1aS5tYWlud2luICE9IE5VTEwgJiYgR1RLX1dJREdFVF9SRUFMSVpFRChndWkubWFpbndpbikpCisJZGlzcGxheSA9IGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkoZ3VpLm1haW53aW4pOworICAgIGVsc2UKKwlkaXNwbGF5ID0gZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKTsKKworICAgIGlmIChkaXNwbGF5ICE9IE5VTEwpCisJZ2RrX2Rpc3BsYXlfYmVlcChkaXNwbGF5KTsKKyNlbHNlCisgICAgZ2RrX2JlZXAoKTsKKyNlbmRpZgorfQorCisgICAgdm9pZAorZ3VpX21jaF9mbGFzaChpbnQgbXNlYykKK3sKKyAgICBHZGtHQ1ZhbHVlcwl2YWx1ZXM7CisgICAgR2RrR0MJKmludmVydF9nYzsKKworICAgIGlmIChndWkuZHJhd2FyZWEtPndpbmRvdyA9PSBOVUxMKQorCXJldHVybjsKKworICAgIHZhbHVlcy5mb3JlZ3JvdW5kLnBpeGVsID0gZ3VpLm5vcm1fcGl4ZWwgXiBndWkuYmFja19waXhlbDsKKyAgICB2YWx1ZXMuYmFja2dyb3VuZC5waXhlbCA9IGd1aS5ub3JtX3BpeGVsIF4gZ3VpLmJhY2tfcGl4ZWw7CisgICAgdmFsdWVzLmZ1bmN0aW9uID0gR0RLX1hPUjsKKyAgICBpbnZlcnRfZ2MgPSBnZGtfZ2NfbmV3X3dpdGhfdmFsdWVzKGd1aS5kcmF3YXJlYS0+d2luZG93LAorCQkJCSAgICAgICAmdmFsdWVzLAorCQkJCSAgICAgICBHREtfR0NfRk9SRUdST1VORCB8CisJCQkJICAgICAgIEdES19HQ19CQUNLR1JPVU5EIHwKKwkJCQkgICAgICAgR0RLX0dDX0ZVTkNUSU9OKTsKKyAgICBnZGtfZ2Nfc2V0X2V4cG9zdXJlcyhpbnZlcnRfZ2MsCisJCQkgZ3VpLnZpc2liaWxpdHkgIT0gR0RLX1ZJU0lCSUxJVFlfVU5PQlNDVVJFRCk7CisgICAgLyoKKyAgICAgKiBEbyBhIHZpc3VhbCBiZWVwIGJ5IGNoYW5naW5nIGJhY2sgYW5kIGZvcnRoIGluIHNvbWUgdW5kZXRlcm1pbmVkIHdheSwKKyAgICAgKiB0aGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMuICBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0CisgICAgICogdGhlcmUgY2FuJ3QgYmUgcmVhbGx5IGFueSBwcmVkaWN0aW9uIGFib3V0IHRoZSBlZmZlY3RzIG9mIFhPUiBvbgorICAgICAqIGFyYml0cmFyeSBYMTEgc2VydmVycy4gSG93ZXZlciB0aGlzIHNlZW1zIHRvIGJlIGVub3VnaCBmb3Igd2hhdCB3ZQorICAgICAqIGludGVuZCBpdCB0byBkby4KKyAgICAgKi8KKyAgICBnZGtfZHJhd19yZWN0YW5nbGUoZ3VpLmRyYXdhcmVhLT53aW5kb3csIGludmVydF9nYywKKwkJICAgICAgIFRSVUUsCisJCSAgICAgICAwLCAwLAorCQkgICAgICAgRklMTF9YKChpbnQpQ29sdW1ucykgKyBndWkuYm9yZGVyX29mZnNldCwKKwkJICAgICAgIEZJTExfWSgoaW50KVJvd3MpICsgZ3VpLmJvcmRlcl9vZmZzZXQpOworCisgICAgZ3VpX21jaF9mbHVzaCgpOworICAgIHVpX2RlbGF5KChsb25nKW1zZWMsIFRSVUUpOwkvKiB3YWl0IHNvIG1hbnkgbXNlYyAqLworCisgICAgZ2RrX2RyYXdfcmVjdGFuZ2xlKGd1aS5kcmF3YXJlYS0+d2luZG93LCBpbnZlcnRfZ2MsCisJCSAgICAgICBUUlVFLAorCQkgICAgICAgMCwgMCwKKwkJICAgICAgIEZJTExfWCgoaW50KUNvbHVtbnMpICsgZ3VpLmJvcmRlcl9vZmZzZXQsCisJCSAgICAgICBGSUxMX1koKGludClSb3dzKSArIGd1aS5ib3JkZXJfb2Zmc2V0KTsKKworICAgIGdka19nY19kZXN0cm95KGludmVydF9nYyk7Cit9CisKKy8qCisgKiBJbnZlcnQgYSByZWN0YW5nbGUgZnJvbSByb3cgciwgY29sdW1uIGMsIGZvciBuciByb3dzIGFuZCBuYyBjb2x1bW5zLgorICovCisgICAgdm9pZAorZ3VpX21jaF9pbnZlcnRfcmVjdGFuZ2xlKGludCByLCBpbnQgYywgaW50IG5yLCBpbnQgbmMpCit7CisgICAgR2RrR0NWYWx1ZXMgdmFsdWVzOworICAgIEdka0dDICppbnZlcnRfZ2M7CisgICAgR2RrQ29sb3IgZm9yZWdyb3VuZDsKKyAgICBHZGtDb2xvciBiYWNrZ3JvdW5kOworCisgICAgaWYgKGd1aS5kcmF3YXJlYS0+d2luZG93ID09IE5VTEwpCisJcmV0dXJuOworCisgICAgZm9yZWdyb3VuZC5waXhlbCA9IGd1aS5ub3JtX3BpeGVsIF4gZ3VpLmJhY2tfcGl4ZWw7CisgICAgYmFja2dyb3VuZC5waXhlbCA9IGd1aS5ub3JtX3BpeGVsIF4gZ3VpLmJhY2tfcGl4ZWw7CisKKyAgICB2YWx1ZXMuZm9yZWdyb3VuZCA9IGZvcmVncm91bmQ7CisgICAgdmFsdWVzLmJhY2tncm91bmQgPSBiYWNrZ3JvdW5kOworICAgIHZhbHVlcy5mdW5jdGlvbiA9IEdES19YT1I7CisgICAgaW52ZXJ0X2djID0gZ2RrX2djX25ld193aXRoX3ZhbHVlcyhndWkuZHJhd2FyZWEtPndpbmRvdywKKwkJCQkgICAgICAgJnZhbHVlcywKKwkJCQkgICAgICAgR0RLX0dDX0ZPUkVHUk9VTkQgfAorCQkJCSAgICAgICBHREtfR0NfQkFDS0dST1VORCB8CisJCQkJICAgICAgIEdES19HQ19GVU5DVElPTik7CisgICAgZ2RrX2djX3NldF9leHBvc3VyZXMoaW52ZXJ0X2djLCBndWkudmlzaWJpbGl0eSAhPSBHREtfVklTSUJJTElUWV9VTk9CU0NVUkVEKTsKKyAgICBnZGtfZHJhd19yZWN0YW5nbGUoZ3VpLmRyYXdhcmVhLT53aW5kb3csIGludmVydF9nYywKKwkJICAgICAgIFRSVUUsCisJCSAgICAgICBGSUxMX1goYyksIEZJTExfWShyKSwKKwkJICAgICAgIChuYykgKiBndWkuY2hhcl93aWR0aCwgKG5yKSAqIGd1aS5jaGFyX2hlaWdodCk7CisgICAgZ2RrX2djX2Rlc3Ryb3koaW52ZXJ0X2djKTsKK30KKworLyoKKyAqIEljb25pZnkgdGhlIEdVSSB3aW5kb3cuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2ljb25pZnkodm9pZCkKK3sKKyNpZmRlZiBIQVZFX0dUSzIKKyAgICBndGtfd2luZG93X2ljb25pZnkoR1RLX1dJTkRPVyhndWkubWFpbndpbikpOworI2Vsc2UKKyAgICBYSWNvbmlmeVdpbmRvdyhHREtfV0lORE9XX1hESVNQTEFZKGd1aS5tYWlud2luLT53aW5kb3cpLAorCQkgICBHREtfV0lORE9XX1hXSU5ET1coZ3VpLm1haW53aW4tPndpbmRvdyksCisJCSAgIERlZmF1bHRTY3JlZW4oR0RLX1dJTkRPV19YRElTUExBWShndWkubWFpbndpbi0+d2luZG93KSkpOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBCcmluZyB0aGUgVmltIHdpbmRvdyB0byB0aGUgZm9yZWdyb3VuZC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2ZvcmVncm91bmQodm9pZCkKK3sKKyMgaWZkZWYgSEFWRV9HVEsyCisgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1coZ3VpLm1haW53aW4pKTsKKyMgZWxzZQorICAgIGdka193aW5kb3dfcmFpc2UoZ3VpLm1haW53aW4tPndpbmRvdyk7CisjIGVuZGlmCit9CisjZW5kaWYKKworLyoKKyAqIERyYXcgYSBjdXJzb3Igd2l0aG91dCBmb2N1cy4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19ob2xsb3dfY3Vyc29yKGd1aWNvbG9yX1QgY29sb3IpCit7CisgICAgaW50CQlpID0gMTsKKworICAgIGlmIChndWkuZHJhd2FyZWEtPndpbmRvdyA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGd1aV9tY2hfc2V0X2ZnX2NvbG9yKGNvbG9yKTsKKworICAgIGdka19nY19zZXRfZm9yZWdyb3VuZChndWkudGV4dF9nYywgZ3VpLmZnY29sb3IpOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAobWJfbGVmdGhhbHZlKGd1aS5yb3csIGd1aS5jb2wpKQorCWkgPSAyOworI2VuZGlmCisgICAgZ2RrX2RyYXdfcmVjdGFuZ2xlKGd1aS5kcmF3YXJlYS0+d2luZG93LCBndWkudGV4dF9nYywKKwkgICAgRkFMU0UsCisJICAgIEZJTExfWChndWkuY29sKSwgRklMTF9ZKGd1aS5yb3cpLAorCSAgICBpICogZ3VpLmNoYXJfd2lkdGggLSAxLCBndWkuY2hhcl9oZWlnaHQgLSAxKTsKK30KKworLyoKKyAqIERyYXcgcGFydCBvZiBhIGN1cnNvciwgInciIHBpeGVscyB3aWRlLCBhbmQgImgiIHBpeGVscyBoaWdoLCB1c2luZworICogY29sb3IgImNvbG9yIi4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19wYXJ0X2N1cnNvcihpbnQgdywgaW50IGgsIGd1aWNvbG9yX1QgY29sb3IpCit7CisgICAgaWYgKGd1aS5kcmF3YXJlYS0+d2luZG93ID09IE5VTEwpCisJcmV0dXJuOworCisgICAgZ3VpX21jaF9zZXRfZmdfY29sb3IoY29sb3IpOworCisgICAgZ2RrX2djX3NldF9mb3JlZ3JvdW5kKGd1aS50ZXh0X2djLCBndWkuZmdjb2xvcik7CisgICAgZ2RrX2RyYXdfcmVjdGFuZ2xlKGd1aS5kcmF3YXJlYS0+d2luZG93LCBndWkudGV4dF9nYywKKwkgICAgVFJVRSwKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCSAgICAvKiB2ZXJ0aWNhbCBsaW5lIHNob3VsZCBiZSBvbiB0aGUgcmlnaHQgb2YgY3VycmVudCBwb2ludCAqLworCSAgICBDVVJTT1JfQkFSX1JJR0hUID8gRklMTF9YKGd1aS5jb2wgKyAxKSAtIHcgOgorI2VuZGlmCisJICAgIEZJTExfWChndWkuY29sKSwKKwkgICAgRklMTF9ZKGd1aS5yb3cpICsgZ3VpLmNoYXJfaGVpZ2h0IC0gaCwKKwkgICAgdywgaCk7Cit9CisKKworLyoKKyAqIENhdGNoIHVwIHdpdGggYW55IHF1ZXVlZCBYMTEgZXZlbnRzLiAgVGhpcyBtYXkgcHV0IGtleWJvYXJkIGlucHV0IGludG8gdGhlCisgKiBpbnB1dCBidWZmZXIsIGNhbGwgcmVzaXplIGNhbGwtYmFja3MsIHRyaWdnZXIgdGltZXJzIGV0Yy4gIElmIHRoZXJlIGlzCisgKiBub3RoaW5nIGluIHRoZSBYMTEgZXZlbnQgcXVldWUgKCYgbm8gdGltZXJzIHBlbmRpbmcpLCB0aGVuIHdlIHJldHVybgorICogaW1tZWRpYXRlbHkuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3VwZGF0ZSh2b2lkKQoreworICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSAmJiAhdmltX2lzX2lucHV0X2J1Zl9mdWxsKCkpCisJZ3RrX21haW5faXRlcmF0aW9uX2RvKEZBTFNFKTsKK30KKworICAgIHN0YXRpYyBnaW50CitpbnB1dF90aW1lcl9jYihncG9pbnRlciBkYXRhKQoreworICAgIGludCAqdGltZWRfb3V0ID0gKGludCAqKSBkYXRhOworCisgICAgLyogSnVzdCBpbmZvcm0gdGhlIGNhbGxlciBhYm91dCB0aGUgb2NjdXJlbmNlIG9mIGl0ICovCisgICAgKnRpbWVkX291dCA9IFRSVUU7CisKKyAgICBpZiAoZ3RrX21haW5fbGV2ZWwoKSA+IDApCisJZ3RrX21haW5fcXVpdCgpOworCisgICAgcmV0dXJuIEZBTFNFOwkJLyogZG9uJ3QgaGFwcGVuIGFnYWluICovCit9CisKKyNpZmRlZiBGRUFUX1NOSUZGCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb24sIHVzZWQgd2hlbiBkYXRhIGlzIGF2YWlsYWJsZSBvbiB0aGUgU05pRkYgY29ubmVjdGlvbi4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorc25pZmZfcmVxdWVzdF9jYigKKyAgICBncG9pbnRlcglkYXRhLAorICAgIGdpbnQJc291cmNlX2ZkLAorICAgIEdka0lucHV0Q29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBzdGF0aWMgY2hhcl91IGJ5dGVzWzNdID0ge0NTSSwgKGludClLU19FWFRSQSwgKGludClLRV9TTklGRn07CisKKyAgICBhZGRfdG9faW5wdXRfYnVmKGJ5dGVzLCAzKTsKKworICAgIGlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwlndGtfbWFpbl9xdWl0KCk7Cit9CisjZW5kaWYKKworLyoKKyAqIEdVSSBpbnB1dCByb3V0aW5lIGNhbGxlZCBieSBndWlfd2FpdF9mb3JfY2hhcnMoKS4gIFdhaXRzIGZvciBhIGNoYXJhY3RlcgorICogZnJvbSB0aGUga2V5Ym9hcmQuCisgKiAgd3RpbWUgPT0gLTEgICAgIFdhaXQgZm9yZXZlci4KKyAqICB3dGltZSA9PSAwCSAgICBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uCisgKiAgd3RpbWUgPiAwCSAgICBXYWl0IHd0aW1lIG1pbGxpc2Vjb25kcyBmb3IgYSBjaGFyYWN0ZXIuCisgKiBSZXR1cm5zIE9LIGlmIGEgY2hhcmFjdGVyIHdhcyBmb3VuZCB0byBiZSBhdmFpbGFibGUgd2l0aGluIHRoZSBnaXZlbiB0aW1lLAorICogb3IgRkFJTCBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfd2FpdF9mb3JfY2hhcnMobG9uZyB3dGltZSkKK3sKKyAgICBpbnQgZm9jdXM7CisgICAgZ3VpbnQgdGltZXI7CisgICAgc3RhdGljIGludCB0aW1lZF9vdXQ7CisjaWZkZWYgRkVBVF9TTklGRgorICAgIHN0YXRpYyBpbnQJc25pZmZfb24gPSAwOworICAgIHN0YXRpYyBnaW50CXNuaWZmX2lucHV0X2lkID0gMDsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TTklGRgorICAgIGlmIChzbmlmZl9vbiAmJiAhd2FudF9zbmlmZl9yZXF1ZXN0KQorICAgIHsKKwlpZiAoc25pZmZfaW5wdXRfaWQpCisJICAgIGdka19pbnB1dF9yZW1vdmUoc25pZmZfaW5wdXRfaWQpOworCXNuaWZmX29uID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoIXNuaWZmX29uICYmIHdhbnRfc25pZmZfcmVxdWVzdCkKKyAgICB7CisJLyogQWRkIGZkX2Zyb21fc25pZmYgdG8gd2F0Y2ggZm9yIGF2YWlsYWJsZSBkYXRhIGluIG1haW4gbG9vcC4gKi8KKwlzbmlmZl9pbnB1dF9pZCA9IGdka19pbnB1dF9hZGQoZmRfZnJvbV9zbmlmZiwKKwkJCSAgICAgICBHREtfSU5QVVRfUkVBRCwgc25pZmZfcmVxdWVzdF9jYiwgTlVMTCk7CisJc25pZmZfb24gPSAxOworICAgIH0KKyNlbmRpZgorCisgICAgdGltZWRfb3V0ID0gRkFMU0U7CisKKyAgICAvKiB0aGlzIHRpbWVvdXQgbWFrZXMgc3VyZSB0aGF0IHdlIHdpbGwgcmV0dXJuIGlmIG5vIGNoYXJhY3RlcnMgYXJyaXZlZCBpbgorICAgICAqIHRpbWUgKi8KKworICAgIGlmICh3dGltZSA+IDApCisJdGltZXIgPSBndGtfdGltZW91dF9hZGQoKGd1aW50MzIpd3RpbWUsIGlucHV0X3RpbWVyX2NiLCAmdGltZWRfb3V0KTsKKyAgICBlbHNlCisJdGltZXIgPSAwOworCisgICAgZm9jdXMgPSBndWkuaW5fZm9jdXM7CisKKyAgICBkbworICAgIHsKKwkvKiBTdG9wIG9yIHN0YXJ0IGJsaW5raW5nIHdoZW4gZm9jdXMgY2hhbmdlcyAqLworCWlmIChndWkuaW5fZm9jdXMgIT0gZm9jdXMpCisJeworCSAgICBpZiAoZ3VpLmluX2ZvY3VzKQorCQlndWlfbWNoX3N0YXJ0X2JsaW5rKCk7CisJICAgIGVsc2UKKwkJZ3VpX21jaF9zdG9wX2JsaW5rKCk7CisJICAgIGZvY3VzID0gZ3VpLmluX2ZvY3VzOworCX0KKworCS8qCisJICogTG9vcCBpbiBHVEsrIHByb2Nlc3NpbmcgIHVudGlsIGEgdGltZW91dCBvciBpbnB1dCBvY2N1cnMuCisJICovCisJZ3RrX21haW4oKTsKKworCS8qIEdvdCBjaGFyLCByZXR1cm4gaW1tZWRpYXRlbHkgKi8KKwlpZiAoaW5wdXRfYXZhaWxhYmxlKCkpCisJeworCSAgICBpZiAodGltZXIgIT0gMCAmJiAhdGltZWRfb3V0KQorCQlndGtfdGltZW91dF9yZW1vdmUodGltZXIpOworCSAgICByZXR1cm4gT0s7CisJfQorICAgIH0gd2hpbGUgKHd0aW1lIDwgMCB8fCAhdGltZWRfb3V0KTsKKworICAgIC8qCisgICAgICogRmx1c2ggYWxsIGV2ZW50dWFsbHkgcGVuZGluZyAoZHJhd2luZykgZXZlbnRzLgorICAgICAqLworICAgIGd1aV9tY2hfdXBkYXRlKCk7CisKKyAgICByZXR1cm4gRkFJTDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT3V0cHV0IGRyYXdpbmcgcm91dGluZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiBGbHVzaCBhbnkgb3V0cHV0IHRvIHRoZSBzY3JlZW4gKi8KKyAgICB2b2lkCitndWlfbWNoX2ZsdXNoKHZvaWQpCit7CisjaWZkZWYgSEFWRV9HVEtfTVVMVElIRUFECisgICAgaWYgKGd1aS5tYWlud2luICE9IE5VTEwgJiYgR1RLX1dJREdFVF9SRUFMSVpFRChndWkubWFpbndpbikpCisJZ2RrX2Rpc3BsYXlfc3luYyhndGtfd2lkZ2V0X2dldF9kaXNwbGF5KGd1aS5tYWlud2luKSk7CisjZWxzZQorICAgIGdka19mbHVzaCgpOyAvKiBoaXN0b3JpY2FsIG1pc25vbWVyOiBjYWxscyBYU3luYygpLCBub3QgWEZsdXNoKCkgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfR1RLMgorICAgIC8qIFRoaXMgaGFwcGVucyB0byBhY3R1YWxseSBkbyB3aGF0IGd1aV9tY2hfZmx1c2goKSBpcyBzdXBwb3NlZCB0byBkbywKKyAgICAgKiBhY2NvcmRpbmcgdG8gdGhlIGNvbW1lbnQgYWJvdmUuICovCisgICAgaWYgKGd1aS5kcmF3YXJlYSAhPSBOVUxMICYmIGd1aS5kcmF3YXJlYS0+d2luZG93ICE9IE5VTEwpCisJZ2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMoZ3VpLmRyYXdhcmVhLT53aW5kb3csIEZBTFNFKTsKKyNlbmRpZgorfQorCisvKgorICogQ2xlYXIgYSByZWN0YW5ndWxhciByZWdpb24gb2YgdGhlIHNjcmVlbiBmcm9tIHRleHQgcG9zIChyb3cxLCBjb2wxKSB0bworICogKHJvdzIsIGNvbDIpIGluY2x1c2l2ZS4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfY2xlYXJfYmxvY2soaW50IHJvdzEsIGludCBjb2wxLCBpbnQgcm93MiwgaW50IGNvbDIpCit7CisgICAgR2RrQ29sb3IgY29sb3I7CisKKyAgICBpZiAoZ3VpLmRyYXdhcmVhLT53aW5kb3cgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBjb2xvci5waXhlbCA9IGd1aS5iYWNrX3BpeGVsOworCisgICAgZ2RrX2djX3NldF9mb3JlZ3JvdW5kKGd1aS50ZXh0X2djLCAmY29sb3IpOworCisgICAgLyogQ2xlYXIgb25lIGV4dHJhIHBpeGVsIGF0IHRoZSBmYXIgcmlnaHQsIGZvciB3aGVuIGJvbGQgY2hhcmFjdGVycyBoYXZlCisgICAgICogc3BpbGxlZCBvdmVyIHRvIHRoZSB3aW5kb3cgYm9yZGVyLiAqLworICAgIGdka19kcmF3X3JlY3RhbmdsZShndWkuZHJhd2FyZWEtPndpbmRvdywgZ3VpLnRleHRfZ2MsIFRSVUUsCisJCSAgICAgICBGSUxMX1goY29sMSksIEZJTExfWShyb3cxKSwKKwkJICAgICAgIChjb2wyIC0gY29sMSArIDEpICogZ3VpLmNoYXJfd2lkdGgKKwkJCQkJCSAgICAgICsgKGNvbDIgPT0gQ29sdW1ucyAtIDEpLAorCQkgICAgICAgKHJvdzIgLSByb3cxICsgMSkgKiBndWkuY2hhcl9oZWlnaHQpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9jbGVhcl9hbGwodm9pZCkKK3sKKyAgICBpZiAoZ3VpLmRyYXdhcmVhLT53aW5kb3cgIT0gTlVMTCkKKwlnZGtfd2luZG93X2NsZWFyKGd1aS5kcmF3YXJlYS0+d2luZG93KTsKK30KKworLyoKKyAqIFJlZHJhdyBhbnkgdGV4dCByZXZlYWxlZCBieSBzY3JvbGxpbmcgdXAvZG93bi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjaGVja19jb3B5X2FyZWEodm9pZCkKK3sKKyAgICBHZGtFdmVudAkqZXZlbnQ7CisgICAgaW50CQlleHBvc2VfY291bnQ7CisKKyAgICBpZiAoZ3VpLnZpc2liaWxpdHkgIT0gR0RLX1ZJU0lCSUxJVFlfUEFSVElBTCkKKwlyZXR1cm47CisKKyAgICAvKiBBdm9pZCByZWRyYXdpbmcgdGhlIGN1cnNvciB3aGlsZSBzY3JvbGxpbmcgb3IgaXQnbGwgZW5kIHVwIHdoZXJlCisgICAgICogd2UgZG9uJ3Qgd2FudCBpdCB0byBiZS4JSSdtIG5vdCBzdXJlIGlmIGl0J3MgY29ycmVjdCB0byBjYWxsCisgICAgICogZ3VpX2RvbnRfdXBkYXRlX2N1cnNvcigpIGF0IHRoaXMgcG9pbnQgYnV0IGl0IHdvcmtzIGFzIGEgcXVpY2sKKyAgICAgKiBmaXggZm9yIG5vdy4gKi8KKyAgICBndWlfZG9udF91cGRhdGVfY3Vyc29yKCk7CisKKyAgICBkbworICAgIHsKKwkvKiBXYWl0IHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNjcm9sbCB3b3JrZWQgb3Igbm90LiAqLworCWV2ZW50ID0gZ2RrX2V2ZW50X2dldF9ncmFwaGljc19leHBvc2UoZ3VpLmRyYXdhcmVhLT53aW5kb3cpOworCisJaWYgKGV2ZW50ID09IE5VTEwpCisJICAgIGJyZWFrOyAvKiByZWNlaXZlZCBOb0V4cG9zZSBldmVudCAqLworCisJZ3VpX3JlZHJhdyhldmVudC0+ZXhwb3NlLmFyZWEueCwgZXZlbnQtPmV4cG9zZS5hcmVhLnksCisJCSAgIGV2ZW50LT5leHBvc2UuYXJlYS53aWR0aCwgZXZlbnQtPmV4cG9zZS5hcmVhLmhlaWdodCk7CisKKwlleHBvc2VfY291bnQgPSBldmVudC0+ZXhwb3NlLmNvdW50OworCWdka19ldmVudF9mcmVlKGV2ZW50KTsKKyAgICB9CisgICAgd2hpbGUgKGV4cG9zZV9jb3VudCA+IDApOyAvKiBtb3JlIGV2ZW50cyBmb2xsb3cgKi8KKworICAgIGd1aV9jYW5fdXBkYXRlX2N1cnNvcigpOworfQorCisvKgorICogRGVsZXRlIHRoZSBnaXZlbiBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUgZ2l2ZW4gcm93LCBzY3JvbGxpbmcgdXAgYW55CisgKiB0ZXh0IGZ1cnRoZXIgZG93biB3aXRoaW4gdGhlIHNjcm9sbCByZWdpb24uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RlbGV0ZV9saW5lcyhpbnQgcm93LCBpbnQgbnVtX2xpbmVzKQoreworICAgIGlmIChndWkudmlzaWJpbGl0eSA9PSBHREtfVklTSUJJTElUWV9GVUxMWV9PQlNDVVJFRCkKKwlyZXR1cm47CQkJLyogQ2FuJ3Qgc2VlIHRoZSB3aW5kb3cgKi8KKworICAgIGdka19nY19zZXRfZm9yZWdyb3VuZChndWkudGV4dF9nYywgZ3VpLmZnY29sb3IpOworICAgIGdka19nY19zZXRfYmFja2dyb3VuZChndWkudGV4dF9nYywgZ3VpLmJnY29sb3IpOworCisgICAgLyogY29weSBvbmUgZXh0cmEgcGl4ZWwsIGZvciB3aGVuIGJvbGQgaGFzIHNwaWxsZWQgb3ZlciAqLworICAgIGdka193aW5kb3dfY29weV9hcmVhKGd1aS5kcmF3YXJlYS0+d2luZG93LCBndWkudGV4dF9nYywKKwkgICAgRklMTF9YKGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQpLCBGSUxMX1kocm93KSwKKwkgICAgZ3VpLmRyYXdhcmVhLT53aW5kb3csCisJICAgIEZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KSwKKwkgICAgRklMTF9ZKHJvdyArIG51bV9saW5lcyksCisJICAgIGd1aS5jaGFyX3dpZHRoICogKGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0CisJCQkJCSAgICAtIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQgKyAxKSArIDEsCisJICAgIGd1aS5jaGFyX2hlaWdodCAqIChndWkuc2Nyb2xsX3JlZ2lvbl9ib3QgLSByb3cgLSBudW1fbGluZXMgKyAxKSk7CisKKyAgICBndWlfY2xlYXJfYmxvY2soZ3VpLnNjcm9sbF9yZWdpb25fYm90IC0gbnVtX2xpbmVzICsgMSwKKwkJCQkJCSAgICAgICBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0LAorCQkgICAgZ3VpLnNjcm9sbF9yZWdpb25fYm90LCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCk7CisgICAgY2hlY2tfY29weV9hcmVhKCk7Cit9CisKKy8qCisgKiBJbnNlcnQgdGhlIGdpdmVuIG51bWJlciBvZiBsaW5lcyBiZWZvcmUgdGhlIGdpdmVuIHJvdywgc2Nyb2xsaW5nIGRvd24gYW55CisgKiBmb2xsb3dpbmcgdGV4dCB3aXRoaW4gdGhlIHNjcm9sbCByZWdpb24uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2luc2VydF9saW5lcyhpbnQgcm93LCBpbnQgbnVtX2xpbmVzKQoreworICAgIGlmIChndWkudmlzaWJpbGl0eSA9PSBHREtfVklTSUJJTElUWV9GVUxMWV9PQlNDVVJFRCkKKwlyZXR1cm47CQkJLyogQ2FuJ3Qgc2VlIHRoZSB3aW5kb3cgKi8KKworICAgIGdka19nY19zZXRfZm9yZWdyb3VuZChndWkudGV4dF9nYywgZ3VpLmZnY29sb3IpOworICAgIGdka19nY19zZXRfYmFja2dyb3VuZChndWkudGV4dF9nYywgZ3VpLmJnY29sb3IpOworCisgICAgLyogY29weSBvbmUgZXh0cmEgcGl4ZWwsIGZvciB3aGVuIGJvbGQgaGFzIHNwaWxsZWQgb3ZlciAqLworICAgIGdka193aW5kb3dfY29weV9hcmVhKGd1aS5kcmF3YXJlYS0+d2luZG93LCBndWkudGV4dF9nYywKKwkgICAgRklMTF9YKGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQpLCBGSUxMX1kocm93ICsgbnVtX2xpbmVzKSwKKwkgICAgZ3VpLmRyYXdhcmVhLT53aW5kb3csCisJICAgIEZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KSwgRklMTF9ZKHJvdyksCisJICAgIGd1aS5jaGFyX3dpZHRoICogKGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0CisJCQkJCSAgICAtIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQgKyAxKSArIDEsCisJICAgIGd1aS5jaGFyX2hlaWdodCAqIChndWkuc2Nyb2xsX3JlZ2lvbl9ib3QgLSByb3cgLSBudW1fbGluZXMgKyAxKSk7CisKKyAgICBndWlfY2xlYXJfYmxvY2socm93LCBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0LAorCQkJCXJvdyArIG51bV9saW5lcyAtIDEsIGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0KTsKKyAgICBjaGVja19jb3B5X2FyZWEoKTsKK30KKworLyoKKyAqIFggU2VsZWN0aW9uIHN0dWZmLCBmb3IgY3V0dGluZyBhbmQgcGFzdGluZyB0ZXh0IHRvIG90aGVyIHdpbmRvd3MuCisgKi8KKyAgICB2b2lkCitjbGlwX21jaF9yZXF1ZXN0X3NlbGVjdGlvbihWaW1DbGlwYm9hcmQgKmNiZCkKK3sKKyAgICBHZGtBdG9tCXRhcmdldDsKKyAgICB1bnNpZ25lZAlpOworICAgIGludAkJbmJ5dGVzOworICAgIGNoYXJfdQkqYnVmZmVyOworCisgICAgZm9yIChpID0gMDsgaSA8IE5fU0VMRUNUSU9OX1RBUkdFVFM7ICsraSkKKyAgICB7CisJcmVjZWl2ZWRfc2VsZWN0aW9uID0gUlNfTk9ORTsKKwl0YXJnZXQgPSBnZGtfYXRvbV9pbnRlcm4oc2VsZWN0aW9uX3RhcmdldHNbaV0udGFyZ2V0LCBGQUxTRSk7CisKKwlndGtfc2VsZWN0aW9uX2NvbnZlcnQoZ3VpLmRyYXdhcmVhLAorCQkJICAgICAgY2JkLT5ndGtfc2VsX2F0b20sIHRhcmdldCwKKwkJCSAgICAgIChndWludDMyKUdES19DVVJSRU5UX1RJTUUpOworCisJd2hpbGUgKHJlY2VpdmVkX3NlbGVjdGlvbiA9PSBSU19OT05FKQorCSAgICBndGtfbWFpbigpOwkvKiB3YWl0IGZvciBzZWxlY3Rpb25fcmVjZWl2ZWRfY2IgKi8KKworCWlmIChyZWNlaXZlZF9zZWxlY3Rpb24gIT0gUlNfRkFJTCkKKwkgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIEZpbmFsIGZhbGxiYWNrIHBvc2l0aW9uIC0gdXNlIHRoZSBYIENVVF9CVUZGRVIwIHN0b3JlICovCisgICAgbmJ5dGVzID0gMDsKKyAgICBidWZmZXIgPSAoY2hhcl91ICopWEZldGNoQnVmZmVyKEdES19XSU5ET1dfWERJU1BMQVkoZ3VpLm1haW53aW4tPndpbmRvdyksCisJCQkJICAgICZuYnl0ZXMsIDApOworICAgIGlmIChuYnl0ZXMgPiAwKQorICAgIHsKKwkvKiBHb3Qgc29tZXRoaW5nICovCisJY2xpcF95YW5rX3NlbGVjdGlvbihNQ0hBUiwgYnVmZmVyLCAobG9uZyluYnl0ZXMsIGNiZCk7CisJaWYgKHBfdmVyYm9zZSA+IDApCisJICAgIHNtc2coKGNoYXJfdSAqKV8oIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iKSk7CisgICAgfQorICAgIGlmIChidWZmZXIgIT0gTlVMTCkKKwlYRnJlZShidWZmZXIpOworfQorCisvKgorICogRGlzb3duIHRoZSBzZWxlY3Rpb24uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK2NsaXBfbWNoX2xvc2Vfc2VsZWN0aW9uKFZpbUNsaXBib2FyZCAqY2JkKQoreworICAgIC8qIFdFSVJEOiB3aGVuIHVzaW5nIE5VTEwgdG8gYWN0dWFsbHkgZGlzb3duIHRoZSBzZWxlY3Rpb24sIHdlIGxvc2UgdGhlCisgICAgICogc2VsZWN0aW9uIHRoZSBmaXJzdCB0aW1lIHdlIG93biBpdC4gKi8KKyAgICAvKgorICAgIGd0a19zZWxlY3Rpb25fb3duZXJfc2V0KE5VTEwsIGNiZC0+Z3RrX3NlbF9hdG9tLCAoZ3VpbnQzMilHREtfQ1VSUkVOVF9USU1FKTsKKyAgICBndWlfbWNoX3VwZGF0ZSgpOworICAgICAqLworfQorCisvKgorICogT3duIHRoZSBzZWxlY3Rpb24gYW5kIHJldHVybiBPSyBpZiBpdCB3b3JrZWQuCisgKi8KKyAgICBpbnQKK2NsaXBfbWNoX293bl9zZWxlY3Rpb24oVmltQ2xpcGJvYXJkICpjYmQpCit7CisgICAgaW50IHN1Y2Nlc3M7CisKKyAgICBzdWNjZXNzID0gZ3RrX3NlbGVjdGlvbl9vd25lcl9zZXQoZ3VpLmRyYXdhcmVhLCBjYmQtPmd0a19zZWxfYXRvbSwKKwkJCQkgICAgICAoZ3VpbnQzMilHREtfQ1VSUkVOVF9USU1FKTsKKyAgICBndWlfbWNoX3VwZGF0ZSgpOworICAgIHJldHVybiAoc3VjY2VzcykgPyBPSyA6IEZBSUw7Cit9CisKKy8qCisgKiBTZW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB0byB0aGUgY2xpcGJvYXJkLiAgRG8gbm90aGluZyBmb3IgWCBiZWNhdXNlIHdlCisgKiB3aWxsIGZpbGwgaW4gdGhlIHNlbGVjdGlvbiBvbmx5IHdoZW4gcmVxdWVzdGVkIGJ5IGFub3RoZXIgYXBwLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitjbGlwX21jaF9zZXRfc2VsZWN0aW9uKFZpbUNsaXBib2FyZCAqY2JkKQoreworfQorCisKKyNpZiBkZWZpbmVkKEZFQVRfTUVOVSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBNYWtlIGEgbWVudSBpdGVtIGFwcGVhciBlaXRoZXIgYWN0aXZlIG9yIG5vdCBhY3RpdmUgKGdyZXkgb3Igbm90IGdyZXkpLgorICovCisgICAgdm9pZAorZ3VpX21jaF9tZW51X2dyZXkodmltbWVudV9UICptZW51LCBpbnQgZ3JleSkKK3sKKyAgICBpZiAobWVudS0+aWQgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBpZiAobWVudV9pc19zZXBhcmF0b3IobWVudS0+bmFtZSkpCisJZ3JleSA9IFRSVUU7CisKKyAgICBndWlfbWNoX21lbnVfaGlkZGVuKG1lbnUsIEZBTFNFKTsKKyAgICAvKiBCZSBjbGV2ZXIgYWJvdXQgYml0ZmllbGRzIHZlcnN1cyB0cnVlIGJvb2xlYW5zIGhlcmUhICovCisgICAgaWYgKCFHVEtfV0lER0VUX1NFTlNJVElWRShtZW51LT5pZCkgPT0gIWdyZXkpCisgICAgeworCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShtZW51LT5pZCwgIWdyZXkpOworCWd1aV9tY2hfdXBkYXRlKCk7CisgICAgfQorfQorCisvKgorICogTWFrZSBtZW51IGl0ZW0gaGlkZGVuIG9yIG5vdCBoaWRkZW4uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX21lbnVfaGlkZGVuKHZpbW1lbnVfVCAqbWVudSwgaW50IGhpZGRlbikKK3sKKyAgICBpZiAobWVudS0+aWQgPT0gMCkKKwlyZXR1cm47CisKKyAgICBpZiAoaGlkZGVuKQorICAgIHsKKwlpZiAoR1RLX1dJREdFVF9WSVNJQkxFKG1lbnUtPmlkKSkKKwl7CisJICAgIGd0a193aWRnZXRfaGlkZShtZW51LT5pZCk7CisJICAgIGd1aV9tY2hfdXBkYXRlKCk7CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmICghR1RLX1dJREdFVF9WSVNJQkxFKG1lbnUtPmlkKSkKKwl7CisJICAgIGd0a193aWRnZXRfc2hvdyhtZW51LT5pZCk7CisJICAgIGd1aV9tY2hfdXBkYXRlKCk7CisJfQorICAgIH0KK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHNldHRpbmcgYWxsIHRoZSBtZW51cyB0byBncmV5L2hpZGRlbiBvciBub3QuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RyYXdfbWVudWJhcih2b2lkKQoreworICAgIC8qIGp1c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHZpc3VhbCBjaGFuZ2VzIGdldCBlZmZlY3QgaW1tZWRpYXRlbHkgKi8KKyAgICBndWlfbWNoX3VwZGF0ZSgpOworfQorI2VuZGlmIC8qIEZFQVRfTUVOVSAqLworCisvKgorICogU2Nyb2xsYmFyIHN0dWZmLgorICovCisgICAgdm9pZAorZ3VpX21jaF9lbmFibGVfc2Nyb2xsYmFyKHNjcm9sbGJhcl9UICpzYiwgaW50IGZsYWcpCit7CisgICAgaWYgKHNiLT5pZCA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGlmIChmbGFnKQorCWd0a193aWRnZXRfc2hvdyhzYi0+aWQpOworICAgIGVsc2UKKwlndGtfd2lkZ2V0X2hpZGUoc2ItPmlkKTsKKworICAgIHVwZGF0ZV93aW5kb3dfbWFuYWdlcl9oaW50cygpOworfQorCisKKy8qCisgKiBSZXR1cm4gdGhlIFJHQiB2YWx1ZSBvZiBhIHBpeGVsIGFzIGxvbmcuCisgKi8KKyAgICBsb25nX3UKK2d1aV9tY2hfZ2V0X3JnYihndWljb2xvcl9UIHBpeGVsKQoreworICAgIEdka0NvbG9yIGNvbG9yOworI2lmbmRlZiBIQVZFX0dUSzIKKyAgICBHZGtDb2xvckNvbnRleHQgKmNjOworCisgICAgY2MgPSBnZGtfY29sb3JfY29udGV4dF9uZXcoZ3RrX3dpZGdldF9nZXRfdmlzdWFsKGd1aS5kcmF3YXJlYSksCisJCQkgICAgICAgZ3RrX3dpZGdldF9nZXRfY29sb3JtYXAoZ3VpLmRyYXdhcmVhKSk7CisgICAgY29sb3IucGl4ZWwgPSBwaXhlbDsKKyAgICBnZGtfY29sb3JfY29udGV4dF9xdWVyeV9jb2xvcihjYywgJmNvbG9yKTsKKworICAgIGdka19jb2xvcl9jb250ZXh0X2ZyZWUoY2MpOworI2Vsc2UKKyAgICBnZGtfY29sb3JtYXBfcXVlcnlfY29sb3IoZ3RrX3dpZGdldF9nZXRfY29sb3JtYXAoZ3VpLmRyYXdhcmVhKSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpcGl4ZWwsICZjb2xvcik7CisjZW5kaWYKKworICAgIHJldHVybiAoKCh1bnNpZ25lZCljb2xvci5yZWQgICAmIDB4ZmYwMCkgPDwgOCkKKwkgfCAgKCh1bnNpZ25lZCljb2xvci5ncmVlbiAmIDB4ZmYwMCkKKwkgfCAoKCh1bnNpZ25lZCljb2xvci5ibHVlICAmIDB4ZmYwMCkgPj4gOCk7Cit9CisKKy8qCisgKiBHZXQgY3VycmVudCB5IG1vdXNlIGNvb3JkaW5hdGUgaW4gdGV4dCB3aW5kb3cuCisgKiBSZXR1cm4gLTEgd2hlbiB1bmtub3duLgorICovCisgICAgaW50CitndWlfbWNoX2dldF9tb3VzZV94KHZvaWQpCit7CisgICAgaW50IHdpbl94OworCisgICAgZ2RrX3dpbmRvd19nZXRfcG9pbnRlcihndWkuZHJhd2FyZWEtPndpbmRvdywgJndpbl94LCBOVUxMLCBOVUxMKTsKKyAgICByZXR1cm4gd2luX3g7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfZ2V0X21vdXNlX3kodm9pZCkKK3sKKyAgICBpbnQgd2luX3k7CisKKyAgICBnZGtfd2luZG93X2dldF9wb2ludGVyKGd1aS5kcmF3YXJlYS0+d2luZG93LCBOVUxMLCAmd2luX3ksIE5VTEwpOworICAgIHJldHVybiB3aW5feTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0bW91c2UoaW50IHgsIGludCB5KQoreworICAgIC8qIFNvcnJ5IGZvciB0aGUgWGxpYiBjYWxsLCBidXQgd2UgY2FuJ3QgYXZvaWQgaXQsIHNpbmNlIHRoZXJlIGlzIG5vCisgICAgICogaW50ZXJuYWwgR0RLIG1lY2hhbmlzbSBwcmVzZW50IHRvIGFjY29tcGxpc2ggdGhpcy4gIChhbmQgZm9yIGdvb2QKKyAgICAgKiByZWFzb24uLi4pICovCisgICAgWFdhcnBQb2ludGVyKEdES19XSU5ET1dfWERJU1BMQVkoZ3VpLmRyYXdhcmVhLT53aW5kb3cpLAorCQkgKFdpbmRvdykwLCBHREtfV0lORE9XX1hXSU5ET1coZ3VpLmRyYXdhcmVhLT53aW5kb3cpLAorCQkgMCwgMCwgMFUsIDBVLCB4LCB5KTsKK30KKworCisjaWZkZWYgRkVBVF9NT1VTRVNIQVBFCisvKiBUaGUgbGFzdCBzZXQgbW91c2UgcG9pbnRlciBzaGFwZSBpcyByZW1lbWJlcmVkLCB0byBiZSB1c2VkIHdoZW4gaXQgZ29lcworICogZnJvbSBoaWRkZW4gdG8gbm90IGhpZGRlbi4gKi8KK3N0YXRpYyBpbnQgbGFzdF9zaGFwZSA9IDA7CisjZW5kaWYKKworLyoKKyAqIFVzZSB0aGUgYmxhbmsgbW91c2UgcG9pbnRlciBvciBub3QuCisgKgorICogaGlkZTogVFJVRSA9IHVzZSBibGFuayBwdHIsIEZBTFNFID0gdXNlIHBhcmVudCBwdHIKKyAqLworICAgIHZvaWQKK2d1aV9tY2hfbW91c2VoaWRlKGludCBoaWRlKQoreworICAgIGlmIChndWkucG9pbnRlcl9oaWRkZW4gIT0gaGlkZSkKKyAgICB7CisJZ3VpLnBvaW50ZXJfaGlkZGVuID0gaGlkZTsKKwlpZiAoZ3VpLmRyYXdhcmVhLT53aW5kb3cgJiYgZ3VpLmJsYW5rX3BvaW50ZXIgIT0gTlVMTCkKKwl7CisJICAgIGlmIChoaWRlKQorCQlnZGtfd2luZG93X3NldF9jdXJzb3IoZ3VpLmRyYXdhcmVhLT53aW5kb3csIGd1aS5ibGFua19wb2ludGVyKTsKKwkgICAgZWxzZQorI2lmZGVmIEZFQVRfTU9VU0VTSEFQRQorCQltY2hfc2V0X21vdXNlX3NoYXBlKGxhc3Rfc2hhcGUpOworI2Vsc2UKKwkJZ2RrX3dpbmRvd19zZXRfY3Vyc29yKGd1aS5kcmF3YXJlYS0+d2luZG93LCBOVUxMKTsKKyNlbmRpZgorCX0KKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTU9VU0VTSEFQRSkgfHwgZGVmaW5lZChQUk9UTykKKworLyogVGFibGUgZm9yIHNoYXBlIElEcy4gIEtlZXAgaW4gc3luYyB3aXRoIHRoZSBtc2hhcGVfbmFtZXNbXSB0YWJsZSBpbgorICogbWlzYzIuYyEgKi8KK3N0YXRpYyBjb25zdCBpbnQgbXNoYXBlX2lkc1tdID0KK3sKKyAgICBHREtfTEVGVF9QVFIsCQkvKiBhcnJvdyAqLworICAgIEdES19DVVJTT1JfSVNfUElYTUFQLAkvKiBibGFuayAqLworICAgIEdES19YVEVSTSwJCQkvKiBiZWFtICovCisgICAgR0RLX1NCX1ZfRE9VQkxFX0FSUk9XLAkvKiB1cGRvd24gKi8KKyAgICBHREtfU0laSU5HLAkJCS8qIHVkc2l6aW5nICovCisgICAgR0RLX1NCX0hfRE9VQkxFX0FSUk9XLAkvKiBsZWZ0cmlnaHQgKi8KKyAgICBHREtfU0laSU5HLAkJCS8qIGxyc2l6aW5nICovCisgICAgR0RLX1dBVENILAkJCS8qIGJ1c3kgKi8KKyAgICBHREtfWF9DVVJTT1IsCQkvKiBubyAqLworICAgIEdES19DUk9TU0hBSVIsCQkvKiBjcm9zc2hhaXIgKi8KKyAgICBHREtfSEFORDEsCQkJLyogaGFuZDEgKi8KKyAgICBHREtfSEFORDIsCQkJLyogaGFuZDIgKi8KKyAgICBHREtfUEVOQ0lMLAkJCS8qIHBlbmNpbCAqLworICAgIEdES19RVUVTVElPTl9BUlJPVywJCS8qIHF1ZXN0aW9uICovCisgICAgR0RLX1JJR0hUX1BUUiwJCS8qIHJpZ2h0LWFycm93ICovCisgICAgR0RLX0NFTlRFUl9QVFIsCQkvKiB1cC1hcnJvdyAqLworICAgIEdES19MRUZUX1BUUgkJLyogbGFzdCBvbmUgKi8KK307CisKKyAgICB2b2lkCittY2hfc2V0X21vdXNlX3NoYXBlKGludCBzaGFwZSkKK3sKKyAgICBpbnQJCSAgIGlkOworICAgIEdka0N1cnNvcgkgICAqYzsKKworICAgIGlmIChndWkuZHJhd2FyZWEtPndpbmRvdyA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGlmIChzaGFwZSA9PSBNU0hBUEVfSElERSB8fCBndWkucG9pbnRlcl9oaWRkZW4pCisJZ2RrX3dpbmRvd19zZXRfY3Vyc29yKGd1aS5kcmF3YXJlYS0+d2luZG93LCBndWkuYmxhbmtfcG9pbnRlcik7CisgICAgZWxzZQorICAgIHsKKwlpZiAoc2hhcGUgPj0gTVNIQVBFX05VTUJFUkVEKQorCXsKKwkgICAgaWQgPSBzaGFwZSAtIE1TSEFQRV9OVU1CRVJFRDsKKwkgICAgaWYgKGlkID49IEdES19MQVNUX0NVUlNPUikKKwkJaWQgPSBHREtfTEVGVF9QVFI7CisJICAgIGVsc2UKKwkJaWQgJj0gfjE7CS8qIHRoZXkgYXJlIGFsd2F5cyBldmVuICh3aHk/KSAqLworCX0KKwllbHNlCisJICAgIGlkID0gbXNoYXBlX2lkc1tzaGFwZV07CisjIGlmZGVmIEhBVkVfR1RLX01VTFRJSEVBRAorCWMgPSBnZGtfY3Vyc29yX25ld19mb3JfZGlzcGxheSgKKwkJZ3RrX3dpZGdldF9nZXRfZGlzcGxheShndWkuZHJhd2FyZWEpLCBpZCk7CisjIGVsc2UKKwljID0gZ2RrX2N1cnNvcl9uZXcoaWQpOworIyBlbmRpZgorCWdka193aW5kb3dfc2V0X2N1cnNvcihndWkuZHJhd2FyZWEtPndpbmRvdywgYyk7CisJZ2RrX2N1cnNvcl9kZXN0cm95KGMpOyAvKiBVbnJlZiwgYWN0dWFsbHkuICBCbG9vZHkgR1RLKyAxLiAqLworICAgIH0KKyAgICBpZiAoc2hhcGUgIT0gTVNIQVBFX0hJREUpCisJbGFzdF9zaGFwZSA9IHNoYXBlOworfQorI2VuZGlmIC8qIEZFQVRfTU9VU0VTSEFQRSAqLworCisKKyNpZiBkZWZpbmVkKEZFQVRfU0lHTl9JQ09OUykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBTaWducyBhcmUgY3VycmVudGx5IGFsd2F5cyAyIGNoYXJzIHdpZGUuICBXaXRoIEdUSysgMiwgdGhlIGltYWdlIHdpbGwgYmUKKyAqIHNjYWxlZCBkb3duIGlmIHRoZSBjdXJyZW50IGZvbnQgaXMgbm90IGJpZyBlbm91Z2gsIG9yIHNjYWxlZCB1cCBpZiB0aGUgaW1hZ2UKKyAqIHNpemUgaXMgbGVzcyB0aGFuIDMvNCBvZiB0aGUgbWF4aW11bSBzaWduIHNpemUuICBXaXRoIEdUSysgMSwgdGhlIHBpeG1hcAorICogd2lsbCBiZSBjdXQgb2ZmIGlmIHRoZSBjdXJyZW50IGZvbnQgaXMgbm90IGJpZyBlbm91Z2gsIG9yIGNlbnRlcmVkIGlmIGl0J3MKKyAqIHRvbyBzbWFsbC4KKyAqLworIyBkZWZpbmUgU0lHTl9XSURUSCAgKDIgKiBndWkuY2hhcl93aWR0aCkKKyMgZGVmaW5lIFNJR05fSEVJR0hUIChndWkuY2hhcl9oZWlnaHQpCisjIGRlZmluZSBTSUdOX0FTUEVDVCAoKGRvdWJsZSlTSUdOX0hFSUdIVCAvIChkb3VibGUpU0lHTl9XSURUSCkKKworIyBpZmRlZiBIQVZFX0dUSzIKKworICAgIHZvaWQKK2d1aV9tY2hfZHJhd3NpZ24oaW50IHJvdywgaW50IGNvbCwgaW50IHR5cGVucikKK3sKKyAgICBHZGtQaXhidWYgKnNpZ247CisKKyAgICBzaWduID0gKEdka1BpeGJ1ZiAqKXNpZ25fZ2V0X2ltYWdlKHR5cGVucik7CisKKyAgICBpZiAoc2lnbiAhPSBOVUxMICYmIGd1aS5kcmF3YXJlYSAhPSBOVUxMICYmIGd1aS5kcmF3YXJlYS0+d2luZG93ICE9IE5VTEwpCisgICAgeworCWludCB3aWR0aDsKKwlpbnQgaGVpZ2h0OworCWludCB4b2Zmc2V0OworCWludCB5b2Zmc2V0OworCWludCBuZWVkX3NjYWxlOworCisJd2lkdGggID0gZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoc2lnbik7CisJaGVpZ2h0ID0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KHNpZ24pOworCS8qCisJICogRGVjaWRlIHdoZXRoZXIgd2UgbmVlZCB0byBzY2FsZS4gIEFsbG93IG9uZSBwaXhlbCBvZiBib3JkZXIKKwkgKiB3aWR0aCB0byBiZSBjdXQgb2ZmLCBpbiBvcmRlciB0byBhdm9pZCBleGNlc3NpdmUgc2NhbGluZyBmb3IKKwkgKiB0aW55IGRpZmZlcmVuY2VzIGluIGZvbnQgc2l6ZS4KKwkgKi8KKwluZWVkX3NjYWxlID0gKHdpZHRoID4gU0lHTl9XSURUSCArIDIKKwkJICAgICAgfHwgaGVpZ2h0ID4gU0lHTl9IRUlHSFQgKyAyCisJCSAgICAgIHx8ICh3aWR0aCA8IDMgKiBTSUdOX1dJRFRIIC8gNAorCQkJICAmJiBoZWlnaHQgPCAzICogU0lHTl9IRUlHSFQgLyA0KSk7CisJaWYgKG5lZWRfc2NhbGUpCisJeworCSAgICBkb3VibGUgYXNwZWN0OworCisJICAgIC8qIEtlZXAgdGhlIG9yaWdpbmFsIGFzcGVjdCByYXRpbyAqLworCSAgICBhc3BlY3QgPSAoZG91YmxlKWhlaWdodCAvIChkb3VibGUpd2lkdGg7CisJICAgIHdpZHRoICA9IChkb3VibGUpU0lHTl9XSURUSCAqIFNJR05fQVNQRUNUIC8gYXNwZWN0OworCSAgICB3aWR0aCAgPSBNSU4od2lkdGgsIFNJR05fV0lEVEgpOworCSAgICBoZWlnaHQgPSAoZG91YmxlKXdpZHRoICogYXNwZWN0OworCisJICAgIC8qIFRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIHdvcnRoIGNhY2hpbmcsIGFuZCBkb2luZyBzbworCSAgICAgKiB3b3VsZCBjb21wbGljYXRlIHRoZSBjb2RlIHF1aXRlIGEgYml0LiAqLworCSAgICBzaWduID0gZ2RrX3BpeGJ1Zl9zY2FsZV9zaW1wbGUoc2lnbiwgd2lkdGgsIGhlaWdodCwKKwkJCQkJICAgR0RLX0lOVEVSUF9CSUxJTkVBUik7CisJICAgIGlmIChzaWduID09IE5VTEwpCisJCXJldHVybjsgLyogb3V0IG9mIG1lbW9yeSAqLworCX0KKworCS8qIFRoZSBvcmlnaW4gaXMgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBwaXhtYXAuICBUaGVyZWZvcmUKKwkgKiB0aGVzZSBvZmZzZXQgbWF5IGJlY29tZSBuZWdhdGl2ZSBpZiB0aGUgcGl4bWFwIGlzIHNtYWxsZXIgdGhhbgorCSAqIHRoZSAyeDEgY2VsbHMgcmVzZXJ2ZWQgZm9yIHRoZSBzaWduIGljb24uICovCisJeG9mZnNldCA9ICh3aWR0aCAgLSBTSUdOX1dJRFRIKSAgLyAyOworCXlvZmZzZXQgPSAoaGVpZ2h0IC0gU0lHTl9IRUlHSFQpIC8gMjsKKworCWdka19nY19zZXRfZm9yZWdyb3VuZChndWkudGV4dF9nYywgZ3VpLmJnY29sb3IpOworCisJZ2RrX2RyYXdfcmVjdGFuZ2xlKGd1aS5kcmF3YXJlYS0+d2luZG93LAorCQkJICAgZ3VpLnRleHRfZ2MsCisJCQkgICBUUlVFLAorCQkJICAgRklMTF9YKGNvbCksCisJCQkgICBGSUxMX1kocm93KSwKKwkJCSAgIFNJR05fV0lEVEgsCisJCQkgICBTSUdOX0hFSUdIVCk7CisKKyMgIGlmIEdUS19DSEVDS19WRVJTSU9OKDIsMSwxKQorCWdka19kcmF3X3BpeGJ1ZihndWkuZHJhd2FyZWEtPndpbmRvdywKKwkJCU5VTEwsCisJCQlzaWduLAorCQkJTUFYKDAsIHhvZmZzZXQpLAorCQkJTUFYKDAsIHlvZmZzZXQpLAorCQkJRklMTF9YKGNvbCkgLSBNSU4oMCwgeG9mZnNldCksCisJCQlGSUxMX1kocm93KSAtIE1JTigwLCB5b2Zmc2V0KSwKKwkJCU1JTih3aWR0aCwgIFNJR05fV0lEVEgpLAorCQkJTUlOKGhlaWdodCwgU0lHTl9IRUlHSFQpLAorCQkJR0RLX1JHQl9ESVRIRVJfTk9STUFMLAorCQkJMCwgMCk7CisjICBlbHNlCisJZ2RrX3BpeGJ1Zl9yZW5kZXJfdG9fZHJhd2FibGVfYWxwaGEoc2lnbiwKKwkJCQkJICAgIGd1aS5kcmF3YXJlYS0+d2luZG93LAorCQkJCQkgICAgTUFYKDAsIHhvZmZzZXQpLAorCQkJCQkgICAgTUFYKDAsIHlvZmZzZXQpLAorCQkJCQkgICAgRklMTF9YKGNvbCkgLSBNSU4oMCwgeG9mZnNldCksCisJCQkJCSAgICBGSUxMX1kocm93KSAtIE1JTigwLCB5b2Zmc2V0KSwKKwkJCQkJICAgIE1JTih3aWR0aCwJU0lHTl9XSURUSCksCisJCQkJCSAgICBNSU4oaGVpZ2h0LCBTSUdOX0hFSUdIVCksCisJCQkJCSAgICBHREtfUElYQlVGX0FMUEhBX0JJTEVWRUwsCisJCQkJCSAgICAxMjcsCisJCQkJCSAgICBHREtfUkdCX0RJVEhFUl9OT1JNQUwsCisJCQkJCSAgICAwLCAwKTsKKyMgIGVuZGlmCisJaWYgKG5lZWRfc2NhbGUpCisJICAgIGdfb2JqZWN0X3VucmVmKHNpZ24pOworICAgIH0KK30KKworICAgIHZvaWQgKgorZ3VpX21jaF9yZWdpc3Rlcl9zaWduKGNoYXJfdSAqc2lnbmZpbGUpCit7CisgICAgaWYgKHNpZ25maWxlWzBdICE9IE5VTCAmJiBzaWduZmlsZVswXSAhPSAnLScgJiYgZ3VpLmluX3VzZSkKKyAgICB7CisJR2RrUGl4YnVmICAgKnNpZ247CisJR0Vycm9yCSAgICAqZXJyb3IgPSBOVUxMOworCWNoYXJfdQkgICAgKm1lc3NhZ2U7CisKKwlzaWduID0gZ2RrX3BpeGJ1Zl9uZXdfZnJvbV9maWxlKChjb25zdCBjaGFyICopc2lnbmZpbGUsICZlcnJvcik7CisKKwlpZiAoZXJyb3IgPT0gTlVMTCkKKwkgICAgcmV0dXJuIHNpZ247CisKKwltZXNzYWdlID0gKGNoYXJfdSAqKWVycm9yLT5tZXNzYWdlOworCisJaWYgKG1lc3NhZ2UgIT0gTlVMTCAmJiBpbnB1dF9jb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorCSAgICBtZXNzYWdlID0gc3RyaW5nX2NvbnZlcnQoJmlucHV0X2NvbnYsIG1lc3NhZ2UsIE5VTEwpOworCisJaWYgKG1lc3NhZ2UgIT0gTlVMTCkKKwl7CisJICAgIC8qIFRoZSBlcnJvciBtZXNzYWdlIGlzIGFscmVhZHkgdHJhbnNsYXRlZCBhbmQgd2lsbCBiZSBtb3JlCisJICAgICAqIGRlc2NyaXB0aXZlIHRoYW4gYW55dGhpbmcgd2UgY291bGQgcG9zc2libHkgZG8gb3Vyc2VsdmVzLiAqLworCSAgICBFTVNHMigiRTI1NTogJXMiLCBtZXNzYWdlKTsKKworCSAgICBpZiAoaW5wdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwkJdmltX2ZyZWUobWVzc2FnZSk7CisJfQorCWdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2Rlc3Ryb3lfc2lnbih2b2lkICpzaWduKQoreworICAgIGlmIChzaWduICE9IE5VTEwpCisJZ19vYmplY3RfdW5yZWYoc2lnbik7Cit9CisKKyMgZWxzZSAvKiAhSEFWRV9HVEsyICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgR2RrUGl4bWFwICpwaXhtYXA7CisgICAgR2RrQml0bWFwICptYXNrOworfQorc2lnbmljb25fVDsKKworICAgIHZvaWQKK2d1aV9tY2hfZHJhd3NpZ24oaW50IHJvdywgaW50IGNvbCwgaW50IHR5cGVucikKK3sKKyAgICBzaWduaWNvbl9UICpzaWduOworCisgICAgc2lnbiA9IChzaWduaWNvbl9UICopc2lnbl9nZXRfaW1hZ2UodHlwZW5yKTsKKworICAgIGlmIChzaWduICE9IE5VTEwgJiYgc2lnbi0+cGl4bWFwICE9IE5VTEwKKwkmJiBndWkuZHJhd2FyZWEgIT0gTlVMTCAmJiBndWkuZHJhd2FyZWEtPndpbmRvdyAhPSBOVUxMKQorICAgIHsKKwlpbnQgd2lkdGg7CisJaW50IGhlaWdodDsKKwlpbnQgeG9mZnNldDsKKwlpbnQgeW9mZnNldDsKKworCWdka193aW5kb3dfZ2V0X3NpemUoc2lnbi0+cGl4bWFwLCAmd2lkdGgsICZoZWlnaHQpOworCisJLyogVGhlIG9yaWdpbiBpcyB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHBpeG1hcC4gIFRoZXJlZm9yZQorCSAqIHRoZXNlIG9mZnNldCBtYXkgYmVjb21lIG5lZ2F0aXZlIGlmIHRoZSBwaXhtYXAgaXMgc21hbGxlciB0aGFuCisJICogdGhlIDJ4MSBjZWxscyByZXNlcnZlZCBmb3IgdGhlIHNpZ24gaWNvbi4gKi8KKwl4b2Zmc2V0ID0gKHdpZHRoICAtIFNJR05fV0lEVEgpICAvIDI7CisJeW9mZnNldCA9IChoZWlnaHQgLSBTSUdOX0hFSUdIVCkgLyAyOworCisJZ2RrX2djX3NldF9mb3JlZ3JvdW5kKGd1aS50ZXh0X2djLCBndWkuYmdjb2xvcik7CisKKwlnZGtfZHJhd19yZWN0YW5nbGUoZ3VpLmRyYXdhcmVhLT53aW5kb3csCisJCQkgICBndWkudGV4dF9nYywKKwkJCSAgIFRSVUUsCisJCQkgICBGSUxMX1goY29sKSwKKwkJCSAgIEZJTExfWShyb3cpLAorCQkJICAgU0lHTl9XSURUSCwKKwkJCSAgIFNJR05fSEVJR0hUKTsKKworCS8qIFNldCB0aGUgY2xpcCBtYXNrIGZvciBiaWxldmVsIHRyYW5zcGFyZW5jeSAqLworCWlmIChzaWduLT5tYXNrICE9IE5VTEwpCisJeworCSAgICBnZGtfZ2Nfc2V0X2NsaXBfb3JpZ2luKGd1aS50ZXh0X2djLAorCQkJCSAgIEZJTExfWChjb2wpIC0geG9mZnNldCwKKwkJCQkgICBGSUxMX1kocm93KSAtIHlvZmZzZXQpOworCSAgICBnZGtfZ2Nfc2V0X2NsaXBfbWFzayhndWkudGV4dF9nYywgc2lnbi0+bWFzayk7CisJfQorCisJZ2RrX2RyYXdfcGl4bWFwKGd1aS5kcmF3YXJlYS0+d2luZG93LAorCQkJZ3VpLnRleHRfZ2MsCisJCQlzaWduLT5waXhtYXAsCisJCQlNQVgoMCwgeG9mZnNldCksCisJCQlNQVgoMCwgeW9mZnNldCksCisJCQlGSUxMX1goY29sKSAtIE1JTigwLCB4b2Zmc2V0KSwKKwkJCUZJTExfWShyb3cpIC0gTUlOKDAsIHlvZmZzZXQpLAorCQkJTUlOKHdpZHRoLCAgU0lHTl9XSURUSCksCisJCQlNSU4oaGVpZ2h0LCBTSUdOX0hFSUdIVCkpOworCisJZ2RrX2djX3NldF9jbGlwX21hc2soZ3VpLnRleHRfZ2MsIE5VTEwpOworICAgIH0KK30KKworICAgIHZvaWQgKgorZ3VpX21jaF9yZWdpc3Rlcl9zaWduKGNoYXJfdSAqc2lnbmZpbGUpCit7CisgICAgc2lnbmljb25fVCAqc2lnbiA9IE5VTEw7CisKKyAgICBpZiAoc2lnbmZpbGVbMF0gIT0gTlVMICYmIHNpZ25maWxlWzBdICE9ICctJworCSAgICAmJiBndWkuZHJhd2FyZWEgIT0gTlVMTCAmJiBndWkuZHJhd2FyZWEtPndpbmRvdyAhPSBOVUxMKQorICAgIHsKKwlzaWduID0gKHNpZ25pY29uX1QgKilhbGxvYyhzaXplb2Yoc2lnbmljb25fVCkpOworCisJaWYgKHNpZ24gIT0gTlVMTCkgLyogTlVMTCA9PSBPT00gPT0gImNhbm5vdCByZWFsbHkgaGFwcGVuIiAqLworCXsKKwkgICAgc2lnbi0+bWFzayA9IE5VTEw7CisJICAgIHNpZ24tPnBpeG1hcCA9IGdka19waXhtYXBfY29sb3JtYXBfY3JlYXRlX2Zyb21feHBtKAorCQkgICAgZ3VpLmRyYXdhcmVhLT53aW5kb3csIE5VTEwsCisJCSAgICAmc2lnbi0+bWFzaywgTlVMTCwKKwkJICAgIChjb25zdCBjaGFyICopc2lnbmZpbGUpOworCisJICAgIGlmIChzaWduLT5waXhtYXAgPT0gTlVMTCkKKwkgICAgeworCQl2aW1fZnJlZShzaWduKTsKKwkJc2lnbiA9IE5VTEw7CisJCUVNU0coXyhlX3NpZ25kYXRhKSk7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiBzaWduOworfQorCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X3NpZ24odm9pZCAqc2lnbikKK3sKKyAgICBpZiAoc2lnbiAhPSBOVUxMKQorICAgIHsKKwlzaWduaWNvbl9UICpzaWduaWNvbiA9IChzaWduaWNvbl9UICopc2lnbjsKKworCWlmIChzaWduaWNvbi0+cGl4bWFwICE9IE5VTEwpCisJICAgIGdka19waXhtYXBfdW5yZWYoc2lnbmljb24tPnBpeG1hcCk7CisJaWYgKHNpZ25pY29uLT5tYXNrICE9IE5VTEwpCisJICAgIGdka19iaXRtYXBfdW5yZWYoc2lnbmljb24tPm1hc2spOworCisJdmltX2ZyZWUoc2lnbmljb24pOworICAgIH0KK30KKyMgZW5kaWYgLyogIUhBVkVfR1RLMiAqLworCisjZW5kaWYgLyogRkVBVF9TSUdOX0lDT05TICovCisKZGlmZiAtLWdpdCBhL3NyYy9ndWlfbWFjLmMgYi9zcmMvZ3VpX21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzRjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpX21hYy5jCkBAIC0wLDAgKzEsNTgyMCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAkJYnkgQnJhbSBNb29sZW5hYXIKKyAqCQkJCUdVSS9Nb3RpZiBzdXBwb3J0IGJ5IFJvYmVydCBXZWJiCisgKgkJCQlNYWNpbnRvc2ggcG9ydCBieSBEYW55IFN0LUFtYW50CisgKgkJCQkJICAgICAgYW5kIEF4ZWwgS2llbGhvcm4KKyAqCQkJCVBvcnQgdG8gTVBXIGJ5IEJlcm5oYXJkIFByn21tZXIKKyAqCQkJCUluaXRpYWwgQ2FyYm9uIHBvcnQgYnkgQW1tb24gU2tpZG1vcmUKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIE5PVEU6IENvbW1lbnQgbWVudGlvbm5pbmcgRkFRIHJlZmVyIHRvIHRoZSBib29rOgorICogICAgICAgIk1hY3dvcmxkIE1hYyBQcm9ncmFtbWluZyBGQVFzIiBmcm9tICJJREcgQm9va3MiCisgKi8KKworLyoKKyAqIFdBUk5JTkc6IFZpbSBtdXN0IGJlIGFibGUgdG8gY29tcGlsZSB3aXRob3V0IENhcmJvbgorICoJICAgIEFzIHRoZSBkZXNpcmVkIG1pbmltdW0gcmVxdWlyZW1lbnQgYXJlIGNpcmNhIFN5c3RlbSA3CisgKgkgICAgKEkgd2FudCB0byBydW4gaXQgb24gbXkgTWFjIENsYXNzaWMpIChEYW55KQorICovCisKKy8qCisgKiBUT0RPOiBDaGFuZ2Ugc3RpbGwgdG8gbWVyZ2UgZnJvbSB0aGUgbWFjdmltJ3MgaURpc2sKKyAqCisgKiBlcnJvcl9nYSwgbWNoX2Vycm1zZywgTmF2aWdhdGlvbidzIGNoYW5nZXMgaW4gZ3VpX21jaF9icm93c2UKKyAqIHVzZXMgb2YgTWVudUl0ZW1JbmRleCwgY2hhbmdlcyBpbiBndWlfbWNoX3NldF9zaGVsbHNpemUsCisgKiBTY3JhcE1hbmFnZXIgZXJyb3IgaGFuZGxpbmcuCisgKiBDb21tZW50cyBhYm91dCBmdW5jdGlvbiByZW1haW5pbmcgdG8gQ2FyYm9uaXplLgorICoKKyAqLworCisvKiBUT0RPOiBmaW5kIHRoZSBiZXN0IHBsYWNlIGZvciB0aGlzIChEYW55KSAqLworI2lmIDAKKyMgIGlmICEgVEFSR0VUX0FQSV9NQUNfQ0FSQk9OCisvKiBFbmFibGUgdGhlIG5ldyBBUEkgZnVuY3Rpb25zIGV2ZW4gd2hlbiBub3QgY29tcGlsaW5nIGZvciBDYXJib24gKi8KKy8qIEFwcGxlIHJlY29tZW5kcyBVbml2ZXJzYWwgSW50ZXJmYWNlIDMuMy4yIG9yIGxhdGVyICovCisjICBkZWZpbmUgT1BBUVVFX1RPT0xCT1hfU1RSVUNUUwkJMQorIyAgZGVmaW5lIEFDQ0VTU09SX0NBTExTX0FSRV9GVU5DVElPTlMJMQorLyogSGVscCBNZW51IG5vdCBzdXBwb3J0ZWQgYnkgQ2FyYm9uICovCisjICBkZWZpbmUgVVNFX0hFTFBNRU5VCisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPERldmljZXMuaD4gLyogaW5jbHVkZWQgZmlyc3QgdG8gYXZvaWQgQ1IgcHJvYmxlbXMgKi8KKyNpbmNsdWRlICJ2aW0uaCIKKworLyogRW5hYmxlIENvbnRleHR1YWwgTWVudSBTdXBwb3J0ICovCisjaWYgVU5JVkVSU0FMX0lOVEVSRkFDRVNfVkVSU0lPTiA+PSAweDAzMjAKKyMgZGVmaW5lIFVTRV9DVFJMQ0xJQ0tNRU5VCisjZW5kaWYKKworLyogUHV0IFZpbSBIZWxwIGluIE1hY09TIEhlbHAgKi8KKyNkZWZpbmUgVVNFX0hFTFBNRU5VCisKKy8qIEVuYWJsZSBBRVZFTlQgKi8KKyNkZWZpbmUgVVNFX0FFVkVOVAorCisvKiBDb21waWxlIGFzIENvZGVXYXJpb3IgRXh0ZXJuYWwgRWRpdG9yICovCisjaWYgZGVmaW5lZChGRUFUX0NXX0VESVRPUikgJiYgIWRlZmluZWQoVVNFX0FFVkVOVCkKKyMgZGVmaW5lIFVTRV9BRVZFTlQgLyogTmVlZCBBcHBsZSBFdmVudCBTdXBwb3J0ICovCisjZW5kaWYKKworLyogVGhlIFZJTSBjcmVhdG9yIGlzIENvZGVXYXJpb3Igc3BlY2lmaWMgKi8KKyNpZiAhKGRlZmluZWQoX19NUkNfXykgfHwgZGVmaW5lZChfX1NDX18pIHx8IGRlZmluZWQoX19BUFBMRV9DQ19fKSkKKyMgZGVmaW5lIFVTRV9WSU1fQ1JFQVRPUl9JRAorI2Vsc2UKKyMgaWYgMCAvKiBXYXMgdGhpcyB1c2VmdWxsIGZvciBzb21lIGNvbXBpbGVyPyAoRGFueSkgKi8KK3N0YXRpYyAgICBPU1R5cGUJX2ZjcmVhdG9yID0gJ1ZJTSEnOworc3RhdGljICAgIE9TVHlwZQlfZnR5cGUgPSAnVEVYVCc7CisjIGVuZGlmCisjZW5kaWYKKworLyogQ0FSQk9OIHZlcnNpb24gb25seSB0ZXN0ZWQgd2l0aCBQcm9qZWN0IEJ1aWxkZXIgdW5kZXIgTWFjT1MgWCAqLworI3VuZGVmIFVTRV9DQVJCT05JWkVECisjaWYgKGRlZmluZWQoX19BUFBMRV9DQ19fKSB8fCBkZWZpbmVkKF9fTVJDX18pKSAmJiBkZWZpbmVkKFRBUkdFVF9BUElfTUFDX0NBUkJPTikKKyMgaWYgVEFSR0VUX0FQSV9NQUNfQ0FSQk9OCisjICBkZWZpbmUgVVNFX0NBUkJPTklaRUQKKyMgZW5kaWYKKyNlbmRpZgorCisjdW5kZWYgVVNFX01PVVNFV0hFRUwKKyNpZiBkZWZpbmVkKE1BQ09TX1gpICYmIGRlZmluZWQoVVNFX0NBUkJPTklaRUQpCisjIGRlZmluZSBVU0VfTU9VU0VXSEVFTAorc3RhdGljIEV2ZW50SGFuZGxlclVQUCBtb3VzZVdoZWVsSGFuZGxlclVQUCA9IE5VTEw7CisjZW5kaWYKKworLyogRGVidWdnaW5nIGZlYXR1cmU6IHN0YXJ0IFZpbSB3aW5kb3cgT0ZGU0VUZWQgKi8KKyN1bmRlZiBVU0VfT0ZGU0VURURfV0lORE9XCisKKy8qIERlYnVnZ2luZyBmZWF0dXJlOiB1c2UgQ29kZVdhcmlvciBTSU9VWCAqLworI3VuZGVmIFVTRV9TSU9VWAorCisKKy8qIEluY2x1ZGUgc29tZSBmaWxlLiBUT0RPOiBtb3ZlIGludG8gb3NfbWFjLmggKi8KKyNpbmNsdWRlIDxNZW51cy5oPgorI2luY2x1ZGUgPFJlc291cmNlcy5oPgorI2lmICFUQVJHRVRfQVBJX01BQ19DQVJCT04KKyNpbmNsdWRlIDxTdGFuZGFyZEZpbGUuaD4KKyNpbmNsdWRlIDxUcmFwcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8QmFsbG9vbnMuaD4KKyNpbmNsdWRlIDxQcm9jZXNzZXMuaD4KKyNpZmRlZiBVU0VfQUVWRU5UCisjIGluY2x1ZGUgPEFwcGxlRXZlbnRzLmg+CisjIGluY2x1ZGUgPEFFUmVnaXN0cnkuaD4KKyNlbmRpZgorI2lmZGVmIFVTRV9DVFJMQ0xJQ0tNRU5VCisjIGluY2x1ZGUgPEdlc3RhbHQuaD4KKyNlbmRpZgorI2lmZGVmIFVTRV9TSU9VWAorIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxzaW91eC5oPgorIyBpbmNsdWRlIDxjb25zb2xlLmg+CisjZW5kaWYKKyNpZiBVTklWRVJTQUxfSU5URVJGQUNFU19WRVJTSU9OID49IDB4MDMzMAorIyBpbmNsdWRlIDxDb250cm9sRGVmaW5pdGlvbnMuaD4KKyMgaW5jbHVkZSA8TmF2aWdhdGlvbi5oPiAgLyogTmF2aWdhdGlvbiBvbmx5IHBhcnQgb2YgPz8gKi8KKyNlbmRpZgorCisjaWYgVEFSR0VUX0FQSV9NQUNfQ0FSQk9OICYmIDAKKy8qIE5ldyBIZWxwIEludGVyZmFjZSBmb3IgTWFjLCBub3QgaW1wbGVtZW50ZWQgeWV0LiovCisjIGluY2x1ZGUgPE1hY0hlbHAuaD4KKyNlbmRpZgorCisvKgorICogVHJhbnNsYXRlIG5ldyBuYW1lIHRvIG9sZCBvbmVzCisgKiBOZXcgZnVuY3Rpb24gb25seSBhdmFpbGFibGUgaW4gTWFjT1MgOC41LAorICogU28gdXNlIG9sZCBvbmUgdG8gYmUgY29tcGF0aWJsZSBiYWNrIHRvIFN5c3RlbSA3CisgKi8KKyNpZm5kZWYgVVNFX0NBUkJPTklaRUQKKyMgdW5kZWYgIEVuYWJsZU1lbnVJdGVtCisjIGRlZmluZSBFbmFibGVNZW51SXRlbSBFbmFibGVJdGVtCisjIHVuZGVmICBEaXNhYmxlTWVudUl0ZW0KKyMgZGVmaW5lIERpc2FibGVNZW51SXRlbSBEaXNhYmxlSXRlbQorI2VuZGlmCisKKy8qIENhcmJvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBHZXQvU2V0Q29udHJvbGwgZnVuY3Rpb25zLAorICogdXNlIEdldC9TZXRDb250cm9sMzJCaXQgaW5zdGVhZCBhbmQgcmVuYW1lIGZvciBub24tY2FyYm9uCisgKiBzeXN0ZW1zLgorICovCisKKyNpZm5kZWYgVVNFX0NBUkJPTklaRUQKKyMgdW5kZWYgICAgU2V0Q29udHJvbDMyQml0TWF4aW11bQorIyBkZWZpbmUgICBTZXRDb250cm9sMzJCaXRNYXhpbXVtIFNldENvbnRyb2xNYXhpbXVtCisjIHVuZGVmICAgIFNldENvbnRyb2wzMkJpdE1pbmltdW0KKyMgZGVmaW5lICAgU2V0Q29udHJvbDMyQml0TWluaW11bSBTZXRDb250cm9sTWluaW11bQorIyB1bmRlZiAgICBTZXRDb250cm9sMzJCaXRWYWx1ZQorIyBkZWZpbmUgICBTZXRDb250cm9sMzJCaXRWYWx1ZSBTZXRDb250cm9sVmFsdWUKKyMgdW5kZWYgICAgR2V0Q29udHJvbDMyQml0VmFsdWUKKyMgZGVmaW5lICAgR2V0Q29udHJvbDMyQml0VmFsdWUgR2V0Q29udHJvbFZhbHVlCisjZW5kaWYKKworLyoKKyAqID8/PworICovCisKKyNkZWZpbmUga05vdGhpbmcgMAorI2RlZmluZSBrQ3JlYXRlRW1wdHkgMiAvKjEqLworI2RlZmluZSBrQ3JlYXRlUmVjdCAyCisjZGVmaW5lIGtEZXN0cm95IDMKKworLyoKKyAqIERhbnk6IERvbid0IGxpa2UgdGhvc2UuLi4KKyAqLworCisjZGVmaW5lIHRvcExlZnQocikJKCgoUG9pbnQqKSYocikpWzBdKQorI2RlZmluZSBib3RSaWdodChyKQkoKChQb2ludCopJihyKSlbMV0pCisKKworLyogVGltZSBvZiBsYXN0IG1vdXNlIGNsaWNrLCB0byBkZXRlY3QgZG91YmxlLWNsaWNrICovCitzdGF0aWMgbG9uZyBsYXN0TW91c2VUaWNrID0gMDsKKworLyogPz8/ICovCitzdGF0aWMgUmduSGFuZGxlIGN1cnNvclJnbjsKK3N0YXRpYyBSZ25IYW5kbGUgZHJhZ1JnbjsKK3N0YXRpYyBSZWN0IGRyYWdSZWN0Oworc3RhdGljIHNob3J0IGRyYWdSZWN0RW5ibDsKK3N0YXRpYyBzaG9ydCBkcmFnUmVjdENvbnRyb2w7CisKKy8qIFRoaXMgdmFyaWFibGUgaXMgc2V0IHdoZW4gd2FpdGluZyBmb3IgYW4gZXZlbnQsIHdoaWNoIGlzIHRoZSBvbmx5IG1vbWVudAorICogc2Nyb2xsYmFyIGRyYWdnaW5nIGNhbiBiZSBkb25lIGRpcmVjdGx5LiAgSXQncyBub3QgYWxsb3dlZCB3aGlsZSBjb21tYW5kcworICogYXJlIGV4ZWN1dGVkLCBiZWNhdXNlIGl0IG1heSBtb3ZlIHRoZSBjdXJzb3IgYW5kIHRoYXQgbWF5IGNhdXNlIHVuZXhwZWN0ZWQKKyAqIHByb2JsZW1zIChlLmcuLCB3aGlsZSAiOnMiIGlzIHdvcmtpbmcpLgorICovCitzdGF0aWMgaW50IGFsbG93X3Njcm9sbGJhciA9IEZBTFNFOworCisvKiBMYXN0IG1vdXNlIGNsaWNrIGNhdXNlZCBjb250ZXh0dWFsIG1lbnUsICh0byBwcm92aWRlIHByb3BlciByZWxlYXNlKSAqLworI2lmZGVmIFVTRV9DVFJMQ0xJQ0tNRU5VCitzdGF0aWMgc2hvcnQgY2xpY2tJc1BvcHVwOworI2VuZGlmCisKKy8qIEZlZWRiYWNrIEFjdGlvbiBmb3IgU2Nyb2xsYmFyICovCitDb250cm9sQWN0aW9uVVBQIGdTY3JvbGxBY3Rpb247CitDb250cm9sQWN0aW9uVVBQIGdTY3JvbGxEcmFnOworCisvKiBLZWVwaW5nIHRyYWNrIG9mIHdoaWNoIHNjcm9sbGJhciBpcyBiZWluZyBkcmFnZ2VkICovCitzdGF0aWMgQ29udHJvbEhhbmRsZSBkcmFnZ2VkX3NiID0gTlVMTDsKKworLyoKKyAqIFRoZSBRdWlja2RyYXcgZ2xvYmFsIGlzIHByZWRlZmluZWQgaW4gQ29kZVdhcmlvcgorICogYnV0IGlzIG5vdCBpbiBBcHBsZSBNUFcKKyAqLworI2lmIChkZWZpbmVkKF9fTVJDX18pIHx8IGRlZmluZWQoX19TQ19fKSkKKyMgaWYgIShkZWZpbmVkKFRBUkdFVF9BUElfTUFDX0NBUkJPTikgJiYgVEFSR0VUX0FQSV9NQUNfQ0FSQk9OKQorUURHbG9iYWxzIHFkOworIyBlbmRpZgorI2VuZGlmCisKKy8qIENvbG9ycyBNYWNyb3MgKi8KKyNkZWZpbmUgUkdCKHIsZyxiKQkoKHIpIDw8IDE2KSArICgoZykgPDwgOCkgKyAoYikKKyNkZWZpbmUgUmVkKGMpCQkoKGMgJiAweDAwRkYwMDAwKSA+PiAxNikKKyNkZWZpbmUgR3JlZW4oYykJKChjICYgMHgwMDAwRkYwMCkgPj4gIDgpCisjZGVmaW5lIEJsdWUoYykJCSgoYyAmIDB4MDAwMDAwRkYpID4+ICAwKQorCisvKiBLZXkgbWFwcGluZyAqLworCisjZGVmaW5lIHZrX0VzYwkJMHgzNQkvKiAtPiAxQiAqLworCisjZGVmaW5lIHZrX0YxCQkweDdBCS8qIC0+IDEwICovCisjZGVmaW5lIHZrX0YyCQkweDc4ICAvKjB4NjMqLworI2RlZmluZSB2a19GMwkJMHg2MyAgLyoweDc2Ki8KKyNkZWZpbmUgdmtfRjQJCTB4NzYgIC8qMHg2MCovCisjZGVmaW5lIHZrX0Y1CQkweDYwICAvKjB4NjEqLworI2RlZmluZSB2a19GNgkJMHg2MSAgLyoweDYyKi8KKyNkZWZpbmUgdmtfRjcJCTB4NjIgIC8qMHg2MyovICAvKj8qLworI2RlZmluZSB2a19GOAkJMHg2NAorI2RlZmluZSB2a19GOQkJMHg2NQorI2RlZmluZSB2a19GMTAJCTB4NkQKKyNkZWZpbmUgdmtfRjExCQkweDY3CisjZGVmaW5lIHZrX0YxMgkJMHg2RgorI2RlZmluZSB2a19GMTMJCTB4NjkKKyNkZWZpbmUgdmtfRjE0CQkweDZCCisjZGVmaW5lIHZrX0YxNQkJMHg3MQorCisjZGVmaW5lIHZrX0NscgkJMHg0NwkvKiAtPiAxQiAoRVNDKSAqLworI2RlZmluZSB2a19FbnRlcgkweDRDCS8qIC0+IDAzICovCisKKyNkZWZpbmUgdmtfU3BhY2UJMHgzMQkvKiAtPiAyMCAqLworI2RlZmluZSB2a19UYWIJCTB4MzAJLyogLT4gMDkgKi8KKyNkZWZpbmUgdmtfUmV0dXJuCTB4MjQJLyogLT4gMEQgKi8KKy8qIFRoaXMgaXMgd3JvbmcgZm9yIE9TWCwgd2hhdCBpcyBpdCBmb3I/ICovCisjZGVmaW5lIHZrX0RlbGV0ZQkwWDA4CS8qIC0+IDA4IEJhY2tTcGFjZSAqLworCisjZGVmaW5lIHZrX0hlbHAJCTB4NzIJLyogLT4gMDUgKi8KKyNkZWZpbmUgdmtfSG9tZQkJMHg3MwkvKiAtPiAwMSAqLworI2RlZmluZQl2a19QYWdlVXAJMHg3NAkvKiAtPiAwRCAqLworI2RlZmluZSB2a19Gd2REZWxldGUJMHg3NQkvKiAtPiA3RiAqLworI2RlZmluZQl2a19FbmQJCTB4NzcJLyogLT4gMDQgKi8KKyNkZWZpbmUgdmtfUGFnZURvd24JMHg3OQkvKiAtPiAwQyAqLworCisjZGVmaW5lIHZrX1VwCQkweDdFCS8qIC0+IDFFICovCisjZGVmaW5lIHZrX0Rvd24JCTB4N0QJLyogLT4gMUYgKi8KKyNkZWZpbmUJdmtfTGVmdAkJMHg3QgkvKiAtPiAxQyAqLworI2RlZmluZSB2a19SaWdodAkweDdDCS8qIC0+IDFEICovCisKKyNkZWZpbmUgdmtfVW5kbwkJdmtfRjEKKyNkZWZpbmUgdmtfQ3V0CQl2a19GMgorI2RlZmluZQl2a19Db3B5CQl2a19GMworI2RlZmluZQl2a19QYXN0ZQl2a19GNAorI2RlZmluZSB2a19QcmludFNjcmVlbgl2a19GMTMKKyNkZWZpbmUgdmtfU0Nyb2xsTG9jawl2a19GMTQKKyNkZWZpbmUJdmtfUGF1c2UJdmtfRjE1CisjZGVmaW5lCXZrX051bUxvY2sJdmtfQ2xyCisjZGVmaW5lIHZrX0luc2VydAl2a19IZWxwCisKKyNkZWZpbmUgS2V5U3ltCWNoYXIKKworc3RhdGljIHN0cnVjdAoreworICAgIEtleVN5bSAga2V5X3N5bTsKKyAgICBjaGFyX3UgIHZpbV9jb2RlMDsKKyAgICBjaGFyX3UgIHZpbV9jb2RlMTsKK30gc3BlY2lhbF9rZXlzW10gPQoreworICAgIHt2a19VcCwJCSdrJywgJ3UnfSwKKyAgICB7dmtfRG93biwJCSdrJywgJ2QnfSwKKyAgICB7dmtfTGVmdCwJCSdrJywgJ2wnfSwKKyAgICB7dmtfUmlnaHQsCQknaycsICdyJ30sCisKKyAgICB7dmtfRjEsCQknaycsICcxJ30sCisgICAge3ZrX0YyLAkJJ2snLCAnMid9LAorICAgIHt2a19GMywJCSdrJywgJzMnfSwKKyAgICB7dmtfRjQsCQknaycsICc0J30sCisgICAge3ZrX0Y1LAkJJ2snLCAnNSd9LAorICAgIHt2a19GNiwJCSdrJywgJzYnfSwKKyAgICB7dmtfRjcsCQknaycsICc3J30sCisgICAge3ZrX0Y4LAkJJ2snLCAnOCd9LAorICAgIHt2a19GOSwJCSdrJywgJzknfSwKKyAgICB7dmtfRjEwLAkJJ2snLCAnOyd9LAorCisgICAge3ZrX0YxMSwJCSdGJywgJzEnfSwKKyAgICB7dmtfRjEyLAkJJ0YnLCAnMid9LAorICAgIHt2a19GMTMsCQknRicsICczJ30sCisgICAge3ZrX0YxNCwJCSdGJywgJzQnfSwKKyAgICB7dmtfRjE1LAkJJ0YnLCAnNSd9LAorCisvKiAge1hLX0hlbHAsCQknJScsICcxJ30sICovCisvKiAge1hLX1VuZG8sCQknJicsICc4J30sICovCisvKiAge1hLX0JhY2tTcGFjZSwJJ2snLCAnYid9LCAqLworI2lmbmRlZiBNQUNPU19YCisgICAge3ZrX0RlbGV0ZSwJCSdrJywgJ2InfSwKKyNlbmRpZgorICAgIHt2a19JbnNlcnQsCQknaycsICdJJ30sCisgICAge3ZrX0Z3ZERlbGV0ZSwJJ2snLCAnRCd9LAorICAgIHt2a19Ib21lLAkJJ2snLCAnaCd9LAorICAgIHt2a19FbmQsCQknQCcsICc3J30sCisvKiAge1hLX1ByaW9yLAkJJ2snLCAnUCd9LCAqLworLyogIHtYS19OZXh0LAkJJ2snLCAnTid9LCAqLworLyogIHtYS19QcmludCwJCSclJywgJzknfSwgKi8KKworICAgIHt2a19QYWdlVXAsCQknaycsICdQJ30sCisgICAge3ZrX1BhZ2VEb3duLAknaycsICdOJ30sCisKKyAgICAvKiBFbmQgb2YgbGlzdCBtYXJrZXI6ICovCisgICAgeyhLZXlTeW0pMCwJCTAsIDB9Cit9OworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9uIChmb3IgdGhvc2UgbmVlZGVkKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmZGVmIFVTRV9BRVZFTlQKK09TRXJyIEhhbmRsZVVudXNlZFBhcm1zIChjb25zdCBBcHBsZUV2ZW50ICp0aGVBRXZlbnQpOworI2VuZGlmCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbnZlcnNpb24gVXRpbGl0eQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEMyUGFzY2FsX3NhdmUKKyAqCisgKiBBbGxvY2F0ZSBtZW1vcnkgYW5kIGNvbnZlcnQgdGhlIEMtU3RyaW5nIHBhc3NlZCBpbgorICogaW50byBhIHBhc2NhbCBzdHJpbmcKKyAqCisgKi8KKworY2hhcl91ICpDMlBhc2NhbF9zYXZlKGNoYXJfdSAqQ3N0cmluZykKK3sKKyAgICBjaGFyX3UgICpQYXNjYWxTdHJpbmc7CisgICAgaW50CSAgICBsZW47CisKKyAgICBpZiAoQ3N0cmluZyA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgbGVuID0gU1RSTEVOKENzdHJpbmcpOworCisgICAgaWYgKGxlbiA+IDI1NSkgLyogVHJ1bmNhdGUgaWYgbmVjZXNzYXJ5ICovCisJbGVuID0gMjU1OworCisgICAgUGFzY2FsU3RyaW5nID0gYWxsb2MobGVuICsgMSk7CisgICAgaWYgKFBhc2NhbFN0cmluZyAhPSBOVUxMKQorICAgIHsKKwltY2hfbWVtbW92ZShQYXNjYWxTdHJpbmcgKyAxLCBDc3RyaW5nLCBsZW4pOworCVBhc2NhbFN0cmluZ1swXSA9IGxlbjsKKyAgICB9CisKKyAgICByZXR1cm4gUGFzY2FsU3RyaW5nOworfQorCisvKgorICogQzJQYXNjYWxfc2F2ZV9hbmRfcmVtb3ZlX2JhY2tzbGFzaAorICoKKyAqIEFsbG9jYXRlIG1lbW9yeSBhbmQgY29udmVydCB0aGUgQy1TdHJpbmcgcGFzc2VkIGluCisgKiBpbnRvIGEgcGFzY2FsIHN0cmluZy4gQWxzbyByZW1vdmUgdGhlIGJhY2tzbGFzaCBhdCB0aGUgc2FtZSB0aW1lCisgKgorICovCisKK2NoYXJfdSAqQzJQYXNjYWxfc2F2ZV9hbmRfcmVtb3ZlX2JhY2tzbGFzaChjaGFyX3UgKkNzdHJpbmcpCit7CisgICAgY2hhcl91ICAqUGFzY2FsU3RyaW5nOworICAgIGludAkgICAgbGVuOworICAgIGNoYXJfdSAgKnAsICpjOworCisgICAgbGVuID0gU1RSTEVOKENzdHJpbmcpOworCisgICAgaWYgKGxlbiA+IDI1NSkgLyogVHJ1bmNhdGUgaWYgbmVjZXNzYXJ5ICovCisJbGVuID0gMjU1OworCisgICAgUGFzY2FsU3RyaW5nID0gYWxsb2MobGVuICsgMSk7CisgICAgaWYgKFBhc2NhbFN0cmluZyAhPSBOVUxMKQorICAgIHsKKwlmb3IgKGMgPSBDc3RyaW5nLCBwID0gUGFzY2FsU3RyaW5nKzEsIGxlbiA9IDA7ICgqYyAhPSAwKSAmJiAobGVuIDwgMjU1KTsgYysrKQorCXsKKwkgICAgaWYgKCgqYyA9PSAnXFwnKSAmJiAoY1sxXSAhPSAwKSkKKwkgICAgeworCQljKys7CisJICAgIH0KKwkgICAgKnAgPSAqYzsKKwkgICAgcCsrOworCSAgICBsZW4rKzsKKwl9CisJUGFzY2FsU3RyaW5nWzBdID0gbGVuOworICAgIH0KKworICAgIHJldHVybiBQYXNjYWxTdHJpbmc7Cit9CisKKy8qCisgKiBDb252ZXJ0IHRoZSBtb2RpZmllcnMgb2YgYW4gRXZlbnQgaW50byB2aW0ncyBtb2RpZmllcnMgKG1vdXNlKQorICovCisKKyAgICBpbnRfdQorRXZlbnRNb2RpZmllcnMyVmltTW91c2VNb2RpZmllcnMoRXZlbnRNb2RpZmllcnMgbWFjTW9kaWZpZXJzKQoreworICAgIGludF91IHZpbU1vZGlmaWVycyA9IDB4MDA7CisKKyAgICBpZiAobWFjTW9kaWZpZXJzICYgKHNoaWZ0S2V5IHwgcmlnaHRTaGlmdEtleSkpCisJdmltTW9kaWZpZXJzIHw9IE1PVVNFX1NISUZUOworICAgIGlmIChtYWNNb2RpZmllcnMgJiAoY29udHJvbEtleSB8IHJpZ2h0Q29udHJvbEtleSkpCisJdmltTW9kaWZpZXJzIHw9IE1PVVNFX0NUUkw7CisgICAgaWYgKG1hY01vZGlmaWVycyAmIChvcHRpb25LZXkgfCByaWdodE9wdGlvbktleSkpCisJdmltTW9kaWZpZXJzIHw9IE1PVVNFX0FMVDsKKyNpZiAwCisgICAgLyogTm90IHlldCBzdXBwb3J0ZWQgKi8KKyAgICBpZiAobWFjTW9kaWZpZXJzICYgKGNtZEtleSkpIC8qIFRoZXJlJ3Mgbm8gcmlnaHRDbWRLZXkgKi8KKwl2aW1Nb2RpZmllcnMgfD0gTU9VU0VfQ01EOworI2VuZGlmCisgICAgcmV0dXJuICh2aW1Nb2RpZmllcnMpOworfQorCisvKgorICogQ29udmVydCB0aGUgbW9kaWZpZXJzIG9mIGFuIEV2ZW50IGludG8gdmltJ3MgbW9kaWZpZXJzIChrZXlzKQorICovCisKKyAgICBzdGF0aWMgaW50X3UKK0V2ZW50TW9kaWZpZXJzMlZpbU1vZGlmaWVycyhFdmVudE1vZGlmaWVycyBtYWNNb2RpZmllcnMpCit7CisgICAgaW50X3UgdmltTW9kaWZpZXJzID0gMHgwMDsKKworICAgIGlmIChtYWNNb2RpZmllcnMgJiAoc2hpZnRLZXkgfCByaWdodFNoaWZ0S2V5KSkKKwl2aW1Nb2RpZmllcnMgfD0gTU9EX01BU0tfU0hJRlQ7CisgICAgaWYgKG1hY01vZGlmaWVycyAmIChjb250cm9sS2V5IHwgcmlnaHRDb250cm9sS2V5KSkKKwl2aW1Nb2RpZmllcnMgfD0gTU9EX01BU0tfQ1RSTDsKKyAgICBpZiAobWFjTW9kaWZpZXJzICYgKG9wdGlvbktleSB8IHJpZ2h0T3B0aW9uS2V5KSkKKwl2aW1Nb2RpZmllcnMgfD0gTU9EX01BU0tfQUxUOworI2lmZGVmIFVTRV9DTURfS0VZCisgICAgaWYgKG1hY01vZGlmaWVycyAmIChjbWRLZXkpKSAvKiBUaGVyZSdzIG5vIHJpZ2h0Q21kS2V5ICovCisJdmltTW9kaWZpZXJzIHw9IE1PRF9NQVNLX0NNRDsKKyNlbmRpZgorICAgIHJldHVybiAodmltTW9kaWZpZXJzKTsKK30KKworLyogQ29udmVydCBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBwb2ludCBzaXplIGludG8gcGl4ZWxzLiBUaGUgc3RyaW5nIHNob3VsZAorICogYmUgYSBwb3NpdGl2ZSBkZWNpbWFsIG51bWJlciwgd2l0aCBhbiBvcHRpb25hbCBkZWNpbWFsIHBvaW50IChlZywgIjEyIiwgb3IKKyAqICIxMC41IikuIFRoZSBwaXhlbCB2YWx1ZSBpcyByZXR1cm5lZCwgYW5kIGEgcG9pbnRlciB0byB0aGUgbmV4dCB1bmNvbnZlcnRlZAorICogY2hhcmFjdGVyIGlzIHN0b3JlZCBpbiAqZW5kLiBUaGUgZmxhZyAidmVydGljYWwiIHNheXMgd2hldGhlciB0aGlzCisgKiBjYWxjdWxhdGlvbiBpcyBmb3IgYSB2ZXJ0aWNhbCAoaGVpZ2h0KSBzaXplIG9yIGEgaG9yaXpvbnRhbCAod2lkdGgpIG9uZS4KKyAqCisgKiBGcm9tIGd1aV93NDguYworICovCisgICAgc3RhdGljIGludAorcG9pbnRzX3RvX3BpeGVscyhjaGFyX3UgKnN0ciwgY2hhcl91ICoqZW5kLCBpbnQgdmVydGljYWwpCit7CisgICAgaW50CQlwaXhlbHM7CisgICAgaW50CQlwb2ludHMgPSAwOworICAgIGludAkJZGl2aXNvciA9IDA7CisKKyAgICB3aGlsZSAoKnN0cikKKyAgICB7CisJaWYgKCpzdHIgPT0gJy4nICYmIGRpdmlzb3IgPT0gMCkKKwl7CisJICAgIC8qIFN0YXJ0IGtlZXBpbmcgYSBkaXZpc29yLCBmb3IgbGF0ZXIgKi8KKwkgICAgZGl2aXNvciA9IDE7CisJICAgIGNvbnRpbnVlOworCX0KKworCWlmICghaXNkaWdpdCgqc3RyKSkKKwkgICAgYnJlYWs7CisKKwlwb2ludHMgKj0gMTA7CisJcG9pbnRzICs9ICpzdHIgLSAnMCc7CisJZGl2aXNvciAqPSAxMDsKKworCSsrc3RyOworICAgIH0KKworICAgIGlmIChkaXZpc29yID09IDApCisJZGl2aXNvciA9IDE7CisKKyAgICBwaXhlbHMgPSBwb2ludHMvZGl2aXNvcjsKKyAgICAqZW5kID0gc3RyOworICAgIHJldHVybiBwaXhlbHM7Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgbGlzdCBvZiBGU1NwZWMgYWxpYXNlcyBpbnRvIGEgbGlzdCBvZiBmdWxscGF0aG5hbWUKKyAqIGNoYXJhY3RlciBzdHJpbmdzLgorICovCisKK2NoYXJfdSAqKm5ld19mbmFtZXNfZnJvbV9BRURlc2MoQUVEZXNjICp0aGVMaXN0LCBsb25nICpudW1GaWxlcywgT1NFcnIgKmVycm9yKQoreworICAgIGNoYXJfdQkqKmZuYW1lcyA9IE5VTEw7CisgICAgT1NFcnIJbmV3RXJyb3I7CisgICAgbG9uZwlmaWxlQ291bnQ7CisgICAgRlNTcGVjCWZpbGVUb09wZW47CisgICAgbG9uZwlhY3R1YWxTaXplOworICAgIEFFS2V5d29yZAlkdW1teUtleXdvcmQ7CisgICAgRGVzY1R5cGUJZHVtbXlUeXBlOworCisgICAgLyogR2V0IG51bWJlciBvZiBmaWxlcyBpbiBsaXN0ICovCisgICAgKmVycm9yID0gQUVDb3VudEl0ZW1zKHRoZUxpc3QsIG51bUZpbGVzKTsKKyAgICBpZiAoKmVycm9yKQorICAgIHsKKyNpZmRlZiBVU0VfU0lPVVgKKwlwcmludGYgKCJmbmFtZV9mcm9tX0FFRGVzYzogQUVDb3VudEl0ZW1zIGVycm9yOiAlZFxuIiwgZXJyb3IpOworI2VuZGlmCisJcmV0dXJuKGZuYW1lcyk7CisgICAgfQorCisgICAgLyogQWxsb2NhdGUgdGhlIHBvaW50ZXIgbGlzdCAqLworICAgIGZuYW1lcyA9IChjaGFyX3UgKiopIGFsbG9jKCpudW1GaWxlcyAqIHNpemVvZihjaGFyX3UgKikpOworCisgICAgLyogRW1wdHkgb3V0IHRoZSBsaXN0ICovCisgICAgZm9yIChmaWxlQ291bnQgPSAwOyBmaWxlQ291bnQgPCAqbnVtRmlsZXM7IGZpbGVDb3VudCsrKQorCWZuYW1lc1tmaWxlQ291bnRdID0gTlVMTDsKKworICAgIC8qIFNjYW4gdGhlIGxpc3Qgb2YgRlNTcGVjICovCisgICAgZm9yIChmaWxlQ291bnQgPSAxOyBmaWxlQ291bnQgPD0gKm51bUZpbGVzOyBmaWxlQ291bnQrKykKKyAgICB7CisJLyogR2V0IHRoZSBhbGlhcyBmb3IgdGhlIG50aCBmaWxlLCBjb252ZXJ0IHRvIGFuIEZTU3BlYyAqLworCW5ld0Vycm9yID0gQUVHZXROdGhQdHIodGhlTGlzdCwgZmlsZUNvdW50LCB0eXBlRlNTLAorCQkJCSZkdW1teUtleXdvcmQsICZkdW1teVR5cGUsCisJCQkJKFB0cikgJmZpbGVUb09wZW4sIHNpemVvZihGU1NwZWMpLCAmYWN0dWFsU2l6ZSk7CisJaWYgKG5ld0Vycm9yKQorCXsKKwkgICAgLyogQ2FsbGVyIGlzIGFibGUgdG8gY2xlYW4gdXAgKi8KKwkgICAgLyogVE9ETzogU2hvdWxkIGJlIGNsZWFuIHVwIG9yIG5vdD8gRm9yIHNhZmV0eS4gKi8KKyNpZmRlZiBVU0VfU0lPVVgKKwkgICAgcHJpbnRmICgiYWV2dF9vZG9jOiBBRUdldE50aFB0ciBlcnJvcjogJWRcbiIsIG5ld0Vycm9yKTsKKyNlbmRpZgorCSAgICByZXR1cm4oZm5hbWVzKTsKKwl9CisKKwkvKiBDb252ZXJ0IHRoZSBGU1NwZWMgdG8gYSBwYXRobmFtZSAqLworCWZuYW1lc1tmaWxlQ291bnQgLSAxXSA9IEZ1bGxQYXRoRnJvbUZTU3BlY19zYXZlIChmaWxlVG9PcGVuKTsKKyAgICB9CisKKyAgICByZXR1cm4gKGZuYW1lcyk7Cit9CisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvZGVXYXJyaW9yIEV4dGVybmFsIEVkaXRvciBTdXBwb3J0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmZGVmIEZFQVRfQ1dfRURJVE9SCisKKy8qCisgKiBIYW5kbGUgdGhlIFdpbmRvdyBTZWFyY2ggZXZlbnQgZnJvbSBDb2RlV2FycmlvcgorICoKKyAqIERlc2NyaXB0aW9uCisgKiAtLS0tLS0tLS0tLQorICoKKyAqIFRoZSBJREUgc2VuZHMgdGhlIFdpbmRvdyBTZWFyY2ggQXBwbGVFdmVudCB0byB0aGUgZWRpdG9yIHdoZW4gaXQKKyAqIG5lZWRzIHRvIGtub3cgd2hldGhlciBhIHBhcnRpY3VsYXIgZmlsZSBpcyBvcGVuIGluIHRoZSBlZGl0b3IuCisgKgorICogRXZlbnQgUmVwbHkKKyAqIC0tLS0tLS0tLS0tCisgKgorICogTm9uZS4gUHV0IGRhdGEgaW4gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBpbiB0aGUgc3RydWN0dXJlIHJlY2VpdmVkLgorICoKKyAqIFJlbWFya3MKKyAqIC0tLS0tLS0KKyAqCisgKiBXaGVuIHRoZSBlZGl0b3IgcmVjZWl2ZXMgdGhpcyBldmVudCwgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZAorICogZmlsZSBpcyBvcGVuLiBJZiBpdCBpcywgcmV0dXJuIHRoZSBtb2RpZmljYXRpb24gZGF0ZS90aW1lIGZvciB0aGF0IGZpbGUKKyAqIGluIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbiBzcGVjaWZpZWQgaW4gdGhlIHN0cnVjdHVyZS4gSWYgdGhlIGZpbGUgaXMKKyAqIG5vdCBvcGVuZWQsIHB1dCB0aGUgdmFsdWUgZm5mRXJyIChmaWxlIG5vdCBmb3VuZCkgaW4gdGhhdCBsb2NhdGlvbi4KKyAqCisgKi8KKworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgIC8qIG9ubHkgaW4gQ29kZXdhcnJpb3IgKi8KKyMgcHJhZ21hIG9wdGlvbnMgYWxpZ249bWFjNjhrCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IFdpbmRvd1NlYXJjaCBXaW5kb3dTZWFyY2g7CitzdHJ1Y3QgV2luZG93U2VhcmNoIC8qIGZvciBoYW5kbGluZyBjbGFzcyAnS0FITCcsIGV2ZW50ICdTUkNIJywga2V5RGlyZWN0T2JqZWN0IHR5cGVDaGFyKi8KK3sKKyAgICBGU1NwZWMgdGhlRmlsZTsgLy8gaWRlbnRpZmllcyB0aGUgZmlsZQorICAgIGxvbmcgKnRoZURhdGU7IC8vIHdoZXJlIHRvIHB1dCB0aGUgbW9kaWZpY2F0aW9uIGRhdGUvdGltZQorfTsKKyNpZiBkZWZpbmVkKF9fTVdFUktTX18pICAvKiBvbmx5IGluIENvZGV3YXJyaW9yICovCisjIHByYWdtYSBvcHRpb25zIGFsaWduPXJlc2V0CisjZW5kaWYKKworcGFzY2FsIE9TRXJyIEhhbmRsZV9LQUhMX1NSQ0hfQUUgKGNvbnN0IEFwcGxlRXZlbnQgKnRoZUFFdmVudCwgQXBwbGVFdmVudCAqdGhlUmVwbHksIGxvbmcgcmVmQ29uKQoreworICAgIE9TRXJyCWVycm9yID0gbm9FcnI7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWZvdW5kRmlsZSA9IGZhbHNlOworICAgIERlc2NUeXBlCXR5cGVDb2RlOworICAgIFdpbmRvd1NlYXJjaCBTZWFyY2hEYXRhOworICAgIFNpemUJYWN0dWFsU2l6ZTsKKworICAgIGVycm9yID0gQUVHZXRQYXJhbVB0cih0aGVBRXZlbnQsIGtleURpcmVjdE9iamVjdCwgdHlwZUNoYXIsICZ0eXBlQ29kZSwgKFB0cikgJlNlYXJjaERhdGEsIHNpemVvZihXaW5kb3dTZWFyY2gpLCAmYWN0dWFsU2l6ZSk7CisgICAgaWYgKGVycm9yKQorICAgIHsKKyNpZmRlZiBVU0VfU0lPVVgKKwlwcmludGYgKCJLQUhMX1NSQ0g6IEFFR2V0UGFyYW1QdHIgZXJyb3I6ICVkXG4iLCBlcnJvcik7CisjZW5kaWYKKwlyZXR1cm4oZXJyb3IpOworICAgIH0KKworICAgIGVycm9yID0gSGFuZGxlVW51c2VkUGFybXMgKHRoZUFFdmVudCk7CisgICAgaWYgKGVycm9yKQorICAgIHsKKyNpZmRlZiBVU0VfU0lPVVgKKwlwcmludGYgKCJLQUhMX1NSQ0g6IEhhbmRsZVVudXNlZFBhcm1zIGVycm9yOiAlZFxuIiwgZXJyb3IpOworI2VuZGlmCisJcmV0dXJuKGVycm9yKTsKKyAgICB9CisKKyAgICBmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTDsgYnVmID0gYnVmLT5iX25leHQpCisJaWYgKGJ1Zi0+Yl9tbC5tbF9tZnAgIT0gTlVMTAorCQkmJiBTZWFyY2hEYXRhLnRoZUZpbGUucGFySUQgPT0gYnVmLT5iX0ZTU3BlYy5wYXJJRAorCQkmJiBTZWFyY2hEYXRhLnRoZUZpbGUubmFtZVswXSA9PSBidWYtPmJfRlNTcGVjLm5hbWVbMF0KKwkJJiYgU1RSTkNNUChTZWFyY2hEYXRhLnRoZUZpbGUubmFtZSwgYnVmLT5iX0ZTU3BlYy5uYW1lLCBidWYtPmJfRlNTcGVjLm5hbWVbMF0gKyAxKSA9PSAwKQorCSAgICB7CisJCWZvdW5kRmlsZSA9IHRydWU7CisJCWJyZWFrOworCSAgICB9CisKKyAgICBpZiAoZm91bmRGaWxlID09IGZhbHNlKQorCSpTZWFyY2hEYXRhLnRoZURhdGUgPSBmbmZFcnI7CisgICAgZWxzZQorCSpTZWFyY2hEYXRhLnRoZURhdGUgPSBidWYtPmJfbXRpbWU7CisKKyNpZmRlZiBVU0VfU0lPVVgKKyAgICBwcmludGYgKCJLQUhMX1NSQ0g6IGZpbGUgXCIlI3NcIiB7JWR9IiwgU2VhcmNoRGF0YS50aGVGaWxlLm5hbWUsU2VhcmNoRGF0YS50aGVGaWxlLnBhcklEKTsKKyAgICBpZiAoZm91bmRGaWxlID09IGZhbHNlKQorCXByaW50ZiAoIiBOT1QiKTsKKyAgICBwcmludGYgKCIgZm91bmQuIFtkYXRlICVseCwgJWx4XVxuIiwgKlNlYXJjaERhdGEudGhlRGF0ZSwgYnVmLT5iX210aW1lX3JlYWQpOworI2VuZGlmCisKKyAgICByZXR1cm4gZXJyb3I7Cit9OworCisvKgorICogSGFuZGxlIHRoZSBNb2RpZmllZCAoZnJvbSBJREUgdG8gRWRpdG9yKSBldmVudCBmcm9tIENvZGVXYXJyaW9yCisgKgorICogRGVzY3JpcHRpb24KKyAqIC0tLS0tLS0tLS0tCisgKgorICogVGhlIElERSBzZW5kcyB0aGlzIGV2ZW50IHRvIHRoZSBleHRlcm5hbCBlZGl0b3Igd2hlbiBpdCB3YW50cyB0bworICoga25vdyB3aGljaCBmaWxlcyB0aGF0IGFyZSBvcGVuIGluIHRoZSBlZGl0b3IgaGF2ZSBiZWVuIG1vZGlmaWVkLgorICoKKyAqIFBhcmFtZXRlcnMgICBOb25lLgorICogLS0tLS0tLS0tLQorICoKKyAqIEV2ZW50IFJlcGx5CisgKiAtLS0tLS0tLS0tLQorICogVGhlIHJlcGx5IGZvciB0aGlzIGV2ZW50IGlzOgorICoKKyAqIGtleURpcmVjdE9iamVjdCB0eXBlQUVMaXN0IHJlcXVpcmVkCisgKiAgZWFjaCBlbGVtZW50IGluIHRoZSBsaXN0IGlzIGEgc3RydWN0dXJlIG9mIHR5cGVDaGFyCisgKgorICogUmVtYXJrcworICogLS0tLS0tLQorICoKKyAqIFdoZW4gYnVpbGRpbmcgdGhlIHJlcGx5IGV2ZW50LCBpbmNsdWRlIG9uZSBlbGVtZW50IGluIHRoZSBsaXN0IGZvcgorICogZWFjaCBvcGVuIGZpbGUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZC4KKyAqCisgKi8KKworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgIC8qIG9ubHkgaW4gQ29kZXdhcnJpb3IgKi8KKyMgcHJhZ21hIG9wdGlvbnMgYWxpZ249bWFjNjhrCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IE1vZGlmaWNhdGlvbkluZm8gTW9kaWZpY2F0aW9uSW5mbzsKK3N0cnVjdCBNb2RpZmljYXRpb25JbmZvIC8qIGZvciByZXBseWluZyB0byBjbGFzcyAnS0FITCcsIGV2ZW50ICdNT0QgJywga2V5RGlyZWN0T2JqZWN0IHR5cGVBRUxpc3QqLworeworICAgIEZTU3BlYyB0aGVGaWxlOyAvLyBpZGVudGlmaWVzIHRoZSBmaWxlCisgICAgbG9uZyB0aGVEYXRlOyAvLyB0aGUgZGF0ZS90aW1lIHRoZSBmaWxlIHdhcyBsYXN0IG1vZGlmaWVkCisgICAgc2hvcnQgc2F2ZWQ7IC8vIHNldCB0aGlzIHRvIHplcm8gd2hlbiByZXBseWluZywgdW51c2VkCit9OworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgIC8qIG9ubHkgaW4gQ29kZXdhcnJpb3IgKi8KKyMgcHJhZ21hIG9wdGlvbnMgYWxpZ249cmVzZXQKKyNlbmRpZgorCitwYXNjYWwgT1NFcnIgSGFuZGxlX0tBSExfTU9EX0FFIChjb25zdCBBcHBsZUV2ZW50ICp0aGVBRXZlbnQsIEFwcGxlRXZlbnQgKnRoZVJlcGx5LCBsb25nIHJlZkNvbikKK3sKKyAgICBPU0VycgllcnJvciA9IG5vRXJyOworICAgIEFFRGVzY0xpc3QJcmVwbHlMaXN0OworICAgIGxvbmcJbnVtRmlsZXM7CisgICAgTW9kaWZpY2F0aW9uSW5mbyB0aGVGaWxlOworICAgIGJ1Zl9UCSpidWY7CisKKyAgICB0aGVGaWxlLnNhdmVkID0gMDsKKworICAgIGVycm9yID0gSGFuZGxlVW51c2VkUGFybXMgKHRoZUFFdmVudCk7CisgICAgaWYgKGVycm9yKQorICAgIHsKKyNpZmRlZiBVU0VfU0lPVVgKKwlwcmludGYgKCJLQUhMX01PRDogSGFuZGxlVW51c2VkUGFybXMgZXJyb3I6ICVkXG4iLCBlcnJvcik7CisjZW5kaWYKKwlyZXR1cm4oZXJyb3IpOworICAgIH0KKworICAgIC8qIFNlbmQgdGhlIHJlcGx5ICovCisvKiAgcmVwbHlPYmplY3QuZGVzY3JpcHRvclR5cGUgPSB0eXBlTnVsbDsKKyAgICByZXBseU9iamVjdC5kYXRhSGFuZGxlICAgICA9IG5pbDsqLworCisvKiBBRUNyZWF0ZURlc2ModHlwZUNoYXIsIChQdHIpJnRpdGxlWzFdLCB0aXRsZVswXSwgJmRhdGEpICovCisgICAgZXJyb3IgPSBBRUNyZWF0ZUxpc3QobmlsLCAwLCBmYWxzZSwgJnJlcGx5TGlzdCk7CisgICAgaWYgKGVycm9yKQorICAgIHsKKyNpZmRlZiBVU0VfU0lPVVgKKwlwcmludGYgKCJLQUhMX01PRDogQUVDcmVhdGVMaXN0IGVycm9yOiAlZFxuIiwgZXJyb3IpOworI2VuZGlmCisJcmV0dXJuKGVycm9yKTsKKyAgICB9CisKKyNpZiAwCisgICAgZXJyb3IgPSBBRUNvdW50SXRlbXMoJnJlcGx5TGlzdCwgJm51bUZpbGVzKTsKKyNpZmRlZiBVU0VfU0lPVVgKKyAgICBwcmludGYgKCJLQUhMX01PRCBSZXBseUxpc3Q6ICV4ICV4XG4iLCByZXBseUxpc3QuZGVzY3JpcHRvclR5cGUsIHJlcGx5TGlzdC5kYXRhSGFuZGxlKTsKKyAgICBwcmludGYgKCJLQUhMX01PRCBJdGVtSW5MaXN0OiAlZFxuIiwgbnVtRmlsZXMpOworI2VuZGlmCisKKyAgICAvKiBBRVB1dEtleURlc2MgKCZyZXBseUxpc3QsIGtleUFFUG5qZWN0LCAmYURlc2MpCisgICAgICogQUVQdXRLZXlQdHIgICgmcmVwbHlMaXN0LCBrZXlBRVBvc2l0aW9uLCB0eXBlQ2hhciwgKFB0cikmdGhlVHlwZSwKKyAgICAgKiBzaXplb2YoRGVzY1R5cGUpKQorICAgICAqLworCisgICAgLyogQUVQdXREZXNjICovCisjZW5kaWYKKworICAgIG51bUZpbGVzID0gMDsKKyAgICBmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTDsgYnVmID0gYnVmLT5iX25leHQpCisJaWYgKGJ1Zi0+Yl9tbC5tbF9tZnAgIT0gTlVMTCkKKwl7CisJICAgIC8qIEFkZCB0aGlzIGZpbGUgdG8gdGhlIGxpc3QgKi8KKwkgICAgdGhlRmlsZS50aGVGaWxlID0gYnVmLT5iX0ZTU3BlYzsKKwkgICAgdGhlRmlsZS50aGVEYXRlID0gYnVmLT5iX210aW1lOworLyoJICAgIHRoZUZpbGUudGhlRGF0ZSA9IHRpbWUgKE5VTEwpICYgKHRpbWVfdCkgMHhGRkZGRkZGMDsgKi8KKwkgICAgZXJyb3IgPSBBRVB1dFB0ciAoJnJlcGx5TGlzdCwgbnVtRmlsZXMsIHR5cGVDaGFyLCAoUHRyKSAmdGhlRmlsZSwgc2l6ZW9mKHRoZUZpbGUpKTsKKyNpZmRlZiBVU0VfU0lPVVgKKwkgICAgaWYgKG51bUZpbGVzID09IDApCisJCXByaW50ZiAoIktBSExfTU9EOiAiKTsKKwkgICAgZWxzZQorCQlwcmludGYgKCIsICIpOworCSAgICBwcmludGYgKCJcIiUjc1wiIHslZH0gW2RhdGUgJWx4LCAlbHhdIiwgdGhlRmlsZS50aGVGaWxlLm5hbWUsIHRoZUZpbGUudGhlRmlsZS5wYXJJRCwgdGhlRmlsZS50aGVEYXRlLCBidWYtPmJfbXRpbWVfcmVhZCk7CisJICAgIGlmIChlcnJvcikKKwkJcHJpbnRmICgiICglZCkiLCBlcnJvcik7CisJICAgIG51bUZpbGVzKys7CisjZW5kaWYKKwl9OworCisjaWZkZWYgVVNFX1NJT1VYCisgICAgcHJpbnRmICgiXG4iKTsKKyNlbmRpZgorCisjaWYgMAorICAgIGVycm9yID0gQUVDb3VudEl0ZW1zKCZyZXBseUxpc3QsICZudW1GaWxlcyk7CisjaWZkZWYgVVNFX1NJT1VYCisgICAgcHJpbnRmICgiS0FITF9NT0QgSXRlbUluTGlzdDogJWRcbiIsIG51bUZpbGVzKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICAvKiBXZSBjYW4gYWRkIGRhdGEgb25seSBpZiBzb21ldGhpbmcgdG8gcmVwbHkgKi8KKyAgICBlcnJvciA9IEFFUHV0UGFyYW1EZXNjICh0aGVSZXBseSwga2V5RGlyZWN0T2JqZWN0LCAmcmVwbHlMaXN0KTsKKworI2lmZGVmIFVTRV9TSU9VWAorICAgIGlmIChlcnJvcikKKwlwcmludGYgKCJLQUhMX01PRDogQUVQdXRQYXJhbURlc2MgZXJyb3I6ICVkXG4iLCBlcnJvcik7CisjZW5kaWYKKworICAgIGlmIChyZXBseUxpc3QuZGF0YUhhbmRsZSkKKwlBRURpc3Bvc2VEZXNjKCZyZXBseUxpc3QpOworCisgICAgcmV0dXJuIGVycm9yOworfTsKKworLyoKKyAqIEhhbmRsZSB0aGUgR2V0IFRleHQgZXZlbnQgZnJvbSBDb2RlV2FycmlvcgorICoKKyAqIERlc2NyaXB0aW9uCisgKiAtLS0tLS0tLS0tLQorICoKKyAqIFRoZSBJREUgc2VuZHMgdGhlIEdldCBUZXh0IEFwcGxlRXZlbnQgdG8gdGhlIGVkaXRvciB3aGVuIGl0IG5lZWRzCisgKiB0aGUgc291cmNlIGNvZGUgZnJvbSBhIGZpbGUuIEZvciBleGFtcGxlLCB3aGVuIHRoZSB1c2VyIGlzc3VlcyBhCisgKiBDaGVjayBTeW50YXggb3IgQ29tcGlsZSBjb21tYW5kLCB0aGUgY29tcGlsZXIgbmVlZHMgYWNjZXNzIHRvCisgKiB0aGUgc291cmNlIGNvZGUgY29udGFpbmVkIGluIHRoZSBmaWxlLgorICoKKyAqIEV2ZW50IFJlcGx5CisgKiAtLS0tLS0tLS0tLQorICoKKyAqIE5vbmUuIFB1dCBkYXRhIGluIGxvY2F0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHN0cnVjdHVyZSByZWNlaXZlZC4KKyAqCisgKiBSZW1hcmtzCisgKiAtLS0tLS0tCisgKgorICogV2hlbiB0aGUgZWRpdG9yIHJlY2VpdmVzIHRoaXMgZXZlbnQsIGl0IG11c3Qgc2V0IHRoZSBzaXplIG9mIHRoZSBoYW5kbGUKKyAqIGluIHRoZVRleHQgdG8gZml0IHRoZSBkYXRhIGluIHRoZSBmaWxlLiBJdCBtdXN0IHRoZW4gY29weSB0aGUgZW50aXJlCisgKiBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgaW50byB0aGUgbWVtb3J5IGxvY2F0aW9uIHNwZWNpZmllZCBpbgorICogdGhlVGV4dC4KKyAqCisgKi8KKworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgIC8qIG9ubHkgaW4gQ29kZXdhcnJpb3IgKi8KKyMgcHJhZ21hIG9wdGlvbnMgYWxpZ249bWFjNjhrCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IENXX0dldFRleHQgQ1dfR2V0VGV4dDsKK3N0cnVjdCBDV19HZXRUZXh0IC8qIGZvciBoYW5kbGluZyBjbGFzcyAnS0FITCcsIGV2ZW50ICdHVFRYJywga2V5RGlyZWN0T2JqZWN0IHR5cGVDaGFyKi8KK3sKKyAgICBGU1NwZWMgdGhlRmlsZTsgLyogaWRlbnRpZmllcyB0aGUgZmlsZSAqLworICAgIEhhbmRsZSB0aGVUZXh0OyAvKiB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHJldHVybiB0aGUgdGV4dCAobXVzdCBiZSByZXNpemVkIHByb3Blcmx5KSAqLworICAgIGxvbmcgKnVudXNlZDsgICAvKiAwIChub3QgdXNlZCkgKi8KKyAgICBsb25nICp0aGVEYXRlOyAgLyogd2hlcmUgdG8gcHV0IHRoZSBtb2RpZmljYXRpb24gZGF0ZS90aW1lICovCit9OworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgIC8qIG9ubHkgaW4gQ29kZXdhcnJpb3IgKi8KKyMgcHJhZ21hIG9wdGlvbnMgYWxpZ249cmVzZXQKKyNlbmRpZgorCitwYXNjYWwgT1NFcnIgSGFuZGxlX0tBSExfR1RUWF9BRSAoY29uc3QgQXBwbGVFdmVudCAqdGhlQUV2ZW50LCBBcHBsZUV2ZW50ICp0aGVSZXBseSwgbG9uZyByZWZDb24pCit7CisgICAgT1NFcnIJZXJyb3IgPSBub0VycjsKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJZm91bmRGaWxlID0gZmFsc2U7CisgICAgRGVzY1R5cGUJdHlwZUNvZGU7CisgICAgQ1dfR2V0VGV4dAlHZXRUZXh0RGF0YTsKKyAgICBTaXplCWFjdHVhbFNpemU7CisgICAgY2hhcl91CSpsaW5lOworICAgIGNoYXJfdQkqZnVsbGJ1ZmZlciA9IE5VTEw7CisgICAgbG9uZwlsaW5lc2l6ZTsKKyAgICBsb25nCWxpbmVTdGFydDsKKyAgICBsb25nCUJ1ZmZlclNpemU7CisgICAgbG9uZwlsaW5lbm87CisKKyAgICBlcnJvciA9IEFFR2V0UGFyYW1QdHIodGhlQUV2ZW50LCBrZXlEaXJlY3RPYmplY3QsIHR5cGVDaGFyLCAmdHlwZUNvZGUsIChQdHIpICZHZXRUZXh0RGF0YSwgc2l6ZW9mKEdldFRleHREYXRhKSwgJmFjdHVhbFNpemUpOworCisgICAgaWYgKGVycm9yKQorICAgIHsKKyNpZmRlZiBVU0VfU0lPVVgKKwlwcmludGYgKCJLQUhMX0dUVFg6IEFFR2V0UGFyYW1QdHIgZXJyb3I6ICVkXG4iLCBlcnJvcik7CisjZW5kaWYKKwlyZXR1cm4oZXJyb3IpOworICAgIH0KKworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKwlpZiAoYnVmLT5iX21sLm1sX21mcCAhPSBOVUxMKQorCSAgICBpZiAoR2V0VGV4dERhdGEudGhlRmlsZS5wYXJJRCA9PSBidWYtPmJfRlNTcGVjLnBhcklEKQorCSAgICB7CisJCWZvdW5kRmlsZSA9IHRydWU7CisJCWJyZWFrOworCSAgICB9CisKKyAgICBpZiAoZm91bmRGaWxlKQorICAgIHsKKwlCdWZmZXJTaXplID0gMDsgLyogR2V0SGFuZGxlU2l6ZSAoR2V0VGV4dERhdGEudGhlVGV4dCk7ICovCisJZm9yIChsaW5lbm8gPSAwOyBsaW5lbm8gPD0gYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7IGxpbmVubysrKQorCXsKKwkgICAgLyogTXVzdCB1c2UgdGhlIHJpZ2h0IGJ1ZmZlciAqLworCSAgICBsaW5lID0gbWxfZ2V0X2J1ZihidWYsIChsaW5lbnJfVCkgbGluZW5vLCBGQUxTRSk7CisJICAgIGxpbmVzaXplID0gU1RSTEVOKGxpbmUpICsgMTsKKwkgICAgbGluZVN0YXJ0ID0gQnVmZmVyU2l6ZTsKKwkgICAgQnVmZmVyU2l6ZSArPSBsaW5lc2l6ZTsKKwkgICAgLyogUmVzaXplIGhhbmRsZSB0byBsaW5lc2l6ZSsxIHRvIGluY2x1ZGUgdGhlIGxpbmVmZWVkICovCisJICAgIFNldEhhbmRsZVNpemUgKEdldFRleHREYXRhLnRoZVRleHQsIEJ1ZmZlclNpemUpOworCSAgICBpZiAoR2V0SGFuZGxlU2l6ZSAoR2V0VGV4dERhdGEudGhlVGV4dCkgIT0gQnVmZmVyU2l6ZSkKKwkgICAgeworCSNpZmRlZiBVU0VfU0lPVVgKKwkJcHJpbnRmICgiS0FITF9HVFRYOiBTZXRIYW5kbGVTaXplIGluY3JlYXNlOiAlZCwgc2l6ZSAlZFxuIiwKKwkJCWxpbmVzaXplLCBCdWZmZXJTaXplKTsKKwkjZW5kaWYKKwkJYnJlYWs7IC8qIFNpbXBsZSBoYW5kbGluZyBmb3Igbm93ICovCisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCUhMb2NrIChHZXRUZXh0RGF0YS50aGVUZXh0KTsKKwkJZnVsbGJ1ZmZlciA9IChjaGFyX3UgKikgKkdldFRleHREYXRhLnRoZVRleHQ7CisJCVNUUkNQWSAoKGNoYXJfdSAqKSAoZnVsbGJ1ZmZlciArIGxpbmVTdGFydCksIGxpbmUpOworCQlmdWxsYnVmZmVyW0J1ZmZlclNpemUtMV0gPSAnXHInOworCQlIVW5sb2NrIChHZXRUZXh0RGF0YS50aGVUZXh0KTsKKwkgICAgfQorCX0KKwlpZiAoZnVsbGJ1ZmZlciAhPSBOVUxMKQorCXsKKwkgICAgSExvY2sgKEdldFRleHREYXRhLnRoZVRleHQpOworCSAgICBmdWxsYnVmZmVyW0J1ZmZlclNpemUtMV0gPSAwOworCSAgICBIVW5sb2NrIChHZXRUZXh0RGF0YS50aGVUZXh0KTsKKwl9CisJaWYgKGZvdW5kRmlsZSA9PSBmYWxzZSkKKwkgICAgKkdldFRleHREYXRhLnRoZURhdGUgPSBmbmZFcnI7CisJZWxzZQorLyoJICAgICpHZXRUZXh0RGF0YS50aGVEYXRlID0gdGltZSAoTlVMTCkgJiAodGltZV90KSAweEZGRkZGRkYwOyovCisJICAgICpHZXRUZXh0RGF0YS50aGVEYXRlID0gYnVmLT5iX210aW1lOworICAgIH0KKyNpZmRlZiBVU0VfU0lPVVgKKyAgICBwcmludGYgKCJLQUhMX0dUVFg6IGZpbGUgXCIlI3NcIiB7JWR9IFtkYXRlICVseCwgJWx4XSIsIEdldFRleHREYXRhLnRoZUZpbGUubmFtZSwgR2V0VGV4dERhdGEudGhlRmlsZS5wYXJJRCwgKkdldFRleHREYXRhLnRoZURhdGUsIGJ1Zi0+Yl9tdGltZV9yZWFkKTsKKyAgICBpZiAoZm91bmRGaWxlID09IGZhbHNlKQorCXByaW50ZiAoIiBOT1QiKTsKKyAgICBwcmludGYgKCIgZm91bmQuIChCdWZmZXJTaXplID0gJWQpXG4iLCBCdWZmZXJTaXplKTsKKyNlbmRpZgorCisgICAgZXJyb3IgPSBIYW5kbGVVbnVzZWRQYXJtcyAodGhlQUV2ZW50KTsKKyAgICBpZiAoZXJyb3IpCisgICAgeworI2lmZGVmIFVTRV9TSU9VWAorCXByaW50ZiAoIktBSExfR1RUWDogSGFuZGxlVW51c2VkUGFybXMgZXJyb3I6ICVkXG4iLCBlcnJvcik7CisjZW5kaWYKKwlyZXR1cm4oZXJyb3IpOworICAgIH0KKworICAgIHJldHVybihlcnJvcik7Cit9CisKKy8qCisgKgorICovCisKKy8qIFRha2VuIGZyb20gTW9yZUFwcGxlRXZlbnRzOlByb2Nlc3NIZWxwZXJzKi8KK3Bhc2NhbAlPU0VycglGaW5kUHJvY2Vzc0J5U2lnbmF0dXJlKCBjb25zdCBPU1R5cGUgdGFyZ2V0VHlwZSwKKwkJCQkJY29uc3QgT1NUeXBlIHRhcmdldENyZWF0b3IsCisJCQkJCSAgICAgIFByb2Nlc3NTZXJpYWxOdW1iZXJQdHIgcHNuUHRyICkKK3sKKyAgICBPU0VycglhbkVyciA9IG5vRXJyOworICAgIEJvb2xlYW4JbG9va2luZ0ZvclByb2Nlc3MgPSB0cnVlOworCisgICAgUHJvY2Vzc0luZm9SZWMgIGluZm9SZWM7CisKKyAgICBpbmZvUmVjLnByb2Nlc3NJbmZvTGVuZ3RoID0gc2l6ZW9mKCBQcm9jZXNzSW5mb1JlYyApOworICAgIGluZm9SZWMucHJvY2Vzc05hbWUgPSBuaWw7CisgICAgaW5mb1JlYy5wcm9jZXNzQXBwU3BlYyA9IG5pbDsKKworICAgIHBzblB0ci0+bG93TG9uZ09mUFNOID0ga05vUHJvY2VzczsKKyAgICBwc25QdHItPmhpZ2hMb25nT2ZQU04gPSBrTm9Qcm9jZXNzOworCisgICAgd2hpbGUgKCBsb29raW5nRm9yUHJvY2VzcyApCisgICAgeworCWFuRXJyID0gR2V0TmV4dFByb2Nlc3MoIHBzblB0ciApOworCWlmICggYW5FcnIgIT0gbm9FcnIgKQorCXsKKwkgICAgbG9va2luZ0ZvclByb2Nlc3MgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkgICAgYW5FcnIgPSBHZXRQcm9jZXNzSW5mb3JtYXRpb24oIHBzblB0ciwgJmluZm9SZWMgKTsKKwkgICAgaWYgKCAoIGFuRXJyID09IG5vRXJyICkKKwkJICYmICggaW5mb1JlYy5wcm9jZXNzVHlwZSA9PSB0YXJnZXRUeXBlICkKKwkJICYmICggaW5mb1JlYy5wcm9jZXNzU2lnbmF0dXJlID09IHRhcmdldENyZWF0b3IgKSApCisJICAgIHsKKwkJbG9va2luZ0ZvclByb2Nlc3MgPSBmYWxzZTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICByZXR1cm4gYW5FcnI7Cit9Ly9lbmQgRmluZFByb2Nlc3NCeVNpZ25hdHVyZQorCit2b2lkIFNlbmRfS0FITF9NT0RfQUUgKGJ1Zl9UICpidWYpCit7CisgICAgT1NFcnIgICBhbkVyciA9IG5vRXJyOworICAgIEFFRGVzYyAgdGFyZ2V0QXBwRGVzYyA9IHsgdHlwZU51bGwsIG5pbCB9OworICAgIFByb2Nlc3NTZXJpYWxOdW1iZXIJICAgIHBzbiA9IHsga05vUHJvY2Vzcywga05vUHJvY2VzcyB9OworICAgIEFwcGxlRXZlbnQJdGhlUmVwbHkgPSB7IHR5cGVOdWxsLCBuaWwgfTsKKyAgICBBRVNlbmRNb2RlCXNlbmRNb2RlOworICAgIEFwcGxlRXZlbnQgIHRoZUV2ZW50ID0ge3R5cGVOdWxsLCBuaWwgfTsKKyAgICBBRUlkbGVVUFAgICBpZGxlUHJvY1VQUCA9IG5pbDsKKyAgICBNb2RpZmljYXRpb25JbmZvIE1vZERhdGE7CisKKworICAgIGFuRXJyID0gRmluZFByb2Nlc3NCeVNpZ25hdHVyZSggJ0FQUEwnLCAnQ1dJRScsICZwc24gKTsKKyNpZmRlZiBVU0VfU0lPVVgKKyAgICBwcmludGYgKCJDb2RlV2FycmlvciBpcyIpOworICAgIGlmIChhbkVyciAhPSBub0VycikKKwlwcmludGYgKCIgTk9UIik7CisgICAgcHJpbnRmICgiIHJ1bm5pbmdcbiIpOworI2VuZGlmCisgICAgaWYgKCBhbkVyciA9PSBub0VyciApCisgICAgeworCWFuRXJyID0gQUVDcmVhdGVEZXNjICh0eXBlUHJvY2Vzc1NlcmlhbE51bWJlciwgJnBzbiwKKwkJCSAgICAgIHNpemVvZiggUHJvY2Vzc1NlcmlhbE51bWJlciApLCAmdGFyZ2V0QXBwRGVzYyk7CisKKwlpZiAoIGFuRXJyID09IG5vRXJyICkKKwl7CisJICAgIGFuRXJyID0gQUVDcmVhdGVBcHBsZUV2ZW50KCAnS0FITCcsICdNT0QgJywgJnRhcmdldEFwcERlc2MsCisJCQkJCWtBdXRvR2VuZXJhdGVSZXR1cm5JRCwga0FueVRyYW5zYWN0aW9uSUQsICZ0aGVFdmVudCk7CisJfQorCisJQUVEaXNwb3NlRGVzYyggJnRhcmdldEFwcERlc2MgKTsKKworCS8qIEFkZCB0aGUgcGFybXMgKi8KKwlNb2REYXRhLnRoZUZpbGUgPSBidWYtPmJfRlNTcGVjOworCU1vZERhdGEudGhlRGF0ZSA9IGJ1Zi0+Yl9tdGltZTsKKworCWlmIChhbkVyciA9PSBub0VycikKKwkgICAgYW5FcnIgPUFFUHV0UGFyYW1QdHIgKCZ0aGVFdmVudCwga2V5RGlyZWN0T2JqZWN0LCB0eXBlQ2hhciwgJk1vZERhdGEsIHNpemVvZihNb2REYXRhKSk7CisKKwlpZiAoIGlkbGVQcm9jVVBQID09IG5pbCApCisJICAgIHNlbmRNb2RlID0ga0FFTm9SZXBseTsKKwllbHNlCisJICAgIHNlbmRNb2RlID0ga0FFV2FpdFJlcGx5OworCisJaWYgKCBhbkVyciA9PSBub0VyciApCisJICAgIGFuRXJyID0gQUVTZW5kKCAmdGhlRXZlbnQsICZ0aGVSZXBseSwgc2VuZE1vZGUsIGtBRU5vcm1hbFByaW9yaXR5LCBrTm9UaW1lT3V0LCBpZGxlUHJvY1VQUCwgbmlsICk7CisJaWYgKCBhbkVyciA9PSBub0VyciAgJiYgIHNlbmRNb2RlID09IGtBRVdhaXRSZXBseSApCisJeworI2lmZGVmIFVTRV9TSU9VWAorCSAgICBwcmludGYgKCJLQUhMX01PRDogU2VuZCBlcnJvcjogJWRcbiIsIGFuRXJyKTsKKyNlbmRpZgorLyoJICAgIGFuRXJyID0gIEFFSEdldEhhbmRsZXJFcnJvciggJnRoZVJlcGx5ICk7Ki8KKwl9CisJKHZvaWQpIEFFRGlzcG9zZURlc2MoICZ0aGVSZXBseSApOworICAgIH0KK30KKyNlbmRpZiAvKiBGRUFUX0NXX0VESVRPUiAqLworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBBcHBsZSBFdmVudCBIYW5kbGluZyBwcm9jZWR1cmUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZkZWYgVVNFX0FFVkVOVAorCisvKgorICogSGFuZGxlIHRoZSBVbnVzZWQgcGFybXMgb2YgYW4gQXBwbGVFdmVudAorICovCisKK09TRXJyIEhhbmRsZVVudXNlZFBhcm1zIChjb25zdCBBcHBsZUV2ZW50ICp0aGVBRXZlbnQpCit7CisgICAgT1NFcnIJZXJyb3I7CisgICAgbG9uZwlhY3R1YWxTaXplOworICAgIERlc2NUeXBlCWR1bW15VHlwZTsKKyAgICBBRUtleXdvcmQJbWlzc2VkS2V5d29yZDsKKworICAgIC8qIEdldCB0aGUgIm1pc3NlZCBrZXl3b3JkIiBhdHRyaWJ1dGUgZnJvbSB0aGUgQXBwbGVFdmVudC4gKi8KKyAgICBlcnJvciA9IEFFR2V0QXR0cmlidXRlUHRyKHRoZUFFdmVudCwga2V5TWlzc2VkS2V5d29yZEF0dHIsCisJCQkgICAgICB0eXBlS2V5d29yZCwgJmR1bW15VHlwZSwKKwkJCSAgICAgIChQdHIpJm1pc3NlZEtleXdvcmQsIHNpemVvZihtaXNzZWRLZXl3b3JkKSwKKwkJCSAgICAgICZhY3R1YWxTaXplKTsKKworICAgIC8qIElmIHRoZSBkZXNjcmlwdG9yIGlzbid0IGZvdW5kLCB0aGVuIHdlIGdvdCB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy4gKi8KKyAgICBpZiAoZXJyb3IgPT0gZXJyQUVEZXNjTm90Rm91bmQpCisgICAgeworCWVycm9yID0gbm9FcnI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWYgMAorCS8qIFdoeSBpcyB0aGlzIHJlbW92ZWQ/ICovCisJZXJyb3IgPSBlcnJBRUV2ZW50Tm90SGFuZGxlZDsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworCisvKgorICogSGFuZGxlIHRoZSBPRG9jIEFwcGxlRXZlbnQKKyAqCisgKiBEZWFscyB3aXRoIGFsbCBmaWxlcyBkcmFnZ2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBpY29uLgorICoKKyAqLworCisjaWYgZGVmaW5lZChfX01XRVJLU19fKSAgLyogb25seSBpbiBDb2Rld2FycmlvciAqLworIyBwcmFnbWEgb3B0aW9ucyBhbGlnbj1tYWM2OGsKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgU2VsZWN0aW9uUmFuZ2UgU2VsZWN0aW9uUmFuZ2U7CitzdHJ1Y3QgU2VsZWN0aW9uUmFuZ2UgLyogZm9yIGhhbmRsaW5nIGtDb3JlQ2xhc3NFdmVudDprT3BlbkRvY3VtZW50czprZXlBRVBvc2l0aW9uIHR5cGVDaGFyICovCit7CisgICAgc2hvcnQgdW51c2VkMTsgLy8gMCAobm90IHVzZWQpCisgICAgc2hvcnQgbGluZU51bTsgLy8gbGluZSB0byBzZWxlY3QgKDwwIHRvIHNwZWNpZnkgcmFuZ2UpCisgICAgbG9uZyBzdGFydFJhbmdlOyAvLyBzdGFydCBvZiBzZWxlY3Rpb24gcmFuZ2UgKGlmIGxpbmUgPCAwKQorICAgIGxvbmcgZW5kUmFuZ2U7IC8vIGVuZCBvZiBzZWxlY3Rpb24gcmFuZ2UgKGlmIGxpbmUgPCAwKQorICAgIGxvbmcgdW51c2VkMjsgLy8gMCAobm90IHVzZWQpCisgICAgbG9uZyB0aGVEYXRlOyAvLyBtb2RpZmljYXRpb24gZGF0ZS90aW1lCit9OworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgIC8qIG9ubHkgaW4gQ29kZXdhcnJpb3IgKi8KKyMgcHJhZ21hIG9wdGlvbnMgYWxpZ249cmVzZXQKKyNlbmRpZgorCisvKiBUaGUgSURFIHVzZXMgdGhlIG9wdGlvbmFsIGtleUFFUG9zaXRpb24gcGFyYW1ldGVyIHRvIHRlbGwgdGhlIGVkLQorICAgaXRvciB0aGUgc2VsZWN0aW9uIHJhbmdlLiBJZiBsaW5lTnVtIGlzIHplcm8gb3IgZ3JlYXRlciwgc2Nyb2xsIHRoZSB0ZXh0CisgICB0byB0aGUgc3BlY2lmaWVkIGxpbmUuIElmIGxpbmVOdW0gaXMgbGVzcyB0aGFuIHplcm8sIHVzZSB0aGUgdmFsdWVzIGluCisgICBzdGFydFJhbmdlIGFuZCBlbmRSYW5nZSB0byBzZWxlY3QgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXJzLiBTY3JvbGwKKyAgIHRoZSB0ZXh0IHRvIGRpc3BsYXkgdGhlIHNlbGVjdGlvbi4gSWYgbGluZU51bSwgc3RhcnRSYW5nZSwgYW5kCisgICBlbmRSYW5nZSBhcmUgYWxsIG5lZ2F0aXZlLCB0aGVyZSBpcyBubyBzZWxlY3Rpb24gcmFuZ2Ugc3BlY2lmaWVkLgorICovCisKK3Bhc2NhbCBPU0VyciBIYW5kbGVPRG9jQUUgKGNvbnN0IEFwcGxlRXZlbnQgKnRoZUFFdmVudCwgQXBwbGVFdmVudCAqdGhlUmVwbHksIGxvbmcgcmVmQ29uKQoreworICAgIC8qCisgICAgICogVE9ETzogQ2xlYW4gdXAgdGhlIGNvZGUgd2l0aCBjb252ZXJ0IHRoZSBBcHBsZUV2ZW50IGludG8KKyAgICAgKiAgICAgICBhICI6YXJncyIKKyAgICAgKi8KKyAgICBPU0VycgllcnJvciA9IG5vRXJyOworLy8gICAgT1NFcnIJZmlyc3RFcnJvciA9IG5vRXJyOworLy8gICAgc2hvcnQJbnVtRXJyb3JzID0gMDsKKyAgICBBRURlc2MJdGhlTGlzdDsKKyAgICBEZXNjVHlwZQl0eXBlQ29kZTsKKyAgICBsb25nCW51bUZpbGVzOworIC8vICAgbG9uZwkgZmlsZUNvdW50OworICAgIGNoYXJfdQkqKmZuYW1lczsKKy8vICAgIGNoYXJfdQlmbmFtZVsyNTZdOworICAgIFNpemUJYWN0dWFsU2l6ZTsKKyAgICBTZWxlY3Rpb25SYW5nZSB0aGVQb3NpdGlvbjsKKyAgICBzaG9ydAlnb3RQb3NpdGlvbiA9IGZhbHNlOworICAgIGxvbmcJbG51bTsKKworI2lmZGVmIFVTRV9TSU9VWAorICAgIHByaW50ZiAoImFldnRfb2RvYzpcbiIpOworI2VuZGlmCisKKyAgICAvKiB0aGUgZGlyZWN0IG9iamVjdCBwYXJhbWV0ZXIgaXMgdGhlIGxpc3Qgb2YgYWxpYXNlcyB0byBmaWxlcyAob25lIG9yIG1vcmUpICovCisgICAgZXJyb3IgPSBBRUdldFBhcmFtRGVzYyh0aGVBRXZlbnQsIGtleURpcmVjdE9iamVjdCwgdHlwZUFFTGlzdCwgJnRoZUxpc3QpOworICAgIGlmIChlcnJvcikKKyAgICB7CisjaWZkZWYgVVNFX1NJT1VYCisJcHJpbnRmICgiYWV2dF9vZG9jOiBBRUdldFBhcmFtRGVzYyBlcnJvcjogJWRcbiIsIGVycm9yKTsKKyNlbmRpZgorCXJldHVybihlcnJvcik7CisgICAgfQorCisKKyAgICBlcnJvciA9IEFFR2V0UGFyYW1QdHIodGhlQUV2ZW50LCBrZXlBRVBvc2l0aW9uLCB0eXBlQ2hhciwgJnR5cGVDb2RlLCAoUHRyKSAmdGhlUG9zaXRpb24sIHNpemVvZihTZWxlY3Rpb25SYW5nZSksICZhY3R1YWxTaXplKTsKKyAgICBpZiAoZXJyb3IgPT0gbm9FcnIpCisJZ290UG9zaXRpb24gPSB0cnVlOworICAgIGlmIChlcnJvciA9PSBlcnJBRURlc2NOb3RGb3VuZCkKKwllcnJvciA9IG5vRXJyOworICAgIGlmIChlcnJvcikKKyAgICB7CisjaWZkZWYgVVNFX1NJT1VYCisJcHJpbnRmICgiYWV2dF9vZG9jOiBBRUdldFBhcmFtUHRyIGVycm9yOiAlZFxuIiwgZXJyb3IpOworI2VuZGlmCisJcmV0dXJuKGVycm9yKTsKKyAgICB9CisKKyNpZmRlZiBVU0VfU0lPVVgKKyAgICBwcmludGYgKCJhZXZ0X29kb2M6IGxpbmVOdW06ICVkLCBzdGFydFJhbmdlICVkLCBlbmRSYW5nZSAlZCwgW2RhdGUgJWx4XVxuIiwKKwkgICAgdGhlUG9zaXRpb24ubGluZU51bSwgdGhlUG9zaXRpb24uc3RhcnRSYW5nZSwgdGhlUG9zaXRpb24uZW5kUmFuZ2UsCisJICAgIHRoZVBvc2l0aW9uLnRoZURhdGUpOworI2VuZGlmCisvKgorICAgIGVycm9yID0gQUVHZXRQYXJhbURlc2ModGhlQUV2ZW50LCBrZXlBRVBvc2l0aW9uLCB0eXBlQ2hhciwgJnRoZVBvc2l0aW9uKTsKKworICAgIGlmICheZXJyb3IpIHRoZW4KKyAgICB7CisJaWYgKHRoZVBvc2l0aW9uLmxpbmVOdW0gPj0gMCkKKwl7CisJICAvLyBHb3RvIHRoaXMgbGluZQorCX0KKwllbHNlCisJeworCSAgLy8gU2V0IHRoZSByYW5nZSBjaGFyIHdpc2UKKwl9CisgICAgfQorICovCisKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgcmVzZXRfVklzdWFsKCk7CisjZW5kaWYKKworICAgIGZuYW1lcyA9IG5ld19mbmFtZXNfZnJvbV9BRURlc2MoJnRoZUxpc3QsICZudW1GaWxlcywgJmVycm9yKTsKKworICAgIGlmIChlcnJvcikKKyAgICB7CisgICAgICAvKiBUT0RPOiBlbXB0eSBmbmFtZXNbXSBmaXJzdCAqLworICAgICAgdmltX2ZyZWUoZm5hbWVzKTsKKyAgICAgIHJldHVybiAoZXJyb3IpOworICAgIH0KKworICAgIGlmIChzdGFydGluZyA+IDApCisgICAgeworCWludCBpOworCWNoYXJfdSAqcDsKKworCS8qIHRoZXNlIGFyZSB0aGUgaW5pdGlhbCBmaWxlcyBkcm9wcGVkIG9uIHRoZSBWaW0gaWNvbiAqLworCWZvciAoaSA9IDAgOyBpIDwgbnVtRmlsZXM7IGkrKykKKwl7CisJICAgIGlmIChnYV9ncm93KCZnbG9iYWxfYWxpc3QuYWxfZ2EsIDEpID09IEZBSUwKKwkJCQkgICAgICB8fCAocCA9IHZpbV9zdHJzYXZlKGZuYW1lc1tpXSkpID09IE5VTEwpCisJCW1jaF9leGl0KDIpOworCSAgICBlbHNlCisJCWFsaXN0X2FkZCgmZ2xvYmFsX2FsaXN0LCBwLCAyKTsKKwl9CisJZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgICAvKiBIYW5kbGUgdGhlIGRyb3AsIDplZGl0IHRvIGdldCB0byB0aGUgZmlsZSAqLworICAgIGhhbmRsZV9kcm9wKG51bUZpbGVzLCBmbmFtZXMsIEZBTFNFKTsKKworICAgIC8qIFRPRE86IEhhbmRsZSB0aGUgZ290by9zZWxlY3QgbGluZSBtb3JlIGNsZWFubHkgKi8KKyAgICBpZiAoKG51bUZpbGVzID09IDEpICYgKGdvdFBvc2l0aW9uKSkKKyAgICB7CisJaWYgKHRoZVBvc2l0aW9uLmxpbmVOdW0gPj0gMCkKKwl7CisJICAgIGxudW0gPSB0aGVQb3NpdGlvbi5saW5lTnVtOworCS8qICBvYXAtPm1vdGlvbl90eXBlID0gTUxJTkU7CisJICAgIHNldHBjbWFyaygpOyovCisJICAgIGlmIChsbnVtIDwgMUwpCisJCWxudW0gPSAxTDsKKwkgICAgZWxzZSBpZiAobG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQlsbnVtID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisJLyogIGJlZ2lubGluZShCTF9TT0wgfCBCTF9GSVgpOyovCisJfQorCWVsc2UKKwkgICAgZ290b19ieXRlKHRoZVBvc2l0aW9uLnN0YXJ0UmFuZ2UgKyAxKTsKKyAgICB9CisKKyAgICAvKiBVcGRhdGUgdGhlIHNjcmVlbiBkaXNwbGF5ICovCisgICAgdXBkYXRlX3NjcmVlbihOT1RfVkFMSUQpOworICAgIHNldGN1cnNvcigpOworICAgIG91dF9mbHVzaCgpOworCisgIGZpbmlzaGVkOgorICAgIEFFRGlzcG9zZURlc2MoJnRoZUxpc3QpOyAvKiBkaXNwb3NlIHdoYXQgd2UgYWxsb2NhdGVkICovCisKKyAgICBlcnJvciA9IEhhbmRsZVVudXNlZFBhcm1zICh0aGVBRXZlbnQpOworICAgIGlmIChlcnJvcikKKyAgICB7CisjaWZkZWYgVVNFX1NJT1VYCisJcHJpbnRmICgiYWV2dF9vZG9jOiBIYW5kbGVVbnVzZWRQYXJtcyBlcnJvcjogJWRcbiIsIGVycm9yKTsKKyNlbmRpZgorCXJldHVybihlcnJvcik7CisgICAgfQorICAgIHJldHVybihlcnJvcik7Cit9CisKKy8qCisgKgorICovCisKK3Bhc2NhbCBPU0VyciBIYW5kbGVfYWV2dF9vYXBwX0FFIChjb25zdCBBcHBsZUV2ZW50ICp0aGVBRXZlbnQsIEFwcGxlRXZlbnQgKnRoZVJlcGx5LCBsb25nIHJlZkNvbikKK3sKKyAgICBPU0VycgllcnJvciA9IG5vRXJyOworCisjaWZkZWYgVVNFX1NJT1VYCisgICAgcHJpbnRmICgiYWV2dF9vYXBwOlxuIik7CisjZW5kaWYKKworICAgIGVycm9yID0gSGFuZGxlVW51c2VkUGFybXMgKHRoZUFFdmVudCk7CisgICAgaWYgKGVycm9yKQorICAgIHsKKwlyZXR1cm4oZXJyb3IpOworICAgIH0KKworICAgIHJldHVybihlcnJvcik7Cit9CisKKy8qCisgKgorICovCisKK3Bhc2NhbCBPU0VyciBIYW5kbGVfYWV2dF9xdWl0X0FFIChjb25zdCBBcHBsZUV2ZW50ICp0aGVBRXZlbnQsIEFwcGxlRXZlbnQgKnRoZVJlcGx5LCBsb25nIHJlZkNvbikKK3sKKyAgICBPU0VycgllcnJvciA9IG5vRXJyOworCisjaWZkZWYgVVNFX1NJT1VYCisgICAgcHJpbnRmICgiYWV2dF9xdWl0XG4iKTsKKyNlbmRpZgorCisgICAgZXJyb3IgPSBIYW5kbGVVbnVzZWRQYXJtcyAodGhlQUV2ZW50KTsKKyAgICBpZiAoZXJyb3IpCisgICAgeworCXJldHVybihlcnJvcik7CisgICAgfQorCisgICAgLyogTmVlZCB0byBmYWtlIGEgOmNvbmZpcm0gcWEgKi8KKyAgICBkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopImNvbmZpcm0gcWEiKTsKKworICAgIHJldHVybihlcnJvcik7Cit9CisKKy8qCisgKgorICovCisKK3Bhc2NhbCBPU0VyciBIYW5kbGVfYWV2dF9wZG9jX0FFIChjb25zdCBBcHBsZUV2ZW50ICp0aGVBRXZlbnQsIEFwcGxlRXZlbnQgKnRoZVJlcGx5LCBsb25nIHJlZkNvbikKK3sKKyAgICBPU0VycgllcnJvciA9IG5vRXJyOworCisjaWZkZWYgVVNFX1NJT1VYCisgICAgcHJpbnRmICgiYWV2dF9wZG9jOlxuIik7CisjZW5kaWYKKworICAgIGVycm9yID0gSGFuZGxlVW51c2VkUGFybXMgKHRoZUFFdmVudCk7CisgICAgaWYgKGVycm9yKQorICAgIHsKKwlyZXR1cm4oZXJyb3IpOworICAgIH0KKworICAgIHJldHVybihlcnJvcik7Cit9CisKKy8qCisgKiBIYW5kbGluZyBvZiB1bmtub3duIEFwcGxlRXZlbnQKKyAqCisgKiAoSnVzdCBnZXQgcmlkIG9mIGFsbCB0aGUgcGFybXMpCisgKi8KK3Bhc2NhbCBPU0VyciBIYW5kbGVfdW5rbm93bl9BRSAoY29uc3QgQXBwbGVFdmVudCAqdGhlQUV2ZW50LCBBcHBsZUV2ZW50ICp0aGVSZXBseSwgbG9uZyByZWZDb24pCit7CisgICAgT1NFcnIJZXJyb3IgPSBub0VycjsKKworI2lmZGVmIFVTRV9TSU9VWAorICAgIHByaW50ZiAoIlVua25vd24gRXZlbnQ6ICV4XG4iLCB0aGVBRXZlbnQtPmRlc2NyaXB0b3JUeXBlKTsKKyNlbmRpZgorCisgICAgZXJyb3IgPSBIYW5kbGVVbnVzZWRQYXJtcyAodGhlQUV2ZW50KTsKKyAgICBpZiAoZXJyb3IpCisgICAgeworCXJldHVybihlcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuKGVycm9yKTsKK30KKworCisKKyNpZiBUQVJHRVRfQVBJX01BQ19DQVJCT04KKyMgZGVmaW5lIE5ld0FFRXZlbnRIYW5kbGVyUHJvYyh4KSBOZXdBRUV2ZW50SGFuZGxlclVQUCh4KQorI2VuZGlmCisKKy8qCisgKiBJbnN0YWxsIHRoZSB2YXJpb3VzIEFwcGxlRXZlbnQgSGFuZGxlcnMKKyAqLworT1NFcnIgICBJbnN0YWxsQUVIYW5kbGVycyAodm9pZCkKK3sKKyAgICBPU0VyciAgIGVycm9yOworCisgICAgLyogaW5zdGFsbCBvcGVuIGFwcGxpY2F0aW9uIGhhbmRsZXIgKi8KKyAgICBlcnJvciA9IEFFSW5zdGFsbEV2ZW50SGFuZGxlcihrQ29yZUV2ZW50Q2xhc3MsIGtBRU9wZW5BcHBsaWNhdGlvbiwKKwkJICAgIE5ld0FFRXZlbnRIYW5kbGVyUHJvYyhIYW5kbGVfYWV2dF9vYXBwX0FFKSwgMCwgZmFsc2UpOworICAgIGlmIChlcnJvcikKKyAgICB7CisJcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIC8qIGluc3RhbGwgcXVpdCBhcHBsaWNhdGlvbiBoYW5kbGVyICovCisgICAgZXJyb3IgPSBBRUluc3RhbGxFdmVudEhhbmRsZXIoa0NvcmVFdmVudENsYXNzLCBrQUVRdWl0QXBwbGljYXRpb24sCisJCSAgICBOZXdBRUV2ZW50SGFuZGxlclByb2MoSGFuZGxlX2FldnRfcXVpdF9BRSksIDAsIGZhbHNlKTsKKyAgICBpZiAoZXJyb3IpCisgICAgeworCXJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICAvKiBpbnN0YWxsIG9wZW4gZG9jdW1lbnQgaGFuZGxlciAqLworICAgIGVycm9yID0gQUVJbnN0YWxsRXZlbnRIYW5kbGVyKGtDb3JlRXZlbnRDbGFzcywga0FFT3BlbkRvY3VtZW50cywKKwkJICAgIE5ld0FFRXZlbnRIYW5kbGVyUHJvYyhIYW5kbGVPRG9jQUUpLCAwLCBmYWxzZSk7CisgICAgaWYgKGVycm9yKQorICAgIHsKKwlyZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgLyogaW5zdGFsbCBwcmludCBkb2N1bWVudCBoYW5kbGVyICovCisgICAgZXJyb3IgPSBBRUluc3RhbGxFdmVudEhhbmRsZXIoa0NvcmVFdmVudENsYXNzLCBrQUVQcmludERvY3VtZW50cywKKwkJICAgIE5ld0FFRXZlbnRIYW5kbGVyUHJvYyhIYW5kbGVfYWV2dF9wZG9jX0FFKSwgMCwgZmFsc2UpOworCisvKiBJbnN0YWxsIENvcmUgU3VpdGUgKi8KKy8qICBlcnJvciA9IEFFSW5zdGFsbEV2ZW50SGFuZGxlcihrQUVDb3JlU3VpdGUsIGtBRUNsb25lLAorCQkgICAgTmV3QUVFdmVudEhhbmRsZXJQcm9jKEhhbmRsZV91bmtub3duX0FFKSwgbmlsLCBmYWxzZSk7CisKKyAgICBlcnJvciA9IEFFSW5zdGFsbEV2ZW50SGFuZGxlcihrQUVDb3JlU3VpdGUsIGtBRUNsb3NlLAorCQkgICAgTmV3QUVFdmVudEhhbmRsZXJQcm9jKEhhbmRsZV91bmtub3duX0FFKSwgbmlsLCBmYWxzZSk7CisKKyAgICBlcnJvciA9IEFFSW5zdGFsbEV2ZW50SGFuZGxlcihrQUVDb3JlU3VpdGUsIGtBRUNvdW50RWxlbWVudHMsCisJCSAgICBOZXdBRUV2ZW50SGFuZGxlclByb2MoSGFuZGxlX3Vua25vd25fQUUpLCBuaWwsIGZhbHNlKTsKKworICAgIGVycm9yID0gQUVJbnN0YWxsRXZlbnRIYW5kbGVyKGtBRUNvcmVTdWl0ZSwga0FFQ3JlYXRlRWxlbWVudCwKKwkJICAgIE5ld0FFRXZlbnRIYW5kbGVyUHJvYyhIYW5kbGVfdW5rbm93bl9BRSksIG5pbCwgZmFsc2UpOworCisgICAgZXJyb3IgPSBBRUluc3RhbGxFdmVudEhhbmRsZXIoa0FFQ29yZVN1aXRlLCBrQUVEZWxldGUsCisJCSAgICBOZXdBRUV2ZW50SGFuZGxlclByb2MoSGFuZGxlX3Vua25vd25fQUUpLCBuaWwsIGZhbHNlKTsKKworICAgIGVycm9yID0gQUVJbnN0YWxsRXZlbnRIYW5kbGVyKGtBRUNvcmVTdWl0ZSwga0FFRG9PYmplY3RzRXhpc3QsCisJCSAgICBOZXdBRUV2ZW50SGFuZGxlclByb2MoSGFuZGxlX3Vua25vd25fQUUpLCBuaWwsIGZhbHNlKTsKKworICAgIGVycm9yID0gQUVJbnN0YWxsRXZlbnRIYW5kbGVyKGtBRUNvcmVTdWl0ZSwga0FFR2V0RGF0YSwKKwkJICAgIE5ld0FFRXZlbnRIYW5kbGVyUHJvYyhIYW5kbGVfdW5rbm93bl9BRSksIGtBRUdldERhdGEsIGZhbHNlKTsKKworICAgIGVycm9yID0gQUVJbnN0YWxsRXZlbnRIYW5kbGVyKGtBRUNvcmVTdWl0ZSwga0FFR2V0RGF0YVNpemUsCisJCSAgICBOZXdBRUV2ZW50SGFuZGxlclByb2MoSGFuZGxlX3Vua25vd25fQUUpLCBrQUVHZXREYXRhU2l6ZSwgZmFsc2UpOworCisgICAgZXJyb3IgPSBBRUluc3RhbGxFdmVudEhhbmRsZXIoa0FFQ29yZVN1aXRlLCBrQUVHZXRDbGFzc0luZm8sCisJCSAgICBOZXdBRUV2ZW50SGFuZGxlclByb2MoSGFuZGxlX3Vua25vd25fQUUpLCBuaWwsIGZhbHNlKTsKKworICAgIGVycm9yID0gQUVJbnN0YWxsRXZlbnRIYW5kbGVyKGtBRUNvcmVTdWl0ZSwga0FFR2V0RXZlbnRJbmZvLAorCQkgICAgTmV3QUVFdmVudEhhbmRsZXJQcm9jKEhhbmRsZV91bmtub3duX0FFKSwgbmlsLCBmYWxzZSk7CisKKyAgICBlcnJvciA9IEFFSW5zdGFsbEV2ZW50SGFuZGxlcihrQUVDb3JlU3VpdGUsIGtBRU1vdmUsCisJCSAgICBOZXdBRUV2ZW50SGFuZGxlclByb2MoSGFuZGxlX3Vua25vd25fQUUpLCBuaWwsIGZhbHNlKTsKKworICAgIGVycm9yID0gQUVJbnN0YWxsRXZlbnRIYW5kbGVyKGtBRUNvcmVTdWl0ZSwga0FFU2F2ZSwKKwkJICAgIE5ld0FFRXZlbnRIYW5kbGVyUHJvYyhIYW5kbGVfdW5rbm93bl9BRSksIG5pbCwgZmFsc2UpOworCisgICAgZXJyb3IgPSBBRUluc3RhbGxFdmVudEhhbmRsZXIoa0FFQ29yZVN1aXRlLCBrQUVTZXREYXRhLAorCQkgICAgTmV3QUVFdmVudEhhbmRsZXJQcm9jKEhhbmRsZV91bmtub3duX0FFKSwgbmlsLCBmYWxzZSk7CisqLworCisjaWZkZWYgRkVBVF9DV19FRElUT1IKKyAgICAvKgorICAgICAqIEJpbmQgY29kZXdhcnJpb3Igc3VwcG9ydCBoYW5kbGVycworICAgICAqLworICAgIGVycm9yID0gQUVJbnN0YWxsRXZlbnRIYW5kbGVyKCdLQUhMJywgJ0dUVFgnLAorCQkgICAgTmV3QUVFdmVudEhhbmRsZXJQcm9jKEhhbmRsZV9LQUhMX0dUVFhfQUUpLCAwLCBmYWxzZSk7CisgICAgaWYgKGVycm9yKQorICAgIHsKKwlyZXR1cm4gZXJyb3I7CisgICAgfQorICAgIGVycm9yID0gQUVJbnN0YWxsRXZlbnRIYW5kbGVyKCdLQUhMJywgJ1NSQ0gnLAorCQkgICAgTmV3QUVFdmVudEhhbmRsZXJQcm9jKEhhbmRsZV9LQUhMX1NSQ0hfQUUpLCAwLCBmYWxzZSk7CisgICAgaWYgKGVycm9yKQorICAgIHsKKwlyZXR1cm4gZXJyb3I7CisgICAgfQorICAgIGVycm9yID0gQUVJbnN0YWxsRXZlbnRIYW5kbGVyKCdLQUhMJywgJ01PRCAnLAorCQkgICAgTmV3QUVFdmVudEhhbmRsZXJQcm9jKEhhbmRsZV9LQUhMX01PRF9BRSksIDAsIGZhbHNlKTsKKyAgICBpZiAoZXJyb3IpCisgICAgeworCXJldHVybiBlcnJvcjsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBlcnJvcjsKKworfQorI2VuZGlmIC8qIFVTRV9BRVZFTlQgKi8KKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVW5maWxlZCB5ZXQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiAgZ3VpX21hY19nZXRfbWVudV9pdGVtX2luZGV4CisgKgorICogIFJldHVybnMgdGhlIGluZGV4IGluc2lkZSB0aGUgbWVudSB3aGVyCisgKi8KKyAgICBzaG9ydCAvKiBTaG91bGRlIHdlIHJldHVybiBNZW51SXRlbUluZGV4PyAqLworZ3VpX21hY19nZXRfbWVudV9pdGVtX2luZGV4IChwTWVudSkKKyAgICB2aW1tZW51X1QgKnBNZW51OworeworICAgIHNob3J0CWluZGV4OworICAgIHNob3J0CWl0ZW1JbmRleCA9IC0xOworICAgIHZpbW1lbnVfVAkqcEJyb3RoZXI7CisKKyAgICAvKiBPbmx5IG1lbnUgd2l0aG91dCBwYXJlbnQgYXJlIHRoZToKKyAgICAgKiAtbWVudSBpbiB0aGUgbWVudWJhcgorICAgICAqIC1wb3B1cCBtZW51CisgICAgICogLXRvb2xiYXIgKGd1ZXNzKQorICAgICAqCisgICAgICogV2hpY2ggYXJlIG5vdCBpdGVtcyBhbnl3YXkuCisgICAgICovCisgICAgaWYgKHBNZW51LT5wYXJlbnQpCisgICAgeworCS8qIFN0YXJ0IGZyb20gdGhlIE9sZGVzdCBCcm90aGVyICovCisJcEJyb3RoZXIgPSBwTWVudS0+cGFyZW50LT5jaGlsZHJlbjsKKwlpbmRleCA9IDE7CisJd2hpbGUgKChwQnJvdGhlcikgJiYgKGl0ZW1JbmRleCA9PSAtMSkpCisJeworCSAgICBpZiAocEJyb3RoZXIgPT0gcE1lbnUpCisJCWl0ZW1JbmRleCA9IGluZGV4OworCSAgICBpbmRleCsrOworCSAgICBwQnJvdGhlciA9IHBCcm90aGVyLT5uZXh0OworCX0KKyNpZmRlZiBVU0VfSEVMUE1FTlUKKwkvKiBBZGp1c3QgaW5kZXggaW4gaGVscCBtZW51IChmb3IgcHJlZGVmaW5lZCBvbmVzKSAqLworCWlmIChpdGVtSW5kZXggIT0gLTEpCisJICAgIGlmIChwTWVudS0+cGFyZW50LT5zdWJtZW51X2lkID09IGtITUhlbHBNZW51SUQpCisJCWl0ZW1JbmRleCArPSBndWkuTWFjT1NIZWxwSXRlbXM7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIGl0ZW1JbmRleDsKK30KKworICAgIHN0YXRpYyB2aW1tZW51X1QgKgorZ3VpX21hY19nZXRfdmltX21lbnUgKG1lbnVJRCwgaXRlbUluZGV4LCBwTWVudSkKKyAgICBzaG9ydAltZW51SUQ7CisgICAgc2hvcnQJaXRlbUluZGV4OworICAgIHZpbW1lbnVfVAkqcE1lbnU7Cit7CisgICAgc2hvcnQJaW5kZXg7CisgICAgdmltbWVudV9UCSpwQ2hpbGRNZW51OworICAgIHZpbW1lbnVfVAkqcEVsZGVyID0gcE1lbnUtPnBhcmVudDsKKworCisgICAgLyogT25seSBtZW51IHdpdGhvdXQgcGFyZW50IGFyZSB0aGU6CisgICAgICogLW1lbnUgaW4gdGhlIG1lbnViYXIKKyAgICAgKiAtcG9wdXAgbWVudQorICAgICAqIC10b29sYmFyIChndWVzcykKKyAgICAgKgorICAgICAqIFdoaWNoIGFyZSBub3QgaXRlbXMgYW55d2F5LgorICAgICAqLworCisgICAgaWYgKChwRWxkZXIpICYmIChwRWxkZXItPnN1Ym1lbnVfaWQgPT0gbWVudUlEKSkKKyAgICB7CisjaWZkZWYgVVNFX0hFTFBNRU5VCisJaWYgKG1lbnVJRCA9PSBrSE1IZWxwTWVudUlEKQorCSAgICBpdGVtSW5kZXggLT0gZ3VpLk1hY09TSGVscEl0ZW1zOworI2VuZGlmCisKKwlmb3IgKGluZGV4ID0gMTsgKGluZGV4ICE9IGl0ZW1JbmRleCkgJiYgKHBNZW51ICE9IE5VTEwpOyBpbmRleCsrKQorCSAgICBwTWVudSA9IHBNZW51LT5uZXh0OworICAgIH0KKyAgICBlbHNlCisgICAgeworCWZvciAoOyBwTWVudSAhPSBOVUxMOyBwTWVudSA9IHBNZW51LT5uZXh0KQorCXsKKwkgICAgaWYgKHBNZW51LT5jaGlsZHJlbiAhPSBOVUxMKQorCSAgICB7CisJCXBDaGlsZE1lbnUgPSBndWlfbWFjX2dldF92aW1fbWVudQorCQkJICAgKG1lbnVJRCwgaXRlbUluZGV4LCBwTWVudS0+Y2hpbGRyZW4pOworCQlpZiAocENoaWxkTWVudSkKKwkJeworCQkgICAgcE1lbnUgPSBwQ2hpbGRNZW51OworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHBNZW51OworfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNYWNPUyBGZWVkYmFjayBwcm9jZWR1cmVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworICAgIHBhc2NhbAorICAgIHZvaWQKK2d1aV9tYWNfZHJhZ190aHVtYiAoQ29udHJvbEhhbmRsZSB0aGVDb250cm9sLCBzaG9ydCBwYXJ0Q29kZSkKK3sKKyAgICBzY3JvbGxiYXJfVAkJKnNiOworICAgIGludAkJCXZhbHVlLCBkcmFnZ2luZzsKKyAgICBDb250cm9sSGFuZGxlCXRoZUNvbnRyb2xUb1VzZTsKKyAgICBpbnQJCQlkb250X3Njcm9sbF9zYXZlID0gZG9udF9zY3JvbGw7CisKKyAgICB0aGVDb250cm9sVG9Vc2UgPSBkcmFnZ2VkX3NiOworCisgICAgc2IgPSBndWlfZmluZF9zY3JvbGxiYXIoKGxvbmcpIEdldENvbnRyb2xSZWZlcmVuY2UgKHRoZUNvbnRyb2xUb1VzZSkpOworCisgICAgaWYgKHNiID09IE5VTEwpCisJcmV0dXJuOworCisgICAgLyogTmVlZCB0byBmaW5kIHZhbHVlIGJ5IGRpZmYgYmV0d2VlbiBPbGQgUG9zcyBOZXcgUG9zICovCisgICAgdmFsdWUgPSBHZXRDb250cm9sMzJCaXRWYWx1ZSAodGhlQ29udHJvbFRvVXNlKTsKKyAgICBkcmFnZ2luZyA9IChwYXJ0Q29kZSAhPSAwKTsKKworICAgIC8qIFdoZW4gImFsbG93X3Njcm9sbGJhciIgaXMgRkFMU0Ugc3RpbGwgbmVlZCB0byByZW1lbWJlciB0aGUgbmV3CisgICAgICogcG9zaXRpb24sIGJ1dCBkb24ndCBhY3R1YWxseSBzY3JvbGwgYnkgc2V0dGluZyAiZG9udF9zY3JvbGwiLiAqLworICAgIGRvbnRfc2Nyb2xsID0gIWFsbG93X3Njcm9sbGJhcjsKKyAgICBndWlfZHJhZ19zY3JvbGxiYXIoc2IsIHZhbHVlLCBkcmFnZ2luZyk7CisgICAgZG9udF9zY3JvbGwgPSBkb250X3Njcm9sbF9zYXZlOworfQorCisgICAgcGFzY2FsCisgICAgdm9pZAorZ3VpX21hY19zY3JvbGxfYWN0aW9uIChDb250cm9sSGFuZGxlIHRoZUNvbnRyb2wsIHNob3J0IHBhcnRDb2RlKQoreworICAgIC8qIFRPRE86IGhhdmUgbGl2ZSBzdXBwb3J0ICovCisgICAgc2Nyb2xsYmFyX1QgKnNiLCAqc2JfaW5mbzsKKyAgICBsb25nCWRhdGE7CisgICAgbG9uZwl2YWx1ZTsKKyAgICBpbnQJCXBhZ2U7CisgICAgaW50CQlkcmFnZ2luZyA9IEZBTFNFOworICAgIGludAkJZG9udF9zY3JvbGxfc2F2ZSA9IGRvbnRfc2Nyb2xsOworCisgICAgc2IgPSBndWlfZmluZF9zY3JvbGxiYXIoKGxvbmcpIEdldENvbnRyb2xSZWZlcmVuY2UgKHRoZUNvbnRyb2wpKTsKKworICAgIGlmIChzYiA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGlmIChzYi0+d3AgIT0gTlVMTCkJCS8qIExlZnQgb3IgcmlnaHQgc2Nyb2xsYmFyICovCisgICAgeworCS8qCisJICogQ2FyZWZ1bDogbmVlZCB0byBnZXQgc2Nyb2xsYmFyIGluZm8gb3V0IG9mIGZpcnN0IChsZWZ0KSBzY3JvbGxiYXIKKwkgKiBmb3Igd2luZG93LCBidXQga2VlcCByZWFsIHNjcm9sbGJhciB0b28gYmVjYXVzZSB3ZSBtdXN0IHBhc3MgaXQgdG8KKwkgKiBndWlfZHJhZ19zY3JvbGxiYXIoKS4KKwkgKi8KKwlzYl9pbmZvID0gJnNiLT53cC0+d19zY3JvbGxiYXJzWzBdOworCisJaWYgKHNiX2luZm8tPnNpemUgPiA1KQorCSAgICBwYWdlID0gc2JfaW5mby0+c2l6ZSAtIDI7CS8qIHVzZSB0d28gbGluZXMgb2YgY29udGV4dCAqLworCWVsc2UKKwkgICAgcGFnZSA9IHNiX2luZm8tPnNpemU7CisgICAgfQorICAgIGVsc2UJCQkvKiBCb3R0b20gc2Nyb2xsYmFyICovCisgICAgeworCXNiX2luZm8gPSBzYjsKKwlwYWdlID0gV19XSURUSChjdXJ3aW4pIC0gNTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHBhcnRDb2RlKQorICAgIHsKKwljYXNlICBrQ29udHJvbFVwQnV0dG9uUGFydDogICBkYXRhID0gLTE7ICAgIGJyZWFrOworCWNhc2UgIGtDb250cm9sRG93bkJ1dHRvblBhcnQ6IGRhdGEgPSAxOyAgICAgYnJlYWs7CisJY2FzZSAga0NvbnRyb2xQYWdlRG93blBhcnQ6ICAgZGF0YSA9IHBhZ2U7ICBicmVhazsKKwljYXNlICBrQ29udHJvbFBhZ2VVcFBhcnQ6ICAgICBkYXRhID0gLXBhZ2U7IGJyZWFrOworCQkgICAgZGVmYXVsdDogZGF0YSA9IDA7IGJyZWFrOworICAgIH0KKworICAgIHZhbHVlID0gc2JfaW5mby0+dmFsdWUgKyBkYXRhOworLyogIGlmICh2YWx1ZSA+IHNiX2luZm8tPm1heCkKKwl2YWx1ZSA9IHNiX2luZm8tPm1heDsKKyAgICBlbHNlIGlmICh2YWx1ZSA8IDApCisJdmFsdWUgPSAwOyovCisKKyAgICAvKiBXaGVuICJhbGxvd19zY3JvbGxiYXIiIGlzIEZBTFNFIHN0aWxsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIG5ldworICAgICAqIHBvc2l0aW9uLCBidXQgZG9uJ3QgYWN0dWFsbHkgc2Nyb2xsIGJ5IHNldHRpbmcgImRvbnRfc2Nyb2xsIi4gKi8KKyAgICBkb250X3Njcm9sbCA9ICFhbGxvd19zY3JvbGxiYXI7CisgICAgZ3VpX2RyYWdfc2Nyb2xsYmFyKHNiLCB2YWx1ZSwgZHJhZ2dpbmcpOworICAgIGRvbnRfc2Nyb2xsID0gZG9udF9zY3JvbGxfc2F2ZTsKKworICAgIG91dF9mbHVzaCgpOworICAgIGd1aV9tY2hfc2V0X3Njcm9sbGJhcl90aHVtYihzYiwgdmFsdWUsIHNiX2luZm8tPnNpemUsIHNiX2luZm8tPm1heCk7CisKKy8qICBpZiAoc2JfaW5mby0+d3AgIT0gTlVMTCkKKyAgICB7CisJd2luX1QJKndwOworCWludAlzYl9udW07CisKKwlzYl9udW0gPSAwOworCWZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gc2ItPndwICYmIHdwICE9IE5VTEw7IHdwID0gV19ORVhUKHdwKSkKKwlzYl9udW0rKzsKKworCWlmICh3cCAhPSBOVUxMKQorCXsKKwkgICAgY3VycmVudF9zY3JvbGxiYXIgPSBzYl9udW07CisJICAgIHNjcm9sbGJhcl92YWx1ZSA9IHZhbHVlOworCSAgICBndWlfZG9fc2Nyb2xsKCk7CisJICAgIGd1aV9tY2hfc2V0X3Njcm9sbGJhcl90aHVtYihzYiwgdmFsdWUsIHNiX2luZm8tPnNpemUsIHNiX2luZm8tPm1heCk7CisJfQorICAgIH0qLworfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNYWNPUyBDbGljayBIYW5kbGluZyBwcm9jZWR1cmVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisKKy8qCisgKiBIYW5kbGUgYSBjbGljayBpbnNpZGUgdGhlIHdpbmRvdywgaXQgbWF5IGhhcHBlbnMgaW4gdGhlCisgKiBzY3JvbGxiYXIgb3IgdGhlIGNvbnRlbnRzLgorICoKKyAqIFRPRE86IEFkZCBzdXBwb3J0IGZvciBwb3RlbnRpYWwgVE9PTEJBUgorICovCisgICAgdm9pZAorZ3VpX21hY19kb0luQ29udGVudENsaWNrICh0aGVFdmVudCwgd2hpY2hXaW5kb3cpCisgICAgRXZlbnRSZWNvcmQgKnRoZUV2ZW50OworICAgIFdpbmRvd1B0cgkgd2hpY2hXaW5kb3c7Cit7CisgICAgUG9pbnQJCXRoZVBvaW50OworICAgIGludF91CQl2aW1Nb2RpZmllcnM7CisgICAgc2hvcnQJCXRoZVBvcnRpb247CisgICAgQ29udHJvbEhhbmRsZQl0aGVDb250cm9sOworICAgIGludAkJCXZpbU1vdXNlQnV0dG9uOworICAgIHNob3J0CQlkYmxDbGljazsKKworICAgIHRoZVBvaW50ID0gdGhlRXZlbnQtPndoZXJlOworICAgIEdsb2JhbFRvTG9jYWwgKCZ0aGVQb2ludCk7CisgICAgU2VsZWN0V2luZG93ICh3aGljaFdpbmRvdyk7CisKKyAgICB0aGVQb3J0aW9uID0gRmluZENvbnRyb2wgKHRoZVBvaW50LCB3aGljaFdpbmRvdywgJnRoZUNvbnRyb2wpOworCisgICAgaWYgKHRoZUNvbnRyb2wgIT0gTlVMKQorICAgIHsKKwkvKiBXZSBoaXQgYSBzY29sbGJhciAqLworCisJaWYgKHRoZVBvcnRpb24gIT0ga0NvbnRyb2xJbmRpY2F0b3JQYXJ0KQorCXsKKwkgICAgZHJhZ2dlZF9zYiA9IHRoZUNvbnRyb2w7CisJICAgIFRyYWNrQ29udHJvbCh0aGVDb250cm9sLCB0aGVQb2ludCwgZ1Njcm9sbEFjdGlvbik7CisJICAgIGRyYWdnZWRfc2IgPSBOVUxMOworCX0KKwllbHNlCisJeworCSAgICBkcmFnZ2VkX3NiID0gdGhlQ29udHJvbDsKKyNpZiAxCisJICAgIFRyYWNrQ29udHJvbCh0aGVDb250cm9sLCB0aGVQb2ludCwgZ1Njcm9sbERyYWcpOworI2Vsc2UKKwkgICAgVHJhY2tDb250cm9sKHRoZUNvbnRyb2wsIHRoZVBvaW50LCBOVUxMKTsKKyNlbmRpZgorCSAgICAvKiBwYXNzIDAgYXMgdGhlIHBhcnQgdG8gdGVsbCBndWlfbWFjX2RyYWdfdGh1bWIsIHRoYXQgdGhlIG1vdXNlCisJICAgICAqIGJ1dHRvbiBoYXMgYmVlbiByZWxlYXNlZCAqLworCSAgICBndWlfbWFjX2RyYWdfdGh1bWIgKHRoZUNvbnRyb2wsIDApOyAvKiBTaG91bGQgaXQgYmUgdGhlUG9ydGlvbiA/IChEYW55KSAqLworCSAgICBkcmFnZ2VkX3NiID0gTlVMTDsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogV2UgYXJlIGluc2lkZSB0aGUgY29udGVudHMgKi8KKworCS8qIENvbnZlcnQgdGhlIENUUkwsIE9QVElPTiwgU0hJRlQgYW5kIENNRCBrZXkgKi8KKwl2aW1Nb2RpZmllcnMgPSBFdmVudE1vZGlmaWVyczJWaW1Nb3VzZU1vZGlmaWVycyh0aGVFdmVudC0+bW9kaWZpZXJzKTsKKworCS8qIERlZmF1bHRzIHRvIE1PVVNFX0xFRlQgYXMgdGhlcmUncyBvbmx5IG9uZSBtb3VzZSBidXR0b24gKi8KKwl2aW1Nb3VzZUJ1dHRvbiA9IE1PVVNFX0xFRlQ7CisKKyNpZmRlZiBVU0VfQ1RSTENMSUNLTUVOVQorCS8qIENvbnZlcnQgdGhlIENUUkxfTU9VU0VfTEVGVCB0byBNT1VTRV9SSUdIVCAqLworCWNsaWNrSXNQb3B1cCA9IEZBTFNFOworCisJaWYgKChndWkuTWFjT1NIYXZlQ250eE1lbnUpICYmIChtb3VzZV9tb2RlbF9wb3B1cCgpKSkKKwkgICAgaWYgKElzU2hvd0NvbnRleHR1YWxNZW51Q2xpY2sodGhlRXZlbnQpKQorCSAgICB7CisJCXZpbU1vdXNlQnV0dG9uID0gTU9VU0VfUklHSFQ7CisJCXZpbU1vZGlmaWVycyAmPSB+TU9VU0VfQ1RSTDsKKwkJY2xpY2tJc1BvcHVwID0gVFJVRTsKKwkgICAgfQorI2VuZGlmCisKKwkvKiBJcyBpdCBhIGRvdWJsZSBjbGljayA/ICovCisJZGJsQ2xpY2sgPSAoKHRoZUV2ZW50LT53aGVuIC0gbGFzdE1vdXNlVGljaykgPCBHZXREYmxUaW1lKCkpOworCisJLyogU2VuZCB0aGUgbW91c2UgY2xpY2ogdG8gVmltICovCisJZ3VpX3NlbmRfbW91c2VfZXZlbnQodmltTW91c2VCdXR0b24sIHRoZVBvaW50LmgsCisJCQkJCSAgdGhlUG9pbnQudiwgZGJsQ2xpY2ssIHZpbU1vZGlmaWVycyk7CisKKwkvKiBDcmVhdGUgdGhlIHJlY3RhbmdsZSBhcm91bmQgdGhlIGN1cnNvciB0byBkZXRlY3QKKwkgKiB0aGUgbW91c2UgZHJhZ2dpbmcKKwkgKi8KKyNpZmRlZiBVU0VfQ1RSTENMSUNLTUVOVQorI2lmIDAKKwkvKiBUT0RPOiBEbyB3ZSBuZWVkIHRvIHRoaXMgZXZlbiBmb3IgdGhlIGNvbnRleHR1YWwgbWVudT8KKwkgKiBJdCBtYXkgYmUgcmVxdWlyZSBmb3IgcG9wdXBfc2V0cG9zLCBidXQgZm9yIHBvcHVwPworCSAqLworCWlmICh2aW1Nb3VzZUJ1dHRvbiA9PSBNT1VTRV9MRUZUKQorI2VuZGlmCisjZW5kaWYKKwl7CisJICAgIFNldFJlY3QgKCZkcmFnUmVjdCwgRklMTF9YKFhfMl9DT0wodGhlUG9pbnQuaCkpLAorCQkJCUZJTExfWShZXzJfUk9XKHRoZVBvaW50LnYpKSwKKwkJCQlGSUxMX1goWF8yX0NPTCh0aGVQb2ludC5oKSsxKSwKKwkJCQlGSUxMX1koWV8yX1JPVyh0aGVQb2ludC52KSsxKSk7CisKKwkgICAgZHJhZ1JlY3RFbmJsID0gVFJVRTsKKwkgICAgZHJhZ1JlY3RDb250cm9sID0ga0NyZWF0ZVJlY3Q7CisJfQorICAgIH0KK30KKworLyoKKyAqIEhhbmRsZSB0aGUgY2xpY2sgaW4gdGhlIHRpdGxlYmFyICh0byBtb3ZlIHRoZSB3aW5kb3cpCisgKi8KKyAgICB2b2lkCitndWlfbWFjX2RvSW5EcmFnQ2xpY2sgKHdoZXJlLCB3aGljaFdpbmRvdykKKyAgICBQb2ludAl3aGVyZTsKKyAgICBXaW5kb3dQdHIJd2hpY2hXaW5kb3c7Cit7CisgICAgUmVjdAltb3ZpbmdMaW1pdHM7CisgICAgUmVjdAkqbW92aW5nTGltaXRzUHRyID0gJm1vdmluZ0xpbWl0czsKKworICAgIC8qIFRPRE86IG1heSB0cnkgdG8gcHJldmVudCBtb3ZlIG91dHNpZGUgc2NyZWVuPyAqLworI2lmZGVmIFVTRV9DQVJCT05JWkVECisgICAgbW92aW5nTGltaXRzUHRyID0gR2V0UmVnaW9uQm91bmRzICggR2V0R3JheVJnbigpLCAmbW92aW5nTGltaXRzICk7CisjZWxzZQorICAgIG1vdmluZ0xpbWl0c1B0ciA9ICYoKkdldEdyYXlSZ24oKSktPnJnbkJCb3g7CisjZW5kaWYKKyAgICBEcmFnV2luZG93ICh3aGljaFdpbmRvdywgd2hlcmUsIG1vdmluZ0xpbWl0c1B0cik7Cit9CisKKy8qCisgKiBIYW5kbGUgdGhlIGNsaWNrIGluIHRoZSBncm93IGJveAorICovCisgICAgdm9pZAorZ3VpX21hY19kb0luR3Jvd0NsaWNrKHdoZXJlLCB3aGljaFdpbmRvdykKKyAgICBQb2ludAl3aGVyZTsKKyAgICBXaW5kb3dQdHIJd2hpY2hXaW5kb3c7Cit7CisKKyAgICBsb25nCSAgICBuZXdTaXplOworICAgIHVuc2lnbmVkIHNob3J0ICBuZXdXaWR0aDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgbmV3SGVpZ2h0OworICAgIFJlY3QJICAgIHJlc2l6ZUxpbWl0czsKKyAgICBSZWN0CSAgICAqcmVzaXplTGltaXRzUHRyID0gJnJlc2l6ZUxpbWl0czsKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorICAgIFJlY3QJICAgIE5ld0NvbnRlbnRSZWN0OworCisgICAgcmVzaXplTGltaXRzUHRyID0gR2V0UmVnaW9uQm91bmRzICggR2V0R3JheVJnbigpLCAmcmVzaXplTGltaXRzICk7CisjZWxzZQorICAgIHJlc2l6ZUxpbWl0cyA9IHFkLnNjcmVlbkJpdHMuYm91bmRzOworI2VuZGlmCisKKyAgICAvKiBTZXQgdGhlIG1pbmltdW4gc2l6ZSAqLworICAgIC8qIFRPRE86IFNob3VsZCB0aGlzIGNvbWUgZnJvbSBWaW0/ICovCisgICAgcmVzaXplTGltaXRzLnRvcCA9IDEwMDsKKyAgICByZXNpemVMaW1pdHMubGVmdCA9IDEwMDsKKworI2lmZGVmIFVTRV9DQVJCT05JWkVECisgICAgbmV3U2l6ZSA9IFJlc2l6ZVdpbmRvdyh3aGljaFdpbmRvdywgd2hlcmUsICZyZXNpemVMaW1pdHMsICZOZXdDb250ZW50UmVjdCk7CisgICAgbmV3V2lkdGggID0gTmV3Q29udGVudFJlY3QucmlnaHQgLSBOZXdDb250ZW50UmVjdC5sZWZ0OworICAgIG5ld0hlaWdodCA9IE5ld0NvbnRlbnRSZWN0LmJvdHRvbSAtIE5ld0NvbnRlbnRSZWN0LnRvcDsKKyAgICBndWlfcmVzaXplX3NoZWxsKG5ld1dpZHRoLCBuZXdIZWlnaHQpOworICAgIGd1aV9tY2hfc2V0X2JnX2NvbG9yKGd1aS5iYWNrX3BpeGVsKTsKKyAgICBndWlfc2V0X3NoZWxsc2l6ZShUUlVFLCBGQUxTRSk7CisjZWxzZQorICAgIG5ld1NpemUgPSBHcm93V2luZG93KHdoaWNoV2luZG93LCB3aGVyZSwgJnJlc2l6ZUxpbWl0cyk7CisgICAgaWYgKG5ld1NpemUgIT0gMCkKKyAgICB7CisJbmV3V2lkdGggID0gbmV3U2l6ZSAmIDB4MDAwMEZGRkY7CisJbmV3SGVpZ2h0ID0gKG5ld1NpemUgPj4gMTYpICYgMHgwMDAwRkZGRjsKKworCWd1aV9tY2hfc2V0X2JnX2NvbG9yKGd1aS5iYWNrX3BpeGVsKTsKKworCWd1aV9yZXNpemVfc2hlbGwobmV3V2lkdGgsIG5ld0hlaWdodCk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gY2FsbCBndWlfc2V0X3NoZWxsc2l6ZSBhcyB0aGUgc2l6ZQorCSAqIHVzZWQgYnkgVmltIG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIHNpemUgc2VsZWN0ZWQKKwkgKiBieSB0aGUgdXNlci4gVGhpcyBjYXVzZSBzb21lIG92ZXJoZWFkCisJICogVE9ETzogYWRkIGEgY2hlY2sgaW5zaWRlIGd1aV9yZXNpemVfc2hlbGw/CisJICovCisJZ3VpX3NldF9zaGVsbHNpemUoVFJVRSwgRkFMU0UpOworCisJLyoKKwkgKiBPcmlnaW4gb2YgdGhlIGNvZGUgYmVsb3cgaXMgdW5rbm93bi4KKwkgKiBGdW5jdGlvbmFsaXR5IGlzIHVua25vd24uCisJICogVGltZSBvZiBjb21tZW50ZWQgb3V0IGlzIHVua25vd24uCisJICovCisvKglTZXRQb3J0KHdwKTsKKwlJbnZhbFJlY3QoJndwLT5wb3J0UmVjdCk7CisJaWYgKGlzVXNlcldpbmRvdyh3cCkpIHsKKwkgICAgRHJhd2luZ1dpbmRvd1BlZWsJYVdpbmRvdyA9IChEcmF3aW5nV2luZG93UGVlayl3cDsKKworCSAgICBpZiAoYVdpbmRvdy0+dG9vbFJvdXRpbmVzLnRvb2xXaW5kb3dSZXNpemVkUHJvYykKKwkJQ2FsbFRvb2xXaW5kb3dSZXNpemVkUHJvYyhhV2luZG93LT50b29sUm91dGluZXMudG9vbFdpbmRvd1Jlc2l6ZWRQcm9jLCB3cCk7CisJfSovCisgICAgfTsKKyNlbmRpZgorCit9CisKKy8qCisgKiBIYW5kbGUgdGhlIGNsaWNrIGluIHRoZSB6b29tIGJveAorICovCisjaWZkZWYgVVNFX0NBUkJPTklaRUQKKyAgICBzdGF0aWMgdm9pZAorZ3VpX21hY19kb0luWm9vbUNsaWNrKHRoZUV2ZW50LCB3aGljaFdpbmRvdykKKyAgICBFdmVudFJlY29yZAkqdGhlRXZlbnQ7CisgICAgV2luZG93UHRyCXdoaWNoV2luZG93OworeworICAgIFJlY3QJcjsKKyAgICBQb2ludAlwOworICAgIHNob3J0CXRoZVBhcnQ7CisKKyAgICAvKiBpZGVhbCB3aWR0aCBpcyBjdXJyZW50ICovCisgICAgcC5oID0gQ29sdW1ucyAqIGd1aS5jaGFyX3dpZHRoICsgMiAqIGd1aS5ib3JkZXJfb2Zmc2V0OworICAgIGlmIChndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdKQorCXAuaCArPSBndWkuc2Nyb2xsYmFyX3dpZHRoOworICAgIGlmIChndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX1JJR0hUXSkKKwlwLmggKz0gZ3VpLnNjcm9sbGJhcl93aWR0aDsKKyAgICAvKiBpZGVhbCBoZWlnaHQgaXMgYXMgaGVpZ2ggYXMgd2UgY2FuIGdldCAqLworICAgIHAudiA9IDE1ICogMTAyNDsKKworICAgIHRoZVBhcnQgPSBJc1dpbmRvd0luU3RhbmRhcmRTdGF0ZSh3aGljaFdpbmRvdywgJnAsICZyKQorCQkJCQkJICAgICAgID8gaW5ab29tSW4gOiBpblpvb21PdXQ7CisKKyAgICBpZiAoIVRyYWNrQm94KHdoaWNoV2luZG93LCB0aGVFdmVudC0+d2hlcmUsIHRoZVBhcnQpKQorCXJldHVybjsKKworICAgIC8qIHVzZSByZXR1cm5lZCB3aWR0aCAqLworICAgIHAuaCA9IHIucmlnaHQgLSByLmxlZnQ7CisgICAgLyogYWRqdXN0IHJldHVybmVkIGhlaWdodCAqLworICAgIHAudiA9IHIuYm90dG9tIC0gci50b3AgLSAyICogZ3VpLmJvcmRlcl9vZmZzZXQ7CisgICAgaWYgKGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfQk9UVE9NXSkKKwlwLnYgLT0gZ3VpLnNjcm9sbGJhcl9oZWlnaHQ7CisgICAgcC52IC09IHAudiAlIGd1aS5jaGFyX2hlaWdodDsKKyAgICBwLnYgKz0gMiAqIGd1aS5ib3JkZXJfd2lkdGg7CisgICAgaWYgKGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfQk9UVE9NXSk7CisJcC52ICs9IGd1aS5zY3JvbGxiYXJfaGVpZ2h0OworCisgICAgWm9vbVdpbmRvd0lkZWFsKHdoaWNoV2luZG93LCB0aGVQYXJ0LCAmcCk7CisKKyAgICBHZXRXaW5kb3dCb3VuZHMod2hpY2hXaW5kb3csIGtXaW5kb3dDb250ZW50UmduLCAmcik7CisgICAgZ3VpX3Jlc2l6ZV9zaGVsbChyLnJpZ2h0IC0gci5sZWZ0LCByLmJvdHRvbSAtIHIudG9wKTsKKyAgICBndWlfbWNoX3NldF9iZ19jb2xvcihndWkuYmFja19waXhlbCk7CisgICAgZ3VpX3NldF9zaGVsbHNpemUoVFJVRSwgRkFMU0UpOworfQorI2VuZGlmIC8qIGRlZmluZWQoVVNFX0NBUkJPTklaRUQpICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE1hY09TIEV2ZW50IEhhbmRsaW5nIHByb2NlZHVyZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEhhbmRsZSB0aGUgVXBkYXRlIEV2ZW50CisgKi8KKworICAgIHZvaWQKK2d1aV9tYWNfZG9VcGRhdGVFdmVudChldmVudCkKKyAgICBFdmVudFJlY29yZAkqZXZlbnQ7Cit7CisgICAgV2luZG93UHRyCXdoaWNoV2luZG93OworICAgIEdyYWZQdHIJc2F2ZVBvcnQ7CisgICAgUmduSGFuZGxlCXVwZGF0ZVJnbjsKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorICAgIFJlY3QJdXBkYXRlUmVjdDsKKyNlbmRpZgorICAgIFJlY3QJKnVwZGF0ZVJlY3RQdHI7CisgICAgUmVjdAlyYzsKKyAgICBSZWN0CWdyb3dSZWN0OworICAgIFJnbkhhbmRsZQlzYXZlUmduOworCisKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorICAgIHVwZGF0ZVJnbiA9IE5ld1JnbigpOworICAgIGlmICh1cGRhdGVSZ24gPT0gTlVMTCkKKwlyZXR1cm47CisjZW5kaWYKKworICAgIC8qIFRoaXMgY291bGQgYmUgZG9uZSBieSB0aGUgY2FsbGVyIGFzIHdlCisgICAgICogZG9uJ3QgcmVxdWlyZSBhbnl0aGluZyBlbHNlIG91dCBvZiB0aGUgZXZlbnQKKyAgICAgKi8KKyAgICB3aGljaFdpbmRvdyA9IChXaW5kb3dQdHIpIGV2ZW50LT5tZXNzYWdlOworCisgICAgLyogU2F2ZSBDdXJyZW50IFBvcnQgKi8KKyAgICBHZXRQb3J0ICgmc2F2ZVBvcnQpOworCisgICAgLyogU2VsZWN0IHRoZSBXaW5kb3cncyBQb3J0ICovCisjaWZkZWYgVVNFX0NBUkJPTklaRUQKKyAgICBTZXRQb3J0V2luZG93UG9ydCAod2hpY2hXaW5kb3cpOworI2Vsc2UKKyAgICBTZXRQb3J0ICh3aGljaFdpbmRvdyk7CisjZW5kaWYKKworICAgIC8qIExldCdzIHVwZGF0ZSB0aGUgd2luZG93ICovCisgICAgICBCZWdpblVwZGF0ZSAod2hpY2hXaW5kb3cpOworCS8qIFJlZHJhdyB0aGUgYmlnZ2VzdCByZWN0YW5nbGUgY292ZXJpbmcgdGhlIGFyZWEKKwkgKiB0byBiZSB1cGRhdGVkLgorCSAqLworI2lmZGVmIFVTRV9DQVJCT05JWkVECisJR2V0UG9ydFZpc2libGVSZWdpb24oR2V0V2luZG93UG9ydCh3aGljaFdpbmRvdyksIHVwZGF0ZVJnbik7CisjIGlmIDAKKwkvKiBXb3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlIHRvIHVzZSB0aGUgZm9sbHdpbmcgYnV0IGRvZXNuJ3QKKwkgKiBzZWVtIHRvIHdvcmsgdW5kZXIgTWFjT1MgWCAoRGFueSkKKwkgKi8KKwlHZXRXaW5kb3dSZWdpb24od2hpY2hXaW5kb3csIGtXaW5kb3dVcGRhdGVSZ24sIHVwZGF0ZVJnbik7CisjIGVuZGlmCisjZWxzZQorCXVwZGF0ZVJnbiA9IHdoaWNoV2luZG93LT52aXNSZ247CisjZW5kaWYKKwkvKiBVc2UgdGhlIEhMb2NrIHVzZWxlc3MgaW4gQ2FyYm9uPyBJcyBpdCBoYXJtZnVsPyovCisJSExvY2sgKChIYW5kbGUpIHVwZGF0ZVJnbik7CisjaWZkZWYgVVNFX0NBUkJPTklaRUQKKwkgIHVwZGF0ZVJlY3RQdHIgPSBHZXRSZWdpb25Cb3VuZHMgKCB1cGRhdGVSZ24sICZ1cGRhdGVSZWN0ICk7CisjIGlmIDAKKwkgIC8qIENvZGUgZnJvbSBvcmlnaW5hbCBDYXJib24gUG9ydCAodXNpbmcgR2V0V2luZG93UmVnaW9uLgorCSAgICogSSBiZWxpZXZlIHRoZSBVcGRhdGVSZ24gaXMgYWxyZWFkeSBpbiBsb2NhbCAoRGFueSkKKwkgICAqLworCSAgR2xvYmFsVG9Mb2NhbCgmdG9wTGVmdCh1cGRhdGVSZWN0KSk7IC8qIHByZUNhcmJvbj8gKi8KKwkgIEdsb2JhbFRvTG9jYWwoJmJvdFJpZ2h0KHVwZGF0ZVJlY3QpKTsKKyMgZW5kaWYKKyNlbHNlCisJICB1cGRhdGVSZWN0UHRyID0gJigqdXBkYXRlUmduKS0+cmduQkJveDsKKyNlbmRpZgorCSAgLyogVXBkYXRlIHRoZSBjb250ZW50IChpLmUuIHRoZSB0ZXh0KSAqLworCSAgZ3VpX3JlZHJhdyh1cGRhdGVSZWN0UHRyLT5sZWZ0LCB1cGRhdGVSZWN0UHRyLT50b3AsCisJCSAgICAgIHVwZGF0ZVJlY3RQdHItPnJpZ2h0IC0gdXBkYXRlUmVjdFB0ci0+bGVmdCwKKwkJICAgICAgdXBkYXRlUmVjdFB0ci0+Ym90dG9tICAgLSB1cGRhdGVSZWN0UHRyLT50b3ApOworCSAgLyogQ2xlYXIgdGhlIGJvcmRlciBhcmVhcyBpZiBuZWVkZWQgKi8KKwkgIGd1aV9tY2hfc2V0X2JnX2NvbG9yKGd1aS5iYWNrX3BpeGVsKTsKKwkgIGlmICh1cGRhdGVSZWN0UHRyLT5sZWZ0IDwgRklMTF9YKDApKQorCSAgeworCSAgICBTZXRSZWN0ICgmcmMsIDAsIDAsIEZJTExfWCgwKSwgRklMTF9ZKFJvd3MpKTsKKwkgICAgRXJhc2VSZWN0ICgmcmMpOworCSAgfQorCSAgaWYgKHVwZGF0ZVJlY3RQdHItPnRvcCA8IEZJTExfWSgwKSkKKwkgIHsKKwkgICAgU2V0UmVjdCAoJnJjLCAwLCAwLCBGSUxMX1goQ29sdW1ucyksIEZJTExfWSgwKSk7CisJICAgIEVyYXNlUmVjdCAoJnJjKTsKKwkgIH0KKwkgIGlmICh1cGRhdGVSZWN0UHRyLT5yaWdodCA+IEZJTExfWChDb2x1bW5zKSkKKwkgIHsKKwkgICAgU2V0UmVjdCAoJnJjLCBGSUxMX1goQ29sdW1ucyksIDAsCisJCQkgICBGSUxMX1goQ29sdW1ucykgKyBndWkuYm9yZGVyX29mZnNldCwgRklMTF9ZKFJvd3MpKTsKKwkgICAgRXJhc2VSZWN0ICgmcmMpOworCSAgfQorCSAgaWYgKHVwZGF0ZVJlY3RQdHItPmJvdHRvbSA+IEZJTExfWShSb3dzKSkKKwkgIHsKKwkgICAgU2V0UmVjdCAoJnJjLCAwLCBGSUxMX1koUm93cyksIEZJTExfWChDb2x1bW5zKSArIGd1aS5ib3JkZXJfb2Zmc2V0LAorCQkJCQkgICAgRklMTF9ZKFJvd3MpICsgZ3VpLmJvcmRlcl9vZmZzZXQpOworCSAgICBFcmFzZVJlY3QgKCZyYyk7CisJICB9CisJSFVubG9jayAoKEhhbmRsZSkgdXBkYXRlUmduKTsKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorCURpc3Bvc2VSZ24gKHVwZGF0ZVJnbik7CisjZW5kaWYKKworCS8qIFVwZGF0ZSBzY3JvbGxiYXJzICovCisJRHJhd0NvbnRyb2xzICh3aGljaFdpbmRvdyk7CisKKwkvKiBVcGRhdGUgdGhlIEdyb3dCb3ggKi8KKwkvKiBUYWtlbiBmcm9tIEZBUSAzMy0yNyAqLworCXNhdmVSZ24gPSBOZXdSZ24oKTsKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorCUdldFdpbmRvd0JvdW5kcyh3aGljaFdpbmRvdywga1dpbmRvd0dyb3dSZ24sICZncm93UmVjdCk7CisjZWxzZQorCWdyb3dSZWN0ID0gd2hpY2hXaW5kb3ctPnBvcnRSZWN0OworCWdyb3dSZWN0LnRvcCAgPSBncm93UmVjdC5ib3R0b20gLSAxNTsKKwlncm93UmVjdC5sZWZ0ID0gZ3Jvd1JlY3QucmlnaHQgIC0gMTU7CisjZW5kaWYKKwlHZXRDbGlwIChzYXZlUmduKTsKKwlDbGlwUmVjdCAoJmdyb3dSZWN0KTsKKwlEcmF3R3Jvd0ljb24gKHdoaWNoV2luZG93KTsKKwlTZXRDbGlwIChzYXZlUmduKTsKKwlEaXNwb3NlUmduIChzYXZlUmduKTsKKyAgICAgIEVuZFVwZGF0ZSAod2hpY2hXaW5kb3cpOworCisgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBQb3J0ICovCisgICAgU2V0UG9ydCAoc2F2ZVBvcnQpOworfQorCisvKgorICogSGFuZGxlIHRoZSBhY3RpdmF0ZS9kZWFjdGl2YXRlIGV2ZW50CisgKiAoYXBwbHkgdG8gYSB3aW5kb3cpCisgKi8KKyAgICB2b2lkCitndWlfbWFjX2RvQWN0aXZhdGVFdmVudChldmVudCkKKyAgICBFdmVudFJlY29yZAkqZXZlbnQ7Cit7CisgICAgV2luZG93UHRyCXdoaWNoV2luZG93OworCisgICAgd2hpY2hXaW5kb3cgPSAoV2luZG93UHRyKSBldmVudC0+bWVzc2FnZTsKKyAgICBpZiAoKGV2ZW50LT5tb2RpZmllcnMpICYgYWN0aXZlRmxhZykKKwkvKiBBY3RpdmF0ZSAqLworCWd1aV9mb2N1c19jaGFuZ2UoVFJVRSk7CisgICAgZWxzZQorICAgIHsKKwkvKiBEZWFjdGl2YXRlICovCisJZ3VpX2ZvY3VzX2NoYW5nZShGQUxTRSk7CisvKglET04nVCBLTk9XIHdoYXQgdGhlIGNvZGUgYmVsb3cgd2FzIGRvaW5nCisJZm91bmQgaW4gdGhlIGRlYWN0aXZhdGUgY2xhdXNlLCBidXQgdGhlCisJY2xhdXNlIHdyaXR0aW5nIFRSVUUgaW50byBpbl9mb2N1cyAoQlVHKQorICovCisKKyNpZiAwCS8qIFJlbW92ZWQgYnkgRGFueSBhcyBwZXIgYWJvdmUgSnVuZSAyMDAxICovCisJYV9ib29sID0gZmFsc2U7CisJU2V0UHJlc2VydmVHbHlwaCAoYV9ib29sKTsKKwlTZXRPdXRsaW5lUHJlZmVycmVkIChhX2Jvb2wpOworI2VuZGlmCisgICAgfQorfQorCisKKy8qCisgKiBIYW5kbGUgdGhlIHN1c3BlbmQvcmVzdW1lIGV2ZW50CisgKiAoYXBwbHkgdG8gdGhlIGFwcGxpY2F0aW9uKQorICovCisgICAgdm9pZAorZ3VpX21hY19kb1N1c3BlbmRFdmVudChldmVudCkKKyAgICBFdmVudFJlY29yZAkqZXZlbnQ7Cit7CisgICAgLyogVGhlIGZyb250bW9zdCBhcHBsaWNhdGlvbiBqdXN0IGNoYW5nZWQgKi8KKworICAgIC8qIE5PVEU6IHRoZSBzdXNwZW5kIG1heSBoYXBwZW4gYmVmb3JlIHRoZSBkZWFjdGl2YXRlCisgICAgICogICAgICAgc2VlbiBvbiBNYWNPUyBYCisgICAgICovCisKKyAgICAvKiBNYXkgbm90IG5lZWQgdG8gY2hhbmdlIGZvY3VzIGFzIHRoZSB3aW5kb3cgd2lsbAorICAgICAqIGdldCBhbiBhY3RpdmF0ZS9kZXNhY3RpdmF0ZSBldmVudAorICAgICAqLworICAgIGlmIChldmVudC0+bWVzc2FnZSAmIDEpCisJLyogUmVzdW1lICovCisJZ3VpX2ZvY3VzX2NoYW5nZShUUlVFKTsKKyAgICBlbHNlCisJLyogU3VzcGVuZCAqLworCWd1aV9mb2N1c19jaGFuZ2UoRkFMU0UpOworfQorCisvKgorICogSGFuZGxlIHRoZSBrZXkKKyAqLworCisgICAgdm9pZAorZ3VpX21hY19kb0tleUV2ZW50KEV2ZW50UmVjb3JkICp0aGVFdmVudCkKK3sKKyAgICAvKiBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgQ09NTUFORCBLRVkgKi8KKyAgICBsb25nCQltZW51OworICAgIHVuc2lnbmVkIGNoYXIJc3RyaW5nWzIwXTsKKyAgICBzaG9ydAkJbnVtLCBpOworICAgIHNob3J0CQlsZW4gPSAwOworICAgIEtleVN5bQkJa2V5X3N5bTsKKyAgICBpbnQJCQlrZXlfY2hhcjsKKyAgICBpbnQJCQltb2RpZmllcnM7CisKKyAgICAvKiBNYXNrIHRoZSBtb3VzZSAoYXMgcGVyIHVzZXIgc2V0dGluZykgKi8KKyAgICBpZiAocF9taCkKKwlPYnNjdXJlQ3Vyc29yKCk7CisKKyAgICAvKiBHZXQgdGhlIGtleSBjb2RlIGFuZCBpdCdzIEFTQ0lJIHJlcHJlc2VudGF0aW9uICovCisgICAga2V5X3N5bSA9ICgodGhlRXZlbnQtPm1lc3NhZ2UgJiBrZXlDb2RlTWFzaykgPj4gOCk7CisgICAga2V5X2NoYXIgPSB0aGVFdmVudC0+bWVzc2FnZSAmIGNoYXJDb2RlTWFzazsKKyAgICBudW0gPSAxOworCisgICAgLyogSW50ZXJjZXB0IENUUkwtQyAqLworICAgIGlmICh0aGVFdmVudC0+bW9kaWZpZXJzICYgY29udHJvbEtleSkKKwlpZiAoa2V5X2NoYXIgPT0gQ3RybF9DICYmIGN0cmxfY19pbnRlcnJ1cHRzKQorCSAgICBnb3RfaW50ID0gVFJVRTsKKworICAgIC8qIEludGVyY2VwdCBDTUQtLiAqLworICAgIGlmICh0aGVFdmVudC0+bW9kaWZpZXJzICYgY21kS2V5KQorCWlmIChrZXlfY2hhciA9PSAnLicpCisJICAgIGdvdF9pbnQgPSBUUlVFOworCisgICAgLyogSGFuZGxlIGNvbW1hbmQga2V5IGFzIHBlciBtZW51ICovCisgICAgLyogVE9ETzogc2hvdWxkIG92ZXJyaWRlIGJlIGFsbG93ZWQ/IFJlcXVpcmUgWUFPIG9yIGNvdWxkIHVzZSAnd2luYWx0a2V5JyAqLworICAgIGlmICh0aGVFdmVudC0+bW9kaWZpZXJzICYgY21kS2V5KQorCS8qIE9ubHkgYWNjZXB0IENNRCBhbG9uZSBvciB3aXRoIENBUExPQ0tTIGFuZCB0aGUgbW91c2UgYnV0dG9uLgorCSAqIFdoeSB0aGUgbW91c2UgYnV0dG9uPyAqLworCWlmICgodGhlRXZlbnQtPm1vZGlmaWVycyAmICh+KGNtZEtleSB8IGJ0blN0YXRlIHwgYWxwaGFMb2NrKSkpID09IDApCisJeworCSAgICBtZW51ID0gTWVudUtleShrZXlfY2hhcik7CisJICAgIGlmIChIaVdvcmQobWVudSkpCisJICAgIHsKKwkJZ3VpX21hY19oYW5kbGVfbWVudShtZW51KTsKKwkJcmV0dXJuOworCSAgICB9CisJfQorCisgICAgLyogQ29udmVydCB0aGUgbW9kaWZpZXJzICovCisgICAgbW9kaWZpZXJzID0gRXZlbnRNb2RpZmllcnMyVmltTW9kaWZpZXJzKHRoZUV2ZW50LT5tb2RpZmllcnMpOworCisKKyAgICAvKiBIYW5kbGUgc3BlY2lhbCBrZXlzLiAqLworI2lmIDAKKyAgICAvKiBXaHkgaGF2ZSB0aGlzIGJlZW4gcmVtb3ZlZD8gKi8KKyAgICBpZgkoISh0aGVFdmVudC0+bW9kaWZpZXJzICYgKGNtZEtleSB8IGNvbnRyb2xLZXkgfCByaWdodENvbnRyb2xLZXkpKSkKKyNlbmRpZgorICAgIHsKKwkvKiBGaW5kIHRoZSBzcGVjaWFsIGtleSAoZm9yIG5vbi1wcmludGFibGUga2V5dF9jaGFyKSAqLworCWlmICAoKGtleV9jaGFyIDwgMHgyMCkgfHwgKGtleV9jaGFyID09IDB4N2YpKQorCSAgICBmb3IgKGkgPSAwOyBzcGVjaWFsX2tleXNbaV0ua2V5X3N5bSAhPSAoS2V5U3ltKTA7IGkrKykKKwkJaWYgKHNwZWNpYWxfa2V5c1tpXS5rZXlfc3ltID09IGtleV9zeW0pCisJCXsKKyMgaWYgMAorCQkgICAgLyogV2UgY3VycmVudGx5IGRvbid0IGhhdmUgbm90IHNvIHNwZWNpYWwga2V5ICovCisJCSAgICBpZiAoc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMSA9PSBOVUwpCisJCQlrZXlfY2hhciA9IHNwZWNpYWxfa2V5c1tpXS52aW1fY29kZTA7CisJCSAgICBlbHNlCisjIGVuZGlmCisJCQlrZXlfY2hhciA9IFRPX1NQRUNJQUwoIHNwZWNpYWxfa2V5c1tpXS52aW1fY29kZTAsCisJCQkJCQlzcGVjaWFsX2tleXNbaV0udmltX2NvZGUxICk7CisJCSAgICBrZXlfY2hhciA9IHNpbXBsaWZ5X2tleShrZXlfY2hhciwmbW9kaWZpZXJzKTsKKwkJICAgIGJyZWFrOworCQl9CisgICAgfQorCisKKyAgICAvKiBBZGQgdGhlIG1vZGlmaWVyIHRvIHRoZSBpbnB1dCBidSBpZiBuZWVkZWQgKi8KKyAgICAvKiBEbyBub3Qgd2FudCBTSElGVC1BIG9yIENUUkwtQSB3aXRoIG1vZGlmaWVyICovCisgICAgaWYgKCFJU19TUEVDSUFMKGtleV9jaGFyKQorCSAgICAmJiBrZXlfc3ltICE9IHZrX1NwYWNlCisJICAgICYmIGtleV9zeW0gIT0gdmtfVGFiCisJICAgICYmIGtleV9zeW0gIT0gdmtfUmV0dXJuCisJICAgICYmIGtleV9zeW0gIT0gdmtfRW50ZXIKKwkgICAgJiYga2V5X3N5bSAhPSB2a19Fc2MpCisgICAgeworI2lmIDEKKyAgICAvKiBDbGVhciBtb2RpZmllcnMgd2hlbiBvbmx5IG9uZSBtb2RpZmllciBpcyBzZXQgKi8KKwlpZiggKG1vZGlmaWVycyA9PSBNT0RfTUFTS19TSElGVCkgfHwKKwkgICAgKG1vZGlmaWVycyA9PSBNT0RfTUFTS19DVFJMKSAgfHwKKwkgICAgKG1vZGlmaWVycyA9PSBNT0RfTUFTS19BTFQpKQorCSAgICBtb2RpZmllcnMgPSAwOworI2Vsc2UKKwlpZiggbW9kaWZpZXJzICYgTU9EX01BU0tfQ1RSTCkKKwkgICAgbW9kaWZpZXJzID0gbW9kaWZpZXJzICYgfk1PRF9NQVNLX0NUUkw7CisJaWYoIG1vZGlmaWVycyAmIE1PRF9NQVNLX0FMVCkKKwkgICAgbW9kaWZpZXJzID0gbW9kaWZpZXJzICYgfk1PRF9NQVNLX0FMVDsKKwlpZiggbW9kaWZpZXJzICYgTU9EX01BU0tfU0hJRlQpCisJICAgIG1vZGlmaWVycyA9IG1vZGlmaWVycyAmIH5NT0RfTUFTS19TSElGVDsKKyNlbmRpZgorICAgIH0KKwlpZiggbW9kaWZpZXJzICkKKwl7CisJICAgIHN0cmluZ1sgbGVuKysgXSA9IENTSTsKKwkgICAgc3RyaW5nWyBsZW4rKyBdID0gS1NfTU9ESUZJRVI7CisJICAgIHN0cmluZ1sgbGVuKysgXSA9IG1vZGlmaWVyczsKKwl9CisKKwlpZiggSVNfU1BFQ0lBTCgga2V5X2NoYXIgKSApCisJeworCSAgICBzdHJpbmdbIGxlbisrIF0gPSBDU0k7CisJICAgIHN0cmluZ1sgbGVuKysgXSA9IEtfU0VDT05EKCBrZXlfY2hhciApOworCSAgICBzdHJpbmdbIGxlbisrIF0gPSBLX1RISVJEKCBrZXlfY2hhciApOworCX0KKwllbHNlCisJeworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGlucHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJICAgIHsKKwkJY2hhcl91CWZyb21bMl0sICp0bzsKKwkJaW50CWw7CisKKwkJZnJvbVswXSA9IGtleV9jaGFyOworCQlmcm9tWzFdID0gTlVMOworCQlsID0gMTsKKwkJdG8gPSBzdHJpbmdfY29udmVydCgmaW5wdXRfY29udiwgZnJvbSwgJmwpOworCQlpZiAodG8gIT0gTlVMTCkKKwkJeworCQkgICAgZm9yIChpID0gMDsgaSA8IGwgJiYgbGVuIDwgMTk7IGkrKykKKwkJICAgIHsKKwkJCWlmICh0b1tpXSA9PSBDU0kpCisJCQl7CisJCQkgICAgc3RyaW5nW2xlbisrXSA9IEtTX0VYVFJBOworCQkJICAgIHN0cmluZ1tsZW4rK10gPSBLRV9DU0k7CisJCQl9CisJCQllbHNlCisJCQkgICAgc3RyaW5nW2xlbisrXSA9IHRvW2ldOworCQkgICAgfQorCQkgICAgdmltX2ZyZWUodG8pOworCQl9CisJCWVsc2UKKwkJICAgIHN0cmluZ1tsZW4rK10gPSBrZXlfY2hhcjsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJc3RyaW5nW2xlbisrXSA9IGtleV9jaGFyOworCX0KKworCWlmIChsZW4gPT0gMSAmJiBzdHJpbmdbMF0gPT0gQ1NJKQorCXsKKwkgICAgLyogVHVybiBDU0kgaW50byBLX0NTSS4gKi8KKwkgICAgc3RyaW5nWyBsZW4rKyBdID0gS1NfRVhUUkE7CisJICAgIHN0cmluZ1sgbGVuKysgXSA9IEtFX0NTSTsKKwl9CisKKyAgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgbGVuKTsKK30KKworLyoKKyAqIEhhbmRsZSBNb3VzZUNsaWNrCisgKi8KKyAgICB2b2lkCitndWlfbWFjX2RvTW91c2VEb3duRXZlbnQgKHRoZUV2ZW50KQorICAgIEV2ZW50UmVjb3JkICp0aGVFdmVudDsKK3sKKyAgICBzaG9ydAkJdGhlUGFydDsKKyAgICBXaW5kb3dQdHIJCXdoaWNoV2luZG93OworCisgICAgdGhlUGFydCA9IEZpbmRXaW5kb3cgKHRoZUV2ZW50LT53aGVyZSwgJndoaWNoV2luZG93KTsKKworICAgIHN3aXRjaCAodGhlUGFydCkKKyAgICB7CisJY2FzZSAoaW5EZXNrKToKKwkgICAgLyogVE9ETzogd2hhdCB0byBkbz8gKi8KKwkgICAgYnJlYWs7CisKKwljYXNlIChpbk1lbnVCYXIpOgorCSAgICBndWlfbWFjX2hhbmRsZV9tZW51KE1lbnVTZWxlY3QgKHRoZUV2ZW50LT53aGVyZSkpOworCSAgICBicmVhazsKKworCWNhc2UgKGluQ29udGVudCk6CisJICAgIGd1aV9tYWNfZG9JbkNvbnRlbnRDbGljayAodGhlRXZlbnQsIHdoaWNoV2luZG93KTsKKwkgICAgYnJlYWs7CisKKwljYXNlIChpbkRyYWcpOgorCSAgICBndWlfbWFjX2RvSW5EcmFnQ2xpY2sgKHRoZUV2ZW50LT53aGVyZSwgd2hpY2hXaW5kb3cpOworCSAgICBicmVhazsKKworCWNhc2UgKGluR3Jvdyk6CisJICAgIGd1aV9tYWNfZG9Jbkdyb3dDbGljayAodGhlRXZlbnQtPndoZXJlLCB3aGljaFdpbmRvdyk7CisJICAgIGJyZWFrOworCisJY2FzZSAoaW5Hb0F3YXkpOgorCSAgICBpZiAoVHJhY2tHb0F3YXkod2hpY2hXaW5kb3csIHRoZUV2ZW50LT53aGVyZSkpCisJCWd1aV9zaGVsbF9jbG9zZWQoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIChpblpvb21Jbik6CisJY2FzZSAoaW5ab29tT3V0KToKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorCSAgICBndWlfbWFjX2RvSW5ab29tQ2xpY2sodGhlRXZlbnQsIHdoaWNoV2luZG93KTsKKyNlbmRpZgorCSAgICBicmVhazsKKyAgICB9Cit9CisKKy8qCisgKiBIYW5kbGUgTW91c2VNb3ZlZAorICogW3RoaXMgZXZlbnQgaXMgYSBtb3ZpbmcgaW4gYW5kIG91dCBvZiBhIHJlZ2lvbl0KKyAqLworICAgIHZvaWQKK2d1aV9tYWNfZG9Nb3VzZU1vdmVkRXZlbnQgKGV2ZW50KQorICAgIEV2ZW50UmVjb3JkICpldmVudDsKK3sKKyAgICBQb2ludCAgIHRoZVBvaW50OworICAgIGludF91ICAgdmltTW9kaWZpZXJzOworCisgICAgdGhlUG9pbnQgPSBldmVudC0+d2hlcmU7CisgICAgR2xvYmFsVG9Mb2NhbCAoJnRoZVBvaW50KTsKKyAgICB2aW1Nb2RpZmllcnMgPSBFdmVudE1vZGlmaWVyczJWaW1Nb3VzZU1vZGlmaWVycyhldmVudC0+bW9kaWZpZXJzKTsKKworICAgIGlmICghQnV0dG9uKCkpCisJZ3VpX21vdXNlX21vdmVkICh0aGVQb2ludC5oLCB0aGVQb2ludC52KTsKKyAgICBlbHNlCisjaWZkZWYgVVNFX0NUUkxDTElDS01FTlUKKwlpZiAoIWNsaWNrSXNQb3B1cCkKKyNlbmRpZgorCSAgICBndWlfc2VuZF9tb3VzZV9ldmVudChNT1VTRV9EUkFHLCB0aGVQb2ludC5oLAorCQkJCQkgICAgIHRoZVBvaW50LnYsIEZBTFNFLCB2aW1Nb2RpZmllcnMpOworCisgICAgLyogUmVzZXQgdGhlIHJlZ2lvbiBmcm9tIHdoaWNoIHdlIG1vdmUgaW4gYW5kIG91dCAqLworICAgIFNldFJlY3QgKCZkcmFnUmVjdCwgRklMTF9YKFhfMl9DT0wodGhlUG9pbnQuaCkpLAorCQkJRklMTF9ZKFlfMl9ST1codGhlUG9pbnQudikpLAorCQkJRklMTF9YKFhfMl9DT0wodGhlUG9pbnQuaCkrMSksCisJCQlGSUxMX1koWV8yX1JPVyh0aGVQb2ludC52KSsxKSk7CisKKyAgICBpZiAoZHJhZ1JlY3RFbmJsKQorCWRyYWdSZWN0Q29udHJvbCA9IGtDcmVhdGVSZWN0OworCit9CisKKy8qCisgKiBIYW5kbGUgdGhlIG1vdXNlIHJlbGVhc2UKKyAqLworICAgIHZvaWQKK2d1aV9tYWNfZG9Nb3VzZVVwRXZlbnQgKHRoZUV2ZW50KQorICAgIEV2ZW50UmVjb3JkICp0aGVFdmVudDsKK3sKKyAgICBQb2ludCAgIHRoZVBvaW50OworICAgIGludF91ICAgdmltTW9kaWZpZXJzOworCisgICAgLyogVE9ETzogUHJvcGVybHkgY29udmVydCB0aGUgQ29udGV4dHVhbCBtZW51IG1vdXNlLXVwICovCisgICAgLyogICAgICAgUG90ZW50aWFsIHNvdXJjZSBvZiB0aGUgZG91YmxlIG1lbnUgKi8KKyAgICBsYXN0TW91c2VUaWNrID0gdGhlRXZlbnQtPndoZW47CisgICAgZHJhZ1JlY3RFbmJsID0gRkFMU0U7CisgICAgZHJhZ1JlY3RDb250cm9sID0ga0NyZWF0ZUVtcHR5OworICAgIHRoZVBvaW50ID0gdGhlRXZlbnQtPndoZXJlOworICAgIEdsb2JhbFRvTG9jYWwgKCZ0aGVQb2ludCk7CisKKyAgICB2aW1Nb2RpZmllcnMgPSBFdmVudE1vZGlmaWVyczJWaW1Nb3VzZU1vZGlmaWVycyh0aGVFdmVudC0+bW9kaWZpZXJzKTsKKyNpZmRlZiBVU0VfQ1RSTENMSUNLTUVOVQorICAgIGlmIChjbGlja0lzUG9wdXApCisgICAgeworCXZpbU1vZGlmaWVycyAmPSB+TU9VU0VfQ1RSTDsKKwljbGlja0lzUG9wdXAgPSBGQUxTRTsKKyAgICB9CisjZW5kaWYKKyAgICBndWlfc2VuZF9tb3VzZV9ldmVudAorICAgICAgKE1PVVNFX1JFTEVBU0UsIHRoZVBvaW50LmgsIHRoZVBvaW50LnYsIEZBTFNFLCB2aW1Nb2RpZmllcnMpOworfQorCisjaWZkZWYgVVNFX01PVVNFV0hFRUwKKyAgICBzdGF0aWMgcGFzY2FsIE9TU3RhdHVzCitndWlfbWFjX21vdXNlX3doZWVsKEV2ZW50SGFuZGxlckNhbGxSZWYgbmV4dEhhbmRsZXIsIEV2ZW50UmVmIHRoZUV2ZW50LAorCQkJCQkJCQkgICB2b2lkICpkYXRhKQoreworICAgIEV2ZW50UmVmCWJvZ3VzRXZlbnQ7CisgICAgUG9pbnQJcG9pbnQ7CisgICAgUmVjdAlib3VuZHM7CisgICAgVUludDMyCW1vZDsKKyAgICBTSW50MzIJZGVsdGE7CisgICAgaW50X3UJdmltX21vZDsKKworICAgIGlmIChub0VyciAhPSBHZXRFdmVudFBhcmFtZXRlcih0aGVFdmVudCwga0V2ZW50UGFyYW1Nb3VzZVdoZWVsRGVsdGEsCisJCQkgICAgICB0eXBlU0ludDMyLCBOVUxMLCBzaXplb2YoU0ludDMyKSwgTlVMTCwgJmRlbHRhKSkKKwlnb3RvIGJhaWw7CisgICAgaWYgKG5vRXJyICE9IEdldEV2ZW50UGFyYW1ldGVyKHRoZUV2ZW50LCBrRXZlbnRQYXJhbU1vdXNlTG9jYXRpb24sCisJCQkgICAgICB0eXBlUURQb2ludCwgTlVMTCwgc2l6ZW9mKFBvaW50KSwgTlVMTCwgJnBvaW50KSkKKwlnb3RvIGJhaWw7CisgICAgaWYgKG5vRXJyICE9IEdldEV2ZW50UGFyYW1ldGVyKHRoZUV2ZW50LCBrRXZlbnRQYXJhbUtleU1vZGlmaWVycywKKwkJCQl0eXBlVUludDMyLCBOVUxMLCBzaXplb2YoVUludDMyKSwgTlVMTCwgJm1vZCkpCisJZ290byBiYWlsOworCisgICAgdmltX21vZCA9IDA7CisgICAgaWYgKG1vZCAmIHNoaWZ0S2V5KQorCXZpbV9tb2QgfD0gTU9VU0VfU0hJRlQ7CisgICAgaWYgKG1vZCAmIGNvbnRyb2xLZXkpCisJdmltX21vZCB8PSBNT1VTRV9DVFJMOworICAgIGlmIChtb2QgJiBvcHRpb25LZXkpCisJdmltX21vZCB8PSBNT1VTRV9BTFQ7CisKKyAgICAvKiBwb3N0IGEgYm9ndXMgZXZlbnQgdG8gd2FrZSB1cCBXYWl0TmV4dEV2ZW50ICovCisgICAgaWYgKG5vRXJyICE9IENyZWF0ZUV2ZW50KE5VTEwsIGtFdmVudENsYXNzTW91c2UsIGtFdmVudE1vdXNlTW92ZWQsIDAsCisJCQkJCSAgICBrRXZlbnRBdHRyaWJ1dGVOb25lLCAmYm9ndXNFdmVudCkpCisJZ290byBiYWlsOworICAgIGlmIChub0VyciAhPSBQb3N0RXZlbnRUb1F1ZXVlKEdldE1haW5FdmVudFF1ZXVlKCksIGJvZ3VzRXZlbnQsCisJCQkJCQkJICAga0V2ZW50UHJpb3JpdHlMb3cpKQorCWdvdG8gYmFpbDsKKworICAgIGlmIChub0VyciA9PSBHZXRXaW5kb3dCb3VuZHMoZ3VpLlZpbVdpbmRvdywga1dpbmRvd0NvbnRlbnRSZ24sICZib3VuZHMpKQorICAgIHsKKwlwb2ludC5oIC09IGJvdW5kcy5sZWZ0OworCXBvaW50LnYgLT0gYm91bmRzLnRvcDsKKyAgICB9CisKKyAgICBndWlfc2VuZF9tb3VzZV9ldmVudCgoZGVsdGEgPiAwKSA/IE1PVVNFXzQgOiBNT1VTRV81LAorCQkJCQkgICAgcG9pbnQuaCwgcG9pbnQudiwgRkFMU0UsIHZpbV9tb2QpOworCisgICAgcmV0dXJuIG5vRXJyOworCisgIGJhaWw6CisgICAgLyoKKyAgICAgKiB3aGVuIHdlIGZhaWwgZ2l2ZSBhbnkgYWRkaXRpb25hbCBjYWxsYmFjayBoYW5kbGVyIGEgY2hhbmNlIHRvIHBlcmZvcm0KKyAgICAgKiBpdCdzIGFjdGlvbnMKKyAgICAgKi8KKyAgICByZXR1cm4gQ2FsbE5leHRFdmVudEhhbmRsZXIobmV4dEhhbmRsZXIsIHRoZUV2ZW50KTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKFVTRV9NT1VTRVdIRUVMKSAqLworCisjaWYgMAorCisvKgorICogVGhpcyB3b3VsZCBiZSB0aGUgbm9ybWFsIHdheSBvZiBpbnZva2luZyB0aGUgY29udGV4dHVhbCBtZW51CisgKiBidXQgdGhlIFZpbSBBUEkgZG9lc24ndCBzZWVtIHRvIGEgc3VwcG9ydCBhIHJlcXVlc3QgdG8gZ2V0CisgKiB0aGUgbWVudSB0aGF0IHdlIHNob3VsZCBkaXNwbGF5CisgKi8KKyAgICB2b2lkCitndWlfbWFjX2hhbmRsZV9jb250ZXh0dWFsX21lbnUoZXZlbnQpCisgICAgRXZlbnRSZWNvcmQgKmV2ZW50OworeworLyoKKyAqICBDbG9uZSBQb3BVcCB0byB1c2UgbWVudQorICogIENyZWF0ZSBhIG9iamVjdCBkZXNjcmlwdG9yIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24KKyAqICBDYWxsIHRoZSBwcm9jZWR1cmUKKyAqLworCisvLyAgQ2FsbCB0byBIYW5kbGUgUG9wdXAKKyAgICBPU1N0YXR1cyBzdGF0dXMgPSBDb250ZXh0dWFsTWVudVNlbGVjdChDbnR4TWVudSwgZXZlbnQtPndoZXJlLCBmYWxzZSwga0NNSGVscEl0ZW1Ob0hlbHAsICIiLCBOVUxMLCAmQ250eFR5cGUsICZDbnR4TWVudUlELCAmQ250eE1lbnVJdGVtKTsKKworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpCisJcmV0dXJuOworCisgICAgaWYgKENudHhUeXBlID09IGtDTU1lbnVJdGVtU2VsZWN0ZWQpCisgICAgeworCS8qIEhhbmRsZSB0aGUgbWVudSBDbnR4TWVudUlELCBDbnR4TWVudUl0ZW0gKi8KKwkvKiBUaGUgc3VibWVudSBjYW4gYmUgaGFuZGxlIGRpcmVjdGx5IGJ5IGd1aV9tYWNfaGFuZGxlX21lbnUgKi8KKwkvKiBCdXQgd2hhdCBhYm91dCB0aGUgY3VycmVudCBtZW51LCBpcyB0aGUgbWVueSBjaGFuZ2VkIGJ5IENvbnRleHR1YWxNZW51U2VsZWN0ICovCisJZ3VpX21hY19oYW5kbGVfbWVudSAoKENudHhNZW51SUQgPDwgMTYpICsgQ250eE1lbnVJdGVtKTsKKyAgICB9CisgICAgZWxzZSBpZiAoQ250eE1lbnVJRCA9PSBrQ01TaG93SGVscFNlbGVjdGVkKQorICAgIHsKKwkvKiBTaG91bGQgY29tZSB1cCB3aXRoIHRoZSBoZWxwICovCisgICAgfQorCit9CisjZW5kaWYKKworLyoKKyAqIEhhbmRsZSBtZW51YmFyIHNlbGVjdGlvbgorICovCisgICAgdm9pZAorZ3VpX21hY19oYW5kbGVfbWVudShtZW51Q2hvaWNlKQorICAgIGxvbmcgbWVudUNob2ljZTsKK3sKKyAgICBzaG9ydAltZW51ID0gSGlXb3JkKG1lbnVDaG9pY2UpOworICAgIHNob3J0CWl0ZW0gPSBMb1dvcmQobWVudUNob2ljZSk7CisgICAgdmltbWVudV9UCSp0aGVWaW1NZW51ID0gcm9vdF9tZW51OworI2lmbmRlZiBVU0VfQ0FSQk9OSVpFRAorICAgIE1lbnVIYW5kbGUJYXBwbGVNZW51OworICAgIFN0cjI1NQlpdGVtTmFtZTsKKyNlbmRpZgorCisgICAgaWYgKG1lbnUgPT0gMjU2KSAgLyogVE9ETzogdXNlIGNvbnN0YW50IG9yIGd1aS54eXogKi8KKyAgICB7CisJaWYgKGl0ZW0gPT0gMSkKKwkgICAgZ3VpX21jaF9iZWVwKCk7IC8qIFRPRE86IFBvcHVwIGRpYWxvZyBvciBkbyA6aW50cm8gKi8KKwllbHNlCisJeworI2lmbmRlZiBVU0VfQ0FSQk9OSVpFRAorCSAgICAvKiBEZXNrIEFjY2Vzc29yeSBkb2Vzbid0IGV4aXN0IGluIENhcmJvbiAqLworCSAgICBhcHBsZU1lbnUgPSBHZXRNZW51SGFuZGxlIChtZW51KTsKKwkgICAgR2V0TWVudUl0ZW1UZXh0IChhcHBsZU1lbnUsIGl0ZW0sIGl0ZW1OYW1lKTsKKwkgICAgKHZvaWQpIE9wZW5EZXNrQWNjIChpdGVtTmFtZSk7CisjZW5kaWYKKwl9CisgICAgfQorICAgIGVsc2UgaWYgKGl0ZW0gIT0gMCkKKyAgICB7CisJdGhlVmltTWVudSA9IGd1aV9tYWNfZ2V0X3ZpbV9tZW51KG1lbnUsIGl0ZW0sIHJvb3RfbWVudSk7CisKKwlpZiAodGhlVmltTWVudSkKKwkgICAgZ3VpX21lbnVfY2IodGhlVmltTWVudSk7CisgICAgfQorICAgIEhpbGl0ZU1lbnUgKDApOworfQorCisvKgorICogRGlzcGF0Y2ggdGhlIGV2ZW50IHRvIHByb3BlciBoYW5kbGVyCisgKi8KKworICAgIHZvaWQKK2d1aV9tYWNfaGFuZGxlX2V2ZW50IChldmVudCkKKyAgICBFdmVudFJlY29yZCAqZXZlbnQ7Cit7CisgICAgT1NFcnIJZXJyb3I7CisKKyAgICAvKiBIYW5kbGUgY29udGV4dHVhbCBtZW51IHJpZ2h0IG5vdyAoaWYgbmVlZGVkKSAqLworI2lmZGVmIFVTRV9DVFJMQ0xJQ0tNRU5VCisgICAgaWYgKGd1aS5NYWNPU0hhdmVDbnR4TWVudSkKKwlpZiAoSXNTaG93Q29udGV4dHVhbE1lbnVDbGljayhldmVudCkpCisJeworIyBpZiAwCisJICAgIGd1aV9tYWNfaGFuZGxlX2NvbnRleHR1YWxfbWVudShldmVudCk7CisjIGVsc2UKKwkgICAgZ3VpX21hY19kb01vdXNlRG93bkV2ZW50KGV2ZW50KTsKKyMgZW5kaWYKKwkgICAgcmV0dXJuOworCX0KKyNlbmRpZgorCisgICAgLyogSGFuZGxlIG5vcm1hbCBldmVudCAqLworICAgIHN3aXRjaCAoZXZlbnQtPndoYXQpCisgICAgeworCWNhc2UgKGtleURvd24pOgorCWNhc2UgKGF1dG9LZXkpOgorCSAgICBndWlfbWFjX2RvS2V5RXZlbnQgKGV2ZW50KTsKKwkgICAgYnJlYWs7CisKKwljYXNlIChrZXlVcCk6CisJICAgIC8qIFdlIGRvbid0IGNhcmUgYWJvdXQgd2hlbiB0aGUga2V5IGdldCByZWxlYXNlICovCisJICAgIGJyZWFrOworCisJY2FzZSAobW91c2VEb3duKToKKwkgICAgZ3VpX21hY19kb01vdXNlRG93bkV2ZW50KGV2ZW50KTsKKwkgICAgYnJlYWs7CisKKwljYXNlIChtb3VzZVVwKToKKwkgICAgZ3VpX21hY19kb01vdXNlVXBFdmVudChldmVudCk7CisJICAgIGJyZWFrOworCisJY2FzZSAodXBkYXRlRXZ0KToKKwkgICAgZ3VpX21hY19kb1VwZGF0ZUV2ZW50IChldmVudCk7CisJICAgIGJyZWFrOworCisJY2FzZSAoZGlza0V2dCk6CisJICAgIC8qIFdlIGRvbid0IG5lZWQgc3BlY2lhbCBoYW5kbGluZyBmb3IgZGlzayBpbnNlcnRpb24gKi8KKwkgICAgYnJlYWs7CisKKwljYXNlIChhY3RpdmF0ZUV2dCk6CisJICAgIGd1aV9tYWNfZG9BY3RpdmF0ZUV2ZW50IChldmVudCk7CisJICAgIGJyZWFrOworCisJY2FzZSAob3NFdnQpOgorCSAgICBzd2l0Y2ggKChldmVudC0+bWVzc2FnZSA+PiAyNCkgJiAweEZGKQorCSAgICB7CisJCWNhc2UgKDB4RkEpOiAvKiBtb3VzZU1vdmVkTWVzc2FnZSAqLworCQkgICAgZ3VpX21hY19kb01vdXNlTW92ZWRFdmVudCAoZXZlbnQpOworCQkgICAgYnJlYWs7CisJCWNhc2UgKDB4MDEpOiAvKiBzdXNwZW5kUmVzdW1lTWVzc2FnZSAqLworCQkgICAgZ3VpX21hY19kb1N1c3BlbmRFdmVudCAoZXZlbnQpOworCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKyNpZmRlZiBVU0VfQUVWRU5UCisJY2FzZSAoa0hpZ2hMZXZlbEV2ZW50KToKKwkgICAgLyogU29tZW9uZSdzIHRhbGtpbmcgdG8gdXMsIHRocm91Z2ggQXBwbGVFdmVudHMgKi8KKwkgICAgZXJyb3IgPSBBRVByb2Nlc3NBcHBsZUV2ZW50KGV2ZW50KTsgLyogVE9ETzogRXJyb3IgSGFuZGxpbmcgKi8KKwkgICAgYnJlYWs7CisjZW5kaWYKKyAgICB9Cit9CisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVua25vd24gU3R1ZmYKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKworICAgIEd1aUZvbnQKK2d1aV9tYWNfZmluZF9mb250IChmb250X25hbWUpCisgICAgY2hhcl91ICpmb250X25hbWU7Cit7CisgICAgY2hhcl91CWM7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQlwRm9udE5hbWVbMjU2XTsKKyAgICBTdHIyNTUJc3lzdGVtRm9udG5hbWU7CisgICAgc2hvcnQJZm9udF9pZDsKKyAgICBzaG9ydAlzaXplPTk7CisgICAgR3VpRm9udAlmb250OworI2lmIDAKKyAgICBjaGFyX3UgICAgICAqZm9udE5hbWVQdHI7CisjZW5kaWYKKworICAgIGZvciAocCA9IGZvbnRfbmFtZTsgKCgqcCAhPSAwKSAmJiAoKnAgIT0gJzonKSk7IHArKykKKwk7CisKKyAgICBjID0gKnA7CisgICAgKnAgPSAwOworCisjaWYgMQorICAgIFNUUkNQWSgmcEZvbnROYW1lWzFdLCBmb250X25hbWUpOworICAgIHBGb250TmFtZVswXSA9IFNUUkxFTihmb250X25hbWUpOworICAgICpwID0gYzsKKworICAgIEdldEZOdW0gKHBGb250TmFtZSwgJmZvbnRfaWQpOworI2Vsc2UKKyAgICAvKiBuYW1lID0gQzJQYXNjYWxfc2F2ZShtZW51LT5kbmFtZSk7ICovCisgICAgZm9udE5hbWVQdHIgPSBDMlBhc2NhbF9zYXZlX2FuZF9yZW1vdmVfYmFja3NsYXNoKGZvbnRfbmFtZSk7CisKKyAgICBHZXRGTnVtIChmb250TmFtZVB0ciwgJmZvbnRfaWQpOworI2VuZGlmCisKKworICAgIGlmIChmb250X2lkID09IDApCisgICAgeworCS8qIE91cHMsIHRoZSBzeXN0ZW0gZm9udCB3YXMgaXQgdGhlIG9uZSB0aGUgdXNlciB3YW50ICovCisKKwlHZXRGb250TmFtZSAoMCwgc3lzdGVtRm9udG5hbWUpOworCWlmICghRXF1YWxTdHJpbmcocEZvbnROYW1lLCBzeXN0ZW1Gb250bmFtZSwgZmFsc2UsIGZhbHNlKSkKKwkgICAgcmV0dXJuIE5PRk9OVDsKKyAgICB9CisgICAgaWYgKCpwID09ICc6JykKKyAgICB7CisJcCsrOworCS8qIFNldCB0aGUgdmFsdWVzIGZvdW5kIGFmdGVyICc6JyAqLworCXdoaWxlICgqcCkKKwl7CisJICAgIHN3aXRjaCAoKnArKykKKwkgICAgeworCQljYXNlICdoJzoKKwkJICAgIHNpemUgPSBwb2ludHNfdG9fcGl4ZWxzKHAsICZwLCBUUlVFKTsKKwkJICAgIGJyZWFrOworCQkgICAgLyoKKwkJICAgICAqIFRPRE86IE1heWJlIGFjY2VwdCB3aWR0aCBhbmQgc3R5bGVzCisJCSAgICAgKi8KKwkgICAgfQorCSAgICB3aGlsZSAoKnAgPT0gJzonKQorCQlwKys7CisJfQorICAgIH0KKworICAgIGlmIChzaXplIDwgMSkKKwlzaXplID0gMTsgICAvKiBBdm9pZCBoYXZpbmcgYSBzaXplIG9mIDAgd2l0aCBzeXN0ZW0gZm9udCAqLworCisgICAgZm9udCA9IChzaXplIDw8IDE2KSArICgobG9uZykgZm9udF9pZCAmIDB4RkZGRik7CisKKyAgICByZXR1cm4gZm9udDsKK30KKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogR1VJX01DSCBmdW5jdGlvbm5hbGl0eQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFBhcnNlIHRoZSBHVUkgcmVsYXRlZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLiAgQW55IGFyZ3VtZW50cyB1c2VkIGFyZQorICogZGVsZXRlZCBmcm9tIGFyZ3YsIGFuZCAqYXJnYyBpcyBkZWNyZW1lbnRlZCBhY2NvcmRpbmdseS4gIFRoaXMgaXMgY2FsbGVkCisgKiB3aGVuIHZpbSBpcyBzdGFydGVkLCB3aGV0aGVyIG9yIG5vdCB0aGUgR1VJIGhhcyBiZWVuIHN0YXJ0ZWQuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3ByZXBhcmUoYXJnYywgYXJndikKKyAgICBpbnQJCSphcmdjOworICAgIGNoYXIJKiphcmd2OworeworICAgIC8qIFRPRE86IE1vdmUgbW9zdCBvZiB0aGlzIHN0dWZmIHRvd2FyZCBndWlfbWNoX2luaXQgKi8KKyNpZmRlZiBVU0VfRVhFX05BTUUKKyAgICBGU1NwZWMJYXBwbERpcjsKKyMgaWZuZGVmIFVTRV9GSU5EX0JVTkRMRV9QQVRICisgICAgc2hvcnQJYXBwbFZSZWZOdW07CisgICAgbG9uZwlhcHBsRGlySUQ7CisgICAgU3RyMjU1CXZvbE5hbWU7CisjIGVsc2UKKyAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIHBzbjsKKyAgICBGU1JlZglhcHBsRlNSZWY7CisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBVU0VfQ0FSQk9OSVpFRAorICAgIE1heEFwcGxab25lKCk7CSAgICAvKiBXaGF0IGNvdWxkIHJlcGxhY2UgdGhvcyAqLworICAgIC8qIEluIENhcmJvbiwgYWxsIHNoYXJlZCBsaWJyYXJ5IGFyZSBhdXRvbWF0aWNhbGx5IGxvYWQgaW4KKyAgICAgKiB0aGVyZSdzIG5vIG5lZWQgdG8gaW5pdCB0aGVtCisgICAgICovCisgICAgSW5pdEdyYWYoJnFkLnRoZVBvcnQpOworICAgIEluaXRGb250cygpOworICAgIEluaXRXaW5kb3dzKCk7CisgICAgSW5pdE1lbnVzKCk7CisgICAgVEVJbml0KCk7CisgICAgSW5pdERpYWxvZ3MobmlsKTsKKyNlbHNlCisgICAgLyogV2h5IGRpZCBJIHB1dCB0aGF0IGluPyAoRGFueSkgKi8KKyAgICBNb3JlTWFzdGVyUG9pbnRlcnMgKDB4NDAgKiAzKTsgLyogd2UgbG92ZSBoYW5kbGVzICovCisjZW5kaWYKKworI2lmIDAKKyAgICBJbml0Q3Vyc29yKCk7CisKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorICAgIFJlZ2lzdGVyQXBwZWFyYW5jZUNsaWVudCgpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfQUVWRU5UCisgICAgKHZvaWQpIEluc3RhbGxBRUhhbmRsZXJzKCk7CisjZW5kaWYKKworI2lmZGVmIFVTRV9DVFJMQ0xJQ0tNRU5VCisgICAgaWYgKEdlc3RhbHQoZ2VzdGFsdENvbnRleHR1YWxNZW51QXR0ciwgJmdlc3RhbHRfcmMpID09IG5vRXJyKQorCWd1aS5NYWNPU0hhdmVDbnR4TWVudSA9IEJpdFRzdCgmZ2VzdGFsdF9yYywgMzEtZ2VzdGFsdENvbnRleHR1YWxNZW51VHJhcEF2YWlsYWJsZSk7CisgICAgZWxzZQorCWd1aS5NYWNPU0hhdmVDbnR4TWVudSA9IGZhbHNlOworCisgICAgaWYgKGd1aS5NYWNPU0hhdmVDbnR4TWVudSkKKwlndWkuTWFjT1NIYXZlQ250eE1lbnUgPSAoSW5pdENvbnRleHR1YWxNZW51cygpPT1ub0Vycik7CisjZW5kaWYKKworI2lmZGVmIFVTRV9TSU9VWAorICAgIFNJT1VYU2V0dGluZ3Muc3RhbmRhbG9uZSA9IGZhbHNlOworICAgIFNJT1VYU2V0dGluZ3MuaW5pdGlhbGl6ZVRCID0gZmFsc2U7CisgICAgU0lPVVhTZXR0aW5ncy5zZXR1cG1lbnVzID0gZmFsc2U7CisgICAgU0lPVVhTZXR0aW5ncy5hc2t0b3NhdmVvbmNsb3NlID0gZmFsc2U7CisgICAgU0lPVVhTZXR0aW5ncy5zaG93c3RhdHVzbGluZSA9IHRydWU7CisgICAgU0lPVVhTZXR0aW5ncy50b3BwaXhlbCA9IDMwMDsKKyAgICBTSU9VWFNldHRpbmdzLmxlZnRwaXhlbCA9IDEwOworICAgIEluc3RhbGxDb25zb2xlICgxKTsgLyogZmlsZW5vKHN0ZG91dCkgPSAxLCBvbiBwYWdlIDQzMCBvZiBNU0wgQyAqLworICAgIHByaW50ZiAoIkRlYnVnZ2luZyBjb25zb2xlIGVuYWJsZWRcbiIpOworICAgIC8qCVNJT1VYU2V0VGl0bGUgKChjaGFyX3UgKikgIlZpbSBTdGRvdXQiKTsgKi8KKyNlbmRpZgorCisgICAgcG9tbWUgPSBOZXdNZW51ICgyNTYsICJccFwwMjQiKTsgLyogMHgxND0gPSBBcHBsZSBNZW51ICovCisKKyAgICBBcHBlbmRNZW51IChwb21tZSwgIlxwQWJvdXQgVklNIik7CisjaWZuZGVmIFVTRV9DQVJCT05JWkVECisgICAgQXBwZW5kTWVudSAocG9tbWUsICJccC0iKTsKKyAgICBBcHBlbmRSZXNNZW51IChwb21tZSwgJ0RSVlInKTsKKyNlbmRpZgorCisgICAgSW5zZXJ0TWVudSAocG9tbWUsIDApOworCisgICAgRHJhd01lbnVCYXIoKTsKKworCisjaWZuZGVmIFVTRV9PRkZTRVRFRF9XSU5ET1cKKyAgICBTZXRSZWN0ICgmd2luZFJlY3QsIDEwLCA0OCwgMTArODAqNyArIDE2LCA0OCsyNCoxMSk7CisjZWxzZQorICAgIFNldFJlY3QgKCZ3aW5kUmVjdCwgMzAwLCA0MCwgMzAwKzgwKjcgKyAxNiwgNDArMjQqMTEpOworI2VuZGlmCisKKworI2lmZGVmIFVTRV9DQVJCT05JWkVECisgICAgQ3JlYXRlTmV3V2luZG93KGtEb2N1bWVudFdpbmRvd0NsYXNzLAorCQlrV2luZG93UmVzaXphYmxlQXR0cmlidXRlIHwga1dpbmRvd0NvbGxhcHNlQm94QXR0cmlidXRlLAorCQkmd2luZFJlY3QsICZndWkuVmltV2luZG93ICk7CisgICAgU2V0UG9ydFdpbmRvd1BvcnQgKCBndWkuVmltV2luZG93ICk7CisjZWxzZQorICAgIGd1aS5WaW1XaW5kb3cgPSBOZXdDV2luZG93KG5pbCwgJndpbmRSZWN0LCAiXHBnVmltIG9uIE1hY2ludG9zaCIsIHRydWUsIGRvY3VtZW50UHJvYywKKwkJCShXaW5kb3dQdHIpIC0xTCwgZmFsc2UsIDApOworICAgIFNldFBvcnQoZ3VpLlZpbVdpbmRvdyk7CisjZW5kaWYKKworICAgIGd1aS5jaGFyX3dpZHRoID0gNzsKKyAgICBndWkuY2hhcl9oZWlnaHQgPSAxMTsKKyAgICBndWkuY2hhcl9hc2NlbnQgPSA2OworICAgIGd1aS5udW1fcm93cyA9IDI0OworICAgIGd1aS5udW1fY29scyA9IDgwOworICAgIGd1aS5pbl9mb2N1cyA9IFRSVUU7IC8qIEZvciB0aGUgbW9tZW50IC0+IHN5bi4gb2YgZnJvbnQgYXBwbGljYXRpb24gKi8KKworI2lmIFRBUkdFVF9BUElfTUFDX0NBUkJPTgorICAgIGdTY3JvbGxBY3Rpb24gPSBOZXdDb250cm9sQWN0aW9uVVBQIChndWlfbWFjX3Njcm9sbF9hY3Rpb24pOworICAgIGdTY3JvbGxEcmFnICAgPSBOZXdDb250cm9sQWN0aW9uVVBQIChndWlfbWFjX2RyYWdfdGh1bWIpOworI2Vsc2UKKyAgICBnU2Nyb2xsQWN0aW9uID0gTmV3Q29udHJvbEFjdGlvblByb2MgKGd1aV9tYWNfc2Nyb2xsX2FjdGlvbik7CisgICAgZ1Njcm9sbERyYWcgICA9IE5ld0NvbnRyb2xBY3Rpb25Qcm9jIChndWlfbWFjX2RyYWdfdGh1bWIpOworI2VuZGlmCisKKyAgICAvKiBHZXR0aW5nIGEgaGFuZGxlIHRvIHRoZSBIZWxwIG1lbnUgKi8KKyNpZmRlZiBVU0VfSEVMUE1FTlUKKyMgaWZkZWYgVVNFX0NBUkJPTklaRUQKKyAgICBITUdldEhlbHBNZW51KCZndWkuTWFjT1NIZWxwTWVudSwgTlVMTCk7CisjIGVsc2UKKyAgICAodm9pZCkgSE1HZXRIZWxwTWVudUhhbmRsZSgmZ3VpLk1hY09TSGVscE1lbnUpOworIyBlbmRpZgorCisgICAgaWYgKGd1aS5NYWNPU0hlbHBNZW51ICE9IG5pbCkKKwlndWkuTWFjT1NIZWxwSXRlbXMgPSBDb3VudE1lbnVJdGVtcyAoZ3VpLk1hY09TSGVscE1lbnUpOworICAgIGVsc2UKKwlndWkuTWFjT1NIZWxwSXRlbXMgPSAwOworI2VuZGlmCisKKyAgICBkcmFnUmVjdEVuYmwgPSBGQUxTRTsKKyAgICBkcmFnUmduID0gTlVMTDsKKyAgICBkcmFnUmVjdENvbnRyb2wgPSBrQ3JlYXRlRW1wdHk7CisgICAgY3Vyc29yUmduID0gTmV3UmduKCk7CisjZW5kaWYKKyNpZmRlZiBVU0VfRVhFX05BTUUKKyMgaWZuZGVmIFVTRV9GSU5EX0JVTkRMRV9QQVRICisgICAgSEdldFZvbCAodm9sTmFtZSwgJmFwcGxWUmVmTnVtLCAmYXBwbERpcklEKTsKKyAgICAvKiBUTjIwMTU6IG1lbnRpb24gYSBwb3NzaWJsZSBiYWQgVlJlZk51bSAqLworICAgIEZTTWFrZUZTU3BlYyAoYXBwbFZSZWZOdW0sIGFwcGxEaXJJRCwgIlxwIiwgJmFwcGxEaXIpOworIyBlbHNlCisgICAgLyogT1NFcnIgR2V0QXBwbGljYXRpb25CdW5kbGVGU1NwZWMoRlNTcGVjUHRyIHRoZUZTU3BlY1B0cikKKyAgICAgKiBvZiBUTjIwMTUKKyAgICAgKiBUaGlzIHRlY2huaWMgcmVtb3ZlIHRoZSAuLi9Db250ZW50cy9NYWNPUy9ldGMgcGFydAorICAgICAqLworICAgICh2b2lkKSBHZXRDdXJyZW50UHJvY2VzcygmcHNuKTsKKyAgICAvKiBpZiAoZXJyICE9IG5vRXJyKSByZXR1cm4gZXJyOyAqLworCisgICAgKHZvaWQpIEdldFByb2Nlc3NCdW5kbGVMb2NhdGlvbigmcHNuLCAmYXBwbEZTUmVmKTsKKyAgICAvKiBpZiAoZXJyICE9IG5vRXJyKSByZXR1cm4gZXJyOyAqLworCisgICAgKHZvaWQpIEZTR2V0Q2F0YWxvZ0luZm8oJmFwcGxGU1JlZiwga0ZTQ2F0SW5mb05vbmUsIE5VTEwsIE5VTEwsICZhcHBsRGlyLCBOVUxMKTsKKworICAgIC8qIFRoaXMgdGVjaG5pYyByZXR1cm4gTklMIHdoZW4gd2UgZGlzYWxsb3dfZ3VpICovCisjIGVuZGlmCisgICAgZXhlX25hbWUgPSBGdWxsUGF0aEZyb21GU1NwZWNfc2F2ZSAoYXBwbERpcik7CisjZW5kaWYKKworI2lmZGVmIFVTRV9WSU1fQ1JFQVRPUl9JRAorICAgIF9mY3JlYXRvciA9ICdWSU0hJzsKKyAgICBfZnR5cGUgPSAnVEVYVCc7CisjZW5kaWYKK30KKworI2lmbmRlZiBBTFdBWVNfVVNFX0dVSQorLyoKKyAqIENoZWNrIGlmIHRoZSBHVUkgY2FuIGJlIHN0YXJ0ZWQuICBDYWxsZWQgYmVmb3JlIGd2aW1yYyBpcyBzb3VyY2VkLgorICogUmV0dXJuIE9LIG9yIEZBSUwuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfaW5pdF9jaGVjayh2b2lkKQoreworICAgIC8qIFRPRE86IEZvciBNYWNPUyBYIGZpbmQgYSB3YXkgdG8gcmV0dXJuIEZBSUwsIGlmIHRoZSB1c2VyIGxvZ2dlZCBpbgorICAgICAqIHVzaW5nIHRoZSA+Y29uc29sZQorICAgICAqLworICAgIGlmIChkaXNhbGxvd19ndWkpIC8qIHNlZSBtYWluLmMgZm9yIHJlYXNvbiB0byBkaXNhbGxvdyAqLworCXJldHVybiBGQUlMOworICAgIHJldHVybiBPSzsKK30KKyNlbmRpZgorCisgICAgc3RhdGljIE9TRXJyCityZWNlaXZlSGFuZGxlcihXaW5kb3dSZWYgdGhlV2luZG93LCB2b2lkKiBoYW5kbGVyUmVmQ29uLCBEcmFnUmVmIHRoZURyYWcpCit7CisgICAgaW50CQl4LCB5OworICAgIGludF91CW1vZGlmaWVyczsKKyAgICBjaGFyX3UJKipmbmFtZXMgPSBOVUxMOworICAgIGludAkJY291bnQ7CisgICAgaW50CQlpLCBqOworCisgICAgLyogR2V0IGRyb3AgcG9zaXRpb24sIG1vZGlmaWVycyBhbmQgY291bnQgb2YgaXRlbXMgKi8KKyAgICB7CisJUG9pbnQJcG9pbnQ7CisJU0ludDE2CW1vdXNlVXBNb2RpZmllcnM7CisJVUludDE2CWNvdW50SXRlbTsKKworCUdldERyYWdNb3VzZSh0aGVEcmFnLCAmcG9pbnQsIE5VTEwpOworCUdsb2JhbFRvTG9jYWwoJnBvaW50KTsKKwl4ID0gcG9pbnQuaDsKKwl5ID0gcG9pbnQudjsKKwlHZXREcmFnTW9kaWZpZXJzKHRoZURyYWcsIE5VTEwsIE5VTEwsICZtb3VzZVVwTW9kaWZpZXJzKTsKKwltb2RpZmllcnMgPSBFdmVudE1vZGlmaWVyczJWaW1Nb3VzZU1vZGlmaWVycyhtb3VzZVVwTW9kaWZpZXJzKTsKKwlDb3VudERyYWdJdGVtcyh0aGVEcmFnLCAmY291bnRJdGVtKTsKKwljb3VudCA9IGNvdW50SXRlbTsKKyAgICB9CisKKyAgICBmbmFtZXMgPSAoY2hhcl91ICoqKWFsbG9jKGNvdW50ICogc2l6ZW9mKGNoYXJfdSAqKSk7CisgICAgaWYgKGZuYW1lcyA9PSBOVUxMKQorCXJldHVybiBkcmFnTm90QWNjZXB0ZWRFcnI7CisKKyAgICAvKiBHZXQgZmlsZSBuYW1lcyBkcm9wcGVkICovCisgICAgZm9yIChpID0gaiA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgIHsKKwlEcmFnSXRlbVJlZglpdGVtOworCU9TRXJyCQllcnI7CisJU2l6ZQkJc2l6ZTsKKwlGbGF2b3JUeXBlCXR5cGUgPSBmbGF2b3JUeXBlSEZTOworCUhGU0ZsYXZvcgloZnNGbGF2b3I7CisKKwlmbmFtZXNbaV0gPSBOVUxMOworCUdldERyYWdJdGVtUmVmZXJlbmNlTnVtYmVyKHRoZURyYWcsIGkgKyAxLCAmaXRlbSk7CisJZXJyID0gR2V0Rmxhdm9yRGF0YVNpemUodGhlRHJhZywgaXRlbSwgdHlwZSwgJnNpemUpOworCWlmIChlcnIgIT0gbm9FcnIgfHwgc2l6ZSA+IHNpemVvZihoZnNGbGF2b3IpKQorCSAgICBjb250aW51ZTsKKwllcnIgPSBHZXRGbGF2b3JEYXRhKHRoZURyYWcsIGl0ZW0sIHR5cGUsICZoZnNGbGF2b3IsICZzaXplLCAwKTsKKwlpZiAoZXJyICE9IG5vRXJyKQorCSAgICBjb250aW51ZTsKKwlmbmFtZXNbaisrXSA9IEZ1bGxQYXRoRnJvbUZTU3BlY19zYXZlKGhmc0ZsYXZvci5maWxlU3BlYyk7CisgICAgfQorICAgIGNvdW50ID0gajsKKworICAgIGd1aV9oYW5kbGVfZHJvcCh4LCB5LCBtb2RpZmllcnMsIGZuYW1lcywgY291bnQpOworICAgIHJldHVybiBub0VycjsKK30KKworLyoKKyAqIEluaXRpYWxpc2UgdGhlIEdVSS4gIENyZWF0ZSBhbGwgdGhlIHdpbmRvd3MsIHNldCB1cCBhbGwgdGhlIGNhbGwtYmFja3MKKyAqIGV0Yy4KKyAqLworICAgIGludAorZ3VpX21jaF9pbml0KCkKK3sKKyAgICAvKiBUT0RPOiBNb3ZlIG1vc3Qgb2YgdGhpcyBzdHVmZiB0b3dhcmQgZ3VpX21jaF9pbml0ICovCisgICAgUmVjdAl3aW5kUmVjdDsKKyAgICBNZW51SGFuZGxlCXBvbW1lOworI2lmZGVmIFVTRV9DVFJMQ0xJQ0tNRU5VCisgICAgbG9uZwlnZXN0YWx0X3JjOworI2VuZGlmCisjaWZkZWYgVVNFX01PVVNFV0hFRUwKKyAgICBFdmVudFR5cGVTcGVjICAgZXZlbnRUeXBlU3BlYzsKKyAgICBFdmVudEhhbmRsZXJSZWYgbW91c2VXaGVlbEhhbmRsZXJSZWY7CisjZW5kaWYKKyNpZiAxCisgICAgSW5pdEN1cnNvcigpOworCisjaWZkZWYgVVNFX0NBUkJPTklaRUQKKyAgICBSZWdpc3RlckFwcGVhcmFuY2VDbGllbnQoKTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FFVkVOVAorICAgICh2b2lkKSBJbnN0YWxsQUVIYW5kbGVycygpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfQ1RSTENMSUNLTUVOVQorICAgIGlmIChHZXN0YWx0KGdlc3RhbHRDb250ZXh0dWFsTWVudUF0dHIsICZnZXN0YWx0X3JjKSA9PSBub0VycikKKwlndWkuTWFjT1NIYXZlQ250eE1lbnUgPSBCaXRUc3QoJmdlc3RhbHRfcmMsIDMxLWdlc3RhbHRDb250ZXh0dWFsTWVudVRyYXBBdmFpbGFibGUpOworICAgIGVsc2UKKwlndWkuTWFjT1NIYXZlQ250eE1lbnUgPSBmYWxzZTsKKworICAgIGlmIChndWkuTWFjT1NIYXZlQ250eE1lbnUpCisJZ3VpLk1hY09TSGF2ZUNudHhNZW51ID0gKEluaXRDb250ZXh0dWFsTWVudXMoKT09bm9FcnIpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfU0lPVVgKKyAgICBTSU9VWFNldHRpbmdzLnN0YW5kYWxvbmUgPSBmYWxzZTsKKyAgICBTSU9VWFNldHRpbmdzLmluaXRpYWxpemVUQiA9IGZhbHNlOworICAgIFNJT1VYU2V0dGluZ3Muc2V0dXBtZW51cyA9IGZhbHNlOworICAgIFNJT1VYU2V0dGluZ3MuYXNrdG9zYXZlb25jbG9zZSA9IGZhbHNlOworICAgIFNJT1VYU2V0dGluZ3Muc2hvd3N0YXR1c2xpbmUgPSB0cnVlOworICAgIFNJT1VYU2V0dGluZ3MudG9wcGl4ZWwgPSAzMDA7CisgICAgU0lPVVhTZXR0aW5ncy5sZWZ0cGl4ZWwgPSAxMDsKKyAgICBJbnN0YWxsQ29uc29sZSAoMSk7IC8qIGZpbGVubyhzdGRvdXQpID0gMSwgb24gcGFnZSA0MzAgb2YgTVNMIEMgKi8KKyAgICBwcmludGYgKCJEZWJ1Z2dpbmcgY29uc29sZSBlbmFibGVkXG4iKTsKKyAgICAvKglTSU9VWFNldFRpdGxlICgoY2hhcl91ICopICJWaW0gU3Rkb3V0Iik7ICovCisjZW5kaWYKKworICAgIHBvbW1lID0gTmV3TWVudSAoMjU2LCAiXHBcMDI0Iik7IC8qIDB4MTQ9ID0gQXBwbGUgTWVudSAqLworCisgICAgQXBwZW5kTWVudSAocG9tbWUsICJccEFib3V0IFZJTSIpOworI2lmbmRlZiBVU0VfQ0FSQk9OSVpFRAorICAgIEFwcGVuZE1lbnUgKHBvbW1lLCAiXHAtIik7CisgICAgQXBwZW5kUmVzTWVudSAocG9tbWUsICdEUlZSJyk7CisjZW5kaWYKKworICAgIEluc2VydE1lbnUgKHBvbW1lLCAwKTsKKworICAgIERyYXdNZW51QmFyKCk7CisKKworI2lmbmRlZiBVU0VfT0ZGU0VURURfV0lORE9XCisgICAgU2V0UmVjdCAoJndpbmRSZWN0LCAxMCwgNDgsIDEwKzgwKjcgKyAxNiwgNDgrMjQqMTEpOworI2Vsc2UKKyAgICBTZXRSZWN0ICgmd2luZFJlY3QsIDMwMCwgNDAsIDMwMCs4MCo3ICsgMTYsIDQwKzI0KjExKTsKKyNlbmRpZgorCisgICAgZ3VpLlZpbVdpbmRvdyA9IE5ld0NXaW5kb3cobmlsLCAmd2luZFJlY3QsICJccGdWaW0gb24gTWFjaW50b3NoIiwgdHJ1ZSwKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorCQkJem9vbURvY1Byb2MsCisjZWxzZQorCQkJZG9jdW1lbnRQcm9jLAorI2VuZGlmCisJCQkoV2luZG93UHRyKS0xTCwgdHJ1ZSwgMCk7CisgICAgSW5zdGFsbFJlY2VpdmVIYW5kbGVyKChEcmFnUmVjZWl2ZUhhbmRsZXJVUFApcmVjZWl2ZUhhbmRsZXIsCisJICAgIGd1aS5WaW1XaW5kb3csIE5VTEwpOworI2lmZGVmIFVTRV9DQVJCT05JWkVECisgICAgU2V0UG9ydFdpbmRvd1BvcnQgKCBndWkuVmltV2luZG93ICk7CisjZWxzZQorICAgIFNldFBvcnQoZ3VpLlZpbVdpbmRvdyk7CisjZW5kaWYKKworICAgIGd1aS5jaGFyX3dpZHRoID0gNzsKKyAgICBndWkuY2hhcl9oZWlnaHQgPSAxMTsKKyAgICBndWkuY2hhcl9hc2NlbnQgPSA2OworICAgIGd1aS5udW1fcm93cyA9IDI0OworICAgIGd1aS5udW1fY29scyA9IDgwOworICAgIGd1aS5pbl9mb2N1cyA9IFRSVUU7IC8qIEZvciB0aGUgbW9tZW50IC0+IHN5bi4gb2YgZnJvbnQgYXBwbGljYXRpb24gKi8KKworI2lmIFRBUkdFVF9BUElfTUFDX0NBUkJPTgorICAgIGdTY3JvbGxBY3Rpb24gPSBOZXdDb250cm9sQWN0aW9uVVBQIChndWlfbWFjX3Njcm9sbF9hY3Rpb24pOworICAgIGdTY3JvbGxEcmFnICAgPSBOZXdDb250cm9sQWN0aW9uVVBQIChndWlfbWFjX2RyYWdfdGh1bWIpOworI2Vsc2UKKyAgICBnU2Nyb2xsQWN0aW9uID0gTmV3Q29udHJvbEFjdGlvblByb2MgKGd1aV9tYWNfc2Nyb2xsX2FjdGlvbik7CisgICAgZ1Njcm9sbERyYWcgICA9IE5ld0NvbnRyb2xBY3Rpb25Qcm9jIChndWlfbWFjX2RyYWdfdGh1bWIpOworI2VuZGlmCisKKyAgICAvKiBHZXR0aW5nIGEgaGFuZGxlIHRvIHRoZSBIZWxwIG1lbnUgKi8KKyNpZmRlZiBVU0VfSEVMUE1FTlUKKyMgaWZkZWYgVVNFX0NBUkJPTklaRUQKKyAgICBITUdldEhlbHBNZW51KCZndWkuTWFjT1NIZWxwTWVudSwgTlVMTCk7CisjIGVsc2UKKyAgICAodm9pZCkgSE1HZXRIZWxwTWVudUhhbmRsZSgmZ3VpLk1hY09TSGVscE1lbnUpOworIyBlbmRpZgorCisgICAgaWYgKGd1aS5NYWNPU0hlbHBNZW51ICE9IG5pbCkKKwlndWkuTWFjT1NIZWxwSXRlbXMgPSBDb3VudE1lbnVJdGVtcyAoZ3VpLk1hY09TSGVscE1lbnUpOworICAgIGVsc2UKKwlndWkuTWFjT1NIZWxwSXRlbXMgPSAwOworI2VuZGlmCisKKyAgICBkcmFnUmVjdEVuYmwgPSBGQUxTRTsKKyAgICBkcmFnUmduID0gTlVMTDsKKyAgICBkcmFnUmVjdENvbnRyb2wgPSBrQ3JlYXRlRW1wdHk7CisgICAgY3Vyc29yUmduID0gTmV3UmduKCk7CisjZW5kaWYKKyAgICAvKiBEaXNwbGF5IGFueSBwZW5kaW5nIGVycm9yIG1lc3NhZ2VzICovCisgICAgZGlzcGxheV9lcnJvcnMoKTsKKworICAgIC8qIEdldCBiYWNrZ3JvdW5kL2ZvcmVncm91bmQgY29sb3JzIGZyb20gc3lzdGVtICovCisgICAgLyogVE9ETzogZG8gdGhlIGFwcHJvcmlhdGUgY2FsbCB0byBnZXQgcmVhbCBkZWZhdWx0cyAqLworICAgIGd1aS5ub3JtX3BpeGVsID0gMHgwMDAwMDAwMDsKKyAgICBndWkuYmFja19waXhlbCA9IDB4MDBGRkZGRkY7CisKKyAgICAvKiBHZXQgdGhlIGNvbG9ycyBmcm9tIHRoZSAiTm9ybWFsIiBncm91cCAoc2V0IGluIHN5bnRheC5jIG9yIGluIGEgdmltcmMKKyAgICAgKiBmaWxlKS4gKi8KKyAgICBzZXRfbm9ybWFsX2NvbG9ycygpOworCisgICAgLyoKKyAgICAgKiBDaGVjayB0aGF0IG5vbmUgb2YgdGhlIGNvbG9ycyBhcmUgdGhlIHNhbWUgYXMgdGhlIGJhY2tncm91bmQgY29sb3IuCisgICAgICogVGhlbiBzdG9yZSB0aGUgY3VycmVudCB2YWx1ZXMgYXMgdGhlIGRlZmF1bHRzLgorICAgICAqLworICAgIGd1aV9jaGVja19jb2xvcnMoKTsKKyAgICBndWkuZGVmX25vcm1fcGl4ZWwgPSBndWkubm9ybV9waXhlbDsKKyAgICBndWkuZGVmX2JhY2tfcGl4ZWwgPSBndWkuYmFja19waXhlbDsKKworICAgIC8qIEdldCB0aGUgY29sb3JzIGZvciB0aGUgaGlnaGxpZ2h0IGdyb3VwcyAoZ3VpX2NoZWNrX2NvbG9ycygpIG1pZ2h0IGhhdmUKKyAgICAgKiBjaGFuZ2VkIHRoZW0pICovCisgICAgaGlnaGxpZ2h0X2d1aV9zdGFydGVkKCk7CisKKyAgICAvKgorICAgICAqIFNldHRpbmcgdGhlIGd1aSBjb25zdGFudHMKKyAgICAgKi8KKyNpZmRlZiBGRUFUX01FTlUKKyAgICBndWkubWVudV9oZWlnaHQgPSAwOworI2VuZGlmCisgICAgZ3VpLnNjcm9sbGJhcl9oZWlnaHQgPSBndWkuc2Nyb2xsYmFyX3dpZHRoID0gMTU7IC8qIGNoZWF0IDEgb3ZlcmxhcCAqLworICAgIGd1aS5ib3JkZXJfb2Zmc2V0ID0gZ3VpLmJvcmRlcl93aWR0aCA9IDI7CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKE1BQ09TX1gpCisgICAgLyogSWYgUXVhcnR6LXN0eWxlIHRleHQgYW50aWFsaWFzaW5nIGlzIGF2YWlsYWJsZSAoc2VlCisgICAgICAgZ3VpX21jaF9kcmF3X3N0cmluZygpIGJlbG93KSwgZW5hYmxlIGl0IGZvciBhbGwgZm9udCBzaXplcy4gKi8KKyAgICB2aW1fc2V0ZW52KChjaGFyX3UgKikiUURURVhUX01JTlNJWkUiLCAoY2hhcl91ICopIjEiKTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX01PVVNFV0hFRUwKKyAgICBldmVudFR5cGVTcGVjLmV2ZW50Q2xhc3MgPSBrRXZlbnRDbGFzc01vdXNlOworICAgIGV2ZW50VHlwZVNwZWMuZXZlbnRLaW5kID0ga0V2ZW50TW91c2VXaGVlbE1vdmVkOworICAgIG1vdXNlV2hlZWxIYW5kbGVyVVBQID0gTmV3RXZlbnRIYW5kbGVyVVBQKGd1aV9tYWNfbW91c2Vfd2hlZWwpOworICAgIGlmIChub0VyciAhPSBJbnN0YWxsQXBwbGljYXRpb25FdmVudEhhbmRsZXIobW91c2VXaGVlbEhhbmRsZXJVUFAsIDEsCisJCQkJICZldmVudFR5cGVTcGVjLCBOVUxMLCAmbW91c2VXaGVlbEhhbmRsZXJSZWYpKQorICAgIHsKKwltb3VzZVdoZWVsSGFuZGxlclJlZiA9IE5VTEw7CisJRGlzcG9zZUV2ZW50SGFuZGxlclVQUChtb3VzZVdoZWVsSGFuZGxlclVQUCk7CisJbW91c2VXaGVlbEhhbmRsZXJVUFAgPSBOVUxMOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NQllURQorICAgIHNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJ0ZXJtZW5jb2RpbmciLCAwTCwgKGNoYXJfdSAqKSJtYWNyb21hbiIsIDApOworI2VuZGlmCisKKyAgICAvKiBUT0RPOiBMb2FkIGJpdG1hcCBpZiB1c2luZyBUT09MQkFSICovCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvciBoYXMgYmVlbiBjaGFuZ2VkLgorICovCisgICAgdm9pZAorZ3VpX21jaF9uZXdfY29sb3JzKCkKK3sKKyAgICAvKiBUT0RPOgorICAgICAqIFRoaXMgcHJvYyBpcyBjYWxsZWQgd2hlbiBOb3JtYWwgaXMgc2V0IHRvIGEgdmFsdWUKKyAgICAgKiBzbyB3aGF0IG1zdXQgYmUgZG9uZT8gSSBkb24ndCBrbm93CisgICAgICovCit9CisKKy8qCisgKiBPcGVuIHRoZSBHVUkgd2luZG93IHdoaWNoIHdhcyBjcmVhdGVkIGJ5IGEgY2FsbCB0byBndWlfbWNoX2luaXQoKS4KKyAqLworICAgIGludAorZ3VpX21jaF9vcGVuKCkKK3sKKyAgICBTaG93V2luZG93KGd1aS5WaW1XaW5kb3cpOworCisgICAgaWYgKGd1aV93aW5feCAhPSAtMSAmJiBndWlfd2luX3kgIT0gLTEpCisJZ3VpX21jaF9zZXRfd2lucG9zKGd1aV93aW5feCwgZ3VpX3dpbl95KTsKKworI2lmZGVmIFVTRV9DQVJCT05JWkVECisgICAgLyoKKyAgICAgKiBNYWtlIHRoZSBHVUkgdGhlIGZvcmVncm91bmQgcHJvY2VzcyAoaW4gY2FzZSBpdCB3YXMgbGF1bmNoZWQKKyAgICAgKiBmcm9tIHRoZSBUZXJtaW5hbCBvciB2aWEgOmd1aSkuCisgICAgICovCisgICAgeworCVByb2Nlc3NTZXJpYWxOdW1iZXIgcHNuOworCWlmIChHZXRDdXJyZW50UHJvY2VzcygmcHNuKSA9PSBub0VycikKKwkgICAgU2V0RnJvbnRQcm9jZXNzKCZwc24pOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIE9LOworfQorCisgICAgdm9pZAorZ3VpX21jaF9leGl0KGludCByYykKK3sKKyAgICAvKiBUT0RPOiBmaW5kIG91dCBhbGwgd2hhdCBpcyBtaXNzaW5nIGhlcmU/ICovCisgICAgRGlzcG9zZVJnbihjdXJzb3JSZ24pOworCisjaWZkZWYgVVNFX01PVVNFV0hFRUwKKyAgICBpZiAobW91c2VXaGVlbEhhbmRsZXJVUFAgIT0gTlVMTCkKKwlEaXNwb3NlRXZlbnRIYW5kbGVyVVBQKG1vdXNlV2hlZWxIYW5kbGVyVVBQKTsKKyNlbmRpZgorCisgICAgLyogRXhpdCB0byBzaGVsbD8gKi8KKyAgICBleGl0KHJjKTsKK30KKworLyoKKyAqIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93LgorICovCisgICAgaW50CitndWlfbWNoX2dldF93aW5wb3MoaW50ICp4LCBpbnQgKnkpCit7CisgICAgLyogVE9ETyAqLworI2lmZGVmIFVTRV9DQVJCT05JWkVECisgICAgUmVjdAlib3VuZHM7CisgICAgT1NTdGF0dXMJc3RhdHVzOworCisgICAgLyogQ2FyYm9uID49IDEuMC4yLCBNYWNPUyA+PSA4LjUgKi8KKyAgICBzdGF0dXMgPSBHZXRXaW5kb3dCb3VuZHMgKGd1aS5WaW1XaW5kb3csIGtXaW5kb3dTdHJ1Y3R1cmVSZ24sICZib3VuZHMpOworCisgICAgaWYgKHN0YXR1cyAhPSBub0VycikKKwlyZXR1cm4gRkFJTDsKKyAgICAqeCA9IGJvdW5kcy5sZWZ0OworICAgICp5ID0gYm91bmRzLnRvcDsKKyAgICByZXR1cm4gT0s7CisjZW5kaWYKKyAgICByZXR1cm4gRkFJTDsKK30KKworLyoKKyAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93IHRvIHRoZSBnaXZlbgorICogY29vcmRpbmF0ZXMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF93aW5wb3MoaW50IHgsIGludCB5KQoreworICAgIC8qIFRPRE86ICBTaG91bGQgbWFrZSBzdXJlIHRoZSB3aW5kb3cgaXMgbW92ZSB3aXRoaW4gcmFuZ2UKKyAgICAgKgkgICAgICBlLmcuOiB5ID4gfjE2IFtNZW51IGJhcl0sIHggPiAwLCB4IDwgc2NyZWVuIHdpZHRoCisgICAgICovCisgICAgTW92ZVdpbmRvdyhndWkuVmltV2luZG93LCB4LCB5LCBUUlVFKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3NoZWxsc2l6ZSgKKyAgICBpbnQJCXdpZHRoLAorICAgIGludAkJaGVpZ2h0LAorICAgIGludAkJbWluX3dpZHRoLAorICAgIGludAkJbWluX2hlaWdodCwKKyAgICBpbnQJCWJhc2Vfd2lkdGgsCisgICAgaW50CQliYXNlX2hlaWdodCkKK3sKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorICAgIENHcmFmUHRyCVZpbVBvcnQ7CisgICAgUmVjdAlWaW1Cb3VuZDsKKyNlbmRpZgorCisgICAgaWYgKGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfTEVGVF0pCisgICAgeworI2lmZGVmIFVTRV9DQVJCT05JWkVECisJVmltUG9ydCA9IEdldFdpbmRvd1BvcnQgKCBndWkuVmltV2luZG93ICk7CisJR2V0UG9ydEJvdW5kcyAoVmltUG9ydCwgJlZpbUJvdW5kKTsKKwlWaW1Cb3VuZC5sZWZ0ID0gLWd1aS5zY3JvbGxiYXJfd2lkdGg7IC8qICsgMTsqLworCVNldFBvcnRCb3VuZHMgKFZpbVBvcnQsICZWaW1Cb3VuZCk7CisgICAgLyoJR2V0V2luZG93Qm91bmRzKGd1aS5WaW1XaW5kb3csIGtXaW5kb3dHbG9iYWxQb3J0UmduLCAmd2luUG9ydFJlY3QpOyA/PyovCisjZWxzZQorCWd1aS5WaW1XaW5kb3ctPnBvcnRSZWN0LmxlZnQgPSAtZ3VpLnNjcm9sbGJhcl93aWR0aDsgLyogKyAxOyovCisgICAgLyoJU2V0V2luZG93Qm91bmRzKGd1aS5WaW1XaW5kb3csIGtXaW5kb3dHbG9iYWxQb3J0UmduLCAmd2luUG9ydFJlY3QpOyA/PyovCisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorCVZpbVBvcnQgPSBHZXRXaW5kb3dQb3J0ICggZ3VpLlZpbVdpbmRvdyApOworCUdldFBvcnRCb3VuZHMgKFZpbVBvcnQsICZWaW1Cb3VuZCk7CisJVmltQm91bmQubGVmdCA9IDA7CisJU2V0UG9ydEJvdW5kcyAoVmltUG9ydCwgJlZpbUJvdW5kKTsKKyNlbHNlCisJZ3VpLlZpbVdpbmRvdy0+cG9ydFJlY3QubGVmdCA9IDA7CisjZW5kaWY7CisgICAgfQorCisgICAgU2l6ZVdpbmRvdyhndWkuVmltV2luZG93LCB3aWR0aCwgaGVpZ2h0LCBUUlVFKTsKKworICAgIGd1aV9yZXNpemVfc2hlbGwod2lkdGgsIGhlaWdodCk7Cit9CisKKy8qCisgKiBHZXQgdGhlIHNjcmVlbiBkaW1lbnNpb25zLgorICogQWxsb3cgMTAgcGl4ZWxzIGZvciBob3Jpem9udGFsIGJvcmRlcnMsIDQwIGZvciB2ZXJ0aWNhbCBib3JkZXJzLgorICogSXMgdGhlcmUgbm8gd2F5IHRvIGZpbmQgb3V0IGhvdyB3aWRlIHRoZSBib3JkZXJzIHJlYWxseSBhcmU/CisgKiBUT0RPOiBBZGQgbGl2ZSB1ZGF0ZSBvZiB0aG9zZSB2YWx1ZSBvbiBzdXNwZW5kL3Jlc3VtZS4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZ2V0X3NjcmVlbl9kaW1lbnNpb25zKHNjcmVlbl93LCBzY3JlZW5faCkKKyAgICBpbnQJCSpzY3JlZW5fdzsKKyAgICBpbnQJCSpzY3JlZW5faDsKK3sKKyAgICBHREhhbmRsZQlkb21pbmFudERldmljZSA9IEdldE1haW5EZXZpY2UoKTsKKyAgICBSZWN0CXNjcmVlblJlY3QgPSAoKipkb21pbmFudERldmljZSkuZ2RSZWN0OworCisgICAgKnNjcmVlbl93ID0gc2NyZWVuUmVjdC5yaWdodCAtIDEwOworICAgICpzY3JlZW5faCA9IHNjcmVlblJlY3QuYm90dG9tIC0gNDA7Cit9CisKKworCisvKgorICogSW5pdGlhbGlzZSB2aW0gdG8gdXNlIHRoZSBmb250IHdpdGggdGhlIGdpdmVuIG5hbWUuCVJldHVybiBGQUlMIGlmIHRoZSBmb250CisgKiBjb3VsZCBub3QgYmUgbG9hZGVkLCBPSyBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfaW5pdF9mb250KGZvbnRfbmFtZSwgZm9udHNldCkKKyAgICBjaGFyX3UJKmZvbnRfbmFtZTsKKyAgICBpbnQJCWZvbnRzZXQ7CSAgICAvKiBub3QgdXNlZCAqLworeworICAgIC8qIFRPRE86IEFkZCBzdXBwb3J0IGZvciBib2xkIGl0YWxpYyB1bmRlcmxpbmUgcHJvcG9ydGlvbmFsIGV0Yy4uLiAqLworICAgIFN0cjI1NQlzdWdnZXN0ZWRGb250ID0gIlxwTW9uYWNvIjsKKyAgICBpbnQJCXN1Z2dlc3RlZFNpemUgPSA5OworICAgIEZvbnRJbmZvCWZvbnRfaW5mbzsKKyAgICBzaG9ydAlmb250X2lkOworICAgIEd1aUZvbnQJZm9udDsKKworICAgIGlmIChmb250X25hbWUgPT0gTlVMTCkKKyAgICB7CisJLyogRmlyc3QgdHJ5IHRvIGdldCB0aGUgc3VnZ2VzdGVkIGZvbnQgKi8KKwlHZXRGTnVtKHN1Z2dlc3RlZEZvbnQsICZmb250X2lkKTsKKworCWlmIChmb250X2lkID09IDApCisJeworCSAgICAvKiBUaGVuIHBpY2t1cCB0aGUgc3RhbmRhcmQgYXBwbGljYXRpb24gZm9udCAqLworCSAgICBmb250X2lkID0gR2V0QXBwRm9udCgpOworCX0KKwlmb250ID0gKHN1Z2dlc3RlZFNpemUgPDwgMTYpICsgKChsb25nKSBmb250X2lkICYgMHhGRkZGKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlmb250ID0gZ3VpX21hY19maW5kX2ZvbnQgKGZvbnRfbmFtZSk7CisKKwlpZiAoZm9udCA9PSBOT0ZPTlQpCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKyAgICBndWkubm9ybV9mb250ID0gZm9udDsKKworICAgIFRleHRTaXplIChmb250ID4+IDE2KTsKKyAgICBUZXh0Rm9udCAoZm9udCAmIDB4RkZGRik7CisKKyAgICBHZXRGb250SW5mbyAoJmZvbnRfaW5mbyk7CisKKyAgICBndWkuY2hhcl9hc2NlbnQgPSBmb250X2luZm8uYXNjZW50OworICAgIGd1aS5jaGFyX3dpZHRoICA9IENoYXJXaWR0aCAoJ18nKTsKKyAgICBndWkuY2hhcl9oZWlnaHQgPSBmb250X2luZm8uYXNjZW50ICsgZm9udF9pbmZvLmRlc2NlbnQgKyBwX2xpbmVzcGFjZTsKKworICAgIHJldHVybiBPSzsKKworfQorCisgICAgaW50CitndWlfbWNoX2FkanVzdF9jaGFyc2l6ZSgpCit7CisgICAgRm9udEluZm8gICAgZm9udF9pbmZvOworCisgICAgR2V0Rm9udEluZm8gKCZmb250X2luZm8pOworICAgIGd1aS5jaGFyX2hlaWdodCA9IGZvbnRfaW5mby5hc2NlbnQgKyBmb250X2luZm8uZGVzY2VudCArIHBfbGluZXNwYWNlOworICAgIGd1aS5jaGFyX2FzY2VudCA9IGZvbnRfaW5mby5hc2NlbnQgKyBwX2xpbmVzcGFjZSAvIDI7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogR2V0IGEgZm9udCBzdHJ1Y3R1cmUgZm9yIGhpZ2hsaWdodGluZy4KKyAqLworICAgIEd1aUZvbnQKK2d1aV9tY2hfZ2V0X2ZvbnQobmFtZSwgZ2l2ZUVycm9ySWZNaXNzaW5nKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBpbnQJCWdpdmVFcnJvcklmTWlzc2luZzsKK3sKKyAgICBHdWlGb250IGZvbnQ7CisKKyAgICBmb250ID0gZ3VpX21hY19maW5kX2ZvbnQobmFtZSk7CisKKyAgICBpZiAoZm9udCA9PSBOT0ZPTlQpCisgICAgeworCWlmIChnaXZlRXJyb3JJZk1pc3NpbmcpCisJICAgIEVNU0cyKF8oZV9mb250KSwgbmFtZSk7CisJcmV0dXJuIE5PRk9OVDsKKyAgICB9CisgICAgLyoKKyAgICAgKiBUT0RPIDogQWNjZXB0IG9ubHkgbW9ub3NwYWNlCisgICAgICovCisKKyAgICByZXR1cm4gZm9udDsKK30KKworLyoKKyAqIFNldCB0aGUgY3VycmVudCB0ZXh0IGZvbnQuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9mb250KGZvbnQpCisgICAgR3VpRm9udAlmb250OworeworICAgIC8qCisgICAgICogVE9ETzogbWF5YmUgYXZvaWQgc2V0IGFnYWluIHRoZSBjdXJyZW50IGZvbnQuCisgICAgICovCisgICAgVGV4dFNpemUoZm9udCA+PiAxNik7CisgICAgVGV4dEZvbnQoZm9udCAmIDB4RkZGRik7Cit9CisKKyNpZiAwIC8qIG5vdCB1c2VkICovCisvKgorICogUmV0dXJuIFRSVUUgaWYgdGhlIHR3byBmb250cyBnaXZlbiBhcmUgZXF1aXZhbGVudC4KKyAqLworICAgIGludAorZ3VpX21jaF9zYW1lX2ZvbnQoZjEsIGYyKQorICAgIEd1aUZvbnQJZjE7CisgICAgR3VpRm9udAlmMjsKK3sKKyAgICByZXR1cm4gZjEgPT0gZjI7Cit9CisjZW5kaWYKKworLyoKKyAqIElmIGEgZm9udCBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCwgZnJlZSBpdHMgc3RydWN0dXJlLgorICovCisgICAgdm9pZAorZ3VpX21jaF9mcmVlX2ZvbnQoZm9udCkKKyAgICBHdWlGb250CWZvbnQ7Cit7CisgICAgLyoKKyAgICAgKiBGcmVlIGZvbnQgd2hlbiAiZm9udCIgaXMgbm90IDAuCisgICAgICogTm90aGluZyB0byBkbyBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgc2luY2UKKyAgICAgKiBub3RoaW5nIGlzIGFsbG9jYXRlZCBmb3IgZWFjaCBmb250IHVzZWQuCisgICAgICovCit9CisKKyAgICBzdGF0aWMgaW50CitoZXhfZGlnaXQoYykKKyAgICBpbnQJCWM7Cit7CisgICAgaWYgKGlzZGlnaXQoYykpCisJcmV0dXJuIGMgLSAnMCc7CisgICAgYyA9IFRPTE9XRVJfQVNDKGMpOworICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKKwlyZXR1cm4gYyAtICdhJyArIDEwOworICAgIHJldHVybiAtMTAwMDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgUGl4ZWwgdmFsdWUgKGNvbG9yKSBmb3IgdGhlIGdpdmVuIGNvbG9yIG5hbWUuICBUaGlzIHJvdXRpbmUgd2FzCisgKiBwcmV0dHkgbXVjaCB0YWtlbiBmcm9tIGV4YW1wbGUgY29kZSBpbiB0aGUgU2lsaWNvbiBHcmFwaGljcyBPU0YvTW90aWYKKyAqIFByb2dyYW1tZXIncyBHdWlkZS4KKyAqIFJldHVybiBJTlZBTENPTE9SIHdoZW4gZmFpbGVkLgorICovCisgICAgZ3VpY29sb3JfVAorZ3VpX21jaF9nZXRfY29sb3IobmFtZSkKKyAgICBjaGFyX3UgKm5hbWU7Cit7CisgICAgLyogVE9ETzogQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgbmFtZWQgY29sb3Igb2YgTWFjT1MgOAorICAgICAqLworICAgIFJHQkNvbG9yCU1hY0NvbG9yOworLy8gICAgZ3VpY29sb3JfVAljb2xvciA9IDA7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBndWljb2xvcl90VGFibGUKKyAgICB7CisJY2hhcgkgICAgKm5hbWU7CisJZ3VpY29sb3JfVCAgY29sb3I7CisgICAgfSBndWljb2xvcl90VGFibGU7CisKKyAgICAvKgorICAgICAqIFRoZSBjb21tZW50IGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lIGlzIHRoZSBzb3VyY2UKKyAgICAgKiAoTWFjLCBXaW5kb3csIFVuaXgpIGFuZCB0aGUgbnVtYmVyIGlzIHRoZSB1bml4IHJnYi50eHQgdmFsdWUKKyAgICAgKi8KKyAgICBzdGF0aWMgZ3VpY29sb3JfdFRhYmxlIHRhYmxlW10gPQorICAgIHsKKwl7IkJsYWNrIiwJUkdCKDB4MDAsIDB4MDAsIDB4MDApfSwKKwl7ImRhcmtncmF5IiwJUkdCKDB4ODAsIDB4ODAsIDB4ODApfSwgLypXKi8KKwl7ImRhcmtncmV5IiwJUkdCKDB4ODAsIDB4ODAsIDB4ODApfSwgLypXKi8KKwl7IkdyYXkiLAlSR0IoMHhDMCwgMHhDMCwgMHhDMCl9LCAvKlcqLworCXsiR3JleSIsCVJHQigweEMwLCAweEMwLCAweEMwKX0sIC8qVyovCisJeyJsaWdodGdyYXkiLAlSR0IoMHhFMCwgMHhFMCwgMHhFMCl9LCAvKlcqLworCXsibGlnaHRncmV5IiwJUkdCKDB4RTAsIDB4RTAsIDB4RTApfSwgLypXKi8KKwl7IndoaXRlIiwJUkdCKDB4RkYsIDB4RkYsIDB4RkYpfSwKKwl7ImRhcmtyZWQiLAlSR0IoMHg4MCwgMHgwMCwgMHgwMCl9LCAvKlcqLworCXsicmVkIiwJCVJHQigweERELCAweDA4LCAweDA2KX0sIC8qTSovCisJeyJsaWdodHJlZCIsCVJHQigweEZGLCAweEEwLCAweEEwKX0sIC8qVyovCisJeyJEYXJrQmx1ZSIsCVJHQigweDAwLCAweDAwLCAweDgwKX0sIC8qVyovCisJeyJCbHVlIiwJUkdCKDB4MDAsIDB4MDAsIDB4RDQpfSwgLypNKi8KKwl7ImxpZ2h0Ymx1ZSIsCVJHQigweEEwLCAweEEwLCAweEZGKX0sIC8qVyovCisJeyJEYXJrR3JlZW4iLAlSR0IoMHgwMCwgMHg4MCwgMHgwMCl9LCAvKlcqLworCXsiR3JlZW4iLAlSR0IoMHgwMCwgMHg2NCwgMHgxMSl9LCAvKk0qLworCXsibGlnaHRncmVlbiIsCVJHQigweEEwLCAweEZGLCAweEEwKX0sIC8qVyovCisJeyJEYXJrQ3lhbiIsCVJHQigweDAwLCAweDgwLCAweDgwKX0sIC8qVyA/MHgzMDdEN0UgKi8KKwl7ImN5YW4iLAlSR0IoMHgwMiwgMHhBQiwgMHhFQSl9LCAvKk0qLworCXsibGlnaHRjeWFuIiwJUkdCKDB4QTAsIDB4RkYsIDB4RkYpfSwgLypXKi8KKwl7ImRhcmttYWdlbnRhIiwJUkdCKDB4ODAsIDB4MDAsIDB4ODApfSwgLypXKi8KKwl7Im1hZ2VudGEiLAlSR0IoMHhGMiwgMHgwOCwgMHg4NCl9LCAvKk0qLworCXsibGlnaHRtYWdlbnRhIixSR0IoMHhGMCwgMHhBMCwgMHhGMCl9LCAvKlcqLworCXsiYnJvd24iLAlSR0IoMHg4MCwgMHg0MCwgMHg0MCl9LCAvKlcqLworCXsieWVsbG93IiwJUkdCKDB4RkMsIDB4RjMsIDB4MDUpfSwgLypNKi8KKwl7ImxpZ2h0eWVsbG93IiwJUkdCKDB4RkYsIDB4RkYsIDB4QTApfSwgLypNKi8KKwl7IlNlYUdyZWVuIiwJUkdCKDB4MkUsIDB4OEIsIDB4NTcpfSwgLypXIDB4NEU4OTc1ICovCisJeyJvcmFuZ2UiLAlSR0IoMHhGQywgMHg4MCwgMHgwMCl9LCAvKlcgMHhGODdBMTcgKi8KKwl7IlB1cnBsZSIsCVJHQigweEEwLCAweDIwLCAweEYwKX0sIC8qVyAweDhlMzVlNSAqLworCXsiU2xhdGVCbHVlIiwJUkdCKDB4NkEsIDB4NUEsIDB4Q0QpfSwgLypXIDB4NzM3Q0ExICovCisJeyJWaW9sZXQiLAlSR0IoMHg4RCwgMHgzOCwgMHhDOSl9LCAvKlUqLworICAgIH07CisKKyAgICBpbnQJCXIsIGcsIGI7CisgICAgaW50CQlpOworCisgICAgaWYgKG5hbWVbMF0gPT0gJyMnICYmIHN0cmxlbigoY2hhciAqKSBuYW1lKSA9PSA3KQorICAgIHsKKwkvKiBOYW1lIGlzIGluICIjcnJnZ2JiIiBmb3JtYXQgKi8KKwlyID0gaGV4X2RpZ2l0KG5hbWVbMV0pICogMTYgKyBoZXhfZGlnaXQobmFtZVsyXSk7CisJZyA9IGhleF9kaWdpdChuYW1lWzNdKSAqIDE2ICsgaGV4X2RpZ2l0KG5hbWVbNF0pOworCWIgPSBoZXhfZGlnaXQobmFtZVs1XSkgKiAxNiArIGhleF9kaWdpdChuYW1lWzZdKTsKKwlpZiAociA8IDAgfHwgZyA8IDAgfHwgYiA8IDApCisJICAgIHJldHVybiBJTlZBTENPTE9SOworCXJldHVybiBSR0IociwgZywgYik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKFNUUklDTVAgKG5hbWUsICJoaWxpdGUiKSA9PSAwKQorCXsKKwkgICAgTE1HZXRIaWxpdGVSR0IgKCZNYWNDb2xvcik7CisJICAgIHJldHVybiAoUkdCIChNYWNDb2xvci5yZWQgPj4gOCwgTWFjQ29sb3IuZ3JlZW4gPj4gOCwgTWFjQ29sb3IuYmx1ZSA+PiA4KSk7CisJfQorCS8qIENoZWNrIGlmIHRoZSBuYW1lIGlzIG9uZSBvZiB0aGUgY29sb3JzIHdlIGtub3cgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRhYmxlKSAvIHNpemVvZih0YWJsZVswXSk7IGkrKykKKwkgICAgaWYgKFNUUklDTVAobmFtZSwgdGFibGVbaV0ubmFtZSkgPT0gMCkKKwkJcmV0dXJuIHRhYmxlW2ldLmNvbG9yOworICAgIH0KKworCisgICAgLyoKKyAgICAgKiBMYXN0IGF0dGVtcHQuIExvb2sgaW4gdGhlIGZpbGUgIiRWSU0vcmdiLnR4dCIuCisgICAgICovCisgICAgeworI2RlZmluZSBMSU5FX0xFTiAxMDAKKwlGSUxFCSpmZDsKKwljaGFyCWxpbmVbTElORV9MRU5dOworCWNoYXJfdQkqZm5hbWU7CisKKyNpZmRlZiBDT0xPTl9BU19QQVRIU0VQCisJZm5hbWUgPSBleHBhbmRfZW52X3NhdmUoKGNoYXJfdSAqKSIkVklNUlVOVElNRTpyZ2IudHh0Iik7CisjZWxzZQorCWZuYW1lID0gZXhwYW5kX2Vudl9zYXZlKChjaGFyX3UgKikiJFZJTVJVTlRJTUUvcmdiLnR4dCIpOworI2VuZGlmCisJaWYgKGZuYW1lID09IE5VTEwpCisJICAgIHJldHVybiBJTlZBTENPTE9SOworCisJZmQgPSBmb3BlbigoY2hhciAqKWZuYW1lLCAicnQiKTsKKwl2aW1fZnJlZShmbmFtZSk7CisJaWYgKGZkID09IE5VTEwpCisJICAgIHJldHVybiBJTlZBTENPTE9SOworCisJd2hpbGUgKCFmZW9mKGZkKSkKKwl7CisJICAgIGludAkJbGVuOworCSAgICBpbnQJCXBvczsKKwkgICAgY2hhcgkqY29sb3I7CisKKwkgICAgZmdldHMobGluZSwgTElORV9MRU4sIGZkKTsKKwkgICAgbGVuID0gc3RybGVuKGxpbmUpOworCisJICAgIGlmIChsZW4gPD0gMSB8fCBsaW5lW2xlbi0xXSAhPSAnXG4nKQorCQljb250aW51ZTsKKworCSAgICBsaW5lW2xlbi0xXSA9ICdcMCc7CisKKwkgICAgaSA9IHNzY2FuZihsaW5lLCAiJWQgJWQgJWQgJW4iLCAmciwgJmcsICZiLCAmcG9zKTsKKwkgICAgaWYgKGkgIT0gMykKKwkJY29udGludWU7CisKKwkgICAgY29sb3IgPSBsaW5lICsgcG9zOworCisJICAgIGlmIChTVFJJQ01QKGNvbG9yLCBuYW1lKSA9PSAwKQorCSAgICB7CisJCWZjbG9zZShmZCk7CisJCXJldHVybiAoZ3VpY29sb3JfVCkgUkdCKHIsIGcsIGIpOworCSAgICB9CisJfQorCWZjbG9zZShmZCk7CisgICAgfQorCisgICAgcmV0dXJuIElOVkFMQ09MT1I7Cit9CisKKy8qCisgKiBTZXQgdGhlIGN1cnJlbnQgdGV4dCBmb3JlZ3JvdW5kIGNvbG9yLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZmdfY29sb3IoY29sb3IpCisgICAgZ3VpY29sb3JfVAljb2xvcjsKK3sKKyAgICBSR0JDb2xvciBUaGVDb2xvcjsKKworICAgIFRoZUNvbG9yLnJlZCA9IFJlZChjb2xvcikgKiAweDAxMDE7CisgICAgVGhlQ29sb3IuZ3JlZW4gPSBHcmVlbihjb2xvcikgKiAweDAxMDE7CisgICAgVGhlQ29sb3IuYmx1ZSA9IEJsdWUoY29sb3IpICogMHgwMTAxOworCisgICAgUkdCRm9yZUNvbG9yICgmVGhlQ29sb3IpOworfQorCisvKgorICogU2V0IHRoZSBjdXJyZW50IHRleHQgYmFja2dyb3VuZCBjb2xvci4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2JnX2NvbG9yKGNvbG9yKQorICAgIGd1aWNvbG9yX1QJY29sb3I7Cit7CisgICAgUkdCQ29sb3IgVGhlQ29sb3I7CisKKyAgICBUaGVDb2xvci5yZWQgPSBSZWQoY29sb3IpICogMHgwMTAxOworICAgIFRoZUNvbG9yLmdyZWVuID0gR3JlZW4oY29sb3IpICogMHgwMTAxOworICAgIFRoZUNvbG9yLmJsdWUgPSBCbHVlKGNvbG9yKSAqIDB4MDEwMTsKKworICAgIFJHQkJhY2tDb2xvciAoJlRoZUNvbG9yKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19zdHJpbmcocm93LCBjb2wsIHMsIGxlbiwgZmxhZ3MpCisgICAgaW50CQlyb3c7CisgICAgaW50CQljb2w7CisgICAgY2hhcl91CSpzOworICAgIGludAkJbGVuOworICAgIGludAkJZmxhZ3M7Cit7CisjaWYgZGVmaW5lZChGRUFUX0dVSSkgJiYgZGVmaW5lZChNQUNPU19YKQorICAgIFNJbnQzMglzeXNfdmVyc2lvbjsKKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBjaGFyX3UJKnRvZnJlZSA9IE5VTEw7CisKKyAgICBpZiAob3V0cHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisgICAgeworCXRvZnJlZSA9IHN0cmluZ19jb252ZXJ0KCZvdXRwdXRfY29udiwgcywgJmxlbik7CisJaWYgKHRvZnJlZSAhPSBOVUxMKQorCSAgICBzID0gdG9mcmVlOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgJiYgZGVmaW5lZChNQUNPU19YKQorICAgIC8qCisgICAgICogT24gT1MgWCwgdHJ5IHVzaW5nIFF1YXJ0ei1zdHlsZSB0ZXh0IGFudGlhbGlhc2luZy4KKyAgICAgKi8KKyAgICBzeXNfdmVyc2lvbiA9IDA7CisKKyAgICBHZXN0YWx0KGdlc3RhbHRTeXN0ZW1WZXJzaW9uLCAmc3lzX3ZlcnNpb24pOworICAgIGlmIChzeXNfdmVyc2lvbiA+PSAweDEwMjApCisgICAgeworCS8qIFF1YXJ0eiBhbnRpYWxpYXNpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT1MgMTAuMiBhbmQgbGF0ZXIuICovCisJVUludDMyIHFkX2ZsYWdzID0gKHBfYW50aWFsaWFzID8KKwkJCSAgICAga1FEVXNlQ0dUZXh0UmVuZGVyaW5nIHwga1FEVXNlQ0dUZXh0TWV0cmljcyA6IDApOworCSh2b2lkKVN3YXBRRFRleHRGbGFncyhxZF9mbGFncyk7CisgICAgfQorCisgICAgaWYgKHN5c192ZXJzaW9uID49IDB4MTAyMCAmJiBwX2FudGlhbGlhcykKKyAgICB7CisJU3R5bGVQYXJhbWV0ZXIgZmFjZTsKKworCWZhY2UgPSBub3JtYWw7CisJaWYgKGZsYWdzICYgRFJBV19CT0xEKQorCSAgICBmYWNlIHw9IGJvbGQ7CisJaWYgKGZsYWdzICYgRFJBV19VTkRFUkwpCisJICAgIGZhY2UgfD0gdW5kZXJsaW5lOworCVRleHRGYWNlKGZhY2UpOworCisJLyogUXVhcnR6IGFudGlhbGlhc2luZyB3b3JrcyBvbmx5IGluIHNyY09yIHRyYW5zZmVyIG1vZGUuICovCisJVGV4dE1vZGUoc3JjT3IpOworCisJaWYgKCEoZmxhZ3MgJiBEUkFXX1RSQU5TUCkpCisJeworCSAgICAvKgorCSAgICAgKiBTaW5jZSB3ZSdyZSB1c2luZyBzcmNPciBtb2RlLCB3ZSBoYXZlIHRvIGNsZWFyIHRoZSBibG9jaworCSAgICAgKiBiZWZvcmUgZHJhd2luZyB0aGUgdGV4dC4gIFRoZSBmb2xsb3dpbmcgaXMgbGlrZSBjYWxsaW5nCisJICAgICAqIGd1aV9tY2hfY2xlYXJfYmxvY2socm93LCBjb2wsIHJvdywgY29sICsgbGVuIC0gMSksCisJICAgICAqIGJ1dCB3aXRob3V0IHNldHRpbmcgdGhlIGJnIGNvbG9yIHRvIGd1aS5iYWNrX3BpeGVsLgorCSAgICAgKi8KKwkgICAgUmVjdCByYzsKKwkgICAgcmMubGVmdCA9IEZJTExfWChjb2wpOworCSAgICByYy50b3AgPSBGSUxMX1kocm93KTsKKwkgICAgcmMucmlnaHQgPSBGSUxMX1goY29sICsgbGVuKSArIChjb2wgKyBsZW4gPT0gQ29sdW1ucyk7CisJICAgIHJjLmJvdHRvbSA9IEZJTExfWShyb3cgKyAxKTsKKwkgICAgRXJhc2VSZWN0KCZyYyk7CisJfQorCisJTW92ZVRvKFRFWFRfWChjb2wpLCBURVhUX1kocm93KSk7CisJRHJhd1RleHQoKGNoYXIqKXMsIDAsIGxlbik7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwkvKiBVc2Ugb2xkLXN0eWxlLCBub24tYW50aWFsaWFzZWQgUXVpY2tEcmF3IHRleHQgcmVuZGVyaW5nLiAqLworCVRleHRNb2RlIChzcmNDb3B5KTsKKwlUZXh0RmFjZSAobm9ybWFsKTsKKworICAgIC8qICBTZWxlY3RGb250KGhkYywgZ3VpLmN1cnJGb250KTsgKi8KKworCWlmIChmbGFncyAmIERSQVdfVFJBTlNQKQorCXsKKwkgICAgVGV4dE1vZGUgKHNyY09yKTsKKwl9CisKKwlNb3ZlVG8gKFRFWFRfWChjb2wpLCBURVhUX1kocm93KSk7CisJRHJhd1RleHQgKChjaGFyICopcywgMCwgbGVuKTsKKworCisJaWYgKGZsYWdzICYgRFJBV19CT0xEKQorCXsKKwkgICAgVGV4dE1vZGUgKHNyY09yKTsKKwkgICAgTW92ZVRvIChURVhUX1goY29sKSArIDEsIFRFWFRfWShyb3cpKTsKKwkgICAgRHJhd1RleHQgKChjaGFyICopcywgMCwgbGVuKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBEUkFXX1VOREVSTCkKKwl7CisJICAgIE1vdmVUbyAoRklMTF9YKGNvbCksIEZJTExfWShyb3cgKyAxKSAtIDEpOworCSAgICBMaW5lVG8gKEZJTExfWChjb2wgKyBsZW4pIC0gMSwgRklMTF9ZKHJvdyArIDEpIC0gMSk7CisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICB2aW1fZnJlZSh0b2ZyZWUpOworI2VuZGlmCit9CisKKy8qCisgKiBSZXR1cm4gT0sgaWYgdGhlIGtleSB3aXRoIHRoZSB0ZXJtY2FwIG5hbWUgIm5hbWUiIGlzIHN1cHBvcnRlZC4KKyAqLworICAgIGludAorZ3VpX21jaF9oYXNrZXkobmFtZSkKKyAgICBjaGFyX3UgICpuYW1lOworeworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgc3BlY2lhbF9rZXlzW2ldLmtleV9zeW0gIT0gKEtleVN5bSkwOyBpKyspCisJaWYgKG5hbWVbMF0gPT0gc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMCAmJgorCQkJCQkgbmFtZVsxXSA9PSBzcGVjaWFsX2tleXNbaV0udmltX2NvZGUxKQorCSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2JlZXAoKQoreworICAgIFN5c0JlZXAgKDEpOyAvKiBTaG91bGQgdGhpcyBiZSAwPyAoPz8/PykgKi8KK30KKworICAgIHZvaWQKK2d1aV9tY2hfZmxhc2gobXNlYykKKyAgICBpbnQJICAgIG1zZWM7Cit7CisgICAgLyogRG8gYSB2aXN1YWwgYmVlcCBieSByZXZlcnNpbmcgdGhlIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzICovCisgICAgUmVjdCAgICByYzsKKworICAgIC8qCisgICAgICogTm90ZTogSW52ZXJ0UmVjdCgpIGV4Y2x1ZGVzIHJpZ2h0IGFuZCBib3R0b20gb2YgcmVjdGFuZ2xlLgorICAgICAqLworICAgIHJjLmxlZnQgPSAwOworICAgIHJjLnRvcCA9IDA7CisgICAgcmMucmlnaHQgPSBndWkubnVtX2NvbHMgKiBndWkuY2hhcl93aWR0aDsKKyAgICByYy5ib3R0b20gPSBndWkubnVtX3Jvd3MgKiBndWkuY2hhcl9oZWlnaHQ7CisgICAgSW52ZXJ0UmVjdCgmcmMpOworCisgICAgdWlfZGVsYXkoKGxvbmcpbXNlYywgVFJVRSk7CQkvKiB3YWl0IGZvciBzb21lIG1zZWMgKi8KKworICAgIEludmVydFJlY3QoJnJjKTsKK30KKworLyoKKyAqIEludmVydCBhIHJlY3RhbmdsZSBmcm9tIHJvdyByLCBjb2x1bW4gYywgZm9yIG5yIHJvd3MgYW5kIG5jIGNvbHVtbnMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2ludmVydF9yZWN0YW5nbGUociwgYywgbnIsIG5jKQorICAgIGludAkJcjsKKyAgICBpbnQJCWM7CisgICAgaW50CQlucjsKKyAgICBpbnQJCW5jOworeworICAgIFJlY3QJcmM7CisKKyAgICAvKgorICAgICAqIE5vdGU6IEludmVydFJlY3QoKSBleGNsdWRlcyByaWdodCBhbmQgYm90dG9tIG9mIHJlY3RhbmdsZS4KKyAgICAgKi8KKyAgICByYy5sZWZ0ID0gRklMTF9YKGMpOworICAgIHJjLnRvcCA9IEZJTExfWShyKTsKKyAgICByYy5yaWdodCA9IHJjLmxlZnQgKyBuYyAqIGd1aS5jaGFyX3dpZHRoOworICAgIHJjLmJvdHRvbSA9IHJjLnRvcCArIG5yICogZ3VpLmNoYXJfaGVpZ2h0OworICAgIEludmVydFJlY3QoJnJjKTsKKworfQorCisvKgorICogSWNvbmlmeSB0aGUgR1VJIHdpbmRvdy4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfaWNvbmlmeSgpCit7CisgICAgLyogVE9ETzogZmluZCBvdXQgd2hhdCBjb3VsZCByZXBsYWNlIGljb25pZnkKKyAgICAgKgkgICAgIC13aW5kb3cgc2hhZGU/CisgICAgICoJICAgICAtaGlkZSBhcHBsaWNhdGlvbj8KKyAgICAgKi8KK30KKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEJyaW5nIHRoZSBWaW0gd2luZG93IHRvIHRoZSBmb3JlZ3JvdW5kLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZm9yZWdyb3VuZCgpCit7CisgICAgLyogVE9ETyAqLworfQorI2VuZGlmCisKKy8qCisgKiBEcmF3IGEgY3Vyc29yIHdpdGhvdXQgZm9jdXMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RyYXdfaG9sbG93X2N1cnNvcihjb2xvcikKKyAgICBndWljb2xvcl9UCWNvbG9yOworeworICAgIFJlY3QgcmM7CisKKyAgICBndWlfbWNoX3NldF9mZ19jb2xvcihjb2xvcik7CisKKyAgICAvKgorICAgICAqIE5vdGU6IEZyYW1lUmVjdCgpIGV4Y2x1ZGVzIHJpZ2h0IGFuZCBib3R0b20gb2YgcmVjdGFuZ2xlLgorICAgICAqLworICAgIHJjLmxlZnQgPSBGSUxMX1goZ3VpLmNvbCk7CisgICAgcmMudG9wID0gRklMTF9ZKGd1aS5yb3cpOworICAgIHJjLnJpZ2h0ID0gcmMubGVmdCArIGd1aS5jaGFyX3dpZHRoOworICAgIHJjLmJvdHRvbSA9IHJjLnRvcCArIGd1aS5jaGFyX2hlaWdodDsKKworICAgIGd1aV9tY2hfc2V0X2ZnX2NvbG9yKGNvbG9yKTsKKworICAgIEZyYW1lUmVjdCAoJnJjKTsKK30KKworLyoKKyAqIERyYXcgcGFydCBvZiBhIGN1cnNvciwgb25seSB3IHBpeGVscyB3aWRlLCBhbmQgaCBwaXhlbHMgaGlnaC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19wYXJ0X2N1cnNvcih3LCBoLCBjb2xvcikKKyAgICBpbnQJCXc7CisgICAgaW50CQloOworICAgIGd1aWNvbG9yX1QJY29sb3I7Cit7CisgICAgUmVjdCByYzsKKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgLyogdmVydGljYWwgbGluZSBzaG91bGQgYmUgb24gdGhlIHJpZ2h0IG9mIGN1cnJlbnQgcG9pbnQgKi8KKyAgICBpZiAoQ1VSU09SX0JBUl9SSUdIVCkKKwlyYy5sZWZ0ID0gRklMTF9YKGd1aS5jb2wgKyAxKSAtIHc7CisgICAgZWxzZQorI2VuZGlmCisJcmMubGVmdCA9IEZJTExfWChndWkuY29sKTsKKyAgICByYy50b3AgPSBGSUxMX1koZ3VpLnJvdykgKyBndWkuY2hhcl9oZWlnaHQgLSBoOworICAgIHJjLnJpZ2h0ID0gcmMubGVmdCArIHc7CisgICAgcmMuYm90dG9tID0gcmMudG9wICsgaDsKKworICAgIGd1aV9tY2hfc2V0X2ZnX2NvbG9yKGNvbG9yKTsKKworICAgIFBhaW50UmVjdCAoJnJjKTsKK30KKworCisKKy8qCisgKiBDYXRjaCB1cCB3aXRoIGFueSBxdWV1ZWQgWCBldmVudHMuICBUaGlzIG1heSBwdXQga2V5Ym9hcmQgaW5wdXQgaW50byB0aGUKKyAqIGlucHV0IGJ1ZmZlciwgY2FsbCByZXNpemUgY2FsbC1iYWNrcywgdHJpZ2dlciB0aW1lcnMgZXRjLiAgSWYgdGhlcmUgaXMKKyAqIG5vdGhpbmcgaW4gdGhlIFggZXZlbnQgcXVldWUgKCYgbm8gdGltZXJzIHBlbmRpbmcpLCB0aGVuIHdlIHJldHVybgorICogaW1tZWRpYXRlbHkuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3VwZGF0ZSgpCit7CisgICAgLyogVE9ETzogZmluZCB3aGF0IHRvIGRvCisgICAgICoJICAgICBtYXliZSBjYWxsIGd1aV9tY2hfd2FpdF9mb3JfY2hhcnMgKDApCisgICAgICoJICAgICBtb3JlIGxpa2UgbG9vayBhdCBFdmVudFF1ZXVlIHRoZW4KKyAgICAgKgkgICAgIGNhbGwgaGVhcnQgb2YgZ3VpX21jaF93YWl0X2Zvcl9jaGFyczsKKyAgICAgKgorICAgICAqCWlmIChldmVudHRoZXIpCisgICAgICoJICAgIGd1aV9tYWNfaGFuZGxlX2V2ZW50KCZldmVudCk7CisgICAgICovCisgICAgRXZlbnRSZWNvcmQgdGhlRXZlbnQ7CisKKyAgICBpZiAoRXZlbnRBdmFpbCAoZXZlcnlFdmVudCwgJnRoZUV2ZW50KSkKKwlpZiAodGhlRXZlbnQud2hhdCAhPSBudWxsRXZlbnQpCisJICAgIGd1aV9tY2hfd2FpdF9mb3JfY2hhcnMoMCk7Cit9CisKKy8qCisgKiBTaW1wbGUgd3JhcHBlciB0byBuZWdsZWN0IG1vcmUgZWFzaWx5IHRoZSB0aW1lCisgKiBzcGVudCBpbnNpZGUgV2FpdE5leHRFdmVudCB3aGlsZSBwcm9maWxpbmcuCisgKi8KKworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgIC8qIG9ubHkgaW4gQ29kZXdhcnJpb3IgKi8KKyMgcHJhZ21hIHByb2ZpbGUgcmVzZXQKKyNlbmRpZgorICAgIHBhc2NhbAorICAgIEJvb2xlYW4KK1dhaXROZXh0RXZlbnRXcnAgKEV2ZW50TWFzayBldmVudE1hc2ssIEV2ZW50UmVjb3JkICp0aGVFdmVudCwgVUludDMyIHNsZWVwLCBSZ25IYW5kbGUgbW91c2VSZ24pCit7CisgICAgaWYgKCgobG9uZykgc2xlZXApIDwgLTEpCisJc2xlZXAgPSAzMjc2NzsKKyAgICByZXR1cm4gV2FpdE5leHRFdmVudChldmVudE1hc2ssIHRoZUV2ZW50LCBzbGVlcCwgbW91c2VSZ24pOworfQorCisvKgorICogR1VJIGlucHV0IHJvdXRpbmUgY2FsbGVkIGJ5IGd1aV93YWl0X2Zvcl9jaGFycygpLiAgV2FpdHMgZm9yIGEgY2hhcmFjdGVyCisgKiBmcm9tIHRoZSBrZXlib2FyZC4KKyAqICB3dGltZSA9PSAtMQkgICAgV2FpdCBmb3JldmVyLgorICogIHd0aW1lID09IDAJICAgIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4KKyAqICB3dGltZSA+IDAJICAgIFdhaXQgd3RpbWUgbWlsbGlzZWNvbmRzIGZvciBhIGNoYXJhY3Rlci4KKyAqIFJldHVybnMgT0sgaWYgYSBjaGFyYWN0ZXIgd2FzIGZvdW5kIHRvIGJlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGdpdmVuIHRpbWUsCisgKiBvciBGQUlMIG90aGVyd2lzZS4KKyAqLworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgIC8qIG9ubHkgaW4gQ29kZXdhcnJpb3IgKi8KKyMgcHJhZ21hIHByb2ZpbGUgcmVzZXQKKyNlbmRpZgorICAgIGludAorZ3VpX21jaF93YWl0X2Zvcl9jaGFycyh3dGltZSkKKyAgICBpbnQJICAgIHd0aW1lOworeworICAgIEV2ZW50TWFzawltYXNrICA9IChldmVyeUV2ZW50KTsKKyAgICBFdmVudFJlY29yZCBldmVudDsKKyAgICBsb25nCWVudHJ5VGljazsKKyAgICBsb25nCWN1cnJlbnRUaWNrOworICAgIGxvbmcJc2xlZXBweVRpY2s7CisKKyAgICAvKiBJZiB3ZSBhcmUgcHJvdmlkaW5nIGxpZmUgZmVlZGJhY2sgd2l0aCB0aGUgc2Nyb2xsYmFyLAorICAgICAqIHdlIGRvbid0IHdhbnQgdG8gdHJ5IHRvIHdhaXQgZm9yIGFuIGV2ZW50LCBvciBlbHNlCisgICAgICogdGhlcmUgd29uJ3QgYmUgYW55IGxpZmUgZmVlZGJhY2suCisgICAgICovCisgICAgaWYgKGRyYWdnZWRfc2IgIT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKwkvKiBUT0RPOiBDaGVjayBpZiBGQUlMIGlzIHRoZSBwcm9wZXIgcmV0dXJuIGNvZGUgKi8KKworICAgIGVudHJ5VGljayA9IFRpY2tDb3VudCgpOworCisgICAgYWxsb3dfc2Nyb2xsYmFyID0gVFJVRTsKKworICAgIGRvCisgICAgeworLyoJaWYgKGRyYWdSZWN0Q29udHJvbCA9PSBrQ3JlYXRlRW1wdHkpCisJeworCSAgICBkcmFnUmduID0gTlVMTDsKKwkgICAgZHJhZ1JlY3RDb250cm9sID0ga05vdGhpbmc7CisJfQorCWVsc2UqLyBpZiAoZHJhZ1JlY3RDb250cm9sID09IGtDcmVhdGVSZWN0KQorCXsKKwkgICAgZHJhZ1JnbiA9IGN1cnNvclJnbjsKKwkgICAgUmVjdFJnbiAoZHJhZ1JnbiwgJmRyYWdSZWN0KTsKKwkgICAgZHJhZ1JlY3RDb250cm9sID0ga05vdGhpbmc7CisJfQorCS8qCisJICogRG9uJ3QgdXNlIGd1aV9tY2hfdXBkYXRlKCkgYmVjYXVzZSB0aGVuIHdlIHdpbGwgc3Bpbi1sb2NrIHVudGlsIGEKKwkgKiBjaGFyIGFycml2ZXMsIGluc3RlYWQgd2UgdXNlIFdhaXROZXh0RXZlbnRXcnAoKSB0byBoYW5nIHVudGlsIGFuCisJICogZXZlbnQgYXJyaXZlcy4gIE5vIG5lZWQgdG8gY2hlY2sgZm9yIGlucHV0X2J1Zl9mdWxsIGJlY2F1c2Ugd2UgYXJlCisJICogcmV0dXJuaW5nIGFzIHNvb24gYXMgaXQgY29udGFpbnMgYSBzaW5nbGUgY2hhci4KKwkgKi8KKwkvKiBUT0RPOiByZWR1Y2Ugd3RpbWUgYWNjb3JkaW5seT8/PyAgKi8KKwlpZiAod3RpbWUgPiAtMSkKKwkgICAgc2xlZXBweVRpY2sgPSA2MCp3dGltZS8xMDAwOworCWVsc2UKKwkgICAgc2xlZXBweVRpY2sgPSAzMjc2NzsKKwlpZiAoV2FpdE5leHRFdmVudFdycCAobWFzaywgJmV2ZW50LCBzbGVlcHB5VGljaywgZHJhZ1JnbikpCisJeworI2lmZGVmIFVTRV9TSU9VWAorCSAgICBpZiAoIVNJT1VYSGFuZGxlT25lRXZlbnQoJmV2ZW50KSkKKyNlbmRpZgorCQlndWlfbWFjX2hhbmRsZV9ldmVudCAoJmV2ZW50KTsKKwkgICAgaWYgKGlucHV0X2F2YWlsYWJsZSgpKQorCSAgICB7CisJCWFsbG93X3Njcm9sbGJhciA9IEZBTFNFOworCQlyZXR1cm4gT0s7CisJICAgIH0KKwl9CisJY3VycmVudFRpY2sgPSBUaWNrQ291bnQoKTsKKyAgICB9CisgICAgd2hpbGUgKCh3dGltZSA9PSAtMSkgfHwgKChjdXJyZW50VGljayAtIGVudHJ5VGljaykgPCA2MCp3dGltZS8xMDAwKSk7CisKKyAgICBhbGxvd19zY3JvbGxiYXIgPSBGQUxTRTsKKyAgICByZXR1cm4gRkFJTDsKK30KKworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgIC8qIG9ubHkgaW4gQ29kZXdhcnJpb3IgKi8KKyMgcHJhZ21hIHByb2ZpbGUgcmVzZXQKKyNlbmRpZgorCisvKgorICogT3V0cHV0IHJvdXRpbmVzLgorICovCisKKy8qIEZsdXNoIGFueSBvdXRwdXQgdG8gdGhlIHNjcmVlbiAqLworICAgIHZvaWQKK2d1aV9tY2hfZmx1c2goKQoreworICAgIC8qIFRPRE86IElzIGFueXRoaW5nIG5lZWRlZCBoZXJlPyAqLworfQorCisvKgorICogQ2xlYXIgYSByZWN0YW5ndWxhciByZWdpb24gb2YgdGhlIHNjcmVlbiBmcm9tIHRleHQgcG9zIChyb3cxLCBjb2wxKSB0bworICogKHJvdzIsIGNvbDIpIGluY2x1c2l2ZS4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfY2xlYXJfYmxvY2socm93MSwgY29sMSwgcm93MiwgY29sMikKKyAgICBpbnQJCXJvdzE7CisgICAgaW50CQljb2wxOworICAgIGludAkJcm93MjsKKyAgICBpbnQJCWNvbDI7Cit7CisgICAgUmVjdCByYzsKKworICAgIC8qCisgICAgICogQ2xlYXIgb25lIGV4dHJhIHBpeGVsIGF0IHRoZSBmYXIgcmlnaHQsIGZvciB3aGVuIGJvbGQgY2hhcmFjdGVycyBoYXZlCisgICAgICogc3BpbGxlZCBvdmVyIHRvIHRoZSBuZXh0IGNvbHVtbi4KKyAgICAgKi8KKyAgICByYy5sZWZ0ID0gRklMTF9YKGNvbDEpOworICAgIHJjLnRvcCA9IEZJTExfWShyb3cxKTsKKyAgICByYy5yaWdodCA9IEZJTExfWChjb2wyICsgMSkgKyAoY29sMiA9PSBDb2x1bW5zIC0gMSk7CisgICAgcmMuYm90dG9tID0gRklMTF9ZKHJvdzIgKyAxKTsKKworICAgIGd1aV9tY2hfc2V0X2JnX2NvbG9yKGd1aS5iYWNrX3BpeGVsKTsKKyAgICBFcmFzZVJlY3QgKCZyYyk7Cit9CisKKy8qCisgKiBDbGVhciB0aGUgd2hvbGUgdGV4dCB3aW5kb3cuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2NsZWFyX2FsbCgpCit7CisgICAgUmVjdAlyYzsKKworICAgIHJjLmxlZnQgPSAwOworICAgIHJjLnRvcCA9IDA7CisgICAgcmMucmlnaHQgPSBDb2x1bW5zICogZ3VpLmNoYXJfd2lkdGggKyAyICogZ3VpLmJvcmRlcl93aWR0aDsKKyAgICByYy5ib3R0b20gPSBSb3dzICogZ3VpLmNoYXJfaGVpZ2h0ICsgMiAqIGd1aS5ib3JkZXJfd2lkdGg7CisKKyAgICBndWlfbWNoX3NldF9iZ19jb2xvcihndWkuYmFja19waXhlbCk7CisgICAgRXJhc2VSZWN0KCZyYyk7CisvKiAgZ3VpX21jaF9zZXRfZmdfY29sb3IoZ3VpLm5vcm1fcGl4ZWwpOworICAgIEZyYW1lUmVjdCgmcmMpOworKi8KK30KKworLyoKKyAqIERlbGV0ZSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIGdpdmVuIHJvdywgc2Nyb2xsaW5nIHVwIGFueQorICogdGV4dCBmdXJ0aGVyIGRvd24gd2l0aGluIHRoZSBzY3JvbGwgcmVnaW9uLgorICovCisgICAgdm9pZAorZ3VpX21jaF9kZWxldGVfbGluZXMocm93LCBudW1fbGluZXMpCisgICAgaW50CQlyb3c7CisgICAgaW50CQludW1fbGluZXM7Cit7CisgICAgUmVjdAlyYzsKKworICAgIC8qIGNoYW5nZWQgd2l0aG91dCBjaGVja2luZyEgKi8KKyAgICByYy5sZWZ0ID0gRklMTF9YKGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQpOworICAgIHJjLnJpZ2h0ID0gRklMTF9YKGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0ICsgMSk7CisgICAgcmMudG9wID0gRklMTF9ZKHJvdyk7CisgICAgcmMuYm90dG9tID0gRklMTF9ZKGd1aS5zY3JvbGxfcmVnaW9uX2JvdCArIDEpOworCisgICAgZ3VpX21jaF9zZXRfYmdfY29sb3IoZ3VpLmJhY2tfcGl4ZWwpOworICAgIFNjcm9sbFJlY3QgKCZyYywgMCwgLW51bV9saW5lcyAqIGd1aS5jaGFyX2hlaWdodCwgKFJnbkhhbmRsZSkgbmlsKTsKKworICAgIGd1aV9jbGVhcl9ibG9jayhndWkuc2Nyb2xsX3JlZ2lvbl9ib3QgLSBudW1fbGluZXMgKyAxLAorCQkJCQkJICAgICAgIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQsCisJZ3VpLnNjcm9sbF9yZWdpb25fYm90LCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCk7Cit9CisKKy8qCisgKiBJbnNlcnQgdGhlIGdpdmVuIG51bWJlciBvZiBsaW5lcyBiZWZvcmUgdGhlIGdpdmVuIHJvdywgc2Nyb2xsaW5nIGRvd24gYW55CisgKiBmb2xsb3dpbmcgdGV4dCB3aXRoaW4gdGhlIHNjcm9sbCByZWdpb24uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2luc2VydF9saW5lcyhyb3csIG51bV9saW5lcykKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCW51bV9saW5lczsKK3sKKyAgICBSZWN0IHJjOworCisgICAgcmMubGVmdCA9IEZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KTsKKyAgICByYy5yaWdodCA9IEZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCArIDEpOworICAgIHJjLnRvcCA9IEZJTExfWShyb3cpOworICAgIHJjLmJvdHRvbSA9IEZJTExfWShndWkuc2Nyb2xsX3JlZ2lvbl9ib3QgKyAxKTsKKworICAgIGd1aV9tY2hfc2V0X2JnX2NvbG9yKGd1aS5iYWNrX3BpeGVsKTsKKworICAgIFNjcm9sbFJlY3QgKCZyYywgMCwgZ3VpLmNoYXJfaGVpZ2h0ICogbnVtX2xpbmVzLCAoUmduSGFuZGxlKSBuaWwpOworCisgICAgLyogVXBkYXRlIGd1aS5jdXJzb3Jfcm93IGlmIHRoZSBjdXJzb3Igc2Nyb2xsZWQgb3IgY29waWVkIG92ZXIgKi8KKyAgICBpZiAoZ3VpLmN1cnNvcl9yb3cgPj0gZ3VpLnJvdworCSAgICAmJiBndWkuY3Vyc29yX2NvbCA+PSBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0CisJICAgICYmIGd1aS5jdXJzb3JfY29sIDw9IGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0KQorICAgIHsKKwlpZiAoZ3VpLmN1cnNvcl9yb3cgPD0gZ3VpLnNjcm9sbF9yZWdpb25fYm90IC0gbnVtX2xpbmVzKQorCSAgICBndWkuY3Vyc29yX3JvdyArPSBudW1fbGluZXM7CisJZWxzZSBpZiAoZ3VpLmN1cnNvcl9yb3cgPD0gZ3VpLnNjcm9sbF9yZWdpb25fYm90KQorCSAgICBndWkuY3Vyc29yX2lzX3ZhbGlkID0gRkFMU0U7CisgICAgfQorCisgICAgZ3VpX2NsZWFyX2Jsb2NrKHJvdywgZ3VpLnNjcm9sbF9yZWdpb25fbGVmdCwKKwkJCQlyb3cgKyBudW1fbGluZXMgLSAxLCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCk7Cit9CisKKyAgICAvKgorICAgICAqIFRPRE86IGFkZCBhIHZpbSBmb3JtYXQgdG8gdGhlIGNsaXBib2FyZCB3aGljaCByZW1lbWJlcgorICAgICAqCSAgICAgTElORVdJU0UsIENIQVJXSVNFLCBCTE9DS1dJU0UKKyAgICAgKi8KKworICAgIHZvaWQKK2NsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uKGNiZCkKKyAgICBWaW1DbGlwYm9hcmQgKmNiZDsKK3sKKworICAgIEhhbmRsZQl0ZXh0T2ZDbGlwOworI2lmZGVmIFVTRV9DQVJCT05JWkVECisgICAgU2l6ZQlzY3JhcFNpemU7CisgICAgU2NyYXBGbGF2b3JGbGFncwlzY3JhcEZsYWdzOworICAgIFNjcmFwUmVmICAgIHNjcmFwID0gbmlsOworICAgIE9TU3RhdHVzCWVycm9yOworI2Vsc2UKKyAgICBsb25nCXNjcmFwT2Zmc2V0OworICAgIGxvbmcJc2NyYXBTaXplOworI2VuZGlmCisgICAgaW50CQl0eXBlOworICAgIGNoYXIJKnNlYXJjaENSOworICAgIGNoYXJfdQkqdGVtcGNsaXA7CisKKworI2lmZGVmIFVTRV9DQVJCT05JWkVECisgICAgZXJyb3IgPSBHZXRDdXJyZW50U2NyYXAgKCZzY3JhcCk7CisgICAgaWYgKGVycm9yICE9IG5vRXJyKQorCXJldHVybjsKKworICAgIGVycm9yID0gR2V0U2NyYXBGbGF2b3JGbGFncyhzY3JhcCwga1NjcmFwRmxhdm9yVHlwZVRleHQsICZzY3JhcEZsYWdzKTsKKyAgICBpZiAoZXJyb3IgIT0gbm9FcnIpCisJcmV0dXJuOworCisgICAgZXJyb3IgPSBHZXRTY3JhcEZsYXZvclNpemUgKHNjcmFwLCBrU2NyYXBGbGF2b3JUeXBlVGV4dCwgJnNjcmFwU2l6ZSk7CisgICAgaWYgKGVycm9yICE9IG5vRXJyKQorCXJldHVybjsKKworICAgIFJlc2VydmVNZW0gKHNjcmFwU2l6ZSk7CisjZWxzZQorICAgIC8qIENhbGwgdG8gTG9hZFNjcmFwIHNlZW0gdG8gYXZvaWQgcHJvYmxlbSB3aXRoIGNyYXNoIG9uIGZpcnN0IHBhc3RlICovCisgICAgc2NyYXBTaXplID0gTG9hZFNjcmFwKCk7CisgICAgc2NyYXBTaXplID0gR2V0U2NyYXAobmlsLCAnVEVYVCcsICZzY3JhcE9mZnNldCk7CisKKyAgICBpZiAoc2NyYXBTaXplID4gMCkKKyNlbmRpZgorICAgIHsKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorCS8qIEluIENBUkJPTiB3ZSBkb24ndCBuZWVkIGEgSGFuZGxlLCBhIHBvaW50ZXIgaXMgZ29vZCAqLworCXRleHRPZkNsaXAgPSBOZXdIYW5kbGUgKHNjcmFwU2l6ZSk7CisJLyogdGVtcGNsaXAgPSBsYWxsb2Moc2NyYXBTaXplKzEsIFRSVUUpOyAqLworI2Vsc2UKKwl0ZXh0T2ZDbGlwID0gTmV3SGFuZGxlKDApOworI2VuZGlmCisJSExvY2sgKHRleHRPZkNsaXApOworI2lmZGVmIFVTRV9DQVJCT05JWkVECisJZXJyb3IgPSBHZXRTY3JhcEZsYXZvckRhdGEgKHNjcmFwLCBrU2NyYXBGbGF2b3JUeXBlVGV4dCwgJnNjcmFwU2l6ZSwgKnRleHRPZkNsaXApOworI2Vsc2UKKwlzY3JhcFNpemUgPSBHZXRTY3JhcCh0ZXh0T2ZDbGlwLCAnVEVYVCcsICZzY3JhcE9mZnNldCk7CisjZW5kaWYKKworCXR5cGUgPSAoc3RyY2hyKCp0ZXh0T2ZDbGlwLCAnXHInKSAhPSBOVUxMKSA/IE1MSU5FIDogTUNIQVI7CisKKwl0ZW1wY2xpcCA9IGxhbGxvYyhzY3JhcFNpemUrMSwgVFJVRSk7CisJU1RSTkNQWSh0ZW1wY2xpcCwgKnRleHRPZkNsaXAsIHNjcmFwU2l6ZSk7CisJdGVtcGNsaXBbc2NyYXBTaXplXSA9IDA7CisKKwlzZWFyY2hDUiA9IChjaGFyICopdGVtcGNsaXA7CisJd2hpbGUgKHNlYXJjaENSICE9IE5VTEwpCisJeworCSAgICBzZWFyY2hDUiA9IHN0cmNocihzZWFyY2hDUiwgJ1xyJyk7CisKKwkgICAgaWYgKHNlYXJjaENSICE9IE5VTEwpCisJCXNlYXJjaENSWzBdID0gJ1xuJzsKKworCX0KKworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaW5wdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwl7CisJICAgIGNoYXJfdQkqdG87CisJICAgIGludAkJbCA9IHNjcmFwU2l6ZTsKKworCSAgICB0byA9IHN0cmluZ19jb252ZXJ0KCZpbnB1dF9jb252LCB0ZW1wY2xpcCwgJmwpOworCSAgICBpZiAodG8gIT0gTlVMTCkKKwkgICAgeworCQl2aW1fZnJlZSh0ZW1wY2xpcCk7CisJCXRlbXBjbGlwID0gdG87CisJCXNjcmFwU2l6ZSA9IGw7CisJICAgIH0KKwl9CisjZW5kaWYKKwljbGlwX3lhbmtfc2VsZWN0aW9uKHR5cGUsIHRlbXBjbGlwLCBzY3JhcFNpemUsIGNiZCk7CisKKwl2aW1fZnJlZSh0ZW1wY2xpcCk7CisJSFVubG9jayh0ZXh0T2ZDbGlwKTsKKworCURpc3Bvc2VIYW5kbGUodGV4dE9mQ2xpcCk7CisgICAgfQorfQorCisgICAgdm9pZAorY2xpcF9tY2hfbG9zZV9zZWxlY3Rpb24oY2JkKQorICAgIFZpbUNsaXBib2FyZCAqY2JkOworeworICAgIC8qCisgICAgICogVE9ETzogUmVhbGx5IG5vdGhpbmcgdG8gZG8/CisgICAgICovCit9CisKKyAgICBpbnQKK2NsaXBfbWNoX293bl9zZWxlY3Rpb24oY2JkKQorICAgIFZpbUNsaXBib2FyZCAqY2JkOworeworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFNlbmQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBjbGlwYm9hcmQuCisgKi8KKyAgICB2b2lkCitjbGlwX21jaF9zZXRfc2VsZWN0aW9uKGNiZCkKKyAgICBWaW1DbGlwYm9hcmQgKmNiZDsKK3sKKyAgICBIYW5kbGUJdGV4dE9mQ2xpcDsKKyAgICBsb25nCXNjcmFwU2l6ZTsKKyAgICBpbnQJCXR5cGU7CisjaWZkZWYgVVNFX0NBUkJPTklaRUQKKyAgICBTY3JhcFJlZiAgICBzY3JhcDsKKyNlbmRpZgorCisgICAgY2hhcl91CSpzdHIgPSBOVUxMOworCisgICAgaWYgKCFjYmQtPm93bmVkKQorCXJldHVybjsKKworICAgIGNsaXBfZ2V0X3NlbGVjdGlvbihjYmQpOworCisgICAgLyoKKyAgICAgKiBPbmNlIHdlIHNldCB0aGUgY2xpcGJvYXJkLCBsb3NlIG93bmVyc2hpcC4gIElmIGFub3RoZXIgYXBwbGljYXRpb24gc2V0cworICAgICAqIHRoZSBjbGlwYm9hcmQsIHdlIGRvbid0IHdhbnQgdG8gdGhpbmsgdGhhdCB3ZSBzdGlsbCBvd24gaXQuCisgICAgICoKKyAgICAgKi8KKworICAgIGNiZC0+b3duZWQgPSBGQUxTRTsKKworICAgIHR5cGUgPSBjbGlwX2NvbnZlcnRfc2VsZWN0aW9uKCZzdHIsIChsb25nX3UgKikgJnNjcmFwU2l6ZSwgY2JkKTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoc3RyICE9IE5VTEwgJiYgb3V0cHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisgICAgeworCWNoYXJfdQkqdG87CisJaW50CWwgPSBzY3JhcFNpemU7CisKKwl0byA9IHN0cmluZ19jb252ZXJ0KCZvdXRwdXRfY29udiwgc3RyLCAmbCk7CisJaWYgKHRvICE9IE5VTEwpCisJeworCSAgICB2aW1fZnJlZShzdHIpOworCSAgICBzdHIgPSB0bzsKKwkgICAgc2NyYXBTaXplID0gbDsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAodHlwZSA+PSAwKQorICAgIHsKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorCUNsZWFyQ3VycmVudFNjcmFwKCk7CisjZWxzZQorCVplcm9TY3JhcCgpOworI2VuZGlmCisKKwl0ZXh0T2ZDbGlwID0gTmV3SGFuZGxlKHNjcmFwU2l6ZSk7CisJSExvY2sodGV4dE9mQ2xpcCk7CisKKwlTVFJOQ1BZKCp0ZXh0T2ZDbGlwLCBzdHIsIHNjcmFwU2l6ZSk7CisjaWZkZWYgVVNFX0NBUkJPTklaRUQKKwlHZXRDdXJyZW50U2NyYXAgKCZzY3JhcCk7CisJUHV0U2NyYXBGbGF2b3Ioc2NyYXAsIGtTY3JhcEZsYXZvclR5cGVUZXh0LCBrU2NyYXBGbGF2b3JNYXNrTm9uZSwKKwkJCXNjcmFwU2l6ZSwgKnRleHRPZkNsaXApOworI2Vsc2UKKwlQdXRTY3JhcChzY3JhcFNpemUsICdURVhUJywgKnRleHRPZkNsaXApOworI2VuZGlmCisJSFVubG9jayh0ZXh0T2ZDbGlwKTsKKwlEaXNwb3NlSGFuZGxlKHRleHRPZkNsaXApOworICAgIH0KKworICAgIHZpbV9mcmVlKHN0cik7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF90ZXh0X2FyZWFfcG9zKHgsIHksIHcsIGgpCisgICAgaW50CQl4OworICAgIGludAkJeTsKKyAgICBpbnQJCXc7CisgICAgaW50CQloOworeworICAgIFJlY3QJVmltQm91bmQ7CisKKy8qICBIaWRlV2luZG93IChndWkuVmltV2luZG93KTsgKi8KKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorICAgIEdldFdpbmRvd0JvdW5kcyhndWkuVmltV2luZG93LCBrV2luZG93R2xvYmFsUG9ydFJnbiwgJlZpbUJvdW5kKTsKKyNlbHNlCisgICAgVmltQm91bmQgPSBndWkuVmltV2luZG93LT5wb3J0UmVjdDsKKyNlbmRpZgorCisgICAgaWYgKGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfTEVGVF0pCisgICAgeworCVZpbUJvdW5kLmxlZnQgPSAtZ3VpLnNjcm9sbGJhcl93aWR0aCArIDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJVmltQm91bmQubGVmdCA9IDA7CisgICAgfQorCisjaWZkZWYgVVNFX0NBUkJPTklaRUQKKyAgICBTZXRXaW5kb3dCb3VuZHMoZ3VpLlZpbVdpbmRvdywga1dpbmRvd0dsb2JhbFBvcnRSZ24sICZWaW1Cb3VuZCk7CisjZW5kaWYKKworICAgIFNob3dXaW5kb3cgKGd1aS5WaW1XaW5kb3cpOworfQorCisvKgorICogTWVudSBzdHVmZi4KKyAqLworCisgICAgdm9pZAorZ3VpX21jaF9lbmFibGVfbWVudShmbGFnKQorICAgIGludAkJZmxhZzsKK3sKKyAgICAvKgorICAgICAqIE1lbnUgaXMgYWx3YXlzIGFjdGl2ZSBpbiBpdHNlbGYKKyAgICAgKiAobWF5YmUgd2Ugc2hvdWxkIG9ubHkgZGlzYWJsZSBhIHZpbSBtZW51CisgICAgICoJYW5kIGtlZXAgc3RhbmRhcmQgbWVudSkKKyAgICAgKgorICAgICAqLworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfbWVudV9wb3MoeCwgeSwgdywgaCkKKyAgICBpbnQJCXg7CisgICAgaW50CQl5OworICAgIGludAkJdzsKKyAgICBpbnQJCWg7Cit7CisgICAgLyoKKyAgICAgKiBUaGUgbWVudSBpcyBhbHdheXMgYXQgdGhlIHRvcCBvZiB0aGUgc2NyZWVuCisgICAgICogTWF5YmUgYSBmdXR1ciB2ZXJzaW9uIHdpbGwgcGVybWl0IGEgbWVudSBpbiB0aGUgd2luZG93CisgICAgICoKKyAgICAgKi8KK30KKworLyoKKyAqIEFkZCBhIHN1YiBtZW51IHRvIHRoZSBtZW51IGJhci4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfYWRkX21lbnUobWVudSwgaWR4KQorICAgIHZpbW1lbnVfVAkqbWVudTsKKyAgICBpbnQJCWlkeDsKK3sKKyAgICAvKgorICAgICAqIFRPRE86IFRyeSB0byB1c2Ugb25seSBtZW51X2lkIGluc3RlYWQgb2YgYm90aCBtZW51X2lkIGFuZCBtZW51X2hhbmRsZS4KKyAgICAgKiBUT0RPOiB1c2UgbWVudS0+bW5lbW9uaWMgYW5kIG1lbnUtPmFjdGV4dAorICAgICAqIFRPRE86IFRyeSB0byByZXVzZSBtZW51IGlkCisgICAgICogICAgICAgQ2FyYm9uIEhlbHAgc3VnZ2VzdCB0byB1c2Ugb25seSBpZCBiZXR3ZWVuIDEgYW5kIDIzNQorICAgICAqLworICAgIHN0YXRpYyBsb25nCSBuZXh0X2F2YWlsX2lkID0gMTI4OworICAgIGxvbmcJIG1lbnVfYWZ0ZXJfbWUgPSAwOyAvKiBEZWZhdWx0IHRvIHRoZSBlbmQgKi8KKyAgICBjaGFyX3UJKm5hbWU7CisgICAgc2hvcnQJIGluZGV4OworICAgIHZpbW1lbnVfVAkqcGFyZW50ID0gbWVudS0+cGFyZW50OworICAgIHZpbW1lbnVfVAkqYnJvdGhlciA9IG1lbnUtPm5leHQ7CisKKyAgICAvKiBDYW5ub3QgYWRkIGEgbWVudSBpZiAuLi4gKi8KKyAgICBpZiAoKHBhcmVudCAhPSBOVUxMICYmIHBhcmVudC0+c3VibWVudV9pZCA9PSAwKSkKKwlyZXR1cm47CisKKyAgICAvKiBtZW51IElEIGdyZWF0ZXIgdGhhbiAxMDI0IGFyZSByZXNlcnZlZCBmb3IgPz8/ICovCisgICAgaWYgKG5leHRfYXZhaWxfaWQgPT0gMTAyNCkKKwlyZXR1cm47CisKKyAgICAvKiBNeSBicm90aGVyIGNvdWxkIGJlIHRoZSBQb3BVcCwgZmluZCBteSByZWFsIGJyb3RoZXIgKi8KKyAgICB3aGlsZSAoKGJyb3RoZXIgIT0gTlVMTCkgJiYgKCFtZW51X2lzX21lbnViYXIoYnJvdGhlci0+bmFtZSkpKQorCWJyb3RoZXIgPSBicm90aGVyLT5uZXh0OworCisgICAgLyogIEZpbmQgd2hlcmUgdG8gaW5zZXJ0IHRoZSBtZW51IChmb3IgTWVudUJhcikgKi8KKyAgICBpZiAoKHBhcmVudCA9PSBOVUxMKSAmJiAoYnJvdGhlciAhPSBOVUxMKSkKKwltZW51X2FmdGVyX21lID0gYnJvdGhlci0+c3VibWVudV9pZDsKKworICAgIC8qIElmIHRoZSBtZW51IGlzIG5vdCBwYXJ0IG9mIHRoZSBtZW51YmFyIChhbmQgaXRzIHN1Ym1lbnVzKSwgYWRkIGl0ICdub3doZXJlJyAqLworICAgIGlmICghbWVudV9pc19tZW51YmFyKG1lbnUtPm5hbWUpKQorCW1lbnVfYWZ0ZXJfbWUgPSBoaWVyTWVudTsKKworICAgIC8qIENvbnZlcnQgdGhlIG5hbWUgKi8KKyAgICBuYW1lID0gQzJQYXNjYWxfc2F2ZShtZW51LT5kbmFtZSk7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICAvKiBDcmVhdGUgdGhlIG1lbnUgdW5sZXNzIGl0J3MgdGhlIGhlbHAgbWVudSAqLworI2lmZGVmIFVTRV9IRUxQTUVOVQorICAgIGlmIChTVFJOQ01QKG5hbWUsICJcNEhlbHAiLCA1KSA9PSAwKQorICAgIHsKKwltZW51LT5zdWJtZW51X2lkID0ga0hNSGVscE1lbnVJRDsKKwltZW51LT5zdWJtZW51X2hhbmRsZSA9IGd1aS5NYWNPU0hlbHBNZW51OworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJLyogQ2FyYm9uIHN1Z2dlc3QgdXNlIG9mCisJICogT1NTdGF0dXMgQ3JlYXRlTmV3TWVudSAoIE1lbnVJRCwgTWVudUF0dHJpYnV0ZXMsIE1lbnVSZWYgKik7CisJICogT1NTdGF0dXMgU2V0TWVudVRpdGxlICggTWVudVJlZiwgQ29uc3RTdHIyNTVQYXJhbSB0aXRsZSApOworCSAqLworCW1lbnUtPnN1Ym1lbnVfaWQgPSBuZXh0X2F2YWlsX2lkOworCW1lbnUtPnN1Ym1lbnVfaGFuZGxlID0gTmV3TWVudSAobWVudS0+c3VibWVudV9pZCwgbmFtZSk7CisJbmV4dF9hdmFpbF9pZCsrOworICAgIH0KKworICAgIGlmIChwYXJlbnQgPT0gTlVMTCkKKyAgICB7CisJLyogQWRkaW5nIGEgbWVudSB0byB0aGUgbWVudWJhciwgb3IgaW4gdGhlIG5vIG1hbnMgbGFuZCAoZm9yIFBvcFVwKSAqLworCisJLyogVE9ETzogVmVyaWZ5IGlmIHdlIGNvdWxkIG9ubHkgSW5zZXJ0IE1lbnUgaWYgcmVhbGx5IHBhcnQgb2YgdGhlCisJICogbWVudWJhciBUaGUgSW5zZXJ0ZWQgbWVudSBhcmUgc2Nhbm5lZCBvciB0aGUgQ29tbWFuZC1rZXkgY29tYm9zCisJICovCisKKwkvKiBJbnNlcnQgdGhlIG1lbnUgdW5sZXNzIGl0J3MgdGhlIEhlbHAgbWVudSAqLworI2lmZGVmIFVTRV9IRUxQTUVOVQorCWlmIChtZW51LT5zdWJtZW51X2lkICE9IGtITUhlbHBNZW51SUQpCisjZW5kaWYKKwkgICAgSW5zZXJ0TWVudSAobWVudS0+c3VibWVudV9oYW5kbGUsIG1lbnVfYWZ0ZXJfbWUpOyAvKiBpbnNlcnQgYmVmb3JlICovCisjaWYgMQorCS8qIFZpbSBzaG91bGQgbm9ybWFsbHkgdXBkYXRlIGl0LiBUT0RPOiB2ZXJpZnkgKi8KKwlEcmF3TWVudUJhcigpOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogQWRkaW5nIGFzIGEgc3VibWVudSAqLworCisJaW5kZXggPSBndWlfbWFjX2dldF9tZW51X2l0ZW1faW5kZXggKG1lbnUpOworCisJLyogQ2FsbCBJbnNlcnRNZW51SXRlbSBmb2xsb3dlZCBieSBTZXRNZW51SXRlbVRleHQKKwkgKiB0byBhdm9pZCBzcGVjaWFsIGNoYXJhY3RlciByZWNvZ25pdGlvbiBieSBJbnNlcnRNZW51SXRlbQorCSAqLworCUluc2VydE1lbnVJdGVtKHBhcmVudC0+c3VibWVudV9oYW5kbGUsICJccCAiLCBpZHgpOyAvKiBhZnRlckl0ZW0gKi8KKwlTZXRNZW51SXRlbVRleHQocGFyZW50LT5zdWJtZW51X2hhbmRsZSwgaWR4KzEsIG5hbWUpOworCVNldEl0ZW1DbWQocGFyZW50LT5zdWJtZW51X2hhbmRsZSwgaWR4KzEsIDB4MUIpOworCVNldEl0ZW1NYXJrKHBhcmVudC0+c3VibWVudV9oYW5kbGUsIGlkeCsxLCBtZW51LT5zdWJtZW51X2lkKTsKKwlJbnNlcnRNZW51KG1lbnUtPnN1Ym1lbnVfaGFuZGxlLCBoaWVyTWVudSk7CisgICAgfQorCisgICAgdmltX2ZyZWUgKG5hbWUpOworCisjaWYgMAorICAgIC8qIERvbmUgYnkgVmltIGxhdGVyIG9uICovCisgICAgRHJhd01lbnVCYXIoKTsKKyNlbmRpZgorfQorCisvKgorICogQWRkIGEgbWVudSBpdGVtIHRvIGEgbWVudQorICovCisgICAgdm9pZAorZ3VpX21jaF9hZGRfbWVudV9pdGVtKG1lbnUsIGlkeCkKKyAgICB2aW1tZW51X1QJKm1lbnU7CisgICAgaW50CQlpZHg7Cit7CisgICAgY2hhcl91CSpuYW1lOworICAgIHZpbW1lbnVfVAkqcGFyZW50ID0gbWVudS0+cGFyZW50OworICAgIGludAkJbWVudV9pbnNlcnRlZDsKKworICAgIC8qIENhbm5vdCBhZGQgaXRlbSwgaWYgdGhlIG1lbnUgaGF2ZSBub3QgYmVlbiBjcmVhdGVkICovCisgICAgaWYgKHBhcmVudC0+c3VibWVudV9pZCA9PSAwKQorCXJldHVybjsKKworICAgIC8qIENvdWxkIGNhbGwgU2V0TWVudVJlZkNvbiBbQ0FSQk9OXSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgTWVudSwKKyAgICAgICBmb3Igb2xkZXIgT1MgY2FsbCBHZXRNZW51SXRlbURhdGEgKG1lbnUsIGl0ZW0sIGlzQ29tbWFuZElEPywgZGF0YSkgKi8KKworICAgIC8qIENvbnZlcnQgdGhlIG5hbWUgKi8KKyAgICBuYW1lID0gQzJQYXNjYWxfc2F2ZShtZW51LT5kbmFtZSk7CisKKyAgICAvKiBXaGVyZSBhcmUganVzdCBhIG1lbnUgaXRlbSwgc28gbm8gaGFuZGxlLCBubyBpZCAqLworICAgIG1lbnUtPnN1Ym1lbnVfaWQgPSAwOworICAgIG1lbnUtPnN1Ym1lbnVfaGFuZGxlID0gTlVMTDsKKworI2lmZGVmIFVTRV9IRUxQTUVOVQorICAgIC8qIFRoZSBpbmRleCBpbiB0aGUgaGVscCBtZW51IGFyZSBvZmZzZXRlZCAqLworICAgIGlmIChwYXJlbnQtPnN1Ym1lbnVfaWQgPT0ga0hNSGVscE1lbnVJRCkKKwlpZHggKz0gZ3VpLk1hY09TSGVscEl0ZW1zOworI2VuZGlmCisKKyAgICBtZW51X2luc2VydGVkID0gMDsKKyAgICBpZiAobWVudS0+YWN0ZXh0KQorICAgIHsKKwkvKiBJZiB0aGUgYWNjZWxlcmF0b3IgdGV4dCBmb3IgdGhlIG1lbnUgaXRlbSBsb29rcyBsaWtlIGl0IGRlc2NyaWJlcworCSAqIGEgY29tbWFuZCBrZXkgKGUuZy4sICI8RC1TLXQ+IiBvciAiPEMtNz4iKSwgZGlzcGxheSBpdCBhcyB0aGUKKwkgKiBpdGVtJ3MgY29tbWFuZCBlcXVpdmFsZW50LgorCSAqLworCWludAkgICAga2V5ID0gMDsKKwlpbnQJICAgIG1vZGlmaWVycyA9IDA7CisJY2hhcl91CSAgICAqcF9hY3RleHQ7CisKKwlwX2FjdGV4dCA9IG1lbnUtPmFjdGV4dDsKKwlrZXkgPSBmaW5kX3NwZWNpYWxfa2V5KCZwX2FjdGV4dCwgJm1vZGlmaWVycywgLyprZXljb2RlPSovMCk7CisJaWYgKCpwX2FjdGV4dCAhPSAwKQorCSAgICBrZXkgPSAwOyAvKiBlcnJvcjogdHJhaWxpbmcgdGV4dCAqLworCS8qIGZpbmRfc3BlY2lhbF9rZXkoKSByZXR1cm5zIGEga2V5Y29kZSB3aXRoIGFzIG1hbnkgb2YgdGhlCisJICogc3BlY2lmaWVkIG1vZGlmaWVycyBhcyBhcHByb3ByaWF0ZSBhbHJlYWR5IGFwcGxpZWQgKGUuZy4sIGZvcgorCSAqICI8RC1DLXg+IiBpdCByZXR1cm5zIEN0cmwtWCBhcyB0aGUga2V5Y29kZSBhbmQgTU9EX01BU0tfQ01ECisJICogYXMgdGhlIG9ubHkgbW9kaWZpZXIpLiAgU2luY2Ugd2Ugd2FudCB0byBkaXNwbGF5IGFsbCBvZiB0aGUKKwkgKiBtb2RpZmllcnMsIHdlIG5lZWQgdG8gY29udmVydCB0aGUga2V5Y29kZSBiYWNrIHRvIGEgcHJpbnRhYmxlCisJICogY2hhcmFjdGVyIHBsdXMgbW9kaWZpZXJzLgorCSAqIFRPRE86IFdyaXRlIGFuIGFsdGVybmF0aXZlIGZpbmRfc3BlY2lhbF9rZXkoKSB0aGF0IGRvZXNuJ3QKKwkgKiBhcHBseSBtb2RpZmllcnMuCisJICovCisJaWYgKGtleSA+IDAgJiYga2V5IDwgMzIpCisJeworCSAgICAvKiBDb252ZXJ0IGEgY29udHJvbCBrZXkgdG8gYW4gdXBwZXJjYXNlIGxldHRlci4gIE5vdGUgdGhhdAorCSAgICAgKiBieSB0aGlzIHBvaW50IGl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaAorCSAgICAgKiBiZXR3ZWVuLCBlLmcuLCBDdHJsLVMgYW5kIEN0cmwtU2hpZnQtUy4KKwkgICAgICovCisJICAgIG1vZGlmaWVycyB8PSBNT0RfTUFTS19DVFJMOworCSAgICBrZXkgKz0gJ0AnOworCX0KKwkvKiBJZiB0aGUga2V5Y29kZSBpcyBhbiB1cHBlcmNhc2UgbGV0dGVyLCBzZXQgdGhlIFNoaWZ0IG1vZGlmaWVyLgorCSAqIElmIGl0IGlzIGEgbG93ZXJjYXNlIGxldHRlciwgZG9uJ3Qgc2V0IHRoZSBtb2RpZmllciwgYnV0IGNvbnZlcnQKKwkgKiB0aGUgbGV0dGVyIHRvIHVwcGVyY2FzZSBmb3IgZGlzcGxheSBpbiB0aGUgbWVudS4KKwkgKi8KKwllbHNlIGlmIChrZXkgPj0gJ0EnICYmIGtleSA8PSAnWicpCisJICAgIG1vZGlmaWVycyB8PSBNT0RfTUFTS19TSElGVDsKKwllbHNlIGlmIChrZXkgPj0gJ2EnICYmIGtleSA8PSAneicpCisJICAgIGtleSArPSAnQScgLSAnYSc7CisJLyogTm90ZToga2V5Y29kZXMgYmVsb3cgMHgyMiBhcmUgcmVzZXJ2ZWQgYnkgQXBwbGUuICovCisJaWYgKGtleSA+PSAweDIyICYmIHZpbV9pc3ByaW50Y19zdHJpY3Qoa2V5KSkKKwl7CisJICAgIGludAkJdmFsaWQgPSAxOworCSAgICBjaGFyX3UgICAgICBtYWNfbW9kcyA9IGtNZW51Tm9Nb2RpZmllcnM7CisJICAgIC8qIENvbnZlcnQgVmltIG1vZGlmaWVyIGNvZGVzIHRvIE1lbnUgTWFuYWdlciBlcXVpdmFsZW50cy4gKi8KKwkgICAgaWYgKG1vZGlmaWVycyAmIE1PRF9NQVNLX1NISUZUKQorCQltYWNfbW9kcyB8PSBrTWVudVNoaWZ0TW9kaWZpZXI7CisJICAgIGlmIChtb2RpZmllcnMgJiBNT0RfTUFTS19DVFJMKQorCQltYWNfbW9kcyB8PSBrTWVudUNvbnRyb2xNb2RpZmllcjsKKwkgICAgaWYgKCEobW9kaWZpZXJzICYgTU9EX01BU0tfQ01EKSkKKwkJbWFjX21vZHMgfD0ga01lbnVOb0NvbW1hbmRNb2RpZmllcjsKKwkgICAgaWYgKG1vZGlmaWVycyAmIE1PRF9NQVNLX0FMVCB8fCBtb2RpZmllcnMgJiBNT0RfTUFTS19NVUxUSV9DTElDSykKKwkJdmFsaWQgPSAwOyAvKiBUT0RPOiB3aWxsIEFsdCBzb21lZGF5IG1hcCB0byBPcHRpb24/ICovCisJICAgIGlmICh2YWxpZCkKKwkgICAgeworCQljaGFyX3UJICAgIGl0ZW1fdHh0WzEwXTsKKwkJLyogSW5zZXJ0IHRoZSBtZW51IGl0ZW0gYWZ0ZXIgaWR4LCB3aXRoIGl0cyBjb21tYW5kIGtleS4gKi8KKwkJaXRlbV90eHRbMF0gPSAzOyBpdGVtX3R4dFsxXSA9ICcgJzsgaXRlbV90eHRbMl0gPSAnLyc7CisJCWl0ZW1fdHh0WzNdID0ga2V5OworCQlJbnNlcnRNZW51SXRlbShwYXJlbnQtPnN1Ym1lbnVfaGFuZGxlLCBpdGVtX3R4dCwgaWR4KTsKKwkJLyogU2V0IHRoZSBtb2RpZmllciBrZXlzLiAqLworCQlTZXRNZW51SXRlbU1vZGlmaWVycyhwYXJlbnQtPnN1Ym1lbnVfaGFuZGxlLCBpZHgrMSwgbWFjX21vZHMpOworCQltZW51X2luc2VydGVkID0gMTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgLyogQ2FsbCBJbnNlcnRNZW51SXRlbSBmb2xsb3dlZCBieSBTZXRNZW51SXRlbVRleHQKKyAgICAgKiB0byBhdm9pZCBzcGVjaWFsIGNoYXJhY3RlciByZWNvZ25pdGlvbiBieSBJbnNlcnRNZW51SXRlbQorICAgICAqLworICAgIGlmICghbWVudV9pbnNlcnRlZCkKKwlJbnNlcnRNZW51SXRlbShwYXJlbnQtPnN1Ym1lbnVfaGFuZGxlLCAiXHAgIiwgaWR4KTsgLyogYWZ0ZXJJdGVtICovCisgICAgLyogU2V0IHRoZSBtZW51IGl0ZW0gbmFtZS4gKi8KKyAgICBTZXRNZW51SXRlbVRleHQocGFyZW50LT5zdWJtZW51X2hhbmRsZSwgaWR4KzEsIG5hbWUpOworCisjaWYgMAorICAgIC8qIENhbGxlZCBieSBWaW0gKi8KKyAgICBEcmF3TWVudUJhcigpOworI2VuZGlmCisKKyAgICAvKiBUT0RPOiBDYW4gbmFtZSBiZSBmcmVlZD8gKi8KKyAgICB2aW1fZnJlZShuYW1lKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfdG9nZ2xlX3RlYXJvZmZzKGVuYWJsZSkKKyAgICBpbnQJICAgIGVuYWJsZTsKK3sKKyAgICAvKiBubyB0ZWFyb2ZmIG1lbnVzICovCit9CisKKy8qCisgKiBEZXN0cm95IHRoZSBtYWNoaW5lIHNwZWNpZmljIG1lbnUgd2lkZ2V0LgorICovCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X21lbnUobWVudSkKKyAgICB2aW1tZW51X1QJKm1lbnU7Cit7CisgICAgc2hvcnQJaW5kZXggPSBndWlfbWFjX2dldF9tZW51X2l0ZW1faW5kZXggKG1lbnUpOworCisgICAgaWYgKGluZGV4ID4gMCkKKyAgICB7CisgICAgICBpZiAobWVudS0+cGFyZW50KQorICAgICAgeworI2lmZGVmIFVTRV9IRUxQTUVOVQorCWlmIChtZW51LT5wYXJlbnQtPnN1Ym1lbnVfaGFuZGxlICE9IG5pbCkgLypndWkuTWFjT1NIZWxwTWVudSkqLworI2VuZGlmCisJeworCSAgICAvKiBGb3Igbm93IGp1c3QgZG9uJ3QgZGVsZXRlIGhlbHAgbWVudSBpdGVtcy4gKEh1aD8gRGFueSkgKi8KKwkgICAgRGVsZXRlTWVudUl0ZW0gKG1lbnUtPnBhcmVudC0+c3VibWVudV9oYW5kbGUsIGluZGV4KTsKKworCSAgICAvKiBEZWxldGUgdGhlIE1lbnUgaWYgaXQgd2FzIGEgaGllcmFyY2hpY2FsIE1lbnUgKi8KKwkgICAgaWYgKG1lbnUtPnN1Ym1lbnVfaWQgIT0gMCkKKwkgICAgeworCQlEZWxldGVNZW51IChtZW51LT5zdWJtZW51X2lkKTsKKwkJRGlzcG9zZU1lbnUgKG1lbnUtPnN1Ym1lbnVfaGFuZGxlKTsKKwkgICAgfQorCX0KKyNpZmRlZiBVU0VfSEVMUE1FTlUKKyMgaWZkZWYgREVCVUdfTUFDX01FTlUKKwllbHNlCisJeworCSAgICBwcmludGYgKCJnbWRtIDFcbiIpOworCX0KKyMgZW5kaWYKKyNlbmRpZgorICAgICAgfQorI2lmZGVmIERFQlVHX01BQ19NRU5VCisgICAgICBlbHNlCisgICAgICB7CisJcHJpbnRmICgiZ21kbSAyXG4iKTsKKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIERvIG5vdCBkZWxldGUgdGhlIEhlbHAgTWVudSAqLworI2lmZGVmIFVTRV9IRUxQTUVOVQorCWlmIChtZW51LT5zdWJtZW51X2lkICE9IGtITUhlbHBNZW51SUQpCisjZW5kaWYKKwl7CisJICAgIERlbGV0ZU1lbnUgKG1lbnUtPnN1Ym1lbnVfaWQpOworCSAgICBEaXNwb3NlTWVudSAobWVudS0+c3VibWVudV9oYW5kbGUpOworCX0KKyAgICB9CisgICAgLyogU2hvdWxkbid0IHRoaXMgYmUgYWxyZWFkeSBkb25lIGJ5IFZpbS4gVE9ETzogQ2hlY2sgKi8KKyAgICBEcmF3TWVudUJhcigpOworfQorCisvKgorICogTWFrZSBhIG1lbnUgZWl0aGVyIGdyZXkgb3Igbm90IGdyZXkuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX21lbnVfZ3JleShtZW51LCBncmV5KQorICAgIHZpbW1lbnVfVAkqbWVudTsKKyAgICBpbnQJCWdyZXk7Cit7CisgICAgLyogVE9ETzogQ2hlY2sgaWYgbWVudSByZWFsbHkgZXhpc3RzICovCisgICAgc2hvcnQgaW5kZXggPSBndWlfbWFjX2dldF9tZW51X2l0ZW1faW5kZXggKG1lbnUpOworLyoKKyAgICBpbmRleCA9IG1lbnUtPmluZGV4OworKi8KKyAgICBpZiAoZ3JleSkKKyAgICB7CisJaWYgKG1lbnUtPmNoaWxkcmVuKQorCSAgICBEaXNhYmxlTWVudUl0ZW0obWVudS0+c3VibWVudV9oYW5kbGUsIGluZGV4KTsKKwlpZiAobWVudS0+cGFyZW50KQorCSAgaWYgKG1lbnUtPnBhcmVudC0+c3VibWVudV9oYW5kbGUpCisJICAgIERpc2FibGVNZW51SXRlbShtZW51LT5wYXJlbnQtPnN1Ym1lbnVfaGFuZGxlLCBpbmRleCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKG1lbnUtPmNoaWxkcmVuKQorCSAgICBFbmFibGVNZW51SXRlbShtZW51LT5zdWJtZW51X2hhbmRsZSwgaW5kZXgpOworCWlmIChtZW51LT5wYXJlbnQpCisJICBpZiAobWVudS0+cGFyZW50LT5zdWJtZW51X2hhbmRsZSkKKwkgICAgRW5hYmxlTWVudUl0ZW0obWVudS0+cGFyZW50LT5zdWJtZW51X2hhbmRsZSwgaW5kZXgpOworICAgIH0KK30KKworLyoKKyAqIE1ha2UgbWVudSBpdGVtIGhpZGRlbiBvciBub3QgaGlkZGVuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX21lbnVfaGlkZGVuKG1lbnUsIGhpZGRlbikKKyAgICB2aW1tZW51X1QJKm1lbnU7CisgICAgaW50CQloaWRkZW47Cit7CisgICAgLyogVGhlcmUncyBubyBoaWRkZW4gbW9kZSBvbiBNYWNPUyAqLworICAgIGd1aV9tY2hfbWVudV9ncmV5IChtZW51LCBoaWRkZW4pOworfQorCisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBzZXR0aW5nIGFsbCB0aGUgbWVudXMgdG8gZ3JleS9oaWRkZW4gb3Igbm90LgorICovCisgICAgdm9pZAorZ3VpX21jaF9kcmF3X21lbnViYXIoKQoreworICAgIERyYXdNZW51QmFyKCk7Cit9CisKKworLyoKKyAqIFNjcm9sbGJhciBzdHVmZi4KKyAqLworCisgICAgdm9pZAorZ3VpX21jaF9lbmFibGVfc2Nyb2xsYmFyKHNiLCBmbGFnKQorICAgIHNjcm9sbGJhcl9UCSpzYjsKKyAgICBpbnQJCWZsYWc7Cit7CisgICAgaWYgKGZsYWcpCisJU2hvd0NvbnRyb2woc2ItPmlkKTsKKyAgICBlbHNlCisJSGlkZUNvbnRyb2woc2ItPmlkKTsKKworI2lmZGVmIERFQlVHX01BQ19TQgorICAgIHByaW50ZiAoImVuYl9zYiAoJXgpICV4XG4iLHNiLT5pZCwgZmxhZyk7CisjZW5kaWYKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3Njcm9sbGJhcl90aHVtYihzYiwgdmFsLCBzaXplLCBtYXgpCisgICAgc2Nyb2xsYmFyX1QgKnNiOworICAgIGxvbmcJdmFsOworICAgIGxvbmcJc2l6ZTsKKyAgICBsb25nCW1heDsKK3sKKyAgICBTZXRDb250cm9sMzJCaXRNYXhpbXVtIChzYi0+aWQsIG1heCk7CisgICAgU2V0Q29udHJvbDMyQml0TWluaW11bSAoc2ItPmlkLCAwKTsKKyAgICBTZXRDb250cm9sMzJCaXRWYWx1ZSAgIChzYi0+aWQsIHZhbCk7CisjaWZkZWYgREVCVUdfTUFDX1NCCisgICAgcHJpbnRmICgidGh1bWJfc2IgKCV4KSAleCwgJXgsJXhcbiIsc2ItPmlkLCB2YWwsIHNpemUsIG1heCk7CisjZW5kaWYKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3Njcm9sbGJhcl9wb3Moc2IsIHgsIHksIHcsIGgpCisgICAgc2Nyb2xsYmFyX1QgKnNiOworICAgIGludAkJeDsKKyAgICBpbnQJCXk7CisgICAgaW50CQl3OworICAgIGludAkJaDsKK3sKKyAgICBndWlfbWNoX3NldF9iZ19jb2xvcihndWkuYmFja19waXhlbCk7CisvKiAgaWYgKGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfTEVGVF0pCisgICAgeworCU1vdmVDb250cm9sIChzYi0+aWQsIHgtMTYsIHkpOworCVNpemVDb250cm9sIChzYi0+aWQsIHcgKyAxLCBoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlNb3ZlQ29udHJvbCAoc2ItPmlkLCB4LCB5KTsKKwlTaXplQ29udHJvbCAoc2ItPmlkLCB3ICsgMSwgaCk7CisgICAgfSovCisgICAgaWYgKHNiID09ICZndWkuYm90dG9tX3NiYXIpCisJaCArPSAxOworICAgIGVsc2UKKwl3ICs9IDE7CisKKyAgICBpZiAoZ3VpLndoaWNoX3Njcm9sbGJhcnNbU0JBUl9MRUZUXSkKKwl4IC09IDE1OworCisgICAgTW92ZUNvbnRyb2wgKHNiLT5pZCwgeCwgeSk7CisgICAgU2l6ZUNvbnRyb2wgKHNiLT5pZCwgdywgaCk7CisjaWZkZWYgREVCVUdfTUFDX1NCCisgICAgcHJpbnRmICgic2l6ZV9zYiAoJXgpICV4LCAleCwgJXgsICV4XG4iLHNiLT5pZCwgeCwgeSwgdywgaCk7CisjZW5kaWYKK30KKworICAgIHZvaWQKK2d1aV9tY2hfY3JlYXRlX3Njcm9sbGJhcihzYiwgb3JpZW50KQorICAgIHNjcm9sbGJhcl9UICpzYjsKKyAgICBpbnQJCW9yaWVudDsJLyogU0JBUl9WRVJUIG9yIFNCQVJfSE9SSVogKi8KK3sKKyAgICBSZWN0IGJvdW5kczsKKworICAgIGJvdW5kcy50b3AgPSAtMTY7CisgICAgYm91bmRzLmJvdHRvbSA9IC0xMDsKKyAgICBib3VuZHMucmlnaHQgPSAtMTA7CisgICAgYm91bmRzLmxlZnQgPSAtMTY7CisKKyAgICBzYi0+aWQgPSBOZXdDb250cm9sIChndWkuVmltV2luZG93LAorCQkJICZib3VuZHMsCisJCQkgIlxwU2Nyb2xsQmFyIiwKKwkJCSBUUlVFLAorCQkJIDAsIC8qIGN1cnJlbnQqLworCQkJIDAsIC8qIHRvcCAqLworCQkJIDAsIC8qIGJvdHRvbSAqLworI2lmZGVmIFVTRV9DQVJCT05JWkVECisJCQkga0NvbnRyb2xTY3JvbGxCYXJMaXZlUHJvYywKKyNlbHNlCisJCQkgc2Nyb2xsQmFyUHJvYywKKyNlbmRpZgorCQkJIChsb25nKSBzYi0+aWRlbnQpOworI2lmZGVmIERFQlVHX01BQ19TQgorICAgIHByaW50ZiAoImNyZWF0ZV9zYiAoJXgpICV4XG4iLHNiLT5pZCwgb3JpZW50KTsKKyNlbmRpZgorfQorCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X3Njcm9sbGJhcihzYikKKyAgICBzY3JvbGxiYXJfVCAqc2I7Cit7CisgICAgZ3VpX21jaF9zZXRfYmdfY29sb3IoZ3VpLmJhY2tfcGl4ZWwpOworICAgIERpc3Bvc2VDb250cm9sIChzYi0+aWQpOworI2lmZGVmIERFQlVHX01BQ19TQgorICAgIHByaW50ZiAoImRlc3Rfc2IgKCV4KSBcbiIsc2ItPmlkKTsKKyNlbmRpZgorfQorCisKKy8qCisgKiBDdXJzb3IgYmxpbmsgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgaXMgYSBzaW1wbGUgc3RhdGUgbWFjaGluZToKKyAqIEJMSU5LX05PTkUJbm90IGJsaW5raW5nIGF0IGFsbAorICogQkxJTktfT0ZGCWJsaW5raW5nLCBjdXJzb3IgaXMgbm90IHNob3duCisgKiBCTElOS19PTiBibGlua2luZywgY3Vyc29yIGlzIHNob3duCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9ibGlua2luZyhsb25nIHdhaXQsIGxvbmcgb24sIGxvbmcgb2ZmKQoreworICAgIC8qIFRPRE86IFRPRE86IFRPRE86IFRPRE86ICovCisvKiAgICBibGlua193YWl0dGltZSA9IHdhaXQ7CisgICAgYmxpbmtfb250aW1lID0gb247CisgICAgYmxpbmtfb2ZmdGltZSA9IG9mZjsqLworfQorCisvKgorICogU3RvcCB0aGUgY3Vyc29yIGJsaW5raW5nLiAgU2hvdyB0aGUgY3Vyc29yIGlmIGl0IHdhc24ndCBzaG93bi4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc3RvcF9ibGluaygpCit7CisgICAgZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworICAgIC8qIFRPRE86IFRPRE86IFRPRE86IFRPRE86ICovCisvKiAgICBndWlfdzMyX3JtX2JsaW5rX3RpbWVyKCk7CisgICAgaWYgKGJsaW5rX3N0YXRlID09IEJMSU5LX09GRikKKyAgICBndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisgICAgYmxpbmtfc3RhdGUgPSBCTElOS19OT05FOyovCit9CisKKy8qCisgKiBTdGFydCB0aGUgY3Vyc29yIGJsaW5raW5nLiAgSWYgaXQgd2FzIGFscmVhZHkgYmxpbmtpbmcsIHRoaXMgcmVzdGFydHMgdGhlCisgKiB3YWl0aW5nIHRpbWUgYW5kIHNob3dzIHRoZSBjdXJzb3IuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3N0YXJ0X2JsaW5rKCkKK3sKKyAgICBndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisgICAgLyogVE9ETzogVE9ETzogVE9ETzogVE9ETzogKi8KKy8qICAgIGd1aV93MzJfcm1fYmxpbmtfdGltZXIoKTsgKi8KKworICAgIC8qIE9ubHkgc3dpdGNoIGJsaW5raW5nIG9uIGlmIG5vbmUgb2YgdGhlIHRpbWVzIGlzIHplcm8gKi8KKy8qICAgIGlmIChibGlua193YWl0dGltZSAmJiBibGlua19vbnRpbWUgJiYgYmxpbmtfb2ZmdGltZSkKKyAgICB7CisgICAgYmxpbmtfdGltZXIgPSBTZXRUaW1lcihOVUxMLCAwLCAoVUlOVClibGlua193YWl0dGltZSwKKwkJCSAgICAoVElNRVJQUk9DKV9PbkJsaW5rVGltZXIpOworICAgIGJsaW5rX3N0YXRlID0gQkxJTktfT047CisgICAgZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworICAgIH0qLworfQorCisvKgorICogUmV0dXJuIHRoZSBSR0IgdmFsdWUgb2YgYSBwaXhlbCBhcyBsb25nLgorICovCisgICAgbG9uZ191CitndWlfbWNoX2dldF9yZ2IoZ3VpY29sb3JfVCBwaXhlbCkKK3sKKyAgICByZXR1cm4gKFJlZChwaXhlbCkgPDwgMTYpICsgKEdyZWVuKHBpeGVsKSA8PCA4KSArIEJsdWUocGl4ZWwpOworfQorCisKKworI2lmZGVmIEZFQVRfQlJPV1NFCisvKgorICogUG9wIG9wZW4gYSBmaWxlIGJyb3dzZXIgYW5kIHJldHVybiB0aGUgZmlsZSBzZWxlY3RlZCwgaW4gYWxsb2NhdGVkIG1lbW9yeSwKKyAqIG9yIE5VTEwgaWYgQ2FuY2VsIGlzIGhpdC4KKyAqICBzYXZpbmcgIC0gVFJVRSBpZiB0aGUgZmlsZSB3aWxsIGJlIHNhdmVkIHRvLCBGQUxTRSBpZiBpdCB3aWxsIGJlIG9wZW5lZC4KKyAqICB0aXRsZSAgIC0gVGl0bGUgbWVzc2FnZSBmb3IgdGhlIGZpbGUgYnJvd3NlciBkaWFsb2cuCisgKiAgZGZsdCAgICAtIERlZmF1bHQgbmFtZSBvZiBmaWxlLgorICogIGV4dCAgICAgLSBEZWZhdWx0IGV4dGVuc2lvbiB0byBiZSBhZGRlZCB0byBmaWxlcyB3aXRob3V0IGV4dGVuc2lvbnMuCisgKiAgaW5pdGRpciAtIGRpcmVjdG9yeSBpbiB3aGljaCB0byBvcGVuIHRoZSBicm93c2VyIChOVUxMID0gY3VycmVudCBkaXIpCisgKiAgZmlsdGVyICAtIEZpbHRlciBmb3IgbWF0Y2hlZCBmaWxlcyB0byBjaG9vc2UgZnJvbS4KKyAqICBIYXMgYSBmb3JtYXQgbGlrZSB0aGlzOgorICogICJDIEZpbGVzICgqLmMpXDAqLmNcMCIKKyAqICAiQWxsIEZpbGVzXDAqLipcMFwwIgorICogIElmIHRoZXNlIHR3byBzdHJpbmdzIHdlcmUgY29uY2F0ZW5hdGVkLCB0aGVuIGEgY2hvaWNlIG9mIHR3byBmaWxlCisgKiAgZmlsdGVycyB3aWxsIGJlIHNlbGVjdGFibGUgdG8gdGhlIHVzZXIuICBUaGVuIG9ubHkgbWF0Y2hpbmcgZmlsZXMgd2lsbAorICogIGJlIHNob3duIGluIHRoZSBicm93c2VyLiAgSWYgTlVMTCwgdGhlIGRlZmF1bHQgYWxsb3dzIGFsbCBmaWxlcy4KKyAqCisgKiAgKk5PVEUqIC0gdGhlIGZpbHRlciBzdHJpbmcgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggVFdPIG51bGxzLgorICovCisgICAgY2hhcl91ICoKK2d1aV9tY2hfYnJvd3NlKAorICAgIGludCBzYXZpbmcsCisgICAgY2hhcl91ICp0aXRsZSwKKyAgICBjaGFyX3UgKmRmbHQsCisgICAgY2hhcl91ICpleHQsCisgICAgY2hhcl91ICppbml0ZGlyLAorICAgIGNoYXJfdSAqZmlsdGVyKQoreworI2lmIGRlZmluZWQgKFVTRV9OQVZJR0FUSU9OX1NFUlZJQ0UpIHx8IGRlZmluZWQgKFVTRV9DQVJCT05JWkVEKQorICAgIC8qIFRPRE86IEFkZCBBbW1vbidzIHNhZmV0eSBjaGVjbCAoRGFueSkgKi8KKyAgICBOYXZSZXBseVJlY29yZAlyZXBseTsKKyAgICBjaGFyX3UJCSpmbmFtZSA9IE5VTEw7CisgICAgY2hhcl91CQkqKmZuYW1lcyA9IE5VTEw7CisgICAgbG9uZwkJbnVtRmlsZXM7CisgICAgTmF2RGlhbG9nT3B0aW9ucwluYXZPcHRpb25zOworICAgIE9TRXJyCQllcnJvcjsKKworICAgIC8qIEdldCBOYXZpZ2F0aW9uIFNlcnZpY2UgRGVmYXVsdHMgdmFsdWUgKi8KKyAgICBOYXZHZXREZWZhdWx0RGlhbG9nT3B0aW9ucyAoJm5hdk9wdGlvbnMpOworCisKKyAgICAvKiBUT0RPOiBJZiB3ZSBnZXQgYSA6YnJvd3NlIGFyZ3MsIHNldCB0aGUgTXVsdGlwbGUgYml0LiAqLworICAgIG5hdk9wdGlvbnMuZGlhbG9nT3B0aW9uRmxhZ3MgPSAga05hdkFsbG93SW52aXNpYmxlRmlsZXMKKwkJCQkgfCAga05hdkRvbnRBdXRvVHJhbnNsYXRlCisJCQkJIHwgIGtOYXZEb250QWRkVHJhbnNsYXRlSXRlbXMKKwkJCSAgICAvKgkgfCAga05hdkFsbG93TXVsdGlwbGVGaWxlcyAqLworCQkJCSB8ICBrTmF2QWxsb3dTdGF0aW9uZXJ5OworCisgICAgKHZvaWQpIEMyUGFzY2FsU3RyaW5nICh0aXRsZSwgICAmbmF2T3B0aW9ucy5tZXNzYWdlKTsKKyAgICAodm9pZCkgQzJQYXNjYWxTdHJpbmcgKGRmbHQsICAgICZuYXZPcHRpb25zLnNhdmVkRmlsZU5hbWUpOworICAgIC8qIENvdWxkIHNldCBjbGllbnROYW1lPworICAgICAqCQkgd2luZG93VGl0bGU/ICh0aGVyZSdzIG5vIHRpdGxlIGJhcj8pCisgICAgICovCisKKyAgICBpZiAoc2F2aW5nKQorICAgIHsKKwkvKiBDaGFuZ2UgZmlyc3QgcGFybSBBRURlc2MgKHR5cGVGU1MpICpkZWZhdWx0TG9jYXRpb24gdG8gbWF0Y2ggZGZsdCAqLworCU5hdlB1dEZpbGUgKE5VTEwsICZyZXBseSwgJm5hdk9wdGlvbnMsIE5VTEwsICdURVhUJywgJ1ZJTSEnLCBOVUxMKTsKKwlpZiAoIXJlcGx5LnZhbGlkUmVjb3JkKQorCSAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBDaGFuZ2UgZmlyc3QgcGFybSBBRURlc2MgKHR5cGVGU1MpICpkZWZhdWx0TG9jYXRpb24gdG8gbWF0Y2ggZGZsdCAqLworCU5hdkdldEZpbGUoTlVMTCwgJnJlcGx5LCAmbmF2T3B0aW9ucywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJaWYgKCFyZXBseS52YWxpZFJlY29yZCkKKwkgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZm5hbWVzID0gbmV3X2ZuYW1lc19mcm9tX0FFRGVzYygmcmVwbHkuc2VsZWN0aW9uLCAmbnVtRmlsZXMsICZlcnJvcik7CisKKyAgICBOYXZEaXNwb3NlUmVwbHkgKCZyZXBseSk7CisKKyAgICBpZiAoZm5hbWVzKQorICAgIHsKKwlmbmFtZSA9IGZuYW1lc1swXTsKKwl2aW1fZnJlZShmbmFtZXMpOworICAgIH0KKworICAgIC8qIFRPRE86IFNob3J0ZW4gdGhlIGZpbGUgbmFtZSBpZiBwb3NzaWJsZSAqLworICAgIHJldHVybiBmbmFtZTsKKyNlbHNlCisgICAgU0ZUeXBlTGlzdAkJZmlsZVR5cGVzOworICAgIFN0YW5kYXJkRmlsZVJlcGx5CXJlcGx5OworICAgIFN0cjI1NQkJUHJvbXB0OworICAgIFN0cjI1NQkJRGVmYXVsdE5hbWU7CisgICAgU3RyMjU1CQlEaXJlY3Rvcnk7CisKKyAgICAvKiBUT0RPOiBzcGxpdCBkZmx0IGluIHBhdGggYW5kIGZpbGVuYW1lICovCisKKyAgICAodm9pZCkgQzJQYXNjYWxTdHJpbmcgKHRpdGxlLCAgICZQcm9tcHQpOworICAgICh2b2lkKSBDMlBhc2NhbFN0cmluZyAoZGZsdCwgICAgJkRlZmF1bHROYW1lKTsKKyAgICAodm9pZCkgQzJQYXNjYWxTdHJpbmcgKGluaXRkaXIsICZEaXJlY3RvcnkpOworCisgICAgaWYgKHNhdmluZykKKyAgICB7CisJLyogVXNlIGEgY3VzdG9uIGZpbHRlciBpbnN0ZWFkIG9mIG5pbCBGQVEgOS00ICovCisJU3RhbmRhcmRQdXRGaWxlIChQcm9tcHQsIERlZmF1bHROYW1lLCAgJnJlcGx5KTsKKwlpZiAoIXJlcGx5LnNmR29vZCkKKwkgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJU3RhbmRhcmRHZXRGaWxlIChuaWwsIC0xLCBmaWxlVHlwZXMsICZyZXBseSk7CisJaWYgKCFyZXBseS5zZkdvb2QpCisJICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIFdvcmsgZmluZSBidXQgYXBwZW5kIGEgOiBmb3IgbmV3IGZpbGUgKi8KKyAgICByZXR1cm4gKEZ1bGxQYXRoRnJvbUZTU3BlY19zYXZlIChyZXBseS5zZkZpbGUpKTsKKworICAgIC8qIFNob3J0ZW4gdGhlIGZpbGUgbmFtZSBpZiBwb3NzaWJsZSAqLworLyogICAgbWNoX2Rpcm5hbWUoSU9idWZmLCBJT1NJWkUpOworICAgIHAgPSBzaG9ydGVuX2ZuYW1lKGZpbGVCdWYsIElPYnVmZik7CisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICBwID0gZmlsZUJ1ZjsKKyAgICByZXR1cm4gdmltX3N0cnNhdmUocCk7CisqLworI2VuZGlmCit9CisjZW5kaWYgLyogRkVBVF9CUk9XU0UgKi8KKworI2lmZGVmIEZFQVRfR1VJX0RJQUxPRworLyoKKyAqIFN0dWZmIGZvciBkaWFsb2d1ZXMKKyAqLworCisvKgorICogQ3JlYXRlIGEgZGlhbG9ndWUgZHluYW1pY2FsbHkgZnJvbSB0aGUgcGFyYW1ldGVyIHN0cmluZ3MuCisgKiB0eXBlICAgICAgID0gdHlwZSBvZiBkaWFsb2d1ZSAocXVlc3Rpb24sIGFsZXJ0LCBldGMuKQorICogdGl0bGUgICAgICA9IGRpYWxvZ3VlIHRpdGxlLiBtYXkgYmUgTlVMTCBmb3IgZGVmYXVsdCB0aXRsZS4KKyAqIG1lc3NhZ2UgICAgPSB0ZXh0IHRvIGRpc3BsYXkuIERpYWxvZ3VlIHNpemVzIHRvIGFjY29tbW9kYXRlIGl0LgorICogYnV0dG9ucyAgICA9ICdcbicgc2VwYXJhdGVkIGxpc3Qgb2YgYnV0dG9uIGNhcHRpb25zLCBkZWZhdWx0IGZpcnN0LgorICogZGZsdGJ1dHRvbiA9IG51bWJlciBvZiBkZWZhdWx0IGJ1dHRvbi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyAxIGlmIHRoZSBmaXJzdCBidXR0b24gaXMgcHJlc3NlZCwKKyAqCSAgICAyIGZvciB0aGUgc2Vjb25kLCBldGMuCisgKgorICoJICAgIDAgaW5kaWNhdGVzIEVzYyB3YXMgcHJlc3NlZC4KKyAqCSAgICAtMSBmb3IgdW5leHBlY3RlZCBlcnJvcgorICoKKyAqIElmIHN0dWJiaW5nIG91dCB0aGlzIGZuLCByZXR1cm4gMS4KKyAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgIHNob3J0ICAgaWR4OworICAgIHNob3J0ICAgd2lkdGg7CS8qIFNpemUgb2YgdGhlIHRleHQgaW4gcGl4ZWwgKi8KKyAgICBSZWN0ICAgIGJveDsKK30gdmdtRGxnSXRtOyAvKiBWaW0gR3VpX01hYy5jIERpYWxvZyBJdGVtICovCisKKyNkZWZpbmUgTW92ZVJlY3RUbyhyLHgseSkgT2Zmc2V0UmVjdChyLHgtci0+bGVmdCx5LXItPnRvcCkKKworICAgIHN0YXRpYyB2b2lkCittYWNNb3ZlRGlhbG9nSXRlbSgKKyAgICBEaWFsb2dSZWYJdGhlRGlhbG9nLAorICAgIHNob3J0CWl0ZW1OdW1iZXIsCisgICAgc2hvcnQJWCwKKyAgICBzaG9ydAlZLAorICAgIFJlY3QJKmluQm94KQoreworI2lmIDAgLyogVVNFX0NBUkJPTklaRUQgKi8KKyAgICAvKiBVbnRlc3RlZCAqLworICAgIE1vdmVEaWFsb2dJdGVtICh0aGVEaWFsb2csIGl0ZW1OdW1iZXIsIFgsIFkpOworICAgIGlmIChpbkJveCAhPSBuaWwpCisJR2V0RGlhbG9nSXRlbSAodGhlRGlhbG9nLCBpdGVtTnVtYmVyLCAmaXRlbVR5cGUsICZpdGVtSGFuZGxlLCBpbkJveCk7CisjZWxzZQorICAgIHNob3J0CWl0ZW1UeXBlOworICAgIEhhbmRsZQlpdGVtSGFuZGxlOworICAgIFJlY3QJbG9jYWxCb3g7CisgICAgUmVjdAkqaXRlbUJveCA9ICZsb2NhbEJveDsKKworICAgIGlmIChpbkJveCAhPSBuaWwpCisJaXRlbUJveCA9IGluQm94OworCisgICAgR2V0RGlhbG9nSXRlbSAodGhlRGlhbG9nLCBpdGVtTnVtYmVyLCAmaXRlbVR5cGUsICZpdGVtSGFuZGxlLCBpdGVtQm94KTsKKyAgICBPZmZzZXRSZWN0IChpdGVtQm94LCAtaXRlbUJveC0+bGVmdCwgLWl0ZW1Cb3gtPnRvcCk7CisgICAgT2Zmc2V0UmVjdCAoaXRlbUJveCwgWCwgWSk7CisgICAgLyogVG8gbW92ZSBhIGNvbnRyb2wgKGxpa2UgYSBidXR0b24pIHdlIG5lZWQgdG8gY2FsbCBib3RoCisgICAgICogTW92ZUNvbnRyb2wgYW5kIFNldERpYWxvZ0l0ZW0uIEZBUSA2LTE4ICovCisgICAgaWYgKDEpIC8qKGl0ZW1UeXBlICYga0NvbnRyb2xEaWFsb2dJdGVtKSAqLworCU1vdmVDb250cm9sICgoQ29udHJvbFJlZikgaXRlbUhhbmRsZSwgWCwgWSk7CisgICAgU2V0RGlhbG9nSXRlbSAodGhlRGlhbG9nLCBpdGVtTnVtYmVyLCBpdGVtVHlwZSwgaXRlbUhhbmRsZSwgaXRlbUJveCk7CisjZW5kaWYKK30KKworICAgIHN0YXRpYyB2b2lkCittYWNTaXplRGlhbG9nSXRlbSgKKyAgICBEaWFsb2dSZWYJdGhlRGlhbG9nLAorICAgIHNob3J0CWl0ZW1OdW1iZXIsCisgICAgc2hvcnQJd2lkdGgsCisgICAgc2hvcnQJaGVpZ2h0KQoreworICAgIHNob3J0CWl0ZW1UeXBlOworICAgIEhhbmRsZQlpdGVtSGFuZGxlOworICAgIFJlY3QJaXRlbUJveDsKKworICAgIEdldERpYWxvZ0l0ZW0gKHRoZURpYWxvZywgaXRlbU51bWJlciwgJml0ZW1UeXBlLCAmaXRlbUhhbmRsZSwgJml0ZW1Cb3gpOworCisgICAgLyogV2hlbiB3aWR0aCBvciBoZWlnaHQgaXMgemVybyBkbyBub3QgY2hhbmdlIGl0ICovCisgICAgaWYgKHdpZHRoICA9PSAwKQorCXdpZHRoICA9IGl0ZW1Cb3gucmlnaHQgIC0gaXRlbUJveC5sZWZ0OworICAgIGlmIChoZWlnaHQgPT0gMCkKKwloZWlnaHQgPSBpdGVtQm94LmJvdHRvbSAtIGl0ZW1Cb3gudG9wOworCisjaWYgMCAvKiBVU0VfQ0FSQk9OSVpFRCAqLworICAgIFNpemVEaWFsb2dJdGVtICh0aGVEaWFsb2csIGl0ZW1OdW1iZXIsIHdpZHRoLCBoZWlnaHQpOyAvKiBVbnRlc3RlZCAqLworI2Vsc2UKKyAgICAvKiBSZXNpemUgdGhlIGJvdW5kaW5nIGJveCAqLworICAgIGl0ZW1Cb3gucmlnaHQgID0gaXRlbUJveC5sZWZ0ICsgd2lkdGg7CisgICAgaXRlbUJveC5ib3R0b20gPSBpdGVtQm94LnRvcCAgKyBoZWlnaHQ7CisKKyAgICAvKiBUbyByZXNpemUgYSBjb250cm9sIChsaWtlIGEgYnV0dG9uKSB3ZSBuZWVkIHRvIGNhbGwgYm90aAorICAgICAqIFNpemVDb250cm9sIGFuZCBTZXREaWFsb2dJdGVtLiAoZGVkdWN0ZWQgZnJvbSBGQVEgNi0xOCkgKi8KKyAgICBpZiAoaXRlbVR5cGUgJiBrQ29udHJvbERpYWxvZ0l0ZW0pCisJU2l6ZUNvbnRyb2wgKChDb250cm9sUmVmKSBpdGVtSGFuZGxlLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIC8qIENvbmZpZ3VyZSBiYWNrIHRoZSBpdGVtICovCisgICAgU2V0RGlhbG9nSXRlbSAodGhlRGlhbG9nLCBpdGVtTnVtYmVyLCBpdGVtVHlwZSwgaXRlbUhhbmRsZSwgJml0ZW1Cb3gpOworI2VuZGlmCit9CisKKyAgICBzdGF0aWMgdm9pZAorbWFjU2V0RGlhbG9nSXRlbVRleHQoCisgICAgRGlhbG9nUmVmCXRoZURpYWxvZywKKyAgICBzaG9ydAlpdGVtTnVtYmVyLAorICAgIFN0cjI1NQlpdGVtTmFtZSkKK3sKKyAgICBzaG9ydAlpdGVtVHlwZTsKKyAgICBIYW5kbGUJaXRlbUhhbmRsZTsKKyAgICBSZWN0CWl0ZW1Cb3g7CisKKyAgICBHZXREaWFsb2dJdGVtICh0aGVEaWFsb2csIGl0ZW1OdW1iZXIsICZpdGVtVHlwZSwgJml0ZW1IYW5kbGUsICZpdGVtQm94KTsKKworICAgIGlmIChpdGVtVHlwZSAmIGtDb250cm9sRGlhbG9nSXRlbSkKKwlTZXRDb250cm9sVGl0bGUgKChDb250cm9sUmVmKSBpdGVtSGFuZGxlLCBpdGVtTmFtZSk7CisgICAgZWxzZQorCVNldERpYWxvZ0l0ZW1UZXh0IChpdGVtSGFuZGxlLCBpdGVtTmFtZSk7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfZGlhbG9nKAorICAgIGludAkJdHlwZSwKKyAgICBjaGFyX3UJKnRpdGxlLAorICAgIGNoYXJfdQkqbWVzc2FnZSwKKyAgICBjaGFyX3UJKmJ1dHRvbnMsCisgICAgaW50CQlkZmx0YnV0dG9uLAorICAgIGNoYXJfdQkqdGV4dGZpZWxkKQoreworICAgIEhhbmRsZQlidXR0b25ESVRMOworICAgIEhhbmRsZQlpY29uRElUTDsKKyAgICBIYW5kbGUJaW5wdXRESVRMOworICAgIEhhbmRsZQltZXNzYWdlRElUTDsKKyAgICBIYW5kbGUJaXRlbUhhbmRsZTsKKyAgICBIYW5kbGUJaWNvbkhhbmRsZTsKKyAgICBEaWFsb2dQdHIJdGhlRGlhbG9nOworICAgIGNoYXJfdQlsZW47CisgICAgY2hhcl91CVBhc2NhbFRpdGxlWzI1Nl07CS8qIHBsYWNlIGhvbGRlciBmb3IgdGhlIHRpdGxlICovCisgICAgY2hhcl91CW5hbWVbMjU2XTsKKyAgICBHcmFmUHRyCW9sZFBvcnQ7CisgICAgc2hvcnQJaXRlbUhpdDsKKyAgICBjaGFyX3UJKmJ1dHRvbkNoYXI7CisgICAgUmVjdAlib3g7CisgICAgc2hvcnQJYnV0dG9uOworICAgIHNob3J0CWxhc3RCdXR0b247CisgICAgc2hvcnQJaXRlbVR5cGU7CisgICAgc2hvcnQJdXNlSWNvbjsKKyAgICBzaG9ydAl3aWR0aDsKKyAgICBzaG9ydAl0b3RhbEJ1dHRvbldpZHRoID0gMDsgICAvKiB0aGUgd2lkdGggb2YgYWxsIGJ1dHRvbiB0b2dldGhlciBpbmN1ZGluZyBzcGFjaW5nICovCisgICAgc2hvcnQJd2lkZXN0QnV0dG9uID0gMDsKKyAgICBzaG9ydAlkZmx0QnV0dG9uRWRnZSAgICAgPSAyMDsgIC8qIGd1dCBmZWVsaW5nICovCisgICAgc2hvcnQJZGZsdEVsZW1lbnRTcGFjaW5nID0gMTM7ICAvKiBmcm9tIElNOlYuMi0yOSAqLworICAgIHNob3J0ICAgICAgIGRmbHRJY29uU2lkZVNwYWNlICA9IDIzOyAgLyogZnJvbSBJTTpWLjItMjkgKi8KKyAgICBzaG9ydAltYXhpbXVtV2lkdGggICAgICAgPSA0MDA7IC8qIGd1dCBmZWVsaW5nICovCisgICAgc2hvcnQJbWF4QnV0dG9uV2lkdGgJICAgPSAxNzU7IC8qIGd1dCBmZWVsaW5nICovCisKKyAgICBzaG9ydAl2ZXJ0aWNhbDsKKyAgICBzaG9ydAlkaWFsb2dIZWlnaHQ7CisgICAgc2hvcnQJbWVzc2FnZUxpbmVzID0gMzsKKyAgICBGb250SW5mbwl0ZXh0Rm9udEluZm87CisKKyAgICB2Z21EbGdJdG0gICBpY29uSXRtOworICAgIHZnbURsZ0l0bSAgIG1lc3NhZ2VJdG07CisgICAgdmdtRGxnSXRtICAgaW5wdXRJdG07CisgICAgdmdtRGxnSXRtICAgYnV0dG9uSXRtOworCisgICAgV2luZG93UmVmCXRoZVdpbmRvdzsKKworICAgIC8qIENoZWNrICd2JyBmbGFnIGluICdndWlvcHRpb25zJzogdmVydGljYWwgYnV0dG9uIHBsYWNlbWVudC4gKi8KKyAgICB2ZXJ0aWNhbCA9ICh2aW1fc3RyY2hyKHBfZ28sIEdPX1ZFUlRJQ0FMKSAhPSBOVUxMKTsKKworICAgIC8qIENyZWF0ZSBhIG5ldyBEaWFsb2cgQm94IGZyb20gdGVtcGxhdGUuICovCisgICAgdGhlRGlhbG9nID0gR2V0TmV3RGlhbG9nICgxMjksIG5pbCwgKFdpbmRvd1JlZikgLTEpOworCisgICAgLyogR2V0IHRoZSBXaW5kb3dSZWYgKi8KKyAgICB0aGVXaW5kb3cgPSBHZXREaWFsb2dXaW5kb3codGhlRGlhbG9nKTsKKworICAgIC8qIEhpZGUgdGhlIHdpbmRvdy4KKyAgICAgKiAxLiB0byBhdm9pZCBzZWVpbmcgc2xvdyBkcmF3aW5nCisgICAgICogMi4gdG8gcHJldmVudCBhIHByb2JsZW0gc2VlbiB3aGlsZSBtb3ZpbmcgZGlhbG9nIGl0ZW0KKyAgICAgKiAgICB3aXRoaW4gYSB2aXNpYmxlIHdpbmRvdy4gKG5vbi1DYXJib24gTWFjT1MgOSkKKyAgICAgKiBDb3VsZCBiZSBhdm9pZGVkIGJ5IGNoYW5naW5nIHRoZSByZXNvdXJjZS4KKyAgICAgKi8KKyAgICBIaWRlV2luZG93ICh0aGVXaW5kb3cpOworCisgICAgLyogQ2hhbmdlIHRoZSBncmFwaGljYWwgcG9ydCB0byB0aGUgZGlhbG9nLAorICAgICAqIHNvIHdlIGNhbiBtZWFzdXJlIHRoZSB0ZXh0IHdpdGggdGhlIHByb3BlciBmb250ICovCisgICAgR2V0UG9ydCAoJm9sZFBvcnQpOworI2lmZGVmIFVTRV9DQVJCT05JWkVECisgICAgU2V0UG9ydERpYWxvZ1BvcnQgKHRoZURpYWxvZyk7CisjZWxzZQorICAgIFNldFBvcnQgKHRoZURpYWxvZyk7CisjZW5kaWYKKworICAgIC8qIEdldCB0aGUgaW5mbyBhYm91dCB0aGUgZGVmYXVsdCB0ZXh0LAorICAgICAqIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG1lc3NhZ2UKKyAgICAgKiBhbmQgb2YgdGhlICB0ZXh0IGZpZWxkICovCisgICAgR2V0Rm9udEluZm8oJnRleHRGb250SW5mbyk7CisKKyAgICAvKglTZXQgdGhlIGRpYWxvZyB0aXRsZSAqLworICAgIGlmICh0aXRsZSAhPSBOVUxMKQorICAgIHsKKwkodm9pZCkgQzJQYXNjYWxTdHJpbmcgKHRpdGxlLCAmUGFzY2FsVGl0bGUpOworCVNldFdUaXRsZSAodGhlV2luZG93LCBQYXNjYWxUaXRsZSk7CisgICAgfQorCisgICAgLyogQ3JlYXRlcyB0aGUgYnV0dG9ucyBhbmQgYWRkIHRoZW0gdG8gdGhlIERpYWxvZyBCb3guICovCisgICAgYnV0dG9uRElUTCA9IEdldFJlc291cmNlICgnRElUTCcsIDEzMCk7CisgICAgYnV0dG9uQ2hhciA9IGJ1dHRvbnM7CisgICAgYnV0dG9uID0gMDsKKworICAgIGZvciAoOypidXR0b25DaGFyICE9IDA7KQorICAgIHsKKwkvKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGJ1dHRvbiAqLworCWJ1dHRvbisrOworCWxlbiA9IDA7CisJZm9yICg7KCgqYnV0dG9uQ2hhciAhPSBETEdfQlVUVE9OX1NFUCkgJiYgKCpidXR0b25DaGFyICE9IDApICYmIChsZW4gPCAyNTUpKTsgYnV0dG9uQ2hhcisrKQorCXsKKwkgICAgaWYgKCpidXR0b25DaGFyICE9IERMR19IT1RLRVlfQ0hBUikKKwkJbmFtZVsrK2xlbl0gPSAqYnV0dG9uQ2hhcjsKKwl9CisJaWYgKCpidXR0b25DaGFyICE9IDApCisJICBidXR0b25DaGFyKys7CisJbmFtZVswXSA9IGxlbjsKKworCS8qIEFkZCB0aGUgYnV0dG9uICovCisJQXBwZW5kRElUTCAodGhlRGlhbG9nLCBidXR0b25ESVRMLCBvdmVybGF5RElUTCk7IC8qIGFwcGVuZERJVExSaWdodCk7ICovCisKKwkvKiBDaGFuZ2UgdGhlIGJ1dHRvbidzIG5hbWUgKi8KKwltYWNTZXREaWFsb2dJdGVtVGV4dCAodGhlRGlhbG9nLCBidXR0b24sIG5hbWUpOworCisJLyogUmVzaXplIHRoZSBidXR0b24gdG8gZml0IGl0cyBuYW1lICovCisJd2lkdGggPSBTdHJpbmdXaWR0aCAobmFtZSkgKyAyICogZGZsdEJ1dHRvbkVkZ2U7CisJLyogTGltaXRlIHRoZSBzaXplIG9mIGFueSBidXR0b24gdG8gYW4gYWNjZXB0YWJsZSB2YWx1ZS4gKi8KKwkvKiBUT0RPOiBTaG91bGQgYmUgYmFzZWQgb24gdGhlIG1lc3NhZ2Ugd2lkdGggKi8KKwlpZiAod2lkdGggPiBtYXhCdXR0b25XaWR0aCkKKwkgICAgd2lkdGggPSBtYXhCdXR0b25XaWR0aDsKKwltYWNTaXplRGlhbG9nSXRlbSAodGhlRGlhbG9nLCBidXR0b24sIHdpZHRoLCAwKTsKKworCXRvdGFsQnV0dG9uV2lkdGggKz0gd2lkdGg7CisKKwlpZiAod2lkdGggPiB3aWRlc3RCdXR0b24pCisJICAgIHdpZGVzdEJ1dHRvbiA9IHdpZHRoOworICAgIH0KKyAgICBSZWxlYXNlUmVzb3VyY2UgKGJ1dHRvbkRJVEwpOworICAgIGxhc3RCdXR0b24gPSBidXR0b247CisKKyAgICAvKiBBZGQgdGhlIGljb24gdG8gdGhlIERpYWxvZyBCb3guICovCisgICAgaWNvbkl0bS5pZHggPSBsYXN0QnV0dG9uICsgMTsKKyAgICBpY29uRElUTCA9IEdldFJlc291cmNlICgnRElUTCcsIDEzMSk7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKwljYXNlIFZJTV9HRU5FUklDOiAgdXNlSWNvbiA9IGtOb3RlSWNvbjsKKwljYXNlIFZJTV9FUlJPUjogICAgdXNlSWNvbiA9IGtTdG9wSWNvbjsKKwljYXNlIFZJTV9XQVJOSU5HOiAgdXNlSWNvbiA9IGtDYXV0aW9uSWNvbjsKKwljYXNlIFZJTV9JTkZPOiAgICAgdXNlSWNvbiA9IGtOb3RlSWNvbjsKKwljYXNlIFZJTV9RVUVTVElPTjogdXNlSWNvbiA9IGtOb3RlSWNvbjsKKwlkZWZhdWx0OiAgICAgIHVzZUljb24gPSBrU3RvcEljb247CisgICAgfTsKKyAgICBBcHBlbmRESVRMICh0aGVEaWFsb2csIGljb25ESVRMLCBvdmVybGF5RElUTCk7CisgICAgUmVsZWFzZVJlc291cmNlIChpY29uRElUTCk7CisgICAgR2V0RGlhbG9nSXRlbSAodGhlRGlhbG9nLCBpY29uSXRtLmlkeCwgJml0ZW1UeXBlLCAmaXRlbUhhbmRsZSwgJmJveCk7CisgICAgLyogVE9ETzogU2hvdWxkIHRoZSBpdGVtIGJlIGZyZWVkPyAqLworICAgIGljb25IYW5kbGUgPSBHZXRJY29uICh1c2VJY29uKTsKKyAgICBTZXREaWFsb2dJdGVtICh0aGVEaWFsb2csIGljb25JdG0uaWR4LCBpdGVtVHlwZSwgaWNvbkhhbmRsZSwgJmJveCk7CisKKyAgICAvKiBBZGQgdGhlIG1lc3NhZ2UgdG8gdGhlIERpYWxvZyBib3guICovCisgICAgbWVzc2FnZUl0bS5pZHggPSBsYXN0QnV0dG9uICsgMjsKKyAgICBtZXNzYWdlRElUTCA9IEdldFJlc291cmNlICgnRElUTCcsIDEzMik7CisgICAgQXBwZW5kRElUTCAodGhlRGlhbG9nLCBtZXNzYWdlRElUTCwgb3ZlcmxheURJVEwpOworICAgIFJlbGVhc2VSZXNvdXJjZSAobWVzc2FnZURJVEwpOworICAgIEdldERpYWxvZ0l0ZW0gKHRoZURpYWxvZywgbWVzc2FnZUl0bS5pZHgsICZpdGVtVHlwZSwgJml0ZW1IYW5kbGUsICZib3gpOworICAgICh2b2lkKSBDMlBhc2NhbFN0cmluZyAobWVzc2FnZSwgJm5hbWUpOworICAgIFNldERpYWxvZ0l0ZW1UZXh0IChpdGVtSGFuZGxlLCBuYW1lKTsKKyAgICBtZXNzYWdlSXRtLndpZHRoID0gU3RyaW5nV2lkdGggKG5hbWUpOworCisgICAgLyogQWRkIHRoZSBpbnB1dCBib3ggaWYgbmVlZGVkICovCisgICAgaWYgKHRleHRmaWVsZCAhPSBOVUxMKQorICAgIHsKKwkvKiBDaGVhdCBmb3Igbm93IHJldXNlIHRoZSBtZXNzYWdlIGFuZCBjb252ZXQgdG8gdGV4dCBlZGl0ICovCisJaW5wdXRJdG0uaWR4ID0gbGFzdEJ1dHRvbiArIDM7CisJaW5wdXRESVRMID0gR2V0UmVzb3VyY2UgKCdESVRMJywgMTMyKTsKKwlBcHBlbmRESVRMICh0aGVEaWFsb2csIGlucHV0RElUTCwgb3ZlcmxheURJVEwpOworCVJlbGVhc2VSZXNvdXJjZSAoaW5wdXRESVRMKTsKKwlHZXREaWFsb2dJdGVtICh0aGVEaWFsb2csIGlucHV0SXRtLmlkeCwgJml0ZW1UeXBlLCAmaXRlbUhhbmRsZSwgJmJveCk7CisvKgkgIFNldERpYWxvZ0l0ZW0gKHRoZURpYWxvZywgaW5wdXRJdG0uaWR4LCBrRWRpdFRleHREaWFsb2dJdGVtLCBpdGVtSGFuZGxlLCAmYm94KTsqLworCSh2b2lkKSBDMlBhc2NhbFN0cmluZyAodGV4dGZpZWxkLCAmbmFtZSk7CisJU2V0RGlhbG9nSXRlbVRleHQgKGl0ZW1IYW5kbGUsIG5hbWUpOworCWlucHV0SXRtLndpZHRoID0gU3RyaW5nV2lkdGggKG5hbWUpOworICAgIH0KKworICAgIC8qIFNldCB0aGUgPEVOVEVSPiBhbmQgPEVTQz4gYnV0dG9uLiAqLworICAgIFNldERpYWxvZ0RlZmF1bHRJdGVtICh0aGVEaWFsb2csIGRmbHRidXR0b24pOworICAgIFNldERpYWxvZ0NhbmNlbEl0ZW0gKHRoZURpYWxvZywgMCk7CisKKyAgICAvKiBSZXBvc2l0aW9uIGVsZW1lbnQgKi8KKworICAgIC8qIENoZWNrIGlmIHdlIG5lZWQgdG8gZm9yY2UgdmVydGljYWwgKi8KKyAgICBpZiAodG90YWxCdXR0b25XaWR0aCA+IG1heGltdW1XaWR0aCkKKwl2ZXJ0aWNhbCA9IFRSVUU7CisKKyAgICAvKiBQbGFjZSBpY29uICovCisgICAgbWFjTW92ZURpYWxvZ0l0ZW0gKHRoZURpYWxvZywgaWNvbkl0bS5pZHgsIGRmbHRJY29uU2lkZVNwYWNlLCBkZmx0RWxlbWVudFNwYWNpbmcsICZib3gpOworICAgIGljb25JdG0uYm94LnJpZ2h0ID0gYm94LnJpZ2h0OworICAgIGljb25JdG0uYm94LmJvdHRvbSA9IGJveC5ib3R0b207CisKKyAgICAvKiBQbGFjZSBNZXNzYWdlICovCisgICAgbWVzc2FnZUl0bS5ib3gubGVmdCA9IGljb25JdG0uYm94LnJpZ2h0ICsgZGZsdEljb25TaWRlU3BhY2U7CisgICAgbWFjU2l6ZURpYWxvZ0l0ZW0gKHRoZURpYWxvZywgbWVzc2FnZUl0bS5pZHgsIDAsICBtZXNzYWdlTGluZXMgKiAodGV4dEZvbnRJbmZvLmFzY2VudCArIHRleHRGb250SW5mby5kZXNjZW50KSk7CisgICAgbWFjTW92ZURpYWxvZ0l0ZW0gKHRoZURpYWxvZywgbWVzc2FnZUl0bS5pZHgsIG1lc3NhZ2VJdG0uYm94LmxlZnQsIGRmbHRFbGVtZW50U3BhY2luZywgJm1lc3NhZ2VJdG0uYm94KTsKKworICAgIC8qIFBsYWNlIElucHV0ICovCisgICAgaWYgKHRleHRmaWVsZCAhPSBOVUxMKQorICAgIHsKKwlpbnB1dEl0bS5ib3gubGVmdCA9IG1lc3NhZ2VJdG0uYm94LmxlZnQ7CisJaW5wdXRJdG0uYm94LnRvcCAgPSBtZXNzYWdlSXRtLmJveC5ib3R0b20gKyBkZmx0RWxlbWVudFNwYWNpbmc7CisJbWFjU2l6ZURpYWxvZ0l0ZW0gKHRoZURpYWxvZywgaW5wdXRJdG0uaWR4LCAwLCB0ZXh0Rm9udEluZm8uYXNjZW50ICsgdGV4dEZvbnRJbmZvLmRlc2NlbnQpOworCW1hY01vdmVEaWFsb2dJdGVtICh0aGVEaWFsb2csIGlucHV0SXRtLmlkeCwgaW5wdXRJdG0uYm94LmxlZnQsIGlucHV0SXRtLmJveC50b3AsICZpbnB1dEl0bS5ib3gpOworCS8qIENvbnZlcnQgdGhlIHN0YXRpYyB0ZXh0IGludG8gYSB0ZXh0IGVkaXQuCisJICogRm9yIHNvbWUgcmVhc29uIHRoaXMgY2hhbmdlIG5lZWQgdG8gYmUgZG9uZSBsYXN0IChEYW55KSAqLworCUdldERpYWxvZ0l0ZW0gKHRoZURpYWxvZywgaW5wdXRJdG0uaWR4LCAmaXRlbVR5cGUsICZpdGVtSGFuZGxlLCAmaW5wdXRJdG0uYm94KTsKKwlTZXREaWFsb2dJdGVtICh0aGVEaWFsb2csIGlucHV0SXRtLmlkeCwga0VkaXRUZXh0RGlhbG9nSXRlbSwgaXRlbUhhbmRsZSwgJmlucHV0SXRtLmJveCk7CisJU2VsZWN0RGlhbG9nSXRlbVRleHQodGhlRGlhbG9nLCBpbnB1dEl0bS5pZHgsIDAsIDMyNzY3KTsKKyAgICB9CisKKyAgICAvKiBQbGFjZSBCdXR0b24gKi8KKyAgICBpZiAodGV4dGZpZWxkICE9IE5VTEwpCisgICAgeworCWJ1dHRvbkl0bS5ib3gubGVmdCA9IGlucHV0SXRtLmJveC5sZWZ0OworCWJ1dHRvbkl0bS5ib3gudG9wICA9IGlucHV0SXRtLmJveC5ib3R0b20gKyBkZmx0RWxlbWVudFNwYWNpbmc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJYnV0dG9uSXRtLmJveC5sZWZ0ID0gbWVzc2FnZUl0bS5ib3gubGVmdDsKKwlidXR0b25JdG0uYm94LnRvcCAgPSBtZXNzYWdlSXRtLmJveC5ib3R0b20gKyBkZmx0RWxlbWVudFNwYWNpbmc7CisgICAgfQorCisgICAgZm9yIChidXR0b249MTsgYnV0dG9uIDw9IGxhc3RCdXR0b247IGJ1dHRvbisrKQorICAgIHsKKworCW1hY01vdmVEaWFsb2dJdGVtICh0aGVEaWFsb2csIGJ1dHRvbiwgYnV0dG9uSXRtLmJveC5sZWZ0LCBidXR0b25JdG0uYm94LnRvcCwgJmJveCk7CisJLyogV2l0aCB2ZXJ0aWNhbCwgaXQncyBiZXR0ZXIgdG8gaGF2ZSBhbGwgYnV0dG9uIHRoZSBzYW1lIGxlbmdodCAqLworCWlmICh2ZXJ0aWNhbCkKKwl7CisJICAgIG1hY1NpemVEaWFsb2dJdGVtICh0aGVEaWFsb2csIGJ1dHRvbiwgd2lkZXN0QnV0dG9uLCAwKTsKKwkgICAgR2V0RGlhbG9nSXRlbSAodGhlRGlhbG9nLCBidXR0b24sICZpdGVtVHlwZSwgJml0ZW1IYW5kbGUsICZib3gpOworCX0KKwkvKiBDYWxjdWxhdGUgcG9zaXRpb24gb2YgbmV4dCBidXR0b24gKi8KKwlpZiAodmVydGljYWwpCisJICAgIGJ1dHRvbkl0bS5ib3gudG9wICA9IGJveC5ib3R0b20gKyBkZmx0RWxlbWVudFNwYWNpbmc7CisJZWxzZQorCSAgICBidXR0b25JdG0uYm94LmxlZnQgID0gYm94LnJpZ2h0ICsgZGZsdEVsZW1lbnRTcGFjaW5nOworICAgIH0KKworICAgIC8qIFJlc2l6ZSB0aGUgZGlhbG9nIGJveCAqLworICAgIGRpYWxvZ0hlaWdodCA9IGJveC5ib3R0b20gKyBkZmx0RWxlbWVudFNwYWNpbmc7CisgICAgU2l6ZVdpbmRvdyh0aGVXaW5kb3csIG1heGltdW1XaWR0aCwgZGlhbG9nSGVpZ2h0LCBUUlVFKTsKKworI2lmZGVmIFVTRV9DQVJCT05JWkVECisgICAgLyogTWFnaWMgcmVzaXplICovCisgICAgQXV0b1NpemVEaWFsb2cgKHRoZURpYWxvZyk7CisgICAgLyogTmVlZCBhIGhvcml6b250YWwgcmVzaXplIGFueXdheSBzbyBub3QgdGhhdCB1c2VmdWwgKi8KKyNlbmRpZgorCisgICAgLyogRGlzcGxheSBpdCAqLworICAgIFNob3dXaW5kb3codGhlV2luZG93KTsKKy8qICBCcmluZ1RvRnJvbnQodGhlV2luZG93KTsgKi8KKyAgICBTZWxlY3RXaW5kb3codGhlV2luZG93KTsKKworLyogIERyYXdEaWFsb2cgKHRoZURpYWxvZyk7ICovCisjaWYgMAorICAgIEdldFBvcnQgKCZvbGRQb3J0KTsKKyNpZmRlZiBVU0VfQ0FSQk9OSVpFRAorICAgIFNldFBvcnREaWFsb2dQb3J0ICh0aGVEaWFsb2cpOworI2Vsc2UKKyAgICBTZXRQb3J0ICh0aGVEaWFsb2cpOworI2VuZGlmCisjZW5kaWYKKworICAgIC8qIEhhbmcgdW50aWwgb25lIG9mIHRoZSBidXR0b24gaXMgaGl0ICovCisgICAgZG8KKyAgICB7CisJTW9kYWxEaWFsb2cgKG5pbCwgJml0ZW1IaXQpOworICAgIH0gd2hpbGUgKChpdGVtSGl0IDwgMSkgfHwgKGl0ZW1IaXQgPiBsYXN0QnV0dG9uKSk7CisKKyAgICAvKiBDb3B5IGJhY2sgdGhlIHRleHQgZW50ZXJlZCBieSB0aGUgdXNlciBpbnRvIHRoZSBwYXJhbSAqLworICAgIGlmICh0ZXh0ZmllbGQgIT0gTlVMTCkKKyAgICB7CisJR2V0RGlhbG9nSXRlbSAodGhlRGlhbG9nLCBpbnB1dEl0bS5pZHgsICZpdGVtVHlwZSwgJml0ZW1IYW5kbGUsICZib3gpOworCUdldERpYWxvZ0l0ZW1UZXh0IChpdGVtSGFuZGxlLCAoY2hhcl91ICopICZuYW1lKTsKKyNpZiBJT1NJWkUgPCAyNTYKKwkvKiBUcnVuY2F0ZSB0aGUgbmFtZSB0byBJT1NJWkUgaWYgbmVlZGVkICovCisJaWYgKG5hbWVbMF0gPiBJT1NJWkUpCisJICAgIG5hbWVbMF0gPSBJT1NJWkUgLSAxOworI2VuZGlmCisJU1RSTkNQWSh0ZXh0ZmllbGQsICZuYW1lWzFdLCBuYW1lWzBdKTsKKwl0ZXh0ZmllbGRbbmFtZVswXV0gPSBOVUw7CisgICAgfQorCisgICAgLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgZ3JhcGhpY2FsIHBvcnQgKi8KKyAgICBTZXRQb3J0IChvbGRQb3J0KTsKKworICAgIC8qIEdldCByaWRlIG9mIHRoIGVkaWFsb2cgKGZyZWUgbWVtb3J5KSAqLworICAgIERpc3Bvc2VEaWFsb2cgKHRoZURpYWxvZyk7CisKKyAgICByZXR1cm4gaXRlbUhpdDsKKy8qCisgKiBVc2VmdWxsIHRoaW5nIHdoaWNoIGNvdWxkIGJlIHVzZWQKKyAqIFNldERpYWxvZ1RpbWVvdXQoKTogQXV0byBjbGljayBhIGJ1dHRvbiBhZnRlciB0aW1lb3V0CisgKiBTZXREaWFsb2dUcmFja3NDdXJzb3IoKSA6IEdldCB0aGUgSS1iZWFtIGN1cnNvciBvdmVyIGlucHV0IGJveAorICogTW92ZURpYWxvZ0l0ZW0oKToJICAgIFByb2JhYmx5IGJldHRlciB0aGFuIFNldERpYWxvZ0l0ZW0KKyAqIFNpemVEaWFsb2dJdGVtKCk6CQkoYnV0IGlzIGl0IENhcmJvbiBPbmx5PykKKyAqIEF1dG9TaXplRGlhbG9nKCk6CSAgICBNYWdpYyByZXNpemUgb2YgZGlhbG9nIGJhc2VkIG9uIHRleHQgbGVuZ2h0CisgKi8KK30KKyNlbmRpZiAvKiBGRUFUX0RJQUxPR19HVUkgKi8KKworLyoKKyAqIERpc3BsYXkgdGhlIHNhdmVkIGVycm9yIG1lc3NhZ2UocykuCisgKi8KKyNpZmRlZiBVU0VfTUNIX0VSUk1TRworICAgIHZvaWQKK2Rpc3BsYXlfZXJyb3JzKCkKK3sKKyAgICBjaGFyCSpwOworICAgIGNoYXJfdQlwRXJyb3JbMjU2XTsKKworICAgIGlmIChlcnJvcl9nYS5nYV9kYXRhICE9IE5VTEwpCisgICAgeworCS8qIGF2b2lkIHB1dHRpbmcgdXAgYSBtZXNzYWdlIGJveCB3aXRoIGJsYW5rcyBvbmx5ICovCisJZm9yIChwID0gKGNoYXIgKillcnJvcl9nYS5nYV9kYXRhOyAqcDsgKytwKQorCSAgICBpZiAoIWlzc3BhY2UoKnApKQorCSAgICB7CisJCWlmIChTVFJMRU4ocCkgPiAyNTUpCisJCSAgICBwRXJyb3JbMF0gPSAyNTU7CisJCWVsc2UKKwkJICAgIHBFcnJvclswXSA9IFNUUkxFTihwKTsKKworCQlTVFJOQ1BZKCZwRXJyb3JbMV0sIHAsIHBFcnJvclswXSk7CisJCVBhcmFtVGV4dCAocEVycm9yLCBuaWwsIG5pbCwgbmlsKTsKKwkJQWxlcnQgKDEyOCwgbmlsKTsKKwkJYnJlYWs7CisJCS8qIFRPRE86IGhhbmRsZWQgbWVzc2FnZSBsb25nZXIgdGhhbiAyNTYgY2hhcnMKKwkJICoJIHVzZSBhdXRvLXNpemVhYmxlIGFsZXJ0CisJCSAqCSBvciBkaWFsb2cgd2l0aCBzY3JvbGxiYXJzIChUZXh0RWRpdCB6b25lKQorCQkgKi8KKwkgICAgfQorCWdhX2NsZWFyKCZlcnJvcl9nYSk7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBHZXQgY3VycmVudCB5IG1vdXNlIGNvb3JkaW5hdGUgaW4gdGV4dCB3aW5kb3cuCisgKiBSZXR1cm4gLTEgd2hlbiB1bmtub3duLgorICovCisgICAgaW50CitndWlfbWNoX2dldF9tb3VzZV94KCkKK3sKKyAgICBQb2ludCB3aGVyZTsKKworICAgIEdldE1vdXNlKCZ3aGVyZSk7CisKKyAgICByZXR1cm4gKHdoZXJlLmgpOworfQorCisgICAgaW50CitndWlfbWNoX2dldF9tb3VzZV95KCkKK3sKKyAgICBQb2ludCB3aGVyZTsKKworICAgIEdldE1vdXNlKCZ3aGVyZSk7CisKKyAgICByZXR1cm4gKHdoZXJlLnYpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRtb3VzZSh4LCB5KQorICAgIGludAkJeDsKKyAgICBpbnQJCXk7Cit7CisgICAgLyogVE9ETyAqLworI2lmIDAKKyAgICAvKiBGcm9tIEZBUSAzLTExICovCisKKyAgICBDdXJzb3JEZXZpY2VQdHIgbXlNb3VzZTsKKyAgICBQb2ludAkgICAgd2hlcmU7CisKKyAgICBpZiAoICAgTkdldFRyYXBBZGRyZXNzIChfQ3Vyc29yRGV2aWNlRGlzcGF0Y2gsIFRvb2xUcmFwKQorCSE9IE5HZXRUcmFwQWRkcmVzcyAoX1VuaW1wbGVtZW50ZWQsICAgVG9vbFRyYXApICkKKyAgICB7CisJLyogTmV3IHdheSAqLworCisJLyoKKwkgKiBHZXQgZmlyc3QgZGV2b2ljZSB3aXRoIG9uZSBidXR0b24uCisJICogVGhpcyB3aWxsIHByb2JhYmx5IGJlIHRoZSBzdGFuZGFkIG1vdXNlCisJICogc3RhcnRhdCBoZWFkIG9mIGN1cnNvciBkZXYgbGlzdAorCSAqCisJICovCisKKwlteU1vdXNlID0gbmlsOworCisJZG8KKwl7CisJICAgIC8qIEdldCB0aGUgbmV4dCBjdXJzb3IgZGV2aWNlICovCisJICAgIEN1cnNvckRldmljZU5leHREZXZpY2UoJm15TW91c2UpOworCX0KKwl3aGlsZSAoIChteU1vdXNlICE9IG5pbCkgJiYgKG15TW91c2UtPmNudEJ1dHRvbnMgIT0gMSkgKTsKKworCUN1cnNvckRldmljZU1vdmVUbyAobXlNb3VzZSwgeCwgeSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogT2xkIHdheSAqLworCXdoZXJlLmggPSB4OworCXdoZXJlLnYgPSB5OworCisJKihQb2ludCAqKVJhd01vdXNlID0gd2hlcmU7CisJKihQb2ludCAqKU1UZW1wICAgID0gd2hlcmU7CisJKihQdHIpICAgIENyc3JOZXcgID0gMHhGRkZGOworICAgIH0KKyNlbmRpZgorfQorCisgICAgdm9pZAorZ3VpX21jaF9zaG93X3BvcHVwbWVudShtZW51KQorICAgIHZpbW1lbnVfVCAqbWVudTsKK3sKKyNpZmRlZiBVU0VfQ1RSTENMSUNLTUVOVQorLyoKKyAqICBDbG9uZSBQb3BVcCB0byB1c2UgbWVudQorICogIENyZWF0ZSBhIG9iamVjdCBkZXNjcmlwdG9yIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24KKyAqICBDYWxsIHRoZSBwcm9jZWR1cmUKKyAqLworCisgICAgTWVudUhhbmRsZQlDbnR4TWVudTsKKyAgICBQb2ludAl3aGVyZTsKKyAgICBPU1N0YXR1cwlzdGF0dXM7CisgICAgVUludDMyCUNudHhUeXBlOworICAgIFNJbnQxNglDbnR4TWVudUlEOworICAgIFVJbnQxNglDbnR4TWVudUl0ZW07CisgICAgU3RyMjU1CUhlbHBOYW1lID0gIiI7CisgICAgR3JhZlB0cglzYXZlUG9ydDsKKworICAgIC8qIFNhdmUgQ3VycmVudCBQb3J0OiBPbiBNYWNPUyBYIHdlIHNlZW0gdG8gbG9zZSB0aGUgcG9ydCAqLworICAgIEdldFBvcnQgKCZzYXZlUG9ydCk7IC8qT1NYKi8KKworICAgIEdldE1vdXNlICgmd2hlcmUpOworICAgIExvY2FsVG9HbG9iYWwgKCZ3aGVyZSk7IC8qT1NYKi8KKyAgICBDbnR4TWVudSA9IG1lbnUtPnN1Ym1lbnVfaGFuZGxlOworCisgICAgLyogVE9ETzogR2V0IHRoZSB0ZXh0IHNlbGVjdGlvbiBmcm9tIFZpbSAqLworCisgICAgLyogQ2FsbCB0byBIYW5kbGUgUG9wdXAgKi8KKyAgICBzdGF0dXMgPSBDb250ZXh0dWFsTWVudVNlbGVjdChDbnR4TWVudSwgd2hlcmUsIGZhbHNlLCBrQ01IZWxwSXRlbU5vSGVscCwgSGVscE5hbWUsIE5VTEwsICZDbnR4VHlwZSwgJkNudHhNZW51SUQsICZDbnR4TWVudUl0ZW0pOworCisgICAgaWYgKHN0YXR1cyA9PSBub0VycikKKyAgICB7CisJaWYgKENudHhUeXBlID09IGtDTU1lbnVJdGVtU2VsZWN0ZWQpCisJeworCSAgICAvKiBIYW5kbGUgdGhlIG1lbnUgQ250eE1lbnVJRCwgQ250eE1lbnVJdGVtICovCisJICAgIC8qIFRoZSBzdWJtZW51IGNhbiBiZSBoYW5kbGUgZGlyZWN0bHkgYnkgZ3VpX21hY19oYW5kbGVfbWVudSAqLworCSAgICAvKiBCdXQgd2hhdCBhYm91dCB0aGUgY3VycmVudCBtZW51LCBpcyB0aGUgbWVudSBjaGFuZ2VkIGJ5IENvbnRleHR1YWxNZW51U2VsZWN0ICovCisJICAgIGd1aV9tYWNfaGFuZGxlX21lbnUgKChDbnR4TWVudUlEIDw8IDE2KSArIENudHhNZW51SXRlbSk7CisJfQorCWVsc2UgaWYgKENudHhNZW51SUQgPT0ga0NNU2hvd0hlbHBTZWxlY3RlZCkKKwl7CisJICAgIC8qIFNob3VsZCBjb21lIHVwIHdpdGggdGhlIGhlbHAgKi8KKwl9CisgICAgfQorCisgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBQb3J0ICovCisgICAgU2V0UG9ydCAoc2F2ZVBvcnQpOyAvKk9TWCovCisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoRkVBVF9DV19FRElUT1IpIHx8IGRlZmluZWQoUFJPVE8pCisvKiBUT0RPOiBJcyBpdCBuZWVkIGZvciBNQUNPU19YPyAoRGFueSkgKi8KKyAgICB2b2lkCittY2hfcG9zdF9idWZmZXJfd3JpdGUoYnVmX1QgKmJ1ZikKK3sKKyMgaWZkZWYgVVNFX1NJT1VYCisgICAgcHJpbnRmICgiV3JpdGluZyBCdWYuLi5cbiIpOworIyBlbmRpZgorICAgIEdldEZTU3BlY0Zyb21QYXRoIChidWYtPmJfZmZuYW1lLCAmYnVmLT5iX0ZTU3BlYyk7CisgICAgU2VuZF9LQUhMX01PRF9BRSAoYnVmKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9USVRMRQorLyoKKyAqIFNldCB0aGUgd2luZG93IHRpdGxlIGFuZCBpY29uLgorICogKFRoZSBpY29uIGlzIG5vdCB0YWtlbiBjYXJlIG9mKS4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0dGl0bGUodGl0bGUsIGljb24pCisgICAgY2hhcl91ICp0aXRsZTsKKyAgICBjaGFyX3UgKmljb247Cit7CisgICAgLyogVE9ETzogR2V0IHZpbSB0byBtYWtlIHN1cmUgbWF4bGVuIChmcm9tIHBfdGl0bGVsZW4pIGlzIHNtYWxsZXIKKyAgICAgKiAgICAgICB0aGF0IDI1Ni4gRXZlbiBiZXR0ZXIgZ2V0IGl0IHRvIGZpdCBuaWNlbHkgaW4gdGhlIHRpdGxlYmFyLgorICAgICAqLworICAgIGNoYXJfdSAgICpwYXNjYWxUaXRsZTsKKworICAgIGlmICh0aXRsZSA9PSBOVUxMKQkJLyogbm90aGluZyB0byBkbyAqLworCXJldHVybjsKKworICAgIHBhc2NhbFRpdGxlID0gQzJQYXNjYWxfc2F2ZSh0aXRsZSk7CisgICAgaWYgKHBhc2NhbFRpdGxlICE9IE5VTEwpCisgICAgeworCVNldFdUaXRsZShndWkuVmltV2luZG93LCBwYXNjYWxUaXRsZSk7CisJdmltX2ZyZWUocGFzY2FsVGl0bGUpOworICAgIH0KK30KKyNlbmRpZgorCisvKgorICogVHJhbnNmZXJlZCBmcm9tIG9zX21hYy5jIGZvciBNYWNPUyBYIHVzaW5nIG9zX3VuaXguYyBwcmVwIHdvcmsKKyAqLworCisgICAgaW50CitDMlBhc2NhbFN0cmluZyAoQ1N0cmluZywgUGFzY2FsU3RyaW5nKQorICAgIGNoYXJfdSAgKkNTdHJpbmc7CisgICAgU3RyMjU1ICAqUGFzY2FsU3RyaW5nOworeworICAgIGNoYXJfdSAqUGFzY2FsUHRyID0gKGNoYXJfdSAqKSBQYXNjYWxTdHJpbmc7CisgICAgaW50ICAgIGxlbjsKKyAgICBpbnQgICAgaTsKKworICAgIFBhc2NhbFB0clswXSA9IDA7CisgICAgaWYgKENTdHJpbmcgPT0gTlVMTCkKKwlyZXR1cm4gMDsKKworICAgIGxlbiA9IFNUUkxFTihDU3RyaW5nKTsKKyAgICBpZiAobGVuID4gMjU1KQorCWxlbiA9IDI1NTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwlQYXNjYWxQdHJbaSsxXSA9IENTdHJpbmdbaV07CisKKyAgICBQYXNjYWxQdHJbMF0gPSBsZW47CisKKyAgICByZXR1cm4gMDsKK30KKworICAgIGludAorR2V0RlNTcGVjRnJvbVBhdGggKGZpbGUsIGZpbGVGU1NwZWMpCisgICAgY2hhcl91ICpmaWxlOworICAgIEZTU3BlYyAqZmlsZUZTU3BlYzsKK3sKKyAgICAvKiBGcm9tIEZBUSA4LTEyICovCisgICAgU3RyMjU1ICAgICAgZmlsZVBhc2NhbDsKKyAgICBDSW5mb1BCUmVjCW15Q1BCOworICAgIE9TRXJyCWVycjsKKworICAgICh2b2lkKSBDMlBhc2NhbFN0cmluZyAoZmlsZSwgJmZpbGVQYXNjYWwpOworCisgICAgbXlDUEIuZGlySW5mby5pb05hbWVQdHIgICA9IGZpbGVQYXNjYWw7CisgICAgbXlDUEIuZGlySW5mby5pb1ZSZWZOdW0gICA9IDA7CisgICAgbXlDUEIuZGlySW5mby5pb0ZEaXJJbmRleCA9IDA7CisgICAgbXlDUEIuZGlySW5mby5pb0RyRGlySUQgICA9IDA7CisKKyAgICBlcnI9IFBCR2V0Q2F0SW5mbyAoJm15Q1BCLCBmYWxzZSk7CisKKyAgICAvKiAgICB2UmVmTnVtLCBkaXJJRCwgbmFtZSAqLworICAgIEZTTWFrZUZTU3BlYyAoMCwgMCwgZmlsZVBhc2NhbCwgZmlsZUZTU3BlYyk7CisKKyAgICAvKiBUT0RPOiBVc2UgYW4gZXJyb3IgY29kZSBtZWNoYW5pc20gKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENvbnZlcnQgYSBGU1NwZWMgdG8gYSBmdWlsbCBwYXRoCisgKi8KKworY2hhcl91ICpGdWxsUGF0aEZyb21GU1NwZWNfc2F2ZSAoRlNTcGVjIGZpbGUpCit7CisgICAgLyoKKyAgICAgKiBUT0RPOiBBZGQgcHJvdGVjdGlvbiBmb3IgMjU2IGNoYXIgbWF4LgorICAgICAqLworCisgICAgQ0luZm9QQlJlYwl0aGVDUEI7CisgICAgY2hhcl91CWZuYW1lWzI1Nl07CisgICAgY2hhcl91CSpmaWxlbmFtZVB0ciA9IGZuYW1lOworICAgIE9TRXJyCWVycm9yOworICAgIGludAkJZm9sZGVyID0gMTsKKyNpZmRlZiBVU0VfVU5JWEZJTEVOQU1FCisgICAgU0ludDE2CWRmbHRWb2xfdlJlZk51bTsKKyAgICBTSW50MzIJZGZsdFZvbF9kaXJJRDsKKyAgICBGU1JlZglyZWZGaWxlOworICAgIE9TU3RhdHVzCXN0YXR1czsKKyAgICBVSW50MzIJcGF0aFNpemUgPSAyNTY7CisgICAgY2hhcl91CXBhdGhuYW1lWzI1Nl07CisgICAgY2hhcl91CSpwYXRoID0gcGF0aG5hbWU7CisjZWxzZQorICAgIFN0cjI1NQlkaXJlY3RvcnlOYW1lOworICAgIGNoYXJfdQl0ZW1wb3JhcnlbMjU1XTsKKyAgICBjaGFyX3UJKnRlbXBvcmFyeVB0ciA9IHRlbXBvcmFyeTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX1VOSVhGSUxFTkFNRQorICAgIC8qIEdldCB0aGUgZGVmYXVsdCB2b2x1bWUgKi8KKyAgICAvKiBUT0RPOiBSZW1vdmUgYXMgdGhpcyBvbmx5IHdvcmsgaWYgVmltIGlzIG9uIHRoZSBCb290IFZvbHVtZSovCisgICAgZXJyb3I9SEdldFZvbCAoIE5VTEwsICZkZmx0Vm9sX3ZSZWZOdW0sICZkZmx0Vm9sX2RpcklEICk7CisKKyAgICBpZiAoZXJyb3IpCisgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorCisgICAgLyogU3RhcnQgZmlsbGluZyBmbmFtZSB3aXRoIGZpbGUubmFtZSAgKi8KKyAgICBTVFJOQ1BZKGZpbGVuYW1lUHRyLCAmZmlsZS5uYW1lWzFdLCBmaWxlLm5hbWVbMF0pOworICAgIGZpbGVuYW1lUHRyW2ZpbGUubmFtZVswXV0gPSAwOyAvKiBOVUxMIHRlcm1pbmF0ZSB0aGUgc3RyaW5nICovCisKKyAgICAvKiBHZXQgdGhlIGluZm8gYWJvdXQgdGhlIGZpbGUgc3BlY2lmaWVkIGluIEZTU3BlYyAqLworICAgIHRoZUNQQi5kaXJJbmZvLmlvRkRpckluZGV4ID0gMDsKKyAgICB0aGVDUEIuZGlySW5mby5pb05hbWVQdHIgICA9IGZpbGUubmFtZTsKKyAgICB0aGVDUEIuZGlySW5mby5pb1ZSZWZOdW0gICA9IGZpbGUudlJlZk51bTsKKyAgLyp0aGVDUEIuaEZpbGVJbmZvLmlvRGlySUQgICA9IDA7Ki8KKyAgICB0aGVDUEIuZGlySW5mby5pb0RyRGlySUQgICA9IGZpbGUucGFySUQ7CisKKyAgICAvKiBBcyBpb0ZEaXJJbmRleCA9IDAsIGdldCB0aGUgaW5mbyBvZiBpb05hbWVQdHIsCisgICAgICAgd2hpY2ggaXMgcmVsYXRpdmUgdG8gaW9WcmVmTnVtLCBpb0RpcklEICovCisgICAgZXJyb3IgPSBQQkdldENhdEluZm8gKCZ0aGVDUEIsIGZhbHNlKTsKKworICAgIC8qIElmIHdlIGFyZSBjYWxsZWQgZm9yIGEgbmV3IGZpbGUgd2UgZXhwZWN0IGZuZkVyciAqLworICAgIGlmICgoZXJyb3IpICYmIChlcnJvciAhPSBmbmZFcnIpKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBDaGVjayBpZiBpdCdzIGEgZmlsZSBvciBmb2xkZXIgICAgICAgKi8KKyAgICAvKiBkZWZhdWx0IHRvIGZpbGUgaWYgZmlsZSBkb24ndCBleGlzdCAgKi8KKyAgICBpZiAoKCh0aGVDUEIuaEZpbGVJbmZvLmlvRmxBdHRyaWIgJiBpb0Rpck1hc2spID09IDApIHx8IChlcnJvcikpCisgICAgICBmb2xkZXIgPSAwOyAvKiBJdCdzIG5vdCBhIGZvbGRlciAqLworICAgIGVsc2UKKyAgICAgIGZvbGRlciA9IDE7CisKKyNpZmRlZiBVU0VfVU5JWEZJTEVOQU1FCisgICAgLyoKKyAgICAgKiBUaGUgZnVuY3Rpb24gdXNlZCBoZXJlIGFyZSBhdmFpbGFibGUgaW4gQ2FyYm9uLCBidXQKKyAgICAgKiBkbyBub3RoaW5nIHVuZSBNYWNPUyA4IGFuZCA5CisgICAgICovCisgICAgaWYgKGVycm9yID09IGZuZkVycikKKyAgICB7CisJLyogSWYgdGhlIGZpbGUgdG8gYmUgc2F2ZWQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgaXQgaXNuJ3QgcG9zc2libGUKKwkgICB0byBjb252ZXJ0IGl0cyBGU1NwZWMgaW50byBhbiBGU1JlZi4gIEJ1dCB3ZSBjYW4gY29uc3RydWN0IGFuCisJICAgRlNTcGVjIGZvciB0aGUgZmlsZSdzIHBhcmVudCBmb2xkZXIgKHNpbmNlIHdlIGhhdmUgaXRzIHZvbHVtZSBhbmQKKwkgICBkaXJlY3RvcnkgSURzKSwgYW5kIHNpbmNlIHRoYXQgZm9sZGVyIGRvZXMgZXhpc3QsIHdlIGNhbiBjb252ZXJ0CisJICAgdGhhdCBGU1NwZWMgaW50byBhbiBGU1JlZiwgY29udmVydCB0aGUgRlNSZWYgaW4gdHVybiBpbnRvIGEgcGF0aCwKKwkgICBhbmQsIGZpbmFsbHksIGFwcGVuZCB0aGUgZmlsZW5hbWUuICovCisJRlNTcGVjIGRpclNwZWM7CisJRlNSZWYgZGlyUmVmOworCVN0cjI1NSBlbXB0eUZpbGVuYW1lID0gIlxwIjsKKwllcnJvciA9IEZTTWFrZUZTU3BlYyh0aGVDUEIuZGlySW5mby5pb1ZSZWZOdW0sCisJICAgIHRoZUNQQi5kaXJJbmZvLmlvRHJEaXJJRCwgZW1wdHlGaWxlbmFtZSwgJmRpclNwZWMpOworCWlmIChlcnJvcikKKwkgICAgcmV0dXJuIE5VTEw7CisKKwllcnJvciA9IEZTcE1ha2VGU1JlZigmZGlyU3BlYywgJmRpclJlZik7CisJaWYgKGVycm9yKQorCSAgICByZXR1cm4gTlVMTDsKKworCXN0YXR1cyA9IEZTUmVmTWFrZVBhdGgoJmRpclJlZiwgKFVJbnQ4KilwYXRoLCBwYXRoU2l6ZSk7CisJaWYgKHN0YXR1cykKKwkgICAgcmV0dXJuIE5VTEw7CisKKwlTVFJDQVQocGF0aCwgIi8iKTsKKwlTVFJDQVQocGF0aCwgZmlsZW5hbWVQdHIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIElmIHRoZSBmaWxlIHRvIGJlIHNhdmVkIGFscmVhZHkgZXhpc3RzLCB3ZSBjYW4gZ2V0IGl0cyBmdWxsIHBhdGgKKwkgICBieSBjb252ZXJ0aW5nIGl0cyBGU1NwZWMgaW50byBhbiBGU1JlZi4gKi8KKwllcnJvcj1GU3BNYWtlRlNSZWYgKCZmaWxlLCAmcmVmRmlsZSk7CisJaWYgKGVycm9yKQorCSAgICByZXR1cm4gTlVMTDsKKworCXN0YXR1cz1GU1JlZk1ha2VQYXRoICgmcmVmRmlsZSwgKFVJbnQ4ICopIHBhdGgsIHBhdGhTaXplKTsKKwlpZiAoc3RhdHVzKQorCSAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBBZGQgYSBzbGFzaCBhdCB0aGUgZW5kIGlmIG5lZWRlZCAqLworICAgIGlmIChmb2xkZXIpCisJU1RSQ0FUIChwYXRoLCAiLyIpOworCisgICAgcmV0dXJuICh2aW1fc3Ryc2F2ZSAocGF0aCkpOworI2Vsc2UKKyAgICAvKiBUT0RPOiBHZXQgcmlkIG9mIGFsbCBVU0VfVU5JWEZJTEVOQU1FIGJlbG93ICovCisgICAgLyogU2V0IGlvTmFtZVB0ciwgaXQncyB0aGUgc2FtZSBhcmVhIHdoaWNoIGlzIGFsd2F5cyByZXVzZWQuICovCisgICAgdGhlQ1BCLmRpckluZm8uaW9OYW1lUHRyID0gZGlyZWN0b3J5TmFtZTsKKworICAgIC8qIFRyaWNrIGZvciBmaXJzdCBlbnRyeSwgc2V0IGlvRHJQYXJJRCB0byB0aGUgZmlyc3QgdmFsdWUKKyAgICAgKiB3ZSB3YW50IGZvciBpb0RyRGlySUQqLworICAgIHRoZUNQQi5kaXJJbmZvLmlvRHJQYXJJRCA9IGZpbGUucGFySUQ7CisgICAgdGhlQ1BCLmRpckluZm8uaW9EckRpcklEID0gZmlsZS5wYXJJRDsKKworICAgIGlmICgoVFJVRSkgJiYgKGZpbGUucGFySUQgIT0gZnNSdERpcklEIC8qZnNSdFBhcklEKi8gKSkKKyAgICBkbworICAgIHsKKwl0aGVDUEIuZGlySW5mby5pb0ZEaXJJbmRleCA9IC0xOworICAgICAvKiB0aGVDUEIuZGlySW5mby5pb05hbWVQdHIgICA9IGRpcmVjdG9yeU5hbWU7IEFscmVhZHkgZG9uZSBhYm92ZS4gKi8KKwl0aGVDUEIuZGlySW5mby5pb1ZSZWZOdW0gICA9IGZpbGUudlJlZk51bTsKKyAgICAgLyogdGhlQ1BCLmRpckluZm8uaW9EaXJJRCAgICAgPSBpcnJldmVsYW50IHdoZW4gaW9GRGlySW5kZXggPSAtMSAqLworCXRoZUNQQi5kaXJJbmZvLmlvRHJEaXJJRCAgID0gdGhlQ1BCLmRpckluZm8uaW9EclBhcklEOworCisJLyogQXMgaW9GRGlySW5kZXggPSAtMSwgZ2V0IHRoZSBpbmZvIG9mIGlvRHJEaXJJRCwgKi8KKwkvKiAgKmlvTmFtZVB0clswIFRPIDMxXSB3aWxsIGJlIHVwZGF0ZWQJCSAgICovCisJZXJyb3IgPSBQQkdldENhdEluZm8gKCZ0aGVDUEIsZmFsc2UpOworCisJaWYgKGVycm9yKQorCSAgcmV0dXJuIE5VTEw7CisKKwkvKiBQdXQgdGhlIG5ldyBkaXJlY3RvcnlOYW1lIGluIGZyb250IG9mIHRoZSBjdXJyZW50IGZuYW1lICovCisJU1RSQ1BZKHRlbXBvcmFyeVB0ciwgZmlsZW5hbWVQdHIpOworCVNUUk5DUFkoZmlsZW5hbWVQdHIsICZkaXJlY3RvcnlOYW1lWzFdLCBkaXJlY3RvcnlOYW1lWzBdKTsKKwlmaWxlbmFtZVB0cltkaXJlY3RvcnlOYW1lWzBdXSA9IDA7IC8qIE5VTEwgdGVybWluYXRlIHRoZSBzdHJpbmcgKi8KKwlTVFJDQVQoZmlsZW5hbWVQdHIsICI6Iik7CisJU1RSQ0FUKGZpbGVuYW1lUHRyLCB0ZW1wb3JhcnlQdHIpOworICAgIH0KKyNpZiAxIC8qIGRlZiBVU0VfVU5JWEZJTEVOQU1FICovCisgICAgd2hpbGUgKCh0aGVDUEIuZGlySW5mby5pb0RyUGFySUQgIT0gZnNSdERpcklEKSAvKiAmJiAqLworCSAvKiAgKHRoZUNQQi5kaXJJbmZvLmlvRHJEaXJJRCAhPSBmc1J0RGlySUQpKi8pOworI2Vsc2UKKyAgICB3aGlsZSAodGhlQ1BCLmRpckluZm8uaW9EckRpcklEICE9IGZzUnREaXJJRCk7CisjZW5kaWYKKworICAgIC8qIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZvbHVtZSBvbiB3aGljaCB0aGUgZmlsZSByZXNpZGUgKi8KKyAgICB0aGVDUEIuZGlySW5mby5pb0ZEaXJJbmRleCA9IC0xOworIC8qIHRoZUNQQi5kaXJJbmZvLmlvTmFtZVB0ciAgID0gZGlyZWN0b3J5TmFtZTsgQWxyZWFkeSBkb25lIGFib3ZlLiAqLworICAgIHRoZUNQQi5kaXJJbmZvLmlvVlJlZk51bSAgID0gZmlsZS52UmVmTnVtOworIC8qIHRoZUNQQi5kaXJJbmZvLmlvRGlySUQgICAgID0gaXJyZXZlbGFudCB3aGVuIGlvRkRpckluZGV4ID0gLTEgKi8KKyAgICB0aGVDUEIuZGlySW5mby5pb0RyRGlySUQgICA9IHRoZUNQQi5kaXJJbmZvLmlvRHJQYXJJRDsKKworICAgIC8qIEFzIGlvRkRpckluZGV4ID0gLTEsIGdldCB0aGUgaW5mbyBvZiBpb0RyRGlySUQsICovCisgICAgLyoJKmlvTmFtZVB0clswIFRPIDMxXSB3aWxsIGJlIHVwZGF0ZWQJICAgICAgICovCisgICAgZXJyb3IgPSBQQkdldENhdEluZm8gKCZ0aGVDUEIsZmFsc2UpOworCisgICAgaWYgKGVycm9yKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBGb3IgTWFjT1MgQ2xhc3NpYyBhbHdheXMgYWRkIHRoZSB2b2x1bWUgbmFtZQkgICAgICovCisgICAgLyogRm9yIE1hY09TIFggYWRkIHRoZSB2b2x1bWUgbmFtZSBwcmVjZWRlZCBieSAiVm9sdW1lcyIgKi8KKyAgICAvKgl3aGVuIHdlIGFyZSBub3QgcmVmZXJpbmcgdG8gdGhlIGJvb3Qgdm9sdW1lCSAgICAgKi8KKyNpZmRlZiBVU0VfVU5JWEZJTEVOQU1FCisgICAgaWYgKGZpbGUudlJlZk51bSAhPSBkZmx0Vm9sX3ZSZWZOdW0pCisjZW5kaWYKKyAgICB7CisJLyogQWRkIHRoZSB2b2x1bWUgbmFtZSAqLworCVNUUkNQWSh0ZW1wb3JhcnlQdHIsIGZpbGVuYW1lUHRyKTsKKwlTVFJOQ1BZKGZpbGVuYW1lUHRyLCAmZGlyZWN0b3J5TmFtZVsxXSwgZGlyZWN0b3J5TmFtZVswXSk7CisJZmlsZW5hbWVQdHJbZGlyZWN0b3J5TmFtZVswXV0gPSAwOyAvKiBOVUxMIHRlcm1pbmF0ZSB0aGUgc3RyaW5nICovCisJU1RSQ0FUKGZpbGVuYW1lUHRyLCAiOiIpOworCVNUUkNBVChmaWxlbmFtZVB0ciwgdGVtcG9yYXJ5UHRyKTsKKworI2lmZGVmIFVTRV9VTklYRklMRU5BTUUKKwlTVFJDUFkodGVtcG9yYXJ5UHRyLCBmaWxlbmFtZVB0cik7CisJZmlsZW5hbWVQdHJbMF0gPSAwOyAvKiBOVUxMIHRlcm1pbmF0ZSB0aGUgc3RyaW5nICovCisJU1RSQ0FUKGZpbGVuYW1lUHRyLCAiVm9sdW1lczoiKTsKKwlTVFJDQVQoZmlsZW5hbWVQdHIsIHRlbXBvcmFyeVB0cik7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBBcHBlbmQgZmluYWwgcGF0aCBzZXBhcmF0b3IgaWYgaXQncyBhIGZvbGRlciAqLworICAgIGlmIChmb2xkZXIpCisJU1RSQ0FUIChmbmFtZSwgIjoiKTsKKworICAgIC8qIEFzIHdlIHVzZSBVbml4IEZpbGUgTmFtZSBmb3IgTWFjT1MgWCBjb252ZXJ0IGl0ICovCisjaWZkZWYgVVNFX1VOSVhGSUxFTkFNRQorICAgIC8qIE5lZWQgdG8gaW5zZXJ0IGxlYWRpbmcgLyAqLworICAgIC8qIFRPRE86IGdldCB0aGUgYWJvdmUgY29kZSB0byB1c2UgZGlyZWN0bHkgdGhlIC8gKi8KKyAgICBTVFJDUFkoJnRlbXBvcmFyeVB0clsxXSwgZmlsZW5hbWVQdHIpOworICAgIHRlbXBvcmFyeVB0clswXSA9ICcvJzsKKyAgICBTVFJDUFkoZmlsZW5hbWVQdHIsIHRlbXBvcmFyeVB0cik7CisgICAgeworICAgIGNoYXIJKnA7CisgICAgZm9yIChwID0gZm5hbWU7ICpwOyBwKyspCisJaWYgKCpwID09ICc6JykKKwkgICAgKnAgPSAnLyc7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gKHZpbV9zdHJzYXZlIChmbmFtZSkpOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKFVTRV9JTV9DT05UUk9MKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIElucHV0IE1ldGhvZCBDb250cm9sIGZ1bmN0aW9ucy4KKyAqLworCisvKgorICogTm90aWZ5IGN1cnNvciBwb3NpdGlvbiB0byBJTS4KKyAqLworICAgIHZvaWQKK2ltX3NldF9wb3NpdGlvbihpbnQgcm93LCBpbnQgY29sKQoreworICAgIC8qIFRPRE86IEltcGxlbWVudCBtZSEgKi8KK30KKworLyoKKyAqIFNldCBJTSBzdGF0dXMgb24gKCJhY3RpdmUiIGlzIFRSVUUpIG9yIG9mZiAoImFjdGl2ZSIgaXMgRkFMU0UpLgorICovCisgICAgdm9pZAoraW1fc2V0X2FjdGl2ZShpbnQgYWN0aXZlKQoreworICAgIEtleVNjcmlwdChhY3RpdmUgPyBzbUtleVN5c1NjcmlwdCA6IHNtS2V5Um9tYW4pOworfQorCisvKgorICogR2V0IElNIHN0YXR1cy4gIFdoZW4gSU0gaXMgb24sIHJldHVybiBub3QgMC4gIEVsc2UgcmV0dXJuIDAuCisgKi8KKyAgICBpbnQKK2ltX2dldF9zdGF0dXMoKQoreworICAgIFNJbnQzMiBzY3JpcHQgPSBHZXRTY3JpcHRNYW5hZ2VyVmFyaWFibGUoc21LZXlTY3JpcHQpOworICAgIHJldHVybiAoc2NyaXB0ICE9IHNtUm9tYW4KKwkgICAgJiYgc2NyaXB0ID09IEdldFNjcmlwdE1hbmFnZXJWYXJpYWJsZShzbVN5c1NjcmlwdCkpID8gMSA6IDA7Cit9CisjZW5kaWYgLyogZGVmaW5lZChVU0VfSU1fQ09OVFJPTCkgfHwgZGVmaW5lZChQUk9UTykgKi8KZGlmZiAtLWdpdCBhL3NyYy9ndWlfbWFjLmljbnMgYi9zcmMvZ3VpX21hYy5pY25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NWZhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpX21hYy5pY25zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9ndWlfbWFjLnIgYi9zcmMvZ3VpX21hYy5yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMTkxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpX21hYy5yCkBAIC0wLDAgKzEsMzMgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisjaWZkZWYgZW52aXJvbl9vc19tYWMgLyogb3IgMSBmb3IgQ2FyYm9uLCAwIGZvciBub24tQ2FyYm9uICovCisjIGluY2x1ZGUgPENhcmJvbi9DYXJib24ucj4KKyNlbHNlCisjIGluY2x1ZGUgPFN5c1R5cGVzLnI+CisjIGluY2x1ZGUgPFR5cGVzLnI+CisjZW5kaWYKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKy8qIFVzZWQgYXMgYXBwbGljYXRpb24gdmVyc2lvbiAqLworcmVzb3VyY2UgJ3ZlcnMnICgxKSB7CisJVklNX1ZFUlNJT05fTUFKT1IsIFZJTV9WRVJTSU9OX0JVSUxEX0JDRCwgVklNX1ZFUlNJT05fUkVMRUFTRSwgVklNX1ZFUlNJT05fUEFUQ0hMRVZFTCwKKwl2ZXJVUywKKwlWSU1fVkVSU0lPTl9NRURJVU0sCisJVklNX1ZFUlNJT05fTE9OR19EQVRFICQkZGF0ZSAiICIgJCR0aW1lICIpIgorfTsKKworLyogVXNlZCBhcyBhcHBsaWNhdGlvbiBncm91cCB2ZXJzaW9uICovCityZXNvdXJjZSAndmVycycgKDIpIHsKKwlWSU1fVkVSU0lPTl9NQUpPUiwgVklNX1ZFUlNJT05fQlVJTERfQkNELCBWSU1fVkVSU0lPTl9SRUxFQVNFLCBWSU1fVkVSU0lPTl9QQVRDSExFVkVMLAorCXZlclVTLAorCVZJTV9WRVJTSU9OX01FRElVTSwKKwlWSU1fVkVSU0lPTl9MT05HCit9OworCisvKiBUT0RPOiBTbWFsbCBBYm91dCBib3ggd2l0aCBjb21waWxlIHRpbWUgKi8KZGlmZiAtLWdpdCBhL3NyYy9ndWlfbW90aWYuYyBiL3NyYy9ndWlfbW90aWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmUyNmVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2d1aV9tb3RpZi5jCkBAIC0wLDAgKzEsMzA5MCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAkJYnkgQnJhbSBNb29sZW5hYXIKKyAqCQkJCUdVSS9Nb3RpZiBzdXBwb3J0IGJ5IFJvYmVydCBXZWJiCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKyNpbmNsdWRlIDxYbS9Gb3JtLmg+CisjaW5jbHVkZSA8WG0vUm93Q29sdW1uLmg+CisjaW5jbHVkZSA8WG0vUHVzaEIuaD4KKyNpbmNsdWRlIDxYbS9UZXh0Lmg+CisjaW5jbHVkZSA8WG0vVGV4dEYuaD4KKyNpbmNsdWRlIDxYbS9TZXBhcmF0b3IuaD4KKyNpbmNsdWRlIDxYbS9MYWJlbC5oPgorI2luY2x1ZGUgPFhtL0Nhc2NhZGVCLmg+CisjaW5jbHVkZSA8WG0vU2Nyb2xsQmFyLmg+CisjaW5jbHVkZSA8WG0vTWVudVNoZWxsLmg+CisjaW5jbHVkZSA8WG0vRHJhd2luZ0EuaD4KKyNpZiAoWG1WZXJzaW9uID49IDEwMDIpCisjIGluY2x1ZGUgPFhtL1JlcFR5cGUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPFhtL0ZyYW1lLmg+CisjaW5jbHVkZSA8WG0vTGFiZWxHLmg+CisjaW5jbHVkZSA8WG0vVG9nZ2xlQkcuaD4KKyNpbmNsdWRlIDxYbS9TZXBhcmF0b0cuaD4KKworI2luY2x1ZGUgPFgxMS9rZXlzeW0uaD4KKyNpbmNsdWRlIDxYMTEvWGF0b20uaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKworI2luY2x1ZGUgInZpbS5oIgorCisjaWZkZWYgSEFWRV9YMTFfWFBNX0gKKyMgaW5jbHVkZSA8WDExL3hwbS5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9YTV9YUE1QX0gKKyMgIGluY2x1ZGUgPFhtL1hwbVAuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpICYmIGRlZmluZWQoSEFWRV9YUE0pCisjIGluY2x1ZGUgIi4uL3BpeG1hcHMvYWxlcnQueHBtIgorIyBpbmNsdWRlICIuLi9waXhtYXBzL2Vycm9yLnhwbSIKKyMgaW5jbHVkZSAiLi4vcGl4bWFwcy9nZW5lcmljLnhwbSIKKyMgaW5jbHVkZSAiLi4vcGl4bWFwcy9pbmZvLnhwbSIKKyMgaW5jbHVkZSAiLi4vcGl4bWFwcy9xdWVzdC54cG0iCisjZW5kaWYKKworI2RlZmluZSBNT1RJRl9QT1BVUAorCitleHRlcm4gV2lkZ2V0IHZpbVNoZWxsOworCitzdGF0aWMgV2lkZ2V0IHZpbUZvcm07CitzdGF0aWMgV2lkZ2V0IHRleHRBcmVhRm9ybTsKK1dpZGdldCB0ZXh0QXJlYTsKKyNpZmRlZiBGRUFUX1RPT0xCQVIKK3N0YXRpYyBXaWRnZXQgdG9vbEJhckZyYW1lOworc3RhdGljIFdpZGdldCB0b29sQmFyOworI2VuZGlmCisjaWZkZWYgRkVBVF9GT09URVIKK3N0YXRpYyBXaWRnZXQgZm9vdGVyOworI2VuZGlmCisjaWZkZWYgRkVBVF9NRU5VCisjIGlmIChYbVZlcnNpb24gPj0gMTAwMikKKy8qIHJlbWVtYmVyIHRoZSBsYXN0IHNldCB2YWx1ZSBmb3IgdGhlIHRlYXJvZmYgaXRlbSAqLworc3RhdGljIGludCB0ZWFyb2ZmX3ZhbCA9IChpbnQpWG1URUFSX09GRl9FTkFCTEVEOworIyBlbmRpZgorc3RhdGljIFdpZGdldCBtZW51QmFyOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNjcm9sbF9jYiBfX0FSR1MoKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpKTsKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKyMgaWYgMAorc3RhdGljIHZvaWQgdG9vbGJhcl9lbnRlcl9jYiBfX0FSR1MoKFdpZGdldCwgWHRQb2ludGVyLCBYRXZlbnQgKiwgQm9vbGVhbiAqKSk7CitzdGF0aWMgdm9pZCB0b29sYmFyX2xlYXZlX2NiIF9fQVJHUygoV2lkZ2V0LCBYdFBvaW50ZXIsIFhFdmVudCAqLCBCb29sZWFuICopKTsKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9GT09URVIKK3N0YXRpYyB2b2lkIHRvb2xiYXJidXR0b25fZW50ZXJfY2IgX19BUkdTKChXaWRnZXQsIFh0UG9pbnRlciwgWEV2ZW50ICosIEJvb2xlYW4gKikpOworc3RhdGljIHZvaWQgdG9vbGJhcmJ1dHRvbl9sZWF2ZV9jYiBfX0FSR1MoKFdpZGdldCwgWHRQb2ludGVyLCBYRXZlbnQgKiwgQm9vbGVhbiAqKSk7CisjIGVuZGlmCitzdGF0aWMgdm9pZCBndWlfbWNoX3Jlc2V0X2ZvY3VzIF9fQVJHUygodm9pZCkpOworI2VuZGlmCisjaWZkZWYgRkVBVF9GT09URVIKK3N0YXRpYyBpbnQgZ3VpX21jaF9jb21wdXRlX2Zvb3Rlcl9oZWlnaHQgX19BUkdTKCh2b2lkKSk7CisjZW5kaWYKKyNpZmRlZiBXU0RFQlVHCitzdGF0aWMgdm9pZCBhdHRhY2hEdW1wKFdpZGdldCwgY2hhciAqKTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBndWlfbW90aWZfbWVudV9jb2xvcnMgX19BUkdTKChXaWRnZXQgaWQpKTsKK3N0YXRpYyB2b2lkIGd1aV9tb3RpZl9zY3JvbGxfY29sb3JzIF9fQVJHUygoV2lkZ2V0IGlkKSk7CisjaWZkZWYgRkVBVF9NRU5VCitzdGF0aWMgdm9pZCBndWlfbW90aWZfbWVudV9mb250bGlzdCBfX0FSR1MoKFdpZGdldCBpZCkpOworI2VuZGlmCisKKyNpZiAoWG1WZXJzaW9uID49IDEwMDIpCisjIGRlZmluZSBTVFJJTkdfVEFHICBYbUZPTlRMSVNUX0RFRkFVTFRfVEFHCisjZWxzZQorIyBkZWZpbmUgU1RSSU5HX1RBRyAgWG1TVFJJTkdfREVGQVVMVF9DSEFSU0VUCisjZW5kaWYKKworLyoKKyAqIENhbGwtYmFjayByb3V0aW5lcy4KKyAqLworCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitzY3JvbGxfY2IodywgY2xpZW50X2RhdGEsIGNhbGxfZGF0YSkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGEsIGNhbGxfZGF0YTsKK3sKKyAgICBzY3JvbGxiYXJfVCAqc2I7CisgICAgbG9uZwl2YWx1ZTsKKyAgICBpbnQJCWRyYWdnaW5nOworCisgICAgc2IgPSBndWlfZmluZF9zY3JvbGxiYXIoKGxvbmcpY2xpZW50X2RhdGEpOworCisgICAgdmFsdWUgPSAoKFhtU2Nyb2xsQmFyQ2FsbGJhY2tTdHJ1Y3QgKiljYWxsX2RhdGEpLT52YWx1ZTsKKyAgICBkcmFnZ2luZyA9ICgoKFhtU2Nyb2xsQmFyQ2FsbGJhY2tTdHJ1Y3QgKiljYWxsX2RhdGEpLT5yZWFzb24gPT0KKwkJCQkJCQkgICAgICAoaW50KVhtQ1JfRFJBRyk7CisgICAgZ3VpX2RyYWdfc2Nyb2xsYmFyKHNiLCB2YWx1ZSwgZHJhZ2dpbmcpOworfQorCisKKy8qCisgKiBFbmQgb2YgY2FsbC1iYWNrIHJvdXRpbmVzCisgKi8KKworLyoKKyAqIENyZWF0ZSBhbGwgdGhlIG1vdGlmIHdpZGdldHMgbmVjZXNzYXJ5LgorICovCisgICAgdm9pZAorZ3VpX3gxMV9jcmVhdGVfd2lkZ2V0cygpCit7CisgICAgLyoKKyAgICAgKiBTdGFydCBvdXQgYnkgYWRkaW5nIHRoZSBjb25maWd1cmVkIGJvcmRlciB3aWR0aCBpbnRvIHRoZSBib3JkZXIgb2Zmc2V0CisgICAgICovCisgICAgZ3VpLmJvcmRlcl9vZmZzZXQgPSBndWkuYm9yZGVyX3dpZHRoOworCisgICAgLyoKKyAgICAgKiBJbnN0YWxsIHRoZSB0ZWFyT2ZmTW9kZWwgcmVzb3VyY2UgY29udmVydGVyLgorICAgICAqLworI2lmIChYbVZlcnNpb24gPj0gMTAwMikKKyAgICBYbVJlcFR5cGVJbnN0YWxsVGVhck9mZk1vZGVsQ29udmVydGVyKCk7CisjZW5kaWYKKworICAgIC8qIE1ha2Ugc3VyZSB0aGUgIlF1aXQiIG1lbnUgZW50cnkgb2YgdGhlIHdpbmRvdyBtYW5hZ2VyIGlzIGlnbm9yZWQgKi8KKyAgICBYdFZhU2V0VmFsdWVzKHZpbVNoZWxsLCBYbU5kZWxldGVSZXNwb25zZSwgWG1ET19OT1RISU5HLCBOVUxMKTsKKworICAgIHZpbUZvcm0gPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgidmltRm9ybSIsCisJeG1Gb3JtV2lkZ2V0Q2xhc3MsIHZpbVNoZWxsLAorCVhtTmJvcmRlcldpZHRoLCAwLAorCVhtTmhpZ2hsaWdodFRoaWNrbmVzcywgMCwKKwlYbU5zaGFkb3dUaGlja25lc3MsIDAsCisJWG1ObWFyZ2luV2lkdGgsIDAsCisJWG1ObWFyZ2luSGVpZ2h0LCAwLAorCVhtTnJlc2l6ZVBvbGljeSwgWG1SRVNJWkVfQU5ZLAorCU5VTEwpOworICAgIGd1aV9tb3RpZl9tZW51X2NvbG9ycyh2aW1Gb3JtKTsKKworI2lmZGVmIEZFQVRfTUVOVQorICAgIHsKKwlBcmcgYWxbN107IC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggcm9vbSBmb3IgYXJndW1lbnRzISAqLworCWludCBhYyA9IDA7CisKKyMgaWYgKFhtVmVyc2lvbiA+PSAxMDAyKQorCVh0U2V0QXJnKGFsW2FjXSwgWG1OdGVhck9mZk1vZGVsLCB0ZWFyb2ZmX3ZhbCk7IGFjKys7CisjIGVuZGlmCisJWHRTZXRBcmcoYWxbYWNdLCBYbU5sZWZ0QXR0YWNobWVudCwgIFhtQVRUQUNIX0ZPUk0pOyBhYysrOworCVh0U2V0QXJnKGFsW2FjXSwgWG1OdG9wQXR0YWNobWVudCwgICBYbUFUVEFDSF9GT1JNKTsgYWMrKzsKKwlYdFNldEFyZyhhbFthY10sIFhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSk7IGFjKys7CisjIGlmbmRlZiBGRUFUX1RPT0xCQVIKKwkvKiBBbHdheXMgc3RpY2sgdG8gcmlnaHQgaGFuZCBzaWRlLiAqLworCVh0U2V0QXJnKGFsW2FjXSwgWG1OcmlnaHRPZmZzZXQsIDApOyBhYysrOworIyBlbmRpZgorCW1lbnVCYXIgPSBYbUNyZWF0ZU1lbnVCYXIodmltRm9ybSwgIm1lbnVCYXIiLCBhbCwgYWMpOworCVh0TWFuYWdlQ2hpbGQobWVudUJhcik7CisKKwkvKiBSZW1lbWJlciB0aGUgZGVmYXVsdCBjb2xvcnMsIG5lZWRlZCBmb3IgIjpoaSBjbGVhciIuICovCisJWHRWYUdldFZhbHVlcyhtZW51QmFyLAorCSAgICBYbU5iYWNrZ3JvdW5kLCAmZ3VpLm1lbnVfZGVmX2JnX3BpeGVsLAorCSAgICBYbU5mb3JlZ3JvdW5kLCAmZ3VpLm1lbnVfZGVmX2ZnX3BpeGVsLAorCSAgICBOVUxMKTsKKwlndWlfbW90aWZfbWVudV9jb2xvcnMobWVudUJhcik7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICAvKgorICAgICAqIENyZWF0ZSBhbiBlbXB0eSBUb29sQmFyLiBXZSBzaG91bGQgZ2V0IGJ1dHRvbnMgZGVmaW5lZCBmcm9tIG1lbnUudmltLgorICAgICAqLworICAgIHRvb2xCYXJGcmFtZSA9IFh0VmFDcmVhdGVXaWRnZXQoInRvb2xCYXJGcmFtZSIsCisJeG1GcmFtZVdpZGdldENsYXNzLCB2aW1Gb3JtLAorCVhtTnNoYWRvd1RoaWNrbmVzcywgMCwKKwlYbU5tYXJnaW5IZWlnaHQsIDAsCisJWG1ObWFyZ2luV2lkdGgsIDAsCisJWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJWG1OcmlnaHRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCU5VTEwpOworICAgIGd1aV9tb3RpZl9tZW51X2NvbG9ycyh0b29sQmFyRnJhbWUpOworCisgICAgdG9vbEJhciA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJ0b29sQmFyIiwKKwl4bVJvd0NvbHVtbldpZGdldENsYXNzLCB0b29sQmFyRnJhbWUsCisJWG1OY2hpbGRUeXBlLCBYbUZSQU1FX1dPUktBUkVBX0NISUxELAorCVhtTnJvd0NvbHVtblR5cGUsIFhtV09SS19BUkVBLAorCVhtTm9yaWVudGF0aW9uLCBYbUhPUklaT05UQUwsCisJWG1OdHJhdmVyc2FsT24sIEZhbHNlLAorCVhtTmlzSG9tb2dlbmVvdXMsIEZhbHNlLAorCVhtTnBhY2tpbmcsIFhtUEFDS19USUdIVCwKKwlYbU5zcGFjaW5nLCAwLAorCVhtTnNoYWRvd1RoaWNrbmVzcywgMCwKKwlYbU5oaWdobGlnaHRUaGlja25lc3MsIDAsCisJWG1ObWFyZ2luSGVpZ2h0LCAwLAorCVhtTm1hcmdpbldpZHRoLCAwLAorCVhtTmFkanVzdExhc3QsIFRydWUsCisJTlVMTCk7CisgICAgZ3VpX21vdGlmX21lbnVfY29sb3JzKHRvb2xCYXIpOworCisjIGlmIDAJLyogdGhlc2UgZG9uJ3Qgd29yaywgYmVjYXVzZSBvZiB0aGUgWG1OdHJhdmVyc2FsT24gYWJvdmUuICovCisgICAgWHRBZGRFdmVudEhhbmRsZXIodG9vbEJhciwgRW50ZXJXaW5kb3dNYXNrLCBGYWxzZSwKKwkgICAgdG9vbGJhcl9lbnRlcl9jYiwgTlVMTCk7CisgICAgWHRBZGRFdmVudEhhbmRsZXIodG9vbEJhciwgTGVhdmVXaW5kb3dNYXNrLCBGYWxzZSwKKwkgICAgdG9vbGJhcl9sZWF2ZV9jYiwgTlVMTCk7CisjIGVuZGlmCisjZW5kaWYKKworICAgIHRleHRBcmVhRm9ybSA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJ0ZXh0QXJlYUZvcm0iLAorCXhtRm9ybVdpZGdldENsYXNzLCB2aW1Gb3JtLAorCVhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCVhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwlYbU5ib3R0b21BdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCVhtTnRvcEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJWG1ObWFyZ2luV2lkdGgsIDAsCisJWG1ObWFyZ2luSGVpZ2h0LCAwLAorCVhtTnJlc2l6ZVBvbGljeSwgWG1SRVNJWkVfQU5ZLAorCU5VTEwpOworICAgIGd1aV9tb3RpZl9zY3JvbGxfY29sb3JzKHRleHRBcmVhRm9ybSk7CisKKyAgICB0ZXh0QXJlYSA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJ0ZXh0QXJlYSIsCisJeG1EcmF3aW5nQXJlYVdpZGdldENsYXNzLCB0ZXh0QXJlYUZvcm0sCisJWG1OZm9yZWdyb3VuZCwgZ3VpLm5vcm1fcGl4ZWwsCisJWG1OYmFja2dyb3VuZCwgZ3VpLmJhY2tfcGl4ZWwsCisJWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwlYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJWG1OYm90dG9tQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKworCS8qCisJICogVGhlc2UgdGFrZSBzb21lIGNvbnRyb2wgYXdheSBmcm9tIHRoZSB1c2VyLCBidXQgYXZvaWRzIG1ha2luZyB0aGVtCisJICogYWRkIHJlc291cmNlcyB0byBnZXQgYSBkZWNlbnQgbG9va2luZyBzZXR1cC4KKwkgKi8KKwlYbU5ib3JkZXJXaWR0aCwgMCwKKwlYbU5oaWdobGlnaHRUaGlja25lc3MsIDAsCisJWG1Oc2hhZG93VGhpY2tuZXNzLCAwLAorCU5VTEwpOworCisjaWZkZWYgRkVBVF9GT09URVIKKyAgICAvKgorICAgICAqIENyZWF0ZSB0aGUgRm9vdGVyLgorICAgICAqLworICAgIGZvb3RlciA9IFh0VmFDcmVhdGVXaWRnZXQoImZvb3RlciIsCisJeG1MYWJlbEdhZGdldENsYXNzLCB2aW1Gb3JtLAorCVhtTmFsaWdubWVudCwgWG1BTElHTk1FTlRfQkVHSU5OSU5HLAorCVhtTm1hcmdpbkhlaWdodCwgMCwKKwlYbU5tYXJnaW5XaWR0aCwgMCwKKwlYbU50cmF2ZXJzYWxPbiwgRmFsc2UsCisJWG1OcmVjb21wdXRlU2l6ZSwgRmFsc2UsCisJWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJWG1ObGVmdE9mZnNldCwgNSwKKwlYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJWG1OYm90dG9tQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwlOVUxMKTsKKyAgICBndWlfbWNoX3NldF9mb290ZXIoKGNoYXJfdSAqKSAiIik7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSW5zdGFsbCB0aGUgY2FsbGJhY2tzLgorICAgICAqLworICAgIGd1aV94MTFfY2FsbGJhY2tzKHRleHRBcmVhLCB2aW1Gb3JtKTsKKworICAgIC8qIFByZXRlbmQgd2UgZG9uJ3QgaGF2ZSBpbnB1dCBmb2N1cywgd2Ugd2lsbCBnZXQgYW4gZXZlbnQgaWYgd2UgZG8uICovCisgICAgZ3VpLmluX2ZvY3VzID0gRkFMU0U7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB0aGUgR1VJIGlzIG5vdCBnb2luZyB0byBzdGFydCBhZnRlciBhbGwuCisgKi8KKyAgICB2b2lkCitndWlfeDExX2Rlc3Ryb3lfd2lkZ2V0cygpCit7CisgICAgdGV4dEFyZWEgPSBOVUxMOworI2lmZGVmIEZFQVRfTUVOVQorICAgIG1lbnVCYXIgPSBOVUxMOworI2VuZGlmCit9CisKKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3RleHRfYXJlYV9wb3MoeCwgeSwgdywgaCkKKyAgICBpbnQJICAgIHg7CisgICAgaW50CSAgICB5OworICAgIGludAkgICAgdzsKKyAgICBpbnQJICAgIGg7Cit7CisjaWZkZWYgRkVBVF9UT09MQkFSCisgICAgLyogR2l2ZSBrZXlib2FyZCBmb2N1cyB0byB0aGUgdGV4dEFyZWEgaW5zdGVhZCBvZiB0aGUgdG9vbGJhci4gKi8KKyAgICBndWlfbWNoX3Jlc2V0X2ZvY3VzKCk7CisjZW5kaWYKK30KKworICAgIHZvaWQKK2d1aV94MTFfc2V0X2JhY2tfY29sb3IoKQoreworICAgIGlmICh0ZXh0QXJlYSAhPSBOVUxMKQorI2lmIChYbVZlcnNpb24gPj0gMTAwMikKKwlYbUNoYW5nZUNvbG9yKHRleHRBcmVhLCBndWkuYmFja19waXhlbCk7CisjZWxzZQorCVh0VmFTZXRWYWx1ZXModGV4dEFyZWEsCisJCSAgWG1OYmFja2dyb3VuZCwgZ3VpLmJhY2tfcGl4ZWwsCisJCSAgTlVMTCk7CisjZW5kaWYKK30KKworLyoKKyAqIE1hbmFnZSBkaWFsb2cgY2VudGVyZWQgb24gcG9pbnRlci4gVGhpcyBjb3VsZCBiZSB1c2VkIGJ5IHRoZSBBdGhlbmEgY29kZSBhcworICogd2VsbC4KKyAqLworc3RhdGljIHZvaWQgbWFuYWdlX2NlbnRlcmVkIF9fQVJHUygoV2lkZ2V0IGRpYWxvZ19jaGlsZCkpOworCitzdGF0aWMgdm9pZAorbWFuYWdlX2NlbnRlcmVkKGRpYWxvZ19jaGlsZCkKKyAgICBXaWRnZXQgZGlhbG9nX2NoaWxkOworeworICAgIFdpZGdldCBzaGVsbCA9IFh0UGFyZW50KGRpYWxvZ19jaGlsZCk7CisgICAgV2luZG93IHJvb3QsIGNoaWxkOworICAgIHVuc2lnbmVkIGludCBtYXNrOworICAgIHVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0LCBib3JkZXJfd2lkdGgsIGRlcHRoOworICAgIGludCB4LCB5LCB3aW5feCwgd2luX3ksIG1heFgsIG1heFk7CisgICAgQm9vbGVhbiBtYXBwZWRXaGVuTWFuYWdlZDsKKworICAgIC8qIFRlbXBvcmFyaWx5IHNldCB2YWx1ZSBvZiBYbU5tYXBwZWRXaGVuTWFuYWdlZAorICAgICAgIHRvIHN0b3AgdGhlIGRpYWxvZyBmcm9tIHBvcHBpbmcgdXAgcmlnaHQgYXdheSAqLworICAgIFh0VmFHZXRWYWx1ZXMoc2hlbGwsIFhtTm1hcHBlZFdoZW5NYW5hZ2VkLCAmbWFwcGVkV2hlbk1hbmFnZWQsIDApOworICAgIFh0VmFTZXRWYWx1ZXMoc2hlbGwsIFhtTm1hcHBlZFdoZW5NYW5hZ2VkLCBGYWxzZSwgMCk7CisKKyAgICBYdE1hbmFnZUNoaWxkKGRpYWxvZ19jaGlsZCk7CisKKyAgICAvKiBHZXQgdGhlIHBvaW50ZXIgcG9zaXRpb24gKHgsIHkpICovCisgICAgWFF1ZXJ5UG9pbnRlcihYdERpc3BsYXkoc2hlbGwpLCBYdFdpbmRvdyhzaGVsbCksICZyb290LCAmY2hpbGQsCisJCSAgJngsICZ5LCAmd2luX3gsICZ3aW5feSwgJm1hc2spOworCisgICAgLyogVHJhbnNsYXRlIHRoZSBwb2ludGVyIHBvc2l0aW9uICh4LCB5KSBpbnRvIGEgcG9zaXRpb24gZm9yIHRoZSBuZXcKKyAgICAgICB3aW5kb3cgdGhhdCB3aWxsIHBsYWNlIHRoZSBwb2ludGVyIGF0IGl0cyBjZW50ZXIgKi8KKyAgICBYR2V0R2VvbWV0cnkoWHREaXNwbGF5KHNoZWxsKSwgWHRXaW5kb3coc2hlbGwpLCAmcm9vdCwgJndpbl94LCAmd2luX3ksCisJCSAmd2lkdGgsICZoZWlnaHQsICZib3JkZXJfd2lkdGgsICZkZXB0aCk7CisgICAgd2lkdGggKz0gMiAqIGJvcmRlcl93aWR0aDsKKyAgICBoZWlnaHQgKz0gMiAqIGJvcmRlcl93aWR0aDsKKyAgICB4IC09IHdpZHRoIC8gMjsKKyAgICB5IC09IGhlaWdodCAvIDI7CisKKyAgICAvKiBFbnN1cmUgdGhhdCB0aGUgZGlhbG9nIHJlbWFpbnMgb24gc2NyZWVuICovCisgICAgbWF4WCA9IFh0U2NyZWVuKHNoZWxsKS0+d2lkdGggLSB3aWR0aDsKKyAgICBtYXhZID0gWHRTY3JlZW4oc2hlbGwpLT5oZWlnaHQgLSBoZWlnaHQ7CisgICAgaWYgKHggPCAwKQorCXggPSAwOworICAgIGlmICh4ID4gbWF4WCkKKwl4ID0gbWF4WDsKKyAgICBpZiAoeSA8IDApCisJeSA9IDA7CisgICAgaWYgKHkgPiBtYXhZKQorCXkgPSBtYXhZOworCisgICAgLyogU2V0IGRlc2lyZWQgd2luZG93IHBvc2l0aW9uIGluIHRoZSBEaWFsb2dTaGVsbCAqLworICAgIFh0VmFTZXRWYWx1ZXMoc2hlbGwsIFhtTngsIHgsIFhtTnksIHksIE5VTEwpOworCisgICAgLyogTWFwIHRoZSB3aWRnZXQgKi8KKyAgICBYdE1hcFdpZGdldChzaGVsbCk7CisKKyAgICAvKiBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBYbU5tYXBwZWRXaGVuTWFuYWdlZCAqLworICAgIFh0VmFTZXRWYWx1ZXMoc2hlbGwsIFhtTm1hcHBlZFdoZW5NYW5hZ2VkLCBtYXBwZWRXaGVuTWFuYWdlZCwgMCk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTUVOVSkgfHwgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogRW5jYXBzdWxhdGUgdGhlIHdheSBhbiBYbUZvbnRMaXN0IGlzIGNyZWF0ZWQuCisgKi8KKyAgICBYbUZvbnRMaXN0CitndWlfbW90aWZfY3JlYXRlX2ZvbnRsaXN0KGZvbnQpCisgICAgWEZvbnRTdHJ1Y3QgICAgKmZvbnQ7Cit7CisgICAgWG1Gb250TGlzdCBmb250X2xpc3Q7CisKKyMgaWYgKFhtVmVyc2lvbiA8PSAxMDAxKQorICAgIC8qIE1vdGlmIDEuMSBtZXRob2QgKi8KKyAgICBmb250X2xpc3QgPSBYbUZvbnRMaXN0Q3JlYXRlKGZvbnQsIFNUUklOR19UQUcpOworIyBlbHNlCisgICAgLyogTW90aWYgMS4yIG1ldGhvZCAqLworICAgIFhtRm9udExpc3RFbnRyeSBmb250X2xpc3RfZW50cnk7CisKKyAgICBmb250X2xpc3RfZW50cnkgPSBYbUZvbnRMaXN0RW50cnlDcmVhdGUoU1RSSU5HX1RBRywgWG1GT05UX0lTX0ZPTlQsCisJCQkJCSAgICAoWHRQb2ludGVyKWZvbnQpOworICAgIGZvbnRfbGlzdCA9IFhtRm9udExpc3RBcHBlbmRFbnRyeShOVUxMLCBmb250X2xpc3RfZW50cnkpOworICAgIFhtRm9udExpc3RFbnRyeUZyZWUoJmZvbnRfbGlzdF9lbnRyeSk7CisjIGVuZGlmCisgICAgcmV0dXJuIGZvbnRfbGlzdDsKK30KKworIyBpZiAoKFhtVmVyc2lvbiA+IDEwMDEpICYmIGRlZmluZWQoRkVBVF9YRk9OVFNFVCkpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgWG1Gb250TGlzdAorZ3VpX21vdGlmX2ZvbnRzZXQyZm9udGxpc3QoZm9udHNldCkKKyAgICBYRm9udFNldAkqZm9udHNldDsKK3sKKyAgICBYbUZvbnRMaXN0IGZvbnRfbGlzdDsKKworICAgIC8qIE1vdGlmIDEuMiBtZXRob2QgKi8KKyAgICBYbUZvbnRMaXN0RW50cnkgZm9udF9saXN0X2VudHJ5OworCisgICAgZm9udF9saXN0X2VudHJ5ID0gWG1Gb250TGlzdEVudHJ5Q3JlYXRlKFNUUklOR19UQUcsCisJCQkJCSAgICBYbUZPTlRfSVNfRk9OVFNFVCwKKwkJCQkJICAgIChYdFBvaW50ZXIpKmZvbnRzZXQpOworICAgIGZvbnRfbGlzdCA9IFhtRm9udExpc3RBcHBlbmRFbnRyeShOVUxMLCBmb250X2xpc3RfZW50cnkpOworICAgIFhtRm9udExpc3RFbnRyeUZyZWUoJmZvbnRfbGlzdF9lbnRyeSk7CisgICAgcmV0dXJuIGZvbnRfbGlzdDsKK30KKyMgZW5kaWYKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTUVOVSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBNZW51IHN0dWZmLgorICovCisKK3N0YXRpYyB2b2lkIGd1aV9tb3RpZl9hZGRfYWN0ZXh0IF9fQVJHUygodmltbWVudV9UICptZW51KSk7CisjaWYgKFhtVmVyc2lvbiA+PSAxMDAyKQorc3RhdGljIHZvaWQgdG9nZ2xlX3RlYXJvZmYgX19BUkdTKChXaWRnZXQgd2lkKSk7CitzdGF0aWMgdm9pZCBndWlfbWNoX3JlY3Vyc2VfdGVhcm9mZnMgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgZ3VpX21jaF9zdWJtZW51X2NoYW5nZSBfX0FSR1MoKHZpbW1lbnVfVCAqbXAsIGludCBjb2xvcnMpKTsKKworc3RhdGljIHZvaWQgZG9fc2V0X21uZW1vbmljcyBfX0FSR1MoKGludCBlbmFibGUpKTsKK3N0YXRpYyBpbnQgbWVudV9lbmFibGVkID0gVFJVRTsKKworICAgIHZvaWQKK2d1aV9tY2hfZW5hYmxlX21lbnUoZmxhZykKKyAgICBpbnQJICAgIGZsYWc7Cit7CisgICAgaWYgKGZsYWcpCisgICAgeworCVh0TWFuYWdlQ2hpbGQobWVudUJhcik7CisjaWZkZWYgRkVBVF9UT09MQkFSCisJaWYgKFh0SXNNYW5hZ2VkKFh0UGFyZW50KHRvb2xCYXIpKSkKKwl7CisJICAgIC8qIHRvb2xCYXIgaXMgYXR0YWNoZWQgdG8gdG9wIGZvcm0gKi8KKwkgICAgWHRWYVNldFZhbHVlcyhYdFBhcmVudCh0b29sQmFyKSwKKwkJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQlYbU50b3BXaWRnZXQsIG1lbnVCYXIsCisJCU5VTEwpOworCSAgICBYdFZhU2V0VmFsdWVzKHRleHRBcmVhRm9ybSwKKwkJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQlYbU50b3BXaWRnZXQsIFh0UGFyZW50KHRvb2xCYXIpLAorCQlOVUxMKTsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBYdFZhU2V0VmFsdWVzKHRleHRBcmVhRm9ybSwKKwkJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQlYbU50b3BXaWRnZXQsIG1lbnVCYXIsCisJCU5VTEwpOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlYdFVubWFuYWdlQ2hpbGQobWVudUJhcik7CisjaWZkZWYgRkVBVF9UT09MQkFSCisJaWYgKFh0SXNNYW5hZ2VkKFh0UGFyZW50KHRvb2xCYXIpKSkKKwl7CisJICAgIFh0VmFTZXRWYWx1ZXMoWHRQYXJlbnQodG9vbEJhciksCisJCVhtTnRvcEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCU5VTEwpOworCSAgICBYdFZhU2V0VmFsdWVzKHRleHRBcmVhRm9ybSwKKwkJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQlYbU50b3BXaWRnZXQsIFh0UGFyZW50KHRvb2xCYXIpLAorCQlOVUxMKTsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBYdFZhU2V0VmFsdWVzKHRleHRBcmVhRm9ybSwKKwkJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkJTlVMTCk7CisJfQorICAgIH0KKworfQorCisvKgorICogRW5hYmxlIG9yIGRpc2FibGUgbW5lbW9uaWNzIGZvciB0aGUgdG9wbGV2ZWwgbWVudXMuCisgKi8KKyAgICB2b2lkCitndWlfbW90aWZfc2V0X21uZW1vbmljcyhlbmFibGUpCisgICAgaW50CQllbmFibGU7Cit7CisgICAgLyoKKyAgICAgKiBEb24ndCBlbmFibGUgbWVudSBtbmVtb25pY3Mgd2hlbiB0aGUgbWVudSBiYXIgaXMgZGlzYWJsZWQsIExlc3NUaWYKKyAgICAgKiBjcmFzaGVzIHdoZW4gdXNpbmcgYSBtbmVtb25pYyB0aGVuLgorICAgICAqLworICAgIGlmICghbWVudV9lbmFibGVkKQorCWVuYWJsZSA9IEZBTFNFOworICAgIGRvX3NldF9tbmVtb25pY3MoZW5hYmxlKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitkb19zZXRfbW5lbW9uaWNzKGVuYWJsZSkKKyAgICBpbnQJCWVuYWJsZTsKK3sKKyAgICB2aW1tZW51X1QJKm1lbnU7CisKKyAgICBmb3IgKG1lbnUgPSByb290X21lbnU7IG1lbnUgIT0gTlVMTDsgbWVudSA9IG1lbnUtPm5leHQpCisJaWYgKG1lbnUtPmlkICE9IChXaWRnZXQpMCkKKwkgICAgWHRWYVNldFZhbHVlcyhtZW51LT5pZCwKKwkJICAgIFhtTm1uZW1vbmljLCBlbmFibGUgPyBtZW51LT5tbmVtb25pYyA6IE5VTCwKKwkJICAgIE5VTEwpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9hZGRfbWVudShtZW51LCBpZHgpCisgICAgdmltbWVudV9UCSptZW51OworICAgIGludAkJaWR4OworeworICAgIFhtU3RyaW5nCWxhYmVsOworICAgIFdpZGdldAlzaGVsbDsKKyAgICB2aW1tZW51X1QJKnBhcmVudCA9IG1lbnUtPnBhcmVudDsKKworI2lmZGVmIE1PVElGX1BPUFVQCisgICAgaWYgKG1lbnVfaXNfcG9wdXAobWVudS0+bmFtZSkpCisgICAgeworCUFyZyBhcmdbMl07CisJaW50IG4gPSAwOworCisJLyogT25seSBjcmVhdGUgdGhlIHBvcHVwIG1lbnUgd2hlbiBpdCdzIGFjdHVhbGx5IHVzZWQsIG90aGVyd2lzZSB0aGVyZQorCSAqIGlzIGEgZGVsYXkgd2hlbiB1c2luZyB0aGUgcmlnaHQgbW91c2UgYnV0dG9uLiAqLworIyBpZiAoWG1WZXJzaW9uIDw9IDEwMDIpCisJaWYgKG1vdXNlX21vZGVsX3BvcHVwKCkpCisjIGVuZGlmCisJeworCSAgICBpZiAoZ3VpLm1lbnVfYmdfcGl4ZWwgIT0gSU5WQUxDT0xPUikKKwkgICAgeworCQlYdFNldEFyZyhhcmdbMF0sIFhtTmJhY2tncm91bmQsIGd1aS5tZW51X2JnX3BpeGVsKTsgbisrOworCSAgICB9CisJICAgIGlmIChndWkubWVudV9mZ19waXhlbCAhPSBJTlZBTENPTE9SKQorCSAgICB7CisJCVh0U2V0QXJnKGFyZ1sxXSwgWG1OZm9yZWdyb3VuZCwgZ3VpLm1lbnVfZmdfcGl4ZWwpOyBuKys7CisJICAgIH0KKwkgICAgbWVudS0+c3VibWVudV9pZCA9IFhtQ3JlYXRlUG9wdXBNZW51KHRleHRBcmVhLCAiY29udGV4dE1lbnUiLAorCQkJCQkJCQkgICAgICBhcmcsIG4pOworCSAgICBtZW51LT5pZCA9IChXaWRnZXQpMDsKKwl9CisJcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCFtZW51X2lzX21lbnViYXIobWVudS0+bmFtZSkKKwkgICAgfHwgKHBhcmVudCAhPSBOVUxMICYmIHBhcmVudC0+c3VibWVudV9pZCA9PSAoV2lkZ2V0KTApKQorCXJldHVybjsKKworICAgIGxhYmVsID0gWG1TdHJpbmdDcmVhdGUoKGNoYXIgKiltZW51LT5kbmFtZSwgU1RSSU5HX1RBRyk7CisgICAgaWYgKGxhYmVsID09IE5VTEwpCisJcmV0dXJuOworICAgIG1lbnUtPmlkID0gWHRWYUNyZWF0ZVdpZGdldCgic3ViTWVudSIsCisJICAgIHhtQ2FzY2FkZUJ1dHRvbldpZGdldENsYXNzLAorCSAgICAocGFyZW50ID09IE5VTEwpID8gbWVudUJhciA6IHBhcmVudC0+c3VibWVudV9pZCwKKwkgICAgWG1ObGFiZWxTdHJpbmcsIGxhYmVsLAorCSAgICBYbU5tbmVtb25pYywgcF93YWtbMF0gPT0gJ24nID8gTlVMIDogbWVudS0+bW5lbW9uaWMsCisjaWYgKFhtVmVyc2lvbiA+PSAxMDAyKQorCSAgICAvKiBzdWJtZW51OiBjb3VudCB0aGUgdGVhcm9mZiBpdGVtIChuZWVkZWQgZm9yIExlc3NUaWYpICovCisJICAgIFhtTnBvc2l0aW9uSW5kZXgsIGlkeCArIChwYXJlbnQgIT0gTlVMTAorCQkJICAgJiYgdGVhcm9mZl92YWwgPT0gKGludClYbVRFQVJfT0ZGX0VOQUJMRUQgPyAxIDogMCksCisjZW5kaWYKKwkgICAgTlVMTCk7CisgICAgZ3VpX21vdGlmX21lbnVfY29sb3JzKG1lbnUtPmlkKTsKKyAgICBndWlfbW90aWZfbWVudV9mb250bGlzdChtZW51LT5pZCk7CisgICAgWG1TdHJpbmdGcmVlKGxhYmVsKTsKKworICAgIGlmIChtZW51LT5pZCA9PSAoV2lkZ2V0KTApCQkvKiBmYWlsZWQgKi8KKwlyZXR1cm47CisKKyAgICAvKiBhZGQgYWNjZWxlcmF0b3IgdGV4dCAqLworICAgIGd1aV9tb3RpZl9hZGRfYWN0ZXh0KG1lbnUpOworCisgICAgc2hlbGwgPSBYdFZhQ3JlYXRlV2lkZ2V0KCJzdWJNZW51U2hlbGwiLAorCXhtTWVudVNoZWxsV2lkZ2V0Q2xhc3MsIG1lbnUtPmlkLAorCVhtTndpZHRoLCAxLAorCVhtTmhlaWdodCwgMSwKKwlOVUxMKTsKKyAgICBndWlfbW90aWZfbWVudV9jb2xvcnMoc2hlbGwpOworICAgIG1lbnUtPnN1Ym1lbnVfaWQgPSBYdFZhQ3JlYXRlV2lkZ2V0KCJyb3dDb2x1bW5NZW51IiwKKwl4bVJvd0NvbHVtbldpZGdldENsYXNzLCBzaGVsbCwKKwlYbU5yb3dDb2x1bW5UeXBlLCBYbU1FTlVfUFVMTERPV04sCisJTlVMTCk7CisgICAgZ3VpX21vdGlmX21lbnVfY29sb3JzKG1lbnUtPnN1Ym1lbnVfaWQpOworCisgICAgaWYgKG1lbnUtPnN1Ym1lbnVfaWQgPT0gKFdpZGdldCkwKQkJLyogZmFpbGVkICovCisJcmV0dXJuOworCisjaWYgKFhtVmVyc2lvbiA+PSAxMDAyKQorICAgIC8qIFNldCB0aGUgY29sb3JzIGZvciB0aGUgdGVhciBvZmYgd2lkZ2V0ICovCisgICAgdG9nZ2xlX3RlYXJvZmYobWVudS0+c3VibWVudV9pZCk7CisjZW5kaWYKKworICAgIFh0VmFTZXRWYWx1ZXMobWVudS0+aWQsCisJWG1Oc3ViTWVudUlkLCBtZW51LT5zdWJtZW51X2lkLAorCU5VTEwpOworCisgICAgLyoKKyAgICAgKiBUaGUgIkhlbHAiIG1lbnUgaXMgYSBzcGVjaWFsIGNhc2UsIGFuZCBzaG91bGQgYmUgcGxhY2VkIGF0IHRoZSBmYXIKKyAgICAgKiByaWdodCBoYW5kIHNpZGUgb2YgdGhlIG1lbnUtYmFyLiAgSXQncyByZWNvZ25pemVkIGJ5IGl0cyBoaWdoIHByaW9yaXR5LgorICAgICAqLworICAgIGlmIChwYXJlbnQgPT0gTlVMTCAmJiBtZW51LT5wcmlvcml0eSA+PSA5OTk5KQorCVh0VmFTZXRWYWx1ZXMobWVudUJhciwKKwkJWG1ObWVudUhlbHBXaWRnZXQsIG1lbnUtPmlkLAorCQlOVUxMKTsKKworICAgIC8qCisgICAgICogV2hlbiB3ZSBhZGQgYSB0b3AtbGV2ZWwgaXRlbSB0byB0aGUgbWVudSBiYXIsIHdlIGNhbiBmaWd1cmUgb3V0IGhvdworICAgICAqIGhpZ2ggdGhlIG1lbnUgYmFyIHNob3VsZCBiZS4KKyAgICAgKi8KKyAgICBpZiAocGFyZW50ID09IE5VTEwpCisJZ3VpX21jaF9jb21wdXRlX21lbnVfaGVpZ2h0KG1lbnUtPmlkKTsKK30KKworCisvKgorICogQWRkIG1uZW1vbmljIGFuZCBhY2NlbGVyYXRvciB0ZXh0IHRvIGEgbWVudSBidXR0b24uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX21vdGlmX2FkZF9hY3RleHQobWVudSkKKyAgICB2aW1tZW51X1QJKm1lbnU7Cit7CisgICAgWG1TdHJpbmcJbGFiZWw7CisKKyAgICAvKiBBZGQgYWNjZWxyYXRvciB0ZXh0LCBpZiB0aGVyZSBpcyBvbmUgKi8KKyAgICBpZiAobWVudS0+YWN0ZXh0ICE9IE5VTEwgJiYgbWVudS0+aWQgIT0gKFdpZGdldCkwKQorICAgIHsKKwlsYWJlbCA9IFhtU3RyaW5nQ3JlYXRlKChjaGFyICopbWVudS0+YWN0ZXh0LCBTVFJJTkdfVEFHKTsKKwlpZiAobGFiZWwgPT0gTlVMTCkKKwkgICAgcmV0dXJuOworCVh0VmFTZXRWYWx1ZXMobWVudS0+aWQsIFhtTmFjY2VsZXJhdG9yVGV4dCwgbGFiZWwsIE5VTEwpOworCVhtU3RyaW5nRnJlZShsYWJlbCk7CisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX21jaF90b2dnbGVfdGVhcm9mZnMoZW5hYmxlKQorICAgIGludAkJZW5hYmxlOworeworI2lmIChYbVZlcnNpb24gPj0gMTAwMikKKyAgICBpZiAoZW5hYmxlKQorCXRlYXJvZmZfdmFsID0gKGludClYbVRFQVJfT0ZGX0VOQUJMRUQ7CisgICAgZWxzZQorCXRlYXJvZmZfdmFsID0gKGludClYbVRFQVJfT0ZGX0RJU0FCTEVEOworICAgIHRvZ2dsZV90ZWFyb2ZmKG1lbnVCYXIpOworICAgIGd1aV9tY2hfcmVjdXJzZV90ZWFyb2Zmcyhyb290X21lbnUpOworI2VuZGlmCit9CisKKyNpZiAoWG1WZXJzaW9uID49IDEwMDIpCisvKgorICogU2V0IHRoZSB0ZWFyb2ZmIGZvciBvbmUgbWVudSB3aWRnZXQgb24gb3Igb2ZmLCBhbmQgc2V0IHRoZSBjb2xvciBvZiB0aGUKKyAqIHRlYXJvZmYgd2lkZ2V0LgorICovCisgICAgc3RhdGljIHZvaWQKK3RvZ2dsZV90ZWFyb2ZmKHdpZCkKKyAgICBXaWRnZXQJd2lkOworeworICAgIFdpZGdldAl3OworCisgICAgWHRWYVNldFZhbHVlcyh3aWQsIFhtTnRlYXJPZmZNb2RlbCwgdGVhcm9mZl92YWwsIE5VTEwpOworICAgIGlmICh0ZWFyb2ZmX3ZhbCA9PSAoaW50KVhtVEVBUl9PRkZfRU5BQkxFRAorCSAgICAmJiAodyA9IFhtR2V0VGVhck9mZkNvbnRyb2wod2lkKSkgIT0gKFdpZGdldCkwKQorCWd1aV9tb3RpZl9tZW51X2NvbG9ycyh3KTsKK30KKworICAgIHN0YXRpYyB2b2lkCitndWlfbWNoX3JlY3Vyc2VfdGVhcm9mZnMobWVudSkKKyAgICB2aW1tZW51X1QJKm1lbnU7Cit7CisgICAgd2hpbGUgKG1lbnUgIT0gTlVMTCkKKyAgICB7CisJaWYgKCFtZW51X2lzX3BvcHVwKG1lbnUtPm5hbWUpKQorCXsKKwkgICAgaWYgKG1lbnUtPnN1Ym1lbnVfaWQgIT0gKFdpZGdldCkwKQorCQl0b2dnbGVfdGVhcm9mZihtZW51LT5zdWJtZW51X2lkKTsKKwkgICAgZ3VpX21jaF9yZWN1cnNlX3RlYXJvZmZzKG1lbnUtPmNoaWxkcmVuKTsKKwl9CisJbWVudSA9IG1lbnUtPm5leHQ7CisgICAgfQorfQorI2VuZGlmCisKKyAgICBpbnQKK2d1aV9tY2hfdGV4dF9hcmVhX2V4dHJhX2hlaWdodCgpCit7CisgICAgRGltZW5zaW9uCXNoYWRvd0hlaWdodDsKKworICAgIFh0VmFHZXRWYWx1ZXModGV4dEFyZWFGb3JtLCBYbU5zaGFkb3dUaGlja25lc3MsICZzaGFkb3dIZWlnaHQsIE5VTEwpOworICAgIHJldHVybiBzaGFkb3dIZWlnaHQ7Cit9CisKKy8qCisgKiBDb21wdXRlIHRoZSBoZWlnaHQgb2YgdGhlIG1lbnUgYmFyLgorICogV2UgbmVlZCB0byBjaGVjayBhbGwgdGhlIGl0ZW1zIGZvciB0aGVpciBwb3NpdGlvbiBhbmQgaGVpZ2h0LCBmb3IgdGhlIGNhc2UKKyAqIHRoZXJlIGFyZSBzZXZlcmFsIHJvd3MsIGFuZC9vciBzb21lIGNoYXJhY3RlcnMgZXh0ZW5kIGhpZ2hlciBvciBsb3dlci4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfY29tcHV0ZV9tZW51X2hlaWdodChpZCkKKyAgICBXaWRnZXQJaWQ7CQkgICAgLyogY2FuIGJlIE5VTEwgd2hlbiBkZWxldGluZyBtZW51ICovCit7CisgICAgRGltZW5zaW9uCXksIG1heHk7CisgICAgRGltZW5zaW9uCW1hcmdpbiwgc2hhZG93OworICAgIHZpbW1lbnVfVAkqbXA7CisgICAgc3RhdGljIERpbWVuc2lvbgloZWlnaHQgPSAyMTsJLyogbm9ybWFsIGhlaWdodCBvZiBhIG1lbnUgaXRlbSAqLworCisgICAgLyoKKyAgICAgKiBHZXQgdGhlIGhlaWdodCBvZiB0aGUgbmV3IGl0ZW0sIGJlZm9yZSBtYW5hZ2luZyBpdCwgYmVjYXVzZSBpdCB3aWxsCisgICAgICogc3RpbGwgcmVmbGVjdCB0aGUgZm9udCBzaXplLiAgQWZ0ZXIgbWFuYWdpbmcgaXQgZGVwZW5kcyBvbiB0aGUgbWVudQorICAgICAqIGhlaWdodCwgd2hpY2ggaXMgd2hhdCB3ZSBqdXN0IHdhbnRlZCB0byBnZXQhLgorICAgICAqLworICAgIGlmIChpZCAhPSAoV2lkZ2V0KTApCisJWHRWYUdldFZhbHVlcyhpZCwgWG1OaGVpZ2h0LCAmaGVpZ2h0LCBOVUxMKTsKKworICAgIC8qIEZpbmQgYW55IG1lbnUgV2lkZ2V0LCB0byBiZSBhYmxlIHRvIGNhbGwgWHRNYW5hZ2VDaGlsZCgpICovCisgICAgZWxzZQorCWZvciAobXAgPSByb290X21lbnU7IG1wICE9IE5VTEw7IG1wID0gbXAtPm5leHQpCisJICAgIGlmIChtcC0+aWQgIT0gKFdpZGdldCkwICYmIG1lbnVfaXNfbWVudWJhcihtcC0+bmFtZSkpCisJICAgIHsKKwkJaWQgPSBtcC0+aWQ7CisJCWJyZWFrOworCSAgICB9CisKKyAgICAvKgorICAgICAqIE5vdyBtYW5hZ2UgdGhlIG1lbnUgaXRlbSwgdG8gbWFrZSB0aGVtIGFsbCBiZSBwb3NpdGlvbmVkIChtYWtlcyBhbgorICAgICAqIGV4dHJhIHJvdyB3aGVuIG5lZWRlZCwgcmVtb3ZlcyBpdCB3aGVuIG5vdCBuZWVkZWQpLgorICAgICAqLworICAgIGlmIChpZCAhPSAoV2lkZ2V0KTApCisJWHRNYW5hZ2VDaGlsZChpZCk7CisKKyAgICAvKgorICAgICAqIE5vdyBmaW5kIHRoZSBtZW51IGl0ZW0gdGhhdCBpcyB0aGUgZnVydGhlc3QgZG93biwgYW5kIGdldCBpdCdzIHBvc2l0aW9uLgorICAgICAqLworICAgIG1heHkgPSAwOworICAgIGZvciAobXAgPSByb290X21lbnU7IG1wICE9IE5VTEw7IG1wID0gbXAtPm5leHQpCisgICAgeworCWlmIChtcC0+aWQgIT0gKFdpZGdldCkwICYmIG1lbnVfaXNfbWVudWJhcihtcC0+bmFtZSkpCisJeworCSAgICBYdFZhR2V0VmFsdWVzKG1wLT5pZCwgWG1OeSwgJnksIE5VTEwpOworCSAgICBpZiAoeSA+IG1heHkpCisJCW1heHkgPSB5OworCX0KKyAgICB9CisKKyAgICBYdFZhR2V0VmFsdWVzKG1lbnVCYXIsCisJWG1ObWFyZ2luSGVpZ2h0LCAmbWFyZ2luLAorCVhtTnNoYWRvd1RoaWNrbmVzcywgJnNoYWRvdywKKwlOVUxMKTsKKworICAgIC8qCisgICAgICogVGhpcyBjb21wdXRhdGlvbiBpcyB0aGUgcmVzdWx0IG9mIHRyaWFsLWFuZC1lcnJvcjoKKyAgICAgKiBtYXh5ID0JVGhlIG1heGltdW0gcG9zaXRpb24gb2YgYW4gaXRlbTsgcmVxdWlyZWQgZm9yIHdoZW4gdGhlcmUgYXJlCisgICAgICoJCXR3byBvciBtb3JlIHJvd3MKKyAgICAgKiBoZWlnaHQgPSBoZWlnaHQgb2YgYW4gaXRlbSwgYmVmb3JlIG1hbmFnaW5nIGl0OwlIb3BlZnVsbHkgdGhpcyB3aWxsCisgICAgICoJCWNoYW5nZSB3aXRoIHRoZSBmb250IGhlaWdodC4gIEluY2x1ZGVzIHNoYWRvdy1ib3JkZXIuCisgICAgICogc2hhZG93ID0Jc2hhZG93LWJvcmRlcjsgbXVzdCBiZSBzdWJ0cmFjdGVkIGZyb20gdGhlIGhlaWdodC4KKyAgICAgKiBtYXJnaW4gPSBtYXJnaW4gYXJvdW5kIHRoZSBtZW51IGJ1dHRvbnM7ICBNdXN0IGJlIGFkZGVkLgorICAgICAqIEFkZCA0IGZvciB0aGUgdW5kZXJsaW5pbmcgb2Ygc2hvcnRjdXQga2V5cy4KKyAgICAgKi8KKyAgICBndWkubWVudV9oZWlnaHQgPSBtYXh5ICsgaGVpZ2h0IC0gMiAqIHNoYWRvdyArIDIgKiBtYXJnaW4gKyA0OworCisjaWZkZWYgTEVTU1RJRl9WRVJTSU9OCisgICAgLyogU29tZWhvdyB0aGUgbWVudSBiYXIgZG9lc24ndCByZXNpemUgYXV0b21hdGljYWxseS4gIFNldCBpdCBoZXJlLAorICAgICAqIGV2ZW4gdGhvdWdoIHRoaXMgaXMgYSBjYXRjaCAyMi4gIERvbid0IGRvIHRoaXMgd2hlbiBzdGFydGluZyB1cCwKKyAgICAgKiBzb21laG93IHRoZSBtZW51IGdldHMgdmVyeSBoaWdoIHRoZW4uICovCisgICAgaWYgKGd1aS5zaGVsbF9jcmVhdGVkKQorCVh0VmFTZXRWYWx1ZXMobWVudUJhciwgWG1OaGVpZ2h0LCBndWkubWVudV9oZWlnaHQsIE5VTEwpOworI2VuZGlmCit9CisKKyAgICB2b2lkCitndWlfbWNoX2FkZF9tZW51X2l0ZW0obWVudSwgaWR4KQorICAgIHZpbW1lbnVfVAkqbWVudTsKKyAgICBpbnQJCWlkeDsKK3sKKyAgICBYbVN0cmluZwlsYWJlbDsKKyAgICB2aW1tZW51X1QJKnBhcmVudCA9IG1lbnUtPnBhcmVudDsKKworIyBpZmRlZiBFQkNESUMKKyAgICBtZW51LT5tbmVtb25pYyA9IDA7CisjIGVuZGlmCisKKyMgaWYgKFhtVmVyc2lvbiA8PSAxMDAyKQorICAgIC8qIERvbid0IGFkZCBQb3B1cCBtZW51IGl0ZW1zIHdoZW4gdGhlIHBvcHVwIG1lbnUgaXNuJ3QgdXNlZC4gKi8KKyAgICBpZiAobWVudV9pc19jaGlsZF9vZl9wb3B1cChtZW51KSAmJiAhbW91c2VfbW9kZWxfcG9wdXAoKSkKKwlyZXR1cm47CisjIGVuZGlmCisKKyMgaWZkZWYgRkVBVF9UT09MQkFSCisgICAgaWYgKG1lbnVfaXNfdG9vbGJhcihwYXJlbnQtPm5hbWUpKQorICAgIHsKKwlXaWRnZXRDbGFzcwl0eXBlOworCVhtU3RyaW5nCXhtcyA9IE5VTEw7ICAgIC8qIGZhbGxiYWNrIGxhYmVsIGlmIHBpeG1hcCBub3QgZm91bmQgKi8KKwlpbnQJCW47CisJQXJnCQlhcmdzWzE4XTsKKworCW4gPSAwOworCWlmIChtZW51X2lzX3NlcGFyYXRvcihtZW51LT5uYW1lKSkKKwl7CisJICAgIGNoYXIJKmNwOworCSAgICBEaW1lbnNpb24Jd2lkOworCisJICAgIC8qCisJICAgICAqIEEgc2VwYXJhdG9yIGhhcyB0aGUgZm9ybWF0ICItc2VwJWRbOiVkXS0iLiBUaGUgb3B0aW9uYWwgOiVkIGlzCisJICAgICAqIGEgd2lkdGggc3BlY2lmaWVyLiBJZiBubyB3aWR0aCBpcyBzcGVjaWZpZWQgdGhlbiB3ZSBjaG9vc2Ugb25lLgorCSAgICAgKi8KKwkgICAgY3AgPSAoY2hhciAqKXZpbV9zdHJjaHIobWVudS0+bmFtZSwgJzonKTsKKwkgICAgaWYgKGNwICE9IE5VTEwpCisJCXdpZCA9IChEaW1lbnNpb24pYXRvaSgrK2NwKTsKKwkgICAgZWxzZQorCQl3aWQgPSA0OworCisjaWYgMAorCSAgICAvKiBXZSBiZXR0ZXIgdXNlIGEgRm9ybVdpZGdldCBoZXJlLCBzaW5jZSBpdCdzIGZhciBtb3JlCisJICAgICAqIGZsZXhpYmxlIGluIHRlcm1zIG9mIHNpemUuICAqLworCSAgICB0eXBlID0geG1Gb3JtV2lkZ2V0Q2xhc3M7CisJICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTndpZHRoLCB3aWQpOyBuKys7CisjZWxzZQorCSAgICB0eXBlID0geG1TZXBhcmF0b3JXaWRnZXRDbGFzczsKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1Od2lkdGgsIHdpZCk7IG4rKzsKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1ObWluV2lkdGgsIHdpZCk7IG4rKzsKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1Ob3JpZW50YXRpb24sIFhtVkVSVElDQUwpOyBuKys7CisJICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTnNlcGFyYXRvclR5cGUsIFhtTk9fTElORSk7IG4rKzsKKyNlbmRpZgorCX0KKwllbHNlCisJeworCSAgICBnZXRfdG9vbGJhcl9waXhtYXAobWVudSwgJm1lbnUtPmltYWdlLCAmbWVudS0+aW1hZ2VfaW5zKTsKKwkgICAgLyogU2V0IHRoZSBsYWJlbCBoZXJlLCBzbyB0aGF0IHdlIGNhbiBzd2l0Y2ggYmV0d2VlbiBpY29ucy90ZXh0CisJICAgICAqIGJ5IGNoYW5naW5nIHRoZSBYbU5sYWJlbFR5cGUgcmVzb3VyY2UuICovCisJICAgIHhtcyA9IFhtU3RyaW5nQ3JlYXRlKChjaGFyICopbWVudS0+ZG5hbWUsIFNUUklOR19UQUcpOworCSAgICBYdFNldEFyZyhhcmdzW25dLCBYbU5sYWJlbFN0cmluZywgeG1zKTsgbisrOworCisjaWZuZGVmIEZFQVRfU1VOX1dPUktTSE9QCisKKwkgICAgLyogV2l0aG91dCBzaGFkb3dzIG9uZSBjYW4ndCBzZW5zZSB3aGF0ZXZlciB0aGUgYnV0dG9uIGhhcyBiZWVuCisJICAgICAqIHByZXNzZWQgb3Igbm90ISBIb3dldmVyIHdlIHdhbid0IHRvIHNhdmUgYSBiaXQgb2Ygc3BhY2UuLi4KKwkgICAgICovCisJICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTmhpZ2hsaWdodFRoaWNrbmVzcywgMCk7IG4rKzsKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1OaGlnaGxpZ2h0T25FbnRlciwgVHJ1ZSk7IG4rKzsKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1ObWFyZ2luV2lkdGgsIDApOyBuKys7CisJICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTm1hcmdpbkhlaWdodCwgMCk7IG4rKzsKKyNlbmRpZgorCSAgICBpZiAobWVudS0+aW1hZ2UgPT0gMCkKKwkgICAgeworCQlYdFNldEFyZyhhcmdzW25dLCBYbU5sYWJlbFR5cGUsIFhtU1RSSU5HKTsgbisrOworCQlYdFNldEFyZyhhcmdzW25dLCBYbU5sYWJlbFBpeG1hcCwgMCk7IG4rKzsKKwkJWHRTZXRBcmcoYXJnc1tuXSwgWG1ObGFiZWxJbnNlbnNpdGl2ZVBpeG1hcCwgMCk7IG4rKzsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJWHRTZXRBcmcoYXJnc1tuXSwgWG1ObGFiZWxQaXhtYXAsIG1lbnUtPmltYWdlKTsgbisrOworCQlYdFNldEFyZyhhcmdzW25dLCBYbU5sYWJlbEluc2Vuc2l0aXZlUGl4bWFwLCBtZW51LT5pbWFnZV9pbnMpOyBuKys7CisJCVh0U2V0QXJnKGFyZ3Nbbl0sIFhtTmxhYmVsVHlwZSwgWG1QSVhNQVApOyBuKys7CisJICAgIH0KKwkgICAgdHlwZSA9IHhtUHVzaEJ1dHRvbldpZGdldENsYXNzOworCSAgICBYdFNldEFyZyhhcmdzW25dLCBYbU53aWR0aCwgODApOyBuKys7CisJfQorCisJWHRTZXRBcmcoYXJnc1tuXSwgWG1OcG9zaXRpb25JbmRleCwgaWR4KTsgbisrOworCWlmIChtZW51LT5pZCA9PSBOVUxMKQorCXsKKwkgICAgbWVudS0+aWQgPSBYdENyZWF0ZU1hbmFnZWRXaWRnZXQoKGNoYXIgKiltZW51LT5kbmFtZSwKKwkJCXR5cGUsIHRvb2xCYXIsIGFyZ3MsIG4pOworCSAgICBpZiAobWVudS0+aWQgIT0gTlVMTCAmJiB0eXBlID09IHhtUHVzaEJ1dHRvbldpZGdldENsYXNzKQorCSAgICB7CisJCVh0QWRkQ2FsbGJhY2sobWVudS0+aWQsCisJCQlYbU5hY3RpdmF0ZUNhbGxiYWNrLCBndWlfeDExX21lbnVfY2IsIG1lbnUpOworCisjIGlmZGVmIEZFQVRfRk9PVEVSCisJCVh0QWRkRXZlbnRIYW5kbGVyKG1lbnUtPmlkLCBFbnRlcldpbmRvd01hc2ssIEZhbHNlLAorCQkJdG9vbGJhcmJ1dHRvbl9lbnRlcl9jYiwgbWVudSk7CisJCVh0QWRkRXZlbnRIYW5kbGVyKG1lbnUtPmlkLCBMZWF2ZVdpbmRvd01hc2ssIEZhbHNlLAorCQkJdG9vbGJhcmJ1dHRvbl9sZWF2ZV9jYiwgbWVudSk7CisjIGVuZGlmCisJICAgIH0KKwl9CisJZWxzZQorCSAgICBYdFNldFZhbHVlcyhtZW51LT5pZCwgYXJncywgbik7CisJaWYgKHhtcyAhPSBOVUxMKQorCSAgICBYbVN0cmluZ0ZyZWUoeG1zKTsKKworI2lmZGVmIEZFQVRfQkVWQUwKKwlndWlfbWNoX21lbnVfc2V0X3RpcChtZW51KTsKKyNlbmRpZgorCisJbWVudS0+cGFyZW50ID0gcGFyZW50OworCW1lbnUtPnN1Ym1lbnVfaWQgPSBOVUxMOworCS8qIFdoZW4gYWRkaW5nIGZpcnN0IGl0ZW0gdG8gdG9vbGJhciBpdCBtaWdodCBoYXZlIHRvIGJlIGVuYWJsZWQgLiovCisJaWYgKCFYdElzTWFuYWdlZChYdFBhcmVudCh0b29sQmFyKSkKKwkJICAgICYmIHZpbV9zdHJjaHIocF9nbywgR09fVE9PTEJBUikgIT0gTlVMTCkKKwkgICAgZ3VpX21jaF9zaG93X3Rvb2xiYXIoVFJVRSk7CisJZ3VpLnRvb2xiYXJfaGVpZ2h0ID0gZ3VpX21jaF9jb21wdXRlX3Rvb2xiYXJfaGVpZ2h0KCk7CisJcmV0dXJuOworICAgIH0gLyogdG9vbGJhciBtZW51IGl0ZW0gKi8KKyMgZW5kaWYKKworICAgIC8qIE5vIHBhcmVudCwgbXVzdCBiZSBhIG5vbi1tZW51YmFyIG1lbnUgKi8KKyAgICBpZiAocGFyZW50LT5zdWJtZW51X2lkID09IChXaWRnZXQpMCkKKwlyZXR1cm47CisKKyAgICBtZW51LT5zdWJtZW51X2lkID0gKFdpZGdldCkwOworCisgICAgLyogQWRkIG1lbnUgc2VwYXJhdG9yICovCisgICAgaWYgKG1lbnVfaXNfc2VwYXJhdG9yKG1lbnUtPm5hbWUpKQorICAgIHsKKwltZW51LT5pZCA9IFh0VmFDcmVhdGVXaWRnZXQoInN1Yk1lbnUiLAorCQl4bVNlcGFyYXRvckdhZGdldENsYXNzLCBwYXJlbnQtPnN1Ym1lbnVfaWQsCisjaWYgKFhtVmVyc2lvbiA+PSAxMDAyKQorCQkvKiBjb3VudCB0aGUgdGVhcm9mZiBpdGVtIChuZWVkZWQgZm9yIExlc3NUaWYpICovCisJCVhtTnBvc2l0aW9uSW5kZXgsIGlkeCArICh0ZWFyb2ZmX3ZhbCA9PSAoaW50KVhtVEVBUl9PRkZfRU5BQkxFRAorCQkJCQkJCQkgICAgID8gMSA6IDApLAorI2VuZGlmCisJCU5VTEwpOworCWd1aV9tb3RpZl9tZW51X2NvbG9ycyhtZW51LT5pZCk7CisJcmV0dXJuOworICAgIH0KKworICAgIGxhYmVsID0gWG1TdHJpbmdDcmVhdGUoKGNoYXIgKiltZW51LT5kbmFtZSwgU1RSSU5HX1RBRyk7CisgICAgaWYgKGxhYmVsID09IE5VTEwpCisJcmV0dXJuOworICAgIG1lbnUtPmlkID0gWHRWYUNyZWF0ZVdpZGdldCgic3ViTWVudSIsCisJeG1QdXNoQnV0dG9uV2lkZ2V0Q2xhc3MsIHBhcmVudC0+c3VibWVudV9pZCwKKwlYbU5sYWJlbFN0cmluZywgbGFiZWwsCisJWG1ObW5lbW9uaWMsIG1lbnUtPm1uZW1vbmljLAorI2lmIChYbVZlcnNpb24gPj0gMTAwMikKKwkvKiBjb3VudCB0aGUgdGVhcm9mZiBpdGVtIChuZWVkZWQgZm9yIExlc3NUaWYpICovCisJWG1OcG9zaXRpb25JbmRleCwgaWR4ICsgKHRlYXJvZmZfdmFsID09IChpbnQpWG1URUFSX09GRl9FTkFCTEVECisJCQkJCQkJCSAgICAgPyAxIDogMCksCisjZW5kaWYKKwlOVUxMKTsKKyAgICBndWlfbW90aWZfbWVudV9jb2xvcnMobWVudS0+aWQpOworICAgIGd1aV9tb3RpZl9tZW51X2ZvbnRsaXN0KG1lbnUtPmlkKTsKKyAgICBYbVN0cmluZ0ZyZWUobGFiZWwpOworCisgICAgaWYgKG1lbnUtPmlkICE9IChXaWRnZXQpMCkKKyAgICB7CisJWHRBZGRDYWxsYmFjayhtZW51LT5pZCwgWG1OYWN0aXZhdGVDYWxsYmFjaywgZ3VpX3gxMV9tZW51X2NiLAorCQkoWHRQb2ludGVyKW1lbnUpOworCS8qIGFkZCBhY2NlbGVyYXRvciB0ZXh0ICovCisJZ3VpX21vdGlmX2FkZF9hY3RleHQobWVudSk7CisgICAgfQorfQorCisjaWYgKFhtVmVyc2lvbiA8PSAxMDAyKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBkZXN0cm95L2NyZWF0ZSB0aGUgcG9wdXAgbWVudXMgZHluYW1pY2FsbHksCisgKiBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mICdtb3VzZW1vZGVsJy4KKyAqIFRoaXMgd2lsbCBmaXggdGhlICJyaWdodCBtb3VzZSBidXR0b24gZnJlZXplIiB0aGF0IG9jY3VycyB3aGVuCisgKiB0aGVyZSBleGlzdHMgYSBwb3B1cCBtZW51IGJ1dCBpdCBpc24ndCBtYW5hZ2VkLgorICovCisgICAgdm9pZAorZ3VpX21vdGlmX3VwZGF0ZV9tb3VzZW1vZGVsKG1lbnUpCisgICAgdmltbWVudV9UCSptZW51OworeworICAgIGludAkJaWR4ID0gMDsKKworICAgIC8qIFdoZW4gR1VJIGhhc24ndCBzdGFydGVkIHRoZSBtZW51cyBoYXZlIG5vdCBiZWVuIGNyZWF0ZWQuICovCisgICAgaWYgKCFndWkuaW5fdXNlKQorICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKG1lbnUpCisgICAgeworICAgICAgaWYgKG1lbnUtPmNoaWxkcmVuICE9IE5VTEwpCisgICAgICB7CisJICBpZiAobWVudV9pc19wb3B1cChtZW51LT5uYW1lKSkKKwkgIHsKKwkgICAgICBpZiAobW91c2VfbW9kZWxfcG9wdXAoKSkKKwkgICAgICB7CisJCSAgLyogUG9wdXAgbWVudSB3aWxsIGJlIHVzZWQuICBDcmVhdGUgdGhlIHBvcHVwIG1lbnVzLiAqLworCQkgIGd1aV9tY2hfYWRkX21lbnUobWVudSwgaWR4KTsKKwkJICBndWlfbW90aWZfdXBkYXRlX21vdXNlbW9kZWwobWVudS0+Y2hpbGRyZW4pOworCSAgICAgIH0KKwkgICAgICBlbHNlCisJICAgICAgeworCQkgIC8qIFBvcHVwIG1lbnUgd2lsbCBub3QgYmUgdXNlZC4gIERlc3Ryb3kgdGhlIHBvcHVwIG1lbnVzLiAqLworCQkgIGd1aV9tb3RpZl91cGRhdGVfbW91c2Vtb2RlbChtZW51LT5jaGlsZHJlbik7CisJCSAgZ3VpX21jaF9kZXN0cm95X21lbnUobWVudSk7CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAobWVudV9pc19jaGlsZF9vZl9wb3B1cChtZW51KSkKKyAgICAgIHsKKwkgIGlmIChtb3VzZV9tb2RlbF9wb3B1cCgpKQorCSAgICAgIGd1aV9tY2hfYWRkX21lbnVfaXRlbShtZW51LCBpZHgpOworCSAgZWxzZQorCSAgICAgIGd1aV9tY2hfZGVzdHJveV9tZW51KG1lbnUpOworICAgICAgfQorICAgICAgbWVudSA9IG1lbnUtPm5leHQ7CisgICAgICArK2lkeDsKKyAgICB9Cit9CisjZW5kaWYKKworICAgIHZvaWQKK2d1aV9tY2hfbmV3X21lbnVfY29sb3JzKCkKK3sKKyAgICBpZiAobWVudUJhciA9PSAoV2lkZ2V0KTApCisJcmV0dXJuOworICAgIGd1aV9tb3RpZl9tZW51X2NvbG9ycyhtZW51QmFyKTsKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICBndWlfbW90aWZfbWVudV9jb2xvcnModG9vbEJhckZyYW1lKTsKKyAgICBndWlfbW90aWZfbWVudV9jb2xvcnModG9vbEJhcik7CisjZW5kaWYKKworICAgIGd1aV9tY2hfc3VibWVudV9jaGFuZ2Uocm9vdF9tZW51LCBUUlVFKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfbmV3X21lbnVfZm9udCgpCit7CisgICAgaWYgKG1lbnVCYXIgPT0gKFdpZGdldCkwKQorCXJldHVybjsKKyAgICBndWlfbWNoX3N1Ym1lbnVfY2hhbmdlKHJvb3RfbWVudSwgRkFMU0UpOworICAgIHsKKwlEaW1lbnNpb24gICBoZWlnaHQ7CisJUG9zaXRpb24gdywgaDsKKworCVh0VmFHZXRWYWx1ZXMobWVudUJhciwgWG1OaGVpZ2h0LCAmaGVpZ2h0LCBOVUxMKTsKKwlndWkubWVudV9oZWlnaHQgPSBoZWlnaHQ7CisKKwlYdFZhR2V0VmFsdWVzKHZpbVNoZWxsLCBYdE53aWR0aCwgJncsIFh0TmhlaWdodCwgJmgsIE5VTEwpOworCWd1aV9yZXNpemVfc2hlbGwodywgaAorI2lmZGVmIEZFQVRfWElNCisJCS0geGltX2dldF9zdGF0dXNfYXJlYV9oZWlnaHQoKQorI2VuZGlmCisJCSAgICAgKTsKKyAgICB9CisgICAgZ3VpX3NldF9zaGVsbHNpemUoRkFMU0UsIFRSVUUpOworICAgIHVpX25ld19zaGVsbHNpemUoKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9CRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKyAgICB2b2lkCitndWlfbWNoX25ld190b29sdGlwX2ZvbnQoKQoreworIyBpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICB2aW1tZW51X1QgICAqbWVudTsKKworICAgIGlmICh0b29sQmFyID09IChXaWRnZXQpMCkKKwlyZXR1cm47CisKKyAgICBtZW51ID0gZ3VpX2ZpbmRfbWVudSgoY2hhcl91ICopIlRvb2xCYXIiKTsKKyAgICBpZiAobWVudSAhPSBOVUxMKQorCWd1aV9tY2hfc3VibWVudV9jaGFuZ2UobWVudSwgRkFMU0UpOworIyBlbmRpZgorfQorCisgICAgdm9pZAorZ3VpX21jaF9uZXdfdG9vbHRpcF9jb2xvcnMoKQoreworIyBpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICB2aW1tZW51X1QgICAqdG9vbGJhcjsKKworICAgIGlmICh0b29sQmFyID09IChXaWRnZXQpMCkKKwlyZXR1cm47CisKKyAgICB0b29sYmFyID0gZ3VpX2ZpbmRfbWVudSgoY2hhcl91ICopIlRvb2xCYXIiKTsKKyAgICBpZiAodG9vbGJhciAhPSBOVUxMKQorCWd1aV9tY2hfc3VibWVudV9jaGFuZ2UodG9vbGJhciwgVFJVRSk7CisjIGVuZGlmCit9CisjZW5kaWYKKworICAgIHN0YXRpYyB2b2lkCitndWlfbWNoX3N1Ym1lbnVfY2hhbmdlKG1lbnUsIGNvbG9ycykKKyAgICB2aW1tZW51X1QJKm1lbnU7CisgICAgaW50CQljb2xvcnM7CQkvKiBUUlVFIGZvciBjb2xvcnMsIEZBTFNFIGZvciBmb250ICovCit7CisgICAgdmltbWVudV9UCSptcDsKKworICAgIGZvciAobXAgPSBtZW51OyBtcCAhPSBOVUxMOyBtcCA9IG1wLT5uZXh0KQorICAgIHsKKwlpZiAobXAtPmlkICE9IChXaWRnZXQpMCkKKwl7CisJICAgIGlmIChjb2xvcnMpCisJICAgIHsKKwkJZ3VpX21vdGlmX21lbnVfY29sb3JzKG1wLT5pZCk7CisjaWZkZWYgRkVBVF9UT09MQkFSCisJCS8qIEZvciBhIHRvb2xiYXIgaXRlbTogRnJlZSB0aGUgcGl4bWFwIGFuZCBhbGxvY2F0ZSBhIG5ldyBvbmUsCisJCSAqIHNvIHRoYXQgdGhlIGJhY2tncm91bmQgY29sb3IgaXMgcmlnaHQuICovCisJCWlmIChtcC0+aW1hZ2UgIT0gKFBpeG1hcCkwKQorCQl7CisJCSAgICBYRnJlZVBpeG1hcChndWkuZHB5LCBtcC0+aW1hZ2UpOworCQkgICAgWEZyZWVQaXhtYXAoZ3VpLmRweSwgbXAtPmltYWdlX2lucyk7CisJCSAgICBnZXRfdG9vbGJhcl9waXhtYXAobXAsICZtcC0+aW1hZ2UsICZtcC0+aW1hZ2VfaW5zKTsKKwkJICAgIGlmIChtcC0+aW1hZ2UgIT0gKFBpeG1hcCkwKQorCQkJWHRWYVNldFZhbHVlcyhtcC0+aWQsCisJCQkJWG1ObGFiZWxQaXhtYXAsIG1wLT5pbWFnZSwKKwkJCQlYbU5sYWJlbEluc2Vuc2l0aXZlUGl4bWFwLCBtcC0+aW1hZ2VfaW5zLAorCQkJCU5VTEwpOworCQl9CisjIGlmZGVmIEZFQVRfQkVWQUwKKwkJLyogSWYgd2UgaGF2ZSBhIHRvb2x0aXAsIHRoZW4gd2UgbmVlZCB0byBjaGFuZ2UgaXQncyBmb250ICovCisJCWlmIChtcC0+dGlwICE9IE5VTEwpCisJCXsKKwkJICAgIEFyZyBhcmdzWzJdOworCisJCSAgICBhcmdzWzBdLm5hbWUgPSBYbU5iYWNrZ3JvdW5kOworCQkgICAgYXJnc1swXS52YWx1ZSA9IGd1aS50b29sdGlwX2JnX3BpeGVsOworCQkgICAgYXJnc1sxXS5uYW1lID0gWG1OZm9yZWdyb3VuZDsKKwkJICAgIGFyZ3NbMV0udmFsdWUgPSBndWkudG9vbHRpcF9mZ19waXhlbDsKKwkJICAgIFh0U2V0VmFsdWVzKG1wLT50aXAtPmJhbGxvb25MYWJlbCwgJmFyZ3NbMF0sIFh0TnVtYmVyKGFyZ3MpKTsKKwkJfQorIyBlbmRpZgorI2VuZGlmCisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWd1aV9tb3RpZl9tZW51X2ZvbnRsaXN0KG1wLT5pZCk7CisjaWZkZWYgRkVBVF9CRVZBTAorCQkvKiBJZiB3ZSBoYXZlIGEgdG9vbHRpcCwgdGhlbiB3ZSBuZWVkIHRvIGNoYW5nZSBpdCdzIGZvbnQgKi8KKwkJaWYgKG1wLT50aXAgIT0gTlVMTCkKKwkJeworCQkgICAgQXJnIGFyZ3NbMV07CisKKwkJICAgIGFyZ3NbMF0ubmFtZSA9IFhtTmZvbnRMaXN0OworCQkgICAgYXJnc1swXS52YWx1ZSA9IChYdEFyZ1ZhbClndWlfbW90aWZfZm9udHNldDJmb250bGlzdCgKKwkJCQkJCSAgICAmZ3VpLnRvb2x0aXBfZm9udHNldCk7CisJCSAgICBYdFNldFZhbHVlcyhtcC0+dGlwLT5iYWxsb29uTGFiZWwsICZhcmdzWzBdLCBYdE51bWJlcihhcmdzKSk7CisJCX0KKyNlbmRpZgorCSAgICB9CisJfQorCisJaWYgKG1wLT5jaGlsZHJlbiAhPSBOVUxMKQorCXsKKyNpZiAoWG1WZXJzaW9uID49IDEwMDIpCisJICAgIC8qIFNldCB0aGUgY29sb3JzL2ZvbnQgZm9yIHRoZSB0ZWFyIG9mZiB3aWRnZXQgKi8KKwkgICAgaWYgKG1wLT5zdWJtZW51X2lkICE9IChXaWRnZXQpMCkKKwkgICAgeworCQlpZiAoY29sb3JzKQorCQkgICAgZ3VpX21vdGlmX21lbnVfY29sb3JzKG1wLT5zdWJtZW51X2lkKTsKKwkJZWxzZQorCQkgICAgZ3VpX21vdGlmX21lbnVfZm9udGxpc3QobXAtPnN1Ym1lbnVfaWQpOworCQl0b2dnbGVfdGVhcm9mZihtcC0+c3VibWVudV9pZCk7CisJICAgIH0KKyNlbmRpZgorCSAgICAvKiBTZXQgdGhlIGNvbG9ycyBmb3IgdGhlIGNoaWxkcmVuICovCisJICAgIGd1aV9tY2hfc3VibWVudV9jaGFuZ2UobXAtPmNoaWxkcmVuLCBjb2xvcnMpOworCX0KKyAgICB9Cit9CisKKy8qCisgKiBEZXN0cm95IHRoZSBtYWNoaW5lIHNwZWNpZmljIG1lbnUgd2lkZ2V0LgorICovCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X21lbnUobWVudSkKKyAgICB2aW1tZW51X1QJKm1lbnU7Cit7CisgICAgLyogUGxlYXNlIGJlIHN1cmUgdG8gZGVzdHJveSB0aGUgcGFyZW50IHdpZGdldCBmaXJzdCAoaS5lLiBtZW51LT5pZCkuCisgICAgICogT24gdGhlIG90aGVyIGhhbmQsIHByb2JsZW1zIGhhdmUgYmVlbiByZXBvcnRlZCB0aGF0IHRoZSBzdWJtZW51IG11c3QgYmUKKyAgICAgKiBkZWxldGVkIGZpcnN0Li4uCisgICAgICoKKyAgICAgKiBUaGlzIGNvZGUgc2hvdWxkIGJlIGJhc2ljYWxseSBpZGVudGljYWwgdG8gdGhhdCBpbiB0aGUgZmlsZSBndWlfYXRoZW5hLmMKKyAgICAgKiBiZWNhdXNlIHRoZXkgYXJlIGJvdGggWHQgYmFzZWQuCisgICAgICovCisgICAgaWYgKG1lbnUtPnN1Ym1lbnVfaWQgIT0gKFdpZGdldCkwKQorICAgIHsKKwlYdERlc3Ryb3lXaWRnZXQobWVudS0+c3VibWVudV9pZCk7CisJbWVudS0+c3VibWVudV9pZCA9IChXaWRnZXQpMDsKKyAgICB9CisKKyAgICBpZiAobWVudS0+aWQgIT0gKFdpZGdldCkwKQorICAgIHsKKwlXaWRnZXQJICAgIHBhcmVudDsKKworCXBhcmVudCA9IFh0UGFyZW50KG1lbnUtPmlkKTsKKyNpZiBkZWZpbmVkKEZFQVRfVE9PTEJBUikgJiYgZGVmaW5lZChGRUFUX0JFVkFMKQorCWlmICgocGFyZW50ID09IHRvb2xCYXIpICYmIChtZW51LT50aXAgIT0gTlVMTCkpCisJeworCSAgICAvKiBXZSB0cnkgdG8gZGVzdHJveSB0aGlzIGJlZm9yZSB0aGUgYWN0dWFsIG1lbnUsIGJlY2F1c2UgdGhlcmUgYXJlCisJICAgICAqIGNhbGxiYWNrcywgZXRjLiB0aGF0IHdpbGwgYmUgdW5yZWdpc3RlcmVkIGR1cmluZyB0aGUgdG9vbHRpcAorCSAgICAgKiBkZXN0cnVjdGlvbi4KKwkgICAgICoKKwkgICAgICogSWYgeW91IGNhbGwgImd1aV9tY2hfZGVzdHJveV9iZXZhbF9hcmVhKCkiIGFmdGVyIGRlc3Ryb3lpbmcKKwkgICAgICogbWVudS0+aWQsIHRoZW4gdGhlIHRvb2x0aXAncyB3aW5kb3cgd2lsbCBoYXZlIGFscmVhZHkgYmVlbgorCSAgICAgKiBkZWFsbG9jYXRlZCBieSBYdCwgYW5kIHVua25vd24gYmVoYXZpb3VyIHdpbGwgZW5zdWUgKHByb2JhYmx5CisJICAgICAqIGEgY29yZSBkdW1wKS4KKwkgICAgICovCisJICAgIGd1aV9tY2hfZGVzdHJveV9iZXZhbF9hcmVhKG1lbnUtPnRpcCk7CisJICAgIG1lbnUtPnRpcCA9IE5VTEw7CisJfQorI2VuZGlmCisJWHREZXN0cm95V2lkZ2V0KG1lbnUtPmlkKTsKKwltZW51LT5pZCA9IChXaWRnZXQpMDsKKwlpZiAocGFyZW50ID09IG1lbnVCYXIpCisJICAgIGd1aV9tY2hfY29tcHV0ZV9tZW51X2hlaWdodCgoV2lkZ2V0KTApOworI2lmZGVmIEZFQVRfVE9PTEJBUgorCWVsc2UgaWYgKHBhcmVudCA9PSB0b29sQmFyKQorCXsKKwkgICAgQ2FyZGluYWwgICAgbnVtX2NoaWxkcmVuOworCisJICAgIC8qIFdoZW4gcmVtb3ZpbmcgbGFzdCB0b29sYmFyIGl0ZW0sIGRvbid0IGRpc3BsYXkgdGhlIHRvb2xiYXIuICovCisJICAgIFh0VmFHZXRWYWx1ZXModG9vbEJhciwgWG1ObnVtQ2hpbGRyZW4sICZudW1fY2hpbGRyZW4sIE5VTEwpOworCSAgICBpZiAobnVtX2NoaWxkcmVuID09IDApCisJCWd1aV9tY2hfc2hvd190b29sYmFyKEZBTFNFKTsKKwkgICAgZWxzZQorCQlndWkudG9vbGJhcl9oZWlnaHQgPSBndWlfbWNoX2NvbXB1dGVfdG9vbGJhcl9oZWlnaHQoKTsKKwl9CisjZW5kaWYKKyAgICB9Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgdm9pZAorZ3VpX21jaF9zaG93X3BvcHVwbWVudShtZW51KQorICAgIHZpbW1lbnVfVCAqbWVudTsKK3sKKyNpZmRlZiBNT1RJRl9QT1BVUAorICAgIFhtTWVudVBvc2l0aW9uKG1lbnUtPnN1Ym1lbnVfaWQsIGd1aV94MTFfZ2V0X2xhc3RfbW91c2VfZXZlbnQoKSk7CisgICAgWHRNYW5hZ2VDaGlsZChtZW51LT5zdWJtZW51X2lkKTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogRkVBVF9NRU5VICovCisKKy8qCisgKiBTZXQgdGhlIG1lbnUgYW5kIHNjcm9sbGJhciBjb2xvcnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RlZl9jb2xvcnMoKQoreworICAgIGlmIChndWkuaW5fdXNlKQorICAgIHsKKwkvKiBVc2UgdGhlIHZhbHVlcyBzYXZlZCB3aGVuIHN0YXJ0aW5nIHVwLiAgVGhlc2Ugc2hvdWxkIGNvbWUgZnJvbSB0aGUKKwkgKiB3aW5kb3cgbWFuYWdlciBvciBhIHJlc291cmNlcyBmaWxlLiAqLworCWd1aS5tZW51X2ZnX3BpeGVsID0gZ3VpLm1lbnVfZGVmX2ZnX3BpeGVsOworCWd1aS5tZW51X2JnX3BpeGVsID0gZ3VpLm1lbnVfZGVmX2JnX3BpeGVsOworCWd1aS5zY3JvbGxfZmdfcGl4ZWwgPSBndWkuc2Nyb2xsX2RlZl9mZ19waXhlbDsKKwlndWkuc2Nyb2xsX2JnX3BpeGVsID0gZ3VpLnNjcm9sbF9kZWZfYmdfcGl4ZWw7CisjaWZkZWYgRkVBVF9CRVZBTAorCWd1aS50b29sdGlwX2ZnX3BpeGVsID0KKwkJCWd1aV9nZXRfY29sb3IoKGNoYXJfdSAqKWd1aS5yc3JjX3Rvb2x0aXBfZmdfbmFtZSk7CisJZ3VpLnRvb2x0aXBfYmdfcGl4ZWwgPQorCQkJZ3VpX2dldF9jb2xvcigoY2hhcl91ICopZ3VpLnJzcmNfdG9vbHRpcF9iZ19uYW1lKTsKKyNlbmRpZgorICAgIH0KK30KKworCisvKgorICogU2Nyb2xsYmFyIHN0dWZmLgorICovCisKKyAgICB2b2lkCitndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIoc2IsIHZhbCwgc2l6ZSwgbWF4KQorICAgIHNjcm9sbGJhcl9UICpzYjsKKyAgICBsb25nCXZhbDsKKyAgICBsb25nCXNpemU7CisgICAgbG9uZwltYXg7Cit7CisgICAgaWYgKHNiLT5pZCAhPSAoV2lkZ2V0KTApCisJWHRWYVNldFZhbHVlcyhzYi0+aWQsCisJCSAgWG1OdmFsdWUsIHZhbCwKKwkJICBYbU5zbGlkZXJTaXplLCBzaXplLAorCQkgIFhtTnBhZ2VJbmNyZW1lbnQsIChzaXplID4gMiA/IHNpemUgLSAyIDogMSksCisJCSAgWG1ObWF4aW11bSwgbWF4ICsgMSwJICAgIC8qIE1vdGlmIGhhcyBtYXggb25lIHBhc3QgdGhlIGVuZCAqLworCQkgIE5VTEwpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3BvcyhzYiwgeCwgeSwgdywgaCkKKyAgICBzY3JvbGxiYXJfVCAqc2I7CisgICAgaW50CQl4OworICAgIGludAkJeTsKKyAgICBpbnQJCXc7CisgICAgaW50CQloOworeworICAgIGlmIChzYi0+aWQgIT0gKFdpZGdldCkwKQorICAgIHsKKwlpZiAoc2ItPnR5cGUgPT0gU0JBUl9MRUZUIHx8IHNiLT50eXBlID09IFNCQVJfUklHSFQpCisJeworCSAgICBpZiAoeSA9PSAwKQorCQloIC09IGd1aS5ib3JkZXJfb2Zmc2V0OworCSAgICBlbHNlCisJCXkgLT0gZ3VpLmJvcmRlcl9vZmZzZXQ7CisJICAgIFh0VmFTZXRWYWx1ZXMoc2ItPmlkLAorCQkJICBYbU50b3BPZmZzZXQsIHksCisJCQkgIFhtTmJvdHRvbU9mZnNldCwgLXkgLSBoLAorCQkJICBYbU53aWR0aCwgdywKKwkJCSAgTlVMTCk7CisJfQorCWVsc2UKKwkgICAgWHRWYVNldFZhbHVlcyhzYi0+aWQsCisJCQkgIFhtTnRvcE9mZnNldCwgeSwKKwkJCSAgWG1ObGVmdE9mZnNldCwgeCwKKwkJCSAgWG1OcmlnaHRPZmZzZXQsIGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfUklHSFRdCisJCQkJCQkgICAgPyBndWkuc2Nyb2xsYmFyX3dpZHRoIDogMCwKKwkJCSAgWG1OaGVpZ2h0LCBoLAorCQkJICBOVUxMKTsKKwlYdE1hbmFnZUNoaWxkKHNiLT5pZCk7CisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX21jaF9lbmFibGVfc2Nyb2xsYmFyKHNiLCBmbGFnKQorICAgIHNjcm9sbGJhcl9UICpzYjsKKyAgICBpbnQJCWZsYWc7Cit7CisgICAgQXJnCQlhcmdzWzE2XTsKKyAgICBpbnQJCW47CisKKyAgICBpZiAoc2ItPmlkICE9IChXaWRnZXQpMCkKKyAgICB7CisJbiA9IDA7CisJaWYgKGZsYWcpCisJeworCSAgICBzd2l0Y2ggKHNiLT50eXBlKQorCSAgICB7CisJCWNhc2UgU0JBUl9MRUZUOgorCQkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1ObGVmdE9mZnNldCwgZ3VpLnNjcm9sbGJhcl93aWR0aCk7IG4rKzsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgU0JBUl9SSUdIVDoKKwkJICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTnJpZ2h0T2Zmc2V0LCBndWkuc2Nyb2xsYmFyX3dpZHRoKTsgbisrOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSBTQkFSX0JPVFRPTToKKwkJICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTmJvdHRvbU9mZnNldCwgZ3VpLnNjcm9sbGJhcl9oZWlnaHQpO24rKzsKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIFh0U2V0VmFsdWVzKHRleHRBcmVhLCBhcmdzLCBuKTsKKwkgICAgWHRNYW5hZ2VDaGlsZChzYi0+aWQpOworCX0KKwllbHNlCisJeworCSAgICBpZiAoIWd1aS53aGljaF9zY3JvbGxiYXJzW3NiLT50eXBlXSkKKwkgICAgeworCQkvKiBUaGUgc2Nyb2xsYmFycyBvZiB0aGlzIHR5cGUgYXJlIGFsbCBkaXNhYmxlZCwgYWRqdXN0IHRoZQorCQkgKiB0ZXh0QXJlYSBhdHRhY2htZW50IG9mZnNldC4gKi8KKwkJc3dpdGNoIChzYi0+dHlwZSkKKwkJeworCQkgICAgY2FzZSBTQkFSX0xFRlQ6CisJCQlYdFNldEFyZyhhcmdzW25dLCBYbU5sZWZ0T2Zmc2V0LCAwKTsgbisrOworCQkJYnJlYWs7CisKKwkJICAgIGNhc2UgU0JBUl9SSUdIVDoKKwkJCVh0U2V0QXJnKGFyZ3Nbbl0sIFhtTnJpZ2h0T2Zmc2V0LCAwKTsgbisrOworCQkJYnJlYWs7CisKKwkJICAgIGNhc2UgU0JBUl9CT1RUT006CisJCQlYdFNldEFyZyhhcmdzW25dLCBYbU5ib3R0b21PZmZzZXQsIDApO24rKzsKKwkJCWJyZWFrOworCQl9CisJCVh0U2V0VmFsdWVzKHRleHRBcmVhLCBhcmdzLCBuKTsKKwkgICAgfQorCSAgICBYdFVubWFuYWdlQ2hpbGQoc2ItPmlkKTsKKwl9CisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX21jaF9jcmVhdGVfc2Nyb2xsYmFyKHNiLCBvcmllbnQpCisgICAgc2Nyb2xsYmFyX1QgKnNiOworICAgIGludAkJb3JpZW50OwkvKiBTQkFSX1ZFUlQgb3IgU0JBUl9IT1JJWiAqLworeworICAgIEFyZwkJYXJnc1sxNl07CisgICAgaW50CQluOworCisgICAgbiA9IDA7CisgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1Oc2hhZG93VGhpY2tuZXNzLCAxKTsgbisrOworICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTm1pbmltdW0sIDApOyBuKys7CisgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1Ob3JpZW50YXRpb24sCisJICAgIChvcmllbnQgPT0gU0JBUl9WRVJUKSA/IFhtVkVSVElDQUwgOiBYbUhPUklaT05UQUwpOyBuKys7CisKKyAgICBzd2l0Y2ggKHNiLT50eXBlKQorICAgIHsKKwljYXNlIFNCQVJfTEVGVDoKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSk7IG4rKzsKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1OYm90dG9tQXR0YWNobWVudCwgWG1BVFRBQ0hfT1BQT1NJVEVfRk9STSk7IG4rKzsKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0pOyBuKys7CisJICAgIGJyZWFrOworCisJY2FzZSBTQkFSX1JJR0hUOgorCSAgICBYdFNldEFyZyhhcmdzW25dLCBYbU50b3BBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNKTsgbisrOworCSAgICBYdFNldEFyZyhhcmdzW25dLCBYbU5ib3R0b21BdHRhY2htZW50LCBYbUFUVEFDSF9PUFBPU0lURV9GT1JNKTsgbisrOworCSAgICBYdFNldEFyZyhhcmdzW25dLCBYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0pOyBuKys7CisJICAgIGJyZWFrOworCisJY2FzZSBTQkFSX0JPVFRPTToKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0pOyBuKys7CisJICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSk7IG4rKzsKKwkgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1OYm90dG9tQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSk7IG4rKzsKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgc2ItPmlkID0gWHRDcmVhdGVXaWRnZXQoInNjcm9sbEJhciIsCisJICAgIHhtU2Nyb2xsQmFyV2lkZ2V0Q2xhc3MsIHRleHRBcmVhRm9ybSwgYXJncywgbik7CisKKyAgICAvKiBSZW1lbWJlciB0aGUgZGVmYXVsdCBjb2xvcnMsIG5lZWRlZCBmb3IgIjpoaSBjbGVhciIuICovCisgICAgaWYgKGd1aS5zY3JvbGxfZGVmX2JnX3BpeGVsID09IChndWljb2xvcl9UKTAKKwkgICAgJiYgZ3VpLnNjcm9sbF9kZWZfZmdfcGl4ZWwgPT0gKGd1aWNvbG9yX1QpMCkKKwlYdFZhR2V0VmFsdWVzKHNiLT5pZCwKKwkJWG1OYmFja2dyb3VuZCwgJmd1aS5zY3JvbGxfZGVmX2JnX3BpeGVsLAorCQlYbU5mb3JlZ3JvdW5kLCAmZ3VpLnNjcm9sbF9kZWZfZmdfcGl4ZWwsCisJCU5VTEwpOworCisgICAgaWYgKHNiLT5pZCAhPSAoV2lkZ2V0KTApCisgICAgeworCWd1aV9tY2hfc2V0X3Njcm9sbGJhcl9jb2xvcnMoc2IpOworCVh0QWRkQ2FsbGJhY2soc2ItPmlkLCBYbU52YWx1ZUNoYW5nZWRDYWxsYmFjaywKKwkJICAgICAgc2Nyb2xsX2NiLCAoWHRQb2ludGVyKXNiLT5pZGVudCk7CisJWHRBZGRDYWxsYmFjayhzYi0+aWQsIFhtTmRyYWdDYWxsYmFjaywKKwkJICAgICAgc2Nyb2xsX2NiLCAoWHRQb2ludGVyKXNiLT5pZGVudCk7CisJWHRBZGRFdmVudEhhbmRsZXIoc2ItPmlkLCBLZXlQcmVzc01hc2ssIEZBTFNFLCBndWlfeDExX2tleV9oaXRfY2IsCisJICAgIChYdFBvaW50ZXIpMCk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X3Njcm9sbGJhcihzYikKKyAgICBzY3JvbGxiYXJfVCAqc2I7Cit7CisgICAgaWYgKHNiLT5pZCAhPSAoV2lkZ2V0KTApCisJWHREZXN0cm95V2lkZ2V0KHNiLT5pZCk7Cit9CisjZW5kaWYKKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3Njcm9sbGJhcl9jb2xvcnMoc2IpCisgICAgc2Nyb2xsYmFyX1QgKnNiOworeworICAgIGlmIChzYi0+aWQgIT0gKFdpZGdldCkwKQorICAgIHsKKwlpZiAoZ3VpLnNjcm9sbF9iZ19waXhlbCAhPSBJTlZBTENPTE9SKQorCXsKKyNpZiAoWG1WZXJzaW9uPj0xMDAyKQorCSAgICBYbUNoYW5nZUNvbG9yKHNiLT5pZCwgZ3VpLnNjcm9sbF9iZ19waXhlbCk7CisjZWxzZQorCSAgICBYdFZhU2V0VmFsdWVzKHNiLT5pZCwKKwkJICAgIFhtTnRyb3VnaENvbG9yLCBndWkuc2Nyb2xsX2JnX3BpeGVsLAorCQkgICAgTlVMTCk7CisjZW5kaWYKKwl9CisKKwlpZiAoZ3VpLnNjcm9sbF9mZ19waXhlbCAhPSBJTlZBTENPTE9SKQorCSAgICBYdFZhU2V0VmFsdWVzKHNiLT5pZCwKKwkJICAgIFhtTmZvcmVncm91bmQsIGd1aS5zY3JvbGxfZmdfcGl4ZWwsCisjaWYgKFhtVmVyc2lvbjwxMDAyKQorCQkgICAgWG1OYmFja2dyb3VuZCwgZ3VpLnNjcm9sbF9mZ19waXhlbCwKKyNlbmRpZgorCQkgICAgTlVMTCk7CisgICAgfQorCisgICAgLyogVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSByZWN0YW5nbGUgYmVsb3cgdGhlIHZlcnRpY2FsIHNjcm9sbGJhcnMuICovCisgICAgaWYgKHNiID09ICZndWkuYm90dG9tX3NiYXIgJiYgdGV4dEFyZWFGb3JtICE9IChXaWRnZXQpMCkKKwlndWlfbW90aWZfc2Nyb2xsX2NvbG9ycyh0ZXh0QXJlYUZvcm0pOworfQorCisvKgorICogTWlzY2VsbGFuZW91cyBzdHVmZjoKKyAqLworCisgICAgV2luZG93CitndWlfeDExX2dldF93aWQoKQoreworICAgIHJldHVybihYdFdpbmRvdyh0ZXh0QXJlYSkpOworfQorCisKKyNpZiBkZWZpbmVkKEZFQVRfQlJPV1NFKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogZmlsZSBzZWxlY3RvciByZWxhdGVkIHN0dWZmCisgKi8KKworI2luY2x1ZGUgPFhtL0ZpbGVTQi5oPgorI2luY2x1ZGUgPFhtL1htU3RyRGVmcy5oPgorCit0eXBlZGVmIHN0cnVjdCBkaWFsb2dfY2FsbGJhY2tfYXJnCit7CisgICAgY2hhciAqICBhcmdzOyAgIC8qIG5vdCB1c2VkIHJpZ2h0IG5vdyAqLworICAgIGludAkgICAgaWQ7Cit9IGRjYmFyZ19UOworCitzdGF0aWMgV2lkZ2V0IGRpYWxvZ193Z3Q7CitzdGF0aWMgY2hhciAqYnJvd3NlX2ZuYW1lID0gTlVMTDsKK3N0YXRpYyBYbVN0cmluZ0NoYXJTZXQgY2hhcnNldCA9IChYbVN0cmluZ0NoYXJTZXQpIFhtU1RSSU5HX0RFRkFVTFRfQ0hBUlNFVDsKKwkJCQkvKiB1c2VkIHRvIHNldCB1cCBYbVN0cmluZ3MgKi8KKworc3RhdGljIHZvaWQgRGlhbG9nQ2FuY2VsQ0IgX19BUkdTKChXaWRnZXQsIFh0UG9pbnRlciwgWHRQb2ludGVyKSk7CitzdGF0aWMgdm9pZCBEaWFsb2dBY2NlcHRDQiBfX0FSR1MoKFdpZGdldCwgWHRQb2ludGVyLCBYdFBvaW50ZXIpKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0cmFuc2xhdGUgdGhlIHByZWRlZmluZWQgbGFiZWwgdGV4dCBvZiB0aGUKKyAqIHByZWNvbXBvc2VkIGRpYWxvZ3MuIFdlIGRvIHRoaXMgZXhwbGljaXRseSB0byBhbGxvdzoKKyAqCisgKiAtIHVzYWdlIG9mIGdldHRleHQgZm9yIHRyYW5zbGF0aW9uLCBhcyBpbiBhbGwgdGhlIG90aGVyIHBsYWNlcy4KKyAqCisgKiAtIGVxdWFsaXplIHRoZSBtZXNzYWdlcyBiZXR3ZWVuIGRpZmZlcmVudCBHVUkgaW1wbGVtZW50YXRpb25zIGFzIGZhciBhcworICogcG9zc2libGUuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9wcmVkZWZpbmVkX2xhYmVsIF9fQVJHUygoV2lkZ2V0IHBhcmVudCwgU3RyaW5nIG5hbWUsIGNoYXIgKiBuZXdfbGFiZWwpKTsKKworc3RhdGljIHZvaWQKK3NldF9wcmVkZWZpbmVkX2xhYmVsKHBhcmVudCwgbmFtZSwgbmV3X2xhYmVsKQorICAgIFdpZGdldCBwYXJlbnQ7CisgICAgU3RyaW5nIG5hbWU7CisgICAgY2hhciAqIG5ld19sYWJlbDsKK3sKKyAgICBYbVN0cmluZyBzdHI7CisgICAgV2lkZ2V0IHc7CisKKyAgICB3ID0gWHROYW1lVG9XaWRnZXQocGFyZW50LCBuYW1lKTsKKworICAgIGlmICghdykKKwlyZXR1cm47CisKKyAgICBzdHIgPSBYbVN0cmluZ0NyZWF0ZShuZXdfbGFiZWwsIFNUUklOR19UQUcpOworCisgICAgaWYgKHN0cikKKyAgICB7CisJWHRWYVNldFZhbHVlcyh3LCBYbU5sYWJlbFN0cmluZywgc3RyLCBOVUxMKTsKKwlYbVN0cmluZ0ZyZWUoc3RyKTsKKyAgICB9Cit9CisKKy8qCisgKiBQdXQgdXAgYSBmaWxlIHJlcXVlc3Rlci4KKyAqIFJldHVybnMgdGhlIHNlbGVjdGVkIG5hbWUgaW4gYWxsb2NhdGVkIG1lbW9yeSwgb3IgTlVMTCBmb3IgQ2FuY2VsLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIGNoYXJfdSAqCitndWlfbWNoX2Jyb3dzZShzYXZpbmcsIHRpdGxlLCBkZmx0LCBleHQsIGluaXRkaXIsIGZpbHRlcikKKyAgICBpbnQJCXNhdmluZzsJCS8qIHNlbGVjdCBmaWxlIHRvIHdyaXRlICovCisgICAgY2hhcl91CSp0aXRsZTsJCS8qIHRpdGxlIGZvciB0aGUgd2luZG93ICovCisgICAgY2hhcl91CSpkZmx0OwkJLyogZGVmYXVsdCBuYW1lICovCisgICAgY2hhcl91CSpleHQ7CQkvKiBub3QgdXNlZCAoZXh0ZW5zaW9uIGFkZGVkKSAqLworICAgIGNoYXJfdQkqaW5pdGRpcjsJLyogaW5pdGlhbCBkaXJlY3RvcnksIE5VTEwgZm9yIGN1cnJlbnQgZGlyICovCisgICAgY2hhcl91CSpmaWx0ZXI7CS8qIGZpbGUgbmFtZSBmaWx0ZXIgKi8KK3sKKyAgICBjaGFyX3UJZGlyYnVmW01BWFBBVEhMXTsKKyAgICBjaGFyX3UJZGZsdGJ1ZltNQVhQQVRITF07CisgICAgY2hhcl91CSpwYXR0ZXJuOworICAgIGNoYXJfdQkqdG9mcmVlID0gTlVMTDsKKworICAgIGRpYWxvZ193Z3QgPSBYbUNyZWF0ZUZpbGVTZWxlY3Rpb25EaWFsb2codmltU2hlbGwsIChjaGFyICopdGl0bGUsIE5VTEwsIDApOworCisgICAgaWYgKGluaXRkaXIgPT0gTlVMTCB8fCAqaW5pdGRpciA9PSBOVUwpCisgICAgeworCW1jaF9kaXJuYW1lKGRpcmJ1ZiwgTUFYUEFUSEwpOworCWluaXRkaXIgPSBkaXJidWY7CisgICAgfQorCisgICAgaWYgKGRmbHQgPT0gTlVMTCkKKwlkZmx0ID0gKGNoYXJfdSAqKSIiOworICAgIGVsc2UgaWYgKFNUUkxFTihpbml0ZGlyKSArIFNUUkxFTihkZmx0KSArIDIgPCBNQVhQQVRITCkKKyAgICB7CisJLyogVGhlIGRlZmF1bHQgc2VsZWN0aW9uIHNob3VsZCBiZSB0aGUgZnVsbCBwYXRoLCAiZGZsdCIgaXMgb25seSB0aGUKKwkgKiBmaWxlIG5hbWUuICovCisJU1RSQ1BZKGRmbHRidWYsIGluaXRkaXIpOworCWFkZF9wYXRoc2VwKGRmbHRidWYpOworCVNUUkNBVChkZmx0YnVmLCBkZmx0KTsKKwlkZmx0ID0gZGZsdGJ1ZjsKKyAgICB9CisKKyAgICAvKiBDYW4gb25seSB1c2Ugb25lIHBhdHRlcm4gZm9yIGEgZmlsZSBuYW1lLiAgR2V0IHRoZSBmaXJzdCBwYXR0ZXJuIG91dCBvZgorICAgICAqIHRoZSBmaWx0ZXIuICBBbiBlbXB0eSBwYXR0ZXJuIG1lYW5zIGV2ZXJ5dGhpbmcgbWF0Y2hlcy4gKi8KKyAgICBpZiAoZmlsdGVyID09IE5VTEwpCisJcGF0dGVybiA9IChjaGFyX3UgKikiIjsKKyAgICBlbHNlCisgICAgeworCWNoYXJfdQkqcywgKnA7CisKKwlzID0gZmlsdGVyOworCWZvciAocCA9IGZpbHRlcjsgKnAgIT0gTlVMOyArK3ApCisJeworCSAgICBpZiAoKnAgPT0gJ1x0JykJLyogZW5kIG9mIGRlc2NyaXB0aW9uLCBzdGFydCBvZiBwYXR0ZXJuICovCisJCXMgPSBwICsgMTsKKwkgICAgaWYgKCpwID09ICc7JyB8fCAqcCA9PSAnXG4nKQkvKiBlbmQgb2YgKGZpcnN0KSBwYXR0ZXJuICovCisJCWJyZWFrOworCX0KKwlwYXR0ZXJuID0gdmltX3N0cm5zYXZlKHMsIHAgLSBzKTsKKwl0b2ZyZWUgPSBwYXR0ZXJuOworCWlmIChwYXR0ZXJuID09IE5VTEwpCisJICAgIHBhdHRlcm4gPSAoY2hhcl91ICopIiI7CisgICAgfQorCisgICAgWHRWYVNldFZhbHVlcyhkaWFsb2dfd2d0LAorCVh0VmFUeXBlZEFyZywKKwkgICAgWG1OZGlyZWN0b3J5LCBYbVJTdHJpbmcsIChjaGFyICopaW5pdGRpciwgU1RSTEVOKGluaXRkaXIpICsgMSwKKwlYdFZhVHlwZWRBcmcsCisJICAgIFhtTmRpclNwZWMsCVhtUlN0cmluZywgKGNoYXIgKilkZmx0LCBTVFJMRU4oZGZsdCkgKyAxLAorCVh0VmFUeXBlZEFyZywKKwkgICAgWG1OcGF0dGVybiwJWG1SU3RyaW5nLCAoY2hhciAqKXBhdHRlcm4sIFNUUkxFTihwYXR0ZXJuKSArIDEsCisJWHRWYVR5cGVkQXJnLAorCSAgICBYbU5kaWFsb2dUaXRsZSwgWG1SU3RyaW5nLCAoY2hhciAqKXRpdGxlLCBTVFJMRU4odGl0bGUpICsgMSwKKwlOVUxMKTsKKworICAgIHNldF9wcmVkZWZpbmVkX2xhYmVsKGRpYWxvZ193Z3QsICJBcHBseSIsIF8oIkZpbHRlciIpKTsKKyAgICBzZXRfcHJlZGVmaW5lZF9sYWJlbChkaWFsb2dfd2d0LCAiQ2FuY2VsIiwgXygiQ2FuY2VsIikpOworICAgIHNldF9wcmVkZWZpbmVkX2xhYmVsKGRpYWxvZ193Z3QsICJEaXIiLCBfKCJEaXJlY3RvcmllcyIpKTsKKyAgICBzZXRfcHJlZGVmaW5lZF9sYWJlbChkaWFsb2dfd2d0LCAiRmlsdGVyTGFiZWwiLCBfKCJGaWx0ZXIiKSk7CisgICAgc2V0X3ByZWRlZmluZWRfbGFiZWwoZGlhbG9nX3dndCwgIkhlbHAiLCBfKCJIZWxwIikpOworICAgIHNldF9wcmVkZWZpbmVkX2xhYmVsKGRpYWxvZ193Z3QsICJJdGVtcyIsIF8oIkZpbGVzIikpOworICAgIHNldF9wcmVkZWZpbmVkX2xhYmVsKGRpYWxvZ193Z3QsICJPSyIsIF8oIk9LIikpOworICAgIHNldF9wcmVkZWZpbmVkX2xhYmVsKGRpYWxvZ193Z3QsICJTZWxlY3Rpb24iLCBfKCJTZWxlY3Rpb24iKSk7CisKKyAgICBndWlfbW90aWZfbWVudV9jb2xvcnMoZGlhbG9nX3dndCk7CisgICAgaWYgKGd1aS5zY3JvbGxfYmdfcGl4ZWwgIT0gSU5WQUxDT0xPUikKKwlYdFZhU2V0VmFsdWVzKGRpYWxvZ193Z3QsIFhtTnRyb3VnaENvbG9yLCBndWkuc2Nyb2xsX2JnX3BpeGVsLCBOVUxMKTsKKworICAgIFh0QWRkQ2FsbGJhY2soZGlhbG9nX3dndCwgWG1Ob2tDYWxsYmFjaywgRGlhbG9nQWNjZXB0Q0IsIChYdFBvaW50ZXIpMCk7CisgICAgWHRBZGRDYWxsYmFjayhkaWFsb2dfd2d0LCBYbU5jYW5jZWxDYWxsYmFjaywgRGlhbG9nQ2FuY2VsQ0IsIChYdFBvaW50ZXIpMCk7CisgICAgLyogV2UgaGF2ZSBubyBoZWxwIGluIHRoaXMgd2luZG93LCBzbyBoaWRlIGhlbHAgYnV0dG9uICovCisgICAgWHRVbm1hbmFnZUNoaWxkKFhtRmlsZVNlbGVjdGlvbkJveEdldENoaWxkKGRpYWxvZ193Z3QsCisJCQkJCSh1bnNpZ25lZCBjaGFyKVhtRElBTE9HX0hFTFBfQlVUVE9OKSk7CisKKyAgICBtYW5hZ2VfY2VudGVyZWQoZGlhbG9nX3dndCk7CisKKyAgICAvKiBzaXQgaW4gYSBsb29wIHVudGlsIHRoZSBkaWFsb2cgYm94IGhhcyBnb25lIGF3YXkgKi8KKyAgICBkbworICAgIHsKKwlYdEFwcFByb2Nlc3NFdmVudChYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KGRpYWxvZ193Z3QpLAorCSAgICAoWHRJbnB1dE1hc2spWHRJTUFsbCk7CisgICAgfSB3aGlsZSAoWHRJc01hbmFnZWQoZGlhbG9nX3dndCkpOworCisgICAgWHREZXN0cm95V2lkZ2V0KGRpYWxvZ193Z3QpOworICAgIHZpbV9mcmVlKHRvZnJlZSk7CisKKyAgICBpZiAoYnJvd3NlX2ZuYW1lID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHZpbV9zdHJzYXZlKChjaGFyX3UgKilicm93c2VfZm5hbWUpOworfQorCisvKgorICogVGhlIGNvZGUgYmVsb3cgd2FzIG9yaWdpbmFsbHkgdGFrZW4gZnJvbQorICoJL3Vzci9leGFtcGxlcy9tb3RpZi94bXNhbXBsZXJzL3htZWRpdG9yLmMKKyAqIG9uIERpZ2l0YWwgVW5peCA0LjBkLCBidXQgaGVhdmlseSBtb2RpZmllZC4KKyAqLworCisvKgorICogUHJvY2VzcyBjYWxsYmFjayBmcm9tIERpYWxvZyBjYW5jZWwgYWN0aW9ucy4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorRGlhbG9nQ2FuY2VsQ0IodywgY2xpZW50X2RhdGEsIGNhbGxfZGF0YSkKKyAgICBXaWRnZXQJdzsJCS8qICB3aWRnZXQgaWQJCSovCisgICAgWHRQb2ludGVyCWNsaWVudF9kYXRhOwkvKiAgZGF0YSBmcm9tIGFwcGxpY2F0aW9uICAgKi8KKyAgICBYdFBvaW50ZXIJY2FsbF9kYXRhOwkvKiAgZGF0YSBmcm9tIHdpZGdldCBjbGFzcyAgKi8KK3sKKyAgICBpZiAoYnJvd3NlX2ZuYW1lICE9IE5VTEwpCisgICAgeworCVh0RnJlZShicm93c2VfZm5hbWUpOworCWJyb3dzZV9mbmFtZSA9IE5VTEw7CisgICAgfQorICAgIFh0VW5tYW5hZ2VDaGlsZChkaWFsb2dfd2d0KTsKK30KKworLyoKKyAqIFByb2Nlc3MgY2FsbGJhY2sgZnJvbSBEaWFsb2cgYWN0aW9ucy4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorRGlhbG9nQWNjZXB0Q0IodywgY2xpZW50X2RhdGEsIGNhbGxfZGF0YSkKKyAgICBXaWRnZXQJdzsJCS8qICB3aWRnZXQgaWQJCSovCisgICAgWHRQb2ludGVyCWNsaWVudF9kYXRhOwkvKiAgZGF0YSBmcm9tIGFwcGxpY2F0aW9uICAgKi8KKyAgICBYdFBvaW50ZXIJY2FsbF9kYXRhOwkvKiAgZGF0YSBmcm9tIHdpZGdldCBjbGFzcyAgKi8KK3sKKyAgICBYbUZpbGVTZWxlY3Rpb25Cb3hDYWxsYmFja1N0cnVjdCAqZmNiOworCisgICAgaWYgKGJyb3dzZV9mbmFtZSAhPSBOVUxMKQorICAgIHsKKwlYdEZyZWUoYnJvd3NlX2ZuYW1lKTsKKwlicm93c2VfZm5hbWUgPSBOVUxMOworICAgIH0KKyAgICBmY2IgPSAoWG1GaWxlU2VsZWN0aW9uQm94Q2FsbGJhY2tTdHJ1Y3QgKiljYWxsX2RhdGE7CisKKyAgICAvKiBnZXQgdGhlIGZpbGVuYW1lIGZyb20gdGhlIGZpbGUgc2VsZWN0aW9uIGJveCAqLworICAgIFhtU3RyaW5nR2V0THRvUihmY2ItPnZhbHVlLCBjaGFyc2V0LCAmYnJvd3NlX2ZuYW1lKTsKKworICAgIC8qIHBvcGRvd24gdGhlIGZpbGUgc2VsZWN0aW9uIGJveCAqLworICAgIFh0VW5tYW5hZ2VDaGlsZChkaWFsb2dfd2d0KTsKK30KKworI2VuZGlmIC8qIEZFQVRfQlJPV1NFICovCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChQUk9UTykKKworc3RhdGljIGludAlkaWFsb2dTdGF0dXM7CisKK3N0YXRpYyB2b2lkIGtleWhpdF9jYWxsYmFjayBfX0FSR1MoKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKmNvbnQpKTsKK3N0YXRpYyB2b2lkIGJ1dHByb2MgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKSk7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIHRleHRmaWVsZC4gIFdoZW4gQ1IgaXMgaGl0IHRoaXMgd29ya3MgbGlrZQorICogaGl0dGluZyB0aGUgIk9LIiBidXR0b24sIEVTQyBsaWtlICJDYW5jZWwiLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitrZXloaXRfY2FsbGJhY2sodywgY2xpZW50X2RhdGEsIGV2ZW50LCBjb250KQorICAgIFdpZGdldAkJdzsKKyAgICBYdFBvaW50ZXIJCWNsaWVudF9kYXRhOworICAgIFhFdmVudAkJKmV2ZW50OworICAgIEJvb2xlYW4JCSpjb250OworeworICAgIGNoYXIJYnVmWzJdOworICAgIEtleVN5bQlrZXlfc3ltOworCisgICAgaWYgKFhMb29rdXBTdHJpbmcoJihldmVudC0+eGtleSksIGJ1ZiwgMiwgJmtleV9zeW0sIE5VTEwpID09IDEpCisgICAgeworCWlmICgqYnVmID09IENBUikKKwkgICAgZGlhbG9nU3RhdHVzID0gMTsKKwllbHNlIGlmICgqYnVmID09IEVTQykKKwkgICAgZGlhbG9nU3RhdHVzID0gMjsKKyAgICB9CisgICAgaWYgKChrZXlfc3ltID09IFhLX0xlZnQgfHwga2V5X3N5bSA9PSBYS19SaWdodCkKKwkgICAgJiYgIShldmVudC0+eGtleS5zdGF0ZSAmIFNoaWZ0TWFzaykpCisJWG1UZXh0RmllbGRDbGVhclNlbGVjdGlvbih3LCBYdExhc3RUaW1lc3RhbXBQcm9jZXNzZWQoZ3VpLmRweSkpOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitidXRwcm9jKHcsIGNsaWVudF9kYXRhLCBjYWxsX2RhdGEpCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCWNsaWVudF9kYXRhOworICAgIFh0UG9pbnRlcgljYWxsX2RhdGE7Cit7CisgICAgZGlhbG9nU3RhdHVzID0gKGludCkobG9uZyljbGllbnRfZGF0YSArIDE7Cit9CisKK3N0YXRpYyB2b2lkIGd1aV9tb3RpZl9zZXRfZm9udGxpc3QgX19BUkdTKChXaWRnZXQgd2cpKTsKKworLyoKKyAqIFVzZSB0aGUgJ2d1aWZvbnQnIG9yICdndWlmb250c2V0JyBhcyBhIGZvbnRsaXN0IGZvciBhIGRpYWxvZyB3aWRnZXQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX21vdGlmX3NldF9mb250bGlzdCh3ZykKKyAgICBXaWRnZXQgd2c7Cit7CisgICAgWG1Gb250TGlzdCBmbDsKKworICAgIGZsID0KKyNpZmRlZiBGRUFUX1hGT05UU0VUCisJICAgIGd1aS5mb250c2V0ICE9IE5PRk9OVFNFVCA/CisJCSAgICBndWlfbW90aWZfZm9udHNldDJmb250bGlzdCgoWEZvbnRTZXQgKikmZ3VpLmZvbnRzZXQpCisJCQkJICAgICA6CisjZW5kaWYKKwkJICAgIGd1aV9tb3RpZl9jcmVhdGVfZm9udGxpc3QoKFhGb250U3RydWN0ICopZ3VpLm5vcm1fZm9udCk7CisgICAgaWYgKGZsICE9IE5VTEwpCisgICAgeworCVh0VmFTZXRWYWx1ZXMod2csIFhtTmZvbnRMaXN0LCBmbCwgTlVMTCk7CisJWG1Gb250TGlzdEZyZWUoZmwpOworICAgIH0KK30KKworI2lmZGVmIEhBVkVfWFBNCisKK3N0YXRpYyBXaWRnZXQgY3JlYXRlX3BpeG1hcF9sYWJlbChXaWRnZXQgcGFyZW50LCBTdHJpbmcgbmFtZSwgY2hhciAqKmRhdGEsIEFyZ0xpc3QgYXJncywgQ2FyZGluYWwgYXJnKTsKKworICAgIHN0YXRpYyBXaWRnZXQKK2NyZWF0ZV9waXhtYXBfbGFiZWwocGFyZW50LCBuYW1lLCBkYXRhLCBhcmdzLCBhcmcpCisgICAgV2lkZ2V0CXBhcmVudDsKKyAgICBTdHJpbmcJbmFtZTsKKyAgICBjaGFyCSoqZGF0YTsKKyAgICBBcmdMaXN0CWFyZ3M7CisgICAgQ2FyZGluYWwJYXJnOworeworICAgIFdpZGdldAkJbGFiZWw7CisgICAgRGlzcGxheQkJKmRzcDsKKyAgICBTY3JlZW4JCSpzY3I7CisgICAgaW50CQkJZGVwdGg7CisgICAgUGl4bWFwCQlwaXhtYXAgPSAwOworICAgIFhwbUF0dHJpYnV0ZXMJYXR0cjsKKyAgICBCb29sZWFuCQlyczsKKyAgICBYcG1Db2xvclN5bWJvbAljb2xvcls1XSA9CisgICAgeworCXsibm9uZSIsIE5VTEwsIDB9LAorCXsiaWNvbkNvbG9yMSIsIE5VTEwsIDB9LAorCXsiYm90dG9tU2hhZG93Q29sb3IiLCBOVUxMLCAwfSwKKwl7InRvcFNoYWRvd0NvbG9yIiwgTlVMTCwgMH0sCisJeyJzZWxlY3RDb2xvciIsIE5VTEwsIDB9CisgICAgfTsKKworICAgIGxhYmVsID0gWG1DcmVhdGVMYWJlbEdhZGdldChwYXJlbnQsIG5hbWUsIGFyZ3MsIGFyZyk7CisKKyAgICAvKgorICAgICAqIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bGwgaGVyZSwgc2luY2UgaW4gY2FzZSBvZiBnYWRnZXRzLCB0aGVyZSBpcworICAgICAqIG5vIHdheSB0byBnZXQgdGhlIGJhY2tncm91bmQgY29sb3IgZGlyZWN0bHkgZnJvbSB0aGUgd2lkZ2V0IGl0c2VsZi4KKyAgICAgKiBJbiBzdWNoIGNhc2VzIHdlIGdldCBpdCBmcm9tIFRoZSBDb3JlIHBhcnQgb2YgaGlzIHBhcmVudCBpbnN0ZWFkLgorICAgICAqLworICAgIGRzcCA9IFh0RGlzcGxheU9mT2JqZWN0KGxhYmVsKTsKKyAgICBzY3IgPSBYdFNjcmVlbk9mT2JqZWN0KGxhYmVsKTsKKyAgICBYdFZhR2V0VmFsdWVzKFh0SXNTdWJjbGFzcyhsYWJlbCwgY29yZVdpZGdldENsYXNzKQorCSAgICA/ICBsYWJlbCA6IFh0UGFyZW50KGxhYmVsKSwKKwkJICBYbU5kZXB0aCwgJmRlcHRoLAorCQkgIFhtTmJhY2tncm91bmQsICZjb2xvclswXS5waXhlbCwKKwkJICBYbU5mb3JlZ3JvdW5kLCAmY29sb3JbMV0ucGl4ZWwsCisJCSAgWG1OYm90dG9tU2hhZG93Q29sb3IsICZjb2xvclsyXS5waXhlbCwKKwkJICBYbU50b3BTaGFkb3dDb2xvciwgJmNvbG9yWzNdLnBpeGVsLAorCQkgIFhtTmhpZ2hsaWdodCwgJmNvbG9yWzRdLnBpeGVsLAorCQkgIE5VTEwpOworCisgICAgYXR0ci52YWx1ZW1hc2sgPSBYcG1Db2xvclN5bWJvbHMgfCBYcG1DbG9zZW5lc3MgfCBYcG1EZXB0aDsKKyAgICBhdHRyLmNvbG9yc3ltYm9scyA9IGNvbG9yOworICAgIGF0dHIubnVtc3ltYm9scyA9IDU7CisgICAgYXR0ci5jbG9zZW5lc3MgPSA2NTUzNTsKKyAgICBhdHRyLmRlcHRoID0gZGVwdGg7CisgICAgWHBtQ3JlYXRlUGl4bWFwRnJvbURhdGEoZHNwLCBSb290V2luZG93T2ZTY3JlZW4oc2NyKSwKKwkJICAgIGRhdGEsICZwaXhtYXAsIE5VTEwsICZhdHRyKTsKKworICAgIFh0VmFHZXRWYWx1ZXMobGFiZWwsIFhtTnJlY29tcHV0ZVNpemUsICZycywgTlVMTCk7CisgICAgWHRWYVNldFZhbHVlcyhsYWJlbCwgWG1OcmVjb21wdXRlU2l6ZSwgVHJ1ZSwgTlVMTCk7CisgICAgWHRWYVNldFZhbHVlcyhsYWJlbCwKKwkgICAgWG1ObGFiZWxUeXBlLCBYbVBJWE1BUCwKKwkgICAgWG1ObGFiZWxQaXhtYXAsIHBpeG1hcCwKKwkgICAgTlVMTCk7CisgICAgWHRWYVNldFZhbHVlcyhsYWJlbCwgWG1OcmVjb21wdXRlU2l6ZSwgcnMsIE5VTEwpOworCisgICAgcmV0dXJuIGxhYmVsOworfQorI2VuZGlmCisKKy8qIEFSR1NVU0VEICovCisgICAgaW50CitndWlfbWNoX2RpYWxvZyh0eXBlLCB0aXRsZSwgbWVzc2FnZSwgYnV0dG9uX25hbWVzLCBkZmx0YnV0dG9uLCB0ZXh0ZmllbGQpCisgICAgaW50CQl0eXBlOworICAgIGNoYXJfdQkqdGl0bGU7CisgICAgY2hhcl91CSptZXNzYWdlOworICAgIGNoYXJfdQkqYnV0dG9uX25hbWVzOworICAgIGludAkJZGZsdGJ1dHRvbjsKKyAgICBjaGFyX3UJKnRleHRmaWVsZDsJCS8qIGJ1ZmZlciBvZiBzaXplIElPU0laRSAqLworeworICAgIGNoYXJfdQkJKmJ1dHM7CisgICAgY2hhcl91CQkqcCwgKm5leHQ7CisgICAgWHRBcHBDb250ZXh0CWFwcDsKKyAgICBYbVN0cmluZwkJbGFiZWw7CisgICAgaW50CQkJYnV0Y291bnQ7CisgICAgV2lkZ2V0CQlkaWFsb2dmb3JtID0gTlVMTDsKKyAgICBXaWRnZXQJCWZvcm0gPSBOVUxMOworICAgIFdpZGdldAkJZGlhbG9ndGV4dGZpZWxkID0gTlVMTDsKKyAgICBXaWRnZXQJCSpidXR0b25zOworICAgIFdpZGdldAkJc2VwX2Zvcm0gPSBOVUxMOworICAgIEJvb2xlYW4JCXZlcnRpY2FsOworICAgIFdpZGdldAkJc2VwYXJhdG9yID0gTlVMTDsKKyAgICBpbnQJCQluOworICAgIEFyZwkJCWFyZ3NbNl07CisjaWZkZWYgSEFWRV9YUE0KKyAgICBjaGFyCQkqKmljb25fZGF0YSA9IE5VTEw7CisgICAgV2lkZ2V0CQlkaWFsb2dwaXhtYXAgPSBOVUxMOworI2VuZGlmCisKKyAgICBpZiAodGl0bGUgPT0gTlVMTCkKKwl0aXRsZSA9IChjaGFyX3UgKilfKCJWaW0gZGlhbG9nIik7CisKKyAgICAvKiBpZiBvdXIgcG9pbnRlciBpcyBjdXJyZW50bHkgaGlkZGVuLCB0aGVuIHdlIHNob3VsZCBzaG93IGl0LiAqLworICAgIGd1aV9tY2hfbW91c2VoaWRlKEZBTFNFKTsKKworICAgIGRpYWxvZ2Zvcm0gPSBYbUNyZWF0ZUZvcm1EaWFsb2codmltU2hlbGwsIChjaGFyICopImRpYWxvZyIsIE5VTEwsIDApOworCisgICAgLyogQ2hlY2sgJ3YnIGZsYWcgaW4gJ2d1aW9wdGlvbnMnOiB2ZXJ0aWNhbCBidXR0b24gcGxhY2VtZW50LiAqLworICAgIHZlcnRpY2FsID0gKHZpbV9zdHJjaHIocF9nbywgR09fVkVSVElDQUwpICE9IE5VTEwpOworCisgICAgLyogU2V0IHRoZSB0aXRsZSBvZiB0aGUgRGlhbG9nIHdpbmRvdyAqLworICAgIGxhYmVsID0gWG1TdHJpbmdDcmVhdGVTaW1wbGUoKGNoYXIgKil0aXRsZSk7CisgICAgaWYgKGxhYmVsID09IE5VTEwpCisJcmV0dXJuIC0xOworICAgIFh0VmFTZXRWYWx1ZXMoZGlhbG9nZm9ybSwKKwkgICAgWG1OZGlhbG9nVGl0bGUsIGxhYmVsLAorCSAgICBYbU5ob3Jpem9udGFsU3BhY2luZywgNCwKKwkgICAgWG1OdmVydGljYWxTcGFjaW5nLCB2ZXJ0aWNhbCA/IDAgOiA0LAorCSAgICBOVUxMKTsKKyAgICBYbVN0cmluZ0ZyZWUobGFiZWwpOworCisgICAgLyogbWFrZSBhIGNvcHksIHNvIHRoYXQgd2UgY2FuIGluc2VydCBOVUxzICovCisgICAgYnV0cyA9IHZpbV9zdHJzYXZlKGJ1dHRvbl9uYW1lcyk7CisgICAgaWYgKGJ1dHMgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisKKyAgICAvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGJ1dHRvbnMgYW5kIGFsbG9jYXRlIGJ1dHRvbnNbXS4gKi8KKyAgICBidXRjb3VudCA9IDE7CisgICAgZm9yIChwID0gYnV0czsgKnA7ICsrcCkKKwlpZiAoKnAgPT0gRExHX0JVVFRPTl9TRVApCisJICAgICsrYnV0Y291bnQ7CisgICAgYnV0dG9ucyA9IChXaWRnZXQgKilhbGxvYygodW5zaWduZWQpKGJ1dGNvdW50ICogc2l6ZW9mKFdpZGdldCkpKTsKKyAgICBpZiAoYnV0dG9ucyA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShidXRzKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDcmVhdGUgdGhlIGJ1dHRvbnMuCisgICAgICovCisgICAgc2VwX2Zvcm0gPSAoV2lkZ2V0KSAwOworICAgIHAgPSBidXRzOworICAgIGZvciAoYnV0Y291bnQgPSAwOyAqcDsgKytidXRjb3VudCkKKyAgICB7CisJZm9yIChuZXh0ID0gcDsgKm5leHQ7ICsrbmV4dCkKKwl7CisJICAgIGlmICgqbmV4dCA9PSBETEdfSE9US0VZX0NIQVIpCisJCW1jaF9tZW1tb3ZlKG5leHQsIG5leHQgKyAxLCBTVFJMRU4obmV4dCkpOworCSAgICBpZiAoKm5leHQgPT0gRExHX0JVVFRPTl9TRVApCisJICAgIHsKKwkJKm5leHQrKyA9IE5VTDsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJbGFiZWwgPSBYbVN0cmluZ0NyZWF0ZShfKChjaGFyICopcCksIFNUUklOR19UQUcpOworCWlmIChsYWJlbCA9PSBOVUxMKQorCSAgICBicmVhazsKKworCWJ1dHRvbnNbYnV0Y291bnRdID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoImJ1dHRvbiIsCisJCXhtUHVzaEJ1dHRvbldpZGdldENsYXNzLCBkaWFsb2dmb3JtLAorCQlYbU5sYWJlbFN0cmluZywgbGFiZWwsCisJCVhtTmJvdHRvbUF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCVhtTmJvdHRvbU9mZnNldCwgNCwKKwkJWG1Oc2hvd0FzRGVmYXVsdCwgYnV0Y291bnQgPT0gZGZsdGJ1dHRvbiAtIDEsCisJCVhtTmRlZmF1bHRCdXR0b25TaGFkb3dUaGlja25lc3MsIDEsCisJCU5VTEwpOworCVhtU3RyaW5nRnJlZShsYWJlbCk7CisKKwkvKiBMYXlvdXQgcHJvcGVybHkuICovCisKKwlpZiAoYnV0Y291bnQgPiAwKQorCXsKKwkgICAgaWYgKHZlcnRpY2FsKQorCQlYdFZhU2V0VmFsdWVzKGJ1dHRvbnNbYnV0Y291bnRdLAorCQkJWG1OdG9wV2lkZ2V0LCBidXR0b25zW2J1dGNvdW50IC0gMV0sCisJCQlOVUxMKTsKKwkgICAgZWxzZQorCSAgICB7CisJCWlmICgqbmV4dCA9PSBOVUwpCisJCXsKKwkJICAgIFh0VmFTZXRWYWx1ZXMoYnV0dG9uc1tidXRjb3VudF0sCisJCQkgICAgWG1OcmlnaHRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQkJICAgIFhtTnJpZ2h0T2Zmc2V0LCA0LAorCQkJICAgIE5VTEwpOworCisJCSAgICAvKiBmaWxsIGluIGEgZm9ybSBhcyBpbnZpc2libGUgc2VwYXJhdG9yICovCisJCSAgICBzZXBfZm9ybSA9IFh0VmFDcmVhdGVXaWRnZXQoInNlcGFyYXRvckZvcm0iLAorCQkJICAgIHhtRm9ybVdpZGdldENsYXNzLAlkaWFsb2dmb3JtLAorCQkJICAgIFhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9XSURHRVQsCisJCQkgICAgWG1ObGVmdFdpZGdldCwgYnV0dG9uc1tidXRjb3VudCAtIDFdLAorCQkJICAgIFhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQkJICAgIFhtTnJpZ2h0V2lkZ2V0LCBidXR0b25zW2J1dGNvdW50XSwKKwkJCSAgICBYbU5ib3R0b21BdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQkJICAgIFhtTmJvdHRvbU9mZnNldCwgNCwKKwkJCSAgICBOVUxMKTsKKwkJICAgIFh0TWFuYWdlQ2hpbGQoc2VwX2Zvcm0pOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgWHRWYVNldFZhbHVlcyhidXR0b25zW2J1dGNvdW50XSwKKwkJCSAgICBYbU5sZWZ0QXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQkJICAgIFhtTmxlZnRXaWRnZXQsIGJ1dHRvbnNbYnV0Y291bnQgLSAxXSwKKwkJCSAgICBOVUxMKTsKKwkJfQorCSAgICB9CisJfQorCWVsc2UgaWYgKCF2ZXJ0aWNhbCkKKwl7CisJICAgIGlmICgqbmV4dCA9PSBOVUwpCisJICAgIHsKKwkJWHRWYVNldFZhbHVlcyhidXR0b25zWzBdLAorCQkJWG1OcmlnaHRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQkJWG1OcmlnaHRPZmZzZXQsIDQsCisJCQlOVUxMKTsKKworCQkvKiBmaWxsIGluIGEgZm9ybSBhcyBpbnZpc2libGUgc2VwYXJhdG9yICovCisJCXNlcF9mb3JtID0gWHRWYUNyZWF0ZVdpZGdldCgic2VwYXJhdG9yRm9ybSIsCisJCQl4bUZvcm1XaWRnZXRDbGFzcywgZGlhbG9nZm9ybSwKKwkJCVhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQkJWG1ObGVmdE9mZnNldCwgNCwKKwkJCVhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQkJWG1OcmlnaHRXaWRnZXQsIGJ1dHRvbnNbMF0sCisJCQlYbU5ib3R0b21BdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQkJWG1OYm90dG9tT2Zmc2V0LCA0LAorCQkJTlVMTCk7CisJCVh0TWFuYWdlQ2hpbGQoc2VwX2Zvcm0pOworCSAgICB9CisJICAgIGVsc2UKKwkJWHRWYVNldFZhbHVlcyhidXR0b25zWzBdLAorCQkJWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCQlYbU5sZWZ0T2Zmc2V0LCA0LAorCQkJTlVMTCk7CisJfQorCisJWHRBZGRDYWxsYmFjayhidXR0b25zW2J1dGNvdW50XSwgWG1OYWN0aXZhdGVDYWxsYmFjaywKKwkJCSAgKFh0Q2FsbGJhY2tQcm9jKWJ1dHByb2MsIChYdFBvaW50ZXIpKGxvbmcpYnV0Y291bnQpOworCXAgPSBuZXh0OworICAgIH0KKyAgICB2aW1fZnJlZShidXRzKTsKKworICAgIHNlcGFyYXRvciA9IChXaWRnZXQpIDA7CisgICAgaWYgKGJ1dGNvdW50ID4gMCkKKyAgICB7CisJLyogQ3JlYXRlIHRoZSBzZXBhcmF0b3IgZm9yIGJlYXV0eS4gKi8KKwluID0gMDsKKwlYdFNldEFyZyhhcmdzW25dLCBYbU5vcmllbnRhdGlvbiwgWG1IT1JJWk9OVEFMKTsgbisrOworCVh0U2V0QXJnKGFyZ3Nbbl0sIFhtTmJvdHRvbUF0dGFjaG1lbnQsIFhtQVRUQUNIX1dJREdFVCk7IG4rKzsKKwlYdFNldEFyZyhhcmdzW25dLCBYbU5ib3R0b21XaWRnZXQsIGJ1dHRvbnNbMF0pOyBuKys7CisJWHRTZXRBcmcoYXJnc1tuXSwgWG1OYm90dG9tT2Zmc2V0LCA0KTsgbisrOworCVh0U2V0QXJnKGFyZ3Nbbl0sIFhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNKTsgbisrOworCVh0U2V0QXJnKGFyZ3Nbbl0sIFhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSk7IG4rKzsKKwlzZXBhcmF0b3IgPSBYbUNyZWF0ZVNlcGFyYXRvckdhZGdldChkaWFsb2dmb3JtLCAic2VwYXJhdG9yIiwgYXJncywgbik7CisJWHRNYW5hZ2VDaGlsZChzZXBhcmF0b3IpOworICAgIH0KKworICAgIGlmICh0ZXh0ZmllbGQgIT0gTlVMTCkKKyAgICB7CisJZGlhbG9ndGV4dGZpZWxkID0gWHRWYUNyZWF0ZVdpZGdldCgidGV4dEZpZWxkIiwKKwkJeG1UZXh0RmllbGRXaWRnZXRDbGFzcywgZGlhbG9nZm9ybSwKKwkJWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCVhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkJTlVMTCk7CisJaWYgKGJ1dGNvdW50ID4gMCkKKwkgICAgWHRWYVNldFZhbHVlcyhkaWFsb2d0ZXh0ZmllbGQsCisJCSAgICBYbU5ib3R0b21BdHRhY2htZW50LCBYbUFUVEFDSF9XSURHRVQsCisJCSAgICBYbU5ib3R0b21XaWRnZXQsIHNlcGFyYXRvciwKKwkJICAgIE5VTEwpOworCWVsc2UKKwkgICAgWHRWYVNldFZhbHVlcyhkaWFsb2d0ZXh0ZmllbGQsCisJCSAgICBYbU5ib3R0b21BdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQkgICAgTlVMTCk7CisKKwlndWlfbW90aWZfc2V0X2ZvbnRsaXN0KGRpYWxvZ3RleHRmaWVsZCk7CisJWG1UZXh0RmllbGRTZXRTdHJpbmcoZGlhbG9ndGV4dGZpZWxkLCAoY2hhciAqKXRleHRmaWVsZCk7CisJWHRNYW5hZ2VDaGlsZChkaWFsb2d0ZXh0ZmllbGQpOworCVh0QWRkRXZlbnRIYW5kbGVyKGRpYWxvZ3RleHRmaWVsZCwgS2V5UHJlc3NNYXNrLCBGYWxzZSwKKwkJCSAgICAoWHRFdmVudEhhbmRsZXIpa2V5aGl0X2NhbGxiYWNrLCAoWHRQb2ludGVyKU5VTEwpOworICAgIH0KKworICAgIC8qIEZvcm0gaG9sZGluZyBib3RoIG1lc3NhZ2UgYW5kIHBpeG1hcCBsYWJlbHMgKi8KKyAgICBmb3JtID0gWHRWYUNyZWF0ZVdpZGdldCgic2VwYXJhdG9yRm9ybSIsCisJICAgIHhtRm9ybVdpZGdldENsYXNzLCBkaWFsb2dmb3JtLAorCSAgICBYbU5sZWZ0QXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkgICAgWG1OcmlnaHRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCSAgICBYbU50b3BBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCSAgICBOVUxMKTsKKyAgICBYdE1hbmFnZUNoaWxkKGZvcm0pOworCisjaWZkZWYgSEFWRV9YUE0KKyAgICAvKiBBZGQgYSBwaXhtYXAsIGxlZnQgb2YgdGhlIG1lc3NhZ2UuICovCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKwljYXNlIFZJTV9HRU5FUklDOgorCSAgICBpY29uX2RhdGEgPSBnZW5lcmljX3hwbTsKKwkgICAgYnJlYWs7CisJY2FzZSBWSU1fRVJST1I6CisJICAgIGljb25fZGF0YSA9IGVycm9yX3hwbTsKKwkgICAgYnJlYWs7CisJY2FzZSBWSU1fV0FSTklORzoKKwkgICAgaWNvbl9kYXRhID0gYWxlcnRfeHBtOworCSAgICBicmVhazsKKwljYXNlIFZJTV9JTkZPOgorCSAgICBpY29uX2RhdGEgPSBpbmZvX3hwbTsKKwkgICAgYnJlYWs7CisJY2FzZSBWSU1fUVVFU1RJT046CisJICAgIGljb25fZGF0YSA9IHF1ZXN0X3hwbTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgaWNvbl9kYXRhID0gZ2VuZXJpY194cG07CisgICAgfQorCisgICAgbiA9IDA7CisgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSk7IG4rKzsKKyAgICBYdFNldEFyZyhhcmdzW25dLCBYbU50b3BPZmZzZXQsIDgpOyBuKys7CisgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1OYm90dG9tQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSk7IG4rKzsKKyAgICBYdFNldEFyZyhhcmdzW25dLCBYbU5ib3R0b21PZmZzZXQsIDgpOyBuKys7CisgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0pOyBuKys7CisgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1ObGVmdE9mZnNldCwgOCk7IG4rKzsKKworICAgIGRpYWxvZ3BpeG1hcCA9IGNyZWF0ZV9waXhtYXBfbGFiZWwoZm9ybSwgImRpYWxvZ1BpeG1hcCIsCisJICAgIGljb25fZGF0YSwgYXJncywgbik7CisgICAgWHRNYW5hZ2VDaGlsZChkaWFsb2dwaXhtYXApOworI2VuZGlmCisKKyAgICAvKiBDcmVhdGUgdGhlIGRpYWxvZyBtZXNzYWdlLiAqLworICAgIGxhYmVsID0gWG1TdHJpbmdMdG9SQ3JlYXRlKChjaGFyICopbWVzc2FnZSwgU1RSSU5HX1RBRyk7CisgICAgaWYgKGxhYmVsID09IE5VTEwpCisJcmV0dXJuIC0xOworICAgICh2b2lkKVh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJkaWFsb2dNZXNzYWdlIiwKKwkJCQl4bUxhYmVsR2FkZ2V0Q2xhc3MsIGZvcm0sCisJCQkJWG1ObGFiZWxTdHJpbmcsIGxhYmVsLAorCQkJCVhtTnRvcEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCQkJWG1OdG9wT2Zmc2V0LCA4LAorI2lmZGVmIEhBVkVfWFBNCisJCQkJWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX1dJREdFVCwKKwkJCQlYbU5sZWZ0V2lkZ2V0LCBkaWFsb2dwaXhtYXAsCisjZWxzZQorCQkJCVhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorI2VuZGlmCisJCQkJWG1ObGVmdE9mZnNldCwgOCwKKwkJCQlYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCQkJWG1OcmlnaHRPZmZzZXQsIDgsCisJCQkJWG1OYm90dG9tQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkJCQlYbU5ib3R0b21PZmZzZXQsIDgsCisJCQkJTlVMTCk7CisgICAgWG1TdHJpbmdGcmVlKGxhYmVsKTsKKworICAgIGlmICh0ZXh0ZmllbGQgIT0gTlVMTCkKKyAgICB7CisJWHRWYVNldFZhbHVlcyhmb3JtLAorCQlYbU5ib3R0b21BdHRhY2htZW50LCBYbUFUVEFDSF9XSURHRVQsCisJCVhtTmJvdHRvbVdpZGdldCwgZGlhbG9ndGV4dGZpZWxkLAorCQlOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoYnV0Y291bnQgPiAwKQorCSAgICBYdFZhU2V0VmFsdWVzKGZvcm0sCisJCSAgICBYbU5ib3R0b21BdHRhY2htZW50LCBYbUFUVEFDSF9XSURHRVQsCisJCSAgICBYbU5ib3R0b21XaWRnZXQsIHNlcGFyYXRvciwKKwkJICAgIE5VTEwpOworCWVsc2UKKwkgICAgWHRWYVNldFZhbHVlcyhmb3JtLAorCQkgICAgWG1OYm90dG9tQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkJICAgIE5VTEwpOworICAgIH0KKworICAgIGlmIChkZmx0YnV0dG9uIDwgMSkKKwlkZmx0YnV0dG9uID0gMTsKKyAgICBpZiAoZGZsdGJ1dHRvbiA+IGJ1dGNvdW50KQorCWRmbHRidXR0b24gPSBidXRjb3VudDsKKyAgICBYdFZhU2V0VmFsdWVzKGRpYWxvZ2Zvcm0sCisJICAgIFhtTmRlZmF1bHRCdXR0b24sIGJ1dHRvbnNbZGZsdGJ1dHRvbiAtIDFdLCBOVUxMKTsKKyAgICBpZiAodGV4dGZpZWxkICE9IE5VTEwpCisJWHRWYVNldFZhbHVlcyhkaWFsb2dmb3JtLCBYbU5pbml0aWFsRm9jdXMsIGRpYWxvZ3RleHRmaWVsZCwgTlVMTCk7CisgICAgZWxzZQorCVh0VmFTZXRWYWx1ZXMoZGlhbG9nZm9ybSwgWG1OaW5pdGlhbEZvY3VzLCBidXR0b25zW2RmbHRidXR0b24gLSAxXSwKKwkJCQkJCQkJCU5VTEwpOworCisgICAgbWFuYWdlX2NlbnRlcmVkKGRpYWxvZ2Zvcm0pOworCisgICAgaWYgKHRleHRmaWVsZCAhPSBOVUxMICYmICp0ZXh0ZmllbGQgIT0gTlVMKQorICAgIHsKKwkvKiBUaGlzIG9ubHkgd29ya3MgYWZ0ZXIgdGhlIHRleHRmaWVsZCBoYXMgYmVlbiByZWFsaXNlZC4gKi8KKwlYbVRleHRGaWVsZFNldFNlbGVjdGlvbihkaWFsb2d0ZXh0ZmllbGQsCisJCQkgKFhtVGV4dFBvc2l0aW9uKTAsIChYbVRleHRQb3NpdGlvbilTVFJMRU4odGV4dGZpZWxkKSwKKwkJCQkJICAgWHRMYXN0VGltZXN0YW1wUHJvY2Vzc2VkKGd1aS5kcHkpKTsKKwlYbVRleHRGaWVsZFNldEN1cnNvclBvc2l0aW9uKGRpYWxvZ3RleHRmaWVsZCwKKwkJCQkJICAgKFhtVGV4dFBvc2l0aW9uKVNUUkxFTih0ZXh0ZmllbGQpKTsKKyAgICB9CisKKyAgICBhcHAgPSBYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KGRpYWxvZ2Zvcm0pOworCisgICAgLyogTG9vcCB1bnRpbCBhIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIHRoZSBkaWFsb2cgaXMga2lsbGVkIHNvbWVob3cuICovCisgICAgZGlhbG9nU3RhdHVzID0gLTE7CisgICAgZm9yICg7OykKKyAgICB7CisJWHRBcHBQcm9jZXNzRXZlbnQoYXBwLCAoWHRJbnB1dE1hc2spWHRJTUFsbCk7CisJaWYgKGRpYWxvZ1N0YXR1cyA+PSAwIHx8ICFYdElzTWFuYWdlZChkaWFsb2dmb3JtKSkKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgdmltX2ZyZWUoYnV0dG9ucyk7CisKKyAgICBpZiAodGV4dGZpZWxkICE9IE5VTEwpCisgICAgeworCXAgPSAoY2hhcl91ICopWG1UZXh0R2V0U3RyaW5nKGRpYWxvZ3RleHRmaWVsZCk7CisJaWYgKHAgPT0gTlVMTCB8fCBkaWFsb2dTdGF0dXMgPCAwKQorCSAgICAqdGV4dGZpZWxkID0gTlVMOworCWVsc2UKKwl7CisJICAgIFNUUk5DUFkodGV4dGZpZWxkLCBwLCBJT1NJWkUpOworCSAgICB0ZXh0ZmllbGRbSU9TSVpFIC0gMV0gPSBOVUw7CisJfQorICAgIH0KKworICAgIFh0RGVzdHJveVdpZGdldChkaWFsb2dmb3JtKTsKKworICAgIHJldHVybiBkaWFsb2dTdGF0dXM7Cit9CisjZW5kaWYgLyogRkVBVF9HVUlfRElBTE9HICovCisKKyNpZiBkZWZpbmVkKEZFQVRfRk9PVEVSKSB8fCBkZWZpbmVkKFBST1RPKQorCisgICAgc3RhdGljIGludAorZ3VpX21jaF9jb21wdXRlX2Zvb3Rlcl9oZWlnaHQoKQoreworICAgIERpbWVuc2lvbgloZWlnaHQ7CQkgICAgLyogdG90YWwgVG9vbGJhciBoZWlnaHQgKi8KKyAgICBEaW1lbnNpb24JdG9wOwkJICAgIC8qIFhtTm1hcmdpblRvcCAqLworICAgIERpbWVuc2lvbglib3R0b207CQkgICAgLyogWG1ObWFyZ2luQm90dG9tICovCisgICAgRGltZW5zaW9uCXNoYWRvdzsJCSAgICAvKiBYbU5zaGFkb3dUaGlja25lc3MgKi8KKworICAgIFh0VmFHZXRWYWx1ZXMoZm9vdGVyLAorCSAgICBYbU5oZWlnaHQsICZoZWlnaHQsCisJICAgIFhtTm1hcmdpblRvcCwgJnRvcCwKKwkgICAgWG1ObWFyZ2luQm90dG9tLCAmYm90dG9tLAorCSAgICBYbU5zaGFkb3dUaGlja25lc3MsICZzaGFkb3csCisJICAgIE5VTEwpOworCisgICAgcmV0dXJuIChpbnQpIGhlaWdodCArIHRvcCArIGJvdHRvbSArIChzaGFkb3cgPDwgMSk7Cit9CisKKyNpZiAwCSAgICAvKiBub3QgdXNlZCAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2Zvb3Rlcl9wb3MoaCkKKyAgICBpbnQJICAgIGg7CQkJICAgIC8qIHRleHRBcmVhIGhlaWdodCAqLworeworICAgIFh0VmFTZXRWYWx1ZXMoZm9vdGVyLAorCQkgIFhtTnRvcE9mZnNldCwgaCArIDcsCisJCSAgTlVMTCk7Cit9CisjZW5kaWYKKworICAgIHZvaWQKK2d1aV9tY2hfZW5hYmxlX2Zvb3RlcihzaG93aXQpCisgICAgaW50CQlzaG93aXQ7Cit7CisgICAgaWYgKHNob3dpdCkKKyAgICB7CisJZ3VpLmZvb3Rlcl9oZWlnaHQgPSBndWlfbWNoX2NvbXB1dGVfZm9vdGVyX2hlaWdodCgpOworCVh0TWFuYWdlQ2hpbGQoZm9vdGVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlndWkuZm9vdGVyX2hlaWdodCA9IDA7CisJWHRVbm1hbmFnZUNoaWxkKGZvb3Rlcik7CisgICAgfQorICAgIFh0VmFTZXRWYWx1ZXModGV4dEFyZWFGb3JtLCBYbU5ib3R0b21PZmZzZXQsIGd1aS5mb290ZXJfaGVpZ2h0LCBOVUxMKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2Zvb3RlcihzKQorICAgIGNoYXJfdQkqczsKK3sKKyAgICBYbVN0cmluZwl4bXM7CisKKyAgICB4bXMgPSBYbVN0cmluZ0NyZWF0ZSgoY2hhciAqKXMsIFNUUklOR19UQUcpOworICAgIFh0VmFTZXRWYWx1ZXMoZm9vdGVyLCBYbU5sYWJlbFN0cmluZywgeG1zLCBOVUxMKTsKKyAgICBYbVN0cmluZ0ZyZWUoeG1zKTsKK30KKworI2VuZGlmCisKKworI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2d1aV9tY2hfc2hvd190b29sYmFyKGludCBzaG93aXQpCit7CisgICAgQ2FyZGluYWwJbnVtQ2hpbGRyZW47CSAgICAvKiBob3cgbWFueSBjaGlsZHJlbiB0b29sQmFyIGhhcyAqLworCisgICAgaWYgKHRvb2xCYXIgPT0gKFdpZGdldCkwKQorCXJldHVybjsKKyAgICBYdFZhR2V0VmFsdWVzKHRvb2xCYXIsIFhtTm51bUNoaWxkcmVuLCAmbnVtQ2hpbGRyZW4sIE5VTEwpOworICAgIGlmIChzaG93aXQgJiYgbnVtQ2hpbGRyZW4gPiAwKQorICAgIHsKKwkvKiBBc3N1bWUgdGhhdCB3ZSB3YW50IHRvIHNob3cgdGhlIHRvb2xiYXIgaWYgcF90b29sYmFyIGNvbnRhaW5zCisJICogdmFsaWQgb3B0aW9uIHNldHRpbmdzLCB0aGVyZWZvcmUgcF90b29sYmFyIG11c3Qgbm90IGJlIE5VTEwuCisJICovCisJV2lkZ2V0TGlzdCAgY2hpbGRyZW47CisKKwlYdFZhR2V0VmFsdWVzKHRvb2xCYXIsIFhtTmNoaWxkcmVuLCAmY2hpbGRyZW4sIE5VTEwpOworCXsKKwkgICAgdm9pZCAgICAoKmFjdGlvbikoQmFsbG9vbkV2YWwgKik7CisJICAgIGludAkgICAgdGV4dCA9IDA7CisKKwkgICAgaWYgKHN0cnN0cigoY29uc3QgY2hhciAqKXBfdG9vbGJhciwgInRvb2x0aXBzIikpCisJCWFjdGlvbiA9ICZndWlfbWNoX2VuYWJsZV9iZXZhbF9hcmVhOworCSAgICBlbHNlCisJCWFjdGlvbiA9ICZndWlfbWNoX2Rpc2FibGVfYmV2YWxfYXJlYTsKKwkgICAgaWYgKHN0cnN0cigoY29uc3QgY2hhciAqKXBfdG9vbGJhciwgInRleHQiKSkKKwkJdGV4dCA9IDE7CisJICAgIGVsc2UgaWYgKHN0cnN0cigoY29uc3QgY2hhciAqKXBfdG9vbGJhciwgImljb25zIikpCisJCXRleHQgPSAtMTsKKwkgICAgaWYgKHRleHQgIT0gMCkKKwkgICAgeworCQl2aW1tZW51X1QgICAqdG9vbGJhcjsKKwkJdmltbWVudV9UICAgKmN1cjsKKworCQlmb3IgKHRvb2xiYXIgPSByb290X21lbnU7IHRvb2xiYXI7IHRvb2xiYXIgPSB0b29sYmFyLT5uZXh0KQorCQkgICAgaWYgKG1lbnVfaXNfdG9vbGJhcih0b29sYmFyLT5kbmFtZSkpCisJCQlicmVhazsKKwkJLyogQXNzdW1wdGlvbjogdG9vbGJhciBpcyBOVUxMIGlmIHRoZXJlIGlzIG5vIHRvb2xiYXIsCisJCSAqCSAgICAgICBvdGhlcndpc2UgaXQgY29udGFpbnMgdGhlIHRvb2xiYXIgbWVudSBzdHJ1Y3R1cmUuCisJCSAqCisJCSAqIEFzc3VtcHRpb246ICJudW1DaGlsZHJlbiIgPT0gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgbGlzdAorCQkgKgkgICAgICAgb2YgaXRlbXMgYmVnaW5uaW5nIHdpdGggdG9vbGJhci0+Y2hpbGRyZW4uCisJCSAqLworCQlpZiAodG9vbGJhcikKKwkJeworCQkgICAgZm9yIChjdXIgPSB0b29sYmFyLT5jaGlsZHJlbjsgY3VyOyBjdXIgPSBjdXItPm5leHQpCisJCSAgICB7CisJCQlBcmcJICAgIGFyZ3NbMV07CisJCQlpbnQJICAgIG4gPSAwOworCisJCQkvKiBFbmFibGUvRGlzYWJsZSB0b29sdGlwIChPSyB0byBlbmFibGUgd2hpbGUKKwkJCSAqIGN1cnJlbnRseSBlbmFibGVkKQorCQkJICovCisJCQlpZiAoY3VyLT50aXAgIT0gTlVMTCkKKwkJCSAgICAoKmFjdGlvbikoY3VyLT50aXApOworCQkJaWYgKCFtZW51X2lzX3NlcGFyYXRvcihjdXItPm5hbWUpKQorCQkJeworCQkJICAgIGlmICh0ZXh0ID09IDEgfHwgY3VyLT5pbWFnZSA9PSAwKQorCQkJCVh0U2V0QXJnKGFyZ3Nbbl0sIFhtTmxhYmVsVHlwZSwgWG1TVFJJTkcpOworCQkJICAgIGVsc2UKKwkJCQlYdFNldEFyZyhhcmdzW25dLCBYbU5sYWJlbFR5cGUsIFhtUElYTUFQKTsKKwkJCSAgICBuKys7CisJCQkgICAgaWYgKGN1ci0+aWQgIT0gTlVMTCkKKwkJCSAgICB7CisJCQkJWHRVbm1hbmFnZUNoaWxkKGN1ci0+aWQpOworCQkJCVh0U2V0VmFsdWVzKGN1ci0+aWQsIGFyZ3MsIG4pOworCQkJCVh0TWFuYWdlQ2hpbGQoY3VyLT5pZCk7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisJZ3VpLnRvb2xiYXJfaGVpZ2h0ID0gZ3VpX21jaF9jb21wdXRlX3Rvb2xiYXJfaGVpZ2h0KCk7CisJWHRNYW5hZ2VDaGlsZChYdFBhcmVudCh0b29sQmFyKSk7CisJWHRWYVNldFZhbHVlcyh0ZXh0QXJlYUZvcm0sCisJCVhtTnRvcEF0dGFjaG1lbnQsIFhtQVRUQUNIX1dJREdFVCwKKwkJWG1OdG9wV2lkZ2V0LCBYdFBhcmVudCh0b29sQmFyKSwKKwkJTlVMTCk7CisJaWYgKFh0SXNNYW5hZ2VkKG1lbnVCYXIpKQorCSAgICBYdFZhU2V0VmFsdWVzKFh0UGFyZW50KHRvb2xCYXIpLAorCQkgICAgWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQkgICAgWG1OdG9wV2lkZ2V0LCBtZW51QmFyLAorCQkgICAgTlVMTCk7CisJZWxzZQorCSAgICBYdFZhU2V0VmFsdWVzKFh0UGFyZW50KHRvb2xCYXIpLAorCQkgICAgWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkJICAgIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWd1aS50b29sYmFyX2hlaWdodCA9IDA7CisJaWYgKFh0SXNNYW5hZ2VkKG1lbnVCYXIpKQorCSAgICBYdFZhU2V0VmFsdWVzKHRleHRBcmVhRm9ybSwKKwkJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQlYbU50b3BXaWRnZXQsIG1lbnVCYXIsCisJCU5VTEwpOworCWVsc2UKKwkgICAgWHRWYVNldFZhbHVlcyh0ZXh0QXJlYUZvcm0sCisJCVhtTnRvcEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCU5VTEwpOworCisJWHRVbm1hbmFnZUNoaWxkKFh0UGFyZW50KHRvb2xCYXIpKTsKKyAgICB9CisgICAgZ3VpX3NldF9zaGVsbHNpemUoRkFMU0UsIEZBTFNFKTsKK30KKworLyoKKyAqIEEgdG9vbGJhciBidXR0b24gaGFzIGJlZW4gcHVzaGVkOyBub3cgcmVzZXQgdGhlIGlucHV0IGZvY3VzCisgKiBzdWNoIHRoYXQgdGhlIHVzZXIgY2FuIHR5cGUgcGFnZSB1cC9kb3duIGV0Yy4gYW5kIGhhdmUgdGhlCisgKiBpbnB1dCBnbyB0byB0aGUgZWRpdG9yIHdpbmRvdywgbm90IHRoZSBidXR0b24KKyAqLworICAgIHN0YXRpYyB2b2lkCitndWlfbWNoX3Jlc2V0X2ZvY3VzKCkKK3sKKyAgICBpZiAodGV4dEFyZWEgIT0gTlVMTCkKKwlYbVByb2Nlc3NUcmF2ZXJzYWwodGV4dEFyZWEsIFhtVFJBVkVSU0VfQ1VSUkVOVCk7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfY29tcHV0ZV90b29sYmFyX2hlaWdodCgpCit7CisgICAgRGltZW5zaW9uCWhlaWdodDsJCSAgICAvKiB0b3RhbCBUb29sYmFyIGhlaWdodCAqLworICAgIERpbWVuc2lvbgl3aGd0OwkJICAgIC8qIGhlaWdodCBvZiBlYWNoIHdpZGdldCAqLworICAgIERpbWVuc2lvbgltYXJnaW5IZWlnaHQ7CSAgICAvKiBYbU5tYXJnaW5IZWlnaHQgb2YgdG9vbEJhciAqLworICAgIERpbWVuc2lvbglzaGFkb3dUaGlja25lc3M7ICAgIC8qIHRoaWNrbmVzcyBvZiBYdHBhcmVudCh0b29sQmFyKSAqLworICAgIFdpZGdldExpc3QJY2hpbGRyZW47CSAgICAvKiBsaXN0IG9mIHRvb2xCYXIncyBjaGlsZHJlbiAqLworICAgIENhcmRpbmFsCW51bUNoaWxkcmVuOwkgICAgLyogaG93IG1hbnkgY2hpbGRyZW4gdG9vbEJhciBoYXMgKi8KKyAgICBpbnQJCWk7CisKKyAgICBoZWlnaHQgPSAwOworICAgIHNoYWRvd1RoaWNrbmVzcyA9IDA7CisgICAgbWFyZ2luSGVpZ2h0ID0gMDsKKyAgICBpZiAodG9vbEJhciAhPSAoV2lkZ2V0KTAgJiYgdG9vbEJhckZyYW1lICE9IChXaWRnZXQpMCkKKyAgICB7CQkJCSAgICAvKiBnZXQgaGVpZ2h0IG9mIFhtRnJhbWUgcGFyZW50ICovCisJWHRWYUdldFZhbHVlcyh0b29sQmFyRnJhbWUsCisJCVhtTnNoYWRvd1RoaWNrbmVzcywgJnNoYWRvd1RoaWNrbmVzcywKKwkJTlVMTCk7CisJWHRWYUdldFZhbHVlcyh0b29sQmFyLAorCQlYbU5tYXJnaW5IZWlnaHQsICZtYXJnaW5IZWlnaHQsCisJCVhtTmNoaWxkcmVuLCAmY2hpbGRyZW4sCisJCVhtTm51bUNoaWxkcmVuLCAmbnVtQ2hpbGRyZW4sIE5VTEwpOworCWZvciAoaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgaSsrKQorCXsKKwkgICAgd2hndCA9IDA7CisJICAgIFh0VmFHZXRWYWx1ZXMoY2hpbGRyZW5baV0sIFhtTmhlaWdodCwgJndoZ3QsIE5VTEwpOworCSAgICBpZiAoaGVpZ2h0IDwgd2hndCkKKwkJaGVpZ2h0ID0gd2hndDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIChpbnQpKGhlaWdodCArIChtYXJnaW5IZWlnaHQgPDwgMSkgKyAoc2hhZG93VGhpY2tuZXNzIDw8IDEpKTsKK30KKworI2lmIDAgLyogdGhlc2UgYXJlIG5ldmVyIGNhbGxlZC4gKi8KKy8qCisgKiBUaGUgbmV4dCB0b29sYmFyIGVudGVyL2xlYXZlIGNhbGxiYWNrcyBtYWtlIHN1cmUgdGhlIHRleHQgYXJlYSBnZXRzIHRoZQorICoga2V5Ym9hcmQgZm9jdXMgd2hlbiB0aGUgcG9pbnRlciBpcyBub3QgaW4gdGhlIHRvb2xiYXIuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCit0b29sYmFyX2VudGVyX2NiKHcsIGNsaWVudF9kYXRhLCBldmVudCwgY29udCkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGE7CisgICAgWEV2ZW50CSpldmVudDsKKyAgICBCb29sZWFuCSpjb250OworeworICAgIFhtUHJvY2Vzc1RyYXZlcnNhbCh0b29sQmFyLCBYbVRSQVZFUlNFX0NVUlJFTlQpOworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAordG9vbGJhcl9sZWF2ZV9jYih3LCBjbGllbnRfZGF0YSwgZXZlbnQsIGNvbnQpCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCWNsaWVudF9kYXRhOworICAgIFhFdmVudAkqZXZlbnQ7CisgICAgQm9vbGVhbgkqY29udDsKK3sKKyAgICBYbVByb2Nlc3NUcmF2ZXJzYWwodGV4dEFyZWEsIFhtVFJBVkVSU0VfQ1VSUkVOVCk7Cit9CisjZW5kaWYKKworIyBpZmRlZiBGRUFUX0ZPT1RFUgorLyoKKyAqIFRoZSBuZXh0IHRvb2xiYXIgZW50ZXIvbGVhdmUgY2FsbGJhY2tzIHNob3VsZCByZWFsbHkgZG8gYmFsbG9vbiBoZWxwLiAgQnV0CisgKiBJIGhhdmUgdG8gdXNlIGZvb3RlciBoZWxwIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4gIEhvcGVmdWxseSBib3RoIHdpbGwKKyAqIGdldCBpbXBsZW1lbnRlZCBhbmQgdGhlIHVzZXIgd2lsbCBoYXZlIGEgY2hvaWNlLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAordG9vbGJhcmJ1dHRvbl9lbnRlcl9jYih3LCBjbGllbnRfZGF0YSwgZXZlbnQsIGNvbnQpCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCWNsaWVudF9kYXRhOworICAgIFhFdmVudAkqZXZlbnQ7CisgICAgQm9vbGVhbgkqY29udDsKK3sKKyAgICB2aW1tZW51X1QJKm1lbnUgPSAodmltbWVudV9UICopIGNsaWVudF9kYXRhOworCisgICAgaWYgKG1lbnUtPnN0cmluZ3NbTUVOVV9JTkRFWF9USVBdICE9IE5VTEwpCisgICAgeworCWlmICh2aW1fc3RyY2hyKHBfZ28sIEdPX0ZPT1RFUikgIT0gTlVMTCkKKwkgICAgZ3VpX21jaF9zZXRfZm9vdGVyKG1lbnUtPnN0cmluZ3NbTUVOVV9JTkRFWF9USVBdKTsKKyAgICB9Cit9CisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCit0b29sYmFyYnV0dG9uX2xlYXZlX2NiKHcsIGNsaWVudF9kYXRhLCBldmVudCwgY29udCkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGE7CisgICAgWEV2ZW50CSpldmVudDsKKyAgICBCb29sZWFuCSpjb250OworeworICAgIGd1aV9tY2hfc2V0X2Zvb3RlcigoY2hhcl91ICopICIiKTsKK30KKyMgZW5kaWYKKworICAgIHZvaWQKK2d1aV9tY2hfZ2V0X3Rvb2xiYXJfY29sb3JzKGJncCwgZmdwLCBic3AsIHRzcCwgaHNwKQorICAgIFBpeGVsCSpiZ3A7CisgICAgUGl4ZWwJKmZncDsKKyAgICBQaXhlbCAgICAgICAqYnNwOworICAgIFBpeGVsCSp0c3A7CisgICAgUGl4ZWwJKmhzcDsKK3sKKyAgICBYdFZhR2V0VmFsdWVzKHRvb2xCYXIsCisJICAgIFhtTmJhY2tncm91bmQsIGJncCwKKwkgICAgWG1OZm9yZWdyb3VuZCwgZmdwLAorCSAgICBYbU5ib3R0b21TaGFkb3dDb2xvciwgYnNwLAorCSAgICBYbU50b3BTaGFkb3dDb2xvciwgdHNwLAorCSAgICBYbU5oaWdobGlnaHRDb2xvciwgaHNwLAorCSAgICBOVUxMKTsKK30KKyNlbmRpZgorCisvKgorICogU2V0IHRoZSBjb2xvcnMgb2YgV2lkZ2V0ICJpZCIgdG8gdGhlIG1lbnUgY29sb3JzLgorICovCisgICAgc3RhdGljIHZvaWQKK2d1aV9tb3RpZl9tZW51X2NvbG9ycyhpZCkKKyAgICBXaWRnZXQgIGlkOworeworICAgIGlmIChndWkubWVudV9iZ19waXhlbCAhPSBJTlZBTENPTE9SKQorI2lmIChYbVZlcnNpb24gPj0gMTAwMikKKwlYbUNoYW5nZUNvbG9yKGlkLCBndWkubWVudV9iZ19waXhlbCk7CisjZWxzZQorCVh0VmFTZXRWYWx1ZXMoaWQsIFhtTmJhY2tncm91bmQsIGd1aS5tZW51X2JnX3BpeGVsLCBOVUxMKTsKKyNlbmRpZgorICAgIGlmIChndWkubWVudV9mZ19waXhlbCAhPSBJTlZBTENPTE9SKQorCVh0VmFTZXRWYWx1ZXMoaWQsIFhtTmZvcmVncm91bmQsIGd1aS5tZW51X2ZnX3BpeGVsLCBOVUxMKTsKK30KKworLyoKKyAqIFNldCB0aGUgY29sb3JzIG9mIFdpZGdldCAiaWQiIHRvIHRoZSBzY3JvbGxiYXIgY29sb3JzLgorICovCisgICAgc3RhdGljIHZvaWQKK2d1aV9tb3RpZl9zY3JvbGxfY29sb3JzKGlkKQorICAgIFdpZGdldCAgaWQ7Cit7CisgICAgaWYgKGd1aS5zY3JvbGxfYmdfcGl4ZWwgIT0gSU5WQUxDT0xPUikKKyNpZiAoWG1WZXJzaW9uID49IDEwMDIpCisJWG1DaGFuZ2VDb2xvcihpZCwgZ3VpLnNjcm9sbF9iZ19waXhlbCk7CisjZWxzZQorCVh0VmFTZXRWYWx1ZXMoaWQsIFhtTmJhY2tncm91bmQsIGd1aS5zY3JvbGxfYmdfcGl4ZWwsIE5VTEwpOworI2VuZGlmCisgICAgaWYgKGd1aS5zY3JvbGxfZmdfcGl4ZWwgIT0gSU5WQUxDT0xPUikKKwlYdFZhU2V0VmFsdWVzKGlkLCBYbU5mb3JlZ3JvdW5kLCBndWkuc2Nyb2xsX2ZnX3BpeGVsLCBOVUxMKTsKK30KKworI2lmZGVmIEZFQVRfTUVOVQorLyoKKyAqIFNldCB0aGUgZm9udGxpc3QgZm9yIFdpZGdldCAiaWQiIHRvIHVzZSBndWkubWVudV9mb250c2V0IG9yIGd1aS5tZW51X2ZvbnQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX21vdGlmX21lbnVfZm9udGxpc3QoaWQpCisgICAgV2lkZ2V0ICBpZDsKK3sKKyNpZmRlZiBGT05UU0VUX0FMV0FZUworICAgIGlmIChndWkubWVudV9mb250c2V0ICE9IE5PRk9OVFNFVCkKKyAgICB7CisJWG1Gb250TGlzdCBmbDsKKworCWZsID0gZ3VpX21vdGlmX2ZvbnRzZXQyZm9udGxpc3QoKFhGb250U2V0ICopJmd1aS5tZW51X2ZvbnRzZXQpOworCWlmIChmbCAhPSBOVUxMKQorCXsKKwkgICAgaWYgKFh0SXNNYW5hZ2VkKGlkKSkKKwkgICAgeworCQlYdFVubWFuYWdlQ2hpbGQoaWQpOworCQlYdFZhU2V0VmFsdWVzKGlkLCBYbU5mb250TGlzdCwgZmwsIE5VTEwpOworCQkvKiBXZSBzaG91bGQgZm9yY2UgdGhlIHdpZGdldCB0byByZWNhbGN1bGF0ZSBpdCdzCisJCSAqIGdlb21ldHJ5IG5vdy4gKi8KKwkJWHRNYW5hZ2VDaGlsZChpZCk7CisJICAgIH0KKwkgICAgZWxzZQorCQlYdFZhU2V0VmFsdWVzKGlkLCBYbU5mb250TGlzdCwgZmwsIE5VTEwpOworCSAgICBYbUZvbnRMaXN0RnJlZShmbCk7CisJfQorICAgIH0KKyNlbHNlCisgICAgaWYgKGd1aS5tZW51X2ZvbnQgIT0gTk9GT05UKQorICAgIHsKKwlYbUZvbnRMaXN0IGZsOworCisJZmwgPSBndWlfbW90aWZfY3JlYXRlX2ZvbnRsaXN0KChYRm9udFN0cnVjdCAqKWd1aS5tZW51X2ZvbnQpOworCWlmIChmbCAhPSBOVUxMKQorCXsKKwkgICAgaWYgKFh0SXNNYW5hZ2VkKGlkKSkKKwkgICAgeworCQlYdFVubWFuYWdlQ2hpbGQoaWQpOworCQlYdFZhU2V0VmFsdWVzKGlkLCBYbU5mb250TGlzdCwgZmwsIE5VTEwpOworCQkvKiBXZSBzaG91bGQgZm9yY2UgdGhlIHdpZGdldCB0byByZWNhbGN1bGF0ZSBpdCdzCisJCSAqIGdlb21ldHJ5IG5vdy4gKi8KKwkJWHRNYW5hZ2VDaGlsZChpZCk7CisJICAgIH0KKwkgICAgZWxzZQorCQlYdFZhU2V0VmFsdWVzKGlkLCBYbU5mb250TGlzdCwgZmwsIE5VTEwpOworCSAgICBYbUZvbnRMaXN0RnJlZShmbCk7CisJfQorICAgIH0KKyNlbmRpZgorfQorCisjZW5kaWYKKworLyoKKyAqIFdlIGRvbid0IGNyZWF0ZSBpdCB0d2ljZSBmb3IgdGhlIHNha2Ugb2Ygc3BlZWQuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX1NoYXJlZEZpbmRSZXBsYWNlCit7CisgICAgV2lkZ2V0IGRpYWxvZzsJLyogdGhlIG1haW4gZGlhbG9nIHdpZGdldCAqLworICAgIFdpZGdldCB3d29yZDsJLyogJ0V4YWN0IG1hdGNoJyBjaGVjayBidXR0b24gKi8KKyAgICBXaWRnZXQgbWNhc2U7CS8qICdtYXRjaCBjYXNlJyBjaGVjayBidXR0b24gKi8KKyAgICBXaWRnZXQgdXA7CQkvKiBzZWFyY2ggZGlyZWN0aW9uICdVcCcgcmFkaW8gYnV0dG9uICovCisgICAgV2lkZ2V0IGRvd247CS8qIHNlYXJjaCBkaXJlY3Rpb24gJ0Rvd24nIHJhZGlvIGJ1dHRvbiAqLworICAgIFdpZGdldCB3aGF0OwkvKiAnRmluZCB3aGF0JyBlbnRyeSB0ZXh0IHdpZGdldCAqLworICAgIFdpZGdldCB3aXRoOwkvKiAnUmVwbGFjZSB3aXRoJyBlbnRyeSB0ZXh0IHdpZGdldCAqLworICAgIFdpZGdldCBmaW5kOwkvKiAnRmluZCBOZXh0JyBhY3Rpb24gYnV0dG9uICovCisgICAgV2lkZ2V0IHJlcGxhY2U7CS8qICdSZXBsYWNlIFdpdGgnIGFjdGlvbiBidXR0b24gKi8KKyAgICBXaWRnZXQgYWxsOwkJLyogJ1JlcGxhY2UgQWxsJyBhY3Rpb24gYnV0dG9uICovCisgICAgV2lkZ2V0IHVuZG87CS8qICdVbmRvJyBhY3Rpb24gYnV0dG9uICovCisKKyAgICBXaWRnZXQgY2FuY2VsOworfSBTaGFyZWRGaW5kUmVwbGFjZTsKKworc3RhdGljIFNoYXJlZEZpbmRSZXBsYWNlIGZpbmRfd2lkZ2V0cyA9IHsgTlVMTCB9Oworc3RhdGljIFNoYXJlZEZpbmRSZXBsYWNlIHJlcGxfd2lkZ2V0cyA9IHsgTlVMTCB9OworCitzdGF0aWMgdm9pZCBmaW5kX3JlcGxhY2VfZGVzdHJveV9jYWxsYmFjayBfX0FSR1MoKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpKTsKK3N0YXRpYyB2b2lkIGZpbmRfcmVwbGFjZV9kaXNtaXNzX2NhbGxiYWNrIF9fQVJHUygoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkpOworc3RhdGljIHZvaWQgZW50cnlfYWN0aXZhdGVfY2FsbGJhY2sgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKSk7CitzdGF0aWMgdm9pZCBmaW5kX3JlcGxhY2VfY2FsbGJhY2sgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKSk7CitzdGF0aWMgdm9pZCBmaW5kX3JlcGxhY2Vfa2V5cHJlc3MgX19BUkdTKChXaWRnZXQgdywgU2hhcmVkRmluZFJlcGxhY2UgKiBmcmRwLCBYS2V5RXZlbnQgKiBldmVudCkpOworc3RhdGljIHZvaWQgZmluZF9yZXBsYWNlX2RpYWxvZ19jcmVhdGUgX19BUkdTKChjaGFyX3UgKmVudHJ5X3RleHQsIGludCBkb19yZXBsYWNlKSk7CisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitmaW5kX3JlcGxhY2VfZGVzdHJveV9jYWxsYmFjayh3LCBjbGllbnRfZGF0YSwgY2FsbF9kYXRhKQorICAgIFdpZGdldAl3OworICAgIFh0UG9pbnRlcgljbGllbnRfZGF0YTsKKyAgICBYdFBvaW50ZXIJY2FsbF9kYXRhOworeworICAgIFNoYXJlZEZpbmRSZXBsYWNlICpjZCA9IChTaGFyZWRGaW5kUmVwbGFjZSAqKWNsaWVudF9kYXRhOworCisgICAgaWYgKGNkICE9IE5VTEwpCisJY2QtPmRpYWxvZyA9IChXaWRnZXQpMDsKK30KKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZpbmRfcmVwbGFjZV9kaXNtaXNzX2NhbGxiYWNrKHcsIGNsaWVudF9kYXRhLCBjYWxsX2RhdGEpCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCWNsaWVudF9kYXRhOworICAgIFh0UG9pbnRlcgljYWxsX2RhdGE7Cit7CisgICAgU2hhcmVkRmluZFJlcGxhY2UgKmNkID0gKFNoYXJlZEZpbmRSZXBsYWNlICopY2xpZW50X2RhdGE7CisKKyAgICBpZiAoY2QgIT0gTlVMTCkKKwlYdFVubWFuYWdlQ2hpbGQoY2QtPmRpYWxvZyk7Cit9CisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitlbnRyeV9hY3RpdmF0ZV9jYWxsYmFjayh3LCBjbGllbnRfZGF0YSwgY2FsbF9kYXRhKQorICAgIFdpZGdldAl3OworICAgIFh0UG9pbnRlcgljbGllbnRfZGF0YTsKKyAgICBYdFBvaW50ZXIJY2FsbF9kYXRhOworeworICAgIFhtUHJvY2Vzc1RyYXZlcnNhbCgoV2lkZ2V0KWNsaWVudF9kYXRhLCBYbVRSQVZFUlNFX0NVUlJFTlQpOworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZmluZF9yZXBsYWNlX2NhbGxiYWNrKHcsIGNsaWVudF9kYXRhLCBjYWxsX2RhdGEpCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCWNsaWVudF9kYXRhOworICAgIFh0UG9pbnRlcgljYWxsX2RhdGE7Cit7CisgICAgbG9uZ191CWZsYWdzID0gKGxvbmdfdSljbGllbnRfZGF0YTsKKyAgICBjaGFyCSpmaW5kX3RleHQsICpyZXBsX3RleHQ7CisgICAgQm9vbGVhbglkaXJlY3Rpb25fZG93biA9IFRSVUU7CisgICAgQm9vbGVhbgl3d29yZDsKKyAgICBCb29sZWFuCW1jYXNlOworICAgIFNoYXJlZEZpbmRSZXBsYWNlICpzZnI7CisKKyAgICBpZiAoZmxhZ3MgPT0gRlJEX1VORE8pCisgICAgeworCWNoYXJfdQkqc2F2ZV9jcG8gPSBwX2NwbzsKKworCS8qIE5vIG5lZWQgdG8gYmUgVmkgY29tcGF0aWJsZSBoZXJlLiAqLworCXBfY3BvID0gKGNoYXJfdSAqKSIiOworCXVfdW5kbygxKTsKKwlwX2NwbyA9IHNhdmVfY3BvOworCWd1aV91cGRhdGVfc2NyZWVuKCk7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qIEdldCB0aGUgc2VhcmNoL3JlcGxhY2Ugc3RyaW5ncyBmcm9tIHRoZSBkaWFsb2cgKi8KKyAgICBpZiAoZmxhZ3MgPT0gRlJEX0ZJTkRORVhUKQorICAgIHsKKwlyZXBsX3RleHQgPSBOVUxMOworCXNmciA9ICZmaW5kX3dpZGdldHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJcmVwbF90ZXh0ID0gWG1UZXh0RmllbGRHZXRTdHJpbmcocmVwbF93aWRnZXRzLndpdGgpOworCXNmciA9ICZyZXBsX3dpZGdldHM7CisgICAgfQorICAgIGZpbmRfdGV4dCA9IFhtVGV4dEZpZWxkR2V0U3RyaW5nKHNmci0+d2hhdCk7CisgICAgWHRWYUdldFZhbHVlcyhzZnItPmRvd24sIFhtTnNldCwgJmRpcmVjdGlvbl9kb3duLCBOVUxMKTsKKyAgICBYdFZhR2V0VmFsdWVzKHNmci0+d3dvcmQsIFhtTnNldCwgJnd3b3JkLCBOVUxMKTsKKyAgICBYdFZhR2V0VmFsdWVzKHNmci0+bWNhc2UsIFhtTnNldCwgJm1jYXNlLCBOVUxMKTsKKyAgICBpZiAod3dvcmQpCisJZmxhZ3MgfD0gRlJEX1dIT0xFX1dPUkQ7CisgICAgaWYgKG1jYXNlKQorCWZsYWdzIHw9IEZSRF9NQVRDSF9DQVNFOworCisgICAgKHZvaWQpZ3VpX2RvX2ZpbmRyZXBsKChpbnQpZmxhZ3MsIChjaGFyX3UgKilmaW5kX3RleHQsIChjaGFyX3UgKilyZXBsX3RleHQsCisJCQkJCQkJICAgICAgZGlyZWN0aW9uX2Rvd24pOworCisgICAgaWYgKGZpbmRfdGV4dCAhPSBOVUxMKQorCVh0RnJlZShmaW5kX3RleHQpOworICAgIGlmIChyZXBsX3RleHQgIT0gTlVMTCkKKwlYdEZyZWUocmVwbF90ZXh0KTsKK30KKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ZpbmRfcmVwbGFjZV9rZXlwcmVzcyh3LCBmcmRwLCBldmVudCkKKyAgICBXaWRnZXQJCXc7CisgICAgU2hhcmVkRmluZFJlcGxhY2UJKmZyZHA7CisgICAgWEtleUV2ZW50CQkqZXZlbnQ7Cit7CisgICAgS2V5U3ltIGtleXN5bTsKKworICAgIGlmIChmcmRwID09IE5VTEwpCisJcmV0dXJuOworCisgICAga2V5c3ltID0gWExvb2t1cEtleXN5bShldmVudCwgMCk7CisKKyAgICAvKiB0aGUgc2NhcGUga2V5IHBvcHMgdGhlIHdob2xlIGRpYWxvZyBkb3duICovCisgICAgaWYgKGtleXN5bSA9PSBYS19Fc2NhcGUpCisJWHRVbm1hbmFnZUNoaWxkKGZyZHAtPmRpYWxvZyk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZmluZF9yZXBsYWNlX2RpYWxvZ19jcmVhdGUoYXJnLCBkb19yZXBsYWNlKQorICAgIGNoYXJfdQkqYXJnOworICAgIGludAkJZG9fcmVwbGFjZTsKK3sKKyAgICBTaGFyZWRGaW5kUmVwbGFjZQkqZnJkcDsKKyAgICBXaWRnZXQJCXNlcGFyYXRvcjsKKyAgICBXaWRnZXQJCWlucHV0X2Zvcm07CisgICAgV2lkZ2V0CQlidXR0b25fZm9ybTsKKyAgICBXaWRnZXQJCXRvZ2dsZV9mb3JtOworICAgIFdpZGdldAkJZnJhbWU7CisgICAgWG1TdHJpbmcJCXN0cjsKKyAgICBpbnQJCQluOworICAgIEFyZwkJCWFyZ3NbNl07CisgICAgaW50CQkJd3dvcmQgPSBGQUxTRTsKKyAgICBpbnQJCQltY2FzZSA9ICFwX2ljOworICAgIERpbWVuc2lvbgkJd2lkdGg7CisgICAgRGltZW5zaW9uCQl3aWRlc3Q7CisgICAgY2hhcl91CQkqZW50cnlfdGV4dDsKKworICAgIGZyZHAgPSBkb19yZXBsYWNlID8gJnJlcGxfd2lkZ2V0cyA6ICZmaW5kX3dpZGdldHM7CisKKyAgICAvKiBHZXQgdGhlIHNlYXJjaCBzdHJpbmcgdG8gdXNlLiAqLworICAgIGVudHJ5X3RleHQgPSBnZXRfZmluZF9kaWFsb2dfdGV4dChhcmcsICZ3d29yZCwgJm1jYXNlKTsKKworICAgIC8qIElmIHRoZSBkaWFsb2cgYWxyZWFkeSBleGlzdHMsIGp1c3QgcmFpc2UgaXQuICovCisgICAgaWYgKGZyZHAtPmRpYWxvZykKKyAgICB7CisJLyogSWYgdGhlIHdpbmRvdyBpcyBhbHJlYWR5IHVwLCBqdXN0IHBvcCBpdCB0byB0aGUgdG9wICovCisJaWYgKFh0SXNNYW5hZ2VkKGZyZHAtPmRpYWxvZykpCisJICAgIFhNYXBSYWlzZWQoWHREaXNwbGF5KGZyZHAtPmRpYWxvZyksCisJCQkJCSAgICBYdFdpbmRvdyhYdFBhcmVudChmcmRwLT5kaWFsb2cpKSk7CisJZWxzZQorCSAgICBYdE1hbmFnZUNoaWxkKGZyZHAtPmRpYWxvZyk7CisJWHRQb3B1cChYdFBhcmVudChmcmRwLT5kaWFsb2cpLCBYdEdyYWJOb25lKTsKKwlYbVByb2Nlc3NUcmF2ZXJzYWwoZnJkcC0+d2hhdCwgWG1UUkFWRVJTRV9DVVJSRU5UKTsKKworCWlmIChlbnRyeV90ZXh0ICE9IE5VTEwpCisJICAgIFhtVGV4dEZpZWxkU2V0U3RyaW5nKGZyZHAtPndoYXQsIChjaGFyICopZW50cnlfdGV4dCk7CisJdmltX2ZyZWUoZW50cnlfdGV4dCk7CisKKwlYdFZhU2V0VmFsdWVzKGZyZHAtPnd3b3JkLCBYbU5zZXQsIHd3b3JkLCBOVUxMKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogQ3JlYXRlIGEgZnJlc2ggbmV3IGRpYWxvZyB3aW5kb3cgKi8KKyAgICBpZiAoZG9fcmVwbGFjZSkKKwkgc3RyID0gWG1TdHJpbmdDcmVhdGVTaW1wbGUoXygiVklNIC0gU2VhcmNoIGFuZCBSZXBsYWNlLi4uIikpOworICAgIGVsc2UKKwkgc3RyID0gWG1TdHJpbmdDcmVhdGVTaW1wbGUoXygiVklNIC0gU2VhcmNoLi4uIikpOworCisgICAgbiA9IDA7CisgICAgWHRTZXRBcmcoYXJnc1tuXSwgWG1OYXV0b1VubWFuYWdlLCBGYWxzZSk7IG4rKzsKKyAgICBYdFNldEFyZyhhcmdzW25dLCBYbU5ub1Jlc2l6ZSwgVHJ1ZSk7IG4rKzsKKyAgICBYdFNldEFyZyhhcmdzW25dLCBYbU5kaWFsb2dUaXRsZSwgc3RyKTsgbisrOworCisgICAgZnJkcC0+ZGlhbG9nID0gWG1DcmVhdGVGb3JtRGlhbG9nKHZpbVNoZWxsLCAiZmluZFJlcGxhY2VEaWFsb2ciLCBhcmdzLCBuKTsKKyAgICBYbVN0cmluZ0ZyZWUoc3RyKTsKKyAgICBYdEFkZENhbGxiYWNrKGZyZHAtPmRpYWxvZywgWG1OZGVzdHJveUNhbGxiYWNrLAorCSAgICBmaW5kX3JlcGxhY2VfZGVzdHJveV9jYWxsYmFjaywgZnJkcCk7CisKKyAgICBidXR0b25fZm9ybSA9IFh0VmFDcmVhdGVXaWRnZXQoImJ1dHRvbkZvcm0iLAorCSAgICB4bUZvcm1XaWRnZXRDbGFzcywJZnJkcC0+ZGlhbG9nLAorCSAgICBYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJICAgIFhtTnJpZ2h0T2Zmc2V0LCA0LAorCSAgICBYbU50b3BBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCSAgICBYbU50b3BPZmZzZXQsIDQsCisJICAgIFhtTmJvdHRvbUF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJICAgIFhtTmJvdHRvbU9mZnNldCwgNCwKKwkgICAgTlVMTCk7CisKKyAgICBzdHIgPSBYbVN0cmluZ0NyZWF0ZVNpbXBsZShfKCJGaW5kIE5leHQiKSk7CisgICAgZnJkcC0+ZmluZCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJmaW5kQnV0dG9uIiwKKwkgICAgeG1QdXNoQnV0dG9uV2lkZ2V0Q2xhc3MsIGJ1dHRvbl9mb3JtLAorCSAgICBYbU5sYWJlbFN0cmluZywgc3RyLAorCSAgICBYbU5zZW5zaXRpdmUsIFRydWUsCisJICAgIFhtTnRvcEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJICAgIFhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCSAgICBYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJICAgIE5VTEwpOworICAgIFhtU3RyaW5nRnJlZShzdHIpOworCisgICAgWHRBZGRDYWxsYmFjayhmcmRwLT5maW5kLCBYbU5hY3RpdmF0ZUNhbGxiYWNrLAorCSAgICBmaW5kX3JlcGxhY2VfY2FsbGJhY2ssCisJICAgIChYdFBvaW50ZXIpIChkb19yZXBsYWNlID8gRlJEX1JfRklORE5FWFQgOiBGUkRfRklORE5FWFQpKTsKKworICAgIGlmIChkb19yZXBsYWNlKQorICAgIHsKKwlzdHIgPSBYbVN0cmluZ0NyZWF0ZVNpbXBsZShfKCJSZXBsYWNlIikpOworCWZyZHAtPnJlcGxhY2UgPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgicmVwbGFjZUJ1dHRvbiIsCisJCXhtUHVzaEJ1dHRvbldpZGdldENsYXNzLCBidXR0b25fZm9ybSwKKwkJWG1ObGFiZWxTdHJpbmcsIHN0ciwKKwkJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQlYbU50b3BXaWRnZXQsIGZyZHAtPmZpbmQsCisJCVhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQlYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCU5VTEwpOworCVhtU3RyaW5nRnJlZShzdHIpOworCVh0QWRkQ2FsbGJhY2soZnJkcC0+cmVwbGFjZSwgWG1OYWN0aXZhdGVDYWxsYmFjaywKKwkJZmluZF9yZXBsYWNlX2NhbGxiYWNrLCAoWHRQb2ludGVyKUZSRF9SRVBMQUNFKTsKKworCXN0ciA9IFhtU3RyaW5nQ3JlYXRlU2ltcGxlKF8oIlJlcGxhY2UgQWxsIikpOworCWZyZHAtPmFsbCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJyZXBsYWNlQWxsQnV0dG9uIiwKKwkJeG1QdXNoQnV0dG9uV2lkZ2V0Q2xhc3MsIGJ1dHRvbl9mb3JtLAorCQlYbU5sYWJlbFN0cmluZywgc3RyLAorCQlYbU50b3BBdHRhY2htZW50LCBYbUFUVEFDSF9XSURHRVQsCisJCVhtTnRvcFdpZGdldCwgZnJkcC0+cmVwbGFjZSwKKwkJWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCVhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkJTlVMTCk7CisJWG1TdHJpbmdGcmVlKHN0cik7CisJWHRBZGRDYWxsYmFjayhmcmRwLT5hbGwsIFhtTmFjdGl2YXRlQ2FsbGJhY2ssCisJCWZpbmRfcmVwbGFjZV9jYWxsYmFjaywgKFh0UG9pbnRlcilGUkRfUkVQTEFDRUFMTCk7CisKKwlzdHIgPSBYbVN0cmluZ0NyZWF0ZVNpbXBsZShfKCJVbmRvIikpOworCWZyZHAtPnVuZG8gPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgidW5kb0J1dHRvbiIsCisJCXhtUHVzaEJ1dHRvbldpZGdldENsYXNzLCBidXR0b25fZm9ybSwKKwkJWG1ObGFiZWxTdHJpbmcsIHN0ciwKKwkJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQlYbU50b3BXaWRnZXQsIGZyZHAtPmFsbCwKKwkJWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCVhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkJTlVMTCk7CisJWG1TdHJpbmdGcmVlKHN0cik7CisJWHRBZGRDYWxsYmFjayhmcmRwLT51bmRvLCBYbU5hY3RpdmF0ZUNhbGxiYWNrLAorCQlmaW5kX3JlcGxhY2VfY2FsbGJhY2ssIChYdFBvaW50ZXIpRlJEX1VORE8pOworICAgIH0KKworICAgIHN0ciA9IFhtU3RyaW5nQ3JlYXRlU2ltcGxlKF8oIkNhbmNlbCIpKTsKKyAgICBmcmRwLT5jYW5jZWwgPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgiY2xvc2VCdXR0b24iLAorCSAgICB4bVB1c2hCdXR0b25XaWRnZXRDbGFzcywgYnV0dG9uX2Zvcm0sCisJICAgIFhtTmxhYmVsU3RyaW5nLCBzdHIsCisJICAgIFhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCSAgICBYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJICAgIFhtTmJvdHRvbUF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJICAgIE5VTEwpOworICAgIFhtU3RyaW5nRnJlZShzdHIpOworICAgIFh0QWRkQ2FsbGJhY2soZnJkcC0+Y2FuY2VsLCBYbU5hY3RpdmF0ZUNhbGxiYWNrLAorCSAgICBmaW5kX3JlcGxhY2VfZGlzbWlzc19jYWxsYmFjaywgZnJkcCk7CisKKyAgICBYdE1hbmFnZUNoaWxkKGJ1dHRvbl9mb3JtKTsKKworICAgIG4gPSAwOworICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTm9yaWVudGF0aW9uLCBYbVZFUlRJQ0FMKTsgbisrOworICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VUKTsgbisrOworICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTnJpZ2h0V2lkZ2V0LCBidXR0b25fZm9ybSk7IG4rKzsKKyAgICBYdFNldEFyZyhhcmdzW25dLCBYbU5yaWdodE9mZnNldCwgNCk7IG4rKzsKKyAgICBYdFNldEFyZyhhcmdzW25dLCBYbU50b3BBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNKTsgbisrOworICAgIFh0U2V0QXJnKGFyZ3Nbbl0sIFhtTmJvdHRvbUF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0pOyBuKys7CisgICAgc2VwYXJhdG9yID0gWG1DcmVhdGVTZXBhcmF0b3JHYWRnZXQoZnJkcC0+ZGlhbG9nLCAic2VwYXJhdG9yIiwgYXJncywgbik7CisgICAgWHRNYW5hZ2VDaGlsZChzZXBhcmF0b3IpOworCisgICAgaW5wdXRfZm9ybSA9IFh0VmFDcmVhdGVXaWRnZXQoImlucHV0Rm9ybSIsCisJICAgIHhtRm9ybVdpZGdldENsYXNzLAlmcmRwLT5kaWFsb2csCisJICAgIFhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCSAgICBYbU5sZWZ0T2Zmc2V0LCA0LAorCSAgICBYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX1dJREdFVCwKKwkgICAgWG1OcmlnaHRXaWRnZXQsIHNlcGFyYXRvciwKKwkgICAgWG1OcmlnaHRPZmZzZXQsIDQsCisJICAgIFhtTnRvcEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJICAgIFhtTnRvcE9mZnNldCwgNCwKKwkgICAgTlVMTCk7CisKKyAgICB7CisJV2lkZ2V0IGxhYmVsX3doYXQ7CisJV2lkZ2V0IGxhYmVsX3dpdGggPSAoV2lkZ2V0KTA7CisKKwlzdHIgPSBYbVN0cmluZ0NyZWF0ZVNpbXBsZShfKCJGaW5kIHdoYXQ6IikpOworCWxhYmVsX3doYXQgPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgid2hhdExhYmVsIiwKKwkJeG1MYWJlbEdhZGdldENsYXNzLCBpbnB1dF9mb3JtLAorCQlYbU5sYWJlbFN0cmluZywgc3RyLAorCQlYbU5sZWZ0QXR0YWNobWVudCwJWG1BVFRBQ0hfRk9STSwKKwkJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkJWG1OdG9wT2Zmc2V0LCA0LAorCQlOVUxMKTsKKwlYbVN0cmluZ0ZyZWUoc3RyKTsKKworCWZyZHAtPndoYXQgPSBYdFZhQ3JlYXRlTWFuYWdlZFdpZGdldCgid2hhdFRleHQiLAorCQl4bVRleHRGaWVsZFdpZGdldENsYXNzLCBpbnB1dF9mb3JtLAorCQlYbU50b3BBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQlYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCVhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQlOVUxMKTsKKworCWlmIChkb19yZXBsYWNlKQorCXsKKwkgICAgZnJkcC0+d2l0aCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJ3aXRoVGV4dCIsCisJCSAgICB4bVRleHRGaWVsZFdpZGdldENsYXNzLAlpbnB1dF9mb3JtLAorCQkgICAgWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQkgICAgWG1OdG9wV2lkZ2V0LCBmcmRwLT53aGF0LAorCQkgICAgWG1OdG9wT2Zmc2V0LCA0LAorCQkgICAgWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCSAgICBYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJCSAgICBYbU5ib3R0b21BdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQkgICAgTlVMTCk7CisKKwkgICAgWHRBZGRDYWxsYmFjayhmcmRwLT53aXRoLCBYbU5hY3RpdmF0ZUNhbGxiYWNrLAorCQkgICAgZmluZF9yZXBsYWNlX2NhbGxiYWNrLCAoWHRQb2ludGVyKSBGUkRfUl9GSU5ETkVYVCk7CisKKwkgICAgc3RyID0gWG1TdHJpbmdDcmVhdGVTaW1wbGUoXygiUmVwbGFjZSB3aXRoOiIpKTsKKwkgICAgbGFiZWxfd2l0aCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJ3aXRoTGFiZWwiLAorCQkgICAgeG1MYWJlbEdhZGdldENsYXNzLCBpbnB1dF9mb3JtLAorCQkgICAgWG1ObGFiZWxTdHJpbmcsIHN0ciwKKwkJICAgIFhtTmxlZnRBdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCQkgICAgWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQkgICAgWG1OdG9wV2lkZ2V0LCBmcmRwLT53aGF0LAorCQkgICAgWG1OdG9wT2Zmc2V0LCA0LAorCQkgICAgWG1OYm90dG9tQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkJICAgIE5VTEwpOworCSAgICBYbVN0cmluZ0ZyZWUoc3RyKTsKKworCSAgICAvKgorCSAgICAgKiBNYWtlIHRoZSBlbnRyeSBhY3RpdmF0aW9uIG9ubHkgY2hhbmdlIHRoZSBpbnB1dCBmb2N1cyBvbnRvIHRoZQorCSAgICAgKiB3aXRoIGl0ZW0uCisJICAgICAqLworCSAgICBYdEFkZENhbGxiYWNrKGZyZHAtPndoYXQsIFhtTmFjdGl2YXRlQ2FsbGJhY2ssCisJCSAgICBlbnRyeV9hY3RpdmF0ZV9jYWxsYmFjaywgZnJkcC0+d2l0aCk7CisJICAgIFh0QWRkRXZlbnRIYW5kbGVyKGZyZHAtPndpdGgsIEtleVByZXNzTWFzaywgRmFsc2UsCisJCQkgICAgKFh0RXZlbnRIYW5kbGVyKWZpbmRfcmVwbGFjZV9rZXlwcmVzcywKKwkJCSAgICAoWHRQb2ludGVyKSBmcmRwKTsKKworCX0KKwllbHNlCisJeworCSAgICAvKgorCSAgICAgKiBNYWtlIHRoZSBlbnRyeSBhY3RpdmF0aW9uIGRvIHRoZSBzZWFyY2guCisJICAgICAqLworCSAgICBYdEFkZENhbGxiYWNrKGZyZHAtPndoYXQsIFhtTmFjdGl2YXRlQ2FsbGJhY2ssCisJCSAgICBmaW5kX3JlcGxhY2VfY2FsbGJhY2ssIChYdFBvaW50ZXIpRlJEX0ZJTkRORVhUKTsKKwl9CisJWHRBZGRFdmVudEhhbmRsZXIoZnJkcC0+d2hhdCwgS2V5UHJlc3NNYXNrLCBGYWxzZSwKKwkJCSAgICAoWHRFdmVudEhhbmRsZXIpZmluZF9yZXBsYWNlX2tleXByZXNzLAorCQkJICAgIChYdFBvaW50ZXIpZnJkcCk7CisKKwkvKiBHZXQgdGhlIG1heGltdW0gd2lkdGggYmV0d2VlbiB0aGUgbGFiZWwgd2lkZ2V0cyBhbmQgbGluZSB0aGVtIHVwLgorCSAqLworCW4gPSAwOworCVh0U2V0QXJnKGFyZ3Nbbl0sIFhtTndpZHRoLCAmd2lkdGgpOyBuKys7CisJWHRHZXRWYWx1ZXMobGFiZWxfd2hhdCwgYXJncywgbik7CisJd2lkZXN0ID0gd2lkdGg7CisJaWYgKGRvX3JlcGxhY2UpCisJeworCSAgICBYdEdldFZhbHVlcyhsYWJlbF93aXRoLCBhcmdzLCBuKTsKKwkgICAgaWYgKHdpZHRoID4gd2lkZXN0KQorCQl3aWRlc3QgPSB3aWR0aDsKKwl9CisKKwlYdFZhU2V0VmFsdWVzKGZyZHAtPndoYXQsIFhtTmxlZnRPZmZzZXQsIHdpZGVzdCwgTlVMTCk7CisJaWYgKGRvX3JlcGxhY2UpCisJICAgIFh0VmFTZXRWYWx1ZXMoZnJkcC0+d2l0aCwgWG1ObGVmdE9mZnNldCwgd2lkZXN0LCBOVUxMKTsKKworICAgIH0KKworICAgIFh0TWFuYWdlQ2hpbGQoaW5wdXRfZm9ybSk7CisKKyAgICB7CisJV2lkZ2V0IHJhZGlvX2JveDsKKworCWZyYW1lID0gWHRWYUNyZWF0ZVdpZGdldCgiZGlyZWN0aW9uRnJhbWUiLAorCQl4bUZyYW1lV2lkZ2V0Q2xhc3MsIGZyZHAtPmRpYWxvZywKKwkJWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCQlYbU50b3BXaWRnZXQsIGlucHV0X2Zvcm0sCisJCVhtTnRvcE9mZnNldCwgNCwKKwkJWG1OYm90dG9tQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkJWG1OYm90dG9tT2Zmc2V0LCA0LAorCQlYbU5yaWdodEF0dGFjaG1lbnQsIFhtQVRUQUNIX09QUE9TSVRFX1dJREdFVCwKKwkJWG1OcmlnaHRXaWRnZXQsIGlucHV0X2Zvcm0sCisJCU5VTEwpOworCisJc3RyID0gWG1TdHJpbmdDcmVhdGVTaW1wbGUoXygiRGlyZWN0aW9uIikpOworCSh2b2lkKVh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJkaXJlY3Rpb25GcmFtZUxhYmVsIiwKKwkJeG1MYWJlbEdhZGdldENsYXNzLCBmcmFtZSwKKwkJWG1ObGFiZWxTdHJpbmcsIHN0ciwKKwkJWG1OY2hpbGRIb3Jpem9udGFsQWxpZ25tZW50LCBYbUFMSUdOTUVOVF9CRUdJTk5JTkcsCisJCVhtTmNoaWxkVHlwZSwgWG1GUkFNRV9USVRMRV9DSElMRCwKKwkJTlVMTCk7CisJWG1TdHJpbmdGcmVlKHN0cik7CisKKwlyYWRpb19ib3ggPSBYbUNyZWF0ZVJhZGlvQm94KGZyYW1lLCAicmFkaW9Cb3giLAorCQkoQXJnTGlzdClOVUxMLCAwKTsKKworCXN0ciA9IFhtU3RyaW5nQ3JlYXRlU2ltcGxlKCBfKCJVcCIpKTsKKwlmcmRwLT51cCA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJ1cFJhZGlvQnV0dG9uIiwKKwkJeG1Ub2dnbGVCdXR0b25HYWRnZXRDbGFzcywgcmFkaW9fYm94LAorCQlYbU5sYWJlbFN0cmluZywgc3RyLAorCQlYbU5zZXQsIEZhbHNlLAorCQlOVUxMKTsKKwlYbVN0cmluZ0ZyZWUoc3RyKTsKKworCXN0ciA9IFhtU3RyaW5nQ3JlYXRlU2ltcGxlKF8oIkRvd24iKSk7CisJZnJkcC0+ZG93biA9IFh0VmFDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJkb3duUmFkaW9CdXR0b24iLAorCQl4bVRvZ2dsZUJ1dHRvbkdhZGdldENsYXNzLCByYWRpb19ib3gsCisJCVhtTmxhYmVsU3RyaW5nLCBzdHIsCisJCVhtTnNldCwgVHJ1ZSwKKwkJTlVMTCk7CisJWG1TdHJpbmdGcmVlKHN0cik7CisKKwlYdE1hbmFnZUNoaWxkKHJhZGlvX2JveCk7CisJWHRNYW5hZ2VDaGlsZChmcmFtZSk7CisgICAgfQorCisgICAgdG9nZ2xlX2Zvcm0gPSBYdFZhQ3JlYXRlV2lkZ2V0KCJ0b2dnbGVGb3JtIiwKKwkgICAgeG1Gb3JtV2lkZ2V0Q2xhc3MsCWZyZHAtPmRpYWxvZywKKwkgICAgWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJICAgIFhtTmxlZnRPZmZzZXQsIDQsCisJICAgIFhtTnJpZ2h0QXR0YWNobWVudCwgWG1BVFRBQ0hfV0lER0VULAorCSAgICBYbU5yaWdodFdpZGdldCwgZnJhbWUsCisJICAgIFhtTnJpZ2h0T2Zmc2V0LCA0LAorCSAgICBYbU50b3BBdHRhY2htZW50LCBYbUFUVEFDSF9XSURHRVQsCisJICAgIFhtTnRvcFdpZGdldCwgaW5wdXRfZm9ybSwKKwkgICAgWG1OdG9wT2Zmc2V0LCA0LAorCSAgICBYbU5ib3R0b21BdHRhY2htZW50LCBYbUFUVEFDSF9GT1JNLAorCSAgICBYbU5ib3R0b21PZmZzZXQsIDQsCisJICAgIE5VTEwpOworCisgICAgc3RyID0gWG1TdHJpbmdDcmVhdGVTaW1wbGUoXygiTWF0Y2ggd2hvbGUgd29yZCBvbmx5IikpOworICAgIGZyZHAtPnd3b3JkID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoIndvcmRUb2dnbGUiLAorCSAgICB4bVRvZ2dsZUJ1dHRvbkdhZGdldENsYXNzLCB0b2dnbGVfZm9ybSwKKwkgICAgWG1ObGFiZWxTdHJpbmcsIHN0ciwKKwkgICAgWG1OdG9wQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkgICAgWG1OdG9wT2Zmc2V0LCA0LAorCSAgICBYbU5sZWZ0QXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSwKKwkgICAgWG1ObGVmdE9mZnNldCwgNCwKKwkgICAgWG1Oc2V0LCB3d29yZCwKKwkgICAgTlVMTCk7CisgICAgWG1TdHJpbmdGcmVlKHN0cik7CisKKyAgICBzdHIgPSBYbVN0cmluZ0NyZWF0ZVNpbXBsZShfKCJNYXRjaCBjYXNlIikpOworICAgIGZyZHAtPm1jYXNlID0gWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoImNhc2VUb2dnbGUiLAorCSAgICB4bVRvZ2dsZUJ1dHRvbkdhZGdldENsYXNzLCB0b2dnbGVfZm9ybSwKKwkgICAgWG1ObGFiZWxTdHJpbmcsIHN0ciwKKwkgICAgWG1ObGVmdEF0dGFjaG1lbnQsIFhtQVRUQUNIX0ZPUk0sCisJICAgIFhtTmxlZnRPZmZzZXQsIDQsCisJICAgIFhtTnRvcEF0dGFjaG1lbnQsIFhtQVRUQUNIX1dJREdFVCwKKwkgICAgWG1OdG9wV2lkZ2V0LCBmcmRwLT53d29yZCwKKwkgICAgWG1OdG9wT2Zmc2V0LCA0LAorCSAgICBYbU5zZXQsIG1jYXNlLAorCSAgICBOVUxMKTsKKyAgICBYbVN0cmluZ0ZyZWUoc3RyKTsKKworICAgIFh0TWFuYWdlQ2hpbGQodG9nZ2xlX2Zvcm0pOworCisgICAgaWYgKGVudHJ5X3RleHQgIT0gTlVMTCkKKwlYbVRleHRGaWVsZFNldFN0cmluZyhmcmRwLT53aGF0LCAoY2hhciAqKWVudHJ5X3RleHQpOworICAgIHZpbV9mcmVlKGVudHJ5X3RleHQpOworCisgICAgWHRNYW5hZ2VDaGlsZChmcmRwLT5kaWFsb2cpOworICAgIFhtUHJvY2Vzc1RyYXZlcnNhbChmcmRwLT53aGF0LCBYbVRSQVZFUlNFX0NVUlJFTlQpOworfQorCisgICB2b2lkCitndWlfbWNoX2ZpbmRfZGlhbG9nKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKCFndWkuaW5fdXNlKQorCXJldHVybjsKKworICAgIGZpbmRfcmVwbGFjZV9kaWFsb2dfY3JlYXRlKGVhcC0+YXJnLCBGQUxTRSk7Cit9CisKKworICAgIHZvaWQKK2d1aV9tY2hfcmVwbGFjZV9kaWFsb2coZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpZiAoIWd1aS5pbl91c2UpCisJcmV0dXJuOworCisgICAgZmluZF9yZXBsYWNlX2RpYWxvZ19jcmVhdGUoZWFwLT5hcmcsIFRSVUUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2d1aV9waG90b24uYyBiL3NyYy9ndWlfcGhvdG9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiZDVmMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfcGhvdG9uLmMKQEAgLTAsMCArMSwzMDYwIEBACisvKiB2aTpzZXQgdHM9OCBzdz00IHN0cz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCVBob3RvbiBHVUkgc3VwcG9ydCBieSBKdWxpYW4gS2lucmFpZAorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKgorICoKKyAqIENsaXBib2FyZCBzdXBwb3J0IGlzIGluIG9zX3FueC5jCisgKiBQaEF0dGFjaCgpIGlzIGNhbGxlZCBpbiBvc19xbnguYzpxbnhfaW5pdCgpCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisjaWZkZWYgRkVBVF9UT09MQkFSCisjIGluY2x1ZGUgPHBob3Rvbi9QeEltYWdlLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fUU5YX18pCisvKiBVc2VkIHdoZW4gZ2VuZXJhdGluZyBwcm90b3R5cGVzLiAqLworIyBkZWZpbmUgUGdDb2xvcl90CWludAorIyBkZWZpbmUgUGhFdmVudF90CWludAorIyBkZWZpbmUgUGhQb2ludF90CWludAorIyBkZWZpbmUgUHRXaWRnZXRfdAlpbnQKKyMgZGVmaW5lIFBnX0JMQUNLCTAKKyMgZGVmaW5lIFB0Q2FsbGJhY2tGX3QJaW50CisjIGRlZmluZSBQdENhbGxiYWNrSW5mb190IGludAorIyBkZWZpbmUgUGhUaWxlX3QJaW50CisjIGRlZmluZSBQdFdpZGdldF90CWludAorIyBkZWZpbmUgUGhJbWFnZV90CWludAorI2VuZGlmCisKKyNkZWZpbmUgQVJSQVlfTEVOR1RIKGEpIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCisjZGVmaW5lIFJHQihyLGcsYikgUGdSR0IocixnLGIpCisKKyNkZWZpbmUgRVZFTlRfQlVGRkVSX1NJWkUgc2l6ZW9mKCBQaEV2ZW50X3QgKSArIDEwMDAKKworLyogU29tZSBkZWZpbmVzIGZvciBndWlfbWNoX21vdXNlaGlkZSgpICovCisjZGVmaW5lIE1PVVNFX0hJREUJCVRSVUUKKyNkZWZpbmUgTU9VU0VfU0hPVwkJRkFMU0UKKworLyogT3B0aW9uYWwgc3VwcG9ydCBmb3IgdXNpbmcgYSBQdFBhbmVsR3JvdXAgd2lkZ2V0LCBuZWVkcyB3b3JrICovCisjdW5kZWYgVVNFX1BBTkVMX0dST1VQCisKKyNpZmRlZiBVU0VfUEFORUxfR1JPVVAKK3N0YXRpYyBjaGFyCSplbXB0eV90aXRsZSA9ICIgICAgIjsKK3N0YXRpYyBjaGFyCSoqcGFuZWxfdGl0bGVzID0gTlVMTDsKK3N0YXRpYyB1c2hvcnRfdAludW1fcGFuZWxzID0gMDsKK3N0YXRpYyBzaG9ydCBwZ19tYXJnaW5fbGVmdCwgcGdfbWFyZ2luX3JpZ2h0LCBwZ19tYXJnaW5fdG9wLCBwZ19tYXJnaW5fYm90dG9tOworI2VuZGlmCisKKyNkZWZpbmUgR1VJX1BIX01BUkdJTgkJNAkvKiBTaXplIG9mIHRoZSBiZXZlbCAqLworCisjZGVmaW5lIEdVSV9QSF9NT1VTRV9UWVBFCQlQaF9DVVJTT1JfSU5TRVJUCitzdGF0aWMgUGdDb2xvcl90IGd1aV9waF9tb3VzZV9jb2xvciA9CVBnX0JMQUNLOworCitzdGF0aWMgUGhQb2ludF90ICAgIGd1aV9waF9yYXdfb2Zmc2V0Oworc3RhdGljIFB0V2lkZ2V0X3QgICAqZ3VpX3BoX3RpbWVyX2N1cnNvcjsgICAvKiBoYW5kbGUgY3Vyc29yIGJsaW5raW5nICovCitzdGF0aWMgUHRXaWRnZXRfdCAgICpndWlfcGhfdGltZXJfdGltZW91dDsgIC8qIHVzZWQgaW4gZ3VpX21jaF93YWl0X2Zvcl9jaGFycyAqLworc3RhdGljIHNob3J0CSAgICBpc190aW1lb3V0OwkJICAgIC8qIEhhcyB0aGUgdGltZW91dCBvY2N1cmVkPyAqLworCisvKgorICogVGhpcyBpcyBzZXQgaW5zaWRlIHRoZSBtb3VzZSBjYWxsYmFjayBmb3IgYSByaWdodCBtb3VzZQorICogYnV0dG9uIGNsaWNrLCBhbmQgdXNlZCBmb3IgdGhlIHBvcHVwIG1lbnVzCisgKi8KK3N0YXRpYyBQaFBvaW50X3QgICAgYWJzX21vdXNlOworCisvKiBUcnkgYW5kIGF2b2lkIHJlZHJhd3Mgd2hpbGUgYSByZXNpemUgaXMgaW4gcHJvZ3Jlc3MgKi8KK3N0YXRpYyBpbnQgaXNfaWdub3JlX2RyYXcgPSBGQUxTRTsKKworLyogVXNlZCBmb3IgY29udmVydGluZyB0by9mcm9tIHV0Zi04IGFuZCBvdGhlciBjaGFyc2V0cyAqLworc3RhdGljIHN0cnVjdCBQeFRyYW5zQ3RybCAqY2hhcnNldF90cmFuc2xhdGU7CisKKy8qCisgKiBDdXJzb3IgYmxpbmsgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgaXMgYSBzaW1wbGUgc3RhdGUgbWFjaGluZToKKyAqIEJMSU5LX05PTkUJbm90IGJsaW5raW5nIGF0IGFsbAorICogQkxJTktfT0ZGCWJsaW5raW5nLCBjdXJzb3IgaXMgbm90IHNob3duCisgKiBCTElOS19PTglibGlua2luZywgY3Vyc29yIGlzIHNob3duCisgKi8KK3N0YXRpYyBlbnVtIHsKKyAgICBCTElOS19OT05FLAorICAgIEJMSU5LX09GRiwKKyAgICBCTElOS19PTgorfSBibGlua19zdGF0ZSA9IEJMSU5LX05PTkU7CisKK3N0YXRpYyBsb25nX3UJYmxpbmtfd2FpdHRpbWUJPSA3MDA7CitzdGF0aWMgbG9uZ191CWJsaW5rX29udGltZQk9IDQwMDsKK3N0YXRpYyBsb25nX3UJYmxpbmtfb2ZmdGltZQk9IDI1MDsKKworc3RhdGljIHN0cnVjdAoreworICAgIGludAkgICAga2V5X3N5bTsKKyAgICBjaGFyX3UgIHZpbV9jb2RlMDsKKyAgICBjaGFyX3UgIHZpbV9jb2RlMTsKK30gc3BlY2lhbF9rZXlzW10gPQoreworICAgIHtQa19VcCwJICAgICdrJywgJ3UnfSwKKyAgICB7UGtfRG93biwJICAgICdrJywgJ2QnfSwKKyAgICB7UGtfTGVmdCwJICAgICdrJywgJ2wnfSwKKyAgICB7UGtfUmlnaHQsCSAgICAnaycsICdyJ30sCisKKyAgICB7UGtfRjEsCSAgICAnaycsICcxJ30sCisgICAge1BrX0YyLAkgICAgJ2snLCAnMid9LAorICAgIHtQa19GMywJICAgICdrJywgJzMnfSwKKyAgICB7UGtfRjQsCSAgICAnaycsICc0J30sCisgICAge1BrX0Y1LAkgICAgJ2snLCAnNSd9LAorICAgIHtQa19GNiwJICAgICdrJywgJzYnfSwKKyAgICB7UGtfRjcsCSAgICAnaycsICc3J30sCisgICAge1BrX0Y4LAkgICAgJ2snLCAnOCd9LAorICAgIHtQa19GOSwJICAgICdrJywgJzknfSwKKyAgICB7UGtfRjEwLAkgICAgJ2snLCAnOyd9LAorCisgICAge1BrX0YxMSwJICAgICdGJywgJzEnfSwKKyAgICB7UGtfRjEyLAkgICAgJ0YnLCAnMid9LAorICAgIHtQa19GMTMsCSAgICAnRicsICczJ30sCisgICAge1BrX0YxNCwJICAgICdGJywgJzQnfSwKKyAgICB7UGtfRjE1LAkgICAgJ0YnLCAnNSd9LAorICAgIHtQa19GMTYsCSAgICAnRicsICc2J30sCisgICAge1BrX0YxNywJICAgICdGJywgJzcnfSwKKyAgICB7UGtfRjE4LAkgICAgJ0YnLCAnOCd9LAorICAgIHtQa19GMTksCSAgICAnRicsICc5J30sCisgICAge1BrX0YyMCwJICAgICdGJywgJ0EnfSwKKworICAgIHtQa19GMjEsCSAgICAnRicsICdCJ30sCisgICAge1BrX0YyMiwJICAgICdGJywgJ0MnfSwKKyAgICB7UGtfRjIzLAkgICAgJ0YnLCAnRCd9LAorICAgIHtQa19GMjQsCSAgICAnRicsICdFJ30sCisgICAge1BrX0YyNSwJICAgICdGJywgJ0YnfSwKKyAgICB7UGtfRjI2LAkgICAgJ0YnLCAnRyd9LAorICAgIHtQa19GMjcsCSAgICAnRicsICdIJ30sCisgICAge1BrX0YyOCwJICAgICdGJywgJ0knfSwKKyAgICB7UGtfRjI5LAkgICAgJ0YnLCAnSid9LAorCisgICAge1BrX0YzMCwJICAgICdGJywgJ0snfSwKKyAgICB7UGtfRjMxLAkgICAgJ0YnLCAnTCd9LAorICAgIHtQa19GMzIsCSAgICAnRicsICdNJ30sCisgICAge1BrX0YzMywJICAgICdGJywgJ04nfSwKKyAgICB7UGtfRjM0LAkgICAgJ0YnLCAnTyd9LAorICAgIHtQa19GMzUsCSAgICAnRicsICdQJ30sCisKKyAgICB7UGtfSGVscCwJICAgICclJywgJzEnfSwKKyAgICB7UGtfQmFja1NwYWNlLCAgJ2snLCAnYid9LAorICAgIHtQa19JbnNlcnQsCSAgICAnaycsICdJJ30sCisgICAge1BrX0RlbGV0ZSwJICAgICdrJywgJ0QnfSwKKyAgICB7UGtfSG9tZSwJICAgICdrJywgJ2gnfSwKKyAgICB7UGtfRW5kLAkgICAgJ0AnLCAnNyd9LAorICAgIHtQa19QcmlvciwJICAgICdrJywgJ1AnfSwKKyAgICB7UGtfTmV4dCwJICAgICdrJywgJ04nfSwKKyAgICB7UGtfUHJpbnQsCSAgICAnJScsICc5J30sCisKKyAgICB7UGtfS1BfQWRkLAkgICAgJ0snLCAnNid9LAorICAgIHtQa19LUF9TdWJ0cmFjdCwnSycsICc3J30sCisgICAge1BrX0tQX0RpdmlkZSwgICdLJywgJzgnfSwKKyAgICB7UGtfS1BfTXVsdGlwbHksJ0snLCAnOSd9LAorICAgIHtQa19LUF9FbnRlciwgICAnSycsICdBJ30sCisKKyAgICB7UGtfS1BfMCwJICAgIEtTX0VYVFJBLCBLRV9LSU5TfSwgLyogSW5zZXJ0ICAgICovCisgICAge1BrX0tQX0RlY2ltYWwsIEtTX0VYVFJBLCBLRV9LREVMfSwgLyogRGVsZXRlICAgICovCisKKyAgICB7UGtfS1BfNCwJICAgICdrJywgJ2wnfSwgLyogTGVmdAkgICAgKi8KKyAgICB7UGtfS1BfNiwJICAgICdrJywgJ3InfSwgLyogUmlnaHQJICAgICovCisgICAge1BrX0tQXzgsCSAgICAnaycsICd1J30sIC8qIFVwCSAgICAqLworICAgIHtQa19LUF8yLAkgICAgJ2snLCAnZCd9LCAvKiBEb3duCSAgICAqLworCisgICAge1BrX0tQXzcsCSAgICAnSycsICcxJ30sIC8qIEhvbWUJICAgICovCisgICAge1BrX0tQXzEsCSAgICAnSycsICc0J30sIC8qIEVuZAkgICAgKi8KKworICAgIHtQa19LUF85LAkgICAgJ0snLCAnMyd9LCAvKiBQYWdlIFVwICAgKi8KKyAgICB7UGtfS1BfMywJICAgICdLJywgJzUnfSwgLyogUGFnZSBEb3duICovCisKKyAgICB7UGtfS1BfNSwJICAgICcmJywgJzgnfSwgLyogVW5kbwkgICAgKi8KKworICAgIC8qIEtleXMgdGhhdCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGFueSBtb2RpZmllciB3aXRoOiAqLworICAgIHtQa19SZXR1cm4sCSAgICBDQVIsICBOVUx9LAorICAgIHtQa19zcGFjZSwJICAgICcgJywgTlVMfSwKKyAgICB7UGtfVGFiLAkgICAgVEFCLCBOVUx9LAorICAgIHtQa19Fc2NhcGUsCSAgICBFU0MsIE5VTH0sCisgICAge05MLAkgICAgTkwsCSBOVUx9LAorICAgIHtDQVIsCSAgICBDQVIsICBOVUx9LAorCisgICAgLyogRW5kIG9mIGxpc3QgbWFya2VyOiAqLworICAgIHswLAkJMCwgMH0KK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBQdENhbGxiYWNrRl90IGd1aV9waF9oYW5kbGVfdGltZXJfY3Vyc29yOworc3RhdGljIFB0Q2FsbGJhY2tGX3QgZ3VpX3BoX2hhbmRsZV90aW1lcl90aW1lb3V0OworCitzdGF0aWMgUHRDYWxsYmFja0ZfdCBndWlfcGhfaGFuZGxlX3dpbmRvd19jYjsKKworc3RhdGljIFB0Q2FsbGJhY2tGX3QgZ3VpX3BoX2hhbmRsZV9zY3JvbGxiYXI7CitzdGF0aWMgUHRDYWxsYmFja0ZfdCBndWlfcGhfaGFuZGxlX2tleWJvYXJkOworc3RhdGljIFB0Q2FsbGJhY2tGX3QgZ3VpX3BoX2hhbmRsZV9tb3VzZTsKK3N0YXRpYyBQdENhbGxiYWNrRl90IGd1aV9waF9oYW5kbGVfcHVsbGRvd25fbWVudTsKK3N0YXRpYyBQdENhbGxiYWNrRl90IGd1aV9waF9oYW5kbGVfbWVudTsKK3N0YXRpYyBQdENhbGxiYWNrRl90IGd1aV9waF9oYW5kbGVfZm9jdXM7CS8qIGZvY3VzIGNoYW5nZSBvZiB0ZXh0IGFyZWEgKi8KKworc3RhdGljIFB0Q2FsbGJhY2tGX3QgZ3VpX3BoX2hhbmRsZV9tZW51X3Jlc2l6ZTsKKworLyogV2hlbiBhIG1lbnUgaXMgdW5yZWFsaXplZCwgZ2l2ZSBmb2N1cyBiYWNrIHRvIHZpbVRleHRBcmVhICovCitzdGF0aWMgUHRDYWxsYmFja0ZfdCBndWlfcGhfaGFuZGxlX21lbnVfdW5yZWFsaXplZDsKKworI2lmZGVmIFVTRV9QQU5FTF9HUk9VUAorc3RhdGljIHZvaWQgZ3VpX3BoX2dldF9wYW5lbGdyb3VwX21hcmdpbnMoIHNob3J0Kiwgc2hvcnQqLCBzaG9ydCosIHNob3J0KiApOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1RPT0xCQVIKK3N0YXRpYyBQaEltYWdlX3QgKmd1aV9waF90b29sYmFyX2ZpbmRfaWNvbiggdmltbWVudV9UICptZW51ICk7CisjZW5kaWYKKworc3RhdGljIHZvaWQgZ3VpX3BoX2RyYXdfc3RhcnQoIHZvaWQgKTsKK3N0YXRpYyB2b2lkIGd1aV9waF9kcmF3X2VuZCggdm9pZCApOworCisvKiBTZXQgdGhlIHRleHQgZm9yIHRoZSBiYWxsb29uICovCitzdGF0aWMgUHRXaWRnZXRfdCAqIGd1aV9waF9zaG93X3Rvb2x0aXAoIFB0V2lkZ2V0X3QgKndpbmRvdywKKwkJCSAgICAgUHRXaWRnZXRfdCAqd2lkZ2V0LAorCQkJICAgICBpbnQgcG9zaXRpb24sCisJCQkgICAgIGNoYXIgKnRleHQsCisJCQkgICAgIGNoYXIgKmZvbnQsCisJCQkgICAgIFBnQ29sb3JfdCBmaWxsX2NvbG9yLAorCQkJICAgICBQZ0NvbG9yX3QgdGV4dF9jb2xvciApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIFB0V2lkZ2V0X3QgKiBndWlfcGhfc2hvd190b29sdGlwKCBQdFdpZGdldF90ICp3aW5kb3csCisJCQkgICAgIFB0V2lkZ2V0X3QgKndpZGdldCwKKwkJCSAgICAgaW50IHBvc2l0aW9uLAorCQkJICAgICBjaGFyICp0ZXh0LAorCQkJICAgICBjaGFyICpmb250LAorCQkJICAgICBQZ0NvbG9yX3QgZmlsbF9jb2xvciwKKwkJCSAgICAgUGdDb2xvcl90IHRleHRfY29sb3IgKQoreworICAgIFB0QXJnX3QgYXJnOworICAgIHZpbW1lbnVfVCAqbWVudTsKKyAgICBjaGFyX3UgICp0b29sdGlwOworCisgICAgUHRTZXRBcmcoICZhcmcsIFB0X0FSR19QT0lOVEVSLCAmbWVudSwgMCApOworICAgIFB0R2V0UmVzb3VyY2VzKCB3aWRnZXQsIDEsICZhcmcgKTsKKworICAgIC8qIE92ZXJyaWRlIHRoZSB0ZXh0IGFuZCBwb3NpdGlvbiAqLworCisgICAgdG9vbHRpcCA9IHRleHQ7CisgICAgaWYoIG1lbnUgIT0gTlVMTCApCisgICAgeworCWludCBpbmRleCA9IE1FTlVfSU5ERVhfVElQOworCWlmKCBtZW51LT5zdHJpbmdzWyBpbmRleCBdICE9IE5VTEwgKQorCSAgICB0b29sdGlwID0gbWVudS0+c3RyaW5nc1sgaW5kZXggXTsKKyAgICB9CisKKyAgICByZXR1cm4oIFB0SW5mbGF0ZUJhbGxvb24oCisJICAgIHdpbmRvdywKKwkgICAgd2lkZ2V0LAorCSAgICAvKiBEb24ndCBwdXQgdGhlIGJhbGxvb24gYXQgdGhlIGJvdHRvbSwKKwkgICAgICogaXQgZ2V0cyBkcmF3biBvdmVyIGJ5IGdmeCBkb25lIGluIHRoZSBQdFJhdyAqLworCSAgICBQdF9CQUxMT09OX1RPUCwKKwkgICAgdG9vbHRpcCwKKwkgICAgZm9udCwKKwkgICAgZmlsbF9jb2xvciwKKwkgICAgdGV4dF9jb2xvciApICk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZ3VpX3BoX3Jlc2l6ZV9jb250YWluZXIoIHZvaWQgKQoreworICAgIFBoQXJlYV90IGFyZWE7CisKKyAgICBQdFdpZGdldEFyZWEoIGd1aS52aW1XaW5kb3csICZhcmVhICk7CisgICAgUHRXaWRnZXRQb3MgKCBndWkudmltQ29udGFpbmVyLCAmYXJlYS5wb3MgKTsKKworICAgIFB0U2V0UmVzb3VyY2UoIGd1aS52aW1Db250YWluZXIsIFB0X0FSR19BUkVBLCAmYXJlYSwgMCApOworfQorCisgICAgc3RhdGljIGludAorZ3VpX3BoX2hhbmRsZV9tZW51X3Jlc2l6ZSgKKwlQdFdpZGdldF90ICp3aWRnZXQsCisJdm9pZCAqb3RoZXIsCisJUHRDYWxsYmFja0luZm9fdCAqaW5mbyApCit7CisgICAgUHRDb250YWluZXJDYWxsYmFja190ICpzaXplcyA9IGluZm8tPmNiZGF0YTsKKyAgICBQdFdpZGdldF90CQkqY29udGFpbmVyOworICAgIFBoUG9pbnRfdAkJYmVsb3dfbWVudTsKKyAgICBpbnRfdQkJaGVpZ2h0OworCisgICAgaGVpZ2h0ID0gc2l6ZXMtPm5ld19kaW0uaDsKKworICAgIC8qIEJlY2F1c2UgdmltIHRyZWF0cyB0aGUgdG9vbGJhciBhbmQgbWVudWJhciBzZXBhcmF0bHksCisgICAgICogYW5kIGhlcmUgdGhleSdyZSBsdW1wZWQgdG9nZXRoZXIgaW50byBhIFB0VG9vbGJhckdyb3VwLAorICAgICAqIHdlIG9ubHkgbmVlZCBlaXRoZXIgbWVudV9oZWlnaHQgb3IgdG9vbGJhcl9oZWlnaHQgc2V0IGF0IG9uY2UgKi8KKyAgICBpZiggZ3VpLm1lbnVfaXNfYWN0aXZlICkKKyAgICB7CisJZ3VpLm1lbnVfaGVpZ2h0ID0gaGVpZ2h0OworCWd1aS50b29sYmFyX2hlaWdodCA9IDA7CisgICAgfQorI2lmZGVmIEZFQVRfVE9PTEJBUgorICAgIGVsc2UKKwlndWkudG9vbGJhcl9oZWlnaHQgPSBoZWlnaHQ7CisjZW5kaWYKKworICAgIGJlbG93X21lbnUueCA9IDA7CisgICAgYmVsb3dfbWVudS55ID0gaGVpZ2h0OworCisjaWZkZWYgVVNFX1BBTkVMX0dST1VQCisgICAgY29udGFpbmVyID0gZ3VpLnZpbVBhbmVsR3JvdXA7CisjZWxzZQorICAgIGNvbnRhaW5lciA9IGd1aS52aW1Db250YWluZXI7CisjZW5kaWYKKworICAgIFB0U2V0UmVzb3VyY2UoIGNvbnRhaW5lciwgUHRfQVJHX1BPUywgJmJlbG93X21lbnUsIDAgKTsKKworICAgIGd1aV9waF9yZXNpemVfY29udGFpbmVyKCk7CisKKyNpZmRlZiBVU0VfUEFORUxfR1JPVVAKKyAgICBndWlfcGhfZ2V0X3BhbmVsZ3JvdXBfbWFyZ2lucygKKwkgICAgJnBnX21hcmdpbl90b3AsICZwZ19tYXJnaW5fYm90dG9tLAorCSAgICAmcGdfbWFyZ2luX2xlZnQsICZwZ19tYXJnaW5fcmlnaHQgKTsKKyNlbmRpZgorICAgIHJldHVybiggUHRfQ09OVElOVUUgKTsKK30KKworLyoKKyAqIFB0X0FSR19USU1FUl9SRVBFQVQgaXNuJ3QgdXNlZCBiZWNhdXNlIHRoZSBvbiAmIG9mZiB0aW1lcworICogYXJlIGRpZmZlcmVudAorICovCisgICAgc3RhdGljIGludAorZ3VpX3BoX2hhbmRsZV90aW1lcl9jdXJzb3IoCisJUHRXaWRnZXRfdCAqd2lkZ2V0LAorCXZvaWQgKmRhdGEsCisJUHRDYWxsYmFja0luZm9fdCAqaW5mbyApCit7CisgICAgaWYoIGJsaW5rX3N0YXRlID09IEJMSU5LX09OICkKKyAgICB7CisJZ3VpX3VuZHJhd19jdXJzb3IoKTsKKwlibGlua19zdGF0ZSA9IEJMSU5LX09GRjsKKwlQdFNldFJlc291cmNlKCBndWlfcGhfdGltZXJfY3Vyc29yLCBQdF9BUkdfVElNRVJfSU5JVElBTCwKKwkJYmxpbmtfb2ZmdGltZSwgMCApOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKwlibGlua19zdGF0ZSA9IEJMSU5LX09OOworCVB0U2V0UmVzb3VyY2UoIGd1aV9waF90aW1lcl9jdXJzb3IsIFB0X0FSR19USU1FUl9JTklUSUFMLAorCQlibGlua19vbnRpbWUsIDAgKTsKKyAgICB9CisgICAgcmV0dXJuKCBQdF9DT05USU5VRSApOworfQorCisgICAgc3RhdGljIGludAorZ3VpX3BoX2hhbmRsZV90aW1lcl90aW1lb3V0KFB0V2lkZ2V0X3QgKndpZGdldCwgdm9pZCAqZGF0YSwgUHRDYWxsYmFja0luZm9fdCAqaW5mbykKK3sKKyAgICBpc190aW1lb3V0ID0gVFJVRTsKKworICAgIHJldHVybiggUHRfQ09OVElOVUUgKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2d1aV9waF9oYW5kbGVfd2luZG93X2NiKCBQdFdpZGdldF90ICp3aWRnZXQsIHZvaWQgKmRhdGEsIFB0Q2FsbGJhY2tJbmZvX3QgKmluZm8gKQoreworICAgIFBoV2luZG93RXZlbnRfdCAqd2UgPSBpbmZvLT5jYmRhdGE7CisgICAgdXNob3J0X3QgKndpZHRoLCAqaGVpZ2h0OworCisgICAgc3dpdGNoKCB3ZS0+ZXZlbnRfZiApIHsKKwljYXNlIFBoX1dNX0NMT1NFOgorCSAgICBndWlfc2hlbGxfY2xvc2VkKCk7CisJICAgIGJyZWFrOworCisJY2FzZSBQaF9XTV9GT0NVUzoKKwkgICAgLyogSnVzdCBpbiBjYXNlIGl0J3MgaGlkZGVuIGFuZCBuZWVkcyB0byBiZSBzaG93biAqLworCSAgICBndWlfbWNoX21vdXNlaGlkZSggTU9VU0VfU0hPVyApOworCisJICAgIGlmKCB3ZS0+ZXZlbnRfc3RhdGUgPT0gUGhfV01fRVZTVEFURV9GT0NVUyApCisJICAgIHsKKwkJZ3VpX2ZvY3VzX2NoYW5nZShUUlVFKTsKKwkJZ3VpX21jaF9zdGFydF9ibGluaygpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlndWlfZm9jdXNfY2hhbmdlKEZBTFNFKTsKKwkJZ3VpX21jaF9zdG9wX2JsaW5rKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIFBoX1dNX1JFU0laRToKKwkgICAgUHRHZXRSZXNvdXJjZSggZ3VpLnZpbVdpbmRvdywgUHRfQVJHX1dJRFRILCAmd2lkdGgsIDAgKTsKKwkgICAgUHRHZXRSZXNvdXJjZSggZ3VpLnZpbVdpbmRvdywgUHRfQVJHX0hFSUdIVCwgJmhlaWdodCwgMCApOworI2lmZGVmIFVTRV9QQU5FTF9HUk9VUAorCSAgICB3aWR0aCAgLT0gKHBnX21hcmdpbl9sZWZ0ICsgcGdfbWFyZ2luX3JpZ2h0KTsKKwkgICAgaGVpZ2h0IC09IChwZ19tYXJnaW5fdG9wICsgcGdfbWFyZ2luX2JvdHRvbSk7CisjZW5kaWYKKwkgICAgZ3VpX3Jlc2l6ZV9zaGVsbCggKndpZHRoLCAqaGVpZ2h0ICk7CisJICAgIGd1aV9zZXRfc2hlbGxzaXplKCBGQUxTRSwgRkFMU0UgKTsKKwkgICAgaXNfaWdub3JlX2RyYXcgPSBGQUxTRTsKKwkgICAgUHRFbmRGbHV4KCBndWkudmltQ29udGFpbmVyICk7CisJICAgIFB0Q29udGFpbmVyUmVsZWFzZSggZ3VpLnZpbUNvbnRhaW5lciApOworCSAgICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiggUHRfQ09OVElOVUUgKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2d1aV9waF9oYW5kbGVfc2Nyb2xsYmFyKCBQdFdpZGdldF90ICp3aWRnZXQsIHZvaWQgKmRhdGEsIFB0Q2FsbGJhY2tJbmZvX3QgKmluZm8gKQoreworICAgIFB0U2Nyb2xsYmFyQ2FsbGJhY2tfdCAqc2Nyb2xsOworICAgIHNjcm9sbGJhcl9UICpzYjsKKyAgICBpbnQJICAgIHZhbHVlLCBkcmFnZ2luZyA9IEZBTFNFOworCisgICAgc2Nyb2xsID0gaW5mby0+Y2JkYXRhOworCisgICAgc2IgPSAoc2Nyb2xsYmFyX1QgKikgZGF0YTsKKyAgICBpZiggc2IgIT0gTlVMTCApCisgICAgeworCXZhbHVlID0gc2Nyb2xsLT5wb3NpdGlvbjsKKwlzd2l0Y2goIHNjcm9sbC0+YWN0aW9uICkKKwl7CisJICAgIGNhc2UgUHRfU0NST0xMX0RSQUdHRUQ6CisJCWRyYWdnaW5nID0gVFJVRTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBQdF9TQ1JPTExfU0VUOgorCQkvKiBGSVhNRTogcmV0dXJuIHN0cmFpZ2h0IGF3YXkgaGVyZT8gKi8KKwkJcmV0dXJuKCBQdF9DT05USU5VRSApOworCQlicmVhazsKKwl9CisKKwlndWlfZHJhZ19zY3JvbGxiYXIoc2IsIHZhbHVlLCBkcmFnZ2luZyk7CisgICAgfQorICAgIHJldHVybiggUHRfQ09OVElOVUUgKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2d1aV9waF9oYW5kbGVfa2V5Ym9hcmQoIFB0V2lkZ2V0X3QgKndpZGdldCwgdm9pZCAqZGF0YSwgUHRDYWxsYmFja0luZm9fdCAqaW5mbyApCit7CisgICAgUGhLZXlFdmVudF90ICAgICprZXk7CisgICAgdW5zaWduZWQgY2hhciAgIHN0cmluZ1s2XTsKKyAgICBpbnQJCSAgICBsZW4sIGk7CisgICAgaW50CQkgICAgY2gsIG1vZGlmaWVyczsKKworICAgIGtleSA9IFBoR2V0RGF0YSggaW5mby0+ZXZlbnQgKTsKKworICAgIGNoID0gbW9kaWZpZXJzID0gbGVuID0gMDsKKworICAgIGlmKCBwX21oICkKKwlndWlfbWNoX21vdXNlaGlkZSggTU9VU0VfSElERSApOworCisgICAgLyogV2UncmUgYSBnb29kIGxpbCBwaG90b24gcHJvZ3JhbSwgYXJlbid0IHdlPyB5ZXMgd2UgYXJlLCB5ZWVzcyB3ZWUgYXJyciAqLworICAgIGlmKCBrZXktPmtleV9mbGFncyAmIFBrX0tGX0NvbXBvc2UgKQorICAgIHsKKwlyZXR1cm4oIFB0X0NPTlRJTlVFICk7CisgICAgfQorCisgICAgaWYoIChrZXktPmtleV9mbGFncyAmIFBrX0tGX0NhcF9WYWxpZCkgJiYKKwkgICAgUGtJc0tleURvd24oIGtleS0+a2V5X2ZsYWdzICkgKQorICAgIHsKKyNpZmRlZiBGRUFUX01FTlUKKwkvKgorCSAqIE9ubHkgc2hvdyB0aGUgbWVudSBpZiB0aGUgQWx0IGtleSBpcyBkb3duLCBhbmQgdGhlIFNoaWZ0ICYgQ3RybAorCSAqIGtleXMgYXJlbid0IGRvd24sIGFzIHdlbGwgYXMgdGhlIG90aGVyIGNvbmRpdGlvbnMKKwkgKi8KKwlpZiggKCAoIGtleS0+a2V5X21vZHMgJiBQa19LTV9BbHQgKSAmJgorCQkgICAgISgga2V5LT5rZXlfbW9kcyAmIFBrX0tNX1NoaWZ0ICkgJiYKKwkJICAgICEoIGtleS0+a2V5X21vZHMgJiBQa19LTV9DdHJsICkgKSAmJgorCSAgICBndWkubWVudV9pc19hY3RpdmUgJiYKKwkgICAgKCAqcF93YWsgPT0gJ3knIHx8CisJICAgICAgKCAqcF93YWsgPT0gJ20nICYmCisJCWd1aV9pc19tZW51X3Nob3J0Y3V0KCBrZXktPmtleV9jYXAgKSApICkgKQorCXsKKwkgICAgLyogRmFsbHRocm91Z2ggYW5kIGxldCBwaG90b24gbG9vayBmb3IgdGhlIGhvdGtleSAqLworCSAgICByZXR1cm4oIFB0X0NPTlRJTlVFICk7CisJfQorI2VuZGlmCisKKwlmb3IoIGkgPSAwOyBzcGVjaWFsX2tleXNbaV0ua2V5X3N5bSAhPSAwOyBpKysgKQorCXsKKwkgICAgaWYoIHNwZWNpYWxfa2V5c1tpXS5rZXlfc3ltID09IGtleS0+a2V5X2NhcCApCisJICAgIHsKKwkJbGVuID0gMDsKKwkJaWYoIHNwZWNpYWxfa2V5c1tpXS52aW1fY29kZTEgPT0gTlVMICkKKwkJICAgIGNoID0gc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMDsKKwkJZWxzZQorCQl7CisJCSAgICAvKiBEZXRlY3QgaWYgYSBrZXlwYWQgbnVtYmVyIGtleSBoYXMgYmVlbiBwcmVzc2VkCisJCSAgICAgKiBhbmQgY2hhbmdlIHRoZSBrZXkgaWYgTnVtIExvY2sgaXMgb24gKi8KKwkJICAgIGlmKCBrZXktPmtleV9jYXAgPj0gUGtfS1BfRW50ZXIgJiYga2V5LT5rZXlfY2FwIDw9IFBrX0tQXzkKKwkJCSAgICAmJiAoIGtleS0+a2V5X21vZHMgJiBQa19LTV9OdW1fTG9jayApICkKKwkJICAgIHsKKwkJCS8qIEZJWE1FOiBGb3Igbm93LCBqdXN0IG1hcCB0aGUga2V5IHRvIGEgYXNjaWkgdmFsdWUKKwkJCSAqIChzZWUgPHBob3Rvbi9Qa0tleURlZi5oPikgKi8KKwkJCWNoID0ga2V5LT5rZXlfY2FwIC0gMHhmMDgwOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJY2ggPSBUT19TUEVDSUFMKCBzcGVjaWFsX2tleXNbaV0udmltX2NvZGUwLAorCQkJCXNwZWNpYWxfa2V5c1tpXS52aW1fY29kZTEgKTsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCX0KKworCWlmKCBrZXktPmtleV9tb2RzICYgUGtfS01fQ3RybCApCisJICAgIG1vZGlmaWVycyB8PSBNT0RfTUFTS19DVFJMOworCWlmKCBrZXktPmtleV9tb2RzICYgUGtfS01fQWx0ICkKKwkgICAgbW9kaWZpZXJzIHw9IE1PRF9NQVNLX0FMVDsKKwlpZigga2V5LT5rZXlfbW9kcyAmIFBrX0tNX1NoaWZ0ICkKKwkgICAgbW9kaWZpZXJzIHw9IE1PRF9NQVNLX1NISUZUOworCisJLyogSXMgdGhpcyBub3QgYSBzcGVjaWFsIGtleT8gKi8KKwlpZiggc3BlY2lhbF9rZXlzW2ldLmtleV9zeW0gPT0gMCApCisJeworCSAgICBjaCA9IFBoVG84ODU5XzEoIGtleSApOworCSAgICBpZiggY2ggPT0gLTEKKyNpZmRlZiBGRUFUX01CWVRFCisJCXx8ICggZW5jX3V0ZjggJiYgY2ggPiAxMjcgKQorI2VuZGlmCisJCSkKKwkgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwkJbGVuID0gUGhLZXlUb01iKCBzdHJpbmcsIGtleSApOworCQlpZiggbGVuID4gMCApCisJCXsKKwkJICAgIHN0YXRpYyBjaGFyIGJ1Zls2XTsKKwkJICAgIGludCBzcmNfdGFrZW4sIGRzdF9tYWRlOworCQkgICAgaWYoIGVuY191dGY4ICE9IFRSVUUgKQorCQkgICAgeworCQkJUHhUcmFuc2xhdGVGcm9tVVRGKAorCQkJCWNoYXJzZXRfdHJhbnNsYXRlLAorCQkJCXN0cmluZywKKwkJCQlsZW4sCisJCQkJJnNyY190YWtlbiwKKwkJCQlidWYsCisJCQkJNiwKKwkJCQkmZHN0X21hZGUgKTsKKworCQkJYWRkX3RvX2lucHV0X2J1ZiggYnVmLCBkc3RfbWFkZSApOworCQkgICAgfQorCQkgICAgZWxzZQorCQkgICAgeworCQkJYWRkX3RvX2lucHV0X2J1Ziggc3RyaW5nLCBsZW4gKTsKKwkJICAgIH0KKworCQkgICAgcmV0dXJuKCBQdF9DT05TVU1FICk7CisJCX0KKwkJbGVuID0gMDsKKyNlbmRpZgorCQljaCA9IGtleS0+a2V5X2NhcDsKKwkJaWYoIGNoIDwgMHhmZiApCisJCXsKKwkJICAgIC8qIEZJWE1FOiBpcyB0aGlzIHRoZSByaWdodCB0aGluZyB0byBkbz8gKi8KKwkJICAgIGlmKCBtb2RpZmllcnMgJiBNT0RfTUFTS19DVFJMICkKKwkJICAgIHsKKwkJCW1vZGlmaWVycyAmPSB+TU9EX01BU0tfQ1RSTDsKKworCQkJaWYoICggY2ggPj0gJ2EnICAmJiAgY2ggPD0gJ3onICkgfHwKKwkJCQljaCA9PSAnWycgfHwKKwkJCQljaCA9PSAnXScgfHwKKwkJCQljaCA9PSAnXFwnICkKKwkJCSAgICBjaCA9IEN0cmxfY2hyKCBjaCApOworCQkJZWxzZSBpZiggY2ggPT0gJzInICkKKwkJCSAgICBjaCA9IE5VTDsKKwkJCWVsc2UgaWYoIGNoID09ICc2JyApCisJCQkgICAgY2ggPSAweDFlOworCQkJZWxzZSBpZiggY2ggPT0gJy0nICkKKwkJCSAgICBjaCA9IDB4MWY7CisJCQllbHNlCisJCQkgICAgbW9kaWZpZXJzIHw9IE1PRF9NQVNLX0NUUkw7CisJCSAgICB9CisKKwkJICAgIGlmKCBtb2RpZmllcnMgJiBNT0RfTUFTS19BTFQgKQorCQkgICAgeworCQkJY2ggPSBNZXRhKCBjaCApOworCQkJbW9kaWZpZXJzICY9IH5NT0RfTUFTS19BTFQ7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICByZXR1cm4oIFB0X0NPTlRJTlVFICk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJCW1vZGlmaWVycyAmPSB+TU9EX01BU0tfU0hJRlQ7CisJfQorCisJY2ggPSBzaW1wbGlmeV9rZXkoIGNoLCAmbW9kaWZpZXJzICk7CisJaWYoIG1vZGlmaWVycyApCisJeworCSAgICBzdHJpbmdbIGxlbisrIF0gPSBDU0k7CisJICAgIHN0cmluZ1sgbGVuKysgXSA9IEtTX01PRElGSUVSOworCSAgICBzdHJpbmdbIGxlbisrIF0gPSBtb2RpZmllcnM7CisJfQorCisJaWYoIElTX1NQRUNJQUwoIGNoICkgKQorCXsKKwkgICAgc3RyaW5nWyBsZW4rKyBdID0gQ1NJOworCSAgICBzdHJpbmdbIGxlbisrIF0gPSBLX1NFQ09ORCggY2ggKTsKKwkgICAgc3RyaW5nWyBsZW4rKyBdID0gS19USElSRCggY2ggKTsKKwl9CisJZWxzZQorCXsKKwkgICAgc3RyaW5nWyBsZW4rKyBdID0gY2g7CisJfQorCisJaWYgKGxlbiA9PSAxICYmICgoY2ggPT0gQ3RybF9DICYmIGN0cmxfY19pbnRlcnJ1cHRzKQorCQkJCQkJCSAgfHwgY2ggPT0gaW50cl9jaGFyKSkKKwl7CisJICAgIHRyYXNoX2lucHV0X2J1ZigpOworCSAgICBnb3RfaW50ID0gVFJVRTsKKwl9CisKKwlpZiAobGVuID09IDEgJiYgc3RyaW5nWzBdID09IENTSSkKKwl7CisJICAgIC8qIFR1cm4gQ1NJIGludG8gS19DU0kuICovCisJICAgIHN0cmluZ1sgbGVuKysgXSA9IEtTX0VYVFJBOworCSAgICBzdHJpbmdbIGxlbisrIF0gPSBLRV9DU0k7CisJfQorCisJaWYoIGxlbiA+IDAgKQorCXsKKwkgICAgYWRkX3RvX2lucHV0X2J1Ziggc3RyaW5nLCBsZW4gKTsKKwkgICAgcmV0dXJuKCBQdF9DT05TVU1FICk7CisJfQorICAgIH0KKworICAgIHJldHVybiggUHRfQ09OVElOVUUgKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2d1aV9waF9oYW5kbGVfbW91c2UoIFB0V2lkZ2V0X3QgKndpZGdldCwgdm9pZCAqZGF0YSwgUHRDYWxsYmFja0luZm9fdCAqaW5mbyApCit7CisgICAgUGhQb2ludGVyRXZlbnRfdCAqcG9pbnRlcjsKKyAgICBQaFJlY3RfdAkgICAgICpwb3M7CisgICAgaW50CQkgICAgIGJ1dHRvbiA9IDAsIHJlcGVhdGVkX2NsaWNrLCBtb2RpZmllcnMgPSAweDA7CisgICAgc2hvcnQJICAgICBtb3VzZV94LCBtb3VzZV95OworCisgICAgcG9pbnRlciA9IFBoR2V0RGF0YSggaW5mby0+ZXZlbnQgKTsKKyAgICBwb3MgPSBQaEdldFJlY3RzKCBpbmZvLT5ldmVudCApOworCisgICAgZ3VpX21jaF9tb3VzZWhpZGUoIE1PVVNFX1NIT1cgKTsKKworICAgIC8qCisgICAgICogQ29vcmRpbmF0ZXMgbmVlZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgYmFzZSB3aW5kb3csCisgICAgICogbm90IHJlbGF0aXZlIHRvIHRoZSB2aW1UZXh0QXJlYSB3aWRnZXQKKyAgICAgKi8KKyAgICBtb3VzZV94ID0gcG9zLT51bC54ICsgZ3VpLmJvcmRlcl93aWR0aDsKKyAgICBtb3VzZV95ID0gcG9zLT51bC55ICsgZ3VpLmJvcmRlcl93aWR0aDsKKworICAgIGlmKCBpbmZvLT5ldmVudC0+dHlwZSA9PSBQaF9FVl9QVFJfTU9USU9OX05PQlVUVE9OICkKKyAgICB7CisJZ3VpX21vdXNlX21vdmVkKCBtb3VzZV94LCBtb3VzZV95ICk7CisJcmV0dXJuKCBQdF9DT05USU5VRSApOworICAgIH0KKworICAgIGlmKCBwb2ludGVyLT5rZXlfbW9kcyAmIFBrX0tNX1NoaWZ0ICkKKwltb2RpZmllcnMgfD0gTU9VU0VfU0hJRlQ7CisgICAgaWYoIHBvaW50ZXItPmtleV9tb2RzICYgUGtfS01fQ3RybCApCisJbW9kaWZpZXJzIHw9IE1PVVNFX0NUUkw7CisgICAgaWYoIHBvaW50ZXItPmtleV9tb2RzICYgUGtfS01fQWx0ICkKKwltb2RpZmllcnMgfD0gTU9VU0VfQUxUOworCisgICAgLyoKKyAgICAgKiBGSVhNRSBNb3JlIHRoYW4gb25lIGJ1dHRvbiBtYXkgYmUgaW52b2x2ZWQsIGJ1dCBmb3IKKyAgICAgKiBub3cganVzdCBkZWFsIHdpdGggb25lCisgICAgICovCisgICAgaWYoIHBvaW50ZXItPmJ1dHRvbnMgJiBQaF9CVVRUT05fU0VMRUNUICkKKwlidXR0b24gPSBNT1VTRV9MRUZUOworCisgICAgaWYoIHBvaW50ZXItPmJ1dHRvbnMgJiBQaF9CVVRUT05fTUVOVSApCisgICAgeworCWJ1dHRvbiA9IE1PVVNFX1JJR0hUOworCS8qIE5lZWQgdGhlIGFic29sdXRlIGNvb3JkaW5hdGVzIGZvciB0aGUgcG9wdXAgbWVudSAqLworCWFic19tb3VzZS54ID0gcG9pbnRlci0+cG9zLng7CisJYWJzX21vdXNlLnkgPSBwb2ludGVyLT5wb3MueTsKKyAgICB9CisKKyAgICBpZiggcG9pbnRlci0+YnV0dG9ucyAmIFBoX0JVVFRPTl9BREpVU1QgKQorCWJ1dHRvbiA9IE1PVVNFX01JRERMRTsKKworICAgIC8qIENhdGNoIGEgcmVhbCByZWxlYXNlIChub3QgcGhhbnRvbSBvciBvdGhlciByZWxlYXNlcyAqLworICAgIGlmKCBpbmZvLT5ldmVudC0+dHlwZSA9PSBQaF9FVl9CVVRfUkVMRUFTRSApCisJYnV0dG9uID0gTU9VU0VfUkVMRUFTRTsKKworICAgIGlmKCBpbmZvLT5ldmVudC0+dHlwZSAmIFBoX0VWX1BUUl9NT1RJT05fQlVUVE9OICkKKwlidXR0b24gPSBNT1VTRV9EUkFHOworCisjaWYgMAorICAgIC8qIFZpbSBkb2Vzbid0IHVzZSBidXR0b24gcmVwZWF0cyAqLworICAgIGlmKCBpbmZvLT5ldmVudC0+dHlwZSAmIFBoX0VWX0JVVF9SRVBFQVQgKQorCWJ1dHRvbiA9IE1PVVNFX0RSQUc7CisjZW5kaWYKKworICAgIC8qIERvbid0IGRvIGFueXRoaW5nIGlmIGl0IGlzIG9uZSBvZiB0aGUgcGhhbnRvbSBtb3VzZSByZWxlYXNlIGV2ZW50cyAqLworICAgIGlmKCAoIGJ1dHRvbiAhPSBNT1VTRV9SRUxFQVNFICkgfHwKKwkgICAgKCBpbmZvLT5ldmVudC0+c3VidHlwZSA9PSBQaF9FVl9SRUxFQVNFX1JFQUwgKSApCisgICAgeworCXJlcGVhdGVkX2NsaWNrID0gKHBvaW50ZXItPmNsaWNrX2NvdW50ID49IDIpID8gVFJVRSA6IEZBTFNFOworCisJZ3VpX3NlbmRfbW91c2VfZXZlbnQoIGJ1dHRvbiAsIG1vdXNlX3gsIG1vdXNlX3ksIHJlcGVhdGVkX2NsaWNrLCBtb2RpZmllcnMgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIFB0X0NPTlRJTlVFICk7Cit9CisKKy8qIEhhbmRsZSBhIGZvY3VzIGNoYW5nZSBvZiB0aGUgUHRSYXcgd2lkZ2V0ICovCisgICAgc3RhdGljIGludAorZ3VpX3BoX2hhbmRsZV9mb2N1cyggUHRXaWRnZXRfdCAqd2lkZ2V0LCB2b2lkICpkYXRhLCBQdENhbGxiYWNrSW5mb190ICppbmZvICkKK3sKKyAgICBpZiggaW5mby0+cmVhc29uID09IFB0X0NCX0xPU1RfRk9DVVMgKQorICAgIHsKKwlQdFJlbW92ZUV2ZW50SGFuZGxlciggZ3VpLnZpbVRleHRBcmVhLCBQaF9FVl9QVFJfTU9USU9OX05PQlVUVE9OLAorCQlndWlfcGhfaGFuZGxlX21vdXNlLCBOVUxMICk7CisKKwlndWlfbWNoX21vdXNlaGlkZSggTU9VU0VfU0hPVyApOworICAgIH0KKyAgICBlbHNlCisgICAgeworCVB0QWRkRXZlbnRIYW5kbGVyKCBndWkudmltVGV4dEFyZWEsIFBoX0VWX1BUUl9NT1RJT05fTk9CVVRUT04sCisJCWd1aV9waF9oYW5kbGVfbW91c2UsIE5VTEwgKTsKKyAgICB9CisgICAgcmV0dXJuKCBQdF9DT05USU5VRSApOworfQorCisgICAgc3RhdGljIHZvaWQKK2d1aV9waF9oYW5kbGVfcmF3X2RyYXcoIFB0V2lkZ2V0X3QgKndpZGdldCwgUGhUaWxlX3QgKmRhbWFnZSApCit7CisgICAgUGhSZWN0X3QJKnI7CisgICAgUGhQb2ludF90CW9mZnNldDsKKyAgICBQaFBvaW50X3QJdHJhbnNsYXRpb247CisKKyAgICBpZiggaXNfaWdub3JlX2RyYXcgPT0gVFJVRSApCisJcmV0dXJuOworCisgICAgUHRTdXBlckNsYXNzRHJhdyggUHRCYXNpYywgd2lkZ2V0LCBkYW1hZ2UgKTsKKyAgICBQZ0dldFRyYW5zbGF0aW9uKCAmdHJhbnNsYXRpb24gKTsKKyAgICBQZ0NsZWFyVHJhbnNsYXRpb24oKTsKKworI2lmIDAKKyAgICAvKgorICAgICAqIFRoaXMgY2F1c2VzIHNvbWUgd2llcmQgcHJvYmVtcywgd2l0aCBkcmF3aW5nIGJlaW5nIGRvbmUgZnJvbQorICAgICAqIHdpdGhpbiB0aGlzIHJhdyBkcmF3aW5nIGZ1bmN0aW9uIChyYXRoZXIgdGhhbiBqdXN0IHNpbXBsZSBjbGVhcmluZworICAgICAqIGFuZCB0ZXh0IGRyYXdpbmcgZG9uZSBieSBndWlfcmVkcmF3KQorICAgICAqCisgICAgICogVGhlIG1haW4gcHJvYmxlbSBpcyB3aGVuIFBoQmxpdCBpcyB1c2VkLCBhbmQgdGhlIGN1cnNvciBhcHBlYXJpbmcKKyAgICAgKiBpbiBwbGFjZXMgd2hlcmUgaXQgc2hvdWxkbid0CisgICAgICovCisgICAgb3V0X2ZsdXNoKCk7CisjZW5kaWYKKworICAgIFB0V2lkZ2V0T2Zmc2V0KCB3aWRnZXQsICZvZmZzZXQgKTsKKyAgICBQaFRyYW5zbGF0ZVBvaW50KCAmb2Zmc2V0LCBQdFdpZGdldFBvcyggZ3VpLnZpbVRleHRBcmVhLCBOVUxMICkgKTsKKworI2lmIDEKKyAgICAvKiBSZWRyYXcgaW5kaXZpZHVhbCBkYW1hZ2UgcmVnaW9ucyAqLworICAgIGlmKCBkYW1hZ2UtPm5leHQgIT0gTlVMTCApCisJZGFtYWdlID0gZGFtYWdlLT5uZXh0OworCisgICAgd2hpbGUoIGRhbWFnZSAhPSBOVUxMICkKKyAgICB7CisJciA9ICZkYW1hZ2UtPnJlY3Q7CisJZ3VpX3JlZHJhdygKKwkJci0+dWwueCAtIG9mZnNldC54LCByLT51bC55IC0gb2Zmc2V0LnksCisJCXItPmxyLnggLSByLT51bC54ICsgMSwKKwkJci0+bHIueSAtIHItPnVsLnkgKyAxICk7CisJZGFtYWdlID0gZGFtYWdlLT5uZXh0OworICAgIH0KKyNlbHNlCisgICAgLyogUmVkcmF3IHRoZSByZWN0YW5nbGUgdGhhdCBjb3ZlcnMgYWxsIHRoZSBkYW1hZ2VkIHJlZ2lvbnMgKi8KKyAgICByID0gJmRhbWFnZS0+cmVjdDsKKyAgICBndWlfcmVkcmF3KAorCSAgICByLT51bC54IC0gb2Zmc2V0LngsIHItPnVsLnkgLSBvZmZzZXQueSwKKwkgICAgci0+bHIueCAtIHItPnVsLnggKyAxLAorCSAgICByLT5sci55IC0gci0+dWwueSArIDEgKTsKKyNlbmRpZgorCisgICAgUGdTZXRUcmFuc2xhdGlvbiggJnRyYW5zbGF0aW9uLCAwICk7Cit9CisKKyAgICBzdGF0aWMgaW50CitndWlfcGhfaGFuZGxlX3B1bGxkb3duX21lbnUoCisJUHRXaWRnZXRfdCAqd2lkZ2V0LAorCXZvaWQgKmRhdGEsCisJUHRDYWxsYmFja0luZm9fdCAqaW5mbyApCit7CisgICAgaWYoIGRhdGEgIT0gTlVMTCApCisgICAgeworCXZpbW1lbnVfVCAqbWVudSA9ICh2aW1tZW51X1QgKikgZGF0YTsKKworCVB0UG9zaXRpb25NZW51KCBtZW51LT5zdWJtZW51X2lkLCBOVUxMICk7CisJUHRSZWFsaXplV2lkZ2V0KCBtZW51LT5zdWJtZW51X2lkICk7CisgICAgfQorCisgICAgcmV0dXJuKCBQdF9DT05USU5VRSApOworfQorCisvKiBUaGlzIGlzIHVzZWQgZm9yIHB1bGxkb3duL3BvcHVwIG1lbnVzIGFuZCBhbHNvIHRvb2xiYXIgYnV0dG9ucyAqLworICAgIHN0YXRpYyBpbnQKK2d1aV9waF9oYW5kbGVfbWVudSggUHRXaWRnZXRfdCAqd2lkZ2V0LCB2b2lkICpkYXRhLCBQdENhbGxiYWNrSW5mb190ICppbmZvICkKK3sKKyAgICBpZiggZGF0YSAhPSBOVUxMICkKKyAgICB7CisJdmltbWVudV9UICptZW51ID0gKHZpbW1lbnVfVCAqKSBkYXRhOworCWd1aV9tZW51X2NiKCBtZW51ICk7CisgICAgfQorICAgIHJldHVybiggUHRfQ09OVElOVUUgKTsKK30KKworLyogU3RvcCBmb2N1cyBmcm9tIGRpc2FwcGVhcmluZyBpbnRvIHRoZSBtZW51YmFyLi4uICovCisgICAgc3RhdGljIGludAorZ3VpX3BoX2hhbmRsZV9tZW51X3VucmVhbGl6ZWQoCisJUHRXaWRnZXRfdCAqd2lkZ2V0LAorCXZvaWQgKmRhdGEsCisJUHRDYWxsYmFja0luZm9fdCAqaW5mbyApCit7CisgICAgUHRHaXZlRm9jdXMoIGd1aS52aW1UZXh0QXJlYSwgTlVMTCApOworICAgIHJldHVybiggUHRfQ09OVElOVUUgKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2d1aV9waF9oYW5kbGVfd2luZG93X29wZW4oCisJUHRXaWRnZXRfdCAqd2lkZ2V0LAorCXZvaWQgKmRhdGEsCisJUHRDYWxsYmFja0luZm9fdCAqaW5mbyApCit7CisgICAgZ3VpX3NldF9zaGVsbHNpemUoIEZBTFNFLCBUUlVFICk7CisgICAgcmV0dXJuKCBQdF9DT05USU5VRSApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBEUkFXX1NUQVJUICBndWlfcGhfZHJhd19zdGFydCgpCisjZGVmaW5lIERSQVdfRU5EICAgIGd1aV9waF9kcmF3X2VuZCgpCisKKy8qIFRPRE86IFNldCBhIGNsaXBwaW5nIHJlY3Q/ICovCisgICAgc3RhdGljIHZvaWQKK2d1aV9waF9kcmF3X3N0YXJ0KCB2b2lkICkKK3sKKyAgICBQZ1NldFJlZ2lvbiggUHRXaWRnZXRSaWQoIFB0RmluZERpc2pvaW50KCBndWkudmltVGV4dEFyZWEgKSApICk7CisKKyAgICBQdFdpZGdldE9mZnNldCggZ3VpLnZpbVRleHRBcmVhLCAmZ3VpX3BoX3Jhd19vZmZzZXQgKTsKKyAgICBQaFRyYW5zbGF0ZVBvaW50KCAmZ3VpX3BoX3Jhd19vZmZzZXQsIFB0V2lkZ2V0UG9zKCBndWkudmltVGV4dEFyZWEsIE5VTEwgKSApOworCisgICAgUGdTZXRUcmFuc2xhdGlvbiggJmd1aV9waF9yYXdfb2Zmc2V0LCBQZ19SRUxBVElWRSApOworfQorCisgICAgc3RhdGljIHZvaWQKK2d1aV9waF9kcmF3X2VuZCggdm9pZCApCit7CisgICAgZ3VpX3BoX3Jhd19vZmZzZXQueCA9IC1ndWlfcGhfcmF3X29mZnNldC54OworICAgIGd1aV9waF9yYXdfb2Zmc2V0LnkgPSAtZ3VpX3BoX3Jhd19vZmZzZXQueTsKKyAgICBQZ1NldFRyYW5zbGF0aW9uKCAmZ3VpX3BoX3Jhd19vZmZzZXQsIFBnX1JFTEFUSVZFICk7Cit9CisKKyNpZmRlZiBVU0VfUEFORUxfR1JPVVAKKyAgICBzdGF0aWMgdmltbWVudV9UICoKK2d1aV9waF9maW5kX2J1ZmZlcl9pdGVtKCBjaGFyX3UgKm5hbWUgKQoreworICAgIHZpbW1lbnVfVCAqdG9wX2xldmVsID0gcm9vdF9tZW51OworICAgIHZpbW1lbnVfVCAqaXRlbXMgPSBOVUxMOworCisgICAgd2hpbGUoIHRvcF9sZXZlbCAhPSBOVUxMICYmCisJICAgICggU1RSQ01QKCB0b3BfbGV2ZWwtPmRuYW1lLCAiQnVmZmVycyIgKSAhPSAwICkgKQorCXRvcF9sZXZlbCA9IHRvcF9sZXZlbC0+bmV4dDsKKworICAgIGlmKCB0b3BfbGV2ZWwgIT0gTlVMTCApCisgICAgeworCWl0ZW1zID0gdG9wX2xldmVsLT5jaGlsZHJlbjsKKworCXdoaWxlKCBpdGVtcyAhPSBOVUxMICYmCisJCSggU1RSQ01QKCBpdGVtcy0+ZG5hbWUsIG5hbWUgKSAhPSAwICkgKQorCSAgICBpdGVtcyA9IGl0ZW1zLT5uZXh0OworICAgIH0KKyAgICByZXR1cm4oIGl0ZW1zICk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZ3VpX3BoX3BnX3NldF9idWZmZXJfbnVtKCBpbnRfdSBidWZfbnVtICkKK3sKKyAgICBpbnQgaTsKKyAgICBjaGFyIHNlYXJjaFsxNl07CisgICAgY2hhciAqbWFyazsKKworICAgIGlmKCBndWkudmltVGV4dEFyZWEgPT0gTlVMTCB8fCBidWZfbnVtID09IDAgKQorCXJldHVybjsKKworICAgIHNlYXJjaFswXSA9ICcoJzsKKyAgICB1bHRvYSggYnVmX251bSwgJnNlYXJjaFsxXSwgMTAgKTsKKyAgICBTVFJDQVQoIHNlYXJjaCwgIikiICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbnVtX3BhbmVsczsgaSsrICkKKyAgICB7CisJLyogZmluZCB0aGUgbGFzdCAiKCIgaW4gdGhlIHBhbmVsIHRpdGxlIGFuZCBzZWUgaWYgdGhlIGJ1ZmZlcgorCSAqIG51bWJlciBpbiB0aGUgdGl0bGUgbWF0Y2hlcyB0aGUgb25lIHdlJ3JlIGxvb2tpbmcgZm9yICovCisJbWFyayA9IFNUUlJDSFIoIHBhbmVsX3RpdGxlc1sgaSBdLCAnKCcgKTsKKwlpZiggbWFyayAhPSBOVUxMICYmIFNUUkNNUCggbWFyaywgc2VhcmNoICkgPT0gMCApCisJeworCSAgICBQdFNldFJlc291cmNlKCBndWkudmltUGFuZWxHcm91cCwgUHRfQVJHX1BHX0NVUlJFTlRfSU5ERVgsCisJCSAgICBpLCAwICk7CisJfQorICAgIH0KK30KKworICAgIHN0YXRpYyBpbnQKK2d1aV9waF9oYW5kbGVfcGdfY2hhbmdlKAorCVB0V2lkZ2V0X3QgKndpZGdldCwKKwl2b2lkICpkYXRhLAorCVB0Q2FsbGJhY2tJbmZvX3QgKmluZm8gKQoreworICAgIHZpbW1lbnVfVCAqbWVudTsKKyAgICBQdFBhbmVsR3JvdXBDYWxsYmFja190ICpwYW5lbDsKKworICAgIGlmKCBpbmZvLT5ldmVudCAhPSBOVUxMICkKKyAgICB7CisJcGFuZWwgPSBpbmZvLT5jYmRhdGE7CisJaWYoIHBhbmVsLT5uZXdfcGFuZWwgIT0gTlVMTCApCisJeworCSAgICBtZW51ID0gZ3VpX3BoX2ZpbmRfYnVmZmVyX2l0ZW0oIHBhbmVsLT5uZXdfcGFuZWwgKTsKKwkgICAgaWYoIG1lbnUgKQorCQlndWlfbWVudV9jYiggbWVudSApOworCX0KKyAgICB9CisgICAgcmV0dXJuKCBQdF9DT05USU5VRSApOworfQorCisgICAgc3RhdGljIHZvaWQKK2d1aV9waF9nZXRfcGFuZWxncm91cF9tYXJnaW5zKAorCXNob3J0ICp0b3AsCisJc2hvcnQgKmJvdHRvbSwKKwlzaG9ydCAqbGVmdCwKKwlzaG9ydCAqcmlnaHQgKQoreworICAgIHVuc2lnbmVkIHNob3J0IGFic19yYXdfeCwgYWJzX3Jhd195LCBhYnNfcGFuZWxfeCwgYWJzX3BhbmVsX3k7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKm1hcmdpbl90b3AsICptYXJnaW5fYm90dG9tOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICptYXJnaW5fbGVmdCwgKm1hcmdpbl9yaWdodDsKKworICAgIFB0R2V0QWJzUG9zaXRpb24oIGd1aS52aW1UZXh0QXJlYSwgJmFic19yYXdfeCwgJmFic19yYXdfeSApOworICAgIFB0R2V0QWJzUG9zaXRpb24oIGd1aS52aW1QYW5lbEdyb3VwLCAmYWJzX3BhbmVsX3gsICZhYnNfcGFuZWxfeSApOworCisgICAgUHRHZXRSZXNvdXJjZSggZ3VpLnZpbVBhbmVsR3JvdXAsIFB0X0FSR19NQVJHSU5fUklHSFQsICZtYXJnaW5fcmlnaHQsIDAgKTsKKyAgICBQdEdldFJlc291cmNlKCBndWkudmltUGFuZWxHcm91cCwgUHRfQVJHX01BUkdJTl9CT1RUT00sICZtYXJnaW5fYm90dG9tLCAwICk7CisKKyAgICBhYnNfcmF3X3ggLT0gYWJzX3BhbmVsX3g7CisgICAgYWJzX3Jhd195IC09IGFic19wYW5lbF95OworCisgICAgKnRvcCAgICA9IGFic19yYXdfeTsKKyAgICAqYm90dG9tID0gKm1hcmdpbl9ib3R0b207CisKKyAgICAqbGVmdCAgPSBhYnNfcmF3X3g7CisgICAgKnJpZ2h0ID0gKm1hcmdpbl9yaWdodDsKK30KKworLyogVXNlZCBmb3IgdGhlIHRhYnMgZm9yIFB0UGFuZWxHcm91cCAqLworICAgIHN0YXRpYyBpbnQKK2d1aV9waF9pc19idWZmZXJfaXRlbSggdmltbWVudV9UICptZW51LCB2aW1tZW51X1QgKnBhcmVudCApCit7CisgICAgY2hhciAqbWFyazsKKworICAgIGlmKCBTVFJDTVAoIHBhcmVudC0+ZG5hbWUsICJCdWZmZXJzIiApID09IDAgKQorICAgIHsKKwkvKiBMb29rIGZvciAnKCcgZGlnaXRzICcpJyAqLworCW1hcmsgPSB2aW1fc3RyY2hyKCBtZW51LT5kbmFtZSwgJygnICk7CisJaWYoIG1hcmsgIT0gTlVMTCApCisJeworCSAgICBtYXJrKys7CisJICAgIHdoaWxlKCBpc2RpZ2l0KCAqbWFyayApICkKKwkJbWFyaysrOworCisJICAgIGlmKCAqbWFyayA9PSAnKScgKQorCQlyZXR1cm4oIFRSVUUpOworCX0KKyAgICB9CisgICAgcmV0dXJuKCBGQUxTRSApOworfQorCisgICAgc3RhdGljIHZvaWQKK2d1aV9waF9wZ19hZGRfYnVmZmVyKGNoYXIgKm5hbWUgKQoreworICAgIGNoYXIgKipuZXdfdGl0bGVzID0gTlVMTDsKKworICAgIG5ld190aXRsZXMgPSAoY2hhciAqKikgYWxsb2MoICggbnVtX3BhbmVscyArIDEgKSAqIHNpemVvZiggY2hhciAqKiApICk7CisgICAgaWYoIG5ld190aXRsZXMgIT0gTlVMTCApCisgICAgeworCWlmKCBudW1fcGFuZWxzID4gMCApCisJICAgIG1lbWNweSggbmV3X3RpdGxlcywgcGFuZWxfdGl0bGVzLCBudW1fcGFuZWxzICogc2l6ZW9mKCBjaGFyICoqICkgKTsKKworCW5ld190aXRsZXNbIG51bV9wYW5lbHMrKyBdID0gbmFtZTsKKworCVB0U2V0UmVzb3VyY2UoIGd1aS52aW1QYW5lbEdyb3VwLCBQdF9BUkdfUEdfUEFORUxfVElUTEVTLCBuZXdfdGl0bGVzLAorCQludW1fcGFuZWxzICk7CisKKwl2aW1fZnJlZSggcGFuZWxfdGl0bGVzICk7CisJcGFuZWxfdGl0bGVzID0gbmV3X3RpdGxlczsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZ3VpX3BoX3BnX3JlbW92ZV9idWZmZXIoIGNoYXIgKm5hbWUgKQoreworICAgIGludCBpOworICAgIGNoYXIgKipuZXdfdGl0bGVzID0gTlVMTDsKKworICAgIC8qIElmIHRoZXJlIGlzIG9ubHkgMSBwYW5lbCwgd2UganVzdCB1c2UgdGhlIHRlbXBvcmFyeSBwbGFjZSBob2xkZXIgKi8KKyAgICBpZiggbnVtX3BhbmVscyA+IDEgKQorICAgIHsKKwluZXdfdGl0bGVzID0gKGNoYXIgKiopIGFsbG9jKCAoIG51bV9wYW5lbHMgLSAxICkgKiBzaXplb2YoIGNoYXIgKiogKSApOworCWlmKCBuZXdfdGl0bGVzICE9IE5VTEwgKQorCXsKKwkgICAgY2hhciAqKnMgPSBuZXdfdGl0bGVzOworCSAgICAvKiBDb3B5IGFsbCB0aGUgdGl0bGVzIGV4Y2VwdCB0aGUgb25lIHdlJ3JlIHJlbW92aW5nICovCisJICAgIGZvciggaSA9IDA7IGkgPCBudW1fcGFuZWxzOyBpKysgKQorCSAgICB7CisJCWlmKCBTVFJDTVAoIHBhbmVsX3RpdGxlc1sgaSBdLCBuYW1lICkgIT0gMCApCisJCXsKKwkJICAgICpzKysgPSBwYW5lbF90aXRsZXNbIGkgXTsKKwkJfQorCSAgICB9CisJICAgIG51bV9wYW5lbHMtLTsKKworCSAgICBQdFNldFJlc291cmNlKCBndWkudmltUGFuZWxHcm91cCwgUHRfQVJHX1BHX1BBTkVMX1RJVExFUywgbmV3X3RpdGxlcywKKwkJICAgIG51bV9wYW5lbHMgKTsKKworCSAgICB2aW1fZnJlZSggcGFuZWxfdGl0bGVzICk7CisJICAgIHBhbmVsX3RpdGxlcyA9IG5ld190aXRsZXM7CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCW51bV9wYW5lbHMtLTsKKwlQdFNldFJlc291cmNlKCBndWkudmltUGFuZWxHcm91cCwgUHRfQVJHX1BHX1BBTkVMX1RJVExFUywgJmVtcHR5X3RpdGxlLAorCQkxICk7CisKKwl2aW1fZnJlZSggcGFuZWxfdGl0bGVzICk7CisJcGFuZWxfdGl0bGVzID0gTlVMTDsKKyAgICB9Cit9CisKKy8qIFdoZW4gYSBidWZmZXIgaXRlbSBpcyBkZWxldGVkIGZyb20gdGhlIGJ1ZmZlciBtZW51ICovCisgICAgc3RhdGljIGludAorZ3VpX3BoX2hhbmRsZV9idWZmZXJfcmVtb3ZlKAorCVB0V2lkZ2V0X3QgKndpZGdldCwKKwl2b2lkICpkYXRhLAorCVB0Q2FsbGJhY2tJbmZvX3QgKmluZm8gKQoreworICAgIHZpbW1lbnVfVCAqbWVudTsKKworICAgIGlmKCBkYXRhICE9IE5VTEwgKQorICAgIHsKKwltZW51ID0gKHZpbW1lbnVfVCAqKSBkYXRhOworCWd1aV9waF9wZ19yZW1vdmVfYnVmZmVyKCBtZW51LT5kbmFtZSApOworICAgIH0KKworICAgIHJldHVybiggUHRfQ09OVElOVUUgKTsKK30KKyNlbmRpZgorCisgICAgc3RhdGljIGludAorZ3VpX3BoX3BhbmVfcmVzaXplKCBQdFdpZGdldF90ICp3aWRnZXQsIHZvaWQgKmRhdGEsIFB0Q2FsbGJhY2tJbmZvX3QgKmluZm8gKQoreworICAgIGlmKCBQdFdpZGdldElzUmVhbGl6ZWQoIHdpZGdldCApICkKKyAgICB7CisJaXNfaWdub3JlX2RyYXcgPSBUUlVFOworCVB0U3RhcnRGbHV4KCBndWkudmltQ29udGFpbmVyICk7CisJUHRDb250YWluZXJIb2xkKCBndWkudmltQ29udGFpbmVyICk7CisgICAgfQorCisgICAgcmV0dXJuKCBQdF9DT05USU5VRSApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICB2b2lkCitndWlfcGhfZW5jb2RpbmdfY2hhbmdlZCggaW50IG5ld19lbmNvZGluZyApCit7CisgICAgLyogRGVmYXVsdCBlbmNvZGluZyBpcyBsYXRpbjEgKi8KKyAgICBjaGFyICpjaGFyc2V0ID0gImxhdGluMSI7CisgICAgaW50IGk7CisKKyAgICBzdHJ1Y3QgeworCWludCBlbmNvZGluZzsKKwljaGFyICpuYW1lOworICAgIH0gY2hhcnNldHNbXSA9IHsKKwl7IERCQ1NfSlBOLCAiU0hJRlRfSklTIiB9LAorCXsgREJDU19LT1IsICJjc0VVQ0tSIiB9LAorCXsgREJDU19DSFQsICJiaWc1IiB9LAorCXsgREJDU19DSFMsICJnYiIgfQorICAgIH07CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgQVJSQVlfTEVOR1RIKCBjaGFyc2V0cyApOyBpKysgKQorICAgIHsKKwlpZiggbmV3X2VuY29kaW5nID09IGNoYXJzZXRzWyBpIF0uZW5jb2RpbmcgKQorCSAgICBjaGFyc2V0ID0gY2hhcnNldHNbIGkgXS5uYW1lOworICAgIH0KKworICAgIGNoYXJzZXRfdHJhbnNsYXRlID0gUHhUcmFuc2xhdGVTZXQoIGNoYXJzZXRfdHJhbnNsYXRlLCBjaGFyc2V0ICk7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIHZvaWQKK2d1aV9tY2hfcHJlcGFyZShhcmdjLCBhcmd2KQorICAgIGludAkgICAgKmFyZ2M7CisgICAgY2hhciAgICAqKmFyZ3Y7Cit7CisgICAgUHRJbml0KCBOVUxMICk7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfaW5pdCh2b2lkKQoreworICAgIFB0QXJnX3QgYXJnc1sxMF07CisgICAgaW50CSAgICBmbGFncyA9IDAsIG4gPSAwOworCisgICAgUGhEaW1fdAl3aW5kb3dfc2l6ZSA9IHsxMDAsIDEwMH07IC8qIEFiaXRyYXJ5IHZhbHVlcyAqLworICAgIFBoUG9pbnRfdAlwb3MgPSB7MCwgMH07CisKKyAgICBndWkuZXZlbnRfYnVmZmVyID0gKFBoRXZlbnRfdCAqKSBhbGxvYyggRVZFTlRfQlVGRkVSX1NJWkUgKTsKKyAgICBpZiggZ3VpLmV2ZW50X2J1ZmZlciA9PSBOVUxMICkKKwlyZXR1cm4oIEZBSUwgKTsKKworICAgIC8qIEdldCBhIHRyYW5zbGF0aW9uIHNvIHdlIGNhbiBjb252ZXJ0IGZyb20gSVNPIExhdGluLTEgdG8gVVRGICovCisgICAgY2hhcnNldF90cmFuc2xhdGUgPSBQeFRyYW5zbGF0ZVNldCggTlVMTCwgImxhdGluMSIgKTsKKworICAgIC8qIFRoZSArMiBpcyBmb3IgdGhlIDEgcGl4ZWwgZGFyayBsaW5lIG9uIGVhY2ggc2lkZSAqLworICAgIGd1aS5ib3JkZXJfb2Zmc2V0ID0gZ3VpLmJvcmRlcl93aWR0aCA9IEdVSV9QSF9NQVJHSU4gKyAyOworCisgICAgLyogSGFuZGxlIGNsb3NlIGV2ZW50cyBvdXJzZWx2ZXMgKi8KKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfV0lORE9XX01BTkFHRURfRkxBR1MsIFB0X0ZBTFNFLCBQaF9XTV9DTE9TRSApOworICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19XSU5ET1dfTk9USUZZX0ZMQUdTLCBQdF9UUlVFLAorCSAgICBQaF9XTV9DTE9TRSB8IFBoX1dNX1JFU0laRSB8IFBoX1dNX0ZPQ1VTICk7CisgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX0RJTSwgJndpbmRvd19zaXplLCAwICk7CisgICAgZ3VpLnZpbVdpbmRvdyA9IFB0Q3JlYXRlV2lkZ2V0KCBQdFdpbmRvdywgTlVMTCwgbiwgYXJncyApOworICAgIGlmKCBndWkudmltV2luZG93ID09IE5VTEwgKQorCXJldHVybiggRkFJTCApOworCisgICAgUHRBZGRDYWxsYmFjayggZ3VpLnZpbVdpbmRvdywgUHRfQ0JfV0lORE9XLCBndWlfcGhfaGFuZGxlX3dpbmRvd19jYiwgTlVMTCApOworICAgIFB0QWRkQ2FsbGJhY2soIGd1aS52aW1XaW5kb3csIFB0X0NCX1dJTkRPV19PUEVOSU5HLAorCSAgICBndWlfcGhfaGFuZGxlX3dpbmRvd19vcGVuLCBOVUxMICk7CisKKyAgICBuID0gMDsKKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfQU5DSE9SX0ZMQUdTLCBQdF9BTkNIT1JfQUxMLCBQdF9JU19BTkNIT1JFRCApOworICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19ESU0sICZ3aW5kb3dfc2l6ZSwgMCApOworICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19QT1MsICZwb3MsIDAgKTsKKworI2lmZGVmIFVTRV9QQU5FTF9HUk9VUAorICAgIC8qIFB1dCBpbiBhIHRlbXByYXJ5IHBsYWNlIGhvbGRlciB0aXRsZSAqLworICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19QR19QQU5FTF9USVRMRVMsICZlbXB0eV90aXRsZSwgMSApOworCisgICAgZ3VpLnZpbVBhbmVsR3JvdXAgPSBQdENyZWF0ZVdpZGdldCggUHRQYW5lbEdyb3VwLCBndWkudmltV2luZG93LCBuLCBhcmdzICk7CisgICAgaWYoIGd1aS52aW1QYW5lbEdyb3VwID09IE5VTEwgKQorCXJldHVybiggRkFJTCApOworCisgICAgUHRBZGRDYWxsYmFjayggZ3VpLnZpbVBhbmVsR3JvdXAsIFB0X0NCX1BHX1BBTkVMX1NXSVRDSElORywKKwkgICAgZ3VpX3BoX2hhbmRsZV9wZ19jaGFuZ2UsIE5VTEwgKTsKKyNlbHNlCisgICAgLyogVHVybiBvZmYgYWxsIGVkZ2UgZGVjb3JhdGlvbnMgKi8KKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfQkFTSUNfRkxBR1MsIFB0X0ZBTFNFLCBQdF9BTEwgKTsKKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfQkVWRUxfV0lEVEgsIDAsIDAgKTsKKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfTUFSR0lOX1dJRFRILCAwLCAwICk7CisgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX01BUkdJTl9IRUlHSFQsIDAsIDAgKTsKKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfQ09OVEFJTkVSX0ZMQUdTLCBQdF9UUlVFLCBQdF9BVVRPX0VYVEVOVCApOworCisgICAgZ3VpLnZpbUNvbnRhaW5lciA9IFB0Q3JlYXRlV2lkZ2V0KCBQdFBhbmUsIGd1aS52aW1XaW5kb3csIG4sIGFyZ3MgKTsKKyAgICBpZiggZ3VpLnZpbUNvbnRhaW5lciA9PSBOVUxMICkKKwlyZXR1cm4oIEZBSUwgKTsKKworICAgIFB0QWRkQ2FsbGJhY2soIGd1aS52aW1Db250YWluZXIsIFB0X0NCX1JFU0laRSwgZ3VpX3BoX3BhbmVfcmVzaXplLCBOVUxMICk7CisjZW5kaWYKKworICAgIC8qIFNpemUgZm9yIHRoZSB0ZXh0IGFyZWEgaXMgc2V0IGluIGd1aV9tY2hfc2V0X3RleHRfYXJlYV9wb3MgKi8KKyAgICBuID0gMDsKKworICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19SQVdfRFJBV19GLCBndWlfcGhfaGFuZGxlX3Jhd19kcmF3LCAxICk7CisgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX0JFVkVMX1dJRFRILCBHVUlfUEhfTUFSR0lOLCAwICk7CisgICAgLyoKKyAgICAgKiBVc2luZyBmb2N1cyByZW5kZXIgYWxzbyBjYXVzZXMgdGhlIHdob2xlIHdpZGdldCB0byBiZSByZWRyYXduCisgICAgICogd2hlbmV2ZXIgaXQgY2hhbmdlcyBmb2N1cywgd2hpY2ggaXMgdmVyeSBhbm5veWluZyA6cAorICAgICAqLworICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19GTEFHUywgUHRfVFJVRSwKKwkgICAgUHRfR0VUU19GT0NVUyB8IFB0X0hJR0hMSUdIVEVEICk7CisjaWZuZGVmIEZFQVRfTU9VU0VTSEFQRQorICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19DVVJTT1JfVFlQRSwgR1VJX1BIX01PVVNFX1RZUEUsIDAgKTsKKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfQ1VSU09SX0NPTE9SLCBndWlfcGhfbW91c2VfY29sb3IsIDAgKTsKKyNlbmRpZgorCisgICAgZ3VpLnZpbVRleHRBcmVhID0gUHRDcmVhdGVXaWRnZXQoIFB0UmF3LCBQdF9ERkxUX1BBUkVOVCwgbiwgYXJncyApOworICAgIGlmKCBndWkudmltVGV4dEFyZWEgPT0gTlVMTCkKKwlyZXR1cm4oIEZBSUwgKTsKKworICAgIC8qIFRPRE86IHVzZSBQdEFkZEV2ZW50SGFuZGxlcnMgaW5zdGVhZD8gKi8KKyAgICAvKiBOb3QgdXNpbmcgUGhfRVZfQlVUX1JFUEVBVCBiZWNhdXNlIHZpbSB3b3VsZG4ndCB1c2UgaXQgYW55d2F5ICovCisgICAgUHRBZGRFdmVudEhhbmRsZXIoIGd1aS52aW1UZXh0QXJlYSwKKwkgICAgUGhfRVZfQlVUX1BSRVNTIHwgUGhfRVZfQlVUX1JFTEVBU0UgfCBQaF9FVl9QVFJfTU9USU9OX0JVVFRPTiwKKwkgICAgZ3VpX3BoX2hhbmRsZV9tb3VzZSwgTlVMTCApOworICAgIFB0QWRkRXZlbnRIYW5kbGVyKCBndWkudmltVGV4dEFyZWEsIFBoX0VWX0tFWSwKKwkgICAgZ3VpX3BoX2hhbmRsZV9rZXlib2FyZCwgTlVMTCApOworICAgIFB0QWRkQ2FsbGJhY2soIGd1aS52aW1UZXh0QXJlYSwgUHRfQ0JfR09UX0ZPQ1VTLAorCSAgICBndWlfcGhfaGFuZGxlX2ZvY3VzLCBOVUxMICk7CisgICAgUHRBZGRDYWxsYmFjayggZ3VpLnZpbVRleHRBcmVhLCBQdF9DQl9MT1NUX0ZPQ1VTLAorCSAgICBndWlfcGhfaGFuZGxlX2ZvY3VzLCBOVUxMICk7CisKKyAgICAvKgorICAgICAqIE5vdyB0aGF0IHRoZSB0ZXh0IGFyZWEgd2lkZ2V0IGhhcyBiZWVuIGNyZWF0ZWQsIHNldCB1cCB0aGUgY29sb3VycywKKyAgICAgKiB3aGljaCB3aWwgY2FsbCBQdFNldFJlc291cmNlIGZyb20gZ3VpX21jaF9uZXdfY29sb3JzCisgICAgICovCisKKyAgICAvKgorICAgICAqIENyZWF0ZSB0aGUgdHdvIHRpbWVycywgbm90IGFzIGFjY3VyYXRlIGFzIHVzaW5nIHRoZSBrZXJuZWwgdGltZXIKKyAgICAgKiBmdW5jdGlvbnMsIGJ1dCBnb29kIGVub3VnaAorICAgICAqLworICAgIGd1aV9waF90aW1lcl9jdXJzb3IgID0gUHRDcmVhdGVXaWRnZXQoIFB0VGltZXIsIGd1aS52aW1XaW5kb3csIDAsIE5VTEwgKTsKKyAgICBpZiggZ3VpX3BoX3RpbWVyX2N1cnNvciA9PSBOVUxMICkKKwlyZXR1cm4oIEZBSUwgKTsKKworICAgIGd1aV9waF90aW1lcl90aW1lb3V0ID0gUHRDcmVhdGVXaWRnZXQoIFB0VGltZXIsIGd1aS52aW1XaW5kb3csIDAsIE5VTEwgKTsKKyAgICBpZiggZ3VpX3BoX3RpbWVyX3RpbWVvdXQgPT0gTlVMTCApCisJcmV0dXJuKCBGQUlMICk7CisKKyAgICBQdEFkZENhbGxiYWNrKCBndWlfcGhfdGltZXJfY3Vyc29yLCAgUHRfQ0JfVElNRVJfQUNUSVZBVEUsCisJICAgIGd1aV9waF9oYW5kbGVfdGltZXJfY3Vyc29yLCBOVUxMKTsKKyAgICBQdEFkZENhbGxiYWNrKCBndWlfcGhfdGltZXJfdGltZW91dCwgUHRfQ0JfVElNRVJfQUNUSVZBVEUsCisJICAgIGd1aV9waF9oYW5kbGVfdGltZXJfdGltZW91dCwgTlVMTCk7CisKKyNpZmRlZiBGRUFUX01FTlUKKyAgICBuID0gMDsKKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfV0lEVEgsIHdpbmRvd19zaXplLncsIDAgKTsKKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfQU5DSE9SX0ZMQUdTLCBQdF9BTkNIT1JfTEVGVF9SSUdIVCwKKwkgICAgUHRfSVNfQU5DSE9SRUQgKTsKKyAgICBndWkudmltVG9vbEJhckdyb3VwID0gUHRDcmVhdGVXaWRnZXQoIFB0VG9vbGJhckdyb3VwLCBndWkudmltV2luZG93LAorCSAgICBuLCBhcmdzICk7CisgICAgaWYoIGd1aS52aW1Ub29sQmFyR3JvdXAgPT0gTlVMTCApCisJcmV0dXJuKCBGQUlMICk7CisKKyAgICBQdEFkZENhbGxiYWNrKCBndWkudmltVG9vbEJhckdyb3VwLCBQdF9DQl9SRVNJWkUsCisJICAgIGd1aV9waF9oYW5kbGVfbWVudV9yZXNpemUsIE5VTEwgKTsKKworICAgIG4gPSAwOworICAgIGZsYWdzID0gMDsKKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfV0lEVEgsIHdpbmRvd19zaXplLncsIDAgKTsKKyAgICBpZiggISB2aW1fc3RyY2hyKCBwX2dvLCBHT19NRU5VUyApICkKKyAgICB7CisJZmxhZ3MgfD0gUHRfREVMQVlfUkVBTElaRTsKKwlQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfRkxBR1MsIFB0X1RSVUUsIGZsYWdzICk7CisgICAgfQorICAgIGd1aS52aW1NZW51QmFyID0gUHRDcmVhdGVXaWRnZXQoIFB0TWVudUJhciwgZ3VpLnZpbVRvb2xCYXJHcm91cCwgbiwgYXJncyApOworICAgIGlmKCBndWkudmltTWVudUJhciA9PSBOVUxMICkKKwlyZXR1cm4oIEZBSUwgKTsKKworIyBpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICBuID0gMDsKKworICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19BTkNIT1JfRkxBR1MsCisJICAgIFB0X0FOQ0hPUl9MRUZUX1JJR0hUIHxQdF9UT1BfQU5DSE9SRURfVE9QLCBQdF9JU19BTkNIT1JFRCApOworICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19SRVNJWkVfRkxBR1MsIFB0X1RSVUUsCisJICAgIFB0X1JFU0laRV9ZX0FTX1JFUVVJUkVEICk7CisgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX1dJRFRILCB3aW5kb3dfc2l6ZS53LCAwICk7CisKKyAgICBmbGFncyA9IFB0X0dFVFNfRk9DVVM7CisgICAgaWYoICEgdmltX3N0cmNociggcF9nbywgR09fVE9PTEJBUiApICkKKwlmbGFncyB8PSBQdF9ERUxBWV9SRUFMSVpFOworCisgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX0ZMQUdTLCBQdF9ERUxBWV9SRUFMSVpFLCBmbGFncyApOworCisgICAgZ3VpLnZpbVRvb2xCYXIgPSBQdENyZWF0ZVdpZGdldCggUHRUb29sYmFyLCBndWkudmltVG9vbEJhckdyb3VwLCBuLCBhcmdzICk7CisgICAgaWYoIGd1aS52aW1Ub29sQmFyID09IE5VTEwgKQorCXJldHVybiggRkFJTCApOworCisgICAgLyoKKyAgICAgKiBTaXplIGZvciB0aGUgdG9vbGJhciBpcyBmZXRjaGVkIGluIGd1aV9tY2hfc2hvd190b29sYmFyLCBhZnRlcgorICAgICAqIHRoZSBidXR0b25zIGhhdmUgYmVlbiBhZGRlZCBhbmQgdGhlIHRvb2xiYXIgaGFzIHJlc2l6ZWQgaXQncyBoZWlnaHQKKyAgICAgKiBmb3IgdGhlIGJ1dHRvbnMgdG8gZml0CisgICAgICovCisjIGVuZGlmCisKKyNlbmRpZgorCisgICAgcmV0dXJuKCBPSyApOworfQorCisgICAgaW50CitndWlfbWNoX2luaXRfY2hlY2sodm9pZCkKK3sKKyAgICByZXR1cm4oIChpc19waG90b25fYXZhaWxhYmxlID09IFRSVUUpID8gT0sgOiBGQUlMICk7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfb3Blbih2b2lkKQoreworICAgIGd1aS5ub3JtX3BpeGVsID0gIFBnX0JMQUNLOworICAgIGd1aS5iYWNrX3BpeGVsID0gIFBnX1dISVRFOworCisgICAgc2V0X25vcm1hbF9jb2xvcnMoKTsKKworICAgIGd1aV9jaGVja19jb2xvcnMoKTsKKyAgICBndWkuZGVmX25vcm1fcGl4ZWwgPSBndWkubm9ybV9waXhlbDsKKyAgICBndWkuZGVmX2JhY2tfcGl4ZWwgPSBndWkuYmFja19waXhlbDsKKworICAgIGhpZ2hsaWdodF9ndWlfc3RhcnRlZCgpOworCisgICAgaWYgKGd1aV93aW5feCAhPSAtMSAmJiBndWlfd2luX3kgIT0gLTEpCisJZ3VpX21jaF9zZXRfd2lucG9zKGd1aV93aW5feCwgZ3VpX3dpbl95KTsKKworICAgIHJldHVybiggKFB0UmVhbGl6ZVdpZGdldCggZ3VpLnZpbVdpbmRvdyApID09IDApID8gT0sgOiBGQUlMICk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2V4aXQoaW50IHJjKQoreworICAgIFB0RGVzdHJveVdpZGdldCggZ3VpLnZpbVdpbmRvdyApOworCisgICAgUHhUcmFuc2xhdGVTZXQoIGNoYXJzZXRfdHJhbnNsYXRlLCBOVUxMICk7CisKKyAgICB2aW1fZnJlZSggZ3VpLmV2ZW50X2J1ZmZlciApOworCisjaWZkZWYgVVNFX1BBTkVMX0dST1VQUworICAgIHZpbV9mcmVlKCBwYW5lbF90aXRsZXMgKTsKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGV2ZW50cyAqLworCisvKiBXaGVuIG5vIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCBwaG90b24gd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24sIHdvcmtpbmcgaXMKKyAqIHNldCB0byBGQUxTRSwgYW5kIHRoZSBndWlfbWNoX3VwZGF0ZSBsb29wIHdpbGwgZXhpdC4gKi8KKyAgICBzdGF0aWMgaW50CitleGl0X2d1aV9tY2hfdXBkYXRlKCB2b2lkICpkYXRhICkKK3sKKyAgICAqKGludCAqKWRhdGEgPSBGQUxTRTsKKyAgICByZXR1cm4oIFB0X0VORCApOworfQorCisgICAgdm9pZAorZ3VpX21jaF91cGRhdGUodm9pZCkKK3sKKyAgICBpbnQgd29ya2luZyA9IFRSVUU7CisKKyAgICBQdEFwcEFkZFdvcmtQcm9jKCBOVUxMLCBleGl0X2d1aV9tY2hfdXBkYXRlLCAmd29ya2luZyApOworICAgIHdoaWxlKCAoIHdvcmtpbmcgPT0gVFJVRSApICYmICF2aW1faXNfaW5wdXRfYnVmX2Z1bGwoKSkKKyAgICB7CisJUHRQcm9jZXNzRXZlbnQoKTsKKyAgICB9Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfd2FpdF9mb3JfY2hhcnMoaW50IHd0aW1lKQoreworICAgIGlzX3RpbWVvdXQgPSBGQUxTRTsKKworICAgIGlmKCB3dGltZSA+IDAgKQorCVB0U2V0UmVzb3VyY2UoIGd1aV9waF90aW1lcl90aW1lb3V0LCBQdF9BUkdfVElNRVJfSU5JVElBTCwgd3RpbWUsIDAgKTsKKworICAgIHdoaWxlKCAxICkKKyAgICB7CisJUHRQcm9jZXNzRXZlbnQoKTsKKwlpZiggaW5wdXRfYXZhaWxhYmxlKCkgKQorCXsKKwkgICAgUHRTZXRSZXNvdXJjZSggZ3VpX3BoX3RpbWVyX3RpbWVvdXQsIFB0X0FSR19USU1FUl9JTklUSUFMLCAwLCAwICk7CisJICAgIHJldHVybiggT0sgKTsKKwl9CisJZWxzZSBpZiggaXNfdGltZW91dCA9PSBUUlVFICkKKwkgICAgcmV0dXJuKCBGQUlMICk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZCggRkVBVF9CUk9XU0UgKSB8fCBkZWZpbmVkKCBQUk9UTyApCisvKgorICogUHV0IHVwIGEgZmlsZSByZXF1ZXN0ZXIuCisgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBuYW1lIGluIGFsbG9jYXRlZCBtZW1vcnksIG9yIE5VTEwgZm9yIENhbmNlbC4KKyAqIHNhdmluZywJICAgIHNlbGVjdCBmaWxlIHRvIHdyaXRlCisgKiB0aXRsZQkgICAgdGl0bGUgZm9yIHRoZSB3aW5kb3cKKyAqIGRlZmF1bHRfbmFtZQkgICAgZGVmYXVsdCBuYW1lICh3ZWxsIGR1aCEpCisgKiBleHQJCSAgICBub3QgdXNlZCAoZXh0ZW5zaW9uIGFkZGVkKQorICogaW5pdGRpcgkgICAgaW5pdGlhbCBkaXJlY3RvcnksIE5VTEwgZm9yIGN1cnJlbnQgZGlyCisgKiBmaWx0ZXIJICAgIG5vdCB1c2VkIChmaWxlIG5hbWUgZmlsdGVyKQorICovCisgICAgY2hhcl91ICoKK2d1aV9tY2hfYnJvd3NlKAorCWludCBzYXZpbmcsCisJY2hhcl91ICp0aXRsZSwKKwljaGFyX3UgKmRlZmF1bHRfbmFtZSwKKwljaGFyX3UgKmV4dCwKKwljaGFyX3UgKmluaXRkaXIsCisJY2hhcl91ICpmaWx0ZXIpCit7CisgICAgUHRGaWxlU2VsZWN0aW9uSW5mb190IGZpbGU7CisgICAgaW50CSAgICBmbGFnczsKKyAgICBjaGFyX3UgICpkZWZhdWx0X3BhdGg7CisgICAgY2hhcl91ICAqb3Blbl90ZXh0ID0gTlVMTDsKKworICAgIGZsYWdzID0gMDsKKyAgICBtZW1zZXQoICZmaWxlLCAwLCBzaXplb2YoIGZpbGUgKSApOworCisgICAgZGVmYXVsdF9wYXRoID0gYWxsb2MoIE1BWFBBVEhMICsgMSArIE5BTUVfTUFYICsgMSApOworICAgIGlmKCBkZWZhdWx0X3BhdGggIT0gTlVMTCApCisgICAgeworCWlmKCBzYXZpbmcgPT0gVFJVRSApCisJeworCSAgICAvKiBEb24ndCBuZWVkIFB0X0ZTUl9DT05GSVJNX0VYSVNUSU5HLCB2aW0gd2lsbCBhc2sgYW55d2F5ICovCisJICAgIGZsYWdzIHw9IFB0X0ZTUl9OT19GQ0hFQ0s7CisJICAgIG9wZW5fdGV4dCA9ICImU2F2ZSI7CisJfQorCisJLyogY29tYmluZSB0aGUgZGlyZWN0b3J5IGFuZCBmaWxlbmFtZSBpbnRvIGEgc2luZ2xlIHBhdGggKi8KKwlpZiggaW5pdGRpciA9PSBOVUxMIHx8ICppbml0ZGlyID09IE5VTCApCisJeworCSAgICBtY2hfZGlybmFtZSggZGVmYXVsdF9wYXRoLCBNQVhQQVRITCApOworCSAgICBpbml0ZGlyID0gZGVmYXVsdF9wYXRoOworCX0KKwllbHNlCisJeworCSAgICBTVFJDUFkoIGRlZmF1bHRfcGF0aCwgaW5pdGRpciApOworCSAgICBpbml0ZGlyID0gZGVmYXVsdF9wYXRoOworCX0KKworCWlmKCBkZWZhdWx0X25hbWUgIT0gTlVMTCApCisJeworCSAgICBpZiggZGVmYXVsdF9wYXRoWyBTVFJMRU4oIGRlZmF1bHRfcGF0aCApIC0gMSBdICE9ICcvJyApCisJCVNUUkNBVCggZGVmYXVsdF9wYXRoLCAiLyIgKTsKKworCSAgICBTVFJDQVQoIGRlZmF1bHRfcGF0aCwgZGVmYXVsdF9uYW1lICk7CisJfQorCisJLyogVE9ETzogYWRkIGEgZmlsdGVyPyAqLworCVB0RmlsZVNlbGVjdGlvbigKKwkJZ3VpLnZpbVdpbmRvdywKKwkJTlVMTCwKKwkJdGl0bGUsCisJCWRlZmF1bHRfcGF0aCwKKwkJTlVMTCwKKwkJb3Blbl90ZXh0LAorCQlOVUxMLAorCQlOVUxMLAorCQkmZmlsZSwKKwkJZmxhZ3MgKTsKKworCXZpbV9mcmVlKCBkZWZhdWx0X3BhdGggKTsKKworCWlmKCBmaWxlLnJldCA9PSBQdF9GU0RJQUxPR19CVE4xICkKKwkgICAgcmV0dXJuKCB2aW1fc3Ryc2F2ZSggZmlsZS5wYXRoICkgKTsKKyAgICB9CisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoIEZFQVRfR1VJX0RJQUxPRyApIHx8IGRlZmluZWQoIFBST1RPICkKK3N0YXRpYyBQdFdpZGdldF90ICpndWlfcGhfZGlhbG9nX3RleHQgPSBOVUxMOworCisgICAgc3RhdGljIGludAorZ3VpX3BoX2RpYWxvZ19jbG9zZSggaW50IGJ1dHRvbiwgdm9pZCAqZGF0YSApCit7CisgICAgUHRNb2RhbEN0cmxfdCAqbW9kYWxfY3RybCA9IGRhdGE7CisgICAgY2hhcl91ICpkaWFsb2dfdGV4dCwgKnZpbV90ZXh0OworCisgICAgaWYoIGd1aV9waF9kaWFsb2dfdGV4dCAhPSBOVUxMICkKKyAgICB7CisJUHRHZXRSZXNvdXJjZSggZ3VpX3BoX2RpYWxvZ190ZXh0LCBQdF9BUkdfVEVYVF9TVFJJTkcsICZkaWFsb2dfdGV4dCwgMCApOworCVB0R2V0UmVzb3VyY2UoIGd1aV9waF9kaWFsb2dfdGV4dCwgUHRfQVJHX1BPSU5URVIsICZ2aW1fdGV4dCwgMCApOworCVNUUk5DUFkoIHZpbV90ZXh0LCBkaWFsb2dfdGV4dCwgSU9TSVpFIC0gMSApOworICAgIH0KKworICAgIFB0TW9kYWxVbmJsb2NrKCBtb2RhbF9jdHJsLCAodm9pZCAqKSBidXR0b24gKTsKKworICAgIHJldHVybiggUHRfVFJVRSApOworfQorCisgICAgc3RhdGljIGludAorZ3VpX3BoX2RpYWxvZ190ZXh0X2VudGVyKCBQdFdpZGdldF90ICp3aWRnZXQsIHZvaWQgKmRhdGEsIFB0Q2FsbGJhY2tJbmZvX3QgKmluZm8gKQoreworICAgIGlmKCBpbmZvLT5yZWFzb25fc3VidHlwZSA9PSBQdF9FRElUX0FDVElWQVRFICkKKwlndWlfcGhfZGlhbG9nX2Nsb3NlKCAxLCBkYXRhICk7CisgICAgcmV0dXJuKCBQdF9DT05USU5VRSApOworfQorCisgICAgc3RhdGljIGludAorZ3VpX3BoX2RpYWxvZ19lc2MoIFB0V2lkZ2V0X3QgKndpZGdldCwgdm9pZCAqZGF0YSwgUHRDYWxsYmFja0luZm9fdCAqaW5mbyApCit7CisgICAgUGhLZXlFdmVudF90ICprZXk7CisKKyAgICBrZXkgPSBQaEdldERhdGEoIGluZm8tPmV2ZW50ICk7CisgICAgaWYoICgga2V5LT5rZXlfZmxhZ3MgJiBQa19LRl9DYXBfVmFsaWQgKSAmJiAoIGtleS0+a2V5X2NhcCA9PSBQa19Fc2NhcGUgKSApCisgICAgeworCWd1aV9waF9kaWFsb2dfY2xvc2UoIDAsIGRhdGEgKTsKKwlyZXR1cm4oIFB0X0NPTlNVTUUgKTsKKyAgICB9CisgICAgcmV0dXJuKCBQdF9QUk9DRVNTICk7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfZGlhbG9nKAorCWludAl0eXBlLAorCWNoYXJfdQkqdGl0bGUsCisJY2hhcl91CSptZXNzYWdlLAorCWNoYXJfdQkqYnV0dG9ucywKKwlpbnQJZGVmYXVsdF9idXR0b24sCisJY2hhcl91CSp0ZXh0ZmllbGQpCit7CisgICAgY2hhcl91CSpzdHI7CisgICAgY2hhcl91CSoqYnV0dG9uX2FycmF5OworICAgIGNoYXJfdQkqYnV0dG9uc19jb3B5OworCisgICAgaW50CQlidXR0b25fY291bnQ7CisgICAgaW50CQlpLCBsZW47CisgICAgaW50CQlkaWFsb2dfcmVzdWx0ID0gLTE7CisKKyAgICAvKiBGSVhNRTogdGhlIHZlcnRpY2FsIG9wdGlvbiBpbiBndWlvcHRpb25zIGlzIGJsYXRhbnRseSBpZ25vcmVkICovCisgICAgLyogRklYTUU6IHNvIGlzIHRoZSB0eXBlICovCisKKyAgICBidXR0b25fY291bnQgPSBsZW4gPSBpID0gMDsKKworICAgIGlmKCBidXR0b25zID09IE5VTEwgfHwgKmJ1dHRvbnMgPT0gTlVMICkKKwlyZXR1cm4oIC0xICk7CisKKyAgICAvKiBUaGVyZSBpcyBvbmUgbGVzcyBzZXBhcmF0b3IgdGhhbiBidXR0b25zLCBzbyBidW1wIHVwIHRoZSBidXR0b24gY291bnQgKi8KKyAgICBidXR0b25fY291bnQgPSAxOworCisgICAgLyogQ291bnQgc3RyaW5nIGxlbmd0aCBhbmQgbnVtYmVyIG9mIHNlcGVyYXRvcnMgKi8KKyAgICBmb3IoIHN0ciA9IGJ1dHRvbnM7ICpzdHI7IHN0cisrICkKKyAgICB7CisJbGVuKys7CisJaWYoICpzdHIgPT0gRExHX0JVVFRPTl9TRVAgKQorCSAgICBidXR0b25fY291bnQrKzsKKyAgICB9CisKKyAgICBpZiAoIHRpdGxlID09IE5VTEwgKQorCXRpdGxlID0gIlZpbSI7CisKKyAgICBidXR0b25zX2NvcHkgPSBhbGxvYyggbGVuICsgMSApOworICAgIGJ1dHRvbl9hcnJheSA9IChjaGFyX3UgKiopIGFsbG9jKCBidXR0b25fY291bnQgKiBzaXplb2YoIGNoYXJfdSAqICkgKTsKKyAgICBpZiggYnV0dG9uc19jb3B5ICE9IE5VTEwgJiYgYnV0dG9uX2FycmF5ICE9IE5VTEwgKQorICAgIHsKKwlTVFJDUFkoIGJ1dHRvbnNfY29weSwgYnV0dG9ucyApOworCisJLyoKKwkgKiBDb252ZXJ0IERMR19CVVRUT05fU0VQIGludG8gTlVMJ3MgYW5kIGZpbGwgaW4KKwkgKiBidXR0b25fYXJyYXkgd2l0aCB0aGUgcG9pbnRlciB0byBlYWNoIE5VTCB0ZXJtaW5hdGVkIHN0cmluZworCSAqLworCXN0ciA9IGJ1dHRvbnNfY29weTsKKwlmb3IoIGkgPSAwOyBpIDwgYnV0dG9uX2NvdW50OyBpKysgKQorCXsKKwkgICAgYnV0dG9uX2FycmF5WyBpIF0gPSBzdHI7CisJICAgIGZvciggOyAqc3RyOyBzdHIrKyApCisJICAgIHsKKwkJaWYoICpzdHIgPT0gRExHX0JVVFRPTl9TRVAgKQorCQl7CisJCSAgICAqc3RyKysgPSBOVUw7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorI2lmbmRlZiBGRUFUX0dVSV9URVhURElBTE9HCisJZGlhbG9nX3Jlc3VsdCA9IFB0QWxlcnQoCisJCWd1aS52aW1XaW5kb3csIE5VTEwsCisJCXRpdGxlLAorCQlOVUxMLAorCQltZXNzYWdlLCBOVUxMLAorCQlidXR0b25fY291bnQsIChjb25zdCBjaGFyICoqKSBidXR0b25fYXJyYXksIE5VTEwsCisJCWRlZmF1bHRfYnV0dG9uLCAwLCBQdF9NT0RBTCApOworI2Vsc2UKKwkvKiBXcml0aW5nIHRoZSBkaWFsb2cgb3Vyc2VsdmVzIGxldHMgdXMgYWRkIGV4dHJhIGZlYXR1cmVzLCBsaWtlCisJICogdHJhcHBpbmcgdGhlIGVzY2FwZSBrZXkgYW5kIHJldHVybmluZyAwIHRvIHZpbSAqLworCXsKKwkgICAgaW50IG47CisJICAgIFB0QXJnX3QgYXJnc1s1XTsKKwkgICAgUHRXaWRnZXRfdCAqZGlhbG9nLCAqcGFuZTsKKwkgICAgUHRNb2RhbEN0cmxfdCBtb2RhbF9jdHJsOworCSAgICBQdERpYWxvZ0luZm9fdCBkaTsKKworCSAgICBtZW1zZXQoICZkaSwgMCwgc2l6ZW9mKCBkaSApICk7CisJICAgIG1lbXNldCggJm1vZGFsX2N0cmwsIDAsIHNpemVvZiggbW9kYWxfY3RybCApICk7CisKKwkgICAgbiA9IDA7CisJICAgIFB0U2V0QXJnKCAmYXJnc1tuKytdLCBQdF9BUkdfR1JPVVBfUk9XU19DT0xTLCAwLCAwICk7CisJICAgIFB0U2V0QXJnKCAmYXJnc1tuKytdLCBQdF9BUkdfV0lEVEgsIDM1MCwgMCApOworCSAgICBQdFNldEFyZyggJmFyZ3NbbisrXSwgUHRfQVJHX0dST1VQX09SSUVOVEFUSU9OLAorCQkgICAgUHRfR1JPVVBfVkVSVElDQUwsIDAgKTsKKwkgICAgUHRTZXRBcmcoICZhcmdzW24rK10sIFB0X0FSR19HUk9VUF9GTEFHUywKKwkJICAgIFB0X1RSVUUsIFB0X0dST1VQX05PX0tFWVMgfCBQdF9HUk9VUF9TVFJFVENIX0hPUklaT05UQUwgKTsKKwkgICAgUHRTZXRBcmcoICZhcmdzW24rK10sIFB0X0FSR19DT05UQUlORVJfRkxBR1MsIFB0X0ZBTFNFLCBQdF9UUlVFICk7CisJICAgIHBhbmUgPSBQdENyZWF0ZVdpZGdldCggUHRHcm91cCwgTlVMTCwgbiwgYXJncyApOworCisJICAgIG4gPSAwOworCSAgICBQdFNldEFyZyggJmFyZ3NbbisrXSwgUHRfQVJHX1RFWFRfU1RSSU5HLCBtZXNzYWdlLCAwICk7CisJICAgIFB0Q3JlYXRlV2lkZ2V0KCBQdExhYmVsLCBwYW5lLCBuLCBhcmdzICk7CisKKwkgICAgaWYoIHRleHRmaWVsZCAhPSBOVUxMICkKKwkgICAgeworCQluID0gMDsKKwkJUHRTZXRBcmcoICZhcmdzW24rK10sIFB0X0FSR19NQVhfTEVOR1RILCBJT1NJWkUgLSAxLCAwICk7CisJCVB0U2V0QXJnKCAmYXJnc1tuKytdLCBQdF9BUkdfVEVYVF9TVFJJTkcsIHRleHRmaWVsZCwgMCApOworCQlQdFNldEFyZyggJmFyZ3NbbisrXSwgUHRfQVJHX1BPSU5URVIsIHRleHRmaWVsZCwgMCApOworCQlndWlfcGhfZGlhbG9nX3RleHQgPSBQdENyZWF0ZVdpZGdldCggUHRUZXh0LCBwYW5lLCBuLCBhcmdzICk7CisJCVB0QWRkQ2FsbGJhY2soIGd1aV9waF9kaWFsb2dfdGV4dCwgUHRfQ0JfQUNUSVZBVEUsCisJCQlndWlfcGhfZGlhbG9nX3RleHRfZW50ZXIsICZtb2RhbF9jdHJsICk7CisJICAgIH0KKworCSAgICBkaS5wYXJlbnQgPSBndWkudmltV2luZG93OworCSAgICBkaS5wYW5lID0gcGFuZTsKKwkgICAgZGkudGl0bGUgPSB0aXRsZTsKKwkgICAgZGkuYnV0dG9ucyA9IChjb25zdCBjaGFyICoqKSBidXR0b25fYXJyYXk7CisJICAgIGRpLm5idG5zID0gYnV0dG9uX2NvdW50OworCSAgICBkaS5kZWZfYnRuID0gZGVmYXVsdF9idXR0b247CisJICAgIC8qIFRoaXMgaXMganVzdCB0byBnaXZlIHRoZSBkaWFsb2cgdGhlIGNsb3NlIGJ1dHRvbi4KKwkgICAgICogV2UgY2hlY2sgZm9yIHRoZSBFc2NhcGUga2V5IG91cnNlbHZlcyBhbmQgcmV0dXJuIDAgKi8KKwkgICAgZGkuZXNjX2J0biA9IGJ1dHRvbl9jb3VudDsKKwkgICAgZGkuY2FsbGJhY2sgPSBndWlfcGhfZGlhbG9nX2Nsb3NlOworCSAgICBkaS5kYXRhID0gJm1vZGFsX2N0cmw7CisKKwkgICAgZGlhbG9nID0gUHRDcmVhdGVEaWFsb2coICZkaSApOworCSAgICBQdEFkZEZpbHRlckNhbGxiYWNrKCBkaWFsb2csIFBoX0VWX0tFWSwKKwkJICAgIGd1aV9waF9kaWFsb2dfZXNjLCAmbW9kYWxfY3RybCApOworCisJICAgIGlmKCBndWlfcGhfZGlhbG9nX3RleHQgIT0gTlVMTCApCisJCVB0R2l2ZUZvY3VzKCBndWlfcGhfZGlhbG9nX3RleHQsIE5VTEwgKTsKKworCSAgICAvKiBPcGVuIGRpYWxvZywgYmxvY2sgdGhlIHZpbSB3aW5kb3cgYW5kIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gY2xvc2UgKi8KKwkgICAgUHRSZWFsaXplV2lkZ2V0KCBkaWFsb2cgKTsKKwkgICAgUHRNYWtlTW9kYWwoIGRpYWxvZywgUGhfQ1VSU09SX05PSU5QVVQsIFBoX0NVUlNPUl9ERUZBVUxUX0NPTE9SICk7CisJICAgIGRpYWxvZ19yZXN1bHQgPSAoaW50KSBQdE1vZGFsQmxvY2soICZtb2RhbF9jdHJsLCAwICk7CisKKwkgICAgUHREZXN0cm95V2lkZ2V0KCBkaWFsb2cgKTsKKwkgICAgZ3VpX3BoX2RpYWxvZ190ZXh0ID0gTlVMTDsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgICB2aW1fZnJlZSggYnV0dG9uX2FycmF5ICk7CisgICAgdmltX2ZyZWUoIGJ1dHRvbnNfY29weSApOworCisgICAgcmV0dXJuKCBkaWFsb2dfcmVzdWx0ICk7Cit9CisjZW5kaWYKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogd2luZG93IHNpemUvcG9zaXRpb24vc3RhdGUgKi8KKworICAgIGludAorZ3VpX21jaF9nZXRfd2lucG9zKGludCAqeCwgaW50ICp5KQoreworICAgIFBoUG9pbnRfdCAqcG9zOworCisgICAgcG9zID0gUHRXaWRnZXRQb3MoIGd1aS52aW1XaW5kb3csIE5VTEwgKTsKKworICAgICp4ID0gcG9zLT54OworICAgICp5ID0gcG9zLT55OworCisgICAgcmV0dXJuKCBPSyApOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfd2lucG9zKGludCB4LCBpbnQgeSkKK3sKKyAgICBQaFBvaW50X3QgcG9zID0geyB4LCB5IH07CisKKyAgICBQdFNldFJlc291cmNlKCBndWkudmltV2luZG93LCBQdF9BUkdfUE9TLCAmcG9zLCAwICk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF9zaGVsbHNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCWludCBtaW5fd2lkdGgsIGludCBtaW5faGVpZ2h0LCBpbnQgYmFzZV93aWR0aCwgaW50IGJhc2VfaGVpZ2h0KQoreworICAgIFBoRGltX3Qgd2luZG93X3NpemUgPSB7IHdpZHRoLCBoZWlnaHQgfTsKKyAgICBQaERpbV90IG1pbl9zaXplID0geyBtaW5fd2lkdGgsIG1pbl9oZWlnaHQgfTsKKworI2lmZGVmIFVTRV9QQU5FTF9HUk9VUAorICAgIHdpbmRvd19zaXplLncgKz0gcGdfbWFyZ2luX2xlZnQgKyBwZ19tYXJnaW5fcmlnaHQ7CisgICAgd2luZG93X3NpemUuaCArPSBwZ19tYXJnaW5fdG9wICsgcGdfbWFyZ2luX2JvdHRvbTsKKyNlbmRpZgorCisgICAgUHRTZXRSZXNvdXJjZSggZ3VpLnZpbVdpbmRvdywgUHRfQVJHX01JTklNVU1fRElNLCAmbWluX3NpemUsIDAgKTsKKyAgICBQdFNldFJlc291cmNlKCBndWkudmltV2luZG93LCBQdF9BUkdfRElNLCAmd2luZG93X3NpemUsIDAgKTsKKworICAgIGlmKCAhIFB0V2lkZ2V0SXNSZWFsaXplZCggZ3VpLnZpbVdpbmRvdyApICkKKwlndWlfcGhfcmVzaXplX2NvbnRhaW5lcigpOworfQorCisvKgorICogUmV0dXJuIHRoZSBhbW91bnQgb2Ygc2NyZWVuIHNwYWNlIHRoYXQgaGFzbid0IGJlZW4gYWxsb2NhdGVkIChzdWNoIGFzCisgKiBieSB0aGUgc2hlbGYpLgorICovCisgICAgdm9pZAorZ3VpX21jaF9nZXRfc2NyZWVuX2RpbWVuc2lvbnMoaW50ICpzY3JlZW5fdywgaW50ICpzY3JlZW5faCkKK3sKKyAgICBQaFJlY3RfdCBjb25zb2xlOworCisgICAgUGhXaW5kb3dRdWVyeVZpc2libGUoIFBoX1FVRVJZX1dPUktTUEFDRSwgMCwKKwkgICAgUGhJbnB1dEdyb3VwKCBOVUxMICksICZjb25zb2xlICk7CisKKyAgICAqc2NyZWVuX3cgPSBjb25zb2xlLmxyLnggLSBjb25zb2xlLnVsLnggKyAxOworICAgICpzY3JlZW5faCA9IGNvbnNvbGUubHIueSAtIGNvbnNvbGUudWwueSArIDE7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2ljb25pZnkodm9pZCkKK3sKKyAgICBQaFdpbmRvd0V2ZW50X3QgZXZlbnQ7CisKKyAgICBtZW1zZXQoICZldmVudCwgMCwgc2l6ZW9mIChldmVudCkgKTsKKyAgICBldmVudC5ldmVudF9mID0gUGhfV01fSElERTsKKyAgICBldmVudC5ldmVudF9zdGF0ZSA9IFBoX1dNX0VWU1RBVEVfSElERTsKKyAgICBldmVudC5yaWQgPSBQdFdpZGdldFJpZCggZ3VpLnZpbVdpbmRvdyApOworICAgIFB0Rm9yd2FyZFdpbmRvd0V2ZW50KCAmZXZlbnQgKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEJyaW5nIHRoZSBWaW0gd2luZG93IHRvIHRoZSBmb3JlZ3JvdW5kLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZm9yZWdyb3VuZCgpCit7CisgICAgUGhXaW5kb3dFdmVudF90IGV2ZW50OworCisgICAgbWVtc2V0KCAmZXZlbnQsIDAsIHNpemVvZiAoZXZlbnQpICk7CisgICAgZXZlbnQuZXZlbnRfZiA9IFBoX1dNX1RPRlJPTlQ7CisgICAgZXZlbnQuZXZlbnRfc3RhdGUgPSBQaF9XTV9FVlNUQVRFX0ZGUk9OVDsKKyAgICBldmVudC5yaWQgPSBQdFdpZGdldFJpZCggZ3VpLnZpbVdpbmRvdyApOworICAgIFB0Rm9yd2FyZFdpbmRvd0V2ZW50KCAmZXZlbnQgKTsKK30KKyNlbmRpZgorCisgICAgdm9pZAorZ3VpX21jaF9zZXR0aXRsZShjaGFyX3UgKnRpdGxlLAljaGFyX3UgKmljb24pCit7CisjaWZkZWYgVVNFX1BBTkVMX0dST1VQCisgICAgZ3VpX3BoX3BnX3NldF9idWZmZXJfbnVtKCBjdXJ3aW4tPndfYnVmZmVyLT5iX2ZudW0gKTsKKyNlbmRpZgorICAgIFB0U2V0UmVzb3VyY2UoIGd1aS52aW1XaW5kb3csIFB0X0FSR19XSU5ET1dfVElUTEUsIHRpdGxlLCAwICk7CisgICAgLyogTm90IHN1cmUgd2hhdCB0byBkbyB3aXRoIHRoZSBpY29uIHRleHQsIHNldCBiYWxsb29uIHRleHQgc29tZWhvdz8gKi8KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTY3JvbGxiYXIgKi8KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3Njcm9sbGJhcl90aHVtYihzY3JvbGxiYXJfVCAqc2IsIGludCB2YWwsIGludCBzaXplLCBpbnQgbWF4KQoreworICAgIGludAkgICAgbiA9IDA7CisgICAgUHRBcmdfdCBhcmdzWzNdOworCisgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX01BWElNVU0sIG1heCwgMCApOworICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19TTElERVJfU0laRSwgc2l6ZSwgMCApOworICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19HQVVHRV9WQUxVRSwgdmFsLCAwICk7CisgICAgUHRTZXRSZXNvdXJjZXMoIHNiLT5pZCwgbiwgYXJncyApOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3BvcyhzY3JvbGxiYXJfVCAqc2IsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQoreworICAgIFBoQXJlYV90IGFyZWEgPSB7eyB4LCB5IH0sIHsgdywgaCB9fTsKKworICAgIFB0U2V0UmVzb3VyY2UoIHNiLT5pZCwgUHRfQVJHX0FSRUEsICZhcmVhLCAwICk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2NyZWF0ZV9zY3JvbGxiYXIoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgb3JpZW50KQoreworICAgIGludAkgICAgbiA9IDA7CisvKiAgICBpbnQJICAgIGFuY2hvcl9mbGFncyA9IDA7Ki8KKyAgICBQdEFyZ190IGFyZ3NbNF07CisKKyAgICAvKgorICAgICAqIFN0b3AgdGhlIHNjcm9sbGJhciBmcm9tIGJlaW5nIHJlYWxpemVkIHdoZW4gdGhlIHBhcmVudAorICAgICAqIGlzIHJlYWxpemVkLCBzbyBpdCBjYW4gYmUgZXhwbGljaXRseSByZWFsaXplZCBieSB2aW0uCisgICAgICoKKyAgICAgKiBBbHNvLCBkb24ndCBsZXQgdGhlIHNjcm9sbGJhciBnZXQgZm9jdXMKKyAgICAgKi8KKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfRkxBR1MsIFB0X0RFTEFZX1JFQUxJWkUsCisJICAgIFB0X0RFTEFZX1JFQUxJWkUgfCBQdF9HRVRTX0ZPQ1VTICk7CisgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX1NDUk9MTEJBUl9GTEFHUywgUHRfU0NST0xMQkFSX1NIT1dfQVJST1dTLCAwKTsKKyNpZiAwCisgICAgLyogRG9uJ3QgbmVlZCB0aGlzIGFuY2hvcmluZyBmb3IgdGhlIHNjcm9sbGJhcnMgKi8KKyAgICBpZiggb3JpZW50ID09IFNCQVJfSE9SSVogKQorICAgIHsKKwlhbmNob3JfZmxhZ3MgPSBQdF9CT1RUT01fQU5DSE9SRURfQk9UVE9NIHwKKwkgICAgUHRfTEVGVF9BTkNIT1JFRF9MRUZUIHwgUHRfUklHSFRfQU5DSE9SRURfUklHSFQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJYW5jaG9yX2ZsYWdzID0gUHRfQk9UVE9NX0FOQ0hPUkVEX0JPVFRPTSB8IFB0X1RPUF9BTkNIT1JFRF9UT1A7CisJaWYoIHNiLT53cCAhPSBOVUxMICkKKwl7CisJICAgIGlmKCBzYiA9PSAmc2ItPndwLT53X3Njcm9sbGJhcnNbIFNCQVJfTEVGVCBdICkKKwkJYW5jaG9yX2ZsYWdzIHw9IFB0X0xFRlRfQU5DSE9SRURfTEVGVDsKKwkgICAgZWxzZQorCQlhbmNob3JfZmxhZ3MgfD0gUHRfUklHSFRfQU5DSE9SRURfUklHSFQ7CisJfQorICAgIH0KKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfQU5DSE9SX0ZMQUdTLCBhbmNob3JfZmxhZ3MsIFB0X0lTX0FOQ0hPUkVEICk7CisjZW5kaWYKKyAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfT1JJRU5UQVRJT04sCisJICAgIChvcmllbnQgPT0gU0JBUl9IT1JJWikgPyBQdF9IT1JJWk9OVEFMIDogUHRfVkVSVElDQUwsIDAgKTsKKyNpZmRlZiBVU0VfUEFORUxfR1JPVVAKKyAgICBzYi0+aWQgPSBQdENyZWF0ZVdpZGdldCggUHRTY3JvbGxiYXIsIGd1aS52aW1QYW5lbEdyb3VwLCBuLCBhcmdzICk7CisjZWxzZQorICAgIHNiLT5pZCA9IFB0Q3JlYXRlV2lkZ2V0KCBQdFNjcm9sbGJhciwgZ3VpLnZpbUNvbnRhaW5lciwgbiwgYXJncyApOworI2VuZGlmCisKKyAgICBQdEFkZENhbGxiYWNrKCBzYi0+aWQsIFB0X0NCX1NDUk9MTEJBUl9NT1ZFLCBndWlfcGhfaGFuZGxlX3Njcm9sbGJhciwgc2IgKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZW5hYmxlX3Njcm9sbGJhcihzY3JvbGxiYXJfVCAqc2IsIGludCBmbGFnKQoreworICAgIGlmKCBmbGFnICE9IDAgKQorCVB0UmVhbGl6ZVdpZGdldCggc2ItPmlkICk7CisgICAgZWxzZQorCVB0VW5yZWFsaXplV2lkZ2V0KCBzYi0+aWQgKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZGVzdHJveV9zY3JvbGxiYXIoc2Nyb2xsYmFyX1QgKnNiKQoreworICAgIFB0RGVzdHJveVdpZGdldCggc2ItPmlkICk7CisgICAgc2ItPmlkID0gTlVMTDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNb3VzZSBmdW5jdGlvbnMgKi8KKworI2lmIGRlZmluZWQoRkVBVF9NT1VTRVNIQVBFKSB8fCBkZWZpbmVkKFBST1RPKQorLyogVGhlIGxhc3Qgc2V0IG1vdXNlIHBvaW50ZXIgc2hhcGUgaXMgcmVtZW1iZXJlZCwgdG8gYmUgdXNlZCB3aGVuIGl0IGdvZXMKKyAqIGZyb20gaGlkZGVuIHRvIG5vdCBoaWRkZW4uICovCitzdGF0aWMgaW50IGxhc3Rfc2hhcGUgPSAwOworCisvKiBUYWJsZSBmb3Igc2hhcGUgSURzLiAgS2VlcCBpbiBzeW5jIHdpdGggdGhlIG1zaGFwZV9uYW1lc1tdIHRhYmxlIGluCisgKiBtaXNjMi5jISAqLworc3RhdGljIGludCBtc2hhcGVfaWRzW10gPQoreworICAgIFBoX0NVUlNPUl9QT0lOVEVSLAkJLyogYXJyb3cgKi8KKyAgICBQaF9DVVJTT1JfTk9ORSwJCS8qIGJsYW5rICovCisgICAgUGhfQ1VSU09SX0lOU0VSVCwJCS8qIGJlYW0gKi8KKyAgICBQaF9DVVJTT1JfRFJBR19WRVJUSUNBTCwJLyogdXBkb3duICovCisgICAgUGhfQ1VSU09SX0RSQUdfVkVSVElDQUwsCS8qIHVkc2l6aW5nICovCisgICAgUGhfQ1VSU09SX0RSQUdfSE9SSVpPTlRBTCwJLyogbGVmdHJpZ2h0ICovCisgICAgUGhfQ1VSU09SX0RSQUdfSE9SSVpPTlRBTCwJLyogbHJzaXppbmcgKi8KKyAgICBQaF9DVVJTT1JfV0FJVCwJCS8qIGJ1c3kgKi8KKyAgICBQaF9DVVJTT1JfRE9OVCwJCS8qIG5vICovCisgICAgUGhfQ1VSU09SX0NST1NTSEFJUiwJLyogY3Jvc3NoYWlyICovCisgICAgUGhfQ1VSU09SX0ZJTkdFUiwJCS8qIGhhbmQxICovCisgICAgUGhfQ1VSU09SX0ZJTkdFUiwJCS8qIGhhbmQyICovCisgICAgUGhfQ1VSU09SX0ZJTkdFUiwJCS8qIHBlbmNpbCAqLworICAgIFBoX0NVUlNPUl9RVUVTVElPTl9QT0lOVCwJLyogcXVlc3Rpb24gKi8KKyAgICBQaF9DVVJTT1JfUE9JTlRFUiwJCS8qIHJpZ2h0LWFycm93ICovCisgICAgUGhfQ1VSU09SX1BPSU5URVIsCQkvKiB1cC1hcnJvdyAqLworICAgIFBoX0NVUlNPUl9QT0lOVEVSCQkvKiBsYXN0IG9uZSAqLworfTsKKworICAgIHZvaWQKK21jaF9zZXRfbW91c2Vfc2hhcGUoc2hhcGUpCisgICAgaW50CXNoYXBlOworeworICAgIGludAkgICAgaWQ7CisKKyAgICBpZiAoIWd1aS5pbl91c2UpCisJcmV0dXJuOworCisgICAgaWYgKHNoYXBlID09IE1TSEFQRV9ISURFIHx8IGd1aS5wb2ludGVyX2hpZGRlbikKKwlQdFNldFJlc291cmNlKCBndWkudmltVGV4dEFyZWEsIFB0X0FSR19DVVJTT1JfVFlQRSwgUGhfQ1VSU09SX05PTkUsCisJCTAgKTsKKyAgICBlbHNlCisgICAgeworCWlmIChzaGFwZSA+PSBNU0hBUEVfTlVNQkVSRUQpCisJICAgIGlkID0gUGhfQ1VSU09SX1BPSU5URVI7CisJZWxzZQorCSAgICBpZCA9IG1zaGFwZV9pZHNbc2hhcGVdOworCisJUHRTZXRSZXNvdXJjZSggZ3VpLnZpbVRleHRBcmVhLCBQdF9BUkdfQ1VSU09SX1RZUEUsIGlkLAkwICk7CisgICAgfQorICAgIGlmIChzaGFwZSAhPSBNU0hBUEVfSElERSkKKwlsYXN0X3NoYXBlID0gc2hhcGU7Cit9CisjZW5kaWYKKworICAgIHZvaWQKK2d1aV9tY2hfbW91c2VoaWRlKGludCBoaWRlKQoreworICAgIGlmKCBndWkucG9pbnRlcl9oaWRkZW4gIT0gaGlkZSApCisgICAgeworCWd1aS5wb2ludGVyX2hpZGRlbiA9IGhpZGU7CisjaWZkZWYgRkVBVF9NT1VTRVNIQVBFCisJaWYoIGhpZGUgKQorCSAgICBQdFNldFJlc291cmNlKCBndWkudmltVGV4dEFyZWEsIFB0X0FSR19DVVJTT1JfVFlQRSwKKwkJICAgIFBoX0NVUlNPUl9OT05FLCAwICk7CisJZWxzZQorCSAgICBtY2hfc2V0X21vdXNlX3NoYXBlKCBsYXN0X3NoYXBlICk7CisjZWxzZQorCVB0U2V0UmVzb3VyY2UoIGd1aS52aW1UZXh0QXJlYSwgUHRfQVJHX0NVUlNPUl9UWVBFLAorCQkoIGhpZGUgPT0gTU9VU0VfU0hPVyApID8gR1VJX1BIX01PVVNFX1RZUEUgOiBQaF9DVVJTT1JfTk9ORSwKKwkJMCApOworI2VuZGlmCisgICAgfQorfQorCisgICAgaW50CitndWlfbWNoX2dldF9tb3VzZV94KHZvaWQpCit7CisgICAgUGhDdXJzb3JJbmZvX3QgaW5mbzsKKyAgICBzaG9ydCB4LCB5OworCisgICAgLyogRklYTUU6IGRvZXMgdGhpcyByZXR1cm4gdGhlIGNvcnJlY3QgcG9zaXRpb24sCisgICAgICogd2l0aCByZXNwZWN0IHRvIHRoZSBib3JkZXI/ICovCisgICAgUGhRdWVyeUN1cnNvciggUGhJbnB1dEdyb3VwKCBOVUxMICksICZpbmZvICk7CisgICAgUHRHZXRBYnNQb3NpdGlvbiggZ3VpLnZpbVRleHRBcmVhICwgJngsICZ5ICk7CisKKyAgICByZXR1cm4oIGluZm8ucG9zLnggLSB4ICk7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfZ2V0X21vdXNlX3kodm9pZCkKK3sKKyAgICBQaEN1cnNvckluZm9fdCBpbmZvOworICAgIHNob3J0IHgsIHk7CisKKyAgICBQaFF1ZXJ5Q3Vyc29yKCBQaElucHV0R3JvdXAoIE5VTEwgKSwgJmluZm8gKTsKKyAgICBQdEdldEFic1Bvc2l0aW9uKCBndWkudmltVGV4dEFyZWEgLCAmeCwgJnkgKTsKKyAgICAvKiBUT0RPOiBBZGQgYm9yZGVyIG9mZnNldD8gKi8KKyAgICByZXR1cm4oIGluZm8ucG9zLnkgLSB5ICk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldG1vdXNlKGludCB4LCBpbnQgeSkKK3sKKyAgICBzaG9ydCBhYnNfeCwgYWJzX3k7CisKKyAgICBQdEdldEFic1Bvc2l0aW9uKCBndWkudmltVGV4dEFyZWEsICZhYnNfeCwgJmFic195ICk7CisgICAgLyogQWRkIHRoZSBib3JkZXIgb2Zmc2V0PyAqLworICAgIFBoTW92ZUN1cnNvckFicyggUGhJbnB1dEdyb3VwKCBOVUxMICksIGFic194ICsgeCwgYWJzX3kgKyB5ICk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29sb3VycyAqLworCisvKgorICogUmV0dXJuIHRoZSBSR0IgdmFsdWUgb2YgYSBwaXhlbCBhcyBhIGxvbmcuCisgKi8KKyAgICBsb25nX3UKK2d1aV9tY2hfZ2V0X3JnYihndWljb2xvcl9UIHBpeGVsKQoreworICAgIHJldHVybiBQZ1JHQihQZ1JlZFZhbHVlKHBpeGVsKSwgUGdHcmVlblZhbHVlKHBpeGVsKSwgUGdCbHVlVmFsdWUocGl4ZWwpKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfbmV3X2NvbG9ycyh2b2lkKQoreworI2lmIDAgLyogRG9uJ3QgYm90aGVyIGNoYW5naW5nIHRoZSBjdXJzb3IgY29sb3VyICovCisgICAgc2hvcnQgY29sb3JfZGlmZjsKKworICAgIC8qCisgICAgICogSWYgdGhlcmUgaXNuJ3QgZW5vdWdoIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYmFja2dyb3VuZCBjb2xvdXIgYW5kCisgICAgICogdGhlIG1vdXNlIHBvaW50ZXIgY29sb3VyIHRoZW4gY2hhbmdlIHRoZSBtb3VzZSBwb2ludGVyIGNvbG91cgorICAgICAqLworICAgIGNvbG9yX2RpZmYgPSBndWlfZ2V0X2xpZ2h0bmVzcyhndWlfcGhfbW91c2VfY29sb3IpCisJCQkJCSAgLSBndWlfZ2V0X2xpZ2h0bmVzcyhndWkuYmFja19waXhlbCk7CisKKyAgICBpZiggYWJzKCBjb2xvcl9kaWZmICkgPCA2NCApCisgICAgeworCXNob3J0IHIsIGcsIGI7CisJLyogbm90IGEgZ3JlYXQgYWxnb3JpdGhtLi4uICovCisJciA9IFBnUmVkVmFsdWUoIGd1aV9waF9tb3VzZV9jb2xvciApIF4gMjU1OworCWcgPSBQZ0dyZWVuVmFsdWUoIGd1aV9waF9tb3VzZV9jb2xvciApIF4gMjU1OworCWIgPSBQZ0JsdWVWYWx1ZSggZ3VpX3BoX21vdXNlX2NvbG9yICkgXiAyNTU7CisKKyNpZm5kZWYgRkVBVF9NT1VTRVNIQVBFCisJZ3VpX3BoX21vdXNlX2NvbG9yID0gUGdSR0IoIHIsIGcsIGIgKTsKKwlQdFNldFJlc291cmNlKCBndWkudmltVGV4dEFyZWEsIFB0X0FSR19DVVJTT1JfQ09MT1IsCisJCWd1aV9waF9tb3VzZV9jb2xvciwgMCApOworI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyAgICBQdFNldFJlc291cmNlKCBndWkudmltVGV4dEFyZWEsIFB0X0FSR19GSUxMX0NPTE9SLCBndWkuYmFja19waXhlbCwgMCApOworfQorCisgICAgc3RhdGljIGludAoraGV4X2RpZ2l0KGludCBjKQoreworICAgIGlmIChWSU1fSVNESUdJVChjKSkKKwlyZXR1cm4oIGMgLSAnMCcgKTsKKyAgICBjID0gVE9MT1dFUl9BU0MoYyk7CisgICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQorCXJldHVybiggYyAtICdhJyArIDEwICk7CisgICAgcmV0dXJuKCAtMTAwMCApOworfQorCisKKy8qCisgKiBUaGlzIHNob3VsZCBiZSBzcGxpdCBvdXQgaW50byBhIHNlcGVyYXRlIGZpbGUsCisgKiBldmVyeSBwb3J0IGRvZXMgYmFzaWNhbGx5IHRoZSBzYW1lIHRoaW5nLgorICoKKyAqIFRoaXMgaXMgdGhlIGd1aV93MzIuYyB2ZXJzaW9uIChpIHRoaW5rLi4pCisgKiBSZXR1cm4gSU5WQUxDT0xPUiB3aGVuIGZhaWxlZC4KKyAqLworCisgICAgZ3VpY29sb3JfVAorZ3VpX21jaF9nZXRfY29sb3IoY2hhcl91ICpuYW1lKQoreworICAgIGludCBpOworICAgIGludCByLCBnLCBiOworCisKKyAgICB0eXBlZGVmIHN0cnVjdCBHdWlDb2xvdXJUYWJsZQorICAgIHsKKwljaGFyCSAgICAqbmFtZTsKKwlndWljb2xvcl9UICAgICBjb2xvdXI7CisgICAgfSBHdWlDb2xvdXJUYWJsZTsKKworICAgIHN0YXRpYyBHdWlDb2xvdXJUYWJsZSB0YWJsZVtdID0KKyAgICB7CisJeyJCbGFjayIsCSAgICBSR0IoMHgwMCwgMHgwMCwgMHgwMCl9LAorCXsiRGFya0dyYXkiLAkgICAgUkdCKDB4ODAsIDB4ODAsIDB4ODApfSwKKwl7IkRhcmtHcmV5IiwJICAgIFJHQigweDgwLCAweDgwLCAweDgwKX0sCisJeyJHcmF5IiwJICAgIFJHQigweEMwLCAweEMwLCAweEMwKX0sCisJeyJHcmV5IiwJICAgIFJHQigweEMwLCAweEMwLCAweEMwKX0sCisJeyJMaWdodEdyYXkiLAkgICAgUkdCKDB4RDMsIDB4RDMsIDB4RDMpfSwKKwl7IkxpZ2h0R3JleSIsCSAgICBSR0IoMHhEMywgMHhEMywgMHhEMyl9LAorCXsiV2hpdGUiLAkgICAgUkdCKDB4RkYsIDB4RkYsIDB4RkYpfSwKKwl7IkRhcmtSZWQiLAkgICAgUkdCKDB4ODAsIDB4MDAsIDB4MDApfSwKKwl7IlJlZCIsCQkgICAgUkdCKDB4RkYsIDB4MDAsIDB4MDApfSwKKwl7IkxpZ2h0UmVkIiwJICAgIFJHQigweEZGLCAweEEwLCAweEEwKX0sCisJeyJEYXJrQmx1ZSIsCSAgICBSR0IoMHgwMCwgMHgwMCwgMHg4MCl9LAorCXsiQmx1ZSIsCSAgICBSR0IoMHgwMCwgMHgwMCwgMHhGRil9LAorCXsiTGlnaHRCbHVlIiwJICAgIFJHQigweEEwLCAweEEwLCAweEZGKX0sCisJeyJEYXJrR3JlZW4iLAkgICAgUkdCKDB4MDAsIDB4ODAsIDB4MDApfSwKKwl7IkdyZWVuIiwJICAgIFJHQigweDAwLCAweEZGLCAweDAwKX0sCisJeyJMaWdodEdyZWVuIiwJICAgIFJHQigweEEwLCAweEZGLCAweEEwKX0sCisJeyJEYXJrQ3lhbiIsCSAgICBSR0IoMHgwMCwgMHg4MCwgMHg4MCl9LAorCXsiQ3lhbiIsCSAgICBSR0IoMHgwMCwgMHhGRiwgMHhGRil9LAorCXsiTGlnaHRDeWFuIiwJICAgIFJHQigweEEwLCAweEZGLCAweEZGKX0sCisJeyJEYXJrTWFnZW50YSIsCSAgICBSR0IoMHg4MCwgMHgwMCwgMHg4MCl9LAorCXsiTWFnZW50YSIsCSAgICBSR0IoMHhGRiwgMHgwMCwgMHhGRil9LAorCXsiTGlnaHRNYWdlbnRhIiwgICAgUkdCKDB4RkYsIDB4QTAsIDB4RkYpfSwKKwl7IkJyb3duIiwJICAgIFJHQigweDgwLCAweDQwLCAweDQwKX0sCisJeyJZZWxsb3ciLAkgICAgUkdCKDB4RkYsIDB4RkYsIDB4MDApfSwKKwl7IkxpZ2h0WWVsbG93IiwJICAgIFJHQigweEZGLCAweEZGLCAweEEwKX0sCisJeyJTZWFHcmVlbiIsCSAgICBSR0IoMHgyRSwgMHg4QiwgMHg1Nyl9LAorCXsiT3JhbmdlIiwJICAgIFJHQigweEZGLCAweEE1LCAweDAwKX0sCisJeyJQdXJwbGUiLAkgICAgUkdCKDB4QTAsIDB4MjAsIDB4RjApfSwKKwl7IlNsYXRlQmx1ZSIsCSAgICBSR0IoMHg2QSwgMHg1QSwgMHhDRCl9LAorCXsiVmlvbGV0IiwJICAgIFJHQigweEVFLCAweDgyLCAweEVFKX0sCisgICAgfTsKKworICAgIC8qIGlzIG5hbWUgI3JyZ2diYiBmb3JtYXQ/ICovCisgICAgaWYoIG5hbWVbMF0gPT0gJyMnICYmIFNUUkxFTiggbmFtZSApID09IDcgKQorICAgIHsKKwlyID0gaGV4X2RpZ2l0KCBuYW1lWzFdICkgKiAxNiArIGhleF9kaWdpdCggbmFtZVsyXSApOworCWcgPSBoZXhfZGlnaXQoIG5hbWVbM10gKSAqIDE2ICsgaGV4X2RpZ2l0KCBuYW1lWzRdICk7CisJYiA9IGhleF9kaWdpdCggbmFtZVs1XSApICogMTYgKyBoZXhfZGlnaXQoIG5hbWVbNl0gKTsKKwlpZiggciA8IDAgfHwgZyA8IDAgfHwgYiA8IDAgKQorCSAgICByZXR1cm4gSU5WQUxDT0xPUjsKKwlyZXR1cm4oIFJHQiggciwgZywgYiApICk7CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IEFSUkFZX0xFTkdUSCggdGFibGUgKTsgaSsrICkKKyAgICB7CisJaWYoIFNUUklDTVAoIG5hbWUsIHRhYmxlW2ldLm5hbWUgKSA9PSAwICkKKwkgICAgcmV0dXJuKCB0YWJsZVtpXS5jb2xvdXIgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIExhc3QgYXR0ZW1wdC4gTG9vayBpbiB0aGUgZmlsZSAiJFZJTVJVTlRJTUUvcmdiLnR4dCIuCisgICAgICovCisgICAgeworI2RlZmluZSBMSU5FX0xFTiAxMDAKKwlGSUxFCSpmZDsKKwljaGFyCWxpbmVbTElORV9MRU5dOworCWNoYXJfdQkqZm5hbWU7CisKKwlmbmFtZSA9IGV4cGFuZF9lbnZfc2F2ZSgoY2hhcl91ICopIiRWSU1SVU5USU1FL3JnYi50eHQiKTsKKwlpZiAoZm5hbWUgPT0gTlVMTCkKKwkgICAgcmV0dXJuIElOVkFMQ09MT1I7CisKKwlmZCA9IGZvcGVuKChjaGFyICopZm5hbWUsICJydCIpOworCXZpbV9mcmVlKGZuYW1lKTsKKwlpZiAoZmQgPT0gTlVMTCkKKwkgICAgcmV0dXJuIElOVkFMQ09MT1I7CisKKwl3aGlsZSAoIWZlb2YoZmQpKQorCXsKKwkgICAgaW50CSAgICBsZW47CisJICAgIGludAkgICAgcG9zOworCSAgICBjaGFyICAgICpjb2xvcjsKKworCSAgICBmZ2V0cyhsaW5lLCBMSU5FX0xFTiwgZmQpOworCSAgICBsZW4gPSBTVFJMRU4obGluZSk7CisKKwkgICAgaWYgKGxlbiA8PSAxIHx8IGxpbmVbbGVuLTFdICE9ICdcbicpCisJCWNvbnRpbnVlOworCisJICAgIGxpbmVbbGVuLTFdID0gJ1wwJzsKKworCSAgICBpID0gc3NjYW5mKGxpbmUsICIlZCAlZCAlZCAlbiIsICZyLCAmZywgJmIsICZwb3MpOworCSAgICBpZiAoaSAhPSAzKQorCQljb250aW51ZTsKKworCSAgICBjb2xvciA9IGxpbmUgKyBwb3M7CisKKwkgICAgaWYgKFNUUklDTVAoY29sb3IsIG5hbWUpID09IDApCisJICAgIHsKKwkJZmNsb3NlKGZkKTsKKwkJcmV0dXJuKCAoZ3VpY29sb3JfVCkgUkdCKHIsZyxiKSApOworCSAgICB9CisJfQorCisJZmNsb3NlKGZkKTsKKyAgICB9CisKKworICAgIHJldHVybiBJTlZBTENPTE9SOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZmdfY29sb3IoZ3VpY29sb3JfVCBjb2xvcikKK3sKKyAgICBQZ1NldFRleHRDb2xvciggY29sb3IgKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2JnX2NvbG9yKGd1aWNvbG9yX1QgY29sb3IpCit7CisgICAgUGdTZXRGaWxsQ29sb3IoIGNvbG9yICk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2ludmVydF9yZWN0YW5nbGUoaW50IHJvdywgaW50IGNvbCwgaW50IG5yLCBpbnQgbmMpCit7CisgICAgUGhSZWN0X3QgcmVjdDsKKworICAgIHJlY3QudWwueCA9IEZJTExfWCggY29sICk7CisgICAgcmVjdC51bC55ID0gRklMTF9ZKCByb3cgKTsKKworICAgIC8qIEZJWE1FOiBUaGlzIGhhcyBhbiBvZmYgYnkgb25lIHBpeGVsIHByb2JsZW0gKi8KKyAgICByZWN0LmxyLnggPSByZWN0LnVsLnggKyBuYyAqIGd1aS5jaGFyX3dpZHRoOworICAgIHJlY3QubHIueSA9IHJlY3QudWwueSArIG5yICogZ3VpLmNoYXJfaGVpZ2h0OworICAgIGlmKCBuYyA+IDAgKQorCXJlY3QubHIueCAtPSAxOworICAgIGlmKCBuciA+IDAgKQorCXJlY3QubHIueSAtPSAxOworCisgICAgRFJBV19TVEFSVDsKKyAgICBQZ1NldERyYXdNb2RlKCBQZ19EcmF3TW9kZURTVElOVkVSVCApOworICAgIFBnRHJhd1JlY3QoICZyZWN0LCBQZ19EUkFXX0ZJTEwgKTsKKyAgICBQZ1NldERyYXdNb2RlKCBQZ19EcmF3TW9kZVNSQ0NPUFkgKTsKKyAgICBEUkFXX0VORDsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfY2xlYXJfYmxvY2soaW50IHJvdzEsIGludCBjb2wxLCBpbnQgcm93MiwgaW50IGNvbDIpCit7CisgICAgUGhSZWN0X3QgYmxvY2sgPSB7CisJeyBGSUxMX1goIGNvbDEgKSwgRklMTF9ZKCByb3cxICkgfSwKKwl7IEZJTExfWCggY29sMiArIDEgKSAtIDEsIEZJTExfWSggcm93MiArIDEgKSAtIDF9CisgICAgfTsKKworICAgIERSQVdfU1RBUlQ7CisgICAgZ3VpX21jaF9zZXRfYmdfY29sb3IoIGd1aS5iYWNrX3BpeGVsICk7CisgICAgUGdEcmF3UmVjdCggJmJsb2NrLCBQZ19EUkFXX0ZJTEwgKTsKKyAgICBEUkFXX0VORDsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfY2xlYXJfYWxsKCkKK3sKKyAgICBQaFJlY3RfdCB0ZXh0X3JlY3QgPSB7CisJeyBndWkuYm9yZGVyX3dpZHRoLCBndWkuYm9yZGVyX3dpZHRoIH0sCisJeyBDb2x1bW5zICogZ3VpLmNoYXJfd2lkdGggKyBndWkuYm9yZGVyX3dpZHRoIC0gMSAsCisJICAgIFJvd3MgKiBndWkuY2hhcl9oZWlnaHQgKyBndWkuYm9yZGVyX3dpZHRoIC0gMSB9CisgICAgfTsKKworICAgIGlmKCBpc19pZ25vcmVfZHJhdyA9PSBUUlVFICkKKwlyZXR1cm47CisKKyAgICBEUkFXX1NUQVJUOworICAgIGd1aV9tY2hfc2V0X2JnX2NvbG9yKCBndWkuYmFja19waXhlbCApOworICAgIFBnRHJhd1JlY3QoICZ0ZXh0X3JlY3QsIFBnX0RSQVdfRklMTCApOworICAgIERSQVdfRU5EOworfQorCisgICAgdm9pZAorZ3VpX21jaF9kZWxldGVfbGluZXMoaW50IHJvdywgaW50IG51bV9saW5lcykKK3sKKyAgICBQaFJlY3RfdCAgICByZWN0OworICAgIFBoUG9pbnRfdCAgIGRlbHRhOworCisgICAgcmVjdC51bC54ID0gRklMTF9YKCBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0ICk7CisgICAgcmVjdC51bC55ID0gRklMTF9ZKCByb3cgKyBudW1fbGluZXMgKTsKKworICAgIHJlY3QubHIueCA9IEZJTExfWCggZ3VpLnNjcm9sbF9yZWdpb25fcmlnaHQgKyAxICkgLSAxOworICAgIHJlY3QubHIueSA9IEZJTExfWSggZ3VpLnNjcm9sbF9yZWdpb25fYm90ICsgMSkgLSAxOworCisgICAgUHRXaWRnZXRPZmZzZXQoIGd1aS52aW1UZXh0QXJlYSwgJmd1aV9waF9yYXdfb2Zmc2V0ICk7CisgICAgUGhUcmFuc2xhdGVQb2ludCggJmd1aV9waF9yYXdfb2Zmc2V0LCBQdFdpZGdldFBvcyhndWkudmltVGV4dEFyZWEsIE5VTEwpKTsKKyAgICBQaFRyYW5zbGF0ZVJlY3QoICZyZWN0LCAmZ3VpX3BoX3Jhd19vZmZzZXQgKTsKKworICAgIGRlbHRhLnggPSAwOworICAgIGRlbHRhLnkgPSAtbnVtX2xpbmVzICogZ3VpLmNoYXJfaGVpZ2h0OworCisgICAgUGdGbHVzaCgpOworCisgICAgUGhCbGl0KCBQdFdpZGdldFJpZCggUHRGaW5kRGlzam9pbnQoIGd1aS52aW1UZXh0QXJlYSApICksICZyZWN0LCAmZGVsdGEgKTsKKworICAgIGd1aV9jbGVhcl9ibG9jaygKKwlndWkuc2Nyb2xsX3JlZ2lvbl9ib3QgLSBudW1fbGluZXMgKyAxLAorCWd1aS5zY3JvbGxfcmVnaW9uX2xlZnQsCisJZ3VpLnNjcm9sbF9yZWdpb25fYm90LAorCWd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0ICk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2luc2VydF9saW5lcyhpbnQgcm93LCBpbnQgbnVtX2xpbmVzKQoreworICAgIFBoUmVjdF90ICAgIHJlY3Q7CisgICAgUGhQb2ludF90ICAgZGVsdGE7CisKKyAgICByZWN0LnVsLnggPSBGSUxMX1goIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQgKTsKKyAgICByZWN0LnVsLnkgPSBGSUxMX1koIHJvdyApOworCisgICAgcmVjdC5sci54ID0gRklMTF9YKCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCArIDEgKSAtIDE7CisgICAgcmVjdC5sci55ID0gRklMTF9ZKCBndWkuc2Nyb2xsX3JlZ2lvbl9ib3QgLSBudW1fbGluZXMgKyAxICkgLSAxOworCisgICAgUHRXaWRnZXRPZmZzZXQoIGd1aS52aW1UZXh0QXJlYSwgJmd1aV9waF9yYXdfb2Zmc2V0ICk7CisgICAgUGhUcmFuc2xhdGVQb2ludCggJmd1aV9waF9yYXdfb2Zmc2V0LCBQdFdpZGdldFBvcyggZ3VpLnZpbVRleHRBcmVhLCBOVUxMICkgKTsKKyAgICBQaFRyYW5zbGF0ZVJlY3QoICZyZWN0LCAmZ3VpX3BoX3Jhd19vZmZzZXQgKTsKKworICAgIGRlbHRhLnggPSAwOworICAgIGRlbHRhLnkgPSBudW1fbGluZXMgKiBndWkuY2hhcl9oZWlnaHQ7CisKKyAgICBQZ0ZsdXNoKCk7CisKKyAgICBQaEJsaXQoIFB0V2lkZ2V0UmlkKCBQdEZpbmREaXNqb2ludCggZ3VpLnZpbVRleHRBcmVhICkgKSAsICZyZWN0LCAmZGVsdGEgKTsKKworICAgIGd1aV9jbGVhcl9ibG9jayggcm93LCBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0LAorCSAgICByb3cgKyBudW1fbGluZXMgLSAxLCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCApOworfQorCisgICAgdm9pZAorZ3VpX21jaF9kcmF3X3N0cmluZyhpbnQgcm93LCBpbnQgY29sLCBjaGFyX3UgKnMsIGludCBsZW4sIGludCBmbGFncykKK3sKKyAgICBzdGF0aWMgY2hhciAqdXRmOF9idWZmZXIgPSBOVUxMOworICAgIHN0YXRpYyBpbnQJdXRmOF9sZW4gPSAwOworCisgICAgUGhQb2ludF90CXBvcyA9IHsgVEVYVF9YKCBjb2wgKSwgVEVYVF9ZKCByb3cgKSB9OworICAgIFBoUmVjdF90CXJlY3Q7CisKKyAgICBpZiggaXNfaWdub3JlX2RyYXcgPT0gVFJVRSApCisJcmV0dXJuOworCisgICAgRFJBV19TVEFSVDsKKworICAgIGlmKCAhKCBmbGFncyAmIERSQVdfVFJBTlNQICkgKQorICAgIHsKKwlQZ0RyYXdJUmVjdCgKKwkJRklMTF9YKCBjb2wgKSwgRklMTF9ZKCByb3cgKSwKKwkJRklMTF9YKCBjb2wgKyBsZW4gKSAtIDEsIEZJTExfWSggcm93ICsgMSApIC0gMSwKKwkJUGdfRFJBV19GSUxMICk7CisgICAgfQorCisgICAgaWYoIGZsYWdzICYgRFJBV19VTkRFUkwgKQorCVBnU2V0VW5kZXJsaW5lKCBndWkubm9ybV9waXhlbCwgUGdfVFJBTlNQQVJFTlQsIDAgKTsKKworICAgIGlmKCBjaGFyc2V0X3RyYW5zbGF0ZSAhPSBOVUxMCisjaWZkZWYgRkVBVF9NQllURQorCSAgICAmJiBlbmNfdXRmOCA9PSAwCisjZW5kaWYKKwkgICAgKQorICAgIHsKKwlpbnQgc3JjX3Rha2VuLCBkc3RfbWFkZTsKKworCS8qIFVzZSBhIHN0YXRpYyBidWZmZXIgdG8gYXZvaWQgbGFyZ2UgYW1vdW50cyBvZiBkZS9hbGxvY2F0aW9ucyAqLworCWlmKCB1dGY4X2xlbiA8IGxlbiApCisJeworCSAgICB1dGY4X2J1ZmZlciA9IHJlYWxsb2MoIHV0ZjhfYnVmZmVyLCBsZW4gKiBNQl9MRU5fTUFYICk7CisJICAgIHV0ZjhfbGVuID0gbGVuOworCX0KKworCVB4VHJhbnNsYXRlVG9VVEYoCisJCWNoYXJzZXRfdHJhbnNsYXRlLAorCQlzLAorCQlsZW4sCisJCSZzcmNfdGFrZW4sCisJCXV0ZjhfYnVmZmVyLAorCQl1dGY4X2xlbiwKKwkJJmRzdF9tYWRlICk7CisJcyA9IHV0ZjhfYnVmZmVyOworCWxlbiA9IGRzdF9tYWRlOworICAgIH0KKworICAgIFBnRHJhd1RleHQoIHMsIGxlbiwgJnBvcywgMCApOworCisgICAgaWYoIGZsYWdzICYgRFJBV19CT0xEICkKKyAgICB7CisJLyogRklYTUU6IHRyeSBhbmQgb25seSBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzIG9uY2UuLi4gKi8KKwlyZWN0LnVsLnggPSBGSUxMX1goIGNvbCApICsgMTsKKwlyZWN0LnVsLnkgPSBGSUxMX1koIHJvdyApOworCXJlY3QubHIueCA9IEZJTExfWCggY29sICsgbGVuICkgLSAxOworCXJlY3QubHIueSA9IEZJTExfWSggcm93ICsgMSkgLSAxOworCS8qIFBnU2V0VXNlckNsaXAoIE5VTEwgKSBjYXVzZXMgdGhlIHNjcm9sbGJhciB0byBub3QgcmVkcmF3Li4uICovCisjaWYgMAorCXBvcy54Kys7CisKKwlQZ1NldFVzZXJDbGlwKCAmcmVjdCApOworCVBnRHJhd1RleHQoIHMsIGxlbiwgJnBvcywgMCApOworCVBnU2V0VXNlckNsaXAoIE5VTEwgKTsKKyNlbHNlCisJcmVjdC5sci55IC09ICggcF9saW5lc3BhY2UgKyAxICkgLyAyOworCS8qIFhYWDogRHJhd1RleHRBcmVhIGRvZXNuJ3Qgd29yayB3aXRoIHBoZGl0dG8gKi8KKwlQZ0RyYXdUZXh0QXJlYSggcywgbGVuLCAmcmVjdCwgUGdfVEVYVF9CT1RUT00gKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmKCBmbGFncyAmIERSQVdfVU5ERVJMICkKKwlQZ1NldFVuZGVybGluZSggUGdfVFJBTlNQQVJFTlQsIFBnX1RSQU5TUEFSRU5ULCAwICk7CisKKyAgICBEUkFXX0VORDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDdXJzb3IgKi8KKworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19ob2xsb3dfY3Vyc29yKGd1aWNvbG9yX1QgY29sb3IpCit7CisgICAgUGhSZWN0X3QgcjsKKworICAgIC8qIEZJWE1FOiBEb3VibGUgd2lkdGggY2hhcmFjdGVycyAqLworCisgICAgci51bC54ID0gRklMTF9YKCBndWkuY29sICk7CisgICAgci51bC55ID0gRklMTF9ZKCBndWkucm93ICk7CisgICAgci5sci54ID0gci51bC54ICsgZ3VpLmNoYXJfd2lkdGggLSAxOworICAgIHIubHIueSA9IHIudWwueSArIGd1aS5jaGFyX2hlaWdodCAtIDE7CisKKyAgICBEUkFXX1NUQVJUOworICAgIFBnU2V0U3Ryb2tlQ29sb3IoIGNvbG9yICk7CisgICAgUGdEcmF3UmVjdCggJnIsIFBnX0RSQVdfU1RST0tFICk7CisgICAgRFJBV19FTkQ7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2RyYXdfcGFydF9jdXJzb3IoaW50IHcsIGludCBoLCBndWljb2xvcl9UIGNvbG9yKQoreworICAgIFBoUmVjdF90IHI7CisKKyAgICByLnVsLnggPSBGSUxMX1goIGd1aS5jb2wgKTsKKyAgICByLnVsLnkgPSBGSUxMX1koIGd1aS5yb3cgKSArIGd1aS5jaGFyX2hlaWdodCAtIGg7CisgICAgci5sci54ID0gci51bC54ICsgdyAtIDE7CisgICAgci5sci55ID0gci51bC55ICsgaCAtIDE7CisKKyAgICBEUkFXX1NUQVJUOworICAgIGd1aV9tY2hfc2V0X2JnX2NvbG9yKCBjb2xvciApOworICAgIFBnRHJhd1JlY3QoICZyLCBQZ19EUkFXX0ZJTEwgKTsKKyAgICBEUkFXX0VORDsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2JsaW5raW5nKGxvbmcgd2FpdCwgbG9uZyBvbiwgbG9uZyBvZmYpCit7CisgICAgYmxpbmtfd2FpdHRpbWUgPSB3YWl0OworICAgIGJsaW5rX29udGltZSA9IG9uOworICAgIGJsaW5rX29mZnRpbWUgPSBvZmY7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3N0YXJ0X2JsaW5rKHZvaWQpCit7CisgICAgLyogT25seSB0dXJuIG9uIHRoZSB0aW1lciBvbiBpZiBub25lIG9mIHRoZSB0aW1lcyBhcmUgemVybyAqLworICAgIGlmKCBibGlua193YWl0dGltZSAmJiBibGlua19vbnRpbWUgJiYgYmxpbmtfb2ZmdGltZSAmJiBndWkuaW5fZm9jdXMpCisgICAgeworCVB0U2V0UmVzb3VyY2UoIGd1aV9waF90aW1lcl9jdXJzb3IsIFB0X0FSR19USU1FUl9JTklUSUFMLAorCQlibGlua193YWl0dGltZSwgMCApOworCWJsaW5rX3N0YXRlID0gQkxJTktfT047CisJZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworICAgIH0KK30KKworICAgIHZvaWQKK2d1aV9tY2hfc3RvcF9ibGluayh2b2lkKQoreworICAgIFB0U2V0UmVzb3VyY2UoIGd1aV9waF90aW1lcl9jdXJzb3IsIFB0X0FSR19USU1FUl9JTklUSUFMLCAwLCAwICk7CisKKyAgICBpZiggYmxpbmtfc3RhdGUgPT0gQkxJTktfT0ZGICkKKwlndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisKKyAgICBibGlua19zdGF0ZSA9IEJMSU5LX05PTkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgKi8KKworICAgIHZvaWQKK2d1aV9tY2hfYmVlcCh2b2lkKQoreworICAgIFB0QmVlcCgpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9mbGFzaChpbnQgbXNlYykKK3sKKyAgICBQZ1NldEZpbGxYT1JDb2xvciggUGdfQkxBQ0ssIFBnX1dISVRFICk7CisgICAgUGdTZXREcmF3TW9kZSggUGdfRFJBV01PREVfWE9SICk7CisgICAgZ3VpX21jaF9jbGVhcl9hbGwoKTsKKyAgICBndWlfbWNoX2ZsdXNoKCk7CisKKyAgICB1aV9kZWxheSggKGxvbmcpIG1zZWMsIFRSVUUgKTsKKworICAgIGd1aV9tY2hfY2xlYXJfYWxsKCk7CisgICAgUGdTZXREcmF3TW9kZSggUGdfRFJBV01PREVfT1BBUVVFICk7CisgICAgZ3VpX21jaF9mbHVzaCgpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9mbHVzaCh2b2lkKQoreworICAgIFBnRmx1c2goKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3RleHRfYXJlYV9wb3MoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCit7CisgICAgUGhBcmVhX3QgYXJlYSA9IHt7eCwgeX0sIHt3LCBofX07CisKKyAgICBQdFNldFJlc291cmNlKCBndWkudmltVGV4dEFyZWEsIFB0X0FSR19BUkVBLCAmYXJlYSwgMCApOworfQorCisgICAgaW50CitndWlfbWNoX2hhc2tleShjaGFyX3UgKm5hbWUpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBzcGVjaWFsX2tleXNbaV0ua2V5X3N5bSAhPSAwOyBpKyspCisJaWYgKG5hbWVbMF0gPT0gc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMCAmJgorCQkgbmFtZVsxXSA9PSBzcGVjaWFsX2tleXNbaV0udmltX2NvZGUxKQorCSAgICByZXR1cm4oIE9LICk7CisgICAgcmV0dXJuKCBGQUlMICk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTWVudSAqLworCisjaWZkZWYgRkVBVF9UT09MQkFSCisjaW5jbHVkZSAidG9vbGJhci5waGkiCisKK3N0YXRpYyBQaEltYWdlX3QgKmd1aV9waF90b29sYmFyX2ltYWdlc1tdID0geworICAgICZ0Yl9uZXdfcGhpLAorICAgICZ0Yl9vcGVuX3BoaSwKKyAgICAmdGJfc2F2ZV9waGksCisgICAgJnRiX3VuZG9fcGhpLAorICAgICZ0Yl9yZWRvX3BoaSwKKyAgICAmdGJfY3V0X3BoaSwKKyAgICAmdGJfY29weV9waGksCisgICAgJnRiX3Bhc3RlX3BoaSwKKyAgICAmdGJfcHJpbnRfcGhpLAorICAgICZ0Yl9oZWxwX3BoaSwKKyAgICAmdGJfZmluZF9waGksCisgICAgJnRiX3NhdmVfYWxsX3BoaSwKKyAgICAmdGJfc2F2ZV9zZXNzaW9uX3BoaSwKKyAgICAmdGJfbmV3X3Nlc3Npb25fcGhpLAorICAgICZ0Yl9sb2FkX3Nlc3Npb25fcGhpLAorICAgICZ0Yl9tYWNyb19waGksCisgICAgJnRiX3JlcGxhY2VfcGhpLAorICAgICZ0Yl9jbG9zZV9waGksCisgICAgJnRiX21heGltaXplX3BoaSwKKyAgICAmdGJfbWluaW1pemVfcGhpLAorICAgICZ0Yl9zcGxpdF9waGksCisgICAgJnRiX3NoZWxsX3BoaSwKKyAgICAmdGJfZmluZF9wcmV2X3BoaSwKKyAgICAmdGJfZmluZF9uZXh0X3BoaSwKKyAgICAmdGJfZmluZF9oZWxwX3BoaSwKKyAgICAmdGJfbWFrZV9waGksCisgICAgJnRiX2p1bXBfcGhpLAorICAgICZ0Yl9jdGFnc19waGksCisgICAgJnRiX3ZzcGxpdF9waGksCisgICAgJnRiX21heHdpZHRoX3BoaSwKKyAgICAmdGJfbWlud2lkdGhfcGhpCit9OworCitzdGF0aWMgUGhJbWFnZV90ICoKK2d1aV9waF90b29sYmFyX2xvYWRfaWNvbiggY2hhcl91ICppY29uZmlsZSApCit7CisgICAgc3RhdGljIFBoSW1hZ2VfdCBleHRlcm5hbF9pY29uOworICAgIFBoSW1hZ2VfdCAqdGVtcF9waGkgPSBOVUxMOworCisgICAgdGVtcF9waGkgPSBQeExvYWRJbWFnZSggaWNvbmZpbGUsIE5VTEwgKTsKKyAgICBpZiggdGVtcF9waGkgIT0gTlVMTCApCisgICAgeworCS8qIFRoZSBsYWJlbCB3aWRnZXQgd2lsbCBmcmVlIHRoZSBpbWFnZS9wYWxldHRlL2V0Yy4gZm9yIHVzIHdoZW4KKwkgKiBpdCdzIGRlc3Ryb3llZCAqLworCXRlbXBfcGhpLT5mbGFncyB8PSBQaF9SRUxFQVNFX0lNQUdFX0FMTDsKKwltZW1jcHkoICZleHRlcm5hbF9pY29uLCB0ZW1wX3BoaSwgc2l6ZW9mKCBleHRlcm5hbF9pY29uICkgKTsKKwlmcmVlKCB0ZW1wX3BoaSApOworCisJdGVtcF9waGkgPSAmZXh0ZXJuYWxfaWNvbjsKKyAgICB9CisgICAgcmV0dXJuKCB0ZW1wX3BoaSApOworfQorCisvKgorICogVGhpcyByZXR1cm5zIGVpdGhlciBhIGJ1aWx0aW4gaWNvbiBpbWFnZSwgYW4gZXh0ZXJuYWwgaW1hZ2Ugb3IgTlVMTAorICogaWYgaXQgY2FuJ3QgZmluZCBlaXRoZXIuICBUaGUgY2FsbGVyIGNhbid0IGFuZCBkb2Vzbid0IG5lZWQgdG8gdHJ5IGFuZAorICogZnJlZSgpIHRoZSByZXR1cm5lZCBpbWFnZSwgYW5kIGl0IGNhbid0IHN0b3JlIHRoZSBpbWFnZSBwb2ludGVyLgorICogKFdoZW4gc2V0dGluZyB0aGUgUHRfQVJHX0xBQkVMX0lNQUdFIHJlc291cmNlLCB0aGUgY29udGVudHMgb2YgdGhlCisgKiBQaEltYWdlX3QgYXJlIGNvcGllZCwgYW5kIHRoZSBvcmlnaW5hbCBQaEltYWdlX3QgYXJlbid0IG5lZWRlZCBhbnltb3JlKS4KKyAqLworc3RhdGljIFBoSW1hZ2VfdCAqCitndWlfcGhfdG9vbGJhcl9maW5kX2ljb24oIHZpbW1lbnVfVCAqbWVudSApCit7CisgICAgY2hhcl91IGZ1bGxfcGF0aG5hbWVbIE1BWFBBVEhMICsgMSBdOworICAgIFBoSW1hZ2VfdCAqaWNvbiA9IE5VTEw7CisKKyAgICBpZiggbWVudS0+aWNvbl9idWlsdGluID09IEZBTFNFICkKKyAgICB7CisJaWYoIG1lbnUtPmljb25maWxlICE9IE5VTEwgKQorCSAgICAvKiBUT0RPOiB1c2UgZ3VpX2ZpbmRfaWNvbmZpbGUoKSAqLworCSAgICBpY29uID0gZ3VpX3BoX3Rvb2xiYXJfbG9hZF9pY29uKCBtZW51LT5pY29uZmlsZSApOworCisJLyogVE9ETzogUmVzdHJpY3QgbG9hZGluZyB0byBqdXN0IC5wbmc/IFNlYXJjaCBmb3IgYW55IGZvcm1hdD8gKi8KKwlpZiggKCBpY29uID09IE5VTEwgKSAmJgorCSAgICAoICggZ3VpX2ZpbmRfYml0bWFwKCBtZW51LT5uYW1lLCBmdWxsX3BhdGhuYW1lLCAiZ2lmIiApID09IE9LICkgfHwKKwkgICAgICAoIGd1aV9maW5kX2JpdG1hcCggbWVudS0+bmFtZSwgZnVsbF9wYXRobmFtZSwgInBuZyIgKSA9PSBPSyApICkgKQorCSAgICBpY29uID0gZ3VpX3BoX3Rvb2xiYXJfbG9hZF9pY29uKCBmdWxsX3BhdGhuYW1lICk7CisKKwlpZiggaWNvbiAhPSBOVUxMICkKKwkgICAgcmV0dXJuKCBpY29uICk7CisgICAgfQorCisgICAgaWYoIG1lbnUtPmljb25pZHggPj0gMCAmJgorCSAgICAoIG1lbnUtPmljb25pZHggPCBBUlJBWV9MRU5HVEgoIGd1aV9waF90b29sYmFyX2ltYWdlcyApICkgKQorICAgIHsKKwlyZXR1cm4oIGd1aV9waF90b29sYmFyX2ltYWdlc1sgbWVudS0+aWNvbmlkeCBdICk7CisgICAgfQorCisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoIEZFQVRfTUVOVSApIHx8IGRlZmluZWQoIFBST1RPICkKKyAgICB2b2lkCitndWlfbWNoX2VuYWJsZV9tZW51KGludCBmbGFnKQoreworICAgIGlmKCBmbGFnICE9IDAgKQorCVB0UmVhbGl6ZVdpZGdldCggZ3VpLnZpbU1lbnVCYXIgKTsKKyAgICBlbHNlCisJUHRVbnJlYWxpemVXaWRnZXQoIGd1aS52aW1NZW51QmFyICk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF9tZW51X3BvcyhpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKK3sKKyAgICAvKiBOb3RoaW5nICovCit9CisKKy8qIENoYW5nZSB0aGUgcG9zaXRpb24gb2YgYSBtZW51IGJ1dHRvbiBpbiB0aGUgcGFyZW50ICovCisgICAgc3RhdGljIHZvaWQKK2d1aV9waF9wb3NpdGlvbl9tZW51KCBQdFdpZGdldF90ICp3aWRnZXQsIGludCBwcmlvcml0eSApCit7CisgICAgUHRXaWRnZXRfdAkqdHJhdmVyc2U7CisgICAgdmltbWVudV9UCSptZW51OworCisgICAgdHJhdmVyc2UgPSBQdFdpZGdldENoaWxkQmFjayggUHRXaWRnZXRQYXJlbnQoIHdpZGdldCApICk7CisKKyAgICAvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2Ygd2lkZ2V0cyBpbiB0cmF2ZXJzZSwgdW50aWwKKyAgICAgKiB3ZSBmaW5kIHRoZSBwb3NpdGlvbiB3ZSB3YW50IHRvIGluc2VydCBvdXIgd2lkZ2V0IGludG8gKi8KKyAgICAvKiBUT0RPOiB0cmF2ZXJzZSBmcm9tIGZyb250IHRvIGJhY2ssIHBvc3NpYmxlIHNwZWVkdXA/ICovCisgICAgd2hpbGUoIHRyYXZlcnNlICE9IE5VTEwgKQorICAgIHsKKwlQdEdldFJlc291cmNlKCB0cmF2ZXJzZSwgUHRfQVJHX1BPSU5URVIsICZtZW51LCAwICk7CisKKwlpZiggbWVudSAhPSBOVUxMICYmCisJCXByaW9yaXR5IDwgbWVudS0+cHJpb3JpdHkgJiYKKwkJd2lkZ2V0ICE9IHRyYXZlcnNlICkKKwl7CisJICAgIC8qIEluc2VydCB0aGUgd2lkZ2V0IGJlZm9yZSB0aGUgY3VycmVudCB0cmF2ZXJzZSB3aWRnZXQgKi8KKwkgICAgUHRXaWRnZXRJbnNlcnQoIHdpZGdldCwgdHJhdmVyc2UsIDEgKTsKKwkgICAgcmV0dXJuOworCX0KKworCXRyYXZlcnNlID0gUHRXaWRnZXRCcm90aGVySW5Gcm9udCggdHJhdmVyc2UgKTsKKyAgICB9Cit9CisKKy8qIHRoZSBpbmRleCBpcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3QgdXNlZnVsIGZvciBvdXIgcHVycG9zZXMgKi8KKyAgICB2b2lkCitndWlfbWNoX2FkZF9tZW51KHZpbW1lbnVfVCAqbWVudSwgaW50IGluZGV4KQoreworICAgIHZpbW1lbnVfVAkqcGFyZW50ID0gbWVudS0+cGFyZW50OworICAgIGNoYXJfdQkqYWNjZWxfa2V5OworICAgIGNoYXJfdQltbmVtb25pY19zdHJbTUJfTEVOX01BWF07CisgICAgaW50CSAgICBuOworICAgIFB0QXJnX3QgYXJnc1s1XTsKKworICAgIG1lbnUtPnN1Ym1lbnVfaWQgPSBtZW51LT5pZCA9IE5VTEw7CisKKyAgICBpZiggbWVudV9pc19tZW51YmFyKCBtZW51LT5uYW1lICkgKQorICAgIHsKKworCWFjY2VsX2tleSA9IHZpbV9zdHJjaHIoIG1lbnUtPm5hbWUsICcmJyApOworCWlmKCBhY2NlbF9rZXkgIT0gTlVMTCApCisJeworCSAgICBtbmVtb25pY19zdHJbMF0gPSBhY2NlbF9rZXlbMV07CisJICAgIG1uZW1vbmljX3N0clsxXSA9IE5VTDsKKwl9CisKKwkvKiBDcmVhdGUgdGhlIG1lbnUgYnV0dG9uICovCisJbiA9IDA7CisJUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX1RFWFRfU1RSSU5HLCBtZW51LT5kbmFtZSwgMCApOworCVB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19BQ0NFTF9URVhULCBtZW51LT5hY3RleHQsIDAgKTsKKwlpZiggYWNjZWxfa2V5ICE9IE5VTEwgKQorCSAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfQUNDRUxfS0VZLCBtbmVtb25pY19zdHIsIDAgKTsKKwlQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfUE9JTlRFUiwgbWVudSwgMCApOworCisJaWYoIHBhcmVudCAhPSBOVUxMICkKKwkgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX0JVVFRPTl9UWVBFLCBQdF9NRU5VX1JJR0hULCAwICk7CisKKwltZW51LT5pZCA9IFB0Q3JlYXRlV2lkZ2V0KCBQdE1lbnVCdXR0b24sCisJCShwYXJlbnQgPT0gTlVMTCkgPyBndWkudmltTWVudUJhciA6IHBhcmVudC0+c3VibWVudV9pZCwKKwkJbiwgYXJncyApOworCisJUHRBZGRDYWxsYmFjayggbWVudS0+aWQsIFB0X0NCX0FSTSwgZ3VpX3BoX2hhbmRsZV9wdWxsZG93bl9tZW51LCBtZW51ICk7CisKKwkvKiBDcmVhdGUgdGhlIGFjdHVhbCBtZW51ICovCisJbiA9IDA7CisJaWYoIHBhcmVudCAhPSBOVUxMICkKKwkgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX01FTlVfRkxBR1MsIFB0X1RSVUUsIFB0X01FTlVfQ0hJTEQgKTsKKworCW1lbnUtPnN1Ym1lbnVfaWQgPSBQdENyZWF0ZVdpZGdldCggUHRNZW51LCBtZW51LT5pZCwgbiwgYXJncyApOworCisJaWYoIHBhcmVudCA9PSBOVUxMICkKKwl7CisJICAgIFB0QWRkQ2FsbGJhY2soIG1lbnUtPnN1Ym1lbnVfaWQsIFB0X0NCX1VOUkVBTElaRUQsCisJCSAgICBndWlfcGhfaGFuZGxlX21lbnVfdW5yZWFsaXplZCwgbWVudSApOworCisJICAgIGlmKCBtZW51LT5tbmVtb25pYyAhPSAwICkKKwkgICAgeworCQlQdEFkZEhvdGtleUhhbmRsZXIoIGd1aS52aW1XaW5kb3csIHRvbG93ZXIoIG1lbnUtPm1uZW1vbmljICksCisJCQlQa19LTV9BbHQsIDAsIG1lbnUsIGd1aV9waF9oYW5kbGVfcHVsbGRvd25fbWVudSApOworCSAgICB9CisJfQorCisJZ3VpX3BoX3Bvc2l0aW9uX21lbnUoIG1lbnUtPmlkLCBtZW51LT5wcmlvcml0eSApOworCisJLyogUmVkcmF3IG1lbnViYXIgaGVyZSBpbnN0ZWFkIG9mIGd1aV9tY2hfZHJhd19tZW51YmFyICovCisJaWYoIGd1aS5tZW51X2lzX2FjdGl2ZSApCisJICAgIFB0UmVhbGl6ZVdpZGdldCggbWVudS0+aWQgKTsKKyAgICB9CisgICAgZWxzZSBpZiggbWVudV9pc19wb3B1cCggbWVudS0+bmFtZSApICkKKyAgICB7CisJbWVudS0+c3VibWVudV9pZCA9IFB0Q3JlYXRlV2lkZ2V0KCBQdE1lbnUsIGd1aS52aW1XaW5kb3csIDAsIE5VTEwgKTsKKwlQdEFkZENhbGxiYWNrKCBtZW51LT5zdWJtZW51X2lkLCBQdF9DQl9VTlJFQUxJWkVELAorCQlndWlfcGhfaGFuZGxlX21lbnVfdW5yZWFsaXplZCwgbWVudSApOworICAgIH0KK30KKworICAgIHZvaWQKK2d1aV9tY2hfYWRkX21lbnVfaXRlbSh2aW1tZW51X1QgKm1lbnUsIGludCBpbmRleCkKK3sKKyAgICB2aW1tZW51X1QJKnBhcmVudCA9IG1lbnUtPnBhcmVudDsKKyAgICBjaGFyX3UJKmFjY2VsX2tleTsKKyAgICBjaGFyX3UJbW5lbW9uaWNfc3RyW01CX0xFTl9NQVhdOworICAgIGludAkgICAgbjsKKyAgICBQdEFyZ190IGFyZ3NbMTNdOworCisgICAgbiA9IDA7CisgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX1BPSU5URVIsIG1lbnUsIDAgKTsKKworI2lmZGVmIEZFQVRfVE9PTEJBUgorICAgIGlmKCBtZW51X2lzX3Rvb2xiYXIoIHBhcmVudC0+bmFtZSApICkKKyAgICB7CisJaWYoIG1lbnVfaXNfc2VwYXJhdG9yKCBtZW51LT5uYW1lICkgKQorCXsKKwkgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX1NFUF9GTEFHUywKKwkJICAgIFB0X1NFUF9WRVJUSUNBTCwgUHRfU0VQX09SSUVOVEFUSU9OICk7CisJICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19TRVBfVFlQRSwgUHRfRVRDSEVEX0lOLCAwICk7CisJICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19BTkNIT1JfRkxBR1MsCisJCSAgICBQdF9UUlVFLCBQdF9BTkNIT1JfVE9QX0JPVFRPTSApOworCSAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfV0lEVEgsIDIsIDAgKTsKKwkgICAgbWVudS0+aWQgPSBQdENyZWF0ZVdpZGdldCggUHRTZXBhcmF0b3IsIGd1aS52aW1Ub29sQmFyLCBuLCBhcmdzICk7CisJfQorCWVsc2UKKwl7CisJICAgIGlmKCBzdHJzdHIoIChjb25zdCBjaGFyICopIHBfdG9vbGJhciwgInRleHQiICkgIT0gTlVMTCApCisJICAgIHsKKwkJUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX0JBTExPT05fUE9TSVRJT04sCisJCQlQdF9CQUxMT09OX0JPVFRPTSwgMCApOworCQlQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfVEVYVF9TVFJJTkcsIG1lbnUtPmRuYW1lLCAwICk7CisJCVB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19URVhUX0ZPTlQsICJUZXh0Rm9udDA4IiwgMCApOworCSAgICB9CisJICAgIGlmKCAoIHN0cnN0ciggKGNvbnN0IGNoYXIgKikgcF90b29sYmFyLCAiaWNvbnMiICkgIT0gTlVMTCApICYmCisJCSAgICAoIGd1aV9waF90b29sYmFyX2ltYWdlcyAhPSBOVUxMICkgKQorCSAgICB7CisJCVB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19MQUJFTF9JTUFHRSwKKwkJCWd1aV9waF90b29sYmFyX2ZpbmRfaWNvbiggbWVudSApLCAwICk7CisJCVB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19MQUJFTF9UWVBFLCBQdF9URVhUX0lNQUdFLCAwICk7CisJCVB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19URVhUX0lNQUdFX1NQQUNJTkcsIDAsIDAgKTsKKwkgICAgfQorCSAgICBpZiggc3Ryc3RyKCAoY29uc3QgY2hhciAqKSBwX3Rvb2xiYXIsICJ0b29sdGlwcyIgKSAhPSBOVUxMICkKKwkgICAgeworCQlQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfTEFCRUxfQkFMTE9PTiwKKwkJCWd1aV9waF9zaG93X3Rvb2x0aXAsIDAgKTsKKwkJUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX0xBQkVMX0ZMQUdTLAorCQkJUHRfVFJVRSwgUHRfU0hPV19CQUxMT09OICk7CisJICAgIH0KKwkgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX01BUkdJTl9IRUlHSFQsIDEsIDAgKTsKKwkgICAgUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX01BUkdJTl9XSURUSCwgMSwgMCApOworCSAgICBQdFNldEFyZyggJmFyZ3NbIG4rKyBdLCBQdF9BUkdfRkxBR1MsIFB0X0ZBTFNFLAorCQkgICAgUHRfSElHSExJR0hURUQgfCBQdF9HRVRTX0ZPQ1VTICk7CisJICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19GSUxMX0NPTE9SLCBQZ19UUkFOU1BBUkVOVCwgMCApOworCSAgICBtZW51LT5pZCA9IFB0Q3JlYXRlV2lkZ2V0KCBQdEJ1dHRvbiwgZ3VpLnZpbVRvb2xCYXIsIG4sIGFyZ3MgKTsKKworCSAgICBQdEFkZENhbGxiYWNrKCBtZW51LT5pZCwgUHRfQ0JfQUNUSVZBVEUsIGd1aV9waF9oYW5kbGVfbWVudSwgbWVudSApOworCX0KKwkvKiBVcGRhdGUgdG9vbGJhciBpZiBpdCdzIG9wZW4gKi8KKwlpZiggUHRXaWRnZXRJc1JlYWxpemVkKCBndWkudmltVG9vbEJhciApICkKKwkgICAgUHRSZWFsaXplV2lkZ2V0KCBtZW51LT5pZCApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwlpZiggbWVudV9pc19zZXBhcmF0b3IoIG1lbnUtPm5hbWUgKSApCisgICAgeworCW1lbnUtPmlkID0gUHRDcmVhdGVXaWRnZXQoIFB0U2VwYXJhdG9yLCBwYXJlbnQtPnN1Ym1lbnVfaWQsIG4sIGFyZ3MgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlhY2NlbF9rZXkgPSB2aW1fc3RyY2hyKCBtZW51LT5uYW1lLCAnJicgKTsKKwlpZiggYWNjZWxfa2V5ICE9IE5VTEwgKQorCXsKKwkgICAgbW5lbW9uaWNfc3RyWzBdID0gYWNjZWxfa2V5WzFdOworCSAgICBtbmVtb25pY19zdHJbMV0gPSBOVUw7CisJfQorCisJUHRTZXRBcmcoICZhcmdzWyBuKysgXSwgUHRfQVJHX1RFWFRfU1RSSU5HLCBtZW51LT5kbmFtZSwgMCApOworCWlmKCBhY2NlbF9rZXkgIT0gTlVMTCApCisJICAgIFB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19BQ0NFTF9LRVksIG1uZW1vbmljX3N0ciwKKwkJICAgIDAgKTsKKworCVB0U2V0QXJnKCAmYXJnc1sgbisrIF0sIFB0X0FSR19BQ0NFTF9URVhULCBtZW51LT5hY3RleHQsIDAgKTsKKworCW1lbnUtPmlkID0gUHRDcmVhdGVXaWRnZXQoIFB0TWVudUJ1dHRvbiwgcGFyZW50LT5zdWJtZW51X2lkLCBuLCBhcmdzICk7CisKKwlQdEFkZENhbGxiYWNrKCBtZW51LT5pZCwgUHRfQ0JfQUNUSVZBVEUsIGd1aV9waF9oYW5kbGVfbWVudSwgbWVudSApOworCisjaWZkZWYgVVNFX1BBTkVMX0dST1VQCisJaWYoIGd1aV9waF9pc19idWZmZXJfaXRlbSggbWVudSwgcGFyZW50ICkgPT0gVFJVRSApCisJeworCSAgICBQdEFkZENhbGxiYWNrKCBtZW51LT5pZCwgUHRfQ0JfREVTVFJPWUVELAorCQkgICAgZ3VpX3BoX2hhbmRsZV9idWZmZXJfcmVtb3ZlLCBtZW51ICk7CisJICAgIGd1aV9waF9wZ19hZGRfYnVmZmVyKCBtZW51LT5kbmFtZSApOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIGd1aV9waF9wb3NpdGlvbl9tZW51KCBtZW51LT5pZCwgbWVudS0+cHJpb3JpdHkgKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZGVzdHJveV9tZW51KHZpbW1lbnVfVCAqbWVudSkKK3sKKyAgICBpZiggbWVudS0+c3VibWVudV9pZCAhPSBOVUxMICkKKwlQdERlc3Ryb3lXaWRnZXQoIG1lbnUtPnN1Ym1lbnVfaWQgKTsKKyAgICBpZiggbWVudS0+aWQgIT0gTlVMTCApCisJUHREZXN0cm95V2lkZ2V0KCBtZW51LT5pZCApOworCisgICAgbWVudS0+c3VibWVudV9pZCA9IE5VTEw7CisgICAgbWVudS0+aWQgPSBOVUxMOworfQorCisgICAgdm9pZAorZ3VpX21jaF9tZW51X2dyZXkodmltbWVudV9UICptZW51LCBpbnQgZ3JleSkKK3sKKyAgICBsb25nICAgIGZsYWdzLCBtYXNrLCBmaWVsZHM7CisKKyAgICBpZiggbWVudS0+aWQgPT0gTlVMTCApCisJcmV0dXJuOworCisgICAgZmxhZ3MgPSBQdFdpZGdldEZsYWdzKCBtZW51LT5pZCApOworICAgIGlmKCBQdFdpZGdldElzQ2xhc3MoIG1lbnUtPmlkLCBQdE1lbnVCdXR0b24gKSAmJgorCSAgICBQdFdpZGdldElzQ2xhc3MoIFB0V2lkZ2V0UGFyZW50KCBtZW51LT5pZCApLCBQdE1lbnUgKSApCisgICAgeworCWZpZWxkcyA9IFB0X0ZBTFNFOworCW1hc2sgPSBQdF9TRUxFQ1RBQkxFIHwgUHRfSElHSExJR0hURUQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZmllbGRzID0gUHRfVFJVRTsKKwltYXNrID0gUHRfQkxPQ0tFRCB8IFB0X0dIT1NUOworICAgIH0KKworICAgIGlmKCAhIGdyZXkgKQorCWZpZWxkcyA9IH5maWVsZHM7CisKKyAgICBQdFNldFJlc291cmNlKCBtZW51LT5pZCwgUHRfQVJHX0ZMQUdTLCBmaWVsZHMsCisJICAgIG1hc2sgKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfbWVudV9oaWRkZW4odmltbWVudV9UICptZW51LCBpbnQgaGlkZGVuKQoreworICAgIC8qIFRPRE86IFt1bl1yZWFsaXplIHRoZSB3aWRnZXQ/ICovCit9CisKKyAgICB2b2lkCitndWlfbWNoX2RyYXdfbWVudWJhcih2b2lkKQoreworICAgIC8qIFRoZSBvbmx5IHRpbWUgYSByZWRyYXcgaXMgbmVlZGVkIGlzIHdoZW4gYSBtZW51IGJ1dHRvbgorICAgICAqIGlzIGFkZGVkIHRvIHRoZSBtZW51YmFyLCBhbmQgdGhhdCBpcyBkZXRlY3RlZCBhbmQgdGhlIGJhcgorICAgICAqIHJlZHJhd24gaW4gZ3VpX21jaF9hZGRfbWVudV9pdGVtCisgICAgICovCit9CisKKyAgICB2b2lkCitndWlfbWNoX3Nob3dfcG9wdXBtZW51KHZpbW1lbnVfVCAqbWVudSkKK3sKKyAgICBQdFNldFJlc291cmNlKCBtZW51LT5zdWJtZW51X2lkLCBQdF9BUkdfUE9TLCAmYWJzX21vdXNlLCAwICk7CisgICAgUHRSZWFsaXplV2lkZ2V0KCBtZW51LT5zdWJtZW51X2lkICk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3RvZ2dsZV90ZWFyb2ZmcyhpbnQgZW5hYmxlKQoreworICAgIC8qIE5vIHRlYXJvZmZzIHlldCAqLworfQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoIEZFQVRfVE9PTEJBUiApIHx8IGRlZmluZWQoIFBST1RPICkKKyAgICB2b2lkCitndWlfbWNoX3Nob3dfdG9vbGJhcihpbnQgc2hvd2l0KQoreworICAgIGlmKCBzaG93aXQgKQorCVB0UmVhbGl6ZVdpZGdldCggZ3VpLnZpbVRvb2xCYXIgKTsKKyAgICBlbHNlCisJUHRVbnJlYWxpemVXaWRnZXQoIGd1aS52aW1Ub29sQmFyICk7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBGb250cyAqLworCisgICAgc3RhdGljIEd1aUZvbnQKK2d1aV9waF9nZXRfZm9udCgKKwljaGFyX3UJKmZvbnRfbmFtZSwKKwlpbnRfdQlmb250X2ZsYWdzLAorCWludF91CWZvbnRfc2l6ZSwKKwkvKiBDaGVjayB3aGV0aGVyIHRoZSByZXN1bHRpbmcgZm9udCBoYXMgdGhlIGZvbnQgZmxhZ3MgYW5kIHNpemUgdGhhdAorCSAqIHdhcyBhc2tlZCBmb3IgKi8KKwlpbnRfdQllbmZvcmNlCisJKQoreworICAgIGNoYXJfdQkgICAgKmZvbnRfdGFnOworICAgIEZvbnRRdWVyeUluZm8gICBpbmZvOworICAgIGludF91CSAgICBzdHlsZTsKKworICAgIGZvbnRfdGFnID0gYWxsb2MoIE1BWF9GT05UX1RBRyApOworICAgIGlmKCBmb250X3RhZyAhPSBOVUxMICkKKyAgICB7CisJaWYoIFBmR2VuZXJhdGVGb250TmFtZSggZm9udF9uYW1lLCBmb250X2ZsYWdzLCBmb250X3NpemUsCisJCSAgICBmb250X3RhZyApICE9IE5VTEwgKQorCXsKKwkgICAgLyogRW5mb3JjZSBzb21lIGxpbWl0cyBvbiB0aGUgZm9udCB1c2VkICovCisJICAgIHN0eWxlID0gUEhGT05UX0lORk9fRklYRUQ7CisKKwkgICAgaWYoIGVuZm9yY2UgJiBQRl9TVFlMRV9CT0xEICkKKwkJc3R5bGUgfD0gUEhGT05UX0lORk9fQk9MRDsKKwkgICAgaWYoIGVuZm9yY2UgJiBQRl9TVFlMRV9BTlRJQUxJQVMgKQorCQlzdHlsZSB8PSBQSEZPTlRfSU5GT19BTElBUzsKKwkgICAgaWYoIGVuZm9yY2UgJiBQRl9TVFlMRV9JVEFMSUMgKQorCQlzdHlsZSB8PSBQSEZPTlRfSU5GT19JVEFMSUM7CisKKwkgICAgUGZRdWVyeUZvbnRJbmZvKCBmb250X3RhZywgJmluZm8gKTsKKworCSAgICBpZiggaW5mby5zaXplID09IDAgKQorCQlmb250X3NpemUgPSAwOworCisJICAgIC8qIE1ha2Ugc3VyZSBmb250IHNpemUgbWF0Y2hlcywgYW5kIHRoYXQgdGhlIGZvbnQgc3R5bGUKKwkgICAgICogYXQgbGVhc3QgaGFzIHRoZSBiaXRzIHdlJ3JlIGNoZWNraW5nIGZvciAqLworCSAgICBpZiggZm9udF9zaXplID09IGluZm8uc2l6ZSAmJgorCQkgICAgc3R5bGUgPT0gKGluZm8uc3R5bGUgJiBzdHlsZSkgKQorCQlyZXR1cm4oIChHdWlGb250KSBmb250X3RhZyApOworCX0KKwl2aW1fZnJlZSggZm9udF90YWcgKTsKKyAgICB9CisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKKy8qCisgKiBTcGxpdCB1cCB0aGUgdmltIGZvbnQgbmFtZQorICoKKyAqIHZpbV9mb250IGlzIGluIHRoZSBmb3JtIG9mCisgKiA8bmFtZT46czxoZWlnaHQ+OmE6YjppCisgKgorICogYSA9IGFudGlhbGlhcworICogYiA9IGJvbGQKKyAqIGkgPSBpdGFsaWMKKyAqCisgKi8KKworICAgIHN0YXRpYyBpbnQKK2d1aV9waF9wYXJzZV9mb250X25hbWUoCisJY2hhcl91ICp2aW1fZm9udCwKKwljaGFyX3UgKipmb250X25hbWUsCisJaW50X3UgKmZvbnRfZmxhZ3MsCisJaW50X3UgKmZvbnRfc2l6ZSApCit7CisgICAgY2hhcl91ICAqbWFyazsKKyAgICBpbnRfdSAgIG5hbWVfbGVuLCBzaXplOworCisgICAgbWFyayA9IHZpbV9zdHJjaHIoIHZpbV9mb250LCAnOicgKTsKKyAgICBpZiggbWFyayA9PSBOVUxMICkKKwluYW1lX2xlbiA9IFNUUkxFTiggdmltX2ZvbnQgKTsKKyAgICBlbHNlCisJbmFtZV9sZW4gPSAoaW50X3UpICggbWFyayAtIHZpbV9mb250ICk7CisKKyAgICAqZm9udF9uYW1lID0gdmltX3N0cm5zYXZlKCB2aW1fZm9udCwgbmFtZV9sZW4gKTsKKyAgICBpZiggKmZvbnRfbmFtZSAhPSBOVUxMICkKKyAgICB7CisJaWYoIG1hcmsgIT0gTlVMTCApCisJeworCSAgICB3aGlsZSggKm1hcmsgIT0gTlVMICYmICptYXJrKysgPT0gJzonKQorCSAgICB7CisJCXN3aXRjaCggdG9sb3dlciggKm1hcmsrKyApICkKKwkJeworCQkgICAgY2FzZSAnYSc6ICpmb250X2ZsYWdzIHw9IFBGX1NUWUxFX0FOVElBTElBUzsgYnJlYWs7CisJCSAgICBjYXNlICdiJzogKmZvbnRfZmxhZ3MgfD0gUEZfU1RZTEVfQk9MRDsgYnJlYWs7CisJCSAgICBjYXNlICdpJzogKmZvbnRfZmxhZ3MgfD0gUEZfU1RZTEVfSVRBTElDOyBicmVhazsKKworCQkgICAgY2FzZSAncyc6CisJCQlzaXplID0gZ2V0ZGlnaXRzKCAmbWFyayApOworCQkJLyogUmVzdHJpY3QgdGhlIHNpemUgdG8gc29tZSB2YWd1ZSBsaW1pdHMgKi8KKwkJCWlmKCBzaXplIDwgMSB8fCBzaXplID4gMTAwICkKKwkJCSAgICBzaXplID0gODsKKworCQkJKmZvbnRfc2l6ZSA9IHNpemU7CisJCQlicmVhazsKKworCQkgICAgZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJICAgIH0KKwl9CisJcmV0dXJuKCBUUlVFICk7CisgICAgfQorICAgIHJldHVybiggRkFMU0UgKTsKK30KKworICAgIGludAorZ3VpX21jaF9pbml0X2ZvbnQoY2hhcl91ICp2aW1fZm9udF9uYW1lLCBpbnQgZm9udHNldCkKK3sKKyAgICBjaGFyX3UgICpmb250X3RhZzsKKyAgICBjaGFyX3UgICpmb250X25hbWUgPSBOVUxMOworICAgIGludF91ICAgZm9udF9mbGFncyA9IDA7CisgICAgaW50X3UgICBmb250X3NpemUgID0gMTI7CisKKyAgICBGb250UXVlcnlJbmZvIGluZm87CisgICAgUGhSZWN0X3QgZXh0ZW50OworCisgICAgaWYoIHZpbV9mb250X25hbWUgPT0gTlVMTCApCisgICAgeworCS8qIERlZmF1bHQgZm9udCAqLworCXZpbV9mb250X25hbWUgPSAiUEMgVGVybSI7CisgICAgfQorCisgICAgaWYoIFNUUkNNUCggdmltX2ZvbnRfbmFtZSwgIioiICkgPT0gMCApCisgICAgeworCWZvbnRfdGFnID0gUHRGb250U2VsZWN0aW9uKCBndWkudmltV2luZG93LCBOVUxMLCBOVUxMLAorCQkicGN0ZXJtMTIiLCAtMSwgUEhGT05UX0ZJWEVELCBOVUxMICk7CisKKwlpZiggZm9udF90YWcgPT0gTlVMTCApCisJICAgIHJldHVybiggRkFJTCApOworCisJZ3VpX21jaF9mcmVlX2ZvbnQoIGd1aS5ub3JtX2ZvbnQgKTsKKwlndWkubm9ybV9mb250ID0gZm9udF90YWc7CisKKwlQZlF1ZXJ5Rm9udEluZm8oIGZvbnRfdGFnLCAmaW5mbyApOworCWZvbnRfbmFtZSA9IHZpbV9zdHJzYXZlKCBpbmZvLmZvbnQgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiggZ3VpX3BoX3BhcnNlX2ZvbnRfbmFtZSggdmltX2ZvbnRfbmFtZSwgJmZvbnRfbmFtZSwgJmZvbnRfZmxhZ3MsCisJCSAgICAmZm9udF9zaXplICkgPT0gRkFMU0UgKQorCSAgICByZXR1cm4oIEZBSUwgKTsKKworCWZvbnRfdGFnID0gZ3VpX3BoX2dldF9mb250KCBmb250X25hbWUsIGZvbnRfZmxhZ3MsIGZvbnRfc2l6ZSwgMCApOworCWlmKCBmb250X3RhZyA9PSBOVUxMICkKKwl7CisJICAgIHZpbV9mcmVlKCBmb250X25hbWUgKTsKKwkgICAgcmV0dXJuKCBGQUlMICk7CisJfQorCWd1aV9tY2hfZnJlZV9mb250KCBndWkubm9ybV9mb250ICk7CisJZ3VpLm5vcm1fZm9udCA9IGZvbnRfdGFnOworICAgIH0KKworICAgIGd1aV9tY2hfZnJlZV9mb250KCBndWkuYm9sZF9mb250ICk7CisgICAgZ3VpLmJvbGRfZm9udCA9IGd1aV9waF9nZXRfZm9udCggZm9udF9uYW1lLCBmb250X2ZsYWdzIHwgUEZfU1RZTEVfQk9MRCwKKwkgICAgZm9udF9zaXplLCBQRl9TVFlMRV9CT0xEICk7CisKKyAgICBndWlfbWNoX2ZyZWVfZm9udCggZ3VpLml0YWxfZm9udCApOworICAgIGd1aS5pdGFsX2ZvbnQgPSBndWlfcGhfZ2V0X2ZvbnQoIGZvbnRfbmFtZSwgZm9udF9mbGFncyB8IFBGX1NUWUxFX0lUQUxJQywKKwkgICAgZm9udF9zaXplLCBQRl9TVFlMRV9JVEFMSUMgKTsKKworICAgIC8qIFRoaXMgZXh0ZW50IHdhcyBicm91Z2h0IHRvIHlvdSBieSB0aGUgbGV0dGVyICdnJyAqLworICAgIFBmRXh0ZW50VGV4dCggJmV4dGVudCwgTlVMTCwgZm9udF90YWcsICJnIiwgMSApOworCisgICAgZ3VpLmNoYXJfd2lkdGggPSBleHRlbnQubHIueCAtIGV4dGVudC51bC54ICsgMTsKKyAgICBndWkuY2hhcl9oZWlnaHQgPSAoLSBleHRlbnQudWwueSkgKyBleHRlbnQubHIueSArIDE7CisgICAgZ3VpLmNoYXJfYXNjZW50ID0gLSBleHRlbnQudWwueTsKKworICAgIHZpbV9mcmVlKCBmb250X25hbWUgKTsKKyAgICByZXR1cm4oIE9LICk7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfYWRqdXN0X2NoYXJzaXplKHZvaWQpCit7CisgICAgRm9udFF1ZXJ5SW5mbyBpbmZvOworCisgICAgUGZRdWVyeUZvbnRJbmZvKCBndWkubm9ybV9mb250LCAmaW5mbyApOworCisgICAgZ3VpLmNoYXJfaGVpZ2h0ID0gLSBpbmZvLmFzY2VuZGVyICsgaW5mby5kZXNjZW5kZXIgKyBwX2xpbmVzcGFjZTsKKyAgICBndWkuY2hhcl9hc2NlbnQgPSAtIGluZm8uYXNjZW5kZXIgKyBwX2xpbmVzcGFjZSAvIDI7CisKKyAgICByZXR1cm4oIE9LICk7Cit9CisKKyAgICBHdWlGb250CitndWlfbWNoX2dldF9mb250KGNoYXJfdSAqdmltX2ZvbnRfbmFtZSwgaW50IHJlcG9ydF9lcnJvcikKK3sKKyAgICBjaGFyX3UgICpmb250X25hbWU7CisgICAgY2hhcl91ICAqZm9udF90YWc7CisgICAgaW50X3UgICBmb250X3NpemUgPSAxMjsKKyAgICBpbnRfdSAgIGZvbnRfZmxhZ3MgPSAwOworCisgICAgaWYoIGd1aV9waF9wYXJzZV9mb250X25hbWUoIHZpbV9mb250X25hbWUsICZmb250X25hbWUsICZmb250X2ZsYWdzLAorCQkmZm9udF9zaXplICkgIT0gRkFMU0UgKQorICAgIHsKKwlmb250X3RhZyA9IGd1aV9waF9nZXRfZm9udCggZm9udF9uYW1lLCBmb250X2ZsYWdzLCBmb250X3NpemUsIC0xICk7CisJdmltX2ZyZWUoIGZvbnRfbmFtZSApOworCisJaWYoIGZvbnRfdGFnICE9IE5VTEwgKQorCSAgICByZXR1cm4oIChHdWlGb250KSBmb250X3RhZyApOworICAgIH0KKworICAgIGlmKCByZXBvcnRfZXJyb3IgKQorCUVNU0cyKGVfZm9udCwgdmltX2ZvbnRfbmFtZSApOworCisgICAgcmV0dXJuKCBGQUlMICk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF9mb250KEd1aUZvbnQgZm9udCkKK3sKKyAgICBQZ1NldEZvbnQoIGZvbnQgKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZnJlZV9mb250KEd1aUZvbnQgZm9udCkKK3sKKyAgICB2aW1fZnJlZSggZm9udCApOworfQorCmRpZmYgLS1naXQgYS9zcmMvZ3VpX3Jpc2Nvcy5jIGIvc3JjL2d1aV9yaXNjb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODIzYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2d1aV9yaXNjb3MuYwpAQCAtMCwwICsxLDM1NDcgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogZ3VpX3Jpc2Nvcy5jCisgKgorICogVGhvbWFzIExlb25hcmQgPHRhbDE5N0BlY3Muc290b24uYWMudWs+CisgKiBVcGRhdGVkIGJ5IEFuZHkgV2luZ2F0ZSA8YW5keUBzcGFyc2UubmV0PgorICovCisKK2V4dGVybiBpbnQgdGltZV9vZl9sYXN0X3BvbGw7CisKK2ludCB0YXNrX2hhbmRsZSA9IDA7CQkvKiBaZXJvIG1lYW5zIHdlIGFyZSBub3QgeWV0IGEgV2ltcCB0YXNrICovCitpbnQgY2hpbGRfaGFuZGxlID0gMDsJCS8qIFRhc2sgaGFuZGxlIG9mIG91ciBjaGlsZCBwcm9jZXNzICh6ZXJvIGlmIG5vbmUpLiAqLworaW50ICp3aW1wX21lbnUgPSAoaW50ICopIC0xOwkvKiBQb2ludGVyIHRvIGEgV2ltcCBtZW51IHN0cnVjdHVyZSAob3IgLTEpICovCitpbnQgc2F2ZV93aW5kb3cgPSAtMTsJCS8qIFNhdmUgQXMgd2luZG93IGhhbmRsZSAqLworCitpbnQgKnJlZHJhd19ibG9jayA9IE5VTEw7CS8qIE5VTEwgbWVhbnMgbm90IGluIGEgcmVkcmF3IGxvb3AuICovCitpbnQgcm9fcmV0dXJuX2Vhcmx5ID0gRkFMU0U7CS8qIEJyZWFrIG91dCBvZiBndWlfbWNoX3dhaXRfZm9yX2NoYXJzKCkgKi8KKworaW50IGxlYWZfcmVmID0gMDsJCS8qIFdpbXAgbWVzc2FnZSBudW1iZXIgLSBzZW5kIHZpYSBXaW1wJFNjcmFwICovCitjaGFyX3UgKmxlYWZfbmFtZSA9IE5VTEw7CS8qIExlYWYgbmFtZSBmcm9tIERhdGFTYXZlICovCisKK2ludCBkZWZhdWx0X2NvbHVtbnMgPSAxMjA7CS8qIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBpZiB0aGUgLS1yb3dzIGFuZCAtLWNvbHVtbnMgKi8KK2ludCBkZWZhdWx0X3Jvd3MgPSAzMjsJCS8qIG9wdGlvbnMgYXJlbid0IHVzZWQgb24gc3RhcnR1cC4gKi8KKworI2RlZmluZSBEUkFHX0ZBTFNFCSAgICAwCisjZGVmaW5lIERSQUdfU0VMRUNUSU9OCSAgICAxCisjZGVmaW5lIERSQUdfUkVTSVpFX1dJTkRPVyAgMgoraW50IHJvX2RyYWdnaW5nID0gRFJBR19GQUxTRTsKK2ludCBkcmFnX2J1dHRvbjsKK2ludCBkcmFnX21vZGlmaWVyczsKK2ludCBkcmFnX3hfb2Zmc2V0OworaW50IGRyYWdfeV9vZmZzZXQ7CisKK2ludCBuZXN0ZWRfd2ltcCA9IEZBTFNFOwkvKiBCb29sIC0gY2FuIHdlIHVzZSB0aGUgbmV3IHdpbXA/ICovCisKK2ludCBjaGFuZ2VkX21vZGUgPSBGQUxTRTsKK2ludCB4X2VpZ2VuX2ZhY3RvcjsKK2ludCB5X2VpZ2VuX2ZhY3RvcjsKKworLyogSWYgcm9fY3VycmVudF9mb250IGlzIG5vbi16ZXJvIHRoZW4gdXNlIHRoZSBvdXRsaW5lIGZvbnQgd2l0aCB0aGF0IGhhbmRsZSwKKyAqIG90aGVyd2lzZSwgaWYgemFwX3JlZHJhdyBpcyBUUlVFIHRoZW4gdXNlIFphcFJlZHJhdywgb3RoZXJ3aXNlIHVzZSB0aGUKKyAqIHN5c3RlbSBmb250LgorICoKKyAqIElmIHphcF9yZWRyYXcgaXMgVFJVRSB0aGVuIHphcF9maWxlW10gY29udGFpbnMgdmFsaWQgWmFwIGZvbnQgZmlsZQorICogcG9pbnRlcnMgKG9yIE5VTExzKS4KKyAqLworaW50IHJvX2N1cnJlbnRfZm9udCA9IDA7CS8qIDAgaXMgc3lzdGVtIGZvbnQsIG9yIFphcFJlZHJhdyAqLworaW50IGZvbnRfeF9vZmZzZXQgICA9IDA7CS8qIFdoZXJlIHRvIHBvc2l0aW9uIGVhY2ggY2hhciBpbiBpdHMgYm94ICovCitpbnQgZm9udF95X29mZnNldCAgID0gMDsKKworaW50IHphcF9yZWRyYXcJICAgID0gRkFMU0U7CitpbnQgZG91YmxlX2hlaWdodCAgID0gRkFMU0U7CS8qIFBsb3QgZWFjaCBsaW5lIHR3aWNlPyAqLworCisjZGVmaW5lIGdyZ2IocixnLGIpICgoYjw8MTYpICsgKGc8PDgpICsgKHIpKQorI2RlZmluZSBVTlVTRURfQ09MT1VSIChndWkuYmFja19waXhlbCkKKworI2RlZmluZSBST19MT0FEX0NMSVBCT0FSRCAtMgkvKiBJbnRlcm5hbCBoYW5kbGUgZm9yIERhdGFTYXZlIG1lc3NhZ2UuICovCisKKy8qIENoYW5nZXMgYnkgSm9obiBLb3J0aW5rLCAyMi0yMyBKdWx5IDE5OTgKKyAqCisgKiBTdHVmZiB0byBtYWtlIHJlZHJhdyBhIGxvdCBmYXN0ZXIuIEFsbW9zdCBhbGwgb2YgaXQgaXMgcmlnaHQgaGVyZSBiZWxvdywKKyAqIGVsc2V3aGVyZSBjaGFuZ2VzIGFyZSBtYXJrZWQgd2l0aCAnSksyMzA3OTgnLiBBcGFydCBmcm9tIGEgc21hbGwgY2hhbmdlIGluCisgKiAnZ3VpLmMnIGFsbCBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIHRoaXMgZmlsZSwgJ2d1aV9yaXNjb3MuYycuIFRoZSBjaGFuZ2UgaW4KKyAqICdndWkuYycgaXMgdG8gbWFrZSBWaW0gc3RvcCBiZWluZyAnc21hcnQnIG5vdCByZWRyYXdpbmcgY2hhcmFjdGVycyB0aGF0IGFyZQorICogJ2FscmVhZHkgdGhlcmUnIChpLmUuIGZyb20gdGhlIHByZXZpb3VzIGxpbmUsIGJ5IGNvaW5jaWRlbmNlKS4gVGhpcyBjYXVzZWQgYQorICogbG90IG1vcmUgY2FsbHMgdG8gdGhlIHJlZHJhdyBjb2RlLCB3aGljaCB3ZSB3YW50IHRvIGF2b2lkIGJlY2F1c2UgYSBmZXcgbmljZQorICogYmlnIHN0cmluZ3MgYXQgYSB0aW1lIGlzIGEgbG90IGZhc3RlciB0aGFuIGEgdHJ1Y2tsb2FkIG9mIHNtYWxsIG9uZXMuICgnRGVhcgorICogQnJhbSAuLi4nKS4KKyAqLworCisvKiBUaGUgWmFwUmVkcmF3IHN0cnVjdHVyZSAqLworCitzdGF0aWMgc3RydWN0Cit7CisgICAgaW50CQlyX2ZsYWdzOworICAgIGludAkJcl9taW54OworICAgIGludAkJcl9taW55OworICAgIGludAkJcl9tYXh4OworICAgIGludAkJcl9tYXh5OworICAgIGludAkJcl9zY3JlZW47CisgICAgaW50CQlyX2JwbDsKKyAgICBpbnQJCXJfYnBwOworICAgIGludAkJcl9jaGFydzsKKyAgICBpbnQJCXJfY2hhcmg7CisgICAgY2hhcgkqcl9jYWRkcjsKKyAgICBpbnQJCXJfY2JwbDsKKyAgICBpbnQJCXJfY2JwYzsKKyAgICBpbnQJCXJfbGluZXNwOworICAgIGludAkJcl9kYXRhOworICAgIGludAkJcl9zY3JvbGx4OworICAgIGludAkJcl9zY3JvbGx5OworICAgIGludAkJKnJfcGFsZXR0ZTsKKyAgICBpbnQJCXJfZm9yOworICAgIGludAkJcl9iYWM7CisgICAgY2hhcgkqcl93b3JrYXJlYTsKKyAgICBpbnQJCXJfbWFneDsKKyAgICBpbnQJCXJfbWFneTsKKyAgICBpbnQJCXJfeHNpemU7CisgICAgaW50CQlyX3lzaXplOworICAgIGludAkJcl9tb2RlOworfQoremFwX3JlZHJhd19ibG9jazsKKworLyogT3RoZXIgZ2xvYmFscyAqLworCitzdGF0aWMgaW50CXphcF9yZWRyYXdfaW5pdGlhbGlzZWQgPSBGQUxTRTsKK3N0YXRpYyBpbnQJemFwX3JlZHJhd191cGRhdGVfY29sb3VyczsKK3N0YXRpYyBpbnQJemFwX3JlZHJhd19jb2xvdXJzWzJdOworc3RhdGljIGludAl6YXBfcmVkcmF3X3BhbGV0dGVbMTZdOworCisvKiBIb2xkcyB0aGUgY3VycmVudCBaYXAgZm9udCBmaWxlKHMpLgorICogVGhlIGZvbnQgaXMgcmVjcmVhdGVkIGZyb20gdGhpcyBibG9jayBvbiBhIG1vZGUgY2hhbmdlLgorICogV2hlbiB1c2luZyB6YXAsIGVsZW1lbnQgWkFQX05PUk1BTCBpcyBhbHdheXMgdmFsaWQsIGJ1dAorICogdGhlIG90aGVycyBjYW4gYmUgTlVMTC4KKyAqLworCisjZGVmaW5lIFpBUF9OT1JNQUwgIDAKKyNkZWZpbmUgWkFQX0JPTEQgICAgMQorI2RlZmluZSBaQVBfSVRBTElDICAyCisjZGVmaW5lIFpBUF9CSVRBTElDIDMKKyNkZWZpbmUgWkFQX1NUWUxFUyAgNAorCisvKiBaYXAgZm9udCBmaWxlIGZvcm1hdCBkYXRhICovCitzdGF0aWMgY2hhcgkqemFwX2ZpbGVbWkFQX1NUWUxFU10gPSB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH07CisKKy8qIHJfY2FkZHIgZm9ybWF0IGZvciBjdXJyZW50IG1vZGUgKi8KK3N0YXRpYyBjaGFyCSp6YXBfY2FkZHJbWkFQX1NUWUxFU10gPSB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH07CisKK3N0YXRpYyB2b2lkIHJvX3JlbW92ZV9tZW51KGludCAqbWVudSk7CisKKy8qCisgKiBJbml0aWFsaXNlIGFsbCB0aGUgWmFwUmVkcmF3IHN0dWZmLgorICogQ2FsbCB0aGlzIHdoZW4gY2hhbmdpbmcgZm9udCBhbmQgYWZ0ZXIgZWFjaCBtb2RlIGNoYW5nZS4KKyAqIHphcF9yZWRyYXdfYml0bWFwIG11c3QgY29udGFpbiBhIHZhbGlkIFphcCBmb250IGZpbGUgKHBvc3NpYmx5CisgKiBjcmVhdGVkIGZyb20gdGhlIHN5c3RlbSBmb250KS4KKyAqCisgKiBSZXR1cm4gRkFJTCB0byByZXZlcnQgdG8gc3lzdGVtIGZvbnQgKGlmIHdlIGNhbid0IHVzZSBaYXBSZWRyYXcpLgorICovCisgICAgaW50Cityb196YXBfcmVkcmF3X2luaXRpYWxpc2UoKQoreworICAgIGludAkgICAgYnl0ZXNfcGVyX2JpdG1hcF9jaGFyOworICAgIGludAkgICAgZmlyc3QsIGxhc3Q7CisgICAgaW50CSAgICBpOworCisgICAgLyogQ2FuJ3QgaGF2ZSBpbml0aWFsaXNlcnMgZm9yIHN0cnVjdCBtZW1iZXJzIDotKCwgb2ssIHRoaXMgd2F5IHRoZW4gLi4uICovCisgICAgaWYgKCF6YXBfcmVkcmF3X2luaXRpYWxpc2VkKQorICAgIHsKKwl6YXBfcmVkcmF3X2Jsb2NrLnJfd29ya2FyZWEgPSBOVUxMOworCXphcF9yZWRyYXdfaW5pdGlhbGlzZWQgPSBUUlVFOworICAgIH0KKworICAgIC8qIFdlIHJlZHJhdyBpbiBEU0EgbW9kZSAqLworICAgIHphcF9yZWRyYXdfYmxvY2sucl9mbGFncyA9IDB4MDsKKworICAgIC8qIExldCBaYXBSZWRyYXcgZ2V0IHRoZSBzY3JlZW4gYWRkcmVzcyBmb3IgdXMgKi8KKyAgICB6YXBfcmVkcmF3X2Jsb2NrLnJfc2NyZWVuID0gMDsKKworICAgIC8qIFJlYWQgdGhlIGZvbnQgd2lkdGggYW5kIGhlaWdodCBmcm9tIHRoZSBmb250IGZpbGUgaGVhZGVyLgorICAgICAqIEFzc3VtZSB0aGF0IGFsbCBzdHlsZXMgYXJlIHRoZSBzYW1lIHNpemUuCisgICAgICogWkFQX05PUk1BTCBpcyBhbHdheXMgcHJlc2VudC4KKyAgICAgKi8KKyAgICB6YXBfcmVkcmF3X2Jsb2NrLnJfY2hhcncgPSAoKGludCAqKSB6YXBfZmlsZVtaQVBfTk9STUFMXSlbMl07CisgICAgemFwX3JlZHJhd19ibG9jay5yX2NoYXJoID0gKChpbnQgKikgemFwX2ZpbGVbWkFQX05PUk1BTF0pWzNdOworCisgICAgLyogV2UgaGF2ZSBubyBsaW5lc3BhY2luZyAqLworICAgIHphcF9yZWRyYXdfYmxvY2sucl9saW5lc3AgPSAwOworCisgICAgLyogRml4IGZvcmVncm91bmQgPSBjb2xvdXIgMSAqLworICAgIHphcF9yZWRyYXdfYmxvY2sucl9mb3IgPSAxOworCisgICAgLyogRml4IGJhY2tncm91bmQgPSBjb2xvdXIgMCAqLworICAgIHphcF9yZWRyYXdfYmxvY2sucl9iYWMgPSAwOworCisgICAgLyogQ29sb3VyIG1hc2sgYnVmZmVyICovCisgICAgemFwX3JlZHJhd19ibG9jay5yX3BhbGV0dGUgPSB6YXBfcmVkcmF3X3BhbGV0dGU7CisKKyAgICAvKiBBbGxvY2F0ZSBsb2NhbCB3b3Jrc3BhY2UgKGZvciB0aGUgZmV3IGNhbGxzIGZvbGxvd2luZyBoZXJlKSAqLworICAgIGlmICh6YXBfcmVkcmF3X2Jsb2NrLnJfd29ya2FyZWEgIT0gTlVMTCkKKwlmcmVlKHphcF9yZWRyYXdfYmxvY2sucl93b3JrYXJlYSk7CisgICAgemFwX3JlZHJhd19ibG9jay5yX3dvcmthcmVhID0gKGNoYXIqKSBtYWxsb2MoMTI4KTsKKyAgICBpZiAoIXphcF9yZWRyYXdfYmxvY2sucl93b3JrYXJlYSkKKwlyZXR1cm4gRkFJTDsJLyogT3V0IG9mIG1lbW9yeSAqLworCisgICAgLyogRmlsbCBpbiBWRFUgdmFyaWFibGVzICovCisgICAgaWYgKHhzd2koWmFwUmVkcmF3X1JlYWRWZHVWYXJzLCAwLCAmemFwX3JlZHJhd19ibG9jaykgJiB2X2ZsYWcpCisJcmV0dXJuIEZBSUw7CSAgICAvKiBDYW4ndCBmaW5kIFphcFJlZHJhdyBtb2R1bGUgLSB1c2UgVkRVIGluc3RlYWQgKi8KKworICAgIC8qIERldGVybWluZSBjYnBsIGFuZCBjYnBjICovCisgICAgc3dpKFphcFJlZHJhd19DYWNoZWRDaGFyU2l6ZSwgemFwX3JlZHJhd19ibG9jay5yX2JwcCwgMCwKKwl6YXBfcmVkcmF3X2Jsb2NrLnJfY2hhcncsIHphcF9yZWRyYXdfYmxvY2sucl9jaGFyaCk7CisgICAgemFwX3JlZHJhd19ibG9jay5yX2NicGwgPSByMjsKKyAgICB6YXBfcmVkcmF3X2Jsb2NrLnJfY2JwYyA9IHIzOworCisgICAgLyogQWxsb2NhdGUgZ2VuZXJhbCB3b3Jrc3BhY2UgKGZvciB0aGUgY2FsbHMgb3V0c2lkZSkgKi8KKyAgICBpZiAoemFwX3JlZHJhd19ibG9jay5yX3dvcmthcmVhICE9IE5VTEwpCisJZnJlZSh6YXBfcmVkcmF3X2Jsb2NrLnJfd29ya2FyZWEpOworICAgIHphcF9yZWRyYXdfYmxvY2sucl93b3JrYXJlYSA9IChjaGFyKikgbWFsbG9jKDEyOCArIHphcF9yZWRyYXdfYmxvY2sucl9jYnBsKTsKKyAgICBpZiAoIXphcF9yZWRyYXdfYmxvY2sucl93b3JrYXJlYSkKKwlyZXR1cm4gRkFJTDsJLyogT3V0IG9mIG1lbW9yeSAqLworCisgICAgLyogTm93IGNvbnZlcnQgdGhlIDEgYnBwIGNoYXJhY3RlciBkYXRhIHJlYWR5IGZvciB0aGUgY3VycmVudCBtb2RlICovCisKKyAgICBieXRlc19wZXJfYml0bWFwX2NoYXIgPSAoemFwX3JlZHJhd19ibG9jay5yX2NoYXJ3ICogemFwX3JlZHJhd19ibG9jay5yX2NoYXJoICsgNykgLyA4OworCisgICAgLyogQ29udmVydCB0aGUgZm9udHMgZnJvbSAxYnBwIHRvIGEgZm9ybWF0IHN1aXRhYmxlIGZvciB0aGUKKyAgICAgKiBjdXJyZW50IG1vZGUuCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IFpBUF9TVFlMRVM7IGkrKykKKyAgICB7CisJZmlyc3QgPSAoKGludCAqKSB6YXBfZmlsZVtpXSlbNF07CisJbGFzdCAgPSAoKGludCAqKSB6YXBfZmlsZVtpXSlbNV07CisKKwlpZiAobGFzdCA+IDI1NSkKKwkgICAgbGFzdCA9IDI1NTsJLyogRG9uJ3QgY29udmVydCBjdXJzb3JzIChvdmVyd3JpdGVzIG1lbW9yeSEpICovCisKKwkvKiBBbGxvY2F0ZSB0aGUgZm9udCBjYWNoZSAqLworCXZpbV9mcmVlKHphcF9jYWRkcltpXSk7CisJaWYgKHphcF9maWxlW2ldKQorCSAgICB6YXBfY2FkZHJbaV0gPSAoY2hhciopIG1hbGxvYyh6YXBfcmVkcmF3X2Jsb2NrLnJfY2JwYyAqIDI1Nik7CisJZWxzZQorCSAgICB6YXBfY2FkZHJbaV0gPSBOVUxMOyAgICAvKiBObyBmaWxlIGZvciB0aGlzIHN0eWxlICovCisKKwlpZiAoemFwX2NhZGRyW2ldKQorCXsKKwkgICAgemFwX3JlZHJhd19ibG9jay5yX2NhZGRyID0gemFwX2NhZGRyW2ldOworCisJICAgIHN3aShaYXBSZWRyYXdfQ29udmVydEJpdG1hcCwgMCwgJnphcF9yZWRyYXdfYmxvY2ssCisJCSAgICBmaXJzdCwgbGFzdCwJCS8qIFJhbmdlIG9mIGNoYXJhY3RlcnMgdG8gY29udmVydCAqLworCQkgICAgemFwX2ZpbGVbaV0gKyAweDIwCS8qIEFkZHIgb2YgZmlyc3QgY2hhciBwcm92aWRlZCBieSBmb250ICovCisJCSAgICAtIGZpcnN0ICogYnl0ZXNfcGVyX2JpdG1hcF9jaGFyKTsKKwl9CisgICAgfQorCisgICAgaWYgKCF6YXBfY2FkZHJbWkFQX05PUk1BTF0pCisgICAgeworCXphcF9yZWRyYXcgPSBGQUxTRTsJLyogT3V0IG9mIG1lbW9yeSAqLworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIC8qIE5leHQgdGltZSB3ZSBuZWVkIHRoZW0sIHdlIGhhdmUgdG8gdXBkYXRlIHRoZSBjb2xvdXIgbWFza3MgKi8KKyAgICB6YXBfcmVkcmF3X3VwZGF0ZV9jb2xvdXJzID0gVFJVRTsKKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFJlZHJhdyBhIHN0cmluZyBhdCBPUyBjb29yZGluYXRlcyA8eCx5PiAodG9wLWxlZnQsIHggaW5jbHVzaXZlLCB5IGV4Y2x1c2l2ZSkuCisgKiBHcmFwaGljcyBjbGlwIHdpbmRvdyBpcyB3aW5kb3dbMC4uM10gYXMgaW4gUjErMjguLjQwIG9mIFdpbXBfUmVkcmF3V2luZG93LgorICogUmV0dXJucyAocG9zc2libHkgbW9kaWZpZWQpIGZsYWdzLgorICovCisgICAgaW50Cityb196YXBfcmVkcmF3X2RyYXdfc3RyaW5nKHgsIHksIHN0cmluZywgbGVuZ3RoLCBmbGFncywgY2xpcCkKKyAgICBpbnQJICAgIHg7CisgICAgaW50CSAgICB5OworICAgIGNoYXIgICAgKnN0cmluZzsKKyAgICBpbnQJICAgIGxlbmd0aDsKKyAgICBpbnQJICAgIGZsYWdzOwkvKiBEUkFXX1RSQU5TUCwgRFJBV19CT0xELCBEUkFXX1VOREVSTCwgRFJBV19JVEFMSUMgKi8KKyAgICBpbnQJICAgICpjbGlwOworeworICAgIGNoYXIgcmVkcmF3X2RhdGFbMTAyNF07CisgICAgaW50IGNsaXBfbWlueDsKKyAgICBpbnQgY2xpcF9taW55OworICAgIGludCBjbGlwX21heHg7CisgICAgaW50IGNsaXBfbWF4eTsKKyAgICBpbnQgb3NfeHNoaWZ0ID0gemFwX3JlZHJhd19ibG9jay5yX21hZ3g7CisgICAgaW50IG9zX3lzaGlmdCA9IHphcF9yZWRyYXdfYmxvY2sucl9tYWd5OworCisgICAgaWYgKGZsYWdzICYgRFJBV19UUkFOU1ApCisJcmV0dXJuIGZsYWdzOwkvKiBXZSBkb24ndCBkbyB0cmFuc3BhcmVudCBwbG90dGluZyB5ZXQuICovCisKKyAgICBpZiAoZmxhZ3MgJiBEUkFXX0JPTEQpCisgICAgeworCWlmIChmbGFncyAmIERSQVdfSVRBTElDICYmIHphcF9jYWRkcltaQVBfQklUQUxJQ10pCisJICAgIHphcF9yZWRyYXdfYmxvY2sucl9jYWRkciA9IHphcF9jYWRkcltaQVBfQklUQUxJQ107CisJZWxzZQorCSAgICB6YXBfcmVkcmF3X2Jsb2NrLnJfY2FkZHIgPSB6YXBfY2FkZHJbWkFQX0JPTERdOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmIChmbGFncyAmIERSQVdfSVRBTElDKQorCSAgICB6YXBfcmVkcmF3X2Jsb2NrLnJfY2FkZHIgPSB6YXBfY2FkZHJbWkFQX0lUQUxJQ107CisJZWxzZQorCSAgICB6YXBfcmVkcmF3X2Jsb2NrLnJfY2FkZHIgPSB6YXBfY2FkZHJbWkFQX05PUk1BTF07CisgICAgfQorICAgIGlmICghemFwX3JlZHJhd19ibG9jay5yX2NhZGRyKQorICAgIHsKKwl6YXBfcmVkcmF3X2Jsb2NrLnJfY2FkZHIgPSB6YXBfY2FkZHJbWkFQX05PUk1BTF07CisJZmxhZ3MgfD0gRFJBV19VTkRFUkw7CSAgICAvKiBTdHlsZSBtaXNzaW5nIC0gd2UgY2FuIGFsd2F5cyB1bmRlcmxpbmUgKi8KKyAgICB9CisKKyAgICAvKiBTZXQgdGhlIHZlcnRpY2FsIHNjYWxpbmcgZmxhZyAqLworICAgIGlmIChkb3VibGVfaGVpZ2h0KQorCXphcF9yZWRyYXdfYmxvY2sucl9mbGFncyA9IDEgPDwgMTsKKyAgICBlbHNlCisJemFwX3JlZHJhd19ibG9jay5yX2ZsYWdzID0gMDsKKworICAgIC8qIFVwZGF0ZSB0aGUgY29sb3VyIG1hc2tzIChpZiBuZWVkZWQpICovCisgICAgaWYgKHphcF9yZWRyYXdfdXBkYXRlX2NvbG91cnMpCisgICAgeworCXN3aShaYXBSZWRyYXdfQ3JlYXRlUGFsZXR0ZSwgMiwKKwkJJnphcF9yZWRyYXdfYmxvY2ssCisJCXphcF9yZWRyYXdfY29sb3VycywKKwkJemFwX3JlZHJhd19ibG9jay5yX3BhbGV0dGUsIDIpOworCXphcF9yZWRyYXdfdXBkYXRlX2NvbG91cnMgPSBGQUxTRTsKKyAgICB9CisKKyAgICAvKiBUYXJnZXQgcmVjdGFuZ2xlIGluIFphcFJlZHJhdyByZWN0YW5nbGUgY29vcmRpbmF0ZXMgKHBpeGVscywgWS1taW4vbWF4IHJldmVyc2VkICEhISkgKi8KKyAgICB6YXBfcmVkcmF3X2Jsb2NrLnJfbWlueCA9IHggPj4gb3NfeHNoaWZ0OwkJCQkJLyogaW5jbHVzaXZlICovCisgICAgemFwX3JlZHJhd19ibG9jay5yX21pbnkgPSB6YXBfcmVkcmF3X2Jsb2NrLnJfeXNpemUgLSAoeSA+PiBvc195c2hpZnQpOwkvKiBpbmNsdXNpdmUgKi8KKyAgICB6YXBfcmVkcmF3X2Jsb2NrLnJfbWF4eCA9ICh4ICsgbGVuZ3RoICogZ3VpLmNoYXJfd2lkdGgpID4+IG9zX3hzaGlmdDsJLyogZXhjbHVzaXZlICovCisgICAgemFwX3JlZHJhd19ibG9jay5yX21heHkgPSB6YXBfcmVkcmF3X2Jsb2NrLnJfeXNpemUgLSAoKHkgLSBndWkuY2hhcl9oZWlnaHQpID4+IG9zX3lzaGlmdCk7CisJCQkJCQkJCQkJLyogZXhjbHVzaXZlICovCisKKyAgICAvKiBDbGlwIHJlY3RhbmdsZSBpbiBaYXBSZWRyYXcgcmVjdGFuZ2xlIGNvb3JkaW5hdGVzIChwaXhlbHMsIFktbWluL21heCByZXZlcnNlZCAhISEpICovCisgICAgY2xpcF9taW54ID0gY2xpcFswXSA+PiBvc194c2hpZnQ7CQkJCQkvKiBpbmNsdXNpdmUgKi8KKyAgICBjbGlwX21pbnkgPSB6YXBfcmVkcmF3X2Jsb2NrLnJfeXNpemUgLSAoY2xpcFszXSA+PiBvc195c2hpZnQpOwkvKiBpbmNsdXNpdmUgKi8KKyAgICBjbGlwX21heHggPSBjbGlwWzJdID4+IG9zX3hzaGlmdDsJCQkJCS8qIGV4Y2x1c2l2ZSAqLworICAgIGNsaXBfbWF4eSA9IHphcF9yZWRyYXdfYmxvY2sucl95c2l6ZSAtIChjbGlwWzFdID4+IG9zX3lzaGlmdCk7CS8qIGV4Y2x1c2l2ZSAqLworCisgICAgLyogQ2xpcCB0YXJnZXQgcmVjdGFuZ2xlIGFnYWluc3QgdGhlIGN1cnJlbnQgZ3JhcGhpY3Mgd2luZG93ICovCisgICAgaWYgKHphcF9yZWRyYXdfYmxvY2sucl9taW54IDwgY2xpcF9taW54KQorICAgIHsKKwl6YXBfcmVkcmF3X2Jsb2NrLnJfc2Nyb2xseCA9IGNsaXBfbWlueCAtIHphcF9yZWRyYXdfYmxvY2sucl9taW54OworCXphcF9yZWRyYXdfYmxvY2sucl9taW54ID0gY2xpcF9taW54OworICAgIH0KKyAgICBlbHNlCisJemFwX3JlZHJhd19ibG9jay5yX3Njcm9sbHggPSAwOworICAgIGlmICh6YXBfcmVkcmF3X2Jsb2NrLnJfbWlueSA8IGNsaXBfbWlueSkKKyAgICB7CisJemFwX3JlZHJhd19ibG9jay5yX3Njcm9sbHkgPSBjbGlwX21pbnkgLSB6YXBfcmVkcmF3X2Jsb2NrLnJfbWlueTsKKwl6YXBfcmVkcmF3X2Jsb2NrLnJfbWlueSA9IGNsaXBfbWlueTsKKyAgICB9CisgICAgZWxzZQorCXphcF9yZWRyYXdfYmxvY2sucl9zY3JvbGx5ID0gMDsKKyAgICBpZiAoemFwX3JlZHJhd19ibG9jay5yX21heHggPiBjbGlwX21heHgpCisJemFwX3JlZHJhd19ibG9jay5yX21heHggPSBjbGlwX21heHg7CisgICAgaWYgKHphcF9yZWRyYXdfYmxvY2sucl9tYXh5ID4gY2xpcF9tYXh5KQorCXphcF9yZWRyYXdfYmxvY2sucl9tYXh5ID0gY2xpcF9tYXh5OworCisgICAgLyogRmlsbCBpbiB0aGUgY2hhcmFjdGVyIGRhdGEgc3RydWN0dXJlICovCisgICAgaWYgKGxlbmd0aCA+IChzaXplb2YocmVkcmF3X2RhdGEpIC0gMiAqIDQgLSAyKSkKKwlsZW5ndGggPSBzaXplb2YocmVkcmF3X2RhdGEpIC0gMiAqIDQgLSAyOworICAgICgoaW50KikgcmVkcmF3X2RhdGEpWzBdID0gMiAqIDQ7CisgICAgKChpbnQqKSByZWRyYXdfZGF0YSlbMV0gPSAwOworICAgIHN0cm5jcHkocmVkcmF3X2RhdGEgKyAyICogNCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJlZHJhd19kYXRhWzIgKiA0ICsgbGVuZ3RoICsgMF0gPSAnXDAnOworICAgIHJlZHJhd19kYXRhWzIgKiA0ICsgbGVuZ3RoICsgMV0gPSAnXHgyJzsKKyAgICB6YXBfcmVkcmF3X2Jsb2NrLnJfZGF0YSA9IChpbnQpIHJlZHJhd19kYXRhOworCisgICAgLyogUGVyZm9ybSB0aGUgZHJhdyAqLworICAgIHN3aShaYXBSZWRyYXdfUmVkcmF3QXJlYSwgMCwgJnphcF9yZWRyYXdfYmxvY2spOworCisgICAgcmV0dXJuIGZsYWdzOworfQorCisvKgorICogT2theSB0aGF0IHdhcyBpdCBmcm9tIG1lLCBiYWNrIHRvIFRob21hcyAuLi4KKyAqLworCisvKgorICogUGFyc2UgdGhlIEdVSSByZWxhdGVkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuICBBbnkgYXJndW1lbnRzIHVzZWQgYXJlCisgKiBkZWxldGVkIGZyb20gYXJndiwgYW5kICphcmdjIGlzIGRlY3JlbWVudGVkIGFjY29yZGluZ2x5LiAgVGhpcyBpcyBjYWxsZWQKKyAqIHdoZW4gdmltIGlzIHN0YXJ0ZWQsIHdoZXRoZXIgb3Igbm90IHRoZSBHVUkgaGFzIGJlZW4gc3RhcnRlZC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfcHJlcGFyZShpbnQgKmFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludAkgICAgYXJnID0gMTsKKworICAgIHdoaWxlIChhcmcgPCAqYXJnYyAtIDEpCisgICAgeworCWlmIChzdHJjbXAoYXJndlthcmddLCAiLS1yb3dzIikgPT0gMCB8fCBzdHJjbXAoYXJndlthcmddLCAiLS1jb2x1bW5zIikgPT0gMCkKKwl7CisJICAgIGludAkgICAgdmFsdWU7CisKKwkgICAgdmFsdWUgPSBhdG9pKGFyZ3ZbYXJnICsgMV0pOworCisJICAgIGlmIChhcmd2W2FyZ11bMl0gPT0gJ3InKQorCQlkZWZhdWx0X3Jvd3MgPSB2YWx1ZTsKKwkgICAgZWxzZQorCQlkZWZhdWx0X2NvbHVtbnMgPSB2YWx1ZTsKKworCSAgICAvKiBEZWxldGUgYXJndW1lbnQgZnJvbSBhcmd2W10uIChob3BlIHRoaXMgaXMgcmVhZC93cml0ZSEpICovCisKKwkgICAgKmFyZ2MgLT0gMjsKKwkgICAgaWYgKCphcmdjID4gYXJnKQorCSAgICBtY2hfbWVtbW92ZSgmYXJndlthcmddLCAmYXJndlthcmcgKyAyXSwgKCphcmdjIC0gYXJnKQorCQkgICAgKiBzaXplb2YoY2hhciAqKSk7CisJfQorCWVsc2UKKwkgICAgYXJnKys7CisgICAgfQorfQorCisvKiBGYXRhbCBlcnJvciBvbiBpbml0aWFsaXNhdGlvbiAtIHJlcG9ydCBpdCBhbmQgZGllLiAqLworICAgIHZvaWQKK3JvX2RpZShlcnJvcikKKyAgICBjaGFyX3UgKmVycm9yOwkvKiBSSVNDIE9TIGVycm9yIGJsb2NrICovCit7CisgICAgc3dpKFdpbXBfUmVwb3J0RXJyb3IsIGVycm9yLCA1LCAiR1ZpbSIpOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworLyogRmluZCB0aGUgc2l6ZXMgb2YgdGhlIHdpbmRvdyB0b29sczoKKyAqCisgKiBDcmVhdGUgYSB0ZXN0IHdpbmRvdy4KKyAqIEZpbmQgaW5uZXIgYW5kIG91dGVyIHNpemVzLgorICogRmluZCB0aGUgZGlmZmVyZW5jZS4KKyAqIERlbGV0ZSB3aW5kb3cuCisgKgorICogV2hpbGUgd2UncmUgaGVyZSwgZmluZCB0aGUgZWlnZW4gdmFsdWVzIHRvby4KKyAqLworICAgIHZvaWQKK3JvX21lYXN1cmVfdG9vbHMoKQoreworICAgIGludCBibG9ja1sxMF07CisgICAgaW50IHZkdVtdID0geyA0LCA1LCAtMX07CisgICAgaW50IHRlc3Rfd2luZG93W10gPQorCXsKKwkgICAgLTEwMCwgLTEwMCwJCS8qIFZpc2libGUgYXJlYSA6IG1pbiBYLFkgKi8KKwkgICAgLTUwLCAtNTAsCQkvKgkJICBtYXggWCxZICovCisJICAgIDAsICAgMCwJCS8qIFNjcm9sbCBvZmZzZXRzICovCisJICAgIC0xLAkJCS8qIFdpbmRvdyBpbiBmcm9udCAqLworCSAgICAweGQwODAwMTUwLAkJLyogV2luZG93IGZsYWdzICovCisJICAgIDB4ZmYwNzAyMDcsCQkvKiBDb2xvdXJzICovCisJICAgIDB4MDAwYzAxMDMsCQkvKiBNb3JlIGNvbG91cnMgKi8KKwkgICAgMCwgLTB4NDAwMCwJCS8qIFdvcmthcmVhIGV4dGVudCAqLworCSAgICAweDQwMDAsIDAsCQkvKiBtYXggWCxZICovCisJICAgIDB4MDAwMDAwMDAsCQkvKiBObyB0aXRsZSAqLworCSAgICAwIDw8IDEyLAkJLyogTm8gd29ya2FyZWEgYnV0dG9uIHR5cGUgKi8KKwkgICAgMSwJCQkvKiBXaW1wIHNwcml0ZSBhcmVhICovCisJICAgIDB4MDAwMTAwMDEsCQkvKiBNaW5pbXVtIHdpZHRoLCBoZWlnaHQgKi8KKwkgICAgMCwgMCwgMCwJCS8qIFRpdGxlIGRhdGEgKG5vbmUpICovCisJICAgIDAJCQkvKiBObyBpY29ucyAqLworCX07CisgICAgaW50IGlubmVyX21heF94LCBpbm5lcl9taW5feTsKKworICAgIHN3aShXaW1wX0NyZWF0ZVdpbmRvdywgMCwgdGVzdF93aW5kb3cpOworCisgICAgYmxvY2tbMF0gPSByMDsKKyAgICAvKiBPcGVuIHRoZSB3aW5kb3cgKGFuZCByZWFkIHN0YXRlKS4KKyAgICAgKiBHZXRXaW5kb3dPdXRsaW5lIG5lZWRzIGl0IHRvbyBpZiB0aGUgd2ltcCBpc24ndCBuZXN0ZWQuCisgICAgICovCisgICAgc3dpKFdpbXBfT3BlbldpbmRvdywgMCwgYmxvY2spOworICAgIGlubmVyX21heF94ID0gYmxvY2tbM107CisgICAgaW5uZXJfbWluX3kgPSBibG9ja1syXTsKKworICAgIHN3aShXaW1wX0dldFdpbmRvd091dGxpbmUsIDAsIGJsb2NrKTsKKworICAgIGd1aS5zY3JvbGxiYXJfd2lkdGggPSBibG9ja1szXSAtIGlubmVyX21heF94OworICAgIGd1aS5zY3JvbGxiYXJfaGVpZ2h0ID0gaW5uZXJfbWluX3kgLSBibG9ja1syXTsKKworICAgIHN3aShXaW1wX0RlbGV0ZVdpbmRvdywgMCwgYmxvY2spOworCisgICAgLyogUmVhZCB0aGUgc2l6ZSBvZiBvbmUgcGl4ZWwuICovCisgICAgc3dpKE9TX1JlYWRWZHVWYXJpYWJsZXMsIHZkdSwgdmR1KTsKKyAgICB4X2VpZ2VuX2ZhY3RvciA9IHZkdVswXTsKKyAgICB5X2VpZ2VuX2ZhY3RvciA9IHZkdVsxXTsKK30KKworLyogTG9hZCBhIHRlbXBsYXRlIGZyb20gdGhlIGN1cnJlbnQgdGVtcGxhdGVzIGZpbGUuCisgKiBDcmVhdGUgdGhlIHdpbmRvdyBhbmQgcmV0dXJuIGl0cyBoYW5kbGUuCisgKi8KKyAgICBpbnQKK3JvX2xvYWRfdGVtcGxhdGUoc3RyX25hbWUsIHRpdGxlLCB0aXRsZV9zaXplKQorICAgIGNoYXJfdSAgKnN0cl9uYW1lOyAgICAgIC8qIElkZW50aWZpZXIgb2Ygd2luZG93IGluIGZpbGUgKG1heCAxMiBjaGFycykgICAqLworICAgIGNoYXJfdSAgKip0aXRsZTsJICAgIC8qIElmIG5vdCBOVUxMIHRoZW4gcmV0dXJuIHBvaW50ZXIgdG8gdGl0bGUgaGVyZSAqLworICAgIGludCAgICAgKnRpdGxlX3NpemU7ICAgIC8qIElmIG5vdCBOVUxMIHRoZW4gcmV0dXJuIHRoZSB0aXRsZSBsZW5ndGggaGVyZSAqLworeworICAgIGludCAgICAgKndpbmRvdzsKKyAgICBjaGFyICAgICpkYXRhOworICAgIGludCAgICAgbmFtZVs0XTsKKworICAgIHN0cmNweSggKGNoYXIgKikgbmFtZSwgc3RyX25hbWUpOworCisgICAgLyogRmluZCBob3cgYmlnIHdlIG11c3QgbWFrZSB0aGUgYnVmZmVycyAqLworCisgICAgaWYgKHhzd2koV2ltcF9Mb2FkVGVtcGxhdGUsIDAsIDAsIDAsIDAsIC0xLCBuYW1lLCAwKSAmIHZfZmxhZykKKwlyb19kaWUoIChjaGFyICopIHIwKTsKKworICAgIHdpbmRvdyA9IG1hbGxvYyhyMSk7CS8qIERvbid0IHByaW50IHRleHQgbWVzc2FnZXMgZnJvbSBhbGxvYygpICovCisgICAgZGF0YSA9IG1hbGxvYyhyMik7CisgICAgaWYgKHdpbmRvdyA9PSBOVUxMIHx8IGRhdGEgPT0gTlVMTCkKKwlyb19kaWUoIlwwXDBcMFwwT3V0IG9mIG1lbW9yeSAtIENhbid0IGxvYWQgdGVtcGxhdGVzIik7CisKKyAgICAvKiBMb2FkIHRoZSB0ZW1wbGF0ZSBpbnRvIHRoZSBidWZmZXJzICovCisKKyAgICBzd2koV2ltcF9Mb2FkVGVtcGxhdGUsIDAsCisJCQkJd2luZG93LAkJLyogVGVtcCBibG9jayAqLworCQkJCWRhdGEsCQkvKiBJY29uIGRhdGEgKi8KKwkJCQlkYXRhICsgcjIgKyAxLAkvKiBFbmQgb2YgaWNvbiBkYXRhICovCisJCQkJLTEsCQkvKiBObyBmb250cyAqLworCQkJCW5hbWUsIDApOwkvKiBGaXJzdCBtYXRjaCAqLworICAgIGlmIChyNiA9PSAwKQorCXJvX2RpZSgiXDBcMFwwXDBDYW4ndCBmaW5kIHdpbmRvdyBpbiBUZW1wbGF0ZXMgZmlsZSIpOworCisgICAgLyogQ3JlYXRlIHRoZSB3aW5kb3cgKi8KKworICAgIGlmICh4c3dpKFdpbXBfQ3JlYXRlV2luZG93LCAwLCB3aW5kb3cpICYgdl9mbGFnKQorCXJvX2RpZSggKGNoYXIgKikgcjApOworCisgICAgaWYgKHRpdGxlKQorCSp0aXRsZSA9IChjaGFyX3UgKikgd2luZG93WzE4XTsKKyAgICBpZiAodGl0bGVfc2l6ZSkKKwkqdGl0bGVfc2l6ZSA9IHdpbmRvd1syMF07CisKKyAgICBmcmVlKHdpbmRvdyk7CS8qIEZyZWUgdGVtcCBibG9jayAqLworICAgIHJldHVybiByMDsJCS8qIFJldHVybiB0aGUgd2luZG93IGhhbmRsZSAqLworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIEdVSSBjYW4gYmUgc3RhcnRlZC4gIENhbGxlZCBiZWZvcmUgZ3ZpbXJjIGlzIHNvdXJjZWQuCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIGludAorZ3VpX21jaF9pbml0X2NoZWNrKCkKK3sKKyAgICByZXR1cm4gT0s7CQkvKiBUT0RPOiBHVUkgY2FuIGFsd2F5cyBiZSBzdGFydGVkPyAqLworfQorCisvKgorICogSW5pdGlhbGlzZSB0aGUgUklTQyBPUyBHVUkuCisgKiBDcmVhdGUgYWxsIHRoZSB3aW5kb3dzLgorICogUmV0dXJucyBPSyBmb3Igc3VjY2VzcywgRkFJTCB3aGVuIHRoZSBHVUkgY2FuJ3QgYmUgc3RhcnRlZC4KKyAqLworICAgIGludAorZ3VpX21jaF9pbml0KCkKK3sKKyAgICBpbnQgICAgIG1lc3NhZ2VzW10gPSB7CisJICAgIDEsIDIsIDMsIDQsCS8qIERhdGFTYXZlLCBEYXRhU2F2ZUFjaywgRGF0YUxvYWQsIERhdGFMb2FkQWNrICovCisJICAgIDgsCQkvKiBQcmVRdWl0ICovCisJICAgIDB4ZiwJLyogQ2xhaW1FbnRpdHkgKGZvciBjbGlwYm9hcmQpICovCisJICAgIDB4MTAsCS8qIERhdGFSZXF1ZXN0IChmb3IgY2xpcGJvYXJkKSAqLworCSAgICAweDQwMGMxLAkvKiBNb2RlIGNoYW5nZSAqLworCSAgICAweDQwMGMzLAkvKiBUYXNrQ2xvc2VEb3duICovCisJICAgIDB4NDAwYzksCS8qIE1lbnVzRGVsZXRlZCAqLworCSAgICAweDgwOGMxLAkvKiBUV19PdXRwdXQgKi8KKwkgICAgMHg4MDhjMiwgICAgLyogVFdfRWdvICovCisJICAgIDB4ODA4YzMsCS8qIFRXX01vcmlvICovCisJICAgIDB4ODA4YzQsCS8qIFRXX01vcml0ZSAqLworCSAgICAwfTsJCS8qIEVuZC1vZi1saXN0LiAqLworCisKKyAgICAvKiBUaGVyZSBtYXkgaGF2ZSBiZWVuIHNvbWUgZXJyb3JzIHJlcG9ydGVkIGluIHRoZQorICAgICAqIGNvbW1hbmQgd2luZG93IGJlZm9yZSB3ZSBnZXQgaGVyZS4gV2FpdCBpZiBzby4KKyAgICAgKi8KKyAgICBzd2koV2ltcF9SZWFkU3lzSW5mbywgMyk7CisgICAgaWYgKHIwID09IDApCisJc3dpKFdpbXBfQ29tbWFuZFdpbmRvdywgMCk7CS8qIFdpbmRvdyBvcGVuZWQgLSBjbG9zZSB3aXRoIHByb21wdCAqLworCisgICAgaWYgKHhzd2koV2ltcF9Jbml0aWFsaXNlLCAzMTAsIDB4NGI1MzQxNTQsICJHVmltIiwgbWVzc2FnZXMpICYgdl9mbGFnKQorCXJldHVybiBGQUlMOworICAgIG5lc3RlZF93aW1wID0gcjAgPj0gMzk3OworICAgIHRhc2tfaGFuZGxlID0gcjE7CisKKyAgICAvKiBMb2FkIHRoZSB0ZW1wbGF0ZXMuICovCisKKyAgICBpZiAoeHN3aShXaW1wX09wZW5UZW1wbGF0ZSwgMCwgIlZpbTpUZW1wbGF0ZXMiKSAmIHZfZmxhZykKKwlyb19kaWUoIChjaGFyICopIHIwKTsKKworICAgIGd1aS53aW5kb3dfaGFuZGxlID0gcm9fbG9hZF90ZW1wbGF0ZSgiZWRpdG9yIiwKKwkgICAgJmd1aS53aW5kb3dfdGl0bGUsCisJICAgICZndWkud2luZG93X3RpdGxlX3NpemUpOworCisgICAgc2F2ZV93aW5kb3cgPSByb19sb2FkX3RlbXBsYXRlKCJzYXZlIiwgTlVMTCwgTlVMTCk7CisKKyAgICBzd2koV2ltcF9DbG9zZVRlbXBsYXRlKTsKKworICAgIC8qIFNldCBkZWZhdWx0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3Vycy4gKi8KKworICAgIGd1aS5ub3JtX3BpeGVsID0gZ3VpLmRlZl9ub3JtX3BpeGVsOworICAgIGd1aS5iYWNrX3BpeGVsID0gZ3VpLmRlZl9iYWNrX3BpeGVsOworCisgICAgLyogR2V0IHRoZSBjb2xvdXJzIGZyb20gdGhlICJOb3JtYWwiIGFuZCAiTWVudSIgZ3JvdXAgKHNldCBpbiBzeW50YXguYyBvcgorICAgICAqIGluIGEgdmltcmMgZmlsZSkgKi8KKworICAgIHNldF9ub3JtYWxfY29sb3JzKCk7CisKKyAgICAvKgorICAgICAqIENoZWNrIHRoYXQgbm9uZSBvZiB0aGUgY29sb3JzIGFyZSB0aGUgc2FtZSBhcyB0aGUgYmFja2dyb3VuZCBjb2xvcgorICAgICAqLworCisgICAgZ3VpX2NoZWNrX2NvbG9ycygpOworCisgICAgLyogR2V0IHRoZSBjb2xvdXJzIGZvciB0aGUgaGlnaGxpZ2h0IGdyb3VwcyAoZ3VpX2NoZWNrX2NvbG9ycygpIG1pZ2h0IGhhdmUKKyAgICAgKiBjaGFuZ2VkIHRoZW0pICovCisKKyAgICBoaWdobGlnaHRfZ3VpX3N0YXJ0ZWQoKTsJCS8qIHJlLWluaXQgY29sb3VycyBhbmQgZm9udHMgKi8KKworICAgIC8qIFNldCBnZW9tZXRyeSBiYXNlZCBvbiB2YWx1ZXMgcmVhZCBvbiBpbml0aWFsaXNhdGlvbi4gKi8KKworICAgIGd1aS5udW1fY29scyA9IENvbHVtbnMgPSBkZWZhdWx0X2NvbHVtbnM7CisgICAgZ3VpLm51bV9yb3dzID0gUm93cyAgICA9IGRlZmF1bHRfcm93czsKKworICAgIC8qIEdldCBzb21lIGluZm9ybWF0aW9uIGFib3V0IG91ciBlbnZpcm9ubWVudC4gKi8KKworICAgIHJvX21lYXN1cmVfdG9vbHMoKTsKKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIHRoZSBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3VyIGhhcyBiZWVuIGNoYW5nZWQuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX25ld19jb2xvcnMoKQoreworfQorCisvKgorICogT3BlbiB0aGUgR1VJIHdpbmRvdyB3aGljaCB3YXMgY3JlYXRlZCBieSBhIGNhbGwgdG8gZ3VpX21jaF9pbml0KCkuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfb3Blbih2b2lkKQoreworICAgIGludCBibG9ja1sxMF07CisKKyAgICBibG9ja1swXSA9IGd1aS53aW5kb3dfaGFuZGxlOworICAgIHN3aShXaW1wX0dldFdpbmRvd1N0YXRlLCAwLCBibG9jayk7CisgICAgYmxvY2tbN10gPSAtMTsJCSAgICAvKiBPcGVuIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrICovCisgICAgc3dpKFdpbXBfT3BlbldpbmRvdywgMCwgYmxvY2spOworCisgICAgLyogR2l2ZSB0aGUgbmV3IHdpbmRvdyB0aGUgaW5wdXQgZm9jdXMgKi8KKyAgICBzd2koV2ltcF9TZXRDYXJldFBvc2l0aW9uLCBndWkud2luZG93X2hhbmRsZSwgLTEsIDAsIDAsIC0xLCAtMSk7CisKKyAgICBpZiAoZ3VpX3dpbl94ICE9IC0xICYmIGd1aV93aW5feSAhPSAtMSkKKwlndWlfbWNoX3NldF93aW5wb3MoZ3VpX3dpbl94LCBndWlfd2luX3kpOworCisgICAgcmV0dXJuIE9LOworfQorCisgICAgdm9pZAorZ3VpX21jaF9leGl0KGludCByYykKK3sKKyAgICBpbnQJICAgIGJsb2NrWzY0XTsKKworICAgIC8qIENsb3NlIHdpbmRvdy4gU3RvcHMgdXMgZnJvbSBnZXR0aW5nIHRyb3VibGVzb21lIGV2ZW50cworICAgICAqIGlmIHdlIHRha2UgYSB3aGlsZSB0byBkaWUuCisgICAgICovCisgICAgYmxvY2tbMF0gPSBndWkud2luZG93X2hhbmRsZTsKKyAgICBzd2koV2ltcF9DbG9zZVdpbmRvdywgMCwgYmxvY2spOworCisgICAgaWYgKGNoaWxkX2hhbmRsZSkKKyAgICB7CisJLyogV2Ugc3RpbGwgaGF2ZSBhIHN1Yi10YXNrIHJ1bm5pbmcgLSBraWxsIGl0ICovCisJYmxvY2tbMF0gPSAyMDsKKwlibG9ja1szXSA9IDA7CisJYmxvY2tbNF0gPSAwOwkgICAgLyogUXVpdCAqLworCWlmICgoeHN3aShXaW1wX1NlbmRNZXNzYWdlLCAxNywgYmxvY2ssIGNoaWxkX2hhbmRsZSkgJiB2X2ZsYWcpID09IDApCisJeworCSAgICAvKiBJZGxlIHVudGlsIGNoaWxkIGRpZXMuICovCisJICAgIHdoaWxlIChjaGlsZF9oYW5kbGUpCisJICAgIHsKKwkJcHJvY2Vzc19ldmVudCh3aW1wX3BvbGwoMSwgYmxvY2spLCBibG9jayk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgZXhpdChyYyk7Cit9CisKKy8qCisgKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHdpbmRvdy4KKyAqLworICAgIGludAorZ3VpX21jaF9nZXRfd2lucG9zKGludCAqeCwgaW50ICp5KQoreworICAgIC8qIFRPRE8gKi8KKyAgICByZXR1cm4gRkFJTDsKK30KKworLyoKKyAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93IHRvIHRoZSBnaXZlbgorICogY29vcmRpbmF0ZXMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF93aW5wb3MoaW50IHgsIGludCB5KQoreworICAgIC8qIFRPRE8gKi8KK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3NoZWxsc2l6ZSh3aWR0aCwgaGVpZ2h0LCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQsIGJhc2Vfd2lkdGgsIGJhc2VfaGVpZ2h0KQorICAgIGludCB3aWR0aDsJCS8qIEluIE9TIHVuaXRzICovCisgICAgaW50IGhlaWdodDsKKyAgICBpbnQgbWluX3dpZHRoOwkvKiBTbWFsbGVzdCBwZXJtaXNzYWJsZSB3aW5kb3cgc2l6ZSAoaWdub3JlZCkgKi8KKyAgICBpbnQgbWluX2hlaWdodDsKKyAgICBpbnQgYmFzZV93aWR0aDsJLyogU3BhY2UgZm9yIHNjcm9sbCBiYXJzLCBldGMgKi8KKyAgICBpbnQgYmFzZV9oZWlnaHQ7Cit7CisgICAgaW50IHNfd2lkdGgsIHNfaGVpZ2h0OworICAgIGludCBibG9ja1tdID0geworCWd1aS53aW5kb3dfaGFuZGxlLAorCTAsCisJLWhlaWdodCArIDEsCisJd2lkdGgsCisJMX07CisKKyAgICBndWlfbWNoX2dldF9zY3JlZW5fZGltZW5zaW9ucygmc193aWR0aCwgJnNfaGVpZ2h0KTsKKyAgICBzX3dpZHRoIC09IGJhc2Vfd2lkdGg7CisgICAgc19oZWlnaHQgLT0gYmFzZV9oZWlnaHQ7CQkgICAgLyogVW5kZXJlc3RpbWF0ZSAtIGlnbm9yZXMgdGl0bGViYXIgKi8KKworICAgIHN3aShXaW1wX0dldFdpbmRvd1N0YXRlLCAwLCBibG9jayk7CisgICAgYmxvY2tbM10gID0gYmxvY2tbMV0gKyB3aWR0aDsKKyAgICBibG9ja1syXSAgPSBibG9ja1s0XSAtIGhlaWdodDsKKyAgICBpZiAoYmxvY2tbM10gPiBzX3dpZHRoKQorICAgIHsKKwlibG9ja1szXSA9IHNfd2lkdGg7CisJYmxvY2tbMV0gPSBibG9ja1szXSAtIHdpZHRoOworICAgIH0KKyAgICBpZiAoYmxvY2tbMl0gPCBndWkuc2Nyb2xsYmFyX2hlaWdodCkKKyAgICB7CisJYmxvY2tbMl0gPSBndWkuc2Nyb2xsYmFyX2hlaWdodDsKKwlibG9ja1s0XSA9IGJsb2NrWzJdICsgaGVpZ2h0OworICAgIH0KKyAgICBzd2koV2ltcF9PcGVuV2luZG93LCAwLCBibG9jayk7CisgICAgc3dpKFdpbXBfRm9yY2VSZWRyYXcsIGd1aS53aW5kb3dfaGFuZGxlLCAwLCAtaGVpZ2h0LCB3aWR0aCwgMCk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2dldF9zY3JlZW5fZGltZW5zaW9ucyhpbnQgKnNjcmVlbl93LCBpbnQgKnNjcmVlbl9oKQoreworICAgIGludCBibG9ja1tdID0gezQsIDUsIDExLCAxMiwgLTF9OworCisgICAgc3dpKE9TX1JlYWRWZHVWYXJpYWJsZXMsIGJsb2NrLCBibG9jayk7CisgICAgKnNjcmVlbl93ID0gKGJsb2NrWzJdICsgMSkgPDwgYmxvY2tbMF07CisgICAgKnNjcmVlbl9oID0gKGJsb2NrWzNdICsgMSkgPDwgYmxvY2tbMV07Cit9CisKKy8qIFRha2UgYSBmb250IG5hbWUgd2l0aCBvcHRpb25zIGFuZCByZXR1cm4gYSBmb250IGhhbmRsZSwgb3IKKyAqIHplcm8gZm9yIGZhaWx1cmUuCisgKiBSZXBsYWNlIGV4dGVuc2lvbiB3aXRoICdCb2xkJyBvciAnSXRhbGljJyBkZXBlbmRpbmcgb24gbW9kaWZpZXJzLgorICovCisgICAgaW50Cityb19nZXRfZm9udChmdWxsbmFtZSwgd2VpZ2h0KQorICAgIGNoYXJfdQkqZnVsbG5hbWU7CisgICAgaW50CQl3ZWlnaHQ7CQkvKiBJbml0aWFsIHdlaWdodHM6CisJCQkJICogQklUCSAgICBNRUFOSU5HCisJCQkJICogMAkgICAgYm9sZAorCQkJCSAqIDEJICAgIGl0YWxpYworCQkJCSAqLworeworICAgIGNoYXJfdQkqYXJnOworICAgIGNoYXJfdQlmb250WzQxXTsKKyAgICBpbnQJCXdpZHRoID0gLTE7CisgICAgaW50CQloZWlnaHQgPSAtMTsKKyAgICBpbnQJCW5hbWVfbGVuOworICAgIGludAkJaTsKKyAgICBjaGFyX3UJYzsKKworICAgIGZvciAoaSA9IDA7IGkgPCAzOTspCisgICAgeworCWMgPSBmdWxsbmFtZVtpXTsKKwlpZiAoYyA9PSAnOicgfHwgYyA9PSBOVUwgfHwgYyA9PSAnLicpCisJICAgIGJyZWFrOworCWZvbnRbaSsrXSA9IGM7CisgICAgfQorCisgICAgLyogZmluZCB0aGUgZmlyc3QgbW9kaWZpZXIsIE5VTEwgaWYgbm9uZSAqLworICAgIGFyZyA9IHN0cmNocihmdWxsbmFtZSArIGksICc6Jyk7CisKKyAgICB3aGlsZSAoYXJnKQorICAgIHsKKwlzd2l0Y2ggKCorK2FyZykKKwl7CisJICAgIGNhc2UgJ2gnOgorCQloZWlnaHQgPSBzdHJ0b2woYXJnICsgMSwgKGNoYXIgKiopICZhcmcsIDEwKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3cnOgorCQl3aWR0aCA9IHN0cnRvbChhcmcgKyAxLCAoY2hhciAqKikgJmFyZywgMTApOworCQlicmVhazsKKwkgICAgY2FzZSAnYic6CisJCXdlaWdodCB8PSAxOworCQlicmVhazsKKwkgICAgY2FzZSAnaSc6CisJCXdlaWdodCB8PSAyOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCWFyZyA9IHN0cmNocihhcmcsICc6Jyk7CisgICAgfQorCisgICAgaWYgKCh3ZWlnaHQgJiAxKSAmJiBpIDwgMzUpCisgICAgeworCS8qIEJvbGQgZ29lcyBpbnN0ZWFkIG9mIGdpdmVuIHN1ZmZpeCAqLworCXN0cm5jcHkoZm9udCArIGksICIuQm9sZCIsIDUpOworCWkgKz0gNTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBDb3B5IHJlc3Qgb2YgbmFtZSB1bmxlc3Mgd2UgYXJlIHVzaW5nIEJvbGQgKi8KKwl3aGlsZSAoaSA8IDM5KQorCXsKKwkgICAgYyA9IGZ1bGxuYW1lW2ldOworCSAgICBpZiAoYyA9PSAnOicgfHwgYyA9PSBOVUwpCisJCWJyZWFrOworCSAgICBmb250W2krK10gPSBjOworCX0KKyAgICB9CisgICAgaWYgKCh3ZWlnaHQgJiAyKSAmJiBpIDwgMzIpCisgICAgeworCXN0cm5jcHkoZm9udCArIGksICIuT2JsaXF1ZSIsIDgpOworCWkgKz0gODsKKyAgICB9CisKKyAgICBmb250W2ldID0gMDsKKworICAgIGlmIChoZWlnaHQgPCAxICYmIHdpZHRoIDwgMSkKKwloZWlnaHQgPSB3aWR0aCA9IDEwOwkvKiBEZWZhdWx0IHRvIDEwcHQgKi8KKyAgICBlbHNlIGlmIChoZWlnaHQgPCAxKQorCWhlaWdodCA9IHdpZHRoOworICAgIGVsc2UgaWYgKHdpZHRoIDwgMSkKKwl3aWR0aCA9IGhlaWdodDsKKworICAgIGlmICh4c3dpKEZvbnRfRmluZEZvbnQsIDAsIGZvbnQsIHdpZHRoIDw8IDQsIGhlaWdodCA8PCA0LCAwLCAwKSAmIHZfZmxhZykKKwlyZXR1cm4gTk9GT05UOwkJLyogQ2FuJ3QgZmluZCBmb250ICovCisKKyAgICByZXR1cm4gcjA7Cit9CisKKy8qIExvYWQgYSBmaWxlIGludG8gYWxsb2NhdGVkIG1lbW9yeSBhbmQgY2hlY2sgaXQgaXMgdmFsaWQuCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYmxvY2sgb24gc3VjY2Vzcy4KKyAqLworICAgIGNoYXIgICAgKgoremFwX2xvYWRfZmlsZShuYW1lLCBzdHlsZSkKKyAgICBjaGFyX3UgICpuYW1lOwkgICAgLyogTmFtZSBvZiBkaXJlY3RvcnkgY29udGFpbmluZyBzdHlsZXMgKi8KKyAgICBjaGFyX3UgICpzdHlsZTsJICAgIC8qIE5hbWUgb2Ygc3R5bGUgd2l0aGluIGRpcmVjdG9yeSAqLworeworICAgIGNoYXJfdSAgZm5hbWVbMjU2XTsKKyAgICBjaGFyX3UgICpmaWxlOworCisgICAgaWYgKHN0cmxlbihuYW1lKSArIHN0cmxlbihzdHlsZSkgPiAyNTQpCisJcmV0dXJuIE5VTEw7CSAgICAvKiBOYW1lcyB0b28gbG9uZyAqLworCisgICAgc3ByaW50ZihmbmFtZSwgIiVzLiVzIiwgbmFtZSwgc3R5bGUpOworCisgICAgLyogTG9hZCB0aGUgbmFtZWQgZm9udCBpbiAxYnBwIGZvcm1hdC4gKi8KKyAgICBpZiAoeHN3aShPU19GaWxlLCAxMywgZm5hbWUsIDAsIDAsICJWaW1Gb250czoiKSAmIHZfZmxhZyB8fCByMCAhPSAxKQorCXJldHVybiBOVUxMOwkgICAgLyogRXJyb3IgcmVhZGluZyBmaWxlIGluZm8sIG9yIG5vdCBhIGZpbGUgKi8KKworICAgIC8qIEFsbG9jYXRlIGVub3VnaCBtZW1vcnkgdG8gbG9hZCB0aGUgd2hvbGUgZmlsZSAqLworICAgIGZpbGUgPSAoY2hhciAqKSBhbGxvYyhyNCk7CisgICAgaWYgKCFmaWxlKQorCXJldHVybiBOVUxMOwkvKiBPdXQgb2YgbWVtb3J5ICovCisKKyAgICBpZiAoeHN3aShPU19GaWxlLCAxMiwgZm5hbWUsIGZpbGUsIDAsICJWaW1Gb250czoiKSAmIHZfZmxhZykKKwlyZXR1cm4gTlVMTDsJLyogVW5hYmxlIHRvIGxvYWQgZmlsZSAqLworCisgICAgaWYgKHN0cm5jbXAoZmlsZSwgIlphcEZvbnRcMDE1IiwgOCkgPT0gMCkKKwlyZXR1cm4gZmlsZTsJLyogTG9hZGVkIE9LISAqLworCisgICAgZnJlZShmaWxlKTsKKyAgICByZXR1cm4gTlVMTDsJLyogTm90IGEgdmFsaWQgZm9udCBmaWxlICovCit9CisKKy8qIExvYWQgYW5kIGNvbnZlcnQgdGhlIG5hbWVkIGZvbnQuCisgKiBJZiBuYW1lIGlzIE5VTEwgb3IgYSBudWxsIHN0cmluZyB0aGVuIGNvbnZlcnQgdGhlIHN5c3RlbSBmb250LgorICogUmV0dXJuIE9LIG9uIHN1Y2Nlc3M7IEZBSUwgYW5kIHdlIHJldmVydCB0byB1c2luZyB0aGUgVkRVIGRyaXZlcnMuCisgKgorICogJ25hbWUnIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5LgorICogVHJpZXMgdG8gbG9hZCAnbmFtZS4wJywgJ25hbWUuQicsICduYW1lLkknIGFuZCAnbmFtZS5JQicuCisgKi8KKyAgICBpbnQKK3phcF9sb2FkX2ZvbnQobmFtZSkKKyAgICBjaGFyX3UgICpuYW1lOworeworICAgIGludAkgICAgaTsKKworICAgIC8qIEZyZWUgdGhlIGV4aXN0aW5nIGZvbnQgZmlsZXMsIGlmIGFueSAqLworICAgIGZvciAoaSA9IDA7IGkgPCBaQVBfU1RZTEVTOyBpKyspCisgICAgeworCXZpbV9mcmVlKHphcF9maWxlW2ldKTsKKwl6YXBfZmlsZVtpXSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG5hbWUgJiYgKm5hbWUgPT0gJyEnKQorICAgIHsKKwluYW1lKys7CisJZG91YmxlX2hlaWdodCA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKwlkb3VibGVfaGVpZ2h0ID0gRkFMU0U7CisKKyAgICBpZiAobmFtZSAmJiAqbmFtZSkKKyAgICB7CisJemFwX2ZpbGVbWkFQX05PUk1BTF0JPSB6YXBfbG9hZF9maWxlKG5hbWUsICIwIik7CisJaWYgKCF6YXBfZmlsZVtaQVBfTk9STUFMXSkKKwkgICAgcmV0dXJuIEZBSUw7CS8qIENhbid0IGxvYWQgdGhlICdub3JtYWwnIHN0eWxlIC0gZXJyb3IgKi8KKworCXphcF9maWxlW1pBUF9CT0xEXQk9IHphcF9sb2FkX2ZpbGUobmFtZSwgIkIiKTsKKwl6YXBfZmlsZVtaQVBfSVRBTElDXQk9IHphcF9sb2FkX2ZpbGUobmFtZSwgIkkiKTsKKwl6YXBfZmlsZVtaQVBfQklUQUxJQ10JPSB6YXBfbG9hZF9maWxlKG5hbWUsICJJQiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWludAkqaGVhZGVyOworCWNoYXIJd29ya2FyZWFbMTZdOworCWNoYXIJKm9sZF93YTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igc3lzdGVtIGZvbnQgKDggeCA4IHggMjU2IGJpdHMsIHBsdXMgaGVhZGVyKSAqLworCWhlYWRlciA9IChpbnQgKikgYWxsb2MoMHgyMCArIDggKiAyNTYpOworCWlmIChoZWFkZXIgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBSUw7CisJemFwX2ZpbGVbWkFQX05PUk1BTF0gPSAoY2hhciAqKSBoZWFkZXI7CisKKwkvKiBTdG9yZSBkZXRhaWxzIGFib3V0IHRoZSBzeXN0ZW0gZm9udCAqLworCWhlYWRlclsyXSA9IDg7CSAgICAvKiBXaWR0aCAqLworCWhlYWRlclszXSA9IDg7CSAgICAvKiBIZWlnaHQgKi8KKwloZWFkZXJbNF0gPSAwOwkgICAgLyogRmlyc3QgY2hhciAqLworCWhlYWRlcls1XSA9IDI1NTsgICAgLyogTGFzdCBjaGFyICovCisJaGVhZGVyWzZdID0gaGVhZGVyWzddID0gMDsgIC8qIFJlc2VydmVkICovCisKKwkvKiBHZXQgc3lzdGVtIGZvbnQgYml0bWFwICovCisJb2xkX3dhID0gemFwX3JlZHJhd19ibG9jay5yX3dvcmthcmVhOworCXphcF9yZWRyYXdfYmxvY2sucl93b3JrYXJlYSA9IHdvcmthcmVhOworCXN3aShaYXBSZWRyYXdfUmVhZFN5c3RlbUNoYXJzLCB6YXBfZmlsZVtaQVBfTk9STUFMXSArIDB4MjAsICZ6YXBfcmVkcmF3X2Jsb2NrKTsKKwl6YXBfcmVkcmF3X2Jsb2NrLnJfd29ya2FyZWEgPSBvbGRfd2E7CisgICAgfQorCisgICAgcmV0dXJuIHJvX3phcF9yZWRyYXdfaW5pdGlhbGlzZSgpOworfQorCisvKgorICogSW5pdGlhbGlzZSB2aW0gdG8gdXNlIHRoZSBmb250IHdpdGggdGhlIGdpdmVuIG5hbWUuCisgKiBSZXR1cm4gRkFJTCBpZiB0aGUgZm9udCBjb3VsZCBub3QgYmUgbG9hZGVkLCBPSyBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfaW5pdF9mb250KGNoYXJfdSAqZm9udF9uYW1lLCBpbnQgZm9udHNldCkKK3sKKyAgICBpbnQJICAgIG5ld19oYW5kbGUJPSAwOwkgICAgLyogVXNlIHRoZSBzeXN0ZW0gZm9udCBieSBkZWZhdWx0ICovCisKKyAgICBpZiAoZm9udF9uYW1lWzBdID09ICchJykKKyAgICB7CisJLyogU2VsZWN0IGEgWmFwUmVkcmF3IGZvbnQgKi8KKwlpZiAoemFwX2xvYWRfZm9udChmb250X25hbWUgKyAxKSkKKwkgICAgemFwX3JlZHJhdyA9IFRSVUU7CisJZWxzZQorCXsKKwkgICAgRU1TRzIoXygiRTYxMDogQ2FuJ3QgbG9hZCBaYXAgZm9udCAnJXMnIiksIGZvbnRfbmFtZSk7CisJICAgIGZvbnRfbmFtZSA9ICJTeXN0ZW0iOyAgIC8qIEVycm9yIC0gdXNlIHN5c3RlbSBmb250ICovCisJICAgIHphcF9yZWRyYXcgPSBGQUxTRTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJemFwX3JlZHJhdyA9IEZBTFNFOworCisJaWYgKGZvbnRfbmFtZSkKKwl7CisJICAgIC8qIEV4dHJhY3QgYW55IGV4dHJhIGRldGFpbHMgYWJvdXQgdGhlIGZvbnQgKi8KKwkgICAgbmV3X2hhbmRsZSA9IHJvX2dldF9mb250KGZvbnRfbmFtZSwgMCk7CisJICAgIGlmICghbmV3X2hhbmRsZSkKKwkJcmV0dXJuIEZBSUw7CisJfQorCWVsc2UKKwkgICAgZm9udF9uYW1lID0gIlN5c3RlbSI7CisgICAgfQorCisgICAgLyogRnJlZSB0aGUgcHJldmlvdXMgZm9udCwgaWYgYW55ICovCisgICAgZ3VpX21jaF9mcmVlX2ZvbnQoZ3VpLm5vcm1fZm9udCk7CisgICAgZ3VpLm5vcm1fZm9udCA9IG5ld19oYW5kbGU7CisgICAgZ3VpLmNoYXJfYXNjZW50ID0gMDsKKworICAgIGlmIChuZXdfaGFuZGxlKQorICAgIHsKKwkvKiBSZWFkIGRldGFpbHMgYWJvdXQgdGhlIGNob3NlbiBmb250ICovCisJc3dpKEZvbnRfUmVhZEluZm8sIG5ld19oYW5kbGUpOworCisJZ3VpLmNoYXJfd2lkdGgJPSByMyAtIHIxOworCWd1aS5jaGFyX2hlaWdodCA9IHI0IC0gcjI7CisKKwlmb250X3hfb2Zmc2V0ID0gLXIxOwkvKiBXaGVyZSB0byBwb3NpdGlvbiBlYWNoIGNoYXIgaW4gaXRzIGJveCAqLworCWZvbnRfeV9vZmZzZXQgPSAtcjQ7CisKKwkvKiBUcnkgdG8gbG9hZCBvdGhlciBmb250cyBmb3IgYm9sZCwgaXRhbGljLCBhbmQgYm9sZC1pdGFsaWMgKi8KKwlndWlfbWNoX2ZyZWVfZm9udChndWkuYm9sZF9mb250KTsKKwlndWkuYm9sZF9mb250ID0gcm9fZ2V0X2ZvbnQoZm9udF9uYW1lLCAxKTsKKwlndWlfbWNoX2ZyZWVfZm9udChndWkuaXRhbF9mb250KTsKKwlndWkuaXRhbF9mb250ID0gcm9fZ2V0X2ZvbnQoZm9udF9uYW1lLCAyKTsKKwlndWlfbWNoX2ZyZWVfZm9udChndWkuYm9sZGl0YWxfZm9udCk7CisJZ3VpLmJvbGRpdGFsX2ZvbnQgPSByb19nZXRfZm9udChmb250X25hbWUsIDMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIFVzZSB0aGUgc3lzdGVtIGZvbnQgb3IgWmFwUmVkcmF3LiAqLworCWlmICh6YXBfcmVkcmF3KQorCXsKKwkgICAgZ3VpLmNoYXJfd2lkdGgJPSB6YXBfcmVkcmF3X2Jsb2NrLnJfY2hhcncgPDwgemFwX3JlZHJhd19ibG9jay5yX21hZ3g7CisJICAgIGd1aS5jaGFyX2hlaWdodAk9IHphcF9yZWRyYXdfYmxvY2sucl9jaGFyaCA8PCB6YXBfcmVkcmF3X2Jsb2NrLnJfbWFneTsKKwkgICAgaWYgKGRvdWJsZV9oZWlnaHQpCisJCWd1aS5jaGFyX2hlaWdodCA8PD0gMTsKKwl9CisJZWxzZQorCXsKKwkgICAgZ3VpLmNoYXJfd2lkdGgJPSAxNjsKKwkgICAgZ3VpLmNoYXJfaGVpZ2h0CT0gMzI7CisJfQorCisJZ3VpX21jaF9mcmVlX2ZvbnQoZ3VpLmJvbGRfZm9udCk7CisJZ3VpLmJvbGRfZm9udCA9IDA7CisJZ3VpX21jaF9mcmVlX2ZvbnQoZ3VpLml0YWxfZm9udCk7CisJZ3VpLml0YWxfZm9udCA9IDA7CisJZ3VpX21jaF9mcmVlX2ZvbnQoZ3VpLmJvbGRpdGFsX2ZvbnQpOworCWd1aS5ib2xkaXRhbF9mb250ID0gMDsKKyAgICB9CisgICAgaGxfc2V0X2ZvbnRfbmFtZShmb250X25hbWUpOworCisgICAgbXVzdF9yZWRyYXcgPSBDTEVBUjsKKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICBpbnQKK2d1aV9tY2hfYWRqdXN0X2NoYXJzaXplKCkKK3sKKyAgICByZXR1cm4gRkFJTDsKK30KKworLyoKKyAqIEdldCBhIGZvbnQgc3RydWN0dXJlIGZvciBoaWdobGlnaHRpbmcuCisgKi8KKyAgICBHdWlGb250CitndWlfbWNoX2dldF9mb250KG5hbWUsIGdpdmVFcnJvcklmTWlzc2luZykKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQlnaXZlRXJyb3JJZk1pc3Npbmc7Cit7CisgICAgaW50CQloYW5kbGU7CisKKyAgICBpZiAoIW5hbWUpCisJcmV0dXJuIE5PRk9OVDsJCS8qIFN5c3RlbSBmb250IGlmIG5vIG5hbWUgKi8KKworICAgIGhhbmRsZSA9IHJvX2dldF9mb250KG5hbWUsIDApOworICAgIGlmICghaGFuZGxlKQorICAgIHsKKwlpZiAoZ2l2ZUVycm9ySWZNaXNzaW5nKQorCSAgICBFTVNHMihfKCJFNjExOiBDYW4ndCB1c2UgZm9udCAlcyIpLCBuYW1lKTsKKwlyZXR1cm4gTk9GT05UOworICAgIH0KKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8qCisgKiBTZXQgdGhlIGN1cnJlbnQgdGV4dCBmb250LgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZm9udChHdWlGb250IGZvbnQpCit7CisgICAgcm9fY3VycmVudF9mb250ID0gZm9udDsKKworICAgIGlmIChmb250KQorICAgIHsKKwkvKiBOb3QgdGhlIHN5c3RlbSBmb250IG9yIFphcFJlZHJhdyBmb250IC0gc2VsZWN0IGl0ICovCisJc3dpKEZvbnRfU2V0Rm9udCwgZm9udCk7CisgICAgfQorfQorCisjaWYgMCAvKiBub3QgdXNlZCAqLworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSB0d28gZm9udHMgZ2l2ZW4gYXJlIGVxdWl2YWxlbnQuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfc2FtZV9mb250KEd1aUZvbnQgZjEsIEd1aUZvbnQgZjIpCit7CisgICAgcmV0dXJuIGYxID09IGYyOworfQorI2VuZGlmCisKKy8qCisgKiBJZiBhIGZvbnQgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQsIGZyZWUgaXRzIHN0cnVjdHVyZS4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZnJlZV9mb250KEd1aUZvbnQgZm9udCkKK3sKKyAgICBpZiAoZm9udCkKKwlzd2koRm9udF9Mb3NlRm9udCwgZm9udCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIFBpeGVsIHZhbHVlIChjb2xvdXIpIGZvciB0aGUgZ2l2ZW4gY29sb3VyIG5hbWUuCisgKiBSZXR1cm4gSU5WQUxDT0xPUiBmb3IgZXJyb3IuCisgKiBOQjogSSd2ZSBjaGFuZ2VkIEdyZWVuIGZvciBub3csIHNpbmNlIGl0IGxvb2tlZCByZWFsbHkgc2ljaworICovCisgICAgZ3VpY29sb3JfVAorZ3VpX21jaF9nZXRfY29sb3IoY2hhcl91ICpuYW1lKQoreworICAgIGludAkJaTsKKyAgICBzdHJ1Y3QgY29sb3VyCisgICAgeworCWNoYXJfdQkJKm5hbWU7CisJZ3VpY29sb3JfVAl2YWx1ZTsKKyAgICB9IGNvbG91cnNbXSA9CisgICAgeworCXsgIlJlZCIsCQlncmdiKDI1NSwJMCwJMCkJfSwKKwl7ICJMaWdodFJlZCIsCQlncmdiKDI1NSwJMCwJMCkJfSwKKwl7ICJEYXJrUmVkIiwJCWdyZ2IoMTM5LAkwLAkwKQl9LAorCisJeyAiR3JlZW4iLAkJZ3JnYig1MCwJMjAwLAk1MCkJfSwKKwl7ICJMaWdodEdyZWVuIiwJCWdyZ2IoMTQ0LAkyMzgsCTE0NCkJfSwKKwl7ICJEYXJrR3JlZW4iLAkJZ3JnYigwLAkJMTAwLAkwKQl9LAorCXsgIlNlYUdyZWVuIiwJCWdyZ2IoNDYsCTEzOSwJODcpCX0sCisKKwl7ICJCbHVlIiwJCWdyZ2IoMCwJCTAsCTI1NSkJfSwKKwl7ICJMaWdodEJsdWUiLAkJZ3JnYigxNzMsCTIxNiwJMjMwKQl9LAorCXsgIkRhcmtCbHVlIiwJCWdyZ2IoMCwJCTAsCTEzOSkJfSwKKwl7ICJTbGF0ZUJsdWUiLAkJZ3JnYigxNjAsCTkwLAkyMDUpCX0sCisKKwl7ICJDeWFuIiwJCWdyZ2IoMCwJCTI1NSwJMjU1KQl9LAorCXsgIkxpZ2h0Q3lhbiIsCQlncmdiKDIyNCwJMjU1LAkyNTUpCX0sCisJeyAiRGFya0N5YW4iLAkJZ3JnYigwLAkJMTM5LAkxMzkpCX0sCisKKwl7ICJNYWdlbnRhIiwJCWdyZ2IoMjU1LAkwLAkyNTUpCX0sCisJeyAiTGlnaHRNYWdlbnRhIiwJZ3JnYigyNTUsCTIyNCwJMjU1KQl9LAorCXsgIkRhcmtNYWdlbnRhIiwJZ3JnYigxMzksCTAsCTEzOSkJfSwKKworCXsgIlllbGxvdyIsCQlncmdiKDI1NSwJMjU1LAkwKQl9LAorCXsgIkxpZ2h0WWVsbG93IiwJZ3JnYigyNTUsCTI1NSwJMjI0KQl9LAorCXsgIkRhcmtZZWxsb3ciLAkJZ3JnYigxMzksCTEzOSwJMCkJfSwKKwl7ICJCcm93biIsCQlncmdiKDE2NSwJNDIsCTQyKQl9LAorCisJeyAiR3JheSIsCQlncmdiKDE5MCwJMTkwLAkxOTApCX0sCisJeyAiR3JleSIsCQlncmdiKDE5MCwJMTkwLAkxOTApCX0sCisJeyAiTGlnaHRHcmF5IiwJCWdyZ2IoMjExLAkyMTEsCTIxMSkJfSwKKwl7ICJMaWdodEdyZXkiLAkJZ3JnYigyMTEsCTIxMSwJMjExKQl9LAorCXsgIkRhcmtHcmF5IiwJCWdyZ2IoMTY5LAkxNjksCTE2OSkJfSwKKwl7ICJEYXJrR3JleSIsCQlncmdiKDE2OSwJMTY5LAkxNjkpCX0sCisKKwl7ICJCbGFjayIsCQlncmdiKDAsCQkwLAkwKQl9LAorCXsgIldoaXRlIiwJCWdyZ2IoMjU1LAkyNTUsCTI1NSkJfSwKKworCXsgIk9yYW5nZSIsCQlncmdiKDI1NSwJMTY1LAkwKQl9LAorCXsgIlB1cnBsZSIsCQlncmdiKDE2MCwJMzIsCTI0MCkJfSwKKwl7ICJWaW9sZXQiLAkJZ3JnYigyMzgsCTEzMCwJMjM4KQl9LAorCXtOVUxMLCAwfQorICAgIH07CisKKyAgICBpZiAobmFtZVswXSA9PSAnIycpCisgICAgeworCWNoYXIJICAgICplbmQ7CisJaW50CSAgICBjOworCisJYyA9IHN0cnRvbChuYW1lICsgMSwgJmVuZCwgMTYpOworCXJldHVybiAoZ3VpY29sb3JfVCkgKChjID4+IDE2KSAmIDB4ZmYpIHwgKGMgJiAweGZmMDApIHwgKChjICYgMHhmZikgPDwgMTYpOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGNvbG91cnNbaV0ubmFtZSAhPSBOVUxMOyBpKyspCisgICAgeworCWlmIChTVFJJQ01QKG5hbWUsIGNvbG91cnNbaV0ubmFtZSkgPT0gMCkKKwkgICAgcmV0dXJuIGNvbG91cnNbaV0udmFsdWU7CisgICAgfQorICAgIGlmIChzdHJuaWNtcChuYW1lLCAiZ3JleSIsIDQpID09IDAgfHwgc3RybmljbXAobmFtZSwgImdyYXkiLCA0KSA9PSAwKQorICAgIHsKKwlpbnQgbGV2ZWwgPSAoMjU1ICogYXRvaShuYW1lICsgNCkpIC8gMTAwOworCXJldHVybiAoZ3VpY29sb3JfVCkgZ3JnYihsZXZlbCwgbGV2ZWwsIGxldmVsKTsKKyAgICB9CisgICAgcmV0dXJuIElOVkFMQ09MT1I7Cit9CisKKy8qCisgKiBTZXQgdGhlIGN1cnJlbnQgdGV4dCBjb2xvdXJzLgorICogSWYgd2UgYXJlIHVzaW5nIGZvbnRzIHRoZW4gc2V0IHRoZSBhbnRpYWxpYXNpbmcgY29sb3VycyB0b28uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9jb2xvcnMoZ3VpY29sb3JfVCBmZywgZ3VpY29sb3JfVCBiZykKK3sKKyAgICB6YXBfcmVkcmF3X2NvbG91cnNbMF0gPSBiZyA8PCA4OwkvKiBKSzIzMDc5OCwgcmVnaXN0ZXIgbmV3IGJhY2tncm91bmQgY29sb3VyICovCisgICAgemFwX3JlZHJhd19jb2xvdXJzWzFdID0gZmcgPDwgODsJLyogSksyMzA3OTgsIHJlZ2lzdGVyIG5ldyBmb3JlZ3JvdW5kIGNvbG91ciAqLworICAgIHphcF9yZWRyYXdfdXBkYXRlX2NvbG91cnMgPSBUUlVFOwkvKiBKSzIzMDc5OCwgbmVlZCB1cGRhdGUgb2YgY29sb3VyIG1hc2tzICovCisKKyAgICBzd2koQ29sb3VyVHJhbnNfUmV0dXJuR0NPTCwgZmcgPDwgOCk7CisgICAgZ3VpLmZnX2NvbG91ciA9IHIwOworICAgIHN3aShDb2xvdXJUcmFuc19SZXR1cm5HQ09MLCBiZyA8PCA4KTsKKyAgICBndWkuYmdfY29sb3VyID0gcjA7CisKKyAgICBpZiAocm9fY3VycmVudF9mb250KQorCXN3aShDb2xvdXJUcmFuc19TZXRGb250Q29sb3VycywgMCwgYmcgPDwgOCwgZmcgPDwgOCwgMTQpOworfQorCisgICAgdm9pZAorcm9fZHJhd19zdHJpbmcoeCwgeSwgcywgbGVuLCBmbGFncywgY2xpcCkKKyAgICBpbnQJICAgIHg7CQkvKiBUb3AtbGVmdCBjb29yZCB0byBwbG90IGF0ICh4IGluY2wsIHkgZXhjbCkgKi8KKyAgICBpbnQJICAgIHk7CQkvKiAoc2NyZWVuIGNvb3JkcykgKi8KKyAgICBjaGFyX3UgICpzOwkJLyogU3RyaW5nIHRvIHBsb3QgKi8KKyAgICBpbnQJICAgIGxlbjsJLyogTGVuZ3RoIG9mIHN0cmluZyAqLworICAgIGludAkgICAgZmxhZ3M7CS8qIERSQVdfVFJBTlNQLCBEUkFXX0JPTEQsIERSQVdfVU5ERVJMICovCisgICAgaW50KiAgICBjbGlwOwkvKiBKSzIzMDc5OCwgYWRkZWQgY2xpcCB3aW5kb3cgKi8KK3sKKyAgICBpZiAocm9fY3VycmVudF9mb250KQorICAgIHsKKwlpbnQJZng7CisJaW50CWZsZW4gPSBsZW47CS8qIFByZXNlcnZlIGZvciB1bmRlcmxpbmUgKi8KKworCS8qIFVzZSB0aGUgRm9udCBtYW5hZ2VyIHRvIHBhaW50IHRoZSBzdHJpbmcuCisJICogTXVzdCBkbyBvbmUgY2hhciBhdCBhIHRpbWUgdG8gZ2V0IG1vbm9zcGFjaW5nLgorCSAqLworCisJaWYgKGZsYWdzICYgRFJBV19JVEFMSUMgJiYgIWd1aS5pdGFsX2ZvbnQpCisJICAgIGZsYWdzIHw9IERSQVdfVU5ERVJMOwkvKiBObyBpdGFsaWMgLSB1bmRlcmxpbmUgaW5zdGVhZCAqLworCisJaWYgKChmbGFncyAmIERSQVdfVFJBTlNQKSA9PSAwKQorCXsKKwkgICAgc3dpKENvbG91clRyYW5zX1NldENvbG91ciwgZ3VpLmJnX2NvbG91ciwgMCwgMCwgMCwgMCk7CisJICAgIHN3aShPU19QbG90LCA0LCB4LCB5IC0gZ3VpLmNoYXJfaGVpZ2h0KTsKKwkgICAgc3dpKE9TX1Bsb3QsIDk2ICsgNSwgeCArIGxlbiAqIGd1aS5jaGFyX3dpZHRoIC0gMSwgeSAtIDEpOworCX0KKworCWZ4ID0geCArIGZvbnRfeF9vZmZzZXQ7CisJd2hpbGUgKGZsZW4tLSkKKwl7CisJICAgIHN3aShGb250X1BhaW50LCAwLCBzKyssIDB4OTAsIGZ4LCB5ICsgZm9udF95X29mZnNldCwgMCwgMCwgMSk7CisJICAgIGZ4ICs9IGd1aS5jaGFyX3dpZHRoOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoemFwX3JlZHJhdykKKwl7CisJICAgIC8qIFVzaW5nIGZhc3QgWmFwIHJlZHJhdy4gKi8KKwkgICAgZmxhZ3MgPSByb196YXBfcmVkcmF3X2RyYXdfc3RyaW5nKHgsIHksIHMsIGxlbiwgZmxhZ3MsIGNsaXApOworCX0KKwllbHNlCisJeworCSAgICAvKiBVc2luZyB0aGUgc3lzdGVtIGZvbnQgKi8KKwkgICAgaWYgKGZsYWdzICYgRFJBV19JVEFMSUMpCisJCWZsYWdzIHw9IERSQVdfVU5ERVJMOworCisJICAgIGlmICgoZmxhZ3MgJiBEUkFXX1RSQU5TUCkgPT0gMCkKKwkgICAgeworCQlzd2koQ29sb3VyVHJhbnNfU2V0Q29sb3VyLCBndWkuYmdfY29sb3VyLCAwLCAwLCAwLCAwKTsKKwkJc3dpKE9TX1Bsb3QsIDQsIHgsIHkgLSBndWkuY2hhcl9oZWlnaHQpOworCQlzd2koT1NfUGxvdCwgOTYgKyA1LCB4ICsgbGVuICogZ3VpLmNoYXJfd2lkdGggLSAxLCB5IC0gMSk7CisJICAgIH0KKwkgICAgc3dpKE9TX1Bsb3QsIDQsCQkJLyogTW92ZSB0aGUgZHJhd2luZyBjdXJzb3IgKi8KKwkJICAgIHgsCisJCSAgICB5IC0gMSk7CisJICAgIHN3aShDb2xvdXJUcmFuc19TZXRDb2xvdXIsIGd1aS5mZ19jb2xvdXIsIDAsIDAsIDAsIDApOworCSAgICBzd2koT1NfV3JpdGVOLCBzLCBsZW4pOworCisJICAgIGlmIChmbGFncyAmIERSQVdfQk9MRCkKKwkgICAgeworCQlzd2koT1NfUGxvdCwgNCwgeCArICgxIDw8IHhfZWlnZW5fZmFjdG9yKSwgeSAtIDEpOworCQlzd2koT1NfV3JpdGVOLCBzLCBsZW4pOworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIChmbGFncyAmIERSQVdfVU5ERVJMKQorICAgIHsKKwlpZiAocm9fY3VycmVudF9mb250IHx8IHphcF9yZWRyYXcpCisJICAgIHN3aShDb2xvdXJUcmFuc19TZXRDb2xvdXIsIGd1aS5mZ19jb2xvdXIsIDAsIDAsIDAsIDApOworCS8qIFVuZGVybGluZWQgaXMgdGhlIHNhbWUgd2l0aCBhbGwgcGxvdHRpbmcgbWV0aG9kcyAqLworCXN3aShPU19QbG90LCA0LCB4LCB5IC0gZ3VpLmNoYXJfaGVpZ2h0KTsKKwlzd2koT1NfUGxvdCwgMSwgZ3VpLmNoYXJfd2lkdGggKiBsZW4sIDApOworICAgIH0KK30KKworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19zdHJpbmcoaW50IHJvdywgaW50IGNvbCwgY2hhcl91ICpzLCBpbnQgbGVuLCBpbnQgZmxhZ3MpCit7CisgICAgaW50IHgsIHk7CQkvKiBXb3JrYXJlYSB4LHkgKi8KKyAgICB4ID0gY29sICogZ3VpLmNoYXJfd2lkdGg7CisgICAgeSA9IC1yb3cgKiBndWkuY2hhcl9oZWlnaHQ7CisKKyAgICBpZiAocmVkcmF3X2Jsb2NrKQorICAgIHsKKwlyb19kcmF3X3N0cmluZyh4ICsgcmVkcmF3X2Jsb2NrWzFdLCB5ICsgcmVkcmF3X2Jsb2NrWzRdLAorCQkJcywgbGVuLCBmbGFncywgJnJlZHJhd19ibG9ja1s3XSk7CS8qIEpLMjMwNzk4LCBhZGRlZCBjbGlwIHdpbmRvdyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworCWludCBibG9ja1s0NF07CisJYmxvY2tbMF0gPSBndWkud2luZG93X2hhbmRsZTsKKwlibG9ja1sxXSA9IHg7CisJYmxvY2tbMl0gPSB5IC0gZ3VpLmNoYXJfaGVpZ2h0OworCWJsb2NrWzNdID0gKGNvbCArIGxlbikgKiBndWkuY2hhcl93aWR0aDsKKwlibG9ja1s0XSA9IHk7CisJc3dpKFdpbXBfVXBkYXRlV2luZG93LCAwLCBibG9jayk7CisJd2hpbGUgKHIwKQorCXsKKwkgICAgcm9fZHJhd19zdHJpbmcoeCArIGJsb2NrWzFdLCB5ICsgYmxvY2tbNF0sCisJCQlzLCBsZW4sIGZsYWdzLCAmYmxvY2tbN10pOwkvKiBKSzIzMDc5OCwgYWRkZWQgY2xpcCB3aW5kb3cgKi8KKwkgICAgc3dpKFdpbXBfR2V0UmVjdGFuZ2xlLCAwLCBibG9jayk7CisJfQorICAgIH0KK30KKworLyoKKyAqIFJldHVybiBPSyBpZiB0aGUga2V5IHdpdGggdGhlIHRlcm1jYXAgbmFtZSAibmFtZSIgaXMgc3VwcG9ydGVkLgorICovCisgICAgaW50CitndWlfbWNoX2hhc2tleShjaGFyX3UgKm5hbWUpCit7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2JlZXAodm9pZCkKK3sKKyAgICBzd2koT1NfV3JpdGVJICsgNyk7Cit9CisKKy8qCisgKiBWaXN1YWwgYmVsbC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZmxhc2goaW50IG1zZWMpCit7CisgICAgLyogVE9ETyAqLworfQorCisKKy8qCisgKiBQbG90IGEgc29saWQgcmVjdGFuZ2xlIHVzaW5nIHRoZSBnaXZlbiBwbG90IGFjdGlvbiBhbmQgY29sb3VyLgorICogQ29vcmRpbmF0ZXMgYXJlIGluY2x1c2l2ZSBhbmQgd2luZG93LXJlbGF0aXZlLgorICovCisgICAgdm9pZAorcGxvdF9yZWN0YW5nbGUocGxvdCwgY29sb3VyLCBtaW54LCBtaW55LCBtYXh4LCBtYXh5KQorICAgIGludCBwbG90OwkJLyogT1NfUGxvdCBhY3Rpb24gKi8KKyAgICBpbnQgY29sb3VyOworICAgIGludCBtaW54OworICAgIGludCBtaW55OworICAgIGludCBtYXh4OworICAgIGludCBtYXh5OworeworICAgIGlmIChyZWRyYXdfYmxvY2spCisgICAgeworCXN3aShDb2xvdXJUcmFuc19TZXRDb2xvdXIsIGNvbG91ciwgMCwgMCwgMCwgMCk7CisJc3dpKE9TX1Bsb3QsIDQsIG1pbnggKyByZWRyYXdfYmxvY2tbMV0sIG1pbnkgKyByZWRyYXdfYmxvY2tbNF0pOworCXN3aShPU19QbG90LCBwbG90LCBtYXh4ICsgcmVkcmF3X2Jsb2NrWzFdLCBtYXh5ICsgcmVkcmF3X2Jsb2NrWzRdKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpbnQgYmxvY2tbNDRdOworCWJsb2NrWzBdID0gZ3VpLndpbmRvd19oYW5kbGU7CisJYmxvY2tbMV0gPSBtaW54OworCWJsb2NrWzJdID0gbWlueTsKKwlibG9ja1szXSA9IG1heHggKyAxOworCWJsb2NrWzRdID0gbWF4eSArIDE7CisJc3dpKFdpbXBfVXBkYXRlV2luZG93LCAwLCBibG9jayk7CisJd2hpbGUgKHIwKQorCXsKKwkgICAgc3dpKENvbG91clRyYW5zX1NldENvbG91ciwgY29sb3VyLCAwLCAwLCAwLCAwKTsKKwkgICAgc3dpKE9TX1Bsb3QsIDQsIG1pbnggKyBibG9ja1sxXSwgbWlueSArIGJsb2NrWzRdKTsKKwkgICAgc3dpKE9TX1Bsb3QsIHBsb3QsIG1heHggKyBibG9ja1sxXSwgbWF4eSArIGJsb2NrWzRdKTsKKwkgICAgc3dpKFdpbXBfR2V0UmVjdGFuZ2xlLCAwLCBibG9jayk7CisJfQorICAgIH0KK30KKworLyoKKyAqIEludmVydCBhIHJlY3RhbmdsZSBmcm9tIHJvdyByLCBjb2x1bW4gYywgZm9yIG5yIHJvd3MgYW5kIG5jIGNvbHVtbnMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2ludmVydF9yZWN0YW5nbGUoaW50IHIsIGludCBjLCBpbnQgbnIsIGludCBuYykKK3sKKyAgICBwbG90X3JlY3RhbmdsZSg5NiArIDYsIDAsIEZJTExfWChjKSwgLUZJTExfWShyICsgbnIpLCBGSUxMX1goYyArIG5jKSwgLUZJTExfWShyKSk7Cit9CisKKy8qCisgKiBJY29uaWZ5IHRoZSBHVUkgd2luZG93LgorICovCisgICAgdm9pZAorZ3VpX21jaF9pY29uaWZ5KHZvaWQpCit7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBCcmluZyB0aGUgVmltIHdpbmRvdyB0byB0aGUgZm9yZWdyb3VuZC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2ZvcmVncm91bmQoKQoreworICAgIC8qIFRPRE8gKi8KK30KKyNlbmRpZgorCisvKiBEcmF3IGEgaG9sbG93IHJlY3RhbmdsZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudAorICogZ3JhcGhpY3MgY3Vyc29yIHBvc2l0aW9uLCB3aXRoIHRoZSBnaXZlbiB3aWR0aAorICogYW5kIGhlaWdodC4gU3RhcnQgcG9zaXRpb24gaXMgdG9wLWxlZnQuCisgKi8KKyAgICB2b2lkCitkcmF3X2hvbGxvdyh3LCBoKQorICAgIGludAl3OworICAgIGludAloOworeworICAgIHN3aShPU19QbG90LCAxLCB3IC0gMSwgMCk7CisgICAgc3dpKE9TX1Bsb3QsIDEsIDAsIDEgLSBoKTsKKyAgICBzd2koT1NfUGxvdCwgMSwgMSAtIHcsIDApOworICAgIHN3aShPU19QbG90LCAxLCAwLCBoIC0gMSk7Cit9CisKKy8qCisgKiBEcmF3IGEgY3Vyc29yIHdpdGhvdXQgZm9jdXMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RyYXdfaG9sbG93X2N1cnNvcihndWljb2xvcl9UIGNvbG91cikKK3sKKyAgICBpbnQgeCA9IEZJTExfWChndWkuY3Vyc29yX2NvbCk7CS8qIFdpbmRvdyByZWxhdGl2ZSwgdG9wLWxlZnQgKi8KKyAgICBpbnQgeSA9IC1GSUxMX1koZ3VpLmN1cnNvcl9yb3cpOworICAgIGlmIChyZWRyYXdfYmxvY2sgPT0gTlVMTCkKKyAgICB7CisJaW50IGJsb2NrWzExXTsKKworCWJsb2NrWzBdID0gZ3VpLndpbmRvd19oYW5kbGU7CisJYmxvY2tbMV0gPSB4OworCWJsb2NrWzJdID0geSAtIGd1aS5jaGFyX2hlaWdodDsKKwlibG9ja1szXSA9IHggKyBndWkuY2hhcl93aWR0aDsKKwlibG9ja1s0XSA9IHk7CisJc3dpKFdpbXBfVXBkYXRlV2luZG93LCAwLCBibG9jayk7CisJd2hpbGUgKHIwKQorCXsKKwkgICAgc3dpKENvbG91clRyYW5zX1NldEdDT0wsIGNvbG91ciA8PCA4LCAwLCAwLCAwLCAwKTsKKworCSAgICBzd2koT1NfUGxvdCwgNCwgeCArIGJsb2NrWzFdLCB5ICsgYmxvY2tbNF0gLSAxKTsKKwkgICAgZHJhd19ob2xsb3coZ3VpLmNoYXJfd2lkdGgsIGd1aS5jaGFyX2hlaWdodCk7CisKKwkgICAgc3dpKFdpbXBfR2V0UmVjdGFuZ2xlLCAwLCBibG9jayk7CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCXN3aShDb2xvdXJUcmFuc19TZXRHQ09MLCBjb2xvdXIgPDwgOCwgMCwgMCwgMCwgMCk7CisKKwlzd2koT1NfUGxvdCwgNCwgeCArIHJlZHJhd19ibG9ja1sxXSwgeSArIHJlZHJhd19ibG9ja1s0XSAtIDEpOworCWRyYXdfaG9sbG93KGd1aS5jaGFyX3dpZHRoLCBndWkuY2hhcl9oZWlnaHQpOworICAgIH0KK30KKworLyoKKyAqIERyYXcgcGFydCBvZiBhIGN1cnNvciwgInciIHBpeGVscyB3aWRlLCBhbmQgImgiIHBpeGVscyBoaWdoLCB1c2luZworICogY29sb3IgImNvbG9yIi4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19wYXJ0X2N1cnNvcih3LCBoLCBjb2xvdXIpCisgICAgaW50IHc7CisgICAgaW50IGg7CisgICAgZ3VpY29sb3JfVCBjb2xvdXI7Cit7CisgICAgaW50IHggPSBGSUxMX1goZ3VpLmN1cnNvcl9jb2wpOworICAgIGludCB5ID0gLUZJTExfWShndWkuY3Vyc29yX3Jvdyk7CisgICAgc3dpKENvbG91clRyYW5zX1JldHVybkdDT0wsIGNvbG91ciA8PCA4KTsKKyAgICBwbG90X3JlY3RhbmdsZSg5NiArIDUsIHIwLCB4LCB5IC0gaCwgeCArIHcgLSAxLCB5IC0gMSk7Cit9CisKKy8qCisgKiBDYXRjaCB1cCB3aXRoIGFueSBxdWV1ZWQgZXZlbnRzLiAgVGhpcyBtYXkgcHV0IGtleWJvYXJkIGlucHV0IGludG8gdGhlCisgKiBpbnB1dCBidWZmZXIsIGNhbGwgcmVzaXplIGNhbGwtYmFja3MsIHRyaWdnZXIgdGltZXJzIGV0Yy4KKyAqIElmIHRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIGV2ZW50IHF1ZXVlKCYgbm8gdGltZXJzIHBlbmRpbmcpLCB0aGVuIHdlIHJldHVybgorICogaW1tZWRpYXRlbHkgKHdlbGwsIGFmdGVyIGEgV2ltcF9Qb2xsKS4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfdXBkYXRlKHZvaWQpCit7CisgICAgaW50IGJsb2NrWzY0XTsKKyAgICBpbnQgcmVhc29uOworCisgICAgc3dpKE9TX1JlYWRNb25vdG9uaWNUaW1lKTsKKyAgICBpZiAoKHIwIC0gdGltZV9vZl9sYXN0X3BvbGwpIDwgNTApCisJcmV0dXJuOwkJCSAgICAvKiBEb24ndCByZXR1cm4gdG9vIG9mdGVuICovCisKKyAgICByZWFzb24gPSB3aW1wX3BvbGwoMCwgYmxvY2spOworICAgIGlmIChyZWFzb24pCisJcHJvY2Vzc19ldmVudChyZWFzb24sIGJsb2NrKTsKKyAgICByb19yZXR1cm5fZWFybHkgPSBGQUxTRTsJCS8qIFdlJ3JlIHJldHVybmluZyBhbnl3YXkuICovCit9CisKKyAgICB2b2lkCityZWRyYXdfd2luZG93KGJsb2NrKQorICAgIGludCAqYmxvY2s7Cit7CisgICAgaW50IHgsIHk7CQkJLyogVmltIHdvcmthcmVhIGNvb3JkcyAqLworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGludCBibGFua19jb2w7CisKKyAgICBzd2koQ29sb3VyVHJhbnNfUmV0dXJuR0NPTCwgVU5VU0VEX0NPTE9VUiA8PCA4LCAwLCAwLCAxPDw3LCAwKTsKKyAgICBibGFua19jb2wgPSByMDsKKworICAgIHN3aShXaW1wX1JlZHJhd1dpbmRvdywgMCwgYmxvY2spOworICAgIHJlZHJhd19ibG9jayA9IGJsb2NrOworICAgIHdoaWxlIChyMCkKKyAgICB7CisJeCA9IGJsb2NrWzddIC0gYmxvY2tbMV07CisJeSA9IGJsb2NrWzRdIC0gYmxvY2tbMTBdOworCXdpZHRoICA9IGJsb2NrWzldICAtIGJsb2NrWzddOworCWhlaWdodCA9IGJsb2NrWzEwXSAtIGJsb2NrWzhdOworCisJaWYgKGhlaWdodCArIHkgPiBSb3dzICogZ3VpLmNoYXJfaGVpZ2h0KQorCXsKKwkgICAgLyogQmxhbmsgZXZlcnl0aGluZyBvZmYgdGhlIGJvdHRvbS4gKi8KKwkgICAgcGxvdF9yZWN0YW5nbGUoOTYgKyA1LCBibGFua19jb2wsCisJCQkJMCwgYmxvY2tbOF0gLSBibG9ja1s0XSwKKwkJCQlibG9ja1s5XSAtIGJsb2NrWzFdLCAtRklMTF9ZKFJvd3MpIC0gMSk7CisJICAgIGhlaWdodCA9IFJvd3MgKiBndWkuY2hhcl9oZWlnaHQ7CisJfQorCWlmICh3aWR0aCArIHg+IENvbHVtbnMgKiBndWkuY2hhcl93aWR0aCkKKwl7CisJICAgIC8qIEJsYW5rIGV2ZXJ5dGhpbmcgb2ZmIHRvIHRoZSByaWdodC4gKi8KKwkgICAgcGxvdF9yZWN0YW5nbGUoOTYgKyA1LCBibGFua19jb2wsCisJCQkJRklMTF9YKENvbHVtbnMpLCBibG9ja1s4XSAtIGJsb2NrWzRdLAorCQkJCWJsb2NrWzldIC0gYmxvY2tbMV0sIDApOworCSAgICB3aWR0aCA9IENvbHVtbnMgKiBndWkuY2hhcl93aWR0aDsKKwl9CisJZ3VpX3JlZHJhdyh4ICwgeSwgd2lkdGgsIGhlaWdodCk7CisJc3dpKFdpbXBfR2V0UmVjdGFuZ2xlLCAwLCBibG9jayk7CisgICAgfQorICAgIHJlZHJhd19ibG9jayA9IE5VTEw7Cit9CisKKy8qIENoZWNrIGlmIHdlIGhhdmUgbW9kaWZpZWQgZGF0YS4KKyAqIElmIHdlIGRvIHRoZW4gYWNrIHRoZSBtZXNzYWdlIHRvIHN0b3AgdGhlIHNodXRkb3duLgorICogT3RoZXJ3aXNlLCBpZ25vcmUgdGhlIG1lc3NhZ2UuCisgKi8KKyAgICB2b2lkCityb19wcmVxdWl0KGJsb2NrKQorICAgIGludAkgICAgKmJsb2NrOworeworICAgIGlmICghcm9fb2tfdG9fcXVpdCgpKQorICAgIHsKKwkvKiBOb3QgT0sgdG8gcXVpdCAtIHN0b3Agc2h1dGRvd24gKi8KKwlibG9ja1szXSA9IGJsb2NrWzJdOworCXN3aShXaW1wX1NlbmRNZXNzYWdlLCAxOSwgYmxvY2ssIGJsb2NrWzFdKTsKKyAgICB9CisgICAgLyogRG8gbm90aGluZy4gV2UgbWF5IGdldCBhIE1lc3NhZ2VfUXVpdCBsYXRlci4gKi8KK30KKworLyogSWYgdGhlcmUgaXMgdW5zYXZlZCBkYXRhIHRoZW4gYXNrIHRoZSB1c2VyIGlmIHRoZXkgbWluZCBsb3NpbmcgaXQuCisgKiBSZXR1cm4gVFJVRSBpZiB3ZSBjYW4gcXVpdCB3aXRob3V0IHNhdmluZywgRkFMU0UgdG8gaGFsdCB0aGUKKyAqIHNodXRkb3duLgorICovCisgICAgaW50Cityb19va190b19xdWl0KCkKK3sKKyAgICBpbnQJICAgIG9sZF9jb25maXJtID0gY21kbW9kLmNvbmZpcm07CisKKyAgICBjbWRtb2QuY29uZmlybSA9IEZBTFNFOwkgICAgLyogVXNlIG91ciBvd24sIHNpbmdsZSB0YXNraW5nLCBib3ggKi8KKworICAgIGlmIChjaGVja19jaGFuZ2VkX2FueShGQUxTRSkpCisgICAgeworCXN3aShXaW1wX1JlcG9ydEVycm9yLAorCQkiXDBcMFwwXDBWaW0gY29udGFpbnMgdW5zYXZlZCBkYXRhIC0gcXVpdCBhbnl3YXk/IiwKKwkJMHgxNywKKwkJIlZpbSIpOworCWNtZG1vZC5jb25maXJtID0gb2xkX2NvbmZpcm07CisJaWYgKHIxICE9IDEpCisJICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgY21kbW9kLmNvbmZpcm0gPSBvbGRfY29uZmlybTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyogUXVpdCB3aXRob3V0IGNoZWNraW5nIGZvciB1bnNhdmVkIGRhdGEuICovCisgICAgdm9pZAorcm9fcXVpdCgpCit7CisgICAgZXhpdGluZyA9IFRSVUU7CisgICAgZ2V0b3V0KDApOworCisgICAgZXhpdGluZyA9IEZBTFNFOwkJICAgIC8qIHByb2JhYmx5IGNhbid0IGdldCBoZXJlICovCisgICAgc2V0Y3Vyc29yKCk7CQkgICAgLyogcG9zaXRpb24gY3Vyc29yICovCisgICAgb3V0X2ZsdXNoKCk7Cit9CisKKy8qIEluc2VudCB0aGUgZ2l2ZW4gdmltIHNwZWNpYWwgY29kZSBpbnRvIHRoZSBpbnB1dCBidWZmZXIgKi8KKyAgICB2b2lkCityb19wcmVzcyhhLCBiLCBtb2RpZmllcikKKyAgICBjaGFyIGE7CisgICAgY2hhciBiOworICAgIGludCBtb2RpZmllcjsJLyogJTxDdHJsPjxTaGlmdD4gMDAwMCAwMDAwICovCit7CisgICAgY2hhcl91IGJ1Zls2XTsKKyAgICBpbnQJICAgIHZpbV9tb2Q7CisgICAgaW50CSAgICBrZXk7CisKKworICAgIC8qIENvbnZlcnQgUklTQyBPUyBtb2RpZmllciB0byBWaW0gbW9kaWZpZXIuICovCisgICAgdmltX21vZCA9ICgobW9kaWZpZXIgJiAweDEwKSA/IE1PRF9NQVNLX1NISUZUIDogMCkKKwkgICAgICAgfCAoKG1vZGlmaWVyICYgMHgyMCkgPyBNT0RfTUFTS19DVFJMIDogMCk7CisgICAga2V5ID0gc2ltcGxpZnlfa2V5KFRFUk1DQVAyS0VZKGEsIGIpLCAmdmltX21vZCk7CisKKyAgICBidWZbM10gPSBDU0k7CisgICAgYnVmWzRdID0gS0VZMlRFUk1DQVAwKGtleSk7CisgICAgYnVmWzVdID0gS0VZMlRFUk1DQVAxKGtleSk7CisgICAgaWYgKHZpbV9tb2QpCisgICAgeworCWJ1ZlswXSA9IENTSTsKKwlidWZbMV0gPSBLU19NT0RJRklFUjsKKwlidWZbMl0gPSB2aW1fbW9kOworCWFkZF90b19pbnB1dF9idWYoYnVmLCA2KTsKKyAgICB9CisgICAgZWxzZQorCWFkZF90b19pbnB1dF9idWYoYnVmICsgMywgMyk7Cit9CisKKy8qIFRha2UgYSB3aW1wIGtleSBjb2RlIGFuZCBpbnNlcnQgdGhlIHZpbSBlcXVpdmFsZW50CisgKiBpbnRvIHZpbSdzIGlucHV0IGJ1ZmZlci4KKyAqIENUUkwtQyBhbHNvIHNldHMgZ290X2ludC4KKyAqLworICAgIHZvaWQKK3JvX2luc2VydF9rZXkoY29kZSkKKyAgICBjaGFyX3UgKmNvZGU7CQkvKiBXaW1wX1Byb2Nlc3NLZXkgY29kZSAoNCBieXRlcykgKi8KK3sKKyAgICBjaGFyIGEgPSBjb2RlWzBdOworICAgIGNoYXIgYiA9IGNvZGVbMV07CisgICAgaW50IGJhc2UsIG1vZGlmaWVyOworCisgICAgaWYgKGEgPT0gMyAmJiBjdHJsX2NfaW50ZXJydXB0cykKKwlnb3RfaW50ID0gVFJVRTsKKworICAgIC8qIElzIGl0IGEgbm9ybWFsIGtleT8gKi8KKyAgICBpZiAoYSA+IDMxICYmIGEgPCAxMjcpCisgICAgeworCWFkZF90b19pbnB1dF9idWYoY29kZSwgMSk7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qIFdlIHNob3VsZCBwYXNzIGFueSB1bnJlY29nbmlzZWQga2V5cyBvbiwgYnV0CisgICAgICogZm9yIG5vdyBqdXN0IHBhc3Mgb24gRjEyIGNvbWJpbmF0aW9ucy4KKyAgICAgKi8KKyAgICBzd2l0Y2ggKGIpCisgICAgeworCWNhc2UgMDoKKwkgICAgLyogSG9tZSBhbmQgRGVsZXRlIGFyZSB0aGUgb25seSBzcGVjaWFsIGNhc2VzICovCisJICAgIHN3aXRjaCAoYSkKKwkgICAgeworCQljYXNlIDB4MWU6CisJCSAgICByb19wcmVzcygnaycsJ2gnLCAwKTsJLyogSG9tZSAqLworCQkgICAgcmV0dXJuOworCQljYXNlIDB4N2Y6CisJCSAgICByb19wcmVzcygnaycsJ0QnLCAwKTsJLyogRGVsZXRlICovCisJCSAgICByZXR1cm47CisJCWNhc2UgQ1NJOgorCQkgICAgeworCQkJLyogVHVybiBDU0kgaW50byBLX0NTSS4gIFVudGVzdGVkISAqLworCQkJY2hhcl91IHN0cmluZ1szXSA9IHtDU0ksIEtTX0VYVFJBLCBLRV9DU0l9OworCisJCQlhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgMyk7CisJCQlyZXR1cm47CisJCSAgICB9CisJCWRlZmF1bHQ6CisJCSAgICBhZGRfdG9faW5wdXRfYnVmKGNvZGUsIDEpOworCQkgICAgcmV0dXJuOworCSAgICB9CisJY2FzZSAxOgorCSAgICBpZiAoKGEgJiAweGNmKSA9PSAweGNjKQorCSAgICB7CisJCS8qIEYxMiBwcmVzc2VkIC0gcGFzcyBpdCBvbiAocXVpY2sgaGFjaykgKi8KKwkJc3dpKFdpbXBfUHJvY2Vzc0tleSwgYSB8IDB4MTAwKTsKKwkJcmV0dXJuOworCSAgICB9CisJICAgIGJhc2UgPSBhICYgMHhjZjsKKwkgICAgbW9kaWZpZXIgPSBhICYgMHgzMDsKKwkgICAgc3dpdGNoIChiYXNlKQorCSAgICB7CisJCWNhc2UgMHg4YToJLyogVGFiICovCisJCSAgICBhZGRfdG9faW5wdXRfYnVmKCJcMDExIiwgMSk7CisJCSAgICByZXR1cm47CisJCWNhc2UgMHg4YjoJLyogQ29weSAoRW5kKSAqLworCQkgICAgcmV0dXJuIHJvX3ByZXNzKCdAJywgJzcnLCBtb2RpZmllcik7CisJCWNhc2UgMHg4YzoJLyogTGVmdCAqLworCQkgICAgcmV0dXJuIHJvX3ByZXNzKCdrJywgJ2wnLCBtb2RpZmllcik7CisJCWNhc2UgMHg4ZDoJLyogUmlnaHQgKi8KKwkJICAgIHJldHVybiByb19wcmVzcygnaycsICdyJywgbW9kaWZpZXIpOworCQljYXNlIDB4OGU6CS8qIERvd24gKi8KKwkJICAgIGlmIChtb2RpZmllciAmIDB4MTApCisJCQlyZXR1cm4gcm9fcHJlc3MoJ2snLCAnTicsIG1vZGlmaWVyIF4gMHgxMCk7CisJCSAgICBlbHNlCisJCQlyZXR1cm4gcm9fcHJlc3MoJ2snLCAnZCcsIG1vZGlmaWVyKTsKKwkJY2FzZSAweDhmOgkvKiBVcCAqLworCQkgICAgaWYgKG1vZGlmaWVyICYgMHgxMCkKKwkJCXJldHVybiByb19wcmVzcygnaycsICdQJywgbW9kaWZpZXIgXiAweDEwKTsKKwkJICAgIGVsc2UKKwkJCXJldHVybiByb19wcmVzcygnaycsICd1JywgbW9kaWZpZXIpOworCQljYXNlIDB4Y2E6CS8qIEYxMCAqLworCQkgICAgcmV0dXJuIHJvX3ByZXNzKCdrJywgJzsnLCBtb2RpZmllcik7CisJCWNhc2UgMHhjYjoJLyogRjExICovCisJCSAgICByZXR1cm4gcm9fcHJlc3MoJ0YnLCAnMScsIG1vZGlmaWVyKTsKKwkJY2FzZSAweGNkOgkvKiBJbnNlcnQgKi8KKwkJICAgIHJldHVybiByb19wcmVzcygnaycsICdJJywgbW9kaWZpZXIpOworCQlkZWZhdWx0OgorCQkgICAgaWYgKGJhc2UgPiAweDgwICYmIGJhc2UgPCAweDE4YSkKKwkJICAgIHsKKwkJCS8qIE9uZSBvZiB0aGUgb3RoZXIgZnVuY3Rpb24ga2V5cyAqLworCQkJcmV0dXJuIHJvX3ByZXNzKCdrJywgJzAnICsgKGJhc2UgJiAxNSksIG1vZGlmaWVyKTsKKwkJICAgIH0KKwkgICAgfQorICAgIH0KK30KKworLyogUHJvY2VzcyBhIG1vdXNlIGV2ZW50LiAqLworICAgIHZvaWQKK3JvX21vdXNlKGJsb2NrKQorICAgIGludCAqYmxvY2s7Cit7CisgICAgaW50IHgsIHksIGJ1dHRvbiwgdmltX2J1dHRvbjsKKyAgICBpbnQgbW9kaWZpZXJzID0gMDsKKyAgICBpbnQgbWluX3gsIG1pbl95OwkJLyogVmlzaWJsZSBhcmVhIG9mIGVkaXRvciB3aW5kb3cgKi8KKyAgICBpbnQgbWF4X3gsIG1heF95OworCisgICAgaWYgKGJsb2NrWzNdICE9IGd1aS53aW5kb3dfaGFuZGxlIHx8IHJvX2RyYWdnaW5nKQorCXJldHVybjsJCQkvKiBOb3Qgb3VyIHdpbmRvdyBvciBpZ25vcmluZyBjbGlja3MqLworCisgICAgeCA9IGJsb2NrWzBdOwkJLyogQ2xpY2sgcG9zaXRpb24gLSBzY3JlZW4gY29vcmRzICovCisgICAgeSA9IGJsb2NrWzFdOworICAgIGJ1dHRvbiA9IGJsb2NrWzJdOworCisgICAgYmxvY2tbMF0gPSBndWkud2luZG93X2hhbmRsZTsKKyAgICBzd2koV2ltcF9HZXRXaW5kb3dTdGF0ZSwgMCwgYmxvY2spOworICAgIG1pbl94ID0gYmxvY2tbMV07CisgICAgbWluX3kgPSBibG9ja1syXTsKKyAgICBtYXhfeCA9IGJsb2NrWzNdOworICAgIG1heF95ID0gYmxvY2tbNF07CisKKyAgICBpZiAoYmxvY2tbM10gLSB4IDwgZ3VpLnNjcm9sbGJhcl93aWR0aCkKKyAgICB7CisJLyogQ2xpY2sgaW4gdGhhdCBibGFuayBhcmVhIHVuZGVyIHRoZSBzY3JvbGxiYXJzICovCisKKwlpZiAoYnV0dG9uICYgMHg0NDQpCisJeworCSAgICBpbnQJICAgIGZyb250X2Jsb2NrWzEwXTsKKwkgICAgLyogRHJhZ2dpbmcgd2l0aCBTZWxlY3QgLSBicmluZyB3aW5kb3cgdG8gZnJvbnQgZmlyc3QgKi8KKwkgICAgZnJvbnRfYmxvY2tbMF0gPSBndWkud2luZG93X2hhbmRsZTsKKwkgICAgc3dpKFdpbXBfR2V0V2luZG93U3RhdGUsIDAsIGZyb250X2Jsb2NrKTsKKwkgICAgZnJvbnRfYmxvY2tbN10gPSAtMTsKKwkgICAgcm9fb3Blbl9tYWluKGZyb250X2Jsb2NrKTsKKwl9CisKKwlibG9ja1swXSA9IGd1aS53aW5kb3dfaGFuZGxlOworCWJsb2NrWzFdID0gNzsJCQkvKiBEcmFnIHBvaW50ICovCisJYmxvY2tbMl0gPSBibG9ja1s0XSA9IDA7CS8qIENvb3JkcyBvZiBwb2ludC4gKi8KKwlibG9ja1szXSA9IGJsb2NrWzVdID0gMDsKKwlkcmFnX3hfb2Zmc2V0ID0gbWF4X3ggLSB4OworCWRyYWdfeV9vZmZzZXQgPSBtaW5feSAtIHk7CisKKwkvKiBQYXJlbnQgYm94LiAqLworCWJsb2NrWzZdID0gbWluX3ggKworCQkJZ3VpLnNjcm9sbGJhcl93aWR0aCAqIDIgKworCQkJTUlOX0NPTFVNTlMgKiBndWkuY2hhcl93aWR0aDsKKwlibG9ja1s3XSA9IDA7CisJZ3VpX21jaF9nZXRfc2NyZWVuX2RpbWVuc2lvbnMoJmJsb2NrWzhdLCAmYmxvY2tbOV0pOworCWJsb2NrWzldID0gbWF4X3kgLQorCQkJNCAqIGd1aS5jaGFyX2hlaWdodCAtCisJCQlndWkuc2Nyb2xsYmFyX2hlaWdodDsKKworCXN3aShXaW1wX0RyYWdCb3gsIDAsIGJsb2NrKTsKKwlyb19kcmFnZ2luZyA9IERSQUdfUkVTSVpFX1dJTkRPVzsKKwlkcmFnX2J1dHRvbiA9IHZpbV9idXR0b247CisJZHJhZ19tb2RpZmllcnMgPSBtb2RpZmllcnM7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmIChidXR0b24gJiAweDExMSkKKwl2aW1fYnV0dG9uID0gTU9VU0VfUklHSFQ7CisgICAgZWxzZSBpZiAoYnV0dG9uICYgMHgyMjIpCisJdmltX2J1dHRvbiA9IE1PVVNFX01JRERMRTsKKyAgICBlbHNlCisJdmltX2J1dHRvbiA9IE1PVVNFX0xFRlQ7CisKKyAgICBzd2koT1NfQnl0ZSwgMTIxLCAweDgwKTsKKyAgICBpZiAocjEgPT0gMHhmZikKKwltb2RpZmllcnMgfD0gTU9VU0VfU0hJRlQ7CisgICAgc3dpKE9TX0J5dGUsIDEyMSwgMHg4MSk7CisgICAgaWYgKHIxID09IDB4ZmYpCisJbW9kaWZpZXJzIHw9IE1PVVNFX0NUUkw7CisgICAgc3dpKE9TX0J5dGUsIDEyMSwgMHg4Mik7CisgICAgaWYgKHIxID09IDB4ZmYpCisJbW9kaWZpZXJzIHw9IE1PVVNFX0FMVDsKKworICAgIGlmIChidXR0b24gPT0gMikKKyAgICB7CisJLyogTWVudSBjbGljazoKKwkgKiBJZiBzaGlmdCB3YXMgcHJlc3NlZCB0aGVuIGRvIHRoZSBwYXN0ZSBhY3Rpb24uCisJICogSWYgbm90LCB0aGVuIG9wZW4gdGhlIHBvcC11cCBtZW51LgorCSAqLworCW1vZGlmaWVycyBePSBNT1VTRV9TSElGVDsKKwlpZiAobW9kaWZpZXJzICYmIE1PVVNFX1NISUZUKQorCXsKKwkgICAgdmltbWVudV9UCW1haW47CisJICAgIC8qIFNoaWZ0IHdhcyBOT1QgcHJlc3NlZCAtIHNob3cgbWVudSAqLworCSAgICBtYWluLmRuYW1lID0gKGNoYXJfdSAqKSAiVmltIjsKKwkgICAgbWFpbi5jaGlsZHJlbiA9IHJvb3RfbWVudTsKKwkgICAgZ3VpX21jaF9zaG93X3BvcHVwbWVudSgmbWFpbik7CisJICAgIHJldHVybjsKKwl9CisgICAgfQorCisgICAgLyogR2FpbiB0aGUgaW5wdXQgZm9jdXMgKi8KKyAgICBzd2koV2ltcF9TZXRDYXJldFBvc2l0aW9uLCBndWkud2luZG93X2hhbmRsZSwgLTEsIDAsIDAsIC0xLCAtMSk7CisKKyAgICBpZiAoYnV0dG9uICYgMHhmMCkKKyAgICB7CisJLyogRHJhZyBvcGVyYXRpb246CisJICoKKwkgKiBUZWxsIHRoZSBXaW1wIHRvIHN0YXJ0IGEgZHJhZy4KKwkgKiBNb25pdG9yIG51bGwgZXZlbnRzLgorCSAqLworCWJsb2NrWzFdID0gNzsJCQkvKiBEcmFnIGEgcG9pbnQuICovCisJYmxvY2tbMl0gPSBibG9ja1s0XSA9IHg7CS8qIENvb3JkcyBvZiBwb2ludC4gKi8KKwlibG9ja1szXSA9IGJsb2NrWzVdID0geTsKKwlibG9ja1s2XSA9IDA7CQkJLyogQ29vcmRzIG9mIGJvdW5kaW5nIGJveC4gKi8KKwlibG9ja1s3XSA9IDA7CisJZ3VpX21jaF9nZXRfc2NyZWVuX2RpbWVuc2lvbnMoJmJsb2NrWzhdLCAmYmxvY2tbOV0pOworCisJZHJhZ194X29mZnNldCA9IGRyYWdfeV9vZmZzZXQgPSAwOworCisJc3dpKFdpbXBfRHJhZ0JveCwgMCwgYmxvY2spOworCXJvX2RyYWdnaW5nID0gRFJBR19TRUxFQ1RJT047CisJZHJhZ19idXR0b24gPSB2aW1fYnV0dG9uOworCWRyYWdfbW9kaWZpZXJzID0gbW9kaWZpZXJzOworCisJdmltX2J1dHRvbiB8PSBNT1VTRV9EUkFHOworICAgIH0KKworICAgIGd1aV9zZW5kX21vdXNlX2V2ZW50KAorCQl2aW1fYnV0dG9uLAorCQl4IC0gbWluX3gsCisJCW1heF95IC0geSwKKwkJYnV0dG9uICYgMHhmID8gVFJVRSA6IEZBTFNFLAkvKiBkY2xpY2sgKi8KKwkJbW9kaWZpZXJzKTsKK30KKworICAgIHZvaWQKK3JvX2NvbnRpbnVlX2RyYWcoYmxvY2spCisgICAgaW50ICpibG9jazsJCQkvKiBKdXN0IHVzZWQgYXMgc2NyYXAuICovCit7CisgICAgaW50IHgsIHk7CisKKyAgICAvKiBHZXQgc2NyZWVuIGNvb3JkcyBvZiBwb2ludGVyLiAqLworICAgIHN3aShXaW1wX0dldFBvaW50ZXJJbmZvLCAwLCBibG9jayk7CisgICAgeCA9IGJsb2NrWzBdICsgZHJhZ194X29mZnNldDsKKyAgICB5ID0gYmxvY2tbMV0gKyBkcmFnX3lfb2Zmc2V0OworCisgICAgYmxvY2tbMF0gPSBndWkud2luZG93X2hhbmRsZTsKKyAgICBzd2koV2ltcF9HZXRXaW5kb3dTdGF0ZSwgMCwgYmxvY2spOworCisgICAgaWYgKHJvX2RyYWdnaW5nID09IERSQUdfUkVTSVpFX1dJTkRPVykKKyAgICB7CisJLyogUmVzaXplaW5nIHRoZSBtYWluIHdpbmRvdy4gKi8KKwlibG9ja1syXSA9IHk7CisJYmxvY2tbM10gPSB4OworCXJvX29wZW5fbWFpbihibG9jayk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogU2VsZWN0aW5nIHNvbWUgdGV4dC4gKi8KKwlndWlfc2VuZF9tb3VzZV9ldmVudCgKKwkgICAgZHJhZ19idXR0b24gfCBNT1VTRV9EUkFHLAkvKiBBbHdheXMgcmVwb3J0IHRoZSBzYW1lIGJ1dHRvbiAqLworCSAgICB4IC0gYmxvY2tbMV0sCisJICAgIGJsb2NrWzRdIC0geSwKKwkgICAgRkFMU0UsCQkJLyogTm90IGEgZG91YmxlIGNsaWNrLiAqLworCSAgICBkcmFnX21vZGlmaWVycyk7CisgICAgfQorfQorCisvKiBVc2VyIGhhcyByZWxlYXNlZCBhbGwgbW91c2UgYnV0dG9ucywgbWFya2luZyB0aGUgZW5kIG9mIGEgZHJhZy4gKi8KKyAgICB2b2lkCityb19kcmFnX2ZpbmlzaGVkKGJsb2NrKQorICAgIGludCAqYmxvY2s7Cit7CisgICAgaW50IHg7CisgICAgaW50IHk7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisKKyAgICAvKiBJIGRvbid0IHRydXN0IHRoZSBib3ggcmV0dXJuZWQgYnkgV2ltcF9Qb2xsOyBsb29rIGF0IHRoZSBwb2ludGVyCisgICAgICogb3Vyc2VsdmVzLgorICAgICAqLworICAgIHN3aShXaW1wX0dldFBvaW50ZXJJbmZvLCAwLCBibG9jayk7CisgICAgeCA9IGJsb2NrWzBdICsgZHJhZ194X29mZnNldDsKKyAgICB5ID0gYmxvY2tbMV0gKyBkcmFnX3lfb2Zmc2V0OworCisgICAgaWYgKHJvX2RyYWdnaW5nID09IERSQUdfUkVTSVpFX1dJTkRPVykKKyAgICB7CisJYmxvY2tbMF0gPSBndWkud2luZG93X2hhbmRsZTsKKwlzd2koV2ltcF9HZXRXaW5kb3dTdGF0ZSwgMCwgYmxvY2spOworCWJsb2NrWzJdID0geTsKKwlibG9ja1szXSA9IHg7CisJcm9fb3Blbl9tYWluKGJsb2NrKTsKKworCXdpZHRoID0gKGJsb2NrWzNdIC0gYmxvY2tbMV0pOworCWhlaWdodCA9IChibG9ja1s0XSAtIGJsb2NrWzJdKTsKKworCXN3aShXaW1wX0ZvcmNlUmVkcmF3LCBndWkud2luZG93X2hhbmRsZSwgMCwgLWhlaWdodCwgd2lkdGgsIDApOworCWd1aV9yZXNpemVfc2hlbGwod2lkdGgsIGhlaWdodCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJYmxvY2tbMF0gPSBndWkud2luZG93X2hhbmRsZTsKKwlzd2koV2ltcF9HZXRXaW5kb3dTdGF0ZSwgMCwgYmxvY2spOworCWd1aV9zZW5kX21vdXNlX2V2ZW50KAorCQlNT1VTRV9SRUxFQVNFLAorCQl4IC0gYmxvY2tbMV0sCisJCWJsb2NrWzRdIC0geSwKKwkJRkFMU0UsCQkJLyogbm90IGEgZG91YmxlIGNsaWNrICovCisJCWRyYWdfbW9kaWZpZXJzKTsKKyAgICB9CisgICAgcm9fZHJhZ2dpbmcgPSBEUkFHX0ZBTFNFOworfQorCisvKiBMb2FkIHRoZSBmaWxlL3BhdGhuYW1lIGdpdmVuIGluIGJsb2NrIGludG8gYSBbbmV3XSBidWZmZXIuCisgKgorICogTW9kaWZpZXIJQWN0aW9uCisgKgorICogTm9uZQkJOmNvbmZpcm0gZSA8ZmlsZT4KKyAqIEN0cmwJCTpzcCA8ZmlsZT4KKyAqIFNoaWZ0CTxmaWxlPgorICoKKyAqIEluc2VydCBpbnRvIHR5cGVidWYsIGF0IHRoZSBzdGFydC4KKyAqIElmIGxvYWRpbmcgZnJvbSAhU2NyYXAgdGhlbiB1c2Ugc2F2ZWQgbGVhZm5hbWUgaW5zdGVhZCwgYW5kCisgKiBkZWxldGUgdGhlIHNjcmFwIGZpbGUuIEFsc28sIGlnbm9yZSBzaGlmdCBrZXkuCisgKgorICogTkI6IERvZXNuJ3Qgc2VuZCBEYXRhTG9hZEFjayAob3RoZXIgYXBwIG1pZ2h0IGRlbGV0ZSB0ZW1wIGZpbGU/KS4KKyAqLworICAgIHZvaWQKK3JvX2RhdGFsb2FkKGJsb2NrKQorICAgIGludAkgICAgKmJsb2NrOworeworICAgIGNoYXJfdSAgbmV3X3BhdGhbTUFYUEFUSExdOworICAgIGNoYXJfdSAgKnBhdGggPSAoKGNoYXJfdSAqKSBibG9jaykgKyA0NDsKKyAgICBpbnQJICAgIHNjcmFwID0gRkFMU0U7CisKKyAgICBpZiAoYmxvY2tbM10gPT0gbGVhZl9yZWYgJiYgbGVhZl9uYW1lKQorCXNjcmFwID0gVFJVRTsKKworICAgIHN3aXRjaCAoZ2V0X3JlYWxfc3RhdGUoKSAmIDB4ZmYpCisgICAgeworCWNhc2UgSU5TRVJUOgorCWNhc2UgQ01ETElORToKKwljYXNlIENNRExJTkUrTEFOR01BUDoKKwkgICAgLyogRm9yIGluc2VydCBtb2RlIHdlIGNhbiBvbmx5IGluc2VydCB0aGUgcGF0aG5hbWUgKGN1cnJlbnRseSkKKwkgICAgICogTWFrZSBzdXJlIFNoaWZ0IGlzIHByZXNzZWQuCisJICAgICAqLworCSAgICBzd2koT1NfQnl0ZSwgMTIxLCAweDgwKTsJICAgIC8qIElzIFNoaWZ0IHByZXNzZWQ/ICovCisJICAgIGlmIChyMSA9PSAweGZmKQorCSAgICB7CisJCWluc190eXBlYnVmKCIgIiwgUkVNQVBfTk9ORSwgMCwgVFJVRSwgRkFMU0UpOworCQlpbnNfdHlwZWJ1ZihwYXRoLCBSRU1BUF9OT05FLCAwLCBUUlVFLCBGQUxTRSk7CisJCXJvX3JldHVybl9lYXJseSA9IFRSVUU7CQkgICAgLyogUmV0dXJuIGV2ZW4gdGhvdWdoIG5vdGhpbmcgd2FzIHR5cGVkLiAqLworCSAgICB9CisJICAgIGVsc2UKKwkJc3dpKFdpbXBfUmVwb3J0RXJyb3IsCisJCQkiXDBcMFwwXDBTb3JyeSwgeW91IGNhbiBvbmx5IGxvYWQgdGV4dCBpbiBub3JtYWwgbW9kZSIsIDUsICJWaW0iKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIE5PUk1BTDoKKwkgICAgcm9fcmV0dXJuX2Vhcmx5ID0gVFJVRTsJICAgIC8qIFJldHVybiBldmVuIHRob3VnaCBub3RoaW5nIHdhcyB0eXBlZC4gKi8KKworCSAgICBpZiAoc2NyYXApCQkJICAgIC8qIFJlbW92ZSA8V2ltcCRTY3JhcD4uIExhdGVyLiAqLworCQlpbnNfdHlwZWJ1ZigiOiF+cmVtb3ZlIDxXaW1wJFNjcmFwPlxyIiwgUkVNQVBfTk9ORSwgMCwgVFJVRSwgRkFMU0UpOworCisJICAgIC8qIEluc2VydCB7OnNwICw6Y29uZmlybSBlIH1bK2ZcIDxsZWFmPiBdPGZpbGU+PENSPiAqLworCSAgICBpbnNfdHlwZWJ1ZigiXHIiLCBSRU1BUF9OT05FLCAwLCBUUlVFLCBGQUxTRSk7CisJICAgIGluc190eXBlYnVmKHBhdGgsIFJFTUFQX05PTkUsIDAsIFRSVUUsIEZBTFNFKTsKKwkgICAgaW5zX3R5cGVidWYoIiAiLCBSRU1BUF9OT05FLCAwLCBUUlVFLCBGQUxTRSk7CisKKwkgICAgaWYgKHNjcmFwKQorCSAgICB7CisJCS8qIExvYWRpbmcgdmlhICFTY3JhcCAtIGNoYW5nZSBwYXRobmFtZSB0byBzdG9yZWQgbGVhZm5hbWUgKi8KKwkJaW5zX3R5cGVidWYobGVhZl9uYW1lLCBSRU1BUF9OT05FLCAwLCBUUlVFLCBGQUxTRSk7CisJCWluc190eXBlYnVmKCIgK2ZcXCAiLCBSRU1BUF9OT05FLCAwLCBUUlVFLCBGQUxTRSk7CisJCWxlYWZfcmVmID0gMDsKKwkJdmltX2ZyZWUobGVhZl9uYW1lKTsKKwkJbGVhZl9uYW1lID0gTlVMTDsKKwkgICAgfQorCisJICAgIHN3aShPU19CeXRlLCAxMjEsIDB4ODEpOwkgICAgLyogSXMgQ3RybCBwcmVzc2VkPyAqLworCSAgICBpZiAocjEgPT0gMHhmZikKKwkJLyogWWVzLCBzcGxpdCB3aW5kb3cgKi8KKwkJaW5zX3R5cGVidWYoIjpzcCIsIFJFTUFQX05PTkUsIDAsIFRSVUUsIEZBTFNFKTsKKwkgICAgZWxzZQorCQlpbnNfdHlwZWJ1ZigiOmNvbmZpcm0gZSIsIFJFTUFQX05PTkUsIDAsIFRSVUUsIEZBTFNFKTsKKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBzd2koV2ltcF9SZXBvcnRFcnJvciwgIlwwXDBcMFwwWW91IGNhbiBvbmx5IGxvYWQgdGV4dCBpbiBub3JtYWwgbW9kZS4iLCA1LCAiVmltIik7CisgICAgfQorICAgIC8qIFNlbmQgRGF0YVNhdmVBY2sgc28gb3RoZXIgcHJvZ3JhbSBkb2Vzbid0IHRoaW5rIHdlIGRpZWQKKyAgICAgKiBhbmQgZGVsZXRlIDxXaW1wJFNjcmFwPi4KKyAgICAgKi8KKyAgICBibG9ja1szXSA9IGJsb2NrWzJdOworICAgIGJsb2NrWzRdID0gNDsKKyAgICBzd2koV2ltcF9TZW5kTWVzc2FnZSwgMTcsIGJsb2NrLCBibG9ja1sxXSk7Cit9CisKKyAgICB2b2lkCityb19kYXRhc2F2ZShibG9jaykKKyAgICBpbnQJICAgICpibG9jazsKK3sKKyAgICBjaGFyX3UgKnBhdGggPSAoKGNoYXJfdSAqKSBibG9jaykgKyA0NDsKKworICAgIC8qIFByZXNlcnZlIHRoZSBuYW1lIGdpdmVuIHNvIHdlIGNhbiB1c2UgaXQsIG5vdCA8V2ltcCRTY3JhcD4gKi8KKyAgICBpZiAobGVhZl9uYW1lKQorCXZpbV9mcmVlKGxlYWZfbmFtZSk7CisgICAgbGVhZl9uYW1lID0gdmltX3N0cnNhdmUocGF0aCk7CisKKyAgICBibG9ja1s5XSA9IC0xOwkgICAgLyogRmlsZSBpcyB1bnNhZmUuICovCisgICAgc3RyY3B5KHBhdGgsICI8V2ltcCRTY3JhcD4iKTsKKyAgICBibG9ja1swXSA9IDYwOworICAgIGJsb2NrWzNdID0gYmxvY2tbMl07CisgICAgYmxvY2tbNF0gPSAyOworICAgIHN3aShXaW1wX1NlbmRNZXNzYWdlLCAxNywgYmxvY2ssIGJsb2NrWzFdKTsKKworICAgIGxlYWZfcmVmID0gYmxvY2tbMl07Cit9CisKKyAgICB2b2lkCityb19tZXNzYWdlKGJsb2NrKQorICAgIGludCAqYmxvY2s7Cit7CisgICAgY2hhcl91CSpidWZmZXI7CisgICAgbG9uZ191CWxlbjsKKworICAgIGlmIChibG9ja1sxXSA9PSB0YXNrX2hhbmRsZSkKKwlyZXR1cm47CQkJICAgIC8qIERvbid0IHRhbGsgdG8gb3Vyc2VsZiEgKi8KKyAgICBzd2l0Y2ggKGJsb2NrWzRdKQorICAgIHsKKwljYXNlIDA6CQkvKiBRdWl0LiAqLworCSAgICBpZiAoYmxvY2tbNF0gPT0gMCkKKwkJcm9fcXVpdCgpOworCSAgICBicmVhazsKKwljYXNlIDE6CS8qIERhdGFTYXZlICovCisJICAgIHJvX2RhdGFzYXZlKGJsb2NrKTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgkJLyogRGF0YVNhdmVBY2suICovCisJICAgIGlmIChjbGlwX2NvbnZlcnRfc2VsZWN0aW9uKCZidWZmZXIsICZsZW4sICZjbGlwX3N0YXIpID09IC0xKQorCQlyZXR1cm47CisKKwkgICAgLyogU2F2ZSB0aGUgY2xpcGJvYXJkIGNvbnRlbnRzIHRvIGEgZmlsZS4gKi8KKwkgICAgc3dpKE9TX0ZpbGUsIDEwLCAoKGNoYXJfdSAqKSBibG9jaykgKyA0NCwgMHhmZmYsIDAsIGJ1ZmZlciwgYnVmZmVyICsgbGVuKTsKKworCSAgICAvKiBBY2sgd2l0aCBEYXRhTG9hZCBtZXNzYWdlLiAqLworCSAgICBibG9ja1szXSA9IGJsb2NrWzJdOworCSAgICBibG9ja1s0XSA9IDM7CisJICAgIGJsb2NrWzldID0gbGVuOworCSAgICBzd2koV2ltcF9TZW5kTWVzc2FnZSwgMTcsIGJsb2NrLCBibG9ja1sxXSk7CisKKwkgICAgdmltX2ZyZWUoYnVmZmVyKTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgkJLyogRGF0YUxvYWQgKi8KKwkgICAgcm9fZGF0YWxvYWQoYmxvY2spOworCSAgICBicmVhazsKKwljYXNlIDg6CQkvKiBQcmVRdWl0ICovCisJICAgIHJvX3ByZXF1aXQoYmxvY2spOworCSAgICBicmVhazsKKwljYXNlIDB4ZjoJLyogTG9zZSBjbGlwYm9hcmQuICovCisJICAgIGlmIChibG9ja1s1XSAmIDQpCisJICAgIHsKKwkJY2xpcF9mcmVlX3NlbGVjdGlvbigmY2xpcF9zdGFyKTsKKwkJY2xpcF9zdGFyLm93bmVkID0gRkFMU0U7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAweDEwOgkvKiBEYXRhUmVxdWVzdCAoY2xpcF9zdGFyKSAqLworCSAgICBpZiAoY2xpcF9zdGFyLm93bmVkKQorCSAgICB7CisJCWludCByb3dzOworCisJCS8qIFRlbGwgb3RoZXIgcHJvZ3JhbSB0aGF0IHdlIGhhdmUgdGhlIGNsaXBib2FyZC4gKi8KKwkJYmxvY2tbMF0gPSA1MjsKKwkJYmxvY2tbM10gPSBibG9ja1syXTsJICAgIC8qIENvcHkgbXlyZWYgdG8geW91cnJlZi4gKi8KKwkJYmxvY2tbNF0gPSAxOwkJICAgIC8qIERhdGFTYXZlIG1lc3NhZ2UuICovCisJCS8qIENyZWF0ZSBhbiBlc3RpbWF0ZSBmb3IgdGhlIHNpemUgKGxhcmdlciBvciBzYW1lIGFzIHRydWUKKwkJICogdmFsdWUpICovCisJCXJvd3MgPSBjbGlwX3N0YXIuZW5kLmxudW0gLSBjbGlwX3N0YXIuc3RhcnQubG51bTsKKwkJaWYgKHJvd3MgPCAwKQorCQkgICAgcm93cyA9IC1yb3dzOworCQlibG9ja1s5XSA9IChyb3dzICsgMSkgKiBDb2x1bW5zICsgMTsgLyogQWRkIG9uZSBmb3IgcG9zc2libGUKKwkJCQkJCQlmaW5hbCBuZXdsaW5lLiAqLworCQlibG9ja1sxMF0gPSAweGZmZjsJICAgIC8qIENsaXBib2FyZCBpcyB0ZXh0LiAqLworCQlzdHJjcHkoICgoY2hhcl91ICopIGJsb2NrKSArIDQ0LCAiVmltQ2xpcCIpOworCQlzd2koV2ltcF9TZW5kTWVzc2FnZSwgMTcsIGJsb2NrLCBibG9ja1sxXSk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAweDQwMGMxOgkvKiBNb2RlIGNoYW5nZSAqLworCSAgICBjaGFuZ2VkX21vZGUgPSBUUlVFOwkJLyogRmxhZyAtIHVwZGF0ZSBvbiBuZXh0IE9wZW5XaW5kb3cgKi8KKwkgICAgaWYgKHphcF9yZWRyYXcpCisJICAgIHsKKwkJLyogSksyMzA3OTgsIHJlLWluaXRpYWxpc2UgWmFwUmVkcmF3IHN0dWZmICovCisJCWlmIChyb196YXBfcmVkcmF3X2luaXRpYWxpc2UoKSA9PSBGQUlMKQorCQkgICAgemFwX3JlZHJhdyA9IEZBTFNFOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgMHg0MDBjMzoJLyogVGFza0Nsb3NlRG93biAqLworCSAgICBpZiAoYmxvY2tbMV0gPT0gY2hpbGRfaGFuZGxlKQorCQljaGlsZF9oYW5kbGUgPSAwOworCSAgICBicmVhazsKKyAgICB9Cit9CisKKy8qCisgKiBDb252ZXJ0cyBhIHNjcm9sbGJhcidzIHdpbmRvdyBoYW5kbGUgaW50byBhIHNjcm9sbGJhciBwb2ludGVyLgorICogTlVMTCBvbiBmYWlsdXJlLgorICovCisgICAgc2Nyb2xsYmFyX1QgKgorcm9fZmluZF9zYmFyKGlkKQorICAgIGludAkJaWQ7Cit7CisgICAgd2luX1QJKndwOworCisgICAgaWYgKGd1aS5ib3R0b21fc2Jhci5pZCA9PSBpZCkKKwlyZXR1cm4gJmd1aS5ib3R0b21fc2JhcjsKKyAgICBGT1JfQUxMX1dJTkRPV1Mod3ApCisgICAgeworCWlmICh3cC0+d19zY3JvbGxiYXJzW1NCQVJfTEVGVF0uaWQgPT0gaWQpCisJICAgIHJldHVybiAmd3AtPndfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdOworCWlmICh3cC0+d19zY3JvbGxiYXJzW1NCQVJfUklHSFRdLmlkID09IGlkKQorCSAgICByZXR1cm4gJndwLT53X3Njcm9sbGJhcnNbU0JBUl9SSUdIVF07CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCisgICAgdm9pZAorc2Nyb2xsX3RvKGxpbmUsIHNiKQorICAgIGludCBzYjsJLyogU2Nyb2xsYmFyIG51bWJlciAqLworICAgIGludCBsaW5lOworeworICAgIGNoYXJfdSBjb2RlWzhdOworCisgICAgLyogRG9uJ3QgcHV0IGV2ZW50cyBpbiB0aGUgaW5wdXQgcXVldWUgbm93LiAqLworICAgIGlmIChob2xkX2d1aV9ldmVudHMpCisJcmV0dXJuOworCisgICAgLyogU2VuZCBhIHNjcm9sbCBldmVudDoKKyAgICAgKgorICAgICAqIEEgc2Nyb2xsYmFyIGV2ZW50IGlzIENTSSAoTk9UIEtfU1BFQ0lBTCksIEtTX1ZFUl9TQ1JPTExCQVIsCisgICAgICogS0VfRklMTEVSIGZvbGxvd2VkIGJ5OgorICAgICAqIG9uZSBieXRlIHJlcHJlc2VudGluZyB0aGUgc2Nyb2xsYmFyIG51bWJlciwgYW5kIHRoZW4gZm91ciBieXRlcworICAgICAqIHJlcHJlc2VudGluZyBhIGxvbmdfdSB3aGljaCBpcyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzY3JvbGxiYXIuCisgICAgICovCisgICAgY29kZVswXSA9IENTSTsKKyAgICBjb2RlWzFdID0gS1NfVkVSX1NDUk9MTEJBUjsKKyAgICBjb2RlWzJdID0gS0VfRklMTEVSOworICAgIGNvZGVbM10gPSBzYjsKKyAgICBjb2RlWzRdID0gbGluZSA+PiAyNDsKKyAgICBjb2RlWzVdID0gbGluZSA+PiAxNjsKKyAgICBjb2RlWzZdID0gbGluZSA+PiA4OworICAgIGNvZGVbN10gPSBsaW5lOworICAgIGFkZF90b19pbnB1dF9idWYoY29kZSwgOCk7Cit9CisKKyAgICB2b2lkCitoX3Njcm9sbF90byhjb2wpCisgICAgaW50IGNvbDsKK3sKKyAgICBjaGFyX3UgY29kZVs4XTsKKworICAgIC8qIERvbid0IHB1dCBldmVudHMgaW4gdGhlIGlucHV0IHF1ZXVlIG5vdy4gKi8KKyAgICBpZiAoaG9sZF9ndWlfZXZlbnRzKQorCXJldHVybjsKKworICAgIC8qIFNlbmQgYSBzY3JvbGwgZXZlbnQ6CisgICAgICoKKyAgICAgKiBBIHNjcm9sbGJhciBldmVudCBpcyBDU0kgKE5PVCBLX1NQRUNJQUwpCisgICAgICoKKyAgICAgKiBBIGhvcml6b250YWwgc2Nyb2xsYmFyIGV2ZW50IGlzIEtfU1BFQ0lBTCwgS1NfSE9SX1NDUk9MTEJBUiwKKyAgICAgKiBLRV9GSUxMRVIgZm9sbG93ZWQgYnkgZm91ciBieXRlcyByZXByZXNlbnRpbmcgYSBsb25nX3Ugd2hpY2ggaXMgdGhlCisgICAgICogbmV3IHZhbHVlIG9mIHRoZSBzY3JvbGxiYXIuCisgICAgICovCisgICAgY29kZVswXSA9IENTSTsKKyAgICBjb2RlWzFdID0gS1NfSE9SX1NDUk9MTEJBUjsKKyAgICBjb2RlWzJdID0gS0VfRklMTEVSOworICAgIGNvZGVbNF0gPSBjb2wgPj4gMjQ7CisgICAgY29kZVs1XSA9IGNvbCA+PiAxNjsKKyAgICBjb2RlWzZdID0gY29sID4+IDg7CisgICAgY29kZVs3XSA9IGNvbDsKKyAgICBhZGRfdG9faW5wdXRfYnVmKGNvZGUsIDgpOworfQorCisgICAgdm9pZAorcm9fc2Nyb2xsKGJsb2NrKQorICAgIGludAkJKmJsb2NrOworeworICAgIHNjcm9sbGJhcl9UCSpzYjsKKyAgICBpbnQJCW9mZnNldDsKKyAgICB3aW5fVAkqd3A7CisKKyAgICAvKiBCbG9jayBpcyByZWFkeSBmb3IgV2ltcF9PcGVuV2luZG93LCBhbmQgYWxzbyBjb250YWluczoKKyAgICAgKgorICAgICAqICszMiA9IHNjcm9sbCBYIGRpcmVjdGlvbiAoLTIgLi4gKzIpCisgICAgICogKzM2ID0gc2Nyb2xsIFkgZGlyZWN0aW9uICgtMiAuLiArMikKKyAgICAgKi8KKworICAgIHNiID0gcm9fZmluZF9zYmFyKGJsb2NrWzBdKTsKKyAgICBpZiAoIXNiKQorCXJldHVybjsJCS8qIFdpbmRvdyBub3QgZm91bmQgKGVycm9yKS4gKi8KKworICAgIHdwID0gc2ItPiB3cDsKKworICAgIGlmICh3cCA9PSBOVUxMKQorICAgIHsKKwkvKiBIb3Jpem9udGFsIGJhci4gKi8KKwlvZmZzZXQgPSBibG9ja1s4XTsKKwlpZiAob2Zmc2V0ID09IC0yKQorCSAgICBvZmZzZXQgPSAoYmxvY2tbMV0gLSBibG9ja1szXSkgLyBndWkuY2hhcl93aWR0aDsKKwllbHNlIGlmIChvZmZzZXQgPT0gMikKKwkgICAgb2Zmc2V0ID0gKGJsb2NrWzNdIC0gYmxvY2tbMV0pIC8gZ3VpLmNoYXJfd2lkdGg7CisKKwlibG9ja1s1XSArPSBvZmZzZXQgKiBndWkuY2hhcl93aWR0aDsKKworCWd1aV9kcmFnX3Njcm9sbGJhcihzYiwgYmxvY2tbNV0gLyBndWkuY2hhcl93aWR0aCwgRkFMU0UpOworCisJc3dpKFdpbXBfT3BlbldpbmRvdywgMCwgYmxvY2spOworICAgIH0KKyAgICBlbHNlCisgICAgeworCW9mZnNldCA9IC1ibG9ja1s5XTsKKwlpZiAob2Zmc2V0ID09IC0yKQorCSAgICBvZmZzZXQgPSAtKHdwIC0+IHdfaGVpZ2h0IC0gMSk7CisJZWxzZSBpZiAob2Zmc2V0ID09IDIpCisJICAgIG9mZnNldCA9IHdwIC0+IHdfaGVpZ2h0IC0gMTsKKworCS8qIFBvc3NpYmx5IHdlIHNob3VsZCByZXBvc2l0aW9uIHRoZSBzY3JvbGxiYXI/CisJICogVmltIHNlZW1zIHRvIHVwZGF0ZSB0aGUgYmFyIGFueXdheS4uLgorCSAqLworCWd1aV9kcmFnX3Njcm9sbGJhcihzYiwgb2Zmc2V0IC0gKGJsb2NrWzZdIC8gZ3VpLmNoYXJfaGVpZ2h0KSwgRkFMU0UpOworICAgIH0KK30KKworLyogTW92ZSBhIHdpbmRvdyBieSBhIGdpdmVuIG9mZnNldC4gVXNlZCB0byBzaW11bGF0ZSB0aGUgZnVuY3Rpb24gb2YgdGhlCisgKiBuZXN0ZWQgd2ltcC4KKyAqLworICAgIHZvaWQKK3JvX21vdmVfY2hpbGQod2luZG93LCB4LCB5LCBwb3Nfd2FudGVkLCBwb3NfZ290KQorICAgIGludAl3aW5kb3c7CisgICAgaW50IHgseTsJCS8qIG9mZnNldCB0byBtb3ZlIGJ5ICovCisgICAgaW50CXBvc193YW50ZWQsIHBvc19nb3Q7Cit7CisgICAgaW50CWJsb2NrWzEwXTsKKworICAgIGJsb2NrWzBdID0gd2luZG93OworICAgIHN3aShXaW1wX0dldFdpbmRvd1N0YXRlLCAwLCBibG9jayk7CisgICAgYmxvY2tbMV0gKz0geDsKKyAgICBibG9ja1syXSArPSB5OworICAgIGJsb2NrWzNdICs9IHg7CisgICAgYmxvY2tbNF0gKz0geTsKKyAgICBpZiAocG9zX3dhbnRlZCA9PSAtMSkKKwlibG9ja1s3XSA9IC0xOworICAgIGVsc2UgaWYgKHBvc193YW50ZWQgPT0gLTIpCisJYmxvY2tbN10gPSBwb3NfZ290OworICAgIHN3aShXaW1wX09wZW5XaW5kb3csIDAsIGJsb2NrKTsKK30KKworLyogT3BlbiB0aGUgbWFpbiB3aW5kb3cuIEFsc28gdXBkYXRlcyBzY3JvbGxiYXJzIGlmIHdlIGFyZSBub3QKKyAqIHVzaW5nIHRoZSBuZXN0ZWQgV2ltcC4KKyAqIElmIHdlIGhhdmUganVzdCBjaGFuZ2VkIG1vZGUgdGhlbiByZS1yZWFkIGFsbCB2YWx1ZXMuCisgKi8KKyAgICB2b2lkCityb19vcGVuX21haW4oYmxvY2spCisgICAgaW50CSAgICAqYmxvY2s7Cit7CisgICAgaW50CSAgICB0b2dnbGVfc2l6ZTsKKworICAgIC8qIEZpbmQgb3V0IGlmIHRoZSB1c2VyIGNsaWNrZWQgb24gdGhlIHRvZ2dsZSBzaXplIGljb24uICovCisgICAgYmxvY2tbMjBdID0gYmxvY2tbMF07CisgICAgc3dpKFdpbXBfR2V0V2luZG93U3RhdGUsIDAsIGJsb2NrICsgMjApOworICAgIHRvZ2dsZV9zaXplID0gYmxvY2tbMjhdICYgKDEgPDwgMTkpOworCisgICAgaWYgKG5lc3RlZF93aW1wKQorICAgIHsKKwlzd2koV2ltcF9PcGVuV2luZG93LCAwLCBibG9jayk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaW50CW9sZFsxMF07CisJaW50CXhfb2Zmc2V0LCB5X29mZnNldDsJICAgIC8qIE1vdmUgY2hpbGRyZW4gc2FtZSBhcyBwYXJlbnQuICovCisJaW50CXBvc193YW50ZWQsIHBvc19nb3Q7CisJaW50CWxlZnRfYmFyICA9IGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfTEVGVF07CisJaW50CXJpZ2h0X2JhciA9IGd1aS53aGljaF9zY3JvbGxiYXJzW1NCQVJfUklHSFRdOworCXdpbl9UCSp3cDsKKworCS8qIFRocmVlIGNhc2VzIHRvIHRoaW5rIGFib3V0OgorCSAqIDEpIE1vdmUgdG8gdG9wLiBPcGVuIGVhY2ggd2luZG93IGF0IHRoZSB0b3AuCisJICogMikgU2FtZSBzdGFjayBwb3NpdGlvbi4gT3BlbiBlYWNoIHdpdGggc2FtZSBwb3NpdGlvbi4KKwkgKiAzKSBPcGVuIGF0IGJvdHRvbS4gT3BlbiBjaGlsZHJlbiB3aXRoIHBhcmVudCdzIG5ldyBwb3NpdGlvbi4KKwkgKi8KKworCW9sZFswXSA9IGJsb2NrWzBdOworCXN3aShXaW1wX0dldFdpbmRvd1N0YXRlLCAwLCBvbGQpOworCXBvc193YW50ZWQgPSBibG9ja1s3XTsKKwlzd2koV2ltcF9PcGVuV2luZG93LCAwLCBibG9jayk7CisJLyogQmxvY2sgdXBkYXRlZCBieSBPcGVuV2luZG93PyBJIGRvbid0IHRoaW5rIHNvISAqLworCXN3aShXaW1wX0dldFdpbmRvd1N0YXRlLCAwLCBibG9jayk7CisJcG9zX2dvdCA9IGJsb2NrWzddOworCisJeF9vZmZzZXQgPSBibG9ja1sxXSAtIG9sZFsxXTsKKwl5X29mZnNldCA9IGJsb2NrWzRdIC0gb2xkWzRdOworCWlmICh4X29mZnNldCB8fCB5X29mZnNldCB8fCBwb3Nfd2FudGVkID09IC0xIHx8IHBvc193YW50ZWQgPT0gLTIpCisJeworCSAgICAvKiBJZiBwYXJlbnQgaGFzIG1vdmVkLCByZS1vcGVuIGFsbCB0aGUgY2hpbGQgd2luZG93cy4gKi8KKwkgICAgRk9SX0FMTF9XSU5ET1dTKHdwKQorCSAgICB7CisJCS8qIFJlb3BlbiBzY3JvbGxiYXJzIGZvciB0aGlzIHdpbmRvdy4gKi8KKwkJaWYgKGxlZnRfYmFyKQorCQkgICAgcm9fbW92ZV9jaGlsZCh3cCAtPiB3X3Njcm9sbGJhcnNbU0JBUl9MRUZUXS5pZCwKKwkJCQl4X29mZnNldCwgeV9vZmZzZXQsCisJCQkJcG9zX3dhbnRlZCwgcG9zX2dvdCk7CisJCWlmIChyaWdodF9iYXIpCisJCSAgICByb19tb3ZlX2NoaWxkKHdwIC0+IHdfc2Nyb2xsYmFyc1tTQkFSX1JJR0hUXS5pZCwKKwkJCQl4X29mZnNldCwgeV9vZmZzZXQsCisJCQkJcG9zX3dhbnRlZCwgcG9zX2dvdCk7CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIChjaGFuZ2VkX21vZGUgfHwgdG9nZ2xlX3NpemUpCisgICAgeworCWludAl3aWR0aCwgaGVpZ2h0OworCisJaWYgKGNoYW5nZWRfbW9kZSkKKwkgICAgcm9fbWVhc3VyZV90b29scygpOworCWJsb2NrWzBdID0gZ3VpLndpbmRvd19oYW5kbGU7CisJc3dpKFdpbXBfR2V0V2luZG93U3RhdGUsIDAsIGJsb2NrKTsKKworCXdpZHRoID0gYmxvY2tbM10gLSBibG9ja1sxXTsKKwloZWlnaHQgPSBibG9ja1s0XSAtIGJsb2NrWzJdOworCXN3aShXaW1wX0ZvcmNlUmVkcmF3LCBndWkud2luZG93X2hhbmRsZSwgMCwgLWhlaWdodCwgd2lkdGgsIDApOworCWd1aV9yZXNpemVfc2hlbGwod2lkdGgsIGhlaWdodCk7CisJY2hhbmdlZF9tb2RlID0gRkFMU0U7CisgICAgfQorfQorCisgICAgdm9pZAorcm9fb3Blbl93aW5kb3coYmxvY2spCisgICAgaW50CQkqYmxvY2s7Cit7CisgICAgaW50CQlwb3M7CisgICAgc2Nyb2xsYmFyX1QgKnNiOworCisgICAgaWYgKGJsb2NrWzBdID09IGd1aS53aW5kb3dfaGFuZGxlKQorCXJvX29wZW5fbWFpbihibG9jayk7CisgICAgZWxzZQorICAgIHsKKwlzd2koV2ltcF9PcGVuV2luZG93LCAwLCBibG9jayk7CisJaWYgKGJsb2NrWzBdICE9IGd1aS53aW5kb3dfaGFuZGxlKQorCXsKKwkgICAgc2IgPSByb19maW5kX3NiYXIoYmxvY2tbMF0pOworCSAgICBpZiAoc2IpCisJICAgIHsKKwkJaWYgKHNiLT4gd3AgIT0gTlVMTCkKKwkJICAgIGd1aV9kcmFnX3Njcm9sbGJhcihzYiwgLWJsb2NrWzZdIC8gZ3VpLmNoYXJfaGVpZ2h0LCBGQUxTRSk7CisJCWVsc2UKKwkJICAgIGd1aV9kcmFnX3Njcm9sbGJhcihzYiwgYmxvY2tbNV0gLyBndWkuY2hhcl93aWR0aCwgRkFMU0UpOworCSAgICB9CisJfQorICAgIH0KK30KKworICAgIHZvaWQKK3JvX21lbnVfc2VsZWN0aW9uKGJsb2NrKQorICAgIGludAkJKmJsb2NrOworeworICAgIGludAkJKml0ZW0gPSB3aW1wX21lbnUgKyA3OworICAgIHZpbW1lbnVfVAkqbWVudTsKKyAgICAvKiB3aW1wX21lbnUgcG9pbnRzIHRvIGEgd2ltcCBtZW51IHN0cnVjdHVyZSAqLworCisgICAgZm9yICg7OykKKyAgICB7CisJd2hpbGUgKGJsb2NrWzBdLS0pCisJICAgIGl0ZW0gKz0gNjsKKwlpZiAoYmxvY2tbMV0gPT0gLTEpCisJICAgIGJyZWFrOworCWl0ZW0gPSAoKGludCAqKSBpdGVtWzFdKSArIDc7CisJYmxvY2srKzsKKyAgICB9CisgICAgLyogaXRlbSBwb2ludHMgdG8gdGhlIHdpbXAgbWVudSBpdGVtIHN0cnVjdHVyZSBjaG9zZW4gKi8KKyAgICBtZW51ID0gKHZpbW1lbnVfVCAqKSBpdGVtWzVdOworCisgICAgc3dpKFdpbXBfR2V0UG9pbnRlckluZm8sIDAsIGJsb2NrKTsKKyAgICBpZiAoYmxvY2tbMl0gPT0gMSkKKwkvKiBBZGp1c3QgdXNlZCAtIGtlZXAgbWVudSBvcGVuICovCisJc3dpKFdpbXBfQ3JlYXRlTWVudSwgMCwgd2ltcF9tZW51KTsKKworICAgIGlmIChtZW51LT4gY2IpCisJbWVudS0+IGNiKG1lbnUpOworfQorCisgICAgdm9pZAorcm9fb3Blbl9wYXJlbnQoKQoreworICAgIGludCBoZWFkOworICAgIGNoYXJfdSAqaSA9IGN1cmJ1Zi0+IGJfZmZuYW1lOworICAgIGNoYXJfdSAgYnVmZmVyWzI1Nl07CisKKyAgICBoZWFkID0gMDsKKyAgICBmb3IgKDsgKmk7IGkrKykKKyAgICB7CisJaWYgKCppID09ICcuJykKKwkgICAgaGVhZCA9IGkgLSBjdXJidWYtPiBiX2ZmbmFtZTsKKyAgICB9CisKKyAgICAvKiBBcHBlbmQgaGVhZCBjaGFycyB0byBidWZmZXIgKi8KKyAgICBpZiAoaGVhZCA8IDI0MCAmJiBjdXJidWYtPiBiX2ZmbmFtZSAmJiBoZWFkKQorICAgIHsKKwlzdHJjcHkoYnVmZmVyLCAiJWZpbGVyX29wZW5kaXIgIik7CisJc3RybmNweShidWZmZXIgKyAxNSwgY3VyYnVmLT4gYl9mZm5hbWUsIGhlYWQpOworCWJ1ZmZlclsxNSArIGhlYWRdID0gJ1wwJzsKKwlzd2koT1NfQ0xJLCBidWZmZXIpOworICAgIH0KK30KKworICAgIHZvaWQKK3Byb2Nlc3NfZXZlbnQoZXZlbnQsIGJsb2NrKQorICAgIGludCBldmVudDsKKyAgICBpbnQgKmJsb2NrOworeworICAgIHN3aXRjaCAoZXZlbnQpCisgICAgeworCWNhc2UgMDoJCS8qIE5vdGhpbmcgLSB1cGRhdGUgZHJhZyBzdGF0ZS4gKi8KKwkgICAgaWYgKHJvX2RyYWdnaW5nKQorCQlyb19jb250aW51ZV9kcmFnKGJsb2NrKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgkJLyogUmVkcmF3IHdpbmRvdy4gKi8KKwkgICAgcmVkcmF3X3dpbmRvdyhibG9jayk7CisJICAgIGJyZWFrOworCWNhc2UgMjoJCS8qIE9wZW4gd2luZG93LiAqLworCSAgICByb19vcGVuX3dpbmRvdyhibG9jayk7CisJICAgIGJyZWFrOworCWNhc2UgMzoJCS8qIENsb3NlIHdpbmRvdy4gKi8KKwkgICAgc3dpKFdpbXBfR2V0UG9pbnRlckluZm8sIDAsIGJsb2NrICsgMSk7CisJICAgIGlmIChibG9ja1szXSA9PSAxKQorCQlyb19vcGVuX3BhcmVudCgpOworCSAgICBlbHNlCisJCWlmIChyb19va190b19xdWl0KCkpCisJCSAgICByb19xdWl0KCk7CisJICAgIGJyZWFrOworCWNhc2UgNjoJCS8qIE1vdXNlIGNsaWNrLiAqLworCSAgICByb19tb3VzZShibG9jayk7CisJICAgIGJyZWFrOworCWNhc2UgNzoJCS8qIEZpbmlzaGVkIGRyYWcuICovCisJICAgIHJvX2RyYWdfZmluaXNoZWQoYmxvY2spOworCSAgICBicmVhazsKKwljYXNlIDg6CQkvKiBLZXkgcHJlc3NlZC4gKi8KKwkgICAgcm9faW5zZXJ0X2tleSgoY2hhcl91ICopICZibG9ja1s2XSk7CisJICAgIGJyZWFrOworCWNhc2UgOToKKwkgICAgcm9fbWVudV9zZWxlY3Rpb24oYmxvY2spOworCSAgICBicmVhazsKKwljYXNlIDEwOgkvKiBTY3JvbGwgcmVxdWVzdC4gKi8KKwkgICAgcm9fc2Nyb2xsKGJsb2NrKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxMToJLyogTG9zZSBjYXJldC4gKi8KKwkgICAgaWYgKGJsb2NrWzBdID09IGd1aS53aW5kb3dfaGFuZGxlKQorCQlndWlfZm9jdXNfY2hhbmdlKEZBTFNFKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxMjoJLyogR2FpbiBjYXJldC4gKi8KKwkgICAgaWYgKGJsb2NrWzBdID09IGd1aS53aW5kb3dfaGFuZGxlKQorCQlndWlfZm9jdXNfY2hhbmdlKFRSVUUpOworCSAgICBicmVhazsKKwljYXNlIDE3OgkvKiBVc2VyIG1lc3NhZ2UuICovCisJY2FzZSAxODoJLyogVXNlciBtZXNzYWdlIHJlY29yZGVkLiAqLworCSAgICByb19tZXNzYWdlKGJsb2NrKTsKKwkgICAgYnJlYWs7CisgICAgfQorfQorCisvKgorICogR1VJIGlucHV0IHJvdXRpbmUgY2FsbGVkIGJ5IGd1aV93YWl0X2Zvcl9jaGFycygpLiAgV2FpdHMgZm9yIGEgY2hhcmFjdGVyCisgKiBmcm9tIHRoZSBrZXlib2FyZC4KKyAqICB3dGltZSA9PSAtMQkgICAgV2FpdCBmb3JldmVyLgorICogIHd0aW1lID09IDAJICAgIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4KKyAqICB3dGltZSA+IDAJICAgIFdhaXQgd3RpbWUgbWlsbGlzZWNvbmRzIGZvciBhIGNoYXJhY3Rlci4KKyAqIFJldHVybnMgT0sgaWYgYSBjaGFyYWN0ZXIgd2FzIGZvdW5kIHRvIGJlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGdpdmVuIHRpbWUsCisgKiBvciBGQUlMIG90aGVyd2lzZS4KKyAqLworICAgIGludAorZ3VpX21jaF93YWl0X2Zvcl9jaGFycyhsb25nIHd0aW1lKQoreworICAgIGludCBibG9ja1s2NF07CisgICAgaW50CXJlYXNvbjsKKyAgICBpbnQgc3RhcnRfdGltZSA9IC0xOworICAgIGludCBjdGltZSA9IHd0aW1lIC8gMTA7CS8qIGRlbGF5IGluIGNzICovCisKKyAgICBpZiAod3RpbWUgIT0gLTEpCisgICAgeworCXN3aShPU19SZWFkTW9ub3RvbmljVGltZSk7CisJc3RhcnRfdGltZSA9IHIwOworICAgIH0KKworICAgIGZvciAoOzspCisgICAgeworCWlmIChyb19kcmFnZ2luZykKKwkgICAgcmVhc29uID0gd2ltcF9wb2xsKDAsIGJsb2NrKTsJLyogQWx3YXlzIHJldHVybiBpbW1lZGlhdGVseSAqLworCWVsc2UgaWYgKHd0aW1lID09IC0xKQorCSAgICByZWFzb24gPSB3aW1wX3BvbGwoMSwgYmxvY2spOworCWVsc2UKKwkgICAgcmVhc29uID0gd2ltcF9wb2xsaWRsZSgwLCBibG9jaywgc3RhcnRfdGltZSArIGN0aW1lKTsKKworCXByb2Nlc3NfZXZlbnQocmVhc29uLCBibG9jayk7CisKKwlpZiAoaW5wdXRfYXZhaWxhYmxlKCkgfHwgcm9fcmV0dXJuX2Vhcmx5KQorCXsKKwkgICAgcm9fcmV0dXJuX2Vhcmx5ID0gRkFMU0U7CisJICAgIHJldHVybiBPSzsJICAgIC8qIFRoZXJlIGlzIHNvbWV0aGluZyB0byBwcm9jZXNzIChrZXkgLyBtZW51IGV2ZW50KSAqLworCX0KKworCWlmICh3dGltZSAhPSAtMSkKKwl7CisJICAgIHN3aShPU19SZWFkTW9ub3RvbmljVGltZSk7CisJICAgIGlmIChyMCAtIHN0YXJ0X3RpbWUgPiBjdGltZSkKKwkJcmV0dXJuIEZBSUw7CS8qIFdlJ3ZlIGJlZW4gd2FpdGluZyB0b28gbG9uZyAtIHJldHVybiBmYWlsdXJlICovCisJfQorICAgIH0KK30KKworLyogRmx1c2ggYW55IG91dHB1dCB0byB0aGUgc2NyZWVuICovCisgICAgdm9pZAorZ3VpX21jaF9mbHVzaCh2b2lkKQoreworfQorCisvKgorICogQ2xlYXIgYSByZWN0YW5ndWxhciByZWdpb24gb2YgdGhlIHNjcmVlbiBmcm9tIHRleHQgcG9zKHJvdzEsIGNvbDEpIHRvCisgKiAocm93MiwgY29sMikgaW5jbHVzaXZlLgorICovCisgICAgdm9pZAorZ3VpX21jaF9jbGVhcl9ibG9jayhpbnQgcm93MSwgaW50IGNvbDEsIGludCByb3cyLCBpbnQgY29sMikKK3sKKyAgICBzd2koQ29sb3VyVHJhbnNfUmV0dXJuR0NPTCwgZ3VpLmJhY2tfcGl4ZWwgPDwgOCwgMCwgMCwgMTw8NywgMCk7CisgICAgcGxvdF9yZWN0YW5nbGUoOTYgKyA1LCByMCwKKwkJCUZJTExfWChjb2wxKSwgLUZJTExfWShyb3cyICsgMSksCisJCQlGSUxMX1goY29sMiArIDEpLCAtRklMTF9ZKHJvdzEpKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfY2xlYXJfYWxsKHZvaWQpCit7CisgICAgaWYgKHJlZHJhd19ibG9jaykKKyAgICB7CisJc3dpKENvbG91clRyYW5zX1NldEdDT0wsIGd1aS5iYWNrX3BpeGVsIDw8IDgsIDAsIDAsIDE8PDcsIDApOworCXN3aShPU19Xcml0ZUkgKyAxNik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaW50IGJsb2NrWzQ0XTsKKwlibG9ja1swXSA9IGd1aS53aW5kb3dfaGFuZGxlOworCWJsb2NrWzFdID0gMDsKKwlibG9ja1syXSA9IC1ndWkubnVtX3Jvd3MgKiBndWkuY2hhcl9oZWlnaHQ7CisJYmxvY2tbM10gPSBndWkubnVtX2NvbHMgKiBndWkuY2hhcl93aWR0aDsKKwlibG9ja1s0XSA9IDA7CisJc3dpKFdpbXBfVXBkYXRlV2luZG93LCAwLCBibG9jayk7CisJd2hpbGUgKHIwKQorCXsKKwkgICAgc3dpKENvbG91clRyYW5zX1NldEdDT0wsIGd1aS5iYWNrX3BpeGVsIDw8IDgsIDAsIDAsIDE8PDcsIDApOworCSAgICBzd2koT1NfV3JpdGVJICsgMTYpOworCSAgICBzd2koV2ltcF9HZXRSZWN0YW5nbGUsIDAsIGJsb2NrKTsKKwl9CisgICAgfQorfQorCisvKgorICogRGVsZXRlIHRoZSBnaXZlbiBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUgZ2l2ZW4gcm93LCBzY3JvbGxpbmcgdXAgYW55CisgKiB0ZXh0IGZ1cnRoZXIgZG93biB3aXRoaW4gdGhlIHNjcm9sbCByZWdpb24uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RlbGV0ZV9saW5lcyhpbnQgcm93LCBpbnQgbnVtX2xpbmVzKQoreworICAgIGludCB0b3BfZnJvbSA9IC1yb3cgLSBudW1fbGluZXM7CisgICAgaW50IGJvdF9mcm9tID0gLWd1aS5zY3JvbGxfcmVnaW9uX2JvdCAtIDE7CisgICAgaW50IGJvdF90byAgID0gYm90X2Zyb20gKyBudW1fbGluZXM7CisKKyAgICBzd2koQ29sb3VyVHJhbnNfU2V0R0NPTCwgZ3VpLmJhY2tfcGl4ZWwgPDwgOCwgMCwgMCwgMHg4MCwgMCk7CisKKyAgICAvKiBDaGFuZ2VkIHdpdGhvdXQgY2hlY2tpbmchICovCisgICAgc3dpKFdpbXBfQmxvY2tDb3B5LCBndWkud2luZG93X2hhbmRsZSwKKwkJCSAgICBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0ICogZ3VpLmNoYXJfd2lkdGgsCisJCQkgICAgYm90X2Zyb20gKiBndWkuY2hhcl9oZWlnaHQsCisJCQkgICAgKGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0IC0gZ3VpLnNjcm9sbF9yZWdpb25fbGVmdAorCQkJCQkJCSsgMSkgKiBndWkuY2hhcl93aWR0aCwKKwkJCSAgICB0b3BfZnJvbSAqIGd1aS5jaGFyX2hlaWdodCwKKworCQkJICAgIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQgKiBndWkuY2hhcl93aWR0aCwKKwkJCSAgICBib3RfdG8gKiBndWkuY2hhcl9oZWlnaHQpOworCisgICAgZ3VpX2NsZWFyX2Jsb2NrKGd1aS5zY3JvbGxfcmVnaW9uX2JvdCAtIG51bV9saW5lcyArIDEsCisJCQkJCQkgICAgICAgZ3VpLnNjcm9sbF9yZWdpb25fbGVmdCwKKwlndWkuc2Nyb2xsX3JlZ2lvbl9ib3QsIGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0KTsKK30KKworLyoKKyAqIEluc2VydCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGxpbmVzIGJlZm9yZSB0aGUgZ2l2ZW4gcm93LCBzY3JvbGxpbmcgZG93biBhbnkKKyAqIGZvbGxvd2luZyB0ZXh0IHdpdGhpbiB0aGUgc2Nyb2xsIHJlZ2lvbi4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfaW5zZXJ0X2xpbmVzKGludCByb3csIGludCBudW1fbGluZXMpCit7CisgICAgaW50IHRvcF9mcm9tID0gLXJvdzsKKyAgICBpbnQgYm90X3RvICAgPSAtZ3VpLnNjcm9sbF9yZWdpb25fYm90IC0gMTsKKyAgICBpbnQgYm90X2Zyb20gPSBib3RfdG8gKyBudW1fbGluZXM7CisKKyAgICBzd2koQ29sb3VyVHJhbnNfU2V0R0NPTCwgZ3VpLmJhY2tfcGl4ZWwgPDwgOCwgMCwgMCwgMHg4MCwgMCk7CisKKyAgICBzd2koV2ltcF9CbG9ja0NvcHksIGd1aS53aW5kb3dfaGFuZGxlLAorCQkJICAgIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQgKiBndWkuY2hhcl93aWR0aCwKKwkJCSAgICBib3RfZnJvbSAqIGd1aS5jaGFyX2hlaWdodCwKKwkJCSAgICAoZ3VpLnNjcm9sbF9yZWdpb25fcmlnaHQgLSBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0CisJCQkJCQkJKyAxKSAqIGd1aS5jaGFyX3dpZHRoLAorCQkJICAgIHRvcF9mcm9tICogZ3VpLmNoYXJfaGVpZ2h0LAorCisJCQkgICAgZ3VpLnNjcm9sbF9yZWdpb25fbGVmdCAqIGd1aS5jaGFyX3dpZHRoLAorCQkJICAgIGJvdF90byAqIGd1aS5jaGFyX2hlaWdodCk7CisKKyAgICBndWlfY2xlYXJfYmxvY2socm93LCBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0LAorCQkJCXJvdyArIG51bV9saW5lcyAtIDEsIGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0KTsKK30KKworLyogUHV0IHNlbGVjdGlvbiBpbiBjbGlwYm9hcmQgYnVmZmVyLgorICogU2hvdWxkIHdlIGJlY29tZSB0aGUgbmV3IG93bmVyPworICovCisgICAgdm9pZAorY2xpcF9tY2hfcmVxdWVzdF9zZWxlY3Rpb24oVmltQ2xpcGJvYXJkICpjYmQpCit7CisgICAgaW50CQlibG9ja1s2NF07CS8qIFdpbGwgYmUgdXNlZCBpbiBXaW1wX1BvbGwuICovCisgICAgaW50CQlyZWFzb247CisgICAgY2hhcl91CSpidWZmZXI7CisgICAgbG9uZ191CWxlbmd0aDsKKworICAgIGJsb2NrWzBdID0gNDg7CQkJLyogU2l6ZSBvZiBibG9jay4gKi8KKyAgICBibG9ja1szXSA9IDA7CQkJLyogT3JpbmlhbCBtZXNzYWdlLiAqLworICAgIGJsb2NrWzRdID0gMHgxMDsJCQkvKiBEYXRhIHJlcXVlc3QuICovCisgICAgYmxvY2tbNV0gPSBndWkud2luZG93X2hhbmRsZTsKKyAgICBibG9ja1s2XSA9IFJPX0xPQURfQ0xJUEJPQVJEOwkvKiBJbnRlcm5hbCBoYW5kbGUuICovCisgICAgYmxvY2tbN10gPSBibG9ja1s4XSA9IDA7CQkvKiAoeCx5KSBub3QgdXNlZC4gKi8KKyAgICBibG9ja1s5XSA9IDQ7CisgICAgYmxvY2tbMTBdID0gMHhmZmY7CSAgICAvKiBXZSB3YW50IHRleHQgZmlsZXMgaWYgcG9zc2libGUsIEkgdGhpbmsuICovCisgICAgYmxvY2tbMTFdID0gLTE7CSAgICAvKiBFbmQgb2YgbGlzdC4gKi8KKyAgICBzd2koV2ltcF9TZW5kTWVzc2FnZSwgMTcsIGJsb2NrLCAwKTsgICAgLyogQnJvYWRjYXN0IHJlcXVlc3QuICovCisKKyAgICAvKiBPSywgd2UndmUgc2VudCB0aGUgcmVxdWVzdC4gUG9sbCB1bnRpbCB3ZSBnZXQgYSBudWxsIHBvbGwgKGZhaWx1cmUpIG9yCisgICAgICogd2UgbG9hZCB0aGUgY2xpcGJvYXJkLgorICAgICAqIElmIHdlIHJlY2VpdmUgYSBEYXRhU2F2ZSBldmVudCB3aXRoIGljb24gaGFuZGxlID0gLTIgdGhlbiBwdXQgaXQgb24gdGhlCisgICAgICogY2xpcGJvYXJkLiBSSVNDIE9TIHNob3VsZCBlbnN1cmUgdGhhdCBrZXkgZXZlbnRzIHdpbGwgbm90IGJlIGRlbGl2ZXJlZAorICAgICAqIHVudGlsIHRoZSBjbGlwYm9hcmQgb3BlcmF0aW9uIGNvbXBsZXRlcyAodW5sZXNzIHRoZSBvd25lciBzdGFydHMgaWRsaW5nCisgICAgICogLSB3ZSBjYW4ndCB3YWl0IGZvcmV2ZXIhKS4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwlyZWFzb24gPSB3aW1wX3BvbGwoMCwgYmxvY2spOworCWlmIChyZWFzb24gPT0gMCkKKwkgICAgcmV0dXJuOwkgICAgLyogRmFpbGVkIHRvIGdldCBjbGlwYm9hcmQuICovCisJaWYgKChyZWFzb24gPT0gMTcgfHwgcmVhc29uID09IDE4KSAmJgorCQlibG9ja1s0XSA9PSAxICYmIGJsb2NrWzZdID09IFJPX0xPQURfQ0xJUEJPQVJEKQorCSAgICBicmVhazsJICAgIC8qIEdvdCBpdCAtIHN0b3Agd2FpdGluZy4gKi8KKwlwcm9jZXNzX2V2ZW50KHJlYXNvbiwgYmxvY2spOworCWlmIChyb19yZXR1cm5fZWFybHkpCisJICAgIHJldHVybjsKKyAgICB9CisgICAgLyogVGVsbCBvd25lciB0byBzYXZlIGRhdGEgaW4gPFdpbXAkU2NyYXA+LiAqLworICAgIGJsb2NrWzBdID0gNjA7CisgICAgYmxvY2tbM10gPSBibG9ja1syXTsgICAvKiBDb3B5IG15cmVmIC0+IHlvdXJyZWYgKi8KKyAgICBibG9ja1s0XSA9IDI7CSAgICAvKiBEYXRhU2F2ZUFjay4gKi8KKyAgICBibG9ja1s5XSA9IC0xOwkgICAgLyogRGF0YSBpcyB1bnNhZmUuICovCisgICAgc3RyY3B5KCAoKGNoYXJfdSAqKSBibG9jaykgKyA0NCwgIjxXaW1wJFNjcmFwPiIpOworICAgIHN3aShXaW1wX1NlbmRNZXNzYWdlLCAxNywgYmxvY2ssIGJsb2NrWzFdKTsKKworICAgIC8qIFdhaXQgYWdhaW4gZm9yIHJlcGx5LiAqLworICAgIGZvciAoOzspCisgICAgeworCXJlYXNvbiA9IHdpbXBfcG9sbCgwLCBibG9jayk7CisJaWYgKHJlYXNvbiA9PSAwKQorCSAgICByZXR1cm47CS8qIE90aGVyIHByb2dyYW0gaGFzIGdpdmVuIHVwISAqLworCWlmICgocmVhc29uID09IDE3IHx8IHJlYXNvbiA9PSAxOCkgJiYgYmxvY2tbNF0gPT0gMyAmJiBibG9ja1s2XSA9PSBST19MT0FEX0NMSVBCT0FSRCkKKwkgICAgYnJlYWs7CS8qIENsaXBib2FyZCBkYXRhIHNhdmVkIHRvIDxXaW1wJFNjcmFwPiAqLworCXByb2Nlc3NfZXZlbnQocmVhc29uLCBibG9jayk7CisJaWYgKHJvX3JldHVybl9lYXJseSkKKwkgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIDxXaW1wJFNjcmFwPiBjb250YWlucyBjbGlwYm9hcmQgLSBsb2FkIGl0LiAqLworICAgIGlmICh4c3dpKE9TX0ZpbGUsIDE3LCAiPFdpbXAkU2NyYXA+IikgJiB2X2ZsYWcpCisJcmV0dXJuOwkJLyogRXJyb3IhICovCisgICAgaWYgKHIwICE9IDEgJiYgcjAgIT0gMykKKwlyZXR1cm47CisgICAgbGVuZ3RoID0gcjQ7CisKKyAgICBidWZmZXIgPSBsYWxsb2MobGVuZ3RoLCBUUlVFKTsgIC8qIENsYWltIG1lbW9yeSAoYW5kIHJlcG9ydCBlcnJvcnMpLiAqLworICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBpZiAoeHN3aShPU19GaWxlLCAxNiwgIjxXaW1wJFNjcmFwPiIsIGJ1ZmZlciwgMCkgJiB2X2ZsYWcpCisJcmV0dXJuOworCisgICAgY2xpcF95YW5rX3NlbGVjdGlvbihNQ0hBUiwgYnVmZmVyLCBsZW5ndGgsIGNiZCk7CisKKyAgICB2aW1fZnJlZShidWZmZXIpOworCisgICAgc3dpKE9TX0ZTQ29udHJvbCwgMjcsICI8V2ltcCRTY3JhcD4iLCAwLCAwKTsgICAgLyogRGVsZXRlIHRlbXAgZmlsZS4gKi8KKworICAgIGJsb2NrWzRdID0gNDsJCSAgICAvKiBTZW5kIERhdGFMb2FkQWNrLiAqLworICAgIGJsb2NrWzNdID0gYmxvY2tbMl07CSAgICAvKiBDb3B5IG15cmVmIC0+IHlvdXJyZWYuICovCisgICAgc3dpKFdpbXBfU2VuZE1lc3NhZ2UsIDE3LCBibG9jaywgYmxvY2tbMV0pOworfQorCisvKiBOb3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMgdW5kZXIgUklTQyBPUy4gKi8KKyAgICB2b2lkCitjbGlwX21jaF9sb3NlX3NlbGVjdGlvbihWaW1DbGlwYm9hcmQgKmNiZCkKK3sKK30KKworLyogVGVsbCBldmVyeW9uZSB0aGF0IHdlIG5vdyBvd24gdGhlIGNsaXBib2FyZC4KKyAqIFJldHVybiBPSyBpZiBvdXIgY2xhaW0gaXMgYWNjZXB0ZWQgKGFsd2F5cywgdW5kZXIgUklTQyBPUykKKyAqLworICAgIGludAorY2xpcF9tY2hfb3duX3NlbGVjdGlvbihWaW1DbGlwYm9hcmQgKmNiZCkKK3sKKyAgICBpbnQgYmxvY2tbNl07CisgICAgYmxvY2tbMF0gPSAyNDsJLyogTGVuZ3RoIG9mIGJsb2NrLiAgKi8KKyAgICBibG9ja1szXSA9IDA7CS8qIE9yaWdpbmFsIG1lc3NhZ2UuICovCisgICAgYmxvY2tbNF0gPSAweGY7CS8qIENsYWltRW50aXR5LiAqLworICAgIGJsb2NrWzVdID0gMHg0OwkvKiBDbGFpbSBjbGlwYm9hcmQgb25seS4gKi8KKyAgICBzd2koV2ltcF9TZW5kTWVzc2FnZSwgMTcsIGJsb2NrLCAwKTsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBTZW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB0byB0aGUgY2xpcGJvYXJkLiAgRG8gbm90aGluZyBmb3IgWCBiZWNhdXNlIHdlCisgKiB3aWxsIGZpbGwgaW4gdGhlIHNlbGVjdGlvbiBvbmx5IHdoZW4gcmVxdWVzdGVkIGJ5IGFub3RoZXIgYXBwLiBTb3VuZHMgZ29vZAorICogZm9yIFJJU0MgT1MgdG9vLgorICovCisgICAgdm9pZAorY2xpcF9tY2hfc2V0X3NlbGVjdGlvbihWaW1DbGlwYm9hcmQgKmNiZCkKK3sKKyAgICBjbGlwX2dldF9zZWxlY3Rpb24oY2JkKTsKK30KKworLyoKKyAqIE1ha2UgYSBtZW51IGVpdGhlciBncmV5IG9yIG5vdCBncmV5LgorICovCisgICAgdm9pZAorZ3VpX21jaF9tZW51X2dyZXkodmltbWVudV9UICptZW51LCBpbnQgZ3JleSkKK3sKKyAgICBtZW51LT4gZ3JleWVkX291dCA9IGdyZXk7Cit9CisKKy8qCisgKiBNYWtlIG1lbnUgaXRlbSBoaWRkZW4gb3Igbm90IGhpZGRlbgorICovCisgICAgdm9pZAorZ3VpX21jaF9tZW51X2hpZGRlbih2aW1tZW51X1QgKm1lbnUsIGludCBoaWRkZW4pCit7CisgICAgbWVudS0+IGhpZGRlbiA9IGhpZGRlbjsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHNldHRpbmcgYWxsIHRoZSBtZW51cyB0byBncmV5L2hpZGRlbiBvciBub3QuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RyYXdfbWVudWJhcih2b2lkKQoreworICAgIHN3aShXaW1wX0NyZWF0ZU1lbnUsIDAsIC0xKTsKKyAgICBpZiAod2ltcF9tZW51ICE9IChpbnQgKikgLTEpCisgICAgeworCXJvX3JlbW92ZV9tZW51KHdpbXBfbWVudSk7CisJd2ltcF9tZW51ID0gKGludCAqKSAtMTsKKyAgICB9Cit9CisKKy8qIEFkZCBvciByZW1vdmUgYSBzY3JvbGxiYXIuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4KKyAqIHRoZSBzY3JvbGxiYXIgc3RhdGUgaXMgY2hhbmdpbmcuCisgKiBUaGUgc2Nyb2xsIGJhciB3aW5kb3cgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLgorICogV2UgY2FuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IHJlbW92ZSB0aGUgc2Nyb2xsIGJhcgorICogdW50aWwgd2Uga25vdyB3aGF0IHNpemUgdG8gdXNlLgorICovCisgICAgdm9pZAorZ3VpX21jaF9lbmFibGVfc2Nyb2xsYmFyKHNiLCBmbGFnKQorICAgIHNjcm9sbGJhcl9UCSpzYjsKKyAgICBpbnQJCWZsYWc7Cit7CisgICAgaWYgKCFmbGFnKQorCXN3aShXaW1wX0Nsb3NlV2luZG93LCAwLCAmIChzYi0+aWQpICk7CisgICAgcmV0dXJuOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfYmxpbmtpbmcobG9uZyB3YWl0dGltZSwgbG9uZyBvbiwgbG9uZyBvZmYpCit7Cit9CisKKy8qCisgKiBTdG9wIHRoZSBjdXJzb3IgYmxpbmtpbmcuICBTaG93IHRoZSBjdXJzb3IgaWYgaXQgd2Fzbid0IHNob3duLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zdG9wX2JsaW5rKHZvaWQpCit7Cit9CisKKy8qCisgKiBTdGFydCB0aGUgY3Vyc29yIGJsaW5raW5nLiAgSWYgaXQgd2FzIGFscmVhZHkgYmxpbmtpbmcsIHRoaXMgcmVzdGFydHMgdGhlCisgKiB3YWl0aW5nIHRpbWUgYW5kIHNob3dzIHRoZSBjdXJzb3IuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3N0YXJ0X2JsaW5rKHZvaWQpCit7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIFJHQiB2YWx1ZSBvZiBhIHBpeGVsIGFzIGEgbG9uZy4KKyAqLworICAgIGxvbmdfdQorZ3VpX21jaF9nZXRfcmdiKGd1aWNvbG9yX1QgcGl4ZWwpCit7CisgICAgcmV0dXJuIChsb25nX3UpcGl4ZWw7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3NldF90ZXh0X2FyZWFfcG9zKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQoreworfQorCisgICAgdm9pZAorZ3VpX21jaF9lbmFibGVfbWVudShpbnQgZmxhZykKK3sKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X21lbnVfcG9zKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQoreworfQorCisgICAgdm9pZAorZ3VpX21jaF9hZGRfbWVudSh2aW1tZW51X1QgKm1lbnUsIGludCBpZHgpCit7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2FkZF9tZW51X2l0ZW0odmltbWVudV9UICptZW51LCBpbnQgaWR4KQoreworfQorCisgICAgdm9pZAorZ3VpX21jaF9uZXdfbWVudV9jb2xvcnModm9pZCkKK3sKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZGVzdHJveV9tZW51KHZpbW1lbnVfVCAqbWVudSkKK3sKK30KKworLyogU2l6ZSBvZiBidWZmZXIgaGFzIGNoYW5nZWQuCisgKiBBZGQgb25lIHRvIG1heCBzaW5jZSBndWkuYyBzdWJzdHJhY3RzIG9uZSBtb3JlIHRoYW4gaXQgc2hvdWxkIQorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3RodW1iKHNiLCB2YWwsIHNpemUsIG1heCkKKyAgICBzY3JvbGxiYXJfVAkqc2I7CisgICAgbG9uZwl2YWw7CisgICAgbG9uZwlzaXplOworICAgIGxvbmcJbWF4OworeworICAgIGludAkJYmxvY2tbMTBdLCB3aWR0aCwgaGVpZ2h0OworCisgICAgd2lkdGggPSAobWF4ICsgMSkgKiBndWkuY2hhcl93aWR0aDsKKyAgICBoZWlnaHQgPSAobWF4ICsgMSArIFdfU1RBVFVTX0hFSUdIVChzYi0+d3ApKSAqIGd1aS5jaGFyX2hlaWdodDsKKworICAgIGJsb2NrWzBdID0gYmxvY2tbM10gPSAwOworICAgIGJsb2NrWzFdID0gLWhlaWdodCArICgxIDw8IHlfZWlnZW5fZmFjdG9yKTsKKyAgICBibG9ja1syXSA9IHdpZHRoOworCisgICAgc3dpKFdpbXBfU2V0RXh0ZW50LCBzYiAtPiBpZCwgYmxvY2spOworCisgICAgYmxvY2tbMF0gPSBzYiAtPiBpZDsKKyAgICBzd2koV2ltcF9HZXRXaW5kb3dTdGF0ZSwgMCwgYmxvY2spOworICAgIGJsb2NrWzVdID0gdmFsICogZ3VpLmNoYXJfd2lkdGg7CisgICAgYmxvY2tbNl0gPSAtdmFsICogZ3VpLmNoYXJfaGVpZ2h0OworICAgIHN3aShXaW1wX09wZW5XaW5kb3csIDAsIGJsb2NrLCAweDRiNTM0MTU0LAorCQkJZ3VpLndpbmRvd19oYW5kbGUsCS8qIFBhcmVudCB3aW5kb3cgaGFuZGxlLiAqLworCQkJKENISUxEX0ZJWF9UT19SSUdIVCAgPDwgQ0hJTERfTEVGVCAgKSAgIHwKKwkJCShDSElMRF9GSVhfVE9fUklHSFQgIDw8IENISUxEX1JJR0hUICkgICB8CisJCQkoQ0hJTERfRklYX1RPX0JPVFRPTSA8PCBDSElMRF9UT1AgICApICAgfAorCQkJKENISUxEX0ZJWF9UT19CT1RUT00gPDwgQ0hJTERfQk9UVE9NKSAgIHwKKwkJCShDSElMRF9TRUxGX1NDUk9MTCAgIDw8IENISUxEX1NDUk9MTF9YKSB8CisJCQkoQ0hJTERfU0VMRl9TQ1JPTEwgICA8PCBDSElMRF9TQ1JPTExfWSkKKwkJCSk7Cit9CisKKy8qIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHNjcm9sbGJhciB3aXRoaW4gdGhlIGVkaXRvcgorICogd2luZG93LiBOb3RlIHRoYXQsIGZvciB2ZXJ0aWNhbCBzY3JvbGxiYXJzLCB4IGFuZCB3CisgKiBhcmUgaWdub3JlZC4gRm9yIGhvcml6b250YWwgYmFycyB5IGFuZCBoIGFyZSBpZ25vcmVkLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3BvcyhzYiwgeCwgeSwgdywgaCkKKyAgICBzY3JvbGxiYXJfVCAqc2I7CisgICAgaW50CQl4OwkJLyogSG9yaXpvbnRhbCBzYiBwb3NpdGlvbiAqLworICAgIGludAkJeTsJCS8qIFRvcCBvZiBzY3JvbGwgYmFyICovCisgICAgaW50CQl3OwkJLyogV2lkdGggKi8KKyAgICBpbnQJCWg7CQkvKiBIZWlnaHQgKi8KK3sKKyAgICBpbnQJCWJsb2NrWzI0XTsKKyAgICBpbnQJCXB4MSwgcHkxOwkvKiBQYXJlbnQgd2luZG93IG1pbiBjb29yZHMgKi8KKyAgICBpbnQJCXB4MiwgcHkyOwkvKiBQYXJlbnQgd2luZG93IG1heCBjb29yZHMgKi8KKworICAgIC8qIEZpbmQgd2hlcmUgdGhlIHBhcmVudCB3aW5kb3cgaXMuICovCisgICAgYmxvY2tbMF0gPSBndWkud2luZG93X2hhbmRsZTsKKyAgICBzd2koV2ltcF9HZXRXaW5kb3dTdGF0ZSwgMCwgYmxvY2spOworICAgIHB4MSA9IGJsb2NrWzFdOworICAgIHB5MSA9IGJsb2NrWzJdOworICAgIHB4MiA9IGJsb2NrWzNdOworICAgIHB5MiA9IGJsb2NrWzRdOworCisgICAgYmxvY2tbMF0gPSBzYiAtPiBpZDsKKworICAgIC8qIEZpbmQgb3V0IGhvdyBiaWcgdGhlIHNjcm9sbCB3aW5kb3cgaXMgYXQgdGhlIG1vbWVudC4gKi8KKyAgICBzd2koV2ltcF9HZXRXaW5kb3dJbmZvLCAwLCAoKGNoYXJfdSAqKWJsb2NrKSArIDEpOworCisgICAgaWYgKGJsb2NrWzEzXSA8IHcgfHwgYmxvY2tbMTJdID4gLWgpCisgICAgeworCS8qIEN1cnJlbnQgd2luZG93IGlzIHRvbyBzbWFsbCEgKi8KKwlpZiAoYmxvY2tbMTJdID4gLWgpCisJICAgIGJsb2NrWzEyXSA9IC1oOworCWlmIChibG9ja1sxM10gPCB3KQorCSAgICBibG9ja1sxM10gPSB3OworCXN3aShXaW1wX1NldEV4dGVudCwgYmxvY2tbMF0sIGJsb2NrICsgMTEpOworICAgIH0KKworICAgIC8qIFRoaXMgd29ya3MgYmV0dGVyIG9uIHRoZSBuZXN0ZWRfd2ltcC4gKi8KKyAgICBpZiAoc2ItPiB3cCkKKyAgICB7CisJLyogVGhpcyBpcyBhIHZlcnRpY2FsIHNjcm9sbGJhci4gKi8KKwlibG9ja1sxXSA9IGJsb2NrWzNdID0gcHgyIC0gZ3VpLnNjcm9sbGJhcl93aWR0aCArICgxIDw8IHhfZWlnZW5fZmFjdG9yKTsKKwlibG9ja1syXSA9IDEgKyBweTIgLSAoeSArIGgpICsgKDEgPDwgeV9laWdlbl9mYWN0b3IpOworCWJsb2NrWzRdID0gMSArIHB5MiAtIHk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogVGhpcyBpcyBhIGhvcml6b250YWwgc2Nyb2xsYmFyLiAqLworCWJsb2NrWzJdID0gYmxvY2tbNF0gPSBweTEgKyBndWkuc2Nyb2xsYmFyX2hlaWdodDsKKwlibG9ja1sxXSA9IHB4MTsKKwlibG9ja1szXSA9IHB4MiAtIGd1aS5zY3JvbGxiYXJfd2lkdGg7CisgICAgfQorCisgICAgYmxvY2tbNV0gPSAwOworICAgIGJsb2NrWzZdID0gMDsKKyAgICBibG9ja1s3XSA9IC0xOworCisgICAgc3dpKFdpbXBfT3BlbldpbmRvdywgMCwgYmxvY2ssIDB4NGI1MzQxNTQsCisJICAgIGd1aS53aW5kb3dfaGFuZGxlLAkvKiBQYXJlbnQgd2luZG93IGhhbmRsZS4gKi8KKwkgICAgKENISUxEX0ZJWF9UT19SSUdIVCAgPDwgQ0hJTERfTEVGVCAgKSAgIHwKKwkgICAgKENISUxEX0ZJWF9UT19SSUdIVCAgPDwgQ0hJTERfUklHSFQgKSAgIHwKKwkgICAgKENISUxEX0ZJWF9UT19CT1RUT00gPDwgQ0hJTERfVE9QICAgKSAgIHwKKwkgICAgKENISUxEX0ZJWF9UT19CT1RUT00gPDwgQ0hJTERfQk9UVE9NKSAgIHwKKwkgICAgKENISUxEX1NFTEZfU0NST0xMICAgPDwgQ0hJTERfU0NST0xMX1gpIHwKKwkgICAgKENISUxEX1NFTEZfU0NST0xMICAgPDwgQ0hJTERfU0NST0xMX1kpCisgICAgICAgKTsKK30KKworLyogQ3JlYXRlIGEgd2luZG93IHdpdGggbm8gd29ya2FyZWEgdG8gcGxhY2UgaW5zaWRlIGVkaXRvciB3aW5kb3cuCisgKiAod2hhdCBoYXBwZW5zIHdpdGhvdXQgdGhlIG5lc3RlZCB3aW1wPykKKyAqIERhdGEgZm9yIHNjcm9sbGJhciBpcyBpbnZhbGlkLgorICovCisgICAgdm9pZAorZ3VpX21jaF9jcmVhdGVfc2Nyb2xsYmFyKHNiLCBvcmllbnQpCisgICAgc2Nyb2xsYmFyX1QgKnNiOworICAgIGludAkJb3JpZW50OwkvKiBvcmllbnQgaXMgU0JBUl9IT1JJWiBvciBTQkFSX1ZFUlQgKi8KK3sKKyAgICBpbnQgYmFyW10gPQorCXsKKwkgICAgMCwgICAwLAkJLyogVmlzaWJsZSBhcmVhIDogbWluIFgsWSAqLworCSAgICAxMDAsIDEwMCwJCS8qCQkgIG1heCBYLFkgKi8KKwkgICAgMCwgICAwLAkJLyogU2Nyb2xsIG9mZnNldHMgKi8KKwkgICAgLTEsCQkJLyogV2luZG93IGluIGZyb250ICovCisJICAgIDB4ODA4MDAxNTAgfCAob3JpZW50ID09IFNCQVJfSE9SSVogPyAoMSA8PCAzMCkgOiAoMSA8PCAyOCkpLAorCSAgICAweGZmMDcwMjA3LAkJLyogQ29sb3VycyAqLworCSAgICAweDAwMGMwMTAzLAkJLyogTW9yZSBjb2xvdXJzICovCisJICAgIDAsIC0weDQwMDAsCQkvKiBXb3JrYXJlYSBleHRlbnQgKi8KKwkgICAgMHg0MDAwLCAwLAkJLyogbWF4IFgsWSAqLworCSAgICAweDAwMDAwMDAwLAkJLyogTm8gdGl0bGUgKi8KKwkgICAgMCA8PCAxMiwJCS8qIE5vIHdvcmthcmVhIGJ1dHRvbiB0eXBlICovCisJICAgIDEsCQkJLyogV2ltcCBzcHJpdGUgYXJlYSAqLworCSAgICAweDAwMDEwMDAxLAkJLyogTWluaW11bSB3aWR0aCwgaGVpZ2h0ICovCisJICAgIDAsIDAsIDAsCQkvKiBUaXRsZSBkYXRhIChub25lKSAqLworCSAgICAwCQkJLyogTm8gaWNvbnMgKi8KKwl9OworICAgIHN3aShXaW1wX0NyZWF0ZVdpbmRvdywgMCwgYmFyKTsKKyAgICBzYiAtPiBpZCA9IHIwOworfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X3Njcm9sbGJhcihzY3JvbGxiYXJfVCAqc2IpCit7CisgICAgc3dpKFdpbXBfRGVsZXRlV2luZG93LCAwLCAmIChzYi0+aWQpKTsKKyAgICBzYiAtPiBpZCA9IC0xOworfQorI2VuZGlmCisKKyAgICB2b2lkCitndWlfbWNoX3NldF9zY3JvbGxiYXJfY29sb3JzKHNjcm9sbGJhcl9UICpzYikKK3sKKyAgICAvKiBBbHdheXMgdXNlIGRlZmF1bHQgUk8gY29sb3VyIHNjaGVtZS4gKi8KK30KKworLyoKKyAqIEdldCBjdXJyZW50IHggbW91c2UgY29vcmRpbmF0ZSBpbiB0ZXh0IHdpbmRvdy4KKyAqIE5vdGU6ICgwLDApIGlzIHRoZSBib3R0b20gbGVmdCBjb3JuZXIsIHBvc2l0aXZlIHkgaXMgVVAuCisgKiBSZXR1cm4gLTEgd2hlbiB1bmtub3duLgorICovCisgICAgaW50CitndWlfbWNoX2dldF9tb3VzZV94KCkKK3sKKyAgICBpbnQgbGVmdDsKKyAgICBpbnQgYmxvY2tbMTBdOworCisgICAgYmxvY2tbMF0gPSBndWkud2luZG93X2hhbmRsZTsKKyAgICBzd2koV2ltcF9HZXRXaW5kb3dTdGF0ZSwgMCwgYmxvY2spOworICAgIGxlZnQgPSBibG9ja1sxXTsKKworICAgIHN3aShXaW1wX0dldFBvaW50ZXJJbmZvLCAwLCBibG9jayk7CisgICAgcmV0dXJuIGJsb2NrWzBdIC0gbGVmdDsKK30KKworLyoKKyAqIEdldCBjdXJyZW50IHkgbW91c2UgY29vcmRpbmF0ZSBpbiB0ZXh0IHdpbmRvdy4KKyAqIFJldHVybiAtMSB3aGVuIHVua25vd24uCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfZ2V0X21vdXNlX3koKQoreworICAgIGludCB0b3A7CisgICAgaW50IGJsb2NrWzEwXTsKKworICAgIGJsb2NrWzBdID0gZ3VpLndpbmRvd19oYW5kbGU7CisgICAgc3dpKFdpbXBfR2V0V2luZG93U3RhdGUsIDAsIGJsb2NrKTsKKyAgICB0b3AgPSBibG9ja1s0XTsKKworICAgIHN3aShXaW1wX0dldFBvaW50ZXJJbmZvLCAwLCBibG9jayk7CisgICAgcmV0dXJuIHRvcCAtIGJsb2NrWzFdOworfQorCisvKiBNb3VzZVRvKHgsIHkpICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRtb3VzZSh4LCB5KQorICAgIGludAkJeDsKKyAgICBpbnQJCXk7Cit7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3RvZ2dsZV90ZWFyb2ZmcyhlbmFibGUpCisgICAgaW50CQllbmFibGU7Cit7CisgICAgLyogbm8gdGVhcm9mZiBtZW51cyAqLworfQorCisvKiBSZWRyYXcgYSB3aW5kb3cncyB0aXRsZS4KKyAqIEZvciB0aGUgbmVzdGVkIHdpbXAgd2UgdXNlIHRoZSBuZXcgJ3JlZHJhdy10aXRsZS1iYXInIHJlYXNvbiBjb2RlLgorICogRm9yIG9sZGVyIHdpbXBzIHdlIG1hcmsgdGhlIGFyZWEgb2YgdGhlIHNjcmVlbiB3aGVyZSB0aGUgdGl0bGUgYmFyCisgKiBpcyBhcyBpbnZhbGlkLgorICovCisgICAgdm9pZAorcm9fcmVkcmF3X3RpdGxlKHdpbmRvdykKKyAgICBpbnQgd2luZG93OworeworICAgIGlmIChuZXN0ZWRfd2ltcCkKKyAgICB7CisJc3dpKFdpbXBfRm9yY2VSZWRyYXcsIHdpbmRvdywgMHg0YjUzNDE1NCwgMyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaW50IGJsb2NrWzEwXTsKKwlpbnQgbWlueTsKKworCWJsb2NrWzBdID0gd2luZG93OworCXN3aShXaW1wX0dldFdpbmRvd1N0YXRlLCAwLCBibG9jayk7CisJbWlueSA9IGJsb2NrWzRdOworCXN3aShXaW1wX0dldFdpbmRvd091dGxpbmUsIDAsIGJsb2NrKTsKKwlzd2koV2ltcF9Gb3JjZVJlZHJhdywgLTEsCisJCQlibG9ja1sxXSwgbWlueSwKKwkJCWJsb2NrWzNdLCBibG9ja1s0XSk7CisgICAgfQorfQorCisvKiBUdXJuIGEgdmltbWVudV9UIHN0cnVjdHVyZSBpbnRvIGEgd2ltcCBtZW51IHN0cnVjdHVyZS4KKyAqIC0xIGlmIHJlc3VsdGluZyBtZW51IGlzIGVtcHR5LgorICogT25seSB0aGUgY2hpbGRyZW4gYW5kIGRuYW1lIGl0ZW1zIGluIHRoZSByb290IG1lbnUgYXJlIHVzZWQuCisgKi8KKyAgICBpbnQgKgorcm9fYnVpbGRfbWVudShtZW51KQorICAgIHZpbW1lbnVfVAkqbWVudTsKK3sKKyAgICBpbnQJCSp3aW1wX21lbnU7CisgICAgaW50CQl3aWR0aCA9IDQ7CisgICAgaW50CQl3OworICAgIGludAkJc2l6ZSA9IDI4OworICAgIHZpbW1lbnVfVAkqaXRlbTsKKyAgICBpbnQJCSp3aW1wX2l0ZW07CisKKyAgICAvKiBGaW5kIG91dCBob3cgYmlnIHRoZSBtZW51IGlzIHNvIHdlIGNhbiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGl0ICovCisgICAgZm9yIChpdGVtID0gbWVudS0+IGNoaWxkcmVuOyBpdGVtOyBpdGVtID0gaXRlbS0+IG5leHQpCisgICAgeworCWlmIChpdGVtLT4gaGlkZGVuID09IEZBTFNFICYmICFtZW51X2lzX3NlcGFyYXRvcihpdGVtLT5uYW1lKSkKKwkgICAgc2l6ZSArPSAyNDsKKyAgICB9CisKKyAgICBpZiAoc2l6ZSA8PSAyOCkKKwlyZXR1cm4gKGludCAqKSAtMTsJCS8qIE5vIGNoaWxkcmVuIC0gc2hvdWxkbid0IGhhcHBlbiAqLworCisgICAgd2ltcF9tZW51ID0gKGludCAqKSBhbGxvYyhzaXplKTsKKworICAgIHdpbXBfbWVudVswXSA9IChpbnQpIG1lbnUtPiBkbmFtZTsKKyAgICB3aW1wX21lbnVbMV0gPSAtMTsKKyAgICB3aW1wX21lbnVbMl0gPSAwOworICAgIHdpbXBfbWVudVszXSA9IDB4MDAwNzAyMDc7CisgICAgd2ltcF9tZW51WzVdID0gNDQ7CisgICAgd2ltcF9tZW51WzZdID0gMDsKKworICAgIHdpbXBfaXRlbSA9IHdpbXBfbWVudSArIDc7CisKKyAgICBmb3IgKGl0ZW0gPSBtZW51LT4gY2hpbGRyZW47IGl0ZW07IGl0ZW0gPSBpdGVtLT4gbmV4dCkKKyAgICB7CisJaWYgKG1lbnVfaXNfc2VwYXJhdG9yKGl0ZW0tPiBuYW1lKSkKKwl7CisJICAgIC8qIFRoaXMgbWVudSBlbnRyeSBpcyBhY3R1YWxseSBhIHNlcGFyYXRvci4gSWYgaXQgaXMgbm90IHRoZSBmaXJzdAorCSAgICAgKiBtZW51IGVudHJ5IHRoZW4gbWFyayB0aGUgcHJldmlvdXMgbWVudSBpdGVtIGFzIG5lZWRpbmcgYSBkb3R0ZWQKKwkgICAgICogbGluZSBhZnRlciBpdC4KKwkgICAgICovCisJICAgIGlmICh3aW1wX2l0ZW0gPiB3aW1wX21lbnUgKyA3KQorCQl3aW1wX2l0ZW1bLTZdIHw9IDB4MjsKKwl9CisJZWxzZSBpZiAoaXRlbS0+IGhpZGRlbiA9PSBGQUxTRSkKKwl7CisJICAgIHdpbXBfaXRlbVswXSA9IDA7CisJICAgIHdpbXBfaXRlbVsxXSA9IGl0ZW0tPiBjaGlsZHJlbiA/IChpbnQpIHJvX2J1aWxkX21lbnUoaXRlbSkgOiAtMTsKKwkgICAgd2ltcF9pdGVtWzJdID0gMHgwNzAwOTEzMSB8IChpdGVtLT4gZ3JleWVkX291dCA8PCAyMik7CisJICAgIHdpbXBfaXRlbVszXSA9IChpbnQpIGl0ZW0tPiBkbmFtZTsKKwkgICAgd2ltcF9pdGVtWzRdID0gLTE7CisJICAgIHdpbXBfaXRlbVs1XSA9IChpbnQpIGl0ZW07ICAvKiBTdHVmZiB0aGUgbWVudSBhZGRyZXNzIGluIHRoaXMgdW51c2VkIHNwYWNlICovCisKKwkgICAgdyA9IHN0cmxlbihpdGVtLT4gZG5hbWUpICsgMTsKKwkgICAgaWYgKHcgPiB3aWR0aCkKKwkJd2lkdGggPSB3OworCSAgICB3aW1wX2l0ZW0gKz0gNjsKKwl9CisgICAgfQorCisgICAgd2ltcF9tZW51WzRdID0gKHdpZHRoICsgMikgKiAxNjsKKyAgICB3aW1wX21lbnVbN10gIHw9IDB4MTAwOwkgICAgLyogTWVudSB0aXRsZSBpcyBpbmRpcmVjdGVkICovCisgICAgd2ltcF9pdGVtWy02XSB8PSAweDA4MDsJICAgIC8qIExhc3QgZW50cnkgaW4gbWVudSAqLworICAgIHJldHVybiB3aW1wX21lbnU7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcm9fcmVtb3ZlX21lbnUobWVudSkKKyAgICBpbnQJICAgICptZW51OworeworICAgIGludAkgICAgKml0ZW0gPSBtZW51ICsgNzsKKworICAgIGlmIChtZW51ID09IE5VTEwgfHwgbWVudSA9PSAoaW50ICopIC0xKQorCXJldHVybjsKKworICAgIGZvciAoOzspCisgICAgeworCWlmIChpdGVtWzFdICE9IC0xKQorCSAgICByb19yZW1vdmVfbWVudSgoaW50ICopIGl0ZW1bMV0pOwkvKiBSZW1vdmUgc3ViLW1lbnUgKi8KKwlpZiAoaXRlbVswXSAmIDB4ODApCisJICAgIGJyZWFrOwkJCS8qIFRoaXMgd2FzIHRoZSBsYXN0IGVudHJ5ICovCisJaXRlbSArPSA2OworICAgIH0KKyAgICB2aW1fZnJlZShtZW51KTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2hvd19wb3B1cG1lbnUobWVudSkKKyAgICB2aW1tZW51X1QJKm1lbnU7Cit7CisgICAgaW50CQlibG9ja1sxMF07CisKKyAgICAvKiBSZW1vdmUgdGhlIGV4aXN0aW5nIG1lbnUsIGlmIGFueSAqLworICAgIGlmICh3aW1wX21lbnUgIT0gKGludCAqKSAtMSkKKyAgICB7CisJc3dpKFdpbXBfQ3JlYXRlTWVudSwgMCwgLTEpOworCXJvX3JlbW92ZV9tZW51KHdpbXBfbWVudSk7CisJd2ltcF9tZW51ID0gKGludCAqKSAtMTsKKyAgICB9CisKKyAgICB3aW1wX21lbnUgPSByb19idWlsZF9tZW51KG1lbnUpOworICAgIGlmICh3aW1wX21lbnUgIT0gKGludCAqKSAtMSkKKyAgICB7CisJc3dpKFdpbXBfR2V0UG9pbnRlckluZm8sIDAsIGJsb2NrKTsKKwlzd2koV2ltcF9DcmVhdGVNZW51LCAwLCB3aW1wX21lbnUsIGJsb2NrWzBdIC0gNjQsIGJsb2NrWzFdICsgNjQpOworICAgIH0KK30KKworLyogUnVuIGEgY29tbWFuZCB1c2luZyB0aGUgVGFza1dpbmRvdyBtb2R1bGUuCisgKiBJZiBTSEVMTF9GSUxURVIgaXMgc2V0IHRoZW4gb3V0cHV0IGlzIG5vdCBlY2hvZWQgdG8gdGhlIHNjcmVlbiwKKyAqIElmIGl0IGlzIG5vdCBzZXQsIHRoZW4gXHIgaXMgbm90IHNlbnQgdG8gdGhlIG91dHB1dCBmaWxlLgorICovCisgICAgaW50CitndWlfbWNoX2NhbGxfc2hlbGwoY21kLCBvcHRpb25zKQorICAgIGNoYXJfdSAgKmNtZDsKKyAgICBpbnQJICAgIG9wdGlvbnM7CS8qIFNIRUxMX0ZJTFRFUiBpZiBjYWxsZWQgYnkgZG9fZmlsdGVyKCkgKi8KKwkJCS8qIFNIRUxMX0NPT0tFRCBpZiB0ZXJtIG5lZWRzIGNvb2tlZCBtb2RlICovCit7CisgICAgY2hhcl91ICB0YXNrX2NtZFsyNTZdOwkvKiBDb250YWlucyAqVGFza1dpbmRvdyBjb21tYW5kLiAqLworICAgIGludAkgICAgYmxvY2tbNjRdOworICAgIGludAkgICAgcmVhc29uOworICAgIGNoYXJfdSAgKm91dDsKKyAgICBjaGFyX3UgIGM7CisgICAgaW50CSAgICBvbGRfbXNnX2NvbDsKKyAgICBjaGFyX3UgICpvdXRfcmVkaXI7CisgICAgaW50CSAgICBsZW5ndGg7CisgICAgRklMRSAgICAqb3V0X2ZpbGUgPSBOVUxMOworCisgICAgb3V0X3JlZGlyID0gc3Ryc3RyKGNtZCwgIiA+ICIpOworICAgIGlmIChvdXRfcmVkaXIgPT0gTlVMTCkKKwlsZW5ndGggPSBzdHJsZW4oY21kKTsJLyogTm8gcmVkaXJlY3Rpb24uICovCisgICAgZWxzZQorICAgIHsKKwlsZW5ndGggPSBvdXRfcmVkaXIgLSBjbWQ7CisJb3V0X2ZpbGUgPSBmb3BlbihvdXRfcmVkaXIgKyAzLCAid2IiKTsKKwlpZiAob3V0X2ZpbGUgPT0gTlVMTCkKKwkgICAgbXNnX3N0cigiV0FSTklORyA6IENhbid0IG9wZW4gZmlsZSAlcyBmb3Igd3JpdGluZ1xuIiwKKwkJCQkJCQkgICAgICAgb3V0X3JlZGlyICsgMyk7CisgICAgfQorCisgICAgaWYgKGxlbmd0aCA+IDE4MCkKKyAgICB7CisJaWYgKG91dF9maWxlKQorCSAgICBmY2xvc2Uob3V0X2ZpbGUpOworCXJldHVybiBGQUlMOwkJLyogQ29tbWFuZCB0b28gbG9uZy4gKi8KKyAgICB9CisKKyAgICBzdHJjcHkodGFza19jbWQsICJUYXNrV2luZG93IFwiIik7CisgICAgc3RybmNweSh0YXNrX2NtZCArIDEyLCBjbWQsIGxlbmd0aCk7CisgICAgc3ByaW50Zih0YXNrX2NtZCArIDEyICsgbGVuZ3RoLAorCSAgICAiXCIgLXRhc2sgJiUwOHggLWN0cmwgLXF1aXQgLW5hbWUgXCJWaW0gY29tbWFuZFwiIiwKKwkgICAgdGFza19oYW5kbGUpOworCisgICAgaWYgKG9wdGlvbnMgJiBTSEVMTF9DT09LRUQpCisJc2V0dG1vZGUoVE1PREVfQ09PSyk7CisKKyAgICBpZiAoeHN3aShXaW1wX1N0YXJ0VGFzaywgdGFza19jbWQpICYgdl9mbGFnKQorICAgIHsKKwkvKiBGYWlsZWQgdG8gZXZlbiBzdGFydCBhIG5ldyB0YXNrIChvdXQgb2YgbWVtb3J5PykgKi8KKwlzZXR0bW9kZShUTU9ERV9SQVcpOworCWlmIChvdXRfZmlsZSkKKwkgICAgZmNsb3NlKG91dF9maWxlKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBXYWl0IGZvciB0aGUgY2hpbGQgcHJvY2VzcyB0byBpbml0aWFsaXNlLiAqLworICAgIGNoaWxkX2hhbmRsZSA9IDA7CisgICAgd2hpbGUgKCFjaGlsZF9oYW5kbGUpCisgICAgeworCXJlYXNvbiA9IHdpbXBfcG9sbCgwLCBibG9jayk7CisJaWYgKChyZWFzb24gPT0gMTcgfHwgcmVhc29uID09IDE4KSAmJiBibG9ja1s0XSA9PSAweDgwOGMyKQorCSAgICBjaGlsZF9oYW5kbGUgPSBibG9ja1sxXTsKKwllbHNlCisJICAgIHByb2Nlc3NfZXZlbnQocmVhc29uLCBibG9jayk7CisgICAgfQorCisgICAgLyogQmxvY2sgdW50aWwgZmluaXNoZWQgKi8KKyAgICB3aGlsZSAoY2hpbGRfaGFuZGxlKQorICAgIHsKKwlyZWFzb24gPSB3aW1wX3BvbGwoMSwgYmxvY2spOworCWlmIChyZWFzb24gPT0gMyB8fCAocmVhc29uID09IDggJiYgYmxvY2tbNl0gPT0gMykpCisJeworCSAgICAvKiBDbG9zZSB3aW5kb3cgcmVxdWVzdCBvciBDVFJMLUMgLSBraWxsIGNoaWxkIHRhc2suICovCisJICAgIGJsb2NrWzBdID0gMjA7CisJICAgIGJsb2NrWzNdID0gMDsKKwkgICAgYmxvY2tbNF0gPSAweDgwOGM0OwkgICAgLyogTW9yaXRlICovCisJICAgIHN3aShXaW1wX1NlbmRNZXNzYWdlLCAxNywgYmxvY2ssIGNoaWxkX2hhbmRsZSk7CisJICAgIE1TR19QVVRTKF8oIlxuU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIikpOworCSAgICBjb250aW51ZTsKKwl9CisJZWxzZSBpZiAocmVhc29uID09IDgpCisJeworCSAgICBibG9ja1swXSA9IDI4OworCSAgICBibG9ja1szXSA9IDA7CisJICAgIGJsb2NrWzRdID0gMHg4MDhjMDsJICAgIC8qIElucHV0ICovCisJICAgIGJsb2NrWzVdID0gMTsKKwkgICAgLyogQmxvY2tbNl0gaXMgT0sgYXMgaXQgaXMhICovCisJICAgIHN3aShXaW1wX1NlbmRNZXNzYWdlLCAxNywgYmxvY2ssIGNoaWxkX2hhbmRsZSk7CisJICAgIGNvbnRpbnVlOworCX0KKwllbHNlIGlmIChyZWFzb24gPT0gMTcgfHwgcmVhc29uID09IDE4KQorCXsKKwkgICAgaWYgKGJsb2NrWzRdID09IDB4ODA4YzEpCisJICAgIHsKKwkJLyogQWNrIG1lc3NhZ2UuICovCisJCWJsb2NrWzNdID0gYmxvY2tbMl07CisJCXN3aShXaW1wX1NlbmRNZXNzYWdlLCAxOSwgYmxvY2ssIGJsb2NrWzFdKTsKKwkJb3V0ID0gKGNoYXJfdSAqKWJsb2NrICsgMjQ7CisJCW9sZF9tc2dfY29sID0gbXNnX2NvbDsKKwkJd2hpbGUgKGJsb2NrWzVdLS0pCisJCXsKKwkJICAgIGMgPSAqb3V0Kys7CisJCSAgICBpZiAob3V0X2ZpbGUgJiYgKGMgIT0gJ1xyJyB8fCAob3B0aW9ucyAmIFNIRUxMX0ZJTFRFUikpKQorCQkJZnB1dGMoYywgb3V0X2ZpbGUpOworCQkgICAgaWYgKChvcHRpb25zICYgU0hFTExfRklMVEVSKSA9PSAwKQorCQkgICAgeworCQkJaWYgKGMgPT0gMTI3KQorCQkJICAgIG1zZ19wdXRzKCJcYiBcYiIpOworCQkJZWxzZSBpZiAoYyA+IDMxKQorCQkJICAgIG1zZ19wdXRjaGFyKGMpOworCQkJZWxzZSBpZiAoYyA9PSAxMCkKKwkJCXsKKwkJCSAgICBsaW5lc19sZWZ0ID0gODsJLyogRG9uJ3QgZG8gTW9yZSBwcm9tcHQhICovCisJCQkgICAgbXNnX3B1dGNoYXIoMTApOworCQkJfQorCQkgICAgfQorCQl9CisJCS8qIEZsdXNoIG91dHB1dCB0byB0aGUgc2NyZWVuLiAqLworCQl3aW5kZ290byhtc2dfcm93LCBtc2dfY29sKTsKKwkJb3V0X2ZsdXNoKCk7CisJCWNvbnRpbnVlOworCSAgICB9CisJfQorCXByb2Nlc3NfZXZlbnQocmVhc29uLCBibG9jayk7CisgICAgfQorICAgIG1zZ19wdXRjaGFyKCdcbicpOworICAgIHNldHRtb2RlKFRNT0RFX1JBVyk7CisgICAgaWYgKG91dF9maWxlKQorCWZjbG9zZShvdXRfZmlsZSk7CisgICAgcmV0dXJuIE9LOworfQorCisvKiBMaWtlIHN0cnNhdmUoKSwgYnV0IHN0b3BzIGF0IGFueSBjb250cm9sIGNoYXIgKi8KKyAgICBjaGFyX3UgKgord2ltcF9zdHJzYXZlKHN0cikKKyAgICBjaGFyICAgICpzdHI7Cit7CisgICAgaW50CSAgICBzdHJsZW4gPSAwOworICAgIGNoYXJfdSAgKnJldHZhbDsKKyAgICB3aGlsZSAoc3RyW3N0cmxlbl0gPiAzMSkKKwlzdHJsZW4rKzsKKyAgICByZXR2YWwgPSBhbGxvYyhzdHJsZW4gKyAxKTsKKyAgICBpZiAocmV0dmFsKQorICAgIHsKKwltZW1jcHkocmV0dmFsLCBzdHIsIHN0cmxlbik7CisJcmV0dmFsW3N0cmxlbl0gPSAnXDAnOworICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKiBJZiB3ZSBhcmUgc2F2aW5nIHRoZW4gcG9wIHVwIGEgc3RhbmRhcmQgUklTQyBPUyBzYXZlIGJveC4KKyAqIE90aGVyd2lzZSwgb3BlbiBhIGRpcmVjdG9yeSB2aWV3ZXIgb24gdGhlIGdpdmVuIGRpcmVjdG9yeSAoYW5kIHJldHVybiBOVUxMKQorICogVGhlIHN0cmluZyB3ZSByZXR1cm4gd2lsbCBiZSBmcmVlZCBsYXRlci4KKyAqLworICAgIGNoYXJfdSAqCitndWlfbWNoX2Jyb3dzZShzYXZpbmcsIHRpdGxlLCBkZmx0LCBleHQsIGluaXRkaXIsIGZpbHRlcikKKyAgICBpbnQJCXNhdmluZzsJCS8qIHdyaXRlIGFjdGlvbiAqLworICAgIGNoYXJfdQkqdGl0bGU7CQkvKiB0aXRsZSBmb3IgdGhlIHdpbmRvdyAqLworICAgIGNoYXJfdQkqZGZsdDsJCS8qIGRlZmF1bHQgZmlsZSBuYW1lICovCisgICAgY2hhcl91CSpleHQ7CQkvKiBleHRlbnNpb24gYWRkZWQgKi8KKyAgICBjaGFyX3UJKmluaXRkaXI7CS8qIGluaXRpYWwgZGlyZWN0b3J5LCBOVUxMIGZvciBjdXJyZW50IGRpciAqLworICAgIGNoYXJfdQkqZmlsdGVyOwkvKiBmaWxlIG5hbWUgZmlsdGVyICovCit7CisgICAgY2hhciBjb21tYW5kWzI1Nl07CisgICAgaW50IGxlbmd0aDsKKworICAgIGlmIChzYXZpbmcpCisgICAgeworCWludAlibG9ja1s2NF07CisJaW50CXJlYXNvbjsKKwlpbnQJZG9uZV9zYXZlID0gRkFMU0U7CisJY2hhcl91CSpyZXR2YWwgPSBOVUxMOworCWNoYXJfdSAgKnNwcm5hbWU7CisJY2hhcl91CSpmbmFtZTsKKwlpbnQJZHJhZ2dpbmdfaWNvbiA9IEZBTFNFOworCWludAlmaWxldHlwZTsKKworCWlmICghZGZsdCkKKwkgICAgZGZsdCA9ICJUZXh0RmlsZSI7CisKKwlibG9ja1swXSA9IHNhdmVfd2luZG93OworCWJsb2NrWzFdID0gMDsKKwlzd2koV2ltcF9HZXRJY29uU3RhdGUsIDAsIGJsb2NrKTsKKwlzcHJuYW1lID0gKChjaGFyX3UgKikgYmxvY2tbN10pOworCWJsb2NrWzFdID0gMTsKKwlzd2koV2ltcF9HZXRJY29uU3RhdGUsIDAsIGJsb2NrKTsKKwlmbmFtZSA9ICgoY2hhciAqKSBibG9ja1s3XSk7CisJc3RybmNweShmbmFtZSwgZGZsdCwgMjU1KTsKKworCWlmICh4c3dpKE9TX0ZTQ29udHJvbCwgMzEsIGN1cmJ1Zi0+Yl9wX29mdCkgJiB2X2ZsYWcpCisJeworCSAgICBmaWxldHlwZSA9IDB4ZmZmOworCSAgICBzdHJjcHkoc3BybmFtZSArIDUsICJ4eHgiKTsKKwl9CisJZWxzZQorCXsKKwkgICAgZmlsZXR5cGUgPSByMjsKKwkgICAgc3ByaW50ZihzcHJuYW1lICsgNSwgIiUwM3giLCBmaWxldHlwZSk7CisJfQorCisJLyogT3BlbiB0aGUgc2F2ZSBib3ggKi8KKworCXN3aShXaW1wX0dldFBvaW50ZXJJbmZvLCAwLCBibG9jayk7CisJc3dpKFdpbXBfQ3JlYXRlTWVudSwgMCwgc2F2ZV93aW5kb3csIGJsb2NrWzBdIC0gNjQsIGJsb2NrWzFdICsgNjQpOworCXN3aShXaW1wX1NldENhcmV0UG9zaXRpb24sIHNhdmVfd2luZG93LCAxLCAwLCAwLCAtMSwgLTEpOworCisJd2hpbGUgKCFkb25lX3NhdmUpCisJeworCSAgICByZWFzb24gPSB3aW1wX3BvbGwoMSwgYmxvY2spOworCSAgICBzd2l0Y2ggKHJlYXNvbikKKwkgICAgeworCQljYXNlIDE6CisJCSAgICByZWRyYXdfd2luZG93KGJsb2NrKTsKKwkJICAgIGJyZWFrOworCQljYXNlIDI6CisJCSAgICBpZiAoYmxvY2tbMF0gPT0gc2F2ZV93aW5kb3cpCisJCQlzd2koV2ltcF9PcGVuV2luZG93LCAwLCBibG9jayk7CisJCSAgICBlbHNlCisJCQlyb19vcGVuX3dpbmRvdyhibG9jayk7CisJCSAgICBicmVhazsKKwkJY2FzZSAzOgorCQkgICAgZG9uZV9zYXZlID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQljYXNlIDY6CisJCSAgICBpZiAoYmxvY2tbM10gIT0gc2F2ZV93aW5kb3cpCisJCQlkb25lX3NhdmUgPSBUUlVFOworCQkgICAgZWxzZQorCQkgICAgeworCQkJaW50IGRyYWdfYm94WzRdOworCQkJaW50IG1pbl94LCBtYXhfeTsKKworCQkJc3dpdGNoIChibG9ja1s0XSkKKwkJCXsKKwkJCSAgICBjYXNlICAgIDA6IC8qIFN0YXJ0IGRyYWcgKi8KKwkJCQlibG9ja1swXSA9IHNhdmVfd2luZG93OworCQkJCXN3aShXaW1wX0dldFdpbmRvd1N0YXRlLCAwLCBibG9jayk7CisJCQkJbWluX3ggPSBibG9ja1sxXTsKKwkJCQltYXhfeSA9IGJsb2NrWzRdOworCQkJCWJsb2NrWzFdID0gMDsKKwkJCQlzd2koV2ltcF9HZXRJY29uU3RhdGUsIDAsIGJsb2NrKTsKKwkJCQlkcmFnX2JveFswXSA9IGJsb2NrWzJdICsgbWluX3g7CisJCQkJZHJhZ19ib3hbMV0gPSBibG9ja1szXSArIG1heF95OworCQkJCWRyYWdfYm94WzJdID0gYmxvY2tbNF0gKyBtaW5feDsKKwkJCQlkcmFnX2JveFszXSA9IGJsb2NrWzVdICsgbWF4X3k7CisKKwkJCQlzd2koRHJhZ0FTcHJpdGVfU3RhcnQsCisJCQkJCTB4NDUsCisJCQkJCTEsCisJCQkJCXNwcm5hbWUsCisJCQkJCWRyYWdfYm94KTsKKwkJCQlkcmFnZ2luZ19pY29uID0gVFJVRTsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlICAgIDI6IC8qIE9LICovCisJCQkJcmV0dmFsID0gd2ltcF9zdHJzYXZlKGZuYW1lKTsKKwkJCQlkb25lX3NhdmUgPSBUUlVFOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgICAgMzogLyogQ2FuY2VsICovCisJCQkJZG9uZV9zYXZlID0gVFJVRTsKKwkJCQlicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQljYXNlIDc6CisJCSAgICBpZiAoZHJhZ2dpbmdfaWNvbikKKwkJICAgIHsKKwkJCWludCBsZW4gPSAwOworCisJCQlkcmFnZ2luZ19pY29uID0gRkFMU0U7CisJCQlzd2koV2ltcF9HZXRQb2ludGVySW5mbywgMCwgYmxvY2spOworCQkJYmxvY2tbNV0gPSBibG9ja1szXTsKKwkJCWJsb2NrWzZdID0gYmxvY2tbNF07CisJCQlibG9ja1s3XSA9IGJsb2NrWzBdOworCQkJYmxvY2tbOF0gPSBibG9ja1sxXTsKKwkJCWJsb2NrWzldID0gMDsJCS8qIERvbid0IGtub3cgdGhlIHNpemUgKi8KKwkJCWJsb2NrWzEwXSA9IGZpbGV0eXBlOworCisJCQl3aGlsZSAoZm5hbWVbbGVuXSA+IDMxKQorCQkJeworCQkJICAgIGlmIChmbmFtZVtsZW5dID09ICcuJykKKwkJCSAgICB7CisJCQkJZm5hbWUgKz0gbGVuICsgMTsKKwkJCQlsZW4gPSAwOworCQkJICAgIH0KKwkJCSAgICBlbHNlCisJCQkJbGVuKys7CisJCQl9CisJCQlpZiAobGVuID4gMjExKQorCQkJICAgIGxlbiA9IDIxMTsKKworCQkJbWVtY3B5KCgoY2hhcl91ICopIGJsb2NrKSArIDQ0LCBmbmFtZSwgbGVuKTsKKwkJCSgoY2hhcl91ICopYmxvY2spWzQ0ICsgbGVuXSA9ICdcMCc7CisKKwkJCWJsb2NrWzBdID0gKGxlbiArIDQ4KSAmIDB4ZmM7CisJCQlibG9ja1szXSA9IDA7CisJCQlibG9ja1s0XSA9IDE7CSAgICAvKiBEYXRhU2F2ZSAqLworCisJCQlzd2koV2ltcF9TZW5kTWVzc2FnZSwgMTcsIGJsb2NrLCBibG9ja1s1XSwgYmxvY2tbNl0pOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJcm9fZHJhZ19maW5pc2hlZChibG9jayk7CisJCSAgICBicmVhazsKKwkJY2FzZSA4OgorCQkgICAgaWYgKGJsb2NrWzZdID09IDEzKQorCQkgICAgeworCQkJcmV0dmFsID0gd2ltcF9zdHJzYXZlKGZuYW1lKTsKKwkJCWRvbmVfc2F2ZSA9IFRSVUU7CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChibG9ja1s2XSA9PSAweDFiKQorCQkJZG9uZV9zYXZlID0gVFJVRTsKKwkJICAgIGVsc2UKKwkJCXN3aShXaW1wX1Byb2Nlc3NLZXksIGJsb2NrWzZdKTsKKwkJICAgIGJyZWFrOworCQljYXNlIDE3OgorCQljYXNlIDE4OgorCQkgICAgaWYgKGJsb2NrWzRdID09IDIgJiYgYmxvY2tbOV0gIT0gLTEpCisJCSAgICB7CisJCQkvKiBEYXRhU2F2ZUFjayBmcm9tIGRyYWdnaW5nIGljb24uICovCisJCQlyZXR2YWwgPSB3aW1wX3N0cnNhdmUoKChjaGFyX3UgKikgYmxvY2spICsgNDQpOworCQkJZG9uZV9zYXZlID0gVFJVRTsKKwkJICAgIH0KKwkJICAgIGVsc2UgaWYgKGJsb2NrWzRdID09IDB4NDAwYzkpCisJCSAgICB7CisJCQkvKiBNZW51c0RlbGV0ZWQgKi8KKwkJCWRvbmVfc2F2ZSA9IFRSVUU7CisJCSAgICB9CisJCSAgICBlbHNlCisJCQlyb19tZXNzYWdlKGJsb2NrKTsKKwkJICAgIGJyZWFrOworCSAgICB9CisJfQorCWJsb2NrWzBdID0gc2F2ZV93aW5kb3c7CisJc3dpKFdpbXBfQ2xvc2VXaW5kb3csIDAsIGJsb2NrKTsKKwlzd2koV2ltcF9HZXRDYXJldFBvc2l0aW9uLCAwLCBibG9jayk7CisJaWYgKGJsb2NrWzBdID09IC0xKQorCSAgICBzd2koV2ltcF9TZXRDYXJldFBvc2l0aW9uLCBndWkud2luZG93X2hhbmRsZSwgLTEsIDAsIDAsIC0xLCAtMSk7CisKKwlyZXR1cm4gcmV0dmFsOworICAgIH0KKyAgICBlbHNlIGlmIChpbml0ZGlyKQorICAgIHsKKwkvKiBPcGVuIGEgZGlyZWN0b3J5IHZpZXdlciAqLworCWxlbmd0aCA9IHN0cmxlbihpbml0ZGlyKTsKKworCWlmIChsZW5ndGggPiAyNDApCisJICAgIHJldHVybiBOVUxMOwkvKiBQYXRoIHRvbyBsb25nISAqLworCisJbGVuZ3RoID0gc3ByaW50Zihjb21tYW5kLCAiRmlsZXJfT3BlbkRpciAlcyIsIGluaXRkaXIpOworCXdoaWxlIChjb21tYW5kW2xlbmd0aCAtIDFdID09ICcuJykKKwkgICAgbGVuZ3RoLS07CisJY29tbWFuZFtsZW5ndGhdID0gJ1wwJzsKKwlzd2koT1NfQ0xJLCBjb21tYW5kKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9ndWlfcmlzY29zLmggYi9zcmMvZ3VpX3Jpc2Nvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjJlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpX3Jpc2Nvcy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKyNkZWZpbmUgRkVBVF9CUk9XU0UKKworI2RlZmluZSBUQVNLIDB4NGI1MzQxNTQKKworLyogTmVzdGVkIHdpbXAgZmxhZ3M6ICovCisjZGVmaW5lIENISUxEX0ZJWF9UT19XT1JLQVJFQQkwCisjZGVmaW5lIENISUxEX0ZJWF9UT19MRUZUCTEKKyNkZWZpbmUgQ0hJTERfRklYX1RPX0JPVFRPTQkxCisjZGVmaW5lIENISUxEX0ZJWF9UT19SSUdIVAkyCisjZGVmaW5lIENISUxEX0ZJWF9UT19UT1AJMgorCisjZGVmaW5lIENISUxEX1NFTEZfU0NST0xMCTAKKyNkZWZpbmUgQ0hJTERfUEFSRU5UX1NDUk9MTAkxCisKKyNkZWZpbmUgQ0hJTERfTEVGVAkJMTYKKyNkZWZpbmUgQ0hJTERfQk9UVE9NCQkxOAorI2RlZmluZSBDSElMRF9SSUdIVAkJMjAKKyNkZWZpbmUgQ0hJTERfVE9QCQkyMgorI2RlZmluZSBDSElMRF9TQ1JPTExfWAkJMjQKKyNkZWZpbmUgQ0hJTERfU0NST0xMX1kJCTI2CisKK2ludCB3aW1wX3BvbGwoaW50IG1hc2ssIGludCAqYmxvY2spOworaW50IHdpbXBfcG9sbF9pZGxlKGludCBtYXNrLCBpbnQgKmJsb2NrLCBpbnQgZW5kX3RpbWUpOwordm9pZCByb19vcGVuX21haW4oaW50ICpibG9jayk7CmRpZmYgLS1naXQgYS9zcmMvZ3VpX3cxNi5jIGIvc3JjL2d1aV93MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmFhODUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2d1aV93MTYuYwpAQCAtMCwwICsxLDE1MjQgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCQlHVUkgc3VwcG9ydCBieSBSb2JlcnQgV2ViYgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworLyoKKyAqIGd1aV93MTYuYworICoKKyAqIEdVSSBzdXBwb3J0IGZvciBNaWNyb3NvZnQgV2luZG93cyAzLjF4CisgKgorICogR2VvcmdlIFYuIFJlaWxseSA8Z2VvcmdlQHJlaWxseS5vcmc+IHdyb3RlIHRoZSBvcmlnaW5hbCBXaW4zMiBHVUkuCisgKiBSb2JlcnQgV2ViYiByZXdvcmtlZCBpdCB0byB1c2UgdGhlIGV4aXN0aW5nIEdVSSBzdHVmZiBhbmQgYWRkZWQgbWVudSwKKyAqIHNjcm9sbGJhcnMsIGV0Yy4KKyAqCisgKiBWaW5jZSBOZWdyaSB0aGVuIGJ1dGNoZXJlZCB0aGUgY29kZSB0byBnZXQgaXQgY29tcGlsaW5nIGZvcgorICogMTYtYml0IHdpbmRvd3MuCisgKgorICovCisKKy8qCisgKiBJbmNsdWRlIHRoZSBjb21tb24gc3R1ZmYgZm9yIE1TLVdpbmRvd3MgR1VJLgorICovCisjaW5jbHVkZSAiZ3VpX3c0OC5jIgorCisjaW5jbHVkZSAiZ3VpdzE2cmMuaCIKKworLyogVW5kb2N1bWVudGVkIFdpbmRvd3MgTWVzc2FnZSAtIG5vdCBldmVuIGRlZmluZWQgaW4gc29tZSBTREsgaGVhZGVycyAqLworI2RlZmluZSBXTV9FWElUU0laRU1PVkUJCQkweDAyMzIKKworCisjaWZkZWYgRkVBVF9UT09MQkFSCisjIGRlZmluZSBDTURfVEJfQkFTRSAoOTkpCisjIGluY2x1ZGUgPHZpbXRiYXIuaD4KKyNlbmRpZgorCisjaWZkZWYgUFJPVE8KKyMgZGVmaW5lIFdJTkFQSQorI2VuZGlmCisKKyNkZWZpbmUgSEFORExFX1dNX0RST1BGSUxFUyhod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIChIRFJPUCkod1BhcmFtKSksIDBMKQorCisKKy8qIExvY2FsIHZhcmlhYmxlczogKi8KKworI2lmZGVmIEZFQVRfTUVOVQorc3RhdGljIFVJTlQJc19tZW51X2lkID0gMTAwOworI2VuZGlmCisKKworI2RlZmluZSBWSU1fTkFNRQkidmltIgorI2RlZmluZSBWSU1fQ0xBU1MJIlZpbSIKKworI2RlZmluZSBETEdfQUxMT0NfU0laRSAxNiAqIDEwMjQKKworLyoKKyAqIHN0dWZmIGZvciBkaWFsb2dzLCBtZW51cywgdGVhcm9mZnMgZXRjLgorICovCisjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoUFJPVE8pCitzdGF0aWMgQk9PTCBDQUxMQkFDSyBkaWFsb2dfY2FsbGJhY2soSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworCitzdGF0aWMgTFBXT1JECithZGRfZGlhbG9nX2VsZW1lbnQoCisJTFBXT1JEIHAsCisJRFdPUkQgbFN0eWxlLAorCVdPUkQgeCwKKwlXT1JEIHksCisJV09SRCB3LAorCVdPUkQgaCwKKwlXT1JEIElkLAorCUJZVEUgY2xzcywKKwljb25zdCBjaGFyICpjYXB0aW9uKTsKKworc3RhdGljIGludCBkaWFsb2dfZGVmYXVsdF9idXR0b24gPSAtMTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBnZXRfZGlhbG9nX2ZvbnRfbWV0cmljcyh2b2lkKTsKKworI2lmZGVmIEZFQVRfVE9PTEJBUgorc3RhdGljIHZvaWQgaW5pdGlhbGlzZV90b29sYmFyKHZvaWQpOworI2VuZGlmCisKKworI2lmZGVmIEZFQVRfTUVOVQorLyoKKyAqIEZpZ3VyZSBvdXQgaG93IGhpZ2ggdGhlIG1lbnUgYmFyIGlzIGF0IHRoZSBtb21lbnQuCisgKi8KKyAgICBzdGF0aWMgaW50CitndWlfbXN3aW5fZ2V0X21lbnVfaGVpZ2h0KAorICAgIGludAkgICAgZml4X3dpbmRvdykJICAgIC8qIElmIFRSVUUsIHJlc2l6ZSB3aW5kb3cgaWYgbWVudSBoZWlnaHQgY2hhbmdlZCAqLworeworICAgIHN0YXRpYyBpbnQJb2xkX21lbnVfaGVpZ2h0ID0gLTE7CisKKyAgICBpbnQJICAgIG51bTsKKyAgICBpbnQJICAgIG1lbnVfaGVpZ2h0OworCisgICAgaWYgKGd1aS5tZW51X2lzX2FjdGl2ZSkKKwludW0gPSBHZXRNZW51SXRlbUNvdW50KHNfbWVudUJhcik7CisgICAgZWxzZQorCW51bSA9IDA7CisKKyAgICBpZiAobnVtID09IDApCisJbWVudV9oZWlnaHQgPSAwOworICAgIGVsc2UgaWYgKGd1aS5zdGFydGluZykKKwltZW51X2hlaWdodCA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1lNRU5VKTsKKyAgICBlbHNlCisgICAgeworCVJFQ1QgcjEsIHIyOworCWludCBmcmFtZWh0ID0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWUZSQU1FKTsKKwlpbnQgY2FwaHQgPSBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZQ0FQVElPTik7CisKKwkvKglnZXQgd2luZG93IHJlY3Qgb2Ygc19od25kCisJCSAqIGdldCBjbGllbnQgcmVjdCBvZiBzX2h3bmQKKwkJICogZ2V0IGNhcCBoZWlnaHQKKwkJICogc3VidHJhY3QgZnJvbSB3aW5kb3cgcmVjdCwgdGhlIHN1bSBvZiBjbGllbnQgaGVpZ2h0LAorCQkgKiAoaWYgbm90IG1heGltaXplZClmcmFtZSB0aGlja25lc3MsIGFuZCBjYXB0aW9uIGhlaWdodC4KKwkgKi8KKwlHZXRXaW5kb3dSZWN0KHNfaHduZCwgJnIxKTsKKwlHZXRDbGllbnRSZWN0KHNfaHduZCwgJnIyKTsKKwltZW51X2hlaWdodCA9IHIxLmJvdHRvbSAtIHIxLnRvcCAtIChyMi5ib3R0b20tcjIudG9wICsKKwkJCSAgICAgICAyICogZnJhbWVodCAqICghSXNab29tZWQoc19od25kKSkgKyBjYXBodCk7CisgICAgfQorCisgICAgaWYgKGZpeF93aW5kb3cgJiYgbWVudV9oZWlnaHQgIT0gb2xkX21lbnVfaGVpZ2h0KQorICAgIHsKKwlvbGRfbWVudV9oZWlnaHQgPSBtZW51X2hlaWdodDsKKwlndWlfc2V0X3NoZWxsc2l6ZShGQUxTRSwgRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBtZW51X2hlaWdodDsKK30KKyNlbmRpZiAvKkZFQVRfTUVOVSovCisKKworLyoKKyAqIEV2ZW4gdGhvdWdoIHdlIGhhdmUgX0R1cmluZ1NpemluZygpIHdoaWNoIG1ha2VzIHRoZSBydWJiZXIgYmFuZCBhIHZhbGlkCisgKiBzaXplLCB3ZSBuZWVkIHRoaXMgZm9yIHdoZW4gdGhlIHVzZXIgbWF4aW1pc2VzIHRoZSB3aW5kb3cuCisgKiBUT0RPOiBEb2Vzbid0IHNlZW0gdG8gYWRqdXN0IHRoZSB3aWR0aCB0aG91Z2ggZm9yIHNvbWUgcmVhc29uLgorICovCisgICAgc3RhdGljIEJPT0wKK19PbldpbmRvd1Bvc0NoYW5naW5nKAorICAgIEhXTkQgaHduZCwKKyAgICBMUFdJTkRPV1BPUyBscHdwb3MpCit7CisKKyAgICBpZiAoIUlzSWNvbmljKGh3bmQpICYmICEobHB3cG9zLT5mbGFncyAmIFNXUF9OT1NJWkUpKQorICAgIHsKKwlndWlfbXN3aW5fZ2V0X3ZhbGlkX2RpbWVuc2lvbnMobHB3cG9zLT5jeCwgbHB3cG9zLT5jeSwKKwkJCQkgICAgICZscHdwb3MtPmN4LCAmbHB3cG9zLT5jeSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKworCisKKyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSworX1duZFByb2MoCisgICAgSFdORCBod25kLAorICAgIFVJTlQgdU1zZywKKyAgICBXUEFSQU0gd1BhcmFtLAorICAgIExQQVJBTSBsUGFyYW0pCit7CisgICAgLyoKKyAgICBUUkFDRSgiV25kUHJvYzogaHduZCA9ICUwOHgsIG1zZyA9ICV4LCB3UGFyYW0gPSAleCwgbFBhcmFtID0gJXhcbiIsCisJICBod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgKi8KKworICAgIEhhbmRsZU1vdXNlSGlkZSh1TXNnLCBsUGFyYW0pOworCisgICAgc191TXNnID0gdU1zZzsKKyAgICBzX3dQYXJhbSA9IHdQYXJhbTsKKyAgICBzX2xQYXJhbSA9IGxQYXJhbTsKKworICAgIHN3aXRjaCAodU1zZykKKyAgICB7CisJSEFORExFX01TRyhod25kLCBXTV9ERUFEQ0hBUiwJX09uRGVhZENoYXIpOworCUhBTkRMRV9NU0coaHduZCwgV01fU1lTREVBRENIQVIsIF9PbkRlYWRDaGFyKTsKKwkvKiBIQU5ETEVfTVNHKGh3bmQsIFdNX0FDVElWQVRFLCAgICBfT25BY3RpdmF0ZSk7ICovCisJSEFORExFX01TRyhod25kLCBXTV9DSEFSLAlfT25DaGFyKTsKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX0NMT1NFLAlfT25DbG9zZSk7CisJLyogSEFORExFX01TRyhod25kLCBXTV9DT01NQU5ELAlfT25Db21tYW5kKTsgKi8KKwlIQU5ETEVfTVNHKGh3bmQsIFdNX0RFU1RST1ksCV9PbkRlc3Ryb3kpOworCUhBTkRMRV9NU0coaHduZCwgV01fRFJPUEZJTEVTLAlfT25Ecm9wRmlsZXMpOworCUhBTkRMRV9NU0coaHduZCwgV01fSFNDUk9MTCwJX09uU2Nyb2xsKTsKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX0tJTExGT0NVUywJX09uS2lsbEZvY3VzKTsKKyNpZmRlZiBGRUFUX01FTlUKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX0NPTU1BTkQsCV9Pbk1lbnUpOworI2VuZGlmCisJLyogSEFORExFX01TRyhod25kLCBXTV9NT1ZFLAkgICAgX09uTW92ZSk7ICovCisJLyogSEFORExFX01TRyhod25kLCBXTV9OQ0FDVElWQVRFLCAgX09uTkNBY3RpdmF0ZSk7ICovCisJSEFORExFX01TRyhod25kLCBXTV9TRVRGT0NVUywJX09uU2V0Rm9jdXMpOworCUhBTkRMRV9NU0coaHduZCwgV01fU0laRSwJX09uU2l6ZSk7CisJLyogSEFORExFX01TRyhod25kLCBXTV9TWVNDT01NQU5ELCAgX09uU3lzQ29tbWFuZCk7ICovCisJLyogSEFORExFX01TRyhod25kLCBXTV9TWVNLRVlET1dOLCAgX09uQWx0S2V5KTsgKi8KKwlIQU5ETEVfTVNHKGh3bmQsIFdNX1ZTQ1JPTEwsCV9PblNjcm9sbCk7CisJSEFORExFX01TRyhod25kLCBXTV9XSU5ET1dQT1NDSEFOR0lORywJX09uV2luZG93UG9zQ2hhbmdpbmcpOworCUhBTkRMRV9NU0coaHduZCwgV01fQUNUSVZBVEVBUFAsIF9PbkFjdGl2YXRlQXBwKTsKKworICAgIGNhc2UgV01fUVVFUllFTkRTRVNTSU9OOgkvKiBTeXN0ZW0gd2FudHMgdG8gZ28gZG93bi4gKi8KKwlndWlfc2hlbGxfY2xvc2VkKCk7CS8qIFdpbGwgZXhpdCB3aGVuIG5vIGNoYW5nZWQgYnVmZmVycy4gKi8KKwlyZXR1cm4gRkFMU0U7CQkvKiBEbyBOT1QgYWxsb3cgc3lzdGVtIHRvIGdvIGRvd24uICovCisKKyAgICBjYXNlIFdNX0VORFNFU1NJT046CisJaWYgKHdQYXJhbSkJLyogc3lzdGVtIG9ubHkgcmVhbGx5IGdvZXMgZG93biB3aGVuIHdQYXJhbSBpcyBUUlVFICovCisJICAgIF9PbkVuZFNlc3Npb24oKTsKKwlicmVhazsKKworICAgIGNhc2UgV01fU1lTQ0hBUjoKKwkvKgorCSAqIGlmICd3aW5hbHRrZXlzJyBpcyAibm8iLCBvciBpdCdzICJtZW51IiBhbmQgaXQncyBub3QgYSBtZW51CisJICogc2hvcnRjdXQga2V5LCBoYW5kbGUgbGlrZSBhIHR5cGVkIEFMVCBrZXksIG90aGVyd2lzZSBjYWxsIFdpbmRvd3MKKwkgKiBBTFQga2V5IGhhbmRsaW5nLgorCSAqLworI2lmZGVmIEZFQVRfTUVOVQorCWlmICgJIWd1aS5tZW51X2lzX2FjdGl2ZQorCQl8fCBwX3dha1swXSA9PSAnbicKKwkJfHwgKHBfd2FrWzBdID09ICdtJyAmJiAhZ3VpX2lzX21lbnVfc2hvcnRjdXQoKGludCl3UGFyYW0pKQorCQkpCisjZW5kaWYKKwkgICAgcmV0dXJuIEhBTkRMRV9XTV9TWVNDSEFSKChod25kKSwgKHdQYXJhbSksIChsUGFyYW0pLCAoX09uU3lzQ2hhcikpOworI2lmZGVmIEZFQVRfTUVOVQorCWVsc2UKKwkgICAgcmV0dXJuIE15V2luZG93UHJvYyhod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisjZW5kaWYKKworICAgIGNhc2UgV01fU1lTS0VZVVA6CisjaWZkZWYgRkVBVF9NRU5VCisJLyogT25seSB3aGVuIG1lbnUgaXMgYWN0aXZlLCBBTFQga2V5IGlzIHVzZWQgZm9yIHRoYXQuICovCisJaWYgKGd1aS5tZW51X2lzX2FjdGl2ZSkKKwl7CisJICAgIHJldHVybiBNeVdpbmRvd1Byb2MoaHduZCwgdU1zZywgd1BhcmFtLCBsUGFyYW0pOworCX0KKwllbHNlCisjZW5kaWYKKwkgICAgcmV0dXJuIDA7CisKKyNpZiBkZWZpbmVkKE1FTlVISU5UUykgJiYgZGVmaW5lZChGRUFUX01FTlUpCisgICAgY2FzZSBXTV9NRU5VU0VMRUNUOgorCWlmICgoKFVJTlQpIExPV09SRChsUGFyYW0pCisJCSAgICAmICgweGZmZmYgXiAoTUZfTU9VU0VTRUxFQ1QgKyBNRl9CSVRNQVAgKyBNRl9QT1BVUCkpKQorCQk9PSBNRl9ISUxJVEUKKwkJJiYgKFN0YXRlICYgQ01ETElORSkgPT0gMCkKKwl7CisJICAgIFVJTlQgaWRCdXR0b247CisJICAgIGludAlpZHg7CisJICAgIHZpbW1lbnVfVCAqcE1lbnU7CisKKwkgICAgaWRCdXR0b24gPSAoVUlOVClMT1dPUkQod1BhcmFtKTsKKwkgICAgcE1lbnUgPSBndWlfbXN3aW5fZmluZF9tZW51KHJvb3RfbWVudSwgaWRCdXR0b24pOworCSAgICBpZiAocE1lbnUpCisJICAgIHsKKwkJaWR4ID0gTUVOVV9JTkRFWF9USVA7CisJCW1zZ19jbHJfY21kbGluZSgpOworCQlpZiAocE1lbnUtPnN0cmluZ3NbaWR4XSkKKwkJICAgIG1zZyhwTWVudS0+c3RyaW5nc1tpZHhdKTsKKwkJZWxzZQorCQkgICAgbXNnKCIiKTsKKwkJc2V0Y3Vyc29yKCk7CisJCW91dF9mbHVzaCgpOworCSAgICB9CisJfQorCWJyZWFrOworI2VuZGlmCisgICAgY2FzZSBXTV9OQ0hJVFRFU1Q6CisJeworCSAgICBMUkVTVUxUCXJlc3VsdDsKKwkgICAgaW50IHgsIHk7CisJICAgIGludCB4UG9zID0gR0VUX1hfTFBBUkFNKGxQYXJhbSk7CisKKwkgICAgcmVzdWx0ID0gTXlXaW5kb3dQcm9jKGh3bmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKKwkgICAgaWYgKHJlc3VsdCA9PSBIVENMSUVOVCkKKwkgICAgeworCQlndWlfbWNoX2dldF93aW5wb3MoJngsICZ5KTsKKwkJeFBvcyAtPSB4OworCisJCWlmICh4UG9zIDwgNDgpIC8qPFZOPiBUT0RPIHNob3VsZCB1c2Ugc3lzdGVtIG1ldHJpYz8qLworCQkgICAgcmV0dXJuIEhUQk9UVE9NTEVGVDsKKwkJZWxzZQorCQkgICAgcmV0dXJuIEhUQk9UVE9NUklHSFQ7CisJCX0KKwkgICAgZWxzZQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkvKiBicmVhazsgKi8KKyAgICBkZWZhdWx0OgorI2lmZGVmIE1TV0lOX0ZJTkRfUkVQTEFDRQorCWlmICh1TXNnID09IHNfZmluZHJlcF9tc2cgJiYgc19maW5kcmVwX21zZyAhPSAwKQorCXsKKwkgICAgX09uRmluZFJlcGwoKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gTXlXaW5kb3dQcm9jKGh3bmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworCisKKy8qCisgKiBFbmQgb2YgY2FsbC1iYWNrIHJvdXRpbmVzCisgKi8KKworCisvKgorICogUGFyc2UgdGhlIEdVSSByZWxhdGVkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuICBBbnkgYXJndW1lbnRzIHVzZWQgYXJlCisgKiBkZWxldGVkIGZyb20gYXJndiwgYW5kICphcmdjIGlzIGRlY3JlbWVudGVkIGFjY29yZGluZ2x5LiAgVGhpcyBpcyBjYWxsZWQKKyAqIHdoZW4gdmltIGlzIHN0YXJ0ZWQsIHdoZXRoZXIgb3Igbm90IHRoZSBHVUkgaGFzIGJlZW4gc3RhcnRlZC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfcHJlcGFyZShpbnQgKmFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIC8qIE5vIHNwZWNpYWwgYXJncyBmb3Igd2luMTYgR1VJIGF0IHRoZSBtb21lbnQuICovCisKK30KKworLyoKKyAqIEluaXRpYWxpc2UgdGhlIEdVSS4JQ3JlYXRlIGFsbCB0aGUgd2luZG93cywgc2V0IHVwIGFsbCB0aGUgY2FsbC1iYWNrcworICogZXRjLgorICovCisgICAgaW50CitndWlfbWNoX2luaXQodm9pZCkKK3sKKyAgICBjb25zdCBjaGFyIHN6VmltV25kQ2xhc3NbXSA9IFZJTV9DTEFTUzsKKyAgICBjb25zdCBjaGFyIHN6VGV4dEFyZWFDbGFzc1tdID0gIlZpbVRleHRBcmVhIjsKKyAgICBXTkRDTEFTUyB3bmRjbGFzczsKKworI2lmZGVmIFdJTjE2XzNETE9PSworICAgIEN0bDNkUmVnaXN0ZXIoc19oaW5zdCk7CisgICAgQ3RsM2RBdXRvU3ViY2xhc3Moc19oaW5zdCk7CisjZW5kaWYKKworICAgIC8qIERpc3BsYXkgYW55IHBlbmRpbmcgZXJyb3IgbWVzc2FnZXMgKi8KKyAgICBkaXNwbGF5X2Vycm9ycygpOworCisgICAgZ3VpLnNjcm9sbGJhcl93aWR0aCA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1hWU0NST0xMKTsKKyAgICBndWkuc2Nyb2xsYmFyX2hlaWdodCA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1lIU0NST0xMKTsKKyNpZmRlZiBGRUFUX01FTlUKKyAgICBndWkubWVudV9oZWlnaHQgPSAwOwkvKiBXaW5kb3dzIHRha2VzIGNhcmUgb2YgdGhpcyAqLworI2VuZGlmCisgICAgZ3VpLmJvcmRlcl93aWR0aCA9IDA7CisKKyAgICBndWkuY3VyckJnQ29sb3IgPSBJTlZBTENPTE9SOworCisgICAgc19icnVzaCA9IENyZWF0ZVNvbGlkQnJ1c2goR2V0U3lzQ29sb3IoQ09MT1JfQlRORkFDRSkpOworCisgICAgaWYgKEdldENsYXNzSW5mbyhzX2hpbnN0LCBzelZpbVduZENsYXNzLCAmd25kY2xhc3MpID09IDApIHsKKwl3bmRjbGFzcy5zdHlsZSA9IDA7CisJd25kY2xhc3MubHBmblduZFByb2MgPSBfV25kUHJvYzsKKwl3bmRjbGFzcy5jYkNsc0V4dHJhID0gMDsKKwl3bmRjbGFzcy5jYlduZEV4dHJhID0gMDsKKwl3bmRjbGFzcy5oSW5zdGFuY2UgPSBzX2hpbnN0OworCXduZGNsYXNzLmhJY29uID0gTG9hZEljb24od25kY2xhc3MuaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURSX1ZJTSkpOworCXduZGNsYXNzLmhDdXJzb3IgPSBMb2FkQ3Vyc29yKE5VTEwsIElEQ19BUlJPVyk7CisJd25kY2xhc3MuaGJyQmFja2dyb3VuZCA9IHNfYnJ1c2g7CisJd25kY2xhc3MubHBzek1lbnVOYW1lID0gTlVMTDsKKwl3bmRjbGFzcy5scHN6Q2xhc3NOYW1lID0gc3pWaW1XbmRDbGFzczsKKworICAgIGlmICgoCisjaWZkZWYgR0xPQkFMX0lNRQorCWF0b20gPQorI2VuZGlmCisJCVJlZ2lzdGVyQ2xhc3MoJnduZGNsYXNzKSkgPT0gMCkKKwkgICAgcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgc19od25kID0gQ3JlYXRlV2luZG93KAorCXN6VmltV25kQ2xhc3MsICJWaW0gTVNXaW5kb3dzIEdVSSIsCisJV1NfT1ZFUkxBUFBFRFdJTkRPVywKKwlndWlfd2luX3ggPT0gLTEgPyBDV19VU0VERUZBVUxUIDogZ3VpX3dpbl94LAorCWd1aV93aW5feSA9PSAtMSA/IENXX1VTRURFRkFVTFQgOiBndWlfd2luX3ksCisJMTAwLAkJCQkvKiBBbnkgdmFsdWUgd2lsbCBkbyAqLworCTEwMCwJCQkJLyogQW55IHZhbHVlIHdpbGwgZG8gKi8KKwlOVUxMLCBOVUxMLAorCXNfaGluc3QsIE5VTEwpOworCisgICAgaWYgKHNfaHduZCA9PSBOVUxMKQorCXJldHVybiBGQUlMOworCisjaWZkZWYgR0xPQkFMX0lNRQorICAgIGdsb2JhbF9pbWVfaW5pdChhdG9tLCBzX2h3bmQpOworI2VuZGlmCisKKyAgICAvKiBDcmVhdGUgdGhlIHRleHQgYXJlYSB3aW5kb3cgKi8KKyAgICBpZiAoR2V0Q2xhc3NJbmZvKHNfaGluc3QsIHN6VGV4dEFyZWFDbGFzcywgJnduZGNsYXNzKSA9PSAwKSB7CisJd25kY2xhc3Muc3R5bGUgPSBDU19PV05EQzsKKwl3bmRjbGFzcy5scGZuV25kUHJvYyA9IF9UZXh0QXJlYVduZFByb2M7CisJd25kY2xhc3MuY2JDbHNFeHRyYSA9IDA7CisJd25kY2xhc3MuY2JXbmRFeHRyYSA9IDA7CisJd25kY2xhc3MuaEluc3RhbmNlID0gc19oaW5zdDsKKwl3bmRjbGFzcy5oSWNvbiA9IE5VTEw7CisJd25kY2xhc3MuaEN1cnNvciA9IExvYWRDdXJzb3IoTlVMTCwgSURDX0FSUk9XKTsKKwl3bmRjbGFzcy5oYnJCYWNrZ3JvdW5kID0gTlVMTDsKKwl3bmRjbGFzcy5scHN6TWVudU5hbWUgPSBOVUxMOworCXduZGNsYXNzLmxwc3pDbGFzc05hbWUgPSBzelRleHRBcmVhQ2xhc3M7CisKKwlpZiAoUmVnaXN0ZXJDbGFzcygmd25kY2xhc3MpID09IDApCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKyAgICBzX3RleHRBcmVhID0gQ3JlYXRlV2luZG93KAorCXN6VGV4dEFyZWFDbGFzcywgIlZpbSB0ZXh0IGFyZWEiLAorCVdTX0NISUxEIHwgV1NfVklTSUJMRSwgMCwgMCwKKwkxMDAsCQkJCS8qIEFueSB2YWx1ZSB3aWxsIGRvIGZvciBub3cgKi8KKwkxMDAsCQkJCS8qIEFueSB2YWx1ZSB3aWxsIGRvIGZvciBub3cgKi8KKwlzX2h3bmQsIE5VTEwsCisJc19oaW5zdCwgTlVMTCk7CisKKyAgICBpZiAoc190ZXh0QXJlYSA9PSBOVUxMKQorCXJldHVybiBGQUlMOworCisjaWZkZWYgRkVBVF9NRU5VCisgICAgc19tZW51QmFyID0gQ3JlYXRlTWVudSgpOworI2VuZGlmCisgICAgc19oZGMgPSBHZXREQyhzX3RleHRBcmVhKTsKKworI2lmZGVmIE1TV0lOMTZfRkFTVFRFWFQKKyAgICBTZXRCa01vZGUoc19oZGMsIE9QQVFVRSk7CisjZW5kaWYKKworICAgIERyYWdBY2NlcHRGaWxlcyhzX2h3bmQsIFRSVUUpOworCisgICAgLyogRG8gd2UgbmVlZCB0byBib3RoZXIgd2l0aCB0aGlzPyAqLworICAgIC8qIG1fZk1vdXNlQXZhaWwgPSBHZXRTeXN0ZW1NZXRyaWNzKFNNX01PVVNFUFJFU0VOVCk7ICovCisKKyAgICAvKiBHZXQgYmFja2dyb3VuZC9mb3JlZ3JvdW5kIGNvbG9ycyBmcm9tIHRoZSBzeXN0ZW0gKi8KKyAgICBndWlfbWNoX2RlZl9jb2xvcnMoKTsKKworICAgIC8qIEdldCB0aGUgY29sb3JzIGZyb20gdGhlICJOb3JtYWwiIGdyb3VwIChzZXQgaW4gc3ludGF4LmMgb3IgaW4gYSB2aW1yYworICAgICAqIGZpbGUpICovCisgICAgc2V0X25vcm1hbF9jb2xvcnMoKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgdGhhdCBub25lIG9mIHRoZSBjb2xvcnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLgorICAgICAqIFRoZW4gc3RvcmUgdGhlIGN1cnJlbnQgdmFsdWVzIGFzIHRoZSBkZWZhdWx0cy4KKyAgICAgKi8KKyAgICBndWlfY2hlY2tfY29sb3JzKCk7CisgICAgZ3VpLmRlZl9ub3JtX3BpeGVsID0gZ3VpLm5vcm1fcGl4ZWw7CisgICAgZ3VpLmRlZl9iYWNrX3BpeGVsID0gZ3VpLmJhY2tfcGl4ZWw7CisKKyAgICAvKiBHZXQgdGhlIGNvbG9ycyBmb3IgdGhlIGhpZ2hsaWdodCBncm91cHMgKGd1aV9jaGVja19jb2xvcnMoKSBtaWdodCBoYXZlCisgICAgICogY2hhbmdlZCB0aGVtKSAqLworICAgIGhpZ2hsaWdodF9ndWlfc3RhcnRlZCgpOworCisgICAgLyoKKyAgICAgKiBTdGFydCBvdXQgYnkgYWRkaW5nIHRoZSBjb25maWd1cmVkIGJvcmRlciB3aWR0aCBpbnRvIHRoZSBib3JkZXIgb2Zmc2V0CisgICAgICovCisgICAgZ3VpLmJvcmRlcl9vZmZzZXQgPSBndWkuYm9yZGVyX3dpZHRoOworCisKKyAgICAvKgorICAgICAqIGNvbXB1dGUgYSBjb3VwbGUgb2YgbWV0cmljcyB1c2VkIGZvciB0aGUgZGlhbG9ncworICAgICAqLworICAgIGdldF9kaWFsb2dfZm9udF9tZXRyaWNzKCk7CisjaWZkZWYgRkVBVF9UT09MQkFSCisgICAgLyoKKyAgICAgKiBDcmVhdGUgdGhlIHRvb2xiYXIKKyAgICAgKi8KKyAgICBpbml0aWFsaXNlX3Rvb2xiYXIoKTsKKyNlbmRpZgorI2lmZGVmIE1TV0lOX0ZJTkRfUkVQTEFDRQorICAgIC8qCisgICAgICogSW5pdGlhbGlzZSB0aGUgZGlhbG9nIGJveCBzdHVmZgorICAgICAqLworICAgIHNfZmluZHJlcF9tc2cgPSBSZWdpc3RlcldpbmRvd01lc3NhZ2UoRklORE1TR1NUUklORyk7CisKKyAgICAvKiBJbml0aWFsaXNlIHRoZSBzdHJ1Y3QgKi8KKyAgICBzX2ZpbmRyZXBfc3RydWN0LmxTdHJ1Y3RTaXplID0gc2l6ZW9mKHNfZmluZHJlcF9zdHJ1Y3QpOworICAgIHNfZmluZHJlcF9zdHJ1Y3QubHBzdHJGaW5kV2hhdCA9IGFsbG9jKE1TV0lOX0ZSX0JVRlNJWkUpOworICAgIHNfZmluZHJlcF9zdHJ1Y3QubHBzdHJGaW5kV2hhdFswXSA9IE5VTDsKKyAgICBzX2ZpbmRyZXBfc3RydWN0Lmxwc3RyUmVwbGFjZVdpdGggPSBhbGxvYyhNU1dJTl9GUl9CVUZTSVpFKTsKKyAgICBzX2ZpbmRyZXBfc3RydWN0Lmxwc3RyUmVwbGFjZVdpdGhbMF0gPSBOVUw7CisgICAgc19maW5kcmVwX3N0cnVjdC53RmluZFdoYXRMZW4gPSBNU1dJTl9GUl9CVUZTSVpFOworICAgIHNfZmluZHJlcF9zdHJ1Y3Qud1JlcGxhY2VXaXRoTGVuID0gTVNXSU5fRlJfQlVGU0laRTsKKyNlbmRpZgorCisgICAgcmV0dXJuIE9LOworfQorCisKKy8qCisgKiBTZXQgdGhlIHNpemUgb2YgdGhlIHdpbmRvdyB0byB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBpbiBwaXhlbHMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9zaGVsbHNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCWludCBtaW5fd2lkdGgsIGludCBtaW5faGVpZ2h0LCBpbnQgYmFzZV93aWR0aCwgaW50IGJhc2VfaGVpZ2h0KQoreworICAgIFJFQ1QJd29ya2FyZWFfcmVjdDsKKyAgICBpbnQJCXdpbl93aWR0aCwgd2luX2hlaWdodDsKKyAgICBpbnQJCXdpbl94cG9zLCB3aW5feXBvczsKKyAgICBXSU5ET1dQTEFDRU1FTlQgd25kcGw7CisKKyAgICAvKiB0cnkgdG8ga2VlcCB3aW5kb3cgY29tcGxldGVseSBvbiBzY3JlZW4gKi8KKyAgICAvKiBnZXQgc2l6ZSBvZiB0aGUgc2NyZWVuIHdvcmsgYXJlYSAtIHVzZSBTTV9DWUZVTExTQ1JFRU4KKyAgICAgKiBpbnN0ZWFkIG9mIFNNX0NZU0NSRUVOIHNvIHRoYXQgd2UgZG9uJ3Qgb3ZlcmxhcCB0aGUKKyAgICAgKiB0YXNrYmFyIGlmIHNvbWVvbmUgZmlyZXMgdXMgdXAgb24gV2luOTUvTlQgKi8KKyAgICB3b3JrYXJlYV9yZWN0LmxlZnQgPSAwOworICAgIHdvcmthcmVhX3JlY3QudG9wID0gMDsKKyAgICB3b3JrYXJlYV9yZWN0LnJpZ2h0ID0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWFNDUkVFTik7CisgICAgd29ya2FyZWFfcmVjdC5ib3R0b20gPSBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZRlVMTFNDUkVFTik7CisKKyAgICAvKiBnZXQgY3VycmVudCBwb3Npc2lvbiBvZiBvdXIgd2luZG93ICovCisgICAgd25kcGwubGVuZ3RoID0gc2l6ZW9mKFdJTkRPV1BMQUNFTUVOVCk7CisgICAgR2V0V2luZG93UGxhY2VtZW50KHNfaHduZCwgJnduZHBsKTsKKyAgICBpZiAod25kcGwuc2hvd0NtZCA9PSBTV19TSE9XTk9STUFMKQorICAgIHsKKwl3aW5feHBvcyA9IHduZHBsLnJjTm9ybWFsUG9zaXRpb24ubGVmdDsKKwl3aW5feXBvcyA9IHduZHBsLnJjTm9ybWFsUG9zaXRpb24udG9wOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXdpbl94cG9zID0gd29ya2FyZWFfcmVjdC5sZWZ0OworCXdpbl95cG9zID0gd29ya2FyZWFfcmVjdC50b3A7CisgICAgfQorCisgICAgLyogY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgb3V0c2lkZSBvZiB0aGUgd2luZG93ICovCisgICAgd2luX3dpZHRoID0gd2lkdGggKyBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYRlJBTUUpICogMjsKKyAgICB3aW5faGVpZ2h0ID0gaGVpZ2h0ICsgR2V0U3lzdGVtTWV0cmljcyhTTV9DWUZSQU1FKSAqIDIKKwkJCSsgR2V0U3lzdGVtTWV0cmljcyhTTV9DWUNBUFRJT04pCisjaWZkZWYgRkVBVF9NRU5VCisJCQkrIGd1aV9tc3dpbl9nZXRfbWVudV9oZWlnaHQoRkFMU0UpCisjZW5kaWYKKwkJCTsKKworICAgIC8qIGlmIHRoZSB3aW5kb3cgaXMgZ29pbmcgb2ZmIHRoZSBzY3JlZW4sIG1vdmUgaXQgb24gdG8gdGhlIHNjcmVlbiAqLworICAgIGlmICh3aW5feHBvcyArIHdpbl93aWR0aCA+IHdvcmthcmVhX3JlY3QucmlnaHQpCisJd2luX3hwb3MgPSB3b3JrYXJlYV9yZWN0LnJpZ2h0IC0gd2luX3dpZHRoOworCisgICAgaWYgKHdpbl94cG9zIDwgd29ya2FyZWFfcmVjdC5sZWZ0KQorCXdpbl94cG9zID0gd29ya2FyZWFfcmVjdC5sZWZ0OworCisgICAgaWYgKHdpbl95cG9zICsgd2luX2hlaWdodCA+IHdvcmthcmVhX3JlY3QuYm90dG9tKQorCXdpbl95cG9zID0gd29ya2FyZWFfcmVjdC5ib3R0b20gLSB3aW5faGVpZ2h0OworCisgICAgaWYgKHdpbl95cG9zIDwgd29ya2FyZWFfcmVjdC50b3ApCisJd2luX3lwb3MgPSB3b3JrYXJlYV9yZWN0LnRvcDsKKworICAgIC8qIHNldCB3aW5kb3cgcG9zaXRpb24gKi8KKyAgICBTZXRXaW5kb3dQb3Moc19od25kLCBOVUxMLCB3aW5feHBvcywgd2luX3lwb3MsIHdpbl93aWR0aCwgd2luX2hlaWdodCwKKwkJIFNXUF9OT1pPUkRFUiB8IFNXUF9OT0FDVElWQVRFKTsKKworI2lmZGVmIEZFQVRfTUVOVQorICAgIC8qIE1lbnUgbWF5IHdyYXAgZGlmZmVyZW50bHkgbm93ICovCisgICAgZ3VpX21zd2luX2dldF9tZW51X2hlaWdodCghZ3VpLnN0YXJ0aW5nKTsKKyNlbmRpZgorfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3RodW1iKAorICAgIHNjcm9sbGJhcl9UICAgICAqc2IsCisgICAgbG9uZwkgICAgdmFsLAorICAgIGxvbmcJICAgIHNpemUsCisgICAgbG9uZwkgICAgbWF4KQoreworICAgIHNiLT5zY3JvbGxfc2hpZnQgPSAwOworICAgIHdoaWxlIChtYXggPiAzMjc2NykKKyAgICB7CisJbWF4ID0gKG1heCArIDEpID4+IDE7CisJdmFsICA+Pj0gMTsKKwlzaXplID4+PSAxOworCSsrc2ItPnNjcm9sbF9zaGlmdDsKKyAgICB9CisKKyAgICBpZiAoc2ItPnNjcm9sbF9zaGlmdCA+IDApCisJKytzaXplOworCisgICAgU2V0U2Nyb2xsUmFuZ2Uoc2ItPmlkLCBTQl9DVEwsIDAsIChpbnQpIG1heCwgRkFMU0UpOworICAgIFNldFNjcm9sbFBvcyhzYi0+aWQsIFNCX0NUTCwgKGludCkgdmFsLCBUUlVFKTsKK30KKworCisvKgorICogU2V0IHRoZSBjdXJyZW50IHRleHQgZm9udC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2ZvbnQoR3VpRm9udCBmb250KQoreworICAgIGd1aS5jdXJyRm9udCA9IGZvbnQ7CisgICAgU2VsZWN0Rm9udChzX2hkYywgZ3VpLmN1cnJGb250KTsKK30KKworCisKKworLyoKKyAqIFNldCB0aGUgY3VycmVudCB0ZXh0IGZvcmVncm91bmQgY29sb3IuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9mZ19jb2xvcihndWljb2xvcl9UIGNvbG9yKQoreworICAgIGd1aS5jdXJyRmdDb2xvciA9IGNvbG9yOworICAgIFNldFRleHRDb2xvcihzX2hkYywgZ3VpLmN1cnJGZ0NvbG9yKTsKK30KKworLyoKKyAqIFNldCB0aGUgY3VycmVudCB0ZXh0IGJhY2tncm91bmQgY29sb3IuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9iZ19jb2xvcihndWljb2xvcl9UIGNvbG9yKQoreworICAgIGlmIChndWkuY3VyckJnQ29sb3IgPT0gY29sb3IpCisJcmV0dXJuOworCisgICAgZ3VpLmN1cnJCZ0NvbG9yID0gY29sb3I7CisgICAgU2V0QmtDb2xvcihzX2hkYywgZ3VpLmN1cnJCZ0NvbG9yKTsKK30KKworCisKKyAgICB2b2lkCitndWlfbWNoX2RyYXdfc3RyaW5nKAorICAgIGludAkJcm93LAorICAgIGludAkJY29sLAorICAgIGNoYXJfdQkqdGV4dCwKKyAgICBpbnQJCWxlbiwKKyAgICBpbnQJCWZsYWdzKQoreworI2lmbmRlZiBNU1dJTjE2X0ZBU1RURVhUCisgICAgc3RhdGljIGludAkqcGFkZGluZyA9IE5VTEw7CisgICAgc3RhdGljIGludAlwYWRfc2l6ZSA9IDA7CisgICAgaW50CQlpOworI2VuZGlmCisgICAgSFBFTglocGVuLCBvbGRfcGVuOworICAgIGludAkJeTsKKworI2lmbmRlZiBNU1dJTjE2X0ZBU1RURVhUCisgICAgLyoKKyAgICAgKiBJdGFsaWMgYW5kIGJvbGQgdGV4dCBzZWVtcyB0byBoYXZlIGFuIGV4dHJhIHJvdyBvZiBwaXhlbHMgYXQgdGhlIGJvdHRvbQorICAgICAqIChiZWxvdyB3aGVyZSB0aGUgYm90dG9tIG9mIHRoZSBjaGFyYWN0ZXIgc2hvdWxkIGJlKS4gIElmIHdlIGRyYXcgdGhlCisgICAgICogY2hhcmFjdGVycyB3aXRoIGEgc29saWQgYmFja2dyb3VuZCwgdGhlIHRvcCByb3cgb2YgcGl4ZWxzIGluIHRoZQorICAgICAqIGNoYXJhY3RlciBiZWxvdyB3aWxsIGJlIG92ZXJ3cml0dGVuLiAgV2UgY2FuIGZpeCB0aGlzIGJ5IGZpbGxpbmcgaW4gdGhlCisgICAgICogYmFja2dyb3VuZCBvdXJzZWx2ZXMsIHRvIHRoZSBjb3JyZWN0IGNoYXJhY3RlciBwcm9wb3J0aW9ucywgYW5kIHRoZW4KKyAgICAgKiB3cml0aW5nIHRoZSBjaGFyYWN0ZXIgaW4gdHJhbnNwYXJlbnQgbW9kZS4gIFN0aWxsIGhhdmUgYSBwcm9ibGVtIHdoZW4KKyAgICAgKiB0aGUgY2hhcmFjdGVyIGlzICJfIiwgd2hpY2ggZ2V0cyB3cml0dGVuIG9uIHRvIHRoZSBjaGFyYWN0ZXIgYmVsb3cuCisgICAgICogTmV3IGZpeDogc2V0IGd1aS5jaGFyX2FzY2VudCB0byAtMS4gIFRoaXMgc2hpZnRzIGFsbCBjaGFyYWN0ZXJzIHVwIG9uZQorICAgICAqIHBpeGVsIGluIHRoZWlyIHNsb3RzLCB3aGljaCBmaXhlcyB0aGUgcHJvYmxlbSB3aXRoIHRoZSBib3R0b20gcm93IG9mCisgICAgICogcGl4ZWxzLglXZSBzdGlsbCBuZWVkIHRoaXMgY29kZSBiZWNhdXNlIG90aGVyd2lzZSB0aGUgdG9wIHJvdyBvZiBwaXhlbHMKKyAgICAgKiBiZWNvbWVzIGEgcHJvYmxlbS4gLSB3ZWJiLgorICAgICAqLworICAgIEhCUlVTSAloYnI7CisgICAgUkVDVAlyYzsKKworICAgIGlmICghKGZsYWdzICYgRFJBV19UUkFOU1ApKQorICAgIHsKKwkvKgorCSAqIENsZWFyIGJhY2tncm91bmQgZmlyc3QuCisJICogTm90ZTogRmlsbFJlY3QoKSBleGNsdWRlcyByaWdodCBhbmQgYm90dG9tIG9mIHJlY3RhbmdsZS4KKwkgKi8KKwlyYy5sZWZ0ID0gRklMTF9YKGNvbCk7CisJcmMudG9wID0gRklMTF9ZKHJvdyk7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBpbnQgY2VsbF9sZW4gPSAwOworCisJICAgIC8qIENvbXB1dGUgdGhlIGxlbmd0aCBpbiBkaXNwbGF5IGNlbGxzLiAqLworCSAgICBmb3IgKG4gPSAwOyBuIDwgbGVuOyBuICs9IE1CX0JZVEUyTEVOKHRleHRbbl0pKQorCQljZWxsX2xlbiArPSAoKm1iX3B0cjJjZWxscykodGV4dCArIG4pOworCSAgICByYy5yaWdodCA9IEZJTExfWChjb2wgKyBjZWxsX2xlbik7CisJfQorCWVsc2UKKyNlbmRpZgorCSAgICByYy5yaWdodCA9IEZJTExfWChjb2wgKyBsZW4pOworCXJjLmJvdHRvbSA9IEZJTExfWShyb3cgKyAxKTsKKwloYnIgPSBDcmVhdGVTb2xpZEJydXNoKGd1aS5jdXJyQmdDb2xvcik7CisJRmlsbFJlY3Qoc19oZGMsICZyYywgaGJyKTsKKwlEZWxldGVCcnVzaChoYnIpOworCisJU2V0QmtNb2RlKHNfaGRjLCBUUkFOU1BBUkVOVCk7CisKKwkvKgorCSAqIFdoZW4gZHJhd2luZyBibG9jayBjdXJzb3IsIHByZXZlbnQgaW52ZXJ0ZWQgY2hhcmFjdGVyIHNwaWxsaW5nCisJICogb3ZlciBjaGFyYWN0ZXIgY2VsbCAoY2FuIGhhcHBlbiB3aXRoIGJvbGQvaXRhbGljKQorCSAqLworCWlmIChmbGFncyAmIERSQVdfQ1VSU09SKQorCXsKKwkgICAgcGNsaXByZWN0ID0gJnJjOworCSAgICBmb3B0aW9ucyA9IEVUT19DTElQUEVEOworCX0KKyAgICB9CisjZWxzZQorICAgIC8qCisgICAgICogQWx0ZXJuYXRpdmU6IHdyaXRlIHRoZSBjaGFyYWN0ZXJzIGluIG9wYXF1ZSBtb2RlLCBzaW5jZSB3ZSBoYXZlIGJsb2NrZWQKKyAgICAgKiBib2xkIG9yIGl0YWxpYyBmb250cy4KKyAgICAgKi8KKyAgICAvKiBUaGUgT1BBUVVFIG1vZGUgYW5kIGJhY2tjb2xvdXIgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0ICovCisjZW5kaWYKKyAgICAvKiBUaGUgZm9yZWNvbG9yIGFuZCBmb250IGhhdmUgYWxyZWFkeSBiZWVuIHNldCAqLworCisjaWZuZGVmIE1TV0lOMTZfRkFTVFRFWFQKKworICAgIGlmIChwYWRfc2l6ZSAhPSBDb2x1bW5zIHx8IHBhZGRpbmcgPT0gTlVMTCB8fCBwYWRkaW5nWzBdICE9IGd1aS5jaGFyX3dpZHRoKQorICAgIHsKKwl2aW1fZnJlZShwYWRkaW5nKTsKKwlwYWRfc2l6ZSA9IENvbHVtbnM7CisKKwlwYWRkaW5nID0gKGludCAqKWFsbG9jKHBhZF9zaXplICogc2l6ZW9mKGludCkpOworCWlmIChwYWRkaW5nICE9IE5VTEwpCisJICAgIGZvciAoaSA9IDA7IGkgPCBwYWRfc2l6ZTsgaSsrKQorCQlwYWRkaW5nW2ldID0gZ3VpLmNoYXJfd2lkdGg7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIFdlIGhhdmUgdG8gcHJvdmlkZSB0aGUgcGFkZGluZyBhcmd1bWVudCBiZWNhdXNlIGl0YWxpYyBhbmQgYm9sZCB2ZXJzaW9ucworICAgICAqIG9mIGZpeGVkLXdpZHRoIGZvbnRzIGFyZSBvZnRlbiBvbmUgcGl4ZWwgb3Igc28gd2lkZXIgdGhhbiB0aGVpciBub3JtYWwKKyAgICAgKiB2ZXJzaW9ucy4KKyAgICAgKiBObyBjaGVjayBmb3IgRFJBV19CT0xELCBXaW5kb3dzIHdpbGwgaGF2ZSBkb25lIGl0IGFscmVhZHkuCisgICAgICovCisjaWZuZGVmIE1TV0lOMTZfRkFTVFRFWFQKKyAgICBFeHRUZXh0T3V0KHNfaGRjLCBURVhUX1goY29sKSwgVEVYVF9ZKHJvdyksIDAsIE5VTEwsCisJCQkJCQkgICAgIChjaGFyICopdGV4dCwgbGVuLCBwYWRkaW5nKTsKKyNlbHNlCisgICAgVGV4dE91dChzX2hkYywgVEVYVF9YKGNvbCksIFRFWFRfWShyb3cpLCAoY2hhciAqKXRleHQsIGxlbik7CisjZW5kaWYKKworICAgIGlmIChmbGFncyAmIERSQVdfVU5ERVJMKQorICAgIHsKKwlocGVuID0gQ3JlYXRlUGVuKFBTX1NPTElELCAxLCBndWkuY3VyckZnQ29sb3IpOworCW9sZF9wZW4gPSBTZWxlY3RPYmplY3Qoc19oZGMsIGhwZW4pOworCS8qIFdoZW4gcF9saW5lc3BhY2UgaXMgMCwgb3ZlcndyaXRlIHRoZSBib3R0b20gcm93IG9mIHBpeGVscy4KKwkgKiBPdGhlcndpc2UgcHV0IHRoZSBsaW5lIGp1c3QgYmVsb3cgdGhlIGNoYXJhY3Rlci4gKi8KKwl5ID0gRklMTF9ZKHJvdyArIDEpIC0gMTsKKyNpZm5kZWYgTVNXSU4xNl9GQVNUVEVYVAorCWlmIChwX2xpbmVzcGFjZSA+IDEpCisJICAgIHkgLT0gcF9saW5lc3BhY2UgLSAxOworI2VuZGlmCisJTW92ZVRvRXgoc19oZGMsIEZJTExfWChjb2wpLCB5LCBOVUxMKTsKKwkvKiBOb3RlOiBMaW5lVG8oKSBleGNsdWRlcyB0aGUgbGFzdCBwaXhlbCBpbiB0aGUgbGluZS4gKi8KKwlMaW5lVG8oc19oZGMsIEZJTExfWChjb2wgKyBsZW4pLCB5KTsKKwlEZWxldGVPYmplY3QoU2VsZWN0T2JqZWN0KHNfaGRjLCBvbGRfcGVuKSk7CisgICAgfQorfQorCisKKy8qCisgKiBPdXRwdXQgcm91dGluZXMuCisgKi8KKworLyogRmx1c2ggYW55IG91dHB1dCB0byB0aGUgc2NyZWVuICovCisgICAgdm9pZAorZ3VpX21jaF9mbHVzaCh2b2lkKQoreworICAgIC8qIElzIGFueXRoaW5nIG5lZWRlZCBoZXJlPyAqLworfQorCisgICAgc3RhdGljIHZvaWQKK2NsZWFyX3JlY3QoUkVDVCAqcmNwKQoreworICAgIC8qIFVzZSB0cmljayBmb3IgZmFzdCByZWN0IGNsZWFyICovCisgICAgZ3VpX21jaF9zZXRfYmdfY29sb3IoZ3VpLmJhY2tfcGl4ZWwpOworICAgIEV4dFRleHRPdXQoc19oZGMsIDAsIDAsIEVUT19DTElQUEVEIHwgRVRPX09QQVFVRSwgcmNwLCBOVUxMLCAwLCBOVUxMKTsKK30KKworCisKKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEFkZCBhIHN1YiBtZW51IHRvIHRoZSBtZW51IGJhci4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfYWRkX21lbnUoCisgICAgdmltbWVudV9UCSptZW51LAorICAgIGludAkJcG9zKQoreworICAgIHZpbW1lbnVfVAkqcGFyZW50ID0gbWVudS0+cGFyZW50OworCisgICAgbWVudS0+c3VibWVudV9pZCA9IENyZWF0ZVBvcHVwTWVudSgpOworICAgIG1lbnUtPmlkID0gc19tZW51X2lkKys7CisKKyAgICBpZiAobWVudV9pc19tZW51YmFyKG1lbnUtPm5hbWUpKQorICAgIHsKKwlJbnNlcnRNZW51KChwYXJlbnQgPT0gTlVMTCkgPyBzX21lbnVCYXIgOiBwYXJlbnQtPnN1Ym1lbnVfaWQsCisJCShVSU5UKXBvcywgTUZfUE9QVVAgfCBNRl9TVFJJTkcgfCBNRl9CWVBPU0lUSU9OLAorCQkoVUlOVCltZW51LT5zdWJtZW51X2lkLCAgbWVudS0+bmFtZSk7CisgICAgfQorCisgICAgLyogRml4IHdpbmRvdyBzaXplIGlmIG1lbnUgbWF5IGhhdmUgd3JhcHBlZCAqLworICAgIGlmIChwYXJlbnQgPT0gTlVMTCkKKwlndWlfbXN3aW5fZ2V0X21lbnVfaGVpZ2h0KCFndWkuc3RhcnRpbmcpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zaG93X3BvcHVwbWVudSh2aW1tZW51X1QgKm1lbnUpCit7CisgICAgUE9JTlQgbXA7CisKKyAgICAodm9pZClHZXRDdXJzb3JQb3MoKExQUE9JTlQpJm1wKTsKKyAgICBndWlfbWNoX3Nob3dfcG9wdXBtZW51X2F0KG1lbnUsIChpbnQpbXAueCwgKGludCltcC55KTsKK30KKworICAgIHZvaWQKK2d1aV9tYWtlX3BvcHVwKGNoYXJfdSAqcGF0aF9uYW1lKQoreworICAgIHZpbW1lbnVfVAkqbWVudSA9IGd1aV9maW5kX21lbnUocGF0aF9uYW1lKTsKKworICAgIGlmIChtZW51ICE9IE5VTEwpCisgICAgeworCS8qIEZpbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IGN1cnNvciAqLworCURXT1JECXRlbXBfcDsKKwlQT0lOVAlwOworCXRlbXBfcCA9IEdldERDT3JnKHNfaGRjKTsKKwlwLnggPSBMT1dPUkQodGVtcF9wKTsKKwlwLnkgPSBISVdPUkQodGVtcF9wKTsKKwlpZiAoY3Vyd2luIT1OVUxMKQorCXsKKwkgICAgcC54Kz0gVEVYVF9YKFdfV0lOQ09MKGN1cndpbikgKyBjdXJ3aW4tPndfd2NvbCArMSk7CisJICAgIHAueSs9IFRFWFRfWShXX1dJTlJPVyhjdXJ3aW4pICsgY3Vyd2luLT53X3dyb3cgKzEpOworCX0KKwltc2dfc2Nyb2xsID0gRkFMU0U7CisJZ3VpX21jaF9zaG93X3BvcHVwbWVudV9hdChtZW51LCAoaW50KXAueCwgKGludClwLnkpOworICAgIH0KK30KKworLyoKKyAqIEFkZCBhIG1lbnUgaXRlbSB0byBhIG1lbnUKKyAqLworICAgIHZvaWQKK2d1aV9tY2hfYWRkX21lbnVfaXRlbSgKKyAgICB2aW1tZW51X1QJKm1lbnUsCisgICAgaW50CQlpZHgpCit7CisgICAgdmltbWVudV9UCSpwYXJlbnQgPSBtZW51LT5wYXJlbnQ7CisKKyAgICBtZW51LT5pZCA9IHNfbWVudV9pZCsrOworICAgIG1lbnUtPnN1Ym1lbnVfaWQgPSBOVUxMOworCisjaWZkZWYgRkVBVF9UT09MQkFSCisgICAgaWYgKG1lbnVfaXNfdG9vbGJhcihwYXJlbnQtPm5hbWUpKQorICAgIHsKKwlUQkJVVFRPTiBuZXd0YjsKKworCXZpbV9tZW1zZXQoJm5ld3RiLCAwLCBzaXplb2YobmV3dGIpKTsKKwlpZiAobWVudV9pc19zZXBhcmF0b3IobWVudS0+bmFtZSkpCisJeworCSAgICBuZXd0Yi5pQml0bWFwID0gMDsKKwkgICAgbmV3dGIuZnNTdHlsZSA9IFRCU1RZTEVfU0VQOworCX0KKwllbHNlCisJeworCSAgICBpZiAobWVudS0+aWNvbmlkeCA+PSBUT09MQkFSX0JJVE1BUF9DT1VOVCkKKwkJbmV3dGIuaUJpdG1hcCA9IC0xOworCSAgICBlbHNlCisJCW5ld3RiLmlCaXRtYXAgPSBtZW51LT5pY29uaWR4OworCSAgICBuZXd0Yi5mc1N0eWxlID0gVEJTVFlMRV9CVVRUT047CisJfQorCW5ld3RiLmlkQ29tbWFuZCA9IG1lbnUtPmlkOworCW5ld3RiLmZzU3RhdGUgPSBUQlNUQVRFX0VOQUJMRUQ7CisJU2VuZE1lc3NhZ2Uoc190b29sYmFyaHduZCwgVEJfSU5TRVJUQlVUVE9OLCAoV1BBUkFNKWlkeCwKKwkJCQkJCQkgICAgIChMUEFSQU0pJm5ld3RiKTsKKwltZW51LT5zdWJtZW51X2lkID0gKEhNRU5VKS0xOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJSW5zZXJ0TWVudShwYXJlbnQtPnN1Ym1lbnVfaWQsIChVSU5UKWlkeCwKKwkJKG1lbnVfaXNfc2VwYXJhdG9yKG1lbnUtPm5hbWUpID8gTUZfU0VQQVJBVE9SIDogTUZfU1RSSU5HKQorCQkJCQkJCSAgICAgIHwgTUZfQllQT1NJVElPTiwKKwkJKFVJTlQpbWVudS0+aWQsIG1lbnUtPm5hbWUpOworICAgIH0KK30KKworLyoKKyAqIERlc3Ryb3kgdGhlIG1hY2hpbmUgc3BlY2lmaWMgbWVudSB3aWRnZXQuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2Rlc3Ryb3lfbWVudSh2aW1tZW51X1QgKm1lbnUpCit7CisgICAgVUlOVCBpLCBqOworICAgIGNoYXIgcGFudHNbODBdOyAvKjxWTj4gaGFjayovCisjaWZkZWYgRkVBVF9UT09MQkFSCisgICAgLyoKKyAgICAgKiBpcyB0aGlzIGEgdG9vbGJhciBidXR0b24/CisgICAgICovCisgICAgaWYgKG1lbnUtPnN1Ym1lbnVfaWQgPT0gKEhNRU5VKS0xKQorICAgIHsKKwlpbnQgaUJ1dHRvbjsKKworCWlCdXR0b24gPSBTZW5kTWVzc2FnZShzX3Rvb2xiYXJod25kLCBUQl9DT01NQU5EVE9JTkRFWCwgKFdQQVJBTSltZW51LT5pZCwgMCk7CisJU2VuZE1lc3NhZ2Uoc190b29sYmFyaHduZCwgVEJfREVMRVRFQlVUVE9OLCAoV1BBUkFNKWlCdXR0b24sIDApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJLyoKKwkgKiBuZWdyaTogaG9ycmlibGUgQVBJIGJ1ZyB3aGVuIHJ1bm5pbmcgMTYtYml0IHByb2dyYW1zIHVuZGVyIFdpbjl4IG9yCisJICogTlQgbWVhbnMgdGhhdCB3ZSBjYW4ndCB1c2UgTUZfQllDT01NQU5EIGZvciBtZW51IGl0ZW1zIHdoaWNoIGhhdmUKKwkgKiBzdWJtZW51cywgaW5jbHVkaW5nIHRoZSB0b3AtbGV2ZWwgaGVhZGluZ3MuIFdlIGhhdmUgdG8gZmluZCB0aGUgbWVudQorCSAqIGl0ZW0gYW5kIHVzZSBNRl9CWVBPU0lUSU9OIGluc3RlYWQuIDotcAorCSAqLworICAgIGlmIChtZW51LT5wYXJlbnQgIT0gTlVMTAorCSAgICAmJiBtZW51X2lzX3BvcHVwKG1lbnUtPnBhcmVudC0+ZG5hbWUpCisJICAgICYmIG1lbnUtPnBhcmVudC0+c3VibWVudV9pZCAhPSBOVUxMKQorCVJlbW92ZU1lbnUobWVudS0+cGFyZW50LT5zdWJtZW51X2lkLCBtZW51LT5pZCwgTUZfQllDT01NQU5EKTsKKyAgICBlbHNlIGlmIChtZW51LT5zdWJtZW51X2lkID09IE5VTEwpCisJUmVtb3ZlTWVudShzX21lbnVCYXIsIG1lbnUtPmlkLCBNRl9CWUNPTU1BTkQpOworICAgIGVsc2UgaWYgKG1lbnUtPnBhcmVudCAhPSBOVUxMKQorICAgIHsKKwlpID0gR2V0TWVudUl0ZW1Db3VudChtZW51LT5wYXJlbnQtPnN1Ym1lbnVfaWQpOworCWZvciAoaiA9IDA7IGogPCBpOyArK2opCisJeworCSAgICBHZXRNZW51U3RyaW5nKG1lbnUtPnBhcmVudC0+c3VibWVudV9pZCwgaiwKKwkJICAgIHBhbnRzLCA4MCwgTUZfQllQT1NJVElPTik7CisJICAgIGlmIChzdHJjbXAocGFudHMsIG1lbnUtPm5hbWUpID09IDApCisJICAgIHsKKwkJUmVtb3ZlTWVudShtZW51LT5wYXJlbnQtPnN1Ym1lbnVfaWQsIGosIE1GX0JZUE9TSVRJT04pOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpID0gR2V0TWVudUl0ZW1Db3VudChzX21lbnVCYXIpOworCWZvciAoaiA9IDA7IGogPCBpOyArK2opCisJeworCSAgICBHZXRNZW51U3RyaW5nKHNfbWVudUJhciwgaiwgcGFudHMsIDgwLCBNRl9CWVBPU0lUSU9OKTsKKwkgICAgaWYgKHN0cmNtcChwYW50cywgbWVudS0+bmFtZSkgPT0gMCkKKwkgICAgeworCQlSZW1vdmVNZW51KHNfbWVudUJhciwgaiwgTUZfQllQT1NJVElPTik7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIChtZW51LT5zdWJtZW51X2lkICE9IE5VTEwpCisJRGVzdHJveU1lbnUobWVudS0+c3VibWVudV9pZCk7CisgICAgfQorICAgIERyYXdNZW51QmFyKHNfaHduZCk7Cit9CisKKworLyoKKyAqIE1ha2UgYSBtZW51IGVpdGhlciBncmV5IG9yIG5vdCBncmV5LgorICovCisgICAgdm9pZAorZ3VpX21jaF9tZW51X2dyZXkoCisgICAgdmltbWVudV9UICptZW51LAorICAgIGludAkgICAgZ3JleSkKK3sKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICAvKgorICAgICAqIGlzIHRoaXMgYSB0b29sYmFyIGJ1dHRvbj8KKyAgICAgKi8KKyAgICBpZiAobWVudS0+c3VibWVudV9pZCA9PSAoSE1FTlUpLTEpCisgICAgeworCVNlbmRNZXNzYWdlKHNfdG9vbGJhcmh3bmQsIFRCX0VOQUJMRUJVVFRPTiwKKwkgICAgKFdQQVJBTSltZW51LT5pZCwgKExQQVJBTSkgTUFLRUxPTkcoKGdyZXkgPyBGQUxTRSA6IFRSVUUpLCAwKSApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICBpZiAoZ3JleSkKKwlFbmFibGVNZW51SXRlbShzX21lbnVCYXIsIG1lbnUtPmlkLCBNRl9CWUNPTU1BTkQgfCBNRl9HUkFZRUQpOworICAgIGVsc2UKKwlFbmFibGVNZW51SXRlbShzX21lbnVCYXIsIG1lbnUtPmlkLCBNRl9CWUNPTU1BTkQgfCBNRl9FTkFCTEVEKTsKKworfQorCisKKyNlbmRpZiAvKkZFQVRfTUVOVSovCisKKworLyogZGVmaW5lIHNvbWUgbWFjcm9zIHVzZWQgdG8gbWFrZSB0aGUgZGlhbG9ndWUgY3JlYXRpb24gbW9yZSByZWFkYWJsZSAqLworCisjZGVmaW5lIGFkZF9zdHJpbmcocykgc3RyY3B5KChMUFNUUilwLCBzKTsgKExQU1RSKXAgKz0gKHN0cmxlbigoTFBTVFIpcCkgKyAxKQorI2RlZmluZSBhZGRfd29yZCh4KQkJKnArKyA9ICh4KQorI2RlZmluZSBhZGRfYnl0ZSh4KQkJKigoTFBTVFIpcCkrKyA9ICh4KQorI2RlZmluZSBhZGRfbG9uZyh4KQkJKigoTFBEV09SRClwKSsrID0gKHgpCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBzdHVmZiBmb3IgZGlhbG9ncworICovCisKKy8qCisgKiBUaGUgY2FsbGJhY2sgcm91dGluZSB1c2VkIGJ5IGFsbCB0aGUgZGlhbG9ncy4gIFZlcnkgc2ltcGxlLiAgRmlyc3QsCisgKiBhY2tub3dsZWRnZXMgdGhlIElOSVRESUFMT0cgbWVzc2FnZSBzbyB0aGF0IFdpbmRvd3Mga25vd3MgdG8gZG8gc3RhbmRhcmQKKyAqIGRpYWxvZyBzdHVmZiAoUmV0dXJuID0gZGVmYXVsdCwgRXNjID0gY2FuY2VsLi4uLikgU2Vjb25kLCBpZiBhIGJ1dHRvbiBpcworICogcHJlc3NlZCwgcmV0dXJuIHRoYXQgYnV0dG9uJ3MgSUQgLSBJRENBTkNFTCAoMiksIHdoaWNoIGlzIHRoZSBidXR0b24ncworICogbnVtYmVyLgorICovCisJIHN0YXRpYyBCT09MIENBTExCQUNLCitkaWFsb2dfY2FsbGJhY2soCisJIEhXTkQgaHduZCwKKwkgVUlOVCBtZXNzYWdlLAorCSBXUEFSQU0gd1BhcmFtLAorCSBMUEFSQU0gbFBhcmFtKQoreworICAgIGlmIChtZXNzYWdlID09IFdNX0lOSVRESUFMT0cpCisgICAgeworCUNlbnRlcldpbmRvdyhod25kLCBHZXRXaW5kb3coaHduZCwgR1dfT1dORVIpKTsKKwkvKiBTZXQgZm9jdXMgdG8gdGhlIGRpYWxvZy4gIFNldCB0aGUgZGVmYXVsdCBidXR0b24sIGlmIHNwZWNpZmllZC4gKi8KKwkodm9pZClTZXRGb2N1cyhod25kKTsKKwlpZiAoZGlhbG9nX2RlZmF1bHRfYnV0dG9uID4gSURDQU5DRUwpCisJICAgICh2b2lkKVNldEZvY3VzKEdldERsZ0l0ZW0oaHduZCwgZGlhbG9nX2RlZmF1bHRfYnV0dG9uKSk7CisvLwlpZiAoZGlhbG9nX2RlZmF1bHRfYnV0dG9uID4gMCkKKy8vCSAgICAodm9pZClTZXRGb2N1cyhHZXREbGdJdGVtKGh3bmQsIGRpYWxvZ19kZWZhdWx0X2J1dHRvbiArIElEQ0FOQ0VMKSk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChtZXNzYWdlID09IFdNX0NPTU1BTkQpCisgICAgeworCWludAlidXR0b24gPSBMT1dPUkQod1BhcmFtKTsKKworCS8qIERvbid0IGVuZCB0aGUgZGlhbG9nIGlmIHNvbWV0aGluZyB3YXMgc2VsZWN0ZWQgdGhhdCB3YXMKKwkgKiBub3QgYSBidXR0b24uCisJICovCisJaWYgKGJ1dHRvbiA+PSBETEdfTk9OQlVUVE9OX0NPTlRST0wpCisJICAgIHJldHVybiBUUlVFOworCisJLyogSWYgdGhlIGVkaXQgYm94IGV4aXN0cywgY29weSB0aGUgc3RyaW5nLiAqLworCWlmIChzX3RleHRmaWVsZCAhPSBOVUxMKQorCSAgICBHZXREbGdJdGVtVGV4dChod25kLCBETEdfTk9OQlVUVE9OX0NPTlRST0wgKyAyLAorCQkJCQkJCSBzX3RleHRmaWVsZCwgSU9TSVpFKTsKKworCS8qCisJICogTmVlZCB0byBjaGVjayBmb3IgSURPSyBiZWNhdXNlIGlmIHRoZSB1c2VyIGp1c3QgaGl0cyBSZXR1cm4gdG8KKwkgKiBhY2NlcHQgdGhlIGRlZmF1bHQgdmFsdWUsIHNvbWUgcmVhc29uIHRoaXMgaXMgd2hhdCB3ZSBnZXQuCisJICovCisJaWYgKGJ1dHRvbiA9PSBJRE9LKQorCSAgICBFbmREaWFsb2coaHduZCwgZGlhbG9nX2RlZmF1bHRfYnV0dG9uKTsKKwllbHNlCisJICAgIEVuZERpYWxvZyhod25kLCBidXR0b24gLSBJRENBTkNFTCk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgaWYgKChtZXNzYWdlID09IFdNX1NZU0NPTU1BTkQpICYmICh3UGFyYW0gPT0gU0NfQ0xPU0UpKQorICAgIHsKKwlFbmREaWFsb2coaHduZCwgMCk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIENyZWF0ZSBhIGRpYWxvZyBkeW5hbWljYWxseSBmcm9tIHRoZSBwYXJhbWV0ZXIgc3RyaW5ncy4KKyAqIHR5cGUJCT0gdHlwZSBvZiBkaWFsb2cgKHF1ZXN0aW9uLCBhbGVydCwgZXRjLikKKyAqIHRpdGxlCT0gZGlhbG9nIHRpdGxlLiBtYXkgYmUgTlVMTCBmb3IgZGVmYXVsdCB0aXRsZS4KKyAqIG1lc3NhZ2UJPSB0ZXh0IHRvIGRpc3BsYXkuIERpYWxvZyBzaXplcyB0byBhY2NvbW1vZGF0ZSBpdC4KKyAqIGJ1dHRvbnMJPSAnXG4nIHNlcGFyYXRlZCBsaXN0IG9mIGJ1dHRvbiBjYXB0aW9ucywgZGVmYXVsdCBmaXJzdC4KKyAqIGRmbHRidXR0b24JPSBudW1iZXIgb2YgZGVmYXVsdCBidXR0b24uCisgKgorICogVGhpcyByb3V0aW5lIHJldHVybnMgMSBpZiB0aGUgZmlyc3QgYnV0dG9uIGlzIHByZXNzZWQsCisgKgkJCTIgZm9yIHRoZSBzZWNvbmQsIGV0Yy4KKyAqCisgKgkJCTAgaW5kaWNhdGVzIEVzYyB3YXMgcHJlc3NlZC4KKyAqCQkJLTEgZm9yIHVuZXhwZWN0ZWQgZXJyb3IKKyAqCisgKiBJZiBzdHViYmluZyBvdXQgdGhpcyBmbiwgcmV0dXJuIDEuCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXJfdSBkbGdfaWNvbnNbXSA9IC8qIG11c3QgbWF0Y2ggbmFtZXMgaW4gcmVzb3VyY2UgZmlsZSAqLworeworICAgIElEUl9WSU0sCisgICAgSURSX1ZJTV9FUlJPUiwKKyAgICBJRFJfVklNX0FMRVJULAorICAgIElEUl9WSU1fSU5GTywKKyAgICBJRFJfVklNX1FVRVNUSU9OCit9OworCisgICAgaW50CitndWlfbWNoX2RpYWxvZygKKyAgICBpbnQJCSB0eXBlLAorICAgIGNoYXJfdQkqdGl0bGUsCisgICAgY2hhcl91CSptZXNzYWdlLAorICAgIGNoYXJfdQkqYnV0dG9ucywKKyAgICBpbnQJCSBkZmx0YnV0dG9uLAorICAgIGNoYXJfdQkqdGV4dGZpZWxkKQoreworICAgIEZBUlBST0MJZHA7CisgICAgTFBXT1JECXAsIHBudW1pdGVtczsKKyAgICBpbnQJCW51bUJ1dHRvbnM7CisgICAgaW50CQkqYnV0dG9uV2lkdGhzLCAqYnV0dG9uUG9zaXRpb25zOworICAgIGludAkJYnV0dG9uWXBvczsKKyAgICBpbnQJCW5jaGFyLCBpOworICAgIERXT1JECWxTdHlsZTsKKyAgICBpbnQJCWRsZ3dpZHRoID0gMDsKKyAgICBpbnQJCWRsZ2hlaWdodDsKKyAgICBpbnQJCWVkaXRib3hoZWlnaHQ7CisgICAgaW50CQlob3JpeldpZHRoOworICAgIGludAkJbXNnaGVpZ2h0OworICAgIGNoYXJfdQkqcHN0YXJ0OworICAgIGNoYXJfdQkqcGVuZDsKKyAgICBjaGFyX3UJKnRidWZmZXI7CisgICAgUkVDVAlyZWN0OworICAgIEhXTkQJaHduZDsKKyAgICBIREMJCWhkYzsKKyAgICBIRk9OVAlvbGRGb250OworICAgIFRFWFRNRVRSSUMJZm9udEluZm87CisgICAgaW50CQlmb250SGVpZ2h0OworICAgIGludAkJdGV4dFdpZHRoLCBtaW5CdXR0b25XaWR0aCwgbWVzc2FnZVdpZHRoOworICAgIGludAkJbWF4RGlhbG9nV2lkdGg7CisgICAgaW50CQl2ZXJ0aWNhbDsKKyAgICBpbnQJCWRsZ1BhZGRpbmdYOworICAgIGludAkJZGxnUGFkZGluZ1k7CisgICAgSEdMT0JBTAloZ2xiRGxnVGVtcDsKKworI2lmbmRlZiBOT19DT05TT0xFCisgICAgLyogRG9uJ3Qgb3V0cHV0IGFueXRoaW5nIGluIHNpbGVudCBtb2RlICgiZXggLXMiKSAqLworICAgIGlmIChzaWxlbnRfbW9kZSkKKwlyZXR1cm4gZGZsdGJ1dHRvbjsgICAvKiByZXR1cm4gZGVmYXVsdCBvcHRpb24gKi8KKyNlbmRpZgorCisgICAgLyogSWYgdGhlcmUgaXMgbm8gd2luZG93IHlldCwgb3BlbiBpdC4gKi8KKyAgICBpZiAoc19od25kID09IE5VTEwgJiYgZ3VpX21jaF9pbml0KCkgPT0gRkFJTCkKKwlyZXR1cm4gZGZsdGJ1dHRvbjsKKworICAgIGlmICgodHlwZSA8IDApIHx8ICh0eXBlID4gVklNX0xBU1RfVFlQRSkpCisJdHlwZSA9IDA7CisKKyAgICAvKiBhbGxvY2F0ZSBzb21lIG1lbW9yeSBmb3IgZGlhbG9nIHRlbXBsYXRlICovCisgICAgLyogVE9ETyBzaG91bGQgY29tcHV0ZSB0aGlzIHJlYWxseSovCisKKyAgICBoZ2xiRGxnVGVtcCA9IEdsb2JhbEFsbG9jKEdITkQsICBETEdfQUxMT0NfU0laRSk7CisgICAgaWYgKGhnbGJEbGdUZW1wID09IE5VTEwpCisJcmV0dXJuIC0xOworCisgICAgcCA9IChMUFdPUkQpIEdsb2JhbExvY2soaGdsYkRsZ1RlbXApOworCisgICAgaWYgKHAgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisKKyAgICAvKgorICAgICAqIG1ha2UgYSBjb3B5IG9mICdidXR0b25zJyB0byBmaWRkbGUgd2l0aCBpdC4gIGNvbXBsaWVyIGdyaXp6bGVzIGJlY2F1c2UKKyAgICAgKiB2aW1fc3Ryc2F2ZSgpIGRvZXNuJ3QgdGFrZSBhIGNvbnN0IGFyZyAod2h5IG5vdD8pLCBzbyBjYXN0IGF3YXkgdGhlCisgICAgICogY29uc3QuCisgICAgICovCisgICAgdGJ1ZmZlciA9IHZpbV9zdHJzYXZlKGJ1dHRvbnMpOworICAgIGlmICh0YnVmZmVyID09IE5VTEwpCisJcmV0dXJuIC0xOworCisgICAgLS1kZmx0YnV0dG9uOyAgIC8qIENoYW5nZSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkICovCisKKyAgICAvKiBDb3VudCBidXR0b25zICovCisgICAgbnVtQnV0dG9ucyA9IDE7CisgICAgZm9yIChpID0gMDsgdGJ1ZmZlcltpXSAhPSAnXDAnOyBpKyspCisgICAgeworCWlmICh0YnVmZmVyW2ldID09IERMR19CVVRUT05fU0VQKQorCSAgICBudW1CdXR0b25zKys7CisgICAgfQorICAgIGlmIChkZmx0YnV0dG9uID49IG51bUJ1dHRvbnMpCisJZGZsdGJ1dHRvbiA9IDA7CisKKyAgICAvKiBBbGxvY2F0ZSBhcnJheSB0byBob2xkIHRoZSB3aWR0aCBvZiBlYWNoIGJ1dHRvbiAqLworICAgIGJ1dHRvbldpZHRocyA9IChpbnQgKikgbGFsbG9jKG51bUJ1dHRvbnMgKiBzaXplb2YoaW50KSwgVFJVRSk7CisgICAgaWYgKGJ1dHRvbldpZHRocyA9PSBOVUxMKQorCXJldHVybiAtMTsKKworICAgIC8qIEFsbG9jYXRlIGFycmF5IHRvIGhvbGQgdGhlIFggcG9zaXRpb24gb2YgZWFjaCBidXR0b24gKi8KKyAgICBidXR0b25Qb3NpdGlvbnMgPSAoaW50ICopIGxhbGxvYyhudW1CdXR0b25zICogc2l6ZW9mKGludCksIFRSVUUpOworICAgIGlmIChidXR0b25Qb3NpdGlvbnMgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisKKyAgICAvKgorICAgICAqIENhbGN1bGF0ZSBob3cgYmlnIHRoZSBkaWFsb2cgbXVzdCBiZS4KKyAgICAgKi8KKyAgICBod25kID0gR2V0RGVza3RvcFdpbmRvdygpOworICAgIGhkYyA9IEdldFdpbmRvd0RDKGh3bmQpOworICAgIG9sZEZvbnQgPSBTZWxlY3RGb250KGhkYywgR2V0U3RvY2tPYmplY3QoU1lTVEVNX0ZPTlQpKTsKKyAgICBkbGdQYWRkaW5nWCA9IERMR19PTERfU1RZTEVfUEFERElOR19YOworICAgIGRsZ1BhZGRpbmdZID0gRExHX09MRF9TVFlMRV9QQURESU5HX1k7CisKKyAgICBHZXRUZXh0TWV0cmljcyhoZGMsICZmb250SW5mbyk7CisgICAgZm9udEhlaWdodCA9IGZvbnRJbmZvLnRtSGVpZ2h0OworCisgICAgLyogTWluaW11bSB3aWR0aCBmb3IgaG9yaXpvbnRhbCBidXR0b24gKi8KKyAgICBtaW5CdXR0b25XaWR0aCA9IEdldFRleHRXaWR0aChoZGMsICJDYW5jZWwiLCA2KTsKKworICAgIC8qIE1heGltdW0gd2lkdGggb2YgYSBkaWFsb2csIGlmIHBvc3NpYmxlICovCisgICAgR2V0V2luZG93UmVjdChzX2h3bmQsICZyZWN0KTsKKyAgICBtYXhEaWFsb2dXaWR0aCA9IHJlY3QucmlnaHQgLSByZWN0LmxlZnQKKwkJICAgICAtIEdldFN5c3RlbU1ldHJpY3MoU01fQ1hGUkFNRSkgKiAyOworICAgIGlmIChtYXhEaWFsb2dXaWR0aCA8IERMR19NSU5fTUFYX1dJRFRIKQorCW1heERpYWxvZ1dpZHRoID0gRExHX01JTl9NQVhfV0lEVEg7CisKKyAgICAvKiBTZXQgZGxnd2lkdGggdG8gd2lkdGggb2YgbWVzc2FnZSAqLworICAgIHBzdGFydCA9IG1lc3NhZ2U7CisgICAgbWVzc2FnZVdpZHRoID0gMDsKKyAgICBtc2doZWlnaHQgPSAwOworICAgIGRvCisgICAgeworCXBlbmQgPSB2aW1fc3RyY2hyKHBzdGFydCwgRExHX0JVVFRPTl9TRVApOworCWlmIChwZW5kID09IE5VTEwpCisJICAgIHBlbmQgPSBwc3RhcnQgKyBTVFJMRU4ocHN0YXJ0KTsJLyogTGFzdCBsaW5lIG9mIG1lc3NhZ2UuICovCisJbXNnaGVpZ2h0ICs9IGZvbnRIZWlnaHQ7CisJdGV4dFdpZHRoID0gR2V0VGV4dFdpZHRoKGhkYywgcHN0YXJ0LCBwZW5kIC0gcHN0YXJ0KTsKKwlpZiAodGV4dFdpZHRoID4gbWVzc2FnZVdpZHRoKQorCSAgICBtZXNzYWdlV2lkdGggPSB0ZXh0V2lkdGg7CisJcHN0YXJ0ID0gcGVuZCArIDE7CisgICAgfSB3aGlsZSAoKnBlbmQgIT0gTlVMKTsKKyAgICBkbGd3aWR0aCA9IG1lc3NhZ2VXaWR0aDsKKworICAgIC8qIEFkZCB3aWR0aCBvZiBpY29uIHRvIGRsZ3dpZHRoLCBhbmQgc29tZSBzcGFjZSAqLworICAgIGRsZ3dpZHRoICs9IERMR19JQ09OX1dJRFRIICsgMyAqIGRsZ1BhZGRpbmdYOworCisgICAgaWYgKG1zZ2hlaWdodCA8IERMR19JQ09OX0hFSUdIVCkKKwltc2doZWlnaHQgPSBETEdfSUNPTl9IRUlHSFQ7CisKKyAgICAvKgorICAgICAqIENoZWNrIGJ1dHRvbiBuYW1lcy4gIEEgbG9uZyBvbmUgd2lsbCBtYWtlIHRoZSBkaWFsb2cgd2lkZXIuCisgICAgICovCisJIHZlcnRpY2FsID0gKHZpbV9zdHJjaHIocF9nbywgR09fVkVSVElDQUwpICE9IE5VTEwpOworICAgIGlmICghdmVydGljYWwpCisgICAgeworCS8vIFBsYWNlIGJ1dHRvbnMgaG9yaXpvbnRhbGx5IGlmIHRoZXkgZml0LgorCWhvcml6V2lkdGggPSBkbGdQYWRkaW5nWDsKKwlwc3RhcnQgPSB0YnVmZmVyOworCWkgPSAwOworCWRvCisJeworCSAgICBwZW5kID0gdmltX3N0cmNocihwc3RhcnQsIERMR19CVVRUT05fU0VQKTsKKwkgICAgaWYgKHBlbmQgPT0gTlVMTCkKKwkJcGVuZCA9IHBzdGFydCArIFNUUkxFTihwc3RhcnQpOwkvLyBMYXN0IGJ1dHRvbiBuYW1lLgorCSAgICB0ZXh0V2lkdGggPSBHZXRUZXh0V2lkdGgoaGRjLCBwc3RhcnQsIHBlbmQgLSBwc3RhcnQpOworCSAgICBpZiAodGV4dFdpZHRoIDwgbWluQnV0dG9uV2lkdGgpCisJCXRleHRXaWR0aCA9IG1pbkJ1dHRvbldpZHRoOworCSAgICB0ZXh0V2lkdGggKz0gZGxnUGFkZGluZ1g7CSAgICAvKiBQYWRkaW5nIHdpdGhpbiBidXR0b24gKi8KKwkgICAgYnV0dG9uV2lkdGhzW2ldID0gdGV4dFdpZHRoOworCSAgICBidXR0b25Qb3NpdGlvbnNbaSsrXSA9IGhvcml6V2lkdGg7CisJICAgIGhvcml6V2lkdGggKz0gdGV4dFdpZHRoICsgZGxnUGFkZGluZ1g7IC8qIFBhZCBiZXR3ZWVuIGJ1dHRvbnMgKi8KKwkgICAgcHN0YXJ0ID0gcGVuZCArIDE7CisJfSB3aGlsZSAoKnBlbmQgIT0gTlVMKTsKKworCWlmIChob3JpeldpZHRoID4gbWF4RGlhbG9nV2lkdGgpCisJICAgIHZlcnRpY2FsID0gVFJVRTsJLy8gVG9vIHdpZGUgdG8gZml0IG9uIHRoZSBzY3JlZW4uCisJZWxzZSBpZiAoaG9yaXpXaWR0aCA+IGRsZ3dpZHRoKQorCSAgICBkbGd3aWR0aCA9IGhvcml6V2lkdGg7CisgICAgfQorCisgICAgaWYgKHZlcnRpY2FsKQorICAgIHsKKwkvLyBTdGFjayBidXR0b25zIHZlcnRpY2FsbHkuCisJcHN0YXJ0ID0gdGJ1ZmZlcjsKKwlkbworCXsKKwkgICAgcGVuZCA9IHZpbV9zdHJjaHIocHN0YXJ0LCBETEdfQlVUVE9OX1NFUCk7CisJICAgIGlmIChwZW5kID09IE5VTEwpCisJCXBlbmQgPSBwc3RhcnQgKyBTVFJMRU4ocHN0YXJ0KTsJLy8gTGFzdCBidXR0b24gbmFtZS4KKwkgICAgdGV4dFdpZHRoID0gR2V0VGV4dFdpZHRoKGhkYywgcHN0YXJ0LCBwZW5kIC0gcHN0YXJ0KTsKKwkgICAgdGV4dFdpZHRoICs9IGRsZ1BhZGRpbmdYOwkJLyogUGFkZGluZyB3aXRoaW4gYnV0dG9uICovCisJICAgIHRleHRXaWR0aCArPSBETEdfVkVSVF9QQURESU5HX1ggKiAyOyAvKiBQYWRkaW5nIGFyb3VuZCBidXR0b24gKi8KKwkgICAgaWYgKHRleHRXaWR0aCA+IGRsZ3dpZHRoKQorCQlkbGd3aWR0aCA9IHRleHRXaWR0aDsKKwkgICAgcHN0YXJ0ID0gcGVuZCArIDE7CisJfSB3aGlsZSAoKnBlbmQgIT0gTlVMKTsKKyAgICB9CisKKyAgICBpZiAoZGxnd2lkdGggPCBETEdfTUlOX1dJRFRIKQorCWRsZ3dpZHRoID0gRExHX01JTl9XSURUSDsJLyogRG9uJ3QgYWxsb3cgYSByZWFsbHkgdGhpbiBkaWFsb2chKi8KKworICAgIC8qIHN0YXJ0IHRvIGZpbGwgaW4gdGhlIGRsZ3RlbXBsYXRlIGluZm9ybWF0aW9uLiAgYWRkcmVzc2luZyBieSBXT1JEcyAqLworICAgIGxTdHlsZSA9IERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfVklTSUJMRSA7CisKKyAgICBhZGRfbG9uZyhsU3R5bGUpOworICAgIHBudW1pdGVtcyA9IHA7CS8qc2F2ZSB3aGVyZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIG11c3QgYmUgc3RvcmVkKi8KKyAgICBhZGRfYnl0ZSgwKTsJLy8gTnVtYmVyT2ZJdGVtcyh3aWxsIGNoYW5nZSBsYXRlcikKKyAgICBhZGRfd29yZCgxMCk7CS8vIHgKKyAgICBhZGRfd29yZCgxMCk7CS8vIHkKKyAgICBhZGRfd29yZChQaXhlbFRvRGlhbG9nWChkbGd3aWR0aCkpOworCisgICAgLy8gRGlhbG9nIGhlaWdodC4KKyAgICBpZiAodmVydGljYWwpCisJZGxnaGVpZ2h0ID0gbXNnaGVpZ2h0ICsgMiAqIGRsZ1BhZGRpbmdZICsKKwkJCSAgICAgIERMR19WRVJUX1BBRERJTkdfWSArIDIgKiBmb250SGVpZ2h0ICogbnVtQnV0dG9uczsKKyAgICBlbHNlCisJZGxnaGVpZ2h0ID0gbXNnaGVpZ2h0ICsgMyAqIGRsZ1BhZGRpbmdZICsgMiAqIGZvbnRIZWlnaHQ7CisKKyAgICAvLyBEaWFsb2cgbmVlZHMgdG8gYmUgdGFsbGVyIGlmIGNvbnRhaW5zIGFuIGVkaXQgYm94LgorICAgIGVkaXRib3hoZWlnaHQgPSBmb250SGVpZ2h0ICsgZGxnUGFkZGluZ1kgKyA0ICogRExHX1ZFUlRfUEFERElOR19ZOworICAgIGlmICh0ZXh0ZmllbGQgIT0gTlVMTCkKKwlkbGdoZWlnaHQgKz0gZWRpdGJveGhlaWdodDsKKworICAgIGFkZF93b3JkKFBpeGVsVG9EaWFsb2dZKGRsZ2hlaWdodCkpOworCisgICAgYWRkX2J5dGUoMCk7CS8vbWVudQorICAgIGFkZF9ieXRlKDApOwkvL2NsYXNzCisKKyAgICAvKiBjb3B5IHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nICovCisgICAgYWRkX3N0cmluZyh0aXRsZSA/IHRpdGxlIDogKCJWaW0iVklNX1ZFUlNJT05fTUVESVVNKSk7CisKKyAgICBidXR0b25ZcG9zID0gbXNnaGVpZ2h0ICsgMiAqIGRsZ1BhZGRpbmdZOworCisgICAgaWYgKHRleHRmaWVsZCAhPSBOVUxMKQorCWJ1dHRvbllwb3MgKz0gZWRpdGJveGhlaWdodDsKKworICAgIHBzdGFydCA9IHRidWZmZXI7IC8vZGZsdF90ZXh0CisgICAgaG9yaXpXaWR0aCA9IChkbGd3aWR0aCAtIGhvcml6V2lkdGgpIC8gMjsJLyogTm93IGl0J3MgWCBvZmZzZXQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQnV0dG9uczsgaSsrKQorICAgIHsKKwkvKiBnZXQgZW5kIG9mIHRoaXMgYnV0dG9uLiAqLworCWZvciAoCXBlbmQgPSBwc3RhcnQ7CisJCSpwZW5kICYmICgqcGVuZCAhPSBETEdfQlVUVE9OX1NFUCk7CisJCXBlbmQrKykKKwkgICAgOworCisJaWYgKCpwZW5kKQorCSAgICAqcGVuZCA9ICdcMCc7CisKKwkvKgorCSAqIE5PVEU6CisJICogc2V0dGluZyB0aGUgQlNfREVGUFVTSEJVVFRPTiBzdHlsZSBkb2Vzbid0IHdvcmsgYmVjYXVzZSBXaW5kb3dzIHNldHMKKwkgKiB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IHRhYi1hYmxlIGJ1dHRvbiBhbmQgaW4gc28gZG9pbmcgbWFrZXMgdGhhdAorCSAqIHRoZSBkZWZhdWx0ISEgR3Jyci4gIFdvcmthcm91bmQ6IE1ha2UgdGhlIGRlZmF1bHQgYnV0dG9uIHRoZSBvbmx5CisJICogb25lIHdpdGggV1NfVEFCU1RPUCBzdHlsZS4gTWVhbnMgdXNlciBjYW4ndCB0YWIgYmV0d2VlbiBidXR0b25zLCBidXQKKwkgKiBoZS9zaGUgY2FuIHVzZSBhcnJvdyBrZXlzLgorCSAqCisJICogTk9URSAoVGhvcmUpOiBTZXR0aW5nIEJTX0RFRlBVU0hCVVRUT04gd29ya3MgZmluZSB3aGVuIGl0J3MgdGhlCisJICogZmlyc3Qgb25lLCBzbyBJIGNoYW5nZWQgdGhlIGNvcnJlY3QgYnV0dG9uIHRvIGJlIHRoaXMgc3R5bGUuIFRoaXMKKwkgKiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3aGVuIGFuIGVkaXQgYm94IGlzIGFkZGVkLCB3ZSBuZWVkIGEgYnV0dG9uIHRvCisJICogYmUgZGVmYXVsdC4gIFRoZSBlZGl0IGJveCB3aWxsIGJlIHRoZSBkZWZhdWx0IGNvbnRyb2wsIGFuZCB3aGVuIHRoZQorCSAqIHVzZXIgcHJlc3NlcyBlbnRlciBmcm9tIHRoZSBlZGl0IGJveCB3ZSB3YW50IHRoZSBkZWZhdWx0IGJ1dHRvbiB0bworCSAqIGJlIHByZXNzZWQuCisJICovCisJaWYgKHZlcnRpY2FsKQorCXsKKwkgICAgcCA9IGFkZF9kaWFsb2dfZWxlbWVudChwLAorCQkgICAgKChpID09IGRmbHRidXR0b24gfHwgZGZsdGJ1dHRvbiA8IDApICYmIHRleHRmaWVsZCAhPSBOVUxMCisJCQkgICAgPyAgQlNfREVGUFVTSEJVVFRPTiA6IEJTX1BVU0hCVVRUT04pIHwgV1NfVEFCU1RPUCwKKwkJICAgIFBpeGVsVG9EaWFsb2dYKERMR19WRVJUX1BBRERJTkdfWCksCisJCSAgICBQaXhlbFRvRGlhbG9nWShidXR0b25ZcG9zIC8qIFRCSyAqLworCQkJCSAgICsgMiAqIGZvbnRIZWlnaHQgKiBpKSwKKwkJICAgIFBpeGVsVG9EaWFsb2dYKGRsZ3dpZHRoIC0gMiAqIERMR19WRVJUX1BBRERJTkdfWCksCisJCSAgICAoV09SRCkoUGl4ZWxUb0RpYWxvZ1koMiAqIGZvbnRIZWlnaHQpIC0gMSksCisJCSAgICAoV09SRCkoSURDQU5DRUwgKyAxICsgaSksIChCWVRFKTB4ODAsIHBzdGFydCk7CisJfQorCWVsc2UKKwl7CisJICAgIHAgPSBhZGRfZGlhbG9nX2VsZW1lbnQocCwKKwkJICAgICgoaSA9PSBkZmx0YnV0dG9uIHx8IGRmbHRidXR0b24gPCAwKSAmJiB0ZXh0ZmllbGQgIT0gTlVMTAorCQkJICAgICA/IEJTX0RFRlBVU0hCVVRUT04gOiBCU19QVVNIQlVUVE9OKSB8IFdTX1RBQlNUT1AsCisJCSAgICBQaXhlbFRvRGlhbG9nWChob3JpeldpZHRoICsgYnV0dG9uUG9zaXRpb25zW2ldKSwKKwkJICAgIFBpeGVsVG9EaWFsb2dZKGJ1dHRvbllwb3MpLCAvKiBUQksgKi8KKwkJICAgIFBpeGVsVG9EaWFsb2dYKGJ1dHRvbldpZHRoc1tpXSksCisJCSAgICAoV09SRCkoUGl4ZWxUb0RpYWxvZ1koMiAqIGZvbnRIZWlnaHQpIC0gMSksCisJCSAgICAoV09SRCkoSURDQU5DRUwgKyAxICsgaSksIChCWVRFKTB4ODAsIHBzdGFydCk7CisJfQorCisJcHN0YXJ0ID0gcGVuZCArIDE7CS8qbmV4dCBidXR0b24qLworCisgICAgfQorICAgICpwbnVtaXRlbXMgKz0gbnVtQnV0dG9uczsKKworICAgIC8qIFZpbSBpY29uICovCisgICAgcCA9IGFkZF9kaWFsb2dfZWxlbWVudChwLCBTU19JQ09OLAorCSAgICBQaXhlbFRvRGlhbG9nWChkbGdQYWRkaW5nWCksCisJICAgIFBpeGVsVG9EaWFsb2dZKGRsZ1BhZGRpbmdZKSwKKwkgICAgUGl4ZWxUb0RpYWxvZ1goRExHX0lDT05fV0lEVEgpLAorCSAgICBQaXhlbFRvRGlhbG9nWShETEdfSUNPTl9IRUlHSFQpLAorCSAgICBETEdfTk9OQlVUVE9OX0NPTlRST0wgKyAwLCAoQllURSkweDgyLAorCSAgICAmZGxnX2ljb25zW3R5cGVdKTsKKworCisgICAgLyogRGlhbG9nIG1lc3NhZ2UgKi8KKyAgICBwID0gYWRkX2RpYWxvZ19lbGVtZW50KHAsIFNTX0xFRlQsCisJICAgIFBpeGVsVG9EaWFsb2dYKDIgKiBkbGdQYWRkaW5nWCArIERMR19JQ09OX1dJRFRIKSwKKwkgICAgUGl4ZWxUb0RpYWxvZ1koZGxnUGFkZGluZ1kpLAorCSAgICAoV09SRCkoUGl4ZWxUb0RpYWxvZ1gobWVzc2FnZVdpZHRoKSArIDEpLAorCSAgICBQaXhlbFRvRGlhbG9nWShtc2doZWlnaHQpLAorCSAgICBETEdfTk9OQlVUVE9OX0NPTlRST0wgKyAxLCAoQllURSkweDgyLCBtZXNzYWdlKTsKKworICAgIC8qIEVkaXQgYm94ICovCisgICAgaWYgKHRleHRmaWVsZCAhPSBOVUxMKQorICAgIHsKKwlwID0gYWRkX2RpYWxvZ19lbGVtZW50KHAsIEVTX0xFRlQgfCBFU19BVVRPSFNDUk9MTCB8IFdTX1RBQlNUT1AgfCBXU19CT1JERVIsCisJCVBpeGVsVG9EaWFsb2dYKDIgKiBkbGdQYWRkaW5nWCksCisJCVBpeGVsVG9EaWFsb2dZKDIgKiBkbGdQYWRkaW5nWSArIG1zZ2hlaWdodCksCisJCVBpeGVsVG9EaWFsb2dYKGRsZ3dpZHRoIC0gNCAqIGRsZ1BhZGRpbmdYKSwKKwkJUGl4ZWxUb0RpYWxvZ1koZm9udEhlaWdodCArIGRsZ1BhZGRpbmdZKSwKKwkJRExHX05PTkJVVFRPTl9DT05UUk9MICsgMiwgKEJZVEUpMHg4MSwgdGV4dGZpZWxkKTsKKwkqcG51bWl0ZW1zICs9IDE7CisgICAgfQorCisgICAgKnBudW1pdGVtcyArPSAyOworCisgICAgU2VsZWN0Rm9udChoZGMsIG9sZEZvbnQpOworICAgIFJlbGVhc2VEQyhod25kLCBoZGMpOworICAgIGRwID0gTWFrZVByb2NJbnN0YW5jZSgoRkFSUFJPQylkaWFsb2dfY2FsbGJhY2ssIHNfaGluc3QpOworCisKKyAgICAvKiBMZXQgdGhlIGRpYWxvZ19jYWxsYmFjaygpIGZ1bmN0aW9uIGtub3cgd2hpY2ggYnV0dG9uIHRvIG1ha2UgZGVmYXVsdAorICAgICAqIElmIHdlIGhhdmUgYW4gZWRpdCBib3gsIG1ha2UgdGhhdCB0aGUgZGVmYXVsdC4gV2UgYWxzbyBuZWVkIHRvIHRlbGwKKyAgICAgKiBkaWFsb2dfY2FsbGJhY2soKSBpZiB0aGlzIGRpYWxvZyBjb250YWlucyBhbiBlZGl0IGJveCBvciBub3QuIFdlIGRvCisgICAgICogdGhpcyBieSBzZXR0aW5nIHNfdGV4dGZpZWxkIGlmIGl0IGRvZXMuCisgICAgICovCisgICAgaWYgKHRleHRmaWVsZCAhPSBOVUxMKQorICAgIHsKKwlkaWFsb2dfZGVmYXVsdF9idXR0b24gPSBETEdfTk9OQlVUVE9OX0NPTlRST0wgKyAyOworCXNfdGV4dGZpZWxkID0gdGV4dGZpZWxkOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWRpYWxvZ19kZWZhdWx0X2J1dHRvbiA9IElEQ0FOQ0VMICsgMSArIGRmbHRidXR0b247CisJc190ZXh0ZmllbGQgPSBOVUxMOworICAgIH0KKworICAgIC8qc2hvdyB0aGUgZGlhbG9nIGJveCBtb2RhbGx5IGFuZCBnZXQgYSByZXR1cm4gdmFsdWUqLworICAgIG5jaGFyID0gRGlhbG9nQm94SW5kaXJlY3QoCisJICAgIHNfaGluc3QsCisJICAgIChIR0xPQkFMKSBoZ2xiRGxnVGVtcCwKKwkgICAgc19od25kLAorCSAgICAoRExHUFJPQylkcCk7CisKKyAgICBGcmVlUHJvY0luc3RhbmNlKCBkcCApOworICAgIEdsb2JhbFVubG9jayhoZ2xiRGxnVGVtcCk7CisgICAgR2xvYmFsRnJlZShoZ2xiRGxnVGVtcCk7CisgICAgdmltX2ZyZWUodGJ1ZmZlcik7CisgICAgdmltX2ZyZWUoYnV0dG9uV2lkdGhzKTsKKyAgICB2aW1fZnJlZShidXR0b25Qb3NpdGlvbnMpOworCisKKyAgICByZXR1cm4gbmNoYXI7Cit9CisKKy8qCisgKiBQdXQgYSBzaW1wbGUgZWxlbWVudCAoYmFzaWMgY2xhc3MpIG9udG8gYSBkaWFsb2cgdGVtcGxhdGUgaW4gbWVtb3J5LgorICogcmV0dXJuIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgbmV4dCBpdGVtIHNob3VsZCBiZSBhZGRlZC4KKyAqCisgKiBwYXJhbWV0ZXJzOgorICogIGxTdHlsZSA9IGFkZGl0aW9uYWwgc3R5bGUgZmxhZ3MKKyAqICB4LHkgPSB4ICYgeSBwb3NpdGlvbnMgSU4gRElBTE9HIFVOSVRTCisgKiAgdyxoID0gd2lkdGggYW5kIGhlaWdodCBJTiBESUFMT0cgVU5JVFMKKyAqICBJZAk9IElEIHVzZWQgaW4gbWVzc2FnZXMKKyAqICBjbHNzICA9IGNsYXNzIElELCBlLmcgMHg4MCBmb3IgYSBidXR0b24sIDB4ODIgZm9yIGEgc3RhdGljCisgKiAgY2FwdGlvbiA9IHVzdWFsbHkgdGV4dCBvciByZXNvdXJjZSBuYW1lCisgKgorICogIFRPRE86IHVzZSB0aGUgbGVuZ3RoIGluZm9ybWF0aW9uIG5vdGVkIGhlcmUgdG8gZW5hYmxlIHRoZSBkaWFsb2cgY3JlYXRpb24KKyAqICByb3V0aW5lcyB0byB3b3JrIG91dCBtb3JlIGV4YWN0bHkgaG93IG11Y2ggbWVtb3J5IHRoZXkgbmVlZCB0byBhbGxvYy4KKyAqLworICAgIHN0YXRpYyBMUFdPUkQKK2FkZF9kaWFsb2dfZWxlbWVudCgKKyAgICBMUFdPUkQgcCwKKyAgICBEV09SRCBsU3R5bGUsCisgICAgV09SRCB4LAorICAgIFdPUkQgeSwKKyAgICBXT1JEIHcsCisgICAgV09SRCBoLAorICAgIFdPUkQgSWQsCisgICAgQllURSBjbHNzLAorICAgIGNvbnN0IGNoYXIgKmNhcHRpb24pCit7CisKKyAgICBsU3R5bGUgPSBsU3R5bGUgfCBXU19WSVNJQkxFIHwgV1NfQ0hJTEQ7CisKKyAgICBhZGRfd29yZCh4KTsKKyAgICBhZGRfd29yZCh5KTsKKyAgICBhZGRfd29yZCh3KTsKKyAgICBhZGRfd29yZChoKTsKKyAgICBhZGRfd29yZChJZCk7CisgICAgYWRkX2xvbmcobFN0eWxlKTsKKyAgICBhZGRfYnl0ZShjbHNzKTsKKyAgICBpZiAoKChsU3R5bGUgJiBTU19JQ09OKSAhPSAwKSAmJiAoY2xzcyA9PSAweDgyKSkKKyAgICB7CisJLyogVXNlIHJlc291cmNlIElEICovCisJYWRkX2J5dGUoMHhmZik7CisJYWRkX2J5dGUoKmNhcHRpb24pOworICAgIH0KKyAgICBlbHNlCisJYWRkX3N0cmluZyhjYXB0aW9uKTsKKworICAgIGFkZF9ieXRlKDApOyAgICAvLyMgb2YgZXh0cmEgYnl0ZXMgZm9sbG93aW5nCisKKworICAgIHJldHVybiBwOworfQorCisjdW5kZWYgYWRkX2J5dGUKKyN1bmRlZiBhZGRfc3RyaW5nCisjdW5kZWYgYWRkX2xvbmcKKyN1bmRlZiBhZGRfd29yZAorCisjZW5kaWYgLyogRkVBVF9HVUlfRElBTE9HICovCisKKyAgICBzdGF0aWMgdm9pZAorZ2V0X2RpYWxvZ19mb250X21ldHJpY3Modm9pZCkKK3sKKyAgICBEV09SRAkgICAgZGxnRm9udFNpemU7CisJZGxnRm9udFNpemUgPSBHZXREaWFsb2dCYXNlVW5pdHMoKTsJLyogZmFsbCBiYWNrIHRvIGJpZyBvbGQgc3lzdGVtKi8KKwlzX2RsZ2ZudHdpZHRoID0gTE9XT1JEKGRsZ0ZvbnRTaXplKTsKKwlzX2RsZ2ZudGhlaWdodCA9IEhJV09SRChkbGdGb250U2l6ZSk7Cit9CisKKworI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSB8fCBkZWZpbmVkKFBST1RPKQorI2luY2x1ZGUgImd1aV93M34xLmgiCisvKgorICogQ3JlYXRlIHRoZSB0b29sYmFyLCBpbml0aWFsbHkgdW5wb3B1bGF0ZWQuCisgKiAgKGp1c3QgbGlrZSB0aGUgbWVudSwgdGhlcmUgYXJlIG5vIGRlZmF1bHRzLCBpdCdzIGFsbAorICogIHNldCB1cCB0aHJvdWdoIG1lbnUudmltKQorICovCisgICAgc3RhdGljIHZvaWQKK2luaXRpYWxpc2VfdG9vbGJhcih2b2lkKQoreworICAgIHNfdG9vbGJhcmh3bmQgPSBDcmVhdGVUb29sYmFyKAorCQkgICAgc19od25kLAorCQkgICAgV1NfQ0hJTEQgfCBXU19WSVNJQkxFLAorCQkgICAgQ01EX1RCX0JBU0UsIC8qPHZuPiovCisJCSAgICAzMSwJCQkvL251bWJlciBvZiBpbWFnZXMgaW4gaW5pdGFsIGJpdG1hcAorCQkgICAgc19oaW5zdCwKKwkJICAgIElEUl9UT09MQkFSMSwJLy8gaWQgb2YgaW5pdGlhbCBiaXRtYXAKKwkJICAgIE5VTEwsCisJCSAgICAwCQkJLy8gaW5pdGlhbCBudW1iZXIgb2YgYnV0dG9ucworCQkgICAgKTsKKworICAgIGd1aV9tY2hfc2hvd190b29sYmFyKHZpbV9zdHJjaHIocF9nbywgR09fVE9PTEJBUikgIT0gTlVMTCk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9PTEUpIHx8IGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIE1ha2UgdGhlIEdVSSB3aW5kb3cgY29tZSB0byB0aGUgZm9yZWdyb3VuZC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2ZvcmVncm91bmQodm9pZCkKK3sKKyAgICBpZiAoSXNJY29uaWMoc19od25kKSkKKwkgU2VuZE1lc3NhZ2Uoc19od25kLCBXTV9TWVNDT01NQU5ELCBTQ19SRVNUT1JFLCAwKTsKKyAgICBTZXRBY3RpdmVXaW5kb3coc19od25kKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2d1aV93MzIuYyBiL3NyYy9ndWlfdzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwNzk1MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfdzMyLmMKQEAgLTAsMCArMSw0MDc3IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCQlieSBCcmFtIE1vb2xlbmFhcgorICoJCQkJR1VJIHN1cHBvcnQgYnkgUm9iZXJ0IFdlYmIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKy8qCisgKiBXaW5kb3dzIEdVSS4KKyAqCisgKiBHVUkgc3VwcG9ydCBmb3IgTWljcm9zb2Z0IFdpbmRvd3MuICBXaW4zMiBpbml0aWFsbHk7IG1heWJlIFdpbjE2IGxhdGVyCisgKgorICogR2VvcmdlIFYuIFJlaWxseSA8Z2VvcmdlQHJlaWxseS5vcmc+IHdyb3RlIHRoZSBvcmlnaW5hbCBXaW4zMiBHVUkuCisgKiBSb2JlcnQgV2ViYiByZXdvcmtlZCBpdCB0byB1c2UgdGhlIGV4aXN0aW5nIEdVSSBzdHVmZiBhbmQgYWRkZWQgbWVudSwKKyAqIHNjcm9sbGJhcnMsIGV0Yy4KKyAqCisgKiBOb3RlOiBDbGlwYm9hcmQgc3R1ZmYsIGZvciBjdXR0aW5nIGFuZCBwYXN0aW5nIHRleHQgdG8gb3RoZXIgd2luZG93cywgaXMgaW4KKyAqIG9zX3dpbjMyLmMuCShJdCBjYW4gYWxzbyBiZSBkb25lIGZyb20gdGhlIHRlcm1pbmFsIHZlcnNpb24pLgorICoKKyAqIFRPRE86IFNvbWUgb2YgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb3VnaHQgdG8gYmUgdXBkYXRlZCBmb3IgV2luNjQ7CisgKiBlLmcuLCByZXBsYWNlIExPTkcgd2l0aCBMT05HX1BUUiwgZXRjLgorICovCisKKy8qCisgKiBUaGVzZSBhcmUgbmV3IGluIFdpbmRvd3MgTUUvWFAsIG9ubHkgZGVmaW5lZCBpbiByZWNlbnQgY29tcGlsZXJzLgorICovCisjaWZuZGVmIEhBTkRMRV9XTV9YQlVUVE9OVVAKKyMgZGVmaW5lIEhBTkRMRV9XTV9YQlVUVE9OVVAoaHduZCwgd1BhcmFtLCBsUGFyYW0sIGZuKSBcCisgICAoKGZuKSgoaHduZCksIChpbnQpKHNob3J0KUxPV09SRChsUGFyYW0pLCAoaW50KShzaG9ydClISVdPUkQobFBhcmFtKSwgKFVJTlQpKHdQYXJhbSkpLCAwTCkKKyNlbmRpZgorI2lmbmRlZiBIQU5ETEVfV01fWEJVVFRPTkRPV04KKyMgZGVmaW5lIEhBTkRMRV9XTV9YQlVUVE9ORE9XTihod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICgoZm4pKChod25kKSwgRkFMU0UsIChpbnQpKHNob3J0KUxPV09SRChsUGFyYW0pLCAoaW50KShzaG9ydClISVdPUkQobFBhcmFtKSwgKFVJTlQpKHdQYXJhbSkpLCAwTCkKKyNlbmRpZgorI2lmbmRlZiBIQU5ETEVfV01fWEJVVFRPTkRCTENMSworIyBkZWZpbmUgSEFORExFX1dNX1hCVVRUT05EQkxDTEsoaHduZCwgd1BhcmFtLCBsUGFyYW0sIGZuKSBcCisgICAoKGZuKSgoaHduZCksIFRSVUUsIChpbnQpKHNob3J0KUxPV09SRChsUGFyYW0pLCAoaW50KShzaG9ydClISVdPUkQobFBhcmFtKSwgKFVJTlQpKHdQYXJhbSkpLCAwTCkKKyNlbmRpZgorCisvKgorICogSW5jbHVkZSB0aGUgY29tbW9uIHN0dWZmIGZvciBNUy1XaW5kb3dzIEdVSS4KKyAqLworI2luY2x1ZGUgImd1aV93NDguYyIKKworI2lmZGVmIEZFQVRfWFBNX1czMgorIyBpbmNsdWRlICJ4cG1fdzMyLmgiCisjZW5kaWYKKworI2lmZGVmIFBST1RPCisjIGRlZmluZSBXSU5BUEkKKyNlbmRpZgorCisjaWZkZWYgX19NSU5HVzMyX18KKy8qCisgKiBBZGQgYSBsb3Qgb2YgbWlzc2luZyBkZWZpbmVzLgorICogVGhleSBhcmUgbm90IGFsd2F5cyBtaXNzaW5nLCB3ZSBuZWVkIHRoZSAjaWZuZGVmJ3MuCisgKi8KKyMgaWZuZGVmIF9jZGVjbAorIyAgZGVmaW5lIF9jZGVjbAorIyBlbmRpZgorIyBpZm5kZWYgSXNNaW5pbWl6ZWQKKyMgIGRlZmluZSAgICAgSXNNaW5pbWl6ZWQoaHduZCkJCUlzSWNvbmljKGh3bmQpCisjIGVuZGlmCisjIGlmbmRlZiBJc01heGltaXplZAorIyAgZGVmaW5lICAgICBJc01heGltaXplZChod25kKQkJSXNab29tZWQoaHduZCkKKyMgZW5kaWYKKyMgaWZuZGVmIFNlbGVjdEZvbnQKKyMgIGRlZmluZSAgICAgU2VsZWN0Rm9udChoZGMsIGhmb250KSAgKChIRk9OVClTZWxlY3RPYmplY3QoKGhkYyksIChIR0RJT0JKKShIRk9OVCkoaGZvbnQpKSkKKyMgZW5kaWYKKyMgaWZuZGVmIEdldFN0b2NrQnJ1c2gKKyMgIGRlZmluZSAgICAgR2V0U3RvY2tCcnVzaChpKSAgICAgKChIQlJVU0gpR2V0U3RvY2tPYmplY3QoaSkpCisjIGVuZGlmCisjIGlmbmRlZiBEZWxldGVCcnVzaAorIyAgZGVmaW5lICAgICBEZWxldGVCcnVzaChoYnIpICAgICBEZWxldGVPYmplY3QoKEhHRElPQkopKEhCUlVTSCkoaGJyKSkKKyMgZW5kaWYKKworIyBpZm5kZWYgSEFORExFX1dNX1JCVVRUT05EQkxDTEsKKyMgIGRlZmluZSBIQU5ETEVfV01fUkJVVFRPTkRCTENMSyhod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIFRSVUUsIChpbnQpKHNob3J0KUxPV09SRChsUGFyYW0pLCAoaW50KShzaG9ydClISVdPUkQobFBhcmFtKSwgKFVJTlQpKHdQYXJhbSkpLCAwTCkKKyMgZW5kaWYKKyMgaWZuZGVmIEhBTkRMRV9XTV9NQlVUVE9OVVAKKyMgIGRlZmluZSBIQU5ETEVfV01fTUJVVFRPTlVQKGh3bmQsIHdQYXJhbSwgbFBhcmFtLCBmbikgXAorICAgICgoZm4pKChod25kKSwgKGludCkoc2hvcnQpTE9XT1JEKGxQYXJhbSksIChpbnQpKHNob3J0KUhJV09SRChsUGFyYW0pLCAoVUlOVCkod1BhcmFtKSksIDBMKQorIyBlbmRpZgorIyBpZm5kZWYgSEFORExFX1dNX01CVVRUT05EQkxDTEsKKyMgIGRlZmluZSBIQU5ETEVfV01fTUJVVFRPTkRCTENMSyhod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIFRSVUUsIChpbnQpKHNob3J0KUxPV09SRChsUGFyYW0pLCAoaW50KShzaG9ydClISVdPUkQobFBhcmFtKSwgKFVJTlQpKHdQYXJhbSkpLCAwTCkKKyMgZW5kaWYKKyMgaWZuZGVmIEhBTkRMRV9XTV9MQlVUVE9OREJMQ0xLCisjICBkZWZpbmUgSEFORExFX1dNX0xCVVRUT05EQkxDTEsoaHduZCwgd1BhcmFtLCBsUGFyYW0sIGZuKSBcCisgICAgKChmbikoKGh3bmQpLCBUUlVFLCAoaW50KShzaG9ydClMT1dPUkQobFBhcmFtKSwgKGludCkoc2hvcnQpSElXT1JEKGxQYXJhbSksIChVSU5UKSh3UGFyYW0pKSwgMEwpCisjIGVuZGlmCisjIGlmbmRlZiBIQU5ETEVfV01fUkJVVFRPTkRPV04KKyMgIGRlZmluZSBIQU5ETEVfV01fUkJVVFRPTkRPV04oaHduZCwgd1BhcmFtLCBsUGFyYW0sIGZuKSBcCisgICAgKChmbikoKGh3bmQpLCBGQUxTRSwgKGludCkoc2hvcnQpTE9XT1JEKGxQYXJhbSksIChpbnQpKHNob3J0KUhJV09SRChsUGFyYW0pLCAoVUlOVCkod1BhcmFtKSksIDBMKQorIyBlbmRpZgorIyBpZm5kZWYgSEFORExFX1dNX01PVVNFTU9WRQorIyAgZGVmaW5lIEhBTkRMRV9XTV9NT1VTRU1PVkUoaHduZCwgd1BhcmFtLCBsUGFyYW0sIGZuKSBcCisgICAgKChmbikoKGh3bmQpLCAoaW50KShzaG9ydClMT1dPUkQobFBhcmFtKSwgKGludCkoc2hvcnQpSElXT1JEKGxQYXJhbSksIChVSU5UKSh3UGFyYW0pKSwgMEwpCisjIGVuZGlmCisjIGlmbmRlZiBIQU5ETEVfV01fUkJVVFRPTlVQCisjICBkZWZpbmUgSEFORExFX1dNX1JCVVRUT05VUChod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIChpbnQpKHNob3J0KUxPV09SRChsUGFyYW0pLCAoaW50KShzaG9ydClISVdPUkQobFBhcmFtKSwgKFVJTlQpKHdQYXJhbSkpLCAwTCkKKyMgZW5kaWYKKyMgaWZuZGVmIEhBTkRMRV9XTV9NQlVUVE9ORE9XTgorIyAgZGVmaW5lIEhBTkRMRV9XTV9NQlVUVE9ORE9XTihod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIEZBTFNFLCAoaW50KShzaG9ydClMT1dPUkQobFBhcmFtKSwgKGludCkoc2hvcnQpSElXT1JEKGxQYXJhbSksIChVSU5UKSh3UGFyYW0pKSwgMEwpCisjIGVuZGlmCisjIGlmbmRlZiBIQU5ETEVfV01fTEJVVFRPTlVQCisjICBkZWZpbmUgSEFORExFX1dNX0xCVVRUT05VUChod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIChpbnQpKHNob3J0KUxPV09SRChsUGFyYW0pLCAoaW50KShzaG9ydClISVdPUkQobFBhcmFtKSwgKFVJTlQpKHdQYXJhbSkpLCAwTCkKKyMgZW5kaWYKKyMgaWZuZGVmIEhBTkRMRV9XTV9MQlVUVE9ORE9XTgorIyAgZGVmaW5lIEhBTkRMRV9XTV9MQlVUVE9ORE9XTihod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIEZBTFNFLCAoaW50KShzaG9ydClMT1dPUkQobFBhcmFtKSwgKGludCkoc2hvcnQpSElXT1JEKGxQYXJhbSksIChVSU5UKSh3UGFyYW0pKSwgMEwpCisjIGVuZGlmCisjIGlmbmRlZiBIQU5ETEVfV01fU1lTQ0hBUgorIyAgZGVmaW5lIEhBTkRMRV9XTV9TWVNDSEFSKGh3bmQsIHdQYXJhbSwgbFBhcmFtLCBmbikgXAorICAgICgoZm4pKChod25kKSwgKFRDSEFSKSh3UGFyYW0pLCAoaW50KShzaG9ydClMT1dPUkQobFBhcmFtKSksIDBMKQorIyBlbmRpZgorIyBpZm5kZWYgSEFORExFX1dNX0FDVElWQVRFQVBQCisjICBkZWZpbmUgSEFORExFX1dNX0FDVElWQVRFQVBQKGh3bmQsIHdQYXJhbSwgbFBhcmFtLCBmbikgXAorICAgICgoZm4pKChod25kKSwgKEJPT0wpKHdQYXJhbSksIChEV09SRCkobFBhcmFtKSksIDBMKQorIyBlbmRpZgorIyBpZm5kZWYgSEFORExFX1dNX1dJTkRPV1BPU0NIQU5HSU5HCisjICBkZWZpbmUgSEFORExFX1dNX1dJTkRPV1BPU0NIQU5HSU5HKGh3bmQsIHdQYXJhbSwgbFBhcmFtLCBmbikgXAorICAgIChMUkVTVUxUKShEV09SRCkoQk9PTCkoZm4pKChod25kKSwgKExQV0lORE9XUE9TKShsUGFyYW0pKQorIyBlbmRpZgorIyBpZm5kZWYgSEFORExFX1dNX1ZTQ1JPTEwKKyMgIGRlZmluZSBIQU5ETEVfV01fVlNDUk9MTChod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIChIV05EKShsUGFyYW0pLCAoVUlOVCkoTE9XT1JEKHdQYXJhbSkpLCAgKGludCkoc2hvcnQpSElXT1JEKHdQYXJhbSkpLCAwTCkKKyMgZW5kaWYKKyMgaWZuZGVmIEhBTkRMRV9XTV9TRVRGT0NVUworIyAgZGVmaW5lIEhBTkRMRV9XTV9TRVRGT0NVUyhod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIChIV05EKSh3UGFyYW0pKSwgMEwpCisjIGVuZGlmCisjIGlmbmRlZiBIQU5ETEVfV01fS0lMTEZPQ1VTCisjICBkZWZpbmUgSEFORExFX1dNX0tJTExGT0NVUyhod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIChIV05EKSh3UGFyYW0pKSwgMEwpCisjIGVuZGlmCisjIGlmbmRlZiBIQU5ETEVfV01fSFNDUk9MTAorIyAgZGVmaW5lIEhBTkRMRV9XTV9IU0NST0xMKGh3bmQsIHdQYXJhbSwgbFBhcmFtLCBmbikgXAorICAgICgoZm4pKChod25kKSwgKEhXTkQpKGxQYXJhbSksIChVSU5UKShMT1dPUkQod1BhcmFtKSksIChpbnQpKHNob3J0KUhJV09SRCh3UGFyYW0pKSwgMEwpCisjIGVuZGlmCisjIGlmbmRlZiBIQU5ETEVfV01fRFJPUEZJTEVTCisjICBkZWZpbmUgSEFORExFX1dNX0RST1BGSUxFUyhod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIChIRFJPUCkod1BhcmFtKSksIDBMKQorIyBlbmRpZgorIyBpZm5kZWYgSEFORExFX1dNX0NIQVIKKyMgIGRlZmluZSBIQU5ETEVfV01fQ0hBUihod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIChUQ0hBUikod1BhcmFtKSwgKGludCkoc2hvcnQpTE9XT1JEKGxQYXJhbSkpLCAwTCkKKyMgZW5kaWYKKyMgaWZuZGVmIEhBTkRMRV9XTV9TWVNERUFEQ0hBUgorIyAgZGVmaW5lIEhBTkRMRV9XTV9TWVNERUFEQ0hBUihod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIChUQ0hBUikod1BhcmFtKSwgKGludCkoc2hvcnQpTE9XT1JEKGxQYXJhbSkpLCAwTCkKKyMgZW5kaWYKKyMgaWZuZGVmIEhBTkRMRV9XTV9ERUFEQ0hBUgorIyAgZGVmaW5lIEhBTkRMRV9XTV9ERUFEQ0hBUihod25kLCB3UGFyYW0sIGxQYXJhbSwgZm4pIFwKKyAgICAoKGZuKSgoaHduZCksIChUQ0hBUikod1BhcmFtKSwgKGludCkoc2hvcnQpTE9XT1JEKGxQYXJhbSkpLCAwTCkKKyMgZW5kaWYKKyNlbmRpZiAvKiBfX01JTkdXMzJfXyAqLworCisKKy8qIFNvbWUgcGFyYW1ldGVycyBmb3IgdGVhcm9mZiBtZW51cy4gIEFsbCBpbiBwaXhlbHMuICovCisjZGVmaW5lIFRFQVJPRkZfUEFERElOR19YCTIKKyNkZWZpbmUgVEVBUk9GRl9CVVRUT05fUEFEX1gJOAorI2RlZmluZSBURUFST0ZGX01JTl9XSURUSAkyMDAKKyNkZWZpbmUgVEVBUk9GRl9TVUJNRU5VX0xBQkVMCSI+PiIKKyNkZWZpbmUgVEVBUk9GRl9DT0xVTU5fUEFERElORwkzCS8vICMgc3BhY2VzIHRvIHBhZCBjb2x1bW4gd2l0aC4KKworCisvKiBGb3IgdGhlIEludGVsbGltb3VzZTogKi8KKyNpZm5kZWYgV01fTU9VU0VXSEVFTAorI2RlZmluZSBXTV9NT1VTRVdIRUVMCTB4MjBhCisjZW5kaWYKKworCisjaWZkZWYgRkVBVF9CRVZBTAorIyBkZWZpbmUgSURfQkVWQUxfVE9PTFRJUCAgIDIwMAorIyBkZWZpbmUgQkVWQUxfVEVYVF9MRU4JICAgIE1BWFBBVEhMCisKK3N0YXRpYyB2b2lkIG1ha2VfdG9vbHRpcCBfX0FSR1MoKEJhbGxvb25FdmFsICpiZXZhbCwgY2hhciAqdGV4dCwgUE9JTlQgcHQpKTsKK3N0YXRpYyB2b2lkIGRlbGV0ZV90b29sdGlwIF9fQVJHUygoQmFsbG9vbkV2YWwgKmJldmFsKSk7CitzdGF0aWMgVk9JRCBDQUxMQkFDSyBCZXZhbFRpbWVyUHJvYyBfX0FSR1MoKEhXTkQgaHduZCwgVUlOVCB1TXNnLCBVSU5UIGlkRXZlbnQsIERXT1JEIGR3VGltZSkpOworCitzdGF0aWMgQmFsbG9vbkV2YWwgICpjdXJfYmV2YWwgPSBOVUxMOworc3RhdGljIFVJTlQJICAgIEJldmFsVGltZXJJZCA9IDA7CitzdGF0aWMgRFdPUkQJICAgIExhc3RBY3Rpdml0eSA9IDA7CisjZW5kaWYKKworLyogTG9jYWwgdmFyaWFibGVzOiAqLworCisjaWZkZWYgRkVBVF9NRU5VCitzdGF0aWMgVUlOVAlzX21lbnVfaWQgPSAxMDA7CisKKy8qCisgKiBVc2UgdGhlIHN5c3RlbSBmb250IGZvciBkaWFsb2dzIGFuZCB0ZWFyLW9mZiBtZW51cy4gIFJlbW92ZSB0aGlzIGxpbmUgdG8KKyAqIHVzZSBETEdfRk9OVF9OQU1FLgorICovCisjIGRlZmluZSBVU0VfU1lTTUVOVV9GT05UCisjZW5kaWYKKworI2RlZmluZSBWSU1fTkFNRQkidmltIgorI2RlZmluZSBWSU1fQ0xBU1MJIlZpbSIKKyNkZWZpbmUgVklNX0NMQVNTVwlMIlZpbSIKKworLyogSW5pdGlhbCBzaXplIGZvciB0aGUgZGlhbG9nIHRlbXBsYXRlLiAgRm9yIGd1aV9tY2hfZGlhbG9nKCkgaXQncyBmaXhlZCwKKyAqIHRodXMgdGhlcmUgc2hvdWxkIGJlIHJvb20gZm9yIGV2ZXJ5IGRpYWxvZy4gIEZvciB0ZWFyb2ZmcyBpdCdzIG1hZGUgYmlnZ2VyCisgKiB3aGVuIG5lZWRlZC4gKi8KKyNkZWZpbmUgRExHX0FMTE9DX1NJWkUgMTYgKiAxMDI0CisKKy8qCisgKiBzdHVmZiBmb3IgZGlhbG9ncywgbWVudXMsIHRlYXJvZmZzIGV0Yy4KKyAqLworc3RhdGljIExSRVNVTFQgQVBJRU5UUlkgZGlhbG9nX2NhbGxiYWNrKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK3N0YXRpYyBMUkVTVUxUIEFQSUVOVFJZIHRlYXJvZmZfY2FsbGJhY2soSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworc3RhdGljIFBXT1JECithZGRfZGlhbG9nX2VsZW1lbnQoCisJUFdPUkQgcCwKKwlEV09SRCBsU3R5bGUsCisJV09SRCB4LAorCVdPUkQgeSwKKwlXT1JEIHcsCisJV09SRCBoLAorCVdPUkQgSWQsCisJV09SRCBjbHNzLAorCWNvbnN0IGNoYXIgKmNhcHRpb24pOworc3RhdGljIExQV09SRCBscHdBbGlnbihMUFdPUkQpOworc3RhdGljIGludCBuQ29weUFuc2lUb1dpZGVDaGFyKExQV09SRCwgTFBTVFIpOworc3RhdGljIHZvaWQgZ3VpX21jaF90ZWFyb2ZmKGNoYXJfdSAqdGl0bGUsIHZpbW1lbnVfVCAqbWVudSwgaW50IGluaXRYLCBpbnQgaW5pdFkpOworc3RhdGljIHZvaWQgZ2V0X2RpYWxvZ19mb250X21ldHJpY3Modm9pZCk7CisKK3N0YXRpYyBpbnQgZGlhbG9nX2RlZmF1bHRfYnV0dG9uID0gLTE7CisKKy8qIEludGVsbGltb3VzZSBzdXBwb3J0ICovCitzdGF0aWMgaW50IG1vdXNlX3Njcm9sbF9saW5lcyA9IDA7CitzdGF0aWMgVUlOVCBtc2hfbXNnbW91c2V3aGVlbCA9IDA7CisKK3N0YXRpYyBpbnQJc191c2VuZXdsb29rOwkgICAgLyogZW11bGF0ZSBXOTUvTlQ0IG5vbi1ib2xkIGRpYWxvZ3MgKi8KKyNpZmRlZiBGRUFUX1RPT0xCQVIKK3N0YXRpYyB2b2lkIGluaXRpYWxpc2VfdG9vbGJhcih2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X3Rvb2xiYXJfYml0bWFwKHZpbW1lbnVfVCAqbWVudSk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUJZVEVfSU1FCitzdGF0aWMgTFJFU1VMVCBfT25JbWVDb21wb3NpdGlvbihIV05EIGh3bmQsIFdQQVJBTSBkYmNzLCBMUEFSQU0gcGFyYW0pOworc3RhdGljIGNoYXJfdSAqR2V0UmVzdWx0U3RyKEhXTkQgaHduZCwgaW50IEdDUywgaW50ICpsZW5wKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9NQllURV9JTUUpICYmIGRlZmluZWQoRFlOQU1JQ19JTUUpCisjIGlmZGVmIE5PSU1FCit0eXBlZGVmIHN0cnVjdCB0YWdDT01QT1NJVElPTkZPUk0geworICAgIERXT1JEIGR3U3R5bGU7CisgICAgUE9JTlQgcHRDdXJyZW50UG9zOworICAgIFJFQ1QgIHJjQXJlYTsKK30gQ09NUE9TSVRJT05GT1JNLCAqUENPTVBPU0lUSU9ORk9STSwgTkVBUiAqTlBDT01QT1NJVElPTkZPUk0sIEZBUiAqTFBDT01QT1NJVElPTkZPUk07Cit0eXBlZGVmIEhBTkRMRSBISU1DOworIyBlbmRpZgorCitISU5TVEFOQ0UgaExpYkltbSA9IE5VTEw7CitMT05HIChXSU5BUEkgKnBJbW1HZXRDb21wb3NpdGlvblN0cmluZ0EpKEhJTUMsIERXT1JELCBMUFZPSUQsIERXT1JEKTsKK0xPTkcgKFdJTkFQSSAqcEltbUdldENvbXBvc2l0aW9uU3RyaW5nVykoSElNQywgRFdPUkQsIExQVk9JRCwgRFdPUkQpOworSElNQyAoV0lOQVBJICpwSW1tR2V0Q29udGV4dCkoSFdORCk7CitISU1DIChXSU5BUEkgKnBJbW1Bc3NvY2lhdGVDb250ZXh0KShIV05ELCBISU1DKTsKK0JPT0wgKFdJTkFQSSAqcEltbVJlbGVhc2VDb250ZXh0KShIV05ELCBISU1DKTsKK0JPT0wgKFdJTkFQSSAqcEltbUdldE9wZW5TdGF0dXMpKEhJTUMpOworQk9PTCAoV0lOQVBJICpwSW1tU2V0T3BlblN0YXR1cykoSElNQywgQk9PTCk7CitCT09MIChXSU5BUEkgKnBJbW1HZXRDb21wb3NpdGlvbkZvbnQpKEhJTUMsIExQTE9HRk9OVEEpOworQk9PTCAoV0lOQVBJICpwSW1tU2V0Q29tcG9zaXRpb25Gb250KShISU1DLCBMUExPR0ZPTlRBKTsKK0JPT0wgKFdJTkFQSSAqcEltbVNldENvbXBvc2l0aW9uV2luZG93KShISU1DLCBMUENPTVBPU0lUSU9ORk9STSk7CitCT09MIChXSU5BUEkgKnBJbW1HZXRDb252ZXJzaW9uU3RhdHVzKShISU1DLCBMUERXT1JELCBMUERXT1JEKTsKK3N0YXRpYyB2b2lkIGR5bl9pbW1fbG9hZCh2b2lkKTsKKyNlbHNlCisjIGRlZmluZSBwSW1tR2V0Q29tcG9zaXRpb25TdHJpbmdBIEltbUdldENvbXBvc2l0aW9uU3RyaW5nQQorIyBkZWZpbmUgcEltbUdldENvbXBvc2l0aW9uU3RyaW5nVyBJbW1HZXRDb21wb3NpdGlvblN0cmluZ1cKKyMgZGVmaW5lIHBJbW1HZXRDb250ZXh0CQkgIEltbUdldENvbnRleHQKKyMgZGVmaW5lIHBJbW1Bc3NvY2lhdGVDb250ZXh0CSAgSW1tQXNzb2NpYXRlQ29udGV4dAorIyBkZWZpbmUgcEltbVJlbGVhc2VDb250ZXh0CSAgSW1tUmVsZWFzZUNvbnRleHQKKyMgZGVmaW5lIHBJbW1HZXRPcGVuU3RhdHVzCSAgSW1tR2V0T3BlblN0YXR1cworIyBkZWZpbmUgcEltbVNldE9wZW5TdGF0dXMJICBJbW1TZXRPcGVuU3RhdHVzCisjIGRlZmluZSBwSW1tR2V0Q29tcG9zaXRpb25Gb250ICAgSW1tR2V0Q29tcG9zaXRpb25Gb250QQorIyBkZWZpbmUgcEltbVNldENvbXBvc2l0aW9uRm9udCAgIEltbVNldENvbXBvc2l0aW9uRm9udEEKKyMgZGVmaW5lIHBJbW1TZXRDb21wb3NpdGlvbldpbmRvdyBJbW1TZXRDb21wb3NpdGlvbldpbmRvdworIyBkZWZpbmUgcEltbUdldENvbnZlcnNpb25TdGF0dXMgIEltbUdldENvbnZlcnNpb25TdGF0dXMKKyNlbmRpZgorCisjaWZuZGVmIEVUT19JR05PUkVMQU5HVUFHRQorIyBkZWZpbmUgRVRPX0lHTk9SRUxBTkdVQUdFICAweDEwMDAKKyNlbmRpZgorCisvKiBtdWx0aSBtb25pdG9yIHN1cHBvcnQgKi8KK3R5cGVkZWYgc3RydWN0IF9NT05JVE9SSU5GT3N0cnVjdAoreworICAgIERXT1JEIGNiU2l6ZTsKKyAgICBSRUNUIHJjTW9uaXRvcjsKKyAgICBSRUNUIHJjV29yazsKKyAgICBEV09SRCBkd0ZsYWdzOworfSBfTU9OSVRPUklORk87CisKK3R5cGVkZWYgSEFORExFIF9ITU9OSVRPUjsKK3R5cGVkZWYgX0hNT05JVE9SIChXSU5BUEkgKlRNb25pdG9yRnJvbVdpbmRvdykoSFdORCwgRFdPUkQpOwordHlwZWRlZiBCT09MIChXSU5BUEkgKlRHZXRNb25pdG9ySW5mbykoX0hNT05JVE9SLCBfTU9OSVRPUklORk8gKik7CisKK3N0YXRpYyBUTW9uaXRvckZyb21XaW5kb3cgICBwTW9uaXRvckZyb21XaW5kb3cgPSBOVUxMOworc3RhdGljIFRHZXRNb25pdG9ySW5mbwkgICAgcEdldE1vbml0b3JJbmZvID0gTlVMTDsKK3N0YXRpYyBIQU5ETEUJCSAgICB1c2VyMzJfbGliID0gTlVMTDsKKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKK2ludCBXU0luaXRpYWxpemVkID0gRkFMU0U7IC8qIFdpblNvY2sgaXMgaW5pdGlhbGl6ZWQgKi8KKyNlbmRpZgorLyoKKyAqIFJldHVybiBUUlVFIHdoZW4gcnVubmluZyB1bmRlciBXaW5kb3dzIE5UIDMueCBvciBXaW4zMnMsIGJvdGggb2Ygd2hpY2ggaGF2ZQorICogbGVzcyBmYW5jeSBHVUkgQVBJcy4KKyAqLworICAgIHN0YXRpYyBpbnQKK2lzX3dpbm50XzModm9pZCkKK3sKKyAgICByZXR1cm4gKChvc192ZXJzaW9uLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQKKwkJJiYgb3NfdmVyc2lvbi5kd01ham9yVmVyc2lvbiA9PSAzKQorCSAgICB8fCAob3NfdmVyc2lvbi5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMycykpOworfQorCisvKgorICogUmV0dXJuIFRSVUUgd2hlbiBydW5uaW5nIHVuZGVyIFdpbjMycy4KKyAqLworICAgIGludAorZ3VpX2lzX3dpbjMycyh2b2lkKQoreworICAgIHJldHVybiAob3NfdmVyc2lvbi5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMycyk7Cit9CisKKyNpZmRlZiBGRUFUX01FTlUKKy8qCisgKiBGaWd1cmUgb3V0IGhvdyBoaWdoIHRoZSBtZW51IGJhciBpcyBhdCB0aGUgbW9tZW50LgorICovCisgICAgc3RhdGljIGludAorZ3VpX21zd2luX2dldF9tZW51X2hlaWdodCgKKyAgICBpbnQJICAgIGZpeF93aW5kb3cpCSAgICAvKiBJZiBUUlVFLCByZXNpemUgd2luZG93IGlmIG1lbnUgaGVpZ2h0IGNoYW5nZWQgKi8KK3sKKyAgICBzdGF0aWMgaW50CW9sZF9tZW51X2hlaWdodCA9IC0xOworCisgICAgUkVDVCAgICByYzEsIHJjMjsKKyAgICBpbnQJICAgIG51bTsKKyAgICBpbnQJICAgIG1lbnVfaGVpZ2h0OworCisgICAgaWYgKGd1aS5tZW51X2lzX2FjdGl2ZSkKKwludW0gPSBHZXRNZW51SXRlbUNvdW50KHNfbWVudUJhcik7CisgICAgZWxzZQorCW51bSA9IDA7CisKKyAgICBpZiAobnVtID09IDApCisJbWVudV9oZWlnaHQgPSAwOworICAgIGVsc2UKKyAgICB7CisJaWYgKGlzX3dpbm50XzMoKSkJLyogZm9yIE5UIDMueHggKi8KKwl7CisJICAgIGlmIChndWkuc3RhcnRpbmcpCisJCW1lbnVfaGVpZ2h0ID0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWU1FTlUpOworCSAgICBlbHNlCisJICAgIHsKKwkJUkVDVCByMSwgcjI7CisJCWludCBmcmFtZWh0ID0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWUZSQU1FKTsKKwkJaW50IGNhcGh0ID0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWUNBUFRJT04pOworCisJCS8qIGdldCB3aW5kb3cgcmVjdCBvZiBzX2h3bmQKKwkJICogZ2V0IGNsaWVudCByZWN0IG9mIHNfaHduZAorCQkgKiBnZXQgY2FwIGhlaWdodAorCQkgKiBzdWJ0cmFjdCBmcm9tIHdpbmRvdyByZWN0LCB0aGUgc3VtIG9mIGNsaWVudCBoZWlnaHQsCisJCSAqIChpZiBub3QgbWF4aW1pemVkKWZyYW1lIHRoaWNrbmVzcywgYW5kIGNhcHRpb24gaGVpZ2h0LgorCQkgKi8KKwkJR2V0V2luZG93UmVjdChzX2h3bmQsICZyMSk7CisJCUdldENsaWVudFJlY3Qoc19od25kLCAmcjIpOworCQltZW51X2hlaWdodCA9IHIxLmJvdHRvbSAtIHIxLnRvcCAtIChyMi5ib3R0b20gLSByMi50b3AKKwkJCQkgKyAyICogZnJhbWVodCAqICghSXNab29tZWQoc19od25kKSkgKyBjYXBodCk7CisJICAgIH0KKwl9CisJZWxzZQkJCS8qIHdpbjk1IGFuZCB2YXJpYW50cyAoTlQgNC4wLCBJIGd1ZXNzKSAqLworCXsKKwkgICAgLyoKKwkgICAgICogSW4gY2FzZSAnbGluZXMnIGlzIHNldCBpbiBfdmltcmMvX2d2aW1yYyB3aW5kb3cgd2lkdGggZG9lc24ndAorCSAgICAgKiBzZWVtIHRvIGhhdmUgYmVlbiBzZXQgeWV0LCBzbyBtZW51IHdyYXBzIGluIGRlZmF1bHQgd2luZG93CisJICAgICAqIHdpZHRoIHdoaWNoIGlzIHZlcnkgbmFycm93LiAgSW5zdGVhZCBqdXN0IHJldHVybiBoZWlnaHQgb2YgYQorCSAgICAgKiBzaW5nbGUgbWVudSBpdGVtLiAgV2lsbCBzdGlsbCBiZSB3cm9uZyB3aGVuIHRoZSBtZW51IHJlYWxseQorCSAgICAgKiBzaG91bGQgd3JhcCBvdmVyIG1vcmUgdGhhbiBvbmUgbGluZS4KKwkgICAgICovCisJICAgIEdldE1lbnVJdGVtUmVjdChzX2h3bmQsIHNfbWVudUJhciwgMCwgJnJjMSk7CisJICAgIGlmIChndWkuc3RhcnRpbmcpCisJCW1lbnVfaGVpZ2h0ID0gcmMxLmJvdHRvbSAtIHJjMS50b3AgKyAxOworCSAgICBlbHNlCisJICAgIHsKKwkJR2V0TWVudUl0ZW1SZWN0KHNfaHduZCwgc19tZW51QmFyLCBudW0gLSAxLCAmcmMyKTsKKwkJbWVudV9oZWlnaHQgPSByYzIuYm90dG9tIC0gcmMxLnRvcCArIDE7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKGZpeF93aW5kb3cgJiYgbWVudV9oZWlnaHQgIT0gb2xkX21lbnVfaGVpZ2h0KQorICAgIHsKKwlvbGRfbWVudV9oZWlnaHQgPSBtZW51X2hlaWdodDsKKwlndWlfc2V0X3NoZWxsc2l6ZShGQUxTRSwgRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBtZW51X2hlaWdodDsKK30KKyNlbmRpZiAvKkZFQVRfTUVOVSovCisKKworLyoKKyAqIFNldHVwIGZvciB0aGUgSW50ZWxsaW1vdXNlCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5pdF9tb3VzZV93aGVlbCh2b2lkKQoreworCisjaWZuZGVmIFNQSV9HRVRXSEVFTFNDUk9MTExJTkVTCisjIGRlZmluZSBTUElfR0VUV0hFRUxTQ1JPTExMSU5FUyAgICAxMDQKKyNlbmRpZgorCisjZGVmaW5lIFZNT1VTRVpfQ0xBU1NOQU1FICAiTW91c2VaIgkJLyogaGlkZGVuIHdoZWVsIHdpbmRvdyBjbGFzcyAqLworI2RlZmluZSBWTU9VU0VaX1RJVExFICAgICAgIk1hZ2VsbGFuIE1TV0hFRUwiCS8qIGhpZGRlbiB3aGVlbCB3aW5kb3cgdGl0bGUgKi8KKyNkZWZpbmUgVk1TSF9NT1VTRVdIRUVMICAgICJNU1dIRUVMX1JPTExNU0ciCisjZGVmaW5lIFZNU0hfU0NST0xMX0xJTkVTICAiTVNIX1NDUk9MTF9MSU5FU19NU0ciCisKKyAgICBIV05EIGhkbF9tc3doZWVsOworICAgIFVJTlQgbXNoX21zZ3Njcm9sbGxpbmVzOworCisgICAgbXNoX21zZ21vdXNld2hlZWwgPSAwOworICAgIG1vdXNlX3Njcm9sbF9saW5lcyA9IDM7CS8qIHJlYXNvbmFibGUgZGVmYXVsdCAqLworCisgICAgaWYgKChvc192ZXJzaW9uLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQKKwkJJiYgb3NfdmVyc2lvbi5kd01ham9yVmVyc2lvbiA+PSA0KQorCSAgICB8fCAob3NfdmVyc2lvbi5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MKKwkJJiYgKChvc192ZXJzaW9uLmR3TWFqb3JWZXJzaW9uID09IDQKKwkJCSYmIG9zX3ZlcnNpb24uZHdNaW5vclZlcnNpb24gPj0gMTApCisJCSAgICB8fCBvc192ZXJzaW9uLmR3TWFqb3JWZXJzaW9uID49IDUpKSkKKyAgICB7CisJLyogaWYgTlQgNC4wKyAob3IgV2luOTgpIGdldCBzY3JvbGwgbGluZXMgZGlyZWN0bHkgZnJvbSBzeXN0ZW0gKi8KKwlTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUV0hFRUxTQ1JPTExMSU5FUywgMCwKKwkJJm1vdXNlX3Njcm9sbF9saW5lcywgMCk7CisgICAgfQorICAgIGVsc2UgaWYgKG9zX3ZlcnNpb24uZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTCisJICAgIHx8IChvc192ZXJzaW9uLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQKKwkJJiYgb3NfdmVyc2lvbi5kd01ham9yVmVyc2lvbiA8IDQpKQorICAgIHsJLyoKKwkgKiBJZiBXaW45NSBvciBOVCAzLjUxLAorCSAqIHRyeSB0byBmaW5kIHRoZSBoaWRkZW4gcG9pbnQzMiB3aW5kb3cuCisJICovCisJaGRsX21zd2hlZWwgPSBGaW5kV2luZG93KFZNT1VTRVpfQ0xBU1NOQU1FLCBWTU9VU0VaX1RJVExFKTsKKwlpZiAoaGRsX21zd2hlZWwpCisJeworCSAgICBtc2hfbXNnc2Nyb2xsbGluZXMgPSBSZWdpc3RlcldpbmRvd01lc3NhZ2UoVk1TSF9TQ1JPTExfTElORVMpOworCSAgICBpZiAobXNoX21zZ3Njcm9sbGxpbmVzKQorCSAgICB7CisJCW1vdXNlX3Njcm9sbF9saW5lcyA9IChpbnQpU2VuZE1lc3NhZ2UoaGRsX21zd2hlZWwsCisJCQltc2hfbXNnc2Nyb2xsbGluZXMsIDAsIDApOworCQltc2hfbXNnbW91c2V3aGVlbCAgPSBSZWdpc3RlcldpbmRvd01lc3NhZ2UoVk1TSF9NT1VTRVdIRUVMKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKworLyogSW50ZWxsaW1vdXNlIHdoZWVsIGhhbmRsZXIgKi8KKyAgICBzdGF0aWMgdm9pZAorX09uTW91c2VXaGVlbCgKKyAgICBIV05EIGh3bmQsCisgICAgc2hvcnQgekRlbHRhKQoreworLyogVHJlYXQgYSBtb3VzZSB3aGVlbCBldmVudCBhcyBpZiBpdCB3ZXJlIGEgc2Nyb2xsIHJlcXVlc3QgKi8KKyAgICBpbnQgaTsKKyAgICBpbnQgc2l6ZTsKKyAgICBIV05EIGh3bmRDdGw7CisKKyAgICBpZiAoY3Vyd2luLT53X3Njcm9sbGJhcnNbU0JBUl9SSUdIVF0uaWQgIT0gMCkKKyAgICB7CisJaHduZEN0bCA9IGN1cndpbi0+d19zY3JvbGxiYXJzW1NCQVJfUklHSFRdLmlkOworCXNpemUgPSBjdXJ3aW4tPndfc2Nyb2xsYmFyc1tTQkFSX1JJR0hUXS5zaXplOworICAgIH0KKyAgICBlbHNlIGlmIChjdXJ3aW4tPndfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdLmlkICE9IDApCisgICAgeworCWh3bmRDdGwgPSBjdXJ3aW4tPndfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdLmlkOworCXNpemUgPSBjdXJ3aW4tPndfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdLnNpemU7CisgICAgfQorICAgIGVsc2UKKwlyZXR1cm47CisKKyAgICBzaXplID0gY3Vyd2luLT53X2hlaWdodDsKKyAgICBpZiAobW91c2Vfc2Nyb2xsX2xpbmVzID09IDApCisJaW5pdF9tb3VzZV93aGVlbCgpOworCisgICAgaWYgKG1vdXNlX3Njcm9sbF9saW5lcyA+IDAKKwkgICAgJiYgbW91c2Vfc2Nyb2xsX2xpbmVzIDwgKHNpemUgPiAyID8gc2l6ZSAtIDIgOiAxKSkKKyAgICB7CisJZm9yIChpID0gbW91c2Vfc2Nyb2xsX2xpbmVzOyBpID4gMDsgLS1pKQorCSAgICBfT25TY3JvbGwoaHduZCwgaHduZEN0bCwgekRlbHRhID49IDAgPyBTQl9MSU5FVVAgOiBTQl9MSU5FRE9XTiwgMCk7CisgICAgfQorICAgIGVsc2UKKwlfT25TY3JvbGwoaHduZCwgaHduZEN0bCwgekRlbHRhID49IDAgPyBTQl9QQUdFVVAgOiBTQl9QQUdFRE9XTiwgMCk7Cit9CisKKyNpZiAwCS8qIGRpc2FibGVkLCBhIGdhcCBhcHBlYXJzIGJlbG93IGFuZCBiZXNpZGUgdGhlIHdpbmRvdywgYW5kIHRoZSB3aW5kb3cKKwkgICBjYW4gYmUgbW92ZWQgKGluIGEgc3RyYW5nZSB3YXkpICovCisvKgorICogRXZlbiB0aG91Z2ggd2UgaGF2ZSBfRHVyaW5nU2l6aW5nKCkgd2hpY2ggbWFrZXMgdGhlIHJ1YmJlciBiYW5kIGEgdmFsaWQKKyAqIHNpemUsIHdlIG5lZWQgdGhpcyBmb3Igd2hlbiB0aGUgdXNlciBtYXhpbWlzZXMgdGhlIHdpbmRvdy4KKyAqIFRPRE86IERvZXNuJ3Qgc2VlbSB0byBhZGp1c3QgdGhlIHdpZHRoIHRob3VnaCBmb3Igc29tZSByZWFzb24uCisgKi8KKyAgICBzdGF0aWMgQk9PTAorX09uV2luZG93UG9zQ2hhbmdpbmcoCisgICAgSFdORCBod25kLAorICAgIExQV0lORE9XUE9TIGxwd3BvcykKK3sKKyAgICBSRUNUICAgIHdvcmthcmVhX3JlY3Q7CisKKyAgICBpZiAoIShscHdwb3MtPmZsYWdzICYgU1dQX05PU0laRSkpCisgICAgeworCWlmIChJc01heGltaXplZChod25kKQorCQkmJiAob3NfdmVyc2lvbi5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MKKwkJICAgIHx8IChvc192ZXJzaW9uLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQKKwkJCSYmIG9zX3ZlcnNpb24uZHdNYWpvclZlcnNpb24gPj0gNCkpKQorCXsKKwkgICAgU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVFdPUktBUkVBLCAwLCAmd29ya2FyZWFfcmVjdCwgMCk7CisJICAgIGxwd3Bvcy0+eCA9IHdvcmthcmVhX3JlY3QubGVmdDsKKwkgICAgbHB3cG9zLT55ID0gd29ya2FyZWFfcmVjdC50b3A7CisJICAgIGxwd3Bvcy0+Y3ggPSB3b3JrYXJlYV9yZWN0LnJpZ2h0IC0gd29ya2FyZWFfcmVjdC5sZWZ0OworCSAgICBscHdwb3MtPmN5ID0gd29ya2FyZWFfcmVjdC5ib3R0b20gLSB3b3JrYXJlYV9yZWN0LnRvcDsKKwl9CisJZ3VpX21zd2luX2dldF92YWxpZF9kaW1lbnNpb25zKGxwd3Bvcy0+Y3gsIGxwd3Bvcy0+Y3ksCisJCQkJICAgICAmbHB3cG9zLT5jeCwgJmxwd3Bvcy0+Y3kpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgc3RhdGljIHZvaWQKK19PbldpbmRvd1Bvc0NoYW5nZWQoCisgICAgSFdORCBod25kLAorICAgIGNvbnN0IExQV0lORE9XUE9TIGxwd3BvcykKK3sKKyAgICBzdGF0aWMgaW50IHggPSAwLCB5ID0gMCwgY3ggPSAwLCBjeSA9IDA7CisKKyAgICBpZiAoV1NJbml0aWFsaXplZCAmJiAobHB3cG9zLT54ICE9IHggfHwgbHB3cG9zLT55ICE9IHkKKwkJCQkgICAgIHx8IGxwd3Bvcy0+Y3ggIT0gY3ggfHwgbHB3cG9zLT5jeSAhPSBjeSkpCisgICAgeworCXggPSBscHdwb3MtPng7CisJeSA9IGxwd3Bvcy0+eTsKKwljeCA9IGxwd3Bvcy0+Y3g7CisJY3kgPSBscHdwb3MtPmN5OworCW5ldGJlYW5zX2ZyYW1lX21vdmVkKHgsIHkpOworICAgIH0KKyAgICAvKiBBbGxvdyB0byBzZW5kIFdNX1NJWkUgYW5kIFdNX01PVkUgKi8KKyAgICBGT1JXQVJEX1dNX1dJTkRPV1BPU0NIQU5HRUQoaHduZCwgbHB3cG9zLCBNeVdpbmRvd1Byb2MpOworfQorI2VuZGlmCisKKyAgICBzdGF0aWMgaW50CitfRHVyaW5nU2l6aW5nKAorICAgIEhXTkQgaHduZCwKKyAgICBVSU5UIGZ3U2lkZSwKKyAgICBMUFJFQ1QgbHByYykKK3sKKyAgICBpbnQJICAgIHcsIGg7CisgICAgaW50CSAgICB2YWxpZF93LCB2YWxpZF9oOworICAgIGludAkgICAgd19vZmZzZXQsIGhfb2Zmc2V0OworCisgICAgdyA9IGxwcmMtPnJpZ2h0IC0gbHByYy0+bGVmdDsKKyAgICBoID0gbHByYy0+Ym90dG9tIC0gbHByYy0+dG9wOworICAgIGd1aV9tc3dpbl9nZXRfdmFsaWRfZGltZW5zaW9ucyh3LCBoLCAmdmFsaWRfdywgJnZhbGlkX2gpOworICAgIHdfb2Zmc2V0ID0gdyAtIHZhbGlkX3c7CisgICAgaF9vZmZzZXQgPSBoIC0gdmFsaWRfaDsKKworICAgIGlmIChmd1NpZGUgPT0gV01TWl9MRUZUIHx8IGZ3U2lkZSA9PSBXTVNaX1RPUExFRlQKKwkJCSAgICB8fCBmd1NpZGUgPT0gV01TWl9CT1RUT01MRUZUKQorCWxwcmMtPmxlZnQgKz0gd19vZmZzZXQ7CisgICAgZWxzZSBpZiAoZndTaWRlID09IFdNU1pfUklHSFQgfHwgZndTaWRlID09IFdNU1pfVE9QUklHSFQKKwkJCSAgICB8fCBmd1NpZGUgPT0gV01TWl9CT1RUT01SSUdIVCkKKwlscHJjLT5yaWdodCAtPSB3X29mZnNldDsKKworICAgIGlmIChmd1NpZGUgPT0gV01TWl9UT1AgfHwgZndTaWRlID09IFdNU1pfVE9QTEVGVAorCQkJICAgIHx8IGZ3U2lkZSA9PSBXTVNaX1RPUFJJR0hUKQorCWxwcmMtPnRvcCArPSBoX29mZnNldDsKKyAgICBlbHNlIGlmIChmd1NpZGUgPT0gV01TWl9CT1RUT00gfHwgZndTaWRlID09IFdNU1pfQk9UVE9NTEVGVAorCQkJICAgIHx8IGZ3U2lkZSA9PSBXTVNaX0JPVFRPTVJJR0hUKQorCWxwcmMtPmJvdHRvbSAtPSBoX29mZnNldDsKKyAgICByZXR1cm4gVFJVRTsKK30KKworCisKKyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSworX1duZFByb2MoCisgICAgSFdORCBod25kLAorICAgIFVJTlQgdU1zZywKKyAgICBXUEFSQU0gd1BhcmFtLAorICAgIExQQVJBTSBsUGFyYW0pCit7CisgICAgLyoKKyAgICBUUkFDRSgiV25kUHJvYzogaHduZCA9ICUwOHgsIG1zZyA9ICV4LCB3UGFyYW0gPSAleCwgbFBhcmFtID0gJXhcbiIsCisJICBod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgKi8KKworICAgIEhhbmRsZU1vdXNlSGlkZSh1TXNnLCBsUGFyYW0pOworCisgICAgc191TXNnID0gdU1zZzsKKyAgICBzX3dQYXJhbSA9IHdQYXJhbTsKKyAgICBzX2xQYXJhbSA9IGxQYXJhbTsKKworICAgIHN3aXRjaCAodU1zZykKKyAgICB7CisJSEFORExFX01TRyhod25kLCBXTV9ERUFEQ0hBUiwJX09uRGVhZENoYXIpOworCUhBTkRMRV9NU0coaHduZCwgV01fU1lTREVBRENIQVIsIF9PbkRlYWRDaGFyKTsKKwkvKiBIQU5ETEVfTVNHKGh3bmQsIFdNX0FDVElWQVRFLCAgICBfT25BY3RpdmF0ZSk7ICovCisJSEFORExFX01TRyhod25kLCBXTV9DTE9TRSwJX09uQ2xvc2UpOworCS8qIEhBTkRMRV9NU0coaHduZCwgV01fQ09NTUFORCwJX09uQ29tbWFuZCk7ICovCisJSEFORExFX01TRyhod25kLCBXTV9ERVNUUk9ZLAlfT25EZXN0cm95KTsKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX0RST1BGSUxFUywJX09uRHJvcEZpbGVzKTsKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX0hTQ1JPTEwsCV9PblNjcm9sbCk7CisJSEFORExFX01TRyhod25kLCBXTV9LSUxMRk9DVVMsCV9PbktpbGxGb2N1cyk7CisjaWZkZWYgRkVBVF9NRU5VCisJSEFORExFX01TRyhod25kLCBXTV9DT01NQU5ELAlfT25NZW51KTsKKyNlbmRpZgorCS8qIEhBTkRMRV9NU0coaHduZCwgV01fTU9WRSwJICAgIF9Pbk1vdmUpOyAqLworCS8qIEhBTkRMRV9NU0coaHduZCwgV01fTkNBQ1RJVkFURSwgIF9Pbk5DQWN0aXZhdGUpOyAqLworCUhBTkRMRV9NU0coaHduZCwgV01fU0VURk9DVVMsCV9PblNldEZvY3VzKTsKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX1NJWkUsCV9PblNpemUpOworCS8qIEhBTkRMRV9NU0coaHduZCwgV01fU1lTQ09NTUFORCwgIF9PblN5c0NvbW1hbmQpOyAqLworCS8qIEhBTkRMRV9NU0coaHduZCwgV01fU1lTS0VZRE9XTiwgIF9PbkFsdEtleSk7ICovCisJSEFORExFX01TRyhod25kLCBXTV9WU0NST0xMLAlfT25TY3JvbGwpOworCS8vIEhBTkRMRV9NU0coaHduZCwgV01fV0lORE9XUE9TQ0hBTkdJTkcsCV9PbldpbmRvd1Bvc0NoYW5naW5nKTsKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX0FDVElWQVRFQVBQLCBfT25BY3RpdmF0ZUFwcCk7CisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJSEFORExFX01TRyhod25kLCBXTV9XSU5ET1dQT1NDSEFOR0VELCBfT25XaW5kb3dQb3NDaGFuZ2VkKTsKKyNlbmRpZgorCisgICAgY2FzZSBXTV9RVUVSWUVORFNFU1NJT046CS8qIFN5c3RlbSB3YW50cyB0byBnbyBkb3duLiAqLworCWd1aV9zaGVsbF9jbG9zZWQoKTsJLyogV2lsbCBleGl0IHdoZW4gbm8gY2hhbmdlZCBidWZmZXJzLiAqLworCXJldHVybiBGQUxTRTsJCS8qIERvIE5PVCBhbGxvdyBzeXN0ZW0gdG8gZ28gZG93bi4gKi8KKworICAgIGNhc2UgV01fRU5EU0VTU0lPTjoKKwlpZiAod1BhcmFtKQkvKiBzeXN0ZW0gb25seSByZWFsbHkgZ29lcyBkb3duIHdoZW4gd1BhcmFtIGlzIFRSVUUgKi8KKwkgICAgX09uRW5kU2Vzc2lvbigpOworCWJyZWFrOworCisgICAgY2FzZSBXTV9DSEFSOgorCS8qIERvbid0IHVzZSBIQU5ETEVfTVNHKCkgZm9yIFdNX0NIQVIsIGl0IHRydW5jYXRlcyB3UGFyYW0gdG8gYSBzaW5nbGUKKwkgKiBieXRlIHdoaWxlIHdlIHdhbnQgdGhlIFVURi0xNiBjaGFyYWN0ZXIgdmFsdWUuICovCisJX09uQ2hhcihod25kLCB3UGFyYW0sIChpbnQpKHNob3J0KUxPV09SRChsUGFyYW0pKTsKKwlyZXR1cm4gMEw7CisKKyAgICBjYXNlIFdNX1NZU0NIQVI6CisJLyoKKwkgKiBpZiAnd2luYWx0a2V5cycgaXMgIm5vIiwgb3IgaXQncyAibWVudSIgYW5kIGl0J3Mgbm90IGEgbWVudQorCSAqIHNob3J0Y3V0IGtleSwgaGFuZGxlIGxpa2UgYSB0eXBlZCBBTFQga2V5LCBvdGhlcndpc2UgY2FsbCBXaW5kb3dzCisJICogQUxUIGtleSBoYW5kbGluZy4KKwkgKi8KKyNpZmRlZiBGRUFUX01FTlUKKwlpZiAoCSFndWkubWVudV9pc19hY3RpdmUKKwkJfHwgcF93YWtbMF0gPT0gJ24nCisJCXx8IChwX3dha1swXSA9PSAnbScgJiYgIWd1aV9pc19tZW51X3Nob3J0Y3V0KChpbnQpd1BhcmFtKSkKKwkJKQorI2VuZGlmCisJeworCSAgICBfT25TeXNDaGFyKGh3bmQsIHdQYXJhbSwgKGludCkoc2hvcnQpTE9XT1JEKGxQYXJhbSkpOworCSAgICByZXR1cm4gMEw7CisJfQorI2lmZGVmIEZFQVRfTUVOVQorCWVsc2UKKwkgICAgcmV0dXJuIE15V2luZG93UHJvYyhod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisjZW5kaWYKKworICAgIGNhc2UgV01fU1lTS0VZVVA6CisjaWZkZWYgRkVBVF9NRU5VCisJLyogVGhpcyB1c2VkIHRvIGJlIGRvbmUgb25seSB3aGVuIG1lbnUgaXMgYWN0aXZlOiBBTFQga2V5IGlzIHVzZWQgZm9yCisJICogdGhhdC4gIEJ1dCB0aGF0IGNhdXNlZCBwcm9ibGVtcyB3aGVuIG1lbnUgaXMgZGlzYWJsZWQgYW5kIHVzaW5nCisJICogQWx0LVRhYi1Fc2M6IGdldCBpbnRvIGEgc3RyYW5nZSBzdGF0ZSB3aGVyZSBubyBtb3VzZS1tb3ZlZCBldmVudHMKKwkgKiBhcmUgcmVjZWl2ZWQsIG1vdXNlIHBvaW50ZXIgcmVtYWlucyBoaWRkZW4uICovCisJcmV0dXJuIE15V2luZG93UHJvYyhod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCisKKyAgICBjYXNlIFdNX1NJWklORzoJLyogSEFORExFX01TRyBkb2Vzbid0IHNlZW0gdG8gaGFuZGxlIHRoaXMgb25lICovCisJcmV0dXJuIF9EdXJpbmdTaXppbmcoaHduZCwgKFVJTlQpd1BhcmFtLCAoTFBSRUNUKWxQYXJhbSk7CisKKyAgICBjYXNlIFdNX01PVVNFV0hFRUw6CisJX09uTW91c2VXaGVlbChod25kLCBISVdPUkQod1BhcmFtKSk7CisJYnJlYWs7CisKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICBjYXNlIFdNX05PVElGWToKKwlzd2l0Y2ggKCgoTFBOTUhEUikgbFBhcmFtKS0+Y29kZSkKKwl7CisJICAgIGNhc2UgVFROX05FRURURVhUOgorCQl7CisJCSAgICBMUFRPT0xUSVBURVhUCWxwdHR0OworCQkgICAgVUlOVAkJaWRCdXR0b247CisJCSAgICBpbnQJCQlpZHg7CisJCSAgICB2aW1tZW51X1QJCSpwTWVudTsKKworCQkgICAgbHB0dHQgPSAoTFBUT09MVElQVEVYVClsUGFyYW07CisJCSAgICBpZEJ1dHRvbiA9IChVSU5UKSBscHR0dC0+aGRyLmlkRnJvbTsKKwkJICAgIHBNZW51ID0gZ3VpX21zd2luX2ZpbmRfbWVudShyb290X21lbnUsIGlkQnV0dG9uKTsKKwkJICAgIGlmIChwTWVudSkKKwkJICAgIHsKKwkJCWlkeCA9IE1FTlVfSU5ERVhfVElQOworCQkJaWYgKHBNZW51LT5zdHJpbmdzW2lkeF0pCisJCQl7CisJCQkgICAgbHB0dHQtPmhpbnN0ID0gTlVMTDsgIC8qIHN0cmluZywgbm90IHJlc291cmNlICovCisJCQkgICAgbHB0dHQtPmxwc3pUZXh0ID0gcE1lbnUtPnN0cmluZ3NbaWR4XTsKKwkJCX0KKwkJICAgIH0KKwkJfQorCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChNRU5VSElOVFMpICYmIGRlZmluZWQoRkVBVF9NRU5VKQorICAgIGNhc2UgV01fTUVOVVNFTEVDVDoKKwlpZiAoKChVSU5UKSBISVdPUkQod1BhcmFtKQorCQkgICAgJiAoMHhmZmZmIF4gKE1GX01PVVNFU0VMRUNUICsgTUZfQklUTUFQICsgTUZfUE9QVVApKSkKKwkJPT0gTUZfSElMSVRFCisJCSYmIChTdGF0ZSAmIENNRExJTkUpID09IDApCisJeworCSAgICBVSU5UCWlkQnV0dG9uOworCSAgICB2aW1tZW51X1QJKnBNZW51OworCSAgICBzdGF0aWMgaW50CWRpZF9tZW51X3RpcCA9IEZBTFNFOworCisJICAgIGlmIChkaWRfbWVudV90aXApCisJICAgIHsKKwkJbXNnX2Nscl9jbWRsaW5lKCk7CisJCXNldGN1cnNvcigpOworCQlvdXRfZmx1c2goKTsKKwkJZGlkX21lbnVfdGlwID0gRkFMU0U7CisJICAgIH0KKworCSAgICBpZEJ1dHRvbiA9IChVSU5UKUxPV09SRCh3UGFyYW0pOworCSAgICBwTWVudSA9IGd1aV9tc3dpbl9maW5kX21lbnUocm9vdF9tZW51LCBpZEJ1dHRvbik7CisJICAgIGlmIChwTWVudSAhPSBOVUxMICYmIHBNZW51LT5zdHJpbmdzW01FTlVfSU5ERVhfVElQXSAhPSAwCisJCSAgICAmJiBHZXRNZW51U3RhdGUoc19tZW51QmFyLCBwTWVudS0+aWQsIE1GX0JZQ09NTUFORCkgIT0gLTEpCisJICAgIHsKKwkJbXNnKHBNZW51LT5zdHJpbmdzW01FTlVfSU5ERVhfVElQXSk7CisJCXNldGN1cnNvcigpOworCQlvdXRfZmx1c2goKTsKKwkJZGlkX21lbnVfdGlwID0gVFJVRTsKKwkgICAgfQorCX0KKwlicmVhazsKKyNlbmRpZgorICAgIGNhc2UgV01fTkNISVRURVNUOgorCXsKKwkgICAgTFJFU1VMVAlyZXN1bHQ7CisJICAgIGludAkJeCwgeTsKKwkgICAgaW50CQl4UG9zID0gR0VUX1hfTFBBUkFNKGxQYXJhbSk7CisKKwkgICAgcmVzdWx0ID0gTXlXaW5kb3dQcm9jKGh3bmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKKwkgICAgaWYgKHJlc3VsdCA9PSBIVENMSUVOVCkKKwkgICAgeworCQlndWlfbWNoX2dldF93aW5wb3MoJngsICZ5KTsKKwkJeFBvcyAtPSB4OworCisJCWlmICh4UG9zIDwgNDgpIC8qIDxWTj4gVE9ETyBzaG91bGQgdXNlIHN5c3RlbSBtZXRyaWM/ICovCisJCSAgICByZXR1cm4gSFRCT1RUT01MRUZUOworCQllbHNlCisJCSAgICByZXR1cm4gSFRCT1RUT01SSUdIVDsKKwkgICAgfQorCSAgICBlbHNlCisJCXJldHVybiByZXN1bHQ7CisJfQorCS8qIGJyZWFrOyBub3RyZWFjaGVkICovCisKKyNpZmRlZiBGRUFUX01CWVRFX0lNRQorICAgIGNhc2UgV01fSU1FX05PVElGWToKKwlpZiAoIV9PbkltZU5vdGlmeShod25kLCAoRFdPUkQpd1BhcmFtLCAoRFdPUkQpbFBhcmFtKSkKKwkgICAgcmV0dXJuIE15V2luZG93UHJvYyhod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisJYnJlYWs7CisgICAgY2FzZSBXTV9JTUVfQ09NUE9TSVRJT046CisJaWYgKCFfT25JbWVDb21wb3NpdGlvbihod25kLCB3UGFyYW0sIGxQYXJhbSkpCisJICAgIHJldHVybiBNeVdpbmRvd1Byb2MoaHduZCwgdU1zZywgd1BhcmFtLCBsUGFyYW0pOworCWJyZWFrOworI2VuZGlmCisKKyAgICBkZWZhdWx0OgorCWlmICh1TXNnID09IG1zaF9tc2dtb3VzZXdoZWVsICYmIG1zaF9tc2dtb3VzZXdoZWVsICE9IDApCisJeyAgIC8qIGhhbmRsZSBNU0hfTU9VU0VXSEVFTCBtZXNzYWdlcyBmb3IgSW50ZWxsaW1vdXNlICovCisJICAgIF9Pbk1vdXNlV2hlZWwoaHduZCwgSElXT1JEKHdQYXJhbSkpOworCSAgICBicmVhazsKKwl9CisjaWZkZWYgTVNXSU5fRklORF9SRVBMQUNFCisJZWxzZQorCWlmICh1TXNnID09IHNfZmluZHJlcF9tc2cgJiYgc19maW5kcmVwX21zZyAhPSAwKQorCXsKKwkgICAgX09uRmluZFJlcGwoKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gTXlXaW5kb3dQcm9jKGh3bmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworLyoKKyAqIEVuZCBvZiBjYWxsLWJhY2sgcm91dGluZXMKKyAqLworCisvKiBwYXJlbnQgd2luZG93LCBpZiBzcGVjaWZpZWQgd2l0aCAtUCAqLworSFdORCB2aW1fcGFyZW50X2h3bmQgPSBOVUxMOworCisgICAgc3RhdGljIEJPT0wgQ0FMTEJBQ0sKK0ZpbmRXaW5kb3dUaXRsZShIV05EIGh3bmQsIExQQVJBTSBsUGFyYW0pCit7CisgICAgY2hhcglidWZbMjA0OF07CisgICAgY2hhcgkqdGl0bGUgPSAoY2hhciAqKWxQYXJhbTsKKworICAgIGlmIChHZXRXaW5kb3dUZXh0KGh3bmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQorICAgIHsKKwlpZiAoc3Ryc3RyKGJ1ZiwgdGl0bGUpICE9IE5VTEwpCisJeworCSAgICAvKiBGb3VuZCBpdC4gIFN0b3JlIHRoZSB3aW5kb3cgcmVmLiBhbmQgcXVpdCBzZWFyY2hpbmcuICovCisJICAgIHZpbV9wYXJlbnRfaHduZCA9IEZpbmRXaW5kb3dFeChod25kLCBOVUxMLCAiTURJQ2xpZW50IiwgTlVMTCk7CisJICAgIHJldHVybiBGQUxTRTsKKwl9CisgICAgfQorICAgIHJldHVybiBUUlVFOwkvKiBjb250aW51ZSBzZWFyY2hpbmcgKi8KK30KKworLyoKKyAqIEludm9rZWQgZm9yICctUCAidGl0bGUiJyBhcmd1bWVudDogc2VhcmNoIGZvciBwYXJlbnQgYXBwbGljYXRpb24gdG8gb3BlbgorICogb3VyIHdpbmRvdyBpbi4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3BhcmVudChjaGFyICp0aXRsZSkKK3sKKyAgICBFbnVtV2luZG93cyhGaW5kV2luZG93VGl0bGUsIChMUEFSQU0pdGl0bGUpOworICAgIGlmICh2aW1fcGFyZW50X2h3bmQgPT0gTlVMTCkKKyAgICB7CisJRU1TRzIoXygiRTY3MTogQ2Fubm90IGZpbmQgd2luZG93IHRpdGxlIFwiJXNcIiIpLCB0aXRsZSk7CisJbWNoX2V4aXQoMik7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK29sZV9lcnJvcihjaGFyICphcmcpCit7CisgICAgRU1TRzIoXygiRTI0MzogQXJndW1lbnQgbm90IHN1cHBvcnRlZDogXCItJXNcIjsgVXNlIHRoZSBPTEUgdmVyc2lvbi4iKSwKKwkJCQkJCQkJCSBhcmcpOworfQorCisvKgorICogUGFyc2UgdGhlIEdVSSByZWxhdGVkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuICBBbnkgYXJndW1lbnRzIHVzZWQgYXJlCisgKiBkZWxldGVkIGZyb20gYXJndiwgYW5kICphcmdjIGlzIGRlY3JlbWVudGVkIGFjY29yZGluZ2x5LiAgVGhpcyBpcyBjYWxsZWQKKyAqIHdoZW4gdmltIGlzIHN0YXJ0ZWQsIHdoZXRoZXIgb3Igbm90IHRoZSBHVUkgaGFzIGJlZW4gc3RhcnRlZC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfcHJlcGFyZShpbnQgKmFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludAkJc2lsZW50ID0gRkFMU0U7CisgICAgaW50CQlpZHg7CisKKyAgICAvKiBDaGVjayBmb3Igc3BlY2lhbCBPTEUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgKi8KKyAgICBpZiAoKCphcmdjID09IDIgfHwgKmFyZ2MgPT0gMykgJiYgKGFyZ3ZbMV1bMF0gPT0gJy0nIHx8IGFyZ3ZbMV1bMF0gPT0gJy8nKSkKKyAgICB7CisJLyogQ2hlY2sgZm9yIGEgIi1zaWxlbnQiIGFyZ3VtZW50IGZpcnN0LiAqLworCWlmICgqYXJnYyA9PSAzICYmIFNUUklDTVAoYXJndlsxXSArIDEsICJzaWxlbnQiKSA9PSAwCisJCSYmIChhcmd2WzJdWzBdID09ICctJyB8fCBhcmd2WzJdWzBdID09ICcvJykpCisJeworCSAgICBzaWxlbnQgPSBUUlVFOworCSAgICBpZHggPSAyOworCX0KKwllbHNlCisJICAgIGlkeCA9IDE7CisKKwkvKiBSZWdpc3RlciBWaW0gYXMgYW4gT0xFIEF1dG9tYXRpb24gc2VydmVyICovCisJaWYgKFNUUklDTVAoYXJndltpZHhdICsgMSwgInJlZ2lzdGVyIikgPT0gMCkKKwl7CisjaWZkZWYgRkVBVF9PTEUKKwkgICAgUmVnaXN0ZXJNZShzaWxlbnQpOworCSAgICBtY2hfZXhpdCgwKTsKKyNlbHNlCisJICAgIGlmICghc2lsZW50KQorCQlvbGVfZXJyb3IoInJlZ2lzdGVyIik7CisJICAgIG1jaF9leGl0KDIpOworI2VuZGlmCisJfQorCisJLyogVW5yZWdpc3RlciBWaW0gYXMgYW4gT0xFIEF1dG9tYXRpb24gc2VydmVyICovCisJaWYgKFNUUklDTVAoYXJndltpZHhdICsgMSwgInVucmVnaXN0ZXIiKSA9PSAwKQorCXsKKyNpZmRlZiBGRUFUX09MRQorCSAgICBVbnJlZ2lzdGVyTWUoIXNpbGVudCk7CisJICAgIG1jaF9leGl0KDApOworI2Vsc2UKKwkgICAgaWYgKCFzaWxlbnQpCisJCW9sZV9lcnJvcigidW5yZWdpc3RlciIpOworCSAgICBtY2hfZXhpdCgyKTsKKyNlbmRpZgorCX0KKworCS8qIElnbm9yZSBhbiAtZW1iZWRkaW5nIGFyZ3VtZW50LiBJdCBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZQorCSAqIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHRyZWF0IHRoZSBjYXNlIHdoZW4gaXQgaXMgc3RhcnRlZCBtYW51YWxseQorCSAqIGRpZmZlcmVudGx5IGZyb20gdGhlIGNhc2Ugd2hlcmUgaXQgaXMgc3RhcnRlZCB2aWEgYXV0b21hdGlvbiAoYW5kCisJICogd2UgZG9uJ3QpLgorCSAqLworCWlmIChTVFJJQ01QKGFyZ3ZbaWR4XSArIDEsICJlbWJlZGRpbmciKSA9PSAwKQorCXsKKyNpZmRlZiBGRUFUX09MRQorCSAgICAqYXJnYyA9IDE7CisjZWxzZQorCSAgICBvbGVfZXJyb3IoImVtYmVkZGluZyIpOworCSAgICBtY2hfZXhpdCgyKTsKKyNlbmRpZgorCX0KKyAgICB9CisKKyNpZmRlZiBGRUFUX09MRQorICAgIHsKKwlpbnQJYkRvUmVzdGFydCA9IEZBTFNFOworCisJSW5pdE9MRSgmYkRvUmVzdGFydCk7CisJLyogYXV0b21hdGljYWxseSBleGl0IGFmdGVyIHJlZ2lzdGVyaW5nICovCisJaWYgKGJEb1Jlc3RhcnQpCisJICAgIG1jaF9leGl0KDApOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgeworCS8qIHN0b2xlbiBmcm9tIGd1aV94MTEueCAqLworCWludCBhcmc7CisKKwlmb3IgKGFyZyA9IDE7IGFyZyA8ICphcmdjOyBhcmcrKykKKwkgICAgaWYgKHN0cm5jbXAoIi1uYiIsIGFyZ3ZbYXJnXSwgMykgPT0gMCkKKwkgICAgeworCQl1c2luZ05ldGJlYW5zKys7CisJCW5ldGJlYW5zQXJnID0gYXJndlthcmddOworCQltY2hfbWVtbW92ZSgmYXJndlthcmddLCAmYXJndlthcmcgKyAxXSwKKwkJCQkJICAgICgtLSphcmdjIC0gYXJnKSAqIHNpemVvZihjaGFyICopKTsKKwkJYXJndlsqYXJnY10gPSBOVUxMOworCQlicmVhazsJLyogZW5vdWdoPyAqLworCSAgICB9CisKKwlpZiAodXNpbmdOZXRiZWFucykKKwl7CisJICAgIFdTQURBVEEgd3NhRGF0YTsKKwkgICAgaW50IHdzYWVycjsKKworCSAgICAvKiBJbml0IFdpblNvY2sgKi8KKwkgICAgd3NhZXJyID0gV1NBU3RhcnR1cChNQUtFV09SRCgyLCAyKSwgJndzYURhdGEpOworCSAgICBpZiAod3NhZXJyID09IDApCisJCVdTSW5pdGlhbGl6ZWQgPSBUUlVFOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qIGdldCB0aGUgT1MgdmVyc2lvbiBpbmZvICovCisgICAgb3NfdmVyc2lvbi5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKG9zX3ZlcnNpb24pOworICAgIEdldFZlcnNpb25FeCgmb3NfdmVyc2lvbik7IC8qIHRoaXMgY2FsbCB3b3JrcyBvbiBXaW4zMnMsIFdpbjk1IGFuZCBXaW5OVCAqLworCisgICAgLyogdHJ5IGFuZCBsb2FkIHRoZSB1c2VyMzIuZGxsIGxpYnJhcnkgYW5kIGdldCB0aGUgZW50cnkgcG9pbnRzIGZvcgorICAgICAqIG11bHRpLW1vbml0b3Itc3VwcG9ydC4gKi8KKyAgICBpZiAoKHVzZXIzMl9saWIgPSBMb2FkTGlicmFyeSgiVXNlcjMyLmRsbCIpKSAhPSBOVUxMKQorICAgIHsKKwlwTW9uaXRvckZyb21XaW5kb3cgPSAoVE1vbml0b3JGcm9tV2luZG93KUdldFByb2NBZGRyZXNzKHVzZXIzMl9saWIsCisJCQkJCQkJICJNb25pdG9yRnJvbVdpbmRvdyIpOworCisJLyogdGhlcmUgYXJlIC4uLkEgYW5kIC4uLlcgdmVyc2lvbiBvZiBHZXRNb25pdG9ySW5mbyAtIGxvb2tpbmcgYXQKKwkgKiB3aW51c2VyLmgsIHRoZXkgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGRlY2xhcmF0aW9uLiAqLworCXBHZXRNb25pdG9ySW5mbyA9IChUR2V0TW9uaXRvckluZm8pR2V0UHJvY0FkZHJlc3ModXNlcjMyX2xpYiwKKwkJCQkJCQkgICJHZXRNb25pdG9ySW5mb0EiKTsKKyAgICB9Cit9CisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBHVUkuCUNyZWF0ZSBhbGwgdGhlIHdpbmRvd3MsIHNldCB1cCBhbGwgdGhlIGNhbGwtYmFja3MKKyAqIGV0Yy4KKyAqLworICAgIGludAorZ3VpX21jaF9pbml0KHZvaWQpCit7CisgICAgY29uc3QgY2hhciBzelZpbVduZENsYXNzW10gPSBWSU1fQ0xBU1M7CisgICAgY29uc3QgY2hhciBzelRleHRBcmVhQ2xhc3NbXSA9ICJWaW1UZXh0QXJlYSI7CisgICAgV05EQ0xBU1Mgd25kY2xhc3M7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGNvbnN0IFdDSEFSIHN6VmltV25kQ2xhc3NXW10gPSBWSU1fQ0xBU1NXOworICAgIFdORENMQVNTVyB3bmRjbGFzc3c7CisjZW5kaWYKKyNpZmRlZiBHTE9CQUxfSU1FCisgICAgQVRPTQlhdG9tOworI2VuZGlmCisKKyAgICAvKiBEaXNwbGF5IGFueSBwZW5kaW5nIGVycm9yIG1lc3NhZ2VzICovCisgICAgZGlzcGxheV9lcnJvcnMoKTsKKworICAgIC8qIFJldHVybiBoZXJlIGlmIHRoZSB3aW5kb3cgd2FzIGFscmVhZHkgb3BlbmVkIChoYXBwZW5zIHdoZW4KKyAgICAgKiBndWlfbWNoX2RpYWxvZygpIGlzIGNhbGxlZCBlYXJseSkuICovCisgICAgaWYgKHNfaHduZCAhPSBOVUxMKQorCXJldHVybiBPSzsKKworICAgIC8qCisgICAgICogTG9hZCB0aGUgdGVhcm9mZiBiaXRtYXAKKyAgICAgKi8KKyNpZmRlZiBGRUFUX1RFQVJPRkYKKyAgICBzX2h0ZWFyYml0bWFwID0gTG9hZEJpdG1hcChzX2hpbnN0LCAiSURCX1RFQVJPRkYiKTsKKyNlbmRpZgorCisgICAgZ3VpLnNjcm9sbGJhcl93aWR0aCA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1hWU0NST0xMKTsKKyAgICBndWkuc2Nyb2xsYmFyX2hlaWdodCA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1lIU0NST0xMKTsKKyNpZmRlZiBGRUFUX01FTlUKKyAgICBndWkubWVudV9oZWlnaHQgPSAwOwkvKiBXaW5kb3dzIHRha2VzIGNhcmUgb2YgdGhpcyAqLworI2VuZGlmCisgICAgZ3VpLmJvcmRlcl93aWR0aCA9IDA7CisKKyAgICBzX2JydXNoID0gQ3JlYXRlU29saWRCcnVzaChHZXRTeXNDb2xvcihDT0xPUl9CVE5GQUNFKSk7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyogRmlyc3QgdHJ5IHVzaW5nIHRoZSB3aWRlIHZlcnNpb24sIHNvIHRoYXQgd2UgY2FuIHVzZSBhbnkgdGl0bGUuCisgICAgICogT3RoZXJ3aXNlIG9ubHkgY2hhcmFjdGVycyBpbiB0aGUgYWN0aXZlIGNvZGVwYWdlIHdpbGwgd29yay4gKi8KKyAgICBpZiAoR2V0Q2xhc3NJbmZvVyhzX2hpbnN0LCBzelZpbVduZENsYXNzVywgJnduZGNsYXNzdykgPT0gMCkKKyAgICB7CisJd25kY2xhc3N3LnN0eWxlID0gMDsKKwl3bmRjbGFzc3cubHBmblduZFByb2MgPSBfV25kUHJvYzsKKwl3bmRjbGFzc3cuY2JDbHNFeHRyYSA9IDA7CisJd25kY2xhc3N3LmNiV25kRXh0cmEgPSAwOworCXduZGNsYXNzdy5oSW5zdGFuY2UgPSBzX2hpbnN0OworCXduZGNsYXNzdy5oSWNvbiA9IExvYWRJY29uKHduZGNsYXNzdy5oSW5zdGFuY2UsICJJRFJfVklNIik7CisJd25kY2xhc3N3LmhDdXJzb3IgPSBMb2FkQ3Vyc29yKE5VTEwsIElEQ19BUlJPVyk7CisJd25kY2xhc3N3LmhickJhY2tncm91bmQgPSBzX2JydXNoOworCXduZGNsYXNzdy5scHN6TWVudU5hbWUgPSBOVUxMOworCXduZGNsYXNzdy5scHN6Q2xhc3NOYW1lID0gc3pWaW1XbmRDbGFzc1c7CisKKwlpZiAoKAorI2lmZGVmIEdMT0JBTF9JTUUKKwkJICAgIGF0b20gPQorI2VuZGlmCisJCSAgICBSZWdpc3RlckNsYXNzVygmd25kY2xhc3N3KSkgPT0gMCkKKwl7CisJICAgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKKwkJcmV0dXJuIEZBSUw7CisKKwkgICAgLyogTXVzdCBiZSBXaW5kb3dzIDk4LCBmYWxsIGJhY2sgdG8gbm9uLXdpZGUgZnVuY3Rpb24uICovCisJfQorCWVsc2UKKwkgICAgd2lkZV9XaW5kb3dQcm9jID0gVFJVRTsKKyAgICB9CisKKyAgICBpZiAoIXdpZGVfV2luZG93UHJvYykKKyNlbmRpZgorCisgICAgaWYgKEdldENsYXNzSW5mbyhzX2hpbnN0LCBzelZpbVduZENsYXNzLCAmd25kY2xhc3MpID09IDApCisgICAgeworCXduZGNsYXNzLnN0eWxlID0gMDsKKwl3bmRjbGFzcy5scGZuV25kUHJvYyA9IF9XbmRQcm9jOworCXduZGNsYXNzLmNiQ2xzRXh0cmEgPSAwOworCXduZGNsYXNzLmNiV25kRXh0cmEgPSAwOworCXduZGNsYXNzLmhJbnN0YW5jZSA9IHNfaGluc3Q7CisJd25kY2xhc3MuaEljb24gPSBMb2FkSWNvbih3bmRjbGFzcy5oSW5zdGFuY2UsICJJRFJfVklNIik7CisJd25kY2xhc3MuaEN1cnNvciA9IExvYWRDdXJzb3IoTlVMTCwgSURDX0FSUk9XKTsKKwl3bmRjbGFzcy5oYnJCYWNrZ3JvdW5kID0gc19icnVzaDsKKwl3bmRjbGFzcy5scHN6TWVudU5hbWUgPSBOVUxMOworCXduZGNsYXNzLmxwc3pDbGFzc05hbWUgPSBzelZpbVduZENsYXNzOworCisJaWYgKCgKKyNpZmRlZiBHTE9CQUxfSU1FCisJCSAgICBhdG9tID0KKyNlbmRpZgorCQkgICAgUmVnaXN0ZXJDbGFzcygmd25kY2xhc3MpKSA9PSAwKQorCSAgICByZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICBpZiAodmltX3BhcmVudF9od25kICE9IE5VTEwpCisgICAgeworI2lmZGVmIEhBVkVfVFJZX0VYQ0VQVAorCV9fdHJ5CisJeworI2VuZGlmCisJICAgIC8qIE9wZW4gaW5zaWRlIHRoZSBzcGVjaWZpZWQgcGFyZW50IHdpbmRvdy4KKwkgICAgICogVE9ETzogbGFzdCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSBDTElFTlRDUkVBVEVTVFJVQ1QKKwkgICAgICogc3RydWN0dXJlLiAqLworCSAgICBzX2h3bmQgPSBDcmVhdGVXaW5kb3dFeCgKKwkJV1NfRVhfTURJQ0hJTEQsCisJCXN6VmltV25kQ2xhc3MsICJWaW0gTVNXaW5kb3dzIEdVSSIsCisJCVdTX09WRVJMQVBQRURXSU5ET1cgfCBXU19DSElMRCB8IFdTX0NMSVBTSUJMSU5HUyB8IDB4QzAwMCwKKwkJZ3VpX3dpbl94ID09IC0xID8gQ1dfVVNFREVGQVVMVCA6IGd1aV93aW5feCwKKwkJZ3VpX3dpbl95ID09IC0xID8gQ1dfVVNFREVGQVVMVCA6IGd1aV93aW5feSwKKwkJMTAwLAkJCQkvKiBBbnkgdmFsdWUgd2lsbCBkbyAqLworCQkxMDAsCQkJCS8qIEFueSB2YWx1ZSB3aWxsIGRvICovCisJCXZpbV9wYXJlbnRfaHduZCwgTlVMTCwKKwkJc19oaW5zdCwgTlVMTCk7CisjaWZkZWYgSEFWRV9UUllfRVhDRVBUCisJfQorCV9fZXhjZXB0KEVYQ0VQVElPTl9FWEVDVVRFX0hBTkRMRVIpCisJeworCSAgICAvKiBOT1AgKi8KKwl9CisjZW5kaWYKKwlpZiAoc19od25kID09IE5VTEwpCisJeworCSAgICBFTVNHKF8oIkU2NzI6IFVuYWJsZSB0byBvcGVuIHdpbmRvdyBpbnNpZGUgTURJIGFwcGxpY2F0aW9uIikpOworCSAgICBtY2hfZXhpdCgyKTsKKwl9CisgICAgfQorICAgIGVsc2UKKwkvKiBPcGVuIHRvcGxldmVsIHdpbmRvdy4gKi8KKwlzX2h3bmQgPSBDcmVhdGVXaW5kb3coCisJICAgIHN6VmltV25kQ2xhc3MsICJWaW0gTVNXaW5kb3dzIEdVSSIsCisJICAgIFdTX09WRVJMQVBQRURXSU5ET1csCisJICAgIGd1aV93aW5feCA9PSAtMSA/IENXX1VTRURFRkFVTFQgOiBndWlfd2luX3gsCisJICAgIGd1aV93aW5feSA9PSAtMSA/IENXX1VTRURFRkFVTFQgOiBndWlfd2luX3ksCisJICAgIDEwMCwJCQkJLyogQW55IHZhbHVlIHdpbGwgZG8gKi8KKwkgICAgMTAwLAkJCQkvKiBBbnkgdmFsdWUgd2lsbCBkbyAqLworCSAgICBOVUxMLCBOVUxMLAorCSAgICBzX2hpbnN0LCBOVUxMKTsKKworICAgIGlmIChzX2h3bmQgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKworI2lmZGVmIEdMT0JBTF9JTUUKKyAgICBnbG9iYWxfaW1lX2luaXQoYXRvbSwgc19od25kKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9NQllURV9JTUUpICYmIGRlZmluZWQoRFlOQU1JQ19JTUUpCisgICAgZHluX2ltbV9sb2FkKCk7CisjZW5kaWYKKworICAgIC8qIENyZWF0ZSB0aGUgdGV4dCBhcmVhIHdpbmRvdyAqLworICAgIGlmIChHZXRDbGFzc0luZm8oc19oaW5zdCwgc3pUZXh0QXJlYUNsYXNzLCAmd25kY2xhc3MpID09IDApCisgICAgeworCXduZGNsYXNzLnN0eWxlID0gQ1NfT1dOREM7CisJd25kY2xhc3MubHBmblduZFByb2MgPSBfVGV4dEFyZWFXbmRQcm9jOworCXduZGNsYXNzLmNiQ2xzRXh0cmEgPSAwOworCXduZGNsYXNzLmNiV25kRXh0cmEgPSAwOworCXduZGNsYXNzLmhJbnN0YW5jZSA9IHNfaGluc3Q7CisJd25kY2xhc3MuaEljb24gPSBOVUxMOworCXduZGNsYXNzLmhDdXJzb3IgPSBMb2FkQ3Vyc29yKE5VTEwsIElEQ19BUlJPVyk7CisJd25kY2xhc3MuaGJyQmFja2dyb3VuZCA9IE5VTEw7CisJd25kY2xhc3MubHBzek1lbnVOYW1lID0gTlVMTDsKKwl3bmRjbGFzcy5scHN6Q2xhc3NOYW1lID0gc3pUZXh0QXJlYUNsYXNzOworCisJaWYgKFJlZ2lzdGVyQ2xhc3MoJnduZGNsYXNzKSA9PSAwKQorCSAgICByZXR1cm4gRkFJTDsKKyAgICB9CisgICAgc190ZXh0QXJlYSA9IENyZWF0ZVdpbmRvd0V4KAorCVdTX0VYX0NMSUVOVEVER0UsCisJc3pUZXh0QXJlYUNsYXNzLCAiVmltIHRleHQgYXJlYSIsCisJV1NfQ0hJTEQgfCBXU19WSVNJQkxFLCAwLCAwLAorCTEwMCwJCQkJLyogQW55IHZhbHVlIHdpbGwgZG8gZm9yIG5vdyAqLworCTEwMCwJCQkJLyogQW55IHZhbHVlIHdpbGwgZG8gZm9yIG5vdyAqLworCXNfaHduZCwgTlVMTCwKKwlzX2hpbnN0LCBOVUxMKTsKKworICAgIGlmIChzX3RleHRBcmVhID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyNpZmRlZiBGRUFUX01FTlUKKyAgICBzX21lbnVCYXIgPSBDcmVhdGVNZW51KCk7CisjZW5kaWYKKyAgICBzX2hkYyA9IEdldERDKHNfdGV4dEFyZWEpOworCisjaWZkZWYgTVNXSU4xNl9GQVNUVEVYVAorICAgIFNldEJrTW9kZShzX2hkYywgT1BBUVVFKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgRHJhZ0FjY2VwdEZpbGVzKHNfaHduZCwgVFJVRSk7CisjZW5kaWYKKworICAgIC8qIERvIHdlIG5lZWQgdG8gYm90aGVyIHdpdGggdGhpcz8gKi8KKyAgICAvKiBtX2ZNb3VzZUF2YWlsID0gR2V0U3lzdGVtTWV0cmljcyhTTV9NT1VTRVBSRVNFTlQpOyAqLworCisgICAgLyogR2V0IGJhY2tncm91bmQvZm9yZWdyb3VuZCBjb2xvcnMgZnJvbSB0aGUgc3lzdGVtICovCisgICAgZ3VpX21jaF9kZWZfY29sb3JzKCk7CisKKyAgICAvKiBHZXQgdGhlIGNvbG9ycyBmcm9tIHRoZSAiTm9ybWFsIiBncm91cCAoc2V0IGluIHN5bnRheC5jIG9yIGluIGEgdmltcmMKKyAgICAgKiBmaWxlKSAqLworICAgIHNldF9ub3JtYWxfY29sb3JzKCk7CisKKyAgICAvKgorICAgICAqIENoZWNrIHRoYXQgbm9uZSBvZiB0aGUgY29sb3JzIGFyZSB0aGUgc2FtZSBhcyB0aGUgYmFja2dyb3VuZCBjb2xvci4KKyAgICAgKiBUaGVuIHN0b3JlIHRoZSBjdXJyZW50IHZhbHVlcyBhcyB0aGUgZGVmYXVsdHMuCisgICAgICovCisgICAgZ3VpX2NoZWNrX2NvbG9ycygpOworICAgIGd1aS5kZWZfbm9ybV9waXhlbCA9IGd1aS5ub3JtX3BpeGVsOworICAgIGd1aS5kZWZfYmFja19waXhlbCA9IGd1aS5iYWNrX3BpeGVsOworCisgICAgLyogR2V0IHRoZSBjb2xvcnMgZm9yIHRoZSBoaWdobGlnaHQgZ3JvdXBzIChndWlfY2hlY2tfY29sb3JzKCkgbWlnaHQgaGF2ZQorICAgICAqIGNoYW5nZWQgdGhlbSkgKi8KKyAgICBoaWdobGlnaHRfZ3VpX3N0YXJ0ZWQoKTsKKworICAgIC8qCisgICAgICogU3RhcnQgb3V0IGJ5IGFkZGluZyB0aGUgY29uZmlndXJlZCBib3JkZXIgd2lkdGggaW50byB0aGUgYm9yZGVyIG9mZnNldAorICAgICAqLworICAgIGd1aS5ib3JkZXJfb2Zmc2V0ID0gZ3VpLmJvcmRlcl93aWR0aCArIDI7CS8qQ0xJRU5UIEVER0UqLworCisgICAgLyoKKyAgICAgKiBTZXQgdXAgZm9yIEludGVsbGltb3VzZSBwcm9jZXNzaW5nCisgICAgICovCisgICAgaW5pdF9tb3VzZV93aGVlbCgpOworCisgICAgLyoKKyAgICAgKiBjb21wdXRlIGEgY291cGxlIG9mIG1ldHJpY3MgdXNlZCBmb3IgdGhlIGRpYWxvZ3MKKyAgICAgKi8KKyAgICBnZXRfZGlhbG9nX2ZvbnRfbWV0cmljcygpOworI2lmZGVmIEZFQVRfVE9PTEJBUgorICAgIC8qCisgICAgICogQ3JlYXRlIHRoZSB0b29sYmFyCisgICAgICovCisgICAgaW5pdGlhbGlzZV90b29sYmFyKCk7CisjZW5kaWYKKyNpZmRlZiBNU1dJTl9GSU5EX1JFUExBQ0UKKyAgICAvKgorICAgICAqIEluaXRpYWxpc2UgdGhlIGRpYWxvZyBib3ggc3R1ZmYKKyAgICAgKi8KKyAgICBzX2ZpbmRyZXBfbXNnID0gUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKEZJTkRNU0dTVFJJTkcpOworCisgICAgLyogSW5pdGlhbGlzZSB0aGUgc3RydWN0ICovCisgICAgc19maW5kcmVwX3N0cnVjdC5sU3RydWN0U2l6ZSA9IHNpemVvZihzX2ZpbmRyZXBfc3RydWN0KTsKKyAgICBzX2ZpbmRyZXBfc3RydWN0Lmxwc3RyRmluZFdoYXQgPSBhbGxvYyhNU1dJTl9GUl9CVUZTSVpFKTsKKyAgICBzX2ZpbmRyZXBfc3RydWN0Lmxwc3RyRmluZFdoYXRbMF0gPSBOVUw7CisgICAgc19maW5kcmVwX3N0cnVjdC5scHN0clJlcGxhY2VXaXRoID0gYWxsb2MoTVNXSU5fRlJfQlVGU0laRSk7CisgICAgc19maW5kcmVwX3N0cnVjdC5scHN0clJlcGxhY2VXaXRoWzBdID0gTlVMOworICAgIHNfZmluZHJlcF9zdHJ1Y3Qud0ZpbmRXaGF0TGVuID0gTVNXSU5fRlJfQlVGU0laRTsKKyAgICBzX2ZpbmRyZXBfc3RydWN0LndSZXBsYWNlV2l0aExlbiA9IE1TV0lOX0ZSX0JVRlNJWkU7CisjZW5kaWYKKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKyAgICBpZiAodXNpbmdOZXRiZWFucykKKwluZXRiZWFuc193MzJfY29ubmVjdCgpOworI2VuZGlmCisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBHZXQgdGhlIHNpemUgb2YgdGhlIHNjcmVlbiwgdGFraW5nIHBvc2l0aW9uIG9uIG11bHRpcGxlIG1vbml0b3JzIGludG8KKyAqIGFjY291bnQgKGlmIHN1cHBvcnRlZCkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ2V0X3dvcmtfYXJlYShSRUNUICpzcGlfcmVjdCkKK3sKKyAgICBfSE1PTklUT1IJICAgIG1vbjsKKyAgICBfTU9OSVRPUklORk8gICAgbW9uaW5mbzsKKworICAgIC8qIHVzZSB0aGVzZSBmdW5jdGlvbnMgb25seSBpZiBhdmFpbGFibGUgKi8KKyAgICBpZiAocE1vbml0b3JGcm9tV2luZG93ICE9IE5VTEwgJiYgcEdldE1vbml0b3JJbmZvICE9IE5VTEwpCisgICAgeworCS8qIHdvcmsgb3V0IHdoaWNoIG1vbml0b3IgdGhlIHdpbmRvdyBpcyBvbiwgYW5kIGdldCAqaXQncyogd29yayBhcmVhICovCisJbW9uID0gcE1vbml0b3JGcm9tV2luZG93KHNfaHduZCwgMSAvKk1PTklUT1JfREVGQVVMVFRPUFJJTUFSWSovKTsKKwlpZiAobW9uICE9IE5VTEwpCisJeworCSAgICBtb25pbmZvLmNiU2l6ZSA9IHNpemVvZihfTU9OSVRPUklORk8pOworCSAgICBpZiAocEdldE1vbml0b3JJbmZvKG1vbiwgJm1vbmluZm8pKQorCSAgICB7CisJCSpzcGlfcmVjdCA9IG1vbmluZm8ucmNXb3JrOworCQlyZXR1cm47CisJICAgIH0KKwl9CisgICAgfQorICAgIC8qIHRoaXMgaXMgdGhlIG9sZCBtZXRob2QuLi4gKi8KKyAgICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUV09SS0FSRUEsIDAsIHNwaV9yZWN0LCAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgc2l6ZSBvZiB0aGUgd2luZG93IHRvIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IGluIHBpeGVscy4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3NoZWxsc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQsCisJaW50IG1pbl93aWR0aCwgaW50IG1pbl9oZWlnaHQsIGludCBiYXNlX3dpZHRoLCBpbnQgYmFzZV9oZWlnaHQpCit7CisgICAgUkVDVAl3b3JrYXJlYV9yZWN0OworICAgIGludAkJd2luX3dpZHRoLCB3aW5faGVpZ2h0OworICAgIGludAkJd2luX3hwb3MsIHdpbl95cG9zOworICAgIFdJTkRPV1BMQUNFTUVOVCB3bmRwbDsKKworICAgIC8qIHRyeSB0byBrZWVwIHdpbmRvdyBjb21wbGV0ZWx5IG9uIHNjcmVlbiAqLworICAgIC8qIGdldCBzaXplIG9mIHRoZSBzY3JlZW4gd29yayBhcmVhIChleGNsdWRlcyB0YXNrYmFyLCBhcHBiYXJzKSAqLworICAgIGdldF93b3JrX2FyZWEoJndvcmthcmVhX3JlY3QpOworCisgICAgLyogZ2V0IGN1cnJlbnQgcG9zaXNpb24gb2Ygb3VyIHdpbmRvdyAqLworICAgIHduZHBsLmxlbmd0aCA9IHNpemVvZihXSU5ET1dQTEFDRU1FTlQpOworICAgIEdldFdpbmRvd1BsYWNlbWVudChzX2h3bmQsICZ3bmRwbCk7CisKKyAgICAvKiBSZXNpemluZyBhIG1heGltaXplZCB3aW5kb3cgbG9va3MgdmVyeSBzdHJhbmdlLCB1bnpvb20gaXQgZmlyc3QuCisgICAgICogQnV0IGRvbid0IGRvIGl0IHdoZW4gc3RpbGwgc3RhcnRpbmcgdXAsIGl0IG1heSBoYXZlIGJlZW4gcmVxdWVzdGVkIGluCisgICAgICogdGhlIHNob3J0Y3V0LiAqLworICAgIGlmICh3bmRwbC5zaG93Q21kID09IFNXX1NIT1dNQVhJTUlaRUQgJiYgc3RhcnRpbmcgPT0gMCkKKyAgICB7CisJU2hvd1dpbmRvdyhzX2h3bmQsIFNXX1NIT1dOT1JNQUwpOworCS8qIE5lZWQgdG8gZ2V0IHRoZSBzZXR0aW5ncyBvZiB0aGUgbm9ybWFsIHdpbmRvdy4gKi8KKwlHZXRXaW5kb3dQbGFjZW1lbnQoc19od25kLCAmd25kcGwpOworICAgIH0KKworICAgIHdpbl94cG9zID0gd25kcGwucmNOb3JtYWxQb3NpdGlvbi5sZWZ0OworICAgIHdpbl95cG9zID0gd25kcGwucmNOb3JtYWxQb3NpdGlvbi50b3A7CisKKyAgICAvKiBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBvdXRzaWRlIG9mIHRoZSB3aW5kb3cgKi8KKyAgICB3aW5fd2lkdGggPSB3aWR0aCArIEdldFN5c3RlbU1ldHJpY3MoU01fQ1hGUkFNRSkgKiAyOworICAgIHdpbl9oZWlnaHQgPSBoZWlnaHQgKyBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZRlJBTUUpICogMgorCQkJKyBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZQ0FQVElPTikKKyNpZmRlZiBGRUFUX01FTlUKKwkJCSsgZ3VpX21zd2luX2dldF9tZW51X2hlaWdodChGQUxTRSkKKyNlbmRpZgorCQkJOworCisgICAgLyogaWYgdGhlIHdpbmRvdyBpcyBnb2luZyBvZmYgdGhlIHNjcmVlbiwgbW92ZSBpdCBvbiB0byB0aGUgc2NyZWVuICovCisgICAgaWYgKHdpbl94cG9zICsgd2luX3dpZHRoID4gd29ya2FyZWFfcmVjdC5yaWdodCkKKwl3aW5feHBvcyA9IHdvcmthcmVhX3JlY3QucmlnaHQgLSB3aW5fd2lkdGg7CisKKyAgICBpZiAod2luX3hwb3MgPCB3b3JrYXJlYV9yZWN0LmxlZnQpCisJd2luX3hwb3MgPSB3b3JrYXJlYV9yZWN0LmxlZnQ7CisKKyAgICBpZiAod2luX3lwb3MgKyB3aW5faGVpZ2h0ID4gd29ya2FyZWFfcmVjdC5ib3R0b20pCisJd2luX3lwb3MgPSB3b3JrYXJlYV9yZWN0LmJvdHRvbSAtIHdpbl9oZWlnaHQ7CisKKyAgICBpZiAod2luX3lwb3MgPCB3b3JrYXJlYV9yZWN0LnRvcCkKKwl3aW5feXBvcyA9IHdvcmthcmVhX3JlY3QudG9wOworCisgICAgLyogV2hlbiB0aGUgdGFza2JhciBpcyBwbGFjZWQgb24gdGhlIGxlZnQgb3IgdG9wIG9mIHRoZSBzY3JlZW4sCisgICAgICogU2V0V2luZG93UGxhY2VtZW50KCkgYWRkcyBpdHMgd2lkdGggb3IgaGVpZ2h0IGF1dG9tYXRpY2FsbHksIGNvbXBlbnNhdGUKKyAgICAgKiBmb3IgdGhhdC4gIFdoZW4gdGhlIG9mZnNldCBpcyBvdmVyIDQwMCBpdCdzIHByb2JhYmx5IHNvbWV0aGluZyBlbHNlLAorICAgICAqIHNraXAgaXQgdGhlbiAoanVzdCBpbiBjYXNlKS4gKi8KKyAgICBpZiAod29ya2FyZWFfcmVjdC5sZWZ0ID4gMCAmJiB3b3JrYXJlYV9yZWN0LmxlZnQgPCA0MDApCisJd2luX3hwb3MgLT0gd29ya2FyZWFfcmVjdC5sZWZ0OworICAgIGlmICh3b3JrYXJlYV9yZWN0LnRvcCA+IDAgJiYgd29ya2FyZWFfcmVjdC50b3AgPCA0MDApCisJd2luX3lwb3MgLT0gd29ya2FyZWFfcmVjdC50b3A7CisKKyAgICB3bmRwbC5yY05vcm1hbFBvc2l0aW9uLmxlZnQgPSB3aW5feHBvczsKKyAgICB3bmRwbC5yY05vcm1hbFBvc2l0aW9uLnJpZ2h0ID0gd2luX3hwb3MgKyB3aW5fd2lkdGg7CisgICAgd25kcGwucmNOb3JtYWxQb3NpdGlvbi50b3AgPSB3aW5feXBvczsKKyAgICB3bmRwbC5yY05vcm1hbFBvc2l0aW9uLmJvdHRvbSA9IHdpbl95cG9zICsgd2luX2hlaWdodDsKKworICAgIC8qIHNldCB3aW5kb3cgcG9zaXRpb24gLSB3ZSBzaG91bGQgdXNlIFNldFdpbmRvd1BsYWNlbWVudCByYXRoZXIgdGhhbgorICAgICAqIFNldFdpbmRvd1BvcyBhcyB0aGUgTVNETiBkb2NzIHNheSB0aGUgY29vcmQgc3lzdGVtcyByZXR1cm5lZCBieQorICAgICAqIHRoZXNlIHR3byBhcmUgbm90IGNvbXBhdGlibGUuICovCisgICAgU2V0V2luZG93UGxhY2VtZW50KHNfaHduZCwgJnduZHBsKTsKKworICAgIFNldEFjdGl2ZVdpbmRvdyhzX2h3bmQpOworICAgIFNldEZvY3VzKHNfaHduZCk7CisKKyNpZmRlZiBGRUFUX01FTlUKKyAgICAvKiBNZW51IG1heSB3cmFwIGRpZmZlcmVudGx5IG5vdyAqLworICAgIGd1aV9tc3dpbl9nZXRfbWVudV9oZWlnaHQoIWd1aS5zdGFydGluZyk7CisjZW5kaWYKK30KKworCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3RodW1iKAorICAgIHNjcm9sbGJhcl9UICpzYiwKKyAgICBsb25nCXZhbCwKKyAgICBsb25nCXNpemUsCisgICAgbG9uZwltYXgpCit7CisgICAgU0NST0xMSU5GTwlpbmZvOworCisgICAgc2ItPnNjcm9sbF9zaGlmdCA9IDA7CisgICAgd2hpbGUgKG1heCA+IDMyNzY3KQorICAgIHsKKwltYXggPSAobWF4ICsgMSkgPj4gMTsKKwl2YWwgID4+PSAxOworCXNpemUgPj49IDE7CisJKytzYi0+c2Nyb2xsX3NoaWZ0OworICAgIH0KKworICAgIGlmIChzYi0+c2Nyb2xsX3NoaWZ0ID4gMCkKKwkrK3NpemU7CisKKyAgICBpbmZvLmNiU2l6ZSA9IHNpemVvZihpbmZvKTsKKyAgICBpbmZvLmZNYXNrID0gU0lGX1BPUyB8IFNJRl9SQU5HRSB8IFNJRl9QQUdFOworICAgIGluZm8ublBvcyA9IHZhbDsKKyAgICBpbmZvLm5NaW4gPSAwOworICAgIGluZm8ubk1heCA9IG1heDsKKyAgICBpbmZvLm5QYWdlID0gc2l6ZTsKKyAgICBTZXRTY3JvbGxJbmZvKHNiLT5pZCwgU0JfQ1RMLCAmaW5mbywgVFJVRSk7Cit9CisKKworLyoKKyAqIFNldCB0aGUgY3VycmVudCB0ZXh0IGZvbnQuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9mb250KEd1aUZvbnQgZm9udCkKK3sKKyAgICBndWkuY3VyckZvbnQgPSBmb250OworfQorCisKKy8qCisgKiBTZXQgdGhlIGN1cnJlbnQgdGV4dCBmb3JlZ3JvdW5kIGNvbG9yLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZmdfY29sb3IoZ3VpY29sb3JfVCBjb2xvcikKK3sKKyAgICBndWkuY3VyckZnQ29sb3IgPSBjb2xvcjsKK30KKworLyoKKyAqIFNldCB0aGUgY3VycmVudCB0ZXh0IGJhY2tncm91bmQgY29sb3IuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9iZ19jb2xvcihndWljb2xvcl9UIGNvbG9yKQoreworICAgIGd1aS5jdXJyQmdDb2xvciA9IGNvbG9yOworfQorCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiBkZWZpbmVkKEZFQVRfTUJZVEVfSU1FKQorLyoKKyAqIE11bHRpLWJ5dGUgaGFuZGxpbmcsIG9yaWdpbmFsbHkgYnkgU3VuZy1Ib29uIEJhZWsuCisgKiBGaXJzdCBzdGF0aWMgZnVuY3Rpb25zIChubyBwcm90b3R5cGVzIGdlbmVyYXRlZCkuCisgKi8KKyNpZmRlZiBfTVNDX1ZFUgorIyBpbmNsdWRlIDxpbWUuaD4gICAvKiBBcHBhcmVudGx5IG5vdCBuZWVkZWQgZm9yIEN5Z3dpbiwgTWluZ1cgb3IgQm9ybGFuZC4gKi8KKyNlbmRpZgorI2luY2x1ZGUgPGltbS5oPgorCisvKgorICogZGlzcGxheSBjb21wb3NpdGlvbiBzdHJpbmcoa29yZWFuKQorICovCisgICAgc3RhdGljIHZvaWQKK0Rpc3BsYXlDb21wU3RyaW5nT3BhcXVlKGNoYXJfdSAqcywgaW50IGxlbikKK3sKKyAgICBpbnQgT2xkQmtNb2RlID0gR2V0QmtNb2RlKHNfaGRjKTsKKworICAgIFNldEJrTW9kZShzX2hkYywgT1BBUVVFKTsKKyAgICBndWlfb3V0c3RyX25vd3JhcChzLCBsZW4sIEdVSV9NT05fVFJTX0NVUlNPUiwKKwkJCQkJICAgICAoZ3VpY29sb3JfVCkwLCAoZ3VpY29sb3JfVCkwLCAwKTsKKyAgICBTZXRCa01vZGUoc19oZGMsIE9sZEJrTW9kZSk7Cit9CisKKy8qCisgKiBoYW5kbGUgV01fSU1FX05PVElGWSBtZXNzYWdlCisgKi8KKyAgICBzdGF0aWMgTFJFU1VMVAorX09uSW1lTm90aWZ5KEhXTkQgaFduZCwgRFdPUkQgZHdDb21tYW5kLCBEV09SRCBkd0RhdGEpCit7CisgICAgTFJFU1VMVCBsUmVzdWx0ID0gMDsKKyAgICBISU1DIGhJbWM7CisKKyAgICBpZiAoIXBJbW1HZXRDb250ZXh0IHx8IChoSW1jID0gcEltbUdldENvbnRleHQoaFduZCkpID09IChISU1DKTApCisJcmV0dXJuIGxSZXN1bHQ7CisgICAgc3dpdGNoIChkd0NvbW1hbmQpCisgICAgeworCWNhc2UgSU1OX1NFVE9QRU5TVEFUVVM6CisJICAgIGlmIChwSW1tR2V0T3BlblN0YXR1cyhoSW1jKSkKKwkgICAgeworCQlwSW1tU2V0Q29tcG9zaXRpb25Gb250KGhJbWMsICZub3JtX2xvZ2ZvbnQpOworCQlpbV9zZXRfcG9zaXRpb24oZ3VpLnJvdywgZ3VpLmNvbCk7CisKKwkJLyogRGlzYWJsZSBsYW5nbWFwICovCisJCVN0YXRlICY9IH5MQU5HTUFQOworCQlpZiAoU3RhdGUgJiBJTlNFUlQpCisJCXsKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX0tFWU1BUCkKKwkJICAgIC8qIFVuc2hvd24gJ2tleW1hcCcgaW4gc3RhdHVzIGxpbmVzICovCisJCSAgICBpZiAoY3VyYnVmLT5iX3BfaW1pbnNlcnQgPT0gQl9JTU9ERV9MTUFQKQorCQkgICAgeworCQkJLyogU2F2ZSBjdXJzb3IgcG9zaXRpb24gKi8KKwkJCWludCBvbGRfcm93ID0gZ3VpLnJvdzsKKwkJCWludCBvbGRfY29sID0gZ3VpLmNvbDsKKworCQkJLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBoZXJlIGJlZm9yZQorCQkJLy8gc3RhdHVzX3JlZHJhd19jdXJidWYoKSwgb3RoZXJ3aXNlIHRoZSBtb2RlCisJCQkvLyBtZXNzYWdlIG1heSBhcHBlYXIgaW4gdGhlIHdyb25nIHBvc2l0aW9uLgorCQkJc2hvd21vZGUoKTsKKwkJCXN0YXR1c19yZWRyYXdfY3VyYnVmKCk7CisJCQl1cGRhdGVfc2NyZWVuKDApOworCQkJLyogUmVzdG9yZSBjdXJzb3IgcG9zaXRpb24gKi8KKwkJCWd1aS5yb3cgPSBvbGRfcm93OworCQkJZ3VpLmNvbCA9IG9sZF9jb2w7CisJCSAgICB9CisjZW5kaWYKKwkJfQorCSAgICB9CisJICAgIGd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKwkgICAgbFJlc3VsdCA9IDA7CisJICAgIGJyZWFrOworICAgIH0KKyAgICBwSW1tUmVsZWFzZUNvbnRleHQoaFduZCwgaEltYyk7CisgICAgcmV0dXJuIGxSZXN1bHQ7Cit9CisKKyAgICBzdGF0aWMgTFJFU1VMVAorX09uSW1lQ29tcG9zaXRpb24oSFdORCBod25kLCBXUEFSQU0gZGJjcywgTFBBUkFNIHBhcmFtKQoreworICAgIGNoYXJfdQkqcmV0OworICAgIGludAkJbGVuOworCisgICAgaWYgKChwYXJhbSAmIEdDU19SRVNVTFRTVFIpID09IDApIC8qIENvbXBvc2l0aW9uIHVuZmluaXNoZWQuICovCisJcmV0dXJuIDA7CisKKyAgICByZXQgPSBHZXRSZXN1bHRTdHIoaHduZCwgR0NTX1JFU1VMVFNUUiwgJmxlbik7CisgICAgaWYgKHJldCAhPSBOVUxMKQorICAgIHsKKwlhZGRfdG9faW5wdXRfYnVmX2NzaShyZXQsIGxlbik7CisJdmltX2ZyZWUocmV0KTsKKwlyZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBnZXQgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gc3RyaW5nLCBpbiBVQ1MtMjsgKmxlbnAgaXMgdGhlIG51bWJlciBvZgorICogKmxlbnAgaXMgdGhlIG51bWJlciBvZiBVbmljb2RlIGNoYXJhY3RlcnMuCisgKi8KKyAgICBzdGF0aWMgc2hvcnRfdSAqCitHZXRDb21wb3NpdGlvblN0cmluZ19pblVDUzIoSElNQyBoSU1DLCBEV09SRCBHQ1MsIGludCAqbGVucCkKK3sKKyAgICBMT05HCSAgICByZXQ7CisgICAgTFBXU1RSCSAgICB3YnVmID0gTlVMTDsKKyAgICBjaGFyX3UJICAgICpidWY7CisKKyAgICBpZiAoIXBJbW1HZXRDb250ZXh0KQorCXJldHVybiBOVUxMOyAvKiBubyBpbW0zMi5kbGwgKi8KKworICAgIC8qIFRyeSBVbmljb2RlOyB0aGlzJ2xsIGFsd2F5cyB3b3JrIG9uIE5UIHJlZ2FyZGxlc3Mgb2YgY29kZXBhZ2UuICovCisgICAgcmV0ID0gcEltbUdldENvbXBvc2l0aW9uU3RyaW5nVyhoSU1DLCBHQ1MsIE5VTEwsIDApOworICAgIGlmIChyZXQgPT0gMCkKKwlyZXR1cm4gTlVMTDsgLyogZW1wdHkgKi8KKworICAgIGlmIChyZXQgPiAwKQorICAgIHsKKwkvKiBBbGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBwbHVzIHNwYWNlIGZvciB0aGUgTlVMIGNoYXJhY3Rlci4gKi8KKwl3YnVmID0gKExQV1NUUilhbGxvYyhyZXQgKyBzaXplb2YoV0NIQVIpKTsKKwlpZiAod2J1ZiAhPSBOVUxMKQorCXsKKwkgICAgcEltbUdldENvbXBvc2l0aW9uU3RyaW5nVyhoSU1DLCBHQ1MsIHdidWYsIHJldCk7CisJICAgICpsZW5wID0gcmV0IC8gc2l6ZW9mKFdDSEFSKTsKKwl9CisJcmV0dXJuIChzaG9ydF91ICopd2J1ZjsKKyAgICB9CisKKyAgICAvKiByZXQgPCAwOyB3ZSBnb3QgYW4gZXJyb3IsIHNvIHRyeSB0aGUgQU5TSSB2ZXJzaW9uLiAgVGhpcydsbCB3b3JrCisgICAgICogb24gOXgvTUUsIGJ1dCBvbmx5IGlmIHRoZSBjb2RlcGFnZSBoYXBwZW5zIHRvIGJlIHNldCB0byB3aGF0ZXZlcgorICAgICAqIHdlJ3JlIGlucHV0dGluZy4gKi8KKyAgICByZXQgPSBwSW1tR2V0Q29tcG9zaXRpb25TdHJpbmdBKGhJTUMsIEdDUywgTlVMTCwgMCk7CisgICAgaWYgKHJldCA8PSAwKQorCXJldHVybiBOVUxMOyAvKiBlbXB0eSBvciBlcnJvciAqLworCisgICAgYnVmID0gYWxsb2MocmV0KTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisgICAgcEltbUdldENvbXBvc2l0aW9uU3RyaW5nQShoSU1DLCBHQ1MsIGJ1ZiwgcmV0KTsKKworICAgIC8qIGNvbnZlcnQgZnJvbSBjb2RlcGFnZSB0byBVQ1MtMiAqLworICAgIE11bHRpQnl0ZVRvV2lkZUNoYXJfYWxsb2MoR2V0QUNQKCksIDAsIGJ1ZiwgcmV0LCAmd2J1ZiwgbGVucCk7CisgICAgdmltX2ZyZWUoYnVmKTsKKworICAgIHJldHVybiAoc2hvcnRfdSAqKXdidWY7Cit9CisKKy8qCisgKiB2b2lkIEdldFJlc3VsdFN0cigpCisgKgorICogVGhpcyBoYW5kbGVzIFdNX0lNRV9DT01QT1NJVElPTiB3aXRoIEdDU19SRVNVTFRTVFIgZmxhZyBvbi4KKyAqIGdldCBjb21wbGV0ZSBjb21wb3NpdGlvbiBzdHJpbmcKKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorR2V0UmVzdWx0U3RyKEhXTkQgaHduZCwgaW50IEdDUywgaW50ICpsZW5wKQoreworICAgIEhJTUMJaElNQzsJCS8qIElucHV0IGNvbnRleHQgaGFuZGxlLiAqLworICAgIHNob3J0X3UJKmJ1ZiA9IE5VTEw7CisgICAgY2hhcl91CSpjb252YnVmID0gTlVMTDsKKworICAgIGlmICghcEltbUdldENvbnRleHQgfHwgKGhJTUMgPSBwSW1tR2V0Q29udGV4dChod25kKSkgPT0gKEhJTUMpMCkKKwlyZXR1cm4gTlVMTDsKKworICAgIC8qIFJlYWRzIGluIHRoZSBjb21wb3NpdGlvbiBzdHJpbmcuICovCisgICAgYnVmID0gR2V0Q29tcG9zaXRpb25TdHJpbmdfaW5VQ1MyKGhJTUMsIEdDUywgbGVucCk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgY29udmJ1ZiA9IHVjczJfdG9fZW5jKGJ1ZiwgbGVucCk7CisgICAgcEltbVJlbGVhc2VDb250ZXh0KGh3bmQsIGhJTUMpOworICAgIHZpbV9mcmVlKGJ1Zik7CisgICAgcmV0dXJuIGNvbnZidWY7Cit9CisjZW5kaWYKKworLyogRm9yIGdsb2JhbCBmdW5jdGlvbnMgd2UgbmVlZCBwcm90b3R5cGVzLiAqLworI2lmIChkZWZpbmVkKEZFQVRfTUJZVEUpICYmIGRlZmluZWQoRkVBVF9NQllURV9JTUUpKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogc2V0IGZvbnQgdG8gSU0uCisgKi8KKyAgICB2b2lkCitpbV9zZXRfZm9udChMT0dGT05UICpsZikKK3sKKyAgICBISU1DIGhJbWM7CisKKyAgICBpZiAocEltbUdldENvbnRleHQgJiYgKGhJbWMgPSBwSW1tR2V0Q29udGV4dChzX2h3bmQpKSAhPSAoSElNQykwKQorICAgIHsKKwlwSW1tU2V0Q29tcG9zaXRpb25Gb250KGhJbWMsIGxmKTsKKwlwSW1tUmVsZWFzZUNvbnRleHQoc19od25kLCBoSW1jKTsKKyAgICB9Cit9CisKKy8qCisgKiBOb3RpZnkgY3Vyc29yIHBvc2l0aW9uIHRvIElNLgorICovCisgICAgdm9pZAoraW1fc2V0X3Bvc2l0aW9uKGludCByb3csIGludCBjb2wpCit7CisgICAgSElNQyBoSW1jOworCisgICAgaWYgKHBJbW1HZXRDb250ZXh0ICYmIChoSW1jID0gcEltbUdldENvbnRleHQoc19od25kKSkgIT0gKEhJTUMpMCkKKyAgICB7CisJQ09NUE9TSVRJT05GT1JNCWNmczsKKworCWNmcy5kd1N0eWxlID0gQ0ZTX1BPSU5UOworCWNmcy5wdEN1cnJlbnRQb3MueCA9IEZJTExfWChjb2wpOworCWNmcy5wdEN1cnJlbnRQb3MueSA9IEZJTExfWShyb3cpOworCU1hcFdpbmRvd1BvaW50cyhzX3RleHRBcmVhLCBzX2h3bmQsICZjZnMucHRDdXJyZW50UG9zLCAxKTsKKwlwSW1tU2V0Q29tcG9zaXRpb25XaW5kb3coaEltYywgJmNmcyk7CisKKwlwSW1tUmVsZWFzZUNvbnRleHQoc19od25kLCBoSW1jKTsKKyAgICB9Cit9CisKKy8qCisgKiBTZXQgSU0gc3RhdHVzIG9uICgiYWN0aXZlIiBpcyBUUlVFKSBvciBvZmYgKCJhY3RpdmUiIGlzIEZBTFNFKS4KKyAqLworICAgIHZvaWQKK2ltX3NldF9hY3RpdmUoaW50IGFjdGl2ZSkKK3sKKyAgICBISU1DCWhJbWM7CisgICAgc3RhdGljIEhJTUMJaEltY09sZCA9IChISU1DKTA7CisKKyAgICBpZiAocEltbUdldENvbnRleHQpCSAgICAvKiBpZiBOVUxMIGltbTMyLmRsbCB3YXNuJ3QgbG9hZGVkICh5ZXQpICovCisgICAgeworCWlmIChwX2ltZGlzYWJsZSkKKwl7CisJICAgIGlmIChoSW1jT2xkID09IChISU1DKTApCisJICAgIHsKKwkJaEltY09sZCA9IHBJbW1HZXRDb250ZXh0KHNfaHduZCk7CisJCWlmIChoSW1jT2xkKQorCQkgICAgcEltbUFzc29jaWF0ZUNvbnRleHQoc19od25kLCAoSElNQykwKTsKKwkgICAgfQorCSAgICBhY3RpdmUgPSBGQUxTRTsKKwl9CisJZWxzZSBpZiAoaEltY09sZCAhPSAoSElNQykwKQorCXsKKwkgICAgcEltbUFzc29jaWF0ZUNvbnRleHQoc19od25kLCBoSW1jT2xkKTsKKwkgICAgaEltY09sZCA9IChISU1DKTA7CisJfQorCisJaEltYyA9IHBJbW1HZXRDb250ZXh0KHNfaHduZCk7CisJaWYgKGhJbWMpCisJeworCSAgICBwSW1tU2V0T3BlblN0YXR1cyhoSW1jLCBhY3RpdmUpOworCSAgICBwSW1tUmVsZWFzZUNvbnRleHQoc19od25kLCBoSW1jKTsKKwl9CisgICAgfQorfQorCisvKgorICogR2V0IElNIHN0YXR1cy4gIFdoZW4gSU0gaXMgb24sIHJldHVybiBub3QgMC4gIEVsc2UgcmV0dXJuIDAuCisgKi8KKyAgICBpbnQKK2ltX2dldF9zdGF0dXMoKQoreworICAgIGludAkJc3RhdHVzID0gMDsKKyAgICBISU1DCWhJbWM7CisKKyAgICBpZiAocEltbUdldENvbnRleHQgJiYgKGhJbWMgPSBwSW1tR2V0Q29udGV4dChzX2h3bmQpKSAhPSAoSElNQykwKQorICAgIHsKKwlzdGF0dXMgPSBwSW1tR2V0T3BlblN0YXR1cyhoSW1jKSA/IDEgOiAwOworCXBJbW1SZWxlYXNlQ29udGV4dChzX2h3bmQsIGhJbWMpOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCisjZW5kaWYgLyogRkVBVF9NQllURSAmJiBGRUFUX01CWVRFX0lNRSAqLworCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiAhZGVmaW5lZChGRUFUX01CWVRFX0lNRSkgJiYgZGVmaW5lZChHTE9CQUxfSU1FKQorLyogV2luMzIgd2l0aCBHTE9CQUwgSU1FICovCisKKy8qCisgKiBOb3RpZnkgY3Vyc29yIHBvc2l0aW9uIHRvIElNLgorICovCisgICAgdm9pZAoraW1fc2V0X3Bvc2l0aW9uKGludCByb3csIGludCBjb2wpCit7CisgICAgLyogV2luMzIgd2l0aCBHTE9CQUwgSU1FICovCisgICAgUE9JTlQgcDsKKworICAgIHAueCA9IEZJTExfWChjb2wpOworICAgIHAueSA9IEZJTExfWShyb3cpOworICAgIE1hcFdpbmRvd1BvaW50cyhzX3RleHRBcmVhLCBzX2h3bmQsICZwLCAxKTsKKyAgICBnbG9iYWxfaW1lX3NldF9wb3NpdGlvbigmcCk7Cit9CisKKy8qCisgKiBTZXQgSU0gc3RhdHVzIG9uICgiYWN0aXZlIiBpcyBUUlVFKSBvciBvZmYgKCJhY3RpdmUiIGlzIEZBTFNFKS4KKyAqLworICAgIHZvaWQKK2ltX3NldF9hY3RpdmUoaW50IGFjdGl2ZSkKK3sKKyAgICBnbG9iYWxfaW1lX3NldF9zdGF0dXMoYWN0aXZlKTsKK30KKworLyoKKyAqIEdldCBJTSBzdGF0dXMuICBXaGVuIElNIGlzIG9uLCByZXR1cm4gbm90IDAuICBFbHNlIHJldHVybiAwLgorICovCisgICAgaW50CitpbV9nZXRfc3RhdHVzKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2ltZV9nZXRfc3RhdHVzKCk7Cit9CisjZW5kaWYKKworCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKy8qCisgKiBXaGF0IGlzIHRoaXMgZm9yPyAgSW4gdGhlIGNhc2Ugd2hlcmUgeW91IGFyZSB1c2luZyBXaW45OCBvciBXaW4ySyBvciBsYXRlciwKKyAqIGFuZCB5b3UgYXJlIHVzaW5nIGEgSGVicmV3IGZvbnQgKG9yIEFyYWJpYyEpLCBXaW5kb3dzIGRvZXMgeW91IGEgZmF2b3IgYW5kCisgKiByZXZlcnNlcyB0aGUgc3RyaW5nIHNlbnQgdG8gdGhlIFRleHRPdXQuLi4gZmFtaWx5LiAgVGhpcyBzdWNrcywgYmVjYXVzZSB3ZQorICogZ28gdG8gYSBsb3Qgb2YgZWZmb3J0IHRvIGRvIHRoZSByaWdodCB0aGluZywgYW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhCisgKiB3YXkgdG8gdGVsbCBXaW5kYmxvd3Mgbm90IHRvIGRvIHRoaXMhCisgKgorICogVGhlIHNob3J0IG9mIGl0IGlzIHRoYXQgdGhpcyAnUmV2T3V0JyBvbmx5IGdldHMgY2FsbGVkIGlmIHlvdSBhcmUgcnVubmluZworICogb25lIG9mIHRoZSBuZXcsICJpbXByb3ZlZCIgTVMgT1NlcywgYW5kIG9ubHkgaWYgeW91IGFyZSBydW5uaW5nIGluCisgKiAncmlnaHRsZWZ0JyBtb2RlLiAgSXQgbWFrZXMgZGlzcGxheSB0YWtlICpzbGlnaHRseSogbG9uZ2VyLCBidXQgbm90CisgKiBub3RpY2VhYmx5IHNvLgorICovCisgICAgc3RhdGljIHZvaWQKK1Jldk91dCggSERDIHNfaGRjLAorCWludCBjb2wsCisJaW50IHJvdywKKwlVSU5UIGZvcHRpb25zLAorCUNPTlNUIFJFQ1QgKnBjbGlwcmVjdCwKKwlMUENUU1RSIHRleHQsCisJVUlOVCBsZW4sCisJQ09OU1QgSU5UICpwYWRkaW5nKQoreworICAgIGludAkJaXg7CisgICAgc3RhdGljIGludAlzcGVjaWFsID0gLTE7CisKKyAgICBpZiAoc3BlY2lhbCA9PSAtMSkKKyAgICB7CisJLyogQ2hlY2sgd2luZG93cyB2ZXJzaW9uOiBzcGVjaWFsIHRyZWF0bWVudCBpcyBuZWVkZWQgaWYgaXQgaXMgTlQgNSBvcgorCSAqIFdpbjk4IG9yIGhpZ2hlci4gKi8KKwlpZiAgKChvc192ZXJzaW9uLmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQKKwkJICAgICYmIG9zX3ZlcnNpb24uZHdNYWpvclZlcnNpb24gPj0gNSkKKwkJfHwgKG9zX3ZlcnNpb24uZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTCisJCSAgICAmJiAob3NfdmVyc2lvbi5kd01ham9yVmVyc2lvbiA+IDQKKwkJCXx8IChvc192ZXJzaW9uLmR3TWFqb3JWZXJzaW9uID09IDQKKwkJCSAgICAmJiBvc192ZXJzaW9uLmR3TWlub3JWZXJzaW9uID4gMCkpKSkKKwkgICAgc3BlY2lhbCA9IDE7CisJZWxzZQorCSAgICBzcGVjaWFsID0gMDsKKyAgICB9CisKKyAgICBpZiAoc3BlY2lhbCkKKwlmb3IgKGl4ID0gMDsgaXggPCAoaW50KWxlbjsgKytpeCkKKwkgICAgRXh0VGV4dE91dChzX2hkYywgY29sICsgVEVYVF9YKGl4KSwgcm93LCBmb3B0aW9ucywKKwkJCQkJICAgIHBjbGlwcmVjdCwgdGV4dCArIGl4LCAxLCBwYWRkaW5nKTsKKyAgICBlbHNlCisJRXh0VGV4dE91dChzX2hkYywgY29sLCByb3csIGZvcHRpb25zLCBwY2xpcHJlY3QsIHRleHQsIGxlbiwgcGFkZGluZyk7Cit9CisjZW5kaWYKKworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19zdHJpbmcoCisgICAgaW50CQlyb3csCisgICAgaW50CQljb2wsCisgICAgY2hhcl91CSp0ZXh0LAorICAgIGludAkJbGVuLAorICAgIGludAkJZmxhZ3MpCit7CisgICAgc3RhdGljIGludAkqcGFkZGluZyA9IE5VTEw7CisgICAgc3RhdGljIGludAlwYWRfc2l6ZSA9IDA7CisgICAgaW50CQlpOworICAgIGNvbnN0IFJFQ1QJKnBjbGlwcmVjdCA9IE5VTEw7CisgICAgVUlOVAlmb3B0aW9ucyA9IDA7CisjaWZkZWYgRkVBVF9NQllURQorICAgIHN0YXRpYyBXQ0hBUiAqdW5pY29kZWJ1ZiA9IE5VTEw7CisgICAgc3RhdGljIGludCAgICp1bmljb2RlcGR5ID0gTlVMTDsKKyAgICBpbnQJCXVuaWJ1ZmxlbiA9IDA7CisgICAgaW50CQluID0gMDsKKyNlbmRpZgorICAgIEhQRU4JaHBlbiwgb2xkX3BlbjsKKyAgICBpbnQJCXk7CisKKyNpZm5kZWYgTVNXSU4xNl9GQVNUVEVYVAorICAgIC8qCisgICAgICogSXRhbGljIGFuZCBib2xkIHRleHQgc2VlbXMgdG8gaGF2ZSBhbiBleHRyYSByb3cgb2YgcGl4ZWxzIGF0IHRoZSBib3R0b20KKyAgICAgKiAoYmVsb3cgd2hlcmUgdGhlIGJvdHRvbSBvZiB0aGUgY2hhcmFjdGVyIHNob3VsZCBiZSkuICBJZiB3ZSBkcmF3IHRoZQorICAgICAqIGNoYXJhY3RlcnMgd2l0aCBhIHNvbGlkIGJhY2tncm91bmQsIHRoZSB0b3Agcm93IG9mIHBpeGVscyBpbiB0aGUKKyAgICAgKiBjaGFyYWN0ZXIgYmVsb3cgd2lsbCBiZSBvdmVyd3JpdHRlbi4gIFdlIGNhbiBmaXggdGhpcyBieSBmaWxsaW5nIGluIHRoZQorICAgICAqIGJhY2tncm91bmQgb3Vyc2VsdmVzLCB0byB0aGUgY29ycmVjdCBjaGFyYWN0ZXIgcHJvcG9ydGlvbnMsIGFuZCB0aGVuCisgICAgICogd3JpdGluZyB0aGUgY2hhcmFjdGVyIGluIHRyYW5zcGFyZW50IG1vZGUuICBTdGlsbCBoYXZlIGEgcHJvYmxlbSB3aGVuCisgICAgICogdGhlIGNoYXJhY3RlciBpcyAiXyIsIHdoaWNoIGdldHMgd3JpdHRlbiBvbiB0byB0aGUgY2hhcmFjdGVyIGJlbG93LgorICAgICAqIE5ldyBmaXg6IHNldCBndWkuY2hhcl9hc2NlbnQgdG8gLTEuICBUaGlzIHNoaWZ0cyBhbGwgY2hhcmFjdGVycyB1cCBvbmUKKyAgICAgKiBwaXhlbCBpbiB0aGVpciBzbG90cywgd2hpY2ggZml4ZXMgdGhlIHByb2JsZW0gd2l0aCB0aGUgYm90dG9tIHJvdyBvZgorICAgICAqIHBpeGVscy4JV2Ugc3RpbGwgbmVlZCB0aGlzIGNvZGUgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHRvcCByb3cgb2YgcGl4ZWxzCisgICAgICogYmVjb21lcyBhIHByb2JsZW0uIC0gd2ViYi4KKyAgICAgKi8KKyAgICBzdGF0aWMgSEJSVVNICWhicl9jYWNoZVsyXSA9IHtOVUxMLCBOVUxMfTsKKyAgICBzdGF0aWMgZ3VpY29sb3JfVAlicnVzaF9jb2xvclsyXSA9IHtJTlZBTENPTE9SLCBJTlZBTENPTE9SfTsKKyAgICBzdGF0aWMgaW50CQlicnVzaF9scnUgPSAwOworICAgIEhCUlVTSAkJaGJyOworICAgIFJFQ1QJCXJjOworCisgICAgaWYgKCEoZmxhZ3MgJiBEUkFXX1RSQU5TUCkpCisgICAgeworCS8qCisJICogQ2xlYXIgYmFja2dyb3VuZCBmaXJzdC4KKwkgKiBOb3RlOiBGaWxsUmVjdCgpIGV4Y2x1ZGVzIHJpZ2h0IGFuZCBib3R0b20gb2YgcmVjdGFuZ2xlLgorCSAqLworCXJjLmxlZnQgPSBGSUxMX1goY29sKTsKKwlyYy50b3AgPSBGSUxMX1kocm93KTsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIGludCBjZWxsX2xlbiA9IDA7CisKKwkgICAgLyogQ29tcHV0ZSB0aGUgbGVuZ3RoIGluIGRpc3BsYXkgY2VsbHMuICovCisJICAgIGZvciAobiA9IDA7IG4gPCBsZW47IG4gKz0gTUJfQllURTJMRU4odGV4dFtuXSkpCisJCWNlbGxfbGVuICs9ICgqbWJfcHRyMmNlbGxzKSh0ZXh0ICsgbik7CisJICAgIHJjLnJpZ2h0ID0gRklMTF9YKGNvbCArIGNlbGxfbGVuKTsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgIHJjLnJpZ2h0ID0gRklMTF9YKGNvbCArIGxlbik7CisJcmMuYm90dG9tID0gRklMTF9ZKHJvdyArIDEpOworCisJLyogQ2FjaGUgdGhlIGNyZWF0ZWQgYnJ1c2gsIHRoYXQgc2F2ZXMgYSBsb3Qgb2YgdGltZS4gIFdlIG5lZWQgdHdvOgorCSAqIG9uZSBmb3IgY3Vyc29yIGJhY2tncm91bmQgYW5kIG9uZSBmb3IgdGhlIG5vcm1hbCBiYWNrZ3JvdW5kLiAqLworCWlmIChndWkuY3VyckJnQ29sb3IgPT0gYnJ1c2hfY29sb3JbMF0pCisJeworCSAgICBoYnIgPSBoYnJfY2FjaGVbMF07CisJICAgIGJydXNoX2xydSA9IDE7CisJfQorCWVsc2UgaWYgKGd1aS5jdXJyQmdDb2xvciA9PSBicnVzaF9jb2xvclsxXSkKKwl7CisJICAgIGhiciA9IGhicl9jYWNoZVsxXTsKKwkgICAgYnJ1c2hfbHJ1ID0gMDsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKGhicl9jYWNoZVticnVzaF9scnVdICE9IE5VTEwpCisJCURlbGV0ZUJydXNoKGhicl9jYWNoZVticnVzaF9scnVdKTsKKwkgICAgaGJyX2NhY2hlW2JydXNoX2xydV0gPSBDcmVhdGVTb2xpZEJydXNoKGd1aS5jdXJyQmdDb2xvcik7CisJICAgIGJydXNoX2NvbG9yW2JydXNoX2xydV0gPSBndWkuY3VyckJnQ29sb3I7CisJICAgIGhiciA9IGhicl9jYWNoZVticnVzaF9scnVdOworCSAgICBicnVzaF9scnUgPSAhYnJ1c2hfbHJ1OworCX0KKwlGaWxsUmVjdChzX2hkYywgJnJjLCBoYnIpOworCisJU2V0QmtNb2RlKHNfaGRjLCBUUkFOU1BBUkVOVCk7CisKKwkvKgorCSAqIFdoZW4gZHJhd2luZyBibG9jayBjdXJzb3IsIHByZXZlbnQgaW52ZXJ0ZWQgY2hhcmFjdGVyIHNwaWxsaW5nCisJICogb3ZlciBjaGFyYWN0ZXIgY2VsbCAoY2FuIGhhcHBlbiB3aXRoIGJvbGQvaXRhbGljKQorCSAqLworCWlmIChmbGFncyAmIERSQVdfQ1VSU09SKQorCXsKKwkgICAgcGNsaXByZWN0ID0gJnJjOworCSAgICBmb3B0aW9ucyA9IEVUT19DTElQUEVEOworCX0KKyAgICB9CisjZWxzZQorICAgIC8qCisgICAgICogVGhlIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIHdyaXRlIHRoZSBjaGFyYWN0ZXJzIGluIG9wYXF1ZSBtb2RlLCBidXQKKyAgICAgKiB3aGVuIHRoZSB0ZXh0IGlzIG5vdCBleGFjdGx5IHRoZSBzYW1lIHByb3BvcnRpb25zIGFzIG5vcm1hbCB0ZXh0LCB0b28KKyAgICAgKiBiaWcgb3IgdG9vIGxpdHRsZSBhIHJlY3RhbmdsZSBnZXRzIGRyYXduIGZvciB0aGUgYmFja2dyb3VuZC4KKyAgICAgKi8KKyAgICBTZXRCa01vZGUoc19oZGMsIE9QQVFVRSk7CisgICAgU2V0QmtDb2xvcihzX2hkYywgZ3VpLmN1cnJCZ0NvbG9yKTsKKyNlbmRpZgorICAgIFNldFRleHRDb2xvcihzX2hkYywgZ3VpLmN1cnJGZ0NvbG9yKTsKKyAgICBTZWxlY3RGb250KHNfaGRjLCBndWkuY3VyckZvbnQpOworCisgICAgaWYgKHBhZF9zaXplICE9IENvbHVtbnMgfHwgcGFkZGluZyA9PSBOVUxMIHx8IHBhZGRpbmdbMF0gIT0gZ3VpLmNoYXJfd2lkdGgpCisgICAgeworCXZpbV9mcmVlKHBhZGRpbmcpOworCXBhZF9zaXplID0gQ29sdW1uczsKKworCXBhZGRpbmcgPSAoaW50ICopYWxsb2MocGFkX3NpemUgKiBzaXplb2YoaW50KSk7CisJaWYgKHBhZGRpbmcgIT0gTlVMTCkKKwkgICAgZm9yIChpID0gMDsgaSA8IHBhZF9zaXplOyBpKyspCisJCXBhZGRpbmdbaV0gPSBndWkuY2hhcl93aWR0aDsKKyAgICB9CisKKyAgICAvKiBPbiBOVCwgdGVsbCB0aGUgZm9udCByZW5kZXJlciBub3QgdG8gImhlbHAiIHVzIHdpdGggSGVicmV3IGFuZCBBcmFiaWMKKyAgICAgKiB0ZXh0LiAgVGhpcyBkb2Vzbid0IHdvcmsgaW4gOXgsIHNvIHdlIGhhdmUgdG8gZGVhbCB3aXRoIGl0IG1hbnVhbGx5IG9uCisgICAgICogdGhvc2Ugc3lzdGVtcy4gKi8KKyAgICBpZiAob3NfdmVyc2lvbi5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UKQorCWZvcHRpb25zIHw9IEVUT19JR05PUkVMQU5HVUFHRTsKKworICAgIC8qCisgICAgICogV2UgaGF2ZSB0byBwcm92aWRlIHRoZSBwYWRkaW5nIGFyZ3VtZW50IGJlY2F1c2UgaXRhbGljIGFuZCBib2xkIHZlcnNpb25zCisgICAgICogb2YgZml4ZWQtd2lkdGggZm9udHMgYXJlIG9mdGVuIG9uZSBwaXhlbCBvciBzbyB3aWRlciB0aGFuIHRoZWlyIG5vcm1hbAorICAgICAqIHZlcnNpb25zLgorICAgICAqIE5vIGNoZWNrIGZvciBEUkFXX0JPTEQsIFdpbmRvd3Mgd2lsbCBoYXZlIGRvbmUgaXQgYWxyZWFkeS4KKyAgICAgKi8KKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IFVURi04IGNoYXJhY3RlcnMuICBJZiBub3QsIHVzZSBub3JtYWwgdGV4dAorICAgICAqIG91dHB1dCB0byBzcGVlZCB1cCBvdXRwdXQuICovCisgICAgaWYgKGVuY191dGY4KQorCWZvciAobiA9IDA7IG4gPCBsZW47ICsrbikKKwkgICAgaWYgKHRleHRbbl0gPj0gMHg4MCkKKwkJYnJlYWs7CisKKyAgICAvKiBDaGVjayBpZiB0aGUgVW5pY29kZSBidWZmZXIgZXhpc3RzIGFuZCBpcyBiaWcgZW5vdWdoLiAgQ3JlYXRlIGl0CisgICAgICogd2l0aCB0aGUgc2FtZSBsZW5ndCBhcyB0aGUgbXVsdGktYnl0ZSBzdHJpbmcsIHRoZSBudW1iZXIgb2Ygd2lkZQorICAgICAqIGNoYXJhY3RlcnMgaXMgYWx3YXlzIGVxdWFsIG9yIHNtYWxsZXIuICovCisgICAgaWYgKChlbmNfdXRmOCB8fCAoZW5jX2NvZGVwYWdlID4gMCAmJiAoaW50KUdldEFDUCgpICE9IGVuY19jb2RlcGFnZSkpCisJICAgICYmICh1bmljb2RlYnVmID09IE5VTEwgfHwgbGVuID4gdW5pYnVmbGVuKSkKKyAgICB7CisJdmltX2ZyZWUodW5pY29kZWJ1Zik7CisJdW5pY29kZWJ1ZiA9IChXQ0hBUiAqKWFsbG9jKGxlbiAqIHNpemVvZihXQ0hBUikpOworCisJdmltX2ZyZWUodW5pY29kZXBkeSk7CisJdW5pY29kZXBkeSA9IChpbnQgKilhbGxvYyhsZW4gKiBzaXplb2YoaW50KSk7CisKKwl1bmlidWZsZW4gPSBsZW47CisgICAgfQorCisgICAgaWYgKGVuY191dGY4ICYmIG4gPCBsZW4gJiYgdW5pY29kZWJ1ZiAhPSBOVUxMKQorICAgIHsKKwkvKiBPdXRwdXQgVVRGLTggY2hhcmFjdGVycy4gIENhbGxlciBoYXMgYWxyZWFkeSBzZXBhcmF0ZWQKKwkgKiBjb21wb3NpbmcgY2hhcmFjdGVycy4gKi8KKwlpbnQJCWkgPSAwOworCWludAkJY2xlbjsJLyogc3RyaW5nIGxlbmd0aCB1cCB0byBjb21wb3NpbmcgY2hhciAqLworCWludAkJY2VsbHM7CS8qIGNlbGwgd2lkdGggb2Ygc3RyaW5nIHVwIHRvIGNvbXBvc2luZyBjaGFyICovCisJaW50CQljdzsJLyogd2lkdGggb2YgY3VycmVudCBjZWxsICovCisKKwljZWxscyA9IDA7CisJZm9yIChjbGVuID0gMDsgaSA8IGxlbjsgKQorCXsKKwkgICAgdW5pY29kZWJ1ZltjbGVuXSA9IHV0Zl9wdHIyY2hhcih0ZXh0ICsgaSk7CisJICAgIGN3ID0gdXRmX2NoYXIyY2VsbHModW5pY29kZWJ1ZltjbGVuXSk7CisJICAgIGlmIChjdyA+IDIpCQkvKiBkb24ndCB1c2UgNCBmb3IgdW5wcmludGFibGUgY2hhciAqLworCQljdyA9IDE7CisJICAgIGlmICh1bmljb2RlcGR5ICE9IE5VTEwpCisJICAgIHsKKwkJLyogVXNlIHVuaWNvZGVwZHkgdG8gbWFrZSBjaGFyYWN0ZXJzIGZpdCBhcyB3ZSBleHBlY3QsIGV2ZW4KKwkJICogd2hlbiB0aGUgZm9udCB1c2VzIGRpZmZlcmVudCB3aWR0aHMgKGUuZy4sIGJvbGQgY2hhcmFjdGVyCisJCSAqIGlzIHdpZGVyKS4gICovCisJCXVuaWNvZGVwZHlbY2xlbl0gPSBjdyAqIGd1aS5jaGFyX3dpZHRoOworCSAgICB9CisJICAgIGNlbGxzICs9IGN3OworCSAgICBpICs9IHV0ZmNfcHRyMmxlbl9jaGVja19sZW4odGV4dCArIGksIGxlbiAtIGkpOworCSAgICArK2NsZW47CisJfQorCUV4dFRleHRPdXRXKHNfaGRjLCBURVhUX1goY29sKSwgVEVYVF9ZKHJvdyksCisJCQkgICAgIGZvcHRpb25zLCBwY2xpcHJlY3QsIHVuaWNvZGVidWYsIGNsZW4sIHVuaWNvZGVwZHkpOworCWxlbiA9IGNlbGxzOwkvKiB1c2VkIGZvciB1bmRlcmxpbmluZyAqLworICAgIH0KKyAgICBlbHNlIGlmIChlbmNfY29kZXBhZ2UgPiAwICYmIChpbnQpR2V0QUNQKCkgIT0gZW5jX2NvZGVwYWdlKQorICAgIHsKKwkvKiBJZiB3ZSB3YW50IHRvIGRpc3BsYXkgY29kZXBhZ2UgZGF0YSwgYW5kIHRoZSBjdXJyZW50IENQIGlzIG5vdCB0aGUKKwkgKiBBTlNJIG9uZSwgd2UgbmVlZCB0byBnbyB2aWEgVW5pY29kZS4gKi8KKwlpZiAodW5pY29kZWJ1ZiAhPSBOVUxMKQorCXsKKwkgICAgbGVuID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihlbmNfY29kZXBhZ2UsCisJCQlNQl9QUkVDT01QT1NFRCwKKwkJCShjaGFyICopdGV4dCwgbGVuLAorCQkJKExQV1NUUil1bmljb2RlYnVmLCB1bmlidWZsZW4pOworCSAgICBpZiAobGVuICE9IDApCisJCUV4dFRleHRPdXRXKHNfaGRjLCBURVhUX1goY29sKSwgVEVYVF9ZKHJvdyksCisJCQkgICAgICBmb3B0aW9ucywgcGNsaXByZWN0LCB1bmljb2RlYnVmLCBsZW4sIE5VTEwpOworCX0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJLyogSWYgd2UgY2FuJ3QgdXNlIEVUT19JR05PUkVMQU5HVUFHRSwgd2UgY2FuJ3QgdGVsbCBXaW5kb3dzIG5vdCB0bworCSAqIG1lc3MgdXAgUkwgdGV4dCwgc28gd2UgaGF2ZSB0byBkcmF3IGl0IGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIuCisJICogT25seSBkbyB0aGlzIGlmIFJMIGlzIG9uLCBzaW5jZSBpdCdzIHNsb3cuICovCisJaWYgKGN1cndpbi0+d19wX3JsICYmICEoZm9wdGlvbnMgJiBFVE9fSUdOT1JFTEFOR1VBR0UpKQorCSAgICBSZXZPdXQoc19oZGMsIFRFWFRfWChjb2wpLCBURVhUX1kocm93KSwKKwkJCSBmb3B0aW9ucywgcGNsaXByZWN0LCAoY2hhciAqKXRleHQsIGxlbiwgcGFkZGluZyk7CisJZWxzZQorI2VuZGlmCisJICAgIEV4dFRleHRPdXQoc19oZGMsIFRFWFRfWChjb2wpLCBURVhUX1kocm93KSwKKwkJCSBmb3B0aW9ucywgcGNsaXByZWN0LCAoY2hhciAqKXRleHQsIGxlbiwgcGFkZGluZyk7CisgICAgfQorCisgICAgaWYgKGZsYWdzICYgRFJBV19VTkRFUkwpCisgICAgeworCWhwZW4gPSBDcmVhdGVQZW4oUFNfU09MSUQsIDEsIGd1aS5jdXJyRmdDb2xvcik7CisJb2xkX3BlbiA9IFNlbGVjdE9iamVjdChzX2hkYywgaHBlbik7CisJLyogV2hlbiBwX2xpbmVzcGFjZSBpcyAwLCBvdmVyd3JpdGUgdGhlIGJvdHRvbSByb3cgb2YgcGl4ZWxzLgorCSAqIE90aGVyd2lzZSBwdXQgdGhlIGxpbmUganVzdCBiZWxvdyB0aGUgY2hhcmFjdGVyLiAqLworCXkgPSBGSUxMX1kocm93ICsgMSkgLSAxOworI2lmbmRlZiBNU1dJTjE2X0ZBU1RURVhUCisJaWYgKHBfbGluZXNwYWNlID4gMSkKKwkgICAgeSAtPSBwX2xpbmVzcGFjZSAtIDE7CisjZW5kaWYKKwlNb3ZlVG9FeChzX2hkYywgRklMTF9YKGNvbCksIHksIE5VTEwpOworCS8qIE5vdGU6IExpbmVUbygpIGV4Y2x1ZGVzIHRoZSBsYXN0IHBpeGVsIGluIHRoZSBsaW5lLiAqLworCUxpbmVUbyhzX2hkYywgRklMTF9YKGNvbCArIGxlbiksIHkpOworCURlbGV0ZU9iamVjdChTZWxlY3RPYmplY3Qoc19oZGMsIG9sZF9wZW4pKTsKKyAgICB9Cit9CisKKworLyoKKyAqIE91dHB1dCByb3V0aW5lcy4KKyAqLworCisvKiBGbHVzaCBhbnkgb3V0cHV0IHRvIHRoZSBzY3JlZW4gKi8KKyAgICB2b2lkCitndWlfbWNoX2ZsdXNoKHZvaWQpCit7CisjICAgaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCisgICAgLyoKKyAgICAgKiBUaGUgR2RpRmx1c2ggZGVjbGFyYXRpb24gKGluIEJvcmxhbmQgQyA1LjAxIDx3aW5nZGkuaD4pIGlzIG5vdCBhCisgICAgICogcHJvdG90eXBlIGRlY2xhcmF0aW9uLgorICAgICAqIFRoZSBjb21waWxlciBjb21wbGFpbnMgaWYgX19zdGRjYWxsIGlzIG5vdCB1c2VkIGluIGJvdGggZGVjbGFyYXRpb25zLgorICAgICAqLworICAgIEJPT0wgIF9fc3RkY2FsbCBHZGlGbHVzaCh2b2lkKTsKKyMgICBlbmRpZgorCisgICAgR2RpRmx1c2goKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitjbGVhcl9yZWN0KFJFQ1QgKnJjcCkKK3sKKyAgICBIQlJVU0ggIGhicjsKKworICAgIGhiciA9IENyZWF0ZVNvbGlkQnJ1c2goZ3VpLmJhY2tfcGl4ZWwpOworICAgIEZpbGxSZWN0KHNfaGRjLCByY3AsIGhicik7CisgICAgRGVsZXRlQnJ1c2goaGJyKTsKK30KKworCisjaWYgZGVmaW5lZChGRUFUX01FTlUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQWRkIGEgc3ViIG1lbnUgdG8gdGhlIG1lbnUgYmFyLgorICovCisgICAgdm9pZAorZ3VpX21jaF9hZGRfbWVudSgKKyAgICB2aW1tZW51X1QJKm1lbnUsCisgICAgaW50CQlwb3MpCit7CisgICAgdmltbWVudV9UCSpwYXJlbnQgPSBtZW51LT5wYXJlbnQ7CisKKyAgICBtZW51LT5zdWJtZW51X2lkID0gQ3JlYXRlUG9wdXBNZW51KCk7CisgICAgbWVudS0+aWQgPSBzX21lbnVfaWQrKzsKKworICAgIGlmIChtZW51X2lzX21lbnViYXIobWVudS0+bmFtZSkpCisgICAgeworCWlmIChpc193aW5udF8zKCkpCisJeworCSAgICBJbnNlcnRNZW51KChwYXJlbnQgPT0gTlVMTCkgPyBzX21lbnVCYXIgOiBwYXJlbnQtPnN1Ym1lbnVfaWQsCisJCSAgICAoVUlOVClwb3MsIE1GX1BPUFVQIHwgTUZfU1RSSU5HIHwgTUZfQllQT1NJVElPTiwKKwkJICAgIChVSU5UKW1lbnUtPnN1Ym1lbnVfaWQsIChMUENUU1RSKSBtZW51LT5uYW1lKTsKKwl9CisJZWxzZQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIFdDSEFSCSp3biA9IE5VTEw7CisJICAgIGludAkJbjsKKworCSAgICBpZiAoZW5jX2NvZGVwYWdlID49IDAgJiYgKGludClHZXRBQ1AoKSAhPSBlbmNfY29kZXBhZ2UpCisJICAgIHsKKwkJLyogJ2VuY29kaW5nJyBkaWZmZXJzIGZyb20gYWN0aXZlIGNvZGVwYWdlOiBjb252ZXJ0IG1lbnUgbmFtZQorCQkgKiBhbmQgdXNlIHdpZGUgZnVuY3Rpb24gKi8KKwkJd24gPSBlbmNfdG9fdWNzMihtZW51LT5uYW1lLCBOVUxMKTsKKwkJaWYgKHduICE9IE5VTEwpCisJCXsKKwkJICAgIE1FTlVJVEVNSU5GT1cJaW5mb3c7CisKKwkJICAgIGluZm93LmNiU2l6ZSA9IHNpemVvZihpbmZvdyk7CisJCSAgICBpbmZvdy5mTWFzayA9IE1JSU1fREFUQSB8IE1JSU1fVFlQRSB8IE1JSU1fSUQKKwkJCQkJCQkgICAgICAgfCBNSUlNX1NVQk1FTlU7CisJCSAgICBpbmZvdy5kd0l0ZW1EYXRhID0gKERXT1JEKW1lbnU7CisJCSAgICBpbmZvdy53SUQgPSBtZW51LT5pZDsKKwkJICAgIGluZm93LmZUeXBlID0gTUZUX1NUUklORzsKKwkJICAgIGluZm93LmR3VHlwZURhdGEgPSB3bjsKKwkJICAgIGluZm93LmNjaCA9IHdjc2xlbih3bik7CisJCSAgICBpbmZvdy5oU3ViTWVudSA9IG1lbnUtPnN1Ym1lbnVfaWQ7CisJCSAgICBuID0gSW5zZXJ0TWVudUl0ZW1XKChwYXJlbnQgPT0gTlVMTCkKKwkJCQkJICAgID8gc19tZW51QmFyIDogcGFyZW50LT5zdWJtZW51X2lkLAorCQkJCQkgICAgKFVJTlQpcG9zLCBUUlVFLCAmaW5mb3cpOworCQkgICAgdmltX2ZyZWUod24pOworCQkgICAgaWYgKG4gPT0gMCAmJiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKKwkJCS8qIEZhaWxlZCwgdHJ5IHVzaW5nIG5vbi13aWRlIGZ1bmN0aW9uLiAqLworCQkJd24gPSBOVUxMOworCQl9CisJICAgIH0KKworCSAgICBpZiAod24gPT0gTlVMTCkKKyNlbmRpZgorCSAgICB7CisJCU1FTlVJVEVNSU5GTwlpbmZvOworCisJCWluZm8uY2JTaXplID0gc2l6ZW9mKGluZm8pOworCQlpbmZvLmZNYXNrID0gTUlJTV9EQVRBIHwgTUlJTV9UWVBFIHwgTUlJTV9JRCB8IE1JSU1fU1VCTUVOVTsKKwkJaW5mby5kd0l0ZW1EYXRhID0gKERXT1JEKW1lbnU7CisJCWluZm8ud0lEID0gbWVudS0+aWQ7CisJCWluZm8uZlR5cGUgPSBNRlRfU1RSSU5HOworCQlpbmZvLmR3VHlwZURhdGEgPSAoTFBUU1RSKW1lbnUtPm5hbWU7CisJCWluZm8uY2NoID0gKFVJTlQpU1RSTEVOKG1lbnUtPm5hbWUpOworCQlpbmZvLmhTdWJNZW51ID0gbWVudS0+c3VibWVudV9pZDsKKwkJSW5zZXJ0TWVudUl0ZW0oKHBhcmVudCA9PSBOVUxMKQorCQkJCQk/IHNfbWVudUJhciA6IHBhcmVudC0+c3VibWVudV9pZCwKKwkJCQkJKFVJTlQpcG9zLCBUUlVFLCAmaW5mbyk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogRml4IHdpbmRvdyBzaXplIGlmIG1lbnUgbWF5IGhhdmUgd3JhcHBlZCAqLworICAgIGlmIChwYXJlbnQgPT0gTlVMTCkKKwlndWlfbXN3aW5fZ2V0X21lbnVfaGVpZ2h0KCFndWkuc3RhcnRpbmcpOworI2lmZGVmIEZFQVRfVEVBUk9GRgorICAgIGVsc2UgaWYgKElzV2luZG93KHBhcmVudC0+dGVhcm9mZl9oYW5kbGUpKQorCXJlYnVpbGRfdGVhcm9mZihwYXJlbnQpOworI2VuZGlmCit9CisKKyAgICB2b2lkCitndWlfbWNoX3Nob3dfcG9wdXBtZW51KHZpbW1lbnVfVCAqbWVudSkKK3sKKyAgICBQT0lOVCBtcDsKKworICAgICh2b2lkKUdldEN1cnNvclBvcygoTFBQT0lOVCkmbXApOworICAgIGd1aV9tY2hfc2hvd19wb3B1cG1lbnVfYXQobWVudSwgKGludCltcC54LCAoaW50KW1wLnkpOworfQorCisgICAgdm9pZAorZ3VpX21ha2VfcG9wdXAoY2hhcl91ICpwYXRoX25hbWUpCit7CisgICAgdmltbWVudV9UCSptZW51ID0gZ3VpX2ZpbmRfbWVudShwYXRoX25hbWUpOworCisgICAgaWYgKG1lbnUgIT0gTlVMTCkKKyAgICB7CisJUE9JTlQJcDsKKworCS8qIEZpbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IGN1cnNvciAqLworCUdldERDT3JnRXgoc19oZGMsICZwKTsKKwlpZiAoY3Vyd2luICE9IE5VTEwpCisJeworCSAgICBwLnggKz0gVEVYVF9YKFdfV0lOQ09MKGN1cndpbikgKyBjdXJ3aW4tPndfd2NvbCArIDEpOworCSAgICBwLnkgKz0gVEVYVF9ZKFdfV0lOUk9XKGN1cndpbikgKyBjdXJ3aW4tPndfd3JvdyArIDEpOworCX0KKwltc2dfc2Nyb2xsID0gRkFMU0U7CisJZ3VpX21jaF9zaG93X3BvcHVwbWVudV9hdChtZW51LCAoaW50KXAueCwgKGludClwLnkpOworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9URUFST0ZGKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEdpdmVuIGEgbWVudSBkZXNjcmlwdG9yLCBlLmcuICJGaWxlLk5ldyIsIGZpbmQgaXQgaW4gdGhlIG1lbnUgaGllcmFyY2h5IGFuZAorICogY3JlYXRlIGl0IGFzIGEgcHNldWRvLSJ0ZWFyb2ZmIG1lbnUiLgorICovCisgICAgdm9pZAorZ3VpX21ha2VfdGVhcm9mZihjaGFyX3UgKnBhdGhfbmFtZSkKK3sKKyAgICB2aW1tZW51X1QJKm1lbnUgPSBndWlfZmluZF9tZW51KHBhdGhfbmFtZSk7CisKKyAgICAvKiBGb3VuZCB0aGUgbWVudSwgc28gdGVhciBpdCBvZmYuICovCisgICAgaWYgKG1lbnUgIT0gTlVMTCkKKwlndWlfbWNoX3RlYXJvZmYobWVudS0+ZG5hbWUsIG1lbnUsIDB4ZmZmZkwsIDB4ZmZmZkwpOworfQorI2VuZGlmCisKKy8qCisgKiBBZGQgYSBtZW51IGl0ZW0gdG8gYSBtZW51CisgKi8KKyAgICB2b2lkCitndWlfbWNoX2FkZF9tZW51X2l0ZW0oCisgICAgdmltbWVudV9UCSptZW51LAorICAgIGludAkJaWR4KQoreworICAgIHZpbW1lbnVfVAkqcGFyZW50ID0gbWVudS0+cGFyZW50OworCisgICAgbWVudS0+aWQgPSBzX21lbnVfaWQrKzsKKyAgICBtZW51LT5zdWJtZW51X2lkID0gTlVMTDsKKworI2lmZGVmIEZFQVRfVEVBUk9GRgorICAgIGlmIChTVFJOQ01QKG1lbnUtPm5hbWUsIFRFQVJfU1RSSU5HLCBURUFSX0xFTikgPT0gMCkKKyAgICB7CisJSW5zZXJ0TWVudShwYXJlbnQtPnN1Ym1lbnVfaWQsIChVSU5UKWlkeCwgTUZfQklUTUFQfE1GX0JZUE9TSVRJT04sCisJCShVSU5UKW1lbnUtPmlkLCAoTFBDVFNUUikgc19odGVhcmJpdG1hcCk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIEZFQVRfVE9PTEJBUgorICAgIGlmIChtZW51X2lzX3Rvb2xiYXIocGFyZW50LT5uYW1lKSkKKyAgICB7CisJVEJCVVRUT04gbmV3dGI7CisKKwl2aW1fbWVtc2V0KCZuZXd0YiwgMCwgc2l6ZW9mKG5ld3RiKSk7CisJaWYgKG1lbnVfaXNfc2VwYXJhdG9yKG1lbnUtPm5hbWUpKQorCXsKKwkgICAgbmV3dGIuaUJpdG1hcCA9IDA7CisJICAgIG5ld3RiLmZzU3R5bGUgPSBUQlNUWUxFX1NFUDsKKwl9CisJZWxzZQorCXsKKwkgICAgbmV3dGIuaUJpdG1hcCA9IGdldF90b29sYmFyX2JpdG1hcChtZW51KTsKKwkgICAgbmV3dGIuZnNTdHlsZSA9IFRCU1RZTEVfQlVUVE9OOworCX0KKwluZXd0Yi5pZENvbW1hbmQgPSBtZW51LT5pZDsKKwluZXd0Yi5mc1N0YXRlID0gVEJTVEFURV9FTkFCTEVEOworCW5ld3RiLmlTdHJpbmcgPSAwOworCVNlbmRNZXNzYWdlKHNfdG9vbGJhcmh3bmQsIFRCX0lOU0VSVEJVVFRPTiwgKFdQQVJBTSlpZHgsCisJCQkJCQkJICAgICAoTFBBUkFNKSZuZXd0Yik7CisJbWVudS0+c3VibWVudV9pZCA9IChITUVOVSktMTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwlXQ0hBUgkqd24gPSBOVUxMOworCWludAluOworCisJaWYgKGVuY19jb2RlcGFnZSA+PSAwICYmIChpbnQpR2V0QUNQKCkgIT0gZW5jX2NvZGVwYWdlKQorCXsKKwkgICAgLyogJ2VuY29kaW5nJyBkaWZmZXJzIGZyb20gYWN0aXZlIGNvZGVwYWdlOiBjb252ZXJ0IG1lbnUgaXRlbSBuYW1lCisJICAgICAqIGFuZCB1c2Ugd2lkZSBmdW5jdGlvbiAqLworCSAgICB3biA9IGVuY190b191Y3MyKG1lbnUtPm5hbWUsIE5VTEwpOworCSAgICBpZiAod24gIT0gTlVMTCkKKwkgICAgeworCQluID0gSW5zZXJ0TWVudVcocGFyZW50LT5zdWJtZW51X2lkLCAoVUlOVClpZHgsCisJCQkobWVudV9pc19zZXBhcmF0b3IobWVudS0+bmFtZSkKKwkJCQkgPyBNRl9TRVBBUkFUT1IgOiBNRl9TVFJJTkcpIHwgTUZfQllQT1NJVElPTiwKKwkJCShVSU5UKW1lbnUtPmlkLCB3bik7CisJCXZpbV9mcmVlKHduKTsKKwkJaWYgKG4gPT0gMCAmJiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKKwkJICAgIC8qIEZhaWxlZCwgdHJ5IHVzaW5nIG5vbi13aWRlIGZ1bmN0aW9uLiAqLworCQkgICAgd24gPSBOVUxMOworCSAgICB9CisJfQorCWlmICh3biA9PSBOVUxMKQorI2VuZGlmCisJICAgIEluc2VydE1lbnUocGFyZW50LT5zdWJtZW51X2lkLCAoVUlOVClpZHgsCisJCShtZW51X2lzX3NlcGFyYXRvcihtZW51LT5uYW1lKSA/IE1GX1NFUEFSQVRPUiA6IE1GX1NUUklORykKKwkJCQkJCQkgICAgICB8IE1GX0JZUE9TSVRJT04sCisJCShVSU5UKW1lbnUtPmlkLCAoTFBDVFNUUiltZW51LT5uYW1lKTsKKyNpZmRlZiBGRUFUX1RFQVJPRkYKKwlpZiAoSXNXaW5kb3cocGFyZW50LT50ZWFyb2ZmX2hhbmRsZSkpCisJICAgIHJlYnVpbGRfdGVhcm9mZihwYXJlbnQpOworI2VuZGlmCisgICAgfQorfQorCisvKgorICogRGVzdHJveSB0aGUgbWFjaGluZSBzcGVjaWZpYyBtZW51IHdpZGdldC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZGVzdHJveV9tZW51KHZpbW1lbnVfVCAqbWVudSkKK3sKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICAvKgorICAgICAqIGlzIHRoaXMgYSB0b29sYmFyIGJ1dHRvbj8KKyAgICAgKi8KKyAgICBpZiAobWVudS0+c3VibWVudV9pZCA9PSAoSE1FTlUpLTEpCisgICAgeworCWludCBpQnV0dG9uOworCisJaUJ1dHRvbiA9IChpbnQpU2VuZE1lc3NhZ2Uoc190b29sYmFyaHduZCwgVEJfQ09NTUFORFRPSU5ERVgsCisJCQkJCQkJIChXUEFSQU0pbWVudS0+aWQsIDApOworCVNlbmRNZXNzYWdlKHNfdG9vbGJhcmh3bmQsIFRCX0RFTEVURUJVVFRPTiwgKFdQQVJBTSlpQnV0dG9uLCAwKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCWlmIChtZW51LT5wYXJlbnQgIT0gTlVMTAorCQkmJiBtZW51X2lzX3BvcHVwKG1lbnUtPnBhcmVudC0+ZG5hbWUpCisJCSYmIG1lbnUtPnBhcmVudC0+c3VibWVudV9pZCAhPSBOVUxMKQorCSAgICBSZW1vdmVNZW51KG1lbnUtPnBhcmVudC0+c3VibWVudV9pZCwgbWVudS0+aWQsIE1GX0JZQ09NTUFORCk7CisJZWxzZQorCSAgICBSZW1vdmVNZW51KHNfbWVudUJhciwgbWVudS0+aWQsIE1GX0JZQ09NTUFORCk7CisJaWYgKG1lbnUtPnN1Ym1lbnVfaWQgIT0gTlVMTCkKKwkgICAgRGVzdHJveU1lbnUobWVudS0+c3VibWVudV9pZCk7CisjaWZkZWYgRkVBVF9URUFST0ZGCisJaWYgKElzV2luZG93KG1lbnUtPnRlYXJvZmZfaGFuZGxlKSkKKwkgICAgRGVzdHJveVdpbmRvdyhtZW51LT50ZWFyb2ZmX2hhbmRsZSk7CisJaWYgKG1lbnUtPnBhcmVudCAhPSBOVUxMCisJCSYmIG1lbnUtPnBhcmVudC0+Y2hpbGRyZW4gIT0gTlVMTAorCQkmJiBJc1dpbmRvdyhtZW51LT5wYXJlbnQtPnRlYXJvZmZfaGFuZGxlKSkKKwl7CisJICAgIC8qIFRoaXMgbWVudSBtdXN0IG5vdCBzaG93IHVwIHdoZW4gcmVidWlsZGluZyB0aGUgdGVhcm9mZiB3aW5kb3cuICovCisJICAgIG1lbnUtPm1vZGVzID0gMDsKKwkgICAgcmVidWlsZF90ZWFyb2ZmKG1lbnUtPnBhcmVudCk7CisJfQorI2VuZGlmCisgICAgfQorfQorCisjaWZkZWYgRkVBVF9URUFST0ZGCisgICAgc3RhdGljIHZvaWQKK3JlYnVpbGRfdGVhcm9mZih2aW1tZW51X1QgKm1lbnUpCit7CisgICAgLypoYWNraXNoKi8KKyAgICBjaGFyX3UJdGJ1ZlsxMjhdOworICAgIFJFQ1QJdHJlY3Q7CisgICAgUkVDVAlyY3Q7CisgICAgUkVDVAlyb2N0OworICAgIGludAkJeCwgeTsKKworICAgIEhXTkQgdGh3bmQgPSBtZW51LT50ZWFyb2ZmX2hhbmRsZTsKKworICAgIEdldFdpbmRvd1RleHQodGh3bmQsIHRidWYsIDEyNyk7CisgICAgaWYgKEdldFdpbmRvd1JlY3QodGh3bmQsICZ0cmVjdCkKKwkgICAgJiYgR2V0V2luZG93UmVjdChzX2h3bmQsICZyY3QpCisJICAgICYmIEdldENsaWVudFJlY3Qoc19od25kLCAmcm9jdCkpCisgICAgeworCXggPSB0cmVjdC5sZWZ0IC0gcmN0LmxlZnQ7CisJeSA9ICh0cmVjdC50b3AgLSAgcmN0LmJvdHRvbSAgKyByb2N0LmJvdHRvbSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJeCA9IHkgPSAweGZmZmZMOworICAgIH0KKyAgICBEZXN0cm95V2luZG93KHRod25kKTsKKyAgICBpZiAobWVudS0+Y2hpbGRyZW4gIT0gTlVMTCkKKyAgICB7CisJZ3VpX21jaF90ZWFyb2ZmKHRidWYsIG1lbnUsIHgsIHkpOworCWlmIChJc1dpbmRvdyhtZW51LT50ZWFyb2ZmX2hhbmRsZSkpCisJICAgICh2b2lkKSBTZXRXaW5kb3dQb3MobWVudS0+dGVhcm9mZl9oYW5kbGUsCisJCQkJTlVMTCwKKwkJCQkoaW50KXRyZWN0LmxlZnQsCisJCQkJKGludCl0cmVjdC50b3AsCisJCQkJMCwgMCwKKwkJCQlTV1BfTk9TSVpFIHwgU1dQX05PWk9SREVSIHwgU1dQX05PQUNUSVZBVEUpOworICAgIH0KK30KKyNlbmRpZiAvKiBGRUFUX1RFQVJPRkYgKi8KKworLyoKKyAqIE1ha2UgYSBtZW51IGVpdGhlciBncmV5IG9yIG5vdCBncmV5LgorICovCisgICAgdm9pZAorZ3VpX21jaF9tZW51X2dyZXkoCisgICAgdmltbWVudV9UCSptZW51LAorICAgIGludAkgICAgZ3JleSkKK3sKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKyAgICAvKgorICAgICAqIGlzIHRoaXMgYSB0b29sYmFyIGJ1dHRvbj8KKyAgICAgKi8KKyAgICBpZiAobWVudS0+c3VibWVudV9pZCA9PSAoSE1FTlUpLTEpCisgICAgeworCVNlbmRNZXNzYWdlKHNfdG9vbGJhcmh3bmQsIFRCX0VOQUJMRUJVVFRPTiwKKwkgICAgKFdQQVJBTSltZW51LT5pZCwgKExQQVJBTSkgTUFLRUxPTkcoKGdyZXkgPyBGQUxTRSA6IFRSVUUpLCAwKSApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICBpZiAoZ3JleSkKKwlFbmFibGVNZW51SXRlbShzX21lbnVCYXIsIG1lbnUtPmlkLCBNRl9CWUNPTU1BTkQgfCBNRl9HUkFZRUQpOworICAgIGVsc2UKKwlFbmFibGVNZW51SXRlbShzX21lbnVCYXIsIG1lbnUtPmlkLCBNRl9CWUNPTU1BTkQgfCBNRl9FTkFCTEVEKTsKKworI2lmZGVmIEZFQVRfVEVBUk9GRgorICAgIGlmICgobWVudS0+cGFyZW50ICE9IE5VTEwpICYmIChJc1dpbmRvdyhtZW51LT5wYXJlbnQtPnRlYXJvZmZfaGFuZGxlKSkpCisgICAgeworCVdPUkQgbWVudUlEOworCUhXTkQgbWVudUhhbmRsZTsKKworCS8qCisJICogQSB0ZWFyb2ZmIGJ1dHRvbiBoYXMgY2hhbmdlZCBzdGF0ZS4KKwkgKi8KKwlpZiAobWVudS0+Y2hpbGRyZW4gPT0gTlVMTCkKKwkgICAgbWVudUlEID0gKFdPUkQpKG1lbnUtPmlkKTsKKwllbHNlCisJICAgIG1lbnVJRCA9IChXT1JEKSgoRFdPUkQpKG1lbnUtPnN1Ym1lbnVfaWQpIHwgKERXT1JEKTB4ODAwMCk7CisJbWVudUhhbmRsZSA9IEdldERsZ0l0ZW0obWVudS0+cGFyZW50LT50ZWFyb2ZmX2hhbmRsZSwgbWVudUlEKTsKKwlpZiAobWVudUhhbmRsZSkKKwkgICAgRW5hYmxlV2luZG93KG1lbnVIYW5kbGUsICFncmV5KTsKKworICAgIH0KKyNlbmRpZgorfQorCisjZW5kaWYgLyogRkVBVF9NRU5VICovCisKKworLyogZGVmaW5lIHNvbWUgbWFjcm9zIHVzZWQgdG8gbWFrZSB0aGUgZGlhbG9ndWUgY3JlYXRpb24gbW9yZSByZWFkYWJsZSAqLworCisjZGVmaW5lIGFkZF9zdHJpbmcocykgc3RyY3B5KChMUFNUUilwLCBzKTsgKExQU1RSKXAgKz0gKHN0cmxlbigoTFBTVFIpcCkgKyAxKQorI2RlZmluZSBhZGRfd29yZCh4KQkJKnArKyA9ICh4KQorI2RlZmluZSBhZGRfYnl0ZSh4KQkJKigoTFBTVFIpcCkrKyA9ICh4KQorI2RlZmluZSBhZGRfbG9uZyh4KQkJKigoTFBEV09SRClwKSsrID0gKHgpCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBzdHVmZiBmb3IgZGlhbG9ncworICovCisKKy8qCisgKiBUaGUgY2FsbGJhY2sgcm91dGluZSB1c2VkIGJ5IGFsbCB0aGUgZGlhbG9ncy4gIFZlcnkgc2ltcGxlLiAgRmlyc3QsCisgKiBhY2tub3dsZWRnZXMgdGhlIElOSVRESUFMT0cgbWVzc2FnZSBzbyB0aGF0IFdpbmRvd3Mga25vd3MgdG8gZG8gc3RhbmRhcmQKKyAqIGRpYWxvZyBzdHVmZiAoUmV0dXJuID0gZGVmYXVsdCwgRXNjID0gY2FuY2VsLi4uLikgU2Vjb25kLCBpZiBhIGJ1dHRvbiBpcworICogcHJlc3NlZCwgcmV0dXJuIHRoYXQgYnV0dG9uJ3MgSUQgLSBJRENBTkNFTCAoMiksIHdoaWNoIGlzIHRoZSBidXR0b24ncworICogbnVtYmVyLgorICovCisgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sKK2RpYWxvZ19jYWxsYmFjaygKKyAgICBIV05EIGh3bmQsCisgICAgVUlOVCBtZXNzYWdlLAorICAgIFdQQVJBTSB3UGFyYW0sCisgICAgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBpZiAobWVzc2FnZSA9PSBXTV9JTklURElBTE9HKQorICAgIHsKKwlDZW50ZXJXaW5kb3coaHduZCwgR2V0V2luZG93KGh3bmQsIEdXX09XTkVSKSk7CisJLyogU2V0IGZvY3VzIHRvIHRoZSBkaWFsb2cuICBTZXQgdGhlIGRlZmF1bHQgYnV0dG9uLCBpZiBzcGVjaWZpZWQuICovCisJKHZvaWQpU2V0Rm9jdXMoaHduZCk7CisJaWYgKGRpYWxvZ19kZWZhdWx0X2J1dHRvbiA+IElEQ0FOQ0VMKQorCSAgICAodm9pZClTZXRGb2N1cyhHZXREbGdJdGVtKGh3bmQsIGRpYWxvZ19kZWZhdWx0X2J1dHRvbikpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSA9PSBXTV9DT01NQU5EKQorICAgIHsKKwlpbnQJYnV0dG9uID0gTE9XT1JEKHdQYXJhbSk7CisKKwkvKiBEb24ndCBlbmQgdGhlIGRpYWxvZyBpZiBzb21ldGhpbmcgd2FzIHNlbGVjdGVkIHRoYXQgd2FzCisJICogbm90IGEgYnV0dG9uLgorCSAqLworCWlmIChidXR0b24gPj0gRExHX05PTkJVVFRPTl9DT05UUk9MKQorCSAgICByZXR1cm4gVFJVRTsKKworCS8qIElmIHRoZSBlZGl0IGJveCBleGlzdHMsIGNvcHkgdGhlIHN0cmluZy4gKi8KKwlpZiAoc190ZXh0ZmllbGQgIT0gTlVMTCkKKwkgICAgR2V0RGxnSXRlbVRleHQoaHduZCwgRExHX05PTkJVVFRPTl9DT05UUk9MICsgMiwKKwkJCQkJCQkgc190ZXh0ZmllbGQsIElPU0laRSk7CisKKwkvKgorCSAqIE5lZWQgdG8gY2hlY2sgZm9yIElET0sgYmVjYXVzZSBpZiB0aGUgdXNlciBqdXN0IGhpdHMgUmV0dXJuIHRvCisJICogYWNjZXB0IHRoZSBkZWZhdWx0IHZhbHVlLCBzb21lIHJlYXNvbiB0aGlzIGlzIHdoYXQgd2UgZ2V0LgorCSAqLworCWlmIChidXR0b24gPT0gSURPSykKKwl7CisJICAgIGlmIChkaWFsb2dfZGVmYXVsdF9idXR0b24gPiBJRENBTkNFTCkKKwkJRW5kRGlhbG9nKGh3bmQsIGRpYWxvZ19kZWZhdWx0X2J1dHRvbik7CisJfQorCWVsc2UKKwkgICAgRW5kRGlhbG9nKGh3bmQsIGJ1dHRvbiAtIElEQ0FOQ0VMKTsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBpZiAoKG1lc3NhZ2UgPT0gV01fU1lTQ09NTUFORCkgJiYgKHdQYXJhbSA9PSBTQ19DTE9TRSkpCisgICAgeworCUVuZERpYWxvZyhod25kLCAwKTsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogQ3JlYXRlIGEgZGlhbG9nIGR5bmFtaWNhbGx5IGZyb20gdGhlIHBhcmFtZXRlciBzdHJpbmdzLgorICogdHlwZQkJPSB0eXBlIG9mIGRpYWxvZyAocXVlc3Rpb24sIGFsZXJ0LCBldGMuKQorICogdGl0bGUJPSBkaWFsb2cgdGl0bGUuIG1heSBiZSBOVUxMIGZvciBkZWZhdWx0IHRpdGxlLgorICogbWVzc2FnZQk9IHRleHQgdG8gZGlzcGxheS4gRGlhbG9nIHNpemVzIHRvIGFjY29tbW9kYXRlIGl0LgorICogYnV0dG9ucwk9ICdcbicgc2VwYXJhdGVkIGxpc3Qgb2YgYnV0dG9uIGNhcHRpb25zLCBkZWZhdWx0IGZpcnN0LgorICogZGZsdGJ1dHRvbgk9IG51bWJlciBvZiBkZWZhdWx0IGJ1dHRvbi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyAxIGlmIHRoZSBmaXJzdCBidXR0b24gaXMgcHJlc3NlZCwKKyAqCQkJMiBmb3IgdGhlIHNlY29uZCwgZXRjLgorICoKKyAqCQkJMCBpbmRpY2F0ZXMgRXNjIHdhcyBwcmVzc2VkLgorICoJCQktMSBmb3IgdW5leHBlY3RlZCBlcnJvcgorICoKKyAqIElmIHN0dWJiaW5nIG91dCB0aGlzIGZuLCByZXR1cm4gMS4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhcl91ICpkbGdfaWNvbnNbXSA9IC8qIG11c3QgbWF0Y2ggbmFtZXMgaW4gcmVzb3VyY2UgZmlsZSAqLworeworICAgICJJRFJfVklNIiwKKyAgICAiSURSX1ZJTV9FUlJPUiIsCisgICAgIklEUl9WSU1fQUxFUlQiLAorICAgICJJRFJfVklNX0lORk8iLAorICAgICJJRFJfVklNX1FVRVNUSU9OIgorfTsKKworI2lmZGVmIFVTRV9TWVNNRU5VX0ZPTlQKKy8qCisgKiBHZXQgTWVudSBGb250LgorICogUmV0dXJuIE9LIG9yIEZBSUwuCisgKi8KKyAgICBzdGF0aWMgaW50CitndWlfdzMyX2dldF9tZW51X2ZvbnQoTE9HRk9OVCAqbGYpCit7CisgICAgTk9OQ0xJRU5UTUVUUklDUyBubTsKKworICAgIG5tLmNiU2l6ZSA9IHNpemVvZihOT05DTElFTlRNRVRSSUNTKTsKKyAgICBpZiAoIVN5c3RlbVBhcmFtZXRlcnNJbmZvKAorCSAgICBTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywKKwkgICAgc2l6ZW9mKE5PTkNMSUVOVE1FVFJJQ1MpLAorCSAgICAmbm0sCisJICAgIDApKQorCXJldHVybiBGQUlMOworICAgICpsZiA9IG5tLmxmTWVudUZvbnQ7CisgICAgcmV0dXJuIE9LOworfQorI2VuZGlmCisKKyAgICBpbnQKK2d1aV9tY2hfZGlhbG9nKAorICAgIGludAkJIHR5cGUsCisgICAgY2hhcl91CSp0aXRsZSwKKyAgICBjaGFyX3UJKm1lc3NhZ2UsCisgICAgY2hhcl91CSpidXR0b25zLAorICAgIGludAkJIGRmbHRidXR0b24sCisgICAgY2hhcl91CSp0ZXh0ZmllbGQpCit7CisgICAgV09SRAkqcCwgKnBkbGd0ZW1wbGF0ZSwgKnBudW1pdGVtczsKKyAgICBpbnQJCW51bUJ1dHRvbnM7CisgICAgaW50CQkqYnV0dG9uV2lkdGhzLCAqYnV0dG9uUG9zaXRpb25zOworICAgIGludAkJYnV0dG9uWXBvczsKKyAgICBpbnQJCW5jaGFyLCBpOworICAgIERXT1JECWxTdHlsZTsKKyAgICBpbnQJCWRsZ3dpZHRoID0gMDsKKyAgICBpbnQJCWRsZ2hlaWdodDsKKyAgICBpbnQJCWVkaXRib3hoZWlnaHQ7CisgICAgaW50CQlob3JpeldpZHRoID0gMDsKKyAgICBpbnQJCW1zZ2hlaWdodDsKKyAgICBjaGFyX3UJKnBzdGFydDsKKyAgICBjaGFyX3UJKnBlbmQ7CisgICAgY2hhcl91CSp0YnVmZmVyOworICAgIFJFQ1QJcmVjdDsKKyAgICBIV05ECWh3bmQ7CisgICAgSERDCQloZGM7CisgICAgSEZPTlQJZm9udCwgb2xkRm9udDsKKyAgICBURVhUTUVUUklDCWZvbnRJbmZvOworICAgIGludAkJZm9udEhlaWdodDsKKyAgICBpbnQJCXRleHRXaWR0aCwgbWluQnV0dG9uV2lkdGgsIG1lc3NhZ2VXaWR0aDsKKyAgICBpbnQJCW1heERpYWxvZ1dpZHRoOworICAgIGludAkJdmVydGljYWw7CisgICAgaW50CQlkbGdQYWRkaW5nWDsKKyAgICBpbnQJCWRsZ1BhZGRpbmdZOworI2lmZGVmIFVTRV9TWVNNRU5VX0ZPTlQKKyAgICBMT0dGT05UCWxmU3lzbWVudTsKKyAgICBpbnQJCXVzZV9sZlN5c21lbnUgPSBGQUxTRTsKKyNlbmRpZgorCisjaWZuZGVmIE5PX0NPTlNPTEUKKyAgICAvKiBEb24ndCBvdXRwdXQgYW55dGhpbmcgaW4gc2lsZW50IG1vZGUgKCJleCAtcyIpICovCisgICAgaWYgKHNpbGVudF9tb2RlKQorCXJldHVybiBkZmx0YnV0dG9uOyAgIC8qIHJldHVybiBkZWZhdWx0IG9wdGlvbiAqLworI2VuZGlmCisKKyAgICAvKiBJZiB0aGVyZSBpcyBubyB3aW5kb3cgeWV0LCBvcGVuIGl0LiAqLworICAgIGlmIChzX2h3bmQgPT0gTlVMTCAmJiBndWlfbWNoX2luaXQoKSA9PSBGQUlMKQorCXJldHVybiBkZmx0YnV0dG9uOworCisgICAgaWYgKCh0eXBlIDwgMCkgfHwgKHR5cGUgPiBWSU1fTEFTVF9UWVBFKSkKKwl0eXBlID0gMDsKKworICAgIC8qIGFsbG9jYXRlIHNvbWUgbWVtb3J5IGZvciBkaWFsb2cgdGVtcGxhdGUgKi8KKyAgICAvKiBUT0RPIHNob3VsZCBjb21wdXRlIHRoaXMgcmVhbGx5Ki8KKyAgICBwZGxndGVtcGxhdGUgPSBwID0gKFBXT1JEKUxvY2FsQWxsb2MoTFBUUiwgRExHX0FMTE9DX1NJWkUpOworCisgICAgaWYgKHAgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisKKyAgICAvKgorICAgICAqIG1ha2UgYSBjb3B5IG9mICdidXR0b25zJyB0byBmaWRkbGUgd2l0aCBpdC4gIGNvbXBsaWVyIGdyaXp6bGVzIGJlY2F1c2UKKyAgICAgKiB2aW1fc3Ryc2F2ZSgpIGRvZXNuJ3QgdGFrZSBhIGNvbnN0IGFyZyAod2h5IG5vdD8pLCBzbyBjYXN0IGF3YXkgdGhlCisgICAgICogY29uc3QuCisgICAgICovCisgICAgdGJ1ZmZlciA9IHZpbV9zdHJzYXZlKGJ1dHRvbnMpOworICAgIGlmICh0YnVmZmVyID09IE5VTEwpCisJcmV0dXJuIC0xOworCisgICAgLS1kZmx0YnV0dG9uOyAgIC8qIENoYW5nZSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkICovCisKKyAgICAvKiBDb3VudCBidXR0b25zICovCisgICAgbnVtQnV0dG9ucyA9IDE7CisgICAgZm9yIChpID0gMDsgdGJ1ZmZlcltpXSAhPSAnXDAnOyBpKyspCisgICAgeworCWlmICh0YnVmZmVyW2ldID09IERMR19CVVRUT05fU0VQKQorCSAgICBudW1CdXR0b25zKys7CisgICAgfQorICAgIGlmIChkZmx0YnV0dG9uID49IG51bUJ1dHRvbnMpCisJZGZsdGJ1dHRvbiA9IC0xOworCisgICAgLyogQWxsb2NhdGUgYXJyYXkgdG8gaG9sZCB0aGUgd2lkdGggb2YgZWFjaCBidXR0b24gKi8KKyAgICBidXR0b25XaWR0aHMgPSAoaW50ICopIGxhbGxvYyhudW1CdXR0b25zICogc2l6ZW9mKGludCksIFRSVUUpOworICAgIGlmIChidXR0b25XaWR0aHMgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisKKyAgICAvKiBBbGxvY2F0ZSBhcnJheSB0byBob2xkIHRoZSBYIHBvc2l0aW9uIG9mIGVhY2ggYnV0dG9uICovCisgICAgYnV0dG9uUG9zaXRpb25zID0gKGludCAqKSBsYWxsb2MobnVtQnV0dG9ucyAqIHNpemVvZihpbnQpLCBUUlVFKTsKKyAgICBpZiAoYnV0dG9uUG9zaXRpb25zID09IE5VTEwpCisJcmV0dXJuIC0xOworCisgICAgLyoKKyAgICAgKiBDYWxjdWxhdGUgaG93IGJpZyB0aGUgZGlhbG9nIG11c3QgYmUuCisgICAgICovCisgICAgaHduZCA9IEdldERlc2t0b3BXaW5kb3coKTsKKyAgICBoZGMgPSBHZXRXaW5kb3dEQyhod25kKTsKKyNpZmRlZiBVU0VfU1lTTUVOVV9GT05UCisgICAgaWYgKGd1aV93MzJfZ2V0X21lbnVfZm9udCgmbGZTeXNtZW51KSA9PSBPSykKKyAgICB7CisJZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCgmbGZTeXNtZW51KTsKKwl1c2VfbGZTeXNtZW51ID0gVFJVRTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgZm9udCA9IENyZWF0ZUZvbnQoLURMR19GT05UX1BPSU5UX1NJWkUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCSAgICAgIFZBUklBQkxFX1BJVENIICwgRExHX0ZPTlRfTkFNRSk7CisgICAgaWYgKHNfdXNlbmV3bG9vaykKKyAgICB7CisJb2xkRm9udCA9IFNlbGVjdEZvbnQoaGRjLCBmb250KTsKKwlkbGdQYWRkaW5nWCA9IERMR19QQURESU5HX1g7CisJZGxnUGFkZGluZ1kgPSBETEdfUEFERElOR19ZOworICAgIH0KKyAgICBlbHNlCisgICAgeworCW9sZEZvbnQgPSBTZWxlY3RGb250KGhkYywgR2V0U3RvY2tPYmplY3QoU1lTVEVNX0ZPTlQpKTsKKwlkbGdQYWRkaW5nWCA9IERMR19PTERfU1RZTEVfUEFERElOR19YOworCWRsZ1BhZGRpbmdZID0gRExHX09MRF9TVFlMRV9QQURESU5HX1k7CisgICAgfQorICAgIEdldFRleHRNZXRyaWNzKGhkYywgJmZvbnRJbmZvKTsKKyAgICBmb250SGVpZ2h0ID0gZm9udEluZm8udG1IZWlnaHQ7CisKKyAgICAvKiBNaW5pbXVtIHdpZHRoIGZvciBob3Jpem9udGFsIGJ1dHRvbiAqLworICAgIG1pbkJ1dHRvbldpZHRoID0gR2V0VGV4dFdpZHRoKGhkYywgIkNhbmNlbCIsIDYpOworCisgICAgLyogTWF4aW11bSB3aWR0aCBvZiBhIGRpYWxvZywgaWYgcG9zc2libGUgKi8KKyAgICBHZXRXaW5kb3dSZWN0KHNfaHduZCwgJnJlY3QpOworICAgIG1heERpYWxvZ1dpZHRoID0gcmVjdC5yaWdodCAtIHJlY3QubGVmdAorCQkgICAgIC0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWEZSQU1FKSAqIDI7CisgICAgaWYgKG1heERpYWxvZ1dpZHRoIDwgRExHX01JTl9NQVhfV0lEVEgpCisJbWF4RGlhbG9nV2lkdGggPSBETEdfTUlOX01BWF9XSURUSDsKKworICAgIC8qIFNldCBkbGd3aWR0aCB0byB3aWR0aCBvZiBtZXNzYWdlICovCisgICAgcHN0YXJ0ID0gbWVzc2FnZTsKKyAgICBtZXNzYWdlV2lkdGggPSAwOworICAgIG1zZ2hlaWdodCA9IDA7CisgICAgZG8KKyAgICB7CisJcGVuZCA9IHZpbV9zdHJjaHIocHN0YXJ0LCBETEdfQlVUVE9OX1NFUCk7CisJaWYgKHBlbmQgPT0gTlVMTCkKKwkgICAgcGVuZCA9IHBzdGFydCArIFNUUkxFTihwc3RhcnQpOwkvKiBMYXN0IGxpbmUgb2YgbWVzc2FnZS4gKi8KKwltc2doZWlnaHQgKz0gZm9udEhlaWdodDsKKwl0ZXh0V2lkdGggPSBHZXRUZXh0V2lkdGgoaGRjLCBwc3RhcnQsIChpbnQpKHBlbmQgLSBwc3RhcnQpKTsKKwlpZiAodGV4dFdpZHRoID4gbWVzc2FnZVdpZHRoKQorCSAgICBtZXNzYWdlV2lkdGggPSB0ZXh0V2lkdGg7CisJcHN0YXJ0ID0gcGVuZCArIDE7CisgICAgfSB3aGlsZSAoKnBlbmQgIT0gTlVMKTsKKyAgICBkbGd3aWR0aCA9IG1lc3NhZ2VXaWR0aDsKKworICAgIC8qIEFkZCB3aWR0aCBvZiBpY29uIHRvIGRsZ3dpZHRoLCBhbmQgc29tZSBzcGFjZSAqLworICAgIGRsZ3dpZHRoICs9IERMR19JQ09OX1dJRFRIICsgMyAqIGRsZ1BhZGRpbmdYOworCisgICAgaWYgKG1zZ2hlaWdodCA8IERMR19JQ09OX0hFSUdIVCkKKwltc2doZWlnaHQgPSBETEdfSUNPTl9IRUlHSFQ7CisKKyAgICAvKgorICAgICAqIENoZWNrIGJ1dHRvbiBuYW1lcy4gIEEgbG9uZyBvbmUgd2lsbCBtYWtlIHRoZSBkaWFsb2cgd2lkZXIuCisgICAgICovCisgICAgdmVydGljYWwgPSAodmltX3N0cmNocihwX2dvLCBHT19WRVJUSUNBTCkgIT0gTlVMTCk7CisgICAgaWYgKCF2ZXJ0aWNhbCkKKyAgICB7CisJLy8gUGxhY2UgYnV0dG9ucyBob3Jpem9udGFsbHkgaWYgdGhleSBmaXQuCisJaG9yaXpXaWR0aCA9IGRsZ1BhZGRpbmdYOworCXBzdGFydCA9IHRidWZmZXI7CisJaSA9IDA7CisJZG8KKwl7CisJICAgIHBlbmQgPSB2aW1fc3RyY2hyKHBzdGFydCwgRExHX0JVVFRPTl9TRVApOworCSAgICBpZiAocGVuZCA9PSBOVUxMKQorCQlwZW5kID0gcHN0YXJ0ICsgU1RSTEVOKHBzdGFydCk7CS8vIExhc3QgYnV0dG9uIG5hbWUuCisJICAgIHRleHRXaWR0aCA9IEdldFRleHRXaWR0aChoZGMsIHBzdGFydCwgKGludCkocGVuZCAtIHBzdGFydCkpOworCSAgICBpZiAodGV4dFdpZHRoIDwgbWluQnV0dG9uV2lkdGgpCisJCXRleHRXaWR0aCA9IG1pbkJ1dHRvbldpZHRoOworCSAgICB0ZXh0V2lkdGggKz0gZGxnUGFkZGluZ1g7CSAgICAvKiBQYWRkaW5nIHdpdGhpbiBidXR0b24gKi8KKwkgICAgYnV0dG9uV2lkdGhzW2ldID0gdGV4dFdpZHRoOworCSAgICBidXR0b25Qb3NpdGlvbnNbaSsrXSA9IGhvcml6V2lkdGg7CisJICAgIGhvcml6V2lkdGggKz0gdGV4dFdpZHRoICsgZGxnUGFkZGluZ1g7IC8qIFBhZCBiZXR3ZWVuIGJ1dHRvbnMgKi8KKwkgICAgcHN0YXJ0ID0gcGVuZCArIDE7CisJfSB3aGlsZSAoKnBlbmQgIT0gTlVMKTsKKworCWlmIChob3JpeldpZHRoID4gbWF4RGlhbG9nV2lkdGgpCisJICAgIHZlcnRpY2FsID0gVFJVRTsJLy8gVG9vIHdpZGUgdG8gZml0IG9uIHRoZSBzY3JlZW4uCisJZWxzZSBpZiAoaG9yaXpXaWR0aCA+IGRsZ3dpZHRoKQorCSAgICBkbGd3aWR0aCA9IGhvcml6V2lkdGg7CisgICAgfQorCisgICAgaWYgKHZlcnRpY2FsKQorICAgIHsKKwkvLyBTdGFjayBidXR0b25zIHZlcnRpY2FsbHkuCisJcHN0YXJ0ID0gdGJ1ZmZlcjsKKwlkbworCXsKKwkgICAgcGVuZCA9IHZpbV9zdHJjaHIocHN0YXJ0LCBETEdfQlVUVE9OX1NFUCk7CisJICAgIGlmIChwZW5kID09IE5VTEwpCisJCXBlbmQgPSBwc3RhcnQgKyBTVFJMRU4ocHN0YXJ0KTsJLy8gTGFzdCBidXR0b24gbmFtZS4KKwkgICAgdGV4dFdpZHRoID0gR2V0VGV4dFdpZHRoKGhkYywgcHN0YXJ0LCAoaW50KShwZW5kIC0gcHN0YXJ0KSk7CisJICAgIHRleHRXaWR0aCArPSBkbGdQYWRkaW5nWDsJCS8qIFBhZGRpbmcgd2l0aGluIGJ1dHRvbiAqLworCSAgICB0ZXh0V2lkdGggKz0gRExHX1ZFUlRfUEFERElOR19YICogMjsgLyogUGFkZGluZyBhcm91bmQgYnV0dG9uICovCisJICAgIGlmICh0ZXh0V2lkdGggPiBkbGd3aWR0aCkKKwkJZGxnd2lkdGggPSB0ZXh0V2lkdGg7CisJICAgIHBzdGFydCA9IHBlbmQgKyAxOworCX0gd2hpbGUgKCpwZW5kICE9IE5VTCk7CisgICAgfQorCisgICAgaWYgKGRsZ3dpZHRoIDwgRExHX01JTl9XSURUSCkKKwlkbGd3aWR0aCA9IERMR19NSU5fV0lEVEg7CS8qIERvbid0IGFsbG93IGEgcmVhbGx5IHRoaW4gZGlhbG9nISovCisKKyAgICAvKiBzdGFydCB0byBmaWxsIGluIHRoZSBkbGd0ZW1wbGF0ZSBpbmZvcm1hdGlvbi4gIGFkZHJlc3NpbmcgYnkgV09SRHMgKi8KKyAgICBpZiAoc191c2VuZXdsb29rKQorCWxTdHlsZSA9IERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHxEU18zRExPT0t8IFdTX1ZJU0lCTEUgfERTX1NFVEZPTlQ7CisgICAgZWxzZQorCWxTdHlsZSA9IERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHxEU18zRExPT0t8IFdTX1ZJU0lCTEU7CisKKyAgICBhZGRfbG9uZyhsU3R5bGUpOworICAgIGFkZF9sb25nKDApOwkvLyAobEV4dGVuZGVkU3R5bGUpCisgICAgcG51bWl0ZW1zID0gcDsJLypzYXZlIHdoZXJlIHRoZSBudW1iZXIgb2YgaXRlbXMgbXVzdCBiZSBzdG9yZWQqLworICAgIGFkZF93b3JkKDApOwkvLyBOdW1iZXJPZkl0ZW1zKHdpbGwgY2hhbmdlIGxhdGVyKQorICAgIGFkZF93b3JkKDEwKTsJLy8geAorICAgIGFkZF93b3JkKDEwKTsJLy8geQorICAgIGFkZF93b3JkKFBpeGVsVG9EaWFsb2dYKGRsZ3dpZHRoKSk7CS8vIGN4CisKKyAgICAvLyBEaWFsb2cgaGVpZ2h0LgorICAgIGlmICh2ZXJ0aWNhbCkKKwlkbGdoZWlnaHQgPSBtc2doZWlnaHQgKyAyICogZGxnUGFkZGluZ1kgKworCQkJICAgICAgRExHX1ZFUlRfUEFERElOR19ZICsgMiAqIGZvbnRIZWlnaHQgKiBudW1CdXR0b25zOworICAgIGVsc2UKKwlkbGdoZWlnaHQgPSBtc2doZWlnaHQgKyAzICogZGxnUGFkZGluZ1kgKyAyICogZm9udEhlaWdodDsKKworICAgIC8vIERpYWxvZyBuZWVkcyB0byBiZSB0YWxsZXIgaWYgY29udGFpbnMgYW4gZWRpdCBib3guCisgICAgZWRpdGJveGhlaWdodCA9IGZvbnRIZWlnaHQgKyBkbGdQYWRkaW5nWSArIDQgKiBETEdfVkVSVF9QQURESU5HX1k7CisgICAgaWYgKHRleHRmaWVsZCAhPSBOVUxMKQorCWRsZ2hlaWdodCArPSBlZGl0Ym94aGVpZ2h0OworCisgICAgYWRkX3dvcmQoUGl4ZWxUb0RpYWxvZ1koZGxnaGVpZ2h0KSk7CisKKyAgICBhZGRfd29yZCgwKTsJLy8gTWVudQorICAgIGFkZF93b3JkKDApOwkvLyBDbGFzcworCisgICAgLyogY29weSB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZyAqLworICAgIG5jaGFyID0gbkNvcHlBbnNpVG9XaWRlQ2hhcihwLCAodGl0bGUgPworCQkJCSAgICAoTFBTVFIpdGl0bGUgOgorCQkJCSAgICAoTFBTVFIpKCJWaW0gIlZJTV9WRVJTSU9OX01FRElVTSkpKTsKKyAgICBwICs9IG5jaGFyOworCisgICAgaWYgKHNfdXNlbmV3bG9vaykKKyAgICB7CisJLyogZG8gdGhlIGZvbnQsIHNpbmNlIERTXzNETE9PSyBkb2Vzbid0IHdvcmsgcHJvcGVybHkgKi8KKyNpZmRlZiBVU0VfU1lTTUVOVV9GT05UCisJaWYgKHVzZV9sZlN5c21lbnUpCisJeworCSAgICAvKiBwb2ludCBzaXplICovCisJICAgICpwKysgPSAtTXVsRGl2KGxmU3lzbWVudS5sZkhlaWdodCwgNzIsCisJCSAgICBHZXREZXZpY2VDYXBzKGhkYywgTE9HUElYRUxTWSkpOworCSAgICBuY2hhciA9IG5Db3B5QW5zaVRvV2lkZUNoYXIocCwgVEVYVChsZlN5c21lbnUubGZGYWNlTmFtZSkpOworCX0KKwllbHNlCisjZW5kaWYKKwl7CisJICAgICpwKysgPSBETEdfRk9OVF9QT0lOVF9TSVpFOwkJLy8gcG9pbnQgc2l6ZQorCSAgICBuY2hhciA9IG5Db3B5QW5zaVRvV2lkZUNoYXIocCwgVEVYVChETEdfRk9OVF9OQU1FKSk7CisJfQorCXAgKz0gbmNoYXI7CisgICAgfQorCisgICAgYnV0dG9uWXBvcyA9IG1zZ2hlaWdodCArIDIgKiBkbGdQYWRkaW5nWTsKKworICAgIGlmICh0ZXh0ZmllbGQgIT0gTlVMTCkKKwlidXR0b25ZcG9zICs9IGVkaXRib3hoZWlnaHQ7CisKKyAgICBwc3RhcnQgPSB0YnVmZmVyOworICAgIGlmICghdmVydGljYWwpCisJaG9yaXpXaWR0aCA9IChkbGd3aWR0aCAtIGhvcml6V2lkdGgpIC8gMjsJLyogTm93IGl0J3MgWCBvZmZzZXQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQnV0dG9uczsgaSsrKQorICAgIHsKKwkvKiBnZXQgZW5kIG9mIHRoaXMgYnV0dG9uLiAqLworCWZvciAoCXBlbmQgPSBwc3RhcnQ7CisJCSpwZW5kICYmICgqcGVuZCAhPSBETEdfQlVUVE9OX1NFUCk7CisJCXBlbmQrKykKKwkgICAgOworCisJaWYgKCpwZW5kKQorCSAgICAqcGVuZCA9ICdcMCc7CisKKwkvKgorCSAqIG9sZCBOT1RFOgorCSAqIHNldHRpbmcgdGhlIEJTX0RFRlBVU0hCVVRUT04gc3R5bGUgZG9lc24ndCB3b3JrIGJlY2F1c2UgV2luZG93cyBzZXRzCisJICogdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCB0YWItYWJsZSBidXR0b24gYW5kIGluIHNvIGRvaW5nIG1ha2VzIHRoYXQKKwkgKiB0aGUgZGVmYXVsdCEhIEdycnIuICBXb3JrYXJvdW5kOiBNYWtlIHRoZSBkZWZhdWx0IGJ1dHRvbiB0aGUgb25seQorCSAqIG9uZSB3aXRoIFdTX1RBQlNUT1Agc3R5bGUuIE1lYW5zIHVzZXIgY2FuJ3QgdGFiIGJldHdlZW4gYnV0dG9ucywgYnV0CisJICogaGUvc2hlIGNhbiB1c2UgYXJyb3cga2V5cy4KKwkgKgorCSAqIG5ldyBOT1RFOiBCU19ERUZQVVNIQlVUVE9OIGlzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gc2VsZWN0IHRoZQorCSAqIHJpZ2h0IGJ1dHR1biB3aGVuIGhpdHRpbmcgPEVudGVyPi4gIEUuZy4sIGZvciB0aGUgIjpjb25maXJtIHF1aXQiCisJICogZGlhbG9nLiAgQWxzbyBuZWVkZWQgZm9yIHdoZW4gdGhlIHRleHRmaWVsZCBpcyB0aGUgZGVmYXVsdCBjb250cm9sLgorCSAqIEl0IGFwcGVhcnMgdG8gd29yayBub3cgKHBlcmhhcHMgbm90IG9uIFdpbjk1PykuCisJICovCisJaWYgKHZlcnRpY2FsKQorCXsKKwkgICAgcCA9IGFkZF9kaWFsb2dfZWxlbWVudChwLAorCQkgICAgKGkgPT0gZGZsdGJ1dHRvbgorCQkJICAgID8gQlNfREVGUFVTSEJVVFRPTiA6IEJTX1BVU0hCVVRUT04pIHwgV1NfVEFCU1RPUCwKKwkJICAgIFBpeGVsVG9EaWFsb2dYKERMR19WRVJUX1BBRERJTkdfWCksCisJCSAgICBQaXhlbFRvRGlhbG9nWShidXR0b25ZcG9zIC8qIFRCSyAqLworCQkJCSAgICsgMiAqIGZvbnRIZWlnaHQgKiBpKSwKKwkJICAgIFBpeGVsVG9EaWFsb2dYKGRsZ3dpZHRoIC0gMiAqIERMR19WRVJUX1BBRERJTkdfWCksCisJCSAgICAoV09SRCkoUGl4ZWxUb0RpYWxvZ1koMiAqIGZvbnRIZWlnaHQpIC0gMSksCisJCSAgICAoV09SRCkoSURDQU5DRUwgKyAxICsgaSksIChXT1JEKTB4MDA4MCwgcHN0YXJ0KTsKKwl9CisJZWxzZQorCXsKKwkgICAgcCA9IGFkZF9kaWFsb2dfZWxlbWVudChwLAorCQkgICAgKGkgPT0gZGZsdGJ1dHRvbgorCQkJICAgID8gQlNfREVGUFVTSEJVVFRPTiA6IEJTX1BVU0hCVVRUT04pIHwgV1NfVEFCU1RPUCwKKwkJICAgIFBpeGVsVG9EaWFsb2dYKGhvcml6V2lkdGggKyBidXR0b25Qb3NpdGlvbnNbaV0pLAorCQkgICAgUGl4ZWxUb0RpYWxvZ1koYnV0dG9uWXBvcyksIC8qIFRCSyAqLworCQkgICAgUGl4ZWxUb0RpYWxvZ1goYnV0dG9uV2lkdGhzW2ldKSwKKwkJICAgIChXT1JEKShQaXhlbFRvRGlhbG9nWSgyICogZm9udEhlaWdodCkgLSAxKSwKKwkJICAgIChXT1JEKShJRENBTkNFTCArIDEgKyBpKSwgKFdPUkQpMHgwMDgwLCBwc3RhcnQpOworCX0KKwlwc3RhcnQgPSBwZW5kICsgMTsJLypuZXh0IGJ1dHRvbiovCisgICAgfQorICAgICpwbnVtaXRlbXMgKz0gbnVtQnV0dG9uczsKKworICAgIC8qIFZpbSBpY29uICovCisgICAgcCA9IGFkZF9kaWFsb2dfZWxlbWVudChwLCBTU19JQ09OLAorCSAgICBQaXhlbFRvRGlhbG9nWChkbGdQYWRkaW5nWCksCisJICAgIFBpeGVsVG9EaWFsb2dZKGRsZ1BhZGRpbmdZKSwKKwkgICAgUGl4ZWxUb0RpYWxvZ1goRExHX0lDT05fV0lEVEgpLAorCSAgICBQaXhlbFRvRGlhbG9nWShETEdfSUNPTl9IRUlHSFQpLAorCSAgICBETEdfTk9OQlVUVE9OX0NPTlRST0wgKyAwLCAoV09SRCkweDAwODIsCisJICAgIGRsZ19pY29uc1t0eXBlXSk7CisKKyAgICAvKiBEaWFsb2cgbWVzc2FnZSAqLworICAgIHAgPSBhZGRfZGlhbG9nX2VsZW1lbnQocCwgU1NfTEVGVCwKKwkgICAgUGl4ZWxUb0RpYWxvZ1goMiAqIGRsZ1BhZGRpbmdYICsgRExHX0lDT05fV0lEVEgpLAorCSAgICBQaXhlbFRvRGlhbG9nWShkbGdQYWRkaW5nWSksCisJICAgIChXT1JEKShQaXhlbFRvRGlhbG9nWChtZXNzYWdlV2lkdGgpICsgMSksCisJICAgIFBpeGVsVG9EaWFsb2dZKG1zZ2hlaWdodCksCisJICAgIERMR19OT05CVVRUT05fQ09OVFJPTCArIDEsIChXT1JEKTB4MDA4MiwgbWVzc2FnZSk7CisKKyAgICAvKiBFZGl0IGJveCAqLworICAgIGlmICh0ZXh0ZmllbGQgIT0gTlVMTCkKKyAgICB7CisJcCA9IGFkZF9kaWFsb2dfZWxlbWVudChwLCBFU19MRUZUfEVTX0FVVE9IU0NST0xMfFdTX1RBQlNUT1B8V1NfQk9SREVSLAorCQlQaXhlbFRvRGlhbG9nWCgyICogZGxnUGFkZGluZ1gpLAorCQlQaXhlbFRvRGlhbG9nWSgyICogZGxnUGFkZGluZ1kgKyBtc2doZWlnaHQpLAorCQlQaXhlbFRvRGlhbG9nWChkbGd3aWR0aCAtIDQgKiBkbGdQYWRkaW5nWCksCisJCVBpeGVsVG9EaWFsb2dZKGZvbnRIZWlnaHQgKyBkbGdQYWRkaW5nWSksCisJCURMR19OT05CVVRUT05fQ09OVFJPTCArIDIsIChXT1JEKTB4MDA4MSwgdGV4dGZpZWxkKTsKKwkqcG51bWl0ZW1zICs9IDE7CisgICAgfQorCisgICAgKnBudW1pdGVtcyArPSAyOworCisgICAgU2VsZWN0Rm9udChoZGMsIG9sZEZvbnQpOworICAgIERlbGV0ZU9iamVjdChmb250KTsKKyAgICBSZWxlYXNlREMoaHduZCwgaGRjKTsKKworICAgIC8qIExldCB0aGUgZGlhbG9nX2NhbGxiYWNrKCkgZnVuY3Rpb24ga25vdyB3aGljaCBidXR0b24gdG8gbWFrZSBkZWZhdWx0CisgICAgICogSWYgd2UgaGF2ZSBhbiBlZGl0IGJveCwgbWFrZSB0aGF0IHRoZSBkZWZhdWx0LiBXZSBhbHNvIG5lZWQgdG8gdGVsbAorICAgICAqIGRpYWxvZ19jYWxsYmFjaygpIGlmIHRoaXMgZGlhbG9nIGNvbnRhaW5zIGFuIGVkaXQgYm94IG9yIG5vdC4gV2UgZG8KKyAgICAgKiB0aGlzIGJ5IHNldHRpbmcgc190ZXh0ZmllbGQgaWYgaXQgZG9lcy4KKyAgICAgKi8KKyAgICBpZiAodGV4dGZpZWxkICE9IE5VTEwpCisgICAgeworCWRpYWxvZ19kZWZhdWx0X2J1dHRvbiA9IERMR19OT05CVVRUT05fQ09OVFJPTCArIDI7CisJc190ZXh0ZmllbGQgPSB0ZXh0ZmllbGQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZGlhbG9nX2RlZmF1bHRfYnV0dG9uID0gSURDQU5DRUwgKyAxICsgZGZsdGJ1dHRvbjsKKwlzX3RleHRmaWVsZCA9IE5VTEw7CisgICAgfQorCisgICAgLyogc2hvdyB0aGUgZGlhbG9nIGJveCBtb2RhbGx5IGFuZCBnZXQgYSByZXR1cm4gdmFsdWUgKi8KKyAgICBuY2hhciA9IChpbnQpRGlhbG9nQm94SW5kaXJlY3QoCisJICAgIHNfaGluc3QsCisJICAgIChMUERMR1RFTVBMQVRFKXBkbGd0ZW1wbGF0ZSwKKwkgICAgc19od25kLAorCSAgICAoRExHUFJPQylkaWFsb2dfY2FsbGJhY2spOworCisgICAgTG9jYWxGcmVlKExvY2FsSGFuZGxlKHBkbGd0ZW1wbGF0ZSkpOworICAgIHZpbV9mcmVlKHRidWZmZXIpOworICAgIHZpbV9mcmVlKGJ1dHRvbldpZHRocyk7CisgICAgdmltX2ZyZWUoYnV0dG9uUG9zaXRpb25zKTsKKworICAgIC8qIEZvY3VzIGJhY2sgdG8gb3VyIHdpbmRvdyAoZm9yIHdoZW4gTURJIGlzIHVzZWQpLiAqLworICAgICh2b2lkKVNldEZvY3VzKHNfaHduZCk7CisKKyAgICByZXR1cm4gbmNoYXI7Cit9CisKKyNlbmRpZiAvKiBGRUFUX0dVSV9ESUFMT0cgKi8KKy8qCisgKiBQdXQgYSBzaW1wbGUgZWxlbWVudCAoYmFzaWMgY2xhc3MpIG9udG8gYSBkaWFsb2cgdGVtcGxhdGUgaW4gbWVtb3J5LgorICogcmV0dXJuIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgbmV4dCBpdGVtIHNob3VsZCBiZSBhZGRlZC4KKyAqCisgKiBwYXJhbWV0ZXJzOgorICogIGxTdHlsZSA9IGFkZGl0aW9uYWwgc3R5bGUgZmxhZ3MKKyAqCQkoYmUgY2FyZWZ1bCwgTlQzLjUxICYgV2luMzJzIHdpbGwgaWdub3JlIHRoZSBuZXcgb25lcykKKyAqICB4LHkgPSB4ICYgeSBwb3NpdGlvbnMgSU4gRElBTE9HIFVOSVRTCisgKiAgdyxoID0gd2lkdGggYW5kIGhlaWdodCBJTiBESUFMT0cgVU5JVFMKKyAqICBJZCAgPSBJRCB1c2VkIGluIG1lc3NhZ2VzCisgKiAgY2xzcyAgPSBjbGFzcyBJRCwgZS5nIDB4MDA4MCBmb3IgYSBidXR0b24sIDB4MDA4MiBmb3IgYSBzdGF0aWMKKyAqICBjYXB0aW9uID0gdXN1YWxseSB0ZXh0IG9yIHJlc291cmNlIG5hbWUKKyAqCisgKiAgVE9ETzogdXNlIHRoZSBsZW5ndGggaW5mb3JtYXRpb24gbm90ZWQgaGVyZSB0byBlbmFibGUgdGhlIGRpYWxvZyBjcmVhdGlvbgorICogIHJvdXRpbmVzIHRvIHdvcmsgb3V0IG1vcmUgZXhhY3RseSBob3cgbXVjaCBtZW1vcnkgdGhleSBuZWVkIHRvIGFsbG9jLgorICovCisgICAgc3RhdGljIFBXT1JECithZGRfZGlhbG9nX2VsZW1lbnQoCisgICAgUFdPUkQgcCwKKyAgICBEV09SRCBsU3R5bGUsCisgICAgV09SRCB4LAorICAgIFdPUkQgeSwKKyAgICBXT1JEIHcsCisgICAgV09SRCBoLAorICAgIFdPUkQgSWQsCisgICAgV09SRCBjbHNzLAorICAgIGNvbnN0IGNoYXIgKmNhcHRpb24pCit7CisgICAgaW50IG5jaGFyOworCisgICAgcCA9IGxwd0FsaWduKHApOwkvKiBBbGlnbiB0byBkd29yZCBib3VuZGFyeSovCisgICAgbFN0eWxlID0gbFN0eWxlIHwgV1NfVklTSUJMRSB8IFdTX0NISUxEOworICAgICpwKysgPSBMT1dPUkQobFN0eWxlKTsKKyAgICAqcCsrID0gSElXT1JEKGxTdHlsZSk7CisgICAgKnArKyA9IDA7CQkvLyBMT1dPUkQgKGxFeHRlbmRlZFN0eWxlKQorICAgICpwKysgPSAwOwkJLy8gSElXT1JEIChsRXh0ZW5kZWRTdHlsZSkKKyAgICAqcCsrID0geDsKKyAgICAqcCsrID0geTsKKyAgICAqcCsrID0gdzsKKyAgICAqcCsrID0gaDsKKyAgICAqcCsrID0gSWQ7CQkvLzkgb3IgMTAgd29yZHMgaW4gYWxsCisKKyAgICAqcCsrID0gKFdPUkQpMHhmZmZmOworICAgICpwKysgPSBjbHNzOwkJCS8vMiBtb3JlIGhlcmUKKworICAgIG5jaGFyID0gbkNvcHlBbnNpVG9XaWRlQ2hhcihwLCAoTFBTVFIpY2FwdGlvbik7IC8vc3RybGVuKGNhcHRpb24pKzEKKyAgICBwICs9IG5jaGFyOworCisgICAgKnArKyA9IDA7ICAvLyBhZHZhbmNlIHBvaW50ZXIgb3ZlciBuRXh0cmFTdHVmZiBXT1JEICAgLSAyIG1vcmUKKworICAgIHJldHVybiBwOwkvL3RvdGFsID0gMTUrIChzdHJsZW4oY2FwdGlvbikpIHdvcmRzCisJCS8vCSAgID0gMzAgKyAyKHN0cmxlbihjYXB0aW9uKSBieXRlcyByZXFkCit9CisKKworLyoKKyAqIEhlbHBlciByb3V0aW5lLiAgVGFrZSBhbiBpbnB1dCBwb2ludGVyLCByZXR1cm4gY2xvc2VzdCBwb2ludGVyIHRoYXQgaXMKKyAqIGFsaWduZWQgb24gYSBEV09SRCAoNCBieXRlKSBib3VuZGFyeS4gIFRha2VuIGZyb20gdGhlIFdpbjMyU0RLIHNhbXBsZXMuCisgKi8KKyAgICBzdGF0aWMgTFBXT1JECitscHdBbGlnbigKKyAgICBMUFdPUkQgbHBJbikKK3sKKyAgICBVTE9ORyB1bDsKKworICAgIHVsID0gKFVMT05HKWxwSW47CisgICAgdWwgKz0gMzsKKyAgICB1bCA+Pj0gMjsKKyAgICB1bCA8PD0gMjsKKyAgICByZXR1cm4gKExQV09SRCl1bDsKK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lLiAgVGFrZXMgc2Vjb25kIHBhcmFtZXRlciBhcyBBbnNpIHN0cmluZywgY29waWVzIGl0IHRvIGZpcnN0CisgKiBwYXJhbWV0ZXIgYXMgd2lkZSBjaGFyYWN0ZXIgKDE2LWJpdHMgLyBjaGFyKSBzdHJpbmcsIGFuZCByZXR1cm5zIGludGVnZXIKKyAqIG51bWJlciBvZiB3aWRlIGNoYXJhY3RlcnMgKHdvcmRzKSBpbiBzdHJpbmcgKGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgd2lkZQorICogY2hhciBOVUxMKS4gIFBhcnRseSB0YWtlbiBmcm9tIHRoZSBXaW4zMlNESyBzYW1wbGVzLgorICovCisgICAgc3RhdGljIGludAorbkNvcHlBbnNpVG9XaWRlQ2hhcigKKyAgICBMUFdPUkQgbHBXQ1N0ciwKKyAgICBMUFNUUiBscEFuc2lJbikKK3sKKyAgICBpbnQJCW5DaGFyID0gMDsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQlsZW4gPSBsc3RybGVuKGxwQW5zaUluKSArIDE7CS8qIGluY2x1ZGUgTlVMIGNoYXJhY3RlciAqLworICAgIGludAkJaTsKKyAgICBXQ0hBUgkqd247CisKKyAgICBpZiAoZW5jX2NvZGVwYWdlID09IDAgJiYgKGludClHZXRBQ1AoKSAhPSBlbmNfY29kZXBhZ2UpCisgICAgeworCS8qIE5vdCBhIGNvZGVwYWdlLCB1c2Ugb3VyIG93biBjb252ZXJzaW9uIGZ1bmN0aW9uLiAqLworCXduID0gZW5jX3RvX3VjczIobHBBbnNpSW4sIE5VTEwpOworCWlmICh3biAhPSBOVUxMKQorCXsKKwkgICAgd2NzY3B5KGxwV0NTdHIsIHduKTsKKwkgICAgbkNoYXIgPSB3Y3NsZW4od24pICsgMTsKKwkgICAgdmltX2ZyZWUod24pOworCX0KKyAgICB9CisgICAgaWYgKG5DaGFyID09IDApCisJLyogVXNlIFdpbjMyIGNvbnZlcnNpb24gZnVuY3Rpb24uICovCisJbkNoYXIgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKAorCQllbmNfY29kZXBhZ2UgPiAwID8gZW5jX2NvZGVwYWdlIDogQ1BfQUNQLAorCQlNQl9QUkVDT01QT1NFRCwKKwkJbHBBbnNpSW4sIGxlbiwKKwkJbHBXQ1N0ciwgbGVuKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbkNoYXI7ICsraSkKKwlpZiAobHBXQ1N0cltpXSA9PSAoV09SRCknXHQnKQkvKiByZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgKi8KKwkgICAgbHBXQ1N0cltpXSA9IChXT1JEKScgJzsKKyNlbHNlCisgICAgZG8KKyAgICB7CisJaWYgKCpscEFuc2lJbiA9PSAnXHQnKQorCSAgICAqbHBXQ1N0cisrID0gKFdPUkQpJyAnOworCWVsc2UKKwkgICAgKmxwV0NTdHIrKyA9IChXT1JEKSpscEFuc2lJbjsKKwluQ2hhcisrOworICAgIH0gd2hpbGUgKCpscEFuc2lJbisrKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG5DaGFyOworfQorCisKKyNpZmRlZiBGRUFUX1RFQVJPRkYKKy8qCisgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGFsbCB0aGUgbW9kZWxlc3MgZGlhbG9ncyB0aGF0IG1ha2UgdXAgdGhlCisgKiAidGVhcm9mZiBtZW51cyIgVmVyeSBzaW1wbGUgLSBmb3J3YXJkIGJ1dHRvbiBwcmVzc2VzICh0byBmb29sIFZpbSBpbnRvCisgKiB0aGlua2luZyBpdHMgbWVudXMgaGF2ZSBiZWVuIGNsaWNrZWQpLCBhbmQgZ28gYXdheSB3aGVuIGNsb3NlZC4KKyAqLworICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLCit0ZWFyb2ZmX2NhbGxiYWNrKAorICAgIEhXTkQgaHduZCwKKyAgICBVSU5UIG1lc3NhZ2UsCisgICAgV1BBUkFNIHdQYXJhbSwKKyAgICBMUEFSQU0gbFBhcmFtKQoreworICAgIGlmIChtZXNzYWdlID09IFdNX0lOSVRESUFMT0cpCisJcmV0dXJuIChUUlVFKTsKKworICAgIC8qIE1heSBzaG93IHRoZSBtb3VzZSBwb2ludGVyIGFnYWluLiAqLworICAgIEhhbmRsZU1vdXNlSGlkZShtZXNzYWdlLCBsUGFyYW0pOworCisgICAgaWYgKG1lc3NhZ2UgPT0gV01fQ09NTUFORCkKKyAgICB7CisJaWYgKChXT1JEKShMT1dPUkQod1BhcmFtKSkgJiAweDgwMDApCisJeworCSAgICBQT0lOVCAgIG1wOworCSAgICBSRUNUICAgIHJlY3Q7CisKKwkgICAgaWYgKEdldEN1cnNvclBvcygmbXApICYmIEdldFdpbmRvd1JlY3QoaHduZCwgJnJlY3QpKQorCSAgICB7CisJCSh2b2lkKVRyYWNrUG9wdXBNZW51KAorCQkJIChITUVOVSkoTE9XT1JEKHdQYXJhbSkgXiAweDgwMDApLAorCQkJIFRQTV9MRUZUQUxJR04gfCBUUE1fTEVGVEJVVFRPTiwKKwkJCSAoaW50KXJlY3QucmlnaHQgLSA4LAorCQkJIChpbnQpbXAueSwKKwkJCSAoaW50KTAsCSAgICAvKnJlc2VydmVkIHBhcmFtKi8KKwkJCSBzX2h3bmQsCisJCQkgTlVMTCk7CisJCS8qCisJCSAqIE5PVEU6IFRoZSBwb3AtdXAgbWVudSBjYW4gZWF0IHRoZSBtb3VzZSB1cCBldmVudC4KKwkJICogV2UgZGVhbCB3aXRoIHRoaXMgaW4gbm9ybWFsLmMuCisJCSAqLworCSAgICB9CisJfQorCWVsc2UKKwkgICAgLyogUGFzcyBvbiBtZXNzYWdlcyB0byB0aGUgbWFpbiBWaW0gd2luZG93ICovCisJICAgIFBvc3RNZXNzYWdlKHNfaHduZCwgV01fQ09NTUFORCwgTE9XT1JEKHdQYXJhbSksIDApOworCS8qCisJICogR2l2ZSBtYWluIHdpbmRvdyB0aGUgZm9jdXMgYmFjazogdGhpcyBpcyBzbyBhZnRlcgorCSAqIGNob29zaW5nIGEgdGVhcm9mZiBidXR0b24geW91IGNhbiBzdGFydCB0eXBpbmcgYWdhaW4KKwkgKiBzdHJhaWdodCBhd2F5LgorCSAqLworCSh2b2lkKVNldEZvY3VzKHNfaHduZCk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmICgobWVzc2FnZSA9PSBXTV9TWVNDT01NQU5EKSAmJiAod1BhcmFtID09IFNDX0NMT1NFKSkKKyAgICB7CisJRGVzdHJveVdpbmRvdyhod25kKTsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICAvKiBXaGVuIG1vdmVkIGFyb3VuZCwgZ2l2ZSBtYWluIHdpbmRvdyB0aGUgZm9jdXMgYmFjay4gKi8KKyAgICBpZiAobWVzc2FnZSA9PSBXTV9FWElUU0laRU1PVkUpCisJKHZvaWQpU2V0QWN0aXZlV2luZG93KHNfaHduZCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZW5kaWYKKworCisvKgorICogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIHRoZSAibmV3IGxvb2siIChzbWFsbCwgbm9uLWJvbGQgZm9udCkgb3IgdGhlICJvbGQKKyAqIGxvb2siIChiaWcsIGNsYW5reSBmb250KSBmb3IgZGlhbG9ncywgYW5kIHdvcmsgb3V0IGEgZmV3IHZhbHVlcyBmb3IgdXNlCisgKiBsYXRlciBhY2NvcmRpbmdseS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitnZXRfZGlhbG9nX2ZvbnRfbWV0cmljcyh2b2lkKQoreworICAgIEhEQwkJICAgIGhkYzsKKyAgICBIRk9OVAkgICAgaGZvbnRUb29scyA9IDA7CisgICAgRFdPUkQJICAgIGRsZ0ZvbnRTaXplOworICAgIFNJWkUJICAgIHNpemU7CisjaWZkZWYgVVNFX1NZU01FTlVfRk9OVAorICAgIExPR0ZPTlQJICAgIGxmU3lzbWVudTsKKyNlbmRpZgorCisgICAgc191c2VuZXdsb29rID0gRkFMU0U7CisKKyAgICAvKgorICAgICAqIEZvciBOVDMuNTEgYW5kIFdpbjMycywgd2Ugc3RpY2sgd2l0aCB0aGUgb2xkIGxvb2sKKyAgICAgKiBiZWNhdXNlIGl0IG1hdGNoZXMgZXZlcnl0aGluZyBlbHNlLgorICAgICAqLworICAgIGlmICghaXNfd2lubnRfMygpKQorICAgIHsKKyNpZmRlZiBVU0VfU1lTTUVOVV9GT05UCisJaWYgKGd1aV93MzJfZ2V0X21lbnVfZm9udCgmbGZTeXNtZW51KSA9PSBPSykKKwkgICAgaGZvbnRUb29scyA9IENyZWF0ZUZvbnRJbmRpcmVjdCgmbGZTeXNtZW51KTsKKwllbHNlCisjZW5kaWYKKwloZm9udFRvb2xzID0gQ3JlYXRlRm9udCgtRExHX0ZPTlRfUE9JTlRfU0laRSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJCQkwLCAwLCAwLCAwLCBWQVJJQUJMRV9QSVRDSCAsIERMR19GT05UX05BTUUpOworCisJaWYgKGhmb250VG9vbHMpCisJeworCSAgICBoZGMgPSBHZXREQyhzX2h3bmQpOworCSAgICBTZWxlY3RPYmplY3QoaGRjLCBoZm9udFRvb2xzKTsKKwkgICAgLyoKKwkgICAgICogR2V0VGV4dE1ldHJpY3MoKSBkb2Vzbid0IHJldHVybiB0aGUgcmlnaHQgdmFsdWUgaW4KKwkgICAgICogdG1BdmVDaGFyV2lkdGgsIHNvIHdlIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgZGlhbG9nIGJhc2UgdW5pdHMKKwkgICAgICogb3Vyc2VsdmVzLgorCSAgICAgKi8KKwkgICAgR2V0VGV4dEV4dGVudFBvaW50KGhkYywKKwkJICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKKwkJICAgIDUyLCAmc2l6ZSk7CisJICAgIFJlbGVhc2VEQyhzX2h3bmQsIGhkYyk7CisKKwkgICAgc19kbGdmbnR3aWR0aCA9IChXT1JEKSgoc2l6ZS5jeCAvIDI2ICsgMSkgLyAyKTsKKwkgICAgc19kbGdmbnRoZWlnaHQgPSAoV09SRClzaXplLmN5OworCSAgICBzX3VzZW5ld2xvb2sgPSBUUlVFOworCX0KKyAgICB9CisKKyAgICBpZiAoIXNfdXNlbmV3bG9vaykKKyAgICB7CisJZGxnRm9udFNpemUgPSBHZXREaWFsb2dCYXNlVW5pdHMoKTsJLyogZmFsbCBiYWNrIHRvIGJpZyBvbGQgc3lzdGVtKi8KKwlzX2RsZ2ZudHdpZHRoID0gTE9XT1JEKGRsZ0ZvbnRTaXplKTsKKwlzX2RsZ2ZudGhlaWdodCA9IEhJV09SRChkbGdGb250U2l6ZSk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChGRUFUX01FTlUpICYmIGRlZmluZWQoRkVBVF9URUFST0ZGKQorLyoKKyAqIENyZWF0ZSBhIHBzZXVkby0idGVhcm9mZiBtZW51IiBiYXNlZCBvbiB0aGUgY2hpbGQKKyAqIGl0ZW1zIG9mIGEgZ2l2ZW4gbWVudSBwb2ludGVyLgorICovCisgICAgc3RhdGljIHZvaWQKK2d1aV9tY2hfdGVhcm9mZigKKyAgICBjaGFyX3UJKnRpdGxlLAorICAgIHZpbW1lbnVfVAkqbWVudSwKKyAgICBpbnQJCWluaXRYLAorICAgIGludAkJaW5pdFkpCit7CisgICAgV09SRAkqcCwgKnBkbGd0ZW1wbGF0ZSwgKnBudW1pdGVtcywgKnB0cnVlaGVpZ2h0OworICAgIGludAkJdGVtcGxhdGVfbGVuOworICAgIGludAkJbmNoYXIsIHRleHRXaWR0aCwgc3VibWVudVdpZHRoOworICAgIERXT1JECWxTdHlsZTsKKyAgICBEV09SRAlsRXh0ZW5kZWRTdHlsZTsKKyAgICBXT1JECWRsZ3dpZHRoOworICAgIFdPUkQJbWVudUlEOworICAgIHZpbW1lbnVfVAkqcG1lbnU7CisgICAgdmltbWVudV9UCSp0aGVfbWVudSA9IG1lbnU7CisgICAgSFdORAlod25kOworICAgIEhEQwkJaGRjOworICAgIEhGT05UCWZvbnQsIG9sZEZvbnQ7CisgICAgaW50CQljb2wsIHNwYWNlV2lkdGgsIGxlbjsKKyAgICBpbnQJCWNvbHVtbldpZHRoc1syXTsKKyAgICBjaGFyX3UJKmxhYmVsLCAqdGV4dDsKKyAgICBpbnQJCWFjTGVuID0gMDsKKyAgICBpbnQJCW5hbWVMZW47CisgICAgaW50CQlwYWRkaW5nMCwgcGFkZGluZzEsIHBhZGRpbmcyID0gMDsKKyAgICBpbnQJCXNlcFBhZGRpbmc9MDsKKyNpZmRlZiBVU0VfU1lTTUVOVV9GT05UCisgICAgTE9HRk9OVAlsZlN5c21lbnU7CisgICAgaW50CQl1c2VfbGZTeXNtZW51ID0gRkFMU0U7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgdGhpcyBtZW51IGlzIGFscmVhZHkgdG9ybiBvZmYsIG1vdmUgaXQgdG8gdGhlIG1vdXNlIHBvc2l0aW9uLgorICAgICAqLworICAgIGlmIChJc1dpbmRvdyhtZW51LT50ZWFyb2ZmX2hhbmRsZSkpCisgICAgeworCVBPSU5UIG1wOworCWlmIChHZXRDdXJzb3JQb3MoKExQUE9JTlQpJm1wKSkKKwl7CisJICAgIFNldFdpbmRvd1BvcyhtZW51LT50ZWFyb2ZmX2hhbmRsZSwgTlVMTCwgbXAueCwgbXAueSwgMCwgMCwKKwkJICAgIFNXUF9OT0FDVElWQVRFIHwgU1dQX05PU0laRSB8IFNXUF9OT1pPUkRFUik7CisJfQorCXJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENyZWF0ZSBhIG5ldyB0ZWFyb2ZmLgorICAgICAqLworICAgIGlmICgqdGl0bGUgPT0gTU5VX0hJRERFTl9DSEFSKQorCXRpdGxlKys7CisKKyAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgdG8gc3RvcmUgdGhlIGRpYWxvZyB0ZW1wbGF0ZS4gIEl0J3MgbWFkZSBiaWdnZXIgd2hlbgorICAgICAqIG5lZWRlZC4gKi8KKyAgICB0ZW1wbGF0ZV9sZW4gPSBETEdfQUxMT0NfU0laRTsKKyAgICBwZGxndGVtcGxhdGUgPSBwID0gKFdPUkQgKilMb2NhbEFsbG9jKExQVFIsIHRlbXBsYXRlX2xlbik7CisgICAgaWYgKHAgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBod25kID0gR2V0RGVza3RvcFdpbmRvdygpOworICAgIGhkYyA9IEdldFdpbmRvd0RDKGh3bmQpOworI2lmZGVmIFVTRV9TWVNNRU5VX0ZPTlQKKyAgICBpZiAoZ3VpX3czMl9nZXRfbWVudV9mb250KCZsZlN5c21lbnUpID09IE9LKQorICAgIHsKKwlmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZsZlN5c21lbnUpOworCXVzZV9sZlN5c21lbnUgPSBUUlVFOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICBmb250ID0gQ3JlYXRlRm9udCgtRExHX0ZPTlRfUE9JTlRfU0laRSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJICAgICAgVkFSSUFCTEVfUElUQ0ggLCBETEdfRk9OVF9OQU1FKTsKKyAgICBpZiAoc191c2VuZXdsb29rKQorCW9sZEZvbnQgPSBTZWxlY3RGb250KGhkYywgZm9udCk7CisgICAgZWxzZQorCW9sZEZvbnQgPSBTZWxlY3RGb250KGhkYywgR2V0U3RvY2tPYmplY3QoU1lTVEVNX0ZPTlQpKTsKKworICAgIC8qIENhbGN1bGF0ZSB3aWR0aCBvZiBhIHNpbmdsZSBzcGFjZS4gIFVzZWQgZm9yIHBhZGRpbmcgY29sdW1ucyB0byB0aGUKKyAgICAgKiByaWdodCB3aWR0aC4gKi8KKyAgICBzcGFjZVdpZHRoID0gR2V0VGV4dFdpZHRoKGhkYywgIiAiLCAxKTsKKworICAgIC8qIEZpZ3VyZSBvdXQgbWF4IHdpZHRoIG9mIHRoZSB0ZXh0IGNvbHVtbiwgdGhlIGFjY2VsZXJhdG9yIGNvbHVtbiBhbmQgdGhlCisgICAgICogb3B0aW9uYWwgc3VibWVudSBjb2x1bW4uICovCisgICAgc3VibWVudVdpZHRoID0gMDsKKyAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IDI7IGNvbCsrKQorICAgIHsKKwljb2x1bW5XaWR0aHNbY29sXSA9IDA7CisJZm9yIChwbWVudSA9IG1lbnUtPmNoaWxkcmVuOyBwbWVudSAhPSBOVUxMOyBwbWVudSA9IHBtZW51LT5uZXh0KQorCXsKKwkgICAgLyogVXNlICJkbmFtZSIgaGVyZSB0byBjb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgdmlzaWJsZSB0ZXh0LiAqLworCSAgICB0ZXh0ID0gKGNvbCA9PSAwKSA/IHBtZW51LT5kbmFtZSA6IHBtZW51LT5hY3RleHQ7CisJICAgIGlmICh0ZXh0ICE9IE5VTEwgJiYgKnRleHQgIT0gTlVMKQorCSAgICB7CisJCXRleHRXaWR0aCA9IEdldFRleHRXaWR0aEVuYyhoZGMsIHRleHQsIChpbnQpU1RSTEVOKHRleHQpKTsKKwkJaWYgKHRleHRXaWR0aCA+IGNvbHVtbldpZHRoc1tjb2xdKQorCQkgICAgY29sdW1uV2lkdGhzW2NvbF0gPSB0ZXh0V2lkdGg7CisJICAgIH0KKwkgICAgaWYgKHBtZW51LT5jaGlsZHJlbiAhPSBOVUxMKQorCQlzdWJtZW51V2lkdGggPSBURUFST0ZGX0NPTFVNTl9QQURESU5HICogc3BhY2VXaWR0aDsKKwl9CisgICAgfQorICAgIGlmIChjb2x1bW5XaWR0aHNbMV0gPT0gMCkKKyAgICB7CisJLyogbm8gYWNjZWxlcmF0b3JzICovCisJaWYgKHN1Ym1lbnVXaWR0aCAhPSAwKQorCSAgICBjb2x1bW5XaWR0aHNbMF0gKz0gc3VibWVudVdpZHRoOworCWVsc2UKKwkgICAgY29sdW1uV2lkdGhzWzBdICs9IHNwYWNlV2lkdGg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogdGhlcmUgaXMgYW4gYWNjZWxlcmF0b3IgY29sdW1uICovCisJY29sdW1uV2lkdGhzWzBdICs9IFRFQVJPRkZfQ09MVU1OX1BBRERJTkcgKiBzcGFjZVdpZHRoOworCWNvbHVtbldpZHRoc1sxXSArPSBzdWJtZW51V2lkdGg7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3cgZmluZCB0aGUgdG90YWwgd2lkdGggb2Ygb3VyICdtZW51Jy4KKyAgICAgKi8KKyAgICB0ZXh0V2lkdGggPSBjb2x1bW5XaWR0aHNbMF0gKyBjb2x1bW5XaWR0aHNbMV07CisgICAgaWYgKHN1Ym1lbnVXaWR0aCAhPSAwKQorICAgIHsKKwlzdWJtZW51V2lkdGggPSBHZXRUZXh0V2lkdGgoaGRjLCBURUFST0ZGX1NVQk1FTlVfTEFCRUwsCisJCQkJCSAgKGludClTVFJMRU4oVEVBUk9GRl9TVUJNRU5VX0xBQkVMKSk7CisJdGV4dFdpZHRoICs9IHN1Ym1lbnVXaWR0aDsKKyAgICB9CisgICAgZGxnd2lkdGggPSBHZXRUZXh0V2lkdGhFbmMoaGRjLCB0aXRsZSwgKGludClTVFJMRU4odGl0bGUpKTsKKyAgICBpZiAodGV4dFdpZHRoID4gZGxnd2lkdGgpCisJZGxnd2lkdGggPSB0ZXh0V2lkdGg7CisgICAgZGxnd2lkdGggKz0gMiAqIFRFQVJPRkZfUEFERElOR19YICsgVEVBUk9GRl9CVVRUT05fUEFEX1g7CisKKyAgICAvKiBXOTUgY2FuJ3QgZG8gdGhpbiBkaWFsb2dzLCB0aGV5IGxvb2sgdi4gd2VpcmQhICovCisgICAgaWYgKG1jaF93aW5kb3dzOTUoKSAmJiBkbGd3aWR0aCA8IFRFQVJPRkZfTUlOX1dJRFRIKQorCWRsZ3dpZHRoID0gVEVBUk9GRl9NSU5fV0lEVEg7CisKKyAgICAvKiBzdGFydCB0byBmaWxsIGluIHRoZSBkbGd0ZW1wbGF0ZSBpbmZvcm1hdGlvbi4gIGFkZHJlc3NpbmcgYnkgV09SRHMgKi8KKyAgICBpZiAoc191c2VuZXdsb29rKQorCWxTdHlsZSA9IERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OfCBXU19TWVNNRU5VIHxEU19TRVRGT05UfCBXU19WSVNJQkxFOworICAgIGVsc2UKKwlsU3R5bGUgPSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTnwgV1NfU1lTTUVOVSB8IFdTX1ZJU0lCTEU7CisKKyAgICBsRXh0ZW5kZWRTdHlsZSA9IFdTX0VYX1RPT0xXSU5ET1d8V1NfRVhfU1RBVElDRURHRTsKKyAgICAqcCsrID0gTE9XT1JEKGxTdHlsZSk7CisgICAgKnArKyA9IEhJV09SRChsU3R5bGUpOworICAgICpwKysgPSBMT1dPUkQobEV4dGVuZGVkU3R5bGUpOworICAgICpwKysgPSBISVdPUkQobEV4dGVuZGVkU3R5bGUpOworICAgIHBudW1pdGVtcyA9IHA7CS8qIHNhdmUgd2hlcmUgdGhlIG51bWJlciBvZiBpdGVtcyBtdXN0IGJlIHN0b3JlZCAqLworICAgICpwKysgPSAwOwkJLy8gTnVtYmVyT2ZJdGVtcyh3aWxsIGNoYW5nZSBsYXRlcikKKyAgICBpZiAoaW5pdFggPT0gMHhmZmZmTCkKKwkqcCsrID0gUGl4ZWxUb0RpYWxvZ1goZ3VpX21jaF9nZXRfbW91c2VfeCgpKTsgLy8geAorICAgIGVsc2UKKwkqcCsrID0gUGl4ZWxUb0RpYWxvZ1goaW5pdFgpOyAvLyB4CisgICAgaWYgKGluaXRZID09IDB4ZmZmZkwpCisJKnArKyA9IFBpeGVsVG9EaWFsb2dZKGd1aV9tY2hfZ2V0X21vdXNlX3koKSk7IC8vIHkKKyAgICBlbHNlCisJKnArKyA9IFBpeGVsVG9EaWFsb2dZKGluaXRZKTsgLy8geQorICAgICpwKysgPSBQaXhlbFRvRGlhbG9nWChkbGd3aWR0aCk7ICAgIC8vIGN4CisgICAgcHRydWVoZWlnaHQgPSBwOworICAgICpwKysgPSAwOwkJLy8gZGlhbG9nIGhlaWdodDogY2hhbmdlZCBsYXRlciBhbnl3YXkKKyAgICAqcCsrID0gMDsJCS8vIE1lbnUKKyAgICAqcCsrID0gMDsJCS8vIENsYXNzCisKKyAgICAvKiBjb3B5IHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nICovCisgICAgbmNoYXIgPSBuQ29weUFuc2lUb1dpZGVDaGFyKHAsICgoKnRpdGxlKQorCQkJCSAgICA/IChMUFNUUil0aXRsZQorCQkJCSAgICA6IChMUFNUUikoIlZpbSAiVklNX1ZFUlNJT05fTUVESVVNKSkpOworICAgIHAgKz0gbmNoYXI7CisKKyAgICBpZiAoc191c2VuZXdsb29rKQorICAgIHsKKwkvKiBkbyB0aGUgZm9udCwgc2luY2UgRFNfM0RMT09LIGRvZXNuJ3Qgd29yayBwcm9wZXJseSAqLworI2lmZGVmIFVTRV9TWVNNRU5VX0ZPTlQKKwlpZiAodXNlX2xmU3lzbWVudSkKKwl7CisJICAgIC8qIHBvaW50IHNpemUgKi8KKwkgICAgKnArKyA9IC1NdWxEaXYobGZTeXNtZW51LmxmSGVpZ2h0LCA3MiwKKwkJICAgIEdldERldmljZUNhcHMoaGRjLCBMT0dQSVhFTFNZKSk7CisJICAgIG5jaGFyID0gbkNvcHlBbnNpVG9XaWRlQ2hhcihwLCBURVhUKGxmU3lzbWVudS5sZkZhY2VOYW1lKSk7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgKnArKyA9IERMR19GT05UX1BPSU5UX1NJWkU7CQkvLyBwb2ludCBzaXplCisJICAgIG5jaGFyID0gbkNvcHlBbnNpVG9XaWRlQ2hhciAocCwgVEVYVChETEdfRk9OVF9OQU1FKSk7CisJfQorCXAgKz0gbmNoYXI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBMb29wIG92ZXIgYWxsIHRoZSBpdGVtcyBpbiB0aGUgbWVudS4KKyAgICAgKiBCdXQgc2tpcCBvdmVyIHRoZSB0ZWFyYmFyLgorICAgICAqLworICAgIGlmIChTVFJDTVAobWVudS0+Y2hpbGRyZW4tPm5hbWUsIFRFQVJfU1RSSU5HKSA9PSAwKQorCW1lbnUgPSBtZW51LT5jaGlsZHJlbi0+bmV4dDsKKyAgICBlbHNlCisJbWVudSA9IG1lbnUtPmNoaWxkcmVuOworICAgIGZvciAoIDsgbWVudSAhPSBOVUxMOyBtZW51ID0gbWVudS0+bmV4dCkKKyAgICB7CisJaWYgKG1lbnUtPm1vZGVzID09IDApCS8qIHRoaXMgbWVudSBoYXMganVzdCBiZWVuIGRlbGV0ZWQgKi8KKwkgICAgY29udGludWU7CisJaWYgKG1lbnVfaXNfc2VwYXJhdG9yKG1lbnUtPmRuYW1lKSkKKwl7CisJICAgIHNlcFBhZGRpbmcgKz0gMzsKKwkgICAgY29udGludWU7CisJfQorCisJLyogQ2hlY2sgaWYgdGhlcmUgc3RpbGwgaXMgcGxlbnR5IG9mIHJvb20gaW4gdGhlIHRlbXBsYXRlLiAgTWFrZSBpdAorCSAqIGxhcmdlciB3aGVuIG5lZWRlZC4gKi8KKwlpZiAoKChjaGFyICopcCAtIChjaGFyICopcGRsZ3RlbXBsYXRlKSArIDEwMDAgPiB0ZW1wbGF0ZV9sZW4pCisJeworCSAgICBXT1JEICAgICpuZXdwOworCisJICAgIG5ld3AgPSAoV09SRCAqKUxvY2FsQWxsb2MoTFBUUiwgdGVtcGxhdGVfbGVuICsgNDA5Nik7CisJICAgIGlmIChuZXdwICE9IE5VTEwpCisJICAgIHsKKwkJdGVtcGxhdGVfbGVuICs9IDQwOTY7CisJCW1jaF9tZW1tb3ZlKG5ld3AsIHBkbGd0ZW1wbGF0ZSwKKwkJCQkJICAgIChjaGFyICopcCAtIChjaGFyICopcGRsZ3RlbXBsYXRlKTsKKwkJcCA9IG5ld3AgKyAocCAtIHBkbGd0ZW1wbGF0ZSk7CisJCXBudW1pdGVtcyA9IG5ld3AgKyAocG51bWl0ZW1zIC0gcGRsZ3RlbXBsYXRlKTsKKwkJcHRydWVoZWlnaHQgPSBuZXdwICsgKHB0cnVlaGVpZ2h0IC0gcGRsZ3RlbXBsYXRlKTsKKwkJTG9jYWxGcmVlKExvY2FsSGFuZGxlKHBkbGd0ZW1wbGF0ZSkpOworCQlwZGxndGVtcGxhdGUgPSBuZXdwOworCSAgICB9CisJfQorCisJLyogRmlndXJlIG91dCBtaW5pbWFsIGxlbmd0aCBvZiB0aGlzIG1lbnUgbGFiZWwuICBVc2UgIm5hbWUiIGZvciB0aGUKKwkgKiBhY3R1YWwgdGV4dCwgImRuYW1lIiBmb3IgZXN0aW1hdGluZyB0aGUgZGlzcGxheWVkIHNpemUuICAibmFtZSIKKwkgKiBoYXMgIiZhIiBmb3IgbW5lbW9uaWMgYW5kIGluY2x1ZGVzIHRoZSBhY2NlbGVyYXRvci4gKi8KKwlsZW4gPSBuYW1lTGVuID0gKGludClTVFJMRU4obWVudS0+bmFtZSk7CisJcGFkZGluZzAgPSAoY29sdW1uV2lkdGhzWzBdIC0gR2V0VGV4dFdpZHRoRW5jKGhkYywgbWVudS0+ZG5hbWUsCisJCQkJICAgICAgKGludClTVFJMRU4obWVudS0+ZG5hbWUpKSkgLyBzcGFjZVdpZHRoOworCWxlbiArPSBwYWRkaW5nMDsKKworCWlmIChtZW51LT5hY3RleHQgIT0gTlVMTCkKKwl7CisJICAgIGFjTGVuID0gKGludClTVFJMRU4obWVudS0+YWN0ZXh0KTsKKwkgICAgbGVuICs9IGFjTGVuOworCSAgICB0ZXh0V2lkdGggPSBHZXRUZXh0V2lkdGhFbmMoaGRjLCBtZW51LT5hY3RleHQsIGFjTGVuKTsKKwl9CisJZWxzZQorCSAgICB0ZXh0V2lkdGggPSAwOworCXBhZGRpbmcxID0gKGNvbHVtbldpZHRoc1sxXSAtIHRleHRXaWR0aCkgLyBzcGFjZVdpZHRoOworCWxlbiArPSBwYWRkaW5nMTsKKworCWlmIChtZW51LT5jaGlsZHJlbiA9PSBOVUxMKQorCXsKKwkgICAgcGFkZGluZzIgPSBzdWJtZW51V2lkdGggLyBzcGFjZVdpZHRoOworCSAgICBsZW4gKz0gcGFkZGluZzI7CisJICAgIG1lbnVJRCA9IChXT1JEKShtZW51LT5pZCk7CisJfQorCWVsc2UKKwl7CisJICAgIGxlbiArPSAoaW50KVNUUkxFTihURUFST0ZGX1NVQk1FTlVfTEFCRUwpOworCSAgICBtZW51SUQgPSAoV09SRCkoKERXT1JEKShtZW51LT5zdWJtZW51X2lkKSB8IChEV09SRCkweDgwMDApOworCX0KKworCS8qIEFsbG9jYXRlIG1lbnUgbGFiZWwgYW5kIGZpbGwgaXQgaW4gKi8KKwl0ZXh0ID0gbGFiZWwgPSBhbGxvYygodW5zaWduZWQpbGVuICsgMSk7CisJaWYgKGxhYmVsID09IE5VTEwpCisJICAgIGJyZWFrOworCisJU1RSTkNQWSh0ZXh0LCBtZW51LT5uYW1lLCBuYW1lTGVuKTsKKwl0ZXh0W25hbWVMZW5dID0gTlVMOworCXRleHQgPSB2aW1fc3RyY2hyKHRleHQsIFRBQik7CSAgICAvKiBzdG9wIGF0IFRBQiBiZWZvcmUgYWN0ZXh0ICovCisJaWYgKHRleHQgPT0gTlVMTCkKKwkgICAgdGV4dCA9IGxhYmVsICsgbmFtZUxlbjsJICAgIC8qIG5vIGFjdGV4dCwgdXNlIHdob2xlIG5hbWUgKi8KKwl3aGlsZSAocGFkZGluZzAtLSA+IDApCisJICAgICp0ZXh0KysgPSAnICc7CisJaWYgKG1lbnUtPmFjdGV4dCAhPSBOVUxMKQorCXsKKwkgICAgU1RSTkNQWSh0ZXh0LCBtZW51LT5hY3RleHQsIGFjTGVuKTsKKwkgICAgdGV4dCArPSBhY0xlbjsKKwl9CisJd2hpbGUgKHBhZGRpbmcxLS0gPiAwKQorCSAgICAqdGV4dCsrID0gJyAnOworCWlmIChtZW51LT5jaGlsZHJlbiAhPSBOVUxMKQorCXsKKwkgICAgU1RSQ1BZKHRleHQsIFRFQVJPRkZfU1VCTUVOVV9MQUJFTCk7CisJICAgIHRleHQgKz0gU1RSTEVOKFRFQVJPRkZfU1VCTUVOVV9MQUJFTCk7CisJfQorCWVsc2UKKwl7CisJICAgIHdoaWxlIChwYWRkaW5nMi0tID4gMCkKKwkJKnRleHQrKyA9ICcgJzsKKwl9CisJKnRleHQgPSBOVUw7CisKKwkvKgorCSAqIEJTX0xFRlQgd2lsbCBqdXN0IGJlIGlnbm9yZWQgb24gV2luMzJzL05UMy41eCAtIG9uCisJICogVzk1L05UNCBpdCBtYWtlcyB0aGUgdGVhci1vZmYgbG9vayBtb3JlIGxpa2UgYSBtZW51LgorCSAqLworCXAgPSBhZGRfZGlhbG9nX2VsZW1lbnQocCwKKwkJQlNfUFVTSEJVVFRPTnxCU19MRUZULAorCQkoV09SRClQaXhlbFRvRGlhbG9nWChURUFST0ZGX1BBRERJTkdfWCksCisJCShXT1JEKShzZXBQYWRkaW5nICsgMSArIDEzICogKCpwbnVtaXRlbXMpKSwKKwkJKFdPUkQpUGl4ZWxUb0RpYWxvZ1goZGxnd2lkdGggLSAyICogVEVBUk9GRl9QQURESU5HX1gpLAorCQkoV09SRCkxMiwKKwkJbWVudUlELCAoV09SRCkweDAwODAsIGxhYmVsKTsKKwl2aW1fZnJlZShsYWJlbCk7CisJKCpwbnVtaXRlbXMpKys7CisgICAgfQorCisgICAgKnB0cnVlaGVpZ2h0ID0gKFdPUkQpKHNlcFBhZGRpbmcgKyAxICsgMTMgKiAoKnBudW1pdGVtcykpOworCisKKyAgICAvKiBzaG93IG1vZGVsZXNzbHkgKi8KKyAgICB0aGVfbWVudS0+dGVhcm9mZl9oYW5kbGUgPSBDcmVhdGVEaWFsb2dJbmRpcmVjdCgKKwkgICAgc19oaW5zdCwKKwkgICAgKExQRExHVEVNUExBVEUpcGRsZ3RlbXBsYXRlLAorCSAgICBzX2h3bmQsCisJICAgIChETEdQUk9DKXRlYXJvZmZfY2FsbGJhY2spOworCisgICAgTG9jYWxGcmVlKExvY2FsSGFuZGxlKHBkbGd0ZW1wbGF0ZSkpOworICAgIFNlbGVjdEZvbnQoaGRjLCBvbGRGb250KTsKKyAgICBEZWxldGVPYmplY3QoZm9udCk7CisgICAgUmVsZWFzZURDKGh3bmQsIGhkYyk7CisKKyAgICAvKgorICAgICAqIFJlYXNzZXJ0IG91cnNlbHZlcyBhcyB0aGUgYWN0aXZlIHdpbmRvdy4gIFRoaXMgaXMgc28gdGhhdCBhZnRlciBjcmVhdGluZworICAgICAqIGEgdGVhcm9mZiwgdGhlIHVzZXIgZG9lc24ndCBoYXZlIHRvIGNsaWNrIHdpdGggdGhlIG1vdXNlIGp1c3QgdG8gc3RhcnQKKyAgICAgKiB0eXBpbmcgYWdhaW4hCisgICAgICovCisgICAgKHZvaWQpU2V0QWN0aXZlV2luZG93KHNfaHduZCk7CisKKyAgICAvKiBtYWtlIHN1cmUgdGhlIHJpZ2h0IGJ1dHRvbnMgYXJlIGVuYWJsZWQgKi8KKyAgICBmb3JjZV9tZW51X3VwZGF0ZSA9IFRSVUU7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSB8fCBkZWZpbmVkKFBST1RPKQorI2luY2x1ZGUgImd1aV93MzJfcmMuaCIKKworLyogVGhpcyBub3QgZGVmaW5lZCBpbiBvbGRlciBTREtzICovCisjIGlmbmRlZiBUQlNUWUxFX0ZMQVQKKyMgIGRlZmluZSBUQlNUWUxFX0ZMQVQJCTB4MDgwMAorIyBlbmRpZgorCisvKgorICogQ3JlYXRlIHRoZSB0b29sYmFyLCBpbml0aWFsbHkgdW5wb3B1bGF0ZWQuCisgKiAgKGp1c3QgbGlrZSB0aGUgbWVudSwgdGhlcmUgYXJlIG5vIGRlZmF1bHRzLCBpdCdzIGFsbAorICogIHNldCB1cCB0aHJvdWdoIG1lbnUudmltKQorICovCisgICAgc3RhdGljIHZvaWQKK2luaXRpYWxpc2VfdG9vbGJhcih2b2lkKQoreworICAgIEluaXRDb21tb25Db250cm9scygpOworICAgIHNfdG9vbGJhcmh3bmQgPSBDcmVhdGVUb29sYmFyRXgoCisJCSAgICBzX2h3bmQsCisJCSAgICBXU19DSElMRCB8IFRCU1RZTEVfVE9PTFRJUFMgfCBUQlNUWUxFX0ZMQVQsCisJCSAgICA0MDAwLAkJLy9hbnkgb2xkIGJpZyBudW1iZXIKKwkJICAgIDMxLAkJCS8vbnVtYmVyIG9mIGltYWdlcyBpbiBpbml0YWwgYml0bWFwCisJCSAgICBzX2hpbnN0LAorCQkgICAgSURSX1RPT0xCQVIxLAkvLyBpZCBvZiBpbml0aWFsIGJpdG1hcAorCQkgICAgTlVMTCwKKwkJICAgIDAsCQkJLy8gaW5pdGlhbCBudW1iZXIgb2YgYnV0dG9ucworCQkgICAgVE9PTEJBUl9CVVRUT05fV0lEVEgsIC8vYXBpIGd1aWRlIGlzIHdyb25nIQorCQkgICAgVE9PTEJBUl9CVVRUT05fSEVJR0hULAorCQkgICAgVE9PTEJBUl9CVVRUT05fV0lEVEgsCisJCSAgICBUT09MQkFSX0JVVFRPTl9IRUlHSFQsCisJCSAgICBzaXplb2YoVEJCVVRUT04pCisJCSAgICApOworCisgICAgZ3VpX21jaF9zaG93X3Rvb2xiYXIodmltX3N0cmNocihwX2dvLCBHT19UT09MQkFSKSAhPSBOVUxMKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2dldF90b29sYmFyX2JpdG1hcCh2aW1tZW51X1QgKm1lbnUpCit7CisgICAgaW50IGkgPSAtMTsKKworICAgIC8qCisgICAgICogQ2hlY2sgdXNlciBiaXRtYXBzIGZpcnN0LCB1bmxlc3MgYnVpbHRpbiBpcyBzcGVjaWZpZWQuCisgICAgICovCisgICAgaWYgKCFpc193aW5udF8zKCkgJiYgIW1lbnUtPmljb25fYnVpbHRpbikKKyAgICB7CisJY2hhcl91IGZuYW1lW01BWFBBVEhMXTsKKwlIQU5ETEUgaGJpdG1hcCA9IE5VTEw7CisKKwlpZiAobWVudS0+aWNvbmZpbGUgIT0gTlVMTCkKKwl7CisJICAgIGd1aV9maW5kX2ljb25maWxlKG1lbnUtPmljb25maWxlLCBmbmFtZSwgImJtcCIpOworCSAgICBoYml0bWFwID0gTG9hZEltYWdlKAorCQkJTlVMTCwKKwkJCWZuYW1lLAorCQkJSU1BR0VfQklUTUFQLAorCQkJVE9PTEJBUl9CVVRUT05fV0lEVEgsCisJCQlUT09MQkFSX0JVVFRPTl9IRUlHSFQsCisJCQlMUl9MT0FERlJPTUZJTEUgfAorCQkJTFJfTE9BRE1BUDNEQ09MT1JTCisJCQkpOworCX0KKworCS8qCisJICogSWYgdGhlIExvYWRJbWFnZSBjYWxsIGZhaWxlZCwgb3IgdGhlICJpY29uPSIgZmlsZQorCSAqIGRpZG4ndCBleGlzdCBvciB3YXNuJ3Qgc3BlY2lmaWVkLCB0cnkgdGhlIG1lbnUgbmFtZQorCSAqLworCWlmIChoYml0bWFwID09IE5VTEwKKwkJJiYgKGd1aV9maW5kX2JpdG1hcChtZW51LT5uYW1lLCBmbmFtZSwgImJtcCIpID09IE9LKSkKKwkgICAgaGJpdG1hcCA9IExvYWRJbWFnZSgKKwkJICAgIE5VTEwsCisJCSAgICBmbmFtZSwKKwkJICAgIElNQUdFX0JJVE1BUCwKKwkJICAgIFRPT0xCQVJfQlVUVE9OX1dJRFRILAorCQkgICAgVE9PTEJBUl9CVVRUT05fSEVJR0hULAorCQkgICAgTFJfTE9BREZST01GSUxFIHwKKwkJICAgIExSX0xPQURNQVAzRENPTE9SUworCQkpOworCisJaWYgKGhiaXRtYXAgIT0gTlVMTCkKKwl7CisJICAgIFRCQUREQklUTUFQIHRiQWRkQml0bWFwOworCisJICAgIHRiQWRkQml0bWFwLmhJbnN0ID0gTlVMTDsKKwkgICAgdGJBZGRCaXRtYXAubklEID0gKFVJTlQpaGJpdG1hcDsKKworCSAgICBpID0gKGludClTZW5kTWVzc2FnZShzX3Rvb2xiYXJod25kLCBUQl9BRERCSVRNQVAsCisJCQkgICAgKFdQQVJBTSkxLCAoTFBBUkFNKSZ0YkFkZEJpdG1hcCk7CisJICAgIC8qIGkgd2lsbCBiZSBzZXQgdG8gLTEgaWYgaXQgZmFpbHMgKi8KKwl9CisgICAgfQorICAgIGlmIChpID09IC0xICYmIG1lbnUtPmljb25pZHggPj0gMCAmJiBtZW51LT5pY29uaWR4IDwgVE9PTEJBUl9CSVRNQVBfQ09VTlQpCisJaSA9IG1lbnUtPmljb25pZHg7CisKKyAgICByZXR1cm4gaTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX09MRSkgfHwgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogTWFrZSB0aGUgR1VJIHdpbmRvdyBjb21lIHRvIHRoZSBmb3JlZ3JvdW5kLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZm9yZWdyb3VuZCh2b2lkKQoreworICAgIGlmIChJc0ljb25pYyhzX2h3bmQpKQorCSBTZW5kTWVzc2FnZShzX2h3bmQsIFdNX1NZU0NPTU1BTkQsIFNDX1JFU1RPUkUsIDApOworICAgIFNldEZvcmVncm91bmRXaW5kb3coc19od25kKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX01CWVRFX0lNRSkgJiYgZGVmaW5lZChEWU5BTUlDX0lNRSkKKyAgICBzdGF0aWMgdm9pZAorZHluX2ltbV9sb2FkKHZvaWQpCit7CisgICAgaExpYkltbSA9IExvYWRMaWJyYXJ5KCJpbW0zMi5kbGwiKTsKKyAgICBpZiAoaExpYkltbSA9PSBOVUxMKQorCXJldHVybjsKKworICAgIHBJbW1HZXRDb21wb3NpdGlvblN0cmluZ0EKKwkgICAgPSAodm9pZCAqKUdldFByb2NBZGRyZXNzKGhMaWJJbW0sICJJbW1HZXRDb21wb3NpdGlvblN0cmluZ0EiKTsKKyAgICBwSW1tR2V0Q29tcG9zaXRpb25TdHJpbmdXCisJICAgID0gKHZvaWQgKilHZXRQcm9jQWRkcmVzcyhoTGliSW1tLCAiSW1tR2V0Q29tcG9zaXRpb25TdHJpbmdXIik7CisgICAgcEltbUdldENvbnRleHQKKwkgICAgPSAodm9pZCAqKUdldFByb2NBZGRyZXNzKGhMaWJJbW0sICJJbW1HZXRDb250ZXh0Iik7CisgICAgcEltbUFzc29jaWF0ZUNvbnRleHQKKwkgICAgPSAodm9pZCAqKUdldFByb2NBZGRyZXNzKGhMaWJJbW0sICJJbW1Bc3NvY2lhdGVDb250ZXh0Iik7CisgICAgcEltbVJlbGVhc2VDb250ZXh0CisJICAgID0gKHZvaWQgKilHZXRQcm9jQWRkcmVzcyhoTGliSW1tLCAiSW1tUmVsZWFzZUNvbnRleHQiKTsKKyAgICBwSW1tR2V0T3BlblN0YXR1cworCSAgICA9ICh2b2lkICopR2V0UHJvY0FkZHJlc3MoaExpYkltbSwgIkltbUdldE9wZW5TdGF0dXMiKTsKKyAgICBwSW1tU2V0T3BlblN0YXR1cworCSAgICA9ICh2b2lkICopR2V0UHJvY0FkZHJlc3MoaExpYkltbSwgIkltbVNldE9wZW5TdGF0dXMiKTsKKyAgICBwSW1tR2V0Q29tcG9zaXRpb25Gb250CisJICAgID0gKHZvaWQgKilHZXRQcm9jQWRkcmVzcyhoTGliSW1tLCAiSW1tR2V0Q29tcG9zaXRpb25Gb250QSIpOworICAgIHBJbW1TZXRDb21wb3NpdGlvbkZvbnQKKwkgICAgPSAodm9pZCAqKUdldFByb2NBZGRyZXNzKGhMaWJJbW0sICJJbW1TZXRDb21wb3NpdGlvbkZvbnRBIik7CisgICAgcEltbVNldENvbXBvc2l0aW9uV2luZG93CisJICAgID0gKHZvaWQgKilHZXRQcm9jQWRkcmVzcyhoTGliSW1tLCAiSW1tU2V0Q29tcG9zaXRpb25XaW5kb3ciKTsKKyAgICBwSW1tR2V0Q29udmVyc2lvblN0YXR1cworCSAgICA9ICh2b2lkICopR2V0UHJvY0FkZHJlc3MoaExpYkltbSwgIkltbUdldENvbnZlcnNpb25TdGF0dXMiKTsKKworICAgIGlmICggICAgICAgcEltbUdldENvbXBvc2l0aW9uU3RyaW5nQSA9PSBOVUxMCisJICAgIHx8IHBJbW1HZXRDb21wb3NpdGlvblN0cmluZ1cgPT0gTlVMTAorCSAgICB8fCBwSW1tR2V0Q29udGV4dCA9PSBOVUxMCisJICAgIHx8IHBJbW1Bc3NvY2lhdGVDb250ZXh0ID09IE5VTEwKKwkgICAgfHwgcEltbVJlbGVhc2VDb250ZXh0ID09IE5VTEwKKwkgICAgfHwgcEltbUdldE9wZW5TdGF0dXMgPT0gTlVMTAorCSAgICB8fCBwSW1tU2V0T3BlblN0YXR1cyA9PSBOVUxMCisJICAgIHx8IHBJbW1HZXRDb21wb3NpdGlvbkZvbnQgPT0gTlVMTAorCSAgICB8fCBwSW1tU2V0Q29tcG9zaXRpb25Gb250ID09IE5VTEwKKwkgICAgfHwgcEltbVNldENvbXBvc2l0aW9uV2luZG93ID09IE5VTEwKKwkgICAgfHwgcEltbUdldENvbnZlcnNpb25TdGF0dXMgPT0gTlVMTCkKKyAgICB7CisJRnJlZUxpYnJhcnkoaExpYkltbSk7CisJaExpYkltbSA9IE5VTEw7CisJcEltbUdldENvbnRleHQgPSBOVUxMOworCXJldHVybjsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKKyMgaWYgMAkvKiBub3QgdXNlZCAqLworICAgIGludAorZHluX2ltbV91bmxvYWQodm9pZCkKK3sKKyAgICBpZiAoIWhMaWJJbW0pCisJcmV0dXJuIEZBTFNFOworICAgIEZyZWVMaWJyYXJ5KGhMaWJJbW0pOworICAgIGhMaWJJbW0gPSBOVUxMOworICAgIHJldHVybiBUUlVFOworfQorIyBlbmRpZgorCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9TSUdOX0lDT05TKSB8fCBkZWZpbmVkKFBST1RPKQorCisjIGlmZGVmIEZFQVRfWFBNX1czMgorIyAgZGVmaW5lIElNQUdFX1hQTSAgIDEwMAorIyBlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfc2lnbmljb25fdAoreworICAgIEhBTkRMRQloSW1hZ2U7CisgICAgVUlOVAl1VHlwZTsKKyNpZmRlZiBGRUFUX1hQTV9XMzIKKyAgICBIQU5ETEUJaFNoYXBlOwkvKiBNYXNrIGJpdG1hcCBoYW5kbGUgKi8KKyNlbmRpZgorfSBzaWduaWNvbl90OworCisgICAgdm9pZAorZ3VpX21jaF9kcmF3c2lnbihyb3csIGNvbCwgdHlwZW5yKQorICAgIGludAkJcm93OworICAgIGludAkJY29sOworICAgIGludAkJdHlwZW5yOworeworICAgIHNpZ25pY29uX3QgKnNpZ247CisgICAgaW50IHgsIHksIHcsIGg7CisKKyAgICBpZiAoIWd1aS5pbl91c2UgfHwgKHNpZ24gPSAoc2lnbmljb25fdCAqKXNpZ25fZ2V0X2ltYWdlKHR5cGVucikpID09IE5VTEwpCisJcmV0dXJuOworCisgICAgeCA9IFRFWFRfWChjb2wpOworICAgIHkgPSBURVhUX1kocm93KTsKKyAgICB3ID0gZ3VpLmNoYXJfd2lkdGggKiAyOworICAgIGggPSBndWkuY2hhcl9oZWlnaHQ7CisgICAgc3dpdGNoIChzaWduLT51VHlwZSkKKyAgICB7CisJY2FzZSBJTUFHRV9CSVRNQVA6CisJICAgIHsKKwkJSERDIGhkY01lbTsKKwkJSEJJVE1BUCBoYm1wT2xkOworCisJCWhkY01lbSA9IENyZWF0ZUNvbXBhdGlibGVEQyhzX2hkYyk7CisJCWhibXBPbGQgPSAoSEJJVE1BUClTZWxlY3RPYmplY3QoaGRjTWVtLCBzaWduLT5oSW1hZ2UpOworCQlCaXRCbHQoc19oZGMsIHgsIHksIHcsIGgsIGhkY01lbSwgMCwgMCwgU1JDQ09QWSk7CisJCVNlbGVjdE9iamVjdChoZGNNZW0sIGhibXBPbGQpOworCQlEZWxldGVEQyhoZGNNZW0pOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgSU1BR0VfSUNPTjoKKwljYXNlIElNQUdFX0NVUlNPUjoKKwkgICAgRHJhd0ljb25FeChzX2hkYywgeCwgeSwgKEhJQ09OKXNpZ24tPmhJbWFnZSwgdywgaCwgMCwgTlVMTCwgRElfTk9STUFMKTsKKwkgICAgYnJlYWs7CisjaWZkZWYgRkVBVF9YUE1fVzMyCisJY2FzZSBJTUFHRV9YUE06CisJICAgIHsKKwkJSERDIGhkY01lbTsKKwkJSEJJVE1BUCBoYm1wT2xkOworCisJCWhkY01lbSA9IENyZWF0ZUNvbXBhdGlibGVEQyhzX2hkYyk7CisJCWhibXBPbGQgPSAoSEJJVE1BUClTZWxlY3RPYmplY3QoaGRjTWVtLCBzaWduLT5oU2hhcGUpOworCQkvKiBNYWtlIGhvbGUgKi8KKwkJQml0Qmx0KHNfaGRjLCB4LCB5LCB3LCBoLCBoZGNNZW0sIDAsIDAsIFNSQ0FORCk7CisKKwkJU2VsZWN0T2JqZWN0KGhkY01lbSwgc2lnbi0+aEltYWdlKTsKKwkJLyogUGFpbnQgc2lnbiAqLworCQlCaXRCbHQoc19oZGMsIHgsIHksIHcsIGgsIGhkY01lbSwgMCwgMCwgU1JDUEFJTlQpOworCQlTZWxlY3RPYmplY3QoaGRjTWVtLCBoYm1wT2xkKTsKKwkJRGVsZXRlREMoaGRjTWVtKTsKKwkgICAgfQorCSAgICBicmVhazsKKyNlbmRpZgorICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitjbG9zZV9zaWduaWNvbl9pbWFnZShzaWduaWNvbl90ICpzaWduKQoreworICAgIGlmIChzaWduKQorCXN3aXRjaCAoc2lnbi0+dVR5cGUpCisJeworCSAgICBjYXNlIElNQUdFX0JJVE1BUDoKKwkJRGVsZXRlT2JqZWN0KChIR0RJT0JKKXNpZ24tPmhJbWFnZSk7CisJCWJyZWFrOworCSAgICBjYXNlIElNQUdFX0NVUlNPUjoKKwkJRGVzdHJveUN1cnNvcigoSENVUlNPUilzaWduLT5oSW1hZ2UpOworCQlicmVhazsKKwkgICAgY2FzZSBJTUFHRV9JQ09OOgorCQlEZXN0cm95SWNvbigoSElDT04pc2lnbi0+aEltYWdlKTsKKwkJYnJlYWs7CisjaWZkZWYgRkVBVF9YUE1fVzMyCisJICAgIGNhc2UgSU1BR0VfWFBNOgorCQlEZWxldGVPYmplY3QoKEhCSVRNQVApc2lnbi0+aEltYWdlKTsKKwkJRGVsZXRlT2JqZWN0KChIQklUTUFQKXNpZ24tPmhTaGFwZSk7CisJCWJyZWFrOworI2VuZGlmCisJfQorfQorCisgICAgdm9pZCAqCitndWlfbWNoX3JlZ2lzdGVyX3NpZ24oc2lnbmZpbGUpCisgICAgY2hhcl91CSpzaWduZmlsZTsKK3sKKyAgICBzaWduaWNvbl90CXNpZ24sICpwc2lnbjsKKyAgICBjaGFyX3UJKmV4dDsKKworICAgIGlmIChpc193aW5udF8zKCkpCisgICAgeworCUVNU0coXyhlX3NpZ25kYXRhKSk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2lnbi5oSW1hZ2UgPSBOVUxMOworICAgIGV4dCA9IHNpZ25maWxlICsgU1RSTEVOKHNpZ25maWxlKSAtIDQ7IC8qIGdldCBleHRlbnRpb24gKi8KKyAgICBpZiAoZXh0ID4gc2lnbmZpbGUpCisgICAgeworCWludCBkb19sb2FkID0gMTsKKworCWlmICghU1RSSUNNUChleHQsICIuYm1wIikpCisJICAgIHNpZ24udVR5cGUgPSAgSU1BR0VfQklUTUFQOworCWVsc2UgaWYgKCFTVFJJQ01QKGV4dCwgIi5pY28iKSkKKwkgICAgc2lnbi51VHlwZSA9ICBJTUFHRV9JQ09OOworCWVsc2UgaWYgKCFTVFJJQ01QKGV4dCwgIi5jdXIiKSB8fCAhU1RSSUNNUChleHQsICIuYW5pIikpCisJICAgIHNpZ24udVR5cGUgPSAgSU1BR0VfQ1VSU09SOworCWVsc2UKKwkgICAgZG9fbG9hZCA9IDA7CisKKwlpZiAoZG9fbG9hZCkKKwkgICAgc2lnbi5oSW1hZ2UgPSAoSEFORExFKUxvYWRJbWFnZShOVUxMLCBzaWduZmlsZSwgc2lnbi51VHlwZSwKKwkJICAgIGd1aS5jaGFyX3dpZHRoICogMiwgZ3VpLmNoYXJfaGVpZ2h0LAorCQkgICAgTFJfTE9BREZST01GSUxFIHwgTFJfQ1JFQVRFRElCU0VDVElPTik7CisjaWZkZWYgRkVBVF9YUE1fVzMyCisJaWYgKCFTVFJJQ01QKGV4dCwgIi54cG0iKSkKKwl7CisJICAgIHNpZ24udVR5cGUgPSBJTUFHRV9YUE07CisJICAgIExvYWRYcG1JbWFnZShzaWduZmlsZSwgKEhCSVRNQVAgKikmc2lnbi5oSW1hZ2UsIChIQklUTUFQICopJnNpZ24uaFNoYXBlKTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgICBwc2lnbiA9IE5VTEw7CisgICAgaWYgKHNpZ24uaEltYWdlICYmIChwc2lnbiA9IChzaWduaWNvbl90ICopYWxsb2Moc2l6ZW9mKHNpZ25pY29uX3QpKSkKKwkJCQkJCQkJICAgICAgIT0gTlVMTCkKKwkqcHNpZ24gPSBzaWduOworCisgICAgaWYgKCFwc2lnbikKKyAgICB7CisJaWYgKHNpZ24uaEltYWdlKQorCSAgICBjbG9zZV9zaWduaWNvbl9pbWFnZSgmc2lnbik7CisJRU1TRyhfKGVfc2lnbmRhdGEpKTsKKyAgICB9CisgICAgcmV0dXJuICh2b2lkICopcHNpZ247CisKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZGVzdHJveV9zaWduKHNpZ24pCisgICAgdm9pZCAqc2lnbjsKK3sKKyAgICBpZiAoc2lnbikKKyAgICB7CisJY2xvc2Vfc2lnbmljb25faW1hZ2UoKHNpZ25pY29uX3QgKilzaWduKTsKKwl2aW1fZnJlZShzaWduKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQkVWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qIEJBTExPT04tRVZBTCBJTVBMRU1FTlRBVElPTiBGT1IgV0lORE9XUy4KKyAqICBBZGRlZCBieSBTZXJnZXkgS2hvcmV2CisgKgorICogVGhlIG9ubHkgcmV1c2VkIHRoaW5nIGlzIGd1aV9iZXZhbC5oIGFuZCBndWlfbWNoX2dldF9iZXZhbF9pbmZvKCkKKyAqIGZyb20gZ3VpX2JldmFsLmMgKG5vdGUgaXQgdXNlcyB4IGFuZCB5IG9mIHRoZSBCYWxsb29uRXZhbCBzdHJ1Y3QKKyAqIHRvIGdldCBjdXJyZW50IG1vdXNlIHBvc2l0aW9uKS4KKyAqCisgKiBUcnlpbmcgdG8gdXNlIGFzIG1vcmUgV2luZG93cyBzZXJ2aWNlcyBhcyBwb3NzaWJsZSwgYW5kIGFzIGxlc3MKKyAqIElFIHZlcnNpb24gYXMgcG9zc2libGUgOikpLgorICoKKyAqIDEpIERvbid0IGNyZWF0ZSBUb29sVGlwIGluIGd1aV9tY2hfY3JlYXRlX2JldmFsX2FyZWEsIG9ubHkgaW5pdGlhbGl6ZQorICogQmFsbG9vbkV2YWwgc3RydWN0LgorICogMikgRW5hYmxlL0Rpc2FibGUgc2ltcGx5IGNyZWF0ZS9raWxsIEJhbGxvb25FdmFsIFRpbWVyCisgKiAzKSBXaGVuIHRoZXJlIHdhcyBlbm91Z2ggaW5hY3Rpdml0eSwgdGltZXIgcHJvY2VkdXJlIHBvc3RzCisgKiBhc3luYyByZXF1ZXN0IHRvIGRlYnVnZ2VyCisgKiA0KSBndWlfbWNoX3Bvc3RfYmFsbG9vbiAoaW52b2tlZCBmcm9tIG5ldGJlYW5zLmMpIGNyZWF0ZXMgdG9vbHRpcCBjb250cm9sCisgKiBhbmQgcGVyZm9ybXMgc29tZSBhY3Rpb25zIHRvIHNob3cgaXQgQVNBUAorICogNSkgV01fTk9UT0ZZOlRUTl9QT1AgZGVzdHJveXMgY3JlYXRlZCB0b29sdGlwCisgKi8KKworICAgIHN0YXRpYyB2b2lkCittYWtlX3Rvb2x0aXAoYmV2YWwsIHRleHQsIHB0KQorICAgIEJhbGxvb25FdmFsICpiZXZhbDsKKyAgICBjaGFyICp0ZXh0OworICAgIFBPSU5UIHB0OworeworICAgIFRPT0xJTkZPCXRpOworCisgICAgYmV2YWwtPmJhbGxvb24gPSBDcmVhdGVXaW5kb3dFeChXU19FWF9UT1BNT1NULCBUT09MVElQU19DTEFTUywKKwkgICAgTlVMTCwgV1NfUE9QVVAgfCBUVFNfTk9QUkVGSVggfCBUVFNfQUxXQVlTVElQLAorCSAgICBDV19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULAorCSAgICBiZXZhbC0+dGFyZ2V0LCBOVUxMLCBzX2hpbnN0LCBOVUxMKTsKKworICAgIFNldFdpbmRvd1BvcyhiZXZhbC0+YmFsbG9vbiwgSFdORF9UT1BNT1NULCAwLCAwLCAwLCAwLAorCSAgICBTV1BfTk9NT1ZFIHwgU1dQX05PU0laRSB8IFNXUF9OT0FDVElWQVRFKTsKKworICAgIHRpLmNiU2l6ZSA9IHNpemVvZihUT09MSU5GTyk7CisgICAgdGkudUZsYWdzID0gVFRGX1NVQkNMQVNTOworICAgIHRpLmh3bmQgPSBiZXZhbC0+dGFyZ2V0OworICAgIHRpLmhpbnN0ID0gMDsgLyogRG9uJ3QgdXNlIHN0cmluZyByZXNvdXJjZXMgKi8KKyAgICB0aS51SWQgPSBJRF9CRVZBTF9UT09MVElQOworICAgIHRpLmxwc3pUZXh0ID0gdGV4dDsKKworICAgIC8qIExpbWl0IGJhbGxvb25ldmFsIGJvdW5kaW5nIHJlY3QgdG8gQ3Vyc29yUG9zIG5laWdoYm91cmhvb2QgKi8KKyAgICB0aS5yZWN0LmxlZnQgPSBwdC54IC0gMzsKKyAgICB0aS5yZWN0LnRvcCA9IHB0LnkgLSAzOworICAgIHRpLnJlY3QucmlnaHQgPSBwdC54ICsgMzsKKyAgICB0aS5yZWN0LmJvdHRvbSA9IHB0LnkgKyAzOworCisgICAgU2VuZE1lc3NhZ2UoYmV2YWwtPmJhbGxvb24sIFRUTV9BRERUT09MLCAwLCAoTFBBUkFNKSZ0aSk7CisgICAgLyogTWFrZSB0b29sdGlwIGFwcGVhciBzb29uZXIgKi8KKyAgICBTZW5kTWVzc2FnZShiZXZhbC0+YmFsbG9vbiwgVFRNX1NFVERFTEFZVElNRSwgVFREVF9JTklUSUFMLCAxMCk7CisgICAgLyoKKyAgICAgKiBIQUNLOiBmb3JjZSB0b29sdGlwIHRvIGFwcGVhciwgYmVjYXVzZSBpdCdsbCBub3QgYXBwZWFyIHVudGlsCisgICAgICogZmlyc3QgbW91c2UgbW92ZS4gRCptbiBNJAorICAgICAqLworICAgIG1vdXNlX2V2ZW50KE1PVVNFRVZFTlRGX01PVkUsIDEsIDEsIDAsIDApOworICAgIG1vdXNlX2V2ZW50KE1PVVNFRVZFTlRGX01PVkUsIChEV09SRCktMSwgKERXT1JEKS0xLCAwLCAwKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitkZWxldGVfdG9vbHRpcChiZXZhbCkKKyAgICBCYWxsb29uRXZhbAkqYmV2YWw7Cit7CisgICAgRGVzdHJveVdpbmRvdyhiZXZhbC0+YmFsbG9vbik7Cit9CisKKyAgICBzdGF0aWMgVk9JRCBDQUxMQkFDSworQmV2YWxUaW1lclByb2MoaHduZCwgdU1zZywgaWRFdmVudCwgZHdUaW1lKQorICAgIEhXTkQgICAgaHduZDsKKyAgICBVSU5UICAgIHVNc2c7CisgICAgVUlOVCAgICBpZEV2ZW50OworICAgIERXT1JEICAgZHdUaW1lOworeworICAgIFBPSU5UCXB0OworICAgIFJFQ1QJcmVjdDsKKworICAgIGlmIChjdXJfYmV2YWwgPT0gTlVMTCB8fCBjdXJfYmV2YWwtPnNob3dTdGF0ZSA9PSBTaFNfU0hPV0lORyB8fCAhcF9iZXZhbCkKKwlyZXR1cm47CisKKyAgICBHZXRDdXJzb3JQb3MoJnB0KTsKKyAgICBpZiAoV2luZG93RnJvbVBvaW50KHB0KSAhPSBzX3RleHRBcmVhKQorCXJldHVybjsKKworICAgIFNjcmVlblRvQ2xpZW50KHNfdGV4dEFyZWEsICZwdCk7CisgICAgR2V0Q2xpZW50UmVjdChzX3RleHRBcmVhLCAmcmVjdCk7CisgICAgaWYgKCFQdEluUmVjdCgmcmVjdCwgcHQpKQorCXJldHVybjsKKworICAgIGlmIChMYXN0QWN0aXZpdHkgPiAwCisJICAgICYmIChkd1RpbWUgLSBMYXN0QWN0aXZpdHkpID49IChEV09SRClwX2JkbGF5CisJICAgICYmIChjdXJfYmV2YWwtPnNob3dTdGF0ZSAhPSBTaFNfUEVORElORworCQl8fCBhYnMoY3VyX2JldmFsLT54IC0gcHQueCkgPiAzCisJCXx8IGFicyhjdXJfYmV2YWwtPnkgLSBwdC55KSA+IDMpKQorICAgIHsKKwkvKiBQb2ludGVyIHJlc3RpbmcgaW4gb25lIHBsYWNlIGxvbmcgZW5vdWdoLCBpdCdzIHRpbWUgdG8gc2hvdworCSAqIHRoZSB0b29sdGlwLiAqLworCWN1cl9iZXZhbC0+c2hvd1N0YXRlID0gU2hTX1BFTkRJTkc7CisJY3VyX2JldmFsLT54ID0gcHQueDsKKwljdXJfYmV2YWwtPnkgPSBwdC55OworCisJVFJBQ0UwKCJCZXZhbFRpbWVyUHJvYzogc2VuZGluZyByZXF1ZXN0Iik7CisKKwlpZiAoY3VyX2JldmFsLT5tc2dDQiAhPSBOVUxMKQorCSAgICAoKmN1cl9iZXZhbC0+bXNnQ0IpKGN1cl9iZXZhbCwgMCk7CisgICAgfQorfQorCisgICAgdm9pZAorZ3VpX21jaF9kaXNhYmxlX2JldmFsX2FyZWEoYmV2YWwpCisgICAgQmFsbG9vbkV2YWwJKmJldmFsOworeworICAgIFRSQUNFMCgiZ3VpX21jaF9kaXNhYmxlX2JldmFsX2FyZWEge3t7Iik7CisgICAgS2lsbFRpbWVyKHNfdGV4dEFyZWEsIEJldmFsVGltZXJJZCk7CisgICAgVFJBQ0UwKCJndWlfbWNoX2Rpc2FibGVfYmV2YWxfYXJlYSB9fX0iKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZW5hYmxlX2JldmFsX2FyZWEoYmV2YWwpCisgICAgQmFsbG9vbkV2YWwJKmJldmFsOworeworICAgIFRSQUNFMCgiZ3VpX21jaF9lbmFibGVfYmV2YWxfYXJlYSB8fHwiKTsKKyAgICBpZiAoYmV2YWwgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgVFJBQ0UwKCJndWlfbWNoX2VuYWJsZV9iZXZhbF9hcmVhIHt7eyIpOworICAgIEJldmFsVGltZXJJZCA9IFNldFRpbWVyKHNfdGV4dEFyZWEsIDAsIHBfYmRsYXkgLyAyLCAoVElNRVJQUk9DKUJldmFsVGltZXJQcm9jKTsKKyAgICBUUkFDRTAoImd1aV9tY2hfZW5hYmxlX2JldmFsX2FyZWEgfX19Iik7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX3Bvc3RfYmFsbG9vbihiZXZhbCwgbWVzZykKKyAgICBCYWxsb29uRXZhbAkqYmV2YWw7CisgICAgY2hhcl91CSptZXNnOworeworICAgIFBPSU5UICAgcHQ7CisgICAgVFJBQ0UwKCJndWlfbWNoX3Bvc3RfYmFsbG9vbiB7e3siKTsKKyAgICBpZiAoYmV2YWwtPnNob3dTdGF0ZSA9PSBTaFNfU0hPV0lORykKKwlyZXR1cm47CisgICAgR2V0Q3Vyc29yUG9zKCZwdCk7CisgICAgU2NyZWVuVG9DbGllbnQoc190ZXh0QXJlYSwgJnB0KTsKKworICAgIGlmIChhYnMoYmV2YWwtPnggLSBwdC54KSA8IDMgJiYgYWJzKGJldmFsLT55IC0gcHQueSkgPCAzKQorCS8qIGN1cnNvciBpcyBzdGlsbCBoZXJlICovCisgICAgeworCWd1aV9tY2hfZGlzYWJsZV9iZXZhbF9hcmVhKGN1cl9iZXZhbCk7CisJYmV2YWwtPnNob3dTdGF0ZSA9IFNoU19TSE9XSU5HOworCW1ha2VfdG9vbHRpcChiZXZhbCwgbWVzZywgcHQpOworICAgIH0KKyAgICBUUkFDRTAoImd1aV9tY2hfcG9zdF9iYWxsb29uIH19fSIpOworfQorCisgICAgQmFsbG9vbkV2YWwgKgorZ3VpX21jaF9jcmVhdGVfYmV2YWxfYXJlYSh0YXJnZXQsIG1lc2csIG1lc2dDQiwgY2xpZW50RGF0YSkKKyAgICB2b2lkCSp0YXJnZXQ7CS8qIGlnbm9yZWQsIGFsd2F5cyB1c2Ugc190ZXh0QXJlYSAqLworICAgIGNoYXJfdQkqbWVzZzsKKyAgICB2b2lkCSgqbWVzZ0NCKV9fQVJHUygoQmFsbG9vbkV2YWwgKiwgaW50KSk7CisgICAgdm9pZAkqY2xpZW50RGF0YTsKK3sKKyAgICAvKiBwYXJ0aWFsbHkgc3RvbGVuIGZyb20gZ3VpX2JldmFsLmMgKi8KKyAgICBCYWxsb29uRXZhbAkqYmV2YWw7CisKKyAgICBpZiAobWVzZyAhPSBOVUxMICYmIG1lc2dDQiAhPSBOVUxMKQorICAgIHsKKwlFTVNHKF8oIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIikpOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIGJldmFsID0gKEJhbGxvb25FdmFsICopYWxsb2Moc2l6ZW9mKEJhbGxvb25FdmFsKSk7CisgICAgaWYgKGJldmFsICE9IE5VTEwpCisgICAgeworCWJldmFsLT50YXJnZXQgPSBzX3RleHRBcmVhOworCWJldmFsLT5iYWxsb29uID0gTlVMTDsKKworCWJldmFsLT5zaG93U3RhdGUgPSBTaFNfTkVVVFJBTDsKKwliZXZhbC0+eCA9IDA7CisJYmV2YWwtPnkgPSAwOworCWJldmFsLT5tc2cgPSBtZXNnOworCWJldmFsLT5tc2dDQiA9IG1lc2dDQjsKKwliZXZhbC0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7CisKKwlJbml0Q29tbW9uQ29udHJvbHMoKTsKKworCWN1cl9iZXZhbCA9IGJldmFsOworCisJaWYgKHBfYmV2YWwpCisJICAgIGd1aV9tY2hfZW5hYmxlX2JldmFsX2FyZWEoYmV2YWwpOworCisgICAgfQorICAgIHJldHVybiBiZXZhbDsKK30KKworICAgIHN0YXRpYyB2b2lkCitIYW5kbGVfV01fTm90aWZ5KGh3bmQsIHBubWgpCisgICAgSFdORCBod25kOworICAgIExQTk1IRFIgcG5taDsKK3sKKyAgICBpZiAocG5taC0+aWRGcm9tICE9IElEX0JFVkFMX1RPT0xUSVApIC8qIGl0IGlzIG5vdCBvdXIgdG9vbHRpcCAqLworCXJldHVybjsKKworICAgIGlmIChjdXJfYmV2YWwgIT0gTlVMTCkKKyAgICB7CisJaWYgKHBubWgtPmNvZGUgPT0gVFROX1NIT1cpCisJeworCSAgICBUUkFDRTAoIlRUTl9TSE9XIHt7eyIpOworCSAgICBUUkFDRTAoIlRUTl9TSE9XIH19fSIpOworCX0KKwllbHNlIGlmIChwbm1oLT5jb2RlID09IFRUTl9QT1ApIC8qIEJlZm9yZSB0b29sdGlwIGRpc2FwcGVhciAqLworCXsKKwkgICAgVFJBQ0UwKCJUVE5fUE9QIHt7eyIpOworCSAgICBkZWxldGVfdG9vbHRpcChjdXJfYmV2YWwpOworCSAgICBndWlfbWNoX2VuYWJsZV9iZXZhbF9hcmVhKGN1cl9iZXZhbCk7CisJICAgIFRSQUNFMCgiVFROX1BPUCB9fX0iKTsKKworCSAgICBjdXJfYmV2YWwtPnNob3dTdGF0ZSA9IFNoU19ORVVUUkFMOworCX0KKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorVHJhY2tVc2VyQWN0aXZpdHkoVUlOVCB1TXNnKQoreworICAgIGlmICgodU1zZyA+PSBXTV9NT1VTRUZJUlNUICYmIHVNc2cgPD0gV01fTU9VU0VMQVNUKQorCSAgICB8fCAodU1zZyA+PSBXTV9LRVlGSVJTVCAmJiB1TXNnIDw9IFdNX0tFWUxBU1QpKQorCUxhc3RBY3Rpdml0eSA9IEdldFRpY2tDb3VudCgpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X2JldmFsX2FyZWEoYmV2YWwpCisgICAgQmFsbG9vbkV2YWwJKmJldmFsOworeworICAgIHZpbV9mcmVlKGJldmFsKTsKK30KKyNlbmRpZiAvKiBGRUFUX0JFVkFMICovCisKKyNpZiBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBXZSBoYXZlIG11bHRpcGxlIHNpZ25zIHRvIGRyYXcgYXQgdGhlIHNhbWUgbG9jYXRpb24uIERyYXcgdGhlCisgKiBtdWx0aS1zaWduIGluZGljYXRvciAoZG93bi1hcnJvdykgaW5zdGVhZC4gVGhpcyBpcyB0aGUgV2luMzIgdmVyc2lvbi4KKyAqLworICAgIHZvaWQKK25ldGJlYW5zX2RyYXdfbXVsdGlzaWduX2luZGljYXRvcihpbnQgcm93KQoreworICAgIGludCBpOworICAgIGludCB5OworICAgIGludCB4OworCisgICAgeCA9IDA7CisgICAgeSA9IFRFWFRfWShyb3cpOworCisgICAgZm9yIChpID0gMDsgaSA8IGd1aS5jaGFyX2hlaWdodCAtIDM7IGkrKykKKwlTZXRQaXhlbChzX2hkYywgeCsyLCB5KyssIGd1aS5jdXJyRmdDb2xvcik7CisKKyAgICBTZXRQaXhlbChzX2hkYywgeCswLCB5LCBndWkuY3VyckZnQ29sb3IpOworICAgIFNldFBpeGVsKHNfaGRjLCB4KzIsIHksIGd1aS5jdXJyRmdDb2xvcik7CisgICAgU2V0UGl4ZWwoc19oZGMsIHgrNCwgeSsrLCBndWkuY3VyckZnQ29sb3IpOworICAgIFNldFBpeGVsKHNfaGRjLCB4KzEsIHksIGd1aS5jdXJyRmdDb2xvcik7CisgICAgU2V0UGl4ZWwoc19oZGMsIHgrMiwgeSwgZ3VpLmN1cnJGZ0NvbG9yKTsKKyAgICBTZXRQaXhlbChzX2hkYywgeCszLCB5KyssIGd1aS5jdXJyRmdDb2xvcik7CisgICAgU2V0UGl4ZWwoc19oZGMsIHgrMiwgeSwgZ3VpLmN1cnJGZ0NvbG9yKTsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9ndWlfdzMyX3JjLmggYi9zcmMvZ3VpX3czMl9yYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMGQ3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpX3czMl9yYy5oCkBAIC0wLDAgKzEsOCBAQAorLy97e05PX0RFUEVOREVOQ0lFU319CisvLyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLgorLy8gVXNlZCBieSBTY3JpcHQxLnJjCisvLworI2RlZmluZSBJRFJfVE9PTEJBUjEJCQkxMDEKKy8vI2RlZmluZSBJRF9UQl9CTE9CCQkJICA0MDAwMQorLy8jZGVmaW5lIElEX1RCX0NJUkNMRQkJCSAgNDAwMDIKKwpkaWZmIC0tZ2l0IGEvc3JjL2d1aV93NDguYyBiL3NyYy9ndWlfdzQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxYzFhZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ndWlfdzQ4LmMKQEAgLTAsMCArMSwzNDAyIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCQlieSBCcmFtIE1vb2xlbmFhcgorICoJCQkJR1VJIHN1cHBvcnQgYnkgUm9iZXJ0IFdlYmIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKy8qCisgKiBndWlfdzQ4LmM6ICBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgaW4gZ3VpX3cxNi5jIGFuZCBndWlfdzMyLmMuCisgKgorICogR1VJIHN1cHBvcnQgZm9yIE1pY3Jvc29mdCBXaW5kb3dzIChXaW4xNiArIFdpbjMyID0gV2luNDggOi0pCisgKgorICogVGhlIGNvbWJpbmVkIGVmZm9ydHMgb2Y6CisgKiBHZW9yZ2UgVi4gUmVpbGx5IDxnZW9yZ2VAcmVpbGx5Lm9yZz4KKyAqIFJvYmVydCBXZWJiCisgKiBWaW5jZSBOZWdyaQorICogLi4uYW5kIGNvbnRyaWJ1dGlvbnMgZnJvbSBtYW55IG90aGVycworICoKKyAqLworCisjaW5jbHVkZSAidmltLmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgkvKiB1c2VkIGJ5IGRpYWxvZyBib3ggcm91dGluZSBmb3IgZGVmYXVsdCB0aXRsZSAqLworI2lmZGVmIERFQlVHCisjIGluY2x1ZGUgPHRjaGFyLmg+CisjZW5kaWYKKyNpZm5kZWYgX19NSU5HVzMyX18KKyMgaW5jbHVkZSA8c2hlbGxhcGkuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSB8fCBkZWZpbmVkKEZFQVRfQkVWQUwpCisjIGluY2x1ZGUgPGNvbW1jdHJsLmg+CisjZW5kaWYKKyNpZmRlZiBXSU4xNgorIyBpbmNsdWRlIDxjb21tZGxnLmg+CisjIGluY2x1ZGUgPHNoZWxsYXBpLmg+CisjIGlmZGVmIFdJTjE2XzNETE9PSworIyAgaW5jbHVkZSA8Y3RsM2QuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CisKKyNpZmRlZiBHTE9CQUxfSU1FCisjIGluY2x1ZGUgImdsYmxfaW1lLmgiCisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUVOVQorIyBkZWZpbmUgTUVOVUhJTlRTCQkvKiBzaG93IG1lbnUgaGludHMgaW4gY29tbWFuZCBsaW5lICovCisjZW5kaWYKKworLyogU29tZSBwYXJhbWV0ZXJzIGZvciBkaWFsb2cgYm94ZXMuICBBbGwgaW4gcGl4ZWxzLiAqLworI2RlZmluZSBETEdfUEFERElOR19YCQkxMAorI2RlZmluZSBETEdfUEFERElOR19ZCQkxMAorI2RlZmluZSBETEdfT0xEX1NUWUxFX1BBRERJTkdfWAk1CisjZGVmaW5lIERMR19PTERfU1RZTEVfUEFERElOR19ZCTUKKyNkZWZpbmUgRExHX1ZFUlRfUEFERElOR19YCTQJLyogRm9yIHZlcnRpY2FsIGJ1dHRvbnMgKi8KKyNkZWZpbmUgRExHX1ZFUlRfUEFERElOR19ZCTQKKyNkZWZpbmUgRExHX0lDT05fV0lEVEgJCTM0CisjZGVmaW5lIERMR19JQ09OX0hFSUdIVAkJMzQKKyNkZWZpbmUgRExHX01JTl9XSURUSAkJMTUwCisjZGVmaW5lIERMR19GT05UX05BTUUJCSJNUyBTYW5zIFNlcmlmIgorI2RlZmluZSBETEdfRk9OVF9QT0lOVF9TSVpFCTgKKyNkZWZpbmUgRExHX01JTl9NQVhfV0lEVEgJNDAwCisKKyNkZWZpbmUgRExHX05PTkJVVFRPTl9DT05UUk9MCTUwMDAJLyogRmlyc3QgSUQgb2Ygbm9uLWJ1dHRvbiBjb250cm9scyAqLworCisjaWZuZGVmIFdNX1hCVVRUT05ET1dOIC8qIEZvciBXaW4ySyAvIHdpbk1FIE9OTFkgKi8KKyMgZGVmaW5lIFdNX1hCVVRUT05ET1dOCQkweDAyMEIKKyMgZGVmaW5lIFdNX1hCVVRUT05VUAkJMHgwMjBDCisjIGRlZmluZSBXTV9YQlVUVE9OREJMQ0xLCTB4MDIwRAorIyBkZWZpbmUgTUtfWEJVVFRPTjEJCTB4MDAyMAorIyBkZWZpbmUgTUtfWEJVVFRPTjIJCTB4MDA0MAorI2VuZGlmCisKKyNpZmRlZiBQUk9UTworLyoKKyAqIERlZmluZSBhIGZldyB0aGluZ3MgZm9yIGdlbmVyYXRpbmcgcHJvdG90eXBlcy4gIFRoaXMgaXMganVzdCB0byBhdm9pZAorICogc3ludGF4IGVycm9ycywgdGhlIGRlZmluZXMgZG8gbm90IG5lZWQgdG8gYmUgY29ycmVjdC4KKyAqLworIyBkZWZpbmUgQVBJRU5UUlkKKyMgZGVmaW5lIENBTExCQUNLCisjIGRlZmluZSBDT05TVAorIyBkZWZpbmUgRkFSCisjIGRlZmluZSBORUFSCisjIGRlZmluZSBfY2RlY2wKK3R5cGVkZWYgaW50IEJPT0w7Cit0eXBlZGVmIGludCBCWVRFOwordHlwZWRlZiBpbnQgRFdPUkQ7Cit0eXBlZGVmIGludCBXQ0hBUjsKK3R5cGVkZWYgaW50IEVOVU1MT0dGT05UOwordHlwZWRlZiBpbnQgRklORFJFUExBQ0U7Cit0eXBlZGVmIGludCBIQU5ETEU7Cit0eXBlZGVmIGludCBIQklUTUFQOwordHlwZWRlZiBpbnQgSEJSVVNIOwordHlwZWRlZiBpbnQgSERST1A7Cit0eXBlZGVmIGludCBJTlQ7Cit0eXBlZGVmIGludCBMT0dGT05UW107Cit0eXBlZGVmIGludCBMUEFSQU07Cit0eXBlZGVmIGludCBMUENSRUFURVNUUlVDVDsKK3R5cGVkZWYgaW50IExQQ1NUUjsKK3R5cGVkZWYgaW50IExQQ1RTVFI7Cit0eXBlZGVmIGludCBMUFJFQ1Q7Cit0eXBlZGVmIGludCBMUFNUUjsKK3R5cGVkZWYgaW50IExQV0lORE9XUE9TOwordHlwZWRlZiBpbnQgTFBXT1JEOwordHlwZWRlZiBpbnQgTFJFU1VMVDsKKyMgdW5kZWYgTVNHCit0eXBlZGVmIGludCBNU0c7Cit0eXBlZGVmIGludCBORVdURVhUTUVUUklDOwordHlwZWRlZiBpbnQgT1NWRVJTSU9OSU5GTzsKK3R5cGVkZWYgaW50IFBXT1JEOwordHlwZWRlZiBpbnQgUkVDVDsKK3R5cGVkZWYgaW50IFVJTlQ7Cit0eXBlZGVmIGludCBXT1JEOwordHlwZWRlZiBpbnQgV1BBUkFNOwordHlwZWRlZiBpbnQgUE9JTlQ7Cit0eXBlZGVmIHZvaWQgKkhJTlNUQU5DRTsKK3R5cGVkZWYgdm9pZCAqSE1FTlU7Cit0eXBlZGVmIHZvaWQgKkhXTkQ7Cit0eXBlZGVmIHZvaWQgKkhEQzsKK3R5cGVkZWYgdm9pZCBWT0lEOwordHlwZWRlZiBpbnQgTFBOTUhEUjsKK3R5cGVkZWYgaW50IExPTkc7CisjZW5kaWYKKworI2lmbmRlZiBHRVRfWF9MUEFSQU0KKyMgZGVmaW5lIEdFVF9YX0xQQVJBTShscCkgKChpbnQpKHNob3J0KUxPV09SRChscCkpCisjZW5kaWYKKworc3RhdGljIHZvaWQgX09uUGFpbnQoIEhXTkQgaHduZCk7CitzdGF0aWMgdm9pZCBjbGVhcl9yZWN0KFJFQ1QgKnJjcCk7CitzdGF0aWMgaW50IGd1aV9tc3dpbl9nZXRfbWVudV9oZWlnaHQoaW50IGZpeF93aW5kb3cpOworCitzdGF0aWMgV09SRAkJc19kbGdmbnRoZWlnaHQ7CQkvKiBoZWlnaHQgb2YgdGhlIGRpYWxvZyBmb250ICovCitzdGF0aWMgV09SRAkJc19kbGdmbnR3aWR0aDsJCS8qIHdpZHRoIG9mIHRoZSBkaWFsb2cgZm9udCAqLworCisjaWZkZWYgRkVBVF9NRU5VCitzdGF0aWMgSE1FTlUJCXNfbWVudUJhciA9IE5VTEw7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1RFQVJPRkYKK3N0YXRpYyB2b2lkIHJlYnVpbGRfdGVhcm9mZih2aW1tZW51X1QgKm1lbnUpOworc3RhdGljIEhCSVRNQVAJc19odGVhcmJpdG1hcDsJICAgIC8qIGJpdG1hcCB1c2VkIHRvIGluZGljYXRlIHRlYXJvZmYgKi8KKyNlbmRpZgorCisvKiBGbGFnIHRoYXQgaXMgc2V0IHdoaWxlIHByb2Nlc3NpbmcgYSBtZXNzYWdlIHRoYXQgbXVzdCBub3QgYmUgaW50ZXJ1cHRlZCBieQorICogcHJvY2Vzc2luZyBhbm90aGVyIG1lc3NhZ2UuICovCitzdGF0aWMgaW50CQlzX2J1c3lfcHJvY2Vzc2luZyA9IEZBTFNFOworCitzdGF0aWMgaW50CQlkZXN0cm95aW5nID0gRkFMU0U7CS8qIGNhbGwgRGVzdHJveVdpbmRvdygpIG91cnNlbHZlcyAqLworCisjaWZkZWYgTVNXSU5fRklORF9SRVBMQUNFCitzdGF0aWMgVUlOVAkJc19maW5kcmVwX21zZyA9IDA7CS8qIHNldCBpbiBndWlfd1sxNi8zMl0uYyAqLworc3RhdGljIEZJTkRSRVBMQUNFCXNfZmluZHJlcF9zdHJ1Y3Q7CitzdGF0aWMgSFdORAkJc19maW5kcmVwX2h3bmQgPSBOVUxMOworc3RhdGljIGludAkJc19maW5kcmVwX2lzX2ZpbmQ7CS8qIFRSVUUgZm9yIGZpbmQgZGlhbG9nLCBGQUxTRQorCQkJCQkJICAgZm9yIGZpbmQvcmVwbGFjZSBkaWFsb2cgKi8KKyNlbmRpZgorCitzdGF0aWMgSElOU1RBTkNFCXNfaGluc3QgPSBOVUxMOworI2lmICFkZWZpbmVkKEZFQVRfU05JRkYpICYmICFkZWZpbmVkKEZFQVRfR1VJKQorc3RhdGljCisjZW5kaWYKK0hXTkQJCQlzX2h3bmQgPSBOVUxMOworc3RhdGljIEhEQwkJc19oZGMgPSBOVUxMOworc3RhdGljIEhCUlVTSAlzX2JydXNoID0gTlVMTDsKKworI2lmZGVmIEZFQVRfVE9PTEJBUgorc3RhdGljIEhXTkQJCXNfdG9vbGJhcmh3bmQgPSBOVUxMOworI2VuZGlmCisKK3N0YXRpYyBXUEFSQU0JCXNfd1BhcmFtID0gMDsKK3N0YXRpYyBMUEFSQU0JCXNfbFBhcmFtID0gMDsKKworc3RhdGljIEhXTkQJCXNfdGV4dEFyZWEgPSBOVUxMOworc3RhdGljIFVJTlQJCXNfdU1zZyA9IDA7CisKK3N0YXRpYyBjaGFyX3UJCSpzX3RleHRmaWVsZDsgLyogVXNlZCBieSBkaWFsb2dzIHRvIHBhc3MgYmFjayBzdHJpbmdzICovCisKK3N0YXRpYyBpbnQJCXNfbmVlZF9hY3RpdmF0ZSA9IEZBTFNFOworCisvKiBUaGlzIHZhcmlhYmxlIGlzIHNldCB3aGVuIHdhaXRpbmcgZm9yIGFuIGV2ZW50LCB3aGljaCBpcyB0aGUgb25seSBtb21lbnQKKyAqIHNjcm9sbGJhciBkcmFnZ2luZyBjYW4gYmUgZG9uZSBkaXJlY3RseS4gIEl0J3Mgbm90IGFsbG93ZWQgd2hpbGUgY29tbWFuZHMKKyAqIGFyZSBleGVjdXRlZCwgYmVjYXVzZSBpdCBtYXkgbW92ZSB0aGUgY3Vyc29yIGFuZCB0aGF0IG1heSBjYXVzZSB1bmV4cGVjdGVkCisgKiBwcm9ibGVtcyAoZS5nLiwgd2hpbGUgIjpzIiBpcyB3b3JraW5nKS4KKyAqLworc3RhdGljIGludCBhbGxvd19zY3JvbGxiYXIgPSBGQUxTRTsKKworI2lmZGVmIEdMT0JBTF9JTUUKKyMgZGVmaW5lIE15VHJhbnNsYXRlTWVzc2FnZSh4KSBnbG9iYWxfaW1lX1RyYW5zbGF0ZU1lc3NhZ2UoeCkKKyNlbHNlCisjIGRlZmluZSBNeVRyYW5zbGF0ZU1lc3NhZ2UoeCkgVHJhbnNsYXRlTWVzc2FnZSh4KQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChXSU4zMjY0KSAmJiBkZWZpbmVkKEZFQVRfTUJZVEUpKSB8fCBkZWZpbmVkKEdMT0JBTF9JTUUpCisgIC8qIHVzZSBvZiBXaW5kb3dQcm9jIGRlcGVuZHMgb24gd2lkZV9XaW5kb3dQcm9jICovCisjIGRlZmluZSBNeVdpbmRvd1Byb2MgdmltX1dpbmRvd1Byb2MKKyNlbHNlCisgIC8qIHVzZSBvcmRpbmFyeSBXaW5kb3dQcm9jICovCisjIGRlZmluZSBNeVdpbmRvd1Byb2MgRGVmV2luZG93UHJvYworI2VuZGlmCisKK2V4dGVybiBpbnQgY3VycmVudF9mb250X2hlaWdodDsJICAgIC8qIHRoaXMgaXMgaW4gb3NfbXN3aW4uYyAqLworCitzdGF0aWMgc3RydWN0Cit7CisgICAgVUlOVCAgICBrZXlfc3ltOworICAgIGNoYXJfdSAgdmltX2NvZGUwOworICAgIGNoYXJfdSAgdmltX2NvZGUxOworfSBzcGVjaWFsX2tleXNbXSA9Cit7CisgICAge1ZLX1VQLAkJJ2snLCAndSd9LAorICAgIHtWS19ET1dOLAkJJ2snLCAnZCd9LAorICAgIHtWS19MRUZULAkJJ2snLCAnbCd9LAorICAgIHtWS19SSUdIVCwJCSdrJywgJ3InfSwKKworICAgIHtWS19GMSwJCSdrJywgJzEnfSwKKyAgICB7VktfRjIsCQknaycsICcyJ30sCisgICAge1ZLX0YzLAkJJ2snLCAnMyd9LAorICAgIHtWS19GNCwJCSdrJywgJzQnfSwKKyAgICB7VktfRjUsCQknaycsICc1J30sCisgICAge1ZLX0Y2LAkJJ2snLCAnNid9LAorICAgIHtWS19GNywJCSdrJywgJzcnfSwKKyAgICB7VktfRjgsCQknaycsICc4J30sCisgICAge1ZLX0Y5LAkJJ2snLCAnOSd9LAorICAgIHtWS19GMTAsCQknaycsICc7J30sCisKKyAgICB7VktfRjExLAkJJ0YnLCAnMSd9LAorICAgIHtWS19GMTIsCQknRicsICcyJ30sCisgICAge1ZLX0YxMywJCSdGJywgJzMnfSwKKyAgICB7VktfRjE0LAkJJ0YnLCAnNCd9LAorICAgIHtWS19GMTUsCQknRicsICc1J30sCisgICAge1ZLX0YxNiwJCSdGJywgJzYnfSwKKyAgICB7VktfRjE3LAkJJ0YnLCAnNyd9LAorICAgIHtWS19GMTgsCQknRicsICc4J30sCisgICAge1ZLX0YxOSwJCSdGJywgJzknfSwKKyAgICB7VktfRjIwLAkJJ0YnLCAnQSd9LAorCisgICAge1ZLX0YyMSwJCSdGJywgJ0InfSwKKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKyAgICB7VktfUEFVU0UsCQknRicsICdCJ30sCS8qIFBhdXNlID09IEYyMSAoc2VlIGd1aV9ndGtfeDExLmMpICovCisjZW5kaWYKKyAgICB7VktfRjIyLAkJJ0YnLCAnQyd9LAorICAgIHtWS19GMjMsCQknRicsICdEJ30sCisgICAge1ZLX0YyNCwJCSdGJywgJ0UnfSwJLyogd2ludXNlci5oIGRlZmluZXMgdXAgdG8gRjI0ICovCisKKyAgICB7VktfSEVMUCwJCSclJywgJzEnfSwKKyAgICB7VktfQkFDSywJCSdrJywgJ2InfSwKKyAgICB7VktfSU5TRVJULAkJJ2snLCAnSSd9LAorICAgIHtWS19ERUxFVEUsCQknaycsICdEJ30sCisgICAge1ZLX0hPTUUsCQknaycsICdoJ30sCisgICAge1ZLX0VORCwJCSdAJywgJzcnfSwKKyAgICB7VktfUFJJT1IsCQknaycsICdQJ30sCisgICAge1ZLX05FWFQsCQknaycsICdOJ30sCisgICAge1ZLX1BSSU5ULAkJJyUnLCAnOSd9LAorICAgIHtWS19BREQsCQknSycsICc2J30sCisgICAge1ZLX1NVQlRSQUNULAknSycsICc3J30sCisgICAge1ZLX0RJVklERSwJCSdLJywgJzgnfSwKKyAgICB7VktfTVVMVElQTFksCSdLJywgJzknfSwKKyAgICB7VktfU0VQQVJBVE9SLAknSycsICdBJ30sCS8qIEtleXBhZCBFbnRlciAqLworICAgIHtWS19ERUNJTUFMLAknSycsICdCJ30sCisKKyAgICB7VktfTlVNUEFEMCwJJ0snLCAnQyd9LAorICAgIHtWS19OVU1QQUQxLAknSycsICdEJ30sCisgICAge1ZLX05VTVBBRDIsCSdLJywgJ0UnfSwKKyAgICB7VktfTlVNUEFEMywJJ0snLCAnRid9LAorICAgIHtWS19OVU1QQUQ0LAknSycsICdHJ30sCisgICAge1ZLX05VTVBBRDUsCSdLJywgJ0gnfSwKKyAgICB7VktfTlVNUEFENiwJJ0snLCAnSSd9LAorICAgIHtWS19OVU1QQUQ3LAknSycsICdKJ30sCisgICAge1ZLX05VTVBBRDgsCSdLJywgJ0snfSwKKyAgICB7VktfTlVNUEFEOSwJJ0snLCAnTCd9LAorCisgICAgLyogS2V5cyB0aGF0IHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgYW55IG1vZGlmaWVyIHdpdGg6ICovCisgICAge1ZLX1NQQUNFLAkJJyAnLCBOVUx9LAorICAgIHtWS19UQUIsCQlUQUIsIE5VTH0sCisgICAge1ZLX0VTQ0FQRSwJCUVTQywgTlVMfSwKKyAgICB7TkwsCQlOTCwgTlVMfSwKKyAgICB7Q0FSLAkJQ0FSLCBOVUx9LAorCisgICAgLyogRW5kIG9mIGxpc3QgbWFya2VyOiAqLworICAgIHswLAkJCTAsIDB9Cit9OworCisvKiBMb2NhbCB2YXJpYWJsZXMgKi8KK3N0YXRpYyBpbnQJCXNfYnV0dG9uX3BlbmRpbmcgPSAtMTsKK3N0YXRpYyBpbnQJCXNfeF9wZW5kaW5nOworc3RhdGljIGludAkJc195X3BlbmRpbmc7CitzdGF0aWMgVUlOVAkJc19rRmxhZ3NfcGVuZGluZzsKK3N0YXRpYyBVSU5UCQlzX3dhaXRfdGltZXIgPSAwOyAgIC8qIFRpbWVyIGZvciBnZXQgY2hhciBmcm9tIHVzZXIgKi8KK3N0YXRpYyBpbnQJCXNfdGltZWRfb3V0ID0gRkFMU0U7CitzdGF0aWMgaW50CQlkZWFkX2tleSA9IDA7CS8qIDAgLSBubyBkZWFkIGtleSwgMSAtIGRlYWQga2V5IHByZXNzZWQgKi8KKworI2lmZGVmIFdJTjMyNjQKK3N0YXRpYyBPU1ZFUlNJT05JTkZPIG9zX3ZlcnNpb247ICAgIC8qIGxpa2UgaXQgc2F5cy4gIEluaXQgaW4gZ3VpX21jaF9pbml0KCkgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9CRVZBTAorLyogYmFsbG9vbi1ldmFsIFdNX05PVElGWV9IQU5ETEVSICovCitzdGF0aWMgdm9pZCBIYW5kbGVfV01fTm90aWZ5IF9fQVJHUygoSFdORCBod25kLCBMUE5NSERSIHBubWgpKTsKK3N0YXRpYyB2b2lkIFRyYWNrVXNlckFjdGl2aXR5IF9fQVJHUygoVUlOVCB1TXNnKSk7CisjZW5kaWYKKworLyoKKyAqIEZvciBjb250cm9sIElNRS4KKyAqLworI2lmZGVmIEZFQVRfTUJZVEUKKyMgaWZkZWYgVVNFX0lNX0NPTlRST0wKK3N0YXRpYyBMT0dGT05UIG5vcm1fbG9nZm9udDsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NQllURV9JTUUKK3N0YXRpYyBMUkVTVUxUIF9PbkltZU5vdGlmeShIV05EIGhXbmQsIERXT1JEIGR3Q29tbWFuZCwgRFdPUkQgZHdEYXRhKTsKKyNlbmRpZgorCisjaWZkZWYgREVCVUcKKy8qCisgKiBQcmludCBvdXQgdGhlIGxhc3QgV2luZG93cyBlcnJvciBtZXNzYWdlCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcHJpbnRfd2luZG93c19lcnJvcih2b2lkKQoreworICAgIExQVk9JRCAgbHBNc2dCdWY7CisKKyAgICBGb3JtYXRNZXNzYWdlKEZPUk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUiB8IEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNLAorCQkgIE5VTEwsIEdldExhc3RFcnJvcigpLAorCQkgIE1BS0VMQU5HSUQoTEFOR19ORVVUUkFMLCBTVUJMQU5HX0RFRkFVTFQpLAorCQkgIChMUFRTVFIpICZscE1zZ0J1ZiwgMCwgTlVMTCk7CisgICAgVFJBQ0UxKCJFcnJvcjogJXNcbiIsIGxwTXNnQnVmKTsKKyAgICBMb2NhbEZyZWUobHBNc2dCdWYpOworfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qCisgKiBDdXJzb3IgYmxpbmsgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgaXMgYSBzaW1wbGUgc3RhdGUgbWFjaGluZToKKyAqIEJMSU5LX05PTkUJbm90IGJsaW5raW5nIGF0IGFsbAorICogQkxJTktfT0ZGCWJsaW5raW5nLCBjdXJzb3IgaXMgbm90IHNob3duCisgKiBCTElOS19PTglibGlua2luZywgY3Vyc29yIGlzIHNob3duCisgKi8KKworI2RlZmluZSBCTElOS19OT05FICAwCisjZGVmaW5lIEJMSU5LX09GRiAgIDEKKyNkZWZpbmUgQkxJTktfT04gICAgMgorCitzdGF0aWMgaW50CQlibGlua19zdGF0ZSA9IEJMSU5LX05PTkU7CitzdGF0aWMgbG9uZ191CQlibGlua193YWl0dGltZSA9IDcwMDsKK3N0YXRpYyBsb25nX3UJCWJsaW5rX29udGltZSA9IDQwMDsKK3N0YXRpYyBsb25nX3UJCWJsaW5rX29mZnRpbWUgPSAyNTA7CitzdGF0aWMgVUlOVAkJYmxpbmtfdGltZXIgPSAwOworCisgICAgdm9pZAorZ3VpX21jaF9zZXRfYmxpbmtpbmcobG9uZyB3YWl0LCBsb25nIG9uLCBsb25nIG9mZikKK3sKKyAgICBibGlua193YWl0dGltZSA9IHdhaXQ7CisgICAgYmxpbmtfb250aW1lID0gb247CisgICAgYmxpbmtfb2ZmdGltZSA9IG9mZjsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgVk9JRCBDQUxMQkFDSworX09uQmxpbmtUaW1lcigKKyAgICBIV05EIGh3bmQsCisgICAgVUlOVCB1TXNnLAorICAgIFVJTlQgaWRFdmVudCwKKyAgICBEV09SRCBkd1RpbWUpCit7CisgICAgTVNHIG1zZzsKKworICAgIC8qCisgICAgVFJBQ0UyKCJHb3QgdGltZXIgZXZlbnQsIGlkICVkLCBibGlua190aW1lciAlZFxuIiwgaWRFdmVudCwgYmxpbmtfdGltZXIpOworICAgICovCisKKyAgICBLaWxsVGltZXIoTlVMTCwgaWRFdmVudCk7CisKKyAgICAvKiBFYXQgc3B1cmlvdXMgV01fVElNRVIgbWVzc2FnZXMgKi8KKyAgICB3aGlsZSAoUGVla01lc3NhZ2UoJm1zZywgaHduZCwgV01fVElNRVIsIFdNX1RJTUVSLCBQTV9SRU1PVkUpKQorCTsKKworICAgIGlmIChibGlua19zdGF0ZSA9PSBCTElOS19PTikKKyAgICB7CisJZ3VpX3VuZHJhd19jdXJzb3IoKTsKKwlibGlua19zdGF0ZSA9IEJMSU5LX09GRjsKKwlibGlua190aW1lciA9IChVSU5UKSBTZXRUaW1lcihOVUxMLCAwLCAoVUlOVClibGlua19vZmZ0aW1lLAorCQkJCQkJICAgIChUSU1FUlBST0MpX09uQmxpbmtUaW1lcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworCWJsaW5rX3N0YXRlID0gQkxJTktfT047CisJYmxpbmtfdGltZXIgPSAoVUlOVCkgU2V0VGltZXIoTlVMTCwgMCwgKFVJTlQpYmxpbmtfb250aW1lLAorCQkJCQkJCSAoVElNRVJQUk9DKV9PbkJsaW5rVGltZXIpOworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitndWlfbXN3aW5fcm1fYmxpbmtfdGltZXIodm9pZCkKK3sKKyAgICBNU0cgbXNnOworCisgICAgaWYgKGJsaW5rX3RpbWVyICE9IDApCisgICAgeworCUtpbGxUaW1lcihOVUxMLCBibGlua190aW1lcik7CisJLyogRWF0IHNwdXJpb3VzIFdNX1RJTUVSIG1lc3NhZ2VzICovCisJd2hpbGUgKFBlZWtNZXNzYWdlKCZtc2csIHNfaHduZCwgV01fVElNRVIsIFdNX1RJTUVSLCBQTV9SRU1PVkUpKQorCSAgICA7CisJYmxpbmtfdGltZXIgPSAwOworICAgIH0KK30KKworLyoKKyAqIFN0b3AgdGhlIGN1cnNvciBibGlua2luZy4gIFNob3cgdGhlIGN1cnNvciBpZiBpdCB3YXNuJ3Qgc2hvd24uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3N0b3BfYmxpbmsodm9pZCkKK3sKKyAgICBndWlfbXN3aW5fcm1fYmxpbmtfdGltZXIoKTsKKyAgICBpZiAoYmxpbmtfc3RhdGUgPT0gQkxJTktfT0ZGKQorCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKyAgICBibGlua19zdGF0ZSA9IEJMSU5LX05PTkU7Cit9CisKKy8qCisgKiBTdGFydCB0aGUgY3Vyc29yIGJsaW5raW5nLiAgSWYgaXQgd2FzIGFscmVhZHkgYmxpbmtpbmcsIHRoaXMgcmVzdGFydHMgdGhlCisgKiB3YWl0aW5nIHRpbWUgYW5kIHNob3dzIHRoZSBjdXJzb3IuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3N0YXJ0X2JsaW5rKHZvaWQpCit7CisgICAgZ3VpX21zd2luX3JtX2JsaW5rX3RpbWVyKCk7CisKKyAgICAvKiBPbmx5IHN3aXRjaCBibGlua2luZyBvbiBpZiBub25lIG9mIHRoZSB0aW1lcyBpcyB6ZXJvICovCisgICAgaWYgKGJsaW5rX3dhaXR0aW1lICYmIGJsaW5rX29udGltZSAmJiBibGlua19vZmZ0aW1lICYmIGd1aS5pbl9mb2N1cykKKyAgICB7CisJYmxpbmtfdGltZXIgPSAoVUlOVClTZXRUaW1lcihOVUxMLCAwLCAoVUlOVClibGlua193YWl0dGltZSwKKwkJCQkJCSAgICAoVElNRVJQUk9DKV9PbkJsaW5rVGltZXIpOworCWJsaW5rX3N0YXRlID0gQkxJTktfT047CisJZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworICAgIH0KK30KKworLyoKKyAqIENhbGwtYmFjayByb3V0aW5lcy4KKyAqLworCisgICAgc3RhdGljIFZPSUQgQ0FMTEJBQ0sKK19PblRpbWVyKAorICAgIEhXTkQgaHduZCwKKyAgICBVSU5UIHVNc2csCisgICAgVUlOVCBpZEV2ZW50LAorICAgIERXT1JEIGR3VGltZSkKK3sKKyAgICBNU0cgbXNnOworCisgICAgLyoKKyAgICBUUkFDRTIoIkdvdCB0aW1lciBldmVudCwgaWQgJWQsIHNfd2FpdF90aW1lciAlZFxuIiwgaWRFdmVudCwgc193YWl0X3RpbWVyKTsKKyAgICAqLworICAgIEtpbGxUaW1lcihOVUxMLCBpZEV2ZW50KTsKKyAgICBzX3RpbWVkX291dCA9IFRSVUU7CisKKyAgICAvKiBFYXQgc3B1cmlvdXMgV01fVElNRVIgbWVzc2FnZXMgKi8KKyAgICB3aGlsZSAoUGVla01lc3NhZ2UoJm1zZywgaHduZCwgV01fVElNRVIsIFdNX1RJTUVSLCBQTV9SRU1PVkUpKQorCTsKKyAgICBpZiAoaWRFdmVudCA9PSBzX3dhaXRfdGltZXIpCisJc193YWl0X3RpbWVyID0gMDsKK30KKworICAgIHN0YXRpYyB2b2lkCitfT25EZWFkQ2hhcigKKyAgICBIV05EIGh3bmQsCisgICAgVUlOVCBjaCwKKyAgICBpbnQgY1JlcGVhdCkKK3sKKyAgICBkZWFkX2tleSA9IDE7Cit9CisKKy8qCisgKiBDb252ZXJ0IFVuaWNvZGUgY2hhcmFjdGVyICJjaCIgdG8gYnl0ZXMgaW4gInN0cmluZ1tzbGVuXSIuCisgKiBSZXR1cm4gdGhlIGxlbmd0aC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NoYXJfdG9fc3RyaW5nKGludCBjaCwgY2hhcl91ICpzdHJpbmcsIGludCBzbGVuKQoreworICAgIGludAkJbGVuOworICAgIGludAkJaTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgV0NIQVIJd3N0cmluZ1syXTsKKyAgICBjaGFyX3UJKndzID0gTlVMTDs7CisKKyAgICAvKiAiY2giIGlzIGEgVVRGLTE2IGNoYXJhY3Rlci4gIENvbnZlcnQgaXQgdG8gYSBzdHJpbmcgb2YgYnl0ZXMuICBXaGVuCisgICAgICogImVuY19jb2RlcGFnZSIgaXMgbm9uLXplcm8gdXNlIHRoZSBzdGFuZGFyZCBXaW4zMiBmdW5jdGlvbiwgb3RoZXJ3aXNlCisgICAgICogdXNlIG91ciBvd24gY29udmVyc2lvbiBmdW5jdGlvbiAoZS5nLiwgZm9yIFVURi04KS4gKi8KKyAgICB3c3RyaW5nWzBdID0gY2g7CisgICAgaWYgKGVuY19jb2RlcGFnZSA+IDApCisJbGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShlbmNfY29kZXBhZ2UsIDAsIHdzdHJpbmcsIDEsIHN0cmluZywgc2xlbiwKKwkJCQkJCQkJICAgICAwLCBOVUxMKTsKKyAgICBlbHNlCisgICAgeworCWxlbiA9IDE7CisJd3MgPSB1Y3MyX3RvX2VuYyh3c3RyaW5nLCAmbGVuKTsKKwlpZiAod3MgPT0gTlVMTCkKKwkgICAgbGVuID0gMDsKKwllbHNlCisJeworCSAgICBpZiAobGVuID4gc2xlbikJLyoganVzdCBpbiBjYXNlICovCisJCWxlbiA9IHNsZW47CisJICAgIG1jaF9tZW1tb3ZlKHN0cmluZywgd3MsIGxlbik7CisJICAgIHZpbV9mcmVlKHdzKTsKKwl9CisgICAgfQorICAgIGlmIChsZW4gPT0gMCkKKyNlbmRpZgorICAgIHsKKwlzdHJpbmdbMF0gPSBjaDsKKwlsZW4gPSAxOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwlpZiAoc3RyaW5nW2ldID09IENTSSAmJiBsZW4gPD0gc2xlbiAtIDIpCisJeworCSAgICAvKiBJbnNlcnQgQ1NJIGFzIEtfQ1NJLiAqLworCSAgICBtY2hfbWVtbW92ZShzdHJpbmcgKyBpICsgMywgc3RyaW5nICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKKwkgICAgc3RyaW5nWysraV0gPSBLU19FWFRSQTsKKwkgICAgc3RyaW5nWysraV0gPSAoaW50KUtFX0NTSTsKKwkgICAgbGVuICs9IDI7CisJfQorCisgICAgcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIEtleSBoaXQsIGFkZCBpdCB0byB0aGUgaW5wdXQgYnVmZmVyLgorICovCisgICAgc3RhdGljIHZvaWQKK19PbkNoYXIoCisgICAgSFdORCBod25kLAorICAgIFVJTlQgY2gsCisgICAgaW50IGNSZXBlYXQpCit7CisgICAgY2hhcl91CXN0cmluZ1s0MF07CisgICAgaW50CQlsZW4gPSAwOworCisgICAgbGVuID0gY2hhcl90b19zdHJpbmcoY2gsIHN0cmluZywgNDApOworICAgIGlmIChsZW4gPT0gMSAmJiBzdHJpbmdbMF0gPT0gQ3RybF9DICYmIGN0cmxfY19pbnRlcnJ1cHRzKQorICAgIHsKKwl0cmFzaF9pbnB1dF9idWYoKTsKKwlnb3RfaW50ID0gVFJVRTsKKyAgICB9CisKKyAgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgbGVuKTsKK30KKworLyoKKyAqIEFsdC1LZXkgaGl0LCBhZGQgaXQgdG8gdGhlIGlucHV0IGJ1ZmZlci4KKyAqLworICAgIHN0YXRpYyB2b2lkCitfT25TeXNDaGFyKAorICAgIEhXTkQgaHduZCwKKyAgICBVSU5UIGNjaCwKKyAgICBpbnQgY1JlcGVhdCkKK3sKKyAgICBjaGFyX3UJc3RyaW5nWzQwXTsgLyogRW5vdWdoIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVyICovCisgICAgaW50CQlsZW47CisgICAgaW50CQltb2RpZmllcnM7CisgICAgaW50CQljaCA9IGNjaDsgICAvKiBzcGVjaWFsIGtleXMgYXJlIG5lZ2F0aXZlICovCisKKyAgICAvKiBUUkFDRSgiT25TeXNDaGFyKCVkLCAlYylcbiIsIGNoLCBjaCk7ICovCisKKyAgICAvKiBPSywgd2UgaGF2ZSBhIGNoYXJhY3RlciBrZXkgKGdpdmVuIGJ5IGNoKSB3aGljaCB3YXMgZW50ZXJlZCB3aXRoIHRoZQorICAgICAqIEFMVCBrZXkgcHJlc3NlZC4gRWcsIGlmIHRoZSB1c2VyIHByZXNzZXMgQWx0LUEsIHRoZW4gY2ggPT0gJ0EnLiBOb3RlCisgICAgICogdGhhdCB0aGUgc3lzdGVtIGRpc3Rpbmd1aXNoZXMgQWx0LWEgYW5kIEFsdC1BIChBbHQtU2hpZnQtYSB1bmxlc3MKKyAgICAgKiBDQVBTTE9DSyBpcyBwcmVzc2VkKSBhdCB0aGlzIHBvaW50LgorICAgICAqLworICAgIG1vZGlmaWVycyA9IE1PRF9NQVNLX0FMVDsKKyAgICBpZiAoR2V0S2V5U3RhdGUoVktfU0hJRlQpICYgMHg4MDAwKQorCW1vZGlmaWVycyB8PSBNT0RfTUFTS19TSElGVDsKKyAgICBpZiAoR2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgJiAweDgwMDApCisJbW9kaWZpZXJzIHw9IE1PRF9NQVNLX0NUUkw7CisKKyAgICBjaCA9IHNpbXBsaWZ5X2tleShjaCwgJm1vZGlmaWVycyk7CisgICAgLyogcmVtb3ZlIHRoZSBTSElGVCBtb2RpZmllciBmb3Iga2V5cyB3aGVyZSBpdCdzIGFscmVhZHkgaW5jbHVkZWQsIGUuZy4sCisgICAgICogJygnIGFuZCAnKicgKi8KKyAgICBpZiAoY2ggPCAweDEwMCAmJiAhaXNhbHBoYShjaCkgJiYgaXNwcmludChjaCkpCisJbW9kaWZpZXJzICY9IH5NT0RfTUFTS19TSElGVDsKKworICAgIC8qIEludGVycHJldCB0aGUgQUxUIGtleSBhcyBtYWtpbmcgdGhlIGtleSBNRVRBLCBpbmNsdWRlIFNISUZULCBldGMuICovCisgICAgY2ggPSBleHRyYWN0X21vZGlmaWVycyhjaCwgJm1vZGlmaWVycyk7CisgICAgaWYgKGNoID09IENTSSkKKwljaCA9IEtfQ1NJOworCisgICAgbGVuID0gMDsKKyAgICBpZiAobW9kaWZpZXJzKQorICAgIHsKKwlzdHJpbmdbbGVuKytdID0gQ1NJOworCXN0cmluZ1tsZW4rK10gPSBLU19NT0RJRklFUjsKKwlzdHJpbmdbbGVuKytdID0gbW9kaWZpZXJzOworICAgIH0KKworICAgIGlmIChJU19TUEVDSUFMKChpbnQpY2gpKQorICAgIHsKKwlzdHJpbmdbbGVuKytdID0gQ1NJOworCXN0cmluZ1tsZW4rK10gPSBLX1NFQ09ORCgoaW50KWNoKTsKKwlzdHJpbmdbbGVuKytdID0gS19USElSRCgoaW50KWNoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBBbHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBpc24ndCBjbGVhciBhYm91dCBpdCwgd2UgYXNzdW1lICJjaCIgaXMKKwkgKiBhIFVuaWNvZGUgY2hhcmFjdGVyLiAqLworCWxlbiArPSBjaGFyX3RvX3N0cmluZyhjaCwgc3RyaW5nICsgbGVuLCA0MCAtIGxlbik7CisgICAgfQorCisgICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIGxlbik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorX09uTW91c2VFdmVudCgKKyAgICBpbnQgYnV0dG9uLAorICAgIGludCB4LAorICAgIGludCB5LAorICAgIGludCByZXBlYXRlZF9jbGljaywKKyAgICBVSU5UIGtleUZsYWdzKQoreworICAgIGludCB2aW1fbW9kaWZpZXJzID0gMHgwOworCisgICAgaWYgKGtleUZsYWdzICYgTUtfU0hJRlQpCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9TSElGVDsKKyAgICBpZiAoa2V5RmxhZ3MgJiBNS19DT05UUk9MKQorCXZpbV9tb2RpZmllcnMgfD0gTU9VU0VfQ1RSTDsKKyAgICBpZiAoR2V0S2V5U3RhdGUoVktfTUVOVSkgJiAweDgwMDApCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9BTFQ7CisKKyAgICBndWlfc2VuZF9tb3VzZV9ldmVudChidXR0b24sIHgsIHksIHJlcGVhdGVkX2NsaWNrLCB2aW1fbW9kaWZpZXJzKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitfT25Nb3VzZUJ1dHRvbkRvd24oCisgICAgSFdORCBod25kLAorICAgIEJPT0wgZkRvdWJsZUNsaWNrLAorICAgIGludCB4LAorICAgIGludCB5LAorICAgIFVJTlQga2V5RmxhZ3MpCit7CisgICAgc3RhdGljIExPTkcJc19wcmV2VGltZSA9IDA7CisKKyAgICBMT05HICAgIGN1cnJlbnRUaW1lID0gR2V0TWVzc2FnZVRpbWUoKTsKKyAgICBpbnQJICAgIGJ1dHRvbiA9IC0xOworICAgIGludAkgICAgcmVwZWF0ZWRfY2xpY2s7CisKKyAgICAvKiBHaXZlIG1haW4gd2luZG93IHRoZSBmb2N1czogdGhpcyBpcyBzbyB0aGUgY3Vyc29yIGlzbid0IGhvbGxvdy4gKi8KKyAgICAodm9pZClTZXRGb2N1cyhzX2h3bmQpOworCisgICAgaWYgKHNfdU1zZyA9PSBXTV9MQlVUVE9ORE9XTiB8fCBzX3VNc2cgPT0gV01fTEJVVFRPTkRCTENMSykKKwlidXR0b24gPSBNT1VTRV9MRUZUOworICAgIGVsc2UgaWYgKHNfdU1zZyA9PSBXTV9NQlVUVE9ORE9XTiB8fCBzX3VNc2cgPT0gV01fTUJVVFRPTkRCTENMSykKKwlidXR0b24gPSBNT1VTRV9NSURETEU7CisgICAgZWxzZSBpZiAoc191TXNnID09IFdNX1JCVVRUT05ET1dOIHx8IHNfdU1zZyA9PSBXTV9SQlVUVE9OREJMQ0xLKQorCWJ1dHRvbiA9IE1PVVNFX1JJR0hUOworI2lmbmRlZiBXSU4xNiAvKjxWTj4qLworICAgIGVsc2UgaWYgKHNfdU1zZyA9PSBXTV9YQlVUVE9ORE9XTiB8fCBzX3VNc2cgPT0gV01fWEJVVFRPTkRCTENMSykKKyAgICB7CisjaWZuZGVmIEdFVF9YQlVUVE9OX1dQQVJBTQorIyBkZWZpbmUgR0VUX1hCVVRUT05fV1BBUkFNKHdQYXJhbSkJKEhJV09SRCh3UGFyYW0pKQorI2VuZGlmCisJYnV0dG9uID0gKChHRVRfWEJVVFRPTl9XUEFSQU0oc193UGFyYW0pID09IDEpID8gTU9VU0VfWDEgOiBNT1VTRV9YMik7CisgICAgfQorICAgIGVsc2UgaWYgKHNfdU1zZyA9PSBXTV9DQVBUVVJFQ0hBTkdFRCkKKyAgICB7CisJLyogb24gVzk1L05UNCwgc29tZWhvdyB5b3UgZ2V0IGluIGhlcmUgd2l0aCBhbiBvZGQgTXNnCisJICogaWYgeW91IHByZXNzIG9uZSBidXR0b24gd2hpbGUgaG9sZGluZyBkb3duIHRoZSBvdGhlci4uKi8KKwlpZiAoc19idXR0b25fcGVuZGluZyA9PSBNT1VTRV9MRUZUKQorCSAgICBidXR0b24gPSBNT1VTRV9SSUdIVDsKKwllbHNlCisJICAgIGJ1dHRvbiA9IE1PVVNFX0xFRlQ7CisgICAgfQorI2VuZGlmCisgICAgaWYgKGJ1dHRvbiA+PSAwKQorICAgIHsKKwlyZXBlYXRlZF9jbGljayA9ICgoaW50KShjdXJyZW50VGltZSAtIHNfcHJldlRpbWUpIDwgcF9tb3VzZXQpOworCisJLyoKKwkgKiBIb2xkaW5nIGRvd24gdGhlIGxlZnQgYW5kIHJpZ2h0IGJ1dHRvbnMgc2ltdWxhdGVzIHB1c2hpbmcgdGhlIG1pZGRsZQorCSAqIGJ1dHRvbi4KKwkgKi8KKwlpZiAocmVwZWF0ZWRfY2xpY2sgJiYKKwkJKChidXR0b24gPT0gTU9VU0VfTEVGVCAmJiBzX2J1dHRvbl9wZW5kaW5nID09IE1PVVNFX1JJR0hUKSB8fAorCQkgKGJ1dHRvbiA9PSBNT1VTRV9SSUdIVCAmJiBzX2J1dHRvbl9wZW5kaW5nID09IE1PVVNFX0xFRlQpKSkKKwl7CisJICAgIC8qCisJICAgICAqIEhtbSwgZ3VpLmMgd2lsbCBpZ25vcmUgbW9yZSB0aGFuIG9uZSBidXR0b24gZG93biBhdCBhIHRpbWUsIHNvCisJICAgICAqIHByZXRlbmQgd2UgbGV0IGdvIG9mIGl0IGZpcnN0LgorCSAgICAgKi8KKwkgICAgZ3VpX3NlbmRfbW91c2VfZXZlbnQoTU9VU0VfUkVMRUFTRSwgeCwgeSwgRkFMU0UsIDB4MCk7CisJICAgIGJ1dHRvbiA9IE1PVVNFX01JRERMRTsKKwkgICAgcmVwZWF0ZWRfY2xpY2sgPSBGQUxTRTsKKwkgICAgc19idXR0b25fcGVuZGluZyA9IC0xOworCSAgICBfT25Nb3VzZUV2ZW50KGJ1dHRvbiwgeCwgeSwgcmVwZWF0ZWRfY2xpY2ssIGtleUZsYWdzKTsKKwl9CisJZWxzZSBpZiAoKHJlcGVhdGVkX2NsaWNrKQorCQl8fCAobW91c2VfbW9kZWxfcG9wdXAoKSAmJiAoYnV0dG9uID09IE1PVVNFX1JJR0hUKSkpCisJeworCSAgICBpZiAoc19idXR0b25fcGVuZGluZyA+IC0xKQorCSAgICB7CisJCSAgICBfT25Nb3VzZUV2ZW50KHNfYnV0dG9uX3BlbmRpbmcsIHgsIHksIEZBTFNFLCBrZXlGbGFncyk7CisJCSAgICBzX2J1dHRvbl9wZW5kaW5nID0gLTE7CisJICAgIH0KKwkgICAgLyogVFJBQ0UoIkJ1dHRvbiBkb3duIGF0IHggJWQsIHkgJWRcbiIsIHgsIHkpOyAqLworCSAgICBfT25Nb3VzZUV2ZW50KGJ1dHRvbiwgeCwgeSwgcmVwZWF0ZWRfY2xpY2ssIGtleUZsYWdzKTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcHJlc3MgKGkuZS4gbm90IGEgbXVsdGlwbGUgY2xpY2spIGRvbid0CisJICAgICAqIGFjdGlvbiBpbW1lZGlhdGVseSwgYnV0IHN0b3JlIGFuZCB3YWl0IGZvcjoKKwkgICAgICogaSkgYnV0dG9uLXVwCisJICAgICAqIGlpKSBtb3VzZSBtb3ZlCisJICAgICAqIGlpaSkgYW5vdGhlciBidXR0b24gcHJlc3MKKwkgICAgICogYmVmb3JlIHVzaW5nIGl0LgorCSAgICAgKiBUaGlzIGVuYWJsZXMgdXMgdG8gbWFrZSBsZWZ0K3JpZ2h0IHNpbXVsYXRlIG1pZGRsZSBidXR0b24sCisJICAgICAqIHdpdGhvdXQgbGVmdCBvciByaWdodCBiZWluZyBhY3Rpb25lZCBmaXJzdC4gIFRoZSBzaWRlLWVmZmVjdCBpcworCSAgICAgKiB0aGF0IGlmIHlvdSBjbGljayBhbmQgaG9sZCB0aGUgbW91c2Ugd2l0aG91dCBkcmFnZ2luZywgdGhlCisJICAgICAqIGN1cnNvciBkb2Vzbid0IG1vdmUgdW50aWwgeW91IHJlbGVhc2UgdGhlIGJ1dHRvbi4gSW4gcHJhY3RpY2UKKwkgICAgICogdGhpcyBpcyBoYXJkbHkgYSBwcm9ibGVtLgorCSAgICAgKi8KKwkgICAgc19idXR0b25fcGVuZGluZyA9IGJ1dHRvbjsKKwkgICAgc194X3BlbmRpbmcgPSB4OworCSAgICBzX3lfcGVuZGluZyA9IHk7CisJICAgIHNfa0ZsYWdzX3BlbmRpbmcgPSBrZXlGbGFnczsKKwl9CisKKwlzX3ByZXZUaW1lID0gY3VycmVudFRpbWU7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK19Pbk1vdXNlTW92ZU9yUmVsZWFzZSgKKyAgICBIV05EIGh3bmQsCisgICAgaW50IHgsCisgICAgaW50IHksCisgICAgVUlOVCBrZXlGbGFncykKK3sKKyAgICBpbnQgYnV0dG9uOworCisgICAgaWYgKHNfYnV0dG9uX3BlbmRpbmcgPiAtMSkKKyAgICB7CisJLyogRGVsYXllZCBhY3Rpb24gZm9yIG1vdXNlIGRvd24gZXZlbnQgKi8KKwlfT25Nb3VzZUV2ZW50KHNfYnV0dG9uX3BlbmRpbmcsIHNfeF9wZW5kaW5nLAorCQkJc195X3BlbmRpbmcsIEZBTFNFLCBzX2tGbGFnc19wZW5kaW5nKTsKKwlzX2J1dHRvbl9wZW5kaW5nID0gLTE7CisgICAgfQorICAgIGlmIChzX3VNc2cgPT0gV01fTU9VU0VNT1ZFKQorICAgIHsKKwkvKgorCSAqIEl0J3Mgb25seSBhIE1PVVNFX0RSQUcgaWYgb25lIG9yIG1vcmUgbW91c2UgYnV0dG9ucyBhcmUgYmVpbmcgaGVsZAorCSAqIGRvd24uCisJICovCisJaWYgKCEoa2V5RmxhZ3MgJiAoTUtfTEJVVFRPTiB8IE1LX01CVVRUT04gfCBNS19SQlVUVE9OCisJCQkJCQl8IE1LX1hCVVRUT04xIHwgTUtfWEJVVFRPTjIpKSkKKwl7CisJICAgIGd1aV9tb3VzZV9tb3ZlZCh4LCB5KTsKKwkgICAgcmV0dXJuOworCX0KKworCS8qCisJICogV2hpbGUgYnV0dG9uIGlzIGRvd24sIGtlZXAgZ3JhYmJpbmcgbW91c2UgbW92ZSBldmVudHMgd2hlbgorCSAqIHRoZSBtb3VzZSBnb2VzIG91dHNpZGUgdGhlIHdpbmRvdworCSAqLworCVNldENhcHR1cmUoc190ZXh0QXJlYSk7CisJYnV0dG9uID0gTU9VU0VfRFJBRzsKKwkvKiBUUkFDRSgiICBtb3ZlIGF0IHggJWQsIHkgJWRcbiIsIHgsIHkpOyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworCVJlbGVhc2VDYXB0dXJlKCk7CisJYnV0dG9uID0gTU9VU0VfUkVMRUFTRTsKKwkvKiBUUkFDRSgiICB1cCBhdCB4ICVkLCB5ICVkXG4iLCB4LCB5KTsgKi8KKyAgICB9CisKKyAgICBfT25Nb3VzZUV2ZW50KGJ1dHRvbiwgeCwgeSwgRkFMU0UsIGtleUZsYWdzKTsKK30KKworI2lmZGVmIEZFQVRfTUVOVQorLyoKKyAqIEZpbmQgdGhlIHZpbW1lbnVfVCB3aXRoIHRoZSBnaXZlbiBpZAorICovCisgICAgc3RhdGljIHZpbW1lbnVfVCAqCitndWlfbXN3aW5fZmluZF9tZW51KAorICAgIHZpbW1lbnVfVAkqcE1lbnUsCisgICAgaW50CQlpZCkKK3sKKyAgICB2aW1tZW51X1QJKnBDaGlsZE1lbnU7CisKKyAgICB3aGlsZSAocE1lbnUpCisgICAgeworCWlmIChwTWVudS0+aWQgPT0gKFVJTlQpaWQpCisJICAgIGJyZWFrOworCWlmIChwTWVudS0+Y2hpbGRyZW4gIT0gTlVMTCkKKwl7CisJICAgIHBDaGlsZE1lbnUgPSBndWlfbXN3aW5fZmluZF9tZW51KHBNZW51LT5jaGlsZHJlbiwgaWQpOworCSAgICBpZiAocENoaWxkTWVudSkKKwkgICAgeworCQlwTWVudSA9IHBDaGlsZE1lbnU7CisJCWJyZWFrOworCSAgICB9CisJfQorCXBNZW51ID0gcE1lbnUtPm5leHQ7CisgICAgfQorICAgIHJldHVybiBwTWVudTsKK30KKworICAgIHN0YXRpYyB2b2lkCitfT25NZW51KAorICAgIEhXTkQJaHduZCwKKyAgICBpbnQJCWlkLAorICAgIEhXTkQJaHduZEN0bCwKKyAgICBVSU5UCWNvZGVOb3RpZnkpCit7CisgICAgdmltbWVudV9UCSpwTWVudTsKKworICAgIHBNZW51ID0gZ3VpX21zd2luX2ZpbmRfbWVudShyb290X21lbnUsIGlkKTsKKyAgICBpZiAocE1lbnUpCisJZ3VpX21lbnVfY2IocE1lbnUpOworfQorI2VuZGlmCisKKyNpZmRlZiBNU1dJTl9GSU5EX1JFUExBQ0UKKy8qCisgKiBIYW5kbGUgYSBGaW5kL1JlcGxhY2Ugd2luZG93IG1lc3NhZ2UuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorX09uRmluZFJlcGwodm9pZCkKK3sKKyAgICBpbnQJICAgIGZsYWdzID0gMDsKKyAgICBpbnQJICAgIGRvd247CisKKyAgICBpZiAoc19maW5kcmVwX3N0cnVjdC5GbGFncyAmIEZSX0RJQUxPR1RFUk0pCisJLyogR2l2ZSBtYWluIHdpbmRvdyB0aGUgZm9jdXMgYmFjay4gKi8KKwkodm9pZClTZXRGb2N1cyhzX2h3bmQpOworCisgICAgaWYgKHNfZmluZHJlcF9zdHJ1Y3QuRmxhZ3MgJiBGUl9GSU5ETkVYVCkKKyAgICB7CisJZmxhZ3MgPSBGUkRfRklORE5FWFQ7CisKKwkvKiBHaXZlIG1haW4gd2luZG93IHRoZSBmb2N1cyBiYWNrOiB0aGlzIGlzIHNvIHRoZSBjdXJzb3IgaXNuJ3QKKwkgKiBob2xsb3cuICovCisJKHZvaWQpU2V0Rm9jdXMoc19od25kKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc19maW5kcmVwX3N0cnVjdC5GbGFncyAmIEZSX1JFUExBQ0UpCisgICAgeworCWZsYWdzID0gRlJEX1JFUExBQ0U7CisKKwkvKiBHaXZlIG1haW4gd2luZG93IHRoZSBmb2N1cyBiYWNrOiB0aGlzIGlzIHNvIHRoZSBjdXJzb3IgaXNuJ3QKKwkgKiBob2xsb3cuICovCisJKHZvaWQpU2V0Rm9jdXMoc19od25kKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc19maW5kcmVwX3N0cnVjdC5GbGFncyAmIEZSX1JFUExBQ0VBTEwpCisgICAgeworCWZsYWdzID0gRlJEX1JFUExBQ0VBTEw7CisgICAgfQorCisgICAgaWYgKGZsYWdzICE9IDApCisgICAgeworCS8qIENhbGwgdGhlIGdlbmVyaWMgR1VJIGZ1bmN0aW9uIHRvIGRvIHRoZSBhY3R1YWwgd29yay4gKi8KKwlpZiAoc19maW5kcmVwX3N0cnVjdC5GbGFncyAmIEZSX1dIT0xFV09SRCkKKwkgICAgZmxhZ3MgfD0gRlJEX1dIT0xFX1dPUkQ7CisJaWYgKHNfZmluZHJlcF9zdHJ1Y3QuRmxhZ3MgJiBGUl9NQVRDSENBU0UpCisJICAgIGZsYWdzIHw9IEZSRF9NQVRDSF9DQVNFOworCWRvd24gPSAoc19maW5kcmVwX3N0cnVjdC5GbGFncyAmIEZSX0RPV04pICE9IDA7CisJZ3VpX2RvX2ZpbmRyZXBsKGZsYWdzLCBzX2ZpbmRyZXBfc3RydWN0Lmxwc3RyRmluZFdoYXQsCisJCQkJICAgICBzX2ZpbmRyZXBfc3RydWN0Lmxwc3RyUmVwbGFjZVdpdGgsIGRvd24pOworICAgIH0KK30KKyNlbmRpZgorCisgICAgc3RhdGljIHZvaWQKK0hhbmRsZU1vdXNlSGlkZShVSU5UIHVNc2csIExQQVJBTSBsUGFyYW0pCit7CisgICAgc3RhdGljIExQQVJBTSBsYXN0X2xQYXJhbSA9IDBMOworCisgICAgLyogV2Ugc29tZXRpbWVzIGdldCBhIG1vdXNlbW92ZSB3aGVuIHRoZSBtb3VzZSBkaWRuJ3QgbW92ZS4uLiAqLworICAgIGlmICh1TXNnID09IFdNX01PVVNFTU9WRSkKKyAgICB7CisJaWYgKGxQYXJhbSA9PSBsYXN0X2xQYXJhbSkKKwkgICAgcmV0dXJuOworCWxhc3RfbFBhcmFtID0gbFBhcmFtOworICAgIH0KKworICAgIC8qIEhhbmRsZSBzcGVjaWFsbHksIHRvIGNlbnRyYWxpc2UgY29kaW5nLiBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgY2F0Y2ggYWxsCisgICAgICogcG9zc2libGUgZXZlbnRzIHdoaWNoIHNob3VsZCBjYXVzZSB1cyB0byByZXN0b3JlIHRoZSBjdXJzb3IgKGFzIGl0IGlzIGEKKyAgICAgKiBzaGFyZWQgcmVzb3VyY2UsIHdlIHRha2UgZnVsbCByZXNwb25zaWJpbGl0eSBmb3IgaXQpLgorICAgICAqLworICAgIHN3aXRjaCAodU1zZykKKyAgICB7CisgICAgY2FzZSBXTV9LRVlVUDoKKyAgICBjYXNlIFdNX0NIQVI6CisJLyoKKwkgKiBibGFuayBvdXQgdGhlIHBvaW50ZXIgaWYgbmVjZXNzYXJ5CisJICovCisJaWYgKHBfbWgpCisJICAgIGd1aV9tY2hfbW91c2VoaWRlKFRSVUUpOworCWJyZWFrOworCisgICAgY2FzZSBXTV9TWVNLRVlVUDoJIC8qIHNob3cgdGhlIHBvaW50ZXIgd2hlbiBhIHN5c3RlbS1rZXkgaXMgcHJlc3NlZCAqLworICAgIGNhc2UgV01fU1lTQ0hBUjoKKyAgICBjYXNlIFdNX01PVVNFTU9WRToJIC8qIHNob3cgdGhlIHBvaW50ZXIgb24gYW55IG1vdXNlIGFjdGlvbiAqLworICAgIGNhc2UgV01fTEJVVFRPTkRPV046CisgICAgY2FzZSBXTV9MQlVUVE9OVVA6CisgICAgY2FzZSBXTV9NQlVUVE9ORE9XTjoKKyAgICBjYXNlIFdNX01CVVRUT05VUDoKKyAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgorICAgIGNhc2UgV01fUkJVVFRPTlVQOgorICAgIGNhc2UgV01fWEJVVFRPTkRPV046CisgICAgY2FzZSBXTV9YQlVUVE9OVVA6CisgICAgY2FzZSBXTV9OQ01PVVNFTU9WRToKKyAgICBjYXNlIFdNX05DTEJVVFRPTkRPV046CisgICAgY2FzZSBXTV9OQ0xCVVRUT05VUDoKKyAgICBjYXNlIFdNX05DTUJVVFRPTkRPV046CisgICAgY2FzZSBXTV9OQ01CVVRUT05VUDoKKyAgICBjYXNlIFdNX05DUkJVVFRPTkRPV046CisgICAgY2FzZSBXTV9OQ1JCVVRUT05VUDoKKyAgICBjYXNlIFdNX0tJTExGT0NVUzoKKwkvKgorCSAqIGlmIHRoZSBwb2ludGVyIGlzIGN1cnJlbnRseSBoaWRkZW4sIHRoZW4gd2Ugc2hvdWxkIHNob3cgaXQuCisJICovCisJZ3VpX21jaF9tb3VzZWhpZGUoRkFMU0UpOworCWJyZWFrOworICAgIH0KK30KKworICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLCitfVGV4dEFyZWFXbmRQcm9jKAorICAgIEhXTkQgaHduZCwKKyAgICBVSU5UIHVNc2csCisgICAgV1BBUkFNIHdQYXJhbSwKKyAgICBMUEFSQU0gbFBhcmFtKQoreworICAgIC8qCisgICAgVFJBQ0UoIlRleHRBcmVhV25kUHJvYzogaHduZCA9ICUwOHgsIG1zZyA9ICV4LCB3UGFyYW0gPSAleCwgbFBhcmFtID0gJXhcbiIsCisJICBod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgKi8KKworICAgIEhhbmRsZU1vdXNlSGlkZSh1TXNnLCBsUGFyYW0pOworCisgICAgc191TXNnID0gdU1zZzsKKyAgICBzX3dQYXJhbSA9IHdQYXJhbTsKKyAgICBzX2xQYXJhbSA9IGxQYXJhbTsKKworI2lmZGVmIEZFQVRfQkVWQUwKKyAgICBUcmFja1VzZXJBY3Rpdml0eSh1TXNnKTsKKyNlbmRpZgorCisgICAgc3dpdGNoICh1TXNnKQorICAgIHsKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX0xCVVRUT05EQkxDTEssX09uTW91c2VCdXR0b25Eb3duKTsKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX0xCVVRUT05ET1dOLF9Pbk1vdXNlQnV0dG9uRG93bik7CisJSEFORExFX01TRyhod25kLCBXTV9MQlVUVE9OVVAsCV9Pbk1vdXNlTW92ZU9yUmVsZWFzZSk7CisJSEFORExFX01TRyhod25kLCBXTV9NQlVUVE9OREJMQ0xLLF9Pbk1vdXNlQnV0dG9uRG93bik7CisJSEFORExFX01TRyhod25kLCBXTV9NQlVUVE9ORE9XTixfT25Nb3VzZUJ1dHRvbkRvd24pOworCUhBTkRMRV9NU0coaHduZCwgV01fTUJVVFRPTlVQLAlfT25Nb3VzZU1vdmVPclJlbGVhc2UpOworCUhBTkRMRV9NU0coaHduZCwgV01fTU9VU0VNT1ZFLAlfT25Nb3VzZU1vdmVPclJlbGVhc2UpOworCUhBTkRMRV9NU0coaHduZCwgV01fUEFJTlQsCV9PblBhaW50KTsKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX1JCVVRUT05EQkxDTEssX09uTW91c2VCdXR0b25Eb3duKTsKKwlIQU5ETEVfTVNHKGh3bmQsIFdNX1JCVVRUT05ET1dOLF9Pbk1vdXNlQnV0dG9uRG93bik7CisJSEFORExFX01TRyhod25kLCBXTV9SQlVUVE9OVVAsCV9Pbk1vdXNlTW92ZU9yUmVsZWFzZSk7CisjaWZuZGVmIFdJTjE2IC8qPFZOPiovCisJSEFORExFX01TRyhod25kLCBXTV9YQlVUVE9OREJMQ0xLLF9Pbk1vdXNlQnV0dG9uRG93bik7CisJSEFORExFX01TRyhod25kLCBXTV9YQlVUVE9ORE9XTixfT25Nb3VzZUJ1dHRvbkRvd24pOworCUhBTkRMRV9NU0coaHduZCwgV01fWEJVVFRPTlVQLAlfT25Nb3VzZU1vdmVPclJlbGVhc2UpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0JFVkFMCisJY2FzZSBXTV9OT1RJRlk6IEhhbmRsZV9XTV9Ob3RpZnkoaHduZCwgKExQTk1IRFIpbFBhcmFtKTsKKwkgICAgcmV0dXJuIFRSVUU7CisjZW5kaWYKKworICAgIGRlZmF1bHQ6CisJcmV0dXJuIE15V2luZG93UHJvYyhod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgfQorfQorCisjaWYgKGRlZmluZWQoV0lOMzI2NCkgJiYgZGVmaW5lZChGRUFUX01CWVRFKSkgXAorCXx8IGRlZmluZWQoR0xPQkFMX0lNRSkgXAorCXx8IGRlZmluZWQoUFJPVE8pCisjIGlmZGVmIFBST1RPCit0eXBlZGVmIGludCBXSU5BUEk7CisjIGVuZGlmCisKKyAgICBMUkVTVUxUIFdJTkFQSQordmltX1dpbmRvd1Byb2MoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisjIGlmZGVmIEdMT0JBTF9JTUUKKyAgICByZXR1cm4gZ2xvYmFsX2ltZV9EZWZXaW5kb3dQcm9jKGh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKyMgZWxzZQorICAgIGlmICh3aWRlX1dpbmRvd1Byb2MpCisJcmV0dXJuIERlZldpbmRvd1Byb2NXKGh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAgICByZXR1cm4gRGVmV2luZG93UHJvYyhod25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvciBoYXMgYmVlbiBjaGFuZ2VkLgorICovCisgICAgdm9pZAorZ3VpX21jaF9uZXdfY29sb3JzKHZvaWQpCit7CisgICAgLyogbm90aGluZyB0byBkbz8gKi8KK30KKworLyoKKyAqIFNldCB0aGUgY29sb3JzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICovCisgICAgdm9pZAorZ3VpX21jaF9kZWZfY29sb3JzKCkKK3sKKyAgICBndWkubm9ybV9waXhlbCA9IEdldFN5c0NvbG9yKENPTE9SX1dJTkRPV1RFWFQpOworICAgIGd1aS5iYWNrX3BpeGVsID0gR2V0U3lzQ29sb3IoQ09MT1JfV0lORE9XKTsKKyAgICBndWkuZGVmX25vcm1fcGl4ZWwgPSBndWkubm9ybV9waXhlbDsKKyAgICBndWkuZGVmX2JhY2tfcGl4ZWwgPSBndWkuYmFja19waXhlbDsKK30KKworLyoKKyAqIE9wZW4gdGhlIEdVSSB3aW5kb3cgd2hpY2ggd2FzIGNyZWF0ZWQgYnkgYSBjYWxsIHRvIGd1aV9tY2hfaW5pdCgpLgorICovCisgICAgaW50CitndWlfbWNoX29wZW4odm9pZCkKK3sKKyNpZm5kZWYgU1dfU0hPV0RFRkFVTFQKKyMgZGVmaW5lIFNXX1NIT1dERUZBVUxUIDEwCS8qIEJvcmxhbmQgNS4wIGRvZXNuJ3QgaGF2ZSBpdCAqLworI2VuZGlmCisgICAgLyogQWN0dWFsbHkgb3BlbiB0aGUgd2luZG93LCBpZiBub3QgYWxyZWFkeSB2aXNpYmxlCisgICAgICogKG1heSBiZSBkb25lIGFscmVhZHkgaW4gZ3VpX21jaF9zZXRfc2hlbGxzaXplKSAqLworICAgIGlmICghSXNXaW5kb3dWaXNpYmxlKHNfaHduZCkpCisJU2hvd1dpbmRvdyhzX2h3bmQsIFNXX1NIT1dERUZBVUxUKTsKKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93LgorICovCisgICAgaW50CitndWlfbWNoX2dldF93aW5wb3MoaW50ICp4LCBpbnQgKnkpCit7CisgICAgUkVDVCAgICByZWN0OworCisgICAgR2V0V2luZG93UmVjdChzX2h3bmQsICZyZWN0KTsKKyAgICAqeCA9IHJlY3QubGVmdDsKKyAgICAqeSA9IHJlY3QudG9wOworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93IHRvIHRoZSBnaXZlbgorICogY29vcmRpbmF0ZXMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF93aW5wb3MoaW50IHgsIGludCB5KQoreworICAgIFNldFdpbmRvd1BvcyhzX2h3bmQsIE5VTEwsIHgsIHksIDAsIDAsCisJCSBTV1BfTk9aT1JERVIgfCBTV1BfTk9TSVpFIHwgU1dQX05PQUNUSVZBVEUpOworfQorICAgIHZvaWQKK2d1aV9tY2hfc2V0X3RleHRfYXJlYV9wb3MoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCit7CisgICAgc3RhdGljIGludCBvbGR4ID0gMDsKKyAgICBzdGF0aWMgaW50IG9sZHkgPSAwOworCisgICAgU2V0V2luZG93UG9zKHNfdGV4dEFyZWEsIE5VTEwsIHgsIHksIHcsIGgsIFNXUF9OT1pPUkRFUiB8IFNXUF9OT0FDVElWQVRFKTsKKworI2lmZGVmIEZFQVRfVE9PTEJBUgorICAgIGlmICh2aW1fc3RyY2hyKHBfZ28sIEdPX1RPT0xCQVIpICE9IE5VTEwpCisJU2VuZE1lc3NhZ2Uoc190b29sYmFyaHduZCwgV01fU0laRSwKKwkJKFdQQVJBTSkwLCAoTFBBUkFNKSh3ICsgKChsb25nKShUT09MQkFSX0JVVFRPTl9IRUlHSFQrOCk8PDE2KSkpOworI2VuZGlmCisgICAgLyogV2hlbiBzaWRlIHNjcm9sbCBiYXIgaXMgdW5zaG93biwgdGhlIHNpemUgb2Ygd2luZG93IHdpbGwgY2hhbmdlLgorICAgICAqIHRoZW4sIHRoZSB0ZXh0IGFyZWEgbW92ZSBsZWZ0IG9yIHJpZ2h0LiB0aHVzIGNsaWVudCByZWN0IHNob3VsZCBiZQorICAgICAqIGZvcmNlbHkgcmVkcmF3LiAoWWFzdWhpcm8gTWF0c3Vtb3RvKSAqLworICAgIGlmIChvbGR4ICE9IHggfHwgb2xkeSAhPSB5KQorICAgIHsKKwlJbnZhbGlkYXRlUmVjdChzX2h3bmQsIE5VTEwsIEZBTFNFKTsKKwlvbGR4ID0geDsKKwlvbGR5ID0geTsKKyAgICB9CisKK30KKworCisvKgorICogU2Nyb2xsYmFyIHN0dWZmOgorICovCisKKyAgICB2b2lkCitndWlfbWNoX2VuYWJsZV9zY3JvbGxiYXIoCisgICAgc2Nyb2xsYmFyX1QgICAgICpzYiwKKyAgICBpbnQJCSAgICBmbGFnKQoreworICAgIFNob3dTY3JvbGxCYXIoc2ItPmlkLCBTQl9DVEwsIGZsYWcpOworCisgICAgLyogVE9ETzogV2hlbiB0aGUgd2luZG93IGlzIG1heGltaXplZCwgdGhlIHNpemUgb2YgdGhlIHdpbmRvdyBzdGF5cyB0aGUKKyAgICAgKiBzYW1lLCB0aHVzIHRoZSBzaXplIG9mIHRoZSB0ZXh0IGFyZWEgY2hhbmdlcy4gIE9uIFdpbjk4IGl0J3MgT0ssIG9uIFdpbgorICAgICAqIE5UIDQuMCBpdCdzIG5vdC4uLiAqLworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3BvcygKKyAgICBzY3JvbGxiYXJfVCAqc2IsCisgICAgaW50CQl4LAorICAgIGludAkJeSwKKyAgICBpbnQJCXcsCisgICAgaW50CQloKQoreworICAgIFNldFdpbmRvd1BvcyhzYi0+aWQsIE5VTEwsIHgsIHksIHcsIGgsIFNXUF9OT1pPUkRFUiB8IFNXUF9OT0FDVElWQVRFIHwgU1dQX1NIT1dXSU5ET1cpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9jcmVhdGVfc2Nyb2xsYmFyKAorICAgIHNjcm9sbGJhcl9UICpzYiwKKyAgICBpbnQJCW9yaWVudCkJLyogU0JBUl9WRVJUIG9yIFNCQVJfSE9SSVogKi8KK3sKKyAgICBzYi0+aWQgPSBDcmVhdGVXaW5kb3coCisJIlNDUk9MTEJBUiIsICJTY3JvbGxiYXIiLAorCVdTX0NISUxEIHwgKChvcmllbnQgPT0gU0JBUl9WRVJUKSA/IFNCU19WRVJUIDogU0JTX0hPUlopLCAwLCAwLAorCTEwLAkJCQkvKiBBbnkgdmFsdWUgd2lsbCBkbyBmb3Igbm93ICovCisJMTAsCQkJCS8qIEFueSB2YWx1ZSB3aWxsIGRvIGZvciBub3cgKi8KKwlzX2h3bmQsIE5VTEwsCisJc19oaW5zdCwgTlVMTCk7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBzY3JvbGxiYXIgd2l0aCB0aGUgZ2l2ZW4gaHduZC4KKyAqLworCSBzdGF0aWMgc2Nyb2xsYmFyX1QgKgorZ3VpX21zd2luX2ZpbmRfc2Nyb2xsYmFyKEhXTkQgaHduZCkKK3sKKyAgICB3aW5fVAkqd3A7CisKKyAgICBpZiAoZ3VpLmJvdHRvbV9zYmFyLmlkID09IGh3bmQpCisJcmV0dXJuICZndWkuYm90dG9tX3NiYXI7CisgICAgRk9SX0FMTF9XSU5ET1dTKHdwKQorICAgIHsKKwlpZiAod3AtPndfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdLmlkID09IGh3bmQpCisJICAgIHJldHVybiAmd3AtPndfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdOworCWlmICh3cC0+d19zY3JvbGxiYXJzW1NCQVJfUklHSFRdLmlkID09IGh3bmQpCisJICAgIHJldHVybiAmd3AtPndfc2Nyb2xsYmFyc1tTQkFSX1JJR0hUXTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQgdGhlIGNoYXJhY3RlciBzaXplIG9mIGEgZm9udC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitHZXRGb250U2l6ZShHdWlGb250IGZvbnQpCit7CisgICAgSFdORCAgICBod25kID0gR2V0RGVza3RvcFdpbmRvdygpOworICAgIEhEQwkgICAgaGRjID0gR2V0V2luZG93REMoaHduZCk7CisgICAgSEZPTlQgICBoZm50T2xkID0gU2VsZWN0Rm9udChoZGMsIChIRk9OVClmb250KTsKKyAgICBURVhUTUVUUklDIHRtOworCisgICAgR2V0VGV4dE1ldHJpY3MoaGRjLCAmdG0pOworICAgIGd1aS5jaGFyX3dpZHRoID0gdG0udG1BdmVDaGFyV2lkdGggKyB0bS50bU92ZXJoYW5nOworCisgICAgZ3VpLmNoYXJfaGVpZ2h0ID0gdG0udG1IZWlnaHQKKyNpZm5kZWYgTVNXSU4xNl9GQVNUVEVYVAorCSsgcF9saW5lc3BhY2UKKyNlbmRpZgorCTsKKworICAgIFNlbGVjdEZvbnQoaGRjLCBoZm50T2xkKTsKKworICAgIFJlbGVhc2VEQyhod25kLCBoZGMpOworfQorCisgICAgaW50CitndWlfbWNoX2FkanVzdF9jaGFyc2l6ZSh2b2lkKQoreworICAgIEdldEZvbnRTaXplKGd1aS5ub3JtX2ZvbnQpOworICAgIHJldHVybiBPSzsKK30KKworICAgIHN0YXRpYyBHdWlGb250CitnZXRfZm9udF9oYW5kbGUoTE9HRk9OVCAqbGYpCit7CisgICAgSEZPTlQgICBmb250ID0gTlVMTDsKKworICAgIC8qIExvYWQgdGhlIGZvbnQgKi8KKyAgICBmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KGxmKTsKKworICAgIGlmIChmb250ID09IE5VTEwpCisJcmV0dXJuIE5PRk9OVDsKKworICAgIHJldHVybiAoR3VpRm9udClmb250OworfQorCisgICAgc3RhdGljIGludAorcGl4ZWxzX3RvX3BvaW50cyhpbnQgcGl4ZWxzLCBpbnQgdmVydGljYWwpCit7CisgICAgaW50CQlwb2ludHM7CisgICAgSFdORAlod25kOworICAgIEhEQwkJaGRjOworCisgICAgaHduZCA9IEdldERlc2t0b3BXaW5kb3coKTsKKyAgICBoZGMgPSBHZXRXaW5kb3dEQyhod25kKTsKKworICAgIHBvaW50cyA9IE11bERpdihwaXhlbHMsIDcyLAorCQkgICAgR2V0RGV2aWNlQ2FwcyhoZGMsIHZlcnRpY2FsID8gTE9HUElYRUxTWSA6IExPR1BJWEVMU1gpKTsKKworICAgIFJlbGVhc2VEQyhod25kLCBoZGMpOworCisgICAgcmV0dXJuIHBvaW50czsKK30KKworICAgIEd1aUZvbnQKK2d1aV9tY2hfZ2V0X2ZvbnQoCisgICAgY2hhcl91CSpuYW1lLAorICAgIGludAkJZ2l2ZUVycm9ySWZNaXNzaW5nKQoreworICAgIExPR0ZPTlQJbGY7CisgICAgR3VpRm9udAlmb250OworCisgICAgZ2V0X2xvZ2ZvbnQoJmxmLCBuYW1lLCBOVUxMKTsKKyAgICBmb250ID0gZ2V0X2ZvbnRfaGFuZGxlKCZsZik7CisgICAgaWYgKGZvbnQgPT0gTk9GT05UICYmIGdpdmVFcnJvcklmTWlzc2luZykKKwlFTVNHMihfKGVfZm9udCksIG5hbWUpOworICAgIHJldHVybiBmb250OworfQorICAgIHZvaWQKK2d1aV9tY2hfZnJlZV9mb250KEd1aUZvbnQgZm9udCkKK3sKKyAgICBpZiAoZm9udCkKKwlEZWxldGVPYmplY3QoKEhGT05UKWZvbnQpOworfQorCisgICAgc3RhdGljIGludAoraGV4X2RpZ2l0KGludCBjKQoreworICAgIGlmIChWSU1fSVNESUdJVChjKSkKKwlyZXR1cm4gYyAtICcwJzsKKyAgICBjID0gVE9MT1dFUl9BU0MoYyk7CisgICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQorCXJldHVybiBjIC0gJ2EnICsgMTA7CisgICAgcmV0dXJuIC0xMDAwOworfQorLyoKKyAqIFJldHVybiB0aGUgUGl4ZWwgdmFsdWUgKGNvbG9yKSBmb3IgdGhlIGdpdmVuIGNvbG9yIG5hbWUuCisgKiBSZXR1cm4gSU5WQUxDT0xPUiBmb3IgZXJyb3IuCisgKi8KKyAgICBndWljb2xvcl9UCitndWlfbWNoX2dldF9jb2xvcihjaGFyX3UgKm5hbWUpCit7CisgICAgdHlwZWRlZiBzdHJ1Y3QgZ3VpY29sb3JfdFRhYmxlCisgICAgeworCWNoYXIJICAgICpuYW1lOworCUNPTE9SUkVGICAgIGNvbG9yOworICAgIH0gZ3VpY29sb3JfdFRhYmxlOworCisgICAgc3RhdGljIGd1aWNvbG9yX3RUYWJsZSB0YWJsZVtdID0KKyAgICB7CisJeyJCbGFjayIsCQlSR0IoMHgwMCwgMHgwMCwgMHgwMCl9LAorCXsiRGFya0dyYXkiLAkJUkdCKDB4ODAsIDB4ODAsIDB4ODApfSwKKwl7IkRhcmtHcmV5IiwJCVJHQigweDgwLCAweDgwLCAweDgwKX0sCisJeyJHcmF5IiwJCVJHQigweEMwLCAweEMwLCAweEMwKX0sCisJeyJHcmV5IiwJCVJHQigweEMwLCAweEMwLCAweEMwKX0sCisJeyJMaWdodEdyYXkiLAkJUkdCKDB4RTAsIDB4RTAsIDB4RTApfSwKKwl7IkxpZ2h0R3JleSIsCQlSR0IoMHhFMCwgMHhFMCwgMHhFMCl9LAorCXsiV2hpdGUiLAkJUkdCKDB4RkYsIDB4RkYsIDB4RkYpfSwKKwl7IkRhcmtSZWQiLAkJUkdCKDB4ODAsIDB4MDAsIDB4MDApfSwKKwl7IlJlZCIsCQkJUkdCKDB4RkYsIDB4MDAsIDB4MDApfSwKKwl7IkxpZ2h0UmVkIiwJCVJHQigweEZGLCAweEEwLCAweEEwKX0sCisJeyJEYXJrQmx1ZSIsCQlSR0IoMHgwMCwgMHgwMCwgMHg4MCl9LAorCXsiQmx1ZSIsCQlSR0IoMHgwMCwgMHgwMCwgMHhGRil9LAorCXsiTGlnaHRCbHVlIiwJCVJHQigweEEwLCAweEEwLCAweEZGKX0sCisJeyJEYXJrR3JlZW4iLAkJUkdCKDB4MDAsIDB4ODAsIDB4MDApfSwKKwl7IkdyZWVuIiwJCVJHQigweDAwLCAweEZGLCAweDAwKX0sCisJeyJMaWdodEdyZWVuIiwJCVJHQigweEEwLCAweEZGLCAweEEwKX0sCisJeyJEYXJrQ3lhbiIsCQlSR0IoMHgwMCwgMHg4MCwgMHg4MCl9LAorCXsiQ3lhbiIsCQlSR0IoMHgwMCwgMHhGRiwgMHhGRil9LAorCXsiTGlnaHRDeWFuIiwJCVJHQigweEEwLCAweEZGLCAweEZGKX0sCisJeyJEYXJrTWFnZW50YSIsCQlSR0IoMHg4MCwgMHgwMCwgMHg4MCl9LAorCXsiTWFnZW50YSIsCQlSR0IoMHhGRiwgMHgwMCwgMHhGRil9LAorCXsiTGlnaHRNYWdlbnRhIiwJUkdCKDB4RkYsIDB4QTAsIDB4RkYpfSwKKwl7IkJyb3duIiwJCVJHQigweDgwLCAweDQwLCAweDQwKX0sCisJeyJZZWxsb3ciLAkJUkdCKDB4RkYsIDB4RkYsIDB4MDApfSwKKwl7IkxpZ2h0WWVsbG93IiwJCVJHQigweEZGLCAweEZGLCAweEEwKX0sCisJeyJEYXJrWWVsbG93IiwJCVJHQigweEJCLCAweEJCLCAweDAwKX0sCisJeyJTZWFHcmVlbiIsCQlSR0IoMHgyRSwgMHg4QiwgMHg1Nyl9LAorCXsiT3JhbmdlIiwJCVJHQigweEZGLCAweEE1LCAweDAwKX0sCisJeyJQdXJwbGUiLAkJUkdCKDB4QTAsIDB4MjAsIDB4RjApfSwKKwl7IlNsYXRlQmx1ZSIsCQlSR0IoMHg2QSwgMHg1QSwgMHhDRCl9LAorCXsiVmlvbGV0IiwJCVJHQigweEVFLCAweDgyLCAweEVFKX0sCisgICAgfTsKKworICAgIHR5cGVkZWYgc3RydWN0IFN5c0NvbG9yVGFibGUKKyAgICB7CisJY2hhcgkgICAgKm5hbWU7CisJaW50CSAgICBjb2xvcjsKKyAgICB9IFN5c0NvbG9yVGFibGU7CisKKyAgICBzdGF0aWMgU3lzQ29sb3JUYWJsZSBzeXNfdGFibGVbXSA9CisgICAgeworI2lmZGVmIFdJTjMyNjQKKwl7IlNZU18zRERLU0hBRE9XIiwgQ09MT1JfM0RES1NIQURPV30sCisJeyJTWVNfM0RISUxJR0hUIiwgQ09MT1JfM0RISUxJR0hUfSwKKyNpZm5kZWYgX19NSU5HVzMyX18KKwl7IlNZU18zREhJR0hMSUdIVCIsIENPTE9SXzNESElHSExJR0hUfSwKKyNlbmRpZgorCXsiU1lTX0JUTkhJTElHSFQiLCBDT0xPUl9CVE5ISUxJR0hUfSwKKwl7IlNZU19CVE5ISUdITElHSFQiLCBDT0xPUl9CVE5ISUdITElHSFR9LAorCXsiU1lTXzNETElHSFQiLCBDT0xPUl8zRExJR0hUfSwKKwl7IlNZU18zRFNIQURPVyIsIENPTE9SXzNEU0hBRE9XfSwKKwl7IlNZU19ERVNLVE9QIiwgQ09MT1JfREVTS1RPUH0sCisJeyJTWVNfSU5GT0JLIiwgQ09MT1JfSU5GT0JLfSwKKwl7IlNZU19JTkZPVEVYVCIsIENPTE9SX0lORk9URVhUfSwKKwl7IlNZU18zREZBQ0UiLCBDT0xPUl8zREZBQ0V9LAorI2VuZGlmCisJeyJTWVNfQlRORkFDRSIsIENPTE9SX0JUTkZBQ0V9LAorCXsiU1lTX0JUTlNIQURPVyIsIENPTE9SX0JUTlNIQURPV30sCisJeyJTWVNfQUNUSVZFQk9SREVSIiwgQ09MT1JfQUNUSVZFQk9SREVSfSwKKwl7IlNZU19BQ1RJVkVDQVBUSU9OIiwgQ09MT1JfQUNUSVZFQ0FQVElPTn0sCisJeyJTWVNfQVBQV09SS1NQQUNFIiwgQ09MT1JfQVBQV09SS1NQQUNFfSwKKwl7IlNZU19CQUNLR1JPVU5EIiwgQ09MT1JfQkFDS0dST1VORH0sCisJeyJTWVNfQlROVEVYVCIsIENPTE9SX0JUTlRFWFR9LAorCXsiU1lTX0NBUFRJT05URVhUIiwgQ09MT1JfQ0FQVElPTlRFWFR9LAorCXsiU1lTX0dSQVlURVhUIiwgQ09MT1JfR1JBWVRFWFR9LAorCXsiU1lTX0hJR0hMSUdIVCIsIENPTE9SX0hJR0hMSUdIVH0sCisJeyJTWVNfSElHSExJR0hUVEVYVCIsIENPTE9SX0hJR0hMSUdIVFRFWFR9LAorCXsiU1lTX0lOQUNUSVZFQk9SREVSIiwgQ09MT1JfSU5BQ1RJVkVCT1JERVJ9LAorCXsiU1lTX0lOQUNUSVZFQ0FQVElPTiIsIENPTE9SX0lOQUNUSVZFQ0FQVElPTn0sCisJeyJTWVNfSU5BQ1RJVkVDQVBUSU9OVEVYVCIsIENPTE9SX0lOQUNUSVZFQ0FQVElPTlRFWFR9LAorCXsiU1lTX01FTlUiLCBDT0xPUl9NRU5VfSwKKwl7IlNZU19NRU5VVEVYVCIsIENPTE9SX01FTlVURVhUfSwKKwl7IlNZU19TQ1JPTExCQVIiLCBDT0xPUl9TQ1JPTExCQVJ9LAorCXsiU1lTX1dJTkRPVyIsIENPTE9SX1dJTkRPV30sCisJeyJTWVNfV0lORE9XRlJBTUUiLCBDT0xPUl9XSU5ET1dGUkFNRX0sCisJeyJTWVNfV0lORE9XVEVYVCIsIENPTE9SX1dJTkRPV1RFWFR9CisgICAgfTsKKworICAgIGludAkJICAgIHIsIGcsIGI7CisgICAgaW50CQkgICAgaTsKKworICAgIGlmIChuYW1lWzBdID09ICcjJyAmJiBzdHJsZW4obmFtZSkgPT0gNykKKyAgICB7CisJLyogTmFtZSBpcyBpbiAiI3JyZ2diYiIgZm9ybWF0ICovCisJciA9IGhleF9kaWdpdChuYW1lWzFdKSAqIDE2ICsgaGV4X2RpZ2l0KG5hbWVbMl0pOworCWcgPSBoZXhfZGlnaXQobmFtZVszXSkgKiAxNiArIGhleF9kaWdpdChuYW1lWzRdKTsKKwliID0gaGV4X2RpZ2l0KG5hbWVbNV0pICogMTYgKyBoZXhfZGlnaXQobmFtZVs2XSk7CisJaWYgKHIgPCAwIHx8IGcgPCAwIHx8IGIgPCAwKQorCSAgICByZXR1cm4gSU5WQUxDT0xPUjsKKwlyZXR1cm4gUkdCKHIsIGcsIGIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIENoZWNrIGlmIHRoZSBuYW1lIGlzIG9uZSBvZiB0aGUgY29sb3JzIHdlIGtub3cgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRhYmxlKSAvIHNpemVvZih0YWJsZVswXSk7IGkrKykKKwkgICAgaWYgKFNUUklDTVAobmFtZSwgdGFibGVbaV0ubmFtZSkgPT0gMCkKKwkJcmV0dXJuIHRhYmxlW2ldLmNvbG9yOworICAgIH0KKworICAgIC8qCisgICAgICogVHJ5IHRvIGxvb2sgdXAgYSBzeXN0ZW0gY29sb3VyLgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3lzX3RhYmxlKSAvIHNpemVvZihzeXNfdGFibGVbMF0pOyBpKyspCisJaWYgKFNUUklDTVAobmFtZSwgc3lzX3RhYmxlW2ldLm5hbWUpID09IDApCisJICAgIHJldHVybiBHZXRTeXNDb2xvcihzeXNfdGFibGVbaV0uY29sb3IpOworCisgICAgLyoKKyAgICAgKiBMYXN0IGF0dGVtcHQuIExvb2sgaW4gdGhlIGZpbGUgIiRWSU1SVU5USU1FL3JnYi50eHQiLgorICAgICAqLworICAgIHsKKyNkZWZpbmUgTElORV9MRU4gMTAwCisJRklMRQkqZmQ7CisJY2hhcglsaW5lW0xJTkVfTEVOXTsKKwljaGFyX3UJKmZuYW1lOworCisJZm5hbWUgPSBleHBhbmRfZW52X3NhdmUoKGNoYXJfdSAqKSIkVklNUlVOVElNRS9yZ2IudHh0Iik7CisJaWYgKGZuYW1lID09IE5VTEwpCisJICAgIHJldHVybiBJTlZBTENPTE9SOworCisJZmQgPSBmb3BlbigoY2hhciAqKWZuYW1lLCAicnQiKTsKKwl2aW1fZnJlZShmbmFtZSk7CisJaWYgKGZkID09IE5VTEwpCisJICAgIHJldHVybiBJTlZBTENPTE9SOworCisJd2hpbGUgKCFmZW9mKGZkKSkKKwl7CisJICAgIGludAkgICAgbGVuOworCSAgICBpbnQJICAgIHBvczsKKwkgICAgY2hhciAgICAqY29sb3I7CisKKwkgICAgZmdldHMobGluZSwgTElORV9MRU4sIGZkKTsKKwkgICAgbGVuID0gKGludClTVFJMRU4obGluZSk7CisKKwkgICAgaWYgKGxlbiA8PSAxIHx8IGxpbmVbbGVuLTFdICE9ICdcbicpCisJCWNvbnRpbnVlOworCisJICAgIGxpbmVbbGVuLTFdID0gJ1wwJzsKKworCSAgICBpID0gc3NjYW5mKGxpbmUsICIlZCAlZCAlZCAlbiIsICZyLCAmZywgJmIsICZwb3MpOworCSAgICBpZiAoaSAhPSAzKQorCQljb250aW51ZTsKKworCSAgICBjb2xvciA9IGxpbmUgKyBwb3M7CisKKwkgICAgaWYgKFNUUklDTVAoY29sb3IsIG5hbWUpID09IDApCisJICAgIHsKKwkJZmNsb3NlKGZkKTsKKwkJcmV0dXJuIChndWljb2xvcl9UKSBSR0IociwgZywgYik7CisJICAgIH0KKwl9CisKKwlmY2xvc2UoZmQpOworICAgIH0KKworICAgIHJldHVybiBJTlZBTENPTE9SOworfQorLyoKKyAqIFJldHVybiBPSyBpZiB0aGUga2V5IHdpdGggdGhlIHRlcm1jYXAgbmFtZSAibmFtZSIgaXMgc3VwcG9ydGVkLgorICovCisgICAgaW50CitndWlfbWNoX2hhc2tleShjaGFyX3UgKm5hbWUpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBzcGVjaWFsX2tleXNbaV0udmltX2NvZGUxICE9IE5VTDsgaSsrKQorCWlmIChuYW1lWzBdID09IHNwZWNpYWxfa2V5c1tpXS52aW1fY29kZTAgJiYKKwkJCQkJIG5hbWVbMV0gPT0gc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMSkKKwkgICAgcmV0dXJuIE9LOworICAgIHJldHVybiBGQUlMOworfQorCisgICAgdm9pZAorZ3VpX21jaF9iZWVwKHZvaWQpCit7CisgICAgTWVzc2FnZUJlZXAoTUJfT0spOworfQorLyoKKyAqIEludmVydCBhIHJlY3RhbmdsZSBmcm9tIHJvdyByLCBjb2x1bW4gYywgZm9yIG5yIHJvd3MgYW5kIG5jIGNvbHVtbnMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2ludmVydF9yZWN0YW5nbGUoCisgICAgaW50CSAgICByLAorICAgIGludAkgICAgYywKKyAgICBpbnQJICAgIG5yLAorICAgIGludAkgICAgbmMpCit7CisgICAgUkVDVCAgICByYzsKKworICAgIC8qCisgICAgICogTm90ZTogSW52ZXJ0UmVjdCgpIGV4Y2x1ZGVzIHJpZ2h0IGFuZCBib3R0b20gb2YgcmVjdGFuZ2xlLgorICAgICAqLworICAgIHJjLmxlZnQgPSBGSUxMX1goYyk7CisgICAgcmMudG9wID0gRklMTF9ZKHIpOworICAgIHJjLnJpZ2h0ID0gcmMubGVmdCArIG5jICogZ3VpLmNoYXJfd2lkdGg7CisgICAgcmMuYm90dG9tID0gcmMudG9wICsgbnIgKiBndWkuY2hhcl9oZWlnaHQ7CisgICAgSW52ZXJ0UmVjdChzX2hkYywgJnJjKTsKK30KKworLyoKKyAqIEljb25pZnkgdGhlIEdVSSB3aW5kb3cuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2ljb25pZnkodm9pZCkKK3sKKyAgICBTaG93V2luZG93KHNfaHduZCwgU1dfTUlOSU1JWkUpOworfQorCisvKgorICogRHJhdyBhIGN1cnNvciB3aXRob3V0IGZvY3VzLgorICovCisgICAgdm9pZAorZ3VpX21jaF9kcmF3X2hvbGxvd19jdXJzb3IoZ3VpY29sb3JfVCBjb2xvcikKK3sKKyAgICBIQlJVU0ggIGhicjsKKyAgICBSRUNUICAgIHJjOworCisgICAgLyoKKyAgICAgKiBOb3RlOiBGcmFtZVJlY3QoKSBleGNsdWRlcyByaWdodCBhbmQgYm90dG9tIG9mIHJlY3RhbmdsZS4KKyAgICAgKi8KKyAgICByYy5sZWZ0ID0gRklMTF9YKGd1aS5jb2wpOworICAgIHJjLnRvcCA9IEZJTExfWShndWkucm93KTsKKyAgICByYy5yaWdodCA9IHJjLmxlZnQgKyBndWkuY2hhcl93aWR0aDsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKG1iX2xlZnRoYWx2ZShndWkucm93LCBndWkuY29sKSkKKwlyYy5yaWdodCArPSBndWkuY2hhcl93aWR0aDsKKyNlbmRpZgorICAgIHJjLmJvdHRvbSA9IHJjLnRvcCArIGd1aS5jaGFyX2hlaWdodDsKKyAgICBoYnIgPSBDcmVhdGVTb2xpZEJydXNoKGNvbG9yKTsKKyAgICBGcmFtZVJlY3Qoc19oZGMsICZyYywgaGJyKTsKKyAgICBEZWxldGVCcnVzaChoYnIpOworfQorLyoKKyAqIERyYXcgcGFydCBvZiBhIGN1cnNvciwgInciIHBpeGVscyB3aWRlLCBhbmQgImgiIHBpeGVscyBoaWdoLCB1c2luZworICogY29sb3IgImNvbG9yIi4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfZHJhd19wYXJ0X2N1cnNvcigKKyAgICBpbnQJCXcsCisgICAgaW50CQloLAorICAgIGd1aWNvbG9yX1QJY29sb3IpCit7CisgICAgSEJSVVNICWhicjsKKyAgICBSRUNUCXJjOworCisgICAgLyoKKyAgICAgKiBOb3RlOiBGaWxsUmVjdCgpIGV4Y2x1ZGVzIHJpZ2h0IGFuZCBib3R0b20gb2YgcmVjdGFuZ2xlLgorICAgICAqLworICAgIHJjLmxlZnQgPQorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCS8qIHZlcnRpY2FsIGxpbmUgc2hvdWxkIGJlIG9uIHRoZSByaWdodCBvZiBjdXJyZW50IHBvaW50ICovCisJCUNVUlNPUl9CQVJfUklHSFQgPyBGSUxMX1goZ3VpLmNvbCArIDEpIC0gdyA6CisjZW5kaWYKKwkJICAgIEZJTExfWChndWkuY29sKTsKKyAgICByYy50b3AgPSBGSUxMX1koZ3VpLnJvdykgKyBndWkuY2hhcl9oZWlnaHQgLSBoOworICAgIHJjLnJpZ2h0ID0gcmMubGVmdCArIHc7CisgICAgcmMuYm90dG9tID0gcmMudG9wICsgaDsKKyAgICBoYnIgPSBDcmVhdGVTb2xpZEJydXNoKGNvbG9yKTsKKyAgICBGaWxsUmVjdChzX2hkYywgJnJjLCBoYnIpOworICAgIERlbGV0ZUJydXNoKGhicik7Cit9CisKKy8qCisgKiBQcm9jZXNzIGEgc2luZ2xlIFdpbmRvd3MgbWVzc2FnZS4KKyAqIElmIG9uZSBpcyBub3QgYXZhaWxhYmxlIHdlIGhhbmcgdW50aWwgb25lIGlzLgorICovCisgICAgc3RhdGljIHZvaWQKK3Byb2Nlc3NfbWVzc2FnZSh2b2lkKQoreworICAgIE1TRwkJbXNnOworICAgIFVJTlQJdmsgPSAwOwkJLyogVmlydHVhbCBrZXkgKi8KKyAgICBjaGFyX3UJc3RyaW5nWzQwXTsKKyAgICBpbnQJCWk7CisgICAgaW50CQltb2RpZmllcnMgPSAwOworICAgIGludAkJa2V5OworCisgICAgR2V0TWVzc2FnZSgmbXNnLCBOVUxMLCAwLCAwKTsKKworI2lmZGVmIEZFQVRfT0xFCisgICAgLyogTG9vayBhZnRlciBPTEUgQXV0b21hdGlvbiBjb21tYW5kcyAqLworICAgIGlmIChtc2cubWVzc2FnZSA9PSBXTV9PTEUpCisgICAgeworCWNoYXJfdSAqc3RyID0gKGNoYXJfdSAqKW1zZy5sUGFyYW07CisJYWRkX3RvX2lucHV0X2J1ZihzdHIsIChpbnQpU1RSTEVOKHN0cikpOworCXZpbV9mcmVlKHN0cik7CisJcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgaWYgKG1zZy5tZXNzYWdlID09IFdNX05FVEJFQU5TKQorICAgIHsKKwltZXNzYWdlRnJvbU5ldGJlYW5zVzMyKCk7CisJcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TTklGRgorICAgIGlmIChzbmlmZl9yZXF1ZXN0X3dhaXRpbmcgJiYgd2FudF9zbmlmZl9yZXF1ZXN0KQorICAgIHsKKwlzdGF0aWMgY2hhcl91IGJ5dGVzWzNdID0ge0NTSSwgKGNoYXJfdSlLU19FWFRSQSwgKGNoYXJfdSlLRV9TTklGRn07CisJYWRkX3RvX2lucHV0X2J1ZihieXRlcywgMyk7IC8qIEtfU05JRkYgKi8KKwlzbmlmZl9yZXF1ZXN0X3dhaXRpbmcgPSAwOworCXdhbnRfc25pZmZfcmVxdWVzdCA9IDA7CisJLyogcmVxdWVzdCBpcyBoYW5kbGVkIGluIG5vcm1hbC5jICovCisgICAgfQorICAgIGlmIChtc2cubWVzc2FnZSA9PSBXTV9VU0VSKQorCXJldHVybjsKKyNlbmRpZgorCisjaWZkZWYgTVNXSU5fRklORF9SRVBMQUNFCisgICAgLyogRG9uJ3QgcHJvY2VzcyBtZXNzYWdlcyB1c2VkIGJ5IHRoZSBkaWFsb2cgKi8KKyAgICBpZiAoc19maW5kcmVwX2h3bmQgIT0gTlVMTCAmJiBJc0RpYWxvZ01lc3NhZ2Uoc19maW5kcmVwX2h3bmQsICZtc2cpKQorICAgIHsKKwlIYW5kbGVNb3VzZUhpZGUobXNnLm1lc3NhZ2UsIG1zZy5sUGFyYW0pOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgaXQncyBhIHNwZWNpYWwga2V5IHRoYXQgd2UgcmVjb2duaXNlLiAgSWYgbm90LCBjYWxsCisgICAgICogVHJhbnNsYXRlTWVzc2FnZSgpLgorICAgICAqLworICAgIGlmIChtc2cubWVzc2FnZSA9PSBXTV9LRVlET1dOIHx8IG1zZy5tZXNzYWdlID09IFdNX1NZU0tFWURPV04pCisgICAgeworCXZrID0gKGludCkgbXNnLndQYXJhbTsKKwkvKiBoYW5kbGUga2V5IGFmdGVyIGRlYWQga2V5LCBidXQgaWdub3JlIHNoaWZ0LCBhbHQgYW5kIGNvbnRyb2wgKi8KKwlpZiAoZGVhZF9rZXkgJiYgdmsgIT0gVktfU0hJRlQgJiYgdmsgIT0gVktfTUVOVSAmJiB2ayAhPSBWS19DT05UUk9MKQorCXsKKwkgICAgZGVhZF9rZXkgPSAwOworCSAgICAvKiBoYW5kbGUgbm9uLWFscGhhYmV0aWMga2V5cyAob25lcyB0aGF0IGhvcGVmdWxseSBjYW5ub3QgZ2VuZXJhdGUKKwkgICAgICogdW1sYXV0LWNoYXJhY3RlcnMpLCB1bmxlc3Mgd2hlbiBjb250cm9sIGlzIGRvd24gKi8KKwkgICAgaWYgKHZrIDwgJ0EnIHx8IHZrID4gJ1onIHx8IChHZXRLZXlTdGF0ZShWS19DT05UUk9MKSAmIDB4ODAwMCkpCisJICAgIHsKKwkJTVNHIGRtOworCisJCWRtLm1lc3NhZ2UgPSBtc2cubWVzc2FnZTsKKwkJZG0uaHduZCA9IG1zZy5od25kOworCQlkbS53UGFyYW0gPSBWS19TUEFDRTsKKwkJTXlUcmFuc2xhdGVNZXNzYWdlKCZkbSk7CS8qIGdlbmVyYXRlIGRlYWQgY2hhcmFjdGVyICovCisJCWlmICh2ayAhPSBWS19TUEFDRSkgLyogYW5kIHNlbmQgY3VycmVudCBjaGFyYWN0ZXIgb25jZSBtb3JlICovCisJCSAgICBQb3N0TWVzc2FnZShtc2cuaHduZCwgbXNnLm1lc3NhZ2UsIG1zZy53UGFyYW0sIG1zZy5sUGFyYW0pOworCQlyZXR1cm47CisJICAgIH0KKwl9CisKKwkvKiBDaGVjayBmb3IgQ1RSTC1CUkVBSyAqLworCWlmICh2ayA9PSBWS19DQU5DRUwpCisJeworCSAgICB0cmFzaF9pbnB1dF9idWYoKTsKKwkgICAgZ290X2ludCA9IFRSVUU7CisJICAgIHN0cmluZ1swXSA9IEN0cmxfQzsKKwkgICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIDEpOworCX0KKworCWZvciAoaSA9IDA7IHNwZWNpYWxfa2V5c1tpXS5rZXlfc3ltICE9IDA7IGkrKykKKwl7CisJICAgIC8qIGlnbm9yZSBWS19TUEFDRSB3aGVuIEFMVCBrZXkgcHJlc3NlZDogc3lzdGVtIG1lbnUgKi8KKwkgICAgaWYgKHNwZWNpYWxfa2V5c1tpXS5rZXlfc3ltID09IHZrCisJCSAgICAmJiAodmsgIT0gVktfU1BBQ0UgfHwgIShHZXRLZXlTdGF0ZShWS19NRU5VKSAmIDB4ODAwMCkpKQorCSAgICB7CisjaWZkZWYgRkVBVF9NRU5VCisJCS8qIENoZWNrIGZvciA8RjEwPjogV2luZG93cyBzZWxlY3RzIHRoZSBtZW51LiAgSWdub3JlIGl0IHdoZW4KKwkJICogJ3dpbmFsdGtleXMnIGlzICJ5ZXMiIG9yICJtZW51IiAqLworCQlpZiAodmsgPT0gVktfRjEwCisJCQkmJiBndWkubWVudV9pc19hY3RpdmUKKwkJCSYmICgqcF93YWsgPT0gJ3knIHx8ICpwX3dhayA9PSAnbScpKQorCQkgICAgYnJlYWs7CisjZW5kaWYKKwkJaWYgKEdldEtleVN0YXRlKFZLX1NISUZUKSAmIDB4ODAwMCkKKwkJICAgIG1vZGlmaWVycyB8PSBNT0RfTUFTS19TSElGVDsKKwkJLyoKKwkJICogRG9uJ3QgdXNlIGNhcHMtbG9jayBhcyBzaGlmdCwgYmVjYXVzZSB0aGVzZSBhcmUgc3BlY2lhbCBrZXlzCisJCSAqIGJlaW5nIGNvbnNpZGVyZWQgaGVyZSwgYW5kIHdlIG9ubHkgd2FudCBsZXR0ZXJzIHRvIGdldAorCQkgKiBzaGlmdGVkIC0tIHdlYmIKKwkJICovCisJCS8qCisJCWlmIChHZXRLZXlTdGF0ZShWS19DQVBJVEFMKSAmIDB4MDAwMSkKKwkJICAgIG1vZGlmaWVycyBePSBNT0RfTUFTS19TSElGVDsKKwkJKi8KKwkJaWYgKEdldEtleVN0YXRlKFZLX0NPTlRST0wpICYgMHg4MDAwKQorCQkgICAgbW9kaWZpZXJzIHw9IE1PRF9NQVNLX0NUUkw7CisJCWlmIChHZXRLZXlTdGF0ZShWS19NRU5VKSAmIDB4ODAwMCkKKwkJICAgIG1vZGlmaWVycyB8PSBNT0RfTUFTS19BTFQ7CisKKwkJaWYgKHNwZWNpYWxfa2V5c1tpXS52aW1fY29kZTEgPT0gTlVMKQorCQkgICAga2V5ID0gc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMDsKKwkJZWxzZQorCQkgICAga2V5ID0gVE9fU1BFQ0lBTChzcGVjaWFsX2tleXNbaV0udmltX2NvZGUwLAorCQkJCQkJICAgc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMSk7CisJCWtleSA9IHNpbXBsaWZ5X2tleShrZXksICZtb2RpZmllcnMpOworCQlpZiAoa2V5ID09IENTSSkKKwkJICAgIGtleSA9IEtfQ1NJOworCisJCWlmIChtb2RpZmllcnMpCisJCXsKKwkJICAgIHN0cmluZ1swXSA9IENTSTsKKwkJICAgIHN0cmluZ1sxXSA9IEtTX01PRElGSUVSOworCQkgICAgc3RyaW5nWzJdID0gbW9kaWZpZXJzOworCQkgICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIDMpOworCQl9CisKKwkJaWYgKElTX1NQRUNJQUwoa2V5KSkKKwkJeworCQkgICAgc3RyaW5nWzBdID0gQ1NJOworCQkgICAgc3RyaW5nWzFdID0gS19TRUNPTkQoa2V5KTsKKwkJICAgIHN0cmluZ1syXSA9IEtfVEhJUkQoa2V5KTsKKwkJICAgIGFkZF90b19pbnB1dF9idWYoc3RyaW5nLCAzKTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGludAlsZW47CisKKwkJICAgIC8qIEhhbmRsZSAia2V5IiBhcyBhIFVuaWNvZGUgY2hhcmFjdGVyLiAqLworCQkgICAgbGVuID0gY2hhcl90b19zdHJpbmcoa2V5LCBzdHJpbmcsIDQwKTsKKwkJICAgIGFkZF90b19pbnB1dF9idWYoc3RyaW5nLCBsZW4pOworCQl9CisJCWJyZWFrOworCSAgICB9CisJfQorCWlmIChzcGVjaWFsX2tleXNbaV0ua2V5X3N5bSA9PSAwKQorCXsKKwkgICAgLyogU29tZSBrZXlzIG5lZWQgQy1TLSB3aGVyZSB0aGV5IHNob3VsZCBvbmx5IG5lZWQgQy0uCisJICAgICAqIElnbm9yZSAweGZmLCBXaW5kb3dzIFhQIHNlbmRzIGl0IHdoZW4gTlVNTE9DSyBoYXMgY2hhbmdlZCBzaW5jZQorCSAgICAgKiBzeXN0ZW0gc3RhcnR1cCAoSGVsbXV0IFN0aWVnbGVyLCAyMDAzIE9jdCAzKS4gKi8KKwkgICAgaWYgKHZrICE9IDB4ZmYKKwkJICAgICYmIChHZXRLZXlTdGF0ZShWS19DT05UUk9MKSAmIDB4ODAwMCkKKwkJICAgICYmICEoR2V0S2V5U3RhdGUoVktfU0hJRlQpICYgMHg4MDAwKQorCQkgICAgJiYgIShHZXRLZXlTdGF0ZShWS19NRU5VKSAmIDB4ODAwMCkpCisJICAgIHsKKwkJLyogQ1RSTC02IGlzICdeJzsgSmFwYW5lc2Uga2V5Ym9hcmQgbWFwcyAnXicgdG8gdmsgPT0gMHhERSAqLworCQlpZiAodmsgPT0gJzYnIHx8IE1hcFZpcnR1YWxLZXkodmssIDIpID09IChVSU5UKSdeJykKKwkJeworCQkgICAgc3RyaW5nWzBdID0gQ3RybF9IQVQ7CisJCSAgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgMSk7CisJCX0KKwkJLyogdmsgPT0gMHhCRCBBWkVSVFkgZm9yIENUUkwtJy0nLCBidXQgQ1RSTC1bIGZvciAqIFFXRVJUWSEgKi8KKwkJZWxzZSBpZiAodmsgPT0gMHhCRCkJLyogUVdFUlRZIGZvciBDVFJMLSctJyAqLworCQl7CisJCSAgICBzdHJpbmdbMF0gPSBDdHJsX187CisJCSAgICBhZGRfdG9faW5wdXRfYnVmKHN0cmluZywgMSk7CisJCX0KKwkJLyogQ1RSTC0yIGlzICdAJzsgSmFwYW5lc2Uga2V5Ym9hcmQgbWFwcyAnQCcgdG8gdmsgPT0gMHhDMCAqLworCQllbHNlIGlmICh2ayA9PSAnMicgfHwgTWFwVmlydHVhbEtleSh2aywgMikgPT0gKFVJTlQpJ0AnKQorCQl7CisJCSAgICBzdHJpbmdbMF0gPSBDdHJsX0FUOworCQkgICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIDEpOworCQl9CisJCWVsc2UKKwkJICAgIE15VHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKwkgICAgfQorCSAgICBlbHNlCisJCU15VHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKwl9CisgICAgfQorI2lmZGVmIEZFQVRfTUJZVEVfSU1FCisgICAgZWxzZSBpZiAobXNnLm1lc3NhZ2UgPT0gV01fSU1FX05PVElGWSkKKwlfT25JbWVOb3RpZnkobXNnLmh3bmQsIChEV09SRCltc2cud1BhcmFtLCAoRFdPUkQpbXNnLmxQYXJhbSk7CisgICAgZWxzZSBpZiAobXNnLm1lc3NhZ2UgPT0gV01fS0VZVVAgJiYgaW1fZ2V0X3N0YXR1cygpKQorCS8qIGFkZGVkIGZvciBub24tTVMgSU1FIChZYXN1aGlybyBNYXRzdW1vdG8pICovCisJTXlUcmFuc2xhdGVNZXNzYWdlKCZtc2cpOworI2VuZGlmCisjaWYgIWRlZmluZWQoRkVBVF9NQllURV9JTUUpICYmIGRlZmluZWQoR0xPQkFMX0lNRSkKKy8qIEdJTUVfVEVTVCAqLworICAgIGVsc2UgaWYgKG1zZy5tZXNzYWdlID09IFdNX0lNRV9TVEFSVENPTVBPU0lUSU9OKQorICAgIHsKKwlQT0lOVCBwb2ludDsKKworCWdsb2JhbF9pbWVfc2V0X2ZvbnQoJm5vcm1fbG9nZm9udCk7CisJcG9pbnQueCA9IEZJTExfWChndWkuY29sKTsKKwlwb2ludC55ID0gRklMTF9ZKGd1aS5yb3cpOworCU1hcFdpbmRvd1BvaW50cyhzX3RleHRBcmVhLCBzX2h3bmQsICZwb2ludCwgMSk7CisJZ2xvYmFsX2ltZV9zZXRfcG9zaXRpb24oJnBvaW50KTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUVOVQorICAgIC8qIENoZWNrIGZvciA8RjEwPjogV2luZG93cyBzZWxlY3RzIHRoZSBtZW51LiAgRG9uJ3QgbGV0IFdpbmRvd3MgaGFuZGxlIGl0CisgICAgICogd2hlbiAnd2luYWx0a2V5cycgaXMgIm5vIiAqLworICAgIGlmICh2ayAhPSBWS19GMTAgfHwgKnBfd2FrICE9ICduJykKKyNlbmRpZgorCURpc3BhdGNoTWVzc2FnZSgmbXNnKTsKK30KKworLyoKKyAqIENhdGNoIHVwIHdpdGggYW55IHF1ZXVlZCBldmVudHMuICBUaGlzIG1heSBwdXQga2V5Ym9hcmQgaW5wdXQgaW50byB0aGUKKyAqIGlucHV0IGJ1ZmZlciwgY2FsbCByZXNpemUgY2FsbC1iYWNrcywgdHJpZ2dlciB0aW1lcnMgZXRjLiAgSWYgdGhlcmUgaXMKKyAqIG5vdGhpbmcgaW4gdGhlIGV2ZW50IHF1ZXVlICgmIG5vIHRpbWVycyBwZW5kaW5nKSwgdGhlbiB3ZSByZXR1cm4KKyAqIGltbWVkaWF0ZWx5LgorICovCisgICAgdm9pZAorZ3VpX21jaF91cGRhdGUodm9pZCkKK3sKKyAgICBNU0cJICAgIG1zZzsKKworICAgIGlmICghc19idXN5X3Byb2Nlc3NpbmcpCisJd2hpbGUgKFBlZWtNZXNzYWdlKCZtc2csIE5VTEwsIDAsIDAsIFBNX05PUkVNT1ZFKQorCQkJCQkJICAmJiAhdmltX2lzX2lucHV0X2J1Zl9mdWxsKCkpCisJICAgIHByb2Nlc3NfbWVzc2FnZSgpOworfQorCisvKgorICogR1VJIGlucHV0IHJvdXRpbmUgY2FsbGVkIGJ5IGd1aV93YWl0X2Zvcl9jaGFycygpLiAgV2FpdHMgZm9yIGEgY2hhcmFjdGVyCisgKiBmcm9tIHRoZSBrZXlib2FyZC4KKyAqICB3dGltZSA9PSAtMQkgICAgV2FpdCBmb3JldmVyLgorICogIHd0aW1lID09IDAJICAgIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4KKyAqICB3dGltZSA+IDAJICAgIFdhaXQgd3RpbWUgbWlsbGlzZWNvbmRzIGZvciBhIGNoYXJhY3Rlci4KKyAqIFJldHVybnMgT0sgaWYgYSBjaGFyYWN0ZXIgd2FzIGZvdW5kIHRvIGJlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGdpdmVuIHRpbWUsCisgKiBvciBGQUlMIG90aGVyd2lzZS4KKyAqLworICAgIGludAorZ3VpX21jaF93YWl0X2Zvcl9jaGFycyhpbnQgd3RpbWUpCit7CisgICAgTVNHCQltc2c7CisgICAgaW50CQlmb2N1czsKKworICAgIHNfdGltZWRfb3V0ID0gRkFMU0U7CisKKyAgICBpZiAod3RpbWUgPiAwKQorICAgIHsKKwkvKiBEb24ndCBkbyBhbnl0aGluZyB3aGlsZSBwcm9jZXNzaW5nIGEgKHNjcm9sbCkgbWVzc2FnZS4gKi8KKwlpZiAoc19idXN5X3Byb2Nlc3NpbmcpCisJICAgIHJldHVybiBGQUlMOworCXNfd2FpdF90aW1lciA9IChVSU5UKVNldFRpbWVyKE5VTEwsIDAsIChVSU5UKXd0aW1lLAorCQkJCQkJCSAoVElNRVJQUk9DKV9PblRpbWVyKTsKKyAgICB9CisKKyAgICBhbGxvd19zY3JvbGxiYXIgPSBUUlVFOworCisgICAgZm9jdXMgPSBndWkuaW5fZm9jdXM7CisgICAgd2hpbGUgKCFzX3RpbWVkX291dCkKKyAgICB7CisJLyogU3RvcCBvciBzdGFydCBibGlua2luZyB3aGVuIGZvY3VzIGNoYW5nZXMgKi8KKwlpZiAoZ3VpLmluX2ZvY3VzICE9IGZvY3VzKQorCXsKKwkgICAgaWYgKGd1aS5pbl9mb2N1cykKKwkJZ3VpX21jaF9zdGFydF9ibGluaygpOworCSAgICBlbHNlCisJCWd1aV9tY2hfc3RvcF9ibGluaygpOworCSAgICBmb2N1cyA9IGd1aS5pbl9mb2N1czsKKwl9CisKKwlpZiAoc19uZWVkX2FjdGl2YXRlKQorCXsKKyNpZmRlZiBXSU4zMgorCSAgICAodm9pZClTZXRGb3JlZ3JvdW5kV2luZG93KHNfaHduZCk7CisjZWxzZQorCSAgICAodm9pZClTZXRBY3RpdmVXaW5kb3coc19od25kKTsKKyNlbmRpZgorCSAgICBzX25lZWRfYWN0aXZhdGUgPSBGQUxTRTsKKwl9CisKKwkvKgorCSAqIERvbid0IHVzZSBndWlfbWNoX3VwZGF0ZSgpIGJlY2F1c2UgdGhlbiB3ZSB3aWxsIHNwaW4tbG9jayB1bnRpbCBhCisJICogY2hhciBhcnJpdmVzLCBpbnN0ZWFkIHdlIHVzZSBHZXRNZXNzYWdlKCkgdG8gaGFuZyB1bnRpbCBhbgorCSAqIGV2ZW50IGFycml2ZXMuICBObyBuZWVkIHRvIGNoZWNrIGZvciBpbnB1dF9idWZfZnVsbCBiZWNhdXNlIHdlIGFyZQorCSAqIHJldHVybmluZyBhcyBzb29uIGFzIGl0IGNvbnRhaW5zIGEgc2luZ2xlIGNoYXIgLS0gd2ViYgorCSAqLworCXByb2Nlc3NfbWVzc2FnZSgpOworCisJaWYgKGlucHV0X2F2YWlsYWJsZSgpKQorCXsKKwkgICAgaWYgKHNfd2FpdF90aW1lciAhPSAwICYmICFzX3RpbWVkX291dCkKKwkgICAgeworCQlLaWxsVGltZXIoTlVMTCwgc193YWl0X3RpbWVyKTsKKworCQkvKiBFYXQgc3B1cmlvdXMgV01fVElNRVIgbWVzc2FnZXMgKi8KKwkJd2hpbGUgKFBlZWtNZXNzYWdlKCZtc2csIHNfaHduZCwgV01fVElNRVIsIFdNX1RJTUVSLCBQTV9SRU1PVkUpKQorCQkgICAgOworCQlzX3dhaXRfdGltZXIgPSAwOworCSAgICB9CisJICAgIGFsbG93X3Njcm9sbGJhciA9IEZBTFNFOworCSAgICByZXR1cm4gT0s7CisJfQorICAgIH0KKyAgICBhbGxvd19zY3JvbGxiYXIgPSBGQUxTRTsKKyAgICByZXR1cm4gRkFJTDsKK30KKworLyoKKyAqIENsZWFyIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIG9mIHRoZSBzY3JlZW4gZnJvbSB0ZXh0IHBvcyAocm93MSwgY29sMSkgdG8KKyAqIChyb3cyLCBjb2wyKSBpbmNsdXNpdmUuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2NsZWFyX2Jsb2NrKAorICAgIGludAkJcm93MSwKKyAgICBpbnQJCWNvbDEsCisgICAgaW50CQlyb3cyLAorICAgIGludAkJY29sMikKK3sKKyAgICBSRUNUCXJjOworCisgICAgLyoKKyAgICAgKiBDbGVhciBvbmUgZXh0cmEgcGl4ZWwgYXQgdGhlIGZhciByaWdodCwgZm9yIHdoZW4gYm9sZCBjaGFyYWN0ZXJzIGhhdmUKKyAgICAgKiBzcGlsbGVkIG92ZXIgdG8gdGhlIHdpbmRvdyBib3JkZXIuCisgICAgICogTm90ZTogRmlsbFJlY3QoKSBleGNsdWRlcyByaWdodCBhbmQgYm90dG9tIG9mIHJlY3RhbmdsZS4KKyAgICAgKi8KKyAgICByYy5sZWZ0ID0gRklMTF9YKGNvbDEpOworICAgIHJjLnRvcCA9IEZJTExfWShyb3cxKTsKKyAgICByYy5yaWdodCA9IEZJTExfWChjb2wyICsgMSkgKyAoY29sMiA9PSBDb2x1bW5zIC0gMSk7CisgICAgcmMuYm90dG9tID0gRklMTF9ZKHJvdzIgKyAxKTsKKyAgICBjbGVhcl9yZWN0KCZyYyk7Cit9CisKKy8qCisgKiBDbGVhciB0aGUgd2hvbGUgdGV4dCB3aW5kb3cuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2NsZWFyX2FsbCh2b2lkKQoreworICAgIFJFQ1QgICAgcmM7CisKKyAgICByYy5sZWZ0ID0gMDsKKyAgICByYy50b3AgPSAwOworICAgIHJjLnJpZ2h0ID0gQ29sdW1ucyAqIGd1aS5jaGFyX3dpZHRoICsgMiAqIGd1aS5ib3JkZXJfd2lkdGg7CisgICAgcmMuYm90dG9tID0gUm93cyAqIGd1aS5jaGFyX2hlaWdodCArIDIgKiBndWkuYm9yZGVyX3dpZHRoOworICAgIGNsZWFyX3JlY3QoJnJjKTsKK30KKy8qCisgKiBNZW51IHN0dWZmLgorICovCisKKyAgICB2b2lkCitndWlfbWNoX2VuYWJsZV9tZW51KGludCBmbGFnKQoreworI2lmZGVmIEZFQVRfTUVOVQorICAgIFNldE1lbnUoc19od25kLCBmbGFnID8gc19tZW51QmFyIDogTlVMTCk7CisjZW5kaWYKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X21lbnVfcG9zKAorICAgIGludAkgICAgeCwKKyAgICBpbnQJICAgIHksCisgICAgaW50CSAgICB3LAorICAgIGludAkgICAgaCkKK3sKKyAgICAvKiBJdCB3aWxsIGJlIGluIHRoZSByaWdodCBwbGFjZSBhbnl3YXkgKi8KK30KKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIE1ha2UgbWVudSBpdGVtIGhpZGRlbiBvciBub3QgaGlkZGVuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX21lbnVfaGlkZGVuKAorICAgIHZpbW1lbnVfVAkqbWVudSwKKyAgICBpbnQJCWhpZGRlbikKK3sKKyAgICAvKgorICAgICAqIFRoaXMgZG9lc24ndCBkbyB3aGF0IHdlIHdhbnQuICBIbW0sIGp1c3QgZ3JleSB0aGUgbWVudSBpdGVtcyBmb3Igbm93LgorICAgICAqLworICAgIC8qCisgICAgaWYgKGhpZGRlbikKKwlFbmFibGVNZW51SXRlbShzX21lbnVCYXIsIG1lbnUtPmlkLCBNRl9CWUNPTU1BTkQgfCBNRl9ESVNBQkxFRCk7CisgICAgZWxzZQorCUVuYWJsZU1lbnVJdGVtKHNfbWVudUJhciwgbWVudS0+aWQsIE1GX0JZQ09NTUFORCB8IE1GX0VOQUJMRUQpOworICAgICovCisgICAgZ3VpX21jaF9tZW51X2dyZXkobWVudSwgaGlkZGVuKTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHNldHRpbmcgYWxsIHRoZSBtZW51cyB0byBncmV5L2hpZGRlbiBvciBub3QuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RyYXdfbWVudWJhcih2b2lkKQoreworICAgIERyYXdNZW51QmFyKHNfaHduZCk7Cit9CisjZW5kaWYgLypGRUFUX01FTlUqLworCisjaWZuZGVmIFBST1RPCit2b2lkCisjaWZkZWYgVklNRExMCitfZXhwb3J0CisjZW5kaWYKK19jZGVjbAorU2F2ZUluc3QoSElOU1RBTkNFIGhJbnN0KQoreworICAgIHNfaGluc3QgPSBoSW5zdDsKK30KKyNlbmRpZgorCisvKgorICogUmV0dXJuIHRoZSBSR0IgdmFsdWUgb2YgYSBwaXhlbCBhcyBhIGxvbmcuCisgKi8KKyAgICBsb25nX3UKK2d1aV9tY2hfZ2V0X3JnYihndWljb2xvcl9UIHBpeGVsKQoreworICAgIHJldHVybiAoR2V0UlZhbHVlKHBpeGVsKSA8PCAxNikgKyAoR2V0R1ZhbHVlKHBpeGVsKSA8PCA4KQorCQkJCQkJCSAgICsgR2V0QlZhbHVlKHBpeGVsKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKFBST1RPKQorLyogQ29udmVydCBwaXhlbHMgaW4gWCB0byBkaWFsb2cgdW5pdHMgKi8KKyAgICBzdGF0aWMgV09SRAorUGl4ZWxUb0RpYWxvZ1goaW50IG51bVBpeGVscykKK3sKKyAgICByZXR1cm4gKFdPUkQpKChudW1QaXhlbHMgKiA0KSAvIHNfZGxnZm50d2lkdGgpOworfQorCisvKiBDb252ZXJ0IHBpeGVscyBpbiBZIHRvIGRpYWxvZyB1bml0cyAqLworICAgIHN0YXRpYyBXT1JECitQaXhlbFRvRGlhbG9nWShpbnQgbnVtUGl4ZWxzKQoreworICAgIHJldHVybiAoV09SRCkoKG51bVBpeGVscyAqIDgpIC8gc19kbGdmbnRoZWlnaHQpOworfQorCisvKiBSZXR1cm4gdGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgZ2l2ZW4gdGV4dCBpbiB0aGUgZ2l2ZW4gREMuICovCisgICAgc3RhdGljIGludAorR2V0VGV4dFdpZHRoKEhEQyBoZGMsIGNoYXJfdSAqc3RyLCBpbnQgbGVuKQoreworICAgIFNJWkUgICAgc2l6ZTsKKworICAgIEdldFRleHRFeHRlbnRQb2ludChoZGMsIHN0ciwgbGVuLCAmc2l6ZSk7CisgICAgcmV0dXJuIHNpemUuY3g7Cit9CisKKyNpZmRlZiBGRUFUX01CWVRFCisvKgorICogUmV0dXJuIHRoZSB3aWR0aCBpbiBwaXhlbHMgb2YgdGhlIGdpdmVuIHRleHQgaW4gdGhlIGdpdmVuIERDLCB0YWtpbmcgY2FyZQorICogb2YgJ2VuY29kaW5nJyB0byBhY3RpdmUgY29kZXBhZ2UgY29udmVyc2lvbi4KKyAqLworICAgIHN0YXRpYyBpbnQKK0dldFRleHRXaWR0aEVuYyhIREMgaGRjLCBjaGFyX3UgKnN0ciwgaW50IGxlbikKK3sKKyAgICBTSVpFCXNpemU7CisgICAgV0NIQVIJKndzdHI7CisgICAgaW50CQluOworICAgIGludAkJd2xlbiA9IGxlbjsKKworICAgIGlmIChlbmNfY29kZXBhZ2UgPj0gMCAmJiAoaW50KUdldEFDUCgpICE9IGVuY19jb2RlcGFnZSkKKyAgICB7CisJLyogJ2VuY29kaW5nJyBkaWZmZXJzIGZyb20gYWN0aXZlIGNvZGVwYWdlOiBjb252ZXJ0IHRleHQgYW5kIHVzZSB3aWRlCisJICogZnVuY3Rpb24gKi8KKwl3c3RyID0gZW5jX3RvX3VjczIoc3RyLCAmd2xlbik7CisJaWYgKHdzdHIgIT0gTlVMTCkKKwl7CisJICAgIG4gPSBHZXRUZXh0RXh0ZW50UG9pbnRXKGhkYywgd3N0ciwgd2xlbiwgJnNpemUpOworCSAgICB2aW1fZnJlZSh3c3RyKTsKKwkgICAgaWYgKG4pCisJCXJldHVybiBzaXplLmN4OworCX0KKyAgICB9CisKKyAgICByZXR1cm4gR2V0VGV4dFdpZHRoKGhkYywgc3RyLCBsZW4pOworfQorI2Vsc2UKKyMgZGVmaW5lIEdldFRleHRXaWR0aEVuYyhoLCBzLCBsKSBHZXRUZXh0V2lkdGgoKGgpLCAocyksIChsKSkKKyNlbmRpZgorCisvKgorICogQSBxdWljayBsaXR0bGUgcm91dGluZSB0aGF0IHdpbGwgY2VudGVyIG9uZSB3aW5kb3cgb3ZlciBhbm90aGVyLCBoYW5keSBmb3IKKyAqIGRpYWxvZyBib3hlcy4gIFRha2VuIGZyb20gdGhlIFdpbjMyU0RLIHNhbXBsZXMuCisgKi8KKyAgICBzdGF0aWMgQk9PTAorQ2VudGVyV2luZG93KAorICAgIEhXTkQgaHduZENoaWxkLAorICAgIEhXTkQgaHduZFBhcmVudCkKK3sKKyAgICBSRUNUICAgIHJDaGlsZCwgclBhcmVudDsKKyAgICBpbnQgICAgIHdDaGlsZCwgaENoaWxkLCB3UGFyZW50LCBoUGFyZW50OworICAgIGludCAgICAgd1NjcmVlbiwgaFNjcmVlbiwgeE5ldywgeU5ldzsKKyAgICBIREMgICAgIGhkYzsKKworICAgIEdldFdpbmRvd1JlY3QoaHduZENoaWxkLCAmckNoaWxkKTsKKyAgICB3Q2hpbGQgPSByQ2hpbGQucmlnaHQgLSByQ2hpbGQubGVmdDsKKyAgICBoQ2hpbGQgPSByQ2hpbGQuYm90dG9tIC0gckNoaWxkLnRvcDsKKworICAgIC8qIElmIFZpbSBpcyBtaW5pbWl6ZWQgcHV0IHRoZSB3aW5kb3cgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2NyZWVuLiAqLworICAgIGlmIChJc01pbmltaXplZChod25kUGFyZW50KSkKKyAgICB7CisjaWZkZWYgV0lOMTYKKwlyUGFyZW50LmxlZnQgPSAwOworCXJQYXJlbnQudG9wID0gMDsKKwlyUGFyZW50LnJpZ2h0ID0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWFNDUkVFTik7CisJclBhcmVudC5ib3R0b20gPSBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZRlVMTFNDUkVFTik7CisjZWxzZQorCVN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRXT1JLQVJFQSwgMCwgJnJQYXJlbnQsIDApOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKwlHZXRXaW5kb3dSZWN0KGh3bmRQYXJlbnQsICZyUGFyZW50KTsKKyAgICB3UGFyZW50ID0gclBhcmVudC5yaWdodCAtIHJQYXJlbnQubGVmdDsKKyAgICBoUGFyZW50ID0gclBhcmVudC5ib3R0b20gLSByUGFyZW50LnRvcDsKKworICAgIGhkYyA9IEdldERDKGh3bmRDaGlsZCk7CisgICAgd1NjcmVlbiA9IEdldERldmljZUNhcHMgKGhkYywgSE9SWlJFUyk7CisgICAgaFNjcmVlbiA9IEdldERldmljZUNhcHMgKGhkYywgVkVSVFJFUyk7CisgICAgUmVsZWFzZURDKGh3bmRDaGlsZCwgaGRjKTsKKworICAgIHhOZXcgPSByUGFyZW50LmxlZnQgKyAoKHdQYXJlbnQgLSB3Q2hpbGQpIC8yKTsKKyAgICBpZiAoeE5ldyA8IDApCisgICAgeworCXhOZXcgPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgoeE5ldyt3Q2hpbGQpID4gd1NjcmVlbikKKyAgICB7CisJeE5ldyA9IHdTY3JlZW4gLSB3Q2hpbGQ7CisgICAgfQorCisgICAgeU5ldyA9IHJQYXJlbnQudG9wCSsgKChoUGFyZW50IC0gaENoaWxkKSAvMik7CisgICAgaWYgKHlOZXcgPCAwKQorCXlOZXcgPSAwOworICAgIGVsc2UgaWYgKCh5TmV3K2hDaGlsZCkgPiBoU2NyZWVuKQorCXlOZXcgPSBoU2NyZWVuIC0gaENoaWxkOworCisgICAgcmV0dXJuIFNldFdpbmRvd1Bvcyhod25kQ2hpbGQsIE5VTEwsIHhOZXcsIHlOZXcsIDAsIDAsCisJCQkJCQkgICBTV1BfTk9TSVpFIHwgU1dQX05PWk9SREVSKTsKK30KKyNlbmRpZiAvKiBGRUFUX0dVSV9ESUFMT0cgKi8KKwordm9pZAorZ3VpX21jaF9hY3RpdmF0ZV93aW5kb3codm9pZCkKK3sKKyAgICAodm9pZClTZXRBY3RpdmVXaW5kb3coc19od25kKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2d1aV9tY2hfc2hvd190b29sYmFyKGludCBzaG93aXQpCit7CisgICAgaWYgKHNfdG9vbGJhcmh3bmQgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBpZiAoc2hvd2l0KQorCVNob3dXaW5kb3coc190b29sYmFyaHduZCwgU1dfU0hPVyk7CisgICAgZWxzZQorCVNob3dXaW5kb3coc190b29sYmFyaHduZCwgU1dfSElERSk7Cit9CisKKy8qIFRoZW4gbnVtYmVyIG9mIGJpdG1hcHMgaXMgZml4ZWQuICBFeGl0IGlzIG1pc3NpbmchICovCisjZGVmaW5lIFRPT0xCQVJfQklUTUFQX0NPVU5UIDMxCisKKyNlbmRpZgorCisvKgorICogIjpzaW1hbHQiIGNvbW1hbmQuCisgKi8KKyAgICB2b2lkCitleF9zaW1hbHQoZXhhcmdfVCAqZWFwKQoreworICAgIGNoYXJfdSAqa2V5cyA9IGVhcC0+YXJnOworCisgICAgUG9zdE1lc3NhZ2Uoc19od25kLCBXTV9TWVNDT01NQU5ELCAoV1BBUkFNKVNDX0tFWU1FTlUsIChMUEFSQU0pMCk7CisgICAgd2hpbGUgKCprZXlzKQorICAgIHsKKwlpZiAoKmtleXMgPT0gJ34nKQorCSAgICAqa2V5cyA9ICcgJzsJICAgIC8qIGZvciBzaG93aW5nIHN5c3RlbSBtZW51ICovCisJUG9zdE1lc3NhZ2Uoc19od25kLCBXTV9DSEFSLCAoV1BBUkFNKSprZXlzLCAoTFBBUkFNKTApOworCWtleXMrKzsKKyAgICB9Cit9CisKKy8qCisgKiBDcmVhdGUgdGhlIGZpbmQgJiByZXBsYWNlIGRpYWxvZ3MuCisgKiBZb3UgY2FuJ3QgaGF2ZSBib3RoIGF0IG9uY2U6ICI6ZmluZCIgd2hlbiByZXBsYWNlIGlzIHNob3dpbmcsIGRlc3Ryb3lzCisgKiB0aGUgcmVwbGFjZSBkaWFsb2cgZmlyc3QsIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAqLworI2lmZGVmIE1TV0lOX0ZJTkRfUkVQTEFDRQorICAgIHN0YXRpYyB2b2lkCitpbml0aWFsaXNlX2ZpbmRyZXAoY2hhcl91ICppbml0aWFsX3N0cmluZykKK3sKKyAgICBpbnQJCXd3b3JkID0gRkFMU0U7CisgICAgaW50CQltY2FzZSA9ICFwX2ljOworICAgIGNoYXJfdQkqZW50cnlfdGV4dDsKKworICAgIC8qIEdldCB0aGUgc2VhcmNoIHN0cmluZyB0byB1c2UuICovCisgICAgZW50cnlfdGV4dCA9IGdldF9maW5kX2RpYWxvZ190ZXh0KGluaXRpYWxfc3RyaW5nLCAmd3dvcmQsICZtY2FzZSk7CisKKyAgICBzX2ZpbmRyZXBfc3RydWN0Lmh3bmRPd25lciA9IHNfaHduZDsKKyAgICBzX2ZpbmRyZXBfc3RydWN0LkZsYWdzID0gRlJfRE9XTjsKKyAgICBpZiAobWNhc2UpCisJc19maW5kcmVwX3N0cnVjdC5GbGFncyB8PSBGUl9NQVRDSENBU0U7CisgICAgaWYgKHd3b3JkKQorCXNfZmluZHJlcF9zdHJ1Y3QuRmxhZ3MgfD0gRlJfV0hPTEVXT1JEOworICAgIGlmIChlbnRyeV90ZXh0ICE9IE5VTEwgJiYgKmVudHJ5X3RleHQgIT0gTlVMKQorICAgIHsKKwlTVFJOQ1BZKHNfZmluZHJlcF9zdHJ1Y3QubHBzdHJGaW5kV2hhdCwgZW50cnlfdGV4dCwKKwkJCQkJICAgICAgIHNfZmluZHJlcF9zdHJ1Y3Qud0ZpbmRXaGF0TGVuKTsKKwlzX2ZpbmRyZXBfc3RydWN0Lmxwc3RyRmluZFdoYXRbc19maW5kcmVwX3N0cnVjdC53RmluZFdoYXRMZW4gLSAxXSA9IE5VTDsKKwlzX2ZpbmRyZXBfc3RydWN0Lmxwc3RyUmVwbGFjZVdpdGhbMF0gPSBOVUw7CisgICAgfQorICAgIHZpbV9mcmVlKGVudHJ5X3RleHQpOworfQorI2VuZGlmCisKKyAgICB2b2lkCitndWlfbWNoX2ZpbmRfZGlhbG9nKGV4YXJnX1QgKmVhcCkKK3sKKyNpZmRlZiBNU1dJTl9GSU5EX1JFUExBQ0UKKyAgICBpZiAoc19maW5kcmVwX21zZyAhPSAwKQorICAgIHsKKwlpZiAoSXNXaW5kb3coc19maW5kcmVwX2h3bmQpICYmICFzX2ZpbmRyZXBfaXNfZmluZCkKKwkgICAgRGVzdHJveVdpbmRvdyhzX2ZpbmRyZXBfaHduZCk7CisKKwlpZiAoIUlzV2luZG93KHNfZmluZHJlcF9od25kKSkKKwl7CisJICAgIGluaXRpYWxpc2VfZmluZHJlcChlYXAtPmFyZyk7CisJICAgIHNfZmluZHJlcF9od25kID0gRmluZFRleHQoKExQRklORFJFUExBQ0UpICZzX2ZpbmRyZXBfc3RydWN0KTsKKwl9CisKKwkodm9pZClTZXRXaW5kb3dUZXh0KHNfZmluZHJlcF9od25kLAorCQkgICAgICAgKExQQ1NUUilfKCJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIikpOworCSh2b2lkKVNldEZvY3VzKHNfZmluZHJlcF9od25kKTsKKworCXNfZmluZHJlcF9pc19maW5kID0gVFJVRTsKKyAgICB9CisjZW5kaWYKK30KKworCisgICAgdm9pZAorZ3VpX21jaF9yZXBsYWNlX2RpYWxvZyhleGFyZ19UICplYXApCit7CisjaWZkZWYgTVNXSU5fRklORF9SRVBMQUNFCisgICAgaWYgKHNfZmluZHJlcF9tc2cgIT0gMCkKKyAgICB7CisJaWYgKElzV2luZG93KHNfZmluZHJlcF9od25kKSAmJiBzX2ZpbmRyZXBfaXNfZmluZCkKKwkgICAgRGVzdHJveVdpbmRvdyhzX2ZpbmRyZXBfaHduZCk7CisKKwlpZiAoIUlzV2luZG93KHNfZmluZHJlcF9od25kKSkKKwl7CisJICAgIGluaXRpYWxpc2VfZmluZHJlcChlYXAtPmFyZyk7CisJICAgIHNfZmluZHJlcF9od25kID0gUmVwbGFjZVRleHQoKExQRklORFJFUExBQ0UpICZzX2ZpbmRyZXBfc3RydWN0KTsKKwl9CisKKwkodm9pZClTZXRXaW5kb3dUZXh0KHNfZmluZHJlcF9od25kLAorCQkgICAgKExQQ1NUUilfKCJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIikpOworCSh2b2lkKVNldEZvY3VzKHNfZmluZHJlcF9od25kKTsKKworCXNfZmluZHJlcF9pc19maW5kID0gRkFMU0U7CisgICAgfQorI2VuZGlmCit9CisKKworLyoKKyAqIFNldCB2aXNpYmlsaXR5IG9mIHRoZSBwb2ludGVyLgorICovCisgICAgdm9pZAorZ3VpX21jaF9tb3VzZWhpZGUoaW50IGhpZGUpCit7CisgICAgaWYgKGhpZGUgIT0gZ3VpLnBvaW50ZXJfaGlkZGVuKQorICAgIHsKKwlTaG93Q3Vyc29yKCFoaWRlKTsKKwlndWkucG9pbnRlcl9oaWRkZW4gPSBoaWRlOworICAgIH0KK30KKworI2lmZGVmIEZFQVRfTUVOVQorICAgIHN0YXRpYyB2b2lkCitndWlfbWNoX3Nob3dfcG9wdXBtZW51X2F0KHZpbW1lbnVfVCAqbWVudSwgaW50IHgsIGludCB5KQoreworICAgIC8qIFVuaGlkZSB0aGUgbW91c2UsIHdlIGRvbid0IGdldCBtb3ZlIGV2ZW50cyBoZXJlLiAqLworICAgIGd1aV9tY2hfbW91c2VoaWRlKEZBTFNFKTsKKworICAgICh2b2lkKVRyYWNrUG9wdXBNZW51KAorCShITUVOVSltZW51LT5zdWJtZW51X2lkLAorCVRQTV9MRUZUQUxJR04gfCBUUE1fTEVGVEJVVFRPTiwKKwl4LCB5LAorCShpbnQpMCwJICAgIC8qcmVzZXJ2ZWQgcGFyYW0qLworCXNfaHduZCwKKwlOVUxMKTsKKyAgICAvKgorICAgICAqIE5PVEU6IFRoZSBwb3AtdXAgbWVudSBjYW4gZWF0IHRoZSBtb3VzZSB1cCBldmVudC4KKyAgICAgKiBXZSBkZWFsIHdpdGggdGhpcyBpbiBub3JtYWwuYy4KKyAgICAgKi8KK30KKyNlbmRpZgorCisvKgorICogR290IGEgbWVzc2FnZSB3aGVuIHRoZSBzeXN0ZW0gd2lsbCBnbyBkb3duLgorICovCisgICAgc3RhdGljIHZvaWQKK19PbkVuZFNlc3Npb24odm9pZCkKK3sKKyAgICBnZXRvdXRfcHJlc2VydmVfbW9kaWZpZWQoMSk7Cit9CisKKy8qCisgKiBHZXQgdGhpcyBtZXNzYWdlIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBjcm9zcyBpbiB0aGUgdG9wIHJpZ2h0IGNvcm5lcgorICogb2YgYSBXaW5kb3dzOTUgd2luZG93LgorICovCisgICAgc3RhdGljIHZvaWQKK19PbkNsb3NlKAorICAgIEhXTkQgaHduZCkKK3sKKyAgICBndWlfc2hlbGxfY2xvc2VkKCk7Cit9CisKKy8qCisgKiBHZXQgYSBtZXNzYWdlIHdoZW4gdGhlIHdpbmRvdyBpcyBiZWluZyBkZXN0cm95ZWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorX09uRGVzdHJveSgKKyAgICBIV05EIGh3bmQpCit7CisjaWZkZWYgV0lOMTZfM0RMT09LCisgICAgQ3RsM2RVbnJlZ2lzdGVyKHNfaGluc3QpOworI2VuZGlmCisgICAgaWYgKCFkZXN0cm95aW5nKQorCV9PbkNsb3NlKGh3bmQpOworfQorCisgICAgc3RhdGljIHZvaWQKK19PblBhaW50KAorICAgIEhXTkQgaHduZCkKK3sKKyAgICBpZiAoIUlzTWluaW1pemVkKGh3bmQpKQorICAgIHsKKwlQQUlOVFNUUlVDVCBwczsKKworCW91dF9mbHVzaCgpOwkgICAgLyogbWFrZSBzdXJlIGFsbCBvdXRwdXQgaGFzIGJlZW4gcHJvY2Vzc2VkICovCisJKHZvaWQpQmVnaW5QYWludChod25kLCAmcHMpOworCisjaWZkZWYgRkVBVF9NQllURQorCS8qIHByZXZlbnQgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGZyb20gbWlzcHJpbnRpbmcgb24gYW4gaW52YWxpZAorCSAqIHJlY3RhbmdsZSAqLworCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBSRUNUIHJlY3Q7CisKKwkgICAgR2V0Q2xpZW50UmVjdChod25kLCAmcmVjdCk7CisJICAgIHBzLnJjUGFpbnQubGVmdCA9IHJlY3QubGVmdDsKKwkgICAgcHMucmNQYWludC5yaWdodCA9IHJlY3QucmlnaHQ7CisJfQorI2VuZGlmCisKKwlpZiAoIUlzUmVjdEVtcHR5KCZwcy5yY1BhaW50KSkKKwkgICAgZ3VpX3JlZHJhdyhwcy5yY1BhaW50LmxlZnQsIHBzLnJjUGFpbnQudG9wLAorCQkgICAgcHMucmNQYWludC5yaWdodCAtIHBzLnJjUGFpbnQubGVmdCArIDEsCisJCSAgICBwcy5yY1BhaW50LmJvdHRvbSAtIHBzLnJjUGFpbnQudG9wICsgMSk7CisJRW5kUGFpbnQoaHduZCwgJnBzKTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorX09uU2l6ZSgKKyAgICBIV05EIGh3bmQsCisgICAgVUlOVCBzdGF0ZSwKKyAgICBpbnQgY3gsCisgICAgaW50IGN5KQoreworICAgIGlmICghSXNNaW5pbWl6ZWQoaHduZCkpCisgICAgeworCWd1aV9yZXNpemVfc2hlbGwoY3gsIGN5KTsKKworI2lmZGVmIEZFQVRfTUVOVQorCS8qIE1lbnUgYmFyIG1heSB3cmFwIGRpZmZlcmVudGx5IG5vdyAqLworCWd1aV9tc3dpbl9nZXRfbWVudV9oZWlnaHQoVFJVRSk7CisjZW5kaWYKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorX09uU2V0Rm9jdXMoCisgICAgSFdORCBod25kLAorICAgIEhXTkQgaHduZE9sZEZvY3VzKQoreworICAgIGd1aV9mb2N1c19jaGFuZ2UoVFJVRSk7CisgICAgKHZvaWQpTXlXaW5kb3dQcm9jKGh3bmQsIFdNX1NFVEZPQ1VTLCAoV1BBUkFNKWh3bmRPbGRGb2N1cywgMCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorX09uS2lsbEZvY3VzKAorICAgIEhXTkQgaHduZCwKKyAgICBIV05EIGh3bmROZXdGb2N1cykKK3sKKyAgICBndWlfZm9jdXNfY2hhbmdlKEZBTFNFKTsKKyAgICAodm9pZClNeVdpbmRvd1Byb2MoaHduZCwgV01fS0lMTEZPQ1VTLCAoV1BBUkFNKWh3bmROZXdGb2N1cywgMCk7Cit9CisKKy8qCisgKiBHZXQgYSBtZXNzYWdlIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMgYmFjayB0byB2aW0KKyAqLworI2lmZGVmIFdJTjE2CisgICAgc3RhdGljIEJPT0wKKyNlbHNlCisgICAgc3RhdGljIExSRVNVTFQKKyNlbmRpZgorX09uQWN0aXZhdGVBcHAoCisgICAgSFdORCBod25kLAorICAgIEJPT0wgZkFjdGl2YXRlLAorI2lmZGVmIFdJTjE2CisgICAgSFRBU0sgZHdUaHJlYWRJZAorI2Vsc2UKKyAgICBEV09SRCBkd1RocmVhZElkCisjZW5kaWYKKwkpCit7CisgICAgLyogd2UgY2FsbCBndWlfZm9jdXNfY2hhbmdlKCkgaW4gX09uU2V0Rm9jdXMoKSAqLworICAgIC8qIGd1aV9mb2N1c19jaGFuZ2UoKGludClmQWN0aXZhdGUpOyAqLworICAgIHJldHVybiBNeVdpbmRvd1Byb2MoaHduZCwgV01fQUNUSVZBVEVBUFAsIGZBY3RpdmF0ZSwgKERXT1JEKWR3VGhyZWFkSWQpOworfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorZ3VpX21jaF9kZXN0cm95X3Njcm9sbGJhcihzY3JvbGxiYXJfVCAqc2IpCit7CisgICAgRGVzdHJveVdpbmRvdyhzYi0+aWQpOworfQorI2VuZGlmCisKKy8qCisgKiBHZXQgY3VycmVudCB4IG1vdXNlIGNvb3JkaW5hdGUgaW4gdGV4dCB3aW5kb3cuCisgKiBSZXR1cm4gLTEgd2hlbiB1bmtub3duLgorICovCisgICAgaW50CitndWlfbWNoX2dldF9tb3VzZV94KHZvaWQpCit7CisgICAgUkVDVCByY3Q7CisgICAgUE9JTlQgbXA7CisKKyAgICAodm9pZClHZXRXaW5kb3dSZWN0KHNfdGV4dEFyZWEsICZyY3QpOworICAgICh2b2lkKUdldEN1cnNvclBvcygoTFBQT0lOVCkmbXApOworICAgIHJldHVybiAoaW50KShtcC54IC0gcmN0LmxlZnQpOworfQorCisvKgorICogR2V0IGN1cnJlbnQgeSBtb3VzZSBjb29yZGluYXRlIGluIHRleHQgd2luZG93LgorICogUmV0dXJuIC0xIHdoZW4gdW5rbm93bi4KKyAqLworICAgIGludAorZ3VpX21jaF9nZXRfbW91c2VfeSh2b2lkKQoreworICAgIFJFQ1QgcmN0OworICAgIFBPSU5UIG1wOworCisgICAgKHZvaWQpR2V0V2luZG93UmVjdChzX3RleHRBcmVhLCAmcmN0KTsKKyAgICAodm9pZClHZXRDdXJzb3JQb3MoKExQUE9JTlQpJm1wKTsKKyAgICByZXR1cm4gKGludCkobXAueSAtIHJjdC50b3ApOworfQorCisvKgorICogTW92ZSBtb3VzZSBwb2ludGVyIHRvIGNoYXJhY3RlciBhdCAoeCwgeSkuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldG1vdXNlKGludCB4LCBpbnQgeSkKK3sKKyAgICBSRUNUIHJjdDsKKworICAgICh2b2lkKUdldFdpbmRvd1JlY3Qoc190ZXh0QXJlYSwgJnJjdCk7CisgICAgKHZvaWQpU2V0Q3Vyc29yUG9zKHggKyBndWkuYm9yZGVyX29mZnNldCArIHJjdC5sZWZ0LAorCQkgICAgICAgeSArIGd1aS5ib3JkZXJfb2Zmc2V0ICsgcmN0LnRvcCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZ3VpX21zd2luX2dldF92YWxpZF9kaW1lbnNpb25zKAorICAgIGludCB3LAorICAgIGludCBoLAorICAgIGludCAqdmFsaWRfdywKKyAgICBpbnQgKnZhbGlkX2gpCit7CisgICAgaW50CSAgICBiYXNlX3dpZHRoLCBiYXNlX2hlaWdodDsKKworICAgIGJhc2Vfd2lkdGggPSBndWlfZ2V0X2Jhc2Vfd2lkdGgoKQorCSsgR2V0U3lzdGVtTWV0cmljcyhTTV9DWEZSQU1FKSAqIDI7CisgICAgYmFzZV9oZWlnaHQgPSBndWlfZ2V0X2Jhc2VfaGVpZ2h0KCkKKwkrIEdldFN5c3RlbU1ldHJpY3MoU01fQ1lGUkFNRSkgKiAyCisJKyBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZQ0FQVElPTikKKyNpZmRlZiBGRUFUX01FTlUKKwkrIGd1aV9tc3dpbl9nZXRfbWVudV9oZWlnaHQoRkFMU0UpCisjZW5kaWYKKwk7CisgICAgKnZhbGlkX3cgPSBiYXNlX3dpZHRoICsKKwkJICAgICgodyAtIGJhc2Vfd2lkdGgpIC8gZ3VpLmNoYXJfd2lkdGgpICogZ3VpLmNoYXJfd2lkdGg7CisgICAgKnZhbGlkX2ggPSBiYXNlX2hlaWdodCArCisJCSAgICAoKGggLSBiYXNlX2hlaWdodCkgLyBndWkuY2hhcl9oZWlnaHQpICogZ3VpLmNoYXJfaGVpZ2h0OworfQorCisgICAgdm9pZAorZ3VpX21jaF9nZXRfc2NyZWVuX2RpbWVuc2lvbnMoaW50ICpzY3JlZW5fdywgaW50ICpzY3JlZW5faCkKK3sKKworICAgICpzY3JlZW5fdyA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1hGVUxMU0NSRUVOKQorCSAgICAgIC0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWEZSQU1FKSAqIDI7CisgICAgLyogRklYTUU6IGRpcnR5IHRyaWNrOiBCZWNhdXNlIHRoZSBndWlfZ2V0X2Jhc2VfaGVpZ2h0KCkgZG9lc24ndCBpbmNsdWRlCisgICAgICogdGhlIG1lbnViYXIgZm9yIE1Td2luLCB3ZSBzdWJ0cmFjdCBpdCBmcm9tIHRoZSBzY3JlZW4gaGVpZ2h0LCBzbyB0aGF0CisgICAgICogdGhlIHdpbmRvdyBzaXplIGNhbiBiZSBtYWRlIHRvIGZpdCBvbiB0aGUgc2NyZWVuLiAqLworICAgICpzY3JlZW5faCA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1lGVUxMU0NSRUVOKQorCSAgICAgIC0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWUZSQU1FKSAqIDIKKyNpZmRlZiBGRUFUX01FTlUKKwkgICAgICAtIGd1aV9tc3dpbl9nZXRfbWVudV9oZWlnaHQoRkFMU0UpCisjZW5kaWYKKwkgICAgICA7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2ZsYXNoKGludCBtc2VjKQoreworICAgIFJFQ1QgICAgcmM7CisKKyAgICAvKgorICAgICAqIE5vdGU6IEludmVydFJlY3QoKSBleGNsdWRlcyByaWdodCBhbmQgYm90dG9tIG9mIHJlY3RhbmdsZS4KKyAgICAgKi8KKyAgICByYy5sZWZ0ID0gMDsKKyAgICByYy50b3AgPSAwOworICAgIHJjLnJpZ2h0ID0gZ3VpLm51bV9jb2xzICogZ3VpLmNoYXJfd2lkdGg7CisgICAgcmMuYm90dG9tID0gZ3VpLm51bV9yb3dzICogZ3VpLmNoYXJfaGVpZ2h0OworICAgIEludmVydFJlY3Qoc19oZGMsICZyYyk7CisgICAgZ3VpX21jaF9mbHVzaCgpOwkJCS8qIG1ha2Ugc3VyZSBpdCdzIGRpc3BsYXllZCAqLworCisgICAgdWlfZGVsYXkoKGxvbmcpbXNlYywgVFJVRSk7CS8qIHdhaXQgZm9yIGEgZmV3IG1zZWMgKi8KKworICAgIEludmVydFJlY3Qoc19oZGMsICZyYyk7Cit9CisKKy8qCisgKiBSZXR1cm4gZmxhZ3MgdXNlZCBmb3Igc2Nyb2xsaW5nLgorICogVGhlIFNXX0lOVkFMSURBVEUgaXMgcmVxdWlyZWQgd2hlbiBwYXJ0IG9mIHRoZSB3aW5kb3cgaXMgY292ZXJlZCBvcgorICogb2ZmLXNjcmVlbi4gUmVmZXIgdG8gTVMgS0IgUTc1MjM2LgorICovCisgICAgc3RhdGljIGludAorZ2V0X3Njcm9sbF9mbGFncyh2b2lkKQoreworICAgIEhXTkQJaHduZDsKKyAgICBSRUNUCXJjVmltLCByY090aGVyLCByY0Rlc3Q7CisKKyAgICBHZXRXaW5kb3dSZWN0KHNfaHduZCwgJnJjVmltKTsKKyAgICBmb3IgKGh3bmQgPSBzX2h3bmQ7IChod25kID0gR2V0V2luZG93KGh3bmQsIEdXX0hXTkRQUkVWKSkgIT0gKEhXTkQpMDsgKQorCWlmIChJc1dpbmRvd1Zpc2libGUoaHduZCkpCisJeworCSAgICBHZXRXaW5kb3dSZWN0KGh3bmQsICZyY090aGVyKTsKKwkgICAgaWYgKEludGVyc2VjdFJlY3QoJnJjRGVzdCwgJnJjVmltLCAmcmNPdGhlcikpCisJCXJldHVybiBTV19JTlZBTElEQVRFOworCX0KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIERlbGV0ZSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIGdpdmVuIHJvdywgc2Nyb2xsaW5nIHVwIGFueQorICogdGV4dCBmdXJ0aGVyIGRvd24gd2l0aGluIHRoZSBzY3JvbGwgcmVnaW9uLgorICovCisgICAgdm9pZAorZ3VpX21jaF9kZWxldGVfbGluZXMoCisgICAgaW50CSAgICByb3csCisgICAgaW50CSAgICBudW1fbGluZXMpCit7CisgICAgUkVDVAlyYzsKKworICAgIHJjLmxlZnQgPSBGSUxMX1goZ3VpLnNjcm9sbF9yZWdpb25fbGVmdCk7CisgICAgcmMucmlnaHQgPSBGSUxMX1goZ3VpLnNjcm9sbF9yZWdpb25fcmlnaHQgKyAxKTsKKyAgICByYy50b3AgPSBGSUxMX1kocm93KTsKKyAgICByYy5ib3R0b20gPSBGSUxMX1koZ3VpLnNjcm9sbF9yZWdpb25fYm90ICsgMSk7CisKKyAgICBTY3JvbGxXaW5kb3dFeChzX3RleHRBcmVhLCAwLCAtbnVtX2xpbmVzICogZ3VpLmNoYXJfaGVpZ2h0LAorCQkJCSAgICAmcmMsICZyYywgTlVMTCwgTlVMTCwgZ2V0X3Njcm9sbF9mbGFncygpKTsKKworICAgIFVwZGF0ZVdpbmRvdyhzX3RleHRBcmVhKTsKKyAgICAvKiBUaGlzIHNlZW1zIHRvIGJlIHJlcXVpcmVkIHRvIGF2b2lkIHRoZSBjdXJzb3IgZGlzYXBwZWFyaW5nIHdoZW4KKyAgICAgKiBzY3JvbGxpbmcgc3VjaCB0aGF0IHRoZSBjdXJzb3IgZW5kcyB1cCBpbiB0aGUgdG9wLWxlZnQgY2hhcmFjdGVyIG9uCisgICAgICogdGhlIHNjcmVlbi4uLiAgIEJ1dCB3aHk/ICAoV2ViYikgKi8KKyAgICAvKiBJdCdzIHByb2JhYmx5IGZpeGVkIGJ5IGRpc2FibGluZyBkcmF3aW5nIHRoZSBjdXJzb3Igd2hpbGUgc2Nyb2xsaW5nLiAqLworICAgIC8qIGd1aS5jdXJzb3JfaXNfdmFsaWQgPSBGQUxTRTsgKi8KKworICAgIGd1aV9jbGVhcl9ibG9jayhndWkuc2Nyb2xsX3JlZ2lvbl9ib3QgLSBudW1fbGluZXMgKyAxLAorCQkJCQkJICAgICAgIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQsCisJZ3VpLnNjcm9sbF9yZWdpb25fYm90LCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCk7Cit9CisKKy8qCisgKiBJbnNlcnQgdGhlIGdpdmVuIG51bWJlciBvZiBsaW5lcyBiZWZvcmUgdGhlIGdpdmVuIHJvdywgc2Nyb2xsaW5nIGRvd24gYW55CisgKiBmb2xsb3dpbmcgdGV4dCB3aXRoaW4gdGhlIHNjcm9sbCByZWdpb24uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2luc2VydF9saW5lcygKKyAgICBpbnQJCXJvdywKKyAgICBpbnQJCW51bV9saW5lcykKK3sKKyAgICBSRUNUCXJjOworCisgICAgcmMubGVmdCA9IEZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KTsKKyAgICByYy5yaWdodCA9IEZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCArIDEpOworICAgIHJjLnRvcCA9IEZJTExfWShyb3cpOworICAgIHJjLmJvdHRvbSA9IEZJTExfWShndWkuc2Nyb2xsX3JlZ2lvbl9ib3QgKyAxKTsKKyAgICAvKiBUaGUgU1dfSU5WQUxJREFURSBpcyByZXF1aXJlZCB3aGVuIHBhcnQgb2YgdGhlIHdpbmRvdyBpcyBjb3ZlcmVkIG9yCisgICAgICogb2ZmLXNjcmVlbi4gIEhvdyBkbyB3ZSBhdm9pZCBpdCB3aGVuIGl0J3Mgbm90IG5lZWRlZD8gKi8KKyAgICBTY3JvbGxXaW5kb3dFeChzX3RleHRBcmVhLCAwLCBudW1fbGluZXMgKiBndWkuY2hhcl9oZWlnaHQsCisJCQkJICAgICZyYywgJnJjLCBOVUxMLCBOVUxMLCBnZXRfc2Nyb2xsX2ZsYWdzKCkpOworCisgICAgVXBkYXRlV2luZG93KHNfdGV4dEFyZWEpOworCisgICAgZ3VpX2NsZWFyX2Jsb2NrKHJvdywgZ3VpLnNjcm9sbF9yZWdpb25fbGVmdCwKKwkJCQlyb3cgKyBudW1fbGluZXMgLSAxLCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCk7Cit9CisKKworICAgIHZvaWQKK2d1aV9tY2hfZXhpdChpbnQgcmMpCit7CisgICAgUmVsZWFzZURDKHNfdGV4dEFyZWEsIHNfaGRjKTsKKyAgICBEZWxldGVPYmplY3Qoc19icnVzaCk7CisKKyNpZmRlZiBGRUFUX1RFQVJPRkYKKyAgICAvKiBVbmxvYWQgdGhlIHRlYXJvZmYgYml0bWFwICovCisgICAgKHZvaWQpRGVsZXRlT2JqZWN0KChIR0RJT0JKKXNfaHRlYXJiaXRtYXApOworI2VuZGlmCisKKyAgICAvKiBEZXN0cm95IG91ciB3aW5kb3cgKGlmIHdlIGhhdmUgb25lKS4gKi8KKyAgICBpZiAoc19od25kICE9IE5VTEwpCisgICAgeworCWRlc3Ryb3lpbmcgPSBUUlVFOwkvKiBpZ25vcmUgV01fREVTVFJPWSBtZXNzYWdlIG5vdyAqLworCURlc3Ryb3lXaW5kb3coc19od25kKTsKKyAgICB9CisKKyNpZmRlZiBHTE9CQUxfSU1FCisgICAgZ2xvYmFsX2ltZV9lbmQoKTsKKyNlbmRpZgorfQorCisvKgorICogSW5pdGlhbGlzZSB2aW0gdG8gdXNlIHRoZSBmb250IHdpdGggdGhlIGdpdmVuIG5hbWUuCVJldHVybiBGQUlMIGlmIHRoZSBmb250CisgKiBjb3VsZCBub3QgYmUgbG9hZGVkLCBPSyBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfaW5pdF9mb250KGNoYXJfdSAqZm9udF9uYW1lLCBpbnQgZm9udHNldCkKK3sKKyAgICBMT0dGT05UCWxmOworICAgIEd1aUZvbnQJZm9udCA9IE5PRk9OVDsKKworICAgIC8qIExvYWQgdGhlIGZvbnQgKi8KKyAgICBpZiAoZ2V0X2xvZ2ZvbnQoJmxmLCBmb250X25hbWUsIE5VTEwpKQorCWZvbnQgPSBnZXRfZm9udF9oYW5kbGUoJmxmKTsKKyAgICBpZiAoZm9udCA9PSBOT0ZPTlQpCisJcmV0dXJuIEZBSUw7CisgICAgaWYgKGZvbnRfbmFtZSA9PSBOVUxMKQorCWZvbnRfbmFtZSA9IGxmLmxmRmFjZU5hbWU7CisjaWYgZGVmaW5lZChGRUFUX01CWVRFX0lNRSkgfHwgZGVmaW5lZChHTE9CQUxfSU1FKQorICAgIG5vcm1fbG9nZm9udCA9IGxmOworI2VuZGlmCisjaWZkZWYgRkVBVF9NQllURV9JTUUKKyAgICBpbV9zZXRfZm9udCgmbGYpOworI2VuZGlmCisgICAgZ3VpX21jaF9mcmVlX2ZvbnQoZ3VpLm5vcm1fZm9udCk7CisgICAgZ3VpLm5vcm1fZm9udCA9IGZvbnQ7CisgICAgY3VycmVudF9mb250X2hlaWdodCA9IGxmLmxmSGVpZ2h0OworICAgIEdldEZvbnRTaXplKGZvbnQpOworICAgIGhsX3NldF9mb250X25hbWUobGYubGZGYWNlTmFtZSk7CisKKyAgICAvKiBXaGVuIHNldHRpbmcgJ2d1aWZvbnQnIHRvICIqIiByZXBsYWNlIGl0IHdpdGggdGhlIGFjdHVhbCBmb250IG5hbWUuICovCisgICAgaWYgKFNUUkNNUChmb250X25hbWUsICIqIikgPT0gMCAmJiBTVFJDTVAocF9ndWlmb250LCAiKiIpID09IDApCisgICAgeworCWNoYXIJICAgICpjaGFyc2V0X25hbWU7CisJY2hhcl91CSAgICAqcDsKKworCWNoYXJzZXRfbmFtZSA9IGNoYXJzZXRfaWQybmFtZSgoaW50KWxmLmxmQ2hhclNldCk7CisJcCA9IGFsbG9jKCh1bnNpZ25lZCkoc3RybGVuKGxmLmxmRmFjZU5hbWUpICsgMjAKKwkJICAgICsgKGNoYXJzZXRfbmFtZSA9PSBOVUxMID8gMCA6IHN0cmxlbihjaGFyc2V0X25hbWUpICsgMikpKTsKKwlpZiAocCAhPSBOVUxMKQorCXsKKwkgICAgLyogbWFrZSBhIG5vcm1hbCBmb250IHN0cmluZyBvdXQgb2YgdGhlIGxmIHRoaW5nOiovCisJICAgIHNwcmludGYoKGNoYXIgKilwLCAiJXM6aCVkIiwgbGYubGZGYWNlTmFtZSwgcGl4ZWxzX3RvX3BvaW50cygKKwkJCSBsZi5sZkhlaWdodCA8IDAgPyAtbGYubGZIZWlnaHQgOiBsZi5sZkhlaWdodCwgVFJVRSkpOworCSAgICB2aW1fZnJlZShwX2d1aWZvbnQpOworCSAgICBwX2d1aWZvbnQgPSBwOworCSAgICB3aGlsZSAoKnApCisJICAgIHsKKwkJaWYgKCpwID09ICcgJykKKwkJICAgICpwID0gJ18nOworCQkrK3A7CisJICAgIH0KKyNpZm5kZWYgTVNXSU4xNl9GQVNUVEVYVAorCSAgICBpZiAobGYubGZJdGFsaWMpCisJCVNUUkNBVChwLCAiOmkiKTsKKwkgICAgaWYgKGxmLmxmV2VpZ2h0ID49IEZXX0JPTEQpCisJCVNUUkNBVChwLCAiOmIiKTsKKyNlbmRpZgorCSAgICBpZiAobGYubGZVbmRlcmxpbmUpCisJCVNUUkNBVChwLCAiOnUiKTsKKwkgICAgaWYgKGxmLmxmU3RyaWtlT3V0KQorCQlTVFJDQVQocCwgIjpzIik7CisJICAgIGlmIChjaGFyc2V0X25hbWUgIT0gTlVMTCkKKwkgICAgeworCQlTVFJDQVQocCwgIjpjIik7CisJCVNUUkNBVChwLCBjaGFyc2V0X25hbWUpOworCSAgICB9CisJfQorICAgIH0KKworI2lmbmRlZiBNU1dJTjE2X0ZBU1RURVhUCisgICAgZ3VpX21jaF9mcmVlX2ZvbnQoZ3VpLml0YWxfZm9udCk7CisgICAgZ3VpLml0YWxfZm9udCA9IE5PRk9OVDsKKyAgICBndWlfbWNoX2ZyZWVfZm9udChndWkuYm9sZF9mb250KTsKKyAgICBndWkuYm9sZF9mb250ID0gTk9GT05UOworICAgIGd1aV9tY2hfZnJlZV9mb250KGd1aS5ib2xkaXRhbF9mb250KTsKKyAgICBndWkuYm9sZGl0YWxfZm9udCA9IE5PRk9OVDsKKworICAgIGlmICghbGYubGZJdGFsaWMpCisgICAgeworCWxmLmxmSXRhbGljID0gVFJVRTsKKwlndWkuaXRhbF9mb250ID0gZ2V0X2ZvbnRfaGFuZGxlKCZsZik7CisJbGYubGZJdGFsaWMgPSBGQUxTRTsKKyAgICB9CisgICAgaWYgKGxmLmxmV2VpZ2h0IDwgRldfQk9MRCkKKyAgICB7CisJbGYubGZXZWlnaHQgPSBGV19CT0xEOworCWd1aS5ib2xkX2ZvbnQgPSBnZXRfZm9udF9oYW5kbGUoJmxmKTsKKwlpZiAoIWxmLmxmSXRhbGljKQorCXsKKwkgICAgbGYubGZJdGFsaWMgPSBUUlVFOworCSAgICBndWkuYm9sZGl0YWxfZm9udCA9IGdldF9mb250X2hhbmRsZSgmbGYpOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBHVUkgd2luZG93IGlzIG1heGltaXplZCwgZmlsbGluZyB0aGUgd2hvbGUgc2NyZWVuLgorICovCisgICAgaW50CitndWlfbWNoX21heGltaXplZCgpCit7CisgICAgcmV0dXJuIElzWm9vbWVkKHNfaHduZCk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB0aGUgZm9udCBjaGFuZ2VkIHdoaWxlIHRoZSB3aW5kb3cgaXMgbWF4aW1pemVkLiAgQ29tcHV0ZSB0aGUKKyAqIG5ldyBSb3dzIGFuZCBDb2x1bW5zLiAgVGhpcyBpcyBsaWtlIHJlc2l6aW5nIHRoZSB3aW5kb3cuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX25ld2ZvbnQoKQoreworICAgIFJFQ1QJcmVjdDsKKworICAgIEdldFdpbmRvd1JlY3Qoc19od25kLCAmcmVjdCk7CisgICAgZ3VpX3Jlc2l6ZV9zaGVsbChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0CisJCQktIEdldFN5c3RlbU1ldHJpY3MoU01fQ1hGUkFNRSkgKiAyLAorCQkgICAgIHJlY3QuYm90dG9tIC0gcmVjdC50b3AKKwkJCS0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWUZSQU1FKSAqIDIKKwkJCS0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWUNBUFRJT04pCisjaWZkZWYgRkVBVF9NRU5VCisJCQktIGd1aV9tc3dpbl9nZXRfbWVudV9oZWlnaHQoRkFMU0UpCisjZW5kaWYKKwkgICAgKTsKK30KKworLyoKKyAqIFNldCB0aGUgd2luZG93IHRpdGxlCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldHRpdGxlKAorICAgIGNoYXJfdSAgKnRpdGxlLAorICAgIGNoYXJfdSAgKmljb24pCit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmICh0aXRsZSAhPSBOVUxMICYmIGVuY19jb2RlcGFnZSA+PSAwICYmIGVuY19jb2RlcGFnZSAhPSAoaW50KUdldEFDUCgpKQorICAgIHsKKwlXQ0hBUgkqd2J1ZjsKKwlpbnQJbjsKKworCS8qIENvbnZlcnQgdGhlIHRpdGxlIGZyb20gJ2VuY29kaW5nJyB0byB1Y3MyLiAqLworCXdidWYgPSAoV0NIQVIgKillbmNfdG9fdWNzMih0aXRsZSwgTlVMTCk7CisJaWYgKHdidWYgIT0gTlVMTCkKKwl7CisJICAgIG4gPSBTZXRXaW5kb3dUZXh0VyhzX2h3bmQsIHdidWYpOworCSAgICB2aW1fZnJlZSh3YnVmKTsKKwkgICAgaWYgKG4gIT0gMCB8fCBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKKwkJcmV0dXJuOworCSAgICAvKiBSZXRyeSB3aXRoIG5vbi13aWRlIGZ1bmN0aW9uIChmb3IgV2luZG93cyA5OCkuICovCisJfQorICAgIH0KKyNlbmRpZgorICAgIFNldFdpbmRvd1RleHQoc19od25kLCAoTFBDU1RSKSh0aXRsZSA9PSBOVUxMID8gIlZJTSIgOiAoY2hhciAqKXRpdGxlKSk7Cit9CisKKyNpZmRlZiBGRUFUX01PVVNFU0hBUEUKKy8qIFRhYmxlIGZvciBzaGFwZSBJRENzLiAgS2VlcCBpbiBzeW5jIHdpdGggdGhlIG1zaGFwZV9uYW1lc1tdIHRhYmxlIGluCisgKiBtaXNjMi5jISAqLworc3RhdGljIExQQ1NUUiBtc2hhcGVfaWRjc1tdID0KK3sKKyAgICBNQUtFSU5UUkVTT1VSQ0UoSURDX0FSUk9XKSwJCS8qIGFycm93ICovCisgICAgTUFLRUlOVFJFU09VUkNFKDApLAkJCS8qIGJsYW5rICovCisgICAgTUFLRUlOVFJFU09VUkNFKElEQ19JQkVBTSksCQkvKiBiZWFtICovCisgICAgTUFLRUlOVFJFU09VUkNFKElEQ19TSVpFTlMpLAkvKiB1cGRvd24gKi8KKyAgICBNQUtFSU5UUkVTT1VSQ0UoSURDX1NJWkVOUyksCS8qIHVkc2l6aW5nICovCisgICAgTUFLRUlOVFJFU09VUkNFKElEQ19TSVpFV0UpLAkvKiBsZWZ0cmlnaHQgKi8KKyAgICBNQUtFSU5UUkVTT1VSQ0UoSURDX1NJWkVXRSksCS8qIGxyc2l6aW5nICovCisgICAgTUFLRUlOVFJFU09VUkNFKElEQ19XQUlUKSwJCS8qIGJ1c3kgKi8KKyNpZmRlZiBXSU4zMjY0CisgICAgTUFLRUlOVFJFU09VUkNFKElEQ19OTyksCQkvKiBubyAqLworI2Vsc2UKKyAgICBNQUtFSU5UUkVTT1VSQ0UoSURDX0lDT04pLAkJLyogbm8gKi8KKyNlbmRpZgorICAgIE1BS0VJTlRSRVNPVVJDRShJRENfQVJST1cpLAkJLyogY3Jvc3NoYWlyICovCisgICAgTUFLRUlOVFJFU09VUkNFKElEQ19BUlJPVyksCQkvKiBoYW5kMSAqLworICAgIE1BS0VJTlRSRVNPVVJDRShJRENfQVJST1cpLAkJLyogaGFuZDIgKi8KKyAgICBNQUtFSU5UUkVTT1VSQ0UoSURDX0FSUk9XKSwJCS8qIHBlbmNpbCAqLworICAgIE1BS0VJTlRSRVNPVVJDRShJRENfQVJST1cpLAkJLyogcXVlc3Rpb24gKi8KKyAgICBNQUtFSU5UUkVTT1VSQ0UoSURDX0FSUk9XKSwJCS8qIHJpZ2h0LWFycm93ICovCisgICAgTUFLRUlOVFJFU09VUkNFKElEQ19VUEFSUk9XKSwJLyogdXAtYXJyb3cgKi8KKyAgICBNQUtFSU5UUkVTT1VSQ0UoSURDX0FSUk9XKQkJLyogbGFzdCBvbmUgKi8KK307CisKKyAgICB2b2lkCittY2hfc2V0X21vdXNlX3NoYXBlKGludCBzaGFwZSkKK3sKKyAgICBMUENTVFIgaWRjOworCisgICAgaWYgKHNoYXBlID09IE1TSEFQRV9ISURFKQorCVNob3dDdXJzb3IoRkFMU0UpOworICAgIGVsc2UKKyAgICB7CisJaWYgKHNoYXBlID49IE1TSEFQRV9OVU1CRVJFRCkKKwkgICAgaWRjID0gTUFLRUlOVFJFU09VUkNFKElEQ19BUlJPVyk7CisJZWxzZQorCSAgICBpZGMgPSBtc2hhcGVfaWRjc1tzaGFwZV07CisjaWZkZWYgX1dJTjY0CisJU2V0Q2xhc3NMb25nUHRyKHNfdGV4dEFyZWEsIEdDTFBfSENVUlNPUiwgKExPTkdfUFRSKUxvYWRDdXJzb3IoTlVMTCwgaWRjKSk7CisjZWxzZQorIyBpZmRlZiBXSU4zMgorCVNldENsYXNzTG9uZyhzX3RleHRBcmVhLCBHQ0xfSENVUlNPUiwgKExPTkcpTG9hZEN1cnNvcihOVUxMLCBpZGMpKTsKKyMgZWxzZQorCVNldENsYXNzV29yZChzX3RleHRBcmVhLCBHQ1dfSENVUlNPUiwgKFdPUkQpTG9hZEN1cnNvcihOVUxMLCBpZGMpKTsKKyMgZW5kaWYKKyNlbmRpZgorCWlmICghcF9taCkKKwl7CisJICAgIFBPSU5UIG1wOworCisJICAgIC8qIFNldCB0aGUgcG9zaXRpb24gdG8gbWFrZSBpdCByZWRyYXduIHdpdGggdGhlIG5ldyBzaGFwZS4gKi8KKwkgICAgKHZvaWQpR2V0Q3Vyc29yUG9zKChMUFBPSU5UKSZtcCk7CisJICAgICh2b2lkKVNldEN1cnNvclBvcyhtcC54LCBtcC55KTsKKwkgICAgU2hvd0N1cnNvcihUUlVFKTsKKwl9CisgICAgfQorfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0JST1dTRQorLyoKKyAqIFRoZSBmaWxlIGJyb3dzZXIgZXhpc3RzIGluIHR3byB2ZXJzaW9uczogd2l0aCAiVyIgdXNlcyB3aWRlIGNoYXJhY3RlcnMsCisgKiB3aXRob3V0ICJXIiB0aGUgY3VycmVudCBjb2RlcGFnZS4gIFdoZW4gRkVBVF9NQllURSBpcyBkZWZpbmVkIGFuZCBvbgorICogV2luZG93cyBOVC8yMDAwL1hQIHRoZSAiVyIgZnVuY3Rpb25zIGFyZSB1c2VkLgorICovCisKKyMgaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiBkZWZpbmVkKFdJTjMyNjQpCisvKgorICogV2lkZSB2ZXJzaW9uIG9mIGNvbnZlcnRfZmlsdGVyKCkuICBLZWVwIGluIHN5bmMhCisgKi8KKyAgICBzdGF0aWMgV0NIQVIgKgorY29udmVydF9maWx0ZXJXKGNoYXJfdSAqcykKK3sKKyAgICBXQ0hBUgkqcmVzOworICAgIHVuc2lnbmVkCXNfbGVuID0gKHVuc2lnbmVkKVNUUkxFTihzKTsKKyAgICB1bnNpZ25lZAlpOworCisgICAgcmVzID0gKFdDSEFSICopYWxsb2MoKHNfbGVuICsgMykgKiBzaXplb2YoV0NIQVIpKTsKKyAgICBpZiAocmVzICE9IE5VTEwpCisgICAgeworCWZvciAoaSA9IDA7IGkgPCBzX2xlbjsgKytpKQorCSAgICBpZiAoc1tpXSA9PSAnXHQnIHx8IHNbaV0gPT0gJ1xuJykKKwkJcmVzW2ldID0gJ1wwJzsKKwkgICAgZWxzZQorCQlyZXNbaV0gPSBzW2ldOworCXJlc1tzX2xlbl0gPSBOVUw7CisJLyogQWRkIHR3byBleHRyYSBOVUxzIHRvIG1ha2Ugc3VyZSBpdCdzIHByb3Blcmx5IHRlcm1pbmF0ZWQuICovCisJcmVzW3NfbGVuICsgMV0gPSBOVUw7CisJcmVzW3NfbGVuICsgMl0gPSBOVUw7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBXaWRlIHZlcnNpb24gb2YgZ3VpX21jaF9icm93c2UoKS4gIEtlZXAgaW4gc3luYyEKKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorZ3VpX21jaF9icm93c2VXKAorCWludCBzYXZpbmcsCisJY2hhcl91ICp0aXRsZSwKKwljaGFyX3UgKmRmbHQsCisJY2hhcl91ICpleHQsCisJY2hhcl91ICppbml0ZGlyLAorCWNoYXJfdSAqZmlsdGVyKQoreworICAgIC8qIFdlIGFsd2F5cyB1c2UgdGhlIHdpZGUgZnVuY3Rpb24uICBUaGlzIG1lYW5zIGVuY190b191Y3MyKCkgbXVzdCB3b3JrLAorICAgICAqIG90aGVyd2lzZSBpdCBmYWlscyBtaXNlcmFibHkhICovCisgICAgT1BFTkZJTEVOQU1FVwlmaWxlU3RydWN0OworICAgIFdDSEFSCQlmaWxlQnVmW01BWFBBVEhMXTsKKyAgICBXQ0hBUgkJKndwOworICAgIGludAkJCWk7CisgICAgV0NIQVIJCSp0aXRsZXAgPSBOVUxMOworICAgIFdDSEFSCQkqZXh0cCA9IE5VTEw7CisgICAgV0NIQVIJCSppbml0ZGlycCA9IE5VTEw7CisgICAgV0NIQVIJCSpmaWx0ZXJwOworICAgIGNoYXJfdQkJKnA7CisKKyAgICBpZiAoZGZsdCA9PSBOVUxMKQorCWZpbGVCdWZbMF0gPSBOVUw7CisgICAgZWxzZQorICAgIHsKKwl3cCA9IGVuY190b191Y3MyKGRmbHQsIE5VTEwpOworCWlmICh3cCA9PSBOVUxMKQorCSAgICBmaWxlQnVmWzBdID0gTlVMOworCWVsc2UKKwl7CisJICAgIGZvciAoaSA9IDA7IHdwW2ldICE9IE5VTCAmJiBpIDwgTUFYUEFUSEwgLSAxOyArK2kpCisJCWZpbGVCdWZbaV0gPSB3cFtpXTsKKwkgICAgZmlsZUJ1ZltpXSA9IE5VTDsKKwkgICAgdmltX2ZyZWUod3ApOworCX0KKyAgICB9CisKKyAgICAvKiBDb252ZXJ0IHRoZSBmaWx0ZXIgdG8gV2luZG93cyBmb3JtYXQuICovCisgICAgZmlsdGVycCA9IGNvbnZlcnRfZmlsdGVyVyhmaWx0ZXIpOworCisgICAgbWVtc2V0KCZmaWxlU3RydWN0LCAwLCBzaXplb2YoT1BFTkZJTEVOQU1FVykpOworI2lmZGVmIE9QRU5GSUxFTkFNRV9TSVpFX1ZFUlNJT05fNDAwCisgICAgLyogYmUgY29tcGF0aWJsZSB3aXRoIFdpbmRvd3MgTlQgNC4wICovCisgICAgLyogVE9ETzogd2hhdCB0byB1c2UgZm9yIE9QRU5GSUxFTkFNRVc/Pz8gKi8KKyAgICBmaWxlU3RydWN0LmxTdHJ1Y3RTaXplID0gc2l6ZW9mKE9QRU5GSUxFTkFNRV9TSVpFX1ZFUlNJT05fNDAwKTsKKyNlbHNlCisgICAgZmlsZVN0cnVjdC5sU3RydWN0U2l6ZSA9IHNpemVvZihmaWxlU3RydWN0KTsKKyNlbmRpZgorCisgICAgaWYgKHRpdGxlICE9IE5VTEwpCisJdGl0bGVwID0gZW5jX3RvX3VjczIodGl0bGUsIE5VTEwpOworICAgIGZpbGVTdHJ1Y3QubHBzdHJUaXRsZSA9IHRpdGxlcDsKKworICAgIGlmIChleHQgIT0gTlVMTCkKKwlleHRwID0gZW5jX3RvX3VjczIoZXh0LCBOVUxMKTsKKyAgICBmaWxlU3RydWN0Lmxwc3RyRGVmRXh0ID0gZXh0cDsKKworICAgIGZpbGVTdHJ1Y3QubHBzdHJGaWxlID0gZmlsZUJ1ZjsKKyAgICBmaWxlU3RydWN0Lm5NYXhGaWxlID0gTUFYUEFUSEw7CisgICAgZmlsZVN0cnVjdC5scHN0ckZpbHRlciA9IGZpbHRlcnA7CisgICAgZmlsZVN0cnVjdC5od25kT3duZXIgPSBzX2h3bmQ7CQkvKiBtYWluIFZpbSB3aW5kb3cgaXMgb3duZXIqLworICAgIC8qIGhhcyBhbiBpbml0aWFsIGRpciBiZWVuIHNwZWNpZmllZD8gKi8KKyAgICBpZiAoaW5pdGRpciAhPSBOVUxMICYmICppbml0ZGlyICE9IE5VTCkKKyAgICB7CisJLyogTXVzdCBoYXZlIGJhY2tzbGFzaGVzIGhlcmUsIG5vIG1hdHRlciB3aGF0ICdzaGVsbHNsYXNoJyBzYXlzICovCisJaW5pdGRpcnAgPSBlbmNfdG9fdWNzMihpbml0ZGlyLCBOVUxMKTsKKwlpZiAoaW5pdGRpcnAgIT0gTlVMTCkKKwl7CisJICAgIGZvciAod3AgPSBpbml0ZGlycDsgKndwICE9IE5VTDsgKyt3cCkKKwkJaWYgKCp3cCA9PSAnLycpCisJCSAgICAqd3AgPSAnXFwnOworCX0KKwlmaWxlU3RydWN0Lmxwc3RySW5pdGlhbERpciA9IGluaXRkaXJwOworICAgIH0KKworICAgIC8qCisgICAgICogVE9ETzogQWxsb3cgc2VsZWN0aW9uIG9mIG11bHRpcGxlIGZpbGVzLiAgTmVlZHMgYW5vdGhlciBhcmcgdG8gdGhpcworICAgICAqIGZ1bmN0aW9uIHRvIGFzayBmb3IgaXQsIGFuZCBuZWVkIHRvIHVzZSBPRk5fQUxMT1dNVUxUSVNFTEVDVCBiZWxvdy4KKyAgICAgKiBBbHNvLCBzaG91bGQgd2UgdXNlIE9GTl9GSUxFTVVTVEVYSVNUIHdoZW4gb3BlbmluZz8gIFZpbSBjYW4gZWRpdCBvbgorICAgICAqIGZpbGVzIHRoYXQgZG9uJ3QgZXhpc3QgeWV0LCBzbyBJIGhhdmVuJ3QgcHV0IGl0IGluLiAgV2hhdCBhYm91dAorICAgICAqIE9GTl9QQVRITVVTVEVYSVNUPworICAgICAqIERvbid0IHVzZSBPRk5fT1ZFUldSSVRFUFJPTVBULCBWaW0gaGFzIGl0cyBvd24gIjpjb25maXJtIiBkaWFsb2cuCisgICAgICovCisgICAgZmlsZVN0cnVjdC5GbGFncyA9IChPRk5fTk9DSEFOR0VESVIgfCBPRk5fUEFUSE1VU1RFWElTVCB8IE9GTl9ISURFUkVBRE9OTFkpOworI2lmZGVmIEZFQVRfU0hPUlRDVVQKKyAgICBpZiAoY3VyYnVmLT5iX3BfYmluKQorCWZpbGVTdHJ1Y3QuRmxhZ3MgfD0gT0ZOX05PREVSRUZFUkVOQ0VMSU5LUzsKKyNlbmRpZgorICAgIGlmIChzYXZpbmcpCisgICAgeworCWlmICghR2V0U2F2ZUZpbGVOYW1lVygmZmlsZVN0cnVjdCkpCisJICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmICghR2V0T3BlbkZpbGVOYW1lVygmZmlsZVN0cnVjdCkpCisJICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZpbV9mcmVlKGZpbHRlcnApOworICAgIHZpbV9mcmVlKGluaXRkaXJwKTsKKyAgICB2aW1fZnJlZSh0aXRsZXApOworICAgIHZpbV9mcmVlKGV4dHApOworCisgICAgLyogQ29udmVydCBmcm9tIFVDUzIgdG8gJ2VuY29kaW5nJy4gKi8KKyAgICBwID0gdWNzMl90b19lbmMoZmlsZUJ1ZiwgTlVMTCk7CisgICAgaWYgKHAgIT0gTlVMTCkKKwkvKiB3aGVuIG91dCBvZiBtZW1vcnkgd2UgZ2V0IGdhcmJhZ2UgZm9yIG5vbi1BU0NJSSBjaGFycyAqLworCVNUUkNQWShmaWxlQnVmLCBwKTsKKyAgICB2aW1fZnJlZShwKTsKKworICAgIC8qIEdpdmUgZm9jdXMgYmFjayB0byBtYWluIHdpbmRvdyAod2hlbiB1c2luZyBNREkpLiAqLworICAgIFNldEZvY3VzKHNfaHduZCk7CisKKyAgICAvKiBTaG9ydGVuIHRoZSBmaWxlIG5hbWUgaWYgcG9zc2libGUgKi8KKyAgICBtY2hfZGlybmFtZShJT2J1ZmYsIElPU0laRSk7CisgICAgcCA9IHNob3J0ZW5fZm5hbWUoKGNoYXJfdSAqKWZpbGVCdWYsIElPYnVmZik7CisgICAgaWYgKHAgPT0gTlVMTCkKKwlwID0gKGNoYXJfdSAqKWZpbGVCdWY7CisgICAgcmV0dXJuIHZpbV9zdHJzYXZlKHApOworfQorIyBlbmRpZiAvKiBGRUFUX01CWVRFICovCisKKworLyoKKyAqIENvbnZlcnQgdGhlIHN0cmluZyBzIHRvIHRoZSBwcm9wZXIgZm9ybWF0IGZvciBhIGZpbHRlciBzdHJpbmcgYnkgcmVwbGFjaW5nCisgKiB0aGUgXHQgYW5kIFxuIGRlbGltZXRlcnMgd2l0aCBcMC4KKyAqIFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcgaW4gYWxsb2NhdGVkIG1lbW9yeS4KKyAqCisgKiBLZWVwIGluIHN5bmMgd2l0aCBjb252ZXJ0X2ZpbHRlclcoKSBhYm92ZSEKKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorY29udmVydF9maWx0ZXIoY2hhcl91ICpzKQoreworICAgIGNoYXJfdQkqcmVzOworICAgIHVuc2lnbmVkCXNfbGVuID0gKHVuc2lnbmVkKVNUUkxFTihzKTsKKyAgICB1bnNpZ25lZAlpOworCisgICAgcmVzID0gYWxsb2Moc19sZW4gKyAzKTsKKyAgICBpZiAocmVzICE9IE5VTEwpCisgICAgeworCWZvciAoaSA9IDA7IGkgPCBzX2xlbjsgKytpKQorCSAgICBpZiAoc1tpXSA9PSAnXHQnIHx8IHNbaV0gPT0gJ1xuJykKKwkJcmVzW2ldID0gJ1wwJzsKKwkgICAgZWxzZQorCQlyZXNbaV0gPSBzW2ldOworCXJlc1tzX2xlbl0gPSBOVUw7CisJLyogQWRkIHR3byBleHRyYSBOVUxzIHRvIG1ha2Ugc3VyZSBpdCdzIHByb3Blcmx5IHRlcm1pbmF0ZWQuICovCisJcmVzW3NfbGVuICsgMV0gPSBOVUw7CisJcmVzW3NfbGVuICsgMl0gPSBOVUw7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBQb3Agb3BlbiBhIGZpbGUgYnJvd3NlciBhbmQgcmV0dXJuIHRoZSBmaWxlIHNlbGVjdGVkLCBpbiBhbGxvY2F0ZWQgbWVtb3J5LAorICogb3IgTlVMTCBpZiBDYW5jZWwgaXMgaGl0LgorICogIHNhdmluZyAgLSBUUlVFIGlmIHRoZSBmaWxlIHdpbGwgYmUgc2F2ZWQgdG8sIEZBTFNFIGlmIGl0IHdpbGwgYmUgb3BlbmVkLgorICogIHRpdGxlICAgLSBUaXRsZSBtZXNzYWdlIGZvciB0aGUgZmlsZSBicm93c2VyIGRpYWxvZy4KKyAqICBkZmx0ICAgIC0gRGVmYXVsdCBuYW1lIG9mIGZpbGUuCisgKiAgZXh0ICAgICAtIERlZmF1bHQgZXh0ZW5zaW9uIHRvIGJlIGFkZGVkIHRvIGZpbGVzIHdpdGhvdXQgZXh0ZW5zaW9ucy4KKyAqICBpbml0ZGlyIC0gZGlyZWN0b3J5IGluIHdoaWNoIHRvIG9wZW4gdGhlIGJyb3dzZXIgKE5VTEwgPSBjdXJyZW50IGRpcikKKyAqICBmaWx0ZXIgIC0gRmlsdGVyIGZvciBtYXRjaGVkIGZpbGVzIHRvIGNob29zZSBmcm9tLgorICoKKyAqIEtlZXAgaW4gc3luYyB3aXRoIGd1aV9tY2hfYnJvd3NlVygpIGFib3ZlIQorICovCisgICAgY2hhcl91ICoKK2d1aV9tY2hfYnJvd3NlKAorCWludCBzYXZpbmcsCisJY2hhcl91ICp0aXRsZSwKKwljaGFyX3UgKmRmbHQsCisJY2hhcl91ICpleHQsCisJY2hhcl91ICppbml0ZGlyLAorCWNoYXJfdSAqZmlsdGVyKQoreworICAgIE9QRU5GSUxFTkFNRQlmaWxlU3RydWN0OworICAgIGNoYXJfdQkJZmlsZUJ1ZltNQVhQQVRITF07CisgICAgY2hhcl91CQkqaW5pdGRpcnAgPSBOVUxMOworICAgIGNoYXJfdQkJKmZpbHRlcnA7CisgICAgY2hhcl91CQkqcDsKKworIyBpZiBkZWZpbmVkKEZFQVRfTUJZVEUpICYmIGRlZmluZWQoV0lOMzI2NCkKKyAgICBpZiAob3NfdmVyc2lvbi5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UKQorCXJldHVybiBndWlfbWNoX2Jyb3dzZVcoc2F2aW5nLCB0aXRsZSwgZGZsdCwgZXh0LCBpbml0ZGlyLCBmaWx0ZXIpOworIyBlbmRpZgorCisgICAgaWYgKGRmbHQgPT0gTlVMTCkKKwlmaWxlQnVmWzBdID0gTlVMOworICAgIGVsc2UKKyAgICB7CisJU1RSTkNQWShmaWxlQnVmLCBkZmx0LCBNQVhQQVRITCAtIDEpOworCWZpbGVCdWZbTUFYUEFUSEwgLSAxXSA9IE5VTDsKKyAgICB9CisKKyAgICAvKiBDb252ZXJ0IHRoZSBmaWx0ZXIgdG8gV2luZG93cyBmb3JtYXQuICovCisgICAgZmlsdGVycCA9IGNvbnZlcnRfZmlsdGVyKGZpbHRlcik7CisKKyAgICBtZW1zZXQoJmZpbGVTdHJ1Y3QsIDAsIHNpemVvZihPUEVORklMRU5BTUUpKTsKKyNpZmRlZiBPUEVORklMRU5BTUVfU0laRV9WRVJTSU9OXzQwMAorICAgIC8qIGJlIGNvbXBhdGlibGUgd2l0aCBXaW5kb3dzIE5UIDQuMCAqLworICAgIGZpbGVTdHJ1Y3QubFN0cnVjdFNpemUgPSBzaXplb2YoT1BFTkZJTEVOQU1FX1NJWkVfVkVSU0lPTl80MDApOworI2Vsc2UKKyAgICBmaWxlU3RydWN0LmxTdHJ1Y3RTaXplID0gc2l6ZW9mKGZpbGVTdHJ1Y3QpOworI2VuZGlmCisKKyAgICBmaWxlU3RydWN0Lmxwc3RyVGl0bGUgPSB0aXRsZTsKKyAgICBmaWxlU3RydWN0Lmxwc3RyRGVmRXh0ID0gZXh0OworCisgICAgZmlsZVN0cnVjdC5scHN0ckZpbGUgPSBmaWxlQnVmOworICAgIGZpbGVTdHJ1Y3Qubk1heEZpbGUgPSBNQVhQQVRITDsKKyAgICBmaWxlU3RydWN0Lmxwc3RyRmlsdGVyID0gZmlsdGVycDsKKyAgICBmaWxlU3RydWN0Lmh3bmRPd25lciA9IHNfaHduZDsJCS8qIG1haW4gVmltIHdpbmRvdyBpcyBvd25lciovCisgICAgLyogaGFzIGFuIGluaXRpYWwgZGlyIGJlZW4gc3BlY2lmaWVkPyAqLworICAgIGlmIChpbml0ZGlyICE9IE5VTEwgJiYgKmluaXRkaXIgIT0gTlVMKQorICAgIHsKKwkvKiBNdXN0IGhhdmUgYmFja3NsYXNoZXMgaGVyZSwgbm8gbWF0dGVyIHdoYXQgJ3NoZWxsc2xhc2gnIHNheXMgKi8KKwlpbml0ZGlycCA9IHZpbV9zdHJzYXZlKGluaXRkaXIpOworCWlmIChpbml0ZGlycCAhPSBOVUxMKQorCSAgICBmb3IgKHAgPSBpbml0ZGlycDsgKnAgIT0gTlVMOyArK3ApCisJCWlmICgqcCA9PSAnLycpCisJCSAgICAqcCA9ICdcXCc7CisJZmlsZVN0cnVjdC5scHN0ckluaXRpYWxEaXIgPSBpbml0ZGlycDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRPRE86IEFsbG93IHNlbGVjdGlvbiBvZiBtdWx0aXBsZSBmaWxlcy4gIE5lZWRzIGFub3RoZXIgYXJnIHRvIHRoaXMKKyAgICAgKiBmdW5jdGlvbiB0byBhc2sgZm9yIGl0LCBhbmQgbmVlZCB0byB1c2UgT0ZOX0FMTE9XTVVMVElTRUxFQ1QgYmVsb3cuCisgICAgICogQWxzbywgc2hvdWxkIHdlIHVzZSBPRk5fRklMRU1VU1RFWElTVCB3aGVuIG9wZW5pbmc/ICBWaW0gY2FuIGVkaXQgb24KKyAgICAgKiBmaWxlcyB0aGF0IGRvbid0IGV4aXN0IHlldCwgc28gSSBoYXZlbid0IHB1dCBpdCBpbi4gIFdoYXQgYWJvdXQKKyAgICAgKiBPRk5fUEFUSE1VU1RFWElTVD8KKyAgICAgKiBEb24ndCB1c2UgT0ZOX09WRVJXUklURVBST01QVCwgVmltIGhhcyBpdHMgb3duICI6Y29uZmlybSIgZGlhbG9nLgorICAgICAqLworICAgIGZpbGVTdHJ1Y3QuRmxhZ3MgPSAoT0ZOX05PQ0hBTkdFRElSIHwgT0ZOX1BBVEhNVVNURVhJU1QgfCBPRk5fSElERVJFQURPTkxZKTsKKyNpZmRlZiBGRUFUX1NIT1JUQ1VUCisgICAgaWYgKGN1cmJ1Zi0+Yl9wX2JpbikKKwlmaWxlU3RydWN0LkZsYWdzIHw9IE9GTl9OT0RFUkVGRVJFTkNFTElOS1M7CisjZW5kaWYKKyAgICBpZiAoc2F2aW5nKQorICAgIHsKKwlpZiAoIUdldFNhdmVGaWxlTmFtZSgmZmlsZVN0cnVjdCkpCisJICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmICghR2V0T3BlbkZpbGVOYW1lKCZmaWxlU3RydWN0KSkKKwkgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdmltX2ZyZWUoZmlsdGVycCk7CisgICAgdmltX2ZyZWUoaW5pdGRpcnApOworCisgICAgLyogR2l2ZSBmb2N1cyBiYWNrIHRvIG1haW4gd2luZG93ICh3aGVuIHVzaW5nIE1ESSkuICovCisgICAgU2V0Rm9jdXMoc19od25kKTsKKworICAgIC8qIFNob3J0ZW4gdGhlIGZpbGUgbmFtZSBpZiBwb3NzaWJsZSAqLworICAgIG1jaF9kaXJuYW1lKElPYnVmZiwgSU9TSVpFKTsKKyAgICBwID0gc2hvcnRlbl9mbmFtZSgoY2hhcl91ICopZmlsZUJ1ZiwgSU9idWZmKTsKKyAgICBpZiAocCA9PSBOVUxMKQorCXAgPSAoY2hhcl91ICopZmlsZUJ1ZjsKKyAgICByZXR1cm4gdmltX3N0cnNhdmUocCk7Cit9CisjZW5kaWYgLyogRkVBVF9CUk9XU0UgKi8KKworICAgIHN0YXRpYyB2b2lkCitfT25Ecm9wRmlsZXMoCisgICAgSFdORCBod25kLAorICAgIEhEUk9QIGhEcm9wKQoreworI2lmZGVmIEZFQVRfV0lORE9XUworI2lmZGVmIFdJTjMyNjQKKyMgZGVmaW5lIEJVRlBBVEhMRU4gX01BWF9QQVRICisjIGRlZmluZSBEUkFHUVZBTCAweEZGRkZGRkZGCisjZWxzZQorIyBkZWZpbmUgQlVGUEFUSExFTiBNQVhQQVRITAorIyBkZWZpbmUgRFJBR1FWQUwgMHhGRkZGCisjZW5kaWYKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgV0NIQVIgICB3c3pGaWxlW0JVRlBBVEhMRU5dOworI2VuZGlmCisgICAgY2hhciAgICBzekZpbGVbQlVGUEFUSExFTl07CisgICAgVUlOVCAgICBjRmlsZXMgPSBEcmFnUXVlcnlGaWxlKGhEcm9wLCBEUkFHUVZBTCwgTlVMTCwgMCk7CisgICAgVUlOVCAgICBpOworICAgIGNoYXJfdSAgKipmbmFtZXM7CisgICAgUE9JTlQgICBwdDsKKyAgICBpbnRfdSAgIG1vZGlmaWVycyA9IDA7CisKKyAgICAvKiBUUkFDRSgiX09uRHJvcEZpbGVzOiAlZCBmaWxlcyBkcm9wcGVkXG4iLCBjRmlsZXMpOyAqLworCisgICAgLyogT2J0YWluIGRyb3BwZWQgcG9zaXRpb24gKi8KKyAgICBEcmFnUXVlcnlQb2ludChoRHJvcCwgJnB0KTsKKyAgICBNYXBXaW5kb3dQb2ludHMoc19od25kLCBzX3RleHRBcmVhLCAmcHQsIDEpOworCisjIGlmZGVmIEZFQVRfVklTVUFMCisgICAgcmVzZXRfVklzdWFsKCk7CisjIGVuZGlmCisKKyAgICBmbmFtZXMgPSAoY2hhcl91ICoqKWFsbG9jKGNGaWxlcyAqIHNpemVvZihjaGFyX3UgKikpOworCisgICAgaWYgKGZuYW1lcyAhPSBOVUxMKQorCWZvciAoaSA9IDA7IGkgPCBjRmlsZXM7ICsraSkKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoRHJhZ1F1ZXJ5RmlsZVcoaERyb3AsIGksIHdzekZpbGUsIEJVRlBBVEhMRU4pID4gMCkKKwkJZm5hbWVzW2ldID0gdWNzMl90b19lbmMod3N6RmlsZSwgTlVMTCk7CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCURyYWdRdWVyeUZpbGUoaERyb3AsIGksIHN6RmlsZSwgQlVGUEFUSExFTik7CisJCWZuYW1lc1tpXSA9IHZpbV9zdHJzYXZlKHN6RmlsZSk7CisJICAgIH0KKwl9CisKKyAgICBEcmFnRmluaXNoKGhEcm9wKTsKKworICAgIGlmIChmbmFtZXMgIT0gTlVMTCkKKyAgICB7CisJaWYgKChHZXRLZXlTdGF0ZShWS19TSElGVCkgJiAweDgwMDApICE9IDApCisJICAgIG1vZGlmaWVycyB8PSBNT1VTRV9TSElGVDsKKwlpZiAoKEdldEtleVN0YXRlKFZLX0NPTlRST0wpICYgMHg4MDAwKSAhPSAwKQorCSAgICBtb2RpZmllcnMgfD0gTU9VU0VfQ1RSTDsKKwlpZiAoKEdldEtleVN0YXRlKFZLX01FTlUpICYgMHg4MDAwKSAhPSAwKQorCSAgICBtb2RpZmllcnMgfD0gTU9VU0VfQUxUOworCisJZ3VpX2hhbmRsZV9kcm9wKHB0LngsIHB0LnksIG1vZGlmaWVycywgZm5hbWVzLCBjRmlsZXMpOworCisJc19uZWVkX2FjdGl2YXRlID0gVFJVRTsKKyAgICB9CisjZW5kaWYKK30KKworICAgIHN0YXRpYyBpbnQKK19PblNjcm9sbCgKKyAgICBIV05EIGh3bmQsCisgICAgSFdORCBod25kQ3RsLAorICAgIFVJTlQgY29kZSwKKyAgICBpbnQgcG9zKQoreworICAgIHN0YXRpYyBVSU5UCXByZXZfY29kZSA9IDA7ICAgLyogY29kZSBvZiBwcmV2aW91cyBjYWxsICovCisgICAgc2Nyb2xsYmFyX1QgKnNiLCAqc2JfaW5mbzsKKyAgICBsb25nCXZhbDsKKyAgICBpbnQJCWRyYWdnaW5nID0gRkFMU0U7CisgICAgaW50CQlkb250X3Njcm9sbF9zYXZlID0gZG9udF9zY3JvbGw7CisjaWZuZGVmIFdJTjMyNjQKKyAgICBpbnQJCW5Qb3M7CisjZWxzZQorICAgIFNDUk9MTElORk8Jc2k7CisKKyAgICBzaS5jYlNpemUgPSBzaXplb2Yoc2kpOworICAgIHNpLmZNYXNrID0gU0lGX1BPUzsKKyNlbmRpZgorCisgICAgc2IgPSBndWlfbXN3aW5fZmluZF9zY3JvbGxiYXIoaHduZEN0bCk7CisgICAgaWYgKHNiID09IE5VTEwpCisJcmV0dXJuIDA7CisKKyAgICBpZiAoc2ItPndwICE9IE5VTEwpCQkvKiBMZWZ0IG9yIHJpZ2h0IHNjcm9sbGJhciAqLworICAgIHsKKwkvKgorCSAqIENhcmVmdWw6IG5lZWQgdG8gZ2V0IHNjcm9sbGJhciBpbmZvIG91dCBvZiBmaXJzdCAobGVmdCkgc2Nyb2xsYmFyCisJICogZm9yIHdpbmRvdywgYnV0IGtlZXAgcmVhbCBzY3JvbGxiYXIgdG9vIGJlY2F1c2Ugd2UgbXVzdCBwYXNzIGl0IHRvCisJICogZ3VpX2RyYWdfc2Nyb2xsYmFyKCkuCisJICovCisJc2JfaW5mbyA9ICZzYi0+d3AtPndfc2Nyb2xsYmFyc1swXTsKKyAgICB9CisgICAgZWxzZQkgICAgLyogQm90dG9tIHNjcm9sbGJhciAqLworCXNiX2luZm8gPSBzYjsKKyAgICB2YWwgPSBzYl9pbmZvLT52YWx1ZTsKKworICAgIHN3aXRjaCAoY29kZSkKKyAgICB7CisJY2FzZSBTQl9USFVNQlRSQUNLOgorCSAgICB2YWwgPSBwb3M7CisJICAgIGRyYWdnaW5nID0gVFJVRTsKKwkgICAgaWYgKHNiLT5zY3JvbGxfc2hpZnQgPiAwKQorCQl2YWwgPDw9IHNiLT5zY3JvbGxfc2hpZnQ7CisJICAgIGJyZWFrOworCWNhc2UgU0JfTElORURPV046CisJICAgIHZhbCsrOworCSAgICBicmVhazsKKwljYXNlIFNCX0xJTkVVUDoKKwkgICAgdmFsLS07CisJICAgIGJyZWFrOworCWNhc2UgU0JfUEFHRURPV046CisJICAgIHZhbCArPSAoc2JfaW5mby0+c2l6ZSA+IDIgPyBzYl9pbmZvLT5zaXplIC0gMiA6IDEpOworCSAgICBicmVhazsKKwljYXNlIFNCX1BBR0VVUDoKKwkgICAgdmFsIC09IChzYl9pbmZvLT5zaXplID4gMiA/IHNiX2luZm8tPnNpemUgLSAyIDogMSk7CisJICAgIGJyZWFrOworCWNhc2UgU0JfVE9QOgorCSAgICB2YWwgPSAwOworCSAgICBicmVhazsKKwljYXNlIFNCX0JPVFRPTToKKwkgICAgdmFsID0gc2JfaW5mby0+bWF4OworCSAgICBicmVhazsKKwljYXNlIFNCX0VORFNDUk9MTDoKKwkgICAgaWYgKHByZXZfY29kZSA9PSBTQl9USFVNQlRSQUNLKQorCSAgICB7CisJCS8qCisJCSAqICJwb3MiIG9ubHkgZ2l2ZXMgdXMgMTYtYml0IGRhdGEuICBJbiBjYXNlIG9mIGxhcmdlIGZpbGUsCisJCSAqIHVzZSBHZXRTY3JvbGxQb3MoKSB3aGljaCByZXR1cm5zIDMyLWJpdC4gIFVuZm9ydHVuYXRlbHkgaXQKKwkJICogaXMgbm90IHZhbGlkIHdoaWxlIHRoZSBzY3JvbGxiYXIgaXMgYmVpbmcgZHJhZ2dlZC4KKwkJICovCisJCXZhbCA9IEdldFNjcm9sbFBvcyhod25kQ3RsLCBTQl9DVEwpOworCQlpZiAoc2ItPnNjcm9sbF9zaGlmdCA+IDApCisJCSAgICB2YWwgPDw9IHNiLT5zY3JvbGxfc2hpZnQ7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICAvKiBUUkFDRSgiVW5rbm93biBzY3JvbGxiYXIgZXZlbnQgJWRcbiIsIGNvZGUpOyAqLworCSAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcHJldl9jb2RlID0gY29kZTsKKworI2lmZGVmIFdJTjMyNjQKKyAgICBzaS5uUG9zID0gKHNiLT5zY3JvbGxfc2hpZnQgPiAwKSA/IHZhbCA+PiBzYi0+c2Nyb2xsX3NoaWZ0IDogdmFsOworICAgIFNldFNjcm9sbEluZm8oaHduZEN0bCwgU0JfQ1RMLCAmc2ksIFRSVUUpOworI2Vsc2UKKyAgICBuUG9zID0gKHNiLT5zY3JvbGxfc2hpZnQgPiAwKSA/IHZhbCA+PiBzYi0+c2Nyb2xsX3NoaWZ0IDogdmFsOworICAgIFNldFNjcm9sbFBvcyhod25kQ3RsLCBTQl9DVEwsIG5Qb3MsIFRSVUUpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFdoZW4gbW92aW5nIGEgdmVydGljYWwgc2Nyb2xsYmFyLCBtb3ZlIHRoZSBvdGhlciB2ZXJ0aWNhbCBzY3JvbGxiYXIgdG9vLgorICAgICAqLworICAgIGlmIChzYi0+d3AgIT0gTlVMTCkKKyAgICB7CisJc2Nyb2xsYmFyX1QgKnNiYSA9IHNiLT53cC0+d19zY3JvbGxiYXJzOworCUhXTkQgICAgaWQgPSBzYmFbIChzYiA9PSBzYmEgKyBTQkFSX0xFRlQpID8gU0JBUl9SSUdIVCA6IFNCQVJfTEVGVF0uaWQ7CisKKyNpZmRlZiBXSU4zMjY0CisJU2V0U2Nyb2xsSW5mbyhpZCwgU0JfQ1RMLCAmc2ksIFRSVUUpOworI2Vsc2UKKwlTZXRTY3JvbGxQb3MoaWQsIFNCX0NUTCwgblBvcywgVFJVRSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBEb24ndCBsZXQgdXMgYmUgaW50ZXJydXB0ZWQgaGVyZSBieSBhbm90aGVyIG1lc3NhZ2UuICovCisgICAgc19idXN5X3Byb2Nlc3NpbmcgPSBUUlVFOworCisgICAgLyogV2hlbiAiYWxsb3dfc2Nyb2xsYmFyIiBpcyBGQUxTRSBzdGlsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBuZXcKKyAgICAgKiBwb3NpdGlvbiwgYnV0IGRvbid0IGFjdHVhbGx5IHNjcm9sbCBieSBzZXR0aW5nICJkb250X3Njcm9sbCIuICovCisgICAgZG9udF9zY3JvbGwgPSAhYWxsb3dfc2Nyb2xsYmFyOworCisgICAgZ3VpX2RyYWdfc2Nyb2xsYmFyKHNiLCB2YWwsIGRyYWdnaW5nKTsKKworICAgIHNfYnVzeV9wcm9jZXNzaW5nID0gRkFMU0U7CisgICAgZG9udF9zY3JvbGwgPSBkb250X3Njcm9sbF9zYXZlOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAqIFVzZSAicHJvZyIgYXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gYW5kICJjbWRsaW5lIiBhcyB0aGUgYXJndW1lbnRzLgorICogQ29weSB0aGUgYXJndW1lbnRzIHRvIGFsbG9jYXRlZCBtZW1vcnkuCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBhcmd1bWVudHMgKGluY2x1ZGluZyBwcm9ncmFtIG5hbWUpLgorICogUmV0dXJuIHBvaW50ZXJzIHRvIHRoZSBhcmd1bWVudHMgaW4gImFyZ3ZwIi4KKyAqIFJldHVybiBwb2ludGVyIHRvIGJ1ZmZlciBpbiAidG9mcmVlIi4KKyAqIFJldHVybnMgemVybyB3aGVuIG91dCBvZiBtZW1vcnkuCisgKi8KKyAgICBpbnQKK2dldF9jbWRfYXJncyhjaGFyICpwcm9nLCBjaGFyICpjbWRsaW5lLCBjaGFyICoqKmFyZ3ZwLCBjaGFyICoqdG9mcmVlKQoreworICAgIGludAkJaTsKKyAgICBjaGFyCSpwOworICAgIGNoYXIJKnByb2dwOworICAgIGNoYXIJKnBuZXcgPSBOVUxMOworICAgIGNoYXIJKm5ld2NtZGxpbmU7CisgICAgaW50CQlpbnF1b3RlOworICAgIGludAkJYXJnYzsKKyAgICBjaGFyCSoqYXJndiA9IE5VTEw7CisgICAgaW50CQlyb3VuZDsKKworICAgIC8qIEhhbmRsZSB0aGUgcHJvZ3JhbSBuYW1lLiAgUmVtb3ZlIHRoZSAiLmV4ZSIgZXh0ZW5zaW9uLCBhbmQgZmluZCB0aGUgMXN0CisgICAgICogbm9uLXNwYWNlLiAqLworICAgIHAgPSBzdHJyY2hyKHByb2csICcuJyk7CisgICAgaWYgKHAgIT0gTlVMTCkKKwkqcCA9IE5VTDsKKyAgICBmb3IgKHByb2dwID0gcHJvZzsgKnByb2dwID09ICcgJzsgKytwcm9ncCkKKwk7CisKKyAgICAvKiBUaGUgY29tbWFuZCBsaW5lIGlzIGNvcGllZCB0byBhbGxvY2F0ZWQgbWVtb3J5LCBzbyB0aGF0IHdlIGNhbiBjaGFuZ2UKKyAgICAgKiBpdC4gIEFkZCB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nLCB0aGUgc2VwYXJhdGluZyBOVUwgYW5kIGEgdGVybWluYXRpbmcKKyAgICAgKiBOVUwuICovCisgICAgbmV3Y21kbGluZSA9IG1hbGxvYyhTVFJMRU4oY21kbGluZSkgKyBTVFJMRU4ocHJvZ3ApICsgMik7CisgICAgaWYgKG5ld2NtZGxpbmUgPT0gTlVMTCkKKwlyZXR1cm4gMDsKKworICAgIC8qCisgICAgICogRmlyc3Qgcm91bmQ6IGNvdW50IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzICgicG5ldyIgPT0gTlVMTCkuCisgICAgICogU2Vjb25kIHJvdW5kOiBwcm9kdWNlIHRoZSBhcmd1bWVudHMuCisgICAgICovCisgICAgZm9yIChyb3VuZCA9IDE7IHJvdW5kIDw9IDI7ICsrcm91bmQpCisgICAgeworCS8qIEZpcnN0IGFyZ3VtZW50IGlzIHRoZSBwcm9ncmFtIG5hbWUuICovCisJaWYgKHBuZXcgIT0gTlVMTCkKKwl7CisJICAgIGFyZ3ZbMF0gPSBwbmV3OworCSAgICBzdHJjcHkocG5ldywgcHJvZ3ApOworCSAgICBwbmV3ICs9IHN0cmxlbihwbmV3KTsKKwkgICAgKnBuZXcrKyA9IE5VTDsKKwl9CisKKwkvKgorCSAqIElzb2xhdGUgZWFjaCBhcmd1bWVudCBhbmQgcHV0IGl0IGluIGFyZ3ZbXS4KKwkgKi8KKwlwID0gY21kbGluZTsKKwlhcmdjID0gMTsKKwl3aGlsZSAoKnAgIT0gTlVMKQorCXsKKwkgICAgaW5xdW90ZSA9IEZBTFNFOworCSAgICBpZiAocG5ldyAhPSBOVUxMKQorCQlhcmd2W2FyZ2NdID0gcG5ldzsKKwkgICAgKythcmdjOworCSAgICB3aGlsZSAoKnAgIT0gTlVMICYmIChpbnF1b3RlIHx8ICgqcCAhPSAnICcgJiYgKnAgIT0gJ1x0JykpKQorCSAgICB7CisJCS8qIEJhY2tzbGFzaGVzIGFyZSBvbmx5IHNwZWNpYWwgd2hlbiBmb2xsb3dlZCBieSBhIGRvdWJsZQorCQkgKiBxdW90ZS4gKi8KKwkJaSA9IHN0cnNwbihwLCAiXFwiKTsKKwkJaWYgKHBbaV0gPT0gJyInKQorCQl7CisJCSAgICAvKiBIYWx2ZSB0aGUgbnVtYmVyIG9mIGJhY2tzbGFzaGVzLiAqLworCQkgICAgaWYgKGkgPiAxICYmIHBuZXcgIT0gTlVMTCkKKwkJICAgIHsKKwkJCW1lbXNldChwbmV3LCAnXFwnLCBpIC8gMik7CisJCQlwbmV3ICs9IGkgLyAyOworCQkgICAgfQorCisJCSAgICAvKiBFdmVuIG5yIG9mIGJhY2tzbGFzaGVzIHRvZ2dsZXMgcXVvdGluZywgdW5ldmVuIGNvcGllcworCQkgICAgICogdGhlIGRvdWJsZSBxdW90ZS4gKi8KKwkJICAgIGlmICgoaSAmIDEpID09IDApCisJCQlpbnF1b3RlID0gIWlucXVvdGU7CisJCSAgICBlbHNlIGlmIChwbmV3ICE9IE5VTEwpCisJCQkqcG5ldysrID0gJyInOworCQkgICAgcCArPSBpICsgMTsKKwkJfQorCQllbHNlIGlmIChpID4gMCkKKwkJeworCQkgICAgLyogQ29weSBzcGFuIG9mIGJhY2tzbGFzaGVzIHVubW9kaWZpZWQuICovCisJCSAgICBpZiAocG5ldyAhPSBOVUxMKQorCQkgICAgeworCQkJbWVtc2V0KHBuZXcsICdcXCcsIGkpOworCQkJcG5ldyArPSBpOworCQkgICAgfQorCQkgICAgcCArPSBpOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgaWYgKHBuZXcgIT0gTlVMTCkKKwkJCSpwbmV3KysgPSAqcDsKKwkJICAgICsrcDsKKwkJfQorCSAgICB9CisKKwkgICAgaWYgKHBuZXcgIT0gTlVMKQorCQkqcG5ldysrID0gTlVMOworCSAgICB3aGlsZSAoKnAgPT0gJyAnIHx8ICpwID09ICdcdCcpCisJCSsrcDsJCSAgICAvKiBhZHZhbmNlIHVudGlsIGEgbm9uLXNwYWNlICovCisJfQorCisJaWYgKHJvdW5kID09IDEpCisJeworCSAgICBhcmd2ID0gKGNoYXIgKiopbWFsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY2hhciAqKSk7CisJICAgIGlmIChhcmd2ID09IE5VTEwgKQorCQlyZXR1cm4gMDsJCSAgIC8qIG1hbGxvYyBlcnJvciAqLworCSAgICBwbmV3ID0gbmV3Y21kbGluZTsKKwl9CisgICAgfQorCisgICAgYXJndlthcmdjXSA9IE5VTEw7CQkvKiBOVUxMLXRlcm1pbmF0ZWQgbGlzdCAqLworCisgICAgKmFyZ3ZwID0gYXJndjsKKyAgICByZXR1cm4gYXJnYzsKK30KZGlmZiAtLWdpdCBhL3NyYy9ndWlfeDExLmMgYi9zcmMvZ3VpX3gxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwODdlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpX3gxMS5jCkBAIC0wLDAgKzEsMzc0OCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAkJYnkgQnJhbSBNb29sZW5hYXIKKyAqCQkJCUdVSS9Nb3RpZiBzdXBwb3J0IGJ5IFJvYmVydCBXZWJiCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisvKgorICogQ29tbW9uIGNvZGUgZm9yIHRoZSBNb3RpZiBhbmQgQXRoZW5hIEdVSS4KKyAqIE5vdCB1c2VkIGZvciBHVEsuCisgKi8KKworI2luY2x1ZGUgPFgxMS9rZXlzeW0uaD4KKyNpbmNsdWRlIDxYMTEvWGF0b20uaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvU2hlbGwuaD4KKyNpbmNsdWRlIDxYMTEvY3Vyc29yZm9udC5oPgorCisjaW5jbHVkZSAidmltLmgiCisKKy8qCisgKiBGb3IgV29ya3Nob3AgWHBtUC5oIGlzIHByZWZlcnJlZCwgYmVjYXVzZSBpdCBtYWtlcyB0aGUgc2lnbnMgZHJhd24gd2l0aCBhCisgKiB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kIGluc3RlYWQgb2YgYmxhY2suCisgKi8KKyNpZiBkZWZpbmVkKEhBVkVfWE1fWFBNUF9IKSAmJiBkZWZpbmVkKEZFQVRfR1VJX01PVElGKSBcCisJJiYgKCFkZWZpbmVkKEhBVkVfWDExX1hQTV9IKSB8fCBkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKSkKKyMgaW5jbHVkZSA8WG0vWHBtUC5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9YMTFfWFBNX0gKKyMgIGluY2x1ZGUgPFgxMS94cG0uaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9YRk9OVFNFVAorIyBpZmRlZiBYX0xPQ0FMRQorIyAgaW5jbHVkZSA8WDExL1hsb2NhbGUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8bG9jYWxlLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEhBVkVfWDExX1NVTktFWVNZTV9ICisjIGluY2x1ZGUgPFgxMS9TdW5rZXlzeW0uaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9YMTFfWE1VX0VESVRSRVNfSAorIyBpbmNsdWRlIDxYMTEvWG11L0VkaXRyZXMuaD4KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9CRVZBTF9USVAKKyMgaW5jbHVkZSAiZ3VpX2JldmFsLmgiCisjZW5kaWYKKworI2RlZmluZSBWSU1fTkFNRQkidmltIgorI2RlZmluZSBWSU1fQ0xBU1MJIlZpbSIKKworLyogRGVmYXVsdCByZXNvdXJjZSB2YWx1ZXMgKi8KKyNkZWZpbmUgREZMVF9GT05UCQkiN3gxMyIKKyNpZmRlZiBGT05UU0VUX0FMV0FZUworIyBkZWZpbmUgREZMVF9NRU5VX0ZPTlQJCVh0RGVmYXVsdEZvbnRTZXQKKyNlbHNlCisjIGRlZmluZSBERkxUX01FTlVfRk9OVAkJWHREZWZhdWx0Rm9udAorI2VuZGlmCisjZGVmaW5lIERGTFRfVE9PTFRJUF9GT05UCVh0RGVmYXVsdEZvbnRTZXQKKworI2lmZGVmIEZFQVRfR1VJX0FUSEVOQQorIyBkZWZpbmUgREZMVF9NRU5VX0JHX0NPTE9SCSJncmF5NzciCisjIGRlZmluZSBERkxUX01FTlVfRkdfQ09MT1IJImJsYWNrIgorIyBkZWZpbmUgREZMVF9TQ1JPTExfQkdfQ09MT1IJImdyYXk2MCIKKyMgZGVmaW5lIERGTFRfU0NST0xMX0ZHX0NPTE9SCSJncmF5NzciCisjIGRlZmluZSBERkxUX1RPT0xUSVBfQkdfQ09MT1IJIiNmZmZmZmZmZjkxOTEiCisjIGRlZmluZSBERkxUX1RPT0xUSVBfRkdfQ09MT1IJIiMwMDAwMDAwMDAwMDAiCisjZWxzZQorLyogdXNlIHRoZSBkZWZhdWx0IChDREUpIGNvbG9ycyAqLworIyBkZWZpbmUgREZMVF9NRU5VX0JHX0NPTE9SCSIiCisjIGRlZmluZSBERkxUX01FTlVfRkdfQ09MT1IJIiIKKyMgZGVmaW5lIERGTFRfU0NST0xMX0JHX0NPTE9SCSIiCisjIGRlZmluZSBERkxUX1NDUk9MTF9GR19DT0xPUgkiIgorIyBkZWZpbmUgREZMVF9UT09MVElQX0JHX0NPTE9SCSIjZmZmZmZmZmY5MTkxIgorIyBkZWZpbmUgREZMVF9UT09MVElQX0ZHX0NPTE9SCSIjMDAwMDAwMDAwMDAwIgorI2VuZGlmCisKK1dpZGdldCB2aW1TaGVsbCA9IChXaWRnZXQpMDsKKworc3RhdGljIEF0b20gICB3bV9hdG9tc1syXTsJLyogV2luZG93IE1hbmFnZXIgQXRvbXMgKi8KKyNkZWZpbmUgREVMRVRFX1dJTkRPV19JRFggMAkvKiBpbmRleCBpbiB3bV9hdG9tc1tdIGZvciBXTV9ERUxFVEVfV0lORE9XICovCisjZGVmaW5lIFNBVkVfWU9VUlNFTEZfSURYIDEJLyogaW5kZXggaW4gd21fYXRvbXNbXSBmb3IgV01fU0FWRV9ZT1VSU0VMRiAqLworCisjaWZkZWYgRkVBVF9YRk9OVFNFVAorLyoKKyAqIFdlIGVpdGhlciBkcmF3IHdpdGggYSBmb250c2V0ICh3aGVuIGN1cnJlbnRfZm9udHNldCAhPSBOVUxMKSBvciB3aXRoIGEKKyAqIG5vcm1hbCBmb250IChjdXJyZW50X2ZvbnRzZXQgPT0gTlVMTCwgdXNlIGd1aS50ZXh0X2djIGFuZCBndWkuYmFja19nYykuCisgKi8KK3N0YXRpYyBYRm9udFNldCBjdXJyZW50X2ZvbnRzZXQgPSBOVUxMOworCisjZGVmaW5lIFhEcmF3U3RyaW5nKGRweSwgd2luLCBnYywgeCwgeSwgc3RyLCBuKSBcCisJZG8gXAorCXsgXAorCSAgICBpZiAoY3VycmVudF9mb250c2V0ICE9IE5VTEwpIFwKKwkJWG1iRHJhd1N0cmluZyhkcHksIHdpbiwgY3VycmVudF9mb250c2V0LCBnYywgeCwgeSwgc3RyLCBuKTsgXAorCSAgICBlbHNlIFwKKwkJWERyYXdTdHJpbmcoZHB5LCB3aW4sIGdjLCB4LCB5LCBzdHIsIG4pOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBYRHJhd1N0cmluZzE2KGRweSwgd2luLCBnYywgeCwgeSwgc3RyLCBuKSBcCisJZG8gXAorCXsgXAorCSAgICBpZiAoY3VycmVudF9mb250c2V0ICE9IE5VTEwpIFwKKwkJWHdjRHJhd1N0cmluZyhkcHksIHdpbiwgY3VycmVudF9mb250c2V0LCBnYywgeCwgeSwgKHdjaGFyX3QgKilzdHIsIG4pOyBcCisJICAgIGVsc2UgXAorCQlYRHJhd1N0cmluZzE2KGRweSwgd2luLCBnYywgeCwgeSwgc3RyLCBuKTsgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgY2hlY2tfZm9udHNldF9zYW5pdHkgX19BUkdTKChYRm9udFNldCBmcykpOworc3RhdGljIGludCBmb250c2V0X3dpZHRoIF9fQVJHUygoWEZvbnRTZXQgZnMpKTsKK3N0YXRpYyBpbnQgZm9udHNldF9hc2NlbnQgX19BUkdTKChYRm9udFNldCBmcykpOworI2VuZGlmCisKK3N0YXRpYyBndWljb2xvcl9UCXByZXZfZmdfY29sb3IgPSBJTlZBTENPTE9SOworc3RhdGljIGd1aWNvbG9yX1QJcHJldl9iZ19jb2xvciA9IElOVkFMQ09MT1I7CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX01PVElGKSAmJiBkZWZpbmVkKEZFQVRfTUVOVSkKK3N0YXRpYyBYQnV0dG9uUHJlc3NlZEV2ZW50IGxhc3RfbW91c2VfZXZlbnQ7CisjZW5kaWYKKworc3RhdGljIGludCBmaW5kX2Nsb3Nlc3RfY29sb3IgX19BUkdTKChDb2xvcm1hcCBjb2xvcm1hcCwgWENvbG9yICpjb2xvclB0cikpOworc3RhdGljIHZvaWQgZ3VpX3gxMV90aW1lcl9jYiBfX0FSR1MoKFh0UG9pbnRlciB0aW1lZF9vdXQsIFh0SW50ZXJ2YWxJZCAqaW50ZXJ2YWxfaWQpKTsKK3N0YXRpYyB2b2lkIGd1aV94MTFfdmlzaWJpbGl0eV9jYiBfX0FSR1MoKFdpZGdldCB3LCBYdFBvaW50ZXIgZHVkLCBYRXZlbnQgKmV2ZW50LCBCb29sZWFuICpkdW0pKTsKK3N0YXRpYyB2b2lkIGd1aV94MTFfZXhwb3NlX2NiIF9fQVJHUygoV2lkZ2V0IHcsIFh0UG9pbnRlciBkdWQsIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKmR1bSkpOworc3RhdGljIHZvaWQgZ3VpX3gxMV9yZXNpemVfd2luZG93X2NiIF9fQVJHUygoV2lkZ2V0IHcsIFh0UG9pbnRlciBkdWQsIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKmR1bSkpOworc3RhdGljIHZvaWQgZ3VpX3gxMV9mb2N1c19jaGFuZ2VfY2IgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIGRhdGEsIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKmR1bSkpOworc3RhdGljIHZvaWQgZ3VpX3gxMV9lbnRlcl9jYiBfX0FSR1MoKFdpZGdldCB3LCBYdFBvaW50ZXIgZGF0YSwgWEV2ZW50ICpldmVudCwgQm9vbGVhbiAqZHVtKSk7CitzdGF0aWMgdm9pZCBndWlfeDExX2xlYXZlX2NiIF9fQVJHUygoV2lkZ2V0IHcsIFh0UG9pbnRlciBkYXRhLCBYRXZlbnQgKmV2ZW50LCBCb29sZWFuICpkdW0pKTsKK3N0YXRpYyB2b2lkIGd1aV94MTFfbW91c2VfY2IgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIGRhdGEsIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKmR1bSkpOworI2lmZGVmIEZFQVRfU05JRkYKK3N0YXRpYyB2b2lkIGd1aV94MTFfc25pZmZfcmVxdWVzdF9jYiBfX0FSR1MoKFh0UG9pbnRlciBjbG9zdXJlLCBpbnQgKnNvdXJjZSwgWHRJbnB1dElkICppZCkpOworI2VuZGlmCitzdGF0aWMgdm9pZCBndWlfeDExX2NoZWNrX2NvcHlfYXJlYSBfX0FSR1MoKHZvaWQpKTsKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorc3RhdGljIHZvaWQgZ3VpX3gxMV9zZW5kX2V2ZW50X2hhbmRsZXIgX19BUkdTKChXaWRnZXQsIFh0UG9pbnRlciwgWEV2ZW50ICosIEJvb2xlYW4gKikpOworI2VuZGlmCitzdGF0aWMgdm9pZCBndWlfeDExX3dtX3Byb3RvY29sX2hhbmRsZXIgX19BUkdTKChXaWRnZXQsIFh0UG9pbnRlciwgWEV2ZW50ICosIEJvb2xlYW4gKikpOworc3RhdGljIHZvaWQgZ3VpX3gxMV9ibGlua19jYiBfX0FSR1MoKFh0UG9pbnRlciB0aW1lZF9vdXQsIFh0SW50ZXJ2YWxJZCAqaW50ZXJ2YWxfaWQpKTsKK3N0YXRpYyBDdXJzb3IgZ3VpX3gxMV9jcmVhdGVfYmxhbmtfbW91c2UgX19BUkdTKCh2b2lkKSk7CisKKworLyoKKyAqIEtleWNvZGVzIHJlY29nbml6ZWQgYnkgdmltLgorICogTk9URTogd2hlbiBjaGFuZ2luZyB0aGlzLCB0aGUgdGFibGUgaW4gZ3VpX2d0a194MTEuYyBwcm9iYWJseSBuZWVkcyB0aGUKKyAqIHNhbWUgY2hhbmdlIQorICovCitzdGF0aWMgc3RydWN0IHNwZWNpYWxrZXkKK3sKKyAgICBLZXlTeW0gIGtleV9zeW07CisgICAgY2hhcl91ICB2aW1fY29kZTA7CisgICAgY2hhcl91ICB2aW1fY29kZTE7Cit9IHNwZWNpYWxfa2V5c1tdID0KK3sKKyAgICB7WEtfVXAsCQknaycsICd1J30sCisgICAge1hLX0Rvd24sCQknaycsICdkJ30sCisgICAge1hLX0xlZnQsCQknaycsICdsJ30sCisgICAge1hLX1JpZ2h0LAkJJ2snLCAncid9LAorCisgICAge1hLX0YxLAkJJ2snLCAnMSd9LAorICAgIHtYS19GMiwJCSdrJywgJzInfSwKKyAgICB7WEtfRjMsCQknaycsICczJ30sCisgICAge1hLX0Y0LAkJJ2snLCAnNCd9LAorICAgIHtYS19GNSwJCSdrJywgJzUnfSwKKyAgICB7WEtfRjYsCQknaycsICc2J30sCisgICAge1hLX0Y3LAkJJ2snLCAnNyd9LAorICAgIHtYS19GOCwJCSdrJywgJzgnfSwKKyAgICB7WEtfRjksCQknaycsICc5J30sCisgICAge1hLX0YxMCwJCSdrJywgJzsnfSwKKworICAgIHtYS19GMTEsCQknRicsICcxJ30sCisgICAge1hLX0YxMiwJCSdGJywgJzInfSwKKyAgICB7WEtfRjEzLAkJJ0YnLCAnMyd9LAorICAgIHtYS19GMTQsCQknRicsICc0J30sCisgICAge1hLX0YxNSwJCSdGJywgJzUnfSwKKyAgICB7WEtfRjE2LAkJJ0YnLCAnNid9LAorICAgIHtYS19GMTcsCQknRicsICc3J30sCisgICAge1hLX0YxOCwJCSdGJywgJzgnfSwKKyAgICB7WEtfRjE5LAkJJ0YnLCAnOSd9LAorICAgIHtYS19GMjAsCQknRicsICdBJ30sCisKKyAgICB7WEtfRjIxLAkJJ0YnLCAnQid9LAorICAgIHtYS19GMjIsCQknRicsICdDJ30sCisgICAge1hLX0YyMywJCSdGJywgJ0QnfSwKKyAgICB7WEtfRjI0LAkJJ0YnLCAnRSd9LAorICAgIHtYS19GMjUsCQknRicsICdGJ30sCisgICAge1hLX0YyNiwJCSdGJywgJ0cnfSwKKyAgICB7WEtfRjI3LAkJJ0YnLCAnSCd9LAorICAgIHtYS19GMjgsCQknRicsICdJJ30sCisgICAge1hLX0YyOSwJCSdGJywgJ0onfSwKKyAgICB7WEtfRjMwLAkJJ0YnLCAnSyd9LAorCisgICAge1hLX0YzMSwJCSdGJywgJ0wnfSwKKyAgICB7WEtfRjMyLAkJJ0YnLCAnTSd9LAorICAgIHtYS19GMzMsCQknRicsICdOJ30sCisgICAge1hLX0YzNCwJCSdGJywgJ08nfSwKKyAgICB7WEtfRjM1LAkJJ0YnLCAnUCd9LAkvKiBrZXlzeW1kZWYuaCBkZWZpbmVzIHVwIHRvIEYzNSAqLworI2lmZGVmIFN1blhLX0YzNgorICAgIHtTdW5YS19GMzYsCQknRicsICdRJ30sCisgICAge1N1blhLX0YzNywJCSdGJywgJ1InfSwKKyNlbmRpZgorCisgICAge1hLX0hlbHAsCQknJScsICcxJ30sCisgICAge1hLX1VuZG8sCQknJicsICc4J30sCisgICAge1hLX0JhY2tTcGFjZSwJJ2snLCAnYid9LAorICAgIHtYS19JbnNlcnQsCQknaycsICdJJ30sCisgICAge1hLX0RlbGV0ZSwJCSdrJywgJ0QnfSwKKyAgICB7WEtfSG9tZSwJCSdrJywgJ2gnfSwKKyAgICB7WEtfRW5kLAkJJ0AnLCAnNyd9LAorICAgIHtYS19QcmlvciwJCSdrJywgJ1AnfSwKKyAgICB7WEtfTmV4dCwJCSdrJywgJ04nfSwKKyAgICB7WEtfUHJpbnQsCQknJScsICc5J30sCisKKyAgICAvKiBLZXlwYWQga2V5czogKi8KKyNpZmRlZiBYS19LUF9MZWZ0CisgICAge1hLX0tQX0xlZnQsCSdrJywgJ2wnfSwKKyAgICB7WEtfS1BfUmlnaHQsCSdrJywgJ3InfSwKKyAgICB7WEtfS1BfVXAsCQknaycsICd1J30sCisgICAge1hLX0tQX0Rvd24sCSdrJywgJ2QnfSwKKyAgICB7WEtfS1BfSW5zZXJ0LAlLU19FWFRSQSwgKGNoYXJfdSlLRV9LSU5TfSwKKyAgICB7WEtfS1BfRGVsZXRlLAlLU19FWFRSQSwgKGNoYXJfdSlLRV9LREVMfSwKKyAgICB7WEtfS1BfSG9tZSwJJ0snLCAnMSd9LAorICAgIHtYS19LUF9FbmQsCQknSycsICc0J30sCisgICAge1hLX0tQX1ByaW9yLAknSycsICczJ30sCisgICAge1hLX0tQX05leHQsCSdLJywgJzUnfSwKKworICAgIHtYS19LUF9BZGQsCQknSycsICc2J30sCisgICAge1hLX0tQX1N1YnRyYWN0LAknSycsICc3J30sCisgICAge1hLX0tQX0RpdmlkZSwJJ0snLCAnOCd9LAorICAgIHtYS19LUF9NdWx0aXBseSwJJ0snLCAnOSd9LAorICAgIHtYS19LUF9FbnRlciwJJ0snLCAnQSd9LAorICAgIHtYS19LUF9EZWNpbWFsLAknSycsICdCJ30sCisKKyAgICB7WEtfS1BfMCwJCSdLJywgJ0MnfSwKKyAgICB7WEtfS1BfMSwJCSdLJywgJ0QnfSwKKyAgICB7WEtfS1BfMiwJCSdLJywgJ0UnfSwKKyAgICB7WEtfS1BfMywJCSdLJywgJ0YnfSwKKyAgICB7WEtfS1BfNCwJCSdLJywgJ0cnfSwKKyAgICB7WEtfS1BfNSwJCSdLJywgJ0gnfSwKKyAgICB7WEtfS1BfNiwJCSdLJywgJ0knfSwKKyAgICB7WEtfS1BfNywJCSdLJywgJ0onfSwKKyAgICB7WEtfS1BfOCwJCSdLJywgJ0snfSwKKyAgICB7WEtfS1BfOSwJCSdLJywgJ0wnfSwKKyNlbmRpZgorCisgICAgLyogRW5kIG9mIGxpc3QgbWFya2VyOiAqLworICAgIHsoS2V5U3ltKTAsCSAgICAwLCAwfQorfTsKKworI2RlZmluZSBYdE5ib2xkRm9udAkJImJvbGRGb250IgorI2RlZmluZSBYdENCb2xkRm9udAkJIkJvbGRGb250IgorI2RlZmluZSBYdE5pdGFsaWNGb250CQkiaXRhbGljRm9udCIKKyNkZWZpbmUgWHRDSXRhbGljRm9udAkJIkl0YWxpY0ZvbnQiCisjZGVmaW5lIFh0TmJvbGRJdGFsaWNGb250CSJib2xkSXRhbGljRm9udCIKKyNkZWZpbmUgWHRDQm9sZEl0YWxpY0ZvbnQJIkJvbGRJdGFsaWNGb250IgorI2RlZmluZSBYdE5zY3JvbGxiYXJXaWR0aAkic2Nyb2xsYmFyV2lkdGgiCisjZGVmaW5lIFh0Q1Njcm9sbGJhcldpZHRoCSJTY3JvbGxiYXJXaWR0aCIKKyNkZWZpbmUgWHRObWVudUhlaWdodAkJIm1lbnVIZWlnaHQiCisjZGVmaW5lIFh0Q01lbnVIZWlnaHQJCSJNZW51SGVpZ2h0IgorI2RlZmluZSBYdE5tZW51Rm9udAkJIm1lbnVGb250IgorI2RlZmluZSBYdENNZW51Rm9udAkJIk1lbnVGb250IgorI2RlZmluZSBYdE5tZW51Rm9udFNldAkJIm1lbnVGb250U2V0IgorI2RlZmluZSBYdENNZW51Rm9udFNldAkJIk1lbnVGb250U2V0IgorCisKKy8qIFJlc291cmNlcyBmb3Igc2V0dGluZyB0aGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMgb2YgbWVudXMgKi8KKyNkZWZpbmUgWHRObWVudUJhY2tncm91bmQJIm1lbnVCYWNrZ3JvdW5kIgorI2RlZmluZSBYdENNZW51QmFja2dyb3VuZAkiTWVudUJhY2tncm91bmQiCisjZGVmaW5lIFh0Tm1lbnVGb3JlZ3JvdW5kCSJtZW51Rm9yZWdyb3VuZCIKKyNkZWZpbmUgWHRDTWVudUZvcmVncm91bmQJIk1lbnVGb3JlZ3JvdW5kIgorCisvKiBSZXNvdXJjZXMgZm9yIHNldHRpbmcgdGhlIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIG9mIHNjcm9sbGJhcnMgKi8KKyNkZWZpbmUgWHROc2Nyb2xsQmFja2dyb3VuZAkic2Nyb2xsQmFja2dyb3VuZCIKKyNkZWZpbmUgWHRDU2Nyb2xsQmFja2dyb3VuZAkiU2Nyb2xsQmFja2dyb3VuZCIKKyNkZWZpbmUgWHROc2Nyb2xsRm9yZWdyb3VuZAkic2Nyb2xsRm9yZWdyb3VuZCIKKyNkZWZpbmUgWHRDU2Nyb2xsRm9yZWdyb3VuZAkiU2Nyb2xsRm9yZWdyb3VuZCIKKworLyogUmVzb3VyY2VzIGZvciBzZXR0aW5nIHRoZSBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBvZiB0b29sdGlwICovCisjZGVmaW5lIFh0TnRvb2x0aXBCYWNrZ3JvdW5kCSJ0b29sdGlwQmFja2dyb3VuZCIKKyNkZWZpbmUgWHRDVG9vbHRpcEJhY2tncm91bmQJIlRvb2x0aXBCYWNrZ3JvdW5kIgorI2RlZmluZSBYdE50b29sdGlwRm9yZWdyb3VuZAkidG9vbHRpcEZvcmVncm91bmQiCisjZGVmaW5lIFh0Q1Rvb2x0aXBGb3JlZ3JvdW5kCSJUb29sdGlwRm9yZWdyb3VuZCIKKyNkZWZpbmUgWHROdG9vbHRpcEZvbnQJCSJ0b29sdGlwRm9udCIKKyNkZWZpbmUgWHRDVG9vbHRpcEZvbnQJCSJUb29sdGlwRm9udCIKKworLyoKKyAqIFggUmVzb3VyY2VzOgorICovCitzdGF0aWMgWHRSZXNvdXJjZSB2aW1fcmVzb3VyY2VzW10gPQoreworICAgIHsKKwlYdE5mb3JlZ3JvdW5kLAorCVh0Q0ZvcmVncm91bmQsCisJWHRSUGl4ZWwsCisJc2l6ZW9mKFBpeGVsKSwKKwlYdE9mZnNldE9mKGd1aV9ULCBkZWZfbm9ybV9waXhlbCksCisJWHRSU3RyaW5nLAorCVh0RGVmYXVsdEZvcmVncm91bmQKKyAgICB9LAorICAgIHsKKwlYdE5iYWNrZ3JvdW5kLAorCVh0Q0JhY2tncm91bmQsCisJWHRSUGl4ZWwsCisJc2l6ZW9mKFBpeGVsKSwKKwlYdE9mZnNldE9mKGd1aV9ULCBkZWZfYmFja19waXhlbCksCisJWHRSU3RyaW5nLAorCVh0RGVmYXVsdEJhY2tncm91bmQKKyAgICB9LAorICAgIHsKKwlYdE5mb250LAorCVh0Q0ZvbnQsCisJWHRSU3RyaW5nLAorCXNpemVvZihTdHJpbmcgKiksCisJWHRPZmZzZXRPZihndWlfVCwgcnNyY19mb250X25hbWUpLAorCVh0UkltbWVkaWF0ZSwKKwlYdERlZmF1bHRGb250CisgICAgfSwKKyAgICB7CisJWHROYm9sZEZvbnQsCisJWHRDQm9sZEZvbnQsCisJWHRSU3RyaW5nLAorCXNpemVvZihTdHJpbmcgKiksCisJWHRPZmZzZXRPZihndWlfVCwgcnNyY19ib2xkX2ZvbnRfbmFtZSksCisJWHRSSW1tZWRpYXRlLAorCSIiCisgICAgfSwKKyAgICB7CisJWHROaXRhbGljRm9udCwKKwlYdENJdGFsaWNGb250LAorCVh0UlN0cmluZywKKwlzaXplb2YoU3RyaW5nICopLAorCVh0T2Zmc2V0T2YoZ3VpX1QsIHJzcmNfaXRhbF9mb250X25hbWUpLAorCVh0UkltbWVkaWF0ZSwKKwkiIgorICAgIH0sCisgICAgeworCVh0TmJvbGRJdGFsaWNGb250LAorCVh0Q0JvbGRJdGFsaWNGb250LAorCVh0UlN0cmluZywKKwlzaXplb2YoU3RyaW5nICopLAorCVh0T2Zmc2V0T2YoZ3VpX1QsIHJzcmNfYm9sZGl0YWxfZm9udF9uYW1lKSwKKwlYdFJJbW1lZGlhdGUsCisJIiIKKyAgICB9LAorICAgIHsKKwlYdE5nZW9tZXRyeSwKKwlYdENHZW9tZXRyeSwKKwlYdFJTdHJpbmcsCisJc2l6ZW9mKFN0cmluZyAqKSwKKwlYdE9mZnNldE9mKGd1aV9ULCBnZW9tKSwKKwlYdFJJbW1lZGlhdGUsCisJIiIKKyAgICB9LAorICAgIHsKKwlYdE5yZXZlcnNlVmlkZW8sCisJWHRDUmV2ZXJzZVZpZGVvLAorCVh0UkJvb2wsCisJc2l6ZW9mKEJvb2wpLAorCVh0T2Zmc2V0T2YoZ3VpX1QsIHJzcmNfcmV2X3ZpZGVvKSwKKwlYdFJJbW1lZGlhdGUsCisJKFh0UG9pbnRlcilGYWxzZQorICAgIH0sCisgICAgeworCVh0TmJvcmRlcldpZHRoLAorCVh0Q0JvcmRlcldpZHRoLAorCVh0UkludCwKKwlzaXplb2YoaW50KSwKKwlYdE9mZnNldE9mKGd1aV9ULCBib3JkZXJfd2lkdGgpLAorCVh0UkltbWVkaWF0ZSwKKwkoWHRQb2ludGVyKTIKKyAgICB9LAorICAgIHsKKwlYdE5zY3JvbGxiYXJXaWR0aCwKKwlYdENTY3JvbGxiYXJXaWR0aCwKKwlYdFJJbnQsCisJc2l6ZW9mKGludCksCisJWHRPZmZzZXRPZihndWlfVCwgc2Nyb2xsYmFyX3dpZHRoKSwKKwlYdFJJbW1lZGlhdGUsCisJKFh0UG9pbnRlcilTQl9ERUZBVUxUX1dJRFRICisgICAgfSwKKyNpZmRlZiBGRUFUX01FTlUKKyMgaWZkZWYgRkVBVF9HVUlfQVRIRU5BCQkvKiB3aXRoIE1vdGlmIHRoZSBoZWlnaHQgaXMgYWx3YXlzIGNvbXB1dGVkICovCisgICAgeworCVh0Tm1lbnVIZWlnaHQsCisJWHRDTWVudUhlaWdodCwKKwlYdFJJbnQsCisJc2l6ZW9mKGludCksCisJWHRPZmZzZXRPZihndWlfVCwgbWVudV9oZWlnaHQpLAorCVh0UkltbWVkaWF0ZSwKKwkoWHRQb2ludGVyKU1FTlVfREVGQVVMVF9IRUlHSFQJICAgIC8qIFNob3VsZCBmaWd1cmUgb3V0IGF0IHJ1biB0aW1lICovCisgICAgfSwKKyMgZW5kaWYKKyAgICB7CisjIGlmZGVmIEZPTlRTRVRfQUxXQVlTCisJWHRObWVudUZvbnRTZXQsCisJWHRDTWVudUZvbnRTZXQsCisjZWxzZQorCVh0Tm1lbnVGb250LAorCVh0Q01lbnVGb250LAorI2VuZGlmCisJWHRSU3RyaW5nLAorCXNpemVvZihjaGFyICopLAorCVh0T2Zmc2V0T2YoZ3VpX1QsIHJzcmNfbWVudV9mb250X25hbWUpLAorCVh0UlN0cmluZywKKwlERkxUX01FTlVfRk9OVAorICAgIH0sCisjZW5kaWYKKyAgICB7CisJWHRObWVudUZvcmVncm91bmQsCisJWHRDTWVudUZvcmVncm91bmQsCisJWHRSU3RyaW5nLAorCXNpemVvZihjaGFyICopLAorCVh0T2Zmc2V0T2YoZ3VpX1QsIHJzcmNfbWVudV9mZ19uYW1lKSwKKwlYdFJTdHJpbmcsCisJREZMVF9NRU5VX0ZHX0NPTE9SCisgICAgfSwKKyAgICB7CisJWHRObWVudUJhY2tncm91bmQsCisJWHRDTWVudUJhY2tncm91bmQsCisJWHRSU3RyaW5nLAorCXNpemVvZihjaGFyICopLAorCVh0T2Zmc2V0T2YoZ3VpX1QsIHJzcmNfbWVudV9iZ19uYW1lKSwKKwlYdFJTdHJpbmcsCisJREZMVF9NRU5VX0JHX0NPTE9SCisgICAgfSwKKyAgICB7CisJWHROc2Nyb2xsRm9yZWdyb3VuZCwKKwlYdENTY3JvbGxGb3JlZ3JvdW5kLAorCVh0UlN0cmluZywKKwlzaXplb2YoY2hhciAqKSwKKwlYdE9mZnNldE9mKGd1aV9ULCByc3JjX3Njcm9sbF9mZ19uYW1lKSwKKwlYdFJTdHJpbmcsCisJREZMVF9TQ1JPTExfRkdfQ09MT1IKKyAgICB9LAorICAgIHsKKwlYdE5zY3JvbGxCYWNrZ3JvdW5kLAorCVh0Q1Njcm9sbEJhY2tncm91bmQsCisJWHRSU3RyaW5nLAorCXNpemVvZihjaGFyICopLAorCVh0T2Zmc2V0T2YoZ3VpX1QsIHJzcmNfc2Nyb2xsX2JnX25hbWUpLAorCVh0UlN0cmluZywKKwlERkxUX1NDUk9MTF9CR19DT0xPUgorICAgIH0sCisjaWZkZWYgRkVBVF9CRVZBTAorICAgIHsKKwlYdE50b29sdGlwRm9yZWdyb3VuZCwKKwlYdENUb29sdGlwRm9yZWdyb3VuZCwKKwlYdFJTdHJpbmcsCisJc2l6ZW9mKGNoYXIgKiksCisJWHRPZmZzZXRPZihndWlfVCwgcnNyY190b29sdGlwX2ZnX25hbWUpLAorCVh0UlN0cmluZywKKwlERkxUX1RPT0xUSVBfRkdfQ09MT1IKKyAgICB9LAorICAgIHsKKwlYdE50b29sdGlwQmFja2dyb3VuZCwKKwlYdENUb29sdGlwQmFja2dyb3VuZCwKKwlYdFJTdHJpbmcsCisJc2l6ZW9mKGNoYXIgKiksCisJWHRPZmZzZXRPZihndWlfVCwgcnNyY190b29sdGlwX2JnX25hbWUpLAorCVh0UlN0cmluZywKKwlERkxUX1RPT0xUSVBfQkdfQ09MT1IKKyAgICB9LAorICAgIHsKKwlYdE50b29sdGlwRm9udCwKKwlYdENUb29sdGlwRm9udCwKKwlYdFJTdHJpbmcsCisJc2l6ZW9mKGNoYXIgKiksCisJWHRPZmZzZXRPZihndWlfVCwgcnNyY190b29sdGlwX2ZvbnRfbmFtZSksCisJWHRSU3RyaW5nLAorCURGTFRfVE9PTFRJUF9GT05UCisgICAgfSwKKyAgICAvKiBUaGlzIG9uZSBpc24ndCByZWFsbHkgbmVlZGVkLCBrZWVwIGZvciBTdW4gV29ya3Nob3A/ICovCisgICAgeworCSJiYWxsb29uRXZhbEZvbnRTZXQiLAorCVh0Q0ZvbnRTZXQsCisJWHRSRm9udFNldCwKKwlzaXplb2YoWEZvbnRTZXQpLAorCVh0T2Zmc2V0T2YoZ3VpX1QsIHRvb2x0aXBfZm9udHNldCksCisJWHRSSW1tZWRpYXRlLAorCShYdFBvaW50ZXIpTk9GT05UU0VUCisgICAgfSwKKyNlbmRpZiAvKiBGRUFUX0JFVkFMICovCisjaWZkZWYgRkVBVF9YSU0KKyAgICB7CisJInByZWVkaXRUeXBlIiwKKwkiUHJlZWRpdFR5cGUiLAorCVh0UlN0cmluZywKKwlzaXplb2YoY2hhciopLAorCVh0T2Zmc2V0T2YoZ3VpX1QsIHJzcmNfcHJlZWRpdF90eXBlX25hbWUpLAorCVh0UlN0cmluZywKKwkoWHRQb2ludGVyKSJPdmVyVGhlU3BvdCxPZmZUaGVTcG90LFJvb3QiCisgICAgfSwKKyAgICB7CisJImlucHV0TWV0aG9kIiwKKwkiSW5wdXRNZXRob2QiLAorCVh0UlN0cmluZywKKwlzaXplb2YoY2hhciopLAorCVh0T2Zmc2V0T2YoZ3VpX1QsIHJzcmNfaW5wdXRfbWV0aG9kKSwKKwlYdFJTdHJpbmcsCisJTlVMTAorICAgIH0sCisjZW5kaWYgLyogRkVBVF9YSU0gKi8KK307CisKKy8qCisgKiBUaGlzIHRhYmxlIGhvbGRzIGFsbCB0aGUgWCBHVUkgY29tbWFuZCBsaW5lIG9wdGlvbnMgYWxsb3dlZC4gIFRoaXMgaW5jbHVkZXMKKyAqIHRoZSBzdGFuZGFyZCBvbmVzIHNvIHRoYXQgd2UgY2FuIHNraXAgdGhlbSB3aGVuIHZpbSBpcyBzdGFydGVkIHdpdGhvdXQgdGhlCisgKiBHVUkgKGJ1dCB0aGUgR1VJIG1pZ2h0IHN0YXJ0IHVwIGxhdGVyKS4KKyAqIFdoZW4gY2hhbmdpbmcgdGhpcywgYWxzbyB1cGRhdGUgZG9jL3ZpbV9ndWkudHh0IGFuZCB0aGUgdXNhZ2UgbWVzc2FnZSEhIQorICovCitzdGF0aWMgWHJtT3B0aW9uRGVzY1JlYyBjbWRsaW5lX29wdGlvbnNbXSA9Cit7CisgICAgLyogV2UgaGFuZGxlIHRoZXNlIG9wdGlvbnMgb3Vyc2VsdmVzICovCisgICAgeyItYmciLAkJIi5iYWNrZ3JvdW5kIiwJICAgIFhybW9wdGlvblNlcEFyZywJTlVMTH0sCisgICAgeyItYmFja2dyb3VuZCIsCSIuYmFja2dyb3VuZCIsCSAgICBYcm1vcHRpb25TZXBBcmcsCU5VTEx9LAorICAgIHsiLWZnIiwJCSIuZm9yZWdyb3VuZCIsCSAgICBYcm1vcHRpb25TZXBBcmcsCU5VTEx9LAorICAgIHsiLWZvcmVncm91bmQiLAkiLmZvcmVncm91bmQiLAkgICAgWHJtb3B0aW9uU2VwQXJnLAlOVUxMfSwKKyAgICB7Ii1mbiIsCQkiLmZvbnQiLAkgICAgWHJtb3B0aW9uU2VwQXJnLAlOVUxMfSwKKyAgICB7Ii1mb250IiwJCSIuZm9udCIsCSAgICBYcm1vcHRpb25TZXBBcmcsCU5VTEx9LAorICAgIHsiLWJvbGRmb250IiwJIi5ib2xkRm9udCIsCSAgICBYcm1vcHRpb25TZXBBcmcsCU5VTEx9LAorICAgIHsiLWl0YWxpY2ZvbnQiLAkiLml0YWxpY0ZvbnQiLAkgICAgWHJtb3B0aW9uU2VwQXJnLAlOVUxMfSwKKyAgICB7Ii1nZW9tIiwJCSIuZ2VvbWV0cnkiLAkgICAgWHJtb3B0aW9uU2VwQXJnLAlOVUxMfSwKKyAgICB7Ii1nZW9tZXRyeSIsCSIuZ2VvbWV0cnkiLAkgICAgWHJtb3B0aW9uU2VwQXJnLAlOVUxMfSwKKyAgICB7Ii1yZXZlcnNlIiwJIipyZXZlcnNlVmlkZW8iLCAgICBYcm1vcHRpb25Ob0FyZywJIlRydWUifSwKKyAgICB7Ii1ydiIsCQkiKnJldmVyc2VWaWRlbyIsICAgIFhybW9wdGlvbk5vQXJnLAkiVHJ1ZSJ9LAorICAgIHsiK3JldmVyc2UiLAkiKnJldmVyc2VWaWRlbyIsICAgIFhybW9wdGlvbk5vQXJnLAkiRmFsc2UifSwKKyAgICB7IitydiIsCQkiKnJldmVyc2VWaWRlbyIsICAgIFhybW9wdGlvbk5vQXJnLAkiRmFsc2UifSwKKyAgICB7Ii1kaXNwbGF5IiwJIi5kaXNwbGF5IiwJICAgIFhybW9wdGlvblNlcEFyZywJTlVMTH0sCisgICAgeyItaWNvbmljIiwJCSIqaWNvbmljIiwJICAgIFhybW9wdGlvbk5vQXJnLAkiVHJ1ZSJ9LAorICAgIHsiLW5hbWUiLAkJIi5uYW1lIiwJICAgIFhybW9wdGlvblNlcEFyZywJTlVMTH0sCisgICAgeyItYnciLAkJIi5ib3JkZXJXaWR0aCIsCSAgICBYcm1vcHRpb25TZXBBcmcsCU5VTEx9LAorICAgIHsiLWJvcmRlcndpZHRoIiwJIi5ib3JkZXJXaWR0aCIsCSAgICBYcm1vcHRpb25TZXBBcmcsCU5VTEx9LAorICAgIHsiLXN3IiwJCSIuc2Nyb2xsYmFyV2lkdGgiLCAgWHJtb3B0aW9uU2VwQXJnLAlOVUxMfSwKKyAgICB7Ii1zY3JvbGxiYXJ3aWR0aCIsCSIuc2Nyb2xsYmFyV2lkdGgiLCAgWHJtb3B0aW9uU2VwQXJnLAlOVUxMfSwKKyAgICB7Ii1taCIsCQkiLm1lbnVIZWlnaHQiLAkgICAgWHJtb3B0aW9uU2VwQXJnLAlOVUxMfSwKKyAgICB7Ii1tZW51aGVpZ2h0IiwJIi5tZW51SGVpZ2h0IiwJICAgIFhybW9wdGlvblNlcEFyZywJTlVMTH0sCisjaWZkZWYgRk9OVFNFVF9BTFdBWVMKKyAgICB7Ii1tZiIsCQkiLm1lbnVGb250U2V0IiwJICAgIFhybW9wdGlvblNlcEFyZywJTlVMTH0sCisgICAgeyItbWVudWZvbnQiLAkiLm1lbnVGb250U2V0IiwJICAgIFhybW9wdGlvblNlcEFyZywJTlVMTH0sCisgICAgeyItbWVudWZvbnRzZXQiLAkiLm1lbnVGb250U2V0IiwJICAgIFhybW9wdGlvblNlcEFyZywJTlVMTH0sCisjZWxzZQorICAgIHsiLW1mIiwJCSIubWVudUZvbnQiLAkgICAgWHJtb3B0aW9uU2VwQXJnLAlOVUxMfSwKKyAgICB7Ii1tZW51Zm9udCIsCSIubWVudUZvbnQiLAkgICAgWHJtb3B0aW9uU2VwQXJnLAlOVUxMfSwKKyNlbmRpZgorICAgIHsiLXhybSIsCQlOVUxMLAkJICAgIFhybW9wdGlvblJlc0FyZywJTlVMTH0KK307CisKK3N0YXRpYyBpbnQgZ3VpX2FyZ2MgPSAwOworc3RhdGljIGNoYXIgKipndWlfYXJndiA9IE5VTEw7CisKKy8qCisgKiBDYWxsLWJhY2sgcm91dGluZXMuCisgKi8KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX3gxMV90aW1lcl9jYih0aW1lZF9vdXQsIGludGVydmFsX2lkKQorICAgIFh0UG9pbnRlcgkgICAgdGltZWRfb3V0OworICAgIFh0SW50ZXJ2YWxJZCAgICAqaW50ZXJ2YWxfaWQ7Cit7CisgICAgKigoaW50ICopdGltZWRfb3V0KSA9IFRSVUU7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK2d1aV94MTFfdmlzaWJpbGl0eV9jYih3LCBkdWQsIGV2ZW50LCBkdW0pCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCWR1ZDsKKyAgICBYRXZlbnQJKmV2ZW50OworICAgIEJvb2xlYW4JKmR1bTsKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUgIT0gVmlzaWJpbGl0eU5vdGlmeSkKKwlyZXR1cm47CisKKyAgICBndWkudmlzaWJpbGl0eSA9IGV2ZW50LT54dmlzaWJpbGl0eS5zdGF0ZTsKKworICAgIC8qCisgICAgICogV2hlbiB3ZSBkbyBhbiBYQ29weUFyZWEoKSwgYW5kIHRoZSB3aW5kb3cgaXMgcGFydGlhbGx5IG9ic2N1cmVkLCB3ZSB3YW50CisgICAgICogdG8gcmVjZWl2ZSBhbiBldmVudCB0byB0ZWxsIHVzIHdoZXRoZXIgaXQgd29ya2VkIG9yIG5vdC4KKyAgICAgKi8KKyAgICBYU2V0R3JhcGhpY3NFeHBvc3VyZXMoZ3VpLmRweSwgZ3VpLnRleHRfZ2MsCisJICAgIGd1aS52aXNpYmlsaXR5ICE9IFZpc2liaWxpdHlVbm9ic2N1cmVkKTsKKworICAgIC8qIFRoaXMgaXMgbmVlZGVkIGZvciB3aGVuIHJlZHJhd2luZyBpcyBzbG93LiAqLworICAgIGd1aV9tY2hfdXBkYXRlKCk7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK2d1aV94MTFfZXhwb3NlX2NiKHcsIGR1ZCwgZXZlbnQsIGR1bSkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJZHVkOworICAgIFhFdmVudAkqZXZlbnQ7CisgICAgQm9vbGVhbgkqZHVtOworeworICAgIFhFeHBvc2VFdmVudAkqZ2V2ZW50OworICAgIGludAkJCW5ld194OworCisgICAgaWYgKGV2ZW50LT50eXBlICE9IEV4cG9zZSkKKwlyZXR1cm47CisKKyAgICBvdXRfZmx1c2goKTsJICAgIC8qIG1ha2Ugc3VyZSBhbGwgb3V0cHV0IGhhcyBiZWVuIHByb2Nlc3NlZCAqLworCisgICAgZ2V2ZW50ID0gKFhFeHBvc2VFdmVudCAqKWV2ZW50OworICAgIGd1aV9yZWRyYXcoZ2V2ZW50LT54LCBnZXZlbnQtPnksIGdldmVudC0+d2lkdGgsIGdldmVudC0+aGVpZ2h0KTsKKworICAgIG5ld194ID0gRklMTF9YKDApOworCisgICAgLyogQ2xlYXIgdGhlIGJvcmRlciBhcmVhcyBpZiBuZWVkZWQgKi8KKyAgICBpZiAoZ2V2ZW50LT54IDwgbmV3X3gpCisJWENsZWFyQXJlYShndWkuZHB5LCBndWkud2lkLCAwLCAwLCBuZXdfeCwgMCwgRmFsc2UpOworICAgIGlmIChnZXZlbnQtPnkgPCBGSUxMX1koMCkpCisJWENsZWFyQXJlYShndWkuZHB5LCBndWkud2lkLCAwLCAwLCAwLCBGSUxMX1koMCksIEZhbHNlKTsKKyAgICBpZiAoZ2V2ZW50LT54ID4gRklMTF9YKENvbHVtbnMpKQorCVhDbGVhckFyZWEoZ3VpLmRweSwgZ3VpLndpZCwgRklMTF9YKChpbnQpQ29sdW1ucyksIDAsIDAsIDAsIEZhbHNlKTsKKyAgICBpZiAoZ2V2ZW50LT55ID4gRklMTF9ZKFJvd3MpKQorCVhDbGVhckFyZWEoZ3VpLmRweSwgZ3VpLndpZCwgMCwgRklMTF9ZKChpbnQpUm93cyksIDAsIDAsIEZhbHNlKTsKKworICAgIC8qIFRoaXMgaXMgbmVlZGVkIGZvciB3aGVuIHJlZHJhd2luZyBpcyBzbG93LiAqLworICAgIGd1aV9tY2hfdXBkYXRlKCk7Cit9CisKKyNpZiAoZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpIHx8IGRlZmluZWQoRkVBVF9TVU5fV09SS1NIT1ApKSBcCisJfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKglUaGlzIGZ1bmN0aW9uIGZpbGxzIGluIHRoZSBYUmVjdGFuZ2xlIG9iamVjdCB3aXRoIHRoZSBjdXJyZW50CisgKgl4LHkgY29vcmRpbmF0ZXMgYW5kIGhlaWdodCwgd2lkdGggc28gdGhhdCBhbiBYdFZhU2V0VmFsdWVzIHRvCisgKgl0aGUgc2FtZSBzaGVsbCBvZiB0aG9zZSByZXNvdXJjZXMgd2lsbCByZXN0b3JlIHRoZSB3aW5kb3cgdG8gaXRzCisgKglmb3JtYXIgcG9zaXRpb24gYW5kIGRpbWVuc2lvbnMuCisgKgorICoJTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgZmFpbCwgaW4gd2hpY2ggY2FzZSB0aGUgWFJlY3RhbmdsZSB3aWxsCisgKgliZSB1bmNoYW5nZWQuICBCZSBzdXJlIHRvIGhhdmUgdGhlIFhSZWN0YW5nbGUgc2V0IHdpdGggdGhlCisgKglwcm9wZXIgdmFsdWVzIGZvciBhIGZhaWxlZCBjb25kaXRpb24gcHJpb3IgdG8gY2FsbGluZyB0aGlzCisgKglmdW5jdGlvbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzaGVsbFJlY3RhbmdsZShXaWRnZXQgc2hlbGwsIFhSZWN0YW5nbGUgKnIpCit7CisgICAgV2luZG93CQlyb290dywgc2hlbGx3LCBjaGlsZCwgcGFyZW50dzsKKyAgICBpbnQJCQlhYnN4LCBhYnN5OworICAgIFhXaW5kb3dBdHRyaWJ1dGVzCWE7CisgICAgV2luZG93CQkqY2hpbGRyZW47CisgICAgdW5zaWduZWQgaW50CWNoaWxkcmVuQ291bnQ7CisKKyAgICBzaGVsbHcgPSBYdFdpbmRvdyhzaGVsbCk7CisgICAgaWYgKHNoZWxsdyA9PSAwKQorCXJldHVybjsKKyAgICBmb3IgKDs7KQorICAgIHsKKwlYUXVlcnlUcmVlKFh0RGlzcGxheShzaGVsbCksIHNoZWxsdywgJnJvb3R3LCAmcGFyZW50dywKKwkJCQkJCSAgICZjaGlsZHJlbiwgJmNoaWxkcmVuQ291bnQpOworCVhGcmVlKGNoaWxkcmVuKTsKKwlpZiAocGFyZW50dyA9PSByb290dykKKwkgICAgYnJlYWs7CisJc2hlbGx3ID0gcGFyZW50dzsKKyAgICB9CisgICAgWEdldFdpbmRvd0F0dHJpYnV0ZXMoWHREaXNwbGF5KHNoZWxsKSwgc2hlbGx3LCAmYSk7CisgICAgWFRyYW5zbGF0ZUNvb3JkaW5hdGVzKFh0RGlzcGxheShzaGVsbCksIHNoZWxsdywgYS5yb290LCAwLCAwLAorCQkJCQkJCSZhYnN4LCAmYWJzeSwgJmNoaWxkKTsKKyAgICByLT54ID0gYWJzeDsKKyAgICByLT55ID0gYWJzeTsKKyAgICBYdFZhR2V0VmFsdWVzKHNoZWxsLCBYbU5oZWlnaHQsICZyLT5oZWlnaHQsIFhtTndpZHRoLCAmci0+d2lkdGgsIE5VTEwpOworfQorI2VuZGlmCisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK2d1aV94MTFfcmVzaXplX3dpbmRvd19jYih3LCBkdWQsIGV2ZW50LCBkdW0pCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCWR1ZDsKKyAgICBYRXZlbnQJKmV2ZW50OworICAgIEJvb2xlYW4JKmR1bTsKK3sKKyAgICBzdGF0aWMgaW50IGxhc3RXaWR0aCwgbGFzdEhlaWdodDsKKworICAgIGlmIChldmVudC0+dHlwZSAhPSBDb25maWd1cmVOb3RpZnkpCisJcmV0dXJuOworCisgICAgaWYgKGV2ZW50LT54Y29uZmlndXJlLndpZHRoICE9IGxhc3RXaWR0aAorCSAgICB8fCBldmVudC0+eGNvbmZpZ3VyZS5oZWlnaHQgIT0gbGFzdEhlaWdodCkKKyAgICB7CisJbGFzdFdpZHRoID0gZXZlbnQtPnhjb25maWd1cmUud2lkdGg7CisJbGFzdEhlaWdodCA9IGV2ZW50LT54Y29uZmlndXJlLmhlaWdodDsKKwlndWlfcmVzaXplX3NoZWxsKGV2ZW50LT54Y29uZmlndXJlLndpZHRoLCBldmVudC0+eGNvbmZpZ3VyZS5oZWlnaHQKKyNpZmRlZiBGRUFUX1hJTQorCQkJCQkJLSB4aW1fZ2V0X3N0YXR1c19hcmVhX2hlaWdodCgpCisjZW5kaWYKKwkJICAgICApOworICAgIH0KKyNpZmRlZiBGRUFUX1NVTl9XT1JLU0hPUAorICAgIGlmICh1c2luZ1N1bldvcmtTaG9wKQorICAgIHsKKwlYUmVjdGFuZ2xlICByZWM7CisKKwlzaGVsbFJlY3RhbmdsZSh3LCAmcmVjKTsKKwl3b3Jrc2hvcF9mcmFtZV9tb3ZlZChyZWMueCwgcmVjLnksIHJlYy53aWR0aCwgcmVjLmhlaWdodCk7CisgICAgfQorI2VuZGlmCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgaWYgKHVzaW5nTmV0YmVhbnMpCisgICAgeworCVhSZWN0YW5nbGUgIHJlYzsKKworCXNoZWxsUmVjdGFuZ2xlKHcsICZyZWMpOworCW5ldGJlYW5zX2ZyYW1lX21vdmVkKHJlYy54LCByZWMueSk7CisgICAgfQorI2VuZGlmCisjaWZkZWYgRkVBVF9YSU0KKyAgICB4aW1fc2V0X3ByZWVkaXQoKTsKKyNlbmRpZgorfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitndWlfeDExX2ZvY3VzX2NoYW5nZV9jYih3LCBkYXRhLCBldmVudCwgZHVtKQorICAgIFdpZGdldAl3OworICAgIFh0UG9pbnRlcglkYXRhOworICAgIFhFdmVudAkqZXZlbnQ7CisgICAgQm9vbGVhbgkqZHVtOworeworICAgIGd1aV9mb2N1c19jaGFuZ2UoZXZlbnQtPnR5cGUgPT0gRm9jdXNJbik7Cit9CisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK2d1aV94MTFfZW50ZXJfY2IodywgZGF0YSwgZXZlbnQsIGR1bSkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJZGF0YTsKKyAgICBYRXZlbnQJKmV2ZW50OworICAgIEJvb2xlYW4JKmR1bTsKK3sKKyAgICBndWlfZm9jdXNfY2hhbmdlKFRSVUUpOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitndWlfeDExX2xlYXZlX2NiKHcsIGRhdGEsIGV2ZW50LCBkdW0pCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCWRhdGE7CisgICAgWEV2ZW50CSpldmVudDsKKyAgICBCb29sZWFuCSpkdW07Cit7CisgICAgZ3VpX2ZvY3VzX2NoYW5nZShGQUxTRSk7Cit9CisKKyNpZiBkZWZpbmVkKFhfSEFWRV9VVEY4X1NUUklORykgJiYgZGVmaW5lZChGRUFUX01CWVRFKQorIyBpZiBYX0hBVkVfVVRGOF9TVFJJTkcKKyMgIGRlZmluZSBVU0VfVVRGOExPT0tVUAorIyBlbmRpZgorI2VuZGlmCisKKy8qIEFSR1NVU0VEICovCisgICAgdm9pZAorZ3VpX3gxMV9rZXlfaGl0X2NiKHcsIGR1ZCwgZXZlbnQsIGR1bSkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJZHVkOworICAgIFhFdmVudAkqZXZlbnQ7CisgICAgQm9vbGVhbgkqZHVtOworeworICAgIFhLZXlQcmVzc2VkRXZlbnQJKmV2X3ByZXNzOworI2lmZGVmIEZFQVRfWElNCisgICAgY2hhcl91CQlzdHJpbmcyWzI1Nl07CisgICAgY2hhcl91CQlzdHJpbmdfc2hvcnRidWZbMjU2XTsKKyAgICBjaGFyX3UJCSpzdHJpbmcgPSBzdHJpbmdfc2hvcnRidWY7CisgICAgQm9vbGVhbgkJc3RyaW5nX2FsbG9jZWQgPSBGYWxzZTsKKyAgICBTdGF0dXMJCXN0YXR1czsKKyNlbHNlCisgICAgY2hhcl91CQlzdHJpbmdbNF0sIHN0cmluZzJbM107CisjZW5kaWYKKyAgICBLZXlTeW0JCWtleV9zeW0sIGtleV9zeW0yOworICAgIGludAkJCWxlbiwgbGVuMjsKKyAgICBpbnQJCQlpOworICAgIGludAkJCW1vZGlmaWVyczsKKyAgICBpbnQJCQlrZXk7CisKKyAgICBldl9wcmVzcyA9IChYS2V5UHJlc3NlZEV2ZW50ICopZXZlbnQ7CisKKyNpZmRlZiBGRUFUX1hJTQorICAgIGlmICh4aWMpCisgICAgeworIyBpZmRlZiBVU0VfVVRGOExPT0tVUAorCS8qIFhGcmVlODYgNC4wLjIgb3IgbmV3ZXI6IEJlIGFibGUgdG8gZ2V0IFVURi04IGNoYXJhY3RlcnMgZXZlbiB3aGVuCisJICogdGhlIGxvY2FsZSBpc24ndCB1dGYtOC4gKi8KKwlpZiAoZW5jX3V0ZjgpCisJICAgIGxlbiA9IFh1dGY4TG9va3VwU3RyaW5nKHhpYywgZXZfcHJlc3MsIChjaGFyICopc3RyaW5nLAorCQkJCSAgc2l6ZW9mKHN0cmluZ19zaG9ydGJ1ZiksICZrZXlfc3ltLCAmc3RhdHVzKTsKKwllbHNlCisjIGVuZGlmCisJICAgIGxlbiA9IFhtYkxvb2t1cFN0cmluZyh4aWMsIGV2X3ByZXNzLCAoY2hhciAqKXN0cmluZywKKwkJCQkgIHNpemVvZihzdHJpbmdfc2hvcnRidWYpLCAma2V5X3N5bSwgJnN0YXR1cyk7CisJaWYgKHN0YXR1cyA9PSBYQnVmZmVyT3ZlcmZsb3cpCisJeworCSAgICBzdHJpbmcgPSAoY2hhcl91ICopWHRNYWxsb2MobGVuICsgMSk7CisJICAgIHN0cmluZ19hbGxvY2VkID0gVHJ1ZTsKKyMgaWZkZWYgVVNFX1VURjhMT09LVVAKKwkgICAgLyogWEZyZWU4NiA0LjAuMiBvciBuZXdlcjogQmUgYWJsZSB0byBnZXQgVVRGLTggY2hhcmFjdGVycyBldmVuCisJICAgICAqIHdoZW4gdGhlIGxvY2FsZSBpc24ndCB1dGYtOC4gICovCisJICAgIGlmIChlbmNfdXRmOCkKKwkJbGVuID0gWHV0ZjhMb29rdXBTdHJpbmcoeGljLCBldl9wcmVzcywgKGNoYXIgKilzdHJpbmcsCisJCQkJCQkgICAgICBsZW4sICZrZXlfc3ltLCAmc3RhdHVzKTsKKwkgICAgZWxzZQorIyBlbmRpZgorCQlsZW4gPSBYbWJMb29rdXBTdHJpbmcoeGljLCBldl9wcmVzcywgKGNoYXIgKilzdHJpbmcsCisJCQkJCQkgICAgICBsZW4sICZrZXlfc3ltLCAmc3RhdHVzKTsKKwl9CisJaWYgKHN0YXR1cyA9PSBYTG9va3VwTm9uZSB8fCBzdGF0dXMgPT0gWExvb2t1cENoYXJzKQorCSAgICBrZXlfc3ltID0gWEtfVm9pZFN5bWJvbDsKKworIyBpZmRlZiBGRUFUX01CWVRFCisJLyogRG8gY29udmVyc2lvbiBmcm9tICd0ZXJtZW5jb2RpbmcnIHRvICdlbmNvZGluZycuICBXaGVuIHVzaW5nCisJICogWHV0ZjhMb29rdXBTdHJpbmcoKSBpdCBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuICovCisJaWYgKGxlbiA+IDAgJiYgaW5wdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORQorIyAgaWZkZWYgVVNFX1VURjhMT09LVVAKKwkJJiYgIWVuY191dGY4CisjICBlbmRpZgorCQkpCisJeworCSAgICBpbnQJCW1heGxlbiA9IGxlbiAqIDQgKyA0MDsgIC8qIGd1ZXNzZWQgKi8KKwkgICAgY2hhcl91CSpwID0gKGNoYXJfdSAqKVh0TWFsbG9jKG1heGxlbik7CisKKwkgICAgbWNoX21lbW1vdmUocCwgc3RyaW5nLCBsZW4pOworCSAgICBpZiAoc3RyaW5nX2FsbG9jZWQpCisJCVh0RnJlZSgoY2hhciAqKXN0cmluZyk7CisJICAgIHN0cmluZyA9IHA7CisJICAgIHN0cmluZ19hbGxvY2VkID0gVHJ1ZTsKKwkgICAgbGVuID0gY29udmVydF9pbnB1dChwLCBsZW4sIG1heGxlbik7CisJfQorIyBlbmRpZgorCisJLyogVHJhbnNsYXRlIENTSSB0byBLX0NTSSwgb3RoZXJ3aXNlIGl0IGNvdWxkIGJlIHJlY29nbml6ZWQgYXMgdGhlCisJICogc3RhcnQgb2YgYSBzcGVjaWFsIGtleS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisJICAgIGlmIChzdHJpbmdbaV0gPT0gQ1NJKQorCSAgICB7CisJCWNoYXJfdQkqcCA9IChjaGFyX3UgKilYdE1hbGxvYyhsZW4gKyAzKTsKKworCQltY2hfbWVtbW92ZShwLCBzdHJpbmcsIGkgKyAxKTsKKwkJcFtpICsgMV0gPSBLU19FWFRSQTsKKwkJcFtpICsgMl0gPSAoaW50KUtFX0NTSTsKKwkJbWNoX21lbW1vdmUocCArIGkgKyAzLCBzdHJpbmcgKyBpICsgMSwgbGVuIC0gaSk7CisJCWlmIChzdHJpbmdfYWxsb2NlZCkKKwkJICAgIFh0RnJlZSgoY2hhciAqKXN0cmluZyk7CisJCXN0cmluZyA9IHA7CisJCXN0cmluZ19hbGxvY2VkID0gVHJ1ZTsKKwkJaSArPSAyOworCQlsZW4gKz0gMjsKKwkgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwlsZW4gPSBYTG9va3VwU3RyaW5nKGV2X3ByZXNzLCAoY2hhciAqKXN0cmluZywgc2l6ZW9mKHN0cmluZyksCisJCSZrZXlfc3ltLCBOVUxMKTsKKworI2lmZGVmIFN1blhLX0YzNgorICAgIC8qCisgICAgKiBUaGVzZSBrZXlzIGhhdmUgYm9ndXMgbG9va3VwIHN0cmluZ3MsIGFuZCB0cmFwcGluZyB0aGVtIGhlcmUgaXMKKyAgICAqIGVhc2llciB0aGFuIHRyeWluZyB0byBYUmViaW5kS2V5c3ltKCkgb24gdGhlbSB3aXRoIGV2ZXJ5IHBvc3NpYmxlCisgICAgKiBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnMuCisgICAgKi8KKyAgICBpZiAoa2V5X3N5bSA9PSBTdW5YS19GMzYgfHwga2V5X3N5bSA9PSBTdW5YS19GMzcpCisJbGVuID0gMDsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9IQU5HVUxJTgorICAgIGlmICgoa2V5X3N5bSA9PSBYS19zcGFjZSkgJiYgKGV2X3ByZXNzLT5zdGF0ZSAmIFNoaWZ0TWFzaykpCisgICAgeworCWhhbmd1bF9pbnB1dF9zdGF0ZV90b2dnbGUoKTsKKwlnb3RvIHRoZWVuZDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChrZXlfc3ltID09IFhLX3NwYWNlKQorCXN0cmluZ1swXSA9ICcgJzsJLyogT3RoZXJ3aXNlIEN0cmwtU3BhY2UgZG9lc24ndCB3b3JrICovCisKKyAgICAvKgorICAgICAqIE9ubHkgb24gc29tZSBtYWNoaW5lcyBeXyByZXF1aXJlcyBDdHJsK1NoaWZ0K21pbnVzLiAgRm9yIGNvbnNpc3RlbmN5LAorICAgICAqIGFsbG93IGp1c3QgQ3RybCttaW51cyB0b28uCisgICAgICovCisgICAgaWYgKGtleV9zeW0gPT0gWEtfbWludXMgJiYgKGV2X3ByZXNzLT5zdGF0ZSAmIENvbnRyb2xNYXNrKSkKKwlzdHJpbmdbMF0gPSBDdHJsX187CisKKyNpZmRlZiBYS19JU09fTGVmdF9UYWIKKyAgICAvKiB3aHkgZG8gd2UgZ2V0IFhLX0lTT19MZWZ0X1RhYiBpbnN0ZWFkIG9mIFhLX1RhYiBmb3Igc2hpZnQtdGFiPyAqLworICAgIGlmIChrZXlfc3ltID09IFhLX0lTT19MZWZ0X1RhYikKKyAgICB7CisJa2V5X3N5bSA9IFhLX1RhYjsKKwlzdHJpbmdbMF0gPSBUQUI7CisJbGVuID0gMTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIENoZWNrIGZvciBBbHQvTWV0YSBrZXkgKE1vZDFNYXNrKSwgYnV0IG5vdCBmb3IgYSBCUywgREVMIG9yIGNoYXJhY3RlcgorICAgICAqIHRoYXQgYWxyZWFkeSBoYXMgdGhlIDh0aCBiaXQgc2V0LiAgQW5kIG5vdCB3aGVuIHVzaW5nIGEgZG91YmxlLWJ5dGUKKyAgICAgKiBlbmNvZGluZywgc2V0dGluZyB0aGUgOHRoIGJpdCBtYXkgbWFrZSBpdCB0aGUgbGVhZCBieXRlIG9mIGEKKyAgICAgKiBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIuICovCisgICAgaWYgKGxlbiA9PSAxCisJICAgICYmIChldl9wcmVzcy0+c3RhdGUgJiBNb2QxTWFzaykKKwkgICAgJiYgIShrZXlfc3ltID09IFhLX0JhY2tTcGFjZSB8fCBrZXlfc3ltID09IFhLX0RlbGV0ZSkKKwkgICAgJiYgKHN0cmluZ1swXSAmIDB4ODApID09IDAKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgICYmICFlbmNfZGJjcworI2VuZGlmCisJICAgICkKKyAgICB7CisjaWYgZGVmaW5lZChGRUFUX01FTlUpICYmIGRlZmluZWQoRkVBVF9HVUlfTU9USUYpCisJLyogSWdub3JlIEFMVCBrZXlzIHdoZW4gdGhleSBhcmUgdXNlZCBmb3IgdGhlIG1lbnUgb25seSAqLworCWlmIChndWkubWVudV9pc19hY3RpdmUKKwkJJiYgKHBfd2FrWzBdID09ICd5JworCQkgICAgfHwgKHBfd2FrWzBdID09ICdtJyAmJiBndWlfaXNfbWVudV9zaG9ydGN1dChzdHJpbmdbMF0pKSkpCisJICAgIGdvdG8gdGhlZW5kOworI2VuZGlmCisJLyoKKwkgKiBCZWZvcmUgd2Ugc2V0IHRoZSA4dGggYml0LCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHVzZXIgZG9lc24ndAorCSAqIGFscmVhZHkgaGF2ZSBhIG1hcHBpbmcgZGVmaW5lZCBmb3IgdGhpcyBzZXF1ZW5jZS4gV2UgZGV0ZXJtaW5lIHRoaXMKKwkgKiBieSBjaGVja2luZyB0byBzZWUgaWYgdGhlIGlucHV0IHdvdWxkIGJlIHRoZSBzYW1lIHdpdGhvdXQgdGhlCisJICogQWx0L01ldGEga2V5LgorCSAqIERvbid0IGRvIHRoaXMgZm9yIDxTLU0tVGFiPiwgdGhhdCBzaG91bGQgYmVjb21lIEtfU19UQUIgd2l0aCBBTFQuCisJICovCisJZXZfcHJlc3MtPnN0YXRlICY9IH5Nb2QxTWFzazsKKwlsZW4yID0gWExvb2t1cFN0cmluZyhldl9wcmVzcywgKGNoYXIgKilzdHJpbmcyLCBzaXplb2Yoc3RyaW5nMiksCisJCQkJCQkJICAgICAma2V5X3N5bTIsIE5VTEwpOworCWlmIChrZXlfc3ltMiA9PSBYS19zcGFjZSkKKwkgICAgc3RyaW5nMlswXSA9ICcgJzsJICAgIC8qIE90aGVyd2lzZSBNZXRhLUN0cmwtU3BhY2UgZG9lc24ndCB3b3JrICovCisJaWYgKAkgICBsZW4yID09IDEKKwkJJiYgc3RyaW5nWzBdID09IHN0cmluZzJbMF0KKwkJJiYgIShrZXlfc3ltID09IFhLX1RhYiAmJiAoZXZfcHJlc3MtPnN0YXRlICYgU2hpZnRNYXNrKSkpCisJeworCSAgICBzdHJpbmdbMF0gfD0gMHg4MDsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChlbmNfdXRmOCkgLyogY29udmVydCB0byB1dGYtOCAqLworCSAgICB7CisJCXN0cmluZ1sxXSA9IHN0cmluZ1swXSAmIDB4YmY7CisJCXN0cmluZ1swXSA9ICgodW5zaWduZWQpc3RyaW5nWzBdID4+IDYpICsgMHhjMDsKKwkJaWYgKHN0cmluZ1sxXSA9PSBDU0kpCisJCXsKKwkJICAgIHN0cmluZ1syXSA9IEtTX0VYVFJBOworCQkgICAgc3RyaW5nWzNdID0gKGludClLRV9DU0k7CisJCSAgICBsZW4gPSA0OworCQl9CisJCWVsc2UKKwkJICAgIGxlbiA9IDI7CisJICAgIH0KKyNlbmRpZgorCX0KKwllbHNlCisJICAgIGV2X3ByZXNzLT5zdGF0ZSB8PSBNb2QxTWFzazsKKyAgICB9CisKKyAgICBpZiAobGVuID09IDEgJiYgc3RyaW5nWzBdID09IENTSSkKKyAgICB7CisJc3RyaW5nWzFdID0gS1NfRVhUUkE7CisJc3RyaW5nWzJdID0gKGludClLRV9DU0k7CisJbGVuID0gLTM7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIHNwZWNpYWwga2V5cy4gIEFsc28gZG8gdGhpcyB3aGVuIGxlbiA9PSAxIChrZXkgaGFzIGFuIEFTQ0lJCisgICAgICogdmFsdWUpIHRvIGRldGVjdCBiYWNrc3BhY2UsIGRlbGV0ZSBhbmQga2V5cGFkIGtleXMuICovCisgICAgaWYgKGxlbiA9PSAwIHx8IGxlbiA9PSAxKQorICAgIHsKKwlmb3IgKGkgPSAwOyBzcGVjaWFsX2tleXNbaV0ua2V5X3N5bSAhPSAoS2V5U3ltKTA7IGkrKykKKwl7CisJICAgIGlmIChzcGVjaWFsX2tleXNbaV0ua2V5X3N5bSA9PSBrZXlfc3ltKQorCSAgICB7CisJCXN0cmluZ1swXSA9IENTSTsKKwkJc3RyaW5nWzFdID0gc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMDsKKwkJc3RyaW5nWzJdID0gc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMTsKKwkJbGVuID0gLTM7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qIFVucmVjb2duaXNlZCBrZXkgaXMgaWdub3JlZC4gKi8KKyAgICBpZiAobGVuID09IDApCisJZ290byB0aGVlbmQ7CisKKyAgICAvKiBTcGVjaWFsIGtleXMgKGFuZCBhIGZldyBvdGhlcnMpIG1heSBoYXZlIG1vZGlmaWVycy4gIEFsc28gd2hlbiB1c2luZyBhCisgICAgICogZG91YmxlLWJ5dGUgZW5jb2RpbmcgKGNhbid0IHNldCB0aGUgOHRoIGJpdCkuICovCisgICAgaWYgKGxlbiA9PSAtMyB8fCBrZXlfc3ltID09IFhLX3NwYWNlIHx8IGtleV9zeW0gPT0gWEtfVGFiCisJICAgIHx8IGtleV9zeW0gPT0gWEtfUmV0dXJuIHx8IGtleV9zeW0gPT0gWEtfTGluZWZlZWQKKwkgICAgfHwga2V5X3N5bSA9PSBYS19Fc2NhcGUKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIHx8IChlbmNfZGJjcyAmJiBsZW4gPT0gMSAmJiAoZXZfcHJlc3MtPnN0YXRlICYgTW9kMU1hc2spKQorI2VuZGlmCisgICAgICAgKQorICAgIHsKKwltb2RpZmllcnMgPSAwOworCWlmIChldl9wcmVzcy0+c3RhdGUgJiBTaGlmdE1hc2spCisJICAgIG1vZGlmaWVycyB8PSBNT0RfTUFTS19TSElGVDsKKwlpZiAoZXZfcHJlc3MtPnN0YXRlICYgQ29udHJvbE1hc2spCisJICAgIG1vZGlmaWVycyB8PSBNT0RfTUFTS19DVFJMOworCWlmIChldl9wcmVzcy0+c3RhdGUgJiBNb2QxTWFzaykKKwkgICAgbW9kaWZpZXJzIHw9IE1PRF9NQVNLX0FMVDsKKworCS8qCisJICogRm9yIHNvbWUga2V5cyBhIHNoaWZ0IG1vZGlmaWVyIGlzIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGtleQorCSAqIGNvZGUuCisJICovCisJaWYgKGxlbiA9PSAtMykKKwkgICAga2V5ID0gVE9fU1BFQ0lBTChzdHJpbmdbMV0sIHN0cmluZ1syXSk7CisJZWxzZQorCSAgICBrZXkgPSBzdHJpbmdbMF07CisJa2V5ID0gc2ltcGxpZnlfa2V5KGtleSwgJm1vZGlmaWVycyk7CisJaWYgKGtleSA9PSBDU0kpCisJICAgIGtleSA9IEtfQ1NJOworCWlmIChJU19TUEVDSUFMKGtleSkpCisJeworCSAgICBzdHJpbmdbMF0gPSBDU0k7CisJICAgIHN0cmluZ1sxXSA9IEtfU0VDT05EKGtleSk7CisJICAgIHN0cmluZ1syXSA9IEtfVEhJUkQoa2V5KTsKKwkgICAgbGVuID0gMzsKKwl9CisJZWxzZQorCXsKKwkgICAgc3RyaW5nWzBdID0ga2V5OworCSAgICBsZW4gPSAxOworCX0KKworCWlmIChtb2RpZmllcnMgIT0gMCkKKwl7CisJICAgIHN0cmluZzJbMF0gPSBDU0k7CisJICAgIHN0cmluZzJbMV0gPSBLU19NT0RJRklFUjsKKwkgICAgc3RyaW5nMlsyXSA9IG1vZGlmaWVyczsKKwkgICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcyLCAzKTsKKwl9CisgICAgfQorCisgICAgaWYgKGxlbiA9PSAxICYmICgoc3RyaW5nWzBdID09IEN0cmxfQyAmJiBjdHJsX2NfaW50ZXJydXB0cykKKyNpZmRlZiBVTklYCisJICAgIHx8IChpbnRyX2NoYXIgIT0gMCAmJiBzdHJpbmdbMF0gPT0gaW50cl9jaGFyKQorI2VuZGlmCisJICAgICkpCisgICAgeworCXRyYXNoX2lucHV0X2J1ZigpOworCWdvdF9pbnQgPSBUUlVFOworICAgIH0KKworICAgIGFkZF90b19pbnB1dF9idWYoc3RyaW5nLCBsZW4pOworCisgICAgLyoKKyAgICAgKiBibGFuayBvdXQgdGhlIHBvaW50ZXIgaWYgbmVjZXNzYXJ5CisgICAgICovCisgICAgaWYgKHBfbWgpCisJZ3VpX21jaF9tb3VzZWhpZGUoVFJVRSk7CisKKyNpZiBkZWZpbmVkKEZFQVRfQkVWQUxfVElQKQorICAgIHsKKwlCYWxsb29uRXZhbCAqYmU7CisKKwlpZiAoKGJlID0gZ3VpX21jaF9jdXJyZW50bHlfc2hvd2luZ19iZXZhbCgpKSAhPSBOVUxMKQorCSAgICBndWlfbWNoX3VucG9zdF9iYWxsb29uKGJlKTsKKyAgICB9CisjZW5kaWYKK3RoZWVuZDoKKyAgICB7fQkgICAgLyogc29tZSBjb21waWxlcnMgbmVlZCBhIHN0YXRlbWVudCBoZXJlICovCisjaWZkZWYgRkVBVF9YSU0KKyAgICBpZiAoc3RyaW5nX2FsbG9jZWQpCisJWHRGcmVlKChjaGFyICopc3RyaW5nKTsKKyNlbmRpZgorfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitndWlfeDExX21vdXNlX2NiKHcsIGR1ZCwgZXZlbnQsIGR1bSkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJZHVkOworICAgIFhFdmVudAkqZXZlbnQ7CisgICAgQm9vbGVhbgkqZHVtOworeworICAgIHN0YXRpYyBYdEludGVydmFsSWQgdGltZXIgPSAoWHRJbnRlcnZhbElkKTA7CisgICAgc3RhdGljIGludAl0aW1lZF9vdXQgPSBUUlVFOworCisgICAgaW50CQlidXR0b247CisgICAgaW50CQlyZXBlYXRlZF9jbGljayA9IEZBTFNFOworICAgIGludAkJeCwgeTsKKyAgICBpbnRfdQl4X21vZGlmaWVyczsKKyAgICBpbnRfdQl2aW1fbW9kaWZpZXJzOworCisgICAgaWYgKGV2ZW50LT50eXBlID09IE1vdGlvbk5vdGlmeSkKKyAgICB7CisJLyogR2V0IHRoZSBsYXRlc3QgcG9zaXRpb24sIGF2b2lkcyBsYWdnaW5nIGJlaGluZCBvbiBhIGRyYWcuICovCisJeCA9IGV2ZW50LT54bW90aW9uLng7CisJeSA9IGV2ZW50LT54bW90aW9uLnk7CisJeF9tb2RpZmllcnMgPSBldmVudC0+eG1vdGlvbi5zdGF0ZTsKKwlidXR0b24gPSAoeF9tb2RpZmllcnMgJiAoQnV0dG9uMU1hc2sgfCBCdXR0b24yTWFzayB8IEJ1dHRvbjNNYXNrKSkKKwkJPyBNT1VTRV9EUkFHIDogJyAnOworCisJLyoKKwkgKiBpZiBvdXIgcG9pbnRlciBpcyBjdXJyZW50bHkgaGlkZGVuLCB0aGVuIHdlIHNob3VsZCBzaG93IGl0LgorCSAqLworCWd1aV9tY2hfbW91c2VoaWRlKEZBTFNFKTsKKworCWlmIChidXR0b24gIT0gTU9VU0VfRFJBRykJLyoganVzdCBtb3ZpbmcgdGhlIHJvZGVudCAqLworCXsKKyNpZmRlZiBGRUFUX01FTlUKKwkgICAgaWYgKGR1ZCkJCQkvKiBtb3ZlZCBpbiB2aW1Gb3JtICovCisJCXkgLT0gZ3VpLm1lbnVfaGVpZ2h0OworI2VuZGlmCisJICAgIGd1aV9tb3VzZV9tb3ZlZCh4LCB5KTsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwl4ID0gZXZlbnQtPnhidXR0b24ueDsKKwl5ID0gZXZlbnQtPnhidXR0b24ueTsKKwlpZiAoZXZlbnQtPnR5cGUgPT0gQnV0dG9uUHJlc3MpCisJeworCSAgICAvKiBIYW5kbGUgbXVsdGlwbGUgY2xpY2tzICovCisJICAgIGlmICghdGltZWRfb3V0KQorCSAgICB7CisJCVh0UmVtb3ZlVGltZU91dCh0aW1lcik7CisJCXJlcGVhdGVkX2NsaWNrID0gVFJVRTsKKwkgICAgfQorCSAgICB0aW1lZF9vdXQgPSBGQUxTRTsKKwkgICAgdGltZXIgPSBYdEFwcEFkZFRpbWVPdXQoYXBwX2NvbnRleHQsIChsb25nX3UpcF9tb3VzZXQsCisJCQlndWlfeDExX3RpbWVyX2NiLCAmdGltZWRfb3V0KTsKKwkgICAgc3dpdGNoIChldmVudC0+eGJ1dHRvbi5idXR0b24pCisJICAgIHsKKwkJY2FzZSBCdXR0b24xOglidXR0b24gPSBNT1VTRV9MRUZUOwlicmVhazsKKwkJY2FzZSBCdXR0b24yOglidXR0b24gPSBNT1VTRV9NSURETEU7CWJyZWFrOworCQljYXNlIEJ1dHRvbjM6CWJ1dHRvbiA9IE1PVVNFX1JJR0hUOwlicmVhazsKKwkJY2FzZSBCdXR0b240OglidXR0b24gPSBNT1VTRV80OwlicmVhazsKKwkJY2FzZSBCdXR0b241OglidXR0b24gPSBNT1VTRV81OwlicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIHJldHVybjsJLyogVW5rbm93biBidXR0b24gKi8KKwkgICAgfQorCX0KKwllbHNlIGlmIChldmVudC0+dHlwZSA9PSBCdXR0b25SZWxlYXNlKQorCSAgICBidXR0b24gPSBNT1VTRV9SRUxFQVNFOworCWVsc2UKKwkgICAgcmV0dXJuOwkvKiBVbmtub3duIG1vdXNlIGV2ZW50IHR5cGUgKi8KKworCXhfbW9kaWZpZXJzID0gZXZlbnQtPnhidXR0b24uc3RhdGU7CisjaWYgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgJiYgZGVmaW5lZChGRUFUX01FTlUpCisJbGFzdF9tb3VzZV9ldmVudCA9IGV2ZW50LT54YnV0dG9uOworI2VuZGlmCisgICAgfQorCisgICAgdmltX21vZGlmaWVycyA9IDB4MDsKKyAgICBpZiAoeF9tb2RpZmllcnMgJiBTaGlmdE1hc2spCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9TSElGVDsKKyAgICBpZiAoeF9tb2RpZmllcnMgJiBDb250cm9sTWFzaykKKwl2aW1fbW9kaWZpZXJzIHw9IE1PVVNFX0NUUkw7CisgICAgaWYgKHhfbW9kaWZpZXJzICYgTW9kMU1hc2spCSAgICAvKiBBbHQgb3IgTWV0YSBrZXkgKi8KKwl2aW1fbW9kaWZpZXJzIHw9IE1PVVNFX0FMVDsKKworICAgIGd1aV9zZW5kX21vdXNlX2V2ZW50KGJ1dHRvbiwgeCwgeSwgcmVwZWF0ZWRfY2xpY2ssIHZpbV9tb2RpZmllcnMpOworfQorCisjaWZkZWYgRkVBVF9TTklGRgorLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX3gxMV9zbmlmZl9yZXF1ZXN0X2NiKGNsb3N1cmUsIHNvdXJjZSwgaWQpCisgICAgWHRQb2ludGVyCWNsb3N1cmU7CisgICAgaW50CQkqc291cmNlOworICAgIFh0SW5wdXRJZAkqaWQ7Cit7CisgICAgc3RhdGljIGNoYXJfdSBieXRlc1szXSA9IHtDU0ksIChpbnQpS1NfRVhUUkEsIChpbnQpS0VfU05JRkZ9OworCisgICAgYWRkX3RvX2lucHV0X2J1ZihieXRlcywgMyk7Cit9CisjZW5kaWYKKworLyoKKyAqIEVuZCBvZiBjYWxsLWJhY2sgcm91dGluZXMKKyAqLworCisvKgorICogUGFyc2UgdGhlIEdVSSByZWxhdGVkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuICBBbnkgYXJndW1lbnRzIHVzZWQgYXJlCisgKiBkZWxldGVkIGZyb20gYXJndiwgYW5kICphcmdjIGlzIGRlY3JlbWVudGVkIGFjY29yZGluZ2x5LiAgVGhpcyBpcyBjYWxsZWQKKyAqIHdoZW4gdmltIGlzIHN0YXJ0ZWQsIHdoZXRoZXIgb3Igbm90IHRoZSBHVUkgaGFzIGJlZW4gc3RhcnRlZC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfcHJlcGFyZShhcmdjLCBhcmd2KQorICAgIGludAkgICAgKmFyZ2M7CisgICAgY2hhciAgICAqKmFyZ3Y7Cit7CisgICAgaW50CSAgICBhcmc7CisgICAgaW50CSAgICBpOworCisgICAgLyoKKyAgICAgKiBNb3ZlIGFsbCB0aGUgZW50cmllcyBpbiBhcmd2IHdoaWNoIGFyZSByZWxldmFudCB0byBYIGludG8gZ3VpX2FyZ3YuCisgICAgICovCisgICAgZ3VpX2FyZ2MgPSAwOworICAgIGd1aV9hcmd2ID0gKGNoYXIgKiopbGFsbG9jKChsb25nX3UpKCphcmdjICogc2l6ZW9mKGNoYXIgKikpLCBGQUxTRSk7CisgICAgaWYgKGd1aV9hcmd2ID09IE5VTEwpCisJcmV0dXJuOworICAgIGd1aV9hcmd2W2d1aV9hcmdjKytdID0gYXJndlswXTsKKyAgICBhcmcgPSAxOworICAgIHdoaWxlIChhcmcgPCAqYXJnYykKKyAgICB7CisJLyogTG9vayBmb3IgYXJndlthcmddIGluIGNtZGxpbmVfb3B0aW9uc1tdIHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IFh0TnVtYmVyKGNtZGxpbmVfb3B0aW9ucyk7IGkrKykKKwkgICAgaWYgKHN0cmNtcChhcmd2W2FyZ10sIGNtZGxpbmVfb3B0aW9uc1tpXS5vcHRpb24pID09IDApCisJCWJyZWFrOworCisJaWYgKGkgPCBYdE51bWJlcihjbWRsaW5lX29wdGlvbnMpKQorCXsKKwkgICAgLyogUmVtZW1iZXIgZmluZGluZyAiLXJ2IiBvciAiLXJldmVyc2UiICovCisJICAgIGlmIChzdHJjbXAoIi1ydiIsIGFyZ3ZbYXJnXSkgPT0gMAorCQkgICAgfHwgc3RyY21wKCItcmV2ZXJzZSIsIGFyZ3ZbYXJnXSkgPT0gMCkKKwkJZm91bmRfcmV2ZXJzZV9hcmcgPSBUUlVFOworCSAgICBlbHNlIGlmICgoc3RyY21wKCItZm4iLCBhcmd2W2FyZ10pID09IDAKKwkJCXx8IHN0cmNtcCgiLWZvbnQiLCBhcmd2W2FyZ10pID09IDApCisJCSAgICAmJiBhcmcgKyAxIDwgKmFyZ2MpCisJCWZvbnRfYXJndW1lbnQgPSBhcmd2W2FyZyArIDFdOworCisJICAgIC8qIEZvdW5kIG1hdGNoIGluIHRhYmxlLCBzbyBtb3ZlIGl0IGludG8gZ3VpX2FyZ3YgKi8KKwkgICAgZ3VpX2FyZ3ZbZ3VpX2FyZ2MrK10gPSBhcmd2W2FyZ107CisJICAgIGlmICgtLSphcmdjID4gYXJnKQorCSAgICB7CisJCW1jaF9tZW1tb3ZlKCZhcmd2W2FyZ10sICZhcmd2W2FyZyArIDFdLCAoKmFyZ2MgLSBhcmcpCisJCQkJCQkgICAgKiBzaXplb2YoY2hhciAqKSk7CisJCWlmIChjbWRsaW5lX29wdGlvbnNbaV0uYXJnS2luZCAhPSBYcm1vcHRpb25Ob0FyZykKKwkJeworCQkgICAgLyogTW92ZSB0aGUgb3B0aW9ucyBhcmd1bWVudCBhcyB3ZWxsICovCisJCSAgICBndWlfYXJndltndWlfYXJnYysrXSA9IGFyZ3ZbYXJnXTsKKwkJICAgIGlmICgtLSphcmdjID4gYXJnKQorCQkJbWNoX21lbW1vdmUoJmFyZ3ZbYXJnXSwgJmFyZ3ZbYXJnICsgMV0sICgqYXJnYyAtIGFyZykKKwkJCQkJCQkgICAgKiBzaXplb2YoY2hhciAqKSk7CisJCX0KKwkgICAgfQorCSAgICBhcmd2WyphcmdjXSA9IE5VTEw7CisJfQorCWVsc2UKKyNpZmRlZiBGRUFUX1NVTl9XT1JLU0hPUAorCSAgICBpZiAoc3RyY21wKCItd3MiLCBhcmd2W2FyZ10pID09IDApCisJeworCSAgICB1c2luZ1N1bldvcmtTaG9wKys7CisJICAgIHBfYWNkID0gVFJVRTsKKwkgICAgZ3VpLmRvZm9yayA9IEZBTFNFOwkvKiBkb24ndCBmb3JrKCkgd2hlbiBzdGFydGluZyBHVUkgKi8KKwkgICAgbWNoX21lbW1vdmUoJmFyZ3ZbYXJnXSwgJmFyZ3ZbYXJnICsgMV0sCisJCQkJCSAgICAoLS0qYXJnYyAtIGFyZykgKiBzaXplb2YoY2hhciAqKSk7CisJICAgIGFyZ3ZbKmFyZ2NdID0gTlVMTDsKKyMgaWZkZWYgV1NERUJVRworCSAgICB3c2RlYnVnX3dhaXQoV1RfRU5WIHwgV1RfV0FJVCB8IFdUX1NUT1AsICJTUFJPX0dWSU1fV0FJVCIsIDIwKTsKKwkgICAgd3NkZWJ1Z19sb2dfaW5pdCgiU1BST19HVklNX0RFQlVHIiwgIlNQUk9fR1ZJTV9ETEVWRUwiKTsKKyMgZW5kaWYKKwl9CisJZWxzZQorI2VuZGlmCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJICAgIGlmIChzdHJuY21wKCItbmIiLCBhcmd2W2FyZ10sIDMpID09IDApCisJeworCSAgICB1c2luZ05ldGJlYW5zKys7CisJICAgIGd1aS5kb2ZvcmsgPSBGQUxTRTsJLyogZG9uJ3QgZm9yaygpIHdoZW4gc3RhcnRpbmcgR1VJICovCisJICAgIG5ldGJlYW5zQXJnID0gYXJndlthcmddOworCSAgICBtY2hfbWVtbW92ZSgmYXJndlthcmddLCAmYXJndlthcmcgKyAxXSwKKwkJCQkJICAgICgtLSphcmdjIC0gYXJnKSAqIHNpemVvZihjaGFyICopKTsKKwkgICAgYXJndlsqYXJnY10gPSBOVUxMOworCX0KKwllbHNlCisjZW5kaWYKKwkgICAgYXJnKys7CisgICAgfQorfQorCisjaWZuZGVmIFh0U3BlY2lmaWNhdGlvblJlbGVhc2UKKyMgZGVmaW5lIENBUkRJTkFMIChDYXJkaW5hbCAqKQorI2Vsc2UKKyMgaWYgWHRTcGVjaWZpY2F0aW9uUmVsZWFzZSA9PSA0CisjIGRlZmluZSBDQVJESU5BTCAoQ2FyZGluYWwgKikKKyMgZWxzZQorIyBkZWZpbmUgQ0FSRElOQUwgKGludCAqKQorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBDaGVjayBpZiB0aGUgR1VJIGNhbiBiZSBzdGFydGVkLiAgQ2FsbGVkIGJlZm9yZSBndmltcmMgaXMgc291cmNlZC4KKyAqIFJldHVybiBPSyBvciBGQUlMLgorICovCisgICAgaW50CitndWlfbWNoX2luaXRfY2hlY2soKQoreworI2lmZGVmIEZFQVRfWElNCisgICAgWHRTZXRMYW5ndWFnZVByb2MoTlVMTCwgTlVMTCwgTlVMTCk7CisjZW5kaWYKKyAgICBvcGVuX2FwcF9jb250ZXh0KCk7CisgICAgaWYgKGFwcF9jb250ZXh0ICE9IE5VTEwpCisJZ3VpLmRweSA9IFh0T3BlbkRpc3BsYXkoYXBwX2NvbnRleHQsIDAsIFZJTV9OQU1FLCBWSU1fQ0xBU1MsCisJICAgIGNtZGxpbmVfb3B0aW9ucywgWHROdW1iZXIoY21kbGluZV9vcHRpb25zKSwKKwkgICAgQ0FSRElOQUwgJmd1aV9hcmdjLCBndWlfYXJndik7CisKKyAgICBpZiAoYXBwX2NvbnRleHQgPT0gTlVMTCB8fCBndWkuZHB5ID09IE5VTEwpCisgICAgeworCWd1aS5keWluZyA9IFRSVUU7CisJRU1TRyhfKGVfb3BlbmRpc3ApKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisKKyNpZmRlZiBVU0VfWFNNUAorLyoKKyAqIEhhbmRsZSBYU01QIHByb2Nlc3NpbmcsIGRlLXJlZ2lzdGVyaW5nIHRoZSBhdHRhY2htZW50IHVwb24gZXJyb3IKKyAqLworc3RhdGljIFh0SW5wdXRJZCBfeHNtcF94dGlucHV0aWQ7CisKK3N0YXRpYyB2b2lkIGxvY2FsX3hzbXBfaGFuZGxlX3JlcXVlc3RzIF9fQVJHUygoWHRQb2ludGVyIGMsIGludCAqcywgWHRJbnB1dElkICppKSk7CisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitsb2NhbF94c21wX2hhbmRsZV9yZXF1ZXN0cyhjLCBzLCBpKQorICAgIFh0UG9pbnRlcgljOworICAgIGludAkJKnM7CisgICAgWHRJbnB1dElkCSppOworeworICAgIGlmICh4c21wX2hhbmRsZV9yZXF1ZXN0cygpID09IEZBSUwpCisJWHRSZW1vdmVJbnB1dChfeHNtcF94dGlucHV0aWQpOworfQorI2VuZGlmCisKKworLyoKKyAqIEluaXRpYWxpc2UgdGhlIFggR1VJLiAgQ3JlYXRlIGFsbCB0aGUgd2luZG93cywgc2V0IHVwIGFsbCB0aGUgY2FsbC1iYWNrcyBldGMuCisgKiBSZXR1cm5zIE9LIGZvciBzdWNjZXNzLCBGQUlMIHdoZW4gdGhlIEdVSSBjYW4ndCBiZSBzdGFydGVkLgorICovCisgICAgaW50CitndWlfbWNoX2luaXQoKQoreworICAgIFh0R0NNYXNrCWdjX21hc2s7CisgICAgWEdDVmFsdWVzCWdjX3ZhbHM7CisgICAgaW50CQl4LCB5LCBtYXNrOworICAgIHVuc2lnbmVkCXcsIGg7CisKKyNpZiAwCisgICAgLyogVW5jb21tZW50IHRoaXMgdG8gZW5hYmxlIHN5bmNocm9ub3VzIG1vZGUgZm9yIGRlYnVnZ2luZyAqLworICAgIFhTeW5jaHJvbml6ZShndWkuZHB5LCBUcnVlKTsKKyNlbmRpZgorCisgICAgdmltU2hlbGwgPSBYdFZhQXBwQ3JlYXRlU2hlbGwoVklNX05BTUUsIFZJTV9DTEFTUywKKwkgICAgYXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzLCBndWkuZHB5LCBOVUxMKTsKKworICAgIC8qCisgICAgICogR2V0IHRoZSBhcHBsaWNhdGlvbiByZXNvdXJjZXMKKyAgICAgKi8KKyAgICBYdFZhR2V0QXBwbGljYXRpb25SZXNvdXJjZXModmltU2hlbGwsIChYdFBvaW50ZXIpJmd1aSwKKwl2aW1fcmVzb3VyY2VzLCBYdE51bWJlcih2aW1fcmVzb3VyY2VzKSwgTlVMTCk7CisKKyAgICBndWkuc2Nyb2xsYmFyX2hlaWdodCA9IGd1aS5zY3JvbGxiYXJfd2lkdGg7CisKKyAgICAvKgorICAgICAqIEdldCB0aGUgY29sb3JzIG91cnNlbHZlcy4gIFVzaW5nIHRoZSBhdXRvbWF0aWMgY29udmVyc2lvbiBkb2Vzbid0CisgICAgICogaGFuZGxlIGxvb2tpbmcgZm9yIGFwcHJveGltYXRlIGNvbG9ycy4KKyAgICAgKi8KKyAgICAvKiBOT1RFOiBUaGVzZSBuZXh0IGZldyBsaW5lcyBhcmUgYW4gZXhhY3QgZHVwbGljYXRlIG9mIGd1aV9hdGhlbmEuYydzCisgICAgICogZ3VpX21jaF9kZWZfY29sb3JzKCkuICBXaHk/CisgICAgICovCisgICAgZ3VpLm1lbnVfZmdfcGl4ZWwgPSBndWlfZ2V0X2NvbG9yKChjaGFyX3UgKilndWkucnNyY19tZW51X2ZnX25hbWUpOworICAgIGd1aS5tZW51X2JnX3BpeGVsID0gZ3VpX2dldF9jb2xvcigoY2hhcl91ICopZ3VpLnJzcmNfbWVudV9iZ19uYW1lKTsKKyAgICBndWkuc2Nyb2xsX2ZnX3BpeGVsID0gZ3VpX2dldF9jb2xvcigoY2hhcl91ICopZ3VpLnJzcmNfc2Nyb2xsX2ZnX25hbWUpOworICAgIGd1aS5zY3JvbGxfYmdfcGl4ZWwgPSBndWlfZ2V0X2NvbG9yKChjaGFyX3UgKilndWkucnNyY19zY3JvbGxfYmdfbmFtZSk7CisjaWZkZWYgRkVBVF9CRVZBTAorICAgIGd1aS50b29sdGlwX2ZnX3BpeGVsID0gZ3VpX2dldF9jb2xvcigoY2hhcl91ICopZ3VpLnJzcmNfdG9vbHRpcF9mZ19uYW1lKTsKKyAgICBndWkudG9vbHRpcF9iZ19waXhlbCA9IGd1aV9nZXRfY29sb3IoKGNoYXJfdSAqKWd1aS5yc3JjX3Rvb2x0aXBfYmdfbmFtZSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkKKyAgICAvKiBJZiB0aGUgbWVudSBoZWlnaHQgd2FzIHNldCwgZG9uJ3QgY2hhbmdlIGl0IGF0IHJ1bnRpbWUgKi8KKyAgICBpZiAoZ3VpLm1lbnVfaGVpZ2h0ICE9IE1FTlVfREVGQVVMVF9IRUlHSFQpCisJZ3VpLm1lbnVfaGVpZ2h0X2ZpeGVkID0gVFJVRTsKKyNlbmRpZgorCisgICAgLyogU2V0IGRlZmF1bHQgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvdXJzICovCisgICAgZ3VpLm5vcm1fcGl4ZWwgPSBndWkuZGVmX25vcm1fcGl4ZWw7CisgICAgZ3VpLmJhY2tfcGl4ZWwgPSBndWkuZGVmX2JhY2tfcGl4ZWw7CisKKyAgICAvKiBDaGVjayBpZiByZXZlcnNlIHZpZGVvIG5lZWRzIHRvIGJlIGFwcGxpZWQgKG9uIFN1biBpdCdzIGRvbmUgYnkgWCkgKi8KKyAgICBpZiAoZ3VpLnJzcmNfcmV2X3ZpZGVvICYmIGd1aV9nZXRfbGlnaHRuZXNzKGd1aS5iYWNrX3BpeGVsKQorCQkJCQkgID4gZ3VpX2dldF9saWdodG5lc3MoZ3VpLm5vcm1fcGl4ZWwpKQorICAgIHsKKwlndWkubm9ybV9waXhlbCA9IGd1aS5kZWZfYmFja19waXhlbDsKKwlndWkuYmFja19waXhlbCA9IGd1aS5kZWZfbm9ybV9waXhlbDsKKwlndWkuZGVmX25vcm1fcGl4ZWwgPSBndWkubm9ybV9waXhlbDsKKwlndWkuZGVmX2JhY2tfcGl4ZWwgPSBndWkuYmFja19waXhlbDsKKyAgICB9CisKKyAgICAvKiBHZXQgdGhlIGNvbG9ycyBmcm9tIHRoZSAiTm9ybWFsIiwgIlRvb2x0aXAiLCAiU2Nyb2xsYmFyIiBhbmQgIk1lbnUiCisgICAgICogZ3JvdXAgKHNldCBpbiBzeW50YXguYyBvciBpbiBhIHZpbXJjIGZpbGUpICovCisgICAgc2V0X25vcm1hbF9jb2xvcnMoKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgdGhhdCBub25lIG9mIHRoZSBjb2xvcnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yCisgICAgICovCisgICAgZ3VpX2NoZWNrX2NvbG9ycygpOworCisgICAgLyoKKyAgICAgKiBTZXQgdXAgdGhlIEdDcy4JVGhlIGZvbnQgYXR0cmlidXRlcyB3aWxsIGJlIHNldCBpbiBndWlfaW5pdF9mb250KCkuCisgICAgICovCisgICAgZ2NfbWFzayA9IEdDRm9yZWdyb3VuZCB8IEdDQmFja2dyb3VuZDsKKyAgICBnY192YWxzLmZvcmVncm91bmQgPSBndWkubm9ybV9waXhlbDsKKyAgICBnY192YWxzLmJhY2tncm91bmQgPSBndWkuYmFja19waXhlbDsKKyAgICBndWkudGV4dF9nYyA9IFh0R2V0R0ModmltU2hlbGwsIGdjX21hc2ssICZnY192YWxzKTsKKworICAgIGdjX3ZhbHMuZm9yZWdyb3VuZCA9IGd1aS5iYWNrX3BpeGVsOworICAgIGdjX3ZhbHMuYmFja2dyb3VuZCA9IGd1aS5ub3JtX3BpeGVsOworICAgIGd1aS5iYWNrX2djID0gWHRHZXRHQyh2aW1TaGVsbCwgZ2NfbWFzaywgJmdjX3ZhbHMpOworCisgICAgZ2NfbWFzayB8PSBHQ0Z1bmN0aW9uOworICAgIGdjX3ZhbHMuZm9yZWdyb3VuZCA9IGd1aS5ub3JtX3BpeGVsIF4gZ3VpLmJhY2tfcGl4ZWw7CisgICAgZ2NfdmFscy5iYWNrZ3JvdW5kID0gZ3VpLm5vcm1fcGl4ZWwgXiBndWkuYmFja19waXhlbDsKKyAgICBnY192YWxzLmZ1bmN0aW9uICAgPSBHWHhvcjsKKyAgICBndWkuaW52ZXJ0X2djID0gWHRHZXRHQyh2aW1TaGVsbCwgZ2NfbWFzaywgJmdjX3ZhbHMpOworCisgICAgZ3VpLnZpc2liaWxpdHkgPSBWaXNpYmlsaXR5VW5vYnNjdXJlZDsKKyAgICB4MTFfc2V0dXBfYXRvbXMoZ3VpLmRweSk7CisKKyAgICBpZiAoZ3VpX3dpbl94ICE9IC0xICYmIGd1aV93aW5feSAhPSAtMSkKKwlndWlfbWNoX3NldF93aW5wb3MoZ3VpX3dpbl94LCBndWlfd2luX3kpOworCisgICAgLyogTm93IGFkYXB0IHRoZSBzdXBwbGllZCg/KSBnZW9tZXRyeS1zZXR0aW5ncyAqLworICAgIC8qIEFkZGVkIGJ5IEtqZXRpbCBKYWNvYnNlbiA8a2pldGlsamFAc3R1ZC5jcy51aXQubm8+ICovCisgICAgaWYgKGd1aS5nZW9tICE9IE5VTEwgJiYgKmd1aS5nZW9tICE9IE5VTCkKKyAgICB7CisJbWFzayA9IFhQYXJzZUdlb21ldHJ5KChjaGFyICopZ3VpLmdlb20sICZ4LCAmeSwgJncsICZoKTsKKwlpZiAobWFzayAmIFdpZHRoVmFsdWUpCisJICAgIENvbHVtbnMgPSB3OworCWlmIChtYXNrICYgSGVpZ2h0VmFsdWUpCisJICAgIFJvd3MgPSBoOworCS8qCisJICogU2V0IHRoZSAoeCx5KSBwb3NpdGlvbiBvZiB0aGUgbWFpbiB3aW5kb3cgb25seSBpZiBzcGVjaWZpZWQgaW4gdGhlCisJICogdXNlcnMgZ2VvbWV0cnksIHNvIHdlIGdldCBnb29kIGRlZmF1bHRzIHdoZW4gdGhleSBkb24ndC4gVGhpcyBuZWVkcworCSAqIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSBzaGVsbCBpcyBwb3BwZWQgdXAuCisJICovCisJaWYgKG1hc2sgJiAoWFZhbHVlfFlWYWx1ZSkpCisJICAgIFh0VmFTZXRWYWx1ZXModmltU2hlbGwsIFh0Tmdlb21ldHJ5LCBndWkuZ2VvbSwgTlVMTCk7CisgICAgfQorCisgICAgZ3VpX3gxMV9jcmVhdGVfd2lkZ2V0cygpOworCisgICAvKgorICAgICogQWRkIGFuIGljb24gdG8gVmltIChNYXJjZWwgRG91YmVuOiAxMSBNYXkgMTk5OCkuCisgICAgKi8KKyAgICBpZiAodmltX3N0cmNocihwX2dvLCBHT19JQ09OKSAhPSBOVUxMKQorICAgIHsKKyNpZm5kZWYgSEFWRV9YUE0KKyMgaW5jbHVkZSAidmltX2ljb24ueGJtIgorIyBpbmNsdWRlICJ2aW1fbWFzay54Ym0iCisKKwlBcmcJYXJnWzJdOworCisJWHRTZXRBcmcoYXJnWzBdLCBYdE5pY29uUGl4bWFwLAorCQlYQ3JlYXRlQml0bWFwRnJvbURhdGEoZ3VpLmRweSwKKwkJICAgIERlZmF1bHRSb290V2luZG93KGd1aS5kcHkpLAorCQkgICAgKGNoYXIgKil2aW1faWNvbl9iaXRzLAorCQkgICAgdmltX2ljb25fd2lkdGgsCisJCSAgICB2aW1faWNvbl9oZWlnaHQpKTsKKwlYdFNldEFyZyhhcmdbMV0sIFh0Tmljb25NYXNrLAorCQlYQ3JlYXRlQml0bWFwRnJvbURhdGEoZ3VpLmRweSwKKwkJICAgIERlZmF1bHRSb290V2luZG93KGd1aS5kcHkpLAorCQkgICAgKGNoYXIgKil2aW1fbWFza19pY29uX2JpdHMsCisJCSAgICB2aW1fbWFza19pY29uX3dpZHRoLAorCQkgICAgdmltX21hc2tfaWNvbl9oZWlnaHQpKTsKKwlYdFNldFZhbHVlcyh2aW1TaGVsbCwgYXJnLCAoQ2FyZGluYWwpMik7CisjZWxzZQorLyogVXNlIFBpeG1hcHMsIGxvb2tpbmcgbXVjaCBuaWNlci4gKi8KKworLyogSWYgeW91IGdldCBhbiBlcnJvciBtZXNzYWdlIGhlcmUsIHlvdSBzdGlsbCBuZWVkIHRvIHVucGFjayB0aGUgcnVudGltZQorICogYXJjaGl2ZSEgKi8KKyMgaWZkZWYgbWFnaWNrCisjICB1bmRlZiBtYWdpY2sKKyMgZW5kaWYKKyMgZGVmaW5lIG1hZ2ljayB2aW0zMngzMgorIyBpbmNsdWRlICIuLi9ydW50aW1lL3ZpbTMyeDMyLnhwbSIKKyMgdW5kZWYgbWFnaWNrCisjIGRlZmluZSBtYWdpY2sgdmltMTZ4MTYKKyMgaW5jbHVkZSAiLi4vcnVudGltZS92aW0xNngxNi54cG0iCisjIHVuZGVmIG1hZ2ljaworIyBkZWZpbmUgbWFnaWNrIHZpbTQ4eDQ4CisjIGluY2x1ZGUgIi4uL3J1bnRpbWUvdmltNDh4NDgueHBtIgorIyB1bmRlZiBtYWdpY2sKKworICAgIHN0YXRpYyBQaXhtYXAJaWNvbiA9IDA7CisgICAgc3RhdGljIFBpeG1hcAlpY29uX21hc2sgPSAwOworICAgIHN0YXRpYyBjaGFyCQkqKm1hZ2ljayA9IHZpbTMyeDMyOworICAgIFdpbmRvdwkJcm9vdF93aW5kb3c7CisgICAgWEljb25TaXplCQkqc2l6ZTsKKyAgICBpbnQJCQludW1iZXJfc2l6ZXM7CisgICAgRGlzcGxheQkJKmRzcDsKKyAgICBTY3JlZW4JCSpzY3I7CisgICAgWHBtQXR0cmlidXRlcwlhdHRyOworICAgIENvbG9ybWFwCQljbWFwOworCisgICAgLyoKKyAgICAgKiBBZGp1c3QgdGhlIGljb24gdG8gdGhlIHByZWZlcmVuY2VzIG9mIHRoZSBhY3R1YWwgd2luZG93IG1hbmFnZXIuCisgICAgICovCisgICAgcm9vdF93aW5kb3cgPSBYUm9vdFdpbmRvd09mU2NyZWVuKFh0U2NyZWVuKHZpbVNoZWxsKSk7CisgICAgaWYgKFhHZXRJY29uU2l6ZXMoWHREaXNwbGF5KHZpbVNoZWxsKSwgcm9vdF93aW5kb3csCisJCQkJCQkgICAmc2l6ZSwgJm51bWJlcl9zaXplcykgIT0gMCkKKyAgICB7CisKKwlpZiAobnVtYmVyX3NpemVzID4gMCkKKwl7CisJICAgIGlmIChzaXplLT5tYXhfaGVpZ2h0ID49IDQ4ICYmIHNpemUtPm1heF9oZWlnaHQgPj0gNDgpCisJCW1hZ2ljayA9IHZpbTQ4eDQ4OworCSAgICBlbHNlIGlmIChzaXplLT5tYXhfaGVpZ2h0ID49IDMyICYmIHNpemUtPm1heF9oZWlnaHQgPj0gMzIpCisJCW1hZ2ljayA9IHZpbTMyeDMyOworCSAgICBlbHNlIGlmIChzaXplLT5tYXhfaGVpZ2h0ID49IDE2ICYmIHNpemUtPm1heF9oZWlnaHQgPj0gMTYpCisJCW1hZ2ljayA9IHZpbTE2eDE2OworCX0KKyAgICB9CisKKyAgICBkc3AgPSBYdERpc3BsYXkodmltU2hlbGwpOworICAgIHNjciA9IFh0U2NyZWVuKHZpbVNoZWxsKTsKKworICAgIGNtYXAgPSBEZWZhdWx0Q29sb3JtYXAoZHNwLCBEZWZhdWx0U2NyZWVuKGRzcCkpOworICAgIFh0VmFTZXRWYWx1ZXModmltU2hlbGwsIFh0TmNvbG9ybWFwLCBjbWFwLCBOVUxMKTsKKworICAgIGF0dHIudmFsdWVtYXNrID0gMEw7CisgICAgYXR0ci52YWx1ZW1hc2sgPSBYcG1DbG9zZW5lc3MgfCBYcG1SZXR1cm5QaXhlbHMgfCBYcG1Db2xvcm1hcCB8IFhwbURlcHRoOworICAgIGF0dHIuY2xvc2VuZXNzID0gNjU1MzU7CS8qIGFjY3VyYWN5IGlzbid0IGNydWNpYWwgKi8KKyAgICBhdHRyLmNvbG9ybWFwID0gY21hcDsKKyAgICBhdHRyLmRlcHRoID0gRGVmYXVsdERlcHRoT2ZTY3JlZW4oc2NyKTsKKworICAgIGlmICghaWNvbikKKwlYcG1DcmVhdGVQaXhtYXBGcm9tRGF0YShkc3AsIHJvb3Rfd2luZG93LCBtYWdpY2ssICZpY29uLAorCQkJCQkJCSAgICZpY29uX21hc2ssICZhdHRyKTsKKworIyBpZmRlZiBGRUFUX0dVSV9BVEhFTkEKKyAgICBYdFZhU2V0VmFsdWVzKHZpbVNoZWxsLCBYdE5pY29uUGl4bWFwLCBpY29uLCBYdE5pY29uTWFzaywgaWNvbl9tYXNrLCBOVUxMKTsKKyMgZWxzZQorICAgIFh0VmFTZXRWYWx1ZXModmltU2hlbGwsIFhtTmljb25QaXhtYXAsIGljb24sIFhtTmljb25NYXNrLCBpY29uX21hc2ssIE5VTEwpOworIyBlbmRpZgorI2VuZGlmCisgICAgfQorCisgICAgaWYgKGd1aS5jb2xvcl9hcHByb3gpCisJRU1TRyhfKCJWaW0gRTQ1ODogQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0IikpOworCisjaWZkZWYgRkVBVF9TVU5fV09SS1NIT1AKKyAgICBpZiAodXNpbmdTdW5Xb3JrU2hvcCkKKwl3b3Jrc2hvcF9jb25uZWN0KGFwcF9jb250ZXh0KTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIGlmICh1c2luZ05ldGJlYW5zKQorCW5ldGJlYW5zX1h0X2Nvbm5lY3QoYXBwX2NvbnRleHQpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0JFVkFMCisgICAgZ3VpX2luaXRfdG9vbHRpcF9mb250KCk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX01FTlUKKyAgICBndWlfaW5pdF9tZW51X2ZvbnQoKTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX1hTTVAKKyAgICAvKiBBdHRhY2ggbGlzdGVuZXIgb24gSUNFIGNvbm5lY3Rpb24gKi8KKyAgICBpZiAoLTEgIT0geHNtcF9pY2VmZCkKKwlfeHNtcF94dGlucHV0aWQgPSBYdEFwcEFkZElucHV0KGFwcF9jb250ZXh0LCB4c21wX2ljZWZkLAorCQkoWHRQb2ludGVyKVh0SW5wdXRSZWFkTWFzaywgbG9jYWxfeHNtcF9oYW5kbGVfcmVxdWVzdHMsIE5VTEwpOworI2VuZGlmCisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBzdGFydGluZyB0aGUgR1VJIGZhaWxzIGFmdGVyIGNhbGxpbmcgZ3VpX21jaF9pbml0KCkuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3VuaW5pdCgpCit7CisgICAgZ3VpX3gxMV9kZXN0cm95X3dpZGdldHMoKTsKKyNpZm5kZWYgTEVTU1RJRl9WRVJTSU9OCisgICAgWHRDbG9zZURpc3BsYXkoZ3VpLmRweSk7CisjZW5kaWYKKyAgICBndWkuZHB5ID0gTlVMTDsKKyAgICB2aW1TaGVsbCA9IChXaWRnZXQpMDsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIHRoZSBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3IgaGFzIGJlZW4gY2hhbmdlZC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfbmV3X2NvbG9ycygpCit7CisgICAgbG9uZ191CWdjX21hc2s7CisgICAgWEdDVmFsdWVzCWdjX3ZhbHM7CisKKyAgICBnY19tYXNrID0gR0NGb3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kOworICAgIGdjX3ZhbHMuZm9yZWdyb3VuZCA9IGd1aS5ub3JtX3BpeGVsOworICAgIGdjX3ZhbHMuYmFja2dyb3VuZCA9IGd1aS5iYWNrX3BpeGVsOworICAgIGlmIChndWkudGV4dF9nYyAhPSBOVUxMKQorCVhDaGFuZ2VHQyhndWkuZHB5LCBndWkudGV4dF9nYywgZ2NfbWFzaywgJmdjX3ZhbHMpOworCisgICAgZ2NfdmFscy5mb3JlZ3JvdW5kID0gZ3VpLmJhY2tfcGl4ZWw7CisgICAgZ2NfdmFscy5iYWNrZ3JvdW5kID0gZ3VpLm5vcm1fcGl4ZWw7CisgICAgaWYgKGd1aS5iYWNrX2djICE9IE5VTEwpCisJWENoYW5nZUdDKGd1aS5kcHksIGd1aS5iYWNrX2djLCBnY19tYXNrLCAmZ2NfdmFscyk7CisKKyAgICBnY19tYXNrIHw9IEdDRnVuY3Rpb247CisgICAgZ2NfdmFscy5mb3JlZ3JvdW5kID0gZ3VpLm5vcm1fcGl4ZWwgXiBndWkuYmFja19waXhlbDsKKyAgICBnY192YWxzLmJhY2tncm91bmQgPSBndWkubm9ybV9waXhlbCBeIGd1aS5iYWNrX3BpeGVsOworICAgIGdjX3ZhbHMuZnVuY3Rpb24gICA9IEdYeG9yOworICAgIGlmIChndWkuaW52ZXJ0X2djICE9IE5VTEwpCisJWENoYW5nZUdDKGd1aS5kcHksIGd1aS5pbnZlcnRfZ2MsIGdjX21hc2ssICZnY192YWxzKTsKKworICAgIGd1aV94MTFfc2V0X2JhY2tfY29sb3IoKTsKK30KKworLyoKKyAqIE9wZW4gdGhlIEdVSSB3aW5kb3cgd2hpY2ggd2FzIGNyZWF0ZWQgYnkgYSBjYWxsIHRvIGd1aV9tY2hfaW5pdCgpLgorICovCisgICAgaW50CitndWlfbWNoX29wZW4oKQoreworICAgIC8qIEFjdHVhbGx5IG9wZW4gdGhlIHdpbmRvdyAqLworICAgIFh0UG9wdXAodmltU2hlbGwsIFh0R3JhYk5vbmUpOworCisgICAgZ3VpLndpZCA9IGd1aV94MTFfZ2V0X3dpZCgpOworICAgIGd1aS5ibGFua19wb2ludGVyID0gZ3VpX3gxMV9jcmVhdGVfYmxhbmtfbW91c2UoKTsKKworICAgIC8qCisgICAgICogQWRkIGEgY2FsbGJhY2sgZm9yIHRoZSBDbG9zZSBpdGVtIG9uIHRoZSB3aW5kb3cgbWFuYWdlcnMgbWVudSwgYW5kIHRoZQorICAgICAqIHNhdmUteW91cnNlbGYgZXZlbnQuCisgICAgICovCisgICAgd21fYXRvbXNbU0FWRV9ZT1VSU0VMRl9JRFhdID0KKwkJCSAgICAgIFhJbnRlcm5BdG9tKGd1aS5kcHksICJXTV9TQVZFX1lPVVJTRUxGIiwgRmFsc2UpOworICAgIHdtX2F0b21zW0RFTEVURV9XSU5ET1dfSURYXSA9CisJCQkgICAgICBYSW50ZXJuQXRvbShndWkuZHB5LCAiV01fREVMRVRFX1dJTkRPVyIsIEZhbHNlKTsKKyAgICBYU2V0V01Qcm90b2NvbHMoZ3VpLmRweSwgWHRXaW5kb3codmltU2hlbGwpLCB3bV9hdG9tcywgMik7CisgICAgWHRBZGRFdmVudEhhbmRsZXIodmltU2hlbGwsIE5vRXZlbnRNYXNrLCBUcnVlLCBndWlfeDExX3dtX3Byb3RvY29sX2hhbmRsZXIsCisJCQkJCQkJICAgICBOVUxMKTsKKyNpZmRlZiBIQVZFX1gxMV9YTVVfRURJVFJFU19ICisgICAgLyoKKyAgICAgKiBFbmFibGUgZWRpdHJlcyBwcm90b2NvbCAoc2VlICJtYW4gZWRpdHJlcyIpLgorICAgICAqIFVzdWFsbHkgd2lsbCBuZWVkIHRvIGFkZCAtbFhtdSB0byB0aGUgbGlua2VyIGxpbmUgYXMgd2VsbC4KKyAgICAgKi8KKyAgICBYdEFkZEV2ZW50SGFuZGxlcih2aW1TaGVsbCwgKEV2ZW50TWFzaykwLCBUcnVlLCBfWEVkaXRSZXNDaGVja01lc3NhZ2VzLAorCSAgICAoWHRQb2ludGVyKU5VTEwpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorICAgIGlmIChzZXJ2ZXJOYW1lID09IE5VTEwgJiYgc2VydmVyRGVsYXllZFN0YXJ0TmFtZSAhPSBOVUxMKQorICAgIHsKKwkvKiBUaGlzIGlzIGEgOmd1aSBjb21tYW5kIGluIGEgcGxhaW4gdmltIHdpdGggbm8gcHJldmlvdXMgc2VydmVyICovCisJY29tbVdpbmRvdyA9IFh0V2luZG93KHZpbVNoZWxsKTsKKwkodm9pZClzZXJ2ZXJSZWdpc3Rlck5hbWUoZ3VpLmRweSwgc2VydmVyRGVsYXllZFN0YXJ0TmFtZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBDYW5ub3QgaGFuZGxlICJ3aWRnZXQtbGVzcyIgd2luZG93cyB3aXRoIFh0UHJvY2Vzc0V2ZW50KCkgd2UnbGwKKwkgKiBoYXZlIHRvIGNoYW5nZSB0aGUgInNlcnZlciIgcmVnaXN0cmF0aW9uIHRvIHRoYXQgb2YgdGhlIG1haW4gd2luZG93CisJICogSWYgd2UgaGF2ZSBub3QgcmVnaXN0ZXJlZCBhIG5hbWUgeWV0LCByZW1lbWJlciB0aGUgd2luZG93CisJICovCisJc2VydmVyQ2hhbmdlUmVnaXN0ZXJlZFdpbmRvdyhndWkuZHB5LCBYdFdpbmRvdyh2aW1TaGVsbCkpOworICAgIH0KKyAgICBYdEFkZEV2ZW50SGFuZGxlcih2aW1TaGVsbCwgUHJvcGVydHlDaGFuZ2VNYXNrLCBGYWxzZSwKKwkJICAgICAgZ3VpX3gxMV9zZW5kX2V2ZW50X2hhbmRsZXIsIE5VTEwpOworI2VuZGlmCisKKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkKKyAgICAvKiBUaGUgQXRoZW5hIEdVSSBuZWVkcyB0aGlzIGFnYWluIGFmdGVyIG9wZW5pbmcgdGhlIHdpbmRvdyAqLworICAgIGd1aV9wb3NpdGlvbl9tZW51KCk7CisjIGlmZGVmIEZFQVRfVE9PTEJBUgorICAgIGd1aV9tY2hfc2V0X3Rvb2xiYXJfcG9zKDAsIGd1aS5tZW51X2hlaWdodCwgZ3VpLm1lbnVfd2lkdGgsCisJCQkgICAgZ3VpLnRvb2xiYXJfaGVpZ2h0KTsKKyMgZW5kaWYKKyNlbmRpZgorCisgICAgLyogR2V0IHRoZSBjb2xvcnMgZm9yIHRoZSBoaWdobGlnaHQgZ3JvdXBzIChndWlfY2hlY2tfY29sb3JzKCkgbWlnaHQgaGF2ZQorICAgICAqIGNoYW5nZWQgdGhlbSkgKi8KKyAgICBoaWdobGlnaHRfZ3VpX3N0YXJ0ZWQoKTsJCS8qIHJlLWluaXQgY29sb3JzIGFuZCBmb250cyAqLworCisjaWZkZWYgRkVBVF9IQU5HVUxJTgorICAgIGhhbmd1bF9rZXlib2FyZF9zZXQoKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfWElNCisgICAgeGltX2luaXQoKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU1VOX1dPUktTSE9QCisgICAgd29ya3Nob3BfcG9zdGluaXQoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIE9LOworfQorCisjaWYgZGVmaW5lZChGRUFUX0JFVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENvbnZlcnQgdGhlIHRvb2x0aXAgZm9udHNldCBuYW1lIHRvIGFuIFhGb250U2V0LgorICovCisgICAgdm9pZAorZ3VpX2luaXRfdG9vbHRpcF9mb250KCkKK3sKKyAgICBYcm1WYWx1ZSBmcm9tLCB0bzsKKworICAgIGZyb20uYWRkciA9IChjaGFyICopZ3VpLnJzcmNfdG9vbHRpcF9mb250X25hbWU7CisgICAgZnJvbS5zaXplID0gc3RybGVuKGZyb20uYWRkcik7CisgICAgdG8uYWRkciA9IChYdFBvaW50ZXIpJmd1aS50b29sdGlwX2ZvbnRzZXQ7CisgICAgdG8uc2l6ZSA9IHNpemVvZihYRm9udFNldCk7CisKKyAgICBpZiAoWHRDb252ZXJ0QW5kU3RvcmUodmltU2hlbGwsIFh0UlN0cmluZywgJmZyb20sIFh0UkZvbnRTZXQsICZ0bykgPT0gRmFsc2UpCisgICAgeworCS8qIEZhaWxlZC4gV2hhdCB0byBkbz8gKi8KKyAgICB9Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSB8fCBkZWZpbmVkKFBST1RPKQorLyogQ29udmVydCB0aGUgbWVudSBmb250L2ZvbnRzZXQgbmFtZSB0byBhbiBYRm9udFN0cnVjdC9YRm9udHNldCAqLworICAgIHZvaWQKK2d1aV9pbml0X21lbnVfZm9udCgpCit7CisgICAgWHJtVmFsdWUgZnJvbSwgdG87CisKKyNpZmRlZiBGT05UU0VUX0FMV0FZUworICAgIGZyb20uYWRkciA9IChjaGFyICopZ3VpLnJzcmNfbWVudV9mb250X25hbWU7CisgICAgZnJvbS5zaXplID0gc3RybGVuKGZyb20uYWRkcik7CisgICAgdG8uYWRkciA9IChYdFBvaW50ZXIpJmd1aS5tZW51X2ZvbnRzZXQ7CisgICAgdG8uc2l6ZSA9IHNpemVvZihHdWlGb250c2V0KTsKKworICAgIGlmIChYdENvbnZlcnRBbmRTdG9yZSh2aW1TaGVsbCwgWHRSU3RyaW5nLCAmZnJvbSwgWHRSRm9udFNldCwgJnRvKSA9PSBGYWxzZSkKKyAgICB7CisJLyogRmFpbGVkLiBXaGF0IHRvIGRvPyAqLworICAgIH0KKyNlbHNlCisgICAgZnJvbS5hZGRyID0gKGNoYXIgKilndWkucnNyY19tZW51X2ZvbnRfbmFtZTsKKyAgICBmcm9tLnNpemUgPSBzdHJsZW4oZnJvbS5hZGRyKTsKKyAgICB0by5hZGRyID0gKFh0UG9pbnRlcikmZ3VpLm1lbnVfZm9udDsKKyAgICB0by5zaXplID0gc2l6ZW9mKEd1aUZvbnQpOworCisgICAgaWYgKFh0Q29udmVydEFuZFN0b3JlKHZpbVNoZWxsLCBYdFJTdHJpbmcsICZmcm9tLCBYdFJGb250U3RydWN0LCAmdG8pID09IEZhbHNlKQorICAgIHsKKwkvKiBGYWlsZWQuIFdoYXQgdG8gZG8/ICovCisgICAgfQorI2VuZGlmCit9CisjZW5kaWYKKworLypBUkdTVVNFRCovCisgICAgdm9pZAorZ3VpX21jaF9leGl0KHJjKQorICAgIGludAkJcmM7Cit7CisjaWYgMAorICAgIC8qIExlc3N0aWYgZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZSBoZXJlLCBhbmQgc28gZG9lcyBTb2xhcmlzLiAgVGhlIG1hbiBwYWdlCisgICAgICogc2F5cyB0aGF0IHRoaXMgaXNuJ3QgbmVlZGVkIHdoZW4gZXhpdGluZywgc28ganVzdCBza2lwIGl0LiAqLworICAgIFh0Q2xvc2VEaXNwbGF5KGd1aS5kcHkpOworI2VuZGlmCit9CisKKy8qCisgKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHdpbmRvdy4KKyAqLworICAgIGludAorZ3VpX21jaF9nZXRfd2lucG9zKHgsIHkpCisgICAgaW50CQkqeCwgKnk7Cit7CisgICAgRGltZW5zaW9uCXhwb3MsIHlwb3M7CisKKyAgICBYdFZhR2V0VmFsdWVzKHZpbVNoZWxsLAorCVh0TngsCSZ4cG9zLAorCVh0TnksCSZ5cG9zLAorCU5VTEwpOworICAgICp4ID0geHBvczsKKyAgICAqeSA9IHlwb3M7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogU2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSB3aW5kb3cgdG8gdGhlIGdpdmVuCisgKiBjb29yZGluYXRlcy4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3dpbnBvcyh4LCB5KQorICAgIGludAkJeCwgeTsKK3sKKyAgICBYdFZhU2V0VmFsdWVzKHZpbVNoZWxsLAorCVh0TngsCXgsCisJWHROeSwJeSwKKwlOVUxMKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfc2V0X3NoZWxsc2l6ZSh3aWR0aCwgaGVpZ2h0LCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQsCisJCSAgICBiYXNlX3dpZHRoLCBiYXNlX2hlaWdodCkKKyAgICBpbnQJCXdpZHRoOworICAgIGludAkJaGVpZ2h0OworICAgIGludAkJbWluX3dpZHRoOworICAgIGludAkJbWluX2hlaWdodDsKKyAgICBpbnQJCWJhc2Vfd2lkdGg7CisgICAgaW50CQliYXNlX2hlaWdodDsKK3sKKyAgICBYdFZhU2V0VmFsdWVzKHZpbVNoZWxsLAorCVh0TndpZHRoSW5jLAlndWkuY2hhcl93aWR0aCwKKwlYdE5oZWlnaHRJbmMsCWd1aS5jaGFyX2hlaWdodCwKKyNpZiBkZWZpbmVkKFh0U3BlY2lmaWNhdGlvblJlbGVhc2UpICYmIFh0U3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNAorCVh0TmJhc2VXaWR0aCwJYmFzZV93aWR0aCwKKwlYdE5iYXNlSGVpZ2h0LAliYXNlX2hlaWdodCwKKyNlbmRpZgorCVh0Tm1pbldpZHRoLAltaW5fd2lkdGgsCisJWHRObWluSGVpZ2h0LAltaW5faGVpZ2h0LAorCVh0TndpZHRoLAl3aWR0aCwKKyNpZmRlZiBGRUFUX1hJTQorCVh0TmhlaWdodCwJaGVpZ2h0ICsgeGltX2dldF9zdGF0dXNfYXJlYV9oZWlnaHQoKSwKKyNlbHNlCisJWHROaGVpZ2h0LAloZWlnaHQsCisjZW5kaWYKKwlOVUxMKTsKK30KKworLyoKKyAqIEFsbG93IDEwIHBpeGVscyBmb3IgaG9yaXpvbnRhbCBib3JkZXJzLCAzMCBmb3IgdmVydGljYWwgYm9yZGVycy4KKyAqIElzIHRoZXJlIG5vIHdheSBpbiBYIHRvIGZpbmQgb3V0IGhvdyB3aWRlIHRoZSBib3JkZXJzIHJlYWxseSBhcmU/CisgKi8KKyAgICB2b2lkCitndWlfbWNoX2dldF9zY3JlZW5fZGltZW5zaW9ucyhzY3JlZW5fdywgc2NyZWVuX2gpCisgICAgaW50CSAgICAqc2NyZWVuX3c7CisgICAgaW50CSAgICAqc2NyZWVuX2g7Cit7CisgICAgKnNjcmVlbl93ID0gRGlzcGxheVdpZHRoKGd1aS5kcHksIERlZmF1bHRTY3JlZW4oZ3VpLmRweSkpIC0gMTA7CisgICAgKnNjcmVlbl9oID0gRGlzcGxheUhlaWdodChndWkuZHB5LCBEZWZhdWx0U2NyZWVuKGd1aS5kcHkpKSAtIHBfZ2hyOworfQorCisvKgorICogSW5pdGlhbGlzZSB2aW0gdG8gdXNlIHRoZSBmb250ICJmb250X25hbWUiLiAgSWYgaXQncyBOVUxMLCBwaWNrIGEgZGVmYXVsdAorICogZm9udC4KKyAqIElmICJmb250c2V0IiBpcyBUUlVFLCBsb2FkIHRoZSAiZm9udF9uYW1lIiBhcyBhIGZvbnRzZXQuCisgKiBSZXR1cm4gRkFJTCBpZiB0aGUgZm9udCBjb3VsZCBub3QgYmUgbG9hZGVkLCBPSyBvdGhlcndpc2UuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIGludAorZ3VpX21jaF9pbml0X2ZvbnQoZm9udF9uYW1lLCBkb19mb250c2V0KQorICAgIGNoYXJfdQkqZm9udF9uYW1lOworICAgIGludAkJZG9fZm9udHNldDsKK3sKKyAgICBYRm9udFN0cnVjdAkqZm9udCA9IE5VTEw7CisKKyNpZmRlZiBGRUFUX1hGT05UU0VUCisgICAgWEZvbnRTZXQJZm9udHNldCA9IE5VTEw7CisKKyAgICBpZiAoZG9fZm9udHNldCkKKyAgICB7CisJLyogSWYgJ2d1aWZvbnRzZXQnIGlzIHNldCwgVklNIHRyZWF0cyBhbGwgZm9udCBzcGVjaWZpY2F0aW9ucyBhcyBpZgorCSAqIHRoZXkgd2VyZSBmb250c2V0cywgYW5kICdndWlmb250c2V0JyBiZWNvbWVzIHRoZSBkZWZhdWx0LiAqLworCWlmIChmb250X25hbWUgIT0gTlVMTCkKKwl7CisJICAgIGZvbnRzZXQgPSAoWEZvbnRTZXQpZ3VpX21jaF9nZXRfZm9udHNldChmb250X25hbWUsIEZBTFNFLCBUUlVFKTsKKwkgICAgaWYgKGZvbnRzZXQgPT0gTlVMTCkKKwkJcmV0dXJuIEZBSUw7CisJfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJaWYgKGZvbnRfbmFtZSA9PSBOVUxMKQorCXsKKwkgICAgLyoKKwkgICAgICogSWYgbm9uZSBvZiB0aGUgZm9udHMgaW4gJ2ZvbnQnIGNvdWxkIGJlIGxvYWRlZCwgdHJ5IHRoZSBvbmUgc2V0CisJICAgICAqIGluIHRoZSBYIHJlc291cmNlLCBhbmQgZmluYWxseSBqdXN0IHRyeSB1c2luZyBERkxUX0ZPTlQsIHdoaWNoCisJICAgICAqIHdpbGwgaG9wZWZ1bGx5IGFsd2F5cyBiZSB0aGVyZS4KKwkgICAgICovCisJICAgIGZvbnRfbmFtZSA9IGd1aS5yc3JjX2ZvbnRfbmFtZTsKKwkgICAgZm9udCA9IChYRm9udFN0cnVjdCAqKWd1aV9tY2hfZ2V0X2ZvbnQoZm9udF9uYW1lLCBGQUxTRSk7CisJICAgIGlmIChmb250ID09IE5VTEwpCisJCWZvbnRfbmFtZSA9IChjaGFyX3UgKilERkxUX0ZPTlQ7CisJfQorCWlmIChmb250ID09IE5VTEwpCisJICAgIGZvbnQgPSAoWEZvbnRTdHJ1Y3QgKilndWlfbWNoX2dldF9mb250KGZvbnRfbmFtZSwgRkFMU0UpOworCWlmIChmb250ID09IE5VTEwpCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKworICAgIGd1aV9tY2hfZnJlZV9mb250KGd1aS5ub3JtX2ZvbnQpOworI2lmZGVmIEZFQVRfWEZPTlRTRVQKKyAgICBndWlfbWNoX2ZyZWVfZm9udHNldChndWkuZm9udHNldCk7CisKKyAgICBpZiAoZm9udHNldCAhPSBOVUxMKQorICAgIHsKKwlndWkubm9ybV9mb250ID0gTk9GT05UOworCWd1aS5mb250c2V0ID0gKEd1aUZvbnRzZXQpZm9udHNldDsKKwlndWkuY2hhcl93aWR0aCA9IGZvbnRzZXRfd2lkdGgoZm9udHNldCk7CisJZ3VpLmNoYXJfaGVpZ2h0ID0gZm9udHNldF9oZWlnaHQoZm9udHNldCkgKyBwX2xpbmVzcGFjZTsKKwlndWkuY2hhcl9hc2NlbnQgPSBmb250c2V0X2FzY2VudChmb250c2V0KSArIHBfbGluZXNwYWNlIC8gMjsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCWd1aS5ub3JtX2ZvbnQgPSAoR3VpRm9udClmb250OworI2lmZGVmIEZFQVRfWEZPTlRTRVQKKwlndWkuZm9udHNldCA9IE5PRk9OVFNFVDsKKyNlbmRpZgorCWd1aS5jaGFyX3dpZHRoID0gZm9udC0+bWF4X2JvdW5kcy53aWR0aDsKKwlndWkuY2hhcl9oZWlnaHQgPSBmb250LT5hc2NlbnQgKyBmb250LT5kZXNjZW50ICsgcF9saW5lc3BhY2U7CisJZ3VpLmNoYXJfYXNjZW50ID0gZm9udC0+YXNjZW50ICsgcF9saW5lc3BhY2UgLyAyOworICAgIH0KKworICAgIGhsX3NldF9mb250X25hbWUoZm9udF9uYW1lKTsKKworICAgIC8qCisgICAgICogVHJ5IHRvIGxvYWQgb3RoZXIgZm9udHMgZm9yIGJvbGQsIGl0YWxpYywgYW5kIGJvbGQtaXRhbGljLgorICAgICAqIFdlIHNob3VsZCBhbHNvIHRyeSB0byB3b3JrIG91dCB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aGVzZSB3aGVuIHRoZXkgYXJlCisgICAgICogbm90IHNwZWNpZmllZCBieSBYIHJlc291cmNlcywgYnV0IHdlIGRvbid0IHlldC4KKyAgICAgKi8KKyAgICBpZiAoZm9udF9uYW1lID09IGd1aS5yc3JjX2ZvbnRfbmFtZSkKKyAgICB7CisJaWYgKGd1aS5ib2xkX2ZvbnQgPT0gTk9GT05UCisJCSYmIGd1aS5yc3JjX2JvbGRfZm9udF9uYW1lICE9IE5VTEwKKwkJJiYgKmd1aS5yc3JjX2JvbGRfZm9udF9uYW1lICE9IE5VTCkKKwkgICAgZ3VpLmJvbGRfZm9udCA9IGd1aV9tY2hfZ2V0X2ZvbnQoZ3VpLnJzcmNfYm9sZF9mb250X25hbWUsIEZBTFNFKTsKKwlpZiAoZ3VpLml0YWxfZm9udCA9PSBOT0ZPTlQKKwkJJiYgZ3VpLnJzcmNfaXRhbF9mb250X25hbWUgIT0gTlVMTAorCQkmJiAqZ3VpLnJzcmNfaXRhbF9mb250X25hbWUgIT0gTlVMKQorCSAgICBndWkuaXRhbF9mb250ID0gZ3VpX21jaF9nZXRfZm9udChndWkucnNyY19pdGFsX2ZvbnRfbmFtZSwgRkFMU0UpOworCWlmIChndWkuYm9sZGl0YWxfZm9udCA9PSBOT0ZPTlQKKwkJJiYgZ3VpLnJzcmNfYm9sZGl0YWxfZm9udF9uYW1lICE9IE5VTEwKKwkJJiYgKmd1aS5yc3JjX2JvbGRpdGFsX2ZvbnRfbmFtZSAhPSBOVUwpCisJICAgIGd1aS5ib2xkaXRhbF9mb250ID0gZ3VpX21jaF9nZXRfZm9udChndWkucnNyY19ib2xkaXRhbF9mb250X25hbWUsCisJCQkJCQkJCSAgICAgICBGQUxTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogV2hlbiBub3QgdXNpbmcgdGhlIGZvbnQgc3BlY2lmaWVkIGJ5IHRoZSByZXNvdXJjZXMsIGFsc28gZG9uJ3QgdXNlCisJICogdGhlIGJvbGQvaXRhbGljIGZvbnRzLCBvdGhlcndpc2Ugc2V0dGluZyAnZ3VpZm9udCcgd2lsbCBsb29rIHZlcnkKKwkgKiBzdHJhbmdlLiAqLworCWlmIChndWkuYm9sZF9mb250ICE9IE5PRk9OVCkKKwl7CisJICAgIFhGcmVlRm9udChndWkuZHB5LCAoWEZvbnRTdHJ1Y3QgKilndWkuYm9sZF9mb250KTsKKwkgICAgZ3VpLmJvbGRfZm9udCA9IE5PRk9OVDsKKwl9CisJaWYgKGd1aS5pdGFsX2ZvbnQgIT0gTk9GT05UKQorCXsKKwkgICAgWEZyZWVGb250KGd1aS5kcHksIChYRm9udFN0cnVjdCAqKWd1aS5pdGFsX2ZvbnQpOworCSAgICBndWkuaXRhbF9mb250ID0gTk9GT05UOworCX0KKwlpZiAoZ3VpLmJvbGRpdGFsX2ZvbnQgIT0gTk9GT05UKQorCXsKKwkgICAgWEZyZWVGb250KGd1aS5kcHksIChYRm9udFN0cnVjdCAqKWd1aS5ib2xkaXRhbF9mb250KTsKKwkgICAgZ3VpLmJvbGRpdGFsX2ZvbnQgPSBOT0ZPTlQ7CisJfQorICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIEdldCBhIGZvbnQgc3RydWN0dXJlIGZvciBoaWdobGlnaHRpbmcuCisgKi8KKyAgICBHdWlGb250CitndWlfbWNoX2dldF9mb250KG5hbWUsIGdpdmVFcnJvcklmTWlzc2luZykKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQlnaXZlRXJyb3JJZk1pc3Npbmc7Cit7CisgICAgWEZvbnRTdHJ1Y3QJKmZvbnQ7CisKKyAgICBpZiAoIWd1aS5pbl91c2UgfHwgbmFtZSA9PSBOVUxMKSAgICAvKiBjYW4ndCBkbyB0aGlzIHdoZW4gR1VJIG5vdCBydW5uaW5nICovCisJcmV0dXJuIE5PRk9OVDsKKworICAgIGZvbnQgPSBYTG9hZFF1ZXJ5Rm9udChndWkuZHB5LCAoY2hhciAqKW5hbWUpOworCisgICAgaWYgKGZvbnQgPT0gTlVMTCkKKyAgICB7CisJaWYgKGdpdmVFcnJvcklmTWlzc2luZykKKwkgICAgRU1TRzIoXyhlX2ZvbnQpLCBuYW1lKTsKKwlyZXR1cm4gTk9GT05UOworICAgIH0KKworI2lmZGVmIERFQlVHCisgICAgcHJpbnRmKCJGb250IEluZm9ybWF0aW9uIGZvciAnJXMnOlxuIiwgbmFtZSk7CisgICAgcHJpbnRmKCIgIHcgPSAlZCwgaCA9ICVkLCBhc2NlbnQgPSAlZCwgZGVzY2VudCA9ICVkXG4iLAorCSAgIGZvbnQtPm1heF9ib3VuZHMud2lkdGgsIGZvbnQtPmFzY2VudCArIGZvbnQtPmRlc2NlbnQsCisJICAgZm9udC0+YXNjZW50LCBmb250LT5kZXNjZW50KTsKKyAgICBwcmludGYoIiAgbWF4IGFzY2VudCA9ICVkLCBtYXggZGVzY2VudCA9ICVkLCBtYXggaCA9ICVkXG4iLAorCSAgIGZvbnQtPm1heF9ib3VuZHMuYXNjZW50LCBmb250LT5tYXhfYm91bmRzLmRlc2NlbnQsCisJICAgZm9udC0+bWF4X2JvdW5kcy5hc2NlbnQgKyBmb250LT5tYXhfYm91bmRzLmRlc2NlbnQpOworICAgIHByaW50ZigiICBtaW4gbGJlYXJpbmcgPSAlZCwgbWluIHJiZWFyaW5nID0gJWRcbiIsCisJICAgZm9udC0+bWluX2JvdW5kcy5sYmVhcmluZywgZm9udC0+bWluX2JvdW5kcy5yYmVhcmluZyk7CisgICAgcHJpbnRmKCIgIG1heCBsYmVhcmluZyA9ICVkLCBtYXggcmJlYXJpbmcgPSAlZFxuIiwKKwkgICBmb250LT5tYXhfYm91bmRzLmxiZWFyaW5nLCBmb250LT5tYXhfYm91bmRzLnJiZWFyaW5nKTsKKyAgICBwcmludGYoIiAgbGVmdGluayA9ICVkLCByaWdodGluayA9ICVkXG4iLAorCSAgIChmb250LT5taW5fYm91bmRzLmxiZWFyaW5nIDwgMCksCisJICAgKGZvbnQtPm1heF9ib3VuZHMucmJlYXJpbmcgPiBmb250LT5tYXhfYm91bmRzLndpZHRoKSk7CisgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisKKyAgICBpZiAoZm9udC0+bWF4X2JvdW5kcy53aWR0aCAhPSBmb250LT5taW5fYm91bmRzLndpZHRoKQorICAgIHsKKwlFTVNHMihfKGVfZm9udHdpZHRoKSwgbmFtZSk7CisJWEZyZWVGb250KGd1aS5kcHksIGZvbnQpOworCXJldHVybiBOT0ZPTlQ7CisgICAgfQorICAgIHJldHVybiAoR3VpRm9udClmb250OworfQorCisgICAgaW50CitndWlfbWNoX2FkanVzdF9jaGFyc2l6ZSgpCit7CisjaWZkZWYgRkVBVF9YRk9OVFNFVAorICAgIGlmIChndWkuZm9udHNldCAhPSBOT0ZPTlRTRVQpCisgICAgeworCWd1aS5jaGFyX2hlaWdodCA9IGZvbnRzZXRfaGVpZ2h0KChYRm9udFNldClndWkuZm9udHNldCkgKyBwX2xpbmVzcGFjZTsKKwlndWkuY2hhcl9hc2NlbnQgPSBmb250c2V0X2FzY2VudCgoWEZvbnRTZXQpZ3VpLmZvbnRzZXQpCisJCQkJCQkJICAgICsgcF9saW5lc3BhY2UgLyAyOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJWEZvbnRTdHJ1Y3QgKmZvbnQgPSAoWEZvbnRTdHJ1Y3QgKilndWkubm9ybV9mb250OworCisJZ3VpLmNoYXJfaGVpZ2h0ID0gZm9udC0+YXNjZW50ICsgZm9udC0+ZGVzY2VudCArIHBfbGluZXNwYWNlOworCWd1aS5jaGFyX2FzY2VudCA9IGZvbnQtPmFzY2VudCArIHBfbGluZXNwYWNlIC8gMjsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogU2V0IHRoZSBjdXJyZW50IHRleHQgZm9udC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2ZvbnQoZm9udCkKKyAgICBHdWlGb250CWZvbnQ7Cit7CisgICAgc3RhdGljIEZvbnQJcHJldl9mb250ID0gKEZvbnQpLTE7CisgICAgRm9udAlmaWQgPSAoKFhGb250U3RydWN0ICopZm9udCktPmZpZDsKKworICAgIGlmIChmaWQgIT0gcHJldl9mb250KQorICAgIHsKKwlYU2V0Rm9udChndWkuZHB5LCBndWkudGV4dF9nYywgZmlkKTsKKwlYU2V0Rm9udChndWkuZHB5LCBndWkuYmFja19nYywgZmlkKTsKKwlwcmV2X2ZvbnQgPSBmaWQ7CisJZ3VpLmNoYXJfYXNjZW50ID0gKChYRm9udFN0cnVjdCAqKWZvbnQpLT5hc2NlbnQgKyBwX2xpbmVzcGFjZSAvIDI7CisgICAgfQorI2lmZGVmIEZFQVRfWEZPTlRTRVQKKyAgICBjdXJyZW50X2ZvbnRzZXQgPSAoWEZvbnRTZXQpTlVMTDsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChGRUFUX1hGT05UU0VUKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFNldCB0aGUgY3VycmVudCB0ZXh0IGZvbnRzZXQuCisgKiBBZGp1c3QgdGhlIGFzY2VudCwgaW4gY2FzZSBpdCdzIGRpZmZlcmVudC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfc2V0X2ZvbnRzZXQoZm9udHNldCkKKyAgICBHdWlGb250c2V0CWZvbnRzZXQ7Cit7CisgICAgY3VycmVudF9mb250c2V0ID0gKFhGb250U2V0KWZvbnRzZXQ7CisgICAgZ3VpLmNoYXJfYXNjZW50ID0gZm9udHNldF9hc2NlbnQoY3VycmVudF9mb250c2V0KSArIHBfbGluZXNwYWNlIC8gMjsKK30KKyNlbmRpZgorCisjaWYgMCAvKiBub3QgdXNlZCAqLworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSB0d28gZm9udHMgZ2l2ZW4gYXJlIGVxdWl2YWxlbnQuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfc2FtZV9mb250KGYxLCBmMikKKyAgICBHdWlGb250CWYxOworICAgIEd1aUZvbnQJZjI7Cit7CisjaWZkZWYgRkVBVF9YRk9OVFNFVAorICAgIGlmIChndWkuZm9udHNldCAhPSBOVUxMKQorCXJldHVybiBmMSA9PSBmMjsKKyAgICBlbHNlCisjZW5kaWYKKyAgICByZXR1cm4gKChYRm9udFN0cnVjdCAqKWYxKS0+ZmlkID09ICgoWEZvbnRTdHJ1Y3QgKilmMiktPmZpZDsKK30KKyNlbmRpZgorCisvKgorICogSWYgYSBmb250IGlzIG5vdCBnb2luZyB0byBiZSB1c2VkLCBmcmVlIGl0cyBzdHJ1Y3R1cmUuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2ZyZWVfZm9udChmb250KQorICAgIEd1aUZvbnQJZm9udDsKK3sKKyAgICBpZiAoZm9udCAhPSBOT0ZPTlQpCisJWEZyZWVGb250KGd1aS5kcHksIChYRm9udFN0cnVjdCAqKWZvbnQpOworfQorCisjaWYgZGVmaW5lZChGRUFUX1hGT05UU0VUKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIElmIGEgZm9udHNldCBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCwgZnJlZSBpdHMgc3RydWN0dXJlLgorICovCisgICAgdm9pZAorZ3VpX21jaF9mcmVlX2ZvbnRzZXQoZm9udHNldCkKKyAgICBHdWlGb250c2V0CWZvbnRzZXQ7Cit7CisgICAgaWYgKGZvbnRzZXQgIT0gTk9GT05UU0VUKQorCVhGcmVlRm9udFNldChndWkuZHB5LCAoWEZvbnRTZXQpZm9udHNldCk7Cit9CisKKy8qCisgKiBMb2FkIHRoZSBmb250c2V0ICJuYW1lIi4KKyAqIFJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgZm9udHNldCwgb3IgTk9GT05UU0VUIHdoZW4gZmFpbGluZy4KKyAqLworICAgIEd1aUZvbnRzZXQKK2d1aV9tY2hfZ2V0X2ZvbnRzZXQobmFtZSwgZ2l2ZUVycm9ySWZNaXNzaW5nLCBmaXhlZF93aWR0aCkKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQlnaXZlRXJyb3JJZk1pc3Npbmc7CisgICAgaW50CQlmaXhlZF93aWR0aDsKK3sKKyAgICBYRm9udFNldAlmb250c2V0OworICAgIGNoYXIJKiptaXNzaW5nLCAqZGVmX3N0cjsKKyAgICBpbnQJCW51bV9taXNzaW5nOworCisgICAgaWYgKCFndWkuaW5fdXNlIHx8IG5hbWUgPT0gTlVMTCkKKwlyZXR1cm4gTk9GT05UU0VUOworCisgICAgZm9udHNldCA9IFhDcmVhdGVGb250U2V0KGd1aS5kcHksIChjaGFyICopbmFtZSwgJm1pc3NpbmcsICZudW1fbWlzc2luZywKKwkJCSAgICAgJmRlZl9zdHIpOworICAgIGlmIChudW1fbWlzc2luZyA+IDApCisgICAgeworCWludCBpOworCisJaWYgKGdpdmVFcnJvcklmTWlzc2luZykKKwl7CisJICAgIEVNU0cyKF8oIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IiksIG5hbWUpOworCSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX21pc3Npbmc7IGkrKykKKwkJRU1TRzIoIiVzIiwgbWlzc2luZ1tpXSk7CisJfQorCVhGcmVlU3RyaW5nTGlzdChtaXNzaW5nKTsKKyAgICB9CisKKyAgICBpZiAoZm9udHNldCA9PSBOVUxMKQorICAgIHsKKwlpZiAoZ2l2ZUVycm9ySWZNaXNzaW5nKQorCSAgICBFTVNHMihfKGVfZm9udHNldCksIG5hbWUpOworCXJldHVybiBOT0ZPTlRTRVQ7CisgICAgfQorCisgICAgaWYgKGZpeGVkX3dpZHRoICYmIGNoZWNrX2ZvbnRzZXRfc2FuaXR5KGZvbnRzZXQpID09IEZBSUwpCisgICAgeworCVhGcmVlRm9udFNldChndWkuZHB5LCBmb250c2V0KTsKKwlyZXR1cm4gTk9GT05UU0VUOworICAgIH0KKyAgICByZXR1cm4gKEd1aUZvbnRzZXQpZm9udHNldDsKK30KKworLyoKKyAqIENoZWNrIGlmIGZvbnRzZXQgImZzIiBpcyBmaXhlZCB3aWR0aC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NoZWNrX2ZvbnRzZXRfc2FuaXR5KGZzKQorICAgIFhGb250U2V0IGZzOworeworICAgIFhGb250U3RydWN0CSoqeGZzOworICAgIGNoYXIJKipmb250X25hbWU7CisgICAgaW50CQlmbjsKKyAgICBjaGFyCSpiYXNlX25hbWU7CisgICAgaW50CQlpOworICAgIGludAkJbWluX3dpZHRoOworICAgIGludAkJbWluX2ZvbnRfaWR4ID0gMDsKKworICAgIGJhc2VfbmFtZSA9IFhCYXNlRm9udE5hbWVMaXN0T2ZGb250U2V0KGZzKTsKKyAgICBmbiA9IFhGb250c09mRm9udFNldChmcywgJnhmcywgJmZvbnRfbmFtZSk7CisgICAgZm9yIChpID0gMDsgaSA8IGZuOyBpKyspCisgICAgeworCWlmICh4ZnNbaV0tPm1heF9ib3VuZHMud2lkdGggIT0geGZzW2ldLT5taW5fYm91bmRzLndpZHRoKQorCXsKKwkgICAgRU1TRzIoXygiRTI1MjogRm9udHNldCBuYW1lOiAlcyIpLCBiYXNlX25hbWUpOworCSAgICBFTVNHMihfKCJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIiksIGZvbnRfbmFtZVtpXSk7CisJICAgIHJldHVybiBGQUlMOworCX0KKyAgICB9CisgICAgLyogc2NhbiBiYXNlIGZvbnQgd2lkdGggKi8KKyAgICBtaW5fd2lkdGggPSAzMjc2NzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZm47IGkrKykKKyAgICB7CisJaWYgKHhmc1tpXS0+bWF4X2JvdW5kcy53aWR0aDxtaW5fd2lkdGgpCisJeworCSAgICBtaW5fd2lkdGggPSB4ZnNbaV0tPm1heF9ib3VuZHMud2lkdGg7CisJICAgIG1pbl9mb250X2lkeCA9IGk7CisJfQorICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgZm47IGkrKykKKyAgICB7CisJaWYgKAkgICB4ZnNbaV0tPm1heF9ib3VuZHMud2lkdGggIT0gMiAqIG1pbl93aWR0aAorCQkmJiB4ZnNbaV0tPm1heF9ib3VuZHMud2lkdGggIT0gbWluX3dpZHRoKQorCXsKKwkgICAgRU1TRzIoXygiRTI1MzogRm9udHNldCBuYW1lOiAlc1xuIiksIGJhc2VfbmFtZSk7CisJICAgIEVNU0cyKF8oIkZvbnQwOiAlc1xuIiksIGZvbnRfbmFtZVttaW5fZm9udF9pZHhdKTsKKwkgICAgRU1TRzIoXygiRm9udDE6ICVzXG4iKSwgZm9udF9uYW1lW2ldKTsKKwkgICAgRU1TR04oXygiRm9udCVsZCB3aWR0aCBpcyBub3QgdHdpY2UgdGhhdCBvZiBmb250MFxuIiksIGkpOworCSAgICBFTVNHTihfKCJGb250MCB3aWR0aDogJWxkXG4iKSwgeGZzW21pbl9mb250X2lkeF0tPm1heF9ib3VuZHMud2lkdGgpOworCSAgICBFTVNHTihfKCJGb250MSB3aWR0aDogJWxkXG5cbiIpLCB4ZnNbaV0tPm1heF9ib3VuZHMud2lkdGgpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisgICAgfQorICAgIC8qIGl0IHNlZW1zIG9rLiBHb29kIEx1Y2shISAqLworICAgIHJldHVybiBPSzsKK30KKworICAgIHN0YXRpYyBpbnQKK2ZvbnRzZXRfd2lkdGgoZnMpCisgICAgWEZvbnRTZXQgZnM7Cit7CisgICAgcmV0dXJuIFhtYlRleHRFc2NhcGVtZW50KGZzLCAiVmltIiwgMykgLyAzOworfQorCisgICAgaW50Citmb250c2V0X2hlaWdodChmcykKKyAgICBYRm9udFNldCBmczsKK3sKKyAgICBYRm9udFNldEV4dGVudHMgKmV4dGVudHM7CisKKyAgICBleHRlbnRzID0gWEV4dGVudHNPZkZvbnRTZXQoZnMpOworICAgIHJldHVybiBleHRlbnRzLT5tYXhfbG9naWNhbF9leHRlbnQuaGVpZ2h0OworfQorCisjaWYgKGRlZmluZWQoRk9OVFNFVF9BTFdBWVMpICYmIGRlZmluZWQoRkVBVF9HVUlfQVRIRU5BKSBcCisJICAgICYmIGRlZmluZWQoRkVBVF9NRU5VKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggaGVpZ2h0IGFyb3VuZCB0aGUgYWN0dWFsIGdseXBoIGltYWdlIG9mIGFsbAorICogY2hhcmFjdGVycyBpbiBhbGwgZm9udHMgb2YgdGhlIGZvbnRzZXQuCisgKi8KKyAgICBpbnQKK2ZvbnRzZXRfaGVpZ2h0MihmcykKKyAgICBYRm9udFNldCBmczsKK3sKKyAgICBYRm9udFNldEV4dGVudHMgKmV4dGVudHM7CisKKyAgICBleHRlbnRzID0gWEV4dGVudHNPZkZvbnRTZXQoZnMpOworICAgIHJldHVybiBleHRlbnRzLT5tYXhfaW5rX2V4dGVudC5oZWlnaHQ7Cit9CisjZW5kaWYKKworLyogTk9UIFVTRUQgWUVUCisgICAgc3RhdGljIGludAorZm9udHNldF9kZXNjZW50KGZzKQorICAgIFhGb250U2V0IGZzOworeworICAgIFhGb250U2V0RXh0ZW50cyAqZXh0ZW50czsKKworICAgIGV4dGVudHMgPSBYRXh0ZW50c09mRm9udFNldCAoZnMpOworICAgIHJldHVybiBleHRlbnRzLT5tYXhfbG9naWNhbF9leHRlbnQuaGVpZ2h0ICsgZXh0ZW50cy0+bWF4X2xvZ2ljYWxfZXh0ZW50Lnk7Cit9CisqLworCisgICAgc3RhdGljIGludAorZm9udHNldF9hc2NlbnQoZnMpCisgICAgWEZvbnRTZXQgZnM7Cit7CisgICAgWEZvbnRTZXRFeHRlbnRzICpleHRlbnRzOworCisgICAgZXh0ZW50cyA9IFhFeHRlbnRzT2ZGb250U2V0KGZzKTsKKyAgICByZXR1cm4gLWV4dGVudHMtPm1heF9sb2dpY2FsX2V4dGVudC55OworfQorCisjZW5kaWYgLyogRkVBVF9YRk9OVFNFVCAqLworCisvKgorICogUmV0dXJuIHRoZSBQaXhlbCB2YWx1ZSAoY29sb3IpIGZvciB0aGUgZ2l2ZW4gY29sb3IgbmFtZS4KKyAqIFJldHVybiBJTlZBTENPTE9SIGZvciBlcnJvci4KKyAqLworICAgIGd1aWNvbG9yX1QKK2d1aV9tY2hfZ2V0X2NvbG9yKHJlcW5hbWUpCisgICAgY2hhcl91ICpyZXFuYW1lOworeworICAgIGludAkJaTsKKyAgICBjaGFyX3UJKm5hbWUgPSByZXFuYW1lOworICAgIENvbG9ybWFwCWNvbG9ybWFwOworICAgIFhDb2xvciAgICAgIGNvbG9yOworICAgIHN0YXRpYyBjaGFyICoodmltbmFtZXNbXVsyXSkgPQorICAgIHsKKwkvKiBBIG51bWJlciBvZiBjb2xvcnMgdGhhdCBzb21lIFgxMSBzeXN0ZW1zIGRvbid0IGhhdmUgKi8KKwl7IkxpZ2h0UmVkIiwJIiNGRkJCQkIifSwKKwl7IkxpZ2h0R3JlZW4iLAkiIzg4RkY4OCJ9LAorCXsiTGlnaHRNYWdlbnRhIiwiI0ZGQkJGRiJ9LAorCXsiRGFya0N5YW4iLAkiIzAwODg4OCJ9LAorCXsiRGFya0JsdWUiLAkiIzAwMDBCQiJ9LAorCXsiRGFya1JlZCIsCSIjQkIwMDAwIn0sCisJeyJEYXJrTWFnZW50YSIsCSIjQkIwMEJCIn0sCisJeyJEYXJrR3JleSIsCSIjQkJCQkJCIn0sCisJeyJEYXJrWWVsbG93IiwJIiNCQkJCMDAifSwKKwl7TlVMTCwgTlVMTH0KKyAgICB9OworCisgICAgLyogY2FuJ3QgZG8gdGhpcyB3aGVuIEdVSSBub3QgcnVubmluZyAqLworICAgIGlmICghZ3VpLmluX3VzZSB8fCAqcmVxbmFtZSA9PSBOVUwpCisJcmV0dXJuIElOVkFMQ09MT1I7CisKKyAgICBjb2xvcm1hcCA9IERlZmF1bHRDb2xvcm1hcChndWkuZHB5LCBYRGVmYXVsdFNjcmVlbihndWkuZHB5KSk7CisKKyAgICAvKiBEbyB0aGlzIHR3aWNlIGlmIHRoZSBuYW1lIGlzbid0IHJlY29nbml6ZWQuICovCisgICAgd2hpbGUgKG5hbWUgIT0gTlVMTCkKKyAgICB7CisJaSA9IFhQYXJzZUNvbG9yKGd1aS5kcHksIGNvbG9ybWFwLCAoY2hhciAqKW5hbWUsICZjb2xvcik7CisKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxFX0gpIHx8IGRlZmluZWQoWF9MT0NBTEUpCisJaWYgKGkgPT0gMCkKKwl7CisJICAgIGNoYXIgKm9sZDsKKworCSAgICAvKiBUaGUgWDExIHN5c3RlbSBpcyB0cnlpbmcgdG8gcmVzb2x2ZSBuYW1lZCBjb2xvcnMgb25seSBieSBuYW1lcworCSAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZSBsYW5ndWFnZS4gIEJ1dCBWaW0gc2NyaXB0cworCSAgICAgKiB1c3VhbGx5IGNvbnRhaW4gdGhlIEVuZ2xpc2ggY29sb3IgbmFtZXMuICBUaGVyZWZvcmUgd2UgaGF2ZSB0bworCSAgICAgKiB0cnkgYSBzZWNvbmQgdGltZSBoZXJlIHdpdGggdGhlIG5hdGl2ZSAiQyIgbG9jYWxlIHNldC4KKwkgICAgICogSG9wZWZ1bGx5LCByZXN0b3JpbmcgdGhlIG9sZCBsb2NhbGUgdGhpcyB3YXkgd29ya3Mgb24gYWxsCisJICAgICAqIHN5c3RlbXMuLi4KKwkgICAgICovCisJICAgIG9sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworCSAgICBpZiAob2xkICE9IE5VTEwgJiYgU1RSQ01QKG9sZCwgIkMiKSAhPSAwKQorCSAgICB7CisJCW9sZCA9IChjaGFyICopdmltX3N0cnNhdmUoKGNoYXJfdSAqKW9sZCk7CisJCXNldGxvY2FsZShMQ19BTEwsICJDIik7CisJCWkgPSBYUGFyc2VDb2xvcihndWkuZHB5LCBjb2xvcm1hcCwgKGNoYXIgKiluYW1lLCAmY29sb3IpOworCQlzZXRsb2NhbGUoTENfQUxMLCBvbGQpOworCQl2aW1fZnJlZShvbGQpOworCSAgICB9CisJfQorI2VuZGlmCisJaWYgKGkgIT0gMCAmJiAoWEFsbG9jQ29sb3IoZ3VpLmRweSwgY29sb3JtYXAsICZjb2xvcikgIT0gMAorCQkgICAgfHwgZmluZF9jbG9zZXN0X2NvbG9yKGNvbG9ybWFwLCAmY29sb3IpID09IE9LKSkKKwkgICAgcmV0dXJuIChndWljb2xvcl9UKWNvbG9yLnBpeGVsOworCisJLyogY2hlY2sgZm9yIGEgZmV3IGJ1aWx0aW4gbmFtZXMgKi8KKwlmb3IgKGkgPSAwOyA7ICsraSkKKwl7CisJICAgIGlmICh2aW1uYW1lc1tpXVswXSA9PSBOVUxMKQorCSAgICB7CisJCW5hbWUgPSBOVUxMOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoU1RSSUNNUChuYW1lLCB2aW1uYW1lc1tpXVswXSkgPT0gMCkKKwkgICAgeworCQluYW1lID0gKGNoYXJfdSAqKXZpbW5hbWVzW2ldWzFdOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICByZXR1cm4gSU5WQUxDT0xPUjsKK30KKworLyoKKyAqIEZpbmQgY2xvc2VzdCBjb2xvciBmb3IgImNvbG9yUHRyIiBpbiAiY29sb3JtYXAiLiAgc2V0ICJjb2xvclB0ciIgdG8gdGhlCisgKiByZXN1bHRpbmcgY29sb3IuCisgKiBCYXNlZCBvbiBhIHNpbWlsYXIgZnVuY3Rpb24gaW4gVENMLgorICogUmV0dXJuIEZBSUwgaWYgbm90IGFibGUgdG8gZmluZCBvciBhbGxvY2F0ZSBhIGNvbG9yLgorICovCisgICAgc3RhdGljIGludAorZmluZF9jbG9zZXN0X2NvbG9yKGNvbG9ybWFwLCBjb2xvclB0cikKKyAgICBDb2xvcm1hcAljb2xvcm1hcDsKKyAgICBYQ29sb3IJKmNvbG9yUHRyOworeworICAgIGRvdWJsZQl0bXAsIGRpc3RhbmNlLCBjbG9zZXN0RGlzdGFuY2U7CisgICAgaW50CQlpLCBjbG9zZXN0LCBudW1Gb3VuZCwgY21hcF9zaXplOworICAgIFhDb2xvcgkqY29sb3J0YWJsZTsKKyAgICBYVmlzdWFsSW5mbwl0ZW1wbGF0ZSwgKnZpc0luZm9QdHI7CisKKyAgICB0ZW1wbGF0ZS52aXN1YWxpZCA9IFhWaXN1YWxJREZyb21WaXN1YWwoRGVmYXVsdFZpc3VhbChndWkuZHB5LAorCQkJCQkJICAgIFhEZWZhdWx0U2NyZWVuKGd1aS5kcHkpKSk7CisgICAgdmlzSW5mb1B0ciA9IFhHZXRWaXN1YWxJbmZvKGd1aS5kcHksIChsb25nKVZpc3VhbElETWFzaywKKwkJCQkJCQkmdGVtcGxhdGUsICZudW1Gb3VuZCk7CisgICAgaWYgKG51bUZvdW5kIDwgMSkKKwkvKiBGaW5kQ2xvc2VzdENvbG9yIGNvdWxkbid0IGxvb2t1cCB2aXN1YWwgKi8KKwlyZXR1cm4gRkFJTDsKKworICAgIGNtYXBfc2l6ZSA9IHZpc0luZm9QdHItPmNvbG9ybWFwX3NpemU7CisgICAgWEZyZWUoKGNoYXIgKil2aXNJbmZvUHRyKTsKKyAgICBjb2xvcnRhYmxlID0gKFhDb2xvciAqKWFsbG9jKCh1bnNpZ25lZCkoY21hcF9zaXplICogc2l6ZW9mKFhDb2xvcikpKTsKKyAgICBpZiAoIWNvbG9ydGFibGUpCisJcmV0dXJuIEZBSUw7ICAvKiBvdXQgb2YgbWVtb3J5ICovCisKKyAgICBmb3IgKGkgPSAwOyBpICA8IGNtYXBfc2l6ZTsgaSsrKQorCWNvbG9ydGFibGVbaV0ucGl4ZWwgPSAodW5zaWduZWQgbG9uZylpOworICAgIFhRdWVyeUNvbG9ycyAoZ3VpLmRweSwgY29sb3JtYXAsIGNvbG9ydGFibGUsIGNtYXBfc2l6ZSk7CisKKyAgICAvKgorICAgICAqIEZpbmQgdGhlIGNvbG9yIHRoYXQgYmVzdCBhcHByb3hpbWF0ZXMgdGhlIGRlc2lyZWQgb25lLCB0aGVuCisgICAgICogdHJ5IHRvIGFsbG9jYXRlIHRoYXQgY29sb3IuICBJZiB0aGF0IGZhaWxzLCBpdCBtdXN0IG1lYW4gdGhhdAorICAgICAqIHRoZSBjb2xvciB3YXMgcmVhZC13cml0ZSAoc28gd2UgY2FuJ3QgdXNlIGl0LCBzaW5jZSBpdCdzIG93bmVyCisgICAgICogbWlnaHQgY2hhbmdlIGl0KSBvciBlbHNlIGl0IHdhcyBhbHJlYWR5IGZyZWVkLiAgVHJ5IGFnYWluLAorICAgICAqIG92ZXIgYW5kIG92ZXIgYWdhaW4sIHVudGlsIHNvbWV0aGluZyBzdWNjZWVkcy4KKyAgICAgKi8KKyAgICBjbG9zZXN0RGlzdGFuY2UgPSAxZTMwOworICAgIGNsb3Nlc3QgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBjbWFwX3NpemU7IGkrKykKKyAgICB7CisJLyoKKwkgKiBVc2UgRXVjbGlkZWFuIGRpc3RhbmNlIGluIFJHQiBzcGFjZSwgd2VpZ2h0ZWQgYnkgWSAob2YgWUlRKQorCSAqIGFzIHRoZSBvYmplY3RpdmUgZnVuY3Rpb247ICB0aGlzIGFjY291bnRzIGZvciBkaWZmZXJlbmNlcworCSAqIGluIHRoZSBjb2xvciBzZW5zaXRpdml0eSBvZiB0aGUgZXllLgorCSAqLworCXRtcCA9IC4zMCAqICgoKGludCljb2xvclB0ci0+cmVkKSAtIChpbnQpY29sb3J0YWJsZVtpXS5yZWQpOworCWRpc3RhbmNlID0gdG1wICogdG1wOworCXRtcCA9IC42MSAqICgoKGludCljb2xvclB0ci0+Z3JlZW4pIC0gKGludCljb2xvcnRhYmxlW2ldLmdyZWVuKTsKKwlkaXN0YW5jZSArPSB0bXAgKiB0bXA7CisJdG1wID0gLjExICogKCgoaW50KWNvbG9yUHRyLT5ibHVlKSAtIChpbnQpY29sb3J0YWJsZVtpXS5ibHVlKTsKKwlkaXN0YW5jZSArPSB0bXAgKiB0bXA7CisJaWYgKGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKQorCXsKKwkgICAgY2xvc2VzdCA9IGk7CisJICAgIGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlOworCX0KKyAgICB9CisKKyAgICBpZiAoWEFsbG9jQ29sb3IoZ3VpLmRweSwgY29sb3JtYXAsICZjb2xvcnRhYmxlW2Nsb3Nlc3RdKSAhPSAwKQorICAgIHsKKwlndWkuY29sb3JfYXBwcm94ID0gVFJVRTsKKwkqY29sb3JQdHIgPSBjb2xvcnRhYmxlW2Nsb3Nlc3RdOworICAgIH0KKworICAgIGZyZWUoY29sb3J0YWJsZSk7CisgICAgcmV0dXJuIE9LOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZmdfY29sb3IoY29sb3IpCisgICAgZ3VpY29sb3JfVAljb2xvcjsKK3sKKyAgICBpZiAoY29sb3IgIT0gcHJldl9mZ19jb2xvcikKKyAgICB7CisJWFNldEZvcmVncm91bmQoZ3VpLmRweSwgZ3VpLnRleHRfZ2MsIChQaXhlbCljb2xvcik7CisJcHJldl9mZ19jb2xvciA9IGNvbG9yOworICAgIH0KK30KKworLyoKKyAqIFNldCB0aGUgY3VycmVudCB0ZXh0IGJhY2tncm91bmQgY29sb3IuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3NldF9iZ19jb2xvcihjb2xvcikKKyAgICBndWljb2xvcl9UCWNvbG9yOworeworICAgIGlmIChjb2xvciAhPSBwcmV2X2JnX2NvbG9yKQorICAgIHsKKwlYU2V0QmFja2dyb3VuZChndWkuZHB5LCBndWkudGV4dF9nYywgKFBpeGVsKWNvbG9yKTsKKwlwcmV2X2JnX2NvbG9yID0gY29sb3I7CisgICAgfQorfQorCisvKgorICogY3JlYXRlIGEgbW91c2UgcG9pbnRlciB0aGF0IGlzIGJsYW5rCisgKi8KKyAgICBzdGF0aWMgQ3Vyc29yCitndWlfeDExX2NyZWF0ZV9ibGFua19tb3VzZSgpCit7CisgICAgUGl4bWFwIGJsYW5rX3BpeG1hcCA9IFhDcmVhdGVQaXhtYXAoZ3VpLmRweSwgZ3VpLndpZCwgMSwgMSwgMSk7CisgICAgR0MgZ2MgPSBYQ3JlYXRlR0MoZ3VpLmRweSwgYmxhbmtfcGl4bWFwLCAodW5zaWduZWQgbG9uZykwLCAoWEdDVmFsdWVzKikwKTsKKyAgICBYRHJhd1BvaW50KGd1aS5kcHksIGJsYW5rX3BpeG1hcCwgZ2MsIDAsIDApOworICAgIFhGcmVlR0MoZ3VpLmRweSwgZ2MpOworICAgIHJldHVybiBYQ3JlYXRlUGl4bWFwQ3Vyc29yKGd1aS5kcHksIGJsYW5rX3BpeG1hcCwgYmxhbmtfcGl4bWFwLAorCSAgICAoWENvbG9yKikmZ3VpLm5vcm1fcGl4ZWwsIChYQ29sb3IqKSZndWkubm9ybV9waXhlbCwgMCwgMCk7Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2RyYXdfc3RyaW5nKHJvdywgY29sLCBzLCBsZW4sIGZsYWdzKQorICAgIGludAkJcm93OworICAgIGludAkJY29sOworICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWZsYWdzOworeworICAgIGludAkJCWNlbGxzID0gbGVuOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBzdGF0aWMgWENoYXIyYgkqYnVmID0gTlVMTDsKKyAgICBzdGF0aWMgaW50CQlidWZsZW4gPSAwOworICAgIGNoYXJfdQkJKnA7CisgICAgaW50CQkJd2xlbiA9IDA7CisgICAgaW50CQkJYzsKKworICAgIGlmIChlbmNfdXRmOCkKKyAgICB7CisJLyogQ29udmVydCBVVEYtOCBieXRlIHNlcXVlbmNlIHRvIDE2IGJpdCBjaGFyYWN0ZXJzIGZvciB0aGUgWAorCSAqIGZ1bmN0aW9ucy4gIE5lZWQgYSBidWZmZXIgZm9yIHRoZSAxNiBiaXQgY2hhcmFjdGVycy4gIEtlZXAgaXQKKwkgKiBiZXR3ZWVuIGNhbGxzLCBiZWNhdXNlIGFsbG9jYXRpbmcgaXQgZWFjaCB0aW1lIGlzIHNsb3cuICovCisJaWYgKGJ1ZmxlbiA8IGxlbikKKwl7CisJICAgIFh0RnJlZSgoY2hhciAqKWJ1Zik7CisJICAgIGJ1ZiA9IChYQ2hhcjJiICopWHRNYWxsb2MobGVuICogc2l6ZW9mKFhDaGFyMmIpKTsKKwkgICAgYnVmbGVuID0gbGVuOworCX0KKwlwID0gczsKKwljZWxscyA9IDA7CisJd2hpbGUgKHAgPCBzICsgbGVuKQorCXsKKwkgICAgYyA9IHV0Zl9wdHIyY2hhcihwKTsKKwkgICAgaWYgKGMgPj0gMHgxMDAwMCkJLyogc2hvdyBjaGFycyA+IDB4ZmZmZiBhcyA/ICovCisJCWMgPSAweGJmOworCSAgICBidWZbd2xlbl0uYnl0ZTEgPSAodW5zaWduZWQpYyA+PiA4OworCSAgICBidWZbd2xlbl0uYnl0ZTIgPSBjOworCSAgICArK3dsZW47CisJICAgIGNlbGxzICs9IHV0Zl9jaGFyMmNlbGxzKGMpOworCSAgICBwICs9IHV0Zl9wdHIybGVuX2NoZWNrKHApOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAoaGFzX21ieXRlKQorICAgIHsKKwljZWxscyA9IDA7CisJZm9yIChwID0gczsgcCA8IHMgKyBsZW47ICkKKwl7CisJICAgIGNlbGxzICs9IHB0cjJjZWxscyhwKTsKKwkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOworCX0KKyAgICB9CisKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9YRk9OVFNFVAorICAgIGlmIChjdXJyZW50X2ZvbnRzZXQgIT0gTlVMTCkKKyAgICB7CisJLyogU2V0dXAgYSBjbGlwIHJlY3RhbmdsZSB0byBhdm9pZCBzcGlsbGluZyBvdmVyIGluIHRoZSBuZXh0IG9yCisJICogcHJldmlvdXMgbGluZS4gIFRoaXMgaXMgYXBwYXJlbnRseSBuZWVkZWQgZm9yIHNvbWUgZm9udHMgd2hpY2ggYXJlCisJICogdXNlZCBpbiBhIGZvbnRzZXQuICovCisJWFJlY3RhbmdsZQljbGlwOworCisJY2xpcC54ID0gMDsKKwljbGlwLnkgPSAwOworCWNsaXAuaGVpZ2h0ID0gZ3VpLmNoYXJfaGVpZ2h0OworCWNsaXAud2lkdGggPSBndWkuY2hhcl93aWR0aCAqIGNlbGxzICsgMTsKKwlYU2V0Q2xpcFJlY3RhbmdsZXMoZ3VpLmRweSwgZ3VpLnRleHRfZ2MsIEZJTExfWChjb2wpLCBGSUxMX1kocm93KSwKKwkJJmNsaXAsIDEsIFVuc29ydGVkKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChmbGFncyAmIERSQVdfVFJBTlNQKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGVuY191dGY4KQorCSAgICBYRHJhd1N0cmluZzE2KGd1aS5kcHksIGd1aS53aWQsIGd1aS50ZXh0X2djLCBURVhUX1goY29sKSwKKwkJICAgIFRFWFRfWShyb3cpLCBidWYsIHdsZW4pOworCWVsc2UKKyNlbmRpZgorCSAgICBYRHJhd1N0cmluZyhndWkuZHB5LCBndWkud2lkLCBndWkudGV4dF9nYywgVEVYVF9YKGNvbCksCisJCSAgICBURVhUX1kocm93KSwgKGNoYXIgKilzLCBsZW4pOworICAgIH0KKyAgICBlbHNlIGlmIChwX2xpbmVzcGFjZSAhPSAwCisjaWZkZWYgRkVBVF9YRk9OVFNFVAorCSAgICB8fCBjdXJyZW50X2ZvbnRzZXQgIT0gTlVMTAorI2VuZGlmCisJICAgICkKKyAgICB7CisJWFNldEZvcmVncm91bmQoZ3VpLmRweSwgZ3VpLnRleHRfZ2MsIHByZXZfYmdfY29sb3IpOworCVhGaWxsUmVjdGFuZ2xlKGd1aS5kcHksIGd1aS53aWQsIGd1aS50ZXh0X2djLCBGSUxMX1goY29sKSwKKwkJRklMTF9ZKHJvdyksIGd1aS5jaGFyX3dpZHRoICogY2VsbHMsIGd1aS5jaGFyX2hlaWdodCk7CisJWFNldEZvcmVncm91bmQoZ3VpLmRweSwgZ3VpLnRleHRfZ2MsIHByZXZfZmdfY29sb3IpOworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoZW5jX3V0ZjgpCisJICAgIFhEcmF3U3RyaW5nMTYoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLnRleHRfZ2MsIFRFWFRfWChjb2wpLAorCQkgICAgVEVYVF9ZKHJvdyksIGJ1Ziwgd2xlbik7CisJZWxzZQorI2VuZGlmCisJICAgIFhEcmF3U3RyaW5nKGd1aS5kcHksIGd1aS53aWQsIGd1aS50ZXh0X2djLCBURVhUX1goY29sKSwKKwkJICAgIFRFWFRfWShyb3cpLCAoY2hhciAqKXMsIGxlbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogWG1iRHJhd0ltYWdlU3RyaW5nIGhhcyBidWcsIGRvbid0IHVzZSBpdCBmb3IgZm9udHNldC4gKi8KKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGVuY191dGY4KQorCSAgICBYRHJhd0ltYWdlU3RyaW5nMTYoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLnRleHRfZ2MsIFRFWFRfWChjb2wpLAorCQkgICAgVEVYVF9ZKHJvdyksIGJ1Ziwgd2xlbik7CisJZWxzZQorI2VuZGlmCisJICAgIFhEcmF3SW1hZ2VTdHJpbmcoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLnRleHRfZ2MsIFRFWFRfWChjb2wpLAorCQkgICAgVEVYVF9ZKHJvdyksIChjaGFyICopcywgbGVuKTsKKyAgICB9CisKKyAgICAvKiBCb2xkIHRyaWNrOiBkcmF3IHRoZSB0ZXh0IGFnYWluIHdpdGggYSBvbmUtcGl4ZWwgb2Zmc2V0LiAqLworICAgIGlmIChmbGFncyAmIERSQVdfQk9MRCkKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChlbmNfdXRmOCkKKwkgICAgWERyYXdTdHJpbmcxNihndWkuZHB5LCBndWkud2lkLCBndWkudGV4dF9nYywgVEVYVF9YKGNvbCkgKyAxLAorCQkgICAgVEVYVF9ZKHJvdyksIGJ1Ziwgd2xlbik7CisJZWxzZQorI2VuZGlmCisJICAgIFhEcmF3U3RyaW5nKGd1aS5kcHksIGd1aS53aWQsIGd1aS50ZXh0X2djLCBURVhUX1goY29sKSArIDEsCisJCSAgICBURVhUX1kocm93KSwgKGNoYXIgKilzLCBsZW4pOworICAgIH0KKworICAgIC8qIFVuZGVybGluZTogZHJhdyBhIGxpbmUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2hhcmFjdGVyIGNlbGwuICovCisgICAgaWYgKGZsYWdzICYgRFJBV19VTkRFUkwpCisJWERyYXdMaW5lKGd1aS5kcHksIGd1aS53aWQsIGd1aS50ZXh0X2djLCBGSUxMX1goY29sKSwKKwkgICAgIEZJTExfWShyb3cgKyAxKSAtIDEsIEZJTExfWChjb2wgKyBjZWxscykgLSAxLCBGSUxMX1kocm93ICsgMSkgLSAxKTsKKworI2lmZGVmIEZFQVRfWEZPTlRTRVQKKyAgICBpZiAoY3VycmVudF9mb250c2V0ICE9IE5VTEwpCisJWFNldENsaXBNYXNrKGd1aS5kcHksIGd1aS50ZXh0X2djLCBOb25lKTsKKyNlbmRpZgorfQorCisvKgorICogUmV0dXJuIE9LIGlmIHRoZSBrZXkgd2l0aCB0aGUgdGVybWNhcCBuYW1lICJuYW1lIiBpcyBzdXBwb3J0ZWQuCisgKi8KKyAgICBpbnQKK2d1aV9tY2hfaGFza2V5KG5hbWUpCisgICAgY2hhcl91ICAqbmFtZTsKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IHNwZWNpYWxfa2V5c1tpXS5rZXlfc3ltICE9IChLZXlTeW0pMDsgaSsrKQorCWlmIChuYW1lWzBdID09IHNwZWNpYWxfa2V5c1tpXS52aW1fY29kZTAgJiYKKwkJCQkJIG5hbWVbMV0gPT0gc3BlY2lhbF9rZXlzW2ldLnZpbV9jb2RlMSkKKwkgICAgcmV0dXJuIE9LOworICAgIHJldHVybiBGQUlMOworfQorCisvKgorICogUmV0dXJuIHRoZSB0ZXh0IHdpbmRvdy1pZCBhbmQgZGlzcGxheS4gIE9ubHkgcmVxdWlyZWQgZm9yIFgtYmFzZWQgR1VJJ3MKKyAqLworICAgIGludAorZ3VpX2dldF94MTFfd2luZGlzKHdpbiwgZGlzKQorICAgIFdpbmRvdyAgKndpbjsKKyAgICBEaXNwbGF5ICoqZGlzOworeworICAgICp3aW4gPSBYdFdpbmRvdyh2aW1TaGVsbCk7CisgICAgKmRpcyA9IGd1aS5kcHk7CisgICAgcmV0dXJuIE9LOworfQorCisgICAgdm9pZAorZ3VpX21jaF9iZWVwKCkKK3sKKyAgICBYQmVsbChndWkuZHB5LCAwKTsKK30KKworICAgIHZvaWQKK2d1aV9tY2hfZmxhc2gobXNlYykKKyAgICBpbnQJCW1zZWM7Cit7CisgICAgLyogRG8gYSB2aXN1YWwgYmVlcCBieSByZXZlcnNpbmcgdGhlIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzICovCisgICAgWEZpbGxSZWN0YW5nbGUoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLmludmVydF9nYywgMCwgMCwKKwkgICAgRklMTF9YKChpbnQpQ29sdW1ucykgKyBndWkuYm9yZGVyX29mZnNldCwKKwkgICAgRklMTF9ZKChpbnQpUm93cykgKyBndWkuYm9yZGVyX29mZnNldCk7CisgICAgWFN5bmMoZ3VpLmRweSwgRmFsc2UpOworICAgIHVpX2RlbGF5KChsb25nKW1zZWMsIFRSVUUpOwkvKiB3YWl0IGZvciBhIGZldyBtc2VjICovCisgICAgWEZpbGxSZWN0YW5nbGUoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLmludmVydF9nYywgMCwgMCwKKwkgICAgRklMTF9YKChpbnQpQ29sdW1ucykgKyBndWkuYm9yZGVyX29mZnNldCwKKwkgICAgRklMTF9ZKChpbnQpUm93cykgKyBndWkuYm9yZGVyX29mZnNldCk7Cit9CisKKy8qCisgKiBJbnZlcnQgYSByZWN0YW5nbGUgZnJvbSByb3cgciwgY29sdW1uIGMsIGZvciBuciByb3dzIGFuZCBuYyBjb2x1bW5zLgorICovCisgICAgdm9pZAorZ3VpX21jaF9pbnZlcnRfcmVjdGFuZ2xlKHIsIGMsIG5yLCBuYykKKyAgICBpbnQJICAgIHI7CisgICAgaW50CSAgICBjOworICAgIGludAkgICAgbnI7CisgICAgaW50CSAgICBuYzsKK3sKKyAgICBYRmlsbFJlY3RhbmdsZShndWkuZHB5LCBndWkud2lkLCBndWkuaW52ZXJ0X2djLAorCUZJTExfWChjKSwgRklMTF9ZKHIpLCAobmMpICogZ3VpLmNoYXJfd2lkdGgsIChucikgKiBndWkuY2hhcl9oZWlnaHQpOworfQorCisvKgorICogSWNvbmlmeSB0aGUgR1VJIHdpbmRvdy4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfaWNvbmlmeSgpCit7CisgICAgWEljb25pZnlXaW5kb3coZ3VpLmRweSwgWHRXaW5kb3codmltU2hlbGwpLCBEZWZhdWx0U2NyZWVuKGd1aS5kcHkpKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEJyaW5nIHRoZSBWaW0gd2luZG93IHRvIHRoZSBmb3JlZ3JvdW5kLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zZXRfZm9yZWdyb3VuZCgpCit7CisgICAgWE1hcFJhaXNlZChndWkuZHB5LCBYdFdpbmRvdyh2aW1TaGVsbCkpOworfQorI2VuZGlmCisKKy8qCisgKiBEcmF3IGEgY3Vyc29yIHdpdGhvdXQgZm9jdXMuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RyYXdfaG9sbG93X2N1cnNvcihjb2xvcikKKyAgICBndWljb2xvcl9UIGNvbG9yOworeworICAgIGludAkJdyA9IDE7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKG1iX2xlZnRoYWx2ZShndWkucm93LCBndWkuY29sKSkKKwl3ID0gMjsKKyNlbmRpZgorICAgIGd1aV9tY2hfc2V0X2ZnX2NvbG9yKGNvbG9yKTsKKyAgICBYRHJhd1JlY3RhbmdsZShndWkuZHB5LCBndWkud2lkLCBndWkudGV4dF9nYywgRklMTF9YKGd1aS5jb2wpLAorCSAgICBGSUxMX1koZ3VpLnJvdyksIHcgKiBndWkuY2hhcl93aWR0aCAtIDEsIGd1aS5jaGFyX2hlaWdodCAtIDEpOworfQorCisvKgorICogRHJhdyBwYXJ0IG9mIGEgY3Vyc29yLCAidyIgcGl4ZWxzIHdpZGUsIGFuZCAiaCIgcGl4ZWxzIGhpZ2gsIHVzaW5nCisgKiBjb2xvciAiY29sb3IiLgorICovCisgICAgdm9pZAorZ3VpX21jaF9kcmF3X3BhcnRfY3Vyc29yKHcsIGgsIGNvbG9yKQorICAgIGludAkJdzsKKyAgICBpbnQJCWg7CisgICAgZ3VpY29sb3JfVAljb2xvcjsKK3sKKyAgICBndWlfbWNoX3NldF9mZ19jb2xvcihjb2xvcik7CisKKyAgICBYRmlsbFJlY3RhbmdsZShndWkuZHB5LCBndWkud2lkLCBndWkudGV4dF9nYywKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCSAgICAvKiB2ZXJ0aWNhbCBsaW5lIHNob3VsZCBiZSBvbiB0aGUgcmlnaHQgb2YgY3VycmVudCBwb2ludCAqLworCSAgICBDVVJTT1JfQkFSX1JJR0hUID8gRklMTF9YKGd1aS5jb2wgKyAxKSAtIHcgOgorI2VuZGlmCisJCUZJTExfWChndWkuY29sKSwKKwkgICAgRklMTF9ZKGd1aS5yb3cpICsgZ3VpLmNoYXJfaGVpZ2h0IC0gaCwKKwkgICAgdywgaCk7Cit9CisKKy8qCisgKiBDYXRjaCB1cCB3aXRoIGFueSBxdWV1ZWQgWCBldmVudHMuICBUaGlzIG1heSBwdXQga2V5Ym9hcmQgaW5wdXQgaW50byB0aGUKKyAqIGlucHV0IGJ1ZmZlciwgY2FsbCByZXNpemUgY2FsbC1iYWNrcywgdHJpZ2dlciB0aW1lcnMgZXRjLiAgSWYgdGhlcmUgaXMKKyAqIG5vdGhpbmcgaW4gdGhlIFggZXZlbnQgcXVldWUgKCYgbm8gdGltZXJzIHBlbmRpbmcpLCB0aGVuIHdlIHJldHVybgorICogaW1tZWRpYXRlbHkuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3VwZGF0ZSgpCit7CisgICAgWHRJbnB1dE1hc2sgbWFzaywgZGVzaXJlZDsKKworI2lmZGVmIEFMVF9YX0lOUFVUCisgICAgaWYgKHN1cHByZXNzX2FsdGVybmF0ZV9pbnB1dCkKKwlkZXNpcmVkID0gKFh0SU1YRXZlbnQgfCBYdElNVGltZXIpOworICAgIGVsc2UKKyNlbmRpZgorCWRlc2lyZWQgPSAoWHRJTUFsbCk7CisgICAgd2hpbGUgKChtYXNrID0gWHRBcHBQZW5kaW5nKGFwcF9jb250ZXh0KSkgJiYgKG1hc2sgJiBkZXNpcmVkKQorCSAgICAmJiAhdmltX2lzX2lucHV0X2J1Zl9mdWxsKCkpCisJWHRBcHBQcm9jZXNzRXZlbnQoYXBwX2NvbnRleHQsIGRlc2lyZWQpOworfQorCisvKgorICogR1VJIGlucHV0IHJvdXRpbmUgY2FsbGVkIGJ5IGd1aV93YWl0X2Zvcl9jaGFycygpLiAgV2FpdHMgZm9yIGEgY2hhcmFjdGVyCisgKiBmcm9tIHRoZSBrZXlib2FyZC4KKyAqICB3dGltZSA9PSAtMQkgICAgV2FpdCBmb3JldmVyLgorICogIHd0aW1lID09IDAJICAgIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4KKyAqICB3dGltZSA+IDAJICAgIFdhaXQgd3RpbWUgbWlsbGlzZWNvbmRzIGZvciBhIGNoYXJhY3Rlci4KKyAqIFJldHVybnMgT0sgaWYgYSBjaGFyYWN0ZXIgd2FzIGZvdW5kIHRvIGJlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGdpdmVuIHRpbWUsCisgKiBvciBGQUlMIG90aGVyd2lzZS4KKyAqLworICAgIGludAorZ3VpX21jaF93YWl0X2Zvcl9jaGFycyh3dGltZSkKKyAgICBsb25nICAgIHd0aW1lOworeworICAgIGludAkJICAgIGZvY3VzOworCisgICAgLyoKKyAgICAgKiBNYWtlIHRoaXMgc3RhdGljLCBpbiBjYXNlIGd1aV94MTFfdGltZXJfY2IgaXMgY2FsbGVkIGFmdGVyIGxlYXZpbmcKKyAgICAgKiB0aGlzIGZ1bmN0aW9uIChvdGhlcndpc2UgYSByYW5kb20gdmFsdWUgb24gdGhlIHN0YWNrIG1heSBiZSBjaGFuZ2VkKS4KKyAgICAgKi8KKyAgICBzdGF0aWMgaW50CSAgICB0aW1lZF9vdXQ7CisgICAgWHRJbnRlcnZhbElkICAgIHRpbWVyID0gKFh0SW50ZXJ2YWxJZCkwOworICAgIFh0SW5wdXRNYXNrCSAgICBkZXNpcmVkOworI2lmZGVmIEZFQVRfU05JRkYKKyAgICBzdGF0aWMgaW50CSAgICBzbmlmZl9vbiA9IDA7CisgICAgc3RhdGljIFh0SW5wdXRJZCBzbmlmZl9pbnB1dF9pZCA9IDA7CisjZW5kaWYKKworICAgIHRpbWVkX291dCA9IEZBTFNFOworCisjaWZkZWYgRkVBVF9TTklGRgorICAgIGlmIChzbmlmZl9vbiAmJiAhd2FudF9zbmlmZl9yZXF1ZXN0KQorICAgIHsKKwlpZiAoc25pZmZfaW5wdXRfaWQpCisJICAgIFh0UmVtb3ZlSW5wdXQoc25pZmZfaW5wdXRfaWQpOworCXNuaWZmX29uID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoIXNuaWZmX29uICYmIHdhbnRfc25pZmZfcmVxdWVzdCkKKyAgICB7CisJc25pZmZfaW5wdXRfaWQgPSBYdEFwcEFkZElucHV0KGFwcF9jb250ZXh0LCBmZF9mcm9tX3NuaWZmLAorCQkgICAgIChYdFBvaW50ZXIpWHRJbnB1dFJlYWRNYXNrLCBndWlfeDExX3NuaWZmX3JlcXVlc3RfY2IsIDApOworCXNuaWZmX29uID0gMTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICh3dGltZSA+IDApCisJdGltZXIgPSBYdEFwcEFkZFRpbWVPdXQoYXBwX2NvbnRleHQsIChsb25nX3Upd3RpbWUsIGd1aV94MTFfdGltZXJfY2IsCisJCQkJCQkJCSAgJnRpbWVkX291dCk7CisKKyAgICBmb2N1cyA9IGd1aS5pbl9mb2N1czsKKyNpZmRlZiBBTFRfWF9JTlBVVAorICAgIGlmIChzdXBwcmVzc19hbHRlcm5hdGVfaW5wdXQpCisJZGVzaXJlZCA9IChYdElNWEV2ZW50IHwgWHRJTVRpbWVyKTsKKyAgICBlbHNlCisjZW5kaWYKKwlkZXNpcmVkID0gKFh0SU1BbGwpOworICAgIHdoaWxlICghdGltZWRfb3V0KQorICAgIHsKKwkvKiBTdG9wIG9yIHN0YXJ0IGJsaW5raW5nIHdoZW4gZm9jdXMgY2hhbmdlcyAqLworCWlmIChndWkuaW5fZm9jdXMgIT0gZm9jdXMpCisJeworCSAgICBpZiAoZ3VpLmluX2ZvY3VzKQorCQlndWlfbWNoX3N0YXJ0X2JsaW5rKCk7CisJICAgIGVsc2UKKwkJZ3VpX21jaF9zdG9wX2JsaW5rKCk7CisJICAgIGZvY3VzID0gZ3VpLmluX2ZvY3VzOworCX0KKworCS8qCisJICogRG9uJ3QgdXNlIGd1aV9tY2hfdXBkYXRlKCkgYmVjYXVzZSB0aGVuIHdlIHdpbGwgc3Bpbi1sb2NrIHVudGlsIGEKKwkgKiBjaGFyIGFycml2ZXMsIGluc3RlYWQgd2UgdXNlIFh0QXBwUHJvY2Vzc0V2ZW50KCkgdG8gaGFuZyB1bnRpbCBhbgorCSAqIGV2ZW50IGFycml2ZXMuICBObyBuZWVkIHRvIGNoZWNrIGZvciBpbnB1dF9idWZfZnVsbCBiZWNhdXNlIHdlIGFyZQorCSAqIHJldHVybmluZyBhcyBzb29uIGFzIGl0IGNvbnRhaW5zIGEgc2luZ2xlIGNoYXIuICBOb3RlIHRoYXQKKwkgKiBYdEFwcE5leHRFdmVudCgpIG1heSBub3QgYmUgdXNlZCBiZWNhdXNlIGl0IHdpbGwgbm90IHJldHVybiBhZnRlciBhCisJICogdGltZXIgZXZlbnQgaGFzIGFycml2ZWQgLS0gd2ViYgorCSAqLworCVh0QXBwUHJvY2Vzc0V2ZW50KGFwcF9jb250ZXh0LCBkZXNpcmVkKTsKKworCWlmIChpbnB1dF9hdmFpbGFibGUoKSkKKwl7CisJICAgIGlmICh0aW1lciAhPSAoWHRJbnRlcnZhbElkKTAgJiYgIXRpbWVkX291dCkKKwkJWHRSZW1vdmVUaW1lT3V0KHRpbWVyKTsKKwkgICAgcmV0dXJuIE9LOworCX0KKyAgICB9CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKy8qCisgKiBPdXRwdXQgcm91dGluZXMuCisgKi8KKworLyogRmx1c2ggYW55IG91dHB1dCB0byB0aGUgc2NyZWVuICovCisgICAgdm9pZAorZ3VpX21jaF9mbHVzaCgpCit7CisgICAgWEZsdXNoKGd1aS5kcHkpOworfQorCisvKgorICogQ2xlYXIgYSByZWN0YW5ndWxhciByZWdpb24gb2YgdGhlIHNjcmVlbiBmcm9tIHRleHQgcG9zIChyb3cxLCBjb2wxKSB0bworICogKHJvdzIsIGNvbDIpIGluY2x1c2l2ZS4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfY2xlYXJfYmxvY2socm93MSwgY29sMSwgcm93MiwgY29sMikKKyAgICBpbnQJCXJvdzE7CisgICAgaW50CQljb2wxOworICAgIGludAkJcm93MjsKKyAgICBpbnQJCWNvbDI7Cit7CisgICAgaW50CQl4OworCisgICAgeCA9IEZJTExfWChjb2wxKTsKKworICAgIC8qIENsZWFyIG9uZSBleHRyYSBwaXhlbCBhdCB0aGUgZmFyIHJpZ2h0LCBmb3Igd2hlbiBib2xkIGNoYXJhY3RlcnMgaGF2ZQorICAgICAqIHNwaWxsZWQgb3ZlciB0byB0aGUgbmV4dCBjb2x1bW4uICovCisgICAgWEZpbGxSZWN0YW5nbGUoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLmJhY2tfZ2MsIHgsIEZJTExfWShyb3cxKSwKKwkgICAgKGNvbDIgLSBjb2wxICsgMSkgKiBndWkuY2hhcl93aWR0aCArIChjb2wyID09IENvbHVtbnMgLSAxKSwKKwkgICAgKHJvdzIgLSByb3cxICsgMSkgKiBndWkuY2hhcl9oZWlnaHQpOworfQorCisgICAgdm9pZAorZ3VpX21jaF9jbGVhcl9hbGwoKQoreworICAgIFhDbGVhckFyZWEoZ3VpLmRweSwgZ3VpLndpZCwgMCwgMCwgMCwgMCwgRmFsc2UpOworfQorCisvKgorICogRGVsZXRlIHRoZSBnaXZlbiBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUgZ2l2ZW4gcm93LCBzY3JvbGxpbmcgdXAgYW55CisgKiB0ZXh0IGZ1cnRoZXIgZG93biB3aXRoaW4gdGhlIHNjcm9sbCByZWdpb24uCisgKi8KKyAgICB2b2lkCitndWlfbWNoX2RlbGV0ZV9saW5lcyhyb3csIG51bV9saW5lcykKKyAgICBpbnQJICAgIHJvdzsKKyAgICBpbnQJICAgIG51bV9saW5lczsKK3sKKyAgICBpZiAoZ3VpLnZpc2liaWxpdHkgPT0gVmlzaWJpbGl0eUZ1bGx5T2JzY3VyZWQpCisJcmV0dXJuOwkgICAgLyogQ2FuJ3Qgc2VlIHRoZSB3aW5kb3cgKi8KKworICAgIC8qIGNvcHkgb25lIGV4dHJhIHBpeGVsIGF0IHRoZSBmYXIgcmlnaHQsIGZvciB3aGVuIGJvbGQgaGFzIHNwaWxsZWQKKyAgICAgKiBvdmVyICovCisgICAgWENvcHlBcmVhKGd1aS5kcHksIGd1aS53aWQsIGd1aS53aWQsIGd1aS50ZXh0X2djLAorCUZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KSwgRklMTF9ZKHJvdyArIG51bV9saW5lcyksCisJZ3VpLmNoYXJfd2lkdGggKiAoZ3VpLnNjcm9sbF9yZWdpb25fcmlnaHQgLSBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0ICsgMSkKKwkJCSAgICAgICArIChndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCA9PSBDb2x1bW5zIC0gMSksCisJZ3VpLmNoYXJfaGVpZ2h0ICogKGd1aS5zY3JvbGxfcmVnaW9uX2JvdCAtIHJvdyAtIG51bV9saW5lcyArIDEpLAorCUZJTExfWChndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0KSwgRklMTF9ZKHJvdykpOworCisgICAgZ3VpX2NsZWFyX2Jsb2NrKGd1aS5zY3JvbGxfcmVnaW9uX2JvdCAtIG51bV9saW5lcyArIDEsCisJCQkJCQkgICAgICAgZ3VpLnNjcm9sbF9yZWdpb25fbGVmdCwKKwkJCSAgZ3VpLnNjcm9sbF9yZWdpb25fYm90LCBndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCk7CisgICAgZ3VpX3gxMV9jaGVja19jb3B5X2FyZWEoKTsKK30KKworLyoKKyAqIEluc2VydCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGxpbmVzIGJlZm9yZSB0aGUgZ2l2ZW4gcm93LCBzY3JvbGxpbmcgZG93biBhbnkKKyAqIGZvbGxvd2luZyB0ZXh0IHdpdGhpbiB0aGUgc2Nyb2xsIHJlZ2lvbi4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfaW5zZXJ0X2xpbmVzKHJvdywgbnVtX2xpbmVzKQorICAgIGludAkgICAgcm93OworICAgIGludAkgICAgbnVtX2xpbmVzOworeworICAgIGlmIChndWkudmlzaWJpbGl0eSA9PSBWaXNpYmlsaXR5RnVsbHlPYnNjdXJlZCkKKwlyZXR1cm47CSAgICAvKiBDYW4ndCBzZWUgdGhlIHdpbmRvdyAqLworCisgICAgLyogY29weSBvbmUgZXh0cmEgcGl4ZWwgYXQgdGhlIGZhciByaWdodCwgZm9yIHdoZW4gYm9sZCBoYXMgc3BpbGxlZAorICAgICAqIG92ZXIgKi8KKyAgICBYQ29weUFyZWEoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLndpZCwgZ3VpLnRleHRfZ2MsCisJRklMTF9YKGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQpLCBGSUxMX1kocm93KSwKKwlndWkuY2hhcl93aWR0aCAqIChndWkuc2Nyb2xsX3JlZ2lvbl9yaWdodCAtIGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQgKyAxKQorCQkJICAgICAgICsgKGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0ID09IENvbHVtbnMgLSAxKSwKKwlndWkuY2hhcl9oZWlnaHQgKiAoZ3VpLnNjcm9sbF9yZWdpb25fYm90IC0gcm93IC0gbnVtX2xpbmVzICsgMSksCisJRklMTF9YKGd1aS5zY3JvbGxfcmVnaW9uX2xlZnQpLCBGSUxMX1kocm93ICsgbnVtX2xpbmVzKSk7CisKKyAgICBndWlfY2xlYXJfYmxvY2socm93LCBndWkuc2Nyb2xsX3JlZ2lvbl9sZWZ0LAorCQkJCXJvdyArIG51bV9saW5lcyAtIDEsIGd1aS5zY3JvbGxfcmVnaW9uX3JpZ2h0KTsKKyAgICBndWlfeDExX2NoZWNrX2NvcHlfYXJlYSgpOworfQorCisvKgorICogVXBkYXRlIHRoZSByZWdpb24gcmV2ZWFsZWQgYnkgc2Nyb2xsaW5nIHVwL2Rvd24uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX3gxMV9jaGVja19jb3B5X2FyZWEoKQoreworICAgIFhFdmVudAkJICAgIGV2ZW50OworICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50ICAgICpnZXZlbnQ7CisKKyAgICBpZiAoZ3VpLnZpc2liaWxpdHkgIT0gVmlzaWJpbGl0eVBhcnRpYWxseU9ic2N1cmVkKQorCXJldHVybjsKKworICAgIFhGbHVzaChndWkuZHB5KTsKKworICAgIC8qIFdhaXQgdG8gY2hlY2sgd2hldGhlciB0aGUgc2Nyb2xsIHdvcmtlZCBvciBub3QgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwlpZiAoWENoZWNrVHlwZWRFdmVudChndWkuZHB5LCBOb0V4cG9zZSwgJmV2ZW50KSkKKwkgICAgcmV0dXJuOwkvKiBUaGUgc2Nyb2xsIHdvcmtlZC4gKi8KKworCWlmIChYQ2hlY2tUeXBlZEV2ZW50KGd1aS5kcHksIEdyYXBoaWNzRXhwb3NlLCAmZXZlbnQpKQorCXsKKwkgICAgZ2V2ZW50ID0gKFhHcmFwaGljc0V4cG9zZUV2ZW50ICopJmV2ZW50OworCSAgICBndWlfcmVkcmF3KGdldmVudC0+eCwgZ2V2ZW50LT55LCBnZXZlbnQtPndpZHRoLCBnZXZlbnQtPmhlaWdodCk7CisJICAgIGlmIChnZXZlbnQtPmNvdW50ID09IDApCisJCXJldHVybjsJCS8qIFRoaXMgd2FzIHRoZSBsYXN0IGV4cG9zZSBldmVudCAqLworCX0KKwlYU3luYyhndWkuZHB5LCBGYWxzZSk7CisgICAgfQorfQorCisvKgorICogWCBTZWxlY3Rpb24gc3R1ZmYsIGZvciBjdXR0aW5nIGFuZCBwYXN0aW5nIHRleHQgdG8gb3RoZXIgd2luZG93cy4KKyAqLworCisgICAgdm9pZAorY2xpcF9tY2hfbG9zZV9zZWxlY3Rpb24oY2JkKQorICAgIFZpbUNsaXBib2FyZAkqY2JkOworeworICAgIGNsaXBfeDExX2xvc2Vfc2VsZWN0aW9uKHZpbVNoZWxsLCBjYmQpOworfQorCisgICAgaW50CitjbGlwX21jaF9vd25fc2VsZWN0aW9uKGNiZCkKKyAgICBWaW1DbGlwYm9hcmQJKmNiZDsKK3sKKyAgICByZXR1cm4gY2xpcF94MTFfb3duX3NlbGVjdGlvbih2aW1TaGVsbCwgY2JkKTsKK30KKworICAgIHZvaWQKK2NsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uKGNiZCkKKyAgICBWaW1DbGlwYm9hcmQJKmNiZDsKK3sKKyAgICBjbGlwX3gxMV9yZXF1ZXN0X3NlbGVjdGlvbih2aW1TaGVsbCwgZ3VpLmRweSwgY2JkKTsKK30KKworICAgIHZvaWQKK2NsaXBfbWNoX3NldF9zZWxlY3Rpb24oY2JkKQorICAgIFZpbUNsaXBib2FyZAkqY2JkOworeworICAgIGNsaXBfeDExX3NldF9zZWxlY3Rpb24oY2JkKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9NRU5VKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIE1lbnUgc3R1ZmYuCisgKi8KKworLyoKKyAqIE1ha2UgYSBtZW51IGVpdGhlciBncmV5IG9yIG5vdCBncmV5LgorICovCisgICAgdm9pZAorZ3VpX21jaF9tZW51X2dyZXkobWVudSwgZ3JleSkKKyAgICB2aW1tZW51X1QJKm1lbnU7CisgICAgaW50CQlncmV5OworeworICAgIGlmIChtZW51LT5pZCAhPSAoV2lkZ2V0KTApCisgICAgeworCWd1aV9tY2hfbWVudV9oaWRkZW4obWVudSwgRmFsc2UpOworCWlmIChncmV5CisjaWZkZWYgRkVBVF9HVUlfTU9USUYKKwkJfHwgIW1lbnUtPnNlbnNpdGl2ZQorI2VuZGlmCisJCSkKKwkgICAgWHRTZXRTZW5zaXRpdmUobWVudS0+aWQsIEZhbHNlKTsKKwllbHNlCisJICAgIFh0U2V0U2Vuc2l0aXZlKG1lbnUtPmlkLCBUcnVlKTsKKyAgICB9Cit9CisKKy8qCisgKiBNYWtlIG1lbnUgaXRlbSBoaWRkZW4gb3Igbm90IGhpZGRlbgorICovCisgICAgdm9pZAorZ3VpX21jaF9tZW51X2hpZGRlbihtZW51LCBoaWRkZW4pCisgICAgdmltbWVudV9UCSptZW51OworICAgIGludAkJaGlkZGVuOworeworICAgIGlmIChtZW51LT5pZCAhPSAoV2lkZ2V0KTApCisgICAgeworCWlmIChoaWRkZW4pCisJICAgIFh0VW5tYW5hZ2VDaGlsZChtZW51LT5pZCk7CisJZWxzZQorCSAgICBYdE1hbmFnZUNoaWxkKG1lbnUtPmlkKTsKKyAgICB9Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBzZXR0aW5nIGFsbCB0aGUgbWVudXMgdG8gZ3JleS9oaWRkZW4gb3Igbm90LgorICovCisgICAgdm9pZAorZ3VpX21jaF9kcmF3X21lbnViYXIoKQoreworICAgIC8qIE5vdGhpbmcgdG8gZG8gaW4gWCAqLworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHZvaWQKK2d1aV94MTFfbWVudV9jYih3LCBjbGllbnRfZGF0YSwgY2FsbF9kYXRhKQorICAgIFdpZGdldAl3OworICAgIFh0UG9pbnRlcgljbGllbnRfZGF0YSwgY2FsbF9kYXRhOworeworICAgIGd1aV9tZW51X2NiKCh2aW1tZW51X1QgKiljbGllbnRfZGF0YSk7Cit9CisKKyNlbmRpZiAvKiBGRUFUX01FTlUgKi8KKworCisKKy8qCisgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB3aW5kb3cgY2xvc2VkLglXb3JrcyBsaWtlICI6cWEiLgorICogU2hvdWxkIHB1dCB1cCBhIHJlcXVlc3RlciEKKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2d1aV94MTFfd21fcHJvdG9jb2xfaGFuZGxlcih3LCBjbGllbnRfZGF0YSwgZXZlbnQsIGR1bSkKKyAgICBXaWRnZXQJdzsKKyAgICBYdFBvaW50ZXIJY2xpZW50X2RhdGE7CisgICAgWEV2ZW50CSpldmVudDsKKyAgICBCb29sZWFuCSpkdW07Cit7CisgICAgLyoKKyAgICAgKiBPbmx5IGRlYWwgd2l0aCBDbGllbnQgbWVzc2FnZXMuCisgICAgICovCisgICAgaWYgKGV2ZW50LT50eXBlICE9IENsaWVudE1lc3NhZ2UpCisJcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBUaGUgV01fU0FWRV9ZT1VSU0VMRiBldmVudCBhcnJpdmVzIHdoZW4gdGhlIHdpbmRvdyBtYW5hZ2VyIHdhbnRzIHRvCisgICAgICogZXhpdC4gIFRoYXQgY2FuIGJlIGNhbmNlbGxlZCB0aG91Z2gsIHRodXMgVmltIHNob3VsZG4ndCBleGl0IGhlcmUuCisgICAgICogSnVzdCBzeW5jIG91ciBzd2FwIGZpbGVzLgorICAgICAqLworICAgIGlmICgoKFhDbGllbnRNZXNzYWdlRXZlbnQgKilldmVudCktPmRhdGEubFswXSA9PQorCQkJCQkJICB3bV9hdG9tc1tTQVZFX1lPVVJTRUxGX0lEWF0pCisgICAgeworCW91dF9mbHVzaCgpOworCW1sX3N5bmNfYWxsKEZBTFNFLCBGQUxTRSk7CS8qIHByZXNlcnZlIGFsbCBzd2FwIGZpbGVzICovCisKKwkvKiBTZXQgdGhlIHdpbmRvdydzIFdNX0NPTU1BTkQgcHJvcGVydHksIHRvIGxldCB0aGUgd2luZG93IG1hbmFnZXIKKwkgKiBrbm93IHdlIGFyZSBkb25lIHNhdmluZyBvdXJzZWx2ZXMuICBXZSBkb24ndCB3YW50IHRvIGJlIHJlc3RhcnRlZCwKKwkgKiB0aHVzIHNldCBhcmd2IHRvIE5VTEwuICovCisJWFNldENvbW1hbmQoZ3VpLmRweSwgWHRXaW5kb3codmltU2hlbGwpLCBOVUxMLCAwKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgaWYgKCgoWENsaWVudE1lc3NhZ2VFdmVudCAqKWV2ZW50KS0+ZGF0YS5sWzBdICE9CisJCQkJCQkgIHdtX2F0b21zW0RFTEVURV9XSU5ET1dfSURYXSkKKwlyZXR1cm47CisKKyAgICBndWlfc2hlbGxfY2xvc2VkKCk7Cit9CisKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorLyoKKyAqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHByb3BlcnR5IGNoYW5nZWQuIENoZWNrIGZvciBpbmNvbWluZyBjb21tYW5kcworICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX3gxMV9zZW5kX2V2ZW50X2hhbmRsZXIodywgY2xpZW50X2RhdGEsIGV2ZW50LCBkdW0pCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCWNsaWVudF9kYXRhOworICAgIFhFdmVudAkqZXZlbnQ7CisgICAgQm9vbGVhbgkqZHVtOworeworICAgIFhQcm9wZXJ0eUV2ZW50ICplID0gKFhQcm9wZXJ0eUV2ZW50ICopIGV2ZW50OworCisgICAgaWYgKGUtPnR5cGUgPT0gUHJvcGVydHlOb3RpZnkgJiYgZS0+d2luZG93ID09IGNvbW1XaW5kb3cKKwkgICAgJiYgZS0+YXRvbSA9PSBjb21tUHJvcGVydHkgJiYgIGUtPnN0YXRlID09IFByb3BlcnR5TmV3VmFsdWUpCisgICAgeworCXNlcnZlckV2ZW50UHJvYyhndWkuZHB5LCBldmVudCk7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBDdXJzb3IgYmxpbmsgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgaXMgYSBzaW1wbGUgc3RhdGUgbWFjaGluZToKKyAqIEJMSU5LX05PTkUJbm90IGJsaW5raW5nIGF0IGFsbAorICogQkxJTktfT0ZGCWJsaW5raW5nLCBjdXJzb3IgaXMgbm90IHNob3duCisgKiBCTElOS19PTglibGlua2luZywgY3Vyc29yIGlzIHNob3duCisgKi8KKworI2RlZmluZSBCTElOS19OT05FICAwCisjZGVmaW5lIEJMSU5LX09GRiAgIDEKKyNkZWZpbmUgQkxJTktfT04gICAgMgorCitzdGF0aWMgaW50CQlibGlua19zdGF0ZSA9IEJMSU5LX05PTkU7CitzdGF0aWMgbG9uZ191CQlibGlua193YWl0dGltZSA9IDcwMDsKK3N0YXRpYyBsb25nX3UJCWJsaW5rX29udGltZSA9IDQwMDsKK3N0YXRpYyBsb25nX3UJCWJsaW5rX29mZnRpbWUgPSAyNTA7CitzdGF0aWMgWHRJbnRlcnZhbElkCWJsaW5rX3RpbWVyID0gKFh0SW50ZXJ2YWxJZCkwOworCisgICAgdm9pZAorZ3VpX21jaF9zZXRfYmxpbmtpbmcod2FpdHRpbWUsIG9uLCBvZmYpCisgICAgbG9uZyAgICB3YWl0dGltZSwgb24sIG9mZjsKK3sKKyAgICBibGlua193YWl0dGltZSA9IHdhaXR0aW1lOworICAgIGJsaW5rX29udGltZSA9IG9uOworICAgIGJsaW5rX29mZnRpbWUgPSBvZmY7Cit9CisKKy8qCisgKiBTdG9wIHRoZSBjdXJzb3IgYmxpbmtpbmcuICBTaG93IHRoZSBjdXJzb3IgaWYgaXQgd2Fzbid0IHNob3duLgorICovCisgICAgdm9pZAorZ3VpX21jaF9zdG9wX2JsaW5rKCkKK3sKKyAgICBpZiAoYmxpbmtfdGltZXIgIT0gKFh0SW50ZXJ2YWxJZCkwKQorICAgIHsKKwlYdFJlbW92ZVRpbWVPdXQoYmxpbmtfdGltZXIpOworCWJsaW5rX3RpbWVyID0gKFh0SW50ZXJ2YWxJZCkwOworICAgIH0KKyAgICBpZiAoYmxpbmtfc3RhdGUgPT0gQkxJTktfT0ZGKQorCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKyAgICBibGlua19zdGF0ZSA9IEJMSU5LX05PTkU7Cit9CisKKy8qCisgKiBTdGFydCB0aGUgY3Vyc29yIGJsaW5raW5nLiAgSWYgaXQgd2FzIGFscmVhZHkgYmxpbmtpbmcsIHRoaXMgcmVzdGFydHMgdGhlCisgKiB3YWl0aW5nIHRpbWUgYW5kIHNob3dzIHRoZSBjdXJzb3IuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX3N0YXJ0X2JsaW5rKCkKK3sKKyAgICBpZiAoYmxpbmtfdGltZXIgIT0gKFh0SW50ZXJ2YWxJZCkwKQorCVh0UmVtb3ZlVGltZU91dChibGlua190aW1lcik7CisgICAgLyogT25seSBzd2l0Y2ggYmxpbmtpbmcgb24gaWYgbm9uZSBvZiB0aGUgdGltZXMgaXMgemVybyAqLworICAgIGlmIChibGlua193YWl0dGltZSAmJiBibGlua19vbnRpbWUgJiYgYmxpbmtfb2ZmdGltZSAmJiBndWkuaW5fZm9jdXMpCisgICAgeworCWJsaW5rX3RpbWVyID0gWHRBcHBBZGRUaW1lT3V0KGFwcF9jb250ZXh0LCBibGlua193YWl0dGltZSwKKwkJCQkJCSAgICAgIGd1aV94MTFfYmxpbmtfY2IsIE5VTEwpOworCWJsaW5rX3N0YXRlID0gQkxJTktfT047CisJZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworICAgIH0KK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX3gxMV9ibGlua19jYih0aW1lZF9vdXQsIGludGVydmFsX2lkKQorICAgIFh0UG9pbnRlcgkgICAgdGltZWRfb3V0OworICAgIFh0SW50ZXJ2YWxJZCAgICAqaW50ZXJ2YWxfaWQ7Cit7CisgICAgaWYgKGJsaW5rX3N0YXRlID09IEJMSU5LX09OKQorICAgIHsKKwlndWlfdW5kcmF3X2N1cnNvcigpOworCWJsaW5rX3N0YXRlID0gQkxJTktfT0ZGOworCWJsaW5rX3RpbWVyID0gWHRBcHBBZGRUaW1lT3V0KGFwcF9jb250ZXh0LCBibGlua19vZmZ0aW1lLAorCQkJCQkJICAgICAgZ3VpX3gxMV9ibGlua19jYiwgTlVMTCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworCWJsaW5rX3N0YXRlID0gQkxJTktfT047CisJYmxpbmtfdGltZXIgPSBYdEFwcEFkZFRpbWVPdXQoYXBwX2NvbnRleHQsIGJsaW5rX29udGltZSwKKwkJCQkJCSAgICAgIGd1aV94MTFfYmxpbmtfY2IsIE5VTEwpOworICAgIH0KK30KKworLyoKKyAqIFJldHVybiB0aGUgUkdCIHZhbHVlIG9mIGEgcGl4ZWwgYXMgYSBsb25nLgorICovCisgICAgbG9uZ191CitndWlfbWNoX2dldF9yZ2IocGl4ZWwpCisgICAgZ3VpY29sb3JfVAlwaXhlbDsKK3sKKyAgICBYQ29sb3IJeGM7CisgICAgQ29sb3JtYXAJY29sb3JtYXA7CisKKyAgICBjb2xvcm1hcCA9IERlZmF1bHRDb2xvcm1hcChndWkuZHB5LCBYRGVmYXVsdFNjcmVlbihndWkuZHB5KSk7CisgICAgeGMucGl4ZWwgPSBwaXhlbDsKKyAgICBYUXVlcnlDb2xvcihndWkuZHB5LCBjb2xvcm1hcCwgJnhjKTsKKworICAgIHJldHVybiAoKHhjLnJlZCAmIDB4ZmYwMCkgPDwgOCkgKyAoeGMuZ3JlZW4gJiAweGZmMDApCisJCQkJCQkgICArICgodW5zaWduZWQpeGMuYmx1ZSA+PiA4KTsKK30KKworLyoKKyAqIEFkZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICovCisgICAgdm9pZAorZ3VpX3gxMV9jYWxsYmFja3ModGV4dEFyZWEsIHZpbUZvcm0pCisgICAgV2lkZ2V0IHRleHRBcmVhOworICAgIFdpZGdldCB2aW1Gb3JtOworeworICAgIFh0QWRkRXZlbnRIYW5kbGVyKHRleHRBcmVhLCBWaXNpYmlsaXR5Q2hhbmdlTWFzaywgRkFMU0UsCisJZ3VpX3gxMV92aXNpYmlsaXR5X2NiLCAoWHRQb2ludGVyKTApOworCisgICAgWHRBZGRFdmVudEhhbmRsZXIodGV4dEFyZWEsIEV4cG9zdXJlTWFzaywgRkFMU0UsIGd1aV94MTFfZXhwb3NlX2NiLAorCShYdFBvaW50ZXIpMCk7CisKKyAgICBYdEFkZEV2ZW50SGFuZGxlcih2aW1TaGVsbCwgU3RydWN0dXJlTm90aWZ5TWFzaywgRkFMU0UsCisJZ3VpX3gxMV9yZXNpemVfd2luZG93X2NiLCAoWHRQb2ludGVyKTApOworCisgICAgWHRBZGRFdmVudEhhbmRsZXIodmltU2hlbGwsIEZvY3VzQ2hhbmdlTWFzaywgRkFMU0UsIGd1aV94MTFfZm9jdXNfY2hhbmdlX2NiLAorCShYdFBvaW50ZXIpMCk7CisgICAgLyoKKyAgICAgKiBPbmx5IGluc3RhbGwgdGhlc2UgZW50ZXIvbGVhdmUgY2FsbGJhY2tzIHdoZW4gJ3AnIGluICdndWlvcHRpb25zJy4KKyAgICAgKiBPbmx5IG5lZWRlZCBmb3Igc29tZSB3aW5kb3cgbWFuYWdlcnMuCisgICAgICovCisgICAgaWYgKHZpbV9zdHJjaHIocF9nbywgR09fUE9JTlRFUikgIT0gTlVMTCkKKyAgICB7CisJWHRBZGRFdmVudEhhbmRsZXIodmltU2hlbGwsIExlYXZlV2luZG93TWFzaywgRkFMU0UsIGd1aV94MTFfbGVhdmVfY2IsCisJICAgIChYdFBvaW50ZXIpMCk7CisJWHRBZGRFdmVudEhhbmRsZXIodGV4dEFyZWEsIExlYXZlV2luZG93TWFzaywgRkFMU0UsIGd1aV94MTFfbGVhdmVfY2IsCisJICAgIChYdFBvaW50ZXIpMCk7CisJWHRBZGRFdmVudEhhbmRsZXIodGV4dEFyZWEsIEVudGVyV2luZG93TWFzaywgRkFMU0UsIGd1aV94MTFfZW50ZXJfY2IsCisJICAgIChYdFBvaW50ZXIpMCk7CisJWHRBZGRFdmVudEhhbmRsZXIodmltU2hlbGwsIEVudGVyV2luZG93TWFzaywgRkFMU0UsIGd1aV94MTFfZW50ZXJfY2IsCisJICAgIChYdFBvaW50ZXIpMCk7CisgICAgfQorCisgICAgWHRBZGRFdmVudEhhbmRsZXIodmltRm9ybSwgS2V5UHJlc3NNYXNrLCBGQUxTRSwgZ3VpX3gxMV9rZXlfaGl0X2NiLAorCShYdFBvaW50ZXIpMCk7CisgICAgWHRBZGRFdmVudEhhbmRsZXIodGV4dEFyZWEsIEtleVByZXNzTWFzaywgRkFMU0UsIGd1aV94MTFfa2V5X2hpdF9jYiwKKwkoWHRQb2ludGVyKTApOworCisgICAgLyogZ2V0IHBvaW50ZXIgbW92ZWQgZXZlbnRzIGZyb20gc2Nyb2xsYmFyLCBuZWVkZWQgZm9yICdtb3VzZWZvY3VzJyAqLworICAgIFh0QWRkRXZlbnRIYW5kbGVyKHZpbUZvcm0sIFBvaW50ZXJNb3Rpb25NYXNrLAorCUZBTFNFLCBndWlfeDExX21vdXNlX2NiLCAoWHRQb2ludGVyKTEpOworICAgIFh0QWRkRXZlbnRIYW5kbGVyKHRleHRBcmVhLCBCdXR0b25QcmVzc01hc2sgfCBCdXR0b25SZWxlYXNlTWFzayB8CisJCQkJCSBCdXR0b25Nb3Rpb25NYXNrIHwgUG9pbnRlck1vdGlvbk1hc2ssCisJRkFMU0UsIGd1aV94MTFfbW91c2VfY2IsIChYdFBvaW50ZXIpMCk7Cit9CisKKy8qCisgKiBHZXQgY3VycmVudCB5IG1vdXNlIGNvb3JkaW5hdGUgaW4gdGV4dCB3aW5kb3cuCisgKiBSZXR1cm4gLTEgd2hlbiB1bmtub3duLgorICovCisgICAgaW50CitndWlfbWNoX2dldF9tb3VzZV94KCkKK3sKKyAgICBpbnQJCXJvb3R4LCByb290eSwgd2lueCwgd2lueTsKKyAgICBXaW5kb3cJcm9vdCwgY2hpbGQ7CisgICAgdW5zaWduZWQgaW50IG1hc2s7CisKKyAgICBpZiAoZ3VpLndpZCAmJiBYUXVlcnlQb2ludGVyKGd1aS5kcHksIGd1aS53aWQsICZyb290LCAmY2hpbGQsCisJCQkJCSAmcm9vdHgsICZyb290eSwgJndpbngsICZ3aW55LCAmbWFzaykpCisJcmV0dXJuIHdpbng7CisgICAgcmV0dXJuIC0xOworfQorCisgICAgaW50CitndWlfbWNoX2dldF9tb3VzZV95KCkKK3sKKyAgICBpbnQJCXJvb3R4LCByb290eSwgd2lueCwgd2lueTsKKyAgICBXaW5kb3cJcm9vdCwgY2hpbGQ7CisgICAgdW5zaWduZWQgaW50IG1hc2s7CisKKyAgICBpZiAoZ3VpLndpZCAmJiBYUXVlcnlQb2ludGVyKGd1aS5kcHksIGd1aS53aWQsICZyb290LCAmY2hpbGQsCisJCQkJCSAmcm9vdHgsICZyb290eSwgJndpbngsICZ3aW55LCAmbWFzaykpCisJcmV0dXJuIHdpbnk7CisgICAgcmV0dXJuIC0xOworfQorCisgICAgdm9pZAorZ3VpX21jaF9zZXRtb3VzZSh4LCB5KQorICAgIGludAkJeDsKKyAgICBpbnQJCXk7Cit7CisgICAgaWYgKGd1aS53aWQpCisJWFdhcnBQb2ludGVyKGd1aS5kcHksIChXaW5kb3cpMCwgZ3VpLndpZCwgMCwgMCwgMCwgMCwgeCwgeSk7Cit9CisKKyNpZiAoZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgJiYgZGVmaW5lZChGRUFUX01FTlUpKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIFhCdXR0b25QcmVzc2VkRXZlbnQgKgorZ3VpX3gxMV9nZXRfbGFzdF9tb3VzZV9ldmVudCgpCit7CisgICAgcmV0dXJuICZsYXN0X21vdXNlX2V2ZW50OworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfU0lHTl9JQ09OUykgfHwgZGVmaW5lZChQUk9UTykKKworLyogU2lnbnMgYXJlIGN1cnJlbnRseSBhbHdheXMgMiBjaGFycyB3aWRlLiAgSG9wZWZ1bGx5IHRoZSBmb250IGlzIGJpZyBlbm91Z2gKKyAqIHRvIHByb3ZpZGUgcm9vbSBmb3IgdGhlIGJpdG1hcCEgKi8KKyMgZGVmaW5lIFNJR05fV0lEVEggKGd1aS5jaGFyX3dpZHRoICogMikKKworI2lmIDAJLyogbm90IHVzZWQgKi8KKyAgICB2b2lkCitndWlfbWNoX2NsZWFyc2lnbihyb3cpCisgICAgaW50CQlyb3c7Cit7CisgICAgaWYgKGd1aS5pbl91c2UpCisJWENsZWFyQXJlYShndWkuZHB5LCBndWkud2lkLCAwLCBURVhUX1kocm93KSAtIGd1aS5jaGFyX2hlaWdodCwKKwkJU0lHTl9XSURUSCwgZ3VpLmNoYXJfaGVpZ2h0LCBGQUxTRSk7Cit9CisjZW5kaWYKKworICAgIHZvaWQKK2d1aV9tY2hfZHJhd3NpZ24ocm93LCBjb2wsIHR5cGVucikKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCWNvbDsKKyAgICBpbnQJCXR5cGVucjsKK3sKKyAgICBYSW1hZ2UJKnNpZ247CisKKyAgICBpZiAoZ3VpLmluX3VzZSAmJiAoc2lnbiA9IChYSW1hZ2UgKilzaWduX2dldF9pbWFnZSh0eXBlbnIpKSAhPSBOVUxMKQorICAgIHsKKwlYQ2xlYXJBcmVhKGd1aS5kcHksIGd1aS53aWQsIFRFWFRfWChjb2wpLCBURVhUX1kocm93KSAtIHNpZ24tPmhlaWdodCwKKwkJU0lHTl9XSURUSCwgZ3VpLmNoYXJfaGVpZ2h0LCBGQUxTRSk7CisJWFB1dEltYWdlKGd1aS5kcHksIGd1aS53aWQsIGd1aS50ZXh0X2djLCBzaWduLCAwLCAwLAorCQlURVhUX1goY29sKSArIChTSUdOX1dJRFRIIC0gc2lnbi0+d2lkdGgpIC8gMiwKKwkJVEVYVF9ZKHJvdykgLSBzaWduLT5oZWlnaHQsCisJCXNpZ24tPndpZHRoLCBzaWduLT5oZWlnaHQpOworICAgIH0KK30KKworICAgIHZvaWQgKgorZ3VpX21jaF9yZWdpc3Rlcl9zaWduKHNpZ25maWxlKQorICAgIGNoYXJfdQkgICAgKnNpZ25maWxlOworeworICAgIFhwbUF0dHJpYnV0ZXMgICBhdHRyczsKKyAgICBYSW1hZ2UJICAgICpzaWduOworICAgIGludAkJICAgIHN0YXR1czsKKworICAgIC8qCisgICAgICogU2V0dXAgdGhlIGNvbG9yIHN1YnN0aXR1dGlvbiB0YWJsZS4KKyAgICAgKi8KKyAgICBzaWduID0gTlVMTDsKKyAgICBpZiAoc2lnbmZpbGVbMF0gIT0gTlVMICYmIHNpZ25maWxlWzBdICE9ICctJykKKyAgICB7CisJc2lnbiA9IChYSW1hZ2UgKilhbGxvYyhzaXplb2YoWEltYWdlKSk7CisJaWYgKHNpZ24gIT0gTlVMTCkKKwl7CisJICAgIFhwbUNvbG9yU3ltYm9sIGNvbG9yWzVdID0KKwkgICAgeworCQl7Im5vbmUiLCBOVUxMLCAwfSwKKwkJeyJpY29uQ29sb3IxIiwgTlVMTCwgMH0sCisJCXsiYm90dG9tU2hhZG93Q29sb3IiLCBOVUxMLCAwfSwKKwkJeyJ0b3BTaGFkb3dDb2xvciIsIE5VTEwsIDB9LAorCQl7InNlbGVjdENvbG9yIiwgTlVMTCwgMH0KKwkgICAgfTsKKwkgICAgYXR0cnMudmFsdWVtYXNrID0gWHBtQ29sb3JTeW1ib2xzOworCSAgICBhdHRycy5udW1zeW1ib2xzID0gMjsKKwkgICAgYXR0cnMuY29sb3JzeW1ib2xzID0gY29sb3I7CisJICAgIGF0dHJzLmNvbG9yc3ltYm9sc1swXS5waXhlbCA9IGd1aS5iYWNrX3BpeGVsOworCSAgICBhdHRycy5jb2xvcnN5bWJvbHNbMV0ucGl4ZWwgPSBndWkubm9ybV9waXhlbDsKKwkgICAgc3RhdHVzID0gWHBtUmVhZEZpbGVUb0ltYWdlKGd1aS5kcHksIChjaGFyICopc2lnbmZpbGUsCisJCQkJCQkJICZzaWduLCBOVUxMLCAmYXR0cnMpOworCisJICAgIGlmIChzdGF0dXMgPT0gMCkKKwkgICAgeworCQkvKiBTaWduIHdpZHRoIGlzIGZpeGVkIGF0IHR3byBjb2x1bW5zIG5vdy4KKwkJaWYgKHNpZ24tPndpZHRoID4gZ3VpLnNpZ25fd2lkdGgpCisJCSAgICBndWkuc2lnbl93aWR0aCA9IHNpZ24tPndpZHRoICsgODsgKi8KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJdmltX2ZyZWUoc2lnbik7CisJCXNpZ24gPSBOVUxMOworCQlFTVNHKF8oZV9zaWduZGF0YSkpOworCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVybiAodm9pZCAqKXNpZ247Cit9CisKKyAgICB2b2lkCitndWlfbWNoX2Rlc3Ryb3lfc2lnbihzaWduKQorICAgIHZvaWQgKnNpZ247Cit7CisgICAgWEZyZWUoKChYSW1hZ2UgKilzaWduKS0+ZGF0YSk7CisgICAgdmltX2ZyZWUoc2lnbik7Cit9CisjZW5kaWYKKworCisjaWZkZWYgRkVBVF9NT1VTRVNIQVBFCisvKiBUaGUgbGFzdCBzZXQgbW91c2UgcG9pbnRlciBzaGFwZSBpcyByZW1lbWJlcmVkLCB0byBiZSB1c2VkIHdoZW4gaXQgZ29lcworICogZnJvbSBoaWRkZW4gdG8gbm90IGhpZGRlbi4gKi8KK3N0YXRpYyBpbnQgbGFzdF9zaGFwZSA9IDA7CisjZW5kaWYKKworLyoKKyAqIFVzZSB0aGUgYmxhbmsgbW91c2UgcG9pbnRlciBvciBub3QuCisgKi8KKyAgICB2b2lkCitndWlfbWNoX21vdXNlaGlkZShoaWRlKQorICAgIGludAkJaGlkZTsJLyogVFJVRSA9IHVzZSBibGFuayBwdHIsIEZBTFNFID0gdXNlIHBhcmVudCBwdHIgKi8KK3sKKyAgICBpZiAoZ3VpLnBvaW50ZXJfaGlkZGVuICE9IGhpZGUpCisgICAgeworCWd1aS5wb2ludGVyX2hpZGRlbiA9IGhpZGU7CisJaWYgKGhpZGUpCisJICAgIFhEZWZpbmVDdXJzb3IoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLmJsYW5rX3BvaW50ZXIpOworCWVsc2UKKyNpZmRlZiBGRUFUX01PVVNFU0hBUEUKKwkgICAgbWNoX3NldF9tb3VzZV9zaGFwZShsYXN0X3NoYXBlKTsKKyNlbHNlCisJICAgIFhVbmRlZmluZUN1cnNvcihndWkuZHB5LCBndWkud2lkKTsKKyNlbmRpZgorICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9NT1VTRVNIQVBFKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKiBUYWJsZSBmb3Igc2hhcGUgSURzLiAgS2VlcCBpbiBzeW5jIHdpdGggdGhlIG1zaGFwZV9uYW1lc1tdIHRhYmxlIGluCisgKiBtaXNjMi5jISAqLworc3RhdGljIGludCBtc2hhcGVfaWRzW10gPQoreworICAgIFhDX2xlZnRfcHRyLAkJLyogYXJyb3cgKi8KKyAgICAwLAkJCQkvKiBibGFuayAqLworICAgIFhDX3h0ZXJtLAkJCS8qIGJlYW0gKi8KKyAgICBYQ19zYl92X2RvdWJsZV9hcnJvdywJLyogdXBkb3duICovCisgICAgWENfc2l6aW5nLAkJCS8qIHVkc2l6aW5nICovCisgICAgWENfc2JfaF9kb3VibGVfYXJyb3csCS8qIGxlZnRyaWdodCAqLworICAgIFhDX3NpemluZywJCQkvKiBscnNpemluZyAqLworICAgIFhDX3dhdGNoLAkJCS8qIGJ1c3kgKi8KKyAgICBYQ19YX2N1cnNvciwJCS8qIG5vICovCisgICAgWENfY3Jvc3NoYWlyLAkJLyogY3Jvc3NoYWlyICovCisgICAgWENfaGFuZDEsCQkJLyogaGFuZDEgKi8KKyAgICBYQ19oYW5kMiwJCQkvKiBoYW5kMiAqLworICAgIFhDX3BlbmNpbCwJCQkvKiBwZW5jaWwgKi8KKyAgICBYQ19xdWVzdGlvbl9hcnJvdywJCS8qIHF1ZXN0aW9uICovCisgICAgWENfcmlnaHRfcHRyLAkJLyogcmlnaHQtYXJyb3cgKi8KKyAgICBYQ19jZW50ZXJfcHRyLAkJLyogdXAtYXJyb3cgKi8KKyAgICBYQ19sZWZ0X3B0cgkJCS8qIGxhc3Qgb25lICovCit9OworCisgICAgdm9pZAorbWNoX3NldF9tb3VzZV9zaGFwZShzaGFwZSkKKyAgICBpbnQJc2hhcGU7Cit7CisgICAgaW50CSAgICBpZDsKKworICAgIGlmICghZ3VpLmluX3VzZSkKKwlyZXR1cm47CisKKyAgICBpZiAoc2hhcGUgPT0gTVNIQVBFX0hJREUgfHwgZ3VpLnBvaW50ZXJfaGlkZGVuKQorCVhEZWZpbmVDdXJzb3IoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLmJsYW5rX3BvaW50ZXIpOworICAgIGVsc2UKKyAgICB7CisJaWYgKHNoYXBlID49IE1TSEFQRV9OVU1CRVJFRCkKKwl7CisJICAgIGlkID0gc2hhcGUgLSBNU0hBUEVfTlVNQkVSRUQ7CisJICAgIGlmIChpZCA+PSBYQ19udW1fZ2x5cGhzKQorCQlpZCA9IFhDX2xlZnRfcHRyOworCSAgICBlbHNlCisJCWlkICY9IH4xOwkvKiB0aGV5IGFyZSBhbHdheXMgZXZlbiAod2h5PykgKi8KKwl9CisJZWxzZQorCSAgICBpZCA9IG1zaGFwZV9pZHNbc2hhcGVdOworCisJWERlZmluZUN1cnNvcihndWkuZHB5LCBndWkud2lkLCBYQ3JlYXRlRm9udEN1cnNvcihndWkuZHB5LCBpZCkpOworICAgIH0KKyAgICBpZiAoc2hhcGUgIT0gTVNIQVBFX0hJREUpCisJbGFzdF9zaGFwZSA9IHNoYXBlOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfVE9PTEJBUikgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBJY29ucyB1c2VkIGJ5IHRoZSB0b29sYmFyIGNvZGUuCisgKi8KKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX25ldy54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9vcGVuLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX2Nsb3NlLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX3NhdmUueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfcHJpbnQueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfY3V0LnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX2NvcHkueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfcGFzdGUueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfZmluZC54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9maW5kX25leHQueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfZmluZF9wcmV2LnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX2ZpbmRfaGVscC54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9leGl0LnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX3VuZG8ueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfcmVkby54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9oZWxwLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21hY3JvLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21ha2UueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfc2F2ZV9hbGwueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfanVtcC54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9jdGFncy54cG0iCisjaW5jbHVkZSAiLi4vcGl4bWFwcy90Yl9sb2FkX3Nlc3Npb24ueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfc2F2ZV9zZXNzaW9uLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX25ld19zZXNzaW9uLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX2JsYW5rLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21heGltaXplLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX3NwbGl0LnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21pbmltaXplLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX3NoZWxsLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX3JlcGxhY2UueHBtIgorI2luY2x1ZGUgIi4uL3BpeG1hcHMvdGJfdnNwbGl0LnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21heHdpZHRoLnhwbSIKKyNpbmNsdWRlICIuLi9waXhtYXBzL3RiX21pbndpZHRoLnhwbSIKKworLyoKKyAqIFRob3NlIGFyZSB0aGUgcGl4bWFwcyB1c2VkIGZvciB0aGUgZGVmYXVsdCBidXR0b25zLgorICovCitzdGF0aWMgY2hhciAqKihidWlsdF9pbl9waXhtYXBzW10pID0KK3sKKyAgICB0Yl9uZXdfeHBtLAorICAgIHRiX29wZW5feHBtLAorICAgIHRiX3NhdmVfeHBtLAorICAgIHRiX3VuZG9feHBtLAorICAgIHRiX3JlZG9feHBtLAorICAgIHRiX2N1dF94cG0sCisgICAgdGJfY29weV94cG0sCisgICAgdGJfcGFzdGVfeHBtLAorICAgIHRiX3ByaW50X3hwbSwKKyAgICB0Yl9oZWxwX3hwbSwKKyAgICB0Yl9maW5kX3hwbSwKKyAgICB0Yl9zYXZlX2FsbF94cG0sCisgICAgdGJfc2F2ZV9zZXNzaW9uX3hwbSwKKyAgICB0Yl9uZXdfc2Vzc2lvbl94cG0sCisgICAgdGJfbG9hZF9zZXNzaW9uX3hwbSwKKyAgICB0Yl9tYWNyb194cG0sCisgICAgdGJfcmVwbGFjZV94cG0sCisgICAgdGJfY2xvc2VfeHBtLAorICAgIHRiX21heGltaXplX3hwbSwKKyAgICB0Yl9taW5pbWl6ZV94cG0sCisgICAgdGJfc3BsaXRfeHBtLAorICAgIHRiX3NoZWxsX3hwbSwKKyAgICB0Yl9maW5kX3ByZXZfeHBtLAorICAgIHRiX2ZpbmRfbmV4dF94cG0sCisgICAgdGJfZmluZF9oZWxwX3hwbSwKKyAgICB0Yl9tYWtlX3hwbSwKKyAgICB0Yl9qdW1wX3hwbSwKKyAgICB0Yl9jdGFnc194cG0sCisgICAgdGJfdnNwbGl0X3hwbSwKKyAgICB0Yl9tYXh3aWR0aF94cG0sCisgICAgdGJfbWlud2lkdGhfeHBtLAorICAgIHRiX2V4aXRfeHBtCit9OworCitzdGF0aWMgdm9pZCBjcmVhdGVYcG1JbWFnZXMgX19BUkdTKChjaGFyX3UgKnBhdGgsIGNoYXIgKip4cG0sIFBpeG1hcCAqc2VuLCBQaXhtYXAgKmluc2VuKSk7CisKKy8qCisgKiBBbGxvY2F0ZWQgYSBwaXhtYXAgZm9yIHRvb2xiYXIgbWVudSAibWVudSIuCisgKiBSZXR1cm4gaW4gInNlbiIgYW5kICJpbnNlbiIuICAiaW5zZW4iIGNhbiBiZSBOVUxMLgorICovCisgICAgdm9pZAorZ2V0X3Rvb2xiYXJfcGl4bWFwKG1lbnUsIHNlbiwgaW5zZW4pCisgICAgdmltbWVudV9UCSptZW51OworICAgIFBpeG1hcAkqc2VuOworICAgIFBpeG1hcAkqaW5zZW47Cit7CisgICAgY2hhcl91CWJ1ZltNQVhQQVRITF07CQkvKiBidWZmZXIgc3RvcmluZyBleHBhbmRlZCBwYXRobmFtZSAqLworICAgIGNoYXIJKip4cG0gPSBOVUxMOwkJLyogeHBtIGFycmF5ICovCisKKyAgICBidWZbMF0gPSBOVUw7CQkJLyogc3RhcnQgd2l0aCBOVUxMIHBhdGggKi8KKworICAgIGlmIChtZW51LT5pY29uZmlsZSAhPSBOVUxMKQorICAgIHsKKwkvKiBVc2UgdGhlICJpY29uPSIgIGFyZ3VtZW50LiAqLworCWd1aV9maW5kX2ljb25maWxlKG1lbnUtPmljb25maWxlLCBidWYsICJ4cG0iKTsKKwljcmVhdGVYcG1JbWFnZXMoYnVmLCBOVUxMLCBzZW4sIGluc2VuKTsKKworCS8qIElmIGl0IGZhaWxlZCwgdHJ5IHVzaW5nIHRoZSBtZW51IG5hbWUuICovCisJaWYgKCpzZW4gPT0gKFBpeG1hcCkwICYmIGd1aV9maW5kX2JpdG1hcChtZW51LT5uYW1lLCBidWYsICJ4cG0iKSA9PSBPSykKKwkgICAgY3JlYXRlWHBtSW1hZ2VzKGJ1ZiwgTlVMTCwgc2VuLCBpbnNlbik7CisJaWYgKCpzZW4gIT0gKFBpeG1hcCkwKQorCSAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1lbnUtPmljb25fYnVpbHRpbiB8fCBndWlfZmluZF9iaXRtYXAobWVudS0+bmFtZSwgYnVmLCAieHBtIikgPT0gRkFJTCkKKyAgICB7CisJaWYgKG1lbnUtPmljb25pZHggPj0gMCAmJiBtZW51LT5pY29uaWR4CisJCSAgIDwgKHNpemVvZihidWlsdF9pbl9waXhtYXBzKSAvIHNpemVvZihidWlsdF9pbl9waXhtYXBzWzBdKSkpCisJICAgIHhwbSA9IGJ1aWx0X2luX3BpeG1hcHNbbWVudS0+aWNvbmlkeF07CisJZWxzZQorCSAgICB4cG0gPSB0Yl9ibGFua194cG07CisgICAgfQorCisgICAgaWYgKHhwbSAhPSBOVUxMIHx8IGJ1ZlswXSAhPSBOVUwpCisJY3JlYXRlWHBtSW1hZ2VzKGJ1ZiwgeHBtLCBzZW4sIGluc2VuKTsKK30KKworLyogSW5kaWNlcyBmb3IgbmFtZWQgY29sb3JzICovCisjZGVmaW5lIEJBQ0tHUk9VTkQJMAorI2RlZmluZSBGT1JFR1JPVU5ECTEKKyNkZWZpbmUgQk9UVE9NX1NIQURPVwkyCisjZGVmaW5lIFRPUF9TSEFET1cJMworI2RlZmluZSBISUdITElHSFQJNAorCisvKgorICogUmVhZCBhbiBYcG0gZmlsZSwgZG9pbmcgY29sb3Igc3Vic3RpdHV0aW9ucyBmb3IgdGhlIGZvcmVncm91bmQgYW5kCisgKiBiYWNrZ3JvdW5kIGNvbG9ycy4gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcmVhZGluZyBhIGNvbG9yIHhwbSBmaWxlLAorICogZHJvcCBiYWNrIGFuZCByZWFkIHRoZSBtb25vY2hyb21lIGZpbGUuIElmIHN1Y2Nlc3NmdWwsIGNyZWF0ZSB0aGUKKyAqIGluc2Vuc2l0aXZlIFBpeG1hcCB0b28uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY3JlYXRlWHBtSW1hZ2VzKHBhdGgsIHhwbSwgc2VuLCBpbnNlbikKKyAgICBjaGFyX3UJKnBhdGg7CisgICAgY2hhcgkqKnhwbTsKKyAgICBQaXhtYXAJKnNlbjsKKyAgICBQaXhtYXAJKmluc2VuOwkgICAgLyogY2FuIGJlIE5VTEwgKi8KK3sKKyAgICBXaW5kb3cJcm9vdFdpbmRvdzsKKyAgICBYcG1BdHRyaWJ1dGVzIGF0dHJzOworICAgIFhwbUNvbG9yU3ltYm9sIGNvbG9yWzVdID0KKyAgICB7CisJeyJub25lIiwgIm5vbmUiLCAwfSwKKwl7Imljb25Db2xvcjEiLCBOVUxMLCAwfSwKKwl7ImJvdHRvbVNoYWRvd0NvbG9yIiwgTlVMTCwgMH0sCisJeyJ0b3BTaGFkb3dDb2xvciIsIE5VTEwsIDB9LAorCXsic2VsZWN0Q29sb3IiLCBOVUxMLCAwfQorICAgIH07CisgICAgaW50CQlzY3JlZW5OdW07CisgICAgaW50CQlzdGF0dXM7CisgICAgUGl4bWFwCW1hc2s7CisgICAgUGl4bWFwCW1hcDsKKworICAgIGd1aV9tY2hfZ2V0X3Rvb2xiYXJfY29sb3JzKAorCSAgICAmY29sb3JbQkFDS0dST1VORF0ucGl4ZWwsCisJICAgICZjb2xvcltGT1JFR1JPVU5EXS5waXhlbCwKKwkgICAgJmNvbG9yW0JPVFRPTV9TSEFET1ddLnBpeGVsLAorCSAgICAmY29sb3JbVE9QX1NIQURPV10ucGl4ZWwsCisJICAgICZjb2xvcltISUdITElHSFRdLnBpeGVsKTsKKworICAgIC8qIFNldHVwIHRoZSBjb2xvciBzdWJzaXRpdHV0aW9uIHRhYmxlICovCisgICAgYXR0cnMudmFsdWVtYXNrID0gWHBtQ29sb3JTeW1ib2xzOworICAgIGF0dHJzLmNvbG9yc3ltYm9scyA9IGNvbG9yOworICAgIGF0dHJzLm51bXN5bWJvbHMgPSA1OworCisgICAgc2NyZWVuTnVtID0gRGVmYXVsdFNjcmVlbihndWkuZHB5KTsKKyAgICByb290V2luZG93ID0gUm9vdFdpbmRvdyhndWkuZHB5LCBzY3JlZW5OdW0pOworCisgICAgLyogQ3JlYXRlIHRoZSAic2Vuc2l0aXZlIiBwaXhtYXAgKi8KKyAgICBpZiAoeHBtICE9IE5VTEwpCisJc3RhdHVzID0gWHBtQ3JlYXRlUGl4bWFwRnJvbURhdGEoZ3VpLmRweSwgcm9vdFdpbmRvdywgeHBtLAorCQkJCQkJCSAmbWFwLCAmbWFzaywgJmF0dHJzKTsKKyAgICBlbHNlCisJc3RhdHVzID0gWHBtUmVhZEZpbGVUb1BpeG1hcChndWkuZHB5LCByb290V2luZG93LCAoY2hhciAqKXBhdGgsCisJCQkJCQkJICZtYXAsICZtYXNrLCAmYXR0cnMpOworICAgIGlmIChzdGF0dXMgPT0gWHBtU3VjY2VzcyAmJiBtYXAgIT0gMCkKKyAgICB7CisJWEdDVmFsdWVzICAgZ2N2YWx1ZXM7CisJR0MJICAgIGJhY2tfZ2M7CisJR0MJICAgIG1hc2tfZ2M7CisKKwkvKiBOZWVkIHRvIGNyZWF0ZSBuZXcgUGl4bWFwcyB3aXRoIHRoZSBtYXNrIGFwcGxpZWQuICovCisJZ2N2YWx1ZXMuZm9yZWdyb3VuZCA9IGNvbG9yW0JBQ0tHUk9VTkRdLnBpeGVsOworCWJhY2tfZ2MgPSBYQ3JlYXRlR0MoZ3VpLmRweSwgbWFwLCBHQ0ZvcmVncm91bmQsICZnY3ZhbHVlcyk7CisJbWFza19nYyA9IFhDcmVhdGVHQyhndWkuZHB5LCBtYXAsIEdDRm9yZWdyb3VuZCwgJmdjdmFsdWVzKTsKKwlYU2V0Q2xpcE1hc2soZ3VpLmRweSwgbWFza19nYywgbWFzayk7CisKKwkvKiBDcmVhdGUgdGhlICJzZW5zaXRpdmUiIHBpeG1hcC4gKi8KKwkqc2VuID0gWENyZWF0ZVBpeG1hcChndWkuZHB5LCByb290V2luZG93LAorCQkgYXR0cnMud2lkdGgsIGF0dHJzLmhlaWdodCwKKwkJIERlZmF1bHREZXB0aChndWkuZHB5LCBzY3JlZW5OdW0pKTsKKwlYRmlsbFJlY3RhbmdsZShndWkuZHB5LCAqc2VuLCBiYWNrX2djLCAwLCAwLAorCQlhdHRycy53aWR0aCwgYXR0cnMuaGVpZ2h0KTsKKwlYQ29weUFyZWEoZ3VpLmRweSwgbWFwLCAqc2VuLCBtYXNrX2djLCAwLCAwLAorCQlhdHRycy53aWR0aCwgYXR0cnMuaGVpZ2h0LCAwLCAwKTsKKworI2lmZGVmIEZFQVRfR1VJX01PVElGCS8qIG5vdCB1c2VkIGZvciBBdGhlbmEgKi8KKwlpZiAoaW5zZW4gIT0gTlVMTCkKKwl7CisJICAgIGludAkJeCwgeTsKKwkgICAgaW50CQlzdGFydFg7CisKKwkgICAgLyogQ3JlYXRlIHRoZSAiaW5zZW5zaXRpdmUiIHBpeG1hcC4gIEl0J3MgYSBjb3B5IG9mIHRoZSAic2Vuc2l0aXZlIgorCSAgICAgKiBwaXhtYXAgd2l0aCBoYWxmIHRoZSBwaXhlbHMgc2V0IHRvIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLiAqLworCSAgICAqaW5zZW4gPSBYQ3JlYXRlUGl4bWFwKGd1aS5kcHksIHJvb3RXaW5kb3csCisJCSAgICBhdHRycy53aWR0aCwgYXR0cnMuaGVpZ2h0LAorCQkgICAgRGVmYXVsdERlcHRoKGd1aS5kcHksIHNjcmVlbk51bSkpOworCSAgICBYQ29weUFyZWEoZ3VpLmRweSwgKnNlbiwgKmluc2VuLCBiYWNrX2djLCAwLCAwLAorCQkgICAgYXR0cnMud2lkdGgsIGF0dHJzLmhlaWdodCwgMCwgMCk7CisJICAgIGZvciAoeSA9IDA7IHkgPCBhdHRycy5oZWlnaHQ7IHkrKykKKwkgICAgeworCQlpZiAoeSAlIDIgPT0gMCkKKwkJICAgIHN0YXJ0WCA9IDA7CisJCWVsc2UKKwkJICAgIHN0YXJ0WCA9IDE7CisJCWZvciAoeCA9IHN0YXJ0WDsgeCA8IGF0dHJzLndpZHRoOyB4ICs9IDIpCisJCSAgICBYRHJhd1BvaW50KGd1aS5kcHksICppbnNlbiwgYmFja19nYywgeCwgeSk7CisJICAgIH0KKworCX0KKyNlbmRpZgorCVhGcmVlR0MoZ3VpLmRweSwgYmFja19nYyk7CisJWEZyZWVHQyhndWkuZHB5LCBtYXNrX2djKTsKKwlYRnJlZVBpeG1hcChndWkuZHB5LCBtYXApOworICAgIH0KKyAgICBlbHNlCisgICAgeworCSpzZW4gPSAwOworCWlmIChpbnNlbiAhPSBOVUxMKQorCSAgICAqaW5zZW4gPSAwOworICAgIH0KKworICAgIFhwbUZyZWVBdHRyaWJ1dGVzKCZhdHRycyk7Cit9CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZFQVRfVE9PTEJBUikgJiYgZGVmaW5lZChGRUFUX0JFVkFMKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBTZXQgdGhlIGJhbGxvb24tZXZhbCB1c2VkIGZvciB0aGUgdG9vbHRpcCBvZiBhIHRvb2xiYXIgbWVudSBpdGVtLgorICogVGhlIGNoZWNrIGZvciBhIG5vbi10b29sYmFyIGl0ZW0gd2FzIGFkZGVkLCBiZWNhdXNlIHRoZXJlIGlzIGEgY3Jhc2ggd2hlbgorICogcGFzc2luZyBhIG5vcm1hbCBtZW51IGl0ZW0gaGVyZS4gIENhbid0IGV4cGxhaW4gdGhhdCwgYnV0IGJldHRlciBhdm9pZCBpdC4KKyAqLworICAgIHZvaWQKK2d1aV9tY2hfbWVudV9zZXRfdGlwKG1lbnUpCisgICAgdmltbWVudV9UCSptZW51OworeworICAgIGlmIChtZW51LT5pZCAhPSBOVUxMICYmIG1lbnUtPnBhcmVudCAhPSBOVUxMCisJCQkJICAgICAgICYmIG1lbnVfaXNfdG9vbGJhcihtZW51LT5wYXJlbnQtPm5hbWUpKQorICAgIHsKKwkvKiBBbHdheXMgZGVzdHJveSBhbmQgY3JlYXRlIHRoZSBiYWxsb29uLCBpbiBjYXNlIHRoZSBzdHJpbmcgd2FzCisJICogY2hhbmdlZC4gKi8KKwlpZiAobWVudS0+dGlwICE9IE5VTEwpCisJeworCSAgICBndWlfbWNoX2Rlc3Ryb3lfYmV2YWxfYXJlYShtZW51LT50aXApOworCSAgICBtZW51LT50aXAgPSBOVUxMOworCX0KKwlpZiAobWVudS0+c3RyaW5nc1tNRU5VX0lOREVYX1RJUF0gIT0gTlVMTCkKKwkgICAgbWVudS0+dGlwID0gZ3VpX21jaF9jcmVhdGVfYmV2YWxfYXJlYSgKKwkJICAgIG1lbnUtPmlkLAorCQkgICAgbWVudS0+c3RyaW5nc1tNRU5VX0lOREVYX1RJUF0sCisJCSAgICBOVUxMLAorCQkgICAgTlVMTCk7CisgICAgfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZ3VpdzE2cmMuaCBiL3NyYy9ndWl3MTZyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNTUyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZ3VpdzE2cmMuaApAQCAtMCwwICsxLDE3IEBACisKKyNkZWZpbmUJSURSX1ZJTSAxNTAKKworI2RlZmluZSBJRFJfVklNX0VSUk9SCTE1MQorI2RlZmluZSBJRFJfVklNX0FMRVJUCTE1MgorI2RlZmluZSBJRFJfVklNX0lORk8JMTUzCisjZGVmaW5lIElEUl9WSU1fUVVFU1RJT04gMTU0CisKKyNkZWZpbmUgSURSX0lDT0JVRERZQkFTRQkJCTIwMAorCisjZGVmaW5lIElEUl9JQ09CVUREWV9ERUYxCQkJKElEUl9JQ09CVUREWUJBU0UgKyAzKQorI2RlZmluZSBJRFJfSUNPQlVERFlfREVGMgkJCShJRFJfSUNPQlVERFlCQVNFICsgMCkKKyNkZWZpbmUgSURSX0lDT0JVRERZX0RFRjMJCQkoSURSX0lDT0JVRERZQkFTRSArIDEpCisjZGVmaW5lIElEUl9JQ09CVUREWV9ERUY0CQkJKElEUl9JQ09CVUREWUJBU0UgKyAyKQorCisjZGVmaW5lIElEUl9JQ09CVUREWV9HUklOCQkJKElEUl9JQ09CVUREWUJBU0UgKyA0KQorI2RlZmluZSBJRFJfSUNPQlVERFlfQUxBUk0JCQkoSURSX0lDT0JVRERZQkFTRSArIDUpCmRpZmYgLS1naXQgYS9zcmMvZ3ZpbS5leGUubW5mIGIvc3JjL2d2aW0uZXhlLm1uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDM1OGMxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2d2aW0uZXhlLm1uZgpAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+Cis8YXNzZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIiBtYW5pZmVzdFZlcnNpb249IjEuMCI+CisgIDxhc3NlbWJseUlkZW50aXR5CisgICAgcHJvY2Vzc29yQXJjaGl0ZWN0dXJlPSJYODYiCisgICAgdmVyc2lvbj0iNi4yLjAuMCIKKyAgICB0eXBlPSJ3aW4zMiIKKyAgICBuYW1lPSJWaW0iCisgIC8+CisgIDxkZXNjcmlwdGlvbj5WaSBJbXByb3ZlZCAtIEEgVGV4dCBFZGl0b3I8L2Rlc2NyaXB0aW9uPgorICA8ZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW50QXNzZW1ibHk+CisgICAgICA8YXNzZW1ibHlJZGVudGl0eQorICAgICAgICB0eXBlPSJ3aW4zMiIKKyAgICAgICAgbmFtZT0iTWljcm9zb2Z0LldpbmRvd3MuQ29tbW9uLUNvbnRyb2xzIgorICAgICAgICB2ZXJzaW9uPSI2LjAuMC4wIgorICAgICAgICBwdWJsaWNLZXlUb2tlbj0iNjU5NWI2NDE0NGNjZjFkZiIKKyAgICAgICAgbGFuZ3VhZ2U9IioiCisgICAgICAgIHByb2Nlc3NvckFyY2hpdGVjdHVyZT0iWDg2IgorICAgICAgLz4KKyAgICA8L2RlcGVuZGVudEFzc2VtYmx5PgorICA8L2RlcGVuZGVuY3k+Cis8L2Fzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvc3JjL2hhbmd1bGluLmMgYi9zcmMvaGFuZ3VsaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWUxNmExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2hhbmd1bGluLmMKQEAgLTAsMCArMSwxNjIxIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmbmRlZiBIQU5HVUxfREVGQVVMVF9LRVlCT0FSRAorIyBkZWZpbmUgSEFOR1VMX0RFRkFVTFRfS0VZQk9BUkQgMworI2VuZGlmCisKKyNkZWZpbmUgQVVUT01BVEFfTkVXCQkwCisjZGVmaW5lIEFVVE9NQVRBX0NPUlJFQ1QJMQorI2RlZmluZSBBVVRPTUFUQV9TUEVDSUFMCTIKKyNkZWZpbmUgQVVUT01BVEFfQ09SUkVDVF9ORVcJMworI2RlZmluZSBBVVRPTUFUQV9FUlJPUgkJNAorI2RlZmluZSBBVVRPTUFUQV9OVUxMCQk1CisKKyNkZWZpbmUgRl9GCTB4MQkvKiDDyry6IChpbml0aWFsIHNvdW5kKSAqLworI2RlZmluZSBGX00JMHgyCS8qIMHfvLogKG1lZGlhbCB2b3dlbCkgKi8KKyNkZWZpbmUgRl9MCTB4NAkvKiDBvry6IChmaW5hbCBjb25zb25hbnQpICovCisjZGVmaW5lIEZfQQkweDgJLyogQVNDSUkgKi8KKyNkZWZpbmUgRl9OVUxMIDEKKyNkZWZpbmUgTV9OVUxMIDIKKyNkZWZpbmUgTF9OVUxMIDEKKworc3RhdGljIGludCBoYW5ndWxfaW5wdXRfc3RhdGUgPSAwOworc3RhdGljIGludCBmPUZfTlVMTCwgbT1NX05VTEwsIGw9TF9OVUxMOworc3RhdGljIGludCBzcD0wOworc3RhdGljIGNoYXJfdSBzdGFja1syMF0gPSB7MH07CitzdGF0aWMgaW50IGxhc3RfbCA9IC0xLCBsYXN0X2xsID0gLTE7CitzdGF0aWMgaW50IGhhbmd1bF9rZXlib2FyZF90eXBlID0gSEFOR1VMX0RFRkFVTFRfS0VZQk9BUkQ7CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfa3NfdG9fMyBfX0FSR1MoKGNvbnN0IGNoYXJfdSAqc3JjLCBpbnQgKmZwLCBpbnQgKm1wLCBpbnQgKmxwKSk7CitzdGF0aWMgaW50IGNvbnZlcnRfM190b19rcyBfX0FSR1MoKGludCBmdiwgaW50IG12LCBpbnQgbHYsIGNoYXJfdSAqZGVzKSk7CitzdGF0aWMgaW50IGhhbmd1bF9hdXRvbWF0YTIgX19BUkdTKChjaGFyX3UgKmJ1ZiwgdW5zaWduZWQgaW50ICpjKSk7CitzdGF0aWMgaW50IGhhbmd1bF9hdXRvbWF0YTMgX19BUkdTKChjaGFyX3UgKmJ1ZiwgdW5zaWduZWQgaW50ICpjKSk7CisKKyNkZWZpbmUgcHVzaCh4KQkge3N0YWNrWyBzcCsrIF0gPSAqKHgpOyBzdGFja1tzcCsrXSA9ICooKHgpKzEpO30KKyNkZWZpbmUgcG9wKHgpCSB7KigoeCkgKyAxKSA9IHN0YWNrWy0tc3BdOyAqKHgpID0gc3RhY2tbLS1zcF07fQorI2RlZmluZSBxdWVyeSh4KSB7KigoeCkgKyAxKSA9IHN0YWNrW3NwIC0gMV07ICooeCkgPSBzdGFja1tzcCAtIDJdO30KKworI2RlZmluZSBjb252ZXJ0XzNfdG9fY29kZSBjb252ZXJ0XzNfdG9fa3MKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiogMyC5+r3EwNrGx8C7IMCnx9Egt+fGviAgKFJvdXRpbmVzIGZvciAzIGJ1bHNpayBrZXlib2FyZCkgKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIDMgufq9xL+hvK0gwNrGxyC6r8ivICgzIGJ1bHNpayBrZXlib2FyZCBjb252ZXJzaW9uKSAqLworCitzdGF0aWMgY2hhcl91IHZhbHVlX3RhYmxlX2Zvcl8zW10gPQoreworICAgIDI0ICAsICciJyAsICcjJyAsICckJyAsICclJyAsICcmJyAsCS8qICEgIiAjICQgJSAmICovCisgICAgMTggICwgJygnICwgJyknICwgJyonICwgJysnICwgJywnICwJLyogJyAoICkgKiArICwgKi8KKyAgICAnLScgLCAnLicgLCAxMyAgLCAxNyAgLCAyOSAgLCAyMiAgLAkvKiAtIC4gLyAwIDEgMiAqLworICAgIDE5ICAsIDE5ICAsIDI2ICAsIDUgICAsIDEyICAsIDI4ICAsCS8qIDMgNCA1IDYgNyA4ICovCisgICAgMjAgICwgJzonICwgOSAgICwgJzInICwgJz0nICwgJzMnICwJLyogOSA6IDsgPCA9ID4gKi8KKyAgICAnPycgLCAnQCcgLCA4ICAgLCAnIScgLCAxMSAgLCAxMCAgLAkvKiA/IEAgQSBCIEMgRCAqLworICAgIDI2ICAsIDMgICAsICcvJyAsIDM5ICAsICc4JyAsICc0JyAsCS8qIEUgRiBHIEggSSBKICovCisgICAgJzUnICwgJzYnICwgJzEnICwgJzAnICwgJzknICwgJz4nICwJLyogSyBMIE0gTiBPIFAgKi8KKyAgICAyOCAgLCA2ICAgLCA3ICAgLCAnOycgLCAnNycgLCAxNiAgLAkvKiBRIFIgUyBUIFUgViAqLworICAgIDI3ICAsIDIwICAsICc8JyAsIDI1ICAsICdbJyAsIDkyICAsCS8qIFcgWCBZIFogWyBcICovCisgICAgJ10nICwgJ14nICwgJ18nICwgJ2AnICwgMjMgICwgMjAgICwJLyogXSBeIF8gYCBhIGIgKi8KKyAgICAxMCAgLCAyOSAgLCAxMSAgLCAzICAgLCAyNyAgLCA0ICAgLAkvKiBjIGQgZSBmIGcgaCAqLworICAgIDggICAsIDEzICAsIDIgICAsIDE0ICAsIDIwICAsIDExICAsCS8qIGkgaiBrIGwgbSBuICovCisgICAgMTYgICwgMTkgICwgMjEgICwgNCAgICwgNSAgICwgNyAgICwJLyogbyBwIHEgciBzIHQgKi8KKyAgICA1ICAgLCAxMyAgLCA5ICAgLCAyICAgLCA3ICAgLCAxNyAgLAkvKiB1IHYgdyB4IHkgeiAqLworfTsKKworc3RhdGljIHNob3J0X3Uga2luZF90YWJsZV9mb3JfM1tdID0KK3sKKyAgICBGX0wsIEZfQSwgRl9BLCBGX0EsIEZfQSwgRl9BLAkvKiAhICIgIyAkICUgJiAqLworICAgIEZfRiwgRl9BLCBGX0EsIEZfQSwgRl9BLCBGX0EsCS8qICcgKCApICogKyAsICovCisgICAgRl9BLCBGX0EsIEZfTSwgRl9GLCBGX0wsIEZfTCwJLyogLSAuIC8gMCAxIDIgKi8KKyAgICBGX0wsIEZfTSwgRl9NLCBGX00sIEZfTSwgRl9NLAkvKiAzIDQgNSA2IDcgOCAqLworICAgIEZfTSwgRl9BLCBGX0YsIEZfQSwgRl9BLCBGX0EsCS8qIDkgOiA7IDwgPSA+ICovCisgICAgRl9BLCBGX0EsIEZfTCwgRl9BLCBGX0wsIEZfTCwJLyogPyBAIEEgQiBDIEQgKi8KKyAgICBGX0wsIEZfTCwgRl9BLCBGX0EsIEZfQSwgRl9BLAkvKiBFIEYgRyBIIEkgSiAqLworICAgIEZfQSwgRl9BLCBGX0EsIEZfQSwgRl9BLCBGX0EsCS8qIEsgTCBNIE4gTyBQICovCisgICAgRl9MLCBGX00sIEZfTCwgRl9BLCBGX0EsIEZfTCwJLyogUSBSIFMgVCBVIFYgKi8KKyAgICBGX0wsIEZfTCwgRl9BLCBGX0wsIEZfQSwgRl9BLAkvKiBXIFggWSBaIFsgXCAqLworICAgIEZfQSwgRl9BLCBGX0EsIEZfQSwgRl9MLCBGX00sCS8qIF0gXiBfIGAgYSBiICovCisgICAgRl9NLCBGX00sIEZfTSwgRl9NLCBGX00sIEZfRiwJLyogYyBkIGUgZiBnIGggKi8KKyAgICBGX0YsIEZfRiwgRl9GLCBGX0YsIEZfRiwgRl9GLAkvKiBpIGogayBsIG0gbiAqLworICAgIEZfRiwgRl9GLCBGX0wsIEZfTSwgRl9MLCBGX00sCS8qIG8gcCBxIHIgcyB0ICovCisgICAgRl9GLCBGX00sIEZfTCwgRl9MLCBGX0YsIEZfTCwJLyogdSB2IHcgeCB5IHogKi8KK307CisKKy8qIDMgufq9xL+hvK0gKMf2wOfDyry6LCDA1LfCv7W5rikgLT4gurnH1cPKvLogw7O4rgorICogMyBidWxzaWs6IChjdXJyZW50IGluaXRpYWwgc291bmQsIGlucHV0IGVuZ2xpc2gpIC0+IGNvbXBvdW5kIGluaXRpYWwgc291bmQuCisgKi8KKworICAgIHN0YXRpYyBpbnQKK2NvbWZjb24zKHYsIGMpCisgICAgaW50CXY7CisgICAgaW50IGM7Cit7CisgICAgaWYgKHYgPT0gMiAmJiBjID09IDIpCisJcmV0dXJuIDM7CisgICAgaWYgKHYgPT0gNSAmJiBjID09IDUpCisJcmV0dXJuIDY7CisgICAgaWYgKHYgPT0gOSAmJiBjID09IDkpCisJcmV0dXJuIDEwOworICAgIGlmICh2ID09IDExICYmIGMgPT0gMTEpCisJcmV0dXJuIDEyOworICAgIGlmICh2ID09IDE0ICYmIGMgPT0gMTQpCisJcmV0dXJuIDE1OworICAgIHJldHVybiAwOworfQorCisvKiAzILn6vcS/obytICjH9sDnuPDAvSwgwNS3wiC/tbmuKSAtPiC6ucfVILjwwL0gw7O4rgorICogMyBidWxzaWs6IChjdXJyZW50IHZvd2VsLCBpbnB1dCBlbmdsaXNoKSAtPiBjb21wb3VuZCB2b3dlbC4KKyAqLworCisgICAgc3RhdGljIGludAorY29tdm93Myh2LCBjKQorICAgIGludCB2OworICAgIGludCBjOworeworICAgIHN3aXRjaCAodikKKyAgICB7CisJY2FzZSAxMzoJCQkJCS8qIKTHICovCisJICAgIHN3aXRjaCAoYykgeworCQljYXNlIDM6CQkJCQkvKiCkx6S/ICovCisJCSAgICByZXR1cm4gMTQ7CisJCWNhc2UgNDoJCQkJCS8qIKTHpMAgKi8KKwkJICAgIHJldHVybiAxNTsKKwkJY2FzZSAyOToJCQkJLyogpMek0yAqLworCQkgICAgcmV0dXJuIDE4OworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAyMDoJCQkJCS8qIKTMICovCisJICAgIHN3aXRjaCAoYykgeworCQljYXNlIDc6CQkJCQkvKiCkzKTDICovCisJCSAgICByZXR1cm4gMjE7CisJCWNhc2UgMTA6CQkJCS8qIKTMpMQgKi8KKwkJICAgIHJldHVybiAyMjsKKwkJY2FzZSAyOToJCQkJLyogpMyk0yAqLworCQkgICAgcmV0dXJuIDIzOworCSAgICB9CisJICAgIGJyZWFrOworCisJICAgIC8qIDMgufq9xCDA2sbHwLogpNGk0yCwoSDA1sC4uce3ziAuLi4gKi8KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIDMgufq9xL+hvK0gKMf2wOcgud7Epywgv7W5rsDaIMDUt8IpIC0+ILnexKcKKyAqIDMgYnVsc2lrOiAoY3VycmVudCBwcm9wKD8pLCBpbnB1dCBlbmdsaXNoKSAtPiBwcm9wKD8pLgorICogSSB3YW50IHRvIHNheSwgdGhlICdwcm9wJyBpcyBzaW1pbGFyIHRvICdmaW5hbCBjb25zb25hbnQnLCBidXQgbm90IHZvd2VsLgorICogKEkgY2Fubm90IGZpbmQgdGhlIHJlYWwgZW5nbGlzaCBmcm9tIG15IGRpY3Rpb25hcnkuIFNvcnJ5ISkKKyAqIFZJTTogViA9IGluaXRpYWwgc291bmQsIEkgPSBtZWRpYWwgdm93ZWwsIE0gPSBmaW5hbCBjb25zb25hbnQuCisgKi8KKworICAgIHN0YXRpYyBpbnQKK2NvbWNvbjMoaywgYykKKyAgICBpbnQgazsKKyAgICBpbnQgYzsKK3sKKyAgICBzd2l0Y2ggKGspCisgICAgeworCWNhc2UgMjoJCQkJCQkvKiCkoSAqLworCSAgICBzd2l0Y2ggKGMpIHsKKwkJY2FzZSAyOgorCQkgICAgcmV0dXJuIDM7CQkJCS8qIKShpKEgKi8KKwkJY2FzZSAyMToKKwkJICAgIHJldHVybiA0OwkJCQkvKiCkoaS1ICovCisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIDU6CQkJCQkJLyogpKQgKi8KKwkgICAgc3dpdGNoIChjKSB7CisJCWNhc2UgMjQ6CQkJCS8qIKSkpLggKi8KKwkJICAgIHJldHVybiA2OworCQljYXNlIDI5OgorCQkgICAgcmV0dXJuIDc7CQkJCS8qIKSkpL4gKi8KKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgOToJCQkJCQkvKiCkqSAqLworCSAgICBzd2l0Y2ggKGMpIHsKKwkJY2FzZSAyOgkJCQkJLyogpKmkoSAqLworCQkgICAgcmV0dXJuIDEwOworCQljYXNlIDE3OgkJCQkvKiCkqaSxICovCisJCSAgICByZXR1cm4gMTE7CisJCWNhc2UgMTk6CQkJCS8qIKSppLIgKi8KKwkJICAgIHJldHVybiAxMjsKKwkJY2FzZSAyMToJCQkJLyogpKmktSAqLworCQkgICAgcmV0dXJuIDEzOworCQljYXNlIDI3OgkJCQkvKiCkqaS8ICovCisJCSAgICByZXR1cm4gMTQ7CisJCWNhc2UgMjg6CQkJCS8qIKSppL0gKi8KKwkJICAgIHJldHVybiAxNTsKKwkJY2FzZSAyOToJCQkJLyogpKmkviAqLworCQkgICAgcmV0dXJuIDE2OworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAxOToKKwkgICAgc3dpdGNoIChjKSB7CisJCWNhc2UgMjE6CQkJCS8qIKSypLUgKi8KKwkJICAgIHJldHVybiAyMDsKKwkgICAgfQorCSAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKiAyILn6vcTA2sbHwLsgwKfH0SC358a+ICAoUm91dGluZXMgZm9yIDIgYnVsc2lrIGtleWJvYXJkKSAqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIHN0YXRpYyBpbnQKK2tpbmRfdGFibGVfZm9yXzIoYykKKyAgICBpbnQgYzsKK3sKKyAgICBzdGF0aWMgY2hhcl91IHRhYmxlW10gPQorICAgIHsKKyAgICAgLyogYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCwgbSwgbiwgbywgcCwgcSwgciwgcyAqLworCTAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsCisgICAgIC8qIHQsIHUsIHYsIHcsIHgsIHksIHogKi8KKwkwLCAxLCAwLCAwLCAwLCAxLCAwCisgICAgfTsKKworICAgIGlmIChjIDw9ICdaJykKKwljIC09ICdBJzsKKyAgICBlbHNlCisJYyAtPSAnYSc7CisKKyAgICByZXR1cm4gdGFibGVbY107Cit9CisKKy8qIDIgufq9xL+hvK0gv7W5rsDaIC0+IMG2x9XH/CDDyry6ILqvyK8KKyAqICgyIGJ1bHNpazogY29udmVyc2lvbiBlbmdsaXNoIGNoYXIuIHRvIGluaXRpYWwgc291bmQgb2YgY29tcG91bmQgdHlwZSkKKyAqILDhsPo6IMPKvLrAzCC+xrTPuOkgMCAoSWYgaXQgaXMgbm90IGluaXRpYWwgc291bmQsIHJldHVybiAwKS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2Zjb24oYykKKyAgICBpbnQgYzsKK3sKKyAgICBzdGF0aWMgY2hhcl91IHRhYmxlW10gPQorICAgIHsKKwkvKkUgKi8gNiAsIC8qRiAqLyAwICwgLypHICovIDAgLCAvKkggKi8gMCAsIC8qSSAqLyAwICwgLypKICovIDAgLCAvKksgKi8gMCAsCisJLypMICovIDAgLCAvKk0gKi8gMCAsIC8qTiAqLyAwICwgLypPICovIDAgLCAvKlAgKi8gMCAsIC8qUSAqLyAxMCwgLypSICovIDMgLAorCS8qUyAqLyAwICwgLypUICovIDEyLCAvKlUgKi8gMCAsIC8qViAqLyAwICwgLypXICovIDE1LCAvKlggKi8gMCAsIC8qWSAqLyAwICwKKwkvKlogKi8gMCAsIC8qWyAqLyAwICwgLypcICovIDAgLCAvKl0gKi8gMCAsIC8qXiAqLyAwICwgLypfICovIDAgLCAvKmAgKi8gMCAsCisJLyphICovIDggLCAvKmIgKi8gMCAsIC8qYyAqLyAxNiwgLypkICovIDEzLCAvKmUgKi8gNSAsIC8qZiAqLyA3ICwgLypnICovIDIwLAorCS8qaCAqLyAwICwgLyppICovIDAgLCAvKmogKi8gMCAsIC8qayAqLyAwICwgLypsICovIDAgLCAvKm0gKi8gMCAsIC8qbiAqLyAwICwKKwkvKm8gKi8gMCAsIC8qcCAqLyAwICwgLypxICovIDkgLCAvKnIgKi8gMiAsIC8qcyAqLyA0ICwgLyp0ICovIDExLCAvKnUgKi8gMCAsCisJLyp2ICovIDE5LCAvKncgKi8gMTQsIC8qeCAqLyAxOCwgLyp5ICovIDAgLCAvKnogKi8gMTcKKyAgICB9OworCisgICAgaWYgKGMgPCAnRScgfHwgYyA+ICd6JykKKwlyZXR1cm4gMDsKKyAgICByZXR1cm4gdGFibGVbYyAtICdFJ107Cit9CisKKy8qIDIgufq9xL+hvK0gv7W5rsDaIC0+IMHfvLoguq/IrworICogKDIgYnVsc2lrOiBjb252ZXJzaW9uIGVuZ2xpc2ggY2hhci4gdG8gbWVkaWFsIHZvd2VsKQorICogsOGw+jogwd+8usDMIL7GtM+46SAwIChJZiBpdCBpcyBub3QgbWVkaWFsIHZvd2VsLCByZXR1cm4gMCkuCisgKi8KKyAgICBzdGF0aWMgaW50Cit2b3coYykKKyAgICBpbnQgYzsKK3sKKyAgICBzdGF0aWMgY2hhcl91IHRhYmxlW10gPQorICAgIHsKKwkvKk8gKi8gNiAsIC8qUCAqLyAxMiwgLypRICovIDAgLCAvKlIgKi8gMCAsIC8qUyAqLyAwICwgLypUICovIDAgLCAvKlUgKi8gMCAsCisJLypWICovIDAgLCAvKlcgKi8gMCAsIC8qWCAqLyAwICwgLypZICovIDAgLCAvKlogKi8gMCAsIC8qWyAqLyAwICwgLypcICovIDAgLAorCS8qXSAqLyAwICwgLypeICovIDAgLCAvKl8gKi8gMCAsIC8qYCAqLyAwICwgLyphICovIDAgLCAvKmIgKi8gMjYsIC8qYyAqLyAwICwKKwkvKmQgKi8gMCAsIC8qZSAqLyAwICwgLypmICovIDAgLCAvKmcgKi8gMCAsIC8qaCAqLyAxMywgLyppICovIDUgLCAvKmogKi8gNyAsCisJLyprICovIDMgLCAvKmwgKi8gMjksIC8qbSAqLyAyNywgLypuICovIDIwLCAvKm8gKi8gNCAsIC8qcCAqLyAxMCwgLypxICovIDAgLAorCS8qciAqLyAwICwgLypzICovIDAgLCAvKnQgKi8gMCAsIC8qdSAqLyAxMSwgLyp2ICovIDAgLCAvKncgKi8gMCAsIC8qeCAqLyAwICwKKwkvKnkgKi8gMTl9OworCisgICAgaWYgKGMgPCAnTycgfHwgYyA+ICd5JykKKwlyZXR1cm4gMDsKKyAgICByZXR1cm4gdGFibGVbYyAtICdPJ107Cit9CisKKy8qIDK5+r3Ev6G8rSC/tbmuwNogLT4gud7EpyC6r8ivCisgKiAoMiBidWxzaWs6IGNvbnZlcnNpb24gZW5nbGlzaCBjaGFyLiB0byBwcm9wKQorICogsOGw+jogud7Ep8DMIL7GtM+46SAwIChJZiBub3QgcHJvcCwgcmV0dXJuIDApCisgKi8KKyAgICBzdGF0aWMgaW50CitsY29uKGMpCisgICAgaW50IGM7Cit7CisgICAgc3RhdGljIGNoYXJfdSB0YWJsZVtdID0KKyAgICB7CisJLypSICovIDMgLCAvKlMgKi8gMCAsIC8qVCAqLyAyMiwgLypVICovIDAgLCAvKlYgKi8gMCAsIC8qVyAqLyAwICwgLypYICovIDAgLAorCS8qWSAqLyAwICwgLypaICovIDAgLCAvKlsgKi8gMCAsIC8qXCAqLyAwICwgLypdICovIDAgLCAvKl4gKi8gMCAsIC8qXyAqLyAwICwKKwkvKmAgKi8gMCAsIC8qYSAqLyAxNywgLypiICovIDAgLCAvKmMgKi8gMjUsIC8qZCAqLyAyMywgLyplICovIDggLCAvKmYgKi8gOSAsCisJLypnICovIDI5LCAvKmggKi8gMCAsIC8qaSAqLyAwICwgLypqICovIDAgLCAvKmsgKi8gMCAsIC8qbCAqLyAwICwgLyptICovIDAgLAorCS8qbiAqLyAwICwgLypvICovIDAgLCAvKnAgKi8gMCAsIC8qcSAqLyAxOSwgLypyICovIDIgLCAvKnMgKi8gNSAsIC8qdCAqLyAyMSwKKwkvKnUgKi8gMCAsIC8qdiAqLyAyOCwgLyp3ICovIDI0LCAvKnggKi8gMjcsIC8qeSAqLyAwICwgLyp6ICovIDI2CisgICAgfTsKKworICAgIGlmIChjIDwgJ1InIHx8IGMgPiAneicpCisJcmV0dXJuIDA7CisgICAgcmV0dXJuIHRhYmxlW2MgLSAnUiddOworfQorCisvKiAyILn6vcS/obytICjH9sDnILnexKcsIL+1ua7A2iDA1LfCKSAtPiC53sSnILqvyK8KKyAqICgyIGJ1bHNpazogY29udmVyc2lvbiAoY3Vyci4gcHJvcCwgaW5wdXQgZW5nbGlzaCkgdG8gcHJvcCkKKyAqLworCisgICAgc3RhdGljIGludAorY29tY29uMihrLCBjKQorICAgIGludCBrOworICAgIGludCBjOworeworICAgIHN3aXRjaCAoaykKKyAgICB7CisJY2FzZSAyOgkJCQkJLyogpKEgKi8KKwkgICAgc3dpdGNoIChjKSB7CisJCWNhc2UgJ3QnOgorCQkgICAgcmV0dXJuIDQ7CQkJLyogpKGktSAqLworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSA1OgkJCQkJLyogpKQgKi8KKwkgICAgc3dpdGNoIChjKSB7CisJCWNhc2UgJ3cnOgkJCS8qIKSkpLggKi8KKwkJICAgIHJldHVybiA2OworCQljYXNlICdnJzoJCQkvKiCkpKS+ICovCisJCSAgICByZXR1cm4gNzsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgOToJCQkJCS8qIKSpICovCisJICAgIHN3aXRjaCAoYykgeworCQljYXNlICdyJzoJCQkvKiCkqaShICovCisJCSAgICByZXR1cm4gMTA7CisJCWNhc2UgJ2EnOgkJCS8qIKSppLEgKi8KKwkJICAgIHJldHVybiAxMTsKKwkJY2FzZSAncSc6CQkJLyogpKmksiAqLworCQkgICAgcmV0dXJuIDEyOworCQljYXNlICd0JzoJCQkvKiCkqaS1ICovCisJCSAgICByZXR1cm4gMTM7CisJCWNhc2UgJ3gnOgkJCS8qIKSppLwgKi8KKwkJICAgIHJldHVybiAxNDsKKwkJY2FzZSAndic6CQkJLyogpKmkvSAqLworCQkgICAgcmV0dXJuIDE1OworCQljYXNlICdnJzoJCQkvKiCkqaS+ICovCisJCSAgICByZXR1cm4gMTY7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIDE5OgkJCQkvKiCksiAqLworCSAgICBzd2l0Y2ggKGMpIHsKKwkJY2FzZSAndCc6CQkJLyogpLKktSAqLworCQkgICAgcmV0dXJuIDIwOworCSAgICB9CisJICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogMrn6vcS/obytICjH9sDnIMHfvLosIL+1ua4gwNS3wikgLT4gwd+8uiC6r8ivCisgKiAoMiBidWxzaWs6IGNvbnZlcnNpb24gKGN1cnIuIG1lZGlhbCB2b3dlbCwgaW5wdXQgZW5nbGlzaCkgdG8gbWVkaWFsCisgKiB2b3dlbCkKKyAqLworCisgICAgc3RhdGljIGludAorY29tdm93Mih2LCBjKQorICAgIGludCB2OworICAgIGludCBjOworeworICAgIHN3aXRjaCAodikKKyAgICB7CisJY2FzZSAxMzoJCQkJCS8qIKTHICovCisJICAgIHN3aXRjaCAoYykgeworCQljYXNlICdrJzoJCQkJLyogpMekvyAqLworCQkgICAgcmV0dXJuIDE0OworCQljYXNlICdvJzoJCQkJLyogpMekwCAqLworCQkgICAgcmV0dXJuIDE1OworCQljYXNlICdsJzoJCQkJLyogpMek0yAqLworCQkgICAgcmV0dXJuIDE4OworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAyMDoJCQkJCS8qIKTMICovCisJICAgIHN3aXRjaCAoYykgeworCQljYXNlICdqJzoJCQkJLyogpMykwyAqLworCQkgICAgcmV0dXJuIDIxOworCQljYXNlICdwJzoJCQkJLyogpMykxCAqLworCQkgICAgcmV0dXJuIDIyOworCQljYXNlICdsJzoJCQkJLyogpMyk0yAqLworCQkgICAgcmV0dXJuIDIzOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAyNzoJCQkJCS8qIKTRICovCisJICAgIHN3aXRjaCAoYykgeworCQljYXNlICdsJzoJCQkJLyogpNGk0yAqLworCQkgICAgcmV0dXJuIDI4OworCSAgICB9CisJICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworICAgIGludAoraGFuZ3VsX2lucHV0X3N0YXRlX2dldCgpCit7CisgICAgcmV0dXJuIGhhbmd1bF9pbnB1dF9zdGF0ZTsKK30KKworICAgIHZvaWQKK2hhbmd1bF9pbnB1dF9zdGF0ZV9zZXQoc3RhdGUpCisgICAgaW50IHN0YXRlOworeworICAgIGhhbmd1bF9pbnB1dF9zdGF0ZSA9IHN0YXRlOworICAgIGhhbmd1bF9pbnB1dF9jbGVhcigpOworfQorCisgICAgaW50CitpbV9nZXRfc3RhdHVzKCkKK3sKKyAgICByZXR1cm4gaGFuZ3VsX2lucHV0X3N0YXRlX2dldCgpOworfQorCisgICAgdm9pZAoraGFuZ3VsX2lucHV0X3N0YXRlX3RvZ2dsZSgpCit7CisgICAgaWYgKGhhbmd1bF9pbnB1dF9zdGF0ZV9nZXQoKSkKKyAgICB7CisJaGFuZ3VsX2lucHV0X3N0YXRlX3NldCgwKTsKKwlpZiAoY29tcG9zaW5nX2hhbmd1bCkKKwl7CisJICAgIHB1c2hfcmF3X2tleShjb21wb3NpbmdfaGFuZ3VsX2J1ZmZlciwgMik7CisJICAgIGNvbXBvc2luZ19oYW5ndWwgPSAwOworCX0KKyAgICB9CisgICAgZWxzZQorCWhhbmd1bF9pbnB1dF9zdGF0ZV9zZXQoMSk7CisKKyAgICBpZiAoc2hvd21vZGUoKSkKKyAgICB7CisJc2V0Y3Vyc29yKCk7CisJb3V0X2ZsdXNoKCk7CisgICAgfQorCisgICAgZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworfQorCisgICAgc3RhdGljIGludAoraGFuZ3VsX2F1dG9tYXRhMihidWYsIGMpCisgICAgY2hhcl91ICAqYnVmOworICAgIGludF91ICAgKmM7Cit7CisgICAgaW50IHQsdDI7CisKKyAgICBpZiAoKmMgPT0gQlMpCisgICAgeworCWlmIChzcCA9PSAwKQorCSAgICByZXR1cm4gQVVUT01BVEFfU1BFQ0lBTDsKKwllbHNlIGlmIChzcCA8IDQpCisJeworCSAgICBoYW5ndWxfaW5wdXRfY2xlYXIoKTsKKwkgICAgcmV0dXJuIEFVVE9NQVRBX05VTEw7CisJfQorCXBvcChidWYpOworCXF1ZXJ5KGJ1Zik7CisJY29udmVydF9rc190b18zKGJ1ZiwgJmYsICZtLCAmbCk7CisJbGFzdF9sID0gbGFzdF9sbDsKKwlsYXN0X2xsID0gLTE7CisJcmV0dXJuIEFVVE9NQVRBX0NPUlJFQ1Q7CisgICAgfQorICAgIGlmICgoISgqYyA+PSAnQScgJiYgKmMgPD0gJ1onKSkgJiYgKCEoKmMgPj0gJ2EnICYmICpjIDw9ICd6JykpKQorICAgIHsKKwloYW5ndWxfaW5wdXRfY2xlYXIoKTsKKwlyZXR1cm4gQVVUT01BVEFfU1BFQ0lBTDsKKyAgICB9CisgICAgdCA9ICpjOworICAgIHN3aXRjaCAoa2luZF90YWJsZV9mb3JfMih0KSkKKyAgICB7CisJY2FzZSAwOiAvKiDA2sC9IChjb25zb25hbnQpICovCisJICAgIGlmIChmID09IEZfTlVMTCkKKwkgICAgeworCQlpZiAobSAhPSBNX05VTEwpCisJCSAgICBoYW5ndWxfaW5wdXRfY2xlYXIoKTsKKwkJZiA9IGZjb24odCk7CisJCWNvbnZlcnRfM190b19jb2RlKGYsIE1fTlVMTCwgTF9OVUxMLCBidWYpOworCQlwdXNoKGJ1Zik7CisJCWxhc3RfbGwgPSBsYXN0X2wgPSAtMTsKKwkJcmV0dXJuIEFVVE9NQVRBX05FVzsKKwkgICAgfQorCSAgICBpZiAobSA9PSBNX05VTEwpCisJCXJldHVybiBBVVRPTUFUQV9FUlJPUjsKKwkgICAgaWYgKGwgPT0gTF9OVUxMKQorCSAgICB7CisJCXQyID0gbGNvbih0KTsKKwkJaWYgKCF0MikgICAgLyogud7Ep8C4t84gwPvH1cfPwfa+yrTZIChjYW5ub3QgdXNlIGl0IGFzIGEgcHJvcCkgKi8KKwkJeworCQkgICAgaGFuZ3VsX2lucHV0X2NsZWFyKCk7CisJCSAgICBsYXN0X2xsID0gbGFzdF9sID0gLTE7CisJCSAgICBmID0gZmNvbih0KTsKKwkJICAgIGNvbnZlcnRfM190b19jb2RlKGYsIG0sIGwsIGJ1Zik7CisJCSAgICBwdXNoKGJ1Zik7CisJCSAgICByZXR1cm4gQVVUT01BVEFfTkVXOworCQl9CisJCWlmICgyID09IGNvbnZlcnRfM190b19jb2RlKGYsIG0sIHQyLCBidWYpKQorCQl7CisJCSAgICBsYXN0X2xsID0gLTE7CisJCSAgICBsYXN0X2wgPSB0OworCQkgICAgbCA9IHQyOworCQkgICAgcHVzaChidWYpOworCQkgICAgcmV0dXJuIEFVVE9NQVRBX0NPUlJFQ1Q7CisJCX0KKwkJZWxzZQkvKiC53sSnwLi3ziC+srfBx8+/tMC4s6ogY29kZb+hIL74tMIgsdvA2sDMtNkgKi8KKwkJewkvKiBjYW5ub3QgZmluZCBzdWNoIGEgcHJvcCBpbiB0aGUgY29kZSB0YWJsZSAqLworCQkgICAgbGFzdF9sbCA9IGxhc3RfbCA9IC0xOworCQkgICAgaGFuZ3VsX2lucHV0X2NsZWFyKCk7CisJCSAgICBmID0gZmNvbih0KTsKKwkJICAgIGNvbnZlcnRfM190b19jb2RlKGYsIG0sIGwsIGJ1Zik7CisJCSAgICBwdXNoKGJ1Zik7CisJCSAgICByZXR1cm4gQVVUT01BVEFfTkVXOworCQl9CisJICAgIH0KKwkgICAgLyogw8ogwd8gwb68usDMILjwtc4gsK7D377uwa4gwNa02QorCSAgICAgKiBJIGhhdmUgYWxsIHRoZSAnaW5pdGlhbCBzb3VuZCcgYW5kICdtZWRpYWwgdm93ZWwnIGFuZCAnZmluYWwKKwkgICAgICogY29uc29uYW50Jy4KKwkgICAgICovCisJICAgIHQyID0gY29tY29uMihsLCB0KTsKKwkgICAgaWYgKHQyKQorCSAgICB7CisJCWlmICgyID09IGNvbnZlcnRfM190b19jb2RlKGYsIG0sIHQyLCBidWYpKQorCQl7CisJCSAgICBsID0gdDI7CisJCSAgICBsYXN0X2xsID0gbGFzdF9sOworCQkgICAgbGFzdF9sID0gdDsKKwkJICAgIHB1c2goYnVmKTsKKwkJICAgIHJldHVybiBBVVRPTUFUQV9DT1JSRUNUOworCQl9CisJICAgIH0KKwkgICAgbGFzdF9sbCA9IGxhc3RfbCA9IC0xOworCSAgICBoYW5ndWxfaW5wdXRfY2xlYXIoKTsKKwkgICAgZiA9IGZjb24odCk7CisJICAgIGNvbnZlcnRfM190b19jb2RlKGYsIG0sIGwsIGJ1Zik7CisJICAgIHB1c2goYnVmKTsKKwkgICAgcmV0dXJuIEFVVE9NQVRBX05FVzsKKworCWNhc2UgMToKKwkgICAgaWYgKGYgPT0gRl9OVUxMKQorCSAgICB7CisJCWhhbmd1bF9pbnB1dF9jbGVhcigpOworCQltID0gdm93KHQpOworCQljb252ZXJ0XzNfdG9fY29kZSAoZiwgbSwgTF9OVUxMLCBidWYpOworCQlwdXNoIChidWYpOworCQlsYXN0X2xsID0gbGFzdF9sID0gLTE7CisJCXJldHVybiBBVVRPTUFUQV9ORVc7CisJICAgIH0KKwkgICAgaWYgKG0gPT0gTV9OVUxMKQorCSAgICB7CisJCW0gPSB2b3codCk7CisJCWlmICgyID09IGNvbnZlcnRfM190b19jb2RlKGYsIG0sIExfTlVMTCwgYnVmKSkKKwkJeworCQkgICAgbGFzdF9sbCA9IGxhc3RfbCA9IC0xOworCQkgICAgcHVzaChidWYpOworCQkgICAgcmV0dXJuIEFVVE9NQVRBX0NPUlJFQ1Q7CisJCX0KKwkJbSA9IE1fTlVMTDsKKwkJcmV0dXJuIEFVVE9NQVRBX0VSUk9SOworCSAgICB9CisJICAgIGlmIChsID09IExfTlVMTCkKKwkgICAgeworCQl0MiA9IGNvbXZvdzIobSwgdCk7CisJCWlmICh0MikKKwkJeworCQkgICAgaWYgKDIgIT0gY29udmVydF8zX3RvX2NvZGUoZiwgdDIsIExfTlVMTCwgYnVmKSkKKwkJCXJldHVybiBBVVRPTUFUQV9FUlJPUjsKKworCQkgICAgbSA9IHQyOworCQkgICAgcHVzaChidWYpOworCQkgICAgbGFzdF9sbCA9IGxhc3RfbCA9IC0xOworCQkgICAgcmV0dXJuIEFVVE9NQVRBX0NPUlJFQ1Q7CisJCX0KKwkJcmV0dXJuIEFVVE9NQVRBX0VSUk9SOworCSAgICB9CisJICAgIHBvcChidWYpOworCSAgICBwb3AoYnVmKTsKKwkgICAgc3AgPSAwOworCSAgICBpZiAobGFzdF9sID09IC0xKQorCSAgICB7CisJCS8qIMC9Li4uIMDMsNQgx8q/5MfPs6o/PyAoSG1tLi4uIElzIGl0IG5lZWRlZD8pICovCisJCWNvbnZlcnRfa3NfdG9fMyhidWYsICZmLCAmbSwgJmwpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQljaGFyX3UgdG1wWzNdOworCQlmID0gZmNvbihsYXN0X2wpOworCQljb252ZXJ0XzNfdG9fY29kZSAoZiwgTV9OVUxMLCBMX05VTEwsIHRtcCk7CisJCXB1c2ggKHRtcCk7CisJICAgIH0KKwkgICAgbSA9IHZvdyh0KTsKKwkgICAgbCA9IExfTlVMTDsKKwkgICAgY29udmVydF8zX3RvX2NvZGUoZiwgbSwgbCwgYnVmICsgMik7CisJICAgIHB1c2goYnVmICsgMik7CisJICAgIHJldHVybiBBVVRPTUFUQV9DT1JSRUNUX05FVzsKKworCWRlZmF1bHQ6CisJICAgIEVNU0coXygiRTI1NjogSGFuZ3VsIGF1dG9tYXRhIEVSUk9SIikpOworCSAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIEFVVE9NQVRBX0VSUk9SOyAvKiBSckVlQWFMbExsWXkgRWVSclJyT29SciAqLworfQorCisgICAgc3RhdGljIGludAoraGFuZ3VsX2F1dG9tYXRhMyhidWYsIGMpCisgICAgY2hhcl91ICAqYnVmOworICAgIGludF91ICAgKmM7Cit7CisgICAgaW50IHQsIHQyOworCisgICAgaWYgKCpjID49ICchJyAmJiAqYyA8PSAneicpCisgICAgeworCSpjIC09ICchJzsKKwl0ID0gdmFsdWVfdGFibGVfZm9yXzNbKmNdOworCXN3aXRjaCAoa2luZF90YWJsZV9mb3JfM1sqY10pCisJeworCSAgICBjYXNlIEZfRjogLyogw8q8urmuwNogKGNoYXIuIG9mIGFuIGluaXRpYWwgc291bmQpICovCisJCWlmIChtICE9IE1fTlVMTCB8fCBzcCA9PSAwKQorCQl7CisJCSAgICAvKiDDyry6wMwguvG++rDFs6ogtNnAvSCx28DaILjwwLix4iC9w8DbCisJCSAgICAgKiBFbXB0eSAnaW5pdGlhbCBzb3VuZCcsIHNvIHN0YXJ0aW5nIGF1dG9tYXRhLgorCQkgICAgICovCisJCSAgICBoYW5ndWxfaW5wdXRfY2xlYXIoKTsKKwkJICAgIGYgPSB0OworCQkgICAgY29udmVydF8zX3RvX2NvZGUoZiwgTV9OVUxMLCBMX05VTEwsIGJ1Zik7CisJCSAgICBwdXNoKGJ1Zik7CisJCSAgICByZXR1cm4gQVVUT01BVEFfTkVXOworCQl9CisJCWlmICgodDIgPSBjb21mY29uMyhmLHQpKSAhPSAwKQkvKiC6ucDawL0gKGRvdWJsZT8gY29uc29uYW50KSAqLworCQl7CisJCSAgICBmPXQyOworCQkgICAgY29udmVydF8zX3RvX2NvZGUoZiwgTV9OVUxMLCBMX05VTEwsIGJ1Zik7CisJCSAgICBwdXNoKGJ1Zik7CisJCSAgICByZXR1cm4gQVVUT01BVEFfQ09SUkVDVDsKKwkJfQorCQlyZXR1cm4gQVVUT01BVEFfRVJST1I7CisKKwkgICAgY2FzZSBGX006CS8qILjwwL0gKHZvd2VsKSAqLworCQlpZiAobSA9PSBNX05VTEwpCisJCXsKKwkJICAgIGlmICgyICE9IGNvbnZlcnRfM190b19jb2RlKGYsIHQsIExfTlVMTCxidWYpKQorCQkJcmV0dXJuIEFVVE9NQVRBX0VSUk9SOworCisJCSAgICBtID0gdDsKKwkJICAgIHB1c2goYnVmKTsKKwkJICAgIGlmIChmID09IEZfTlVMTCkKKwkJCXJldHVybiBBVVRPTUFUQV9ORVc7CisJCSAgICBlbHNlCisJCQlyZXR1cm4gQVVUT01BVEFfQ09SUkVDVDsKKwkJfQorCQlpZiAoKHQyID0gY29tdm93MyhtLHQpKSkgICAgLyogurm48MC9IChhIGRpcGh0aG9uZykgKi8KKwkJeworCQkgICAgbSA9IHQyOworCQkgICAgY29udmVydF8zX3RvX2NvZGUoZiwgbSwgTF9OVUxMLCBidWYpOworCQkgICAgcHVzaChidWYpOworCQkgICAgcmV0dXJuIEFVVE9NQVRBX0NPUlJFQ1Q7CisJCX0KKwkJcmV0dXJuIEFVVE9NQVRBX0VSUk9SOworCisJICAgIGNhc2UgRl9MOgkvKiC53sSnIChwcm9wPykgKi8KKwkJaWYgKG0gPT0gTV9OVUxMKQorCQkgICAgcmV0dXJuIEFVVE9NQVRBX0VSUk9SOyAvKiDB37y6vvi0wiDBvry6ICovCisJCWlmIChsID09IExfTlVMTCkKKwkJeworCQkgICAgaWYgKDIgIT0gY29udmVydF8zX3RvX2NvZGUoZiwgbSwgdCwgYnVmKSkKKwkJICAgIHsKKwkJCWwgPSBMX05VTEw7CisJCQlyZXR1cm4gQVVUT01BVEFfRVJST1I7CisJCSAgICB9CisJCSAgICBwdXNoKGJ1Zik7CisJCSAgICBsID0gdDsKKwkJICAgIHJldHVybiBBVVRPTUFUQV9DT1JSRUNUOworCQl9CisJCWlmICgodDIgPSBjb21jb24zKGwsdCkpICE9IDApCS8qILq5ILnexKcgPz8gKGRvdWJsZSBwcm9wPykgKi8KKwkJeworCQkgICAgaWYgKDIgIT0gY29udmVydF8zX3RvX2NvZGUoZiwgbSwgdDIsIGJ1ZikpCisJCQlyZXR1cm4gQVVUT01BVEFfRVJST1I7CisKKwkJICAgIHB1c2goYnVmKTsKKwkJICAgIGwgPSB0MjsKKwkJICAgIHJldHVybiBBVVRPTUFUQV9DT1JSRUNUOworCQl9CisJCXJldHVybiBBVVRPTUFUQV9FUlJPUjsKKworCSAgICBjYXNlIEZfQTogLyogxq+89rmuwNqzqiC8/cDaIChzcGVjaWFsIGNoYXIuIG9yIG51bWJlcikgKi8KKwkJaGFuZ3VsX2lucHV0X2NsZWFyKCk7CisJCSpjID0gdDsKKwkJcmV0dXJuIEFVVE9NQVRBX1NQRUNJQUw7CisJfQorICAgIH0KKyAgICBpZiAoKmMgPT0gQlMpCisgICAgeworCWlmIChzcCA+PSA0KQorCXsKKwkgICAgcG9wKGJ1Zik7CisJICAgIHBvcChidWYpOworCSAgICBjb252ZXJ0X2tzX3RvXzMoYnVmLCAmZiwgJm0sICZsKTsKKwkgICAgcHVzaChidWYpOworCSAgICByZXR1cm4gQVVUT01BVEFfQ09SUkVDVDsKKwl9CisJZWxzZSBpZiAoc3AgPT0gMCkKKwl7CisJICAgIHJldHVybiBBVVRPTUFUQV9TUEVDSUFMOworCX0KKwllbHNlCisJeworCSAgICBoYW5ndWxfaW5wdXRfY2xlYXIoKTsKKwkgICAgcmV0dXJuIEFVVE9NQVRBX05VTEw7CisJfQorICAgIH0KKyAgICBoYW5ndWxfaW5wdXRfY2xlYXIoKTsKKyAgICByZXR1cm4gQVVUT01BVEFfU1BFQ0lBTDsKK30KKworICAgIHZvaWQKK2hhbmd1bF9rZXlib2FyZF9zZXQoKQoreworICAgIGludAkgICAga2V5Ym9hcmQ7CisgICAgY2hhciAgICAqczsKKworICAgIGhhbmd1bF9pbnB1dF9jbGVhcigpOworCisgICAgaWYgKChzID0gZ2V0ZW52KCJWSU1fS0VZQk9BUkQiKSkgPT0gTlVMTCkKKwlzID0gZ2V0ZW52KCJIQU5HVUxfS0VZQk9BUkRfVFlQRSIpOworCisgICAgaWYgKHMpCisgICAgeworCWlmICgqcyA9PSAnMicpCisJICAgIGtleWJvYXJkID0gMjsKKwllbHNlCisJICAgIGtleWJvYXJkID0gMzsKKwloYW5ndWxfa2V5Ym9hcmRfdHlwZSA9IGtleWJvYXJkOworICAgIH0KK30KKworICAgIGludAoraGFuZ3VsX2lucHV0X3Byb2Nlc3MocywgbGVuKQorICAgIGNoYXJfdSAgKnM7CisgICAgaW50CSAgICBsZW47Cit7CisgICAgaW50IG47CisgICAgdW5zaWduZWQgaW50IGM7CisgICAgY2hhcl91IGhhbmJ1ZlsyMF07CisKKyAgICBpZiAobGVuID09IDEpCisJLyogbm9ybWFsIGtleSBwcmVzcyAqLworCWMgPSAqczsKKyAgICBlbHNlIGlmIChsZW4gPT0gMyAmJiBzWzBdID09IENTSSAmJiBzWzFdID09ICdrJyAmJiBzWzJdID09ICdiJykKKyAgICB7CisJLyogYmFja3NwYWNlICovCisJaWYgKGNvbXBvc2luZ19oYW5ndWwpCisJICAgIGMgPSBDdHJsX0g7CisJZWxzZQorCSAgICByZXR1cm4gbGVuOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmIChjb21wb3NpbmdfaGFuZ3VsKQorCSAgICBwdXNoX3Jhd19rZXkoY29tcG9zaW5nX2hhbmd1bF9idWZmZXIsIDIpOworCWhhbmd1bF9pbnB1dF9jbGVhcigpOworCWNvbXBvc2luZ19oYW5ndWwgPSAwOworCXJldHVybiBsZW47CisgICAgfQorCisgICAgaWYgKGhhbmd1bF9rZXlib2FyZF90eXBlID09IDIpCisJbiA9IGhhbmd1bF9hdXRvbWF0YTIoaGFuYnVmLCAmYyk7CisgICAgZWxzZQorCW4gPSBoYW5ndWxfYXV0b21hdGEzKGhhbmJ1ZiwgJmMpOworCisgICAgaWYgKG4gPT0gQVVUT01BVEFfQ09SUkVDVCkKKyAgICB7CisJU1RSTkNQWShjb21wb3NpbmdfaGFuZ3VsX2J1ZmZlciwgaGFuYnVmLCAyKTsKKwlndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisJcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKG4gPT0gQVVUT01BVEFfTkVXKQorICAgIHsKKwlpZiAoY29tcG9zaW5nX2hhbmd1bCkKKwkgICAgcHVzaF9yYXdfa2V5KGNvbXBvc2luZ19oYW5ndWxfYnVmZmVyLCAyKTsKKwlTVFJOQ1BZKGNvbXBvc2luZ19oYW5ndWxfYnVmZmVyLCBoYW5idWYsIDIpOworCWNvbXBvc2luZ19oYW5ndWwgPSAxOworCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKwlyZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSBpZiAobiA9PSBBVVRPTUFUQV9DT1JSRUNUX05FVykKKyAgICB7CisJaWYgKGNvbXBvc2luZ19oYW5ndWwpCisJICAgIHB1c2hfcmF3X2tleShoYW5idWYsIDIpOworCVNUUk5DUFkoY29tcG9zaW5nX2hhbmd1bF9idWZmZXIsIGhhbmJ1ZisyLCAyKTsKKwljb21wb3NpbmdfaGFuZ3VsID0gMTsKKwlndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisJcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKG4gPT0gQVVUT01BVEFfTlVMTCkKKyAgICB7CisJY29tcG9zaW5nX2hhbmd1bCA9IDA7CisJZ3VpX3JlZHJhd19ibG9jayhndWkuY3Vyc29yX3JvdywgZ3VpLmN1cnNvcl9jb2wsCisJCQkgZ3VpLmN1cnNvcl9yb3csIGd1aS5jdXJzb3JfY29sICsgMSwKKwkJCSBHVUlfTU9OX05PQ0xFQVIpOworCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKwlyZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSBpZiAobiA9PSBBVVRPTUFUQV9TUEVDSUFMKQorICAgIHsKKwlpZiAoY29tcG9zaW5nX2hhbmd1bCkKKwl7CisJICAgIHB1c2hfcmF3X2tleShjb21wb3NpbmdfaGFuZ3VsX2J1ZmZlciwgMik7CisJICAgIGNvbXBvc2luZ19oYW5ndWwgPSAwOworCX0KKwkqcyA9IGM7CisJcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UgaWYgKG4gPT0gQVVUT01BVEFfRVJST1IpCisgICAgeworCXZpbV9iZWVwKCk7CisJcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBsZW47Cit9CisKKyAgICB2b2lkCitoYW5ndWxfaW5wdXRfY2xlYXIoKQoreworICAgIHNwID0gMDsKKyAgICBmID0gRl9OVUxMOworICAgIG0gPSBNX05VTEw7CisgICAgbCA9IExfTlVMTDsKK30KKworI2RlZmluZSBoYW5faW5kZXgoaCwgbCkJKCgoaCktMHhiMCkqKDB4ZmYtMHhhMSkrKChsKS0weGExKSkKKworc3RhdGljIGNvbnN0IGNoYXJfdSBrc190YWJsZTFbXVszXSA9Cit7CisgICAgeyAgMiwgIDMsICAxfSwgeyAgMiwgIDMsICAyfSwgeyAgMiwgIDMsICA1fSwgeyAgMiwgIDMsICA4fSwKKyAgICB7ICAyLCAgMywgIDl9LCB7ICAyLCAgMywgMTB9LCB7ICAyLCAgMywgMTF9LCB7ICAyLCAgMywgMTd9LAorICAgIHsgIDIsICAzLCAxOX0sIHsgIDIsICAzLCAyMH0sIHsgIDIsICAzLCAyMX0sIHsgIDIsICAzLCAyMn0sCisgICAgeyAgMiwgIDMsIDIzfSwgeyAgMiwgIDMsIDI0fSwgeyAgMiwgIDMsIDI1fSwgeyAgMiwgIDMsIDI3fSwKKyAgICB7ICAyLCAgMywgMjh9LCB7ICAyLCAgMywgMjl9LCB7ICAyLCAgNCwgIDF9LCB7ICAyLCAgNCwgIDJ9LAorICAgIHsgIDIsICA0LCAgNX0sIHsgIDIsICA0LCAgOX0sIHsgIDIsICA0LCAxN30sIHsgIDIsICA0LCAxOX0sCisgICAgeyAgMiwgIDQsIDIxfSwgeyAgMiwgIDQsIDIyfSwgeyAgMiwgIDQsIDIzfSwgeyAgMiwgIDUsICAxfSwKKyAgICB7ICAyLCAgNSwgIDJ9LCB7ICAyLCAgNSwgIDV9LCB7ICAyLCAgNSwgIDl9LCB7ICAyLCAgNSwgMjF9LAorICAgIHsgIDIsICA1LCAyM30sIHsgIDIsICA2LCAgMX0sIHsgIDIsICA2LCAgNX0sIHsgIDIsICA2LCAgOX0sCisgICAgeyAgMiwgIDcsICAxfSwgeyAgMiwgIDcsICAyfSwgeyAgMiwgIDcsICA1fSwgeyAgMiwgIDcsICA4fSwKKyAgICB7ICAyLCAgNywgIDl9LCB7ICAyLCAgNywgMTF9LCB7ICAyLCAgNywgMTd9LCB7ICAyLCAgNywgMTl9LAorICAgIHsgIDIsICA3LCAyMX0sIHsgIDIsICA3LCAyMn0sIHsgIDIsICA3LCAyM30sIHsgIDIsICA3LCAyNH0sCisgICAgeyAgMiwgIDcsIDI3fSwgeyAgMiwgIDcsIDI4fSwgeyAgMiwgIDcsIDI5fSwgeyAgMiwgMTAsICAxfSwKKyAgICB7ICAyLCAxMCwgIDV9LCB7ICAyLCAxMCwgIDl9LCB7ICAyLCAxMCwgMTd9LCB7ICAyLCAxMCwgMTl9LAorICAgIHsgIDIsIDEwLCAyMX0sIHsgIDIsIDEwLCAyMn0sIHsgIDIsIDEwLCAyM30sIHsgIDIsIDExLCAgMX0sCisgICAgeyAgMiwgMTEsICAyfSwgeyAgMiwgMTEsICAzfSwgeyAgMiwgMTEsICA1fSwgeyAgMiwgMTEsICA4fSwKKyAgICB7ICAyLCAxMSwgIDl9LCB7ICAyLCAxMSwgMTd9LCB7ICAyLCAxMSwgMTl9LCB7ICAyLCAxMSwgMjF9LAorICAgIHsgIDIsIDExLCAyMn0sIHsgIDIsIDExLCAyM30sIHsgIDIsIDExLCAyN30sIHsgIDIsIDEyLCAgMX0sCisgICAgeyAgMiwgMTIsICA1fSwgeyAgMiwgMTIsICA5fSwgeyAgMiwgMTIsIDE5fSwgeyAgMiwgMTIsIDIxfSwKKyAgICB7ICAyLCAxMywgIDF9LCB7ICAyLCAxMywgIDJ9LCB7ICAyLCAxMywgIDV9LCB7ICAyLCAxMywgIDh9LAorICAgIHsgIDIsIDEzLCAgOX0sIHsgIDIsIDEzLCAxMX0sIHsgIDIsIDEzLCAxM30sIHsgIDIsIDEzLCAxNn0sCisgICAgeyAgMiwgMTMsIDE3fSwgeyAgMiwgMTMsIDE5fSwgeyAgMiwgMTMsIDIxfSwgeyAgMiwgMTMsIDIzfSwKKyAgICB7ICAyLCAxMywgMjR9LCB7ICAyLCAxNCwgIDF9LCB7ICAyLCAxNCwgIDJ9LCB7ICAyLCAxNCwgIDV9LAorICAgIHsgIDIsIDE0LCAgOX0sIHsgIDIsIDE0LCAxMX0sIHsgIDIsIDE0LCAxN30sIHsgIDIsIDE0LCAxOX0sCisgICAgeyAgMiwgMTQsIDIxfSwgeyAgMiwgMTQsIDIzfSwgeyAgMiwgMTUsICAxfSwgeyAgMiwgMTUsICA1fSwKKyAgICB7ICAyLCAxNSwgIDl9LCB7ICAyLCAxNSwgMTl9LCB7ICAyLCAxNSwgMjJ9LCB7ICAyLCAxNSwgMjN9LAorICAgIHsgIDIsIDE4LCAgMX0sIHsgIDIsIDE4LCAgMn0sIHsgIDIsIDE4LCAgNX0sIHsgIDIsIDE4LCAgOX0sCisgICAgeyAgMiwgMTgsIDE3fSwgeyAgMiwgMTgsIDE5fSwgeyAgMiwgMTgsIDIxfSwgeyAgMiwgMTgsIDIzfSwKKyAgICB7ICAyLCAxOSwgIDF9LCB7ICAyLCAxOSwgIDV9LCB7ICAyLCAxOSwgIDl9LCB7ICAyLCAxOSwgMTl9LAorICAgIHsgIDIsIDE5LCAyMX0sIHsgIDIsIDIwLCAgMX0sIHsgIDIsIDIwLCAgMn0sIHsgIDIsIDIwLCAgNX0sCisgICAgeyAgMiwgMjAsICA4fSwgeyAgMiwgMjAsICA5fSwgeyAgMiwgMjAsIDEwfSwgeyAgMiwgMjAsIDExfSwKKyAgICB7ICAyLCAyMCwgMTZ9LCB7ICAyLCAyMCwgMTd9LCB7ICAyLCAyMCwgMTl9LCB7ICAyLCAyMCwgMjF9LAorICAgIHsgIDIsIDIwLCAyM30sIHsgIDIsIDIwLCAyNH0sIHsgIDIsIDIxLCAgMX0sIHsgIDIsIDIxLCAgMn0sCisgICAgeyAgMiwgMjEsICA1fSwgeyAgMiwgMjEsICA5fSwgeyAgMiwgMjEsIDIyfSwgeyAgMiwgMjEsIDIzfSwKKyAgICB7ICAyLCAyMiwgIDF9LCB7ICAyLCAyMiwgMjF9LCB7ICAyLCAyMywgIDF9LCB7ICAyLCAyMywgIDJ9LAorICAgIHsgIDIsIDIzLCAgNX0sIHsgIDIsIDIzLCAgOX0sIHsgIDIsIDIzLCAxN30sIHsgIDIsIDIzLCAxOX0sCisgICAgeyAgMiwgMjMsIDIxfSwgeyAgMiwgMjYsICAxfSwgeyAgMiwgMjYsICA1fSwgeyAgMiwgMjYsICA5fSwKKyAgICB7ICAyLCAyNywgIDF9LCB7ICAyLCAyNywgIDJ9LCB7ICAyLCAyNywgIDV9LCB7ICAyLCAyNywgIDh9LAorICAgIHsgIDIsIDI3LCAgOX0sIHsgIDIsIDI3LCAxMH0sIHsgIDIsIDI3LCAxN30sIHsgIDIsIDI3LCAxOX0sCisgICAgeyAgMiwgMjcsIDIxfSwgeyAgMiwgMjcsIDIzfSwgeyAgMiwgMjgsICAxfSwgeyAgMiwgMjksICAxfSwKKyAgICB7ICAyLCAyOSwgIDJ9LCB7ICAyLCAyOSwgIDV9LCB7ICAyLCAyOSwgIDh9LCB7ICAyLCAyOSwgIDl9LAorICAgIHsgIDIsIDI5LCAxMX0sIHsgIDIsIDI5LCAxN30sIHsgIDIsIDI5LCAxOX0sIHsgIDIsIDI5LCAyMX0sCisgICAgeyAgMiwgMjksIDIzfSwgeyAgMiwgMjksIDI0fSwgeyAgMiwgMjksIDI4fSwgeyAgMywgIDMsICAxfSwKKyAgICB7ICAzLCAgMywgIDJ9LCB7ICAzLCAgMywgIDN9LCB7ICAzLCAgMywgIDV9LCB7ICAzLCAgMywgIDl9LAorICAgIHsgIDMsICAzLCAxMX0sIHsgIDMsICAzLCAxN30sIHsgIDMsICAzLCAxOX0sIHsgIDMsICAzLCAyMX0sCisgICAgeyAgMywgIDMsIDIyfSwgeyAgMywgIDMsIDIzfSwgeyAgMywgIDMsIDI3fSwgeyAgMywgIDQsICAxfSwKKyAgICB7ICAzLCAgNCwgIDJ9LCB7ICAzLCAgNCwgIDV9LCB7ICAzLCAgNCwgIDl9LCB7ICAzLCAgNCwgMTd9LAorICAgIHsgIDMsICA0LCAxOX0sIHsgIDMsICA0LCAyMX0sIHsgIDMsICA0LCAyMn0sIHsgIDMsICA0LCAyM30sCisgICAgeyAgMywgIDUsICAxfSwgeyAgMywgIDUsICAyfSwgeyAgMywgIDUsICA5fSwgeyAgMywgIDcsICAxfSwKKyAgICB7ICAzLCAgNywgIDJ9LCB7ICAzLCAgNywgIDN9LCB7ICAzLCAgNywgIDV9LCB7ICAzLCAgNywgIDl9LAorICAgIHsgIDMsICA3LCAxN30sIHsgIDMsICA3LCAxOX0sIHsgIDMsICA3LCAyMX0sIHsgIDMsICA3LCAyMn0sCisgICAgeyAgMywgIDcsIDIzfSwgeyAgMywgMTAsICAxfSwgeyAgMywgMTAsICAyfSwgeyAgMywgMTAsICA1fSwKKyAgICB7ICAzLCAxMCwgMTd9LCB7ICAzLCAxMCwgMjF9LCB7ICAzLCAxMCwgMjN9LCB7ICAzLCAxMSwgIDF9LAorICAgIHsgIDMsIDExLCAgNX0sIHsgIDMsIDExLCAgOX0sIHsgIDMsIDExLCAyMX0sIHsgIDMsIDExLCAyMn0sCisgICAgeyAgMywgMTEsIDI3fSwgeyAgMywgMTIsICAxfSwgeyAgMywgMTMsICAxfSwgeyAgMywgMTMsICAyfSwKKyAgICB7ICAzLCAxMywgIDV9LCB7ICAzLCAxMywgIDd9LCB7ICAzLCAxMywgIDl9LCB7ICAzLCAxMywgMTd9LAorICAgIHsgIDMsIDEzLCAxOX0sIHsgIDMsIDEzLCAyMX0sIHsgIDMsIDEzLCAyM30sIHsgIDMsIDEzLCAyNH0sCisgICAgeyAgMywgMTMsIDI1fSwgeyAgMywgMTQsICAxfSwgeyAgMywgMTQsICAyfSwgeyAgMywgMTQsICA5fSwKKyAgICB7ICAzLCAxNCwgMjJ9LCB7ICAzLCAxNCwgMjN9LCB7ICAzLCAxNSwgIDF9LCB7ICAzLCAxNSwgIDJ9LAorICAgIHsgIDMsIDE1LCAyM30sIHsgIDMsIDE4LCAgMX0sIHsgIDMsIDE4LCAgNX0sIHsgIDMsIDE4LCAgOX0sCisgICAgeyAgMywgMTgsIDE3fSwgeyAgMywgMTgsIDE5fSwgeyAgMywgMTgsIDIzfSwgeyAgMywgMTksICAxfSwKKyAgICB7ICAzLCAyMCwgIDF9LCB7ICAzLCAyMCwgIDJ9LCB7ICAzLCAyMCwgIDV9LCB7ICAzLCAyMCwgIDl9LAorICAgIHsgIDMsIDIwLCAxNn0sIHsgIDMsIDIwLCAxN30sIHsgIDMsIDIwLCAxOX0sIHsgIDMsIDIwLCAyMX0sCisgICAgeyAgMywgMjAsIDIzfSwgeyAgMywgMjAsIDI0fSwgeyAgMywgMjEsICAxfSwgeyAgMywgMjEsICA5fSwKKyAgICB7ICAzLCAyMSwgMjJ9LCB7ICAzLCAyMSwgMjN9LCB7ICAzLCAyMiwgIDF9LCB7ICAzLCAyMiwgIDJ9LAorICAgIHsgIDMsIDIyLCAgNX0sIHsgIDMsIDIyLCAgOX0sIHsgIDMsIDIyLCAxN30sIHsgIDMsIDIyLCAxOX0sCisgICAgeyAgMywgMjIsIDIyfSwgeyAgMywgMjMsICAxfSwgeyAgMywgMjMsICA1fSwgeyAgMywgMjMsICA5fSwKKyAgICB7ICAzLCAyMywgMTd9LCB7ICAzLCAyMywgMTl9LCB7ICAzLCAyNiwgIDF9LCB7ICAzLCAyNywgIDF9LAorICAgIHsgIDMsIDI3LCAgMn0sIHsgIDMsIDI3LCAgNX0sIHsgIDMsIDI3LCAgN30sIHsgIDMsIDI3LCAgOX0sCisgICAgeyAgMywgMjcsIDExfSwgeyAgMywgMjcsIDE2fSwgeyAgMywgMjcsIDE3fSwgeyAgMywgMjcsIDE5fSwKKyAgICB7ICAzLCAyNywgMjF9LCB7ICAzLCAyNywgMjN9LCB7ICAzLCAyNywgMjd9LCB7ICAzLCAyOSwgIDF9LAorICAgIHsgIDMsIDI5LCAgMn0sIHsgIDMsIDI5LCAgNX0sIHsgIDMsIDI5LCAgOX0sIHsgIDMsIDI5LCAxN30sCisgICAgeyAgMywgMjksIDE5fSwgeyAgMywgMjksIDIxfSwgeyAgMywgMjksIDIzfSwgeyAgNCwgIDMsICAxfSwKKyAgICB7ICA0LCAgMywgIDJ9LCB7ICA0LCAgMywgIDN9LCB7ICA0LCAgMywgIDV9LCB7ICA0LCAgMywgIDh9LAorICAgIHsgIDQsICAzLCAgOX0sIHsgIDQsICAzLCAxMH0sIHsgIDQsICAzLCAxMX0sIHsgIDQsICAzLCAxN30sCisgICAgeyAgNCwgIDMsIDE5fSwgeyAgNCwgIDMsIDIxfSwgeyAgNCwgIDMsIDIyfSwgeyAgNCwgIDMsIDIzfSwKKyAgICB7ICA0LCAgMywgMjR9LCB7ICA0LCAgMywgMjV9LCB7ICA0LCAgMywgMjd9LCB7ICA0LCAgMywgMjl9LAorICAgIHsgIDQsICA0LCAgMX0sIHsgIDQsICA0LCAgMn0sIHsgIDQsICA0LCAgNX0sIHsgIDQsICA0LCAgOX0sCisgICAgeyAgNCwgIDQsIDE3fSwgeyAgNCwgIDQsIDE5fSwgeyAgNCwgIDQsIDIxfSwgeyAgNCwgIDQsIDIyfSwKKyAgICB7ICA0LCAgNCwgMjN9LCB7ICA0LCAgNSwgIDF9LCB7ICA0LCAgNSwgIDJ9LCB7ICA0LCAgNSwgIDV9LAorICAgIHsgIDQsICA1LCAgOX0sIHsgIDQsICA1LCAxN30sIHsgIDQsICA1LCAyM30sIHsgIDQsICA3LCAgMX0sCisgICAgeyAgNCwgIDcsICAyfSwgeyAgNCwgIDcsICA0fSwgeyAgNCwgIDcsICA1fSwgeyAgNCwgIDcsICA5fSwKKyAgICB7ICA0LCAgNywgMTF9LCB7ICA0LCAgNywgMTJ9LCB7ICA0LCAgNywgMTd9LCB7ICA0LCAgNywgMTl9LAorICAgIHsgIDQsICA3LCAyMX0sIHsgIDQsICA3LCAyMn0sIHsgIDQsICA3LCAyM30sIHsgIDQsICA3LCAyOX0sCisgICAgeyAgNCwgMTAsICAxfSwgeyAgNCwgMTAsICAyfSwgeyAgNCwgMTAsICA1fSwgeyAgNCwgMTAsICA5fSwKKyAgICB7ICA0LCAxMCwgMTd9LCB7ICA0LCAxMCwgMTl9LCB7ICA0LCAxMCwgMjF9LCB7ICA0LCAxMCwgMjJ9LAorICAgIHsgIDQsIDEwLCAyM30sIHsgIDQsIDExLCAgMX0sIHsgIDQsIDExLCAgMn0sIHsgIDQsIDExLCAgNX0sCisgICAgeyAgNCwgMTEsICA5fSwgeyAgNCwgMTEsIDE3fSwgeyAgNCwgMTEsIDE5fSwgeyAgNCwgMTEsIDIyfSwKKyAgICB7ICA0LCAxMSwgMjN9LCB7ICA0LCAxMSwgMjZ9LCB7ICA0LCAxMiwgIDF9LCB7ICA0LCAxMiwgIDV9LAorICAgIHsgIDQsIDEzLCAgMX0sIHsgIDQsIDEzLCAgMn0sIHsgIDQsIDEzLCAgNX0sIHsgIDQsIDEzLCAgOX0sCisgICAgeyAgNCwgMTMsIDExfSwgeyAgNCwgMTMsIDE3fSwgeyAgNCwgMTMsIDE5fSwgeyAgNCwgMTMsIDIxfSwKKyAgICB7ICA0LCAxMywgMjN9LCB7ICA0LCAxMywgMjh9LCB7ICA0LCAxMywgMjl9LCB7ICA0LCAxNCwgIDF9LAorICAgIHsgIDQsIDE0LCAgNX0sIHsgIDQsIDE0LCAgOX0sIHsgIDQsIDE0LCAyMn0sIHsgIDQsIDE4LCAgMX0sCisgICAgeyAgNCwgMTgsICA1fSwgeyAgNCwgMTgsICA5fSwgeyAgNCwgMTgsIDE3fSwgeyAgNCwgMTgsIDE5fSwKKyAgICB7ICA0LCAxOCwgMjF9LCB7ICA0LCAxOSwgIDF9LCB7ICA0LCAxOSwgIDJ9LCB7ICA0LCAxOSwgIDV9LAorICAgIHsgIDQsIDE5LCAgOX0sIHsgIDQsIDE5LCAxOX0sIHsgIDQsIDE5LCAyMX0sIHsgIDQsIDE5LCAyM30sCisgICAgeyAgNCwgMjAsICAxfSwgeyAgNCwgMjAsICAyfSwgeyAgNCwgMjAsICA1fSwgeyAgNCwgMjAsICA4fSwKKyAgICB7ICA0LCAyMCwgIDl9LCB7ICA0LCAyMCwgMTd9LCB7ICA0LCAyMCwgMTl9LCB7ICA0LCAyMCwgMjF9LAorICAgIHsgIDQsIDIwLCAyM30sIHsgIDQsIDIxLCAgMX0sIHsgIDQsIDIxLCAyMn0sIHsgIDQsIDIyLCAgMX0sCisgICAgeyAgNCwgMjMsICAxfSwgeyAgNCwgMjMsICA1fSwgeyAgNCwgMjMsICA5fSwgeyAgNCwgMjMsIDE3fSwKKyAgICB7ICA0LCAyMywgMTl9LCB7ICA0LCAyNiwgIDF9LCB7ICA0LCAyNiwgIDJ9LCB7ICA0LCAyNiwgIDl9LAorICAgIHsgIDQsIDI2LCAxN30sIHsgIDQsIDI2LCAxOX0sIHsgIDQsIDI2LCAyM30sIHsgIDQsIDI3LCAgMX0sCisgICAgeyAgNCwgMjcsICAyfSwgeyAgNCwgMjcsICA1fSwgeyAgNCwgMjcsICA5fSwgeyAgNCwgMjcsIDEwfSwKKyAgICB7ICA0LCAyNywgMTF9LCB7ICA0LCAyNywgMTd9LCB7ICA0LCAyNywgMTl9LCB7ICA0LCAyNywgMjF9LAorICAgIHsgIDQsIDI3LCAyM30sIHsgIDQsIDI3LCAyNH0sIHsgIDQsIDI3LCAyOH0sIHsgIDQsIDI4LCAgMX0sCisgICAgeyAgNCwgMjgsICA1fSwgeyAgNCwgMjgsICA5fSwgeyAgNCwgMjksICAxfSwgeyAgNCwgMjksICAyfSwKKyAgICB7ICA0LCAyOSwgIDV9LCB7ICA0LCAyOSwgIDl9LCB7ICA0LCAyOSwgMTF9LCB7ICA0LCAyOSwgMTd9LAorICAgIHsgIDQsIDI5LCAxOX0sIHsgIDQsIDI5LCAyMX0sIHsgIDQsIDI5LCAyM30sIHsgIDQsIDI5LCAyOH0sCisgICAgeyAgNSwgIDMsICAxfSwgeyAgNSwgIDMsICAyfSwgeyAgNSwgIDMsICAzfSwgeyAgNSwgIDMsICA1fSwKKyAgICB7ICA1LCAgMywgIDh9LCB7ICA1LCAgMywgIDl9LCB7ICA1LCAgMywgMTB9LCB7ICA1LCAgMywgMTF9LAorICAgIHsgIDUsICAzLCAxMn0sIHsgIDUsICAzLCAxNn0sIHsgIDUsICAzLCAxN30sIHsgIDUsICAzLCAxOX0sCisgICAgeyAgNSwgIDMsIDIxfSwgeyAgNSwgIDMsIDIyfSwgeyAgNSwgIDMsIDIzfSwgeyAgNSwgIDMsIDI0fSwKKyAgICB7ICA1LCAgMywgMjV9LCB7ICA1LCAgMywgMjl9LCB7ICA1LCAgNCwgIDF9LCB7ICA1LCAgNCwgIDJ9LAorICAgIHsgIDUsICA0LCAgNX0sIHsgIDUsICA0LCAgOX0sIHsgIDUsICA0LCAxN30sIHsgIDUsICA0LCAxOX0sCisgICAgeyAgNSwgIDQsIDIxfSwgeyAgNSwgIDQsIDIyfSwgeyAgNSwgIDQsIDIzfSwgeyAgNSwgIDUsICAxfSwKKyAgICB7ICA1LCAgNywgIDF9LCB7ICA1LCAgNywgIDJ9LCB7ICA1LCAgNywgIDN9LCB7ICA1LCAgNywgIDV9LAorICAgIHsgIDUsICA3LCAgOH0sIHsgIDUsICA3LCAgOX0sIHsgIDUsICA3LCAxMX0sIHsgIDUsICA3LCAxMn0sCisgICAgeyAgNSwgIDcsIDE3fSwgeyAgNSwgIDcsIDE5fSwgeyAgNSwgIDcsIDIxfSwgeyAgNSwgIDcsIDIzfSwKKyAgICB7ICA1LCAgNywgMjV9LCB7ICA1LCAgNywgMjh9LCB7ICA1LCAxMCwgIDF9LCB7ICA1LCAxMCwgIDJ9LAorICAgIHsgIDUsIDEwLCAgNX0sIHsgIDUsIDEwLCAgOX0sIHsgIDUsIDEwLCAxN30sIHsgIDUsIDEwLCAxOX0sCisgICAgeyAgNSwgMTAsIDIxfSwgeyAgNSwgMTAsIDIyfSwgeyAgNSwgMTAsIDIzfSwgeyAgNSwgMTEsICAxfSwKKyAgICB7ICA1LCAxMSwgIDV9LCB7ICA1LCAxMSwgIDl9LCB7ICA1LCAxMSwgMjJ9LCB7ICA1LCAxMSwgMjN9LAorICAgIHsgIDUsIDEyLCAgMX0sIHsgIDUsIDEyLCAgNX0sIHsgIDUsIDEzLCAgMX0sIHsgIDUsIDEzLCAgMn0sCisgICAgeyAgNSwgMTMsICA1fSwgeyAgNSwgMTMsICA4fSwgeyAgNSwgMTMsICA5fSwgeyAgNSwgMTMsIDExfSwKKyAgICB7ICA1LCAxMywgMTN9LCB7ICA1LCAxMywgMTd9LCB7ICA1LCAxMywgMTl9LCB7ICA1LCAxMywgMjF9LAorICAgIHsgIDUsIDEzLCAyM30sIHsgIDUsIDEzLCAyNX0sIHsgIDUsIDEzLCAyN30sIHsgIDUsIDE0LCAgMX0sCisgICAgeyAgNSwgMTQsICA1fSwgeyAgNSwgMTQsICA5fSwgeyAgNSwgMTUsICAxfSwgeyAgNSwgMTUsIDIyfSwKKyAgICB7ICA1LCAxOCwgIDF9LCB7ICA1LCAxOCwgIDV9LCB7ICA1LCAxOCwgIDl9LCB7ICA1LCAxOCwgMTd9LAorICAgIHsgIDUsIDE4LCAxOX0sIHsgIDUsIDE4LCAyMX0sIHsgIDUsIDE5LCAgMX0sIHsgIDUsIDIwLCAgMX0sCisgICAgeyAgNSwgMjAsICAyfSwgeyAgNSwgMjAsICA1fSwgeyAgNSwgMjAsICA5fSwgeyAgNSwgMjAsIDE3fSwKKyAgICB7ICA1LCAyMCwgMTl9LCB7ICA1LCAyMCwgMjF9LCB7ICA1LCAyMCwgMjN9LCB7ICA1LCAyMSwgIDF9LAorICAgIHsgIDUsIDIxLCAyMn0sIHsgIDUsIDIyLCAgMX0sIHsgIDUsIDIyLCAyM30sIHsgIDUsIDIzLCAgMX0sCisgICAgeyAgNSwgMjMsICA1fSwgeyAgNSwgMjMsICA5fSwgeyAgNSwgMjMsIDE5fSwgeyAgNSwgMjMsIDIxfSwKKyAgICB7ICA1LCAyMywgMjN9LCB7ICA1LCAyNiwgIDF9LCB7ICA1LCAyNiwgIDV9LCB7ICA1LCAyNiwgIDl9LAorICAgIHsgIDUsIDI2LCAxN30sIHsgIDUsIDI2LCAyM30sIHsgIDUsIDI3LCAgMX0sIHsgIDUsIDI3LCAgMn0sCisgICAgeyAgNSwgMjcsICA1fSwgeyAgNSwgMjcsICA4fSwgeyAgNSwgMjcsICA5fSwgeyAgNSwgMjcsIDExfSwKKyAgICB7ICA1LCAyNywgMTd9LCB7ICA1LCAyNywgMTl9LCB7ICA1LCAyNywgMjF9LCB7ICA1LCAyNywgMjN9LAorICAgIHsgIDUsIDI4LCAgMX0sIHsgIDUsIDI5LCAgMX0sIHsgIDUsIDI5LCAgMn0sIHsgIDUsIDI5LCAgNX0sCisgICAgeyAgNSwgMjksICA4fSwgeyAgNSwgMjksICA5fSwgeyAgNSwgMjksIDE3fSwgeyAgNSwgMjksIDE5fSwKKyAgICB7ICA1LCAyOSwgMjF9LCB7ICA1LCAyOSwgMjJ9LCB7ICA1LCAyOSwgMjN9LCB7ICA1LCAyOSwgMjR9LAorICAgIHsgIDYsICAzLCAgMX0sIHsgIDYsICAzLCAgMn0sIHsgIDYsICAzLCAgNX0sIHsgIDYsICAzLCAgOX0sCisgICAgeyAgNiwgIDMsIDE3fSwgeyAgNiwgIDMsIDE5fSwgeyAgNiwgIDMsIDIxfSwgeyAgNiwgIDMsIDIyfSwKKyAgICB7ICA2LCAgMywgMjN9LCB7ICA2LCAgMywgMjl9LCB7ICA2LCAgNCwgIDF9LCB7ICA2LCAgNCwgIDJ9LAorICAgIHsgIDYsICA0LCAgNX0sIHsgIDYsICA0LCAgOX0sIHsgIDYsICA0LCAxN30sIHsgIDYsICA0LCAxOX0sCisgICAgeyAgNiwgIDQsIDIxfSwgeyAgNiwgIDQsIDIyfSwgeyAgNiwgIDQsIDIzfSwgeyAgNiwgIDcsICAxfSwKKyAgICB7ICA2LCAgNywgIDJ9LCB7ICA2LCAgNywgIDV9LCB7ICA2LCAgNywgIDl9LCB7ICA2LCAgNywgMTF9LAorICAgIHsgIDYsICA3LCAxMn0sIHsgIDYsICA3LCAxN30sIHsgIDYsICA3LCAxOX0sIHsgIDYsICA3LCAyMX0sCisgICAgeyAgNiwgIDcsIDIyfSwgeyAgNiwgIDcsIDIzfSwgeyAgNiwgIDcsIDI5fSwgeyAgNiwgMTAsICAxfSwKKyAgICB7ICA2LCAxMCwgIDJ9LCB7ICA2LCAxMCwgIDV9LCB7ICA2LCAxMCwgIDl9LCB7ICA2LCAxMCwgMTd9LAorICAgIHsgIDYsIDEwLCAxOX0sIHsgIDYsIDEwLCAyMX0sIHsgIDYsIDEwLCAyMn0sIHsgIDYsIDEwLCAyM30sCisgICAgeyAgNiwgMTEsICAxfSwgeyAgNiwgMTEsIDIyfSwgeyAgNiwgMTMsICAxfSwgeyAgNiwgMTMsICAyfSwKKyAgICB7ICA2LCAxMywgIDV9LCB7ICA2LCAxMywgIDl9LCB7ICA2LCAxMywgMjN9LCB7ICA2LCAxNCwgIDF9LAorICAgIHsgIDYsIDE0LCAgOX0sIHsgIDYsIDE1LCAgMX0sIHsgIDYsIDE4LCAgMX0sIHsgIDYsIDE4LCAgNX0sCisgICAgeyAgNiwgMjAsICAxfSwgeyAgNiwgMjAsICAyfSwgeyAgNiwgMjAsICA1fSwgeyAgNiwgMjAsICA5fSwKKyAgICB7ICA2LCAyMCwgMTZ9LCB7ICA2LCAyMCwgMTd9LCB7ICA2LCAyMCwgMjN9LCB7ICA2LCAyMiwgIDF9LAorICAgIHsgIDYsIDIzLCAgMX0sIHsgIDYsIDIzLCAgNX0sIHsgIDYsIDIzLCAgOX0sIHsgIDYsIDIzLCAxN30sCisgICAgeyAgNiwgMjMsIDE5fSwgeyAgNiwgMjMsIDIzfSwgeyAgNiwgMjcsICAxfSwgeyAgNiwgMjcsICAyfSwKKyAgICB7ICA2LCAyNywgIDV9LCB7ICA2LCAyNywgIDh9LCB7ICA2LCAyNywgIDl9LCB7ICA2LCAyNywgMTd9LAorICAgIHsgIDYsIDI3LCAxOX0sIHsgIDYsIDI3LCAyMX0sIHsgIDYsIDI4LCAgMX0sIHsgIDYsIDI4LCAgNX0sCisgICAgeyAgNiwgMjgsICA5fSwgeyAgNiwgMjgsIDE3fSwgeyAgNiwgMjgsIDE5fSwgeyAgNiwgMjksICAxfSwKKyAgICB7ICA2LCAyOSwgIDV9LCB7ICA2LCAyOSwgIDl9LCB7ICA2LCAyOSwgMTd9LCB7ICA2LCAyOSwgMTl9LAorICAgIHsgIDYsIDI5LCAyMX0sIHsgIDYsIDI5LCAyM30sIHsgIDcsICAzLCAgMX0sIHsgIDcsICAzLCAgMn0sCisgICAgeyAgNywgIDMsICA1fSwgeyAgNywgIDMsICA5fSwgeyAgNywgIDMsIDE3fSwgeyAgNywgIDMsIDE5fSwKKyAgICB7ICA3LCAgMywgMjF9LCB7ICA3LCAgMywgMjJ9LCB7ICA3LCAgMywgMjN9LCB7ICA3LCAgMywgMjR9LAorICAgIHsgIDcsICAzLCAyOH0sIHsgIDcsICAzLCAyOX0sIHsgIDcsICA0LCAgMX0sIHsgIDcsICA0LCAgMn0sCisgICAgeyAgNywgIDQsICA1fSwgeyAgNywgIDQsICA5fSwgeyAgNywgIDQsIDE3fSwgeyAgNywgIDQsIDE5fSwKKyAgICB7ICA3LCAgNCwgMjF9LCB7ICA3LCAgNCwgMjJ9LCB7ICA3LCAgNCwgMjN9LCB7ICA3LCAgNSwgIDF9LAorICAgIHsgIDcsICA1LCAgMn0sIHsgIDcsICA1LCAgNX0sIHsgIDcsICA1LCAyMX0sIHsgIDcsICA1LCAyM30sCisgICAgeyAgNywgIDcsICAxfSwgeyAgNywgIDcsICAyfSwgeyAgNywgIDcsICA1fSwgeyAgNywgIDcsICA5fSwKKyAgICB7ICA3LCAgNywgMTd9LCB7ICA3LCAgNywgMTl9LCB7ICA3LCAgNywgMjF9LCB7ICA3LCAgNywgMjJ9LAorICAgIHsgIDcsICA3LCAyM30sIHsgIDcsICA3LCAyOX0sIHsgIDcsIDEwLCAgMX0sIHsgIDcsIDEwLCAgMn0sCisgICAgeyAgNywgMTAsICA1fSwgeyAgNywgMTAsICA5fSwgeyAgNywgMTAsIDE3fSwgeyAgNywgMTAsIDE5fSwKKyAgICB7ICA3LCAxMCwgMjF9LCB7ICA3LCAxMCwgMjN9LCB7ICA3LCAxMSwgIDF9LCB7ICA3LCAxMSwgIDJ9LAorICAgIHsgIDcsIDExLCAgNX0sIHsgIDcsIDExLCAgOX0sIHsgIDcsIDExLCAxN30sIHsgIDcsIDExLCAxOX0sCisgICAgeyAgNywgMTEsIDIxfSwgeyAgNywgMTEsIDIyfSwgeyAgNywgMTEsIDIzfSwgeyAgNywgMTIsICAxfSwKKyAgICB7ICA3LCAxMiwgIDV9LCB7ICA3LCAxMiwgMTl9LCB7ICA3LCAxMiwgMjF9LCB7ICA3LCAxMywgIDF9LAorICAgIHsgIDcsIDEzLCAgMn0sIHsgIDcsIDEzLCAgNX0sIHsgIDcsIDEzLCAgOX0sIHsgIDcsIDEzLCAxN30sCisgICAgeyAgNywgMTMsIDE5fSwgeyAgNywgMTMsIDIxfSwgeyAgNywgMTMsIDIzfSwgeyAgNywgMTQsICAxfSwKKyAgICB7ICA3LCAxNCwgIDV9LCB7ICA3LCAxNCwgMjN9LCB7ICA3LCAxNSwgMjJ9LCB7ICA3LCAxOCwgIDF9LAorICAgIHsgIDcsIDE4LCAgNX0sIHsgIDcsIDE4LCAgOX0sIHsgIDcsIDE4LCAxN30sIHsgIDcsIDE4LCAxOX0sCisgICAgeyAgNywgMTgsIDIxfSwgeyAgNywgMTgsIDIzfSwgeyAgNywgMTksICAxfSwgeyAgNywgMTksICA1fSwKKyAgICB7ICA3LCAxOSwgIDl9LCB7ICA3LCAxOSwgMTl9LCB7ICA3LCAxOSwgMjF9LCB7ICA3LCAxOSwgMjN9LAorICAgIHsgIDcsIDIwLCAgMX0sIHsgIDcsIDIwLCAgMn0sIHsgIDcsIDIwLCAgNX0sIHsgIDcsIDIwLCAgOX0sCisgICAgeyAgNywgMjAsIDE3fSwgeyAgNywgMjAsIDE5fSwgeyAgNywgMjAsIDIxfSwgeyAgNywgMjAsIDIzfSwKKyAgICB7ICA3LCAyMSwgIDF9LCB7ICA3LCAyMSwgMjJ9LCB7ICA3LCAyMiwgIDF9LCB7ICA3LCAyMywgIDF9LAorICAgIHsgIDcsIDIzLCAgMn0sIHsgIDcsIDIzLCAgNX0sIHsgIDcsIDIzLCAgOX0sIHsgIDcsIDIzLCAxN30sCisgICAgeyAgNywgMjMsIDIxfSwgeyAgNywgMjMsIDIzfSwgeyAgNywgMjYsICAxfSwgeyAgNywgMjYsICAyfSwKKyAgICB7ICA3LCAyNiwgIDV9LCB7ICA3LCAyNiwgIDl9LCB7ICA3LCAyNiwgMTd9LCB7ICA3LCAyNiwgMTl9LAorICAgIHsgIDcsIDI2LCAyMX0sIHsgIDcsIDI2LCAyM30sIHsgIDcsIDI3LCAgMX0sIHsgIDcsIDI3LCAgMn0sCisgICAgeyAgNywgMjcsICA1fSwgeyAgNywgMjcsICA5fSwgeyAgNywgMjcsIDE3fSwgeyAgNywgMjcsIDE5fSwKKyAgICB7ICA3LCAyNywgMjF9LCB7ICA3LCAyNywgMjN9LCB7ICA3LCAyNywgMjR9LCB7ICA3LCAyNywgMjd9LAorICAgIHsgIDcsIDI3LCAyOH0sIHsgIDcsIDI5LCAgMX0sIHsgIDcsIDI5LCAgMn0sIHsgIDcsIDI5LCAgNX0sCisgICAgeyAgNywgMjksICA5fSwgeyAgNywgMjksIDE3fSwgeyAgNywgMjksIDE5fSwgeyAgNywgMjksIDIxfSwKKyAgICB7ICA3LCAyOSwgMjN9LCB7ICA4LCAgMywgIDF9LCB7ICA4LCAgMywgIDJ9LCB7ICA4LCAgMywgIDV9LAorICAgIHsgIDgsICAzLCAgN30sIHsgIDgsICAzLCAgOH0sIHsgIDgsICAzLCAgOX0sIHsgIDgsICAzLCAxMH0sCisgICAgeyAgOCwgIDMsIDExfSwgeyAgOCwgIDMsIDE3fSwgeyAgOCwgIDMsIDE5fSwgeyAgOCwgIDMsIDIxfSwKKyAgICB7ICA4LCAgMywgMjN9LCB7ICA4LCAgMywgMjR9LCB7ICA4LCAgMywgMjd9LCB7ICA4LCAgMywgMjl9LAorICAgIHsgIDgsICA0LCAgMX0sIHsgIDgsICA0LCAgMn0sIHsgIDgsICA0LCAgNX0sIHsgIDgsICA0LCAgOX0sCisgICAgeyAgOCwgIDQsIDE3fSwgeyAgOCwgIDQsIDE5fSwgeyAgOCwgIDQsIDIxfSwgeyAgOCwgIDQsIDIyfSwKKyAgICB7ICA4LCAgNCwgMjN9LCB7ICA4LCAgNCwgMjR9LCB7ICA4LCAgNSwgIDF9LCB7ICA4LCAgNSwgIDJ9LAorICAgIHsgIDgsICA1LCAgOX0sIHsgIDgsICA1LCAyM30sIHsgIDgsICA3LCAgMX0sIHsgIDgsICA3LCAgMn0sCisgICAgeyAgOCwgIDcsICA1fSwgeyAgOCwgIDcsICA5fSwgeyAgOCwgIDcsIDExfSwgeyAgOCwgIDcsIDE3fSwKKyAgICB7ICA4LCAgNywgMTl9LCB7ICA4LCAgNywgMjF9LCB7ICA4LCAgNywgMjN9LCB7ICA4LCAgNywgMjR9LAorICAgIHsgIDgsICA3LCAyOX0sIHsgIDgsIDEwLCAgMX0sIHsgIDgsIDEwLCAgMn0sIHsgIDgsIDEwLCAgNX0sCisgICAgeyAgOCwgMTAsICA5fSwgeyAgOCwgMTAsIDE3fSwgeyAgOCwgMTAsIDE5fSwgeyAgOCwgMTAsIDIxfSwKKyAgICB7ICA4LCAxMCwgMjJ9LCB7ICA4LCAxMCwgMjN9LCB7ICA4LCAxMSwgIDF9LCB7ICA4LCAxMSwgIDJ9LAorICAgIHsgIDgsIDExLCAgNX0sIHsgIDgsIDExLCAgOX0sIHsgIDgsIDExLCAyMX0sIHsgIDgsIDExLCAyMn0sCisgICAgeyAgOCwgMTEsIDIzfSwgeyAgOCwgMTEsIDI1fSwgeyAgOCwgMTIsICAxfSwgeyAgOCwgMTMsICAxfSwKKyAgICB7ICA4LCAxMywgIDJ9LCB7ICA4LCAxMywgIDR9LCB7ICA4LCAxMywgIDV9LCB7ICA4LCAxMywgIDl9LAorICAgIHsgIDgsIDEzLCAxMX0sIHsgIDgsIDEzLCAxN30sIHsgIDgsIDEzLCAxOX0sIHsgIDgsIDEzLCAyMX0sCisgICAgeyAgOCwgMTMsIDIzfSwgeyAgOCwgMTQsICAxfSwgeyAgOCwgMTQsICA1fSwgeyAgOCwgMTQsIDIyfSwKKyAgICB7ICA4LCAxNCwgMjN9LCB7ICA4LCAxOCwgIDF9LCB7ICA4LCAxOCwgIDV9LCB7ICA4LCAxOCwgIDl9LAorICAgIHsgIDgsIDE4LCAxOX0sIHsgIDgsIDE4LCAyMX0sIHsgIDgsIDE4LCAyM30sIHsgIDgsIDE5LCAgMX0sCisgICAgeyAgOCwgMTksICA1fSwgeyAgOCwgMTksICA5fSwgeyAgOCwgMTksIDE5fSwgeyAgOCwgMTksIDIxfSwKKyAgICB7ICA4LCAyMCwgIDF9LCB7ICA4LCAyMCwgIDJ9LCB7ICA4LCAyMCwgIDN9LCB7ICA4LCAyMCwgIDV9LAorICAgIHsgIDgsIDIwLCAgOH0sIHsgIDgsIDIwLCAgOX0sIHsgIDgsIDIwLCAxMH0sIHsgIDgsIDIwLCAxMX0sCisgICAgeyAgOCwgMjAsIDE3fSwgeyAgOCwgMjAsIDE5fSwgeyAgOCwgMjAsIDIxfSwgeyAgOCwgMjAsIDIzfSwKKyAgICB7ICA4LCAyMCwgMjd9LCB7ICA4LCAyMCwgMjl9LCB7ICA4LCAyMSwgIDF9LCB7ICA4LCAyMSwgIDV9LAorICAgIHsgIDgsIDIxLCAgOX0sIHsgIDgsIDIxLCAxOX0sIHsgIDgsIDIxLCAyMX0sIHsgIDgsIDIyLCAgMX0sCisgICAgeyAgOCwgMjMsICAxfSwgeyAgOCwgMjMsICA1fSwgeyAgOCwgMjMsICA5fSwgeyAgOCwgMjYsICAxfSwKKyAgICB7ICA4LCAyNiwgIDV9LCB7ICA4LCAyNiwgIDl9LCB7ICA4LCAyNiwgMTd9LCB7ICA4LCAyNiwgMjF9LAorICAgIHsgIDgsIDI3LCAgMX0sIHsgIDgsIDI3LCAgNX0sIHsgIDgsIDI3LCAgOX0sIHsgIDgsIDI3LCAxN30sCisgICAgeyAgOCwgMjcsIDIxfSwgeyAgOCwgMjksICAxfSwgeyAgOCwgMjksICAyfSwgeyAgOCwgMjksICA1fSwKKyAgICB7ICA4LCAyOSwgIDh9LCB7ICA4LCAyOSwgIDl9LCB7ICA4LCAyOSwgMTF9LCB7ICA4LCAyOSwgMTd9LAorICAgIHsgIDgsIDI5LCAxOX0sIHsgIDgsIDI5LCAyMX0sIHsgIDgsIDI5LCAyMn0sIHsgIDgsIDI5LCAyM30sCisgICAgeyAgOCwgMjksIDI1fSwgeyAgOCwgMjksIDI3fSwgeyAgOSwgIDMsICAxfSwgeyAgOSwgIDMsICAyfSwKKyAgICB7ICA5LCAgMywgIDN9LCB7ICA5LCAgMywgIDR9LCB7ICA5LCAgMywgIDV9LCB7ICA5LCAgMywgIDh9LAorICAgIHsgIDksICAzLCAgOX0sIHsgIDksICAzLCAxMH0sIHsgIDksICAzLCAxMX0sIHsgIDksICAzLCAxMn0sCisgICAgeyAgOSwgIDMsIDE3fSwgeyAgOSwgIDMsIDE5fSwgeyAgOSwgIDMsIDIxfSwgeyAgOSwgIDMsIDIzfSwKKyAgICB7ICA5LCAgMywgMjd9LCB7ICA5LCAgNCwgIDF9LCB7ICA5LCAgNCwgIDJ9LCB7ICA5LCAgNCwgIDV9LAorICAgIHsgIDksICA0LCAgOX0sIHsgIDksICA0LCAxN30sIHsgIDksICA0LCAxOX0sIHsgIDksICA0LCAyMX0sCisgICAgeyAgOSwgIDQsIDIyfSwgeyAgOSwgIDQsIDIzfSwgeyAgOSwgIDQsIDI3fSwgeyAgOSwgIDUsICAxfSwKKyAgICB7ICA5LCAgNSwgIDJ9LCB7ICA5LCAgNSwgIDV9LCB7ICA5LCAgNSwgMTl9LCB7ICA5LCAgNywgIDF9LAorICAgIHsgIDksICA3LCAgMn0sIHsgIDksICA3LCAgNX0sIHsgIDksICA3LCAgOH0sIHsgIDksICA3LCAgOX0sCisgICAgeyAgOSwgIDcsIDExfSwgeyAgOSwgIDcsIDE3fSwgeyAgOSwgIDcsIDE5fSwgeyAgOSwgIDcsIDIxfSwKKyAgICB7ICA5LCAgNywgMjN9LCB7ICA5LCAgNywgMjR9LCB7ICA5LCAxMCwgIDF9LCB7ICA5LCAxMCwgIDJ9LAorICAgIHsgIDksIDEwLCAgNX0sIHsgIDksIDEwLCAgOH0sIHsgIDksIDEwLCAgOX0sIHsgIDksIDEwLCAxN30sCisgICAgeyAgOSwgMTAsIDE5fSwgeyAgOSwgMTAsIDIxfSwgeyAgOSwgMTAsIDIyfSwgeyAgOSwgMTAsIDIzfSwKKyAgICB7ICA5LCAxMSwgIDF9LCB7ICA5LCAxMSwgIDJ9LCB7ICA5LCAxMSwgIDV9LCB7ICA5LCAxMSwgIDl9LAorICAgIHsgIDksIDExLCAxOX0sIHsgIDksIDExLCAyMX0sIHsgIDksIDExLCAyMn0sIHsgIDksIDExLCAyM30sCisgICAgeyAgOSwgMTEsIDI3fSwgeyAgOSwgMTIsICAxfSwgeyAgOSwgMTIsICA1fSwgeyAgOSwgMTMsICAxfSwKKyAgICB7ICA5LCAxMywgIDJ9LCB7ICA5LCAxMywgIDN9LCB7ICA5LCAxMywgIDV9LCB7ICA5LCAxMywgIDl9LAorICAgIHsgIDksIDEzLCAxN30sIHsgIDksIDEzLCAxOX0sIHsgIDksIDEzLCAyMX0sIHsgIDksIDEzLCAyM30sCisgICAgeyAgOSwgMTQsICAxfSwgeyAgOSwgMTQsICA1fSwgeyAgOSwgMTQsIDIyfSwgeyAgOSwgMTUsICAxfSwKKyAgICB7ICA5LCAxNSwgMjJ9LCB7ICA5LCAxOCwgIDF9LCB7ICA5LCAxOCwgIDJ9LCB7ICA5LCAxOCwgIDV9LAorICAgIHsgIDksIDE4LCAgOX0sIHsgIDksIDE4LCAxN30sIHsgIDksIDE4LCAxOX0sIHsgIDksIDE5LCAgMX0sCisgICAgeyAgOSwgMTksICA1fSwgeyAgOSwgMjAsICAxfSwgeyAgOSwgMjAsICAyfSwgeyAgOSwgMjAsICA1fSwKKyAgICB7ICA5LCAyMCwgIDh9LCB7ICA5LCAyMCwgIDl9LCB7ICA5LCAyMCwgMTB9LCB7ICA5LCAyMCwgMTF9LAorICAgIHsgIDksIDIwLCAxN30sIHsgIDksIDIwLCAxOX0sIHsgIDksIDIwLCAyMX0sIHsgIDksIDIwLCAyM30sCisgICAgeyAgOSwgMjAsIDI3fSwgeyAgOSwgMjAsIDI4fSwgeyAgOSwgMjEsICAxfSwgeyAgOSwgMjEsICA5fSwKKyAgICB7ICA5LCAyMSwgMjJ9LCB7ICA5LCAyMiwgIDF9LCB7ICA5LCAyMywgIDF9LCB7ICA5LCAyMywgIDJ9LAorICAgIHsgIDksIDIzLCAgNX0sIHsgIDksIDIzLCAgOX0sIHsgIDksIDIzLCAyM30sIHsgIDksIDI2LCAgMX0sCisgICAgeyAgOSwgMjYsICA1fSwgeyAgOSwgMjYsICA5fSwgeyAgOSwgMjYsIDE3fSwgeyAgOSwgMjYsIDIxfSwKKyAgICB7ICA5LCAyNiwgMjN9LCB7ICA5LCAyNywgIDF9LCB7ICA5LCAyNywgIDJ9LCB7ICA5LCAyNywgIDV9LAorICAgIHsgIDksIDI3LCAgOX0sIHsgIDksIDI3LCAxN30sIHsgIDksIDI3LCAxOX0sIHsgIDksIDI3LCAyMX0sCisgICAgeyAgOSwgMjksICAxfSwgeyAgOSwgMjksICAyfSwgeyAgOSwgMjksICA1fSwgeyAgOSwgMjksICA5fSwKKyAgICB7ICA5LCAyOSwgMTF9LCB7ICA5LCAyOSwgMTd9LCB7ICA5LCAyOSwgMTl9LCB7ICA5LCAyOSwgMjF9LAorICAgIHsgIDksIDI5LCAyM30sIHsgIDksIDI5LCAyNH0sIHsgIDksIDI5LCAyNX0sIHsgMTAsICAzLCAgMX0sCisgICAgeyAxMCwgIDMsICAyfSwgeyAxMCwgIDMsICA1fSwgeyAxMCwgIDMsICA5fSwgeyAxMCwgIDMsIDExfSwKKyAgICB7IDEwLCAgMywgMTd9LCB7IDEwLCAgMywgMTl9LCB7IDEwLCAgMywgMjF9LCB7IDEwLCAgMywgMjJ9LAorICAgIHsgMTAsICAzLCAyM30sIHsgMTAsICAzLCAyOX0sIHsgMTAsICA0LCAgMX0sIHsgMTAsICA0LCAgMn0sCisgICAgeyAxMCwgIDQsICA1fSwgeyAxMCwgIDQsICA5fSwgeyAxMCwgIDQsIDE3fSwgeyAxMCwgIDQsIDE5fSwKKyAgICB7IDEwLCAgNCwgMjF9LCB7IDEwLCAgNCwgMjJ9LCB7IDEwLCAgNCwgMjN9LCB7IDEwLCAgNSwgIDF9LAorICAgIHsgMTAsICA1LCAgMn0sIHsgMTAsICA1LCAxN30sIHsgMTAsICA3LCAgMX0sIHsgMTAsICA3LCAgMn0sCisgICAgeyAxMCwgIDcsICA1fSwgeyAxMCwgIDcsICA4fSwgeyAxMCwgIDcsICA5fSwgeyAxMCwgIDcsIDE3fSwKKyAgICB7IDEwLCAgNywgMjF9LCB7IDEwLCAgNywgMjJ9LCB7IDEwLCAgNywgMjN9LCB7IDEwLCAxMCwgIDF9LAorICAgIHsgMTAsIDEwLCAyM30sIHsgMTAsIDExLCAgMX0sIHsgMTAsIDExLCAgMn0sIHsgMTAsIDExLCAxN30sCisgICAgeyAxMCwgMTEsIDE5fSwgeyAxMCwgMTEsIDIxfSwgeyAxMCwgMTEsIDIyfSwgeyAxMCwgMTEsIDIzfSwKKyAgICB7IDEwLCAxMywgIDF9LCB7IDEwLCAxMywgIDJ9LCB7IDEwLCAxMywgIDV9LCB7IDEwLCAxMywgIDl9LAorICAgIHsgMTAsIDEzLCAxN30sIHsgMTAsIDEzLCAxOX0sIHsgMTAsIDEzLCAyM30sIHsgMTAsIDE4LCAgMX0sCisgICAgeyAxMCwgMTksICAxfSwgeyAxMCwgMTksIDIzfSwgeyAxMCwgMjAsICAxfSwgeyAxMCwgMjAsICAyfSwKKyAgICB7IDEwLCAyMCwgIDV9LCB7IDEwLCAyMCwgIDl9LCB7IDEwLCAyMCwgMTd9LCB7IDEwLCAyMCwgMjF9LAorICAgIHsgMTAsIDIwLCAyM30sIHsgMTAsIDI2LCAgMX0sIHsgMTAsIDI2LCAyM30sIHsgMTAsIDI3LCAgMX0sCisgICAgeyAxMCwgMjcsICA1fSwgeyAxMCwgMjcsICA5fSwgeyAxMCwgMjcsIDE3fSwgeyAxMCwgMjcsIDE5fSwKKyAgICB7IDEwLCAyOSwgIDF9LCB7IDEwLCAyOSwgIDJ9LCB7IDEwLCAyOSwgIDV9LCB7IDEwLCAyOSwgIDl9LAorICAgIHsgMTAsIDI5LCAxN30sIHsgMTAsIDI5LCAxOX0sIHsgMTAsIDI5LCAyMX0sIHsgMTAsIDI5LCAyM30sCisgICAgeyAxMSwgIDMsICAxfSwgeyAxMSwgIDMsICAyfSwgeyAxMSwgIDMsICA0fSwgeyAxMSwgIDMsICA1fSwKKyAgICB7IDExLCAgMywgIDh9LCB7IDExLCAgMywgIDl9LCB7IDExLCAgMywgMTB9LCB7IDExLCAgMywgMTF9LAorICAgIHsgMTEsICAzLCAxN30sIHsgMTEsICAzLCAxOX0sIHsgMTEsICAzLCAyMX0sIHsgMTEsICAzLCAyMn0sCisgICAgeyAxMSwgIDMsIDIzfSwgeyAxMSwgIDMsIDI3fSwgeyAxMSwgIDQsICAxfSwgeyAxMSwgIDQsICAyfSwKKyAgICB7IDExLCAgNCwgIDV9LCB7IDExLCAgNCwgIDl9LCB7IDExLCAgNCwgMTd9LCB7IDExLCAgNCwgMTl9LAorICAgIHsgMTEsICA0LCAyMX0sIHsgMTEsICA0LCAyMn0sIHsgMTEsICA0LCAyM30sIHsgMTEsICA1LCAgMX0sCisgICAgeyAxMSwgIDUsICAyfSwgeyAxMSwgIDUsICA1fSwgeyAxMSwgIDUsICA5fSwgeyAxMSwgIDUsIDE3fSwKKyAgICB7IDExLCAgNSwgMTl9LCB7IDExLCAgNSwgMjF9LCB7IDExLCAgNSwgMjN9LCB7IDExLCAgNiwgIDF9LAorICAgIHsgMTEsICA2LCAgNX0sIHsgMTEsICA2LCAgOX0sIHsgMTEsICA2LCAxN30sIHsgMTEsICA2LCAyM30sCisgICAgeyAxMSwgIDcsICAxfSwgeyAxMSwgIDcsICAyfSwgeyAxMSwgIDcsICAzfSwgeyAxMSwgIDcsICA0fSwKKyAgICB7IDExLCAgNywgIDV9LCB7IDExLCAgNywgIDh9LCB7IDExLCAgNywgIDl9LCB7IDExLCAgNywgMTF9LAorICAgIHsgMTEsICA3LCAxMn0sIHsgMTEsICA3LCAxN30sIHsgMTEsICA3LCAxOX0sIHsgMTEsICA3LCAyMX0sCisgICAgeyAxMSwgIDcsIDIyfSwgeyAxMSwgIDcsIDIzfSwgeyAxMSwgIDcsIDI4fSwgeyAxMSwgMTAsICAxfSwKKyAgICB7IDExLCAxMCwgIDJ9LCB7IDExLCAxMCwgIDV9LCB7IDExLCAxMCwgIDl9LCB7IDExLCAxMCwgMTd9LAorICAgIHsgMTEsIDEwLCAxOX0sIHsgMTEsIDEwLCAyMX0sIHsgMTEsIDEwLCAyMn0sIHsgMTEsIDEwLCAyM30sCisgICAgeyAxMSwgMTEsICAxfSwgeyAxMSwgMTEsICAyfSwgeyAxMSwgMTEsICA1fSwgeyAxMSwgMTEsICA5fSwKKyAgICB7IDExLCAxMSwgMTd9LCB7IDExLCAxMSwgMTl9LCB7IDExLCAxMSwgMjF9LCB7IDExLCAxMSwgMjJ9LAorICAgIHsgMTEsIDExLCAyM30sIHsgMTEsIDEyLCAgMX0sIHsgMTEsIDEyLCAgNX0sIHsgMTEsIDEyLCAgOX0sCisgICAgeyAxMSwgMTIsIDIzfSwgeyAxMSwgMTMsICAxfSwgeyAxMSwgMTMsICAyfSwgeyAxMSwgMTMsICAzfSwKKyAgICB7IDExLCAxMywgIDV9LCB7IDExLCAxMywgIDl9LCB7IDExLCAxMywgMTF9LCB7IDExLCAxMywgMTd9LAorICAgIHsgMTEsIDEzLCAxOX0sIHsgMTEsIDEzLCAyMX0sIHsgMTEsIDEzLCAyM30sIHsgMTEsIDEzLCAyN30sCisgICAgeyAxMSwgMTQsICAxfSwgeyAxMSwgMTQsICAyfSwgeyAxMSwgMTQsICA1fSwgeyAxMSwgMTQsICA5fSwKKyAgICB7IDExLCAxNCwgMjN9LCB7IDExLCAxNSwgIDF9LCB7IDExLCAxNSwgIDV9LCB7IDExLCAxNSwgIDl9LAorICAgIHsgMTEsIDE1LCAxN30sIHsgMTEsIDE1LCAyMX0sIHsgMTEsIDE1LCAyMn0sIHsgMTEsIDE4LCAgMX0sCisgICAgeyAxMSwgMTgsICA1fSwgeyAxMSwgMTgsICA5fSwgeyAxMSwgMTgsIDE3fSwgeyAxMSwgMTgsIDE5fSwKKyAgICB7IDExLCAxOCwgMjF9LCB7IDExLCAxOSwgIDF9LCB7IDExLCAxOSwgIDJ9LCB7IDExLCAxOSwgIDV9LAorICAgIHsgMTEsIDE5LCAgOX0sIHsgMTEsIDE5LCAxN30sIHsgMTEsIDE5LCAxOX0sIHsgMTEsIDE5LCAyMX0sCisgICAgeyAxMSwgMTksIDIzfSwgeyAxMSwgMjAsICAxfSwgeyAxMSwgMjAsICAyfSwgeyAxMSwgMjAsICA1fSwKKyAgICB7IDExLCAyMCwgIDh9LCB7IDExLCAyMCwgIDl9LCB7IDExLCAyMCwgMTd9LCB7IDExLCAyMCwgMTl9LAorICAgIHsgMTEsIDIwLCAyMX0sIHsgMTEsIDIwLCAyM30sIHsgMTEsIDIwLCAyNX0sIHsgMTEsIDIwLCAyN30sCisgICAgeyAxMSwgMjAsIDI4fSwgeyAxMSwgMjEsICAxfSwgeyAxMSwgMjEsIDIyfSwgeyAxMSwgMjIsICAxfSwKKyAgICB7IDExLCAyMiwgIDJ9LCB7IDExLCAyMiwgIDV9LCB7IDExLCAyMiwgIDl9LCB7IDExLCAyMiwgMTd9LAorICAgIHsgMTEsIDIyLCAyM30sIHsgMTEsIDIzLCAgMX0sIHsgMTEsIDIzLCAgMn0sIHsgMTEsIDIzLCAgNX0sCisgICAgeyAxMSwgMjMsICA5fSwgeyAxMSwgMjMsIDE3fSwgeyAxMSwgMjMsIDE5fSwgeyAxMSwgMjMsIDIxfSwKKyAgICB7IDExLCAyMywgMjN9LCB7IDExLCAyNiwgIDF9LCB7IDExLCAyNiwgIDJ9LCB7IDExLCAyNiwgIDl9LAorICAgIHsgMTEsIDI2LCAxN30sIHsgMTEsIDI2LCAyMX0sIHsgMTEsIDI2LCAyM30sIHsgMTEsIDI3LCAgMX0sCisgICAgeyAxMSwgMjcsICAyfSwgeyAxMSwgMjcsICA1fSwgeyAxMSwgMjcsICA5fSwgeyAxMSwgMjcsIDEwfSwKKyAgICB7IDExLCAyNywgMTd9LCB7IDExLCAyNywgMTl9LCB7IDExLCAyNywgMjF9LCB7IDExLCAyNywgMjN9LAorICAgIHsgMTEsIDI5LCAgMX0sIHsgMTEsIDI5LCAgMn0sIHsgMTEsIDI5LCAgNX0sIHsgMTEsIDI5LCAgOH0sCisgICAgeyAxMSwgMjksICA5fSwgeyAxMSwgMjksIDE2fSwgeyAxMSwgMjksIDE3fSwgeyAxMSwgMjksIDE5fSwKKyAgICB7IDExLCAyOSwgMjF9LCB7IDExLCAyOSwgMjN9LCB7IDExLCAyOSwgMjh9LCB7IDEyLCAgMywgIDF9LAorICAgIHsgMTIsICAzLCAgMn0sIHsgMTIsICAzLCAgNH0sIHsgMTIsICAzLCAgNX0sIHsgMTIsICAzLCAgOX0sCisgICAgeyAxMiwgIDMsIDE3fSwgeyAxMiwgIDMsIDE5fSwgeyAxMiwgIDMsIDIyfSwgeyAxMiwgIDMsIDIzfSwKKyAgICB7IDEyLCAgMywgMjl9LCB7IDEyLCAgNCwgIDF9LCB7IDEyLCAgNCwgIDJ9LCB7IDEyLCAgNCwgIDV9LAorICAgIHsgMTIsICA0LCAgOX0sIHsgMTIsICA0LCAxN30sIHsgMTIsICA0LCAxOX0sIHsgMTIsICA0LCAyMn0sCisgICAgeyAxMiwgIDQsIDIzfSwgeyAxMiwgIDUsIDIzfSwgeyAxMiwgIDcsICAxfSwgeyAxMiwgIDcsICAyfSwKKyAgICB7IDEyLCAgNywgIDV9LCB7IDEyLCAgNywgIDl9LCB7IDEyLCAgNywgMTF9LCB7IDEyLCAgNywgMTd9LAorICAgIHsgMTIsICA3LCAxOX0sIHsgMTIsICA3LCAyMn0sIHsgMTIsICA3LCAyM30sIHsgMTIsIDEwLCAgMX0sCisgICAgeyAxMiwgMTAsICA1fSwgeyAxMiwgMTAsICA5fSwgeyAxMiwgMTIsICA1fSwgeyAxMiwgMTMsICAxfSwKKyAgICB7IDEyLCAxMywgIDJ9LCB7IDEyLCAxMywgIDV9LCB7IDEyLCAxMywgIDh9LCB7IDEyLCAxMywgIDl9LAorICAgIHsgMTIsIDEzLCAxMX0sIHsgMTIsIDEzLCAxN30sIHsgMTIsIDEzLCAxOX0sIHsgMTIsIDEzLCAyM30sCisgICAgeyAxMiwgMTQsICAxfSwgeyAxMiwgMTQsICAyfSwgeyAxMiwgMTQsICA1fSwgeyAxMiwgMTQsIDIyfSwKKyAgICB7IDEyLCAxNSwgIDF9LCB7IDEyLCAxNSwgMjJ9LCB7IDEyLCAxOCwgIDF9LCB7IDEyLCAxOCwgIDV9LAorICAgIHsgMTIsIDE4LCAgOX0sIHsgMTIsIDE4LCAxN30sIHsgMTIsIDE4LCAxOX0sIHsgMTIsIDE5LCAgMX0sCisgICAgeyAxMiwgMjAsICAxfSwgeyAxMiwgMjAsICAyfSwgeyAxMiwgMjAsICA1fSwgeyAxMiwgMjAsICA5fSwKKyAgICB7IDEyLCAyMCwgMTd9LCB7IDEyLCAyMCwgMTl9LCB7IDEyLCAyMCwgMjN9LCB7IDEyLCAyMSwgIDF9LAorICAgIHsgMTIsIDIxLCAyMn0sIHsgMTIsIDIyLCAgMX0sIHsgMTIsIDIzLCAgMX0sIHsgMTIsIDIzLCAgNX0sCisgICAgeyAxMiwgMjYsIDIzfSwgeyAxMiwgMjcsICAxfSwgeyAxMiwgMjcsICAyfSwgeyAxMiwgMjcsICA1fSwKKyAgICB7IDEyLCAyNywgIDl9LCB7IDEyLCAyNywgMTF9LCB7IDEyLCAyNywgMTZ9LCB7IDEyLCAyNywgMTd9LAorICAgIHsgMTIsIDI3LCAxOX0sIHsgMTIsIDI4LCAgMX0sIHsgMTIsIDI4LCAgNX0sIHsgMTIsIDI4LCAgOX0sCisgICAgeyAxMiwgMjgsIDE3fSwgeyAxMiwgMjksICAxfSwgeyAxMiwgMjksICAyfSwgeyAxMiwgMjksICA1fSwKKyAgICB7IDEyLCAyOSwgIDl9LCB7IDEyLCAyOSwgMTd9LCB7IDEyLCAyOSwgMTl9LCB7IDEyLCAyOSwgMjF9LAorICAgIHsgMTIsIDI5LCAyM30sIHsgMTMsICAzLCAgMX0sIHsgMTMsICAzLCAgMn0sIHsgMTMsICAzLCAgNX0sCisgICAgeyAxMywgIDMsICA2fSwgeyAxMywgIDMsICA3fSwgeyAxMywgIDMsICA5fSwgeyAxMywgIDMsIDEwfSwKKyAgICB7IDEzLCAgMywgMTF9LCB7IDEzLCAgMywgMTZ9LCB7IDEzLCAgMywgMTd9LCB7IDEzLCAgMywgMTl9LAorICAgIHsgMTMsICAzLCAyMX0sIHsgMTMsICAzLCAyMn0sIHsgMTMsICAzLCAyM30sIHsgMTMsICAzLCAyN30sCisgICAgeyAxMywgIDMsIDI4fSwgeyAxMywgIDQsICAxfSwgeyAxMywgIDQsICAyfSwgeyAxMywgIDQsICA1fSwKKyAgICB7IDEzLCAgNCwgIDl9LCB7IDEzLCAgNCwgMTd9LCB7IDEzLCAgNCwgMTl9LCB7IDEzLCAgNCwgMjF9LAorICAgIHsgMTMsICA0LCAyMn0sIHsgMTMsICA0LCAyM30sIHsgMTMsICA1LCAgMX0sIHsgMTMsICA1LCAgMn0sCisgICAgeyAxMywgIDUsICA1fSwgeyAxMywgIDUsICA5fSwgeyAxMywgIDUsIDEyfSwgeyAxMywgIDUsIDE3fSwKKyAgICB7IDEzLCAgNSwgMTl9LCB7IDEzLCAgNSwgMjF9LCB7IDEzLCAgNSwgMjN9LCB7IDEzLCAgNSwgMjd9LAorICAgIHsgMTMsICA1LCAyOX0sIHsgMTMsICA2LCAgMX0sIHsgMTMsICA2LCAgNX0sIHsgMTMsICA2LCAgOX0sCisgICAgeyAxMywgIDYsIDE5fSwgeyAxMywgIDcsICAxfSwgeyAxMywgIDcsICAyfSwgeyAxMywgIDcsICA1fSwKKyAgICB7IDEzLCAgNywgIDZ9LCB7IDEzLCAgNywgIDh9LCB7IDEzLCAgNywgIDl9LCB7IDEzLCAgNywgMTB9LAorICAgIHsgMTMsICA3LCAxMX0sIHsgMTMsICA3LCAxN30sIHsgMTMsICA3LCAxOX0sIHsgMTMsICA3LCAyMH0sCisgICAgeyAxMywgIDcsIDIxfSwgeyAxMywgIDcsIDIyfSwgeyAxMywgIDcsIDIzfSwgeyAxMywgIDcsIDI0fSwKKyAgICB7IDEzLCAgNywgMjZ9LCB7IDEzLCAgNywgMjh9LCB7IDEzLCAxMCwgIDF9LCB7IDEzLCAxMCwgIDJ9LAorICAgIHsgMTMsIDEwLCAgNX0sIHsgMTMsIDEwLCAgOX0sIHsgMTMsIDEwLCAxN30sIHsgMTMsIDEwLCAxOX0sCisgICAgeyAxMywgMTAsIDIxfSwgeyAxMywgMTAsIDIzfSwgeyAxMywgMTEsICAxfSwgeyAxMywgMTEsICAyfSwKKyAgICB7IDEzLCAxMSwgIDN9LCB7IDEzLCAxMSwgIDV9LCB7IDEzLCAxMSwgIDl9LCB7IDEzLCAxMSwgMTF9LAorICAgIHsgMTMsIDExLCAxMn0sIHsgMTMsIDExLCAxN30sIHsgMTMsIDExLCAxOX0sIHsgMTMsIDExLCAyMH0sCisgICAgeyAxMywgMTEsIDIxfSwgeyAxMywgMTEsIDIyfSwgeyAxMywgMTEsIDIzfSwgeyAxMywgMTEsIDI3fSwKKyAgICB7IDEzLCAxMSwgMjh9LCB7IDEzLCAxMSwgMjl9LCB7IDEzLCAxMiwgIDF9LCB7IDEzLCAxMiwgIDV9LAorICAgIHsgMTMsIDEyLCAgOX0sIHsgMTMsIDEyLCAxN30sIHsgMTMsIDEyLCAxOX0sIHsgMTMsIDEyLCAyMX0sCisgICAgeyAxMywgMTIsIDIyfSwgeyAxMywgMTMsICAxfSwgeyAxMywgMTMsICAyfSwgeyAxMywgMTMsICA1fSwKKyAgICB7IDEzLCAxMywgIDl9LCB7IDEzLCAxMywgMTB9LCB7IDEzLCAxMywgMTF9LCB7IDEzLCAxMywgMTN9LAorICAgIHsgMTMsIDEzLCAxNn0sIHsgMTMsIDEzLCAxN30sIHsgMTMsIDEzLCAxOX0sIHsgMTMsIDEzLCAyMX0sCisgICAgeyAxMywgMTMsIDIzfSwgeyAxMywgMTMsIDI1fSwgeyAxMywgMTQsICAxfSwgeyAxMywgMTQsICAyfSwKKyAgICB7IDEzLCAxNCwgIDV9LCB7IDEzLCAxNCwgIDl9LCB7IDEzLCAxNCwgMTd9LCB7IDEzLCAxNCwgMTl9LAorICAgIHsgMTMsIDE0LCAyMX0sIHsgMTMsIDE0LCAyMn0sIHsgMTMsIDE0LCAyM30sIHsgMTMsIDE1LCAgMX0sCisgICAgeyAxMywgMTUsICAyfSwgeyAxMywgMTUsICA1fSwgeyAxMywgMTUsIDE3fSwgeyAxMywgMTUsIDIxfSwKKyAgICB7IDEzLCAxNSwgMjN9LCB7IDEzLCAxOCwgIDF9LCB7IDEzLCAxOCwgIDJ9LCB7IDEzLCAxOCwgIDV9LAorICAgIHsgMTMsIDE4LCAgOX0sIHsgMTMsIDE4LCAxN30sIHsgMTMsIDE4LCAxOX0sIHsgMTMsIDE4LCAyMX0sCisgICAgeyAxMywgMTgsIDIzfSwgeyAxMywgMTksICAxfSwgeyAxMywgMTksICAyfSwgeyAxMywgMTksICA1fSwKKyAgICB7IDEzLCAxOSwgIDl9LCB7IDEzLCAxOSwgMTd9LCB7IDEzLCAxOSwgMTl9LCB7IDEzLCAxOSwgMjF9LAorICAgIHsgMTMsIDE5LCAyM30sIHsgMTMsIDIwLCAgMX0sIHsgMTMsIDIwLCAgMn0sIHsgMTMsIDIwLCAgNX0sCisgICAgeyAxMywgMjAsICA5fSwgeyAxMywgMjAsIDEwfSwgeyAxMywgMjAsIDExfSwgeyAxMywgMjAsIDE3fSwKKyAgICB7IDEzLCAyMCwgMTl9LCB7IDEzLCAyMCwgMjF9LCB7IDEzLCAyMCwgMjN9LCB7IDEzLCAyMSwgIDF9LAorICAgIHsgMTMsIDIxLCAgMn0sIHsgMTMsIDIxLCAgNX0sIHsgMTMsIDIxLCAgOX0sIHsgMTMsIDIxLCAxN30sCisgICAgeyAxMywgMjEsIDE5fSwgeyAxMywgMjEsIDIyfSwgeyAxMywgMjEsIDIzfSwgeyAxMywgMjIsICAxfSwKKyAgICB7IDEzLCAyMiwgIDJ9LCB7IDEzLCAyMiwgIDV9LCB7IDEzLCAyMiwgIDl9LCB7IDEzLCAyMiwgMTd9LAorICAgIHsgMTMsIDIyLCAxOX0sIHsgMTMsIDIyLCAyM30sIHsgMTMsIDIzLCAgMX0sIHsgMTMsIDIzLCAgMn0sCisgICAgeyAxMywgMjMsICA1fSwgeyAxMywgMjMsICA5fSwgeyAxMywgMjMsIDE3fSwgeyAxMywgMjMsIDE5fSwKKyAgICB7IDEzLCAyMywgMjF9LCB7IDEzLCAyMywgMjN9LCB7IDEzLCAyNiwgIDF9LCB7IDEzLCAyNiwgIDJ9LAorICAgIHsgMTMsIDI2LCAgNX0sIHsgMTMsIDI2LCAgOX0sIHsgMTMsIDI2LCAxN30sIHsgMTMsIDI2LCAxOX0sCisgICAgeyAxMywgMjYsIDIxfSwgeyAxMywgMjYsIDIzfSwgeyAxMywgMjYsIDI1fSwgeyAxMywgMjcsICAxfSwKKyAgICB7IDEzLCAyNywgIDJ9LCB7IDEzLCAyNywgIDV9LCB7IDEzLCAyNywgIDl9LCB7IDEzLCAyNywgMTV9LAorICAgIHsgMTMsIDI3LCAxN30sIHsgMTMsIDI3LCAxOX0sIHsgMTMsIDI3LCAyMX0sIHsgMTMsIDI3LCAyM30sCisgICAgeyAxMywgMjcsIDI0fSwgeyAxMywgMjcsIDI1fSwgeyAxMywgMjcsIDI2fSwgeyAxMywgMjcsIDI3fSwKKyAgICB7IDEzLCAyNywgMjh9LCB7IDEzLCAyNywgMjl9LCB7IDEzLCAyOCwgIDF9LCB7IDEzLCAyOCwgIDV9LAorICAgIHsgMTMsIDI4LCAgOX0sIHsgMTMsIDI4LCAxN30sIHsgMTMsIDI4LCAyMX0sIHsgMTMsIDI5LCAgMX0sCisgICAgeyAxMywgMjksICAyfSwgeyAxMywgMjksICA1fSwgeyAxMywgMjksICA5fSwgeyAxMywgMjksIDEwfSwKKyAgICB7IDEzLCAyOSwgMTF9LCB7IDEzLCAyOSwgMTZ9LCB7IDEzLCAyOSwgMTd9LCB7IDEzLCAyOSwgMTl9LAorICAgIHsgMTMsIDI5LCAyMX0sIHsgMTMsIDI5LCAyMn0sIHsgMTMsIDI5LCAyM30sIHsgMTMsIDI5LCAyNH0sCisgICAgeyAxMywgMjksIDI4fSwgeyAxNCwgIDMsICAxfSwgeyAxNCwgIDMsICAyfSwgeyAxNCwgIDMsICA1fSwKKyAgICB7IDE0LCAgMywgIDd9LCB7IDE0LCAgMywgIDh9LCB7IDE0LCAgMywgIDl9LCB7IDE0LCAgMywgMTF9LAorICAgIHsgMTQsICAzLCAxN30sIHsgMTQsICAzLCAxOX0sIHsgMTQsICAzLCAyMX0sIHsgMTQsICAzLCAyMn0sCisgICAgeyAxNCwgIDMsIDIzfSwgeyAxNCwgIDMsIDI0fSwgeyAxNCwgIDQsICAxfSwgeyAxNCwgIDQsICAyfSwKKyAgICB7IDE0LCAgNCwgIDV9LCB7IDE0LCAgNCwgIDl9LCB7IDE0LCAgNCwgMTd9LCB7IDE0LCAgNCwgMTl9LAorICAgIHsgMTQsICA0LCAyMX0sIHsgMTQsICA0LCAyMn0sIHsgMTQsICA0LCAyM30sIHsgMTQsICA1LCAgMX0sCisgICAgeyAxNCwgIDUsICAyfSwgeyAxNCwgIDUsICA1fSwgeyAxNCwgIDUsICA3fSwgeyAxNCwgIDUsICA5fSwKKyAgICB7IDE0LCAgNSwgMTd9LCB7IDE0LCAgNSwgMjN9LCB7IDE0LCAgNiwgIDF9LCB7IDE0LCAgNiwgIDV9LAorICAgIHsgMTQsICA2LCAgOX0sIHsgMTQsICA3LCAgMX0sIHsgMTQsICA3LCAgMn0sIHsgMTQsICA3LCAgNX0sCisgICAgeyAxNCwgIDcsICA5fSwgeyAxNCwgIDcsIDExfSwgeyAxNCwgIDcsIDE3fSwgeyAxNCwgIDcsIDE5fSwKKyAgICB7IDE0LCAgNywgMjF9LCB7IDE0LCAgNywgMjN9LCB7IDE0LCAgNywgMjR9LCB7IDE0LCAxMCwgIDF9LAorICAgIHsgMTQsIDEwLCAgMn0sIHsgMTQsIDEwLCAgNX0sIHsgMTQsIDEwLCAgOX0sIHsgMTQsIDEwLCAxN30sCisgICAgeyAxNCwgMTAsIDE5fSwgeyAxNCwgMTAsIDIxfSwgeyAxNCwgMTAsIDIzfSwgeyAxNCwgMTEsICAxfSwKKyAgICB7IDE0LCAxMSwgIDV9LCB7IDE0LCAxMSwgIDl9LCB7IDE0LCAxMSwgMTd9LCB7IDE0LCAxMSwgMTl9LAorICAgIHsgMTQsIDExLCAyMn0sIHsgMTQsIDExLCAyM30sIHsgMTQsIDEyLCAgMX0sIHsgMTQsIDEzLCAgMX0sCisgICAgeyAxNCwgMTMsICAyfSwgeyAxNCwgMTMsICA1fSwgeyAxNCwgMTMsICA5fSwgeyAxNCwgMTMsIDExfSwKKyAgICB7IDE0LCAxMywgMTd9LCB7IDE0LCAxMywgMTl9LCB7IDE0LCAxMywgMjF9LCB7IDE0LCAxMywgMjN9LAorICAgIHsgMTQsIDEzLCAyNH0sIHsgMTQsIDEzLCAyNX0sIHsgMTQsIDEzLCAyOX0sIHsgMTQsIDE0LCAgMX0sCisgICAgeyAxNCwgMTQsICAyfSwgeyAxNCwgMTQsICA5fSwgeyAxNCwgMTQsIDE5fSwgeyAxNCwgMTQsIDIxfSwKKyAgICB7IDE0LCAxNCwgMjN9LCB7IDE0LCAxNSwgIDF9LCB7IDE0LCAxNSwgMjJ9LCB7IDE0LCAxNSwgMjN9LAorICAgIHsgMTQsIDE4LCAgMX0sIHsgMTQsIDE4LCAgNX0sIHsgMTQsIDE4LCAgOX0sIHsgMTQsIDE4LCAxN30sCisgICAgeyAxNCwgMTgsIDE5fSwgeyAxNCwgMTgsIDIxfSwgeyAxNCwgMTgsIDIzfSwgeyAxNCwgMTksICAxfSwKKyAgICB7IDE0LCAxOSwgIDJ9LCB7IDE0LCAxOSwgIDV9LCB7IDE0LCAxOSwgMjN9LCB7IDE0LCAyMCwgIDF9LAorICAgIHsgMTQsIDIwLCAgMn0sIHsgMTQsIDIwLCAgNX0sIHsgMTQsIDIwLCAgOX0sIHsgMTQsIDIwLCAxMH0sCisgICAgeyAxNCwgMjAsIDExfSwgeyAxNCwgMjAsIDE3fSwgeyAxNCwgMjAsIDE5fSwgeyAxNCwgMjAsIDIxfSwKKyAgICB7IDE0LCAyMCwgMjN9LCB7IDE0LCAyMSwgIDF9LCB7IDE0LCAyMSwgMjJ9LCB7IDE0LCAyMiwgIDF9LAorICAgIHsgMTQsIDIzLCAgMX0sIHsgMTQsIDIzLCAgMn0sIHsgMTQsIDIzLCAgNX0sIHsgMTQsIDIzLCAgOX0sCisgICAgeyAxNCwgMjMsIDE3fSwgeyAxNCwgMjMsIDE5fSwgeyAxNCwgMjMsIDIxfSwgeyAxNCwgMjYsICAxfSwKKyAgICB7IDE0LCAyNiwgIDV9LCB7IDE0LCAyNiwgIDl9LCB7IDE0LCAyNiwgMTd9LCB7IDE0LCAyNywgIDF9LAorICAgIHsgMTQsIDI3LCAgMn0sIHsgMTQsIDI3LCAgNX0sIHsgMTQsIDI3LCAgOX0sIHsgMTQsIDI3LCAxN30sCisgICAgeyAxNCwgMjcsIDE5fSwgeyAxNCwgMjcsIDIxfSwgeyAxNCwgMjcsIDIzfSwgeyAxNCwgMjksICAxfSwKKyAgICB7IDE0LCAyOSwgIDJ9LCB7IDE0LCAyOSwgIDV9LCB7IDE0LCAyOSwgIDh9LCB7IDE0LCAyOSwgIDl9LAorICAgIHsgMTQsIDI5LCAxMX0sIHsgMTQsIDI5LCAxN30sIHsgMTQsIDI5LCAxOX0sIHsgMTQsIDI5LCAyMX0sCisgICAgeyAxNCwgMjksIDIzfSwgeyAxNCwgMjksIDI0fSwgeyAxNCwgMjksIDI3fSwgeyAxNCwgMjksIDI4fSwKKyAgICB7IDE1LCAgMywgIDF9LCB7IDE1LCAgMywgIDJ9LCB7IDE1LCAgMywgIDV9LCB7IDE1LCAgMywgIDd9LAorICAgIHsgMTUsICAzLCAgOX0sIHsgMTUsICAzLCAxMn0sIHsgMTUsICAzLCAxN30sIHsgMTUsICAzLCAxOX0sCisgICAgeyAxNSwgIDMsIDIxfSwgeyAxNSwgIDMsIDIyfSwgeyAxNSwgIDMsIDIzfSwgeyAxNSwgIDQsICAxfSwKKyAgICB7IDE1LCAgNCwgIDJ9LCB7IDE1LCAgNCwgIDV9LCB7IDE1LCAgNCwgIDl9LCB7IDE1LCAgNCwgMTd9LAorICAgIHsgMTUsICA0LCAxOX0sIHsgMTUsICA0LCAyMX0sIHsgMTUsICA0LCAyMn0sIHsgMTUsICA0LCAyM30sCisgICAgeyAxNSwgIDUsICAxfSwgeyAxNSwgIDUsICA1fSwgeyAxNSwgIDUsIDIzfSwgeyAxNSwgIDcsICAxfSwKKyAgICB7IDE1LCAgNywgIDJ9LCB7IDE1LCAgNywgIDV9LCB7IDE1LCAgNywgIDl9LCB7IDE1LCAgNywgMTd9LAorICAgIHsgMTUsICA3LCAxOX0sIHsgMTUsICA3LCAyMX0sIHsgMTUsICA3LCAyMn0sIHsgMTUsICA3LCAyM30sCisgICAgeyAxNSwgMTAsICAxfSwgeyAxNSwgMTAsIDIzfSwgeyAxNSwgMTEsICAxfSwgeyAxNSwgMTEsIDIyfSwKKyAgICB7IDE1LCAxMywgIDF9LCB7IDE1LCAxMywgIDJ9LCB7IDE1LCAxMywgIDV9LCB7IDE1LCAxMywgIDl9LAorICAgIHsgMTUsIDEzLCAxN30sIHsgMTUsIDEzLCAxOX0sIHsgMTUsIDEzLCAyMX0sIHsgMTUsIDEzLCAyM30sCisgICAgeyAxNSwgMTMsIDI1fSwgeyAxNSwgMTQsICAxfSwgeyAxNSwgMTQsICAyfSwgeyAxNSwgMTQsICA5fSwKKyAgICB7IDE1LCAxNCwgMjJ9LCB7IDE1LCAxNSwgIDF9LCB7IDE1LCAxNSwgMjJ9LCB7IDE1LCAxOCwgIDF9LAorICAgIHsgMTUsIDE4LCAgNX0sIHsgMTUsIDE4LCAgOX0sIHsgMTUsIDE4LCAxN30sIHsgMTUsIDE4LCAxOX0sCisgICAgeyAxNSwgMTksIDIzfSwgeyAxNSwgMjAsICAxfSwgeyAxNSwgMjAsICAyfSwgeyAxNSwgMjAsICA1fSwKKyAgICB7IDE1LCAyMCwgIDl9LCB7IDE1LCAyMCwgMTd9LCB7IDE1LCAyMCwgMTl9LCB7IDE1LCAyMCwgMjN9LAorICAgIHsgMTUsIDIxLCAgMX0sIHsgMTUsIDIxLCAyMn0sIHsgMTUsIDIxLCAyM30sIHsgMTUsIDIzLCAgMX0sCisgICAgeyAxNSwgMjYsICAxfSwgeyAxNSwgMjcsICAxfSwgeyAxNSwgMjcsIDE3fSwgeyAxNSwgMjcsIDIxfSwKKyAgICB7IDE1LCAyNywgMjN9LCB7IDE1LCAyOSwgIDF9LCB7IDE1LCAyOSwgIDJ9LCB7IDE1LCAyOSwgIDV9LAorICAgIHsgMTUsIDI5LCAgOX0sIHsgMTUsIDI5LCAxN30sIHsgMTUsIDI5LCAxOX0sIHsgMTUsIDI5LCAyM30sCisgICAgeyAxNSwgMjksIDI0fSwgeyAxNSwgMjksIDI5fSwgeyAxNiwgIDMsICAxfSwgeyAxNiwgIDMsICAyfSwKKyAgICB7IDE2LCAgMywgIDV9LCB7IDE2LCAgMywgIDd9LCB7IDE2LCAgMywgIDl9LCB7IDE2LCAgMywgMTd9LAorICAgIHsgMTYsICAzLCAxOX0sIHsgMTYsICAzLCAyMX0sIHsgMTYsICAzLCAyMn0sIHsgMTYsICAzLCAyM30sCisgICAgeyAxNiwgIDMsIDI0fSwgeyAxNiwgIDQsICAxfSwgeyAxNiwgIDQsICAyfSwgeyAxNiwgIDQsICA1fSwKKyAgICB7IDE2LCAgNCwgIDl9LCB7IDE2LCAgNCwgMTd9LCB7IDE2LCAgNCwgMTl9LCB7IDE2LCAgNCwgMjF9LAorICAgIHsgMTYsICA0LCAyMn0sIHsgMTYsICA0LCAyM30sIHsgMTYsICA1LCAgMX0sIHsgMTYsICA1LCAgNX0sCisgICAgeyAxNiwgIDUsICA3fSwgeyAxNiwgIDUsICA5fSwgeyAxNiwgIDUsIDE3fSwgeyAxNiwgIDUsIDIzfSwKKyAgICB7IDE2LCAgNywgIDF9LCB7IDE2LCAgNywgIDJ9LCB7IDE2LCAgNywgIDV9LCB7IDE2LCAgNywgIDl9LAorICAgIHsgMTYsICA3LCAxN30sIHsgMTYsICA3LCAxOX0sIHsgMTYsICA3LCAyMX0sIHsgMTYsICA3LCAyMn0sCisgICAgeyAxNiwgIDcsIDIzfSwgeyAxNiwgMTAsICAxfSwgeyAxNiwgMTAsICAyfSwgeyAxNiwgMTAsICA1fSwKKyAgICB7IDE2LCAxMCwgIDl9LCB7IDE2LCAxMCwgMTd9LCB7IDE2LCAxMCwgMTl9LCB7IDE2LCAxMCwgMjF9LAorICAgIHsgMTYsIDEwLCAyM30sIHsgMTYsIDExLCAgMX0sIHsgMTYsIDExLCAgNX0sIHsgMTYsIDExLCAyMn0sCisgICAgeyAxNiwgMTIsICAxfSwgeyAxNiwgMTIsICA1fSwgeyAxNiwgMTIsIDIzfSwgeyAxNiwgMTMsICAxfSwKKyAgICB7IDE2LCAxMywgIDJ9LCB7IDE2LCAxMywgIDV9LCB7IDE2LCAxMywgIDl9LCB7IDE2LCAxMywgMTd9LAorICAgIHsgMTYsIDEzLCAxOX0sIHsgMTYsIDEzLCAyMX0sIHsgMTYsIDEzLCAyM30sIHsgMTYsIDE0LCAgMX0sCisgICAgeyAxNiwgMTQsICA1fSwgeyAxNiwgMTQsICA5fSwgeyAxNiwgMTQsIDIzfSwgeyAxNiwgMTgsICAxfSwKKyAgICB7IDE2LCAxOCwgIDV9LCB7IDE2LCAxOCwgIDl9LCB7IDE2LCAxOCwgMTd9LCB7IDE2LCAxOCwgMTl9LAorICAgIHsgMTYsIDE4LCAyMX0sIHsgMTYsIDE4LCAyM30sIHsgMTYsIDE5LCAgMX0sIHsgMTYsIDE5LCAxN30sCisgICAgeyAxNiwgMjAsICAxfSwgeyAxNiwgMjAsICAyfSwgeyAxNiwgMjAsICA1fSwgeyAxNiwgMjAsICA5fSwKKyAgICB7IDE2LCAyMCwgMTd9LCB7IDE2LCAyMCwgMTl9LCB7IDE2LCAyMCwgMjF9LCB7IDE2LCAyMCwgMjN9LAorICAgIHsgMTYsIDIxLCAgMX0sIHsgMTYsIDIxLCAyMn0sIHsgMTYsIDIyLCAgMX0sIHsgMTYsIDIyLCAgNX0sCisgICAgeyAxNiwgMjMsICAxfSwgeyAxNiwgMjMsICA1fSwgeyAxNiwgMjMsICA5fSwgeyAxNiwgMjMsIDE3fSwKKyAgICB7IDE2LCAyMywgMTl9LCB7IDE2LCAyMywgMjF9LCB7IDE2LCAyMywgMjN9LCB7IDE2LCAyNiwgIDF9LAorICAgIHsgMTYsIDI2LCAgNX0sIHsgMTYsIDI2LCAgOX0sIHsgMTYsIDI2LCAxN30sIHsgMTYsIDI2LCAyM30sCisgICAgeyAxNiwgMjcsICAxfSwgeyAxNiwgMjcsICAyfSwgeyAxNiwgMjcsICA1fSwgeyAxNiwgMjcsICA5fSwKKyAgICB7IDE2LCAyNywgMTd9LCB7IDE2LCAyNywgMTl9LCB7IDE2LCAyNywgMjF9LCB7IDE2LCAyNywgMjN9LAorICAgIHsgMTYsIDI5LCAgMX0sIHsgMTYsIDI5LCAgMn0sIHsgMTYsIDI5LCAgNX0sIHsgMTYsIDI5LCAgOH0sCisgICAgeyAxNiwgMjksICA5fSwgeyAxNiwgMjksIDEwfSwgeyAxNiwgMjksIDE3fSwgeyAxNiwgMjksIDE5fSwKKyAgICB7IDE2LCAyOSwgMjF9LCB7IDE2LCAyOSwgMjN9LCB7IDE3LCAgMywgIDF9LCB7IDE3LCAgMywgIDJ9LAorICAgIHsgMTcsICAzLCAgNX0sIHsgMTcsICAzLCAgOX0sIHsgMTcsICAzLCAxN30sIHsgMTcsICAzLCAxOX0sCisgICAgeyAxNywgIDMsIDIxfSwgeyAxNywgIDMsIDIzfSwgeyAxNywgIDQsICAxfSwgeyAxNywgIDQsICAyfSwKKyAgICB7IDE3LCAgNCwgIDV9LCB7IDE3LCAgNCwgIDl9LCB7IDE3LCAgNCwgMTd9LCB7IDE3LCAgNCwgMTl9LAorICAgIHsgMTcsICA0LCAyMX0sIHsgMTcsICA0LCAyMn0sIHsgMTcsICA0LCAyM30sIHsgMTcsICA1LCAgMX0sCisgICAgeyAxNywgIDUsICAyfSwgeyAxNywgIDUsIDIzfSwgeyAxNywgIDcsICAxfSwgeyAxNywgIDcsICAyfSwKKyAgICB7IDE3LCAgNywgIDV9LCB7IDE3LCAgNywgIDh9LCB7IDE3LCAgNywgIDl9LCB7IDE3LCAgNywgMTd9LAorICAgIHsgMTcsICA3LCAxOX0sIHsgMTcsICA3LCAyMX0sIHsgMTcsICA3LCAyMn0sIHsgMTcsICA3LCAyM30sCisgICAgeyAxNywgMTAsICAxfSwgeyAxNywgMTAsICAyfSwgeyAxNywgMTAsICA1fSwgeyAxNywgMTAsICA5fSwKKyAgICB7IDE3LCAxMCwgMTd9LCB7IDE3LCAxMCwgMTl9LCB7IDE3LCAxMCwgMjF9LCB7IDE3LCAxMCwgMjN9LAorICAgIHsgMTcsIDExLCAgMX0sIHsgMTcsIDExLCAgNX0sIHsgMTcsIDExLCAgOX0sIHsgMTcsIDExLCAxN30sCisgICAgeyAxNywgMTEsIDE5fSwgeyAxNywgMTEsIDIxfSwgeyAxNywgMTEsIDIyfSwgeyAxNywgMTEsIDIzfSwKKyAgICB7IDE3LCAxMiwgIDF9LCB7IDE3LCAxMywgIDF9LCB7IDE3LCAxMywgIDJ9LCB7IDE3LCAxMywgIDV9LAorICAgIHsgMTcsIDEzLCAgOX0sIHsgMTcsIDEzLCAxN30sIHsgMTcsIDEzLCAxOX0sIHsgMTcsIDEzLCAyMX0sCisgICAgeyAxNywgMTMsIDIzfSwgeyAxNywgMTQsICAxfSwgeyAxNywgMTQsICAyfSwgeyAxNywgMTQsICA1fSwKKyAgICB7IDE3LCAxNCwgIDl9LCB7IDE3LCAxNCwgMTd9LCB7IDE3LCAxNCwgMjN9LCB7IDE3LCAxNSwgIDF9LAorICAgIHsgMTcsIDE1LCAyM30sIHsgMTcsIDE4LCAgMX0sIHsgMTcsIDE4LCAgOX0sIHsgMTcsIDE5LCAgMX0sCisgICAgeyAxNywgMjAsICAxfSwgeyAxNywgMjAsICAyfSwgeyAxNywgMjAsICA1fSwgeyAxNywgMjAsICA5fSwKKyAgICB7IDE3LCAyMCwgMTd9LCB7IDE3LCAyMCwgMTl9LCB7IDE3LCAyMCwgMjF9LCB7IDE3LCAyMCwgMjN9LAorICAgIHsgMTcsIDIxLCAgMX0sIHsgMTcsIDIxLCAgNX0sIHsgMTcsIDIxLCAgOX0sIHsgMTcsIDIxLCAyM30sCisgICAgeyAxNywgMjIsICAxfSwgeyAxNywgMjIsIDIzfSwgeyAxNywgMjMsICAxfSwgeyAxNywgMjMsICAyfSwKKyAgICB7IDE3LCAyMywgIDV9LCB7IDE3LCAyMywgIDl9LCB7IDE3LCAyMywgMTd9LCB7IDE3LCAyMywgMTl9LAorICAgIHsgMTcsIDIzLCAyMX0sIHsgMTcsIDIzLCAyM30sIHsgMTcsIDI2LCAgMX0sIHsgMTcsIDI2LCAgNX0sCisgICAgeyAxNywgMjYsICA5fSwgeyAxNywgMjYsIDE3fSwgeyAxNywgMjcsICAxfSwgeyAxNywgMjcsICAyfSwKKyAgICB7IDE3LCAyNywgIDV9LCB7IDE3LCAyNywgIDl9LCB7IDE3LCAyNywgMTd9LCB7IDE3LCAyNywgMTl9LAorICAgIHsgMTcsIDI3LCAyM30sIHsgMTcsIDI5LCAgMX0sIHsgMTcsIDI5LCAgMn0sIHsgMTcsIDI5LCAgNX0sCisgICAgeyAxNywgMjksICA5fSwgeyAxNywgMjksIDE3fSwgeyAxNywgMjksIDE5fSwgeyAxNywgMjksIDIxfSwKKyAgICB7IDE3LCAyOSwgMjN9LCB7IDE4LCAgMywgIDF9LCB7IDE4LCAgMywgIDJ9LCB7IDE4LCAgMywgIDV9LAorICAgIHsgMTgsICAzLCAgOX0sIHsgMTgsICAzLCAxMH0sIHsgMTgsICAzLCAxN30sIHsgMTgsICAzLCAxOX0sCisgICAgeyAxOCwgIDMsIDIxfSwgeyAxOCwgIDMsIDIyfSwgeyAxOCwgIDMsIDIzfSwgeyAxOCwgIDQsICAxfSwKKyAgICB7IDE4LCAgNCwgIDJ9LCB7IDE4LCAgNCwgIDV9LCB7IDE4LCAgNCwgIDl9LCB7IDE4LCAgNCwgMTd9LAorICAgIHsgMTgsICA0LCAxOX0sIHsgMTgsICA0LCAyMX0sIHsgMTgsICA0LCAyMn0sIHsgMTgsICA0LCAyM30sCisgICAgeyAxOCwgIDUsICAxfSwgeyAxOCwgIDUsIDIzfSwgeyAxOCwgIDcsICAxfSwgeyAxOCwgIDcsICAyfSwKKyAgICB7IDE4LCAgNywgIDV9LCB7IDE4LCAgNywgIDl9LCB7IDE4LCAgNywgMTF9LCB7IDE4LCAgNywgMTd9LAorICAgIHsgMTgsICA3LCAxOX0sIHsgMTgsICA3LCAyMX0sIHsgMTgsICA3LCAyMn0sIHsgMTgsICA3LCAyM30sCisgICAgeyAxOCwgMTAsICAxfSwgeyAxOCwgMTAsICAyfSwgeyAxOCwgMTAsICA1fSwgeyAxOCwgMTAsICA5fSwKKyAgICB7IDE4LCAxMCwgMTd9LCB7IDE4LCAxMCwgMTl9LCB7IDE4LCAxMCwgMjF9LCB7IDE4LCAxMCwgMjN9LAorICAgIHsgMTgsIDExLCAgMX0sIHsgMTgsIDExLCAgNX0sIHsgMTgsIDExLCAyMn0sIHsgMTgsIDEyLCAgMX0sCisgICAgeyAxOCwgMTIsICA1fSwgeyAxOCwgMTMsICAxfSwgeyAxOCwgMTMsICAyfSwgeyAxOCwgMTMsICA1fSwKKyAgICB7IDE4LCAxMywgIDl9LCB7IDE4LCAxMywgMTd9LCB7IDE4LCAxMywgMTl9LCB7IDE4LCAxMywgMjF9LAorICAgIHsgMTgsIDEzLCAyM30sIHsgMTgsIDEzLCAyOH0sIHsgMTgsIDE0LCAgMX0sIHsgMTgsIDE0LCAgNX0sCisgICAgeyAxOCwgMTUsICAxfSwgeyAxOCwgMTgsICAxfSwgeyAxOCwgMTgsICA1fSwgeyAxOCwgMTgsIDIxfSwKKyAgICB7IDE4LCAxOCwgMjN9LCB7IDE4LCAxOSwgIDF9LCB7IDE4LCAyMCwgIDF9LCB7IDE4LCAyMCwgIDJ9LAorICAgIHsgMTgsIDIwLCAgNX0sIHsgMTgsIDIwLCAgOX0sIHsgMTgsIDIwLCAxN30sIHsgMTgsIDIwLCAxOX0sCisgICAgeyAxOCwgMjAsIDIxfSwgeyAxOCwgMjAsIDIzfSwgeyAxOCwgMjEsICAxfSwgeyAxOCwgMjEsIDIyfSwKKyAgICB7IDE4LCAyMiwgIDF9LCB7IDE4LCAyMywgIDF9LCB7IDE4LCAyMywgIDJ9LCB7IDE4LCAyMywgIDV9LAorICAgIHsgMTgsIDIzLCAgOX0sIHsgMTgsIDIzLCAxN30sIHsgMTgsIDIzLCAxOX0sIHsgMTgsIDIzLCAyM30sCisgICAgeyAxOCwgMjYsICAxfSwgeyAxOCwgMjYsICA1fSwgeyAxOCwgMjYsICA5fSwgeyAxOCwgMjYsIDE3fSwKKyAgICB7IDE4LCAyNiwgMjN9LCB7IDE4LCAyNywgIDF9LCB7IDE4LCAyNywgIDJ9LCB7IDE4LCAyNywgIDV9LAorICAgIHsgMTgsIDI3LCAgOH0sIHsgMTgsIDI3LCAgOX0sIHsgMTgsIDI3LCAxMX0sIHsgMTgsIDI3LCAxN30sCisgICAgeyAxOCwgMjcsIDE5fSwgeyAxOCwgMjcsIDIxfSwgeyAxOCwgMjgsICAxfSwgeyAxOCwgMjgsICA1fSwKKyAgICB7IDE4LCAyOCwgIDl9LCB7IDE4LCAyOCwgMTd9LCB7IDE4LCAyOCwgMTl9LCB7IDE4LCAyOSwgIDF9LAorICAgIHsgMTgsIDI5LCAgMn0sIHsgMTgsIDI5LCAgNX0sIHsgMTgsIDI5LCAgOX0sIHsgMTgsIDI5LCAxN30sCisgICAgeyAxOCwgMjksIDE5fSwgeyAxOCwgMjksIDIxfSwgeyAxOCwgMjksIDIzfSwgeyAxOSwgIDMsICAxfSwKKyAgICB7IDE5LCAgMywgIDJ9LCB7IDE5LCAgMywgIDN9LCB7IDE5LCAgMywgIDV9LCB7IDE5LCAgMywgIDl9LAorICAgIHsgMTksICAzLCAxMX0sIHsgMTksICAzLCAxN30sIHsgMTksICAzLCAxOX0sIHsgMTksICAzLCAyMX0sCisgICAgeyAxOSwgIDMsIDIyfSwgeyAxOSwgIDMsIDIzfSwgeyAxOSwgIDMsIDI3fSwgeyAxOSwgIDQsICAxfSwKKyAgICB7IDE5LCAgNCwgIDJ9LCB7IDE5LCAgNCwgIDV9LCB7IDE5LCAgNCwgIDl9LCB7IDE5LCAgNCwgMTd9LAorICAgIHsgMTksICA0LCAxOX0sIHsgMTksICA0LCAyMX0sIHsgMTksICA0LCAyMn0sIHsgMTksICA0LCAyM30sCisgICAgeyAxOSwgIDUsICAxfSwgeyAxOSwgIDUsICAyfSwgeyAxOSwgIDcsICAxfSwgeyAxOSwgIDcsICAyfSwKKyAgICB7IDE5LCAgNywgIDV9LCB7IDE5LCAgNywgIDl9LCB7IDE5LCAgNywgMTd9LCB7IDE5LCAgNywgMTl9LAorICAgIHsgMTksICA3LCAyMX0sIHsgMTksICA3LCAyMn0sIHsgMTksICA3LCAyM30sIHsgMTksIDEwLCAgMX0sCisgICAgeyAxOSwgMTAsICAyfSwgeyAxOSwgMTAsICA1fSwgeyAxOSwgMTAsICA5fSwgeyAxOSwgMTAsIDE3fSwKKyAgICB7IDE5LCAxMCwgMTl9LCB7IDE5LCAxMCwgMjF9LCB7IDE5LCAxMCwgMjN9LCB7IDE5LCAxMSwgIDF9LAorICAgIHsgMTksIDExLCAgNX0sIHsgMTksIDExLCAgOX0sIHsgMTksIDExLCAxN30sIHsgMTksIDExLCAxOX0sCisgICAgeyAxOSwgMTEsIDIyfSwgeyAxOSwgMTEsIDIzfSwgeyAxOSwgMTIsICAxfSwgeyAxOSwgMTIsICA5fSwKKyAgICB7IDE5LCAxMiwgMTl9LCB7IDE5LCAxMiwgMjF9LCB7IDE5LCAxMywgIDF9LCB7IDE5LCAxMywgIDJ9LAorICAgIHsgMTksIDEzLCAgNX0sIHsgMTksIDEzLCAgOX0sIHsgMTksIDEzLCAxN30sIHsgMTksIDEzLCAxOX0sCisgICAgeyAxOSwgMTMsIDIxfSwgeyAxOSwgMTMsIDIzfSwgeyAxOSwgMTQsICAxfSwgeyAxOSwgMTQsIDIzfSwKKyAgICB7IDE5LCAxOCwgIDF9LCB7IDE5LCAxOCwgIDV9LCB7IDE5LCAxOSwgIDF9LCB7IDE5LCAxOSwgIDV9LAorICAgIHsgMTksIDE5LCAgOX0sIHsgMTksIDE5LCAxOX0sIHsgMTksIDE5LCAyMX0sIHsgMTksIDIwLCAgMX0sCisgICAgeyAxOSwgMjAsICAyfSwgeyAxOSwgMjAsICA1fSwgeyAxOSwgMjAsICA4fSwgeyAxOSwgMjAsICA5fSwKKyAgICB7IDE5LCAyMCwgMTF9LCB7IDE5LCAyMCwgMTd9LCB7IDE5LCAyMCwgMTl9LCB7IDE5LCAyMCwgMjF9LAorICAgIHsgMTksIDIwLCAyM30sIHsgMTksIDIxLCAgMX0sIHsgMTksIDIxLCAyM30sIHsgMTksIDIzLCAgMX0sCisgICAgeyAxOSwgMjMsICA1fSwgeyAxOSwgMjMsICA5fSwgeyAxOSwgMjMsIDE3fSwgeyAxOSwgMjMsIDIxfSwKKyAgICB7IDE5LCAyNiwgIDF9LCB7IDE5LCAyNiwgIDV9LCB7IDE5LCAyNiwgIDl9LCB7IDE5LCAyNiwgMTd9LAorICAgIHsgMTksIDI2LCAyMX0sIHsgMTksIDI2LCAyM30sIHsgMTksIDI3LCAgMX0sIHsgMTksIDI3LCAgNX0sCisgICAgeyAxOSwgMjcsICA5fSwgeyAxOSwgMjcsIDE3fSwgeyAxOSwgMjcsIDE5fSwgeyAxOSwgMjcsIDIxfSwKKyAgICB7IDE5LCAyOSwgIDF9LCB7IDE5LCAyOSwgIDJ9LCB7IDE5LCAyOSwgIDV9LCB7IDE5LCAyOSwgIDl9LAorICAgIHsgMTksIDI5LCAxN30sIHsgMTksIDI5LCAxOX0sIHsgMTksIDI5LCAyMX0sIHsgMTksIDI5LCAyM30sCisgICAgeyAyMCwgIDMsICAxfSwgeyAyMCwgIDMsICAyfSwgeyAyMCwgIDMsICA1fSwgeyAyMCwgIDMsICA5fSwKKyAgICB7IDIwLCAgMywgMTR9LCB7IDIwLCAgMywgMTd9LCB7IDIwLCAgMywgMTl9LCB7IDIwLCAgMywgMjF9LAorICAgIHsgMjAsICAzLCAyM30sIHsgMjAsICA0LCAgMX0sIHsgMjAsICA0LCAgMn0sIHsgMjAsICA0LCAgNX0sCisgICAgeyAyMCwgIDQsICA5fSwgeyAyMCwgIDQsIDE3fSwgeyAyMCwgIDQsIDE5fSwgeyAyMCwgIDQsIDIxfSwKKyAgICB7IDIwLCAgNCwgMjJ9LCB7IDIwLCAgNCwgMjN9LCB7IDIwLCAgNSwgIDF9LCB7IDIwLCAgNSwgMjN9LAorICAgIHsgMjAsICA3LCAgMX0sIHsgMjAsICA3LCAgMn0sIHsgMjAsICA3LCAgNX0sIHsgMjAsICA3LCAgOX0sCisgICAgeyAyMCwgIDcsIDExfSwgeyAyMCwgIDcsIDE3fSwgeyAyMCwgIDcsIDE5fSwgeyAyMCwgIDcsIDIxfSwKKyAgICB7IDIwLCAgNywgMjN9LCB7IDIwLCAxMCwgIDF9LCB7IDIwLCAxMCwgIDJ9LCB7IDIwLCAxMCwgIDV9LAorICAgIHsgMjAsIDEwLCAgOX0sIHsgMjAsIDEwLCAxN30sIHsgMjAsIDEwLCAxOX0sIHsgMjAsIDEwLCAyMX0sCisgICAgeyAyMCwgMTAsIDIzfSwgeyAyMCwgMTEsICAxfSwgeyAyMCwgMTEsICAyfSwgeyAyMCwgMTEsICA1fSwKKyAgICB7IDIwLCAxMSwgIDl9LCB7IDIwLCAxMSwgMTd9LCB7IDIwLCAxMSwgMTl9LCB7IDIwLCAxMSwgMjF9LAorICAgIHsgMjAsIDExLCAyMn0sIHsgMjAsIDExLCAyM30sIHsgMjAsIDEyLCAgMX0sIHsgMjAsIDEyLCAgNX0sCisgICAgeyAyMCwgMTIsICA5fSwgeyAyMCwgMTIsIDE5fSwgeyAyMCwgMTMsICAxfSwgeyAyMCwgMTMsICAyfSwKKyAgICB7IDIwLCAxMywgIDV9LCB7IDIwLCAxMywgIDl9LCB7IDIwLCAxMywgMTR9LCB7IDIwLCAxMywgMTd9LAorICAgIHsgMjAsIDEzLCAxOX0sIHsgMjAsIDEzLCAyMX0sIHsgMjAsIDEzLCAyM30sIHsgMjAsIDEzLCAyN30sCisgICAgeyAyMCwgMTQsICAxfSwgeyAyMCwgMTQsICAyfSwgeyAyMCwgMTQsICA1fSwgeyAyMCwgMTQsICA5fSwKKyAgICB7IDIwLCAxNCwgMjF9LCB7IDIwLCAxNCwgMjN9LCB7IDIwLCAxNSwgIDF9LCB7IDIwLCAxNSwgIDJ9LAorICAgIHsgMjAsIDE1LCAgNX0sIHsgMjAsIDE1LCAyMX0sIHsgMjAsIDE1LCAyM30sIHsgMjAsIDE4LCAgMX0sCisgICAgeyAyMCwgMTgsICAyfSwgeyAyMCwgMTgsICA1fSwgeyAyMCwgMTgsICA5fSwgeyAyMCwgMTgsIDE5fSwKKyAgICB7IDIwLCAxOCwgMjF9LCB7IDIwLCAxOCwgMjN9LCB7IDIwLCAxOSwgIDF9LCB7IDIwLCAxOSwgIDV9LAorICAgIHsgMjAsIDE5LCAgOX0sIHsgMjAsIDE5LCAxOX0sIHsgMjAsIDE5LCAyMX0sIHsgMjAsIDIwLCAgMX0sCisgICAgeyAyMCwgMjAsICAyfSwgeyAyMCwgMjAsICA1fSwgeyAyMCwgMjAsICA5fSwgeyAyMCwgMjAsIDE0fSwKKyAgICB7IDIwLCAyMCwgMTd9LCB7IDIwLCAyMCwgMjF9LCB7IDIwLCAyMCwgMjN9LCB7IDIwLCAyMSwgIDF9LAorICAgIHsgMjAsIDIxLCAgNX0sIHsgMjAsIDIxLCAgOX0sIHsgMjAsIDIxLCAxN30sIHsgMjAsIDIxLCAyM30sCisgICAgeyAyMCwgMjIsICAxfSwgeyAyMCwgMjIsICAyfSwgeyAyMCwgMjIsICA1fSwgeyAyMCwgMjIsICA5fSwKKyAgICB7IDIwLCAyMiwgMjN9LCB7IDIwLCAyMywgIDF9LCB7IDIwLCAyMywgIDJ9LCB7IDIwLCAyMywgIDV9LAorICAgIHsgMjAsIDIzLCAgOX0sIHsgMjAsIDIzLCAxN30sIHsgMjAsIDIzLCAxOX0sIHsgMjAsIDIzLCAyMX0sCisgICAgeyAyMCwgMjMsIDIzfSwgeyAyMCwgMjYsICAxfSwgeyAyMCwgMjYsICAyfSwgeyAyMCwgMjYsICA1fSwKKyAgICB7IDIwLCAyNiwgIDl9LCB7IDIwLCAyNiwgMTd9LCB7IDIwLCAyNiwgMjF9LCB7IDIwLCAyNiwgMjN9LAorICAgIHsgMjAsIDI3LCAgMX0sIHsgMjAsIDI3LCAgMn0sIHsgMjAsIDI3LCAgNX0sIHsgMjAsIDI3LCAgN30sCisgICAgeyAyMCwgMjcsICA4fSwgeyAyMCwgMjcsICA5fSwgeyAyMCwgMjcsIDEwfSwgeyAyMCwgMjcsIDE3fSwKKyAgICB7IDIwLCAyNywgMTl9LCB7IDIwLCAyNywgMjF9LCB7IDIwLCAyNywgMjN9LCB7IDIwLCAyNywgMjd9LAorICAgIHsgMjAsIDI4LCAgMX0sIHsgMjAsIDI4LCAgNX0sIHsgMjAsIDI4LCAgOX0sIHsgMjAsIDI4LCAxN30sCisgICAgeyAyMCwgMjgsIDE5fSwgeyAyMCwgMjgsIDIzfSwgeyAyMCwgMjksICAxfSwgeyAyMCwgMjksICAyfSwKKyAgICB7IDIwLCAyOSwgIDV9LCB7IDIwLCAyOSwgIDl9LCB7IDIwLCAyOSwgMTd9LCB7IDIwLCAyOSwgMTl9LAorICAgIHsgMjAsIDI5LCAyMX0sIHsgMjAsIDI5LCAyM30sCit9OworCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBrc190YWJsZTJbXVs0XSA9Cit7CisgICAgezB4YTRiZiwgIDEsICAzLCAgMX0sICB7MHhhNGMwLCAgMSwgIDQsICAxfSwKKyAgICB7MHhhNGMxLCAgMSwgIDUsICAxfSwgIHsweGE0YzIsICAxLCAgNiwgIDF9LAorICAgIHsweGE0YzMsICAxLCAgNywgIDF9LCAgezB4YTRjNCwgIDEsIDEwLCAgMX0sCisgICAgezB4YTRjNSwgIDEsIDExLCAgMX0sICB7MHhhNGM2LCAgMSwgMTIsICAxfSwKKyAgICB7MHhhNGM3LCAgMSwgMTMsICAxfSwgIHsweGE0YzgsICAxLCAxNCwgIDF9LAorICAgIHsweGE0YzksICAxLCAxNSwgIDF9LCAgezB4YTRjYSwgIDEsIDE4LCAgMX0sCisgICAgezB4YTRjYiwgIDEsIDE5LCAgMX0sICB7MHhhNGNjLCAgMSwgMjAsICAxfSwKKyAgICB7MHhhNGNkLCAgMSwgMjEsICAxfSwgIHsweGE0Y2UsICAxLCAyMiwgIDF9LAorICAgIHsweGE0Y2YsICAxLCAyMywgIDF9LCAgezB4YTRkMCwgIDEsIDI2LCAgMX0sCisgICAgezB4YTRkMSwgIDEsIDI3LCAgMX0sICB7MHhhNGQyLCAgMSwgMjgsICAxfSwKKyAgICB7MHhhNGQzLCAgMSwgMjksICAxfSwgIHsweGE0YTEsICAyLCAgMiwgIDF9LAorICAgIHsweGE0YTIsICAzLCAgMiwgIDF9LCAgezB4YTRhNCwgIDQsICAyLCAgMX0sCisgICAgezB4YTRhNywgIDUsICAyLCAgMX0sICB7MHhhNGE4LCAgNiwgIDIsICAxfSwKKyAgICB7MHhhNGE5LCAgNywgIDIsICAxfSwgIHsweGE0YjEsICA4LCAgMiwgIDF9LAorICAgIHsweGE0YjIsICA5LCAgMiwgIDF9LCAgezB4YTRiMywgMTAsICAyLCAgMX0sCisgICAgezB4YTRiNSwgMTEsICAyLCAgMX0sICB7MHhhNGI2LCAxMiwgIDIsICAxfSwKKyAgICB7MHhhNGI3LCAxMywgIDIsICAxfSwgIHsweGE0YjgsIDE0LCAgMiwgIDF9LAorICAgIHsweGE0YjksIDE1LCAgMiwgIDF9LCAgezB4YTRiYSwgMTYsICAyLCAgMX0sCisgICAgezB4YTRiYiwgMTcsICAyLCAgMX0sICB7MHhhNGJjLCAxOCwgIDIsICAxfSwKKyAgICB7MHhhNGJkLCAxOSwgIDIsICAxfSwgIHsweGE0YmUsIDIwLCAgMiwgIDF9LAorfTsKKworLyogwbbH1cf8IMPKvLogLSC/z7y6x/wgs7nA2iC6r8ivCisgKiBjb252ZXJzaW9uOiBpbml0aWFsIHNvdW5kIG9mIGNvbXBvdW5kIHR5cGUgLSA/Pz8gb2YgY29tcGxldGlvbiB0eXBlCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXJfdSBqb2hhYl9mY29uX3RvX3dhbltdID0KK3sKKyAgICAwLAorICAgIDB4ZDQsIDB4YTEsIDB4YTIsIDB4YTQsIDB4YTcsICAgIC8qICjDpL/yKSykoSykoiykpCykpyAqLworICAgIDB4YTgsIDB4YTksIDB4YjEsIDB4YjIsIDB4YjMsICAgIC8qIKSoLKSpLKSxLKSyLKSzICovCisgICAgMHhiNSwgMHhiNiwgMHhiNywgMHhiOCwgMHhiOSwgICAgLyogpLUspLYspLcspLgspLkgKi8KKyAgICAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlICAgICAvKiCkuiykuyykvCykvSykviAqLworfTsKKworLyogwbbH1cf8IMHfvLogLT4gv8+8usf8ILO5wNoguq/IrworICogY29udmVyc2lvbjogbWVkaWFsIHZvd2VsIG9mIGNvbXBvdW5kIHR5cGUgLSA/Pz8gb2YgY29tcGxldGlvbiB0eXBlCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXJfdSBqb2hhYl92b3dfdG9fd2FuW10gPQoreworICAgIDAsIDAsCisgICAgMHhkNCwgMHhiZiwgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywJLyogKMOkv/IpLKS/LKTALKTBLKTCLKTDICovCisgICAgMCwgMCwKKyAgICAweGM0LCAweGM1LCAweGM2LCAweGM3LCAweGM4LCAweGM5LCAvKiCkxCykxSykxiykxyykx6S/LKTHpMAgKi8KKyAgICAwLCAwLAorICAgIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsIC8qIKTHpNMspMsspMwspMykwyykzKTELKTMpNMgKi8KKyAgICAwLCAwLAorICAgIDB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMJICAgICAvKiCk0Cyk0Syk0aTTLKTTICovCit9OworCisvKiDBtsfVx/wgwb68uiAtPiC/z7y6x/wgs7nA2iC6r8ivCisgKiBjb252ZXJzaW9uOiBmaW5hbCBjb25zb25hbnQgb2YgY29tcG91bmQgdHlwZSAtID8/PyBvZiBjb21wbGV0aW9uIHR5cGUKKyAqLworCitzdGF0aWMgY29uc3QgY2hhcl91IGpvaGFiX2xjb25fdG9fd2FuW10gPQoreworICAgIDAsCisgICAgMHhkNCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgICAgLyogKMOkv/IpLCCkoSwgpKIsIKShpLUsIKSkICovCisgICAgMHhhNSwgMHhhNiwgMHhhNywgMHhhOSwgMHhhYSwgICAgLyogpKSkuCwgpKSkviwgpKcsIKSpLCCkqaShICovCisgICAgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwgICAgLyogpKmksSwgpKmksiwgpKmktSwgpKmkvCwgpKmkvSAqLworICAgIDB4YjAsIDB4YjEsIDAsICAgIDB4YjIsIDB4YjQsICAgIC8qIKSppL4sIKSxLCAwLCCksiwgpLKktSAqLworICAgIDB4YjUsIDB4YjYsIDB4YjcsIDB4YjgsIDB4YmEsICAgIC8qIKS1LCCktiwgpLcsIKS4LCCkuiAqLworICAgIDB4YmIsIDB4YmMsIDB4YmQsIDB4YmUJICAgICAvKiCkuywgpLwsIKS9LCCkviAqLworfTsKKworICAgIHN0YXRpYyB2b2lkCitjb252ZXJ0X2tzX3RvXzMoc3JjLCBmcCwgbXAsIGxwKQorICAgIGNvbnN0IGNoYXJfdSAgICAqc3JjOworICAgIGludAkJICAgICpmcDsKKyAgICBpbnQJCSAgICAqbXA7CisgICAgaW50CQkgICAgKmxwOworeworICAgIGludCBoID0gKnNyYzsKKyAgICBpbnQgbG93ID0gKihzcmMgKyAxKTsKKyAgICBpbnQgYzsKKyAgICBpbnQgaTsKKworICAgIGlmICgoaSA9IGhhbl9pbmRleChoLCBsb3cpKSA+PSAwCisJJiYgaSA8IHNpemVvZihrc190YWJsZTEpL3NpemVvZihrc190YWJsZTFbMF0pKQorICAgIHsKKwkqZnAgPSBrc190YWJsZTFbaV1bMF07CisJKm1wID0ga3NfdGFibGUxW2ldWzFdOworCSpscCA9IGtzX3RhYmxlMVtpXVsyXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwljID0gKGggPDwgOCkgfCBsb3c7CisJZm9yIChpID0gMDsgaSA8IDQwOyBpKyspCisJICAgIGlmIChrc190YWJsZTJbaV1bMF0gPT0gYykKKwkgICAgeworCQkqZnAgPSBrc190YWJsZTJbaV1bMV07CisJCSptcCA9IGtzX3RhYmxlMltpXVsyXTsKKwkJKmxwID0ga3NfdGFibGUyW2ldWzNdOworCQlyZXR1cm47CisJICAgIH0KKwkqZnAgPSAweGZmOwkvKiCx17ehx8ggxNq15SAoZ3JhcGhpYyBjb2RlKSAqLworCSptcCA9IGg7CisJKmxwID0gbG93OworICAgIH0KK30KKworICAgIHN0YXRpYyBpbnQKK2NvbnZlcnRfM190b19rcyhmdiwgbXYsIGx2LCBkZXMpCisgICAgaW50CSAgICBmdjsKKyAgICBpbnQJICAgIG12OworICAgIGludAkgICAgbHY7CisgICAgY2hhcl91ICAqZGVzOworeworICAgIGNoYXJfdSBrZXlbM107CisgICAgcmVnaXN0ZXIgaW50IGhpLCBsbywgbWkgPSAwLCByZXN1bHQsIGZvdW5kOworCisgICAgaWYgKGZ2ID09IDB4ZmYpCisgICAgeworCWRlc1swXSA9IG12OworCWRlc1sxXSA9IGx2OworCXJldHVybiAyOworICAgIH0KKyAgICBrZXlbMF0gPSBmdjsKKyAgICBrZXlbMV0gPSBtdjsKKyAgICBrZXlbMl0gPSBsdjsKKyAgICBsbyA9IDA7CisgICAgaGkgPSBzaXplb2Yoa3NfdGFibGUxKS8zIC0gMTsKKyAgICBmb3VuZCA9IDA7CisgICAgd2hpbGUgKGxvICsgMSA8IGhpKQorICAgIHsKKwltaSA9IChsbyArIGhpKS8yOworCXJlc3VsdCA9IFNUUk5DTVAoa3NfdGFibGUxW21pXSwga2V5LCAzKTsKKwlpZiAocmVzdWx0ID09IDApCisJeworCSAgICBmb3VuZCA9IDE7CisJICAgIGJyZWFrOworCX0KKwllbHNlIGlmIChyZXN1bHQgPiAwKQorCSAgICBoaSA9IG1pOworCWVsc2UKKwkgICAgbG8gPSBtaTsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkKKyAgICB7CisJaWYgKCFTVFJOQ01QKGtzX3RhYmxlMVtsb10sIGtleSwgMykpCisJeworCSAgICBmb3VuZCA9IDE7CisJICAgIG1pID0gbG87CisJfQorCWlmICghU1RSTkNNUChrc190YWJsZTFbaGldLCBrZXksIDMpKQorCXsKKwkgICAgZm91bmQgPSAxOworCSAgICBtaSA9IGhpOworCX0KKyAgICB9CisgICAgaWYgKCFmb3VuZCkKKyAgICB7CisJZm9yIChtaSA9IDA7IG1pIDwgNDA7IG1pKyspCisJICAgIGlmIChrc190YWJsZTJbbWldWzFdID09IGZ2ICYmIGtzX3RhYmxlMlttaV1bMl0gPT0gbXYgJiYKKwkJa3NfdGFibGUyW21pXVszXSA9PSBsdikKKwkgICAgeworCQlkZXNbMF0gPSAodW5zaWduZWQpKGtzX3RhYmxlMlttaV1bMF0pID4+IDg7CisJCWRlc1sxXSA9IGtzX3RhYmxlMlttaV1bMF07CisJCXJldHVybiAyOwkvKiBmb3VuZCAqLworCSAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZGVzWzBdID0gbWkgLyAoMHhmZi0weGExKSArIDB4YjA7CisJZGVzWzFdID0gbWkgJSAoMHhmZi0weGExKSArIDB4YTE7CisJcmV0dXJuIDI7CQkvKiBmb3VuZCAqLworICAgIH0KKworICAgIC8qIL/PvLrH/CDHpb+hIL74tNkuIGBgS1MgQyA1NjAxIC0gMTk5MiDBpLq4ILGzyK+/6yC6zsijIMfYvLMnJworICAgICAqIDMuMyDA/b+hILyzuO21yCC55rn9wLi3ziBlbmNvZGluZyDH0bTZLgorICAgICAqLworCisgICAgKmRlcysrID0gMHhhNDsJCSAgICAgLyogw6S/8iAqLworICAgICpkZXMrKyA9IDB4ZDQ7CisgICAgKmRlcysrID0gMHhhNDsJCSAgICAgLyogs7nA2rTCILjwtc4gYTQgx+C/oSDA1rTZLiAqLworICAgICpkZXMrKyA9IGpvaGFiX2Zjb25fdG9fd2FuW2Z2XTsKKyAgICAqZGVzKysgPSAweGE0OworICAgICpkZXMrKyA9IGpvaGFiX3Zvd190b193YW5bbXZdOworICAgICpkZXMrKyA9IDB4YTQ7CisgICAgKmRlcysrID0gam9oYWJfbGNvbl90b193YW5bbHZdOworICAgIHJldHVybiA4OworfQpkaWZmIC0tZ2l0IGEvc3JjL2lmX2NzY29wZS5jIGIvc3JjL2lmX2NzY29wZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYzNkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaWZfY3Njb3BlLmMKQEAgLTAsMCArMSwyMjcwIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIENTQ09QRSBzdXBwb3J0IGZvciBWaW0gYWRkZWQgYnkgQW5keSBLYWhuIDxrYWhuQHprMy5kZWMuY29tPgorICogUG9ydGVkIHRvIFdpbjMyIGJ5IFNlcmdleSBLaG9yZXYgPGtob3JldkBzb2Z0bGFiLnJ1PgorICoKKyAqIFRoZSBiYXNpYyBpZGVhL3N0cnVjdHVyZSBvZiBjc2NvcGUgZm9yIFZpbSB3YXMgYm9ycm93ZWQgZnJvbSBOdmkuICBUaGVyZQorICogbWlnaHQgYmUgYSBmZXcgbGluZXMgb2YgY29kZSB0aGF0IGxvb2sgc2ltaWxhciB0byB3aGF0IE52aSBoYXMuCisgKgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisjaWYgZGVmaW5lZChGRUFUX0NTQ09QRSkgfHwgZGVmaW5lZChQUk9UTykKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpZiBkZWZpbmVkKFVOSVgpCisjIGluY2x1ZGUgPHN5cy93YWl0Lmg+CisjZWxzZQorICAgIC8qIG5vdCBVTklYLCBtdXN0IGJlIFdJTjMyICovCisjIGluY2x1ZGUgPGlvLmg+CisjIGluY2x1ZGUgPGZjbnRsLmg+CisjIGluY2x1ZGUgPHByb2Nlc3MuaD4KKyMgZGVmaW5lIFNURElOX0ZJTEVOTyAgICAwCisjIGRlZmluZSBTVERPVVRfRklMRU5PICAgMQorIyBkZWZpbmUgU1RERVJSX0ZJTEVOTyAgIDIKKyMgZGVmaW5lIHBpcGUoZmRzKSBfcGlwZShmZHMsIDI1NiwgT19URVhUfE9fTk9JTkhFUklUKQorI2VuZGlmCisjaW5jbHVkZSAiaWZfY3Njb3BlLmgiCisKK3N0YXRpYyB2b2lkCSAgICBjc191c2FnZV9tc2cgX19BUkdTKChjc2lkX2UgeCkpOworc3RhdGljIGludAkgICAgY3NfYWRkIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAkgICAgY3Nfc3RhdF9lbXNnIF9fQVJHUygoY2hhciAqZm5hbWUpKTsKK3N0YXRpYyBpbnQJICAgIGNzX2FkZF9jb21tb24gX19BUkdTKChjaGFyICosIGNoYXIgKiwgY2hhciAqKSk7CitzdGF0aWMgaW50CSAgICBjc19jaGVja19mb3JfY29ubmVjdGlvbnMgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50CSAgICBjc19jaGVja19mb3JfdGFncyBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQJICAgIGNzX2NudF9jb25uZWN0aW9ucyBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkCSAgICBjc19yZWFkaW5nX2Vtc2cgX19BUkdTKChpbnQgaWR4KSk7CitzdGF0aWMgaW50CSAgICBjc19jbnRfbWF0Y2hlcyBfX0FSR1MoKGludCBpZHgpKTsKK3N0YXRpYyBjaGFyICoJICAgIGNzX2NyZWF0ZV9jbWQgX19BUkdTKChjaGFyICpjc29wdGlvbiwgY2hhciAqcGF0dGVybikpOworc3RhdGljIGludAkgICAgY3NfY3JlYXRlX2Nvbm5lY3Rpb24gX19BUkdTKChpbnQgaSkpOworc3RhdGljIHZvaWQJICAgIGRvX2NzY29wZV9nZW5lcmFsIF9fQVJHUygoZXhhcmdfVCAqZWFwLCBpbnQgbWFrZV9zcGxpdCkpOworc3RhdGljIHZvaWQJICAgIGNzX2ZpbGVfcmVzdWx0cyBfX0FSR1MoKEZJTEUgKiwgaW50ICopKTsKK3N0YXRpYyB2b2lkCSAgICBjc19maWxsX3Jlc3VsdHMgX19BUkdTKChjaGFyICosIGludCAsIGludCAqLCBjaGFyICoqKiwKKwkJCWNoYXIgKioqLCBpbnQgKikpOworc3RhdGljIGludAkgICAgY3NfZmluZCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIGludAkgICAgY3NfZmluZF9jb21tb24gX19BUkdTKChjaGFyICpvcHQsIGNoYXIgKnBhdCwgaW50LCBpbnQgKSk7CitzdGF0aWMgaW50CSAgICBjc19oZWxwIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgdm9pZAkgICAgY3NfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkCSAgICBjbGVhcl9jc2luZm8gX19BUkdTKChpbnQgaSkpOworc3RhdGljIGludAkgICAgY3NfaW5zZXJ0X2ZpbGVsaXN0IF9fQVJHUygoY2hhciAqLCBjaGFyICosIGNoYXIgKiwKKwkJCXN0cnVjdCBzdGF0ICopKTsKK3N0YXRpYyBpbnQJICAgIGNzX2tpbGwgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyB2b2lkCSAgICBjc19raWxsX2V4ZWN1dGUgX19BUkdTKChpbnQsIGNoYXIgKikpOworc3RhdGljIGNzY21kX1QgKiAgICBjc19sb29rdXBfY21kIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitzdGF0aWMgY2hhciAqCSAgICBjc19tYWtlX3ZpbV9zdHlsZV9tYXRjaGVzIF9fQVJHUygoY2hhciAqLCBjaGFyICosCisJCQljaGFyICosIGNoYXIgKikpOworc3RhdGljIGNoYXIgKgkgICAgY3NfbWFuYWdlX21hdGNoZXMgX19BUkdTKChjaGFyICoqLCBjaGFyICoqLCBpbnQsIG1jbWRfZSkpOworc3RhdGljIGNoYXIgKgkgICAgY3NfcGFyc2VfcmVzdWx0cyBfX0FSR1MoKGludCBjbnVtYmVyLCBjaGFyICpidWYsIGludCBidWZzaXplLCBjaGFyICoqY29udGV4dCwgY2hhciAqKmxpbmVudW1iZXIsIGNoYXIgKipzZWFyY2gpKTsKK3N0YXRpYyBjaGFyICoJICAgIGNzX3BhdGhjb21wb25lbnRzIF9fQVJHUygoY2hhciAqcGF0aCkpOworc3RhdGljIHZvaWQJICAgIGNzX3ByaW50X3RhZ3NfcHJpdiBfX0FSR1MoKGNoYXIgKiosIGNoYXIgKiosIGludCkpOworc3RhdGljIGludAkgICAgY3NfcmVhZF9wcm9tcHQgX19BUkdTKChpbnQgKSk7CitzdGF0aWMgdm9pZAkgICAgY3NfcmVsZWFzZV9jc3AgX19BUkdTKChpbnQsIGludCBmcmVlZm5wcCkpOworc3RhdGljIGludAkgICAgY3NfcmVzZXQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3N0YXRpYyBjaGFyICoJICAgIGNzX3Jlc29sdmVfZmlsZSBfX0FSR1MoKGludCwgY2hhciAqKSk7CitzdGF0aWMgaW50CSAgICBjc19zaG93IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisKKworc3RhdGljIGNzaW5mb19UCSAgICBjc2luZm9bQ1NDT1BFX01BWF9DT05ORUNUSU9OU107CitzdGF0aWMgY3NjbWRfVAkgICAgY3NfY21kc1tdID0KK3sKKyAgICB7ICJhZGQiLAljc19hZGQsCisJCU5fKCJBZGQgYSBuZXcgZGF0YWJhc2UiKSwgICAgICJhZGQgZmlsZXxkaXIgW3ByZS1wYXRoXSBbZmxhZ3NdIiwgMCB9LAorICAgIHsgImZpbmQiLAljc19maW5kLAorCQlOXygiUXVlcnkgZm9yIGEgcGF0dGVybiIpLCAgICBGSU5EX1VTQUdFLCAxIH0sCisgICAgeyAiaGVscCIsCWNzX2hlbHAsCisJCU5fKCJTaG93IHRoaXMgbWVzc2FnZSIpLCAgICAgICJoZWxwIiwgMCB9LAorICAgIHsgImtpbGwiLAljc19raWxsLAorCQlOXygiS2lsbCBhIGNvbm5lY3Rpb24iKSwgICAgICAia2lsbCAjIiwgMCB9LAorICAgIHsgInJlc2V0IiwJY3NfcmVzZXQsCisJCU5fKCJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIiksICJyZXNldCIsIDAgfSwKKyAgICB7ICJzaG93IiwJY3Nfc2hvdywKKwkJTl8oIlNob3cgY29ubmVjdGlvbnMiKSwgICAgICAgInNob3ciLCAwIH0sCisgICAgeyBOVUxMIH0KK307CisKKyAgICBzdGF0aWMgdm9pZAorY3NfdXNhZ2VfbXNnKHgpCisgICAgY3NpZF9lIHg7Cit7CisgICAgKHZvaWQpRU1TRzIoXygiRTU2MDogVXNhZ2U6IGNzW2NvcGVdICVzIiksIGNzX2NtZHNbKGludCl4XS51c2FnZSk7Cit9CisKKy8qCisgKiBQUklWQVRFOiBkb19jc2NvcGVfZ2VuZXJhbAorICoKKyAqIGZpbmQgdGhlIGNvbW1hbmQsIHByaW50IGhlbHAgaWYgaW52YWxpZCwgYW5kIHRoZSB0aGVuIGNhbGwgdGhlCisgKiBjb3JyZXNwb25kaW5nIGNvbW1hbmQgZnVuY3Rpb24sCisgKiBjYWxsZWQgZnJvbSBkb19jc2NvcGUgYW5kIGRvX3Njc2NvcGUKKyAqLworICAgIHN0YXRpYyB2b2lkCitkb19jc2NvcGVfZ2VuZXJhbChlYXAsIG1ha2Vfc3BsaXQpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGludAkJbWFrZV9zcGxpdDsgLyogd2hldGhlciB0byBzcGxpdCB3aW5kb3cgKi8KK3sKKyAgICBjc2NtZF9UICpjbWRwOworCisgICAgY3NfaW5pdCgpOworICAgIGlmICgoY21kcCA9IGNzX2xvb2t1cF9jbWQoZWFwKSkgPT0gTlVMTCkKKyAgICB7CisJY3NfaGVscChlYXApOworCXJldHVybjsKKyAgICB9CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBpZiAobWFrZV9zcGxpdCkKKyAgICB7CisJaWYgKCFjbWRwLT5jYW5zcGxpdCkKKwl7CisJICAgICh2b2lkKU1TR19QVVRTKF8oIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIpKTsKKwkgICAgcmV0dXJuOworCX0KKwlwb3N0cG9uZWRfc3BsaXQgPSAtMTsKKwlwb3N0cG9uZWRfc3BsaXRfZmxhZ3MgPSBjbWRtb2Quc3BsaXQ7CisgICAgfQorI2VuZGlmCisKKyAgICBjbWRwLT5mdW5jKGVhcCk7CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBwb3N0cG9uZWRfc3BsaXRfZmxhZ3MgPSAwOworI2VuZGlmCit9CisKKy8qCisgKiBQVUJMSUM6IGRvX2NzY29wZQorICovCisgICAgdm9pZAorZG9fY3Njb3BlKGVhcCkKKyAgICBleGFyZ19UICplYXA7Cit7CisgICAgZG9fY3Njb3BlX2dlbmVyYWwoZWFwLCBGQUxTRSk7Cit9CisKKy8qCisgKiBQVUJMSUM6IGRvX3Njc2NvcGUKKyAqCisgKiBzYW1lIGFzIGRvX2NzY29wZSwgYnV0IHNwbGl0cyB3aW5kb3csIHRvby4KKyAqLworICAgIHZvaWQKK2RvX3Njc2NvcGUoZWFwKQorICAgIGV4YXJnX1QgKmVhcDsKK3sKKyAgICBkb19jc2NvcGVfZ2VuZXJhbChlYXAsIFRSVUUpOworfQorCisvKgorICogUFVCTElDOiBkb19jc3RhZworICoKKyAqLworICAgIHZvaWQKK2RvX2NzdGFnKGVhcCkKKyAgICBleGFyZ19UICplYXA7Cit7CisgICAgaW50IHJldCA9IEZBTFNFOworCisgICAgY3NfaW5pdCgpOworCisgICAgaWYgKGVhcC0+YXJnID09IE5VTEwgfHwgc3RybGVuKChjb25zdCBjaGFyICopKGVhcC0+YXJnKSkgPT0gMCkKKyAgICB7CisJKHZvaWQpRU1TRyhfKCJFNTYyOiBVc2FnZTogY3N0YWcgPGlkZW50PiIpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoIChwX2NzdG8pCisgICAgeworICAgIGNhc2UgMCA6CisJaWYgKGNzX2NoZWNrX2Zvcl9jb25uZWN0aW9ucygpKQorCXsKKwkgICAgcmV0ID0gY3NfZmluZF9jb21tb24oImciLCAoY2hhciAqKShlYXAtPmFyZyksIGVhcC0+Zm9yY2VpdCwgRkFMU0UpOworCSAgICBpZiAocmV0ID09IEZBTFNFKQorCSAgICB7CisJCWNzX2ZyZWVfdGFncygpOworCQlpZiAobXNnX2NvbCkKKwkJICAgIG1zZ19wdXRjaGFyKCdcbicpOworCisJCWlmIChjc19jaGVja19mb3JfdGFncygpKQorCQkgICAgcmV0ID0gZG9fdGFnKGVhcC0+YXJnLCBEVF9KVU1QLCAwLCBlYXAtPmZvcmNlaXQsIEZBTFNFKTsKKwkgICAgfQorCX0KKwllbHNlIGlmIChjc19jaGVja19mb3JfdGFncygpKQorCXsKKwkgICAgcmV0ID0gZG9fdGFnKGVhcC0+YXJnLCBEVF9KVU1QLCAwLCBlYXAtPmZvcmNlaXQsIEZBTFNFKTsKKwl9CisJYnJlYWs7CisgICAgY2FzZSAxIDoKKwlpZiAoY3NfY2hlY2tfZm9yX3RhZ3MoKSkKKwl7CisJICAgIHJldCA9IGRvX3RhZyhlYXAtPmFyZywgRFRfSlVNUCwgMCwgZWFwLT5mb3JjZWl0LCBGQUxTRSk7CisJICAgIGlmIChyZXQgPT0gRkFMU0UpCisJICAgIHsKKwkJaWYgKG1zZ19jb2wpCisJCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKworCQlpZiAoY3NfY2hlY2tfZm9yX2Nvbm5lY3Rpb25zKCkpCisJCXsKKwkJICAgIHJldCA9IGNzX2ZpbmRfY29tbW9uKCJnIiwgKGNoYXIgKikoZWFwLT5hcmcpLCBlYXAtPmZvcmNlaXQsCisJCQkJCSBGQUxTRSk7CisJCSAgICBpZiAocmV0ID09IEZBTFNFKQorCQkJY3NfZnJlZV90YWdzKCk7CisJCX0KKwkgICAgfQorCX0KKwllbHNlIGlmIChjc19jaGVja19mb3JfY29ubmVjdGlvbnMoKSkKKwl7CisJICAgIHJldCA9IGNzX2ZpbmRfY29tbW9uKCJnIiwgKGNoYXIgKikoZWFwLT5hcmcpLCBlYXAtPmZvcmNlaXQsIEZBTFNFKTsKKwkgICAgaWYgKHJldCA9PSBGQUxTRSkKKwkJY3NfZnJlZV90YWdzKCk7CisJfQorCWJyZWFrOworICAgIGRlZmF1bHQgOgorCWJyZWFrOworICAgIH0KKworICAgIGlmICghcmV0KQorICAgIHsKKwkodm9pZClFTVNHKF8oIkUyNTc6IGNzdGFnOiB0YWcgbm90IGZvdW5kIikpOworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpCisJZ19kb190YWdwcmV2aWV3ID0gMDsKKyNlbmRpZgorICAgIH0KKworfSAvKiBkb19jc2NvcGUgKi8KKworCisvKgorICogUFVCTElDOiBjc19maW5kCisgKgorICogdGhpcyBzaW11bGF0ZXMgYSB2aW1fZmdldHMoKSwgYnV0IGZvciBjc2NvcGUsIHJldHVybnMgdGhlIG5leHQgbGluZQorICogZnJvbSB0aGUgY3Njb3BlIG91dHB1dC4gIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIGZpbmRfdGFncygpCisgKgorICogcmV0dXJucyBUUlVFIGlmIGVvZiwgRkFMU0Ugb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK2NzX2ZnZXRzKGJ1Ziwgc2l6ZSkKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCXNpemU7Cit7CisgICAgY2hhciAqcDsKKworICAgIGlmICgocCA9IGNzX21hbmFnZV9tYXRjaGVzKE5VTEwsIE5VTEwsIC0xLCBHZXQpKSA9PSBOVUxMKQorCXJldHVybiBUUlVFOworCisgICAgaWYgKChpbnQpc3RybGVuKHApID4gc2l6ZSkKKyAgICB7CisJc3RybmNweSgoY2hhciAqKWJ1ZiwgcCwgc2l6ZSAtIDEpOworCWJ1ZltzaXplXSA9ICdcMCc7CisgICAgfQorICAgIGVsc2UKKwkodm9pZClzdHJjcHkoKGNoYXIgKilidWYsIHApOworCisgICAgcmV0dXJuIEZBTFNFOworfSAvKiBjc19mZ2V0cyAqLworCisKKy8qCisgKiBQVUJMSUM6IGNzX2ZyZWVfdGFncworICoKKyAqIGNhbGxlZCBvbmx5IGZyb20gZG9fdGFnKCksIHdoZW4gcG9wcGluZyB0aGUgdGFnIHN0YWNrCisgKi8KKyAgICB2b2lkCitjc19mcmVlX3RhZ3MoKQoreworICAgIGNzX21hbmFnZV9tYXRjaGVzKE5VTEwsIE5VTEwsIC0xLCBGcmVlKTsKK30KKworCisvKgorICogUFVCTElDOiBjc19wcmludF90YWdzCisgKgorICogY2FsbGVkIGZyb20gZG9fdGFnKCkKKyAqLworICAgIHZvaWQKK2NzX3ByaW50X3RhZ3MoKQoreworICAgIGNzX21hbmFnZV9tYXRjaGVzKE5VTEwsIE5VTEwsIC0xLCBQcmludCk7Cit9CisKKworLyoKKyAqICJjc2NvcGVfY29ubmVjdGlvbihbe251bX0gLCB7ZGJwYXRofSBbLCB7cHJlcGVuZH1dXSkiIGZ1bmN0aW9uCisgKgorICoJCUNoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhIHxjc2NvcGV8IGNvbm5lY3Rpb24uICBJZiBubworICoJCXBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCwgdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJuczoKKyAqCisgKgkJMCwgaWYgY3Njb3BlIHdhcyBub3QgYXZhaWxhYmxlIChub3QgY29tcGlsZWQgaW4pLCBvciBpZiB0aGVyZQorICoJCWFyZSBubyBjc2NvcGUgY29ubmVjdGlvbnM7IG9yCisgKgkJMSwgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNzY29wZSBjb25uZWN0aW9uLgorICoKKyAqCQlJZiBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZpZWQsIHRoZW4gdGhlIHZhbHVlIG9mIHtudW19CisgKgkJZGV0ZXJtaW5lcyBob3cgZXhpc3RlbmNlIG9mIGEgY3Njb3BlIGNvbm5lY3Rpb24gaXMgY2hlY2tlZDoKKyAqCisgKgkJe251bX0JRGVzY3JpcHRpb24gb2YgZXhpc3RlbmNlIGNoZWNrCisgKgkJLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJMAlTYW1lIGFzIG5vIHBhcmFtZXRlcnMgKGUuZy4sICJjc2NvcGVfY29ubmVjdGlvbigpIikuCisgKgkJMQlJZ25vcmUge3ByZXBlbmR9LCBhbmQgdXNlIHBhcnRpYWwgc3RyaW5nIG1hdGNoZXMgZm9yCisgKgkJCXtkYnBhdGh9LgorICoJCTIJSWdub3JlIHtwcmVwZW5kfSwgYW5kIHVzZSBleGFjdCBzdHJpbmcgbWF0Y2hlcyBmb3IKKyAqCQkJe2RicGF0aH0uCisgKgkJMwlVc2Uge3ByZXBlbmR9LCB1c2UgcGFydGlhbCBzdHJpbmcgbWF0Y2hlcyBmb3IgYm90aAorICoJCQl7ZGJwYXRofSBhbmQge3ByZXBlbmR9LgorICoJCTQJVXNlIHtwcmVwZW5kfSwgdXNlIGV4YWN0IHN0cmluZyBtYXRjaGVzIGZvciBib3RoCisgKgkJCXtkYnBhdGh9IGFuZCB7cHJlcGVuZH0uCisgKgorICoJCU5vdGU6IEFsbCBzdHJpbmcgY29tcGFyaXNvbnMgYXJlIGNhc2Ugc2Vuc2l0aXZlIQorICovCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgaW50Citjc19jb25uZWN0aW9uKG51bSwgZGJwYXRoLCBwcGF0aCkKKyAgICBpbnQgbnVtOworICAgIGNoYXJfdSAqZGJwYXRoOworICAgIGNoYXJfdSAqcHBhdGg7Cit7CisgICAgaW50IGk7CisKKyAgICBpZiAobnVtIDwgMCB8fCBudW0gPiA0IHx8IChudW0gPiAwICYmICFkYnBhdGgpKQorCXJldHVybiBGQUxTRTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBDU0NPUEVfTUFYX0NPTk5FQ1RJT05TOyBpKyspCisgICAgeworCWlmICghY3NpbmZvW2ldLmZuYW1lKQorCSAgICBjb250aW51ZTsKKworCWlmIChudW0gPT0gMCkKKwkgICAgcmV0dXJuIFRSVUU7CisKKwlzd2l0Y2ggKG51bSkKKwl7CisJY2FzZSAxOgorCSAgICBpZiAoc3Ryc3RyKGNzaW5mb1tpXS5mbmFtZSwgKGNoYXIgKilkYnBhdGgpKQorCQlyZXR1cm4gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBpZiAoc3RyY21wKGNzaW5mb1tpXS5mbmFtZSwgKGNoYXIgKilkYnBhdGgpID09IDApCisJCXJldHVybiBUUlVFOworCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIGlmIChzdHJzdHIoY3NpbmZvW2ldLmZuYW1lLCAoY2hhciAqKWRicGF0aCkKKwkJICAgICYmICgoIXBwYXRoICYmICFjc2luZm9baV0ucHBhdGgpCisJCQl8fCAocHBhdGgKKwkJCSAgICAmJiBjc2luZm9baV0ucHBhdGgKKwkJCSAgICAmJiBzdHJzdHIoY3NpbmZvW2ldLnBwYXRoLCAoY2hhciAqKXBwYXRoKSkpKQorCQlyZXR1cm4gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSA0OgorCSAgICBpZiAoKHN0cmNtcChjc2luZm9baV0uZm5hbWUsIChjaGFyICopZGJwYXRoKSA9PSAwKQorCQkgICAgJiYgKCghcHBhdGggJiYgIWNzaW5mb1tpXS5wcGF0aCkKKwkJCXx8IChwcGF0aAorCQkJICAgICYmIGNzaW5mb1tpXS5wcGF0aAorCQkJICAgICYmIChzdHJjbXAoY3NpbmZvW2ldLnBwYXRoLCAoY2hhciAqKXBwYXRoKSA9PSAwKSkpKQorCQlyZXR1cm4gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIHJldHVybiBGQUxTRTsKK30gLyogY3NfY29ubmVjdGlvbiAqLworI2VuZGlmCisKKworLyoKKyAqIFBSSVZBVEUgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFBSSVZBVEU6IGNzX2FkZAorICoKKyAqIGFkZCBjc2NvcGUgZGF0YWJhc2Ugb3IgYSBkaXJlY3RvcnkgbmFtZSAodG8gbG9vayBmb3IgY3Njb3BlLm91dCkKKyAqIHRoZSB0aGUgY3Njb3BlIGNvbm5lY3Rpb24gbGlzdAorICoKKyAqIE1BWFBBVEhMIDI1NgorICovCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyBpbnQKK2NzX2FkZChlYXApCisgICAgZXhhcmdfVCAqZWFwOworeworICAgIGNoYXIgKmZuYW1lLCAqcHBhdGgsICpmbGFncyA9IE5VTEw7CisKKyAgICBpZiAoKGZuYW1lID0gc3RydG9rKChjaGFyICopTlVMTCwgKGNvbnN0IGNoYXIgKikiICIpKSA9PSBOVUxMKQorICAgIHsKKwljc191c2FnZV9tc2coQWRkKTsKKwlyZXR1cm4gQ1NDT1BFX0ZBSUxVUkU7CisgICAgfQorICAgIGlmICgocHBhdGggPSBzdHJ0b2soKGNoYXIgKilOVUxMLCAoY29uc3QgY2hhciAqKSIgIikpICE9IE5VTEwpCisJZmxhZ3MgPSBzdHJ0b2soKGNoYXIgKilOVUxMLCAoY29uc3QgY2hhciAqKSIgIik7CisKKyAgICByZXR1cm4gY3NfYWRkX2NvbW1vbihmbmFtZSwgcHBhdGgsIGZsYWdzKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitjc19zdGF0X2Vtc2coZm5hbWUpCisgICAgY2hhciAqZm5hbWU7Cit7CisgICAgY2hhciAqc3RhdF9lbXNnID0gXygiRTU2Mzogc3RhdCglcykgZXJyb3I6ICVkIik7CisgICAgY2hhciAqYnVmID0gKGNoYXIgKilhbGxvYygodW5zaWduZWQpc3RybGVuKHN0YXRfZW1zZykgKyBNQVhQQVRITCArIDEwKTsKKworICAgIGlmIChidWYgIT0gTlVMTCkKKyAgICB7CisJKHZvaWQpc3ByaW50ZihidWYsIHN0YXRfZW1zZywgZm5hbWUsIGVycm5vKTsKKwkodm9pZClFTVNHKGJ1Zik7CisJdmltX2ZyZWUoYnVmKTsKKyAgICB9CisgICAgZWxzZQorCSh2b2lkKUVNU0coXygiRTU2Mzogc3RhdCBlcnJvciIpKTsKK30KKworCisvKgorICogUFJJVkFURTogY3NfYWRkX2NvbW1vbgorICoKKyAqIHRoZSBjb21tb24gcm91dGluZSB0byBhZGQgYSBuZXcgY3Njb3BlIGNvbm5lY3Rpb24uICBjYWxsZWQgYnkKKyAqIGNzX2FkZCgpIGFuZCBjc19yZXNldCgpLiAgaSByZWFsbHkgZG9uJ3QgbGlrZSB0byBkbyB0aGlzLCBidXQgdGhpcworICogcm91dGluZSB1c2VzIGEgbnVtYmVyIG9mIGdvdG8gc3RhdGVtZW50cy4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NzX2FkZF9jb21tb24oYXJnMSwgYXJnMiwgZmxhZ3MpCisgICAgY2hhciAqYXJnMTsJICAgIC8qIGZpbGVuYW1lIC0gbWF5IGNvbnRhaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisgICAgY2hhciAqYXJnMjsJICAgIC8qIHByZXBlbmQgcGF0aCAtIG1heSBjb250YWluIGVudmlyb25tZW50IHZhcmlhYmxlcyAqLworICAgIGNoYXIgKmZsYWdzOworeworICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgICAgaW50IHJldDsKKyAgICBjaGFyICpmbmFtZSA9IE5VTEw7CisgICAgY2hhciAqZm5hbWUyID0gTlVMTDsKKyAgICBjaGFyICpwcGF0aCA9IE5VTEw7CisgICAgaW50IGk7CisKKyAgICAvKiBnZXQgdGhlIGZpbGVuYW1lIChhcmcxKSwgZXhwYW5kIGl0LCBhbmQgdHJ5IHRvIHN0YXQgaXQgKi8KKyAgICBpZiAoKGZuYW1lID0gKGNoYXIgKilhbGxvYyhNQVhQQVRITCsxKSkgPT0gTlVMTCkKKwlnb3RvIGFkZF9lcnI7CisKKyAgICBleHBhbmRfZW52KChjaGFyX3UgKilhcmcxLCAoY2hhcl91ICopZm5hbWUsIE1BWFBBVEhMKTsKKyAgICByZXQgPSBzdGF0KGZuYW1lLCAmc3RhdGJ1Zik7CisgICAgaWYgKHJldCA8IDApCisgICAgeworc3RhdGVycjoKKwlpZiAocF9jc3ZlcmJvc2UpCisJICAgIGNzX3N0YXRfZW1zZyhmbmFtZSk7CisJZ290byBhZGRfZXJyOworICAgIH0KKworICAgIC8qIGdldCB0aGUgcHJlcGVuZCBwYXRoIChhcmcyKSwgZXhwYW5kIGl0LCBhbmQgdHJ5IHRvIHN0YXQgaXQgKi8KKyAgICBpZiAoYXJnMiAhPSBOVUxMKQorICAgIHsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmMjsKKworCWlmICgocHBhdGggPSAoY2hhciAqKWFsbG9jKE1BWFBBVEhMKzEpKSA9PSBOVUxMKQorCSAgICBnb3RvIGFkZF9lcnI7CisKKwlleHBhbmRfZW52KChjaGFyX3UgKilhcmcyLCAoY2hhcl91ICopcHBhdGgsIE1BWFBBVEhMKTsKKwlyZXQgPSBzdGF0KHBwYXRoLCAmc3RhdGJ1ZjIpOworCWlmIChyZXQgPCAwKQorCSAgICBnb3RvIHN0YXRlcnI7CisgICAgfQorCisgICAgLyogaWYgZmlsZW5hbWUgaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgY3Njb3BlIGRhdGFiYXNlIG5hbWUgdG8gaXQgKi8KKyAgICBpZiAoKHN0YXRidWYuc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUikKKyAgICB7CisJZm5hbWUyID0gKGNoYXIgKilhbGxvYyhzdHJsZW4oQ1NDT1BFX0RCRklMRSkgKyBzdHJsZW4oZm5hbWUpICsgMik7CisJaWYgKGZuYW1lMiA9PSBOVUxMKQorCSAgICBnb3RvIGFkZF9lcnI7CisKKwl3aGlsZSAoZm5hbWVbc3RybGVuKGZuYW1lKS0xXSA9PSAnLycKKyNpZmRlZiBXSU4zMgorCQl8fCBmbmFtZVtzdHJsZW4oZm5hbWUpLTFdID09ICdcXCcKKyNlbmRpZgorCQkpCisJeworCSAgICBmbmFtZVtzdHJsZW4oZm5hbWUpLTFdID0gJ1wwJzsKKwkgICAgaWYgKHN0cmxlbihmbmFtZSkgPT0gMCkKKwkJYnJlYWs7CisJfQorCWlmIChmbmFtZVswXSA9PSAnXDAnKQorCSAgICAodm9pZClzcHJpbnRmKGZuYW1lMiwgIi8lcyIsIENTQ09QRV9EQkZJTEUpOworCWVsc2UKKwkgICAgKHZvaWQpc3ByaW50ZihmbmFtZTIsICIlcy8lcyIsIGZuYW1lLCBDU0NPUEVfREJGSUxFKTsKKworCXJldCA9IHN0YXQoZm5hbWUyLCAmc3RhdGJ1Zik7CisJaWYgKHJldCA8IDApCisJeworCSAgICBpZiAocF9jc3ZlcmJvc2UpCisJCWNzX3N0YXRfZW1zZyhmbmFtZTIpOworCSAgICBnb3RvIGFkZF9lcnI7CisJfQorCisJaSA9IGNzX2luc2VydF9maWxlbGlzdChmbmFtZTIsIHBwYXRoLCBmbGFncywgJnN0YXRidWYpOworICAgIH0KKyNpZiBkZWZpbmVkKFVOSVgpCisgICAgZWxzZSBpZiAoU19JU1JFRyhzdGF0YnVmLnN0X21vZGUpIHx8IFNfSVNMTksoc3RhdGJ1Zi5zdF9tb2RlKSkKKyNlbHNlCisJLyogc3Vic3RpdHV0ZSBkZWZpbmUgU19JU1JFRyBmcm9tIG9zX3VuaXguaCAqLworICAgIGVsc2UgaWYgKCgoc3RhdGJ1Zi5zdF9tb2RlKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKyNlbmRpZgorICAgIHsKKwlpID0gY3NfaW5zZXJ0X2ZpbGVsaXN0KGZuYW1lLCBwcGF0aCwgZmxhZ3MsICZzdGF0YnVmKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAocF9jc3ZlcmJvc2UpCisJICAgICh2b2lkKUVNU0cyKAorCQlfKCJFNTY0OiAlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiKSwKKwkJZm5hbWUpOworCWdvdG8gYWRkX2VycjsKKyAgICB9CisKKyAgICBpZiAoaSAhPSAtMSkKKyAgICB7CisJaWYgKGNzX2NyZWF0ZV9jb25uZWN0aW9uKGkpID09IENTQ09QRV9GQUlMVVJFCisJCXx8IGNzX3JlYWRfcHJvbXB0KGkpID09IENTQ09QRV9GQUlMVVJFKQorCXsKKwkgICAgY3NfcmVsZWFzZV9jc3AoaSwgVFJVRSk7CisJICAgIGdvdG8gYWRkX2VycjsKKwl9CisKKwlpZiAocF9jc3ZlcmJvc2UpCisJeworCSAgICBtc2dfY2xyX2VvcygpOworCSAgICAodm9pZClzbXNnX2F0dHIoaGxfYXR0cihITEZfUiksCisJCQkgICAgKGNoYXJfdSAqKV8oIkFkZGVkIGNzY29wZSBkYXRhYmFzZSAlcyIpLAorCQkJICAgIGNzaW5mb1tpXS5mbmFtZSk7CisJfQorICAgIH0KKworICAgIHZpbV9mcmVlKGZuYW1lKTsKKyAgICB2aW1fZnJlZShmbmFtZTIpOworICAgIHZpbV9mcmVlKHBwYXRoKTsKKyAgICByZXR1cm4gQ1NDT1BFX1NVQ0NFU1M7CisKK2FkZF9lcnI6CisgICAgdmltX2ZyZWUoZm5hbWUyKTsKKyAgICB2aW1fZnJlZShmbmFtZSk7CisgICAgdmltX2ZyZWUocHBhdGgpOworICAgIHJldHVybiBDU0NPUEVfRkFJTFVSRTsKK30gLyogY3NfYWRkX2NvbW1vbiAqLworCisKKyAgICBzdGF0aWMgaW50Citjc19jaGVja19mb3JfY29ubmVjdGlvbnMoKQoreworICAgIHJldHVybiAoY3NfY250X2Nvbm5lY3Rpb25zKCkgPiAwKTsKK30gLyogY3NfY2hlY2tfZm9yX2Nvbm5lY3Rpb25zICovCisKKworICAgIHN0YXRpYyBpbnQKK2NzX2NoZWNrX2Zvcl90YWdzKCkKK3sKKyAgICByZXR1cm4gKHBfdGFnc1swXSAhPSBOVUwgJiYgY3VyYnVmLT5iX3BfdGFncyAhPSBOVUwpOworfSAvKiBjc19jaGVja19mb3JfdGFncyAqLworCisKKy8qCisgKiBQUklWQVRFOiBjc19jbnRfY29ubmVjdGlvbnMKKyAqCisgKiBjb3VudCB0aGUgbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucworICovCisgICAgc3RhdGljIGludAorY3NfY250X2Nvbm5lY3Rpb25zKCkKK3sKKyAgICBzaG9ydCBpOworICAgIHNob3J0IGNudCA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQ1NDT1BFX01BWF9DT05ORUNUSU9OUzsgaSsrKQorICAgIHsKKwlpZiAoY3NpbmZvW2ldLmZuYW1lICE9IE5VTEwpCisJICAgIGNudCsrOworICAgIH0KKyAgICByZXR1cm4gY250OworfSAvKiBjc19jbnRfY29ubmVjdGlvbnMgKi8KKworICAgIHN0YXRpYyB2b2lkCitjc19yZWFkaW5nX2Vtc2coaWR4KQorICAgIGludCBpZHg7CS8qIGNvbm5lY3Rpb24gaW5kZXggKi8KK3sKKyAgICBFTVNHTihfKCJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVsZCIpLCBpZHgpOworfQorCisjZGVmaW5lCUNTUkVBRF9CVUZTSVpFCTIwNDgKKy8qCisgKiBQUklWQVRFOiBjc19jbnRfbWF0Y2hlcworICoKKyAqIGNvdW50IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3IgYSBnaXZlbiBjc2NvcGUgY29ubmVjdGlvbi4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NzX2NudF9tYXRjaGVzKGlkeCkKKyAgICBpbnQgaWR4OworeworICAgIGNoYXIgKnN0b2s7CisgICAgY2hhciAqYnVmOworICAgIGludCBubGluZXM7CisKKyAgICBidWYgPSAoY2hhciAqKWFsbG9jKENTUkVBRF9CVUZTSVpFKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisJcmV0dXJuIDA7CisgICAgZm9yICg7OykKKyAgICB7CisJaWYgKCFmZ2V0cyhidWYsIENTUkVBRF9CVUZTSVpFLCBjc2luZm9baWR4XS5mcl9mcCkpCisJeworCSAgICBpZiAoZmVvZihjc2luZm9baWR4XS5mcl9mcCkpCisJCWVycm5vID0gRUlPOworCisJICAgIGNzX3JlYWRpbmdfZW1zZyhpZHgpOworCisJICAgIHZpbV9mcmVlKGJ1Zik7CisJICAgIHJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBkYXRhYmFzZSBpcyBvdXQgb2YgZGF0ZSwgb3IgdGhlcmUncyBzb21lIG90aGVyIHByb2JsZW0sCisJICogY3Njb3BlIHdpbGwgb3V0cHV0IGVycm9yIG1lc3NhZ2VzIGJlZm9yZSB0aGUgbnVtYmVyLW9mLWxpbmVzIG91dHB1dC4KKwkgKiBEaXNwbGF5L2Rpc2NhcmQgYW55IG91dHB1dCB0aGF0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSB3YW50LgorCSAqLworCWlmICgoc3RvayA9IHN0cnRvayhidWYsIChjb25zdCBjaGFyICopIiAiKSkgPT0gTlVMTCkKKwkgICAgY29udGludWU7CisJaWYgKHN0cmNtcCgoY29uc3QgY2hhciAqKXN0b2ssICJjc2NvcGU6IikpCisJICAgIGNvbnRpbnVlOworCisJaWYgKChzdG9rID0gc3RydG9rKE5VTEwsIChjb25zdCBjaGFyICopIiAiKSkgPT0gTlVMTCkKKwkgICAgY29udGludWU7CisJbmxpbmVzID0gYXRvaShzdG9rKTsKKwlpZiAobmxpbmVzIDwgMCkKKwl7CisJICAgIG5saW5lcyA9IDA7CisJICAgIGJyZWFrOworCX0KKworCWlmICgoc3RvayA9IHN0cnRvayhOVUxMLCAoY29uc3QgY2hhciAqKSIgIikpID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworCWlmIChzdHJuY21wKChjb25zdCBjaGFyICopc3RvaywgImxpbmVzIiwgNSkpCisJICAgIGNvbnRpbnVlOworCisJYnJlYWs7CisgICAgfQorCisgICAgdmltX2ZyZWUoYnVmKTsKKyAgICByZXR1cm4gbmxpbmVzOworfSAvKiBjc19jbnRfbWF0Y2hlcyAqLworCisKKy8qCisgKiBQUklWQVRFOiBjc19jcmVhdGVfY21kCisgKgorICogQ3JlYXRlcyB0aGUgYWN0dWFsIGNzY29wZSBjb21tYW5kIHF1ZXJ5IGZyb20gd2hhdCB0aGUgdXNlciBlbnRlcmVkLgorICovCisgICAgc3RhdGljIGNoYXIgKgorY3NfY3JlYXRlX2NtZChjc29wdGlvbiwgcGF0dGVybikKKyAgICBjaGFyICpjc29wdGlvbjsKKyAgICBjaGFyICpwYXR0ZXJuOworeworICAgIGNoYXIgKmNtZDsKKyAgICBzaG9ydCBzZWFyY2g7CisKKyAgICBzd2l0Y2ggKGNzb3B0aW9uWzBdKQorICAgIHsKKyAgICBjYXNlICcwJyA6IGNhc2UgJ3MnIDoKKwlzZWFyY2ggPSAwOworCWJyZWFrOworICAgIGNhc2UgJzEnIDogY2FzZSAnZycgOgorCXNlYXJjaCA9IDE7CisJYnJlYWs7CisgICAgY2FzZSAnMicgOiBjYXNlICdkJyA6CisJc2VhcmNoID0gMjsKKwlicmVhazsKKyAgICBjYXNlICczJyA6IGNhc2UgJ2MnIDoKKwlzZWFyY2ggPSAzOworCWJyZWFrOworICAgIGNhc2UgJzQnIDogY2FzZSAndCcgOgorCXNlYXJjaCA9IDQ7CisJYnJlYWs7CisgICAgY2FzZSAnNicgOiBjYXNlICdlJyA6CisJc2VhcmNoID0gNjsKKwlicmVhazsKKyAgICBjYXNlICc3JyA6IGNhc2UgJ2YnIDoKKwlzZWFyY2ggPSA3OworCWJyZWFrOworICAgIGNhc2UgJzgnIDogY2FzZSAnaScgOgorCXNlYXJjaCA9IDg7CisJYnJlYWs7CisgICAgZGVmYXVsdCA6CisJKHZvaWQpRU1TRyhfKCJFNTYxOiB1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIpKTsKKwljc191c2FnZV9tc2coRmluZCk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKChjbWQgPSAoY2hhciAqKWFsbG9jKHN0cmxlbihwYXR0ZXJuKSArIDIpKSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgKHZvaWQpc3ByaW50ZihjbWQsICIlZCVzIiwgc2VhcmNoLCBwYXR0ZXJuKTsKKworICAgIHJldHVybiBjbWQ7Cit9IC8qIGNzX2NyZWF0ZV9jbWQgKi8KKworCisvKgorICogUFJJVkFURTogY3NfY3JlYXRlX2Nvbm5lY3Rpb24KKyAqCisgKiBUaGlzIHBpZWNlIG9mIGNvZGUgd2FzIHRha2VuL2FkYXB0ZWQgZnJvbSBudmkuICBkbyB3ZSBuZWVkIHRvIGFkZAorICogdGhlIEJTRCBsaWNlbnNlIG5vdGljZT8KKyAqLworICAgIHN0YXRpYyBpbnQKK2NzX2NyZWF0ZV9jb25uZWN0aW9uKGkpCisgICAgaW50IGk7Cit7CisgICAgaW50IHRvX2NzWzJdLCBmcm9tX2NzWzJdLCBsZW47CisgICAgY2hhciAqcHJvZywgKmNtZCwgKnBwYXRoID0gTlVMTDsKKyNpZm5kZWYgVU5JWAorICAgIGludCBpbl9zYXZlLCBvdXRfc2F2ZSwgZXJyX3NhdmU7CisgICAgaW50IHBoOworIyBpZmRlZiBGRUFUX0dVSQorICAgIEhXTkQgYWN0aXZld25kID0gTlVMTDsKKyAgICBIV05EIGNvbnNvbGV3bmQgPSBOVUxMOworIyBlbmRpZgorI2VuZGlmCisKKyAgICAvKgorICAgICAqIENzY29wZSByZWFkcyBmcm9tIHRvX2NzWzBdIGFuZCB3cml0ZXMgdG8gZnJvbV9jc1sxXTsgdmkgcmVhZHMgZnJvbQorICAgICAqIGZyb21fY3NbMF0gYW5kIHdyaXRlcyB0byB0b19jc1sxXS4KKyAgICAgKi8KKyAgICB0b19jc1swXSA9IHRvX2NzWzFdID0gZnJvbV9jc1swXSA9IGZyb21fY3NbMV0gPSAtMTsKKyAgICBpZiAocGlwZSh0b19jcykgPCAwIHx8IHBpcGUoZnJvbV9jcykgPCAwKQorICAgIHsKKwkodm9pZClFTVNHKF8oIkU1NjY6IENvdWxkIG5vdCBjcmVhdGUgY3Njb3BlIHBpcGVzIikpOworZXJyX2Nsb3Npbmc6CisJaWYgKHRvX2NzWzBdICE9IC0xKQorCSAgICAodm9pZCljbG9zZSh0b19jc1swXSk7CisJaWYgKHRvX2NzWzFdICE9IC0xKQorCSAgICAodm9pZCljbG9zZSh0b19jc1sxXSk7CisJaWYgKGZyb21fY3NbMF0gIT0gLTEpCisJICAgICh2b2lkKWNsb3NlKGZyb21fY3NbMF0pOworCWlmIChmcm9tX2NzWzFdICE9IC0xKQorCSAgICAodm9pZCljbG9zZShmcm9tX2NzWzFdKTsKKwlyZXR1cm4gQ1NDT1BFX0ZBSUxVUkU7CisgICAgfQorCisjaWYgZGVmaW5lZChVTklYKQorICAgIHN3aXRjaCAoY3NpbmZvW2ldLnBpZCA9IGZvcmsoKSkKKyAgICB7CisgICAgY2FzZSAtMToKKwkodm9pZClFTVNHKF8oIkU2MjI6IENvdWxkIG5vdCBmb3JrIGZvciBjc2NvcGUiKSk7CisJZ290byBlcnJfY2xvc2luZzsKKyAgICBjYXNlIDA6CQkJCS8qIGNoaWxkOiBydW4gY3Njb3BlLiAqLworI2Vsc2UKKwlpbl9zYXZlID0gZHVwKFNURElOX0ZJTEVOTyk7CisJb3V0X3NhdmUgPSBkdXAoU1RET1VUX0ZJTEVOTyk7CisJZXJyX3NhdmUgPSBkdXAoU1RERVJSX0ZJTEVOTyk7CisjZW5kaWYKKwlpZiAoZHVwMih0b19jc1swXSwgU1RESU5fRklMRU5PKSA9PSAtMSkKKwkgICAgUEVSUk9SKCJjc19jcmVhdGVfY29ubmVjdGlvbiAxIik7CisJaWYgKGR1cDIoZnJvbV9jc1sxXSwgU1RET1VUX0ZJTEVOTykgPT0gLTEpCisJICAgIFBFUlJPUigiY3NfY3JlYXRlX2Nvbm5lY3Rpb24gMiIpOworCWlmIChkdXAyKGZyb21fY3NbMV0sIFNUREVSUl9GSUxFTk8pID09IC0xKQorCSAgICBQRVJST1IoImNzX2NyZWF0ZV9jb25uZWN0aW9uIDMiKTsKKworCS8qIGNsb3NlIHVudXNlZCAqLworI2lmIGRlZmluZWQoVU5JWCkKKwkodm9pZCljbG9zZSh0b19jc1sxXSk7CisJKHZvaWQpY2xvc2UoZnJvbV9jc1swXSk7CisjZWxzZQorCS8qIE9uIHdpbjMyIHdlIG11c3QgY2xvc2Ugb3Bwb3NpdGUgZW5kcyBiZWNhdXNlIHdlIGFyZSB0aGUgcGFyZW50ICovCisJKHZvaWQpY2xvc2UodG9fY3NbMF0pOworCXRvX2NzWzBdID0gLTE7CisJKHZvaWQpY2xvc2UoZnJvbV9jc1sxXSk7CisJZnJvbV9jc1sxXSA9IC0xOworI2VuZGlmCisJLyogZXhwYW5kIHRoZSBjc2NvcGUgZXhlYyBmb3IgZW52IHZhcidzICovCisJaWYgKChwcm9nID0gKGNoYXIgKilhbGxvYyhNQVhQQVRITCArIDEpKSA9PSBOVUxMKQorCXsKKyNpZmRlZiBVTklYCisJICAgIHJldHVybiBDU0NPUEVfRkFJTFVSRTsKKyNlbHNlCisJICAgIGdvdG8gZXJyX2Nsb3Npbmc7CisjZW5kaWYKKwl9CisJZXhwYW5kX2VudigoY2hhcl91ICopcF9jc3ByZywgKGNoYXJfdSAqKXByb2csIE1BWFBBVEhMKTsKKworCS8qIGFsbG9jIHNwYWNlIHRvIGhvbGQgdGhlIGNzY29wZSBjb21tYW5kICovCisJbGVuID0gc3RybGVuKHByb2cpICsgc3RybGVuKGNzaW5mb1tpXS5mbmFtZSkgKyAzMjsKKwlpZiAoY3NpbmZvW2ldLnBwYXRoKQorCXsKKwkgICAgLyogZXhwYW5kIHRoZSBwcmVwZW5kIHBhdGggZm9yIGVudiB2YXIncyAqLworCSAgICBpZiAoKHBwYXRoID0gKGNoYXIgKilhbGxvYyhNQVhQQVRITCArIDEpKSA9PSBOVUxMKQorCSAgICB7CisJCXZpbV9mcmVlKHByb2cpOworI2lmZGVmIFVOSVgKKwkJcmV0dXJuIENTQ09QRV9GQUlMVVJFOworI2Vsc2UKKwkJZ290byBlcnJfY2xvc2luZzsKKyNlbmRpZgorCSAgICB9CisJICAgIGV4cGFuZF9lbnYoKGNoYXJfdSAqKWNzaW5mb1tpXS5wcGF0aCwgKGNoYXJfdSAqKXBwYXRoLCBNQVhQQVRITCk7CisKKwkgICAgbGVuICs9IHN0cmxlbihwcGF0aCk7CisJfQorCisJaWYgKGNzaW5mb1tpXS5mbGFncykKKwkgICAgbGVuICs9IHN0cmxlbihjc2luZm9baV0uZmxhZ3MpOworCisJaWYgKChjbWQgPSAoY2hhciAqKWFsbG9jKGxlbikpID09IE5VTEwpCisJeworCSAgICB2aW1fZnJlZShwcm9nKTsKKwkgICAgdmltX2ZyZWUocHBhdGgpOworI2lmZGVmIFVOSVgKKwkgICAgcmV0dXJuIENTQ09QRV9GQUlMVVJFOworI2Vsc2UKKwkgICAgZ290byBlcnJfY2xvc2luZzsKKyNlbmRpZgorCX0KKworCS8qIHJ1biB0aGUgY3Njb3BlIGNvbW1hbmQ7IGlzIHRoZXJlIGV4ZWNsIGZvciBub24tdW5peCBzeXN0ZW1zPyAqLworI2lmIGRlZmluZWQoVU5JWCkKKwkodm9pZClzcHJpbnRmKGNtZCwgImV4ZWMgJXMgLWRsIC1mICVzIiwgcHJvZywgY3NpbmZvW2ldLmZuYW1lKTsKKyNlbHNlCisJKHZvaWQpc3ByaW50ZihjbWQsICIlcyAtZGwgLWYgJXMiLCBwcm9nLCBjc2luZm9baV0uZm5hbWUpOworI2VuZGlmCisJaWYgKGNzaW5mb1tpXS5wcGF0aCAhPSBOVUxMKQorCXsKKwkgICAgKHZvaWQpc3RyY2F0KGNtZCwgIiAtUCIpOworCSAgICAodm9pZClzdHJjYXQoY21kLCBjc2luZm9baV0ucHBhdGgpOworCX0KKwlpZiAoY3NpbmZvW2ldLmZsYWdzICE9IE5VTEwpCisJeworCSAgICAodm9pZClzdHJjYXQoY21kLCAiICIpOworCSAgICAodm9pZClzdHJjYXQoY21kLCBjc2luZm9baV0uZmxhZ3MpOworCX0KKyMgaWZkZWYgVU5JWAorICAgICAgLyogb24gV2luMzIgd2Ugc3RpbGwgbmVlZCBwcm9nICovCisJdmltX2ZyZWUocHJvZyk7CisjIGVuZGlmCisJdmltX2ZyZWUocHBhdGgpOworCisjaWYgZGVmaW5lZChVTklYKQorCWlmIChleGVjbCgiL2Jpbi9zaCIsICJzaCIsICItYyIsIGNtZCwgTlVMTCkgPT0gLTEpCisJICAgIFBFUlJPUihfKCJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIpKTsKKworCWV4aXQoMTI3KTsKKwkvKiBOT1RSRUFDSEVEICovCisgICAgZGVmYXVsdDoJLyogcGFyZW50LiAqLworI2Vsc2UKKyMgaWZkZWYgRkVBVF9HVUkKKwlhY3RpdmV3bmQgPSBHZXRGb3JlZ3JvdW5kV2luZG93KCk7IC8qIG9uIHdpbjl4IGNzY29wZSBzdGVhbHMgZm9jdXMgKi8KKwkvKiBEaXJ0eSBoYWNrIHRvIGhpZGUgYW5ub3lpbmcgY29uc29sZSB3aW5kb3cgKi8KKwlpZiAoQWxsb2NDb25zb2xlKCkpCisJeworCSAgICBjaGFyICp0aXRsZTsKKwkgICAgdGl0bGUgPSAoY2hhciAqKWFsbG9jKDEwMjQpOworCSAgICBpZiAodGl0bGUgPT0gTlVMTCkKKwkJRnJlZUNvbnNvbGUoKTsKKwkgICAgZWxzZQorCSAgICB7CisJCUdldENvbnNvbGVUaXRsZSh0aXRsZSwgMTAyNCk7IC8qIHNhdmUgZm9yIGZ1dHVyZSByZXN0b3JlICovCisJCVNldENvbnNvbGVUaXRsZSgKKwkJICAgICJHVklNQ1N7NTQ5OTQyMUItQ0JFRi00NWIwLTg1RUYtMzgxNjdGREVBNUM1fUdWSU1DUyIpOworCQlTbGVlcCg0MCk7IC8qIGFzIHN0YXRlZCBpbiBNUyBLQiB3ZSBtdXN0IHdhaXQgNDAgbXMgKi8KKwkJY29uc29sZXduZCA9IEZpbmRXaW5kb3coTlVMTCwKKwkJCSJHVklNQ1N7NTQ5OTQyMUItQ0JFRi00NWIwLTg1RUYtMzgxNjdGREVBNUM1fUdWSU1DUyIpOworCQlpZiAoY29uc29sZXduZCAhPSBOVUxMKQorCQkgICAgU2hvd1dpbmRvdyhjb25zb2xld25kLCBTV19ISURFKTsKKwkJU2V0Q29uc29sZVRpdGxlKHRpdGxlKTsKKwkJdmltX2ZyZWUodGl0bGUpOworCSAgICB9CisJfQorIyBlbmRpZgorCS8qIE1heSBiZSB1c2UgJnNoZWxsLCAmc2hlbGxxdW90ZSBldGMgKi8KKyMgaWZkZWYgX19CT1JMQU5EQ19fCisJLyogQkNDIDUuNSB1c2VzIGEgZGlmZmVyZW50IGZ1bmN0aW9uIG5hbWUgZm9yIHNwYXdubHAgKi8KKwlwaCA9IHNwYXdubHAoUF9OT1dBSVQsIHByb2csIGNtZCwgTlVMTCk7CisjIGVsc2UKKwlwaCA9IF9zcGF3bmxwKF9QX05PV0FJVCwgcHJvZywgY21kLCBOVUxMKTsKKyMgZW5kaWYKKwl2aW1fZnJlZShwcm9nKTsKKwl2aW1fZnJlZShjbWQpOworIyBpZmRlZiBGRUFUX0dVSQorCS8qIERpcnR5IGhhY2sgcGFydCB0d28gKi8KKwlpZiAoYWN0aXZld25kICE9IE5VTEwpCisJICAgIC8qIHJlc3RvcmluZyBmb2N1cyAqLworCSAgICBTZXRGb3JlZ3JvdW5kV2luZG93KGFjdGl2ZXduZCk7CisJaWYgKGNvbnNvbGV3bmQgIT0gTlVMTCkKKwkgICAgRnJlZUNvbnNvbGUoKTsKKworIyBlbmRpZgorCWlmIChwaCA9PSAtMSkKKwl7CisJICAgIFBFUlJPUihfKCJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIpKTsKKwkgICAgKHZvaWQpRU1TRyhfKCJFNjIzOiBDb3VsZCBub3Qgc3Bhd24gY3Njb3BlIHByb2Nlc3MiKSk7CisJICAgIGdvdG8gZXJyX2Nsb3Npbmc7CisJfQorCS8qIGVsc2UgKi8KKwljc2luZm9baV0ucGlkID0gMDsKKwljc2luZm9baV0uaFByb2MgPSAoSEFORExFKXBoOworCisjZW5kaWYgLyogIVVOSVggKi8KKwkvKgorCSAqIFNhdmUgdGhlIGZpbGUgZGVzY3JpcHRvcnMgZm9yIGxhdGVyIGR1cGxpY2F0aW9uLCBhbmQKKwkgKiByZW9wZW4gYXMgc3RyZWFtcy4KKwkgKi8KKwlpZiAoKGNzaW5mb1tpXS50b19mcCA9IGZkb3Blbih0b19jc1sxXSwgInciKSkgPT0gTlVMTCkKKwkgICAgUEVSUk9SKF8oImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIHRvX2ZwIGZhaWxlZCIpKTsKKwlpZiAoKGNzaW5mb1tpXS5mcl9mcCA9IGZkb3Blbihmcm9tX2NzWzBdLCAiciIpKSA9PSBOVUxMKQorCSAgICBQRVJST1IoXygiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgZnJfZnAgZmFpbGVkIikpOworCisjaWYgZGVmaW5lZChVTklYKQorCS8qIGNsb3NlIHVudXNlZCAqLworCSh2b2lkKWNsb3NlKHRvX2NzWzBdKTsKKwkodm9pZCljbG9zZShmcm9tX2NzWzFdKTsKKworCWJyZWFrOworICAgIH0KKyNlbHNlCisJLyogcmVzdG9yZSBzdGRoYW5kbGVzICovCisgICAgZHVwMihpbl9zYXZlLCBTVERJTl9GSUxFTk8pOworICAgIGR1cDIob3V0X3NhdmUsIFNURE9VVF9GSUxFTk8pOworICAgIGR1cDIoZXJyX3NhdmUsIFNUREVSUl9GSUxFTk8pOworICAgIGNsb3NlKGluX3NhdmUpOworICAgIGNsb3NlKG91dF9zYXZlKTsKKyAgICBjbG9zZShlcnJfc2F2ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gQ1NDT1BFX1NVQ0NFU1M7Cit9IC8qIGNzX2NyZWF0ZV9jb25uZWN0aW9uICovCisKKworLyoKKyAqIFBSSVZBVEU6IGNzX2ZpbmQKKyAqCisgKiBxdWVyeSBjc2NvcGUgdXNpbmcgY29tbWFuZCBsaW5lIGludGVyZmFjZS4gIHBhcnNlIHRoZSBvdXRwdXQgYW5kIHVzZSB0c2VsZWN0CisgKiB0byBhbGxvdyBjaG9pY2VzLiAgbGlrZSBOdmksIGNyZWF0ZXMgYSBwaXBlIHRvIHNlbmQgdG8vZnJvbSBxdWVyeS9jc2NvcGUuCisgKgorICogcmV0dXJucyBUUlVFIGlmIHdlIGp1bXAgdG8gYSB0YWcgb3IgYWJvcnQsIEZBTFNFIGlmIG5vdC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NzX2ZpbmQoZWFwKQorICAgIGV4YXJnX1QgKmVhcDsKK3sKKyAgICBjaGFyICpvcHQsICpwYXQ7CisKKyAgICBpZiAoY3NfY2hlY2tfZm9yX2Nvbm5lY3Rpb25zKCkgPT0gRkFMU0UpCisgICAgeworCSh2b2lkKUVNU0coXygiRTU2Nzogbm8gY3Njb3BlIGNvbm5lY3Rpb25zIikpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoKG9wdCA9IHN0cnRvaygoY2hhciAqKU5VTEwsIChjb25zdCBjaGFyICopIiAiKSkgPT0gTlVMTCkKKyAgICB7CisJY3NfdXNhZ2VfbXNnKEZpbmQpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBwYXQgPSBvcHQgKyBzdHJsZW4ob3B0KSArIDE7CisgICAgaWYgKHBhdCA9PSBOVUxMIHx8IChwYXQgIT0gTlVMTCAmJiBwYXRbMF0gPT0gJ1wwJykpCisgICAgeworCWNzX3VzYWdlX21zZyhGaW5kKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIGNzX2ZpbmRfY29tbW9uKG9wdCwgcGF0LCBlYXAtPmZvcmNlaXQsIFRSVUUpOworfSAvKiBjc19maW5kICovCisKKworLyoKKyAqIFBSSVZBVEU6IGNzX2ZpbmRfY29tbW9uCisgKgorICogY29tbW9uIGNvZGUgZm9yIGNzY29wZSBmaW5kLCBzaGFyZWQgYnkgY3NfZmluZCgpIGFuZCBkb19jc3RhZygpCisgKi8KKyAgICBzdGF0aWMgaW50Citjc19maW5kX2NvbW1vbihvcHQsIHBhdCwgZm9yY2VpdCwgdmVyYm9zZSkKKyAgICBjaGFyICpvcHQ7CisgICAgY2hhciAqcGF0OworICAgIGludCBmb3JjZWl0OworICAgIGludCB2ZXJib3NlOworeworICAgIGludCBpOworICAgIGNoYXIgKmNtZDsKKyAgICBjaGFyICoqbWF0Y2hlcywgKipjb250ZXh0czsKKyAgICBpbnQgbnVtbWF0Y2hlc1tDU0NPUEVfTUFYX0NPTk5FQ1RJT05TXSwgdG90bWF0Y2hlcywgbWF0Y2hlZDsKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisgICAgY2hhciBjbWRsZXR0ZXI7CisgICAgY2hhciAqcWZwb3M7CisjZW5kaWYKKworICAgIC8qIGNyZWF0ZSB0aGUgYWN0dWFsIGNvbW1hbmQgdG8gc2VuZCB0byBjc2NvcGUgKi8KKyAgICBjbWQgPSBjc19jcmVhdGVfY21kKG9wdCwgcGF0KTsKKyAgICBpZiAoY21kID09IE5VTEwpCisJcmV0dXJuIEZBTFNFOworCisgICAgLyogc2VuZCBxdWVyeSB0byBhbGwgb3BlbiBjb25uZWN0aW9ucywgdGhlbiBjb3VudCB0aGUgdG90YWwgbnVtYmVyCisgICAgICogb2YgbWF0Y2hlcyBzbyB3ZSBjYW4gYWxsb2MgbWF0Y2hlc3AgYWxsIGluIG9uZSBzd2VsbCBmb29wCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IENTQ09QRV9NQVhfQ09OTkVDVElPTlM7IGkrKykKKwludW1tYXRjaGVzW2ldID0gMDsKKyAgICB0b3RtYXRjaGVzID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgQ1NDT1BFX01BWF9DT05ORUNUSU9OUzsgaSsrKQorICAgIHsKKwlpZiAoY3NpbmZvW2ldLmZuYW1lID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworCisJLyogc2VuZCBjbWQgdG8gY3Njb3BlICovCisJKHZvaWQpZnByaW50Zihjc2luZm9baV0udG9fZnAsICIlc1xuIiwgY21kKTsKKwkodm9pZClmZmx1c2goY3NpbmZvW2ldLnRvX2ZwKTsKKworCW51bW1hdGNoZXNbaV0gPSBjc19jbnRfbWF0Y2hlcyhpKTsKKworCWlmIChudW1tYXRjaGVzW2ldID4gLTEpCisJICAgIHRvdG1hdGNoZXMgKz0gbnVtbWF0Y2hlc1tpXTsKKworCWlmIChudW1tYXRjaGVzW2ldID09IDApCisJICAgICh2b2lkKWNzX3JlYWRfcHJvbXB0KGkpOworICAgIH0KKyAgICB2aW1fZnJlZShjbWQpOworCisgICAgaWYgKHRvdG1hdGNoZXMgPT0gMCkKKyAgICB7CisJY2hhciAqbmYgPSBfKCJFMjU5OiBubyBtYXRjaGVzIGZvdW5kIGZvciBjc2NvcGUgcXVlcnkgJXMgb2YgJXMiKTsKKwljaGFyICpidWY7CisKKwlpZiAoIXZlcmJvc2UpCisJICAgIHJldHVybiBGQUxTRTsKKworCWJ1ZiA9IChjaGFyICopYWxsb2Moc3RybGVuKG9wdCkgKyBzdHJsZW4ocGF0KSArIHN0cmxlbihuZikpOworCWlmIChidWYgPT0gTlVMTCkKKwkgICAgKHZvaWQpRU1TRyhuZik7CisJZWxzZQorCXsKKwkgICAgc3ByaW50ZihidWYsIG5mLCBvcHQsIHBhdCk7CisJICAgICh2b2lkKUVNU0coYnVmKTsKKwkgICAgdmltX2ZyZWUoYnVmKTsKKwl9CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKyAgICAvKiBnZXQgY21kIGxldHRlciAqLworICAgIHN3aXRjaCAob3B0WzBdKQorICAgIHsKKyAgICBjYXNlICcwJyA6CisJY21kbGV0dGVyID0gJ3MnOworCWJyZWFrOworICAgIGNhc2UgJzEnIDoKKwljbWRsZXR0ZXIgPSAnZyc7CisJYnJlYWs7CisgICAgY2FzZSAnMicgOgorCWNtZGxldHRlciA9ICdkJzsKKwlicmVhazsKKyAgICBjYXNlICczJyA6CisJY21kbGV0dGVyID0gJ2MnOworCWJyZWFrOworICAgIGNhc2UgJzQnIDoKKwljbWRsZXR0ZXIgPSAndCc7CisJYnJlYWs7CisgICAgY2FzZSAnNicgOgorCWNtZGxldHRlciA9ICdlJzsKKwlicmVhazsKKyAgICBjYXNlICc3JyA6CisJY21kbGV0dGVyID0gJ2YnOworCWJyZWFrOworICAgIGNhc2UgJzgnIDoKKwljbWRsZXR0ZXIgPSAnaSc7CisJYnJlYWs7CisgICAgZGVmYXVsdCA6CisJY21kbGV0dGVyID0gb3B0WzBdOworICAgIH0KKworICAgIHFmcG9zID0gKGNoYXIgKil2aW1fc3RyY2hyKHBfY3NxZiwgY21kbGV0dGVyKTsKKyAgICBpZiAocWZwb3MgIT0gTlVMTCkKKyAgICB7CisJcWZwb3MrKzsKKwkvKiBuZXh0IHN5bWJvbCBtdXN0IGJlICsgb3IgLSAqLworCWlmIChzdHJjaHIoQ1NRRl9GTEFHUywgKnFmcG9zKSA9PSBOVUxMKQorCXsKKwkgICAgY2hhciAqbmYgPSBfKCJFNDY5OiBpbnZhbGlkIGNzY29wZXF1aWNrZml4IGZsYWcgJWMgZm9yICVjIik7CisJICAgIGNoYXIgKmJ1ZiA9IChjaGFyICopYWxsb2Moc3RybGVuKG5mKSk7CisKKwkgICAgLyogc3RybGVuIHdpbGwgYmUgZW5vdWdoIGJlY2F1c2Ugd2UgdXNlIGNoYXJzICovCisJICAgIGlmIChidWYgIT0gTlVMTCkKKwkgICAgeworCQlzcHJpbnRmKGJ1ZiwgbmYsICpxZnBvcywgKihxZnBvcy0xKSk7CisJCSh2b2lkKUVNU0coYnVmKTsKKwkJdmltX2ZyZWUoYnVmKTsKKwkgICAgfQorCSAgICByZXR1cm4gRkFMU0U7CisJfQorICAgIH0KKyAgICBpZiAocWZwb3MgIT0gTlVMTCAmJiAqcWZwb3MgIT0gJzAnICYmIHRvdG1hdGNoZXMgPiAxKQorICAgIHsKKwkvKiBmaWxsIGVycm9yIGxpc3QgKi8KKwlGSUxFICpmOworCWNoYXJfdSAqdG1wID0gdmltX3RlbXBuYW1lKCdjJyk7CisKKwlmID0gZm9wZW4oKGNoYXIgKil0bXAsICJ3Iik7CisJY3NfZmlsZV9yZXN1bHRzKGYsIG51bW1hdGNoZXMpOworCWZjbG9zZShmKTsKKwkvKiAnLScgc3RhcnRzIGEgbmV3IGVycm9yIGxpc3QgKi8KKwlpZiAocWZfaW5pdCh0bXAsIChjaGFyX3UgKikiJWYlKlxcdCVsJSpcXHQlbSIsICpxZnBvcyA9PSAnLScpID4gMCkKKwl7CisjIGlmZGVmIEZFQVRfV0lORE9XUworCSAgICBpZiAocG9zdHBvbmVkX3NwbGl0ICE9IDApCisJICAgIHsKKwkJd2luX3NwbGl0KHBvc3Rwb25lZF9zcGxpdCA+IDAgPyBwb3N0cG9uZWRfc3BsaXQgOiAwLAorCQkJCQkJICAgICAgIHBvc3Rwb25lZF9zcGxpdF9mbGFncyk7CisjICBpZmRlZiBGRUFUX1NDUk9MTEJJTkQKKwkJY3Vyd2luLT53X3Bfc2NiID0gRkFMU0U7CisjICBlbmRpZgorCQlwb3N0cG9uZWRfc3BsaXQgPSAwOworCSAgICB9CisjIGVuZGlmCisJICAgIHFmX2p1bXAoMCwgMCwgZm9yY2VpdCk7CisJfQorCW1jaF9yZW1vdmUodG1wKTsKKwl2aW1fZnJlZSh0bXApOworCXJldHVybiBUUlVFOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogRkVBVF9RVUlDS0ZJWCAqLworICAgIHsKKwkvKiByZWFkIG91dHB1dCAqLworCWNzX2ZpbGxfcmVzdWx0cygoY2hhciAqKXBhdCwgdG90bWF0Y2hlcywgbnVtbWF0Y2hlcywgJm1hdGNoZXMsCisJCQkJCQkJICZjb250ZXh0cywgJm1hdGNoZWQpOworCWlmIChtYXRjaGVzID09IE5VTEwpCisJICAgIHJldHVybiBGQUxTRTsKKworCSh2b2lkKWNzX21hbmFnZV9tYXRjaGVzKG1hdGNoZXMsIGNvbnRleHRzLCB0b3RtYXRjaGVzLCBTdG9yZSk7CisKKwlyZXR1cm4gZG9fdGFnKChjaGFyX3UgKilwYXQsIERUX0NTQ09QRSwgMCwgZm9yY2VpdCwgdmVyYm9zZSk7CisgICAgfQorCit9IC8qIGNzX2ZpbmRfY29tbW9uICovCisKKy8qCisgKiBQUklWQVRFOiBjc19oZWxwCisgKgorICogcHJpbnQgaGVscAorICovCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyBpbnQKK2NzX2hlbHAoZWFwKQorICAgIGV4YXJnX1QgKmVhcDsKK3sKKyAgICBjc2NtZF9UICpjbWRwID0gY3NfY21kczsKKworICAgICh2b2lkKU1TR19QVVRTKF8oImNzY29wZSBjb21tYW5kczpcbiIpKTsKKyAgICB3aGlsZSAoY21kcC0+bmFtZSAhPSBOVUxMKQorICAgIHsKKwkodm9pZClzbXNnKChjaGFyX3UgKilfKCIlLTVzOiAlLTMwcyAoVXNhZ2U6ICVzKSIpLAorCQkJCSAgICAgIGNtZHAtPm5hbWUsIF8oY21kcC0+aGVscCksIGNtZHAtPnVzYWdlKTsKKwlpZiAoc3RyY21wKGNtZHAtPm5hbWUsICJmaW5kIikgPT0gMCkKKwkgICAgTVNHX1BVVFMoRklORF9IRUxQKTsKKwljbWRwKys7CisgICAgfQorCisgICAgd2FpdF9yZXR1cm4oVFJVRSk7CisgICAgcmV0dXJuIDA7Cit9IC8qIGNzX2hlbHAgKi8KKworCisvKgorICogUFJJVkFURTogY3NfaW5pdAorICoKKyAqIGluaXRpYWxpemUgY3Njb3BlIHN0cnVjdHVyZSBpZiBub3QgYWxyZWFkeQorICovCisgICAgc3RhdGljIHZvaWQKK2NzX2luaXQoKQoreworICAgIHNob3J0IGk7CisgICAgc3RhdGljIGludCBpbml0X2FscmVhZHkgPSBGQUxTRTsKKworICAgIGlmIChpbml0X2FscmVhZHkpCisJcmV0dXJuOworCisgICAgZm9yIChpID0gMDsgaSA8IENTQ09QRV9NQVhfQ09OTkVDVElPTlM7IGkrKykKKwljbGVhcl9jc2luZm8oaSk7CisKKyAgICBpbml0X2FscmVhZHkgPSBUUlVFOworfSAvKiBjc19pbml0ICovCisKKyAgICBzdGF0aWMgdm9pZAorY2xlYXJfY3NpbmZvKGkpCisgICAgaW50CSAgICBpOworeworICAgIGNzaW5mb1tpXS5mbmFtZSAgPSBOVUxMOworICAgIGNzaW5mb1tpXS5wcGF0aCAgPSBOVUxMOworICAgIGNzaW5mb1tpXS5mbGFncyAgPSBOVUxMOworI2lmIGRlZmluZWQoVU5JWCkKKyAgICBjc2luZm9baV0uc3RfZGV2ID0gKGRldl90KTA7CisgICAgY3NpbmZvW2ldLnN0X2lubyA9IChpbm9fdCkwOworI2Vsc2UKKyAgICBjc2luZm9baV0ublZvbHVtZSA9IDA7CisgICAgY3NpbmZvW2ldLm5JbmRleEhpZ2ggPSAwOworICAgIGNzaW5mb1tpXS5uSW5kZXhMb3cgPSAwOworI2VuZGlmCisgICAgY3NpbmZvW2ldLnBpZCAgICA9IC0xOworICAgIGNzaW5mb1tpXS5mcl9mcCAgPSBOVUxMOworICAgIGNzaW5mb1tpXS50b19mcCAgPSBOVUxMOworfQorCisjaWZuZGVmIFVOSVgKK3N0YXRpYyBjaGFyICpHZXRXaW4zMkVycm9yIF9fQVJHUygodm9pZCkpOworCisgICAgc3RhdGljIGNoYXIgKgorR2V0V2luMzJFcnJvcigpCit7CisgICAgY2hhciAqbXNnID0gTlVMTDsKKyAgICBGb3JtYXRNZXNzYWdlKEZPUk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUnxGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSwKKwkgICAgTlVMTCwgR2V0TGFzdEVycm9yKCksIDAsIChMUFNUUikmbXNnLCAwLCBOVUxMKTsKKyAgICBpZiAobXNnICE9IE5VTEwpCisgICAgeworCS8qIHJlbW92ZSB0cmFpbGluZyBcclxuICovCisJY2hhciAqcGNybGYgPSBzdHJzdHIobXNnLCAiXHJcbiIpOworCWlmIChwY3JsZiAhPSBOVUxMKQorCSAgICAqcGNybGYgPSAnXDAnOworICAgIH0KKyAgICByZXR1cm4gbXNnOworfQorI2VuZGlmCisvKgorICogUFJJVkFURTogY3NfaW5zZXJ0X2ZpbGVsaXN0CisgKgorICogaW5zZXJ0IGEgbmV3IGNzY29wZSBkYXRhYmFzZSBmaWxlbmFtZSBpbnRvIHRoZSBmaWxlbGlzdAorICovCisgICAgc3RhdGljIGludAorY3NfaW5zZXJ0X2ZpbGVsaXN0KGZuYW1lLCBwcGF0aCwgZmxhZ3MsIHNiKQorICAgIGNoYXIgKmZuYW1lOworICAgIGNoYXIgKnBwYXRoOworICAgIGNoYXIgKmZsYWdzOworICAgIHN0cnVjdCBzdGF0ICpzYjsKK3sKKyAgICBzaG9ydAlpLCBqOworI2lmbmRlZiBVTklYCisgICAgSEFORExFCWhGaWxlOworICAgIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OIGJoZmk7CisKKyAgICB2aW1fbWVtc2V0KCZiaGZpLCAwLCBzaXplb2YoYmhmaSkpOworICAgIC8qIE9uIHdpbmRvd3MgOXggR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUgZG9lc24ndCB3b3JrLCBzbyBza2lwIGl0ICovCisgICAgaWYgKCFtY2hfd2luZG93czk1KCkpCisgICAgeworCWhGaWxlID0gQ3JlYXRlRmlsZShmbmFtZSwgRklMRV9SRUFEX0FUVFJJQlVURVMsIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsCisJCQkJCQkgRklMRV9BVFRSSUJVVEVfTk9STUFMLCBOVUxMKTsKKwlpZiAoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJeworCSAgICBpZiAocF9jc3ZlcmJvc2UpCisJICAgIHsKKwkJY2hhciAqY2FudF9tc2cgPSBfKCJFNjI1OiBjYW5ub3Qgb3BlbiBjc2NvcGUgZGF0YWJhc2U6ICVzIik7CisJCWNoYXIgKndpbm1zZyA9IEdldFdpbjMyRXJyb3IoKTsKKworCQlpZiAod2lubXNnICE9IE5VTEwpCisJCXsKKwkJICAgICh2b2lkKUVNU0cyKGNhbnRfbXNnLCB3aW5tc2cpOworCQkgICAgTG9jYWxGcmVlKHdpbm1zZyk7CisJCX0KKwkJZWxzZQorCQkgICAgLyogc3Vic3QgZmlsZW5hbWUgaWYgY2FuJ3QgZ2V0IGVycm9yIHRleHQgKi8KKwkJICAgICh2b2lkKUVNU0cyKGNhbnRfbXNnLCBmbmFtZSk7CisJICAgIH0KKwkgICAgcmV0dXJuIC0xOworCX0KKwlpZiAoIUdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKGhGaWxlLCAmYmhmaSkpCisJeworCSAgICBDbG9zZUhhbmRsZShoRmlsZSk7CisJICAgIGlmIChwX2NzdmVyYm9zZSkKKwkJKHZvaWQpRU1TRyhfKCJFNjI2OiBjYW5ub3QgZ2V0IGNzY29wZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiIpKTsKKwkgICAgcmV0dXJuIC0xOworCX0KKwlDbG9zZUhhbmRsZShoRmlsZSk7CisgICAgfQorI2VuZGlmCisKKyAgICBpID0gLTE7IC8qIGNhbiBiZSBzZXQgdG8gdGhlIGluZGV4IG9mIGFuIGVtcHR5IGl0ZW0gaW4gY3NpbmZvICovCisgICAgZm9yIChqID0gMDsgaiA8IENTQ09QRV9NQVhfQ09OTkVDVElPTlM7IGorKykKKyAgICB7CisJaWYgKGNzaW5mb1tqXS5mbmFtZSAhPSBOVUxMCisjaWYgZGVmaW5lZChVTklYKQorCSAgICAmJiBjc2luZm9bal0uc3RfZGV2ID09IHNiLT5zdF9kZXYgJiYgY3NpbmZvW2pdLnN0X2lubyA9PSBzYi0+c3RfaW5vCisjZWxzZQorCSAgICAvKiBjb21wYXJlIHBhdGhuYW1lcyBmaXJzdCAqLworCSAgICAmJiAoKGZ1bGxwYXRoY21wKGNzaW5mb1tqXS5mbmFtZSwgZm5hbWUsIEZBTFNFKSAmIEZQQ19TQU1FKQorCQkvKiBpZiBub3QgV2luZG93cyA5eCwgdGVzdCBpbmRleCBmaWxlIGF0cmlidXRlcyB0b28gKi8KKwkJfHwgKCFtY2hfd2luZG93czk1KCkKKwkJICAgICYmIGNzaW5mb1tqXS5uVm9sdW1lID09IGJoZmkuZHdWb2x1bWVTZXJpYWxOdW1iZXIKKwkJICAgICYmIGNzaW5mb1tqXS5uSW5kZXhIaWdoID09IGJoZmkubkZpbGVJbmRleEhpZ2gKKwkJICAgICYmIGNzaW5mb1tqXS5uSW5kZXhMb3cgPT0gYmhmaS5uRmlsZUluZGV4TG93KSkKKyNlbmRpZgorCSAgICApCisJeworCSAgICBpZiAocF9jc3ZlcmJvc2UpCisJCSh2b2lkKUVNU0coXygiRTU2ODogZHVwbGljYXRlIGNzY29wZSBkYXRhYmFzZSBub3QgYWRkZWQiKSk7CisJICAgIHJldHVybiAtMTsKKwl9CisKKwlpZiAoY3NpbmZvW2pdLmZuYW1lID09IE5VTEwgJiYgaSA9PSAtMSkKKwkgICAgaSA9IGo7IC8qIHJlbWVtYmVyIGZpcnN0IGVtcHR5IGVudHJ5ICovCisgICAgfQorCisgICAgaWYgKGkgPT0gLTEpCisgICAgeworCWlmIChwX2NzdmVyYm9zZSkKKwkgICAgKHZvaWQpRU1TRyhfKCJFNTY5OiBtYXhpbXVtIG51bWJlciBvZiBjc2NvcGUgY29ubmVjdGlvbnMgcmVhY2hlZCIpKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKChjc2luZm9baV0uZm5hbWUgPSAoY2hhciAqKWFsbG9jKHN0cmxlbihmbmFtZSkrMSkpID09IE5VTEwpCisJcmV0dXJuIC0xOworCisgICAgKHZvaWQpc3RyY3B5KGNzaW5mb1tpXS5mbmFtZSwgKGNvbnN0IGNoYXIgKilmbmFtZSk7CisKKyAgICBpZiAocHBhdGggIT0gTlVMTCkKKyAgICB7CisJaWYgKChjc2luZm9baV0ucHBhdGggPSAoY2hhciAqKWFsbG9jKHN0cmxlbihwcGF0aCkgKyAxKSkgPT0gTlVMTCkKKwl7CisJICAgIHZpbV9mcmVlKGNzaW5mb1tpXS5mbmFtZSk7CisJICAgIGNzaW5mb1tpXS5mbmFtZSA9IE5VTEw7CisJICAgIHJldHVybiAtMTsKKwl9CisJKHZvaWQpc3RyY3B5KGNzaW5mb1tpXS5wcGF0aCwgKGNvbnN0IGNoYXIgKilwcGF0aCk7CisgICAgfSBlbHNlCisJY3NpbmZvW2ldLnBwYXRoID0gTlVMTDsKKworICAgIGlmIChmbGFncyAhPSBOVUxMKQorICAgIHsKKwlpZiAoKGNzaW5mb1tpXS5mbGFncyA9IChjaGFyICopYWxsb2Moc3RybGVuKGZsYWdzKSArIDEpKSA9PSBOVUxMKQorCXsKKwkgICAgdmltX2ZyZWUoY3NpbmZvW2ldLmZuYW1lKTsKKwkgICAgdmltX2ZyZWUoY3NpbmZvW2ldLnBwYXRoKTsKKwkgICAgY3NpbmZvW2ldLmZuYW1lID0gTlVMTDsKKwkgICAgY3NpbmZvW2ldLnBwYXRoID0gTlVMTDsKKwkgICAgcmV0dXJuIC0xOworCX0KKwkodm9pZClzdHJjcHkoY3NpbmZvW2ldLmZsYWdzLCAoY29uc3QgY2hhciAqKWZsYWdzKTsKKyAgICB9IGVsc2UKKwljc2luZm9baV0uZmxhZ3MgPSBOVUxMOworCisjaWYgZGVmaW5lZChVTklYKQorICAgIGNzaW5mb1tpXS5zdF9kZXYgPSBzYi0+c3RfZGV2OworICAgIGNzaW5mb1tpXS5zdF9pbm8gPSBzYi0+c3RfaW5vOworCisjZWxzZQorICAgIGNzaW5mb1tpXS5uVm9sdW1lID0gYmhmaS5kd1ZvbHVtZVNlcmlhbE51bWJlcjsKKyAgICBjc2luZm9baV0ubkluZGV4TG93ID0gYmhmaS5uRmlsZUluZGV4TG93OworICAgIGNzaW5mb1tpXS5uSW5kZXhIaWdoID0gYmhmaS5uRmlsZUluZGV4SGlnaDsKKyNlbmRpZgorICAgIHJldHVybiBpOworfSAvKiBjc19pbnNlcnRfZmlsZWxpc3QgKi8KKworCisvKgorICogUFJJVkFURTogY3NfbG9va3VwX2NtZAorICoKKyAqIGZpbmQgY3Njb3BlIGNvbW1hbmQgaW4gY29tbWFuZCB0YWJsZQorICovCisgICAgc3RhdGljIGNzY21kX1QgKgorY3NfbG9va3VwX2NtZChlYXApCisgICAgZXhhcmdfVCAqZWFwOworeworICAgIGNzY21kX1QgKmNtZHA7CisgICAgY2hhciAqc3RvazsKKyAgICBzaXplX3QgbGVuOworCisgICAgaWYgKGVhcC0+YXJnID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoKHN0b2sgPSBzdHJ0b2soKGNoYXIgKikoZWFwLT5hcmcpLCAoY29uc3QgY2hhciAqKSIgIikpID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICBsZW4gPSBzdHJsZW4oc3Rvayk7CisgICAgZm9yIChjbWRwID0gY3NfY21kczsgY21kcC0+bmFtZSAhPSBOVUxMOyArK2NtZHApCisgICAgeworCWlmIChzdHJuY21wKChjb25zdCBjaGFyICopKHN0b2spLCBjbWRwLT5uYW1lLCBsZW4pID09IDApCisJICAgIHJldHVybiAoY21kcCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfSAvKiBjc19sb29rdXBfY21kICovCisKKworLyoKKyAqIFBSSVZBVEU6IGNzX2tpbGwKKyAqCisgKiBudWtlIGVtCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIGludAorY3Nfa2lsbChlYXApCisgICAgZXhhcmdfVCAqZWFwOworeworICAgIGNoYXIgKnN0b2s7CisgICAgc2hvcnQgaTsKKworICAgIGlmICgoc3RvayA9IHN0cnRvaygoY2hhciAqKU5VTEwsIChjb25zdCBjaGFyICopIiAiKSkgPT0gTlVMTCkKKyAgICB7CisJY3NfdXNhZ2VfbXNnKEtpbGwpOworCXJldHVybiBDU0NPUEVfRkFJTFVSRTsKKyAgICB9CisKKyAgICAvKiBvbmx5IHNpbmdsZSBkaWdpdCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW50ZWdlcnMgYXJlIGFsbG93ZWQgKi8KKyAgICBpZiAoKHN0cmxlbihzdG9rKSA8IDIgJiYgVklNX0lTRElHSVQoKGludCkoc3Rva1swXSkpKQorCSAgICB8fCAoc3RybGVuKHN0b2spIDwgMyAmJiBzdG9rWzBdID09ICctJworCQkJCQkgICAgICAmJiBWSU1fSVNESUdJVCgoaW50KShzdG9rWzFdKSkpKQorCWkgPSBhdG9pKHN0b2spOworICAgIGVsc2UKKyAgICB7CisJLyogSXQgbXVzdCBiZSBwYXJ0IG9mIGEgbmFtZS4gIFdlIHdpbGwgdHJ5IHRvIGZpbmQgYSBtYXRjaAorCSAqIHdpdGhpbiBhbGwgdGhlIG5hbWVzIGluIHRoZSBjc2luZm8gZGF0YSBzdHJ1Y3R1cmUKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ1NDT1BFX01BWF9DT05ORUNUSU9OUzsgaSsrKQorCXsKKwkgICAgaWYgKGNzaW5mb1tpXS5mbmFtZSAhPSBOVUxMICYmIHN0cnN0cihjc2luZm9baV0uZm5hbWUsIHN0b2spKQorCQlicmVhazsKKwl9CisgICAgfQorCisgICAgaWYgKChpID49IENTQ09QRV9NQVhfQ09OTkVDVElPTlMgfHwgaSA8IC0xIHx8IGNzaW5mb1tpXS5mbmFtZSA9PSBOVUxMKQorCSAgICAmJiBpICE9IC0xKQorICAgIHsKKwlpZiAocF9jc3ZlcmJvc2UpCisJICAgICh2b2lkKUVNU0cyKF8oIkUyNjE6IGNzY29wZSBjb25uZWN0aW9uICVzIG5vdCBmb3VuZCIpLCBzdG9rKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoaSA9PSAtMSkKKwl7CisJICAgIGZvciAoaSA9IDA7IGkgPCBDU0NPUEVfTUFYX0NPTk5FQ1RJT05TOyBpKyspCisJICAgIHsKKwkJaWYgKGNzaW5mb1tpXS5mbmFtZSkKKwkJICAgIGNzX2tpbGxfZXhlY3V0ZShpLCBjc2luZm9baV0uZm5hbWUpOworCSAgICB9CisJfQorCWVsc2UKKwkgICAgY3Nfa2lsbF9leGVjdXRlKGksIHN0b2spOworICAgIH0KKworICAgIHJldHVybiAwOworfSAvKiBjc19raWxsICovCisKKworLyoKKyAqIFBSSVZBVEU6IGNzX2tpbGxfZXhlY3V0ZQorICoKKyAqIEFjdHVhbGx5IGtpbGxzIGEgc3BlY2lmaWMgY3Njb3BlIGNvbm5lY3Rpb24uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY3Nfa2lsbF9leGVjdXRlKGksIGNuYW1lKQorICAgIGludCBpOwkgICAgLyogY3Njb3BlIHRhYmxlIGluZGV4ICovCisgICAgY2hhciAqY25hbWU7ICAgIC8qIGNzY29wZSBkYXRhYmFzZSBuYW1lICovCit7CisgICAgaWYgKHBfY3N2ZXJib3NlKQorICAgIHsKKwltc2dfY2xyX2VvcygpOworCSh2b2lkKXNtc2dfYXR0cihobF9hdHRyKEhMRl9SKSB8IE1TR19ISVNULAorCQkoY2hhcl91ICopXygiY3Njb3BlIGNvbm5lY3Rpb24gJXMgY2xvc2VkIiksIGNuYW1lKTsKKyAgICB9CisgICAgY3NfcmVsZWFzZV9jc3AoaSwgVFJVRSk7Cit9CisKKworLyoKKyAqIFBSSVZBVEU6IGNzX21ha2VfdmltX3N0eWxlX21hdGNoZXMKKyAqCisgKiBjb252ZXJ0IHRoZSBjc2NvcGUgb3V0cHV0IGludG8gaW50byBhIGN0YWdzIHN0eWxlIGVudHJ5IChhcyBtaWdodCBiZSBmb3VuZAorICogaW4gYSBjdGFncyB0YWdzIGZpbGUpLiAgdGhlcmUncyBvbmUgY2F0Y2ggdGhvdWdoOiBjc2NvcGUgZG9lc24ndCB0ZWxsIHlvdQorICogdGhlIHR5cGUgb2YgdGhlIHRhZyB5b3UgYXJlIGxvb2tpbmcgZm9yLiAgZm9yIGV4YW1wbGUsIGluIERhcnJlbiBIaWViZXJ0J3MKKyAqIGN0YWdzICh0aGUgb25lIHRoYXQgY29tZXMgd2l0aCB2aW0pLCAjZGVmaW5lJ3MgdXNlIGEgbGluZSBudW1iZXIgdG8gZmluZCB0aGUKKyAqIHRhZyBpbiBhIGZpbGUgd2hpbGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdXNlIGEgcmVnZXhwIHNlYXJjaCBwYXR0ZXJuLgorICoKKyAqIGknbSBnb2luZyB0byBhbHdheXMgdXNlIHRoZSBsaW5lIG51bWJlciBiZWNhdXNlIGNzY29wZSBkb2VzIHNvbWV0aGluZworICogcXVpcmt5IChhbmQgcHJvYmFibHkgb3RoZXIgdGhpbmdzIGkgZG9uJ3Qga25vdyBhYm91dCk6CisgKgorICogICAgIGlmIHlvdSBoYXZlICIjICBkZWZpbmUiIGluIHlvdXIgc291cmNlIGZpbGUsIHdoaWNoIGlzCisgKiAgICAgcGVyZmVjdGx5IGxlZ2FsLCBjc2NvcGUgdGhpbmtzIHlvdSBoYXZlICIjZGVmaW5lIi4gIHRoaXMKKyAqICAgICB3aWxsIHJlc3VsdCBpbiBhIGZhaWxlZCByZWdleHAgc2VhcmNoLiA6KAorICoKKyAqIGJlc2lkZXMsIGV2ZW4gaWYgdGhpcyBwYXJ0aWN1bGFyIGNhc2UgZGlkbid0IGhhcHBlbiwgdGhlIHNlYXJjaCBwYXR0ZXJuCisgKiB3b3VsZCBzdGlsbCBoYXZlIHRvIGJlIG1vZGlmaWVkIHRvIGVzY2FwZSBhbGwgdGhlIHNwZWNpYWwgcmVndWxhciBleHByZXNzaW9uCisgKiBjaGFyYWN0ZXJzIHRvIGNvbXBseSB3aXRoIGN0YWdzIGZvcm1hdHRpbmcuCisgKi8KKyAgICBzdGF0aWMgY2hhciAqCitjc19tYWtlX3ZpbV9zdHlsZV9tYXRjaGVzKGZuYW1lLCBzbG5vLCBzZWFyY2gsIHRhZ3N0cikKKyAgICBjaGFyICpmbmFtZTsKKyAgICBjaGFyICpzbG5vOworICAgIGNoYXIgKnNlYXJjaDsKKyAgICBjaGFyICp0YWdzdHI7Cit7CisgICAgLyogdmltIHN0eWxlIGlzIGN0YWdzOgorICAgICAqCisgICAgICoJICAgIDx0YWdzdHI+XHQ8ZmlsZW5hbWU+XHQ8bGluZW51bV9vcl9zZWFyY2g+Ilx0PGV4dHJhPgorICAgICAqCisgICAgICogYnV0IGFzIG1lbnRpb25lZCBhYm92ZSwgd2UnbGwgYWx3YXlzIHVzZSB0aGUgbGluZSBudW1iZXIgYW5kCisgICAgICogcHV0IHRoZSBzZWFyY2ggcGF0dGVybiAoaWYgb25lIGV4aXN0cykgYXMgImV4dHJhIgorICAgICAqCisgICAgICogYnVmIGlzIHVzZWQgYXMgcGFydCBvZiB2aW0ncyBtZXRob2Qgb2YgaGFuZGxpbmcgdGFncywgYW5kCisgICAgICogKGkgdGhpbmspIHZpbSBmcmVlcyBpdCB3aGVuIHlvdSBwb3AgeW91ciB0YWdzIGFuZCBnZXQgcmVwbGFjZWQKKyAgICAgKiBieSBuZXcgb25lcyBvbiB0aGUgdGFnIHN0YWNrLgorICAgICAqLworICAgIGNoYXIgKmJ1ZjsKKyAgICBpbnQgYW10OworCisgICAgaWYgKHNlYXJjaCAhPSBOVUxMKQorICAgIHsKKwlhbXQgPSBzdHJsZW4oZm5hbWUpICsgc3RybGVuKHNsbm8pICsgc3RybGVuKHRhZ3N0cikgKyBzdHJsZW4oc2VhcmNoKSs2OworCWlmICgoYnVmID0gKGNoYXIgKilhbGxvYyhhbXQpKSA9PSBOVUxMKQorCSAgICByZXR1cm4gTlVMTDsKKworCSh2b2lkKXNwcmludGYoYnVmLCAiJXNcdCVzXHQlcztcIlx0JXMiLCB0YWdzdHIsIGZuYW1lLCBzbG5vLCBzZWFyY2gpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWFtdCA9IHN0cmxlbihmbmFtZSkgKyBzdHJsZW4oc2xubykgKyBzdHJsZW4odGFnc3RyKSArIDU7CisJaWYgKChidWYgPSAoY2hhciAqKWFsbG9jKGFtdCkpID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCisJKHZvaWQpc3ByaW50ZihidWYsICIlc1x0JXNcdCVzO1wiIiwgdGFnc3RyLCBmbmFtZSwgc2xubyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1ZjsKK30gLyogY3NfbWFrZV92aW1fc3R5bGVfbWF0Y2hlcyAqLworCisKKy8qCisgKiBQUklWQVRFOiBjc19tYW5hZ2VfbWF0Y2hlcworICoKKyAqIHRoaXMgaXMga2luZCBvZiBob2tleSwgYnV0IGkgZG9uJ3Qgc2VlIGFuIGVhc3kgd2F5IHJvdW5kIHRoaXMuLgorICoKKyAqIFN0b3JlOiBrZWVwIGEgcHRyIHRvIHRoZSAobWFsbG9jJ2QpIG1lbW9yeSBvZiBtYXRjaGVzIG9yaWdpbmFsbHkKKyAqIGdlbmVyYXRlZCBmcm9tIGNzX2ZpbmQoKS4gIHRoZSBtYXRjaGVzIGFyZSBvcmlnaW5hbGx5IGxpbmVzIGRpcmVjdGx5CisgKiBmcm9tIGNzY29wZSBvdXRwdXQsIGJ1dCB0cmFuc2Zvcm1lZCB0byBsb29rIGxpa2Ugc29tZXRoaW5nIG91dCBvZiBhCisgKiBjdGFncy4gIHNlZSBjc19tYWtlX3ZpbV9zdHlsZV9tYXRjaGVzIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogR2V0OiB1c2VkIG9ubHkgZnJvbSBjc19mZ2V0cygpLCB0aGlzIHNpbXVsYXRlcyBhIHZpbV9mZ2V0cygpIHRvIHJldHVybgorICogdGhlIG5leHQgbGluZSBmcm9tIHRoZSBjc2NvcGUgb3V0cHV0LiAgaXQgYmFzaWNhbGx5IGtlZXBzIHRyYWNrIG9mIHdoaWNoCisgKiBsaW5lcyBoYXZlIGJlZW4gInVzZWQiIGFuZCByZXR1cm5zIHRoZSBuZXh0IG9uZS4KKyAqCisgKiBGcmVlOiBmcmVlcyB1cCBldmVyeXRoaW5nIGFuZCByZXNldHMKKyAqCisgKiBQcmludDogcHJpbnRzIHRoZSB0YWdzCisgKi8KKyAgICBzdGF0aWMgY2hhciAqCitjc19tYW5hZ2VfbWF0Y2hlcyhtYXRjaGVzLCBjb250ZXh0cywgdG90bWF0Y2hlcywgY21kKQorICAgIGNoYXIgKiptYXRjaGVzOworICAgIGNoYXIgKipjb250ZXh0czsKKyAgICBpbnQgdG90bWF0Y2hlczsKKyAgICBtY21kX2UgY21kOworeworICAgIHN0YXRpYyBjaGFyICoqbXAgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICoqY3AgPSBOVUxMOworICAgIHN0YXRpYyBpbnQgY250ID0gLTE7CisgICAgc3RhdGljIGludCBuZXh0ID0gLTE7CisgICAgY2hhciAqcCA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKGNtZCkKKyAgICB7CisgICAgY2FzZSBTdG9yZToKKwlhc3NlcnQobWF0Y2hlcyAhPSBOVUxMKTsKKwlhc3NlcnQodG90bWF0Y2hlcyA+IDApOworCWlmIChtcCAhPSBOVUxMIHx8IGNwICE9IE5VTEwpCisJICAgICh2b2lkKWNzX21hbmFnZV9tYXRjaGVzKE5VTEwsIE5VTEwsIC0xLCBGcmVlKTsKKwltcCA9IG1hdGNoZXM7CisJY3AgPSBjb250ZXh0czsKKwljbnQgPSB0b3RtYXRjaGVzOworCW5leHQgPSAwOworCWJyZWFrOworICAgIGNhc2UgR2V0OgorCWlmIChuZXh0ID49IGNudCkKKwkgICAgcmV0dXJuIE5VTEw7CisKKwlwID0gbXBbbmV4dF07CisJbmV4dCsrOworCWJyZWFrOworICAgIGNhc2UgRnJlZToKKwlpZiAobXAgIT0gTlVMTCkKKwl7CisJICAgIGlmIChjbnQgPiAwKQorCQl3aGlsZSAoY250LS0pCisJCXsKKwkJICAgIHZpbV9mcmVlKG1wW2NudF0pOworCQkgICAgaWYgKGNwICE9IE5VTEwpCisJCQl2aW1fZnJlZShjcFtjbnRdKTsKKwkJfQorCSAgICB2aW1fZnJlZShtcCk7CisJICAgIHZpbV9mcmVlKGNwKTsKKwl9CisJbXAgPSBOVUxMOworCWNwID0gTlVMTDsKKwljbnQgPSAwOworCW5leHQgPSAwOworCWJyZWFrOworICAgIGNhc2UgUHJpbnQ6CisJY3NfcHJpbnRfdGFnc19wcml2KG1wLCBjcCwgY250KTsKKwlicmVhazsKKyAgICBkZWZhdWx0OgkvKiBzaG91bGQgbm90IHJlYWNoIGhlcmUgKi8KKwkodm9pZClFTVNHKF8oIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIikpOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBwOworfSAvKiBjc19tYW5hZ2VfbWF0Y2hlcyAqLworCisKKy8qCisgKiBQUklWQVRFOiBjc19wYXJzZV9yZXN1bHRzCisgKgorICogcGFyc2UgY3Njb3BlIG91dHB1dAorICovCisgICAgc3RhdGljIGNoYXIgKgorY3NfcGFyc2VfcmVzdWx0cyhjbnVtYmVyLCBidWYsIGJ1ZnNpemUsIGNvbnRleHQsIGxpbmVudW1iZXIsIHNlYXJjaCkKKyAgICBpbnQgY251bWJlcjsKKyAgICBjaGFyICpidWY7CisgICAgaW50IGJ1ZnNpemU7CisgICAgY2hhciAqKmNvbnRleHQ7CisgICAgY2hhciAqKmxpbmVudW1iZXI7CisgICAgY2hhciAqKnNlYXJjaDsKK3sKKyAgICBpbnQgY2g7CisgICAgY2hhciAqcDsKKyAgICBjaGFyICpuYW1lOworCisgICAgaWYgKGZnZXRzKGJ1ZiwgYnVmc2l6ZSwgY3NpbmZvW2NudW1iZXJdLmZyX2ZwKSA9PSBOVUxMKQorICAgIHsKKwlpZiAoZmVvZihjc2luZm9bY251bWJlcl0uZnJfZnApKQorCSAgICBlcnJubyA9IEVJTzsKKworCWNzX3JlYWRpbmdfZW1zZyhjbnVtYmVyKTsKKworCXJldHVybiBOVUxMOworICAgIH0KKworCS8qIElmIHRoZSBsaW5lJ3MgdG9vIGxvbmcgZm9yIHRoZSBidWZmZXIsIGRpc2NhcmQgaXQuICovCisgICAgaWYgKChwID0gc3RyY2hyKGJ1ZiwgJ1xuJykpID09IE5VTEwpCisgICAgeworCXdoaWxlICgoY2ggPSBnZXRjKGNzaW5mb1tjbnVtYmVyXS5mcl9mcCkpICE9IEVPRiAmJiBjaCAhPSAnXG4nKQorCSAgICA7CisJcmV0dXJuIE5VTEw7CisgICAgfQorICAgICpwID0gJ1wwJzsKKworICAgIC8qCisgICAgICogY3Njb3BlIG91dHB1dCBpcyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAgICAgKgorICAgICAqCTxmaWxlbmFtZT4gPGNvbnRleHQ+IDxsaW5lIG51bWJlcj4gPHBhdHRlcm4+CisgICAgICovCisgICAgaWYgKChuYW1lID0gc3RydG9rKChjaGFyICopYnVmLCAoY29uc3QgY2hhciAqKSIgIikpID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisgICAgaWYgKCgqY29udGV4dCA9IHN0cnRvayhOVUxMLCAoY29uc3QgY2hhciAqKSIgIikpID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisgICAgaWYgKCgqbGluZW51bWJlciA9IHN0cnRvayhOVUxMLCAoY29uc3QgY2hhciAqKSIgIikpID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisgICAgKnNlYXJjaCA9ICpsaW5lbnVtYmVyICsgc3RybGVuKCpsaW5lbnVtYmVyKSArIDE7CS8qICsxIHRvIHNraXAgXDAgKi8KKworICAgIC8qIC0tLSBudmkgLS0tCisgICAgICogSWYgdGhlIGZpbGUgaXMgb2xkZXIgdGhhbiB0aGUgY3Njb3BlIGRhdGFiYXNlLCB0aGF0IGlzLAorICAgICAqIHRoZSBkYXRhYmFzZSB3YXMgYnVpbHQgc2luY2UgdGhlIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQsCisgICAgICogb3IgdGhlcmUgd2Fzbid0IGEgc2VhcmNoIHN0cmluZywgdXNlIHRoZSBsaW5lIG51bWJlci4KKyAgICAgKi8KKyAgICBpZiAoc3RyY21wKCpzZWFyY2gsICI8dW5rbm93bj4iKSA9PSAwKQorCSpzZWFyY2ggPSBOVUxMOworCisgICAgbmFtZSA9IGNzX3Jlc29sdmVfZmlsZShjbnVtYmVyLCBuYW1lKTsKKyAgICByZXR1cm4gbmFtZTsKK30KKworLyoKKyAqIFBSSVZBVEU6IGNzX2ZpbGVfcmVzdWx0cworICoKKyAqIHdyaXRlIGNzY29wZSBmaW5kIHJlc3VsdHMgdG8gZmlsZQorICovCisgICAgc3RhdGljIHZvaWQKK2NzX2ZpbGVfcmVzdWx0cyhmLCBudW1tYXRjaGVzX2EpCisgICAgRklMRSAqZjsKKyAgICBpbnQgKm51bW1hdGNoZXNfYTsKK3sKKyAgICBpbnQgaSwgajsKKyAgICBjaGFyICpidWY7CisgICAgY2hhciAqc2VhcmNoLCAqc2xubzsKKyAgICBjaGFyICpmdWxsbmFtZTsKKyAgICBjaGFyICpjbnR4OworICAgIGNoYXIgKmNvbnRleHQ7CisKKyAgICBidWYgPSAoY2hhciAqKWFsbG9jKENTUkVBRF9CVUZTSVpFKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisJcmV0dXJuOworCisgICAgZm9yIChpID0gMDsgaSA8IENTQ09QRV9NQVhfQ09OTkVDVElPTlM7IGkrKykKKyAgICB7CisJaWYgKG51bW1hdGNoZXNfYVtpXSA8IDEpCisJICAgIGNvbnRpbnVlOworCisJZm9yIChqID0gMDsgaiA8IG51bW1hdGNoZXNfYVtpXTsgaisrKQorCXsKKwkgICBpZiAoKGZ1bGxuYW1lPWNzX3BhcnNlX3Jlc3VsdHMoaSwgYnVmLCBDU1JFQURfQlVGU0laRSwgJmNudHgsCisJCQkgICAmc2xubywgJnNlYXJjaCkpPT1OVUxMKQorCSAgICAgICBjb250aW51ZTsKKworCSAgIGNvbnRleHQgPSAoY2hhciAqKWFsbG9jKHN0cmxlbihjbnR4KSs1KTsKKwkgICBpZiAoY29udGV4dD09TlVMTCkKKwkgICAgICAgY29udGludWU7CisKKwkgICBpZiAoc3RyY21wKGNudHgsICI8Z2xvYmFsPiIpPT0wKQorCSAgICAgICBzdHJjcHkoY29udGV4dCwgIjw8Z2xvYmFsPj4iKTsKKwkgICBlbHNlCisJICAgICAgIHNwcmludGYoY29udGV4dCwgIjw8JXM+PiIsIGNudHgpOworCisJICAgaWYgKHNlYXJjaD09TlVMTCkKKwkgICAgICAgZnByaW50ZihmLCAiJXNcdCVzXHQlc1xuIiwgZnVsbG5hbWUsIHNsbm8sIGNvbnRleHQpOworCSAgIGVsc2UKKwkgICAgICAgZnByaW50ZihmLCAiJXNcdCVzXHQlcyAlc1xuIiwgZnVsbG5hbWUsIHNsbm8sIGNvbnRleHQsIHNlYXJjaCk7CisKKwkgICB2aW1fZnJlZShjb250ZXh0KTsKKwkgICB2aW1fZnJlZShmdWxsbmFtZSk7CisJfSAvKiBmb3IgYWxsIG1hdGNoZXMgKi8KKworCSh2b2lkKWNzX3JlYWRfcHJvbXB0KGkpOworCisgICAgfSAvKiBmb3IgYWxsIGNzY29wZSBjb25uZWN0aW9ucyAqLworICAgIHZpbV9mcmVlKGJ1Zik7Cit9CisKKy8qCisgKiBQUklWQVRFOiBjc19maWxsX3Jlc3VsdHMKKyAqCisgKiBnZXQgcGFyc2VkIGNzY29wZSBvdXRwdXQgYW5kIGNhbGxzIGNzX21ha2VfdmltX3N0eWxlX21hdGNoZXMgdG8gY29udmVydAorICogaW50byBjdGFncyBmb3JtYXQKKyAqLworICAgIHN0YXRpYyB2b2lkCitjc19maWxsX3Jlc3VsdHModGFnc3RyLCB0b3RtYXRjaGVzLCBudW1tYXRjaGVzX2EsIG1hdGNoZXNfcCwgY250eHRzX3AsIG1hdGNoZWQpCisgICAgY2hhciAqdGFnc3RyOworICAgIGludCB0b3RtYXRjaGVzOworICAgIGludCAqbnVtbWF0Y2hlc19hOworICAgIGNoYXIgKioqbWF0Y2hlc19wOworICAgIGNoYXIgKioqY250eHRzX3A7CisgICAgaW50ICptYXRjaGVkOworeworICAgIGludCBpLCBqOworICAgIGNoYXIgKmJ1ZjsKKyAgICBjaGFyICpzZWFyY2gsICpzbG5vOworICAgIGludCB0b3Rzb2ZhciA9IDA7CisgICAgY2hhciAqKm1hdGNoZXMgPSBOVUxMOworICAgIGNoYXIgKipjbnR4dHMgPSBOVUxMOworICAgIGNoYXIgKmZ1bGxuYW1lOworICAgIGNoYXIgKmNudHg7CisKKyAgICBhc3NlcnQodG90bWF0Y2hlcyA+IDApOworCisgICAgYnVmID0gKGNoYXIgKilhbGxvYyhDU1JFQURfQlVGU0laRSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGlmICgobWF0Y2hlcyA9IChjaGFyICoqKWFsbG9jKHNpemVvZihjaGFyICopICogdG90bWF0Y2hlcykpID09IE5VTEwpCisJZ290byBwYXJzZV9vdXQ7CisgICAgaWYgKChjbnR4dHMgPSAoY2hhciAqKilhbGxvYyhzaXplb2YoY2hhciAqKSAqIHRvdG1hdGNoZXMpKSA9PSBOVUxMKQorCWdvdG8gcGFyc2Vfb3V0OworCisgICAgZm9yIChpID0gMDsgaSA8IENTQ09QRV9NQVhfQ09OTkVDVElPTlM7IGkrKykKKyAgICB7CisJaWYgKG51bW1hdGNoZXNfYVtpXSA8IDEpCisJICAgIGNvbnRpbnVlOworCisJZm9yIChqID0gMDsgaiA8IG51bW1hdGNoZXNfYVtpXTsgaisrKQorCXsKKwkgICBpZiAoKGZ1bGxuYW1lID0gY3NfcGFyc2VfcmVzdWx0cyhpLCBidWYsIENTUkVBRF9CVUZTSVpFLCAmY250eCwKKwkJCSAgICZzbG5vLCAmc2VhcmNoKSkgPT0gTlVMTCkKKwkJY29udGludWU7CisKKwkgICAgbWF0Y2hlc1t0b3Rzb2Zhcl0gPSBjc19tYWtlX3ZpbV9zdHlsZV9tYXRjaGVzKGZ1bGxuYW1lLCBzbG5vLAorCQkJCQkJCSAgc2VhcmNoLCB0YWdzdHIpOworCisJICAgIHZpbV9mcmVlKGZ1bGxuYW1lKTsKKworCSAgICBpZiAoc3RyY21wKGNudHgsICI8Z2xvYmFsPiIpID09IDApCisJCWNudHh0c1t0b3Rzb2Zhcl0gPSBOVUxMOworCSAgICBlbHNlCisJCS8qIG5vdGU6IGlmIHZpbV9zdHJzYXZlIHJldHVybnMgTlVMTCwgdGhlbiB0aGUgY29udGV4dAorCQkgKiB3aWxsIGJlICI8Z2xvYmFsPiIsIHdoaWNoIGlzIG1pc2xlYWRpbmcuCisJCSAqLworCQljbnR4dHNbdG90c29mYXJdID0gKGNoYXIgKil2aW1fc3Ryc2F2ZSgoY2hhcl91ICopY250eCk7CisKKwkgICAgaWYgKG1hdGNoZXNbdG90c29mYXJdICE9IE5VTEwpCisJCXRvdHNvZmFyKys7CisKKwl9IC8qIGZvciBhbGwgbWF0Y2hlcyAqLworCisJKHZvaWQpY3NfcmVhZF9wcm9tcHQoaSk7CisKKyAgICB9IC8qIGZvciBhbGwgY3Njb3BlIGNvbm5lY3Rpb25zICovCisKK3BhcnNlX291dDoKKyAgICAqbWF0Y2hlZCA9IHRvdHNvZmFyOworICAgICptYXRjaGVzX3AgPSBtYXRjaGVzOworICAgICpjbnR4dHNfcCA9IGNudHh0czsKKyAgICB2aW1fZnJlZShidWYpOworfSAvKiBjc19maWxsX3Jlc3VsdHMgKi8KKworCisvKiBnZXQgdGhlIHJlcXVlc3RlZCBwYXRoIGNvbXBvbmVudHMgKi8KKyAgICBzdGF0aWMgY2hhciAqCitjc19wYXRoY29tcG9uZW50cyhwYXRoKQorICAgIGNoYXIJKnBhdGg7Cit7CisgICAgaW50CQlpOworICAgIGNoYXIJKnM7CisKKyAgICBpZiAocF9jc3BjID09IDApCisJcmV0dXJuIHBhdGg7CisKKyAgICBzID0gcGF0aCArIHN0cmxlbihwYXRoKSAtIDE7CisgICAgZm9yIChpID0gMDsgaSA8IHBfY3NwYzsgKytpKQorCXdoaWxlIChzID4gcGF0aCAmJiAqLS1zICE9ICcvJworI2lmZGVmIFdJTjMyCisJCSYmICotLXMgIT0gJ1xcJworI2VuZGlmCisJCSkKKwkgICAgOworICAgIGlmICgocyA+IHBhdGggJiYgKnMgPT0gJy8nKQorI2lmZGVmIFdJTjMyCisJfHwgKHMgPiBwYXRoICYmICpzID09ICdcXCcpCisjZW5kaWYKKwkgICAgKQorCSsrczsKKyAgICByZXR1cm4gczsKK30KKworLyoKKyAqIFBSSVZBVEU6IGNzX3ByaW50X3RhZ3NfcHJpdgorICoKKyAqIGNhbGxlZCBmcm9tIGNzX21hbmFnZV9tYXRjaGVzKCkKKyAqLworICAgIHN0YXRpYyB2b2lkCitjc19wcmludF90YWdzX3ByaXYobWF0Y2hlcywgY250eHRzLCBudW1fbWF0Y2hlcykKKyAgICBjaGFyICoqbWF0Y2hlczsKKyAgICBjaGFyICoqY250eHRzOworICAgIGludCBudW1fbWF0Y2hlczsKK3sKKyAgICBjaGFyCSpidWYgPSBOVUxMOworICAgIGludAkJYnVmc2l6ZSA9IDA7IC8qIFRyYWNrIGF2YWlsYWJsZSBidWZzaXplICovCisgICAgaW50CQluZXdzaXplID0gMDsKKyAgICBjaGFyCSpwdGFnOworICAgIGNoYXIJKmZuYW1lLCAqbG5vLCAqZXh0cmEsICp0YnVmOworICAgIGludAkJaSwgaWR4LCBudW07CisgICAgY2hhcgkqZ2xvYmFsY250eCA9ICJHTE9CQUwiOworICAgIGNoYXIJKmNudHhmb3JtYXQgPSAiIDw8JXM+PiI7CisgICAgY2hhcgkqY29udGV4dDsKKyAgICBjaGFyCSpjc3RhZ19tc2cgPSBfKCJDc2NvcGUgdGFnOiAlcyIpOworICAgIGNoYXIJKmNzZm10X3N0ciA9ICIlNGQgJTZzICAiOworCisgICAgYXNzZXJ0IChudW1fbWF0Y2hlcyA+IDApOworCisgICAgaWYgKCh0YnVmID0gKGNoYXIgKilhbGxvYyhzdHJsZW4obWF0Y2hlc1swXSkgKyAxKSkgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBzdHJjcHkodGJ1ZiwgbWF0Y2hlc1swXSk7CisgICAgcHRhZyA9IHN0cnRvayh0YnVmLCAiXHQiKTsKKworICAgIG5ld3NpemUgPSBzdHJsZW4oY3N0YWdfbXNnKSArIHN0cmxlbihwdGFnKTsKKyAgICBidWYgPSAoY2hhciAqKWFsbG9jKG5ld3NpemUpOworICAgIGlmIChidWYgIT0gTlVMTCkKKyAgICB7CisJYnVmc2l6ZSA9IG5ld3NpemU7CisJKHZvaWQpc3ByaW50ZihidWYsIGNzdGFnX21zZywgcHRhZyk7CisJTVNHX1BVVFNfQVRUUihidWYsIGhsX2F0dHIoSExGX1QpKTsKKyAgICB9CisKKyAgICB2aW1fZnJlZSh0YnVmKTsKKworICAgIE1TR19QVVRTX0FUVFIoXygiXG4gICAjICAgbGluZSIpLCBobF9hdHRyKEhMRl9UKSk7ICAgIC8qIHN0cmxlbiBpcyA3ICovCisgICAgbXNnX2FkdmFuY2UobXNnX2NvbCArIDIpOworICAgIE1TR19QVVRTX0FUVFIoXygiZmlsZW5hbWUgLyBjb250ZXh0IC8gbGluZVxuIiksIGhsX2F0dHIoSExGX1QpKTsKKworICAgIG51bSA9IDE7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9tYXRjaGVzOyBpKyspCisgICAgeworCWlkeCA9IGk7CisKKwkvKiBpZiB3ZSByZWFsbHkgd2FudGVkIHRvLCB3ZSBjb3VsZCBhdm9pZCB0aGlzIG1hbGxvYyBhbmQgc3RyY3B5CisJICogYnkgcGFyc2luZyBtYXRjaGVzW2ldIG9uIHRoZSBmbHkgYW5kIHBsYWNpbmcgc3R1ZmYgaW50byBidWYKKwkgKiBkaXJlY3RseSwgYnV0IHRoYXQncyB0b28gbXVjaCBvZiBhIGhhc3NsZQorCSAqLworCWlmICgodGJ1ZiA9IChjaGFyICopYWxsb2Moc3RybGVuKG1hdGNoZXNbaWR4XSkgKyAxKSkgPT0gTlVMTCkKKwkgICAgY29udGludWU7CisJKHZvaWQpc3RyY3B5KHRidWYsIG1hdGNoZXNbaWR4XSk7CisKKwlpZiAoKGZuYW1lID0gc3RydG9rKHRidWYsIChjb25zdCBjaGFyICopIlx0IikpID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworCWlmICgoZm5hbWUgPSBzdHJ0b2soTlVMTCwgKGNvbnN0IGNoYXIgKikiXHQiKSkgPT0gTlVMTCkKKwkgICAgY29udGludWU7CisJaWYgKChsbm8gPSBzdHJ0b2soTlVMTCwgKGNvbnN0IGNoYXIgKikiXHQiKSkgPT0gTlVMTCkKKwl7CisJICAgIC8qIGlmIE5VTEwsIHRoZW4gbm8gImV4dHJhIiwgYWx0aG91Z2ggaW4gY3Njb3BlJ3MgY2FzZSwgdGhlcmUKKwkgICAgICogc2hvdWxkIGFsd2F5cyBiZSAiZXh0cmEiLgorCSAgICAgKi8KKwkgICAgZXh0cmEgPSBOVUxMOworCX0KKworCWV4dHJhID0gbG5vICsgc3RybGVuKGxubykgKyAxOworCisJbG5vW3N0cmxlbihsbm8pLTJdID0gJ1wwJzsgIC8qIGlnbm9yZSA7IiBhdCB0aGUgZW5kICovCisKKwkvKiBob3BlZnVsbHkgJ251bScgKG51bSBvZiBtYXRjaGVzKSB3aWxsIGJlIGxlc3MgdGhhbiAxMF4xNiAqLworCW5ld3NpemUgPSBzdHJsZW4oY3NmbXRfc3RyKSArIDE2ICsgc3RybGVuKGxubyk7CisJaWYgKGJ1ZnNpemUgPCBuZXdzaXplKQorCXsKKwkgICAgYnVmID0gKGNoYXIgKil2aW1fcmVhbGxvYyhidWYsIG5ld3NpemUpOworCSAgICBpZiAoYnVmID09IE5VTEwpCisJCWJ1ZnNpemUgPSAwOworCSAgICBlbHNlCisJCWJ1ZnNpemUgPSBuZXdzaXplOworCX0KKwlpZiAoYnVmICE9IE5VTEwpCisJeworCSAgICAvKiBjc2ZtdF9zdHIgPSAiJTRkICU2cyAgIjsgKi8KKwkgICAgKHZvaWQpc3ByaW50ZihidWYsIGNzZm10X3N0ciwgbnVtLCBsbm8pOworCSAgICBNU0dfUFVUU19BVFRSKGJ1ZiwgaGxfYXR0cihITEZfQ00pKTsKKwl9CisJTVNHX1BVVFNfTE9OR19BVFRSKGNzX3BhdGhjb21wb25lbnRzKGZuYW1lKSwgaGxfYXR0cihITEZfQ00pKTsKKworCS8qIGNvbXB1dGUgdGhlIHJlcXVpcmVkIHNwYWNlIGZvciB0aGUgY29udGV4dCAqLworCWlmIChjbnR4dHNbaWR4XSAhPSBOVUxMKQorCSAgICBjb250ZXh0ID0gY250eHRzW2lkeF07CisJZWxzZQorCSAgICBjb250ZXh0ID0gZ2xvYmFsY250eDsKKwluZXdzaXplID0gc3RybGVuKGNvbnRleHQpICsgc3RybGVuKGNudHhmb3JtYXQpOworCisJaWYgKGJ1ZnNpemUgPCBuZXdzaXplKQorCXsKKwkgICAgYnVmID0gKGNoYXIgKil2aW1fcmVhbGxvYyhidWYsIG5ld3NpemUpOworCSAgICBpZiAoYnVmID09IE5VTEwpCisJCWJ1ZnNpemUgPSAwOworCSAgICBlbHNlCisJCWJ1ZnNpemUgPSBuZXdzaXplOworCX0KKwlpZiAoYnVmICE9IE5VTEwpCisJeworCSAgICAodm9pZClzcHJpbnRmKGJ1ZiwgY250eGZvcm1hdCwgY29udGV4dCk7CisKKwkgICAgLyogcHJpbnQgdGhlIGNvbnRleHQgb25seSBpZiBpdCBmaXRzIG9uIHRoZSBzYW1lIGxpbmUgKi8KKwkgICAgaWYgKG1zZ19jb2wgKyAoaW50KXN0cmxlbihidWYpID49IChpbnQpQ29sdW1ucykKKwkJbXNnX3B1dGNoYXIoJ1xuJyk7CisJICAgIG1zZ19hZHZhbmNlKDEyKTsKKwkgICAgTVNHX1BVVFNfTE9ORyhidWYpOworCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKwl9CisJaWYgKGV4dHJhICE9IE5VTEwpCisJeworCSAgICBtc2dfYWR2YW5jZSgxMyk7CisJICAgIE1TR19QVVRTX0xPTkcoZXh0cmEpOworCX0KKworCXZpbV9mcmVlKHRidWYpOyAvKiBvbmx5IGFmdGVyIHByaW50aW5nIGV4dHJhIGR1ZSB0byBzdHJ0b2sgdXNlICovCisKKwlpZiAobXNnX2NvbCkKKwkgICAgbXNnX3B1dGNoYXIoJ1xuJyk7CisKKwl1aV9icmVha2NoZWNrKCk7CisJaWYgKGdvdF9pbnQpCisJeworCSAgICBnb3RfaW50ID0gRkFMU0U7CS8qIGRvbid0IHByaW50IGFueSBtb3JlIG1hdGNoZXMgKi8KKwkgICAgYnJlYWs7CisJfQorCisJbnVtKys7CisgICAgfSAvKiBmb3IgYWxsIG1hdGNoZXMgKi8KKworICAgIHZpbV9mcmVlKGJ1Zik7Cit9IC8qIGNzX3ByaW50X3RhZ3NfcHJpdiAqLworCisKKy8qCisgKiBQUklWQVRFOiBjc19yZWFkX3Byb21wdAorICoKKyAqIHJlYWQgYSBjc2NvcGUgcHJvbXB0IChiYXNpY2FsbHksIHNraXAgb3ZlciB0aGUgIj4+ICIpCisgKi8KKyAgICBzdGF0aWMgaW50Citjc19yZWFkX3Byb21wdChpKQorICAgIGludCBpOworeworICAgIGludAkJY2g7CisgICAgY2hhcgkqYnVmID0gTlVMTDsgLyogYnVmZmVyIGZvciBwb3NzaWJsZSBlcnJvciBtZXNzYWdlIGZyb20gY3Njb3BlICovCisgICAgaW50CQlidWZwb3MgPSAwOworICAgIGNoYXIJKmNzX2Vtc2c7CisgICAgaW50CQltYXhsZW47CisgICAgc3RhdGljIGNoYXIgKmVwcm9tcHQgPSAiUHJlc3MgdGhlIFJFVFVSTiBrZXkgdG8gY29udGludWU6IjsKKyAgICBpbnQJCWVwcm9tcHRsZW4gPSBzdHJsZW4oZXByb21wdCk7CisgICAgaW50CQluOworCisgICAgY3NfZW1zZyA9IF8oIkU2MDk6IENzY29wZSBlcnJvcjogJXMiKTsKKyAgICAvKiBjb21wdXRlIG1heGltdW0gYWxsb3dlZCBsZW4gZm9yIENzY29wZSBlcnJvciBtZXNzYWdlICovCisgICAgbWF4bGVuID0gKGludCkoSU9TSVpFIC0gc3RybGVuKGNzX2Vtc2cpKTsKKworICAgIGZvciAoOzspCisgICAgeworCXdoaWxlICgoY2ggPSBnZXRjKGNzaW5mb1tpXS5mcl9mcCkpICE9IEVPRiAmJiBjaCAhPSBDU0NPUEVfUFJPTVBUWzBdKQorCSAgICAvKiBpZiB0aGVyZSBpcyByb29tIGFuZCBjaGFyIGlzIHByaW50YWJsZSAqLworCSAgICBpZiAoYnVmcG9zIDwgbWF4bGVuIC0gMSAmJiB2aW1faXNwcmludGMoY2gpKQorCSAgICB7CisJCWlmIChidWYgPT0gTlVMTCkgLyogbGF6eSBidWZmZXIgYWxsb2NhdGlvbiAqLworCQkgICAgYnVmID0gKGNoYXIgKilhbGxvYyhtYXhsZW4pOworCQlpZiAoYnVmICE9IE5VTEwpCisJCXsKKwkJICAgIC8qIGFwcGVuZCBjaGFyYWN0ZXIgdG8gdGhlIG1lc3NhZ2UgKi8KKwkJICAgIGJ1ZltidWZwb3MrK10gPSBjaDsKKwkJICAgIGJ1ZltidWZwb3NdID0gTlVMOworCQkgICAgaWYgKGJ1ZnBvcyA+PSBlcHJvbXB0bGVuCisJCQkgICAgJiYgc3RyY21wKCZidWZbYnVmcG9zIC0gZXByb21wdGxlbl0sIGVwcm9tcHQpID09IDApCisJCSAgICB7CisJCQkvKiByZW1vdmUgZXByb21wdCBmcm9tIGJ1ZiAqLworCQkJYnVmW2J1ZnBvcyAtIGVwcm9tcHRsZW5dID0gTlVMOworCisJCQkvKiBwcmludCBtZXNzYWdlIHRvIHVzZXIgKi8KKwkJCSh2b2lkKUVNU0cyKGNzX2Vtc2csIGJ1Zik7CisKKwkJCS8qIHNlbmQgUkVUVVJOIHRvIGNzY29wZSAqLworCQkJKHZvaWQpcHV0YygnXG4nLCBjc2luZm9baV0udG9fZnApOworCQkJKHZvaWQpZmZsdXNoKGNzaW5mb1tpXS50b19mcCk7CisKKwkJCS8qIGNsZWFyIGJ1ZiAqLworCQkJYnVmcG9zID0gMDsKKwkJCWJ1ZltidWZwb3NdID0gTlVMOworCQkgICAgfQorCQl9CisJICAgIH0KKworCWZvciAobiA9IDA7IG4gPCAoaW50KXN0cmxlbihDU0NPUEVfUFJPTVBUKTsgKytuKQorCXsKKwkgICAgaWYgKG4gPiAwKQorCQljaCA9IGdldGMoY3NpbmZvW2ldLmZyX2ZwKTsKKwkgICAgaWYgKGNoID09IEVPRikKKwkgICAgeworCQlQRVJST1IoImNzX3JlYWRfcHJvbXB0IEVPRiIpOworCQlpZiAoYnVmICE9IE5VTEwgJiYgYnVmWzBdICE9IE5VTCkKKwkJICAgICh2b2lkKUVNU0cyKGNzX2Vtc2csIGJ1Zik7CisJCWVsc2UgaWYgKHBfY3N2ZXJib3NlKQorCQkgICAgY3NfcmVhZGluZ19lbXNnKGkpOyAvKiBkb24ndCBoYXZlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gKi8KKwkJY3NfcmVsZWFzZV9jc3AoaSwgVFJVRSk7CisJCXZpbV9mcmVlKGJ1Zik7CisJCXJldHVybiBDU0NPUEVfRkFJTFVSRTsKKwkgICAgfQorCisJICAgIGlmIChjaCAhPSBDU0NPUEVfUFJPTVBUW25dKQorCSAgICB7CisJCWNoID0gRU9GOworCQlicmVhazsKKwkgICAgfQorCX0KKworCWlmIChjaCA9PSBFT0YpCisJICAgIGNvbnRpbnVlOwkgICAgLyogZGlkbid0IGZpbmQgdGhlIHByb21wdCAqLworCWJyZWFrOwkJICAgIC8qIGRpZCBmaW5kIHRoZSBwcm9tcHQgKi8KKyAgICB9CisKKyAgICB2aW1fZnJlZShidWYpOworICAgIHJldHVybiBDU0NPUEVfU1VDQ0VTUzsKK30KKworCisvKgorICogUFJJVkFURTogY3NfcmVsZWFzZV9jc3AKKyAqCisgKiBkb2VzIHRoZSBhY3R1YWwgZnJlZSdpbmcgZm9yIHRoZSBjcyBwdHIgd2l0aCBhbiBvcHRpb25hbCBmbGFnIG9mIHdoZXRoZXIKKyAqIG9yIG5vdCB0byBmcmVlIHRoZSBmaWxlbmFtZS4gIGNhbGxlZCBieSBjc19raWxsIGFuZCBjc19yZXNldC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjc19yZWxlYXNlX2NzcChpLCBmcmVlZm5wcCkKKyAgICBpbnQgaTsKKyAgICBpbnQgZnJlZWZucHA7Cit7CisjaWYgZGVmaW5lZChVTklYKQorICAgIGludCBwc3RhdDsKKyNlbHNlCisgICAgLyoKKyAgICAgKiBUcnlpbmcgdG8gZXhpdCBub3JtYWxseSAobm90IHN1cmUgd2hldGhlciBpdCBpcyBmaXQgdG8gVU5JWCBjc2NvcGUKKyAgICAgKi8KKyAgICBpZiAoY3NpbmZvW2ldLnRvX2ZwICE9IE5VTEwpCisgICAgeworCSh2b2lkKWZwdXRzKCJxXG4iLCBjc2luZm9baV0udG9fZnApOworCSh2b2lkKWZmbHVzaChjc2luZm9baV0udG9fZnApOworICAgIH0KKyAgICAvKiBnaXZlIGNzY29wZSBjaGFuY2UgdG8gZXhpdCBub3JtYWxseSAqLworICAgIGlmIChjc2luZm9baV0uaFByb2MgPiAwCisJICAgICYmIFdhaXRGb3JTaW5nbGVPYmplY3QoY3NpbmZvW2ldLmhQcm9jLCAxMDAwKSA9PSBXQUlUX1RJTUVPVVQpCisJVGVybWluYXRlUHJvY2Vzcyhjc2luZm9baV0uaFByb2MsIDApOworI2VuZGlmCisKKyAgICBpZiAoY3NpbmZvW2ldLmZyX2ZwICE9IE5VTEwpCisJKHZvaWQpZmNsb3NlKGNzaW5mb1tpXS5mcl9mcCk7CisgICAgaWYgKGNzaW5mb1tpXS50b19mcCAhPSBOVUxMKQorCSh2b2lkKWZjbG9zZShjc2luZm9baV0udG9fZnApOworCisgICAgLyoKKyAgICAgKiBTYWZldHkgY2hlY2s6IElmIHRoZSBQSUQgd291bGQgYmUgemVybyBoZXJlLCB0aGUgZW50aXJlIFggc2Vzc2lvbiB3b3VsZAorICAgICAqIGJlIGtpbGxlZC4gIC0xIGFuZCAxIGFyZSBkYW5nZXJvdXMgYXMgd2VsbC4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKFVOSVgpCisgICAgaWYgKGNzaW5mb1tpXS5waWQgPiAxKQorICAgIHsKKwlraWxsKGNzaW5mb1tpXS5waWQsIFNJR1RFUk0pOworCSh2b2lkKXdhaXRwaWQoY3NpbmZvW2ldLnBpZCwgJnBzdGF0LCAwKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChmcmVlZm5wcCkKKyAgICB7CisJdmltX2ZyZWUoY3NpbmZvW2ldLmZuYW1lKTsKKwl2aW1fZnJlZShjc2luZm9baV0ucHBhdGgpOworCXZpbV9mcmVlKGNzaW5mb1tpXS5mbGFncyk7CisgICAgfQorCisgICAgY2xlYXJfY3NpbmZvKGkpOworfSAvKiBjc19yZWxlYXNlX2NzcCAqLworCisKKy8qCisgKiBQUklWQVRFOiBjc19yZXNldAorICoKKyAqIGNhbGxzIGNzX2tpbGwgb24gYWxsIGNzY29wZSBjb25uZWN0aW9ucyB0aGVuIHJlaW5pdHMKKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgaW50Citjc19yZXNldChlYXApCisgICAgZXhhcmdfVCAqZWFwOworeworICAgIGNoYXIJKipkYmxpc3QgPSBOVUxMLCAqKnBwbGlzdCA9IE5VTEwsICoqZmxsaXN0ID0gTlVMTDsKKyAgICBpbnQJaTsKKyAgICBjaGFyIGJ1Zls4XTsgLyogZm9yIHNwcmludGYgIiAoIyVkKSIgKi8KKworICAgIC8qIG1hbGxvYyBvdXIgZGIgYW5kIHBwYXRoIGxpc3QgKi8KKyAgICBkYmxpc3QgPSAoY2hhciAqKilhbGxvYyhDU0NPUEVfTUFYX0NPTk5FQ1RJT05TICogc2l6ZW9mKGNoYXIgKikpOworICAgIHBwbGlzdCA9IChjaGFyICoqKWFsbG9jKENTQ09QRV9NQVhfQ09OTkVDVElPTlMgKiBzaXplb2YoY2hhciAqKSk7CisgICAgZmxsaXN0ID0gKGNoYXIgKiopYWxsb2MoQ1NDT1BFX01BWF9DT05ORUNUSU9OUyAqIHNpemVvZihjaGFyICopKTsKKyAgICBpZiAoZGJsaXN0ID09IE5VTEwgfHwgcHBsaXN0ID09IE5VTEwgfHwgZmxsaXN0ID09IE5VTEwpCisgICAgeworCXZpbV9mcmVlKGRibGlzdCk7CisJdmltX2ZyZWUocHBsaXN0KTsKKwl2aW1fZnJlZShmbGxpc3QpOworCXJldHVybiBDU0NPUEVfRkFJTFVSRTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQ1NDT1BFX01BWF9DT05ORUNUSU9OUzsgaSsrKQorICAgIHsKKwlkYmxpc3RbaV0gPSBjc2luZm9baV0uZm5hbWU7CisJcHBsaXN0W2ldID0gY3NpbmZvW2ldLnBwYXRoOworCWZsbGlzdFtpXSA9IGNzaW5mb1tpXS5mbGFnczsKKwlpZiAoY3NpbmZvW2ldLmZuYW1lICE9IE5VTEwpCisJICAgIGNzX3JlbGVhc2VfY3NwKGksIEZBTFNFKTsKKyAgICB9CisKKyAgICAvKiByZWJ1aWxkIHRoZSBjc2NvcGUgY29ubmVjdGlvbiBsaXN0ICovCisgICAgZm9yIChpID0gMDsgaSA8IENTQ09QRV9NQVhfQ09OTkVDVElPTlM7IGkrKykKKyAgICB7CisJaWYgKGRibGlzdFtpXSAhPSBOVUxMKQorCXsKKwkgICAgY3NfYWRkX2NvbW1vbihkYmxpc3RbaV0sIHBwbGlzdFtpXSwgZmxsaXN0W2ldKTsKKwkgICAgaWYgKHBfY3N2ZXJib3NlKQorCSAgICB7CisJCS8qIGRvbnQnIHVzZSBzbXNnX2F0dHIgYmVjYXVzZSB3YW50IHRvIGRpc3BsYXkKKwkJICogY29ubmVjdGlvbiBudW1iZXIgaW4gdGhlIHNhbWUgbGluZSBhcworCQkgKiAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlLi4uIgorCQkgKi8KKwkJc3ByaW50ZihidWYsICIgKCMlZCkiLCBpKTsKKwkJTVNHX1BVVFNfQVRUUihidWYsIGhsX2F0dHIoSExGX1IpKTsKKwkgICAgfQorCX0KKwl2aW1fZnJlZShkYmxpc3RbaV0pOworCXZpbV9mcmVlKHBwbGlzdFtpXSk7CisJdmltX2ZyZWUoZmxsaXN0W2ldKTsKKyAgICB9CisgICAgdmltX2ZyZWUoZGJsaXN0KTsKKyAgICB2aW1fZnJlZShwcGxpc3QpOworICAgIHZpbV9mcmVlKGZsbGlzdCk7CisKKyAgICBpZiAocF9jc3ZlcmJvc2UpCisJTVNHX0FUVFIoXygiQWxsIGNzY29wZSBkYXRhYmFzZXMgcmVzZXQiKSwgaGxfYXR0cihITEZfUikgfCBNU0dfSElTVCk7CisgICAgcmV0dXJuIENTQ09QRV9TVUNDRVNTOworfSAvKiBjc19yZXNldCAqLworCisKKy8qCisgKiBQUklWQVRFOiBjc19yZXNvbHZlX2ZpbGUKKyAqCisgKiBjb25zdHJ1Y3QgdGhlIGZ1bGwgcGF0aG5hbWUgdG8gYSBmaWxlIGZvdW5kIGluIHRoZSBjc2NvcGUgZGF0YWJhc2UuCisgKiAoUHJlcGVuZHMgcHBhdGgsIGlmIHRoZXJlIGlzIG9uZSBhbmQgaWYgaXQncyBub3QgYWxyZWFkeSBwcmVwZW5kZWQsCisgKiBvdGhlcndpc2UganVzdCB1c2VzIHRoZSBuYW1lIGZvdW5kLikKKyAqCisgKiB3ZSBuZWVkIHRvIHByZXBlbmQgdGhlIHByZWZpeCBiZWNhdXNlIG9uIHNvbWUgY3Njb3BlJ3MgKGUuZy4sIHRoZSBvbmUgdGhhdAorICogc2hpcHMgd2l0aCBTb2xhcmlzIDIuNiksIHRoZSBvdXRwdXQgbmV2ZXIgaGFzIHRoZSBwcmVmaXggcHJlcGVuZGVkLgorICogY29udHJhc3QgdGhpcyB3aXRoIG15IGRldmVsb3BtZW50IHN5c3RlbSAoRGlnaXRhbCBVbml4KSwgd2hpY2ggZG9lcy4KKyAqLworICAgIHN0YXRpYyBjaGFyICoKK2NzX3Jlc29sdmVfZmlsZShpLCBuYW1lKQorICAgIGludCBpOworICAgIGNoYXIgKm5hbWU7Cit7CisgICAgY2hhciAqZnVsbG5hbWU7CisgICAgaW50IGxlbjsKKworICAgIC8qCisgICAgICogcHBhdGggaXMgZnJlZWQgd2hlbiB3ZSBkZXN0cm95IHRoZSBjc2NvcGUgY29ubmVjdGlvbi4KKyAgICAgKiBmdWxsbmFtZSBpcyBmcmVlZCBhZnRlciBjc19tYWtlX3ZpbV9zdHlsZV9tYXRjaGVzLCBhZnRlciBpdCdzIGJlZW4KKyAgICAgKiBjb3BpZWQgaW50byB0aGUgdGFnIGJ1ZmZlciB1c2VkIGJ5IHZpbQorICAgICAqLworICAgIGxlbiA9IHN0cmxlbihuYW1lKSArIDI7CisgICAgaWYgKGNzaW5mb1tpXS5wcGF0aCAhPSBOVUxMKQorCWxlbiArPSBzdHJsZW4oY3NpbmZvW2ldLnBwYXRoKTsKKworICAgIGlmICgoZnVsbG5hbWUgPSAoY2hhciAqKWFsbG9jKGxlbikpID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICAvKgorICAgICAqIG5vdGUvZXhhbXBsZTogdGhpcyB3b24ndCB3b3JrIGlmIHRoZSBjc2NvcGUgb3V0cHV0IGFscmVhZHkgc3RhcnRzCisgICAgICogIi4uLy4uIiBhbmQgdGhlIHByZWZpeCBwYXRoIGlzIGFsc28gIi4uLy4uIi4gIGlmIHNvbWV0aGluZyBsaWtlIHRoaXMKKyAgICAgKiBoYXBwZW5zLCB5b3UgYXJlIHNjcmV3ZWQgdXAgYW5kIG5lZWQgdG8gZml4IGhvdyB5b3UncmUgdXNpbmcgY3Njb3BlLgorICAgICAqLworICAgIGlmIChjc2luZm9baV0ucHBhdGggIT0gTlVMTCAmJgorCShzdHJuY21wKG5hbWUsIGNzaW5mb1tpXS5wcGF0aCwgc3RybGVuKGNzaW5mb1tpXS5wcGF0aCkpICE9IDApICYmCisJKG5hbWVbMF0gIT0gJy8nKQorI2lmZGVmIFdJTjMyCisJJiYgbmFtZVswXSAhPSAnXFwnICYmIG5hbWVbMV0gIT0gJzonCisjZW5kaWYKKwkpCisJKHZvaWQpc3ByaW50ZihmdWxsbmFtZSwgIiVzLyVzIiwgY3NpbmZvW2ldLnBwYXRoLCBuYW1lKTsKKyAgICBlbHNlCisJKHZvaWQpc3ByaW50ZihmdWxsbmFtZSwgIiVzIiwgbmFtZSk7CisKKyAgICByZXR1cm4gZnVsbG5hbWU7Cit9IC8qIGNzX3Jlc29sdmVfZmlsZSAqLworCisKKy8qCisgKiBQUklWQVRFOiBjc19zaG93CisgKgorICogc2hvdyBhbGwgY3Njb3BlIGNvbm5lY3Rpb25zCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIGludAorY3Nfc2hvdyhlYXApCisgICAgZXhhcmdfVCAqZWFwOworeworICAgIHNob3J0IGk7CisgICAgaWYgKGNzX2NudF9jb25uZWN0aW9ucygpID09IDApCisJTVNHX1BVVFMoXygibm8gY3Njb3BlIGNvbm5lY3Rpb25zXG4iKSk7CisgICAgZWxzZQorICAgIHsKKwlNU0dfUFVUU19BVFRSKAorCSAgICBfKCIgIyBwaWQgICAgZGF0YWJhc2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iKSwKKwkgICAgaGxfYXR0cihITEZfVCkpOworCWZvciAoaSA9IDA7IGkgPCBDU0NPUEVfTUFYX0NPTk5FQ1RJT05TOyBpKyspCisJeworCSAgICBpZiAoY3NpbmZvW2ldLmZuYW1lID09IE5VTEwpCisJCWNvbnRpbnVlOworCisJICAgIGlmIChjc2luZm9baV0ucHBhdGggIT0gTlVMTCkKKwkJKHZvaWQpc21zZygoY2hhcl91ICopIiUyZCAlLTVsZCAgJS0zNHMgICUtMzJzIiwKKwkJICAgIGksIChsb25nKWNzaW5mb1tpXS5waWQsIGNzaW5mb1tpXS5mbmFtZSwgY3NpbmZvW2ldLnBwYXRoKTsKKwkgICAgZWxzZQorCQkodm9pZClzbXNnKChjaGFyX3UgKikiJTJkICUtNWxkICAlLTM0cyAgPG5vbmU+IiwKKwkJCSAgIGksIChsb25nKWNzaW5mb1tpXS5waWQsIGNzaW5mb1tpXS5mbmFtZSk7CisJfQorICAgIH0KKworICAgIHdhaXRfcmV0dXJuKFRSVUUpOworICAgIHJldHVybiBDU0NPUEVfU1VDQ0VTUzsKK30gLyogY3Nfc2hvdyAqLworCisjZW5kaWYJLyogRkVBVF9DU0NPUEUgKi8KKworLyogdGhlIGVuZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lmX2NzY29wZS5oIGIvc3JjL2lmX2NzY29wZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTQ5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaWZfY3Njb3BlLmgKQEAgLTAsMCArMSw5NiBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBDU0NPUEUgc3VwcG9ydCBmb3IgVmltIGFkZGVkIGJ5IEFuZHkgS2FobiA8a2FobkB6azMuZGVjLmNvbT4KKyAqIFBvcnRlZCB0byBXaW4zMiBieSBTZXJnZXkgS2hvcmV2IDxraG9yZXZAc29mdGxhYi5ydT4KKyAqCisgKiBUaGUgYmFzaWMgaWRlYS9zdHJ1Y3R1cmUgb2YgY3Njb3BlIGZvciBWaW0gd2FzIGJvcnJvd2VkIGZyb20gTnZpLgorICogVGhlcmUgbWlnaHQgYmUgYSBmZXcgbGluZXMgb2YgY29kZSB0aGF0IGxvb2sgc2ltaWxhciB0byB3aGF0IE52aQorICogaGFzLiAgSWYgdGhpcyBpcyBhIHByb2JsZW0gYW5kIHJlcXVpcmVzIGluY2x1c2lvbiBvZiB0aGUgYW5ub3lpbmcKKyAqIEJTRCBsaWNlbnNlLCB0aGVuIHN1ZSBtZTsgSSdtIG5vdCB3b3J0aCBtdWNoIGFueXdheS4KKyAqLworCisjaWYgZGVmaW5lZChGRUFUX0NTQ09QRSkgfHwgZGVmaW5lZChQUk9UTykKKworI2lmIGRlZmluZWQoVU5JWCkKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4JCS8qIHBpZF90ICovCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4JCS8qIGRldl90LCBpbm9fdCAqLworI2VsaWYgZGVmaW5lZCAoV0lOMzIpCisjIGlmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyBlbmRpZgorIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworI2RlZmluZSBDU0NPUEVfU1VDQ0VTUwkJMAorI2RlZmluZSBDU0NPUEVfRkFJTFVSRQkJLTEKKyNkZWZpbmUgQ1NDT1BFX01BWF9DT05ORUNUSU9OUwk4ICAgLyogeW91IGFjdHVhbGx5IG5lZWQgbW9yZT8gKi8KKworI2RlZmluZQlDU0NPUEVfREJGSUxFCQkiY3Njb3BlLm91dCIKKyNkZWZpbmUJQ1NDT1BFX1BST01QVAkJIj4+ICIKKyNkZWZpbmUJQ1NDT1BFX1FVRVJJRVMJCSJzZ2RjdCBlZmkiCisKKy8qCisgKiBzIDBuYW1lCUZpbmQgdGhpcyBDIHN5bWJvbAorICogZyAxbmFtZQlGaW5kIHRoaXMgZGVmaW5pdGlvbgorICogZCAybmFtZQlGaW5kIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGhpcyBmdW5jdGlvbgorICogYyAzbmFtZQlGaW5kIGZ1bmN0aW9ucyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAqIHQgNHN0cmluZwlmaW5kIHRleHQgc3RyaW5nIChjc2NvcGUgMTIuOSkKKyAqIHQgNG5hbWUJRmluZCBhc3NpZ25tZW50cyB0byAoY3Njb3BlIDEzLjMpCisgKiAgIDVwYXR0ZXJuCWNoYW5nZSBwYXR0ZXJuIC0tIE5PVCBVU0VECisgKiBlIDZwYXR0ZXJuCUZpbmQgdGhpcyBlZ3JlcCBwYXR0ZXJuCisgKiBmIDduYW1lCUZpbmQgdGhpcyBmaWxlCisgKiBpIDhuYW1lCUZpbmQgZmlsZXMgI2luY2x1ZGluZyB0aGlzIGZpbGUKKyAqLworI2RlZmluZQlGSU5EX1VTQUdFICJmaW5kIGN8ZHxlfGZ8Z3xpfHN8dCBuYW1lIgorI2RlZmluZSBGSU5EX0hFTFAgIlxuXAorICAgICAgIGM6IEZpbmQgZnVuY3Rpb25zIGNhbGxpbmcgdGhpcyBmdW5jdGlvblxuXAorICAgICAgIGQ6IEZpbmQgZnVuY3Rpb25zIGNhbGxlZCBieSB0aGlzIGZ1bmN0aW9uXG5cCisgICAgICAgZTogRmluZCB0aGlzIGVncmVwIHBhdHRlcm5cblwKKyAgICAgICBmOiBGaW5kIHRoaXMgZmlsZVxuXAorICAgICAgIGc6IEZpbmQgdGhpcyBkZWZpbml0aW9uXG5cCisgICAgICAgaTogRmluZCBmaWxlcyAjaW5jbHVkaW5nIHRoaXMgZmlsZVxuXAorICAgICAgIHM6IEZpbmQgdGhpcyBDIHN5bWJvbFxuXAorICAgICAgIHQ6IEZpbmQgYXNzaWdubWVudHMgdG9cbiIKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAqICBuYW1lOworICAgIGludCAgICAgKCpmdW5jKSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworICAgIGNoYXIgKiAgaGVscDsKKyAgICBjaGFyICogIHVzYWdlOworICAgIGludAkgICAgY2Fuc3BsaXQ7CQkvKiBpZiBzdXBwb3J0cyBzcGxpdHRpbmcgd2luZG93ICovCit9IGNzY21kX1Q7CisKK3R5cGVkZWYgc3RydWN0IGNzaSB7CisgICAgY2hhciAqCSAgICBmbmFtZTsJLyogY3Njb3BlIGRiIG5hbWUgKi8KKyAgICBjaGFyICoJICAgIHBwYXRoOwkvKiBwYXRoIHRvIHByZXBlbmQgKHRoZSAtUCBvcHRpb24pICovCisgICAgY2hhciAqCSAgICBmbGFnczsJLyogYWRkaXRpb25hbCBjc2NvcGUgZmxhZ3Mvb3B0aW9ucyAoZS5nLCAtcDIpICovCisjaWYgZGVmaW5lZChVTklYKQorICAgIHBpZF90CSAgICBwaWQ7CS8qIFBJRCBvZiB0aGUgY29ubmVjdGVkIGNzY29wZSBwcm9jZXNzLiAqLworICAgIGRldl90CSAgICBzdF9kZXY7CS8qIElEIG9mIGRldiBjb250YWluaW5nIGNzY29wZSBkYiAqLworICAgIGlub190CSAgICBzdF9pbm87CS8qIGlub2RlIG51bWJlciBvZiBjc2NvcGUgZGIgKi8KKyNlbGlmIGRlZmluZWQoV0lOMzIpCisgICAgaW50CSAgICBwaWQ7CS8qIENhbid0IGdldCBwaWQgc28gc2V0IGl0IHRvIDAgOykgKi8KKyAgICBIQU5ETEUJICAgIGhQcm9jOwkvKiBjc2NvcGUgcHJvY2VzcyBoYW5kbGUgKi8KKyAgICBEV09SRAkgICAgblZvbHVtZTsJLyogVm9sdW1lIHNlcmlhbCBudW1iZXIsIGluc3RlYWQgb2Ygc3RfZGV2ICovCisgICAgRFdPUkQJICAgIG5JbmRleEhpZ2g7CS8qIHN0X2lubyBoYXMgbm8gbWVhbmluZyBpbiB0aGUgV2luZG93cyAqLworICAgIERXT1JECSAgICBuSW5kZXhMb3c7CisjZW5kaWYKKworICAgIEZJTEUgKgkgICAgZnJfZnA7CS8qIGZyb20gY3Njb3BlOiBGSUxFLiAqLworICAgIEZJTEUgKgkgICAgdG9fZnA7CS8qIHRvIGNzY29wZTogRklMRS4gKi8KK30gY3NpbmZvX1Q7CisKK3R5cGVkZWYgZW51bSB7IEFkZCwgRmluZCwgSGVscCwgS2lsbCwgUmVzZXQsIFNob3cgfSBjc2lkX2U7CisKK3R5cGVkZWYgZW51bSB7CisgICAgU3RvcmUsCisgICAgR2V0LAorICAgIEZyZWUsCisgICAgUHJpbnQKK30gbWNtZF9lOworCisKKyNlbmRpZgkvKiBGRUFUX0NTQ09QRSAqLworCisvKiB0aGUgZW5kICovCmRpZmYgLS1naXQgYS9zcmMvaWZfb2xlLmNwcCBiL3NyYy9pZl9vbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTdmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaWZfb2xlLmNwcApAQCAtMCwwICsxLDc3OCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAkJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKyNpZiBkZWZpbmVkKEZFQVRfT0xFKSAmJiBkZWZpbmVkKEZFQVRfR1VJX1czMikKKy8qCisgKiBPTEUgc2VydmVyIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFNlZSBvc19tc3dpbi5jIGZvciB0aGUgY2xpZW50IHNpZGUuCisgKi8KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxvbGVhdXRvLmg+CisKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgInZpbS5oIgorZXh0ZXJuIEhXTkQgc19od25kOworZXh0ZXJuIEhXTkQgdmltX3BhcmVudF9od25kOworfQorCisjaW5jbHVkZSAiaWZfb2xlLmgiCS8vIEludGVyZmFjZSBkZWZpbml0aW9ucworI2luY2x1ZGUgImlpZF9vbGUuYyIJLy8gVVVJRCBkZWZpbml0aW9ucyAoY29tcGlsZSBoZXJlKQorCisvKiBTdXBwbHkgZnVuY3Rpb24gcHJvdG90eXBlIHRvIHdvcmsgYXJvdW5kIGJ1ZyBpbiBNaW5ndyBvbGVhdXRvLmggaGVhZGVyICovCisjaWZkZWYgX19NSU5HVzMyX18KK1dJTk9MRUFVVEFQSSBVblJlZ2lzdGVyVHlwZUxpYihSRUZHVUlEIGxpYklELCBXT1JEIHdWZXJNYWpvciwKKwkgICAgV09SRCB3VmVyTWlub3IsIExDSUQgbGNpZCwgU1lTS0lORCBzeXNraW5kKTsKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAxLiBJbnRlcm5hbCBkZWZpbml0aW9ucyBmb3IgdGhpcyBmaWxlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworY2xhc3MgQ1ZpbTsKK2NsYXNzIENWaW1DRjsKKworLyogSW50ZXJuYWwgZGF0YSAqLworLy8gVGhlIGlkZW50aWZpZXIgb2YgdGhlIHJlZ2lzdGVyZWQgY2xhc3MgZmFjdG9yeQorc3RhdGljIHVuc2lnbmVkIGxvbmcgY2ZfaWQgPSAwOworCisvLyBUaGUgaWRlbnRpZmllciBvZiB0aGUgcnVubmluZyBhcHBsaWNhdGlvbiBvYmplY3QKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFwcF9pZCA9IDA7CisKKy8vIFRoZSBzaW5nbGUgZ2xvYmFsIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmYWN0b3J5CitzdGF0aWMgQ1ZpbUNGICpjZiA9IDA7CisKKy8vIFRoZSBzaW5nbGUgZ2xvYmFsIGluc3RhbmNlIG9mIHRoZSBhcHBsaWNhdGlvbiBvYmplY3QKK3N0YXRpYyBDVmltICphcHAgPSAwOworCisvKiBHVUlEcywgdmVyc2lvbnMgYW5kIHR5cGUgbGlicmFyeSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBNWUNMU0lEIENMU0lEX1ZpbQorI2RlZmluZSBNWUxJQklEIExJQklEX1ZpbQorI2RlZmluZSBNWUlJRCBJSURfSVZpbQorCisjZGVmaW5lIE1BSk9SVkVSIDEKKyNkZWZpbmUgTUlOT1JWRVIgMAorI2RlZmluZSBMT0NBTEUgMHgwNDA5CisKKyNkZWZpbmUgTVlOQU1FICJWaW0iCisjZGVmaW5lIE1ZUFJPR0lEICJWaW0uQXBwbGljYXRpb24uMSIKKyNkZWZpbmUgTVlWSVBST0dJRCAiVmltLkFwcGxpY2F0aW9uIgorCisjZGVmaW5lIE1BWF9DTFNJRF9MRU4gMTAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIDIuIFRoZSBhcHBsaWNhdGlvbiBvYmplY3QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEZWZpbml0aW9uCisgKiAtLS0tLS0tLS0tCisgKi8KKworY2xhc3MgQ1ZpbSA6IHB1YmxpYyBJVmltCit7CitwdWJsaWM6CisgICAgfkNWaW0oKTsKKyAgICBzdGF0aWMgQ1ZpbSAqQ3JlYXRlKGludCogcGJEb1Jlc3RhcnQpOworCisgICAgLy8gSVVua25vd24gbWVtYmVycworICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFjZSkoUkVGSUlEIHJpaWQsIHZvaWQgKiogcHB2KTsKKyAgICBTVERNRVRIT0RfKHVuc2lnbmVkIGxvbmcsIEFkZFJlZikodm9pZCk7CisgICAgU1RETUVUSE9EXyh1bnNpZ25lZCBsb25nLCBSZWxlYXNlKSh2b2lkKTsKKworICAgIC8vIElEaXNwYXRjaCBtZW1iZXJzCisgICAgU1RETUVUSE9EKEdldFR5cGVJbmZvQ291bnQpKFVJTlQgKnBDb3VudCk7CisgICAgU1RETUVUSE9EKEdldFR5cGVJbmZvKShVSU5UIGlUeXBlSW5mbywgTENJRCwgSVR5cGVJbmZvICoqcHBJVHlwZUluZm8pOworICAgIFNURE1FVEhPRChHZXRJRHNPZk5hbWVzKShjb25zdCBJSUQmIGlpZCwgT0xFQ0hBUioqIG5hbWVzLCBVSU5UIG4sIExDSUQsIERJU1BJRCAqZGlzcGlkcyk7CisgICAgU1RETUVUSE9EKEludm9rZSkoRElTUElEIG1lbWJlciwgY29uc3QgSUlEJiBpaWQsIExDSUQsIFdPUkQgZmxhZ3MsIERJU1BQQVJBTVMgKmRpc3BwYXJhbXMsIFZBUklBTlQgKnJlc3VsdCwgRVhDRVBJTkZPICpleGNlcGluZm8sIFVJTlQgKmFyZ2Vycik7CisKKyAgICAvLyBJVmltIG1lbWJlcnMKKyAgICBTVERNRVRIT0QoU2VuZEtleXMpKEJTVFIga2V5cyk7CisgICAgU1RETUVUSE9EKEV2YWwpKEJTVFIgZXhwciwgQlNUUiAqcmVzdWx0KTsKKyAgICBTVERNRVRIT0QoU2V0Rm9yZWdyb3VuZCkodm9pZCk7CisgICAgU1RETUVUSE9EKEdldEh3bmQpKFVJTlQqIHJlc3VsdCk7CisKK3ByaXZhdGU6CisgICAgLy8gQ29uc3RydWN0b3IgaXMgcHJpdmF0ZSAtIGNyZWF0ZSB1c2luZyBDVmltOjpDcmVhdGUoKQorICAgIENWaW0oKSA6IHJlZigwKSwgdHlwZWluZm8oMCkge307CisKKyAgICAvLyBSZWZlcmVuY2UgY291bnQKKyAgICB1bnNpZ25lZCBsb25nIHJlZjsKKworICAgIC8vIFRoZSBvYmplY3QncyBUeXBlSW5mbworICAgIElUeXBlSW5mbyAqdHlwZWluZm87Cit9OworCisvKiBJbXBsZW1lbnRhdGlvbgorICogLS0tLS0tLS0tLS0tLS0KKyAqLworCitDVmltICpDVmltOjpDcmVhdGUoaW50KiBwYkRvUmVzdGFydCkKK3sKKyAgICBIUkVTVUxUIGhyOworICAgIENWaW0gKm1lID0gMDsKKyAgICBJVHlwZUxpYiAqdHlwZWxpYiA9IDA7CisgICAgSVR5cGVJbmZvICp0eXBlaW5mbyA9IDA7CisKKyAgICAqcGJEb1Jlc3RhcnQgPSBGQUxTRTsKKworICAgIC8vIENyZWF0ZSB0aGUgb2JqZWN0CisgICAgbWUgPSBuZXcgQ1ZpbSgpOworICAgIGlmIChtZSA9PSBOVUxMKQorICAgIHsKKwlNZXNzYWdlQm94KDAsICJDYW5ub3QgY3JlYXRlIGFwcGxpY2F0aW9uIG9iamVjdCIsICJWaW0gSW5pdGlhbGlzYXRpb24iLCAwKTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvLyBMb2FkIHRoZSB0eXBlIGxpYnJhcnkgZnJvbSB0aGUgcmVnaXN0cnkKKyAgICBociA9IExvYWRSZWdUeXBlTGliKE1ZTElCSUQsIDEsIDAsIDB4MDAsICZ0eXBlbGliKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICB7CisJSEtFWSBoS2V5OworCisJLy8gQ2hlY2sgd2UgY2FuIHdyaXRlIHRvIHRoZSByZWdpc3RyeS4KKwkvLyBSZWdDcmVhdGVLZXlFeCBzdWNjZWVkcyBldmVuIGlmIGtleSBleGlzdHMuIFcuQnJpc2NvZSBXMksgMjAwMjEwMTEKKwlpZiAoUmVnQ3JlYXRlS2V5RXgoSEtFWV9DTEFTU0VTX1JPT1QsIE1ZVklQUk9HSUQsIDAsIE5VTEwsCisJCSAgUkVHX09QVElPTl9OT05fVk9MQVRJTEUsIEtFWV9BTExfQUNDRVNTLCBOVUxMLCAmaEtleSwgTlVMTCkpCisJeworCSAgICBkZWxldGUgbWU7CisJICAgIHJldHVybiBOVUxMOyAvLyBVbmFibGUgdG8gd3JpdGUgdG8gcmVnaXN0cnkuIFF1aWV0bHkgZmFpbC4KKwl9CisJUmVnQ2xvc2VLZXkoaEtleSk7CisKKwlpZiAoTWVzc2FnZUJveCgwLCAiQ2Fubm90IGxvYWQgcmVnaXN0ZXJlZCB0eXBlIGxpYnJhcnkuXG5EbyB5b3Ugd2FudCB0byByZWdpc3RlciBWaW0gbm93PyIsCisJCSAgICAiVmltIEluaXRpYWxpc2F0aW9uIiwgTUJfWUVTTk8gfCBNQl9JQ09OUVVFU1RJT04pICE9IElEWUVTKQorCXsKKwkgICAgZGVsZXRlIG1lOworCSAgICByZXR1cm4gTlVMTDsKKwl9CisKKwlSZWdpc3Rlck1lKEZBTFNFKTsKKworCS8vIExvYWQgdGhlIHR5cGUgbGlicmFyeSBmcm9tIHRoZSByZWdpc3RyeQorCWhyID0gTG9hZFJlZ1R5cGVMaWIoTVlMSUJJRCwgMSwgMCwgMHgwMCwgJnR5cGVsaWIpOworCWlmIChGQUlMRUQoaHIpKQorCXsKKwkgICAgTWVzc2FnZUJveCgwLCAiWW91IG11c3QgcmVzdGFydCBWaW0gaW4gb3JkZXIgZm9yIHRoZSByZWdpc3RyYXRpb24gdG8gdGFrZSBlZmZlY3QuIiwKKwkJCQkJCSAgICAgIlZpbSBJbml0aWFsaXNhdGlvbiIsIDApOworCSAgICAqcGJEb1Jlc3RhcnQgPSBUUlVFOworCSAgICBkZWxldGUgbWU7CisJICAgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisKKyAgICAvLyBHZXQgdGhlIHR5cGUgaW5mbyBvZiB0aGUgdnRhYmxlIGludGVyZmFjZQorICAgIGhyID0gdHlwZWxpYi0+R2V0VHlwZUluZm9PZkd1aWQoTVlJSUQsICZ0eXBlaW5mbyk7CisgICAgdHlwZWxpYi0+UmVsZWFzZSgpOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgeworCU1lc3NhZ2VCb3goMCwgIkNhbm5vdCBnZXQgaW50ZXJmYWNlIHR5cGUgaW5mb3JtYXRpb24iLAorCQkJCQkJICAgICAiVmltIEluaXRpYWxpc2F0aW9uIiwgMCk7CisJZGVsZXRlIG1lOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIC8vIFNhdmUgdGhlIHR5cGUgaW5mb3JtYXRpb24KKyAgICBtZS0+dHlwZWluZm8gPSB0eXBlaW5mbzsKKyAgICByZXR1cm4gbWU7Cit9CisKK0NWaW06On5DVmltKCkKK3sKKyAgICBpZiAodHlwZWluZm8gJiYgdmltX3BhcmVudF9od25kID09IE5VTEwpCisJdHlwZWluZm8tPlJlbGVhc2UoKTsKK30KKworU1RETUVUSE9ESU1QCitDVmltOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCAqKnBwdikKK3sKKyAgICBpZiAoSXNFcXVhbElJRChyaWlkLCBJSURfSVVua25vd24pIHx8IElzRXF1YWxJSUQocmlpZCwgSUlEX0lEaXNwYXRjaCkgfHwgSXNFcXVhbElJRChyaWlkLCBNWUlJRCkpCisgICAgeworCUFkZFJlZigpOworCSpwcHYgPSB0aGlzOworCXJldHVybiBTX09LOworICAgIH0KKworICAgICpwcHYgPSAwOworICAgIHJldHVybiBFX05PSU5URVJGQUNFOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKQorQ1ZpbTo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gKytyZWY7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpCitDVmltOjpSZWxlYXNlKCkKK3sKKyAgICAvLyBEb24ndCBkZWxldGUgdGhlIG9iamVjdCB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLCBhcyB0aGVyZQorICAgIC8vIGlzIG9ubHkgYSBzaW5nbGUgYXBwbGljYXRpb24gb2JqZWN0LCBhbmQgaXRzIGxpZmV0aW1lIGlzIGNvbnRyb2xsZWQgYnkKKyAgICAvLyB0aGUgcnVubmluZyBpbnN0YW5jZSwgbm90IGJ5IGl0cyByZWZlcmVuY2UgY291bnQuCisgICAgaWYgKHJlZiA+IDApCisJLS1yZWY7CisgICAgcmV0dXJuIHJlZjsKK30KKworU1RETUVUSE9ESU1QCitDVmltOjpHZXRUeXBlSW5mb0NvdW50KFVJTlQgKnBDb3VudCkKK3sKKyAgICAqcENvdW50ID0gMTsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QCitDVmltOjpHZXRUeXBlSW5mbyhVSU5UIGlUeXBlSW5mbywgTENJRCwgSVR5cGVJbmZvICoqcHBJVHlwZUluZm8pCit7CisgICAgKnBwSVR5cGVJbmZvID0gMDsKKworICAgIGlmIChpVHlwZUluZm8gIT0gMCkKKwlyZXR1cm4gRElTUF9FX0JBRElOREVYOworCisgICAgdHlwZWluZm8tPkFkZFJlZigpOworICAgICpwcElUeXBlSW5mbyA9IHR5cGVpbmZvOworICAgIHJldHVybiBTX09LOworfQorCitTVERNRVRIT0RJTVAKK0NWaW06OkdldElEc09mTmFtZXMoCisJY29uc3QgSUlEJiBpaWQsCisJT0xFQ0hBUioqIG5hbWVzLAorCVVJTlQgbiwKKwlMQ0lELAorCURJU1BJRCAqZGlzcGlkcykKK3sKKyAgICBpZiAoaWlkICE9IElJRF9OVUxMKQorCXJldHVybiBESVNQX0VfVU5LTk9XTklOVEVSRkFDRTsKKworICAgIHJldHVybiB0eXBlaW5mby0+R2V0SURzT2ZOYW1lcyhuYW1lcywgbiwgZGlzcGlkcyk7Cit9CisKK1NURE1FVEhPRElNUAorQ1ZpbTo6SW52b2tlKAorCURJU1BJRCBtZW1iZXIsCisJY29uc3QgSUlEJiBpaWQsCisJTENJRCwKKwlXT1JEIGZsYWdzLAorCURJU1BQQVJBTVMgKmRpc3BwYXJhbXMsCisJVkFSSUFOVCAqcmVzdWx0LAorCUVYQ0VQSU5GTyAqZXhjZXBpbmZvLAorCVVJTlQgKmFyZ2VycikKK3sKKyAgICBpZiAoaWlkICE9IElJRF9OVUxMKQorCXJldHVybiBESVNQX0VfVU5LTk9XTklOVEVSRkFDRTsKKworICAgIDo6U2V0RXJyb3JJbmZvKDAsIE5VTEwpOworICAgIHJldHVybiB0eXBlaW5mby0+SW52b2tlKHN0YXRpY19jYXN0PElEaXNwYXRjaCo+KHRoaXMpLAorCQkJICAgIG1lbWJlciwgZmxhZ3MsIGRpc3BwYXJhbXMsCisJCQkgICAgcmVzdWx0LCBleGNlcGluZm8sIGFyZ2Vycik7Cit9CisKK1NURE1FVEhPRElNUAorQ1ZpbTo6R2V0SHduZChVSU5UKiByZXN1bHQpCit7CisgICAgKnJlc3VsdCA9IChVSU5UKSBzX2h3bmQ7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUAorQ1ZpbTo6U2V0Rm9yZWdyb3VuZCh2b2lkKQoreworICAgIC8qIE1ha2UgdGhlIFZpbSB3aW5kb3cgY29tZSB0byB0aGUgZm9yZWdyb3VuZCAqLworICAgIGd1aV9tY2hfc2V0X2ZvcmVncm91bmQoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QCitDVmltOjpTZW5kS2V5cyhCU1RSIGtleXMpCit7CisgICAgaW50IGxlbjsKKyAgICBjaGFyICpidWZmZXI7CisgICAgY2hhcl91ICpzdHI7CisgICAgY2hhcl91ICpwdHI7CisKKyAgICAvKiBHZXQgYSBzdWl0YWJsZSBidWZmZXIgKi8KKyAgICBsZW4gPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX0FDUCwgMCwga2V5cywgLTEsIDAsIDAsIDAsIDApOworICAgIGJ1ZmZlciA9IChjaGFyICopYWxsb2MobGVuKzEpOworCisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorCXJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAgbGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9BQ1AsIDAsIGtleXMsIC0xLCBidWZmZXIsIGxlbiwgMCwgMCk7CisKKyAgICBpZiAobGVuID09IDApCisgICAgeworCXZpbV9mcmVlKGJ1ZmZlcik7CisJcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisKKyAgICAvKiBUcmFuc2xhdGUga2V5IGNvZGVzIGxpa2UgPEVzYz4gKi8KKyAgICBzdHIgPSByZXBsYWNlX3Rlcm1jb2RlcygoY2hhcl91ICopYnVmZmVyLCAmcHRyLCBGQUxTRSwgVFJVRSk7CisKKyAgICAvKiBJZiBwdHIgd2FzIHNldCwgdGhlbiBhIG5ldyBidWZmZXIgd2FzIGFsbG9jYXRlZCwKKyAgICAgKiBzbyB3ZSBjYW4gZnJlZSB0aGUgb2xkIG9uZS4KKyAgICAgKi8KKyAgICBpZiAocHRyKQorCXZpbV9mcmVlKChjaGFyX3UgKikoYnVmZmVyKSk7CisKKyAgICAvKiBSZWplY3Qgc3RyaW5ncyB0b28gbG9uZyB0byBmaXQgaW4gdGhlIGlucHV0IGJ1ZmZlci4gQWxsb3cgMTAgYnl0ZXMKKyAgICAgKiBzcGFjZSB0byBjb3ZlciBmb3IgdGhlIChyZW1vdGUpIHBvc3NpYmlsaXR5IHRoYXQgY2hhcmFjdGVycyBtYXkgZW50ZXIKKyAgICAgKiB0aGUgaW5wdXQgYnVmZmVyIGJldHdlZW4gbm93IGFuZCB3aGVuIHRoZSBXTV9PTEUgbWVzc2FnZSBpcyBhY3R1YWxseQorICAgICAqIHByb2Nlc3NlZC4gSWYgbW9yZSB0aGF0IDEwIGNoYXJhY3RlcnMgZW50ZXIgdGhlIGlucHV0IGJ1ZmZlciBpbiB0aGF0CisgICAgICogdGltZSwgdGhlIFdNX09MRSBwcm9jZXNzaW5nIHdpbGwgc2ltcGx5IGZhaWwgdG8gaW5zZXJ0IHRoZSBjaGFyYWN0ZXJzLgorICAgICAqLworICAgIGlmICgoaW50KShTVFJMRU4oc3RyKSkgPiAodmltX2ZyZWVfaW5faW5wdXRfYnVmKCkgLSAxMCkpCisgICAgeworCXZpbV9mcmVlKHN0cik7CisJcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisKKyAgICAvKiBQYXNzIHRoZSBzdHJpbmcgdG8gdGhlIG1haW4gaW5wdXQgbG9vcC4gVGhlIG1lbW9yeSB3aWxsIGJlIGZyZWVkIHdoZW4KKyAgICAgKiB0aGUgbWVzc2FnZSBpcyBwcm9jZXNzZWQuCisgICAgICovCisgICAgUG9zdE1lc3NhZ2UoTlVMTCwgV01fT0xFLCAwLCAoTFBBUkFNKXN0cik7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QCitDVmltOjpFdmFsKEJTVFIgZXhwciwgQlNUUiAqcmVzdWx0KQoreworI2lmZGVmIEZFQVRfRVZBTAorICAgIGludCBsZW47CisgICAgY2hhciAqYnVmZmVyOworICAgIGNoYXIgKnN0cjsKKyAgICB3Y2hhcl90ICp3X2J1ZmZlcjsKKworICAgIC8qIEdldCBhIHN1aXRhYmxlIGJ1ZmZlciAqLworICAgIGxlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfQUNQLCAwLCBleHByLCAtMSwgMCwgMCwgMCwgMCk7CisgICAgaWYgKGxlbiA9PSAwKQorCXJldHVybiBFX0lOVkFMSURBUkc7CisKKyAgICBidWZmZXIgPSAoY2hhciAqKWFsbG9jKCh1bnNpZ25lZClsZW4pOworCisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorCXJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAgLyogQ29udmVydCB0aGUgKHdpZGUgY2hhcmFjdGVyKSBleHByZXNzaW9uIHRvIGFuIEFTQ0lJIHN0cmluZyAqLworICAgIGxlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfQUNQLCAwLCBleHByLCAtMSwgYnVmZmVyLCBsZW4sIDAsIDApOworICAgIGlmIChsZW4gPT0gMCkKKwlyZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAgLyogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gKi8KKyAgICArK2Vtc2dfc2tpcDsKKyAgICBzdHIgPSAoY2hhciAqKWV2YWxfdG9fc3RyaW5nKChjaGFyX3UgKilidWZmZXIsIE5VTEwpOworICAgIC0tZW1zZ19za2lwOworICAgIHZpbV9mcmVlKGJ1ZmZlcik7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorCXJldHVybiBFX0ZBSUw7CisKKyAgICAvKiBDb252ZXJ0IHRoZSByZXN1bHQgdG8gd2lkZSBjaGFyYWN0ZXJzICovCisgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcl9hbGxvYyhDUF9BQ1AsIDAsIHN0ciwgLTEsICZ3X2J1ZmZlciwgJmxlbik7CisgICAgdmltX2ZyZWUoc3RyKTsKKyAgICBpZiAod19idWZmZXIgPT0gTlVMTCkKKwlyZXR1cm4gRV9PVVRPRk1FTU9SWTsKKworICAgIGlmIChsZW4gPT0gMCkKKyAgICB7CisJdmltX2ZyZWUod19idWZmZXIpOworCXJldHVybiBFX0ZBSUw7CisgICAgfQorCisgICAgLyogU3RvcmUgdGhlIHJlc3VsdCAqLworICAgICpyZXN1bHQgPSBTeXNBbGxvY1N0cmluZyh3X2J1ZmZlcik7CisgICAgdmltX2ZyZWUod19idWZmZXIpOworCisgICAgcmV0dXJuIFNfT0s7CisjZWxzZQorICAgIHJldHVybiBFX05PVElNUEw7CisjZW5kaWYKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgMy4gVGhlIGNsYXNzIGZhY3RvcnkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEZWZpbml0aW9uCisgKiAtLS0tLS0tLS0tCisgKi8KKworY2xhc3MgQ1ZpbUNGIDogcHVibGljIElDbGFzc0ZhY3RvcnkKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ1ZpbUNGICpDcmVhdGUoKTsKKworICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFjZSkoUkVGSUlEIHJpaWQsIHZvaWQgKiogcHB2KTsKKyAgICBTVERNRVRIT0RfKHVuc2lnbmVkIGxvbmcsIEFkZFJlZikodm9pZCk7CisgICAgU1RETUVUSE9EXyh1bnNpZ25lZCBsb25nLCBSZWxlYXNlKSh2b2lkKTsKKyAgICBTVERNRVRIT0QoQ3JlYXRlSW5zdGFuY2UpKElVbmtub3duICpwdW5rT3V0ZXIsIFJFRklJRCByaWlkLCB2b2lkICoqIHBwdik7CisgICAgU1RETUVUSE9EKExvY2tTZXJ2ZXIpKEJPT0wgbG9jayk7CisKK3ByaXZhdGU6CisgICAgLy8gQ29uc3RydWN0b3IgaXMgcHJpdmF0ZSAtIGNyZWF0ZSB2aWEgQ3JlYXRlKCkKKyAgICBDVmltQ0YoKSA6IHJlZigwKSB7fTsKKworICAgIC8vIFJlZmVyZW5jZSBjb3VudAorICAgIHVuc2lnbmVkIGxvbmcgcmVmOworfTsKKworLyogSW1wbGVtZW50YXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tCisgKi8KKworQ1ZpbUNGICpDVmltQ0Y6OkNyZWF0ZSgpCit7CisgICAgQ1ZpbUNGICptZSA9IG5ldyBDVmltQ0YoKTsKKworICAgIGlmIChtZSA9PSBOVUxMKQorCU1lc3NhZ2VCb3goMCwgIkNhbm5vdCBjcmVhdGUgY2xhc3MgZmFjdG9yeSIsICJWaW0gSW5pdGlhbGlzYXRpb24iLCAwKTsKKworICAgIHJldHVybiBtZTsKK30KKworU1RETUVUSE9ESU1QCitDVmltQ0Y6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkICoqcHB2KQoreworICAgIGlmIChJc0VxdWFsSUlEKHJpaWQsIElJRF9JVW5rbm93bikgfHwgSXNFcXVhbElJRChyaWlkLCBJSURfSUNsYXNzRmFjdG9yeSkpCisgICAgeworCUFkZFJlZigpOworCSpwcHYgPSB0aGlzOworCXJldHVybiBTX09LOworICAgIH0KKworICAgICpwcHYgPSAwOworICAgIHJldHVybiBFX05PSU5URVJGQUNFOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKQorQ1ZpbUNGOjpBZGRSZWYoKQoreworICAgIHJldHVybiArK3JlZjsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykKK0NWaW1DRjo6UmVsZWFzZSgpCit7CisgICAgLy8gRG9uJ3QgZGVsZXRlIHRoZSBvYmplY3Qgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVybywgYXMgdGhlcmUKKyAgICAvLyBpcyBvbmx5IGEgc2luZ2xlIGFwcGxpY2F0aW9uIG9iamVjdCwgYW5kIGl0cyBsaWZldGltZSBpcyBjb250cm9sbGVkIGJ5CisgICAgLy8gdGhlIHJ1bm5pbmcgaW5zdGFuY2UsIG5vdCBieSBpdHMgcmVmZXJlbmNlIGNvdW50LgorICAgIGlmIChyZWYgPiAwKQorCS0tcmVmOworICAgIHJldHVybiByZWY7Cit9CisKK1NURE1FVEhPRElNUAorQ1ZpbUNGOjpDcmVhdGVJbnN0YW5jZShJVW5rbm93biAqcHVua091dGVyLCBSRUZJSUQgcmlpZCwgdm9pZCAqKnBwdikKK3sKKyAgICByZXR1cm4gYXBwLT5RdWVyeUludGVyZmFjZShyaWlkLCBwcHYpOworfQorCitTVERNRVRIT0RJTVAKK0NWaW1DRjo6TG9ja1NlcnZlcihCT09MIGxvY2spCit7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIDQuIFJlZ2lzdHJ5IG1hbmlwdWxhdGlvbiBjb2RlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gSW50ZXJuYWwgdXNlIG9ubHkKK3N0YXRpYyB2b2lkIFNldEtleUFuZFZhbHVlKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIHN1YmtleSwgY29uc3QgY2hhciogdmFsdWUpOworc3RhdGljIHZvaWQgR1VJRHRvY2hhcihjb25zdCBHVUlEJiBndWlkLCBjaGFyKiBHVUlELCBpbnQgbGVuZ3RoKTsKK3N0YXRpYyB2b2lkIFJlY3Vyc2l2ZURlbGV0ZUtleShIS0VZIGhLZXlQYXJlbnQsIGNvbnN0IGNoYXIqIGNoaWxkKTsKK3N0YXRpYyBjb25zdCBpbnQgR1VJRF9TVFJJTkdfU0laRSA9IDM5OworCisvLyBSZWdpc3RlciB0aGUgY29tcG9uZW50IGluIHRoZSByZWdpc3RyeQorLy8gV2hlbiAic2lsZW50IiBpcyBUUlVFIGRvbid0IGdpdmUgYW55IG1lc3NhZ2VzLgorCitleHRlcm4gIkMiIHZvaWQgUmVnaXN0ZXJNZShpbnQgc2lsZW50KQoreworICAgIEJPT0wgb2sgPSBUUlVFOworCisgICAgLy8gR2V0IHRoZSBhcHBsaWNhdGlvbiBzdGFydHVwIGNvbW1hbmQKKyAgICBjaGFyIG1vZHVsZVtNQVhfUEFUSF07CisKKyAgICA6OkdldE1vZHVsZUZpbGVOYW1lKE5VTEwsIG1vZHVsZSwgTUFYX1BBVEgpOworCisgICAgLy8gVW5yZWdpc3RlciBmaXJzdCAocXVpZXRseSkKKyAgICBVbnJlZ2lzdGVyTWUoRkFMU0UpOworCisgICAgLy8gQ29udmVydCB0aGUgQ0xTSUQgaW50byBhIGNoYXIKKyAgICBjaGFyIGNsc2lkW0dVSURfU1RSSU5HX1NJWkVdOworICAgIEdVSUR0b2NoYXIoTVlDTFNJRCwgY2xzaWQsIHNpemVvZihjbHNpZCkpOworCisgICAgLy8gQ29udmVydCB0aGUgTElCSUQgaW50byBhIGNoYXIKKyAgICBjaGFyIGxpYmlkW0dVSURfU1RSSU5HX1NJWkVdOworICAgIEdVSUR0b2NoYXIoTVlMSUJJRCwgbGliaWQsIHNpemVvZihsaWJpZCkpOworCisgICAgLy8gQnVpbGQgdGhlIGtleSBDTFNJRFxcey4uLn0KKyAgICBjaGFyIEtleVtNQVhfQ0xTSURfTEVOXTsKKyAgICBzdHJjcHkoS2V5LCAiQ0xTSURcXCIpOworICAgIHN0cmNhdChLZXksIGNsc2lkKTsKKworICAgIC8vIEFkZCB0aGUgQ0xTSUQgdG8gdGhlIHJlZ2lzdHJ5CisgICAgU2V0S2V5QW5kVmFsdWUoS2V5LCBOVUxMLCBNWU5BTUUpOworICAgIFNldEtleUFuZFZhbHVlKEtleSwgIkxvY2FsU2VydmVyMzIiLCBtb2R1bGUpOworICAgIFNldEtleUFuZFZhbHVlKEtleSwgIlByb2dJRCIsIE1ZUFJPR0lEKTsKKyAgICBTZXRLZXlBbmRWYWx1ZShLZXksICJWZXJzaW9uSW5kZXBlbmRlbnRQcm9nSUQiLCBNWVZJUFJPR0lEKTsKKyAgICBTZXRLZXlBbmRWYWx1ZShLZXksICJUeXBlTGliIiwgbGliaWQpOworCisgICAgLy8gQWRkIHRoZSB2ZXJzaW9uLWluZGVwZW5kZW50IFByb2dJRCBzdWJrZXkgdW5kZXIgSEtFWV9DTEFTU0VTX1JPT1QKKyAgICBTZXRLZXlBbmRWYWx1ZShNWVZJUFJPR0lELCBOVUxMLCBNWU5BTUUpOworICAgIFNldEtleUFuZFZhbHVlKE1ZVklQUk9HSUQsICJDTFNJRCIsIGNsc2lkKTsKKyAgICBTZXRLZXlBbmRWYWx1ZShNWVZJUFJPR0lELCAiQ3VyVmVyIiwgTVlQUk9HSUQpOworCisgICAgLy8gQWRkIHRoZSB2ZXJzaW9uZWQgUHJvZ0lEIHN1YmtleSB1bmRlciBIS0VZX0NMQVNTRVNfUk9PVAorICAgIFNldEtleUFuZFZhbHVlKE1ZUFJPR0lELCBOVUxMLCBNWU5BTUUpOworICAgIFNldEtleUFuZFZhbHVlKE1ZUFJPR0lELCAiQ0xTSUQiLCBjbHNpZCk7CisKKyAgICB3Y2hhcl90IHdfbW9kdWxlW01BWF9QQVRIXTsKKyAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX0FDUCwgMCwgbW9kdWxlLCAtMSwgd19tb2R1bGUsIE1BWF9QQVRIKTsKKworICAgIElUeXBlTGliICp0eXBlbGliID0gTlVMTDsKKyAgICBpZiAoTG9hZFR5cGVMaWIod19tb2R1bGUsICZ0eXBlbGliKSAhPSBTX09LKQorICAgIHsKKwlpZiAoIXNpbGVudCkKKwkgICAgTWVzc2FnZUJveCgwLCAiQ2Fubm90IGxvYWQgdHlwZSBsaWJyYXJ5IHRvIHJlZ2lzdGVyIiwKKwkJCQkJCSAgICAgICAiVmltIFJlZ2lzdHJhdGlvbiIsIDApOworCW9rID0gRkFMU0U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKFJlZ2lzdGVyVHlwZUxpYih0eXBlbGliLCB3X21vZHVsZSwgTlVMTCkgIT0gU19PSykKKwl7CisJICAgIGlmICghc2lsZW50KQorCQlNZXNzYWdlQm94KDAsICJDYW5ub3QgcmVnaXN0ZXIgdHlwZSBsaWJyYXJ5IiwKKwkJCQkJCSAgICAgICAiVmltIFJlZ2lzdHJhdGlvbiIsIDApOworCSAgICBvayA9IEZBTFNFOworCX0KKwl0eXBlbGliLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG9rICYmICFzaWxlbnQpCisJTWVzc2FnZUJveCgwLCAiUmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHkiLCAiVmltIiwgMCk7Cit9CisKKy8vIFJlbW92ZSB0aGUgY29tcG9uZW50IGZyb20gdGhlIHJlZ2lzdHJ5CisvLworLy8gTm90ZTogVGhlcmUgaXMgbGl0dGxlIGVycm9yIGNoZWNraW5nIGluIHRoaXMgY29kZSwgdG8gYWxsb3cgaW5jb21wbGV0ZQorLy8gb3IgZmFpbGVkIHJlZ2lzdHJhdGlvbnMgdG8gYmUgdW5kb25lLgorZXh0ZXJuICJDIiB2b2lkIFVucmVnaXN0ZXJNZShpbnQgYk5vdGlmeVVzZXIpCit7CisgICAgLy8gVW5yZWdpc3RlciB0aGUgdHlwZSBsaWJyYXJ5CisgICAgSVR5cGVMaWIgKnR5cGVsaWI7CisgICAgaWYgKFNVQ0NFRURFRChMb2FkUmVnVHlwZUxpYihNWUxJQklELCBNQUpPUlZFUiwgTUlOT1JWRVIsIExPQ0FMRSwgJnR5cGVsaWIpKSkKKyAgICB7CisJVExJQkFUVFIgKnRsYTsKKwlpZiAoU1VDQ0VFREVEKHR5cGVsaWItPkdldExpYkF0dHIoJnRsYSkpKQorCXsKKwkgICAgVW5SZWdpc3RlclR5cGVMaWIodGxhLT5ndWlkLCB0bGEtPndNYWpvclZlck51bSwgdGxhLT53TWlub3JWZXJOdW0sCisJCQkgICAgICB0bGEtPmxjaWQsIHRsYS0+c3lza2luZCk7CisJICAgIHR5cGVsaWItPlJlbGVhc2VUTGliQXR0cih0bGEpOworCX0KKwl0eXBlbGliLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgLy8gQ29udmVydCB0aGUgQ0xTSUQgaW50byBhIGNoYXIKKyAgICBjaGFyIGNsc2lkW0dVSURfU1RSSU5HX1NJWkVdOworICAgIEdVSUR0b2NoYXIoTVlDTFNJRCwgY2xzaWQsIHNpemVvZihjbHNpZCkpOworCisgICAgLy8gQnVpbGQgdGhlIGtleSBDTFNJRFxcey4uLn0KKyAgICBjaGFyIEtleVtNQVhfQ0xTSURfTEVOXTsKKyAgICBzdHJjcHkoS2V5LCAiQ0xTSURcXCIpOworICAgIHN0cmNhdChLZXksIGNsc2lkKTsKKworICAgIC8vIERlbGV0ZSB0aGUgQ0xTSUQgS2V5IC0gQ0xTSURcey4uLn0KKyAgICBSZWN1cnNpdmVEZWxldGVLZXkoSEtFWV9DTEFTU0VTX1JPT1QsIEtleSk7CisKKyAgICAvLyBEZWxldGUgdGhlIHZlcnNpb24taW5kZXBlbmRlbnQgUHJvZ0lEIEtleQorICAgIFJlY3Vyc2l2ZURlbGV0ZUtleShIS0VZX0NMQVNTRVNfUk9PVCwgTVlWSVBST0dJRCk7CisKKyAgICAvLyBEZWxldGUgdGhlIFByb2dJRCBrZXkKKyAgICBSZWN1cnNpdmVEZWxldGVLZXkoSEtFWV9DTEFTU0VTX1JPT1QsIE1ZUFJPR0lEKTsKKworICAgIGlmIChiTm90aWZ5VXNlcikKKwlNZXNzYWdlQm94KDAsICJVbnJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5IiwgIlZpbSIsIDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gQ29udmVydCBhIEdVSUQgdG8gYSBjaGFyIHN0cmluZworc3RhdGljIHZvaWQgR1VJRHRvY2hhcihjb25zdCBHVUlEJiBndWlkLCBjaGFyKiBHVUlELCBpbnQgbGVuZ3RoKQoreworICAgIC8vIEdldCB3aWRlIHN0cmluZyB2ZXJzaW9uCisgICAgTFBPTEVTVFIgd0dVSUQgPSBOVUxMOworICAgIFN0cmluZ0Zyb21DTFNJRChndWlkLCAmd0dVSUQpOworCisgICAgLy8gQ292ZXJ0IGZyb20gd2lkZSBjaGFyYWN0ZXJzIHRvIG5vbi13aWRlCisgICAgd2NzdG9tYnMoR1VJRCwgd0dVSUQsIGxlbmd0aCk7CisKKyAgICAvLyBGcmVlIG1lbW9yeQorICAgIENvVGFza01lbUZyZWUod0dVSUQpOworfQorCisvLyBEZWxldGUgYSBrZXkgYW5kIGFsbCBvZiBpdHMgZGVzY2VuZGVudHMKK3N0YXRpYyB2b2lkIFJlY3Vyc2l2ZURlbGV0ZUtleShIS0VZIGhLZXlQYXJlbnQsIGNvbnN0IGNoYXIqIGNoaWxkKQoreworICAgIC8vIE9wZW4gdGhlIGNoaWxkCisgICAgSEtFWSBoS2V5Q2hpbGQ7CisgICAgTE9ORyByZXN1bHQgPSBSZWdPcGVuS2V5RXgoaEtleVBhcmVudCwgY2hpbGQsIDAsIEtFWV9BTExfQUNDRVNTLCAmaEtleUNoaWxkKTsKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisJcmV0dXJuOworCisgICAgLy8gRW51bWVyYXRlIGFsbCBvZiB0aGUgZGVjZW5kZW50cyBvZiB0aGlzIGNoaWxkCisgICAgRklMRVRJTUUgdGltZTsKKyAgICBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAgICBEV09SRCBzaXplID0gMTAyNDsKKworICAgIHdoaWxlIChSZWdFbnVtS2V5RXgoaEtleUNoaWxkLCAwLCBidWZmZXIsICZzaXplLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgJnRpbWUpID09IFNfT0spCisgICAgeworCS8vIERlbGV0ZSB0aGUgZGVjZW5kZW50cyBvZiB0aGlzIGNoaWxkCisJUmVjdXJzaXZlRGVsZXRlS2V5KGhLZXlDaGlsZCwgYnVmZmVyKTsKKwlzaXplID0gMjU2OworICAgIH0KKworICAgIC8vIENsb3NlIHRoZSBjaGlsZAorICAgIFJlZ0Nsb3NlS2V5KGhLZXlDaGlsZCk7CisKKyAgICAvLyBEZWxldGUgdGhpcyBjaGlsZAorICAgIFJlZ0RlbGV0ZUtleShoS2V5UGFyZW50LCBjaGlsZCk7Cit9CisKKy8vIENyZWF0ZSBhIGtleSBhbmQgc2V0IGl0cyB2YWx1ZQorc3RhdGljIHZvaWQgU2V0S2V5QW5kVmFsdWUoY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiBzdWJrZXksIGNvbnN0IGNoYXIqIHZhbHVlKQoreworICAgIEhLRVkgaEtleTsKKyAgICBjaGFyIGJ1ZmZlclsxMDI0XTsKKworICAgIHN0cmNweShidWZmZXIsIGtleSk7CisKKyAgICAvLyBBZGQgc3Via2V5IG5hbWUgdG8gYnVmZmVyLgorICAgIGlmIChzdWJrZXkpCisgICAgeworCXN0cmNhdChidWZmZXIsICJcXCIpOworCXN0cmNhdChidWZmZXIsIHN1YmtleSk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGFuZCBvcGVuIGtleSBhbmQgc3Via2V5LgorICAgIGxvbmcgcmVzdWx0ID0gUmVnQ3JlYXRlS2V5RXgoSEtFWV9DTEFTU0VTX1JPT1QsCisJCQkJIGJ1ZmZlciwKKwkJCQkgMCwgTlVMTCwgUkVHX09QVElPTl9OT05fVk9MQVRJTEUsCisJCQkJIEtFWV9BTExfQUNDRVNTLCBOVUxMLAorCQkJCSAmaEtleSwgTlVMTCk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorCXJldHVybjsKKworICAgIC8vIFNldCB0aGUgdmFsdWUKKyAgICBpZiAodmFsdWUpCisJUmVnU2V0VmFsdWVFeChoS2V5LCBOVUxMLCAwLCBSRUdfU1osIChCWVRFICopdmFsdWUsCisJCSAgICAgIChEV09SRClTVFJMRU4odmFsdWUpKzEpOworCisgICAgUmVnQ2xvc2VLZXkoaEtleSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIDUuIE9MRSBJbml0aWFsaXNhdGlvbiBhbmQgc2h1dGRvd24gcHJvY2Vzc2luZworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gIkMiIHZvaWQgSW5pdE9MRShpbnQqIHBiRG9SZXN0YXJ0KQoreworICAgIEhSRVNVTFQgaHI7CisKKyAgICAqcGJEb1Jlc3RhcnQgPSBGQUxTRTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIE9MRSBsaWJyYXJpZXMKKyAgICBociA9IE9sZUluaXRpYWxpemUoTlVMTCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgeworCU1lc3NhZ2VCb3goMCwgIkNhbm5vdCBpbml0aWFsaXNlIE9MRSIsICJWaW0gSW5pdGlhbGlzYXRpb24iLCAwKTsKKwlnb3RvIGVycm9yMDsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgdGhlIGFwcGxpY2F0aW9uIG9iamVjdAorICAgIGFwcCA9IENWaW06OkNyZWF0ZShwYkRvUmVzdGFydCk7CisgICAgaWYgKGFwcCA9PSBOVUxMKQorCWdvdG8gZXJyb3IxOworCisgICAgLy8gQ3JlYXRlIHRoZSBjbGFzcyBmYWN0b3J5CisgICAgY2YgPSBDVmltQ0Y6OkNyZWF0ZSgpOworICAgIGlmIChjZiA9PSBOVUxMKQorCWdvdG8gZXJyb3IxOworCisgICAgLy8gUmVnaXN0ZXIgdGhlIGNsYXNzIGZhY3RvcnkKKyAgICBociA9IENvUmVnaXN0ZXJDbGFzc09iamVjdCgKKwlNWUNMU0lELAorCWNmLAorCUNMU0NUWF9MT0NBTF9TRVJWRVIsCisJUkVHQ0xTX01VTFRJUExFVVNFLAorCSZjZl9pZCk7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICB7CisJTWVzc2FnZUJveCgwLCAiQ2Fubm90IHJlZ2lzdGVyIGNsYXNzIGZhY3RvcnkiLCAiVmltIEluaXRpYWxpc2F0aW9uIiwgMCk7CisJZ290byBlcnJvcjE7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgdGhlIGFwcGxpY2F0aW9uIG9iamVjdCBhcyBhY3RpdmUKKyAgICBociA9IFJlZ2lzdGVyQWN0aXZlT2JqZWN0KAorCWFwcCwKKwlNWUNMU0lELAorCU5VTEwsCisJJmFwcF9pZCk7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICB7CisJTWVzc2FnZUJveCgwLCAiQ2Fubm90IHJlZ2lzdGVyIGFwcGxpY2F0aW9uIG9iamVjdCIsICJWaW0gSW5pdGlhbGlzYXRpb24iLCAwKTsKKwlnb3RvIGVycm9yMTsKKyAgICB9CisKKyAgICByZXR1cm47CisKKyAgICAvLyBFcnJvcnM6IHRpZHkgdXAgYXMgbXVjaCBhcyBuZWVkZWQgYW5kIHJldHVybgorZXJyb3IxOgorICAgIFVuaW5pdE9MRSgpOworZXJyb3IwOgorICAgIHJldHVybjsKK30KKworZXh0ZXJuICJDIiB2b2lkIFVuaW5pdE9MRSgpCit7CisgICAgLy8gVW5yZWdpc3RlciB0aGUgYXBwbGljYXRpb24gb2JqZWN0CisgICAgaWYgKGFwcF9pZCkKKyAgICB7CisJUmV2b2tlQWN0aXZlT2JqZWN0KGFwcF9pZCwgTlVMTCk7CisJYXBwX2lkID0gMDsKKyAgICB9CisKKyAgICAvLyBVbnJlZ2lzdGVyIHRoZSBjbGFzcyBmYWN0b3J5CisgICAgaWYgKGNmX2lkKQorICAgIHsKKwlDb1Jldm9rZUNsYXNzT2JqZWN0KGNmX2lkKTsKKwljZl9pZCA9IDA7CisgICAgfQorCisgICAgLy8gU2h1dCBkb3duIHRoZSBPTEUgbGlicmFyaWVzCisgICAgT2xlVW5pbml0aWFsaXplKCk7CisKKyAgICAvLyBEZWxldGUgdGhlIGFwcGxpY2F0aW9uIG9iamVjdAorICAgIGlmIChhcHApCisgICAgeworCWRlbGV0ZSBhcHA7CisJYXBwID0gTlVMTDsKKyAgICB9CisKKyAgICAvLyBEZWxldGUgdGhlIGNsYXNzIGZhY3RvcnkKKyAgICBpZiAoY2YpCisgICAgeworCWRlbGV0ZSBjZjsKKwljZiA9IE5VTEw7CisgICAgfQorfQorI2VuZGlmIC8qIEZFQVRfT0xFICovCmRpZmYgLS1naXQgYS9zcmMvaWZfb2xlLmggYi9zcmMvaWZfb2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxOTFiOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pZl9vbGUuaApAQCAtMCwwICsxLDI4OSBAQAorLyogdGhpcyBBTFdBWVMgR0VORVJBVEVEIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgaW50ZXJmYWNlcyAqLworCisKKy8qIEZpbGUgY3JlYXRlZCBieSBNSURMIGNvbXBpbGVyIHZlcnNpb24gMy4wMS43NSAqLworLyogYXQgV2VkIEp1biAwNiAxODoyMDozNyAyMDAxCisgKi8KKy8qIENvbXBpbGVyIHNldHRpbmdzIGZvciAuXGlmX29sZS5pZGw6CisgICAgT3MgKE9wdExldj1zKSwgVzEsIFpwOCwgZW52PVdpbjMyLCBtc19leHQsIGNfZXh0CisgICAgZXJyb3IgY2hlY2tzOiBub25lCisqLworLy9AQE1JRExfRklMRV9IRUFESU5HKCAgKQorI2luY2x1ZGUgInJwYy5oIgorI2luY2x1ZGUgInJwY25kci5oIgorI2lmbmRlZiBDT01fTk9fV0lORE9XU19ICisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgIm9sZTIuaCIKKyNlbmRpZiAvKkNPTV9OT19XSU5ET1dTX0gqLworCisjaWZuZGVmIF9faWZfb2xlX2hfXworI2RlZmluZSBfX2lmX29sZV9oX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMieworI2VuZGlmCisKKy8qIEZvcndhcmQgRGVjbGFyYXRpb25zICovCisKKyNpZm5kZWYgX19JVmltX0ZXRF9ERUZJTkVEX18KKyNkZWZpbmUgX19JVmltX0ZXRF9ERUZJTkVEX18KK3R5cGVkZWYgaW50ZXJmYWNlIElWaW0gSVZpbTsKKyNlbmRpZgkvKiBfX0lWaW1fRldEX0RFRklORURfXyAqLworCisKKyNpZm5kZWYgX19WaW1fRldEX0RFRklORURfXworI2RlZmluZSBfX1ZpbV9GV0RfREVGSU5FRF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cwordHlwZWRlZiBjbGFzcyBWaW0gVmltOworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IFZpbSBWaW07CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmCS8qIF9fVmltX0ZXRF9ERUZJTkVEX18gKi8KKworCisvKiBoZWFkZXIgZmlsZXMgZm9yIGltcG9ydGVkIGZpbGVzICovCisjaW5jbHVkZSAib2FpZGwuaCIKKwordm9pZCBfX1JQQ19GQVIgKiBfX1JQQ19VU0VSIE1JRExfdXNlcl9hbGxvY2F0ZShzaXplX3QpOwordm9pZCBfX1JQQ19VU0VSIE1JRExfdXNlcl9mcmVlKCB2b2lkIF9fUlBDX0ZBUiAqICk7CisKKyNpZm5kZWYgX19JVmltX0lOVEVSRkFDRV9ERUZJTkVEX18KKyNkZWZpbmUgX19JVmltX0lOVEVSRkFDRV9ERUZJTkVEX18KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYXRlZCBoZWFkZXIgZm9yIGludGVyZmFjZTogSVZpbQorICogYXQgV2VkIEp1biAwNiAxODoyMDozNyAyMDAxCisgKiB1c2luZyBNSURMIDMuMDEuNzUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogW29sZWF1dG9tYXRpb25dW2R1YWxdW3VuaXF1ZV1baGVscHN0cmluZ11bdXVpZF1bb2JqZWN0XSAqLworCisKKworRVhURVJOX0MgY29uc3QgSUlEIElJRF9JVmltOworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgIWRlZmluZWQoQ0lOVEVSRkFDRSkKKworICAgIGludGVyZmFjZSBERUNMU1BFQ19VVUlEKCIwRjBCRkFFMi00QzkwLTExZDEtODJENy0wMDA0QUMzNjg1MTkiKQorICAgIElWaW0gOiBwdWJsaWMgSURpc3BhdGNoCisgICAgeworICAgIHB1YmxpYzoKKwl2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2VuZEtleXMoCisJICAgIC8qIFtpbl0gKi8gQlNUUiBrZXlzKSA9IDA7CisKKwl2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRXZhbCgKKwkgICAgLyogW2luXSAqLyBCU1RSIGV4cHIsCisJICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiBfX1JQQ19GQVIgKnJlc3VsdCkgPSAwOworCisJdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldEZvcmVncm91bmQoIHZvaWQpID0gMDsKKworCXZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRId25kKAorCSAgICAvKiBbcmV0dmFsXVtvdXRdICovIFVJTlQgX19SUENfRkFSICpyZXN1bHQpID0gMDsKKworICAgIH07CisKKyNlbHNlCS8qIEMgc3R5bGUgaW50ZXJmYWNlICovCisKKyAgICB0eXBlZGVmIHN0cnVjdCBJVmltVnRibAorICAgIHsKKwlCRUdJTl9JTlRFUkZBQ0UKKworCUhSRVNVTFQgKCBTVERNRVRIT0RDQUxMVFlQRSBfX1JQQ19GQVIgKlF1ZXJ5SW50ZXJmYWNlICkoCisJICAgIElWaW0gX19SUENfRkFSICogVGhpcywKKwkgICAgLyogW2luXSAqLyBSRUZJSUQgcmlpZCwKKwkgICAgLyogW2lpZF9pc11bb3V0XSAqLyB2b2lkIF9fUlBDX0ZBUiAqX19SUENfRkFSICpwcHZPYmplY3QpOworCisJVUxPTkcgKCBTVERNRVRIT0RDQUxMVFlQRSBfX1JQQ19GQVIgKkFkZFJlZiApKAorCSAgICBJVmltIF9fUlBDX0ZBUiAqIFRoaXMpOworCisJVUxPTkcgKCBTVERNRVRIT0RDQUxMVFlQRSBfX1JQQ19GQVIgKlJlbGVhc2UgKSgKKwkgICAgSVZpbSBfX1JQQ19GQVIgKiBUaGlzKTsKKworCUhSRVNVTFQgKCBTVERNRVRIT0RDQUxMVFlQRSBfX1JQQ19GQVIgKkdldFR5cGVJbmZvQ291bnQgKSgKKwkgICAgSVZpbSBfX1JQQ19GQVIgKiBUaGlzLAorCSAgICAvKiBbb3V0XSAqLyBVSU5UIF9fUlBDX0ZBUiAqcGN0aW5mbyk7CisKKwlIUkVTVUxUICggU1RETUVUSE9EQ0FMTFRZUEUgX19SUENfRkFSICpHZXRUeXBlSW5mbyApKAorCSAgICBJVmltIF9fUlBDX0ZBUiAqIFRoaXMsCisJICAgIC8qIFtpbl0gKi8gVUlOVCBpVEluZm8sCisJICAgIC8qIFtpbl0gKi8gTENJRCBsY2lkLAorCSAgICAvKiBbb3V0XSAqLyBJVHlwZUluZm8gX19SUENfRkFSICpfX1JQQ19GQVIgKnBwVEluZm8pOworCisJSFJFU1VMVCAoIFNURE1FVEhPRENBTExUWVBFIF9fUlBDX0ZBUiAqR2V0SURzT2ZOYW1lcyApKAorCSAgICBJVmltIF9fUlBDX0ZBUiAqIFRoaXMsCisJICAgIC8qIFtpbl0gKi8gUkVGSUlEIHJpaWQsCisJICAgIC8qIFtzaXplX2lzXVtpbl0gKi8gTFBPTEVTVFIgX19SUENfRkFSICpyZ3N6TmFtZXMsCisJICAgIC8qIFtpbl0gKi8gVUlOVCBjTmFtZXMsCisJICAgIC8qIFtpbl0gKi8gTENJRCBsY2lkLAorCSAgICAvKiBbc2l6ZV9pc11bb3V0XSAqLyBESVNQSUQgX19SUENfRkFSICpyZ0Rpc3BJZCk7CisKKwkvKiBbbG9jYWxdICovIEhSRVNVTFQgKCBTVERNRVRIT0RDQUxMVFlQRSBfX1JQQ19GQVIgKkludm9rZSApKAorCSAgICBJVmltIF9fUlBDX0ZBUiAqIFRoaXMsCisJICAgIC8qIFtpbl0gKi8gRElTUElEIGRpc3BJZE1lbWJlciwKKwkgICAgLyogW2luXSAqLyBSRUZJSUQgcmlpZCwKKwkgICAgLyogW2luXSAqLyBMQ0lEIGxjaWQsCisJICAgIC8qIFtpbl0gKi8gV09SRCB3RmxhZ3MsCisJICAgIC8qIFtvdXRdW2luXSAqLyBESVNQUEFSQU1TIF9fUlBDX0ZBUiAqcERpc3BQYXJhbXMsCisJICAgIC8qIFtvdXRdICovIFZBUklBTlQgX19SUENfRkFSICpwVmFyUmVzdWx0LAorCSAgICAvKiBbb3V0XSAqLyBFWENFUElORk8gX19SUENfRkFSICpwRXhjZXBJbmZvLAorCSAgICAvKiBbb3V0XSAqLyBVSU5UIF9fUlBDX0ZBUiAqcHVBcmdFcnIpOworCisJSFJFU1VMVCAoIFNURE1FVEhPRENBTExUWVBFIF9fUlBDX0ZBUiAqU2VuZEtleXMgKSgKKwkgICAgSVZpbSBfX1JQQ19GQVIgKiBUaGlzLAorCSAgICAvKiBbaW5dICovIEJTVFIga2V5cyk7CisKKwlIUkVTVUxUICggU1RETUVUSE9EQ0FMTFRZUEUgX19SUENfRkFSICpFdmFsICkoCisJICAgIElWaW0gX19SUENfRkFSICogVGhpcywKKwkgICAgLyogW2luXSAqLyBCU1RSIGV4cHIsCisJICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiBfX1JQQ19GQVIgKnJlc3VsdCk7CisKKwlIUkVTVUxUICggU1RETUVUSE9EQ0FMTFRZUEUgX19SUENfRkFSICpTZXRGb3JlZ3JvdW5kICkoCisJICAgIElWaW0gX19SUENfRkFSICogVGhpcyk7CisKKwlIUkVTVUxUICggU1RETUVUSE9EQ0FMTFRZUEUgX19SUENfRkFSICpHZXRId25kICkoCisJICAgIElWaW0gX19SUENfRkFSICogVGhpcywKKwkgICAgLyogW3JldHZhbF1bb3V0XSAqLyBVSU5UIF9fUlBDX0ZBUiAqcmVzdWx0KTsKKworCUVORF9JTlRFUkZBQ0UKKyAgICB9IElWaW1WdGJsOworCisgICAgaW50ZXJmYWNlIElWaW0KKyAgICB7CisJQ09OU1RfVlRCTCBzdHJ1Y3QgSVZpbVZ0YmwgX19SUENfRkFSICpscFZ0Ymw7CisgICAgfTsKKworI2lmZGVmIENPQkpNQUNST1MKKworCisjZGVmaW5lIElWaW1fUXVlcnlJbnRlcmZhY2UoVGhpcyxyaWlkLHBwdk9iamVjdCkJXAorICAgIChUaGlzKS0+bHBWdGJsIC0+IFF1ZXJ5SW50ZXJmYWNlKFRoaXMscmlpZCxwcHZPYmplY3QpCisKKyNkZWZpbmUgSVZpbV9BZGRSZWYoVGhpcykJXAorICAgIChUaGlzKS0+bHBWdGJsIC0+IEFkZFJlZihUaGlzKQorCisjZGVmaW5lIElWaW1fUmVsZWFzZShUaGlzKQlcCisgICAgKFRoaXMpLT5scFZ0YmwgLT4gUmVsZWFzZShUaGlzKQorCisKKyNkZWZpbmUgSVZpbV9HZXRUeXBlSW5mb0NvdW50KFRoaXMscGN0aW5mbykJXAorICAgIChUaGlzKS0+bHBWdGJsIC0+IEdldFR5cGVJbmZvQ291bnQoVGhpcyxwY3RpbmZvKQorCisjZGVmaW5lIElWaW1fR2V0VHlwZUluZm8oVGhpcyxpVEluZm8sbGNpZCxwcFRJbmZvKQlcCisgICAgKFRoaXMpLT5scFZ0YmwgLT4gR2V0VHlwZUluZm8oVGhpcyxpVEluZm8sbGNpZCxwcFRJbmZvKQorCisjZGVmaW5lIElWaW1fR2V0SURzT2ZOYW1lcyhUaGlzLHJpaWQscmdzek5hbWVzLGNOYW1lcyxsY2lkLHJnRGlzcElkKQlcCisgICAgKFRoaXMpLT5scFZ0YmwgLT4gR2V0SURzT2ZOYW1lcyhUaGlzLHJpaWQscmdzek5hbWVzLGNOYW1lcyxsY2lkLHJnRGlzcElkKQorCisjZGVmaW5lIElWaW1fSW52b2tlKFRoaXMsZGlzcElkTWVtYmVyLHJpaWQsbGNpZCx3RmxhZ3MscERpc3BQYXJhbXMscFZhclJlc3VsdCxwRXhjZXBJbmZvLHB1QXJnRXJyKQlcCisgICAgKFRoaXMpLT5scFZ0YmwgLT4gSW52b2tlKFRoaXMsZGlzcElkTWVtYmVyLHJpaWQsbGNpZCx3RmxhZ3MscERpc3BQYXJhbXMscFZhclJlc3VsdCxwRXhjZXBJbmZvLHB1QXJnRXJyKQorCisKKyNkZWZpbmUgSVZpbV9TZW5kS2V5cyhUaGlzLGtleXMpCVwKKyAgICAoVGhpcyktPmxwVnRibCAtPiBTZW5kS2V5cyhUaGlzLGtleXMpCisKKyNkZWZpbmUgSVZpbV9FdmFsKFRoaXMsZXhwcixyZXN1bHQpCVwKKyAgICAoVGhpcyktPmxwVnRibCAtPiBFdmFsKFRoaXMsZXhwcixyZXN1bHQpCisKKyNkZWZpbmUgSVZpbV9TZXRGb3JlZ3JvdW5kKFRoaXMpCVwKKyAgICAoVGhpcyktPmxwVnRibCAtPiBTZXRGb3JlZ3JvdW5kKFRoaXMpCisKKyNkZWZpbmUgSVZpbV9HZXRId25kKFRoaXMscmVzdWx0KQlcCisgICAgKFRoaXMpLT5scFZ0YmwgLT4gR2V0SHduZChUaGlzLHJlc3VsdCkKKworI2VuZGlmIC8qIENPQkpNQUNST1MgKi8KKworCisjZW5kaWYJLyogQyBzdHlsZSBpbnRlcmZhY2UgKi8KKworCisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgSVZpbV9TZW5kS2V5c19Qcm94eSgKKyAgICBJVmltIF9fUlBDX0ZBUiAqIFRoaXMsCisgICAgLyogW2luXSAqLyBCU1RSIGtleXMpOworCisKK3ZvaWQgX19SUENfU1RVQiBJVmltX1NlbmRLZXlzX1N0dWIoCisgICAgSVJwY1N0dWJCdWZmZXIgKlRoaXMsCisgICAgSVJwY0NoYW5uZWxCdWZmZXIgKl9wUnBjQ2hhbm5lbEJ1ZmZlciwKKyAgICBQUlBDX01FU1NBR0UgX3BScGNNZXNzYWdlLAorICAgIERXT1JEICpfcGR3U3R1YlBoYXNlKTsKKworCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIElWaW1fRXZhbF9Qcm94eSgKKyAgICBJVmltIF9fUlBDX0ZBUiAqIFRoaXMsCisgICAgLyogW2luXSAqLyBCU1RSIGV4cHIsCisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSIF9fUlBDX0ZBUiAqcmVzdWx0KTsKKworCit2b2lkIF9fUlBDX1NUVUIgSVZpbV9FdmFsX1N0dWIoCisgICAgSVJwY1N0dWJCdWZmZXIgKlRoaXMsCisgICAgSVJwY0NoYW5uZWxCdWZmZXIgKl9wUnBjQ2hhbm5lbEJ1ZmZlciwKKyAgICBQUlBDX01FU1NBR0UgX3BScGNNZXNzYWdlLAorICAgIERXT1JEICpfcGR3U3R1YlBoYXNlKTsKKworCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIElWaW1fU2V0Rm9yZWdyb3VuZF9Qcm94eSgKKyAgICBJVmltIF9fUlBDX0ZBUiAqIFRoaXMpOworCisKK3ZvaWQgX19SUENfU1RVQiBJVmltX1NldEZvcmVncm91bmRfU3R1YigKKyAgICBJUnBjU3R1YkJ1ZmZlciAqVGhpcywKKyAgICBJUnBjQ2hhbm5lbEJ1ZmZlciAqX3BScGNDaGFubmVsQnVmZmVyLAorICAgIFBSUENfTUVTU0FHRSBfcFJwY01lc3NhZ2UsCisgICAgRFdPUkQgKl9wZHdTdHViUGhhc2UpOworCisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgSVZpbV9HZXRId25kX1Byb3h5KAorICAgIElWaW0gX19SUENfRkFSICogVGhpcywKKyAgICAvKiBbcmV0dmFsXVtvdXRdICovIFVJTlQgX19SUENfRkFSICpyZXN1bHQpOworCisKK3ZvaWQgX19SUENfU1RVQiBJVmltX0dldEh3bmRfU3R1YigKKyAgICBJUnBjU3R1YkJ1ZmZlciAqVGhpcywKKyAgICBJUnBjQ2hhbm5lbEJ1ZmZlciAqX3BScGNDaGFubmVsQnVmZmVyLAorICAgIFBSUENfTUVTU0FHRSBfcFJwY01lc3NhZ2UsCisgICAgRFdPUkQgKl9wZHdTdHViUGhhc2UpOworCisKKworI2VuZGlmCS8qIF9fSVZpbV9JTlRFUkZBQ0VfREVGSU5FRF9fICovCisKKworCisjaWZuZGVmIF9fVmltX0xJQlJBUllfREVGSU5FRF9fCisjZGVmaW5lIF9fVmltX0xJQlJBUllfREVGSU5FRF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmF0ZWQgaGVhZGVyIGZvciBsaWJyYXJ5OiBWaW0KKyAqIGF0IFdlZCBKdW4gMDYgMTg6MjA6MzcgMjAwMQorICogdXNpbmcgTUlETCAzLjAxLjc1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFt2ZXJzaW9uXVtoZWxwc3RyaW5nXVt1dWlkXSAqLworCisKKworRVhURVJOX0MgY29uc3QgSUlEIExJQklEX1ZpbTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitFWFRFUk5fQyBjb25zdCBDTFNJRCBDTFNJRF9WaW07CisKK2NsYXNzIERFQ0xTUEVDX1VVSUQoIjBGMEJGQUUxLTRDOTAtMTFkMS04MkQ3LTAwMDRBQzM2ODUxOSIpCitWaW07CisjZW5kaWYKKyNlbmRpZiAvKiBfX1ZpbV9MSUJSQVJZX0RFRklORURfXyAqLworCisvKiBBZGRpdGlvbmFsIFByb3RvdHlwZXMgZm9yIEFMTCBpbnRlcmZhY2VzICovCisKK3Vuc2lnbmVkIGxvbmcJCSAgX19SUENfVVNFUiAgQlNUUl9Vc2VyU2l6ZSgJIHVuc2lnbmVkIGxvbmcgX19SUENfRkFSICosIHVuc2lnbmVkIGxvbmcJICAgICAsIEJTVFIgX19SUENfRkFSICogKTsKK3Vuc2lnbmVkIGNoYXIgX19SUENfRkFSICogX19SUENfVVNFUiAgQlNUUl9Vc2VyTWFyc2hhbCggIHVuc2lnbmVkIGxvbmcgX19SUENfRkFSICosIHVuc2lnbmVkIGNoYXIgX19SUENfRkFSICosIEJTVFIgX19SUENfRkFSICogKTsKK3Vuc2lnbmVkIGNoYXIgX19SUENfRkFSICogX19SUENfVVNFUiAgQlNUUl9Vc2VyVW5tYXJzaGFsKHVuc2lnbmVkIGxvbmcgX19SUENfRkFSICosIHVuc2lnbmVkIGNoYXIgX19SUENfRkFSICosIEJTVFIgX19SUENfRkFSICogKTsKK3ZvaWQJCQkgIF9fUlBDX1VTRVIgIEJTVFJfVXNlckZyZWUoCSB1bnNpZ25lZCBsb25nIF9fUlBDX0ZBUiAqLCBCU1RSIF9fUlBDX0ZBUiAqICk7CisKKy8qIGVuZCBvZiBBZGRpdGlvbmFsIFByb3RvdHlwZXMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaWZfb2xlLmlkbCBiL3NyYy9pZl9vbGUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzY2RlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaWZfb2xlLmlkbApAQCAtMCwwICsxLDQ1IEBACisvLyBpZl9vbGUuaWRsIC0gSURMIHNvdXJjZSBmb3IgdGhlIFZpbSBPTEUgQXV0b21hdGlvbiBpbnRlcmZhY2UKKy8vCisvLyBQcm9jZXNzZWQgYnkgdGhlIElETCBjb21waWxlciAoTUlETCkgdG8gZ2VuZXJhdGUgdGhlIHR5cGUgbGlicmFyeQorLy8gKFZpbS50bGIpLgorLy8KKy8vIENvbW1hbmQgbGluZToKKy8vICAgTUlETCAvcHJveHkgbnVsIC9paWQgaWlkX29sZS5jIC9oIGlmX29sZS5oIC90bGIgdmltLnRsYiBpZl9vbGUuaWRsCisKK1sKKwlvYmplY3QsCisJdXVpZCgwRjBCRkFFMi00QzkwLTExZDEtODJENy0wMDA0QUMzNjg1MTkpLCAgLy8gSUlEX0lWaW0KKwloZWxwc3RyaW5nKCJJVmltIiksCisJcG9pbnRlcl9kZWZhdWx0KHVuaXF1ZSksCisJZHVhbCwKKwlvbGVhdXRvbWF0aW9uCitdCitpbnRlcmZhY2UgSVZpbSA6IElEaXNwYXRjaAoreworCWltcG9ydCAib2FpZGwuaWRsIjsKKwlIUkVTVUxUIFNlbmRLZXlzKFtpbl1CU1RSIGtleXMpOworCUhSRVNVTFQgRXZhbChbaW5dQlNUUiBleHByLCBbb3V0LCByZXR2YWxdQlNUUiogcmVzdWx0KTsKKwlIUkVTVUxUIFNldEZvcmVncm91bmQodm9pZCk7CisJSFJFU1VMVCBHZXRId25kKFtvdXQsIHJldHZhbF1VSU5UKiByZXN1bHQpOworfTsKKworLy8gQ29tcG9uZW50IGFuZCB0eXBlIGxpYnJhcnkgZGVmaW5pdGlvbnMKK1sKKwl1dWlkKDBGMEJGQUUwLTRDOTAtMTFkMS04MkQ3LTAwMDRBQzM2ODUxOSksCQkvLyBMSUJJRF9WaW0KKwloZWxwc3RyaW5nKCJWaW0gT0xFIEludGVyZmFjZSAxLjEgVHlwZSBMaWJyYXJ5IiksCisJdmVyc2lvbigxLjEpCitdCitsaWJyYXJ5IFZpbQoreworCWltcG9ydGxpYigic3Rkb2xlMzIudGxiIik7CisKKwkvLyBDb21wb25lbnQKKwlbCisJCXV1aWQoMEYwQkZBRTEtNEM5MC0xMWQxLTgyRDctMDAwNEFDMzY4NTE5KSwgIC8vIENMU0lEX1ZpbQorCQloZWxwc3RyaW5nKCJWaW0gT0xFIEludGVyZmFjZSIpCisJXQorCWNvY2xhc3MgVmltCisJeworCQlbZGVmYXVsdF0gaW50ZXJmYWNlIElWaW07CisJfTsKK307CmRpZmYgLS1naXQgYS9zcmMvaWZfcGVybC54cyBiL3NyYy9pZl9wZXJsLnhzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NjA4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaWZfcGVybC54cwpAQCAtMCwwICsxLDExNTAgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisvKgorICogaWZfcGVybC54czogTWFpbiBjb2RlIGZvciBQZXJsIGludGVyZmFjZSBzdXBwb3J0LgorICoJCU1vc3RseSB3cml0dGVuIGJ5IFN2ZW4gVmVyZG9vbGFlZ2UuCisgKi8KKworI2RlZmluZSBfbWVtb3J5X2gJLyogYXZvaWQgbWVtc2V0IHJlZGVjbGFyYXRpb24gKi8KKyNkZWZpbmUgSU5fUEVSTF9GSUxFCS8qIGRvbid0IGluY2x1ZGUgaWZfcGVybC5wcm8gZnJvbSBwcm90by5oICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworCisvKgorICogV29yayBhcm91bmQgY2xhc2hlcyBiZXR3ZWVuIFBlcmwgYW5kIFZpbSBuYW1lc3BhY2UuCXByb3RvLmggZG9lc24ndAorICogaW5jbHVkZSBpZl9wZXJsLnBybyBhbmQgcGVybHNmaW8ucHJvIHdoZW4gSU5fUEVSTF9GSUxFIGlzIGRlZmluZWQsIGJlY2F1c2UKKyAqIHdlIG5lZWQgdGhlIENWIHR5cGVkZWYuICBwcm90by5oIGNhbid0IGJlIG1vdmVkIHRvIGFmdGVyIGluY2x1ZGluZworICogaWZfcGVybC5oLCBiZWNhdXNlIHdlIGdldCBhbGwgc29ydHMgb2YgbmFtZSBjbGFzaGVzIHRoZW4uCisgKi8KKyNpZm5kZWYgUFJPVE8KKyNpZm5kZWYgX19NSU5HVzMyX18KKyMgaW5jbHVkZSAicHJvdG8vaWZfcGVybC5wcm8iCisjIGluY2x1ZGUgInByb3RvL2lmX3BlcmxzZmlvLnBybyIKKyNlbmRpZgorI2VuZGlmCisKKy8qIFBlcmwgY29tcGF0aWJpbGl0eSBzdHVmZi4gVGhpcyBzaG91bGQgZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlcgorICogdmVyc2lvbnMgb2YgUGVybC4KKyAqLworCisjaWZuZGVmIFBFUkxfVkVSU0lPTgorIyAgICBpbmNsdWRlIDxwYXRjaGxldmVsLmg+CisjICAgIGRlZmluZSBQRVJMX1JFVklTSU9OICAgNQorIyAgICBkZWZpbmUgUEVSTF9WRVJTSU9OICAgIFBBVENITEVWRUwKKyMgICAgZGVmaW5lIFBFUkxfU1VCVkVSU0lPTiBTVUJWRVJTSU9OCisjZW5kaWYKKworI2lmbmRlZiBwVEhYCisjICAgIGRlZmluZSBwVEhYIHZvaWQKKyMgICAgZGVmaW5lIHBUSFhfCisjZW5kaWYKKworI2lmbmRlZiBFWFRFUk5fQworIyBkZWZpbmUgRVhURVJOX0MKKyNlbmRpZgorCisvKiBDb21wYXRpYmlsaXR5IGhhY2tzIG92ZXIgKi8KKworc3RhdGljIFBlcmxJbnRlcnByZXRlciAqcGVybF9pbnRlcnAgPSBOVUxMOworc3RhdGljIHZvaWQgeHNfaW5pdCBfX0FSR1MoKHBUSFgpKTsKK3N0YXRpYyB2b2lkIFZJTV9pbml0IF9fQVJHUygodm9pZCkpOworRVhURVJOX0Mgdm9pZCBib290X0R5bmFMb2FkZXIgX19BUkdTKChwVEhYXyBDViopKTsKKworLyoKKyAqIEZvciBkeW5hbWljIGxpbmtlZCBwZXJsLiAoV2luZG93cykKKyAqLworI2lmIGRlZmluZWQoRFlOQU1JQ19QRVJMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFdyYXBwZXIgZGVmaW5lcworICovCisjIGRlZmluZSBwZXJsX2FsbG9jIGRsbF9wZXJsX2FsbG9jCisjIGRlZmluZSBwZXJsX2NvbnN0cnVjdCBkbGxfcGVybF9jb25zdHJ1Y3QKKyMgZGVmaW5lIHBlcmxfcGFyc2UgZGxsX3BlcmxfcGFyc2UKKyMgZGVmaW5lIHBlcmxfcnVuIGRsbF9wZXJsX3J1bgorIyBkZWZpbmUgcGVybF9kZXN0cnVjdCBkbGxfcGVybF9kZXN0cnVjdAorIyBkZWZpbmUgcGVybF9mcmVlIGRsbF9wZXJsX2ZyZWUKKyMgZGVmaW5lIFBlcmxfZ2V0X2NvbnRleHQgZGxsX1BlcmxfZ2V0X2NvbnRleHQKKyMgZGVmaW5lIFBlcmxfY3JvYWsgZGxsX1BlcmxfY3JvYWsKKyMgaWZuZGVmIFBST1RPCisjICBkZWZpbmUgUGVybF9jcm9ha19ub2NvbnRleHQgZGxsX1BlcmxfY3JvYWtfbm9jb250ZXh0CisjICBkZWZpbmUgUGVybF9jYWxsX2FyZ3YgZGxsX1BlcmxfY2FsbF9hcmd2CisjICBkZWZpbmUgUGVybF9jYWxsX3B2IGRsbF9QZXJsX2NhbGxfcHYKKyMgIGRlZmluZSBQZXJsX2V2YWxfc3YgZGxsX1BlcmxfZXZhbF9zdgorIyAgZGVmaW5lIFBlcmxfZ2V0X3N2IGRsbF9QZXJsX2dldF9zdgorIyAgZGVmaW5lIFBlcmxfZXZhbF9wdiBkbGxfUGVybF9ldmFsX3B2CisjICBkZWZpbmUgUGVybF9jYWxsX21ldGhvZCBkbGxfUGVybF9jYWxsX21ldGhvZAorIyBlbmRpZgorIyBkZWZpbmUgUGVybF9kb3dhbnRhcnJheSBkbGxfUGVybF9kb3dhbnRhcnJheQorIyBkZWZpbmUgUGVybF9mcmVlX3RtcHMgZGxsX1BlcmxfZnJlZV90bXBzCisjIGRlZmluZSBQZXJsX2d2X3N0YXNocHYgZGxsX1BlcmxfZ3Zfc3Rhc2hwdgorIyBkZWZpbmUgUGVybF9tYXJrc3RhY2tfZ3JvdyBkbGxfUGVybF9tYXJrc3RhY2tfZ3JvdworIyBkZWZpbmUgUGVybF9tZ19maW5kIGRsbF9QZXJsX21nX2ZpbmQKKyMgZGVmaW5lIFBlcmxfbmV3WFMgZGxsX1BlcmxfbmV3WFMKKyMgZGVmaW5lIFBlcmxfbmV3U1YgZGxsX1BlcmxfbmV3U1YKKyMgZGVmaW5lIFBlcmxfbmV3U1ZpdiBkbGxfUGVybF9uZXdTVml2CisjIGRlZmluZSBQZXJsX25ld1NWcHYgZGxsX1BlcmxfbmV3U1ZwdgorIyBkZWZpbmUgUGVybF9wb3Bfc2NvcGUgZGxsX1BlcmxfcG9wX3Njb3BlCisjIGRlZmluZSBQZXJsX3B1c2hfc2NvcGUgZGxsX1BlcmxfcHVzaF9zY29wZQorIyBkZWZpbmUgUGVybF9zYXZlX2ludCBkbGxfUGVybF9zYXZlX2ludAorIyBkZWZpbmUgUGVybF9zdGFja19ncm93IGRsbF9QZXJsX3N0YWNrX2dyb3cKKyMgZGVmaW5lIFBlcmxfc2V0X2NvbnRleHQgZGxsX1Blcmxfc2V0X2NvbnRleHQKKyMgZGVmaW5lIFBlcmxfc3ZfMmJvb2wgZGxsX1Blcmxfc3ZfMmJvb2wKKyMgZGVmaW5lIFBlcmxfc3ZfMml2IGRsbF9QZXJsX3N2XzJpdgorIyBkZWZpbmUgUGVybF9zdl8ybW9ydGFsIGRsbF9QZXJsX3N2XzJtb3J0YWwKKyMgaWYgKFBFUkxfUkVWSVNJT04gPT0gNSkgJiYgKFBFUkxfVkVSU0lPTiA+PSA4KQorIyAgZGVmaW5lIFBlcmxfc3ZfMnB2X2ZsYWdzIGRsbF9QZXJsX3N2XzJwdl9mbGFncworIyAgZGVmaW5lIFBlcmxfc3ZfMnB2X25vbGVuIGRsbF9QZXJsX3N2XzJwdl9ub2xlbgorIyBlbHNlCisjICBkZWZpbmUgUGVybF9zdl8ycHYgZGxsX1Blcmxfc3ZfMnB2CisjIGVuZGlmCisjIGRlZmluZSBQZXJsX3N2X2JsZXNzIGRsbF9QZXJsX3N2X2JsZXNzCisjIGlmIChQRVJMX1JFVklTSU9OID09IDUpICYmIChQRVJMX1ZFUlNJT04gPj0gOCkKKyMgIGRlZmluZSBQZXJsX3N2X2NhdHB2bl9mbGFncyBkbGxfUGVybF9zdl9jYXRwdm5fZmxhZ3MKKyMgZWxzZQorIyAgZGVmaW5lIFBlcmxfc3ZfY2F0cHZuIGRsbF9QZXJsX3N2X2NhdHB2bgorIyBlbmRpZgorIyBkZWZpbmUgUGVybF9zdl9mcmVlIGRsbF9QZXJsX3N2X2ZyZWUKKyMgZGVmaW5lIFBlcmxfc3ZfaXNhIGRsbF9QZXJsX3N2X2lzYQorIyBkZWZpbmUgUGVybF9zdl9tYWdpYyBkbGxfUGVybF9zdl9tYWdpYworIyBkZWZpbmUgUGVybF9zdl9zZXRpdiBkbGxfUGVybF9zdl9zZXRpdgorIyBkZWZpbmUgUGVybF9zdl9zZXRwdiBkbGxfUGVybF9zdl9zZXRwdgorIyBkZWZpbmUgUGVybF9zdl9zZXRwdm4gZGxsX1Blcmxfc3Zfc2V0cHZuCisjIGlmIChQRVJMX1JFVklTSU9OID09IDUpICYmIChQRVJMX1ZFUlNJT04gPj0gOCkKKyMgIGRlZmluZSBQZXJsX3N2X3NldHN2X2ZsYWdzIGRsbF9QZXJsX3N2X3NldHN2X2ZsYWdzCisjIGVsc2UKKyMgIGRlZmluZSBQZXJsX3N2X3NldHN2IGRsbF9QZXJsX3N2X3NldHN2CisjIGVuZGlmCisjIGRlZmluZSBQZXJsX3N2X3VwZ3JhZGUgZGxsX1Blcmxfc3ZfdXBncmFkZQorIyBkZWZpbmUgUGVybF9Uc3RhY2tfc3BfcHRyIGRsbF9QZXJsX1RzdGFja19zcF9wdHIKKyMgZGVmaW5lIFBlcmxfVG9wX3B0ciBkbGxfUGVybF9Ub3BfcHRyCisjIGRlZmluZSBQZXJsX1RzdGFja19iYXNlX3B0ciBkbGxfUGVybF9Uc3RhY2tfYmFzZV9wdHIKKyMgZGVmaW5lIFBlcmxfVHN0YWNrX21heF9wdHIgZGxsX1BlcmxfVHN0YWNrX21heF9wdHIKKyMgZGVmaW5lIFBlcmxfVHRtcHNfaXhfcHRyIGRsbF9QZXJsX1R0bXBzX2l4X3B0cgorIyBkZWZpbmUgUGVybF9UdG1wc19mbG9vcl9wdHIgZGxsX1BlcmxfVHRtcHNfZmxvb3JfcHRyCisjIGRlZmluZSBQZXJsX1RtYXJrc3RhY2tfcHRyX3B0ciBkbGxfUGVybF9UbWFya3N0YWNrX3B0cl9wdHIKKyMgZGVmaW5lIFBlcmxfVG1hcmtzdGFja19tYXhfcHRyIGRsbF9QZXJsX1RtYXJrc3RhY2tfbWF4X3B0cgorIyBkZWZpbmUgUGVybF9UU3ZfcHRyIGRsbF9QZXJsX1RTdl9wdHIKKyMgZGVmaW5lIFBlcmxfVFhwdl9wdHIgZGxsX1BlcmxfVFhwdl9wdHIKKyMgZGVmaW5lIFBlcmxfVG5hX3B0ciBkbGxfUGVybF9UbmFfcHRyCisjIGRlZmluZSBQZXJsX0lkZWZndl9wdHIgZGxsX1BlcmxfSWRlZmd2X3B0cgorIyBkZWZpbmUgUGVybF9JZXJyZ3ZfcHRyIGRsbF9QZXJsX0llcnJndl9wdHIKKyMgZGVmaW5lIFBlcmxfSXN2X3llc19wdHIgZGxsX1BlcmxfSXN2X3llc19wdHIKKyMgZGVmaW5lIGJvb3RfRHluYUxvYWRlciBkbGxfYm9vdF9EeW5hTG9hZGVyCisKKyNpZm5kZWYgRFlOQU1JQ19QRVJMIC8qIGp1c3QgZ2VuZXJhdGluZyBwcm90b3R5cGVzICovCit0eXBlZGVmIGludCBIQU5ETEU7Cit0eXBlZGVmIGludCBYU0lOSVRfdDsKK3R5cGVkZWYgaW50IFhTVUJBRERSX3Q7CisjZW5kaWYKKworLyoKKyAqIERlY2xhcmUgSEFORExFIGZvciBwZXJsLmRsbCBhbmQgZnVuY3Rpb24gcG9pbnRlcnMuCisgKi8KK3N0YXRpYyBIQU5ETEUgaFBlcmxMaWIgPSBOVUxMOworCitzdGF0aWMgUGVybEludGVycHJldGVyKiAoKnBlcmxfYWxsb2MpKCk7CitzdGF0aWMgdm9pZCAoKnBlcmxfY29uc3RydWN0KShQZXJsSW50ZXJwcmV0ZXIqKTsKK3N0YXRpYyB2b2lkICgqcGVybF9kZXN0cnVjdCkoUGVybEludGVycHJldGVyKik7CitzdGF0aWMgdm9pZCAoKnBlcmxfZnJlZSkoUGVybEludGVycHJldGVyKik7CitzdGF0aWMgaW50ICgqcGVybF9ydW4pKFBlcmxJbnRlcnByZXRlciopOworc3RhdGljIGludCAoKnBlcmxfcGFyc2UpKFBlcmxJbnRlcnByZXRlciosIFhTSU5JVF90LCBpbnQsIGNoYXIqKiwgY2hhcioqKTsKK3N0YXRpYyB2b2lkKiAoKlBlcmxfZ2V0X2NvbnRleHQpKHZvaWQpOworc3RhdGljIHZvaWQgKCpQZXJsX2Nyb2FrKShwVEhYXyBjb25zdCBjaGFyKiwgLi4uKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworc3RhdGljIHZvaWQgKCpQZXJsX2Nyb2FrX25vY29udGV4dCkoY29uc3QgY2hhciosIC4uLikgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKK3N0YXRpYyBJMzIgKCpQZXJsX2Rvd2FudGFycmF5KShwVEhYKTsKK3N0YXRpYyB2b2lkICgqUGVybF9mcmVlX3RtcHMpKHBUSFgpOworc3RhdGljIEhWKiAoKlBlcmxfZ3Zfc3Rhc2hwdikocFRIWF8gY29uc3QgY2hhciosIEkzMik7CitzdGF0aWMgdm9pZCAoKlBlcmxfbWFya3N0YWNrX2dyb3cpKHBUSFgpOworc3RhdGljIE1BR0lDKiAoKlBlcmxfbWdfZmluZCkocFRIWF8gU1YqLCBpbnQpOworc3RhdGljIENWKiAoKlBlcmxfbmV3WFMpKHBUSFhfIGNoYXIqLCBYU1VCQUREUl90LCBjaGFyKik7CitzdGF0aWMgU1YqICgqUGVybF9uZXdTVikocFRIWF8gU1RSTEVOKTsKK3N0YXRpYyBTViogKCpQZXJsX25ld1NWaXYpKHBUSFhfIElWKTsKK3N0YXRpYyBTViogKCpQZXJsX25ld1NWcHYpKHBUSFhfIGNvbnN0IGNoYXIqLCBTVFJMRU4pOworc3RhdGljIEkzMiAoKlBlcmxfY2FsbF9hcmd2KShwVEhYXyBjb25zdCBjaGFyKiwgSTMyLCBjaGFyKiopOworc3RhdGljIEkzMiAoKlBlcmxfY2FsbF9wdikocFRIWF8gY29uc3QgY2hhciosIEkzMik7CitzdGF0aWMgSTMyICgqUGVybF9ldmFsX3N2KShwVEhYXyBTViosIEkzMik7CitzdGF0aWMgU1YqICgqUGVybF9nZXRfc3YpKHBUSFhfIGNvbnN0IGNoYXIqLCBJMzIpOworc3RhdGljIFNWKiAoKlBlcmxfZXZhbF9wdikocFRIWF8gY29uc3QgY2hhciosIEkzMik7CitzdGF0aWMgU1YqICgqUGVybF9jYWxsX21ldGhvZCkocFRIWF8gY29uc3QgY2hhciosIEkzMik7CitzdGF0aWMgdm9pZCAoKlBlcmxfcG9wX3Njb3BlKShwVEhYKTsKK3N0YXRpYyB2b2lkICgqUGVybF9wdXNoX3Njb3BlKShwVEhYKTsKK3N0YXRpYyB2b2lkICgqUGVybF9zYXZlX2ludCkocFRIWF8gaW50Kik7CitzdGF0aWMgU1YqKiAoKlBlcmxfc3RhY2tfZ3JvdykocFRIWF8gU1YqKiwgU1YqKnAsIGludCk7CitzdGF0aWMgU1YqKiAoKlBlcmxfc2V0X2NvbnRleHQpKHZvaWQqKTsKK3N0YXRpYyBib29sICgqUGVybF9zdl8yYm9vbCkocFRIWF8gU1YqKTsKK3N0YXRpYyBJViAoKlBlcmxfc3ZfMml2KShwVEhYXyBTViopOworc3RhdGljIFNWKiAoKlBlcmxfc3ZfMm1vcnRhbCkocFRIWF8gU1YqKTsKKyNpZiAoUEVSTF9SRVZJU0lPTiA9PSA1KSAmJiAoUEVSTF9WRVJTSU9OID49IDgpCitzdGF0aWMgY2hhciogKCpQZXJsX3N2XzJwdl9mbGFncykocFRIWF8gU1YqLCBTVFJMRU4qLCBJMzIpOworc3RhdGljIGNoYXIqICgqUGVybF9zdl8ycHZfbm9sZW4pKHBUSFhfIFNWKik7CisjZWxzZQorc3RhdGljIGNoYXIqICgqUGVybF9zdl8ycHYpKHBUSFhfIFNWKiwgU1RSTEVOKik7CisjZW5kaWYKK3N0YXRpYyBTViogKCpQZXJsX3N2X2JsZXNzKShwVEhYXyBTViosIEhWKik7CisjaWYgKFBFUkxfUkVWSVNJT04gPT0gNSkgJiYgKFBFUkxfVkVSU0lPTiA+PSA4KQorc3RhdGljIHZvaWQgKCpQZXJsX3N2X2NhdHB2bl9mbGFncykocFRIWF8gU1YqICwgY29uc3QgY2hhciosIFNUUkxFTiwgSTMyKTsKKyNlbHNlCitzdGF0aWMgdm9pZCAoKlBlcmxfc3ZfY2F0cHZuKShwVEhYXyBTViosIGNvbnN0IGNoYXIqLCBTVFJMRU4pOworI2VuZGlmCitzdGF0aWMgdm9pZCAoKlBlcmxfc3ZfZnJlZSkocFRIWF8gU1YqKTsKK3N0YXRpYyBpbnQgKCpQZXJsX3N2X2lzYSkocFRIWF8gU1YqLCBjb25zdCBjaGFyKik7CitzdGF0aWMgdm9pZCAoKlBlcmxfc3ZfbWFnaWMpKHBUSFhfIFNWKiwgU1YqLCBpbnQsIGNvbnN0IGNoYXIqLCBJMzIpOworc3RhdGljIHZvaWQgKCpQZXJsX3N2X3NldGl2KShwVEhYXyBTViosIElWKTsKK3N0YXRpYyB2b2lkICgqUGVybF9zdl9zZXRwdikocFRIWF8gU1YqLCBjb25zdCBjaGFyKik7CitzdGF0aWMgdm9pZCAoKlBlcmxfc3Zfc2V0cHZuKShwVEhYXyBTViosIGNvbnN0IGNoYXIqLCBTVFJMRU4pOworI2lmIChQRVJMX1JFVklTSU9OID09IDUpICYmIChQRVJMX1ZFUlNJT04gPj0gOCkKK3N0YXRpYyB2b2lkICgqUGVybF9zdl9zZXRzdl9mbGFncykocFRIWF8gU1YqLCBTViosIEkzMik7CisjZWxzZQorc3RhdGljIHZvaWQgKCpQZXJsX3N2X3NldHN2KShwVEhYXyBTViosIFNWKik7CisjZW5kaWYKK3N0YXRpYyBib29sICgqUGVybF9zdl91cGdyYWRlKShwVEhYXyBTViosIFUzMik7CitzdGF0aWMgU1YqKiogKCpQZXJsX1RzdGFja19zcF9wdHIpKHJlZ2lzdGVyIFBlcmxJbnRlcnByZXRlciopOworc3RhdGljIE9QKiogKCpQZXJsX1RvcF9wdHIpKHJlZ2lzdGVyIFBlcmxJbnRlcnByZXRlciopOworc3RhdGljIFNWKioqICgqUGVybF9Uc3RhY2tfYmFzZV9wdHIpKHJlZ2lzdGVyIFBlcmxJbnRlcnByZXRlciopOworc3RhdGljIFNWKioqICgqUGVybF9Uc3RhY2tfbWF4X3B0cikocmVnaXN0ZXIgUGVybEludGVycHJldGVyKik7CitzdGF0aWMgSTMyKiAoKlBlcmxfVHRtcHNfaXhfcHRyKShyZWdpc3RlciBQZXJsSW50ZXJwcmV0ZXIqKTsKK3N0YXRpYyBJMzIqICgqUGVybF9UdG1wc19mbG9vcl9wdHIpKHJlZ2lzdGVyIFBlcmxJbnRlcnByZXRlciopOworc3RhdGljIEkzMioqICgqUGVybF9UbWFya3N0YWNrX3B0cl9wdHIpKHJlZ2lzdGVyIFBlcmxJbnRlcnByZXRlciopOworc3RhdGljIEkzMioqICgqUGVybF9UbWFya3N0YWNrX21heF9wdHIpKHJlZ2lzdGVyIFBlcmxJbnRlcnByZXRlciopOworc3RhdGljIFNWKiogKCpQZXJsX1RTdl9wdHIpKHJlZ2lzdGVyIFBlcmxJbnRlcnByZXRlciopOworc3RhdGljIFhQVioqICgqUGVybF9UWHB2X3B0cikocmVnaXN0ZXIgUGVybEludGVycHJldGVyKik7CitzdGF0aWMgU1RSTEVOKiAoKlBlcmxfVG5hX3B0cikocmVnaXN0ZXIgUGVybEludGVycHJldGVyKik7CitzdGF0aWMgR1YqKiAoKlBlcmxfSWRlZmd2X3B0cikocmVnaXN0ZXIgUGVybEludGVycHJldGVyKik7CitzdGF0aWMgR1YqKiAoKlBlcmxfSWVycmd2X3B0cikocmVnaXN0ZXIgUGVybEludGVycHJldGVyKik7CitzdGF0aWMgU1YqICgqUGVybF9Jc3ZfeWVzX3B0cikocmVnaXN0ZXIgUGVybEludGVycHJldGVyKik7CitzdGF0aWMgdm9pZCAoKmJvb3RfRHluYUxvYWRlcilfKChwVEhYXyBDViopKTsKKworCisvKgorICogVGFibGUgb2YgbmFtZSB0byBmdW5jdGlvbiBwb2ludGVyIG9mIHBlcmwuCisgKi8KKyNkZWZpbmUgUEVSTF9QUk9DIEZBUlBST0MKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGNoYXIqIG5hbWU7CisgICAgUEVSTF9QUk9DKiBwdHI7Cit9IHBlcmxfZnVuY25hbWVfdGFibGVbXSA9IHsKKyAgICB7InBlcmxfYWxsb2MiLCAoUEVSTF9QUk9DKikmcGVybF9hbGxvY30sCisgICAgeyJwZXJsX2NvbnN0cnVjdCIsIChQRVJMX1BST0MqKSZwZXJsX2NvbnN0cnVjdH0sCisgICAgeyJwZXJsX2Rlc3RydWN0IiwgKFBFUkxfUFJPQyopJnBlcmxfZGVzdHJ1Y3R9LAorICAgIHsicGVybF9mcmVlIiwgKFBFUkxfUFJPQyopJnBlcmxfZnJlZX0sCisgICAgeyJwZXJsX3J1biIsIChQRVJMX1BST0MqKSZwZXJsX3J1bn0sCisgICAgeyJwZXJsX3BhcnNlIiwgKFBFUkxfUFJPQyopJnBlcmxfcGFyc2V9LAorICAgIHsiUGVybF9nZXRfY29udGV4dCIsIChQRVJMX1BST0MqKSZQZXJsX2dldF9jb250ZXh0fSwKKyAgICB7IlBlcmxfY3JvYWsiLCAoUEVSTF9QUk9DKikmUGVybF9jcm9ha30sCisgICAgeyJQZXJsX2Nyb2FrX25vY29udGV4dCIsIChQRVJMX1BST0MqKSZQZXJsX2Nyb2FrX25vY29udGV4dH0sCisgICAgeyJQZXJsX2Rvd2FudGFycmF5IiwgKFBFUkxfUFJPQyopJlBlcmxfZG93YW50YXJyYXl9LAorICAgIHsiUGVybF9mcmVlX3RtcHMiLCAoUEVSTF9QUk9DKikmUGVybF9mcmVlX3RtcHN9LAorICAgIHsiUGVybF9ndl9zdGFzaHB2IiwgKFBFUkxfUFJPQyopJlBlcmxfZ3Zfc3Rhc2hwdn0sCisgICAgeyJQZXJsX21hcmtzdGFja19ncm93IiwgKFBFUkxfUFJPQyopJlBlcmxfbWFya3N0YWNrX2dyb3d9LAorICAgIHsiUGVybF9tZ19maW5kIiwgKFBFUkxfUFJPQyopJlBlcmxfbWdfZmluZH0sCisgICAgeyJQZXJsX25ld1hTIiwgKFBFUkxfUFJPQyopJlBlcmxfbmV3WFN9LAorICAgIHsiUGVybF9uZXdTViIsIChQRVJMX1BST0MqKSZQZXJsX25ld1NWfSwKKyAgICB7IlBlcmxfbmV3U1ZpdiIsIChQRVJMX1BST0MqKSZQZXJsX25ld1NWaXZ9LAorICAgIHsiUGVybF9uZXdTVnB2IiwgKFBFUkxfUFJPQyopJlBlcmxfbmV3U1Zwdn0sCisgICAgeyJQZXJsX2NhbGxfYXJndiIsIChQRVJMX1BST0MqKSZQZXJsX2NhbGxfYXJndn0sCisgICAgeyJQZXJsX2NhbGxfcHYiLCAoUEVSTF9QUk9DKikmUGVybF9jYWxsX3B2fSwKKyAgICB7IlBlcmxfZXZhbF9zdiIsIChQRVJMX1BST0MqKSZQZXJsX2V2YWxfc3Z9LAorICAgIHsiUGVybF9nZXRfc3YiLCAoUEVSTF9QUk9DKikmUGVybF9nZXRfc3Z9LAorICAgIHsiUGVybF9ldmFsX3B2IiwgKFBFUkxfUFJPQyopJlBlcmxfZXZhbF9wdn0sCisgICAgeyJQZXJsX2NhbGxfbWV0aG9kIiwgKFBFUkxfUFJPQyopJlBlcmxfY2FsbF9tZXRob2R9LAorICAgIHsiUGVybF9wb3Bfc2NvcGUiLCAoUEVSTF9QUk9DKikmUGVybF9wb3Bfc2NvcGV9LAorICAgIHsiUGVybF9wdXNoX3Njb3BlIiwgKFBFUkxfUFJPQyopJlBlcmxfcHVzaF9zY29wZX0sCisgICAgeyJQZXJsX3NhdmVfaW50IiwgKFBFUkxfUFJPQyopJlBlcmxfc2F2ZV9pbnR9LAorICAgIHsiUGVybF9zdGFja19ncm93IiwgKFBFUkxfUFJPQyopJlBlcmxfc3RhY2tfZ3Jvd30sCisgICAgeyJQZXJsX3NldF9jb250ZXh0IiwgKFBFUkxfUFJPQyopJlBlcmxfc2V0X2NvbnRleHR9LAorICAgIHsiUGVybF9zdl8yYm9vbCIsIChQRVJMX1BST0MqKSZQZXJsX3N2XzJib29sfSwKKyAgICB7IlBlcmxfc3ZfMml2IiwgKFBFUkxfUFJPQyopJlBlcmxfc3ZfMml2fSwKKyAgICB7IlBlcmxfc3ZfMm1vcnRhbCIsIChQRVJMX1BST0MqKSZQZXJsX3N2XzJtb3J0YWx9LAorI2lmIChQRVJMX1JFVklTSU9OID09IDUpICYmIChQRVJMX1ZFUlNJT04gPj0gOCkKKyAgICB7IlBlcmxfc3ZfMnB2X2ZsYWdzIiwgKFBFUkxfUFJPQyopJlBlcmxfc3ZfMnB2X2ZsYWdzfSwKKyAgICB7IlBlcmxfc3ZfMnB2X25vbGVuIiwgKFBFUkxfUFJPQyopJlBlcmxfc3ZfMnB2X25vbGVufSwKKyNlbHNlCisgICAgeyJQZXJsX3N2XzJwdiIsIChQRVJMX1BST0MqKSZQZXJsX3N2XzJwdn0sCisjZW5kaWYKKyAgICB7IlBlcmxfc3ZfYmxlc3MiLCAoUEVSTF9QUk9DKikmUGVybF9zdl9ibGVzc30sCisjaWYgKFBFUkxfUkVWSVNJT04gPT0gNSkgJiYgKFBFUkxfVkVSU0lPTiA+PSA4KQorICAgIHsiUGVybF9zdl9jYXRwdm5fZmxhZ3MiLCAoUEVSTF9QUk9DKikmUGVybF9zdl9jYXRwdm5fZmxhZ3N9LAorI2Vsc2UKKyAgICB7IlBlcmxfc3ZfY2F0cHZuIiwgKFBFUkxfUFJPQyopJlBlcmxfc3ZfY2F0cHZufSwKKyNlbmRpZgorICAgIHsiUGVybF9zdl9mcmVlIiwgKFBFUkxfUFJPQyopJlBlcmxfc3ZfZnJlZX0sCisgICAgeyJQZXJsX3N2X2lzYSIsIChQRVJMX1BST0MqKSZQZXJsX3N2X2lzYX0sCisgICAgeyJQZXJsX3N2X21hZ2ljIiwgKFBFUkxfUFJPQyopJlBlcmxfc3ZfbWFnaWN9LAorICAgIHsiUGVybF9zdl9zZXRpdiIsIChQRVJMX1BST0MqKSZQZXJsX3N2X3NldGl2fSwKKyAgICB7IlBlcmxfc3Zfc2V0cHYiLCAoUEVSTF9QUk9DKikmUGVybF9zdl9zZXRwdn0sCisgICAgeyJQZXJsX3N2X3NldHB2biIsIChQRVJMX1BST0MqKSZQZXJsX3N2X3NldHB2bn0sCisjaWYgKFBFUkxfUkVWSVNJT04gPT0gNSkgJiYgKFBFUkxfVkVSU0lPTiA+PSA4KQorICAgIHsiUGVybF9zdl9zZXRzdl9mbGFncyIsIChQRVJMX1BST0MqKSZQZXJsX3N2X3NldHN2X2ZsYWdzfSwKKyNlbHNlCisgICAgeyJQZXJsX3N2X3NldHN2IiwgKFBFUkxfUFJPQyopJlBlcmxfc3Zfc2V0c3Z9LAorI2VuZGlmCisgICAgeyJQZXJsX3N2X3VwZ3JhZGUiLCAoUEVSTF9QUk9DKikmUGVybF9zdl91cGdyYWRlfSwKKyAgICB7IlBlcmxfVHN0YWNrX3NwX3B0ciIsIChQRVJMX1BST0MqKSZQZXJsX1RzdGFja19zcF9wdHJ9LAorICAgIHsiUGVybF9Ub3BfcHRyIiwgKFBFUkxfUFJPQyopJlBlcmxfVG9wX3B0cn0sCisgICAgeyJQZXJsX1RzdGFja19iYXNlX3B0ciIsIChQRVJMX1BST0MqKSZQZXJsX1RzdGFja19iYXNlX3B0cn0sCisgICAgeyJQZXJsX1RzdGFja19tYXhfcHRyIiwgKFBFUkxfUFJPQyopJlBlcmxfVHN0YWNrX21heF9wdHJ9LAorICAgIHsiUGVybF9UdG1wc19peF9wdHIiLCAoUEVSTF9QUk9DKikmUGVybF9UdG1wc19peF9wdHJ9LAorICAgIHsiUGVybF9UdG1wc19mbG9vcl9wdHIiLCAoUEVSTF9QUk9DKikmUGVybF9UdG1wc19mbG9vcl9wdHJ9LAorICAgIHsiUGVybF9UbWFya3N0YWNrX3B0cl9wdHIiLCAoUEVSTF9QUk9DKikmUGVybF9UbWFya3N0YWNrX3B0cl9wdHJ9LAorICAgIHsiUGVybF9UbWFya3N0YWNrX21heF9wdHIiLCAoUEVSTF9QUk9DKikmUGVybF9UbWFya3N0YWNrX21heF9wdHJ9LAorICAgIHsiUGVybF9UU3ZfcHRyIiwgKFBFUkxfUFJPQyopJlBlcmxfVFN2X3B0cn0sCisgICAgeyJQZXJsX1RYcHZfcHRyIiwgKFBFUkxfUFJPQyopJlBlcmxfVFhwdl9wdHJ9LAorICAgIHsiUGVybF9UbmFfcHRyIiwgKFBFUkxfUFJPQyopJlBlcmxfVG5hX3B0cn0sCisgICAgeyJQZXJsX0lkZWZndl9wdHIiLCAoUEVSTF9QUk9DKikmUGVybF9JZGVmZ3ZfcHRyfSwKKyAgICB7IlBlcmxfSWVycmd2X3B0ciIsIChQRVJMX1BST0MqKSZQZXJsX0llcnJndl9wdHJ9LAorICAgIHsiUGVybF9Jc3ZfeWVzX3B0ciIsIChQRVJMX1BST0MqKSZQZXJsX0lzdl95ZXNfcHRyfSwKKyAgICB7ImJvb3RfRHluYUxvYWRlciIsIChQRVJMX1BST0MqKSZib290X0R5bmFMb2FkZXJ9LAorICAgIHsiIiwgTlVMTH0sCit9OworCisvKgorICogTWFrZSBhbGwgcnVudGltZS1saW5rcyBvZiBwZXJsLgorICoKKyAqIDEuIEdldCBtb2R1bGUgaGFuZGxlIHVzaW5nIExvYWRMaWJyYXJ5RXguCisgKiAyLiBHZXQgcG9pbnRlciB0byBwZXJsIGZ1bmN0aW9uIGJ5IEdldFByb2NBZGRyZXNzLgorICogMy4gUmVwZWF0IDIsIHVudGlsIGdldCBhbGwgZnVuY3Rpb25zIHdpbGwgYmUgdXNlZC4KKyAqCisgKiBQYXJhbWV0ZXIgJ2xpYm5hbWUnIHByb3ZpZGVzIG5hbWUgb2YgRExMLgorICogUmV0dXJuIE9LIG9yIEZBSUwuCisgKi8KKyAgICBzdGF0aWMgaW50CitwZXJsX3J1bnRpbWVfbGlua19pbml0KGNoYXIgKmxpYm5hbWUsIGludCB2ZXJib3NlKQoreworICAgIGludCBpOworCisgICAgaWYgKGhQZXJsTGliICE9IE5VTEwpCisJcmV0dXJuIE9LOworICAgIGlmICghKGhQZXJsTGliID0gTG9hZExpYnJhcnlFeChsaWJuYW1lLCBOVUxMLCAwKSkpCisgICAgeworCWlmICh2ZXJib3NlKQorCSAgICBFTVNHMihfKCJFMzcwOiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5ICVzIiksIGxpYm5hbWUpOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBwZXJsX2Z1bmNuYW1lX3RhYmxlW2ldLnB0cjsgKytpKQorICAgIHsKKwlpZiAoISgqcGVybF9mdW5jbmFtZV90YWJsZVtpXS5wdHIgPSBHZXRQcm9jQWRkcmVzcyhoUGVybExpYiwKKwkJCXBlcmxfZnVuY25hbWVfdGFibGVbaV0ubmFtZSkpKQorCXsKKwkgICAgRnJlZUxpYnJhcnkoaFBlcmxMaWIpOworCSAgICBoUGVybExpYiA9IE5VTEw7CisJICAgIGlmICh2ZXJib3NlKQorCQlFTVNHMihfKGVfbG9hZGZ1bmMpLCBwZXJsX2Z1bmNuYW1lX3RhYmxlW2ldLm5hbWUpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIElmIHJ1bnRpbWUtbGluay1wZXJsKERMTCkgd2FzIGxvYWRlZCBzdWNjZXNzZnVsbHksIHJldHVybiBUUlVFLgorICogVGhlcmUgd2VyZSBubyBETEwgbG9hZGVkLCByZXR1cm4gRkFMU0UuCisgKi8KKyAgICBpbnQKK3BlcmxfZW5hYmxlZCh2ZXJib3NlKQorICAgIGludAkJdmVyYm9zZTsKK3sKKyAgICByZXR1cm4gcGVybF9ydW50aW1lX2xpbmtfaW5pdChEWU5BTUlDX1BFUkxfRExMLCB2ZXJib3NlKSA9PSBPSzsKK30KKyNlbmRpZiAvKiBEWU5BTUlDX1BFUkwgKi8KKworLyoKKyAqIHBlcmxfaW5pdCgpOiBpbml0aWFsaXplIHBlcmwgaW50ZXJwcmV0ZXIKKyAqIFdlIGhhdmUgdG8gY2FsbCBwZXJsX3BhcnNlIHRvIGluaXRpYWxpemUgc29tZSBzdHJ1Y3R1cmVzLAorICogdGhlcmUncyBub3RoaW5nIHRvIGFjdHVhbGx5IHBhcnNlLgorICovCisgICAgc3RhdGljIHZvaWQKK3BlcmxfaW5pdCgpCit7CisgICAgY2hhcgkqYm9vdGFyZ3NbXSA9IHsgIlZJIiwgTlVMTCB9OworICAgIHN0YXRpYyBjaGFyICphcmdzW10gPSB7ICIiLCAiLWUiLCAiIiB9OworCisgICAgcGVybF9pbnRlcnAgPSBwZXJsX2FsbG9jKCk7CisgICAgcGVybF9jb25zdHJ1Y3QocGVybF9pbnRlcnApOworICAgIHBlcmxfcGFyc2UocGVybF9pbnRlcnAsIHhzX2luaXQsIDMsIGFyZ3MsIDApOworICAgIHBlcmxfY2FsbF9hcmd2KCJWSU06OmJvb3RzdHJhcCIsIChsb25nKUdfRElTQ0FSRCwgYm9vdGFyZ3MpOworICAgIFZJTV9pbml0KCk7CisjaWZkZWYgVVNFX1NGSU8KKyAgICBzZmRpc2MoUGVybElPX3N0ZG91dCgpLCBzZmRjbmV3dmltKCkpOworICAgIHNmZGlzYyhQZXJsSU9fc3RkZXJyKCksIHNmZGNuZXd2aW0oKSk7CisgICAgc2ZzZXRidWYoUGVybElPX3N0ZG91dCgpLCBOVUxMLCAwKTsKKyAgICBzZnNldGJ1ZihQZXJsSU9fc3RkZXJyKCksIE5VTEwsIDApOworI2VuZGlmCit9CisKKy8qCisgKiBwZXJsX2VuZCgpOiBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKyAqLworICAgIHZvaWQKK3BlcmxfZW5kKCkKK3sKKyAgICBpZiAocGVybF9pbnRlcnApCisgICAgeworCXBlcmxfcnVuKHBlcmxfaW50ZXJwKTsKKwlwZXJsX2Rlc3RydWN0KHBlcmxfaW50ZXJwKTsKKwlwZXJsX2ZyZWUocGVybF9pbnRlcnApOworCXBlcmxfaW50ZXJwID0gTlVMTDsKKyAgICB9CisjaWZkZWYgRFlOQU1JQ19QRVJMCisgICAgaWYgKGhQZXJsTGliKQorICAgIHsKKwlGcmVlTGlicmFyeShoUGVybExpYik7CisJaFBlcmxMaWIgPSBOVUxMOworICAgIH0KKyNlbmRpZgorfQorCisvKgorICogbXNnX3NwbGl0KCk6IHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBtZXNzYWdlIGhhbmRsaW5nIHJvdXRpbmVzCisgKiBzcGxpdCBhdCAnXG4nIGZpcnN0IHRob3VnaC4KKyAqLworICAgIHZvaWQKK21zZ19zcGxpdChzLCBhdHRyKQorICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWF0dHI7CS8qIGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzICovCit7CisgICAgY2hhciAqbmV4dDsKKyAgICBjaGFyICp0b2tlbiA9IChjaGFyICopczsKKworICAgIHdoaWxlICgobmV4dCA9IHN0cmNocih0b2tlbiwgJ1xuJykpKQorICAgIHsKKwkqbmV4dCsrID0gJ1wwJzsJCQkvKiByZXBsYWNlIFxuIHdpdGggXDAgKi8KKwltc2dfYXR0cigoY2hhcl91ICopdG9rZW4sIGF0dHIpOworCXRva2VuID0gbmV4dDsKKyAgICB9CisgICAgaWYgKCp0b2tlbikKKwltc2dfYXR0cigoY2hhcl91ICopdG9rZW4sIGF0dHIpOworfQorCisjaWZuZGVmIEZFQVRfRVZBTAorLyoKKyAqIFRoaXMgc3R1YiBpcyBuZWVkZWQgYmVjYXVzZSBhbiAiI2lmZGVmIEZFQVRfRVZBTCIgYXJvdW5kIEV2YWwoKSBkb2Vzbid0CisgKiB3b3JrIHByb3Blcmx5LgorICovCisgICAgY2hhcl91ICoKK2V2YWxfdG9fc3RyaW5nKGFyZywgbmV4dGNtZCkKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBjaGFyX3UJKipuZXh0Y21kOworeworICAgIHJldHVybiBOVUxMOworfQorI2VuZGlmCisKKy8qCisgKiBDcmVhdGUgYSBuZXcgcmVmZXJlbmNlIHRvIGFuIFNWIHBvaW50aW5nIHRvIHRoZSBTQ1Igc3RydWN0dXJlCisgKiBUaGUgcGVybF9wcml2YXRlIHBhcnQgb2YgdGhlIFNDUiBzdHJ1Y3R1cmUgcG9pbnRzIHRvIHRoZSBTViwKKyAqIHNvIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBzdWNoIFNWIGZvciBhIHBhcnRpY3VsYXIgU0NSIHN0cnVjdHVyZS4KKyAqIFdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIGhhcyBnb25lIChERVNUUk9ZIGlzIGNhbGxlZCksCisgKiBwZXJsX3ByaXZhdGUgaXMgcmVzZXQ7IFdoZW4gdGhlIHNjcmVlbiBnb2VzIGF3YXkgYmVmb3JlCisgKiBhbGwgcmVmZXJlbmNlcyBhcmUgZ29uZSwgdGhlIHZhbHVlIG9mIHRoZSBTViBpcyByZXNldDsKKyAqIGFueSBzdWJzZXF1ZW50IHVzZSBvZiBhbnkgb2YgdGhvc2UgcmVmZXJlbmNlIHdpbGwgcHJvZHVjZQorICogYSB3YXJuaW5nLiAoc2VlIHR5cGVtYXApCisgKi8KKyNkZWZpbmUgbmV3QU5ZcnYoVFlQRSwgVE5BTUUpCQkJCQlcCitzdGF0aWMgU1YgKgkJCQkJCQlcCituZXcgIyMgVE5BTUUgIyMgcnYocnYsIHB0cikJCQkJCVwKKyAgICBTViAqcnY7CQkJCQkJCVwKKyAgICBUWVBFICpwdHI7CQkJCQkJCVwKK3sJCQkJCQkJCVwKKyAgICBzdl91cGdyYWRlKHJ2LCBTVnRfUlYpOwkJCQkJXAorICAgIGlmICghcHRyLT5wZXJsX3ByaXZhdGUpCQkJCQlcCisgICAgewkJCQkJCQkJXAorCXB0ci0+cGVybF9wcml2YXRlID0gbmV3U1YoMCk7CQkJCVwKKwlzdl9zZXRpdihwdHItPnBlcmxfcHJpdmF0ZSwgKElWKXB0cik7CQkJXAorICAgIH0JCQkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCVwKKwlTdlJFRkNOVF9pbmMocHRyLT5wZXJsX3ByaXZhdGUpOwkJCVwKKyAgICBTdlJWKHJ2KSA9IHB0ci0+cGVybF9wcml2YXRlOwkJCQlcCisgICAgU3ZST0tfb24ocnYpOwkJCQkJCVwKKyAgICByZXR1cm4gc3ZfYmxlc3MocnYsIGd2X3N0YXNocHYoIlZJIiAjVE5BTUUsIFRSVUUpKTsJCVwKK30KKworbmV3QU5ZcnYod2luX1QsIFdJTikKK25ld0FOWXJ2KGJ1Zl9ULCBCVUYpCisKKy8qCisgKiBwZXJsX3dpbl9mcmVlCisgKglSZW1vdmUgYWxsIHJlZmVuY2VzIHRvIHRoZSB3aW5kb3cgdG8gYmUgZGVzdHJveWVkCisgKi8KKyAgICB2b2lkCitwZXJsX3dpbl9mcmVlKHdwKQorICAgIHdpbl9UICp3cDsKK3sKKyAgICBpZiAod3AtPnBlcmxfcHJpdmF0ZSkKKwlzdl9zZXRpdigoU1YgKil3cC0+cGVybF9wcml2YXRlLCAwKTsKKyAgICByZXR1cm47Cit9CisKKyAgICB2b2lkCitwZXJsX2J1Zl9mcmVlKGJwKQorICAgIGJ1Zl9UICpicDsKK3sKKyAgICBpZiAoYnAtPnBlcmxfcHJpdmF0ZSkKKwlzdl9zZXRpdigoU1YgKilicC0+cGVybF9wcml2YXRlLCAwKTsKKyAgICByZXR1cm47Cit9CisKKyNpZm5kZWYgUFJPVE8KKyMgaWYgKFBFUkxfUkVWSVNJT04gPT0gNSkgJiYgKFBFUkxfVkVSU0lPTiA+PSA4KQorSTMyIGN1cl92YWwocFRIWF8gSVYgaXYsIFNWICpzdik7CisjIGVsc2UKK0kzMiBjdXJfdmFsKElWIGl2LCBTViAqc3YpOworI2VuZGlmCisKKy8qCisgKiBIYW5kbGVyIGZvciB0aGUgbWFnaWMgdmFyaWFibGVzICRtYWluOjpjdXJ3aW4gYW5kICRtYWluOjpjdXJidWYuCisgKiBUaGUgaGFuZGxlciBpcyBwdXQgaW50byB0aGUgbWFnaWMgdnRibCBmb3IgdGhlc2UgdmFyaWFibGVzLgorICogKFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBDLWxldmVsIGVxdWl2YWxlbnQgb2YgYSB0aWVkIHZhcmlhYmxlKS4KKyAqIFRoZXJlIGlzIG5vICJzZXQiIGZ1bmN0aW9uIGFzIHRoZSB2YXJpYWJsZXMgYXJlIHJlYWQtb25seS4KKyAqLworIyBpZiAoUEVSTF9SRVZJU0lPTiA9PSA1KSAmJiAoUEVSTF9WRVJTSU9OID49IDgpCitJMzIgY3VyX3ZhbChwVEhYXyBJViBpdiwgU1YgKnN2KQorIyBlbHNlCitJMzIgY3VyX3ZhbChJViBpdiwgU1YgKnN2KQorIyBlbmRpZgoreworICAgIFNWICpydjsKKyAgICBpZiAoaXYgPT0gMCkKKwlydiA9IG5ld1dJTnJ2KG5ld1NWKDApLCBjdXJ3aW4pOworICAgIGVsc2UKKwlydiA9IG5ld0JVRnJ2KG5ld1NWKDApLCBjdXJidWYpOworICAgIHN2X3NldHN2KHN2LCBydik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogIVBST1RPICovCisKK3N0cnVjdCB1ZnVuY3MgY3dfZnVuY3MgPSB7IGN1cl92YWwsIDAsIDAgfTsKK3N0cnVjdCB1ZnVuY3MgY2JfZnVuY3MgPSB7IGN1cl92YWwsIDAsIDEgfTsKKworLyoKKyAqIFZJTV9pbml0KCk6IFZpbS1zcGVjaWZpYyBpbml0aWFsaXNhdGlvbi4KKyAqIE1ha2UgdGhlIG1hZ2ljYWwgbWFpbjo6Y3Vyd2luIGFuZCBtYWluOjpjdXJidWYgdmFyaWFibGVzCisgKi8KKyAgICBzdGF0aWMgdm9pZAorVklNX2luaXQoKQoreworICAgIHN0YXRpYyBjaGFyIGN3W10gPSAibWFpbjo6Y3Vyd2luIjsKKyAgICBzdGF0aWMgY2hhciBjYltdID0gIm1haW46OmN1cmJ1ZiI7CisgICAgU1YgKnN2OworCisgICAgc3YgPSBwZXJsX2dldF9zdihjdywgVFJVRSk7CisgICAgc3ZfbWFnaWMoc3YsIE5VTEwsICdVJywgKGNoYXIgKikmY3dfZnVuY3MsIHNpemVvZihjd19mdW5jcykpOworICAgIFN2UkVBRE9OTFlfb24oc3YpOworCisgICAgc3YgPSBwZXJsX2dldF9zdihjYiwgVFJVRSk7CisgICAgc3ZfbWFnaWMoc3YsIE5VTEwsICdVJywgKGNoYXIgKikmY2JfZnVuY3MsIHNpemVvZihjYl9mdW5jcykpOworICAgIFN2UkVBRE9OTFlfb24oc3YpOworCisgICAgLyoKKyAgICAgKiBTZXR1cCB0aGUgU2FmZSBjb21wYXJ0bWVudC4KKyAgICAgKiBJdCBzaG91bGRuJ3QgYmUgYSBmYXRhbCBlcnJvciBpZiB0aGUgU2FmZSBtb2R1bGUgaXMgbWlzc2luZy4KKyAgICAgKiBYWFg6IE9ubHkgc2hhcmVzIHRoZSAnTXNnJyByb3V0aW5lICh3aGljaCBoYXMgdG8gYmUgY2FsbGVkCisgICAgICogbGlrZSAnTXNnKC4uLiknKS4KKyAgICAgKi8KKyAgICAodm9pZClwZXJsX2V2YWxfcHYoICJpZiAoIGV2YWwoICdyZXF1aXJlIFNhZmUnICkgKSB7ICRWSU06OnNhZmUgPSBTYWZlLT5uZXcoKTsgJFZJTTo6c2FmZS0+c2hhcmVfZnJvbSggJ1ZJTScsIFsnTXNnJ10gKTsgfSIsIEdfRElTQ0FSRCB8IEdfVk9JRCApOworCit9CisKKyNpZmRlZiBEWU5BTUlDX1BFUkwKK3N0YXRpYyBjaGFyICplX25vcGVybCA9IE5fKCJTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgUGVybCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIik7CisjZW5kaWYKKworLyoKKyAqICI6cGVybCIKKyAqLworICAgIHZvaWQKK2V4X3BlcmwoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyCSplcnI7CisgICAgY2hhcgkqc2NyaXB0OworICAgIFNUUkxFTglsZW5ndGg7CisgICAgU1YJCSpzdjsKKyAgICBTVgkJKnNhZmU7CisKKyAgICBzY3JpcHQgPSAoY2hhciAqKXNjcmlwdF9nZXQoZWFwLCBlYXAtPmFyZyk7CisgICAgaWYgKGVhcC0+c2tpcCkKKyAgICB7CisJdmltX2ZyZWUoc2NyaXB0KTsKKwlyZXR1cm47CisgICAgfQorCisgICAgaWYgKHBlcmxfaW50ZXJwID09IE5VTEwpCisgICAgeworI2lmZGVmIERZTkFNSUNfUEVSTAorCWlmICghcGVybF9lbmFibGVkKFRSVUUpKQorCXsKKwkgICAgRU1TRyhfKGVfbm9wZXJsKSk7CisJICAgIHZpbV9mcmVlKHNjcmlwdCk7CisJICAgIHJldHVybjsKKwl9CisjZW5kaWYKKwlwZXJsX2luaXQoKTsKKyAgICB9CisKKyAgICB7CisgICAgZFNQOworICAgIEVOVEVSOworICAgIFNBVkVUTVBTOworCisgICAgaWYgKHNjcmlwdCA9PSBOVUxMKQorCXN2ID0gbmV3U1ZwdigoY2hhciAqKWVhcC0+YXJnLCAwKTsKKyAgICBlbHNlCisgICAgeworCXN2ID0gbmV3U1ZwdihzY3JpcHQsIDApOworCXZpbV9mcmVlKHNjcmlwdCk7CisgICAgfQorCisjaWZkZWYgSEFWRV9TQU5EQk9YCisgICAgaWYgKHNhbmRib3gpCisgICAgeworCWlmICgoc2FmZSA9IHBlcmxfZ2V0X3N2KCAiVklNOjpzYWZlIiwgRkFMU0UgKSkgPT0gTlVMTCB8fCAhU3ZUUlVFKHNhZmUpKQorCSAgICBFTVNHKF8oIkUyOTk6IFBlcmwgZXZhbHVhdGlvbiBmb3JiaWRkZW4gaW4gc2FuZGJveCB3aXRob3V0IHRoZSBTYWZlIG1vZHVsZSIpKTsKKwllbHNlCisJeworCSAgICBQVVNITUFSSyhTUCk7CisJICAgIFhQVVNIcyhzYWZlKTsKKwkgICAgWFBVU0hzKHN2KTsKKwkgICAgUFVUQkFDSzsKKwkgICAgcGVybF9jYWxsX21ldGhvZCgicmV2YWwiLCBHX0RJU0NBUkQpOworCX0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJcGVybF9ldmFsX3N2KHN2LCBHX0RJU0NBUkQgfCBHX05PQVJHUyk7CisKKyAgICBTdlJFRkNOVF9kZWMoc3YpOworCisgICAgZXJyID0gU3ZQVihHdlNWKFBMX2Vycmd2KSwgbGVuZ3RoKTsKKworICAgIEZSRUVUTVBTOworICAgIExFQVZFOworCisgICAgaWYgKCFsZW5ndGgpCisJcmV0dXJuOworCisgICAgbXNnX3NwbGl0KChjaGFyX3UgKillcnIsIGhpZ2hsaWdodF9hdHRyW0hMRl9FXSk7CisgICAgcmV0dXJuOworICAgIH0KK30KKworICAgIHN0YXRpYyBpbnQKK3JlcGxhY2VfbGluZShsaW5lLCBlbmQpCisgICAgbGluZW5yX1QJKmxpbmUsICplbmQ7Cit7CisgICAgY2hhciAqc3RyOworCisgICAgaWYgKFN2T0soR3ZTVihQTF9kZWZndikpKQorICAgIHsKKwlzdHIgPSBTdlBWKEd2U1YoUExfZGVmZ3YpLCBQTF9uYSk7CisJbWxfcmVwbGFjZSgqbGluZSwgKGNoYXJfdSAqKXN0ciwgMSk7CisJY2hhbmdlZF9ieXRlcygqbGluZSwgMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJbWxfZGVsZXRlKCpsaW5lLCBGQUxTRSk7CisJZGVsZXRlZF9saW5lc19tYXJrKCpsaW5lLCAxTCk7CisJLS0oKmVuZCk7CisJLS0oKmxpbmUpOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiAiOnBlcmxkbyIuCisgKi8KKyAgICB2b2lkCitleF9wZXJsZG8oZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBTVFJMRU4JbGVuZ3RoOworICAgIFNWCQkqc3Y7CisgICAgY2hhcgkqc3RyOworICAgIGxpbmVucl9UCWk7CisKKyAgICBpZiAoYnVmZW1wdHkoKSkKKwlyZXR1cm47CisKKyAgICBpZiAocGVybF9pbnRlcnAgPT0gTlVMTCkKKyAgICB7CisjaWZkZWYgRFlOQU1JQ19QRVJMCisJaWYgKCFwZXJsX2VuYWJsZWQoVFJVRSkpCisJeworCSAgICBFTVNHKF8oZV9ub3BlcmwpKTsKKwkgICAgcmV0dXJuOworCX0KKyNlbmRpZgorCXBlcmxfaW5pdCgpOworICAgIH0KKyAgICB7CisgICAgZFNQOworICAgIGxlbmd0aCA9IHN0cmxlbigoY2hhciAqKWVhcC0+YXJnKTsKKyAgICBzdiA9IG5ld1NWKGxlbmd0aCArIHNpemVvZigic3ViIFZJTTo6cGVybGRvIHsiKS0xICsgMSk7CisgICAgc3Zfc2V0cHZuKHN2LCAic3ViIFZJTTo6cGVybGRvIHsiLCBzaXplb2YoInN1YiBWSU06OnBlcmxkbyB7IiktMSk7CisgICAgc3ZfY2F0cHZuKHN2LCAoY2hhciAqKWVhcC0+YXJnLCBsZW5ndGgpOworICAgIHN2X2NhdHB2bihzdiwgIn0iLCAxKTsKKyAgICBwZXJsX2V2YWxfc3Yoc3YsIEdfRElTQ0FSRCB8IEdfTk9BUkdTKTsKKyAgICBTdlJFRkNOVF9kZWMoc3YpOworICAgIHN0ciA9IFN2UFYoR3ZTVihQTF9lcnJndiksIGxlbmd0aCk7CisgICAgaWYgKGxlbmd0aCkKKwlnb3RvIGVycjsKKworICAgIGlmICh1X3NhdmUoZWFwLT5saW5lMSAtIDEsIGVhcC0+bGluZTIgKyAxKSAhPSBPSykKKwlyZXR1cm47CisKKyAgICBFTlRFUjsKKyAgICBTQVZFVE1QUzsKKyAgICBmb3IgKGkgPSBlYXAtPmxpbmUxOyBpIDw9IGVhcC0+bGluZTI7IGkrKykKKyAgICB7CisJc3Zfc2V0cHYoR3ZTVihQTF9kZWZndiksKGNoYXIgKiltbF9nZXQoaSkpOworCVBVU0hNQVJLKHNwKTsKKwlwZXJsX2NhbGxfcHYoIlZJTTo6cGVybGRvIiwgR19TQ0FMQVIgfCBHX0VWQUwpOworCXN0ciA9IFN2UFYoR3ZTVihQTF9lcnJndiksIGxlbmd0aCk7CisJaWYgKGxlbmd0aCkKKwkgICAgYnJlYWs7CisJU1BBR0FJTjsKKwlpZiAoU3ZUUlVFeChQT1BzKSkKKwl7CisJICAgIGlmIChyZXBsYWNlX2xpbmUoJmksICZlYXAtPmxpbmUyKSAhPSBPSykKKwkgICAgeworCQlQVVRCQUNLOworCQlicmVhazsKKwkgICAgfQorCX0KKwlQVVRCQUNLOworICAgIH0KKyAgICBGUkVFVE1QUzsKKyAgICBMRUFWRTsKKyAgICBjaGVja19jdXJzb3IoKTsKKyAgICB1cGRhdGVfc2NyZWVuKE5PVF9WQUxJRCk7CisgICAgaWYgKCFsZW5ndGgpCisJcmV0dXJuOworCitlcnI6CisgICAgbXNnX3NwbGl0KChjaGFyX3UgKilzdHIsIGhpZ2hsaWdodF9hdHRyW0hMRl9FXSk7CisgICAgcmV0dXJuOworICAgIH0KK30KKworWFMoWFNfVklNX01zZyk7CitYUyhYU19WSU1fU2V0T3B0aW9uKTsKK1hTKFhTX1ZJTV9Eb0NvbW1hbmQpOworWFMoWFNfVklNX0V2YWwpOworWFMoWFNfVklNX0J1ZmZlcnMpOworWFMoWFNfVklNX1dpbmRvd3MpOworWFMoWFNfVklXSU5fREVTVFJPWSk7CitYUyhYU19WSVdJTl9CdWZmZXIpOworWFMoWFNfVklXSU5fU2V0SGVpZ2h0KTsKK1hTKFhTX1ZJV0lOX0N1cnNvcik7CitYUyhYU19WSUJVRl9ERVNUUk9ZKTsKK1hTKFhTX1ZJQlVGX05hbWUpOworWFMoWFNfVklCVUZfTnVtYmVyKTsKK1hTKFhTX1ZJQlVGX0NvdW50KTsKK1hTKFhTX1ZJQlVGX0dldCk7CitYUyhYU19WSUJVRl9TZXQpOworWFMoWFNfVklCVUZfRGVsZXRlKTsKK1hTKFhTX1ZJQlVGX0FwcGVuZCk7CitYUyhib290X1ZJTSk7CisKKyAgICBzdGF0aWMgdm9pZAoreHNfaW5pdChwVEhYKQoreworICAgIGNoYXIgKmZpbGUgPSBfX0ZJTEVfXzsKKworICAgIC8qIER5bmFMb2FkZXIgaXMgYSBzcGVjaWFsIGNhc2UgKi8KKyAgICBuZXdYUygiRHluYUxvYWRlcjo6Ym9vdF9EeW5hTG9hZGVyIiwgYm9vdF9EeW5hTG9hZGVyLCBmaWxlKTsKKyAgICBuZXdYUygiVklNOjpib290c3RyYXAiLCBib290X1ZJTSwgZmlsZSk7Cit9CisKK3R5cGVkZWYgd2luX1QgKglWSVdJTjsKK3R5cGVkZWYgYnVmX1QgKglWSUJVRjsKKworTU9EVUxFID0gVklNCSAgICBQQUNLQUdFID0gVklNCisKK3ZvaWQKK01zZyh0ZXh0LCBobD1OVUxMKQorICAgIGNoYXIJKnRleHQ7CisgICAgY2hhcgkqaGw7CisKKyAgICBQUkVJTklUOgorICAgIGludAkJYXR0cjsKKyAgICBpbnQJCWlkOworCisgICAgUFBDT0RFOgorICAgIGlmICh0ZXh0ICE9IE5VTEwpCisgICAgeworCWF0dHIgPSAwOworCWlmIChobCAhPSBOVUxMKQorCXsKKwkgICAgaWQgPSBzeW5fbmFtZTJpZCgoY2hhcl91ICopaGwpOworCSAgICBpZiAoaWQgIT0gMCkKKwkJYXR0ciA9IHN5bl9pZDJhdHRyKGlkKTsKKwl9CisJbXNnX3NwbGl0KChjaGFyX3UgKil0ZXh0LCBhdHRyKTsKKyAgICB9CisKK3ZvaWQKK1NldE9wdGlvbihsaW5lKQorICAgIGNoYXIgKmxpbmU7CisKKyAgICBQUENPREU6CisgICAgaWYgKGxpbmUgIT0gTlVMTCkKKwlkb19zZXQoKGNoYXJfdSAqKWxpbmUsIDApOworICAgIHVwZGF0ZV9zY3JlZW4oTk9UX1ZBTElEKTsKKwordm9pZAorRG9Db21tYW5kKGxpbmUpCisgICAgY2hhciAqbGluZTsKKworICAgIFBQQ09ERToKKyAgICBpZiAobGluZSAhPSBOVUxMKQorCWRvX2NtZGxpbmVfY21kKChjaGFyX3UgKilsaW5lKTsKKwordm9pZAorRXZhbChzdHIpCisgICAgY2hhciAqc3RyOworCisgICAgUFJFSU5JVDoKKwljaGFyX3UgKnZhbHVlOworICAgIFBQQ09ERToKKwl2YWx1ZSA9IGV2YWxfdG9fc3RyaW5nKChjaGFyX3UgKilzdHIsIChjaGFyX3UqKikwKTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwl7CisJICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYoMCkpKTsKKwkgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdigiIiwgMCkpKTsKKwl9CisJZWxzZQorCXsKKwkgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdigxKSkpOworCSAgICBYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KChjaGFyICopdmFsdWUsIDApKSk7CisJICAgIHZpbV9mcmVlKHZhbHVlKTsKKwl9CisKK3ZvaWQKK0J1ZmZlcnMoLi4uKQorCisgICAgUFJFSU5JVDoKKyAgICBidWZfVCAqdmltYnVmOworICAgIGludCBpLCBiOworCisgICAgUFBDT0RFOgorICAgIGlmIChpdGVtcyA9PSAwKQorICAgIHsKKwlpZiAoR0lNTUUgPT0gR19TQ0FMQVIpCisJeworCSAgICBpID0gMDsKKwkgICAgZm9yICh2aW1idWYgPSBmaXJzdGJ1ZjsgdmltYnVmOyB2aW1idWYgPSB2aW1idWYtPmJfbmV4dCkKKwkJKytpOworCisJICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYoaSkpKTsKKwl9CisJZWxzZQorCXsKKwkgICAgZm9yICh2aW1idWYgPSBmaXJzdGJ1ZjsgdmltYnVmOyB2aW1idWYgPSB2aW1idWYtPmJfbmV4dCkKKwkJWFBVU0hzKG5ld0JVRnJ2KG5ld1NWKDApLCB2aW1idWYpKTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IGl0ZW1zOyBpKyspCisJeworCSAgICBTViAqc3YgPSBTVChpKTsKKwkgICAgaWYgKFN2SU9LKHN2KSkKKwkJYiA9IFN2SVYoU1QoaSkpOworCSAgICBlbHNlCisJICAgIHsKKwkJY2hhcl91ICpwYXQ7CisJCVNUUkxFTiBsZW47CisKKwkJcGF0ID0gKGNoYXJfdSAqKVN2UFYoc3YsIGxlbik7CisJCSsrZW1zZ19vZmY7CisJCWIgPSBidWZsaXN0X2ZpbmRwYXQocGF0LCBwYXQrbGVuLCBGQUxTRSwgRkFMU0UpOworCQktLWVtc2dfb2ZmOworCSAgICB9CisKKwkgICAgaWYgKGIgPj0gMCkKKwkgICAgeworCQl2aW1idWYgPSBidWZsaXN0X2ZpbmRucihiKTsKKwkJaWYgKHZpbWJ1ZikKKwkJICAgIFhQVVNIcyhuZXdCVUZydihuZXdTVigwKSwgdmltYnVmKSk7CisJICAgIH0KKwl9CisgICAgfQorCit2b2lkCitXaW5kb3dzKC4uLikKKworICAgIFBSRUlOSVQ6CisgICAgd2luX1QgICAqdmltd2luOworICAgIGludAkgICAgaSwgdzsKKworICAgIFBQQ09ERToKKyAgICBpZiAoaXRlbXMgPT0gMCkKKyAgICB7CisJaWYgKEdJTU1FID09IEdfU0NBTEFSKQorCSAgICBYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KHdpbl9jb3VudCgpKSkpOworCWVsc2UKKwl7CisJICAgIGZvciAodmltd2luID0gZmlyc3R3aW47IHZpbXdpbiAhPSBOVUxMOyB2aW13aW4gPSBXX05FWFQodmltd2luKSkKKwkJWFBVU0hzKG5ld1dJTnJ2KG5ld1NWKDApLCB2aW13aW4pKTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IGl0ZW1zOyBpKyspCisJeworCSAgICB3ID0gU3ZJVihTVChpKSk7CisJICAgIHZpbXdpbiA9IHdpbl9maW5kX25yKHcpOworCSAgICBpZiAodmltd2luKQorCQlYUFVTSHMobmV3V0lOcnYobmV3U1YoMCksIHZpbXdpbikpOworCX0KKyAgICB9CisKK01PRFVMRSA9IFZJTQkgICAgUEFDS0FHRSA9IFZJV0lOCisKK3ZvaWQKK0RFU1RST1kod2luKQorICAgIFZJV0lOIHdpbgorCisgICAgQ09ERToKKyAgICBpZiAod2luX3ZhbGlkKHdpbikpCisJd2luLT5wZXJsX3ByaXZhdGUgPSAwOworCitTViAqCitCdWZmZXIod2luKQorICAgIFZJV0lOIHdpbgorCisgICAgQ09ERToKKyAgICBpZiAoIXdpbl92YWxpZCh3aW4pKQorCXdpbiA9IGN1cndpbjsKKyAgICBSRVRWQUwgPSBuZXdCVUZydihuZXdTVigwKSwgd2luLT53X2J1ZmZlcik7CisgICAgT1VUUFVUOgorICAgIFJFVFZBTAorCit2b2lkCitTZXRIZWlnaHQod2luLCBoZWlnaHQpCisgICAgVklXSU4gd2luCisgICAgaW50IGhlaWdodDsKKworICAgIFBSRUlOSVQ6CisgICAgd2luX1QgKnNhdmV3aW47CisKKyAgICBQUENPREU6CisgICAgaWYgKCF3aW5fdmFsaWQod2luKSkKKwl3aW4gPSBjdXJ3aW47CisgICAgc2F2ZXdpbiA9IGN1cndpbjsKKyAgICBjdXJ3aW4gPSB3aW47CisgICAgd2luX3NldGhlaWdodChoZWlnaHQpOworICAgIGN1cndpbiA9IHNhdmV3aW47CisKK3ZvaWQKK0N1cnNvcih3aW4sIC4uLikKKyAgICBWSVdJTiB3aW4KKworICAgIFBQQ09ERToKKyAgICBpZihpdGVtcyA9PSAxKQorICAgIHsKKyAgICAgIEVYVEVORChzcCwgMik7CisgICAgICBpZiAoIXdpbl92YWxpZCh3aW4pKQorCSAgd2luID0gY3Vyd2luOworICAgICAgUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KHdpbi0+d19jdXJzb3IubG51bSkpKTsKKyAgICAgIFBVU0hzKHN2XzJtb3J0YWwobmV3U1Zpdih3aW4tPndfY3Vyc29yLmNvbCkpKTsKKyAgICB9CisgICAgZWxzZSBpZihpdGVtcyA9PSAzKQorICAgIHsKKyAgICAgIGludCBsbnVtLCBjb2w7CisKKyAgICAgIGlmICghd2luX3ZhbGlkKHdpbikpCisJICB3aW4gPSBjdXJ3aW47CisgICAgICBsbnVtID0gU3ZJVihTVCgxKSk7CisgICAgICBjb2wgPSBTdklWKFNUKDIpKTsKKyAgICAgIHdpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisgICAgICB3aW4tPndfY3Vyc29yLmNvbCA9IGNvbDsKKyAgICAgIGNoZWNrX2N1cnNvcigpOwkJICAgIC8qIHB1dCBjdXJzb3Igb24gYW4gZXhpc3RpbmcgbGluZSAqLworICAgICAgdXBkYXRlX3NjcmVlbihOT1RfVkFMSUQpOworICAgIH0KKworTU9EVUxFID0gVklNCSAgICBQQUNLQUdFID0gVklCVUYKKwordm9pZAorREVTVFJPWSh2aW1idWYpCisgICAgVklCVUYgdmltYnVmOworCisgICAgQ09ERToKKyAgICBpZiAoYnVmX3ZhbGlkKHZpbWJ1ZikpCisJdmltYnVmLT5wZXJsX3ByaXZhdGUgPSAwOworCit2b2lkCitOYW1lKHZpbWJ1ZikKKyAgICBWSUJVRiB2aW1idWY7CisKKyAgICBQUENPREU6CisgICAgaWYgKCFidWZfdmFsaWQodmltYnVmKSkKKwl2aW1idWYgPSBjdXJidWY7CisgICAgLyogTm8gZmlsZSBuYW1lIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nICovCisgICAgaWYgKHZpbWJ1Zi0+Yl9mbmFtZSA9PSBOVUxMKQorCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoIiIsIDApKSk7CisgICAgZWxzZQorCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoKGNoYXIgKil2aW1idWYtPmJfZm5hbWUsIDApKSk7CisKK3ZvaWQKK051bWJlcih2aW1idWYpCisgICAgVklCVUYgdmltYnVmOworCisgICAgUFBDT0RFOgorICAgIGlmICghYnVmX3ZhbGlkKHZpbWJ1ZikpCisJdmltYnVmID0gY3VyYnVmOworICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYodmltYnVmLT5iX2ZudW0pKSk7CisKK3ZvaWQKK0NvdW50KHZpbWJ1ZikKKyAgICBWSUJVRiB2aW1idWY7CisKKyAgICBQUENPREU6CisgICAgaWYgKCFidWZfdmFsaWQodmltYnVmKSkKKwl2aW1idWYgPSBjdXJidWY7CisgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Zpdih2aW1idWYtPmJfbWwubWxfbGluZV9jb3VudCkpKTsKKwordm9pZAorR2V0KHZpbWJ1ZiwgLi4uKQorICAgIFZJQlVGIHZpbWJ1ZjsKKworICAgIFBSRUlOSVQ6CisgICAgY2hhcl91ICpsaW5lOworICAgIGludCBpOworICAgIGxvbmcgbG51bTsKKyAgICBQUENPREU6CisgICAgaWYgKGJ1Zl92YWxpZCh2aW1idWYpKQorICAgIHsKKwlmb3IgKGkgPSAxOyBpIDwgaXRlbXM7IGkrKykKKwl7CisJICAgIGxudW0gPSBTdklWKFNUKGkpKTsKKwkgICAgaWYgKGxudW0gPiAwICYmIGxudW0gPD0gdmltYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJICAgIHsKKwkJbGluZSA9IG1sX2dldF9idWYodmltYnVmLCBsbnVtLCBGQUxTRSk7CisJCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoKGNoYXIgKilsaW5lLCAwKSkpOworCSAgICB9CisJfQorICAgIH0KKwordm9pZAorU2V0KHZpbWJ1ZiwgLi4uKQorICAgIFZJQlVGIHZpbWJ1ZjsKKworICAgIFBSRUlOSVQ6CisgICAgaW50IGk7CisgICAgbG9uZyBsbnVtOworICAgIGNoYXIgKmxpbmU7CisgICAgYnVmX1QgKnNhdmVidWY7CisgICAgUFBDT0RFOgorICAgIGlmIChidWZfdmFsaWQodmltYnVmKSkKKyAgICB7CisJaWYgKGl0ZW1zIDwgMykKKwkgICAgY3JvYWsoIlVzYWdlOiBWSUJVRjo6U2V0KHZpbWJ1ZiwgbG51bSwgQGxpbmVzKSIpOworCisJbG51bSA9IFN2SVYoU1QoMSkpOworCWZvcihpID0gMjsgaSA8IGl0ZW1zOyBpKyssIGxudW0rKykKKwl7CisJICAgIGxpbmUgPSBTdlBWKFNUKGkpLFBMX25hKTsKKwkgICAgaWYgKGxudW0gPiAwICYmIGxudW0gPD0gdmltYnVmLT5iX21sLm1sX2xpbmVfY291bnQgJiYgbGluZSAhPSBOVUxMKQorCSAgICB7CisJCXNhdmVidWYgPSBjdXJidWY7CisJCWN1cmJ1ZiA9IHZpbWJ1ZjsKKwkJaWYgKHVfc2F2ZXN1YihsbnVtKSA9PSBPSykKKwkJeworCQkgICAgbWxfcmVwbGFjZShsbnVtLCAoY2hhcl91ICopbGluZSwgVFJVRSk7CisJCSAgICBjaGFuZ2VkX2J5dGVzKGxudW0sIDApOworCQl9CisJCWN1cmJ1ZiA9IHNhdmVidWY7CisJICAgIH0KKwl9CisgICAgfQorCit2b2lkCitEZWxldGUodmltYnVmLCAuLi4pCisgICAgVklCVUYgdmltYnVmOworCisgICAgUFJFSU5JVDoKKyAgICBsb25nIGksIGxudW0gPSAwLCBjb3VudCA9IDA7CisgICAgYnVmX1QgKnNhdmVidWY7CisgICAgUFBDT0RFOgorICAgIGlmIChidWZfdmFsaWQodmltYnVmKSkKKyAgICB7CisJaWYgKGl0ZW1zID09IDIpCisJeworCSAgICBsbnVtID0gU3ZJVihTVCgxKSk7CisJICAgIGNvdW50ID0gMTsKKwl9CisJZWxzZSBpZiAoaXRlbXMgPT0gMykKKwl7CisJICAgIGxudW0gPSBTdklWKFNUKDEpKTsKKwkgICAgY291bnQgPSAxICsgU3ZJVihTVCgyKSkgLSBsbnVtOworCSAgICBpZihjb3VudCA9PSAwKQorCQljb3VudCA9IDE7CisJICAgIGlmKGNvdW50IDwgMCkKKwkgICAgeworCQlsbnVtIC09IGNvdW50OworCQljb3VudCA9IC1jb3VudDsKKwkgICAgfQorCX0KKwlpZiAoaXRlbXMgPj0gMikKKwl7CisJICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCSAgICB7CisJCWlmIChsbnVtID4gMCAmJiBsbnVtIDw9IHZpbWJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQl7CisJCSAgICBzYXZlYnVmID0gY3VyYnVmOworCQkgICAgY3VyYnVmID0gdmltYnVmOworCQkgICAgaWYgKHVfc2F2ZWRlbChsbnVtLCAxKSA9PSBPSykKKwkJICAgIHsKKwkJCW1sX2RlbGV0ZShsbnVtLCAwKTsKKwkJCWRlbGV0ZWRfbGluZXNfbWFyayhsbnVtLCAxTCk7CisJCQlpZiAoc2F2ZWJ1ZiA9PSBjdXJidWYpCisJCQkgICAgY2hlY2tfY3Vyc29yKCk7CisJCSAgICB9CisJCSAgICBjdXJidWYgPSBzYXZlYnVmOworCQkgICAgdXBkYXRlX2N1cmJ1ZihWQUxJRCk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKK3ZvaWQKK0FwcGVuZCh2aW1idWYsIC4uLikKKyAgICBWSUJVRiB2aW1idWY7CisKKyAgICBQUkVJTklUOgorICAgIGludAkJaTsKKyAgICBsb25nCWxudW07CisgICAgY2hhcgkqbGluZTsKKyAgICBidWZfVAkqc2F2ZWJ1ZjsKKyAgICBQUENPREU6CisgICAgaWYgKGJ1Zl92YWxpZCh2aW1idWYpKQorICAgIHsKKwlpZiAoaXRlbXMgPCAzKQorCSAgICBjcm9haygiVXNhZ2U6IFZJQlVGOjpBcHBlbmQodmltYnVmLCBsbnVtLCBAbGluZXMpIik7CisKKwlsbnVtID0gU3ZJVihTVCgxKSk7CisJZm9yIChpID0gMjsgaSA8IGl0ZW1zOyBpKyssIGxudW0rKykKKwl7CisJICAgIGxpbmUgPSBTdlBWKFNUKGkpLFBMX25hKTsKKwkgICAgaWYgKGxudW0gPj0gMCAmJiBsbnVtIDw9IHZpbWJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ICYmIGxpbmUgIT0gTlVMTCkKKwkgICAgeworCQlzYXZlYnVmID0gY3VyYnVmOworCQljdXJidWYgPSB2aW1idWY7CisJCWlmICh1X2luc3N1YihsbnVtICsgMSkgPT0gT0spCisJCXsKKwkJICAgIG1sX2FwcGVuZChsbnVtLCAoY2hhcl91ICopbGluZSwgKGNvbG5yX1QpMCwgRkFMU0UpOworCQkgICAgYXBwZW5kZWRfbGluZXNfbWFyayhsbnVtLCAxTCk7CisJCX0KKwkJY3VyYnVmID0gc2F2ZWJ1ZjsKKwkJdXBkYXRlX2N1cmJ1ZihWQUxJRCk7CisJICAgIH0KKwl9CisgICAgfQorCmRpZmYgLS1naXQgYS9zcmMvaWZfcGVybHNmaW8uYyBiL3NyYy9pZl9wZXJsc2Zpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZTFiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaWZfcGVybHNmaW8uYwpAQCAtMCwwICsxLDY2IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisvKgorICogaWZfcGVybHNmaW8uYzogU3BlY2lhbCBJL08gZnVuY3Rpb25zIGZvciBQZXJsIGludGVyZmFjZS4KKyAqLworCisjZGVmaW5lIF9tZW1vcnlfaAkvKiBhdm9pZCBtZW1zZXQgcmVkZWNsYXJhdGlvbiAqLworI2RlZmluZSBJTl9QRVJMX0ZJTEUJLyogZG9uJ3QgaW5jbHVkZSBpZl9wZXJsLnBybyBmcm9tIHByb3QuaCAqLworCisjaW5jbHVkZSAidmltLmgiCisKKyNpZiBkZWZpbmVkKFVTRV9TRklPKSB8fCBkZWZpbmVkKFBST1RPKQorCisjaWZuZGVmIFVTRV9TRklPCS8qIGp1c3QgZ2VuZXJhdGluZyBwcm90b3R5cGVzICovCisjIGRlZmluZSBTZmlvX3QgaW50CisjIGRlZmluZSBTZmRpc2NfdCBpbnQKKyNlbmRpZgorCisjZGVmaW5lIE5JTCh0eXBlKQkoKHR5cGUpMCkKKworICAgIHN0YXRpYyBpbnQKK3Nmdmltd3JpdGUoZiwgYnVmLCBuLCBkaXNjKQorICAgIFNmaW9fdAkgICAgKmY7CQkvKiBzdHJlYW0gaW52b2x2ZWQgKi8KKyAgICBjaGFyCSAgICAqYnVmOwkvKiBidWZmZXIgdG8gcmVhZCBmcm9tICovCisgICAgaW50CQkgICAgbjsJCS8qIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSAqLworICAgIFNmZGlzY190CSAgICAqZGlzYzsJLyogZGlzY2lwbGluZSAqLworeworICAgIGNoYXJfdSAqc3RyOworCisgICAgc3RyID0gdmltX3N0cm5zYXZlKChjaGFyX3UgKilidWYsIG4pOworICAgIGlmIChzdHIgPT0gTlVMTCkKKwlyZXR1cm4gMDsKKyAgICBtc2dfc3BsaXQoKGNoYXIgKilzdHIpOworICAgIHZpbV9mcmVlKHN0cik7CisKKyAgICByZXR1cm4gbjsKK30KKworLyoKKyAqIHNmZGNuZXdudmkgLS0KKyAqICBDcmVhdGUgVmltIGRpc2NpcGxpbmUKKyAqLworICAgIFNmZGlzY190ICoKK3NmZGNuZXd2aW0oKQoreworICAgIFNmZGlzY190CSpkaXNjOworCisgICAgZGlzYyA9IChTZmRpc2NfdCAqKWFsbG9jKCh1bnNpZ25lZClzaXplb2YoU2ZkaXNjX3QpKTsKKyAgICBpZiAoZGlzYyA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgZGlzYy0+cmVhZGYgPSAoU2ZyZWFkX2YpTlVMTDsKKyAgICBkaXNjLT53cml0ZWYgPSBzZnZpbXdyaXRlOworICAgIGRpc2MtPnNlZWtmID0gKFNmc2Vla19mKU5VTEw7CisgICAgZGlzYy0+ZXhjZXB0ZiA9IChTZmV4Y2VwdF9mKU5VTEw7CisKKyAgICByZXR1cm4gZGlzYzsKK30KKworI2VuZGlmIC8qIFVTRV9TRklPICovCmRpZmYgLS1naXQgYS9zcmMvaWZfcHl0aG9uLmMgYi9zcmMvaWZfcHl0aG9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjNDM2NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pZl9weXRob24uYwpAQCAtMCwwICsxLDI4MDcgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKy8qCisgKiBQeXRob24gZXh0ZW5zaW9ucyBieSBQYXVsIE1vb3JlLgorICogQ2hhbmdlcyBmb3IgVW5peCBieSBEYXZpZCBMZW9uYXJkLgorICoKKyAqIFRoaXMgY29uc2lzdHMgb2YgZm91ciBwYXJ0czoKKyAqIDEuIFB5dGhvbiBpbnRlcnByZXRlciBtYWluIHByb2dyYW0KKyAqIDIuIFB5dGhvbiBvdXRwdXQgc3RyZWFtOiB3cml0ZXMgb3V0cHV0IHZpYSBbZV1tc2coKS4KKyAqIDMuIEltcGxlbWVudGF0aW9uIG9mIHRoZSBWaW0gbW9kdWxlIGZvciBQeXRob24KKyAqIDQuIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBoYW5kbGluZyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gVmltIGFuZCBQeXRob24uCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworLyogUHl0aG9uLmggZGVmaW5lcyBfUE9TSVhfVEhSRUFEUyBpdHNlbGYgKGlmIG5lZWRlZCkgKi8KKyNpZmRlZiBfUE9TSVhfVEhSRUFEUworIyB1bmRlZiBfUE9TSVhfVEhSRUFEUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZCAoSEFWRV9GQ05UTF9IKQorIyB1bmRlZiBIQVZFX0ZDTlRMX0gKKyNlbmRpZgorCisjaWZkZWYgX0RFQlVHCisjIHVuZGVmIF9ERUJVRworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NUREFSR19ICisjIHVuZGVmIEhBVkVfU1REQVJHX0gJLyogUHl0aG9uJ3MgY29uZmlnLmggZGVmaW5lcyBpdCBhcyB3ZWxsLiAqLworI2VuZGlmCisKKyNpbmNsdWRlIDxQeXRob24uaD4KKyNpZiBkZWZpbmVkKE1BQ09TKSAmJiAhZGVmaW5lZChNQUNPU19YX1VOSVgpCisjIGluY2x1ZGUgIm1hY2dsdWUuaCIKKyMgaW5jbHVkZSA8Q29kZUZyYWdtZW50cy5oPgorI2VuZGlmCisjdW5kZWYgbWFpbiAvKiBEZWZpbmVkIGluIHB5dGhvbi5oIC0gYWFyZ2ggKi8KKyN1bmRlZiBIQVZFX0ZDTlRMX0ggLyogQ2xhc2ggd2l0aCBvc193aW4zMi5oICovCisKKyNpZiAhZGVmaW5lZChGRUFUX1BZVEhPTikgJiYgZGVmaW5lZChQUk9UTykKKy8qIFVzZSB0aGlzIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgcHJvdG90eXBlcyB3aXRob3V0IHB5dGhvbiBiZWluZyB1c2VkLiAqLworIyBkZWZpbmUgUHlPYmplY3QgaW50CisjIGRlZmluZSBQeVRocmVhZFN0YXRlIGludAorIyBkZWZpbmUgUHlUeXBlT2JqZWN0IGludAorc3RydWN0IFB5TWV0aG9kRGVmIHsgaW50IGE7IH07CisjIGRlZmluZSBQeVNlcXVlbmNlTWV0aG9kcyBpbnQKKyNlbmRpZgorCisvKiBQYXJzZXIgZmxhZ3MgKi8KKyNkZWZpbmUgc2luZ2xlX2lucHV0CTI1NgorI2RlZmluZSBmaWxlX2lucHV0CTI1NworI2RlZmluZSBldmFsX2lucHV0CTI1OAorCisjaWYgZGVmaW5lZChQWV9WRVJTSU9OX0hFWCkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMjAzMDBGMAorICAvKiBQeXRob24gMi4zOiBjYW4gaW52b2tlICI6cHl0aG9uIiByZWN1cnNpdmVseS4gKi8KKyMgZGVmaW5lIFBZX0NBTl9SRUNVUlNFCisjZW5kaWYKKworI2lmIGRlZmluZWQoRFlOQU1JQ19QWVRIT04pIHx8IGRlZmluZWQoUFJPVE8pCisjIGlmbmRlZiBEWU5BTUlDX1BZVEhPTgorIyAgZGVmaW5lIEhJTlNUQU5DRSBpbnQJCS8qIGZvciBnZW5lcmF0aW5nIHByb3RvdHlwZXMgKi8KKyMgZW5kaWYKKworLyoKKyAqIFdyYXBwZXIgZGVmaW5lcworICovCisjIGRlZmluZSBQeUFyZ19QYXJzZSBkbGxfUHlBcmdfUGFyc2UKKyMgZGVmaW5lIFB5QXJnX1BhcnNlVHVwbGUgZGxsX1B5QXJnX1BhcnNlVHVwbGUKKyMgZGVmaW5lIFB5RGljdF9TZXRJdGVtU3RyaW5nIGRsbF9QeURpY3RfU2V0SXRlbVN0cmluZworIyBkZWZpbmUgUHlFcnJfQmFkQXJndW1lbnQgZGxsX1B5RXJyX0JhZEFyZ3VtZW50CisjIGRlZmluZSBQeUVycl9DbGVhciBkbGxfUHlFcnJfQ2xlYXIKKyMgZGVmaW5lIFB5RXJyX05vTWVtb3J5IGRsbF9QeUVycl9Ob01lbW9yeQorIyBkZWZpbmUgUHlFcnJfT2NjdXJyZWQgZGxsX1B5RXJyX09jY3VycmVkCisjIGRlZmluZSBQeUVycl9TZXROb25lIGRsbF9QeUVycl9TZXROb25lCisjIGRlZmluZSBQeUVycl9TZXRTdHJpbmcgZGxsX1B5RXJyX1NldFN0cmluZworIyBkZWZpbmUgUHlFdmFsX0luaXRUaHJlYWRzIGRsbF9QeUV2YWxfSW5pdFRocmVhZHMKKyMgZGVmaW5lIFB5RXZhbF9SZXN0b3JlVGhyZWFkIGRsbF9QeUV2YWxfUmVzdG9yZVRocmVhZAorIyBkZWZpbmUgUHlFdmFsX1NhdmVUaHJlYWQgZGxsX1B5RXZhbF9TYXZlVGhyZWFkCisjIGlmZGVmIFBZX0NBTl9SRUNVUlNFCisjICBkZWZpbmUgUHlHSUxTdGF0ZV9FbnN1cmUgZGxsX1B5R0lMU3RhdGVfRW5zdXJlCisjICBkZWZpbmUgUHlHSUxTdGF0ZV9SZWxlYXNlIGRsbF9QeUdJTFN0YXRlX1JlbGVhc2UKKyMgZW5kaWYKKyMgZGVmaW5lIFB5SW50X0FzTG9uZyBkbGxfUHlJbnRfQXNMb25nCisjIGRlZmluZSBQeUludF9Gcm9tTG9uZyBkbGxfUHlJbnRfRnJvbUxvbmcKKyMgZGVmaW5lIFB5SW50X1R5cGUgKCpkbGxfUHlJbnRfVHlwZSkKKyMgZGVmaW5lIFB5TGlzdF9HZXRJdGVtIGRsbF9QeUxpc3RfR2V0SXRlbQorIyBkZWZpbmUgUHlMaXN0X05ldyBkbGxfUHlMaXN0X05ldworIyBkZWZpbmUgUHlMaXN0X1NldEl0ZW0gZGxsX1B5TGlzdF9TZXRJdGVtCisjIGRlZmluZSBQeUxpc3RfU2l6ZSBkbGxfUHlMaXN0X1NpemUKKyMgZGVmaW5lIFB5TGlzdF9UeXBlICgqZGxsX1B5TGlzdF9UeXBlKQorIyBkZWZpbmUgUHlJbXBvcnRfSW1wb3J0TW9kdWxlIGRsbF9QeUltcG9ydF9JbXBvcnRNb2R1bGUKKyMgZGVmaW5lIFB5RGljdF9HZXRJdGVtU3RyaW5nIGRsbF9QeURpY3RfR2V0SXRlbVN0cmluZworIyBkZWZpbmUgUHlNb2R1bGVfR2V0RGljdCBkbGxfUHlNb2R1bGVfR2V0RGljdAorIyBkZWZpbmUgUHlSdW5fU2ltcGxlU3RyaW5nIGRsbF9QeVJ1bl9TaW1wbGVTdHJpbmcKKyMgZGVmaW5lIFB5U3RyaW5nX0FzU3RyaW5nIGRsbF9QeVN0cmluZ19Bc1N0cmluZworIyBkZWZpbmUgUHlTdHJpbmdfRnJvbVN0cmluZyBkbGxfUHlTdHJpbmdfRnJvbVN0cmluZworIyBkZWZpbmUgUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUgZGxsX1B5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplCisjIGRlZmluZSBQeVN0cmluZ19TaXplIGRsbF9QeVN0cmluZ19TaXplCisjIGRlZmluZSBQeVN0cmluZ19UeXBlICgqZGxsX1B5U3RyaW5nX1R5cGUpCisjIGRlZmluZSBQeVN5c19TZXRPYmplY3QgZGxsX1B5U3lzX1NldE9iamVjdAorIyBkZWZpbmUgUHlTeXNfU2V0QXJndiBkbGxfUHlTeXNfU2V0QXJndgorIyBkZWZpbmUgUHlUeXBlX1R5cGUgKCpkbGxfUHlUeXBlX1R5cGUpCisjIGRlZmluZSBQeV9CdWlsZFZhbHVlIGRsbF9QeV9CdWlsZFZhbHVlCisjIGRlZmluZSBQeV9GaW5kTWV0aG9kIGRsbF9QeV9GaW5kTWV0aG9kCisjIGRlZmluZSBQeV9Jbml0TW9kdWxlNCBkbGxfUHlfSW5pdE1vZHVsZTQKKyMgZGVmaW5lIFB5X0luaXRpYWxpemUgZGxsX1B5X0luaXRpYWxpemUKKyMgZGVmaW5lIF9QeU9iamVjdF9OZXcgZGxsX19QeU9iamVjdF9OZXcKKyMgZGVmaW5lIF9QeV9Ob25lU3RydWN0ICgqZGxsX19QeV9Ob25lU3RydWN0KQorIyBkZWZpbmUgUHlPYmplY3RfSW5pdCBkbGxfX1B5T2JqZWN0X0luaXQKKyMgaWYgZGVmaW5lZChQWV9WRVJTSU9OX0hFWCkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMjAyMDAwMAorIyAgZGVmaW5lIFB5VHlwZV9Jc1N1YnR5cGUgZGxsX1B5VHlwZV9Jc1N1YnR5cGUKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChQWV9WRVJTSU9OX0hFWCkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMjAzMDAwMAorIyAgZGVmaW5lIFB5T2JqZWN0X01hbGxvYyBkbGxfUHlPYmplY3RfTWFsbG9jCisjICBkZWZpbmUgUHlPYmplY3RfRnJlZSBkbGxfUHlPYmplY3RfRnJlZQorIyBlbmRpZgorCisvKgorICogUG9pbnRlcnMgZm9yIGR5bmFtaWMgbGluaworICovCitzdGF0aWMgaW50KCpkbGxfUHlBcmdfUGFyc2UpKFB5T2JqZWN0ICosIGNoYXIgKiwgLi4uKTsKK3N0YXRpYyBpbnQoKmRsbF9QeUFyZ19QYXJzZVR1cGxlKShQeU9iamVjdCAqLCBjaGFyICosIC4uLik7CitzdGF0aWMgaW50KCpkbGxfUHlEaWN0X1NldEl0ZW1TdHJpbmcpKFB5T2JqZWN0ICpkcCwgY2hhciAqa2V5LCBQeU9iamVjdCAqaXRlbSk7CitzdGF0aWMgaW50KCpkbGxfUHlFcnJfQmFkQXJndW1lbnQpKHZvaWQpOworc3RhdGljIHZvaWQoKmRsbF9QeUVycl9DbGVhcikodm9pZCk7CitzdGF0aWMgUHlPYmplY3QqKCpkbGxfUHlFcnJfTm9NZW1vcnkpKHZvaWQpOworc3RhdGljIFB5T2JqZWN0KigqZGxsX1B5RXJyX09jY3VycmVkKSh2b2lkKTsKK3N0YXRpYyB2b2lkKCpkbGxfUHlFcnJfU2V0Tm9uZSkoUHlPYmplY3QgKik7CitzdGF0aWMgdm9pZCgqZGxsX1B5RXJyX1NldFN0cmluZykoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqKTsKK3N0YXRpYyB2b2lkKCpkbGxfUHlFdmFsX0luaXRUaHJlYWRzKSh2b2lkKTsKK3N0YXRpYyB2b2lkKCpkbGxfUHlFdmFsX1Jlc3RvcmVUaHJlYWQpKFB5VGhyZWFkU3RhdGUgKik7CitzdGF0aWMgUHlUaHJlYWRTdGF0ZSooKmRsbF9QeUV2YWxfU2F2ZVRocmVhZCkodm9pZCk7CisjIGlmZGVmIFBZX0NBTl9SRUNVUlNFCitzdGF0aWMgUHlHSUxTdGF0ZV9TVEFURQkoKmRsbF9QeUdJTFN0YXRlX0Vuc3VyZSkodm9pZCk7CitzdGF0aWMgdm9pZCAoKmRsbF9QeUdJTFN0YXRlX1JlbGVhc2UpKFB5R0lMU3RhdGVfU1RBVEUpOworI2VuZGlmCitzdGF0aWMgbG9uZygqZGxsX1B5SW50X0FzTG9uZykoUHlPYmplY3QgKik7CitzdGF0aWMgUHlPYmplY3QqKCpkbGxfUHlJbnRfRnJvbUxvbmcpKGxvbmcpOworc3RhdGljIFB5VHlwZU9iamVjdCogZGxsX1B5SW50X1R5cGU7CitzdGF0aWMgUHlPYmplY3QqKCpkbGxfUHlMaXN0X0dldEl0ZW0pKFB5T2JqZWN0ICosIGludCk7CitzdGF0aWMgUHlPYmplY3QqKCpkbGxfUHlMaXN0X05ldykoaW50IHNpemUpOworc3RhdGljIGludCgqZGxsX1B5TGlzdF9TZXRJdGVtKShQeU9iamVjdCAqLCBpbnQsIFB5T2JqZWN0ICopOworc3RhdGljIGludCgqZGxsX1B5TGlzdF9TaXplKShQeU9iamVjdCAqKTsKK3N0YXRpYyBQeVR5cGVPYmplY3QqIGRsbF9QeUxpc3RfVHlwZTsKK3N0YXRpYyBQeU9iamVjdCooKmRsbF9QeUltcG9ydF9JbXBvcnRNb2R1bGUpKGNvbnN0IGNoYXIgKik7CitzdGF0aWMgUHlPYmplY3QqKCpkbGxfUHlEaWN0X0dldEl0ZW1TdHJpbmcpKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgUHlPYmplY3QqKCpkbGxfUHlNb2R1bGVfR2V0RGljdCkoUHlPYmplY3QgKik7CitzdGF0aWMgaW50KCpkbGxfUHlSdW5fU2ltcGxlU3RyaW5nKShjaGFyICopOworc3RhdGljIGNoYXIqKCpkbGxfUHlTdHJpbmdfQXNTdHJpbmcpKFB5T2JqZWN0ICopOworc3RhdGljIFB5T2JqZWN0KigqZGxsX1B5U3RyaW5nX0Zyb21TdHJpbmcpKGNvbnN0IGNoYXIgKik7CitzdGF0aWMgUHlPYmplY3QqKCpkbGxfUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUpKGNvbnN0IGNoYXIgKiwgaW50KTsKK3N0YXRpYyBpbnQoKmRsbF9QeVN0cmluZ19TaXplKShQeU9iamVjdCAqKTsKK3N0YXRpYyBQeVR5cGVPYmplY3QqIGRsbF9QeVN0cmluZ19UeXBlOworc3RhdGljIGludCgqZGxsX1B5U3lzX1NldE9iamVjdCkoY2hhciAqLCBQeU9iamVjdCAqKTsKK3N0YXRpYyBpbnQoKmRsbF9QeVN5c19TZXRBcmd2KShpbnQsIGNoYXIgKiopOworc3RhdGljIFB5VHlwZU9iamVjdCogZGxsX1B5VHlwZV9UeXBlOworc3RhdGljIFB5T2JqZWN0KigqZGxsX1B5X0J1aWxkVmFsdWUpKGNoYXIgKiwgLi4uKTsKK3N0YXRpYyBQeU9iamVjdCooKmRsbF9QeV9GaW5kTWV0aG9kKShzdHJ1Y3QgUHlNZXRob2REZWZbXSwgUHlPYmplY3QgKiwgY2hhciAqKTsKK3N0YXRpYyBQeU9iamVjdCooKmRsbF9QeV9Jbml0TW9kdWxlNCkoY2hhciAqLCBzdHJ1Y3QgUHlNZXRob2REZWYgKiwgY2hhciAqLCBQeU9iamVjdCAqLCBpbnQpOworc3RhdGljIHZvaWQoKmRsbF9QeV9Jbml0aWFsaXplKSh2b2lkKTsKK3N0YXRpYyBQeU9iamVjdCooKmRsbF9fUHlPYmplY3RfTmV3KShQeVR5cGVPYmplY3QgKiwgUHlPYmplY3QgKik7CitzdGF0aWMgUHlPYmplY3QqKCpkbGxfX1B5T2JqZWN0X0luaXQpKFB5T2JqZWN0ICosIFB5VHlwZU9iamVjdCAqKTsKK3N0YXRpYyBQeU9iamVjdCogZGxsX19QeV9Ob25lU3RydWN0OworIyBpZiBkZWZpbmVkKFBZX1ZFUlNJT05fSEVYKSAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDIwMDAwCitzdGF0aWMgaW50ICgqZGxsX1B5VHlwZV9Jc1N1YnR5cGUpKFB5VHlwZU9iamVjdCAqLCBQeVR5cGVPYmplY3QgKik7CisjIGVuZGlmCisjIGlmIGRlZmluZWQoUFlfVkVSU0lPTl9IRVgpICYmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwMzAwMDAKK3N0YXRpYyB2b2lkKiAoKmRsbF9QeU9iamVjdF9NYWxsb2MpKHNpemVfdCk7CitzdGF0aWMgdm9pZCAoKmRsbF9QeU9iamVjdF9GcmVlKSh2b2lkKik7CisjIGVuZGlmCisKK3N0YXRpYyBISU5TVEFOQ0UgaGluc3RQeXRob24gPSAwOyAvKiBJbnN0YW5jZSBvZiBweXRob24uZGxsICovCisKKy8qIEltcG9ydGVkIGV4Y2VwdGlvbiBvYmplY3RzICovCitzdGF0aWMgUHlPYmplY3QgKmltcF9QeUV4Y19BdHRyaWJ1dGVFcnJvcjsKK3N0YXRpYyBQeU9iamVjdCAqaW1wX1B5RXhjX0luZGV4RXJyb3I7CitzdGF0aWMgUHlPYmplY3QgKmltcF9QeUV4Y19LZXlib2FyZEludGVycnVwdDsKK3N0YXRpYyBQeU9iamVjdCAqaW1wX1B5RXhjX1R5cGVFcnJvcjsKK3N0YXRpYyBQeU9iamVjdCAqaW1wX1B5RXhjX1ZhbHVlRXJyb3I7CisKKyMgZGVmaW5lIFB5RXhjX0F0dHJpYnV0ZUVycm9yIGltcF9QeUV4Y19BdHRyaWJ1dGVFcnJvcgorIyBkZWZpbmUgUHlFeGNfSW5kZXhFcnJvciBpbXBfUHlFeGNfSW5kZXhFcnJvcgorIyBkZWZpbmUgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQgaW1wX1B5RXhjX0tleWJvYXJkSW50ZXJydXB0CisjIGRlZmluZSBQeUV4Y19UeXBlRXJyb3IgaW1wX1B5RXhjX1R5cGVFcnJvcgorIyBkZWZpbmUgUHlFeGNfVmFsdWVFcnJvciBpbXBfUHlFeGNfVmFsdWVFcnJvcgorCisvKgorICogVGFibGUgb2YgbmFtZSB0byBmdW5jdGlvbiBwb2ludGVyIG9mIHB5dGhvbi4KKyAqLworIyBkZWZpbmUgUFlUSE9OX1BST0MgRkFSUFJPQworc3RhdGljIHN0cnVjdAoreworICAgIGNoYXIgKm5hbWU7CisgICAgUFlUSE9OX1BST0MgKnB0cjsKK30gcHl0aG9uX2Z1bmNuYW1lX3RhYmxlW10gPQoreworICAgIHsiUHlBcmdfUGFyc2UiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlBcmdfUGFyc2V9LAorICAgIHsiUHlBcmdfUGFyc2VUdXBsZSIsIChQWVRIT05fUFJPQyopJmRsbF9QeUFyZ19QYXJzZVR1cGxlfSwKKyAgICB7IlB5RGljdF9TZXRJdGVtU3RyaW5nIiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5RGljdF9TZXRJdGVtU3RyaW5nfSwKKyAgICB7IlB5RXJyX0JhZEFyZ3VtZW50IiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5RXJyX0JhZEFyZ3VtZW50fSwKKyAgICB7IlB5RXJyX0NsZWFyIiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5RXJyX0NsZWFyfSwKKyAgICB7IlB5RXJyX05vTWVtb3J5IiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5RXJyX05vTWVtb3J5fSwKKyAgICB7IlB5RXJyX09jY3VycmVkIiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5RXJyX09jY3VycmVkfSwKKyAgICB7IlB5RXJyX1NldE5vbmUiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlFcnJfU2V0Tm9uZX0sCisgICAgeyJQeUVycl9TZXRTdHJpbmciLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlFcnJfU2V0U3RyaW5nfSwKKyAgICB7IlB5RXZhbF9Jbml0VGhyZWFkcyIsIChQWVRIT05fUFJPQyopJmRsbF9QeUV2YWxfSW5pdFRocmVhZHN9LAorICAgIHsiUHlFdmFsX1Jlc3RvcmVUaHJlYWQiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlFdmFsX1Jlc3RvcmVUaHJlYWR9LAorICAgIHsiUHlFdmFsX1NhdmVUaHJlYWQiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlFdmFsX1NhdmVUaHJlYWR9LAorIyBpZmRlZiBQWV9DQU5fUkVDVVJTRQorICAgIHsiUHlHSUxTdGF0ZV9FbnN1cmUiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlHSUxTdGF0ZV9FbnN1cmV9LAorICAgIHsiUHlHSUxTdGF0ZV9SZWxlYXNlIiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5R0lMU3RhdGVfUmVsZWFzZX0sCisjIGVuZGlmCisgICAgeyJQeUludF9Bc0xvbmciLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlJbnRfQXNMb25nfSwKKyAgICB7IlB5SW50X0Zyb21Mb25nIiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5SW50X0Zyb21Mb25nfSwKKyAgICB7IlB5SW50X1R5cGUiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlJbnRfVHlwZX0sCisgICAgeyJQeUxpc3RfR2V0SXRlbSIsIChQWVRIT05fUFJPQyopJmRsbF9QeUxpc3RfR2V0SXRlbX0sCisgICAgeyJQeUxpc3RfTmV3IiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5TGlzdF9OZXd9LAorICAgIHsiUHlMaXN0X1NldEl0ZW0iLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlMaXN0X1NldEl0ZW19LAorICAgIHsiUHlMaXN0X1NpemUiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlMaXN0X1NpemV9LAorICAgIHsiUHlMaXN0X1R5cGUiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlMaXN0X1R5cGV9LAorICAgIHsiUHlJbXBvcnRfSW1wb3J0TW9kdWxlIiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5SW1wb3J0X0ltcG9ydE1vZHVsZX0sCisgICAgeyJQeURpY3RfR2V0SXRlbVN0cmluZyIsIChQWVRIT05fUFJPQyopJmRsbF9QeURpY3RfR2V0SXRlbVN0cmluZ30sCisgICAgeyJQeU1vZHVsZV9HZXREaWN0IiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5TW9kdWxlX0dldERpY3R9LAorICAgIHsiUHlSdW5fU2ltcGxlU3RyaW5nIiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5UnVuX1NpbXBsZVN0cmluZ30sCisgICAgeyJQeVN0cmluZ19Bc1N0cmluZyIsIChQWVRIT05fUFJPQyopJmRsbF9QeVN0cmluZ19Bc1N0cmluZ30sCisgICAgeyJQeVN0cmluZ19Gcm9tU3RyaW5nIiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5U3RyaW5nX0Zyb21TdHJpbmd9LAorICAgIHsiUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemV9LAorICAgIHsiUHlTdHJpbmdfU2l6ZSIsIChQWVRIT05fUFJPQyopJmRsbF9QeVN0cmluZ19TaXplfSwKKyAgICB7IlB5U3RyaW5nX1R5cGUiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlTdHJpbmdfVHlwZX0sCisgICAgeyJQeVN5c19TZXRPYmplY3QiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlTeXNfU2V0T2JqZWN0fSwKKyAgICB7IlB5U3lzX1NldEFyZ3YiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlTeXNfU2V0QXJndn0sCisgICAgeyJQeVR5cGVfVHlwZSIsIChQWVRIT05fUFJPQyopJmRsbF9QeVR5cGVfVHlwZX0sCisgICAgeyJQeV9CdWlsZFZhbHVlIiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5X0J1aWxkVmFsdWV9LAorICAgIHsiUHlfRmluZE1ldGhvZCIsIChQWVRIT05fUFJPQyopJmRsbF9QeV9GaW5kTWV0aG9kfSwKKyAgICB7IlB5X0luaXRNb2R1bGU0IiwgKFBZVEhPTl9QUk9DKikmZGxsX1B5X0luaXRNb2R1bGU0fSwKKyAgICB7IlB5X0luaXRpYWxpemUiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlfSW5pdGlhbGl6ZX0sCisgICAgeyJfUHlPYmplY3RfTmV3IiwgKFBZVEhPTl9QUk9DKikmZGxsX19QeU9iamVjdF9OZXd9LAorICAgIHsiUHlPYmplY3RfSW5pdCIsIChQWVRIT05fUFJPQyopJmRsbF9fUHlPYmplY3RfSW5pdH0sCisgICAgeyJfUHlfTm9uZVN0cnVjdCIsIChQWVRIT05fUFJPQyopJmRsbF9fUHlfTm9uZVN0cnVjdH0sCisjIGlmIGRlZmluZWQoUFlfVkVSU0lPTl9IRVgpICYmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwMjAwMDAKKyAgICB7IlB5VHlwZV9Jc1N1YnR5cGUiLCAoUFlUSE9OX1BST0MqKSZkbGxfUHlUeXBlX0lzU3VidHlwZX0sCisjIGVuZGlmCisjIGlmIGRlZmluZWQoUFlfVkVSU0lPTl9IRVgpICYmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwMzAwMDAKKyAgICB7IlB5T2JqZWN0X01hbGxvYyIsIChQWVRIT05fUFJPQyopJmRsbF9QeU9iamVjdF9NYWxsb2N9LAorICAgIHsiUHlPYmplY3RfRnJlZSIsIChQWVRIT05fUFJPQyopJmRsbF9QeU9iamVjdF9GcmVlfSwKKyMgZW5kaWYKKyAgICB7IiIsIE5VTEx9LAorfTsKKworLyoKKyAqIEZyZWUgcHl0aG9uLmRsbAorICovCisgICAgc3RhdGljIHZvaWQKK2VuZF9keW5hbWljX3B5dGhvbih2b2lkKQoreworICAgIGlmIChoaW5zdFB5dGhvbikKKyAgICB7CisJRnJlZUxpYnJhcnkoaGluc3RQeXRob24pOworCWhpbnN0UHl0aG9uID0gMDsKKyAgICB9Cit9CisKKy8qCisgKiBMb2FkIGxpYnJhcnkgYW5kIGdldCBhbGwgcG9pbnRlcnMuCisgKiBQYXJhbWV0ZXIgJ2xpYm5hbWUnIHByb3ZpZGVzIG5hbWUgb2YgRExMLgorICogUmV0dXJuIE9LIG9yIEZBSUwuCisgKi8KKyAgICBzdGF0aWMgaW50CitweXRob25fcnVudGltZV9saW5rX2luaXQoY2hhciAqbGlibmFtZSwgaW50IHZlcmJvc2UpCit7CisgICAgaW50IGk7CisKKyAgICBpZiAoaGluc3RQeXRob24pCisJcmV0dXJuIE9LOworICAgIGhpbnN0UHl0aG9uID0gTG9hZExpYnJhcnkobGlibmFtZSk7CisgICAgaWYgKCFoaW5zdFB5dGhvbikKKyAgICB7CisJaWYgKHZlcmJvc2UpCisJICAgIEVNU0cyKF8oZV9sb2FkbGliKSwgbGlibmFtZSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgcHl0aG9uX2Z1bmNuYW1lX3RhYmxlW2ldLnB0cjsgKytpKQorICAgIHsKKwlpZiAoKCpweXRob25fZnVuY25hbWVfdGFibGVbaV0ucHRyID0gR2V0UHJvY0FkZHJlc3MoaGluc3RQeXRob24sCisJCQlweXRob25fZnVuY25hbWVfdGFibGVbaV0ubmFtZSkpID09IE5VTEwpCisJeworCSAgICBGcmVlTGlicmFyeShoaW5zdFB5dGhvbik7CisJICAgIGhpbnN0UHl0aG9uID0gMDsKKwkgICAgaWYgKHZlcmJvc2UpCisJCUVNU0cyKF8oZV9sb2FkZnVuYyksIHB5dGhvbl9mdW5jbmFtZV90YWJsZVtpXS5uYW1lKTsKKwkgICAgcmV0dXJuIEZBSUw7CisJfQorICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBJZiBweXRob24gaXMgZW5hYmxlZCAodGhlcmUgaXMgaW5zdGFsbGVkIHB5dGhvbiBvbiBXaW5kb3dzIHN5c3RlbSkgcmV0dXJuCisgKiBUUlVFLCBlbHNlIEZBTFNFLgorICovCisgICAgaW50CitweXRob25fZW5hYmxlZCh2ZXJib3NlKQorICAgIGludAkJdmVyYm9zZTsKK3sKKyAgICByZXR1cm4gcHl0aG9uX3J1bnRpbWVfbGlua19pbml0KERZTkFNSUNfUFlUSE9OX0RMTCwgdmVyYm9zZSkgPT0gT0s7Cit9CisKKy8qIExvYWQgdGhlIHN0YW5kYXJkIFB5dGhvbiBleGNlcHRpb25zIC0gZG9uJ3QgaW1wb3J0IHRoZSBzeW1ib2xzIGZyb20gdGhlCisgKiBETEwsIGFzIHRoaXMgY2FuIGNhdXNlIGVycm9ycyAoaW1wb3J0aW5nIGRhdGEgc3ltYm9scyBpcyBub3QgcmVsaWFibGUpLgorICovCitzdGF0aWMgdm9pZCBnZXRfZXhjZXB0aW9ucyBfX0FSR1MoKHZvaWQpKTsKKworICAgIHN0YXRpYyB2b2lkCitnZXRfZXhjZXB0aW9ucygpCit7CisgICAgUHlPYmplY3QgKmV4bW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJleGNlcHRpb25zIik7CisgICAgUHlPYmplY3QgKmV4ZGljdCA9IFB5TW9kdWxlX0dldERpY3QoZXhtb2QpOworICAgIGltcF9QeUV4Y19BdHRyaWJ1dGVFcnJvciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGV4ZGljdCwgIkF0dHJpYnV0ZUVycm9yIik7CisgICAgaW1wX1B5RXhjX0luZGV4RXJyb3IgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhleGRpY3QsICJJbmRleEVycm9yIik7CisgICAgaW1wX1B5RXhjX0tleWJvYXJkSW50ZXJydXB0ID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZXhkaWN0LCAiS2V5Ym9hcmRJbnRlcnJ1cHQiKTsKKyAgICBpbXBfUHlFeGNfVHlwZUVycm9yID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZXhkaWN0LCAiVHlwZUVycm9yIik7CisgICAgaW1wX1B5RXhjX1ZhbHVlRXJyb3IgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhleGRpY3QsICJWYWx1ZUVycm9yIik7CisgICAgUHlfWElOQ1JFRihpbXBfUHlFeGNfQXR0cmlidXRlRXJyb3IpOworICAgIFB5X1hJTkNSRUYoaW1wX1B5RXhjX0luZGV4RXJyb3IpOworICAgIFB5X1hJTkNSRUYoaW1wX1B5RXhjX0tleWJvYXJkSW50ZXJydXB0KTsKKyAgICBQeV9YSU5DUkVGKGltcF9QeUV4Y19UeXBlRXJyb3IpOworICAgIFB5X1hJTkNSRUYoaW1wX1B5RXhjX1ZhbHVlRXJyb3IpOworICAgIFB5X1hERUNSRUYoZXhtb2QpOworfQorI2VuZGlmIC8qIERZTkFNSUNfUFlUSE9OICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEludGVybmFsIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisgKi8KKworc3RhdGljIHZvaWQgRG9QeXRob25Db21tYW5kKGV4YXJnX1QgKiwgY29uc3QgY2hhciAqKTsKK3N0YXRpYyBpbnQgUmFuZ2VTdGFydDsKK3N0YXRpYyBpbnQgUmFuZ2VFbmQ7CisKK3N0YXRpYyB2b2lkIFB5dGhvbklPX0ZsdXNoKHZvaWQpOworc3RhdGljIGludCBQeXRob25JT19Jbml0KHZvaWQpOworc3RhdGljIGludCBQeXRob25Nb2RfSW5pdCh2b2lkKTsKKworLyogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSB2aW0vcHl0aG9uIGludGVyZmFjZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgUHlPYmplY3QgKkdldEJ1ZmZlckxpbmUoYnVmX1QgKiwgaW50KTsKK3N0YXRpYyBQeU9iamVjdCAqR2V0QnVmZmVyTGluZUxpc3QoYnVmX1QgKiwgaW50LCBpbnQpOworCitzdGF0aWMgaW50IFNldEJ1ZmZlckxpbmUoYnVmX1QgKiwgaW50LCBQeU9iamVjdCAqLCBpbnQgKik7CitzdGF0aWMgaW50IFNldEJ1ZmZlckxpbmVMaXN0KGJ1Zl9UICosIGludCwgaW50LCBQeU9iamVjdCAqLCBpbnQgKik7CitzdGF0aWMgaW50IEluc2VydEJ1ZmZlckxpbmVzKGJ1Zl9UICosIGludCwgUHlPYmplY3QgKiwgaW50ICopOworCitzdGF0aWMgUHlPYmplY3QgKkxpbmVUb1N0cmluZyhjb25zdCBjaGFyICopOworc3RhdGljIGNoYXIgKlN0cmluZ1RvTGluZShQeU9iamVjdCAqKTsKKworc3RhdGljIGludCBWaW1FcnJvckNoZWNrKHZvaWQpOworCisjZGVmaW5lIFB5RXJyX1NldFZpbShzdHIpIFB5RXJyX1NldFN0cmluZyhWaW1FcnJvciwgc3RyKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAxLiBQeXRob24gaW50ZXJwcmV0ZXIgbWFpbiBwcm9ncmFtLgorICovCisKK3N0YXRpYyBpbnQgaW5pdGlhbGlzZWQgPSAwOworCisjaWYgUFlUSE9OX0FQSV9WRVJTSU9OIDwgMTAwNyAvKiBQeXRob24gMS40ICovCit0eXBlZGVmIFB5T2JqZWN0IFB5VGhyZWFkU3RhdGU7CisjZW5kaWYgLyogUHl0aG9uIDEuNCAqLworCisjaWZuZGVmIFBZX0NBTl9SRUNVUlNFCitzdGF0aWMgUHlUaHJlYWRTdGF0ZSogc2F2ZWRfcHl0aG9uX3RocmVhZCA9IE5VTEw7CisKKy8qCisgKiBTdXNwZW5kIGEgdGhyZWFkIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIsIG90aGVyIHRocmVhZHMgYXJlIGFsbG93ZWQgdG8KKyAqIHJ1bi4KKyAqLworc3RhdGljIHZvaWQgUHl0aG9uX1NhdmVUaHJlYWQodm9pZCkKK3sKKyAgICBzYXZlZF9weXRob25fdGhyZWFkID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsKK30KKworLyoKKyAqIFJlc3RvcmUgYSB0aHJlYWQgb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlciwgd2FpdHMgZm9yIG90aGVyIHRocmVhZHMgdG8KKyAqIGJsb2NrLgorICovCitzdGF0aWMgdm9pZCBQeXRob25fUmVzdG9yZVRocmVhZCh2b2lkKQoreworICAgIFB5RXZhbF9SZXN0b3JlVGhyZWFkKHNhdmVkX3B5dGhvbl90aHJlYWQpOworICAgIHNhdmVkX3B5dGhvbl90aHJlYWQgPSBOVUxMOworfQorI2VuZGlmCisKKy8qCisgKiBvYnRhaW4gYSBsb2NrIG9uIHRoZSBWaW0gZGF0YSBzdHJ1Y3R1cmVzCisgKi8KK3N0YXRpYyB2b2lkIFB5dGhvbl9Mb2NrX1ZpbSh2b2lkKQoreworfQorCisvKgorICogcmVsZWFzZSBhIGxvY2sgb24gdGhlIFZpbSBkYXRhIHN0cnVjdHVyZXMKKyAqLworc3RhdGljIHZvaWQgUHl0aG9uX1JlbGVhc2VfVmltKHZvaWQpCit7Cit9CisKKyAgICB2b2lkCitweXRob25fZW5kKCkKK3sKKyNpZmRlZiBEWU5BTUlDX1BZVEhPTgorICAgIGVuZF9keW5hbWljX3B5dGhvbigpOworI2VuZGlmCit9CisKKyAgICBzdGF0aWMgaW50CitQeXRob25fSW5pdCh2b2lkKQoreworICAgIGlmICghaW5pdGlhbGlzZWQpCisgICAgeworI2lmZGVmIERZTkFNSUNfUFlUSE9OCisJaWYgKCFweXRob25fZW5hYmxlZChUUlVFKSkKKwl7CisJICAgIEVNU0coXygiRTI2MzogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFB5dGhvbiBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIikpOworCSAgICBnb3RvIGZhaWw7CisJfQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQUNPUykgfHwgZGVmaW5lZChNQUNPU19YX1VOSVgpCisJUHlfSW5pdGlhbGl6ZSgpOworI2Vsc2UKKwlQeU1hY19Jbml0aWFsaXplKCk7CisjZW5kaWYKKwkvKiBpbml0aWFsaXNlIHRocmVhZHMgKi8KKwlQeUV2YWxfSW5pdFRocmVhZHMoKTsKKworI2lmZGVmIERZTkFNSUNfUFlUSE9OCisJZ2V0X2V4Y2VwdGlvbnMoKTsKKyNlbmRpZgorCisJaWYgKFB5dGhvbklPX0luaXQoKSkKKwkgICAgZ290byBmYWlsOworCisJaWYgKFB5dGhvbk1vZF9Jbml0KCkpCisJICAgIGdvdG8gZmFpbDsKKworI2lmbmRlZiBQWV9DQU5fUkVDVVJTRQorCS8qIHRoZSBmaXJzdCBweXRob24gdGhyZWFkIGlzIHZpbSdzICovCisJUHl0aG9uX1NhdmVUaHJlYWQoKTsKKyNlbmRpZgorCisJaW5pdGlhbGlzZWQgPSAxOworICAgIH0KKworICAgIHJldHVybiAwOworCitmYWlsOgorICAgIC8qIFdlIGNhbGwgUHl0aG9uSU9fRmx1c2goKSBoZXJlIHRvIHByaW50IGFueSBQeXRob24gZXJyb3JzLgorICAgICAqIFRoaXMgaXMgT0ssIGFzIGl0IGlzIHBvc3NpYmxlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVuCisgICAgICogaWYgUHl0aG9uSU9fSW5pdCgpIGhhcyBub3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAoaXQgd2lsbAorICAgICAqIG5vdCBkbyBhbnl0aGluZyBpbiB0aGlzIGNhc2UpLgorICAgICAqLworICAgIFB5dGhvbklPX0ZsdXNoKCk7CisgICAgcmV0dXJuIC0xOworfQorCisvKgorICogRXh0ZXJuYWwgaW50ZXJmYWNlCisgKi8KKyAgICBzdGF0aWMgdm9pZAorRG9QeXRob25Db21tYW5kKGV4YXJnX1QgKmVhcCwgY29uc3QgY2hhciAqY21kKQoreworI2lmZGVmIFBZX0NBTl9SRUNVUlNFCisgICAgUHlHSUxTdGF0ZV9TVEFURQlweWdpbHN0YXRlOworI2Vsc2UKKyAgICBzdGF0aWMgaW50CQlyZWN1cnNpdmUgPSAwOworI2VuZGlmCisjaWYgZGVmaW5lZChNQUNPUykgJiYgIWRlZmluZWQoTUFDT1NfWF9VTklYKQorICAgIEdyYWZQdHIJCW9sZFBvcnQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxFX0gpIHx8IGRlZmluZWQoWF9MT0NBTEUpCisgICAgY2hhcgkJKnNhdmVkX2xvY2FsZTsKKyNlbmRpZgorCisjaWZuZGVmIFBZX0NBTl9SRUNVUlNFCisgICAgaWYgKHJlY3Vyc2l2ZSkKKyAgICB7CisJRU1TRyhfKCJFNjU5OiBDYW5ub3QgaW52b2tlIFB5dGhvbiByZWN1cnNpdmVseSIpKTsKKwlyZXR1cm47CisgICAgfQorICAgICsrcmVjdXJzaXZlOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1BQ09TKSAmJiAhZGVmaW5lZChNQUNPU19YX1VOSVgpCisgICAgR2V0UG9ydCgmb2xkUG9ydCk7CisgICAgLyogQ2hlY2sgaWYgdGhlIFB5dGhvbiBsaWJyYXJ5IGlzIGF2YWlsYWJsZSAqLworICAgIGlmICgoUHRyKVB5TWFjX0luaXRpYWxpemUgPT0gKFB0cilrVW5yZXNvbHZlZENGcmFnU3ltYm9sQWRkcmVzcykKKwlnb3RvIHRoZWVuZDsKKyNlbmRpZgorICAgIGlmIChQeXRob25fSW5pdCgpKQorCWdvdG8gdGhlZW5kOworCisgICAgUmFuZ2VTdGFydCA9IGVhcC0+bGluZTE7CisgICAgUmFuZ2VFbmQgPSBlYXAtPmxpbmUyOworICAgIFB5dGhvbl9SZWxlYXNlX1ZpbSgpOwkgICAgLyogbGVhdmUgdmltICovCisKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxFX0gpIHx8IGRlZmluZWQoWF9MT0NBTEUpCisgICAgLyogUHl0aG9uIG9ubHkgd29ya3MgcHJvcGVybHkgd2hlbiB0aGUgTENfTlVNRVJJQyBsb2NhbGUgaXMgIkMiLiAqLworICAgIHNhdmVkX2xvY2FsZSA9IHNldGxvY2FsZShMQ19OVU1FUklDLCBOVUxMKTsKKyAgICBpZiAoc2F2ZWRfbG9jYWxlID09IE5VTEwgfHwgU1RSQ01QKHNhdmVkX2xvY2FsZSwgIkMiKSA9PSAwKQorCXNhdmVkX2xvY2FsZSA9IE5VTEw7CisgICAgZWxzZQorICAgIHsKKwkvKiBOZWVkIHRvIG1ha2UgYSBjb3B5LCB2YWx1ZSBtYXkgY2hhbmdlIHdoZW4gc2V0dGluZyBuZXcgbG9jYWxlLiAqLworCXNhdmVkX2xvY2FsZSA9IChjaGFyICopdmltX3N0cnNhdmUoKGNoYXJfdSAqKXNhdmVkX2xvY2FsZSk7CisJKHZvaWQpc2V0bG9jYWxlKExDX05VTUVSSUMsICJDIik7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBQWV9DQU5fUkVDVVJTRQorICAgIHB5Z2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2Vsc2UKKyAgICBQeXRob25fUmVzdG9yZVRocmVhZCgpOwkgICAgLyogZW50ZXIgcHl0aG9uICovCisjZW5kaWYKKworICAgIFB5UnVuX1NpbXBsZVN0cmluZygoY2hhciAqKShjbWQpKTsKKworI2lmZGVmIFBZX0NBTl9SRUNVUlNFCisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKHB5Z2lsc3RhdGUpOworI2Vsc2UKKyAgICBQeXRob25fU2F2ZVRocmVhZCgpOwkgICAgLyogbGVhdmUgcHl0aG9uICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9MT0NBTEVfSCkgfHwgZGVmaW5lZChYX0xPQ0FMRSkKKyAgICBpZiAoc2F2ZWRfbG9jYWxlICE9IE5VTEwpCisgICAgeworCSh2b2lkKXNldGxvY2FsZShMQ19OVU1FUklDLCBzYXZlZF9sb2NhbGUpOworCXZpbV9mcmVlKHNhdmVkX2xvY2FsZSk7CisgICAgfQorI2VuZGlmCisKKyAgICBQeXRob25fTG9ja19WaW0oKTsJCSAgICAvKiBlbnRlciB2aW0gKi8KKyAgICBQeXRob25JT19GbHVzaCgpOworI2lmIGRlZmluZWQoTUFDT1MpICYmICFkZWZpbmVkKE1BQ09TX1hfVU5JWCkKKyAgICBTZXRQb3J0KG9sZFBvcnQpOworI2VuZGlmCisKK3RoZWVuZDoKKyNpZm5kZWYgUFlfQ0FOX1JFQ1VSU0UKKyAgICAtLXJlY3Vyc2l2ZTsKKyNlbmRpZgorICAgIHJldHVybjsJICAgIC8qIGtlZXBzIGxpbnQgaGFwcHkgKi8KK30KKworLyoKKyAqICI6cHl0aG9uIgorICovCisgICAgdm9pZAorZXhfcHl0aG9uKGV4YXJnX1QgKmVhcCkKK3sKKyAgICBjaGFyX3UgKnNjcmlwdDsKKworICAgIHNjcmlwdCA9IHNjcmlwdF9nZXQoZWFwLCBlYXAtPmFyZyk7CisgICAgaWYgKCFlYXAtPnNraXApCisgICAgeworCWlmIChzY3JpcHQgPT0gTlVMTCkKKwkgICAgRG9QeXRob25Db21tYW5kKGVhcCwgKGNoYXIgKillYXAtPmFyZyk7CisJZWxzZQorCSAgICBEb1B5dGhvbkNvbW1hbmQoZWFwLCAoY2hhciAqKXNjcmlwdCk7CisgICAgfQorICAgIHZpbV9mcmVlKHNjcmlwdCk7Cit9CisKKyNkZWZpbmUgQlVGRkVSX1NJWkUgMTAyNAorCisvKgorICogIjpweWZpbGUiCisgKi8KKyAgICB2b2lkCitleF9weWZpbGUoZXhhcmdfVCAqZWFwKQoreworICAgIHN0YXRpYyBjaGFyIGJ1ZmZlcltCVUZGRVJfU0laRV07CisgICAgY29uc3QgY2hhciAqZmlsZSA9IChjaGFyICopZWFwLT5hcmc7CisgICAgY2hhciAqcDsKKworICAgIC8qIEhhdmUgdG8gZG8gaXQgbGlrZSB0aGlzLiBQeVJ1bl9TaW1wbGVGaWxlIHJlcXVpcmVzIHlvdSB0byBwYXNzIGEKKyAgICAgKiBzdGRpbyBmaWxlIHBvaW50ZXIsIGJ1dCBWaW0gYW5kIHRoZSBQeXRob24gRExMIGFyZSBjb21waWxlZCB3aXRoCisgICAgICogZGlmZmVyZW50IG9wdGlvbnMgdW5kZXIgV2luZG93cywgbWVhbmluZyB0aGF0IHN0ZGlvIHBvaW50ZXJzIGFyZW4ndAorICAgICAqIGNvbXBhdGlibGUgYmV0d2VlbiB0aGUgdHdvLiBZdWsuCisgICAgICoKKyAgICAgKiBQdXQgdGhlIHN0cmluZyAiZXhlY2ZpbGUoJ2ZpbGUnKSIgaW50byBidWZmZXIuIEJ1dCwgd2UgbmVlZCB0bworICAgICAqIGVzY2FwZSBhbnkgYmFja3NsYXNoZXMgb3Igc2luZ2xlIHF1b3RlcyBpbiB0aGUgZmlsZSBuYW1lLCBzbyB0aGF0CisgICAgICogUHl0aG9uIHdvbid0IG1hbmdsZSB0aGUgZmlsZSBuYW1lLgorICAgICAqLworICAgIHN0cmNweShidWZmZXIsICJleGVjZmlsZSgnIik7CisgICAgcCA9IGJ1ZmZlciArIDEwOyAvKiBzaXplIG9mICJleGVjZmlsZSgnIiAqLworCisgICAgd2hpbGUgKCpmaWxlICYmIHAgPCBidWZmZXIgKyAoQlVGRkVSX1NJWkUgLSAzKSkKKyAgICB7CisJaWYgKCpmaWxlID09ICdcXCcgfHwgKmZpbGUgPT0gJ1wnJykKKwkgICAgKnArKyA9ICdcXCc7CisJKnArKyA9ICpmaWxlKys7CisgICAgfQorCisgICAgLyogSWYgd2UgZGlkbid0IGZpbmlzaCB0aGUgZmlsZSBuYW1lLCB3ZSBoaXQgYSBidWZmZXIgb3ZlcmZsb3cgKi8KKyAgICBpZiAoKmZpbGUgIT0gJ1wwJykKKwlyZXR1cm47CisKKyAgICAvKiBQdXQgaW4gdGhlIHRlcm1pbmF0aW5nICInKSIgYW5kIGEgbnVsbCAqLworICAgICpwKysgPSAnXCcnOworICAgICpwKysgPSAnKSc7CisgICAgKnArKyA9ICdcMCc7CisKKyAgICAvKiBFeGVjdXRlIHRoZSBmaWxlICovCisgICAgRG9QeXRob25Db21tYW5kKGVhcCwgYnVmZmVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogMi4gUHl0aG9uIG91dHB1dCBzdHJlYW06IHdyaXRlcyBvdXRwdXQgdmlhIFtlXW1zZygpLgorICovCisKKy8qIEltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBQeU9iamVjdCAqT3V0cHV0R2V0YXR0cihQeU9iamVjdCAqLCBjaGFyICopOworc3RhdGljIGludCBPdXRwdXRTZXRhdHRyKFB5T2JqZWN0ICosIGNoYXIgKiwgUHlPYmplY3QgKik7CisKK3N0YXRpYyBQeU9iamVjdCAqT3V0cHV0V3JpdGUoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitzdGF0aWMgUHlPYmplY3QgKk91dHB1dFdyaXRlbGluZXMoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisKK3R5cGVkZWYgdm9pZCAoKndyaXRlZm4pKGNoYXJfdSAqKTsKK3N0YXRpYyB2b2lkIHdyaXRlcih3cml0ZWZuIGZuLCBjaGFyX3UgKnN0ciwgaW50IG4pOworCisvKiBPdXRwdXQgb2JqZWN0IGRlZmluaXRpb24KKyAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBsb25nIHNvZnRzcGFjZTsKKyAgICBsb25nIGVycm9yOworfSBPdXRwdXRPYmplY3Q7CisKK3N0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgT3V0cHV0TWV0aG9kc1tdID0geworICAgIC8qIG5hbWUsCSAgICBmdW5jdGlvbiwJCWNhbGxpbmcsICAgIGRvY3VtZW50YXRpb24gKi8KKyAgICB7IndyaXRlIiwJICAgIE91dHB1dFdyaXRlLAkxLAkgICAgIiIgfSwKKyAgICB7IndyaXRlbGluZXMiLCAgT3V0cHV0V3JpdGVsaW5lcywJMSwJICAgICIiIH0sCisgICAgeyBOVUxMLAkgICAgTlVMTCwJCTAsCSAgICBOVUxMIH0KK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgT3V0cHV0VHlwZSA9IHsKKwlQeU9iamVjdF9IRUFEX0lOSVQoMCkKKwkwLAorCSJtZXNzYWdlIiwKKwlzaXplb2YoT3V0cHV0T2JqZWN0KSwKKwkwLAorCisJKGRlc3RydWN0b3IpIDAsCisJKHByaW50ZnVuYykgMCwKKwkoZ2V0YXR0cmZ1bmMpIE91dHB1dEdldGF0dHIsCisJKHNldGF0dHJmdW5jKSBPdXRwdXRTZXRhdHRyLAorCShjbXBmdW5jKSAwLAorCShyZXByZnVuYykgMCwKKworCTAsIC8qIGFzIG51bWJlciAqLworCTAsIC8qIGFzIHNlcXVlbmNlICovCisJMCwgLyogYXMgbWFwcGluZyAqLworCisJKGhhc2hmdW5jKSAwLAorCSh0ZXJuYXJ5ZnVuYykgMCwKKwkocmVwcmZ1bmMpIDAKK307CisKKy8qKioqKioqKioqKioqLworCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK091dHB1dEdldGF0dHIoUHlPYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUpCit7CisgICAgaWYgKHN0cmNtcChuYW1lLCAic29mdHNwYWNlIikgPT0gMCkKKwlyZXR1cm4gUHlJbnRfRnJvbUxvbmcoKChPdXRwdXRPYmplY3QgKikoc2VsZikpLT5zb2Z0c3BhY2UpOworCisgICAgcmV0dXJuIFB5X0ZpbmRNZXRob2QoT3V0cHV0TWV0aG9kcywgc2VsZiwgbmFtZSk7Cit9CisKKyAgICBzdGF0aWMgaW50CitPdXRwdXRTZXRhdHRyKFB5T2JqZWN0ICpzZWxmLCBjaGFyICpuYW1lLCBQeU9iamVjdCAqdmFsKQoreworICAgIGlmICh2YWwgPT0gTlVMTCkgeworCVB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgXygiY2FuJ3QgZGVsZXRlIE91dHB1dE9iamVjdCBhdHRyaWJ1dGVzIikpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc3RyY21wKG5hbWUsICJzb2Z0c3BhY2UiKSA9PSAwKQorICAgIHsKKwlpZiAoIVB5SW50X0NoZWNrKHZhbCkpIHsKKwkgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgXygic29mdHNwYWNlIG11c3QgYmUgYW4gaW50ZWdlciIpKTsKKwkgICAgcmV0dXJuIC0xOworCX0KKworCSgoT3V0cHV0T2JqZWN0ICopKHNlbGYpKS0+c29mdHNwYWNlID0gUHlJbnRfQXNMb25nKHZhbCk7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLCBfKCJpbnZhbGlkIGF0dHJpYnV0ZSIpKTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qKioqKioqKioqKioqLworCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK091dHB1dFdyaXRlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbGVuOworICAgIGNoYXIgKnN0cjsKKyAgICBpbnQgZXJyb3IgPSAoKE91dHB1dE9iamVjdCAqKShzZWxmKSktPmVycm9yOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIyIsICZzdHIsICZsZW4pKQorCXJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIFB5dGhvbl9Mb2NrX1ZpbSgpOworICAgIHdyaXRlcigod3JpdGVmbikoZXJyb3IgPyBlbXNnIDogbXNnKSwgKGNoYXJfdSAqKXN0ciwgbGVuKTsKKyAgICBQeXRob25fUmVsZWFzZV9WaW0oKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworfQorCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK091dHB1dFdyaXRlbGluZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBuOworICAgIGludCBpOworICAgIFB5T2JqZWN0ICpsaXN0OworICAgIGludCBlcnJvciA9ICgoT3V0cHV0T2JqZWN0ICopKHNlbGYpKS0+ZXJyb3I7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmbGlzdCkpCisJcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKGxpc3QpOworCisgICAgaWYgKCFQeUxpc3RfQ2hlY2sobGlzdCkpIHsKKwlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCBfKCJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIikpOworCVB5X0RFQ1JFRihsaXN0KTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBuID0gUHlMaXN0X1NpemUobGlzdCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorICAgIHsKKwlQeU9iamVjdCAqbGluZSA9IFB5TGlzdF9HZXRJdGVtKGxpc3QsIGkpOworCWNoYXIgKnN0cjsKKwlpbnQgbGVuOworCisJaWYgKCFQeUFyZ19QYXJzZShsaW5lLCAicyMiLCAmc3RyLCAmbGVuKSkgeworCSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCBfKCJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIikpOworCSAgICBQeV9ERUNSRUYobGlzdCk7CisJICAgIHJldHVybiBOVUxMOworCX0KKworCVB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKwlQeXRob25fTG9ja19WaW0oKTsKKwl3cml0ZXIoKHdyaXRlZm4pKGVycm9yID8gZW1zZyA6IG1zZyksIChjaGFyX3UgKilzdHIsIGxlbik7CisJUHl0aG9uX1JlbGVhc2VfVmltKCk7CisJUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9CisKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworfQorCisvKiBPdXRwdXQgYnVmZmVyIG1hbmFnZW1lbnQKKyAqLworCitzdGF0aWMgY2hhcl91ICpidWZmZXIgPSBOVUxMOworc3RhdGljIGludCBidWZmZXJfbGVuID0gMDsKK3N0YXRpYyBpbnQgYnVmZmVyX3NpemUgPSAwOworCitzdGF0aWMgd3JpdGVmbiBvbGRfZm4gPSBOVUxMOworCisgICAgc3RhdGljIHZvaWQKK2J1ZmZlcl9lbnN1cmUoaW50IG4pCit7CisgICAgaW50IG5ld19zaXplOworICAgIGNoYXJfdSAqbmV3X2J1ZmZlcjsKKworICAgIGlmIChuIDwgYnVmZmVyX3NpemUpCisJcmV0dXJuOworCisgICAgbmV3X3NpemUgPSBidWZmZXJfc2l6ZTsKKyAgICB3aGlsZSAobmV3X3NpemUgPCBuKQorCW5ld19zaXplICs9IDgwOworCisgICAgaWYgKG5ld19zaXplICE9IGJ1ZmZlcl9zaXplKQorICAgIHsKKwluZXdfYnVmZmVyID0gYWxsb2MoKHVuc2lnbmVkKW5ld19zaXplKTsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCSAgICByZXR1cm47CisKKwlpZiAoYnVmZmVyKQorCXsKKwkgICAgbWVtY3B5KG5ld19idWZmZXIsIGJ1ZmZlciwgYnVmZmVyX2xlbik7CisJICAgIHZpbV9mcmVlKGJ1ZmZlcik7CisJfQorCisJYnVmZmVyID0gbmV3X2J1ZmZlcjsKKwlidWZmZXJfc2l6ZSA9IG5ld19zaXplOworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitQeXRob25JT19GbHVzaCh2b2lkKQoreworICAgIGlmIChvbGRfZm4gJiYgYnVmZmVyX2xlbikKKyAgICB7CisJYnVmZmVyW2J1ZmZlcl9sZW5dID0gMDsKKwlvbGRfZm4oYnVmZmVyKTsKKyAgICB9CisKKyAgICBidWZmZXJfbGVuID0gMDsKK30KKworICAgIHN0YXRpYyB2b2lkCit3cml0ZXIod3JpdGVmbiBmbiwgY2hhcl91ICpzdHIsIGludCBuKQoreworICAgIGNoYXJfdSAqcHRyOworCisgICAgaWYgKGZuICE9IG9sZF9mbiAmJiBvbGRfZm4gIT0gTlVMTCkKKwlQeXRob25JT19GbHVzaCgpOworCisgICAgb2xkX2ZuID0gZm47CisKKyAgICB3aGlsZSAobiA+IDAgJiYgKHB0ciA9IG1lbWNocihzdHIsICdcbicsIG4pKSAhPSBOVUxMKQorICAgIHsKKwlpbnQgbGVuID0gcHRyIC0gc3RyOworCisJYnVmZmVyX2Vuc3VyZShidWZmZXJfbGVuICsgbGVuICsgMSk7CisKKwltZW1jcHkoYnVmZmVyICsgYnVmZmVyX2xlbiwgc3RyLCBsZW4pOworCWJ1ZmZlcl9sZW4gKz0gbGVuOworCWJ1ZmZlcltidWZmZXJfbGVuXSA9IDA7CisJZm4oYnVmZmVyKTsKKwlzdHIgPSBwdHIgKyAxOworCW4gLT0gbGVuICsgMTsKKwlidWZmZXJfbGVuID0gMDsKKyAgICB9CisKKyAgICAvKiBQdXQgdGhlIHJlbWFpbmluZyB0ZXh0IGludG8gdGhlIGJ1ZmZlciBmb3IgbGF0ZXIgcHJpbnRpbmcgKi8KKyAgICBidWZmZXJfZW5zdXJlKGJ1ZmZlcl9sZW4gKyBuICsgMSk7CisgICAgbWVtY3B5KGJ1ZmZlciArIGJ1ZmZlcl9sZW4sIHN0ciwgbik7CisgICAgYnVmZmVyX2xlbiArPSBuOworfQorCisvKioqKioqKioqKioqKioqLworCitzdGF0aWMgT3V0cHV0T2JqZWN0IE91dHB1dCA9Cit7CisgICAgUHlPYmplY3RfSEVBRF9JTklUKCZPdXRwdXRUeXBlKQorICAgIDAsCisgICAgMAorfTsKKworc3RhdGljIE91dHB1dE9iamVjdCBFcnJvciA9Cit7CisgICAgUHlPYmplY3RfSEVBRF9JTklUKCZPdXRwdXRUeXBlKQorICAgIDAsCisgICAgMQorfTsKKworICAgIHN0YXRpYyBpbnQKK1B5dGhvbklPX0luaXQodm9pZCkKK3sKKyAgICAvKiBGaXh1cHMuLi4gKi8KKyAgICBPdXRwdXRUeXBlLm9iX3R5cGUgPSAmUHlUeXBlX1R5cGU7CisKKyAgICBQeVN5c19TZXRPYmplY3QoInN0ZG91dCIsIChQeU9iamVjdCAqKSgmT3V0cHV0KSk7CisgICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRlcnIiLCAoUHlPYmplY3QgKikoJkVycm9yKSk7CisKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICB7CisJRU1TRyhfKCJFMjY0OiBQeXRob246IEVycm9yIGluaXRpYWxpc2luZyBJL08gb2JqZWN0cyIpKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIDMuIEltcGxlbWVudGF0aW9uIG9mIHRoZSBWaW0gbW9kdWxlIGZvciBQeXRob24KKyAqLworCisvKiBWaW0gbW9kdWxlIC0gSW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIFB5T2JqZWN0ICpWaW1FcnJvcjsKKworc3RhdGljIFB5T2JqZWN0ICpWaW1Db21tYW5kKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworc3RhdGljIFB5T2JqZWN0ICpWaW1FdmFsKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworCisvKiBXaW5kb3cgdHlwZSAtIEltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFB5T2JqZWN0X0hFQUQKKyAgICB3aW5fVAkqd2luOworfQorV2luZG93T2JqZWN0OworCisjZGVmaW5lIElOVkFMSURfV0lORE9XX1ZBTFVFICgod2luX1QgKikoLTEpKQorCisjZGVmaW5lIFdpbmRvd1R5cGVfQ2hlY2sob2JqKSAoKG9iaiktPm9iX3R5cGUgPT0gJldpbmRvd1R5cGUpCisKK3N0YXRpYyBQeU9iamVjdCAqV2luZG93TmV3KHdpbl9UICopOworCitzdGF0aWMgdm9pZCBXaW5kb3dEZXN0cnVjdG9yKFB5T2JqZWN0ICopOworc3RhdGljIFB5T2JqZWN0ICpXaW5kb3dHZXRhdHRyKFB5T2JqZWN0ICosIGNoYXIgKik7CitzdGF0aWMgaW50IFdpbmRvd1NldGF0dHIoUHlPYmplY3QgKiwgY2hhciAqLCBQeU9iamVjdCAqKTsKK3N0YXRpYyBQeU9iamVjdCAqV2luZG93UmVwcihQeU9iamVjdCAqKTsKKworLyogQnVmZmVyIHR5cGUgLSBJbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQeU9iamVjdF9IRUFECisgICAgYnVmX1QgKmJ1ZjsKK30KK0J1ZmZlck9iamVjdDsKKworI2RlZmluZSBJTlZBTElEX0JVRkZFUl9WQUxVRSAoKGJ1Zl9UICopKC0xKSkKKworI2RlZmluZSBCdWZmZXJUeXBlX0NoZWNrKG9iaikgKChvYmopLT5vYl90eXBlID09ICZCdWZmZXJUeXBlKQorCitzdGF0aWMgUHlPYmplY3QgKkJ1ZmZlck5ldyAoYnVmX1QgKik7CisKK3N0YXRpYyB2b2lkIEJ1ZmZlckRlc3RydWN0b3IoUHlPYmplY3QgKik7CitzdGF0aWMgUHlPYmplY3QgKkJ1ZmZlckdldGF0dHIoUHlPYmplY3QgKiwgY2hhciAqKTsKK3N0YXRpYyBQeU9iamVjdCAqQnVmZmVyUmVwcihQeU9iamVjdCAqKTsKKworc3RhdGljIGludCBCdWZmZXJMZW5ndGgoUHlPYmplY3QgKik7CitzdGF0aWMgUHlPYmplY3QgKkJ1ZmZlckl0ZW0oUHlPYmplY3QgKiwgaW50KTsKK3N0YXRpYyBQeU9iamVjdCAqQnVmZmVyU2xpY2UoUHlPYmplY3QgKiwgaW50LCBpbnQpOworc3RhdGljIGludCBCdWZmZXJBc3NJdGVtKFB5T2JqZWN0ICosIGludCwgUHlPYmplY3QgKik7CitzdGF0aWMgaW50IEJ1ZmZlckFzc1NsaWNlKFB5T2JqZWN0ICosIGludCwgaW50LCBQeU9iamVjdCAqKTsKKworc3RhdGljIFB5T2JqZWN0ICpCdWZmZXJBcHBlbmQoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitzdGF0aWMgUHlPYmplY3QgKkJ1ZmZlck1hcmsoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitzdGF0aWMgUHlPYmplY3QgKkJ1ZmZlclJhbmdlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworCisvKiBMaW5lIHJhbmdlIHR5cGUgLSBJbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQeU9iamVjdF9IRUFECisgICAgQnVmZmVyT2JqZWN0ICpidWY7CisgICAgaW50IHN0YXJ0OworICAgIGludCBlbmQ7Cit9CitSYW5nZU9iamVjdDsKKworI2RlZmluZSBSYW5nZVR5cGVfQ2hlY2sob2JqKSAoKG9iaiktPm9iX3R5cGUgPT0gJlJhbmdlVHlwZSkKKworc3RhdGljIFB5T2JqZWN0ICpSYW5nZU5ldyhidWZfVCAqLCBpbnQsIGludCk7CisKK3N0YXRpYyB2b2lkIFJhbmdlRGVzdHJ1Y3RvcihQeU9iamVjdCAqKTsKK3N0YXRpYyBQeU9iamVjdCAqUmFuZ2VHZXRhdHRyKFB5T2JqZWN0ICosIGNoYXIgKik7CitzdGF0aWMgUHlPYmplY3QgKlJhbmdlUmVwcihQeU9iamVjdCAqKTsKKworc3RhdGljIGludCBSYW5nZUxlbmd0aChQeU9iamVjdCAqKTsKK3N0YXRpYyBQeU9iamVjdCAqUmFuZ2VJdGVtKFB5T2JqZWN0ICosIGludCk7CitzdGF0aWMgUHlPYmplY3QgKlJhbmdlU2xpY2UoUHlPYmplY3QgKiwgaW50LCBpbnQpOworc3RhdGljIGludCBSYW5nZUFzc0l0ZW0oUHlPYmplY3QgKiwgaW50LCBQeU9iamVjdCAqKTsKK3N0YXRpYyBpbnQgUmFuZ2VBc3NTbGljZShQeU9iamVjdCAqLCBpbnQsIGludCwgUHlPYmplY3QgKik7CisKK3N0YXRpYyBQeU9iamVjdCAqUmFuZ2VBcHBlbmQoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisKKy8qIFdpbmRvdyBsaXN0IHR5cGUgLSBJbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgaW50IFdpbkxpc3RMZW5ndGgoUHlPYmplY3QgKik7CitzdGF0aWMgUHlPYmplY3QgKldpbkxpc3RJdGVtKFB5T2JqZWN0ICosIGludCk7CisKKy8qIEJ1ZmZlciBsaXN0IHR5cGUgLSBJbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgaW50IEJ1Zkxpc3RMZW5ndGgoUHlPYmplY3QgKik7CitzdGF0aWMgUHlPYmplY3QgKkJ1Zkxpc3RJdGVtKFB5T2JqZWN0ICosIGludCk7CisKKy8qIEN1cnJlbnQgb2JqZWN0cyB0eXBlIC0gSW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBQeU9iamVjdCAqQ3VycmVudEdldGF0dHIoUHlPYmplY3QgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgQ3VycmVudFNldGF0dHIoUHlPYmplY3QgKiwgY2hhciAqLCBQeU9iamVjdCAqKTsKKworLyogVmltIG1vZHVsZSAtIERlZmluaXRpb25zCisgKi8KKworc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBWaW1NZXRob2RzW10gPSB7CisgICAgLyogbmFtZSwJICAgICBmdW5jdGlvbiwJCWNhbGxpbmcsICAgIGRvY3VtZW50YXRpb24gKi8KKyAgICB7ImNvbW1hbmQiLAkgICAgIFZpbUNvbW1hbmQsCTEsCSAgICAiIiB9LAorICAgIHsiZXZhbCIsCSAgICAgVmltRXZhbCwJCTEsCSAgICAiIiB9LAorICAgIHsgTlVMTCwJICAgICBOVUxMLAkJMCwJICAgIE5VTEwgfQorfTsKKworLyogVmltIG1vZHVsZSAtIEltcGxlbWVudGF0aW9uCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyBQeU9iamVjdCAqCitWaW1Db21tYW5kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpjbWQ7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZjbWQpKQorCXJldHVybiBOVUxMOworCisgICAgUHlFcnJfQ2xlYXIoKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBQeXRob25fTG9ja19WaW0oKTsKKworICAgIGRvX2NtZGxpbmVfY21kKChjaGFyX3UgKiljbWQpOworICAgIHVwZGF0ZV9zY3JlZW4oVkFMSUQpOworCisgICAgUHl0aG9uX1JlbGVhc2VfVmltKCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChWaW1FcnJvckNoZWNrKCkpCisJcmVzdWx0ID0gTlVMTDsKKyAgICBlbHNlCisJcmVzdWx0ID0gUHlfTm9uZTsKKworICAgIFB5X1hJTkNSRUYocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKgorVmltRXZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisjaWZkZWYgRkVBVF9FVkFMCisgICAgY2hhcgkqZXhwcjsKKyAgICBjaGFyCSpzdHI7CisgICAgUHlPYmplY3QJKnJlc3VsdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZleHByKSkKKwlyZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBQeXRob25fTG9ja19WaW0oKTsKKyAgICBzdHIgPSAoY2hhciAqKWV2YWxfdG9fc3RyaW5nKChjaGFyX3UgKilleHByLCBOVUxMKTsKKyAgICBQeXRob25fUmVsZWFzZV9WaW0oKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgIHsKKwlQeUVycl9TZXRWaW0oXygiaW52YWxpZCBleHByZXNzaW9uIikpOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoInMiLCBzdHIpOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIFB5dGhvbl9Mb2NrX1ZpbSgpOworICAgIHZpbV9mcmVlKHN0cik7CisgICAgUHl0aG9uX1JlbGVhc2VfVmltKCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFB5RXJyX1NldFZpbShfKCJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiKSk7CisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworLyogQ29tbW9uIHJvdXRpbmVzIGZvciBidWZmZXJzIGFuZCBsaW5lIHJhbmdlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisgICAgc3RhdGljIGludAorQ2hlY2tCdWZmZXIoQnVmZmVyT2JqZWN0ICp0aGlzKQoreworICAgIGlmICh0aGlzLT5idWYgPT0gSU5WQUxJRF9CVUZGRVJfVkFMVUUpCisgICAgeworCVB5RXJyX1NldFZpbShfKCJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIikpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworICAgIHN0YXRpYyBQeU9iamVjdCAqCitSQkl0ZW0oQnVmZmVyT2JqZWN0ICpzZWxmLCBpbnQgbiwgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIGlmIChDaGVja0J1ZmZlcihzZWxmKSkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmIChuIDwgMCB8fCBuID4gZW5kIC0gc3RhcnQpCisgICAgeworCVB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCBfKCJsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UiKSk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIEdldEJ1ZmZlckxpbmUoc2VsZi0+YnVmLCBuK3N0YXJ0KTsKK30KKworICAgIHN0YXRpYyBQeU9iamVjdCAqCitSQlNsaWNlKEJ1ZmZlck9iamVjdCAqc2VsZiwgaW50IGxvLCBpbnQgaGksIGludCBzdGFydCwgaW50IGVuZCkKK3sKKyAgICBpbnQgc2l6ZTsKKworICAgIGlmIChDaGVja0J1ZmZlcihzZWxmKSkKKwlyZXR1cm4gTlVMTDsKKworICAgIHNpemUgPSBlbmQgLSBzdGFydCArIDE7CisKKyAgICBpZiAobG8gPCAwKQorCWxvID0gMDsKKyAgICBlbHNlIGlmIChsbyA+IHNpemUpCisJbG8gPSBzaXplOworICAgIGlmIChoaSA8IDApCisJaGkgPSAwOworICAgIGlmIChoaSA8IGxvKQorCWhpID0gbG87CisgICAgZWxzZSBpZiAoaGkgPiBzaXplKQorCWhpID0gc2l6ZTsKKworICAgIHJldHVybiBHZXRCdWZmZXJMaW5lTGlzdChzZWxmLT5idWYsIGxvK3N0YXJ0LCBoaStzdGFydCk7Cit9CisKKyAgICBzdGF0aWMgaW50CitSQkFzc0l0ZW0oQnVmZmVyT2JqZWN0ICpzZWxmLCBpbnQgbiwgUHlPYmplY3QgKnZhbCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgKm5ld19lbmQpCit7CisgICAgaW50IGxlbl9jaGFuZ2U7CisKKyAgICBpZiAoQ2hlY2tCdWZmZXIoc2VsZikpCisJcmV0dXJuIC0xOworCisgICAgaWYgKG4gPCAwIHx8IG4gPiBlbmQgLSBzdGFydCkKKyAgICB7CisJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsIF8oImxpbmUgbnVtYmVyIG91dCBvZiByYW5nZSIpKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKFNldEJ1ZmZlckxpbmUoc2VsZi0+YnVmLCBuK3N0YXJ0LCB2YWwsICZsZW5fY2hhbmdlKSA9PSBGQUlMKQorCXJldHVybiAtMTsKKworICAgIGlmIChuZXdfZW5kKQorCSpuZXdfZW5kID0gZW5kICsgbGVuX2NoYW5nZTsKKworICAgIHJldHVybiAwOworfQorCisgICAgc3RhdGljIGludAorUkJBc3NTbGljZShCdWZmZXJPYmplY3QgKnNlbGYsIGludCBsbywgaW50IGhpLCBQeU9iamVjdCAqdmFsLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCAqbmV3X2VuZCkKK3sKKyAgICBpbnQgc2l6ZTsKKyAgICBpbnQgbGVuX2NoYW5nZTsKKworICAgIC8qIFNlbGYgbXVzdCBiZSBhIHZhbGlkIGJ1ZmZlciAqLworICAgIGlmIChDaGVja0J1ZmZlcihzZWxmKSkKKwlyZXR1cm4gLTE7CisKKyAgICAvKiBTb3J0IG91dCB0aGUgc2xpY2UgcmFuZ2UgKi8KKyAgICBzaXplID0gZW5kIC0gc3RhcnQgKyAxOworCisgICAgaWYgKGxvIDwgMCkKKwlsbyA9IDA7CisgICAgZWxzZSBpZiAobG8gPiBzaXplKQorCWxvID0gc2l6ZTsKKyAgICBpZiAoaGkgPCAwKQorCWhpID0gMDsKKyAgICBpZiAoaGkgPCBsbykKKwloaSA9IGxvOworICAgIGVsc2UgaWYgKGhpID4gc2l6ZSkKKwloaSA9IHNpemU7CisKKyAgICBpZiAoU2V0QnVmZmVyTGluZUxpc3Qoc2VsZi0+YnVmLCBsbytzdGFydCwgaGkrc3RhcnQsIHZhbCwgJmxlbl9jaGFuZ2UpID09IEZBSUwpCisJcmV0dXJuIC0xOworCisgICAgaWYgKG5ld19lbmQpCisJKm5ld19lbmQgPSBlbmQgKyBsZW5fY2hhbmdlOworCisgICAgcmV0dXJuIDA7Cit9CisKKyAgICBzdGF0aWMgUHlPYmplY3QgKgorUkJBcHBlbmQoQnVmZmVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgKm5ld19lbmQpCit7CisgICAgUHlPYmplY3QgKmxpbmVzOworICAgIGludCBsZW5fY2hhbmdlOworICAgIGludCBtYXg7CisgICAgaW50IG47CisKKyAgICBpZiAoQ2hlY2tCdWZmZXIoc2VsZikpCisJcmV0dXJuIE5VTEw7CisKKyAgICBtYXggPSBuID0gZW5kIC0gc3RhcnQgKyAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfGkiLCAmbGluZXMsICZuKSkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmIChuIDwgMCB8fCBuID4gbWF4KQorICAgIHsKKwlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXygibGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIikpOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChJbnNlcnRCdWZmZXJMaW5lcyhzZWxmLT5idWYsIG4gKyBzdGFydCAtIDEsIGxpbmVzLCAmbGVuX2NoYW5nZSkgPT0gRkFJTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmIChuZXdfZW5kKQorCSpuZXdfZW5kID0gZW5kICsgbGVuX2NoYW5nZTsKKworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKworCisvKiBCdWZmZXIgb2JqZWN0IC0gRGVmaW5pdGlvbnMKKyAqLworCitzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIEJ1ZmZlck1ldGhvZHNbXSA9IHsKKyAgICAvKiBuYW1lLAkgICAgZnVuY3Rpb24sCQljYWxsaW5nLCAgICBkb2N1bWVudGF0aW9uICovCisgICAgeyJhcHBlbmQiLAkgICAgQnVmZmVyQXBwZW5kLAkxLAkgICAgIiIgfSwKKyAgICB7Im1hcmsiLAkgICAgQnVmZmVyTWFyaywJCTEsCSAgICAiIiB9LAorICAgIHsicmFuZ2UiLAkgICAgQnVmZmVyUmFuZ2UsCTEsCSAgICAiIiB9LAorICAgIHsgTlVMTCwJICAgIE5VTEwsCQkwLAkgICAgTlVMTCB9Cit9OworCitzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgQnVmZmVyQXNTZXEgPSB7CisgICAgKGlucXVpcnkpCQlCdWZmZXJMZW5ndGgsCSAgICAvKiBzcV9sZW5ndGgsICAgIGxlbih4KSAgICovCisgICAgKGJpbmFyeWZ1bmMpCTAsIC8qIEJ1ZmZlckNvbmNhdCwgKi8JICAgICAvKiBzcV9jb25jYXQsICAgIHgreSAgICAgICovCisgICAgKGludGFyZ2Z1bmMpCTAsIC8qIEJ1ZmZlclJlcGVhdCwgKi8JICAgICAvKiBzcV9yZXBlYXQsICAgIHgqbiAgICAgICovCisgICAgKGludGFyZ2Z1bmMpCUJ1ZmZlckl0ZW0sCSAgICAvKiBzcV9pdGVtLCAgICAgIHhbaV0gICAgICovCisgICAgKGludGludGFyZ2Z1bmMpCUJ1ZmZlclNsaWNlLAkgICAgLyogc3Ffc2xpY2UsICAgICB4W2k6al0gICAqLworICAgIChpbnRvYmphcmdwcm9jKQlCdWZmZXJBc3NJdGVtLAkgICAgLyogc3FfYXNzX2l0ZW0sICB4W2ldPXYgICAqLworICAgIChpbnRpbnRvYmphcmdwcm9jKQlCdWZmZXJBc3NTbGljZSwgICAgIC8qIHNxX2Fzc19zbGljZSwgeFtpOmpdPXYgKi8KK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgQnVmZmVyVHlwZSA9IHsKKyAgICBQeU9iamVjdF9IRUFEX0lOSVQoMCkKKyAgICAwLAorICAgICJidWZmZXIiLAorICAgIHNpemVvZihCdWZmZXJPYmplY3QpLAorICAgIDAsCisKKyAgICAoZGVzdHJ1Y3RvcikgICAgQnVmZmVyRGVzdHJ1Y3RvciwJLyogdHBfZGVhbGxvYywJcmVmY291bnQ9PTAgICovCisgICAgKHByaW50ZnVuYykgICAgIDAsCQkJLyogdHBfcHJpbnQsCXByaW50IHggICAgICAqLworICAgIChnZXRhdHRyZnVuYykgICBCdWZmZXJHZXRhdHRyLAkvKiB0cF9nZXRhdHRyLAl4LmF0dHIJICAgICAqLworICAgIChzZXRhdHRyZnVuYykgICAwLAkJCS8qIHRwX3NldGF0dHIsCXguYXR0cj12ICAgICAqLworICAgIChjbXBmdW5jKQkgICAgMCwJCQkvKiB0cF9jb21wYXJlLAl4PnkJICAgICAqLworICAgIChyZXByZnVuYykJICAgIEJ1ZmZlclJlcHIsCQkvKiB0cF9yZXByLAlgeGAsIHByaW50IHggKi8KKworICAgIDAsCQkgICAgLyogYXMgbnVtYmVyICovCisgICAgJkJ1ZmZlckFzU2VxLCAgIC8qIGFzIHNlcXVlbmNlICovCisgICAgMCwJCSAgICAvKiBhcyBtYXBwaW5nICovCisKKyAgICAoaGFzaGZ1bmMpIDAsCQkJLyogdHBfaGFzaCwgZGljdCh4KSAqLworICAgICh0ZXJuYXJ5ZnVuYykgMCwJCQkvKiB0cF9jYWxsLCB4KCkgICAgICovCisgICAgKHJlcHJmdW5jKSAwLAkJCS8qIHRwX3N0ciwgIHN0cih4KSAgKi8KK307CisKKy8qIEJ1ZmZlciBvYmplY3QgLSBJbXBsZW1lbnRhdGlvbgorICovCisKKyAgICBzdGF0aWMgUHlPYmplY3QgKgorQnVmZmVyTmV3KGJ1Zl9UICpidWYpCit7CisgICAgLyogV2UgbmVlZCB0byBoYW5kbGUgZGVsZXRpb24gb2YgYnVmZmVycyB1bmRlcm5lYXRoIHVzLgorICAgICAqIElmIHdlIGFkZCBhICJweXRob25fcmVmIiBmaWVsZCB0byB0aGUgYnVmX1Qgc3RydWN0dXJlLAorICAgICAqIHRoZW4gd2UgY2FuIGdldCBhdCBpdCBpbiBidWZfZnJlZWFsbCgpIGluIHZpbS4gV2UgdGhlbgorICAgICAqIG5lZWQgdG8gY3JlYXRlIG9ubHkgT05FIFB5dGhvbiBvYmplY3QgcGVyIGJ1ZmZlciAtIGlmCisgICAgICogd2UgdHJ5IHRvIGNyZWF0ZSBhIHNlY29uZCwganVzdCBJTkNSRUYgdGhlIGV4aXN0aW5nIG9uZQorICAgICAqIGFuZCByZXR1cm4gaXQuIFRoZSAoc2luZ2xlKSBQeXRob24gb2JqZWN0IHJlZmVycmluZyB0bworICAgICAqIHRoZSBidWZmZXIgaXMgc3RvcmVkIGluICJweXRob25fcmVmIi4KKyAgICAgKiBRdWVzdGlvbjogd2hhdCB0byBkbyBvbiBhIGJ1Zl9mcmVlYWxsKCkuIFdlJ2xsIHByb2JhYmx5CisgICAgICogaGF2ZSB0byBlaXRoZXIgZGVsZXRlIHRoZSBQeXRob24gb2JqZWN0IChERUNSRUYgaXQgdG8KKyAgICAgKiB6ZXJvIC0gYSBiYWQgaWRlYSwgYXMgaXQgbGVhdmVzIGRhbmdsaW5nIHJlZnMhKSBvcgorICAgICAqIHNldCB0aGUgYnVmX1QgKiB2YWx1ZSB0byBhbiBpbnZhbGlkIHZhbHVlICgtMT8pLCB3aGljaAorICAgICAqIG1lYW5zIHdlIG5lZWQgY2hlY2tzIGluIGFsbCBhY2Nlc3MgZnVuY3Rpb25zLi4uIEJhaC4KKyAgICAgKi8KKworICAgIEJ1ZmZlck9iamVjdCAqc2VsZjsKKworICAgIGlmIChidWYtPnB5dGhvbl9yZWYpCisgICAgeworCXNlbGYgPSBidWYtPnB5dGhvbl9yZWY7CisJUHlfSU5DUkVGKHNlbGYpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXNlbGYgPSBQeU9iamVjdF9ORVcoQnVmZmVyT2JqZWN0LCAmQnVmZmVyVHlwZSk7CisJaWYgKHNlbGYgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisJc2VsZi0+YnVmID0gYnVmOworCWJ1Zi0+cHl0aG9uX3JlZiA9IHNlbGY7CisgICAgfQorCisgICAgcmV0dXJuIChQeU9iamVjdCAqKShzZWxmKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitCdWZmZXJEZXN0cnVjdG9yKFB5T2JqZWN0ICpzZWxmKQoreworICAgIEJ1ZmZlck9iamVjdCAqdGhpcyA9IChCdWZmZXJPYmplY3QgKikoc2VsZik7CisKKyAgICBpZiAodGhpcy0+YnVmICYmIHRoaXMtPmJ1ZiAhPSBJTlZBTElEX0JVRkZFUl9WQUxVRSkKKwl0aGlzLT5idWYtPnB5dGhvbl9yZWYgPSBOVUxMOworCisgICAgUHlNZW1fREVMKHNlbGYpOworfQorCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK0J1ZmZlckdldGF0dHIoUHlPYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUpCit7CisgICAgQnVmZmVyT2JqZWN0ICp0aGlzID0gKEJ1ZmZlck9iamVjdCAqKShzZWxmKTsKKworICAgIGlmIChDaGVja0J1ZmZlcih0aGlzKSkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmIChzdHJjbXAobmFtZSwgIm5hbWUiKSA9PSAwKQorCXJldHVybiBQeV9CdWlsZFZhbHVlKCJzIix0aGlzLT5idWYtPmJfZmZuYW1lKTsKKyAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgIm51bWJlciIpID09IDApCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLHRoaXMtPmJ1Zi0+Yl9mbnVtKTsKKyAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwiX19tZW1iZXJzX18iKSA9PSAwKQorCXJldHVybiBQeV9CdWlsZFZhbHVlKCJbc3NdIiwgIm5hbWUiLCAibnVtYmVyIik7CisgICAgZWxzZQorCXJldHVybiBQeV9GaW5kTWV0aG9kKEJ1ZmZlck1ldGhvZHMsIHNlbGYsIG5hbWUpOworfQorCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK0J1ZmZlclJlcHIoUHlPYmplY3QgKnNlbGYpCit7CisgICAgc3RhdGljIGNoYXIgcmVwcls1MF07CisgICAgQnVmZmVyT2JqZWN0ICp0aGlzID0gKEJ1ZmZlck9iamVjdCAqKShzZWxmKTsKKworICAgIGlmICh0aGlzLT5idWYgPT0gSU5WQUxJRF9CVUZGRVJfVkFMVUUpCisgICAgeworCXNwcmludGYocmVwciwgXygiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IiksIChsb25nKShzZWxmKSk7CisJcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVwcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY2hhciAqbmFtZSA9IChjaGFyICopdGhpcy0+YnVmLT5iX2ZuYW1lOworCWludCBsZW47CisKKwlpZiAobmFtZSA9PSBOVUxMKQorCSAgICBuYW1lID0gIiI7CisJbGVuID0gc3RybGVuKG5hbWUpOworCisJaWYgKGxlbiA+IDM1KQorCSAgICBuYW1lID0gbmFtZSArICgzNSAtIGxlbik7CisKKwlzcHJpbnRmKHJlcHIsICI8YnVmZmVyICVzJXM+IiwgbGVuID4gMzUgPyAiLi4uIiA6ICIiLCBuYW1lKTsKKworCXJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHJlcHIpOworICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKi8KKworICAgIHN0YXRpYyBpbnQKK0J1ZmZlckxlbmd0aChQeU9iamVjdCAqc2VsZikKK3sKKyAgICAvKiBIT1cgRE8gV0UgU0lHTkFMIEFOIEVSUk9SIEZST00gVEhJUyBGVU5DVElPTj8gKi8KKyAgICBpZiAoQ2hlY2tCdWZmZXIoKEJ1ZmZlck9iamVjdCAqKShzZWxmKSkpCisJcmV0dXJuIC0xOyAvKiA/Pz8gKi8KKworICAgIHJldHVybiAoKChCdWZmZXJPYmplY3QgKikoc2VsZikpLT5idWYtPmJfbWwubWxfbGluZV9jb3VudCk7Cit9CisKKyAgICBzdGF0aWMgUHlPYmplY3QgKgorQnVmZmVySXRlbShQeU9iamVjdCAqc2VsZiwgaW50IG4pCit7CisgICAgcmV0dXJuIFJCSXRlbSgoQnVmZmVyT2JqZWN0ICopKHNlbGYpLCBuLCAxLAorCQkgIChpbnQpKChCdWZmZXJPYmplY3QgKikoc2VsZikpLT5idWYtPmJfbWwubWxfbGluZV9jb3VudCk7Cit9CisKKyAgICBzdGF0aWMgUHlPYmplY3QgKgorQnVmZmVyU2xpY2UoUHlPYmplY3QgKnNlbGYsIGludCBsbywgaW50IGhpKQoreworICAgIHJldHVybiBSQlNsaWNlKChCdWZmZXJPYmplY3QgKikoc2VsZiksIGxvLCBoaSwgMSwKKwkJICAgKGludCkoKEJ1ZmZlck9iamVjdCAqKShzZWxmKSktPmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KTsKK30KKworICAgIHN0YXRpYyBpbnQKK0J1ZmZlckFzc0l0ZW0oUHlPYmplY3QgKnNlbGYsIGludCBuLCBQeU9iamVjdCAqdmFsKQoreworICAgIHJldHVybiBSQkFzc0l0ZW0oKEJ1ZmZlck9iamVjdCAqKShzZWxmKSwgbiwgdmFsLCAxLAorCQkgICAgIChpbnQpKChCdWZmZXJPYmplY3QgKikoc2VsZikpLT5idWYtPmJfbWwubWxfbGluZV9jb3VudCwKKwkJICAgICBOVUxMKTsKK30KKworICAgIHN0YXRpYyBpbnQKK0J1ZmZlckFzc1NsaWNlKFB5T2JqZWN0ICpzZWxmLCBpbnQgbG8sIGludCBoaSwgUHlPYmplY3QgKnZhbCkKK3sKKyAgICByZXR1cm4gUkJBc3NTbGljZSgoQnVmZmVyT2JqZWN0ICopKHNlbGYpLCBsbywgaGksIHZhbCwgMSwKKwkJICAgICAgKGludCkoKEJ1ZmZlck9iamVjdCAqKShzZWxmKSktPmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LAorCQkgICAgICBOVUxMKTsKK30KKworICAgIHN0YXRpYyBQeU9iamVjdCAqCitCdWZmZXJBcHBlbmQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBSQkFwcGVuZCgoQnVmZmVyT2JqZWN0ICopKHNlbGYpLCBhcmdzLCAxLAorCQkgICAgKGludCkoKEJ1ZmZlck9iamVjdCAqKShzZWxmKSktPmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LAorCQkgICAgTlVMTCk7Cit9CisKKyAgICBzdGF0aWMgUHlPYmplY3QgKgorQnVmZmVyTWFyayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcG9zX1QJKnBvc3A7CisgICAgY2hhcgltYXJrOworICAgIGJ1Zl9UCSpjdXJidWZfc2F2ZTsKKworICAgIGlmIChDaGVja0J1ZmZlcigoQnVmZmVyT2JqZWN0ICopKHNlbGYpKSkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiYyIsICZtYXJrKSkKKwlyZXR1cm4gTlVMTDsKKworICAgIGN1cmJ1Zl9zYXZlID0gY3VyYnVmOworICAgIGN1cmJ1ZiA9ICgoQnVmZmVyT2JqZWN0ICopKHNlbGYpKS0+YnVmOworICAgIHBvc3AgPSBnZXRtYXJrKG1hcmssIEZBTFNFKTsKKyAgICBjdXJidWYgPSBjdXJidWZfc2F2ZTsKKworICAgIGlmIChwb3NwID09IE5VTEwpCisgICAgeworCVB5RXJyX1NldFZpbShfKCJpbnZhbGlkIG1hcmsgbmFtZSIpKTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBDa2VjayBmb3Iga2V5Ym9hcmQgaW50ZXJydXB0ICovCisgICAgaWYgKFZpbUVycm9yQ2hlY2soKSkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmIChwb3NwLT5sbnVtIDw9IDApCisgICAgeworCS8qIE9yIHJhaXNlIGFuIGVycm9yPyAqLworCVB5X0lOQ1JFRihQeV9Ob25lKTsKKwlyZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGxsKSIsIChsb25nKShwb3NwLT5sbnVtKSwgKGxvbmcpKHBvc3AtPmNvbCkpOworfQorCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK0J1ZmZlclJhbmdlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgc3RhcnQ7CisgICAgaW50IGVuZDsKKworICAgIGlmIChDaGVja0J1ZmZlcigoQnVmZmVyT2JqZWN0ICopKHNlbGYpKSkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWkiLCAmc3RhcnQsICZlbmQpKQorCXJldHVybiBOVUxMOworCisgICAgcmV0dXJuIFJhbmdlTmV3KCgoQnVmZmVyT2JqZWN0ICopKHNlbGYpKS0+YnVmLCBzdGFydCwgZW5kKTsKK30KKworLyogTGluZSByYW5nZSBvYmplY3QgLSBEZWZpbml0aW9ucworICovCisKK3N0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgUmFuZ2VNZXRob2RzW10gPSB7CisgICAgLyogbmFtZSwJICAgIGZ1bmN0aW9uLAkJY2FsbGluZywgICAgZG9jdW1lbnRhdGlvbiAqLworICAgIHsiYXBwZW5kIiwJICAgIFJhbmdlQXBwZW5kLAkxLAkgICAgIiIgfSwKKyAgICB7IE5VTEwsCSAgICBOVUxMLAkJMCwJICAgIE5VTEwgfQorfTsKKworc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIFJhbmdlQXNTZXEgPSB7CisgICAgKGlucXVpcnkpCQlSYW5nZUxlbmd0aCwJICAgIC8qIHNxX2xlbmd0aCwgICAgbGVuKHgpICAgKi8KKyAgICAoYmluYXJ5ZnVuYykJMCwgLyogUmFuZ2VDb25jYXQsICovCSAgICAgLyogc3FfY29uY2F0LCAgICB4K3kgICAgICAqLworICAgIChpbnRhcmdmdW5jKQkwLCAvKiBSYW5nZVJlcGVhdCwgKi8JICAgICAvKiBzcV9yZXBlYXQsICAgIHgqbiAgICAgICovCisgICAgKGludGFyZ2Z1bmMpCVJhbmdlSXRlbSwJICAgIC8qIHNxX2l0ZW0sICAgICAgeFtpXSAgICAgKi8KKyAgICAoaW50aW50YXJnZnVuYykJUmFuZ2VTbGljZSwJICAgIC8qIHNxX3NsaWNlLCAgICAgeFtpOmpdICAgKi8KKyAgICAoaW50b2JqYXJncHJvYykJUmFuZ2VBc3NJdGVtLAkgICAgLyogc3FfYXNzX2l0ZW0sICB4W2ldPXYgICAqLworICAgIChpbnRpbnRvYmphcmdwcm9jKQlSYW5nZUFzc1NsaWNlLAkgICAgLyogc3FfYXNzX3NsaWNlLCB4W2k6al09diAqLworfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBSYW5nZVR5cGUgPSB7CisgICAgUHlPYmplY3RfSEVBRF9JTklUKDApCisgICAgMCwKKyAgICAicmFuZ2UiLAorICAgIHNpemVvZihSYW5nZU9iamVjdCksCisgICAgMCwKKworICAgIChkZXN0cnVjdG9yKSAgICBSYW5nZURlc3RydWN0b3IsCS8qIHRwX2RlYWxsb2MsCXJlZmNvdW50PT0wICAqLworICAgIChwcmludGZ1bmMpICAgICAwLAkJCS8qIHRwX3ByaW50LAlwcmludCB4ICAgICAgKi8KKyAgICAoZ2V0YXR0cmZ1bmMpICAgUmFuZ2VHZXRhdHRyLAkvKiB0cF9nZXRhdHRyLAl4LmF0dHIJICAgICAqLworICAgIChzZXRhdHRyZnVuYykgICAwLAkJCS8qIHRwX3NldGF0dHIsCXguYXR0cj12ICAgICAqLworICAgIChjbXBmdW5jKQkgICAgMCwJCQkvKiB0cF9jb21wYXJlLAl4PnkJICAgICAqLworICAgIChyZXByZnVuYykJICAgIFJhbmdlUmVwciwJCS8qIHRwX3JlcHIsCWB4YCwgcHJpbnQgeCAqLworCisgICAgMCwJCSAgICAvKiBhcyBudW1iZXIgKi8KKyAgICAmUmFuZ2VBc1NlcSwgICAgLyogYXMgc2VxdWVuY2UgKi8KKyAgICAwLAkJICAgIC8qIGFzIG1hcHBpbmcgKi8KKworICAgIChoYXNoZnVuYykgMCwJCQkvKiB0cF9oYXNoLCBkaWN0KHgpICovCisgICAgKHRlcm5hcnlmdW5jKSAwLAkJCS8qIHRwX2NhbGwsIHgoKSAgICAgKi8KKyAgICAocmVwcmZ1bmMpIDAsCQkJLyogdHBfc3RyLCAgc3RyKHgpICAqLworfTsKKworLyogTGluZSByYW5nZSBvYmplY3QgLSBJbXBsZW1lbnRhdGlvbgorICovCisKKyAgICBzdGF0aWMgUHlPYmplY3QgKgorUmFuZ2VOZXcoYnVmX1QgKmJ1ZiwgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIEJ1ZmZlck9iamVjdCAqYnVmcjsKKyAgICBSYW5nZU9iamVjdCAqc2VsZjsKKyAgICBzZWxmID0gUHlPYmplY3RfTkVXKFJhbmdlT2JqZWN0LCAmUmFuZ2VUeXBlKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgYnVmciA9IChCdWZmZXJPYmplY3QgKilCdWZmZXJOZXcoYnVmKTsKKyAgICBpZiAoYnVmciA9PSBOVUxMKQorICAgIHsKKwlQeU1lbV9ERUwoc2VsZik7CisJcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihidWZyKTsKKworICAgIHNlbGYtPmJ1ZiA9IGJ1ZnI7CisgICAgc2VsZi0+c3RhcnQgPSBzdGFydDsKKyAgICBzZWxmLT5lbmQgPSBlbmQ7CisKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopKHNlbGYpOworfQorCisgICAgc3RhdGljIHZvaWQKK1JhbmdlRGVzdHJ1Y3RvcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9ERUNSRUYoKChSYW5nZU9iamVjdCAqKShzZWxmKSktPmJ1Zik7CisgICAgUHlNZW1fREVMKHNlbGYpOworfQorCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK1JhbmdlR2V0YXR0cihQeU9iamVjdCAqc2VsZiwgY2hhciAqbmFtZSkKK3sKKyAgICBpZiAoc3RyY21wKG5hbWUsICJzdGFydCIpID09IDApCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCgoUmFuZ2VPYmplY3QgKikoc2VsZikpLT5zdGFydCAtIDEpOworICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiZW5kIikgPT0gMCkKKwlyZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsKChSYW5nZU9iamVjdCAqKShzZWxmKSktPmVuZCAtIDEpOworICAgIGVsc2UKKwlyZXR1cm4gUHlfRmluZE1ldGhvZChSYW5nZU1ldGhvZHMsIHNlbGYsIG5hbWUpOworfQorCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK1JhbmdlUmVwcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBzdGF0aWMgY2hhciByZXByWzc1XTsKKyAgICBSYW5nZU9iamVjdCAqdGhpcyA9IChSYW5nZU9iamVjdCAqKShzZWxmKTsKKworICAgIGlmICh0aGlzLT5idWYtPmJ1ZiA9PSBJTlZBTElEX0JVRkZFUl9WQUxVRSkKKyAgICB7CisJc3ByaW50ZihyZXByLCAiPHJhbmdlIG9iamVjdCAoZm9yIGRlbGV0ZWQgYnVmZmVyKSBhdCAlOGxYPiIsCisJCQkJCQkJCShsb25nKShzZWxmKSk7CisJcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVwcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY2hhciAqbmFtZSA9IChjaGFyICopdGhpcy0+YnVmLT5idWYtPmJfZm5hbWU7CisJaW50IGxlbjsKKworCWlmIChuYW1lID09IE5VTEwpCisJICAgIG5hbWUgPSAiIjsKKwlsZW4gPSBzdHJsZW4obmFtZSk7CisKKwlpZiAobGVuID4gNDUpCisJICAgIG5hbWUgPSBuYW1lICsgKDQ1IC0gbGVuKTsKKworCXNwcmludGYocmVwciwgIjxyYW5nZSAlcyVzICglZDolZCk+IiwKKwkJbGVuID4gNDUgPyAiLi4uIiA6ICIiLCBuYW1lLAorCQl0aGlzLT5zdGFydCwgdGhpcy0+ZW5kKTsKKworCXJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHJlcHIpOworICAgIH0KK30KKworLyoqKioqKioqKioqKioqKiovCisKKyAgICBzdGF0aWMgaW50CitSYW5nZUxlbmd0aChQeU9iamVjdCAqc2VsZikKK3sKKyAgICAvKiBIT1cgRE8gV0UgU0lHTkFMIEFOIEVSUk9SIEZST00gVEhJUyBGVU5DVElPTj8gKi8KKyAgICBpZiAoQ2hlY2tCdWZmZXIoKChSYW5nZU9iamVjdCAqKShzZWxmKSktPmJ1ZikpCisJcmV0dXJuIC0xOyAvKiA/Pz8gKi8KKworICAgIHJldHVybiAoKChSYW5nZU9iamVjdCAqKShzZWxmKSktPmVuZCAtICgoUmFuZ2VPYmplY3QgKikoc2VsZikpLT5zdGFydCArIDEpOworfQorCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK1JhbmdlSXRlbShQeU9iamVjdCAqc2VsZiwgaW50IG4pCit7CisgICAgcmV0dXJuIFJCSXRlbSgoKFJhbmdlT2JqZWN0ICopKHNlbGYpKS0+YnVmLCBuLAorCQkgICgoUmFuZ2VPYmplY3QgKikoc2VsZikpLT5zdGFydCwKKwkJICAoKFJhbmdlT2JqZWN0ICopKHNlbGYpKS0+ZW5kKTsKK30KKworICAgIHN0YXRpYyBQeU9iamVjdCAqCitSYW5nZVNsaWNlKFB5T2JqZWN0ICpzZWxmLCBpbnQgbG8sIGludCBoaSkKK3sKKyAgICByZXR1cm4gUkJTbGljZSgoKFJhbmdlT2JqZWN0ICopKHNlbGYpKS0+YnVmLCBsbywgaGksCisJCSAgICgoUmFuZ2VPYmplY3QgKikoc2VsZikpLT5zdGFydCwKKwkJICAgKChSYW5nZU9iamVjdCAqKShzZWxmKSktPmVuZCk7Cit9CisKKyAgICBzdGF0aWMgaW50CitSYW5nZUFzc0l0ZW0oUHlPYmplY3QgKnNlbGYsIGludCBuLCBQeU9iamVjdCAqdmFsKQoreworICAgIHJldHVybiBSQkFzc0l0ZW0oKChSYW5nZU9iamVjdCAqKShzZWxmKSktPmJ1ZiwgbiwgdmFsLAorCQkgICAgICgoUmFuZ2VPYmplY3QgKikoc2VsZikpLT5zdGFydCwKKwkJICAgICAoKFJhbmdlT2JqZWN0ICopKHNlbGYpKS0+ZW5kLAorCQkgICAgICYoKFJhbmdlT2JqZWN0ICopKHNlbGYpKS0+ZW5kKTsKK30KKworICAgIHN0YXRpYyBpbnQKK1JhbmdlQXNzU2xpY2UoUHlPYmplY3QgKnNlbGYsIGludCBsbywgaW50IGhpLCBQeU9iamVjdCAqdmFsKQoreworICAgIHJldHVybiBSQkFzc1NsaWNlKCgoUmFuZ2VPYmplY3QgKikoc2VsZikpLT5idWYsIGxvLCBoaSwgdmFsLAorCQkgICAgICAoKFJhbmdlT2JqZWN0ICopKHNlbGYpKS0+c3RhcnQsCisJCSAgICAgICgoUmFuZ2VPYmplY3QgKikoc2VsZikpLT5lbmQsCisJCSAgICAgICYoKFJhbmdlT2JqZWN0ICopKHNlbGYpKS0+ZW5kKTsKK30KKworICAgIHN0YXRpYyBQeU9iamVjdCAqCitSYW5nZUFwcGVuZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIFJCQXBwZW5kKCgoUmFuZ2VPYmplY3QgKikoc2VsZikpLT5idWYsIGFyZ3MsCisJCSAgICAoKFJhbmdlT2JqZWN0ICopKHNlbGYpKS0+c3RhcnQsCisJCSAgICAoKFJhbmdlT2JqZWN0ICopKHNlbGYpKS0+ZW5kLAorCQkgICAgJigoUmFuZ2VPYmplY3QgKikoc2VsZikpLT5lbmQpOworfQorCisvKiBCdWZmZXIgbGlzdCBvYmplY3QgLSBEZWZpbml0aW9ucworICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUHlPYmplY3RfSEVBRAorfQorQnVmTGlzdE9iamVjdDsKKworc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIEJ1Zkxpc3RBc1NlcSA9IHsKKyAgICAoaW5xdWlyeSkJCUJ1Zkxpc3RMZW5ndGgsCSAgICAvKiBzcV9sZW5ndGgsICAgIGxlbih4KSAgICovCisgICAgKGJpbmFyeWZ1bmMpCTAsCQkgICAgLyogc3FfY29uY2F0LCAgICB4K3kgICAgICAqLworICAgIChpbnRhcmdmdW5jKQkwLAkJICAgIC8qIHNxX3JlcGVhdCwgICAgeCpuICAgICAgKi8KKyAgICAoaW50YXJnZnVuYykJQnVmTGlzdEl0ZW0sCSAgICAvKiBzcV9pdGVtLCAgICAgIHhbaV0gICAgICovCisgICAgKGludGludGFyZ2Z1bmMpCTAsCQkgICAgLyogc3Ffc2xpY2UsICAgICB4W2k6al0gICAqLworICAgIChpbnRvYmphcmdwcm9jKQkwLAkJICAgIC8qIHNxX2Fzc19pdGVtLCAgeFtpXT12ICAgKi8KKyAgICAoaW50aW50b2JqYXJncHJvYykJMCwJCSAgICAvKiBzcV9hc3Nfc2xpY2UsIHhbaTpqXT12ICovCit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IEJ1Zkxpc3RUeXBlID0geworICAgIFB5T2JqZWN0X0hFQURfSU5JVCgwKQorICAgIDAsCisgICAgImJ1ZmZlciBsaXN0IiwKKyAgICBzaXplb2YoQnVmTGlzdE9iamVjdCksCisgICAgMCwKKworICAgIChkZXN0cnVjdG9yKSAgICAwLAkJCS8qIHRwX2RlYWxsb2MsCXJlZmNvdW50PT0wICAqLworICAgIChwcmludGZ1bmMpICAgICAwLAkJCS8qIHRwX3ByaW50LAlwcmludCB4ICAgICAgKi8KKyAgICAoZ2V0YXR0cmZ1bmMpICAgMCwJCQkvKiB0cF9nZXRhdHRyLAl4LmF0dHIJICAgICAqLworICAgIChzZXRhdHRyZnVuYykgICAwLAkJCS8qIHRwX3NldGF0dHIsCXguYXR0cj12ICAgICAqLworICAgIChjbXBmdW5jKQkgICAgMCwJCQkvKiB0cF9jb21wYXJlLAl4PnkJICAgICAqLworICAgIChyZXByZnVuYykJICAgIDAsCQkJLyogdHBfcmVwciwJYHhgLCBwcmludCB4ICovCisKKyAgICAwLAkJICAgIC8qIGFzIG51bWJlciAqLworICAgICZCdWZMaXN0QXNTZXEsICAvKiBhcyBzZXF1ZW5jZSAqLworICAgIDAsCQkgICAgLyogYXMgbWFwcGluZyAqLworCisgICAgKGhhc2hmdW5jKSAwLAkJCS8qIHRwX2hhc2gsIGRpY3QoeCkgKi8KKyAgICAodGVybmFyeWZ1bmMpIDAsCQkJLyogdHBfY2FsbCwgeCgpICAgICAqLworICAgIChyZXByZnVuYykgMCwJCQkvKiB0cF9zdHIsICBzdHIoeCkgICovCit9OworCisvKiBCdWZmZXIgbGlzdCBvYmplY3QgLSBJbXBsZW1lbnRhdGlvbgorICovCisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyBpbnQKK0J1Zkxpc3RMZW5ndGgoUHlPYmplY3QgKnNlbGYpCit7CisgICAgYnVmX1QJKmIgPSBmaXJzdGJ1ZjsKKyAgICBpbnQJCW4gPSAwOworCisgICAgd2hpbGUgKGIpCisgICAgeworCSsrbjsKKwliID0gYi0+Yl9uZXh0OworICAgIH0KKworICAgIHJldHVybiBuOworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKgorQnVmTGlzdEl0ZW0oUHlPYmplY3QgKnNlbGYsIGludCBuKQoreworICAgIGJ1Zl9UICpiOworCisgICAgZm9yIChiID0gZmlyc3RidWY7IGI7IGIgPSBiLT5iX25leHQsIC0tbikKKyAgICB7CisJaWYgKG4gPT0gMCkKKwkgICAgcmV0dXJuIEJ1ZmZlck5ldyhiKTsKKyAgICB9CisKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgXygibm8gc3VjaCBidWZmZXIiKSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFdpbmRvdyBvYmplY3QgLSBEZWZpbml0aW9ucworICovCisKK3N0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgV2luZG93TWV0aG9kc1tdID0geworICAgIC8qIG5hbWUsCSAgICBmdW5jdGlvbiwJCWNhbGxpbmcsICAgIGRvY3VtZW50YXRpb24gKi8KKyAgICB7IE5VTEwsCSAgICBOVUxMLAkJMCwJICAgIE5VTEwgfQorfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBXaW5kb3dUeXBlID0geworICAgIFB5T2JqZWN0X0hFQURfSU5JVCgwKQorICAgIDAsCisgICAgIndpbmRvdyIsCisgICAgc2l6ZW9mKFdpbmRvd09iamVjdCksCisgICAgMCwKKworICAgIChkZXN0cnVjdG9yKSAgICBXaW5kb3dEZXN0cnVjdG9yLAkvKiB0cF9kZWFsbG9jLAlyZWZjb3VudD09MCAgKi8KKyAgICAocHJpbnRmdW5jKSAgICAgMCwJCQkvKiB0cF9wcmludCwJcHJpbnQgeCAgICAgICovCisgICAgKGdldGF0dHJmdW5jKSAgIFdpbmRvd0dldGF0dHIsCS8qIHRwX2dldGF0dHIsCXguYXR0cgkgICAgICovCisgICAgKHNldGF0dHJmdW5jKSAgIFdpbmRvd1NldGF0dHIsCS8qIHRwX3NldGF0dHIsCXguYXR0cj12ICAgICAqLworICAgIChjbXBmdW5jKQkgICAgMCwJCQkvKiB0cF9jb21wYXJlLAl4PnkJICAgICAqLworICAgIChyZXByZnVuYykJICAgIFdpbmRvd1JlcHIsCQkvKiB0cF9yZXByLAlgeGAsIHByaW50IHggKi8KKworICAgIDAsCQkgICAgLyogYXMgbnVtYmVyICovCisgICAgMCwJCSAgICAvKiBhcyBzZXF1ZW5jZSAqLworICAgIDAsCQkgICAgLyogYXMgbWFwcGluZyAqLworCisgICAgKGhhc2hmdW5jKSAwLAkJCS8qIHRwX2hhc2gsIGRpY3QoeCkgKi8KKyAgICAodGVybmFyeWZ1bmMpIDAsCQkJLyogdHBfY2FsbCwgeCgpICAgICAqLworICAgIChyZXByZnVuYykgMCwJCQkvKiB0cF9zdHIsICBzdHIoeCkgICovCit9OworCisvKiBXaW5kb3cgb2JqZWN0IC0gSW1wbGVtZW50YXRpb24KKyAqLworCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK1dpbmRvd05ldyh3aW5fVCAqd2luKQoreworICAgIC8qIFdlIG5lZWQgdG8gaGFuZGxlIGRlbGV0aW9uIG9mIHdpbmRvd3MgdW5kZXJuZWF0aCB1cy4KKyAgICAgKiBJZiB3ZSBhZGQgYSAicHl0aG9uX3JlZiIgZmllbGQgdG8gdGhlIHdpbl9UIHN0cnVjdHVyZSwKKyAgICAgKiB0aGVuIHdlIGNhbiBnZXQgYXQgaXQgaW4gd2luX2ZyZWUoKSBpbiB2aW0uIFdlIHRoZW4KKyAgICAgKiBuZWVkIHRvIGNyZWF0ZSBvbmx5IE9ORSBQeXRob24gb2JqZWN0IHBlciB3aW5kb3cgLSBpZgorICAgICAqIHdlIHRyeSB0byBjcmVhdGUgYSBzZWNvbmQsIGp1c3QgSU5DUkVGIHRoZSBleGlzdGluZyBvbmUKKyAgICAgKiBhbmQgcmV0dXJuIGl0LiBUaGUgKHNpbmdsZSkgUHl0aG9uIG9iamVjdCByZWZlcnJpbmcgdG8KKyAgICAgKiB0aGUgd2luZG93IGlzIHN0b3JlZCBpbiAicHl0aG9uX3JlZiIuCisgICAgICogT24gYSB3aW5fZnJlZSgpIHdlIHNldCB0aGUgUHl0aG9uIG9iamVjdCdzIHdpbl9UKiBmaWVsZAorICAgICAqIHRvIGFuIGludmFsaWQgdmFsdWUuIFdlIHRyYXAgYWxsIHVzZXMgb2YgYSB3aW5kb3cKKyAgICAgKiBvYmplY3QsIGFuZCByZWplY3QgdGhlbSBpZiB0aGUgd2luX1QqIGZpZWxkIGlzIGludmFsaWQuCisgICAgICovCisKKyAgICBXaW5kb3dPYmplY3QgKnNlbGY7CisKKyAgICBpZiAod2luLT5weXRob25fcmVmKQorICAgIHsKKwlzZWxmID0gd2luLT5weXRob25fcmVmOworCVB5X0lOQ1JFRihzZWxmKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlzZWxmID0gUHlPYmplY3RfTkVXKFdpbmRvd09iamVjdCwgJldpbmRvd1R5cGUpOworCWlmIChzZWxmID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCXNlbGYtPndpbiA9IHdpbjsKKwl3aW4tPnB5dGhvbl9yZWYgPSBzZWxmOworICAgIH0KKworICAgIHJldHVybiAoUHlPYmplY3QgKikoc2VsZik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorV2luZG93RGVzdHJ1Y3RvcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBXaW5kb3dPYmplY3QgKnRoaXMgPSAoV2luZG93T2JqZWN0ICopKHNlbGYpOworCisgICAgaWYgKHRoaXMtPndpbiAmJiB0aGlzLT53aW4gIT0gSU5WQUxJRF9XSU5ET1dfVkFMVUUpCisJdGhpcy0+d2luLT5weXRob25fcmVmID0gTlVMTDsKKworICAgIFB5TWVtX0RFTChzZWxmKTsKK30KKworICAgIHN0YXRpYyBpbnQKK0NoZWNrV2luZG93KFdpbmRvd09iamVjdCAqdGhpcykKK3sKKyAgICBpZiAodGhpcy0+d2luID09IElOVkFMSURfV0lORE9XX1ZBTFVFKQorICAgIHsKKwlQeUVycl9TZXRWaW0oXygiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIHdpbmRvdyIpKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKyAgICBzdGF0aWMgUHlPYmplY3QgKgorV2luZG93R2V0YXR0cihQeU9iamVjdCAqc2VsZiwgY2hhciAqbmFtZSkKK3sKKyAgICBXaW5kb3dPYmplY3QgKnRoaXMgPSAoV2luZG93T2JqZWN0ICopKHNlbGYpOworCisgICAgaWYgKENoZWNrV2luZG93KHRoaXMpKQorCXJldHVybiBOVUxMOworCisgICAgaWYgKHN0cmNtcChuYW1lLCAiYnVmZmVyIikgPT0gMCkKKwlyZXR1cm4gKFB5T2JqZWN0ICopQnVmZmVyTmV3KHRoaXMtPndpbi0+d19idWZmZXIpOworICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiY3Vyc29yIikgPT0gMCkKKyAgICB7CisJcG9zX1QgKnBvcyA9ICZ0aGlzLT53aW4tPndfY3Vyc29yOworCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihsbCkiLCAobG9uZykocG9zLT5sbnVtKSwgKGxvbmcpKHBvcy0+Y29sKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiaGVpZ2h0IikgPT0gMCkKKwlyZXR1cm4gUHlfQnVpbGRWYWx1ZSgibCIsIChsb25nKSh0aGlzLT53aW4tPndfaGVpZ2h0KSk7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgIndpZHRoIikgPT0gMCkKKwlyZXR1cm4gUHlfQnVpbGRWYWx1ZSgibCIsIChsb25nKShXX1dJRFRIKHRoaXMtPndpbikpKTsKKyNlbmRpZgorICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCJfX21lbWJlcnNfXyIpID09IDApCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoIltzc3NdIiwgImJ1ZmZlciIsICJjdXJzb3IiLCAiaGVpZ2h0Iik7CisgICAgZWxzZQorCXJldHVybiBQeV9GaW5kTWV0aG9kKFdpbmRvd01ldGhvZHMsIHNlbGYsIG5hbWUpOworfQorCisgICAgc3RhdGljIGludAorV2luZG93U2V0YXR0cihQeU9iamVjdCAqc2VsZiwgY2hhciAqbmFtZSwgUHlPYmplY3QgKnZhbCkKK3sKKyAgICBXaW5kb3dPYmplY3QgKnRoaXMgPSAoV2luZG93T2JqZWN0ICopKHNlbGYpOworCisgICAgaWYgKENoZWNrV2luZG93KHRoaXMpKQorCXJldHVybiAtMTsKKworICAgIGlmIChzdHJjbXAobmFtZSwgImJ1ZmZlciIpID09IDApCisgICAgeworCVB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsIF8oInJlYWRvbmx5IGF0dHJpYnV0ZSIpKTsKKwlyZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiY3Vyc29yIikgPT0gMCkKKyAgICB7CisJbG9uZyBsbnVtOworCWxvbmcgY29sOworCisJaWYgKCFQeUFyZ19QYXJzZSh2YWwsICIobGwpIiwgJmxudW0sICZjb2wpKQorCSAgICByZXR1cm4gLTE7CisKKwlpZiAobG51bSA8PSAwIHx8IGxudW0gPiB0aGlzLT53aW4tPndfYnVmZmVyLT5iX21sLm1sX2xpbmVfY291bnQpCisJeworCSAgICBQeUVycl9TZXRWaW0oXygiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIikpOworCSAgICByZXR1cm4gLTE7CisJfQorCisJLyogQ2hlY2sgZm9yIGtleWJvYXJkIGludGVycnVwdHMgKi8KKwlpZiAoVmltRXJyb3JDaGVjaygpKQorCSAgICByZXR1cm4gLTE7CisKKwkvKiBOTyBDSEVDSyBPTiBDT0xVTU4gLSBTRUVNUyBOT1QgVE8gTUFUVEVSICovCisKKwl0aGlzLT53aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtOworCXRoaXMtPndpbi0+d19jdXJzb3IuY29sID0gY29sOworCXVwZGF0ZV9zY3JlZW4oVkFMSUQpOworCisJcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiaGVpZ2h0IikgPT0gMCkKKyAgICB7CisJaW50CWhlaWdodDsKKwl3aW5fVAkqc2F2ZXdpbjsKKworCWlmICghUHlBcmdfUGFyc2UodmFsLCAiaSIsICZoZWlnaHQpKQorCSAgICByZXR1cm4gLTE7CisKKyNpZmRlZiBGRUFUX0dVSQorCW5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKwlzYXZld2luID0gY3Vyd2luOworCWN1cndpbiA9IHRoaXMtPndpbjsKKwl3aW5fc2V0aGVpZ2h0KGhlaWdodCk7CisJY3Vyd2luID0gc2F2ZXdpbjsKKworCS8qIENoZWNrIGZvciBrZXlib2FyZCBpbnRlcnJ1cHRzICovCisJaWYgKFZpbUVycm9yQ2hlY2soKSkKKwkgICAgcmV0dXJuIC0xOworCisJcmV0dXJuIDA7CisgICAgfQorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ3aWR0aCIpID09IDApCisgICAgeworCWludAl3aWR0aDsKKwl3aW5fVAkqc2F2ZXdpbjsKKworCWlmICghUHlBcmdfUGFyc2UodmFsLCAiaSIsICZ3aWR0aCkpCisJICAgIHJldHVybiAtMTsKKworI2lmZGVmIEZFQVRfR1VJCisJbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyNlbmRpZgorCXNhdmV3aW4gPSBjdXJ3aW47CisJY3Vyd2luID0gdGhpcy0+d2luOworCXdpbl9zZXR3aWR0aCh3aWR0aCk7CisJY3Vyd2luID0gc2F2ZXdpbjsKKworCS8qIENoZWNrIGZvciBrZXlib2FyZCBpbnRlcnJ1cHRzICovCisJaWYgKFZpbUVycm9yQ2hlY2soKSkKKwkgICAgcmV0dXJuIC0xOworCisJcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCisgICAgZWxzZQorICAgIHsKKwlQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG5hbWUpOworCXJldHVybiAtMTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgUHlPYmplY3QgKgorV2luZG93UmVwcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBzdGF0aWMgY2hhciByZXByWzUwXTsKKyAgICBXaW5kb3dPYmplY3QgKnRoaXMgPSAoV2luZG93T2JqZWN0ICopKHNlbGYpOworCisgICAgaWYgKHRoaXMtPndpbiA9PSBJTlZBTElEX1dJTkRPV19WQUxVRSkKKyAgICB7CisJc3ByaW50ZihyZXByLCBfKCI8d2luZG93IG9iamVjdCAoZGVsZXRlZCkgYXQgJS44bFg+IiksIChsb25nKShzZWxmKSk7CisJcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVwcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaW50CWkgPSAwOworCXdpbl9UCSp3OworCisJZm9yICh3ID0gZmlyc3R3aW47IHcgIT0gTlVMTCAmJiB3ICE9IHRoaXMtPndpbjsgdyA9IFdfTkVYVCh3KSkKKwkgICAgKytpOworCisJaWYgKHcgPT0gTlVMTCkKKwkgICAgc3ByaW50ZihyZXByLCBfKCI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IiksIChsb25nKShzZWxmKSk7CisJZWxzZQorCSAgICBzcHJpbnRmKHJlcHIsIF8oIjx3aW5kb3cgJWQ+IiksIGkpOworCisJcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVwcik7CisgICAgfQorfQorCisvKiBXaW5kb3cgbGlzdCBvYmplY3QgLSBEZWZpbml0aW9ucworICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUHlPYmplY3RfSEVBRAorfQorV2luTGlzdE9iamVjdDsKKworc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIFdpbkxpc3RBc1NlcSA9IHsKKyAgICAoaW5xdWlyeSkJCVdpbkxpc3RMZW5ndGgsCSAgICAvKiBzcV9sZW5ndGgsICAgIGxlbih4KSAgICovCisgICAgKGJpbmFyeWZ1bmMpCTAsCQkgICAgLyogc3FfY29uY2F0LCAgICB4K3kgICAgICAqLworICAgIChpbnRhcmdmdW5jKQkwLAkJICAgIC8qIHNxX3JlcGVhdCwgICAgeCpuICAgICAgKi8KKyAgICAoaW50YXJnZnVuYykJV2luTGlzdEl0ZW0sCSAgICAvKiBzcV9pdGVtLCAgICAgIHhbaV0gICAgICovCisgICAgKGludGludGFyZ2Z1bmMpCTAsCQkgICAgLyogc3Ffc2xpY2UsICAgICB4W2k6al0gICAqLworICAgIChpbnRvYmphcmdwcm9jKQkwLAkJICAgIC8qIHNxX2Fzc19pdGVtLCAgeFtpXT12ICAgKi8KKyAgICAoaW50aW50b2JqYXJncHJvYykJMCwJCSAgICAvKiBzcV9hc3Nfc2xpY2UsIHhbaTpqXT12ICovCit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IFdpbkxpc3RUeXBlID0geworICAgIFB5T2JqZWN0X0hFQURfSU5JVCgwKQorICAgIDAsCisgICAgIndpbmRvdyBsaXN0IiwKKyAgICBzaXplb2YoV2luTGlzdE9iamVjdCksCisgICAgMCwKKworICAgIChkZXN0cnVjdG9yKSAgICAwLAkJCS8qIHRwX2RlYWxsb2MsCXJlZmNvdW50PT0wICAqLworICAgIChwcmludGZ1bmMpICAgICAwLAkJCS8qIHRwX3ByaW50LAlwcmludCB4ICAgICAgKi8KKyAgICAoZ2V0YXR0cmZ1bmMpICAgMCwJCQkvKiB0cF9nZXRhdHRyLAl4LmF0dHIJICAgICAqLworICAgIChzZXRhdHRyZnVuYykgICAwLAkJCS8qIHRwX3NldGF0dHIsCXguYXR0cj12ICAgICAqLworICAgIChjbXBmdW5jKQkgICAgMCwJCQkvKiB0cF9jb21wYXJlLAl4PnkJICAgICAqLworICAgIChyZXByZnVuYykJICAgIDAsCQkJLyogdHBfcmVwciwJYHhgLCBwcmludCB4ICovCisKKyAgICAwLAkJICAgIC8qIGFzIG51bWJlciAqLworICAgICZXaW5MaXN0QXNTZXEsICAvKiBhcyBzZXF1ZW5jZSAqLworICAgIDAsCQkgICAgLyogYXMgbWFwcGluZyAqLworCisgICAgKGhhc2hmdW5jKSAwLAkJCS8qIHRwX2hhc2gsIGRpY3QoeCkgKi8KKyAgICAodGVybmFyeWZ1bmMpIDAsCQkJLyogdHBfY2FsbCwgeCgpICAgICAqLworICAgIChyZXByZnVuYykgMCwJCQkvKiB0cF9zdHIsICBzdHIoeCkgICovCit9OworCisvKiBXaW5kb3cgbGlzdCBvYmplY3QgLSBJbXBsZW1lbnRhdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgaW50CitXaW5MaXN0TGVuZ3RoKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHdpbl9UCSp3ID0gZmlyc3R3aW47CisgICAgaW50CQluID0gMDsKKworICAgIHdoaWxlICh3KQorICAgIHsKKwkrK247CisJdyA9IFdfTkVYVCh3KTsKKyAgICB9CisKKyAgICByZXR1cm4gbjsKK30KKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK1dpbkxpc3RJdGVtKFB5T2JqZWN0ICpzZWxmLCBpbnQgbikKK3sKKyAgICB3aW5fVCAqdzsKKworICAgIGZvciAodyA9IGZpcnN0d2luOyB3OyB3ID0gV19ORVhUKHcpLCAtLW4pCisJaWYgKG4gPT0gMCkKKwkgICAgcmV0dXJuIFdpbmRvd05ldyh3KTsKKworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCBfKCJubyBzdWNoIHdpbmRvdyIpKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogQ3VycmVudCBpdGVtcyBvYmplY3QgLSBEZWZpbml0aW9ucworICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUHlPYmplY3RfSEVBRAorfQorQ3VycmVudE9iamVjdDsKKworc3RhdGljIFB5VHlwZU9iamVjdCBDdXJyZW50VHlwZSA9IHsKKyAgICBQeU9iamVjdF9IRUFEX0lOSVQoMCkKKyAgICAwLAorICAgICJjdXJyZW50IGRhdGEiLAorICAgIHNpemVvZihDdXJyZW50T2JqZWN0KSwKKyAgICAwLAorCisgICAgKGRlc3RydWN0b3IpICAgIDAsCQkJLyogdHBfZGVhbGxvYywJcmVmY291bnQ9PTAgICovCisgICAgKHByaW50ZnVuYykgICAgIDAsCQkJLyogdHBfcHJpbnQsCXByaW50IHggICAgICAqLworICAgIChnZXRhdHRyZnVuYykgICBDdXJyZW50R2V0YXR0ciwJLyogdHBfZ2V0YXR0ciwJeC5hdHRyCSAgICAgKi8KKyAgICAoc2V0YXR0cmZ1bmMpICAgQ3VycmVudFNldGF0dHIsCS8qIHRwX3NldGF0dHIsCXguYXR0cj12ICAgICAqLworICAgIChjbXBmdW5jKQkgICAgMCwJCQkvKiB0cF9jb21wYXJlLAl4PnkJICAgICAqLworICAgIChyZXByZnVuYykJICAgIDAsCQkJLyogdHBfcmVwciwJYHhgLCBwcmludCB4ICovCisKKyAgICAwLAkJICAgIC8qIGFzIG51bWJlciAqLworICAgIDAsCQkgICAgLyogYXMgc2VxdWVuY2UgKi8KKyAgICAwLAkJICAgIC8qIGFzIG1hcHBpbmcgKi8KKworICAgIChoYXNoZnVuYykgMCwJCQkvKiB0cF9oYXNoLCBkaWN0KHgpICovCisgICAgKHRlcm5hcnlmdW5jKSAwLAkJCS8qIHRwX2NhbGwsIHgoKSAgICAgKi8KKyAgICAocmVwcmZ1bmMpIDAsCQkJLyogdHBfc3RyLCAgc3RyKHgpICAqLworfTsKKworLyogQ3VycmVudCBpdGVtcyBvYmplY3QgLSBJbXBsZW1lbnRhdGlvbgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKgorQ3VycmVudEdldGF0dHIoUHlPYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUpCit7CisgICAgaWYgKHN0cmNtcChuYW1lLCAiYnVmZmVyIikgPT0gMCkKKwlyZXR1cm4gKFB5T2JqZWN0ICopQnVmZmVyTmV3KGN1cmJ1Zik7CisgICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ3aW5kb3ciKSA9PSAwKQorCXJldHVybiAoUHlPYmplY3QgKilXaW5kb3dOZXcoY3Vyd2luKTsKKyAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgImxpbmUiKSA9PSAwKQorCXJldHVybiBHZXRCdWZmZXJMaW5lKGN1cmJ1ZiwgKGludCljdXJ3aW4tPndfY3Vyc29yLmxudW0pOworICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAicmFuZ2UiKSA9PSAwKQorCXJldHVybiBSYW5nZU5ldyhjdXJidWYsIFJhbmdlU3RhcnQsIFJhbmdlRW5kKTsKKyAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwiX19tZW1iZXJzX18iKSA9PSAwKQorCXJldHVybiBQeV9CdWlsZFZhbHVlKCJbc3Nzc10iLCAiYnVmZmVyIiwgIndpbmRvdyIsICJsaW5lIiwgInJhbmdlIik7CisgICAgZWxzZQorICAgIHsKKwlQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG5hbWUpOworCXJldHVybiBOVUxMOworICAgIH0KK30KKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIGludAorQ3VycmVudFNldGF0dHIoUHlPYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp2YWx1ZSkKK3sKKyAgICBpZiAoc3RyY21wKG5hbWUsICJsaW5lIikgPT0gMCkKKyAgICB7CisJaWYgKFNldEJ1ZmZlckxpbmUoY3VyYnVmLCAoaW50KWN1cndpbi0+d19jdXJzb3IubG51bSwgdmFsdWUsIE5VTEwpID09IEZBSUwpCisJICAgIHJldHVybiAtMTsKKworCXJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworCVB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgbmFtZSk7CisJcmV0dXJuIC0xOworICAgIH0KK30KKworLyogRXh0ZXJuYWwgaW50ZXJmYWNlCisgKi8KKworICAgIHZvaWQKK3B5dGhvbl9idWZmZXJfZnJlZShidWZfVCAqYnVmKQoreworICAgIGlmIChidWYtPnB5dGhvbl9yZWYpCisgICAgeworCUJ1ZmZlck9iamVjdCAqYnAgPSBidWYtPnB5dGhvbl9yZWY7CisJYnAtPmJ1ZiA9IElOVkFMSURfQlVGRkVSX1ZBTFVFOworCWJ1Zi0+cHl0aG9uX3JlZiA9IE5VTEw7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorcHl0aG9uX3dpbmRvd19mcmVlKHdpbl9UICp3aW4pCit7CisgICAgaWYgKHdpbi0+cHl0aG9uX3JlZikKKyAgICB7CisJV2luZG93T2JqZWN0ICp3cCA9IHdpbi0+cHl0aG9uX3JlZjsKKwl3cC0+d2luID0gSU5WQUxJRF9XSU5ET1dfVkFMVUU7CisJd2luLT5weXRob25fcmVmID0gTlVMTDsKKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIEJ1Zkxpc3RPYmplY3QgVGhlQnVmZmVyTGlzdCA9Cit7CisgICAgUHlPYmplY3RfSEVBRF9JTklUKCZCdWZMaXN0VHlwZSkKK307CisKK3N0YXRpYyBXaW5MaXN0T2JqZWN0IFRoZVdpbmRvd0xpc3QgPQoreworICAgIFB5T2JqZWN0X0hFQURfSU5JVCgmV2luTGlzdFR5cGUpCit9OworCitzdGF0aWMgQ3VycmVudE9iamVjdCBUaGVDdXJyZW50ID0KK3sKKyAgICBQeU9iamVjdF9IRUFEX0lOSVQoJkN1cnJlbnRUeXBlKQorfTsKKworICAgIHN0YXRpYyBpbnQKK1B5dGhvbk1vZF9Jbml0KHZvaWQpCit7CisgICAgUHlPYmplY3QgKm1vZDsKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBzdGF0aWMgY2hhciAqKGFyZ3ZbMl0pID0geyIiLCBOVUxMfTsKKworICAgIC8qIEZpeHVwcy4uLiAqLworICAgIEJ1ZmZlclR5cGUub2JfdHlwZSA9ICZQeVR5cGVfVHlwZTsKKyAgICBSYW5nZVR5cGUub2JfdHlwZSA9ICZQeVR5cGVfVHlwZTsKKyAgICBXaW5kb3dUeXBlLm9iX3R5cGUgPSAmUHlUeXBlX1R5cGU7CisgICAgQnVmTGlzdFR5cGUub2JfdHlwZSA9ICZQeVR5cGVfVHlwZTsKKyAgICBXaW5MaXN0VHlwZS5vYl90eXBlID0gJlB5VHlwZV9UeXBlOworICAgIEN1cnJlbnRUeXBlLm9iX3R5cGUgPSAmUHlUeXBlX1R5cGU7CisKKyAgICAvKiBTZXQgc3lzLmFyZ3ZbXSB0byBhdm9pZCBhIGNyYXNoIGluIHdhcm4oKS4gKi8KKyAgICBQeVN5c19TZXRBcmd2KDEsIGFyZ3YpOworCisgICAgbW9kID0gUHlfSW5pdE1vZHVsZSgidmltIiwgVmltTWV0aG9kcyk7CisgICAgZGljdCA9IFB5TW9kdWxlX0dldERpY3QobW9kKTsKKworICAgIFZpbUVycm9yID0gUHlfQnVpbGRWYWx1ZSgicyIsICJ2aW0uZXJyb3IiKTsKKworICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICJlcnJvciIsIFZpbUVycm9yKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiYnVmZmVycyIsIChQeU9iamVjdCAqKSgmVGhlQnVmZmVyTGlzdCkpOworICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICJjdXJyZW50IiwgKFB5T2JqZWN0ICopKCZUaGVDdXJyZW50KSk7CisgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgIndpbmRvd3MiLCAoUHlPYmplY3QgKikoJlRoZVdpbmRvd0xpc3QpKTsKKworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorCXJldHVybiAtMTsKKworICAgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogNC4gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBWaW0gYW5kIFB5dGhvbi4KKyAqLworCisvKiBHZXQgYSBsaW5lIGZyb20gdGhlIHNwZWNpZmllZCBidWZmZXIuIFRoZSBsaW5lIG51bWJlciBpcworICogaW4gVmltIGZvcm1hdCAoMS1iYXNlZCkuIFRoZSBsaW5lIGlzIHJldHVybmVkIGFzIGEgUHl0aG9uCisgKiBzdHJpbmcgb2JqZWN0LgorICovCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK0dldEJ1ZmZlckxpbmUoYnVmX1QgKmJ1ZiwgaW50IG4pCit7CisgICAgcmV0dXJuIExpbmVUb1N0cmluZygoY2hhciAqKW1sX2dldF9idWYoYnVmLCAobGluZW5yX1QpbiwgRkFMU0UpKTsKK30KKworLyogR2V0IGEgbGlzdCBvZiBsaW5lcyBmcm9tIHRoZSBzcGVjaWZpZWQgYnVmZmVyLiBUaGUgbGluZSBudW1iZXJzCisgKiBhcmUgaW4gVmltIGZvcm1hdCAoMS1iYXNlZCkuIFRoZSByYW5nZSBpcyBmcm9tIGxvIHVwIHRvLCBidXQgbm90CisgKiBpbmNsdWRpbmcsIGhpLiBUaGUgbGlzdCBpcyByZXR1cm5lZCBhcyBhIFB5dGhvbiBsaXN0IG9mIHN0cmluZyBvYmplY3RzLgorICovCisgICAgc3RhdGljIFB5T2JqZWN0ICoKK0dldEJ1ZmZlckxpbmVMaXN0KGJ1Zl9UICpidWYsIGludCBsbywgaW50IGhpKQoreworICAgIGludCBpOworICAgIGludCBuID0gaGkgLSBsbzsKKyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcobik7CisKKyAgICBpZiAobGlzdCA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKKyAgICB7CisJUHlPYmplY3QgKnN0ciA9IExpbmVUb1N0cmluZygoY2hhciAqKW1sX2dldF9idWYoYnVmLCAobGluZW5yX1QpKGxvK2kpLCBGQUxTRSkpOworCisJLyogRXJyb3IgY2hlY2sgLSB3YXMgdGhlIFB5dGhvbiBzdHJpbmcgY3JlYXRpb24gT0s/ICovCisJaWYgKHN0ciA9PSBOVUxMKQorCXsKKwkgICAgUHlfREVDUkVGKGxpc3QpOworCSAgICByZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBTZXQgdGhlIGxpc3QgaXRlbSAqLworCWlmIChQeUxpc3RfU2V0SXRlbShsaXN0LCBpLCBzdHIpKQorCXsKKwkgICAgUHlfREVDUkVGKHN0cik7CisJICAgIFB5X0RFQ1JFRihsaXN0KTsKKwkgICAgcmV0dXJuIE5VTEw7CisJfQorICAgIH0KKworICAgIC8qIFRoZSBvd25lcnNoaXAgb2YgdGhlIFB5dGhvbiBsaXN0IGlzIHBhc3NlZCB0byB0aGUgY2FsbGVyIChpZSwKKyAgICAgKiB0aGUgY2FsbGVyIHNob3VsZCBQeV9ERUNSRUYoKSB0aGUgb2JqZWN0IHdoZW4gaXQgaXMgZmluaXNoZWQKKyAgICAgKiB3aXRoIGl0KS4KKyAgICAgKi8KKworICAgIHJldHVybiBsaXN0OworfQorCisvKgorICogQ2hlY2sgaWYgZGVsZXRpbmcgbGluZXMgbWFkZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGludmFsaWQuCisgKiBDaGFuZ2VkIHRoZSBsaW5lcyBmcm9tICJsbyIgdG8gImhpIiBhbmQgYWRkZWQgImV4dHJhIiBsaW5lcyAobmVnYXRpdmUgaWYKKyAqIGRlbGV0ZWQpLgorICovCisgICAgc3RhdGljIHZvaWQKK3B5X2ZpeF9jdXJzb3IoaW50IGxvLCBpbnQgaGksIGludCBleHRyYSkKK3sKKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID49IGxvKQorICAgIHsKKwkvKiBBZGp1c3QgdGhlIGN1cnNvciBwb3NpdGlvbiBpZiBpdCdzIGluL2FmdGVyIHRoZSBjaGFuZ2VkCisJICogbGluZXMuICovCisJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA+PSBoaSkKKwl7CisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSArPSBleHRyYTsKKwkgICAgY2hlY2tfY3Vyc29yX2NvbCgpOworCX0KKwllbHNlIGlmIChleHRyYSA8IDApCisJeworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbzsKKwkgICAgY2hlY2tfY3Vyc29yKCk7CisJfQorCWNoYW5nZWRfY2xpbmVfYmVmX2N1cnMoKTsKKyAgICB9CisgICAgaW52YWxpZGF0ZV9ib3RsaW5lKCk7Cit9CisKKy8qIFJlcGxhY2UgYSBsaW5lIGluIHRoZSBzcGVjaWZpZWQgYnVmZmVyLiBUaGUgbGluZSBudW1iZXIgaXMKKyAqIGluIFZpbSBmb3JtYXQgKDEtYmFzZWQpLiBUaGUgcmVwbGFjZW1lbnQgbGluZSBpcyBnaXZlbiBhcworICogYSBQeXRob24gc3RyaW5nIG9iamVjdC4gVGhlIG9iamVjdCBpcyBjaGVja2VkIGZvciB2YWxpZGl0eQorICogYW5kIGNvcnJlY3QgZm9ybWF0LiBFcnJvcnMgYXJlIHJldHVybmVkIGFzIGEgdmFsdWUgb2YgRkFJTC4KKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgT0sgb24gc3VjY2Vzcy4KKyAqIElmIE9LIGlzIHJldHVybmVkIGFuZCBsZW5fY2hhbmdlIGlzIG5vdCBOVUxMLCAqbGVuX2NoYW5nZQorICogaXMgc2V0IHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGJ1ZmZlciBsZW5ndGguCisgKi8KKyAgICBzdGF0aWMgaW50CitTZXRCdWZmZXJMaW5lKGJ1Zl9UICpidWYsIGludCBuLCBQeU9iamVjdCAqbGluZSwgaW50ICpsZW5fY2hhbmdlKQoreworICAgIC8qIEZpcnN0IG9mIGFsbCwgd2UgY2hlY2sgdGhlIHRocGUgb2YgdGhlIHN1cHBsaWVkIFB5dGhvbiBvYmplY3QuCisgICAgICogVGhlcmUgYXJlIHRocmVlIGNhc2VzOgorICAgICAqCSAgMS4gTlVMTCwgb3IgTm9uZSAtIHRoaXMgaXMgYSBkZWxldGlvbi4KKyAgICAgKgkgIDIuIEEgc3RyaW5nCSAgIC0gdGhpcyBpcyBhIHJlcGxhY2VtZW50LgorICAgICAqCSAgMy4gQW55dGhpbmcgZWxzZSAtIHRoaXMgaXMgYW4gZXJyb3IuCisgICAgICovCisgICAgaWYgKGxpbmUgPT0gUHlfTm9uZSB8fCBsaW5lID09IE5VTEwpCisgICAgeworCWJ1Zl9UICpzYXZlYnVmID0gY3VyYnVmOworCisJUHlFcnJfQ2xlYXIoKTsKKwljdXJidWYgPSBidWY7CisKKwlpZiAodV9zYXZlZGVsKChsaW5lbnJfVCluLCAxTCkgPT0gRkFJTCkKKwkgICAgUHlFcnJfU2V0VmltKF8oImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iKSk7CisJZWxzZSBpZiAobWxfZGVsZXRlKChsaW5lbnJfVCluLCBGQUxTRSkgPT0gRkFJTCkKKwkgICAgUHlFcnJfU2V0VmltKF8oImNhbm5vdCBkZWxldGUgbGluZSIpKTsKKwllbHNlCisJeworCSAgICBkZWxldGVkX2xpbmVzX21hcmsoKGxpbmVucl9UKW4sIDFMKTsKKwkgICAgaWYgKGJ1ZiA9PSBjdXJ3aW4tPndfYnVmZmVyKQorCQlweV9maXhfY3Vyc29yKG4sIG4gKyAxLCAtMSk7CisJfQorCisJY3VyYnVmID0gc2F2ZWJ1ZjsKKworCWlmIChQeUVycl9PY2N1cnJlZCgpIHx8IFZpbUVycm9yQ2hlY2soKSkKKwkgICAgcmV0dXJuIEZBSUw7CisKKwlpZiAobGVuX2NoYW5nZSkKKwkgICAgKmxlbl9jaGFuZ2UgPSAtMTsKKworCXJldHVybiBPSzsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2sobGluZSkpCisgICAgeworCWNoYXIgKnNhdmUgPSBTdHJpbmdUb0xpbmUobGluZSk7CisJYnVmX1QgKnNhdmVidWYgPSBjdXJidWY7CisKKwlpZiAoc2F2ZSA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFJTDsKKworCS8qIFdlIGRvIG5vdCBuZWVkIHRvIGZyZWUgInNhdmUiIGlmIG1sX3JlcGxhY2UoKSBjb25zdW1lcyBpdC4gKi8KKwlQeUVycl9DbGVhcigpOworCWN1cmJ1ZiA9IGJ1ZjsKKworCWlmICh1X3NhdmVzdWIoKGxpbmVucl9UKW4pID09IEZBSUwpCisJeworCSAgICBQeUVycl9TZXRWaW0oXygiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIpKTsKKwkgICAgdmltX2ZyZWUoc2F2ZSk7CisJfQorCWVsc2UgaWYgKG1sX3JlcGxhY2UoKGxpbmVucl9UKW4sIChjaGFyX3UgKilzYXZlLCBGQUxTRSkgPT0gRkFJTCkKKwl7CisJICAgIFB5RXJyX1NldFZpbShfKCJjYW5ub3QgcmVwbGFjZSBsaW5lIikpOworCSAgICB2aW1fZnJlZShzYXZlKTsKKwl9CisJZWxzZQorCSAgICBjaGFuZ2VkX2J5dGVzKChsaW5lbnJfVCluLCAwKTsKKworCWN1cmJ1ZiA9IHNhdmVidWY7CisKKwlpZiAoUHlFcnJfT2NjdXJyZWQoKSB8fCBWaW1FcnJvckNoZWNrKCkpCisJICAgIHJldHVybiBGQUlMOworCisJaWYgKGxlbl9jaGFuZ2UpCisJICAgICpsZW5fY2hhbmdlID0gMDsKKworCXJldHVybiBPSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlQeUVycl9CYWRBcmd1bWVudCgpOworCXJldHVybiBGQUlMOworICAgIH0KK30KKworLyogUmVwbGFjZSBhIHJhbmdlIG9mIGxpbmVzIGluIHRoZSBzcGVjaWZpZWQgYnVmZmVyLiBUaGUgbGluZSBudW1iZXJzIGFyZSBpbgorICogVmltIGZvcm1hdCAoMS1iYXNlZCkuIFRoZSByYW5nZSBpcyBmcm9tIGxvIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgaGkuCisgKiBUaGUgcmVwbGFjZW1lbnQgbGluZXMgYXJlIGdpdmVuIGFzIGEgUHl0aG9uIGxpc3Qgb2Ygc3RyaW5nIG9iamVjdHMuIFRoZQorICogbGlzdCBpcyBjaGVja2VkIGZvciB2YWxpZGl0eSBhbmQgY29ycmVjdCBmb3JtYXQuIEVycm9ycyBhcmUgcmV0dXJuZWQgYXMgYQorICogdmFsdWUgb2YgRkFJTC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgT0sgb24gc3VjY2Vzcy4KKyAqIElmIE9LIGlzIHJldHVybmVkIGFuZCBsZW5fY2hhbmdlIGlzIG5vdCBOVUxMLCAqbGVuX2NoYW5nZQorICogaXMgc2V0IHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGJ1ZmZlciBsZW5ndGguCisgKi8KKyAgICBzdGF0aWMgaW50CitTZXRCdWZmZXJMaW5lTGlzdChidWZfVCAqYnVmLCBpbnQgbG8sIGludCBoaSwgUHlPYmplY3QgKmxpc3QsIGludCAqbGVuX2NoYW5nZSkKK3sKKyAgICAvKiBGaXJzdCBvZiBhbGwsIHdlIGNoZWNrIHRoZSB0aHBlIG9mIHRoZSBzdXBwbGllZCBQeXRob24gb2JqZWN0LgorICAgICAqIFRoZXJlIGFyZSB0aHJlZSBjYXNlczoKKyAgICAgKgkgIDEuIE5VTEwsIG9yIE5vbmUgLSB0aGlzIGlzIGEgZGVsZXRpb24uCisgICAgICoJICAyLiBBIGxpc3QJICAgLSB0aGlzIGlzIGEgcmVwbGFjZW1lbnQuCisgICAgICoJICAzLiBBbnl0aGluZyBlbHNlIC0gdGhpcyBpcyBhbiBlcnJvci4KKyAgICAgKi8KKyAgICBpZiAobGlzdCA9PSBQeV9Ob25lIHx8IGxpc3QgPT0gTlVMTCkKKyAgICB7CisJaW50CWk7CisJaW50CW4gPSBoaSAtIGxvOworCWJ1Zl9UCSpzYXZlYnVmID0gY3VyYnVmOworCisJUHlFcnJfQ2xlYXIoKTsKKwljdXJidWYgPSBidWY7CisKKwlpZiAodV9zYXZlZGVsKChsaW5lbnJfVClsbywgKGxvbmcpbikgPT0gRkFJTCkKKwkgICAgUHlFcnJfU2V0VmltKF8oImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iKSk7CisJZWxzZQorCXsKKwkgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkgICAgeworCQlpZiAobWxfZGVsZXRlKChsaW5lbnJfVClsbywgRkFMU0UpID09IEZBSUwpCisJCXsKKwkJICAgIFB5RXJyX1NldFZpbShfKCJjYW5ub3QgZGVsZXRlIGxpbmUiKSk7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIGRlbGV0ZWRfbGluZXNfbWFyaygobGluZW5yX1QpbG8sIChsb25nKWkpOworCisJICAgIGlmIChidWYgPT0gY3Vyd2luLT53X2J1ZmZlcikKKwkJcHlfZml4X2N1cnNvcihsbywgaGksIC1uKTsKKwl9CisKKwljdXJidWYgPSBzYXZlYnVmOworCisJaWYgKFB5RXJyX09jY3VycmVkKCkgfHwgVmltRXJyb3JDaGVjaygpKQorCSAgICByZXR1cm4gRkFJTDsKKworCWlmIChsZW5fY2hhbmdlKQorCSAgICAqbGVuX2NoYW5nZSA9IC1uOworCisJcmV0dXJuIE9LOworICAgIH0KKyAgICBlbHNlIGlmIChQeUxpc3RfQ2hlY2sobGlzdCkpCisgICAgeworCWludAlpOworCWludAluZXdfbGVuID0gUHlMaXN0X1NpemUobGlzdCk7CisJaW50CW9sZF9sZW4gPSBoaSAtIGxvOworCWludAlleHRyYSA9IDA7CS8qIGxpbmVzIGFkZGVkIHRvIHRleHQsIGNhbiBiZSBuZWdhdGl2ZSAqLworCWNoYXIJKiphcnJheTsKKwlidWZfVAkqc2F2ZWJ1ZjsKKworCWlmIChuZXdfbGVuID09IDApCS8qIGF2b2lkIGFsbG9jYXRpbmcgemVybyBieXRlcyAqLworCSAgICBhcnJheSA9IE5VTEw7CisJZWxzZQorCXsKKwkgICAgYXJyYXkgPSAoY2hhciAqKilhbGxvYygodW5zaWduZWQpKG5ld19sZW4gKiBzaXplb2YoY2hhciAqKSkpOworCSAgICBpZiAoYXJyYXkgPT0gTlVMTCkKKwkgICAgeworCQlQeUVycl9Ob01lbW9yeSgpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBuZXdfbGVuOyArK2kpCisJeworCSAgICBQeU9iamVjdCAqbGluZSA9IFB5TGlzdF9HZXRJdGVtKGxpc3QsIGkpOworCisJICAgIGFycmF5W2ldID0gU3RyaW5nVG9MaW5lKGxpbmUpOworCSAgICBpZiAoYXJyYXlbaV0gPT0gTlVMTCkKKwkgICAgeworCQl3aGlsZSAoaSkKKwkJICAgIHZpbV9mcmVlKGFycmF5Wy0taV0pOworCQl2aW1fZnJlZShhcnJheSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJfQorCisJc2F2ZWJ1ZiA9IGN1cmJ1ZjsKKworCVB5RXJyX0NsZWFyKCk7CisJY3VyYnVmID0gYnVmOworCisJaWYgKHVfc2F2ZSgobGluZW5yX1QpKGxvLTEpLCAobGluZW5yX1QpaGkpID09IEZBSUwpCisJICAgIFB5RXJyX1NldFZpbShfKCJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIikpOworCisJLyogSWYgdGhlIHNpemUgb2YgdGhlIHJhbmdlIGlzIHJlZHVjaW5nIChpZSwgbmV3X2xlbiA8IG9sZF9sZW4pIHdlCisJICogbmVlZCB0byBkZWxldGUgc29tZSBvbGRfbGVuLiBXZSBkbyB0aGlzIGF0IHRoZSBzdGFydCwgYnkKKwkgKiByZXBlYXRlZGx5IGRlbGV0aW5nIGxpbmUgImxvIi4KKwkgKi8KKwlpZiAoIVB5RXJyX09jY3VycmVkKCkpCisJeworCSAgICBmb3IgKGkgPSAwOyBpIDwgb2xkX2xlbiAtIG5ld19sZW47ICsraSkKKwkJaWYgKG1sX2RlbGV0ZSgobGluZW5yX1QpbG8sIEZBTFNFKSA9PSBGQUlMKQorCQl7CisJCSAgICBQeUVycl9TZXRWaW0oXygiY2Fubm90IGRlbGV0ZSBsaW5lIikpOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgZXh0cmEgLT0gaTsKKwl9CisKKwkvKiBGb3IgYXMgbG9uZyBhcyBwb3NzaWJsZSwgcmVwbGFjZSB0aGUgZXhpc3Rpbmcgb2xkX2xlbiB3aXRoIHRoZQorCSAqIG5ldyBvbGRfbGVuLiBUaGlzIGlzIGEgbW9yZSBlZmZpY2llbnQgb3BlcmF0aW9uLCBhcyBpdCByZXF1aXJlcworCSAqIGxlc3MgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcuCisJICovCisJaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorCXsKKwkgICAgZm9yIChpID0gMDsgaSA8IG9sZF9sZW4gJiYgaSA8IG5ld19sZW47ICsraSkKKwkJaWYgKG1sX3JlcGxhY2UoKGxpbmVucl9UKShsbytpKSwgKGNoYXJfdSAqKWFycmF5W2ldLCBGQUxTRSkKKwkJCQkJCQkJICAgICAgPT0gRkFJTCkKKwkJeworCQkgICAgUHlFcnJfU2V0VmltKF8oImNhbm5vdCByZXBsYWNlIGxpbmUiKSk7CisJCSAgICBicmVhazsKKwkJfQorCX0KKwllbHNlCisJICAgIGkgPSAwOworCisJLyogTm93IHdlIG1heSBuZWVkIHRvIGluc2VydCB0aGUgcmVtYWluaW5nIG5ldyBvbGRfbGVuLiBJZiB3ZSBkbywgd2UKKwkgKiBtdXN0IGZyZWUgdGhlIHN0cmluZ3MgYXMgd2UgZmluaXNoIHdpdGggdGhlbSAod2UgY2FuJ3QgcGFzcyB0aGUKKwkgKiByZXNwb25zaWJpbGl0eSB0byB2aW0gaW4gdGhpcyBjYXNlKS4KKwkgKi8KKwlpZiAoIVB5RXJyX09jY3VycmVkKCkpCisJeworCSAgICB3aGlsZSAoaSA8IG5ld19sZW4pCisJICAgIHsKKwkJaWYgKG1sX2FwcGVuZCgobGluZW5yX1QpKGxvICsgaSAtIDEpLAorCQkJCQkoY2hhcl91ICopYXJyYXlbaV0sIDAsIEZBTFNFKSA9PSBGQUlMKQorCQl7CisJCSAgICBQeUVycl9TZXRWaW0oXygiY2Fubm90IGluc2VydCBsaW5lIikpOworCQkgICAgYnJlYWs7CisJCX0KKwkJdmltX2ZyZWUoYXJyYXlbaV0pOworCQkrK2k7CisJCSsrZXh0cmE7CisJICAgIH0KKwl9CisKKwkvKiBGcmVlIGFueSBsZWZ0LW92ZXIgb2xkX2xlbiwgYXMgYSByZXN1bHQgb2YgYW4gZXJyb3IgKi8KKwl3aGlsZSAoaSA8IG5ld19sZW4pCisJeworCSAgICB2aW1fZnJlZShhcnJheVtpXSk7CisJICAgICsraTsKKwl9CisKKwkvKiBGcmVlIHRoZSBhcnJheSBvZiBvbGRfbGVuLiBBbGwgb2YgaXRzIGNvbnRlbnRzIGhhdmUgbm93CisJICogYmVlbiBkZWFsdCB3aXRoIChlaXRoZXIgZnJlZWQsIG9yIHRoZSByZXNwb25zaWJpbGl0eSBwYXNzZWQKKwkgKiB0byB2aW0uCisJICovCisJdmltX2ZyZWUoYXJyYXkpOworCisJLyogQWRqdXN0IG1hcmtzLiBJbnZhbGlkYXRlIGFueSB3aGljaCBsaWUgaW4gdGhlCisJICogY2hhbmdlZCByYW5nZSwgYW5kIG1vdmUgYW55IGluIHRoZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlci4KKwkgKi8KKwltYXJrX2FkanVzdCgobGluZW5yX1QpbG8sIChsaW5lbnJfVCkoaGkgLSAxKSwKKwkJCQkJCSAgKGxvbmcpTUFYTE5VTSwgKGxvbmcpZXh0cmEpOworCWNoYW5nZWRfbGluZXMoKGxpbmVucl9UKWxvLCAwLCAobGluZW5yX1QpaGksIChsb25nKWV4dHJhKTsKKworCWlmIChidWYgPT0gY3Vyd2luLT53X2J1ZmZlcikKKwkgICAgcHlfZml4X2N1cnNvcihsbywgaGksIGV4dHJhKTsKKworCWN1cmJ1ZiA9IHNhdmVidWY7CisKKwlpZiAoUHlFcnJfT2NjdXJyZWQoKSB8fCBWaW1FcnJvckNoZWNrKCkpCisJICAgIHJldHVybiBGQUlMOworCisJaWYgKGxlbl9jaGFuZ2UpCisJICAgICpsZW5fY2hhbmdlID0gbmV3X2xlbiAtIG9sZF9sZW47CisKKwlyZXR1cm4gT0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJUHlFcnJfQmFkQXJndW1lbnQoKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9Cit9CisKKy8qIEluc2VydCBhIG51bWJlciBvZiBsaW5lcyBpbnRvIHRoZSBzcGVjaWZpZWQgYnVmZmVyIGFmdGVyIHRoZSBzcGVjaWZlZCBsaW5lLgorICogVGhlIGxpbmUgbnVtYmVyIGlzIGluIFZpbSBmb3JtYXQgKDEtYmFzZWQpLiBUaGUgbGluZXMgdG8gYmUgaW5zZXJ0ZWQgYXJlCisgKiBnaXZlbiBhcyBhIFB5dGhvbiBsaXN0IG9mIHN0cmluZyBvYmplY3RzIG9yIGFzIGEgc2luZ2xlIHN0cmluZy4gVGhlIGxpbmVzCisgKiB0byBiZSBhZGRlZCBhcmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgZm9ybWF0LiBFcnJvcnMgYXJlCisgKiByZXR1cm5lZCBhcyBhIHZhbHVlIG9mIEZBSUwuICBUaGUgcmV0dXJuIHZhbHVlIGlzIE9LIG9uIHN1Y2Nlc3MuCisgKiBJZiBPSyBpcyByZXR1cm5lZCBhbmQgbGVuX2NoYW5nZSBpcyBub3QgTlVMTCwgKmxlbl9jaGFuZ2UKKyAqIGlzIHNldCB0byB0aGUgY2hhbmdlIGluIHRoZSBidWZmZXIgbGVuZ3RoLgorICovCisgICAgc3RhdGljIGludAorSW5zZXJ0QnVmZmVyTGluZXMoYnVmX1QgKmJ1ZiwgaW50IG4sIFB5T2JqZWN0ICpsaW5lcywgaW50ICpsZW5fY2hhbmdlKQoreworICAgIC8qIEZpcnN0IG9mIGFsbCwgd2UgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIHN1cHBsaWVkIFB5dGhvbiBvYmplY3QuCisgICAgICogSXQgbXVzdCBiZSBhIHN0cmluZyBvciBhIGxpc3QsIG9yIHRoZSBjYWxsIGlzIGluIGVycm9yLgorICAgICAqLworICAgIGlmIChQeVN0cmluZ19DaGVjayhsaW5lcykpCisgICAgeworCWNoYXIJKnN0ciA9IFN0cmluZ1RvTGluZShsaW5lcyk7CisJYnVmX1QJKnNhdmVidWY7CisKKwlpZiAoc3RyID09IE5VTEwpCisJICAgIHJldHVybiBGQUlMOworCisJc2F2ZWJ1ZiA9IGN1cmJ1ZjsKKworCVB5RXJyX0NsZWFyKCk7CisJY3VyYnVmID0gYnVmOworCisJaWYgKHVfc2F2ZSgobGluZW5yX1QpbiwgKGxpbmVucl9UKShuKzEpKSA9PSBGQUlMKQorCSAgICBQeUVycl9TZXRWaW0oXygiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIpKTsKKwllbHNlIGlmIChtbF9hcHBlbmQoKGxpbmVucl9UKW4sIChjaGFyX3UgKilzdHIsIDAsIEZBTFNFKSA9PSBGQUlMKQorCSAgICBQeUVycl9TZXRWaW0oXygiY2Fubm90IGluc2VydCBsaW5lIikpOworCWVsc2UKKwkgICAgYXBwZW5kZWRfbGluZXNfbWFyaygobGluZW5yX1QpbiwgMUwpOworCisJdmltX2ZyZWUoc3RyKTsKKwljdXJidWYgPSBzYXZlYnVmOworCXVwZGF0ZV9zY3JlZW4oVkFMSUQpOworCisJaWYgKFB5RXJyX09jY3VycmVkKCkgfHwgVmltRXJyb3JDaGVjaygpKQorCSAgICByZXR1cm4gRkFJTDsKKworCWlmIChsZW5fY2hhbmdlKQorCSAgICAqbGVuX2NoYW5nZSA9IDE7CisKKwlyZXR1cm4gT0s7CisgICAgfQorICAgIGVsc2UgaWYgKFB5TGlzdF9DaGVjayhsaW5lcykpCisgICAgeworCWludAlpOworCWludAlzaXplID0gUHlMaXN0X1NpemUobGluZXMpOworCWNoYXIJKiphcnJheTsKKwlidWZfVAkqc2F2ZWJ1ZjsKKworCWFycmF5ID0gKGNoYXIgKiopYWxsb2MoKHVuc2lnbmVkKShzaXplICogc2l6ZW9mKGNoYXIgKikpKTsKKwlpZiAoYXJyYXkgPT0gTlVMTCkKKwl7CisJICAgIFB5RXJyX05vTWVtb3J5KCk7CisJICAgIHJldHVybiBGQUlMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpCisJeworCSAgICBQeU9iamVjdCAqbGluZSA9IFB5TGlzdF9HZXRJdGVtKGxpbmVzLCBpKTsKKwkgICAgYXJyYXlbaV0gPSBTdHJpbmdUb0xpbmUobGluZSk7CisKKwkgICAgaWYgKGFycmF5W2ldID09IE5VTEwpCisJICAgIHsKKwkJd2hpbGUgKGkpCisJCSAgICB2aW1fZnJlZShhcnJheVstLWldKTsKKwkJdmltX2ZyZWUoYXJyYXkpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCX0KKworCXNhdmVidWYgPSBjdXJidWY7CisKKwlQeUVycl9DbGVhcigpOworCWN1cmJ1ZiA9IGJ1ZjsKKworCWlmICh1X3NhdmUoKGxpbmVucl9UKW4sIChsaW5lbnJfVCkobiArIDEpKSA9PSBGQUlMKQorCSAgICBQeUVycl9TZXRWaW0oXygiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIpKTsKKwllbHNlCisJeworCSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorCSAgICB7CisJCWlmIChtbF9hcHBlbmQoKGxpbmVucl9UKShuICsgaSksCisJCQkJCShjaGFyX3UgKilhcnJheVtpXSwgMCwgRkFMU0UpID09IEZBSUwpCisJCXsKKwkJICAgIFB5RXJyX1NldFZpbShfKCJjYW5ub3QgaW5zZXJ0IGxpbmUiKSk7CisKKwkJICAgIC8qIEZyZWUgdGhlIHJlc3Qgb2YgdGhlIGxpbmVzICovCisJCSAgICB3aGlsZSAoaSA8IHNpemUpCisJCQl2aW1fZnJlZShhcnJheVtpKytdKTsKKworCQkgICAgYnJlYWs7CisJCX0KKwkJdmltX2ZyZWUoYXJyYXlbaV0pOworCSAgICB9CisJICAgIGlmIChpID4gMCkKKwkJYXBwZW5kZWRfbGluZXNfbWFyaygobGluZW5yX1QpbiwgKGxvbmcpaSk7CisJfQorCisJLyogRnJlZSB0aGUgYXJyYXkgb2YgbGluZXMuIEFsbCBvZiBpdHMgY29udGVudHMgaGF2ZSBub3cKKwkgKiBiZWVuIGZyZWVkLgorCSAqLworCXZpbV9mcmVlKGFycmF5KTsKKworCWN1cmJ1ZiA9IHNhdmVidWY7CisJdXBkYXRlX3NjcmVlbihWQUxJRCk7CisKKwlpZiAoUHlFcnJfT2NjdXJyZWQoKSB8fCBWaW1FcnJvckNoZWNrKCkpCisJICAgIHJldHVybiBGQUlMOworCisJaWYgKGxlbl9jaGFuZ2UpCisJICAgICpsZW5fY2hhbmdlID0gc2l6ZTsKKworCXJldHVybiBPSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlQeUVycl9CYWRBcmd1bWVudCgpOworCXJldHVybiBGQUlMOworICAgIH0KK30KKworLyogQ29udmVydCBhIFZpbSBsaW5lIGludG8gYSBQeXRob24gc3RyaW5nLgorICogQWxsIGludGVybmFsIG5ld2xpbmVzIGFyZSByZXBsYWNlZCBieSBudWxsIGNoYXJhY3RlcnMuCisgKgorICogT24gZXJyb3JzLCB0aGUgUHl0aG9uIGV4Y2VwdGlvbiBkYXRhIGlzIHNldCwgYW5kIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKgorTGluZVRvU3RyaW5nKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIGludCBsZW4gPSBzdHJsZW4oc3RyKTsKKyAgICBjaGFyICpwOworCisgICAgLyogQWxsb2NhdGUgYW4gUHl0aG9uIHN0cmluZyBvYmplY3QsIHdpdGggdW5pbml0aWFsaXNlZCBjb250ZW50cy4gV2UKKyAgICAgKiBtdXN0IGRvIGl0IHRoaXMgd2F5LCBzbyB0aGF0IHdlIGNhbiBtb2RpZnkgdGhlIHN0cmluZyBpbiBwbGFjZQorICAgICAqIGxhdGVyLiBTZWUgdGhlIFB5dGhvbiBzb3VyY2UsIE9iamVjdHMvc3RyaW5nb2JqZWN0LmMgZm9yIGRldGFpbHMuCisgICAgICovCisgICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICBwID0gUHlTdHJpbmdfQXNTdHJpbmcocmVzdWx0KTsKKworICAgIHdoaWxlICgqc3RyKQorICAgIHsKKwlpZiAoKnN0ciA9PSAnXG4nKQorCSAgICAqcCA9ICdcMCc7CisJZWxzZQorCSAgICAqcCA9ICpzdHI7CisKKwkrK3A7CisJKytzdHI7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQ29udmVydCBhIFB5dGhvbiBzdHJpbmcgaW50byBhIFZpbSBsaW5lLgorICoKKyAqIFRoZSByZXN1bHQgaXMgaW4gYWxsb2NhdGVkIG1lbW9yeS4gQWxsIGludGVybmFsIG51bGxzIGFyZSByZXBsYWNlZCBieQorICogbmV3bGluZSBjaGFyYWN0ZXJzLiBJdCBpcyBhbiBlcnJvciBmb3IgdGhlIHN0cmluZyB0byBjb250YWluIG5ld2xpbmUKKyAqIGNoYXJhY3RlcnMuCisgKgorICogT24gZXJyb3JzLCB0aGUgUHl0aG9uIGV4Y2VwdGlvbiBkYXRhIGlzIHNldCwgYW5kIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KKyAgICBzdGF0aWMgY2hhciAqCitTdHJpbmdUb0xpbmUoUHlPYmplY3QgKm9iaikKK3sKKyAgICBjb25zdCBjaGFyICpzdHI7CisgICAgY2hhciAqc2F2ZTsKKyAgICBpbnQgbGVuOworICAgIGludCBpOworCisgICAgaWYgKG9iaiA9PSBOVUxMIHx8ICFQeVN0cmluZ19DaGVjayhvYmopKQorICAgIHsKKwlQeUVycl9CYWRBcmd1bWVudCgpOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0ciA9IFB5U3RyaW5nX0FzU3RyaW5nKG9iaik7CisgICAgbGVuID0gUHlTdHJpbmdfU2l6ZShvYmopOworCisgICAgLyogRXJyb3IgY2hlY2tpbmc6IFN0cmluZyBtdXN0IG5vdCBjb250YWluIG5ld2xpbmVzLCBhcyB3ZQorICAgICAqIGFyZSByZXBsYWNpbmcgYSBzaW5nbGUgbGluZSwgYW5kIHdlIG11c3QgcmVwbGFjZSBpdCB3aXRoCisgICAgICogYSBzaW5nbGUgbGluZS4KKyAgICAgKi8KKyAgICBpZiAobWVtY2hyKHN0ciwgJ1xuJywgbGVuKSkKKyAgICB7CisJUHlFcnJfU2V0VmltKF8oInN0cmluZyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIpKTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgYSBjb3B5IG9mIHRoZSBzdHJpbmcsIHdpdGggaW50ZXJuYWwgbnVsbHMgcmVwbGFjZWQgYnkKKyAgICAgKiBuZXdsaW5lIGNoYXJhY3RlcnMsIGFzIGlzIHRoZSB2aW0gY29udmVudGlvbi4KKyAgICAgKi8KKyAgICBzYXZlID0gKGNoYXIgKilhbGxvYygodW5zaWduZWQpKGxlbisxKSk7CisgICAgaWYgKHNhdmUgPT0gTlVMTCkKKyAgICB7CisJUHlFcnJfTm9NZW1vcnkoKTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisgICAgeworCWlmIChzdHJbaV0gPT0gJ1wwJykKKwkgICAgc2F2ZVtpXSA9ICdcbic7CisJZWxzZQorCSAgICBzYXZlW2ldID0gc3RyW2ldOworICAgIH0KKworICAgIHNhdmVbaV0gPSAnXDAnOworCisgICAgcmV0dXJuIHNhdmU7Cit9CisKKy8qIENoZWNrIHRvIHNlZSB3aGV0aGVyIGEgVmltIGVycm9yIGhhcyBiZWVuIHJlcG9ydGVkLCBvciBhIGtleWJvYXJkCisgKiBpbnRlcnJ1cHQgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKi8KKyAgICBzdGF0aWMgaW50CitWaW1FcnJvckNoZWNrKHZvaWQpCit7CisgICAgaWYgKGdvdF9pbnQpCisgICAgeworCVB5RXJyX1NldE5vbmUoUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQpOworCXJldHVybiAxOworICAgIH0KKyAgICBlbHNlIGlmIChkaWRfZW1zZyAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICB7CisJUHlFcnJfU2V0Tm9uZShWaW1FcnJvcik7CisJcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworLyogRG9uJ3QgZ2VuZXJhdGUgYSBwcm90b3R5cGUgZm9yIHRoZSBuZXh0IGZ1bmN0aW9uLCBpdCBnZW5lcmF0ZXMgYW4gZXJyb3Igb24KKyAqIG5ld2VyIFB5dGhvbiB2ZXJzaW9ucy4gKi8KKyNpZiBQWVRIT05fQVBJX1ZFUlNJT04gPCAxMDA3IC8qIFB5dGhvbiAxLjQgKi8gJiYgIWRlZmluZWQoUFJPVE8pCisKKyAgICBjaGFyICoKK1B5X0dldFByb2dyYW1OYW1lKHZvaWQpCit7CisgICAgcmV0dXJuICJ2aW0iOworfQorI2VuZGlmIC8qIFB5dGhvbiAxLjQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pZl9ydWJ5LmMgYi9zcmMvaWZfcnVieS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZjUwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaWZfcnVieS5jCkBAIC0wLDAgKzEsODY4IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKiBSdWJ5IGludGVyZmFjZSBieSBTaHVnbyBNYWVkYS4KKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBfV0lOMzIKKyMgaWYgIWRlZmluZWQoRFlOQU1JQ19SVUJZX1ZFUikgfHwgKERZTkFNSUNfUlVCWV9WRVIgPCAxOCkKKyMgICBkZWZpbmUgTlQKKyMgZW5kaWYKKyMgaWZuZGVmIERZTkFNSUNfUlVCWQorIyAgZGVmaW5lIElNUE9SVCAvKiBGb3Igc3RhdGljIGRsbCB1c2FnZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgKi8KKyMgIGRlZmluZSBSVUJZRVhURVJOIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyBlbmRpZgorI2VuZGlmCisjaWZuZGVmIFJVQllFWFRFUk4KKyMgZGVmaW5lIFJVQllFWFRFUk4gZXh0ZXJuCisjZW5kaWYKKworLyoKKyAqIFRoaXMgaXMgdHJpY2t5LiAgSW4gcnVieS5oIHRoZXJlIGlzIChpbmxpbmUpIGZ1bmN0aW9uIHJiX2NsYXNzX29mKCkKKyAqIGRlZmluaXRpb24uICBUaGlzIGZ1bmN0aW9uIHVzZSB0aGVzZSB2YXJpYWJsZXMuICBCdXQgd2Ugd2FudCBmdW5jdGlvbiB0bworICogdXNlIGRsbF8qIHZhcmlhYmxlcy4KKyAqLworI2lmZGVmIERZTkFNSUNfUlVCWQorIyBkZWZpbmUgcmJfY0ZhbHNlQ2xhc3MJCSgqZGxsX3JiX2NGYWxzZUNsYXNzKQorIyBkZWZpbmUgcmJfY0ZpeG51bQkJKCpkbGxfcmJfY0ZpeG51bSkKKyMgZGVmaW5lIHJiX2NOaWxDbGFzcwkJKCpkbGxfcmJfY05pbENsYXNzKQorIyBkZWZpbmUgcmJfY1N5bWJvbAkJKCpkbGxfcmJfY1N5bWJvbCkKKyMgZGVmaW5lIHJiX2NUcnVlQ2xhc3MJCSgqZGxsX3JiX2NUcnVlQ2xhc3MpCisjIGlmIGRlZmluZWQoRFlOQU1JQ19SVUJZX1ZFUikgJiYgRFlOQU1JQ19SVUJZX1ZFUiA+PSAxOAorLyoKKyAqIE9uIHZlciAxLjgsIGFsbCBSdWJ5IGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgd2l0aCAiX19kZWNsc3BjZShkbGxpbXBvcnQpIgorICogaW4gcnVieS5oLiAgQnV0IGl0IGNhdXNlIHRyb3VibGUgZm9yIHRoZXNlIHZhcmlhYmxlcywgYmVjYXVzZSBpdCBpcworICogZGVmaW5lZCBpbiB0aGlzIGZpbGUuICBXaGVuIGRlZmluZWQgdGhpcyBSVUJZX0VYUE9SVCBpdCBtb2RpZmllZCB0bworICogImV4dGVybiIgYW5kIGJlIGFibGUgdG8gYXZvaWQgdGhpcyBwcm9ibGVtLgorICovCisjICBkZWZpbmUgUlVCWV9FWFBPUlQKKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8cnVieS5oPgorCisjdW5kZWYgRVhURVJOCisjdW5kZWYgXworCisvKiBUX0RBVEEgZGVmaW5lZCBib3RoIGJ5IFJ1YnkgYW5kIE1hYyBoZWFkZXIgZmlsZXMsIGhhY2sgYXJvdW5kIGl0Li4uICovCisjaWZkZWYgRkVBVF9HVUlfTUFDCisjIGRlZmluZSBfX09QRU5UUkFOU1BPUlRfXworIyBkZWZpbmUgX19PUEVOVFJBTlNQT1JUUFJPVE9DT0xfXworIyBkZWZpbmUgX19PUEVOVFJBTlNQT1JUUFJPVklERVJTX18KKyNlbmRpZgorCisjaW5jbHVkZSAidmltLmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgorCisjaWYgZGVmaW5lZChQUk9UTykgJiYgIWRlZmluZWQoRkVBVF9SVUJZKQorLyogRGVmaW5lIHRoZXNlIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMuICovCisjIGRlZmluZSBWQUxVRSBpbnQKKyMgZGVmaW5lIFJVQllfREFUQV9GVU5DIGludAorI2VuZGlmCisKK3N0YXRpYyBpbnQgcnVieV9pbml0aWFsaXplZCA9IDA7CitzdGF0aWMgVkFMVUUgb2JqdGJsOworCitzdGF0aWMgVkFMVUUgbVZJTTsKK3N0YXRpYyBWQUxVRSBjQnVmZmVyOworc3RhdGljIFZBTFVFIGNWaW1XaW5kb3c7CitzdGF0aWMgVkFMVUUgZURlbGV0ZWRCdWZmZXJFcnJvcjsKK3N0YXRpYyBWQUxVRSBlRGVsZXRlZFdpbmRvd0Vycm9yOworCitzdGF0aWMgaW50IGVuc3VyZV9ydWJ5X2luaXRpYWxpemVkKHZvaWQpOworc3RhdGljIHZvaWQgZXJyb3JfcHJpbnQoaW50KTsKK3N0YXRpYyB2b2lkIHJ1YnlfaW9faW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIHJ1YnlfdmltX2luaXQodm9pZCk7CisKKyNpZiBkZWZpbmVkKERZTkFNSUNfUlVCWSkgfHwgZGVmaW5lZChQUk9UTykKKyNpZmRlZiBQUk9UTworIyBkZWZpbmUgSElOU1RBTkNFIGludAkJLyogZm9yIGdlbmVyYXRpbmcgcHJvdG90eXBlcyAqLworI2VuZGlmCisKKy8qCisgKiBXcmFwcGVyIGRlZmluZXMKKyAqLworI2RlZmluZSByYl9hc3NvY19uZXcJCQlkbGxfcmJfYXNzb2NfbmV3CisjZGVmaW5lIHJiX2NPYmplY3QJCQkoKmRsbF9yYl9jT2JqZWN0KQorI2RlZmluZSByYl9jaGVja190eXBlCQkJZGxsX3JiX2NoZWNrX3R5cGUKKyNkZWZpbmUgcmJfY2xhc3NfcGF0aAkJCWRsbF9yYl9jbGFzc19wYXRoCisjZGVmaW5lIHJiX2RhdGFfb2JqZWN0X2FsbG9jCQlkbGxfcmJfZGF0YV9vYmplY3RfYWxsb2MKKyNkZWZpbmUgcmJfZGVmaW5lX2NsYXNzX3VuZGVyCQlkbGxfcmJfZGVmaW5lX2NsYXNzX3VuZGVyCisjZGVmaW5lIHJiX2RlZmluZV9jb25zdAkJCWRsbF9yYl9kZWZpbmVfY29uc3QKKyNkZWZpbmUgcmJfZGVmaW5lX2dsb2JhbF9mdW5jdGlvbglkbGxfcmJfZGVmaW5lX2dsb2JhbF9mdW5jdGlvbgorI2RlZmluZSByYl9kZWZpbmVfbWV0aG9kCQlkbGxfcmJfZGVmaW5lX21ldGhvZAorI2RlZmluZSByYl9kZWZpbmVfbW9kdWxlCQlkbGxfcmJfZGVmaW5lX21vZHVsZQorI2RlZmluZSByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uCWRsbF9yYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uCisjZGVmaW5lIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kCWRsbF9yYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZAorI2RlZmluZSByYl9kZWZpbmVfdmlydHVhbF92YXJpYWJsZQlkbGxfcmJfZGVmaW5lX3ZpcnR1YWxfdmFyaWFibGUKKyNkZWZpbmUgcmJfc3Rkb3V0CQkJKCpkbGxfcmJfc3Rkb3V0KQorI2RlZmluZSByYl9lQXJnRXJyb3IJCQkoKmRsbF9yYl9lQXJnRXJyb3IpCisjZGVmaW5lIHJiX2VJbmRleEVycm9yCQkJKCpkbGxfcmJfZUluZGV4RXJyb3IpCisjZGVmaW5lIHJiX2VSdW50aW1lRXJyb3IJCSgqZGxsX3JiX2VSdW50aW1lRXJyb3IpCisjZGVmaW5lIHJiX2VTdGFuZGFyZEVycm9yCQkoKmRsbF9yYl9lU3RhbmRhcmRFcnJvcikKKyNkZWZpbmUgcmJfZXZhbF9zdHJpbmdfcHJvdGVjdAkJZGxsX3JiX2V2YWxfc3RyaW5nX3Byb3RlY3QKKyNkZWZpbmUgcmJfZ2xvYmFsX3ZhcmlhYmxlCQlkbGxfcmJfZ2xvYmFsX3ZhcmlhYmxlCisjZGVmaW5lIHJiX2hhc2hfYXNldAkJCWRsbF9yYl9oYXNoX2FzZXQKKyNkZWZpbmUgcmJfaGFzaF9uZXcJCQlkbGxfcmJfaGFzaF9uZXcKKyNkZWZpbmUgcmJfaW5zcGVjdAkJCWRsbF9yYl9pbnNwZWN0CisjZGVmaW5lIHJiX2ludDJpbnVtCQkJZGxsX3JiX2ludDJpbnVtCisjZGVmaW5lIHJiX2xhc3RsaW5lX2dldAkJCWRsbF9yYl9sYXN0bGluZV9nZXQKKyNkZWZpbmUgcmJfbGFzdGxpbmVfc2V0CQkJZGxsX3JiX2xhc3RsaW5lX3NldAorI2RlZmluZSByYl9sb2FkX3Byb3RlY3QJCQlkbGxfcmJfbG9hZF9wcm90ZWN0CisjZGVmaW5lIHJiX251bTJsb25nCQkJZGxsX3JiX251bTJsb25nCisjZGVmaW5lIHJiX251bTJ1bG9uZwkJCWRsbF9yYl9udW0ydWxvbmcKKyNkZWZpbmUgcmJfb2JqX2FsbG9jCQkJZGxsX3JiX29ial9hbGxvYworI2RlZmluZSByYl9vYmpfYXNfc3RyaW5nCQlkbGxfcmJfb2JqX2FzX3N0cmluZworI2RlZmluZSByYl9vYmpfaWQJCQlkbGxfcmJfb2JqX2lkCisjZGVmaW5lIHJiX3JhaXNlCQkJZGxsX3JiX3JhaXNlCisjZGVmaW5lIHJiX3N0cjJjc3RyCQkJZGxsX3JiX3N0cjJjc3RyCisjZGVmaW5lIHJiX3N0cl9jYXQJCQlkbGxfcmJfc3RyX2NhdAorI2RlZmluZSByYl9zdHJfY29uY2F0CQkJZGxsX3JiX3N0cl9jb25jYXQKKyNkZWZpbmUgcmJfc3RyX25ldwkJCWRsbF9yYl9zdHJfbmV3CisjZGVmaW5lIHJiX3N0cl9uZXcyCQkJZGxsX3JiX3N0cl9uZXcyCisjZGVmaW5lIHJ1YnlfZXJyaW5mbwkJCSgqZGxsX3J1YnlfZXJyaW5mbykKKyNkZWZpbmUgcnVieV9pbml0CQkJZGxsX3J1YnlfaW5pdAorI2RlZmluZSBydWJ5X2luaXRfbG9hZHBhdGgJCWRsbF9ydWJ5X2luaXRfbG9hZHBhdGgKKyNpZiBkZWZpbmVkKERZTkFNSUNfUlVCWV9WRVIpICYmIERZTkFNSUNfUlVCWV9WRVIgPj0gMTgKKyMgZGVmaW5lIHJiX3czMl9zbnByaW50ZgkJZGxsX3JiX3czMl9zbnByaW50ZgorI2VuZGlmCisKKy8qCisgKiBQb2ludGVycyBmb3IgZHluYW1pYyBsaW5rCisgKi8KK3N0YXRpYyBWQUxVRSAoKmRsbF9yYl9hc3NvY19uZXcpIChWQUxVRSwgVkFMVUUpOworc3RhdGljIFZBTFVFICpkbGxfcmJfY0ZhbHNlQ2xhc3M7CitzdGF0aWMgVkFMVUUgKmRsbF9yYl9jRml4bnVtOworc3RhdGljIFZBTFVFICpkbGxfcmJfY05pbENsYXNzOworc3RhdGljIFZBTFVFICpkbGxfcmJfY09iamVjdDsKK3N0YXRpYyBWQUxVRSAqZGxsX3JiX2NTeW1ib2w7CitzdGF0aWMgVkFMVUUgKmRsbF9yYl9jVHJ1ZUNsYXNzOworc3RhdGljIHZvaWQgKCpkbGxfcmJfY2hlY2tfdHlwZSkgKFZBTFVFLGludCk7CitzdGF0aWMgVkFMVUUgKCpkbGxfcmJfY2xhc3NfcGF0aCkgKFZBTFVFKTsKK3N0YXRpYyBWQUxVRSAoKmRsbF9yYl9kYXRhX29iamVjdF9hbGxvYykgKFZBTFVFLCB2b2lkKiwgUlVCWV9EQVRBX0ZVTkMsIFJVQllfREFUQV9GVU5DKTsKK3N0YXRpYyBWQUxVRSAoKmRsbF9yYl9kZWZpbmVfY2xhc3NfdW5kZXIpIChWQUxVRSwgY29uc3QgY2hhciosIFZBTFVFKTsKK3N0YXRpYyB2b2lkICgqZGxsX3JiX2RlZmluZV9jb25zdCkgKFZBTFVFLGNvbnN0IGNoYXIqLFZBTFVFKTsKK3N0YXRpYyB2b2lkICgqZGxsX3JiX2RlZmluZV9nbG9iYWxfZnVuY3Rpb24pIChjb25zdCBjaGFyKixWQUxVRSgqKSgpLGludCk7CitzdGF0aWMgdm9pZCAoKmRsbF9yYl9kZWZpbmVfbWV0aG9kKSAoVkFMVUUsY29uc3QgY2hhciosVkFMVUUoKikoKSxpbnQpOworc3RhdGljIFZBTFVFICgqZGxsX3JiX2RlZmluZV9tb2R1bGUpIChjb25zdCBjaGFyKik7CitzdGF0aWMgdm9pZCAoKmRsbF9yYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uKSAoVkFMVUUsY29uc3QgY2hhciosVkFMVUUoKikoKSxpbnQpOworc3RhdGljIHZvaWQgKCpkbGxfcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QpIChWQUxVRSxjb25zdCBjaGFyKixWQUxVRSgqKSgpLGludCk7CitzdGF0aWMgdm9pZCAoKmRsbF9yYl9kZWZpbmVfdmlydHVhbF92YXJpYWJsZSkgKGNvbnN0IGNoYXIqLFZBTFVFKCopKCksdm9pZCgqKSgpKTsKK3N0YXRpYyBWQUxVRSAqZGxsX3JiX3N0ZG91dDsKK3N0YXRpYyBWQUxVRSAqZGxsX3JiX2VBcmdFcnJvcjsKK3N0YXRpYyBWQUxVRSAqZGxsX3JiX2VJbmRleEVycm9yOworc3RhdGljIFZBTFVFICpkbGxfcmJfZVJ1bnRpbWVFcnJvcjsKK3N0YXRpYyBWQUxVRSAqZGxsX3JiX2VTdGFuZGFyZEVycm9yOworc3RhdGljIFZBTFVFICgqZGxsX3JiX2V2YWxfc3RyaW5nX3Byb3RlY3QpIChjb25zdCBjaGFyKiwgaW50Kik7CitzdGF0aWMgdm9pZCAoKmRsbF9yYl9nbG9iYWxfdmFyaWFibGUpIChWQUxVRSopOworc3RhdGljIFZBTFVFICgqZGxsX3JiX2hhc2hfYXNldCkgKFZBTFVFLCBWQUxVRSwgVkFMVUUpOworc3RhdGljIFZBTFVFICgqZGxsX3JiX2hhc2hfbmV3KSAodm9pZCk7CitzdGF0aWMgVkFMVUUgKCpkbGxfcmJfaW5zcGVjdCkgKFZBTFVFKTsKK3N0YXRpYyBWQUxVRSAoKmRsbF9yYl9pbnQyaW51bSkgKGxvbmcpOworc3RhdGljIFZBTFVFICgqZGxsX3JiX2ludDJpbnVtKSAobG9uZyk7CitzdGF0aWMgVkFMVUUgKCpkbGxfcmJfbGFzdGxpbmVfZ2V0KSAodm9pZCk7CitzdGF0aWMgdm9pZCAoKmRsbF9yYl9sYXN0bGluZV9zZXQpIChWQUxVRSk7CitzdGF0aWMgdm9pZCAoKmRsbF9yYl9sb2FkX3Byb3RlY3QpIChWQUxVRSwgaW50LCBpbnQqKTsKK3N0YXRpYyBsb25nICgqZGxsX3JiX251bTJsb25nKSAoVkFMVUUpOworc3RhdGljIHVuc2lnbmVkIGxvbmcgKCpkbGxfcmJfbnVtMnVsb25nKSAoVkFMVUUpOworc3RhdGljIFZBTFVFICgqZGxsX3JiX29ial9hbGxvYykgKFZBTFVFKTsKK3N0YXRpYyBWQUxVRSAoKmRsbF9yYl9vYmpfYXNfc3RyaW5nKSAoVkFMVUUpOworc3RhdGljIFZBTFVFICgqZGxsX3JiX29ial9pZCkgKFZBTFVFKTsKK3N0YXRpYyB2b2lkICgqZGxsX3JiX3JhaXNlKSAoVkFMVUUsIGNvbnN0IGNoYXIqLCAuLi4pOworc3RhdGljIGNoYXIgKigqZGxsX3JiX3N0cjJjc3RyKSAoVkFMVUUsaW50Kik7CitzdGF0aWMgVkFMVUUgKCpkbGxfcmJfc3RyX2NhdCkgKFZBTFVFLCBjb25zdCBjaGFyKiwgbG9uZyk7CitzdGF0aWMgVkFMVUUgKCpkbGxfcmJfc3RyX2NvbmNhdCkgKFZBTFVFLCBWQUxVRSk7CitzdGF0aWMgVkFMVUUgKCpkbGxfcmJfc3RyX25ldykgKGNvbnN0IGNoYXIqLCBsb25nKTsKK3N0YXRpYyBWQUxVRSAoKmRsbF9yYl9zdHJfbmV3MikgKGNvbnN0IGNoYXIqKTsKK3N0YXRpYyBWQUxVRSAqZGxsX3J1YnlfZXJyaW5mbzsKK3N0YXRpYyB2b2lkICgqZGxsX3J1YnlfaW5pdCkgKHZvaWQpOworc3RhdGljIHZvaWQgKCpkbGxfcnVieV9pbml0X2xvYWRwYXRoKSAodm9pZCk7CisjaWYgZGVmaW5lZChEWU5BTUlDX1JVQllfVkVSKSAmJiBEWU5BTUlDX1JVQllfVkVSID49IDE4CitzdGF0aWMgaW50ICgqZGxsX3JiX3czMl9zbnByaW50ZikoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIC4uLik7CisjZW5kaWYKKworc3RhdGljIEhJTlNUQU5DRSBoaW5zdFJ1YnkgPSAwOyAvKiBJbnN0YW5jZSBvZiBydWJ5LmRsbCAqLworCisvKgorICogVGFibGUgb2YgbmFtZSB0byBmdW5jdGlvbiBwb2ludGVyIG9mIHB5dGhvbi4KKyAqLworI2RlZmluZSBSVUJZX1BST0MgRkFSUFJPQworc3RhdGljIHN0cnVjdAoreworICAgIGNoYXIgKm5hbWU7CisgICAgUlVCWV9QUk9DICpwdHI7Cit9IHJ1YnlfZnVuY25hbWVfdGFibGVbXSA9Cit7CisgICAgeyJyYl9hc3NvY19uZXciLCAoUlVCWV9QUk9DKikmZGxsX3JiX2Fzc29jX25ld30sCisgICAgeyJyYl9jRmFsc2VDbGFzcyIsIChSVUJZX1BST0MqKSZkbGxfcmJfY0ZhbHNlQ2xhc3N9LAorICAgIHsicmJfY0ZpeG51bSIsIChSVUJZX1BST0MqKSZkbGxfcmJfY0ZpeG51bX0sCisgICAgeyJyYl9jTmlsQ2xhc3MiLCAoUlVCWV9QUk9DKikmZGxsX3JiX2NOaWxDbGFzc30sCisgICAgeyJyYl9jT2JqZWN0IiwgKFJVQllfUFJPQyopJmRsbF9yYl9jT2JqZWN0fSwKKyAgICB7InJiX2NTeW1ib2wiLCAoUlVCWV9QUk9DKikmZGxsX3JiX2NTeW1ib2x9LAorICAgIHsicmJfY1RydWVDbGFzcyIsIChSVUJZX1BST0MqKSZkbGxfcmJfY1RydWVDbGFzc30sCisgICAgeyJyYl9jaGVja190eXBlIiwgKFJVQllfUFJPQyopJmRsbF9yYl9jaGVja190eXBlfSwKKyAgICB7InJiX2NsYXNzX3BhdGgiLCAoUlVCWV9QUk9DKikmZGxsX3JiX2NsYXNzX3BhdGh9LAorICAgIHsicmJfZGF0YV9vYmplY3RfYWxsb2MiLCAoUlVCWV9QUk9DKikmZGxsX3JiX2RhdGFfb2JqZWN0X2FsbG9jfSwKKyAgICB7InJiX2RlZmluZV9jbGFzc191bmRlciIsIChSVUJZX1BST0MqKSZkbGxfcmJfZGVmaW5lX2NsYXNzX3VuZGVyfSwKKyAgICB7InJiX2RlZmluZV9jb25zdCIsIChSVUJZX1BST0MqKSZkbGxfcmJfZGVmaW5lX2NvbnN0fSwKKyAgICB7InJiX2RlZmluZV9nbG9iYWxfZnVuY3Rpb24iLCAoUlVCWV9QUk9DKikmZGxsX3JiX2RlZmluZV9nbG9iYWxfZnVuY3Rpb259LAorICAgIHsicmJfZGVmaW5lX21ldGhvZCIsIChSVUJZX1BST0MqKSZkbGxfcmJfZGVmaW5lX21ldGhvZH0sCisgICAgeyJyYl9kZWZpbmVfbW9kdWxlIiwgKFJVQllfUFJPQyopJmRsbF9yYl9kZWZpbmVfbW9kdWxlfSwKKyAgICB7InJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24iLCAoUlVCWV9QUk9DKikmZGxsX3JiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb259LAorICAgIHsicmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QiLCAoUlVCWV9QUk9DKikmZGxsX3JiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kfSwKKyAgICB7InJiX2RlZmluZV92aXJ0dWFsX3ZhcmlhYmxlIiwgKFJVQllfUFJPQyopJmRsbF9yYl9kZWZpbmVfdmlydHVhbF92YXJpYWJsZX0sCisgICAgeyJyYl9zdGRvdXQiLCAoUlVCWV9QUk9DKikmZGxsX3JiX3N0ZG91dH0sCisgICAgeyJyYl9lQXJnRXJyb3IiLCAoUlVCWV9QUk9DKikmZGxsX3JiX2VBcmdFcnJvcn0sCisgICAgeyJyYl9lSW5kZXhFcnJvciIsIChSVUJZX1BST0MqKSZkbGxfcmJfZUluZGV4RXJyb3J9LAorICAgIHsicmJfZVJ1bnRpbWVFcnJvciIsIChSVUJZX1BST0MqKSZkbGxfcmJfZVJ1bnRpbWVFcnJvcn0sCisgICAgeyJyYl9lU3RhbmRhcmRFcnJvciIsIChSVUJZX1BST0MqKSZkbGxfcmJfZVN0YW5kYXJkRXJyb3J9LAorICAgIHsicmJfZXZhbF9zdHJpbmdfcHJvdGVjdCIsIChSVUJZX1BST0MqKSZkbGxfcmJfZXZhbF9zdHJpbmdfcHJvdGVjdH0sCisgICAgeyJyYl9nbG9iYWxfdmFyaWFibGUiLCAoUlVCWV9QUk9DKikmZGxsX3JiX2dsb2JhbF92YXJpYWJsZX0sCisgICAgeyJyYl9oYXNoX2FzZXQiLCAoUlVCWV9QUk9DKikmZGxsX3JiX2hhc2hfYXNldH0sCisgICAgeyJyYl9oYXNoX25ldyIsIChSVUJZX1BST0MqKSZkbGxfcmJfaGFzaF9uZXd9LAorICAgIHsicmJfaW5zcGVjdCIsIChSVUJZX1BST0MqKSZkbGxfcmJfaW5zcGVjdH0sCisgICAgeyJyYl9pbnQyaW51bSIsIChSVUJZX1BST0MqKSZkbGxfcmJfaW50MmludW19LAorICAgIHsicmJfbGFzdGxpbmVfZ2V0IiwgKFJVQllfUFJPQyopJmRsbF9yYl9sYXN0bGluZV9nZXR9LAorICAgIHsicmJfbGFzdGxpbmVfc2V0IiwgKFJVQllfUFJPQyopJmRsbF9yYl9sYXN0bGluZV9zZXR9LAorICAgIHsicmJfbG9hZF9wcm90ZWN0IiwgKFJVQllfUFJPQyopJmRsbF9yYl9sb2FkX3Byb3RlY3R9LAorICAgIHsicmJfbnVtMmxvbmciLCAoUlVCWV9QUk9DKikmZGxsX3JiX251bTJsb25nfSwKKyAgICB7InJiX251bTJ1bG9uZyIsIChSVUJZX1BST0MqKSZkbGxfcmJfbnVtMnVsb25nfSwKKyAgICB7InJiX29ial9hbGxvYyIsIChSVUJZX1BST0MqKSZkbGxfcmJfb2JqX2FsbG9jfSwKKyAgICB7InJiX29ial9hc19zdHJpbmciLCAoUlVCWV9QUk9DKikmZGxsX3JiX29ial9hc19zdHJpbmd9LAorICAgIHsicmJfb2JqX2lkIiwgKFJVQllfUFJPQyopJmRsbF9yYl9vYmpfaWR9LAorICAgIHsicmJfcmFpc2UiLCAoUlVCWV9QUk9DKikmZGxsX3JiX3JhaXNlfSwKKyAgICB7InJiX3N0cjJjc3RyIiwgKFJVQllfUFJPQyopJmRsbF9yYl9zdHIyY3N0cn0sCisgICAgeyJyYl9zdHJfY2F0IiwgKFJVQllfUFJPQyopJmRsbF9yYl9zdHJfY2F0fSwKKyAgICB7InJiX3N0cl9jb25jYXQiLCAoUlVCWV9QUk9DKikmZGxsX3JiX3N0cl9jb25jYXR9LAorICAgIHsicmJfc3RyX25ldyIsIChSVUJZX1BST0MqKSZkbGxfcmJfc3RyX25ld30sCisgICAgeyJyYl9zdHJfbmV3MiIsIChSVUJZX1BST0MqKSZkbGxfcmJfc3RyX25ldzJ9LAorICAgIHsicnVieV9lcnJpbmZvIiwgKFJVQllfUFJPQyopJmRsbF9ydWJ5X2VycmluZm99LAorICAgIHsicnVieV9pbml0IiwgKFJVQllfUFJPQyopJmRsbF9ydWJ5X2luaXR9LAorICAgIHsicnVieV9pbml0X2xvYWRwYXRoIiwgKFJVQllfUFJPQyopJmRsbF9ydWJ5X2luaXRfbG9hZHBhdGh9LAorI2lmIGRlZmluZWQoRFlOQU1JQ19SVUJZX1ZFUikgJiYgRFlOQU1JQ19SVUJZX1ZFUiA+PSAxOAorICAgIHsicmJfdzMyX3NucHJpbnRmIiwgKFJVQllfUFJPQyopJmRsbF9yYl93MzJfc25wcmludGZ9LAorI2VuZGlmCisgICAgeyIiLCBOVUxMfSwKK307CisKKy8qCisgKiBGcmVlIHJ1YnkuZGxsCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZW5kX2R5bmFtaWNfcnVieSgpCit7CisgICAgaWYgKGhpbnN0UnVieSkKKyAgICB7CisJRnJlZUxpYnJhcnkoaGluc3RSdWJ5KTsKKwloaW5zdFJ1YnkgPSAwOworICAgIH0KK30KKworLyoKKyAqIExvYWQgbGlicmFyeSBhbmQgZ2V0IGFsbCBwb2ludGVycy4KKyAqIFBhcmFtZXRlciAnbGlibmFtZScgcHJvdmlkZXMgbmFtZSBvZiBETEwuCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3J1YnlfcnVudGltZV9saW5rX2luaXQoY2hhciAqbGlibmFtZSwgaW50IHZlcmJvc2UpCit7CisgICAgaW50IGk7CisKKyAgICBpZiAoaGluc3RSdWJ5KQorCXJldHVybiBPSzsKKyAgICBoaW5zdFJ1YnkgPSBMb2FkTGlicmFyeShsaWJuYW1lKTsKKyAgICBpZiAoIWhpbnN0UnVieSkKKyAgICB7CisJaWYgKHZlcmJvc2UpCisJICAgIEVNU0cyKF8oZV9sb2FkbGliKSwgbGlibmFtZSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgcnVieV9mdW5jbmFtZV90YWJsZVtpXS5wdHI7ICsraSkKKyAgICB7CisJaWYgKCEoKnJ1YnlfZnVuY25hbWVfdGFibGVbaV0ucHRyID0gR2V0UHJvY0FkZHJlc3MoaGluc3RSdWJ5LAorCQkJcnVieV9mdW5jbmFtZV90YWJsZVtpXS5uYW1lKSkpCisJeworCSAgICBGcmVlTGlicmFyeShoaW5zdFJ1YnkpOworCSAgICBoaW5zdFJ1YnkgPSAwOworCSAgICBpZiAodmVyYm9zZSkKKwkJRU1TRzIoXyhlX2xvYWRmdW5jKSwgcnVieV9mdW5jbmFtZV90YWJsZVtpXS5uYW1lKTsKKwkgICAgcmV0dXJuIEZBSUw7CisJfQorICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBJZiBydWJ5IGlzIGVuYWJsZWQgKHRoZXJlIGlzIGluc3RhbGxlZCBydWJ5IG9uIFdpbmRvd3Mgc3lzdGVtKSByZXR1cm4gVFJVRSwKKyAqIGVsc2UgRkFMU0UuCisgKi8KKyAgICBpbnQKK3J1YnlfZW5hYmxlZCh2ZXJib3NlKQorICAgIGludAkJdmVyYm9zZTsKK3sKKyAgICByZXR1cm4gcnVieV9ydW50aW1lX2xpbmtfaW5pdChEWU5BTUlDX1JVQllfRExMLCB2ZXJib3NlKSA9PSBPSzsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKERZTkFNSUNfUlVCWSkgfHwgZGVmaW5lZChQUk9UTykgKi8KKworICAgIHZvaWQKK3J1YnlfZW5kKCkKK3sKKyNpZmRlZiBEWU5BTUlDX1JVQlkKKyAgICBlbmRfZHluYW1pY19ydWJ5KCk7CisjZW5kaWYKK30KKwordm9pZCBleF9ydWJ5KGV4YXJnX1QgKmVhcCkKK3sKKyAgICBpbnQgc3RhdGU7CisgICAgY2hhciAqc2NyaXB0ID0gTlVMTDsKKworICAgIHNjcmlwdCA9IHNjcmlwdF9nZXQoZWFwLCBlYXAtPmFyZyk7CisgICAgaWYgKCFlYXAtPnNraXAgJiYgZW5zdXJlX3J1YnlfaW5pdGlhbGl6ZWQoKSkKKyAgICB7CisJaWYgKHNjcmlwdCA9PSBOVUxMKQorCSAgICByYl9ldmFsX3N0cmluZ19wcm90ZWN0KChjaGFyICopZWFwLT5hcmcsICZzdGF0ZSk7CisJZWxzZQorCSAgICByYl9ldmFsX3N0cmluZ19wcm90ZWN0KHNjcmlwdCwgJnN0YXRlKTsKKwlpZiAoc3RhdGUpCisJICAgIGVycm9yX3ByaW50KHN0YXRlKTsKKyAgICB9CisgICAgdmltX2ZyZWUoc2NyaXB0KTsKK30KKwordm9pZCBleF9ydWJ5ZG8oZXhhcmdfVCAqZWFwKQoreworICAgIGludCBzdGF0ZTsKKyAgICBsaW5lbnJfVCBpOworCisgICAgaWYgKGVuc3VyZV9ydWJ5X2luaXRpYWxpemVkKCkpCisgICAgeworCWlmICh1X3NhdmUoZWFwLT5saW5lMSAtIDEsIGVhcC0+bGluZTIgKyAxKSAhPSBPSykKKwkgICAgcmV0dXJuOworCWZvciAoaSA9IGVhcC0+bGluZTE7IGkgPD0gZWFwLT5saW5lMjsgaSsrKSB7CisJICAgIFZBTFVFIGxpbmUsIG9sZGxpbmU7CisKKwkgICAgbGluZSA9IG9sZGxpbmUgPSByYl9zdHJfbmV3MihtbF9nZXQoaSkpOworCSAgICByYl9sYXN0bGluZV9zZXQobGluZSk7CisJICAgIHJiX2V2YWxfc3RyaW5nX3Byb3RlY3QoKGNoYXIgKikgZWFwLT5hcmcsICZzdGF0ZSk7CisJICAgIGlmIChzdGF0ZSkgeworCQllcnJvcl9wcmludChzdGF0ZSk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGxpbmUgPSByYl9sYXN0bGluZV9nZXQoKTsKKwkgICAgaWYgKCFOSUxfUChsaW5lKSkgeworCQlpZiAoVFlQRShsaW5lKSAhPSBUX1NUUklORykgeworCQkgICAgRU1TRygiRTI2NTogJF8gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTdHJpbmciKTsKKwkJICAgIHJldHVybjsKKwkJfQorCQltbF9yZXBsYWNlKGksIChjaGFyX3UgKikgU1RSMkNTVFIobGluZSksIDEpOworCQljaGFuZ2VkKCk7CisjaWZkZWYgU1lOVEFYX0hMCisJCXN5bl9jaGFuZ2VkKGkpOyAvKiByZWNvbXB1dGUgc3ludGF4IGhsLiBmb3IgdGhpcyBsaW5lICovCisjZW5kaWYKKwkgICAgfQorCX0KKwljaGVja19jdXJzb3IoKTsKKwl1cGRhdGVfY3VyYnVmKE5PVF9WQUxJRCk7CisgICAgfQorfQorCit2b2lkIGV4X3J1YnlmaWxlKGV4YXJnX1QgKmVhcCkKK3sKKyAgICBpbnQgc3RhdGU7CisKKyAgICBpZiAoZW5zdXJlX3J1YnlfaW5pdGlhbGl6ZWQoKSkKKyAgICB7CisJcmJfbG9hZF9wcm90ZWN0KHJiX3N0cl9uZXcyKChjaGFyICopIGVhcC0+YXJnKSwgMCwgJnN0YXRlKTsKKwlpZiAoc3RhdGUpIGVycm9yX3ByaW50KHN0YXRlKTsKKyAgICB9Cit9CisKK3ZvaWQgcnVieV9idWZmZXJfZnJlZShidWZfVCAqYnVmKQoreworICAgIGlmIChidWYtPnJ1YnlfcmVmKSB7CisJcmJfaGFzaF9hc2V0KG9ianRibCwgcmJfb2JqX2lkKChWQUxVRSkgYnVmLT5ydWJ5X3JlZiksIFFuaWwpOworCVJEQVRBKGJ1Zi0+cnVieV9yZWYpLT5kYXRhID0gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgcnVieV93aW5kb3dfZnJlZSh3aW5fVCAqd2luKQoreworICAgIGlmICh3aW4tPnJ1YnlfcmVmKSB7CisJcmJfaGFzaF9hc2V0KG9ianRibCwgcmJfb2JqX2lkKChWQUxVRSkgd2luLT5ydWJ5X3JlZiksIFFuaWwpOworCVJEQVRBKHdpbi0+cnVieV9yZWYpLT5kYXRhID0gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgZW5zdXJlX3J1YnlfaW5pdGlhbGl6ZWQodm9pZCkKK3sKKyAgICBpZiAoIXJ1YnlfaW5pdGlhbGl6ZWQpCisgICAgeworI2lmZGVmIERZTkFNSUNfUlVCWQorCWlmIChydWJ5X2VuYWJsZWQoVFJVRSkpCisJeworI2VuZGlmCisJICAgIHJ1YnlfaW5pdCgpOworCSAgICBydWJ5X2luaXRfbG9hZHBhdGgoKTsKKwkgICAgcnVieV9pb19pbml0KCk7CisJICAgIHJ1YnlfdmltX2luaXQoKTsKKwkgICAgcnVieV9pbml0aWFsaXplZCA9IDE7CisjaWZkZWYgRFlOQU1JQ19SVUJZCisJfQorCWVsc2UKKwl7CisJICAgIEVNU0coXygiRTI2NjogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFJ1YnkgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpKTsKKwkgICAgcmV0dXJuIDA7CisJfQorI2VuZGlmCisgICAgfQorICAgIHJldHVybiBydWJ5X2luaXRpYWxpemVkOworfQorCitzdGF0aWMgdm9pZCBlcnJvcl9wcmludChpbnQgc3RhdGUpCit7CisjaWZuZGVmIERZTkFNSUNfUlVCWQorICAgIFJVQllFWFRFUk4gVkFMVUUgcnVieV9lcnJpbmZvOworI2VuZGlmCisgICAgVkFMVUUgZWNsYXNzOworICAgIFZBTFVFIGVpbmZvOworICAgIGNoYXIgYnVmZltCVUZTSVpdOworCisjZGVmaW5lIFRBR19SRVRVUk4JMHgxCisjZGVmaW5lIFRBR19CUkVBSwkweDIKKyNkZWZpbmUgVEFHX05FWFQJMHgzCisjZGVmaW5lIFRBR19SRVRSWQkweDQKKyNkZWZpbmUgVEFHX1JFRE8JMHg1CisjZGVmaW5lIFRBR19SQUlTRQkweDYKKyNkZWZpbmUgVEFHX1RIUk9XCTB4NworI2RlZmluZSBUQUdfRkFUQUwJMHg4CisjZGVmaW5lIFRBR19NQVNLCTB4ZgorCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgVEFHX1JFVFVSTjoKKwlFTVNHKCJFMjY3OiB1bmV4cGVjdGVkIHJldHVybiIpOworCWJyZWFrOworICAgIGNhc2UgVEFHX05FWFQ6CisJRU1TRygiRTI2ODogdW5leHBlY3RlZCBuZXh0Iik7CisJYnJlYWs7CisgICAgY2FzZSBUQUdfQlJFQUs6CisJRU1TRygiRTI2OTogdW5leHBlY3RlZCBicmVhayIpOworCWJyZWFrOworICAgIGNhc2UgVEFHX1JFRE86CisJRU1TRygiRTI3MDogdW5leHBlY3RlZCByZWRvIik7CisJYnJlYWs7CisgICAgY2FzZSBUQUdfUkVUUlk6CisJRU1TRygiRTI3MTogcmV0cnkgb3V0c2lkZSBvZiByZXNjdWUgY2xhdXNlIik7CisJYnJlYWs7CisgICAgY2FzZSBUQUdfUkFJU0U6CisgICAgY2FzZSBUQUdfRkFUQUw6CisJZWNsYXNzID0gQ0xBU1NfT0YocnVieV9lcnJpbmZvKTsKKwllaW5mbyA9IHJiX29ial9hc19zdHJpbmcocnVieV9lcnJpbmZvKTsKKwlpZiAoZWNsYXNzID09IHJiX2VSdW50aW1lRXJyb3IgJiYgUlNUUklORyhlaW5mbyktPmxlbiA9PSAwKSB7CisJICAgIEVNU0coIkUyNzI6IHVuaGFuZGxlZCBleGNlcHRpb24iKTsKKwl9CisJZWxzZSB7CisJICAgIFZBTFVFIGVwYXRoOworCSAgICBjaGFyICpwOworCisJICAgIGVwYXRoID0gcmJfY2xhc3NfcGF0aChlY2xhc3MpOworCSAgICBzbnByaW50ZihidWZmLCBCVUZTSVosICIlczogJXMiLAorCQkgICAgIFJTVFJJTkcoZXBhdGgpLT5wdHIsIFJTVFJJTkcoZWluZm8pLT5wdHIpOworCSAgICBwID0gc3RyY2hyKGJ1ZmYsICdcbicpOworCSAgICBpZiAocCkgKnAgPSAnXDAnOworCSAgICBFTVNHKGJ1ZmYpOworCX0KKwlicmVhazsKKyAgICBkZWZhdWx0OgorCXNucHJpbnRmKGJ1ZmYsIEJVRlNJWiwgXygiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIpLCBzdGF0ZSk7CisJRU1TRyhidWZmKTsKKwlicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBWQUxVRSB2aW1fbWVzc2FnZShWQUxVRSBzZWxmLCBWQUxVRSBzdHIpCit7CisgICAgY2hhciAqYnVmZiwgKnA7CisKKyAgICBzdHIgPSByYl9vYmpfYXNfc3RyaW5nKHN0cik7CisgICAgYnVmZiA9IEFMTE9DQV9OKGNoYXIsIFJTVFJJTkcoc3RyKS0+bGVuKTsKKyAgICBzdHJjcHkoYnVmZiwgUlNUUklORyhzdHIpLT5wdHIpOworICAgIHAgPSBzdHJjaHIoYnVmZiwgJ1xuJyk7CisgICAgaWYgKHApICpwID0gJ1wwJzsKKyAgICBNU0coYnVmZik7CisgICAgcmV0dXJuIFFuaWw7Cit9CisKK3N0YXRpYyBWQUxVRSB2aW1fc2V0X29wdGlvbihWQUxVRSBzZWxmLCBWQUxVRSBzdHIpCit7CisgICAgZG9fc2V0KChjaGFyX3UgKilTVFIyQ1NUUihzdHIpLCAwKTsKKyAgICB1cGRhdGVfc2NyZWVuKE5PVF9WQUxJRCk7CisgICAgcmV0dXJuIFFuaWw7Cit9CisKK3N0YXRpYyBWQUxVRSB2aW1fY29tbWFuZChWQUxVRSBzZWxmLCBWQUxVRSBzdHIpCit7CisgICAgZG9fY21kbGluZV9jbWQoKGNoYXJfdSAqKVNUUjJDU1RSKHN0cikpOworICAgIHJldHVybiBRbmlsOworfQorCitzdGF0aWMgVkFMVUUgdmltX2V2YWx1YXRlKFZBTFVFIHNlbGYsIFZBTFVFIHN0cikKK3sKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBjaGFyX3UgKnZhbHVlID0gZXZhbF90b19zdHJpbmcoKGNoYXJfdSAqKVNUUjJDU1RSKHN0ciksIE5VTEwpOworCisgICAgaWYgKHZhbHVlKQorICAgIHsKKwlWQUxVRSB2YWwgPSByYl9zdHJfbmV3Mih2YWx1ZSk7CisJdmltX2ZyZWUodmFsdWUpOworCXJldHVybiB2YWw7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCXJldHVybiBRbmlsOworfQorCitzdGF0aWMgVkFMVUUgYnVmZmVyX25ldyhidWZfVCAqYnVmKQoreworICAgIGlmIChidWYtPnJ1YnlfcmVmKSB7CisJcmV0dXJuIChWQUxVRSkgYnVmLT5ydWJ5X3JlZjsKKyAgICB9CisgICAgZWxzZSB7CisJVkFMVUUgb2JqID0gRGF0YV9XcmFwX1N0cnVjdChjQnVmZmVyLCAwLCAwLCBidWYpOworCWJ1Zi0+cnVieV9yZWYgPSAodm9pZCAqKSBvYmo7CisJcmJfaGFzaF9hc2V0KG9ianRibCwgcmJfb2JqX2lkKG9iaiksIG9iaik7CisJcmV0dXJuIG9iajsKKyAgICB9Cit9CisKK3N0YXRpYyBidWZfVCAqZ2V0X2J1ZihWQUxVRSBvYmopCit7CisgICAgYnVmX1QgKmJ1ZjsKKworICAgIERhdGFfR2V0X1N0cnVjdChvYmosIGJ1Zl9ULCBidWYpOworICAgIGlmIChidWYgPT0gTlVMTCkKKwlyYl9yYWlzZShlRGVsZXRlZEJ1ZmZlckVycm9yLCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIpOworICAgIHJldHVybiBidWY7Cit9CisKK3N0YXRpYyBWQUxVRSBidWZmZXJfc19jdXJyZW50KCkKK3sKKyAgICByZXR1cm4gYnVmZmVyX25ldyhjdXJidWYpOworfQorCitzdGF0aWMgVkFMVUUgYnVmZmVyX3NfY291bnQoKQoreworICAgIGJ1Zl9UICpiOworICAgIGludCBuID0gMDsKKworICAgIGZvciAoYiA9IGZpcnN0YnVmOyBiOyBiID0gYi0+Yl9uZXh0KSBuKys7CisgICAgcmV0dXJuIElOVDJOVU0obik7Cit9CisKK3N0YXRpYyBWQUxVRSBidWZmZXJfc19hcmVmKFZBTFVFIHNlbGYsIFZBTFVFIG51bSkKK3sKKyAgICBidWZfVCAqYjsKKyAgICBpbnQgbiA9IE5VTTJJTlQobnVtKTsKKworICAgIGZvciAoYiA9IGZpcnN0YnVmOyBiOyBiID0gYi0+Yl9uZXh0LCAtLW4pIHsKKwlpZiAobiA9PSAwKQorCSAgICByZXR1cm4gYnVmZmVyX25ldyhiKTsKKyAgICB9CisgICAgcmV0dXJuIFFuaWw7Cit9CisKK3N0YXRpYyBWQUxVRSBidWZmZXJfbmFtZShWQUxVRSBzZWxmKQoreworICAgIGJ1Zl9UICpidWYgPSBnZXRfYnVmKHNlbGYpOworCisgICAgcmV0dXJuIGJ1Zi0+Yl9mZm5hbWUgPyByYl9zdHJfbmV3MihidWYtPmJfZmZuYW1lKSA6IFFuaWw7Cit9CisKK3N0YXRpYyBWQUxVRSBidWZmZXJfbnVtYmVyKFZBTFVFIHNlbGYpCit7CisgICAgYnVmX1QgKmJ1ZiA9IGdldF9idWYoc2VsZik7CisKKyAgICByZXR1cm4gSU5UMk5VTShidWYtPmJfZm51bSk7Cit9CisKK3N0YXRpYyBWQUxVRSBidWZmZXJfY291bnQoVkFMVUUgc2VsZikKK3sKKyAgICBidWZfVCAqYnVmID0gZ2V0X2J1ZihzZWxmKTsKKworICAgIHJldHVybiBJTlQyTlVNKGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KTsKK30KKworc3RhdGljIFZBTFVFIGJ1ZmZlcl9hcmVmKFZBTFVFIHNlbGYsIFZBTFVFIG51bSkKK3sKKyAgICBidWZfVCAqYnVmID0gZ2V0X2J1ZihzZWxmKTsKKyAgICBsb25nIG4gPSBOVU0yTE9ORyhudW0pOworCisgICAgaWYgKG4gPiAwICYmIG4gPD0gYnVmLT5iX21sLm1sX2xpbmVfY291bnQpIHsKKwljaGFyICpsaW5lID0gbWxfZ2V0X2J1ZihidWYsIG4sIEZBTFNFKTsKKwlyZXR1cm4gbGluZSA/IHJiX3N0cl9uZXcyKGxpbmUpIDogUW5pbDsKKyAgICB9CisgICAgZWxzZSB7CisJcmJfcmFpc2UocmJfZUluZGV4RXJyb3IsICJpbmRleCAlZCBvdXQgb2YgYnVmZmVyIiwgbik7CisJcmV0dXJuIFFuaWw7IC8qIEZvciBzdG9wIHdhcm5pbmcgKi8KKyAgICB9Cit9CisKK3N0YXRpYyBWQUxVRSBidWZmZXJfYXNldChWQUxVRSBzZWxmLCBWQUxVRSBudW0sIFZBTFVFIHN0cikKK3sKKyAgICBidWZfVCAqYnVmID0gZ2V0X2J1ZihzZWxmKTsKKyAgICBidWZfVCAqc2F2ZWJ1ZiA9IGN1cmJ1ZjsKKyAgICBjaGFyICpsaW5lID0gU1RSMkNTVFIoc3RyKTsKKyAgICBsb25nIG4gPSBOVU0yTE9ORyhudW0pOworCisgICAgaWYgKG4gPiAwICYmIG4gPD0gYnVmLT5iX21sLm1sX2xpbmVfY291bnQgJiYgbGluZSAhPSBOVUxMKSB7CisJY3VyYnVmID0gYnVmOworCWlmICh1X3NhdmVzdWIobikgPT0gT0spIHsKKwkgICAgbWxfcmVwbGFjZShuLCAoY2hhcl91ICopIGxpbmUsIFRSVUUpOworCSAgICBjaGFuZ2VkKCk7CisjaWZkZWYgU1lOVEFYX0hMCisJICAgIHN5bl9jaGFuZ2VkKG4pOyAvKiByZWNvbXB1dGUgc3ludGF4IGhsLiBmb3IgdGhpcyBsaW5lICovCisjZW5kaWYKKwl9CisJY3VyYnVmID0gc2F2ZWJ1ZjsKKwl1cGRhdGVfY3VyYnVmKE5PVF9WQUxJRCk7CisgICAgfQorICAgIGVsc2UgeworCXJiX3JhaXNlKHJiX2VJbmRleEVycm9yLCAiaW5kZXggJWQgb3V0IG9mIGJ1ZmZlciIsIG4pOworCXJldHVybiBRbmlsOyAvKiBGb3Igc3RvcCB3YXJuaW5nICovCisgICAgfQorICAgIHJldHVybiBzdHI7Cit9CisKK3N0YXRpYyBWQUxVRSBidWZmZXJfZGVsZXRlKFZBTFVFIHNlbGYsIFZBTFVFIG51bSkKK3sKKyAgICBidWZfVCAqYnVmID0gZ2V0X2J1ZihzZWxmKTsKKyAgICBidWZfVCAqc2F2ZWJ1ZiA9IGN1cmJ1ZjsKKyAgICBsb25nIG4gPSBOVU0yTE9ORyhudW0pOworCisgICAgaWYgKG4gPiAwICYmIG4gPD0gYnVmLT5iX21sLm1sX2xpbmVfY291bnQpIHsKKwljdXJidWYgPSBidWY7CisJaWYgKHVfc2F2ZWRlbChuLCAxKSA9PSBPSykgeworCSAgICBtYXJrX2FkanVzdChuLCBuLCBNQVhMTlVNLCAtMSk7CisJICAgIG1sX2RlbGV0ZShuLCAwKTsKKwkgICAgY2hhbmdlZCgpOworCX0KKwljdXJidWYgPSBzYXZlYnVmOworCXVwZGF0ZV9jdXJidWYoTk9UX1ZBTElEKTsKKyAgICB9CisgICAgZWxzZSB7CisJcmJfcmFpc2UocmJfZUluZGV4RXJyb3IsICJpbmRleCAlZCBvdXQgb2YgYnVmZmVyIiwgbik7CisgICAgfQorICAgIHJldHVybiBRbmlsOworfQorCitzdGF0aWMgVkFMVUUgYnVmZmVyX2FwcGVuZChWQUxVRSBzZWxmLCBWQUxVRSBudW0sIFZBTFVFIHN0cikKK3sKKyAgICBidWZfVCAqYnVmID0gZ2V0X2J1ZihzZWxmKTsKKyAgICBidWZfVCAqc2F2ZWJ1ZiA9IGN1cmJ1ZjsKKyAgICBjaGFyICpsaW5lID0gU1RSMkNTVFIoc3RyKTsKKyAgICBsb25nIG4gPSBOVU0yTE9ORyhudW0pOworCisgICAgaWYgKG4gPj0gMCAmJiBuIDw9IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ICYmIGxpbmUgIT0gTlVMTCkgeworCWN1cmJ1ZiA9IGJ1ZjsKKwlpZiAodV9pbnNzdWIobiArIDEpID09IE9LKSB7CisJICAgIG1hcmtfYWRqdXN0KG4gKyAxLCBNQVhMTlVNLCAxTCwgMEwpOworCSAgICBtbF9hcHBlbmQobiwgKGNoYXJfdSAqKSBsaW5lLCAoY29sbnJfVCkgMCwgRkFMU0UpOworCSAgICBjaGFuZ2VkKCk7CisJfQorCWN1cmJ1ZiA9IHNhdmVidWY7CisJdXBkYXRlX2N1cmJ1ZihOT1RfVkFMSUQpOworICAgIH0KKyAgICBlbHNlIHsKKwlyYl9yYWlzZShyYl9lSW5kZXhFcnJvciwgImluZGV4ICVkIG91dCBvZiBidWZmZXIiLCBuKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cjsKK30KKworc3RhdGljIFZBTFVFIHdpbmRvd19uZXcod2luX1QgKndpbikKK3sKKyAgICBpZiAod2luLT5ydWJ5X3JlZikgeworCXJldHVybiAoVkFMVUUpIHdpbi0+cnVieV9yZWY7CisgICAgfQorICAgIGVsc2UgeworCVZBTFVFIG9iaiA9IERhdGFfV3JhcF9TdHJ1Y3QoY1ZpbVdpbmRvdywgMCwgMCwgd2luKTsKKwl3aW4tPnJ1YnlfcmVmID0gKHZvaWQgKikgb2JqOworCXJiX2hhc2hfYXNldChvYmp0YmwsIHJiX29ial9pZChvYmopLCBvYmopOworCXJldHVybiBvYmo7CisgICAgfQorfQorCitzdGF0aWMgd2luX1QgKmdldF93aW4oVkFMVUUgb2JqKQoreworICAgIHdpbl9UICp3aW47CisKKyAgICBEYXRhX0dldF9TdHJ1Y3Qob2JqLCB3aW5fVCwgd2luKTsKKyAgICBpZiAod2luID09IE5VTEwpCisJcmJfcmFpc2UoZURlbGV0ZWRXaW5kb3dFcnJvciwgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCB3aW5kb3ciKTsKKyAgICByZXR1cm4gd2luOworfQorCitzdGF0aWMgVkFMVUUgd2luZG93X3NfY3VycmVudCgpCit7CisgICAgcmV0dXJuIHdpbmRvd19uZXcoY3Vyd2luKTsKK30KKworc3RhdGljIFZBTFVFIHdpbmRvd19zX2NvdW50KCkKK3sKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICB3aW5fVAkqdzsKKyAgICBpbnQgbiA9IDA7CisKKyAgICBmb3IgKHcgPSBmaXJzdHdpbjsgdzsgdyA9IHctPndfbmV4dCkKKwluKys7CisgICAgcmV0dXJuIElOVDJOVU0obik7CisjZWxzZQorICAgIHJldHVybiBJTlQyTlVNKDEpOworI2VuZGlmCit9CisKK3N0YXRpYyBWQUxVRSB3aW5kb3dfc19hcmVmKFZBTFVFIHNlbGYsIFZBTFVFIG51bSkKK3sKKyAgICB3aW5fVCAqdzsKKyAgICBpbnQgbiA9IE5VTTJJTlQobnVtKTsKKworI2lmbmRlZiBGRUFUX1dJTkRPV1MKKyAgICB3ID0gY3Vyd2luOworI2Vsc2UKKyAgICBmb3IgKHcgPSBmaXJzdHdpbjsgdyAhPSBOVUxMOyB3ID0gdy0+d19uZXh0LCAtLW4pCisjZW5kaWYKKwlpZiAobiA9PSAwKQorCSAgICByZXR1cm4gd2luZG93X25ldyh3KTsKKyAgICByZXR1cm4gUW5pbDsKK30KKworc3RhdGljIFZBTFVFIHdpbmRvd19idWZmZXIoVkFMVUUgc2VsZikKK3sKKyAgICB3aW5fVCAqd2luID0gZ2V0X3dpbihzZWxmKTsKKworICAgIHJldHVybiBidWZmZXJfbmV3KHdpbi0+d19idWZmZXIpOworfQorCitzdGF0aWMgVkFMVUUgd2luZG93X2hlaWdodChWQUxVRSBzZWxmKQoreworICAgIHdpbl9UICp3aW4gPSBnZXRfd2luKHNlbGYpOworCisgICAgcmV0dXJuIElOVDJOVU0od2luLT53X2hlaWdodCk7Cit9CisKK3N0YXRpYyBWQUxVRSB3aW5kb3dfc2V0X2hlaWdodChWQUxVRSBzZWxmLCBWQUxVRSBoZWlnaHQpCit7CisgICAgd2luX1QgKndpbiA9IGdldF93aW4oc2VsZik7CisgICAgd2luX1QgKnNhdmV3aW4gPSBjdXJ3aW47CisKKyAgICBjdXJ3aW4gPSB3aW47CisgICAgd2luX3NldGhlaWdodChOVU0ySU5UKGhlaWdodCkpOworICAgIGN1cndpbiA9IHNhdmV3aW47CisgICAgcmV0dXJuIGhlaWdodDsKK30KKworc3RhdGljIFZBTFVFIHdpbmRvd19jdXJzb3IoVkFMVUUgc2VsZikKK3sKKyAgICB3aW5fVCAqd2luID0gZ2V0X3dpbihzZWxmKTsKKworICAgIHJldHVybiByYl9hc3NvY19uZXcoSU5UMk5VTSh3aW4tPndfY3Vyc29yLmxudW0pLCBJTlQyTlVNKHdpbi0+d19jdXJzb3IuY29sKSk7Cit9CisKK3N0YXRpYyBWQUxVRSB3aW5kb3dfc2V0X2N1cnNvcihWQUxVRSBzZWxmLCBWQUxVRSBwb3MpCit7CisgICAgVkFMVUUgbG51bSwgY29sOworICAgIHdpbl9UICp3aW4gPSBnZXRfd2luKHNlbGYpOworCisgICAgQ2hlY2tfVHlwZShwb3MsIFRfQVJSQVkpOworICAgIGlmIChSQVJSQVkocG9zKS0+bGVuICE9IDIpCisJcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiYXJyYXkgbGVuZ3RoIG11c3QgYmUgMiIpOworICAgIGxudW0gPSBSQVJSQVkocG9zKS0+cHRyWzBdOworICAgIGNvbCA9IFJBUlJBWShwb3MpLT5wdHJbMV07CisgICAgd2luLT53X2N1cnNvci5sbnVtID0gTlVNMkxPTkcobG51bSk7CisgICAgd2luLT53X2N1cnNvci5jb2wgPSBOVU0yVUlOVChjb2wpOworICAgIGNoZWNrX2N1cnNvcigpOwkJICAgIC8qIHB1dCBjdXJzb3Igb24gYW4gZXhpc3RpbmcgbGluZSAqLworICAgIHVwZGF0ZV9zY3JlZW4oTk9UX1ZBTElEKTsKKyAgICByZXR1cm4gUW5pbDsKK30KKworc3RhdGljIFZBTFVFIGZfcChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIHNlbGYpCit7CisgICAgaW50IGk7CisgICAgVkFMVUUgc3RyID0gcmJfc3RyX25ldygiIiwgMCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJaWYgKGkgPiAwKSByYl9zdHJfY2F0KHN0ciwgIiwgIiwgMik7CisJcmJfc3RyX2NvbmNhdChzdHIsIHJiX2luc3BlY3QoYXJndltpXSkpOworICAgIH0KKyAgICBNU0coUlNUUklORyhzdHIpLT5wdHIpOworICAgIHJldHVybiBRbmlsOworfQorCitzdGF0aWMgdm9pZCBydWJ5X2lvX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgRFlOQU1JQ19SVUJZCisgICAgUlVCWUVYVEVSTiBWQUxVRSByYl9zdGRvdXQ7CisjZW5kaWYKKworICAgIHJiX3N0ZG91dCA9IHJiX29ial9hbGxvYyhyYl9jT2JqZWN0KTsKKyAgICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChyYl9zdGRvdXQsICJ3cml0ZSIsIHZpbV9tZXNzYWdlLCAxKTsKKyAgICByYl9kZWZpbmVfZ2xvYmFsX2Z1bmN0aW9uKCJwIiwgZl9wLCAtMSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1YnlfdmltX2luaXQodm9pZCkKK3sKKyAgICBvYmp0YmwgPSByYl9oYXNoX25ldygpOworICAgIHJiX2dsb2JhbF92YXJpYWJsZSgmb2JqdGJsKTsKKworICAgIG1WSU0gPSByYl9kZWZpbmVfbW9kdWxlKCJWSU0iKTsKKyAgICByYl9kZWZpbmVfY29uc3QobVZJTSwgIlZFUlNJT05fTUFKT1IiLCBJTlQyTlVNKFZJTV9WRVJTSU9OX01BSk9SKSk7CisgICAgcmJfZGVmaW5lX2NvbnN0KG1WSU0sICJWRVJTSU9OX01JTk9SIiwgSU5UMk5VTShWSU1fVkVSU0lPTl9NSU5PUikpOworICAgIHJiX2RlZmluZV9jb25zdChtVklNLCAiVkVSU0lPTl9CVUlMRCIsIElOVDJOVU0oVklNX1ZFUlNJT05fQlVJTEQpKTsKKyAgICByYl9kZWZpbmVfY29uc3QobVZJTSwgIlZFUlNJT05fUEFUQ0hMRVZFTCIsIElOVDJOVU0oVklNX1ZFUlNJT05fUEFUQ0hMRVZFTCkpOworICAgIHJiX2RlZmluZV9jb25zdChtVklNLCAiVkVSU0lPTl9TSE9SVCIsIHJiX3N0cl9uZXcyKFZJTV9WRVJTSU9OX1NIT1JUKSk7CisgICAgcmJfZGVmaW5lX2NvbnN0KG1WSU0sICJWRVJTSU9OX01FRElVTSIsIHJiX3N0cl9uZXcyKFZJTV9WRVJTSU9OX01FRElVTSkpOworICAgIHJiX2RlZmluZV9jb25zdChtVklNLCAiVkVSU0lPTl9MT05HIiwgcmJfc3RyX25ldzIoVklNX1ZFUlNJT05fTE9ORykpOworICAgIHJiX2RlZmluZV9jb25zdChtVklNLCAiVkVSU0lPTl9MT05HX0RBVEUiLCByYl9zdHJfbmV3MihWSU1fVkVSU0lPTl9MT05HX0RBVEUpKTsKKyAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uKG1WSU0sICJtZXNzYWdlIiwgdmltX21lc3NhZ2UsIDEpOworICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24obVZJTSwgInNldF9vcHRpb24iLCB2aW1fc2V0X29wdGlvbiwgMSk7CisgICAgcmJfZGVmaW5lX21vZHVsZV9mdW5jdGlvbihtVklNLCAiY29tbWFuZCIsIHZpbV9jb21tYW5kLCAxKTsKKyAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uKG1WSU0sICJldmFsdWF0ZSIsIHZpbV9ldmFsdWF0ZSwgMSk7CisKKyAgICBlRGVsZXRlZEJ1ZmZlckVycm9yID0gcmJfZGVmaW5lX2NsYXNzX3VuZGVyKG1WSU0sICJEZWxldGVkQnVmZmVyRXJyb3IiLAorCQkJCQkJcmJfZVN0YW5kYXJkRXJyb3IpOworICAgIGVEZWxldGVkV2luZG93RXJyb3IgPSByYl9kZWZpbmVfY2xhc3NfdW5kZXIobVZJTSwgIkRlbGV0ZWRXaW5kb3dFcnJvciIsCisJCQkJCQlyYl9lU3RhbmRhcmRFcnJvcik7CisKKyAgICBjQnVmZmVyID0gcmJfZGVmaW5lX2NsYXNzX3VuZGVyKG1WSU0sICJCdWZmZXIiLCByYl9jT2JqZWN0KTsKKyAgICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjQnVmZmVyLCAiY3VycmVudCIsIGJ1ZmZlcl9zX2N1cnJlbnQsIDApOworICAgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNCdWZmZXIsICJjb3VudCIsIGJ1ZmZlcl9zX2NvdW50LCAwKTsKKyAgICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjQnVmZmVyLCAiW10iLCBidWZmZXJfc19hcmVmLCAxKTsKKyAgICByYl9kZWZpbmVfbWV0aG9kKGNCdWZmZXIsICJuYW1lIiwgYnVmZmVyX25hbWUsIDApOworICAgIHJiX2RlZmluZV9tZXRob2QoY0J1ZmZlciwgIm51bWJlciIsIGJ1ZmZlcl9udW1iZXIsIDApOworICAgIHJiX2RlZmluZV9tZXRob2QoY0J1ZmZlciwgImNvdW50IiwgYnVmZmVyX2NvdW50LCAwKTsKKyAgICByYl9kZWZpbmVfbWV0aG9kKGNCdWZmZXIsICJsZW5ndGgiLCBidWZmZXJfY291bnQsIDApOworICAgIHJiX2RlZmluZV9tZXRob2QoY0J1ZmZlciwgIltdIiwgYnVmZmVyX2FyZWYsIDEpOworICAgIHJiX2RlZmluZV9tZXRob2QoY0J1ZmZlciwgIltdPSIsIGJ1ZmZlcl9hc2V0LCAyKTsKKyAgICByYl9kZWZpbmVfbWV0aG9kKGNCdWZmZXIsICJkZWxldGUiLCBidWZmZXJfZGVsZXRlLCAxKTsKKyAgICByYl9kZWZpbmVfbWV0aG9kKGNCdWZmZXIsICJhcHBlbmQiLCBidWZmZXJfYXBwZW5kLCAyKTsKKworICAgIGNWaW1XaW5kb3cgPSByYl9kZWZpbmVfY2xhc3NfdW5kZXIobVZJTSwgIldpbmRvdyIsIHJiX2NPYmplY3QpOworICAgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNWaW1XaW5kb3csICJjdXJyZW50Iiwgd2luZG93X3NfY3VycmVudCwgMCk7CisgICAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY1ZpbVdpbmRvdywgImNvdW50Iiwgd2luZG93X3NfY291bnQsIDApOworICAgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNWaW1XaW5kb3csICJbXSIsIHdpbmRvd19zX2FyZWYsIDEpOworICAgIHJiX2RlZmluZV9tZXRob2QoY1ZpbVdpbmRvdywgImJ1ZmZlciIsIHdpbmRvd19idWZmZXIsIDApOworICAgIHJiX2RlZmluZV9tZXRob2QoY1ZpbVdpbmRvdywgImhlaWdodCIsIHdpbmRvd19oZWlnaHQsIDApOworICAgIHJiX2RlZmluZV9tZXRob2QoY1ZpbVdpbmRvdywgImhlaWdodD0iLCB3aW5kb3dfc2V0X2hlaWdodCwgMSk7CisgICAgcmJfZGVmaW5lX21ldGhvZChjVmltV2luZG93LCAiY3Vyc29yIiwgd2luZG93X2N1cnNvciwgMCk7CisgICAgcmJfZGVmaW5lX21ldGhvZChjVmltV2luZG93LCAiY3Vyc29yPSIsIHdpbmRvd19zZXRfY3Vyc29yLCAxKTsKKworICAgIHJiX2RlZmluZV92aXJ0dWFsX3ZhcmlhYmxlKCIkY3VyYnVmIiwgYnVmZmVyX3NfY3VycmVudCwgMCk7CisgICAgcmJfZGVmaW5lX3ZpcnR1YWxfdmFyaWFibGUoIiRjdXJ3aW4iLCB3aW5kb3dfc19jdXJyZW50LCAwKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pZl9zbmlmZi5jIGIvc3JjL2lmX3NuaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNiMGJlZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pZl9zbmlmZi5jCkBAIC0wLDAgKzEsMTIxMCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBpZl9zbmlmZi5jIEludGVyZmFjZSBiZXR3ZWVuIFZpbSBhbmQgU05pRkYrCisgKgorICogJElkJAorICoKKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmZGVmIFdJTjMyCisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPGZjbnRsLmg+CisjIGluY2x1ZGUgPGlvLmg+CisjIGluY2x1ZGUgPHByb2Nlc3MuaD4KKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2Vsc2UKKyMgaWZkZWYgRkVBVF9HVUlfWDExCisjICBpbmNsdWRlICJndWlfeDExLnBybyIKKyMgZW5kaWYKKyMgaW5jbHVkZSAib3NfdW5peHguaCIKKyNlbmRpZgorCitzdGF0aWMgaW50IHNuaWZmZW1hY3NfcGlkOworCitpbnQgZmRfZnJvbV9zbmlmZjsKK2ludCBzbmlmZl9jb25uZWN0ZWQgPSAwOworaW50IHNuaWZmX3JlcXVlc3Rfd2FpdGluZyA9IDA7CitpbnQgd2FudF9zbmlmZl9yZXF1ZXN0ID0gMDsKKworI2RlZmluZSBNQVhfUkVRVUVTVF9MRU4gNTEyCisKKyNkZWZpbmUgTkVFRF9TWU1CT0wJMgorI2RlZmluZSBFTVBUWV9TWU1CT0wJNAorI2RlZmluZSBORUVEX0ZJTEUJOAorI2RlZmluZSBTSUxFTlQJCTE2CisjZGVmaW5lIERJU0NPTk5FQ1QJMzIKKyNkZWZpbmUgQ09OTkVDVAkJNjQKKworI2RlZmluZSBSUV9OT05FCQkwCisjZGVmaW5lIFJRX1NJTVBMRQkxCisjZGVmaW5lIFJRX0NPTlRFWFQJTkVFRF9GSUxFICsgTkVFRF9TWU1CT0wKKyNkZWZpbmUgUlFfU0NPTlRFWFQJTkVFRF9GSUxFICsgTkVFRF9TWU1CT0wgKyBFTVBUWV9TWU1CT0wKKyNkZWZpbmUgUlFfTk9TWU1CT0wJTkVFRF9GSUxFCisjZGVmaW5lIFJRX1NJTEVOVAlSUV9OT1NZTUJPTCArIFNJTEVOVAorI2RlZmluZSBSUV9DT05ORUNUCVJRX05PTkUgKyBDT05ORUNUCisjZGVmaW5lIFJRX0RJU0NPTk5FQ1QJUlFfU0lNUExFICsgRElTQ09OTkVDVAorCitzdHJ1Y3Qgc25fY21kCit7CisgICAgY2hhciAqY21kX25hbWU7CisgICAgY2hhciBjbWRfY29kZTsKKyAgICBjaGFyICpjbWRfbXNnOworICAgIGludCAgY21kX3R5cGU7Cit9OworCitzdHJ1Y3Qgc25fY21kX2xpc3QKK3sKKyAgICBzdHJ1Y3Qgc25fY21kKiBzbmlmZl9jbWQ7CisgICAgc3RydWN0IHNuX2NtZF9saXN0KiBuZXh0X2NtZDsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25fY21kIHNuaWZmX2NtZHNbXSA9Cit7CisgICAgeyAidG9nZ2xlIiwJCSdlJywgTl8oIlRvZ2dsZSBpbXBsZW1lbnRhdGlvbi9kZWZpbml0aW9uIiksUlFfU0NPTlRFWFQgfSwKKyAgICB7ICJzdXBlcmNsYXNzIiwJJ3MnLCBOXygiU2hvdyBiYXNlIGNsYXNzIG9mIiksCQlSUV9DT05URVhUIH0sCisgICAgeyAib3ZlcnJpZGRlbiIsCSdtJywgTl8oIlNob3cgb3ZlcnJpZGRlbiBtZW1iZXIgZnVuY3Rpb24iKSxSUV9TQ09OVEVYVCB9LAorICAgIHsgInJldHJpZXZlLWZpbGUiLAkncicsIE5fKCJSZXRyaWV2ZSBmcm9tIGZpbGUiKSwJCVJRX0NPTlRFWFQgfSwKKyAgICB7ICJyZXRyaWV2ZS1wcm9qZWN0IiwncCcsIE5fKCJSZXRyaWV2ZSBmcm9tIHByb2plY3QiKSwJUlFfQ09OVEVYVCB9LAorICAgIHsgInJldHJpZXZlLWFsbC1wcm9qZWN0cyIsCisJCQknUCcsIE5fKCJSZXRyaWV2ZSBmcm9tIGFsbCBwcm9qZWN0cyIpLAlSUV9DT05URVhUIH0sCisgICAgeyAicmV0cmlldmUtbmV4dCIsCSdSJywgTl8oIlJldHJpZXZlIiksCVJRX0NPTlRFWFQgfSwKKyAgICB7ICJnb3RvLXN5bWJvbCIsCSdnJywgTl8oIlNob3cgc291cmNlIG9mIiksCQlSUV9DT05URVhUIH0sCisgICAgeyAiZmluZC1zeW1ib2wiLAknZicsIE5fKCJGaW5kIHN5bWJvbCIpLAkJCVJRX0NPTlRFWFQgfSwKKyAgICB7ICJicm93c2UtY2xhc3MiLAkndycsIE5fKCJCcm93c2UgY2xhc3MiKSwJCVJRX0NPTlRFWFQgfSwKKyAgICB7ICJoaWVyYXJjaHkiLAkndCcsIE5fKCJTaG93IGNsYXNzIGluIGhpZXJhcmNoeSIpLAlSUV9DT05URVhUIH0sCisgICAgeyAicmVzdHItaGllciIsCSdUJywgTl8oIlNob3cgY2xhc3MgaW4gcmVzdHJpY3RlZCBoaWVyYXJjaHkiKSxSUV9DT05URVhUIH0sCisgICAgeyAieHJlZi10byIsCSd4JywgTl8oIlhyZWYgcmVmZXJzIHRvIiksCQlSUV9DT05URVhUIH0sCisgICAgeyAieHJlZi1ieSIsCSdYJywgTl8oIlhyZWYgcmVmZXJyZWQgYnkiKSwJCVJRX0NPTlRFWFQgfSwKKyAgICB7ICJ4cmVmLWhhcyIsCSdjJywgTl8oIlhyZWYgaGFzIGEiKSwJCQlSUV9DT05URVhUIH0sCisgICAgeyAieHJlZi11c2VkLWJ5IiwJJ0MnLCBOXygiWHJlZiB1c2VkIGJ5IiksCQlSUV9DT05URVhUIH0sCisgICAgeyAic2hvdy1kb2N1IiwJJ2QnLCBOXygiU2hvdyBkb2N1IG9mIiksCQlSUV9DT05URVhUIH0sCisgICAgeyAiZ2VuLWRvY3UiLAknRCcsIE5fKCJHZW5lcmF0ZSBkb2N1IGZvciIpLAkJUlFfQ09OVEVYVCB9LAorICAgIHsgImNvbm5lY3QiLAkneScsIE5VTEwsCQkJCVJRX0NPTk5FQ1QgfSwKKyAgICB7ICJkaXNjb25uZWN0IiwJJ3EnLCBOVUxMLAkJCQlSUV9ESVNDT05ORUNUIH0sCisgICAgeyAiZm9udC1pbmZvIiwJJ3onLCBOVUxMLAkJCQlSUV9TSUxFTlQgfSwKKyAgICB7ICJ1cGRhdGUiLAkJJ3UnLCBOVUxMLAkJCQlSUV9TSUxFTlQgfSwKKyAgICB7IE5VTEwsCQknXDAnLCBOVUxMLCAwfQorfTsKKworCitzdGF0aWMgY2hhciAqU25pZmZFbWFjc1syXSA9IHsic25pZmZlbWFjcyIsIChjaGFyICopTlVMTH07ICAvKiBZZXMsIEVtYWNzISAqLworc3RhdGljIGludCBmZF90b19zbmlmZjsKK3N0YXRpYyBpbnQgc25pZmZfd2lsbF9kaXNjb25uZWN0ID0gMDsKK3N0YXRpYyBjaGFyIG1zZ19zbmlmZl9kaXNjb25uZWN0W10gPSBOXygiQ2Fubm90IGNvbm5lY3QgdG8gU05pRkYrLiBDaGVjayBlbnZpcm9ubWVudCAoc25pZmZlbWFjcyBtdXN0IGJlIGZvdW5kIGluICRQQVRIKS5cbiIpOworc3RhdGljIGNoYXIgc25pZmZfcnFfc2VwW10gPSAiICI7CitzdGF0aWMgc3RydWN0IHNuX2NtZF9saXN0ICpzbmlmZl9jbWRfZXh0ID0gTlVMTDsKKworLyogSW5pdGlhbGl6aW5nIHZpbSBjb21tYW5kcworICogZXhlY3V0ZWQgZWFjaCB0aW1lIHZpbSBjb25uZWN0cyB0byBTbmlmZgorICovCitzdGF0aWMgY2hhciAqaW5pdF9jbWRzW109IHsKKyAgICAiYXVncm91cCBzbmlmZiIsCisgICAgImF1dG9jbWQgQnVmV3JpdGVQb3N0ICogc25pZmYgdXBkYXRlIiwKKyAgICAiYXV0b2NtZCBCdWZSZWFkUG9zdCAqIHNuaWZmIGZvbnQtaW5mbyIsCisgICAgImF1dG9jbWQgVmltTGVhdmUgKiBzbmlmZiBkaXNjb25uZWN0IiwKKyAgICAiYXVncm91cCBFTkQiLAorCisgICAgImxldCBnOnNuaWZmX2Nvbm5lY3RlZCA9IDEiLAorCisgICAgImlmICEgZXhpc3RzKCdnOnNuaWZmX21hcHBpbmdzX3NvdXJjZWQnKXwiCisJImlmICEgZXhpc3RzKCdnOnNuaWZmX21hcHBpbmdzJyl8IgorCSAgICAiaWYgZXhpc3RzKCckU05JRkZfRElSNCcpfCIKKwkJImxldCBnOnNuaWZmX21hcHBpbmdzPSckU05JRkZfRElSNC9jb25maWcvaW50ZWdyYXRpb25zL3ZpbS9zbmlmZi52aW0nfCIKKwkgICAgImVsc2V8IgorCQkibGV0IGc6c25pZmZfbWFwcGluZ3M9JyRTTklGRl9ESVIvY29uZmlnL3NuaWZmLnZpbSd8IgorCSAgICAiZW5kaWZ8IgorCSJlbmRpZnwiCisJImxldCBnOnNuaWZmX21hcHBpbmdzPWV4cGFuZChnOnNuaWZmX21hcHBpbmdzKXwiCisJImlmIGZpbGVyZWFkYWJsZShnOnNuaWZmX21hcHBpbmdzKXwiCisJICAgICJleGVjdXRlICdzb3VyY2UnIGc6c25pZmZfbWFwcGluZ3N8IgorCSAgICAibGV0IGc6c25pZmZfbWFwcGluZ3Nfc291cmNlZD0xfCIKKwkiZW5kaWZ8IgorICAgICJlbmRpZiIsCisKKyAgICBOVUxMCit9OworCisvKi0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgQ29ubmVjdFRvU25pZmZFbWFjcyBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIHNuaWZmX2Nvbm5lY3QgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBIYW5kbGVTbmlmZlJlcXVlc3QgX19BUkdTKChjaGFyKiBidWZmZXIpKTsKK3N0YXRpYyBpbnQgZ2V0X3JlcXVlc3QgX19BUkdTKChpbnQgZmQsIGNoYXIgKmJ1ZiwgaW50IG1heGxlbikpOworc3RhdGljIHZvaWQgV3JpdGVUb1NuaWZmIF9fQVJHUygoY2hhciAqc3RyKSk7CitzdGF0aWMgdm9pZCBTZW5kUmVxdWVzdCBfX0FSR1MoKHN0cnVjdCBzbl9jbWQgKmNvbW1hbmQsIGNoYXIqIHN5bWJvbCkpOworc3RhdGljIHZvaWQgdmlfbXNnIF9fQVJHUygoY2hhciAqKSk7CitzdGF0aWMgdm9pZCB2aV9lcnJvcl9tc2cgX19BUkdTKChjaGFyICopKTsKK3N0YXRpYyBjaGFyICp2aV9zeW1ib2xfdW5kZXJfY3Vyc29yIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgdmlfb3Blbl9maWxlIF9fQVJHUygoY2hhciAqKSk7CitzdGF0aWMgY2hhciAqdmlfYnVmZmVyX25hbWUgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgYnVmX1QgKnZpX2ZpbmRfYnVmZmVyIF9fQVJHUygoY2hhciAqKSk7CitzdGF0aWMgdm9pZCB2aV9leGVjX2NtZCBfX0FSR1MoKGNoYXIgKikpOworc3RhdGljIHZvaWQgdmlfc2V0X2N1cnNvcl9wb3MgX19BUkdTKChsb25nIGNoYXJfbnIpKTsKK3N0YXRpYyBsb25nIHZpX2N1cnNvcl9wb3MgX19BUkdTKCh2b2lkKSk7CisKKy8qIGRlYnVnIHRyYWNlICovCisjaWYgMAorc3RhdGljIEZJTEUqIF90cmFjZWZpbGUgPSBOVUxMOworI2RlZmluZSBTTklGRl9UUkFDRV9PUEVOKGZpbGUpIGlmICghX3RyYWNlZmlsZSkgX3RyYWNlZmlsZSA9IGZvcGVuKGZpbGUsICJ3IikKKyNkZWZpbmUgU05JRkZfVFJBQ0UobXNnKSBmcHJpbnRmKF90cmFjZWZpbGUsIG1zZyk7IGZmbHVzaChfdHJhY2VmaWxlKTsKKyNkZWZpbmUgU05JRkZfVFJBQ0UxKG1zZywgYXJnKSBmcHJpbnRmKF90cmFjZWZpbGUsIG1zZyxhcmcpOyBmZmx1c2goX3RyYWNlZmlsZSk7CisjZGVmaW5lIFNOSUZGX1RSQUNFX0NMT1NFIGZjbG9zZShfdHJhY2VmaWxlKTsgX3RyYWNlZmlsZT1OVUxMOworI2Vsc2UKKyNkZWZpbmUgU05JRkZfVFJBQ0VfT1BFTihmaWxlKQorI2RlZmluZSBTTklGRl9UUkFDRShtc2cpCisjZGVmaW5lIFNOSUZGX1RSQUNFMShtc2csIGFyZykKKyNkZWZpbmUgU05JRkZfVFJBQ0VfQ0xPU0UKKyNlbmRpZgorCisvKi0tLS0tLS0tIFdpbmRvd3MgT25seSBEZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFdJTjMyCisKK3N0YXRpYyBpbnQgIHNuaWZmX3JlcXVlc3RfcHJvY2Vzc2VkPTE7CitzdGF0aWMgSEFORExFIHNuaWZmZW1hY3NfaGFuZGxlPU5VTEw7CitzdGF0aWMgSEFORExFIHJlYWR0aHJlYWRfaGFuZGxlPU5VTEw7CitzdGF0aWMgSEFORExFIGhhbmRsZV90b19zbmlmZj1OVUxMOworc3RhdGljIEhBTkRMRSBoYW5kbGVfZnJvbV9zbmlmZj1OVUxMOworCitzdHJ1Y3Qgc25pZmZCdWZOb2RlCit7CisgICAgc3RydWN0IHNuaWZmQnVmTm9kZSAqbmV4dDsKKyAgICBpbnQgICAgYnVmTGVuOworICAgIGNoYXIgICBidWZbTUFYX1JFUVVFU1RfTEVOXTsKK307CitzdGF0aWMgc3RydWN0IHNuaWZmQnVmTm9kZSAqc25pZmZCdWZTdGFydD1OVUxMOworc3RhdGljIHN0cnVjdCBzbmlmZkJ1Zk5vZGUgKnNuaWZmQnVmRW5kPU5VTEw7CitzdGF0aWMgSEFORExFIGhCdWZmZXJNdXRleD1OVUxMOworCisjIGlmZGVmIEZFQVRfR1VJX1czMgorICAgIGV4dGVybiBIV05EIHNfaHduZDsgICAgICAgLyogZ3ZpbSdzIFdpbmRvdyBoYW5kbGUgKi8KKyMgZW5kaWYKKy8qCisgKiBzb21lIGhlbHBlciBmdW5jdGlvbnMgZm9yIFdpbmRvd3MgcG9ydCBvbmx5CisgKi8KKworICAgIHN0YXRpYyBIQU5ETEUKK0V4ZWN1dGVEZXRhY2hlZFByb2dyYW0oY2hhciAqc3pCaW5hcnksIGNoYXIgKnN6Q21kTGluZSwKKyAgICBIQU5ETEUgaFN0ZElucHV0LCBIQU5ETEUgaFN0ZE91dHB1dCkKK3sKKyAgICBCT09MIGJSZXN1bHQ7CisgICAgRFdPUkQgbkVycm9yOworICAgIFBST0NFU1NfSU5GT1JNQVRJT04gYVByb2Nlc3NJbmZvcm1hdGlvbjsKKyAgICBQUk9DRVNTX0lORk9STUFUSU9OICpwUHJvY2Vzc0luZm9ybWF0aW9uPSAmYVByb2Nlc3NJbmZvcm1hdGlvbjsKKyAgICBTVEFSVFVQSU5GTyBhU3RhcnR1cEluZm87CisgICAgU1RBUlRVUElORk8gKnBTdGFydHVwSW5mbz0gJmFTdGFydHVwSW5mbzsKKyAgICBEV09SRCBkd0NyZWF0aW9uRmxhZ3M9IDA7CisgICAgY2hhciBzelBhdGhbNTEyXTsKKyAgICBISU5TVEFOQ0UgaFJlc3VsdDsKKworICAgIGhSZXN1bHQgPSBGaW5kRXhlY3V0YWJsZShzekJpbmFyeSwgIi4iLCBzelBhdGgpOworICAgIGlmICgoaW50KWhSZXN1bHQgPD0gMzIpCisgICAgeworCS8qIGNhbid0IGZpbmQgdGhlIGV4ZSBmaWxlICovCisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgWmVyb01lbW9yeShwU3RhcnR1cEluZm8sIHNpemVvZigqcFN0YXJ0dXBJbmZvKSk7CisgICAgcFN0YXJ0dXBJbmZvLT5kd0ZsYWdzPSBTVEFSVEZfVVNFU0hPV1dJTkRPV3xTVEFSVEZfVVNFU1RESEFORExFUzsKKyAgICBwU3RhcnR1cEluZm8tPmhTdGRJbnB1dCA9IGhTdGRJbnB1dDsKKyAgICBwU3RhcnR1cEluZm8tPmhTdGRPdXRwdXQgPSBoU3RkT3V0cHV0OworICAgIHBTdGFydHVwSW5mby0+d1Nob3dXaW5kb3c9IFNXX0hJREU7CisgICAgcFN0YXJ0dXBJbmZvLT5jYiA9IHNpemVvZihTVEFSVFVQSU5GTyk7CisKKyAgICBiUmVzdWx0PSBDcmVhdGVQcm9jZXNzKAorCXN6UGF0aCwKKwlzekNtZExpbmUsCisJTlVMTCwgICAgLyogc2VjdXJpdHkgYXR0ciBmb3IgcHJvY2VzcyAqLworCU5VTEwsICAgIC8qIHNlY3VyaXR5IGF0dHIgZm9yIHByaW1hcnkgdGhyZWFkICovCisJVFJVRSwgICAgLyogRE8gaW5oZXJpdCBzdGRpbiBhbmQgc3Rkb3V0ICovCisJZHdDcmVhdGlvbkZsYWdzLCAvKiBjcmVhdGlvbiBmbGFncyAqLworCU5VTEwsICAgIC8qIGVudmlyb25tZW50ICovCisJIi4iLCAgICAvKiBjdXJyZW50IGRpcmVjdG9yeSAqLworCXBTdGFydHVwSW5mbywgICAvKiBzdGFydHVwIGluZm86IE5VTEwgY3Jhc2hlcyAgKi8KKwlwUHJvY2Vzc0luZm9ybWF0aW9uIC8qIHByb2Nlc3MgaW5mb3JtYXRpb246IE5VTEwgY3Jhc2hlcyAqLworICAgICk7CisgICAgbkVycm9yPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBpZiAoYlJlc3VsdCkKKyAgICB7CisJQ2xvc2VIYW5kbGUocFByb2Nlc3NJbmZvcm1hdGlvbi0+aFRocmVhZCk7CisJQ2xvc2VIYW5kbGUoaFN0ZElucHV0KTsKKwlDbG9zZUhhbmRsZShoU3RkT3V0cHV0KTsKKwlyZXR1cm4ocFByb2Nlc3NJbmZvcm1hdGlvbi0+aFByb2Nlc3MpOworICAgIH0KKyAgICBlbHNlCisJcmV0dXJuKE5VTEwpOworfQorCisvKgorICogd3JpdGUgdG8gdGhlIGludGVybmFsIFRocmVhZCAvIFRocmVhZCBjb21tdW5pY2F0aW9ucyBidWZmZXIuCisgKiBSZXR1cm4gVFJVRSBpZiBzdWNjZXNzZnVsLCBGQUxTRSBlbHNlLgorICovCisgICAgc3RhdGljIEJPT0wKK3dyaXRlVG9CdWZmZXIoY2hhciAqbXNnLCBpbnQgbGVuKQoreworICAgIERXT1JEIGR3V2FpdFJlc3VsdDsgICAgIC8qIFJlcXVlc3Qgb3duZXJzaGlwIG9mIG11dGV4LiAqLworICAgIHN0cnVjdCBzbmlmZkJ1Zk5vZGUgKmJuOworICAgIGludCBiblNpemU7CisKKyAgICBTTklGRl9UUkFDRTEoIndyaXRlVG9CdWZmZXIgJWRcbiIsIGxlbik7CisgICAgYm5TaXplID0gc2l6ZW9mKHN0cnVjdCBzbmlmZkJ1Zk5vZGUpIC0gTUFYX1JFUVVFU1RfTEVOICsgbGVuICsgMTsKKyAgICBpZiAoYm5TaXplIDwgMTI4KSBiblNpemUgPSAxMjg7IC8qIG1pbmltdW0gbGVuZ3RoIHRvIGF2b2lkIGZyYWdtZW50YXRpb24gKi8KKyAgICBibiA9IChzdHJ1Y3Qgc25pZmZCdWZOb2RlICopbWFsbG9jKGJuU2l6ZSk7CisgICAgaWYgKCFibikKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBtZW1jcHkoYm4tPmJ1ZiwgbXNnLCBsZW4pOworICAgIGJuLT5idWZbbGVuXT0nXDAnOyAgICAvKiB0ZXJtaW5hdGUgQ1N0cmluZyBmb3IgYWRkZWQgc2FmZXR5ICovCisgICAgYm4tPm5leHQgPSBOVUxMOworICAgIGJuLT5idWZMZW4gPSBsZW47CisgICAgLyogbm93LCBhY3F1aXJlIGEgTXV0ZXggZm9yIGFkZGluZyB0aGUgc3RyaW5nIHRvIG91ciBsaW5rZWQgbGlzdCAqLworICAgIGR3V2FpdFJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoCisJaEJ1ZmZlck11dGV4LCAgIC8qIGhhbmRsZSBvZiBtdXRleCAqLworCTEwMDBMKTsgICAvKiBvbmUtc2Vjb25kIHRpbWUtb3V0IGludGVydmFsICovCisgICAgaWYgKGR3V2FpdFJlc3VsdCA9PSBXQUlUX09CSkVDVF8wKQorICAgIHsKKwkvKiBUaGUgdGhyZWFkIGdvdCBtdXRleCBvd25lcnNoaXAuICovCisJaWYgKHNuaWZmQnVmRW5kKQorCXsKKwkgICAgc25pZmZCdWZFbmQtPm5leHQgPSBibjsKKwkgICAgc25pZmZCdWZFbmQgPSBibjsKKwl9CisJZWxzZQorCSAgICBzbmlmZkJ1ZlN0YXJ0ID0gc25pZmZCdWZFbmQgPSBibjsKKwkvKiBSZWxlYXNlIG93bmVyc2hpcCBvZiB0aGUgbXV0ZXggb2JqZWN0LiAqLworCWlmICghIFJlbGVhc2VNdXRleChoQnVmZmVyTXV0ZXgpKQorCXsKKwkgICAgLyogRGVhbCB3aXRoIGVycm9yLiAqLworCX0KKwlyZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICAvKiBDYW5ub3QgZ2V0IG11dGV4IG93bmVyc2hpcCBkdWUgdG8gdGltZS1vdXQgb3IgbXV0ZXggb2JqZWN0IGFiYW5kb25lZC4gKi8KKyAgICBmcmVlKGJuKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiByZWFkIGZyb20gdGhlIGludGVybmFsIFRocmVhZCAvIFRocmVhZCBjb21tdW5pY2F0aW9ucyBidWZmZXIuCisgKiBSZXR1cm4gVFJVRSBpZiBzdWNjZXNzZnVsLCBGQUxTRSBlbHNlLgorICovCisgICAgc3RhdGljIGludAorUmVhZEZyb21CdWZmZXIoY2hhciAqYnVmLCBpbnQgbWF4bGVuKQoreworICAgIERXT1JEIGR3V2FpdFJlc3VsdDsgICAgIC8qIFJlcXVlc3Qgb3duZXJzaGlwIG9mIG11dGV4LiAqLworICAgIGludCAgIHRoZUxlbjsKKyAgICBzdHJ1Y3Qgc25pZmZCdWZOb2RlICpibjsKKworICAgIGR3V2FpdFJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoCisJaEJ1ZmZlck11dGV4LCAgIC8qIGhhbmRsZSBvZiBtdXRleCAqLworCTEwMDBMKTsJCS8qIG9uZS1zZWNvbmQgdGltZS1vdXQgaW50ZXJ2YWwgKi8KKyAgICBpZiAoZHdXYWl0UmVzdWx0ID09IFdBSVRfT0JKRUNUXzApCisgICAgeworCWlmICghc25pZmZCdWZTdGFydCkKKwl7CisJICAgIC8qIGFsbCBwZW5kaW5nIFJlcXVlc3RzIFByb2Nlc3NlZCAqLworCSAgICB0aGVMZW4gPSAwOworCX0KKwllbHNlCisJeworCSAgICBibiA9IHNuaWZmQnVmU3RhcnQ7CisJICAgIHRoZUxlbiA9IGJuLT5idWZMZW47CisJICAgIFNOSUZGX1RSQUNFMSgiUmVhZEZyb21CdWZmZXIgJWRcbiIsIHRoZUxlbik7CisJICAgIGlmICh0aGVMZW4gPj0gbWF4bGVuKQorCSAgICB7CisJCS8qIG5vdGlmeSB0aGUgdXNlciBvZiBidWZmZXIgb3ZlcmZsb3c/ICovCisJCXRoZUxlbiA9IG1heGxlbi0xOworCSAgICB9CisJICAgIG1lbWNweShidWYsIGJuLT5idWYsIHRoZUxlbik7CisJICAgIGJ1Zlt0aGVMZW5dID0gJ1wwJzsKKwkgICAgaWYgKCEgKHNuaWZmQnVmU3RhcnQgPSBibi0+bmV4dCkpCisJICAgIHsKKwkJc25pZmZCdWZFbmQgPSBOVUxMOworCQlzbmlmZl9yZXF1ZXN0X3Byb2Nlc3NlZCA9IDE7CisJICAgIH0KKwkgICAgZnJlZShibik7CisJfQorCWlmICghIFJlbGVhc2VNdXRleChoQnVmZmVyTXV0ZXgpKQorCXsKKwkgICAgLyogRGVhbCB3aXRoIGVycm9yLiAqLworCX0KKwlyZXR1cm4gdGhlTGVuOworICAgIH0KKworICAgIC8qIENhbm5vdCBnZXQgbXV0ZXggb3duZXJzaGlwIGR1ZSB0byB0aW1lLW91dCBvciBtdXRleCBvYmplY3QgYWJhbmRvbmVkLiAqLworICAgIHJldHVybiAtMTsKK30KKworLyogb24gV2luMzIsIGEgc2VwYXJhdGUgVGhyZWFkIHJlYWRzIHRoZSBpbnB1dCBwaXBlLiBnZXRfcmVxdWVzdCBpcyBub3QgbmVlZGVkIGhlcmUuICovCisgICAgc3RhdGljIHZvaWQgX19jZGVjbAorU25pZmZFbWFjc1JlYWRUaHJlYWQodm9pZCAqZHVtbXkpCit7CisgICAgc3RhdGljIGNoYXIJUmVhZFRocmVhZEJ1ZmZlcltNQVhfUkVRVUVTVF9MRU5dOworICAgIGludAkJUmVhZFRocmVhZExlbj0wOworICAgIGludAkJcmVzdWx0PTA7CisgICAgaW50CQltc2dMZW49MDsKKyAgICBjaGFyCSptc2dTdGFydCwgKm1zZ0N1cjsKKworICAgIFNOSUZGX1RSQUNFKCJiZWdpbiB0aHJlYWRcbiIpOworICAgIC8qIFJlYWQgZnJvbSB0aGUgcGlwZSB0byBTbmlmZkVtYWNzICovCisgICAgd2hpbGUgKHNuaWZmX2Nvbm5lY3RlZCkKKyAgICB7CisJaWYgKCFSZWFkRmlsZShoYW5kbGVfZnJvbV9zbmlmZiwKKwkJUmVhZFRocmVhZEJ1ZmZlciArIFJlYWRUaHJlYWRMZW4sICAgIC8qIGFja25vd2xlZGdlIHJlc3QgaW4gYnVmZmVyICovCisJCU1BWF9SRVFVRVNUX0xFTiAtIFJlYWRUaHJlYWRMZW4sCisJCSZyZXN1bHQsCisJCU5VTEwpKQorCXsKKwkgICAgRFdPUkQgZXJyID0gR2V0TGFzdEVycm9yKCk7CisJICAgIHJlc3VsdCA9IC0xOworCX0KKworCWlmIChyZXN1bHQgPCAwKQorCXsKKwkgICAgLyogcHJvYmFibHkgc25pZmZlbWFjcyBkaWVkLi4uIGxvZyB0aGUgRXJyb3I/ICovCisJICAgIHNuaWZmX2Rpc2Nvbm5lY3QoMSk7CisJfQorCWVsc2UgaWYgKHJlc3VsdCA+IDApCisJeworCSAgICBSZWFkVGhyZWFkTGVuICs9IHJlc3VsdC0xOyAgIC8qIHRvdGFsIGxlbmd0aCBvZiB2YWxpZCBjaGFycyAqLworCSAgICBmb3IobXNnQ3VyPW1zZ1N0YXJ0PVJlYWRUaHJlYWRCdWZmZXI7IFJlYWRUaHJlYWRMZW4gPiAwOyBtc2dDdXIrKywgUmVhZFRocmVhZExlbi0tKQorCSAgICB7CisJCWlmICgqbXNnQ3VyID09ICdcMCcgfHwgKm1zZ0N1ciA9PSAnXHInIHx8ICptc2dDdXIgPT0gJ1xuJykKKwkJeworCQkgICAgbXNnTGVuID0gbXNnQ3VyLW1zZ1N0YXJ0OyAvKiBkb24ndCBhZGQgdGhlIENSL0xGIGNoYXJzICovCisJCSAgICBpZiAobXNnTGVuID4gMCkKKwkJCXdyaXRlVG9CdWZmZXIobXNnU3RhcnQsIG1zZ0xlbik7CisJCSAgICBtc2dTdGFydCA9IG1zZ0N1ciArIDE7IC8qIG92ZXItcmVhZCBzaW5nbGUgQ1IvTEYgY2hhcnMgKi8KKwkJfQorCSAgICB9CisKKwkvKiBtb3ZlIGluY29tcGxldGUgbWVzc2FnZSB0byBiZWdpbm5pbmcgb2YgYnVmZmVyICovCisJUmVhZFRocmVhZExlbiA9IG1zZ0N1ciAtIG1zZ1N0YXJ0OworCWlmIChSZWFkVGhyZWFkTGVuID4gMCkKKwkgICAgbWNoX21lbW1vdmUoUmVhZFRocmVhZEJ1ZmZlciwgbXNnU3RhcnQsIFJlYWRUaHJlYWRMZW4pOworCisJaWYgKHNuaWZmX3JlcXVlc3RfcHJvY2Vzc2VkKQorCXsKKwkgICAgLyogbm90aWZ5IG90aGVycyB0aGF0IG5ldyBkYXRhIGhhcyBhcnJpdmVkICovCisJICAgIHNuaWZmX3JlcXVlc3RfcHJvY2Vzc2VkID0gMDsKKwkgICAgc25pZmZfcmVxdWVzdF93YWl0aW5nID0gMTsKKyNpZmRlZiBGRUFUX0dVSV9XMzIKKwkgICAgUG9zdE1lc3NhZ2Uoc19od25kLCBXTV9VU0VSLCAoV1BBUkFNKTAsIChMUEFSQU0pMCk7CisjZW5kaWYKKwkgICAgfQorCX0KKyAgICB9CisgICAgU05JRkZfVFJBQ0UoImVuZCB0aHJlYWRcbiIpOworfQorI2VuZGlmIC8qIFdJTjMyICovCisvKi0tLS0tLS0tIEVuZCBvZiBXaW5kb3dzIE9ubHkgRGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyogUHJvY2Vzc1NuaWZmUmVxdWVzdHMKKyAqIEZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUKKyAqIHRvIHByb2Nlc3MgdGhlIHdhaXRpbmcgc25pZmYgcmVxdWVzdHMKKyAqLworICAgIHZvaWQKK1Byb2Nlc3NTbmlmZlJlcXVlc3RzKCkKK3sKKyAgICBzdGF0aWMgY2hhciBidWZbTUFYX1JFUVVFU1RfTEVOXTsKKyAgICBpbnQgbGVuOworCisgICAgd2hpbGUgKHNuaWZmX2Nvbm5lY3RlZCkKKyAgICB7CisjaWZkZWYgV0lOMzIKKwlsZW4gPSBSZWFkRnJvbUJ1ZmZlcihidWYsIHNpemVvZihidWYpKTsKKyNlbHNlCisJbGVuID0gZ2V0X3JlcXVlc3QoZmRfZnJvbV9zbmlmZiwgYnVmLCBzaXplb2YoYnVmKSk7CisjZW5kaWYKKwlpZiAobGVuIDwgMCkKKwl7CisJICAgIHZpX2Vycm9yX21zZyhfKCJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIpKTsKKwkgICAgc25pZmZfZGlzY29ubmVjdCgxKTsKKwkgICAgYnJlYWs7CisJfQorCWVsc2UgaWYgKGxlbiA+IDApCisJICAgIEhhbmRsZVNuaWZmUmVxdWVzdCggYnVmICk7CisJZWxzZQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoc25pZmZfd2lsbF9kaXNjb25uZWN0KQkvKiBOb3cgdGhlIGxhc3QgbXNnIGhhcyBiZWVuIHByb2Nlc3NlZCAqLworCXNuaWZmX2Rpc2Nvbm5lY3QoMSk7Cit9CisKKyAgICBzdGF0aWMgc3RydWN0IHNuX2NtZCAqCitmaW5kX3NuaWZmX2NtZChjbWQpCisgICAgY2hhciAqY21kOworeworICAgIHN0cnVjdCBzbl9jbWQgKnNuaWZmX2NtZCA9IE5VTEw7CisgICAgaW50IGk7CisgICAgZm9yKGk9MDsgc25pZmZfY21kc1tpXS5jbWRfbmFtZTsgaSsrKQorICAgIHsKKwlpZiAoIXN0cmNtcChjbWQsIHNuaWZmX2NtZHNbaV0uY21kX25hbWUpKQorCXsKKwkgICAgc25pZmZfY21kID0gJnNuaWZmX2NtZHNbaV07CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgaWYgKCFzbmlmZl9jbWQpCisgICAgeworCXN0cnVjdCBzbl9jbWRfbGlzdCAqbGlzdCA9IHNuaWZmX2NtZF9leHQ7CisJd2hpbGUobGlzdCkKKwl7CisJICAgIGlmICghc3RyY21wKGNtZCwgbGlzdC0+c25pZmZfY21kLT5jbWRfbmFtZSkpCisJICAgIHsKKwkJc25pZmZfY21kID0gbGlzdC0+c25pZmZfY21kOworCQlicmVhazsKKwkgICAgfQorCSAgICBsaXN0ID0gbGlzdC0+bmV4dF9jbWQ7CisJfQorICAgIH0KKyAgICByZXR1cm4gc25pZmZfY21kOworfQorCisgICAgc3RhdGljIGludAorYWRkX3NuaWZmX2NtZChjbWQsIGRlZiwgbXNnKQorICAgIGNoYXIgKmNtZDsKKyAgICBjaGFyICpkZWY7CisgICAgY2hhciAqbXNnOworeworICAgIGludCByYyA9IDA7CisgICAgaWYgKGRlZiAhPSBOVUxMICYmIGRlZlswXSAhPSBOVUwgJiYgZmluZF9zbmlmZl9jbWQoY21kKSA9PSBOVUxMKQorICAgIHsKKwlzdHJ1Y3Qgc25fY21kX2xpc3QgKmxpc3QgPSBzbmlmZl9jbWRfZXh0OworCXN0cnVjdCBzbl9jbWQgKnNuaWZmX2NtZCA9IChzdHJ1Y3Qgc25fY21kKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbl9jbWQpKTsKKwlzdHJ1Y3Qgc25fY21kX2xpc3QgKmNtZF9ub2RlID0gKHN0cnVjdCBzbl9jbWRfbGlzdCopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25fY21kX2xpc3QpKTsKKwlpbnQgcnFfdHlwZSA9IDA7CisKKwkvKiB1bmVzY2FwZSBtZXNzYWdlIHRleHQgKi8KKwljaGFyICpwID0gbXNnOworCWNoYXIgKmVuZCA9IHArc3RybGVuKG1zZyk7CisJd2hpbGUoKnApCisJeworCSAgICBpZiAoKnAgPT0gJ1xcJykKKwkJbWNoX21lbW1vdmUocCxwKzEsZW5kLXApOworCSAgICBwKys7CisJfQorCVNOSUZGX1RSQUNFMSgicmVxdWVzdCBuYW1lID0gJXNcbiIsY21kKTsKKwlTTklGRl9UUkFDRTEoInJlcXVlc3QgZGVmID0gJXNcbiIsZGVmKTsKKwlTTklGRl9UUkFDRTEoInJlcXVlc3QgbXNnID0gJXNcbiIsbXNnKTsKKworCXdoaWxlKGxpc3QgJiYgbGlzdC0+bmV4dF9jbWQpCisJICAgIGxpc3QgPSBsaXN0LT5uZXh0X2NtZDsKKwlpZiAoIWxpc3QpCisJICAgIHNuaWZmX2NtZF9leHQgPSBjbWRfbm9kZTsKKwllbHNlCisJICAgIGxpc3QtPm5leHRfY21kID0gY21kX25vZGU7CisKKwlzbmlmZl9jbWQtPmNtZF9uYW1lID0gY21kOworCXNuaWZmX2NtZC0+Y21kX2NvZGUgPSBkZWZbMF07CisJc25pZmZfY21kLT5jbWRfbXNnID0gbXNnOworCXN3aXRjaChkZWZbMV0pCisJeworCSAgICBjYXNlICdmJzoKKwkJcnFfdHlwZSA9IFJRX05PU1lNQk9MOworCQlicmVhazsKKwkgICAgY2FzZSAncyc6CisJCXJxX3R5cGUgPSBSUV9DT05URVhUOworCQlicmVhazsKKwkgICAgY2FzZSAnUyc6CisJCXJxX3R5cGUgPSBSUV9TQ09OVEVYVDsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCXJxX3R5cGUgPSBSUV9TSU1QTEU7CisJCWJyZWFrOworCX0KKwlzbmlmZl9jbWQtPmNtZF90eXBlID0gcnFfdHlwZTsKKwljbWRfbm9kZS0+c25pZmZfY21kID0gc25pZmZfY21kOworCWNtZF9ub2RlLT5uZXh0X2NtZCA9IE5VTEw7CisJcmMgPSAxOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKy8qIGV4X3NuaWZmCisgKiBIYW5kbGUgIjpzbmlmZiIgY29tbWFuZAorICovCisgICAgdm9pZAorZXhfc25pZmYoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIGNoYXJfdSAqc3ltYm9sID0gTlVMTDsKKyAgICBjaGFyX3UgKmNtZCA9IE5VTEw7CisKKyAgICBTTklGRl9UUkFDRV9PUEVOKCJpZl9zbmlmZi5sb2ciKTsKKyAgICBpZiAoZW5kc19leGNtZCgqYXJnKSkJLyogbm8gcmVxdWVzdDogcHJpbnQgYXZhaWxhYmxlIGNvbW1hbmRzICovCisgICAgeworCWludCBpOworCW1zZ19zdGFydCgpOworCW1zZ19vdXR0cmFuc19hdHRyKChjaGFyX3UgKikiLS0gU05pRkYrIGNvbW1hbmRzIC0tIiwgaGxfYXR0cihITEZfVCkpOworCWZvcihpPTA7IHNuaWZmX2NtZHNbaV0uY21kX25hbWU7IGkrKykKKwl7CisJICAgIG1zZ19wdXRjaGFyKCdcbicpOworCSAgICBtc2dfb3V0dHJhbnMoKGNoYXJfdSAqKSI6c25pZmYgIik7CisJICAgIG1zZ19vdXR0cmFucygoY2hhcl91ICopc25pZmZfY21kc1tpXS5jbWRfbmFtZSk7CisJfQorCW1zZ19wdXRjaGFyKCdcbicpOworCW1zZ19vdXR0cmFucygoY2hhcl91ICopXygiU05pRkYrIGlzIGN1cnJlbnRseSAiKSk7CisJaWYgKCFzbmlmZl9jb25uZWN0ZWQpCisJICAgIG1zZ19vdXR0cmFucygoY2hhcl91ICopXygibm90ICIpKTsKKwltc2dfb3V0dHJhbnMoKGNoYXJfdSAqKV8oImNvbm5lY3RlZCIpKTsKKwltc2dfZW5kKCk7CisgICAgfQorICAgIGVsc2UJLyogZXh0cmFjdCBjb21tYW5kIG5hbWUgYW5kIHN5bWJvbCBpZiBwcmVzZW50ICovCisgICAgeworCXN5bWJvbCA9IHNraXB0b3doaXRlKGFyZyk7CisJY21kICA9IHZpbV9zdHJuc2F2ZShhcmcsIChpbnQpKHN5bWJvbC1hcmcpKTsKKwlzeW1ib2wgPSBza2lwd2hpdGUoc3ltYm9sKTsKKwlpZiAoZW5kc19leGNtZCgqc3ltYm9sKSkKKwkgICAgc3ltYm9sID0gTlVMTDsKKwlpZiAoIXN0cmNtcCgoY2hhciAqKWNtZCwgImFkZGNtZCIpKQorCXsKKwkgICAgY2hhcl91ICpkZWYgPSBza2lwdG93aGl0ZShzeW1ib2wpOworCSAgICBjaGFyX3UgKm5hbWUgPSB2aW1fc3RybnNhdmUoc3ltYm9sLCAoaW50KShkZWYtc3ltYm9sKSk7CisJICAgIGNoYXJfdSAqbXNnOworCSAgICBkZWYgPSBza2lwd2hpdGUoZGVmKTsKKwkgICAgbXNnID0gc2tpcHRvd2hpdGUoZGVmKTsKKwkgICAgZGVmID0gdmltX3N0cm5zYXZlKGRlZiwgKGludCkobXNnLWRlZikpOworCSAgICBtc2cgPSBza2lwd2hpdGUobXNnKTsKKwkgICAgaWYgKGVuZHNfZXhjbWQoKm1zZykpCisJCW1zZyA9IHZpbV9zdHJzYXZlKG5hbWUpOworCSAgICBlbHNlCisJCW1zZyA9IHZpbV9zdHJuc2F2ZShtc2csIChpbnQpKHNraXB0b3doaXRlX2VzYyhtc2cpLW1zZykpOworCSAgICBpZiAoIWFkZF9zbmlmZl9jbWQoKGNoYXIqKW5hbWUsIChjaGFyKilkZWYsIChjaGFyKiltc2cpKQorCSAgICB7CisJCXZpbV9mcmVlKG1zZyk7CisJCXZpbV9mcmVlKGRlZik7CisJCXZpbV9mcmVlKG5hbWUpOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIHN0cnVjdCBzbl9jbWQqIHNuaWZmX2NtZCA9IGZpbmRfc25pZmZfY21kKChjaGFyKiljbWQpOworCSAgICBpZiAoc25pZmZfY21kKQorCQlTZW5kUmVxdWVzdChzbmlmZl9jbWQsIChjaGFyICopc3ltYm9sKTsKKwkgICAgZWxzZQorCQlFTVNHMihfKCJFMjc1OiBVbmtub3duIFNOaUZGKyByZXF1ZXN0OiAlcyIpLCBjbWQpOworCX0KKwl2aW1fZnJlZShjbWQpOworICAgIH0KK30KKworCisgICAgc3RhdGljIHZvaWQKK3NuaWZmX2Nvbm5lY3QoKQoreworICAgIGlmIChzbmlmZl9jb25uZWN0ZWQpCisJcmV0dXJuOworICAgIGlmIChDb25uZWN0VG9TbmlmZkVtYWNzKCkpCisJdmlfZXJyb3JfbXNnKF8oIkUyNzY6IEVycm9yIGNvbm5lY3RpbmcgdG8gU05pRkYrIikpOworICAgIGVsc2UKKyAgICB7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpbml0X2NtZHNbaV07IGkrKykKKwkgICAgdmlfZXhlY19jbWQoaW5pdF9jbWRzW2ldKTsKKyAgICB9Cit9CisKKyAgICB2b2lkCitzbmlmZl9kaXNjb25uZWN0KGltbWVkaWF0ZWx5KQorICAgIGludCBpbW1lZGlhdGVseTsKK3sKKyAgICBpZiAoIXNuaWZmX2Nvbm5lY3RlZCkKKwlyZXR1cm47CisgICAgaWYgKGltbWVkaWF0ZWx5KQorICAgIHsKKwl2aV9leGVjX2NtZCgiYXVncm91cCBzbmlmZiIpOworCXZpX2V4ZWNfY21kKCJhdSEiKTsKKwl2aV9leGVjX2NtZCgiYXVncm91cCBFTkQiKTsKKwl2aV9leGVjX2NtZCgidW5sZXQgZzpzbmlmZl9jb25uZWN0ZWQiKTsKKwlzbmlmZl9jb25uZWN0ZWQgPSAwOworCXdhbnRfc25pZmZfcmVxdWVzdCA9IDA7CisJc25pZmZfd2lsbF9kaXNjb25uZWN0ID0gMDsKKyNpZmRlZiBGRUFUX0dVSQorCWlmIChndWkuaW5fdXNlKQorCSAgICBndWlfbWNoX3dhaXRfZm9yX2NoYXJzKDBMKTsKKyNlbmRpZgorI2lmZGVmIFdJTjMyCisJd2hpbGUoc25pZmZCdWZTdGFydCAhPSBOVUxMKQorCXsKKwkgICAgc3RydWN0IHNuaWZmQnVmTm9kZSAqbm9kZSA9IHNuaWZmQnVmU3RhcnQ7CisJICAgIHNuaWZmQnVmU3RhcnQgPSBzbmlmZkJ1ZlN0YXJ0LT5uZXh0OworCSAgICBmcmVlKG5vZGUpOworCX0KKwlzbmlmZkJ1ZlN0YXJ0ID0gc25pZmZCdWZFbmQgPSBOVUxMOworCXNuaWZmX3JlcXVlc3RfcHJvY2Vzc2VkID0gMTsKKwlDbG9zZUhhbmRsZShoYW5kbGVfdG9fc25pZmYpOworCUNsb3NlSGFuZGxlKGhhbmRsZV9mcm9tX3NuaWZmKTsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHNuaWZmZW1hY3NfaGFuZGxlLCAxMDAwTCk7CisJQ2xvc2VIYW5kbGUoc25pZmZlbWFjc19oYW5kbGUpOworCXNuaWZmZW1hY3NfaGFuZGxlID0gTlVMTDsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHJlYWR0aHJlYWRfaGFuZGxlLCAxMDAwTCk7CisJcmVhZHRocmVhZF9oYW5kbGUgPSBOVUxMOworCUNsb3NlSGFuZGxlKGhCdWZmZXJNdXRleCk7CisJaEJ1ZmZlck11dGV4ID0gTlVMTDsKKwlTTklGRl9UUkFDRV9DTE9TRTsKKyNlbHNlCisJY2xvc2UoZmRfdG9fc25pZmYpOworCWNsb3NlKGZkX2Zyb21fc25pZmYpOworCXdhaXQoTlVMTCk7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZmRlZiBXSU4zMgorCV9zbGVlcCgyKTsKKwlpZiAoIXNuaWZmX3JlcXVlc3RfcHJvY2Vzc2VkKQorCSAgICBQcm9jZXNzU25pZmZSZXF1ZXN0cygpOworI2Vsc2UKKwlzbGVlcCgyKTsJCSAgICAvKiBJbmNvbWluZyBtc2cgY291bGQgZGlzdHVyYiBlZGl0ICovCisjZW5kaWYKKwlzbmlmZl93aWxsX2Rpc2Nvbm5lY3QgPSAxOyAgLyogV2UgZXhwZWN0IGRpc2Nvbm5lY3QgbXNnIGluIDIgc2VjcyAqLworICAgIH0KK30KKworCisvKiBDb25uZWN0VG9TbmlmZkVtYWNzCisgKiBDb25uZWN0IHRvIFNuaWZmOiByZXR1cm5zIDEgb24gZXJyb3IKKyAqLworICAgIHN0YXRpYyBpbnQKK0Nvbm5lY3RUb1NuaWZmRW1hY3MoKQoreworI2lmZGVmIFdJTjMyCQkvKiBXaW5kb3dzIFZlcnNpb24gb2YgdGhlIENvZGUgKi8KKyAgICBIQU5ETEUgVG9TbmlmZkVtYWNzWzJdLCBGcm9tU25pZmZFbWFjc1syXTsKKyAgICBTRUNVUklUWV9BVFRSSUJVVEVTIHNhOworCisgICAgc2Eubkxlbmd0aCA9IHNpemVvZihzYSk7CisgICAgc2EubHBTZWN1cml0eURlc2NyaXB0b3IgPSBOVUxMOworICAgIHNhLmJJbmhlcml0SGFuZGxlID0gVFJVRTsKKworICAgIGlmICghIENyZWF0ZVBpcGUoJlRvU25pZmZFbWFjc1swXSwgJlRvU25pZmZFbWFjc1sxXSwgJnNhLCAwKSkKKwlyZXR1cm4gMTsKKyAgICBpZiAoISBDcmVhdGVQaXBlKCZGcm9tU25pZmZFbWFjc1swXSwgJkZyb21TbmlmZkVtYWNzWzFdLCAmc2EsIDApKQorCXJldHVybiAxOworCisgICAgc25pZmZlbWFjc19oYW5kbGUgPSBFeGVjdXRlRGV0YWNoZWRQcm9ncmFtKFNuaWZmRW1hY3NbMF0sIFNuaWZmRW1hY3NbMF0sCisJVG9TbmlmZkVtYWNzWzBdLCBGcm9tU25pZmZFbWFjc1sxXSk7CisKKyAgICBpZiAoc25pZmZlbWFjc19oYW5kbGUpCisgICAgeworCWhhbmRsZV90b19zbmlmZiAgPSBUb1NuaWZmRW1hY3NbMV07CisJaGFuZGxlX2Zyb21fc25pZmYgPSBGcm9tU25pZmZFbWFjc1swXTsKKwlzbmlmZl9jb25uZWN0ZWQgPSAxOworCWhCdWZmZXJNdXRleCA9IENyZWF0ZU11dGV4KAorCSAgICBOVUxMLAkJCS8qIG5vIHNlY3VyaXR5IGF0dHJpYnV0ZXMgKi8KKwkgICAgRkFMU0UsCQkJLyogaW5pdGlhbGx5IG5vdCBvd25lZCAqLworCSAgICAiU25pZmZSZWFkQnVmZmVyTXV0ZXgiKTsgICAgLyogbmFtZSBvZiBtdXRleCAqLworCWlmIChoQnVmZmVyTXV0ZXggPT0gTlVMTCkKKwl7CisJICAgIC8qIENoZWNrIGZvciBlcnJvci4gKi8KKwl9CisJcmVhZHRocmVhZF9oYW5kbGUgPSAoSEFORExFKV9iZWdpbnRocmVhZChTbmlmZkVtYWNzUmVhZFRocmVhZCwgMCwgTlVMTCk7CisJcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogZXJyb3IgaW4gc3Bhd24oKSAqLworCXJldHVybiAxOworICAgIH0KKworI2Vsc2UJCS8qIFVOSVggVmVyc2lvbiBvZiB0aGUgQ29kZSAqLworICAgIGludCBUb1NuaWZmRW1hY3NbMl0sIEZyb21TbmlmZkVtYWNzWzJdOworCisgICAgcGlwZShUb1NuaWZmRW1hY3MpOworICAgIHBpcGUoRnJvbVNuaWZmRW1hY3MpOworCisgICAgLyogZm9yayAqLworICAgIGlmICgoc25pZmZlbWFjc19waWQ9Zm9yaygpKSA9PSAwKQorICAgIHsKKwkvKiBjaGlsZCAqLworCisJLyogcHJlcGFyZSBjb21tdW5pY2F0aW9uIHBpcGVzICovCisJY2xvc2UoVG9TbmlmZkVtYWNzWzFdKTsKKwljbG9zZShGcm9tU25pZmZFbWFjc1swXSk7CisKKwlkdXAyKFRvU25pZmZFbWFjc1swXSxmaWxlbm8oc3RkaW4pKTsgICAvKiB3cml0ZSB0byBUb1NuaWZmRW1hY3NbMV0gKi8KKwlkdXAyKEZyb21TbmlmZkVtYWNzWzFdLGZpbGVubyhzdGRvdXQpKTsvKiByZWFkIGZyb20gRnJvbVNuaWZmRW1hY3NbMF0gKi8KKworCWNsb3NlKFRvU25pZmZFbWFjc1swXSk7CisJY2xvc2UoRnJvbVNuaWZmRW1hY3NbMV0pOworCisJLyogc3RhcnQgc25pZmZlbWFjcyAqLworCWV4ZWN2cCAoU25pZmZFbWFjc1swXSwgU25pZmZFbWFjcyk7CisJeworLyoJICAgIEZJTEUgKm91dCA9IGZkb3BlbihGcm9tU25pZmZFbWFjc1sxXSwgInciKTsgKi8KKwkgICAgc2xlZXAoMSk7CisJICAgIGZwdXRzKF8obXNnX3NuaWZmX2Rpc2Nvbm5lY3QpLCBzdGRvdXQpOworCSAgICBmZmx1c2goc3Rkb3V0KTsKKwkgICAgc2xlZXAoMyk7CisjaWZkZWYgRkVBVF9HVUkKKwkgICAgaWYgKGd1aS5pbl91c2UpCisJCWd1aV9leGl0KDEpOworI2VuZGlmCisJICAgIGV4aXQoMSk7CisJfQorCXJldHVybiAxOworICAgIH0KKyAgICBlbHNlIGlmIChzbmlmZmVtYWNzX3BpZCA+IDApCisgICAgeworCS8qIHBhcmVudCBwcm9jZXNzICovCisJY2xvc2UoVG9TbmlmZkVtYWNzWzBdKTsKKwlmZF90b19zbmlmZiAgPSBUb1NuaWZmRW1hY3NbMV07CisJY2xvc2UoRnJvbVNuaWZmRW1hY3NbMV0pOworCWZkX2Zyb21fc25pZmYgPSBGcm9tU25pZmZFbWFjc1swXTsKKwlzbmlmZl9jb25uZWN0ZWQgPSAxOworCXJldHVybiAwOworICAgIH0KKyAgICBlbHNlICAgLyogZXJyb3IgaW4gZm9yaygpICovCisJcmV0dXJuIDE7CisjZW5kaWYJCS8qIFVOSVggVmVyc2lvbiBvZiB0aGUgQ29kZSAqLworfQorCisKKy8qIEhhbmRsZVNuaWZmUmVxdWVzdAorICogSGFuZGxlIG9uZSByZXF1ZXN0IGZyb20gU05pRkYrCisgKi8KKyAgICBzdGF0aWMgdm9pZAorSGFuZGxlU25pZmZSZXF1ZXN0KGJ1ZmZlcikKKyAgICBjaGFyICpidWZmZXI7Cit7CisgICAgY2hhciBWSUNvbW1hbmRbTUFYX1JFUVVFU1RfTEVOXTsKKyAgICBjaGFyIGNvbW1hbmQ7CisgICAgY2hhciAqYXJndW1lbnRzOworICAgIGNoYXIgKnRva2VuOworICAgIGNoYXIgKmFyZ3ZbM107CisgICAgaW50IGFyZ2MgPSAwOworICAgIGJ1Zl9UICAqYnVmOworCisgICAgY29uc3QgY2hhciAqU2V0VGFiICAgICA9ICJzZXQgdGFic3RvcD0lZCI7CisgICAgY29uc3QgY2hhciAqU2VsZWN0QnVmICA9ICJidWYgJXMiOworICAgIGNvbnN0IGNoYXIgKkRlbGV0ZUJ1ZiAgPSAiYmQgJXMiOworICAgIGNvbnN0IGNoYXIgKlVubG9hZEJ1ZiAgPSAiYnVuICVzIjsKKyAgICBjb25zdCBjaGFyICpHb3RvTGluZSAgID0gIiVkIjsKKworICAgIGNvbW1hbmQgICA9IGJ1ZmZlclswXTsKKyAgICBhcmd1bWVudHMgPSAmYnVmZmVyWzFdOworICAgIHRva2VuID0gc3RydG9rKGFyZ3VtZW50cywgc25pZmZfcnFfc2VwKTsKKyAgICB3aGlsZShhcmdjIDwzKQorICAgIHsKKwlpZiAodG9rZW4pCisJeworCSAgICBhcmd2W2FyZ2NdID0gKGNoYXIqKXZpbV9zdHJzYXZlKChjaGFyX3UgKil0b2tlbik7CisJICAgIHRva2VuID0gc3RydG9rKDAsIHNuaWZmX3JxX3NlcCk7CisJfQorCWVsc2UKKwkgICAgYXJndlthcmdjXSA9IHN0cmR1cCgiIik7CisJYXJnYysrOworICAgIH0KKworICAgIHN3aXRjaCAoY29tbWFuZCkKKyAgICB7CisJY2FzZSAnbycgOiAgLyogdmlzaXQgZmlsZSBhdCBjaGFyIHBvcyAqLworCWNhc2UgJ08nIDogIC8qIHZpc2l0IGZpbGUgYXQgbGluZSBudW1iZXIgKi8KKwl7CisJICAgIGNoYXIgKmZpbGUgPSBhcmd2WzBdOworCSAgICBpbnQgcG9zaXRpb24gPSBhdG9pKGFyZ3ZbMV0pOworCisJICAgIGJ1ZiA9IHZpX2ZpbmRfYnVmZmVyKGZpbGUpOworCSAgICBzZXRwY21hcmsoKTsgICAgICAvKiBpbnNlcnQgY3VycmVudCBwb3MgaW4ganVtcCBsaXN0IFttYXJrLmNdKi8KKwkgICAgaWYgKCFidWYpCisJCXZpX29wZW5fZmlsZShmaWxlKTsKKwkgICAgZWxzZSBpZiAoYnVmIT1jdXJidWYpCisJICAgIHsKKwkJc3ByaW50ZihWSUNvbW1hbmQsIFNlbGVjdEJ1ZiwgZmlsZSk7CisJCXZpX2V4ZWNfY21kKFZJQ29tbWFuZCk7CisJICAgIH0KKwkgICAgaWYgKGNvbW1hbmQgPT0gJ28nKQorCQl2aV9zZXRfY3Vyc29yX3BvcygobG9uZylwb3NpdGlvbik7CisJICAgIGVsc2UKKwkgICAgeworCQlzcHJpbnRmKFZJQ29tbWFuZCwgR290b0xpbmUsIChpbnQpcG9zaXRpb24pOworCQl2aV9leGVjX2NtZChWSUNvbW1hbmQpOworCSAgICB9CisJICAgIGNoZWNrcGNtYXJrKCk7CS8qIFttYXJrLmNdICovCisjaWYgZGVmaW5lZChGRUFUX0dVSV9YMTEpIHx8IGRlZmluZWQoRkVBVF9HVUlfVzMyKQorCSAgICBpZiAoZ3VpLmluX3VzZSAmJiAhZ3VpLmluX2ZvY3VzKSAgLyogUmFpc2UgVmltIFdpbmRvdyAqLworCSAgICB7CisjIGlmZGVmIEZFQVRfR1VJX1czMgorCQlTZXRGb3JlZ3JvdW5kV2luZG93KHNfaHduZCk7CisjIGVsc2UKKwkJZXh0ZXJuIFdpZGdldCB2aW1TaGVsbDsKKworCQlYU2V0SW5wdXRGb2N1cyhndWkuZHB5LCBYdFdpbmRvdyh2aW1TaGVsbCksIFJldmVydFRvTm9uZSwKKwkJCUN1cnJlbnRUaW1lKTsKKwkJWFJhaXNlV2luZG93KGd1aS5kcHksIFh0V2luZG93KHZpbVNoZWxsKSk7CisjIGVuZGlmCisJICAgIH0KKyNlbmRpZgorCSAgICBicmVhazsKKwl9CisJY2FzZSAncCcgOiAgLyogcGF0aCBvZiBmaWxlIGhhcyBjaGFuZ2VkICovCisJICAgIC8qIHdoZW4gY2hhbmdpbmcgZnJvbSBzaGFyZWQgdG8gcHJpdmF0ZSBXUyAoY2hlY2tvdXQpICovCisJeworCSAgICBjaGFyICpmaWxlID0gYXJndlswXTsKKwkgICAgY2hhciAqbmV3X3BhdGggPSBhcmd2WzFdOworCisJICAgIGJ1ZiA9IHZpX2ZpbmRfYnVmZmVyKGZpbGUpOworCSAgICBpZiAoYnVmICYmICFidWYtPmJfY2hhbmdlZCkgLyogZGVsZXRlIGJ1ZmZlciBvbmx5IGlmIG5vdCBtb2RpZmllZCAqLworCSAgICB7CisJCXNwcmludGYoVklDb21tYW5kLCBEZWxldGVCdWYsIGZpbGUpOworCQl2aV9leGVjX2NtZChWSUNvbW1hbmQpOworCSAgICB9CisJICAgIHZpX29wZW5fZmlsZShuZXdfcGF0aCk7CisJICAgIGJyZWFrOworCX0KKwljYXNlICd3JyA6ICAvKiB3cml0YWJpbGl0eSBoYXMgY2hhbmdlZCAqLworCSAgICAvKiBTbmlmZiBzZW5kcyByZXF1ZXN0IHR3aWNlLAorCSAgICAgKiBidXQgb25seSB0aGUgbGFzdCBvbmUgaXMgdGhlIHJpZ2h0IG9uZSAqLworCXsKKwkgICAgY2hhciAqZmlsZSA9IGFyZ3ZbMF07CisJICAgIGludCB3cml0YWJsZSA9IGF0b2koYXJndlsxXSk7CisKKwkgICAgYnVmID0gdmlfZmluZF9idWZmZXIoZmlsZSk7CisJICAgIGlmIChidWYpCisJICAgIHsKKwkJYnVmLT5iX3Bfcm8gPSAhd3JpdGFibGU7CisJCWlmIChidWYgIT0gY3VyYnVmKQorCQl7CisJCSAgICBidWYtPmJfZmxhZ3MgfD0gQkZfQ0hFQ0tfUk8gKyBCRl9ORVZFUkxPQURFRDsKKwkJICAgIGlmICh3cml0YWJsZSAmJiAhYnVmLT5iX2NoYW5nZWQpCisJCSAgICB7CisJCQlzcHJpbnRmKFZJQ29tbWFuZCwgVW5sb2FkQnVmLCBmaWxlKTsKKwkJCXZpX2V4ZWNfY21kKFZJQ29tbWFuZCk7CisJCSAgICB9CisJCX0KKwkJZWxzZSBpZiAod3JpdGFibGUgJiYgIWJ1Zi0+Yl9jaGFuZ2VkKQorCQl7CisJCSAgICB2aV9leGVjX2NtZCgiZSIpOworCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCWNhc2UgJ2gnIDogIC8qIGhpZ2hsaWdodCBpbmZvICovCisJICAgIGJyZWFrOyAgLyogbm90IGltcGxlbWVudGVkICovCisKKwljYXNlICd0JyA6ICAvKiBTZXQgdGFiIHdpZHRoICovCisJeworCSAgICBpbnQgdGFiX3dpZHRoID0gYXRvaShhcmd2WzFdKTsKKworCSAgICBpZiAodGFiX3dpZHRoID4gMCAmJiB0YWJfd2lkdGggPD0gMTYpCisJICAgIHsKKwkJc3ByaW50ZihWSUNvbW1hbmQsIFNldFRhYiwgdGFiX3dpZHRoKTsKKwkJdmlfZXhlY19jbWQoVklDb21tYW5kKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJY2FzZSAnfCc6CisJeworCSAgICAvKiBjaGFuZ2UgdGhlIHJlcXVlc3Qgc2VwYXJhdG9yICovCisJICAgIHNuaWZmX3JxX3NlcFswXSA9IGFyZ3VtZW50c1swXTsKKwkgICAgLyogZWNobyB0aGUgcmVxdWVzdCAqLworCSAgICBXcml0ZVRvU25pZmYoYnVmZmVyKTsKKwkgICAgYnJlYWs7CisJfQorCWNhc2UgJ0EnIDogIC8qIFdhcm5pbmcvSW5mbyBtc2cgKi8KKwkgICAgdmlfbXNnKGFyZ3VtZW50cyk7CisJICAgIGlmICghc3RybmNtcChhcmd1bWVudHMsICJEaXNjb25uZWN0ZWQiLCAxMikpIC8qICJEaXNjb25uZWN0ZWQgLi4uIiAqLworCQlzbmlmZl9kaXNjb25uZWN0KDEpOwkvKiB1bmV4cGVjdGVkIGRpc2Nvbm5lY3Rpb24gKi8KKwkgICAgYnJlYWs7CisJY2FzZSAnYScgOiAgLyogRXJyb3IgbXNnICovCisJICAgIHZpX2Vycm9yX21zZyhhcmd1bWVudHMpOworCSAgICBpZiAoIXN0cm5jbXAoYXJndW1lbnRzLCAiQ2Fubm90IGNvbm5lY3QiLCAxNCkpIC8qICJDYW5ub3QgY29ubmVjdCAuLi4iICovCisJCXNuaWZmX2Rpc2Nvbm5lY3QoMSk7CisJICAgIGJyZWFrOworCisJZGVmYXVsdCA6CisJICAgIGJyZWFrOworICAgIH0KKyAgICB3aGlsZShhcmdjKQorCXZpbV9mcmVlKGFyZ3ZbLS1hcmdjXSk7Cit9CisKKworI2lmbmRlZiBXSU4zMgorLyogZ2V0X3JlcXVlc3QKKyAqIHJlYWQgc3RyaW5nIGZyb20gZmQgdXAgdG8gbmV4dCBuZXdsaW5lIChleGNsdWRpbmcgdGhlIG5sKSwKKyAqIHJldHVybnMgIGxlbmd0aCBvZiBzdHJpbmcKKyAqCSAgICAwIGlmIG5vIGRhdGEgYXZhaWxhYmxlIG9yIG5vIGNvbXBsZXRlIGxpbmUKKyAqCSAgIDwwIG9uIGVycm9yCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfcmVxdWVzdChmZCwgYnVmLCBtYXhsZW4pCisgICAgaW50CQlmZDsKKyAgICBjaGFyCSpidWY7CisgICAgaW50CQltYXhsZW47Cit7CisgICAgc3RhdGljIGNoYXIJaW5idWZbMTAyNF07CisgICAgc3RhdGljIGludAlwb3MgPSAwLCBieXRlcyA9IDA7CisgICAgaW50CQlsZW47CisjaWZkZWYgSEFWRV9TRUxFQ1QKKyAgICBzdHJ1Y3QgdGltZXZhbCB0dmFsOworICAgIGZkX3NldAlyZmRzOworCisgICAgRkRfWkVSTygmcmZkcyk7CisgICAgRkRfU0VUKGZkLCAmcmZkcyk7CisgICAgdHZhbC50dl9zZWMgID0gMDsKKyAgICB0dmFsLnR2X3VzZWMgPSAwOworI2Vsc2UKKyAgICBzdHJ1Y3QgcG9sbGZkIGZkczsKKworICAgIGZkcy5mZCA9IGZkOworICAgIGZkcy5ldmVudHMgPSBQT0xMSU47CisjZW5kaWYKKworICAgIGZvciAobGVuID0gMDsgbGVuIDwgbWF4bGVuOyBsZW4rKykKKyAgICB7CisJaWYgKHBvcyA+PSBieXRlcykJICAgIC8qIGVuZCBvZiBidWZmZXIgcmVhY2hlZD8gKi8KKwl7CisjaWZkZWYgSEFWRV9TRUxFQ1QKKwkgICAgaWYgKHNlbGVjdChmZCArIDEsICZyZmRzLCBOVUxMLCBOVUxMLCAmdHZhbCkgPiAwKQorI2Vsc2UKKwkJaWYgKHBvbGwoJmZkcywgMSwgMCkgPiAwKQorI2VuZGlmCisJCXsKKwkJICAgIHBvcyA9IDA7CisJCSAgICBieXRlcyA9IHJlYWQoZmQsIGluYnVmLCBzaXplb2YoaW5idWYpKTsKKwkJICAgIGlmIChieXRlcyA8PSAwKQorCQkJcmV0dXJuIGJ5dGVzOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgcG9zID0gcG9zLWxlbjsKKwkJICAgIGJ1ZlswXSA9ICdcMCc7CisJCSAgICByZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAoKGJ1ZltsZW5dID0gaW5idWZbcG9zKytdKSA9PSdcbicpCisJICAgIGJyZWFrOworICAgIH0KKyAgICBidWZbbGVuXSA9ICdcMCc7CisgICAgcmV0dXJuIGxlbjsKK30KKyNlbmRpZiAgICAgLyogV0lOMzIgKi8KKworCisgICAgc3RhdGljIHZvaWQKK1NlbmRSZXF1ZXN0KGNvbW1hbmQsIHN5bWJvbCkKKyAgICBzdHJ1Y3Qgc25fY21kICpjb21tYW5kOworICAgIGNoYXIgKnN5bWJvbDsKK3sKKyAgICBpbnQJCWNtZF90eXBlID0gY29tbWFuZC0+Y21kX3R5cGU7CisgICAgc3RhdGljIGNoYXIgY21kc3RyW01BWF9SRVFVRVNUX0xFTl07CisgICAgc3RhdGljIGNoYXIgbXNndHh0W01BWF9SRVFVRVNUX0xFTl07CisgICAgY2hhcgkqYnVmZmVyX25hbWUgPSBOVUxMOworCisgICAgaWYgKGNtZF90eXBlID09IFJRX0NPTk5FQ1QpCisgICAgeworCXNuaWZmX2Nvbm5lY3QoKTsKKwlyZXR1cm47CisgICAgfQorICAgIGlmICghc25pZmZfY29ubmVjdGVkICYmICEoY21kX3R5cGUgJiBTSUxFTlQpKQorICAgIHsKKwl2aV9lcnJvcl9tc2coXygiRTI3ODogU05pRkYrIG5vdCBjb25uZWN0ZWQiKSk7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmIChjbWRfdHlwZSAmIE5FRURfRklMRSkKKyAgICB7CisJaWYgKCFjdXJidWYtPmJfc25pZmYpCisJeworCSAgICBpZiAoIShjbWRfdHlwZSAmIFNJTEVOVCkpCisJCXZpX2Vycm9yX21zZyhfKCJFMjc5OiBOb3QgYSBTTmlGRisgYnVmZmVyIikpOworCSAgICByZXR1cm47CisJfQorCWJ1ZmZlcl9uYW1lID0gdmlfYnVmZmVyX25hbWUoKTsKKwlpZiAoYnVmZmVyX25hbWUgPT0gTlVMTCkKKwkgICAgcmV0dXJuOworCWlmIChjbWRfdHlwZSAmIE5FRURfU1lNQk9MKQorCXsKKwkgICAgaWYgKGNtZF90eXBlICYgRU1QVFlfU1lNQk9MKQorCQlzeW1ib2wgPSAiICI7CisJICAgIGVsc2UgaWYgKCFzeW1ib2wgJiYgIShzeW1ib2wgPSB2aV9zeW1ib2xfdW5kZXJfY3Vyc29yKCkpKQorCQlyZXR1cm47CSAgICAvKiBlcnJvciBtc2cgYWxyZWFkeSBkaXNwbGF5ZWQgKi8KKwl9CisKKwlpZiAoc3ltYm9sKQorCSAgICBzcHJpbnRmKGNtZHN0ciwgIiVjJXMlcyVsZCVzJXNcbiIsCisJCWNvbW1hbmQtPmNtZF9jb2RlLAorCQlidWZmZXJfbmFtZSwKKwkJc25pZmZfcnFfc2VwLAorCQl2aV9jdXJzb3JfcG9zKCksCisJCXNuaWZmX3JxX3NlcCwKKwkJc3ltYm9sCisJICAgICk7CisJZWxzZQorCSAgICBzcHJpbnRmKGNtZHN0ciwgIiVjJXNcbiIsIGNvbW1hbmQtPmNtZF9jb2RlLCBidWZmZXJfbmFtZSk7CisgICAgfQorICAgIGVsc2UgICAgLyogc2ltcGxlIHJlcXVlc3QgKi8KKyAgICB7CisJY21kc3RyWzBdID0gY29tbWFuZC0+Y21kX2NvZGU7CisJY21kc3RyWzFdID0gJ1xuJzsKKwljbWRzdHJbMl0gPSAnXDAnOworICAgIH0KKyAgICBpZiAoY29tbWFuZC0+Y21kX21zZyAmJiAhKGNtZF90eXBlICYgU0lMRU5UKSkKKyAgICB7CisJaWYgKChjbWRfdHlwZSAmIE5FRURfU1lNQk9MKSAmJiAhKGNtZF90eXBlICYgRU1QVFlfU1lNQk9MKSkKKwl7CisJICAgIHNwcmludGYobXNndHh0LCAiJXM6ICVzIiwgXyhjb21tYW5kLT5jbWRfbXNnKSwgc3ltYm9sKTsKKwkgICAgdmlfbXNnKG1zZ3R4dCk7CisJfQorCWVsc2UKKwkgICAgdmlfbXNnKF8oY29tbWFuZC0+Y21kX21zZykpOworICAgIH0KKyAgICBXcml0ZVRvU25pZmYoY21kc3RyKTsKKyAgICBpZiAoY21kX3R5cGUgJiBESVNDT05ORUNUKQorCXNuaWZmX2Rpc2Nvbm5lY3QoMCk7Cit9CisKKworCisgICAgc3RhdGljIHZvaWQKK1dyaXRlVG9TbmlmZihzdHIpCisgICAgY2hhciAqc3RyOworeworICAgIGludCBieXRlczsKKyNpZmRlZiBXSU4zMgorICAgIGlmICghIFdyaXRlRmlsZShoYW5kbGVfdG9fc25pZmYsIHN0ciwgc3RybGVuKHN0ciksICZieXRlcywgTlVMTCkpCisgICAgeworCURXT1JEIGVycj1HZXRMYXN0RXJyb3IoKTsKKwlieXRlcyA9IC0xOworICAgIH0KKyNlbHNlCisgICAgYnl0ZXMgPSB3cml0ZShmZF90b19zbmlmZiwgc3RyLCBzdHJsZW4oc3RyKSk7CisjZW5kaWYKKyAgICBpZiAoYnl0ZXM8MCkKKyAgICB7CisJdmlfbXNnKF8oIlNuaWZmOiBFcnJvciBkdXJpbmcgd3JpdGUuIERpc2Nvbm5lY3RlZCIpKTsKKwlzbmlmZl9kaXNjb25uZWN0KDEpOworICAgIH0KK30KKworLyotLS0tLS0tLSB2aW0gaGVscGluZyBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgc3RhdGljIHZvaWQKK3ZpX21zZyhzdHIpCisgICAgY2hhciAqc3RyOworeworICAgIGlmIChzdHIgIT0gTlVMTCAmJiAqc3RyICE9IE5VTCkKKwlNU0coKGNoYXJfdSAqKXN0cik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAordmlfZXJyb3JfbXNnKHN0cikKKyAgICBjaGFyICpzdHI7Cit7CisgICAgaWYgKHN0ciAhPSBOVUxMICYmICpzdHIgIT0gTlVMKQorCUVNU0coKGNoYXJfdSAqKXN0cik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAordmlfb3Blbl9maWxlKGZuYW1lKQorICAgIGNoYXIgKmZuYW1lOworeworICAgICsrbm9fd2FpdF9yZXR1cm47CisgICAgZG9fZWNtZCgwLCAoY2hhcl91ICopZm5hbWUsIE5VTEwsIE5VTEwsIEVDTURfT05FLCBFQ01EX0hJREUrRUNNRF9PTERCVUYpOworICAgIGN1cmJ1Zi0+Yl9zbmlmZiA9IFRSVUU7CisgICAgLS1ub193YWl0X3JldHVybjsJCQkJCS8qIFtleF9kb2NtZC5jXSAqLworfQorCisgICAgc3RhdGljIGJ1Zl9UICoKK3ZpX2ZpbmRfYnVmZmVyKGZuYW1lKQorICAgIGNoYXIgKmZuYW1lOworewkJCSAgICAvKiBkZXJpdmVkIGZyb20gYnVmbGlzdF9maW5kbmFtZSgpIFtidWZmZXIuY10gKi8KKyAgICBidWZfVAkqYnVmOworCisgICAgZm9yIChidWYgPSBmaXJzdGJ1ZjsgYnVmICE9IE5VTEw7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorCWlmIChidWYtPmJfc2ZuYW1lICE9IE5VTEwgJiYgZm5hbWVjbXAoZm5hbWUsIGJ1Zi0+Yl9zZm5hbWUpID09IDApCisJICAgIHJldHVybiAoYnVmKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCisgICAgc3RhdGljIGNoYXIgKgordmlfc3ltYm9sX3VuZGVyX2N1cnNvcigpCit7CisgICAgaW50CQlsZW47CisgICAgY2hhcgkqc3ltYm9scDsKKyAgICBjaGFyCSpwOworICAgIHN0YXRpYyBjaGFyIHNuaWZmX3N5bWJvbFsyNTZdOworCisgICAgbGVuID0gZmluZF9pZGVudF91bmRlcl9jdXJzb3IoKGNoYXJfdSAqKikmc3ltYm9scCwgRklORF9JREVOVCk7CisgICAgLyogW25vcm1hbC5jXSAqLworICAgIGlmIChsZW4gPD0gMCkKKwlyZXR1cm4gTlVMTDsKKyAgICBmb3IgKHA9c25pZmZfc3ltYm9sOyBsZW47IGxlbi0tKQorCSpwKysgPSAqc3ltYm9scCsrOworICAgICpwID0gJ1wwJzsKKyAgICByZXR1cm4gc25pZmZfc3ltYm9sOworfQorCisKKyAgICBzdGF0aWMgY2hhciAqCit2aV9idWZmZXJfbmFtZSgpCit7CisgICAgcmV0dXJuIChjaGFyICopY3VyYnVmLT5iX3NmbmFtZTsKK30KKworICAgIHN0YXRpYyB2b2lkCit2aV9leGVjX2NtZCh2aWNtZCkKKyAgICBjaGFyICp2aWNtZDsKK3sKKyAgICBkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopdmljbWQpOyAgLyogW2V4X2RvY21kLmNdICovCit9CisKKy8qCisgKiBTZXQgY3Vyc29yIG9uIGNoYXJhY3RlciBwb3NpdGlvbgorICogZGVyaXZlZCBmcm9tIGN1cnNvcl9wb3NfaW5mbygpIFtidWZmZXIuY10KKyAqLworICAgIHN0YXRpYyB2b2lkCit2aV9zZXRfY3Vyc29yX3BvcyhjaGFyX3BvcykKKyAgICBsb25nIGNoYXJfcG9zOworeworICAgIGxpbmVucl9UCWxudW07CisgICAgbG9uZwljaGFyX2NvdW50ID0gMTsgIC8qIGZpcnN0IHBvc2l0aW9uID0gMSAqLworICAgIGludAkJbGluZV9zaXplOworICAgIGludAkJZW9sX3NpemU7CisKKyAgICBpZiAoY2hhcl9wb3MgPT0gMCkKKyAgICB7CisJY2hhcl9wb3MgPSAxOworICAgIH0KKyAgICBpZiAoZ2V0X2ZpbGVmb3JtYXQoY3VyYnVmKSA9PSBFT0xfRE9TKQorCWVvbF9zaXplID0gMjsKKyAgICBlbHNlCisJZW9sX3NpemUgPSAxOworICAgIGZvciAobG51bSA9IDE7IGxudW0gPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7ICsrbG51bSkKKyAgICB7CisJbGluZV9zaXplID0gU1RSTEVOKG1sX2dldChsbnVtKSkgKyBlb2xfc2l6ZTsKKwlpZiAoY2hhcl9jb3VudCtsaW5lX3NpemUgPiBjaGFyX3BvcykgYnJlYWs7CisJY2hhcl9jb3VudCArPSBsaW5lX3NpemU7CisgICAgfQorICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgID0gY2hhcl9wb3MgLSBjaGFyX2NvdW50OworfQorCisgICAgc3RhdGljIGxvbmcKK3ZpX2N1cnNvcl9wb3MoKQoreworICAgIGxpbmVucl9UCWxudW07CisgICAgbG9uZwljaGFyX2NvdW50PTE7ICAvKiBzbmlmZiBzdGFydHMgd2l0aCBwb3MgMSAqLworICAgIGludAkJbGluZV9zaXplOworICAgIGludAkJZW9sX3NpemU7CisKKyAgICBpZiAoY3VyYnVmLT5iX3BfdHgpCisJZW9sX3NpemUgPSAyOworICAgIGVsc2UKKwllb2xfc2l6ZSA9IDE7CisgICAgZm9yIChsbnVtID0gMTsgbG51bSA8IGN1cndpbi0+d19jdXJzb3IubG51bTsgKytsbnVtKQorICAgIHsKKwlsaW5lX3NpemUgPSBTVFJMRU4obWxfZ2V0KGxudW0pKSArIGVvbF9zaXplOworCWNoYXJfY291bnQgKz0gbGluZV9zaXplOworICAgIH0KKyAgICByZXR1cm4gY2hhcl9jb3VudCArIGN1cndpbi0+d19jdXJzb3IuY29sOworfQpkaWZmIC0tZ2l0IGEvc3JjL2lmX3NuaWZmLmggYi9zcmMvaWZfc25pZmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDFiMDZhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2lmX3NuaWZmLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGlmX3NuaWZmLmggSW50ZXJmYWNlIGJldHdlZW4gVmltIGFuZCBTTmlGRisKKyAqCisgKiAkSWQkCisgKi8KKworI2lmbmRlZiBfX2lmX3NuaWZmX2hfXworI2RlZmluZSBfX2lmX3NuaWZmX2hfXworCitleHRlcm4gaW50ICB3YW50X3NuaWZmX3JlcXVlc3Q7CitleHRlcm4gaW50ICBzbmlmZl9yZXF1ZXN0X3dhaXRpbmc7CitleHRlcm4gaW50ICBzbmlmZl9jb25uZWN0ZWQ7CitleHRlcm4gaW50ICBmZF9mcm9tX3NuaWZmOworZXh0ZXJuIHZvaWQgc25pZmZfZGlzY29ubmVjdCBfX0FSR1MoKGludCBpbW1lZGlhdGVseSkpOworZXh0ZXJuIHZvaWQgUHJvY2Vzc1NuaWZmUmVxdWVzdHMgX19BUkdTKCh2b2lkKSk7CitleHRlcm4gdm9pZCBleF9zbmlmZiBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pZl90Y2wuYyBiL3NyYy9pZl90Y2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWIxZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2lmX3RjbC5jCkBAIC0wLDAgKzEsMjExOCBAQAorLyogdmk6c2V0IHRzPTggc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogVGNsIGV4dGVuc2lvbnMgYnkgSW5nbyBXaWxrZW4gPEluZ28uV2lsa2VuQGluZm9ybWF0aWsudW5pLW9sZGVuYnVyZy5kZT4KKyAqIExhc3QgbW9kaWZpY2F0aW9uOiBXZWQgTWF5IDEwIDIxOjI4OjQ0IENFU1QgMjAwMAorICogUmVxdWlyZXMgVGNsIDguMCBvciBoaWdoZXIuCisgKgorICogIFZhcmlhYmxlczoKKyAqICA6OnZpbTo6Y3VycmVudChidWZmZXIpCSMgTmFtZSBvZiBidWZmZXIgY29tbWFuZCBmb3IgY3VycmVudCBidWZmZXIuCisgKiAgOjp2aW06OmN1cnJlbnQod2luZG93KQkjIE5hbWUgb2Ygd2luZG93IGNvbW1hbmQgZm9yIGN1cnJlbnQgd2luZG93LgorICogIDo6dmltOjpyYW5nZShzdGFydCkJCSMgU3RhcnQgb2YgY3VycmVudCByYW5nZSAobGluZSBudW1iZXIpLgorICogIDo6dmltOjpyYW5nZShlbmQpCQkjIEVuZCBvZiBjdXJyZW50IHJhbmdlIChsaW5lIG51bWJlcikuCisgKiAgOjp2aW06OmxiYXNlCQkjIFN0YXJ0IG9mIGxpbmUvY29sdW1uIG51bWJlcnMgKDEgb3IgMCkuCisgKgorICogIENvbW1hbmRzOgorICogIDo6dmltOjpjb21tYW5kIHtjbWR9CSMgRXhlY3V0ZSBleCBjb21tYW5kIHtjbWR9LgorICogIDo6dmltOjpvcHRpb24ge29wdH0gW3ZhbF0JIyBHZXQvU2V0IG9wdGlvbiB7b3B0fS4KKyAqICA6OnZpbTo6ZXhwciB7ZXhwcn0JCSMgRXZhbHVhdGUge2V4cHJ9IHVzaW5nIHZpbSdzIGV2YWx1YXRvci4KKyAqICA6OnZpbTo6YmVlcAkJCSMgR3Vlc3MuCisgKgorICogIHNldCBidWYgWzo6dmltOjpidWZmZXIge259XQkjIENyZWF0ZSBUY2wgY29tbWFuZCBmb3IgYnVmZmVyIE4uCisgKiAgc2V0IGJsIFs6OnZpbTo6YnVmZmVyIGxpc3RdICMgR2V0IGxpc3Qgb2YgVGNsIGNvbW1hbmRzIG9mIGFsbCBidWZmZXJzLgorICogIDo6dmltOjpidWZmZXIgZXhpc3RzIHtufQkjIFRydWUgaWYgYnVmZmVyIHtufSBleGlzdHMuCisgKgorICogIHNldCB3bCBbOjp2aW06OndpbmRvdyBsaXN0XSAjIEdldCBsaXN0IG9mIFRjbCBjb21tYW5kcyBvZiBhbGwgd2luZG93cy4KKyAqCisgKiAgc2V0IG4gWyR3aW4gaGVpZ2h0XQkJIyBSZXBvcnQgd2luZG93IGhlaWdodC4KKyAqICAkd2luIGhlaWdodCB7bn0JCSMgU2V0IHdpbmRvdyBoZWlnaHQgdG8ge259LgorICogIGFycmF5IHNldCBwb3MgWyR3aW4gY3Vyc29yXSAjIEdldCBjdXJzb3IgcG9zaXRpb24uCisgKiAgJHdpbiBjdXJzb3Ige3Jvd30ge2NvbH0JIyBTZXQgY3Vyc29yIHBvc2l0aW9uLgorICogICR3aW4gY3Vyc29yIHBvcwkJIyBTZXQgY3Vyc29yIHBvc2l0aW9uIGZyb20gYXJyYXkgdmFyICJwb3MiCisgKiAgJHdpbiBkZWxjbWQge2NtZH0JCSMgUmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZCBmb3IgY2xvc2VkIHdpbmRvdy4KKyAqICAkd2luIG9wdGlvbiB7b3B0fSBbdmFsXQkjIEdldC9TZXQgdmltIG9wdGlvbiBpbiBjb250ZXh0IG9mICR3aW4uCisgKiAgJHdpbiBjb21tYW5kIHtjbWR9CQkjIEV4ZWN1dGUgZXggY29tbWFuZCBpbiBjb250ZXh0IG9mICR3aW4uCisgKiAgJHdpbiBleHByIHtleHByfQkJIyBFdmFsdWF0ZSB2aW0gZXhwcmVzc2lvbiBpbiBjb250ZXh0IG9mICR3aW4uCisgKiAgc2V0IGJ1ZiBbJHdpbiBidWZmZXJdCSMgQ3JlYXRlIFRjbCBjb21tYW5kIGZvciB3aW5kb3cncyBidWZmZXIuCisgKgorICogICRidWYgbmFtZQkJCSMgUmVwb3J0cyBmaWxlIG5hbWUgaW4gYnVmZmVyLgorICogICRidWYgbnVtYmVyCQkJIyBSZXBvcnRzIGJ1ZmZlciBudW1iZXIuCisgKiAgc2V0IGwgWyRidWYgZ2V0IHtufV0JIyBHZXQgYnVmZmVyIGxpbmUge259IGFzIGEgc3RyaW5nLgorICogIHNldCBMIFskYnVmIGdldCB7bn0ge219XQkjIEdldCBsaW5lcyB7bn0gdGhyb3VnaCB7bX0gYXMgYSBsaXN0LgorICogICRidWYgY291bnQJCQkjIFJlcG9ydHMgbnVtYmVyIG9mIGxpbmVzIGluIGJ1ZmZlci4KKyAqICAkYnVmIGxhc3QJCQkjIFJlcG9ydHMgbnVtYmVyIG9mIGxhc3QgbGluZSBpbiBidWZmZXIuCisgKiAgJGJ1ZiBkZWxldGUge259CQkjIERlbGV0ZSBsaW5lIHtufS4KKyAqICAkYnVmIGRlbGV0ZSB7bn0ge219CQkjIERlbGV0ZSBsaW5lcyB7bn0gdGhyb3VnaCB7bX0uCisgKiAgJGJ1ZiBzZXQge259IHtsfQkJIyBTZXQgbGluZSB7bn0gdG8gc3RyaW5nIHtsfS4KKyAqICAkYnVmIHNldCB7bn0ge219IHtMfQkjIFNldCBsaW5lcyB7bn0gdGhyb3VnaCB7bX0gZnJvbSBsaXN0IHtMfS4KKyAqCQkJCSMgRGVsZXRlL2luc2VydHMgbGluZXMgYXMgYXBwcm9wcmlhdGUuCisgKiAgJGJ1ZiBvcHRpb24ge29wdH0gW3ZhbF0JIyBHZXQvU2V0IHZpbSBvcHRpb24gaW4gY29udGV4dCBvZiAkYnVmLgorICogICRidWYgY29tbWFuZCB7Y21kfQkJIyBFeGVjdXRlIGV4IGNvbW1hbmQgaW4gY29udGV4dCBvZiAkYnVmCisgKiAgJGJ1ZiBleHByIHtjbWR9CQkjIEV2YWx1YXRlIHZpbSBleHByZXNzaW9uIGluIGNvbnRleHQgb2YgJGJ1Zi4KKyAqICBhcnJheSBzZXQgcG9zIFskYnVmIG1hcmsge219XSAgICMgR2V0IHBvc2l0aW9uIG9mIG1hcmsuCisgKiAgJGJ1ZiBhcHBlbmQge259IHtzdHJ9CSMgQXBwZW5kIHN0cmluZyB7c3RyfSB0byBidWZmZXIsYWZ0ZXIgbGluZSB7bn0uCisgKiAgJGJ1ZiBpbnNlcnQge259IHtzdHJ9CSMgSW5zZXJ0IHN0cmluZyB7c3RyfSBpbiBidWZmZXIgYXMgbGluZSB7bn0uCisgKiAgJGJ1ZiBkZWxjbWQge2NtZH0JCSMgUmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZCBmb3IgZGVsZXRlZCBidWZmZXIuCisgKiAgc2V0IHdsIFskYnVmIHdpbmRvd3NdCSMgR2V0IGxpc3Qgb2YgVGNsIGNvbW1hbmRzIGZvciBhbGwgd2luZG93cyBvZgorICoJCQkJIyB0aGlzIGJ1ZmZlci4KK1RPRE86CisgKiAgOjp2aW06OmJ1ZmZlciBuZXcJCSMgICBjcmVhdGUgbmV3IGJ1ZmZlciArIFRjbCBjb21tYW5kCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorI3VuZGVmIEVYVEVSTgkJCS8qIHRjbC5oIGRlZmluZXMgaXQgdG9vICovCisKKyNpZmRlZiBEWU5BTUlDX1RDTAorIyBkZWZpbmUgVVNFX1RDTF9TVFVCUyAvKiB1c2UgdGNsJ3Mgc3R1YnMgbWVjaGFuaXNtICovCisjZW5kaWYKKworI2luY2x1ZGUgPHRjbC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgVGNsX0ludGVycCAqaW50ZXJwOworICAgIGludCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kOworICAgIGludCBsYmFzZTsKKyAgICBjaGFyICpjdXJidWYsICpjdXJ3aW47Cit9IHRjbF9pbmZvOworCitzdGF0aWMgdGNsX2luZm8gdGNsaW5mbyA9IHsgTlVMTCwgMCwgMCwgMCwgTlVMTCwgTlVMTCB9OworCisjZGVmaW5lIFZBUl9SQU5HRTEJIjo6dmltOjpyYW5nZShzdGFydCkiCisjZGVmaW5lIFZBUl9SQU5HRTIJIjo6dmltOjpyYW5nZShiZWdpbikiCisjZGVmaW5lIFZBUl9SQU5HRTMJIjo6dmltOjpyYW5nZShlbmQpIgorI2RlZmluZSBWQVJfQ1VSQlVGCSI6OnZpbTo6Y3VycmVudChidWZmZXIpIgorI2RlZmluZSBWQVJfQ1VSV0lOCSI6OnZpbTo6Y3VycmVudCh3aW5kb3cpIgorI2RlZmluZSBWQVJfTEJBU0UJIjo6dmltOjpsYmFzZSIKKyNkZWZpbmUgVkFSX0NVUkxJTkUJImxpbmUiCisjZGVmaW5lIFZBUl9DVVJMTlVNCSJsbnVtIgorI2RlZmluZSBWQVJOQU1FX1NJWkUJNjQKKworI2RlZmluZSByb3cydGNsKHgpICAoKHgpIC0gKHRjbGluZm8ubGJhc2U9PTApKQorI2RlZmluZSByb3cydmltKHgpICAoKHgpICsgKHRjbGluZm8ubGJhc2U9PTApKQorI2RlZmluZSBjb2wydGNsKHgpICAoKHgpICsgKHRjbGluZm8ubGJhc2UhPTApKQorI2RlZmluZSBjb2wydmltKHgpICAoKHgpIC0gKHRjbGluZm8ubGJhc2UhPTApKQorCisKKyNkZWZpbmUgVklNT1VUCSgoQ2xpZW50RGF0YSkxKQorI2RlZmluZSBWSU1FUlIJKChDbGllbnREYXRhKTIpCisKKy8qCisgKiAgTGlzdCBvZiBUY2wgaW50ZXJwcmV0ZXJzIHdobyByZWZlcmVuY2UgYSB2aW0gd2luZG93IG9yIGJ1ZmZlci4KKyAqICBFYWNoIGJ1ZmZlciBhbmQgd2luZG93IGhhcyBpdCdzIG93biBsaXN0IGluIHRoZSB0Y2xfcmVmIHN0cnVjdCBtZW1iZXIuCisgKiAgV2UgbmVlZCB0aGlzIGJlY2F1c2UgVGNsIGNhbiBjcmVhdGUgc3ViLWludGVycHJldGVycyB3aXRoIHRoZSAiaW50ZXJwIgorICogIGNvbW1hbmQsIGFuZCBlYWNoIGludGVycHJldGVyIGNhbiByZWZlcmVuY2UgYWxsIHdpbmRvd3MgYW5kIGJ1ZmZlcnMuCisgKi8KK3N0cnVjdCByZWYKK3sKKyAgICBzdHJ1Y3QgcmVmCSpuZXh0OworCisgICAgVGNsX0ludGVycAkqaW50ZXJwOworICAgIFRjbF9Db21tYW5kIGNtZDsJICAgIC8qIFRjbCBjb21tYW5kIHRoYXQgcmVwcmVzZW50cyB0aGlzIG9iamVjdCAqLworICAgIFRjbF9PYmoJKmRlbGNtZDsgICAgLyogVGNsIGNvbW1hbmQgdG8gY2FsbCB3aGVuIG9iamVjdCBpcyBiZWluZyBkZWwuICovCisgICAgdm9pZAkqdmltb2JqOyAgICAvKiBWaW0gd2luZG93IG9yIGJ1ZmZlciAod2luX1QqIG9yIGJ1Zl9UKikgKi8KK307CitzdGF0aWMgY2hhciAqIHRjbGdldGJ1ZmZlciBfQU5TSV9BUkdTXygoVGNsX0ludGVycCAqaW50ZXJwLCBidWZfVCAqYnVmKSk7CitzdGF0aWMgY2hhciAqIHRjbGdldHdpbmRvdyBfQU5TSV9BUkdTXygoVGNsX0ludGVycCAqaW50ZXJwLCB3aW5fVCAqd2luKSk7CitzdGF0aWMgaW50IHRjbHNldGRlbGNtZCBfQU5TSV9BUkdTXygoVGNsX0ludGVycCAqaW50ZXJwLCBzdHJ1Y3QgcmVmICpyZWZsaXN0LCB2b2lkICp2aW1vYmosIFRjbF9PYmogKmRlbGNtZCkpOworc3RhdGljIGludCB0Y2xnZXRsaW5lbnVtIF9BTlNJX0FSR1NfICgoVGNsX0ludGVycCAqaW50ZXJwLCBUY2xfT2JqICpvYmosIGludCAqdmFsdWVQLCBidWZfVCAqYnVmKSk7CitzdGF0aWMgd2luX1QgKnRjbGZpbmR3aW4gX0FOU0lfQVJHU18gKChidWZfVCAqYnVmKSk7CitzdGF0aWMgaW50IHRjbGRvZXhjb21tYW5kIF9BTlNJX0FSR1NfICgoVGNsX0ludGVycCAqaW50ZXJwLCBpbnQgb2JqYywgVGNsX09iaiAqQ09OU1Qgb2JqdltdLCBpbnQgb2JqbikpOworc3RhdGljIGludCB0Y2xzZXRvcHRpb24gX0FOU0lfQVJHU18gKChUY2xfSW50ZXJwICppbnRlcnAsIGludCBvYmpjLCBUY2xfT2JqICpDT05TVCBvYmp2W10sIGludCBvYmpuKSk7CitzdGF0aWMgaW50IHRjbHZpbWV4cHIgX0FOU0lfQVJHU18gKChUY2xfSW50ZXJwICppbnRlcnAsIGludCBvYmpjLCBUY2xfT2JqICpDT05TVCBvYmp2W10sIGludCBvYmpuKSk7CitzdGF0aWMgdm9pZCB0Y2xkZWx0aGlzaW50ZXJwIF9BTlNJX0FSR1NfICgodm9pZCkpOworCitzdGF0aWMgaW50IHZpbWVycm9yIF9BTlNJX0FSR1NfKChUY2xfSW50ZXJwICppbnRlcnApKTsKK3N0YXRpYyB2b2lkIHRjbG1zZyBfQU5TSV9BUkdTXygoY2hhciAqdGV4dCkpOworc3RhdGljIHZvaWQgdGNsZXJybXNnIF9BTlNJX0FSR1NfKChjaGFyICp0ZXh0KSk7CitzdGF0aWMgdm9pZCB0Y2x1cGRhdGV2YXJzIF9BTlNJX0FSR1NfKCh2b2lkKSk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVmIHJlZnNkZWxldGVkOwkvKiBkdW1teSBvYmplY3QgZm9yIGRlbGV0ZWQgcmVmIGxpc3QgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUQ0wgaW50ZXJmYWNlIG1hbmFnZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChEWU5BTUlDX1RDTCkgfHwgZGVmaW5lZChQUk9UTykKKyMgaWZuZGVmIERZTkFNSUNfVENMX0RMTAorIyAgZGVmaW5lIERZTkFNSUNfVENMX0RMTCAidGNsODMuZGxsIgorIyBlbmRpZgorIyBpZm5kZWYgRFlOQU1JQ19UQ0xfVkVSCisjICBkZWZpbmUgRFlOQU1JQ19UQ0xfVkVSICI4LjMiCisjIGVuZGlmCisKKyMgaWZuZGVmICBEWU5BTUlDX1RDTCAvKiBKdXN0IGdlbmVyYXRpbmcgcHJvdG90eXBlcyAqLwordHlwZWRlZiBpbnQgSEFORExFOworIyBlbmRpZgorCisvKgorICogRGVjbGFyZSBIQU5ETEUgZm9yIHBlcmwuZGxsIGFuZCBmdW5jdGlvbiBwb2ludGVycy4KKyAqLworc3RhdGljIEhBTkRMRSBoVGNsTGliID0gTlVMTDsKK1RjbF9JbnRlcnAqICgqZGxsX1RjbF9DcmVhdGVJbnRlcnApKCk7CisKKy8qCisgKiBUYWJsZSBvZiBuYW1lIHRvIGZ1bmN0aW9uIHBvaW50ZXIgb2YgdGNsLgorICovCisjZGVmaW5lIFRDTF9QUk9DIEZBUlBST0MKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGNoYXIqIG5hbWU7CisgICAgVENMX1BST0MqIHB0cjsKK30gdGNsX2Z1bmNuYW1lX3RhYmxlW10gPSB7CisgICAgeyJUY2xfQ3JlYXRlSW50ZXJwIiwgKFRDTF9QUk9DKikmZGxsX1RjbF9DcmVhdGVJbnRlcnB9LAorICAgIHtOVUxMLCBOVUxMfSwKK307CisKKy8qCisgKiBNYWtlIGFsbCBydW50aW1lLWxpbmtzIG9mIHRjbC4KKyAqCisgKiAxLiBHZXQgbW9kdWxlIGhhbmRsZSB1c2luZyBMb2FkTGlicmFyeUV4LgorICogMi4gR2V0IHBvaW50ZXIgdG8gcGVybCBmdW5jdGlvbiBieSBHZXRQcm9jQWRkcmVzcy4KKyAqIDMuIFJlcGVhdCAyLCB1bnRpbCBnZXQgYWxsIGZ1bmN0aW9ucyB3aWxsIGJlIHVzZWQuCisgKgorICogUGFyYW1ldGVyICdsaWJuYW1lJyBwcm92aWRlcyBuYW1lIG9mIERMTC4KKyAqIFJldHVybiBPSyBvciBGQUlMLgorICovCisgICAgc3RhdGljIGludAordGNsX3J1bnRpbWVfbGlua19pbml0KGNoYXIgKmxpYm5hbWUsIGludCB2ZXJib3NlKQoreworICAgIGludCBpOworCisgICAgaWYgKGhUY2xMaWIpCisJcmV0dXJuIE9LOworICAgIGlmICghKGhUY2xMaWIgPSBMb2FkTGlicmFyeUV4KGxpYm5hbWUsIE5VTEwsIDApKSkKKyAgICB7CisJaWYgKHZlcmJvc2UpCisJICAgIEVNU0cyKF8oZV9sb2FkbGliKSwgbGlibmFtZSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorICAgIGZvciAoaSA9IDA7IHRjbF9mdW5jbmFtZV90YWJsZVtpXS5wdHI7ICsraSkKKyAgICB7CisJaWYgKCEoKnRjbF9mdW5jbmFtZV90YWJsZVtpXS5wdHIgPSBHZXRQcm9jQWRkcmVzcyhoVGNsTGliLAorCQkJdGNsX2Z1bmNuYW1lX3RhYmxlW2ldLm5hbWUpKSkKKwl7CisJICAgIEZyZWVMaWJyYXJ5KGhUY2xMaWIpOworCSAgICBoVGNsTGliID0gTlVMTDsKKwkgICAgaWYgKHZlcmJvc2UpCisJCUVNU0cyKF8oZV9sb2FkZnVuYyksIHRjbF9mdW5jbmFtZV90YWJsZVtpXS5uYW1lKTsKKwkgICAgcmV0dXJuIEZBSUw7CisJfQorICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisjZW5kaWYgLyogZGVmaW5lZChEWU5BTUlDX1RDTCkgfHwgZGVmaW5lZChQUk9UTykgKi8KKworI2lmZGVmIERZTkFNSUNfVENMCitzdGF0aWMgY2hhciAqZmluZF9leGVjdXRhYmxlX2FyZyA9IE5VTEw7CisjZW5kaWYKKworICAgIHZvaWQKK3ZpbV90Y2xfaW5pdChhcmcpCisgICAgY2hhcgkqYXJnOworeworI2lmbmRlZiBEWU5BTUlDX1RDTAorICAgIFRjbF9GaW5kRXhlY3V0YWJsZShhcmcpOworI2Vsc2UKKyAgICBmaW5kX2V4ZWN1dGFibGVfYXJnID0gYXJnOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKERZTkFNSUNfVENMKSB8fCBkZWZpbmVkKFBST1RPKQorCitzdGF0aWMgaW50IHN0dWJzX2luaXRpYWxpemVkID0gRkFMU0U7CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgVENMIGludGVyZmFjZSBjYW4gYmUgdXNlZC4KKyAqLworICAgIGludAordGNsX2VuYWJsZWQodmVyYm9zZSkKKyAgICBpbnQJCXZlcmJvc2U7Cit7CisgICAgaWYgKCFzdHVic19pbml0aWFsaXplZCAmJiBmaW5kX2V4ZWN1dGFibGVfYXJnICE9IE5VTEwKKwkgICAgJiYgdGNsX3J1bnRpbWVfbGlua19pbml0KERZTkFNSUNfVENMX0RMTCwgdmVyYm9zZSkgPT0gT0spCisgICAgeworCVRjbF9JbnRlcnAgKmludGVycDsKKworCWlmIChpbnRlcnAgPSBkbGxfVGNsX0NyZWF0ZUludGVycCgpKQorCXsKKwkgICAgaWYgKFRjbF9Jbml0U3R1YnMoaW50ZXJwLCBEWU5BTUlDX1RDTF9WRVIsIDApKQorCSAgICB7CisJCVRjbF9GaW5kRXhlY3V0YWJsZShmaW5kX2V4ZWN1dGFibGVfYXJnKTsKKwkJVGNsX0RlbGV0ZUludGVycChpbnRlcnApOworCQlzdHVic19pbml0aWFsaXplZCA9IFRSVUU7CisJICAgIH0KKwkgICAgLyogRklYTUU6IFdoZW4gVGNsX0luaXRTdHVicygpIHdhcyBmYWlsZWQsIGhvdyBkZWxldGUgaW50ZXJwPyAqLworCX0KKyAgICB9CisgICAgcmV0dXJuIHN0dWJzX2luaXRpYWxpemVkOworfQorI2VuZGlmCisKKyAgICB2b2lkCit0Y2xfZW5kKCkKK3sKKyNpZmRlZiBEWU5BTUlDX1RDTAorICAgIGlmIChoVGNsTGliKQorICAgIHsKKwlGcmVlTGlicmFyeShoVGNsTGliKTsKKwloVGNsTGliID0gTlVMTDsKKyAgICB9CisjZW5kaWYKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgVGNsIGNvbW1hbmRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFJlcGxhY2Ugc3RhbmRhcmQgImV4aXQiIGFuZCAiY2F0Y2giIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgaXMgYSBkZXNpZ24gZmxhdyBpbiBUY2wgLSAgdGhlIHN0YW5kYXJkICJleGl0IiBjb21tYW5kIGp1c3QgY2FsbHMKKyAqIGV4aXQoKSBhbmQga2lsbHMgdGhlIGFwcGxpY2F0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBUQ0xfRVhJVCB0byB0aGUKKyAqIGFwcCwgd2hpY2ggdGhlbiBkZWNpZGVzIGlmIGl0IHdhbnRzIHRvIHRlcm1pbmF0ZSBvciBub3QuICBJbiBvdXIgY2FzZSwKKyAqIHdlIGp1c3QgZGVsZXRlIHRoZSBUY2wgaW50ZXJwcmV0ZXIgKGFuZCBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlIG5leHQKKyAqIDp0Y2wgY29tbWFuZCkuCisgKi8KKyNkZWZpbmUgVENMX0VYSVQJNQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyBpbnQKK2V4aXRjbWQoZHVtbXksIGludGVycCwgb2JqYywgb2JqdikKKyAgICBDbGllbnREYXRhIGR1bW15OworICAgIFRjbF9JbnRlcnAgKmludGVycDsKKyAgICBpbnQgb2JqYzsKKyAgICBUY2xfT2JqICpDT05TVCBvYmp2W107Cit7CisgICAgaW50IHZhbHVlID0gMDsKKworICAgIHN3aXRjaCAob2JqYykKKyAgICB7CisJY2FzZSAyOgorCSAgICBpZiAoVGNsX0dldEludEZyb21PYmooaW50ZXJwLCBvYmp2WzFdLCAmdmFsdWUpICE9IFRDTF9PSykKKwkJYnJlYWs7CisJICAgIC8qIEZBTExUSFJPVUdIICovCisJY2FzZSAxOgorCSAgICBUY2xfU2V0T2JqUmVzdWx0KGludGVycCwgVGNsX05ld0ludE9iaih2YWx1ZSkpOworCSAgICByZXR1cm4gVENMX0VYSVQ7CisJZGVmYXVsdDoKKwkgICAgVGNsX1dyb25nTnVtQXJncyhpbnRlcnAsIDEsIG9ianYsICI/cmV0dXJuQ29kZT8iKTsKKyAgICB9CisgICAgcmV0dXJuIFRDTF9FUlJPUjsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgaW50CitjYXRjaGNtZChkdW1teSwgaW50ZXJwLCBvYmpjLCBvYmp2KQorICAgIENsaWVudERhdGEJZHVtbXk7CisgICAgVGNsX0ludGVycAkqaW50ZXJwOworICAgIGludAkJb2JqYzsKKyAgICBUY2xfT2JqCSpDT05TVCBvYmp2W107Cit7CisgICAgY2hhciAgICAqdmFybmFtZSA9IE5VTEw7CisgICAgaW50CSAgICByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKG9iamMpCisgICAgeworCWNhc2UgMzoKKwkgICAgdmFybmFtZSA9IFRjbF9HZXRTdHJpbmdGcm9tT2JqKG9ianZbMl0sIE5VTEwpOworCSAgICAvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgMjoKKwkgICAgVGNsX1Jlc2V0UmVzdWx0KGludGVycCk7CisJICAgIFRjbF9BbGxvd0V4Y2VwdGlvbnMoaW50ZXJwKTsKKwkgICAgcmVzdWx0ID0gVGNsX0V2YWxPYmooaW50ZXJwLCBvYmp2WzFdKTsKKwkgICAgaWYgKHJlc3VsdCA9PSBUQ0xfRVhJVCkKKwkJcmV0dXJuIHJlc3VsdDsKKwkgICAgaWYgKHZhcm5hbWUpCisJICAgIHsKKwkJaWYgKFRjbF9TZXRWYXIoaW50ZXJwLCB2YXJuYW1lLCBUY2xfR2V0U3RyaW5nUmVzdWx0KGludGVycCksIDApID09IE5VTEwpCisJCXsKKwkJICAgIFRjbF9TZXRSZXN1bHQoaW50ZXJwLCAiY291bGRuJ3Qgc2F2ZSBjb21tYW5kIHJlc3VsdCBpbiB2YXJpYWJsZSIsIFRDTF9TVEFUSUMpOworCQkgICAgcmV0dXJuIFRDTF9FUlJPUjsKKwkJfQorCSAgICB9CisJICAgIFRjbF9TZXRPYmpSZXN1bHQoaW50ZXJwLCBUY2xfTmV3SW50T2JqKHJlc3VsdCkpOworCSAgICByZXR1cm4gVENMX09LOworCWRlZmF1bHQ6CisJICAgIFRjbF9Xcm9uZ051bUFyZ3MoaW50ZXJwLCAxLCBvYmp2LCAiY29tbWFuZCA/dmFyTmFtZT8iKTsKKyAgICB9CisgICAgcmV0dXJuIFRDTF9FUlJPUjsKK30KKworLyoKKyAqICAiOjp2aW06OmJlZXAiIC0gd2hhdCBWaVttXSBkb2VzIGJlc3QgOi0pCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIGludAorYmVlcGNtZChkdW1teSwgaW50ZXJwLCBvYmpjLCBvYmp2KQorICAgIENsaWVudERhdGEgZHVtbXk7CisgICAgVGNsX0ludGVycCAqaW50ZXJwOworICAgIGludCBvYmpjOworICAgIFRjbF9PYmogKkNPTlNUIG9ianZbXTsKK3sKKyAgICBpZiAob2JqYyAhPSAxKQorICAgIHsKKwlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgMSwgb2JqdiwgTlVMTCk7CisJcmV0dXJuIFRDTF9FUlJPUjsKKyAgICB9CisgICAgdmltX2JlZXAoKTsKKyAgICByZXR1cm4gVENMX09LOworfQorCisvKgorICogICI6OnZpbTo6YnVmZmVyIGxpc3QiIC0gY3JlYXRlIGEgbGlzdCBvZiBidWZmZXIgY29tbWFuZHMuCisgKiAgIjo6dmltOjpidWZmZmVyIHtOfSIgLSBjcmVhdGUgYnVmZmVyIGNvbW1hbmQgZm9yIGJ1ZmZlciBOLgorICogICI6OnZpbTo6YnVmZmVyIG5ldyIgLSBjcmVhdGUgYSBuZXcgYnVmZmVyIChub3QgaW1wbGVtZW50ZWQpCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIGludAorYnVmZmVyY21kKGR1bW15LCBpbnRlcnAsIG9iamMsIG9ianYpCisgICAgQ2xpZW50RGF0YSBkdW1teTsKKyAgICBUY2xfSW50ZXJwICppbnRlcnA7CisgICAgaW50IG9iamM7CisgICAgVGNsX09iaiAqQ09OU1Qgb2JqdltdOworeworICAgIGNoYXIJKm5hbWU7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBUY2xfT2JqCSpyZXNvYmo7CisgICAgaW50CQllcnIsIG4sIGlkeDsKKworICAgIGVudW0ge0JDTURfRVhJU1RTLCBCQ01EX0xJU1R9OworICAgIHN0YXRpYyBjaGFyICpiY21kb3B0aW9uc1tdID0KKyAgICB7CisJImV4aXN0cyIsICJsaXN0IiwgKGNoYXIgKikwCisgICAgfTsKKworICAgIGlmIChvYmpjIDwgMikKKyAgICB7CisJVGNsX1dyb25nTnVtQXJncyhpbnRlcnAsIDEsIG9ianYsICJvcHRpb24iKTsKKwlyZXR1cm4gVENMX0VSUk9SOworICAgIH0KKyAgICBlcnIgPSBUY2xfR2V0SW50RnJvbU9iaihpbnRlcnAsIG9ianZbMV0sICZuKTsKKyAgICBpZiAoZXJyID09IFRDTF9PSykKKyAgICB7CisJaWYgKG9iamMgIT0gMikKKwl7CisJICAgIFRjbF9Xcm9uZ051bUFyZ3MoaW50ZXJwLCAxLCBvYmp2LCAiYnVmTnVtYmVyIik7CisJICAgIHJldHVybiBUQ0xfRVJST1I7CisJfQorCWZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKwl7CisJICAgIGlmIChidWYtPmJfZm51bSA9PSBuKQorCSAgICB7CisJCW5hbWUgPSB0Y2xnZXRidWZmZXIoaW50ZXJwLCBidWYpOworCQlpZiAobmFtZSA9PSBOVUxMKQorCQkgICAgcmV0dXJuIFRDTF9FUlJPUjsKKwkJVGNsX1NldFJlc3VsdChpbnRlcnAsIG5hbWUsIFRDTF9WT0xBVElMRSk7CisJCXJldHVybiBUQ0xfT0s7CisJICAgIH0KKwl9CisJVGNsX1NldFJlc3VsdChpbnRlcnAsIF8oImludmFsaWQgYnVmZmVyIG51bWJlciIpLCBUQ0xfU1RBVElDKTsKKwlyZXR1cm4gVENMX0VSUk9SOworICAgIH0KKyAgICBUY2xfUmVzZXRSZXN1bHQoaW50ZXJwKTsgLyogY2xlYXIgZXJyb3IgZnJvbSBUY2xfR2V0SW50RnJvbU9iaiAqLworCisgICAgZXJyID0gVGNsX0dldEluZGV4RnJvbU9iaihpbnRlcnAsIG9ianZbMV0sIGJjbWRvcHRpb25zLCAib3B0aW9uIiwgMCwgJmlkeCk7CisgICAgaWYgKGVyciAhPSBUQ0xfT0spCisJcmV0dXJuIGVycjsKKyAgICBzd2l0Y2ggKGlkeCkKKyAgICB7CisJY2FzZSBCQ01EX0xJU1Q6CisJICAgIGlmIChvYmpjICE9IDIpCisJICAgIHsKKwkJVGNsX1dyb25nTnVtQXJncyhpbnRlcnAsIDIsIG9ianYsICIiKTsKKwkJZXJyID0gVENMX0VSUk9SOworCQlicmVhazsKKwkgICAgfQorCSAgICBmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTDsgYnVmID0gYnVmLT5iX25leHQpCisJICAgIHsKKwkJbmFtZSA9IHRjbGdldGJ1ZmZlcihpbnRlcnAsIGJ1Zik7CisJCWlmIChuYW1lID09IE5VTEwpCisJCXsKKwkJICAgIGVyciA9IFRDTF9FUlJPUjsKKwkJICAgIGJyZWFrOworCQl9CisJCVRjbF9BcHBlbmRFbGVtZW50KGludGVycCwgbmFtZSk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIEJDTURfRVhJU1RTOgorCSAgICBpZiAob2JqYyAhPSAzKQorCSAgICB7CisJCVRjbF9Xcm9uZ051bUFyZ3MoaW50ZXJwLCAyLCBvYmp2LCAiYnVmTnVtYmVyIik7CisJCWVyciA9IFRDTF9FUlJPUjsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZXJyID0gVGNsX0dldEludEZyb21PYmooaW50ZXJwLCBvYmp2WzJdLCAmbik7CisJICAgIGlmIChlcnIgPT0gVENMX09LKQorCSAgICB7CisJCWJ1ZiA9IGJ1Zmxpc3RfZmluZG5yKG4pOworCQlyZXNvYmogPSBUY2xfTmV3SW50T2JqKGJ1ZiAhPSBOVUxMKTsKKwkJVGNsX1NldE9ialJlc3VsdChpbnRlcnAsIHJlc29iaik7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBUY2xfU2V0UmVzdWx0KGludGVycCwgXygibm90IGltcGxlbWVudGVkIHlldCIpLCBUQ0xfU1RBVElDKTsKKwkgICAgZXJyID0gVENMX0VSUk9SOworICAgIH0KKyAgICByZXR1cm4gZXJyOworfQorCisvKgorICogIjo6dmltOjp3aW5kb3cgbGlzdCIgLSBjcmVhdGUgbGlzdCBvZiB3aW5kb3cgY29tbWFuZHMuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIGludAord2luZG93Y21kKGR1bW15LCBpbnRlcnAsIG9iamMsIG9ianYpCisgICAgQ2xpZW50RGF0YQlkdW1teTsKKyAgICBUY2xfSW50ZXJwCSppbnRlcnA7CisgICAgaW50CQlvYmpjOworICAgIFRjbF9PYmoJKkNPTlNUIG9ianZbXTsKK3sKKyAgICBjaGFyCSp3aGF0LCAqc3RyaW5nOworICAgIHdpbl9UCSp3aW47CisKKyAgICBpZiAob2JqYyAhPSAyKQorICAgIHsKKwlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgMSwgb2JqdiwgIm9wdGlvbiIpOworCXJldHVybiBUQ0xfRVJST1I7CisgICAgfQorICAgIHdoYXQgPSBUY2xfR2V0U3RyaW5nRnJvbU9iaihvYmp2WzFdLCBOVUxMKTsKKyAgICBpZiAoc3RyY21wKHdoYXQsICJsaXN0IikgPT0gMCkKKyAgICB7CisJRk9SX0FMTF9XSU5ET1dTKHdpbikKKwl7CisJICAgIHN0cmluZyA9IHRjbGdldHdpbmRvdyhpbnRlcnAsIHdpbik7CisJICAgIGlmIChzdHJpbmcgPT0gTlVMTCkKKwkJcmV0dXJuIFRDTF9FUlJPUjsKKwkgICAgVGNsX0FwcGVuZEVsZW1lbnQoaW50ZXJwLCBzdHJpbmcpOworCX0KKwlyZXR1cm4gVENMX09LOworICAgIH0KKyAgICBUY2xfU2V0UmVzdWx0KGludGVycCwgXygidW5rbm93biBvcHRpb24iKSwgVENMX1NUQVRJQyk7CisgICAgcmV0dXJuIFRDTF9FUlJPUjsKK30KKworLyoKKyAqIGZsYWdzIGZvciBidWZzZWxmY21kIGFuZCB3aW5zZWxmY21kIHRvIGluZGljYXRlIG91dHN0YW5kaW5nIGFjdGlvbnMuCisgKi8KKyNkZWZpbmUgRkxfVVBEQVRFX1NDUkVFTgkoMTw8MCkKKyNkZWZpbmUgRkxfVVBEQVRFX0NVUkJVRgkoMTw8MSkKKyNkZWZpbmUgRkxfQURKVVNUX0NVUlNPUgkoMTw8MikKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgYnVmZmVyIGNvbW1hbmRzLgorICovCisgICAgc3RhdGljIGludAorYnVmc2VsZmNtZChyZWYsIGludGVycCwgb2JqYywgb2JqdikKKyAgICBDbGllbnREYXRhCXJlZjsKKyAgICBUY2xfSW50ZXJwCSppbnRlcnA7CisgICAgaW50CQlvYmpjOworICAgIFRjbF9PYmoJKkNPTlNUIG9ianZbXTsKK3sKKyAgICBpbnQJCW9wdCwgZXJyLCBpZHgsIGZsYWdzOworICAgIGludAkJdmFsMSwgdmFsMiwgbiwgaTsKKyAgICBidWZfVAkqYnVmLCAqc2F2ZWJ1ZjsKKyAgICB3aW5fVAkqd2luLCAqc2F2ZXdpbjsKKyAgICBUY2xfT2JqCSpyZXNvYmo7CisgICAgcG9zX1QJKnBvczsKKyAgICBjaGFyCSpsaW5lOworCisgICAgZW51bQorICAgIHsKKwlCVUZfQVBQRU5ELCBCVUZfQ09NTUFORCwgQlVGX0NPVU5ULCBCVUZfREVMQ01ELCBCVUZfREVMRVRFLCBCVUZfRVhQUiwKKwlCVUZfR0VULCBCVUZfSU5TRVJULCBCVUZfTEFTVCwgQlVGX01BUkssIEJVRl9OQU1FLCBCVUZfTlVNQkVSLAorCUJVRl9PUFRJT04sIEJVRl9TRVQsIEJVRl9XSU5ET1dTCisgICAgfTsKKyAgICBzdGF0aWMgY2hhciAqYnVmb3B0aW9uc1tdID0KKyAgICB7CisJImFwcGVuZCIsICJjb21tYW5kIiwgImNvdW50IiwgImRlbGNtZCIsICJkZWxldGUiLCAiZXhwciIsCisJImdldCIsICJpbnNlcnQiLCAibGFzdCIsICJtYXJrIiwgIm5hbWUiLCAibnVtYmVyIiwKKwkib3B0aW9uIiwgInNldCIsICJ3aW5kb3dzIiwgKGNoYXIgKikwCisgICAgfTsKKworICAgIGlmIChvYmpjIDwgMikKKyAgICB7CisJVGNsX1dyb25nTnVtQXJncyhpbnRlcnAsIDEsIG9ianYsICJvcHRpb24gP2FyZyAuLi4/Iik7CisJcmV0dXJuIFRDTF9FUlJPUjsKKyAgICB9CisKKyAgICBlcnIgPSBUY2xfR2V0SW5kZXhGcm9tT2JqKGludGVycCwgb2JqdlsxXSwgYnVmb3B0aW9ucywgIm9wdGlvbiIsIDAsICZpZHgpOworICAgIGlmIChlcnIgIT0gVENMX09LKQorCXJldHVybiBlcnI7CisKKyAgICBidWYgPSAoYnVmX1QgKikoKHN0cnVjdCByZWYgKilyZWYpLT52aW1vYmo7CisgICAgc2F2ZWJ1ZiA9IGN1cmJ1ZjsgIGN1cmJ1ZiA9IGJ1ZjsKKyAgICBzYXZld2luID0gY3Vyd2luOyAgY3Vyd2luID0gdGNsZmluZHdpbihidWYpOworICAgIGZsYWdzID0gMDsKKyAgICBvcHQgPSAwOworCisgICAgc3dpdGNoIChpZHgpCisgICAgeworCWNhc2UgQlVGX0NPTU1BTkQ6CisJICAgIGVyciA9IHRjbGRvZXhjb21tYW5kKGludGVycCwgb2JqYywgb2JqdiwgMik7CisJICAgIGZsYWdzIHw9IEZMX1VQREFURV9TQ1JFRU47CisJICAgIGJyZWFrOworCisJY2FzZSBCVUZfT1BUSU9OOgorCSAgICBlcnIgPSB0Y2xzZXRvcHRpb24oaW50ZXJwLCBvYmpjLCBvYmp2LCAyKTsKKwkgICAgZmxhZ3MgfD0gRkxfVVBEQVRFX1NDUkVFTjsKKwkgICAgYnJlYWs7CisKKwljYXNlIEJVRl9FWFBSOgorCSAgICBlcnIgPSB0Y2x2aW1leHByKGludGVycCwgb2JqYywgb2JqdiwgMik7CisJICAgIGJyZWFrOworCisJY2FzZSBCVUZfTkFNRToKKwkgICAgLyoKKwkgICAgICoJR2V0IGZpbGVuYW1lIG9mIGJ1ZmZlci4KKwkgICAgICovCisJICAgIGlmIChvYmpjICE9IDIpCisJICAgIHsKKwkJVGNsX1dyb25nTnVtQXJncyhpbnRlcnAsIDIsIG9ianYsIE5VTEwpOworCQllcnIgPSBUQ0xfRVJST1I7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChidWYtPmJfZmZuYW1lKQorCQlUY2xfU2V0UmVzdWx0KGludGVycCwgKGNoYXIgKilidWYtPmJfZmZuYW1lLCBUQ0xfVk9MQVRJTEUpOworCSAgICBlbHNlCisJCVRjbF9TZXRSZXN1bHQoaW50ZXJwLCAiIiwgVENMX1NUQVRJQyk7CisJICAgIGJyZWFrOworCisJY2FzZSBCVUZfTEFTVDoKKwkgICAgLyoKKwkgICAgICogR2V0IGxpbmUgbnVtYmVyIG9mIGxhc3QgbGluZS4KKwkgICAgICovCisJICAgIG9wdCA9IDE7CisJICAgIC8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBCVUZfQ09VTlQ6CisJICAgIC8qCisJICAgICAqIEdldCBudW1iZXIgb2YgbGluZXMgaW4gYnVmZmVyLgorCSAgICAgKi8KKwkgICAgaWYgKG9iamMgIT0gMikKKwkgICAgeworCQlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgMiwgb2JqdiwgTlVMTCk7CisJCWVyciA9IFRDTF9FUlJPUjsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgdmFsMSA9IChpbnQpYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJICAgIGlmIChvcHQpCisJCXZhbDEgPSByb3cydGNsKHZhbDEpOworCisJICAgIHJlc29iaiA9IFRjbF9OZXdJbnRPYmoodmFsMSk7CisJICAgIFRjbF9TZXRPYmpSZXN1bHQoaW50ZXJwLCByZXNvYmopOworCSAgICBicmVhazsKKworCWNhc2UgQlVGX05VTUJFUjoKKwkgICAgLyoKKwkgICAgICogR2V0IGJ1ZmZlcidzIG51bWJlci4KKwkgICAgICovCisJICAgIGlmIChvYmpjICE9IDIpCisJICAgIHsKKwkJVGNsX1dyb25nTnVtQXJncyhpbnRlcnAsIDIsIG9ianYsIE5VTEwpOworCQllcnIgPSBUQ0xfRVJST1I7CisJCWJyZWFrOworCSAgICB9CisJICAgIHJlc29iaiA9IFRjbF9OZXdJbnRPYmooKGludClidWYtPmJfZm51bSk7CisJICAgIFRjbF9TZXRPYmpSZXN1bHQoaW50ZXJwLCByZXNvYmopOworCSAgICBicmVhazsKKworCWNhc2UgQlVGX0dFVDoKKwkgICAgaWYgKG9iamMgIT0gMyAmJiBvYmpjICE9IDQpCisJICAgIHsKKwkJVGNsX1dyb25nTnVtQXJncyhpbnRlcnAsIDIsIG9ianYsICJsaW5lTnVtYmVyID9saW5lTnVtYmVyPyIpOworCQllcnIgPSBUQ0xfRVJST1I7CisJCWJyZWFrOworCSAgICB9CisJICAgIGVyciA9IHRjbGdldGxpbmVudW0oaW50ZXJwLCBvYmp2WzJdLCAmdmFsMSwgYnVmKTsKKwkgICAgaWYgKGVyciAhPSBUQ0xfT0spCisJCWJyZWFrOworCSAgICBpZiAob2JqYyA9PSA0KQorCSAgICB7CisJCWVyciA9IHRjbGdldGxpbmVudW0oaW50ZXJwLCBvYmp2WzNdLCAmdmFsMiwgYnVmKTsKKwkJaWYgKGVyciAhPSBUQ0xfT0spCisJCSAgICBicmVhazsKKwkJaWYgKHZhbDEgPiB2YWwyKQorCQl7CisJCSAgICBuID0gdmFsMTsgdmFsMSA9IHZhbDI7IHZhbDIgPSBuOworCQl9CisJCVRjbF9SZXNldFJlc3VsdChpbnRlcnApOworCisJCWZvciAobiA9IHZhbDE7IG4gPD0gdmFsMiAmJiBlcnIgPT0gVENMX09LOyBuKyspCisJCXsKKwkJICAgIGxpbmUgPSAoY2hhciAqKW1sX2dldF9idWYoYnVmLCAobGluZW5yX1QpbiwgRkFMU0UpOworCQkgICAgaWYgKGxpbmUpCisJCQlUY2xfQXBwZW5kRWxlbWVudChpbnRlcnAsIGxpbmUpOworCQkgICAgZWxzZQorCQkJZXJyID0gVENMX0VSUk9SOworCQl9CisJICAgIH0KKwkgICAgZWxzZSB7ICAvKiBvYmpjID09IDMgKi8KKwkJbGluZSA9IChjaGFyICopbWxfZ2V0X2J1ZihidWYsIChsaW5lbnJfVCl2YWwxLCBGQUxTRSk7CisJCVRjbF9TZXRSZXN1bHQoaW50ZXJwLCBsaW5lLCBUQ0xfVk9MQVRJTEUpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBCVUZfU0VUOgorCSAgICBpZiAob2JqYyAhPSA0ICYmIG9iamMgIT0gNSkKKwkgICAgeworCQlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgMywgb2JqdiwgImxpbmVOdW1iZXIgP2xpbmVOdW1iZXI/IHN0cmluZ09yTGlzdCIpOworCQllcnIgPSBUQ0xfRVJST1I7CisJCWJyZWFrOworCSAgICB9CisJICAgIGVyciA9IHRjbGdldGxpbmVudW0oaW50ZXJwLCBvYmp2WzJdLCAmdmFsMSwgYnVmKTsKKwkgICAgaWYgKGVyciAhPSBUQ0xfT0spCisJCXJldHVybiBUQ0xfRVJST1I7CisJICAgIGlmIChvYmpjID09IDQpCisJICAgIHsKKwkJLyoKKwkJICogIFJlcGxhY2Ugb25lIGxpbmUgd2l0aCBhIHN0cmluZy4KKwkJICoJJGJ1ZiBzZXQge259IHtzdHJpbmd9CisJCSAqLworCQlsaW5lID0gVGNsX0dldFN0cmluZ0Zyb21PYmoob2JqdlszXSwgTlVMTCk7CisJCWlmICh1X3NhdmVzdWIoKGxpbmVucl9UKXZhbDEpICE9IE9LKQorCQl7CisJCSAgICBUY2xfU2V0UmVzdWx0KGludGVycCwgXygiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIpLCBUQ0xfU1RBVElDKTsKKwkJICAgIGVyciA9IFRDTF9FUlJPUjsKKwkJfQorCQllbHNlCisJCWlmIChtbF9yZXBsYWNlKChsaW5lbnJfVCl2YWwxLCAoY2hhcl91ICopbGluZSwgVFJVRSkgIT0gT0spCisJCXsKKwkJICAgIFRjbF9TZXRSZXN1bHQoaW50ZXJwLCBfKCJjYW5ub3QgcmVwbGFjZSBsaW5lIiksIFRDTF9TVEFUSUMpOworCQkgICAgZXJyID0gVENMX0VSUk9SOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgY2hhbmdlZF9ieXRlcygobGluZW5yX1QpdmFsMSwgMCk7CisJCSAgICBmbGFncyB8PSBGTF9VUERBVEVfQ1VSQlVGOworCQl9CisJCWJyZWFrOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKgorCQkgKiBSZXBsYWNlIHNldmVyYWwgbGluZXMgd2l0aCB0aGUgZWxlbWVudHMgb2YgYSBUY2wgbGlzdC4KKwkJICoJJGJ1ZiBzZXQge259IHttfSB7bGlzdH0KKwkJICogSWYgdGhlIGxpc3QgY29udGFpbnMgbW9yZSB0aGFuIHttfS17bn0rMSBlbGVtZW50cywgdGhleQorCQkgKiBhcmUgKiBpbnNlcnRlZCBhZnRlciBsaW5lIHttfS4gIElmIHRoZSBsaXN0IGNvbnRhaW5zIGZld2VyCisJCSAqIGVsZW1lbnRzLCAqIHRoZSBsaW5lcyBmcm9tIHtufStsZW5ndGgoe2xpc3R9KSB0aHJvdWdoIHttfQorCQkgKiBhcmUgZGVsZXRlZC4KKwkJICovCisJCWludAkgICAgbGM7CisJCVRjbF9PYmoJICAgICoqbHY7CisKKwkJZXJyID0gdGNsZ2V0bGluZW51bShpbnRlcnAsIG9ianZbM10sICZ2YWwyLCBidWYpOworCQlpZiAoZXJyICE9IFRDTF9PSykKKwkJICAgIGJyZWFrOworCQllcnIgPSBUY2xfTGlzdE9iakdldEVsZW1lbnRzKGludGVycCwgb2Jqdls0XSwgJmxjLCAmbHYpOworCQlpZiAoZXJyICE9IFRDTF9PSykKKwkJICAgIGJyZWFrOworCQlpZiAodmFsMSA+IHZhbDIpCisJCXsKKwkJICAgIG4gPSB2YWwxOworCQkgICAgdmFsMSA9IHZhbDI7CisJCSAgICB2YWwyID0gbjsKKwkJfQorCisJCW4gPSB2YWwxOworCQlpZiAodV9zYXZlKChsaW5lbnJfVCkodmFsMSAtIDEpLCAobGluZW5yX1QpKHZhbDIgKyAxKSkgIT0gT0spCisJCXsKKwkJICAgIFRjbF9TZXRSZXN1bHQoaW50ZXJwLCBfKCJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIiksCisJCQkJCQkJCSAgVENMX1NUQVRJQyk7CisJCSAgICBlcnIgPSBUQ0xfRVJST1I7CisJCSAgICBicmVhazsKKwkJfQorCQlmbGFncyB8PSBGTF9VUERBVEVfQ1VSQlVGOworCisJCWZvciAoaSA9IDA7IGkgPCBsYyAmJiBuIDw9IHZhbDI7IGkrKykKKwkJeworCQkgICAgbGluZSA9IFRjbF9HZXRTdHJpbmdGcm9tT2JqKGx2W2ldLCBOVUxMKTsKKwkJICAgIGlmIChtbF9yZXBsYWNlKChsaW5lbnJfVCluLCAoY2hhcl91ICopbGluZSwgVFJVRSkgIT0gT0spCisJCQlnb3RvIHNldExpc3RFcnJvcjsKKwkJICAgICsrbjsKKwkJfQorCQlpZiAoaSA8IGxjKQorCQl7CisJCSAgICAvKiBhcHBlbmQgbGluZXMgKi8KKwkJICAgIGRvCisJCSAgICB7CisJCQlsaW5lID0gVGNsX0dldFN0cmluZ0Zyb21PYmoobHZbaV0sIE5VTEwpOworCQkJaWYgKG1sX2FwcGVuZCgobGluZW5yX1QpKG4gLSAxKSwKKwkJCQkJICAgICAgKGNoYXJfdSAqKWxpbmUsIDAsIEZBTFNFKSAhPSBPSykKKwkJCSAgICBnb3RvIHNldExpc3RFcnJvcjsKKwkJCSsrbjsKKwkJCSsraTsKKwkJICAgIH0gd2hpbGUgKGkgPCBsYyk7CisJCX0KKwkJZWxzZSBpZiAobiA8PSB2YWwyKQorCQl7CisJCSAgICAvKiBkaWQgbm90IHJlcGxhY2UgYWxsIGxpbmVzLCBkZWxldGUgKi8KKwkJICAgIGkgPSBuOworCQkgICAgZG8KKwkJICAgIHsKKwkJCWlmIChtbF9kZWxldGUoKGxpbmVucl9UKWksIEZBTFNFKSAhPSBPSykKKwkJCSAgICBnb3RvIHNldExpc3RFcnJvcjsKKwkJCSsrbjsKKwkJICAgIH0gd2hpbGUgKG4gPD0gdmFsMik7CisJCX0KKwkJbGMgLT0gdmFsMiAtIHZhbDEgKyAxOwkvKiBudW1iZXIgb2YgbGluZXMgdG8gYmUgcmVwbGFjZWQgKi8KKwkJbWFya19hZGp1c3QoKGxpbmVucl9UKXZhbDEsIChsaW5lbnJfVCl2YWwyLCAobG9uZylNQVhMTlVNLAorCQkJCQkJCQkgICAgKGxvbmcpbGMpOworCQljaGFuZ2VkX2xpbmVzKChsaW5lbnJfVCl2YWwxLCAwLCAobGluZW5yX1QpdmFsMiArIDEsIChsb25nKWxjKTsKKwkJYnJlYWs7CisgICAgc2V0TGlzdEVycm9yOgorCQl1X3VuZG8oMSk7ICAvKiA/Pz8gKi8KKwkJVGNsX1NldFJlc3VsdChpbnRlcnAsIF8oImNhbm5vdCBzZXQgbGluZShzKSIpLCBUQ0xfU1RBVElDKTsKKwkJZXJyID0gVENMX0VSUk9SOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBCVUZfREVMRVRFOgorCSAgICBpZiAob2JqYyAhPSAzICAmJiAgb2JqYyAhPSA0KQorCSAgICB7CisJCVRjbF9Xcm9uZ051bUFyZ3MoaW50ZXJwLCAzLCBvYmp2LCAibGluZU51bWJlciA/bGluZU51bWJlcj8iKTsKKwkJZXJyID0gVENMX0VSUk9SOworCQlicmVhazsKKwkgICAgfQorCSAgICBlcnIgPSB0Y2xnZXRsaW5lbnVtKGludGVycCwgb2JqdlsyXSwgJnZhbDEsIGJ1Zik7CisJICAgIGlmIChlcnIgIT0gVENMX09LKQorCQlicmVhazsKKwkgICAgdmFsMiA9IHZhbDE7CisJICAgIGlmIChvYmpjID09IDQpCisJICAgIHsKKwkJZXJyID0gdGNsZ2V0bGluZW51bShpbnRlcnAsIG9ianZbM10sICZ2YWwyLCBidWYpOworCQlpZiAoZXJyICE9IFRDTF9PSykKKwkJICAgIHJldHVybiBlcnI7CisJCWlmICh2YWwxID4gdmFsMikKKwkJeworCQkgICAgaSA9IHZhbDE7IHZhbDEgPSB2YWwyOyB2YWwyID0gaTsKKwkJfQorCSAgICB9CisJICAgIG4gPSB2YWwyIC0gdmFsMSArIDE7CisJICAgIGlmICh1X3NhdmVkZWwoKGxpbmVucl9UKXZhbDEsIChsb25nKW4pICE9IE9LKQorCSAgICB7CisJCVRjbF9TZXRSZXN1bHQoaW50ZXJwLCBfKCJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIiksCisJCQkJCQkJCSAgVENMX1NUQVRJQyk7CisJCWVyciA9IFRDTF9FUlJPUjsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkgICAgeworCQltbF9kZWxldGUoKGxpbmVucl9UKXZhbDEsIEZBTFNFKTsKKwkJZXJyID0gdmltZXJyb3IoaW50ZXJwKTsKKwkJaWYgKGVyciAhPSBUQ0xfT0spCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBpZiAoaSA+IDApCisJCWRlbGV0ZWRfbGluZXNfbWFyaygobGluZW5yX1QpdmFsMSwgKGxvbmcpaSk7CisJICAgIGZsYWdzIHw9IEZMX0FESlVTVF9DVVJTT1J8RkxfVVBEQVRFX1NDUkVFTjsKKwkgICAgYnJlYWs7CisKKwljYXNlIEJVRl9NQVJLOgorCSAgICBpZiAob2JqYyAhPSAzKQorCSAgICB7CisJCVRjbF9Xcm9uZ051bUFyZ3MoaW50ZXJwLCAyLCBvYmp2LCAibWFya05hbWUiKTsKKwkJZXJyID0gVENMX0VSUk9SOworCQlicmVhazsKKwkgICAgfQorCSAgICBsaW5lID0gVGNsX0dldFN0cmluZ0Zyb21PYmoob2JqdlsyXSwgTlVMTCk7CisKKwkgICAgcG9zID0gTlVMTDsKKwkgICAgaWYgKGxpbmVbMF0gIT0gJ1wwJyAgJiYgIGxpbmVbMV0gPT0gJ1wwJykKKwkgICAgeworCQlwb3MgPSBnZXRtYXJrKGxpbmVbMF0sIEZBTFNFKTsKKwkgICAgfQorCSAgICBpZiAocG9zID09IE5VTEwpCisJICAgIHsKKwkJVGNsX1NldFJlc3VsdChpbnRlcnAsIF8oImludmFsaWQgbWFyayBuYW1lIiksIFRDTF9TVEFUSUMpOworCQllcnIgPSBUQ0xfRVJST1I7CisJCWJyZWFrOworCSAgICB9CisJICAgIGVyciA9IHZpbWVycm9yKGludGVycCk7CisJICAgIGlmIChlcnIgIT0gVENMX09LKQorCQlicmVhazsKKwkgICAgaWYgKHBvcy0+bG51bSA8PSAwKQorCSAgICB7CisJCVRjbF9TZXRSZXN1bHQoaW50ZXJwLCBfKCJtYXJrIG5vdCBzZXQiKSwgVENMX1NUQVRJQyk7CisJCWVyciA9IFRDTF9FUlJPUjsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJY2hhciByYnVmWzY0XTsKKwkJc3ByaW50ZihyYnVmLCBfKCJyb3cgJWQgY29sdW1uICVkIiksIChpbnQpcm93MnRjbChwb3MtPmxudW0pLCAoaW50KWNvbDJ0Y2wocG9zLT5jb2wpKTsKKwkJVGNsX1NldFJlc3VsdChpbnRlcnAsIHJidWYsIFRDTF9WT0xBVElMRSk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIEJVRl9JTlNFUlQ6CisJICAgIG9wdCA9IDE7CisJICAgIC8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBCVUZfQVBQRU5EOgorCSAgICBpZiAob2JqYyAhPSA0KQorCSAgICB7CisJCVRjbF9Xcm9uZ051bUFyZ3MoaW50ZXJwLCAyLCBvYmp2LCAibGluZU51bSB0ZXh0Iik7CisJCWVyciA9IFRDTF9FUlJPUjsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZXJyID0gdGNsZ2V0bGluZW51bShpbnRlcnAsIG9ianZbMl0sICZ2YWwxLCBidWYpOworCSAgICBpZiAoZXJyICE9IFRDTF9PSykKKwkJYnJlYWs7CisJICAgIGlmIChvcHQpCisJCS0tdmFsMTsKKwkgICAgaWYgKHVfc2F2ZSgobGluZW5yX1QpdmFsMSwgKGxpbmVucl9UKSh2YWwxKzEpKSAhPSBPSykKKwkgICAgeworCQlUY2xfU2V0UmVzdWx0KGludGVycCwgXygiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIpLCBUQ0xfU1RBVElDKTsKKwkJZXJyID0gVENMX0VSUk9SOworCQlicmVhazsKKwkgICAgfQorCisJICAgIGxpbmUgPSBUY2xfR2V0U3RyaW5nRnJvbU9iaihvYmp2WzNdLCBOVUxMKTsKKwkgICAgaWYgKG1sX2FwcGVuZCgobGluZW5yX1QpdmFsMSwgKGNoYXJfdSAqKWxpbmUsIDAsIEZBTFNFKSAhPSBPSykKKwkgICAgeworCQlUY2xfU2V0UmVzdWx0KGludGVycCwgXygiY2Fubm90IGluc2VydC9hcHBlbmQgbGluZSIpLCBUQ0xfU1RBVElDKTsKKwkJZXJyID0gVENMX0VSUk9SOworCQlicmVhazsKKwkgICAgfQorCSAgICBhcHBlbmRlZF9saW5lc19tYXJrKChsaW5lbnJfVCl2YWwxLCAxTCk7CisJICAgIGZsYWdzIHw9IEZMX1VQREFURV9TQ1JFRU47CisJICAgIGJyZWFrOworCisJY2FzZSBCVUZfV0lORE9XUzoKKwkgICAgLyoKKwkgICAgICogUmV0dXJuIGxpc3Qgb2Ygd2luZG93IGNvbW1hbmRzLgorCSAgICAgKi8KKwkgICAgaWYgKG9iamMgIT0gMikKKwkgICAgeworCQlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgMiwgb2JqdiwgTlVMTCk7CisJCWVyciA9IFRDTF9FUlJPUjsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgVGNsX1Jlc2V0UmVzdWx0KGludGVycCk7CisJICAgIEZPUl9BTExfV0lORE9XUyh3aW4pCisJICAgIHsKKwkJaWYgKHdpbi0+d19idWZmZXIgPT0gYnVmKQorCQl7CisJCSAgICBsaW5lID0gdGNsZ2V0d2luZG93KGludGVycCwgd2luKTsKKwkJICAgIGlmIChsaW5lICE9IE5VTEwpCisJCQlUY2xfQXBwZW5kRWxlbWVudChpbnRlcnAsIGxpbmUpOworCQkgICAgZWxzZQorCQkgICAgeworCQkJZXJyID0gVENMX0VSUk9SOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgQlVGX0RFTENNRDoKKwkgICAgLyoKKwkgICAgICogUmVnaXN0ZXIgZGVsZXRpb24gY2FsbGJhY2suCisJICAgICAqIFRPRE86IFNob3VsZCBiZSBhYmxlIHRvIHJlZ2lzdGVyIG11bHRpcGxlIGNhbGxiYWNrcworCSAgICAgKi8KKwkgICAgaWYgKG9iamMgIT0gMykKKwkgICAgeworCQlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgMiwgb2JqdiwgImNvbW1hbmQiKTsKKwkJZXJyID0gVENMX0VSUk9SOworCQlicmVhazsKKwkgICAgfQorCSAgICBlcnIgPSB0Y2xzZXRkZWxjbWQoaW50ZXJwLCBidWYtPnRjbF9yZWYsICh2b2lkICopYnVmLCBvYmp2WzJdKTsKKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBUY2xfU2V0UmVzdWx0KGludGVycCwgXygibm90IGltcGxlbWVudGVkIHlldCIpLCBUQ0xfU1RBVElDKTsKKwkgICAgZXJyID0gVENMX0VSUk9SOworICAgIH0KKworICAgIGlmIChmbGFncyAmIEZMX1VQREFURV9DVVJCVUYpCisJcmVkcmF3X2N1cmJ1Zl9sYXRlcihOT1RfVkFMSUQpOworICAgIGN1cmJ1ZiA9IHNhdmVidWY7CisgICAgY3Vyd2luID0gc2F2ZXdpbjsKKyAgICBpZiAoZmxhZ3MgJiBGTF9BREpVU1RfQ1VSU09SKQorCWNoZWNrX2N1cnNvcigpOworICAgIGlmIChmbGFncyAmIChGTF9VUERBVEVfU0NSRUVOIHwgRkxfVVBEQVRFX0NVUkJVRikpCisJdXBkYXRlX3NjcmVlbihOT1RfVkFMSUQpOworCisgICAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgd2luZG93IGNvbW1hbmRzLgorICovCisgICAgc3RhdGljIGludAord2luc2VsZmNtZChyZWYsIGludGVycCwgb2JqYywgb2JqdikKKyAgICBDbGllbnREYXRhCXJlZjsKKyAgICBUY2xfSW50ZXJwCSppbnRlcnA7CisgICAgaW50CQlvYmpjOworICAgIFRjbF9PYmoJKkNPTlNUIG9ianZbXTsKK3sKKyAgICBpbnQJCWVyciwgaWR4LCBmbGFnczsKKyAgICBpbnQJCXZhbDEsIHZhbDI7CisgICAgVGNsX09iagkqcmVzb2JqOworICAgIHdpbl9UCSpzYXZld2luLCAqd2luOworICAgIGJ1Zl9UCSpzYXZlYnVmOworICAgIGNoYXIJKnN0cjsKKworICAgIGVudW0KKyAgICB7CisJV0lOX0JVRkZFUiwgV0lOX0NPTU1BTkQsIFdJTl9DVVJTT1IsIFdJTl9ERUxDTUQsIFdJTl9FWFBSLAorCVdJTl9IRUlHSFQsIFdJTl9PUFRJT04KKyAgICB9OworICAgIHN0YXRpYyBjaGFyICp3aW5vcHRpb25zW10gPQorICAgIHsKKwkiYnVmZmVyIiwgImNvbW1hbmQiLCAiY3Vyc29yIiwgImRlbGNtZCIsICJleHByIiwKKwkiaGVpZ2h0IiwgIm9wdGlvbiIsIChjaGFyICopMAorICAgIH07CisKKyAgICBpZiAob2JqYyA8IDIpCisgICAgeworCVRjbF9Xcm9uZ051bUFyZ3MoaW50ZXJwLCAxLCBvYmp2LCAib3B0aW9uID9hcmcgLi4uPyIpOworCXJldHVybiBUQ0xfRVJST1I7CisgICAgfQorCisgICAgZXJyID0gVGNsX0dldEluZGV4RnJvbU9iaihpbnRlcnAsIG9ianZbMV0sIHdpbm9wdGlvbnMsICJvcHRpb24iLCAwLCAgJmlkeCk7CisgICAgaWYgKGVyciAhPSBUQ0xfT0spCisJcmV0dXJuIFRDTF9FUlJPUjsKKworICAgIHdpbiA9ICh3aW5fVCAqKSgoc3RydWN0IHJlZiAqKXJlZiktPnZpbW9iajsKKyAgICBzYXZld2luID0gY3Vyd2luOyAgY3Vyd2luID0gd2luOworICAgIHNhdmVidWYgPSBjdXJidWY7ICBjdXJidWYgPSB3aW4tPndfYnVmZmVyOworICAgIGZsYWdzID0gMDsKKworICAgIHN3aXRjaCAoaWR4KQorICAgIHsKKwljYXNlIFdJTl9PUFRJT046CisJICAgIGVyciA9IHRjbHNldG9wdGlvbihpbnRlcnAsIG9iamMsIG9ianYsIDIpOworCSAgICBmbGFncyB8PSBGTF9VUERBVEVfU0NSRUVOOworCSAgICBicmVhazsKKworCWNhc2UgV0lOX0NPTU1BTkQ6CisJICAgIGVyciA9IHRjbGRvZXhjb21tYW5kKGludGVycCwgb2JqYywgb2JqdiwgMik7CisJICAgIGZsYWdzIHw9IEZMX1VQREFURV9TQ1JFRU47CisJICAgIGJyZWFrOworCisJY2FzZSBXSU5fRVhQUjoKKwkgICAgZXJyID0gdGNsdmltZXhwcihpbnRlcnAsIG9iamMsIG9ianYsIDIpOworCSAgICBicmVhazsKKworCWNhc2UgV0lOX0hFSUdIVDoKKwkgICAgaWYgKG9iamMgPT0gMykKKwkgICAgeworCQllcnIgPSBUY2xfR2V0SW50RnJvbU9iaihpbnRlcnAsIG9ianZbMl0sICZ2YWwxKTsKKwkJaWYgKGVyciAhPSBUQ0xfT0spCisJCSAgICBicmVhazsKKyNpZmRlZiBGRUFUX0dVSQorCQluZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworI2VuZGlmCisJCXdpbl9zZXRoZWlnaHQodmFsMSk7CisJCWVyciA9IHZpbWVycm9yKGludGVycCk7CisJCWlmIChlcnIgIT0gVENMX09LKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICBpZiAob2JqYyAhPSAyKQorCSAgICB7CisJCVRjbF9Xcm9uZ051bUFyZ3MoaW50ZXJwLCAyLCBvYmp2LCAiP3ZhbHVlPyIpOworCQllcnIgPSBUQ0xfRVJST1I7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgcmVzb2JqID0gVGNsX05ld0ludE9iaigoaW50KSh3aW4tPndfaGVpZ2h0KSk7CisJICAgIFRjbF9TZXRPYmpSZXN1bHQoaW50ZXJwLCByZXNvYmopOworCSAgICBicmVhazsKKworCWNhc2UgV0lOX0JVRkZFUjoKKwkgICAgaWYgKG9iamMgIT0gMikKKwkgICAgeworCQlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgMiwgb2JqdiwgTlVMTCk7CisJCWVyciA9IFRDTF9FUlJPUjsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgc3RyID0gdGNsZ2V0YnVmZmVyKGludGVycCwgd2luLT53X2J1ZmZlcik7CisJICAgIGlmIChzdHIpCisJCVRjbF9TZXRSZXN1bHQoaW50ZXJwLCBzdHIsIFRDTF9WT0xBVElMRSk7CisJICAgIGVsc2UKKwkJZXJyID0gVENMX0VSUk9SOworCSAgICBicmVhazsKKworCWNhc2UgV0lOX0RFTENNRDoKKwkgICAgaWYgKG9iamMgIT0gMykKKwkgICAgeworCQlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgMiwgb2JqdiwgImNvbW1hbmQiKTsKKwkJZXJyID0gVENMX0VSUk9SOworCQlicmVhazsKKwkgICAgfQorCSAgICBlcnIgPSB0Y2xzZXRkZWxjbWQoaW50ZXJwLCB3aW4tPnRjbF9yZWYsICh2b2lkICopd2luLCBvYmp2WzJdKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIFdJTl9DVVJTT1I6CisJICAgIGlmIChvYmpjID4gNCkKKwkgICAgeworCQlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgMiwgb2JqdiwgIj9hcmcxID9hcmcyPz8iKTsKKwkJZXJyID0gVENMX0VSUk9SOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAob2JqYyA9PSAyKQorCSAgICB7CisJCWNoYXIgYnVmWzY0XTsKKwkJc3ByaW50ZihidWYsIF8oInJvdyAlZCBjb2x1bW4gJWQiKSwgKGludClyb3cydGNsKHdpbi0+d19jdXJzb3IubG51bSksIChpbnQpY29sMnRjbCh3aW4tPndfY3Vyc29yLmNvbCkpOworCQlUY2xfU2V0UmVzdWx0KGludGVycCwgYnVmLCBUQ0xfVk9MQVRJTEUpOworCQlicmVhazsKKwkgICAgfQorCSAgICBlbHNlIGlmIChvYmpjID09IDMpCisJICAgIHsKKwkJVGNsX09iaiAqcGFydCwgKnZhcjsKKworCQlwYXJ0ID0gVGNsX05ld1N0cmluZ09iaigicm93IiwgLTEpOworCQl2YXIgPSBUY2xfT2JqR2V0VmFyMihpbnRlcnAsIG9ianZbMl0sIHBhcnQsIFRDTF9MRUFWRV9FUlJfTVNHKTsKKwkJaWYgKHZhciA9PSBOVUxMKQorCQl7CisJCSAgICBlcnIgPSBUQ0xfRVJST1I7CisJCSAgICBicmVhazsKKwkJfQorCQllcnIgPSB0Y2xnZXRsaW5lbnVtKGludGVycCwgdmFyLCAmdmFsMSwgd2luLT53X2J1ZmZlcik7CisJCWlmIChlcnIgIT0gVENMX09LKQorCQkgICAgYnJlYWs7CisJCXBhcnQgPSBUY2xfTmV3U3RyaW5nT2JqKCJjb2x1bW4iLCAtMSk7CisJCXZhciA9IFRjbF9PYmpHZXRWYXIyKGludGVycCwgb2JqdlsyXSwgcGFydCwgVENMX0xFQVZFX0VSUl9NU0cpOworCQlpZiAodmFyID09IE5VTEwpCisJCXsKKwkJICAgIGVyciA9IFRDTF9FUlJPUjsKKwkJICAgIGJyZWFrOworCQl9CisJCWVyciA9IFRjbF9HZXRJbnRGcm9tT2JqKGludGVycCwgdmFyLCAmdmFsMik7CisJCWlmIChlcnIgIT0gVENMX09LKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgZWxzZSB7ICAvKiBvYmpjID09IDQgKi8KKwkJZXJyID0gdGNsZ2V0bGluZW51bShpbnRlcnAsIG9ianZbMl0sICZ2YWwxLCB3aW4tPndfYnVmZmVyKTsKKwkJaWYgKGVyciAhPSBUQ0xfT0spCisJCSAgICBicmVhazsKKwkJZXJyID0gVGNsX0dldEludEZyb21PYmooaW50ZXJwLCBvYmp2WzNdLCAmdmFsMik7CisJCWlmIChlcnIgIT0gVENMX09LKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgLyogVE9ETzogc2hvdWxkIGNoZWNrIGNvbHVtbiAqLworCSAgICB3aW4tPndfY3Vyc29yLmxudW0gPSB2YWwxOworCSAgICB3aW4tPndfY3Vyc29yLmNvbCA9IGNvbDJ2aW0odmFsMik7CisJICAgIGZsYWdzIHw9IEZMX1VQREFURV9TQ1JFRU47CisJICAgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgICAgVGNsX1NldFJlc3VsdChpbnRlcnAsIF8oIm5vdCBpbXBsZW1lbnRlZCB5ZXQiKSwgVENMX1NUQVRJQyk7CisJICAgIGJyZWFrOworICAgIH0KKworICAgIGN1cndpbiA9IHNhdmV3aW47CisgICAgY3VyYnVmID0gc2F2ZWJ1ZjsKKyAgICBpZiAoZmxhZ3MgJiBGTF9VUERBVEVfU0NSRUVOKQorCXVwZGF0ZV9zY3JlZW4oTk9UX1ZBTElEKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgaW50Citjb21tYW5kY21kKGR1bW15LCBpbnRlcnAsIG9iamMsIG9ianYpCisgICAgQ2xpZW50RGF0YQlkdW1teTsKKyAgICBUY2xfSW50ZXJwCSppbnRlcnA7CisgICAgaW50CQlvYmpjOworICAgIFRjbF9PYmoJKkNPTlNUIG9ianZbXTsKK3sKKyAgICBpbnQJCWVycjsKKworICAgIGVyciA9IHRjbGRvZXhjb21tYW5kKGludGVycCwgb2JqYywgb2JqdiwgMSk7CisgICAgdXBkYXRlX3NjcmVlbihWQUxJRCk7CisgICAgcmV0dXJuIGVycjsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgaW50CitvcHRpb25jbWQoZHVtbXksIGludGVycCwgb2JqYywgb2JqdikKKyAgICBDbGllbnREYXRhCWR1bW15OworICAgIFRjbF9JbnRlcnAJKmludGVycDsKKyAgICBpbnQJCW9iamM7CisgICAgVGNsX09iagkqQ09OU1Qgb2JqdltdOworeworICAgIGludAkJZXJyOworCisgICAgZXJyID0gdGNsc2V0b3B0aW9uKGludGVycCwgb2JqYywgb2JqdiwgMSk7CisgICAgdXBkYXRlX3NjcmVlbihWQUxJRCk7CisgICAgcmV0dXJuIGVycjsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgaW50CitleHByY21kKGR1bW15LCBpbnRlcnAsIG9iamMsIG9ianYpCisgICAgQ2xpZW50RGF0YQlkdW1teTsKKyAgICBUY2xfSW50ZXJwCSppbnRlcnA7CisgICAgaW50CQlvYmpjOworICAgIFRjbF9PYmoJKkNPTlNUIG9ianZbXTsKK3sKKyAgICByZXR1cm4gdGNsdmltZXhwcihpbnRlcnAsIG9iamMsIG9ianYsIDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVGNsIGNvbW1hbmRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEdldCBhIGxpbmUgbnVtYmVyIGZyb20gJ29iaicgYW5kIGNvbnZlcnQgaXQgdG8gdmltJ3MgcmFuZ2UuCisgKi8KKyAgICBzdGF0aWMgaW50Cit0Y2xnZXRsaW5lbnVtKGludGVycCwgb2JqLCB2YWx1ZVAsIGJ1ZikKKyAgICBUY2xfSW50ZXJwCSppbnRlcnA7CisgICAgVGNsX09iagkqb2JqOworICAgIGludAkJKnZhbHVlUDsKKyAgICBidWZfVAkqYnVmOworeworICAgIGludCBlcnIsIGk7CisKKyAgICBlbnVtIHsgTE5fQkVHSU4sIExOX0JPVFRPTSwgTE5fRU5ELCBMTl9GSVJTVCwgTE5fTEFTVCwgTE5fU1RBUlQsIExOX1RPUCB9OworCisgICAgc3RhdGljIGNoYXIgKmtleXdbXSA9CisgICAgeworCSJiZWdpbiIsICJib3R0b20iLCAiZW5kIiwgImZpcnN0IiwgImxhc3QiLCAic3RhcnQiLCAidG9wIiwgKGNoYXIgKikwCisgICAgfTsKKworICAgIGVyciA9IFRjbF9HZXRJbmRleEZyb21PYmooaW50ZXJwLCBvYmosIGtleXcsICIiLCAwLCAmaSk7CisgICAgaWYgKGVyciA9PSBUQ0xfT0spCisgICAgeworCXN3aXRjaCAoaSkKKwl7CisJICAgIGNhc2UgTE5fQkVHSU46CisJICAgIGNhc2UgTE5fRklSU1Q6CisJICAgIGNhc2UgTE5fU1RBUlQ6CisJICAgIGNhc2UgTE5fVE9QOgorCQkqdmFsdWVQID0gMTsKKwkJYnJlYWs7CisJICAgIGNhc2UgTE5fQk9UVE9NOgorCSAgICBjYXNlIExOX0VORDoKKwkgICAgY2FzZSBMTl9MQVNUOgorCQkqdmFsdWVQID0gYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gVENMX09LOworICAgIH0KKyAgICBUY2xfUmVzZXRSZXN1bHQoaW50ZXJwKTsKKworICAgIGVyciA9IFRjbF9HZXRJbnRGcm9tT2JqKGludGVycCwgb2JqLCAmaSk7CisgICAgaWYgKGVyciAhPSBUQ0xfT0spCisJcmV0dXJuIGVycjsKKyAgICBpID0gcm93MnZpbShpKTsKKyAgICBpZiAoaSA8IDEgIHx8ICBpID4gYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisgICAgeworCVRjbF9TZXRSZXN1bHQoaW50ZXJwLCBfKCJsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UiKSwgVENMX1NUQVRJQyk7CisJcmV0dXJuIFRDTF9FUlJPUjsKKyAgICB9CisgICAgKnZhbHVlUCA9IGk7CisgICAgcmV0dXJuIFRDTF9PSzsKK30KKworLyoKKyAqIEZpbmQgdGhlIGZpcnN0IHdpbmRvdyBpbiB0aGUgd2luZG93IGxpc3QgdGhhdCBkaXNwbGF5cyB0aGUgYnVmZmVyLgorICovCisgICAgc3RhdGljIHdpbl9UICoKK3RjbGZpbmR3aW4oYnVmKQorICAgIGJ1Zl9UICpidWY7Cit7CisgICAgd2luX1QgKndpbjsKKworICAgIEZPUl9BTExfV0lORE9XUyh3aW4pCisgICAgeworCWlmICh3aW4tPndfYnVmZmVyID09IGJ1ZikKKwkgICAgcmV0dXJuIHdpbjsKKyAgICB9CisgICAgcmV0dXJuIGN1cndpbjsgIC8qIGtlZXAgY3VycmVudCB3aW5kb3cgY29udGV4dCAqLworfQorCisvKgorICogRG8taXQtYWxsIGZ1bmN0aW9uIGZvciAiOjp2aW06OmNvbW1hbmQiLCAiJGJ1ZiBjb21tYW5kIiBhbmQgIiR3aW4gY29tbWFuZCIuCisgKi8KKyAgICBzdGF0aWMgaW50Cit0Y2xkb2V4Y29tbWFuZChpbnRlcnAsIG9iamMsIG9ianYsIG9iam4pCisgICAgVGNsX0ludGVycAkqaW50ZXJwOworICAgIGludAkJb2JqYzsKKyAgICBUY2xfT2JqCSpDT05TVCBvYmp2W107CisgICAgaW50CQlvYmpuOworeworICAgIHRjbF9pbmZvCXNhdmVpbmZvOworICAgIGludAkJZXJyLCBmbGFnLCBub2JqczsKKyAgICBjaGFyCSphcmc7CisKKyAgICBub2JqcyA9IG9iamMgLSBvYmpuOworICAgIGlmIChub2JqcyA8IDEgfHwgbm9ianMgPiAyKQorICAgIHsKKwlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgb2Jqbiwgb2JqdiwgIj8tcXVpZXQ/IGV4Q29tbWFuZCIpOworCXJldHVybiBUQ0xfRVJST1I7CisgICAgfQorCisgICAgZmxhZyA9IDA7CisgICAgaWYgKG5vYmpzID09IDIpCisgICAgeworCWFyZyA9IFRjbF9HZXRTdHJpbmdGcm9tT2JqKG9ianZbb2Jqbl0sIE5VTEwpOworCWlmIChzdHJjbXAoYXJnLCAiLXF1aWV0IikgPT0gMCkKKwkgICAgZmxhZyA9IDE7CisJZWxzZQorCXsKKwkgICAgVGNsX1Jlc2V0UmVzdWx0KGludGVycCk7CisJICAgIFRjbF9BcHBlbmRSZXN1bHQoaW50ZXJwLCBfKCJ1bmtub3duIGZsYWc6ICIpLCBhcmcsIChjaGFyICopMCk7CisJICAgIHJldHVybiBUQ0xfRVJST1I7CisJfQorCSsrb2JqbjsKKyAgICB9CisKKyAgICBtZW1jcHkoJnNhdmVpbmZvLCAmdGNsaW5mbywgc2l6ZW9mKHRjbF9pbmZvKSk7CisgICAgdGNsaW5mby5pbnRlcnAgPSBOVUxMOworICAgIHRjbGluZm8uY3Vyd2luID0gTlVMTDsKKyAgICB0Y2xpbmZvLmN1cmJ1ZiA9IE5VTEw7CisKKyAgICBhcmcgPSBUY2xfR2V0U3RyaW5nRnJvbU9iaihvYmp2W29iam5dLCBOVUxMKTsKKyAgICBpZiAoZmxhZykKKwkrK2Vtc2dfb2ZmOworICAgIGRvX2NtZGxpbmVfY21kKChjaGFyX3UgKilhcmcpOworICAgIGlmIChmbGFnKQorCS0tZW1zZ19vZmY7CisgICAgZXJyID0gdmltZXJyb3IoaW50ZXJwKTsKKworICAgIC8qIElmIHRoZSBleCBjb21tYW5kIGNyZWF0ZWQgYSBuZXcgVGNsIGludGVycHJldGVyLCByZW1vdmUgaXQgKi8KKyAgICBpZiAodGNsaW5mby5pbnRlcnApCisJdGNsZGVsdGhpc2ludGVycCgpOworICAgIG1lbWNweSgmdGNsaW5mbywgJnNhdmVpbmZvLCBzaXplb2YodGNsX2luZm8pKTsKKyAgICB0Y2x1cGRhdGV2YXJzKCk7CisKKyAgICByZXR1cm4gZXJyOworfQorCisvKgorICogRG8taXQtYWxsIGZ1bmN0aW9uIGZvciAiOjp2aW06Om9wdGlvbiIsICIkYnVmIG9wdGlvbiIgYW5kICIkd2luIG9wdGlvbiIuCisgKi8KKyAgICBzdGF0aWMgaW50Cit0Y2xzZXRvcHRpb24oaW50ZXJwLCBvYmpjLCBvYmp2LCBvYmpuKQorICAgIFRjbF9JbnRlcnAJKmludGVycDsKKyAgICBpbnQJCW9iamM7CisgICAgVGNsX09iagkqQ09OU1Qgb2JqdltdOworICAgIGludAkJb2JqbjsKK3sKKyAgICBpbnQJCWVyciwgbm9ianMsIGlkeDsKKyAgICBjaGFyX3UJKm9wdGlvbjsKKyAgICBpbnQJCWlzbnVtOworICAgIGxvbmcJbHZhbDsKKyAgICBjaGFyX3UJKnN2YWw7CisgICAgVGNsX09iagkqcmVzb2JqOworCisgICAgZW51bSB7IE9QVF9PRkYsIE9QVF9PTiwgT1BUX1RPR0dMRSB9OworICAgIHN0YXRpYyBjaGFyICpvcHRrd1tdID0geyAib2ZmIiwgIm9uIiwgInRvZ2dsZSIsIChjaGFyICopMCB9OworCisgICAgbm9ianMgPSBvYmpjIC0gb2JqbjsKKyAgICBpZiAobm9ianMgIT0gMSAmJiBub2JqcyAhPSAyKQorICAgIHsKKwlUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgb2Jqbiwgb2JqdiwgInZpbU9wdGlvbiA/dmFsdWU/Iik7CisJcmV0dXJuIFRDTF9FUlJPUjsKKyAgICB9CisKKyAgICBvcHRpb24gPSAoY2hhcl91ICopVGNsX0dldFN0cmluZ0Zyb21PYmoob2JqdltvYmpuXSwgTlVMTCk7CisgICAgKytvYmpuOworICAgIGlzbnVtID0gZ2V0X29wdGlvbl92YWx1ZShvcHRpb24sICZsdmFsLCAmc3ZhbCwgMCk7CisgICAgZXJyID0gVENMX09LOworICAgIHN3aXRjaCAoaXNudW0pCisgICAgeworCWNhc2UgMDoKKwkgICAgVGNsX1NldFJlc3VsdChpbnRlcnAsIChjaGFyICopc3ZhbCwgVENMX1ZPTEFUSUxFKTsKKwkgICAgdmltX2ZyZWUoc3ZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgcmVzb2JqID0gVGNsX05ld0xvbmdPYmoobHZhbCk7CisJICAgIFRjbF9TZXRPYmpSZXN1bHQoaW50ZXJwLCByZXNvYmopOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBUY2xfU2V0UmVzdWx0KGludGVycCwgXygidW5rbm93biB2aW1PcHRpb24iKSwgVENMX1NUQVRJQyk7CisJICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgfQorICAgIGlmIChub2JqcyA9PSAyKQorICAgIHsKKwlpZiAoaXNudW0pCisJeworCSAgICBzdmFsID0gTlVMTDsgICAgLyogYXZvaWQgY29tcGlsZXIgd2FybmluZyAqLworCSAgICBlcnIgPSBUY2xfR2V0SW5kZXhGcm9tT2JqKGludGVycCwgb2JqdltvYmpuXSwgb3B0a3csICIiLCAwLCAmaWR4KTsKKwkgICAgaWYgKGVyciAhPSBUQ0xfT0spCisJICAgIHsKKwkJVGNsX1Jlc2V0UmVzdWx0KGludGVycCk7CisJCWVyciA9IFRjbF9HZXRMb25nRnJvbU9iaihpbnRlcnAsIG9ianZbb2Jqbl0sICZsdmFsKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHN3aXRjaCAoaWR4KQorCSAgICB7CisJCWNhc2UgT1BUX09OOgorCQkgICAgbHZhbCA9IDE7CisJCSAgICBicmVhazsKKwkJY2FzZSBPUFRfT0ZGOgorCQkgICAgbHZhbCA9IDA7CisJCSAgICBicmVhazsKKwkJY2FzZSBPUFRfVE9HR0xFOgorCQkgICAgbHZhbCA9ICFsdmFsOworCQkgICAgYnJlYWs7CisJICAgIH0KKwl9CisJZWxzZQorCSAgICBzdmFsID0gKGNoYXJfdSAqKVRjbF9HZXRTdHJpbmdGcm9tT2JqKG9ianZbb2Jqbl0sIE5VTEwpOworCWlmIChlcnIgPT0gVENMX09LKQorCXsKKwkgICAgc2V0X29wdGlvbl92YWx1ZShvcHRpb24sIGx2YWwsIHN2YWwsIE9QVF9MT0NBTCk7CisJICAgIGVyciA9IHZpbWVycm9yKGludGVycCk7CisJfQorICAgIH0KKyAgICByZXR1cm4gZXJyOworfQorCisvKgorICogRG8taXQtYWxsIGZ1bmN0aW9uIGZvciAiOjp2aW06OmV4cHIiLCAiJGJ1ZiBleHByIiBhbmQgIiR3aW4gZXhwciIuCisgKi8KKyAgICBzdGF0aWMgaW50Cit0Y2x2aW1leHByKGludGVycCwgb2JqYywgb2Jqdiwgb2JqbikKKyAgICBUY2xfSW50ZXJwCSppbnRlcnA7CisgICAgaW50CQlvYmpjOworICAgIFRjbF9PYmoJKkNPTlNUIG9ianZbXTsKKyAgICBpbnQJCW9iam47Cit7CisjaWZkZWYgRkVBVF9FVkFMCisgICAgY2hhcgkqZXhwciwgKnN0cjsKKyNlbmRpZgorICAgIGludAkJZXJyOworCisgICAgaWYgKG9iamMgLSBvYmpuICE9IDEpCisgICAgeworCVRjbF9Xcm9uZ051bUFyZ3MoaW50ZXJwLCBvYmpuLCBvYmp2LCAidmltRXhwciIpOworCXJldHVybiBUQ0xfRVJST1I7CisgICAgfQorCisjaWZkZWYgRkVBVF9FVkFMCisgICAgZXhwciA9IFRjbF9HZXRTdHJpbmdGcm9tT2JqKG9ianZbb2Jqbl0sIE5VTEwpOworICAgIHN0ciA9IChjaGFyICopZXZhbF90b19zdHJpbmcoKGNoYXJfdSAqKWV4cHIsIE5VTEwpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKwlUY2xfU2V0UmVzdWx0KGludGVycCwgXygiaW52YWxpZCBleHByZXNzaW9uIiksIFRDTF9TVEFUSUMpOworICAgIGVsc2UKKwlUY2xfU2V0UmVzdWx0KGludGVycCwgc3RyLCBUQ0xfVk9MQVRJTEUpOworICAgIGVyciA9IHZpbWVycm9yKGludGVycCk7CisjZWxzZQorICAgIFRjbF9TZXRSZXN1bHQoaW50ZXJwLCBfKCJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiKSwgVENMX1NUQVRJQyk7CisgICAgZXJyID0gVENMX0VSUk9SOworI2VuZGlmCisKKyAgICByZXR1cm4gZXJyOworfQorCisvKgorICogQ2hlY2sgZm9yIGludGVybmFsIHZpbSBlcnJvcnMuCisgKi8KKyAgICBzdGF0aWMgaW50Cit2aW1lcnJvcihpbnRlcnApCisgICAgVGNsX0ludGVycCAqaW50ZXJwOworeworICAgIGlmIChnb3RfaW50KQorICAgIHsKKwlUY2xfU2V0UmVzdWx0KGludGVycCwgXygia2V5Ym9hcmQgaW50ZXJydXB0IiksIFRDTF9TVEFUSUMpOworCXJldHVybiBUQ0xfRVJST1I7CisgICAgfQorICAgIGVsc2UgaWYgKGRpZF9lbXNnKQorICAgIHsKKwlUY2xfU2V0UmVzdWx0KGludGVycCwgXygidmltIGVycm9yIiksIFRDTF9TVEFUSUMpOworCXJldHVybiBUQ0xfRVJST1I7CisgICAgfQorICAgIHJldHVybiBUQ0xfT0s7Cit9CisKKy8qCisgKiBGdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIHJlZmVyZW5jZSBsaXN0czoKKyAqICAgZGVscmVmKCkgLSBjYWxsYmFjayBmb3IgVGNsJ3MgRGVsZXRlQ29tbWFuZAorICogICB0Y2xnZXRyZWYoKSAtIGZpbmQvY3JlYXRlIFRjbCBjb21tYW5kIGZvciBhIHdpbl9UKiBvciBidWZfVCogb2JqZWN0CisgKiAgIHRjbGdldHdpbmRvdygpIC0gd2luZG93IGZyb250ZW5kIGZvciB0Y2xnZXRyZWYoKQorICogICB0Y2xnZXRidWZmZXIoKSAtIGJ1ZmZlciBmcm9udGVuZCBmb3IgdGNsZ2V0cmVmKCkKKyAqICAgdGNsc2V0ZGVsY21kKCkgLSBhZGQgVGNsIGNhbGxiYWNrIGNvbW1hbmQgdG8gYSB2aW0gb2JqZWN0CisgKi8KKyAgICBzdGF0aWMgdm9pZAorZGVscmVmKGNyZWYpCisgICAgQ2xpZW50RGF0YSBjcmVmOworeworICAgIHN0cnVjdCByZWYgKnJlZiA9IChzdHJ1Y3QgcmVmICopY3JlZjsKKworICAgIGlmIChyZWYtPmRlbGNtZCkKKyAgICB7CisJVGNsX0RlY3JSZWZDb3VudChyZWYtPmRlbGNtZCk7CisJcmVmLT5kZWxjbWQgPSBOVUxMOworICAgIH0KKyAgICByZWYtPmludGVycCA9IE5VTEw7Cit9CisKKyAgICBzdGF0aWMgY2hhciAqCit0Y2xnZXRyZWYoaW50ZXJwLCByZWZzdGFydFAsIHByZWZpeCwgdmltb2JqLCBwcm9jKQorICAgIFRjbF9JbnRlcnAJKmludGVycDsKKyAgICB2b2lkCSoqcmVmc3RhcnRQOwkvKiBwdHIgdG8gdGNsX3JlZiBtZW1iZXIgb2Ygd2luX1QvYnVmX1Qgc3RydWN0ICovCisgICAgY2hhcgkqcHJlZml4OwkvKiAid2luIiBvciAiYnVmIiAqLworICAgIHZvaWQJKnZpbW9iajsJLyogd2luX1QqIG9yIGJ1Zl9UKiAqLworICAgIFRjbF9PYmpDbWRQcm9jICpwcm9jOwkvKiB3aW5zZWxmY21kIG9yIGJ1ZnNlbGZjbWQgKi8KK3sKKyAgICBzdHJ1Y3QgcmVmICpyZWYsICp1bnVzZWQgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyIG5hbWVbVkFSTkFNRV9TSVpFXTsKKyAgICBUY2xfQ29tbWFuZCBjbWQ7CisKKyAgICByZWYgPSAoc3RydWN0IHJlZiAqKSgqcmVmc3RhcnRQKTsKKyAgICBpZiAocmVmID09ICZyZWZzZGVsZXRlZCkKKyAgICB7CisJVGNsX1NldFJlc3VsdChpbnRlcnAsIF8oImNhbm5vdCBjcmVhdGUgYnVmZmVyL3dpbmRvdyBjb21tYW5kOiBvYmplY3QgaXMgYmVpbmcgZGVsZXRlZCIpLCBUQ0xfU1RBVElDKTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB3aGlsZSAocmVmICE9IE5VTEwpCisgICAgeworCWlmIChyZWYtPmludGVycCA9PSBpbnRlcnApCisJICAgIGJyZWFrOworCWlmIChyZWYtPmludGVycCA9PSBOVUxMKQorCSAgICB1bnVzZWQgPSByZWY7CisJcmVmID0gcmVmLT5uZXh0OworICAgIH0KKworICAgIGlmIChyZWYpCisJc3ByaW50ZihuYW1lLCAiOjp2aW06OiVzIiwgVGNsX0dldENvbW1hbmROYW1lKGludGVycCwgcmVmLT5jbWQpKTsKKyAgICBlbHNlCisgICAgeworCWlmICh1bnVzZWQpCisJICAgIHJlZiA9IHVudXNlZDsKKwllbHNlCisJeworCSAgICByZWYgPSAoc3RydWN0IHJlZiAqKVRjbF9BbGxvYyhzaXplb2Yoc3RydWN0IHJlZikpOworI2lmIDAJLyogVGNsX0FsbG9jIGVpdGhlciBzdWNjZWVkcyBvciBkb2VzIG5vdCByZXR1cm4gKi8KKwkgICAgaWYgKCFyZWYpCisJICAgIHsKKwkJVGNsX1NldFJlc3VsdChpbnRlcnAsICJvdXQgb2YgbWVtb3J5IiwgVENMX1NUQVRJQyk7CisJCXJldHVybiBOVUxMOworCSAgICB9CisjZW5kaWYKKwkgICAgcmVmLT5pbnRlcnAgPSBOVUxMOworCSAgICByZWYtPm5leHQgPSAoc3RydWN0IHJlZiAqKSgqcmVmc3RhcnRQKTsKKwkgICAgKCpyZWZzdGFydFApID0gKHZvaWQgKilyZWY7CisJfQorCisJLyogVGhpcyBtaWdodCBicmVhayBvbiBzb21lIGV4b3RpYyBzeXN0ZW1zLi4uICovCisJc3ByaW50ZihuYW1lLCAiOjp2aW06OiVzXyVseCIsIHByZWZpeCwgKHVuc2lnbmVkIGxvbmcpdmltb2JqKTsKKwljbWQgPSBUY2xfQ3JlYXRlT2JqQ29tbWFuZChpbnRlcnAsIG5hbWUsIHByb2MsCisJICAgIChDbGllbnREYXRhKXJlZiwgKFRjbF9DbWREZWxldGVQcm9jICopZGVscmVmKTsKKwlpZiAoIWNtZCkKKwkgICAgcmV0dXJuIE5VTEw7CisKKwlyZWYtPmludGVycCA9IGludGVycDsKKwlyZWYtPmNtZCA9IGNtZDsKKwlyZWYtPmRlbGNtZCA9IE5VTEw7CisJcmVmLT52aW1vYmogPSB2aW1vYmo7CisgICAgfQorICAgIHJldHVybiBuYW1lOworfQorCisgICAgc3RhdGljIGNoYXIgKgordGNsZ2V0d2luZG93KGludGVycCwgd2luKQorICAgIFRjbF9JbnRlcnAJKmludGVycDsKKyAgICB3aW5fVAkqd2luOworeworICAgIHJldHVybiB0Y2xnZXRyZWYoaW50ZXJwLCAmKHdpbi0+dGNsX3JlZiksICJ3aW4iLCAodm9pZCAqKXdpbiwgd2luc2VsZmNtZCk7Cit9CisKKyAgICBzdGF0aWMgY2hhciAqCit0Y2xnZXRidWZmZXIoaW50ZXJwLCBidWYpCisgICAgVGNsX0ludGVycAkqaW50ZXJwOworICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgcmV0dXJuIHRjbGdldHJlZihpbnRlcnAsICYoYnVmLT50Y2xfcmVmKSwgImJ1ZiIsICh2b2lkICopYnVmLCBidWZzZWxmY21kKTsKK30KKworICAgIHN0YXRpYyBpbnQKK3RjbHNldGRlbGNtZChpbnRlcnAsIHJlZmxpc3QsIHZpbW9iaiwgZGVsY21kKQorICAgIFRjbF9JbnRlcnAJKmludGVycDsKKyAgICBzdHJ1Y3QgcmVmCSpyZWZsaXN0OworICAgIHZvaWQJKnZpbW9iajsKKyAgICBUY2xfT2JqCSpkZWxjbWQ7Cit7CisgICAgaWYgKHJlZmxpc3QgPT0gJnJlZnNkZWxldGVkKQorICAgIHsKKwlUY2xfU2V0UmVzdWx0KGludGVycCwgXygiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIiksIFRDTF9TVEFUSUMpOworCXJldHVybiBUQ0xfRVJST1I7CisgICAgfQorCisgICAgd2hpbGUgKHJlZmxpc3QgIT0gTlVMTCkKKyAgICB7CisJaWYgKHJlZmxpc3QtPmludGVycCA9PSBpbnRlcnAgJiYgcmVmbGlzdC0+dmltb2JqID09IHZpbW9iaikKKwl7CisJICAgIGlmIChyZWZsaXN0LT5kZWxjbWQpCisJCVRjbF9EZWNyUmVmQ291bnQocmVmbGlzdC0+ZGVsY21kKTsKKwkgICAgVGNsX0luY3JSZWZDb3VudChkZWxjbWQpOworCSAgICByZWZsaXN0LT5kZWxjbWQgPSBkZWxjbWQ7CisJICAgIHJldHVybiBUQ0xfT0s7CisJfQorCXJlZmxpc3QgPSByZWZsaXN0LT5uZXh0OworICAgIH0KKyAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPyAqLworICAgIEVNU0coXygiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IGNvcnJ1cHQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIikpOworICAgIFRjbF9TZXRSZXN1bHQoaW50ZXJwLCBfKCJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIiksIFRDTF9TVEFUSUMpOworICAgIHJldHVybiBUQ0xfRVJST1I7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBJL08gQ2hhbm5lbAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIGludAorY2hhbm5lbF9jbG9zZShpbnN0YW5jZSwgaW50ZXJwKQorICAgIENsaWVudERhdGEJaW5zdGFuY2U7CisgICAgVGNsX0ludGVycAkqaW50ZXJwOworeworICAgIGludAkJZXJyID0gMDsKKworICAgIC8qIGN1cnJlbnRseSBkb2VzIG5vdGhpbmcgKi8KKworICAgIGlmIChpbnN0YW5jZSAhPSBWSU1PVVQgJiYgaW5zdGFuY2UgIT0gVklNRVJSKQorICAgIHsKKwlUY2xfU2V0RXJybm8oRUJBREYpOworCWVyciA9IEVCQURGOworICAgIH0KKyAgICByZXR1cm4gZXJyOworfQorCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyBpbnQKK2NoYW5uZWxfaW5wdXQoaW5zdGFuY2UsIGJ1ZiwgYnVmc2l6LCBlcnJwdHIpCisgICAgQ2xpZW50RGF0YQlpbnN0YW5jZTsKKyAgICBjaGFyCSpidWY7CisgICAgaW50CQlidWZzaXo7CisgICAgaW50CQkqZXJycHRyOworeworCisgICAgLyogaW5wdXQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgKi8KKworICAgIFRjbF9TZXRFcnJubyhFSU5WQUwpOworICAgIGlmIChlcnJwdHIpCisJKmVycnB0ciA9IEVJTlZBTDsKKyAgICByZXR1cm4gLTE7Cit9CisKKyAgICBzdGF0aWMgaW50CitjaGFubmVsX291dHB1dChpbnN0YW5jZSwgYnVmLCBidWZzaXosIGVycnB0cikKKyAgICBDbGllbnREYXRhCWluc3RhbmNlOworICAgIGNoYXIJKmJ1ZjsKKyAgICBpbnQJCWJ1ZnNpejsKKyAgICBpbnQJCSplcnJwdHI7Cit7CisgICAgY2hhcl91CSpzdHI7CisgICAgaW50CQlyZXN1bHQ7CisKKyAgICAvKiBUaGUgYnVmZmVyIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIDAtdGVybWluYXRlZCwgYW5kIHdlIGRvbid0IGlmCisgICAgICogdGhlcmUgaXMgZW5vdWdoIHJvb20gdG8gYWRkIGEgJ1wwJy4gIFNvIHdlIGhhdmUgdG8gY3JlYXRlIGEgY29weQorICAgICAqIG9mIHRoZSBidWZmZXIuLi4KKyAgICAgKi8KKyAgICBzdHIgPSB2aW1fc3RybnNhdmUoKGNoYXJfdSAqKWJ1ZiwgYnVmc2l6KTsKKyAgICBpZiAoIXN0cikKKyAgICB7CisJVGNsX1NldEVycm5vKEVOT01FTSk7CisJaWYgKGVycnB0cikKKwkgICAgKmVycnB0ciA9IEVOT01FTTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgcmVzdWx0ID0gYnVmc2l6OworICAgIGlmIChpbnN0YW5jZSA9PSBWSU1PVVQpCisJdGNsbXNnKChjaGFyICopc3RyKTsKKyAgICBlbHNlCisgICAgaWYgKGluc3RhbmNlID09IFZJTUVSUikKKwl0Y2xlcnJtc2coKGNoYXIgKilzdHIpOworICAgIGVsc2UKKyAgICB7CisJVGNsX1NldEVycm5vKEVCQURGKTsKKwlpZiAoZXJycHRyKQorCSAgICAqZXJycHRyID0gRUJBREY7CisJcmVzdWx0ID0gLTE7CisgICAgfQorICAgIHZpbV9mcmVlKHN0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorY2hhbm5lbF93YXRjaChpbnN0YW5jZSwgbWFzaykKKyAgICBDbGllbnREYXRhCWluc3RhbmNlOworICAgIGludAkJbWFzazsKK3sKKyAgICBUY2xfU2V0RXJybm8oRUlOVkFMKTsKK30KKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgaW50CitjaGFubmVsX2dldGhhbmRsZShpbnN0YW5jZSwgZGlyZWN0aW9uLCBoYW5kbGVwdHIpCisgICAgQ2xpZW50RGF0YQlpbnN0YW5jZTsKKyAgICBpbnQJCWRpcmVjdGlvbjsKKyAgICBDbGllbnREYXRhCSpoYW5kbGVwdHI7Cit7CisgICAgVGNsX1NldEVycm5vKEVJTlZBTCk7CisgICAgcmV0dXJuIEVJTlZBTDsKK30KKworCitzdGF0aWMgVGNsX0NoYW5uZWxUeXBlIGNoYW5uZWxfdHlwZSA9Cit7CisgICAgInZpbW1lc3NhZ2UiLAorICAgIE5VTEwsICAgLyogYmxvY2ttb2RlICovCisgICAgY2hhbm5lbF9jbG9zZSwKKyAgICBjaGFubmVsX2lucHV0LAorICAgIGNoYW5uZWxfb3V0cHV0LAorICAgIE5VTEwsICAgLyogc2VlayAqLworICAgIE5VTEwsICAgLyogc2V0IG9wdGlvbiAqLworICAgIE5VTEwsICAgLyogZ2V0IG9wdGlvbiAqLworICAgIGNoYW5uZWxfd2F0Y2gsCisgICAgY2hhbm5lbF9nZXRoYW5kbGUKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIEludGVyZmFjZSB0byB2aW0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgc3RhdGljIHZvaWQKK3RjbHVwZGF0ZXZhcnMoKQoreworICAgIGNoYXIgdmFybmFtZVtWQVJOQU1FX1NJWkVdOwkvKiBtdXN0IGJlIHdyaXRlYWJsZSAqLworICAgIGNoYXIgKm5hbWU7CisKKyAgICBzdHJjcHkodmFybmFtZSwgVkFSX1JBTkdFMSk7CisgICAgVGNsX1VwZGF0ZUxpbmtlZFZhcih0Y2xpbmZvLmludGVycCwgdmFybmFtZSk7CisgICAgc3RyY3B5KHZhcm5hbWUsIFZBUl9SQU5HRTIpOworICAgIFRjbF9VcGRhdGVMaW5rZWRWYXIodGNsaW5mby5pbnRlcnAsIHZhcm5hbWUpOworICAgIHN0cmNweSh2YXJuYW1lLCBWQVJfUkFOR0UzKTsKKyAgICBUY2xfVXBkYXRlTGlua2VkVmFyKHRjbGluZm8uaW50ZXJwLCB2YXJuYW1lKTsKKworICAgIHN0cmNweSh2YXJuYW1lLCBWQVJfTEJBU0UpOworICAgIFRjbF9VcGRhdGVMaW5rZWRWYXIodGNsaW5mby5pbnRlcnAsIHZhcm5hbWUpOworCisgICAgbmFtZSA9IHRjbGdldGJ1ZmZlcih0Y2xpbmZvLmludGVycCwgY3VyYnVmKTsKKyAgICBzdHJjcHkodGNsaW5mby5jdXJidWYsIG5hbWUpOworICAgIHN0cmNweSh2YXJuYW1lLCBWQVJfQ1VSQlVGKTsKKyAgICBUY2xfVXBkYXRlTGlua2VkVmFyKHRjbGluZm8uaW50ZXJwLCB2YXJuYW1lKTsKKworICAgIG5hbWUgPSB0Y2xnZXR3aW5kb3codGNsaW5mby5pbnRlcnAsIGN1cndpbik7CisgICAgc3RyY3B5KHRjbGluZm8uY3Vyd2luLCBuYW1lKTsKKyAgICBzdHJjcHkodmFybmFtZSwgVkFSX0NVUldJTik7CisgICAgVGNsX1VwZGF0ZUxpbmtlZFZhcih0Y2xpbmZvLmludGVycCwgdmFybmFtZSk7Cit9CisKKworICAgIHN0YXRpYyBpbnQKK3RjbGluaXQoZWFwKQorICAgIGV4YXJnX1QgKmVhcDsKK3sKKyAgICBjaGFyIHZhcm5hbWVbVkFSTkFNRV9TSVpFXTsJLyogVGNsX0xpbmtWYXIgcmVxdWlyZXMgd3JpdGVhYmxlIHZhcm5hbWUgKi8KKyAgICBjaGFyICpuYW1lOworCisjaWZkZWYgRFlOQU1JQ19UQ0wKKyAgICBpZiAoIXRjbF9lbmFibGVkKFRSVUUpKQorICAgIHsKKwlFTVNHKF8oIkU1NzE6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBUY2wgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICghdGNsaW5mby5pbnRlcnApCisgICAgeworCVRjbF9JbnRlcnAgKmludGVycDsKKwlzdGF0aWMgVGNsX0NoYW5uZWwgY2gxLCBjaDI7CisKKwkvKiByZXBsYWNlIHN0ZG91dCBhbmQgc3RkZXJyICovCisJY2gxID0gVGNsX0NyZWF0ZUNoYW5uZWwoJmNoYW5uZWxfdHlwZSwgInZpbW91dCIsIFZJTU9VVCwgVENMX1dSSVRBQkxFKTsKKwljaDIgPSBUY2xfQ3JlYXRlQ2hhbm5lbCgmY2hhbm5lbF90eXBlLCAidmltZXJyIiwgVklNRVJSLCBUQ0xfV1JJVEFCTEUpOworCVRjbF9TZXRTdGRDaGFubmVsKGNoMSwgVENMX1NURE9VVCk7CisJVGNsX1NldFN0ZENoYW5uZWwoY2gyLCBUQ0xfU1RERVJSKTsKKworCWludGVycCA9IFRjbF9DcmVhdGVJbnRlcnAoKTsKKwlUY2xfUHJlc2VydmUoaW50ZXJwKTsKKwlpZiAoVGNsX0luaXQoaW50ZXJwKSA9PSBUQ0xfRVJST1IpCisJeworCSAgICBUY2xfUmVsZWFzZShpbnRlcnApOworCSAgICBUY2xfRGVsZXRlSW50ZXJwKGludGVycCk7CisJICAgIHJldHVybiBGQUlMOworCX0KKyNpZiAwCisJLyogVklNIHN1cmUgaXMgaW50ZXJhY3RpdmUgKi8KKwlUY2xfU2V0VmFyKGludGVycCwgInRjbF9pbnRlcmFjdGl2ZSIsICIxIiwgVENMX0dMT0JBTF9PTkxZKTsKKyNlbmRpZgorCisJVGNsX1NldENoYW5uZWxPcHRpb24oaW50ZXJwLCBjaDEsICItYnVmZmVyaW5nIiwgImxpbmUiKTsKKwlUY2xfU2V0Q2hhbm5lbE9wdGlvbihpbnRlcnAsIGNoMiwgIi1idWZmZXJpbmciLCAibGluZSIpOworCisJLyogcmVwbGFjZSBzb21lIHN0YW5kYXJkIFRjbCBjb21tYW5kcyAqLworCVRjbF9EZWxldGVDb21tYW5kKGludGVycCwgImV4aXQiKTsKKwlUY2xfQ3JlYXRlT2JqQ29tbWFuZChpbnRlcnAsICJleGl0IiwgZXhpdGNtZCwKKwkgICAgKENsaWVudERhdGEpTlVMTCwgKFRjbF9DbWREZWxldGVQcm9jICopTlVMTCk7CisJVGNsX0RlbGV0ZUNvbW1hbmQoaW50ZXJwLCAiY2F0Y2giKTsKKwlUY2xfQ3JlYXRlT2JqQ29tbWFuZChpbnRlcnAsICJjYXRjaCIsIGNhdGNoY21kLAorCSAgICAoQ2xpZW50RGF0YSlOVUxMLCAoVGNsX0NtZERlbGV0ZVByb2MgKilOVUxMKTsKKworCS8qIG5ldyBjb21tYW5kcywgaW4gOjp2aW0gbmFtZXNwYWNlICovCisJVGNsX0NyZWF0ZU9iakNvbW1hbmQoaW50ZXJwLCAiOjp2aW06OmJ1ZmZlciIsIGJ1ZmZlcmNtZCwKKwkgICAgKENsaWVudERhdGEpTlVMTCwgKFRjbF9DbWREZWxldGVQcm9jICopTlVMTCk7CisJVGNsX0NyZWF0ZU9iakNvbW1hbmQoaW50ZXJwLCAiOjp2aW06OndpbmRvdyIsIHdpbmRvd2NtZCwKKwkgICAoQ2xpZW50RGF0YSlOVUxMLCAoVGNsX0NtZERlbGV0ZVByb2MgKilOVUxMKTsKKwlUY2xfQ3JlYXRlT2JqQ29tbWFuZChpbnRlcnAsICI6OnZpbTo6Y29tbWFuZCIsIGNvbW1hbmRjbWQsCisJICAgKENsaWVudERhdGEpTlVMTCwgKFRjbF9DbWREZWxldGVQcm9jICopTlVMTCk7CisJVGNsX0NyZWF0ZU9iakNvbW1hbmQoaW50ZXJwLCAiOjp2aW06OmJlZXAiLCBiZWVwY21kLAorCSAgIChDbGllbnREYXRhKU5VTEwsIChUY2xfQ21kRGVsZXRlUHJvYyAqKU5VTEwpOworCVRjbF9DcmVhdGVPYmpDb21tYW5kKGludGVycCwgIjo6dmltOjpvcHRpb24iLCBvcHRpb25jbWQsCisJICAgKENsaWVudERhdGEpTlVMTCwgKFRjbF9DbWREZWxldGVQcm9jICopTlVMTCk7CisJVGNsX0NyZWF0ZU9iakNvbW1hbmQoaW50ZXJwLCAiOjp2aW06OmV4cHIiLCBleHByY21kLAorCSAgIChDbGllbnREYXRhKU5VTEwsIChUY2xfQ21kRGVsZXRlUHJvYyAqKU5VTEwpOworCisJLyogImxiYXNlIiB2YXJpYWJsZSAqLworCXRjbGluZm8ubGJhc2UgPSAxOworCXN0cmNweSh2YXJuYW1lLCBWQVJfTEJBU0UpOworCVRjbF9MaW5rVmFyKGludGVycCwgdmFybmFtZSwgKGNoYXIgKikmdGNsaW5mby5sYmFzZSwgVENMX0xJTktfSU5UKTsKKworCS8qICJyYW5nZSIgdmFyaWFibGUgKi8KKwl0Y2xpbmZvLnJhbmdlX3N0YXJ0ID0gZWFwLT5saW5lMTsKKwlzdHJjcHkodmFybmFtZSwgVkFSX1JBTkdFMSk7CisJVGNsX0xpbmtWYXIoaW50ZXJwLCB2YXJuYW1lLCAoY2hhciAqKSZ0Y2xpbmZvLnJhbmdlX3N0YXJ0LCBUQ0xfTElOS19JTlR8VENMX0xJTktfUkVBRF9PTkxZKTsKKwlzdHJjcHkodmFybmFtZSwgVkFSX1JBTkdFMik7CisJVGNsX0xpbmtWYXIoaW50ZXJwLCB2YXJuYW1lLCAoY2hhciAqKSZ0Y2xpbmZvLnJhbmdlX3N0YXJ0LCBUQ0xfTElOS19JTlR8VENMX0xJTktfUkVBRF9PTkxZKTsKKwl0Y2xpbmZvLnJhbmdlX2VuZCAgID0gZWFwLT5saW5lMjsKKwlzdHJjcHkodmFybmFtZSwgVkFSX1JBTkdFMyk7CisJVGNsX0xpbmtWYXIoaW50ZXJwLCB2YXJuYW1lLCAoY2hhciAqKSZ0Y2xpbmZvLnJhbmdlX2VuZCwgVENMX0xJTktfSU5UfFRDTF9MSU5LX1JFQURfT05MWSk7CisKKwkvKiAiY3VycmVudCIgdmFyaWFibGUgKi8KKwl0Y2xpbmZvLmN1cmJ1ZiA9IFRjbF9BbGxvYyhWQVJOQU1FX1NJWkUpOworCXRjbGluZm8uY3Vyd2luID0gVGNsX0FsbG9jKFZBUk5BTUVfU0laRSk7CisJbmFtZSA9IHRjbGdldGJ1ZmZlcihpbnRlcnAsIGN1cmJ1Zik7CisJc3RyY3B5KHRjbGluZm8uY3VyYnVmLCBuYW1lKTsKKwlzdHJjcHkodmFybmFtZSwgVkFSX0NVUkJVRik7CisJVGNsX0xpbmtWYXIoaW50ZXJwLCB2YXJuYW1lLCAoY2hhciAqKSZ0Y2xpbmZvLmN1cmJ1ZiwgVENMX0xJTktfU1RSSU5HfFRDTF9MSU5LX1JFQURfT05MWSk7CisJbmFtZSA9IHRjbGdldHdpbmRvdyhpbnRlcnAsIGN1cndpbik7CisJc3RyY3B5KHRjbGluZm8uY3Vyd2luLCBuYW1lKTsKKwlzdHJjcHkodmFybmFtZSwgVkFSX0NVUldJTik7CisJVGNsX0xpbmtWYXIoaW50ZXJwLCB2YXJuYW1lLCAoY2hhciAqKSZ0Y2xpbmZvLmN1cndpbiwgVENMX0xJTktfU1RSSU5HfFRDTF9MSU5LX1JFQURfT05MWSk7CisKKwl0Y2xpbmZvLmludGVycCA9IGludGVycDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBJbnRlcnByZXRlciBhbHJlYWR5IGV4aXN0cywganVzdCB1cGRhdGUgdmFyaWFibGVzICovCisJdGNsaW5mby5yYW5nZV9zdGFydCA9IHJvdzJ0Y2woZWFwLT5saW5lMSk7CisJdGNsaW5mby5yYW5nZV9lbmQgPSByb3cydGNsKGVhcC0+bGluZTIpOworCXRjbHVwZGF0ZXZhcnMoKTsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisgICAgc3RhdGljIHZvaWQKK3RjbGVycm1zZyh0ZXh0KQorICAgIGNoYXIgKnRleHQ7Cit7CisgICAgY2hhciAqbmV4dDsKKworICAgIHdoaWxlICgobmV4dD1zdHJjaHIodGV4dCwgJ1xuJykpKQorICAgIHsKKwkqbmV4dCsrID0gJ1wwJzsKKwlFTVNHKHRleHQpOworCXRleHQgPSBuZXh0OworICAgIH0KKyAgICBpZiAoKnRleHQpCisJRU1TRyh0ZXh0KTsKK30KKworICAgIHN0YXRpYyB2b2lkCit0Y2xtc2codGV4dCkKKyAgICBjaGFyICp0ZXh0OworeworICAgIGNoYXIgKm5leHQ7CisKKyAgICB3aGlsZSAoKG5leHQ9c3RyY2hyKHRleHQsICdcbicpKSkKKyAgICB7CisJKm5leHQrKyA9ICdcMCc7CisJTVNHKHRleHQpOworCXRleHQgPSBuZXh0OworICAgIH0KKyAgICBpZiAoKnRleHQpCisJTVNHKHRleHQpOworfQorCisgICAgc3RhdGljIHZvaWQKK3RjbGRlbHRoaXNpbnRlcnAoKQoreworICAgIGlmICghVGNsX0ludGVycERlbGV0ZWQodGNsaW5mby5pbnRlcnApKQorCVRjbF9EZWxldGVJbnRlcnAodGNsaW5mby5pbnRlcnApOworICAgIFRjbF9SZWxlYXNlKHRjbGluZm8uaW50ZXJwKTsKKyAgICAvKiBUaGUgaW50ZXJwcmV0ZXIgaXMgbm93IGdldHMgZGVsZXRlZC4gIEFsbCByZWdpc3RlcmVkIGNvbW1hbmRzIChlc3AuCisgICAgICogd2luZG93IGFuZCBidWZmZXIgY29tbWFuZHMpIGFyZSBkZWxldGVkLCB0cmlnZ2VyaW5nIHRoZWlyIGRlbGV0aW9uCisgICAgICogY2FsbGJhY2ssIHdoaWNoIGRlbGV0ZXMgYWxsIHJlZnMgcG9pbnRpbmcgdG8gdGhpcyBpbnRlcnByZXRlci4KKyAgICAgKiBXZSBjb3VsZCBnYXJiYWdlLWNvbGxlY3QgdGhlIHVudXNlZCByZWYgc3RydWN0cyBpbiBhbGwgd2luZG93cyBhbmQKKyAgICAgKiBidWZmZXJzLCBidXQgdW5sZXNzIHRoZSB1c2VyIGNyZWF0ZXMgaHVuZHJlZHMgb2Ygc3ViLWludGVycHJldGVycworICAgICAqIGFsbCByZWZlcmluZyB0byBsb3RzIG9mIHdpbmRvd3MgYW5kIGJ1ZmZlcnMsIHRoaXMgaXMgaGFyZGx5IHdvcnRoCisgICAgICogdGhlIGVmZm9ydC4gIFVudXNlZCByZWZzIGFyZSByZWN5Y2xlZCBieSBvdGhlciBpbnRlcnByZXRlcnMsIGFuZAorICAgICAqIGFsbCByZWZzIGFyZSBmcmVlJ2Qgd2hlbiB0aGUgd2luZG93L2J1ZmZlciBnZXRzIGNsb3NlZCBieSB2aW0uCisgICAgICovCisKKyAgICB0Y2xpbmZvLmludGVycCA9IE5VTEw7CisgICAgVGNsX0ZyZWUodGNsaW5mby5jdXJidWYpOworICAgIFRjbF9GcmVlKHRjbGluZm8uY3Vyd2luKTsKKyAgICB0Y2xpbmZvLmN1cmJ1ZiA9IHRjbGluZm8uY3Vyd2luID0gTlVMTDsKK30KKworICAgIHN0YXRpYyBpbnQKK3RjbGV4aXQoZXJyb3IpCisgICAgaW50IGVycm9yOworeworICAgIGludCBuZXdlcnIgPSBPSzsKKworICAgIGlmIChlcnJvciA9PSBUQ0xfRVhJVCApCisgICAgeworCWludCByZXR2YWw7CisJY2hhciBidWZbMzJdOworCVRjbF9PYmogKnJvYmo7CisKKwlyb2JqID0gVGNsX0dldE9ialJlc3VsdCh0Y2xpbmZvLmludGVycCk7CisJaWYoIFRjbF9HZXRJbnRGcm9tT2JqKHRjbGluZm8uaW50ZXJwLCByb2JqLCAmcmV0dmFsKSAhPSBUQ0xfT0sgKQorCXsKKwkgICAgRU1TRyhfKCJFMjgxOiBUQ0wgRVJST1I6IGV4aXQgY29kZSBpcyBub3QgaW50IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLm9yZyIpKTsKKwkgICAgbmV3ZXJyID0gRkFJTDsKKwl9CisJZWxzZQorCXsKKwkgICAgc3ByaW50ZihidWYsICJFNTcyOiBleGl0IGNvZGUgJWQiLCByZXR2YWwpOworCSAgICB0Y2xlcnJtc2coYnVmKTsKKwkgICAgaWYgKHJldHZhbCA9PSAwICkKKwkgICAgeworCQlkaWRfZW1zZyA9IDA7CisJCW5ld2VyciA9IE9LOworCSAgICB9CisJICAgIGVsc2UKKwkJbmV3ZXJyID0gRkFJTDsKKwl9CisKKwl0Y2xkZWx0aGlzaW50ZXJwKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY2hhciAqcmVzdWx0OworCisJcmVzdWx0ID0gVGNsX0dldFN0cmluZ1Jlc3VsdCh0Y2xpbmZvLmludGVycCk7CisJaWYgKGVycm9yID09IFRDTF9PSykKKwl7CisJICAgIHRjbG1zZyhyZXN1bHQpOworCSAgICBuZXdlcnIgPSBPSzsKKwl9CisJZWxzZQorCXsKKwkgICAgdGNsZXJybXNnKHJlc3VsdCk7CisJICAgIG5ld2VyciA9IEZBSUw7CisJfQorICAgIH0KKworICAgIHJldHVybiBuZXdlcnI7Cit9CisKKy8qCisgKiAiOnRjbCIKKyAqLworICAgIHZvaWQKK2V4X3RjbChlYXApCisgICAgZXhhcmdfVCAqZWFwOworeworICAgIGNoYXJfdQkqc2NyaXB0OworICAgIGludAkJZXJyOworCisgICAgc2NyaXB0ID0gc2NyaXB0X2dldChlYXAsIGVhcC0+YXJnKTsKKyAgICBpZiAoIWVhcC0+c2tpcCkKKyAgICB7CisJZXJyID0gdGNsaW5pdChlYXApOworCWlmIChlcnIgPT0gT0spCisJeworCSAgICBUY2xfQWxsb3dFeGNlcHRpb25zKHRjbGluZm8uaW50ZXJwKTsKKwkgICAgaWYgKHNjcmlwdCA9PSBOVUxMKQorCQllcnIgPSBUY2xfRXZhbCh0Y2xpbmZvLmludGVycCwgKGNoYXIgKillYXAtPmFyZyk7CisJICAgIGVsc2UKKwkJZXJyID0gVGNsX0V2YWwodGNsaW5mby5pbnRlcnAsIChjaGFyICopc2NyaXB0KTsKKwkgICAgZXJyID0gdGNsZXhpdChlcnIpOworCX0KKyAgICB9CisgICAgdmltX2ZyZWUoc2NyaXB0KTsKK30KKworLyoKKyAqICI6dGNsZmlsZSIKKyAqLworICAgIHZvaWQKK2V4X3RjbGZpbGUoZWFwKQorICAgIGV4YXJnX1QgKmVhcDsKK3sKKyAgICBjaGFyICpmaWxlID0gKGNoYXIgKillYXAtPmFyZzsKKyAgICBpbnQgZXJyOworCisgICAgZXJyID0gdGNsaW5pdChlYXApOworICAgIGlmIChlcnIgPT0gT0spCisgICAgeworCVRjbF9BbGxvd0V4Y2VwdGlvbnModGNsaW5mby5pbnRlcnApOworCWVyciA9IFRjbF9FdmFsRmlsZSh0Y2xpbmZvLmludGVycCwgZmlsZSk7CisJZXJyID0gdGNsZXhpdChlcnIpOworICAgIH0KK30KKworLyoKKyAqICI6dGNsZG8iCisgKi8KKyAgICB2b2lkCitleF90Y2xkbyhlYXApCisgICAgZXhhcmdfVCAqZWFwOworeworICAgIGNoYXIJKnNjcmlwdCwgKmxpbmU7CisgICAgaW50CQllcnIsIHJzLCByZSwgbG51bTsKKyAgICBjaGFyCXZhcl9sbnVtW1ZBUk5BTUVfU0laRV07IC8qIG11c3QgYmUgd3JpdGVhYmxlIG1lbW9yeSAqLworICAgIGNoYXIJdmFyX2xpbmVbVkFSTkFNRV9TSVpFXTsKKyAgICBsaW5lbnJfVAlmaXJzdF9saW5lID0gMDsKKyAgICBsaW5lbnJfVAlsYXN0X2xpbmUgPSAwOworCisgICAgcnMgPSBlYXAtPmxpbmUxOworICAgIHJlID0gZWFwLT5saW5lMjsKKyAgICBzY3JpcHQgPSAoY2hhciAqKWVhcC0+YXJnOworICAgIHN0cmNweSh2YXJfbG51bSwgVkFSX0NVUkxOVU0pOworICAgIHN0cmNweSh2YXJfbGluZSwgVkFSX0NVUkxJTkUpOworCisgICAgZXJyID0gdGNsaW5pdChlYXApOworICAgIGlmIChlcnIgIT0gT0spCisJcmV0dXJuOworCisgICAgbG51bSA9IHJvdzJ0Y2wocnMpOworICAgIFRjbF9MaW5rVmFyKHRjbGluZm8uaW50ZXJwLCB2YXJfbG51bSwgKGNoYXIgKikmbG51bSwgVENMX0xJTktfSU5UfFRDTF9MSU5LX1JFQURfT05MWSk7CisgICAgZXJyID0gVENMX09LOworICAgIGlmICh1X3NhdmUoKGxpbmVucl9UKShycy0xKSwgKGxpbmVucl9UKShyZSsxKSkgIT0gT0spCisgICAgeworCVRjbF9TZXRSZXN1bHQodGNsaW5mby5pbnRlcnAsIF8oImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iKSwgVENMX1NUQVRJQyk7CisJZXJyID0gVENMX0VSUk9SOworICAgIH0KKyAgICB3aGlsZSAoZXJyID09IFRDTF9PSyAgJiYgIHJzIDw9IHJlKQorICAgIHsKKwlsaW5lID0gKGNoYXIgKiltbF9nZXRfYnVmKGN1cmJ1ZiwgKGxpbmVucl9UKXJzLCBGQUxTRSk7CisJaWYgKCFsaW5lKQorCXsKKwkgICAgVGNsX1NldFJlc3VsdCh0Y2xpbmZvLmludGVycCwgXygiY2Fubm90IGdldCBsaW5lIiksIFRDTF9TVEFUSUMpOworCSAgICBlcnIgPSBUQ0xfRVJST1I7CisJICAgIGJyZWFrOworCX0KKwlUY2xfU2V0VmFyKHRjbGluZm8uaW50ZXJwLCB2YXJfbGluZSwgbGluZSwgMCk7CisJVGNsX0FsbG93RXhjZXB0aW9ucyh0Y2xpbmZvLmludGVycCk7CisJZXJyID0gVGNsX0V2YWwodGNsaW5mby5pbnRlcnAsIHNjcmlwdCk7CisJaWYgKGVyciAhPSBUQ0xfT0spCisJICAgIGJyZWFrOworCWxpbmUgPSBUY2xfR2V0VmFyKHRjbGluZm8uaW50ZXJwLCB2YXJfbGluZSwgMCk7CisJaWYgKGxpbmUpCisJeworCSAgICBpZiAobWxfcmVwbGFjZSgobGluZW5yX1QpcnMsIChjaGFyX3UgKilsaW5lLCBUUlVFKSAhPSBPSykKKwkgICAgeworCQlUY2xfU2V0UmVzdWx0KHRjbGluZm8uaW50ZXJwLCBfKCJjYW5ub3QgcmVwbGFjZSBsaW5lIiksIFRDTF9TVEFUSUMpOworCQllcnIgPSBUQ0xfRVJST1I7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChmaXJzdF9saW5lID09IDApCisJCWZpcnN0X2xpbmUgPSByczsKKwkgICAgbGFzdF9saW5lID0gcnM7CisJfQorCSsrcnM7CisJKytsbnVtOworCVRjbF9VcGRhdGVMaW5rZWRWYXIodGNsaW5mby5pbnRlcnAsIHZhcl9sbnVtKTsKKyAgICB9CisgICAgaWYgKGZpcnN0X2xpbmUpCisJY2hhbmdlZF9saW5lcyhmaXJzdF9saW5lLCAwLCBsYXN0X2xpbmUgKyAxLCAobG9uZykwKTsKKworICAgIFRjbF9VbnNldFZhcih0Y2xpbmZvLmludGVycCwgdmFyX2xpbmUsIDApOworICAgIFRjbF9VbmxpbmtWYXIodGNsaW5mby5pbnRlcnAsIHZhcl9sbnVtKTsKKyAgICBpZiAoZXJyID09IFRDTF9PSykKKwlUY2xfUmVzZXRSZXN1bHQodGNsaW5mby5pbnRlcnApOworCisgICAgKHZvaWQpdGNsZXhpdChlcnIpOworfQorCisgICAgc3RhdGljIHZvaWQKK3RjbGRlbGFsbHJlZnMocmVmKQorICAgIHN0cnVjdCByZWYgKnJlZjsKK3sKKyAgICBzdHJ1Y3QgcmVmCSpuZXh0OworICAgIGludAkJZXJyOworICAgIGNoYXIJKnJlc3VsdDsKKworICAgIHdoaWxlIChyZWYgIT0gTlVMTCkKKyAgICB7CisJbmV4dCA9IHJlZi0+bmV4dDsKKwlpZiAocmVmLT5pbnRlcnApCisJeworCSAgICBpZiAocmVmLT5kZWxjbWQpCisJICAgIHsKKwkJZXJyID0gVGNsX0dsb2JhbEV2YWxPYmoocmVmLT5pbnRlcnAsIHJlZi0+ZGVsY21kKTsKKwkJaWYgKGVyciAhPSBUQ0xfT0spCisJCXsKKwkJICAgIHJlc3VsdCA9IFRjbF9HZXRTdHJpbmdSZXN1bHQocmVmLT5pbnRlcnApOworCQkgICAgaWYgKHJlc3VsdCkKKwkJCXRjbGVycm1zZyhyZXN1bHQpOworCQl9CisJCVRjbF9EZWNyUmVmQ291bnQocmVmLT5kZWxjbWQpOworCQlyZWYtPmRlbGNtZCA9IE5VTEw7CisJICAgIH0KKwkgICAgVGNsX0RlbGV0ZUNvbW1hbmRGcm9tVG9rZW4ocmVmLT5pbnRlcnAsIHJlZi0+Y21kKTsKKwl9CisJVGNsX0ZyZWUoKGNoYXIgKilyZWYpOworCXJlZiA9IG5leHQ7CisgICAgfQorfQorCisgICAgdm9pZAordGNsX2J1ZmZlcl9mcmVlKGJ1ZikKKyAgICBidWZfVCAqYnVmOworeworICAgIHN0cnVjdCByZWYgKnJlZmxpc3Q7CisKKyNpZmRlZiBEWU5BTUlDX1RDTAorICAgIGlmICghc3R1YnNfaW5pdGlhbGl6ZWQpCS8qIE5vdCB1c2luZyBUY2wsIG5vdGhpbmcgdG8gZG8uICovCisJcmV0dXJuOworI2VuZGlmCisKKyAgICByZWZsaXN0ID0gKHN0cnVjdCByZWYqKShidWYtPnRjbF9yZWYpOworICAgIGlmIChyZWZsaXN0ICE9ICZyZWZzZGVsZXRlZCkKKyAgICB7CisJYnVmLT50Y2xfcmVmID0gKHZvaWQgKikmcmVmc2RlbGV0ZWQ7CisJdGNsZGVsYWxscmVmcyhyZWZsaXN0KTsKKwlidWYtPnRjbF9yZWYgPSBOVUxMOworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK3RjbF93aW5kb3dfZnJlZSh3aW4pCisgICAgd2luX1QgKndpbjsKK3sKKyAgICBzdHJ1Y3QgcmVmICpyZWZsaXN0OworCisjaWZkZWYgRFlOQU1JQ19UQ0wKKyAgICBpZiAoIXN0dWJzX2luaXRpYWxpemVkKQkvKiBOb3QgdXNpbmcgVGNsLCBub3RoaW5nIHRvIGRvLiAqLworCXJldHVybjsKKyNlbmRpZgorCisgICAgcmVmbGlzdCA9IChzdHJ1Y3QgcmVmKikod2luLT50Y2xfcmVmKTsKKyAgICBpZiAocmVmbGlzdCAhPSAmcmVmc2RlbGV0ZWQpCisgICAgeworCXdpbi0+dGNsX3JlZiA9ICh2b2lkICopJnJlZnNkZWxldGVkOworCXRjbGRlbGFsbHJlZnMocmVmbGlzdCk7CisJd2luLT50Y2xfcmVmID0gTlVMTDsKKyAgICB9Cit9CisjZW5kaWYKKworLyogVGhlIEVuZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lmX3hjbWRzcnYuYyBiL3NyYy9pZl94Y21kc3J2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyMTM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pZl94Y21kc3J2LmMKQEAgLTAsMCArMSwxNDQxIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKiBYIGNvbW1hbmQgc2VydmVyIGJ5IEZsZW1taW5nIE1hZHNlbgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqCisgKiBpZl94Y21kc3J2LmM6IEZ1bmN0aW9ucyBmb3IgcGFzc2luZyBjb21tYW5kcyB0aHJvdWdoIGFuIFgxMSBkaXNwbGF5LgorICoKKyAqLworCisjaW5jbHVkZSAidmltLmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgorCisjaWYgZGVmaW5lZChGRUFUX0NMSUVOVFNFUlZFUikgfHwgZGVmaW5lZChQUk9UTykKKworIyBpZmRlZiBGRUFUX1gxMQorIyAgaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorIyAgaW5jbHVkZSA8WDExL1hhdG9tLmg+CisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZChIQVZFX1NZU19TRUxFQ1RfSCkgJiYgXAorCSghZGVmaW5lZChIQVZFX1NZU19USU1FX0gpIHx8IGRlZmluZWQoU1lTX1NFTEVDVF9XSVRIX1NZU19USU1FKSkKKyMgIGluY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyMgZW5kaWYKKworIyBpZm5kZWYgSEFWRV9TRUxFQ1QKKyMgIGlmZGVmIEhBVkVfU1lTX1BPTExfSAorIyAgIGluY2x1ZGUgPHN5cy9wb2xsLmg+CisjICBlbHNlCisjICAgaWZkZWYgSEFWRV9QT0xMX0gKKyMgICAgaW5jbHVkZSA8cG9sbC5oPgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorCisvKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIHByb2NlZHVyZXMgdGhhdCBpbXBsZW1lbnQgdGhlIGNvbW1hbmQgc2VydmVyIGZ1bmN0aW9uYWxpdHkKKyAqIG9mIFZpbSB3aGVuIGluIGNvbnRhY3Qgd2l0aCBhbiBYMTEgc2VydmVyLgorICoKKyAqIEFkYXB0ZWQgZnJvbSBUQ0wvVEsncyBzZW5kIGNvbW1hbmQgIGluIHRrU2VuZC5jIG9mIHRoZSB0ayAzLjYgZGlzdHJpYnV0aW9uLgorICogQWRhcHRlZCBmb3IgdXNlIGluIFZpbSBieSBGbGVtbWluZyBNYWRzZW4uIFByb3RvY29sIGNoYW5nZWQgdG8gdGhhdCBvZiB0ayA0CisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OS0xOTkzIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKKyAqIGxpY2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUKKyAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluCisgKiBhbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFVOSVZFUlNJVFkgT0YgQ0FMSUZPUk5JQSBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorICogRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFRIRSBVTklWRVJTSVRZIE9GCisgKiBDQUxJRk9STklBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgSEFTIE5PIE9CTElHQVRJT04gVE8KKyAqIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKyAqLworCisKKy8qCisgKiBXaGVuIGEgcmVzdWx0IGlzIGJlaW5nIGF3YWl0ZWQgZnJvbSBhIHNlbnQgY29tbWFuZCwgb25lIG9mCisgKiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgaXMgcHJlc2VudCBvbiBhIGxpc3Qgb2YgYWxsIG91dHN0YW5kaW5nCisgKiBzZW50IGNvbW1hbmRzLiAgVGhlIGluZm9ybWF0aW9uIGluIHRoZSBzdHJ1Y3R1cmUgaXMgdXNlZCB0bworICogcHJvY2VzcyB0aGUgcmVzdWx0IHdoZW4gaXQgYXJyaXZlcy4gIFlvdSdyZSBwcm9iYWJseSB3b25kZXJpbmcKKyAqIGhvdyB0aGVyZSBjb3VsZCBldmVyIGJlIG11bHRpcGxlIG91dHN0YW5kaW5nIHNlbnQgY29tbWFuZHMuCisgKiBUaGlzIGNvdWxkIGhhcHBlbiBpZiBWaW0gaW5zdGFuY2VzIGludm9rZSBlYWNoIG90aGVyIHJlY3Vyc2l2ZWx5LgorICogSXQncyB1bmxpa2VseSwgYnV0IHBvc3NpYmxlLgorICovCisKK3R5cGVkZWYgc3RydWN0IFBlbmRpbmdDb21tYW5kCit7CisgICAgaW50CSAgICBzZXJpYWw7CS8qIFNlcmlhbCBudW1iZXIgZXhwZWN0ZWQgaW4gcmVzdWx0LiAqLworICAgIGludAkgICAgY29kZTsJLyogUmVzdWx0IENvZGUuIDAgaXMgT0sgKi8KKyAgICBjaGFyX3UgICpyZXN1bHQ7CS8qIFN0cmluZyByZXN1bHQgZm9yIGNvbW1hbmQgKG1hbGxvYydlZCkuCisJCQkgKiBOVUxMIG1lYW5zIGNvbW1hbmQgc3RpbGwgcGVuZGluZy4gKi8KKyAgICBzdHJ1Y3QgUGVuZGluZ0NvbW1hbmQgKm5leHRQdHI7CisJCQkvKiBOZXh0IGluIGxpc3Qgb2YgYWxsIG91dHN0YW5kaW5nIGNvbW1hbmRzLgorCQkJICogTlVMTCBtZWFucyBlbmQgb2YgbGlzdC4gKi8KK30gUGVuZGluZ0NvbW1hbmQ7CisKK3N0YXRpYyBQZW5kaW5nQ29tbWFuZCAqcGVuZGluZ0NvbW1hbmRzID0gTlVMTDsKKwkJCQkvKiBMaXN0IG9mIGFsbCBjb21tYW5kcyBjdXJyZW50bHkKKwkJCQkgKiBiZWluZyB3YWl0ZWQgZm9yLiAqLworCisvKgorICogVGhlIGluZm9ybWF0aW9uIGJlbG93IGlzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBwcm9jZXNzZXMKKyAqIGR1cmluZyAic2VuZCIgY29tbWFuZHMuICBFYWNoIHByb2Nlc3Mga2VlcHMgYSBwcml2YXRlIHdpbmRvdywgbmV2ZXIKKyAqIGV2ZW4gbWFwcGVkLCB3aXRoIG9uZSBwcm9wZXJ0eSwgIkNvbW0iLiAgV2hlbiBhIGNvbW1hbmQgaXMgc2VudCB0bworICogYW4gaW50ZXJwcmV0ZXIsIHRoZSBjb21tYW5kIGlzIGFwcGVuZGVkIHRvIHRoZSBjb21tIHByb3BlcnR5IG9mIHRoZQorICogY29tbXVuaWNhdGlvbiB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlcnAncyBwcm9jZXNzLiAgU2ltaWxhcmx5LAorICogd2hlbiBhIHJlc3VsdCBpcyByZXR1cm5lZCBmcm9tIGEgc2VudCBjb21tYW5kLCBpdCBpcyBhbHNvIGFwcGVuZGVkCisgKiB0byB0aGUgY29tbSBwcm9wZXJ0eS4KKyAqCisgKiBFYWNoIGNvbW1hbmQgYW5kIGVhY2ggcmVzdWx0IHRha2VzIHRoZSBmb3JtIG9mIEFTQ0lJIHRleHQuICBGb3IgYQorICogY29tbWFuZCwgdGhlIHRleHQgY29uc2lzdHMgb2YgYSBudWwgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHNldmVyYWwKKyAqIG51bC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZ3MuICBUaGUgZmlyc3Qgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZQorICogc2luZ2xlIGxldHRlciAiYyIgZm9yIGFuIGV4cHJlc3Npb24sIG9yICJrIiBmb3Iga2V5c3Ryb2tlcy4gIFN1YnNlcXVlbnQKKyAqIHN0cmluZ3MgaGF2ZSB0aGUgZm9ybSAib3B0aW9uIHZhbHVlIiB3aGVyZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlCisgKiBzdXBwb3J0ZWQ6CisgKgorICogLXIgY29tbVdpbmRvdyBzZXJpYWwKKyAqCisgKglUaGlzIG9wdGlvbiBtZWFucyB0aGF0IGEgcmVzcG9uc2Ugc2hvdWxkIGJlIHNlbnQgdG8gdGhlIHdpbmRvdworICoJd2hvc2UgWCBpZGVudGlmaWVyIGlzICJjb21tV2luZG93IiAoaW4gaGV4KSwgYW5kIHRoZSByZXNwb25zZSBzaG91bGQKKyAqCWJlIGlkZW50aWZpZWQgd2l0aCB0aGUgc2VyaWFsIG51bWJlciBnaXZlbiBieSAic2VyaWFsIiAoaW4gZGVjaW1hbCkuCisgKglJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQgdGhlbiB0aGUgc2VuZCBpcyBhc3luY2hyb25vdXMgYW5kCisgKglubyByZXNwb25zZSBpcyBzZW50LgorICoKKyAqIC1uIG5hbWUKKyAqCSJOYW1lIiBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gZm9yIHdoaWNoIHRoZSBjb21tYW5kIGlzCisgKglpbnRlbmRlZC4gIFRoaXMgb3B0aW9uIG11c3QgYmUgcHJlc2VudC4KKyAqCisgKiAtcyBzY3JpcHQKKyAqCSJTY3JpcHQiIGlzIHRoZSBzY3JpcHQgdG8gYmUgZXhlY3V0ZWQuICBUaGlzIG9wdGlvbiBtdXN0IGJlCisgKglwcmVzZW50LiAgVGFrZW4gYXMgYSBzZXJpZXMgb2Yga2V5c3Ryb2tlcyBpbiBhICJrIiBjb21tYW5kIHdoZXJlCisgKgk8S2V5PidzIGFyZSBleHBhbmRlZAorICoKKyAqIFRoZSBvcHRpb25zIG1heSBhcHBlYXIgaW4gYW55IG9yZGVyLiAgVGhlIC1uIGFuZCAtcyBvcHRpb25zIG11c3QgYmUKKyAqIHByZXNlbnQsIGJ1dCAtciBtYXkgYmUgb21pdHRlZCBmb3IgYXN5bmNocm9ub3VzIFJQQ3MuICBGb3IgY29tcGF0aWJpbGl0eQorICogd2l0aCBmdXR1cmUgcmVsZWFzZXMgdGhhdCBtYXkgYWRkIG5ldyBmZWF0dXJlcywgdGhlcmUgbWF5IGJlIGFkZGl0aW9uYWwKKyAqIG9wdGlvbnMgcHJlc2VudDsgIGFzIGxvbmcgYXMgdGhleSBzdGFydCB3aXRoIGEgIi0iIGNoYXJhY3RlciwgdGhleSB3aWxsCisgKiBiZSBpZ25vcmVkLgorICoKKyAqIEEgcmVzdWx0IGFsc28gY29uc2lzdHMgb2YgYSB6ZXJvIGNoYXJhY3RlciBmb2xsb3dlZCBieSBzZXZlcmFsIG51bGwtCisgKiB0ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZ3MuICBUaGUgZmlyc3Qgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBzaW5nbGUKKyAqIGxldHRlciAiciIuICBTdWJzZXF1ZW50IHN0cmluZ3MgaGF2ZSB0aGUgZm9ybSAib3B0aW9uIHZhbHVlIiB3aGVyZQorICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisgKgorICogLXMgc2VyaWFsCisgKglJZGVudGlmaWVzIHRoZSBjb21tYW5kIGZvciB3aGljaCB0aGlzIGlzIHRoZSByZXN1bHQuICBJdCBpcyB0aGUKKyAqCXNhbWUgYXMgdGhlICJzZXJpYWwiIGZpZWxkIGZyb20gdGhlIC1zIG9wdGlvbiBpbiB0aGUgY29tbWFuZC4gIFRoaXMKKyAqCW9wdGlvbiBtdXN0IGJlIHByZXNlbnQuCisgKgorICogLXIgcmVzdWx0CisgKgkiUmVzdWx0IiBpcyB0aGUgcmVzdWx0IHN0cmluZyBmb3IgdGhlIHNjcmlwdCwgd2hpY2ggbWF5IGJlIGVpdGhlcgorICoJYSByZXN1bHQgb3IgYW4gZXJyb3IgbWVzc2FnZS4gIElmIHRoaXMgZmllbGQgaXMgb21pdHRlZCB0aGVuIGl0CisgKglkZWZhdWx0cyB0byBhbiBlbXB0eSBzdHJpbmcuCisgKgorICogLWMgY29kZQorICoJMDogZm9yIE9LLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorICoJMTogZm9yIGVycm9yOiBSZXN1bHQgaXMgdGhlIGxhc3QgZXJyb3IKKyAqCisgKiAtaSBlcnJvckluZm8KKyAqIC1lIGVycm9yQ29kZQorICoJTm90IGFwcGxpY2FibGUgZm9yIFZpbQorICoKKyAqIE9wdGlvbnMgbWF5IGFwcGVhciBpbiBhbnkgb3JkZXIsIGFuZCBvbmx5IHRoZSAtcyBvcHRpb24gbXVzdCBiZQorICogcHJlc2VudC4gIEFzIHdpdGggY29tbWFuZHMsIHRoZXJlIG1heSBiZSBhZGRpdGlvbmFsIG9wdGlvbnMgYmVzaWRlcworICogdGhlc2U7ICB1bmtub3duIG9wdGlvbnMgYXJlIGlnbm9yZWQuCisgKi8KKworLyoKKyAqIE1heGltdW0gc2l6ZSBwcm9wZXJ0eSB0aGF0IGNhbiBiZSByZWFkIGF0IG9uZSB0aW1lIGJ5CisgKiB0aGlzIG1vZHVsZToKKyAqLworCisjZGVmaW5lIE1BWF9QUk9QX1dPUkRTIDEwMDAwMAorCitzdHJ1Y3QgU2VydmVyUmVwbHkKK3sKKyAgICBXaW5kb3cgIGlkOworICAgIGdhcnJheV9UIHN0cmluZ3M7Cit9Oworc3RhdGljIGdhcnJheV9UIHNlcnZlclJlcGx5ID0geyAwLCAwLCAwLCAwLCAwIH07CitlbnVtIFNlcnZlclJlcGx5T3AgeyBTUk9QX0ZpbmQsIFNST1BfQWRkLCBTUk9QX0RlbGV0ZSB9OworCit0eXBlZGVmIGludCAoKkVuZENvbmQpIF9fQVJHUygodm9pZCAqKSk7CisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgcHJvY2VkdXJlcyBkZWZpbmVkIGxhdGVyIGluIHRoaXMgZmlsZToKKyAqLworCitzdGF0aWMgV2luZG93CUxvb2t1cE5hbWUgX19BUkdTKChEaXNwbGF5ICpkcHksIGNoYXJfdSAqbmFtZSwgaW50IGRlbGV0ZSwgY2hhcl91ICoqbG9vc2UpKTsKK3N0YXRpYyBpbnQJU2VuZEluaXQgX19BUkdTKChEaXNwbGF5ICpkcHkpKTsKK3N0YXRpYyBpbnQJRG9SZWdpc3Rlck5hbWUgX19BUkdTKChEaXNwbGF5ICpkcHksIGNoYXJfdSAqbmFtZSkpOworc3RhdGljIHZvaWQJRGVsZXRlQW55TGluZ2VyZXIgX19BUkdTKChEaXNwbGF5ICpkcHksIFdpbmRvdyB3KSk7CitzdGF0aWMgaW50CUdldFJlZ1Byb3AgX19BUkdTKChEaXNwbGF5ICpkcHksIGNoYXJfdSAqKnJlZ1Byb3BwLCBsb25nX3UgKm51bUl0ZW1zcCwgaW50IGRvbXNnKSk7CitzdGF0aWMgaW50CVdhaXRGb3JQZW5kIF9fQVJHUygodm9pZCAqcCkpOworc3RhdGljIGludAlXYWl0Rm9yUmVwbHkgX19BUkdTKCh2b2lkICpwKSk7CitzdGF0aWMgaW50CVdpbmRvd1ZhbGlkIF9fQVJHUygoRGlzcGxheSAqZHB5LCBXaW5kb3cgdykpOworc3RhdGljIHZvaWQJU2VydmVyV2FpdCBfX0FSR1MoKERpc3BsYXkgKmRweSwgV2luZG93IHcsIEVuZENvbmQgZW5kQ29uZCwgdm9pZCAqZW5kRGF0YSwgaW50IGxvY2FsTG9vcCwgaW50IHNlY29uZHMpKTsKK3N0YXRpYyBzdHJ1Y3QgU2VydmVyUmVwbHkgKlNlcnZlclJlcGx5RmluZCBfX0FSR1MoKFdpbmRvdyB3LCBlbnVtIFNlcnZlclJlcGx5T3Agb3ApKTsKK3N0YXRpYyBpbnQJQXBwZW5kUHJvcENhcmVmdWxseSBfX0FSR1MoKERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5kb3csIEF0b20gcHJvcGVydHksIGNoYXJfdSAqdmFsdWUsIGludCBsZW5ndGgpKTsKK3N0YXRpYyBpbnQJeF9lcnJvcl9jaGVjayBfX0FSR1MoKERpc3BsYXkgKmRweSwgWEVycm9yRXZlbnQgKmVycm9yX2V2ZW50KSk7CitzdGF0aWMgaW50CUlzU2VyaWFsTmFtZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworCisvKiBQcml2YXRlIHZhcmlhYmxlcyBmb3IgdGhlICJzZXJ2ZXIiIGZ1bmN0aW9uYWxpdHkgKi8KK3N0YXRpYyBBdG9tCXJlZ2lzdHJ5UHJvcGVydHkgPSBOb25lOworc3RhdGljIEF0b20JdmltUHJvcGVydHkgPSBOb25lOworc3RhdGljIGludAlnb3RfeF9lcnJvciA9IEZBTFNFOworCitzdGF0aWMgY2hhcl91CSplbXB0eV9wcm9wID0gKGNoYXJfdSAqKSIiOwkvKiBlbXB0eSBHZXRSZWdQcm9wKCkgcmVzdWx0ICovCisKKy8qCisgKiBBc3NvY2lhdGUgYW4gQVNDSUkgbmFtZSB3aXRoIFZpbS4gIFRyeSByZWFsIGhhcmQgdG8gZ2V0IGEgdW5pcXVlIG9uZS4KKyAqIFJldHVybnMgRkFJTCBvciBPSy4KKyAqLworICAgIGludAorc2VydmVyUmVnaXN0ZXJOYW1lKGRweSwgbmFtZSkKKyAgICBEaXNwbGF5CSpkcHk7CQkvKiBkaXNwbGF5IHRvIHJlZ2lzdGVyIHdpdGggKi8KKyAgICBjaGFyX3UJKm5hbWU7CQkvKiB0aGUgbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCBhcyBhIGJhc2UgKi8KK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQlyZXM7CisgICAgY2hhcl91CSpwID0gTlVMTDsKKworICAgIHJlcyA9IERvUmVnaXN0ZXJOYW1lKGRweSwgbmFtZSk7CisgICAgaWYgKHJlcyA8IDApCisgICAgeworCWkgPSAxOworCWRvCisJeworCSAgICBpZiAocmVzIDwgLTEgfHwgaSA+PSAxMDAwKQorCSAgICB7CisJCU1TR19BVFRSKF8oIlVuYWJsZSB0byByZWdpc3RlciBhIGNvbW1hbmQgc2VydmVyIG5hbWUiKSwKKwkJCQkJCQkgICAgICBobF9hdHRyKEhMRl9XKSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJICAgIGlmIChwID09IE5VTEwpCisJCXAgPSBhbGxvYyhTVFJMRU4obmFtZSkgKyAxMCk7CisJICAgIGlmIChwID09IE5VTEwpCisJICAgIHsKKwkJcmVzID0gLTEwOworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBzcHJpbnRmKChjaGFyICopcCwgIiVzJWQiLCBuYW1lLCBpKyspOworCSAgICByZXMgPSBEb1JlZ2lzdGVyTmFtZShkcHksIHApOworCX0KKwl3aGlsZSAocmVzIDwgMCkKKwkgICAgOworCXZpbV9mcmVlKHApOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICBzdGF0aWMgaW50CitEb1JlZ2lzdGVyTmFtZShkcHksIG5hbWUpCisgICAgRGlzcGxheQkqZHB5OworICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBXaW5kb3cJdzsKKyAgICBYRXJyb3JIYW5kbGVyIG9sZF9oYW5kbGVyOworI2RlZmluZSBNQVhfTkFNRV9MRU5HVEggMTAwCisgICAgY2hhcl91CXByb3BJbmZvW01BWF9OQU1FX0xFTkdUSCArIDIwXTsKKworICAgIGlmIChjb21tUHJvcGVydHkgPT0gTm9uZSkKKyAgICB7CisJaWYgKFNlbmRJbml0KGRweSkgPCAwKQorCSAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdW5pcXVlLCBhbmQgYXBwZW5kIGluZm8gYWJvdXQgaXQgdG8KKyAgICAgKiB0aGUgcmVnaXN0cnkgcHJvcGVydHkuICBJdCdzIGltcG9ydGFudCB0byBsb2NrIHRoZSBzZXJ2ZXIKKyAgICAgKiBoZXJlIHRvIHByZXZlbnQgY29uZmxpY3RpbmcgY2hhbmdlcyB0byB0aGUgcmVnaXN0cnkgcHJvcGVydHkuCisgICAgICogV0FSTklORzogRG8gbm90IHN0ZXAgdGhyb3VnaCB0aGlzIHdoaWxlIGRlYnVnZ2luZywgaXQgd2lsbCBoYW5ndXAgdGhlIFgKKyAgICAgKiBzZXJ2ZXIhCisgICAgICovCisgICAgWEdyYWJTZXJ2ZXIoZHB5KTsKKyAgICB3ID0gTG9va3VwTmFtZShkcHksIG5hbWUsIEZBTFNFLCBOVUxMKTsKKyAgICBpZiAodyAhPSAoV2luZG93KTApCisgICAgeworCVN0YXR1cwkJc3RhdHVzOworCWludAkJZHVtbXlJbnQ7CisJdW5zaWduZWQgaW50CWR1bW15VW5zOworCVdpbmRvdwkJZHVtbXlXaW47CisKKwkvKgorCSAqIFRoZSBuYW1lIGlzIGN1cnJlbnRseSByZWdpc3RlcmVkLiAgU2VlIGlmIHRoZSBjb21tV2luZG93CisJICogYXNzb2NpYXRlZCB3aXRoIHRoZSBuYW1lIGV4aXN0cy4gIElmIG5vdCwgb3IgaWYgdGhlIGNvbW1XaW5kb3cKKwkgKiBpcyAqb3VyKiBjb21tV2luZG93LCB0aGVuIGp1c3QgdW5yZWdpc3RlciB0aGUgb2xkIG5hbWUgKHRoaXMKKwkgKiBjb3VsZCBoYXBwZW4gaWYgYW4gYXBwbGljYXRpb24gZGllcyB3aXRob3V0IGNsZWFuaW5nIHVwIHRoZQorCSAqIHJlZ2lzdHJ5KS4KKwkgKi8KKwlvbGRfaGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoeF9lcnJvcl9jaGVjayk7CisJc3RhdHVzID0gWEdldEdlb21ldHJ5KGRweSwgdywgJmR1bW15V2luLCAmZHVtbXlJbnQsICZkdW1teUludCwKKwkJCQkgICZkdW1teVVucywgJmR1bW15VW5zLCAmZHVtbXlVbnMsICZkdW1teVVucyk7CisJKHZvaWQpWFNldEVycm9ySGFuZGxlcihvbGRfaGFuZGxlcik7CisJaWYgKHN0YXR1cyAhPSBTdWNjZXNzICYmIHcgIT0gY29tbVdpbmRvdykKKwl7CisJICAgIFhVbmdyYWJTZXJ2ZXIoZHB5KTsKKwkgICAgWEZsdXNoKGRweSk7CisJICAgIHJldHVybiAtMTsKKwl9CisJKHZvaWQpTG9va3VwTmFtZShkcHksIG5hbWUsIC8qZGVsZXRlPSovVFJVRSwgTlVMTCk7CisgICAgfQorICAgIHNwcmludGYoKGNoYXIgKilwcm9wSW5mbywgIiV4ICUuKnMiLCAoaW50X3UpY29tbVdpbmRvdywKKwkJCQkJCSAgICAgICBNQVhfTkFNRV9MRU5HVEgsIG5hbWUpOworICAgIG9sZF9oYW5kbGVyID0gWFNldEVycm9ySGFuZGxlcih4X2Vycm9yX2NoZWNrKTsKKyAgICBnb3RfeF9lcnJvciA9IEZBTFNFOworICAgIFhDaGFuZ2VQcm9wZXJ0eShkcHksIFJvb3RXaW5kb3coZHB5LCAwKSwgcmVnaXN0cnlQcm9wZXJ0eSwgWEFfU1RSSU5HLCA4LAorCQkgICAgUHJvcE1vZGVBcHBlbmQsIHByb3BJbmZvLCBTVFJMRU4ocHJvcEluZm8pICsgMSk7CisgICAgWFVuZ3JhYlNlcnZlcihkcHkpOworICAgIFhTeW5jKGRweSwgRmFsc2UpOworICAgICh2b2lkKVhTZXRFcnJvckhhbmRsZXIob2xkX2hhbmRsZXIpOworCisgICAgaWYgKCFnb3RfeF9lcnJvcikKKyAgICB7CisjaWZkZWYgRkVBVF9FVkFMCisJc2V0X3ZpbV92YXJfc3RyaW5nKFZWX1NFTkRfU0VSVkVSLCBuYW1lLCAtMSk7CisjZW5kaWYKKwlzZXJ2ZXJOYW1lID0gdmltX3N0cnNhdmUobmFtZSk7CisjaWZkZWYgRkVBVF9USVRMRQorCW5lZWRfbWFrZXRpdGxlID0gVFJVRTsKKyNlbmRpZgorCXJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gLTI7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENsZWFuIG91dCBuZXcgSUQgZnJvbSByZWdpc3RyeSBhbmQgc2V0IGl0IGFzIGNvbW0gd2luLgorICogQ2hhbmdlIGFueSByZWdpc3RlcmVkIHdpbmRvdyBJRC4KKyAqLworICAgIHZvaWQKK3NlcnZlckNoYW5nZVJlZ2lzdGVyZWRXaW5kb3coZHB5LCBuZXd3aW4pCisgICAgRGlzcGxheQkqZHB5OwkJLyogRGlzcGxheSB0byByZWdpc3RlciB3aXRoICovCisgICAgV2luZG93CW5ld3dpbjsJCS8qIFJlLXJlZ2lzdGVyIHRvIHRoaXMgSUQgKi8KK3sKKyAgICBjaGFyX3UJcHJvcEluZm9bTUFYX05BTUVfTEVOR1RIICsgMjBdOworCisgICAgY29tbVdpbmRvdyA9IG5ld3dpbjsKKworICAgIC8qIEFsd2F5cyBjYWxsIFNlbmRJbml0KCkgaGVyZSwgdG8gbWFrZSBzdXJlIGNvbW1XaW5kb3cgaXMgbWFya2VkIGFzIGEgVmltCisgICAgICogd2luZG93LiAqLworICAgIGlmIChTZW5kSW5pdChkcHkpIDwgMCkKKwlyZXR1cm47CisKKyAgICAvKiBXQVJOSU5HOiBEbyBub3Qgc3RlcCB0aHJvdWdoIHRoaXMgd2hpbGUgZGVidWdnaW5nLCBpdCB3aWxsIGhhbmd1cCB0aGUgWAorICAgICAqIHNlcnZlciEgKi8KKyAgICBYR3JhYlNlcnZlcihkcHkpOworICAgIERlbGV0ZUFueUxpbmdlcmVyKGRweSwgbmV3d2luKTsKKyAgICBpZiAoc2VydmVyTmFtZSAhPSBOVUxMKQorICAgIHsKKwkvKiBSZWluc2VydCBuYW1lIGlmIHdlIHdhcyBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKwkodm9pZClMb29rdXBOYW1lKGRweSwgc2VydmVyTmFtZSwgLypkZWxldGU9Ki9UUlVFLCBOVUxMKTsKKwlzcHJpbnRmKChjaGFyICopcHJvcEluZm8sICIleCAlLipzIiwKKwkJKGludF91KW5ld3dpbiwgTUFYX05BTUVfTEVOR1RILCBzZXJ2ZXJOYW1lKTsKKwlYQ2hhbmdlUHJvcGVydHkoZHB5LCBSb290V2luZG93KGRweSwgMCksIHJlZ2lzdHJ5UHJvcGVydHksIFhBX1NUUklORywgOCwKKwkJCVByb3BNb2RlQXBwZW5kLCAoY2hhcl91ICopcHJvcEluZm8sCisJCQlTVFJMRU4ocHJvcEluZm8pICsgMSk7CisgICAgfQorICAgIFhVbmdyYWJTZXJ2ZXIoZHB5KTsKK30KKyNlbmRpZgorCisvKgorICogU2VuZCB0byBhbiBpbnN0YW5jZSBvZiBWaW0gdmlhIHRoZSBYIGRpc3BsYXkuCisgKiBSZXR1cm5zIDAgZm9yIE9LLCBuZWdhdGl2ZSBmb3IgYW4gZXJyb3IuCisgKi8KKyAgICBpbnQKK3NlcnZlclNlbmRUb1ZpbShkcHksIG5hbWUsIGNtZCwgIHJlc3VsdCwgc2VydmVyLCBhc0V4cHIsIGxvY2FsTG9vcCwgc2lsZW50KQorICAgIERpc3BsYXkJKmRweTsJCQkvKiBXaGVyZSB0byBzZW5kLiAqLworICAgIGNoYXJfdQkqbmFtZTsJCQkvKiBXaGVyZSB0byBzZW5kLiAqLworICAgIGNoYXJfdQkqY21kOwkJCS8qIFdoYXQgdG8gc2VuZC4gKi8KKyAgICBjaGFyX3UJKipyZXN1bHQ7CQkvKiBSZXN1bHQgb2YgZXZhbCdlZCBleHByZXNzaW9uICovCisgICAgV2luZG93CSpzZXJ2ZXI7CQkvKiBBY3R1YWwgSUQgb2YgcmVjZWl2aW5nIGFwcCAqLworICAgIEJvb2wJYXNFeHByOwkJCS8qIEludGVycHJldCBhcyBrZXlzdHJva2VzIG9yIGV4cHIgPyAqLworICAgIEJvb2wJbG9jYWxMb29wOwkJLyogVGhyb3cgYXdheSBldmVyeXRoaW5nIGJ1dCByZXN1bHQgKi8KKyAgICBpbnQJCXNpbGVudDsJCQkvKiBkb24ndCBjb21wbGFpbiBhYm91dCBubyBzZXJ2ZXIgKi8KK3sKKyAgICBXaW5kb3cJICAgIHc7CisgICAgY2hhcl91CSAgICAqcHJvcGVydHk7CisgICAgaW50CQkgICAgbGVuZ3RoOworICAgIGludAkJICAgIHJlczsKKyAgICBzdGF0aWMgaW50CSAgICBzZXJpYWwgPSAwOwkvKiBSdW5uaW5nIGNvdW50IG9mIHNlbnQgY29tbWFuZHMuCisJCQkJICogVXNlZCB0byBnaXZlIGVhY2ggY29tbWFuZCBhCisJCQkJICogZGlmZmVyZW50IHNlcmlhbCBudW1iZXIuICovCisgICAgUGVuZGluZ0NvbW1hbmQgIHBlbmRpbmc7CisgICAgY2hhcl91CSAgICAqbG9vc2VuYW1lID0gTlVMTDsKKworICAgIGlmIChyZXN1bHQgIT0gTlVMTCkKKwkqcmVzdWx0ID0gTlVMTDsKKyAgICBpZiAobmFtZSA9PSBOVUxMIHx8ICpuYW1lID09IE5VTCkKKwluYW1lID0gKGNoYXJfdSAqKSJHVklNIjsgICAgLyogdXNlIGEgZGVmYXVsdCBuYW1lICovCisKKyAgICBpZiAoY29tbVByb3BlcnR5ID09IE5vbmUgJiYgZHB5ICE9IE5VTEwpCisgICAgeworCWlmIChTZW5kSW5pdChkcHkpIDwgMCkKKwkgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbG9jYWxseSBpZiBubyBkaXNwbGF5IG9yIHRhcmdldCBpcyBvdXJzZWx2ZXMgKi8KKyAgICBpZiAoZHB5ID09IE5VTEwgfHwgKHNlcnZlck5hbWUgIT0gTlVMTCAmJiBTVFJJQ01QKG5hbWUsIHNlcnZlck5hbWUpID09IDApKQorICAgIHsKKwlpZiAoYXNFeHByKQorCXsKKwkgICAgY2hhcl91ICpyZXQ7CisKKwkgICAgcmV0ID0gZXZhbF9jbGllbnRfZXhwcl90b19zdHJpbmcoY21kKTsKKwkgICAgaWYgKHJlc3VsdCAhPSBOVUxMKQorCSAgICB7CisJCWlmIChyZXQgPT0gTlVMTCkKKwkJICAgICpyZXN1bHQgPSB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopXyhlX2ludmV4cHJtc2cpKTsKKwkJZWxzZQorCQkgICAgKnJlc3VsdCA9IHJldDsKKwkgICAgfQorCSAgICBlbHNlCisJCXZpbV9mcmVlKHJldCk7CisJICAgIHJldHVybiByZXQgPT0gTlVMTCA/IC0xIDogMDsKKwl9CisJZWxzZQorCSAgICBzZXJ2ZXJfdG9faW5wdXRfYnVmKGNtZCk7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBCaW5kIHRoZSBzZXJ2ZXIgbmFtZSB0byBhIGNvbW11bmljYXRpb24gd2luZG93LgorICAgICAqCisgICAgICogRmluZCBhbnkgc3Vydml2b3Igd2l0aCBhIHNlcmlhbG5vIGF0dGFjaGVkIHRvIHRoZSBuYW1lIGlmIHRoZQorICAgICAqIG9yaWdpbmFsIHJlZ2lzdHJhbnQgb2YgdGhlIHdhbnRlZCBuYW1lIGlzIG5vIGxvbmdlciBwcmVzZW50LgorICAgICAqCisgICAgICogRGVsZXRlIGFueSBsaW5nZXJpbmcgbmFtZXMgZnJvbSBkZWFkIGVkaXRvcnMuCisgICAgICovCisgICAgd2hpbGUgKFRSVUUpCisgICAgeworCXcgPSBMb29rdXBOYW1lKGRweSwgbmFtZSwgRkFMU0UsICZsb29zZW5hbWUpOworCS8qIENoZWNrIHRoYXQgdGhlIHdpbmRvdyBpcyBob3QgKi8KKwlpZiAodyAhPSBOb25lKQorCXsKKwkgICAgaWYgKCFXaW5kb3dWYWxpZChkcHksIHcpKQorCSAgICB7CisJCUxvb2t1cE5hbWUoZHB5LCBsb29zZW5hbWUgPyBsb29zZW5hbWUgOiBuYW1lLAorCQkJICAgLypERUxFVEU9Ki9UUlVFLCBOVUxMKTsKKwkJY29udGludWU7CisJICAgIH0KKwl9CisJYnJlYWs7CisgICAgfQorICAgIGlmICh3ID09IE5vbmUpCisgICAgeworCWlmICghc2lsZW50KQorCSAgICBFTVNHMihfKGVfbm9zZXJ2ZXIpLCBuYW1lKTsKKwlyZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKGxvb3NlbmFtZSAhPSBOVUxMKQorCW5hbWUgPSBsb29zZW5hbWU7CisgICAgaWYgKHNlcnZlciAhPSBOVUxMKQorCSpzZXJ2ZXIgPSB3OworCisgICAgLyoKKyAgICAgKiBTZW5kIHRoZSBjb21tYW5kIHRvIHRhcmdldCBpbnRlcnByZXRlciBieSBhcHBlbmRpbmcgaXQgdG8gdGhlCisgICAgICogY29tbSB3aW5kb3cgaW4gdGhlIGNvbW11bmljYXRpb24gd2luZG93LgorICAgICAqLworICAgIGxlbmd0aCA9IFNUUkxFTihuYW1lKSArIFNUUkxFTihjbWQpICsgMTA7CisgICAgcHJvcGVydHkgPSAoY2hhcl91ICopYWxsb2MoKHVuc2lnbmVkKSBsZW5ndGggKyAzMCk7CisKKyAgICBzcHJpbnRmKChjaGFyICopcHJvcGVydHksICIlYyVjJWMtbiAlcyVjLXMgJXMiLAorCQkgICAgICAwLCBhc0V4cHIgPyAnYycgOiAnaycsIDAsIG5hbWUsIDAsIGNtZCk7CisgICAgaWYgKG5hbWUgPT0gbG9vc2VuYW1lKQorCXZpbV9mcmVlKGxvb3NlbmFtZSk7CisgICAgLyogQWRkIGEgYmFjayByZWZlcmVuY2UgdG8gb3VyIGNvbW0gd2luZG93ICovCisgICAgc2VyaWFsKys7CisgICAgc3ByaW50ZigoY2hhciAqKXByb3BlcnR5ICsgbGVuZ3RoLCAiJWMtciAleCAlZCIsCisJCQkJCQkwLCAoaW50X3UpY29tbVdpbmRvdywgc2VyaWFsKTsKKyAgICBsZW5ndGggKz0gU1RSTEVOKHByb3BlcnR5ICsgbGVuZ3RoICsgMSkgKyAxOworCisgICAgcmVzID0gQXBwZW5kUHJvcENhcmVmdWxseShkcHksIHcsIGNvbW1Qcm9wZXJ0eSwgcHJvcGVydHksIGxlbmd0aCArIDEpOworICAgIHZpbV9mcmVlKHByb3BlcnR5KTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICB7CisJRU1TRyhfKCJFMjQ4OiBGYWlsZWQgdG8gc2VuZCBjb21tYW5kIHRvIHRoZSBkZXN0aW5hdGlvbiBwcm9ncmFtIikpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIWFzRXhwcikgLyogVGhlcmUgaXMgbm8gYW5zd2VyIGZvciB0aGlzIC0gS2V5cyBhcmUgc2VudCBhc3luYyAqLworCXJldHVybiAwOworCisgICAgLyoKKyAgICAgKiBSZWdpc3RlciB0aGUgZmFjdCB0aGF0IHdlJ3JlIHdhaXRpbmcgZm9yIGEgY29tbWFuZCB0bworICAgICAqIGNvbXBsZXRlICh0aGlzIGlzIG5lZWRlZCBieSBTZW5kRXZlbnRQcm9jIGFuZCBieQorICAgICAqIEFwcGVuZEVycm9yUHJvYyB0byBwYXNzIGJhY2sgdGhlIGNvbW1hbmQncyByZXN1bHRzKS4KKyAgICAgKi8KKyAgICBwZW5kaW5nLnNlcmlhbCA9IHNlcmlhbDsKKyAgICBwZW5kaW5nLmNvZGUgPSAwOworICAgIHBlbmRpbmcucmVzdWx0ID0gTlVMTDsKKyAgICBwZW5kaW5nLm5leHRQdHIgPSBwZW5kaW5nQ29tbWFuZHM7CisgICAgcGVuZGluZ0NvbW1hbmRzID0gJnBlbmRpbmc7CisKKyAgICBTZXJ2ZXJXYWl0KGRweSwgdywgV2FpdEZvclBlbmQsICZwZW5kaW5nLCBsb2NhbExvb3AsIDYwMCk7CisKKyAgICAvKgorICAgICAqIFVucmVnaXN0ZXIgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW5kaW5nIGNvbW1hbmQKKyAgICAgKiBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCisgICAgICovCisgICAgaWYgKHBlbmRpbmdDb21tYW5kcyA9PSAmcGVuZGluZykKKwlwZW5kaW5nQ29tbWFuZHMgPSBwZW5kaW5nLm5leHRQdHI7CisgICAgZWxzZQorICAgIHsKKwlQZW5kaW5nQ29tbWFuZCAqcGNQdHI7CisKKwlmb3IgKHBjUHRyID0gcGVuZGluZ0NvbW1hbmRzOyBwY1B0ciAhPSBOVUxMOyBwY1B0ciA9IHBjUHRyLT5uZXh0UHRyKQorCSAgICBpZiAocGNQdHItPm5leHRQdHIgPT0gJnBlbmRpbmcpCisJICAgIHsKKwkJcGNQdHItPm5leHRQdHIgPSBwZW5kaW5nLm5leHRQdHI7CisJCWJyZWFrOworCSAgICB9CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gTlVMTCkKKwkqcmVzdWx0ID0gcGVuZGluZy5yZXN1bHQ7CisgICAgZWxzZQorCXZpbV9mcmVlKHBlbmRpbmcucmVzdWx0KTsKKworICAgIHJldHVybiBwZW5kaW5nLmNvZGUgPT0gMCA/IDAgOiAtMTsKK30KKworICAgIHN0YXRpYyBpbnQKK1dhaXRGb3JQZW5kKHApCisgICAgdm9pZCAgICAqcDsKK3sKKyAgICBQZW5kaW5nQ29tbWFuZCAqcGVuZGluZyA9IChQZW5kaW5nQ29tbWFuZCAqKSBwOworICAgIHJldHVybiBwZW5kaW5nLT5yZXN1bHQgIT0gTlVMTDsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHdpbmRvdyAidyIgZXhpc3RzIGFuZCBoYXMgYSAiVmltIiBwcm9wZXJ0eSBvbiBpdC4KKyAqLworICAgIHN0YXRpYyBpbnQKK1dpbmRvd1ZhbGlkKGRweSwgdykKKyAgICBEaXNwbGF5ICAgICAqZHB5OworICAgIFdpbmRvdwl3OworeworICAgIFhFcnJvckhhbmRsZXIgICBvbGRfaGFuZGxlcjsKKyAgICBBdG9tCSAgICAqcGxpc3Q7CisgICAgaW50CQkgICAgbnVtUHJvcDsKKyAgICBpbnQJCSAgICBpOworCisgICAgb2xkX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKHhfZXJyb3JfY2hlY2spOworICAgIGdvdF94X2Vycm9yID0gMDsKKyAgICBwbGlzdCA9IFhMaXN0UHJvcGVydGllcyhkcHksIHcsICZudW1Qcm9wKTsKKyAgICBYU3luYyhkcHksIEZhbHNlKTsKKyAgICBYU2V0RXJyb3JIYW5kbGVyKG9sZF9oYW5kbGVyKTsKKyAgICBpZiAocGxpc3QgPT0gTlVMTCB8fCBnb3RfeF9lcnJvcikKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcDsgaSsrKQorCWlmIChwbGlzdFtpXSA9PSB2aW1Qcm9wZXJ0eSkKKwl7CisJICAgIFhGcmVlKHBsaXN0KTsKKwkgICAgcmV0dXJuIFRSVUU7CisJfQorICAgIFhGcmVlKHBsaXN0KTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBFbnRlciBhIGxvb3AgcHJvY2Vzc2luZyBYIGV2ZW50cyAmIHBvbGxpbmcgY2hhcnMgdW50aWwgd2Ugc2VlIGEgcmVzdWx0CisgKi8KKyAgICBzdGF0aWMgdm9pZAorU2VydmVyV2FpdChkcHksIHcsIGVuZENvbmQsIGVuZERhdGEsIGxvY2FsTG9vcCwgc2Vjb25kcykKKyAgICBEaXNwbGF5CSpkcHk7CisgICAgV2luZG93CXc7CisgICAgRW5kQ29uZAllbmRDb25kOworICAgIHZvaWQJKmVuZERhdGE7CisgICAgaW50CQlsb2NhbExvb3A7CisgICAgaW50CQlzZWNvbmRzOworeworICAgIHRpbWVfdAkgICAgc3RhcnQ7CisgICAgdGltZV90CSAgICBub3c7CisgICAgdGltZV90CSAgICBsYXN0Q2hrID0gMDsKKyAgICBYRXZlbnQJICAgIGV2ZW50OworICAgIFhQcm9wZXJ0eUV2ZW50ICplID0gKFhQcm9wZXJ0eUV2ZW50ICopJmV2ZW50OworIyAgIGRlZmluZSBTRU5EX01TRUNfUE9MTCA1MAorCisgICAgdGltZSgmc3RhcnQpOworICAgIHdoaWxlIChlbmRDb25kKGVuZERhdGEpID09IDApCisgICAgeworCXRpbWUoJm5vdyk7CisJaWYgKHNlY29uZHMgPj0gMCAmJiAobm93IC0gc3RhcnQpID49IHNlY29uZHMpCisJICAgIGJyZWFrOworCWlmIChub3cgIT0gbGFzdENoaykKKwl7CisJICAgIGxhc3RDaGsgPSBub3c7CisJICAgIGlmICghV2luZG93VmFsaWQoZHB5LCB3KSkKKwkJYnJlYWs7CisJICAgIC8qCisJICAgICAqIFNvbWV0aW1lcyB0aGUgUHJvcGVydHlDaGFuZ2UgZXZlbnQgZG9lc24ndCBjb21lLgorCSAgICAgKiBUaGlzIGNhbiBiZSBzZWVuIGluIGVnOiB2aW0gLWMgJ2VjaG8gcmVtb3RlX2V4cHIoImd2aW0iLCAiMysyIiknCisJICAgICAqLworCSAgICBzZXJ2ZXJFdmVudFByb2MoZHB5LCBOVUxMKTsKKwl9CisJaWYgKGxvY2FsTG9vcCkKKwl7CisJICAgIC8qIEp1c3QgbG9vayBvdXQgZm9yIHRoZSBhbnN3ZXIgd2l0aG91dCBjYWxsaW5nIGJhY2sgaW50byBWaW0gKi8KKyNpZm5kZWYgSEFWRV9TRUxFQ1QKKwkgICAgc3RydWN0IHBvbGxmZCAgIGZkczsKKworCSAgICBmZHMuZmQgPSBDb25uZWN0aW9uTnVtYmVyKGRweSk7CisJICAgIGZkcy5ldmVudHMgPSBQT0xMSU47CisJICAgIGlmIChwb2xsKCZmZHMsIDEsIFNFTkRfTVNFQ19QT0xMKSA8IDApCisJCWJyZWFrOworI2Vsc2UKKwkgICAgZmRfc2V0CSAgICBmZHM7CisJICAgIHN0cnVjdCB0aW1ldmFsICB0djsKKworCSAgICB0di50dl9zZWMgPSAwOworCSAgICB0di50dl91c2VjID0gIFNFTkRfTVNFQ19QT0xMICogMTAwMDsKKwkgICAgRkRfWkVSTygmZmRzKTsKKwkgICAgRkRfU0VUKENvbm5lY3Rpb25OdW1iZXIoZHB5KSwgJmZkcyk7CisJICAgIGlmIChzZWxlY3QoQ29ubmVjdGlvbk51bWJlcihkcHkpICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgJnR2KSA8IDApCisJCWJyZWFrOworI2VuZGlmCisJICAgIHdoaWxlIChYRXZlbnRzUXVldWVkKGRweSwgUXVldWVkQWZ0ZXJSZWFkaW5nKSA+IDApCisJICAgIHsKKwkJWE5leHRFdmVudChkcHksICZldmVudCk7CisJCWlmIChldmVudC50eXBlID09IFByb3BlcnR5Tm90aWZ5ICYmIGUtPndpbmRvdyA9PSBjb21tV2luZG93KQorCQkgICAgc2VydmVyRXZlbnRQcm9jKGRweSwgJmV2ZW50KTsKKwkgICAgfQorCX0KKwllbHNlCisJeworCSAgICBpZiAoZ290X2ludCkKKwkJYnJlYWs7CisJICAgIHVpX2RlbGF5KChsb25nKVNFTkRfTVNFQ19QT0xMLCBUUlVFKTsKKwkgICAgdWlfYnJlYWtjaGVjaygpOworCX0KKyAgICB9Cit9CisKKworLyoKKyAqIEZldGNoIGEgbGlzdCBvZiBhbGwgdGhlIFZpbSBpbnN0YW5jZSBuYW1lcyBjdXJyZW50bHkgcmVnaXN0ZXJlZCBmb3IgdGhlCisgKiBkaXNwbGF5LgorICoKKyAqIFJldHVybnMgYSBuZXdsaW5lIHNlcGFyYXRlZCBsaXN0IGluIGFsbG9jYXRlZCBtZW1vcnkgb3IgTlVMTC4KKyAqLworICAgIGNoYXJfdSAqCitzZXJ2ZXJHZXRWaW1OYW1lcyhkcHkpCisgICAgRGlzcGxheQkqZHB5OworeworICAgIGNoYXJfdQkqcmVnUHJvcDsKKyAgICBjaGFyX3UJKmVudHJ5OworICAgIGNoYXJfdQkqcDsKKyAgICBsb25nX3UJbnVtSXRlbXM7CisgICAgaW50X3UJdzsKKyAgICBnYXJyYXlfVAlnYTsKKworICAgIGlmIChyZWdpc3RyeVByb3BlcnR5ID09IE5vbmUpCisgICAgeworCWlmIChTZW5kSW5pdChkcHkpIDwgMCkKKwkgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGdhX2luaXQyKCZnYSwgMSwgMTAwKTsKKworICAgIC8qCisgICAgICogUmVhZCB0aGUgcmVnaXN0cnkgcHJvcGVydHkuCisgICAgICovCisgICAgaWYgKEdldFJlZ1Byb3AoZHB5LCAmcmVnUHJvcCwgJm51bUl0ZW1zLCBUUlVFKSA9PSBGQUlMKQorCXJldHVybiBOVUxMOworCisgICAgLyoKKyAgICAgKiBTY2FuIGFsbCBvZiB0aGUgbmFtZXMgb3V0IG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgKi8KKyAgICBnYV9pbml0MigmZ2EsIDEsIDEwMCk7CisgICAgZm9yIChwID0gcmVnUHJvcDsgKHAgLSByZWdQcm9wKSA8IG51bUl0ZW1zOyBwKyspCisgICAgeworCWVudHJ5ID0gcDsKKwl3aGlsZSAoKnAgIT0gMCAmJiAhaXNzcGFjZSgqcCkpCisJICAgIHArKzsKKwlpZiAoKnAgIT0gMCkKKwl7CisJICAgIHcgPSBOb25lOworCSAgICBzc2NhbmYoKGNoYXIgKillbnRyeSwgIiV4IiwgJncpOworCSAgICBpZiAoV2luZG93VmFsaWQoZHB5LCAoV2luZG93KXcpKQorCSAgICB7CisJCWdhX2NvbmNhdCgmZ2EsIHAgKyAxKTsKKwkJZ2FfY29uY2F0KCZnYSwgKGNoYXJfdSAqKSJcbiIpOworCSAgICB9CisJICAgIHdoaWxlICgqcCAhPSAwKQorCQlwKys7CisJfQorICAgIH0KKyAgICBpZiAocmVnUHJvcCAhPSBlbXB0eV9wcm9wKQorCVhGcmVlKHJlZ1Byb3ApOworICAgIHJldHVybiBnYS5nYV9kYXRhOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZXBseSBzdHVmZgorICovCisKKyAgICBzdGF0aWMgc3RydWN0IFNlcnZlclJlcGx5ICoKK1NlcnZlclJlcGx5RmluZCh3LCBvcCkKKyAgICBXaW5kb3cgIHc7CisgICAgZW51bSBTZXJ2ZXJSZXBseU9wIG9wOworeworICAgIHN0cnVjdCBTZXJ2ZXJSZXBseSAqcDsKKyAgICBzdHJ1Y3QgU2VydmVyUmVwbHkgZTsKKyAgICBpbnQJCWk7CisKKyAgICBwID0gKHN0cnVjdCBTZXJ2ZXJSZXBseSAqKSBzZXJ2ZXJSZXBseS5nYV9kYXRhOworICAgIGZvciAoaSA9IDA7IGkgPCBzZXJ2ZXJSZXBseS5nYV9sZW47IGkrKywgcCsrKQorCWlmIChwLT5pZCA9PSB3KQorCSAgICBicmVhazsKKyAgICBpZiAoaSA+PSBzZXJ2ZXJSZXBseS5nYV9sZW4pCisJcCA9IE5VTEw7CisKKyAgICBpZiAocCA9PSBOVUxMICYmIG9wID09IFNST1BfQWRkKQorICAgIHsKKwlpZiAoc2VydmVyUmVwbHkuZ2FfZ3Jvd3NpemUgPT0gMCkKKwkgICAgZ2FfaW5pdDIoJnNlcnZlclJlcGx5LCBzaXplb2Yoc3RydWN0IFNlcnZlclJlcGx5KSwgMSk7CisJaWYgKGdhX2dyb3coJnNlcnZlclJlcGx5LCAxKSA9PSBPSykKKwl7CisJICAgIHAgPSAoKHN0cnVjdCBTZXJ2ZXJSZXBseSAqKSBzZXJ2ZXJSZXBseS5nYV9kYXRhKQorCQkrIHNlcnZlclJlcGx5LmdhX2xlbjsKKwkgICAgZS5pZCA9IHc7CisJICAgIGdhX2luaXQyKCZlLnN0cmluZ3MsIDEsIDEwMCk7CisJICAgIG1lbWNweShwLCAmZSwgc2l6ZW9mKGUpKTsKKwkgICAgc2VydmVyUmVwbHkuZ2FfbGVuKys7CisJICAgIHNlcnZlclJlcGx5LmdhX3Jvb20tLTsKKwl9CisgICAgfQorICAgIGVsc2UgaWYgKHAgIT0gTlVMTCAmJiBvcCA9PSBTUk9QX0RlbGV0ZSkKKyAgICB7CisJZ2FfY2xlYXIoJnAtPnN0cmluZ3MpOworCW1jaF9tZW1tb3ZlKHAsIHAgKyAxLCAoc2VydmVyUmVwbHkuZ2FfbGVuIC0gaSAtIDEpICogc2l6ZW9mKCpwKSk7CisJc2VydmVyUmVwbHkuZ2FfbGVuLS07CisJc2VydmVyUmVwbHkuZ2Ffcm9vbSsrOworICAgIH0KKworICAgIHJldHVybiBwOworfQorCisvKgorICogQ29udmVydCBzdHJpbmcgdG8gd2luZG93aWQuCisgKiBJc3N1ZSBhbiBlcnJvciBpZiB0aGUgaWQgaXMgaW52YWxpZC4KKyAqLworICAgIFdpbmRvdworc2VydmVyU3RyVG9XaW4oc3RyKQorICAgIGNoYXJfdSAgKnN0cjsKK3sKKyAgICB1bnNpZ25lZCAgaWQgPSBOb25lOworCisgICAgc3NjYW5mKChjaGFyICopc3RyLCAiMHgleCIsICZpZCk7CisgICAgaWYgKGlkID09IE5vbmUpCisJRU1TRzIoXygiRTU3MzogSW52YWxpZCBzZXJ2ZXIgaWQgdXNlZDogJXMiKSwgc3RyKTsKKworICAgIHJldHVybiAoV2luZG93KWlkOworfQorCisvKgorICogU2VuZCBhIHJlcGx5IHN0cmluZyB0byBjbGllbnQgd2l0aCBpZCAibmFtZSIuCisgKiBSZXR1cm4gLTEgaWYgdGhlIHdpbmRvdyBpcyBpbnZhbGlkLgorICovCisgICAgaW50CitzZXJ2ZXJTZW5kUmVwbHkobmFtZSwgc3RyKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBjaGFyX3UJKnN0cjsKK3sKKyAgICBjaGFyX3UJKnByb3BlcnR5OworICAgIGludAkJbGVuZ3RoOworICAgIGludAkJcmVzOworICAgIERpc3BsYXkJKmRweSA9IFhfRElTUExBWTsKKyAgICBXaW5kb3cJd2luID0gc2VydmVyU3RyVG9XaW4obmFtZSk7CisKKyAgICBpZiAoY29tbVByb3BlcnR5ID09IE5vbmUpCisgICAgeworCWlmIChTZW5kSW5pdChkcHkpIDwgMCkKKwkgICAgcmV0dXJuIC0yOworICAgIH0KKyAgICBpZiAoIVdpbmRvd1ZhbGlkKGRweSwgd2luKSkKKwlyZXR1cm4gLTE7CisKKyAgICBsZW5ndGggPSBTVFJMRU4oc3RyKSArIDc7CisgICAgaWYgKChwcm9wZXJ0eSA9IChjaGFyX3UgKilhbGxvYygodW5zaWduZWQpIGxlbmd0aCArIDMwKSkgIT0gTlVMTCkKKyAgICB7CisJc3ByaW50ZigoY2hhciAqKXByb3BlcnR5LCAiJWMlYyVjLW4gJXMlYy13ICV4IiwKKwkJCSAgMCwgJ24nLCAwLCBzdHIsIDAsICh1bnNpZ25lZCBpbnQpY29tbVdpbmRvdyk7CisJbGVuZ3RoICs9IFNUUkxFTihwcm9wZXJ0eSArIGxlbmd0aCk7CisJcmVzID0gQXBwZW5kUHJvcENhcmVmdWxseShkcHksIHdpbiwgY29tbVByb3BlcnR5LCBwcm9wZXJ0eSwgbGVuZ3RoICsgMSk7CisJdmltX2ZyZWUocHJvcGVydHkpOworCXJldHVybiByZXM7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworICAgIHN0YXRpYyBpbnQKK1dhaXRGb3JSZXBseShwKQorICAgIHZvaWQgICAgKnA7Cit7CisgICAgV2luZG93ICAqdyA9IChXaW5kb3cgKikgcDsKKyAgICByZXR1cm4gU2VydmVyUmVwbHlGaW5kKCp3LCBTUk9QX0ZpbmQpICE9IE5VTEw7Cit9CisKKy8qCisgKiBXYWl0IGZvciByZXBsaWVzIGZyb20gaWQgKHdpbikKKyAqIFJldHVybiAwIGFuZCB0aGUgbWFsbG9jJ2VkIHN0cmluZyB3aGVuIGEgcmVwbHkgaXMgYXZhaWxhYmxlLgorICogUmV0dXJuIC0xIGlmIHRoZSB3aW5kb3cgYmVjb21lcyBpbnZhbGlkIHdoaWxlIHdhaXRpbmcuCisgKi8KKyAgICBpbnQKK3NlcnZlclJlYWRSZXBseShkcHksIHdpbiwgc3RyLCBsb2NhbExvb3ApCisgICAgRGlzcGxheQkqZHB5OworICAgIFdpbmRvdwl3aW47CisgICAgY2hhcl91CSoqc3RyOworICAgIGludAkJbG9jYWxMb29wOworeworICAgIGludAkJbGVuOworICAgIGNoYXJfdQkqczsKKyAgICBzdHJ1Y3QJU2VydmVyUmVwbHkgKnA7CisKKyAgICBTZXJ2ZXJXYWl0KGRweSwgd2luLCBXYWl0Rm9yUmVwbHksICZ3aW4sIGxvY2FsTG9vcCwgLTEpOworCisgICAgaWYgKChwID0gU2VydmVyUmVwbHlGaW5kKHdpbiwgU1JPUF9GaW5kKSkgIT0gTlVMTCAmJiBwLT5zdHJpbmdzLmdhX2xlbiA+IDApCisgICAgeworCSpzdHIgPSB2aW1fc3Ryc2F2ZShwLT5zdHJpbmdzLmdhX2RhdGEpOworCWxlbiA9IFNUUkxFTigqc3RyKSArIDE7CisJaWYgKGxlbiA8IHAtPnN0cmluZ3MuZ2FfbGVuKQorCXsKKwkgICAgcyA9IChjaGFyX3UgKikgcC0+c3RyaW5ncy5nYV9kYXRhOworCSAgICBtY2hfbWVtbW92ZShzLCBzICsgbGVuLCBwLT5zdHJpbmdzLmdhX2xlbiAtIGxlbik7CisJICAgIHAtPnN0cmluZ3MuZ2Ffcm9vbSArPSBsZW47CisJICAgIHAtPnN0cmluZ3MuZ2FfbGVuIC09IGxlbjsKKwl9CisJZWxzZQorCXsKKwkgICAgLyogTGFzdCBzdHJpbmcgcmVhZC4gIFJlbW92ZSBmcm9tIGxpc3QgKi8KKwkgICAgZ2FfY2xlYXIoJnAtPnN0cmluZ3MpOworCSAgICBTZXJ2ZXJSZXBseUZpbmQod2luLCBTUk9QX0RlbGV0ZSk7CisJfQorCXJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgcmVwbGllcyBmcm9tIGlkICh3aW4pLgorICogUmV0dXJuIFRSVUUgYW5kIGEgbm9uLW1hbGxvYydlZCBzdHJpbmcgaWYgdGhlcmUgaXMuICBFbHNlIHJldHVybiBGQUxTRS4KKyAqLworICAgIGludAorc2VydmVyUGVla1JlcGx5KGRweSwgd2luLCBzdHIpCisgICAgRGlzcGxheSAqZHB5OworICAgIFdpbmRvdyB3aW47CisgICAgY2hhcl91ICoqc3RyOworeworICAgIHN0cnVjdCBTZXJ2ZXJSZXBseSAqcDsKKworICAgIGlmICgocCA9IFNlcnZlclJlcGx5RmluZCh3aW4sIFNST1BfRmluZCkpICE9IE5VTEwgJiYgcC0+c3RyaW5ncy5nYV9sZW4gPiAwKQorICAgIHsKKwlpZiAoc3RyICE9IE5VTEwpCisJICAgICpzdHIgPSBwLT5zdHJpbmdzLmdhX2RhdGE7CisJcmV0dXJuIDE7CisgICAgfQorICAgIGlmICghV2luZG93VmFsaWQoZHB5LCB3aW4pKQorCXJldHVybiAtMTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyBmb3Igc2VuZGluZyBjb21tYW5kcyBhbmQgcmVjZWl2aW5nCisgKiByZXN1bHRzLgorICovCisgICAgc3RhdGljIGludAorU2VuZEluaXQoZHB5KQorICAgIERpc3BsYXkgKmRweTsKK3sKKyAgICBYRXJyb3JIYW5kbGVyIG9sZF9oYW5kbGVyOworCisgICAgLyoKKyAgICAgKiBDcmVhdGUgdGhlIHdpbmRvdyB1c2VkIGZvciBjb21tdW5pY2F0aW9uLCBhbmQgc2V0IHVwIGFuCisgICAgICogZXZlbnQgaGFuZGxlciBmb3IgaXQuCisgICAgICovCisgICAgb2xkX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKHhfZXJyb3JfY2hlY2spOworICAgIGdvdF94X2Vycm9yID0gRkFMU0U7CisKKyAgICBpZiAoY29tbVByb3BlcnR5ID09IE5vbmUpCisJY29tbVByb3BlcnR5ID0gWEludGVybkF0b20oZHB5LCAiQ29tbSIsIEZhbHNlKTsKKyAgICBpZiAodmltUHJvcGVydHkgPT0gTm9uZSkKKwl2aW1Qcm9wZXJ0eSA9IFhJbnRlcm5BdG9tKGRweSwgIlZpbSIsIEZhbHNlKTsKKyAgICBpZiAocmVnaXN0cnlQcm9wZXJ0eSA9PSBOb25lKQorCXJlZ2lzdHJ5UHJvcGVydHkgPSBYSW50ZXJuQXRvbShkcHksICJWaW1SZWdpc3RyeSIsIEZhbHNlKTsKKworICAgIGlmIChjb21tV2luZG93ID09IE5vbmUpCisgICAgeworCWNvbW1XaW5kb3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSksCisJCQkJZ2V0cGlkKCksIDAsIDEwLCAxMCwgMCwKKwkJCQlXaGl0ZVBpeGVsKGRweSwgRGVmYXVsdFNjcmVlbihkcHkpKSwKKwkJCQlXaGl0ZVBpeGVsKGRweSwgRGVmYXVsdFNjcmVlbihkcHkpKSk7CisJWFNlbGVjdElucHV0KGRweSwgY29tbVdpbmRvdywgUHJvcGVydHlDaGFuZ2VNYXNrKTsKKwkvKiBXQVJOSU5HOiBEbyBub3Qgc3RlcCB0aHJvdWdoIHRoaXMgd2hpbGUgZGVidWdnaW5nLCBpdCB3aWxsIGhhbmd1cAorCSAqIHRoZSBYIHNlcnZlciEgKi8KKwlYR3JhYlNlcnZlcihkcHkpOworCURlbGV0ZUFueUxpbmdlcmVyKGRweSwgY29tbVdpbmRvdyk7CisJWFVuZ3JhYlNlcnZlcihkcHkpOworICAgIH0KKworICAgIC8qIE1ha2Ugd2luZG93IHJlY29nbml6YWJsZSBhcyBhIHZpbSB3aW5kb3cgKi8KKyAgICBYQ2hhbmdlUHJvcGVydHkoZHB5LCBjb21tV2luZG93LCB2aW1Qcm9wZXJ0eSwgWEFfU1RSSU5HLAorCQkgICAgOCwgUHJvcE1vZGVSZXBsYWNlLCAoY2hhcl91ICopVklNX1ZFUlNJT05fU0hPUlQsCisJCQkoaW50KVNUUkxFTihWSU1fVkVSU0lPTl9TSE9SVCkgKyAxKTsKKworICAgIFhTeW5jKGRweSwgRmFsc2UpOworICAgICh2b2lkKVhTZXRFcnJvckhhbmRsZXIob2xkX2hhbmRsZXIpOworCisgICAgcmV0dXJuIGdvdF94X2Vycm9yID8gLTEgOiAwOworfQorCisvKgorICogR2l2ZW4gYSBzZXJ2ZXIgbmFtZSwgc2VlIGlmIHRoZSBuYW1lIGV4aXN0cyBpbiB0aGUgcmVnaXN0cnkgZm9yIGEKKyAqIHBhcnRpY3VsYXIgZGlzcGxheS4KKyAqCisgKiBJZiB0aGUgZ2l2ZW4gbmFtZSBpcyByZWdpc3RlcmVkLCByZXR1cm4gdGhlIElEIG9mIHRoZSB3aW5kb3cgYXNzb2NpYXRlZAorICogd2l0aCB0aGUgbmFtZS4gIElmIHRoZSBuYW1lIGlzbid0IHJlZ2lzdGVyZWQsIHRoZW4gcmV0dXJuIDAuCisgKgorICogU2lkZSBlZmZlY3RzOgorICoJSWYgdGhlIHJlZ2lzdHJ5IHByb3BlcnR5IGlzIGltcHJvcGVybHkgZm9ybWVkLCB0aGVuIGl0IGlzIGRlbGV0ZWQuCisgKglJZiAiZGVsZXRlIiBpcyBub24temVybywgdGhlbiBpZiB0aGUgbmFtZWQgc2VydmVyIGlzIGZvdW5kIGl0IGlzCisgKglyZW1vdmVkIGZyb20gdGhlIHJlZ2lzdHJ5IHByb3BlcnR5LgorICovCisgICAgc3RhdGljIFdpbmRvdworTG9va3VwTmFtZShkcHksIG5hbWUsIGRlbGV0ZSwgbG9vc2UpCisgICAgRGlzcGxheQkqZHB5OwkgICAgLyogRGlzcGxheSB3aG9zZSByZWdpc3RyeSB0byBjaGVjay4gKi8KKyAgICBjaGFyX3UJKm5hbWU7CSAgICAvKiBOYW1lIG9mIGEgc2VydmVyLiAqLworICAgIGludAkJZGVsZXRlOwkgICAgLyogSWYgbm9uLXplcm8sIGRlbGV0ZSBpbmZvIGFib3V0IG5hbWUuICovCisgICAgY2hhcl91CSoqbG9vc2U7ICAgIC8qIERvIGFub3RoZXIgc2VhcmNoIG1hdGNoaW5nIC05OTkgaWYgbm90IGZvdW5kCisJCQkgICAgICAgUmV0dXJuIHJlc3VsdCBoZXJlIGlmIGEgbWF0Y2ggaXMgZm91bmQgKi8KK3sKKyAgICBjaGFyX3UJKnJlZ1Byb3AsICplbnRyeTsKKyAgICBjaGFyX3UJKnA7CisgICAgbG9uZ191CW51bUl0ZW1zOworICAgIGludF91CXJldHVyblZhbHVlOworCisgICAgLyoKKyAgICAgKiBSZWFkIHRoZSByZWdpc3RyeSBwcm9wZXJ0eS4KKyAgICAgKi8KKyAgICBpZiAoR2V0UmVnUHJvcChkcHksICZyZWdQcm9wLCAmbnVtSXRlbXMsIEZBTFNFKSA9PSBGQUlMKQorCXJldHVybiAwOworCisgICAgLyoKKyAgICAgKiBTY2FuIHRoZSBwcm9wZXJ0eSBmb3IgdGhlIGRlc2lyZWQgbmFtZS4KKyAgICAgKi8KKyAgICByZXR1cm5WYWx1ZSA9IChpbnRfdSlOb25lOworICAgIGVudHJ5ID0gTlVMTDsJLyogTm90IG5lZWRlZCwgYnV0IGVsaW1pbmF0ZXMgY29tcGlsZXIgd2FybmluZy4gKi8KKyAgICBmb3IgKHAgPSByZWdQcm9wOyAocCAtIHJlZ1Byb3ApIDwgbnVtSXRlbXM7ICkKKyAgICB7CisJZW50cnkgPSBwOworCXdoaWxlICgqcCAhPSAwICYmICFpc3NwYWNlKCpwKSkKKwkgICAgcCsrOworCWlmICgqcCAhPSAwICYmIFNUUklDTVAobmFtZSwgcCArIDEpID09IDApCisJeworCSAgICBzc2NhbmYoKGNoYXIgKillbnRyeSwgIiV4IiwgJnJldHVyblZhbHVlKTsKKwkgICAgYnJlYWs7CisJfQorCXdoaWxlICgqcCAhPSAwKQorCSAgICBwKys7CisJcCsrOworICAgIH0KKworICAgIGlmIChsb29zZSAhPSBOVUxMICYmIHJldHVyblZhbHVlID09IChpbnRfdSlOb25lICYmICFJc1NlcmlhbE5hbWUobmFtZSkpCisgICAgeworCWZvciAocCA9IHJlZ1Byb3A7IChwIC0gcmVnUHJvcCkgPCBudW1JdGVtczsgKQorCXsKKwkgICAgZW50cnkgPSBwOworCSAgICB3aGlsZSAoKnAgIT0gMCAmJiAhaXNzcGFjZSgqcCkpCisJCXArKzsKKwkgICAgaWYgKCpwICE9IDAgJiYgSXNTZXJpYWxOYW1lKHAgKyAxKQorCQkgICAgJiYgU1RSTklDTVAobmFtZSwgcCArIDEsIFNUUkxFTihuYW1lKSkgPT0gMCkKKwkgICAgeworCQlzc2NhbmYoKGNoYXIgKillbnRyeSwgIiV4IiwgJnJldHVyblZhbHVlKTsKKwkJKmxvb3NlID0gdmltX3N0cnNhdmUocCArIDEpOworCQlicmVhazsKKwkgICAgfQorCSAgICB3aGlsZSAoKnAgIT0gMCkKKwkJcCsrOworCSAgICBwKys7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogRGVsZXRlIHRoZSBwcm9wZXJ0eSwgaWYgdGhhdCBpcyBkZXNpcmVkIChjb3B5IGRvd24gdGhlCisgICAgICogcmVtYWluZGVyIG9mIHRoZSByZWdpc3RyeSBwcm9wZXJ0eSB0byBvdmVybGF5IHRoZSBkZWxldGVkCisgICAgICogaW5mbywgdGhlbiByZXdyaXRlIHRoZSBwcm9wZXJ0eSkuCisgICAgICovCisgICAgaWYgKGRlbGV0ZSAmJiByZXR1cm5WYWx1ZSAhPSAoaW50X3UpTm9uZSkKKyAgICB7CisJaW50IGNvdW50OworCisJd2hpbGUgKCpwICE9IDApCisJICAgIHArKzsKKwlwKys7CisJY291bnQgPSBudW1JdGVtcyAtIChwIC0gcmVnUHJvcCk7CisJaWYgKGNvdW50ID4gMCkKKwkgICAgbWVtY3B5KGVudHJ5LCBwLCBjb3VudCk7CisJWENoYW5nZVByb3BlcnR5KGRweSwgUm9vdFdpbmRvdyhkcHksIDApLCByZWdpc3RyeVByb3BlcnR5LCBYQV9TVFJJTkcsCisJCQk4LCBQcm9wTW9kZVJlcGxhY2UsIHJlZ1Byb3AsCisJCQkoaW50KShudW1JdGVtcyAtIChwIC0gZW50cnkpKSk7CisJWFN5bmMoZHB5LCBGYWxzZSk7CisgICAgfQorCisgICAgaWYgKHJlZ1Byb3AgIT0gZW1wdHlfcHJvcCkKKwlYRnJlZShyZWdQcm9wKTsKKyAgICByZXR1cm4gKFdpbmRvdylyZXR1cm5WYWx1ZTsKK30KKworLyoKKyAqIERlbGV0ZSBhbnkgbGluZ2VyaW5nIG9jY3VyZW5jZXMgb2Ygd2luZG93IGlkLiAgV2UgcHJvbWlzZSB0aGF0IGFueQorICogb2NjdXJlbmNlcyBpcyBub3Qgb3VycyBzaW5jZSBpdCBpcyBub3QgeWV0IHB1dCBpbnRvIHRoZSByZWdpc3RyeSAoYnkgdXMpCisgKgorICogVGhpcyBpcyBuZWNlc3NhcnkgaW4gdGhlIGZvbGxvd2luZyBzY2VuYXJpbzoKKyAqIDEuIFRoZXJlIGlzIGFuIG9sZCB3aW5kb3dpZCBmb3IgYW4gZXhpdCdlZCB2aW0gaW4gdGhlIHJlZ2lzdHJ5CisgKiAyLiBXZSBnZXQgdGhhdCBpZCBmb3Igb3VyIGNvbW1XaW5kb3cgYnV0IG9ubHkgd2FudCB0byBzZW5kLCBub3QgcmVnaXN0ZXIuCisgKiAzLiBUaGUgd2luZG93IHdpbGwgbWlzdGFrZW5seSBiZSByZWdhcmRlZCB2YWxpZCBiZWNhdXNlIG9mIG93biBjb21tV2luZG93CisgKi8KKyAgICBzdGF0aWMgdm9pZAorRGVsZXRlQW55TGluZ2VyZXIoZHB5LCB3aW4pCisgICAgRGlzcGxheQkqZHB5OwkvKiBEaXNwbGF5IHdob3NlIHJlZ2lzdHJ5IHRvIGNoZWNrLiAqLworICAgIFdpbmRvdwl3aW47CS8qIFdpbmRvdyB0byByZW1vdmUgKi8KK3sKKyAgICBjaGFyX3UJKnJlZ1Byb3AsICplbnRyeSA9IE5VTEw7CisgICAgY2hhcl91CSpwOworICAgIGxvbmdfdQludW1JdGVtczsKKyAgICBXaW5kb3cJd3dpbjsKKworICAgIC8qCisgICAgICogUmVhZCB0aGUgcmVnaXN0cnkgcHJvcGVydHkuCisgICAgICovCisgICAgaWYgKEdldFJlZ1Byb3AoZHB5LCAmcmVnUHJvcCwgJm51bUl0ZW1zLCBGQUxTRSkgPT0gRkFJTCkKKwlyZXR1cm47CisKKyAgICAvKiBTY2FuIHRoZSBwcm9wZXJ0eSBmb3IgdGhlIHdpbmRvdyBpZC4gICovCisgICAgZm9yIChwID0gcmVnUHJvcDsgKHAgLSByZWdQcm9wKSA8IG51bUl0ZW1zOyApCisgICAgeworCWlmICgqcCAhPSAwKQorCXsKKwkgICAgc3NjYW5mKChjaGFyICopcCwgIiV4IiwgKGludF91ICopJnd3aW4pOworCSAgICBpZiAod3dpbiA9PSB3aW4pCisJICAgIHsKKwkJaW50IGxhc3RIYWxmOworCisJCS8qIENvcHkgZG93biB0aGUgcmVtYWluZGVyIHRvIGRlbGV0ZSBlbnRyeSAqLworCQllbnRyeSA9IHA7CisJCXdoaWxlICgqcCAhPSAwKQorCQkgICAgcCsrOworCQlwKys7CisJCWxhc3RIYWxmID0gbnVtSXRlbXMgLSAocCAtIHJlZ1Byb3ApOworCQlpZiAobGFzdEhhbGYgPiAwKQorCQkgICAgbWVtY3B5KGVudHJ5LCBwLCBsYXN0SGFsZik7CisJCW51bUl0ZW1zID0gKGVudHJ5IC0gcmVnUHJvcCkgKyBsYXN0SGFsZjsKKwkJcCA9IGVudHJ5OworCQljb250aW51ZTsKKwkgICAgfQorCX0KKwl3aGlsZSAoKnAgIT0gMCkKKwkgICAgcCsrOworCXArKzsKKyAgICB9CisKKyAgICBpZiAoZW50cnkgIT0gTlVMTCkKKyAgICB7CisJWENoYW5nZVByb3BlcnR5KGRweSwgUm9vdFdpbmRvdyhkcHksIDApLCByZWdpc3RyeVByb3BlcnR5LAorCQkJWEFfU1RSSU5HLCA4LCBQcm9wTW9kZVJlcGxhY2UsIHJlZ1Byb3AsCisJCQkoaW50KShwIC0gcmVnUHJvcCkpOworCVhTeW5jKGRweSwgRmFsc2UpOworICAgIH0KKworICAgIGlmIChyZWdQcm9wICE9IGVtcHR5X3Byb3ApCisJWEZyZWUocmVnUHJvcCk7Cit9CisKKy8qCisgKiBSZWFkIHRoZSByZWdpc3RyeSBwcm9wZXJ0eS4gIERlbGV0ZSBpdCB3aGVuIGl0J3MgZm9ybWF0dGVkIHdyb25nLgorICogUmV0dXJuIHRoZSBwcm9wZXJ0eSBpbiAicmVnUHJvcHAiLiAgImVtcHR5X3Byb3AiIGlzIHVzZWQgd2hlbiBpdCBkb2Vzbid0CisgKiBleGlzdCB5ZXQuCisgKiBSZXR1cm4gT0sgd2hlbiBzdWNjZXNzZnVsLgorICovCisgICAgc3RhdGljIGludAorR2V0UmVnUHJvcChkcHksIHJlZ1Byb3BwLCBudW1JdGVtc3AsIGRvbXNnKQorICAgIERpc3BsYXkJKmRweTsKKyAgICBjaGFyX3UJKipyZWdQcm9wcDsKKyAgICBsb25nX3UJKm51bUl0ZW1zcDsKKyAgICBpbnQJCWRvbXNnOwkJLyogV2hlbiBUUlVFIGdpdmUgZXJyb3IgbWVzc2FnZS4gKi8KK3sKKyAgICBpbnQJCXJlc3VsdCwgYWN0dWFsRm9ybWF0OworICAgIGxvbmdfdQlieXRlc0FmdGVyOworICAgIEF0b20JYWN0dWFsVHlwZTsKKworICAgICpyZWdQcm9wcCA9IE5VTEw7CisgICAgcmVzdWx0ID0gWEdldFdpbmRvd1Byb3BlcnR5KGRweSwgUm9vdFdpbmRvdyhkcHksIDApLCByZWdpc3RyeVByb3BlcnR5LCAwTCwKKwkJCQkobG9uZylNQVhfUFJPUF9XT1JEUywgRmFsc2UsCisJCQkJWEFfU1RSSU5HLCAmYWN0dWFsVHlwZSwKKwkJCQkmYWN0dWFsRm9ybWF0LCBudW1JdGVtc3AsICZieXRlc0FmdGVyLAorCQkJCXJlZ1Byb3BwKTsKKworICAgIGlmIChhY3R1YWxUeXBlID09IE5vbmUpCisgICAgeworCS8qIE5vIHByb3AgeWV0LiBMb2dpY2FsbHkgZXF1YWwgdG8gdGhlIGVtcHR5IGxpc3QgKi8KKwkqbnVtSXRlbXNwID0gMDsKKwkqcmVnUHJvcHAgPSBlbXB0eV9wcm9wOworCXJldHVybiBPSzsKKyAgICB9CisKKyAgICAvKiBJZiB0aGUgcHJvcGVydHkgaXMgaW1wcm9wZXJseSBmb3JtZWQsIHRoZW4gZGVsZXRlIGl0LiAqLworICAgIGlmIChyZXN1bHQgIT0gU3VjY2VzcyB8fCBhY3R1YWxGb3JtYXQgIT0gOCB8fCBhY3R1YWxUeXBlICE9IFhBX1NUUklORykKKyAgICB7CisJaWYgKCpyZWdQcm9wcCAhPSBOVUxMKQorCSAgICBYRnJlZSgqcmVnUHJvcHApOworCVhEZWxldGVQcm9wZXJ0eShkcHksIFJvb3RXaW5kb3coZHB5LCAwKSwgcmVnaXN0cnlQcm9wZXJ0eSk7CisJaWYgKGRvbXNnKQorCSAgICBFTVNHKF8oIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBpcyBiYWRseSBmb3JtZWQuICBEZWxldGVkISIpKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogVGhpcyBwcm9jZWR1cmUgaXMgaW52b2tlZCBieSB0aGUgdmFyb3VzIFggZXZlbnQgbG9vcHMgdGhyb3VnaG91dCBWaW1zIHdoZW4KKyAqIGEgcHJvcGVydHkgY2hhbmdlcyBvbiB0aGUgY29tbXVuaWNhdGlvbiB3aW5kb3cuICBUaGlzIHByb2NlZHVyZSByZWFkcyB0aGUKKyAqIHByb3BlcnR5IGFuZCBoYW5kbGVzIGNvbW1hbmQgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4KKyAqLworICAgIHZvaWQKK3NlcnZlckV2ZW50UHJvYyhkcHksIGV2ZW50UHRyKQorICAgIERpc3BsYXkJKmRweTsKKyAgICBYRXZlbnQJKmV2ZW50UHRyOwkJLyogSW5mb3JtYXRpb24gYWJvdXQgZXZlbnQuICovCit7CisgICAgY2hhcl91CSpwcm9wSW5mbzsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlyZXN1bHQsIGFjdHVhbEZvcm1hdCwgY29kZTsKKyAgICBsb25nX3UJbnVtSXRlbXMsIGJ5dGVzQWZ0ZXI7CisgICAgQXRvbQlhY3R1YWxUeXBlOworCisgICAgaWYgKGV2ZW50UHRyICE9IE5VTEwpCisgICAgeworCWlmIChldmVudFB0ci0+eHByb3BlcnR5LmF0b20gIT0gY29tbVByb3BlcnR5CisJCXx8IGV2ZW50UHRyLT54cHJvcGVydHkuc3RhdGUgIT0gUHJvcGVydHlOZXdWYWx1ZSkKKwkgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogUmVhZCB0aGUgY29tbSBwcm9wZXJ0eSBhbmQgZGVsZXRlIGl0LgorICAgICAqLworICAgIHByb3BJbmZvID0gTlVMTDsKKyAgICByZXN1bHQgPSBYR2V0V2luZG93UHJvcGVydHkoZHB5LCBjb21tV2luZG93LCBjb21tUHJvcGVydHksIDBMLAorCQkJCShsb25nKU1BWF9QUk9QX1dPUkRTLCBUcnVlLAorCQkJCVhBX1NUUklORywgJmFjdHVhbFR5cGUsCisJCQkJJmFjdHVhbEZvcm1hdCwgJm51bUl0ZW1zLCAmYnl0ZXNBZnRlciwKKwkJCQkmcHJvcEluZm8pOworCisgICAgLyogSWYgdGhlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3Qgb3IgaXMgaW1wcm9wZXJseSBmb3JtZWQgdGhlbiBpZ25vcmUgaXQuICovCisgICAgaWYgKHJlc3VsdCAhPSBTdWNjZXNzIHx8IGFjdHVhbFR5cGUgIT0gWEFfU1RSSU5HIHx8IGFjdHVhbEZvcm1hdCAhPSA4KQorICAgIHsKKwlpZiAocHJvcEluZm8gIT0gTlVMTCkKKwkgICAgWEZyZWUocHJvcEluZm8pOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldmVyYWwgY29tbWFuZHMgYW5kIHJlc3VsdHMgY291bGQgYXJyaXZlIGluIHRoZSBwcm9wZXJ0eSBhdAorICAgICAqIG9uZSB0aW1lOyAgZWFjaCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgb3V0ZXIgbG9vcCBoYW5kbGVzIGEKKyAgICAgKiBzaW5nbGUgY29tbWFuZCBvciByZXN1bHQuCisgICAgICovCisgICAgZm9yIChwID0gcHJvcEluZm87IChwIC0gcHJvcEluZm8pIDwgbnVtSXRlbXM7ICkKKyAgICB7CisJLyoKKwkgKiBJZ25vcmUgbGVhZGluZyBOVUxzOyBlYWNoIGNvbW1hbmQgb3IgcmVzdWx0IHN0YXJ0cyB3aXRoIGEKKwkgKiBOVUwgc28gdGhhdCBubyBtYXR0ZXIgaG93IGJhZGx5IGZvcm1lZCBhIHByZWNlZGluZyBjb21tYW5kCisJICogaXMsIHdlJ2xsIGJlIGFibGUgdG8gdGVsbCB0aGF0IGEgbmV3IGNvbW1hbmQvcmVzdWx0IGlzCisJICogc3RhcnRpbmcuCisJICovCisJaWYgKCpwID09IDApCisJeworCSAgICBwKys7CisJICAgIGNvbnRpbnVlOworCX0KKworCWlmICgoKnAgPT0gJ2MnIHx8ICpwID09ICdrJykgJiYgKHBbMV0gPT0gMCkpCisJeworCSAgICBXaW5kb3cJcmVzV2luZG93OworCSAgICBjaGFyX3UJKm5hbWUsICpzY3JpcHQsICpzZXJpYWwsICplbmQsICpyZXM7CisJICAgIEJvb2wJYXNLZXlzID0gKnAgPT0gJ2snOworCSAgICBnYXJyYXlfVAlyZXBseTsKKworCSAgICAvKgorCSAgICAgKiBUaGlzIGlzIGFuIGluY29taW5nIGNvbW1hbmQgZnJvbSBzb21lIG90aGVyIGFwcGxpY2F0aW9uLgorCSAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIG9mIGl0cyBvcHRpb25zLiAgU3RvcCB3aGVuIHdlIHJlYWNoCisJICAgICAqIHRoZSBlbmQgb2YgdGhlIHByb3BlcnR5IG9yIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgbG9vaworCSAgICAgKiBsaWtlIGFuIG9wdGlvbi4KKwkgICAgICovCisJICAgIHAgKz0gMjsKKwkgICAgbmFtZSA9IE5VTEw7CisJICAgIHJlc1dpbmRvdyA9IE5vbmU7CisJICAgIHNlcmlhbCA9IChjaGFyX3UgKikiIjsKKwkgICAgc2NyaXB0ID0gTlVMTDsKKwkgICAgd2hpbGUgKHAgLSBwcm9wSW5mbyA8IG51bUl0ZW1zICYmICpwID09ICctJykKKwkgICAgeworCQlzd2l0Y2ggKHBbMV0pCisJCXsKKwkJICAgIGNhc2UgJ3InOgorCQkJZW5kID0gc2tpcHdoaXRlKHAgKyAyKTsKKwkJCXJlc1dpbmRvdyA9IDA7CisJCQl3aGlsZSAodmltX2lzeGRpZ2l0KCplbmQpKQorCQkJeworCQkJICAgIHJlc1dpbmRvdyA9IDE2ICogcmVzV2luZG93ICsgKGxvbmdfdSloZXgybnIoKmVuZCk7CisJCQkgICAgKytlbmQ7CisJCQl9CisJCQlpZiAoZW5kID09IHAgKyAyIHx8ICplbmQgIT0gJyAnKQorCQkJICAgIHJlc1dpbmRvdyA9IE5vbmU7CisJCQllbHNlCisJCQl7CisJCQkgICAgcCA9IHNlcmlhbCA9IGVuZCArIDE7CisJCQkgICAgY2xpZW50V2luZG93ID0gcmVzV2luZG93OyAvKiBSZW1lbWJlciBpbiBnbG9iYWwgKi8KKwkJCX0KKwkJCWJyZWFrOworCQkgICAgY2FzZSAnbic6CisJCQlpZiAocFsyXSA9PSAnICcpCisJCQkgICAgbmFtZSA9IHAgKyAzOworCQkJYnJlYWs7CisJCSAgICBjYXNlICdzJzoKKwkJCWlmIChwWzJdID09ICcgJykKKwkJCSAgICBzY3JpcHQgPSBwICsgMzsKKwkJCWJyZWFrOworCQl9CisJCXdoaWxlICgqcCAhPSAwKQorCQkgICAgcCsrOworCQlwKys7CisJICAgIH0KKworCSAgICBpZiAoc2NyaXB0ID09IE5VTEwgfHwgbmFtZSA9PSBOVUxMKQorCQljb250aW51ZTsKKworCSAgICAvKgorCSAgICAgKiBJbml0aWFsaXplIHRoZSByZXN1bHQgcHJvcGVydHksIHNvIHRoYXQgd2UncmUgcmVhZHkgYXQgYW55CisJICAgICAqIHRpbWUgaWYgd2UgbmVlZCB0byByZXR1cm4gYW4gZXJyb3IuCisJICAgICAqLworCSAgICBpZiAocmVzV2luZG93ICE9IE5vbmUpCisJICAgIHsKKwkJZ2FfaW5pdDIoJnJlcGx5LCAxLCAxMDApOworCQlnYV9ncm93KCZyZXBseSwgNTApOworCQlzcHJpbnRmKHJlcGx5LmdhX2RhdGEsICIlY3IlYy1zICVzJWMtciAiLCAwLCAwLCBzZXJpYWwsIDApOworCQlyZXBseS5nYV9sZW4gPSAxMCArIFNUUkxFTihzZXJpYWwpOworCQlyZXBseS5nYV9yb29tIC09IHJlcGx5LmdhX2xlbjsKKwkgICAgfQorCSAgICByZXMgPSBOVUxMOworCSAgICBpZiAoc2VydmVyTmFtZSAhPSBOVUxMICYmIFNUUklDTVAobmFtZSwgc2VydmVyTmFtZSkgPT0gMCkKKwkgICAgeworCQlpZiAoYXNLZXlzKQorCQkgICAgc2VydmVyX3RvX2lucHV0X2J1ZihzY3JpcHQpOworCQllbHNlCisJCSAgICByZXMgPSBldmFsX2NsaWVudF9leHByX3RvX3N0cmluZyhzY3JpcHQpOworCSAgICB9CisJICAgIGlmIChyZXNXaW5kb3cgIT0gTm9uZSkKKwkgICAgeworCQlpZiAocmVzICE9IE5VTEwpCisJCSAgICBnYV9jb25jYXQoJnJlcGx5LCByZXMpOworCQllbHNlIGlmIChhc0tleXMgPT0gMCkKKwkJeworCQkgICAgZ2FfY29uY2F0KCZyZXBseSwgKGNoYXJfdSAqKV8oZV9pbnZleHBybXNnKSk7CisJCSAgICBnYV9hcHBlbmQoJnJlcGx5LCAwKTsKKwkJICAgIGdhX2NvbmNhdCgmcmVwbHksIChjaGFyX3UgKikiLWMgMSIpOworCQl9CisJCWdhX2FwcGVuZCgmcmVwbHksIDApOworCQkodm9pZClBcHBlbmRQcm9wQ2FyZWZ1bGx5KGRweSwgcmVzV2luZG93LCBjb21tUHJvcGVydHksCisJCQkJCSAgIHJlcGx5LmdhX2RhdGEsIHJlcGx5LmdhX2xlbik7CisJICAgIH0KKwkgICAgdmltX2ZyZWUocmVzKTsKKwl9CisJZWxzZSBpZiAoKnAgPT0gJ3InICYmIHBbMV0gPT0gMCkKKwl7CisJICAgIGludAkgICAgc2VyaWFsLCBnb3RTZXJpYWw7CisJICAgIGNoYXJfdSAgKnJlczsKKwkgICAgUGVuZGluZ0NvbW1hbmQgKnBjUHRyOworCisJICAgIC8qCisJICAgICAqIFRoaXMgaXMgYSByZXBseSB0byBzb21lIGNvbW1hbmQgdGhhdCB3ZSBzZW50IG91dC4gIEl0ZXJhdGUKKwkgICAgICogb3ZlciBhbGwgb2YgaXRzIG9wdGlvbnMuICBTdG9wIHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUKKwkgICAgICogcHJvcGVydHkgb3Igc29tZXRoaW5nIHRoYXQgZG9lc24ndCBsb29rIGxpa2UgYW4gb3B0aW9uLgorCSAgICAgKi8KKwkgICAgcCArPSAyOworCSAgICBnb3RTZXJpYWwgPSAwOworCSAgICByZXMgPSAoY2hhcl91ICopIiI7CisJICAgIGNvZGUgPSAwOworCSAgICB3aGlsZSAoKHAtcHJvcEluZm8pIDwgbnVtSXRlbXMgJiYgKnAgPT0gJy0nKQorCSAgICB7CisJCXN3aXRjaCAocFsxXSkKKwkJeworCQkgICAgY2FzZSAncic6CisJCQlpZiAocFsyXSA9PSAnICcpCisJCQkgICAgcmVzID0gcCArIDM7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ3MnOgorCQkJaWYgKHNzY2FuZigoY2hhciAqKXAgKyAyLCAiICVkIiwgJnNlcmlhbCkgPT0gMSkKKwkJCSAgICBnb3RTZXJpYWwgPSAxOworCQkJYnJlYWs7CisJCSAgICBjYXNlICdjJzoKKwkJCWlmIChzc2NhbmYoKGNoYXIgKilwICsgMiwgIiAlZCIsICZjb2RlKSAhPSAxKQorCQkJICAgIGNvZGUgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJd2hpbGUgKCpwICE9IDApCisJCSAgICBwKys7CisJCXArKzsKKwkgICAgfQorCisJICAgIGlmICghZ290U2VyaWFsKQorCQljb250aW51ZTsKKworCSAgICAvKgorCSAgICAgKiBHaXZlIHRoZSByZXN1bHQgaW5mb3JtYXRpb24gdG8gYW55b25lIHdobydzCisJICAgICAqIHdhaXRpbmcgZm9yIGl0LgorCSAgICAgKi8KKwkgICAgZm9yIChwY1B0ciA9IHBlbmRpbmdDb21tYW5kczsgcGNQdHIgIT0gTlVMTDsgcGNQdHIgPSBwY1B0ci0+bmV4dFB0cikKKwkgICAgeworCQlpZiAoc2VyaWFsICE9IHBjUHRyLT5zZXJpYWwgfHwgcGNQdHItPnJlc3VsdCAhPSBOVUxMKQorCQkgICAgY29udGludWU7CisKKwkJcGNQdHItPmNvZGUgPSBjb2RlOworCQlpZiAocmVzICE9IE5VTEwpCisJCSAgICBwY1B0ci0+cmVzdWx0ID0gdmltX3N0cnNhdmUocmVzKTsKKwkJZWxzZQorCQkgICAgcGNQdHItPnJlc3VsdCA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKikiIik7CisJCWJyZWFrOworCSAgICB9CisJfQorCWVsc2UgaWYgKCpwID09ICduJyAmJiBwWzFdID09IDApCisJeworCSAgICBXaW5kb3cJd2luID0gMDsKKwkgICAgdW5zaWduZWQgaW50IHU7CisJICAgIGludAkJZ290V2luZG93OworCSAgICBjaGFyX3UJKnN0cjsKKwkgICAgY2hhcl91CXdpbnN0clszMF07CisJICAgIHN0cnVjdAlTZXJ2ZXJSZXBseSAqcjsKKworCSAgICAvKgorCSAgICAgKiBUaGlzIGlzIGEgKG4pb3RpZmljYXRpb24uICBTZW50IHdpdGggc2VydmVycmVwbHlfc2VuZCBpbiBWaW1MLgorCSAgICAgKiBFeGVjdXRlIGFueSBhdXRvY29tbWFuZCBhbmQgc2F2ZSBpdCBmb3IgbGF0ZXIgcmV0cmlldmFsCisJICAgICAqLworCSAgICBwICs9IDI7CisJICAgIGdvdFdpbmRvdyA9IDA7CisJICAgIHN0ciA9IChjaGFyX3UgKikiIjsKKwkgICAgd2hpbGUgKChwLXByb3BJbmZvKSA8IG51bUl0ZW1zICYmICpwID09ICctJykKKwkgICAgeworCQlzd2l0Y2ggKHBbMV0pCisJCXsKKwkJICAgIGNhc2UgJ24nOgorCQkJaWYgKHBbMl0gPT0gJyAnKQorCQkJICAgIHN0ciA9IHAgKyAzOworCQkJYnJlYWs7CisJCSAgICBjYXNlICd3JzoKKwkJCWlmIChzc2NhbmYoKGNoYXIgKilwICsgMiwgIiAleCIsICZ1KSA9PSAxKQorCQkJeworCQkJICAgIHdpbiA9IHU7CisJCQkgICAgZ290V2luZG93ID0gMTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCXdoaWxlICgqcCAhPSAwKQorCQkgICAgcCsrOworCQlwKys7CisJICAgIH0KKworCSAgICBpZiAoIWdvdFdpbmRvdykKKwkJY29udGludWU7CisJICAgIGlmICgociA9IFNlcnZlclJlcGx5RmluZCh3aW4sIFNST1BfQWRkKSkgIT0gTlVMTCkKKwkgICAgeworCQlnYV9jb25jYXQoJihyLT5zdHJpbmdzKSwgc3RyKTsKKwkJZ2FfYXBwZW5kKCYoci0+c3RyaW5ncyksIDApOworCSAgICB9CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJICAgIHNwcmludGYoKGNoYXIgKil3aW5zdHIsICIweCV4IiwgKHVuc2lnbmVkIGludCl3aW4pOworCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9SRU1PVEVSRVBMWSwgd2luc3RyLCBzdHIsIFRSVUUsIGN1cmJ1Zik7CisjZW5kaWYKKworCX0KKwllbHNlCisJeworCSAgICAvKgorCSAgICAgKiBEaWRuJ3QgcmVjb2duaXplIHRoaXMgdGhpbmcuICBKdXN0IHNraXAgdGhyb3VnaCB0aGUgbmV4dAorCSAgICAgKiBudWxsIGNoYXJhY3RlciBhbmQgdHJ5IGFnYWluLgorCSAgICAgKiBFdmVuIGlmIHdlIGdldCBhbiAncicoZXBseSkgd2Ugd2lsbCB0aHJvdyBpdCBhd2F5IGFzIHdlCisJICAgICAqIG5ldmVyIHNwZWNpZnkgKGFuZCB0aHVzIGV4cGVjdCkgb25lCisJICAgICAqLworCSAgICB3aGlsZSAoKnAgIT0gMCkKKwkJcCsrOworCSAgICBwKys7CisJfQorICAgIH0KKyAgICBYRnJlZShwcm9wSW5mbyk7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBnaXZlbiBwcm9wZXJ0eSB0byBhIGdpdmVuIHdpbmRvdywgYnV0IHNldCB1cCBhbiBYIGVycm9yIGhhbmRsZXIgc28KKyAqIHRoYXQgaWYgdGhlIGFwcGVuZCBmYWlscyB0aGlzIHByb2NlZHVyZSBjYW4gcmV0dXJuIGFuIGVycm9yIGNvZGUgcmF0aGVyCisgKiB0aGFuIGhhdmluZyBYbGliIHBhbmljLgorICogUmV0dXJuOiAwIGZvciBPSywgLTEgZm9yIGVycm9yCisgKi8KKyAgICBzdGF0aWMgaW50CitBcHBlbmRQcm9wQ2FyZWZ1bGx5KGRweSwgd2luZG93LCBwcm9wZXJ0eSwgdmFsdWUsIGxlbmd0aCkKKyAgICBEaXNwbGF5CSpkcHk7CQkvKiBEaXNwbGF5IG9uIHdoaWNoIHRvIG9wZXJhdGUuICovCisgICAgV2luZG93CXdpbmRvdzsJCS8qIFdpbmRvdyB3aG9zZSBwcm9wZXJ0eSBpcyB0byBiZSBtb2RpZmllZC4gKi8KKyAgICBBdG9tCXByb3BlcnR5OwkvKiBOYW1lIG9mIHByb3BlcnR5LiAqLworICAgIGNoYXJfdQkqdmFsdWU7CQkvKiBDaGFyYWN0ZXJzICB0byBhcHBlbmQgdG8gcHJvcGVydHkuICovCisgICAgaW50CQlsZW5ndGg7CQkvKiBIb3cgbXVjaCB0byBhcHBlbmQgKi8KK3sKKyAgICBYRXJyb3JIYW5kbGVyIG9sZF9oYW5kbGVyOworCisgICAgb2xkX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKHhfZXJyb3JfY2hlY2spOworICAgIGdvdF94X2Vycm9yID0gRkFMU0U7CisgICAgWENoYW5nZVByb3BlcnR5KGRweSwgd2luZG93LCBwcm9wZXJ0eSwgWEFfU1RSSU5HLCA4LAorCQkJCQkgICAgICAgUHJvcE1vZGVBcHBlbmQsIHZhbHVlLCBsZW5ndGgpOworICAgIFhTeW5jKGRweSwgRmFsc2UpOworICAgICh2b2lkKSBYU2V0RXJyb3JIYW5kbGVyKG9sZF9oYW5kbGVyKTsKKyAgICByZXR1cm4gZ290X3hfZXJyb3IgPyAtMSA6IDA7Cit9CisKKworLyoKKyAqIEFub3RoZXIgWCBFcnJvciBoYW5kbGVyLCBqdXN0IHVzZWQgdG8gY2hlY2sgZm9yIGVycm9ycy4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgaW50Cit4X2Vycm9yX2NoZWNrKGRweSwgZXJyb3JfZXZlbnQpCisgICAgRGlzcGxheQkqZHB5OworICAgIFhFcnJvckV2ZW50CSplcnJvcl9ldmVudDsKK3sKKyAgICBnb3RfeF9lcnJvciA9IFRSVUU7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBpZiAic3RyIiBsb29rcyBsaWtlIGl0IGhhZCBhIHNlcmlhbCBudW1iZXIgYXBwZW5kZWQuCisgKiBBY3R1YWxseSBqdXN0IGNoZWNrcyBpZiB0aGUgbmFtZSBlbmRzIGluIGEgZGlnaXQuCisgKi8KKyAgICBzdGF0aWMgaW50CitJc1NlcmlhbE5hbWUoc3RyKQorICAgIGNoYXJfdQkqc3RyOworeworICAgIGludCBsZW4gPSBTVFJMRU4oc3RyKTsKKworICAgIHJldHVybiAobGVuID4gMSAmJiB2aW1faXNkaWdpdChzdHJbbGVuIC0gMV0pKTsKK30KKyNlbmRpZgkvKiBGRUFUX0NMSUVOVFNFUlZFUiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lpZF9vbGUuYyBiL3NyYy9paWRfb2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkZTIxMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9paWRfb2xlLmMKQEAgLTAsMCArMSw1MCBAQAorLyogdGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBhY3R1YWwgZGVmaW5pdGlvbnMgb2YgKi8KKy8qIHRoZSBJSURzIGFuZCBDTFNJRHMgKi8KKworLyogbGluayB0aGlzIGZpbGUgaW4gd2l0aCB0aGUgc2VydmVyIGFuZCBhbnkgY2xpZW50cyAqLworCisKKy8qIEZpbGUgY3JlYXRlZCBieSBNSURMIGNvbXBpbGVyIHZlcnNpb24gMy4wMC40NCAqLworLyogYXQgU2F0IEphbiAwMyAxNjozNDo1NSAxOTk4CisgKi8KKy8qIENvbXBpbGVyIHNldHRpbmdzIGZvciBpZl9vbGUuaWRsOgorICAgIE9zIChPcHRMZXY9cyksIFcxLCBacDgsIGVudj1XaW4zMiwgbXNfZXh0LCBjX2V4dAorICAgIGVycm9yIGNoZWNrczogbm9uZQorKi8KKy8vQEBNSURMX0ZJTEVfSEVBRElORyggICkKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDInsKKyNlbmRpZgorCisKKyNpZm5kZWYgX19JSURfREVGSU5FRF9fCisjZGVmaW5lIF9fSUlEX0RFRklORURfXworCit0eXBlZGVmIHN0cnVjdCBfSUlECit7CisgICAgdW5zaWduZWQgbG9uZyB4OworICAgIHVuc2lnbmVkIHNob3J0IHMxOworICAgIHVuc2lnbmVkIHNob3J0IHMyOworICAgIHVuc2lnbmVkIGNoYXIgIGNbOF07Cit9IElJRDsKKworI2VuZGlmIC8vIF9fSUlEX0RFRklORURfXworCisjaWZuZGVmIENMU0lEX0RFRklORUQKKyNkZWZpbmUgQ0xTSURfREVGSU5FRAordHlwZWRlZiBJSUQgQ0xTSUQ7CisjZW5kaWYgLy8gQ0xTSURfREVGSU5FRAorCitjb25zdCBJSUQgSUlEX0lWaW0gPSB7MHgwRjBCRkFFMiwweDRDOTAsMHgxMWQxLHsweDgyLDB4RDcsMHgwMCwweDA0LDB4QUMsMHgzNiwweDg1LDB4MTl9fTsKKworCitjb25zdCBJSUQgTElCSURfVmltID0gezB4MEYwQkZBRTAsMHg0QzkwLDB4MTFkMSx7MHg4MiwweEQ3LDB4MDAsMHgwNCwweEFDLDB4MzYsMHg4NSwweDE5fX07CisKKworY29uc3QgQ0xTSUQgQ0xTSURfVmltID0gezB4MEYwQkZBRTEsMHg0QzkwLDB4MTFkMSx7MHg4MiwweEQ3LDB4MDAsMHgwNCwweEFDLDB4MzYsMHg4NSwweDE5fX07CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvc3JjL2luZnBsaXN0LnhtbCBiL3NyYy9pbmZwbGlzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiYTVmYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmZwbGlzdC54bWwKQEAgLTAsMCArMSw1MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gdmltOnNldCB0cz0yIHN0cz0yIHN3PTIgdHc9MDogLS0+Cis8IURPQ1RZUEUgcGxpc3QgU1lTVEVNICJmaWxlOi8vbG9jYWxob3N0L1N5c3RlbS9MaWJyYXJ5L0RURHMvUHJvcGVydHlMaXN0LmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMC45Ij4KKwk8ZGljdD4KKworCQk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uPC9rZXk+CisJCTxzdHJpbmc+Ni4wPC9zdHJpbmc+CisKKwkJPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT4KKwkJPHN0cmluZz5BUFBfRVhFPC9zdHJpbmc+CisJCTxrZXk+Q0ZCdW5kbGVOYW1lPC9rZXk+CisJCTxzdHJpbmc+QVBQX05BTUU8L3N0cmluZz4KKwkJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+CisJCTxzdHJpbmc+QVBQTDwvc3RyaW5nPgorCQk8a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgorCQk8c3RyaW5nPkFQUF9WRVI8L3N0cmluZz4KKwkJPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PgorCQk8c3RyaW5nPkFQUF9WRVI8L3N0cmluZz4KKwkJPGtleT5DRkJ1bmRsZVNpZ25hdHVyZTwva2V5PgorCQk8c3RyaW5nPlZJTSE8L3N0cmluZz4KKworCQk8a2V5PkNGQnVuZGxlRGV2ZWxvcG1lbnRSZWdpb248L2tleT4KKwkJPHN0cmluZz5FbmdsaXNoPC9zdHJpbmc+CisJCTxrZXk+Q1NSZXNvdXJjZXNGaWxlTWFwcGVkPC9rZXk+CisJCTx0cnVlLz4KKwkJPGtleT5DRkJ1bmRsZUljb25GaWxlPC9rZXk+CisJCTxzdHJpbmc+SUNPTl9BUFA8L3N0cmluZz4KKworCQk8a2V5PkNGQnVuZGxlRG9jdW1lbnRUeXBlczwva2V5PgorCQk8YXJyYXk+CisJCQk8ZGljdD4KKwkJCQk8a2V5PkNGQnVuZGxlVHlwZUV4dGVuc2lvbnM8L2tleT4KKwkJCQk8YXJyYXk+CisJCQkJCTxzdHJpbmc+Kjwvc3RyaW5nPgorCQkJCTwvYXJyYXk+CisJCQkJPGtleT5DRkJ1bmRsZVR5cGVJY29uRmlsZTwva2V5PgorCQkJCTxzdHJpbmc+ZG9jLXR4dC5pY25zPC9zdHJpbmc+CisJCQkJPGtleT5DRkJ1bmRsZVR5cGVOYW1lPC9rZXk+CisJCQkJPHN0cmluZz5OU1N0cmluZ1Bib2FyZFR5cGU8L3N0cmluZz4KKwkJCQk8a2V5PkNGQnVuZGxlVHlwZU9TVHlwZXM8L2tleT4KKwkJCQk8YXJyYXk+CisJCQkJCTxzdHJpbmc+KioqKjwvc3RyaW5nPgorCQkJCTwvYXJyYXk+CisJCQkJPGtleT5DRkJ1bmRsZVR5cGVSb2xlPC9rZXk+CisJCQkJPHN0cmluZz5FZGl0b3I8L3N0cmluZz4KKwkJCTwvZGljdD4KKwkJPC9hcnJheT4KKworCTwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9zcmMvaW50ZWdyYXRpb24uYyBiL3NyYy9pbnRlZ3JhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTlkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZWdyYXRpb24uYwpAQCAtMCwwICsxLDExOTggQEAKKy8qIHZpOnNldCB0cz04IHN3PTg6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCQkJVmlzdWFsIFdvcmtzaG9wIGludGVncmF0aW9uIGJ5IEdvcmRvbiBQcmlldXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIEludGVncmF0aW9uIHdpdGggU3VuIFdvcmtzaG9wLgorICoKKyAqIFRoaXMgZmlsZSBzaG91bGQgbm90IGNoYW5nZSBtdWNoLCBpdCdzIGFsc28gdXNlZCBieSBvdGhlciBlZGl0b3JzIHRoYXQKKyAqIGNvbm5lY3QgdG8gV29ya3Nob3AuICBDb25zaWRlciBjaGFuZ2luZyB3b3Jrc2hvcC5jIGluc3RlYWQuCisgKi8KKy8qCistPiBjb25zaWRlciB1c2luZyBNYWtlU2VsZWN0aW9uVmlzaWJsZSBpbnN0ZWFkIG9mIGdvdG9MaW5lIGhhY2tzCisgICB0byBzaG93IHRoZSBsaW5lIHByb3Blcmx5CisgICAgIC0+IGNvbnNpZGVyIHVzaW5nIGdsdWUgaW5zdGVhZCBvZiBvdXIgb3duIG1lc3NhZ2Ugd3JhcHBpbmcgZnVuY3Rpb25zCisJKGJ1dCBjYW4gb25seSB1c2UgZ2x1ZSBpZiB3ZSBkb24ndCBoYXZlIHRvIGRpc3RyaWJ1dGUgc291cmNlKQorKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaWZkZWYgSU5FVF9TT0NLRVRTCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy91bi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpZmRlZiBIQVZFX0xJQkdFTl9ICisjIGluY2x1ZGUgPGxpYmdlbi5oPgorI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WG0vWG0uaD4KKyNpbmNsdWRlIDxYbS9BdG9tTWdyLmg+CisjaW5jbHVkZSA8WG0vUHVzaEIuaD4KKworI2lmZGVmIEhBVkVfWDExX1hQTV9ICisjIGluY2x1ZGUgPFgxMS94cG0uaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfWE1fWFBNUF9ICisjICBpbmNsdWRlIDxYbS9YcG1QLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEhBVkVfVVRJTF9ERUJVR19ICisjIGluY2x1ZGUgPHV0aWwvZGVidWcuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVVRJTF9NU0dJMThOX0gKKyMgaW5jbHVkZSA8dXRpbC9tc2dpMThuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImludGVncmF0aW9uLmgiCS8qIDxFZGl0UGx1Z2luL2ludGVncmF0aW9uLmg+ICovCisjaWZkZWYgSEFWRV9GUkFNRV9ICisjIGluY2x1ZGUgPGZyYW1lLmg+CisjZW5kaWYKKworI2lmbmRlZiBNQVgKKyMgZGVmaW5lIE1BWChhLCBiKSAgICAoYSkgPiAoYikgPyAoYSkgOiAoYikKKyNlbmRpZgorCisjaWZuZGVmIE5PQ0FUR0VUUworIyBkZWZpbmUgTk9DQVRHRVRTKHgpIHgKKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgcHJpdmF0ZSB0byB0aGlzIGZpbGUgKi8KK3N0YXRpYyB2b2lkIHdvcmtzaG9wX2Nvbm5lY3Rpb25fY2xvc2VkKHZvaWQpOworc3RhdGljIHZvaWQgbWVzc2FnZUZyb21Fc2VydmUoWHRQb2ludGVyIGNsaWVudERhdGEsIGludCAqTk9UVVNFRDEsIFh0SW5wdXRJZCAqTk9UVVNFRDIpOworc3RhdGljIHZvaWQgd29ya3Nob3BfZGlzY29ubmVjdCh2b2lkKTsKK3N0YXRpYyB2b2lkIHdvcmtzaG9wX3NlbnNpdGl2aXR5KGludCBudW0sIGNoYXIgKnRhYmxlKTsKK3N0YXRpYyB2b2lkIGFkanVzdF9zaWduX25hbWUoY2hhciAqZmlsZW5hbWUpOworc3RhdGljIHZvaWQgcHJvY2Vzc19tZW51SXRlbShjaGFyICopOworc3RhdGljIHZvaWQgcHJvY2Vzc190b29sYmFyQnV0dG9uKGNoYXIgKik7CitzdGF0aWMgdm9pZCB3b3Jrc2hvcF9zZXRfb3B0aW9uX2ZpcnN0KGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKKworCisjZGVmaW5lIENNREJVRlNJWgkyMDQ4CisKKyNpZmRlZiBERUJVRworc3RhdGljIEZJTEUgKmRmZDsKK3N0YXRpYyB2b2lkIHBsZGVidWcoY2hhciAqLCAuLi4pOworc3RhdGljIHZvaWQgdW5yZWNvZ25pc2VkX21lc3NhZ2UoY2hhciAqKTsKKworI2RlZmluZSBIQU5ETEVfRVJST1JTKGNtZCkJZWxzZSB1bnJlY29nbmlzZWRfbWVzc2FnZShjbWQpOworI2Vsc2UKKyNkZWZpbmUgSEFORExFX0VSUk9SUyhjbWQpCisjZW5kaWYKKworLyoKKyAqIFZlcnNpb24gbnVtYmVyIG9mIHRoZSBwcm90b2NvbCBiZXR3ZWVuIGFuIGVkaXRvciBhbmQgZXNlcnZlLgorICogVGhpcyBudW1iZXIgc2hvdWxkIGJlIGluY3JlbWVudGVkIHdoZW4gdGhlIHByb3RvY29sCisgKiBpcyBjaGFuZ2VkLgorICovCisjZGVmaW5lCVBST1RPQ09MX1ZFUlNJT04JIjQuMC4wIgorCitzdGF0aWMgaW50IHNkID0gLTE7CitzdGF0aWMgWHRJbnB1dElkIGlucHV0SGFuZGxlcjsJCS8qIENvb2tpZSBmb3IgaW5wdXQgKi8KKworQm9vbGVhbiBzYXZlX2ZpbGVzID0gVHJ1ZTsJCS8qIFdoZW4gdHJ1ZSwgc2F2ZSBhbGwgZmlsZXMgYmVmb3JlIGJ1aWxkIGFjdGlvbnMgKi8KKwordm9pZAord29ya3Nob3BfY29ubmVjdGlvbl9jbG9zZWQodm9pZCkKK3sKKwkvKgorCSAqIHNvY2tldCBjbG9zZWQgb24gb3RoZXIgZW5kCisJICovCisJWHRSZW1vdmVJbnB1dChpbnB1dEhhbmRsZXIpOworCWlucHV0SGFuZGxlciA9IDA7CisJc2QgPSAtMTsKK30KKworCXN0YXRpYyBjaGFyICoKK2dldENvbW1hbmQodm9pZCkKK3sKKwlpbnQJIGxlbjsJCS8qIGxlbmd0aCBvZiB0aGlzIGNvbW1hbmQgKi8KKwljaGFyCSBsZW5idWZbN107CS8qIGdldCB0aGUgbGVuZ3RoIHN0cmluZyBoZXJlICovCisJY2hhcgkqbmV3Y2I7CQkvKiB1c2VkIHRvIHJlYWxsb2MgY21kYnVmICovCisJc3RhdGljIGNoYXIJKmNtZGJ1ZjsvKiBnZXQgdGhlIGNvbW1hbmQgc3RyaW5nIGhlcmUgKi8KKwlzdGF0aWMgaW50CSBjYnNpemU7Lyogc2l6ZSBvZiBjbWRidWYgKi8KKworCWlmICgobGVuID0gcmVhZChzZCwgJmxlbmJ1ZiwgNikpID09IDYpIHsKKwkJbGVuYnVmWzZdID0gMDsgLyogVGVybWluYXRlIGJ1ZmZlciBzdWNoIHRoYXQgYXRvaSgpIHdvcmtzIHJpZ2h0ICovCisJCWxlbiA9IGF0b2kobGVuYnVmKTsKKwkJaWYgKGNic2l6ZSA8IChsZW4gKyAxKSkgeworCQkJbmV3Y2IgPSAoY2hhciAqKSByZWFsbG9jKGNtZGJ1ZiwKKwkJCSAgICBNQVgoKGxlbiArIDI1NiksIENNREJVRlNJWikpOworCQkJaWYgKG5ld2NiICE9IE5VTEwpIHsKKwkJCQljbWRidWYgPSBuZXdjYjsKKwkJCQljYnNpemUgPSBNQVgoKGxlbiArIDI1NiksIENNREJVRlNJWik7CisJCQl9CisJCX0KKwkJaWYgKGNic2l6ZSA+PSBsZW4gJiYgKGxlbiA9IHJlYWQoc2QsIGNtZGJ1ZiwgbGVuKSkgPiAwKSB7CisJCQljbWRidWZbbGVuXSA9IDA7CisJCQlyZXR1cm4gY21kYnVmOworCQl9IGVsc2UgeworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobGVuID09IDApIHsgLyogRU9GICovCisJCQl3b3Jrc2hvcF9jb25uZWN0aW9uX2Nsb3NlZCgpOworCQl9CisJCXJldHVybiBOVUxMOworCX0KKworfQorCisvKkFSR1NVU0VEKi8KK3ZvaWQKK21lc3NhZ2VGcm9tRXNlcnZlKFh0UG9pbnRlciBjbGllbnREYXRhLCBpbnQgKk5PVFVTRUQxLCBYdElucHV0SWQgKk5PVFVTRUQyKQoreworCWNoYXIJKmNtZDsJCS8qIHRoZSAxc3Qgd29yZCBvZiB0aGUgY29tbWFuZCAqLworCisJY21kID0gZ2V0Q29tbWFuZCgpOworCWlmIChjbWQgPT0gTlVMTCkgeworCQkvKiBXZSdyZSBiZWluZyBzaHV0IGRvd24gYnkgZXNlcnZlIGFuZCB0aGUgInF1aXQiIG1lc3NhZ2UKKwkJICogZGlkbid0IGFycml2ZSBiZWZvcmUgdGhlIHNvY2tldCBjb25uZWN0aW9uIGdvdCBjbG9zZWQgKi8KKwkJcmV0dXJuOworCX0KKyNpZmRlZiBERUJVRworCXBsZGVidWcoIiVzXG4iLCBjbWQpOworI2VuZGlmCisJc3dpdGNoICgqY21kKSB7CisJY2FzZSAnYSc6CisJCWlmIChjbWRbMV0gPT0gJ2MnICYmCisJCSAgICBzdHJuY21wKGNtZCwgTk9DQVRHRVRTKCJhY2sgIiksIDQpID09IDApIHsKKwkJCWludCBhY2tOdW07CisJCQljaGFyIGJ1ZlsyMF07CisKKwkJCWFja051bSA9IGF0b2koJmNtZFs0XSk7CisJCQlzcHJpbnRmKGJ1ZiwgTk9DQVRHRVRTKCJhY2sgJWRcbiIpLCBhY2tOdW0pOworCQkJd3JpdGUoc2QsIGJ1Ziwgc3RybGVuKGJ1ZikpOworCQl9IGVsc2UgaWYgKHN0cm5jbXAoY21kLAorCQkgICAgTk9DQVRHRVRTKCJhZGRNYXJrVHlwZSAiKSwgMTIpID09IDApIHsKKwkJCWludCBpZHg7CisJCQljaGFyICpjb2xvcjsKKwkJCWNoYXIgKnNpZ247CisKKwkJCWlkeCA9IGF0b2koc3RydG9rKCZjbWRbMTJdLCAiICIpKTsKKwkJCWNvbG9yICA9IHN0cnRvayhOVUxMLCBOT0NBVEdFVFMoIlwwMDEiKSk7CisJCQlzaWduICA9IHN0cnRvayhOVUxMLCBOT0NBVEdFVFMoIlwwMDEiKSk7CisJCQkvKiBTa2lwIHNwYWNlIHRoYXQgc2VwYXJhdGVzIG5hbWVzICovCisJCQlpZiAoY29sb3IpIHsKKwkJCQljb2xvcisrOworCQkJfQorCQkJaWYgKHNpZ24pIHsKKwkJCQlzaWduKys7CisJCQl9CisJCQkvKiBDaGFuZ2Ugc2lnbiBuYW1lIHRvIGFjY29tb2RhdGUgYSBkaWZmZXJlbnQgc2l6ZT8gKi8KKwkJCWFkanVzdF9zaWduX25hbWUoc2lnbik7CisJCQl3b3Jrc2hvcF9hZGRfbWFya190eXBlKGlkeCwgY29sb3IsIHNpZ24pOworCQl9CisJCUhBTkRMRV9FUlJPUlMoY21kKTsKKwkJYnJlYWs7CisKKwljYXNlICdiJzoKKwkJaWYgKHN0cm5jbXAoY21kLAorCQkgICAgTk9DQVRHRVRTKCJiYWxsb29uICIpLCA4KSA9PSAwKSB7CisJCQljaGFyICp0aXA7CisKKwkJCXRpcCAgPSBzdHJ0b2soJmNtZFs4XSwgTk9DQVRHRVRTKCJcMDAxIikpOworCQkJd29ya3Nob3Bfc2hvd19iYWxsb29uX3RpcCh0aXApOworCQl9CisJCUhBTkRMRV9FUlJPUlMoY21kKTsKKwkJYnJlYWs7CisKKwljYXNlICdjJzoKKwkJaWYgKHN0cm5jbXAoY21kLAorCQkgICAgTk9DQVRHRVRTKCJjaGFuZ2VNYXJrVHlwZSAiKSwgMTUpID09IDApIHsKKwkJCWNoYXIgKmZpbGU7CisJCQlpbnQgbWFya0lkOworCQkJaW50IHR5cGU7CisKKwkJCWZpbGUgID0gc3RydG9rKCZjbWRbMTVdLCAiICIpOworCQkJbWFya0lkID0gYXRvaShzdHJ0b2soTlVMTCwgIiAiKSk7CisJCQl0eXBlID0gYXRvaShzdHJ0b2soTlVMTCwgIiAiKSk7CisJCQl3b3Jrc2hvcF9jaGFuZ2VfbWFya190eXBlKGZpbGUsIG1hcmtJZCwgdHlwZSk7CisJCX0KKwkJSEFORExFX0VSUk9SUyhjbWQpOworCQlicmVhazsKKworCWNhc2UgJ2QnOgorCQlpZiAoc3RybmNtcChjbWQsIE5PQ0FUR0VUUygiZGVsZXRlTWFyayAiKSwgMTEpID09IDApIHsKKwkJCWNoYXIgKmZpbGU7CisJCQlpbnQgbWFya0lkOworCisJCQlmaWxlICA9IHN0cnRvaygmY21kWzExXSwgIiAiKTsKKwkJCW1hcmtJZCA9IGF0b2koc3RydG9rKE5VTEwsICIgIikpOworCQkJd29ya3Nob3BfZGVsZXRlX21hcmsoZmlsZSwgbWFya0lkKTsKKwkJfQorCQlIQU5ETEVfRVJST1JTKGNtZCk7CisJCWJyZWFrOworCisJY2FzZSAnZic6CisJCWlmIChjbWRbMV0gPT0gJ28nICYmCisJCSAgICBzdHJuY21wKGNtZCwgTk9DQVRHRVRTKCJmb290ZXJNc2cgIiksIDEwKSA9PSAwKSB7CisJCQlpbnQgc2V2ZXJpdHk7CisJCQljaGFyICptZXNzYWdlOworCisJCQlzZXZlcml0eSA9CisJCQkgICAgYXRvaShzdHJ0b2soJmNtZFsxMF0sICIgIikpOworCQkJbWVzc2FnZSA9IHN0cnRvayhOVUxMLCBOT0NBVEdFVFMoIlwwMDEiKSk7CisKKwkJCXdvcmtzaG9wX2Zvb3Rlcl9tZXNzYWdlKG1lc3NhZ2UsIHNldmVyaXR5KTsKKwkJfSBlbHNlIGlmIChzdHJuY21wKGNtZCwKKwkJICAgIE5PQ0FUR0VUUygiZnJvbnRGaWxlICIpLCAxMCkgPT0gMCkgeworCQkJY2hhciAqZmlsZTsKKworCQkJZmlsZSAgPSBzdHJ0b2soJmNtZFsxMF0sICIgIik7CisJCQl3b3Jrc2hvcF9mcm9udF9maWxlKGZpbGUpOworCQl9CisJCUhBTkRMRV9FUlJPUlMoY21kKTsKKwkJYnJlYWs7CisKKwljYXNlICdnJzoKKwkJaWYgKGNtZFsxXSA9PSAnZScgJiYKKwkJICAgIHN0cm5jbXAoY21kLCBOT0NBVEdFVFMoImdldE1hcmtMaW5lICIpLCAxMikgPT0gMCkgeworCQkJY2hhciAqZmlsZTsKKwkJCWludCBtYXJraWQ7CisJCQlpbnQgbGluZTsKKwkJCWNoYXIgYnVmWzEwMF07CisKKwkJCWZpbGUgID0gc3RydG9rKCZjbWRbMTJdLCAiICIpOworCQkJbWFya2lkID0gYXRvaShzdHJ0b2soTlVMTCwgIiAiKSk7CisJCQlsaW5lID0gd29ya3Nob3BfZ2V0X21hcmtfbGluZW5vKGZpbGUsIG1hcmtpZCk7CisJCQlzcHJpbnRmKGJ1ZiwgTk9DQVRHRVRTKCJtYXJrTGluZSAlcyAlZCAlZFxuIiksCisJCQkgICAgZmlsZSwgbWFya2lkLCBsaW5lKTsKKwkJCXdyaXRlKHNkLCBidWYsIHN0cmxlbihidWYpKTsKKwkJfSBlbHNlIGlmIChjbWRbMV0gPT0gJ28nICYmIGNtZFs0XSA9PSAnTCcgJiYKKwkJICAgIHN0cm5jbXAoY21kLCBOT0NBVEdFVFMoImdvdG9MaW5lICIpLCA5KSA9PSAwKSB7CisJCQljaGFyICpmaWxlOworCQkJaW50IGxpbmVubzsKKworCQkJZmlsZSAgPSBzdHJ0b2soJmNtZFs5XSwgIiAiKTsKKwkJCWxpbmVubyA9IGF0b2koc3RydG9rKE5VTEwsICIgIikpOworCQkJd29ya3Nob3BfZ290b19saW5lKGZpbGUsIGxpbmVubyk7CisJCX0gZWxzZSBpZiAoc3RybmNtcChjbWQsCisJCSAgICBOT0NBVEdFVFMoImdvdG9NYXJrICIpLCA5KSA9PSAwKSB7CisJCQljaGFyICpmaWxlOworCQkJaW50IG1hcmtJZDsKKwkJCWNoYXIgKm1lc3NhZ2U7CisKKwkJCWZpbGUgID0gc3RydG9rKCZjbWRbOV0sICIgIik7CisJCQltYXJrSWQgPSBhdG9pKHN0cnRvayhOVUxMLCAiICIpKTsKKwkJCW1lc3NhZ2UgPSBzdHJ0b2soTlVMTCwgTk9DQVRHRVRTKCJcMDAxIikpOworCQkJd29ya3Nob3BfZ290b19tYXJrKGZpbGUsIG1hcmtJZCwgbWVzc2FnZSk7CisjaWZkZWYgTk9IQU5EU19TVVBQT1JUX0ZVTkNUSU9OUworCQl9IGVsc2UgaWYgKHN0cmNtcChjbWQsIE5PQ0FUR0VUUygiZ2V0Q3VycmVudEZpbGUiKSkgPT0gMCkgeworCQkJY2hhciAqZiA9IHdvcmtzaG9wX3Rlc3RfZ2V0Y3VycmVudGZpbGUoKTsKKwkJCWNoYXIgYnVmZmVyWzIqTUFYUEFUSExFTl07CisJCQlzcHJpbnRmKGJ1ZmZlciwgTk9DQVRHRVRTKCJjdXJyZW50RmlsZSAlZCAlcyIpLAorCQkJCWYgPyBzdHJsZW4oZikgOiAwLCBmID8gZiA6ICIiKTsKKwkJCXdvcmtzaG9wX3NlbmRfbWVzc2FnZShidWZmZXIpOworCQl9IGVsc2UgaWYgKHN0cmNtcChjbWQsIE5PQ0FUR0VUUygiZ2V0Q3Vyc29yUm93IikpID09IDApIHsKKwkJCWludCByb3cgPSB3b3Jrc2hvcF90ZXN0X2dldGN1cnNvcnJvdygpOworCQkJY2hhciBidWZmZXJbMipNQVhQQVRITEVOXTsKKwkJCXNwcmludGYoYnVmZmVyLCBOT0NBVEdFVFMoImN1cnNvclJvdyAlZCIpLCByb3cpOworCQkJd29ya3Nob3Bfc2VuZF9tZXNzYWdlKGJ1ZmZlcik7CisJCX0gZWxzZSBpZiAoc3RyY21wKGNtZCwgTk9DQVRHRVRTKCJnZXRDdXJzb3JDb2wiKSkgPT0gMCkgeworCQkJaW50IGNvbCA9IHdvcmtzaG9wX3Rlc3RfZ2V0Y3Vyc29yY29sKCk7CisJCQljaGFyIGJ1ZmZlclsyKk1BWFBBVEhMRU5dOworCQkJc3ByaW50ZihidWZmZXIsIE5PQ0FUR0VUUygiY3Vyc29yQ29sICVkIiksIGNvbCk7CisJCQl3b3Jrc2hvcF9zZW5kX21lc3NhZ2UoYnVmZmVyKTsKKwkJfSBlbHNlIGlmIChzdHJjbXAoY21kLCBOT0NBVEdFVFMoImdldEN1cnNvclJvd1RleHQiKSkgPT0gMCkgeworCQkJY2hhciAqdCA9IHdvcmtzaG9wX3Rlc3RfZ2V0Y3Vyc29ycm93dGV4dCgpOworCQkJY2hhciBidWZmZXJbMipNQVhQQVRITEVOXTsKKwkJCXNwcmludGYoYnVmZmVyLCBOT0NBVEdFVFMoImN1cnNvclJvd1RleHQgJWQgJXMiKSwKKwkJCQl0ID8gc3RybGVuKHQpIDogMCwgdCA/IHQgOiAiIik7CisJCQl3b3Jrc2hvcF9zZW5kX21lc3NhZ2UoYnVmZmVyKTsKKwkJfSBlbHNlIGlmIChzdHJjbXAoY21kLCBOT0NBVEdFVFMoImdldFNlbGVjdGVkVGV4dCIpKSA9PSAwKSB7CisJCQljaGFyICp0ID0gd29ya3Nob3BfdGVzdF9nZXRzZWxlY3RlZHRleHQoKTsKKwkJCWNoYXIgYnVmZmVyWzIqTUFYUEFUSExFTl07CisJCQlzcHJpbnRmKGJ1ZmZlciwgTk9DQVRHRVRTKCJzZWxlY3RlZFRleHQgJWQgJXMiKSwKKwkJCQl0ID8gc3RybGVuKHQpIDogMCwgdCA/IHQgOiAiIik7CisJCQl3b3Jrc2hvcF9zZW5kX21lc3NhZ2UoYnVmZmVyKTsKKyNlbmRpZgorCQl9CisJCUhBTkRMRV9FUlJPUlMoY21kKTsKKwkJYnJlYWs7CisKKwljYXNlICdsJzoKKwkJaWYgKHN0cm5jbXAoY21kLCBOT0NBVEdFVFMoImxvYWRGaWxlICIpLCA5KSA9PSAwKSB7CisJCQljaGFyICpmaWxlOworCQkJaW50IGxpbmU7CisJCQljaGFyICpmcmFtZWlkOworCisJCQlmaWxlICA9IHN0cnRvaygmY21kWzldLCAiICIpOworCQkJbGluZSA9IGF0b2koc3RydG9rKE5VTEwsICIgIikpOworCQkJZnJhbWVpZCA9IHN0cnRvayhOVUxMLCAiICIpOworCQkJd29ya3Nob3BfbG9hZF9maWxlKGZpbGUsIGxpbmUsIGZyYW1laWQpOworCQl9CisJCUhBTkRMRV9FUlJPUlMoY21kKTsKKwkJYnJlYWs7CisKKwljYXNlICdtJzoJCQkvKiBNZW51LCBtaW5pbWl6ZSwgbWF4aW1pemUgKi8KKwkJaWYgKGNtZFsxXSA9PSAnZScgJiYgY21kWzRdID09ICdCJyAmJgorCQkgICAgc3RybmNtcChjbWQsIE5PQ0FUR0VUUygibWVudUJlZ2luICIpLCAxMCkgPT0gMCkgeworCQkJd29ya3Nob3BfbWVudV9iZWdpbigmY21kWzEwXSk7CisJCX0gZWxzZSBpZiAoY21kWzFdID09ICdlJyAmJiBjbWRbNF0gPT0gJ0knICYmCisJCSAgICBzdHJuY21wKGNtZCwgTk9DQVRHRVRTKCJtZW51SXRlbSAiKSwgOSkgPT0gMCkgeworCQkJcHJvY2Vzc19tZW51SXRlbShjbWQpOworCQl9IGVsc2UgaWYgKGNtZFsxXSA9PSAnZScgJiYgY21kWzRdID09ICdFJyAmJgorCQkgICAgc3RyY21wKGNtZCwgTk9DQVRHRVRTKCJtZW51RW5kIikpID09IDApIHsKKwkJCXdvcmtzaG9wX21lbnVfZW5kKCk7CisJCX0gZWxzZSBpZiAoY21kWzFdID09ICdhJyAmJgorCQkgICAgc3RyY21wKGNtZCwgTk9DQVRHRVRTKCJtYXhpbWl6ZSIpKSA9PSAwKSB7CisJCQl3b3Jrc2hvcF9tYXhpbWl6ZSgpOworCQl9IGVsc2UgaWYgKHN0cmNtcChjbWQsIE5PQ0FUR0VUUygibWluaW1pemUiKSkgPT0gMCkgeworCQkJd29ya3Nob3BfbWluaW1pemUoKTsKKwkJfQorCQlIQU5ETEVfRVJST1JTKGNtZCk7CisJCWJyZWFrOworCisJY2FzZSAnbyc6CisJCWlmIChjbWRbMV0gPT0gJ3AnICYmCisJCSAgICBzdHJjbXAoY21kLCBOT0NBVEdFVFMoIm9wdGlvbiIpKSkgeworCQkJY2hhciAqbmFtZTsKKwkJCWNoYXIgKnZhbHVlOworCisJCQluYW1lICA9IHN0cnRvaygmY21kWzddLCAiICIpOworCQkJdmFsdWUgPSBzdHJ0b2soTlVMTCwgIiAiKTsKKwkJCXdvcmtzaG9wX3NldF9vcHRpb25fZmlyc3QobmFtZSwgdmFsdWUpOworCQl9CisJCUhBTkRMRV9FUlJPUlMoY21kKTsKKwkJYnJlYWs7CisKKwljYXNlICdwJzoKKwkJaWYgKHN0cmNtcChjbWQsIE5PQ0FUR0VUUygicGluZyIpKSA9PSAwKSB7CisjaWYgMAorCQkJaW50IHBpbmdOdW07CisKKwkJCXBpbmdOdW0gPSBhdG9pKCZjbWRbNV0pOworCQkJd29ya3Nob3Bfc2VuZF9hY2soYWNrTnVtKTsKKwkJCVdIQVQgRE8gSSBETyBIRVJFPworI2VuZGlmCisJCX0KKwkJSEFORExFX0VSUk9SUyhjbWQpOworCQlicmVhazsKKworCWNhc2UgJ3EnOgorCQlpZiAoc3RybmNtcChjbWQsIE5PQ0FUR0VUUygicXVpdCIpLCA0KSA9PSAwKSB7CisKKwkJCS8qIENsb3NlIHRoZSBjb25uZWN0aW9uLiBJdCdzIGltcG9ydGFudCB0byBkbworCQkJICogdGhhdCBub3csIHNpbmNlIHdvcmtzaG9wX3F1aXQgbWlnaHQgYmUKKwkJCSAqIGxvb2tpbmcgYXQgb3BlbiBmaWxlcy4gIEZvciBleGFtcGxlLCBpZiB5b3UKKwkJCSAqIGhhdmUgbW9kaWZpZWQgb25lIG9mIHRoZSBmaWxlcyB3aXRob3V0CisJCQkgKiBzYXZpbmcsIE5FZGl0IHdpbGwgYXNrIHlvdSB3aGF0IHlvdSB3YW50IHRvCisJCQkgKiBkbywgYW5kIHNwaW4gbG9vcCBieSBjYWxsaW5nCisJCQkgKiBYdEFwcFByb2Nlc3NFdmVudCB3aGlsZSB3YWl0aW5nIGZvciB5b3VyCisJCQkgKiByZXBseS4gSW4gdGhpcyBjYXNlLCBpZiB3ZSBzdGlsbCBoYXZlIGFuCisJCQkgKiBpbnB1dCBoYW5kbGVyIGFuZCB0aGUgc29ja2V0IGhhcyBiZWVuCisJCQkgKiBjbG9zZWQgb24gdGhlIG90aGVyIHNpZGUgd2hlbiBlc2VydmUKKwkJCSAqIGV4cGlyZWQsIHdlIHdpbGwgaGFuZyBpbiBJb1dhaXQuCisJCQkgKi8KKwkJCXdvcmtzaG9wX2Rpc2Nvbm5lY3QoKTsKKworCQkJd29ya3Nob3BfcXVpdCgpOworCQl9CisJCUhBTkRMRV9FUlJPUlMoY21kKTsKKwkJYnJlYWs7CisKKwljYXNlICdyJzoKKwkJaWYgKGNtZFsxXSA9PSAnZScgJiYKKwkJICAgIHN0cm5jbXAoY21kLCBOT0NBVEdFVFMoInJlbG9hZEZpbGUgIiksIDExKSA9PSAwKSB7CisJCQljaGFyICpmaWxlOworCQkJaW50IGxpbmU7CisKKwkJCWZpbGUgID0gc3RydG9rKCZjbWRbMTFdLCAiICIpOworCQkJbGluZSA9IGF0b2koc3RydG9rKE5VTEwsICIgIikpOworCQkJd29ya3Nob3BfcmVsb2FkX2ZpbGUoZmlsZSwgbGluZSk7CisJCX0KKwkJSEFORExFX0VSUk9SUyhjbWQpOworCQlicmVhazsKKworCWNhc2UgJ3MnOgorCQlpZiAoY21kWzFdID09ICdlJyAmJiBjbWRbMl0gPT0gJ3QnICYmCisJCSAgICBzdHJuY21wKGNtZCwgTk9DQVRHRVRTKCJzZXRNYXJrICIpLCA4KSA9PSAwKSB7CisJCQljaGFyICpmaWxlOworCQkJaW50IGxpbmU7CisJCQlpbnQgbWFya0lkOworCQkJaW50IHR5cGU7CisKKwkJCWZpbGUgID0gc3RydG9rKCZjbWRbOF0sICIgIik7CisJCQlsaW5lID0gYXRvaShzdHJ0b2soTlVMTCwgIiAiKSk7CisJCQltYXJrSWQgPSBhdG9pKHN0cnRvayhOVUxMLCAiICIpKTsKKwkJCXR5cGUgPSBhdG9pKHN0cnRvayhOVUxMLCAiICIpKTsKKwkJCXdvcmtzaG9wX3NldF9tYXJrKGZpbGUsIGxpbmUsIG1hcmtJZCwgdHlwZSk7CisJCX0gZWxzZSBpZiAoY21kWzFdID09ICdoJyAmJgorCQkgICAgc3RybmNtcChjbWQsIE5PQ0FUR0VUUygic2hvd0ZpbGUgIiksIDkpID09IDApIHsKKwkJCXdvcmtzaG9wX3Nob3dfZmlsZSgmY21kWzldKTsKKwkJfSBlbHNlIGlmIChjbWRbMV0gPT0gJ3UnICYmCisJCSAgICBzdHJuY21wKGNtZCwgTk9DQVRHRVRTKCJzdWJNZW51ICIpLCA4KSA9PSAwKSB7CisJCQljaGFyICpsYWJlbDsKKworCQkJbGFiZWwgID0gc3RydG9rKCZjbWRbOF0sIE5PQ0FUR0VUUygiXDAwMSIpKTsKKwkJCXdvcmtzaG9wX3N1Ym1lbnVfYmVnaW4obGFiZWwpOworCQl9IGVsc2UgaWYgKGNtZFsxXSA9PSAndScgJiYKKwkJICAgIHN0cmNtcChjbWQsIE5PQ0FUR0VUUygic3ViTWVudUVuZCIpKSA9PSAwKSB7CisJCQl3b3Jrc2hvcF9zdWJtZW51X2VuZCgpOworCQl9IGVsc2UgaWYgKGNtZFsxXSA9PSAnZScgJiYgY21kWzJdID09ICduJyAmJgorCQkgICAgc3RybmNtcChjbWQsIE5PQ0FUR0VUUygic2Vuc2l0aXZpdHkgIiksIDEyKSA9PSAwKSB7CisJCQlpbnQgbnVtOworCQkJY2hhciAqYnJhY2tldDsKKwkJCWNoYXIgKnRhYmxlOworCisJCQludW0gPSBhdG9pKHN0cnRvaygmY21kWzEyXSwgIiAiKSk7CisJCQlicmFja2V0ID0gc3RydG9rKE5VTEwsICIgIik7CisJCQlpZiAoKmJyYWNrZXQgIT0gJ1snKSB7CisJCQkJZnByaW50ZihzdGRlcnIsIE5PQ0FUR0VUUygiUGFyc2luZyAiCisJCQkJICAgICJlcnJvciBmb3Igc2Vuc2l0aXZpdHlcbiIpKTsKKwkJCX0gZWxzZSB7CisJCQkJdGFibGUgPSBzdHJ0b2soTlVMTCwgTk9DQVRHRVRTKCJdIikpOworCQkJCXdvcmtzaG9wX3NlbnNpdGl2aXR5KG51bSwgdGFibGUpOworCQkJfQorCQl9IGVsc2UgaWYgKGNtZFsxXSA9PSAnZScgJiYgY21kWzJdID09ICduJyAmJiBjbWRbM10gPT0gJ2QnICYmCisJCQkgICBzdHJuY21wKGNtZCwgTk9DQVRHRVRTKCJzZW5kVmVyYiAiKSwgOSkgPT0gMCkgeworCQkJLyogU2VuZCB0aGUgZ2l2ZW4gdmVyYiBiYWNrICh1c2VkIGZvciB0aGUKKwkJCSAqIGRlYnVnLmxpbmVubyBjYWxsYmFjayAoc3VjaCB0aGF0IG90aGVyIHRvb2xzCisJCQkgKiBjYW4gb2J0YWluIHRoZSBwb3NpdGlvbiBjb29yZGluYXRlcyBvciB0aGUKKwkJCSAqIHNlbGVjdGlvbikgKi8KKwkJCWNoYXIgKnZlcmI7CisKKwkJCXZlcmIgPSBzdHJ0b2soJmNtZFs5XSwgIiAiKTsKKwkJCXdvcmtzaG9wX3BlcmZvcm1fdmVyYih2ZXJiLCBOVUxMKTsKKwkJfSBlbHNlIGlmIChjbWRbMV0gPT0gJ2EnICYmCisJCSAgICBzdHJuY21wKGNtZCwgTk9DQVRHRVRTKCJzYXZlRmlsZSAiKSwgOSkgPT0gMCkgeworCQkJd29ya3Nob3Bfc2F2ZV9maWxlKCZjbWRbOV0pOworI2lmZGVmIE5PSEFORFNfU1VQUE9SVF9GVU5DVElPTlMKKwkJfSBlbHNlIGlmIChzdHJuY21wKGNtZCwgTk9DQVRHRVRTKCJzYXZlU2Vuc2l0aXZpdHkgIiksIDE2KSA9PSAwKSB7CisJCQljaGFyICpmaWxlOworCisJCQlmaWxlICA9IHN0cnRvaygmY21kWzE2XSwgIiAiKTsKKwkJCXdvcmtzaG9wX3NhdmVfc2Vuc2l0aXZpdHkoZmlsZSk7CisjZW5kaWYKKwkJfQorCQlIQU5ETEVfRVJST1JTKGNtZCk7CisJCWJyZWFrOworCisJY2FzZSAndCc6CQkJLyogVG9vbGJhciAqLworCQlpZiAoY21kWzhdID09ICdlJyAmJgorCQkgICAgc3RybmNtcChjbWQsIE5PQ0FUR0VUUygidG9vbGJhckJlZ2luIiksIDEyKSA9PSAwKSB7CisJCQl3b3Jrc2hvcF90b29sYmFyX2JlZ2luKCk7CisJCX0gZWxzZSBpZiAoY21kWzhdID09ICd1JyAmJgorCQkgICAgc3RybmNtcChjbWQsIE5PQ0FUR0VUUygidG9vbGJhckJ1dHRvbiIpLCAxMykgPT0gMCkgeworCQkJcHJvY2Vzc190b29sYmFyQnV0dG9uKGNtZCk7CisJCX0gZWxzZSBpZiAoY21kWzddID09ICdFJyAmJgorCQkgICAgc3RyY21wKGNtZCwgTk9DQVRHRVRTKCJ0b29sYmFyRW5kIikpID09IDApIHsKKwkJCXdvcmtzaG9wX3Rvb2xiYXJfZW5kKCk7CisJCX0KKwkJSEFORExFX0VSUk9SUyhjbWQpOworCQlicmVhazsKKworI2lmZGVmIERFQlVHCisJZGVmYXVsdDoKKwkJdW5yZWNvZ25pc2VkX21lc3NhZ2UoY21kKTsKKwkJYnJlYWs7CisjZW5kaWYKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX21lbnVJdGVtKAorCWNoYXIJKmNtZCkKK3sKKwljaGFyICpsYWJlbCAgPSBzdHJ0b2soJmNtZFs5XSwgTk9DQVRHRVRTKCJcMDAxIikpOworCWNoYXIgKnZlcmIgID0gc3RydG9rKE5VTEwsIE5PQ0FUR0VUUygiXDAwMSIpKTsKKwljaGFyICphY2MgPSBzdHJ0b2soTlVMTCwgTk9DQVRHRVRTKCJcMDAxIikpOworCWNoYXIgKmFjY1RleHQgID0gc3RydG9rKE5VTEwsIE5PQ0FUR0VUUygiXDAwMSIpKTsKKwljaGFyICpuYW1lICA9IHN0cnRvayhOVUxMLCBOT0NBVEdFVFMoIlwwMDEiKSk7CisJY2hhciAqc2Vuc2UgID0gc3RydG9rKE5VTEwsIE5PQ0FUR0VUUygiXG4iKSk7CisJY2hhciAqZmlsZXBvcyAgPSBzdHJ0b2soTlVMTCwgTk9DQVRHRVRTKCJcbiIpKTsKKwlpZiAoKmFjYyA9PSAnLScpIHsKKwkJYWNjID0gTlVMTDsKKwl9CisJaWYgKCphY2NUZXh0ID09ICctJykgeworCQlhY2NUZXh0ID0gTlVMTDsKKwl9CisJd29ya3Nob3BfbWVudV9pdGVtKGxhYmVsLCB2ZXJiLCBhY2MsIGFjY1RleHQsIG5hbWUsIGZpbGVwb3MsIHNlbnNlKTsKKworfQorCisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX3Rvb2xiYXJCdXR0b24oCisJY2hhcgkqY21kKQkJCS8qIGJ1dHRvbiBkZWZpbml0aW9uICovCit7CisJY2hhciAqbGFiZWwgID0gc3RydG9rKCZjbWRbMTRdLCBOT0NBVEdFVFMoIlwwMDEiKSk7CisJY2hhciAqdmVyYiAgPSBzdHJ0b2soTlVMTCwgTk9DQVRHRVRTKCJcMDAxIikpOworCWNoYXIgKnNlbnNlVmVyYiAgPSBzdHJ0b2soTlVMTCwgTk9DQVRHRVRTKCJcMDAxIikpOworCWNoYXIgKmZpbGVwb3MgID0gc3RydG9rKE5VTEwsIE5PQ0FUR0VUUygiXDAwMSIpKTsKKwljaGFyICpoZWxwICA9IHN0cnRvayhOVUxMLCBOT0NBVEdFVFMoIlwwMDEiKSk7CisJY2hhciAqc2Vuc2UgID0gc3RydG9rKE5VTEwsIE5PQ0FUR0VUUygiXDAwMSIpKTsKKwljaGFyICpmaWxlICA9IHN0cnRvayhOVUxMLCBOT0NBVEdFVFMoIlwwMDEiKSk7CisJY2hhciAqbGVmdCAgPSBzdHJ0b2soTlVMTCwgTk9DQVRHRVRTKCJcbiIpKTsKKworCWlmICghc3RyY21wKGxhYmVsLCBOT0NBVEdFVFMoIi0iKSkpIHsKKwkJbGFiZWwgPSBOVUxMOworCX0KKwlpZiAoIXN0cmNtcChoZWxwLCBOT0NBVEdFVFMoIi0iKSkpIHsKKwkJaGVscCA9IE5VTEw7CisJfQorCWlmICghc3RyY21wKGZpbGUsIE5PQ0FUR0VUUygiLSIpKSkgeworCQlmaWxlID0gTlVMTDsKKwl9CisJaWYgKCFzdHJjbXAoc2Vuc2VWZXJiLCBOT0NBVEdFVFMoIi0iKSkpIHsKKwkJc2Vuc2VWZXJiID0gTlVMTDsKKwl9CisJd29ya3Nob3BfdG9vbGJhcl9idXR0b24obGFiZWwsIHZlcmIsIHNlbnNlVmVyYiwgZmlsZXBvcywgaGVscCwKKwkJCQlzZW5zZSwgZmlsZSwgbGVmdCk7Cit9CisKKworI2lmZGVmIERFQlVHCit2b2lkCit1bnJlY29nbmlzZWRfbWVzc2FnZSgKKwljaGFyCSpjbWQpCit7CisJcGxkZWJ1ZygiVW5yZWNvZ25pc2VkIGVzZXJ2ZSBtZXNzYWdlOlxuXHQlc1xuIiwgY21kKTsKKwkvKiBhYm9ydCgpOyAqLworfQorI2VuZGlmCisKKworLyogQ2hhbmdlIHNpZ24gbmFtZSB0byBhY2NvbW9kYXRlIGEgZGlmZmVyZW50IHNpemU6CisgKiBDcmVhdGUgdGhlIGZpbGVuYW1lIGJhc2VkIG9uIHRoZSBoZWlnaHQuIFRoZSBmaWxlbmFtZSBmb3JtYXQKKyAqIG9mIG11bHRpc2l6ZSBpY29ucyBhcmU6CisgKiAgICB4LnhwbSAgIDogbGFyZ2VzdCBpY29uCisgKiAgICB4MS54cG0gIDogc21hbGxlciBpY29uCisgKiAgICB4Mi54cG0gIDogc21hbGxlc3QgaWNvbiAqLworCXZvaWQKK2FkanVzdF9zaWduX25hbWUoY2hhciAqZmlsZW5hbWUpCit7CisJY2hhciAqczsKKwlzdGF0aWMgaW50IGZvbnRTaXplID0gLTE7CisKKwlpZiAoZm9udFNpemUgPT0gLTEpCisJCWZvbnRTaXplID0gd29ya3Nob3BfZ2V0X2ZvbnRfaGVpZ2h0KCk7CisJaWYgKGZvbnRTaXplID09IDApCisJCXJldHVybjsKKwlpZiAoZmlsZW5hbWVbMF0gPT0gJy0nKQorCQlyZXR1cm47CisKKwkvKiBUaGlzIGlzIHVnbHk6IGxhdGVyIHdlIHNob3VsZCBpbnN0ZWFkIHBhc3MgdGhlIGZvbnRoZWlnaHQgb3ZlcgorCSAqIHRvIGVzZXJ2ZSBvbiBzdGFydHVwIGFuZCBsZXQgZXNlcnZlIGp1c3Qgc2VuZCB0aGUgcmlnaHQgZmlsZW5hbWVzCisJICogdG8gdXMgaW4gdGhlIGZpcnN0IHBsYWNlCisKKwkgKiBJIGtub3cgdGhhdCB0aGUgZmlsZW5hbWUgd2lsbCBlbmQgd2l0aCAxLnhwbSAoc2VlCisJICogR3VpRWRpdG9yLmNjYExpc3BQcmludFNpZ24gaWYgeW91IHdvbmRlciB3aHkpICovCisJcyA9IGZpbGVuYW1lK3N0cmxlbihmaWxlbmFtZSktNTsKKwlpZiAoZm9udFNpemUgPD0gMTEpCisJCXN0cmNweShzLCAiMi54cG0iKTsKKwllbHNlIGlmIChmb250U2l6ZSA8PSAxNSkKKwkJc3RyY3B5KHMsICIxLnhwbSIpOworCWVsc2UKKwkJc3RyY3B5KHMsICIueHBtIik7Cit9CisKKy8qIFdlcmUgd2UgaW52b2tlZCBieSBXb3JrU2hvcD8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBlYXJseSBkdXJpbmcgc3RhcnR1cAorICAgaWYgeW91IHdhbnQgdG8gZG8gdGhpbmdzIGRpZmZlcmVudGx5IGlmIHRoZSBlZGl0b3IgaXMgc3RhcnRlZCBzdGFuZGFsb25lCisgICBvciBpbiBXb3JrU2hvcCBtb2RlLiBGb3IgZXhhbXBsZSwgaW4gc3RhbmRhbG9uZSBtb2RlIHlvdSBtYXkgbm90IHdhbnQgdG8KKyAgIGFkZCBhIGZvb3Rlci9tZXNzYWdlIGFyZWEgb3IgYSBzaWduIGd1dHRlci4gKi8KK2ludAord29ya3Nob3BfaW52b2tlZCgpCit7CisJc3RhdGljIGludCByZXN1bHQgPSAtMTsKKwlpZiAocmVzdWx0ID09IC0xKSB7CisJCXJlc3VsdCA9IChnZXRlbnYoTk9DQVRHRVRTKCJTUFJPX0VESVRPUl9TT0NLRVQiKSkgIT0gTlVMTCk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIENvbm5lY3QgYmFjayB0byBlc2VydmUgKi8KK3ZvaWQJd29ya3Nob3BfY29ubmVjdChYdEFwcENvbnRleHQgY29udGV4dCkKK3sKKyNpZmRlZiBJTkVUX1NPQ0tFVFMKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4Jc2VydmVyOworCXN0cnVjdCBob3N0ZW50ICoJaG9zdDsKKwlpbnQJCQlwb3J0OworI2Vsc2UKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4Jc2VydmVyOworI2VuZGlmCisJY2hhcgkJCWJ1ZlszMl07CisJY2hhciAqCQkJYWRkcmVzczsKKyNpZmRlZiBERUJVRworCWNoYXIJCQkqZmlsZTsKKyNlbmRpZgorCisJYWRkcmVzcyA9IGdldGVudihOT0NBVEdFVFMoIlNQUk9fRURJVE9SX1NPQ0tFVCIpKTsKKwlpZiAoYWRkcmVzcyA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKyNpZmRlZiBJTkVUX1NPQ0tFVFMKKwlwb3J0ID0gYXRvaShhZGRyZXNzKTsKKworCWlmICgoc2QgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA9PSAtMSkgeworCQlQRVJST1IoTk9DQVRHRVRTKCJ3b3Jrc2hvcF9jb25uZWN0IikpOworCQlyZXR1cm47CisJfQorCisJLyogR2V0IHRoZSBzZXJ2ZXIgaW50ZXJuZXQgYWRkcmVzcyBhbmQgcHV0IGludG8gYWRkciBzdHJ1Y3R1cmUgKi8KKwkvKiBmaWxsIGluIHRoZSBzb2NrZXQgYWRkcmVzcyBzdHJ1Y3R1cmUgYW5kIGNvbm5lY3QgdG8gc2VydmVyICovCisJbWVtc2V0KChjaGFyICopJnNlcnZlciwgJ1wwJywgc2l6ZW9mKHNlcnZlcikpOworCXNlcnZlci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzZXJ2ZXIuc2luX3BvcnQgPSBwb3J0OworCWlmICgoaG9zdCA9IGdldGhvc3RieW5hbWUoTk9DQVRHRVRTKCJsb2NhbGhvc3QiKSkpID09IE5VTEwpIHsKKwkJUEVSUk9SKE5PQ0FUR0VUUygiZ2V0aG9zdGJ5bmFtZSIpKTsKKwkJc2QgPSAtMTsKKwkJcmV0dXJuOworCX0KKwltZW1jcHkoKGNoYXIgKikmc2VydmVyLnNpbl9hZGRyLCBob3N0LT5oX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKKyNlbHNlCisJaWYgKChzZCA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCkpID09IC0xKSB7CisJCVBFUlJPUihOT0NBVEdFVFMoIndvcmtzaG9wX2Nvbm5lY3QiKSk7CisJCXJldHVybjsKKwl9CisKKwlzZXJ2ZXIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisJc3RyY3B5KHNlcnZlci5zdW5fcGF0aCwgYWRkcmVzcyk7CisjZW5kaWYKKwkvKiBDb25uZWN0IHRvIHNlcnZlciAqLworCWlmIChjb25uZWN0KHNkLCAoc3RydWN0IHNvY2thZGRyICopJnNlcnZlciwgc2l6ZW9mKHNlcnZlcikpKSB7CisJCWlmIChlcnJubyA9PSBFQ09OTlJFRlVTRUQpIHsKKwkJCWNsb3NlKHNkKTsKKyNpZmRlZiBJTkVUX1NPQ0tFVFMKKwkJCWlmICgoc2QgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA9PSAtMSkgeworCQkJCVBFUlJPUihOT0NBVEdFVFMoIndvcmtzaG9wX2Nvbm5lY3QiKSk7CisJCQkJcmV0dXJuOworCQkJfQorI2Vsc2UKKwkJCWlmICgoc2QgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApKSA9PSAtMSkgeworCQkJCVBFUlJPUihOT0NBVEdFVFMoIndvcmtzaG9wX2Nvbm5lY3QiKSk7CisJCQkJcmV0dXJuOworCQkJfQorI2VuZGlmCisJCQlpZiAoY29ubmVjdChzZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsCisJCQkJCQlzaXplb2Yoc2VydmVyKSkpIHsKKwkJCQlQRVJST1IoTk9DQVRHRVRTKCJ3b3Jrc2hvcF9jb25uZWN0IikpOworCQkJCXJldHVybjsKKwkJCX0KKworCQl9IGVsc2UgeworCQkJUEVSUk9SKE5PQ0FUR0VUUygid29ya3Nob3BfY29ubmVjdCIpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIHRlbGwgbm90aWZpZXIgd2UgYXJlIGludGVyZXN0ZWQgaW4gYmVpbmcgY2FsbGVkCisJICogd2hlbiB0aGVyZSBpcyBpbnB1dCBvbiB0aGUgZWRpdG9yIGNvbm5lY3Rpb24gc29ja2V0CisJICovCisJaW5wdXRIYW5kbGVyID0gWHRBcHBBZGRJbnB1dChjb250ZXh0LCBzZCwgKFh0UG9pbnRlcikgWHRJbnB1dFJlYWRNYXNrLAorCQkJCSAgICAgbWVzc2FnZUZyb21Fc2VydmUsIE5VTEwpOworI2lmZGVmIERFQlVHCisJaWYgKChmaWxlID0gZ2V0ZW52KE5PQ0FUR0VUUygiU1BST19QTFVHSU5fREVCVUciKSkpICE9IE5VTEwpIHsKKwkJY2hhciBidWZbQlVGU0laXTsKKworCQl1bmxpbmsoZmlsZSk7CisJCXNwcmludGYoYnVmLCAiZGF0ZSA+ICVzIiwgZmlsZSk7CisJCXN5c3RlbShidWYpOworCQlkZmQgPSBmb3BlbihmaWxlLCAiYSIpOworCX0gZWxzZSB7CisJCWRmZCA9IE5VTEw7CisJfQorI2VuZGlmCisKKwlzcHJpbnRmKGJ1ZiwgTk9DQVRHRVRTKCJjb25uZWN0ZWQgJXMgJXMgJXNcbiIpLAorCQl3b3Jrc2hvcF9nZXRfZWRpdG9yX25hbWUoKSwKKwkJUFJPVE9DT0xfVkVSU0lPTiwKKwkJd29ya3Nob3BfZ2V0X2VkaXRvcl92ZXJzaW9uKCkpOworCXdyaXRlKHNkLCBidWYsIHN0cmxlbihidWYpKTsKKworCXNwcmludGYoYnVmLCBOT0NBVEdFVFMoImFjayAxXG4iKSk7CisJd3JpdGUoc2QsIGJ1Ziwgc3RybGVuKGJ1ZikpOworfQorCit2b2lkCXdvcmtzaG9wX2Rpc2Nvbm5lY3QoKQoreworCS8qIFByb2JhYmx5IG5lZWQgdG8gc2VuZCBzb21lIG1lc3NhZ2UgaGVyZSAqLworCisJLyoKKwkgKiBzb2NrZXQgY2xvc2VkIG9uIG90aGVyIGVuZAorCSAqLworCVh0UmVtb3ZlSW5wdXQoaW5wdXRIYW5kbGVyKTsKKwljbG9zZShzZCk7CisJaW5wdXRIYW5kbGVyID0gMDsKKwlzZCA9IC0xOworCit9CisKKy8qCisgKiBVdGlsaXR5IGZ1bmN0aW9ucworICovCisKKy8qIFNldCBpY29uIGZvciB0aGUgd2luZG93ICovCit2b2lkCit3b3Jrc2hvcF9zZXRfaWNvbihEaXNwbGF5ICpkaXNwbGF5LCBXaWRnZXQgc2hlbGwsIGNoYXIgKip4cG1kYXRhLAorCQkgIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlQaXhlbAkJYmdQaXhlbDsKKwlYcG1BdHRyaWJ1dGVzICAgeHBtQXR0cmlidXRlczsKKwlYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyOworCVdpbmRvdwkJaWNvbldpbmRvdzsKKwlpbnQJCWRlcHRoOworCWludAkJc2NyZWVuTnVtOworCVBpeG1hcAkJcGl4bWFwOworCisJLyogQ3JlYXRlIHRoZSBwaXhtYXAvaWNvbiB3aW5kb3cgd2hpY2ggaXMgc2hvd24gd2hlbiB5b3UKKwkgKiBpY29uaWZ5IHRoZSBzY2NzIHZpZXdlcgorCSAqIFRoaXMgY29kZSBzbmlwcGVkIHdhcyBhZGFwdGVkIGZyb20gU3VuIFdvcmtTaG9wJ3Mgc291cmNlIGJhc2UsCisJICogc2V0SWNvbi5jYy4KKwkgKi8KKwlYdFZhR2V0VmFsdWVzKHNoZWxsLCBYbU5iYWNrZ3JvdW5kLCAmYmdQaXhlbCwgTlVMTCk7CisJc2NyZWVuTnVtID0gWFNjcmVlbk51bWJlck9mU2NyZWVuKFh0U2NyZWVuKHNoZWxsKSk7CisJZGVwdGggPSBEaXNwbGF5UGxhbmVzKGRpc3BsYXksIHNjcmVlbk51bSk7CisJeHBtQXR0cmlidXRlcy52YWx1ZW1hc2sgPSBYcG1Db2xvclN5bWJvbHM7CisJeHBtQXR0cmlidXRlcy5udW1zeW1ib2xzID0gMTsKKwl4cG1BdHRyaWJ1dGVzLmNvbG9yc3ltYm9scyA9CisJICAgIChYcG1Db2xvclN5bWJvbCAqKVh0TWFsbG9jKHNpemVvZiAoWHBtQ29sb3JTeW1ib2wpICoKKwkgICAgeHBtQXR0cmlidXRlcy5udW1zeW1ib2xzKTsKKwl4cG1BdHRyaWJ1dGVzLmNvbG9yc3ltYm9sc1swXS5uYW1lID0gTk9DQVRHRVRTKCJCZ0NvbG9yIik7CisJeHBtQXR0cmlidXRlcy5jb2xvcnN5bWJvbHNbMF0udmFsdWUgPSBOVUxMOworCXhwbUF0dHJpYnV0ZXMuY29sb3JzeW1ib2xzWzBdLnBpeGVsID0gYmdQaXhlbDsKKwlpZiAoWHBtQ3JlYXRlUGl4bWFwRnJvbURhdGEoZGlzcGxheSwKKwkgICAgUm9vdFdpbmRvdyhkaXNwbGF5LCBzY3JlZW5OdW0pLCB4cG1kYXRhLCAmcGl4bWFwLAorCSAgICBOVUxMLCAmeHBtQXR0cmlidXRlcykgPj0gMCkgeworCQlhdHRyLmJhY2tncm91bmRfcGl4bWFwID0gcGl4bWFwOworCQlpY29uV2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LCBSb290V2luZG93KGRpc3BsYXksCisJCSAgICBzY3JlZW5OdW0pLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCBkZXB0aCwKKwkJCQkodW5zaWduZWQgaW50KUNvcHlGcm9tUGFyZW50LAorCQkgICAgQ29weUZyb21QYXJlbnQsIENXQmFja1BpeG1hcCwgJmF0dHIpOworCisJCVh0VmFTZXRWYWx1ZXMoc2hlbGwsCisJCSAgICBYdE5pY29uV2luZG93LCBpY29uV2luZG93LCBOVUxMKTsKKwl9CisJWHRGcmVlKChjaGFyICopeHBtQXR0cmlidXRlcy5jb2xvcnN5bWJvbHMpOworfQorCisvKiBNaW5pbWl6ZSBhbmQgbWF4aW1pemUgc2hlbGxzLiBGcm9tIGxpYnV0aWwncyBzaGVsbC5jYy4gKi8KKworLyogdXRpbGl0eSBmdW5jdGlvbnMgZnJvbSBsaWJ1dGlsJ3Mgc2hlbGwuY2MgKi8KK3N0YXRpYyBCb29sZWFuCitpc1dpbmRvd01hcHBlZChEaXNwbGF5ICpkaXNwbGF5LCBXaW5kb3cgd2luKQoreworCVhXaW5kb3dBdHRyaWJ1dGVzIHdpbkF0dHJzOworCVhHZXRXaW5kb3dBdHRyaWJ1dGVzKGRpc3BsYXksCisJCQkgICAgIHdpbiwKKwkJCSAgICAgJndpbkF0dHJzKTsKKwlpZiAod2luQXR0cnMubWFwX3N0YXRlID09IElzVmlld2FibGUpIHsKKwkJcmV0dXJuKFRydWUpOworCX0gZWxzZSB7CisJCXJldHVybihGYWxzZSk7CisJfQorfQorCitzdGF0aWMgQm9vbGVhbgoraXNNYXBwZWQoV2lkZ2V0IHdpZGdldCkKK3sKKwlpZiAod2lkZ2V0ID09IE5VTEwpIHsKKwkJcmV0dXJuKEZhbHNlKTsKKwl9CisKKwlpZiAoWHRJc1JlYWxpemVkKHdpZGdldCkgPT0gRmFsc2UpIHsKKwkJcmV0dXJuKEZhbHNlKTsKKwl9CisKKwlyZXR1cm4oaXNXaW5kb3dNYXBwZWQoWHREaXNwbGF5KHdpZGdldCksIFh0V2luZG93KHdpZGdldCkpKTsKK30KKworc3RhdGljIEJvb2xlYW4KK3dpZGdldElzSWNvbmlmaWVkKAorCVdpZGdldAkJIHcpCit7CisJQXRvbQkJIHdtX3N0YXRlOworCUF0b20JCSBhY3RfdHlwZTsJCS8qIGFjdHVhbCBBdG9tIHR5cGUgcmV0dXJuZWQgKi8KKwlpbnQJCSBhY3RfZm10OwkJLyogYWN0dWFsIGZvcm1hdCByZXR1cm5lZCAqLworCXVfbG9uZwkJIG5pdGVtc19yZXQ7CQkvKiBudW1iZXIgb2YgaXRlbXMgcmV0dXJuZWQgKi8KKwl1X2xvbmcJCSBieXRlc19hZnRlcjsJCS8qIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgKi8KKwl1X2xvbmcJCSpwcm9wZXJ0eTsJCS8qIGFjdHVhbCBwcm9wZXJ0eSByZXR1cm5lZCAqLworCisJLyoKKwkgKiBJZiBhIHdpbmRvdyBpcyBpY29uaWZpZWQgaXRzIFdNX1NUQVRFIGlzIHNldCB0byBJY29uaWNTdGF0ZS4gU2VlCisJICogSUNDQ00gVmVyc2lvbiAyLjAsIHNlY3Rpb24gNC4xLjMuMSBmb3IgbW9yZSBkZXRhaWxzLgorCSAqLworCisJd21fc3RhdGUgPSBYbUludGVybkF0b20oWHREaXNwbGF5KHcpLCBOT0NBVEdFVFMoIldNX1NUQVRFIiksIEZhbHNlKTsKKwlpZiAoWHRXaW5kb3codykgIT0gMCkgewkJCS8qIG9ubHkgY2hlY2sgaWYgd2luZG93IGV4aXN0cyEgKi8KKwkJWEdldFdpbmRvd1Byb3BlcnR5KFh0RGlzcGxheSh3KSwgWHRXaW5kb3codyksIHdtX3N0YXRlLCAwTCwgMkwsCisJCSAgICBGYWxzZSwgQW55UHJvcGVydHlUeXBlLCAmYWN0X3R5cGUsICZhY3RfZm10LCAmbml0ZW1zX3JldCwKKwkJICAgICZieXRlc19hZnRlciwgKHVfY2hhciAqKikgJnByb3BlcnR5KTsKKwkJaWYgKG5pdGVtc19yZXQgPT0gMiAmJiBwcm9wZXJ0eVswXSA9PSBJY29uaWNTdGF0ZSkgeworCQkJcmV0dXJuIFRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gRmFsc2U7CisKK30gICAgLyogZW5kIHdpZGdldElzSWNvbmlmaWVkICovCisKK3ZvaWQKK3dvcmtzaG9wX21pbmltaXplX3NoZWxsKFdpZGdldCBzaGVsbCkKK3sKKwlpZiAoc2hlbGwgIT0gTlVMTCAmJgorCSAgICBYdElzT2JqZWN0KHNoZWxsKSAmJgorCSAgICBYdElzUmVhbGl6ZWQoc2hlbGwpID09IFRydWUpIHsKKwkJaWYgKGlzTWFwcGVkKHNoZWxsKSA9PSBUcnVlKSB7CisJCQlYSWNvbmlmeVdpbmRvdyhYdERpc3BsYXkoc2hlbGwpLCBYdFdpbmRvdyhzaGVsbCksCisJCQkgICAgICAgWFNjcmVlbk51bWJlck9mU2NyZWVuKFh0U2NyZWVuKHNoZWxsKSkpOworCQl9CisJCVh0VmFTZXRWYWx1ZXMoc2hlbGwsCisJCQkgICAgICBYbU5pY29uaWMsIFRydWUsCisJCQkgICAgICBOVUxMKTsKKwl9Cit9CisKK3ZvaWQgd29ya3Nob3BfbWF4aW1pemVfc2hlbGwoV2lkZ2V0IHNoZWxsKQoreworCWlmIChzaGVsbCAhPSBOVUxMICYmCisJICAgIFh0SXNSZWFsaXplZChzaGVsbCkgPT0gVHJ1ZSAmJgorCSAgICB3aWRnZXRJc0ljb25pZmllZChzaGVsbCkgPT0gVHJ1ZSAmJgorCSAgICBpc01hcHBlZChzaGVsbCkgPT0gRmFsc2UpIHsKKwkJWHRNYXBXaWRnZXQoc2hlbGwpOworCQkvKiBUaGlzIHVzZWQgdG8gYmUKKwkJICAgICBYdFBvcGRvd24oc2hlbGwpOworCQkgICAgIFh0UG9wdXAoc2hlbGwsIFh0R3JhYk5vbmUpOworCQkgICBIb3dldmVyLCBJIGZvdW5kIHRoYXQgdGhhdCB3b3VsZCBkcm9wIGFueSB0cmFuc2llbnQKKwkJICAgd2luZG93cyB0aGF0IGhhZCBiZWVuIGljb25pZmllZCB3aXRoIHRoZSB3aW5kb3cuCisJCSAgIEFjY29yZGluZyB0byB0aGUgSUNDQ00sIFh0TWFwV2lkZ2V0IHNob3VsZCBiZSB1c2VkCisJCSAgIHRvIGJyaW5nIGEgd2luZG93IGZyb20gSWNvbmljIHRvIE5vcm1hbCBzdGF0ZS4KKwkJICAgSG93ZXZlciwgUmljaCBNYXVyaSBkaWQgYSBsb3Qgb2Ygd29yayBvbiB0aGlzIGR1cmluZworCQkgICBCYXJ0LCBhbmQgZm91bmQgdGhhdCBYdFBvcERvd24sWHRQb3B1cCB3YXMgcmVxdWlyZWQKKwkJICAgdG8gZml4IHNldmVyYWwgYnVncyBpbnZvbHZpbmcgbXVsdGlwbGUgQ0RFIHdvcmtzcGFjZXMuCisJCSAgIEkndmUgdGVzdGVkIGl0IG5vdyBhbmQgdGhpbmdzIHNlZW0gdG8gd29yayBmaW5lIGJ1dAorCQkgICBJJ20gbGVhdmluZyB0aGlzIG5vdGUgZm9yIGhpc3RvcnkgaW4gY2FzZSB0aGlzIG5lZWRzCisJCSAgIHRvIGJlIHJldmlzaXRlZC4KKwkJKi8KKwl9Cit9CisKKworQm9vbGVhbiB3b3Jrc2hvcF9nZXRfd2lkdGhfaGVpZ2h0KGludCAqd2lkdGgsIGludCAqaGVpZ2h0KQoreworCXN0YXRpYyBpbnQJd2lkID0gMDsKKwlzdGF0aWMgaW50CWhndCA9IDA7CisJc3RhdGljIEJvb2xlYW4JZmlyc3RUaW1lID0gVHJ1ZTsKKwlzdGF0aWMgQm9vbGVhbglzdWNjZXNzID0gRmFsc2U7CisKKwlpZiAoZmlyc3RUaW1lKSB7CisJCWNoYXIJKnNldHRpbmdzOworCisJCXNldHRpbmdzID0gZ2V0ZW52KE5PQ0FUR0VUUygiU1BST19HVUlfV0lEVEhfSEVJR0hUIikpOworCQlpZiAoc2V0dGluZ3MgIT0gTlVMTCkgeworCQkJd2lkID0gYXRvaShzZXR0aW5ncyk7CisJCQlzZXR0aW5ncyA9IHN0cnJjaHIoc2V0dGluZ3MsICc6Jyk7CisJCQlpZiAoc2V0dGluZ3MrKyAhPSBOVUxMKSB7CisJCQkJaGd0ID0gYXRvaShzZXR0aW5ncyk7CisJCQl9CisJCQlpZiAod2lkID4gMCAmJiBoZ3QgPiAwKSB7CisJCQkJc3VjY2VzcyA9IFRydWU7CisJCQl9CisJCQlmaXJzdFRpbWUgPSBGYWxzZTsKKwkJfQorCX0KKworCWlmIChzdWNjZXNzKSB7CisJCSp3aWR0aCA9IHdpZDsKKwkJKmhlaWdodCA9IGhndDsKKwl9CisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKworQm9vbGVhbiB3b3Jrc2hvcF9nZXRfcm93c19jb2xzKGludCAqcm93cywgaW50ICpjb2xzKQoreworCXN0YXRpYyBpbnQJciA9IDA7CisJc3RhdGljIGludAljID0gMDsKKwlzdGF0aWMgQm9vbGVhbglmaXJzdFRpbWUgPSBUcnVlOworCXN0YXRpYyBCb29sZWFuCXN1Y2Nlc3MgPSBGYWxzZTsKKworCWlmIChmaXJzdFRpbWUpIHsKKwkJY2hhcgkqc2V0dGluZ3M7CisKKwkJc2V0dGluZ3MgPSBnZXRlbnYoTk9DQVRHRVRTKCJTUFJPX0dVSV9ST1dTX0NPTFMiKSk7CisJCWlmIChzZXR0aW5ncyAhPSBOVUxMKSB7CisJCQlyID0gYXRvaShzZXR0aW5ncyk7CisJCQlzZXR0aW5ncyA9IHN0cnJjaHIoc2V0dGluZ3MsICc6Jyk7CisJCQlpZiAoc2V0dGluZ3MrKyAhPSBOVUxMKSB7CisJCQkJYyA9IGF0b2koc2V0dGluZ3MpOworCQkJfQorCQkJaWYgKHIgPiAwICYmIGMgPiAwKSB7CisJCQkJc3VjY2VzcyA9IFRydWU7CisJCQl9CisJCQlmaXJzdFRpbWUgPSBGYWxzZTsKKwkJfQorCX0KKworCWlmIChzdWNjZXNzKSB7CisJCSpyb3dzID0gcjsKKwkJKmNvbHMgPSBjOworCX0KKwlyZXR1cm4gc3VjY2VzczsKK30KKworLyoKKyAqIFRvb2xiYXIgY29kZQorICovCisKK3ZvaWQgd29ya3Nob3Bfc2Vuc2l0aXZpdHkoaW50IG51bSwgY2hhciAqdGFibGUpCit7CisJLyogYnVpbGQgdXAgYSB2ZXJiIHRhYmxlICovCisJVmVyYlNlbnNlICp2czsKKwlpbnQgaTsKKwljaGFyICpzOworCWlmICgobnVtIDwgMSkgfHwgKG51bSA+IDUwMCkpIHsKKwkJcmV0dXJuOworCX0KKworCXZzID0gKFZlcmJTZW5zZSAqKW1hbGxvYygobnVtKzEpKnNpemVvZihWZXJiU2Vuc2UpKTsKKworCS8qIFBvaW50IHRvIHRoZSBpbmRpdmlkdWFsIG5hbWVzIChkZXN0cm95cyB0aGUgdGFibGUgc3RyaW5nLCBidXQKKwkgKiB0aGF0J3Mgb2theSAtLSB0aGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gZHVwbGljYXRpbmcgc3RyaW5ncykgKi8KKwlzID0gdGFibGU7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXdoaWxlICgqcyA9PSAnICcpIHsKKwkJCXMrKzsKKwkJfQorCQl2c1tpXS52ZXJiID0gczsKKwkJd2hpbGUgKCpzICYmICgqcyAhPSAnICcpICYmICgqcyAhPSAnXDAwMScpKSB7CisJCQlzKys7CisJCX0KKwkJaWYgKCpzID09IDApIHsKKwkJCXZzW2ldLnZlcmIgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCpzID09ICdcMDAxJykgeworCQkJKnMgPSAwOworCQkJcysrOworCQl9CisJCSpzID0gMDsKKwkJcysrOworCQl3aGlsZSAoKnMgPT0gJyAnKSB7CisJCQlzKys7CisJCX0KKwkJaWYgKCpzID09ICcxJykgeworCQkJdnNbaV0uc2Vuc2UgPSAxOworCQl9IGVsc2UgeworCQkJdnNbaV0uc2Vuc2UgPSAwOworCQl9CisJCXMrKzsKKwl9CisJdnNbaV0udmVyYiA9IE5VTEw7CisKKwl3b3Jrc2hvcF9mcmFtZV9zZW5zaXRpdml0aWVzKHZzKTsKKworCWZyZWUodnMpOworfQorCisvKgorICogT3B0aW9ucyBjb2RlCisgKi8KKy8qIFNldCBhbiBlZGl0b3Igb3B0aW9uLgorICogSUdOT1JFIGFuIG9wdGlvbiBpZiB5b3UgZG8gbm90IHJlY29nbml6ZSBpdC4KKyAqLwordm9pZCB3b3Jrc2hvcF9zZXRfb3B0aW9uX2ZpcnN0KGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworCS8qIEN1cnJlbnRseSB2YWx1ZSBjYW4gb25seSBiZSBvbi9vZmYuIFRoaXMgbWF5IGNoYW5nZSBsYXRlciAoZm9yCisJICogZXhhbXBsZSB0byBzZXQgYW4gb3B0aW9uIGxpa2UgImJhbGxvb24gZXZhbHVhdGUgZGVsYXkiLCBidXQKKwkgKiBmb3Igbm93IGp1c3QgY29udmVydCBpdCBpbnRvIGEgYm9vbGVhbiAqLworCUJvb2xlYW4gb24gPSAhc3RyY21wKHZhbHVlLCAib24iKTsKKworCWlmICghc3RyY21wKG5hbWUsICJ3b3Jrc2hvcGtleXMiKSkgeworCQl3b3Jrc2hvcF9ob3RrZXlzKG9uKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgInNhdmVmaWxlcyIpKSB7CisJCXNhdmVfZmlsZXMgPSBvbjsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImJhbGxvb24iKSkgeworCQl3b3Jrc2hvcF9iYWxsb29uX21vZGUob24pOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiYmFsbG9vbmRlbGF5IikpIHsKKwkJaW50IGRlbGF5ID0gYXRvaSh2YWx1ZSk7CisJCS8qIFNob3VsZCBJIHZhbGlkYXRlIHRoZSBudW1iZXIgaGVyZT8/ICovCisJCXdvcmtzaG9wX2JhbGxvb25fZGVsYXkoZGVsYXkpOworCX0gZWxzZSB7CisJCS8qIExldCBlZGl0b3IgaW50ZXJwcmV0IGl0ICovCisJCXdvcmtzaG9wX3NldF9vcHRpb24obmFtZSwgdmFsdWUpOworCX0KK30KKworCisKKy8qCisgKiBTZW5kIGluZm9ybWF0aW9uIHRvIGVzZXJ2ZSBvbiBjZXJ0YWluIGVkaXRvciBldmVudHMKKyAqIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGVzZSBhcmUgY2FsbGVkIHdoZW4gbmVjZXNzYXJ5CisgKi8KKwordm9pZCB3b3Jrc2hvcF9maWxlX2Nsb3NlZChjaGFyICpmaWxlbmFtZSkKK3sKKwljaGFyIGJ1ZmZlclsyKk1BWFBBVEhMRU5dOworCXNwcmludGYoYnVmZmVyLCBOT0NBVEdFVFMoImRlbGV0ZWRGaWxlICVzXG4iKSwgZmlsZW5hbWUpOworCXdyaXRlKHNkLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKK30KKwordm9pZCB3b3Jrc2hvcF9maWxlX2Nsb3NlZF9saW5lbm8oY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCit7CisJY2hhciBidWZmZXJbMipNQVhQQVRITEVOXTsKKwlzcHJpbnRmKGJ1ZmZlciwgTk9DQVRHRVRTKCJkZWxldGVkRmlsZSAlcyAlZFxuIiksIGZpbGVuYW1lLCBsaW5lbm8pOworCXdyaXRlKHNkLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKK30KKwordm9pZCB3b3Jrc2hvcF9maWxlX29wZW5lZChjaGFyICpmaWxlbmFtZSwgaW50IHJlYWRPbmx5KQoreworCWNoYXIgYnVmZmVyWzIqTUFYUEFUSExFTl07CisJc3ByaW50ZihidWZmZXIsIE5PQ0FUR0VUUygibG9hZGVkRmlsZSAlcyAlZFxuIiksIGZpbGVuYW1lLCByZWFkT25seSk7CisJd3JpdGUoc2QsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworfQorCisKK3ZvaWQgd29ya3Nob3BfZmlsZV9zYXZlZChjaGFyICpmaWxlbmFtZSkKK3sKKwljaGFyIGJ1ZmZlclsyKk1BWFBBVEhMRU5dOworCXNwcmludGYoYnVmZmVyLCBOT0NBVEdFVFMoInNhdmVkRmlsZSAlc1xuIiksIGZpbGVuYW1lKTsKKwl3cml0ZShzZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CisKKwkvKiBMZXQgZWRpdG9yIHJlcG9ydCBhbnkgbW92ZWQgbWFya3MgdGhhdCB0aGUgZXNlcnZlIGNsaWVudAorCSAqIHNob3VsZCBkZWFsIHdpdGggKGZvciBleGFtcGxlLCBtb3ZpbmcgbG9jYXRpb24tYmFzZWQgYnJlYWtwb2ludHMpICovCisJd29ya3Nob3BfbW92ZWRfbWFya3MoZmlsZW5hbWUpOworfQorCit2b2lkIHdvcmtzaG9wX21vdmVfbWFyayhjaGFyICpmaWxlbmFtZSwgaW50IG1hcmtJZCwgaW50IG5ld0xpbmVubykKK3sKKwljaGFyIGJ1ZmZlclsyKk1BWFBBVEhMRU5dOworCXNwcmludGYoYnVmZmVyLCBOT0NBVEdFVFMoIm1vdmVNYXJrICVzICVkICVkXG4iKSwgZmlsZW5hbWUsIG1hcmtJZCwgbmV3TGluZW5vKTsKKwl3cml0ZShzZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Cit9CisKK3ZvaWQgd29ya3Nob3BfZmlsZV9tb2RpZmllZChjaGFyICpmaWxlbmFtZSkKK3sKKwljaGFyIGJ1ZmZlclsyKk1BWFBBVEhMRU5dOworCXNwcmludGYoYnVmZmVyLCBOT0NBVEdFVFMoIm1vZGlmaWVkRmlsZSAlc1xuIiksIGZpbGVuYW1lKTsKKwl3cml0ZShzZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Cit9CisKK3ZvaWQgd29ya3Nob3BfZnJhbWVfbW92ZWQoaW50IG5ld194LCBpbnQgbmV3X3ksIGludCBuZXdfdywgaW50IG5ld19oKQoreworCWNoYXIgYnVmZmVyWzIwMF07CisKKwlpZiAoc2QgPj0gMCkKKwl7CisJCXNwcmludGYoYnVmZmVyLCBOT0NBVEdFVFMoImZyYW1lQXQgJWQgJWQgJWQgJWRcbiIpLAorCQkJCW5ld194LCBuZXdfeSwgbmV3X3csIG5ld19oKTsKKwkJd3JpdGUoc2QsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworCX0KK30KKworLyogQSBidXR0b24gaW4gdGhlIHRvb2xiYXIgaGFzIGJlZW4gcHVzaGVkLgorICogQ2xpZW50ZGF0YSBpcyBhIHBvaW50ZXIgdXNlZCBieSB0aGUgZWRpdG9yIGNvZGUgdG8gZmlndXJlIG91dCB0aGUKKyAqIHBvc2l0aW9ucyBmb3IgdGhpcyB0b29sYmFyIChwcm9iYWJseSBieSBzdG9yaW5nIGEgd2luZG93IHBvaW50ZXIsCisgKiBhbmQgdGhlbiBmZXRjaGluZyB0aGUgY3VycmVudCBidWZmZXIgZm9yIHRoYXQgd2luZG93IGFuZCBsb29raW5nIHVwCisgKiBjdXJzb3IgYW5kIHNlbGVjdGlvbiBwb3NpdGlvbnMgZXRjLikgKi8KK3ZvaWQgd29ya3Nob3BfcGVyZm9ybV92ZXJiKGNoYXIgKnZlcmIsIHZvaWQgKmNsaWVudERhdGEpCit7CisJY2hhciAqZmlsZW5hbWU7CisJaW50IGN1ckxpbmU7CisJaW50IGN1ckNvbDsKKwlpbnQgc2VsU3RhcnRMaW5lOworCWludCBzZWxTdGFydENvbDsKKwlpbnQgc2VsRW5kTGluZTsKKwlpbnQgc2VsRW5kQ29sOworCWludCBzZWxMZW5ndGg7CisJY2hhciAqc2VsZWN0aW9uOworCisJY2hhciBidWZbMipNQVhQQVRITEVOXTsKKy8qIExhdGVyOiBuZWVkc0ZpbGVQb3MgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gZmV0Y2ggYWxsIHRoaXMKKyAqIGluZm8gZm9yIHRoaXMgdmVyYi4uLiBmb3Igbm93LCBob3dldmVyLCBpdCBsb29rcyBhcyBpZgorICogZXNlcnZlIHBhcnNpbmcgcm91dGluZXMgZGVwZW5kIG9uIGl0IGFsd2F5cyBiZWluZyBwcmVzZW50ICovCisKKwlpZiAod29ya3Nob3BfZ2V0X3Bvc2l0aW9ucyhjbGllbnREYXRhLAorCQkJCSAgICZmaWxlbmFtZSwKKwkJCQkgICAmY3VyTGluZSwKKwkJCQkgICAmY3VyQ29sLAorCQkJCSAgICZzZWxTdGFydExpbmUsCisJCQkJICAgJnNlbFN0YXJ0Q29sLAorCQkJCSAgICZzZWxFbmRMaW5lLAorCQkJCSAgICZzZWxFbmRDb2wsCisJCQkJICAgJnNlbExlbmd0aCwKKwkJCQkgICAmc2VsZWN0aW9uKSkgeworCQlpZiAoc2VsZWN0aW9uID09IE5VTEwpIHsKKwkJCXNlbGVjdGlvbiA9IE5PQ0FUR0VUUygiIik7CisJCX0KKworCQkvKiBTaG91bGQgSSBzYXZlIHRoZSBmaWxlcz8/PyBUaGlzIGlzIGN1cnJlbnRseSBkb25lIGJ5IGNoZWNraW5nCisJCSAgIGlmIHRoZSB2ZXJiIGlzIG9uZSBvZiBhIGZldyByZWNvZ25pemVkIG9uZXMuIExhdGVyIHdlIGNhbiBwYXNzCisJCSAgIHRoaXMgbGlzdCBmcm9tIGVzZXJ2ZSB0byB0aGUgZWRpdG9yIChpdCdzIGN1cnJlbnRseSBoYXJkY29kZWQgaW4KKwkJICAgdmkgYW5kIGVtYWNzIGFzIHdlbGwpLiAqLworCQlpZiAoc2F2ZV9maWxlcykgeworCQkJaWYgKCFzdHJjbXAodmVyYiwgImJ1aWxkLmJ1aWxkIikgfHwgIXN0cmNtcCh2ZXJiLCAiYnVpbGQuYnVpbGQtZmlsZSIpIHx8CisJCQkgICAgIXN0cmNtcCh2ZXJiLCAiZGVidWcuZml4IikgfHwgIXN0cmNtcCh2ZXJiLCAiZGVidWcuZml4LWFsbCIpKSB7CisJCQkJd29ya3Nob3Bfc2F2ZV9maWxlcygpOworCQkJfQorCQl9CisKKwkJc3ByaW50ZihidWYsIE5PQ0FUR0VUUygidG9vbFZlcmIgJXMgJXMgJWQsJWQgJWQsJWQgJWQsJWQgJWQgJXNcbiIpLAorCQkJdmVyYiwKKwkJCWZpbGVuYW1lLAorCQkJY3VyTGluZSwgY3VyQ29sLAorCQkJc2VsU3RhcnRMaW5lLCBzZWxTdGFydENvbCwKKwkJCXNlbEVuZExpbmUsIHNlbEVuZENvbCwKKwkJCXNlbExlbmd0aCwKKwkJCXNlbGVjdGlvbik7CisJCXdyaXRlKHNkLCBidWYsIHN0cmxlbihidWYpKTsKKwkJaWYgKCpzZWxlY3Rpb24pIHsKKwkJCWZyZWUoc2VsZWN0aW9uKTsKKwkJfQorCX0KK30KKworLyogU2VuZCBhIG1lc3NhZ2UgdG8gZXNlcnZlICovCit2b2lkIHdvcmtzaG9wX3NlbmRfbWVzc2FnZShjaGFyICpidWYpCit7CisJd3JpdGUoc2QsIGJ1Ziwgc3RybGVuKGJ1ZikpOworfQorCisvKiBTb21lIG1ldGhvZHMsIGxpa2UgY3VycmVudEZpbGUsIGN1cnNvclBvcywgZXRjLiBhcmUgbWlzc2luZyBoZXJlLgorICogQnV0IGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHVzZWQgZm9yIE5vSGFuZHMgdGVzdGluZyBvbmx5IHNvIHdlCisgKiB3b24ndCBib3RoZXIgcmVxdWlyaW5nIGVkaXRvcnMgdG8gaW1wbGVtZW50IHRoZXNlCisgKi8KKworCisjaWZkZWYgREVCVUcKKwordm9pZAorcGxkZWJ1ZygKKwljaGFyCQkqZm10LAkvKiBhIHByaW50ZiBzdHlsZSBmb3JtYXQgbGluZSAqLworCS4uLikKK3sKKwl2YV9saXN0CQkgYXA7CisKKwlpZiAoZGZkICE9IE5VTEwpIHsKKwkJdmFfc3RhcnQoYXAsIGZtdCk7CisJCXZmcHJpbnRmKGRmZCwgZm10LCBhcCk7CisJCXZhX2VuZChhcCk7CisJCWZmbHVzaChkZmQpOworCX0KKworfSAgICAvKiBlbmQgcGxkZWJ1ZyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbnRlZ3JhdGlvbi5oIGIvc3JjL2ludGVncmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZjNjg3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbnRlZ3JhdGlvbi5oCkBAIC0wLDAgKzEsNDUzIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCVZpc3VhbCBXb3Jrc2hvcCBpbnRlZ3JhdGlvbiBieSBHb3Jkb24gUHJpZXVyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworLyoKKyAgVEhJUyBJUyBBTiBVTlNUQUJMRSBJTlRFUkZBQ0UhIEl0IGlzIHVuc3VwcG9ydGVkIGFuZCB3aWxsIGxpa2VseQorICBjaGFuZ2UgaW4gZnV0dXJlIHJlbGVhc2VzLCBwb3NzaWJseSBicmVha2luZyBjb21wYXRpYmlsaXR5IQorKi8KKworI2lmbmRlZiBfSU5URUdSQVRJT05fSAorI2RlZmluZSBfSU5URUdSQVRJT05fSAorCisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFhtL1htLmg+CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEVuYWJsZSBOb0hhbmRzIHRlc3Qgc3VwcG9ydCBmdW5jdGlvbnMuIERlZmluZSB0aGlzIG9ubHkgaWYgeW91IHdhbnQgdG8KKyAgIGNvbXBpbGUgaW4gc3VwcG9ydCBpbiB0aGUgZWRpdG9yIHN1Y2ggdGhhdCBpdCBjYW4gYmUgcnVuIHVuZGVyCisgICB0aGUgV29ya1Nob3AgdGVzdCBzdWl0ZS4gKi8KKyNpZm5kZWYgTk9IQU5EU19TVVBQT1JUX0ZVTkNUSU9OUworI2RlZmluZSBOT0hBTkRTX1NVUFBPUlRfRlVOQ1RJT05TCisjZW5kaWYKKworCisvKiBUaGlzIGhlYWRlciBmaWxlIGhhcyB0aHJlZSBwYXJ0cy4KKyAqIDEuIEZ1bmN0aW9ucyB5b3UgbmVlZCB0byBpbXBsZW1lbnQ7IHRoZXNlIGFyZSBjYWxsZWQgYnkgdGhlIGludGVncmF0aW9uCisgKiAgICBsaWJyYXJ5CisgKiAyLiBGdW5jdGlvbnMgeW91IG5lZWQgdG8gY2FsbCB3aGVuIGNlcnRhaW4gZXZlbnRzIGhhcHBlbiBpbiB0aGUgZWRpdG9yOworICogICAgdGhlc2UgYXJlIGltcGxlbWVudGVkIGJ5IHRoZSBpbnRlZ3JhdGlvbiBsaWJyYXJ5CisgKiAzLiBVdGlsaXR5IGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgaW50ZWdyYXRpb24gbGlicmFyeTsgdGhlc2UgbWFrZQorICoJICB0YXNrIDEgYSBiaXQgZWFzaWVyLgorICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBlZGl0b3IKKyAqIGludGVncmF0aW9uIGNvZGUgKGFuZCB3aWxsIGJlIGVkaXRvci1zcGVjaWZpYykuIFBsZWFzZSBzZWUgdGhlCisgKiBzYW1wbGUgd29ya3Nob3AuYyBmaWxlIGZvciBjb21tZW50cyBleHBsYWluaW5nIHdoYXQgZWFjaCBmdW5jdGlvbnMKKyAqIG5lZWRzIHRvIGRvLCB3aGF0IHRoZSBhcmd1bWVudHMgbWVhbiwgZXRjLgorICovCisKKy8qCisgKiBUaGlzIHN0cmluZyBpcyByZWNvZ25pemVkIGJ5IGVzZXJ2ZSBhbmQgc2hvdWxkIGJlIGFsbCBsb3dlciBjYXNlLgorICogVGhpcyBpcyBob3cgdGhlIGVkaXRvciBkZXRlY3RzIHRoYXQgaXQgaXMgdGFsa2luZyB0byBORWRpdCBpbnN0ZWFkCisgKiBvZiBWaW0sIGZvciBleGFtcGxlLCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGluaXRpYXRlZCBmcm9tIHRoZSBlZGl0b3IuCisgKiBFeGFtcGxlczogIm5lZGl0IiwgImd2aW0iCisgKi8KK2NoYXIgKndvcmtzaG9wX2dldF9lZGl0b3JfbmFtZSgpOworCisvKgorICogVmVyc2lvbiBudW1iZXIgb2YgdGhlIGVkaXRvci4KKyAqIFRoaXMgbnVtYmVyIGlzIGNvbW11bmljYXRlZCBhbG9uZyB3aXRoIHRoZSBwcm90b2NvbAorICogdmVyc2lvbiB0byB0aGUgYXBwbGljYXRpb24uCisgKiBFeGFtcGxlczogIjUuMC4yIiwgIjE5LjMiCisgKi8KK2NoYXIgKndvcmtzaG9wX2dldF9lZGl0b3JfdmVyc2lvbigpOworCisKKy8qIEdvdG8gYSBnaXZlbiBsaW5lIGluIGEgZ2l2ZW4gZmlsZSAqLwordm9pZCB3b3Jrc2hvcF9nb3RvX2xpbmUoY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pOworCisKKy8qIFNldCBtYXJrIGluIGEgZ2l2ZW4gZmlsZSAqLwordm9pZCB3b3Jrc2hvcF9zZXRfbWFyayhjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IG1hcmtJZCwgaW50IHR5cGUpOworCisKKy8qIENoYW5nZSBtYXJrIHR5cGUgKGZvciBleGFtcGxlIGZyb20gY3VycmVudC1wYyB0byBwYy1hbmQtYnJlYWtwb2ludCkgKi8KK3ZvaWQgd29ya3Nob3BfY2hhbmdlX21hcmtfdHlwZShjaGFyICpmaWxlbmFtZSwgaW50IG1hcmtJZCwgaW50IHR5cGUpOworCisvKgorICogR290byB0aGUgZ2l2ZW4gbWFyayBpbiBhIGZpbGUgKGUuZy4gc2hvdyBpdCkuCisgKiBJZiBtZXNzYWdlIGlzIG5vdCBudWxsLCBkaXNwbGF5IGl0IGluIHRoZSBmb290ZXIuCisgKi8KKwordm9pZCB3b3Jrc2hvcF9nb3RvX21hcmsoY2hhciAqZmlsZW5hbWUsIGludCBtYXJrSWQsIGNoYXIgKm1lc3NhZ2UpOworCisKKy8qIERlbGV0ZSBtYXJrICovCit2b2lkIHdvcmtzaG9wX2RlbGV0ZV9tYXJrKGNoYXIgKmZpbGVuYW1lLCBpbnQgbWFya0lkKTsKKworLyogQmVnaW4vZW5kIHBhaXIgb2YgbWVzc2FnZXMgaW5kaWNhdGluZyB0aGF0IGEgc2VyaWVzIG9mIF9zZXRfbWFyayBhbmQKKyAqIF9kZWxldGVfbWFyayBtZXNzYWdlcyB3aWxsIGJlIHNlbnQuIFRoaXMgY2FuL3Nob3VsZCBiZSB1c2VkIHRvIHN1cHByZXNzIGd1aQorICogcmVkcmF3cyBiZXR3ZWVuIHRoZSBiZWdpbiBhbmQgZW5kIG1lc3NhZ2VzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHN3aXRjaAorICogdG8gYSBoZWFkZXJmaWxlIHRoYXQgaGFzIGEgY2xhc3MgYnJlYWtwb2ludCBzZXQsIHRoZXJlIG1heSBiZSBodW5kcmVkcworICogb2YgbWFya3MgdGhhdCBuZWVkIHRvIGJlIGFkZGVkLiBZb3UgZG9uJ3Qgd2FudCB0byByZWZyZXNoIHRoZSBndWkgZm9yIGVhY2gKKyAqIGFkZGVkIHNpZ24sIHlvdSB3YW50IHRvIHdhaXQgdW50aWwgdGhlIGZpbmFsIGVuZCBtZXNzYWdlLgorICovCit2b2lkIHdvcmtzaG9wX21hcmtfYmF0Y2hfYmVnaW4oKTsKK3ZvaWQgd29ya3Nob3BfbWFya19iYXRjaF9lbmQoKTsKKworCisvKiBMb2FkIGEgZ2l2ZW4gZmlsZSBpbnRvIHRoZSBXb3JrU2hvcCBidWZmZXIuICJmcmFtZWlkIiBpcyBhIHRva2VuIHN0cmluZworICogdGhhdCBpZGVudGlmaWVzIHdoaWNoIGZyYW1lIHRoZSBmaWxlIHdvdWxkIGxpa2UgdG8gYmUgbG9hZGVkIGludG8uIFRoaXMKKyAqIHdpbGwgdXN1YWxseSBiZSBudWxsLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgdXNlIHRoZSBkZWZhdWx0IGZyYW1lLgorICogSG93ZXZlciwgaWYgZnJhbWVpZCBpcyBub3QgbnVsbCwgeW91IG5lZWQgdG8gZmluZCBhIGZyYW1lIHRoYXQgaGFzIHRoaXMKKyAqIGZyYW1laWQsIGFuZCByZXBsYWNlIHRoZSBmaWxlIGluIHRoYXQgZnJhbWUuIEZpbmFsbHksIGlmIHRoZSBmcmFtZWlkIGlzCisgKiBvbmUgeW91IGhhdmVuJ3Qgc2VlbiBiZWZvcmUsIHlvdSBzaG91bGQgY3JlYXRlIGEgbmV3IGZyYW1lIGZvciB0aGlzIGZpbGUuCisgKiBOb3RlIHRoYXQgImZyYW1laWQiIGlzIGEgc3RyaW5nIHZhbHVlLCBub3QganVzdCBhbiBvcGFxdWUgcG9pbnRlciwgc28KKyAqIHlvdSBzaG91bGQgdXNlIHN0cmNtcCByYXRoZXIgdGhhbiA9PSB3aGVuIHRlc3RpbmcgZm9yIGVxdWFsaXR5LgorICovCit2b2lkIHdvcmtzaG9wX2xvYWRfZmlsZShjaGFyICpmaWxlbmFtZSwgaW50IGxpbmUsIGNoYXIgKmZyYW1laWQpOworCisKKy8qIFJlbG9hZCB0aGUgV29ya1Nob3AgYnVmZmVyICovCit2b2lkIHdvcmtzaG9wX3JlbG9hZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZSk7CisKKworLyogU2hvdyB0aGUgZ2l2ZW4gZmlsZSAqLwordm9pZCB3b3Jrc2hvcF9zaG93X2ZpbGUoY2hhciAqZmlsZW5hbWUpOworCisKKy8qIEZyb250IHRoZSBnaXZlbiBmaWxlICovCit2b2lkIHdvcmtzaG9wX2Zyb250X2ZpbGUoY2hhciAqZmlsZW5hbWUpOworCisKKy8qIFNhdmUgdGhlIGdpdmVuIGZpbGUgICovCit2b2lkIHdvcmtzaG9wX3NhdmVfZmlsZShjaGFyICpmaWxlbmFtZSk7CisKKy8qIFNhdmUgYWxsIFdvcmtTaG9wIGVkaXRlZCBmaWxlcy4gWW91IGNhbiBhc2sgdXNlciBhYm91dCBtb2RpZmllZCBmaWxlcworICogYW5kIHNraXAgc2F2aW5nIGFueSBmaWxlcyB0aGUgdXNlciBkb2Vzbid0IHdhbnQgdG8gc2F2ZS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCB3aGVuIHRoZSB1c2VyIGlzc3VlcyBhIGJ1aWxkLCBhIGZpeCwKKyAqIGV0Yy4gKGFuZCBhbHNvIGlmIHlvdSBzZWxlY3QgIlNhdmUgQWxsIiBmcm9tIHRoZSBGaWxlIG1lbnUgOi0pCisgKi8KK3ZvaWQgd29ya3Nob3Bfc2F2ZV9maWxlcygpOworCisvKiBTaG93IGEgbWVzc2FnZSBpbiBhbGwgZm9vdGVycy4KKyAgIFNldmVyaXR5IGN1cnJlbnRseSBpcyBub3QgZGVmaW5lZC4gKi8KK3ZvaWQgd29ya3Nob3BfZm9vdGVyX21lc3NhZ2UoY2hhciAqbWVzc2FnZSwgaW50IHNldmVyaXR5KTsKKworLyogTWluaW1pemUgYWxsIHdpbmRvd3MgKi8KK3ZvaWQgd29ya3Nob3BfbWluaW1pemUoKTsKKworCisvKiBNYXhpbWl6ZSBhbGwgd2luZG93cyAqLwordm9pZCB3b3Jrc2hvcF9tYXhpbWl6ZSgpOworCisKKy8qCisgKiBDcmVhdGUgYSBuZXcgbWFyayB0eXBlLCBhc3NpZ24gaXQgYSBnaXZlbiBpbmRleCwgYSBnaXZlbiB0ZXh0YmFja2dyb3VuZAorICogY29sb3IsIGFuZCBhIGdpdmVuIGxlZnQtbWFyZ2luIHNpZ24gKHdoZXJlIHNpZ24gaXMgYSBmaWxlbmFtZSB0byBhbgorICogLnhwbSBmaWxlKQorICovCit2b2lkIHdvcmtzaG9wX2FkZF9tYXJrX3R5cGUoaW50IGlkeCwgY2hhciAqY29sb3JzcGVjLCBjaGFyICpzaWduKTsKKworCisvKiBHZXQgbWFyayBsaW5lIG51bWJlciAqLworaW50IHdvcmtzaG9wX2dldF9tYXJrX2xpbmVubyhjaGFyICpmaWxlbmFtZSwgaW50IG1hcmtJZCk7CisKKworLyogRXhpdCBlZGl0b3I7IHNhdmUgY29uZmlybWF0aW9uIGRpYWxvZ3MgYXJlIG9rYXkgKi8KK3ZvaWQgd29ya3Nob3BfcXVpdCgpOworCisvKiBTZXQgYW4gZWRpdG9yIG9wdGlvbi4KKyAqIEZvciBleGFtcGxlLCBuYW1lPSJzeW50YXgiLHZhbHVlPSJvbiIgd291bGQgZW5hYmxlIHN5bnRheCBoaWdobGlnaHRpbmcuCisgKiBUaGUgY3VycmVudGx5IGRlZmluZWQgb3B0aW9ucyBhcmU6CisgKiAgICBsaW5lbm8JCXtvbixvZmZ9CXNob3cgbGluZSBudW1iZXJzCisgKiAgICBzeW50YXgJCXtvbixvZmZ9CWhpZ2hsaWdodCBzeW50YXgKKyAqICAgIHBhcmVudGhlc2VzCXtvbixvZmZ9CXNob3cgbWF0Y2hpbmcgcGFyZW50aGVzZXMKKyAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgaW50ZXJwcmV0ZWQgYnkgdGhlIGxpYnJhcnkgZm9yIHlvdSAoc28geW91CisgKiB3aWxsIG5ldmVyIHNlZSB0aGUgbWVzc2FnZS4gSG93ZXZlciwgdGhlIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIHlvdQorICogdG8gcHJvdmlkZSBjZXJ0YWluIGNhbGxiYWNrcywgbGlrZSByZXN0b3JlIGhvdGtleXMgb3Igc2F2ZSBhbGwgZmlsZXMuCisgKiBUaGVzZSBhcmUgZG9jdW1lbnRlZCBzZXBhcmF0ZWx5KS4KKyAqICAgIHdvcmtzaG9wa2V5cwl7b24sb2ZmfQlzZXQgd29ya3Nob3AgaG90a2V5cworICogICAgc2F2ZWZpbGVzCQl7b24sb2ZmfQlzYXZlIGFsbCBmaWxlcyBiZWZvcmUgaXNzdWluZyBhIGJ1aWxkCisgKiAgICBiYWxsb29uCQl7b24sb2ZmfQllbmFibGUvZGlzYWJsZSBiYWxsb29uIGV2YWx1YXRlCisgKgorICogSUdOT1JFIGFuIG9wdGlvbiBpZiB5b3UgZG8gbm90IHJlY29nbml6ZSBpdC4KKyAqLwordm9pZCB3b3Jrc2hvcF9zZXRfb3B0aW9uKGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKKworLyoKKyAqIChTZWUgd29ya3Nob3BfYWRkX2ZyYW1lIGZpcnN0LikgVGhpcyBmdW5jdGlvbiBub3RpZmllcyB0aGUgZWRpdG9yCisgKiB0aGF0IHRoZSBmcmFtZSBmb3IgdGhlIGdpdmVuIHdpbmRvdyAoaW5kaWNhdGVkIGJ5ICJmcmFtZSIsIHdoaWNoCisgKiB3YXMgc3VwcGxpZWQgYnkgdGhlIGVkaXRvciBpbiB3b3Jrc2hvcF9hZGRfZnJhbWUpIGhhcyBiZWVuIGNyZWF0ZWQuCisgKiBUaGlzIGNhbiBoYXBwZW4gbXVjaCBsYXRlciB0aGFuIHRoZSB3b3Jrc2hvcF9hZGRfZnJhbWUgbWVzc2FnZSwgc2luY2UKKyAqIG9mdGVuIGEgd2luZG93IGlzIGNyZWF0ZWQgb24gZWRpdG9yIHN0YXJ0dXAsIHdoaWxlIHRoZSBmcmFtZSBkZXNjcmlwdGlvbgorICogaXMgcGFzc2VkIG92ZXIgZnJvbSBlc2VydmUgbXVjaCBsYXRlciwgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjb21wbGV0ZS4KKyAqIFRoaXMgZ2l2ZXMgdGhlIGVkaXRvciBhIGNoYW5jZSB0byBraWNrIGl0cyBHVUkgdG8gc2hvdyB0aGUgZnJhbWUKKyAqIHByb3Blcmx5OyB0eXBpY2FsbHkgeW91J2xsIHVubWFuYWdlIGFuZCByZW1hbmFnZSB0aGUgcGFyZW50IHdpZGdldCB0bworICogZm9yY2UgYSBnZW9tZXRyeSByZWNhbGN1bGF0aW9uLgorICovCisKK3ZvaWQgd29ya3Nob3BfcmVjb25maWd1cmVfZnJhbWUodm9pZCAqZnJhbWUpOworCisKKy8qIEFyZSB0aGVyZSBhbnkgbW92ZWQgbWFya3M/IElmIHNvLCBjYWxsIHdvcmtzaG9wX21vdmVfbWFyayBvbgorICogZWFjaCBvZiB0aGVtIG5vdy4gVGhpcyBpcyBob3cgZXNlcnZlIGNhbiBmaW5kIG91dCBpZiBmb3IgZXhhbXBsZQorICogYnJlYWtwb2ludHMgaGF2ZSBtb3ZlZCB3aGVuIGEgcHJvZ3JhbSBoYXMgYmVlbiByZWNvbXBpbGVkIGFuZAorICogcmVsb2FkZWQgaW50byBkYnguCisgKi8KK3ZvaWQgd29ya3Nob3BfbW92ZWRfbWFya3MoY2hhciAqZmlsZW5hbWUpOworCisKKy8qIEEgYnV0dG9uIGluIHRoZSB0b29sYmFyIGhhcyBiZWVuIHB1c2hlZC4gImZyYW1lIiBpcyBwcm92aWRlZAorICogd2hpY2ggc2hvdWxkIGxldCB5b3UgZGV0ZXJtaW5lIHdoaWNoIHRvb2xiYXIgaGFkIGEgYnV0dG9uIHB1c2hlZAorICogKHlvdSBzdXBwbGllZCB0aGlzIGNsaWVudERhdGEgd2hlbiB5b3UgY3JlYXRlZCBhIHRvb2xiYXIpLiBGcm9tCisgKiB0aGlzIHlvdSBzaG91bGQgYmUgYWJsZSB0byBmaWd1cmUgb3V0IHdoaWNoIGZpbGUgdGhlIG9wZXJhdGlvbgorICogYXBwbGllcyB0bywgYW5kIGZvciB0aGF0IHdpbmRvdyB0aGUgY3Vyc29yIGxpbmUgYW5kIGNvbHVtbiwKKyAqIHNlbGVjdGlvbiBiZWdpbiBsaW5lIGFuZCBjb2x1bW4sIHNlbGVjdGlvbiBlbmQgbGluZSBhbmQgY29sdW1uLAorICogc2VsZWN0aW9uIHRleHQgYW5kIHNlbGVjdGlvbiB0ZXh0IGxlbmd0aC4gVGhlIGNvbHVtbiBudW1iZXJzIGFyZQorICogY3VycmVudGx5IHVudXNlZCBidXQgaW1wbGVtZW50IGl0IGFueXdheSBpbiBjYXNlIHdlIGRlY2lkZSB0byB1c2UKKyAqIHRoZW0gaW4gdGhlIGZ1dHVyZS4KKyAqIE5vdGUgdGhhdCBmcmFtZSBjYW4gYmUgTlVMTC4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHBpY2sKKyAqIGEgZGVmYXVsdCB3aW5kb3cgdG8gdHJhbnNsYXRlIGNvb3JkaW5hdGVzIGZvciAoaWRlYWxseSwgdGhlCisgKiBsYXN0IHdpbmRvdyB0aGUgdXNlciBoYXMgb3BlcmF0ZWQgb24uKSBUaGlzIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbgorICogdGhlIHVzZXIgY2xpY2tzIG9uIGEgQ3VzdG9tIEJ1dHRvbiBwcm9ncmFtbWVkIHRvIHRha2UgdGhlIGN1cnJlbnQKKyAqIGxpbmUgbnVtYmVyIGFzIGFuIGFyZ3VtZW50LiBIZXJlIGl0J3MgYW1iaWd1b3VzIHdoaWNoIGJ1ZmZlcgorICogdG8gdXNlLCBzbyB5b3UgbmVlZCB0byBwaWNrIG9uZS4KKyAqIChJbnRlcmZhY2UgY29uc2lkZXJhdGlvbjogUGVyaGFwcyB3ZSBpbnN0ZWFkIHNob3VsZCBhZGQgc21hcnRzCisgKiBpbnRvIHRoZSBsaWJyYXJ5IHN1Y2ggdGhhdCB3ZSByZW1lbWJlciB3aGljaCBmcmFtZSBwb2ludGVyCisgKiB3ZSBsYXN0IG5vdGljZWQgKGUuZy4gbGFzdCBjYWxsIHRvIGdldF9wb3NpdGlvbnMsIG9yIHBlcmhhcHMKKyAqIGxhc3QgYWRkX2ZyYW1lKSBhbmQgdGhlbiBwYXNzIHRoYXQgaW5zdGVhZD8gRm9yIGV4YW1wbGUsIHdlIGNvdWxkCisgKiBoYXZlIGFsbCB3b3Jrc2hvcCBvcGVyYXRpb25zIHJldHVybiB0aGUgY2xpZW50RGF0YSB3aGVuIHBhc3NlZAorICogdGhlIGZpbGVuYW1lIChvciBhZGQgYSBmaWxlbmFtZS10by1jbGllbnREYXRhIGNvbnZlcnRlcj8pIGFuZCB0aGVuCisgKiByZW1lbWJlciB0aGUgbGFzdCBmaWxlbmFtZS9jbGllbnREYXRhIHVzZWQuCisgKi8KK2ludCB3b3Jrc2hvcF9nZXRfcG9zaXRpb25zKHZvaWQgKmZyYW1lLAorCQkJICAgY2hhciAqKmZpbGVuYW1lLAorCQkJICAgaW50ICpjdXJMaW5lLAorCQkJICAgaW50ICpjdXJDb2wsCisJCQkgICBpbnQgKnNlbFN0YXJ0TGluZSwKKwkJCSAgIGludCAqc2VsU3RhcnRDb2wsCisJCQkgICBpbnQgKnNlbEVuZExpbmUsCisJCQkgICBpbnQgKnNlbEVuZENvbCwKKwkJCSAgIGludCAqc2VsTGVuZ3RoLAorCQkJICAgY2hhciAqKnNlbGVjdGlvbik7CisKKy8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgaGVpZ2h0IG9mIGEgY2hhcmFjdGVyCisgKiBpbiB0aGUgdGV4dCBkaXNwbGF5LiBUaGlzIGlzIHVzZWQgdG8gcGljayBvdXQgYSBzdWl0YWJsZSBzaXplCisgKiBmb3IgdGhlIHNpZ25zIHRvIG1hdGNoIHRoZSB0ZXh0IChjdXJyZW50bHkgYXZhaWxhYmxlIGluIHRocmVlCisgKiBzaXplcykuIElmIHlvdSBqdXN0IHJldHVybiAwLCBXb3JrU2hvcCB3aWxsIHVzZSB0aGUgZGVmYXVsdAorICogc2lnbiBzaXplLiAoVXNlIFhtU3RyaW5nRXh0ZW50IG9uIGNoYXJhY3RlciAiQSIgdG8gZ2V0IHRoZSBoZWlnaHQuKQorICovCisKK2ludCB3b3Jrc2hvcF9nZXRfZm9udF9oZWlnaHQodm9pZCk7CisKKy8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gcmVxdWVzdHMgdGhhdCB5b3UgcmVnaXN0ZXIgdGhlIGdpdmVuCisgKiBob3RrZXkgYXMgYSBrZXlib2FyZCBhY2NlbGVyYXRvciBmb3IgYWxsIGZyYW1lcy4gV2hlbmV2ZXIgdGhlCisgKiBob3RrZXkgaXMgcHJlc3NlZCwgeW91IHNob3VsZCBpbnZva2UgIHdvcmtzaG9wX2hvdGtleV9wcmVzc2VkCisgKiBhbmQgcGFzcyB0aGUgY3VycmVudCBmcmFtZSBwb2ludGVyIGFzIGFuIGFyZ3VtZW50IGFzIHdlbGwgYXMKKyAqIHRoZSBjbGllbnREYXRhIHBvaW50ZXIgcGFzc2VkIGluIHRvIHRoaXMgZnVuY3Rpb24uCisgKiBUaGUgcmVtb3ZlIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIHRoZSBob3RrZXkuCisgKi8KK3ZvaWQgd29ya3Nob3BfcmVnaXN0ZXJfaG90a2V5KE1vZGlmaWVycyBtb2RpZmllcnMsIEtleVN5bSBrZXlzeW0sCisJCQkgICAgICB2b2lkICpjbGllbnREYXRhKTsKK3ZvaWQgd29ya3Nob3BfdW5yZWdpc3Rlcl9ob3RrZXkoTW9kaWZpZXJzIG1vZGlmaWVycywgS2V5U3ltIGtleXN5bSwKKwkJCQl2b2lkICpjbGllbnREYXRhKTsKKworCisKKworLyoKKyAqCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBub3RpZnkgZXNlcnZlIG9mIGltcG9ydGFudCBlZGl0b3IgZXZlbnRzLAorICogc3VjaCBhcyBmaWxlcyBiZWluZyBtb2RpZmllZCwgZmlsZXMgYmVpbmcgc2F2ZWQsIGV0Yy4gWW91IG11c3QKKyAqIHNwcmlua2xlIHlvdXIgZWRpdG9yIGNvZGUgd2l0aCBjYWxscyB0byB0aGVzZS4gRm9yIGV4YW1wbGUsIHdoZW5ldmVyCisgKiBhIGZpbGUgaXMgbW9kaWZpZWQgKHdlbGwsIHdoZW4gaXRzIHJlYWQtb25seSBzdGF0dXMgY2hhbmdlcyB0byBtb2RpZmllZCksCisgKiBjYWxsIHdvcmtzaG9wX2ZpbGVfbW9kaWZpZWQoKS4KKyAqCisgKi8KKworCisKKy8qIENvbm5lY3Qgd2l0aCBlc2VydmUuIEFkZCB0aGlzIGNhbGwgYWZ0ZXIgeW91IGVkaXRvciBpbml0aWFsaXphdGlvbgorICogaXMgZG9uZSwgcmlnaHQgYmVmb3JlIGVudGVyaW5nIHRoZSBldmVudCBsb29wIG9yIGJsb2NraW5nIG9uIGlucHV0LgorICogVGhpcyB3aWxsIHNldCB1cCBhIHNvY2tldCBjb25uZWN0aW9uIHdpdGggZXNlcnZlLgorICovCit2b2lkIHdvcmtzaG9wX2Nvbm5lY3QoWHRBcHBDb250ZXh0IGNvbnRleHQpOworCisvKiBBIGZpbGUgaGFzIGJlZW4gb3BlbmVkLiAqLwordm9pZCB3b3Jrc2hvcF9maWxlX29wZW5lZChjaGFyICpmaWxlbmFtZSwgaW50IHJlYWRPbmx5KTsKKworCisvKiBBIGZpbGUgaGFzIGJlZW4gc2F2ZWQuIERlc3BpdGUgaXRzIG5hbWUsIGVzZXJ2ZSBhbHNvIHVzZXMgdGhpcworICogbWVzc2FnZSB0byBtZWFuIGEgZmlsZSBoYXMgYmVlbiByZXZlcnRlZCBvciB1bm1vZGlmaWVkLgorICovCit2b2lkIHdvcmtzaG9wX2ZpbGVfc2F2ZWQoY2hhciAqZmlsZW5hbWUpOworCisKKy8qIEEgZmlsZSBoYXMgYmVlbiBjbG9zZWQgKi8KK3ZvaWQgd29ya3Nob3BfZmlsZV9jbG9zZWQoY2hhciAqZmlsZW5hbWUpOworCisvKiBMaWtlIHdvcmtzaG9wX2ZpbGVfY2xvc2VkLCBidXQgYWxzbyBpbmZvcm0gZXNlcnZlIHdoYXQgbGluZSB0aGUKKyAgIGN1cnNvciB3YXMgb24gd2hlbiB5b3UgbGVmdCB0aGUgZmlsZS4gVGhhdCB3YXkgZXNlcnZlIGNhbiBwdXQgeW91CisgICBiYWNrIHdoZXJlIHlvdSBsZWZ0IG9mZiB3aGVuIHlvdSByZXR1cm4gdG8gdGhpcyBmaWxlLiAqLwordm9pZCB3b3Jrc2hvcF9maWxlX2Nsb3NlZF9saW5lbm8oY2hhciAqZmlsZW5hbWUsIGludCBsaW5lKTsKKworLyogQSBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkICovCit2b2lkIHdvcmtzaG9wX2ZpbGVfbW9kaWZpZWQoY2hhciAqZmlsZW5hbWUpOworCisKKy8qCisgKiBBIG1hcmsgaGFzIGJlZW4gbW92ZWQuIE9ubHkgY2FsbCB0aGlzIGFzIGEgcmVzcG9uc2UgdG8KKyAqIGEgd29ya3Nob3BfbW92ZWRfbWFya3MgcmVxdWVzdCBjYWxsLgorICovCit2b2lkIHdvcmtzaG9wX21vdmVfbWFyayhjaGFyICpmaWxlbmFtZSwgaW50IG1hcmtJZCwgaW50IG5ld0xpbmVubyk7CisKKy8qIFRlbGwgdGhlIGludGVncmF0aW9uIGxpYnJhcnkgYWJvdXQgYSBuZXcgZnJhbWUgYmVpbmcgYWRkZWQuCisgKiBTdXBwbHkgYSBmb3JtIGZvciB0aGUgdG9vbGJhciwgYSBsYWJlbCBmb3IgdGhlIGZvb3RlciwgYW5kIGFuCisgKiBYbVB1bGxkb3duIG1lbnUgZm9yIHRoZSBXb3JrU2hvcCBtZW51IHRvIGF0dGFjaCB0by4gVG9wIGFuZCBib3R0b20KKyAqIGFyZSB0aGUgd2lkZ2V0cyBhYm92ZSBhbmQgYmVsb3cgdGhlIHRvb2xiYXIgZm9ybSB3aWRnZXQsIGlmCisgKiBhbnkuIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHlvdSBjcmVhdGUgYSBuZXcgd2luZG93LiBJdCByZXR1cm5zIGEKKyAqIHZvaWQgKiwgYSBoYW5kbGUgd2hpY2ggeW91IHNob3VsZCBrZWVwIGFuZCByZXR1cm4gd2hlbiB5b3UgZGVsZXRlCisgKiB0aGUgd2luZG93IHdpdGggd29ya3Nob3BfZGVsZXRlX3Rvb2xiYXIuICBUaGUgImZvb3RlciIgYXJndW1lbnQKKyAqIHBvaW50cyB0byBhIExhYmVsIHdpZGdldCB0aGF0IGlzIGdvaW5nIHRvIGJlIHVzZWQgYXMgYSBzdGF0dXMKKyAqIG1lc3NhZ2UgYXJlYSwgYW5kICJtZW51IiAoaWYgYW55KSBwb2ludHMgdG8gYW4gTWVudSB3aWRnZXQgdGhhdAorICogc2hvdWxkIGNvbnRhaW4gYSBXb3JrU2hvcCBtZW51LiAgQ2xpZW50ZGF0YSBpcyBhIHBvaW50ZXIgd2hpY2ggaXMKKyAqIG9ubHkgdXNlZCBieSB0aGUgZWRpdG9yLiBJdCB3aWxsIHR5cGljYWxseSBiZSBhIHBvaW50ZXIgdG8gdGhlCisgKiB3aW5kb3cgb2JqZWN0IHRoYXQgdGhlIHRvb2xiYXIgaXMgcGxhY2VkIGluLiBJZiB5b3UgaGF2ZSBtdWx0aXBsZQorICogd2luZG93cywgeW91IG5lZWQgdG8gdXNlIHRoaXMgcG9pbnRlciB0byBmaWd1cmUgb3V0IHdoaWNoIHdpbmRvdworICogKGFuZCB0aHVzIGNvcnJlc3BvbmRpbmcgYnVmZmVyKSB0aGUgdXNlciBoYXMgY2xpY2tlZCBvbiB0byByZXNwb25kCisgKiB0byB0aGUgd29ya3Nob3BfZ2V0X3Bvc2l0aW9ucyBtZXNzYWdlLgorICogRWFjaCBmcmFtZSdzIGNsaWVudERhdGEgKCJmcmFtZSIpIHNob3VsZCBiZSB1bmlxdWUuCisgKi8KK3ZvaWQgKndvcmtzaG9wX2FkZF9mcmFtZSh2b2lkICpmcmFtZSwgV2lkZ2V0IGZvcm0sCisJCQkgICBXaWRnZXQgdG9wLCBXaWRnZXQgYm90dG9tLCBXaWRnZXQgZm9vdGVyLAorCQkJICAgV2lkZ2V0IG1lbnUpOworCisvKiBEZWxldGUgYSB3aW5kb3cvZnJhbWUuIENhbGwgdGhpcyB3aGVuIGFuIGVkaXRvciB3aW5kb3cgaXMgYmVpbmcgZGVsZXRlZC4gKi8KK3ZvaWQgd29ya3Nob3BfZGVsZXRlX2ZyYW1lKHZvaWQgKmhhbmRsZSk7CisKKy8qIEFkZCBhIGJhbGxvb24gZXZhbHVhdGUgdGV4dCBhcmVhLiAiZnJhbWUiIGlzIHVzZWQgdGhlIHNhbWUgd2F5CisgKiBhcyBpbiB3b3Jrc2hvcF9hZGRfZnJhbWUuIFRoaXMgY2FsbCBpcyBub3QgcGFydCBvZiB3b3Jrc2hvcF9hZGRfZnJhbWUgYmVjYXVzZQorICogYSBmcmFtZSBjYW4gaGF2ZSBtdWx0aXBsZSB0b29sdGlwIGFyZWFzICh0eXBpY2FsbHksIGFuIGVkaXRvciBmcmFtZSB0aGF0CisgKiBpcyBzcGxpdCBzaG93aW5nIG11bHRpcGxlIGJ1ZmZlcnMgd2lsbCBoYXZlIGEgc2VwYXJhdGUgdG9vbHRpcCBhcmVhIGZvcgorICogZWFjaCB0ZXh0IHdpZGdldC4gRWFjaCBzdWNoIGFyZWEgaXMgY2FsbGVkIGEgIndpbmRvdyIgKGNvbnNpc3RlbnQgd2l0aAorICogWEVtYWNzIHRlcm1pbm9sb2d5KS4gU2VwYXJhdGUgdGhlc2UgYnkgdGhlIHdpbmRvdyBhcmd1bWVudCBpZiBuZWNlc3NhcnkuCisgKiBZb3Ugd2lsbCBuZWVkIHRvIGltcGxlbWVudCB3b3Jrc2hvcF9nZXRfYmFsbG9vbl90ZXh0IHN1Y2ggdGhhdCBpdCB1c2VzCisgKiB0aGVzZSB0d28gYXJndW1lbnRzIHRvIGRlcml2ZSB0aGUgZmlsZSwgbGluZSBldGMuIGZvciB0aGUgdGlwLgorICogQ2FsbCB0aGUgcmVtb3ZlIGZ1bmN0aW9uIGlmIHlvdSBkZWxldGUgdGhpcyBhcmVhIHN1Y2ggdGhhdCB0aGUgaW50ZWdyYXRpb24KKyAqIGxpYnJhcnkgY2FuIHVwZGF0ZSBpdHNlbGYuIFlvdSBtdXN0IGNhbGwgd29ya3Nob3BfYWRkX2ZyYW1lIGJlZm9yZSB5b3UKKyAqIGNhbGwgYWRkX2JhbGxvb25fZXZhbF9hcmVhLCBhbmQgeW91IG11c3QgcGFzcyB0aGUgc2FtZSBmcmFtZSBwb2ludGVyLgorICovCit2b2lkIHdvcmtzaG9wX2FkZF9iYWxsb29uX2V2YWxfYXJlYSh2b2lkICpmcmFtZSwgdm9pZCAqd2luZG93LCBXaWRnZXQgd2lkZ2V0KTsKK3ZvaWQgd29ya3Nob3BfcmVtb3ZlX2JhbGxvb25fZXZhbF9hcmVhKHZvaWQgKmZyYW1lLCB2b2lkICp3aW5kb3csIFdpZGdldCB3aWRnZXQpOworCisKKy8qIEZvciBhIGdpdmVuIG1vdXNlIHBvc2l0aW9uIGluc2lkZSB0aGUgYmFsbG9vbiBhcmVhIChwYXNzZWQgYXMgeCx5KSwKKyAqIHJldHVybiB0aGUgYmFsbG9vbiB0ZXh0IHRvIGJlIGV2YWx1YXRlZC4gVGhlcmUgYXJlIHR3byBzY2VuYXJpb3M6CisgKiBJZiB0aGUgcG9zaXRpb24gaXMgaW5zaWRlIHRoZSBzZWxlY3Rpb24sIHJldHVybiB0aGUgc2VsZWN0aW9uCisgKiBzdHJpbmcuICBFbHNlLCByZXR1cm4gdGhlIGZ1bGwgbGluZSAob3IgcG9zc2libHkgdGhlIGZ1bGwgbGluZSB1cAorICogdG8gdGhlIGxhc3Qgc2VtaWNvbG9uICh0aGF0J3MgVEJEKSwgYWxvbmcgd2l0aCBhbiBpbmRleCBwb2ludGluZyB0bworICogd2hlcmUgd2hpY2ggY2hhcmFjdGVyIHRoZSBtb3VzZSBpcyBvdmVyLgorICogSWYgd2UgaGF2ZSB0aGUgc2VsZWN0aW9uLXNjZW5hcmlvLCBzZXQgbW91c2VJbmRleCB0byAtMSB0byBpbmRpY2F0ZQorICogdGhhdCBubyBhdXRvZXhwYW5zaW9uIHNob3VsZCBvY2N1ciBidXQgdGhhdCB0aGUgc2VsZWN0aW9uIHNob3VsZAorICogYmUgZXZhbHVhdGVkIGFzIGlzLgorICoKKyAqIFhYWCBEb2VzIGRieCBuZWVkIG1vcmUgaW5mb3JtYXRpb24gaGVyZSwgbGlrZSB0aGUgZmlsZW5hbWUgYW5kIGxpbmUKKyAqIG51bWJlciBpbiBvcmRlciB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgbGFuZ3VhZ2UgYW5kIHNjb3BlIHRvIGJlCisgKiB1c2VkIGR1cmluZyBldmFsdWF0aW9uPz8gT3Igc2hvdWxkIGl0IGp1c3Qgd29yayBsaWtlIHRoZSBwPSBidXR0b24KKyAqICh3aGVyZSB0aGUgY3VycmVudCBzY29wZSBhbmQgbGFuZ3VhZ2UgaXMgdXNlZCwgZXZlbiBpZiB5b3UgYXJlCisgKiBwb2ludGluZyBhdCBhIGRpZmZlcmVudCBmaWxlIHdpdGggYSBkaWZmZXJlbnQgc2NvcGUpID8KKyAqLworaW50IHdvcmtzaG9wX2dldF9iYWxsb29uX3RleHQoUG9zaXRpb24geCwgUG9zaXRpb24geSwKKwkJCSAgICAgIHZvaWQgKmZyYW1lLAorCQkJICAgICAgdm9pZCAqd2luZG93LAorCQkJICAgICAgY2hhciAqKmZpbGVuYW1lLAorCQkJICAgICAgaW50ICpsaW5lLAorCQkJICAgICAgY2hhciAqKnRleHQsCisJCQkgICAgICBpbnQgKm1vdXNlSW5kZXgpOworCisKKy8qIFdpbmRvdyBzaXplIGFuZCBsb2NhdGlvbgorICogV29ya1Nob3Agd2lsbCBhdHRlbXB0IHRvIHJlc3RvcmUgdGhlIHNpemUgYW5kIGxvY2F0aW9uIG9mIGEgc2luZ2xlCisgKiBlZGl0b3IgZnJhbWUuIEZvciB2aSwgdGhpcyB3aW5kb3cgaXMgZGVzaWduYXRlZCBhcyB0aGUgInJldXNhYmxlIiBvbmUuCisgKiBZb3UgY2FuIGltcGxlbWVudCB5b3VyIG93biBzY2hlbWUgZm9yIGRldGVybWluaW5nIHdoaWNoIHdpbmRvdyB5b3UKKyAqIHdhbnQgdG8gYXNzb2NpYXRlIHdpdGggV29ya1Nob3AuIFdoZW5ldmVyIHRoZSBzaXplIGFuZCBsb2NhdGlvbiBvZgorICogdGhpcyB3aW5kb3cgaXMgY2hhbmdlZCwgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIG5vdGlmeSBlc2VydmUuCisgKiBMaWtlIHdvcmtzaG9wX2ludm9rZWQsIHRoaXMgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHdvcmtzaG9wX2Nvbm5lY3QoKQorICogY2FsbC4KKyAqLwordm9pZCB3b3Jrc2hvcF9mcmFtZV9tb3ZlZChpbnQgbmV3X3gsIGludCBuZXdfeSwgaW50IG5ld193LCBpbnQgbmV3X2gpOworQm9vbGVhbiB3b3Jrc2hvcF9nZXRfd2lkdGhfaGVpZ2h0KGludCAqLCBpbnQgKik7CitCb29sZWFuIHdvcmtzaG9wX2dldF9yb3dzX2NvbHMoaW50ICosIGludCAqKTsKKworLyogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHlvdSBwcmVzcyBhIGhvdGtleQorICogc2V0IHVwIGJ5IHdvcmtzaG9wX3JlZ2lzdGVyX2hvdGtleS4gUGFzcyB0aGUgY2xpZW50RGF0YQorICogdG8gaXQgdGhhdCB3YXMgZ2l2ZW4gdG8geW91IHdpdGggd29ya3Nob3BfcmVnaXN0ZXJfaG90a2V5LgorKi8KK3ZvaWQgd29ya3Nob3BfaG90a2V5X3ByZXNzZWQodm9pZCAqZnJhbWUsIHZvaWQgKmNsaWVudERhdGEpOworCisKKworCisKKy8qCisgKiBVdGlsaXR5IGZ1bmN0aW9ucworICogVGhlc2UgcHJvdmlkZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gc2ltcGxpZnkgaW1wbGVtZW50aW5nIHNvbWUKKyAqIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMuCisgKgorICovCisKKy8qIFdlcmUgd2UgaW52b2tlZCBieSBXb3JrU2hvcD8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBlYXJseSBkdXJpbmcgc3RhcnR1cAorICogaWYgeW91IHdhbnQgdG8gZG8gdGhpbmdzIGRpZmZlcmVudGx5IGlmIHRoZSBlZGl0b3IgaXMgc3RhcnRlZCBzdGFuZGFsb25lCisgKiBvciBpbiBXb3JrU2hvcCBtb2RlLiBGb3IgZXhhbXBsZSwgaW4gc3RhbmRhbG9uZSBtb2RlIHlvdSBtYXkgbm90IHdhbnQgdG8KKyAqIGFkZCBhIGZvb3Rlci9tZXNzYWdlIGFyZWEgb3IgYSBzaWduIGd1dHRlci4KKyAqLworaW50IHdvcmtzaG9wX2ludm9rZWQodm9pZCk7CisKKy8qCisgKlNldCB0aGUgZGVza3RvcCBpY29uIG9mIHRoZSBjdXJyZW50IHNoZWxsIHRvIHRoZSBnaXZlbiB4cG0gaWNvbi4KKyAqIFN0YW5kYXJkIFdvcmtTaG9wIGRlc2t0b3AgaWNvbnMgc2hvdWxkIGJlIDQ4eDQ4LgorICovCisKK3ZvaWQgd29ya3Nob3Bfc2V0X2ljb24oRGlzcGxheSAqZGlzcGxheSwgV2lkZ2V0IHNoZWxsLCBjaGFyICoqeHBtZGF0YSwKKwkJICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKworLyogTWluaW1pemUgKGljb25pZnkpIHRoZSBnaXZlbiBzaGVsbCAqLwordm9pZCB3b3Jrc2hvcF9taW5pbWl6ZV9zaGVsbChXaWRnZXQgc2hlbGwpOworCisvKiBNYXhpbWl6ZSAoZGVpY29uaWZ5KSB0aGUgZ2l2ZW4gc2hlbGwgKi8KK3ZvaWQgd29ya3Nob3BfbWF4aW1pemVfc2hlbGwoV2lkZ2V0IHNoZWxsKTsKKworLyogQ2FsbGVkIGJ5IGZyYW1lLmNjIC0tIGVkaXRvciBzaG91bGRuJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LgorICogUGVyaGFwcyB3ZSBuZWVkIGFuIGludGVncmF0aW9uUC5oIGZpbGUgPyAqLwordm9pZCB3b3Jrc2hvcF9wZXJmb3JtX3ZlcmIoY2hhciAqdmVyYiwgdm9pZCAqY2xpZW50RGF0YSk7Cit2b2lkIHdvcmtzaG9wX3NlbmRfbWVzc2FnZShjaGFyICpidWYpOworCisKKyNpZmRlZiBOT0hBTkRTX1NVUFBPUlRfRlVOQ1RJT05TCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgbmVlZGVkIHRvIHJ1biB0aGUgV29ya1Nob3AgdGVzdHN1aXRlCisgKiB3aXRoIHRoaXMgZWRpdG9yLiBZb3UgZG9uJ3QgbmVlZCB0byBpbXBsZW1lbnQgdGhlc2UgdW5sZXNzIHlvdQorICogaW50ZW5kIGZvciB5b3VyIGVkaXRvciB0byBiZSBydW4gYnkgV29ya3Nob3AncyB0ZXN0c3VpdGUuCisgKiBnZXRjdXJzb3Jyb3cgc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIHRvcCBvZgorICogdGhlIHdpbmRvdyB0aGUgY3Vyc29yIGlzOyBzaW1pbGFybHkgZm9yIGdldGN1cnNvcmNvbC4KKyAqLworY2hhciAqd29ya3Nob3BfdGVzdF9nZXRjdXJyZW50ZmlsZSgpOworaW50IHdvcmtzaG9wX3Rlc3RfZ2V0Y3Vyc29ycm93KCk7CitpbnQgd29ya3Nob3BfdGVzdF9nZXRjdXJzb3Jjb2woKTsKK2NoYXIgKndvcmtzaG9wX3Rlc3RfZ2V0Y3Vyc29ycm93dGV4dCgpOworY2hhciAqd29ya3Nob3BfdGVzdF9nZXRzZWxlY3RlZHRleHQoKTsKKyNlbmRpZgorCisvKgorICogU3RydWN0IHVzZWQgdG8gc2V0L3Vuc2V0IHRoZSBzZW5zaXRpdml0eSBvZiB2ZXJicy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWNoYXIJCSp2ZXJiOworCUJvb2xlYW4JCXNlbnNlOworfSBWZXJiU2Vuc2U7CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0lOVEVHUkFUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9rZXltYXAuaCBiL3NyYy9rZXltYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGIwZDYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2tleW1hcC5oCkBAIC0wLDAgKzEsNDg0IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisvKgorICogRm9yIE1TRE9TIHNvbWUga2V5cyBwcm9kdWNlIGNvZGVzIGxhcmdlciB0aGFuIDB4ZmYuIFRoZXkgYXJlIHNwbGl0IGludG8gdHdvCisgKiBjaGFycywgdGhlIGZpcnN0IG9uZSBpcyBLX05VTCAoc2FtZSB2YWx1ZSB1c2VkIGluIHRlcm0uaCkuCisgKi8KKyNkZWZpbmUgS19OVUwJCQkoMHhjZSkJLyogZm9yIE1TRE9TOiBzcGVjaWFsIGtleSBmb2xsb3dzICovCisKKy8qCisgKiBLZXljb2RlIGRlZmluaXRpb25zIGZvciBzcGVjaWFsIGtleXMuCisgKgorICogQW55IHNwZWNpYWwga2V5IGNvZGUgc2VxdWVuY2VzIGFyZSByZXBsYWNlZCBieSB0aGVzZSBjb2Rlcy4KKyAqLworCisvKgorICogS19TUEVDSUFMIGlzIHRoZSBmaXJzdCBieXRlIG9mIGEgc3BlY2lhbCBrZXkgY29kZSBhbmQgaXMgYWx3YXlzIGZvbGxvd2VkIGJ5CisgKiB0d28gYnl0ZXMuCisgKiBUaGUgc2Vjb25kIGJ5dGUgY2FuIGhhdmUgYW55IHZhbHVlLiBBU0NJSSBpcyB1c2VkIGZvciBub3JtYWwgdGVybWNhcAorICogZW50cmllcywgMHg4MCBhbmQgaGlnaGVyIGZvciBzcGVjaWFsIGtleXMsIHNlZSBiZWxvdy4KKyAqIFRoZSB0aGlyZCBieXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgYmV0d2VlbiAweDAyIGFuZCAweDdmLgorICovCisKKyNkZWZpbmUgS19TUEVDSUFMCQkoMHg4MCkKKworLyoKKyAqIFBvc2l0aXZlIGNoYXJhY3RlcnMgYXJlICJub3JtYWwiIGNoYXJhY3RlcnMuCisgKiBOZWdhdGl2ZSBjaGFyYWN0ZXJzIGFyZSBzcGVjaWFsIGtleSBjb2Rlcy4gIE9ubHkgY2hhcmFjdGVycyBiZWxvdyAtMHgyMDAKKyAqIGFyZSB1c2VkIHRvIHNvIHRoYXQgdGhlIGFic29sdXRlIHZhbHVlIGNhbid0IGJlIG1pc3Rha2VuIGZvciBhIHNpbmdsZS1ieXRlCisgKiBjaGFyYWN0ZXIuCisgKi8KKyNkZWZpbmUgSVNfU1BFQ0lBTChjKQkJKChjKSA8IDApCisKKy8qCisgKiBDaGFyYWN0ZXJzIDB4MDEwMCAtIDB4MDFmZiBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nIGZvciBhYmJyZXZpYXRpb25zLgorICogTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGFsc28gaGF2ZSBBQkJSX09GRiBhZGRlZCwgdGh1cyBhcmUgYWJvdmUgMHgwMjAwLgorICovCisjZGVmaW5lIEFCQlJfT0ZGCQkweDEwMAorCisvKgorICogTlVMIGNhbm5vdCBiZSBpbiB0aGUgaW5wdXQgc3RyaW5nLCB0aGVyZWZvcmUgaXQgaXMgcmVwbGFjZWQgYnkKKyAqCUtfU1BFQ0lBTCAgIEtTX1pFUk8JS0VfRklMTEVSCisgKi8KKyNkZWZpbmUgS1NfWkVSTwkJCTI1NQorCisvKgorICogS19TUEVDSUFMIGNhbm5vdCBiZSBpbiB0aGUgaW5wdXQgc3RyaW5nLCB0aGVyZWZvcmUgaXQgaXMgcmVwbGFjZWQgYnkKKyAqCUtfU1BFQ0lBTCAgIEtTX1NQRUNJQUwJS0VfRklMTEVSCisgKi8KKyNkZWZpbmUgS1NfU1BFQ0lBTAkJMjU0CisKKy8qCisgKiBLU19FWFRSQSBpcyB1c2VkIGZvciBrZXlzIHRoYXQgaGF2ZSBubyB0ZXJtY2FwIG5hbWUKKyAqCUtfU1BFQ0lBTCAgIEtTX0VYVFJBCUtFX3h4eAorICovCisjZGVmaW5lIEtTX0VYVFJBCQkyNTMKKworLyoKKyAqIEtTX01PRElGSUVSIGlzIHVzZWQgd2hlbiBhIG1vZGlmaWVyIGlzIGdpdmVuIGZvciBhIChzcGVjaWFsKSBrZXkKKyAqCUtfU1BFQ0lBTCAgIEtTX01PRElGSUVSCWJpdG1hc2sKKyAqLworI2RlZmluZSBLU19NT0RJRklFUgkJMjUyCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCBmb3IgdGhlIEdVSQorICoJS19TUEVDSUFMICAgS1NfeHh4CUtFX0ZJTExFUgorICovCisjZGVmaW5lIEtTX01PVVNFCQkyNTEKKyNkZWZpbmUgS1NfTUVOVQkJCTI1MAorI2RlZmluZSBLU19WRVJfU0NST0xMQkFSCTI0OQorI2RlZmluZSBLU19IT1JfU0NST0xMQkFSCTI0OAorCisvKgorICogVGhlc2UgYXJlIHVzZWQgZm9yIERFQyBtb3VzZQorICovCisjZGVmaW5lIEtTX05FVFRFUk1fTU9VU0UJMjQ3CisjZGVmaW5lIEtTX0RFQ19NT1VTRQkJMjQ2CisKKy8qCisgKiBVc2VkIGZvciBzd2l0Y2hpbmcgU2VsZWN0IG1vZGUgYmFjayBvbiBhZnRlciBhIG1hcHBpbmcgb3IgbWVudS4KKyAqLworI2RlZmluZSBLU19TRUxFQ1QJCTI0NQorI2RlZmluZSBLX1NFTEVDVF9TVFJJTkcJCShjaGFyX3UgKikiXDIwMFwzNjVYIgorCisvKgorICogVXNlZCBmb3IgdGVhcmluZyBvZmYgYSBtZW51LgorICovCisjZGVmaW5lIEtTX1RFQVJPRkYJCTI0NAorCisvKiB1c2VkIGZvciBKU0IgdGVybSBtb3VzZSAqLworI2RlZmluZSBLU19KU0JURVJNX01PVVNFCTI0MworCisvKiB1c2VkIGEgdGVybWNhcCBlbnRyeSB0aGF0IHByb2R1Y2VzIGEgbm9ybWFsIGNoYXJhY3RlciAqLworI2RlZmluZSBLU19LRVkJCQkyNDIKKworLyogVXNlZCBmb3IgdGhlIHFueCBwdGVybSBtb3VzZSAqLworI2RlZmluZSBLU19QVEVSTV9NT1VTRQkJMjQxCisKKy8qCisgKiBGaWxsZXIgdXNlZCBhZnRlciBLU19TUEVDSUFMIGFuZCBvdGhlcnMKKyAqLworI2RlZmluZSBLRV9GSUxMRVIJCSgnWCcpCisKKy8qCisgKiB0cmFuc2xhdGlvbiBvZiB0aHJlZSBieXRlIGNvZGUgIktfU1BFQ0lBTCBhIGIiIGludG8gaW50ICJLX3h4eCIgYW5kIGJhY2sKKyAqLworI2RlZmluZSBURVJNQ0FQMktFWShhLCBiKQkoLSgoYSkgKyAoKGludCkoYikgPDwgOCkpKQorI2RlZmluZSBLRVkyVEVSTUNBUDAoeCkJCSgoLSh4KSkgJiAweGZmKQorI2RlZmluZSBLRVkyVEVSTUNBUDEoeCkJCSgoKHVuc2lnbmVkKSgtKHgpKSA+PiA4KSAmIDB4ZmYpCisKKy8qCisgKiBnZXQgc2Vjb25kIG9yIHRoaXJkIGJ5dGUgd2hlbiB0cmFuc2xhdGluZyBzcGVjaWFsIGtleSBjb2RlIGludG8gdGhyZWUgYnl0ZXMKKyAqLworI2RlZmluZSBLX1NFQ09ORChjKQkoKGMpID09IEtfU1BFQ0lBTCA/IEtTX1NQRUNJQUwgOiAoYykgPT0gTlVMID8gS1NfWkVSTyA6IEtFWTJURVJNQ0FQMChjKSkKKworI2RlZmluZSBLX1RISVJEKGMpCSgoKGMpID09IEtfU1BFQ0lBTCB8fCAoYykgPT0gTlVMKSA/IEtFX0ZJTExFUiA6IEtFWTJURVJNQ0FQMShjKSkKKworLyoKKyAqIGdldCBzaW5nbGUgaW50IGNvZGUgZnJvbSBzZWNvbmQgYnl0ZSBhZnRlciBLX1NQRUNJQUwKKyAqLworI2RlZmluZSBUT19TUEVDSUFMKGEsIGIpICAgICgoYSkgPT0gS1NfU1BFQ0lBTCA/IEtfU1BFQ0lBTCA6IChhKSA9PSBLU19aRVJPID8gS19aRVJPIDogVEVSTUNBUDJLRVkoYSwgYikpCisKKy8qCisgKiBDb2RlcyBmb3Iga2V5cyB0aGF0IGRvIG5vdCBoYXZlIGEgdGVybWNhcCBuYW1lLgorICoKKyAqIEtfU1BFQ0lBTCBLU19FWFRSQSBLRV94eHgKKyAqLworZW51bSBrZXlfZXh0cmEKK3sKKyAgICBLRV9OQU1FID0gMwkJLyogbmFtZSBvZiB0aGlzIHRlcm1pbmFsIGVudHJ5ICovCisKKyAgICAsIEtFX1NfVVAJCS8qIHNoaWZ0LXVwICovCisgICAgLCBLRV9TX0RPV04JCS8qIHNoaWZ0LWRvd24gKi8KKworICAgICwgS0VfU19GMQkJLyogc2hpZnRlZCBmdW5jdGlvbiBrZXlzICovCisgICAgLCBLRV9TX0YyCisgICAgLCBLRV9TX0YzCisgICAgLCBLRV9TX0Y0CisgICAgLCBLRV9TX0Y1CisgICAgLCBLRV9TX0Y2CisgICAgLCBLRV9TX0Y3CisgICAgLCBLRV9TX0Y4CisgICAgLCBLRV9TX0Y5CisgICAgLCBLRV9TX0YxMAorCisgICAgLCBLRV9TX0YxMQorICAgICwgS0VfU19GMTIKKyAgICAsIEtFX1NfRjEzCisgICAgLCBLRV9TX0YxNAorICAgICwgS0VfU19GMTUKKyAgICAsIEtFX1NfRjE2CisgICAgLCBLRV9TX0YxNworICAgICwgS0VfU19GMTgKKyAgICAsIEtFX1NfRjE5CisgICAgLCBLRV9TX0YyMAorCisgICAgLCBLRV9TX0YyMQorICAgICwgS0VfU19GMjIKKyAgICAsIEtFX1NfRjIzCisgICAgLCBLRV9TX0YyNAorICAgICwgS0VfU19GMjUKKyAgICAsIEtFX1NfRjI2CisgICAgLCBLRV9TX0YyNworICAgICwgS0VfU19GMjgKKyAgICAsIEtFX1NfRjI5CisgICAgLCBLRV9TX0YzMAorCisgICAgLCBLRV9TX0YzMQorICAgICwgS0VfU19GMzIKKyAgICAsIEtFX1NfRjMzCisgICAgLCBLRV9TX0YzNAorICAgICwgS0VfU19GMzUKKyAgICAsIEtFX1NfRjM2CisgICAgLCBLRV9TX0YzNworCisgICAgLCBLRV9NT1VTRQkJLyogbW91c2UgZXZlbnQgc3RhcnQgKi8KKworLyoKKyAqIFN5bWJvbHMgZm9yIHBzZXVkbyBrZXlzIHdoaWNoIGFyZSB0cmFuc2xhdGVkIGZyb20gdGhlIHJlYWwga2V5IHN5bWJvbHMKKyAqIGFib3ZlLgorICovCisgICAgLCBLRV9MRUZUTU9VU0UJLyogTGVmdCBtb3VzZSBidXR0b24gY2xpY2sgKi8KKyAgICAsIEtFX0xFRlREUkFHCS8qIERyYWcgd2l0aCBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duICovCisgICAgLCBLRV9MRUZUUkVMRUFTRQkvKiBMZWZ0IG1vdXNlIGJ1dHRvbiByZWxlYXNlICovCisgICAgLCBLRV9NSURETEVNT1VTRQkvKiBNaWRkbGUgbW91c2UgYnV0dG9uIGNsaWNrICovCisgICAgLCBLRV9NSURETEVEUkFHCS8qIERyYWcgd2l0aCBtaWRkbGUgbW91c2UgYnV0dG9uIGRvd24gKi8KKyAgICAsIEtFX01JRERMRVJFTEVBU0UJLyogTWlkZGxlIG1vdXNlIGJ1dHRvbiByZWxlYXNlICovCisgICAgLCBLRV9SSUdIVE1PVVNFCS8qIFJpZ2h0IG1vdXNlIGJ1dHRvbiBjbGljayAqLworICAgICwgS0VfUklHSFREUkFHCS8qIERyYWcgd2l0aCByaWdodCBtb3VzZSBidXR0b24gZG93biAqLworICAgICwgS0VfUklHSFRSRUxFQVNFCS8qIFJpZ2h0IG1vdXNlIGJ1dHRvbiByZWxlYXNlICovCisKKyAgICAsIEtFX0lHTk9SRQkJLyogSWdub3JlZCBtb3VzZSBkcmFnL3JlbGVhc2UgKi8KKworICAgICwgS0VfVEFCCQkvKiB1bnNoaWZ0ZWQgVEFCIGtleSAqLworICAgICwgS0VfU19UQUJfT0xECS8qIHNoaWZ0ZWQgVEFCIGtleSAobm8gbG9uZ2VyIHVzZWQpICovCisKKyAgICAsIEtFX1NOSUZGCQkvKiBTTmlGRisgaW5wdXQgd2FpdGluZyAqLworCisgICAgLCBLRV9YRjEJCS8qIGV4dHJhIHZ0MTAwIGZ1bmN0aW9uIGtleXMgZm9yIHh0ZXJtICovCisgICAgLCBLRV9YRjIKKyAgICAsIEtFX1hGMworICAgICwgS0VfWEY0CisgICAgLCBLRV9YRU5ECQkvKiBleHRyYSAodnQxMDApIGVuZCBrZXkgZm9yIHh0ZXJtICovCisgICAgLCBLRV9YSE9NRQkJLyogZXh0cmEgKHZ0MTAwKSBob21lIGtleSBmb3IgeHRlcm0gKi8KKworICAgICwgS0VfTEVGVE1PVVNFX05NCS8qIG5vbi1tYXBwYWJsZSBMZWZ0IG1vdXNlIGJ1dHRvbiBjbGljayAqLworICAgICwgS0VfTEVGVFJFTEVBU0VfTk0JLyogbm9uLW1hcHBhYmxlIGxlZnQgbW91c2UgYnV0dG9uIHJlbGVhc2UgKi8KKworICAgICwgS0VfU19YRjEJCS8qIGV4dHJhIHZ0MTAwIHNoaWZ0ZWQgZnVuY3Rpb24ga2V5cyBmb3IgeHRlcm0gKi8KKyAgICAsIEtFX1NfWEYyCisgICAgLCBLRV9TX1hGMworICAgICwgS0VfU19YRjQKKworICAgICwgS0VfTU9VU0VET1dOCS8qIHNjcm9sbCB3aGVlbCBwc2V1ZG8tYnV0dG9uIERvd24gKi8KKyAgICAsIEtFX01PVVNFVVAJCS8qIHNjcm9sbCB3aGVlbCBwc2V1ZG8tYnV0dG9uIFVwICovCisKKyAgICAsIEtFX0tJTlMJCS8qIGtleXBhZCBJbnNlcnQga2V5ICovCisgICAgLCBLRV9LREVMCQkvKiBrZXlwYWQgRGVsZXRlIGtleSAqLworCisgICAgLCBLRV9DU0kJCS8qIENTSSB0eXBlZCBkaXJlY3RseSAqLworICAgICwgS0VfU05SCQkvKiA8U05SPiAqLworICAgICwgS0VfUExVRwkJLyogPFBsdWc+ICovCisgICAgLCBLRV9DTURXSU4JCS8qIG9wZW4gY29tbWFuZC1saW5lIHdpbmRvdyBmcm9tIENvbW1hbmQtbGluZSBNb2RlICovCisKKyAgICAsIEtFX0NfTEVGVAkJLyogY29udHJvbC1sZWZ0ICovCisgICAgLCBLRV9DX1JJR0hUCS8qIGNvbnRyb2wtcmlnaHQgKi8KKyAgICAsIEtFX0NfSE9NRQkJLyogY29udHJvbC1ob21lICovCisgICAgLCBLRV9DX0VORAkJLyogY29udHJvbC1lbmQgKi8KKworICAgICwgS0VfWDFNT1VTRQkvKiBYMS9YMiBtb3VzZS1idXR0b25zICovCisgICAgLCBLRV9YMURSQUcKKyAgICAsIEtFX1gxUkVMRUFTRQorICAgICwgS0VfWDJNT1VTRQorICAgICwgS0VfWDJEUkFHCisgICAgLCBLRV9YMlJFTEVBU0UKKworICAgICwgS0VfRFJPUAkJLyogRG5EIGRhdGEgaXMgYXZhaWxhYmxlICovCit9OworCisvKgorICogdGhlIHRocmVlIGJ5dGUgY29kZXMgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGZvbGxvd2luZyBpbnQgd2hlbiB1c2luZyB2Z2V0YygpCisgKi8KKyNkZWZpbmUgS19aRVJPCQlURVJNQ0FQMktFWShLU19aRVJPLCBLRV9GSUxMRVIpCisKKyNkZWZpbmUgS19VUAkJVEVSTUNBUDJLRVkoJ2snLCAndScpCisjZGVmaW5lIEtfRE9XTgkJVEVSTUNBUDJLRVkoJ2snLCAnZCcpCisjZGVmaW5lIEtfTEVGVAkJVEVSTUNBUDJLRVkoJ2snLCAnbCcpCisjZGVmaW5lIEtfUklHSFQJCVRFUk1DQVAyS0VZKCdrJywgJ3InKQorI2RlZmluZSBLX1NfVVAJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX1VQKQorI2RlZmluZSBLX1NfRE9XTglURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19ET1dOKQorI2RlZmluZSBLX1NfTEVGVAlURVJNQ0FQMktFWSgnIycsICc0JykKKyNkZWZpbmUgS19DX0xFRlQJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX0NfTEVGVCkKKyNkZWZpbmUgS19TX1JJR0hUCVRFUk1DQVAyS0VZKCclJywgJ2knKQorI2RlZmluZSBLX0NfUklHSFQJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX0NfUklHSFQpCisjZGVmaW5lIEtfU19IT01FCVRFUk1DQVAyS0VZKCcjJywgJzInKQorI2RlZmluZSBLX0NfSE9NRQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfQ19IT01FKQorI2RlZmluZSBLX1NfRU5ECQlURVJNQ0FQMktFWSgnKicsICc3JykKKyNkZWZpbmUgS19DX0VORAkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX0NfRU5EKQorI2RlZmluZSBLX1RBQgkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1RBQikKKyNkZWZpbmUgS19TX1RBQgkJVEVSTUNBUDJLRVkoJ2snLCAnQicpCisKKy8qIGV4dHJhIHNldCBvZiBmdW5jdGlvbiBrZXlzIEYxLUY0LCBmb3IgdnQxMDAgY29tcGF0aWJsZSB4dGVybSAqLworI2RlZmluZSBLX1hGMQkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1hGMSkKKyNkZWZpbmUgS19YRjIJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9YRjIpCisjZGVmaW5lIEtfWEYzCQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfWEYzKQorI2RlZmluZSBLX1hGNAkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1hGNCkKKworI2RlZmluZSBLX0YxCQlURVJNQ0FQMktFWSgnaycsICcxJykJLyogZnVuY3Rpb24ga2V5cyAqLworI2RlZmluZSBLX0YyCQlURVJNQ0FQMktFWSgnaycsICcyJykKKyNkZWZpbmUgS19GMwkJVEVSTUNBUDJLRVkoJ2snLCAnMycpCisjZGVmaW5lIEtfRjQJCVRFUk1DQVAyS0VZKCdrJywgJzQnKQorI2RlZmluZSBLX0Y1CQlURVJNQ0FQMktFWSgnaycsICc1JykKKyNkZWZpbmUgS19GNgkJVEVSTUNBUDJLRVkoJ2snLCAnNicpCisjZGVmaW5lIEtfRjcJCVRFUk1DQVAyS0VZKCdrJywgJzcnKQorI2RlZmluZSBLX0Y4CQlURVJNQ0FQMktFWSgnaycsICc4JykKKyNkZWZpbmUgS19GOQkJVEVSTUNBUDJLRVkoJ2snLCAnOScpCisjZGVmaW5lIEtfRjEwCQlURVJNQ0FQMktFWSgnaycsICc7JykKKworI2RlZmluZSBLX0YxMQkJVEVSTUNBUDJLRVkoJ0YnLCAnMScpCisjZGVmaW5lIEtfRjEyCQlURVJNQ0FQMktFWSgnRicsICcyJykKKyNkZWZpbmUgS19GMTMJCVRFUk1DQVAyS0VZKCdGJywgJzMnKQorI2RlZmluZSBLX0YxNAkJVEVSTUNBUDJLRVkoJ0YnLCAnNCcpCisjZGVmaW5lIEtfRjE1CQlURVJNQ0FQMktFWSgnRicsICc1JykKKyNkZWZpbmUgS19GMTYJCVRFUk1DQVAyS0VZKCdGJywgJzYnKQorI2RlZmluZSBLX0YxNwkJVEVSTUNBUDJLRVkoJ0YnLCAnNycpCisjZGVmaW5lIEtfRjE4CQlURVJNQ0FQMktFWSgnRicsICc4JykKKyNkZWZpbmUgS19GMTkJCVRFUk1DQVAyS0VZKCdGJywgJzknKQorI2RlZmluZSBLX0YyMAkJVEVSTUNBUDJLRVkoJ0YnLCAnQScpCisKKyNkZWZpbmUgS19GMjEJCVRFUk1DQVAyS0VZKCdGJywgJ0InKQorI2RlZmluZSBLX0YyMgkJVEVSTUNBUDJLRVkoJ0YnLCAnQycpCisjZGVmaW5lIEtfRjIzCQlURVJNQ0FQMktFWSgnRicsICdEJykKKyNkZWZpbmUgS19GMjQJCVRFUk1DQVAyS0VZKCdGJywgJ0UnKQorI2RlZmluZSBLX0YyNQkJVEVSTUNBUDJLRVkoJ0YnLCAnRicpCisjZGVmaW5lIEtfRjI2CQlURVJNQ0FQMktFWSgnRicsICdHJykKKyNkZWZpbmUgS19GMjcJCVRFUk1DQVAyS0VZKCdGJywgJ0gnKQorI2RlZmluZSBLX0YyOAkJVEVSTUNBUDJLRVkoJ0YnLCAnSScpCisjZGVmaW5lIEtfRjI5CQlURVJNQ0FQMktFWSgnRicsICdKJykKKyNkZWZpbmUgS19GMzAJCVRFUk1DQVAyS0VZKCdGJywgJ0snKQorCisjZGVmaW5lIEtfRjMxCQlURVJNQ0FQMktFWSgnRicsICdMJykKKyNkZWZpbmUgS19GMzIJCVRFUk1DQVAyS0VZKCdGJywgJ00nKQorI2RlZmluZSBLX0YzMwkJVEVSTUNBUDJLRVkoJ0YnLCAnTicpCisjZGVmaW5lIEtfRjM0CQlURVJNQ0FQMktFWSgnRicsICdPJykKKyNkZWZpbmUgS19GMzUJCVRFUk1DQVAyS0VZKCdGJywgJ1AnKQorI2RlZmluZSBLX0YzNgkJVEVSTUNBUDJLRVkoJ0YnLCAnUScpCisjZGVmaW5lIEtfRjM3CQlURVJNQ0FQMktFWSgnRicsICdSJykKKworLyogZXh0cmEgc2V0IG9mIHNoaWZ0ZWQgZnVuY3Rpb24ga2V5cyBGMS1GNCwgZm9yIHZ0MTAwIGNvbXBhdGlibGUgeHRlcm0gKi8KKyNkZWZpbmUgS19TX1hGMQkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfWEYxKQorI2RlZmluZSBLX1NfWEYyCQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19YRjIpCisjZGVmaW5lIEtfU19YRjMJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX1hGMykKKyNkZWZpbmUgS19TX1hGNAkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfWEY0KQorCisjZGVmaW5lIEtfU19GMQkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfRjEpCS8qIHNoaWZ0ZWQgZnVuYy4ga2V5cyAqLworI2RlZmluZSBLX1NfRjIJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YyKQorI2RlZmluZSBLX1NfRjMJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YzKQorI2RlZmluZSBLX1NfRjQJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0Y0KQorI2RlZmluZSBLX1NfRjUJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0Y1KQorI2RlZmluZSBLX1NfRjYJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0Y2KQorI2RlZmluZSBLX1NfRjcJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0Y3KQorI2RlZmluZSBLX1NfRjgJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0Y4KQorI2RlZmluZSBLX1NfRjkJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0Y5KQorI2RlZmluZSBLX1NfRjEwCQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19GMTApCisKKyNkZWZpbmUgS19TX0YxMQkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfRjExKQorI2RlZmluZSBLX1NfRjEyCQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19GMTIpCisjZGVmaW5lIEtfU19GMTMJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YxMykKKyNkZWZpbmUgS19TX0YxNAkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfRjE0KQorI2RlZmluZSBLX1NfRjE1CQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19GMTUpCisjZGVmaW5lIEtfU19GMTYJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YxNikKKyNkZWZpbmUgS19TX0YxNwkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfRjE3KQorI2RlZmluZSBLX1NfRjE4CQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19GMTgpCisjZGVmaW5lIEtfU19GMTkJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YxOSkKKyNkZWZpbmUgS19TX0YyMAkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfRjIwKQorCisjZGVmaW5lIEtfU19GMjEJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YyMSkKKyNkZWZpbmUgS19TX0YyMgkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfRjIyKQorI2RlZmluZSBLX1NfRjIzCQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19GMjMpCisjZGVmaW5lIEtfU19GMjQJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YyNCkKKyNkZWZpbmUgS19TX0YyNQkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfRjI1KQorI2RlZmluZSBLX1NfRjI2CQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19GMjYpCisjZGVmaW5lIEtfU19GMjcJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YyNykKKyNkZWZpbmUgS19TX0YyOAkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfRjI4KQorI2RlZmluZSBLX1NfRjI5CQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19GMjkpCisjZGVmaW5lIEtfU19GMzAJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YzMCkKKworI2RlZmluZSBLX1NfRjMxCQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19GMzEpCisjZGVmaW5lIEtfU19GMzIJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YzMikKKyNkZWZpbmUgS19TX0YzMwkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfRjMzKQorI2RlZmluZSBLX1NfRjM0CQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19GMzQpCisjZGVmaW5lIEtfU19GMzUJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TX0YzNSkKKyNkZWZpbmUgS19TX0YzNgkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1NfRjM2KQorI2RlZmluZSBLX1NfRjM3CQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU19GMzcpCisKKyNkZWZpbmUgS19IRUxQCQlURVJNQ0FQMktFWSgnJScsICcxJykKKyNkZWZpbmUgS19VTkRPCQlURVJNQ0FQMktFWSgnJicsICc4JykKKworI2RlZmluZSBLX0JTCQlURVJNQ0FQMktFWSgnaycsICdiJykKKworI2RlZmluZSBLX0lOUwkJVEVSTUNBUDJLRVkoJ2snLCAnSScpCisjZGVmaW5lIEtfS0lOUwkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX0tJTlMpCisjZGVmaW5lIEtfREVMCQlURVJNQ0FQMktFWSgnaycsICdEJykKKyNkZWZpbmUgS19LREVMCQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfS0RFTCkKKyNkZWZpbmUgS19IT01FCQlURVJNQ0FQMktFWSgnaycsICdoJykKKyNkZWZpbmUgS19LSE9NRQkJVEVSTUNBUDJLRVkoJ0snLCAnMScpCS8qIGtleXBhZCBob21lICh1cHBlciBsZWZ0KSAqLworI2RlZmluZSBLX1hIT01FCQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfWEhPTUUpCisjZGVmaW5lIEtfRU5ECQlURVJNQ0FQMktFWSgnQCcsICc3JykKKyNkZWZpbmUgS19LRU5ECQlURVJNQ0FQMktFWSgnSycsICc0JykJLyoga2V5cGFkIGVuZCAobG93ZXIgbGVmdCkgKi8KKyNkZWZpbmUgS19YRU5ECQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfWEVORCkKKyNkZWZpbmUgS19QQUdFVVAJVEVSTUNBUDJLRVkoJ2snLCAnUCcpCisjZGVmaW5lIEtfUEFHRURPV04JVEVSTUNBUDJLRVkoJ2snLCAnTicpCisjZGVmaW5lIEtfS1BBR0VVUAlURVJNQ0FQMktFWSgnSycsICczJykJLyoga2V5cGFkIHBhZ2V1cCAodXBwZXIgUi4pICovCisjZGVmaW5lIEtfS1BBR0VET1dOCVRFUk1DQVAyS0VZKCdLJywgJzUnKQkvKiBrZXlwYWQgcGFnZWRvd24gKGxvd2VyIFIuKSAqLworCisjZGVmaW5lIEtfS1BMVVMJCVRFUk1DQVAyS0VZKCdLJywgJzYnKQkvKiBrZXlwYWQgcGx1cyAqLworI2RlZmluZSBLX0tNSU5VUwlURVJNQ0FQMktFWSgnSycsICc3JykJLyoga2V5cGFkIG1pbnVzICovCisjZGVmaW5lIEtfS0RJVklERQlURVJNQ0FQMktFWSgnSycsICc4JykJLyoga2V5cGFkIC8gKi8KKyNkZWZpbmUgS19LTVVMVElQTFkJVEVSTUNBUDJLRVkoJ0snLCAnOScpCS8qIGtleXBhZCAqICovCisjZGVmaW5lIEtfS0VOVEVSCVRFUk1DQVAyS0VZKCdLJywgJ0EnKQkvKiBrZXlwYWQgRW50ZXIgKi8KKyNkZWZpbmUgS19LUE9JTlQJVEVSTUNBUDJLRVkoJ0snLCAnQicpCS8qIGtleXBhZCAuICovCisKKyNkZWZpbmUgS19LMAkJVEVSTUNBUDJLRVkoJ0snLCAnQycpCS8qIGtleXBhZCAwICovCisjZGVmaW5lIEtfSzEJCVRFUk1DQVAyS0VZKCdLJywgJ0QnKQkvKiBrZXlwYWQgMSAqLworI2RlZmluZSBLX0syCQlURVJNQ0FQMktFWSgnSycsICdFJykJLyoga2V5cGFkIDIgKi8KKyNkZWZpbmUgS19LMwkJVEVSTUNBUDJLRVkoJ0snLCAnRicpCS8qIGtleXBhZCAzICovCisjZGVmaW5lIEtfSzQJCVRFUk1DQVAyS0VZKCdLJywgJ0cnKQkvKiBrZXlwYWQgNCAqLworI2RlZmluZSBLX0s1CQlURVJNQ0FQMktFWSgnSycsICdIJykJLyoga2V5cGFkIDUgKi8KKyNkZWZpbmUgS19LNgkJVEVSTUNBUDJLRVkoJ0snLCAnSScpCS8qIGtleXBhZCA2ICovCisjZGVmaW5lIEtfSzcJCVRFUk1DQVAyS0VZKCdLJywgJ0onKQkvKiBrZXlwYWQgNyAqLworI2RlZmluZSBLX0s4CQlURVJNQ0FQMktFWSgnSycsICdLJykJLyoga2V5cGFkIDggKi8KKyNkZWZpbmUgS19LOQkJVEVSTUNBUDJLRVkoJ0snLCAnTCcpCS8qIGtleXBhZCA5ICovCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byByZWNvZ25pemUgYSBrZXlwYWQga2V5IHRoYXQgZG9lcyBoYXZlIGFuIEFTQ0lJIGVxdWl2YWxlbnQuCisgKiBTaW5jZSB0aGUgdmFsdWVzIGFyZSBuZWdhdGl2ZSwgaXQncyB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAqLworI2RlZmluZSBGSVJTVF9LRVlQQUQJS19LOQorI2RlZmluZSBMQVNUX0tFWVBBRAlLX0tQTFVTCisKKyNkZWZpbmUgS19NT1VTRQkJVEVSTUNBUDJLRVkoS1NfTU9VU0UsIEtFX0ZJTExFUikKKyNkZWZpbmUgS19NRU5VCQlURVJNQ0FQMktFWShLU19NRU5VLCBLRV9GSUxMRVIpCisjZGVmaW5lIEtfVkVSX1NDUk9MTEJBUglURVJNQ0FQMktFWShLU19WRVJfU0NST0xMQkFSLCBLRV9GSUxMRVIpCisjZGVmaW5lIEtfSE9SX1NDUk9MTEJBUiAgIFRFUk1DQVAyS0VZKEtTX0hPUl9TQ1JPTExCQVIsIEtFX0ZJTExFUikKKworI2RlZmluZSBLX05FVFRFUk1fTU9VU0UJVEVSTUNBUDJLRVkoS1NfTkVUVEVSTV9NT1VTRSwgS0VfRklMTEVSKQorI2RlZmluZSBLX0RFQ19NT1VTRQlURVJNQ0FQMktFWShLU19ERUNfTU9VU0UsIEtFX0ZJTExFUikKKyNkZWZpbmUgS19KU0JURVJNX01PVVNFCVRFUk1DQVAyS0VZKEtTX0pTQlRFUk1fTU9VU0UsIEtFX0ZJTExFUikKKyNkZWZpbmUgS19QVEVSTV9NT1VTRQlURVJNQ0FQMktFWShLU19QVEVSTV9NT1VTRSwgS0VfRklMTEVSKQorCisjZGVmaW5lIEtfU0VMRUNUCVRFUk1DQVAyS0VZKEtTX1NFTEVDVCwgS0VfRklMTEVSKQorI2RlZmluZSBLX1RFQVJPRkYJVEVSTUNBUDJLRVkoS1NfVEVBUk9GRiwgS0VfRklMTEVSKQorCisvKgorICogU3ltYm9scyBmb3IgcHNldWRvIGtleXMgd2hpY2ggYXJlIHRyYW5zbGF0ZWQgZnJvbSB0aGUgcmVhbCBrZXkgc3ltYm9scworICogYWJvdmUuCisgKi8KKyNkZWZpbmUgS19MRUZUTU9VU0UJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX0xFRlRNT1VTRSkKKyNkZWZpbmUgS19MRUZUTU9VU0VfTk0JVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX0xFRlRNT1VTRV9OTSkKKyNkZWZpbmUgS19MRUZURFJBRwlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfTEVGVERSQUcpCisjZGVmaW5lIEtfTEVGVFJFTEVBU0UJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX0xFRlRSRUxFQVNFKQorI2RlZmluZSBLX0xFRlRSRUxFQVNFX05NIFRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9MRUZUUkVMRUFTRV9OTSkKKyNkZWZpbmUgS19NSURETEVNT1VTRQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfTUlERExFTU9VU0UpCisjZGVmaW5lIEtfTUlERExFRFJBRwlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfTUlERExFRFJBRykKKyNkZWZpbmUgS19NSURETEVSRUxFQVNFCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9NSURETEVSRUxFQVNFKQorI2RlZmluZSBLX1JJR0hUTU9VU0UJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1JJR0hUTU9VU0UpCisjZGVmaW5lIEtfUklHSFREUkFHCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9SSUdIVERSQUcpCisjZGVmaW5lIEtfUklHSFRSRUxFQVNFCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9SSUdIVFJFTEVBU0UpCisjZGVmaW5lIEtfWDFNT1VTRSAgICAgICBURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfWDFNT1VTRSkKKyNkZWZpbmUgS19YMU1PVVNFICAgICAgIFRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9YMU1PVVNFKQorI2RlZmluZSBLX1gxRFJBRwlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfWDFEUkFHKQorI2RlZmluZSBLX1gxUkVMRUFTRSAgICAgVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1gxUkVMRUFTRSkKKyNkZWZpbmUgS19YMk1PVVNFICAgICAgIFRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9YMk1PVVNFKQorI2RlZmluZSBLX1gyRFJBRwlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfWDJEUkFHKQorI2RlZmluZSBLX1gyUkVMRUFTRSAgICAgVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX1gyUkVMRUFTRSkKKworI2RlZmluZSBLX0lHTk9SRQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfSUdOT1JFKQorCisjZGVmaW5lIEtfU05JRkYJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9TTklGRikKKworI2RlZmluZSBLX01PVVNFRE9XTglURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfTU9VU0VET1dOKQorI2RlZmluZSBLX01PVVNFVVAJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX01PVVNFVVApCisKKyNkZWZpbmUgS19DU0kJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9DU0kpCisjZGVmaW5lIEtfU05SCQlURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfU05SKQorI2RlZmluZSBLX1BMVUcJCVRFUk1DQVAyS0VZKEtTX0VYVFJBLCBLRV9QTFVHKQorI2RlZmluZSBLX0NNRFdJTglURVJNQ0FQMktFWShLU19FWFRSQSwgS0VfQ01EV0lOKQorCisjZGVmaW5lIEtfRFJPUAkJVEVSTUNBUDJLRVkoS1NfRVhUUkEsIEtFX0RST1ApCisKKy8qIEJpdHMgZm9yIG1vZGlmaWVyIG1hc2sgKi8KKy8qIDB4MDEgY2Fubm90IGJlIHVzZWQsIGJlY2F1c2UgdGhlIG1vZGlmaWVyIG11c3QgYmUgMHgwMiBvciBoaWdoZXIgKi8KKyNkZWZpbmUgTU9EX01BU0tfU0hJRlQJICAgIDB4MDIKKyNkZWZpbmUgTU9EX01BU0tfQ1RSTAkgICAgMHgwNAorI2RlZmluZSBNT0RfTUFTS19BTFQJICAgIDB4MDgJLyogYWthIE1FVEEgKi8KKyNkZWZpbmUgTU9EX01BU0tfMkNMSUNLCSAgICAweDEwCS8qIHVzZSBNT0RfTUFTS19NVUxUSV9DTElDSyAqLworI2RlZmluZSBNT0RfTUFTS18zQ0xJQ0sJICAgIDB4MjAJLyogdXNlIE1PRF9NQVNLX01VTFRJX0NMSUNLICovCisjZGVmaW5lIE1PRF9NQVNLXzRDTElDSwkgICAgMHgzMAkvKiB1c2UgTU9EX01BU0tfTVVMVElfQ0xJQ0sgKi8KKyNpZmRlZiBNQUNPUworIyBkZWZpbmUgTU9EX01BU0tfQ01ECSAgICAgMHg4MAorI2VuZGlmCisKKyNkZWZpbmUgTU9EX01BU0tfTVVMVElfQ0xJQ0sJKE1PRF9NQVNLXzJDTElDS3xNT0RfTUFTS18zQ0xJQ0t8TU9EX01BU0tfNENMSUNLKQorCisvKgorICogVGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBzcGVjaWFsIGtleSBuYW1lLCBpbmNsdWRpbmcgbW9kaWZpZXJzLgorICogQ3VycmVudCBsb25nZXN0IGlzIDxNLUMtUy00LU1pZGRsZVJlbGVhc2U+IChsZW5ndGggaW5jbHVkZXMgJzwnIGFuZCAnPicpLgorICovCisjZGVmaW5lIE1BWF9LRVlfTkFNRV9MRU4gICAgMjMKKworLyogTWF4aW11bSBsZW5ndGggb2YgYSBzcGVjaWFsIGtleSBldmVudCBhcyB0b2tlbnMuICBUaGlzIGluY2x1ZGVzIG1vZGlmaWVycy4KKyAqIFRoZSBsb25nZXN0IGV2ZW50IGlzIHNvbWV0aGluZyBsaWtlIDxNLUMtUy00LUxlZnREcmFnPiB3aGljaCB3b3VsZCBiZSB0aGUKKyAqIGZvbGxvd2luZyBzdHJpbmcgb2YgdG9rZW5zOgorICoKKyAqIDxLX1NQRUNJQUw+IDxLU19NT0RJRklFUj4gYml0bWFzayA8S19TUEVDSUFMPiA8S1NfRVhUUkE+IDxLVF9MRUZURFJBRz4uCisgKgorICogVGhpcyBpcyBhIHRvdGFsIG9mIDYgdG9rZW5zLCBhbmQgaXMgY3VycmVudGx5IHRoZSBsb25nZXN0IG9uZSBwb3NzaWJsZS4KKyAqLworI2RlZmluZSBNQVhfS0VZX0NPREVfTEVOICAgIDYKZGlmZiAtLWdpdCBhL3NyYy9saW5rLjM5MCBiL3NyYy9saW5rLjM5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmVkYzA0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2xpbmsuMzkwCkBAIC0wLDAgKzEsNyBAQAorcyUtbFhleHQgIColJWcKK3MlLWxYbXUgIColJWcKK3MlLWxYbSAgKiUvdXNyL2xpYi9YbS54ICVnCitzJS1sWDExICAqJS91c3IvbGliL1gxMS54ICVnCitzJS1sWHQgIColJWcKK3MlLWxTTSAgKiUvdXNyL2xpYi9TTS54ICVnCitzJS1sSUNFICAqJS91c3IvbGliL0lDRS54ICVnCmRpZmYgLS1naXQgYS9zcmMvbGluay5zaCBiL3NyYy9saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjOWM0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbGluay5zaApAQCAtMCwwICsxLDEzNiBAQAorIyEgL2Jpbi9zaAorIworIyBsaW5rLnNoIC0tIHRyeSBsaW5raW5nIFZpbSB3aXRoIGRpZmZlcmVudCBzZXRzIG9mIGxpYnJhcmllcywgZmluZGluZyB0aGUKKyMgbWluaW1hbCBzZXQgZm9yIGZhc3Rlc3Qgc3RhcnR1cC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgY29uZmlndXJlIGFkZHMgYSBmZXcKKyMgbGlicmFyaWVzIHdoZW4gdGhleSBleGlzdCwgYnV0IHRoaXMgZG9lc24ndCBtZWFuIHRoZXkgYXJlIG5lZWRlZCBmb3IgVmltLgorIworIyAgICAgIEF1dGhvcjogQnJhbSBNb29sZW5hYXIKKyMgTGFzdCBjaGFuZ2U6IDIwMDQgQXByIDA1CisjCisjIFdhcm5pbmc6IFRoaXMgZmFpbHMgbWlzZXJhYmx5IGlmIHRoZSBsaW5rZXIgZG9lc24ndCByZXR1cm4gYW4gZXJyb3IgY29kZSEKKyMKKyMgT3RoZXJ3aXNlIHRoaXMgc2NyaXB0IGlzIGZhaWwtc2FmZSwgZmFsbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBmdWxsIGxpbmsKKyMgY29tbWFuZCBpZiBhbnl0aGluZyBmYWlscy4KKworZWNobyAiJExJTksgIiA+bGluay5jbWQKK2V4aXRfdmFsdWU9MAorCisjCisjIElmIGF1dG8vbGluay5zZWQgYWxyZWFkeSBleGlzdHMsIHVzZSBpdC4gIFdlIGFzc3VtZSBhIHByZXZpb3VzIHJ1biBvZgorIyBsaW5rLnNoIGhhcyBmb3VuZCB0aGUgY29ycmVjdCBzZXQgb2YgbGlicmFyaWVzLgorIworaWYgdGVzdCAtZiBhdXRvL2xpbmsuc2VkOyB0aGVuCisgIGVjaG8gImxpbmsuc2g6IFRoZSBmaWxlICdhdXRvL2xpbmsuc2VkJyBleGlzdHMsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgbm93LiIKKyAgZWNobyAibGluay5zaDogSWYgbGlua2luZyBmYWlscywgdHJ5IGRlbGV0aW5nIHRoZSBhdXRvL2xpbmsuc2VkIGZpbGUuIgorICBlY2hvICJsaW5rLnNoOiBJZiB0aGlzIGZhaWxzIHRvbywgdHJ5IGNyZWF0aW5nIGFuIGVtcHR5IGF1dG8vbGluay5zZWQgZmlsZS4iCitlbHNlCisKKyMgSWYgbGlua2luZyB3b3JrcyB3aXRoIHRoZSBmdWxsIGxpbmsgY29tbWFuZCwgdHJ5IHJlbW92aW5nIHNvbWUgbGlicmFyaWVzLAorIyB0aGF0IGFyZSBrbm93biBub3QgdG8gYmUgbmVlZGVkIG9uIGF0IGxlYXN0IG9uZSBzeXN0ZW0uCisjIFJlbW92ZSBhdXRvL3BhdGhkZWYuYyBpZiB0aGVyZSBpcyBhIG5ldyBsaW5rIGNvbW1hbmQgYW5kIGNvbXBpbGUgaXQgYWdhaW4uCisjIFRoZXJlIGlzIGEgbG9vcCB0byByZW1vdmUgbGlicmFyaWVzIHRoYXQgYXBwZWFyIHNldmVyYWwgdGltZXMuCisjCisjIE5vdGVzOgorIyAtIENhbid0IHJlbW92ZSBYZXh0OyBJdCBsaW5rcyBmaW5lIGJ1dCB3aWxsIGdpdmUgYW4gZXJyb3Igd2hlbiBydW5uaW5nIGd2aW0KKyMgICB3aXRoIE1vdGlmLgorIyAtIERvbid0IHJlbW92ZSB0aGUgbGFzdCAtbG06IE9uIEhQLVVYIFZpbSBsaW5rcyBPSyBidXQgY3Jhc2hlcyB3aGVuIHRoZSBHVEsKKyMgICBHVUkgaXMgc3RhcnRlZCwgYmVjYXVzZSB0aGUgImZsb29yIiBzeW1ib2wgY291bGQgbm90IGJlIHJlc29sdmVkLgorIworICBjYXQgbGluay5jbWQKKyAgaWYgc2ggbGluay5jbWQ7IHRoZW4KKyAgICB0b3VjaCBhdXRvL2xpbmsuc2VkCisgICAgY3AgbGluay5jbWQgbGlua2l0LnNoCisgICAgZm9yIGxpYm5hbWUgaW4gU00gSUNFIG5zbCBkbmV0IGRuZXRfc3R1YiBpbmV0IHNvY2tldCBkaXIgZWxmIGljb252IFh0IFhtdSBYcCBYcG0gWDExIFhkbWNwIHggdyBkbCBwdGhyZWFkIHRocmVhZCByZWFkbGluZSBtIHBlcmwgY3J5cHQgYXR0cjsgZG8KKyAgICAgIGNvbnQ9eWVzCisgICAgICB3aGlsZSB0ZXN0IC1uICIkY29udCI7IGRvCisgICAgICAgIGlmIGdyZXAgImwkbGlibmFtZSAiIGxpbmtpdC5zaCA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAhIC1mIGxpbmsxLnNlZDsgdGhlbgorICAgICAgICAgICAgZWNobyAibGluay5zaDogT0ssIGxpbmtpbmcgd29ya3MsIGxldCdzIHRyeSByZW1vdmluZyBhIGZldyBsaWJyYXJpZXMuIgorICAgICAgICAgICAgZWNobyAibGluay5zaDogU2VlIGF1dG8vbGluay5sb2cgZm9yIGRldGFpbHMuIgorICAgICAgICAgICAgcm0gLWYgYXV0by9saW5rLmxvZworICAgICAgICAgIGZpCisgICAgICAgICAgZWNobyAicy8tbCRsaWJuYW1lICAqLy8iID5saW5rMS5zZWQKKyAgICAgICAgICBzZWQgLWYgYXV0by9saW5rLnNlZCA8bGluay5jbWQgPmxpbmtpdDIuc2gKKyAgICAgICAgICBzZWQgLWYgbGluazEuc2VkIDxsaW5raXQyLnNoID5saW5raXQuc2gKKyAgICAgICAgICAjIGtlZXAgdGhlIGxhc3QgLWxtCisgICAgICAgICAgaWYgdGVzdCAkbGlibmFtZSAhPSAibSIgfHwgZ3JlcCAibG0gIiBsaW5raXQuc2ggPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgZWNobyAibGluay5zaDogVHJ5aW5nIHRvIHJlbW92ZSB0aGUgJGxpYm5hbWUgbGlicmFyeS4uLiIKKyAgICAgICAgICAgIGNhdCBsaW5raXQuc2ggPj5hdXRvL2xpbmsubG9nCisgICAgICAgICAgICAjIFJlZGlyZWN0IHRoaXMgbGluayBvdXRwdXQsIGl0IG1heSBjb250YWluIGVycm9yIG1lc3NhZ2VzIHdoaWNoCisgICAgICAgICAgICAjIHNob3VsZCBiZSBpZ25vcmVkLgorICAgICAgICAgICAgaWYgc2ggbGlua2l0LnNoID4+YXV0by9saW5rLmxvZyAyPiYxOyB0aGVuCisgICAgICAgICAgICAgIGVjaG8gImxpbmsuc2g6IFdlIGRvbid0IG5lZWQgdGhlICRsaWJuYW1lIGxpYnJhcnkhIgorICAgICAgICAgICAgICBjYXQgbGluazEuc2VkID4+YXV0by9saW5rLnNlZAorICAgICAgICAgICAgICBybSAtZiBhdXRvL3BhdGhkZWYuYworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBlY2hvICJsaW5rLnNoOiBXZSBETyBuZWVkIHRoZSAkbGlibmFtZSBsaWJyYXJ5LiIKKyAgICAgICAgICAgICAgY29udD0KKyAgICAgICAgICAgICAgY3AgbGluay5jbWQgbGlua2l0LnNoCisgICAgICAgICAgICBmaQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbnQ9CisgICAgICAgICAgICBjcCBsaW5rLmNtZCBsaW5raXQuc2gKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgY29udD0KKyAgICAgICAgICBjcCBsaW5rLmNtZCBsaW5raXQuc2gKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgaWYgdGVzdCAhIC1mIGF1dG8vcGF0aGRlZi5jOyB0aGVuCisgICAgICAkTUFLRSBvYmplY3RzL3BhdGhkZWYubworICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIGxpbmsxLnNlZDsgdGhlbgorICAgICAgZWNobyAibGluay5zaDogTGlua2VkIGZpbmUsIG5vIGxpYnJhcmllcyBjYW4gYmUgcmVtb3ZlZCIKKyAgICAgIHRvdWNoIGxpbmszLnNlZAorICAgIGZpCisgIGVsc2UKKyAgICBleGl0X3ZhbHVlPSQ/CisgIGZpCitmaQorCisjCisjIE5vdyBkbyB0aGUgcmVhbCBsaW5raW5nLgorIworaWYgdGVzdCAtcyBhdXRvL2xpbmsuc2VkOyB0aGVuCisgIGVjaG8gImxpbmsuc2g6IFVzaW5nIGF1dG8vbGluay5zZWQgZmlsZSB0byByZW1vdmUgYSBmZXcgbGlicmFyaWVzIgorICBzZWQgLWYgYXV0by9saW5rLnNlZCA8bGluay5jbWQgPmxpbmtpdC5zaAorICBjYXQgbGlua2l0LnNoCisgIGlmIHNoIGxpbmtpdC5zaDsgdGhlbgorICAgIGV4aXRfdmFsdWU9MAorICAgIGVjaG8gImxpbmsuc2g6IExpbmtlZCBmaW5lIHdpdGggYSBmZXcgbGlicmFyaWVzIHJlbW92ZWQiCisgIGVsc2UKKyAgICBleGl0X3ZhbHVlPSQ/CisgICAgZWNobyAibGluay5zaDogTGlua2luZyBmYWlsZWQsIG1ha2luZyBhdXRvL2xpbmsuc2VkIGVtcHR5IGFuZCB0cnlpbmcgYWdhaW4iCisgICAgbXYgLWYgYXV0by9saW5rLnNlZCBsaW5rMi5zZWQKKyAgICB0b3VjaCBhdXRvL2xpbmsuc2VkCisgICAgcm0gLWYgYXV0by9wYXRoZGVmLmMKKyAgICAkTUFLRSBvYmplY3RzL3BhdGhkZWYubworICBmaQorZmkKK2lmIHRlc3QgLWYgYXV0by9saW5rLnNlZCAtYSAhIC1zIGF1dG8vbGluay5zZWQgLWEgISAtZiBsaW5rMy5zZWQ7IHRoZW4KKyAgZWNobyAibGluay5zaDogVXNpbmcgdW5tb2RpZmllZCBsaW5rIGNvbW1hbmQiCisgIGNhdCBsaW5rLmNtZAorICBpZiBzaCBsaW5rLmNtZDsgdGhlbgorICAgIGV4aXRfdmFsdWU9MAorICAgIGVjaG8gImxpbmsuc2g6IExpbmtlZCBPSyIKKyAgZWxzZQorICAgIGV4aXRfdmFsdWU9JD8KKyAgICBpZiB0ZXN0IC1mIGxpbmsyLnNlZDsgdGhlbgorICAgICAgZWNobyAibGluay5zaDogTGlua2luZyBkb2Vzbid0IHdvcmsgYXQgYWxsLCByZW1vdmluZyBhdXRvL2xpbmsuc2VkIgorICAgICAgcm0gLWYgYXV0by9saW5rLnNlZAorICAgIGZpCisgIGZpCitmaQorCisjCisjIGNsZWFudXAKKyMKK3JtIC1mIGxpbmsuY21kIGxpbmtpdC5zaCBsaW5rMS5zZWQgbGluazIuc2VkIGxpbmszLnNlZCBsaW5raXQyLnNoCisKKyMKKyMgcmV0dXJuIGFuIGVycm9yIGNvZGUgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcKKyMKK2V4aXQgJGV4aXRfdmFsdWUKKworIyB2aW06c2V0IHN3PTIgZXQ6CmRpZmYgLS1naXQgYS9zcmMvbWFjcm9zLmggYi9zcmMvbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRiYjM5MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWNyb3MuaApAQCAtMCwwICsxLDI0NSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworLyoKKyAqIG1hY3Jvcy5oOiBtYWNybyBkZWZpbml0aW9ucyBmb3Igb2Z0ZW4gdXNlZCBjb2RlCisgKi8KKworLyoKKyAqIHBjaGFyKGxwLCBjKSAtIHB1dCBjaGFyYWN0ZXIgJ2MnIGF0IHBvc2l0aW9uICdscCcKKyAqLworI2RlZmluZSBwY2hhcihscCwgYykgKCoobWxfZ2V0X2J1ZihjdXJidWYsIChscCkubG51bSwgVFJVRSkgKyAobHApLmNvbCkgPSAoYykpCisKKy8qCisgKiBQb3NpdGlvbiBjb21wYXJpc29ucworICovCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorIyBkZWZpbmUgbHQoYSwgYikgKCgoYSkubG51bSAhPSAoYikubG51bSkgXAorCQkgICA/IChhKS5sbnVtIDwgKGIpLmxudW0gXAorCQkgICA6IChhKS5jb2wgIT0gKGIpLmNvbCBcCisJCSAgICAgICA/IChhKS5jb2wgPCAoYikuY29sIFwKKwkJICAgICAgIDogKGEpLmNvbGFkZCA8IChiKS5jb2xhZGQpCisjIGRlZmluZSBsdHAoYSwgYikgKCgoYSktPmxudW0gIT0gKGIpLT5sbnVtKSBcCisJCSAgID8gKGEpLT5sbnVtIDwgKGIpLT5sbnVtIFwKKwkJICAgOiAoYSktPmNvbCAhPSAoYiktPmNvbCBcCisJCSAgICAgICA/IChhKS0+Y29sIDwgKGIpLT5jb2wgXAorCQkgICAgICAgOiAoYSktPmNvbGFkZCA8IChiKS0+Y29sYWRkKQorIyBkZWZpbmUgZXF1YWxwb3MoYSwgYikgKCgoYSkubG51bSA9PSAoYikubG51bSkgJiYgKChhKS5jb2wgPT0gKGIpLmNvbCkgJiYgKChhKS5jb2xhZGQgPT0gKGIpLmNvbGFkZCkpCisjZWxzZQorIyBkZWZpbmUgbHQoYSwgYikgKCgoYSkubG51bSAhPSAoYikubG51bSkgXAorCQkgICA/ICgoYSkubG51bSA8IChiKS5sbnVtKSA6ICgoYSkuY29sIDwgKGIpLmNvbCkpCisjIGRlZmluZSBsdHAoYSwgYikgKCgoYSktPmxudW0gIT0gKGIpLT5sbnVtKSBcCisJCSAgID8gKChhKS0+bG51bSA8IChiKS0+bG51bSkgOiAoKGEpLT5jb2wgPCAoYiktPmNvbCkpCisjIGRlZmluZSBlcXVhbHBvcyhhLCBiKSAoKChhKS5sbnVtID09IChiKS5sbnVtKSAmJiAoKGEpLmNvbCA9PSAoYikuY29sKSkKKyNlbmRpZgorCisjZGVmaW5lIGx0b3JlcShhLCBiKSAobHQoYSwgYikgfHwgZXF1YWxwb3MoYSwgYikpCisKKy8qCisgKiBsaW5lZW1wdHkoKSAtIHJldHVybiBUUlVFIGlmIHRoZSBsaW5lIGlzIGVtcHR5CisgKi8KKyNkZWZpbmUgbGluZWVtcHR5KHApICgqbWxfZ2V0KHApID09IE5VTCkKKworLyoKKyAqIGJ1ZmVtcHR5KCkgLSByZXR1cm4gVFJVRSBpZiB0aGUgY3VycmVudCBidWZmZXIgaXMgZW1wdHkKKyAqLworI2RlZmluZSBidWZlbXB0eSgpIChjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCA9PSAxICYmICptbF9nZXQoKGxpbmVucl9UKTEpID09IE5VTCkKKworLyoKKyAqIHRvdXBwZXIoKSBhbmQgdG9sb3dlcigpIHRoYXQgdXNlIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAqIE9uIHNvbWUgc3lzdGVtcyB0b3VwcGVyKCkvdG9sb3dlcigpIG9ubHkgd29yayBvbiBsb3dlci91cHBlcmNhc2UgY2hhcmFjdGVycworICogQ2FyZWZ1bDogT25seSBjYWxsIFRPVVBQRVJfTE9DKCkgYW5kIFRPTE9XRVJfTE9DKCkgd2l0aCBhIGNoYXJhY3RlciBpbiB0aGUKKyAqIHJhbmdlIDAgLSAyNTUuICB0b3VwcGVyKCkvdG9sb3dlcigpIG9uIHNvbWUgc3lzdGVtcyBjYW4ndCBoYW5kbGUgb3RoZXJzLgorICogTm90ZTogZm9yIFVURi04IHVzZSB1dGZfdG91cHBlcigpIGFuZCB1dGZfdG9sb3dlcigpLgorICovCisjaWZkZWYgTVNXSU4KKyMgIGRlZmluZSBUT1VQUEVSX0xPQyhjKQl0b3VwcGVyX3RhYlsoYykgJiAyNTVdCisjICBkZWZpbmUgVE9MT1dFUl9MT0MoYykJdG9sb3dlcl90YWJbKGMpICYgMjU1XQorI2Vsc2UKKyMgaWZkZWYgQlJPS0VOX1RPVVBQRVIKKyMgIGRlZmluZSBUT1VQUEVSX0xPQyhjKQkoaXNsb3dlcihjKSA/IHRvdXBwZXIoYykgOiAoYykpCisjICBkZWZpbmUgVE9MT1dFUl9MT0MoYykJKGlzdXBwZXIoYykgPyB0b2xvd2VyKGMpIDogKGMpKQorIyBlbHNlCisjICBkZWZpbmUgVE9VUFBFUl9MT0MJCXRvdXBwZXIKKyMgIGRlZmluZSBUT0xPV0VSX0xPQwkJdG9sb3dlcgorIyBlbmRpZgorI2VuZGlmCisKKy8qIHRvdXBwZXIoKSBhbmQgdG9sb3dlcigpIGZvciBBU0NJSSBvbmx5IGFuZCBpZ25vcmUgdGhlIGN1cnJlbnQgbG9jYWxlLiAqLworI2lmZGVmIEVCQ0RJQworIyBkZWZpbmUgVE9VUFBFUl9BU0MoYykJKGlzbG93ZXIoYykgPyB0b3VwcGVyKGMpIDogKGMpKQorIyBkZWZpbmUgVE9MT1dFUl9BU0MoYykJKGlzdXBwZXIoYykgPyB0b2xvd2VyKGMpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIFRPVVBQRVJfQVNDKGMpCSgoKGMpIDwgJ2EnIHx8IChjKSA+ICd6JykgPyAoYykgOiAoYykgLSAoJ2EnIC0gJ0EnKSkKKyMgZGVmaW5lIFRPTE9XRVJfQVNDKGMpCSgoKGMpIDwgJ0EnIHx8IChjKSA+ICdaJykgPyAoYykgOiAoYykgKyAoJ2EnIC0gJ0EnKSkKKyNlbmRpZgorCisvKgorICogTUJfSVNMT1dFUigpIGFuZCBNQl9JU1VQUEVSKCkgYXJlIHRvIGJlIHVzZWQgb24gbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAgQnV0CisgKiBkb24ndCB1c2UgdGhlbSBmb3IgbmVnYXRpdmUgdmFsdWVzLgorICovCisjaWZkZWYgRkVBVF9NQllURQorIyBkZWZpbmUgTUJfSVNMT1dFUihjKQkoZW5jX3V0ZjggJiYgKGMpID4gMHg4MCA/IHV0Zl9pc2xvd2VyKGMpIDogKGhhc19tYnl0ZSAmJiBjID4gMjU1ID8gRkFMU0UgOiBpc2xvd2VyKGMpKSkKKyMgZGVmaW5lIE1CX0lTVVBQRVIoYykJKGVuY191dGY4ICYmIChjKSA+IDB4ODAgPyB1dGZfaXN1cHBlcihjKSA6IChoYXNfbWJ5dGUgJiYgYyA+IDI1NSA/IEZBTFNFIDogaXN1cHBlcihjKSkpCisjIGRlZmluZSBNQl9UT0xPV0VSKGMpCShlbmNfdXRmOCAmJiAoYykgPiAweDgwID8gdXRmX3RvbG93ZXIoYykgOiAoaGFzX21ieXRlICYmIGMgPiAyNTUgPyBjIDogVE9MT1dFUl9MT0MoYykpKQorIyBkZWZpbmUgTUJfVE9VUFBFUihjKQkoZW5jX3V0ZjggJiYgKGMpID4gMHg4MCA/IHV0Zl90b3VwcGVyKGMpIDogKGhhc19tYnl0ZSAmJiBjID4gMjU1ID8gYyA6IFRPVVBQRVJfTE9DKGMpKSkKKyNlbHNlCisjIGRlZmluZSBNQl9JU0xPV0VSKGMpCWlzbG93ZXIoYykKKyMgZGVmaW5lIE1CX0lTVVBQRVIoYykJaXN1cHBlcihjKQorIyBkZWZpbmUgTUJfVE9MT1dFUihjKQlUT0xPV0VSX0xPQyhjKQorIyBkZWZpbmUgTUJfVE9VUFBFUihjKQlUT1VQUEVSX0xPQyhjKQorI2VuZGlmCisKKy8qIExpa2UgaXNhbHBoYSgpIGJ1dCByZWplY3Qgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuICBDYW4ndCBiZSB1c2VkIHdpdGggYQorICogc3BlY2lhbCBrZXkgKG5lZ2F0aXZlIHZhbHVlKS4gKi8KKyNpZmRlZiBFQkNESUMKKyMgZGVmaW5lIEFTQ0lJX0lTQUxQSEEoYykgaXNhbHBoYShjKQorIyBkZWZpbmUgQVNDSUlfSVNBTE5VTShjKSBpc2FsbnVtKGMpCisjIGRlZmluZSBBU0NJSV9JU0xPV0VSKGMpIGlzbG93ZXIoYykKKyMgZGVmaW5lIEFTQ0lJX0lTVVBQRVIoYykgaXN1cHBlcihjKQorI2Vsc2UKKyMgZGVmaW5lIEFTQ0lJX0lTQUxQSEEoYykgKChjKSA8IDB4N2YgJiYgaXNhbHBoYShjKSkKKyMgZGVmaW5lIEFTQ0lJX0lTQUxOVU0oYykgKChjKSA8IDB4N2YgJiYgaXNhbG51bShjKSkKKyMgZGVmaW5lIEFTQ0lJX0lTTE9XRVIoYykgKChjKSA8IDB4N2YgJiYgaXNsb3dlcihjKSkKKyMgZGVmaW5lIEFTQ0lJX0lTVVBQRVIoYykgKChjKSA8IDB4N2YgJiYgaXN1cHBlcihjKSkKKyNlbmRpZgorCisvKiBVc2Ugb3VyIG93biBpc2RpZ2l0KCkgcmVwbGFjZW1lbnQsIGJlY2F1c2Ugb24gTVMtV2luZG93cyBpc2RpZ2l0KCkgcmV0dXJucworICogbm9uLXplcm8gZm9yIHN1cGVyc2NyaXB0IDEuICBBbHNvIGF2b2lkcyB0aGF0IGlzZGlnaXQoKSBjcmFzaGVzIGZvciBudW1iZXJzCisgKiBiZWxvdyAwIGFuZCBhYm92ZSAyNTUuICBGb3IgY29tcGxpY2F0ZWQgYXJndW1lbnRzIGFuZCBpbi9kZWNyZW1lbnQgdXNlCisgKiB2aW1faXNkaWdpdCgpIGluc3RlYWQuICovCisjZGVmaW5lIFZJTV9JU0RJR0lUKGMpICgoYykgPj0gJzAnICYmIChjKSA8PSAnOScpCisKKy8qIG1hY3JvIHZlcnNpb24gb2YgY2hhcnRhYigpLgorICogT25seSB3b3JrcyB3aXRoIHZhbHVlcyAwLTI1NSEKKyAqIERvZXNuJ3Qgd29yayBmb3IgVVRGLTggbW9kZSB3aXRoIGNoYXJzID49IDB4ODAuICovCisjZGVmaW5lIENIQVJTSVpFKGMpCShjaGFydGFiW2NdICYgQ1RfQ0VMTF9NQVNLKQorCisjaWZkZWYgRkVBVF9MQU5HTUFQCisvKgorICogQWRqdXN0IGNoYXJzIGluIGEgbGFuZ3VhZ2UgYWNjb3JkaW5nIHRvICdsYW5nbWFwJyBvcHRpb24uCisgKiBOT1RFIHRoYXQgdGhlcmUgaXMgTk8gb3ZlcmhlYWQgaWYgJ2xhbmdtYXAnIGlzIG5vdCBzZXQ7IGJ1dCBldmVuCisgKiB3aGVuIHNldCB3ZSBvbmx5IGhhdmUgdG8gZG8gMiBpZnMgYW5kIGFuIGFycmF5IGxvb2t1cC4KKyAqIERvbid0IGFwcGx5ICdsYW5nbWFwJyBpZiB0aGUgY2hhcmFjdGVyIGNvbWVzIGZyb20gdGhlIFN0dWZmIGJ1ZmZlci4KKyAqIFRoZSBkby13aGlsZSBpcyBqdXN0IHRvIGlnbm9yZSBhICc7JyBhZnRlciB0aGUgbWFjcm8uCisgKi8KKyMgZGVmaW5lIExBTkdNQVBfQURKVVNUKGMsIGNvbmRpdGlvbikgZG8geyBcCisJaWYgKCpwX2xhbmdtYXAgJiYgKGNvbmRpdGlvbikgJiYgIUtleVN0dWZmZWQgJiYgKGMpID49IDAgJiYgKGMpIDwgMjU2KSBcCisJICAgIGMgPSBsYW5nbWFwX21hcGNoYXJbY107IFwKKyAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiB2aW1faXNicmVhaygpIGlzIHVzZWQgdmVyeSBvZnRlbiBpZiAnbGluZWJyZWFrJyBpcyBzZXQsIHVzZSBhIG1hY3JvIHRvIG1ha2UKKyAqIGl0IHdvcmsgZmFzdC4KKyAqLworI2RlZmluZSB2aW1faXNicmVhayhjKSAoYnJlYWthdF9mbGFnc1soY2hhcl91KShjKV0pCisKKy8qCisgKiBPbiBWTVMgZmlsZSBuYW1lcyBhcmUgZGlmZmVyZW50IGFuZCByZXF1aXJlIGEgdHJhbnNsYXRpb24uCisgKiBPbiB0aGUgTWFjIG9wZW4oKSBoYXMgb25seSB0d28gYXJndW1lbnRzLgorICovCisjaWZkZWYgVk1TCisjIGRlZmluZSBtY2hfYWNjZXNzKG4sIHApCWFjY2Vzcyh2bXNfZml4ZmlsZW5hbWUobiksIChwKSkKKwkJCQkvKiBzZWUgbWNoX29wZW4oKSBjb21tZW50ICovCisjIGRlZmluZSBtY2hfZm9wZW4obiwgcCkJZm9wZW4odm1zX2ZpeGZpbGVuYW1lKG4pLCAocCkpCisjIGRlZmluZSBtY2hfZnN0YXQobiwgcCkJZnN0YXQodm1zX2ZpeGZpbGVuYW1lKG4pLCAocCkpCisJLyogVk1TIGRvZXMgbm90IGhhdmUgbHN0YXQoKSAqLworIyBkZWZpbmUgbWNoX3N0YXQobiwgcCkJCXN0YXQodm1zX2ZpeGZpbGVuYW1lKG4pLCAocCkpCisjZWxzZQorIyBpZm5kZWYgV0lOMzIKKyMgICBkZWZpbmUgbWNoX2FjY2VzcyhuLCBwKQlhY2Nlc3MoKG4pLCAocCkpCisjIGVuZGlmCisjIGlmICEoZGVmaW5lZChGRUFUX01CWVRFKSAmJiBkZWZpbmVkKFdJTjMyNjQpKQorIyAgZGVmaW5lIG1jaF9mb3BlbihuLCBwKQlmb3BlbigobiksIChwKSkKKyMgZW5kaWYKKyMgZGVmaW5lIG1jaF9mc3RhdChuLCBwKQlmc3RhdCgobiksIChwKSkKKyMgZGVmaW5lIG1jaF9sc3RhdChuLCBwKQlsc3RhdCgobiksIChwKSkKKyMgaWZkZWYgTVNXSU4JLyogaGFzIGl0J3Mgb3duIG1jaF9zdGF0KCkgZnVuY3Rpb24gKi8KKyMgIGRlZmluZSBtY2hfc3RhdChuLCBwKQl2aW1fc3RhdCgobiksIChwKSkKKyMgZWxzZQorIyAgaWZkZWYgU1RBVF9JR05PUkVTX1NMQVNICisgICAgLyogT24gU29sYXJpcyBzdGF0KCkgYWNjZXB0cyAiZmlsZS8iIGFzIGlmIGl0IHdhcyAiZmlsZSIuICBSZXR1cm4gLTEgaWYKKyAgICAgKiB0aGUgbmFtZSBlbmRzIGluICIvIiBhbmQgaXQncyBub3QgYSBkaXJlY3RvcnkuICovCisjICAgZGVmaW5lIG1jaF9zdGF0KG4sIHApCShpbGxlZ2FsX3NsYXNoKG4pID8gLTEgOiBzdGF0KChuKSwgKHApKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgbWNoX3N0YXQobiwgcCkJc3RhdCgobiksIChwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIE1BQ09TX0NMQVNTSUMKKy8qIE1hY09TIGNsYXNzaWMgZG9lc24ndCBzdXBwb3J0IHBlcm0gYnV0IE1hY09TIFggZG9lcy4gKi8KKyMgZGVmaW5lIG1jaF9vcGVuKG4sIG0sIHApCW9wZW4oKG4pLCAobSkpCisjZWxzZQorIyBpZmRlZiBWTVMKKy8qCisgKiBJdCBpcyBwb3NzaWJsZSB0byBmb3JjZSBzb21lIHJlY29yZCBmb3JtYXQgd2l0aDoKKyAqICMgIGRlZmluZSBtY2hfb3BlbihuLCBtLCBwKSBvcGVuKHZtc19maXhmaWxlbmFtZShuKSwgKG0pLCAocCkpLCAicmF0PWNyIiwgInJmbT1zdG1sZiIsICJtcnM9MCIpCisgKiBidXQgaXQgaXMgbm90IHJlY29tZW5kZWQsIGJlY2F1c2UgaXQgY2FuIGRlc3Ryb3kgaW5kZXhlcyBldGMuCisgKi8KKyMgIGRlZmluZSBtY2hfb3BlbihuLCBtLCBwKQlvcGVuKHZtc19maXhmaWxlbmFtZShuKSwgKG0pLCAocCkpCisjIGVsc2UKKyMgIGlmICEoZGVmaW5lZChGRUFUX01CWVRFKSAmJiBkZWZpbmVkKFdJTjMyNjQpKQorIyAgIGRlZmluZSBtY2hfb3BlbihuLCBtLCBwKQlvcGVuKChuKSwgKG0pLCAocCkpCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKy8qIG1jaF9vcGVuX3J3KCk6IGludm9rZSBtY2hfb3BlbigpIHdpdGggdGhpcmQgYXJndW1lbnQgZm9yIHVzZXIgUi9XLiAqLworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpICAvKiBvcGVuIGluIHJ3LS0tLS0tLSBtb2RlICovCisjIGRlZmluZSBtY2hfb3Blbl9ydyhuLCBmKQltY2hfb3BlbigobiksIChmKSwgKG1vZGVfdCkwNjAwKQorI2Vsc2UKKyMgaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChNU1dJTikgfHwgZGVmaW5lZChPUzIpICAvKiBvcGVuIHJlYWQvd3JpdGUgKi8KKyMgIGRlZmluZSBtY2hfb3Blbl9ydyhuLCBmKQltY2hfb3BlbigobiksIChmKSwgU19JUkVBRCB8IFNfSVdSSVRFKQorIyBlbHNlCisjICBkZWZpbmUgbWNoX29wZW5fcncobiwgZikJbWNoX29wZW4oKG4pLCAoZiksIDApCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIEVuY3J5cHRpb24gbWFjcm9zLiAgTW9oc2luIEFobWVkLCBtb3NoQHNhc2kuY29tIDk4LTA5LTI0CisgKiBCYXNlZCBvbiB6aXAvY3J5cHQgc291cmNlcy4KKyAqLworCisjaWZkZWYgRkVBVF9DUllQVAorCisjaWZuZGVmIF9fTUlOR1czMl9fCisjIGRlZmluZSBQV0xFTiA4MAorI2VuZGlmCisKKy8qIGVuY29kZSBieXRlIGMsIHVzaW5nIHRlbXAgdC4gIFdhcm5pbmc6IGMgbXVzdCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuICovCisjIGRlZmluZSBaRU5DT0RFKGMsIHQpICAodCA9IGRlY3J5cHRfYnl0ZSgpLCB1cGRhdGVfa2V5cyhjKSwgdF4oYykpCisKKy8qIGRlY29kZSBieXRlIGMgaW4gcGxhY2UgKi8KKyMgZGVmaW5lIFpERUNPREUoYykgICB1cGRhdGVfa2V5cyhjIF49IGRlY3J5cHRfYnl0ZSgpKQorCisjZW5kaWYKKworI2lmZGVmIFNUQVJUVVBUSU1FCisjIGRlZmluZSBUSU1FX01TRyhzKSB0aW1lX21zZyhzLCBOVUxMKQorI2Vsc2UKKyMgZGVmaW5lIFRJTUVfTVNHKHMpCisjZW5kaWYKKworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKyMgZGVmaW5lIFJFUExBQ0VfTk9STUFMKHMpICgoKHMpICYgUkVQTEFDRV9GTEFHKSAmJiAhKChzKSAmIFZSRVBMQUNFX0ZMQUcpKQorI2Vsc2UKKyMgZGVmaW5lIFJFUExBQ0VfTk9STUFMKHMpICgocykgJiBSRVBMQUNFX0ZMQUcpCisjZW5kaWYKKworI2lmZGVmIEZFQVRfQVJBQklDCisjIGRlZmluZSBVVEZfQ09NUE9TSU5HTElLRShwMSwgcDIpICB1dGZfY29tcG9zaW5nbGlrZSgocDEpLCAocDIpKQorI2Vsc2UKKyMgZGVmaW5lIFVURl9DT01QT1NJTkdMSUtFKHAxLCBwMikgIHV0Zl9pc2NvbXBvc2luZyh1dGZfcHRyMmNoYXIocDIpKQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorICAgIC8qIFdoZXRoZXIgdG8gZHJhdyB0aGUgdmVydGljYWwgYmFyIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjZWxsLiAqLworIyBkZWZpbmUgQ1VSU09SX0JBUl9SSUdIVCAoY3Vyd2luLT53X3BfcmwgJiYgKCEoU3RhdGUgJiBDTURMSU5FKSB8fCBjbWRtc2dfcmwpKQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvbWFpbi5hYXAgYi9zcmMvbWFpbi5hYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5MGE4NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluLmFhcApAQCAtMCwwICsxLDEwMTQgQEAKKyMgQS1BLVAgcmVjaXBlIGZvciBidWlsZGluZyBWaW0KKyMKKyMgVGhlcmUgYXJlIG5vIHVzZXIgY2hvaWNlcyBpbiBoZXJlIQorIyBQdXQgY29uZmlndXJlIGFyZ3VtZW50cyBpbiB0aGUgZmlsZSBjb25maWcuYXJnLgorIyBMYXRlciB0aGVyZSB3aWxsIGJlIGEgY29uZmlnLnR4dCBmaWxlIHRoYXQgY29udGFpbnMgZXhhbXBsZXMgYW5kCisjIGV4cGxhbmF0aW9ucy4KKyMKKyMgT3B0aW9uYWwgYXJndW1lbnRzOgorIyAgUFJFRklYPWRpcgkJT3ZlcnJ1bGVzIHRoZSBpbnN0YWxsIGRpcmVjdG9yeS4KKyMJCQlDYW4gYmUgc3BlY2lmaWVkIHdoZW4gaW5zdGFsbGluZyBvbmx5LgorIwkJCUV4YW1wbGU6IGFhcCBpbnN0YWxsIFBSRUZJWD0kSE9NRQorIworCisjIFNraXAgdGhlIGNvbmZpZ3VyZSBzdHVmZiB3aGVuICJsaW5rLnNoIiBpcyBleGVjdXRpbmcgdGhpcyByZWNpcGUgcmVjdXJzaXZlbHkKKyMgdG8gYnVpbGQgcGF0aGRlZi5jIG9yIG5vdCBidWlsZGluZyBzb21ldGhpbmcgYW5kIGF1dG8vY29uZmlnLmFhcCBkb2VzIGV4aXN0LgorQGlmICgoX25vLlRBUkdFVEFSRyAhPSAicGF0aGRlZiIgYW5kIGhhc19idWlsZF90YXJnZXQoKSkKK0AJb3Igbm90IG9zLnBhdGguZXhpc3RzKCJhdXRvL2NvbmZpZy5hYXAiKSk6CisKKyAgICAjCisgICAgIyBBIFUgVCBPIEMgTyBOIEYKKyAgICAjCisKKyAgICAjIFJ1biBhdXRvY29uZiB3aGVuIGNvbmZpZ3VyZS5pbiBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIGl0IHdhcyBsYXN0IHJ1bi4KKyAgICAjIFRoaXMgaXMgc2tpcHBlZCB3aGVuIHRoZSBzaWduYXR1cmVzIGluICJteXNpZ24iIGFyZSB1cC10by1kYXRlLiAgV2hlbgorICAgICMgdGhlcmUgaXMgbm8gYXV0b2NvbmYgcHJvZ3JhbSBza2lwIHRoaXMgKHRoZSBzaWduYXR1cmUgaXMgb2Z0ZW4gdGhlIG9ubHkKKyAgICAjIHRoaW5nIHRoYXQncyBvdXRkYXRlZCkKKyAgICBhdXRvL2NvbmZpZ3VyZSB7c2lnbmZpbGUgPSBteXNpZ259IDogY29uZmlndXJlLmluCisJQGlmIG5vdCBwcm9ncmFtX3BhdGgoImF1dG9jb25mIik6CisJICAgIDpwcmludCBDYW4ndCBmaW5kIGF1dG9jb25mLCB1c2luZyBleGlzdGluZyBjb25maWd1cmUgc2NyaXB0LgorCUBlbHNlOgorICAgICAgICAgICAgIyBNb3ZlIGNvbmZpZ3VyZSBhc2lkZSwgYXV0b2NvbmYgd291bGQgb3ZlcndyaXRlIGl0CisgICAgICAgICAgICA6bW92ZSB7ZXhpc3R9IGNvbmZpZ3VyZSBjb25maWd1cmUuc2F2ZQorICAgICAgICAgICAgOnN5cyBhdXRvY29uZgorICAgICAgICAgICAgOmNhdCBjb25maWd1cmUgfCA6ZXZhbCByZS5zdWIoJ1xcLi9jb25maWcubG9nJywgJ2F1dG8vY29uZmlnLmxvZycsIHN0ZGluKSA+ISBhdXRvL2NvbmZpZ3VyZQorICAgICAgICAgICAgOmNobW9kIDc1NSBhdXRvL2NvbmZpZ3VyZQorICAgICAgICAgICAgOm1vdmUgY29uZmlndXJlLnNhdmUgY29uZmlndXJlCisgICAgICAgICAgICA6ZGVsIHtmb3JjZX0gYXV0by9jb25maWcuY2FjaGUgYXV0by9jb25maWcuc3RhdHVzCisKKyAgICAjIENoYW5nZSB0aGUgY29uZmlndXJlIHNjcmlwdCB0byBwcm9kdWNlIGNvbmZpZy5hYXAgaW5zdGVhZCBvZiBjb25maWcubWsuCisgICAgYXV0by9jb25maWd1cmUuYWFwIDogYXV0by9jb25maWd1cmUKKwk6cHJpbnQgQWRqdXN0aW5nIGF1dG8vY29uZmlndXJlIGZvciBBLUEtUC4KKwk6Y2F0IGF1dG8vY29uZmlndXJlIHwgOmV2YWwgcmUuc3ViKCJjb25maWcubWsiLCAiY29uZmlnLmFhcCIsIHN0ZGluKQorCQkJCQkJCT4hIGF1dG8vY29uZmlndXJlLmFhcAorCTpjaG1vZCA3NTUgYXV0by9jb25maWd1cmUuYWFwCisKKyAgICAjIFRoZSBjb25maWd1cmUgc2NyaXB0IHVzZXMgdGhlIGRpcmVjdG9yeSB3aGVyZSBpdCdzIGxvY2F0ZWQsIHVzZSBhIGxpbmsuCisgICAgY29uZmlndXJlLmFhcDogIHtidWlsZGNoZWNrPX0KKwk6c3lzIGxuIC1zIGF1dG8vY29uZmlndXJlLmFhcCBjb25maWd1cmUuYWFwCisKKyAgICAjIERlcGVuZGVuY3k6IHJ1biBjb25maWd1cmUuYWFwIHRvIHVwZGF0ZSBjb25maWcuaCBhbmQgY29uZmlnLmFhcCBpbiB0aGUKKyAgICAjICJhdXRvIiBkaXJlY3RvcnkuCisgICAgY29uZmlnIHt2aXJ0dWFsfSBhdXRvL2NvbmZpZy5oIGF1dG8vY29uZmlnLmFhcCA6CisJCQkgYXV0by9jb25maWd1cmUuYWFwIGNvbmZpZ3VyZS5hYXAKKwkJCSBjb25maWcuYXJnIGNvbmZpZy5oLmluIGNvbmZpZy5hYXAuaW4KKwk6c3lzIENPTkZJR19TVEFUVVM9YXV0by9jb25maWcuc3RhdHVzCisgICAgICAgICAgICAgICAgLi9jb25maWd1cmUuYWFwIGBmaWxlMnN0cmluZygiY29uZmlnLmFyZyIpYAorICAgICAgICAgICAgICAgICAgICAtLWNhY2hlLWZpbGU9YXV0by9jb25maWcuY2FjaGUKKworICAgICMgQ29uZmlndXJlIGFyZ3VtZW50czogY3JlYXRlIGFuIGVtcHR5ICJjb25maWcuYXJnIiBmaWxlIHdoZW4gaXRzIG1pc3NpbmcKKyAgICBjb25maWcuYXJnOgorCTp0b3VjaCB7ZXhpc3R9IGNvbmZpZy5hcmcKKworICAgICMgImF1dG8vY29uZmlnLmFhcCIgY29udGFpbnMgYSBsb3Qgb2Ygc2V0dGluZ3MsIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhlCisgICAgIyBleGVjdXRhYmxlICJUYXJnZXQiLgorICAgICMgRmlyc3QgdXBkYXRlIGl0LCBmb3JjZWZ1bGx5IGlmIHRoZSAicmVjb25maWciIHRhcmdldCB3YXMgdXNlZC4KKyAgICBAaWYgX25vLlRBUkdFVEFSRyAhPSAiY29tbWVudCIgYW5kIF9uby5UQVJHRVRBUkcgIT0gIm1ha2UiOgorCUBpZiAicmVjb25maWciIGluIHZhcjJsaXN0KF9uby5UQVJHRVRBUkcpOgorCSAgICA6ZGVsIHtmb3JjZX0gYXV0by9jb25maWcuY2FjaGUgYXV0by9jb25maWcuc3RhdHVzCisJICAgIDp1cGRhdGUge2ZvcmNlfSBhdXRvL2NvbmZpZy5hYXAKKwlAZWxzZToKKwkgICAgOnVwZGF0ZSBhdXRvL2NvbmZpZy5hYXAKKworIyBJbmNsdWRlIHRoZSByZWNpcGUgdGhhdCBhdXRvY29uZiBnZW5lcmF0ZWQuCis6aW5jbHVkZSBhdXRvL2NvbmZpZy5hYXAKKworIyBBICJQUkVGSVg9ZGlyIiBhcmd1bWVudCBvdmVycnVsZXMgdGhlIHZhbHVlIG9mICRwcmVmaXgKK0BpZiBfbm8uZ2V0KCJQUkVGSVgiKToKKyAgICBwcmVmaXggPSAkUFJFRklYCisKKyMgRG9uJ3Qgd2FudCAifi8iIGluIHByZWZpeC4KK3ByZWZpeCA9IGBvcy5wYXRoLmV4cGFuZHVzZXIocHJlZml4KWAKKworIworIyBHIFUgSSAgdmFyaWFudAorIworIyBUaGUgR1VJIGlzIHNlbGVjdGVkIGJ5IGNvbmZpZ3VyZSwgYSBsb3Qgb2Ygb3RoZXIgdGhpbmdzIGRlcGVuZCBvbiBpdC4KKyMKKzp2YXJpYW50IEdVSQorICAgIEdUSworCUdVSV9TUkMJCT0gZ3VpLmMgZ3VpX2d0ay5jIGd1aV9ndGtfeDExLmMgcHR5LmMgZ3VpX2JldmFsLmMKKwkJCSAgICBndWlfZ3RrX2YuYworCUdVSV9PQkoJCSQ9ICRCRElSL2d1aS5vICRCRElSL2d1aV9ndGsubyAkQkRJUi9ndWlfZ3RrX3gxMS5vCisJCQkgICAgJEJESVIvcHR5Lm8gJEJESVIvZ3VpX2d0a19mLm8KKwlHVUlfREVGUwk9IC1ERkVBVF9HVUlfR1RLICROQVJST1dfUFJPVE8KKwlHVUlfSVBBVEgJPSAkR1VJX0lOQ19MT0MKKwlHVUlfTElCU19ESVIJPSAkR1VJX0xJQl9MT0MKKwlHVUlfTElCUzEJPQorCUdVSV9MSUJTMgk9ICRHVEtfTElCTkFNRQorCUdVSV9UQVJHRVRTCT0gaW5zdGFsbGdsaW5rcworCUdVSV9NQU5fVEFSR0VUUwk9IGluc3RhbGxnaGVscGxpbmtzCisJR1VJX1RFU1RUQVJHRVQJPSBndWkKKyAgICBNT1RJRgorCUdVSV9TUkMJCT0gZ3VpLmMgZ3VpX21vdGlmLmMgZ3VpX3gxMS5jIHB0eS5jIGd1aV9iZXZhbC5jCisJR1VJX09CSgkJJD0gJEJESVIvZ3VpLm8gJEJESVIvZ3VpX21vdGlmLm8gJEJESVIvZ3VpX3gxMS5vCisJCQkgICAgJEJESVIvcHR5Lm8gJEJESVIvZ3VpX2JldmFsLm8KKwlHVUlfREVGUwk9IC1ERkVBVF9HVUlfTU9USUYgJE5BUlJPV19QUk9UTworCUdVSV9JUEFUSAk9ICRHVUlfSU5DX0xPQworCUdVSV9MSUJTX0RJUgk9ICRHVUlfTElCX0xPQworCUdVSV9MSUJTMQk9CisJR1VJX0xJQlMyCT0gJE1PVElGX0xJQk5BTUUgLWxYdAorCUdVSV9UQVJHRVRTCT0gaW5zdGFsbGdsaW5rcworCUdVSV9NQU5fVEFSR0VUUwk9IGluc3RhbGxnaGVscGxpbmtzCisJR1VJX1RFU1RUQVJHRVQJPSBndWkKKyAgICBBVEhFTkEKKwkjIFhBV19MSUIgZXQgYWwuIGNhbiBiZSBvdmVycnVsZWQgdG8gdXNlIFhhdzNkIHdpZGdldHMKKwlYQVdfTElCCQk/PSAtbFhhdworCUdVSV9TUkMJCT0gIGd1aS5jIGd1aV9hdGhlbmEuYyBndWlfeDExLmMgcHR5LmMgZ3VpX2JldmFsLmMgXAorCQkJICAgIGd1aV9hdF9zYi5jIGd1aV9hdF9mcy5jCisJR1VJX09CSgkJJD0gJEJESVIvZ3VpLm8gJEJESVIvZ3VpX2F0aGVuYS5vICRCRElSL2d1aV94MTEubyBcCisJCQkgICAgJEJESVIvcHR5Lm8gJEJESVIvZ3VpX2JldmFsLm8gXAorCQkJICAgICRCRElSL2d1aV9hdF9zYi5vICRCRElSL2d1aV9hdF9mcy5vCisJR1VJX0RFRlMJPSAtREZFQVRfR1VJX0FUSEVOQSAkTkFSUk9XX1BST1RPCisJR1VJX0lQQVRICT0gJEdVSV9JTkNfTE9DCisJR1VJX0xJQlNfRElSCT0gJEdVSV9MSUJfTE9DCisJR1VJX0xJQlMxCT0gJFhBV19MSUIKKwlHVUlfTElCUzIJPSAtbFh0CisJR1VJX1RBUkdFVFMJPSBpbnN0YWxsZ2xpbmtzCisJR1VJX01BTl9UQVJHRVRTCT0gaW5zdGFsbGdoZWxwbGlua3MKKwlHVUlfVEVTVFRBUkdFVAk9IGd1aQorICAgIE5FWFRBVworCSMgWEFXX0xJQiBldCBhbC4gY2FuIGJlIG92ZXJydWxlZCB0byB1c2UgWGF3M2Qgd2lkZ2V0cworCVhBV19MSUIJCT89IC1sWGF3CisJR1VJX1NSQwkJPSAgZ3VpLmMgZ3VpX2F0aGVuYS5jIGd1aV94MTEuYyBwdHkuYyBndWlfYmV2YWwuYworCQkJICAgIGd1aV9hdF9mcy5jCisJR1VJX09CSgkJJD0gJEJESVIvZ3VpLm8gJEJESVIvZ3VpX2F0aGVuYS5vICRCRElSL2d1aV94MTEubworCQkJICAgICRCRElSL3B0eS5vICRCRElSL2d1aV9iZXZhbC5vICRCRElSL2d1aV9hdF9mcy5vCisJR1VJX0RFRlMJPSAtREZFQVRfR1VJX0FUSEVOQSAtREZFQVRfR1VJX05FWFRBVyAkTkFSUk9XX1BST1RPCisJR1VJX0lQQVRICT0gJEdVSV9JTkNfTE9DCisJR1VJX0xJQlNfRElSCT0gJEdVSV9MSUJfTE9DCisJR1VJX0xJQlMxCT0gJE5FWFRBV19MSUIKKwlHVUlfTElCUzIJPSAtbFh0CisJR1VJX1RBUkdFVFMJPSBpbnN0YWxsZ2xpbmtzCisJR1VJX01BTl9UQVJHRVRTCT0gaW5zdGFsbGdoZWxwbGlua3MKKwlHVUlfVEVTVFRBUkdFVAk9IGd1aQorICAgIEJFT1NHVUkKKwlHVUlfU1JDCQk9IGd1aS5jIGd1aV9iZW9zLmNjIHB0eS5jCisJR1VJX09CSgkJPSAkQkRJUi9ndWkubyAkQkRJUi9ndWlfYmVvcy5vICAkQkRJUi9wdHkubworCUdVSV9ERUZTCT0gLURGRUFUX0dVSV9CRU9TCisJR1VJX0lQQVRICT0KKwlHVUlfTElCU19ESVIJPQorCUdVSV9MSUJTMQk9IC1sYmUgLWxyb290CisJR1VJX0xJQlMyCT0KKwlHVUlfVEFSR0VUUwk9IGluc3RhbGxnbGlua3MKKwlHVUlfTUFOX1RBUkdFVFMJPSBpbnN0YWxsZ2hlbHBsaW5rcworCUdVSV9URVNUVEFSR0VUCT0gZ3VpCisgICAgUEhPVE9OR1VJCisJR1VJX1NSQwkJPSBndWkuYyBndWlfcGhvdG9uLmMgcHR5LmMKKwlHVUlfT0JKCQk9ICRCRElSL2d1aS5vICRCRElSL2d1aV9waG90b24ubyAkQkRJUi9wdHkubworCUdVSV9ERUZTCT0gLURGRUFUX0dVSV9QSE9UT04KKwlHVUlfSVBBVEgJPQorCUdVSV9MSUJTX0RJUgk9CisJR1VJX0xJQlMxCT0gLWxwaCAtbHBoZXhsaWIKKwlHVUlfTElCUzIJPQorCUdVSV9UQVJHRVRTCT0gaW5zdGFsbGdsaW5rcworCUdVSV9NQU5fVEFSR0VUUwk9IGluc3RhbGxnaGVscGxpbmtzCisJR1VJX1RFU1RUQVJHRVQJPSBndWkKKyAgICAqCisJR1VJX1NSQwkJPQorCUdVSV9PQkoJCT0KKwlHVUlfREVGUwk9CisJR1VJX0lQQVRICT0KKwlHVUlfTElCU19ESVIJPQorCUdVSV9MSUJTMQk9CisJR1VJX0xJQlMyCT0KKwlHVUlfVEFSR0VUUwk9CisJR1VJX01BTl9UQVJHRVRTCT0KKwlHVUlfVEVTVFRBUkdFVAk9CisKKworUFJFX0RFRlMgPSAtSXByb3RvIC1JLiAkREVGUyAkR1VJX0RFRlMgJEdVSV9JUEFUSCAkQ1BQRkxBR1MgJD8oRVhUUkFfSVBBVEhTKQorUE9TVF9ERUZTID0gJFhfQ0ZMQUdTICRQRVJMX0NGTEFHUyAkUFlUSE9OX0NGTEFHUyAkVENMX0NGTEFHUyAkUlVCWV9DRkxBR1MgJD8oRVhUUkFfREVGUykKK0NGTEFHUyA9ICRQUkVfREVGUyAkQ09ORl9DRkxBR1MgJD8oUFJPRklMRV9DRkxBR1MpICRQT1NUX0RFRlMKK0NQUEZMQUdTID0KKworQUxMX0xJQl9ESVJTID0gJEdVSV9MSUJTX0RJUiAkWF9MSUJTX0RJUgorTERGTEFHUyA9ICRBTExfTElCX0RJUlMgJENPTkZfTERGTEFHUworTElCUyA9ICRHVUlfTElCUzEgJEdVSV9YX0xJQlMgJEdVSV9MSUJTMiAkWF9QUkVfTElCUyAkWF9MSUJTICRYX0VYVFJBX0xJQlMgJENPTkZfTElCUyAkPyhFWFRSQV9MSUJTKSAkUEVSTF9MSUJTICRQWVRIT05fTElCUyAkVENMX0xJQlMgJFJVQllfTElCUyAkPyhQUk9GSUxFX0xJQlMpCisKK1RhcmdldCA9ICRWSU1OQU1FCisKKyMgcmVjb25maWcgdGFyZ2V0IGFsc28gYnVpbGRzIFZpbSAocmVjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQgYWJvdmUpLgorcmVjb25maWcge3ZpcnR1YWx9OiAkVGFyZ2V0CisKKworIyBFeGVjdXRlIHRoZSB0ZXN0IHNjcmlwdHMuICBSdW4gdGhlc2UgYWZ0ZXIgY29tcGlsaW5nIFZpbSwgYmVmb3JlIGluc3RhbGxpbmcuCisjCisjIFRoaXMgd2lsbCBwcm9kdWNlIGEgbG90IG9mIGdhcmJhZ2Ugb24geW91ciBzY3JlZW4sIGluY2x1ZGluZyBhIGZldyBlcnJvcgorIyBtZXNzYWdlcy4gIERvbid0IHdvcnJ5IGFib3V0IHRoYXQuCisjIElmIHRoZXJlIGlzIGEgcmVhbCBlcnJvciwgdGhlcmUgd2lsbCBiZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiAidGVzdC5vdXQiIGFuZAorIyBhICJ0ZXN0OTkub2siIGZpbGUuCisjIElmIGV2ZXJ5dGhpbmcgaXMgYWxscmlnaHQsIHRoZSBmaW5hbCBtZXNzYWdlIHdpbGwgYmUgIkFMTCBET05FIi4KKyMKK3Rlc3QgY2hlY2s6CisgICAgVmltUHJvZyA9IC4uLyRUYXJnZXQKKyAgICA6ZXhlY3V0ZSB0ZXN0ZGlyL21haW4uYWFwICRHVUlfVEVTVFRBUkdFVAorCit0ZXN0Y2xlYW4ge3ZpcnR1YWx9OgorICAgIDpkZWwge2ZvcmNlfSB0ZXN0ZGlyLyoub3V0IHRlc3RkaXIvdGVzdC5sb2cKKworCisjIFdoZW4gbm8gZmV0Y2ggdGFyZ2V0IGV4aXN0cyB3ZSBhcmUgbm90IGEgY2hpbGQgb2YgdGhlIC4uL21haW4uYWFwIHJlY2lwZSwKKyMgVXNlIC4uL21haW4uYWFwIHRvIGRvIHRoZSBmZXRjaGluZy4KKyMgLS0tIElmIHlvdSBnZXQgYW4gZXJyb3IgaGVyZSBmb3Igd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgeW91IG5lZWQgdG8KKyMgICAgIHVwZGF0ZSB0byBhIG5ld2VyIHZlcnNpb24gb2YgQS1BLVAuCitAaWYgbm90IGhhc190YXJnZXQoImZldGNoIik6CisgICAgZmV0Y2g6CisJOmV4ZWN1dGUgLi4vbWFpbi5hYXAgZmV0Y2gKKworCisjIEFsbCB0aGUgc291cmNlIGZpbGVzIHRoYXQgbmVlZCB0byBiZSBjb21waWxlZC4KKyMgU29tZSBhcmUgb3B0aW9uYWwgYW5kIGRlcGVuZCBvbiBjb25maWd1cmUuCisjICJ2ZXJzaW9uLmMiIGlzIG1pc3NpbmcsIGl0J3MgYWx3YXlzIGNvbXBpbGVkIChzZWUgYmVsb3cpLgorU291cmNlID0KKwlidWZmZXIuYworCWNoYXJzZXQuYworCWRpZmYuYworCWRpZ3JhcGguYworCWVkaXQuYworCWV2YWwuYworCWV4X2NtZHMuYworCWV4X2NtZHMyLmMKKwlleF9kb2NtZC5jCisJZXhfZXZhbC5jCisJZXhfZ2V0bG4uYworCWZpbGVpby5jCisJZm9sZC5jCisJZ2V0Y2hhci5jCisJaWZfY3Njb3BlLmMKKwlpZl94Y21kc3J2LmMKKwltYWluLmMKKwltYXJrLmMKKwltZW1maWxlLmMKKwltZW1saW5lLmMKKwltZW51LmMKKwltZXNzYWdlLmMKKwltaXNjMS5jCisJbWlzYzIuYworCW1vdmUuYworCW1ieXRlLmMKKwlub3JtYWwuYworCW9wcy5jCisJb3B0aW9uLmMKKwlvc191bml4LmMKKwlhdXRvL3BhdGhkZWYuYworCXF1aWNrZml4LmMKKwlyZWdleHAuYworCXNjcmVlbi5jCisJc2VhcmNoLmMKKwlzeW50YXguYworCXRhZy5jCisJdGVybS5jCisJdWkuYworCXVuZG8uYworCXdpbmRvdy5jCisJJE9TX0VYVFJBX1NSQworCSRHVUlfU1JDCisJJEhBTkdVTElOX1NSQworCSRQRVJMX1NSQworCSRORVRCRUFOU19TUkMKKwkkUFlUSE9OX1NSQworCSRUQ0xfU1JDCisJJFJVQllfU1JDCisJJFNOSUZGX1NSQworCSRXT1JLU0hPUF9TUkMKKworIyBUT0RPOiBtYWtlIGlzIHN0aWxsIHVzZWQgZm9yIHN1YmRpcmVjdG9yaWVzLCBuZWVkIHRvIHdyaXRlIGEgcmVjaXBlLgorTUFLRSA/PSBtYWtlCisKK2FsbDogJFRhcmdldAorCisjIFRoaXMgZGVwZW5kZW5jeSBpcyByZXF1aXJlZCB0byBidWlsZCBhdXRvL29zZGVmLmggYmVmb3JlIGF1dG9tYXRpYworIyBkZXBlbmRlbmNpZXMgYXJlIGdlbmVyYXRlZC4KKyRTb3VyY2UgdmVyc2lvbi5jIDogYXV0by9vc2RlZi5oCisKKyMgTmVlZCB0byBtZW50aW9uIHRoYXQgdGhlIHRhcmdldCBhbHNvIGRlcGVuZHMgb24gdmVyc2lvbi5jLCBzaW5jZSBpdCdzIG5vdAorIyBpbmx1ZGVkIGluICRTb3VyY2UKKyRUYXJnZXQgOiB2ZXJzaW9uLmMKKworIyBTb21lIHNvdXJjZXMgYXJlIHRvIGJlIGZvdW5kIGluIHRoZSAiYXV0byIgZGlyZWN0b3J5LgorU1JDUEFUSCArPSBhdXRvCisKKyMgV2hlbiBidWlsZGluZyBWaW0gYWx3YXlzIGNvbXBpbGUgdmVyc2lvbi5jIHRvIGdldCB0aGUgdGltZXN0YW1wLgorOmZpbGV0eXBlCisgICAgZGVjbGFyZSBteV9wcm9nCis6YXR0ciB7ZmlsZXR5cGUgPSBteV9wcm9nfSAkVGFyZ2V0CisKKzpwcm9ncmFtICRUYXJnZXQgOiAkU291cmNlCisKKzphY3Rpb24gYnVpbGQgbXlfcHJvZyBvYmplY3QKKwl2ZXJzaW9uX29iaiA9IGBzcmMyb2JqKCJ2ZXJzaW9uLmMiKWAKKwk6ZG8gY29tcGlsZSB7dGFyZ2V0ID0gJHZlcnNpb25fb2JqfSB2ZXJzaW9uLmMKKwkjOmRvIGJ1aWxkIHt0YXJnZXQgPSAkdGFyZ2V0IHtmaWxldHlwZSA9IHByb2dyYW19fSAkc291cmNlICR2ZXJzaW9uX29iagorCWxpbmtfc2VkID0gJEJESVIvbGluay5zZWQKKwlAaWYgb3MucGF0aC5leGlzdHMobGlua19zZWQpOgorCSAgICA6bW92ZSB7Zm9yY2V9ICRsaW5rX3NlZCBhdXRvL2xpbmsuc2VkCisJQGVsc2U6CisJICAgIDpkZWwge2ZvcmNlfSBhdXRvL2xpbmsuc2VkCisJOnVwZGF0ZSBsaW5rMi5zaAorCTpzeXMgTElOSz0iJD8oUFVSSUZZKSAkPyhTSFJQRU5WKSAkQ0MgJExERkxBR1MgXAorCQktbyAkdGFyZ2V0ICRzb3VyY2UgJHZlcnNpb25fb2JqICRMSUJTIiBcCisJCU1BS0U9ImFhcCIgc2ggLi9saW5rMi5zaAorCTpjb3B5IHtmb3JjZX0gYXV0by9saW5rLnNlZCAkQkRJUi9saW5rLnNlZAorCisjICJsaW5rLnNoIiBtdXN0IGJlIG1vZGlmaWVkIGZvciBBLUEtUAorbGluazIuc2ggOiBsaW5rLnNoCisgICAgOnByaW50IEFkanVzdGluZyAkLXNvdXJjZSBmb3IgQS1BLVAuCisgICAgOmNhdCAkc291cmNlIHwgOmV2YWwgcmUuc3ViKCJvYmplY3RzL3BhdGhkZWYubyIsICJwYXRoZGVmIiwgc3RkaW4pCisJCQkJCQkJCSAgICAgID4hICR0YXJnZXQKKworeHhkL3h4ZCRFWEVTVUY6IHh4ZC94eGQuYworICAgIDpzeXMgY2QgeHhkOyBDQz0iJENDIiBDRkxBR1M9IiRDUFBGTEFHUyAkQ0ZMQUdTIiBcCisJICAgICRNQUtFIC1mIE1ha2VmaWxlCisKKyMgQnVpbGQgdGhlIGxhbmd1YWdlIHNwZWNpZmljIGZpbGVzIGlmIHRoZXkgd2VyZSB1bnBhY2tlZC4KKyMgR2VuZXJhdGUgdGhlIGNvbnZlcnRlZCAubW8gZmlsZXMgc2VwYXJhdGVseSwgaXQncyBubyBwcm9ibGVtIGlmIHRoaXMgZmFpbHMuCitsYW5ndWFnZXMge3ZpcnR1YWx9OgorCUBpZiBfbm8uTUFLRU1POgorCSAgICA6c3lzIGNkICRQT0RJUjsgQ0M9IiRDQyIgJE1BS0UgcHJlZml4PSRERVNURElSJHByZWZpeAorCSAgICBAdHJ5OgorCQk6c3lzIGNkICRQT0RJUjsgQ0M9IiRDQyIgJE1BS0UgcHJlZml4PSRERVNURElSJHByZWZpeCBjb252ZXJ0ZWQKKwkgICAgQGV4Y2VwdDoKKwkJOnByaW50IEdlbmVyYXRlZCBjb252ZXJ0ZWQgbGFuZ3VhZ2UgZmlsZXMgZmFpbGVkLCBjb250aW51aW5nCisKKyMgVXBkYXRlIHRoZSAqLnBvIGZpbGVzIGZvciBjaGFuZ2VzIGluIHRoZSBzb3VyY2VzLiAgT25seSBydW4gbWFudWFsbHkuCit1cGRhdGUtcG8ge3ZpcnR1YWx9OgorCWNkICRQT0RJUjsgQ0M9IiRDQyIgJE1BS0UgcHJlZml4PSRERVNURElSJHByZWZpeCB1cGRhdGUtcG8KKworYXV0by9pZl9wZXJsLmM6IGlmX3BlcmwueHMKKwk6c3lzICRQRVJMIC1lICd1bmxlc3MgKCAkJF0gPj0gNS4wMDUgKSB7IGZvciAocXcobmEgZGVmZ3YgZXJyZ3YpKSB7IHByaW50ICIjZGVmaW5lIFBMXyQkXyAkJF9cbiIgfX0nID4gJHRhcmdldAorCTpzeXMgJFBFUkwgJFBFUkxMSUIvRXh0VXRpbHMveHN1YnBwIC1wcm90b3R5cGVzIC10eXBlbWFwIFwKKwkgICAgJFBFUkxMSUIvRXh0VXRpbHMvdHlwZW1hcCBpZl9wZXJsLnhzID4+ICR0YXJnZXQKKworYXV0by9vc2RlZi5oOiBhdXRvL2NvbmZpZy5oIG9zZGVmLnNoIG9zZGVmMS5oLmluIG9zZGVmMi5oLmluCisJOnN5cyBDQz0iJENDICRDRkxBR1MiIHNyY2Rpcj0kc3JjZGlyIHNoICRzcmNkaXIvb3NkZWYuc2gKKworcGF0aGRlZiB7dmlydHVhbH0gOiAkQkRJUi9hdXRvL3BhdGhkZWYkT0JKU1VGCisKK2F1dG8vcGF0aGRlZi5jOiBhdXRvL2NvbmZpZy5hYXAKKwk6cHJpbnQgQ3JlYXRpbmcgJHRhcmdldAorCTpwcmludCA+ISAkdGFyZ2V0IC8qIHBhdGhkZWYuYyAqLworCTpwcmludCA+PiAkdGFyZ2V0IC8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgbWFpbi5hYXAgKi8KKwk6cHJpbnQgPj4gJHRhcmdldCAvKiBETyBOT1QgRURJVCEgIENoYW5nZSBtYWluLmFhcCBvbmx5LiAqLworCTpwcmludCA+PiAkdGFyZ2V0ICQjaW5jbHVkZSAidmltLmgiCisJOnByaW50ID4+ICR0YXJnZXQgY2hhcl91ICpkZWZhdWx0X3ZpbV9kaXIgPSAoY2hhcl91ICopIiRWSU1SQ0xPQyI7CisJOnByaW50ID4+ICR0YXJnZXQgY2hhcl91ICpkZWZhdWx0X3ZpbXJ1bnRpbWVfZGlyID0gKGNoYXJfdSAqKSIkP1ZJTVJVTlRJTUVESVIiOworCTpwcmludCA+PiAkdGFyZ2V0IGNoYXJfdSAqYWxsX2NmbGFncyA9IChjaGFyX3UgKikiJENDIC1jIC1JJHNyY2RpciAkQ0ZMQUdTIjsKKwlsaW5rY21kID0gJENDICRMREZMQUdTIC1vICRWSU1UQVJHRVQgJExJQlMKKwlsaW5rX3NlZCA9ICRCRElSL2xpbmsuc2VkCisJQGlmIG9zLnBhdGguZXhpc3RzKGxpbmtfc2VkKToKKwkgICAgIyBmaWx0ZXIgJGxpbmtjbWQgdGhyb3VnaCAkQkRJUi9saW5rLnNlZAorCSAgICA6cHJpbnQgJGxpbmtjbWQgfCA6c3lzZXZhbCBzZWQgLWYgJGxpbmtfc2VkIHwgOmV2YWwgcmUuc3ViKCJcbiIsICIiLCBzdGRpbikgfCA6YXNzaWduIGxpbmtjbWQKKwk6cHJpbnQgPj4gJHRhcmdldCBjaGFyX3UgKmFsbF9sZmxhZ3MgPSAoY2hhcl91ICopIiRsaW5rY21kIjsKKwlAaWYgX25vLmdldCgiQ09NUElMRURCWSIpOgorCSAgICB3aG8gPSAkQ09NUElMRURCWQorCSAgICB3aGVyZSA9ICcnCisJQGVsc2U6CisJICAgIDpzeXNldmFsIHdob2FtaSB8IDpldmFsIHJlLnN1YigiXG4iLCAiIiwgc3RkaW4pIHwgOmFzc2lnbiB3aG8KKworCSAgICA6c3lzZXZhbCBob3N0bmFtZSB8IDpldmFsIHJlLnN1YigiXG4iLCAiIiwgc3RkaW4pIHwgOmFzc2lnbiB3aGVyZQorCTpwcmludCA+PiAkdGFyZ2V0IGNoYXJfdSAqY29tcGlsZWRfdXNlciA9IChjaGFyX3UgKikiJHdobyI7CisJOnByaW50ID4+ICR0YXJnZXQgY2hhcl91ICpjb21waWxlZF9zeXMgPSAoY2hhcl91ICopIiR3aGVyZSI7CisKKworIyMjIE5hbWVzIG9mIHRoZSBwcm9ncmFtcyBhbmQgdGFyZ2V0cworVklNVEFSR0VUCT0gJFZJTU5BTUUkRVhFU1VGCitFWFRBUkdFVAk9ICRFWE5BTUUkTE5LU1VGCitWSUVXVEFSR0VUCT0gJFZJRVdOQU1FJExOS1NVRgorR1ZJTU5BTUUJPSBnJFZJTU5BTUUKK0dWSU1UQVJHRVQJPSAkR1ZJTU5BTUUkTE5LU1VGCitHVklFV05BTUUJPSBnJFZJRVdOQU1FCitHVklFV1RBUkdFVAk9ICRHVklFV05BTUUkTE5LU1VGCitSVklNTkFNRQk9IHIkVklNTkFNRQorUlZJTVRBUkdFVAk9ICRSVklNTkFNRSRMTktTVUYKK1JWSUVXTkFNRQk9IHIkVklFV05BTUUKK1JWSUVXVEFSR0VUCT0gJFJWSUVXTkFNRSRMTktTVUYKK1JHVklNTkFNRQk9IHIkR1ZJTU5BTUUKK1JHVklNVEFSR0VUCT0gJFJHVklNTkFNRSRMTktTVUYKK1JHVklFV05BTUUJPSByJEdWSUVXTkFNRQorUkdWSUVXVEFSR0VUCT0gJFJHVklFV05BTUUkTE5LU1VGCitWSU1ESUZGTkFNRQk9ICQoVklNTkFNRSlkaWZmCitHVklNRElGRk5BTUUJPSBnJFZJTURJRkZOQU1FCitWSU1ESUZGVEFSR0VUCT0gJFZJTURJRkZOQU1FJExOS1NVRgorR1ZJTURJRkZUQVJHRVQJPSAkR1ZJTURJRkZOQU1FJExOS1NVRgorRVZJTU5BTUUJPSBlJFZJTU5BTUUKK0VWSU1UQVJHRVQJPSAkRVZJTU5BTUUkTE5LU1VGCitFVklFV05BTUUJPSBlJFZJRVdOQU1FCitFVklFV1RBUkdFVAk9ICRFVklFV05BTUUkTE5LU1VGCisKKyMjIyBOYW1lcyBvZiB0aGUgdG9vbHMgdGhhdCBhcmUgYWxzbyBtYWRlCitUT09MUyA9IHh4ZC94eGQkRVhFU1VGCisKKyMgUm9vdCBvZiB0aGUgaW5zdGFsbGF0aW9uIHRyZWUuICBFbXB0eSBmb3IgYSBub3JtYWwgaW5zdGFsbCwgc2V0IHRvIGFuCisjIGV4aXN0aW5nIHBhdGggdG8gaW5zdGFsbCBpbnRvIGEgc3BlY2lhbCBwbGFjZSAoZm9yIGdlbmVyYXRpbmcgYSBwYWNrYWdlKS4KK0RFU1RESVIgPz0KKworIyMjIExvY2F0aW9uIG9mIG1hbiBwYWdlcworTUFOU1VCRElSID0gJE1BTkRJUi9tYW4xCisKKyMjIyBMb2NhdGlvbiBvZiBWaW0gZmlsZXMgKHNob3VsZCBub3QgbmVlZCB0byBiZSBjaGFuZ2VkLCBhbmQKKyMjIyBzb21lIHRoaW5ncyBtaWdodCBub3Qgd29yayB3aGVuIHRoZXkgYXJlIGNoYW5nZWQhKQorVklNRElSID0gL3ZpbQorQHIgPSByZS5jb21waWxlKCcuKlZJTV9WRVJTSU9OX05PRE9UXFxzKiIodmltXFxkXFxkW14iXSopIi4qJywgcmUuUykKK1ZJTVJURElSID0gL2ByLm1hdGNoKG9wZW4oInZlcnNpb24uaCIpLnJlYWQoKSkuZ3JvdXAoMSlgCitIRUxQU1VCRElSID0gL2RvYworQ09MU1VCRElSID0gL2NvbG9ycworU1lOU1VCRElSID0gL3N5bnRheAorSU5EU1VCRElSID0gL2luZGVudAorUExVR1NVQkRJUiA9IC9wbHVnaW4KK0ZUUExVR1NVQkRJUiA9IC9mdHBsdWdpbgorTEFOR1NVQkRJUiA9IC9sYW5nCitDT01QU1VCRElSID0gL2NvbXBpbGVyCitLTUFQU1VCRElSID0gL2tleW1hcAorTUFDUk9TVUJESVIgPSAvbWFjcm9zCitUT09MU1NVQkRJUiA9IC90b29scworVFVUT1JTVUJESVIgPSAvdHV0b3IKK1BSSU5UU1VCRElSID0gL3ByaW50CitQT0RJUiA9IHBvCisKKyMjIyBWSU1MT0MJY29tbW9uIHJvb3Qgb2YgdGhlIFZpbSBmaWxlcyAoYWxsIHZlcnNpb25zKQorIyMjIFZJTVJUTE9DCWNvbW1vbiByb290IG9mIHRoZSBydW50aW1lIFZpbSBmaWxlcyAodGhpcyB2ZXJzaW9uKQorIyMjIFZJTVJDTE9DCWNvbXBpbGVkLWluIGxvY2F0aW9uIGZvciBnbG9iYWwgW2dddmltcmMgZmlsZXMgKGFsbCB2ZXJzaW9ucykKKyMjIyBWSU1SVU5USU1FRElSICBjb21waWxlZC1pbiBsb2NhdGlvbiBmb3IgcnVudGltZSBmaWxlcyAob3B0aW9uYWwpCisjIyMgSEVMUFNVQkxPQwlsb2NhdGlvbiBmb3IgaGVscCBmaWxlcworIyMjIENPTFNVQkxPQwlsb2NhdGlvbiBmb3IgY29sb3JzY2hlbWUgZmlsZXMKKyMjIyBTWU5TVUJMT0MJbG9jYXRpb24gZm9yIHN5bnRheCBmaWxlcworIyMjIElORFNVQkxPQwlsb2NhdGlvbiBmb3IgaW5kZW50IGZpbGVzCisjIyMgUExVR1NVQkxPQwlsb2NhdGlvbiBmb3Igc3RhbmRhcmQgcGx1Z2luIGZpbGVzCisjIyMgRlRQTFVHU1VCTE9DICBsb2NhdGlvbiBmb3IgZnRwbHVnaW4gZmlsZXMKKyMjIyBMQU5HU1VCTE9DCWxvY2F0aW9uIGZvciBsYW5ndWFnZSBmaWxlcworIyMjIENPTVBTVUJMT0MJbG9jYXRpb24gZm9yIGNvbXBpbGVyIGZpbGVzCisjIyMgS01BUFNVQkxPQwlsb2NhdGlvbiBmb3Iga2V5bWFwIGZpbGVzCisjIyMgTUFDUk9TVUJMT0MJbG9jYXRpb24gZm9yIG1hY3JvIGZpbGVzCisjIyMgVE9PTFNTVUJMT0MJbG9jYXRpb24gZm9yIHRvb2xzIGZpbGVzCisjIyMgVFVUT1JTVUJMT0MJbG9jYXRpb24gZm9yIHR1dG9yIGZpbGVzCisjIyMgUFJJTlRTVUJMT0MJbG9jYXRpb24gZm9yIHByaW50IGZpbGVzCisjIyMgU0NSSVBUTE9DCWxvY2F0aW9uIGZvciBzY3JpcHQgZmlsZXMgKG1lbnUudmltLCBidWdyZXBvcnQudmltLCAuLikKKyMjIyBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIGlmIHlvdSB3YW50IHRvIGluc3RhbGwgdGhlbSBzb21ld2hlcmUgZWxzZS4KKyMjIyBFZGl0IGZlYXR1cmUuaCBmb3IgY29tcGlsZS10aW1lIHNldHRpbmdzLgorVklNTE9DCQk9ICREQVRBRElSJFZJTURJUgorVklNUlRMT0MJPSAkREFUQURJUiRWSU1ESVIkVklNUlRESVIKK1ZJTVJDTE9DCT0gJFZJTUxPQworSEVMUFNVQkxPQwk9ICRWSU1SVExPQyRIRUxQU1VCRElSCitDT0xTVUJMT0MJPSAkVklNUlRMT0MkQ09MU1VCRElSCitTWU5TVUJMT0MJPSAkVklNUlRMT0MkU1lOU1VCRElSCitJTkRTVUJMT0MJPSAkVklNUlRMT0MkSU5EU1VCRElSCitQTFVHU1VCTE9DCT0gJFZJTVJUTE9DJFBMVUdTVUJESVIKK0ZUUExVR1NVQkxPQwk9ICRWSU1SVExPQyRGVFBMVUdTVUJESVIKK0xBTkdTVUJMT0MJPSAkVklNUlRMT0MkTEFOR1NVQkRJUgorQ09NUFNVQkxPQwk9ICRWSU1SVExPQyRDT01QU1VCRElSCitLTUFQU1VCTE9DCT0gJFZJTVJUTE9DJEtNQVBTVUJESVIKK01BQ1JPU1VCTE9DCT0gJFZJTVJUTE9DJE1BQ1JPU1VCRElSCitUT09MU1NVQkxPQwk9ICRWSU1SVExPQyRUT09MU1NVQkRJUgorVFVUT1JTVUJMT0MJPSAkVklNUlRMT0MkVFVUT1JTVUJESVIKK1BSSU5UU1VCTE9DCT0gJFZJTVJUTE9DJFBSSU5UU1VCRElSCitTQ1JJUFRMT0MJPSAkVklNUlRMT0MKKworIyMjIE9ubHkgc2V0IFZJTVJVTlRJTUVESVIgd2hlbiBWSU1SVExPQyBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24gYW5kCisjIyMgdGhlIHJ1bnRpbWUgZGlyZWN0b3J5IGlzIG5vdCBiZWxvdyBpdC4KKyNWSU1SVU5USU1FRElSID0gJFZJTVJUTE9DCisKKyMjIyBOYW1lIG9mIHRoZSBldmltIGZpbGUgdGFyZ2V0LgorRVZJTV9GSUxFCT0gJERFU1RESVIkU0NSSVBUTE9DL2V2aW0udmltCitNU1dJTl9GSUxFCT0gJERFU1RESVIkU0NSSVBUTE9DL21zd2luLnZpbQorCisjIyMgTmFtZSBvZiB0aGUgbWVudSBmaWxlIHRhcmdldC4KK1NZU19NRU5VX0ZJTEUJPSAkREVTVERJUiRTQ1JJUFRMT0MvbWVudS52aW0KK1NZU19TWU5NRU5VX0ZJTEUgPSAkREVTVERJUiRTQ1JJUFRMT0Mvc3lubWVudS52aW0KK1NZU19ERUxNRU5VX0ZJTEUgPSAkREVTVERJUiRTQ1JJUFRMT0MvZGVsbWVudS52aW0KKworIyMjIE5hbWUgb2YgdGhlIGJ1Z3JlcG9ydCBmaWxlIHRhcmdldC4KK1NZU19CVUdSX0ZJTEUJPSAkREVTVERJUiRTQ1JJUFRMT0MvYnVncmVwb3J0LnZpbQorCisjIyMgTmFtZSBvZiB0aGUgZmlsZSB0eXBlIGRldGVjdGlvbiBmaWxlIHRhcmdldC4KK1NZU19GSUxFVFlQRV9GSUxFID0gJERFU1RESVIkU0NSSVBUTE9DL2ZpbGV0eXBlLnZpbQorCisjIyMgTmFtZSBvZiB0aGUgZmlsZSB0eXBlIGRldGVjdGlvbiBmaWxlIHRhcmdldC4KK1NZU19GVE9GRl9GSUxFCT0gJERFU1RESVIkU0NSSVBUTE9DL2Z0b2ZmLnZpbQorCisjIyMgTmFtZSBvZiB0aGUgZmlsZSB0eXBlIGRldGVjdGlvbiBzY3JpcHQgZmlsZSB0YXJnZXQuCitTWVNfU0NSSVBUU19GSUxFID0gJERFU1RESVIkU0NSSVBUTE9DL3NjcmlwdHMudmltCisKKyMjIyBOYW1lIG9mIHRoZSBmdHBsdWdpbi1vbiBmaWxlIHRhcmdldC4KK1NZU19GVFBMVUdJTl9GSUxFID0gJERFU1RESVIkU0NSSVBUTE9DL2Z0cGx1Z2luLnZpbQorCisjIyMgTmFtZSBvZiB0aGUgZnRwbHVnaW4tb2ZmIGZpbGUgdGFyZ2V0LgorU1lTX0ZUUExVR09GX0ZJTEUgPSAkREVTVERJUiRTQ1JJUFRMT0MvZnRwbHVnb2YudmltCisKKyMjIyBOYW1lIG9mIHRoZSBpbmRlbnQtb24gZmlsZSB0YXJnZXQuCitTWVNfSU5ERU5UX0ZJTEUgPSAkREVTVERJUiRTQ1JJUFRMT0MvaW5kZW50LnZpbQorCisjIyMgTmFtZSBvZiB0aGUgaW5kZW50LW9mZiBmaWxlIHRhcmdldC4KK1NZU19JTkRPRkZfRklMRSA9ICRERVNURElSJFNDUklQVExPQy9pbmRvZmYudmltCisKKyMjIyBOYW1lIG9mIHRoZSBvcHRpb24gd2luZG93IHNjcmlwdCBmaWxlIHRhcmdldC4KK1NZU19PUFRXSU5fRklMRSA9ICRERVNURElSJFNDUklQVExPQy9vcHR3aW4udmltCisKKyMjIyBQZXJtaXNzaW9ucyBmb3IgYmluYXJpZXMKK0JJTk1PRCA9IDc1NQorCisjIyMgUGVybWlzc2lvbnMgZm9yIG1hbiBwYWdlCitNQU5NT0QgPSA2NDQKKworIyMjIFBlcm1pc3Npb25zIGZvciBoZWxwIGZpbGVzCitIRUxQTU9EID0gNjQ0CisKKyMjIyBQZXJtaXNzaW9ucyBmb3IgUGVybCBhbmQgc2hlbGwgc2NyaXB0cworU0NSSVBUTU9EID0gNzU1CisKKyMjIyBQZXJtaXNzaW9uIGZvciBWaW0gc2NyaXB0IGZpbGVzIChtZW51LnZpbSwgYnVncmVwb3J0LnZpbSwgLi4pCitWSU1TQ1JJUFRNT0QgPSA2NDQKKworIyMjIFBlcm1pc3Npb25zIGZvciBhbGwgZGlyZWN0b3JpZXMgdGhhdCBhcmUgY3JlYXRlZAorRElSTU9EID0gNzU1CisKKyMjIyBQZXJtaXNzaW9ucyBmb3IgYWxsIG90aGVyIGZpbGVzIHRoYXQgYXJlIGNyZWF0ZWQKK0ZJTEVNT0QgPSA2NDQKKworIyBXaGVyZSB0byBjb3B5IHRoZSBtYW4gYW5kIGhlbHAgZmlsZXMgZnJvbQorSEVMUFNPVVJDRSA9IC4uL3J1bnRpbWUvZG9jCisKKyMgV2hlcmUgdG8gY29weSB0aGUgc2NyaXB0IGZpbGVzIGZyb20gKG1lbnUsIGJ1Z3JlcG9ydCkKK1NDUklQVFNPVVJDRSA9IC4uL3J1bnRpbWUKKworIyBXaGVyZSB0byBjb3B5IHRoZSBjb2xvcnNjaGVtZSBmaWxlcyBmcm9tCitDT0xTT1VSQ0UgPSAuLi9ydW50aW1lL2NvbG9ycworCisjIFdoZXJlIHRvIGNvcHkgdGhlIHN5bnRheCBmaWxlcyBmcm9tCitTWU5TT1VSQ0UgPSAuLi9ydW50aW1lL3N5bnRheAorCisjIFdoZXJlIHRvIGNvcHkgdGhlIGluZGVudCBmaWxlcyBmcm9tCitJTkRTT1VSQ0UgPSAuLi9ydW50aW1lL2luZGVudAorCisjIFdoZXJlIHRvIGNvcHkgdGhlIHN0YW5kYXJkIHBsdWdpbiBmaWxlcyBmcm9tCitQTFVHU09VUkNFID0gLi4vcnVudGltZS9wbHVnaW4KKworIyBXaGVyZSB0byBjb3B5IHRoZSBmdHBsdWdpbiBmaWxlcyBmcm9tCitGVFBMVUdTT1VSQ0UgPSAuLi9ydW50aW1lL2Z0cGx1Z2luCisKKyMgV2hlcmUgdG8gY29weSB0aGUgbWFjcm8gZmlsZXMgZnJvbQorTUFDUk9TT1VSQ0UgPSAuLi9ydW50aW1lL21hY3JvcworCisjIFdoZXJlIHRvIGNvcHkgdGhlIHRvb2xzIGZpbGVzIGZyb20KK1RPT0xTU09VUkNFID0gLi4vcnVudGltZS90b29scworCisjIFdoZXJlIHRvIGNvcHkgdGhlIHR1dG9yIGZpbGVzIGZyb20KK1RVVE9SU09VUkNFID0gLi4vcnVudGltZS90dXRvcgorCisjIFdoZXJlIHRvIGxvb2sgZm9yIGxhbmd1YWdlIHNwZWNpZmljIGZpbGVzCitMQU5HU09VUkNFID0gLi4vcnVudGltZS9sYW5nCisKKyMgV2hlcmUgdG8gbG9vayBmb3IgY29tcGlsZXIgZmlsZXMKK0NPTVBTT1VSQ0UgPSAuLi9ydW50aW1lL2NvbXBpbGVyCisKKyMgV2hlcmUgdG8gbG9vayBmb3Iga2V5bWFwIGZpbGVzCitLTUFQU09VUkNFID0gLi4vcnVudGltZS9rZXltYXAKKworIyBXaGVyZSB0byBsb29rIGZvciBwcmludCByZXNvdXJjZSBmaWxlcworUFJJTlRTT1VSQ0UgPSAuLi9ydW50aW1lL3ByaW50CisKKyMgYWJicmV2aWF0aW9ucworREVTVF9CSU4gPSAkREVTVERJUiRCSU5ESVIKK0RFU1RfVklNID0gJERFU1RESVIkVklNTE9DCitERVNUX1JUID0gJERFU1RESVIkVklNUlRMT0MKK0RFU1RfSEVMUCA9ICRERVNURElSJEhFTFBTVUJMT0MKK0RFU1RfQ09MID0gJERFU1RESVIkQ09MU1VCTE9DCitERVNUX1NZTiA9ICRERVNURElSJFNZTlNVQkxPQworREVTVF9JTkQgPSAkREVTVERJUiRJTkRTVUJMT0MKK0RFU1RfUExVRyA9ICRERVNURElSJFBMVUdTVUJMT0MKK0RFU1RfRlRQID0gJERFU1RESVIkRlRQTFVHU1VCTE9DCitERVNUX0xBTkcgPSAkREVTVERJUiRMQU5HU1VCTE9DCitERVNUX0NPTVAgPSAkREVTVERJUiRDT01QU1VCTE9DCitERVNUX0tNQVAgPSAkREVTVERJUiRLTUFQU1VCTE9DCitERVNUX01BQ1JPID0gJERFU1RESVIkTUFDUk9TVUJMT0MKK0RFU1RfVE9PTFMgPSAkREVTVERJUiRUT09MU1NVQkxPQworREVTVF9UVVRPUiA9ICRERVNURElSJFRVVE9SU1VCTE9DCitERVNUX1NDUklQVCA9ICRERVNURElSJFNDUklQVExPQworREVTVF9QUklOVCA9ICRERVNURElSJFBSSU5UU1VCTE9DCitERVNUX01BTiA9ICRERVNURElSJE1BTlNVQkRJUgorCisjIFRoZXNlIGFyZSBkaXJlY3RvcmllcywgY3JlYXRlIHRoZW0gd2hlbiBuZWVkZWQuCis6YXR0ciB7ZGlyZWN0b3J5ID0gJERJUk1PRH0gJERFU1RfQklOICRERVNUX1ZJTSAkREVTVF9SVCAkREVTVF9IRUxQICRERVNUX0NPTAorCQkkREVTVF9TWU4gJERFU1RfSU5EICRERVNUX1BMVUcgJERFU1RfRlRQICRERVNUX0xBTkcKKwkJJERFU1RfQ09NUCAkREVTVF9LTUFQICRERVNUX01BQ1JPICRERVNUX1RPT0xTICRERVNUX1RVVE9SCisJCSRERVNUX1NDUklQVCAkREVTVF9QUklOVCAkREVTVF9NQU4KKworIworIyBJIE4gUyBUIEEgTCBMCisjCitpbnN0YWxsOgorICAgIEBpZiBub3Qgb3MucGF0aC5pc2Rpcihfbm8uREVTVF9CSU4pOgorICAgICAgICBAdHJ5OgorICAgICAgICAgICAgOm1rZGlyICRERVNUX0JJTgorICAgICAgICBAZXhjZXB0OgorICAgICAgICBAICAgcGFzcworICAgIEBpZiBvcy5hY2Nlc3MoX25vLkRFU1RfQklOLCBvcy5XX09LKToKKyAgICAgICAgIyBCaW4gZGlyZWN0b3J5IGlzIHdyaXRhYmxlLCBpbnN0YWxsIGRpcmVjdGx5LgorICAgICAgICA6dXBkYXRlIGluc3RhbGx2aW0gaW5zdGFsbHRvb2xzIGluc3RhbGwtbGFuZ3VhZ2VzIGluc3RhbGwtaWNvbnMKKyAgICBAZWxzZToKKyAgICAgICAgIyBCaW4gZGlyZWN0b3J5IGlzIG5vdCB3cml0YWJsZSwgbmVlZCB0byBiZWNvbWUgcm9vdC4KKwk6cHJpbnQgVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSAiJERFU1RfQklOIiBpcyBub3Qgd3JpdGFibGUuCisJOnByaW50IElmIHRoaXMgaXMgdGhlIHdyb25nIGRpcmVjdG9yeSwgdXNlIFBSRUZJWCB0byBzcGVjaWZ5IGFub3RoZXIgb25lLgorICAgICAgICA6cHJpbnQgT3RoZXJ3aXNlLCB0eXBlIHRoZSByb290IHBhc3N3b3JkIHRvIGNvbnRpbnVlIGluc3RhbGxpbmcuCisgICAgICAgIDphc3Jvb3QgJEFBUCBpbnN0YWxsCisKK2luc3RhbGx2aW0ge3ZpcnR1YWx9OiBpbnN0YWxsdmltYmluIGluc3RhbGxydW50aW1lIGluc3RhbGxsaW5rcyBcCisJCQlpbnN0YWxsaGVscGxpbmtzIGluc3RhbGxtYWNyb3MgaW5zdGFsbHR1dG9yCisKK2luc3RhbGx2aW1iaW4ge3ZpcnR1YWx9e2ZvcmNlfTogJFRhcmdldCAkREVTVF9CSU4KKwlleGUgPSAkREVTVF9CSU4vJFZJTVRBUkdFVAorCUBpZiBvcy5wYXRoLmV4aXN0cyhleGUpOgorCSAgICAjIE1vdmUgdGhlIG9sZCBleGVjdXRhYmxlIGFzaWRlIGFuZCBkZWxldGUgaXQuICBBbnkgb3RoZXIgbWV0aG9kCisJICAgICMgbWF5IGNhdXNlIGEgY3Jhc2ggaWYgdGhlIGV4ZWN1dGFibGUgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQuCisJICAgIDptb3ZlIHtmb3JjZX0gJGV4ZSAkKGV4ZSkucm0KKwkgICAgOmRlbCB7Zm9yY2V9ICQoZXhlKS5ybQorCTpjb3B5ICRWSU1UQVJHRVQgJERFU1RfQklOCisJOmRvIHN0cmlwICRleGUKKwk6Y2htb2QgJEJJTk1PRCAkREVTVF9CSU4vJFZJTVRBUkdFVAorIyBtYXkgY3JlYXRlIGEgbGluayB0byB0aGUgbmV3IGV4ZWN1dGFibGUgZnJvbSAvdXNyL2Jpbi92aQorCUBpZiBfbm8uZ2V0KCJMSU5LSVQiKToKKwkgICAgOnN5cyAkTElOS0lUCisKKyMgaW5zdGFsbCB0aGUgaGVscCBmaWxlczsgZmlyc3QgYWRqdXN0IHRoZSBjb250ZW50cyBmb3IgdGhlIGxvY2F0aW9uCitpbnN0YWxscnVudGltZSB7dmlydHVhbH17Zm9yY2V9OiAkSEVMUFNPVVJDRS92aW0uMSAkREVTVF9NQU4gJERFU1RfVklNCisJCSRERVNUX1JUICRERVNUX0hFTFAgJERFU1RfQ09MICRERVNUX1NZTiAkREVTVF9JTkQKKwkJJERFU1RfRlRQICRERVNUX1BMVUcgJERFU1RfVFVUT1IgJERFU1RfQ09NUCAkREVTVF9QUklOVAorCTpwcmludCBnZW5lcmF0aW5nICRERVNUX01BTi8kKFZJTU5BTUUpLjEKKwk6Y2F0ICRIRUxQU09VUkNFL3ZpbS4xIHwKKwkJOmV2YWwgcmUuc3ViKCIvdXNyL2xvY2FsL2xpYi92aW0iLCBfbm8uVklNTE9DLCBzdGRpbikgfAorCQk6ZXZhbCByZS5zdWIoX25vLlZJTUxPQyArICIvZG9jIiwgX25vLkhFTFBTVUJMT0MsIHN0ZGluKSB8CisJCTpldmFsIHJlLnN1Yihfbm8uVklNTE9DICsgIi9zeW50YXgiLCBfbm8uU1lOU1VCTE9DLCBzdGRpbikgfAorCQk6ZXZhbCByZS5zdWIoX25vLlZJTUxPQyArICIvdHV0b3IiLCBfbm8uVFVUT1JTVUJMT0MsIHN0ZGluKSB8CisJCTpldmFsIHJlLnN1Yihfbm8uVklNTE9DICsgIi92aW1yYyIsCisJCQkJCSAgICAgICBfbm8uVklNUkNMT0MgKyAiL3ZpbXJjIiwgc3RkaW4pIHwKKwkJOmV2YWwgcmUuc3ViKF9uby5WSU1MT0MgKyAiL2d2aW1yYyIsCisJCQkJCSAgICAgIF9uby5WSU1SQ0xPQyArICIvZ3ZpbXJjIiwgc3RkaW4pIHwKKwkJOmV2YWwgcmUuc3ViKF9uby5WSU1MT0MgKyAiL21lbnUudmltIiwKKwkJCQkJICAgX25vLlNDUklQVExPQyArICIvbWVudS52aW0iLCBzdGRpbikgfAorCQk6ZXZhbCByZS5zdWIoX25vLlZJTUxPQyArICIvYnVncmVwb3J0LnZpbSIsCisJCQkJICAgICAgX25vLlNDUklQVExPQyArICIvYnVncmVwb3J0LnZpbSIsIHN0ZGluKSB8CisJCTpldmFsIHJlLnN1Yihfbm8uVklNTE9DICsgIi9maWxldHlwZS52aW0iLAorCQkJCSAgICAgICBfbm8uU0NSSVBUTE9DICsgIi9maWxldHlwZS52aW0iLCBzdGRpbikgfAorCQk6ZXZhbCByZS5zdWIoX25vLlZJTUxPQyArICIvZnRvZmYudmltIiwKKwkJCQkJICBfbm8uU0NSSVBUTE9DICsgIi9mdG9mZi52aW0iLCBzdGRpbikgfAorCQk6ZXZhbCByZS5zdWIoX25vLlZJTUxPQyArICIvc2NyaXB0cy52aW0iLAorCQkJCQlfbm8uU0NSSVBUTE9DICsgIi9zY3JpcHRzLnZpbSIsIHN0ZGluKSB8CisJCTpldmFsIHJlLnN1Yihfbm8uVklNTE9DICsgIi9vcHR3aW4udmltIiwKKwkJCQkJIF9uby5TQ1JJUFRMT0MgKyAiL29wdHdpbi52aW0iLCBzdGRpbikgfAorCQk6ZXZhbCByZS5zdWIoX25vLlZJTUxPQyArICIvXFwqLnBzIiwKKwkJCQkJCSBfbm8uU0NSSVBUTE9DICsgIi8qLnBzIiwgc3RkaW4pCisJCT4hICRERVNUX01BTi8kKFZJTU5BTUUpLjEKKwk6Y2htb2QgJE1BTk1PRCAkREVTVF9NQU4vJChWSU1OQU1FKS4xCisKKwk6cHJpbnQgZ2VuZXJhdGluZyAkREVTVF9NQU4vJChWSU1OQU1FKXR1dG9yLjEKKwk6Y2F0ICRIRUxQU09VUkNFL3ZpbXR1dG9yLjEgfAorCQk6ZXZhbCByZS5zdWIoIi91c3IvbG9jYWwvbGliL3ZpbSIsIF9uby5WSU1MT0MsIHN0ZGluKSB8CisJCTpldmFsIHJlLnN1Yihfbm8uVklNTE9DICsgIi90dXRvciIsIF9uby5UVVRPUlNVQkxPQywgc3RkaW4pCisJCT4hICRERVNUX01BTi8kKFZJTU5BTUUpdHV0b3IuMQorCTpjaG1vZCAkTUFOTU9EICRERVNUX01BTi8kKFZJTU5BTUUpdHV0b3IuMQorCisJOmNvcHkgJEhFTFBTT1VSQ0UvdmltZGlmZi4xICRERVNUX01BTi8kKFZJTURJRkZOQU1FKS4xCisJOmNobW9kICRNQU5NT0QgJERFU1RfTUFOLyQoVklNRElGRk5BTUUpLjEKKworCTpwcmludCBnZW5lcmF0aW5nICRERVNUX01BTi8kKEVWSU1OQU1FKS4xCisJOmNhdCAkSEVMUFNPVVJDRS9ldmltLjEgfAorCQk6ZXZhbCByZS5zdWIoIi91c3IvbG9jYWwvbGliL3ZpbSIsIF9uby5TQ1JJUFRMT0MsIHN0ZGluKQorCQk+ISAkREVTVF9NQU4vJChFVklNTkFNRSkuMQorCTpjaG1vZCAkTUFOTU9EICRERVNUX01BTi8kKEVWSU1OQU1FKS4xCisKKyAgICAgICAgOmNkICRIRUxQU09VUkNFCisgICAgICAgIEB0cnk6CisgICAgICAgICAgICBYVFJBID0gYGdsb2IuZ2xvYigiKi4/P3giKWAgYGdsb2IuZ2xvYigidGFncy0/PyIpYAorICAgICAgICBAZXhjZXB0OgorICAgICAgICAgICAgWFRSQSA9ICAgICAgICMgSXQncyBPSyBpZiB0aGVyZSBhcmUgbm8gbWF0Y2hlcy4KKwk6Y29weSAqLnR4dCB0YWdzICRYVFJBICRERVNUX0hFTFAKKyAgICAgICAgOmNkIC0KKyAgICAgICAgOmNkICRERVNUX0hFTFAKKwk6Y2htb2QgJEhFTFBNT0QgKi50eHQgdGFncyAkWFRSQQorICAgICAgICA6Y2QgLQorCTpjb3B5ICAkSEVMUFNPVVJDRS8qLnBsICRERVNUX0hFTFAKKwk6Y2htb2QgJFNDUklQVE1PRCAkREVTVF9IRUxQLyoucGwKKyMgaW5zdGFsbCB0aGUgbWVudSBmaWxlcworCTpjb3B5ICRTQ1JJUFRTT1VSQ0UvbWVudS52aW0gJFNZU19NRU5VX0ZJTEUKKwk6Y2htb2QgJFZJTVNDUklQVE1PRCAkU1lTX01FTlVfRklMRQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0Uvc3lubWVudS52aW0gJFNZU19TWU5NRU5VX0ZJTEUKKwk6Y2htb2QgJFZJTVNDUklQVE1PRCAkU1lTX1NZTk1FTlVfRklMRQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0UvZGVsbWVudS52aW0gJFNZU19ERUxNRU5VX0ZJTEUKKwk6Y2htb2QgJFZJTVNDUklQVE1PRCAkU1lTX0RFTE1FTlVfRklMRQorIyBpbnN0YWxsIHRoZSBldmltIGZpbGUKKwk6Y29weSAkU0NSSVBUU09VUkNFL21zd2luLnZpbSAkTVNXSU5fRklMRQorCTpjaG1vZCAkVklNU0NSSVBUTU9EICRNU1dJTl9GSUxFCisJOmNvcHkgJFNDUklQVFNPVVJDRS9ldmltLnZpbSAkRVZJTV9GSUxFCisJOmNobW9kICRWSU1TQ1JJUFRNT0QgJEVWSU1fRklMRQorIyBpbnN0YWxsIHRoZSBidWdyZXBvcnQgZmlsZQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0UvYnVncmVwb3J0LnZpbSAkU1lTX0JVR1JfRklMRQorCTpjaG1vZCAkVklNU0NSSVBUTU9EICRTWVNfQlVHUl9GSUxFCisjIGluc3RhbGwgdGhlIGV4YW1wbGUgdmltcmMgZmlsZXMKKwk6Y29weSAkU0NSSVBUU09VUkNFL3ZpbXJjX2V4YW1wbGUudmltICRERVNUX1NDUklQVAorCTpjaG1vZCAkVklNU0NSSVBUTU9EICRERVNUX1NDUklQVC92aW1yY19leGFtcGxlLnZpbQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0UvZ3ZpbXJjX2V4YW1wbGUudmltICRERVNUX1NDUklQVAorCTpjaG1vZCAkVklNU0NSSVBUTU9EICRERVNUX1NDUklQVC9ndmltcmNfZXhhbXBsZS52aW0KKyMgaW5zdGFsbCB0aGUgZmlsZSB0eXBlIGRldGVjdGlvbiBmaWxlcworCTpjb3B5ICRTQ1JJUFRTT1VSQ0UvZmlsZXR5cGUudmltICRTWVNfRklMRVRZUEVfRklMRQorCTpjaG1vZCAkVklNU0NSSVBUTU9EICRTWVNfRklMRVRZUEVfRklMRQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0UvZnRvZmYudmltICRTWVNfRlRPRkZfRklMRQorCTpjaG1vZCAkVklNU0NSSVBUTU9EICRTWVNfRlRPRkZfRklMRQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0Uvc2NyaXB0cy52aW0gJFNZU19TQ1JJUFRTX0ZJTEUKKwk6Y2htb2QgJFZJTVNDUklQVE1PRCAkU1lTX1NDUklQVFNfRklMRQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0UvZnRwbHVnaW4udmltICRTWVNfRlRQTFVHSU5fRklMRQorCTpjaG1vZCAkVklNU0NSSVBUTU9EICRTWVNfRlRQTFVHSU5fRklMRQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0UvZnRwbHVnb2YudmltICRTWVNfRlRQTFVHT0ZfRklMRQorCTpjaG1vZCAkVklNU0NSSVBUTU9EICRTWVNfRlRQTFVHT0ZfRklMRQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0UvaW5kZW50LnZpbSAkU1lTX0lOREVOVF9GSUxFCisJOmNobW9kICRWSU1TQ1JJUFRNT0QgJFNZU19JTkRFTlRfRklMRQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0UvaW5kb2ZmLnZpbSAkU1lTX0lORE9GRl9GSUxFCisJOmNobW9kICRWSU1TQ1JJUFRNT0QgJFNZU19JTkRPRkZfRklMRQorCTpjb3B5ICRTQ1JJUFRTT1VSQ0Uvb3B0d2luLnZpbSAkU1lTX09QVFdJTl9GSUxFCisJOmNobW9kICRWSU1TQ1JJUFRNT0QgJFNZU19PUFRXSU5fRklMRQorIyBpbnN0YWxsIHRoZSBwcmludCByZXNvdXJjZSBmaWxlcworCTpjb3B5ICRQUklOVFNPVVJDRS8qLnBzICRERVNUX1BSSU5UCisJOmNobW9kICRGSUxFTU9EICRERVNUX1BSSU5ULyoucHMKKyMgaW5zdGFsbCB0aGUgY29sb3JzY2hlbWUgZmlsZXMKKwk6Y29weSAkQ09MU09VUkNFLyoudmltICRDT0xTT1VSQ0UvUkVBRE1FLnR4dCAkREVTVF9DT0wKKwk6Y2htb2QgJEhFTFBNT0QgJERFU1RfQ09MLyoudmltICRERVNUX0NPTC9SRUFETUUudHh0CisjIGluc3RhbGwgdGhlIHN5bnRheCBmaWxlcworCTpjb3B5ICRTWU5TT1VSQ0UvKi52aW0gJFNZTlNPVVJDRS9SRUFETUUudHh0ICRERVNUX1NZTgorCTpjaG1vZCAkSEVMUE1PRCAkREVTVF9TWU4vKi52aW0gJERFU1RfU1lOL1JFQURNRS50eHQKKyMgaW5zdGFsbCB0aGUgaW5kZW50IGZpbGVzCisJOmNvcHkgJElORFNPVVJDRS8qLnZpbSAkSU5EU09VUkNFL1JFQURNRS50eHQgJERFU1RfSU5ECisJOmNobW9kICRIRUxQTU9EICRERVNUX0lORC8qLnZpbQorIyBpbnN0YWxsIHRoZSBzdGFuZGFyZCBwbHVnaW4gZmlsZXMKKwk6Y29weSAkUExVR1NPVVJDRS8qLnZpbSAkUExVR1NPVVJDRS9SRUFETUUudHh0ICRERVNUX1BMVUcKKwk6Y2htb2QgJEhFTFBNT0QgJERFU1RfUExVRy8qLnZpbSAkREVTVF9QTFVHL1JFQURNRS50eHQKKyMgaW5zdGFsbCB0aGUgZnRwbHVnaW4gZmlsZXMKKwk6Y29weSAkRlRQTFVHU09VUkNFLyoudmltICRGVFBMVUdTT1VSQ0UvUkVBRE1FLnR4dCAkREVTVF9GVFAKKwk6Y2htb2QgJEhFTFBNT0QgJERFU1RfRlRQLyoudmltICRERVNUX0ZUUC9SRUFETUUudHh0CisjIGluc3RhbGwgdGhlIGNvbXBpbGVyIGZpbGVzCisJOmNvcHkgJENPTVBTT1VSQ0UvKi52aW0gJENPTVBTT1VSQ0UvUkVBRE1FLnR4dCAkREVTVF9DT01QCisJOmNobW9kICRIRUxQTU9EICRERVNUX0NPTVAvKi52aW0gJERFU1RfQ09NUC9SRUFETUUudHh0CisKK2luc3RhbGxtYWNyb3Mge3ZpcnR1YWx9e2ZvcmNlfTogJE1BQ1JPU09VUkNFICRERVNUX1ZJTSAkREVTVF9SVCAkREVTVF9NQUNSTworCTpjb3B5IHtyZWN1cnNpdmV9e2ZvcmNlfSAkTUFDUk9TT1VSQ0UvKiAkREVTVF9NQUNSTworCSMgRGVsZXRlIGFueSBDVlMgYW5kIEFBUERJUiBkaXJlY3Rvcmllcy4KKwkjIFVzZSB0aGUgIjp0cmVlIiBjb21tYW5kIGlmIHBvc3NpYmxlLiAgSXQgd2FzIGFkZGVkIGxhdGVyLCBmYWxsIGJhY2sKKwkjIHRvIHVzaW5nICJmaW5kIiB3aGVuIGl0IGRvZXNuJ3Qgd29yay4KKwlAdHJ5OgorCSAgIDp0cmVlICRERVNUX01BQ1JPIHtkaXJuYW1lID0gQ1ZTfQorCSAgICAgIDpkZWwge3JlY3Vyc2l2ZX0gJG5hbWUKKwkgICA6dHJlZSAkREVTVF9NQUNSTyB7ZGlybmFtZSA9IEFBUERJUn0KKwkgICAgICA6ZGVsIHtyZWN1cnNpdmV9ICRuYW1lCisJICAgOnRyZWUgJERFU1RfTUFDUk8ge2Rpcm5hbWUgPSAuKn0KKwkgICAgICA6Y2htb2QgJERJUk1PRCAkbmFtZQorCSAgIDp0cmVlICRERVNUX01BQ1JPIHtmaWxlbmFtZSA9IC4qfQorCSAgICAgIDpjaG1vZCAkRklMRU1PRCAkbmFtZQorCUBleGNlcHQ6CisJQCAgb2ssIGN2c2RpcnMgPSByZWRpcl9zeXN0ZW0oJ2ZpbmQgJXMgLW5hbWUgQ1ZTIC1wcmludCcgJSBfbm8uREVTVF9NQUNSTykKKwlAICBpZiBvayBhbmQgY3ZzZGlyczoKKwkgICAgIDpkZWwge3JlY3Vyc2l2ZX0gJGN2c2RpcnMKKwkgICA6c3lzIGNobW9kICRESVJNT0QgYGBmaW5kICRERVNUX01BQ1JPIC10eXBlIGQgLXByaW50YGAKKwkgICA6c3lzIGNobW9kICRGSUxFTU9EIGBgZmluZCAkREVTVF9NQUNSTyAtdHlwZSBmIC1wcmludGBgCisJOmNobW9kICRTQ1JJUFRNT0QgJERFU1RfTUFDUk8vbGVzcy5zaAorCisjIGluc3RhbGwgdGhlIHR1dG9yIGZpbGVzCitpbnN0YWxsdHV0b3Ige3ZpcnR1YWx9e2ZvcmNlfTogJFRVVE9SU09VUkNFICRERVNUX1ZJTSAkREVTVF9SVCAkREVTVF9UVVRPUgorCTpjb3B5IHZpbXR1dG9yICRERVNUX0JJTi8kKFZJTU5BTUUpdHV0b3IKKwk6Y2htb2QgJFNDUklQVE1PRCAkREVTVF9CSU4vJChWSU1OQU1FKXR1dG9yCisJOmNvcHkgJFRVVE9SU09VUkNFL3R1dG9yKiAkVFVUT1JTT1VSQ0UvUkVBRE1FKiAkREVTVF9UVVRPUgorCTpjaG1vZCAkSEVMUE1PRCAkREVTVF9UVVRPUi8qCisKKyMgaW5zdGFsbCBoZWxwZXIgcHJvZ3JhbSB4eGQKK2luc3RhbGx0b29scyB7dmlydHVhbH17Zm9yY2V9OiAkVE9PTFMgJERFU1RfQklOICRERVNUX01BTiBcCisJCSRUT09MU1NPVVJDRSAkREVTVF9WSU0gJERFU1RfUlQgJERFU1RfVE9PTFMKKwl4eGQgPSAkREVTVF9CSU4veHhkJEVYRVNVRgorCUBpZiBvcy5wYXRoLmV4aXN0cyh4eGQpOgorCSAgOm1vdmUge2ZvcmNlfSAkeHhkICQoeHhkKS5ybQorCSAgOmRlbCAkKHh4ZCkucm0KKwk6Y29weSB4eGQveHhkJEVYRVNVRiAkREVTVF9CSU4KKwk6ZG8gc3RyaXAgJERFU1RfQklOL3h4ZCRFWEVTVUYKKwk6Y2htb2QgJEJJTk1PRCAkREVTVF9CSU4veHhkJEVYRVNVRgorCTpjb3B5ICRIRUxQU09VUkNFL3h4ZC4xICRERVNUX01BTgorCTpjaG1vZCAkTUFOTU9EICRERVNUX01BTi94eGQuMQorIyBpbnN0YWxsIHRoZSBydW50aW1lIHRvb2xzCisJQHRyeToKKwlAICBpZiBhYXBfaGFzKCI6dHJlZSIpOgorCSAgICAgICMgTmV3IG1ldGhvZDogY29weSBldmVyeXRoaW5nIGFuZCBkZWxldGUgQ1ZTIGFuZCBBQVBESVIgZGlycworCSAgICAgIDpjb3B5IHtyZWN1cnNpdmV9ICRUT09MU1NPVVJDRS8qICRERVNUX1RPT0xTCisJICAgICAgOnRyZWUgJERFU1RfVE9PTFMge2Rpcm5hbWUgPSBDVlN9CisJCSA6ZGVsZXRlIHtyZWN1cnNpdmV9ICRuYW1lCisJICAgICAgOnRyZWUgJERFU1RfVE9PTFMge2Rpcm5hbWUgPSBBQVBESVJ9CisJCSA6ZGVsZXRlIHtyZWN1cnNpdmV9ICRuYW1lCisJQGV4Y2VwdDoKKwkgICAgIyBPbGQgbWV0aG9kOiBjb3B5IG9ubHkgc3BlY2lmaWMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorCSAgICA6Y29weSB7cmVjdXJzaXZlfSAkVE9PTFNTT1VSQ0UvUkVBRE1FLnR4dCAkVE9PTFNTT1VSQ0UvW2Etel0qICRERVNUX1RPT0xTCisJOmNobW9kICRGSUxFTU9EICRERVNUX1RPT0xTLyoKKyMgcmVwbGFjZSB0aGUgcGF0aCBpbiBzb21lIHRvb2xzCisJOnByb2dzZWFyY2ggcGVybHBhdGggcGVybAorCUBpZiBwZXJscGF0aDoKKwkgICAgOmNhdCAkVE9PTFNTT1VSQ0UvZWZtX3BlcmwucGwgfAorCQkgICAgOmV2YWwgcmUuc3ViKCIvdXNyL2Jpbi9wZXJsIiwgcGVybHBhdGgsIHN0ZGluKQorCQkgICAgPiEgJERFU1RfVE9PTFMvZWZtX3BlcmwucGwKKwlAZWxzZToKKwkgICAgOmNvcHkgJFRPT0xTU09VUkNFL2VmbV9wZXJsLnBsICRERVNUX1RPT0xTCisKKwk6cHJvZ3NlYXJjaCBhd2twYXRoIG5hd2sgZ2F3ayBhd2sKKwlAaWYgYXdrcGF0aDoKKwkgICAgOmNhdCAkVE9PTFNTT1VSQ0UvbXZlLmF3ayB8CisJCSAgICA6ZXZhbCByZS5zdWIoIi91c3IvYmluL25hd2siLCBhd2twYXRoLCBzdGRpbikKKwkJICAgID4hICRERVNUX1RPT0xTL212ZS5hd2sKKwlAZWxzZToKKwkgICAgOmNvcHkgJFRPT0xTU09VUkNFL212ZS5hd2sgJERFU1RfVE9PTFMKKworCTpzeXMgY2htb2QgJFNDUklQVE1PRCBgYGdyZXAgLWwgIl4jISIgJERFU1RfVE9PTFMvKmBgCisKKyMgaW5zdGFsbCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWMgZmlsZXMsIGlmIHRoZXkgd2VyZSB1bnBhY2tlZAoraW5zdGFsbC1sYW5ndWFnZXMge3ZpcnR1YWx9e2ZvcmNlfTogbGFuZ3VhZ2VzICRERVNUX0xBTkcgJERFU1RfS01BUAorCUBpZiBfbm8uTUFLRU1POgorCSAgIDpzeXMgY2QgJFBPRElSOyAkTUFLRSBwcmVmaXg9JERFU1RESVIkcHJlZml4IFwKKwkJICAgIExPQ0FMRURJUj0kREVTVF9MQU5HIElOU1RBTExfREFUQT1jcCBGSUxFTU9EPSRGSUxFTU9EIGluc3RhbGwKKwlAaWYgb3MucGF0aC5leGlzdHMoX25vLkxBTkdTT1VSQ0UpOgorCSAgIDpwcmludCBpbnN0YWxsaW5nIGxhbmd1YWdlIGZpbGVzCisJICAgOmNvcHkgJExBTkdTT1VSQ0UvUkVBRE1FLnR4dCAkTEFOR1NPVVJDRS8qLnZpbSAkREVTVF9MQU5HCisJICAgOmNobW9kICRGSUxFTU9EICRERVNUX0xBTkcvKi52aW0KKwlAaWYgb3MucGF0aC5leGlzdHMoX25vLktNQVBTT1VSQ0UpOgorCSAgIDpjb3B5ICRLTUFQU09VUkNFL1JFQURNRS50eHQgJEtNQVBTT1VSQ0UvKi52aW0gJERFU1RfS01BUAorCSAgIDpjaG1vZCAkRklMRU1PRCAkREVTVF9LTUFQLyoudmltCisKKyMgaW5zdGFsbCB0aGUgaWNvbnMgZm9yIEtERSwgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMgYW5kIHRoZSBpY29uIGRvZXNuJ3QuCitJQ09ONDhQQVRIID0gJERFU1RESVIkREFUQURJUi9pY29ucy9oaWNvbG9yLzQ4eDQ4L2FwcHMKK0lDT04zMlBBVEggPSAkREVTVERJUiREQVRBRElSL2ljb25zL2xvY29sb3IvMzJ4MzIvYXBwcworSUNPTjE2UEFUSCA9ICRERVNURElSJERBVEFESVIvaWNvbnMvbG9jb2xvci8xNngxNi9hcHBzCitLREVQQVRIID0gJEhPTUUvLmtkZS9zaGFyZS9pY29ucworaW5zdGFsbC1pY29ucyB7dmlydHVhbH06CisJZ3AgPSAkSUNPTjQ4UEFUSC9ndmltLnBuZworCUBpZiBvcy5wYXRoLmlzZGlyKF9uby5JQ09ONDhQQVRIKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKGdwKToKKwkgICA6Y29weSAkU0NSSVBUU09VUkNFL3ZpbTQ4eDQ4LnBuZyAkZ3AKKwlncCA9ICRJQ09OMzJQQVRIL2d2aW0ucG5nCisJQGlmIG9zLnBhdGguaXNkaXIoX25vLklDT04zMlBBVEgpIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoZ3ApOgorCSAgIDpjb3B5ICRTQ1JJUFRTT1VSQ0UvdmltMzJ4MzIucG5nICRncAorCWdwID0gJElDT04xNlBBVEgvZ3ZpbS5wbmcKKwlAaWYgb3MucGF0aC5pc2Rpcihfbm8uSUNPTjE2UEFUSCkgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhncCk6CisJICAgOmNvcHkgJFNDUklQVFNPVVJDRS92aW0xNngxNi5wbmcgJGdwCisKKworJEhFTFBTT1VSQ0UvdmltLjEgJE1BQ1JPU09VUkNFICRUT09MU1NPVVJDRToKKwlAaWYgbm90IG9zLnBhdGguZXhpc3RzKF9uby5UT09MU1NPVVJDRSk6CisJICAgIDpwcmludCBSdW50aW1lIGZpbGVzIG5vdCBmb3VuZC4KKwkgICAgOmVycm9yIFlvdSBuZWVkIHRvIHVucGFjayB0aGUgcnVudGltZSBhcmNoaXZlIGJlZm9yZSBydW5uaW5nICJtYWtlIGluc3RhbGwiLgorCisjIGNyZWF0ZSBsaW5rcyBmcm9tIHZhcmlvdXMgbmFtZXMgdG8gdmltLiAgVGhpcyBpcyBvbmx5IGRvbmUgd2hlbiB0aGUgbGlua3MKKyMgKG9yIGV4ZWN1dGFibGVzIHdpdGggdGhlIHNhbWUgbmFtZSkgZG9uJ3QgZXhpc3QgeWV0LgoraW5zdGFsbGxpbmtzIHt2aXJ0dWFsfTogJEdVSV9UQVJHRVRTIFwKKwkJCSRERVNUX0JJTi8kRVhUQVJHRVQgXAorCQkJJERFU1RfQklOLyRWSUVXVEFSR0VUIFwKKwkJCSRERVNUX0JJTi8kUlZJTVRBUkdFVCBcCisJCQkkREVTVF9CSU4vJFJWSUVXVEFSR0VUIFwKKwkJCSRJTlNUQUxMVklNRElGRgorCitpbnN0YWxsZ2xpbmtzIHt2aXJ0dWFsfTogJERFU1RfQklOLyRHVklNVEFSR0VUIFwKKwkJCSRERVNUX0JJTi8kR1ZJRVdUQVJHRVQgXAorCQkJJERFU1RfQklOLyRSR1ZJTVRBUkdFVCBcCisJCQkkREVTVF9CSU4vJFJHVklFV1RBUkdFVCBcCisJCQkkREVTVF9CSU4vJEVWSU1UQVJHRVQgXAorCQkJJERFU1RfQklOLyRFVklFV1RBUkdFVCBcCisJCQkkSU5TVEFMTEdWSU1ESUZGCisKK2luc3RhbGx2aW1kaWZmIHt2aXJ0dWFsfTogJERFU1RfQklOLyRWSU1ESUZGVEFSR0VUCitpbnN0YWxsZ3ZpbWRpZmYge3ZpcnR1YWx9OiAkREVTVF9CSU4vJEdWSU1ESUZGVEFSR0VUCisKKyMgVGhlc2UgZGVwZW5kZW5jaWVzIHVzZSBhbiBlbXB0eSBidWlsZGNoZWNrIHNvIHRoYXQgdGhleSBhcmUgb25seSBkb25lIHdoZW4KKyMgdGhlIHRhcmdldCBkb2Vzbid0IGV4aXN0LgorJERFU1RfQklOLyRFWFRBUkdFVDoge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9CSU47IGxuIC1zICRWSU1UQVJHRVQgJEVYVEFSR0VUCisKKyRERVNUX0JJTi8kVklFV1RBUkdFVDoge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9CSU47IGxuIC1zICRWSU1UQVJHRVQgJFZJRVdUQVJHRVQKKworJERFU1RfQklOLyRHVklNVEFSR0VUOiB7YnVpbGRjaGVjayA9IH0KKyAgICA6c3lzIGNkICRERVNUX0JJTjsgbG4gLXMgJFZJTVRBUkdFVCAkR1ZJTVRBUkdFVAorCiskREVTVF9CSU4vJEdWSUVXVEFSR0VUOiB7YnVpbGRjaGVjayA9IH0KKyAgICA6c3lzIGNkICRERVNUX0JJTjsgbG4gLXMgJFZJTVRBUkdFVCAkR1ZJRVdUQVJHRVQKKworJERFU1RfQklOLyRSVklNVEFSR0VUOiB7YnVpbGRjaGVjayA9IH0KKyAgICA6c3lzIGNkICRERVNUX0JJTjsgbG4gLXMgJFZJTVRBUkdFVCAkUlZJTVRBUkdFVAorCiskREVTVF9CSU4vJFJWSUVXVEFSR0VUOiB7YnVpbGRjaGVjayA9IH0KKyAgICA6c3lzIGNkICRERVNUX0JJTjsgbG4gLXMgJFZJTVRBUkdFVCAkUlZJRVdUQVJHRVQKKworJERFU1RfQklOLyRSR1ZJTVRBUkdFVDoge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9CSU47IGxuIC1zICRWSU1UQVJHRVQgJFJHVklNVEFSR0VUCisKKyRERVNUX0JJTi8kUkdWSUVXVEFSR0VUOiB7YnVpbGRjaGVjayA9IH0KKyAgICA6c3lzIGNkICRERVNUX0JJTjsgbG4gLXMgJFZJTVRBUkdFVCAkUkdWSUVXVEFSR0VUCisKKyRERVNUX0JJTi8kVklNRElGRlRBUkdFVDoge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9CSU47IGxuIC1zICRWSU1UQVJHRVQgJFZJTURJRkZUQVJHRVQKKworJERFU1RfQklOLyRHVklNRElGRlRBUkdFVDoge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9CSU47IGxuIC1zICRWSU1UQVJHRVQgJEdWSU1ESUZGVEFSR0VUCisKKyRERVNUX0JJTi8kRVZJTVRBUkdFVDoge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9CSU47IGxuIC1zICRWSU1UQVJHRVQgJEVWSU1UQVJHRVQKKworJERFU1RfQklOLyRFVklFV1RBUkdFVDoge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9CSU47IGxuIC1zICRWSU1UQVJHRVQgJEVWSUVXVEFSR0VUCisKKyMgY3JlYXRlIGxpbmtzIGZvciB0aGUgbWFudWFsIHBhZ2VzIHdpdGggdmFyaW91cyBuYW1lcyB0byB2aW0uCVRoaXMgaXMgb25seQorIyBkb25lIHdoZW4gdGhlIGxpbmtzIChvciBtYW5wYWdlcyB3aXRoIHRoZSBzYW1lIG5hbWUpIGRvbid0IGV4aXN0IHlldC4KK2luc3RhbGxoZWxwbGlua3Mge3ZpcnR1YWx9OiAkR1VJX01BTl9UQVJHRVRTIFwKKwkJCSRERVNUX01BTi8kKEVYTkFNRSkuMSBcCisJCQkkREVTVF9NQU4vJChWSUVXTkFNRSkuMSBcCisJCQkkREVTVF9NQU4vJChSVklNTkFNRSkuMSBcCisJCQkkREVTVF9NQU4vJChSVklFV05BTUUpLjEKKworaW5zdGFsbGdoZWxwbGlua3Mge3ZpcnR1YWx9OiAkREVTVF9NQU4vJChHVklNTkFNRSkuMSBcCisJCQkkREVTVF9NQU4vJChHVklFV05BTUUpLjEgXAorCQkJJERFU1RfTUFOLyQoUkdWSU1OQU1FKS4xIFwKKwkJCSRERVNUX01BTi8kKFJHVklFV05BTUUpLjEgXAorCQkJJERFU1RfTUFOLyQoR1ZJTURJRkZOQU1FKS4xIFwKKwkJCSRERVNUX01BTi8kKEVWSUVXTkFNRSkuMQorCiskREVTVF9NQU4vJChFWE5BTUUpLjE6IHtidWlsZGNoZWNrID0gfQorICAgIDpzeXMgY2QgJERFU1RfTUFOOyBsbiAtcyAkKFZJTU5BTUUpLjEgJChFWE5BTUUpLjEKKworJERFU1RfTUFOLyQoVklFV05BTUUpLjE6IHtidWlsZGNoZWNrID0gfQorICAgIDpzeXMgY2QgJERFU1RfTUFOOyBsbiAtcyAkKFZJTU5BTUUpLjEgJChWSUVXTkFNRSkuMQorCiskREVTVF9NQU4vJChHVklNTkFNRSkuMToge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9NQU47IGxuIC1zICQoVklNTkFNRSkuMSAkKEdWSU1OQU1FKS4xCisKKyRERVNUX01BTi8kKEdWSUVXTkFNRSkuMToge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9NQU47IGxuIC1zICQoVklNTkFNRSkuMSAkKEdWSUVXTkFNRSkuMQorCiskREVTVF9NQU4vJChSVklNTkFNRSkuMToge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9NQU47IGxuIC1zICQoVklNTkFNRSkuMSAkKFJWSU1OQU1FKS4xCisKKyRERVNUX01BTi8kKFJWSUVXTkFNRSkuMToge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9NQU47IGxuIC1zICQoVklNTkFNRSkuMSAkKFJWSUVXTkFNRSkuMQorCiskREVTVF9NQU4vJChSR1ZJTU5BTUUpLjE6IHtidWlsZGNoZWNrID0gfQorICAgIDpzeXMgY2QgJERFU1RfTUFOOyBsbiAtcyAkKFZJTU5BTUUpLjEgJChSR1ZJTU5BTUUpLjEKKworJERFU1RfTUFOLyQoUkdWSUVXTkFNRSkuMToge2J1aWxkY2hlY2sgPSB9CisgICAgOnN5cyBjZCAkREVTVF9NQU47IGxuIC1zICQoVklNTkFNRSkuMSAkKFJHVklFV05BTUUpLjEKKworJERFU1RfTUFOLyQoR1ZJTURJRkZOQU1FKS4xOiB7YnVpbGRjaGVjayA9IH0KKyAgICA6c3lzIGNkICRERVNUX01BTjsgbG4gLXMgJChWSU1ESUZGTkFNRSkuMSAkKEdWSU1ESUZGTkFNRSkuMQorCiskREVTVF9NQU4vJChFVklFV05BTUUpLjE6IHtidWlsZGNoZWNrID0gfQorICAgIDpzeXMgY2QgJERFU1RfTUFOOyBsbiAtcyAkKEVWSU1OQU1FKS4xICQoRVZJRVdOQU1FKS4xCisKKyMKKyMgVSBOIEkgTiBTIFQgQSBMIEwKKyMKK3VuaW5zdGFsbCB7dmlydHVhbH17Zm9yY2V9OiB1bmluc3RhbGxfcnVudGltZQorICAgIDpkZWwge2ZvcmNlfSAkREVTVF9CSU4vJFZJTVRBUkdFVAorICAgIDpkZWwge2ZvcmNlfSAkREVTVF9NQU4vJChWSU1OQU1FKS4xICRERVNUX01BTi8kKFZJTU5BTUUpdHV0b3IuMQorICAgIDpkZWwge2ZvcmNlfSAkREVTVF9CSU4vdmltdHV0b3IKKyAgICA6ZGVsIHtmb3JjZX0gJERFU1RfQklOL3h4ZCRFWEVTVUYgJERFU1RfTUFOL3h4ZC4xCisgICAgOmRlbCB7Zm9yY2V9ICRERVNUX0JJTi8kRVhUQVJHRVQgJERFU1RfQklOLyRWSUVXVEFSR0VUCisgICAgOmRlbCB7Zm9yY2V9ICRERVNUX0JJTi8kR1ZJTVRBUkdFVCAkREVTVF9CSU4vJEdWSUVXVEFSR0VUCisgICAgOmRlbCB7Zm9yY2V9ICRERVNUX0JJTi8kUlZJTVRBUkdFVCAkREVTVF9CSU4vJFJWSUVXVEFSR0VUCisgICAgOmRlbCB7Zm9yY2V9ICRERVNUX0JJTi8kUkdWSU1UQVJHRVQgJERFU1RfQklOLyRSR1ZJRVdUQVJHRVQKKyAgICA6ZGVsIHtmb3JjZX0gJERFU1RfQklOLyRWSU1ESUZGVEFSR0VUICRERVNUX0JJTi8kR1ZJTURJRkZUQVJHRVQKKyAgICA6ZGVsIHtmb3JjZX0gJERFU1RfQklOLyRFVklNVEFSR0VUICRERVNUX0JJTi8kRVZJRVdUQVJHRVQKKyAgICA6ZGVsIHtmb3JjZX0gJERFU1RfTUFOLyQoRVhOQU1FKS4xICRERVNUX01BTi8kKFZJRVdOQU1FKS4xCisgICAgOmRlbCB7Zm9yY2V9ICRERVNUX01BTi8kKEdWSU1OQU1FKS4xICRERVNUX01BTi8kKEdWSUVXTkFNRSkuMQorICAgIDpkZWwge2ZvcmNlfSAkREVTVF9NQU4vJChSVklNTkFNRSkuMSAkREVTVF9NQU4vJChSVklFV05BTUUpLjEKKyAgICA6ZGVsIHtmb3JjZX0gJERFU1RfTUFOLyQoUkdWSU1OQU1FKS4xICRERVNUX01BTi8kKFJHVklFV05BTUUpLjEKKyAgICA6ZGVsIHtmb3JjZX0gJERFU1RfTUFOLyQoVklNRElGRk5BTUUpLjEgJERFU1RfTUFOLyQoR1ZJTURJRkZOQU1FKS4xCisgICAgOmRlbCB7Zm9yY2V9ICRERVNUX01BTi8kKEVWSU1OQU1FKS4xICRERVNUX01BTi8kKEVWSUVXTkFNRSkuMQorCisjIE5vdGU6ICJkZWxkaXIiIHdpbGwgZmFpbCBpZiBhbnkgZmlsZXMgd2VyZSBhZGRlZCBhZnRlciAibWFrZSBpbnN0YWxsIiwgdGhhdAorIyBpcyBpbnRlbnRpb25hbGx5OiBLZWVwIGZpbGVzIHRoZSB1c2VyIGFkZGVkLgordW5pbnN0YWxsX3J1bnRpbWUge3ZpcnR1YWx9e2ZvcmNlfToKKyAgICA6ZGVsIHtmb3JjZX0gJERFU1RfSEVMUC8qLnR4dCAkREVTVF9IRUxQL3RhZ3MgJERFU1RfSEVMUC8qLnBsCisgICAgOmRlbCB7Zm9yY2V9ICRTWVNfTUVOVV9GSUxFICRTWVNfU1lOTUVOVV9GSUxFICRTWVNfREVMTUVOVV9GSUxFCisgICAgOmRlbCB7Zm9yY2V9ICRTWVNfQlVHUl9GSUxFICRFVklNX0ZJTEUgJE1TV0lOX0ZJTEUKKyAgICA6ZGVsIHtmb3JjZX0gJERFU1RfU0NSSVBUL2d2aW1yY19leGFtcGxlLnZpbSAkREVTVF9TQ1JJUFQvdmltcmNfZXhhbXBsZS52aW0KKyAgICA6ZGVsIHtmb3JjZX0gJFNZU19GSUxFVFlQRV9GSUxFICRTWVNfRlRPRkZfRklMRSAkU1lTX1NDUklQVFNfRklMRQorICAgIDpkZWwge2ZvcmNlfSAkU1lTX0lORE9GRl9GSUxFICRTWVNfSU5ERU5UX0ZJTEUKKyAgICA6ZGVsIHtmb3JjZX0gJFNZU19GVFBMVUdPRl9GSUxFICRTWVNfRlRQTFVHSU5fRklMRQorICAgIDpkZWwge2ZvcmNlfSAkU1lTX09QVFdJTl9GSUxFCisgICAgOmRlbCB7Zm9yY2V9ICRERVNUX0NPTC8qLnZpbSAkREVTVF9DT0wvUkVBRE1FLnR4dAorICAgIDpkZWwge2ZvcmNlfSAkREVTVF9TWU4vKi52aW0gJERFU1RfU1lOL1JFQURNRS50eHQKKyAgICA6ZGVsIHtmb3JjZX0gJERFU1RfSU5ELyoudmltICRERVNUX0lORC9SRUFETUUudHh0CisgICAgOmRlbCB7Zm9yY2V9ICRERVNUX1BSSU5ULyoucHMKKyAgICA6ZGVsIHtmb3JjZX17cmVjdXJzaXZlfSAkREVTVF9NQUNSTworICAgIDpkZWwge2ZvcmNlfXtyZWN1cnNpdmV9ICRERVNUX1RVVE9SCisgICAgOmRlbCB7Zm9yY2V9e3JlY3Vyc2l2ZX0gJERFU1RfVE9PTFMKKyAgICA6ZGVsIHtmb3JjZX17cmVjdXJzaXZlfSAkREVTVF9MQU5HCisgICAgOmRlbCB7Zm9yY2V9e3JlY3Vyc2l2ZX0gJERFU1RfS01BUAorICAgIDpkZWwge2ZvcmNlfXtyZWN1cnNpdmV9ICRERVNUX0NPTVAKKyAgICA6ZGVsZGlyIHtmb3JjZX0gJERFU1RfSEVMUCAkREVTVF9DT0wgJERFU1RfU1lOICRERVNUX0lORAorICAgIDpkZWwge2ZvcmNlfXtyZWN1cnNpdmV9ICRERVNUX0ZUUC8qLnZpbSAkREVTVF9GVFAvUkVBRE1FLnR4dAorICAgIDpkZWwge2ZvcmNlfSAkREVTVF9QTFVHLyoudmltICRERVNUX1BMVUcvUkVBRE1FLnR4dAorICAgIDpkZWxkaXIge2ZvcmNlfSAkREVTVF9GVFAgJERFU1RfUExVRyAkREVTVF9QUklOVCAkREVTVF9SVAorIwlUaGlzIHdpbGwgZmFpbCB3aGVuIG90aGVyIFZpbSB2ZXJzaW9ucyBhcmUgaW5zdGFsbGVkLCBubyB3b3JyaWVzLgorICAgIEB0cnk6CisJOmRlbGRpciAkREVTVF9WSU0KKyAgICBAZXhjZXB0OgorCTpwcmludCBDYW5ub3QgZGVsZXRlICRERVNUX1ZJTQorCisKKyMgdmltOiBzdHM9NCBzdz00IDoKZGlmZiAtLWdpdCBhL3NyYy9tYXJrLmMgYi9zcmMvbWFyay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjgwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFyay5jCkBAIC0wLDAgKzEsMTYxNyBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogbWFyay5jOiBmdW5jdGlvbnMgZm9yIHNldHRpbmcgbWFya3MgYW5kIGp1bXBpbmcgdG8gdGhlbQorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byBtYWludGFpbiBhbmQgbWFuaXB1bGF0ZSBtYXJrcy4KKyAqLworCisvKgorICogSWYgYSBuYW1lZCBmaWxlIG1hcmsncyBsbnVtIGlzIG5vbi16ZXJvLCBpdCBpcyB2YWxpZC4KKyAqIElmIGEgbmFtZWQgZmlsZSBtYXJrJ3MgZm51bSBpcyBub24temVybywgaXQgaXMgZm9yIGFuIGV4aXN0aW5nIGJ1ZmZlciwKKyAqIG90aGVyd2lzZSBpdCBpcyBmcm9tIC52aW1pbmZvIGFuZCBuYW1lZGZtW25dLmZuYW1lIGlzIHRoZSBmaWxlIG5hbWUuCisgKiBUaGVyZSBhcmUgbWFya3MgJ0EgLSAnWiAoc2V0IGJ5IHVzZXIpIGFuZCAnMCB0byAnOSAoc2V0IHdoZW4gd3JpdGluZworICogdmltaW5mbykuCisgKi8KKyNkZWZpbmUgRVhUUkFfTUFSS1MgMTAJCQkJCS8qIG1hcmtzIDAtOSAqLworc3RhdGljIHhmbWFya19UIG5hbWVkZm1bTk1BUktTICsgRVhUUkFfTUFSS1NdOwkJLyogbWFya3Mgd2l0aCBmaWxlIG5yICovCisKK3N0YXRpYyB2b2lkIGZuYW1lMmZudW0gX19BUkdTKCh4Zm1hcmtfVCAqZm0pKTsKK3N0YXRpYyB2b2lkIGZtYXJrc19jaGVja19vbmUgX19BUkdTKCh4Zm1hcmtfVCAqZm0sIGNoYXJfdSAqbmFtZSwgYnVmX1QgKmJ1ZikpOworc3RhdGljIGNoYXJfdSAqbWFya19saW5lIF9fQVJHUygocG9zX1QgKm1wLCBpbnQgbGVhZF9sZW4pKTsKK3N0YXRpYyB2b2lkIHNob3dfb25lX21hcmsgX19BUkdTKChpbnQsIGNoYXJfdSAqLCBwb3NfVCAqLCBjaGFyX3UgKiwgaW50IGN1cnJlbnQpKTsKKyNpZmRlZiBGRUFUX0pVTVBMSVNUCitzdGF0aWMgdm9pZCBjbGVhbnVwX2p1bXBsaXN0IF9fQVJHUygodm9pZCkpOworI2VuZGlmCisjaWZkZWYgRkVBVF9WSU1JTkZPCitzdGF0aWMgdm9pZCB3cml0ZV9vbmVfZmlsZW1hcmsgX19BUkdTKChGSUxFICpmcCwgeGZtYXJrX1QgKmZtLCBpbnQgYzEsIGludCBjMikpOworI2VuZGlmCisKKy8qCisgKiBTZXQgbmFtZWQgbWFyayAnYycgYXQgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisgKiBSZXR1cm5zIE9LIG9uIHN1Y2Nlc3MsIEZBSUwgaWYgYmFkIG5hbWUgZ2l2ZW4uCisgKi8KKyAgICBpbnQKK3NldG1hcmsoYykKKyAgICBpbnQJCWM7Cit7CisgICAgaW50CQlpOworCisgICAgLyogQ2hlY2sgZm9yIGEgc3BlY2lhbCBrZXkgKG1heSBjYXVzZSBpc2xvd2VyKCkgdG8gY3Jhc2gpLiAqLworICAgIGlmIChjIDwgMCkKKwlyZXR1cm4gRkFJTDsKKworICAgIGlmIChjID09ICdcJycgfHwgYyA9PSAnYCcpCisgICAgeworCXNldHBjbWFyaygpOworCS8qIGtlZXAgaXQgZXZlbiB3aGVuIHRoZSBjdXJzb3IgZG9lc24ndCBtb3ZlICovCisJY3Vyd2luLT53X3ByZXZfcGNtYXJrID0gY3Vyd2luLT53X3BjbWFyazsKKwlyZXR1cm4gT0s7CisgICAgfQorCisgICAgLyogQWxsb3cgc2V0dGluZyAnWyBhbmQgJ10gZm9yIGFuIGF1dG9jb21tYW5kIHRoYXQgc2ltdWxhdGVzIHJlYWRpbmcgYQorICAgICAqIGZpbGUuICovCisgICAgaWYgKGMgPT0gJ1snKQorICAgIHsKKwljdXJidWYtPmJfb3Bfc3RhcnQgPSBjdXJ3aW4tPndfY3Vyc29yOworCXJldHVybiBPSzsKKyAgICB9CisgICAgaWYgKGMgPT0gJ10nKQorICAgIHsKKwljdXJidWYtPmJfb3BfZW5kID0gY3Vyd2luLT53X2N1cnNvcjsKKwlyZXR1cm4gT0s7CisgICAgfQorCisjaWZuZGVmIEVCQ0RJQworICAgIGlmIChjID4gJ3onKQkgICAgLyogc29tZSBpc2xvd2VyKCkgYW5kIGlzdXBwZXIoKSBjYW5ub3QgaGFuZGxlCisJCQkJY2hhcmFjdGVycyBhYm92ZSAxMjcgKi8KKwlyZXR1cm4gRkFJTDsKKyNlbmRpZgorICAgIGlmIChpc2xvd2VyKGMpKQorICAgIHsKKwlpID0gYyAtICdhJzsKKwljdXJidWYtPmJfbmFtZWRtW2ldID0gY3Vyd2luLT53X2N1cnNvcjsKKwlyZXR1cm4gT0s7CisgICAgfQorICAgIGlmIChpc3VwcGVyKGMpKQorICAgIHsKKwlpID0gYyAtICdBJzsKKwluYW1lZGZtW2ldLmZtYXJrLm1hcmsgPSBjdXJ3aW4tPndfY3Vyc29yOworCW5hbWVkZm1baV0uZm1hcmsuZm51bSA9IGN1cmJ1Zi0+Yl9mbnVtOworCXZpbV9mcmVlKG5hbWVkZm1baV0uZm5hbWUpOworCW5hbWVkZm1baV0uZm5hbWUgPSBOVUxMOworCXJldHVybiBPSzsKKyAgICB9CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKy8qCisgKiBTZXQgdGhlIHByZXZpb3VzIGNvbnRleHQgbWFyayB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgYWRkIGl0IHRvIHRoZQorICoganVtcCBsaXN0LgorICovCisgICAgdm9pZAorc2V0cGNtYXJrKCkKK3sKKyNpZmRlZiBGRUFUX0pVTVBMSVNUCisgICAgaW50CQlpOworICAgIHhmbWFya19UCSpmbTsKKyNlbmRpZgorI2lmZGVmIEpVTVBMSVNUX1JPVEFURQorICAgIHhmbWFya19UCXRlbXBtYXJrOworI2VuZGlmCisKKyAgICAvKiBmb3IgOmdsb2JhbCB0aGUgbWFyayBpcyBzZXQgb25seSBvbmNlICovCisgICAgaWYgKGdsb2JhbF9idXN5IHx8IGxpc3RjbWRfYnVzeSB8fCBjbWRtb2Qua2VlcGp1bXBzKQorCXJldHVybjsKKworICAgIGN1cndpbi0+d19wcmV2X3BjbWFyayA9IGN1cndpbi0+d19wY21hcms7CisgICAgY3Vyd2luLT53X3BjbWFyayA9IGN1cndpbi0+d19jdXJzb3I7CisKKyNpZmRlZiBGRUFUX0pVTVBMSVNUCisjIGlmZGVmIEpVTVBMSVNUX1JPVEFURQorICAgIC8qCisgICAgICogSWYgbGFzdCB1c2VkIGVudHJ5IGlzIG5vdCBhdCB0aGUgdG9wLCBwdXQgaXQgYXQgdGhlIHRvcCBieSByb3RhdGluZworICAgICAqIHRoZSBzdGFjayB1bnRpbCBpdCBpcyAodGhlIG5ld2VyIGVudHJpZXMgd2lsbCBiZSBhdCB0aGUgYm90dG9tKS4KKyAgICAgKiBLZWVwIG9uZSBlbnRyeSAodGhlIGxhc3QgdXNlZCBvbmUpIGF0IHRoZSB0b3AuCisgICAgICovCisgICAgaWYgKGN1cndpbi0+d19qdW1wbGlzdGlkeCA8IGN1cndpbi0+d19qdW1wbGlzdGxlbikKKwkrK2N1cndpbi0+d19qdW1wbGlzdGlkeDsKKyAgICB3aGlsZSAoY3Vyd2luLT53X2p1bXBsaXN0aWR4IDwgY3Vyd2luLT53X2p1bXBsaXN0bGVuKQorICAgIHsKKwl0ZW1wbWFyayA9IGN1cndpbi0+d19qdW1wbGlzdFtjdXJ3aW4tPndfanVtcGxpc3RsZW4gLSAxXTsKKwlmb3IgKGkgPSBjdXJ3aW4tPndfanVtcGxpc3RsZW4gLSAxOyBpID4gMDsgLS1pKQorCSAgICBjdXJ3aW4tPndfanVtcGxpc3RbaV0gPSBjdXJ3aW4tPndfanVtcGxpc3RbaSAtIDFdOworCWN1cndpbi0+d19qdW1wbGlzdFswXSA9IHRlbXBtYXJrOworCSsrY3Vyd2luLT53X2p1bXBsaXN0aWR4OworICAgIH0KKyMgZW5kaWYKKworICAgIC8qIElmIGp1bXBsaXN0IGlzIGZ1bGw6IHJlbW92ZSBvbGRlc3QgZW50cnkgKi8KKyAgICBpZiAoKytjdXJ3aW4tPndfanVtcGxpc3RsZW4gPiBKVU1QTElTVFNJWkUpCisgICAgeworCWN1cndpbi0+d19qdW1wbGlzdGxlbiA9IEpVTVBMSVNUU0laRTsKKwl2aW1fZnJlZShjdXJ3aW4tPndfanVtcGxpc3RbMF0uZm5hbWUpOworCWZvciAoaSA9IDE7IGkgPCBKVU1QTElTVFNJWkU7ICsraSkKKwkgICAgY3Vyd2luLT53X2p1bXBsaXN0W2kgLSAxXSA9IGN1cndpbi0+d19qdW1wbGlzdFtpXTsKKyAgICB9CisgICAgY3Vyd2luLT53X2p1bXBsaXN0aWR4ID0gY3Vyd2luLT53X2p1bXBsaXN0bGVuOworICAgIGZtID0gJmN1cndpbi0+d19qdW1wbGlzdFtjdXJ3aW4tPndfanVtcGxpc3RsZW4gLSAxXTsKKworICAgIGZtLT5mbWFyay5tYXJrID0gY3Vyd2luLT53X3BjbWFyazsKKyAgICBmbS0+Zm1hcmsuZm51bSA9IGN1cmJ1Zi0+Yl9mbnVtOworICAgIGZtLT5mbmFtZSA9IE5VTEw7CisjZW5kaWYKK30KKworLyoKKyAqIFRvIGNoYW5nZSBjb250ZXh0LCBjYWxsIHNldHBjbWFyaygpLCB0aGVuIG1vdmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8KKyAqIHdoZXJlIGV2ZXIsIHRoZW4gY2FsbCBjaGVja3BjbWFyaygpLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHByZXZpb3VzCisgKiBjb250ZXh0IHdpbGwgb25seSBiZSBjaGFuZ2VkIGlmIHRoZSBjdXJzb3IgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbGluZS4KKyAqIElmIHBjbWFyayB3YXMgZGVsZXRlZCAod2l0aCAiZEciKSB0aGUgcHJldmlvdXMgbWFyayBpcyByZXN0b3JlZC4KKyAqLworICAgIHZvaWQKK2NoZWNrcGNtYXJrKCkKK3sKKyAgICBpZiAoY3Vyd2luLT53X3ByZXZfcGNtYXJrLmxudW0gIT0gMAorCSAgICAmJiAoZXF1YWxwb3MoY3Vyd2luLT53X3BjbWFyaywgY3Vyd2luLT53X2N1cnNvcikKKwkJfHwgY3Vyd2luLT53X3BjbWFyay5sbnVtID09IDApKQorICAgIHsKKwljdXJ3aW4tPndfcGNtYXJrID0gY3Vyd2luLT53X3ByZXZfcGNtYXJrOworCWN1cndpbi0+d19wcmV2X3BjbWFyay5sbnVtID0gMDsJCS8qIFNob3cgaXQgaGFzIGJlZW4gY2hlY2tlZCAqLworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9KVU1QTElTVCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBtb3ZlICJjb3VudCIgcG9zaXRpb25zIGluIHRoZSBqdW1wIGxpc3QgKGNvdW50IG1heSBiZSBuZWdhdGl2ZSkKKyAqLworICAgIHBvc19UICoKK21vdmVtYXJrKGNvdW50KQorICAgIGludCBjb3VudDsKK3sKKyAgICBwb3NfVAkqcG9zOworICAgIHhmbWFya19UCSpqbXA7CisKKyAgICBjbGVhbnVwX2p1bXBsaXN0KCk7CisKKyAgICBpZiAoY3Vyd2luLT53X2p1bXBsaXN0bGVuID09IDApCSAgICAvKiBub3RoaW5nIHRvIGp1bXAgdG8gKi8KKwlyZXR1cm4gKHBvc19UICopTlVMTDsKKworICAgIGZvciAoOzspCisgICAgeworCWlmIChjdXJ3aW4tPndfanVtcGxpc3RpZHggKyBjb3VudCA8IDAKKwkJfHwgY3Vyd2luLT53X2p1bXBsaXN0aWR4ICsgY291bnQgPj0gY3Vyd2luLT53X2p1bXBsaXN0bGVuKQorCSAgICByZXR1cm4gKHBvc19UICopTlVMTDsKKworCS8qCisJICogaWYgZmlyc3QgQ1RSTC1PIG9yIENUUkwtSSBjb21tYW5kIGFmdGVyIGEganVtcCwgYWRkIGN1cnNvciBwb3NpdGlvbgorCSAqIHRvIGxpc3QuICBDYXJlZnVsOiBJZiB0aGVyZSBhcmUgZHVwbGljYXRlcyAoQ1RSTC1PIGltbWlkaWF0ZWx5IGFmdGVyCisJICogc3RhcnRpbmcgVmltIG9uIGEgZmlsZSksIGFub3RoZXIgZW50cnkgbWF5IGhhdmUgYmVlbiByZW1vdmVkLgorCSAqLworCWlmIChjdXJ3aW4tPndfanVtcGxpc3RpZHggPT0gY3Vyd2luLT53X2p1bXBsaXN0bGVuKQorCXsKKwkgICAgc2V0cGNtYXJrKCk7CisJICAgIC0tY3Vyd2luLT53X2p1bXBsaXN0aWR4OwkvKiBza2lwIHRoZSBuZXcgZW50cnkgKi8KKwkgICAgaWYgKGN1cndpbi0+d19qdW1wbGlzdGlkeCArIGNvdW50IDwgMCkKKwkJcmV0dXJuIChwb3NfVCAqKU5VTEw7CisJfQorCisJY3Vyd2luLT53X2p1bXBsaXN0aWR4ICs9IGNvdW50OworCisJam1wID0gY3Vyd2luLT53X2p1bXBsaXN0ICsgY3Vyd2luLT53X2p1bXBsaXN0aWR4OworCWlmIChqbXAtPmZtYXJrLmZudW0gPT0gMCkKKwkgICAgZm5hbWUyZm51bShqbXApOworCWlmIChqbXAtPmZtYXJrLmZudW0gIT0gY3VyYnVmLT5iX2ZudW0pCisJeworCSAgICAvKiBqdW1wIHRvIG90aGVyIGZpbGUgKi8KKwkgICAgaWYgKGJ1Zmxpc3RfZmluZG5yKGptcC0+Zm1hcmsuZm51bSkgPT0gTlVMTCkKKwkgICAgewkJCQkJICAgICAvKiBTa2lwIHRoaXMgb25lIC4uICovCisJCWNvdW50ICs9IGNvdW50IDwgMCA/IC0xIDogMTsKKwkJY29udGludWU7CisJICAgIH0KKwkgICAgaWYgKGJ1Zmxpc3RfZ2V0ZmlsZShqbXAtPmZtYXJrLmZudW0sIGptcC0+Zm1hcmsubWFyay5sbnVtLAorCQkJCQkJCSAgICAwLCBGQUxTRSkgPT0gRkFJTCkKKwkJcmV0dXJuIChwb3NfVCAqKU5VTEw7CisJICAgIC8qIFNldCBsbnVtIGFnYWluLCBhdXRvY29tbWFuZHMgbXkgaGF2ZSBjaGFuZ2VkIGl0ICovCisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBqbXAtPmZtYXJrLm1hcms7CisJICAgIHBvcyA9IChwb3NfVCAqKS0xOworCX0KKwllbHNlCisJICAgIHBvcyA9ICYoam1wLT5mbWFyay5tYXJrKTsKKwlyZXR1cm4gcG9zOworICAgIH0KK30KKworLyoKKyAqIE1vdmUgImNvdW50IiBwb3NpdGlvbnMgaW4gdGhlIGNoYW5nZWxpc3QgKGNvdW50IG1heSBiZSBuZWdhdGl2ZSkuCisgKi8KKyAgICBwb3NfVCAqCittb3ZlY2hhbmdlbGlzdChjb3VudCkKKyAgICBpbnQJCWNvdW50OworeworICAgIGludAkJbjsKKworICAgIGlmIChjdXJidWYtPmJfY2hhbmdlbGlzdGxlbiA9PSAwKQkgICAgLyogbm90aGluZyB0byBqdW1wIHRvICovCisJcmV0dXJuIChwb3NfVCAqKU5VTEw7CisKKyAgICBuID0gY3Vyd2luLT53X2NoYW5nZWxpc3RpZHg7CisgICAgaWYgKG4gKyBjb3VudCA8IDApCisgICAgeworCWlmIChuID09IDApCisJICAgIHJldHVybiAocG9zX1QgKilOVUxMOworCW4gPSAwOworICAgIH0KKyAgICBlbHNlIGlmIChuICsgY291bnQgPj0gY3VyYnVmLT5iX2NoYW5nZWxpc3RsZW4pCisgICAgeworCWlmIChuID09IGN1cmJ1Zi0+Yl9jaGFuZ2VsaXN0bGVuIC0gMSkKKwkgICAgcmV0dXJuIChwb3NfVCAqKU5VTEw7CisJbiA9IGN1cmJ1Zi0+Yl9jaGFuZ2VsaXN0bGVuIC0gMTsKKyAgICB9CisgICAgZWxzZQorCW4gKz0gY291bnQ7CisgICAgY3Vyd2luLT53X2NoYW5nZWxpc3RpZHggPSBuOworICAgIHJldHVybiBjdXJidWYtPmJfY2hhbmdlbGlzdCArIG47Cit9CisjZW5kaWYKKworLyoKKyAqIEZpbmQgbWFyayAiYyIuCisgKiBSZXR1cm5zOgorICogLSBwb2ludGVyIHRvIHBvc19UIGlmIGZvdW5kLiAgbG51bSBpcyAwIHdoZW4gbWFyayBub3Qgc2V0LCAtMSB3aGVuIG1hcmsgaXMKKyAqICAgaW4gYW5vdGhlciBmaWxlIHdoaWNoIGNhbid0IGJlIGdvdHRlbi4gKGNhbGxlciBuZWVkcyB0byBjaGVjayBsbnVtISkKKyAqIC0gTlVMTCBpZiB0aGVyZSBpcyBubyBtYXJrIGNhbGxlZCAnYycuCisgKiAtIC0xIGlmIG1hcmsgaXMgaW4gb3RoZXIgZmlsZSBhbmQganVtcGVkIHRoZXJlIChvbmx5IGlmIGNoYW5nZWZpbGUgaXMgVFJVRSkKKyAqLworICAgIHBvc19UICoKK2dldG1hcmsoYywgY2hhbmdlZmlsZSkKKyAgICBpbnQJCWM7CisgICAgaW50CQljaGFuZ2VmaWxlOwkJLyogYWxsb3dlZCB0byBlZGl0IGFub3RoZXIgZmlsZSAqLworeworICAgIHBvc19UCQkqcG9zcDsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIHBvc19UCQkqc3RhcnRwLCAqZW5kcDsKKyNlbmRpZgorICAgIHN0YXRpYyBwb3NfVAlwb3NfY29weTsKKworICAgIHBvc3AgPSBOVUxMOworCisgICAgLyogQ2hlY2sgZm9yIHNwZWNpYWwga2V5LCBjYW4ndCBiZSBhIG1hcmsgbmFtZSBhbmQgbWlnaHQgY2F1c2UgaXNsb3dlcigpCisgICAgICogdG8gY3Jhc2guICovCisgICAgaWYgKGMgPCAwKQorCXJldHVybiBwb3NwOworI2lmbmRlZiBFQkNESUMKKyAgICBpZiAoYyA+ICd+JykJCQkvKiBjaGVjayBmb3IgaXNsb3dlcigpL2lzdXBwZXIoKSAqLworCTsKKyAgICBlbHNlCisjZW5kaWYKKwlpZiAoYyA9PSAnXCcnIHx8IGMgPT0gJ2AnKQkvKiBwcmV2aW91cyBjb250ZXh0IG1hcmsgKi8KKyAgICB7CisJcG9zX2NvcHkgPSBjdXJ3aW4tPndfcGNtYXJrOwkvKiBuZWVkIHRvIG1ha2UgYSBjb3B5IGJlY2F1c2UgKi8KKwlwb3NwID0gJnBvc19jb3B5OwkJLyogICB3X3BjbWFyayBtYXkgYmUgY2hhbmdlZCBzb29uICovCisgICAgfQorICAgIGVsc2UgaWYgKGMgPT0gJyInKQkJCS8qIHRvIHBvcyB3aGVuIGxlYXZpbmcgYnVmZmVyICovCisJcG9zcCA9ICYoY3VyYnVmLT5iX2xhc3RfY3Vyc29yKTsKKyAgICBlbHNlIGlmIChjID09ICdeJykJCQkvKiB0byB3aGVyZSBJbnNlcnQgbW9kZSBzdG9wcGVkICovCisJcG9zcCA9ICYoY3VyYnVmLT5iX2xhc3RfaW5zZXJ0KTsKKyAgICBlbHNlIGlmIChjID09ICcuJykJCQkvKiB0byB3aGVyZSBsYXN0IGNoYW5nZSB3YXMgbWFkZSAqLworCXBvc3AgPSAmKGN1cmJ1Zi0+Yl9sYXN0X2NoYW5nZSk7CisgICAgZWxzZSBpZiAoYyA9PSAnWycpCQkJLyogdG8gc3RhcnQgb2YgcHJldmlvdXMgb3BlcmF0b3IgKi8KKwlwb3NwID0gJihjdXJidWYtPmJfb3Bfc3RhcnQpOworICAgIGVsc2UgaWYgKGMgPT0gJ10nKQkJCS8qIHRvIGVuZCBvZiBwcmV2aW91cyBvcGVyYXRvciAqLworCXBvc3AgPSAmKGN1cmJ1Zi0+Yl9vcF9lbmQpOworICAgIGVsc2UgaWYgKGMgPT0gJ3snIHx8IGMgPT0gJ30nKQkvKiB0byBwcmV2aW91cy9uZXh0IHBhcmFncmFwaCAqLworICAgIHsKKwlwb3NfVAlwb3M7CisJb3BhcmdfVAlvYTsKKwlpbnQJc2xjYiA9IGxpc3RjbWRfYnVzeTsKKworCXBvcyA9IGN1cndpbi0+d19jdXJzb3I7CisJbGlzdGNtZF9idXN5ID0gVFJVRTsJICAgIC8qIGF2b2lkIHRoYXQgJycgaXMgY2hhbmdlZCAqLworCWlmIChmaW5kcGFyKCZvYSwgYyA9PSAnfScgPyBGT1JXQVJEIDogQkFDS1dBUkQsIDFMLCBOVUwsIEZBTFNFKSkKKwl7CisJICAgIHBvc19jb3B5ID0gY3Vyd2luLT53X2N1cnNvcjsKKwkgICAgcG9zcCA9ICZwb3NfY29weTsKKwl9CisJY3Vyd2luLT53X2N1cnNvciA9IHBvczsKKwlsaXN0Y21kX2J1c3kgPSBzbGNiOworICAgIH0KKyAgICBlbHNlIGlmIChjID09ICcoJyB8fCBjID09ICcpJykJLyogdG8gcHJldmlvdXMvbmV4dCBzZW50ZW5jZSAqLworICAgIHsKKwlwb3NfVAlwb3M7CisJaW50CXNsY2IgPSBsaXN0Y21kX2J1c3k7CisKKwlwb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworCWxpc3RjbWRfYnVzeSA9IFRSVUU7CSAgICAvKiBhdm9pZCB0aGF0ICcnIGlzIGNoYW5nZWQgKi8KKwlpZiAoZmluZHNlbnQoYyA9PSAnKScgPyBGT1JXQVJEIDogQkFDS1dBUkQsIDFMKSkKKwl7CisJICAgIHBvc19jb3B5ID0gY3Vyd2luLT53X2N1cnNvcjsKKwkgICAgcG9zcCA9ICZwb3NfY29weTsKKwl9CisJY3Vyd2luLT53X2N1cnNvciA9IHBvczsKKwlsaXN0Y21kX2J1c3kgPSBzbGNiOworICAgIH0KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGVsc2UgaWYgKGMgPT0gJzwnIHx8IGMgPT0gJz4nKQkvKiBzdGFydC9lbmQgb2YgdmlzdWFsIGFyZWEgKi8KKyAgICB7CisJc3RhcnRwID0gJmN1cmJ1Zi0+Yl92aXN1YWxfc3RhcnQ7CisJZW5kcCA9ICZjdXJidWYtPmJfdmlzdWFsX2VuZDsKKwlpZiAoKGMgPT0gJzwnKSA9PSBsdCgqc3RhcnRwLCAqZW5kcCkpCisJICAgIHBvc3AgPSBzdGFydHA7CisJZWxzZQorCSAgICBwb3NwID0gZW5kcDsKKwkvKgorCSAqIEZvciBWaXN1YWwgbGluZSBtb2RlLCBzZXQgbWFyayBhdCBiZWdpbiBvciBlbmQgb2YgbGluZQorCSAqLworCWlmIChjdXJidWYtPmJfdmlzdWFsX21vZGUgPT0gJ1YnKQorCXsKKwkgICAgcG9zX2NvcHkgPSAqcG9zcDsKKwkgICAgcG9zcCA9ICZwb3NfY29weTsKKwkgICAgaWYgKGMgPT0gJzwnKQorCQlwb3NfY29weS5jb2wgPSAwOworCSAgICBlbHNlCisJCXBvc19jb3B5LmNvbCA9IE1BWENPTDsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJICAgIHBvc19jb3B5LmNvbGFkZCA9IDA7CisjZW5kaWYKKwl9CisgICAgfQorI2VuZGlmCisgICAgZWxzZSBpZiAoQVNDSUlfSVNMT1dFUihjKSkJCS8qIG5vcm1hbCBuYW1lZCBtYXJrICovCisgICAgeworCXBvc3AgPSAmKGN1cmJ1Zi0+Yl9uYW1lZG1bYyAtICdhJ10pOworICAgIH0KKyAgICBlbHNlIGlmIChBU0NJSV9JU1VQUEVSKGMpIHx8IFZJTV9JU0RJR0lUKGMpKQkvKiBuYW1lZCBmaWxlIG1hcmsgKi8KKyAgICB7CisJaWYgKFZJTV9JU0RJR0lUKGMpKQorCSAgICBjID0gYyAtICcwJyArIE5NQVJLUzsKKwllbHNlCisJICAgIGMgLT0gJ0EnOworCXBvc3AgPSAmKG5hbWVkZm1bY10uZm1hcmsubWFyayk7CisKKwlpZiAobmFtZWRmbVtjXS5mbWFyay5mbnVtID09IDApCisJICAgIGZuYW1lMmZudW0oJm5hbWVkZm1bY10pOworCWlmIChuYW1lZGZtW2NdLmZtYXJrLmZudW0gIT0gY3VyYnVmLT5iX2ZudW0pCisJeworCSAgICBwb3NwID0gJnBvc19jb3B5OworCisJICAgIC8qIG1hcmsgaXMgaW4gYW5vdGhlciBmaWxlICovCisJICAgIGlmIChuYW1lZGZtW2NdLmZtYXJrLm1hcmsubG51bSAhPSAwCisJCQkJICAgICAgICYmIGNoYW5nZWZpbGUgJiYgbmFtZWRmbVtjXS5mbWFyay5mbnVtKQorCSAgICB7CisJCWlmIChidWZsaXN0X2dldGZpbGUobmFtZWRmbVtjXS5mbWFyay5mbnVtLAorCQkJCSAgICAgIChsaW5lbnJfVCkxLCBHRVRGX1NFVE1BUkssIEZBTFNFKSA9PSBPSykKKwkJeworCQkgICAgLyogU2V0IHRoZSBsbnVtIG5vdywgYXV0b2NvbW1hbmRzIGNvdWxkIGhhdmUgY2hhbmdlZCBpdCAqLworCQkgICAgY3Vyd2luLT53X2N1cnNvciA9IG5hbWVkZm1bY10uZm1hcmsubWFyazsKKwkJICAgIHJldHVybiAocG9zX1QgKiktMTsKKwkJfQorCQlwb3NfY29weS5sbnVtID0gLTE7CS8qIGNhbid0IGdldCBmaWxlICovCisJICAgIH0KKwkgICAgZWxzZQorCQlwb3NfY29weS5sbnVtID0gMDsJLyogbWFyayBleGlzdHMsIGJ1dCBpcyBub3QgdmFsaWQgaW4KKwkJCQkJICAgY3VycmVudCBidWZmZXIgKi8KKwl9CisgICAgfQorCisgICAgcmV0dXJuIHBvc3A7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIHRoZSBuZXh0IG5hbWVkIG1hcmsgaW4gdGhlIGN1cnJlbnQgZmlsZS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gcG9zX1Qgb2YgdGhlIG5leHQgbWFyayBvciBOVUxMIGlmIG5vIG1hcmsgaXMgZm91bmQuCisgKi8KKyAgICBwb3NfVCAqCitnZXRuZXh0bWFyayhzdGFydHBvcywgZGlyLCBiZWdpbl9saW5lKQorICAgIHBvc19UCSpzdGFydHBvczsJLyogd2hlcmUgdG8gc3RhcnQgKi8KKyAgICBpbnQJCWRpcjsJLyogZGlyZWN0aW9uIGZvciBzZWFyY2ggKi8KKyAgICBpbnQJCWJlZ2luX2xpbmU7Cit7CisgICAgaW50CQlpOworICAgIHBvc19UCSpyZXN1bHQgPSBOVUxMOworICAgIHBvc19UCXBvczsKKworICAgIHBvcyA9ICpzdGFydHBvczsKKworICAgIC8qIFdoZW4gc2VhcmNoaW5nIGJhY2t3YXJkIGFuZCBsZWF2aW5nIHRoZSBjdXJzb3Igb24gdGhlIGZpcnN0IG5vbi1ibGFuaywKKyAgICAgKiBwb3NpdGlvbiBtdXN0IGJlIGluIGEgcHJldmlvdXMgbGluZS4KKyAgICAgKiBXaGVuIHNlYXJjaGluZyBmb3J3YXJkIGFuZCBsZWF2aW5nIHRoZSBjdXJzb3Igb24gdGhlIGZpcnN0IG5vbi1ibGFuaywKKyAgICAgKiBwb3NpdGlvbiBtdXN0IGJlIGluIGEgbmV4dCBsaW5lLiAqLworICAgIGlmIChkaXIgPT0gQkFDS1dBUkQgJiYgYmVnaW5fbGluZSkKKwlwb3MuY29sID0gMDsKKyAgICBlbHNlIGlmIChkaXIgPT0gRk9SV0FSRCAmJiBiZWdpbl9saW5lKQorCXBvcy5jb2wgPSBNQVhDT0w7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTk1BUktTOyBpKyspCisgICAgeworCWlmIChjdXJidWYtPmJfbmFtZWRtW2ldLmxudW0gPiAwKQorCXsKKwkgICAgaWYgKGRpciA9PSBGT1JXQVJEKQorCSAgICB7CisJCWlmICgocmVzdWx0ID09IE5VTEwgfHwgbHQoY3VyYnVmLT5iX25hbWVkbVtpXSwgKnJlc3VsdCkpCisJCQkmJiBsdChwb3MsIGN1cmJ1Zi0+Yl9uYW1lZG1baV0pKQorCQkgICAgcmVzdWx0ID0gJmN1cmJ1Zi0+Yl9uYW1lZG1baV07CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlmICgocmVzdWx0ID09IE5VTEwgfHwgbHQoKnJlc3VsdCwgY3VyYnVmLT5iX25hbWVkbVtpXSkpCisJCQkmJiBsdChjdXJidWYtPmJfbmFtZWRtW2ldLCBwb3MpKQorCQkgICAgcmVzdWx0ID0gJmN1cmJ1Zi0+Yl9uYW1lZG1baV07CisJICAgIH0KKwl9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEZvciBhbiB4dGVuZGVkIGZpbGVtYXJrOiBzZXQgdGhlIGZudW0gZnJvbSB0aGUgZm5hbWUuCisgKiBUaGlzIGlzIHVzZWQgZm9yIG1hcmtzIG9idGFpbmVkIGZyb20gdGhlIC52aW1pbmZvIGZpbGUuICBJdCdzIHBvc3Rwb25lZAorICogdW50aWwgdGhlIG1hcmsgaXMgdXNlZCB0byBhdm9pZCBhIGxvbmcgc3RhcnR1cCBkZWxheS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmbmFtZTJmbnVtKGZtKQorICAgIHhmbWFya19UCSpmbTsKK3sKKyAgICBjaGFyX3UJKnA7CisKKyAgICBpZiAoZm0tPmZuYW1lICE9IE5VTEwpCisgICAgeworCS8qCisJICogRmlyc3QgZXhwYW5kICJ+LyIgaW4gdGhlIGZpbGUgbmFtZSB0byB0aGUgaG9tZSBkaXJlY3RvcnkuCisJICogVHJ5IHRvIHNob3J0ZW4gdGhlIGZpbGUgbmFtZS4KKwkgKi8KKwlleHBhbmRfZW52KGZtLT5mbmFtZSwgTmFtZUJ1ZmYsIE1BWFBBVEhMKTsKKwltY2hfZGlybmFtZShJT2J1ZmYsIElPU0laRSk7CisJcCA9IHNob3J0ZW5fZm5hbWUoTmFtZUJ1ZmYsIElPYnVmZik7CisKKwkvKiBidWZsaXN0X25ldygpIHdpbGwgY2FsbCBmbWFya3NfY2hlY2tfbmFtZXMoKSAqLworCSh2b2lkKWJ1Zmxpc3RfbmV3KE5hbWVCdWZmLCBwLCAobGluZW5yX1QpMSwgMCk7CisgICAgfQorfQorCisvKgorICogQ2hlY2sgYWxsIGZpbGUgbWFya3MgZm9yIGEgbmFtZSB0aGF0IG1hdGNoZXMgdGhlIGZpbGUgbmFtZSBpbiBidWYuCisgKiBNYXkgcmVwbGFjZSB0aGUgbmFtZSB3aXRoIGFuIGZudW0uCisgKiBVc2VkIGZvciBtYXJrcyB0aGF0IGNvbWUgZnJvbSB0aGUgLnZpbWluZm8gZmlsZS4KKyAqLworICAgIHZvaWQKK2ZtYXJrc19jaGVja19uYW1lcyhidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQlpOworI2lmZGVmIEZFQVRfSlVNUExJU1QKKyAgICB3aW5fVAkqd3A7CisjZW5kaWYKKworICAgIGlmIChidWYtPmJfZmZuYW1lID09IE5VTEwpCisJcmV0dXJuOworCisgICAgbmFtZSA9IGhvbWVfcmVwbGFjZV9zYXZlKGJ1ZiwgYnVmLT5iX2ZmbmFtZSk7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTk1BUktTICsgRVhUUkFfTUFSS1M7ICsraSkKKwlmbWFya3NfY2hlY2tfb25lKCZuYW1lZGZtW2ldLCBuYW1lLCBidWYpOworCisjaWZkZWYgRkVBVF9KVU1QTElTVAorICAgIEZPUl9BTExfV0lORE9XUyh3cCkKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IHdwLT53X2p1bXBsaXN0bGVuOyArK2kpCisJICAgIGZtYXJrc19jaGVja19vbmUoJndwLT53X2p1bXBsaXN0W2ldLCBuYW1lLCBidWYpOworICAgIH0KKyNlbmRpZgorCisgICAgdmltX2ZyZWUobmFtZSk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZm1hcmtzX2NoZWNrX29uZShmbSwgbmFtZSwgYnVmKQorICAgIHhmbWFya19UCSpmbTsKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBpZiAoZm0tPmZtYXJrLmZudW0gPT0gMAorCSAgICAmJiBmbS0+Zm5hbWUgIT0gTlVMTAorCSAgICAmJiBmbmFtZWNtcChuYW1lLCBmbS0+Zm5hbWUpID09IDApCisgICAgeworCWZtLT5mbWFyay5mbnVtID0gYnVmLT5iX2ZudW07CisJdmltX2ZyZWUoZm0tPmZuYW1lKTsKKwlmbS0+Zm5hbWUgPSBOVUxMOworICAgIH0KK30KKworLyoKKyAqIENoZWNrIGEgaWYgYSBwb3NpdGlvbiBmcm9tIGEgbWFyayBpcyB2YWxpZC4KKyAqIEdpdmUgYW5kIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBGQUlMIGlmIG5vdC4KKyAqLworICAgIGludAorY2hlY2tfbWFyayhwb3MpCisgICAgcG9zX1QgICAgKnBvczsKK3sKKyAgICBpZiAocG9zID09IE5VTEwpCisgICAgeworCUVNU0coXyhlX3VtYXJrKSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorICAgIGlmIChwb3MtPmxudW0gPD0gMCkKKyAgICB7CisJLyogbG51bSBpcyBuZWdhdGl2ZSBpZiBtYXJrIGlzIGluIGFub3RoZXIgZmlsZSBjYW4gY2FuJ3QgZ2V0IHRoYXQKKwkgKiBmaWxlLCBlcnJvciBtZXNzYWdlIGFscmVhZHkgZ2l2ZSB0aGVuLiAqLworCWlmIChwb3MtPmxudW0gPT0gMCkKKwkgICAgRU1TRyhfKGVfbWFya25vdHNldCkpOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICBpZiAocG9zLT5sbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisgICAgeworCUVNU0coXyhlX21hcmtpbnZhbCkpOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBjbHJhbGxtYXJrcygpIC0gY2xlYXIgYWxsIG1hcmtzIGluIHRoZSBidWZmZXIgJ2J1ZicKKyAqCisgKiBVc2VkIG1haW5seSB3aGVuIHRyYXNoaW5nIHRoZSBlbnRpcmUgYnVmZmVyIGR1cmluZyAiOmUiIHR5cGUgY29tbWFuZHMKKyAqLworICAgIHZvaWQKK2NscmFsbG1hcmtzKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIHN0YXRpYyBpbnQJCWkgPSAtMTsKKworICAgIGlmIChpID09IC0xKQkvKiBmaXJzdCBjYWxsIGV2ZXI6IGluaXRpYWxpemUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTk1BUktTICsgMTsgaSsrKQorCXsKKwkgICAgbmFtZWRmbVtpXS5mbWFyay5tYXJrLmxudW0gPSAwOworCSAgICBuYW1lZGZtW2ldLmZuYW1lID0gTlVMTDsKKwl9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTk1BUktTOyBpKyspCisJYnVmLT5iX25hbWVkbVtpXS5sbnVtID0gMDsKKyAgICBidWYtPmJfb3Bfc3RhcnQubG51bSA9IDA7CQkvKiBzdGFydC9lbmQgb3AgbWFyayBjbGVhcmVkICovCisgICAgYnVmLT5iX29wX2VuZC5sbnVtID0gMDsKKyAgICBidWYtPmJfbGFzdF9jdXJzb3IubG51bSA9IDE7CS8qICciIG1hcmsgY2xlYXJlZCAqLworICAgIGJ1Zi0+Yl9sYXN0X2N1cnNvci5jb2wgPSAwOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICBidWYtPmJfbGFzdF9jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorICAgIGJ1Zi0+Yl9sYXN0X2luc2VydC5sbnVtID0gMDsJLyogJ14gbWFyayBjbGVhcmVkICovCisgICAgYnVmLT5iX2xhc3RfY2hhbmdlLmxudW0gPSAwOwkvKiAnLiBtYXJrIGNsZWFyZWQgKi8KKyNpZmRlZiBGRUFUX0pVTVBMSVNUCisgICAgYnVmLT5iX2NoYW5nZWxpc3RsZW4gPSAwOworI2VuZGlmCit9CisKKy8qCisgKiBHZXQgbmFtZSBvZiBmaWxlIGZyb20gYSBmaWxlbWFyay4KKyAqIFdoZW4gaXQncyBpbiB0aGUgY3VycmVudCBidWZmZXIsIHJldHVybiB0aGUgdGV4dCBhdCB0aGUgbWFyay4KKyAqIFJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZy4KKyAqLworICAgIGNoYXJfdSAqCitmbV9nZXRuYW1lKGZtYXJrLCBsZWFkX2xlbikKKyAgICBmbWFya19UCSpmbWFyazsKKyAgICBpbnQJCWxlYWRfbGVuOworeworICAgIGlmIChmbWFyay0+Zm51bSA9PSBjdXJidWYtPmJfZm51bSkJCSAgICAvKiBjdXJyZW50IGJ1ZmZlciAqLworCXJldHVybiBtYXJrX2xpbmUoJihmbWFyay0+bWFyayksIGxlYWRfbGVuKTsKKyAgICByZXR1cm4gYnVmbGlzdF9ucjJuYW1lKGZtYXJrLT5mbnVtLCBGQUxTRSwgVFJVRSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGxpbmUgYXQgbWFyayAibXAiLiAgVHJ1bmNhdGUgdG8gZml0IGluIHdpbmRvdy4KKyAqIFRoZSByZXR1cm5lZCBzdHJpbmcgaGFzIGJlZW4gYWxsb2NhdGVkLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCittYXJrX2xpbmUobXAsIGxlYWRfbGVuKQorICAgIHBvc19UCSptcDsKKyAgICBpbnQJCWxlYWRfbGVuOworeworICAgIGNoYXJfdQkqcywgKnA7CisgICAgaW50CQlsZW47CisKKyAgICBpZiAobXAtPmxudW0gPT0gMCB8fCBtcC0+bG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXJldHVybiB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopIi1pbnZhbGlkLSIpOworICAgIHMgPSB2aW1fc3RybnNhdmUoc2tpcHdoaXRlKG1sX2dldChtcC0+bG51bSkpLCAoaW50KUNvbHVtbnMpOworICAgIGlmIChzID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisgICAgLyogVHJ1bmNhdGUgdGhlIGxpbmUgdG8gZml0IGl0IGluIHRoZSB3aW5kb3cgKi8KKyAgICBsZW4gPSAwOworICAgIGZvciAocCA9IHM7ICpwICE9IE5VTDsgKytwKQorICAgIHsKKwlsZW4gKz0gcHRyMmNlbGxzKHApOworCWlmIChsZW4gPj0gQ29sdW1ucyAtIGxlYWRfbGVuKQorCSAgICBicmVhazsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKKyNlbmRpZgorICAgIH0KKyAgICAqcCA9IE5VTDsKKyAgICByZXR1cm4gczsKK30KKworLyoKKyAqIHByaW50IHRoZSBtYXJrcworICovCisgICAgdm9pZAorZG9fbWFya3MoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIGludAkJaTsKKyAgICBjaGFyX3UJKm5hbWU7CisKKyAgICBpZiAoYXJnICE9IE5VTEwgJiYgKmFyZyA9PSBOVUwpCisJYXJnID0gTlVMTDsKKworICAgIHNob3dfb25lX21hcmsoJ1wnJywgYXJnLCAmY3Vyd2luLT53X3BjbWFyaywgTlVMTCwgVFJVRSk7CisgICAgZm9yIChpID0gMDsgaSA8IE5NQVJLUzsgKytpKQorCXNob3dfb25lX21hcmsoaSArICdhJywgYXJnLCAmY3VyYnVmLT5iX25hbWVkbVtpXSwgTlVMTCwgVFJVRSk7CisgICAgZm9yIChpID0gMDsgaSA8IE5NQVJLUyArIEVYVFJBX01BUktTOyArK2kpCisgICAgeworCWlmIChuYW1lZGZtW2ldLmZtYXJrLmZudW0gIT0gMCkKKwkgICAgbmFtZSA9IGZtX2dldG5hbWUoJm5hbWVkZm1baV0uZm1hcmssIDE1KTsKKwllbHNlCisJICAgIG5hbWUgPSBuYW1lZGZtW2ldLmZuYW1lOworCWlmIChuYW1lICE9IE5VTEwpCisJeworCSAgICBzaG93X29uZV9tYXJrKGkgPj0gTk1BUktTID8gaSAtIE5NQVJLUyArICcwJyA6IGkgKyAnQScsCisJCSAgICBhcmcsICZuYW1lZGZtW2ldLmZtYXJrLm1hcmssIG5hbWUsCisJCSAgICBuYW1lZGZtW2ldLmZtYXJrLmZudW0gPT0gY3VyYnVmLT5iX2ZudW0pOworCSAgICBpZiAobmFtZWRmbVtpXS5mbWFyay5mbnVtICE9IDApCisJCXZpbV9mcmVlKG5hbWUpOworCX0KKyAgICB9CisgICAgc2hvd19vbmVfbWFyaygnIicsIGFyZywgJmN1cmJ1Zi0+Yl9sYXN0X2N1cnNvciwgTlVMTCwgVFJVRSk7CisgICAgc2hvd19vbmVfbWFyaygnWycsIGFyZywgJmN1cmJ1Zi0+Yl9vcF9zdGFydCwgTlVMTCwgVFJVRSk7CisgICAgc2hvd19vbmVfbWFyaygnXScsIGFyZywgJmN1cmJ1Zi0+Yl9vcF9lbmQsIE5VTEwsIFRSVUUpOworICAgIHNob3dfb25lX21hcmsoJ14nLCBhcmcsICZjdXJidWYtPmJfbGFzdF9pbnNlcnQsIE5VTEwsIFRSVUUpOworICAgIHNob3dfb25lX21hcmsoJy4nLCBhcmcsICZjdXJidWYtPmJfbGFzdF9jaGFuZ2UsIE5VTEwsIFRSVUUpOworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgc2hvd19vbmVfbWFyaygnPCcsIGFyZywgJmN1cmJ1Zi0+Yl92aXN1YWxfc3RhcnQsIE5VTEwsIFRSVUUpOworICAgIHNob3dfb25lX21hcmsoJz4nLCBhcmcsICZjdXJidWYtPmJfdmlzdWFsX2VuZCwgTlVMTCwgVFJVRSk7CisjZW5kaWYKKyAgICBzaG93X29uZV9tYXJrKC0xLCBhcmcsIE5VTEwsIE5VTEwsIEZBTFNFKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitzaG93X29uZV9tYXJrKGMsIGFyZywgcCwgbmFtZSwgY3VycmVudCkKKyAgICBpbnQJCWM7CisgICAgY2hhcl91CSphcmc7CisgICAgcG9zX1QJKnA7CisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJY3VycmVudDsJLyogaW4gY3VycmVudCBmaWxlICovCit7CisgICAgc3RhdGljIGludAlkaWRfdGl0bGUgPSBGQUxTRTsKKyAgICBpbnQJCW11c3RmcmVlID0gRkFMU0U7CisKKyAgICBpZiAoYyA9PSAtMSkJCQkgICAgLyogZmluaXNoIHVwICovCisgICAgeworCWlmIChkaWRfdGl0bGUpCisJICAgIGRpZF90aXRsZSA9IEZBTFNFOworCWVsc2UKKwl7CisJICAgIGlmIChhcmcgPT0gTlVMTCkKKwkJTVNHKF8oIk5vIG1hcmtzIHNldCIpKTsKKwkgICAgZWxzZQorCQlFTVNHMihfKCJFMjgzOiBObyBtYXJrcyBtYXRjaGluZyBcIiVzXCIiKSwgYXJnKTsKKwl9CisgICAgfQorICAgIC8qIGRvbid0IG91dHB1dCBhbnl0aGluZyBpZiAncScgdHlwZWQgYXQgLS1tb3JlLS0gcHJvbXB0ICovCisgICAgZWxzZSBpZiAoIWdvdF9pbnQKKwkgICAgJiYgKGFyZyA9PSBOVUxMIHx8IHZpbV9zdHJjaHIoYXJnLCBjKSAhPSBOVUxMKQorCSAgICAmJiBwLT5sbnVtICE9IDApCisgICAgeworCWlmICghZGlkX3RpdGxlKQorCXsKKwkgICAgLyogSGlnaGxpZ2h0IHRpdGxlICovCisJICAgIE1TR19QVVRTX1RJVExFKF8oIlxubWFyayBsaW5lICBjb2wgZmlsZS90ZXh0IikpOworCSAgICBkaWRfdGl0bGUgPSBUUlVFOworCX0KKwltc2dfcHV0Y2hhcignXG4nKTsKKwlpZiAoIWdvdF9pbnQpCisJeworCSAgICBzcHJpbnRmKChjaGFyICopSU9idWZmLCAiICVjICU2bGQgJTRkICIsIGMsIHAtPmxudW0sIHAtPmNvbCk7CisJICAgIG1zZ19vdXR0cmFucyhJT2J1ZmYpOworCSAgICBpZiAobmFtZSA9PSBOVUxMICYmIGN1cnJlbnQpCisJICAgIHsKKwkJbmFtZSA9IG1hcmtfbGluZShwLCAxNSk7CisJCW11c3RmcmVlID0gVFJVRTsKKwkgICAgfQorCSAgICBpZiAobmFtZSAhPSBOVUxMKQorCSAgICB7CisJCW1zZ19vdXR0cmFuc19hdHRyKG5hbWUsIGN1cnJlbnQgPyBobF9hdHRyKEhMRl9EKSA6IDApOworCQlpZiAobXVzdGZyZWUpCisJCSAgICB2aW1fZnJlZShuYW1lKTsKKwkgICAgfQorCX0KKwlvdXRfZmx1c2goKTsJCSAgICAvKiBzaG93IG9uZSBsaW5lIGF0IGEgdGltZSAqLworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9KVU1QTElTVCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBwcmludCB0aGUganVtcGxpc3QKKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorZXhfanVtcHMoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpuYW1lOworCisgICAgY2xlYW51cF9qdW1wbGlzdCgpOworICAgIC8qIEhpZ2hsaWdodCB0aXRsZSAqLworICAgIE1TR19QVVRTX1RJVExFKF8oIlxuIGp1bXAgbGluZSAgY29sIGZpbGUvdGV4dCIpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY3Vyd2luLT53X2p1bXBsaXN0bGVuICYmICFnb3RfaW50OyArK2kpCisgICAgeworCWlmIChjdXJ3aW4tPndfanVtcGxpc3RbaV0uZm1hcmsubWFyay5sbnVtICE9IDApCisJeworCSAgICBpZiAoY3Vyd2luLT53X2p1bXBsaXN0W2ldLmZtYXJrLmZudW0gPT0gMCkKKwkJZm5hbWUyZm51bSgmY3Vyd2luLT53X2p1bXBsaXN0W2ldKTsKKwkgICAgbmFtZSA9IGZtX2dldG5hbWUoJmN1cndpbi0+d19qdW1wbGlzdFtpXS5mbWFyaywgMTYpOworCSAgICBpZiAobmFtZSA9PSBOVUxMKQkgICAgLyogZmlsZSBuYW1lIG5vdCBhdmFpbGFibGUgKi8KKwkJY29udGludWU7CisKKwkgICAgbXNnX3B1dGNoYXIoJ1xuJyk7CisJICAgIGlmIChnb3RfaW50KQorCQlicmVhazsKKwkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgIiVjICUyZCAlNWxkICU0ZCAiLAorCQlpID09IGN1cndpbi0+d19qdW1wbGlzdGlkeCA/ICc+JyA6ICcgJywKKwkJaSA+IGN1cndpbi0+d19qdW1wbGlzdGlkeCA/IGkgLSBjdXJ3aW4tPndfanVtcGxpc3RpZHgKKwkJCQkJICA6IGN1cndpbi0+d19qdW1wbGlzdGlkeCAtIGksCisJCWN1cndpbi0+d19qdW1wbGlzdFtpXS5mbWFyay5tYXJrLmxudW0sCisJCWN1cndpbi0+d19qdW1wbGlzdFtpXS5mbWFyay5tYXJrLmNvbCk7CisJICAgIG1zZ19vdXR0cmFucyhJT2J1ZmYpOworCSAgICBtc2dfb3V0dHJhbnNfYXR0cihuYW1lLAorCQkJICAgIGN1cndpbi0+d19qdW1wbGlzdFtpXS5mbWFyay5mbnVtID09IGN1cmJ1Zi0+Yl9mbnVtCisJCQkJCQkJPyBobF9hdHRyKEhMRl9EKSA6IDApOworCSAgICB2aW1fZnJlZShuYW1lKTsKKwkgICAgdWlfYnJlYWtjaGVjaygpOworCX0KKwlvdXRfZmx1c2goKTsKKyAgICB9CisgICAgaWYgKGN1cndpbi0+d19qdW1wbGlzdGlkeCA9PSBjdXJ3aW4tPndfanVtcGxpc3RsZW4pCisJTVNHX1BVVFMoIlxuPiIpOworfQorCisvKgorICogcHJpbnQgdGhlIGNoYW5nZWxpc3QKKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorZXhfY2hhbmdlcyhlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGludAkJaTsKKyAgICBjaGFyX3UJKm5hbWU7CisKKyAgICAvKiBIaWdobGlnaHQgdGl0bGUgKi8KKyAgICBNU0dfUFVUU19USVRMRShfKCJcbmNoYW5nZSBsaW5lICBjb2wgdGV4dCIpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjdXJidWYtPmJfY2hhbmdlbGlzdGxlbiAmJiAhZ290X2ludDsgKytpKQorICAgIHsKKwlpZiAoY3VyYnVmLT5iX2NoYW5nZWxpc3RbaV0ubG51bSAhPSAwKQorCXsKKwkgICAgbXNnX3B1dGNoYXIoJ1xuJyk7CisJICAgIGlmIChnb3RfaW50KQorCQlicmVhazsKKwkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgIiVjICUzZCAlNWxkICU0ZCAiLAorCQkgICAgaSA9PSBjdXJ3aW4tPndfY2hhbmdlbGlzdGlkeCA/ICc+JyA6ICcgJywKKwkJICAgIGkgPiBjdXJ3aW4tPndfY2hhbmdlbGlzdGlkeCA/IGkgLSBjdXJ3aW4tPndfY2hhbmdlbGlzdGlkeAorCQkJCQkJOiBjdXJ3aW4tPndfY2hhbmdlbGlzdGlkeCAtIGksCisJCSAgICAobG9uZyljdXJidWYtPmJfY2hhbmdlbGlzdFtpXS5sbnVtLAorCQkgICAgY3VyYnVmLT5iX2NoYW5nZWxpc3RbaV0uY29sKTsKKwkgICAgbXNnX291dHRyYW5zKElPYnVmZik7CisJICAgIG5hbWUgPSBtYXJrX2xpbmUoJmN1cmJ1Zi0+Yl9jaGFuZ2VsaXN0W2ldLCAxNyk7CisJICAgIGlmIChuYW1lID09IE5VTEwpCisJCWJyZWFrOworCSAgICBtc2dfb3V0dHJhbnNfYXR0cihuYW1lLCBobF9hdHRyKEhMRl9EKSk7CisJICAgIHZpbV9mcmVlKG5hbWUpOworCSAgICB1aV9icmVha2NoZWNrKCk7CisJfQorCW91dF9mbHVzaCgpOworICAgIH0KKyAgICBpZiAoY3Vyd2luLT53X2NoYW5nZWxpc3RpZHggPT0gY3VyYnVmLT5iX2NoYW5nZWxpc3RsZW4pCisJTVNHX1BVVFMoIlxuPiIpOworfQorI2VuZGlmCisKKyNkZWZpbmUgb25lX2FkanVzdChhZGQpIFwKKyAgICB7IFwKKwlscCA9IGFkZDsgXAorCWlmICgqbHAgPj0gbGluZTEgJiYgKmxwIDw9IGxpbmUyKSBcCisJeyBcCisJICAgIGlmIChhbW91bnQgPT0gTUFYTE5VTSkgXAorCQkqbHAgPSAwOyBcCisJICAgIGVsc2UgXAorCQkqbHAgKz0gYW1vdW50OyBcCisJfSBcCisJZWxzZSBpZiAoYW1vdW50X2FmdGVyICYmICpscCA+IGxpbmUyKSBcCisJICAgICpscCArPSBhbW91bnRfYWZ0ZXI7IFwKKyAgICB9CisKKy8qIGRvbid0IGRlbGV0ZSB0aGUgbGluZSwganVzdCBwdXQgYXQgZmlyc3QgZGVsZXRlZCBsaW5lICovCisjZGVmaW5lIG9uZV9hZGp1c3Rfbm9kZWwoYWRkKSBcCisgICAgeyBcCisJbHAgPSBhZGQ7IFwKKwlpZiAoKmxwID49IGxpbmUxICYmICpscCA8PSBsaW5lMikgXAorCXsgXAorCSAgICBpZiAoYW1vdW50ID09IE1BWExOVU0pIFwKKwkJKmxwID0gbGluZTE7IFwKKwkgICAgZWxzZSBcCisJCSpscCArPSBhbW91bnQ7IFwKKwl9IFwKKwllbHNlIGlmIChhbW91bnRfYWZ0ZXIgJiYgKmxwID4gbGluZTIpIFwKKwkgICAgKmxwICs9IGFtb3VudF9hZnRlcjsgXAorICAgIH0KKworLyoKKyAqIEFkanVzdCBtYXJrcyBiZXR3ZWVuIGxpbmUxIGFuZCBsaW5lMiAoaW5jbHVzaXZlKSB0byBtb3ZlICdhbW91bnQnIGxpbmVzLgorICogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNoYW5nZWRfKigpLCBhcHBlbmRlZF9saW5lcygpIG9yIGRlbGV0ZWRfbGluZXMoKS4KKyAqIE1heSBiZSBjYWxsZWQgYmVmb3JlIG9yIGFmdGVyIGNoYW5naW5nIHRoZSB0ZXh0LgorICogV2hlbiBkZWxldGluZyBsaW5lcyBsaW5lMSB0byBsaW5lMiwgdXNlIGFuICdhbW91bnQnIG9mIE1BWExOVU06IFRoZSBtYXJrcworICogd2l0aGluIHRoaXMgcmFuZ2UgYXJlIG1hZGUgaW52YWxpZC4KKyAqIElmICdhbW91bnRfYWZ0ZXInIGlzIG5vbi16ZXJvIGFkanVzdCBtYXJrcyBhZnRlciBsaW5lMi4KKyAqIEV4YW1wbGU6IERlbGV0ZSBsaW5lcyAzNCBhbmQgMzU6IG1hcmtfYWRqdXN0KDM0LCAzNSwgTUFYTE5VTSwgLTIpOworICogRXhhbXBsZTogSW5zZXJ0IHR3byBsaW5lcyBiZWxvdyA1NTogbWFya19hZGp1c3QoNTYsIE1BWExOVU0sIDIsIDApOworICoJCQkJICAgb3I6IG1hcmtfYWRqdXN0KDU2LCA1NSwgTUFYTE5VTSwgMik7CisgKi8KKyAgICB2b2lkCittYXJrX2FkanVzdChsaW5lMSwgbGluZTIsIGFtb3VudCwgYW1vdW50X2FmdGVyKQorICAgIGxpbmVucl9UCWxpbmUxOworICAgIGxpbmVucl9UCWxpbmUyOworICAgIGxvbmcJYW1vdW50OworICAgIGxvbmcJYW1vdW50X2FmdGVyOworeworICAgIGludAkJaTsKKyAgICBpbnQJCWZudW0gPSBjdXJidWYtPmJfZm51bTsKKyAgICBsaW5lbnJfVAkqbHA7CisgICAgd2luX1QJKndpbjsKKworICAgIGlmIChsaW5lMiA8IGxpbmUxICYmIGFtb3VudF9hZnRlciA9PSAwTCkJICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKwlyZXR1cm47CisKKyAgICBpZiAoIWNtZG1vZC5sb2NrbWFya3MpCisgICAgeworCS8qIG5hbWVkIG1hcmtzLCBsb3dlciBjYXNlIGFuZCB1cHBlciBjYXNlICovCisJZm9yIChpID0gMDsgaSA8IE5NQVJLUzsgaSsrKQorCXsKKwkgICAgb25lX2FkanVzdCgmKGN1cmJ1Zi0+Yl9uYW1lZG1baV0ubG51bSkpOworCSAgICBpZiAobmFtZWRmbVtpXS5mbWFyay5mbnVtID09IGZudW0pCisJCW9uZV9hZGp1c3Rfbm9kZWwoJihuYW1lZGZtW2ldLmZtYXJrLm1hcmsubG51bSkpOworCX0KKwlmb3IgKGkgPSBOTUFSS1M7IGkgPCBOTUFSS1MgKyBFWFRSQV9NQVJLUzsgaSsrKQorCXsKKwkgICAgaWYgKG5hbWVkZm1baV0uZm1hcmsuZm51bSA9PSBmbnVtKQorCQlvbmVfYWRqdXN0X25vZGVsKCYobmFtZWRmbVtpXS5mbWFyay5tYXJrLmxudW0pKTsKKwl9CisKKwkvKiBsYXN0IEluc2VydCBwb3NpdGlvbiAqLworCW9uZV9hZGp1c3QoJihjdXJidWYtPmJfbGFzdF9pbnNlcnQubG51bSkpOworCisJLyogbGFzdCBjaGFuZ2UgcG9zaXRpb24gKi8KKwlvbmVfYWRqdXN0KCYoY3VyYnVmLT5iX2xhc3RfY2hhbmdlLmxudW0pKTsKKworI2lmZGVmIEZFQVRfSlVNUExJU1QKKwkvKiBsaXN0IG9mIGNoYW5nZSBwb3NpdGlvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY3VyYnVmLT5iX2NoYW5nZWxpc3RsZW47ICsraSkKKwkgICAgb25lX2FkanVzdF9ub2RlbCgmKGN1cmJ1Zi0+Yl9jaGFuZ2VsaXN0W2ldLmxudW0pKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkvKiBWaXN1YWwgYXJlYSAqLworCW9uZV9hZGp1c3Rfbm9kZWwoJihjdXJidWYtPmJfdmlzdWFsX3N0YXJ0LmxudW0pKTsKKwlvbmVfYWRqdXN0X25vZGVsKCYoY3VyYnVmLT5iX3Zpc3VhbF9lbmQubG51bSkpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJLyogcXVpY2tmaXggbWFya3MgKi8KKwlxZl9tYXJrX2FkanVzdChsaW5lMSwgbGluZTIsIGFtb3VudCwgYW1vdW50X2FmdGVyKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TSUdOUworCXNpZ25fbWFya19hZGp1c3QobGluZTEsIGxpbmUyLCBhbW91bnQsIGFtb3VudF9hZnRlcik7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBwcmV2aW91cyBjb250ZXh0IG1hcmsgKi8KKyAgICBvbmVfYWRqdXN0KCYoY3Vyd2luLT53X3BjbWFyay5sbnVtKSk7CisKKyAgICAvKiBwcmV2aW91cyBwY21hcmsgKi8KKyAgICBvbmVfYWRqdXN0KCYoY3Vyd2luLT53X3ByZXZfcGNtYXJrLmxudW0pKTsKKworICAgIC8qIHNhdmVkIGN1cnNvciBmb3IgZm9ybWF0dGluZyAqLworICAgIGlmIChzYXZlZF9jdXJzb3IubG51bSAhPSAwKQorCW9uZV9hZGp1c3Rfbm9kZWwoJihzYXZlZF9jdXJzb3IubG51bSkpOworCisgICAgLyoKKyAgICAgKiBBZGp1c3QgaXRlbXMgaW4gYWxsIHdpbmRvd3MgcmVsYXRlZCB0byB0aGUgY3VycmVudCBidWZmZXIuCisgICAgICovCisgICAgRk9SX0FMTF9XSU5ET1dTKHdpbikKKyAgICB7CisjaWZkZWYgRkVBVF9KVU1QTElTVAorCWlmICghY21kbW9kLmxvY2ttYXJrcykKKwkgICAgLyogTWFya3MgaW4gdGhlIGp1bXBsaXN0LiAgV2hlbiBkZWxldGluZyBsaW5lcywgdGhpcyBtYXkgY3JlYXRlCisJICAgICAqIGR1cGxpY2F0ZSBtYXJrcyBpbiB0aGUganVtcGxpc3QsIHRoZXkgd2lsbCBiZSByZW1vdmVkIGxhdGVyLiAqLworCSAgICBmb3IgKGkgPSAwOyBpIDwgd2luLT53X2p1bXBsaXN0bGVuOyArK2kpCisJCWlmICh3aW4tPndfanVtcGxpc3RbaV0uZm1hcmsuZm51bSA9PSBmbnVtKQorCQkgICAgb25lX2FkanVzdF9ub2RlbCgmKHdpbi0+d19qdW1wbGlzdFtpXS5mbWFyay5tYXJrLmxudW0pKTsKKyNlbmRpZgorCisJaWYgKHdpbi0+d19idWZmZXIgPT0gY3VyYnVmKQorCXsKKwkgICAgaWYgKCFjbWRtb2QubG9ja21hcmtzKQorCQkvKiBtYXJrcyBpbiB0aGUgdGFnIHN0YWNrICovCisJCWZvciAoaSA9IDA7IGkgPCB3aW4tPndfdGFnc3RhY2tsZW47IGkrKykKKwkJICAgIGlmICh3aW4tPndfdGFnc3RhY2tbaV0uZm1hcmsuZm51bSA9PSBmbnVtKQorCQkJb25lX2FkanVzdF9ub2RlbCgmKHdpbi0+d190YWdzdGFja1tpXS5mbWFyay5tYXJrLmxudW0pKTsKKworI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIC8qIHRoZSBkaXNwbGF5ZWQgVmlzdWFsIGFyZWEgKi8KKwkgICAgaWYgKHdpbi0+d19vbGRfY3Vyc29yX2xudW0gIT0gMCkKKwkgICAgeworCQlvbmVfYWRqdXN0X25vZGVsKCYod2luLT53X29sZF9jdXJzb3JfbG51bSkpOworCQlvbmVfYWRqdXN0X25vZGVsKCYod2luLT53X29sZF92aXN1YWxfbG51bSkpOworCSAgICB9CisjZW5kaWYKKworCSAgICAvKiB0b3BsaW5lIGFuZCBjdXJzb3IgcG9zaXRpb24gZm9yIHdpbmRvd3Mgd2l0aCB0aGUgc2FtZSBidWZmZXIKKwkgICAgICogb3RoZXIgdGhhbiB0aGUgY3VycmVudCB3aW5kb3cgKi8KKwkgICAgaWYgKHdpbiAhPSBjdXJ3aW4pCisJICAgIHsKKwkJaWYgKHdpbi0+d190b3BsaW5lID49IGxpbmUxICYmIHdpbi0+d190b3BsaW5lIDw9IGxpbmUyKQorCQl7CisJCSAgICBpZiAoYW1vdW50ID09IE1BWExOVU0pCSAgICAvKiB0b3BsaW5lIGlzIGRlbGV0ZWQgKi8KKwkJICAgIHsKKwkJCWlmIChsaW5lMSA8PSAxKQorCQkJICAgIHdpbi0+d190b3BsaW5lID0gMTsKKwkJCWVsc2UKKwkJCSAgICB3aW4tPndfdG9wbGluZSA9IGxpbmUxIC0gMTsKKwkJICAgIH0KKwkJICAgIGVsc2UJCS8qIGtlZXAgdG9wbGluZSBvbiB0aGUgc2FtZSBsaW5lICovCisJCQl3aW4tPndfdG9wbGluZSArPSBhbW91bnQ7CisjaWZkZWYgRkVBVF9ESUZGCisJCSAgICB3aW4tPndfdG9wZmlsbCA9IDA7CisjZW5kaWYKKwkJfQorCQllbHNlIGlmIChhbW91bnRfYWZ0ZXIgJiYgd2luLT53X3RvcGxpbmUgPiBsaW5lMikKKwkJeworCQkgICAgd2luLT53X3RvcGxpbmUgKz0gYW1vdW50X2FmdGVyOworI2lmZGVmIEZFQVRfRElGRgorCQkgICAgd2luLT53X3RvcGZpbGwgPSAwOworI2VuZGlmCisJCX0KKwkJaWYgKHdpbi0+d19jdXJzb3IubG51bSA+PSBsaW5lMSAmJiB3aW4tPndfY3Vyc29yLmxudW0gPD0gbGluZTIpCisJCXsKKwkJICAgIGlmIChhbW91bnQgPT0gTUFYTE5VTSkgLyogbGluZSB3aXRoIGN1cnNvciBpcyBkZWxldGVkICovCisJCSAgICB7CisJCQlpZiAobGluZTEgPD0gMSkKKwkJCSAgICB3aW4tPndfY3Vyc29yLmxudW0gPSAxOworCQkJZWxzZQorCQkJICAgIHdpbi0+d19jdXJzb3IubG51bSA9IGxpbmUxIC0gMTsKKwkJCXdpbi0+d19jdXJzb3IuY29sID0gMDsKKwkJICAgIH0KKwkJICAgIGVsc2UJCS8qIGtlZXAgY3Vyc29yIG9uIHRoZSBzYW1lIGxpbmUgKi8KKwkJCXdpbi0+d19jdXJzb3IubG51bSArPSBhbW91bnQ7CisJCX0KKwkJZWxzZSBpZiAoYW1vdW50X2FmdGVyICYmIHdpbi0+d19jdXJzb3IubG51bSA+IGxpbmUyKQorCQkgICAgd2luLT53X2N1cnNvci5sbnVtICs9IGFtb3VudF9hZnRlcjsKKwkgICAgfQorCisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIC8qIGFkanVzdCBmb2xkcyAqLworCSAgICBmb2xkTWFya0FkanVzdCh3aW4sIGxpbmUxLCBsaW5lMiwgYW1vdW50LCBhbW91bnRfYWZ0ZXIpOworI2VuZGlmCisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfRElGRgorICAgIC8qIGFkanVzdCBkaWZmcyAqLworICAgIGRpZmZfbWFya19hZGp1c3QobGluZTEsIGxpbmUyLCBhbW91bnQsIGFtb3VudF9hZnRlcik7CisjZW5kaWYKK30KKworLyogVGhpcyBjb2RlIGlzIHVzZWQgb2Z0ZW4sIG5lZWRzIHRvIGJlIGZhc3QuICovCisjZGVmaW5lIGNvbF9hZGp1c3QocHApIFwKKyAgICB7IFwKKwlwb3NwID0gcHA7IFwKKwlpZiAocG9zcC0+bG51bSA9PSBsbnVtICYmIHBvc3AtPmNvbCA+PSBtaW5jb2wpIFwKKwl7IFwKKwkgICAgcG9zcC0+bG51bSArPSBsbnVtX2Ftb3VudDsgXAorCSAgICBpZiAoY29sX2Ftb3VudCA8IDAgJiYgcG9zcC0+Y29sIDw9IChjb2xucl9UKS1jb2xfYW1vdW50KSBcCisJCXBvc3AtPmNvbCA9IDA7IFwKKwkgICAgZWxzZSBcCisJCXBvc3AtPmNvbCArPSBjb2xfYW1vdW50OyBcCisJfSBcCisgICAgfQorCisvKgorICogQWRqdXN0IG1hcmtzIGluIGxpbmUgImxudW0iIGF0IGNvbHVtbiAibWluY29sIiBhbmQgZnVydGhlcjogYWRkCisgKiAibG51bV9hbW91bnQiIHRvIHRoZSBsaW5lIG51bWJlciBhbmQgYWRkICJjb2xfYW1vdW50IiB0byB0aGUgY29sdW1uCisgKiBwb3NpdGlvbi4KKyAqLworICAgIHZvaWQKK21hcmtfY29sX2FkanVzdChsbnVtLCBtaW5jb2wsIGxudW1fYW1vdW50LCBjb2xfYW1vdW50KQorICAgIGxpbmVucl9UCWxudW07CisgICAgY29sbnJfVAltaW5jb2w7CisgICAgbG9uZwlsbnVtX2Ftb3VudDsKKyAgICBsb25nCWNvbF9hbW91bnQ7Cit7CisgICAgaW50CQlpOworICAgIGludAkJZm51bSA9IGN1cmJ1Zi0+Yl9mbnVtOworICAgIHdpbl9UCSp3aW47CisgICAgcG9zX1QJKnBvc3A7CisKKyAgICBpZiAoKGNvbF9hbW91bnQgPT0gMEwgJiYgbG51bV9hbW91bnQgPT0gMEwpIHx8IGNtZG1vZC5sb2NrbWFya3MpCisJcmV0dXJuOyAvKiBub3RoaW5nIHRvIGRvICovCisKKyAgICAvKiBuYW1lZCBtYXJrcywgbG93ZXIgY2FzZSBhbmQgdXBwZXIgY2FzZSAqLworICAgIGZvciAoaSA9IDA7IGkgPCBOTUFSS1M7IGkrKykKKyAgICB7CisJY29sX2FkanVzdCgmKGN1cmJ1Zi0+Yl9uYW1lZG1baV0pKTsKKwlpZiAobmFtZWRmbVtpXS5mbWFyay5mbnVtID09IGZudW0pCisJICAgIGNvbF9hZGp1c3QoJihuYW1lZGZtW2ldLmZtYXJrLm1hcmspKTsKKyAgICB9CisgICAgZm9yIChpID0gTk1BUktTOyBpIDwgTk1BUktTICsgRVhUUkFfTUFSS1M7IGkrKykKKyAgICB7CisJaWYgKG5hbWVkZm1baV0uZm1hcmsuZm51bSA9PSBmbnVtKQorCSAgICBjb2xfYWRqdXN0KCYobmFtZWRmbVtpXS5mbWFyay5tYXJrKSk7CisgICAgfQorCisgICAgLyogbGFzdCBJbnNlcnQgcG9zaXRpb24gKi8KKyAgICBjb2xfYWRqdXN0KCYoY3VyYnVmLT5iX2xhc3RfaW5zZXJ0KSk7CisKKyAgICAvKiBsYXN0IGNoYW5nZSBwb3NpdGlvbiAqLworICAgIGNvbF9hZGp1c3QoJihjdXJidWYtPmJfbGFzdF9jaGFuZ2UpKTsKKworI2lmZGVmIEZFQVRfSlVNUExJU1QKKyAgICAvKiBsaXN0IG9mIGNoYW5nZSBwb3NpdGlvbnMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgY3VyYnVmLT5iX2NoYW5nZWxpc3RsZW47ICsraSkKKwljb2xfYWRqdXN0KCYoY3VyYnVmLT5iX2NoYW5nZWxpc3RbaV0pKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICAvKiBWaXN1YWwgYXJlYSAqLworICAgIGNvbF9hZGp1c3QoJihjdXJidWYtPmJfdmlzdWFsX3N0YXJ0KSk7CisgICAgY29sX2FkanVzdCgmKGN1cmJ1Zi0+Yl92aXN1YWxfZW5kKSk7CisjZW5kaWYKKworICAgIC8qIHByZXZpb3VzIGNvbnRleHQgbWFyayAqLworICAgIGNvbF9hZGp1c3QoJihjdXJ3aW4tPndfcGNtYXJrKSk7CisKKyAgICAvKiBwcmV2aW91cyBwY21hcmsgKi8KKyAgICBjb2xfYWRqdXN0KCYoY3Vyd2luLT53X3ByZXZfcGNtYXJrKSk7CisKKyAgICAvKiBzYXZlZCBjdXJzb3IgZm9yIGZvcm1hdHRpbmcgKi8KKyAgICBjb2xfYWRqdXN0KCZzYXZlZF9jdXJzb3IpOworCisgICAgLyoKKyAgICAgKiBBZGp1c3QgaXRlbXMgaW4gYWxsIHdpbmRvd3MgcmVsYXRlZCB0byB0aGUgY3VycmVudCBidWZmZXIuCisgICAgICovCisgICAgRk9SX0FMTF9XSU5ET1dTKHdpbikKKyAgICB7CisjaWZkZWYgRkVBVF9KVU1QTElTVAorCS8qIG1hcmtzIGluIHRoZSBqdW1wbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCB3aW4tPndfanVtcGxpc3RsZW47ICsraSkKKwkgICAgaWYgKHdpbi0+d19qdW1wbGlzdFtpXS5mbWFyay5mbnVtID09IGZudW0pCisJCWNvbF9hZGp1c3QoJih3aW4tPndfanVtcGxpc3RbaV0uZm1hcmsubWFyaykpOworI2VuZGlmCisKKwlpZiAod2luLT53X2J1ZmZlciA9PSBjdXJidWYpCisJeworCSAgICAvKiBtYXJrcyBpbiB0aGUgdGFnIHN0YWNrICovCisJICAgIGZvciAoaSA9IDA7IGkgPCB3aW4tPndfdGFnc3RhY2tsZW47IGkrKykKKwkJaWYgKHdpbi0+d190YWdzdGFja1tpXS5mbWFyay5mbnVtID09IGZudW0pCisJCSAgICBjb2xfYWRqdXN0KCYod2luLT53X3RhZ3N0YWNrW2ldLmZtYXJrLm1hcmspKTsKKworCSAgICAvKiBjdXJzb3IgcG9zaXRpb24gZm9yIG90aGVyIHdpbmRvd3Mgd2l0aCB0aGUgc2FtZSBidWZmZXIgKi8KKwkgICAgaWYgKHdpbiAhPSBjdXJ3aW4pCisJCWNvbF9hZGp1c3QoJndpbi0+d19jdXJzb3IpOworCX0KKyAgICB9Cit9CisKKyNpZmRlZiBGRUFUX0pVTVBMSVNUCisvKgorICogV2hlbiBkZWxldGluZyBsaW5lcywgdGhpcyBtYXkgY3JlYXRlIGR1cGxpY2F0ZSBtYXJrcyBpbiB0aGUKKyAqIGp1bXBsaXN0LiBUaGV5IHdpbGwgYmUgcmVtb3ZlZCBoZXJlIGZvciB0aGUgY3VycmVudCB3aW5kb3cuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2xlYW51cF9qdW1wbGlzdCgpCit7CisgICAgaW50CSAgICBpOworICAgIGludAkgICAgZnJvbSwgdG87CisKKyAgICB0byA9IDA7CisgICAgZm9yIChmcm9tID0gMDsgZnJvbSA8IGN1cndpbi0+d19qdW1wbGlzdGxlbjsgKytmcm9tKQorICAgIHsKKwlpZiAoY3Vyd2luLT53X2p1bXBsaXN0aWR4ID09IGZyb20pCisJICAgIGN1cndpbi0+d19qdW1wbGlzdGlkeCA9IHRvOworCWZvciAoaSA9IGZyb20gKyAxOyBpIDwgY3Vyd2luLT53X2p1bXBsaXN0bGVuOyArK2kpCisJICAgIGlmIChjdXJ3aW4tPndfanVtcGxpc3RbaV0uZm1hcmsuZm51bQorCQkJCQk9PSBjdXJ3aW4tPndfanVtcGxpc3RbZnJvbV0uZm1hcmsuZm51bQorCQkgICAgJiYgY3Vyd2luLT53X2p1bXBsaXN0W2Zyb21dLmZtYXJrLmZudW0gIT0gMAorCQkgICAgJiYgY3Vyd2luLT53X2p1bXBsaXN0W2ldLmZtYXJrLm1hcmsubG51bQorCQkJCSAgPT0gY3Vyd2luLT53X2p1bXBsaXN0W2Zyb21dLmZtYXJrLm1hcmsubG51bSkKKwkJYnJlYWs7CisJaWYgKGkgPj0gY3Vyd2luLT53X2p1bXBsaXN0bGVuKQkgICAgLyogbm8gZHVwbGljYXRlICovCisJICAgIGN1cndpbi0+d19qdW1wbGlzdFt0bysrXSA9IGN1cndpbi0+d19qdW1wbGlzdFtmcm9tXTsKKwllbHNlCisJICAgIHZpbV9mcmVlKGN1cndpbi0+d19qdW1wbGlzdFtmcm9tXS5mbmFtZSk7CisgICAgfQorICAgIGlmIChjdXJ3aW4tPndfanVtcGxpc3RpZHggPT0gY3Vyd2luLT53X2p1bXBsaXN0bGVuKQorCWN1cndpbi0+d19qdW1wbGlzdGlkeCA9IHRvOworICAgIGN1cndpbi0+d19qdW1wbGlzdGxlbiA9IHRvOworfQorCisjIGlmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENvcHkgdGhlIGp1bXBsaXN0IGZyb20gd2luZG93ICJmcm9tIiB0byB3aW5kb3cgInRvIi4KKyAqLworICAgIHZvaWQKK2NvcHlfanVtcGxpc3QoZnJvbSwgdG8pCisgICAgd2luX1QJKmZyb207CisgICAgd2luX1QJKnRvOworeworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBmcm9tLT53X2p1bXBsaXN0bGVuOyArK2kpCisgICAgeworCXRvLT53X2p1bXBsaXN0W2ldID0gZnJvbS0+d19qdW1wbGlzdFtpXTsKKwlpZiAoZnJvbS0+d19qdW1wbGlzdFtpXS5mbmFtZSAhPSBOVUxMKQorCSAgICB0by0+d19qdW1wbGlzdFtpXS5mbmFtZSA9IHZpbV9zdHJzYXZlKGZyb20tPndfanVtcGxpc3RbaV0uZm5hbWUpOworICAgIH0KKyAgICB0by0+d19qdW1wbGlzdGxlbiA9IGZyb20tPndfanVtcGxpc3RsZW47CisgICAgdG8tPndfanVtcGxpc3RpZHggPSBmcm9tLT53X2p1bXBsaXN0aWR4OworfQorCisvKgorICogRnJlZSBpdGVtcyBpbiB0aGUganVtcGxpc3Qgb2Ygd2luZG93ICJ3cCIuCisgKi8KKyAgICB2b2lkCitmcmVlX2p1bXBsaXN0KHdwKQorICAgIHdpbl9UCSp3cDsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgd3AtPndfanVtcGxpc3RsZW47ICsraSkKKwl2aW1fZnJlZSh3cC0+d19qdW1wbGlzdFtpXS5mbmFtZSk7Cit9CisjIGVuZGlmCisjZW5kaWYgLyogRkVBVF9KVU1QTElTVCAqLworCisgICAgdm9pZAorc2V0X2xhc3RfY3Vyc29yKHdpbikKKyAgICB3aW5fVAkqd2luOworeworICAgIHdpbi0+d19idWZmZXItPmJfbGFzdF9jdXJzb3IgPSB3aW4tPndfY3Vyc29yOworfQorCisjaWYgZGVmaW5lZChGRUFUX1ZJTUlORk8pIHx8IGRlZmluZWQoUFJPVE8pCisgICAgaW50CityZWFkX3ZpbWluZm9fZmlsZW1hcmsodmlycCwgZm9yY2UpCisgICAgdmlyX1QJKnZpcnA7CisgICAgaW50CQlmb3JjZTsKK3sKKyAgICBjaGFyX3UJKnN0cjsKKyAgICB4Zm1hcmtfVAkqZm07CisgICAgaW50CQlpOworCisgICAgLyogV2Ugb25seSBnZXQgaGVyZSBpZiBsaW5lWzBdID09ICdcJycgb3IgJy0nLgorICAgICAqIElsbGVnYWwgbWFyayBuYW1lcyBhcmUgaWdub3JlZCAoZm9yIGZ1dHVyZSBleHBhbnNpb24pLiAqLworICAgIHN0ciA9IHZpcnAtPnZpcl9saW5lICsgMTsKKyAgICBpZiAoCisjaWZuZGVmIEVCQ0RJQworCSAgICAqc3RyIDw9IDEyNyAmJgorI2VuZGlmCisJICAgICgoKnZpcnAtPnZpcl9saW5lID09ICdcJycgJiYgKFZJTV9JU0RJR0lUKCpzdHIpIHx8IGlzdXBwZXIoKnN0cikpKQorCSAgICAgfHwgKCp2aXJwLT52aXJfbGluZSA9PSAnLScgJiYgKnN0ciA9PSAnXCcnKSkpCisgICAgeworCWlmICgqc3RyID09ICdcJycpCisJeworI2lmZGVmIEZFQVRfSlVNUExJU1QKKwkgICAgLyogSWYgdGhlIGp1bXBsaXN0IGlzbid0IGZ1bGwgaW5zZXJ0IGZtYXJrIGFzIG9sZGVzdCBlbnRyeSAqLworCSAgICBpZiAoY3Vyd2luLT53X2p1bXBsaXN0bGVuID09IEpVTVBMSVNUU0laRSkKKwkJZm0gPSBOVUxMOworCSAgICBlbHNlCisJICAgIHsKKwkJZm9yIChpID0gY3Vyd2luLT53X2p1bXBsaXN0bGVuOyBpID4gMDsgLS1pKQorCQkgICAgY3Vyd2luLT53X2p1bXBsaXN0W2ldID0gY3Vyd2luLT53X2p1bXBsaXN0W2kgLSAxXTsKKwkJKytjdXJ3aW4tPndfanVtcGxpc3RpZHg7CisJCSsrY3Vyd2luLT53X2p1bXBsaXN0bGVuOworCQlmbSA9ICZjdXJ3aW4tPndfanVtcGxpc3RbMF07CisJCWZtLT5mbWFyay5tYXJrLmxudW0gPSAwOworCQlmbS0+Zm5hbWUgPSBOVUxMOworCSAgICB9CisjZWxzZQorCSAgICBmbSA9IE5VTEw7CisjZW5kaWYKKwl9CisJZWxzZSBpZiAoVklNX0lTRElHSVQoKnN0cikpCisJICAgIGZtID0gJm5hbWVkZm1bKnN0ciAtICcwJyArIE5NQVJLU107CisJZWxzZQorCSAgICBmbSA9ICZuYW1lZGZtWypzdHIgLSAnQSddOworCWlmIChmbSAhPSBOVUxMICYmIChmbS0+Zm1hcmsubWFyay5sbnVtID09IDAgfHwgZm9yY2UpKQorCXsKKwkgICAgc3RyID0gc2tpcHdoaXRlKHN0ciArIDEpOworCSAgICBmbS0+Zm1hcmsubWFyay5sbnVtID0gZ2V0ZGlnaXRzKCZzdHIpOworCSAgICBzdHIgPSBza2lwd2hpdGUoc3RyKTsKKwkgICAgZm0tPmZtYXJrLm1hcmsuY29sID0gZ2V0ZGlnaXRzKCZzdHIpOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkgICAgZm0tPmZtYXJrLm1hcmsuY29sYWRkID0gMDsKKyNlbmRpZgorCSAgICBmbS0+Zm1hcmsuZm51bSA9IDA7CisJICAgIHN0ciA9IHNraXB3aGl0ZShzdHIpOworCSAgICB2aW1fZnJlZShmbS0+Zm5hbWUpOworCSAgICBmbS0+Zm5hbWUgPSB2aW1pbmZvX3JlYWRzdHJpbmcodmlycCwgKGludCkoc3RyIC0gdmlycC0+dmlyX2xpbmUpLAorCQkJCQkJCQkgICAgICAgRkFMU0UpOworCX0KKyAgICB9CisgICAgcmV0dXJuIHZpbV9mZ2V0cyh2aXJwLT52aXJfbGluZSwgTFNJWkUsIHZpcnAtPnZpcl9mZCk7Cit9CisKKyAgICB2b2lkCit3cml0ZV92aW1pbmZvX2ZpbGVtYXJrcyhmcCkKKyAgICBGSUxFCSpmcDsKK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpuYW1lOworICAgIGJ1Zl9UCSpidWY7CisgICAgeGZtYXJrX1QJKmZtOworCisgICAgaWYgKGdldF92aW1pbmZvX3BhcmFtZXRlcignZicpID09IDApCisJcmV0dXJuOworCisgICAgZnByaW50ZihmcCwgXygiXG4jIEZpbGUgbWFya3M6XG4iKSk7CisKKyAgICAvKgorICAgICAqIEZpbmQgYSBtYXJrIHRoYXQgaXMgdGhlIHNhbWUgZmlsZSBhbmQgcG9zaXRpb24gYXMgdGhlIGN1cnNvci4KKyAgICAgKiBUaGF0IG9uZSwgb3IgZWxzZSB0aGUgbGFzdCBvbmUgaXMgZGVsZXRlZC4KKyAgICAgKiBNb3ZlICcwIHRvICcxLCAnMSB0byAnMiwgZXRjLiB1bnRpbCB0aGUgbWF0Y2hpbmcgb25lIG9yICc5CisgICAgICogU2V0ICcwIG1hcmsgdG8gY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisgICAgICovCisgICAgaWYgKGN1cmJ1Zi0+Yl9mZm5hbWUgIT0gTlVMTCAmJiAhcmVtb3ZhYmxlKGN1cmJ1Zi0+Yl9mZm5hbWUpKQorICAgIHsKKwluYW1lID0gYnVmbGlzdF9ucjJuYW1lKGN1cmJ1Zi0+Yl9mbnVtLCBUUlVFLCBGQUxTRSk7CisJZm9yIChpID0gTk1BUktTOyBpIDwgTk1BUktTICsgRVhUUkFfTUFSS1MgLSAxOyArK2kpCisJICAgIGlmIChuYW1lZGZtW2ldLmZtYXJrLm1hcmsubG51bSA9PSBjdXJ3aW4tPndfY3Vyc29yLmxudW0KKwkJICAgICYmIChuYW1lZGZtW2ldLmZuYW1lID09IE5VTEwKKwkJCSAgICA/IG5hbWVkZm1baV0uZm1hcmsuZm51bSA9PSBjdXJidWYtPmJfZm51bQorCQkJICAgIDogKG5hbWUgIT0gTlVMTAorCQkJCSAgICAmJiBTVFJDTVAobmFtZSwgbmFtZWRmbVtpXS5mbmFtZSkgPT0gMCkpKQorCQlicmVhazsKKwl2aW1fZnJlZShuYW1lKTsKKworCXZpbV9mcmVlKG5hbWVkZm1baV0uZm5hbWUpOworCWZvciAoIDsgaSA+IE5NQVJLUzsgLS1pKQorCSAgICBuYW1lZGZtW2ldID0gbmFtZWRmbVtpIC0gMV07CisJbmFtZWRmbVtOTUFSS1NdLmZtYXJrLm1hcmsgPSBjdXJ3aW4tPndfY3Vyc29yOworCW5hbWVkZm1bTk1BUktTXS5mbWFyay5mbnVtID0gY3VyYnVmLT5iX2ZudW07CisJbmFtZWRmbVtOTUFSS1NdLmZuYW1lID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBXcml0ZSB0aGUgZmlsZW1hcmtzICcwIC0gJzkgYW5kICdBIC0gJ1ogKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgTk1BUktTICsgRVhUUkFfTUFSS1M7IGkrKykKKwl3cml0ZV9vbmVfZmlsZW1hcmsoZnAsICZuYW1lZGZtW2ldLCAnXCcnLAorCQkJCSAgICAgaSA8IE5NQVJLUyA/IGkgKyAnQScgOiBpIC0gTk1BUktTICsgJzAnKTsKKworI2lmZGVmIEZFQVRfSlVNUExJU1QKKyAgICAvKiBXcml0ZSB0aGUganVtcGxpc3Qgd2l0aCAtJyAqLworICAgIGZwcmludGYoZnAsIF8oIlxuIyBKdW1wbGlzdCAobmV3ZXN0IGZpcnN0KTpcbiIpKTsKKyAgICBzZXRwY21hcmsoKTsJLyogYWRkIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uICovCisgICAgY2xlYW51cF9qdW1wbGlzdCgpOworICAgIGZvciAoZm0gPSAmY3Vyd2luLT53X2p1bXBsaXN0W2N1cndpbi0+d19qdW1wbGlzdGxlbiAtIDFdOworCQkJCQkgICBmbSA+PSAmY3Vyd2luLT53X2p1bXBsaXN0WzBdOyAtLWZtKQorICAgIHsKKwlpZiAoZm0tPmZtYXJrLmZudW0gPT0gMAorCQl8fCAoKGJ1ZiA9IGJ1Zmxpc3RfZmluZG5yKGZtLT5mbWFyay5mbnVtKSkgIT0gTlVMTAorCQkgICAgJiYgIXJlbW92YWJsZShidWYtPmJfZmZuYW1lKSkpCisJICAgIHdyaXRlX29uZV9maWxlbWFyayhmcCwgZm0sICctJywgJ1wnJyk7CisgICAgfQorI2VuZGlmCit9CisKKyAgICBzdGF0aWMgdm9pZAord3JpdGVfb25lX2ZpbGVtYXJrKGZwLCBmbSwgYzEsIGMyKQorICAgIEZJTEUJKmZwOworICAgIHhmbWFya19UCSpmbTsKKyAgICBpbnQJCWMxOworICAgIGludAkJYzI7Cit7CisgICAgY2hhcl91CSpuYW1lOworCisgICAgaWYgKGZtLT5mbWFyay5tYXJrLmxudW0gPT0gMCkJLyogbm90IHNldCAqLworCXJldHVybjsKKworICAgIGlmIChmbS0+Zm1hcmsuZm51bSAhPSAwKQkJLyogdGhlcmUgaXMgYSBidWZmZXIgKi8KKwluYW1lID0gYnVmbGlzdF9ucjJuYW1lKGZtLT5mbWFyay5mbnVtLCBUUlVFLCBGQUxTRSk7CisgICAgZWxzZQorCW5hbWUgPSBmbS0+Zm5hbWU7CQkvKiB1c2UgbmFtZSBmcm9tIC52aW1pbmZvICovCisgICAgaWYgKG5hbWUgIT0gTlVMTCAmJiAqbmFtZSAhPSBOVUwpCisgICAgeworCWZwcmludGYoZnAsICIlYyVjICAlbGQgICVsZCAgIiwgYzEsIGMyLCAobG9uZylmbS0+Zm1hcmsubWFyay5sbnVtLAorCQkJCQkJICAgIChsb25nKWZtLT5mbWFyay5tYXJrLmNvbCk7CisJdmltaW5mb193cml0ZXN0cmluZyhmcCwgbmFtZSk7CisgICAgfQorCisgICAgaWYgKGZtLT5mbWFyay5mbnVtICE9IDApCisJdmltX2ZyZWUobmFtZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAibmFtZSIgaXMgb24gcmVtb3ZhYmxlIG1lZGlhIChkZXBlbmRpbmcgb24gJ3ZpbWluZm8nKS4KKyAqLworICAgIGludAorcmVtb3ZhYmxlKG5hbWUpCisgICAgY2hhcl91ICAqbmFtZTsKK3sKKyAgICBjaGFyX3UgICpwOworICAgIGNoYXJfdSAgcGFydFs1MV07CisgICAgaW50CSAgICByZXR2YWwgPSBGQUxTRTsKKworICAgIG5hbWUgPSBob21lX3JlcGxhY2Vfc2F2ZShOVUxMLCBuYW1lKTsKKyAgICBpZiAobmFtZSAhPSBOVUxMKQorICAgIHsKKwlmb3IgKHAgPSBwX3ZpbWluZm87ICpwOyApCisJeworCSAgICBjb3B5X29wdGlvbl9wYXJ0KCZwLCBwYXJ0LCA1MSwgIiwgIik7CisJICAgIGlmIChwYXJ0WzBdID09ICdyJworCQkJJiYgTUJfU1RSTklDTVAocGFydCArIDEsIG5hbWUsIFNUUkxFTihwYXJ0ICsgMSkpID09IDApCisJICAgIHsKKwkJcmV0dmFsID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJdmltX2ZyZWUobmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX29uZV9tYXJrIF9fQVJHUygoRklMRSAqZnBfb3V0LCBpbnQgYywgcG9zX1QgKnBvcykpOworCisvKgorICogV3JpdGUgYWxsIHRoZSBuYW1lZCBtYXJrcyBmb3IgYWxsIGJ1ZmZlcnMuCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBidWZmZXJzIGZvciB3aGljaCBtYXJrcyBoYXZlIGJlZW4gd3JpdHRlbi4KKyAqLworICAgIGludAord3JpdGVfdmltaW5mb19tYXJrcyhmcF9vdXQpCisgICAgRklMRQkqZnBfb3V0OworeworICAgIGludAkJY291bnQ7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWlzX21hcmtfc2V0OworICAgIGludAkJaTsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICB3aW5fVAkqd2luOworCisgICAgLyoKKyAgICAgKiBTZXQgYl9sYXN0X2N1cnNvciBmb3IgdGhlIGFsbCBidWZmZXJzIHRoYXQgaGF2ZSBhIHdpbmRvdy4KKyAgICAgKi8KKyAgICBmb3IgKHdpbiA9IGZpcnN0d2luOyB3aW4gIT0gTlVMTDsgd2luID0gd2luLT53X25leHQpCisJc2V0X2xhc3RfY3Vyc29yKHdpbik7CisjZWxzZQorCXNldF9sYXN0X2N1cnNvcihjdXJ3aW4pOworI2VuZGlmCisKKyAgICBmcHJpbnRmKGZwX291dCwgXygiXG4jIEhpc3Rvcnkgb2YgbWFya3Mgd2l0aGluIGZpbGVzIChuZXdlc3QgdG8gb2xkZXN0KTpcbiIpKTsKKyAgICBjb3VudCA9IDA7CisgICAgZm9yIChidWYgPSBmaXJzdGJ1ZjsgYnVmICE9IE5VTEw7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorICAgIHsKKwkvKgorCSAqIE9ubHkgd3JpdGUgc29tZXRoaW5nIGlmIGJ1ZmZlciBoYXMgYmVlbiBsb2FkZWQgYW5kIGF0IGxlYXN0IG9uZQorCSAqIG1hcmsgaXMgc2V0LgorCSAqLworCWlmIChidWYtPmJfbWFya3NfcmVhZCkKKwl7CisJICAgIGlmIChidWYtPmJfbGFzdF9jdXJzb3IubG51bSAhPSAwKQorCQlpc19tYXJrX3NldCA9IFRSVUU7CisJICAgIGVsc2UKKwkgICAgeworCQlpc19tYXJrX3NldCA9IEZBTFNFOworCQlmb3IgKGkgPSAwOyBpIDwgTk1BUktTOyBpKyspCisJCSAgICBpZiAoYnVmLT5iX25hbWVkbVtpXS5sbnVtICE9IDApCisJCSAgICB7CisJCQlpc19tYXJrX3NldCA9IFRSVUU7CisJCQlicmVhazsKKwkJICAgIH0KKwkgICAgfQorCSAgICBpZiAoaXNfbWFya19zZXQgJiYgYnVmLT5iX2ZmbmFtZSAhPSBOVUxMCisJCSAgICAgICYmIGJ1Zi0+Yl9mZm5hbWVbMF0gIT0gTlVMICYmICFyZW1vdmFibGUoYnVmLT5iX2ZmbmFtZSkpCisJICAgIHsKKwkJaG9tZV9yZXBsYWNlKE5VTEwsIGJ1Zi0+Yl9mZm5hbWUsIElPYnVmZiwgSU9TSVpFLCBUUlVFKTsKKwkJZnByaW50ZihmcF9vdXQsICJcbj4gIik7CisJCXZpbWluZm9fd3JpdGVzdHJpbmcoZnBfb3V0LCBJT2J1ZmYpOworCQl3cml0ZV9vbmVfbWFyayhmcF9vdXQsICciJywgJmJ1Zi0+Yl9sYXN0X2N1cnNvcik7CisJCXdyaXRlX29uZV9tYXJrKGZwX291dCwgJ14nLCAmYnVmLT5iX2xhc3RfaW5zZXJ0KTsKKwkJd3JpdGVfb25lX21hcmsoZnBfb3V0LCAnLicsICZidWYtPmJfbGFzdF9jaGFuZ2UpOworI2lmZGVmIEZFQVRfSlVNUExJU1QKKwkJLyogY2hhbmdlbGlzdCBwb3NpdGlvbnMgYXJlIHN0b3JlZCBvbGRlc3QgZmlyc3QgKi8KKwkJZm9yIChpID0gMDsgaSA8IGJ1Zi0+Yl9jaGFuZ2VsaXN0bGVuOyArK2kpCisJCSAgICB3cml0ZV9vbmVfbWFyayhmcF9vdXQsICcrJywgJmJ1Zi0+Yl9jaGFuZ2VsaXN0W2ldKTsKKyNlbmRpZgorCQlmb3IgKGkgPSAwOyBpIDwgTk1BUktTOyBpKyspCisJCSAgICB3cml0ZV9vbmVfbWFyayhmcF9vdXQsICdhJyArIGksICZidWYtPmJfbmFtZWRtW2ldKTsKKwkJY291bnQrKzsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKKyAgICBzdGF0aWMgdm9pZAord3JpdGVfb25lX21hcmsoZnBfb3V0LCBjLCBwb3MpCisgICAgRklMRQkqZnBfb3V0OworICAgIGludAkJYzsKKyAgICBwb3NfVAkqcG9zOworeworICAgIGlmIChwb3MtPmxudW0gIT0gMCkKKwlmcHJpbnRmKGZwX291dCwgIlx0JWNcdCVsZFx0JWRcbiIsIGMsIChsb25nKXBvcy0+bG51bSwgKGludClwb3MtPmNvbCk7Cit9CisKKy8qCisgKiBIYW5kbGUgbWFya3MgaW4gdGhlIHZpbWluZm8gZmlsZToKKyAqIGZwX291dCA9PSBOVUxMICAgcmVhZCBtYXJrcyBmb3IgY3VycmVudCBidWZmZXIgb25seQorICogZnBfb3V0ICE9IE5VTEwgICBjb3B5IG1hcmtzIGZvciBidWZmZXJzIG5vdCBpbiBidWZmZXIgbGlzdAorICovCisgICAgdm9pZAorY29weV92aW1pbmZvX21hcmtzKHZpcnAsIGZwX291dCwgY291bnQsIGVvZikKKyAgICB2aXJfVAkqdmlycDsKKyAgICBGSUxFCSpmcF9vdXQ7CisgICAgaW50CQljb3VudDsKKyAgICBpbnQJCWVvZjsKK3sKKyAgICBjaGFyX3UJKmxpbmUgPSB2aXJwLT52aXJfbGluZTsKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJbnVtX21hcmtlZF9maWxlczsKKyAgICBpbnQJCWxvYWRfbWFya3M7CisgICAgaW50CQljb3B5X21hcmtzX291dDsKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqbmFtZV9idWY7CisgICAgcG9zX1QJcG9zOworCisgICAgaWYgKChuYW1lX2J1ZiA9IGFsbG9jKExTSVpFKSkgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgKm5hbWVfYnVmID0gTlVMOworICAgIG51bV9tYXJrZWRfZmlsZXMgPSBnZXRfdmltaW5mb19wYXJhbWV0ZXIoJ1wnJyk7CisgICAgd2hpbGUgKCFlb2YgJiYgKGNvdW50IDwgbnVtX21hcmtlZF9maWxlcyB8fCBmcF9vdXQgPT0gTlVMTCkpCisgICAgeworCWlmIChsaW5lWzBdICE9ICc+JykKKwl7CisJICAgIGlmIChsaW5lWzBdICE9ICdcbicgJiYgbGluZVswXSAhPSAnXHInICYmIGxpbmVbMF0gIT0gJyMnKQorCSAgICB7CisJCWlmICh2aW1pbmZvX2Vycm9yKCJFNTc2OiAiLCBfKCJNaXNzaW5nICc+JyIpLCBsaW5lKSkKKwkJICAgIGJyZWFrOwkvKiB0b28gbWFueSBlcnJvcnMsIHJldHVybiBub3cgKi8KKwkgICAgfQorCSAgICBlb2YgPSB2aW1fZmdldHMobGluZSwgTFNJWkUsIHZpcnAtPnZpcl9mZCk7CisJICAgIGNvbnRpbnVlOwkJLyogU2tpcCB0aGlzIGR1ZCBsaW5lICovCisJfQorCisJLyoKKwkgKiBIYW5kbGUgbG9uZyBsaW5lIGFuZCB0cmFuc2xhdGUgZXNjYXBlZCBjaGFyYWN0ZXJzLgorCSAqIEZpbmQgZmlsZSBuYW1lLCBzZXQgc3RyIHRvIHN0YXJ0LgorCSAqIElnbm9yZSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZS4KKwkgKi8KKwlzdHIgPSBza2lwd2hpdGUobGluZSArIDEpOworCXN0ciA9IHZpbWluZm9fcmVhZHN0cmluZyh2aXJwLCAoaW50KShzdHIgLSB2aXJwLT52aXJfbGluZSksIEZBTFNFKTsKKwlpZiAoc3RyID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworCXAgPSBzdHIgKyBTVFJMRU4oc3RyKTsKKwl3aGlsZSAocCAhPSBzdHIgJiYgKCpwID09IE5VTCB8fCB2aW1faXNzcGFjZSgqcCkpKQorCSAgICBwLS07CisJaWYgKCpwKQorCSAgICBwKys7CisJKnAgPSBOVUw7CisKKwkvKgorCSAqIElmIGZwX291dCA9PSBOVUxMLCBsb2FkIG1hcmtzIGZvciBjdXJyZW50IGJ1ZmZlci4KKwkgKiBJZiBmcF9vdXQgIT0gTlVMTCwgY29weSBtYXJrcyBmb3IgYnVmZmVycyBub3QgaW4gYnVmbGlzdC4KKwkgKi8KKwlsb2FkX21hcmtzID0gY29weV9tYXJrc19vdXQgPSBGQUxTRTsKKwlpZiAoZnBfb3V0ID09IE5VTEwpCisJeworCSAgICBpZiAoY3VyYnVmLT5iX2ZmbmFtZSAhPSBOVUxMKQorCSAgICB7CisJCWlmICgqbmFtZV9idWYgPT0gTlVMKQkgICAgLyogb25seSBuZWVkIHRvIGRvIHRoaXMgb25jZSAqLworCQkgICAgaG9tZV9yZXBsYWNlKE5VTEwsIGN1cmJ1Zi0+Yl9mZm5hbWUsIG5hbWVfYnVmLCBMU0laRSwgVFJVRSk7CisJCWlmIChmbmFtZWNtcChzdHIsIG5hbWVfYnVmKSA9PSAwKQorCQkgICAgbG9hZF9tYXJrcyA9IFRSVUU7CisJICAgIH0KKwl9CisJZWxzZSAvKiBmcF9vdXQgIT0gTlVMTCAqLworCXsKKwkgICAgLyogVGhpcyBpcyBzbG93IGlmIHRoZXJlIGFyZSBtYW55IGJ1ZmZlcnMhISAqLworCSAgICBmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTDsgYnVmID0gYnVmLT5iX25leHQpCisJCWlmIChidWYtPmJfZmZuYW1lICE9IE5VTEwpCisJCXsKKwkJICAgIGhvbWVfcmVwbGFjZShOVUxMLCBidWYtPmJfZmZuYW1lLCBuYW1lX2J1ZiwgTFNJWkUsIFRSVUUpOworCQkgICAgaWYgKGZuYW1lY21wKHN0ciwgbmFtZV9idWYpID09IDApCisJCQlicmVhazsKKwkJfQorCisJICAgIC8qCisJICAgICAqIGNvcHkgbWFya3MgaWYgdGhlIGJ1ZmZlciBoYXMgbm90IGJlZW4gbG9hZGVkCisJICAgICAqLworCSAgICBpZiAoYnVmID09IE5VTEwgfHwgIWJ1Zi0+Yl9tYXJrc19yZWFkKQorCSAgICB7CisJCWNvcHlfbWFya3Nfb3V0ID0gVFJVRTsKKwkJZnB1dHMoIlxuPiAiLCBmcF9vdXQpOworCQl2aW1pbmZvX3dyaXRlc3RyaW5nKGZwX291dCwgc3RyKTsKKwkJY291bnQrKzsKKwkgICAgfQorCX0KKwl2aW1fZnJlZShzdHIpOworCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCXBvcy5jb2xhZGQgPSAwOworI2VuZGlmCisJd2hpbGUgKCEoZW9mID0gdmltaW5mb19yZWFkbGluZSh2aXJwKSkgJiYgbGluZVswXSA9PSBUQUIpCisJeworCSAgICBpZiAobG9hZF9tYXJrcykKKwkgICAgeworCQlpZiAobGluZVsxXSAhPSBOVUwpCisJCXsKKwkJICAgIHNzY2FuZigoY2hhciAqKWxpbmUgKyAyLCAiJWxkICV1IiwgJnBvcy5sbnVtLCAmcG9zLmNvbCk7CisJCSAgICBzd2l0Y2ggKGxpbmVbMV0pCisJCSAgICB7CisJCQljYXNlICciJzogY3VyYnVmLT5iX2xhc3RfY3Vyc29yID0gcG9zOyBicmVhazsKKwkJCWNhc2UgJ14nOiBjdXJidWYtPmJfbGFzdF9pbnNlcnQgPSBwb3M7IGJyZWFrOworCQkJY2FzZSAnLic6IGN1cmJ1Zi0+Yl9sYXN0X2NoYW5nZSA9IHBvczsgYnJlYWs7CisJCQljYXNlICcrJzoKKyNpZmRlZiBGRUFUX0pVTVBMSVNUCisJCQkJICAvKiBjaGFuZ2VsaXN0IHBvc2l0aW9ucyBhcmUgc3RvcmVkIG9sZGVzdAorCQkJCSAgICogZmlyc3QgKi8KKwkJCQkgIGlmIChjdXJidWYtPmJfY2hhbmdlbGlzdGxlbiA9PSBKVU1QTElTVFNJWkUpCisJCQkJICAgICAgLyogbGlzdCBpcyBmdWxsLCByZW1vdmUgb2xkZXN0IGVudHJ5ICovCisJCQkJICAgICAgbWNoX21lbW1vdmUoY3VyYnVmLT5iX2NoYW5nZWxpc3QsCisJCQkJCSAgICBjdXJidWYtPmJfY2hhbmdlbGlzdCArIDEsCisJCQkJCSAgICBzaXplb2YocG9zX1QpICogKEpVTVBMSVNUU0laRSAtIDEpKTsKKwkJCQkgIGVsc2UKKwkJCQkgICAgICArK2N1cmJ1Zi0+Yl9jaGFuZ2VsaXN0bGVuOworCQkJCSAgY3VyYnVmLT5iX2NoYW5nZWxpc3RbCisJCQkJCSAgIGN1cmJ1Zi0+Yl9jaGFuZ2VsaXN0bGVuIC0gMV0gPSBwb3M7CisjZW5kaWYKKwkJCQkgIGJyZWFrOworCQkJZGVmYXVsdDogIGlmICgoaSA9IGxpbmVbMV0gLSAnYScpID49IDAgJiYgaSA8IE5NQVJLUykKKwkJCQkgICAgICBjdXJidWYtPmJfbmFtZWRtW2ldID0gcG9zOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAoY29weV9tYXJrc19vdXQpCisJCWZwdXRzKChjaGFyICopbGluZSwgZnBfb3V0KTsKKwl9CisJaWYgKGxvYWRfbWFya3MpCisJeworI2lmZGVmIEZFQVRfSlVNUExJU1QKKwkgICAgd2luX1QJKndwOworCisJICAgIEZPUl9BTExfV0lORE9XUyh3cCkKKwkgICAgeworCQlpZiAod3AtPndfYnVmZmVyID09IGN1cmJ1ZikKKwkJICAgIHdwLT53X2NoYW5nZWxpc3RpZHggPSBjdXJidWYtPmJfY2hhbmdlbGlzdGxlbjsKKwkgICAgfQorI2VuZGlmCisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgdmltX2ZyZWUobmFtZV9idWYpOworfQorI2VuZGlmIC8qIEZFQVRfVklNSU5GTyAqLwpkaWZmIC0tZ2l0IGEvc3JjL21ieXRlLmMgYi9zcmMvbWJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTkzMTZkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21ieXRlLmMKQEAgLTAsMCArMSw1ODMzIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKiBNdWx0aWJ5dGUgZXh0ZW5zaW9ucyBwYXJ0bHkgYnkgU3VuZy1Ib29uIEJhZWsKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKy8qCisgKiBtYnl0ZS5jOiBDb2RlIHNwZWNpZmljYWxseSBmb3IgaGFuZGxpbmcgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorICoKKyAqIFRoZSBlbmNvZGluZyB1c2VkIGluIHRoZSBjb3JlIGlzIHNldCB3aXRoICdlbmNvZGluZycuICBXaGVuICdlbmNvZGluZycgaXMKKyAqIGNoYW5nZWQsIHRoZSBmb2xsb3dpbmcgZm91ciB2YXJpYWJsZXMgYXJlIHNldCAoZm9yIHNwZWVkKS4KKyAqIEN1cnJlbnRseSB0aGVzZSB0eXBlcyBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzIGFyZSBzdXBwb3J0ZWQ6CisgKgorICogImVuY19kYmNzIgkgICAgV2hlbiBub24temVybyBpdCB0ZWxscyB0aGUgdHlwZSBvZiBkb3VibGUgYnl0ZSBjaGFyYWN0ZXIKKyAqCQkgICAgZW5jb2RpbmcgKENoaW5lc2UsIEtvcmVhbiwgSmFwYW5lc2UsIGV0Yy4pLgorICoJCSAgICBUaGUgY2VsbCB3aWR0aCBvbiB0aGUgZGlzcGxheSBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mCisgKgkJICAgIGJ5dGVzLiAgKGV4Y2VwdGlvbjogREJDU19KUE5VIHdpdGggZmlyc3QgYnl0ZSAweDhlKQorICoJCSAgICBSZWNvZ25pemluZyB0aGUgZmlyc3Qgb3Igc2Vjb25kIGJ5dGUgaXMgZGlmZmljdWx0LCBpdAorICoJCSAgICByZXF1aXJlcyBjaGVja2luZyBhIGJ5dGUgc2VxdWVuY2UgZnJvbSB0aGUgc3RhcnQuCisgKiAiZW5jX3V0ZjgiCSAgICBXaGVuIFRSVUUgdXNlIFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOCBlbmNvZGluZy4KKyAqCQkgICAgVGhlIGNlbGwgd2lkdGggb24gdGhlIGRpc3BsYXkgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBmcm9tCisgKgkJICAgIHRoZSBjaGFyYWN0ZXIgdmFsdWUuCisgKgkJICAgIFJlY29nbml6aW5nIGJ5dGVzIGlzIGVhc3k6IDB4eHgueHh4eCBpcyBhIHNpbmdsZS1ieXRlCisgKgkJICAgIGNoYXIsIDEweHgueHh4eCBpcyBhIHRyYWlsaW5nIGJ5dGUsIDExeHgueHh4eCBpcyBhIGxlYWRpbmcKKyAqCQkgICAgYnl0ZSBvZiBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLgorICoJCSAgICBUbyBtYWtlIHRoaW5ncyBjb21wbGljYXRlZCwgdXAgdG8gdHdvIGNvbXBvc2luZyBjaGFyYWN0ZXJzCisgKgkJICAgIGFyZSBhbGxvd2VkLiAgVGhlc2UgYXJlIGRyYXduIG9uIHRvcCBvZiB0aGUgZmlyc3QgY2hhci4KKyAqCQkgICAgRm9yIG1vc3QgZWRpdGluZyB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgd2l0aCBjb21wb3NpbmcKKyAqCQkgICAgY2hhcmFjdGVycyBpbmNsdWRlZCBpcyBjb25zaWRlcmVkIHRvIGJlIG9uZSBjaGFyYWN0ZXIuCisgKiAiZW5jX3VuaWNvZGUiICAgIFdoZW4gMiB1c2UgMTYtYml0IFVuaWNvZGUgY2hhcmFjdGVycyAob3IgVVRGLTE2KS4KKyAqCQkgICAgV2hlbiA0IHVzZSAzMi1idXQgVW5pY29kZSBjaGFyYWN0ZXJzLgorICoJCSAgICBJbnRlcm5hbGx5IGNoYXJhY3RlcnMgYXJlIHN0b3JlZCBpbiBVVEYtOCBlbmNvZGluZyB0bworICoJCSAgICBhdm9pZCBOVUwgYnl0ZXMuICBDb252ZXJzaW9uIGhhcHBlbnMgd2hlbiBkb2luZyBJL08uCisgKgkJICAgICJlbmNfdXRmOCIgd2lsbCBhbHNvIGJlIFRSVUUuCisgKgorICogImhhc19tYnl0ZSIgaXMgc2V0IHdoZW4gImVuY19kYmNzIiBvciAiZW5jX3V0ZjgiIGlzIG5vbi16ZXJvLgorICoKKyAqIElmIG5vbmUgb2YgdGhlc2UgaXMgVFJVRSwgOC1iaXQgYnl0ZXMgYXJlIHVzZWQgZm9yIGEgY2hhcmFjdGVyLiAgVGhlCisgKiBlbmNvZGluZyBpc24ndCBjdXJyZW50bHkgc3BlY2lmaWVkIChUT0RPKS4KKyAqCisgKiAnZW5jb2RpbmcnIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdXNlZCBpbiB0aGUgY29yZS4gIFRoaXMgaXMgaW4gcmVnaXN0ZXJzLAorICogdGV4dCBtYW5pcHVsYXRpb24sIGJ1ZmZlcnMsIGV0Yy4gIENvbnZlcnNpb24gaGFzIHRvIGJlIGRvbmUgd2hlbiBjaGFyYWN0ZXJzCisgKiBpbiBhbm90aGVyIGVuY29kaW5nIGFyZSByZWNlaXZlZCBvciBzZW5kOgorICoKKyAqCQkgICAgICAgY2xpcGJvYXJkCisgKgkJCSAgIF4KKyAqCQkJICAgfCAoMikKKyAqCQkJICAgVgorICoJCSAgICstLS0tLS0tLS0tLS0tLS0rCisgKgkgICAgICAoMSkgIHwJCSAgIHwgKDMpCisgKiAga2V5Ym9hcmQgLS0tLS0+fAkgY29yZQkgICB8LS0tLS0+IGRpc3BsYXkKKyAqCQkgICB8CQkgICB8CisgKgkJICAgKy0tLS0tLS0tLS0tLS0tLSsKKyAqCQkJICAgXgorICoJCQkgICB8ICg0KQorICoJCQkgICBWCisgKgkJCSBmaWxlCisgKgorICogKDEpIFR5cGVkIGNoYXJhY3RlcnMgYXJyaXZlIGluIHRoZSBjdXJyZW50IGxvY2FsZS4gIENvbnZlcnNpb24gaXMgdG8gYmUKKyAqICAgICBkb25lIHdoZW4gJ2VuY29kaW5nJyBpcyBkaWZmZXJlbnQgZnJvbSAndGVybWVuY29kaW5nJy4KKyAqICgyKSBUZXh0IHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgd2l0aCB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIHdpdGgKKyAqICAgICAnZW5jb2RpbmcnLiAgSWYgdGhpcyBpcyBub3Qgc3VmZmljaWVudCwgc3lzdGVtLXNwZWNpZmljIGNvbnZlcnNpb24KKyAqICAgICBtaWdodCBiZSByZXF1aXJlZC4KKyAqICgzKSBGb3IgdGhlIEdVSSB0aGUgY29ycmVjdCBmb250IG11c3QgYmUgc2VsZWN0ZWQsIG5vIGNvbnZlcnNpb24gZG9uZS4KKyAqICAgICBPdGhlcndpc2UsIGNvbnZlcnNpb24gaXMgdG8gYmUgZG9uZSB3aGVuICdlbmNvZGluZycgZGlmZmVycyBmcm9tCisgKiAgICAgJ3Rlcm1lbmNvZGluZycuICAoRGlmZmVyZW50IGluIHRoZSBHVEsrIDIgcG9ydCAtLSAndGVybWVuY29kaW5nJworICogICAgIGlzIGFsd2F5cyB1c2VkIGZvciBib3RoIGlucHV0IGFuZCBvdXRwdXQgYW5kIG11c3QgYWx3YXlzIGJlIHNldCB0bworICogICAgICJ1dGYtOCIuICBndWlfbWNoX2luaXQoKSBkb2VzIHRoaXMgYXV0b21hdGljYWxseS4pCisgKiAoNCkgVGhlIGVuY29kaW5nIG9mIHRoZSBmaWxlIGlzIHNwZWNpZmllZCB3aXRoICdmaWxlZW5jb2RpbmcnLiAgQ29udmVyc2lvbgorICogICAgIGlzIHRvIGJlIGRvbmUgd2hlbiBpdCdzIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycuCisgKgorICogVGhlIHZpbWluZm8gZmlsZSBpcyBhIHNwZWNpYWwgY2FzZTogT25seSB0ZXh0IGlzIGNvbnZlcnRlZCwgbm90IGZpbGUgbmFtZXMuCisgKiBWaW0gc2NyaXB0cyBtYXkgY29udGFpbiBhbiAiOmVuY29kaW5nIiBjb21tYW5kLiAgVGhpcyBoYXMgYW4gZWZmZWN0IGZvcgorICogc29tZSBjb21tYW5kcywgbGlrZSAiOm1lbnV0cmFucyIKKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBXSU4zMlVOSVgKKyMgaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjIGVuZGlmCisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgaWZkZWYgV0lOMzIKKyMgIHVuZGVmIFdJTjMyCSAgICAvKiBTb21lIHdpbmRvd3MuaCBkZWZpbmUgV0lOMzIsIHdlIGRvbid0IHdhbnQgdGhhdCBoZXJlLiAqLworIyBlbmRpZgorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChXSU4zMjY0KSB8fCBkZWZpbmVkKFdJTjMyVU5JWCkpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorIyBpbmNsdWRlIDx3aW5ubHMuaD4KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUlfWDExCisjIGluY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNlbmRpZgorI2lmZGVmIFhfTE9DQUxFCisjaW5jbHVkZSA8WDExL1hsb2NhbGUuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1hJTSkgJiYgZGVmaW5lZChIQVZFX0dUSzIpCisjIGluY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjIGlmZGVmIFdJTjMyNjQKKyMgIGluY2x1ZGUgPGdkay9nZGt3aW4zMi5oPgorIyBlbHNlCisjICBpbmNsdWRlIDxnZGsvZ2RreC5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1dDSEFSX0gKKyMgaW5jbHVkZSA8d2NoYXIuaD4KKyNlbmRpZgorCisjaWYgMAorLyogVGhpcyBoYXMgYmVlbiBkaXNhYmxlZCwgYmVjYXVzZSBzZXZlcmFsIHBlb3BsZSByZXBvcnRlZCBwcm9ibGVtcyB3aXRoIHRoZQorICogd2N3aWR0aCgpIGFuZCBpc3dwcmludCgpIGxpYnJhcnkgZnVuY3Rpb25zLCBlc3AuIGZvciBIZWJyZXcuICovCisjIGlmZGVmIF9fU1REQ19JU09fMTA2NDZfXworIyAgZGVmaW5lIFVTRV9XQ0hBUl9GVU5DVElPTlMKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSB8fCBkZWZpbmVkKFBST1RPKQorCitzdGF0aWMgaW50IGVuY19jYW5vbl9zZWFyY2ggX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK3N0YXRpYyBpbnQgZGJjc19jaGFyMmxlbiBfX0FSR1MoKGludCBjKSk7CitzdGF0aWMgaW50IGRiY3NfY2hhcjJieXRlcyBfX0FSR1MoKGludCBjLCBjaGFyX3UgKmJ1ZikpOworc3RhdGljIGludCBkYmNzX3B0cjJsZW5fY2hlY2sgX19BUkdTKChjaGFyX3UgKnApKTsKK3N0YXRpYyBpbnQgZGJjc19jaGFyMmNlbGxzIF9fQVJHUygoaW50IGMpKTsKK3N0YXRpYyBpbnQgZGJjc19wdHIyY2hhciBfX0FSR1MoKGNoYXJfdSAqcCkpOworCisvKiBMb29rdXAgdGFibGUgdG8gcXVpY2tseSBnZXQgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiBhIFVURi04IGNoYXJhY3RlciBmcm9tCisgKiB0aGUgZmlyc3QgYnl0ZSBvZiBhIFVURi04IHN0cmluZy4gIEJ5dGVzIHdoaWNoIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZCBhcyB0aGUKKyAqIGZpcnN0IGJ5dGUgaGF2ZSBhIG9uZSwgYmVjYXVzZSB0aGVzZSB3aWxsIGJlIHVzZWQgc2VwYXJhdGVseS4gKi8KK3N0YXRpYyBjaGFyIHV0ZjhsZW5fdGFiWzI1Nl0gPQoreworICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCisgICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsIC8qYm9ndXMqLworICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwgLypib2d1cyovCisgICAgMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLAorICAgIDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsNCw0LDQsNCw0LDQsNCw0LDUsNSw1LDUsNiw2LDEsMSwKK307CisKKy8qCisgKiBYSU0gb2Z0ZW4gY2F1c2VzIHRyb3VibGUuICBEZWZpbmUgWElNX0RFQlVHIHRvIGdldCBhIGxvZyBvZiBYSU0gY2FsbGJhY2tzCisgKiBpbiB0aGUgInhpbS5sb2ciIGZpbGUuCisgKi8KKy8qICNkZWZpbmUgWElNX0RFQlVHICovCisjaWZkZWYgWElNX0RFQlVHCisgICAgc3RhdGljIHZvaWQKK3hpbV9sb2coY2hhciAqcywgLi4uKQoreworICAgIHZhX2xpc3QgYXJnbGlzdDsKKyAgICBzdGF0aWMgRklMRSAqZmQgPSBOVUxMOworCisgICAgaWYgKGZkID09IChGSUxFICopLTEpCisJcmV0dXJuOworICAgIGlmIChmZCA9PSBOVUxMKQorICAgIHsKKwlmZCA9IGZvcGVuKCJ4aW0ubG9nIiwgInciKTsKKwlpZiAoZmQgPT0gTlVMTCkKKwl7CisJICAgIEVNU0coIkNhbm5vdCBvcGVuIHhpbS5sb2ciKTsKKwkgICAgZmQgPSAoRklMRSAqKS0xOworCSAgICByZXR1cm47CisJfQorICAgIH0KKworICAgIHZhX3N0YXJ0KGFyZ2xpc3QsIHMpOworICAgIHZmcHJpbnRmKGZkLCBzLCBhcmdsaXN0KTsKKyAgICB2YV9lbmQoYXJnbGlzdCk7Cit9CisjZW5kaWYKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpIHx8IGRlZmluZWQoRkVBVF9QT1NUU0NSSVBUKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENhbm9uaWNhbCBlbmNvZGluZyBuYW1lcyBhbmQgdGhlaXIgcHJvcGVydGllcy4KKyAqICJpc28tODg1OS1uIiBpcyBoYW5kbGVkIGJ5IGVuY19jYW5vbml6ZSgpIGRpcmVjdGx5LgorICovCitzdGF0aWMgc3RydWN0Cit7ICAgY2hhciAqbmFtZTsJCWludCBwcm9wOwkJaW50IGNvZGVwYWdlO30KK2VuY19jYW5vbl90YWJsZVtdID0KK3sKKyNkZWZpbmUgSURYX0xBVElOXzEJMAorICAgIHsibGF0aW4xIiwJCUVOQ184QklUICsgRU5DX0xBVElOMSwJMTI1Mn0sCisjZGVmaW5lIElEWF9JU09fMgkxCisgICAgeyJpc28tODg1OS0yIiwJRU5DXzhCSVQsCQkwfSwKKyNkZWZpbmUgSURYX0lTT18zCTIKKyAgICB7Imlzby04ODU5LTMiLAlFTkNfOEJJVCwJCTB9LAorI2RlZmluZSBJRFhfSVNPXzQJMworICAgIHsiaXNvLTg4NTktNCIsCUVOQ184QklULAkJMH0sCisjZGVmaW5lIElEWF9JU09fNQk0CisgICAgeyJpc28tODg1OS01IiwJRU5DXzhCSVQsCQkwfSwKKyNkZWZpbmUgSURYX0lTT182CTUKKyAgICB7Imlzby04ODU5LTYiLAlFTkNfOEJJVCwJCTB9LAorI2RlZmluZSBJRFhfSVNPXzcJNgorICAgIHsiaXNvLTg4NTktNyIsCUVOQ184QklULAkJMH0sCisjZGVmaW5lIElEWF9DUDEyNTUJNworICAgIHsiY3AxMjU1IiwJCUVOQ184QklULAkJMTI1NX0sIC8qIGNsb3NlIHRvIGlzby04ODU5LTggKi8KKyNkZWZpbmUgSURYX0lTT184CTgKKyAgICB7Imlzby04ODU5LTgiLAlFTkNfOEJJVCwJCTB9LAorI2RlZmluZSBJRFhfSVNPXzkJOQorICAgIHsiaXNvLTg4NTktOSIsCUVOQ184QklULAkJMH0sCisjZGVmaW5lIElEWF9JU09fMTAJMTAKKyAgICB7Imlzby04ODU5LTEwIiwJRU5DXzhCSVQsCQkwfSwKKyNkZWZpbmUgSURYX0lTT18xMQkxMQorICAgIHsiaXNvLTg4NTktMTEiLAlFTkNfOEJJVCwJCTB9LAorI2RlZmluZSBJRFhfSVNPXzEzCTEyCisgICAgeyJpc28tODg1OS0xMyIsCUVOQ184QklULAkJMH0sCisjZGVmaW5lIElEWF9JU09fMTQJMTMKKyAgICB7Imlzby04ODU5LTE0IiwJRU5DXzhCSVQsCQkwfSwKKyNkZWZpbmUgSURYX0lTT18xNQkxNAorICAgIHsiaXNvLTg4NTktMTUiLAlFTkNfOEJJVCwJCTB9LAorI2RlZmluZSBJRFhfS09JOF9SCTE1CisgICAgeyJrb2k4LXIiLAkJRU5DXzhCSVQsCQkwfSwKKyNkZWZpbmUgSURYX0tPSThfVQkxNgorICAgIHsia29pOC11IiwJCUVOQ184QklULAkJMH0sCisjZGVmaW5lIElEWF9VVEY4CTE3CisgICAgeyJ1dGYtOCIsCQlFTkNfVU5JQ09ERSwJCTB9LAorI2RlZmluZSBJRFhfVUNTMgkxOAorICAgIHsidWNzLTIiLAkJRU5DX1VOSUNPREUgKyBFTkNfRU5ESUFOX0IgKyBFTkNfMkJZVEUsIDB9LAorI2RlZmluZSBJRFhfVUNTMkxFCTE5CisgICAgeyJ1Y3MtMmxlIiwJCUVOQ19VTklDT0RFICsgRU5DX0VORElBTl9MICsgRU5DXzJCWVRFLCAwfSwKKyNkZWZpbmUgSURYX1VURjE2CTIwCisgICAgeyJ1dGYtMTYiLAkJRU5DX1VOSUNPREUgKyBFTkNfRU5ESUFOX0IgKyBFTkNfMldPUkQsIDB9LAorI2RlZmluZSBJRFhfVVRGMTZMRQkyMQorICAgIHsidXRmLTE2bGUiLAlFTkNfVU5JQ09ERSArIEVOQ19FTkRJQU5fTCArIEVOQ18yV09SRCwgMH0sCisjZGVmaW5lIElEWF9VQ1M0CTIyCisgICAgeyJ1Y3MtNCIsCQlFTkNfVU5JQ09ERSArIEVOQ19FTkRJQU5fQiArIEVOQ180QllURSwgMH0sCisjZGVmaW5lIElEWF9VQ1M0TEUJMjMKKyAgICB7InVjcy00bGUiLAkJRU5DX1VOSUNPREUgKyBFTkNfRU5ESUFOX0wgKyBFTkNfNEJZVEUsIDB9LAorI2RlZmluZSBJRFhfREVCVUcJMjQKKyAgICB7ImRlYnVnIiwJCUVOQ19EQkNTLAkJREJDU19ERUJVR30sCisjZGVmaW5lIElEWF9DUDkzMgkyNQorICAgIHsiY3A5MzIiLAkJRU5DX0RCQ1MsCQlEQkNTX0pQTn0sCisjZGVmaW5lIElEWF9DUDk0OQkyNgorICAgIHsiY3A5NDkiLAkJRU5DX0RCQ1MsCQlEQkNTX0tPUn0sCisjZGVmaW5lIElEWF9DUDkzNgkyNworICAgIHsiY3A5MzYiLAkJRU5DX0RCQ1MsCQlEQkNTX0NIU30sCisjZGVmaW5lIElEWF9DUDk1MAkyOAorICAgIHsiY3A5NTAiLAkJRU5DX0RCQ1MsCQlEQkNTX0NIVH0sCisjZGVmaW5lIElEWF9FVUNfSlAJMjkKKyAgICB7ImV1Yy1qcCIsCQlFTkNfREJDUywJCURCQ1NfSlBOVX0sCisjZGVmaW5lIElEWF9TSklTCTMwCisgICAgeyJzamlzIiwJCUVOQ19EQkNTLAkJREJDU19KUE59LAorI2RlZmluZSBJRFhfRVVDX0tSCTMxCisgICAgeyJldWMta3IiLAkJRU5DX0RCQ1MsCQlEQkNTX0tPUlV9LAorI2RlZmluZSBJRFhfRVVDX0NOCTMyCisgICAgeyJldWMtY24iLAkJRU5DX0RCQ1MsCQlEQkNTX0NIU1V9LAorI2RlZmluZSBJRFhfRVVDX1RXCTMzCisgICAgeyJldWMtdHciLAkJRU5DX0RCQ1MsCQlEQkNTX0NIVFV9LAorI2RlZmluZSBJRFhfQklHNQkzNAorICAgIHsiYmlnNSIsCQlFTkNfREJDUywJCURCQ1NfQ0hUfSwKKyNkZWZpbmUgSURYX0NQMTI1MQkzNQorICAgIHsiY3AxMjUxIiwJCUVOQ184QklULAkJMTI1MX0sCisjZGVmaW5lIElEWF9NQUNST01BTgkzNgorICAgIHsibWFjcm9tYW4iLAlFTkNfOEJJVCArIEVOQ19NQUNST01BTiwgMH0sCisjZGVmaW5lIElEWF9DT1VOVAkzNworfTsKKworLyoKKyAqIEFsaWFzZXMgZm9yIGVuY29kaW5nIG5hbWVzLgorICovCitzdGF0aWMgc3RydWN0Cit7ICAgY2hhciAqbmFtZTsJCWludCBjYW5vbjt9CitlbmNfYWxpYXNfdGFibGVbXSA9Cit7CisgICAgeyJhbnNpIiwJCUlEWF9MQVRJTl8xfSwKKyAgICB7Imlzby04ODU5LTEiLAlJRFhfTEFUSU5fMX0sCisgICAgeyJsYXRpbjIiLAkJSURYX0lTT18yfSwKKyAgICB7ImxhdGluMyIsCQlJRFhfSVNPXzN9LAorICAgIHsibGF0aW40IiwJCUlEWF9JU09fNH0sCisgICAgeyJjeXJpbGxpYyIsCUlEWF9JU09fNX0sCisgICAgeyJhcmFiaWMiLAkJSURYX0lTT182fSwKKyAgICB7ImdyZWVrIiwJCUlEWF9JU09fN30sCisjaWZkZWYgV0lOMzI2NAorICAgIHsiaGVicmV3IiwJCUlEWF9DUDEyNTV9LAorI2Vsc2UKKyAgICB7ImhlYnJldyIsCQlJRFhfSVNPXzh9LAorI2VuZGlmCisgICAgeyJsYXRpbjUiLAkJSURYX0lTT185fSwKKyAgICB7InR1cmtpc2giLAkJSURYX0lTT185fSwgLyogPyAqLworICAgIHsibGF0aW42IiwJCUlEWF9JU09fMTB9LAorICAgIHsibm9yZGljIiwJCUlEWF9JU09fMTB9LCAvKiA/ICovCisgICAgeyJ0aGFpIiwJCUlEWF9JU09fMTF9LCAvKiA/ICovCisgICAgeyJsYXRpbjciLAkJSURYX0lTT18xM30sCisgICAgeyJsYXRpbjgiLAkJSURYX0lTT18xNH0sCisgICAgeyJsYXRpbjkiLAkJSURYX0lTT18xNX0sCisgICAgeyJ1dGY4IiwJCUlEWF9VVEY4fSwKKyAgICB7InVuaWNvZGUiLAkJSURYX1VDUzJ9LAorICAgIHsidWNzMiIsCQlJRFhfVUNTMn0sCisgICAgeyJ1Y3MyYmUiLAkJSURYX1VDUzJ9LAorICAgIHsidWNzLTJiZSIsCQlJRFhfVUNTMn0sCisgICAgeyJ1Y3MybGUiLAkJSURYX1VDUzJMRX0sCisgICAgeyJ1dGYxNiIsCQlJRFhfVVRGMTZ9LAorICAgIHsidXRmMTZiZSIsCQlJRFhfVVRGMTZ9LAorICAgIHsidXRmLTE2YmUiLAlJRFhfVVRGMTZ9LAorICAgIHsidXRmMTZsZSIsCQlJRFhfVVRGMTZMRX0sCisgICAgeyJ1Y3M0IiwJCUlEWF9VQ1M0fSwKKyAgICB7InVjczRiZSIsCQlJRFhfVUNTNH0sCisgICAgeyJ1Y3MtNGJlIiwJCUlEWF9VQ1M0fSwKKyAgICB7InVjczRsZSIsCQlJRFhfVUNTNExFfSwKKyAgICB7IjkzMiIsCQlJRFhfQ1A5MzJ9LAorICAgIHsiOTQ5IiwJCUlEWF9DUDk0OX0sCisgICAgeyI5MzYiLAkJSURYX0NQOTM2fSwKKyAgICB7Ijk1MCIsCQlJRFhfQ1A5NTB9LAorICAgIHsiZXVjanAiLAkJSURYX0VVQ19KUH0sCisgICAgeyJ1bml4LWppcyIsCUlEWF9FVUNfSlB9LAorICAgIHsidWppcyIsCQlJRFhfRVVDX0pQfSwKKyAgICB7InNoaWZ0LWppcyIsCUlEWF9TSklTfSwKKyAgICB7ImV1Y2tyIiwJCUlEWF9FVUNfS1J9LAorICAgIHsiNTYwMSIsCQlJRFhfRVVDX0tSfSwJLyogU3VuOiBLUyBDIDU2MDEgKi8KKyAgICB7ImV1Y2NuIiwJCUlEWF9FVUNfQ059LAorICAgIHsiZ2IyMzEyIiwJCUlEWF9FVUNfQ059LAorICAgIHsiZXVjdHciLAkJSURYX0VVQ19UV30sCisjaWYgZGVmaW5lZChXSU4zMjY0KSB8fCBkZWZpbmVkKFdJTjMyVU5JWCkgfHwgZGVmaW5lZChNQUNPUykKKyAgICB7ImphcGFuIiwJCUlEWF9DUDkzMn0sCisgICAgeyJrb3JlYSIsCQlJRFhfQ1A5NDl9LAorICAgIHsicHJjIiwJCUlEWF9DUDkzNn0sCisgICAgeyJjaGluZXNlIiwJCUlEWF9DUDkzNn0sCisgICAgeyJ0YWl3YW4iLAkJSURYX0NQOTUwfSwKKyAgICB7ImJpZzUiLAkJSURYX0NQOTUwfSwKKyNlbHNlCisgICAgeyJqYXBhbiIsCQlJRFhfRVVDX0pQfSwKKyAgICB7ImtvcmVhIiwJCUlEWF9FVUNfS1J9LAorICAgIHsicHJjIiwJCUlEWF9FVUNfQ059LAorICAgIHsiY2hpbmVzZSIsCQlJRFhfRVVDX0NOfSwKKyAgICB7InRhaXdhbiIsCQlJRFhfRVVDX1RXfSwKKyAgICB7ImNwOTUwIiwJCUlEWF9CSUc1fSwKKyAgICB7Ijk1MCIsCQlJRFhfQklHNX0sCisjZW5kaWYKKyAgICB7Im1hYyIsCQlJRFhfTUFDUk9NQU59LAorICAgIHtOVUxMLAkJMH0KK307CisKKyNpZm5kZWYgQ1BfVVRGOAorIyBkZWZpbmUgQ1BfVVRGOCA2NTAwMQkvKiBtYWdpYyBudW1iZXIgZnJvbSB3aW5ubHMuaCAqLworI2VuZGlmCisKKy8qCisgKiBGaW5kIGVuY29kaW5nICJuYW1lIiBpbiB0aGUgbGlzdCBvZiBjYW5vbmljYWwgZW5jb2RpbmcgbmFtZXMuCisgKiBSZXR1cm5zIC0xIGlmIG5vdCBmb3VuZC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2VuY19jYW5vbl9zZWFyY2gobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgaW50CQlpOworCisgICAgZm9yIChpID0gMDsgaSA8IElEWF9DT1VOVDsgKytpKQorCWlmIChTVFJDTVAobmFtZSwgZW5jX2Nhbm9uX3RhYmxlW2ldLm5hbWUpID09IDApCisJICAgIHJldHVybiBpOworICAgIHJldHVybiAtMTsKK30KKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qCisgKiBGaW5kIGNhbm9uaWNhbCBlbmNvZGluZyAibmFtZSIgaW4gdGhlIGxpc3QgYW5kIHJldHVybiBpdHMgcHJvcGVydGllcy4KKyAqIFJldHVybnMgMCBpZiBub3QgZm91bmQuCisgKi8KKyAgICBpbnQKK2VuY19jYW5vbl9wcm9wcyhuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBpID0gZW5jX2Nhbm9uX3NlYXJjaChuYW1lKTsKKyAgICBpZiAoaSA+PSAwKQorCXJldHVybiBlbmNfY2Fub25fdGFibGVbaV0ucHJvcDsKKyNpZmRlZiBXSU4zMjY0CisgICAgaWYgKG5hbWVbMF0gPT0gJ2MnICYmIG5hbWVbMV0gPT0gJ3AnICYmIFZJTV9JU0RJR0lUKG5hbWVbMl0pKQorICAgIHsKKwlDUElORk8JY3BpbmZvOworCisJLyogR2V0IGluZm8gb24gdGhpcyBjb2RlcGFnZSB0byBmaW5kIG91dCB3aGF0IGl0IGlzLiAqLworCWlmIChHZXRDUEluZm8oYXRvaShuYW1lICsgMiksICZjcGluZm8pICE9IDApCisJeworCSAgICBpZiAoY3BpbmZvLk1heENoYXJTaXplID09IDEpIC8qIHNvbWUgc2luZ2xlLWJ5dGUgZW5jb2RpbmcgKi8KKwkJcmV0dXJuIEVOQ184QklUOworCSAgICBpZiAoY3BpbmZvLk1heENoYXJTaXplID09IDIKKwkJICAgICYmIChjcGluZm8uTGVhZEJ5dGVbMF0gIT0gMCB8fCBjcGluZm8uTGVhZEJ5dGVbMV0gIT0gMCkpCisJCS8qIG11c3QgYmUgYSBEQkNTIGVuY29kaW5nICovCisJCXJldHVybiBFTkNfREJDUzsKKwl9CisJcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCisgICAgaWYgKFNUUk5DTVAobmFtZSwgIjJieXRlLSIsIDYpID09IDApCisJcmV0dXJuIEVOQ19EQkNTOworICAgIGlmIChTVFJOQ01QKG5hbWUsICI4Yml0LSIsIDUpID09IDAgfHwgU1RSTkNNUChuYW1lLCAiaXNvLTg4NTktIiwgOSkgPT0gMCkKKwlyZXR1cm4gRU5DXzhCSVQ7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdXAgZm9yIHVzaW5nIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKyAqIENhbGxlZCBpbiB0aHJlZSBjYXNlczoKKyAqIC0gYnkgbWFpbigpIHRvIGluaXRpYWxpemUgKHBfZW5jID09IE5VTEwpCisgKiAtIGJ5IHNldF9pbml0XzEoKSBhZnRlciAnZW5jb2RpbmcnIHdhcyBzZXQgdG8gaXRzIGRlZmF1bHQuCisgKiAtIGJ5IGRvX3NldCgpIHdoZW4gJ2VuY29kaW5nJyBoYXMgYmVlbiBzZXQuCisgKiBwX2VuYyBtdXN0IGhhdmUgYmVlbiBwYXNzZWQgdGhyb3VnaCBlbmNfY2Fub25pemUoKSBhbHJlYWR5LgorICogU2V0cyB0aGUgImVuY191bmljb2RlIiwgImVuY191dGY4IiwgImVuY19kYmNzIiBhbmQgImhhc19tYnl0ZSIgZmxhZ3MuCisgKiBGaWxscyBtYl9ieXRlbGVuX3RhYltdIGFuZCByZXR1cm5zIE5VTEwgd2hlbiB0aGVyZSBhcmUgbm8gcHJvYmxlbXMuCisgKiBXaGVuIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZzogUmV0dXJucyBhbiBlcnJvciBtZXNzYWdlIGFuZCBkb2Vzbid0IGNoYW5nZQorICogYW55dGhpbmcuCisgKi8KKyAgICBjaGFyX3UgKgorbWJfaW5pdCgpCit7CisgICAgaW50CQlpOworICAgIGludAkJaWR4OworICAgIGludAkJbjsKKyAgICBpbnQJCWVuY19kYmNzX25ldyA9IDA7CisjaWYgZGVmaW5lZChVU0VfSUNPTlYpICYmICFkZWZpbmVkKFdJTjMyNjQpICYmICFkZWZpbmVkKFdJTjMyVU5JWCkgXAorCSYmICFkZWZpbmVkKE1BQ09TKQorIyBkZWZpbmUgTEVOX0ZST01fQ09OVgorICAgIHZpbWNvbnZfVAl2aW1jb252OworICAgIGNoYXJfdQkqcDsKKyNlbmRpZgorCisgICAgaWYgKHBfZW5jID09IE5VTEwpCisgICAgeworCS8qIEp1c3Qgc3RhcnRpbmcgdXA6IHNldCB0aGUgd2hvbGUgdGFibGUgdG8gb25lJ3MuICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKQorCSAgICBtYl9ieXRlbGVuX3RhYltpXSA9IDE7CisJaW5wdXRfY29udi52Y190eXBlID0gQ09OVl9OT05FOworCWlucHV0X2NvbnYudmNfZmFjdG9yID0gMTsKKwlvdXRwdXRfY29udi52Y190eXBlID0gQ09OVl9OT05FOworCXJldHVybiBOVUxMOworICAgIH0KKworI2lmZGVmIFdJTjMyNjQKKyAgICBpZiAocF9lbmNbMF0gPT0gJ2MnICYmIHBfZW5jWzFdID09ICdwJyAmJiBWSU1fSVNESUdJVChwX2VuY1syXSkpCisgICAgeworCUNQSU5GTwljcGluZm87CisKKwkvKiBHZXQgaW5mbyBvbiB0aGlzIGNvZGVwYWdlIHRvIGZpbmQgb3V0IHdoYXQgaXQgaXMuICovCisJaWYgKEdldENQSW5mbyhhdG9pKHBfZW5jICsgMiksICZjcGluZm8pICE9IDApCisJeworCSAgICBpZiAoY3BpbmZvLk1heENoYXJTaXplID09IDEpCisJICAgIHsKKwkJLyogc29tZSBzaW5nbGUtYnl0ZSBlbmNvZGluZyAqLworCQllbmNfdW5pY29kZSA9IDA7CisJCWVuY191dGY4ID0gRkFMU0U7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoY3BpbmZvLk1heENoYXJTaXplID09IDIKKwkJICAgICYmIChjcGluZm8uTGVhZEJ5dGVbMF0gIT0gMCB8fCBjcGluZm8uTGVhZEJ5dGVbMV0gIT0gMCkpCisJICAgIHsKKwkJLyogbXVzdCBiZSBhIERCQ1MgZW5jb2RpbmcsIGNoZWNrIGJlbG93ICovCisJCWVuY19kYmNzX25ldyA9IGF0b2kocF9lbmMgKyAyKTsKKwkgICAgfQorCSAgICBlbHNlCisJCWdvdG8gY29kZXBhZ2VfaW52YWxpZDsKKwl9CisJZWxzZSBpZiAoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpCisJeworY29kZXBhZ2VfaW52YWxpZDoKKwkgICAgcmV0dXJuIChjaGFyX3UgKilOXygiRTU0MzogTm90IGEgdmFsaWQgY29kZXBhZ2UiKTsKKwl9CisgICAgfQorI2VuZGlmCisgICAgZWxzZSBpZiAoU1RSTkNNUChwX2VuYywgIjhiaXQtIiwgNSkgPT0gMAorCSAgICB8fCBTVFJOQ01QKHBfZW5jLCAiaXNvLTg4NTktIiwgOSkgPT0gMCkKKyAgICB7CisJLyogQWNjZXB0IGFueSAiOGJpdC0iIG9yICJpc28tODg1OS0iIG5hbWUuICovCisJZW5jX3VuaWNvZGUgPSAwOworCWVuY191dGY4ID0gRkFMU0U7CisgICAgfQorICAgIGVsc2UgaWYgKFNUUk5DTVAocF9lbmMsICIyYnl0ZS0iLCA2KSA9PSAwKQorICAgIHsKKyNpZmRlZiBXSU4zMjY0CisJLyogV2luZG93czogYWNjZXB0IG9ubHkgdmFsaWQgY29kZXBhZ2UgbnVtYmVycywgY2hlY2sgYmVsb3cuICovCisJaWYgKHBfZW5jWzZdICE9ICdjJyB8fCBwX2VuY1s3XSAhPSAncCcKKwkJCQkgICAgICB8fCAoZW5jX2RiY3NfbmV3ID0gYXRvaShwX2VuYyArIDgpKSA9PSAwKQorCSAgICByZXR1cm4gZV9pbnZhcmc7CisjZWxzZQorCS8qIFVuaXg6IGFjY2VwdCBhbnkgIjJieXRlLSIgbmFtZSwgYXNzdW1lIGN1cnJlbnQgbG9jYWxlLiAqLworCWVuY19kYmNzX25ldyA9IERCQ1NfMkJZVEU7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZSBpZiAoKGlkeCA9IGVuY19jYW5vbl9zZWFyY2gocF9lbmMpKSA+PSAwKQorICAgIHsKKwlpID0gZW5jX2Nhbm9uX3RhYmxlW2lkeF0ucHJvcDsKKwlpZiAoaSAmIEVOQ19VTklDT0RFKQorCXsKKwkgICAgLyogVW5pY29kZSAqLworCSAgICBlbmNfdXRmOCA9IFRSVUU7CisJICAgIGlmIChpICYgKEVOQ18yQllURSB8IEVOQ18yV09SRCkpCisJCWVuY191bmljb2RlID0gMjsKKwkgICAgZWxzZSBpZiAoaSAmIEVOQ180QllURSkKKwkJZW5jX3VuaWNvZGUgPSA0OworCSAgICBlbHNlCisJCWVuY191bmljb2RlID0gMDsKKwl9CisJZWxzZSBpZiAoaSAmIEVOQ19EQkNTKQorCXsKKwkgICAgLyogMmJ5dGUsIGhhbmRsZSBiZWxvdyAqLworCSAgICBlbmNfZGJjc19uZXcgPSBlbmNfY2Fub25fdGFibGVbaWR4XS5jb2RlcGFnZTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyogTXVzdCBiZSA4LWJpdC4gKi8KKwkgICAgZW5jX3VuaWNvZGUgPSAwOworCSAgICBlbmNfdXRmOCA9IEZBTFNFOworCX0KKyAgICB9CisgICAgZWxzZSAgICAvKiBEb24ndCBrbm93IHdoYXQgZW5jb2RpbmcgdGhpcyBpcywgcmVqZWN0IGl0LiAqLworCXJldHVybiBlX2ludmFyZzsKKworICAgIGlmIChlbmNfZGJjc19uZXcgIT0gMCkKKyAgICB7CisjaWZkZWYgV0lOMzI2NAorCS8qIENoZWNrIGlmIHRoZSBEQkNTIGNvZGUgcGFnZSBpcyBPSy4gKi8KKwlpZiAoIUlzVmFsaWRDb2RlUGFnZShlbmNfZGJjc19uZXcpKQorCSAgICBnb3RvIGNvZGVwYWdlX2ludmFsaWQ7CisjZW5kaWYKKwllbmNfdW5pY29kZSA9IDA7CisJZW5jX3V0ZjggPSBGQUxTRTsKKyAgICB9CisgICAgZW5jX2RiY3MgPSBlbmNfZGJjc19uZXc7CisgICAgaGFzX21ieXRlID0gKGVuY19kYmNzICE9IDAgfHwgZW5jX3V0ZjgpOworCisjaWZkZWYgV0lOMzI2NAorICAgIGVuY19jb2RlcGFnZSA9IGVuY25hbWUyY29kZXBhZ2UocF9lbmMpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFNldCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMuCisgICAgICovCisgICAgaWYgKGVuY191dGY4KQorICAgIHsKKwltYl9wdHIybGVuX2NoZWNrID0gdXRmY19wdHIybGVuX2NoZWNrOworCW1iX2NoYXIybGVuID0gdXRmX2NoYXIybGVuOworCW1iX2NoYXIyYnl0ZXMgPSB1dGZfY2hhcjJieXRlczsKKwltYl9wdHIyY2VsbHMgPSB1dGZfcHRyMmNlbGxzOworCW1iX2NoYXIyY2VsbHMgPSB1dGZfY2hhcjJjZWxsczsKKwltYl9vZmYyY2VsbHMgPSB1dGZfb2ZmMmNlbGxzOworCW1iX3B0cjJjaGFyID0gdXRmX3B0cjJjaGFyOworCW1iX2hlYWRfb2ZmID0gdXRmX2hlYWRfb2ZmOworICAgIH0KKyAgICBlbHNlIGlmIChlbmNfZGJjcyAhPSAwKQorICAgIHsKKwltYl9wdHIybGVuX2NoZWNrID0gZGJjc19wdHIybGVuX2NoZWNrOworCW1iX2NoYXIybGVuID0gZGJjc19jaGFyMmxlbjsKKwltYl9jaGFyMmJ5dGVzID0gZGJjc19jaGFyMmJ5dGVzOworCW1iX3B0cjJjZWxscyA9IGRiY3NfcHRyMmNlbGxzOworCW1iX2NoYXIyY2VsbHMgPSBkYmNzX2NoYXIyY2VsbHM7CisJbWJfb2ZmMmNlbGxzID0gZGJjc19vZmYyY2VsbHM7CisJbWJfcHRyMmNoYXIgPSBkYmNzX3B0cjJjaGFyOworCW1iX2hlYWRfb2ZmID0gZGJjc19oZWFkX29mZjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwltYl9wdHIybGVuX2NoZWNrID0gbGF0aW5fcHRyMmxlbl9jaGVjazsKKwltYl9jaGFyMmxlbiA9IGxhdGluX2NoYXIybGVuOworCW1iX2NoYXIyYnl0ZXMgPSBsYXRpbl9jaGFyMmJ5dGVzOworCW1iX3B0cjJjZWxscyA9IGxhdGluX3B0cjJjZWxsczsKKwltYl9jaGFyMmNlbGxzID0gbGF0aW5fY2hhcjJjZWxsczsKKwltYl9vZmYyY2VsbHMgPSBsYXRpbl9vZmYyY2VsbHM7CisJbWJfcHRyMmNoYXIgPSBsYXRpbl9wdHIyY2hhcjsKKwltYl9oZWFkX29mZiA9IGxhdGluX2hlYWRfb2ZmOworICAgIH0KKworICAgIC8qCisgICAgICogRmlsbCB0aGUgbWJfYnl0ZWxlbl90YWJbXSBmb3IgTUJfQllURTJMRU4oKS4KKyAgICAgKi8KKyNpZmRlZiBMRU5fRlJPTV9DT05WCisgICAgLyogV2hlbiAnZW5jb2RpbmcnIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IGxvY2FsZSBtYmxlbigpIHdvbid0CisgICAgICogd29yay4gIFVzZSBjb252ZXJzaW9uIHRvICJ1dGYtOCIgaW5zdGVhZC4gKi8KKyAgICB2aW1jb252LnZjX3R5cGUgPSBDT05WX05PTkU7CisgICAgaWYgKGVuY19kYmNzKQorICAgIHsKKwlwID0gZW5jX2xvY2FsZSgpOworCWlmIChwID09IE5VTEwgfHwgU1RSQ01QKHAsIHBfZW5jKSAhPSAwKQorCXsKKwkgICAgY29udmVydF9zZXR1cCgmdmltY29udiwgcF9lbmMsIChjaGFyX3UgKikidXRmLTgiKTsKKwkgICAgdmltY29udi52Y19mYWlsID0gVFJVRTsKKwl9CisJdmltX2ZyZWUocCk7CisgICAgfQorI2VuZGlmCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpCisgICAgeworCS8qIE91ciBvd24gZnVuY3Rpb24gdG8gcmVsaWFibHkgY2hlY2sgdGhlIGxlbmd0aCBvZiBVVEYtOCBjaGFyYWN0ZXJzLAorCSAqIGluZGVwZW5kZW50IG9mIG1ibGVuKCkuICovCisJaWYgKGVuY191dGY4KQorCSAgICBuID0gdXRmOGxlbl90YWJbaV07CisJZWxzZSBpZiAoZW5jX2RiY3MgPT0gMCkKKwkgICAgbiA9IDE7CisJZWxzZQorCXsKKyNpZiBkZWZpbmVkKFdJTjMyNjQpIHx8IGRlZmluZWQoV0lOMzJVTklYKQorCSAgICAvKiBlbmNfZGJjcyBpcyBzZXQgYnkgc2V0dGluZyAnZmlsZWVuY29kaW5nJy4gIEl0IGJlY29tZXMgYSBXaW5kb3dzCisJICAgICAqIENvZGVQYWdlIGlkZW50aWZpZXIsIHdoaWNoIHdlIGNhbiBwYXNzIGRpcmVjdGx5IGluIHRvIFdpbmRvd3MKKwkgICAgICogQVBJICovCisJICAgIG4gPSBJc0RCQ1NMZWFkQnl0ZUV4KGVuY19kYmNzLCAoQllURSlpKSA/IDIgOiAxOworI2Vsc2UKKyMgaWZkZWYgTUFDT1MKKwkgICAgLyoKKwkgICAgICogaWYgbWJsZW4oKSBpcyBub3QgYXZhaWxhYmxlLCBjaGFyYWN0ZXIgd2hpY2ggTVNCIGlzIHR1cm5lZCBvbgorCSAgICAgKiBhcmUgdHJlYXRlZCBhcyBsZWFkaW5nIGJ5dGUgY2hhcmFjdGVyLiAobm90ZSA6IFRoaXMgYXNzdW1wdGlvbgorCSAgICAgKiBpcyBub3QgYWx3YXlzIHRydWUuKQorCSAgICAgKi8KKwkgICAgbiA9IChpICYgMHg4MCkgPyAyIDogMTsKKyMgZWxzZQorCSAgICBjaGFyIGJ1ZltNQl9NQVhCWVRFU107CisjIGlmZGVmIFhfTE9DQUxFCisjICBpZm5kZWYgbWJsZW4KKyMgICBkZWZpbmUgbWJsZW4gX1htYmxlbgorIyAgZW5kaWYKKyMgZW5kaWYKKwkgICAgaWYgKGkgPT0gTlVMKQkvKiBqdXN0IGluIGNhc2UgbWJsZW4oKSBjYW4ndCBoYW5kbGUgIiIgKi8KKwkJbiA9IDE7CisJICAgIGVsc2UKKwkgICAgeworCQlidWZbMF0gPSBpOworCQlidWZbMV0gPSAwOworI2lmZGVmIExFTl9GUk9NX0NPTlYKKwkJaWYgKHZpbWNvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBzdHJpbmdfY29udmVydCgpIHNob3VsZCBmYWlsIHdoZW4gY29udmVydGluZyB0aGUgZmlyc3QKKwkJICAgICAqIGJ5dGUgb2YgYSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIuCisJCSAgICAgKi8KKwkJICAgIHAgPSBzdHJpbmdfY29udmVydCgmdmltY29udiwgKGNoYXJfdSAqKWJ1ZiwgTlVMTCk7CisJCSAgICBpZiAocCAhPSBOVUxMKQorCQkgICAgeworCQkJdmltX2ZyZWUocCk7CisJCQluID0gMTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCW4gPSAyOworCQl9CisJCWVsc2UKKyNlbmRpZgorCQl7CisJCSAgICAvKgorCQkgICAgICogbWJsZW4oKSBzaG91bGQgcmV0dXJuIC0xIGZvciBpbnZhbGlkIChtZWFucyB0aGUgbGVhZGluZworCQkgICAgICogbXVsdGlieXRlKSBjaGFyYWN0ZXIuICBIb3dldmVyIHRoZXJlIGFyZSBzb21lIHBsYXRmb3JtcworCQkgICAgICogd2hlcmUgbWJsZW4oKSByZXR1cm5zIDAgZm9yIGludmFsaWQgY2hhcmFjdGVyLgorCQkgICAgICogVGhlcmVmb3JlLCBmb2xsb3dpbmcgY29uZGl0aW9uIGluY2x1ZGVzIDAuCisJCSAgICAgKi8KKwkJICAgIGlmIChtYmxlbihidWYsIChzaXplX3QpMSkgPD0gMCkKKwkJCW4gPSAyOworCQkgICAgZWxzZQorCQkJbiA9IDE7CisJCX0KKwkgICAgfQorIyBlbmRpZgorI2VuZGlmCisJfQorCisJbWJfYnl0ZWxlbl90YWJbaV0gPSBuOworICAgIH0KKworI2lmZGVmIExFTl9GUk9NX0NPTlYKKyAgICBjb252ZXJ0X3NldHVwKCZ2aW1jb252LCBOVUxMLCBOVUxMKTsKKyNlbmRpZgorCisgICAgLyogVGhlIGNlbGwgd2lkdGggZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICovCisgICAgKHZvaWQpaW5pdF9jaGFydGFiKCk7CisKKyAgICAvKiBXaGVuIGVuY191dGY4IGlzIHNldCBvciByZXNldCwgKGRlKWFsbG9jYXRlIFNjcmVlbkxpbmVzVUNbXSAqLworICAgIHNjcmVlbmFsbG9jKEZBTFNFKTsKKworICAgIC8qIFdoZW4gdXNpbmcgVW5pY29kZSwgc2V0IGRlZmF1bHQgZm9yICdmaWxlZW5jb2RpbmdzJy4gKi8KKyAgICBpZiAoZW5jX3V0ZjggJiYgIW9wdGlvbl93YXNfc2V0KChjaGFyX3UgKikiZmVuY3MiKSkKKwlzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QoKGNoYXJfdSAqKSJmZW5jcyIsIC0xLAorCQkJCSAoY2hhcl91ICopInVjcy1ib20sdXRmLTgsbGF0aW4xIiwgT1BUX0ZSRUUpOworI2lmIGRlZmluZWQoSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVCkgJiYgZGVmaW5lZChGRUFUX0dFVFRFWFQpCisgICAgLyogR05VIGdldHRleHQgMC4xMC4zNyBzdXBwb3J0cyB0aGlzIGZlYXR1cmU6IHNldCB0aGUgY29kZXNldCB1c2VkIGZvcgorICAgICAqIHRyYW5zbGF0ZWQgbWVzc2FnZXMgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBjdXJyZW50IGxvY2FsZS4gKi8KKyAgICAodm9pZCliaW5kX3RleHRkb21haW5fY29kZXNldChWSU1QQUNLQUdFLAorCQkJCQkgIGVuY191dGY4ID8gInV0Zi04IiA6IChjaGFyICopcF9lbmMpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICAvKiBGaXJlIGFuIGF1dG9jb21tYW5kIHRvIGxldCBwZW9wbGUgZG8gY3VzdG9tIGZvbnQgc2V0dXAuIFRoaXMgbXVzdCBiZQorICAgICAqIGFmdGVyIFZpbSBoYXMgYmVlbiBzZXR1cCBmb3IgdGhlIG5ldyBlbmNvZGluZy4gKi8KKyAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9FTkNPRElOR0NIQU5HRUQsIE5VTEwsIChjaGFyX3UgKikiIiwgRkFMU0UsIGN1cmJ1Zik7CisjZW5kaWYKKworICAgIHJldHVybiBOVUxMOworfQorCisvKgorICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBCT00gZm9yIHRoZSBjdXJyZW50IGJ1ZmZlcjoKKyAqIDAgLSBubyBCT00KKyAqIDIgLSBVQ1MtMiBvciBVVEYtMTYgQk9NCisgKiA0IC0gVUNTLTQgQk9NCisgKiAzIC0gVVRGLTggQk9NCisgKi8KKyAgICBpbnQKK2JvbWJfc2l6ZSgpCit7CisgICAgaW50IG4gPSAwOworCisgICAgaWYgKGN1cmJ1Zi0+Yl9wX2JvbWIgJiYgIWN1cmJ1Zi0+Yl9wX2JpbikKKyAgICB7CisJaWYgKCpjdXJidWYtPmJfcF9mZW5jID09IE5VTCkKKwl7CisJICAgIGlmIChlbmNfdXRmOCkKKwkgICAgeworCQlpZiAoZW5jX3VuaWNvZGUgIT0gMCkKKwkJICAgIG4gPSBlbmNfdW5pY29kZTsKKwkJZWxzZQorCQkgICAgbiA9IDM7CisJICAgIH0KKwl9CisJZWxzZSBpZiAoU1RSQ01QKGN1cmJ1Zi0+Yl9wX2ZlbmMsICJ1dGYtOCIpID09IDApCisJICAgIG4gPSAzOworCWVsc2UgaWYgKFNUUk5DTVAoY3VyYnVmLT5iX3BfZmVuYywgInVjcy0yIiwgNSkgPT0gMAorCQl8fCBTVFJOQ01QKGN1cmJ1Zi0+Yl9wX2ZlbmMsICJ1dGYtMTYiLCA2KSA9PSAwKQorCSAgICBuID0gMjsKKwllbHNlIGlmIChTVFJOQ01QKGN1cmJ1Zi0+Yl9wX2ZlbmMsICJ1Y3MtNCIsIDUpID09IDApCisJICAgIG4gPSA0OworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKworLyoKKyAqIEdldCBjbGFzcyBvZiBwb2ludGVyOgorICogMCBmb3IgYmxhbmsgb3IgTlVMCisgKiAxIGZvciBwdW5jdHVhdGlvbgorICogMiBmb3IgYW4gKEFTQ0lJKSB3b3JkIGNoYXJhY3RlcgorICogPjIgZm9yIG90aGVyIHdvcmQgY2hhcmFjdGVycworICovCisgICAgaW50CittYl9nZXRfY2xhc3MocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgaWYgKE1CX0JZVEUyTEVOKHBbMF0pID09IDEpCisgICAgeworCWlmIChwWzBdID09IE5VTCB8fCB2aW1faXN3aGl0ZShwWzBdKSkKKwkgICAgcmV0dXJuIDA7CisJaWYgKHZpbV9pc3dvcmRjKHBbMF0pKQorCSAgICByZXR1cm4gMjsKKwlyZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKGVuY19kYmNzICE9IDAgJiYgcFswXSAhPSBOVUwgJiYgcFsxXSAhPSBOVUwpCisJcmV0dXJuIGRiY3NfY2xhc3MocFswXSwgcFsxXSk7CisgICAgaWYgKGVuY191dGY4KQorCXJldHVybiB1dGZfY2xhc3ModXRmX3B0cjJjaGFyKHApKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEdldCBjbGFzcyBvZiBhIGRvdWJsZS1ieXRlIGNoYXJhY3Rlci4gIFRoaXMgYWx3YXlzIHJldHVybnMgMyBvciBiaWdnZXIuCisgKiBUT0RPOiBTaG91bGQgcmV0dXJuIDEgZm9yIHB1bmN0dWF0aW9uLgorICovCisgICAgaW50CitkYmNzX2NsYXNzKGxlYWQsIHRyYWlsKQorICAgIHVuc2lnbmVkCWxlYWQ7CisgICAgdW5zaWduZWQJdHJhaWw7Cit7CisgICAgc3dpdGNoIChlbmNfZGJjcykKKyAgICB7CisJLyogcGxlYXNlIGFkZCBjbGFzc2Z5IHJvdXRpbmUgZm9yIHlvdXIgbGFuZ3VhZ2UgaW4gaGVyZSAqLworCisJY2FzZSBEQkNTX0pQTlU6CS8qID8gKi8KKwljYXNlIERCQ1NfSlBOOgorCSAgICB7CisJCS8qIEpJUyBjb2RlIGNsYXNzaWZpY2F0aW9uICovCisJCXVuc2lnbmVkIGNoYXIgbGIgPSBsZWFkOworCQl1bnNpZ25lZCBjaGFyIHRiID0gdHJhaWw7CisKKwkJLyogY29udmVydCBwcm9jZXNzIGNvZGUgdG8gSklTICovCisjIGlmIGRlZmluZWQoV0lOMzI2NCkgfHwgZGVmaW5lZChXSU4zMlVOSVgpIHx8IGRlZmluZWQoTUFDT1MpCisJCS8qIHByb2Nlc3MgY29kZSBpcyBTSklTICovCisJCWlmIChsYiA8PSAweDlmKQorCQkgICAgbGIgPSAobGIgLSAweDgxKSAqIDIgKyAweDIxOworCQllbHNlCisJCSAgICBsYiA9IChsYiAtIDB4YzEpICogMiArIDB4MjE7CisJCWlmICh0YiA8PSAweDdlKQorCQkgICAgdGIgLT0gMHgxZjsKKwkJZWxzZSBpZiAodGIgPD0gMHg5ZSkKKwkJICAgIHRiIC09IDB4MjA7CisJCWVsc2UKKwkJeworCQkgICAgdGIgLT0gMHg3ZTsKKwkJICAgIGxiICs9IDE7CisJCX0KKyMgZWxzZQorCQkvKgorCQkgKiBYWFg6IENvZGUgcGFnZSBpZGVudGlmaWNhdGlvbiBjYW4gbm90IHVzZSB3aXRoIGFsbAorCQkgKgkgICAgc3lzdGVtISBTbywgc29tZSBvdGhlciBlbmNvZGluZyBpbmZvcm1hdGlvbgorCQkgKgkgICAgd2lsbCBiZSBuZWVkZWQuCisJCSAqCSAgICBJbiBqYXBhbmVzZTogU0pJUyxFVUMsVU5JQ09ERSwoSklTKQorCQkgKgkgICAgTm90ZSB0aGF0IEpJUy1jb2RlIHN5c3RlbSBkb24ndCB1c2UgYXMKKwkJICoJICAgIHByb2Nlc3MgY29kZSBpbiBtb3N0IHN5c3RlbSBiZWNhdXNlIGl0IHVzZXMKKwkJICoJICAgIGVzY2FwZSBzZXF1ZW5jZXMoSklTIGlzIGNvbnRleHQgZGVwZW5kIGVuY29kaW5nKS4KKwkJICovCisJCS8qIGFzc3VtZSBwcm9jZXNzIGNvZGUgaXMgSkFQQU5FU0UtRVVDICovCisJCWxiICY9IDB4N2Y7CisJCXRiICY9IDB4N2Y7CisjIGVuZGlmCisJCS8qIGV4Y2VwdGlvbnMgKi8KKwkJc3dpdGNoIChsYiA8PCA4IHwgdGIpCisJCXsKKwkJICAgIGNhc2UgMHgyMTIxOiAvKiBaRU5LQUtVIHNwYWNlICovCisJCQlyZXR1cm4gMDsKKwkJICAgIGNhc2UgMHgyMTIyOiAvKiBLVS1URU4gKEphcGFuZXNlIGNvbW1hKSAqLworCQkgICAgY2FzZSAweDIxMjM6IC8qIFRPVS1URU4gKEphcGFuZXNlIHBlcmlvZCkgKi8KKwkJICAgIGNhc2UgMHgyMTI0OiAvKiBaRU5LQUtVIGNvbW1hICovCisJCSAgICBjYXNlIDB4MjEyNTogLyogWkVOS0FLVSBwZXJpb2QgKi8KKwkJCXJldHVybiAxOworCQkgICAgY2FzZSAweDIxM2M6IC8qIHByb2xvbmdlZHNvdW5kIGhhbmRsZWQgYXMgS0FUQUtBTkEgKi8KKwkJCXJldHVybiAxMzsKKwkJfQorCQkvKiBzaWV2ZWQgYnkgS1UgY29kZSAqLworCQlzd2l0Y2ggKGxiKQorCQl7CisJCSAgICBjYXNlIDB4MjE6CisJCSAgICBjYXNlIDB4MjI6CisJCQkvKiBzcGVjaWFsIHN5bWJvbHMgKi8KKwkJCXJldHVybiAxMDsKKwkJICAgIGNhc2UgMHgyMzoKKwkJCS8qIGFscGhhLW51bWVyaWMgKi8KKwkJCXJldHVybiAxMTsKKwkJICAgIGNhc2UgMHgyNDoKKwkJCS8qIGhpcmFnYW5hICovCisJCQlyZXR1cm4gMTI7CisJCSAgICBjYXNlIDB4MjU6CisJCQkvKiBrYXRha2FuYSAqLworCQkJcmV0dXJuIDEzOworCQkgICAgY2FzZSAweDI2OgorCQkJLyogZ3JlZWsgKi8KKwkJCXJldHVybiAxNDsKKwkJICAgIGNhc2UgMHgyNzoKKwkJCS8qIHJ1c3NpYW4gKi8KKwkJCXJldHVybiAxNTsKKwkJICAgIGNhc2UgMHgyODoKKwkJCS8qIGxpbmVzICovCisJCQlyZXR1cm4gMTY7CisJCSAgICBkZWZhdWx0OgorCQkJLyoga2FuamkgKi8KKwkJCXJldHVybiAxNzsKKwkJfQorCSAgICB9CisKKwljYXNlIERCQ1NfS09SVToJLyogPyAqLworCWNhc2UgREJDU19LT1I6CisJICAgIHsKKwkJLyogS1MgY29kZSBjbGFzc2lmaWNhdGlvbiAqLworCQl1bnNpZ25lZCBjaGFyIGMxID0gbGVhZDsKKwkJdW5zaWduZWQgY2hhciBjMiA9IHRyYWlsOworCisJCS8qCisJCSAqIDIwIDogSGFuZ3VsCisJCSAqIDIxIDogSGFuamEKKwkJICogMjIgOiBTeW1ib2xzCisJCSAqIDIzIDogQWxwaGEtbnVtZXJpYy9Sb21hbiBMZXR0ZXIgKEZ1bGwgd2lkdGgpCisJCSAqIDI0IDogSGFuZ3VsIExldHRlcihBbHBoYWJldCkKKwkJICogMjUgOiBSb21hbiBOdW1lcmFsL0dyZWVrIExldHRlcgorCQkgKiAyNiA6IEJveCBEcmF3aW5ncworCQkgKiAyNyA6IFVuaXQgU3ltYm9scworCQkgKiAyOCA6IENpcmNsZWQvUGFyZW50aGVzaXplZCBMZXR0ZXIKKwkJICogMjkgOiBIaXJpZ2FuYS9LYXRha2FuYQorCQkgKiAzMCA6IEN5cmlsbGljIExldHRlcgorCQkgKi8KKworCQlpZiAoYzEgPj0gMHhCMCAmJiBjMSA8PSAweEM4KQorCQkgICAgLyogSGFuZ3VsICovCisJCSAgICByZXR1cm4gMjA7CisjaWYgZGVmaW5lZChXSU4zMjY0KSB8fCBkZWZpbmVkKFdJTjMyVU5JWCkKKwkJZWxzZSBpZiAoYzEgPD0gMHhBMCB8fCBjMiA8PSAweEEwKQorCQkgICAgLyogRXh0ZW5kZWQgSGFuZ3VsIFJlZ2lvbiA6IE1TIFVIQyhVbmlmaWVkIEhhbmd1bCBDb2RlKSAqLworCQkgICAgLyogYzE6IDB4ODEtMHhBMCB3aXRoIGMyOiAweDQxLTB4NUEsIDB4NjEtMHg3QSwgMHg4MS0weEZFCisJCSAgICAgKiBjMTogMHhBMS0weEM2IHdpdGggYzI6IDB4NDEtMHg1QSwgMHg2MS0weDdBLCAweDgxLTB4QTAKKwkJICAgICAqLworCQkgICAgcmV0dXJuIDIwOworI2VuZGlmCisKKwkJZWxzZSBpZiAoYzEgPj0gMHhDQSAmJiBjMSA8PSAweEZEKQorCQkgICAgLyogSGFuamEgKi8KKwkJICAgIHJldHVybiAyMTsKKwkJZWxzZSBzd2l0Y2ggKGMxKQorCQl7CisJCSAgICBjYXNlIDB4QTE6CisJCSAgICBjYXNlIDB4QTI6CisJCQkvKiBTeW1ib2xzICovCisJCQlyZXR1cm4gMjI7CisJCSAgICBjYXNlIDB4QTM6CisJCQkvKiBBbHBoYS1udW1lcmljICovCisJCQlyZXR1cm4gMjM7CisJCSAgICBjYXNlIDB4QTQ6CisJCQkvKiBIYW5ndWwgTGV0dGVyKEFscGhhYmV0KSAqLworCQkJcmV0dXJuIDI0OworCQkgICAgY2FzZSAweEE1OgorCQkJLyogUm9tYW4gTnVtZXJhbC9HcmVlayBMZXR0ZXIgKi8KKwkJCXJldHVybiAyNTsKKwkJICAgIGNhc2UgMHhBNjoKKwkJCS8qIEJveCBEcmF3aW5ncyAqLworCQkJcmV0dXJuIDI2OworCQkgICAgY2FzZSAweEE3OgorCQkJLyogVW5pdCBTeW1ib2xzICovCisJCQlyZXR1cm4gMjc7CisJCSAgICBjYXNlIDB4QTg6CisJCSAgICBjYXNlIDB4QTk6CisJCQlpZiAoYzIgPD0gMHhBRikKKwkJCSAgICByZXR1cm4gMjU7ICAvKiBSb21hbiBMZXR0ZXIgKi8KKwkJCWVsc2UgaWYgKGMyID49IDB4RjYpCisJCQkgICAgcmV0dXJuIDIyOyAgLyogU3ltYm9scyAqLworCQkJZWxzZQorCQkJICAgIC8qIENpcmNsZWQvUGFyZW50aGVzaXplZCBMZXR0ZXIgKi8KKwkJCSAgICByZXR1cm4gMjg7CisJCSAgICBjYXNlIDB4QUE6CisJCSAgICBjYXNlIDB4QUI6CisJCQkvKiBIaXJpZ2FuYS9LYXRha2FuYSAqLworCQkJcmV0dXJuIDI5OworCQkgICAgY2FzZSAweEFDOgorCQkJLyogQ3lyaWxsaWMgTGV0dGVyICovCisJCQlyZXR1cm4gMzA7CisJCX0KKwkgICAgfQorCWRlZmF1bHQ6CisJICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMzsKK30KKworLyoKKyAqIG1iX2NoYXIybGVuKCkgZnVuY3Rpb24gcG9pbnRlci4KKyAqIFJldHVybiBsZW5ndGggaW4gYnl0ZXMgb2YgY2hhcmFjdGVyICJjIi4KKyAqIFJldHVybnMgMSBmb3IgYSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgaW50CitsYXRpbl9jaGFyMmxlbihjKQorICAgIGludAkJYzsKK3sKKyAgICByZXR1cm4gMTsKK30KKworICAgIHN0YXRpYyBpbnQKK2RiY3NfY2hhcjJsZW4oYykKKyAgICBpbnQJCWM7Cit7CisgICAgaWYgKGMgPj0gMHgxMDApCisJcmV0dXJuIDI7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBtYl9jaGFyMmJ5dGVzKCkgZnVuY3Rpb24gcG9pbnRlci4KKyAqIENvbnZlcnQgYSBjaGFyYWN0ZXIgdG8gaXRzIGJ5dGVzLgorICogUmV0dXJucyB0aGUgbGVuZ3RoIGluIGJ5dGVzLgorICovCisgICAgaW50CitsYXRpbl9jaGFyMmJ5dGVzKGMsIGJ1ZikKKyAgICBpbnQJCWM7CisgICAgY2hhcl91CSpidWY7Cit7CisgICAgYnVmWzBdID0gYzsKKyAgICByZXR1cm4gMTsKK30KKworICAgIHN0YXRpYyBpbnQKK2RiY3NfY2hhcjJieXRlcyhjLCBidWYpCisgICAgaW50CQljOworICAgIGNoYXJfdQkqYnVmOworeworICAgIGlmIChjID49IDB4MTAwKQorICAgIHsKKwlidWZbMF0gPSAodW5zaWduZWQpYyA+PiA4OworCWJ1ZlsxXSA9IGM7CisJcmV0dXJuIDI7CisgICAgfQorICAgIGJ1ZlswXSA9IGM7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBtYl9wdHIybGVuX2NoZWNrKCkgZnVuY3Rpb24gcG9pbnRlci4KKyAqIEdldCBieXRlIGxlbmd0aCBvZiBjaGFyYWN0ZXIgYXQgIipwIiBidXQgc3RvcCBhdCBhIE5VTC4KKyAqIEZvciBVVEYtOCB0aGlzIGluY2x1ZGVzIGZvbGxvd2luZyBjb21wb3NpbmcgY2hhcmFjdGVycy4KKyAqIFJldHVybnMgMCB3aGVuICpwIGlzIE5VTC4KKyAqCisgKi8KKyAgICBpbnQKK2xhdGluX3B0cjJsZW5fY2hlY2socCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgcmV0dXJuIE1CX0JZVEUyTEVOKCpwKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2RiY3NfcHRyMmxlbl9jaGVjayhwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBpbnQJCWxlbjsKKworICAgIC8qIENoZWNrIGlmIHNlY29uZCBieXRlIGlzIG5vdCBtaXNzaW5nLiAqLworICAgIGxlbiA9IE1CX0JZVEUyTEVOKCpwKTsKKyAgICBpZiAobGVuID09IDIgJiYgcFsxXSA9PSBOVUwpCisJbGVuID0gMTsKKyAgICByZXR1cm4gbGVuOworfQorCitzdHJ1Y3QgaW50ZXJ2YWwKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBmaXJzdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBsYXN0OworfTsKK3N0YXRpYyBpbnQgaW50YWJsZSBfX0FSR1MoKHN0cnVjdCBpbnRlcnZhbCAqdGFibGUsIHNpemVfdCBzaXplLCBpbnQgYykpOworCisvKgorICogUmV0dXJuIFRSVUUgaWYgImMiIGlzIGluICJ0YWJsZVtzaXplIC8gc2l6ZW9mKHN0cnVjdCBpbnRlcnZhbCldIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK2ludGFibGUodGFibGUsIHNpemUsIGMpCisgICAgc3RydWN0IGludGVydmFsCSp0YWJsZTsKKyAgICBzaXplX3QJCXNpemU7CisgICAgaW50CQkJYzsKK3sKKyAgICBpbnQgbWlkLCBib3QsIHRvcDsKKworICAgIC8qIGZpcnN0IHF1aWNrIGNoZWNrIGZvciBMYXRpbjEgZXRjLiBjaGFyYWN0ZXJzICovCisgICAgaWYgKGMgPCB0YWJsZVswXS5maXJzdCkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICAvKiBiaW5hcnkgc2VhcmNoIGluIHRhYmxlICovCisgICAgYm90ID0gMDsKKyAgICB0b3AgPSBzaXplIC8gc2l6ZW9mKHN0cnVjdCBpbnRlcnZhbCkgLSAxOworICAgIHdoaWxlICh0b3AgPj0gYm90KQorICAgIHsKKwltaWQgPSAoYm90ICsgdG9wKSAvIDI7CisJaWYgKHRhYmxlW21pZF0ubGFzdCA8IGMpCisJICAgIGJvdCA9IG1pZCArIDE7CisJZWxzZSBpZiAodGFibGVbbWlkXS5maXJzdCA+IGMpCisJICAgIHRvcCA9IG1pZCAtIDE7CisJZWxzZQorCSAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogRm9yIFVURi04IGNoYXJhY3RlciAiYyIgcmV0dXJuIDIgZm9yIGEgZG91YmxlLXdpZHRoIGNoYXJhY3RlciwgMSBmb3Igb3RoZXJzLgorICogUmV0dXJucyA0IG9yIDYgZm9yIGFuIHVucHJpbnRhYmxlIGNoYXJhY3Rlci4KKyAqIElzIG9ubHkgY29ycmVjdCBmb3IgY2hhcmFjdGVycyA+PSAweDgwLgorICogV2hlbiBwX2FtYncgaXMgImRvdWJsZSIsIHJldHVybiAyIGZvciBhIGNoYXJhY3RlciB3aXRoIEVhc3QgQXNpYW4gV2lkdGgKKyAqIGNsYXNzICdBJyhtYmlndW91cykuCisgKi8KKyAgICBpbnQKK3V0Zl9jaGFyMmNlbGxzKGMpCisgICAgaW50CQljOworeworICAgIC8qIHNvcnRlZCBsaXN0IG9mIG5vbi1vdmVybGFwcGluZyBpbnRlcnZhbHMgb2YgRWFzdCBBc2lhbiBBbWJpZ3VvdXMKKyAgICAgKiBjaGFyYWN0ZXJzLCBnZW5lcmF0ZWQgd2l0aDoKKyAgICAgKiAidW5pc2V0ICtXSURUSC1BIC1jYXQ9TWUgLWNhdD1NbiAtY2F0PUNmIGMiICovCisgICAgc3RhdGljIHN0cnVjdCBpbnRlcnZhbCBhbWJpZ3VvdXNbXSA9IHsKKwl7MHgwMEExLCAweDAwQTF9LCB7MHgwMEE0LCAweDAwQTR9LCB7MHgwMEE3LCAweDAwQTh9LAorCXsweDAwQUEsIDB4MDBBQX0sIHsweDAwQUUsIDB4MDBBRX0sIHsweDAwQjAsIDB4MDBCNH0sCisJezB4MDBCNiwgMHgwMEJBfSwgezB4MDBCQywgMHgwMEJGfSwgezB4MDBDNiwgMHgwMEM2fSwKKwl7MHgwMEQwLCAweDAwRDB9LCB7MHgwMEQ3LCAweDAwRDh9LCB7MHgwMERFLCAweDAwRTF9LAorCXsweDAwRTYsIDB4MDBFNn0sIHsweDAwRTgsIDB4MDBFQX0sIHsweDAwRUMsIDB4MDBFRH0sCisJezB4MDBGMCwgMHgwMEYwfSwgezB4MDBGMiwgMHgwMEYzfSwgezB4MDBGNywgMHgwMEZBfSwKKwl7MHgwMEZDLCAweDAwRkN9LCB7MHgwMEZFLCAweDAwRkV9LCB7MHgwMTAxLCAweDAxMDF9LAorCXsweDAxMTEsIDB4MDExMX0sIHsweDAxMTMsIDB4MDExM30sIHsweDAxMUIsIDB4MDExQn0sCisJezB4MDEyNiwgMHgwMTI3fSwgezB4MDEyQiwgMHgwMTJCfSwgezB4MDEzMSwgMHgwMTMzfSwKKwl7MHgwMTM4LCAweDAxMzh9LCB7MHgwMTNGLCAweDAxNDJ9LCB7MHgwMTQ0LCAweDAxNDR9LAorCXsweDAxNDgsIDB4MDE0Qn0sIHsweDAxNEQsIDB4MDE0RH0sIHsweDAxNTIsIDB4MDE1M30sCisJezB4MDE2NiwgMHgwMTY3fSwgezB4MDE2QiwgMHgwMTZCfSwgezB4MDFDRSwgMHgwMUNFfSwKKwl7MHgwMUQwLCAweDAxRDB9LCB7MHgwMUQyLCAweDAxRDJ9LCB7MHgwMUQ0LCAweDAxRDR9LAorCXsweDAxRDYsIDB4MDFENn0sIHsweDAxRDgsIDB4MDFEOH0sIHsweDAxREEsIDB4MDFEQX0sCisJezB4MDFEQywgMHgwMURDfSwgezB4MDI1MSwgMHgwMjUxfSwgezB4MDI2MSwgMHgwMjYxfSwKKwl7MHgwMkM0LCAweDAyQzR9LCB7MHgwMkM3LCAweDAyQzd9LCB7MHgwMkM5LCAweDAyQ0J9LAorCXsweDAyQ0QsIDB4MDJDRH0sIHsweDAyRDAsIDB4MDJEMH0sIHsweDAyRDgsIDB4MDJEQn0sCisJezB4MDJERCwgMHgwMkREfSwgezB4MDJERiwgMHgwMkRGfSwgezB4MDM5MSwgMHgwM0ExfSwKKwl7MHgwM0EzLCAweDAzQTl9LCB7MHgwM0IxLCAweDAzQzF9LCB7MHgwM0MzLCAweDAzQzl9LAorCXsweDA0MDEsIDB4MDQwMX0sIHsweDA0MTAsIDB4MDQ0Rn0sIHsweDA0NTEsIDB4MDQ1MX0sCisJezB4MjAxMCwgMHgyMDEwfSwgezB4MjAxMywgMHgyMDE2fSwgezB4MjAxOCwgMHgyMDE5fSwKKwl7MHgyMDFDLCAweDIwMUR9LCB7MHgyMDIwLCAweDIwMjJ9LCB7MHgyMDI0LCAweDIwMjd9LAorCXsweDIwMzAsIDB4MjAzMH0sIHsweDIwMzIsIDB4MjAzM30sIHsweDIwMzUsIDB4MjAzNX0sCisJezB4MjAzQiwgMHgyMDNCfSwgezB4MjAzRSwgMHgyMDNFfSwgezB4MjA3NCwgMHgyMDc0fSwKKwl7MHgyMDdGLCAweDIwN0Z9LCB7MHgyMDgxLCAweDIwODR9LCB7MHgyMEFDLCAweDIwQUN9LAorCXsweDIxMDMsIDB4MjEwM30sIHsweDIxMDUsIDB4MjEwNX0sIHsweDIxMDksIDB4MjEwOX0sCisJezB4MjExMywgMHgyMTEzfSwgezB4MjExNiwgMHgyMTE2fSwgezB4MjEyMSwgMHgyMTIyfSwKKwl7MHgyMTI2LCAweDIxMjZ9LCB7MHgyMTJCLCAweDIxMkJ9LCB7MHgyMTUzLCAweDIxNTR9LAorCXsweDIxNUIsIDB4MjE1RX0sIHsweDIxNjAsIDB4MjE2Qn0sIHsweDIxNzAsIDB4MjE3OX0sCisJezB4MjE5MCwgMHgyMTk5fSwgezB4MjFCOCwgMHgyMUI5fSwgezB4MjFEMiwgMHgyMUQyfSwKKwl7MHgyMUQ0LCAweDIxRDR9LCB7MHgyMUU3LCAweDIxRTd9LCB7MHgyMjAwLCAweDIyMDB9LAorCXsweDIyMDIsIDB4MjIwM30sIHsweDIyMDcsIDB4MjIwOH0sIHsweDIyMEIsIDB4MjIwQn0sCisJezB4MjIwRiwgMHgyMjBGfSwgezB4MjIxMSwgMHgyMjExfSwgezB4MjIxNSwgMHgyMjE1fSwKKwl7MHgyMjFBLCAweDIyMUF9LCB7MHgyMjFELCAweDIyMjB9LCB7MHgyMjIzLCAweDIyMjN9LAorCXsweDIyMjUsIDB4MjIyNX0sIHsweDIyMjcsIDB4MjIyQ30sIHsweDIyMkUsIDB4MjIyRX0sCisJezB4MjIzNCwgMHgyMjM3fSwgezB4MjIzQywgMHgyMjNEfSwgezB4MjI0OCwgMHgyMjQ4fSwKKwl7MHgyMjRDLCAweDIyNEN9LCB7MHgyMjUyLCAweDIyNTJ9LCB7MHgyMjYwLCAweDIyNjF9LAorCXsweDIyNjQsIDB4MjI2N30sIHsweDIyNkEsIDB4MjI2Qn0sIHsweDIyNkUsIDB4MjI2Rn0sCisJezB4MjI4MiwgMHgyMjgzfSwgezB4MjI4NiwgMHgyMjg3fSwgezB4MjI5NSwgMHgyMjk1fSwKKwl7MHgyMjk5LCAweDIyOTl9LCB7MHgyMkE1LCAweDIyQTV9LCB7MHgyMkJGLCAweDIyQkZ9LAorCXsweDIzMTIsIDB4MjMxMn0sIHsweDI0NjAsIDB4MjRFOX0sIHsweDI0RUIsIDB4MjU0Qn0sCisJezB4MjU1MCwgMHgyNTczfSwgezB4MjU4MCwgMHgyNThGfSwgezB4MjU5MiwgMHgyNTk1fSwKKwl7MHgyNUEwLCAweDI1QTF9LCB7MHgyNUEzLCAweDI1QTl9LCB7MHgyNUIyLCAweDI1QjN9LAorCXsweDI1QjYsIDB4MjVCN30sIHsweDI1QkMsIDB4MjVCRH0sIHsweDI1QzAsIDB4MjVDMX0sCisJezB4MjVDNiwgMHgyNUM4fSwgezB4MjVDQiwgMHgyNUNCfSwgezB4MjVDRSwgMHgyNUQxfSwKKwl7MHgyNUUyLCAweDI1RTV9LCB7MHgyNUVGLCAweDI1RUZ9LCB7MHgyNjA1LCAweDI2MDZ9LAorCXsweDI2MDksIDB4MjYwOX0sIHsweDI2MEUsIDB4MjYwRn0sIHsweDI2MTQsIDB4MjYxNX0sCisJezB4MjYxQywgMHgyNjFDfSwgezB4MjYxRSwgMHgyNjFFfSwgezB4MjY0MCwgMHgyNjQwfSwKKwl7MHgyNjQyLCAweDI2NDJ9LCB7MHgyNjYwLCAweDI2NjF9LCB7MHgyNjYzLCAweDI2NjV9LAorCXsweDI2NjcsIDB4MjY2QX0sIHsweDI2NkMsIDB4MjY2RH0sIHsweDI2NkYsIDB4MjY2Rn0sCisJezB4MjczRCwgMHgyNzNEfSwgezB4Mjc3NiwgMHgyNzdGfSwgezB4RTAwMCwgMHhGOEZGfSwKKwl7MHhGRkZELCAweEZGRkR9LCAvKiB7MHhGMDAwMCwgMHhGRkZGRH0sIHsweDEwMDAwMCwgMHgxMEZGRkR9ICovCisgICAgfTsKKworICAgIGlmIChjID49IDB4MTAwKQorICAgIHsKKyNpZmRlZiBVU0VfV0NIQVJfRlVOQ1RJT05TCisJLyoKKwkgKiBBc3N1bWUgdGhlIGxpYnJhcnkgZnVuY3Rpb24gd2N3aWR0aCgpIHdvcmtzIGJldHRlciB0aGFuIG91ciBvd24KKwkgKiBzdHVmZi4gIEl0IHNob3VsZCByZXR1cm4gMSBmb3IgYW1iaWd1b3VzIHdpZHRoIGNoYXJzIQorCSAqLworCWludAluID0gd2N3aWR0aChjKTsKKworCWlmIChuIDwgMCkKKwkgICAgcmV0dXJuIDY7CQkvKiB1bnByaW50YWJsZSwgZGlzcGxheXMgPHh4eHg+ICovCisJaWYgKG4gPiAxKQorCSAgICByZXR1cm4gbjsKKyNlbHNlCisJaWYgKCF1dGZfcHJpbnRhYmxlKGMpKQorCSAgICByZXR1cm4gNjsJCS8qIHVucHJpbnRhYmxlLCBkaXNwbGF5cyA8eHh4eD4gKi8KKwlpZiAoYyA+PSAweDExMDAKKwkgICAgJiYgKGMgPD0gMHgxMTVmCQkJLyogSGFuZ3VsIEphbW8gKi8KKwkJfHwgYyA9PSAweDIzMjkKKwkJfHwgYyA9PSAweDIzMmEKKwkJfHwgKGMgPj0gMHgyZTgwICYmIGMgPD0gMHhhNGNmCisJCSAgICAmJiBjICE9IDB4MzAzZikJCS8qIENKSyAuLi4gWWkgKi8KKwkJfHwgKGMgPj0gMHhhYzAwICYmIGMgPD0gMHhkN2EzKQkvKiBIYW5ndWwgU3lsbGFibGVzICovCisJCXx8IChjID49IDB4ZjkwMCAmJiBjIDw9IDB4ZmFmZikJLyogQ0pLIENvbXBhdGliaWxpdHkKKwkJCQkJCSAgIElkZW9ncmFwaHMgKi8KKwkJfHwgKGMgPj0gMHhmZTMwICYmIGMgPD0gMHhmZTZmKQkvKiBDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyAqLworCQl8fCAoYyA+PSAweGZmMDAgJiYgYyA8PSAweGZmNjApCS8qIEZ1bGx3aWR0aCBGb3JtcyAqLworCQl8fCAoYyA+PSAweGZmZTAgJiYgYyA8PSAweGZmZTYpCisJCXx8IChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJmZmZkKQorCQl8fCAoYyA+PSAweDMwMDAwICYmIGMgPD0gMHgzZmZmZCkpKQorCSAgICByZXR1cm4gMjsKKyNlbmRpZgorICAgIH0KKworICAgIC8qIENoYXJhY3RlcnMgYmVsb3cgMHgxMDAgYXJlIGluZmx1ZW5jZWQgYnkgJ2lzcHJpbnQnIG9wdGlvbiAqLworICAgIGVsc2UgaWYgKGMgPj0gMHg4MCAmJiAhdmltX2lzcHJpbnRjKGMpKQorCXJldHVybiA0OwkJLyogdW5wcmludGFibGUsIGRpc3BsYXlzIDx4eD4gKi8KKworICAgIGlmIChjID49IDB4ODAgJiYgKnBfYW1idyA9PSAnZCcgJiYgaW50YWJsZShhbWJpZ3VvdXMsIHNpemVvZihhbWJpZ3VvdXMpLCBjKSkKKwlyZXR1cm4gMjsKKworICAgIHJldHVybiAxOworfQorCisvKgorICogbWJfcHRyMmNlbGxzKCkgZnVuY3Rpb24gcG9pbnRlci4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGRpc3BsYXkgY2VsbHMgY2hhcmFjdGVyIGF0ICIqcCIgb2NjdXBpZXMuCisgKiBUaGlzIGRvZXNuJ3QgdGFrZSBjYXJlIG9mIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMsIHVzZSBwdHIyY2VsbHMoKSBmb3IgdGhhdC4KKyAqLworLypBUkdTVVNFRCovCisgICAgaW50CitsYXRpbl9wdHIyY2VsbHMocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgcmV0dXJuIDE7Cit9CisKKyAgICBpbnQKK3V0Zl9wdHIyY2VsbHMocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgaW50CQljOworCisgICAgLyogTmVlZCB0byBjb252ZXJ0IHRvIGEgd2lkZSBjaGFyYWN0ZXIuICovCisgICAgaWYgKCpwID49IDB4ODApCisgICAgeworCWMgPSB1dGZfcHRyMmNoYXIocCk7CisJLyogQW4gaWxsZWdhbCBieXRlIGlzIGRpc3BsYXllZCBhcyA8eHg+LiAqLworCWlmICh1dGZfcHRyMmxlbl9jaGVjayhwKSA9PSAxIHx8IGMgPT0gTlVMKQorCSAgICByZXR1cm4gNDsKKwkvKiBJZiB0aGUgY2hhciBpcyBBU0NJSSBpdCBtdXN0IGJlIGFuIG92ZXJsb25nIHNlcXVlbmNlLiAqLworCWlmIChjIDwgMHg4MCkKKwkgICAgcmV0dXJuIGNoYXIyY2VsbHMoYyk7CisJcmV0dXJuIHV0Zl9jaGFyMmNlbGxzKGMpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworICAgIGludAorZGJjc19wdHIyY2VsbHMocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgLyogTnVtYmVyIG9mIGNlbGxzIGlzIGVxdWFsIHRvIG51bWJlciBvZiBieXRlcywgZXhjZXB0IGZvciBldWMtanAgd2hlbgorICAgICAqIHRoZSBmaXJzdCBieXRlIGlzIDB4OGUuICovCisgICAgaWYgKGVuY19kYmNzID09IERCQ1NfSlBOVSAmJiAqcCA9PSAweDhlKQorCXJldHVybiAxOworICAgIHJldHVybiBNQl9CWVRFMkxFTigqcCk7Cit9CisKKy8qCisgKiBtYl9jaGFyMmNlbGxzKCkgZnVuY3Rpb24gcG9pbnRlci4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGRpc3BsYXkgY2VsbHMgY2hhcmFjdGVyICJjIiBvY2N1cGllcy4KKyAqIE9ubHkgdGFrZXMgY2FyZSBvZiBtdWx0aS1ieXRlIGNoYXJzLCBub3QgIl5DIiBhbmQgc3VjaC4KKyAqLworLypBUkdTVVNFRCovCisgICAgaW50CitsYXRpbl9jaGFyMmNlbGxzKGMpCisgICAgaW50CQljOworeworICAgIHJldHVybiAxOworfQorCisgICAgc3RhdGljIGludAorZGJjc19jaGFyMmNlbGxzKGMpCisgICAgaW50CQljOworeworICAgIC8qIE51bWJlciBvZiBjZWxscyBpcyBlcXVhbCB0byBudW1iZXIgb2YgYnl0ZXMsIGV4Y2VwdCBmb3IgZXVjLWpwIHdoZW4KKyAgICAgKiB0aGUgZmlyc3QgYnl0ZSBpcyAweDhlLiAqLworICAgIGlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUgJiYgKCh1bnNpZ25lZCljID4+IDgpID09IDB4OGUpCisJcmV0dXJuIDE7CisgICAgLyogdXNlIHRoZSBmaXJzdCBieXRlICovCisgICAgcmV0dXJuIE1CX0JZVEUyTEVOKCh1bnNpZ25lZCljID4+IDgpOworfQorCisvKgorICogbWJfb2ZmMmNlbGxzKCkgZnVuY3Rpb24gcG9pbnRlci4KKyAqIFJldHVybiBudW1iZXIgb2YgZGlzcGxheSBjZWxscyBmb3IgY2hhciBhdCBTY3JlZW5MaW5lc1tvZmZdLgorICogQ2FsbGVyIG11c3QgbWFrZSBzdXJlICJvZmYiIGFuZCAib2ZmICsgMSIgYXJlIHZhbGlkIQorICovCisvKkFSR1NVU0VEKi8KKyAgICBpbnQKK2xhdGluX29mZjJjZWxscyhvZmYpCisgICAgdW5zaWduZWQJb2ZmOworeworICAgIHJldHVybiAxOworfQorCisgICAgaW50CitkYmNzX29mZjJjZWxscyhvZmYpCisgICAgdW5zaWduZWQJb2ZmOworeworICAgIC8qIE51bWJlciBvZiBjZWxscyBpcyBlcXVhbCB0byBudW1iZXIgb2YgYnl0ZXMsIGV4Y2VwdCBmb3IgZXVjLWpwIHdoZW4KKyAgICAgKiB0aGUgZmlyc3QgYnl0ZSBpcyAweDhlLiAqLworICAgIGlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUgJiYgU2NyZWVuTGluZXNbb2ZmXSA9PSAweDhlKQorCXJldHVybiAxOworICAgIHJldHVybiBNQl9CWVRFMkxFTihTY3JlZW5MaW5lc1tvZmZdKTsKK30KKworICAgIGludAordXRmX29mZjJjZWxscyhvZmYpCisgICAgdW5zaWduZWQJb2ZmOworeworICAgIHJldHVybiBTY3JlZW5MaW5lc1tvZmYgKyAxXSA9PSAwID8gMiA6IDE7Cit9CisKKy8qCisgKiBtYl9wdHIyY2hhcigpIGZ1bmN0aW9uIHBvaW50ZXIuCisgKiBDb252ZXJ0IGEgYnl0ZSBzZXF1ZW5jZSBpbnRvIGEgY2hhcmFjdGVyLgorICovCisgICAgaW50CitsYXRpbl9wdHIyY2hhcihwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICByZXR1cm4gKnA7Cit9CisKKyAgICBzdGF0aWMgaW50CitkYmNzX3B0cjJjaGFyKHApCisgICAgY2hhcl91CSpwOworeworICAgIGlmIChNQl9CWVRFMkxFTigqcCkgPiAxICYmIHBbMV0gIT0gTlVMKQorCXJldHVybiAocFswXSA8PCA4KSArIHBbMV07CisgICAgcmV0dXJuICpwOworfQorCisvKgorICogQ29udmVydCBhIFVURi04IGJ5dGUgc2VxdWVuY2UgdG8gYSB3aWRlIGNoYXJhY3Rlci4KKyAqIElmIHRoZSBzZXF1ZW5jZSBpcyBpbGxlZ2FsIG9yIHRydW5jYXRlZCBieSBhIE5VTCB0aGUgZmlyc3QgYnl0ZSBpcworICogcmV0dXJuZWQuCisgKiBEb2VzIG5vdCBpbmNsdWRlIGNvbXBvc2luZyBjaGFyYWN0ZXJzLCBvZiBjb3Vyc2UuCisgKi8KKyAgICBpbnQKK3V0Zl9wdHIyY2hhcihwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBpbnQJCWxlbjsKKworICAgIGlmIChwWzBdIDwgMHg4MCkJLyogYmUgcXVpY2sgZm9yIEFTQ0lJICovCisJcmV0dXJuIHBbMF07CisKKyAgICBsZW4gPSB1dGY4bGVuX3RhYltwWzBdXTsKKyAgICBpZiAoKHBbMV0gJiAweGMwKSA9PSAweDgwKQorICAgIHsKKwlpZiAobGVuID09IDIpCisJICAgIHJldHVybiAoKHBbMF0gJiAweDFmKSA8PCA2KSArIChwWzFdICYgMHgzZik7CisJaWYgKChwWzJdICYgMHhjMCkgPT0gMHg4MCkKKwl7CisJICAgIGlmIChsZW4gPT0gMykKKwkJcmV0dXJuICgocFswXSAmIDB4MGYpIDw8IDEyKSArICgocFsxXSAmIDB4M2YpIDw8IDYpCisJCSAgICArIChwWzJdICYgMHgzZik7CisJICAgIGlmICgocFszXSAmIDB4YzApID09IDB4ODApCisJICAgIHsKKwkJaWYgKGxlbiA9PSA0KQorCQkgICAgcmV0dXJuICgocFswXSAmIDB4MDcpIDw8IDE4KSArICgocFsxXSAmIDB4M2YpIDw8IDEyKQorCQkJKyAoKHBbMl0gJiAweDNmKSA8PCA2KSArIChwWzNdICYgMHgzZik7CisJCWlmICgocFs0XSAmIDB4YzApID09IDB4ODApCisJCXsKKwkJICAgIGlmIChsZW4gPT0gNSkKKwkJCXJldHVybiAoKHBbMF0gJiAweDAzKSA8PCAyNCkgKyAoKHBbMV0gJiAweDNmKSA8PCAxOCkKKwkJCSAgICArICgocFsyXSAmIDB4M2YpIDw8IDEyKSArICgocFszXSAmIDB4M2YpIDw8IDYpCisJCQkgICAgKyAocFs0XSAmIDB4M2YpOworCQkgICAgaWYgKChwWzVdICYgMHhjMCkgPT0gMHg4MCAmJiBsZW4gPT0gNikKKwkJCXJldHVybiAoKHBbMF0gJiAweDAxKSA8PCAzMCkgKyAoKHBbMV0gJiAweDNmKSA8PCAyNCkKKwkJCSAgICArICgocFsyXSAmIDB4M2YpIDw8IDE4KSArICgocFszXSAmIDB4M2YpIDw8IDEyKQorCQkJICAgICsgKChwWzRdICYgMHgzZikgPDwgNikgKyAocFs1XSAmIDB4M2YpOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIC8qIElsbGVnYWwgdmFsdWUsIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBieXRlICovCisgICAgcmV0dXJuIHBbMF07Cit9CisKKy8qCisgKiBHZXQgY2hhcmFjdGVyIGF0ICoqcHAgYW5kIGFkdmFuY2UgKnBwIHRvIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAqIE5vdGU6IGNvbXBvc2luZyBjaGFyYWN0ZXJzIGFyZSBza2lwcGVkIQorICovCisgICAgaW50CittYl9wdHIyY2hhcl9hZHYocHApCisgICAgY2hhcl91CSoqcHA7Cit7CisgICAgaW50CQljOworCisgICAgYyA9ICgqbWJfcHRyMmNoYXIpKCpwcCk7CisgICAgKnBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykoKnBwKTsKKyAgICByZXR1cm4gYzsKK30KKworI2lmIGRlZmluZWQoRkVBVF9BUkFCSUMpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ2hlY2sgd2hldGhlciB3ZSBhcmUgZGVhbGluZyB3aXRoIEFyYWJpYyBjb21iaW5pbmcgY2hhcmFjdGVycy4KKyAqIE5vdGU6IHRoZXNlIGFyZSBOT1QgcmVhbGx5IGNvbXBvc2luZyBjaGFyYWN0ZXJzIQorICovCisgICAgaW50CithcmFiaWNfY29tYmluZShvbmUsIHR3bykKKyAgICBpbnQJCW9uZTsJICAgIC8qIGZpcnN0IGNoYXJhY3RlciAqLworICAgIGludAkJdHdvOwkgICAgLyogY2hhcmFjdGVyIGp1c3QgYWZ0ZXIgIm9uZSIgKi8KK3sKKyAgICBpZiAob25lID09IGFfTEFNKQorCXJldHVybiBhcmFiaWNfbWF5Y29tYmluZSh0d28pOworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGNoYXJhY3RlciB0aGF0IGNvdWxkIGJlIHJlZ2FyZGVkIGFzIGFuCisgKiBBcmFiaWMgY29tYmluaW5nIGNoYXJhY3RlciwgbmVlZCB0byBjaGVjayB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGlzLgorICovCisgICAgaW50CithcmFiaWNfbWF5Y29tYmluZSh0d28pCisgICAgaW50CQl0d287Cit7CisgICAgaWYgKHBfYXJzaGFwZSAmJiAhcF90YmlkaSkKKwlyZXR1cm4gKHR3byA9PSBhX0FMRUZfTUFEREEKKwkJICAgIHx8IHR3byA9PSBhX0FMRUZfSEFNWkFfQUJPVkUKKwkJICAgIHx8IHR3byA9PSBhX0FMRUZfSEFNWkFfQkVMT1cKKwkJICAgIHx8IHR3byA9PSBhX0FMRUYpOworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSBjaGFyYWN0ZXIgcG9pbnRlZCB0byBieSAicDIiIGlzIGEgY29tcG9zaW5nIGNoYXJhY3RlciB3aGVuIGl0CisgKiBjb21lcyBhZnRlciAicDEiLiAgRm9yIEFyYWJpYyBzb21ldGltZXMgImFiIiBpcyByZXBsYWNlZCB3aXRoICJjIiwgd2hpY2gKKyAqIGJlaGF2ZXMgbGlrZSBhIGNvbXBvc2luZyBjaGFyYWN0ZXIuCisgKi8KKyAgICBpbnQKK3V0Zl9jb21wb3NpbmdsaWtlKHAxLCBwMikKKyAgICBjaGFyX3UJKnAxOworICAgIGNoYXJfdQkqcDI7Cit7CisgICAgaW50CQljMjsKKworICAgIGMyID0gdXRmX3B0cjJjaGFyKHAyKTsKKyAgICBpZiAodXRmX2lzY29tcG9zaW5nKGMyKSkKKwlyZXR1cm4gVFJVRTsKKyAgICBpZiAoIWFyYWJpY19tYXljb21iaW5lKGMyKSkKKwlyZXR1cm4gRkFMU0U7CisgICAgcmV0dXJuIGFyYWJpY19jb21iaW5lKHV0Zl9wdHIyY2hhcihwMSksIGMyKTsKK30KKyNlbmRpZgorCisvKgorICogQ29udmVydCBhIFVURi04IGJ5dGUgc3RyaW5nIHRvIGEgd2lkZSBjaGFyYXJhY3Rlci4gIEFsc28gZ2V0IHVwIHRvIHR3bworICogY29tcG9zaW5nIGNoYXJhY3RlcnMuCisgKi8KKyAgICBpbnQKK3V0ZmNfcHRyMmNoYXIocCwgcDEsIHAyKQorICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCSpwMTsJLyogcmV0dXJuOiBmaXJzdCBjb21wb3NpbmcgY2hhciBvciAwICovCisgICAgaW50CQkqcDI7CS8qIHJldHVybjogc2Vjb25kIGNvbXBvc2luZyBjaGFyIG9yIDAgKi8KK3sKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWM7CisgICAgaW50CQljYzsKKworICAgIGMgPSB1dGZfcHRyMmNoYXIocCk7CisgICAgbGVuID0gdXRmX3B0cjJsZW5fY2hlY2socCk7CisgICAgLyogT25seSBhY2NlcHQgYSBjb21wb3NpbmcgY2hhciB3aGVuIHRoZSBmaXJzdCBjaGFyIGlzbid0IGlsbGVnYWwuICovCisgICAgaWYgKChsZW4gPiAxIHx8ICpwIDwgMHg4MCkKKwkgICAgJiYgcFtsZW5dID49IDB4ODAKKwkgICAgJiYgVVRGX0NPTVBPU0lOR0xJS0UocCwgcCArIGxlbikpCisgICAgeworCSpwMSA9IHV0Zl9wdHIyY2hhcihwICsgbGVuKTsKKwlsZW4gKz0gdXRmX3B0cjJsZW5fY2hlY2socCArIGxlbik7CisJaWYgKHBbbGVuXSA+PSAweDgwICYmIHV0Zl9pc2NvbXBvc2luZyhjYyA9IHV0Zl9wdHIyY2hhcihwICsgbGVuKSkpCisJICAgICpwMiA9IGNjOworCWVsc2UKKwkgICAgKnAyID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkqcDEgPSAwOworCSpwMiA9IDA7CisgICAgfQorICAgIHJldHVybiBjOworfQorCisvKgorICogQ29udmVydCBhIFVURi04IGJ5dGUgc3RyaW5nIHRvIGEgd2lkZSBjaGFyYXJhY3Rlci4gIEFsc28gZ2V0IHVwIHRvIHR3bworICogY29tcG9zaW5nIGNoYXJhY3RlcnMuICBVc2Ugbm8gbW9yZSB0aGFuIHBbbWF4bGVuXS4KKyAqLworICAgIGludAordXRmY19wdHIyY2hhcl9sZW4ocCwgcDEsIHAyLCBtYXhsZW4pCisgICAgY2hhcl91CSpwOworICAgIGludAkJKnAxOwkvKiByZXR1cm46IGZpcnN0IGNvbXBvc2luZyBjaGFyIG9yIDAgKi8KKyAgICBpbnQJCSpwMjsJLyogcmV0dXJuOiBzZWNvbmQgY29tcG9zaW5nIGNoYXIgb3IgMCAqLworICAgIGludAkJbWF4bGVuOworeworICAgIGludAkJbGVuOworICAgIGludAkJYzsKKyAgICBpbnQJCWNjOworCisgICAgYyA9IHV0Zl9wdHIyY2hhcihwKTsKKyAgICBsZW4gPSB1dGZfcHRyMmxlbl9jaGVja19sZW4ocCwgbWF4bGVuKTsKKyAgICAvKiBPbmx5IGFjY2VwdCBhIGNvbXBvc2luZyBjaGFyIHdoZW4gdGhlIGZpcnN0IGNoYXIgaXNuJ3QgaWxsZWdhbC4gKi8KKyAgICBpZiAoKGxlbiA+IDEgfHwgKnAgPCAweDgwKQorCSAgICAmJiBsZW4gPCBtYXhsZW4KKwkgICAgJiYgcFtsZW5dID49IDB4ODAKKwkgICAgJiYgVVRGX0NPTVBPU0lOR0xJS0UocCwgcCArIGxlbikpCisgICAgeworCSpwMSA9IHV0Zl9wdHIyY2hhcihwICsgbGVuKTsKKwlsZW4gKz0gdXRmX3B0cjJsZW5fY2hlY2tfbGVuKHAgKyBsZW4sIG1heGxlbiAtIGxlbik7CisJaWYgKGxlbiA8IG1heGxlbgorCQkmJiBwW2xlbl0gPj0gMHg4MAorCQkmJiB1dGZfaXNjb21wb3NpbmcoY2MgPSB1dGZfcHRyMmNoYXIocCArIGxlbikpKQorCSAgICAqcDIgPSBjYzsKKwllbHNlCisJICAgICpwMiA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJKnAxID0gMDsKKwkqcDIgPSAwOworICAgIH0KKyAgICByZXR1cm4gYzsKK30KKworLyoKKyAqIENvbnZlcnQgdGhlIGNoYXJhY3RlciBhdCBzY3JlZW4gcG9zaXRpb24gIm9mZiIgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcy4KKyAqIEluY2x1ZGVzIHRoZSBjb21wb3NpbmcgY2hhcmFjdGVycy4KKyAqICJidWYiIG11c3QgYXQgbGVhc3QgaGF2ZSB0aGUgbGVuZ3RoIE1CX01BWEJZVEVTLgorICogUmV0dXJucyB0aGUgcHJvZHVjZWQgbnVtYmVyIG9mIGJ5dGVzLgorICovCisgICAgaW50Cit1dGZjX2NoYXIyYnl0ZXMob2ZmLCBidWYpCisgICAgaW50CQlvZmY7CisgICAgY2hhcl91CSpidWY7Cit7CisgICAgaW50CQlsZW47CisKKyAgICBsZW4gPSB1dGZfY2hhcjJieXRlcyhTY3JlZW5MaW5lc1VDW29mZl0sIGJ1Zik7CisgICAgaWYgKFNjcmVlbkxpbmVzQzFbb2ZmXSAhPSAwKQorICAgIHsKKwlsZW4gKz0gdXRmX2NoYXIyYnl0ZXMoU2NyZWVuTGluZXNDMVtvZmZdLCBidWYgKyBsZW4pOworCWlmIChTY3JlZW5MaW5lc0MyW29mZl0gIT0gMCkKKwkgICAgbGVuICs9IHV0Zl9jaGFyMmJ5dGVzKFNjcmVlbkxpbmVzQzJbb2ZmXSwgYnVmICsgbGVuKTsKKyAgICB9CisgICAgcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIEdldCB0aGUgbGVuZ3RoIG9mIGEgVVRGLTggYnl0ZSBzZXF1ZW5jZSwgbm90IGluY2x1ZGluZyBhbnkgZm9sbG93aW5nCisgKiBjb21wb3NpbmcgY2hhcmFjdGVycy4KKyAqIFJldHVybnMgMCBmb3IgIiIuCisgKiBSZXR1cm5zIDEgZm9yIGFuIGlsbGVnYWwgYnl0ZSBzZXF1ZW5jZS4KKyAqLworICAgIGludAordXRmX3B0cjJsZW5fY2hlY2socCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgaW50CQlsZW47CisgICAgaW50CQlpOworCisgICAgaWYgKCpwID09IE5VTCkKKwlyZXR1cm4gMDsKKyAgICBsZW4gPSB1dGY4bGVuX3RhYlsqcF07CisgICAgZm9yIChpID0gMTsgaSA8IGxlbjsgKytpKQorCWlmICgocFtpXSAmIDB4YzApICE9IDB4ODApCisJICAgIHJldHVybiAxOworICAgIHJldHVybiBsZW47Cit9CisKKy8qCisgKiBSZXR1cm4gbGVuZ3RoIG9mIFVURi04IGNoYXJhY3Rlciwgb2J0YWluZWQgZnJvbSB0aGUgZmlyc3QgYnl0ZS4KKyAqICJiIiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1IQorICovCisgICAgaW50Cit1dGZfYnl0ZTJsZW4oYikKKyAgICBpbnQJCWI7Cit7CisgICAgcmV0dXJuIHV0ZjhsZW5fdGFiW2JdOworfQorCisvKgorICogR2V0IHRoZSBsZW5ndGggb2YgVVRGLTggYnl0ZSBzZXF1ZW5jZSAicFtzaXplXSIuICBEb2VzIG5vdCBpbmNsdWRlIGFueQorICogZm9sbG93aW5nIGNvbXBvc2luZyBjaGFyYWN0ZXJzLgorICogUmV0dXJucyAxIGZvciAiIi4KKyAqIFJldHVybnMgMSBmb3IgYW4gaWxsZWdhbCBieXRlIHNlcXVlbmNlLgorICogUmV0dXJucyBudW1iZXIgPiAic2l6ZSIgZm9yIGFuIGluY29tcGxldGUgYnl0ZSBzZXF1ZW5jZS4KKyAqLworICAgIGludAordXRmX3B0cjJsZW5fY2hlY2tfbGVuKHAsIHNpemUpCisgICAgY2hhcl91CSpwOworICAgIGludAkJc2l6ZTsKK3sKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWk7CisKKyAgICBpZiAoKnAgPT0gTlVMKQorCXJldHVybiAxOworICAgIGxlbiA9IHV0ZjhsZW5fdGFiWypwXTsKKyAgICBpZiAobGVuID4gc2l6ZSkKKwlyZXR1cm4gbGVuOwkvKiBpbmNvbXBsZXRlIGJ5dGUgc2VxdWVuY2UuICovCisgICAgZm9yIChpID0gMTsgaSA8IGxlbjsgKytpKQorCWlmICgocFtpXSAmIDB4YzApICE9IDB4ODApCisJICAgIHJldHVybiAxOworICAgIHJldHVybiBsZW47Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIGNoYXJhY3RlciBhdCAicCIgdGFrZXMuCisgKiBUaGlzIGluY2x1ZGVzIGZvbGxvd2luZyBjb21wb3NpbmcgY2hhcmFjdGVycy4KKyAqLworICAgIGludAordXRmY19wdHIybGVuX2NoZWNrKHApCisgICAgY2hhcl91CSpwOworeworICAgIGludAkJbGVuOworI2lmZGVmIEZFQVRfQVJBQklDCisgICAgaW50CQlwcmV2bGVuOworI2VuZGlmCisKKyAgICBpZiAoKnAgPT0gTlVMKQorCXJldHVybiAwOworICAgIGlmIChwWzBdIDwgMHg4MCAmJiBwWzFdIDwgMHg4MCkJLyogYmUgcXVpY2sgZm9yIEFTQ0lJICovCisJcmV0dXJuIDE7CisKKyAgICAvKiBTa2lwIG92ZXIgZmlyc3QgVVRGLTggY2hhciwgc3RvcHBpbmcgYXQgYSBOVUwgYnl0ZS4gKi8KKyAgICBsZW4gPSB1dGZfcHRyMmxlbl9jaGVjayhwKTsKKworICAgIC8qIENoZWNrIGZvciBpbGxlZ2FsIGJ5dGUuICovCisgICAgaWYgKGxlbiA9PSAxICYmIHBbMF0gPj0gMHg4MCkKKwlyZXR1cm4gMTsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIGNvbXBvc2luZyBjaGFyYWN0ZXJzLiAgV2UgY2FuIGhhbmRsZSBvbmx5IHRoZSBmaXJzdCB0d28sIGJ1dAorICAgICAqIHNraXAgYWxsIG9mIHRoZW0gKG90aGVyd2lzZSB0aGUgY3Vyc29yIHdvdWxkIGdldCBzdHVjaykuCisgICAgICovCisjaWZkZWYgRkVBVF9BUkFCSUMKKyAgICBwcmV2bGVuID0gMDsKKyNlbmRpZgorICAgIGZvciAoOzspCisgICAgeworCWlmIChwW2xlbl0gPCAweDgwIHx8ICFVVEZfQ09NUE9TSU5HTElLRShwICsgcHJldmxlbiwgcCArIGxlbikpCisJICAgIHJldHVybiBsZW47CisKKwkvKiBTa2lwIG92ZXIgY29tcG9zaW5nIGNoYXIgKi8KKyNpZmRlZiBGRUFUX0FSQUJJQworCXByZXZsZW4gPSBsZW47CisjZW5kaWYKKwlsZW4gKz0gdXRmX3B0cjJsZW5fY2hlY2socCArIGxlbik7CisgICAgfQorfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBjaGFyYWN0ZXIgYXQgInBbc2l6ZV0iCisgKiB0YWtlcy4gIFRoaXMgaW5jbHVkZXMgZm9sbG93aW5nIGNvbXBvc2luZyBjaGFyYWN0ZXJzLgorICogUmV0dXJucyAxIGZvciBhbiBpbGxlZ2FsIGNoYXIgb3IgYW4gaW5jb21wbGV0ZSBieXRlIHNlcXVlbmNlLgorICovCisgICAgaW50Cit1dGZjX3B0cjJsZW5fY2hlY2tfbGVuKHAsIHNpemUpCisgICAgY2hhcl91CSpwOworICAgIGludAkJc2l6ZTsKK3sKKyAgICBpbnQJCWxlbjsKKyNpZmRlZiBGRUFUX0FSQUJJQworICAgIGludAkJcHJldmxlbjsKKyNlbmRpZgorCisgICAgaWYgKCpwID09IE5VTCkKKwlyZXR1cm4gMDsKKyAgICBpZiAocFswXSA8IDB4ODAgJiYgKHNpemUgPT0gMSB8fCBwWzFdIDwgMHg4MCkpIC8qIGJlIHF1aWNrIGZvciBBU0NJSSAqLworCXJldHVybiAxOworCisgICAgLyogU2tpcCBvdmVyIGZpcnN0IFVURi04IGNoYXIsIHN0b3BwaW5nIGF0IGEgTlVMIGJ5dGUuICovCisgICAgbGVuID0gdXRmX3B0cjJsZW5fY2hlY2tfbGVuKHAsIHNpemUpOworCisgICAgLyogQ2hlY2sgZm9yIGlsbGVnYWwgYnl0ZSBhbmQgaW5jb21wbGV0ZSBieXRlIHNlcXVlbmNlLiAqLworICAgIGlmICgobGVuID09IDEgJiYgcFswXSA+PSAweDgwKSB8fCBsZW4gPiBzaXplKQorCXJldHVybiAxOworCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgY29tcG9zaW5nIGNoYXJhY3RlcnMuICBXZSBjYW4gaGFuZGxlIG9ubHkgdGhlIGZpcnN0IHR3bywgYnV0CisgICAgICogc2tpcCBhbGwgb2YgdGhlbSAob3RoZXJ3aXNlIHRoZSBjdXJzb3Igd291bGQgZ2V0IHN0dWNrKS4KKyAgICAgKi8KKyNpZmRlZiBGRUFUX0FSQUJJQworICAgIHByZXZsZW4gPSAwOworI2VuZGlmCisgICAgd2hpbGUgKGxlbiA8IHNpemUpCisgICAgeworCWlmIChwW2xlbl0gPCAweDgwIHx8ICFVVEZfQ09NUE9TSU5HTElLRShwICsgcHJldmxlbiwgcCArIGxlbikpCisJICAgIGJyZWFrOworCisJLyogU2tpcCBvdmVyIGNvbXBvc2luZyBjaGFyICovCisjaWZkZWYgRkVBVF9BUkFCSUMKKwlwcmV2bGVuID0gbGVuOworI2VuZGlmCisJbGVuICs9IHV0Zl9wdHIybGVuX2NoZWNrX2xlbihwICsgbGVuLCBzaXplIC0gbGVuKTsKKyAgICB9CisgICAgcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBjaGFyYWN0ZXIgImMiIHRha2VzLgorICogVGhpcyBkb2VzIG5vdCBpbmNsdWRlIGNvbXBvc2luZyBjaGFyYWN0ZXJzLgorICovCisgICAgaW50Cit1dGZfY2hhcjJsZW4oYykKKyAgICBpbnQJCWM7Cit7CisgICAgaWYgKGMgPCAweDgwKQorCXJldHVybiAxOworICAgIGlmIChjIDwgMHg4MDApCisJcmV0dXJuIDI7CisgICAgaWYgKGMgPCAweDEwMDAwKQorCXJldHVybiAzOworICAgIGlmIChjIDwgMHgyMDAwMDApCisJcmV0dXJuIDQ7CisgICAgaWYgKGMgPCAweDQwMDAwMDApCisJcmV0dXJuIDU7CisgICAgcmV0dXJuIDY7Cit9CisKKy8qCisgKiBDb252ZXJ0IFVuaWNvZGUgY2hhcmFjdGVyICJjIiB0byBVVEYtOCBzdHJpbmcgaW4gImJ1ZltdIi4KKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcy4KKyAqIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBjb21wb3NpbmcgY2hhcmFjdGVycy4KKyAqLworICAgIGludAordXRmX2NoYXIyYnl0ZXMoYywgYnVmKQorICAgIGludAkJYzsKKyAgICBjaGFyX3UJKmJ1ZjsKK3sKKyAgICBpZiAoYyA8IDB4ODApCQkvKiA3IGJpdHMgKi8KKyAgICB7CisJYnVmWzBdID0gYzsKKwlyZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKGMgPCAweDgwMCkJCS8qIDExIGJpdHMgKi8KKyAgICB7CisJYnVmWzBdID0gMHhjMCArICgodW5zaWduZWQpYyA+PiA2KTsKKwlidWZbMV0gPSAweDgwICsgKGMgJiAweDNmKTsKKwlyZXR1cm4gMjsKKyAgICB9CisgICAgaWYgKGMgPCAweDEwMDAwKQkJLyogMTYgYml0cyAqLworICAgIHsKKwlidWZbMF0gPSAweGUwICsgKCh1bnNpZ25lZCljID4+IDEyKTsKKwlidWZbMV0gPSAweDgwICsgKCgodW5zaWduZWQpYyA+PiA2KSAmIDB4M2YpOworCWJ1ZlsyXSA9IDB4ODAgKyAoYyAmIDB4M2YpOworCXJldHVybiAzOworICAgIH0KKyAgICBpZiAoYyA8IDB4MjAwMDAwKQkJLyogMjEgYml0cyAqLworICAgIHsKKwlidWZbMF0gPSAweGYwICsgKCh1bnNpZ25lZCljID4+IDE4KTsKKwlidWZbMV0gPSAweDgwICsgKCgodW5zaWduZWQpYyA+PiAxMikgJiAweDNmKTsKKwlidWZbMl0gPSAweDgwICsgKCgodW5zaWduZWQpYyA+PiA2KSAmIDB4M2YpOworCWJ1ZlszXSA9IDB4ODAgKyAoYyAmIDB4M2YpOworCXJldHVybiA0OworICAgIH0KKyAgICBpZiAoYyA8IDB4NDAwMDAwMCkJCS8qIDI2IGJpdHMgKi8KKyAgICB7CisJYnVmWzBdID0gMHhmOCArICgodW5zaWduZWQpYyA+PiAyNCk7CisJYnVmWzFdID0gMHg4MCArICgoKHVuc2lnbmVkKWMgPj4gMTgpICYgMHgzZik7CisJYnVmWzJdID0gMHg4MCArICgoKHVuc2lnbmVkKWMgPj4gMTIpICYgMHgzZik7CisJYnVmWzNdID0gMHg4MCArICgoKHVuc2lnbmVkKWMgPj4gNikgJiAweDNmKTsKKwlidWZbNF0gPSAweDgwICsgKGMgJiAweDNmKTsKKwlyZXR1cm4gNTsKKyAgICB9CisJCQkJLyogMzEgYml0cyAqLworICAgIGJ1ZlswXSA9IDB4ZmMgKyAoKHVuc2lnbmVkKWMgPj4gMzApOworICAgIGJ1ZlsxXSA9IDB4ODAgKyAoKCh1bnNpZ25lZCljID4+IDI0KSAmIDB4M2YpOworICAgIGJ1ZlsyXSA9IDB4ODAgKyAoKCh1bnNpZ25lZCljID4+IDE4KSAmIDB4M2YpOworICAgIGJ1ZlszXSA9IDB4ODAgKyAoKCh1bnNpZ25lZCljID4+IDEyKSAmIDB4M2YpOworICAgIGJ1Zls0XSA9IDB4ODAgKyAoKCh1bnNpZ25lZCljID4+IDYpICYgMHgzZik7CisgICAgYnVmWzVdID0gMHg4MCArIChjICYgMHgzZik7CisgICAgcmV0dXJuIDY7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAiYyIgaXMgYSBjb21wb3NpbmcgVVRGLTggY2hhcmFjdGVyLiAgVGhpcyBtZWFucyBpdCB3aWxsIGJlCisgKiBkcmF3biBvbiB0b3Agb2YgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXIuCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTWFya3VzIEt1aG4uCisgKi8KKyAgICBpbnQKK3V0Zl9pc2NvbXBvc2luZyhjKQorICAgIGludAkJYzsKK3sKKyAgICAvKiBzb3J0ZWQgbGlzdCBvZiBub24tb3ZlcmxhcHBpbmcgaW50ZXJ2YWxzICovCisgICAgc3RhdGljIHN0cnVjdCBpbnRlcnZhbCBjb21iaW5pbmdbXSA9CisgICAgeworCXsweDAzMDAsIDB4MDM0Zn0sIHsweDAzNjAsIDB4MDM2Zn0sIHsweDA0ODMsIDB4MDQ4Nn0sIHsweDA0ODgsIDB4MDQ4OX0sCisJezB4MDU5MSwgMHgwNWExfSwgezB4MDVhMywgMHgwNWI5fSwgezB4MDViYiwgMHgwNWJkfSwgezB4MDViZiwgMHgwNWJmfSwKKwl7MHgwNWMxLCAweDA1YzJ9LCB7MHgwNWM0LCAweDA1YzR9LCB7MHgwNjEwLCAweDA2MTV9LCB7MHgwNjRiLCAweDA2NTh9LAorCXsweDA2NzAsIDB4MDY3MH0sIHsweDA2ZDYsIDB4MDZkY30sIHsweDA2ZGUsIDB4MDZlNH0sIHsweDA2ZTcsIDB4MDZlOH0sCisJezB4MDZlYSwgMHgwNmVkfSwgezB4MDcxMSwgMHgwNzExfSwgezB4MDczMCwgMHgwNzRhfSwgezB4MDdhNiwgMHgwN2IwfSwKKwl7MHgwOTAxLCAweDA5MDN9LCB7MHgwOTNjLCAweDA5M2N9LCB7MHgwOTNlLCAweDA5NGR9LCB7MHgwOTUxLCAweDA5NTR9LAorCXsweDA5NjIsIDB4MDk2M30sIHsweDA5ODEsIDB4MDk4M30sIHsweDA5YmMsIDB4MDliY30sIHsweDA5YmUsIDB4MDljNH0sCisJezB4MDljNywgMHgwOWM4fSwgezB4MDljYiwgMHgwOWNkfSwgezB4MDlkNywgMHgwOWQ3fSwgezB4MDllMiwgMHgwOWUzfSwKKwl7MHgwYTAxLCAweDBhMDN9LCB7MHgwYTNjLCAweDBhM2N9LCB7MHgwYTNlLCAweDBhNDJ9LCB7MHgwYTQ3LCAweDBhNDh9LAorCXsweDBhNGIsIDB4MGE0ZH0sIHsweDBhNzAsIDB4MGE3MX0sIHsweDBhODEsIDB4MGE4M30sIHsweDBhYmMsIDB4MGFiY30sCisJezB4MGFiZSwgMHgwYWM1fSwgezB4MGFjNywgMHgwYWM5fSwgezB4MGFjYiwgMHgwYWNkfSwgezB4MGFlMiwgMHgwYWUzfSwKKwl7MHgwYjAxLCAweDBiMDN9LCB7MHgwYjNjLCAweDBiM2N9LCB7MHgwYjNlLCAweDBiNDN9LCB7MHgwYjQ3LCAweDBiNDh9LAorCXsweDBiNGIsIDB4MGI0ZH0sIHsweDBiNTYsIDB4MGI1N30sIHsweDBiODIsIDB4MGI4Mn0sIHsweDBiYmUsIDB4MGJjMn0sCisJezB4MGJjNiwgMHgwYmM4fSwgezB4MGJjYSwgMHgwYmNkfSwgezB4MGJkNywgMHgwYmQ3fSwgezB4MGMwMSwgMHgwYzAzfSwKKwl7MHgwYzNlLCAweDBjNDR9LCB7MHgwYzQ2LCAweDBjNDh9LCB7MHgwYzRhLCAweDBjNGR9LCB7MHgwYzU1LCAweDBjNTZ9LAorCXsweDBjODIsIDB4MGM4M30sIHsweDBjYmMsIDB4MGNiY30sIHsweDBjYmUsIDB4MGNjNH0sIHsweDBjYzYsIDB4MGNjOH0sCisJezB4MGNjYSwgMHgwY2NkfSwgezB4MGNkNSwgMHgwY2Q2fSwgezB4MGQwMiwgMHgwZDAzfSwgezB4MGQzZSwgMHgwZDQzfSwKKwl7MHgwZDQ2LCAweDBkNDh9LCB7MHgwZDRhLCAweDBkNGR9LCB7MHgwZDU3LCAweDBkNTd9LCB7MHgwZDgyLCAweDBkODN9LAorCXsweDBkY2EsIDB4MGRjYX0sIHsweDBkY2YsIDB4MGRkNH0sIHsweDBkZDYsIDB4MGRkNn0sIHsweDBkZDgsIDB4MGRkZn0sCisJezB4MGRmMiwgMHgwZGYzfSwgezB4MGUzMSwgMHgwZTMxfSwgezB4MGUzNCwgMHgwZTNhfSwgezB4MGU0NywgMHgwZTRlfSwKKwl7MHgwZWIxLCAweDBlYjF9LCB7MHgwZWI0LCAweDBlYjl9LCB7MHgwZWJiLCAweDBlYmN9LCB7MHgwZWM4LCAweDBlY2R9LAorCXsweDBmMTgsIDB4MGYxOX0sIHsweDBmMzUsIDB4MGYzNX0sIHsweDBmMzcsIDB4MGYzN30sIHsweDBmMzksIDB4MGYzOX0sCisJezB4MGYzZSwgMHgwZjNmfSwgezB4MGY3MSwgMHgwZjg0fSwgezB4MGY4NiwgMHgwZjg3fSwgezB4MGY5MCwgMHgwZjk3fSwKKwl7MHgwZjk5LCAweDBmYmN9LCB7MHgwZmM2LCAweDBmYzZ9LCB7MHgxMDJjLCAweDEwMzJ9LCB7MHgxMDM2LCAweDEwMzl9LAorCXsweDEwNTYsIDB4MTA1OX0sIHsweDE3MTIsIDB4MTcxNH0sIHsweDE3MzIsIDB4MTczNH0sIHsweDE3NTIsIDB4MTc1M30sCisJezB4MTc3MiwgMHgxNzczfSwgezB4MTdiNiwgMHgxN2QzfSwgezB4MTdkZCwgMHgxN2RkfSwgezB4MTgwYiwgMHgxODBkfSwKKwl7MHgxOGE5LCAweDE4YTl9LCB7MHgxOTIwLCAweDE5MmJ9LCB7MHgxOTMwLCAweDE5M2J9LCB7MHgyMGQwLCAweDIwZWF9LAorCXsweDMwMmEsIDB4MzAyZn0sIHsweDMwOTksIDB4MzA5YX0sIHsweGZiMWUsIDB4ZmIxZX0sIHsweGZlMDAsIDB4ZmUwZn0sCisJezB4ZmUyMCwgMHhmZTIzfSwKKyAgICB9OworCisgICAgcmV0dXJuIGludGFibGUoY29tYmluaW5nLCBzaXplb2YoY29tYmluaW5nKSwgYyk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBmb3IgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgaW4gYSBub3JtYWwgd2F5LgorICogT25seSBmb3IgY2hhcmFjdGVycyBvZiAweDEwMCBhbmQgYWJvdmUhCisgKi8KKyAgICBpbnQKK3V0Zl9wcmludGFibGUoYykKKyAgICBpbnQJCWM7Cit7CisjaWZkZWYgVVNFX1dDSEFSX0ZVTkNUSU9OUworICAgIC8qCisgICAgICogQXNzdW1lIHRoZSBpc3dwcmludCgpIGxpYnJhcnkgZnVuY3Rpb24gd29ya3MgYmV0dGVyIHRoYW4gb3VyIG93biBzdHVmZi4KKyAgICAgKi8KKyAgICByZXR1cm4gaXN3cHJpbnQoYyk7CisjZWxzZQorICAgIC8qIFNvcnRlZCBsaXN0IG9mIG5vbi1vdmVybGFwcGluZyBpbnRlcnZhbHMuCisgICAgICogMHhkODAwLTB4ZGZmZiBpcyByZXNlcnZlZCBmb3IgVVRGLTE2LCBhY3R1YWxseSBpbGxlZ2FsLiAqLworICAgIHN0YXRpYyBzdHJ1Y3QgaW50ZXJ2YWwgbm9ucHJpbnRbXSA9CisgICAgeworCXsweDA3MGYsIDB4MDcwZn0sIHsweDE4MGIsIDB4MTgwZX0sIHsweDIwMGIsIDB4MjAwZn0sIHsweDIwMmEsIDB4MjAyZX0sCisJezB4MjA2YSwgMHgyMDZmfSwgezB4ZDgwMCwgMHhkZmZmfSwgezB4ZmVmZiwgMHhmZWZmfSwgezB4ZmZmOSwgMHhmZmZifSwKKwl7MHhmZmZlLCAweGZmZmZ9CisgICAgfTsKKworICAgIHJldHVybiAhaW50YWJsZShub25wcmludCwgc2l6ZW9mKG5vbnByaW50KSwgYyk7CisjZW5kaWYKK30KKworLyoKKyAqIEdldCBjbGFzcyBvZiBhIFVuaWNvZGUgY2hhcmFjdGVyLgorICogMDogd2hpdGUgc3BhY2UKKyAqIDE6IHB1bmN0dWF0aW9uCisgKiAyIG9yIGJpZ2dlcjogc29tZSBjbGFzcyBvZiB3b3JkIGNoYXJhY3Rlci4KKyAqLworICAgIGludAordXRmX2NsYXNzKGMpCisgICAgaW50CQljOworeworICAgIC8qIHNvcnRlZCBsaXN0IG9mIG5vbi1vdmVybGFwcGluZyBpbnRlcnZhbHMgKi8KKyAgICBzdGF0aWMgc3RydWN0IGNsaW50ZXJ2YWwKKyAgICB7CisJdW5zaWduZWQgc2hvcnQgZmlyc3Q7CisJdW5zaWduZWQgc2hvcnQgbGFzdDsKKwl1bnNpZ25lZCBzaG9ydCBjbGFzczsKKyAgICB9IGNsYXNzZXNbXSA9CisgICAgeworCXsweDAzN2UsIDB4MDM3ZSwgMX0sCQkvKiBHcmVlayBxdWVzdGlvbiBtYXJrICovCisJezB4MDM4NywgMHgwMzg3LCAxfSwJCS8qIEdyZWVrIGFubyB0ZWxlaWEgKi8KKwl7MHgwNTVhLCAweDA1NWYsIDF9LAkJLyogQXJtZW5pYW4gcHVuY3R1YXRpb24gKi8KKwl7MHgwNTg5LCAweDA1ODksIDF9LAkJLyogQXJtZW5pYW4gZnVsbCBzdG9wICovCisJezB4MDViZSwgMHgwNWJlLCAxfSwKKwl7MHgwNWMwLCAweDA1YzAsIDF9LAorCXsweDA1YzMsIDB4MDVjMywgMX0sCisJezB4MDVmMywgMHgwNWY0LCAxfSwKKwl7MHgwNjBjLCAweDA2MGMsIDF9LAorCXsweDA2MWIsIDB4MDYxYiwgMX0sCisJezB4MDYxZiwgMHgwNjFmLCAxfSwKKwl7MHgwNjZhLCAweDA2NmQsIDF9LAorCXsweDA2ZDQsIDB4MDZkNCwgMX0sCisJezB4MDcwMCwgMHgwNzBkLCAxfSwJCS8qIFN5cmlhYyBwdW5jdHVhdGlvbiAqLworCXsweDA5NjQsIDB4MDk2NSwgMX0sCisJezB4MDk3MCwgMHgwOTcwLCAxfSwKKwl7MHgwZGY0LCAweDBkZjQsIDF9LAorCXsweDBlNGYsIDB4MGU0ZiwgMX0sCisJezB4MGU1YSwgMHgwZTViLCAxfSwKKwl7MHgwZjA0LCAweDBmMTIsIDF9LAorCXsweDBmM2EsIDB4MGYzZCwgMX0sCisJezB4MGY4NSwgMHgwZjg1LCAxfSwKKwl7MHgxMDRhLCAweDEwNGYsIDF9LAkJLyogTXlhbm1hciBwdW5jdHVhdGlvbiAqLworCXsweDEwZmIsIDB4MTBmYiwgMX0sCQkvKiBHZW9yZ2lhbiBwdW5jdHVhdGlvbiAqLworCXsweDEzNjEsIDB4MTM2OCwgMX0sCQkvKiBFdGhpb3BpYyBwdW5jdHVhdGlvbiAqLworCXsweDE2NmQsIDB4MTY2ZSwgMX0sCQkvKiBDYW5hZGlhbiBTeWwuIHB1bmN0dWF0aW9uICovCisJezB4MTY4MCwgMHgxNjgwLCAwfSwKKwl7MHgxNjliLCAweDE2OWMsIDF9LAorCXsweDE2ZWIsIDB4MTZlZCwgMX0sCisJezB4MTczNSwgMHgxNzM2LCAxfSwKKwl7MHgxN2Q0LCAweDE3ZGMsIDF9LAkJLyogS2htZXIgcHVuY3R1YXRpb24gKi8KKwl7MHgxODAwLCAweDE4MGEsIDF9LAkJLyogTW9uZ29saWFuIHB1bmN0dWF0aW9uICovCisJezB4MjAwMCwgMHgyMDBiLCAwfSwJCS8qIHNwYWNlcyAqLworCXsweDIwMGMsIDB4MjAyNywgMX0sCQkvKiBwdW5jdHVhdGlvbiBhbmQgc3ltYm9scyAqLworCXsweDIwMjgsIDB4MjAyOSwgMH0sCisJezB4MjAyYSwgMHgyMDJlLCAxfSwJCS8qIHB1bmN0dWF0aW9uIGFuZCBzeW1ib2xzICovCisJezB4MjAyZiwgMHgyMDJmLCAwfSwKKwl7MHgyMDMwLCAweDIwNWUsIDF9LAkJLyogcHVuY3R1YXRpb24gYW5kIHN5bWJvbHMgKi8KKwl7MHgyMDVmLCAweDIwNWYsIDB9LAorCXsweDIwNjAsIDB4MjdmZiwgMX0sCQkvKiBwdW5jdHVhdGlvbiBhbmQgc3ltYm9scyAqLworCXsweDIwNzAsIDB4MjA3ZiwgMHgyMDcwfSwJLyogc3VwZXJzY3JpcHQgKi8KKwl7MHgyMDgwLCAweDIwOGYsIDB4MjA4MH0sCS8qIHN1YnNjcmlwdCAqLworCXsweDI5ODMsIDB4Mjk5OCwgMX0sCisJezB4MjlkOCwgMHgyOWRiLCAxfSwKKwl7MHgyOWZjLCAweDI5ZmQsIDF9LAorCXsweDMwMDAsIDB4MzAwMCwgMH0sCQkvKiBpZGVvZ3JhcGhpYyBzcGFjZSAqLworCXsweDMwMDEsIDB4MzAyMCwgMX0sCQkvKiBpZGVvZ3JhcGhpYyBwdW5jdHVhdGlvbiAqLworCXsweDMwMzAsIDB4MzAzMCwgMX0sCisJezB4MzAzZCwgMHgzMDNkLCAxfSwKKwl7MHgzMDQwLCAweDMwOWYsIDB4MzA0MH0sCS8qIEhpcmFnYW5hICovCisJezB4MzBhMCwgMHgzMGZmLCAweDMwYTB9LAkvKiBLYXRha2FuYSAqLworCXsweDMzMDAsIDB4OWZmZiwgMHg0ZTAwfSwJLyogQ0pLIElkZW9ncmFwaHMgKi8KKwl7MHhhYzAwLCAweGQ3YTMsIDB4YWMwMH0sCS8qIEhhbmd1bCBTeWxsYWJsZXMgKi8KKwl7MHhmOTAwLCAweGZhZmYsIDB4NGUwMH0sCS8qIENKSyBJZGVvZ3JhcGhzICovCisJezB4ZmQzZSwgMHhmZDNmLCAxfSwKKwl7MHhmZTMwLCAweGZlNmIsIDF9LAkJLyogcHVuY3R1YXRpb24gZm9ybXMgKi8KKwl7MHhmZjAwLCAweGZmMGYsIDF9LAkJLyogaGFsZi9mdWxsd2lkdGggQVNDSUkgKi8KKwl7MHhmZjFhLCAweGZmMjAsIDF9LAkJLyogaGFsZi9mdWxsd2lkdGggQVNDSUkgKi8KKwl7MHhmZjNiLCAweGZmNDAsIDF9LAkJLyogaGFsZi9mdWxsd2lkdGggQVNDSUkgKi8KKwl7MHhmZjViLCAweGZmNjUsIDF9LAkJLyogaGFsZi9mdWxsd2lkdGggQVNDSUkgKi8KKyAgICB9OworICAgIGludCBib3QgPSAwOworICAgIGludCB0b3AgPSBzaXplb2YoY2xhc3NlcykgLyBzaXplb2Yoc3RydWN0IGNsaW50ZXJ2YWwpIC0gMTsKKyAgICBpbnQgbWlkOworCisgICAgLyogRmlyc3QgcXVpY2sgY2hlY2sgZm9yIExhdGluMSBjaGFyYWN0ZXJzLCB1c2UgJ2lza2V5d29yZCcuICovCisgICAgaWYgKGMgPCAweDEwMCkKKyAgICB7CisJaWYgKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09IE5VTCkKKwkgICAgcmV0dXJuIDA7CSAgICAvKiBibGFuayAqLworCWlmICh2aW1faXN3b3JkYyhjKSkKKwkgICAgcmV0dXJuIDI7CSAgICAvKiB3b3JkIGNoYXJhY3RlciAqLworCXJldHVybiAxOwkgICAgLyogcHVuY3R1YXRpb24gKi8KKyAgICB9CisKKyAgICAvKiBiaW5hcnkgc2VhcmNoIGluIHRhYmxlICovCisgICAgd2hpbGUgKHRvcCA+PSBib3QpCisgICAgeworCW1pZCA9IChib3QgKyB0b3ApIC8gMjsKKwlpZiAoY2xhc3Nlc1ttaWRdLmxhc3QgPCBjKQorCSAgICBib3QgPSBtaWQgKyAxOworCWVsc2UgaWYgKGNsYXNzZXNbbWlkXS5maXJzdCA+IGMpCisJICAgIHRvcCA9IG1pZCAtIDE7CisJZWxzZQorCSAgICByZXR1cm4gKGludCljbGFzc2VzW21pZF0uY2xhc3M7CisgICAgfQorCisgICAgLyogbW9zdCBvdGhlciBjaGFyYWN0ZXJzIGFyZSAid29yZCIgY2hhcmFjdGVycyAqLworICAgIHJldHVybiAyOworfQorCisvKgorICogQ29kZSBmb3IgVW5pY29kZSBjYXNlLWRlcGVuZGVudCBvcGVyYXRpb25zLiAgQmFzZWQgb24gbm90ZXMgaW4KKyAqIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL1VOSURBVEEvQ2FzZUZvbGRpbmcudHh0CisgKiBUaGlzIGNvZGUgdXNlcyBzaW1wbGUgY2FzZSBmb2xkaW5nLCBub3QgZnVsbCBjYXNlIGZvbGRpbmcuCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdGFibGUgaXMgYnVpbHQgYnkgZm9sZEV4dHJhY3QucGwgPCBDYXNlRm9sZGluZy50eHQgLgorICogSXQgbXVzdCBiZSBpbiBudW1lcmljIG9yZGVyLCBiZWNhdXNlIHdlIHVzZSBiaW5hcnkgc2VhcmNoIG9uIGl0LgorICogQW4gZW50cnkgc3VjaCBhcyB7MHg0MSwweDVhLDEsMzJ9IG1lYW5zIHRoYXQgVUNTLTQgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UKKyAqIGZyb20gMHg0MSB0byAweDVhIGluY2x1c2l2ZSwgc3RlcHBpbmcgYnkgMSwgYXJlIGZvbGRlZCBieSBhZGRpbmcgMzIuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQgcmFuZ2VTdGFydDsKKyAgICBpbnQgcmFuZ2VFbmQ7CisgICAgaW50IHN0ZXA7CisgICAgaW50IG9mZnNldDsKK30gY29udmVydFN0cnVjdDsKKworY29udmVydFN0cnVjdCBmb2xkQ2FzZVtdID0KK3sKKwl7MHg0MSwweDVhLDEsMzJ9LCB7MHhjMCwweGQ2LDEsMzJ9LCB7MHhkOCwweGRlLDEsMzJ9LAorCXsweDEwMCwweDEyZSwyLDF9LCB7MHgxMzAsMHgxMzAsLTEsLTE5OX0sIHsweDEzMiwweDEzNiwyLDF9LAorCXsweDEzOSwweDE0NywyLDF9LCB7MHgxNGEsMHgxNzYsMiwxfSwgezB4MTc4LDB4MTc4LC0xLC0xMjF9LAorCXsweDE3OSwweDE3ZCwyLDF9LCB7MHgxODEsMHgxODEsLTEsMjEwfSwgezB4MTgyLDB4MTg0LDIsMX0sCisJezB4MTg2LDB4MTg2LC0xLDIwNn0sIHsweDE4NywweDE4NywtMSwxfSwgezB4MTg5LDB4MThhLDEsMjA1fSwKKwl7MHgxOGIsMHgxOGIsLTEsMX0sIHsweDE4ZSwweDE4ZSwtMSw3OX0sIHsweDE4ZiwweDE4ZiwtMSwyMDJ9LAorCXsweDE5MCwweDE5MCwtMSwyMDN9LCB7MHgxOTEsMHgxOTEsLTEsMX0sIHsweDE5MywweDE5MywtMSwyMDV9LAorCXsweDE5NCwweDE5NCwtMSwyMDd9LCB7MHgxOTYsMHgxOTYsLTEsMjExfSwgezB4MTk3LDB4MTk3LC0xLDIwOX0sCisJezB4MTk4LDB4MTk4LC0xLDF9LCB7MHgxOWMsMHgxOWMsLTEsMjExfSwgezB4MTlkLDB4MTlkLC0xLDIxM30sCisJezB4MTlmLDB4MTlmLC0xLDIxNH0sIHsweDFhMCwweDFhNCwyLDF9LCB7MHgxYTYsMHgxYTYsLTEsMjE4fSwKKwl7MHgxYTcsMHgxYTcsLTEsMX0sIHsweDFhOSwweDFhOSwtMSwyMTh9LCB7MHgxYWMsMHgxYWMsLTEsMX0sCisJezB4MWFlLDB4MWFlLC0xLDIxOH0sIHsweDFhZiwweDFhZiwtMSwxfSwgezB4MWIxLDB4MWIyLDEsMjE3fSwKKwl7MHgxYjMsMHgxYjUsMiwxfSwgezB4MWI3LDB4MWI3LC0xLDIxOX0sIHsweDFiOCwweDFiYyw0LDF9LAorCXsweDFjNCwweDFjNCwtMSwyfSwgezB4MWM1LDB4MWM1LC0xLDF9LCB7MHgxYzcsMHgxYzcsLTEsMn0sCisJezB4MWM4LDB4MWM4LC0xLDF9LCB7MHgxY2EsMHgxY2EsLTEsMn0sIHsweDFjYiwweDFkYiwyLDF9LAorCXsweDFkZSwweDFlZSwyLDF9LCB7MHgxZjEsMHgxZjEsLTEsMn0sIHsweDFmMiwweDFmNCwyLDF9LAorCXsweDFmNiwweDFmNiwtMSwtOTd9LCB7MHgxZjcsMHgxZjcsLTEsLTU2fSwgezB4MWY4LDB4MjFlLDIsMX0sCisJezB4MjIwLDB4MjIwLC0xLC0xMzB9LCB7MHgyMjIsMHgyMzIsMiwxfSwgezB4Mzg2LDB4Mzg2LC0xLDM4fSwKKwl7MHgzODgsMHgzOGEsMSwzN30sIHsweDM4YywweDM4YywtMSw2NH0sIHsweDM4ZSwweDM4ZiwxLDYzfSwKKwl7MHgzOTEsMHgzYTEsMSwzMn0sIHsweDNhMywweDNhYiwxLDMyfSwgezB4M2Q4LDB4M2VlLDIsMX0sCisJezB4M2Y0LDB4M2Y0LC0xLC02MH0sIHsweDNmNywweDNmNywtMSwxfSwgezB4M2Y5LDB4M2Y5LC0xLC03fSwKKwl7MHgzZmEsMHgzZmEsLTEsMX0sIHsweDQwMCwweDQwZiwxLDgwfSwgezB4NDEwLDB4NDJmLDEsMzJ9LAorCXsweDQ2MCwweDQ4MCwyLDF9LCB7MHg0OGEsMHg0YmUsMiwxfSwgezB4NGMxLDB4NGNkLDIsMX0sCisJezB4NGQwLDB4NGY0LDIsMX0sIHsweDRmOCwweDUwMCw4LDF9LCB7MHg1MDIsMHg1MGUsMiwxfSwKKwl7MHg1MzEsMHg1NTYsMSw0OH0sIHsweDFlMDAsMHgxZTk0LDIsMX0sIHsweDFlYTAsMHgxZWY4LDIsMX0sCisJezB4MWYwOCwweDFmMGYsMSwtOH0sIHsweDFmMTgsMHgxZjFkLDEsLTh9LCB7MHgxZjI4LDB4MWYyZiwxLC04fSwKKwl7MHgxZjM4LDB4MWYzZiwxLC04fSwgezB4MWY0OCwweDFmNGQsMSwtOH0sIHsweDFmNTksMHgxZjVmLDIsLTh9LAorCXsweDFmNjgsMHgxZjZmLDEsLTh9LCB7MHgxZjg4LDB4MWY4ZiwxLC04fSwgezB4MWY5OCwweDFmOWYsMSwtOH0sCisJezB4MWZhOCwweDFmYWYsMSwtOH0sIHsweDFmYjgsMHgxZmI5LDEsLTh9LCB7MHgxZmJhLDB4MWZiYiwxLC03NH0sCisJezB4MWZiYywweDFmYmMsLTEsLTl9LCB7MHgxZmM4LDB4MWZjYiwxLC04Nn0sIHsweDFmY2MsMHgxZmNjLC0xLC05fSwKKwl7MHgxZmQ4LDB4MWZkOSwxLC04fSwgezB4MWZkYSwweDFmZGIsMSwtMTAwfSwgezB4MWZlOCwweDFmZTksMSwtOH0sCisJezB4MWZlYSwweDFmZWIsMSwtMTEyfSwgezB4MWZlYywweDFmZWMsLTEsLTd9LCB7MHgxZmY4LDB4MWZmOSwxLC0xMjh9LAorCXsweDFmZmEsMHgxZmZiLDEsLTEyNn0sIHsweDFmZmMsMHgxZmZjLC0xLC05fSwgezB4MjEyNiwweDIxMjYsLTEsLTc1MTd9LAorCXsweDIxMmEsMHgyMTJhLC0xLC04MzgzfSwgezB4MjEyYiwweDIxMmIsLTEsLTgyNjJ9LAorCXsweDIxNjAsMHgyMTZmLDEsMTZ9LCB7MHgyNGI2LDB4MjRjZiwxLDI2fSwgezB4ZmYyMSwweGZmM2EsMSwzMn0sCisJezB4MTA0MDAsMHgxMDQyNywxLDQwfQorfTsKKworc3RhdGljIGludCB1dGZfY29udmVydChpbnQgYSwgY29udmVydFN0cnVjdCB0YWJsZVtdLCBpbnQgdGFibGVTaXplKTsKKworLyoKKyAqIEdlbmVyaWMgY29udmVyc2lvbiBmdW5jdGlvbiBmb3IgY2FzZSBvcGVyYXRpb25zLgorICogUmV0dXJuIHRoZSBjb252ZXJ0ZWQgZXF1aXZhbGVudCBvZiAiYSIsIHdoaWNoIGlzIGEgVUNTLTQgY2hhcmFjdGVyLiAgVXNlCisgKiB0aGUgZ2l2ZW4gY29udmVyc2lvbiAidGFibGUiLiAgVXNlcyBiaW5hcnkgc2VhcmNoIG9uICJ0YWJsZSIuCisgKi8KKyAgICBzdGF0aWMgaW50Cit1dGZfY29udmVydChhLCB0YWJsZSwgdGFibGVTaXplKQorICAgIGludAkJCWE7CisgICAgY29udmVydFN0cnVjdAl0YWJsZVtdOworICAgIGludAkJCXRhYmxlU2l6ZTsKK3sKKyAgICBpbnQgc3RhcnQsIG1pZCwgZW5kOyAvKiBpbmRpY2VzIGludG8gdGFibGUgKi8KKworICAgIHN0YXJ0ID0gMDsKKyAgICBlbmQgPSB0YWJsZVNpemUgLyBzaXplb2YoY29udmVydFN0cnVjdCk7CisgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKQorICAgIHsKKwkvKiBuZWVkIHRvIHNlYXJjaCBmdXJ0aGVyICovCisJbWlkID0gKGVuZCArIHN0YXJ0KSAvMjsKKwlpZiAodGFibGVbbWlkXS5yYW5nZUVuZCA8IGEpCisJICAgIHN0YXJ0ID0gbWlkICsgMTsKKwllbHNlCisJICAgIGVuZCA9IG1pZDsKKyAgICB9CisgICAgaWYgKHRhYmxlW3N0YXJ0XS5yYW5nZVN0YXJ0IDw9IGEgJiYgYSA8PSB0YWJsZVtzdGFydF0ucmFuZ2VFbmQKKwkgICAgJiYgKGEgLSB0YWJsZVtzdGFydF0ucmFuZ2VTdGFydCkgJSB0YWJsZVtzdGFydF0uc3RlcCA9PSAwKQorCXJldHVybiAoYSArIHRhYmxlW3N0YXJ0XS5vZmZzZXQpOworICAgIGVsc2UKKwlyZXR1cm4gYTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZm9sZGVkLWNhc2UgZXF1aXZhbGVudCBvZiAiYSIsIHdoaWNoIGlzIGEgVUNTLTQgY2hhcmFjdGVyLiAgVXNlcworICogc2ltcGxlIGNhc2UgZm9sZGluZy4KKyAqLworICAgIGludAordXRmX2ZvbGQoYSkKKyAgICBpbnQJCWE7Cit7CisgICAgcmV0dXJuIHV0Zl9jb252ZXJ0KGEsIGZvbGRDYXNlLCBzaXplb2YoZm9sZENhc2UpKTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdGFibGVzIGFyZSBidWlsdCBieSB1cHBlckxvd2VyRXh0cmFjdC5wbCA8IFVuaWNvZGVEYXRhLnR4dCAuCisgKiBUaGV5IG11c3QgYmUgaW4gbnVtZXJpYyBvcmRlciwgYmVjYXVzZSB3ZSB1c2UgYmluYXJ5IHNlYXJjaCBvbiB0aGVtLgorICogQW4gZW50cnkgc3VjaCBhcyB7MHg0MSwweDVhLDEsMzJ9IG1lYW5zIHRoYXQgVUNTLTQgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UKKyAqIGZyb20gMHg0MSB0byAweDVhIGluY2x1c2l2ZSwgc3RlcHBpbmcgYnkgMSwgYXJlIHN3aXRjaGVkIHRvIGxvd2VyIChmb3IKKyAqIGV4YW1wbGUpIGJ5IGFkZGluZyAzMi4KKyAqLworY29udmVydFN0cnVjdCB0b0xvd2VyW10gPQoreworCXsweDQxLDB4NWEsMSwzMn0sIHsweGMwLDB4ZDYsMSwzMn0sIHsweGQ4LDB4ZGUsMSwzMn0sCisJezB4MTAwLDB4MTJlLDIsMX0sIHsweDEzMCwweDEzMCwtMSwtMTk5fSwgezB4MTMyLDB4MTM2LDIsMX0sCisJezB4MTM5LDB4MTQ3LDIsMX0sIHsweDE0YSwweDE3NiwyLDF9LCB7MHgxNzgsMHgxNzgsLTEsLTEyMX0sCisJezB4MTc5LDB4MTdkLDIsMX0sIHsweDE4MSwweDE4MSwtMSwyMTB9LCB7MHgxODIsMHgxODQsMiwxfSwKKwl7MHgxODYsMHgxODYsLTEsMjA2fSwgezB4MTg3LDB4MTg3LC0xLDF9LCB7MHgxODksMHgxOGEsMSwyMDV9LAorCXsweDE4YiwweDE4YiwtMSwxfSwgezB4MThlLDB4MThlLC0xLDc5fSwgezB4MThmLDB4MThmLC0xLDIwMn0sCisJezB4MTkwLDB4MTkwLC0xLDIwM30sIHsweDE5MSwweDE5MSwtMSwxfSwgezB4MTkzLDB4MTkzLC0xLDIwNX0sCisJezB4MTk0LDB4MTk0LC0xLDIwN30sIHsweDE5NiwweDE5NiwtMSwyMTF9LCB7MHgxOTcsMHgxOTcsLTEsMjA5fSwKKwl7MHgxOTgsMHgxOTgsLTEsMX0sIHsweDE5YywweDE5YywtMSwyMTF9LCB7MHgxOWQsMHgxOWQsLTEsMjEzfSwKKwl7MHgxOWYsMHgxOWYsLTEsMjE0fSwgezB4MWEwLDB4MWE0LDIsMX0sIHsweDFhNiwweDFhNiwtMSwyMTh9LAorCXsweDFhNywweDFhNywtMSwxfSwgezB4MWE5LDB4MWE5LC0xLDIxOH0sIHsweDFhYywweDFhYywtMSwxfSwKKwl7MHgxYWUsMHgxYWUsLTEsMjE4fSwgezB4MWFmLDB4MWFmLC0xLDF9LCB7MHgxYjEsMHgxYjIsMSwyMTd9LAorCXsweDFiMywweDFiNSwyLDF9LCB7MHgxYjcsMHgxYjcsLTEsMjE5fSwgezB4MWI4LDB4MWJjLDQsMX0sCisJezB4MWM0LDB4MWNhLDMsMn0sIHsweDFjZCwweDFkYiwyLDF9LCB7MHgxZGUsMHgxZWUsMiwxfSwKKwl7MHgxZjEsMHgxZjEsLTEsMn0sIHsweDFmNCwweDFmNCwtMSwxfSwgezB4MWY2LDB4MWY2LC0xLC05N30sCisJezB4MWY3LDB4MWY3LC0xLC01Nn0sIHsweDFmOCwweDIxZSwyLDF9LCB7MHgyMjAsMHgyMjAsLTEsLTEzMH0sCisJezB4MjIyLDB4MjMyLDIsMX0sIHsweDM4NiwweDM4NiwtMSwzOH0sIHsweDM4OCwweDM4YSwxLDM3fSwKKwl7MHgzOGMsMHgzOGMsLTEsNjR9LCB7MHgzOGUsMHgzOGYsMSw2M30sIHsweDM5MSwweDNhMSwxLDMyfSwKKwl7MHgzYTMsMHgzYWIsMSwzMn0sIHsweDNkOCwweDNlZSwyLDF9LCB7MHgzZjQsMHgzZjQsLTEsLTYwfSwKKwl7MHgzZjcsMHgzZjcsLTEsMX0sIHsweDNmOSwweDNmOSwtMSwtN30sIHsweDNmYSwweDNmYSwtMSwxfSwKKwl7MHg0MDAsMHg0MGYsMSw4MH0sIHsweDQxMCwweDQyZiwxLDMyfSwgezB4NDYwLDB4NDgwLDIsMX0sCisJezB4NDhhLDB4NGJlLDIsMX0sIHsweDRjMSwweDRjZCwyLDF9LCB7MHg0ZDAsMHg0ZjQsMiwxfSwKKwl7MHg0ZjgsMHg1MDAsOCwxfSwgezB4NTAyLDB4NTBlLDIsMX0sIHsweDUzMSwweDU1NiwxLDQ4fSwKKwl7MHgxZTAwLDB4MWU5NCwyLDF9LCB7MHgxZWEwLDB4MWVmOCwyLDF9LCB7MHgxZjA4LDB4MWYwZiwxLC04fSwKKwl7MHgxZjE4LDB4MWYxZCwxLC04fSwgezB4MWYyOCwweDFmMmYsMSwtOH0sIHsweDFmMzgsMHgxZjNmLDEsLTh9LAorCXsweDFmNDgsMHgxZjRkLDEsLTh9LCB7MHgxZjU5LDB4MWY1ZiwyLC04fSwgezB4MWY2OCwweDFmNmYsMSwtOH0sCisJezB4MWZiOCwweDFmYjksMSwtOH0sIHsweDFmYmEsMHgxZmJiLDEsLTc0fSwgezB4MWZjOCwweDFmY2IsMSwtODZ9LAorCXsweDFmZDgsMHgxZmQ5LDEsLTh9LCB7MHgxZmRhLDB4MWZkYiwxLC0xMDB9LCB7MHgxZmU4LDB4MWZlOSwxLC04fSwKKwl7MHgxZmVhLDB4MWZlYiwxLC0xMTJ9LCB7MHgxZmVjLDB4MWZlYywtMSwtN30sIHsweDFmZjgsMHgxZmY5LDEsLTEyOH0sCisJezB4MWZmYSwweDFmZmIsMSwtMTI2fSwgezB4MjEyNiwweDIxMjYsLTEsLTc1MTd9LCB7MHgyMTJhLDB4MjEyYSwtMSwtODM4M30sCisJezB4MjEyYiwweDIxMmIsLTEsLTgyNjJ9LCB7MHhmZjIxLDB4ZmYzYSwxLDMyfSwgezB4MTA0MDAsMHgxMDQyNywxLDQwfQorfTsKKworY29udmVydFN0cnVjdCB0b1VwcGVyW10gPQoreworCXsweDYxLDB4N2EsMSwtMzJ9LCB7MHhiNSwweGI1LC0xLDc0M30sIHsweGUwLDB4ZjYsMSwtMzJ9LAorCXsweGY4LDB4ZmUsMSwtMzJ9LCB7MHhmZiwweGZmLC0xLDEyMX0sIHsweDEwMSwweDEyZiwyLC0xfSwKKwl7MHgxMzEsMHgxMzEsLTEsLTIzMn0sIHsweDEzMywweDEzNywyLC0xfSwgezB4MTNhLDB4MTQ4LDIsLTF9LAorCXsweDE0YiwweDE3NywyLC0xfSwgezB4MTdhLDB4MTdlLDIsLTF9LCB7MHgxN2YsMHgxN2YsLTEsLTMwMH0sCisJezB4MTgzLDB4MTg1LDIsLTF9LCB7MHgxODgsMHgxOGMsNCwtMX0sIHsweDE5MiwweDE5MiwtMSwtMX0sCisJezB4MTk1LDB4MTk1LC0xLDk3fSwgezB4MTk5LDB4MTk5LC0xLC0xfSwgezB4MTllLDB4MTllLC0xLDEzMH0sCisJezB4MWExLDB4MWE1LDIsLTF9LCB7MHgxYTgsMHgxYWQsNSwtMX0sIHsweDFiMCwweDFiNCw0LC0xfSwKKwl7MHgxYjYsMHgxYjksMywtMX0sIHsweDFiZCwweDFiZCwtMSwtMX0sIHsweDFiZiwweDFiZiwtMSw1Nn0sCisJezB4MWM1LDB4MWM2LDEsLTF9LCB7MHgxYzgsMHgxYzksMSwtMX0sIHsweDFjYiwweDFjYywxLC0xfSwKKwl7MHgxY2UsMHgxZGMsMiwtMX0sIHsweDFkZCwweDFkZCwtMSwtNzl9LCB7MHgxZGYsMHgxZWYsMiwtMX0sCisJezB4MWYyLDB4MWYzLDEsLTF9LCB7MHgxZjUsMHgxZjksNCwtMX0sIHsweDFmYiwweDIxZiwyLC0xfSwKKwl7MHgyMjMsMHgyMzMsMiwtMX0sIHsweDI1MywweDI1MywtMSwtMjEwfSwgezB4MjU0LDB4MjU0LC0xLC0yMDZ9LAorCXsweDI1NiwweDI1NywxLC0yMDV9LCB7MHgyNTksMHgyNTksLTEsLTIwMn0sIHsweDI1YiwweDI1YiwtMSwtMjAzfSwKKwl7MHgyNjAsMHgyNjAsLTEsLTIwNX0sIHsweDI2MywweDI2MywtMSwtMjA3fSwgezB4MjY4LDB4MjY4LC0xLC0yMDl9LAorCXsweDI2OSwweDI2Ziw2LC0yMTF9LCB7MHgyNzIsMHgyNzIsLTEsLTIxM30sIHsweDI3NSwweDI3NSwtMSwtMjE0fSwKKwl7MHgyODAsMHgyODMsMywtMjE4fSwgezB4Mjg4LDB4Mjg4LC0xLC0yMTh9LCB7MHgyOGEsMHgyOGIsMSwtMjE3fSwKKwl7MHgyOTIsMHgyOTIsLTEsLTIxOX0sIHsweDNhYywweDNhYywtMSwtMzh9LCB7MHgzYWQsMHgzYWYsMSwtMzd9LAorCXsweDNiMSwweDNjMSwxLC0zMn0sIHsweDNjMiwweDNjMiwtMSwtMzF9LCB7MHgzYzMsMHgzY2IsMSwtMzJ9LAorCXsweDNjYywweDNjYywtMSwtNjR9LCB7MHgzY2QsMHgzY2UsMSwtNjN9LCB7MHgzZDAsMHgzZDAsLTEsLTYyfSwKKwl7MHgzZDEsMHgzZDEsLTEsLTU3fSwgezB4M2Q1LDB4M2Q1LC0xLC00N30sIHsweDNkNiwweDNkNiwtMSwtNTR9LAorCXsweDNkOSwweDNlZiwyLC0xfSwgezB4M2YwLDB4M2YwLC0xLC04Nn0sIHsweDNmMSwweDNmMSwtMSwtODB9LAorCXsweDNmMiwweDNmMiwtMSw3fSwgezB4M2Y1LDB4M2Y1LC0xLC05Nn0sIHsweDNmOCwweDNmYiwzLC0xfSwKKwl7MHg0MzAsMHg0NGYsMSwtMzJ9LCB7MHg0NTAsMHg0NWYsMSwtODB9LCB7MHg0NjEsMHg0ODEsMiwtMX0sCisJezB4NDhiLDB4NGJmLDIsLTF9LCB7MHg0YzIsMHg0Y2UsMiwtMX0sIHsweDRkMSwweDRmNSwyLC0xfSwKKwl7MHg0ZjksMHg1MDEsOCwtMX0sIHsweDUwMywweDUwZiwyLC0xfSwgezB4NTYxLDB4NTg2LDEsLTQ4fSwKKwl7MHgxZTAxLDB4MWU5NSwyLC0xfSwgezB4MWU5YiwweDFlOWIsLTEsLTU5fSwgezB4MWVhMSwweDFlZjksMiwtMX0sCisJezB4MWYwMCwweDFmMDcsMSw4fSwgezB4MWYxMCwweDFmMTUsMSw4fSwgezB4MWYyMCwweDFmMjcsMSw4fSwKKwl7MHgxZjMwLDB4MWYzNywxLDh9LCB7MHgxZjQwLDB4MWY0NSwxLDh9LCB7MHgxZjUxLDB4MWY1NywyLDh9LAorCXsweDFmNjAsMHgxZjY3LDEsOH0sIHsweDFmNzAsMHgxZjcxLDEsNzR9LCB7MHgxZjcyLDB4MWY3NSwxLDg2fSwKKwl7MHgxZjc2LDB4MWY3NywxLDEwMH0sIHsweDFmNzgsMHgxZjc5LDEsMTI4fSwgezB4MWY3YSwweDFmN2IsMSwxMTJ9LAorCXsweDFmN2MsMHgxZjdkLDEsMTI2fSwgezB4MWY4MCwweDFmODcsMSw4fSwgezB4MWY5MCwweDFmOTcsMSw4fSwKKwl7MHgxZmEwLDB4MWZhNywxLDh9LCB7MHgxZmIwLDB4MWZiMSwxLDh9LCB7MHgxZmIzLDB4MWZiMywtMSw5fSwKKwl7MHgxZmJlLDB4MWZiZSwtMSwtNzIwNX0sIHsweDFmYzMsMHgxZmMzLC0xLDl9LCB7MHgxZmQwLDB4MWZkMSwxLDh9LAorCXsweDFmZTAsMHgxZmUxLDEsOH0sIHsweDFmZTUsMHgxZmU1LC0xLDd9LCB7MHgxZmYzLDB4MWZmMywtMSw5fSwKKwl7MHhmZjQxLDB4ZmY1YSwxLC0zMn0sIHsweDEwNDI4LDB4MTA0NGYsMSwtNDB9Cit9OworCisvKgorICogUmV0dXJuIHRoZSB1cHBlci1jYXNlIGVxdWl2YWxlbnQgb2YgImEiLCB3aGljaCBpcyBhIFVDUy00IGNoYXJhY3Rlci4gIFVzZQorICogc2ltcGxlIGNhc2UgZm9sZGluZy4KKyAqLworICAgIGludAordXRmX3RvdXBwZXIoYSkKKyAgICBpbnQJCWE7Cit7CisgICAgLyogSWYgJ2Nhc2VtYXAnIGNvbnRhaW5zICJrZWVwYXNjaWkiIHVzZSBBU0NJSSBzdHlsZSB0b3VwcGVyKCkuICovCisgICAgaWYgKGEgPCAxMjggJiYgKGNtcF9mbGFncyAmIENNUF9LRUVQQVNDSUkpKQorCXJldHVybiBUT1VQUEVSX0FTQyhhKTsKKworI2lmIGRlZmluZWQoSEFWRV9UT1dVUFBFUikgJiYgZGVmaW5lZChfX1NURENfX0lTT18xMDY0Nl9fKQorICAgIC8qIElmIHRvd3VwcGVyKCkgaXMgYXZhaWxibGUgYW5kIGhhbmRsZXMgVW5pY29kZSwgdXNlIGl0LiAqLworICAgIGlmICghKGNtcF9mbGFncyAmIENNUF9JTlRFUk5BTCkpCisJcmV0dXJuIHRvd3VwcGVyKGEpOworI2VuZGlmCisKKyAgICAvKiBGb3IgY2hhcmFjdGVycyBiZWxvdyAxMjggdXNlIGxvY2FsZSBzZW5zaXRpdmUgdG91cHBlcigpLiAqLworICAgIGlmIChhIDwgMTI4KQorCXJldHVybiBUT1VQUEVSX0xPQyhhKTsKKworICAgIC8qIEZvciBhbnkgb3RoZXIgY2hhcmFjdGVycyB1c2UgdGhlIGFib3ZlIG1hcHBpbmcgdGFibGUuICovCisgICAgcmV0dXJuIHV0Zl9jb252ZXJ0KGEsIHRvVXBwZXIsIHNpemVvZih0b1VwcGVyKSk7Cit9CisKKyAgICBpbnQKK3V0Zl9pc2xvd2VyKGEpCisgICAgaW50CQlhOworeworICAgIHJldHVybiAodXRmX3RvdXBwZXIoYSkgIT0gYSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGxvd2VyLWNhc2UgZXF1aXZhbGVudCBvZiAiYSIsIHdoaWNoIGlzIGEgVUNTLTQgY2hhcmFjdGVyLiAgVXNlCisgKiBzaW1wbGUgY2FzZSBmb2xkaW5nLgorICovCisgICAgaW50Cit1dGZfdG9sb3dlcihhKQorICAgIGludAkJYTsKK3sKKyAgICAvKiBJZiAnY2FzZW1hcCcgY29udGFpbnMgImtlZXBhc2NpaSIgdXNlIEFTQ0lJIHN0eWxlIHRvbG93ZXIoKS4gKi8KKyAgICBpZiAoYSA8IDEyOCAmJiAoY21wX2ZsYWdzICYgQ01QX0tFRVBBU0NJSSkpCisJcmV0dXJuIFRPTE9XRVJfQVNDKGEpOworCisjaWYgZGVmaW5lZChIQVZFX1RPV0xPV0VSKSAmJiBkZWZpbmVkKF9fU1REQ19fSVNPXzEwNjQ2X18pCisgICAgLyogSWYgdG93bG93ZXIoKSBpcyBhdmFpbGJsZSBhbmQgaGFuZGxlcyBVbmljb2RlLCB1c2UgaXQuICovCisgICAgaWYgKCEoY21wX2ZsYWdzICYgQ01QX0lOVEVSTkFMKSkKKwlyZXR1cm4gdG93bG93ZXIoYSk7CisjZW5kaWYKKworICAgIC8qIEZvciBjaGFyYWN0ZXJzIGJlbG93IDEyOCB1c2UgbG9jYWxlIHNlbnNpdGl2ZSB0b2xvd2VyKCkuICovCisgICAgaWYgKGEgPCAxMjgpCisJcmV0dXJuIFRPTE9XRVJfTE9DKGEpOworCisgICAgLyogRm9yIGFueSBvdGhlciBjaGFyYWN0ZXJzIHVzZSB0aGUgYWJvdmUgbWFwcGluZyB0YWJsZS4gKi8KKyAgICByZXR1cm4gdXRmX2NvbnZlcnQoYSwgdG9Mb3dlciwgc2l6ZW9mKHRvTG93ZXIpKTsKK30KKworICAgIGludAordXRmX2lzdXBwZXIoYSkKKyAgICBpbnQJCWE7Cit7CisgICAgcmV0dXJuICh1dGZfdG9sb3dlcihhKSAhPSBhKTsKK30KKworLyoKKyAqIFZlcnNpb24gb2Ygc3RybmljbXAoKSB0aGF0IGhhbmRsZXMgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorICogTmVlZGVkIGZvciBCaWc1LCBTamlmdC1KSVMgYW5kIFVURi04IGVuY29kaW5nLiAgT3RoZXIgREJDUyBlbmNvZGluZ3MgY2FuCisgKiBwcm9iYWJseSB1c2Ugc3RybmljbXAoKSwgYmVjYXVzZSB0aGVyZSBhcmUgbm8gQVNDSUkgY2hhcmFjdGVycyBpbiB0aGUKKyAqIHNlY29uZCBieXRlLgorICogUmV0dXJucyB6ZXJvIGlmIHMxIGFuZCBzMiBhcmUgZXF1YWwgKGlnbm9yaW5nIGNhc2UpLCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCisgKiB0d28gY2hhcmFjdGVycyBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK21iX3N0cm5pY21wKHMxLCBzMiwgbikKKyAgICBjaGFyX3UJKnMxLCAqczI7CisgICAgaW50CQluOworeworICAgIGludAkJaSwgaiwgbDsKKyAgICBpbnQJCWNkaWZmOworCisgICAgZm9yIChpID0gMDsgaSA8IG47IGkgKz0gbCkKKyAgICB7CisJaWYgKHMxW2ldID09IE5VTCAmJiBzMltpXSA9PSBOVUwpICAgLyogYm90aCBzdHJpbmdzIGVuZCAqLworCSAgICByZXR1cm4gMDsKKwlpZiAoZW5jX3V0ZjgpCisJeworCSAgICBsID0gdXRmX2J5dGUybGVuKHMxW2ldKTsKKwkgICAgaWYgKGwgPiBuIC0gaSkKKwkJbCA9IG4gLSBpOwkJICAgIC8qIGluY29tcGxldGUgY2hhcmFjdGVyICovCisJICAgIC8qIENoZWNrIGRpcmVjdGx5IGZpcnN0LCBpdCdzIGZhc3Rlci4gKi8KKwkgICAgZm9yIChqID0gMDsgaiA8IGw7ICsraikKKwkJaWYgKHMxW2kgKyBqXSAhPSBzMltpICsgal0pCisJCSAgICBicmVhazsKKwkgICAgaWYgKGogPCBsKQorCSAgICB7CisJCS8qIElmIG9uZSBvZiB0aGUgdHdvIGNoYXJhY3RlcnMgaXMgaW5jb21wbGV0ZSByZXR1cm4gLTEuICovCisJCWlmIChpICsgdXRmX2J5dGUybGVuKHMxW2ldKSA+IG4gfHwgaSArIHV0Zl9ieXRlMmxlbihzMltpXSkgPiBuKQorCQkgICAgcmV0dXJuIC0xOworCQljZGlmZiA9IHV0Zl9mb2xkKHV0Zl9wdHIyY2hhcihzMSArIGkpKQorCQkJCQkgICAgIC0gdXRmX2ZvbGQodXRmX3B0cjJjaGFyKHMyICsgaSkpOworCQlpZiAoY2RpZmYgIT0gMCkKKwkJICAgIHJldHVybiBjZGlmZjsKKwkgICAgfQorCX0KKwllbHNlCisJeworCSAgICBsID0gKCptYl9wdHIybGVuX2NoZWNrKShzMSArIGkpOworCSAgICBpZiAobCA8PSAxKQorCSAgICB7CisJCS8qIFNpbmdsZSBieXRlOiBmaXJzdCBjaGVjayBub3JtYWxseSwgdGhlbiB3aXRoIGlnbm9yZSBjYXNlLiAqLworCQlpZiAoczFbaV0gIT0gczJbaV0pCisJCXsKKwkJICAgIGNkaWZmID0gVE9MT1dFUl9MT0MoczFbaV0pIC0gVE9MT1dFUl9MT0MoczJbaV0pOworCQkgICAgaWYgKGNkaWZmICE9IDApCisJCQlyZXR1cm4gY2RpZmY7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogRm9yIG5vbi1Vbmljb2RlIG11bHRpLWJ5dGUgZG9uJ3QgaWdub3JlIGNhc2UuICovCisJCWlmIChsID4gbiAtIGkpCisJCSAgICBsID0gbiAtIGk7CisJCWNkaWZmID0gU1RSTkNNUChzMSArIGksIHMyICsgaSwgbCk7CisJCWlmIChjZGlmZiAhPSAwKQorCQkgICAgcmV0dXJuIGNkaWZmOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqICJnOCI6IHNob3cgYnl0ZXMgb2YgdGhlIFVURi04IGNoYXIgdW5kZXIgdGhlIGN1cnNvci4gIERvZXNuJ3QgbWF0dGVyIHdoYXQKKyAqICdlbmNvZGluZycgaGFzIGJlZW4gc2V0IHRvLgorICovCisgICAgdm9pZAorc2hvd191dGY4KCkKK3sKKyAgICBpbnQJCWxlbjsKKyAgICBjaGFyX3UJKmxpbmU7CisgICAgaW50CQljbGVuOworICAgIGludAkJaTsKKworICAgIC8qIEdldCB0aGUgYnl0ZSBsZW5ndGggb2YgdGhlIGNoYXIgdW5kZXIgdGhlIGN1cnNvciwgaW5jbHVkaW5nIGNvbXBvc2luZworICAgICAqIGNoYXJhY3RlcnMuICovCisgICAgbGluZSA9IG1sX2dldF9jdXJzb3IoKTsKKyAgICBsZW4gPSB1dGZjX3B0cjJsZW5fY2hlY2sobGluZSk7CisgICAgaWYgKGxlbiA9PSAwKQorICAgIHsKKwlNU0coIk5VTCIpOworCXJldHVybjsKKyAgICB9CisKKyAgICBJT2J1ZmZbMF0gPSBOVUw7CisgICAgY2xlbiA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQorICAgIHsKKwlpZiAoY2xlbiA9PSAwKQorCXsKKwkgICAgLyogc3RhcnQgb2YgKGNvbXBvc2luZykgY2hhcmFjdGVyLCBnZXQgaXRzIGxlbmd0aCAqLworCSAgICBpZiAoaSA+IDApCisJCVNUUkNBVChJT2J1ZmYsICIrICIpOworCSAgICBjbGVuID0gdXRmX3B0cjJsZW5fY2hlY2sobGluZSArIGkpOworCX0KKwlzcHJpbnRmKChjaGFyICopSU9idWZmICsgU1RSTEVOKElPYnVmZiksICIlMDJ4ICIsIGxpbmVbaV0pOworCS0tY2xlbjsKKyAgICB9CisKKyAgICBtc2coSU9idWZmKTsKK30KKworLyoKKyAqIG1iX2hlYWRfb2ZmKCkgZnVuY3Rpb24gcG9pbnRlci4KKyAqIFJldHVybiBvZmZzZXQgZnJvbSAicCIgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGNoYXJhY3RlciBpdCBwb2ludHMgaW50by4KKyAqIFJldHVybnMgMCB3aGVuIGFscmVhZHkgYXQgdGhlIGZpcnN0IGJ5dGUgb2YgYSBjaGFyYWN0ZXIuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIGludAorbGF0aW5faGVhZF9vZmYoYmFzZSwgcCkKKyAgICBjaGFyX3UJKmJhc2U7CisgICAgY2hhcl91CSpwOworeworICAgIHJldHVybiAwOworfQorCisgICAgaW50CitkYmNzX2hlYWRfb2ZmKGJhc2UsIHApCisgICAgY2hhcl91CSpiYXNlOworICAgIGNoYXJfdQkqcDsKK3sKKyAgICBjaGFyX3UJKnE7CisKKyAgICAvKiBJdCBjYW4ndCBiZSBhIHRyYWlsaW5nIGJ5dGUgd2hlbiBub3QgdXNpbmcgREJDUywgYXQgdGhlIHN0YXJ0IG9mIHRoZQorICAgICAqIHN0cmluZyBvciB0aGUgcHJldmlvdXMgYnl0ZSBjYW4ndCBzdGFydCBhIGRvdWJsZS1ieXRlLiAqLworICAgIGlmIChwIDw9IGJhc2UgfHwgTUJfQllURTJMRU4ocFstMV0pID09IDEpCisJcmV0dXJuIDA7CisKKyAgICAvKiBUaGlzIGlzIHNsb3c6IG5lZWQgdG8gc3RhcnQgYXQgdGhlIGJhc2UgYW5kIGdvIGZvcndhcmQgdW50aWwgdGhlCisgICAgICogYnl0ZSB3ZSBhcmUgbG9va2luZyBmb3IuICBSZXR1cm4gMSB3aGVuIHdlIHdlbnQgcGFzdCBpdCwgMCBvdGhlcndpc2UuICovCisgICAgcSA9IGJhc2U7CisgICAgd2hpbGUgKHEgPCBwKQorCXEgKz0gZGJjc19wdHIybGVuX2NoZWNrKHEpOworICAgIHJldHVybiAocSA9PSBwKSA/IDAgOiAxOworfQorCisjaWYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkgfHwgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChGRUFUX1JJR0hUTEVGVCkgXAorCXx8IGRlZmluZWQoUFJPVE8pCisvKgorICogU3BlY2lhbCB2ZXJzaW9uIG9mIGRiY3NfaGVhZF9vZmYoKSB0aGF0IHdvcmtzIGZvciBTY3JlZW5MaW5lc1tdLCB3aGVyZQorICogc2luZ2xlLXdpZHRoIERCQ1NfSlBOVSBjaGFyYWN0ZXJzIGFyZSBzdG9yZWQgc2VwYXJhdGVseS4KKyAqLworICAgIGludAorZGJjc19zY3JlZW5faGVhZF9vZmYoYmFzZSwgcCkKKyAgICBjaGFyX3UJKmJhc2U7CisgICAgY2hhcl91CSpwOworeworICAgIGNoYXJfdQkqcTsKKworICAgIC8qIEl0IGNhbid0IGJlIGEgdHJhaWxpbmcgYnl0ZSB3aGVuIG5vdCB1c2luZyBEQkNTLCBhdCB0aGUgc3RhcnQgb2YgdGhlCisgICAgICogc3RyaW5nIG9yIHRoZSBwcmV2aW91cyBieXRlIGNhbid0IHN0YXJ0IGEgZG91YmxlLWJ5dGUuCisgICAgICogRm9yIGV1Yy1qcCBhbiAweDhlIGJ5dGUgaW4gdGhlIHByZXZpb3VzIGNlbGwgYWx3YXlzIG1lYW5zIHdlIGhhdmUgYQorICAgICAqIGxlYWQgYnl0ZSBpbiB0aGUgY3VycmVudCBjZWxsLiAqLworICAgIGlmIChwIDw9IGJhc2UKKwkgICAgfHwgKGVuY19kYmNzID09IERCQ1NfSlBOVSAmJiBwWy0xXSA9PSAweDhlKQorCSAgICB8fCBNQl9CWVRFMkxFTihwWy0xXSkgPT0gMSkKKwlyZXR1cm4gMDsKKworICAgIC8qIFRoaXMgaXMgc2xvdzogbmVlZCB0byBzdGFydCBhdCB0aGUgYmFzZSBhbmQgZ28gZm9yd2FyZCB1bnRpbCB0aGUKKyAgICAgKiBieXRlIHdlIGFyZSBsb29raW5nIGZvci4gIFJldHVybiAxIHdoZW4gd2Ugd2VudCBwYXN0IGl0LCAwIG90aGVyd2lzZS4KKyAgICAgKiBGb3IgREJDU19KUE5VIGxvb2sgb3V0IGZvciAweDhlLCB3aGljaCBtZWFucyB0aGUgc2Vjb25kIGJ5dGUgaXMgbm90CisgICAgICogc3RvcmVkIGFzIHRoZSBuZXh0IGJ5dGUuICovCisgICAgcSA9IGJhc2U7CisgICAgd2hpbGUgKHEgPCBwKQorICAgIHsKKwlpZiAoZW5jX2RiY3MgPT0gREJDU19KUE5VICYmICpxID09IDB4OGUpCisJICAgICsrcTsKKwllbHNlCisJICAgIHEgKz0gZGJjc19wdHIybGVuX2NoZWNrKHEpOworICAgIH0KKyAgICByZXR1cm4gKHEgPT0gcCkgPyAwIDogMTsKK30KKyNlbmRpZgorCisgICAgaW50Cit1dGZfaGVhZF9vZmYoYmFzZSwgcCkKKyAgICBjaGFyX3UJKmJhc2U7CisgICAgY2hhcl91CSpwOworeworICAgIGNoYXJfdQkqcTsKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQljOworI2lmZGVmIEZFQVRfQVJBQklDCisgICAgY2hhcl91CSpqOworI2VuZGlmCisKKyAgICBpZiAoKnAgPCAweDgwKQkJLyogYmUgcXVpY2sgZm9yIEFTQ0lJICovCisJcmV0dXJuIDA7CisKKyAgICAvKiBTa2lwIGJhY2t3YXJkcyBvdmVyIHRyYWlsaW5nIGJ5dGVzOiAxMHh4Lnh4eHgKKyAgICAgKiBTa2lwIGJhY2t3YXJkcyBhZ2FpbiBpZiBvbiBhIGNvbXBvc2luZyBjaGFyLiAqLworICAgIGZvciAocSA9IHA7IDsgLS1xKQorICAgIHsKKwkvKiBNb3ZlIHMgdG8gdGhlIGxhc3QgYnl0ZSBvZiB0aGlzIGNoYXIuICovCisJZm9yIChzID0gcTsgKHNbMV0gJiAweGMwKSA9PSAweDgwOyArK3MpCisJICAgIDsKKwkvKiBNb3ZlIHEgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhpcyBjaGFyLiAqLworCXdoaWxlIChxID4gYmFzZSAmJiAoKnEgJiAweGMwKSA9PSAweDgwKQorCSAgICAtLXE7CisJLyogQ2hlY2sgZm9yIGlsbGVnYWwgc2VxdWVuY2UuIERvIGFsbG93IGFuIGlsbGVnYWwgYnl0ZSBhZnRlciB3aGVyZSB3ZQorCSAqIHN0YXJ0ZWQuICovCisJaWYgKHV0ZjhsZW5fdGFiWypxXSAhPSAoaW50KShzIC0gcSArIDEpCisJCQkJICAgICAgICYmIHV0ZjhsZW5fdGFiWypxXSAhPSAoaW50KShwIC0gcSArIDEpKQorCSAgICByZXR1cm4gMDsKKworCWlmIChxIDw9IGJhc2UpCisJICAgIGJyZWFrOworCisJYyA9IHV0Zl9wdHIyY2hhcihxKTsKKwlpZiAodXRmX2lzY29tcG9zaW5nKGMpKQorCSAgICBjb250aW51ZTsKKworI2lmZGVmIEZFQVRfQVJBQklDCisJaWYgKGFyYWJpY19tYXljb21iaW5lKGMpKQorCXsKKwkgICAgLyogQWR2YW5jZSB0byBnZXQgYSBzbmVhay1wZWFrIGF0IHRoZSBuZXh0IGNoYXIgKi8KKwkgICAgaiA9IHE7CisJICAgIC0tajsKKwkgICAgLyogTW92ZSBqIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoaXMgY2hhci4gKi8KKwkgICAgd2hpbGUgKGogPiBiYXNlICYmICgqaiAmIDB4YzApID09IDB4ODApCisJCS0tajsKKwkgICAgaWYgKGFyYWJpY19jb21iaW5lKHV0Zl9wdHIyY2hhcihqKSwgYykpCisJCWNvbnRpbnVlOworCX0KKyNlbmRpZgorCWJyZWFrOworICAgIH0KKworICAgIHJldHVybiAoaW50KShwIC0gcSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG9mZnNldCBmcm9tICJwIiB0byB0aGUgZmlyc3QgYnl0ZSBvZiBhIGNoYXJhY3Rlci4gIFdoZW4gInAiIGlzCisgKiBhdCB0aGUgc3RhcnQgb2YgYSBjaGFyYWN0ZXIgMCBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIHRoZSBvZmZzZXQgdG8gdGhlIG5leHQKKyAqIGNoYXJhY3Rlci4gIENhbiBzdGFydCBhbnl3aGVyZSBpbiBhIHN0cmVhbSBvZiBieXRlcy4KKyAqLworICAgIGludAorbWJfb2ZmX25leHQoYmFzZSwgcCkKKyAgICBjaGFyX3UJKmJhc2U7CisgICAgY2hhcl91CSpwOworeworICAgIGludAkJaTsKKyAgICBpbnQJCWo7CisKKyAgICBpZiAoZW5jX3V0ZjgpCisgICAgeworCWlmICgqcCA8IDB4ODApCQkvKiBiZSBxdWljayBmb3IgQVNDSUkgKi8KKwkgICAgcmV0dXJuIDA7CisKKwkvKiBGaW5kIHRoZSBuZXh0IGNoYXJhY3RlciB0aGF0IGlzbid0IDEweHgueHh4eCAqLworCWZvciAoaSA9IDA7IChwW2ldICYgMHhjMCkgPT0gMHg4MDsgKytpKQorCSAgICA7CisJaWYgKGkgPiAwKQorCXsKKwkgICAgLyogQ2hlY2sgZm9yIGlsbGVnYWwgc2VxdWVuY2UuICovCisJICAgIGZvciAoaiA9IDA7IHAgLSBqID4gYmFzZTsgKytqKQorCQlpZiAoKHBbLWpdICYgMHhjMCkgIT0gMHg4MCkKKwkJICAgIGJyZWFrOworCSAgICBpZiAodXRmOGxlbl90YWJbcFstal1dICE9IGkgKyBqKQorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGk7CisgICAgfQorCisgICAgLyogT25seSBuZWVkIHRvIGNoZWNrIGlmIHdlJ3JlIG9uIGEgdHJhaWwgYnl0ZSwgaXQgZG9lc24ndCBtYXR0ZXIgaWYgd2UKKyAgICAgKiB3YW50IHRoZSBvZmZzZXQgdG8gdGhlIG5leHQgb3IgY3VycmVudCBjaGFyYWN0ZXIuICovCisgICAgcmV0dXJuICgqbWJfaGVhZF9vZmYpKGJhc2UsIHApOworfQorCisvKgorICogUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSAicCIgdG8gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgY2hhcmFjdGVyIGl0IHBvaW50cworICogaW50by4gIENhbiBzdGFydCBhbnl3aGVyZSBpbiBhIHN0cmVhbSBvZiBieXRlcy4KKyAqLworICAgIGludAorbWJfdGFpbF9vZmYoYmFzZSwgcCkKKyAgICBjaGFyX3UJKmJhc2U7CisgICAgY2hhcl91CSpwOworeworICAgIGludAkJaTsKKyAgICBpbnQJCWo7CisKKyAgICBpZiAoKnAgPT0gTlVMKQorCXJldHVybiAwOworCisgICAgaWYgKGVuY191dGY4KQorICAgIHsKKwkvKiBGaW5kIHRoZSBsYXN0IGNoYXJhY3RlciB0aGF0IGlzIDEweHgueHh4eCAqLworCWZvciAoaSA9IDA7IChwW2kgKyAxXSAmIDB4YzApID09IDB4ODA7ICsraSkKKwkgICAgOworCS8qIENoZWNrIGZvciBpbGxlZ2FsIHNlcXVlbmNlLiAqLworCWZvciAoaiA9IDA7IHAgLSBqID4gYmFzZTsgKytqKQorCSAgICBpZiAoKHBbLWpdICYgMHhjMCkgIT0gMHg4MCkKKwkJYnJlYWs7CisJaWYgKHV0ZjhsZW5fdGFiW3BbLWpdXSAhPSBpICsgaiArIDEpCisJICAgIHJldHVybiAwOworCXJldHVybiBpOworICAgIH0KKworICAgIC8qIEl0IGNhbid0IGJlIHRoZSBmaXJzdCBieXRlIGlmIGEgZG91YmxlLWJ5dGUgd2hlbiBub3QgdXNpbmcgREJDUywgYXQgdGhlCisgICAgICogZW5kIG9mIHRoZSBzdHJpbmcgb3IgdGhlIGJ5dGUgY2FuJ3Qgc3RhcnQgYSBkb3VibGUtYnl0ZS4gKi8KKyAgICBpZiAoZW5jX2RiY3MgPT0gMCB8fCBwWzFdID09IE5VTCB8fCBNQl9CWVRFMkxFTigqcCkgPT0gMSkKKwlyZXR1cm4gMDsKKworICAgIC8qIFJldHVybiAxIHdoZW4gb24gdGhlIGxlYWQgYnl0ZSwgMCB3aGVuIG9uIHRoZSB0YWlsIGJ5dGUuICovCisgICAgcmV0dXJuIDEgLSBkYmNzX2hlYWRfb2ZmKGJhc2UsIHApOworfQorCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBTcGVjaWFsIHZlcnNpb24gb2YgbWJfdGFpbF9vZmYoKSBmb3IgdXNlIGluIFNjcmVlbkxpbmVzW10uCisgKi8KKyAgICBpbnQKK2RiY3Nfc2NyZWVuX3RhaWxfb2ZmKGJhc2UsIHApCisgICAgY2hhcl91CSpiYXNlOworICAgIGNoYXJfdQkqcDsKK3sKKyAgICAvKiBJdCBjYW4ndCBiZSB0aGUgZmlyc3QgYnl0ZSBpZiBhIGRvdWJsZS1ieXRlIHdoZW4gbm90IHVzaW5nIERCQ1MsIGF0IHRoZQorICAgICAqIGVuZCBvZiB0aGUgc3RyaW5nIG9yIHRoZSBieXRlIGNhbid0IHN0YXJ0IGEgZG91YmxlLWJ5dGUuCisgICAgICogRm9yIGV1Yy1qcCBhbiAweDhlIGJ5dGUgYWx3YXlzIG1lYW5zIHdlIGhhdmUgYSBsZWFkIGJ5dGUgaW4gdGhlIGN1cnJlbnQKKyAgICAgKiBjZWxsLiAqLworICAgIGlmICgqcCA9PSBOVUwgfHwgcFsxXSA9PSBOVUwKKwkgICAgfHwgKGVuY19kYmNzID09IERCQ1NfSlBOVSAmJiAqcCA9PSAweDhlKQorCSAgICB8fCBNQl9CWVRFMkxFTigqcCkgPT0gMSkKKwlyZXR1cm4gMDsKKworICAgIC8qIFJldHVybiAxIHdoZW4gb24gdGhlIGxlYWQgYnl0ZSwgMCB3aGVuIG9uIHRoZSB0YWlsIGJ5dGUuICovCisgICAgcmV0dXJuIDEgLSBkYmNzX3NjcmVlbl9oZWFkX29mZihiYXNlLCBwKTsKK30KKyNlbmRpZgorCisvKgorICogSWYgdGhlIGN1cnNvciBtb3ZlcyBvbiBhbiB0cmFpbCBieXRlLCBzZXQgdGhlIGN1cnNvciBvbiB0aGUgbGVhZCBieXRlLgorICogVGh1cyBpdCBtb3ZlcyBsZWZ0IGlmIG5lY2Vzc2FyeS4KKyAqIFJldHVybiBUUlVFIHdoZW4gdGhlIGN1cnNvciB3YXMgYWRqdXN0ZWQuCisgKi8KKyAgICB2b2lkCittYl9hZGp1c3RfY3Vyc29yKCkKK3sKKyAgICBtYl9hZGp1c3Rwb3MoJmN1cndpbi0+d19jdXJzb3IpOworfQorCisvKgorICogQWRqdXN0IHBvc2l0aW9uICIqbHAiIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBieXRlIG9mIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuCisgKiBJZiBpdCBwb2ludHMgdG8gYSB0YWlsIGJ5dGUgaXQncyBtb3ZlZCBiYWNrd2FyZHMgdG8gdGhlIGhlYWQgYnl0ZS4KKyAqLworICAgIHZvaWQKK21iX2FkanVzdHBvcyhscCkKKyAgICBwb3NfVAkqbHA7Cit7CisgICAgY2hhcl91CSpwOworCisgICAgaWYgKGxwLT5jb2wgPiAwCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCSAgICB8fCBscC0+Y29sYWRkID4gMQorI2VuZGlmCisJICAgICkKKyAgICB7CisJcCA9IG1sX2dldChscC0+bG51bSk7CisJbHAtPmNvbCAtPSAoKm1iX2hlYWRfb2ZmKShwLCBwICsgbHAtPmNvbCk7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCS8qIFJlc2V0ICJjb2xhZGQiIHdoZW4gdGhlIGN1cnNvciB3b3VsZCBiZSBvbiB0aGUgcmlnaHQgaGFsZiBvZiBhCisJICogZG91YmxlLXdpZGUgY2hhcmFjdGVyLiAqLworCWlmIChscC0+Y29sYWRkID09IDEKKwkJJiYgcFtscC0+Y29sXSAhPSBUQUIKKwkJJiYgdmltX2lzcHJpbnRjKCgqbWJfcHRyMmNoYXIpKHAgKyBscC0+Y29sKSkKKwkJJiYgcHRyMmNlbGxzKHAgKyBscC0+Y29sKSA+IDEpCisJICAgIGxwLT5jb2xhZGQgPSAwOworI2VuZGlmCisgICAgfQorfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGJlZm9yZSAiKnAiLCBpZiB0aGVyZSBpcyBvbmUuCisgKi8KKyAgICBjaGFyX3UgKgorbWJfcHJldnB0cihsaW5lLCBwKQorICAgIGNoYXJfdSAqbGluZTsJLyogc3RhcnQgb2YgdGhlIHN0cmluZyAqLworICAgIGNoYXJfdSAqcDsKK3sKKyAgICBpZiAocCA+IGxpbmUpCisJcCA9IHAgLSAoKm1iX2hlYWRfb2ZmKShsaW5lLCBwIC0gMSkgLSAxOworICAgIHJldHVybiBwOworfQorCisvKgorICogUmV0dXJuIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mICJzdHIiLiAgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGNvdW50cyBhcyBvbmUuCisgKi8KKyAgICBpbnQKK21iX2NoYXJsZW4oc3RyKQorICAgIGNoYXJfdQkqc3RyOworeworICAgIGludCBjb3VudDsKKworICAgIGlmIChzdHIgPT0gTlVMTCkKKwlyZXR1cm4gMDsKKworICAgIGZvciAoY291bnQgPSAwOyAqc3RyICE9IE5VTDsgY291bnQrKykKKwlzdHIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzdHIpOworCisgICAgcmV0dXJuIGNvdW50OworfQorCisvKgorICogVHJ5IHRvIHVuLWVzY2FwZSBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLgorICogVXNlZCBmb3IgdGhlICJ0byIgYW5kICJmcm9tIiBwYXJ0IG9mIGEgbWFwcGluZy4KKyAqIFJldHVybiB0aGUgdW4tZXNjYXBlZCBzdHJpbmcgaWYgaXQgaXMgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciwgYW5kIGFkdmFuY2UKKyAqICJwcCIgdG8ganVzdCBhZnRlciB0aGUgYnl0ZXMgdGhhdCBmb3JtZWQgaXQuCisgKiBSZXR1cm4gTlVMTCBpZiBubyBtdWx0aS1ieXRlIGNoYXIgd2FzIGZvdW5kLgorICovCisgICAgY2hhcl91ICoKK21iX3VuZXNjYXBlKHBwKQorICAgIGNoYXJfdSAqKnBwOworeworICAgIHN0YXRpYyBjaGFyX3UJYnVmW01CX01BWEJZVEVTICsgMV07CisgICAgaW50CQkJbiwgbSA9IDA7CisgICAgY2hhcl91CQkqc3RyID0gKnBwOworCisgICAgLyogTXVzdCB0cmFuc2xhdGUgS19TUEVDSUFMIEtTX1NQRUNJQUwgS0VfRklMTEVSIHRvIEtfU1BFQ0lBTCBhbmQgQ1NJCisgICAgICogS1NfRVhUUkEgS0VfQ1NJIHRvIENTSS4gKi8KKyAgICBmb3IgKG4gPSAwOyBzdHJbbl0gIT0gTlVMICYmIG0gPD0gTUJfTUFYQllURVM7ICsrbikKKyAgICB7CisJaWYgKHN0cltuXSA9PSBLX1NQRUNJQUwKKwkJJiYgc3RyW24gKyAxXSA9PSBLU19TUEVDSUFMCisJCSYmIHN0cltuICsgMl0gPT0gS0VfRklMTEVSKQorCXsKKwkgICAgYnVmW20rK10gPSBLX1NQRUNJQUw7CisJICAgIG4gKz0gMjsKKwl9CisjIGlmZGVmIEZFQVRfR1VJCisJZWxzZSBpZiAoc3RyW25dID09IENTSQorCQkmJiBzdHJbbiArIDFdID09IEtTX0VYVFJBCisJCSYmIHN0cltuICsgMl0gPT0gKGludClLRV9DU0kpCisJeworCSAgICBidWZbbSsrXSA9IENTSTsKKwkgICAgbiArPSAyOworCX0KKyMgZW5kaWYKKwllbHNlIGlmIChzdHJbbl0gPT0gS19TUEVDSUFMCisjIGlmZGVmIEZFQVRfR1VJCisJCXx8IHN0cltuXSA9PSBDU0kKKyMgZW5kaWYKKwkJKQorCSAgICBicmVhazsJCS8qIGEgc3BlY2lhbCBrZXkgY2FuJ3QgYmUgYSBtdWx0aWJ5dGUgY2hhciAqLworCWVsc2UKKwkgICAgYnVmW20rK10gPSBzdHJbbl07CisJYnVmW21dID0gTlVMOworCisJLyogUmV0dXJuIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgaWYgaXQncyBmb3VuZC4gIEFuIGlsbGVnYWwgc2VxdWVuY2UKKwkgKiB3aWxsIHJlc3VsdCBpbiBhIDEgaGVyZS4gKi8KKwlpZiAoKCptYl9wdHIybGVuX2NoZWNrKShidWYpID4gMSkKKwl7CisJICAgICpwcCA9IHN0ciArIG4gKyAxOworCSAgICByZXR1cm4gYnVmOworCX0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgY2hhcmFjdGVyIGF0ICJyb3ciLyJjb2wiIG9uIHRoZSBzY3JlZW4gaXMgdGhlIGxlZnQgc2lkZQorICogb2YgYSBkb3VibGUtd2lkdGggY2hhcmFjdGVyLgorICogQ2FsbGVyIG11c3QgbWFrZSBzdXJlICJyb3ciIGFuZCAiY29sIiBhcmUgbm90IGludmFsaWQhCisgKi8KKyAgICBpbnQKK21iX2xlZnRoYWx2ZShyb3csIGNvbCkKKyAgICBpbnQJICAgIHJvdzsKKyAgICBpbnQJICAgIGNvbDsKK3sKKyNpZmRlZiBGRUFUX0hBTkdVTElOCisgICAgaWYgKGNvbXBvc2luZ19oYW5ndWwpCisJcmV0dXJuIFRSVUU7CisjZW5kaWYKKyAgICBpZiAoZW5jX2RiY3MgIT0gMCkKKwlyZXR1cm4gZGJjc19vZmYyY2VsbHMoTGluZU9mZnNldFtyb3ddICsgY29sKSA+IDE7CisgICAgaWYgKGVuY191dGY4KQorCXJldHVybiAoY29sICsgMSA8IENvbHVtbnMKKwkJJiYgU2NyZWVuTGluZXNbTGluZU9mZnNldFtyb3ddICsgY29sICsgMV0gPT0gMCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCisjIGlmIGRlZmluZWQoRkVBVF9DTElQQk9BUkQpIHx8IGRlZmluZWQoRkVBVF9HVUkpIHx8IGRlZmluZWQoRkVBVF9SSUdIVExFRlQpIFwKKwl8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENvcnJlY3QgYSBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuLCBpZiBpdCdzIHRoZSByaWdodCBoYWx2ZSBvZiBhIGRvdWJsZS13aWRlCisgKiBjaGFyIG1vdmUgaXQgdG8gdGhlIGxlZnQgaGFsdmUuICBSZXR1cm5zIHRoZSBjb3JyZWN0ZWQgY29sdW1uLgorICovCisgICAgaW50CittYl9maXhfY29sKGNvbCwgcm93KQorICAgIGludAkJY29sOworICAgIGludAkJcm93OworeworICAgIGNvbCA9IGNoZWNrX2NvbChjb2wpOworICAgIHJvdyA9IGNoZWNrX3Jvdyhyb3cpOworICAgIGlmIChoYXNfbWJ5dGUgJiYgU2NyZWVuTGluZXMgIT0gTlVMTCAmJiBjb2wgPiAwCisJICAgICYmICgoZW5jX2RiY3MKKwkJICAgICYmIFNjcmVlbkxpbmVzW0xpbmVPZmZzZXRbcm93XSArIGNvbF0gIT0gTlVMCisJCSAgICAmJiBkYmNzX3NjcmVlbl9oZWFkX29mZihTY3JlZW5MaW5lcyArIExpbmVPZmZzZXRbcm93XSwKKwkJCQkJIFNjcmVlbkxpbmVzICsgTGluZU9mZnNldFtyb3ddICsgY29sKSkKKwkJfHwgKGVuY191dGY4ICYmIFNjcmVlbkxpbmVzW0xpbmVPZmZzZXRbcm93XSArIGNvbF0gPT0gMCkpKQorCS0tY29sOworICAgIHJldHVybiBjb2w7Cit9CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9NQllURSkgfHwgZGVmaW5lZChGRUFUX1BPU1RTQ1JJUFQpIHx8IGRlZmluZWQoUFJPVE8pCitzdGF0aWMgaW50IGVuY19hbGlhc19zZWFyY2ggX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKKworLyoKKyAqIFNraXAgdGhlIFZpbSBzcGVjaWZpYyBoZWFkIG9mIGEgJ2VuY29kaW5nJyBuYW1lLgorICovCisgICAgY2hhcl91ICoKK2VuY19za2lwKHApCisgICAgY2hhcl91CSpwOworeworICAgIGlmIChTVFJOQ01QKHAsICIyYnl0ZS0iLCA2KSA9PSAwKQorCXJldHVybiBwICsgNjsKKyAgICBpZiAoU1RSTkNNUChwLCAiOGJpdC0iLCA1KSA9PSAwKQorCXJldHVybiBwICsgNTsKKyAgICByZXR1cm4gcDsKK30KKworLyoKKyAqIEZpbmQgdGhlIGNhbm9uaWNhbCBuYW1lIGZvciBlbmNvZGluZyAiZW5jIi4KKyAqIFdoZW4gdGhlIG5hbWUgaXNuJ3QgcmVjb2duaXplZCwgcmV0dXJucyAiZW5jIiBpdHNlbGYsIGJ1dCB3aXRoIGFsbCBsb3dlcgorICogY2FzZSBjaGFyYWN0ZXJzIGFuZCAnXycgcmVwbGFjZWQgd2l0aCAnLScuCisgKiBSZXR1cm5zIGFuIGFsbG9jYXRlZCBzdHJpbmcuICBOVUxMIGZvciBvdXQtb2YtbWVtb3J5LgorICovCisgICAgY2hhcl91ICoKK2VuY19jYW5vbml6ZShlbmMpCisgICAgY2hhcl91CSplbmM7Cit7CisgICAgY2hhcl91CSpyOworICAgIGNoYXJfdQkqcCwgKnM7CisgICAgaW50CQlpOworCisgICAgLyogY29weSAiZW5jIiB0byBhbGxvY3RlZCBtZW1vcnksIHdpdGggcm9vbSBmb3IgdHdvICctJyAqLworICAgIHIgPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTihlbmMpICsgMykpOworICAgIGlmIChyICE9IE5VTEwpCisgICAgeworCS8qIE1ha2UgaXQgYWxsIGxvd2VyIGNhc2UgYW5kIHJlcGxhY2UgJ18nIHdpdGggJy0nLiAqLworCXAgPSByOworCWZvciAocyA9IGVuYzsgKnMgIT0gTlVMOyArK3MpCisJeworCSAgICBpZiAoKnMgPT0gJ18nKQorCQkqcCsrID0gJy0nOworCSAgICBlbHNlCisJCSpwKysgPSBUT0xPV0VSX0FTQygqcyk7CisJfQorCSpwID0gTlVMOworCisJLyogU2tpcCAiMmJ5dGUtIiBhbmQgIjhiaXQtIi4gKi8KKwlwID0gZW5jX3NraXAocik7CisKKwkvKiAiaXNvODg1OSIgLT4gImlzby04ODU5IiAqLworCWlmIChTVFJOQ01QKHAsICJpc284ODU5IiwgNykgPT0gMCkKKwl7CisJICAgIG1jaF9tZW1tb3ZlKHAgKyA0LCBwICsgMywgU1RSTEVOKHAgKyAyKSk7CisJICAgIHBbM10gPSAnLSc7CisJfQorCisJLyogImlzby04ODU5biIgLT4gImlzby04ODU5LW4iICovCisJaWYgKFNUUk5DTVAocCwgImlzby04ODU5IiwgOCkgPT0gMCAmJiBwWzhdICE9ICctJykKKwl7CisJICAgIG1jaF9tZW1tb3ZlKHAgKyA5LCBwICsgOCwgU1RSTEVOKHAgKyA3KSk7CisJICAgIHBbOF0gPSAnLSc7CisJfQorCisJLyogImxhdGluLU4iIC0+ICJsYXRpbk4iICovCisJaWYgKFNUUk5DTVAocCwgImxhdGluLSIsIDYpID09IDApCisJICAgIG1jaF9tZW1tb3ZlKHAgKyA1LCBwICsgNiwgU1RSTEVOKHAgKyA1KSk7CisKKwlpZiAoZW5jX2Nhbm9uX3NlYXJjaChwKSA+PSAwKQorCXsKKwkgICAgLyogY2Fub25pY2FsIG5hbWUgY2FuIGJlIHVzZWQgdW5tb2RpZmllZCAqLworCSAgICBpZiAocCAhPSByKQorCQltY2hfbWVtbW92ZShyLCBwLCBTVFJMRU4ocCkgKyAxKTsKKwl9CisJZWxzZSBpZiAoKGkgPSBlbmNfYWxpYXNfc2VhcmNoKHApKSA+PSAwKQorCXsKKwkgICAgLyogYWxpYXMgcmVjb2duaXplZCwgZ2V0IGNhbm9uaWNhbCBuYW1lICovCisJICAgIHZpbV9mcmVlKHIpOworCSAgICByID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKWVuY19jYW5vbl90YWJsZVtpXS5uYW1lKTsKKwl9CisgICAgfQorICAgIHJldHVybiByOworfQorCisvKgorICogU2VhcmNoIGZvciBhbiBlbmNvZGluZyBhbGlhcyBvZiAibmFtZSIuCisgKiBSZXR1cm5zIC0xIHdoZW4gbm90IGZvdW5kLgorICovCisgICAgc3RhdGljIGludAorZW5jX2FsaWFzX3NlYXJjaChuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGkgPSAwOyBlbmNfYWxpYXNfdGFibGVbaV0ubmFtZSAhPSBOVUxMOyArK2kpCisJaWYgKFNUUkNNUChuYW1lLCBlbmNfYWxpYXNfdGFibGVbaV0ubmFtZSkgPT0gMCkKKwkgICAgcmV0dXJuIGVuY19hbGlhc190YWJsZVtpXS5jYW5vbjsKKyAgICByZXR1cm4gLTE7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9NQllURSkgfHwgZGVmaW5lZChQUk9UTykKKworI2lmZGVmIEhBVkVfTEFOR0lORk9fSAorIyBpbmNsdWRlIDxsYW5naW5mby5oPgorI2VuZGlmCisKKy8qCisgKiBHZXQgdGhlIGNhbm9uaWNhbGl6ZWQgZW5jb2Rpbmcgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLgorICogUmV0dXJucyBhbiBhbGxvY2F0ZWQgc3RyaW5nIHdoZW4gc3VjY2Vzc2Z1bCwgTlVMTCB3aGVuIG5vdC4KKyAqLworICAgIGNoYXJfdSAqCitlbmNfbG9jYWxlKCkKK3sKKyNpZm5kZWYgV0lOMzI2NAorICAgIGNoYXIJKnM7CisgICAgY2hhcgkqcDsKKyAgICBpbnQJCWk7CisjZW5kaWYKKyAgICBjaGFyCWJ1Zls1MF07CisjaWZkZWYgV0lOMzI2NAorICAgIGxvbmcJYWNwID0gR2V0QUNQKCk7CisKKyAgICBpZiAoYWNwID09IDEyMDApCisJU1RSQ1BZKGJ1ZiwgInVjcy0ybGUiKTsKKyAgICBlbHNlIGlmIChhY3AgPT0gMTI1MikKKwlTVFJDUFkoYnVmLCAibGF0aW4xIik7CisgICAgZWxzZQorCXNwcmludGYoYnVmLCAiY3AlbGQiLCBhY3ApOworI2Vsc2UKKyMgaWZkZWYgSEFWRV9OTF9MQU5HSU5GT19DT0RFU0VUCisgICAgaWYgKChzID0gbmxfbGFuZ2luZm8oQ09ERVNFVCkpID09IE5VTEwgfHwgKnMgPT0gTlVMKQorIyBlbmRpZgorIyBpZiBkZWZpbmVkKEhBVkVfTE9DQUxFX0gpIHx8IGRlZmluZWQoWF9MT0NBTEUpCisJaWYgKChzID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKSkgPT0gTlVMTCB8fCAqcyA9PSBOVUwpCisjIGVuZGlmCisJICAgIGlmICgocyA9IGdldGVudigiTENfQUxMIikpID09IE5VTEwgfHwgKnMgPT0gTlVMKQorCQlpZiAoKHMgPSBnZXRlbnYoIkxDX0NUWVBFIikpID09IE5VTEwgfHwgKnMgPT0gTlVMKQorCQkgICAgcyA9IGdldGVudigiTEFORyIpOworCisgICAgaWYgKHMgPT0gTlVMTCB8fCAqcyA9PSBOVUwpCisJcmV0dXJuIEZBSUw7CisKKyAgICAvKiBUaGUgbW9zdCBnZW5lcmljIGxvY2FsZSBmb3JtYXQgaXM6CisgICAgICogbGFuZ3VhZ2VbX3RlcnJpdG9yeV1bLmNvZGVzZXRdW0Btb2RpZmllcl1bK3NwZWNpYWxdWyxbc3BvbnNvcl1bX3JldmlzaW9uXV0KKyAgICAgKiBJZiB0aGVyZSBpcyBhICcuJyByZW1vdmUgdGhlIHBhcnQgYmVmb3JlIGl0LgorICAgICAqIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBhZnRlciB0aGUgY29kZXNldCwgcmVtb3ZlIGl0LgorICAgICAqIE1ha2UgdGhlIG5hbWUgbG93ZXJjYXNlIGFuZCByZXBsYWNlICdfJyB3aXRoICctJy4KKyAgICAgKiBFeGNlcHRpb246ICJqYV9KUC5FVUMiID09ICJldWMtanAiLCAiemhfQ04uRVVDIiA9ICJldWMtY24iLAorICAgICAqICJrb19LUi5FVUMiID09ICJldWMta3IiCisgICAgICovCisgICAgaWYgKChwID0gKGNoYXIgKil2aW1fc3RyY2hyKChjaGFyX3UgKilzLCAnLicpKSAhPSBOVUxMKQorICAgIHsKKwlpZiAocCA+IHMgKyAyICYmIFNUUk5JQ01QKHAgKyAxLCAiRVVDIiwgMykgPT0gMAorCQkJJiYgIWlzYWxudW0oKGludClwWzRdKSAmJiBwWzRdICE9ICctJyAmJiBwWy0zXSA9PSAnXycpCisJeworCSAgICAvKiBjb3B5ICJYWS5FVUMiIHRvICJldWMtWFkiIHRvIGJ1ZlsxMF0gKi8KKwkgICAgU1RSQ1BZKGJ1ZiArIDEwLCAiZXVjLSIpOworCSAgICBidWZbMTRdID0gcFstMl07CisJICAgIGJ1ZlsxNV0gPSBwWy0xXTsKKwkgICAgYnVmWzE2XSA9IDA7CisJICAgIHMgPSBidWYgKyAxMDsKKwl9CisJZWxzZQorCSAgICBzID0gcCArIDE7CisgICAgfQorICAgIGZvciAoaSA9IDA7IHNbaV0gIT0gTlVMICYmIGkgPCBzaXplb2YoYnVmKSAtIDE7ICsraSkKKyAgICB7CisJaWYgKHNbaV0gPT0gJ18nIHx8IHNbaV0gPT0gJy0nKQorCSAgICBidWZbaV0gPSAnLSc7CisJZWxzZSBpZiAoaXNhbG51bSgoaW50KXNbaV0pKQorCSAgICBidWZbaV0gPSBUT0xPV0VSX0FTQyhzW2ldKTsKKwllbHNlCisJICAgIGJyZWFrOworICAgIH0KKyAgICBidWZbaV0gPSBOVUw7CisjZW5kaWYKKworICAgIHJldHVybiBlbmNfY2Fub25pemUoKGNoYXJfdSAqKWJ1Zik7Cit9CisKKyNpZiBkZWZpbmVkKFdJTjMyNjQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ29udmVydCBhbiBlbmNvZGluZyBuYW1lIHRvIGFuIE1TLVdpbmRvd3MgY29kZXBhZ2UuCisgKiBSZXR1cm5zIHplcm8gaWYgbm8gY29kZXBhZ2UgY2FuIGJlIGZpZ3VyZWQgb3V0LgorICovCisgICAgaW50CitlbmNuYW1lMmNvZGVwYWdlKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIGludAkJY3A7CisgICAgY2hhcl91CSpwID0gbmFtZTsKKyAgICBpbnQJCWlkeDsKKworICAgIGlmIChTVFJOQ01QKHAsICI4Yml0LSIsIDUpID09IDApCisJcCArPSA1OworICAgIGVsc2UgaWYgKFNUUk5DTVAocF9lbmMsICIyYnl0ZS0iLCA2KSA9PSAwKQorCXAgKz0gNjsKKworICAgIGlmIChwWzBdID09ICdjJyAmJiBwWzFdID09ICdwJykKKwljcCA9IGF0b2kocCArIDIpOworICAgIGVsc2UgaWYgKChpZHggPSBlbmNfY2Fub25fc2VhcmNoKHApKSA+PSAwKQorCWNwID0gZW5jX2Nhbm9uX3RhYmxlW2lkeF0uY29kZXBhZ2U7CisgICAgZWxzZQorCXJldHVybiAwOworICAgIGlmIChJc1ZhbGlkQ29kZVBhZ2UoY3ApKQorCXJldHVybiBjcDsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisjIGlmIGRlZmluZWQoVVNFX0lDT05WKSB8fCBkZWZpbmVkKFBST1RPKQorCitzdGF0aWMgY2hhcl91ICppY29udl9zdHJpbmcgX19BUkdTKCh2aW1jb252X1QgKnZjcCwgY2hhcl91ICpzdHIsIGludCBzbGVuLCBpbnQgKnVuY29udmxlbnApKTsKKworLyoKKyAqIENhbGwgaWNvbnZfb3BlbigpIHdpdGggYSBjaGVjayBpZiBpY29udigpIHdvcmtzIHByb3Blcmx5ICh0aGVyZSBhcmUgYnJva2VuCisgKiB2ZXJzaW9ucykuCisgKiBSZXR1cm5zICh2b2lkICopLTEgaWYgZmFpbGVkLgorICogKHNob3VsZCByZXR1cm4gaWNvbnZfdCwgYnV0IHRoYXQgY2F1c2VzIHByb2JsZW1zIHdpdGggcHJvdG90eXBlcykuCisgKi8KKyAgICB2b2lkICoKK215X2ljb252X29wZW4odG8sIGZyb20pCisgICAgY2hhcl91CSp0bzsKKyAgICBjaGFyX3UJKmZyb207Cit7CisgICAgaWNvbnZfdAlmZDsKKyNkZWZpbmUgSUNPTlZfVEVTVExFTiA0MDAKKyAgICBjaGFyX3UJdG9idWZbSUNPTlZfVEVTVExFTl07CisgICAgY2hhcgkqcDsKKyAgICBzaXplX3QJdG9sZW47CisgICAgc3RhdGljIGludAlpY29udl9vayA9IC0xOworCisgICAgaWYgKGljb252X29rID09IEZBTFNFKQorCXJldHVybiAodm9pZCAqKS0xOwkvKiBkZXRlY3RlZCBhIGJyb2tlbiBpY29udigpIHByZXZpb3VzbHkgKi8KKworI2lmZGVmIERZTkFNSUNfSUNPTlYKKyAgICAvKiBDaGVjayBpZiB0aGUgaWNvbnYuZGxsIGNhbiBiZSBmb3VuZC4gKi8KKyAgICBpZiAoIWljb252X2VuYWJsZWQoVFJVRSkpCisJcmV0dXJuICh2b2lkICopLTE7CisjZW5kaWYKKworICAgIGZkID0gaWNvbnZfb3BlbigoY2hhciAqKWVuY19za2lwKHRvKSwgKGNoYXIgKillbmNfc2tpcChmcm9tKSk7CisKKyAgICBpZiAoZmQgIT0gKGljb252X3QpLTEgJiYgaWNvbnZfb2sgPT0gLTEpCisgICAgeworCS8qCisJICogRG8gYSBkdW1teSBpY29udigpIGNhbGwgdG8gY2hlY2sgaWYgaXQgYWN0dWFsbHkgd29ya3MuICBUaGVyZSBpcyBhCisJICogdmVyc2lvbiBvZiBpY29udigpIG9uIExpbnV4IHRoYXQgaXMgYnJva2VuLiAgV2UgY2FuJ3QgaWdub3JlIGl0LAorCSAqIGJlY2F1c2UgaXQncyB3aWRlLXNwcmVhZC4gIFRoZSBzeW1wdG9tcyBhcmUgdGhhdCBhZnRlciBvdXRwdXR0aW5nCisJICogdGhlIGluaXRpYWwgc2hpZnQgc3RhdGUgdGhlICJ0byIgcG9pbnRlciBpcyBOVUxMIGFuZCBjb252ZXJzaW9uCisJICogc3RvcHMgZm9yIG5vIGFwcGFyZW50IHJlYXNvbiBhZnRlciBhYm91dCA4MTYwIGNoYXJhY3RlcnMuCisJICovCisJcCA9IChjaGFyICopdG9idWY7CisJdG9sZW4gPSBJQ09OVl9URVNUTEVOOworCSh2b2lkKWljb252KGZkLCBOVUxMLCBOVUxMLCAmcCwgJnRvbGVuKTsKKwlpZiAocCA9PSBOVUxMKQorCXsKKwkgICAgaWNvbnZfb2sgPSBGQUxTRTsKKwkgICAgaWNvbnZfY2xvc2UoZmQpOworCSAgICBmZCA9IChpY29udl90KS0xOworCX0KKwllbHNlCisJICAgIGljb252X29rID0gVFJVRTsKKyAgICB9CisKKyAgICByZXR1cm4gKHZvaWQgKilmZDsKK30KKworLyoKKyAqIENvbnZlcnQgdGhlIHN0cmluZyAic3RyW3NsZW5dIiB3aXRoIGljb252KCkuCisgKiBJZiAidW5jb252bGVucCIgaXMgbm90IE5VTEwgaGFuZGxlIHRoZSBzdHJpbmcgZW5kaW5nIGluIGFuIGluY29tcGxldGUKKyAqIHNlcXVlbmNlIGFuZCBzZXQgIip1bmNvbnZsZW5wIiB0byB0aGUgbGVuZ3RoIG9mIGl0LgorICogUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZyBpbiBhbGxvY2F0ZWQgbWVtb3J5LiAgTlVMTCBmb3IgYW4gZXJyb3IuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2ljb252X3N0cmluZyh2Y3AsIHN0ciwgc2xlbiwgdW5jb252bGVucCkKKyAgICB2aW1jb252X1QJKnZjcDsKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBpbnQJCXNsZW47CisgICAgaW50CQkqdW5jb252bGVucDsKK3sKKyAgICBjb25zdCBjaGFyCSpmcm9tOworICAgIHNpemVfdAlmcm9tbGVuOworICAgIGNoYXIJKnRvOworICAgIHNpemVfdAl0b2xlbjsKKyAgICBzaXplX3QJbGVuID0gMDsKKyAgICBzaXplX3QJZG9uZSA9IDA7CisgICAgY2hhcl91CSpyZXN1bHQgPSBOVUxMOworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWw7CisKKyAgICBmcm9tID0gKGNoYXIgKilzdHI7CisgICAgZnJvbWxlbiA9IHNsZW47CisgICAgZm9yICg7OykKKyAgICB7CisJaWYgKGxlbiA9PSAwIHx8IElDT05WX0VSUk5PID09IElDT05WX0UyQklHKQorCXsKKwkgICAgLyogQWxsb2NhdGUgZW5vdWdoIHJvb20gZm9yIG1vc3QgY29udmVyc2lvbnMuICBXaGVuIHJlLWFsbG9jYXRpbmcKKwkgICAgICogaW5jcmVhc2UgdGhlIGJ1ZmZlciBzaXplLiAqLworCSAgICBsZW4gPSBsZW4gKyBmcm9tbGVuICogMiArIDQwOworCSAgICBwID0gYWxsb2MoKHVuc2lnbmVkKWxlbik7CisJICAgIGlmIChwICE9IE5VTEwgJiYgZG9uZSA+IDApCisJCW1jaF9tZW1tb3ZlKHAsIHJlc3VsdCwgZG9uZSk7CisJICAgIHZpbV9mcmVlKHJlc3VsdCk7CisJICAgIHJlc3VsdCA9IHA7CisJICAgIGlmIChyZXN1bHQgPT0gTlVMTCkJLyogb3V0IG9mIG1lbW9yeSAqLworCQlicmVhazsKKwl9CisKKwl0byA9IChjaGFyICopcmVzdWx0ICsgZG9uZTsKKwl0b2xlbiA9IGxlbiAtIGRvbmUgLSAyOworCS8qIEF2b2lkIGEgd2FybmluZyBmb3Igc3lzdGVtcyB3aXRoIGEgd3JvbmcgaWNvbnYoKSBwcm90b3R5cGUgYnkKKwkgKiBjYXN0aW5nIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdm9pZCAqLiAqLworCWlmIChpY29udih2Y3AtPnZjX2ZkLCAodm9pZCAqKSZmcm9tLCAmZnJvbWxlbiwgJnRvLCAmdG9sZW4pCisJCQkJCQkJCSE9IChzaXplX3QpLTEpCisJeworCSAgICAvKiBGaW5pc2hlZCwgYXBwZW5kIGEgTlVMLiAqLworCSAgICAqdG8gPSBOVUw7CisJICAgIGJyZWFrOworCX0KKworCS8qIENoZWNrIGJvdGggSUNPTlZfRUlOVkFMIGFuZCBFSU5WQUwsIGJlY2F1c2UgdGhlIGR5bmFtaWNhbGx5IGxvYWRlZAorCSAqIGljb252IGxpYnJhcnkgbWF5IHVzZSBvbmUgb2YgdGhlbS4gKi8KKwlpZiAoIXZjcC0+dmNfZmFpbCAmJiB1bmNvbnZsZW5wICE9IE5VTEwKKwkJJiYgKElDT05WX0VSUk5PID09IElDT05WX0VJTlZBTCB8fCBJQ09OVl9FUlJOTyA9PSBFSU5WQUwpKQorCXsKKwkgICAgLyogSGFuZGxlIGFuIGluY29tcGxldGUgc2VxdWVuY2UgYXQgdGhlIGVuZC4gKi8KKwkgICAgKnRvID0gTlVMOworCSAgICAqdW5jb252bGVucCA9IGZyb21sZW47CisJICAgIGJyZWFrOworCX0KKworCS8qIENoZWNrIGJvdGggSUNPTlZfRUlMU0VRIGFuZCBFSUxTRVEsIGJlY2F1c2UgdGhlIGR5bmFtaWNhbGx5IGxvYWRlZAorCSAqIGljb252IGxpYnJhcnkgbWF5IHVzZSBvbmUgb2YgdGhlbS4gKi8KKwllbHNlIGlmICghdmNwLT52Y19mYWlsCisJCSYmIChJQ09OVl9FUlJOTyA9PSBJQ09OVl9FSUxTRVEgfHwgSUNPTlZfRVJSTk8gPT0gRUlMU0VRCisJCSAgICB8fCBJQ09OVl9FUlJOTyA9PSBJQ09OVl9FSU5WQUwgfHwgSUNPTlZfRVJSTk8gPT0gRUlOVkFMKSkKKwl7CisJICAgIC8qIENhbid0IGNvbnZlcnQ6IGluc2VydCBhICc/JyBhbmQgc2tpcCBhIGNoYXJhY3Rlci4gIFRoaXMgYXNzdW1lcworCSAgICAgKiBjb252ZXJzaW9uIGZyb20gJ2VuY29kaW5nJyB0byBzb21ldGhpbmcgZWxzZS4gIEluIG90aGVyCisJICAgICAqIHNpdHVhdGlvbnMgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIHNraXAgYW55d2F5LiAqLworCSAgICAqdG8rKyA9ICc/JzsKKwkgICAgaWYgKCgqbWJfcHRyMmNlbGxzKSgoY2hhcl91ICopZnJvbSkgPiAxKQorCQkqdG8rKyA9ICc/JzsKKwkgICAgbCA9ICgqbWJfcHRyMmxlbl9jaGVjaykoKGNoYXJfdSAqKWZyb20pOworCSAgICBmcm9tICs9IGw7CisJICAgIGZyb21sZW4gLT0gbDsKKwl9CisJZWxzZSBpZiAoSUNPTlZfRVJSTk8gIT0gSUNPTlZfRTJCSUcpCisJeworCSAgICAvKiBjb252ZXJzaW9uIGZhaWxlZCAqLworCSAgICB2aW1fZnJlZShyZXN1bHQpOworCSAgICByZXN1bHQgPSBOVUxMOworCSAgICBicmVhazsKKwl9CisJLyogTm90IGVub3VnaCByb29tIG9yIHNraXBwaW5nIGlsbGVnYWwgc2VxdWVuY2UuICovCisJZG9uZSA9IHRvIC0gKGNoYXIgKilyZXN1bHQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyMgIGlmIGRlZmluZWQoRFlOQU1JQ19JQ09OVikgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBEeW5hbWljYWxseSBsb2FkIHRoZSAiaWNvbnYuZGxsIiBvbiBXaW4zMi4KKyAqLworCisjaWZuZGVmIERZTkFNSUNfSUNPTlYJICAgIC8qIGp1c3QgZ2VuZXJhdGluZyBwcm90b3R5cGVzICovCisjIGRlZmluZSBISU5TVEFOQ0UgaW50CisjZW5kaWYKK0hJTlNUQU5DRSBoSWNvbnZETEwgPSAwOworSElOU1RBTkNFIGhNc3ZjcnRETEwgPSAwOworCisjICBpZm5kZWYgRFlOQU1JQ19JQ09OVl9ETEwKKyMgICBkZWZpbmUgRFlOQU1JQ19JQ09OVl9ETEwgImljb252LmRsbCIKKyMgICBkZWZpbmUgRFlOQU1JQ19JQ09OVl9ETExfQUxUICJsaWJpY29udi5kbGwiCisjICBlbmRpZgorIyAgaWZuZGVmIERZTkFNSUNfTVNWQ1JUX0RMTAorIyAgIGRlZmluZSBEWU5BTUlDX01TVkNSVF9ETEwgIm1zdmNydC5kbGwiCisjICBlbmRpZgorCisvKgorICogVHJ5IG9wZW5pbmcgdGhlIGljb252LmRsbCBhbmQgcmV0dXJuIFRSVUUgaWYgaWNvbnYoKSBjYW4gYmUgdXNlZC4KKyAqLworICAgIGludAoraWNvbnZfZW5hYmxlZCh2ZXJib3NlKQorICAgIGludAkJdmVyYm9zZTsKK3sKKyAgICBpZiAoaEljb252RExMICE9IDAgJiYgaE1zdmNydERMTCAhPSAwKQorCXJldHVybiBUUlVFOworICAgIGhJY29udkRMTCA9IExvYWRMaWJyYXJ5KERZTkFNSUNfSUNPTlZfRExMKTsKKyAgICBpZiAoaEljb252RExMID09IDApCQkvKiBzb21ldGltZXMgaXQncyBjYWxsZWQgbGliaWNvbnYuZGxsICovCisJaEljb252RExMID0gTG9hZExpYnJhcnkoRFlOQU1JQ19JQ09OVl9ETExfQUxUKTsKKyAgICBpZiAoaEljb252RExMICE9IDApCisJaE1zdmNydERMTCA9IExvYWRMaWJyYXJ5KERZTkFNSUNfTVNWQ1JUX0RMTCk7CisgICAgaWYgKGhJY29udkRMTCA9PSAwIHx8IGhNc3ZjcnRETEwgPT0gMCkKKyAgICB7CisJLyogT25seSBnaXZlIHRoZSBtZXNzYWdlIHdoZW4gJ3ZlcmJvc2UnIGlzIHNldCwgb3RoZXJ3aXNlIGl0IG1pZ2h0IGJlCisJICogZG9uZSB3aGVuZXZlciBhIGNvbnZlcnNpb24gaXMgYXR0ZW1wdGVkLiAqLworCWlmICh2ZXJib3NlICYmIHBfdmVyYm9zZSA+IDApCisJICAgIEVNU0cyKF8oZV9sb2FkbGliKSwKKwkJICAgIGhJY29udkRMTCA9PSAwID8gRFlOQU1JQ19JQ09OVl9ETEwgOiBEWU5BTUlDX01TVkNSVF9ETEwpOworCWljb252X2VuZCgpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICAqKChGQVJQUk9DKikmaWNvbnYpCQk9IEdldFByb2NBZGRyZXNzKGhJY29udkRMTCwgImxpYmljb252Iik7CisgICAgKigoRkFSUFJPQyopJmljb252X29wZW4pCT0gR2V0UHJvY0FkZHJlc3MoaEljb252RExMLCAibGliaWNvbnZfb3BlbiIpOworICAgICooKEZBUlBST0MqKSZpY29udl9jbG9zZSkJPSBHZXRQcm9jQWRkcmVzcyhoSWNvbnZETEwsICJsaWJpY29udl9jbG9zZSIpOworICAgICooKEZBUlBST0MqKSZpY29udmN0bCkJPSBHZXRQcm9jQWRkcmVzcyhoSWNvbnZETEwsICJsaWJpY29udmN0bCIpOworICAgICooKEZBUlBST0MqKSZpY29udl9lcnJubykJPSBHZXRQcm9jQWRkcmVzcyhoTXN2Y3J0RExMLCAiX2Vycm5vIik7CisgICAgaWYgKGljb252ID09IE5VTEwgfHwgaWNvbnZfb3BlbiA9PSBOVUxMIHx8IGljb252X2Nsb3NlID09IE5VTEwKKwkgICAgfHwgaWNvbnZjdGwgPT0gTlVMTCB8fCBpY29udl9lcnJubyA9PSBOVUxMKQorICAgIHsKKwlpY29udl9lbmQoKTsKKwlpZiAodmVyYm9zZSAmJiBwX3ZlcmJvc2UgPiAwKQorCSAgICBFTVNHMihfKGVfbG9hZGZ1bmMpLCAiZm9yIGxpYmljb252Iik7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworICAgIHZvaWQKK2ljb252X2VuZCgpCit7CisgICAgLyogRG9uJ3QgdXNlIGljb252KCkgd2hlbiBpbnB1dHRpbmcgb3Igb3V0cHV0dGluZyBjaGFyYWN0ZXJzLiAqLworICAgIGlmIChpbnB1dF9jb252LnZjX3R5cGUgPT0gQ09OVl9JQ09OVikKKwljb252ZXJ0X3NldHVwKCZpbnB1dF9jb252LCBOVUxMLCBOVUxMKTsKKyAgICBpZiAob3V0cHV0X2NvbnYudmNfdHlwZSA9PSBDT05WX0lDT05WKQorCWNvbnZlcnRfc2V0dXAoJm91dHB1dF9jb252LCBOVUxMLCBOVUxMKTsKKworICAgIGlmIChoSWNvbnZETEwgIT0gMCkKKwlGcmVlTGlicmFyeShoSWNvbnZETEwpOworICAgIGlmIChoTXN2Y3J0RExMICE9IDApCisJRnJlZUxpYnJhcnkoaE1zdmNydERMTCk7CisgICAgaEljb252RExMID0gMDsKKyAgICBoTXN2Y3J0RExMID0gMDsKK30KKyMgIGVuZGlmIC8qIERZTkFNSUNfSUNPTlYgKi8KKyMgZW5kaWYgLyogVVNFX0lDT05WICovCisKKyNlbmRpZiAvKiBGRUFUX01CWVRFICovCisKKyNpZiBkZWZpbmVkKEZFQVRfWElNKSB8fCBkZWZpbmVkKFBST1RPKQorCisjIGlmZGVmIEZFQVRfR1VJX0dUSworc3RhdGljIGludCB4aW1faGFzX3ByZWVkaXRpbmcgSU5JVCg9IEZBTFNFKTsgIC8qIElNIGN1cnJlbnQgc3RhdHVzICovCisKKy8qCisgKiBTZXQgcHJlZWRpdF9zdGFydF9jb2wgdG8gdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorICovCisgICAgc3RhdGljIHZvaWQKK2luaXRfcHJlZWRpdF9zdGFydF9jb2wodm9pZCkKK3sKKyAgICBpZiAoU3RhdGUgJiBDTURMSU5FKQorCXByZWVkaXRfc3RhcnRfY29sID0gY21kbGluZV9nZXR2Y29sX2N1cnNvcigpOworICAgIGVsc2UgaWYgKGN1cndpbiAhPSBOVUxMKQorCWdldHZjb2woY3Vyd2luLCAmY3Vyd2luLT53X2N1cnNvciwgJnByZWVkaXRfc3RhcnRfY29sLCBOVUxMLCBOVUxMKTsKKyAgICAvKiBQcmV2ZW50IHRoYXQgcHJlZWRpdGluZyBtYXJrcyB0aGUgYnVmZmVyIGFzIGNoYW5nZWQuICovCisgICAgeGltX2NoYW5nZWRfd2hpbGVfcHJlZWRpdGluZyA9IGN1cmJ1Zi0+Yl9jaGFuZ2VkOworfQorIyBlbmRpZgorCisjIGlmIGRlZmluZWQoSEFWRV9HVEsyKSAmJiAhZGVmaW5lZChQUk9UTykKKworc3RhdGljIGludCBpbV9pc19hY3RpdmUJICAgICAgID0gRkFMU0U7CS8qIElNIGlzIGVuYWJsZWQgZm9yIGN1cnJlbnQgbW9kZSAgICAqLworc3RhdGljIGludCBpbV9wcmVlZGl0X2N1cnNvciAgID0gMDsJLyogY3Vyc29yIG9mZnNldCBpbiBjaGFyYWN0ZXJzICAgICAgICovCitzdGF0aWMgaW50IGltX3ByZWVkaXRfdHJhaWxpbmcgPSAwOwkvKiBudW1iZXIgb2YgY2hhcmFjdGVycyBhZnRlciBjdXJzb3IgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW1fY29tbWl0X2hhbmRsZXJfaWQgID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgIGltX2FjdGl2YXRla2V5X2tleXZhbCA9IEdES19Wb2lkU3ltYm9sOworc3RhdGljIHVuc2lnbmVkIGludCAgaW1fYWN0aXZhdGVrZXlfc3RhdGUgID0gMDsKKworICAgIHZvaWQKK2ltX3NldF9hY3RpdmUoaW50IGFjdGl2ZSkKK3sKKyAgICBpbnQgd2FzX2FjdGl2ZTsKKworICAgIHdhc19hY3RpdmUgPSAhIWltX2lzX2FjdGl2ZTsKKyAgICBpbV9pc19hY3RpdmUgPSAoYWN0aXZlICYmICFwX2ltZGlzYWJsZSk7CisKKyAgICBpZiAoaW1faXNfYWN0aXZlICE9IHdhc19hY3RpdmUpCisJeGltX3Jlc2V0KCk7Cit9CisKKyAgICB2b2lkCit4aW1fc2V0X2ZvY3VzKGludCBmb2N1cykKK3sKKyAgICBpZiAoeGljICE9IE5VTEwpCisgICAgeworCWlmIChmb2N1cykKKwkgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfaW4oeGljKTsKKwllbHNlCisJICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291dCh4aWMpOworICAgIH0KK30KKworICAgIHZvaWQKK2ltX3NldF9wb3NpdGlvbihpbnQgcm93LCBpbnQgY29sKQoreworICAgIGlmICh4aWMgIT0gTlVMTCkKKyAgICB7CisJR2RrUmVjdGFuZ2xlIGFyZWE7CisKKwlhcmVhLnggPSBGSUxMX1goY29sKTsKKwlhcmVhLnkgPSBGSUxMX1kocm93KTsKKwlhcmVhLndpZHRoICA9IGd1aS5jaGFyX3dpZHRoICogKG1iX2xlZnRoYWx2ZShyb3csIGNvbCkgPyAyIDogMSk7CisJYXJlYS5oZWlnaHQgPSBndWkuY2hhcl9oZWlnaHQ7CisKKwlndGtfaW1fY29udGV4dF9zZXRfY3Vyc29yX2xvY2F0aW9uKHhpYywgJmFyZWEpOworICAgIH0KK30KKworIyAgaWYgMCB8fCBkZWZpbmVkKFBST1RPKSAvKiBhcHBhcmVudGx5IG9ubHkgdXNlZCBpbiBndWlfeDExLmMgKi8KKyAgICB2b2lkCit4aW1fc2V0X3ByZWVkaXQodm9pZCkKK3sKKyAgICBpbV9zZXRfcG9zaXRpb24oZ3VpLnJvdywgZ3VpLmNvbCk7Cit9CisjICBlbmRpZgorCisgICAgc3RhdGljIHZvaWQKK2ltX2FkZF90b19pbnB1dChjaGFyX3UgKnN0ciwgaW50IGxlbikKK3sKKyAgICAvKiBDb252ZXJ0IGZyb20gJ3Rlcm1lbmNvZGluZycgKGFsd2F5cyAidXRmLTgiKSB0byAnZW5jb2RpbmcnICovCisgICAgaWYgKGlucHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisgICAgeworCXN0ciA9IHN0cmluZ19jb252ZXJ0KCZpbnB1dF9jb252LCBzdHIsICZsZW4pOworCWdfcmV0dXJuX2lmX2ZhaWwoc3RyICE9IE5VTEwpOworICAgIH0KKworICAgIGFkZF90b19pbnB1dF9idWZfY3NpKHN0ciwgbGVuKTsKKworICAgIGlmIChpbnB1dF9jb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorCXZpbV9mcmVlKHN0cik7CisKKyAgICBpZiAocF9taCkgLyogYmxhbmsgb3V0IHRoZSBwb2ludGVyIGlmIG5lY2Vzc2FyeSAqLworCWd1aV9tY2hfbW91c2VoaWRlKFRSVUUpOworfQorCisgICAgc3RhdGljIHZvaWQKK2ltX2RlbGV0ZV9wcmVlZGl0KHZvaWQpCit7CisgICAgY2hhcl91IGJza2V5W10gID0ge0NTSSwgJ2snLCAnYid9OworICAgIGNoYXJfdSBkZWxrZXlbXSA9IHtDU0ksICdrJywgJ0QnfTsKKworICAgIGlmIChTdGF0ZSAmIE5PUk1BTCkKKyAgICB7CisJaW1fcHJlZWRpdF9jdXJzb3IgPSAwOworCXJldHVybjsKKyAgICB9CisgICAgZm9yICg7IGltX3ByZWVkaXRfY3Vyc29yID4gMDsgLS1pbV9wcmVlZGl0X2N1cnNvcikKKwlhZGRfdG9faW5wdXRfYnVmKGJza2V5LCAoaW50KXNpemVvZihic2tleSkpOworCisgICAgZm9yICg7IGltX3ByZWVkaXRfdHJhaWxpbmcgPiAwOyAtLWltX3ByZWVkaXRfdHJhaWxpbmcpCisJYWRkX3RvX2lucHV0X2J1ZihkZWxrZXksIChpbnQpc2l6ZW9mKGRlbGtleSkpOworfQorCisgICAgc3RhdGljIHZvaWQKK2ltX2NvcnJlY3RfY3Vyc29yKGludCBudW1fbW92ZV9iYWNrKQoreworICAgIGNoYXJfdSBiYWNra2V5W10gPSB7Q1NJLCAnaycsICdsJ307CisKKyAgICBpZiAoU3RhdGUgJiBOT1JNQUwpCisJcmV0dXJuOworIyAgaWZkZWYgRkVBVF9SSUdIVExFRlQKKyAgICBpZiAoKFN0YXRlICYgQ01ETElORSkgPT0gMCAmJiBjdXJ3aW4gIT0gTlVMTCAmJiBjdXJ3aW4tPndfcF9ybCkKKwliYWNra2V5WzJdID0gJ3InOworIyAgZW5kaWYKKyAgICBmb3IgKDsgbnVtX21vdmVfYmFjayA+IDA7IC0tbnVtX21vdmVfYmFjaykKKwlhZGRfdG9faW5wdXRfYnVmKGJhY2trZXksIChpbnQpc2l6ZW9mKGJhY2trZXkpKTsKK30KKworc3RhdGljIGludCB4aW1fZXhwZWN0ZWRfY2hhciA9IE5VTDsKK3N0YXRpYyBpbnQgeGltX2lnbm9yZWRfY2hhciA9IEZBTFNFOworCisvKgorICogVXBkYXRlIHRoZSBtb2RlIGFuZCBjdXJzb3Igd2hpbGUgaW4gYW4gSU0gY2FsbGJhY2suCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW1fc2hvd19pbmZvKHZvaWQpCit7CisgICAgaW50CSAgICBvbGRfdmdldGNfYnVzeTsKKyAgICBvbGRfdmdldGNfYnVzeSA9IHZnZXRjX2J1c3k7CisgICAgdmdldGNfYnVzeSA9IFRSVUU7CisgICAgc2hvd21vZGUoKTsKKyAgICB2Z2V0Y19idXN5ID0gb2xkX3ZnZXRjX2J1c3k7CisgICAgc2V0Y3Vyc29yKCk7CisgICAgb3V0X2ZsdXNoKCk7Cit9CisKKy8qCisgKiBDYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHVzZXIgZmluaXNoZWQgcHJlZWRpdGluZy4KKyAqIFB1dCB0aGUgZmluYWwgc3RyaW5nIGludG8gdGhlIGlucHV0IGJ1ZmZlci4KKyAqLworLypBUkdTVVNFRDAqLworICAgIHN0YXRpYyB2b2lkCitpbV9jb21taXRfY2IoR3RrSU1Db250ZXh0ICpjb250ZXh0LCBjb25zdCBnY2hhciAqc3RyLCBncG9pbnRlciBkYXRhKQoreworICAgIGludAlzbGVuID0gKGludClTVFJMRU4oc3RyKTsKKyAgICBpbnQJYWRkX3RvX2lucHV0ID0gVFJVRTsKKyAgICBpbnQJY2xlbjsKKyAgICBpbnQJbGVuID0gc2xlbjsKKyAgICBpbnQJY29tbWl0X3dpdGhfcHJlZWRpdCA9IFRSVUU7CisgICAgY2hhcl91CSppbV9zdHIsICpwOworCisjaWZkZWYgWElNX0RFQlVHCisgICAgeGltX2xvZygiaW1fY29tbWl0X2NiKCk6ICVzXG4iLCBzdHIpOworI2VuZGlmCisKKyAgICAvKiBUaGUgaW1oYW5ndWwgbW9kdWxlIGRvZXNuJ3QgcmVzZXQgdGhlIHByZWVkaXQgc3RyaW5nIGJlZm9yZQorICAgICAqIGNvbW1pdHRpbmcuICBDYWxsIGltX2RlbGV0ZV9wcmVlZGl0KCkgdG8gd29yayBhcm91bmQgdGhhdC4gKi8KKyAgICBpbV9kZWxldGVfcHJlZWRpdCgpOworCisgICAgLyogSW5kaWNhdGUgdGhhdCBwcmVlZGl0aW5nIGhhcyBmaW5pc2hlZC4gKi8KKyAgICBpZiAocHJlZWRpdF9zdGFydF9jb2wgPT0gTUFYQ09MKQorICAgIHsKKwlpbml0X3ByZWVkaXRfc3RhcnRfY29sKCk7CisJY29tbWl0X3dpdGhfcHJlZWRpdCA9IEZBTFNFOworICAgIH0KKworICAgIC8qIFRoZSB0aGluZyB3aGljaCBzZXR0aW5nICJwcmVlZGl0X3N0YXJ0X2NvbCIgdG8gTUFYQ09MIG1lYW5zIHRoYXQKKyAgICAgKiAicHJlZWRpdF9zdGFydF9jb2wiIHdpbGwgYmUgc2V0IGZvcmNlbHkgd2hlbiBjYWxsaW5nCisgICAgICogcHJlZWRpdF9jaGFuZ2VkX2NiKCkgbmV4dCB0aW1lLgorICAgICAqICJwcmVlZGl0X3N0YXJ0X2NvbCIgc2hvdWxkIG5vdCByZXNldCB3aXRoIE1BWENPTCBvbiB0aGlzIHBhcnQuIFZpbQorICAgICAqIGlzIHNpbXVsYXRpbmcgdGhlIHByZWVkaXRpbmcgYnkgdXNpbmcgYWRkX3RvX2lucHV0X3N0cigpLiB3aGVuCisgICAgICogcHJlZWRpdCBiZWdpbiBpbW1lZGlhdGVseSBiZWZvcmUgY29tbWl0dGVkLCB0aGUgdHlwZWJ1ZiBpcyBub3QKKyAgICAgKiBmbHVzaGVkIHRvIHNjcmVlbiwgdGhlbiBpdCBjYW4ndCBnZXQgY29ycmVjdCAicHJlZWRpdF9zdGFydF9jb2wiLgorICAgICAqIFRodXMsIGl0IHNob3VsZCBjYWxjdWxhdGUgdGhlIGNlbGxzIGJ5IGFkZGluZyBjZWxscyBvZiB0aGUgY29tbWl0dGVkCisgICAgICogc3RyaW5nLiAqLworICAgIGlmIChpbnB1dF9jb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorICAgIHsKKwlpbV9zdHIgPSBzdHJpbmdfY29udmVydCgmaW5wdXRfY29udiwgKGNoYXJfdSAqKXN0ciwgJmxlbik7CisJZ19yZXR1cm5faWZfZmFpbChpbV9zdHIgIT0gTlVMTCk7CisgICAgfQorICAgIGVsc2UKKwlpbV9zdHIgPSAoY2hhcl91ICopc3RyOworICAgIGNsZW4gPSAwOworICAgIGZvciAocCA9IGltX3N0cjsgcCA8IGltX3N0ciArIGxlbjsgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApKQorCWNsZW4gKz0gKCptYl9wdHIyY2VsbHMpKHApOworICAgIGlmIChpbnB1dF9jb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorCXZpbV9mcmVlKGltX3N0cik7CisgICAgcHJlZWRpdF9zdGFydF9jb2wgKz0gY2xlbjsKKworICAgIC8qIElzIHRoaXMgYSBzaW5nbGUgY2hhcmFjdGVyIHRoYXQgbWF0Y2hlcyBhIGtleXBhZCBrZXkgdGhhdCdzIGp1c3QKKyAgICAgKiBiZWVuIHByZXNzZWQ/ICBJZiBzbywgd2UgZG9uJ3Qgd2FudCBpdCB0byBiZSBlbnRlcmVkIGFzIHN1Y2ggLSBsZXQKKyAgICAgKiB1cyBjYXJyeSBvbiBwcm9jZXNzaW5nIHRoZSByYXcga2V5Y29kZSBzbyB0aGF0IGl0IG1heSBiZSB1c2VkIGluCisgICAgICogbWFwcGluZ3MgYXMgPGtTb21ldGhpbmc+LiAqLworICAgIGlmICh4aW1fZXhwZWN0ZWRfY2hhciAhPSBOVUwpCisgICAgeworCS8qIFdlJ3JlIGN1cnJlbnRseSBwcm9jZXNzaW5nIGEga2V5cGFkIG9yIG90aGVyIHNwZWNpYWwga2V5ICovCisJaWYgKHNsZW4gPT0gMSAmJiBzdHJbMF0gPT0geGltX2V4cGVjdGVkX2NoYXIpCisJeworCSAgICAvKiBJdCdzIGEgbWF0Y2ggLSBkb24ndCBkbyBpdCBoZXJlICovCisJICAgIHhpbV9pZ25vcmVkX2NoYXIgPSBUUlVFOworCSAgICBhZGRfdG9faW5wdXQgPSBGQUxTRTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyogTm90IGEgbWF0Y2ggKi8KKwkgICAgeGltX2lnbm9yZWRfY2hhciA9IEZBTFNFOworCX0KKyAgICB9CisKKyAgICBpZiAoYWRkX3RvX2lucHV0KQorCWltX2FkZF90b19pbnB1dCgoY2hhcl91ICopc3RyLCBzbGVuKTsKKworICAgIC8qIEluc2VydGluZyBjaGFycyB3aGlsZSAiaW1faXNfYWN0aXZlIiBpcyBzZXQgZG9lcyBub3QgY2F1c2UgYSBjaGFuZ2Ugb2YKKyAgICAgKiBidWZmZXIuICBXaGVuIHRoZSBjaGFycyBhcmUgY29tbWl0dGVkIHRoZSBidWZmZXIgbXVzdCBiZSBtYXJrZWQgYXMKKyAgICAgKiBjaGFuZ2VkLiAqLworICAgIGlmICghY29tbWl0X3dpdGhfcHJlZWRpdCkKKwlwcmVlZGl0X3N0YXJ0X2NvbCA9IE1BWENPTDsKKworICAgIC8qIFRoaXMgZmxhZyBpcyB1c2VkIGluIGNoYW5nZWQoKSBhdCBuZXh0IGNhbGwuICovCisgICAgeGltX2NoYW5nZWRfd2hpbGVfcHJlZWRpdGluZyA9IFRSVUU7CisKKyAgICBpZiAoZ3RrX21haW5fbGV2ZWwoKSA+IDApCisJZ3RrX21haW5fcXVpdCgpOworfQorCisvKgorICogQ2FsbGJhY2sgaW52b2tlZCBhZnRlciBzdGFydCB0byB0aGUgcHJlZWRpdC4KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2ltX3ByZWVkaXRfc3RhcnRfY2IoR3RrSU1Db250ZXh0ICpjb250ZXh0LCBncG9pbnRlciBkYXRhKQoreworI2lmZGVmIFhJTV9ERUJVRworICAgIHhpbV9sb2coImltX3ByZWVkaXRfc3RhcnRfY2IoKVxuIik7CisjZW5kaWYKKworICAgIGltX2lzX2FjdGl2ZSA9IFRSVUU7CisgICAgZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworfQorCisvKgorICogQ2FsbGJhY2sgaW52b2tlZCBhZnRlciBlbmQgdG8gdGhlIHByZWVkaXQuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitpbV9wcmVlZGl0X2VuZF9jYihHdGtJTUNvbnRleHQgKmNvbnRleHQsIGdwb2ludGVyIGRhdGEpCit7CisjaWZkZWYgWElNX0RFQlVHCisgICAgeGltX2xvZygiaW1fcHJlZWRpdF9lbmRfY2IoKVxuIik7CisjZW5kaWYKKyAgICBpbV9kZWxldGVfcHJlZWRpdCgpOworCisgICAgLyogSW5kaWNhdGUgdGhhdCBwcmVlZGl0aW5nIGhhcyBmaW5pc2hlZCAqLworICAgIHByZWVkaXRfc3RhcnRfY29sID0gTUFYQ09MOworICAgIHhpbV9oYXNfcHJlZWRpdGluZyA9IEZBTFNFOworCisgICAgaW1faXNfYWN0aXZlID0gRkFMU0U7CisgICAgZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOworICAgIGltX3Nob3dfaW5mbygpOworfQorCisvKgorICogQ2FsbGJhY2sgaW52b2tlZCBhZnRlciBjaGFuZ2VzIHRvIHRoZSBwcmVlZGl0IHN0cmluZy4gIElmIHRoZSBwcmVlZGl0CisgKiBzdHJpbmcgd2FzIGVtcHR5IGJlZm9yZSwgcmVtZW1iZXIgdGhlIHByZWVkaXQgc3RhcnQgY29sdW1uIHNvIHdlIGtub3cKKyAqIHdoZXJlIHRvIGFwcGx5IGZlZWRiYWNrIGF0dHJpYnV0ZXMuICBEZWxldGUgdGhlIHByZXZpb3VzIHByZWVkaXQgc3RyaW5nCisgKiBpZiB0aGVyZSB3YXMgb25lLCBzYXZlIHRoZSBuZXcgcHJlZWRpdCBjdXJzb3Igb2Zmc2V0LCBhbmQgcHV0IHRoZSBuZXcKKyAqIHN0cmluZyBpbnRvIHRoZSBpbnB1dCBidWZmZXIuCisgKgorICogVE9ETzogVGhlIHByYWdtYXRpYyAicHV0IGludG8gaW5wdXQgYnVmZmVyIiBhcHByb2FjaCB1c2VkIGhlcmUgaGFzCisgKiAgICAgICBzZXZlcmFsIGZ1bmRhbWVudGFsIHByb2JsZW1zOgorICoKKyAqIC0gVGhlIGNoYXJhY3RlcnMgaW4gdGhlIHByZWVkaXQgc3RyaW5nIGFyZSBzdWJqZWN0IHRvIHJlbWFwcGluZy4KKyAqICAgVGhhdCdzIGJyb2tlbiwgb25seSB0aGUgZmluYWxseSBjb21taXR0ZWQgc3RyaW5nIHNob3VsZCBiZSByZW1hcHBlZC4KKyAqCisgKiAtIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gaW52b2x2ZWQ6ICBUaGUgcmV0cmlldmVkIHZhbHVlIGZvciB0aGUKKyAqICAgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gd2lsbCBiZSB3cm9uZyBpZiBhbnkgdW5wcm9jZXNzZWQgY2hhcmFjdGVycworICogICBhcmUgc3RpbGwgcXVldWVkIGluIHRoZSBpbnB1dCBidWZmZXIuCisgKgorICogLSBEdWUgdG8gdGhlIGxhY2sgb2Ygc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIGZpbGUgYnVmZmVyIGluIG1lbW9yeQorICogICBhbmQgYW55IHR5cGVkIGNoYXJhY3RlcnMsIGl0J3MgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhlCisgKiAgICJyZXRyaWV2ZV9zdXJyb3VuZGluZyIgYW5kICJkZWxldGVfc3Vycm91bmRpbmciIHNpZ25hbHMgcmVsaWFibHkuICBJTQorICogICBtb2R1bGVzIGZvciBsYW5ndWFnZXMgc3VjaCBhcyBUaGFpIGFyZSBsaWtlbHkgdG8gcmVseSBvbiB0aGlzIGZlYXR1cmUKKyAqICAgZm9yIHByb3BlciBvcGVyYXRpb24uCisgKgorICogQ29uY2x1c2lvbnM6ICBJIHRoaW5rIHN1cHBvcnQgZm9yIHByZWVkaXRpbmcgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlCisgKiBjb3JlIHBhcnRzIG9mIFZpbS4gIElkZWFsbHksIHVudGlsIGl0IGhhcyBiZWVuIGNvbW1pdHRlZCwgdGhlIHByZWVkaXRpbmcKKyAqIHN0cmluZyBzaG91bGQgb25seSBiZSBkaXNwbGF5ZWQgYW5kIG5vdCBhZmZlY3QgdGhlIGJ1ZmZlciBjb250ZW50IGF0IGFsbC4KKyAqIFRoZSBxdWVzdGlvbiBob3cgdG8gZGVhbCB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24gaXNzdWUgc3RpbGwgcmVtYWlucy4KKyAqIENpcmN1bXZlbnRpbmcgdGhlIGlucHV0IGJ1ZmZlciBpcyBwcm9iYWJseSBub3QgZGVzaXJhYmxlLiAgQW55d2F5LCBJIHRoaW5rCisgKiBpbXBsZW1lbnRpbmcgInJldHJpZXZlX3N1cnJvdW5kaW5nIiBpcyB0aGUgb25seSBoYXJkIHByb2JsZW0uCisgKgorICogT25lIHdheSB0byBzb2x2ZSBhbGwgb2YgdGhpcyBpbiBhIGNsZWFuIG1hbm5lciB3b3VsZCBiZSB0byBxdWV1ZSBhbGwga2V5CisgKiBwcmVzcy9yZWxlYXNlIGV2ZW50cyAiYXMgaXMiIGluIHRoZSBpbnB1dCBidWZmZXIsIGFuZCBhcHBseSB0aGUgSU0gZmlsdGVyaW5nCisgKiBhdCB0aGUgcmVjZWl2aW5nIGVuZCBvZiB0aGUgcXVldWUuICBUaGlzLCBob3dldmVyLCB3b3VsZCBoYXZlIGEgcmF0aGVyIGxhcmdlCisgKiBpbXBhY3Qgb24gdGhlIGNvZGUgYmFzZS4gIElmIHRoZXJlIGlzIGFuIGVhc3kgd2F5IHRvIGZvcmNlIHByb2Nlc3Npbmcgb2YgYWxsCisgKiByZW1haW5pbmcgaW5wdXQgZnJvbSB3aXRoaW4gdGhlICJyZXRyaWV2ZV9zdXJyb3VuZGluZyIgc2lnbmFsIGhhbmRsZXIsIHRoaXMKKyAqIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkuICBHb3R0YSBhc2sgb24gdmltLWRldiBmb3Igb3BpbmlvbnMuCisgKi8KKy8qQVJHU1VTRUQxKi8KKyAgICBzdGF0aWMgdm9pZAoraW1fcHJlZWRpdF9jaGFuZ2VkX2NiKEd0a0lNQ29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyICAgICpwcmVlZGl0X3N0cmluZyA9IE5VTEw7CisgICAgaW50CSAgICBjdXJzb3JfaW5kZXggICAgPSAwOworICAgIGludAkgICAgbnVtX21vdmVfYmFjayAgID0gMDsKKyAgICBjaGFyX3UgICpzdHI7CisgICAgY2hhcl91ICAqcDsKKyAgICBpbnQJICAgIGk7CisKKyAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcoY29udGV4dCwKKwkJCQkgICAgICAmcHJlZWRpdF9zdHJpbmcsIE5VTEwsCisJCQkJICAgICAgJmN1cnNvcl9pbmRleCk7CisKKyNpZmRlZiBYSU1fREVCVUcKKyAgICB4aW1fbG9nKCJpbV9wcmVlZGl0X2NoYW5nZWRfY2IoKTogJXNcbiIsIHByZWVkaXRfc3RyaW5nKTsKKyNlbmRpZgorCisgICAgZ19yZXR1cm5faWZfZmFpbChwcmVlZGl0X3N0cmluZyAhPSBOVUxMKTsgLyoganVzdCBpbiBjYXNlICovCisKKyAgICAvKiBJZiBwcmVlZGl0X3N0YXJ0X2NvbCBpcyBNQVhDT0wgc2V0IGl0IHRvIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4gKi8KKyAgICBpZiAocHJlZWRpdF9zdGFydF9jb2wgPT0gTUFYQ09MICYmIHByZWVkaXRfc3RyaW5nWzBdICE9ICdcMCcpCisgICAgeworCXhpbV9oYXNfcHJlZWRpdGluZyA9IFRSVUU7CisKKwkvKiBVcmdoLCB0aGlzIGJyZWFrcyBpZiB0aGUgaW5wdXQgYnVmZmVyIGlzbid0IGVtcHR5IG5vdyAqLworCWluaXRfcHJlZWRpdF9zdGFydF9jb2woKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY3Vyc29yX2luZGV4ID09IDAgJiYgcHJlZWRpdF9zdHJpbmdbMF0gPT0gJ1wwJykKKyAgICB7CisJaWYgKHByZWVkaXRfc3RhcnRfY29sID09IE1BWENPTCkKKwkgICAgeGltX2hhc19wcmVlZGl0aW5nID0gRkFMU0U7CisKKwkvKiBJZiBhdCB0aGUgc3RhcnQgcG9zaXRpb24gKGFmdGVyIHR5cGluZyBiYWNrc3BhY2UpCisJICogcHJlZWRpdF9zdGFydF9jb2wgbXVzdCBiZSByZXNldC4gKi8KKwlwcmVlZGl0X3N0YXJ0X2NvbCA9IE1BWENPTDsKKyAgICB9CisKKyAgICBpbV9kZWxldGVfcHJlZWRpdCgpOworCisgICAgLyoKKyAgICAgKiBDb21wdXRlIHRoZSBlbmQgb2YgdGhlIHByZWVkaXRpbmcgYXJlYTogInByZWVkaXRfZW5kX2NvbCIuCisgICAgICogQWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9mIGd0a19pbV9jb250ZXh0X2dldF9wcmVlZGl0X3N0cmluZygpLAorICAgICAqIHRoZSBjdXJzb3JfcG9zIG91dHB1dCBhcmd1bWVudCByZXR1cm5zIHRoZSBvZmZzZXQgaW4gYnl0ZXMuICBUaGlzIGlzCisgICAgICogdW5mb3J0dW5hdGVseSBub3QgdHJ1ZSAtLSByZWFsIGxpZmUgc2hvd3MgdGhlIG9mZnNldCBpcyBpbiBjaGFyYWN0ZXJzLAorICAgICAqIGFuZCB0aGUgR1RLKyBzb3VyY2UgY29kZSBhZ3JlZXMgd2l0aCBtZS4gIFdpbGwgZmlsZSBhIGJ1ZyBsYXRlci4KKyAgICAgKi8KKyAgICBpZiAocHJlZWRpdF9zdGFydF9jb2wgIT0gTUFYQ09MKQorCXByZWVkaXRfZW5kX2NvbCA9IHByZWVkaXRfc3RhcnRfY29sOworICAgIHN0ciA9IChjaGFyX3UgKilwcmVlZGl0X3N0cmluZzsKKyAgICBmb3IgKHAgPSBzdHIsIGkgPSAwOyAqcCAhPSBOVUw7IHAgKz0gdXRmX2J5dGUybGVuKCpwKSwgKytpKQorICAgIHsKKwlpbnQgaXNfY29tcG9zaW5nOworCisJaXNfY29tcG9zaW5nID0gKCgqcCAmIDB4ODApICE9IDAgJiYgdXRmX2lzY29tcG9zaW5nKHV0Zl9wdHIyY2hhcihwKSkpOworCS8qCisJICogVGhlc2Ugb2Zmc2V0cyBhcmUgdXNlZCBhcyBjb3VudGVycyB3aGVuIGdlbmVyYXRpbmcgPEJTPiBhbmQgPERlbD4KKwkgKiB0byBkZWxldGUgdGhlIHByZWVkaXQgc3RyaW5nLiAgU28gZG9uJ3QgY291bnQgY29tcG9zaW5nIGNoYXJhY3RlcnMKKwkgKiB1bmxlc3MgJ2RlbGNvbWJpbmUnIGlzIGVuYWJsZWQuCisJICovCisJaWYgKCFpc19jb21wb3NpbmcgfHwgcF9kZWNvKQorCXsKKwkgICAgaWYgKGkgPCBjdXJzb3JfaW5kZXgpCisJCSsraW1fcHJlZWRpdF9jdXJzb3I7CisJICAgIGVsc2UKKwkJKytpbV9wcmVlZGl0X3RyYWlsaW5nOworCX0KKwlpZiAoIWlzX2NvbXBvc2luZyAmJiBpID49IGN1cnNvcl9pbmRleCkKKwl7CisJICAgIC8qIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgaW1fcHJlZWRpdF90cmFpbGluZywgZXhjZXB0CisJICAgICAqIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGFyZSBub3QgY291bnRlZCBldmVuIGlmIHBfZGVjbyBpcyBzZXQuICovCisJICAgICsrbnVtX21vdmVfYmFjazsKKwl9CisJaWYgKHByZWVkaXRfc3RhcnRfY29sICE9IE1BWENPTCkKKwkgICAgcHJlZWRpdF9lbmRfY29sICs9IHV0Zl9wdHIyY2VsbHMocCk7CisgICAgfQorCisgICAgaWYgKHAgPiBzdHIpCisgICAgeworCWltX2FkZF90b19pbnB1dChzdHIsIChpbnQpKHAgLSBzdHIpKTsKKwlpbV9jb3JyZWN0X2N1cnNvcihudW1fbW92ZV9iYWNrKTsKKyAgICB9CisKKyAgICBnX2ZyZWUocHJlZWRpdF9zdHJpbmcpOworCisgICAgaWYgKGd0a19tYWluX2xldmVsKCkgPiAwKQorCWd0a19tYWluX3F1aXQoKTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSB0aGUgUGFuZ28gYXR0cmlidXRlcyBhdCBpdGVyIHRvIFZpbSBoaWdobGlnaHRpbmcgYXR0cmlidXRlcy4KKyAqIElnbm9yZSBhdHRyaWJ1dGVzIG5vdCBzdXBwb3J0ZWQgYnkgVmltIGhpZ2hsaWdodGluZy4gIFRoaXMgc2hvdWxkbid0IGhhdmUKKyAqIHRvbyBtdWNoIGltcGFjdCAtLSByaWdodCBub3cgd2UgaGFuZGxlIGV2ZW4gbW9yZSBhdHRyaWJ1dGVzIHRoYW4gbmVjZXNzYXJ5CisgKiBmb3IgdGhlIElNIG1vZHVsZXMgSSB0ZXN0ZWQgd2l0aC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3RyYW5zbGF0ZV9wYW5nb19hdHRyaWJ1dGVzKFBhbmdvQXR0ckl0ZXJhdG9yICppdGVyKQoreworICAgIFBhbmdvQXR0cmlidXRlICAqYXR0cjsKKyAgICBpbnQJCSAgICBjaGFyX2F0dHIgPSBITF9OT1JNQUw7CisKKyAgICBhdHRyID0gcGFuZ29fYXR0cl9pdGVyYXRvcl9nZXQoaXRlciwgUEFOR09fQVRUUl9VTkRFUkxJTkUpOworICAgIGlmIChhdHRyICE9IE5VTEwgJiYgKChQYW5nb0F0dHJJbnQgKilhdHRyKS0+dmFsdWUKKwkJCQkJCSAhPSAoaW50KVBBTkdPX1VOREVSTElORV9OT05FKQorCWNoYXJfYXR0ciB8PSBITF9VTkRFUkxJTkU7CisKKyAgICBhdHRyID0gcGFuZ29fYXR0cl9pdGVyYXRvcl9nZXQoaXRlciwgUEFOR09fQVRUUl9XRUlHSFQpOworICAgIGlmIChhdHRyICE9IE5VTEwgJiYgKChQYW5nb0F0dHJJbnQgKilhdHRyKS0+dmFsdWUgPj0gKGludClQQU5HT19XRUlHSFRfQk9MRCkKKwljaGFyX2F0dHIgfD0gSExfQk9MRDsKKworICAgIGF0dHIgPSBwYW5nb19hdHRyX2l0ZXJhdG9yX2dldChpdGVyLCBQQU5HT19BVFRSX1NUWUxFKTsKKyAgICBpZiAoYXR0ciAhPSBOVUxMICYmICgoUGFuZ29BdHRySW50ICopYXR0ciktPnZhbHVlCisJCQkJCQkgICAhPSAoaW50KVBBTkdPX1NUWUxFX05PUk1BTCkKKwljaGFyX2F0dHIgfD0gSExfSVRBTElDOworCisgICAgYXR0ciA9IHBhbmdvX2F0dHJfaXRlcmF0b3JfZ2V0KGl0ZXIsIFBBTkdPX0FUVFJfQkFDS0dST1VORCk7CisgICAgaWYgKGF0dHIgIT0gTlVMTCkKKyAgICB7CisJY29uc3QgUGFuZ29Db2xvciAqY29sb3IgPSAmKChQYW5nb0F0dHJDb2xvciAqKWF0dHIpLT5jb2xvcjsKKworCS8qIEFzc3VtZSBpbnZlcnNlIGlmIGJsYWNrIGJhY2tncm91bmQgaXMgcmVxdWVzdGVkICovCisJaWYgKChjb2xvci0+cmVkIHwgY29sb3ItPmdyZWVuIHwgY29sb3ItPmJsdWUpID09IDApCisJICAgIGNoYXJfYXR0ciB8PSBITF9JTlZFUlNFOworICAgIH0KKworICAgIHJldHVybiBjaGFyX2F0dHI7Cit9CisKKy8qCisgKiBSZXRyaWV2ZSB0aGUgaGlnaGxpZ2h0aW5nIGF0dHJpYnV0ZXMgYXQgY29sdW1uIGNvbCBpbiB0aGUgcHJlZWRpdCBzdHJpbmcuCisgKiBSZXR1cm4gLTEgaWYgbm90IGluIHByZWVkaXRpbmcgbW9kZSBvciBpZiBjb2wgaXMgb3V0IG9mIHJhbmdlLgorICovCisgICAgaW50CitpbV9nZXRfZmVlZGJhY2tfYXR0cihpbnQgY29sKQoreworICAgIGNoYXIJICAgICpwcmVlZGl0X3N0cmluZyA9IE5VTEw7CisgICAgUGFuZ29BdHRyTGlzdCAgICphdHRyX2xpc3QJICAgID0gTlVMTDsKKyAgICBpbnQJCSAgICBjaGFyX2F0dHIJICAgID0gLTE7CisKKyAgICBpZiAoeGljID09IE5VTEwpCisJcmV0dXJuIGNoYXJfYXR0cjsKKworICAgIGd0a19pbV9jb250ZXh0X2dldF9wcmVlZGl0X3N0cmluZyh4aWMsICZwcmVlZGl0X3N0cmluZywgJmF0dHJfbGlzdCwgTlVMTCk7CisKKyAgICBpZiAocHJlZWRpdF9zdHJpbmcgIT0gTlVMTCAmJiBhdHRyX2xpc3QgIT0gTlVMTCkKKyAgICB7CisJaW50IGluZGV4OworCisJLyogR2V0IHRoZSBieXRlIGluZGV4IGFzIHVzZWQgYnkgUGFuZ29BdHRySXRlcmF0b3IgKi8KKwlmb3IgKGluZGV4ID0gMDsgY29sID4gMCAmJiBwcmVlZGl0X3N0cmluZ1tpbmRleF0gIT0gJ1wwJzsgLS1jb2wpCisJICAgIGluZGV4ICs9IHV0ZmNfcHRyMmxlbl9jaGVjaygoY2hhcl91ICopcHJlZWRpdF9zdHJpbmcgKyBpbmRleCk7CisKKwlpZiAocHJlZWRpdF9zdHJpbmdbaW5kZXhdICE9ICdcMCcpCisJeworCSAgICBQYW5nb0F0dHJJdGVyYXRvcgkqaXRlcjsKKwkgICAgaW50CQkJc3RhcnQsIGVuZDsKKworCSAgICBjaGFyX2F0dHIgPSBITF9OT1JNQUw7CisJICAgIGl0ZXIgPSBwYW5nb19hdHRyX2xpc3RfZ2V0X2l0ZXJhdG9yKGF0dHJfbGlzdCk7CisKKwkgICAgLyogRXh0cmFjdCBhbGwgcmVsZXZhbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBsaXN0LiAqLworCSAgICBkbworCSAgICB7CisJCXBhbmdvX2F0dHJfaXRlcmF0b3JfcmFuZ2UoaXRlciwgJnN0YXJ0LCAmZW5kKTsKKworCQlpZiAoaW5kZXggPj0gc3RhcnQgJiYgaW5kZXggPCBlbmQpCisJCSAgICBjaGFyX2F0dHIgfD0gdHJhbnNsYXRlX3BhbmdvX2F0dHJpYnV0ZXMoaXRlcik7CisJICAgIH0KKwkgICAgd2hpbGUgKHBhbmdvX2F0dHJfaXRlcmF0b3JfbmV4dChpdGVyKSk7CisKKwkgICAgcGFuZ29fYXR0cl9pdGVyYXRvcl9kZXN0cm95KGl0ZXIpOworCX0KKyAgICB9CisKKyAgICBpZiAoYXR0cl9saXN0ICE9IE5VTEwpCisJcGFuZ29fYXR0cl9saXN0X3VucmVmKGF0dHJfbGlzdCk7CisgICAgZ19mcmVlKHByZWVkaXRfc3RyaW5nKTsKKworICAgIHJldHVybiBjaGFyX2F0dHI7Cit9CisKKyAgICB2b2lkCit4aW1faW5pdCh2b2lkKQoreworI2lmZGVmIFhJTV9ERUJVRworICAgIHhpbV9sb2coInhpbV9pbml0KClcbiIpOworI2VuZGlmCisKKyAgICBnX3JldHVybl9pZl9mYWlsKGd1aS5kcmF3YXJlYSAhPSBOVUxMKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGd1aS5kcmF3YXJlYS0+d2luZG93ICE9IE5VTEwpOworCisgICAgeGljID0gZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKTsKKyAgICBnX29iamVjdF9yZWYoeGljKTsKKworICAgIGltX2NvbW1pdF9oYW5kbGVyX2lkID0gZ19zaWduYWxfY29ubmVjdChHX09CSkVDVCh4aWMpLCAiY29tbWl0IiwKKwkJCQkJICAgIEdfQ0FMTEJBQ0soJmltX2NvbW1pdF9jYiksIE5VTEwpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QoeGljKSwgInByZWVkaXRfY2hhbmdlZCIsCisJCSAgICAgR19DQUxMQkFDSygmaW1fcHJlZWRpdF9jaGFuZ2VkX2NiKSwgTlVMTCk7CisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVCh4aWMpLCAicHJlZWRpdF9zdGFydCIsCisJCSAgICAgR19DQUxMQkFDSygmaW1fcHJlZWRpdF9zdGFydF9jYiksIE5VTEwpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QoeGljKSwgInByZWVkaXRfZW5kIiwKKwkJICAgICBHX0NBTExCQUNLKCZpbV9wcmVlZGl0X2VuZF9jYiksIE5VTEwpOworCisgICAgZ3RrX2ltX2NvbnRleHRfc2V0X2NsaWVudF93aW5kb3coeGljLCBndWkuZHJhd2FyZWEtPndpbmRvdyk7Cit9CisKKyAgICB2b2lkCitpbV9zaHV0ZG93bih2b2lkKQoreworI2lmZGVmIFhJTV9ERUJVRworICAgIHhpbV9sb2coImltX3NodXRkb3duKClcbiIpOworI2VuZGlmCisKKyAgICBpZiAoeGljICE9IE5VTEwpCisgICAgeworCWd0a19pbV9jb250ZXh0X2ZvY3VzX291dCh4aWMpOworCWdfb2JqZWN0X3VucmVmKHhpYyk7CisJeGljID0gTlVMTDsKKyAgICB9CisgICAgaW1faXNfYWN0aXZlID0gRkFMU0U7CisgICAgaW1fY29tbWl0X2hhbmRsZXJfaWQgPSAwOworICAgIHByZWVkaXRfc3RhcnRfY29sID0gTUFYQ09MOworICAgIHhpbV9oYXNfcHJlZWRpdGluZyA9IEZBTFNFOworfQorCisvKgorICogQ29udmVydCB0aGUgc3RyaW5nIGFyZ3VtZW50IHRvIGtleXZhbCBhbmQgc3RhdGUgZm9yIEdka0V2ZW50S2V5LgorICogSWYgc3RyIGlzIHZhbGlkIHJldHVybiBUUlVFLCBvdGhlcndpc2UgRkFMU0UuCisgKgorICogU2VlICdpbWFjdGl2YXRla2V5JyBmb3IgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZm9ybWF0LgorICovCisgICAgc3RhdGljIGludAoraW1fc3RyaW5nX3RvX2tleXZhbChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqa2V5dmFsLCB1bnNpZ25lZCBpbnQgKnN0YXRlKQoreworICAgIGNvbnN0IGNoYXIJICAgICptb2RzX2VuZDsKKyAgICB1bnNpZ25lZAkgICAgdG1wX2tleXZhbDsKKyAgICB1bnNpZ25lZAkgICAgdG1wX3N0YXRlID0gMDsKKworICAgIG1vZHNfZW5kID0gc3RycmNocihzdHIsICctJyk7CisgICAgbW9kc19lbmQgPSAobW9kc19lbmQgIT0gTlVMTCkgPyBtb2RzX2VuZCArIDEgOiBzdHI7CisKKyAgICAvKiBQYXJzZSBtb2RpZmllciBrZXlzICovCisgICAgd2hpbGUgKHN0ciA8IG1vZHNfZW5kKQorCXN3aXRjaCAoKnN0cisrKQorCXsKKwkgICAgY2FzZSAnLSc6CQkJCQkJCWJyZWFrOworCSAgICBjYXNlICdTJzogY2FzZSAncyc6IHRtcF9zdGF0ZSB8PSAodW5zaWduZWQpR0RLX1NISUZUX01BU0s7CWJyZWFrOworCSAgICBjYXNlICdMJzogY2FzZSAnbCc6IHRtcF9zdGF0ZSB8PSAodW5zaWduZWQpR0RLX0xPQ0tfTUFTSzsJYnJlYWs7CisJICAgIGNhc2UgJ0MnOiBjYXNlICdjJzogdG1wX3N0YXRlIHw9ICh1bnNpZ25lZClHREtfQ09OVFJPTF9NQVNLO2JyZWFrOworCSAgICBjYXNlICcxJzoJCXRtcF9zdGF0ZSB8PSAodW5zaWduZWQpR0RLX01PRDFfTUFTSzsJYnJlYWs7CisJICAgIGNhc2UgJzInOgkJdG1wX3N0YXRlIHw9ICh1bnNpZ25lZClHREtfTU9EMl9NQVNLOwlicmVhazsKKwkgICAgY2FzZSAnMyc6CQl0bXBfc3RhdGUgfD0gKHVuc2lnbmVkKUdES19NT0QzX01BU0s7CWJyZWFrOworCSAgICBjYXNlICc0JzoJCXRtcF9zdGF0ZSB8PSAodW5zaWduZWQpR0RLX01PRDRfTUFTSzsJYnJlYWs7CisJICAgIGNhc2UgJzUnOgkJdG1wX3N0YXRlIHw9ICh1bnNpZ25lZClHREtfTU9ENV9NQVNLOwlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJcmV0dXJuIEZBTFNFOworCX0KKworICAgIHRtcF9rZXl2YWwgPSBnZGtfa2V5dmFsX2Zyb21fbmFtZShzdHIpOworCisgICAgaWYgKHRtcF9rZXl2YWwgPT0gMCB8fCB0bXBfa2V5dmFsID09IEdES19Wb2lkU3ltYm9sKQorCXJldHVybiBGQUxTRTsKKworICAgIGlmIChrZXl2YWwgIT0gTlVMTCkKKwkqa2V5dmFsID0gdG1wX2tleXZhbDsKKyAgICBpZiAoc3RhdGUgIT0gTlVMTCkKKwkqc3RhdGUgPSB0bXBfc3RhdGU7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHBfaW1hayBpcyB2YWxpZCwgb3RoZXJ3aXNlIEZBTFNFLiAgQXMgYSBzcGVjaWFsIGNhc2UsIGFuCisgKiBlbXB0eSBzdHJpbmcgaXMgYWxzbyByZWdhcmRlZCBhcyB2YWxpZC4KKyAqCisgKiBOb3RlOiBUaGUgbnVtZXJpY2FsIGtleSB2YWx1ZSBvZiBwX2ltYWsgaXMgY2FjaGVkIGlmIGl0IHdhcyB2YWxpZDsgdGh1cworICogYm9sZGx5IGFzc3VtaW5nIGltX3hpbV9pc3ZhbGlkX2ltYWN0aXZhdGUoKSB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgd2hlbmV2ZXIKKyAqICdpbWFrJyBjaGFuZ2VzLiAgVGhpcyBpcyBjdXJyZW50bHkgdGhlIGNhc2UgYnV0IG5vdCBvYnZpb3VzIC0tIHNob3VsZAorICogcHJvYmFibHkgcmVuYW1lIHRoZSBmdW5jdGlvbiBmb3IgY2xhcml0eS4KKyAqLworICAgIGludAoraW1feGltX2lzdmFsaWRfaW1hY3RpdmF0ZSh2b2lkKQoreworICAgIGlmIChwX2ltYWtbMF0gPT0gTlVMKQorICAgIHsKKwlpbV9hY3RpdmF0ZWtleV9rZXl2YWwgPSBHREtfVm9pZFN5bWJvbDsKKwlpbV9hY3RpdmF0ZWtleV9zdGF0ZSAgPSAwOworCXJldHVybiBUUlVFOworICAgIH0KKworICAgIHJldHVybiBpbV9zdHJpbmdfdG9fa2V5dmFsKChjb25zdCBjaGFyICopcF9pbWFrLAorCQkJICAgICAgICZpbV9hY3RpdmF0ZWtleV9rZXl2YWwsCisJCQkgICAgICAgJmltX2FjdGl2YXRla2V5X3N0YXRlKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitpbV9zeW50aGVzaXplX2tleXByZXNzKHVuc2lnbmVkIGludCBrZXl2YWwsIHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKyAgICBHZGtFdmVudEtleSAqZXZlbnQ7CisKKyMgIGlmZGVmIEhBVkVfR1RLX01VTFRJSEVBRAorICAgIGV2ZW50ID0gKEdka0V2ZW50S2V5ICopZ2RrX2V2ZW50X25ldyhHREtfS0VZX1BSRVNTKTsKKyAgICBnX29iamVjdF9yZWYoZ3VpLmRyYXdhcmVhLT53aW5kb3cpOyAvKiB1bnJlZmZlZCBieSBnZGtfZXZlbnRfZnJlZSgpICovCisjICBlbHNlCisgICAgZXZlbnQgPSAoR2RrRXZlbnRLZXkgKilnX21hbGxvYzAoKGd1bG9uZylzaXplb2YoR2RrRXZlbnQpKTsKKyAgICBldmVudC0+dHlwZSA9IEdES19LRVlfUFJFU1M7CisjICBlbmRpZgorICAgIGV2ZW50LT53aW5kb3cgPSBndWkuZHJhd2FyZWEtPndpbmRvdzsKKyAgICBldmVudC0+c2VuZF9ldmVudCA9IFRSVUU7CisgICAgZXZlbnQtPnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5zdGF0ZSAgPSBzdGF0ZTsKKyAgICBldmVudC0+a2V5dmFsID0ga2V5dmFsOworICAgIGV2ZW50LT5oYXJkd2FyZV9rZXljb2RlID0gLyogbmVlZGVkIGZvciBYSU0gKi8KKwlYS2V5c3ltVG9LZXljb2RlKEdES19XSU5ET1dfWERJU1BMQVkoZXZlbnQtPndpbmRvdyksIChLZXlTeW0pa2V5dmFsKTsKKyAgICBldmVudC0+bGVuZ3RoID0gMDsKKyAgICBldmVudC0+c3RyaW5nID0gTlVMTDsKKworICAgIGd0a19pbV9jb250ZXh0X2ZpbHRlcl9rZXlwcmVzcyh4aWMsIGV2ZW50KTsKKworICAgIC8qIEZvciBjb25zaXN0ZW5jeSwgYWxzbyBzZW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlbGVhc2UgZXZlbnQuICovCisgICAgZXZlbnQtPnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7CisgICAgZXZlbnQtPnNlbmRfZXZlbnQgPSBGQUxTRTsKKyAgICBndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MoeGljLCBldmVudCk7CisKKyMgIGlmZGVmIEhBVkVfR1RLX01VTFRJSEVBRAorICAgIGdka19ldmVudF9mcmVlKChHZGtFdmVudCAqKWV2ZW50KTsKKyMgIGVsc2UKKyAgICBnX2ZyZWUoZXZlbnQpOworIyAgZW5kaWYKK30KKworICAgIHZvaWQKK3hpbV9yZXNldCh2b2lkKQoreworICAgIGlmICh4aWMgIT0gTlVMTCkKKyAgICB7CisJLyoKKwkgKiBUaGUgdGhpcmQtcGFydHkgaW1oYW5ndWwgbW9kdWxlIChhbmQgbWF5YmUgb3RoZXJzIHRvbykgaWdub3JlcworCSAqIGd0a19pbV9jb250ZXh0X3Jlc2V0KCkgb3IgYXQgbGVhc3QgZG9lc24ndCByZXNldCB0aGUgYWN0aXZlIHN0YXRlLgorCSAqIFRodXMgc2VuZGluZyBpbWFjdGl2YXRla2V5IHdvdWxkIHR1cm4gaXQgb2ZmIGlmIGl0IHdhcyBvbiBiZWZvcmUsCisJICogd2hpY2ggaXMgY2xlYXJseSBub3Qgd2hhdCB3ZSB3YW50LiAgRm9ydHVuYXRlbHkgd2UgY2FuIHdvcmsgYXJvdW5kCisJICogdGhhdCBmb3IgaW1oYW5ndWwgYnkgc2VuZGluZyBHREtfRXNjYXBlLCBidXQgSSBkb24ndCBrbm93IGlmIGl0CisJICogd29ya3Mgd2l0aCBhbGwgSU0gbW9kdWxlcyB0aGF0IHN1cHBvcnQgYW4gYWN0aXZhdGlvbiBrZXkgOi8KKwkgKgorCSAqIEFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGRlc3Ryb3kgdGhlIElNIGNvbnRleHQgYW5kCisJICogcmVjcmVhdGUgaXQuICBCdXQgdGhhdCBtZWFucyBsb2FkaW5nL3VubG9hZGluZyB0aGUgSU0gbW9kdWxlIG9uCisJICogZXZlcnkgbW9kZSBzd2l0Y2gsIHdoaWNoIGNhdXNlcyBhIHF1aXRlIG5vdGljYWJsZSBkZWxheSBldmVuIG9uCisJICogbXkgcmF0aGVyIGZhc3QgYm94Li4uCisJICogKgorCSAqIE1vcmVvdmVyLCB0aGVyZSBhcmUgc29tZSBYSU0gd2hpY2ggY2Fubm90IHJlc3BvbmQgdG8KKwkgKiBpbV9zeW50aGVzaXplX2tleXByZXNzKCkuIHdlIGhvcGUgdGhhdCB0aGV5IHJlc2V0IGJ5CisJICogeGltX3NodXRkb3duKCkuCisJICovCisJaWYgKGltX2FjdGl2YXRla2V5X2tleXZhbCAhPSBHREtfVm9pZFN5bWJvbCAmJiBpbV9pc19hY3RpdmUpCisJICAgIGltX3N5bnRoZXNpemVfa2V5cHJlc3MoR0RLX0VzY2FwZSwgMFUpOworCisJZ3RrX2ltX2NvbnRleHRfcmVzZXQoeGljKTsKKworCS8qCisJICogSEFDSyBmb3IgQW1pOiBUaGlzIHNlcXVlbmNlIG9mIGZ1bmN0aW9uIGNhbGxzIG1ha2VzIEFtaSBoYW5kbGUKKwkgKiB0aGUgSU0gcmVzZXQgZ3JhdGlvdXNseSwgd2l0aG91dCBicmVha2luZyBsb2FkcyBvZiBvdGhlciBzdHVmZi4KKwkgKiBJdCBzZWVtcyB0byBmb3JjZSBFbmdsaXNoIG1vZGUgYXMgd2VsbCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlCisJICogd2FudCBiZWNhdXNlIGl0IG1ha2VzIHRoZSBBbWkgc3RhdHVzIGRpc3BsYXkgd29yayByZWxpYWJseS4KKwkgKi8KKwlndGtfaW1fY29udGV4dF9zZXRfdXNlX3ByZWVkaXQoeGljLCBGQUxTRSk7CisKKwlpZiAocF9pbWRpc2FibGUpCisJICAgIGltX3NodXRkb3duKCk7CisJZWxzZQorCXsKKwkgICAgZ3RrX2ltX2NvbnRleHRfc2V0X3VzZV9wcmVlZGl0KHhpYywgVFJVRSk7CisJICAgIHhpbV9zZXRfZm9jdXMoZ3VpLmluX2ZvY3VzKTsKKworCSAgICBpZiAoaW1fYWN0aXZhdGVrZXlfa2V5dmFsICE9IEdES19Wb2lkU3ltYm9sKQorCSAgICB7CisJCWlmIChpbV9pc19hY3RpdmUpCisJCXsKKwkJICAgIGdfc2lnbmFsX2hhbmRsZXJfYmxvY2soeGljLCBpbV9jb21taXRfaGFuZGxlcl9pZCk7CisJCSAgICBpbV9zeW50aGVzaXplX2tleXByZXNzKGltX2FjdGl2YXRla2V5X2tleXZhbCwKKwkJCQkJCSAgICBpbV9hY3RpdmF0ZWtleV9zdGF0ZSk7CisJCSAgICBnX3NpZ25hbF9oYW5kbGVyX3VuYmxvY2soeGljLCBpbV9jb21taXRfaGFuZGxlcl9pZCk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaW1fc2h1dGRvd24oKTsKKwkJeGltX2luaXQoKTsKKwkJeGltX3NldF9mb2N1cyhndWkuaW5fZm9jdXMpOworCSAgICB9CisJfQorICAgIH0KKworICAgIHByZWVkaXRfc3RhcnRfY29sID0gTUFYQ09MOworICAgIHhpbV9oYXNfcHJlZWRpdGluZyA9IEZBTFNFOworfQorCisgICAgaW50Cit4aW1fcXVldWVfa2V5X3ByZXNzX2V2ZW50KEdka0V2ZW50S2V5ICpldmVudCwgaW50IGRvd24pCit7CisgICAgaWYgKGRvd24pCisgICAgeworCS8qCisJICogV29ya2Fyb3VuZCBHVEsyIFhJTSAnZmVhdHVyZScgdGhhdCBhbHdheXMgY29udmVydHMga2V5cGFkIGtleXMgdG8KKwkgKiBjaGFycy4sIGV2ZW4gd2hlbiBub3QgcGFydCBvZiBhbiBJTSBzZXF1ZW5jZSAocmVmLiBmZWF0dXJlIG9mCisJICogZ2RrL2dka2tleXVuaS5jKS4KKwkgKiBGbGFnIGFueSBrZXlwYWQga2V5cyB0aGF0IG1pZ2h0IHJlcHJlc2VudCBhIHNpbmdsZSBjaGFyLgorCSAqIElmIHRoaXMgKG9uIGl0cyBvd24gLSBpLmUuLCBub3QgcGFydCBvZiBhbiBJTSBzZXF1ZW5jZSkgaXMKKwkgKiBjb21taXR0ZWQgd2hpbGUgd2UncmUgcHJvY2Vzc2luZyBvbmUgb2YgdGhlc2Uga2V5cywgd2UgY2FuIGlnbm9yZQorCSAqIHRoYXQgY29tbWl0IGFuZCBnbyBhaGVhZCAmIHByb2Nlc3MgaXQgb3Vyc2VsdmVzLiAgVGhhdCB3YXkgd2UgY2FuCisJICogc3RpbGwgZGlzdGluZ3Vpc2gga2V5cGFkIGtleXMgZm9yIHVzZSBpbiBtYXBwaW5ncy4KKwkgKi8KKwlzd2l0Y2ggKGV2ZW50LT5rZXl2YWwpCisJeworCSAgICBjYXNlIEdES19LUF9BZGQ6ICAgICAgeGltX2V4cGVjdGVkX2NoYXIgPSAnKyc7ICBicmVhazsKKwkgICAgY2FzZSBHREtfS1BfU3VidHJhY3Q6IHhpbV9leHBlY3RlZF9jaGFyID0gJy0nOyAgYnJlYWs7CisJICAgIGNhc2UgR0RLX0tQX0RpdmlkZTogICB4aW1fZXhwZWN0ZWRfY2hhciA9ICcvJzsgIGJyZWFrOworCSAgICBjYXNlIEdES19LUF9NdWx0aXBseTogeGltX2V4cGVjdGVkX2NoYXIgPSAnKic7ICBicmVhazsKKwkgICAgY2FzZSBHREtfS1BfRGVjaW1hbDogIHhpbV9leHBlY3RlZF9jaGFyID0gJy4nOyAgYnJlYWs7CisJICAgIGNhc2UgR0RLX0tQX0VxdWFsOiAgICB4aW1fZXhwZWN0ZWRfY2hhciA9ICc9JzsgIGJyZWFrOworCSAgICBjYXNlIEdES19LUF8wOgkgIHhpbV9leHBlY3RlZF9jaGFyID0gJzAnOyAgYnJlYWs7CisJICAgIGNhc2UgR0RLX0tQXzE6CSAgeGltX2V4cGVjdGVkX2NoYXIgPSAnMSc7ICBicmVhazsKKwkgICAgY2FzZSBHREtfS1BfMjoJICB4aW1fZXhwZWN0ZWRfY2hhciA9ICcyJzsgIGJyZWFrOworCSAgICBjYXNlIEdES19LUF8zOgkgIHhpbV9leHBlY3RlZF9jaGFyID0gJzMnOyAgYnJlYWs7CisJICAgIGNhc2UgR0RLX0tQXzQ6CSAgeGltX2V4cGVjdGVkX2NoYXIgPSAnNCc7ICBicmVhazsKKwkgICAgY2FzZSBHREtfS1BfNToJICB4aW1fZXhwZWN0ZWRfY2hhciA9ICc1JzsgIGJyZWFrOworCSAgICBjYXNlIEdES19LUF82OgkgIHhpbV9leHBlY3RlZF9jaGFyID0gJzYnOyAgYnJlYWs7CisJICAgIGNhc2UgR0RLX0tQXzc6CSAgeGltX2V4cGVjdGVkX2NoYXIgPSAnNyc7ICBicmVhazsKKwkgICAgY2FzZSBHREtfS1BfODoJICB4aW1fZXhwZWN0ZWRfY2hhciA9ICc4JzsgIGJyZWFrOworCSAgICBjYXNlIEdES19LUF85OgkgIHhpbV9leHBlY3RlZF9jaGFyID0gJzknOyAgYnJlYWs7CisJICAgIGRlZmF1bHQ6CQkgIHhpbV9leHBlY3RlZF9jaGFyID0gTlVMOworCX0KKwl4aW1faWdub3JlZF9jaGFyID0gRkFMU0U7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXaGVuIHR5cGluZyBmRnRULCBYSU0gbWF5IGJlIGFjdGl2YXRlZC4gVGh1cyBpdCBtdXN0IHBhc3MKKyAgICAgKiBndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MoKSBpbiBOb3JtYWwgbW9kZS4KKyAgICAgKiBBbmQgd2hpbGUgZG9pbmcgOnNoIHRvby4KKyAgICAgKi8KKyAgICBpZiAoeGljICE9IE5VTEwgJiYgIXBfaW1kaXNhYmxlCisJCSAgICAmJiAoU3RhdGUgJiAoSU5TRVJUIHwgQ01ETElORSB8IE5PUk1BTCB8IEVYVEVSTkNNRCkpICE9IDApCisgICAgeworCS8qCisJICogRmlsdGVyICdpbWFjdGl2YXRla2V5JyBhbmQgbWFwIGl0IHRvIENUUkwtXi4gIFRoaXMgd2F5LCBWaW0gaXMKKwkgKiBhbHdheXMgYXdhcmUgb2YgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIElNLCBhbmQgY2FuIGV2ZW4gZW11bGF0ZQorCSAqIHRoZSBhY3RpdmF0aW9uIGtleSBmb3IgbW9kdWxlcyB0aGF0IGRvbid0IHN1cHBvcnQgb25lLgorCSAqLworCWlmIChldmVudC0+a2V5dmFsID09IGltX2FjdGl2YXRla2V5X2tleXZhbAorCSAgICAgJiYgKGV2ZW50LT5zdGF0ZSAmIGltX2FjdGl2YXRla2V5X3N0YXRlKSA9PSBpbV9hY3RpdmF0ZWtleV9zdGF0ZSkKKwl7CisJICAgIHVuc2lnbmVkIGludCBzdGF0ZV9tYXNrOworCisJICAgIC8qIFJlcXVpcmUgdGhlIHN0YXRlIG9mIHRoZSAzIG1vc3QgdXNlZCBtb2RpZmllcnMgdG8gbWF0Y2ggZXhhY3RseS4KKwkgICAgICogT3RoZXJ3aXNlIGUuZy4gPFMtQy1zcGFjZT4gd291bGQgYmUgdW51c2FibGUgZm9yIG90aGVyIHB1cnBvc2VzCisJICAgICAqIGlmIHRoZSBJTSBhY3RpdmF0ZSBrZXkgaXMgPFMtc3BhY2U+LiAqLworCSAgICBzdGF0ZV9tYXNrICA9IGltX2FjdGl2YXRla2V5X3N0YXRlOworCSAgICBzdGF0ZV9tYXNrIHw9ICgoaW50KUdES19TSElGVF9NQVNLIHwgKGludClHREtfQ09OVFJPTF9NQVNLCisJCQkJCQkJfCAoaW50KUdES19NT0QxX01BU0spOworCisJICAgIGlmICgoZXZlbnQtPnN0YXRlICYgc3RhdGVfbWFzaykgIT0gaW1fYWN0aXZhdGVrZXlfc3RhdGUpCisJCXJldHVybiBGQUxTRTsKKworCSAgICAvKiBEb24ndCBzZW5kIGl0IGEgc2Vjb25kIHRpbWUgb24gR0RLX0tFWV9SRUxFQVNFLiAqLworCSAgICBpZiAoZXZlbnQtPnR5cGUgIT0gR0RLX0tFWV9QUkVTUykKKwkJcmV0dXJuIFRSVUU7CisKKwkgICAgaWYgKG1hcF90b19leGlzdHNfbW9kZSgoY2hhcl91ICopIiIsIExBTkdNQVApKQorCSAgICB7CisJCWltX3NldF9hY3RpdmUoRkFMU0UpOworCisJCS8qICI6bG1hcCIgbWFwcGluZ3MgZXhpc3RzLCB0b2dnbGUgdXNlIG9mIG1hcHBpbmdzLiAqLworCQlTdGF0ZSBePSBMQU5HTUFQOworCQlpZiAoU3RhdGUgJiBMQU5HTUFQKQorCQl7CisJCSAgICBjdXJidWYtPmJfcF9pbWluc2VydCA9IEJfSU1PREVfTk9ORTsKKwkJICAgIFN0YXRlICY9IH5MQU5HTUFQOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgY3VyYnVmLT5iX3BfaW1pbnNlcnQgPSBCX0lNT0RFX0xNQVA7CisJCSAgICBTdGF0ZSB8PSBMQU5HTUFQOworCQl9CisJCXJldHVybiBUUlVFOworCSAgICB9CisKKwkgICAgcmV0dXJuIGd0a19pbV9jb250ZXh0X2ZpbHRlcl9rZXlwcmVzcyh4aWMsIGV2ZW50KTsKKwl9CisKKwkvKiBEb24ndCBmaWx0ZXIgZXZlbnRzIHRocm91Z2ggdGhlIElNIGNvbnRleHQgaWYgSU0gaXNuJ3QgYWN0aXZlCisJICogcmlnaHQgbm93LiAgVW5saWtlIHdpdGggR1RLKyAxLjIgd2UgY2Fubm90IHJlbHkgb24gdGhlIElNIG1vZHVsZQorCSAqIG5vdCBkb2luZyBhbnl0aGluZyBiZWZvcmUgdGhlIGFjdGl2YXRpb24ga2V5IHdhcyBzZW50LiAqLworCWlmIChpbV9hY3RpdmF0ZWtleV9rZXl2YWwgPT0gR0RLX1ZvaWRTeW1ib2wgfHwgaW1faXNfYWN0aXZlKQorCXsKKwkgICAgaW50IGltcmVzdWx0ID0gZ3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKHhpYywgZXZlbnQpOworCisJICAgIC8qIFNvbWUgWElNIHNlbmQgZm9sbG93aW5nIHNlcXVlbmNlOgorCSAgICAgKiAxLiBwcmVlZGl0ZWQgc3RyaW5nLgorCSAgICAgKiAyLiBjb21taXR0ZWQgc3RyaW5nLgorCSAgICAgKiAzLiBsaW5lIGNoYW5nZWQga2V5LgorCSAgICAgKiA0LiBwcmVlZGl0ZWQgc3RyaW5nLgorCSAgICAgKiA1LiByZW1vdmUgcHJlZWRpdGVkIHN0cmluZy4KKwkgICAgICogaWYgMywgVmltIGNhbid0IG1vdmUgYmFjayB0aGUgYWJvdmUgbGluZSBmb3IgNS4KKwkgICAgICogdGh1cywgdGhpcyBwYXJ0IHNob3VsZCBub3QgcGFyc2UgdGhlIGtleS4gKi8KKwkgICAgaWYgKCFpbXJlc3VsdCAmJiBwcmVlZGl0X3N0YXJ0X2NvbCAhPSBNQVhDT0wKKwkJCQkJICAgICAgICYmIGV2ZW50LT5rZXl2YWwgPT0gR0RLX1JldHVybikKKwkgICAgeworCQlpbV9zeW50aGVzaXplX2tleXByZXNzKEdES19SZXR1cm4sIDBVKTsKKwkJcmV0dXJuIEZBTFNFOworCSAgICB9CisKKwkgICAgLyogSWYgWElNIHRyaWVkIHRvIGNvbW1pdCBhIGtleXBhZCBrZXkgYXMgYSBzaW5nbGUgY2hhci4sCisJICAgICAqIGlnbm9yZSBpdCBzbyB3ZSBjYW4gdXNlIHRoZSBrZXlwYWQga2V5ICdyYXcnLCBmb3IgbWFwcGluZ3MuICovCisJICAgIGlmICh4aW1fZXhwZWN0ZWRfY2hhciAhPSBOVUwgJiYgeGltX2lnbm9yZWRfY2hhcikKKwkJLyogV2UgaGFkIGEga2V5cGFkIGtleSwgYW5kIFhJTSB0cmllZCB0byB0aGlldmUgaXQgKi8KKwkJcmV0dXJuIEZBTFNFOworCisJICAgIC8qIE5vcm1hbCBwcm9jZXNzaW5nICovCisJICAgIHJldHVybiBpbXJlc3VsdDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQorCisgICAgaW50CitpbV9nZXRfc3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIGltX2lzX2FjdGl2ZTsKK30KKworIyBlbHNlIC8qICFIQVZFX0dUSzIgKi8KKworc3RhdGljIGludAl4aW1faXNfYWN0aXZlID0gRkFMU0U7ICAvKiBYSU0gc2hvdWxkIGJlIGFjdGl2ZSBpbiB0aGUgY3VycmVudAorCQkJCQkgICBtb2RlICovCitzdGF0aWMgaW50CXhpbV9oYXNfZm9jdXMgPSBGQUxTRTsJLyogWElNIGlzIHJlYWxseSBiZWluZyB1c2VkIGZvciBWaW0gKi8KKyNpZmRlZiBGRUFUX0dVSV9YMTEKK3N0YXRpYyBYSU1TdHlsZQlpbnB1dF9zdHlsZTsKK3N0YXRpYyBpbnQJc3RhdHVzX2FyZWFfZW5hYmxlZCA9IFRSVUU7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJX0dUSworIyBpZmRlZiBXSU4zMjY0CisjICBpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8Z2RrL2dka3guaD4KKyMgZW5kaWYKKyNlbHNlCisjIGlmZGVmIFBST1RPCisvKiBEZWZpbmUgYSBmZXcgdGhpbmdzIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgcHJvdG90eXBlcyB3aGlsZSBub3QgY29uZmlndXJlZAorICogZm9yIEdUSy4gKi8KKyMgIGRlZmluZSBHU0xpc3QgaW50CisjICBkZWZpbmUgZ2Jvb2xlYW4gaW50CisgICB0eXBlZGVmIGludCBHZGtFdmVudDsKKyAgIHR5cGVkZWYgaW50IEdka0V2ZW50S2V5OworIyAgZGVmaW5lIEdka0lDIGludAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0dUSykgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBpbnQJcHJlZWRpdF9idWZfbGVuID0gMDsKK3N0YXRpYyBpbnQJeGltX2Nhbl9wcmVlZGl0aW5nIElOSVQoPSBGQUxTRSk7CS8qIFhJTSBpbiBzaG93bW9kZSgpICovCitzdGF0aWMgaW50CXhpbV9pbnB1dF9zdHlsZTsKKyNpZm5kZWYgRkVBVF9HVUlfR1RLCisjIGRlZmluZSBnYm9vbGVhbiBpbnQKKyNlbmRpZgorc3RhdGljIGdib29sZWFuCXVzZV9zdGF0dXNfYXJlYSA9IDA7CisKK3N0YXRpYyBpbnQgaW1feGltX3N0cjJrZXljb2RlIF9fQVJHUygodW5zaWduZWQgaW50ICpjb2RlLCB1bnNpZ25lZCBpbnQgKnN0YXRlKSk7CitzdGF0aWMgdm9pZCBpbV94aW1fc2VuZF9ldmVudF9pbWFjdGl2YXRlIF9fQVJHUygodm9pZCkpOworCisvKgorICogQ29udmVydCBzdHJpbmcgdG8ga2V5Y29kZSBhbmQgc3RhdGUgZm9yIFhLZXlFdmVudC4KKyAqIFdoZW4gc3RyaW5nIGlzIHZhbGlkIHJldHVybiBPSywgd2hlbiBpbnZhbGlkIHJldHVybiBGQUlMLgorICoKKyAqIFNlZSAnaW1hY3RpdmF0ZWtleScgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZvcm1hdC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2ltX3hpbV9zdHIya2V5Y29kZShjb2RlLCBzdGF0ZSkKKyAgICB1bnNpZ25lZCBpbnQgKmNvZGU7CisgICAgdW5zaWduZWQgaW50ICpzdGF0ZTsKK3sKKyAgICBpbnQJCXJldHZhbCA9IE9LOworICAgIGludAkJbGVuOworICAgIHVuc2lnbmVkCWtleWNvZGUgPSAwLCBrZXlzdGF0ZSA9IDA7CisgICAgV2luZG93CXdpbmRvdzsKKyAgICBEaXNwbGF5CSpkaXNwbGF5OworICAgIGNoYXJfdQkqZmxhZ19lbmQ7CisgICAgY2hhcl91CSpzdHI7CisKKyAgICBpZiAoKnBfaW1hayAhPSBOVUwpCisgICAgeworCWxlbiA9IFNUUkxFTihwX2ltYWspOworCWZvciAoZmxhZ19lbmQgPSBwX2ltYWsgKyBsZW4gLSAxOworCQkJICAgIGZsYWdfZW5kID4gcF9pbWFrICYmICpmbGFnX2VuZCAhPSAnLSc7IC0tZmxhZ19lbmQpCisJICAgIDsKKworCS8qIFBhcnNlIG1vZGlmaWVyIGtleXMgKi8KKwlmb3IgKHN0ciA9IHBfaW1hazsgc3RyIDwgZmxhZ19lbmQ7ICsrc3RyKQorCXsKKwkgICAgc3dpdGNoICgqc3RyKQorCSAgICB7CisJCWNhc2UgJ3MnOiBjYXNlICdTJzoKKwkJICAgIGtleXN0YXRlIHw9IFNoaWZ0TWFzazsKKwkJICAgIGJyZWFrOworCQljYXNlICdsJzogY2FzZSAnTCc6CisJCSAgICBrZXlzdGF0ZSB8PSBMb2NrTWFzazsKKwkJICAgIGJyZWFrOworCQljYXNlICdjJzogY2FzZSAnQyc6CisJCSAgICBrZXlzdGF0ZSB8PSBDb250cm9sTWFzazsKKwkJICAgIGJyZWFrOworCQljYXNlICcxJzoKKwkJICAgIGtleXN0YXRlIHw9IE1vZDFNYXNrOworCQkgICAgYnJlYWs7CisJCWNhc2UgJzInOgorCQkgICAga2V5c3RhdGUgfD0gTW9kMk1hc2s7CisJCSAgICBicmVhazsKKwkJY2FzZSAnMyc6CisJCSAgICBrZXlzdGF0ZSB8PSBNb2QzTWFzazsKKwkJICAgIGJyZWFrOworCQljYXNlICc0JzoKKwkJICAgIGtleXN0YXRlIHw9IE1vZDRNYXNrOworCQkgICAgYnJlYWs7CisJCWNhc2UgJzUnOgorCQkgICAga2V5c3RhdGUgfD0gTW9kNU1hc2s7CisJCSAgICBicmVhazsKKwkJY2FzZSAnLSc6CisJCSAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIHJldHZhbCA9IEZBSUw7CisJICAgIH0KKwl9CisJaWYgKCpzdHIgPT0gJy0nKQorCSAgICArK3N0cjsKKworCS8qIEdldCBrZXljb2RlIGZyb20gc3RyaW5nLiAqLworCWd1aV9nZXRfeDExX3dpbmRpcygmd2luZG93LCAmZGlzcGxheSk7CisJaWYgKGRpc3BsYXkpCisJICAgIGtleWNvZGUgPSBYS2V5c3ltVG9LZXljb2RlKGRpc3BsYXksIFhTdHJpbmdUb0tleXN5bSgoY2hhciAqKXN0cikpOworCWlmIChrZXljb2RlID09IDApCisJICAgIHJldHZhbCA9IEZBSUw7CisKKwlpZiAoY29kZSAhPSBOVUxMKQorCSAgICAqY29kZSA9IGtleWNvZGU7CisJaWYgKHN0YXRlICE9IE5VTEwpCisJICAgICpzdGF0ZSA9IGtleXN0YXRlOworICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisgICAgc3RhdGljIHZvaWQKK2ltX3hpbV9zZW5kX2V2ZW50X2ltYWN0aXZhdGUoKQoreworICAgIC8qIEZvcmNlIHR1cm4gb24gcHJlZWRpdCBzdGF0ZSBieSBzeW11bGF0ZSBrZXlwcmVzcyBldmVudC4KKyAgICAgKiBLZXljb2RlIGFuZCBzdGF0ZSBpcyBzcGVjaWZpZWQgYnkgJ2ltYWN0aXZhdGVrZXknLgorICAgICAqLworICAgIFhLZXlFdmVudCBldjsKKworICAgIGd1aV9nZXRfeDExX3dpbmRpcygmZXYud2luZG93LCAmZXYuZGlzcGxheSk7CisgICAgZXYucm9vdCA9IFJvb3RXaW5kb3coZXYuZGlzcGxheSwgRGVmYXVsdFNjcmVlbihldi5kaXNwbGF5KSk7CisgICAgZXYuc3Vid2luZG93ID0gTm9uZTsKKyAgICBldi50aW1lID0gQ3VycmVudFRpbWU7CisgICAgZXYueCA9IDE7CisgICAgZXYueSA9IDE7CisgICAgZXYueF9yb290ID0gMTsKKyAgICBldi55X3Jvb3QgPSAxOworICAgIGV2LnNhbWVfc2NyZWVuID0gMTsKKyAgICBldi50eXBlID0gS2V5UHJlc3M7CisgICAgaWYgKGltX3hpbV9zdHIya2V5Y29kZSgmZXYua2V5Y29kZSwgJmV2LnN0YXRlKSA9PSBPSykKKwlYU2VuZEV2ZW50KGV2LmRpc3BsYXksIGV2LndpbmRvdywgMSwgS2V5UHJlc3NNYXNrLCAoWEV2ZW50KikmZXYpOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgJ2ltYWN0aXZhdGVrZXknIGhhcyBhIHZhbGlkIHZhbHVlLgorICovCisgICAgaW50CitpbV94aW1faXN2YWxpZF9pbWFjdGl2YXRlKCkKK3sKKyAgICByZXR1cm4gaW1feGltX3N0cjJrZXljb2RlKE5VTEwsIE5VTEwpID09IE9LOworfQorI2VuZGlmIC8qIEZFQVRfR1VJX0dUSyAqLworCisvKgorICogU3dpdGNoIHVzaW5nIFhJTSBvbi9vZmYuICBUaGlzIGlzIHVzZWQgYnkgdGhlIGNvZGUgdGhhdCBjaGFuZ2VzICJTdGF0ZSIuCisgKi8KKyAgICB2b2lkCitpbV9zZXRfYWN0aXZlKGFjdGl2ZSkKKyAgICBpbnQJCWFjdGl2ZTsKK3sKKyAgICBpZiAoeGljID09IE5VTEwpCisJcmV0dXJuOworCisgICAgLyogSWYgJ2ltZGlzYWJsZScgaXMgc2V0LCBYSU0gaXMgbmV2ZXIgYWN0aXZlLiAqLworICAgIGlmIChwX2ltZGlzYWJsZSkKKwlhY3RpdmUgPSBGQUxTRTsKKyNpZm5kZWYgRkVBVF9HVUlfR1RLCisgICAgZWxzZSBpZiAoaW5wdXRfc3R5bGUgJiBYSU1QcmVlZGl0UG9zaXRpb24pCisJLyogVGhlcmUgaXMgYSBwcm9ibGVtIGluIHN3aXRjaGluZyBYSU0gb2ZmIHdoZW4gcHJlZWRpdGluZyBpcyB1c2VkLAorCSAqIGFuZCBpdCBpcyBub3QgY2xlYXIgaG93IHRoaXMgY2FuIGJlIHNvbHZlZC4gIEZvciBub3csIGtlZXAgWElNIG9uCisJICogYWxsIHRoZSB0aW1lLCBsaWtlIGl0IHdhcyBkb25lIGluIFZpbSA1LjguICovCisJYWN0aXZlID0gVFJVRTsKKyNlbmRpZgorCisgICAgLyogUmVtZW1iZXIgdGhlIGFjdGl2ZSBzdGF0ZSwgaXQgaXMgbmVlZGVkIHdoZW4gVmltIGdldHMga2V5Ym9hcmQgZm9jdXMuICovCisgICAgeGltX2lzX2FjdGl2ZSA9IGFjdGl2ZTsKKworI2lmZGVmIEZFQVRfR1VJX0dUSworICAgIC8qIFdoZW4gJ2ltYWN0aXZhdGVrZXknIGhhcyB2YWxpZCBrZXktc3RyaW5nLCB0cnkgdG8gY29udHJvbCBYSU0gcHJlZWRpdAorICAgICAqIHN0YXRlLiAgV2hlbiAnaW1hY3RpdmF0ZWtleScgaGFzIG5vIG9yIGludmFsaWQgc3RyaW5nLCB0cnkgb2xkIFhJTQorICAgICAqIGZvY3VzIGNvbnRyb2wuCisgICAgICovCisgICAgaWYgKCpwX2ltYWsgIT0gTlVMKQorICAgIHsKKwkvKiBCQVNJQyBTVFJBVEVHWToKKwkgKiBEZXN0cm95IG9sZCBJbnB1dCBDb250ZXh0IChYSUMpLCBhbmQgY3JlYXRlIG5ldyBvbmUuICBOZXcgWElDCisJICogd291bGQgaGF2ZSBhIHN0YXRlIG9mIHByZWVkaXQgdGhhdCBpcyBvZmYuICBXaGVuIGFyZ3VtZW50OmFjdGl2ZQorCSAqIGlzIGZhbHNlLCB0aGF0J3MgYWxsLiAgRWxzZSBhcmd1bWVudDphY3RpdmUgaXMgdHJ1ZSwgc2VuZCBhIGtleQorCSAqIGV2ZW50IHNwZWNpZmllZCBieSAnaW1hY3RpdmF0ZWtleScgdG8gYWN0aXZhdGUgWElNIHByZWVkaXQgc3RhdGUuCisJICovCisKKwl4aW1faXNfYWN0aXZlID0gVFJVRTsgLyogRGlzYWJsZSBvbGQgWElNIGZvY3VzIGNvbnRyb2wgKi8KKwkvKiBJZiB3ZSBjYW4gbW9uaXRvciBwcmVlZGl0IHN0YXRlIHdpdGggcHJlZWRpdCBjYWxsYmFjayBmdW5jdGlvbnMsCisJICogdHJ5IGxlYXN0IGNyZWF0aW9uIG9mIG5ldyBYSUMuCisJICovCisJaWYgKHhpbV9pbnB1dF9zdHlsZSAmIChpbnQpR0RLX0lNX1BSRUVESVRfQ0FMTEJBQ0tTKQorCXsKKwkgICAgaWYgKHhpbV9jYW5fcHJlZWRpdGluZyAmJiAhYWN0aXZlKQorCSAgICB7CisJCS8qIEZvcmNlIHR1cm4gb2ZmIHByZWVkaXQgc3RhdGUuICBXaXRoIHNvbWUgSU0KKwkJICogaW1wbGVtZW50YXRpb25zLCB3ZSBjYW5ub3QgdHVybiBvZmYgcHJlZWRpdCBzdGF0ZSBieQorCQkgKiBzeW11bGF0ZSBrZXlwcmVzcyBldmVudC4gIEl0IGlzIHdoeSB1c2luZyBzdWNoIGEgbWV0aG9kCisJCSAqIHRoYXQgZGVzdHJveSBvbGQgSUMgKGlucHV0IGNvbnRleHQpLCBhbmQgY3JlYXRlIG5ldyBvbmUuCisJCSAqIFdoZW4gY3JlYXRlIG5ldyBJQywgaXRzIHByZWVkaXQgc3RhdGUgaXMgdXN1YWxseSBvZmYuCisJCSAqLworCQl4aW1fcmVzZXQoKTsKKwkJeGltX3NldF9mb2N1cyhGQUxTRSk7CisJCWdka19pY19kZXN0cm95KHhpYyk7CisJCXhpbV9pbml0KCk7CisJCXhpbV9jYW5fcHJlZWRpdGluZyA9IEZBTFNFOworCSAgICB9CisJICAgIGVsc2UgaWYgKCF4aW1fY2FuX3ByZWVkaXRpbmcgJiYgYWN0aXZlKQorCQlpbV94aW1fc2VuZF9ldmVudF9pbWFjdGl2YXRlKCk7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIEZpcnN0LCBmb3JjZSBkZXN0cm95IG9sZCBJQywgYW5kIGNyZWF0ZSBuZXcgb25lLiAgSXQKKwkgICAgICogc3ltdWxhdGVzICJ0dXJuaW5nIG9mZiBwcmVlZGl0IHN0YXRlIi4KKwkgICAgICovCisJICAgIHhpbV9zZXRfZm9jdXMoRkFMU0UpOworCSAgICBnZGtfaWNfZGVzdHJveSh4aWMpOworCSAgICB4aW1faW5pdCgpOworCSAgICB4aW1fY2FuX3ByZWVkaXRpbmcgPSBGQUxTRTsKKworCSAgICAvKiAybmQsIHdoZW4gcmVxdWVzdGVkIHRvIGFjdGl2YXRlIElNLCBzeW11bGF0ZSB0aGlzIGJ5IHNlbmRpbmcKKwkgICAgICogdGhlIGV2ZW50LgorCSAgICAgKi8KKwkgICAgaWYgKGFjdGl2ZSkKKwkgICAgeworCQlpbV94aW1fc2VuZF9ldmVudF9pbWFjdGl2YXRlKCk7CisJCXhpbV9jYW5fcHJlZWRpdGluZyA9IFRSVUU7CisJICAgIH0KKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjIGlmbmRlZiBYSU1QcmVlZGl0VW5Lbm93bgorCS8qIFgxMVI1IGRvZXNuJ3QgaGF2ZSB0aGVzZSwgaXQgbG9va3Mgc2FmZSBlbm91Z2ggdG8gZGVmaW5lIGhlcmUuICovCisJdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVByZWVkaXRTdGF0ZTsKKyMgIGRlZmluZSBYSU1QcmVlZGl0VW5Lbm93bgkwTAorIyAgZGVmaW5lIFhJTVByZWVkaXRFbmFibGUJMUwKKyMgIGRlZmluZSBYSU1QcmVlZGl0RGlzYWJsZQkoMUw8PDEpCisjICBkZWZpbmUgWE5QcmVlZGl0U3RhdGUJInByZWVkaXRTdGF0ZSIKKyMgZW5kaWYKKwlYSU1QcmVlZGl0U3RhdGUgcHJlZWRpdF9zdGF0ZSA9IFhJTVByZWVkaXRVbktub3duOworCVhWYU5lc3RlZExpc3QgcHJlZWRpdF9hdHRyOworCVhJQyBweGljOworCisJcHJlZWRpdF9hdHRyID0gWFZhQ3JlYXRlTmVzdGVkTGlzdCgwLAorCQkJCVhOUHJlZWRpdFN0YXRlLCAmcHJlZWRpdF9zdGF0ZSwKKwkJCQlOVUxMKTsKKwlweGljID0gKChHZGtJQ1ByaXZhdGUgKil4aWMpLT54aWM7CisKKwlpZiAoIVhHZXRJQ1ZhbHVlcyhweGljLCBYTlByZWVkaXRBdHRyaWJ1dGVzLCBwcmVlZGl0X2F0dHIsIE5VTEwpKQorCXsKKwkgICAgWEZyZWUocHJlZWRpdF9hdHRyKTsKKwkgICAgcHJlZWRpdF9hdHRyID0gWFZhQ3JlYXRlTmVzdGVkTGlzdCgwLAorCQkJCVhOUHJlZWRpdFN0YXRlLAorCQkJCWFjdGl2ZSA/IFhJTVByZWVkaXRFbmFibGUgOiBYSU1QcmVlZGl0RGlzYWJsZSwKKwkJCQlOVUxMKTsKKwkgICAgWFNldElDVmFsdWVzKHB4aWMsIFhOUHJlZWRpdEF0dHJpYnV0ZXMsIHByZWVkaXRfYXR0ciwgTlVMTCk7CisJICAgIHhpbV9jYW5fcHJlZWRpdGluZyA9IGFjdGl2ZTsKKwkgICAgeGltX2lzX2FjdGl2ZSA9IGFjdGl2ZTsKKwl9CisJWEZyZWUocHJlZWRpdF9hdHRyKTsKKyAgICB9CisgICAgaWYgKHhpbV9pbnB1dF9zdHlsZSAmIFhJTVByZWVkaXRDYWxsYmFja3MpCisgICAgeworCXByZWVkaXRfYnVmX2xlbiA9IDA7CisJaW5pdF9wcmVlZGl0X3N0YXJ0X2NvbCgpOworICAgIH0KKyNlbHNlCisjIGlmIDAKKwkvKiBXaGVuIGhhZCB0ZXN0ZWQga2lucHV0MiArIGNhbm5hICsgQXRoZW5hIEdVSSB2ZXJzaW9uIHdpdGgKKwkgKiAnaW1hY3RpdmF0ZWtleScgaXMgInMtc3BhY2UiLCBpbV94aW1fc2VuZF9ldmVudF9pbWFjdGl2YXRlKCkgZGlkIG5vdAorCSAqIHdvcmsgY29ycmVjdGx5LiAgSXQganVzdCBpbnNlcnRlZCBvbmUgc3BhY2UuICBJIGRvbid0IGtub3cgd2h5IHdlCisJICogY291bGRuJ3Qgc3dpdGNoIHN0YXRlIG9mIFhJTSBwcmVlZGl0aW5nLiAgVGhpcyBpcyByZWFzb24gd2h5IHRoZXNlCisJICogY29kZXMgYXJlIGNvbW1lbnRlZCBvdXQuCisJICovCisJLyogRmlyc3QsIGZvcmNlIGRlc3Ryb3kgb2xkIElDLCBhbmQgY3JlYXRlIG5ldyBvbmUuICBJdCBzeW11bGF0ZXMKKwkgKiAidHVybmluZyBvZmYgcHJlZWRpdCBzdGF0ZSIuCisJICovCisJeGltX3NldF9mb2N1cyhGQUxTRSk7CisJWERlc3Ryb3lJQyh4aWMpOworCXhpYyA9IE5VTEw7CisJeGltX2luaXQoKTsKKworCS8qIDJuZCwgd2hlbiByZXF1ZXN0ZWQgdG8gYWN0aXZhdGUgSU0sIHN5bXVsYXRlIHRoaXMgYnkgc2VuZGluZyB0aGUKKwkgKiBldmVudC4KKwkgKi8KKwlpZiAoYWN0aXZlKQorCSAgICBpbV94aW1fc2VuZF9ldmVudF9pbWFjdGl2YXRlKCk7CisjIGVuZGlmCisjZW5kaWYKKyAgICB4aW1fc2V0X3ByZWVkaXQoKTsKK30KKworLyoKKyAqIEFkanVzdCB1c2luZyBYSU0gZm9yIGdhaW5pbmcgb3IgbG9zaW5nIGtleWJvYXJkIGZvY3VzLiAgQWxzbyBjYWxsZWQgd2hlbgorICogInhpbV9pc19hY3RpdmUiIGNoYW5nZXMuCisgKi8KKyAgICB2b2lkCit4aW1fc2V0X2ZvY3VzKGZvY3VzKQorICAgIGludAkJZm9jdXM7Cit7CisgICAgaWYgKHhpYyA9PSBOVUxMKQorCXJldHVybjsKKworICAgIC8qCisgICAgICogWElNIG9ubHkgZ2V0cyBmb2N1cyB3aGVuIHRoZSBWaW0gd2luZG93IGhhcyBrZXlib2FyZCBmb2N1cyBhbmQgWElNIGhhcworICAgICAqIGJlZW4gc2V0IGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnQgbW9kZS4KKyAgICAgKi8KKyAgICBpZiAoZm9jdXMgJiYgeGltX2lzX2FjdGl2ZSkKKyAgICB7CisJaWYgKCF4aW1faGFzX2ZvY3VzKQorCXsKKwkgICAgeGltX2hhc19mb2N1cyA9IFRSVUU7CisjaWZkZWYgRkVBVF9HVUlfR1RLCisJICAgIGdka19pbV9iZWdpbih4aWMsIGd1aS5kcmF3YXJlYS0+d2luZG93KTsKKyNlbHNlCisJICAgIFhTZXRJQ0ZvY3VzKHhpYyk7CisjZW5kaWYKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKHhpbV9oYXNfZm9jdXMpCisJeworCSAgICB4aW1faGFzX2ZvY3VzID0gRkFMU0U7CisjaWZkZWYgRkVBVF9HVUlfR1RLCisJICAgIGdka19pbV9lbmQoKTsKKyNlbHNlCisJICAgIFhVbnNldElDRm9jdXMoeGljKTsKKyNlbmRpZgorCX0KKyAgICB9Cit9CisKKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK2ltX3NldF9wb3NpdGlvbihyb3csIGNvbCkKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCWNvbDsKK3sKKyAgICB4aW1fc2V0X3ByZWVkaXQoKTsKK30KKworLyoKKyAqIFNldCB0aGUgWElNIHRvIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KKyAqLworICAgIHZvaWQKK3hpbV9zZXRfcHJlZWRpdCgpCit7CisgICAgaWYgKHhpYyA9PSBOVUxMKQorCXJldHVybjsKKworICAgIHhpbV9zZXRfZm9jdXMoVFJVRSk7CisKKyNpZmRlZiBGRUFUX0dVSV9HVEsKKyAgICBpZiAoZ2RrX2ltX3JlYWR5KCkpCisgICAgeworCWludAkJYXR0cm1hc2s7CisJR2RrSUNBdHRyCSphdHRyOworCisJaWYgKCF4aWNfYXR0cikKKwkgICAgcmV0dXJuOworCisJYXR0ciA9IHhpY19hdHRyOworCWF0dHJtYXNrID0gMDsKKworIyBpZmRlZiBGRUFUX1hGT05UU0VUCisJaWYgKCh4aW1faW5wdXRfc3R5bGUgJiAoaW50KUdES19JTV9QUkVFRElUX1BPU0lUSU9OKQorCQkmJiBndWkuZm9udHNldCAhPSBOT0ZPTlRTRVQKKwkJJiYgZ3VpLmZvbnRzZXQtPnR5cGUgPT0gR0RLX0ZPTlRfRk9OVFNFVCkKKwl7CisJICAgIGlmICgheGltX2hhc19mb2N1cykKKwkgICAgeworCQlpZiAoYXR0ci0+c3BvdF9sb2NhdGlvbi55ID49IDApCisJCXsKKwkJICAgIGF0dHItPnNwb3RfbG9jYXRpb24ueCA9IDA7CisJCSAgICBhdHRyLT5zcG90X2xvY2F0aW9uLnkgPSAtMTAwOworCQkgICAgYXR0cm1hc2sgfD0gKGludClHREtfSUNfU1BPVF9MT0NBVElPTjsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlnaW50CXdpZHRoLCBoZWlnaHQ7CisKKwkJaWYgKGF0dHItPnNwb3RfbG9jYXRpb24ueCAhPSBURVhUX1goZ3VpLmNvbCkKKwkJICAgIHx8IGF0dHItPnNwb3RfbG9jYXRpb24ueSAhPSBURVhUX1koZ3VpLnJvdykpCisJCXsKKwkJICAgIGF0dHItPnNwb3RfbG9jYXRpb24ueCA9IFRFWFRfWChndWkuY29sKTsKKwkJICAgIGF0dHItPnNwb3RfbG9jYXRpb24ueSA9IFRFWFRfWShndWkucm93KTsKKwkJICAgIGF0dHJtYXNrIHw9IChpbnQpR0RLX0lDX1NQT1RfTE9DQVRJT047CisJCX0KKworCQlnZGtfd2luZG93X2dldF9zaXplKGd1aS5kcmF3YXJlYS0+d2luZG93LCAmd2lkdGgsICZoZWlnaHQpOworCQl3aWR0aCAtPSAyICogZ3VpLmJvcmRlcl9vZmZzZXQ7CisJCWhlaWdodCAtPSAyICogZ3VpLmJvcmRlcl9vZmZzZXQ7CisJCWlmICh4aW1faW5wdXRfc3R5bGUgJiAoaW50KUdES19JTV9TVEFUVVNfQVJFQSkKKwkJICAgIGhlaWdodCAtPSBndWkuY2hhcl9oZWlnaHQ7CisJCWlmIChhdHRyLT5wcmVlZGl0X2FyZWEud2lkdGggIT0gd2lkdGgKKwkJICAgIHx8IGF0dHItPnByZWVkaXRfYXJlYS5oZWlnaHQgIT0gaGVpZ2h0KQorCQl7CisJCSAgICBhdHRyLT5wcmVlZGl0X2FyZWEueCA9IGd1aS5ib3JkZXJfb2Zmc2V0OworCQkgICAgYXR0ci0+cHJlZWRpdF9hcmVhLnkgPSBndWkuYm9yZGVyX29mZnNldDsKKwkJICAgIGF0dHItPnByZWVkaXRfYXJlYS53aWR0aCA9IHdpZHRoOworCQkgICAgYXR0ci0+cHJlZWRpdF9hcmVhLmhlaWdodCA9IGhlaWdodDsKKwkJICAgIGF0dHJtYXNrIHw9IChpbnQpR0RLX0lDX1BSRUVESVRfQVJFQTsKKwkJfQorCisJCWlmIChhdHRyLT5wcmVlZGl0X2ZvbnRzZXQgIT0gZ3VpLmN1cnJlbnRfZm9udCkKKwkJeworCQkgICAgYXR0ci0+cHJlZWRpdF9mb250c2V0ID0gZ3VpLmN1cnJlbnRfZm9udDsKKwkJICAgIGF0dHJtYXNrIHw9IChpbnQpR0RLX0lDX1BSRUVESVRfRk9OVFNFVDsKKwkJfQorCSAgICB9CisJfQorIyBlbmRpZiAvKiBGRUFUX1hGT05UU0VUICovCisKKwlpZiAoeGltX2ZnX2NvbG9yID09IElOVkFMQ09MT1IpCisJeworCSAgICB4aW1fZmdfY29sb3IgPSBndWkuZGVmX25vcm1fcGl4ZWw7CisJICAgIHhpbV9iZ19jb2xvciA9IGd1aS5kZWZfYmFja19waXhlbDsKKwl9CisJaWYgKGF0dHItPnByZWVkaXRfZm9yZWdyb3VuZC5waXhlbCAhPSB4aW1fZmdfY29sb3IpCisJeworCSAgICBhdHRyLT5wcmVlZGl0X2ZvcmVncm91bmQucGl4ZWwgPSB4aW1fZmdfY29sb3I7CisJICAgIGF0dHJtYXNrIHw9IChpbnQpR0RLX0lDX1BSRUVESVRfRk9SRUdST1VORDsKKwl9CisJaWYgKGF0dHItPnByZWVkaXRfYmFja2dyb3VuZC5waXhlbCAhPSB4aW1fYmdfY29sb3IpCisJeworCSAgICBhdHRyLT5wcmVlZGl0X2JhY2tncm91bmQucGl4ZWwgPSB4aW1fYmdfY29sb3I7CisJICAgIGF0dHJtYXNrIHw9IChpbnQpR0RLX0lDX1BSRUVESVRfQkFDS0dST1VORDsKKwl9CisKKwlpZiAoYXR0cm1hc2sgIT0gMCkKKwkgICAgZ2RrX2ljX3NldF9hdHRyKHhpYywgYXR0ciwgKEdka0lDQXR0cmlidXRlc1R5cGUpYXR0cm1hc2spOworICAgIH0KKyNlbHNlIC8qIEZFQVRfR1VJX0dUSyAqLworICAgIHsKKwlYVmFOZXN0ZWRMaXN0IGF0dHJfbGlzdDsKKwlYUmVjdGFuZ2xlIHNwb3RfYXJlYTsKKwlYUG9pbnQgb3Zlcl9zcG90OworCWludCBsaW5lX3NwYWNlOworCisJaWYgKCF4aW1faGFzX2ZvY3VzKQorCXsKKwkgICAgLyogaGlkZSBYSU0gY3Vyc29yICovCisJICAgIG92ZXJfc3BvdC54ID0gMDsKKwkgICAgb3Zlcl9zcG90LnkgPSAtMTAwOyAvKiBhcmJpdHJhcnkgaW52aXNpYmxlIHBvc2l0aW9uICovCisJICAgIGF0dHJfbGlzdCA9IChYVmFOZXN0ZWRMaXN0KSBYVmFDcmVhdGVOZXN0ZWRMaXN0KDAsCisJCQkJCQkJICAgIFhOU3BvdExvY2F0aW9uLAorCQkJCQkJCSAgICAmb3Zlcl9zcG90LAorCQkJCQkJCSAgICBOVUxMKTsKKwkgICAgWFNldElDVmFsdWVzKHhpYywgWE5QcmVlZGl0QXR0cmlidXRlcywgYXR0cl9saXN0LCBOVUxMKTsKKwkgICAgWEZyZWUoYXR0cl9saXN0KTsKKwkgICAgcmV0dXJuOworCX0KKworCWlmIChpbnB1dF9zdHlsZSAmIFhJTVByZWVkaXRQb3NpdGlvbikKKwl7CisJICAgIGlmICh4aW1fZmdfY29sb3IgPT0gSU5WQUxDT0xPUikKKwkgICAgeworCQl4aW1fZmdfY29sb3IgPSBndWkuZGVmX25vcm1fcGl4ZWw7CisJCXhpbV9iZ19jb2xvciA9IGd1aS5kZWZfYmFja19waXhlbDsKKwkgICAgfQorCSAgICBvdmVyX3Nwb3QueCA9IFRFWFRfWChndWkuY29sKTsKKwkgICAgb3Zlcl9zcG90LnkgPSBURVhUX1koZ3VpLnJvdyk7CisJICAgIHNwb3RfYXJlYS54ID0gMDsKKwkgICAgc3BvdF9hcmVhLnkgPSAwOworCSAgICBzcG90X2FyZWEuaGVpZ2h0ID0gZ3VpLmNoYXJfaGVpZ2h0ICogUm93czsKKwkgICAgc3BvdF9hcmVhLndpZHRoICA9IGd1aS5jaGFyX3dpZHRoICogQ29sdW1uczsKKwkgICAgbGluZV9zcGFjZSA9IGd1aS5jaGFyX2hlaWdodDsKKwkgICAgYXR0cl9saXN0ID0gKFhWYU5lc3RlZExpc3QpIFhWYUNyZWF0ZU5lc3RlZExpc3QoMCwKKwkJCQkJICAgIFhOU3BvdExvY2F0aW9uLCAmb3Zlcl9zcG90LAorCQkJCQkgICAgWE5Gb3JlZ3JvdW5kLCAoUGl4ZWwpIHhpbV9mZ19jb2xvciwKKwkJCQkJICAgIFhOQmFja2dyb3VuZCwgKFBpeGVsKSB4aW1fYmdfY29sb3IsCisJCQkJCSAgICBYTkFyZWEsICZzcG90X2FyZWEsCisJCQkJCSAgICBYTkxpbmVTcGFjZSwgbGluZV9zcGFjZSwKKwkJCQkJICAgIE5VTEwpOworCSAgICBpZiAoWFNldElDVmFsdWVzKHhpYywgWE5QcmVlZGl0QXR0cmlidXRlcywgYXR0cl9saXN0LCBOVUxMKSkKKwkJRU1TRyhfKCJFMjg0OiBDYW5ub3Qgc2V0IElDIHZhbHVlcyIpKTsKKwkgICAgWEZyZWUoYXR0cl9saXN0KTsKKwl9CisgICAgfQorI2VuZGlmIC8qIEZFQVRfR1VJX0dUSyAqLworfQorCisvKgorICogU2V0IHVwIHRoZSBzdGF0dXMgYXJlYS4KKyAqCisgKiBUaGlzIHNob3VsZCB1c2UgYSBzZXBhcmF0ZSBXaWRnZXQsIGJ1dCB0aGF0IHNlZW1zIG5vdCBwb3NzaWJsZSwgYmVjYXVzZQorICogcHJlZWRpdF9hcmVhIGFuZCBzdGF0dXNfYXJlYSBzaG91bGQgYmUgc2V0IHRvIHRoZSBzYW1lIHdpbmRvdyBhcyBmb3IgdGhlCisgKiB0ZXh0IGlucHV0LiAgVW5mb3J0dW5hdGVseSB0aGlzIG1lYW5zIHRoZSBzdGF0dXMgYXJlYSBwb2xsdXRlcyB0aGUgdGV4dAorICogd2luZG93Li4uCisgKi8KKyAgICB2b2lkCit4aW1fc2V0X3N0YXR1c19hcmVhKCkKK3sKKyAgICBpZiAoeGljID09IE5VTEwpCisJcmV0dXJuOworCisjaWZkZWYgRkVBVF9HVUlfR1RLCisjIGlmIGRlZmluZWQoRkVBVF9YRk9OVFNFVCkKKyAgICBpZiAodXNlX3N0YXR1c19hcmVhKQorICAgIHsKKwlHZGtJQ0F0dHIJKmF0dHI7CisJaW50CQlzdHlsZTsKKwlnaW50CQl3aWR0aCwgaGVpZ2h0OworCUd0a1dpZGdldAkqd2lkZ2V0OworCWludAkJYXR0cm1hc2s7CisKKwlpZiAoIXhpY19hdHRyKQorCSAgICByZXR1cm47CisKKwlhdHRyID0geGljX2F0dHI7CisJYXR0cm1hc2sgPSAwOworCXN0eWxlID0gKGludClnZGtfaWNfZ2V0X3N0eWxlKHhpYyk7CisJaWYgKChzdHlsZSAmIChpbnQpR0RLX0lNX1NUQVRVU19NQVNLKSA9PSAoaW50KUdES19JTV9TVEFUVVNfQVJFQSkKKwl7CisJICAgIGlmIChndWkuZm9udHNldCAhPSBOT0ZPTlRTRVQKKwkJICAgICYmIGd1aS5mb250c2V0LT50eXBlID09IEdES19GT05UX0ZPTlRTRVQpCisJICAgIHsKKwkJd2lkZ2V0ID0gZ3VpLm1haW53aW47CisJCWdka193aW5kb3dfZ2V0X3NpemUod2lkZ2V0LT53aW5kb3csICZ3aWR0aCwgJmhlaWdodCk7CisKKwkJYXR0cm1hc2sgfD0gKGludClHREtfSUNfU1RBVFVTX0FSRUE7CisJCWF0dHItPnN0YXR1c19hcmVhLnggPSAwOworCQlhdHRyLT5zdGF0dXNfYXJlYS55ID0gaGVpZ2h0IC0gZ3VpLmNoYXJfaGVpZ2h0IC0gMTsKKwkJYXR0ci0+c3RhdHVzX2FyZWEud2lkdGggPSB3aWR0aDsKKwkJYXR0ci0+c3RhdHVzX2FyZWEuaGVpZ2h0ID0gZ3VpLmNoYXJfaGVpZ2h0OworCSAgICB9CisJfQorCWlmIChhdHRybWFzayAhPSAwKQorCSAgICBnZGtfaWNfc2V0X2F0dHIoeGljLCBhdHRyLCAoR2RrSUNBdHRyaWJ1dGVzVHlwZSlhdHRybWFzayk7CisgICAgfQorIyBlbmRpZgorI2Vsc2UKKyAgICB7CisJWFZhTmVzdGVkTGlzdCBwcmVlZGl0X2xpc3QgPSAwLCBzdGF0dXNfbGlzdCA9IDAsIGxpc3QgPSAwOworCVhSZWN0YW5nbGUgcHJlX2FyZWEsIHN0YXR1c19hcmVhOworCisJaWYgKGlucHV0X3N0eWxlICYgWElNU3RhdHVzQXJlYSkKKwl7CisJICAgIGlmIChpbnB1dF9zdHlsZSAmIFhJTVByZWVkaXRBcmVhKQorCSAgICB7CisJCVhSZWN0YW5nbGUgKm5lZWRlZF9yZWN0OworCisJCS8qIHRvIGdldCBzdGF0dXNfYXJlYSB3aWR0aCAqLworCQlzdGF0dXNfbGlzdCA9IFhWYUNyZWF0ZU5lc3RlZExpc3QoMCwgWE5BcmVhTmVlZGVkLAorCQkJCQkJICAmbmVlZGVkX3JlY3QsIE5VTEwpOworCQlYR2V0SUNWYWx1ZXMoeGljLCBYTlN0YXR1c0F0dHJpYnV0ZXMsIHN0YXR1c19saXN0LCBOVUxMKTsKKwkJWEZyZWUoc3RhdHVzX2xpc3QpOworCisJCXN0YXR1c19hcmVhLndpZHRoID0gbmVlZGVkX3JlY3QtPndpZHRoOworCSAgICB9CisJICAgIGVsc2UKKwkJc3RhdHVzX2FyZWEud2lkdGggPSBndWkuY2hhcl93aWR0aCAqIENvbHVtbnM7CisKKwkgICAgc3RhdHVzX2FyZWEueCA9IDA7CisJICAgIHN0YXR1c19hcmVhLnkgPSBndWkuY2hhcl9oZWlnaHQgKiBSb3dzICsgZ3VpLmJvcmRlcl9vZmZzZXQ7CisJICAgIGlmIChndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0JPVFRPTV0pCisJCXN0YXR1c19hcmVhLnkgKz0gZ3VpLnNjcm9sbGJhcl9oZWlnaHQ7CisjaWZkZWYgRkVBVF9NRU5VCisJICAgIGlmIChndWkubWVudV9pc19hY3RpdmUpCisJCXN0YXR1c19hcmVhLnkgKz0gZ3VpLm1lbnVfaGVpZ2h0OworI2VuZGlmCisJICAgIHN0YXR1c19hcmVhLmhlaWdodCA9IGd1aS5jaGFyX2hlaWdodDsKKwkgICAgc3RhdHVzX2xpc3QgPSBYVmFDcmVhdGVOZXN0ZWRMaXN0KDAsIFhOQXJlYSwgJnN0YXR1c19hcmVhLCBOVUxMKTsKKwl9CisJZWxzZQorCXsKKwkgICAgc3RhdHVzX2FyZWEueCA9IDA7CisJICAgIHN0YXR1c19hcmVhLnkgPSBndWkuY2hhcl9oZWlnaHQgKiBSb3dzICsgZ3VpLmJvcmRlcl9vZmZzZXQ7CisJICAgIGlmIChndWkud2hpY2hfc2Nyb2xsYmFyc1tTQkFSX0JPVFRPTV0pCisJCXN0YXR1c19hcmVhLnkgKz0gZ3VpLnNjcm9sbGJhcl9oZWlnaHQ7CisjaWZkZWYgRkVBVF9NRU5VCisJICAgIGlmIChndWkubWVudV9pc19hY3RpdmUpCisJCXN0YXR1c19hcmVhLnkgKz0gZ3VpLm1lbnVfaGVpZ2h0OworI2VuZGlmCisJICAgIHN0YXR1c19hcmVhLndpZHRoID0gMDsKKwkgICAgc3RhdHVzX2FyZWEuaGVpZ2h0ID0gZ3VpLmNoYXJfaGVpZ2h0OworCX0KKworCWlmIChpbnB1dF9zdHlsZSAmIFhJTVByZWVkaXRBcmVhKSAgIC8qIG9mZi10aGUtc3BvdCAqLworCXsKKwkgICAgcHJlX2FyZWEueCA9IHN0YXR1c19hcmVhLnggKyBzdGF0dXNfYXJlYS53aWR0aDsKKwkgICAgcHJlX2FyZWEueSA9IGd1aS5jaGFyX2hlaWdodCAqIFJvd3MgKyBndWkuYm9yZGVyX29mZnNldDsKKwkgICAgcHJlX2FyZWEud2lkdGggPSBndWkuY2hhcl93aWR0aCAqIENvbHVtbnMgLSBwcmVfYXJlYS54OworCSAgICBpZiAoZ3VpLndoaWNoX3Njcm9sbGJhcnNbU0JBUl9CT1RUT01dKQorCQlwcmVfYXJlYS55ICs9IGd1aS5zY3JvbGxiYXJfaGVpZ2h0OworI2lmZGVmIEZFQVRfTUVOVQorCSAgICBpZiAoZ3VpLm1lbnVfaXNfYWN0aXZlKQorCQlwcmVfYXJlYS55ICs9IGd1aS5tZW51X2hlaWdodDsKKyNlbmRpZgorCSAgICBwcmVfYXJlYS5oZWlnaHQgPSBndWkuY2hhcl9oZWlnaHQ7CisJICAgIHByZWVkaXRfbGlzdCA9IFhWYUNyZWF0ZU5lc3RlZExpc3QoMCwgWE5BcmVhLCAmcHJlX2FyZWEsIE5VTEwpOworCX0KKwllbHNlIGlmIChpbnB1dF9zdHlsZSAmIFhJTVByZWVkaXRQb3NpdGlvbikgICAvKiBvdmVyLXRoZS1zcG90ICovCisJeworCSAgICBwcmVfYXJlYS54ID0gMDsKKwkgICAgcHJlX2FyZWEueSA9IDA7CisJICAgIHByZV9hcmVhLmhlaWdodCA9IGd1aS5jaGFyX2hlaWdodCAqIFJvd3M7CisJICAgIHByZV9hcmVhLndpZHRoID0gZ3VpLmNoYXJfd2lkdGggKiBDb2x1bW5zOworCSAgICBwcmVlZGl0X2xpc3QgPSBYVmFDcmVhdGVOZXN0ZWRMaXN0KDAsIFhOQXJlYSwgJnByZV9hcmVhLCBOVUxMKTsKKwl9CisKKwlpZiAocHJlZWRpdF9saXN0ICYmIHN0YXR1c19saXN0KQorCSAgICBsaXN0ID0gWFZhQ3JlYXRlTmVzdGVkTGlzdCgwLCBYTlByZWVkaXRBdHRyaWJ1dGVzLCBwcmVlZGl0X2xpc3QsCisJCQkJICAgICAgIFhOU3RhdHVzQXR0cmlidXRlcywgc3RhdHVzX2xpc3QsIE5VTEwpOworCWVsc2UgaWYgKHByZWVkaXRfbGlzdCkKKwkgICAgbGlzdCA9IFhWYUNyZWF0ZU5lc3RlZExpc3QoMCwgWE5QcmVlZGl0QXR0cmlidXRlcywgcHJlZWRpdF9saXN0LAorCQkJCSAgICAgICBOVUxMKTsKKwllbHNlIGlmIChzdGF0dXNfbGlzdCkKKwkgICAgbGlzdCA9IFhWYUNyZWF0ZU5lc3RlZExpc3QoMCwgWE5TdGF0dXNBdHRyaWJ1dGVzLCBzdGF0dXNfbGlzdCwKKwkJCQkgICAgICAgTlVMTCk7CisJZWxzZQorCSAgICBsaXN0ID0gTlVMTDsKKworCWlmIChsaXN0KQorCXsKKwkgICAgWFNldElDVmFsdWVzKHhpYywgWE5WYU5lc3RlZExpc3QsIGxpc3QsIE5VTEwpOworCSAgICBYRnJlZShsaXN0KTsKKwl9CisJaWYgKHN0YXR1c19saXN0KQorCSAgICBYRnJlZShzdGF0dXNfbGlzdCk7CisJaWYgKHByZWVkaXRfbGlzdCkKKwkgICAgWEZyZWUocHJlZWRpdF9saXN0KTsKKyAgICB9CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoRkVBVF9HVUlfWDExKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykKK3N0YXRpYyBjaGFyIGVfeGltW10gPSBOXygiRTI4NTogRmFpbGVkIHRvIGNyZWF0ZSBpbnB1dCBjb250ZXh0Iik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9HVUlfWDExKSB8fCBkZWZpbmVkKFBST1RPKQorIyBpZiBkZWZpbmVkKFh0U3BlY2lmaWNhdGlvblJlbGVhc2UpICYmIFh0U3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNiAmJiAhZGVmaW5lZChzdW4pCisjICBkZWZpbmUgVVNFX1gxMVI2X1hJTQorIyBlbmRpZgorCitzdGF0aWMgaW50IHhpbV9yZWFsX2luaXQgX19BUkdTKChXaW5kb3cgeDExX3dpbmRvdywgRGlzcGxheSAqeDExX2Rpc3BsYXkpKTsKKworCisjaWZkZWYgVVNFX1gxMVI2X1hJTQorc3RhdGljIHZvaWQgeGltX2luc3RhbnRpYXRlX2NiIF9fQVJHUygoRGlzcGxheSAqZGlzcGxheSwgWFBvaW50ZXIgY2xpZW50X2RhdGEsIFhQb2ludGVyCWNhbGxfZGF0YSkpOworc3RhdGljIHZvaWQgeGltX2Rlc3Ryb3lfY2IgX19BUkdTKChYSU0gaW0sIFhQb2ludGVyIGNsaWVudF9kYXRhLCBYUG9pbnRlciBjYWxsX2RhdGEpKTsKKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK3hpbV9pbnN0YW50aWF0ZV9jYihkaXNwbGF5LCBjbGllbnRfZGF0YSwgY2FsbF9kYXRhKQorICAgIERpc3BsYXkJKmRpc3BsYXk7CisgICAgWFBvaW50ZXIJY2xpZW50X2RhdGE7CisgICAgWFBvaW50ZXIJY2FsbF9kYXRhOworeworICAgIFdpbmRvdwl4MTFfd2luZG93OworICAgIERpc3BsYXkJKngxMV9kaXNwbGF5OworCisjaWZkZWYgWElNX0RFQlVHCisgICAgeGltX2xvZygieGltX2luc3RhbnRpYXRlX2NiKClcbiIpOworI2VuZGlmCisKKyAgICBndWlfZ2V0X3gxMV93aW5kaXMoJngxMV93aW5kb3csICZ4MTFfZGlzcGxheSk7CisgICAgaWYgKGRpc3BsYXkgIT0geDExX2Rpc3BsYXkpCisJcmV0dXJuOworCisgICAgeGltX3JlYWxfaW5pdCh4MTFfd2luZG93LCB4MTFfZGlzcGxheSk7CisgICAgZ3VpX3NldF9zaGVsbHNpemUoRkFMU0UsIEZBTFNFKTsKKyAgICBpZiAoeGljICE9IE5VTEwpCisJWFVucmVnaXN0ZXJJTUluc3RhbnRpYXRlQ2FsbGJhY2soeDExX2Rpc3BsYXksIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJCSB4aW1faW5zdGFudGlhdGVfY2IsIE5VTEwpOworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAoreGltX2Rlc3Ryb3lfY2IoaW0sIGNsaWVudF9kYXRhLCBjYWxsX2RhdGEpCisgICAgWElNCQlpbTsKKyAgICBYUG9pbnRlcgljbGllbnRfZGF0YTsKKyAgICBYUG9pbnRlcgljYWxsX2RhdGE7Cit7CisgICAgV2luZG93CXgxMV93aW5kb3c7CisgICAgRGlzcGxheQkqeDExX2Rpc3BsYXk7CisKKyNpZmRlZiBYSU1fREVCVUcKKyAgICB4aW1fbG9nKCJ4aW1fZGVzdHJveV9jYigpXG4iKTsKKyNlbmRpZgorICAgIGd1aV9nZXRfeDExX3dpbmRpcygmeDExX3dpbmRvdywgJngxMV9kaXNwbGF5KTsKKworICAgIHhpYyA9IE5VTEw7CisgICAgc3RhdHVzX2FyZWFfZW5hYmxlZCA9IEZBTFNFOworCisgICAgZ3VpX3NldF9zaGVsbHNpemUoRkFMU0UsIEZBTFNFKTsKKworICAgIFhSZWdpc3RlcklNSW5zdGFudGlhdGVDYWxsYmFjayh4MTFfZGlzcGxheSwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgICB4aW1faW5zdGFudGlhdGVfY2IsIE5VTEwpOworfQorI2VuZGlmCisKKyAgICB2b2lkCit4aW1faW5pdCgpCit7CisgICAgV2luZG93CXgxMV93aW5kb3c7CisgICAgRGlzcGxheQkqeDExX2Rpc3BsYXk7CisKKyNpZmRlZiBYSU1fREVCVUcKKyAgICB4aW1fbG9nKCJ4aW1faW5pdCgpXG4iKTsKKyNlbmRpZgorCisgICAgZ3VpX2dldF94MTFfd2luZGlzKCZ4MTFfd2luZG93LCAmeDExX2Rpc3BsYXkpOworCisgICAgeGljID0gTlVMTDsKKworICAgIGlmICh4aW1fcmVhbF9pbml0KHgxMV93aW5kb3csIHgxMV9kaXNwbGF5KSkKKwlyZXR1cm47CisKKyAgICBndWlfc2V0X3NoZWxsc2l6ZShGQUxTRSwgRkFMU0UpOworCisjaWZkZWYgVVNFX1gxMVI2X1hJTQorICAgIFhSZWdpc3RlcklNSW5zdGFudGlhdGVDYWxsYmFjayh4MTFfZGlzcGxheSwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgICB4aW1faW5zdGFudGlhdGVfY2IsIE5VTEwpOworI2VuZGlmCit9CisKKyAgICBzdGF0aWMgaW50Cit4aW1fcmVhbF9pbml0KHgxMV93aW5kb3csIHgxMV9kaXNwbGF5KQorICAgIFdpbmRvdwl4MTFfd2luZG93OworICAgIERpc3BsYXkJKngxMV9kaXNwbGF5OworeworICAgIGludAkJaTsKKyAgICBjaGFyCSpwLAorCQkqcywKKwkJKm5zLAorCQkqZW5kLAorCQl0bXBbMTAyNF07CisjZGVmaW5lIElNTEVOX01BWCA0MAorICAgIGNoYXIJYnVmW0lNTEVOX01BWCArIDddOworICAgIFhJTQkJeGltID0gTlVMTDsKKyAgICBYSU1TdHlsZXMJKnhpbV9zdHlsZXM7CisgICAgWElNU3R5bGUJdGhpc19pbnB1dF9zdHlsZSA9IDA7CisgICAgQm9vbGVhbglmb3VuZDsKKyAgICBYUG9pbnQJb3Zlcl9zcG90OworICAgIFhWYU5lc3RlZExpc3QgcHJlZWRpdF9saXN0LCBzdGF0dXNfbGlzdDsKKworICAgIGlucHV0X3N0eWxlID0gMDsKKyAgICBzdGF0dXNfYXJlYV9lbmFibGVkID0gRkFMU0U7CisKKyAgICBpZiAoeGljICE9IE5VTEwpCisJcmV0dXJuIEZBTFNFOworCisgICAgaWYgKGd1aS5yc3JjX2lucHV0X21ldGhvZCAhPSBOVUxMICYmICpndWkucnNyY19pbnB1dF9tZXRob2QgIT0gTlVMKQorICAgIHsKKwlzdHJjcHkodG1wLCBndWkucnNyY19pbnB1dF9tZXRob2QpOworCWZvciAobnMgPSBzID0gdG1wOyBucyAhPSBOVUxMICYmICpzICE9IE5VTDspCisJeworCSAgICBzID0gKGNoYXIgKilza2lwd2hpdGUoKGNoYXJfdSAqKXMpOworCSAgICBpZiAoKnMgPT0gTlVMKQorCQlicmVhazsKKwkgICAgaWYgKChucyA9IGVuZCA9IHN0cmNocihzLCAnLCcpKSA9PSBOVUxMKQorCQllbmQgPSBzICsgc3RybGVuKHMpOworCSAgICB3aGlsZSAoaXNzcGFjZSgoKGNoYXJfdSAqKWVuZClbLTFdKSkKKwkJZW5kLS07CisJICAgICplbmQgPSBOVUw7CisKKwkgICAgaWYgKHN0cmxlbihzKSA8PSBJTUxFTl9NQVgpCisJICAgIHsKKwkJc3RyY3B5KGJ1ZiwgIkBpbT0iKTsKKwkJc3RyY2F0KGJ1Ziwgcyk7CisJCWlmICgocCA9IFhTZXRMb2NhbGVNb2RpZmllcnMoYnVmKSkgIT0gTlVMTCAmJiAqcCAhPSBOVUwKKwkJCSYmICh4aW0gPSBYT3BlbklNKHgxMV9kaXNwbGF5LCBOVUxMLCBOVUxMLCBOVUxMKSkKKwkJCQkJCQkJICAgICAgIT0gTlVMTCkKKwkJICAgIGJyZWFrOworCSAgICB9CisKKwkgICAgcyA9IG5zICsgMTsKKwl9CisgICAgfQorCisgICAgaWYgKHhpbSA9PSBOVUxMICYmIChwID0gWFNldExvY2FsZU1vZGlmaWVycygiIikpICE9IE5VTEwgJiYgKnAgIT0gTlVMKQorCXhpbSA9IFhPcGVuSU0oeDExX2Rpc3BsYXksIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgLyogVGhpcyBpcyBzdXBwb3NlZCB0byBiZSB1c2VmdWwgdG8gb2J0YWluIGNoYXJhY3RlcnMgdGhyb3VnaAorICAgICAqIFhtYkxvb2t1cFN0cmluZygpIHdpdGhvdXQgcmVhbGx5IHVzaW5nIGEgWElNLiAqLworICAgIGlmICh4aW0gPT0gTlVMTCAmJiAocCA9IFhTZXRMb2NhbGVNb2RpZmllcnMoIkBpbT1ub25lIikpICE9IE5VTEwKKwkJCQkJCQkJICYmICpwICE9IE5VTCkKKwl4aW0gPSBYT3BlbklNKHgxMV9kaXNwbGF5LCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIGlmICh4aW0gPT0gTlVMTCkKKyAgICB7CisJLyogT25seSBnaXZlIHRoaXMgbWVzc2FnZSB3aGVuIHZlcmJvc2UgaXMgc2V0LCBiZWNhdXNlIHRvbyBtYW55IHBlb3BsZQorCSAqIGdvdCB0aGlzIG1lc3NhZ2Ugd2hlbiB0aGV5IGRpZG4ndCB3YW50IHRvIHVzZSBhIFhJTS4gKi8KKwlpZiAocF92ZXJib3NlID4gMCkKKwkgICAgRU1TRyhfKCJFMjg2OiBGYWlsZWQgdG8gb3BlbiBpbnB1dCBtZXRob2QiKSk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworI2lmZGVmIFVTRV9YMTFSNl9YSU0KKyAgICB7CisJWElNQ2FsbGJhY2sgZGVzdHJveV9jYjsKKworCWRlc3Ryb3lfY2IuY2FsbGJhY2sgPSB4aW1fZGVzdHJveV9jYjsKKwlkZXN0cm95X2NiLmNsaWVudF9kYXRhID0gTlVMTDsKKwlpZiAoWFNldElNVmFsdWVzKHhpbSwgWE5EZXN0cm95Q2FsbGJhY2ssICZkZXN0cm95X2NiLCBOVUxMKSkKKwkgICAgRU1TRyhfKCJFMjg3OiBXYXJuaW5nOiBDb3VsZCBub3Qgc2V0IGRlc3Ryb3kgY2FsbGJhY2sgdG8gSU0iKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoWEdldElNVmFsdWVzKHhpbSwgWE5RdWVyeUlucHV0U3R5bGUsICZ4aW1fc3R5bGVzLCBOVUxMKSB8fCAheGltX3N0eWxlcykKKyAgICB7CisJRU1TRyhfKCJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIpKTsKKwlYQ2xvc2VJTSh4aW0pOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBmb3VuZCA9IEZhbHNlOworICAgIHN0cmNweSh0bXAsIGd1aS5yc3JjX3ByZWVkaXRfdHlwZV9uYW1lKTsKKyAgICBmb3IgKHMgPSB0bXA7IHMgJiYgIWZvdW5kOyApCisgICAgeworCXdoaWxlICgqcyAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpzKSkKKwkgICAgcysrOworCWlmICghKnMpCisJICAgIGJyZWFrOworCWlmICgobnMgPSBlbmQgPSBzdHJjaHIocywgJywnKSkgIT0gMCkKKwkgICAgbnMrKzsKKwllbHNlCisJICAgIGVuZCA9IHMgKyBzdHJsZW4ocyk7CisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmVuZCkpCisJICAgIGVuZC0tOworCSplbmQgPSAnXDAnOworCisJaWYgKCFzdHJjbXAocywgIk92ZXJUaGVTcG90IikpCisJICAgIHRoaXNfaW5wdXRfc3R5bGUgPSAoWElNUHJlZWRpdFBvc2l0aW9uIHwgWElNU3RhdHVzQXJlYSk7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAiT2ZmVGhlU3BvdCIpKQorCSAgICB0aGlzX2lucHV0X3N0eWxlID0gKFhJTVByZWVkaXRBcmVhIHwgWElNU3RhdHVzQXJlYSk7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAiUm9vdCIpKQorCSAgICB0aGlzX2lucHV0X3N0eWxlID0gKFhJTVByZWVkaXROb3RoaW5nIHwgWElNU3RhdHVzTm90aGluZyk7CisKKwlmb3IgKGkgPSAwOyAodW5zaWduZWQgc2hvcnQpaSA8IHhpbV9zdHlsZXMtPmNvdW50X3N0eWxlczsgaSsrKQorCXsKKwkgICAgaWYgKHRoaXNfaW5wdXRfc3R5bGUgPT0geGltX3N0eWxlcy0+c3VwcG9ydGVkX3N0eWxlc1tpXSkKKwkgICAgeworCQlmb3VuZCA9IFRydWU7CisJCWJyZWFrOworCSAgICB9CisJfQorCWlmICghZm91bmQpCisJICAgIGZvciAoaSA9IDA7ICh1bnNpZ25lZCBzaG9ydClpIDwgeGltX3N0eWxlcy0+Y291bnRfc3R5bGVzOyBpKyspCisJICAgIHsKKwkJaWYgKCh4aW1fc3R5bGVzLT5zdXBwb3J0ZWRfc3R5bGVzW2ldICYgdGhpc19pbnB1dF9zdHlsZSkKKwkJCT09ICh0aGlzX2lucHV0X3N0eWxlICYgflhJTVN0YXR1c0FyZWEpKQorCQl7CisJCSAgICB0aGlzX2lucHV0X3N0eWxlICY9IH5YSU1TdGF0dXNBcmVhOworCQkgICAgZm91bmQgPSBUcnVlOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCisJcyA9IG5zOworICAgIH0KKyAgICBYRnJlZSh4aW1fc3R5bGVzKTsKKworICAgIGlmICghZm91bmQpCisgICAgeworCS8qIE9ubHkgZ2l2ZSB0aGlzIG1lc3NhZ2Ugd2hlbiB2ZXJib3NlIGlzIHNldCwgYmVjYXVzZSB0b28gbWFueSBwZW9wbGUKKwkgKiBnb3QgdGhpcyBtZXNzYWdlIHdoZW4gdGhleSBkaWRuJ3Qgd2FudCB0byB1c2UgYSBYSU0uICovCisJaWYgKHBfdmVyYm9zZSA+IDApCisJICAgIEVNU0coXygiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiKSk7CisJWENsb3NlSU0oeGltKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgb3Zlcl9zcG90LnggPSBURVhUX1goZ3VpLmNvbCk7CisgICAgb3Zlcl9zcG90LnkgPSBURVhUX1koZ3VpLnJvdyk7CisgICAgaW5wdXRfc3R5bGUgPSB0aGlzX2lucHV0X3N0eWxlOworCisgICAgLyogQSBjcmFzaCB3YXMgcmVwb3J0ZWQgd2hlbiB0cnlpbmcgdG8gcGFzcyBndWkubm9ybV9mb250IGFzIFhORm9udFNldCwKKyAgICAgKiB0aHVzIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZC4gIEhvcGVmdWxseSB0aGUgZGVmYXVsdCB3b3Jrcy4uLiAqLworI2lmZGVmIEZFQVRfWEZPTlRTRVQKKyAgICBpZiAoZ3VpLmZvbnRzZXQgIT0gTk9GT05UU0VUKQorICAgIHsKKwlwcmVlZGl0X2xpc3QgPSBYVmFDcmVhdGVOZXN0ZWRMaXN0KDAsCisJCQkJWE5TcG90TG9jYXRpb24sICZvdmVyX3Nwb3QsCisJCQkJWE5Gb3JlZ3JvdW5kLCAoUGl4ZWwpZ3VpLmRlZl9ub3JtX3BpeGVsLAorCQkJCVhOQmFja2dyb3VuZCwgKFBpeGVsKWd1aS5kZWZfYmFja19waXhlbCwKKwkJCQlYTkZvbnRTZXQsIChYRm9udFNldClndWkuZm9udHNldCwKKwkJCQlOVUxMKTsKKwlzdGF0dXNfbGlzdCA9IFhWYUNyZWF0ZU5lc3RlZExpc3QoMCwKKwkJCQlYTkZvcmVncm91bmQsIChQaXhlbClndWkuZGVmX25vcm1fcGl4ZWwsCisJCQkJWE5CYWNrZ3JvdW5kLCAoUGl4ZWwpZ3VpLmRlZl9iYWNrX3BpeGVsLAorCQkJCVhORm9udFNldCwgKFhGb250U2V0KWd1aS5mb250c2V0LAorCQkJCU5VTEwpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJcHJlZWRpdF9saXN0ID0gWFZhQ3JlYXRlTmVzdGVkTGlzdCgwLAorCQkJCVhOU3BvdExvY2F0aW9uLCAmb3Zlcl9zcG90LAorCQkJCVhORm9yZWdyb3VuZCwgKFBpeGVsKWd1aS5kZWZfbm9ybV9waXhlbCwKKwkJCQlYTkJhY2tncm91bmQsIChQaXhlbClndWkuZGVmX2JhY2tfcGl4ZWwsCisJCQkJTlVMTCk7CisJc3RhdHVzX2xpc3QgPSBYVmFDcmVhdGVOZXN0ZWRMaXN0KDAsCisJCQkJWE5Gb3JlZ3JvdW5kLCAoUGl4ZWwpZ3VpLmRlZl9ub3JtX3BpeGVsLAorCQkJCVhOQmFja2dyb3VuZCwgKFBpeGVsKWd1aS5kZWZfYmFja19waXhlbCwKKwkJCQlOVUxMKTsKKyAgICB9CisKKyAgICB4aWMgPSBYQ3JlYXRlSUMoeGltLAorCQkgICAgWE5JbnB1dFN0eWxlLCBpbnB1dF9zdHlsZSwKKwkJICAgIFhOQ2xpZW50V2luZG93LCB4MTFfd2luZG93LAorCQkgICAgWE5Gb2N1c1dpbmRvdywgZ3VpLndpZCwKKwkJICAgIFhOUHJlZWRpdEF0dHJpYnV0ZXMsIHByZWVkaXRfbGlzdCwKKwkJICAgIFhOU3RhdHVzQXR0cmlidXRlcywgc3RhdHVzX2xpc3QsCisJCSAgICBOVUxMKTsKKyAgICBYRnJlZShzdGF0dXNfbGlzdCk7CisgICAgWEZyZWUocHJlZWRpdF9saXN0KTsKKyAgICBpZiAoeGljICE9IE5VTEwpCisgICAgeworCWlmIChpbnB1dF9zdHlsZSAmIFhJTVN0YXR1c0FyZWEpCisJeworCSAgICB4aW1fc2V0X3N0YXR1c19hcmVhKCk7CisJICAgIHN0YXR1c19hcmVhX2VuYWJsZWQgPSBUUlVFOworCX0KKwllbHNlCisJICAgIGd1aV9zZXRfc2hlbGxzaXplKEZBTFNFLCBGQUxTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJRU1TRyhfKGVfeGltKSk7CisJWENsb3NlSU0oeGltKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyNlbmRpZiAvKiBGRUFUX0dVSV9YMTEgKi8KKworI2lmIGRlZmluZWQoRkVBVF9HVUlfR1RLKSB8fCBkZWZpbmVkKFBST1RPKQorCisjIGlmZGVmIEZFQVRfWEZPTlRTRVQKK3N0YXRpYyBjaGFyIGVfb3ZlcnRoZXNwb3RbXSA9IE5fKCJFMjkwOiBvdmVyLXRoZS1zcG90IHN0eWxlIHJlcXVpcmVzIGZvbnRzZXQiKTsKKyMgZW5kaWYKKworIyBpZmRlZiBQUk9UTwordHlwZWRlZiBpbnQgR2RrSUM7CisjIGVuZGlmCisKKyAgICB2b2lkCit4aW1fZGVjaWRlX2lucHV0X3N0eWxlKCkKK3sKKyAgICAvKiBHREtfSU1fU1RBVFVTX0NBTExCQUNLUyB3YXMgZGlzYWJsZWQsIGVuYWJsZWQgaXQgdG8gYWxsb3cgSmFwYW5lc2UKKyAgICAgKiBPdmVyVGhlU3BvdC4gKi8KKyAgICBpbnQgc3VwcG9ydGVkX3N0eWxlID0gKGludClHREtfSU1fUFJFRURJVF9OT05FIHwKKwkJCQkgKGludClHREtfSU1fUFJFRURJVF9OT1RISU5HIHwKKwkJCQkgKGludClHREtfSU1fUFJFRURJVF9QT1NJVElPTiB8CisJCQkJIChpbnQpR0RLX0lNX1BSRUVESVRfQ0FMTEJBQ0tTIHwKKwkJCQkgKGludClHREtfSU1fU1RBVFVTX0NBTExCQUNLUyB8CisJCQkJIChpbnQpR0RLX0lNX1NUQVRVU19BUkVBIHwKKwkJCQkgKGludClHREtfSU1fU1RBVFVTX05PTkUgfAorCQkJCSAoaW50KUdES19JTV9TVEFUVVNfTk9USElORzsKKworI2lmZGVmIFhJTV9ERUJVRworICAgIHhpbV9sb2coInhpbV9kZWNpZGVfaW5wdXRfc3R5bGUoKVxuIik7CisjZW5kaWYKKworICAgIGlmICghZ2RrX2ltX3JlYWR5KCkpCisJeGltX2lucHV0X3N0eWxlID0gMDsKKyAgICBlbHNlCisgICAgeworCWlmIChndGtfbWFqb3JfdmVyc2lvbiA+IDEKKwkJfHwgKGd0a19tYWpvcl92ZXJzaW9uID09IDEKKwkJICAgICYmIChndGtfbWlub3JfdmVyc2lvbiA+IDIKKwkJCXx8IChndGtfbWlub3JfdmVyc2lvbiA9PSAyICYmIGd0a19taWNyb192ZXJzaW9uID49IDMpKSkpCisJICAgIHVzZV9zdGF0dXNfYXJlYSA9IFRSVUU7CisJZWxzZQorCXsKKwkgICAgRU1TRyhfKCJFMjkxOiBZb3VyIEdUSysgaXMgb2xkZXIgdGhhbiAxLjIuMy4gU3RhdHVzIGFyZWEgZGlzYWJsZWQiKSk7CisJICAgIHVzZV9zdGF0dXNfYXJlYSA9IEZBTFNFOworCX0KKyNpZmRlZiBGRUFUX1hGT05UU0VUCisJaWYgKGd1aS5mb250c2V0ID09IE5PRk9OVFNFVCB8fCBndWkuZm9udHNldC0+dHlwZSAhPSBHREtfRk9OVF9GT05UU0VUKQorI2VuZGlmCisJICAgIHN1cHBvcnRlZF9zdHlsZSAmPSB+KChpbnQpR0RLX0lNX1BSRUVESVRfUE9TSVRJT04KKwkJCQkJCSAgIHwgKGludClHREtfSU1fU1RBVFVTX0FSRUEpOworCWlmICghdXNlX3N0YXR1c19hcmVhKQorCSAgICBzdXBwb3J0ZWRfc3R5bGUgJj0gfihpbnQpR0RLX0lNX1NUQVRVU19BUkVBOworCXhpbV9pbnB1dF9zdHlsZSA9IChpbnQpZ2RrX2ltX2RlY2lkZV9zdHlsZSgoR2RrSU1TdHlsZSlzdXBwb3J0ZWRfc3R5bGUpOworICAgIH0KK30KKworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK3ByZWVkaXRfc3RhcnRfY2Jwcm9jKFhJQyB4aWMsIFhQb2ludGVyIGNsaWVudF9kYXRhLCBYUG9pbnRlciBjYWxsX2RhdGEpCit7CisjaWZkZWYgWElNX0RFQlVHCisgICAgeGltX2xvZygieGltX2RlY2lkZV9pbnB1dF9zdHlsZSgpXG4iKTsKKyNlbmRpZgorCisgICAgZHJhd19mZWVkYmFjayA9IE5VTEw7CisgICAgeGltX2Nhbl9wcmVlZGl0aW5nID0gVFJVRTsKKyAgICB4aW1faGFzX3ByZWVkaXRpbmcgPSBUUlVFOworICAgIGd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKyAgICBpZiAoc2hvd21vZGUoKSA+IDApCisgICAgeworCXNldGN1cnNvcigpOworCW91dF9mbHVzaCgpOworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCit4aW1fYmFja19kZWxldGUoaW50IG4pCit7CisgICAgY2hhcl91IHN0clszXTsKKworICAgIHN0clswXSA9IENTSTsKKyAgICBzdHJbMV0gPSAnayc7CisgICAgc3RyWzJdID0gJ2InOworICAgIHdoaWxlIChuLS0gPiAwKQorCWFkZF90b19pbnB1dF9idWYoc3RyLCAzKTsKK30KKworc3RhdGljIEdTTGlzdCAqa2V5X3ByZXNzX2V2ZW50X3F1ZXVlID0gTlVMTDsKK3N0YXRpYyBnYm9vbGVhbiBwcm9jZXNzaW5nX3F1ZXVlZF9ldmVudCA9IEZBTFNFOworCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorcHJlZWRpdF9kcmF3X2NicHJvYyhYSUMgeGljLCBYUG9pbnRlciBjbGllbnRfZGF0YSwgWFBvaW50ZXIgY2FsbF9kYXRhKQoreworICAgIFhJTVByZWVkaXREcmF3Q2FsbGJhY2tTdHJ1Y3QgKmRyYXdfZGF0YTsKKyAgICBYSU1UZXh0CSp0ZXh0OworICAgIGNoYXIJKnNyYzsKKyAgICBHU0xpc3QJKmV2ZW50X3F1ZXVlOworCisjaWZkZWYgWElNX0RFQlVHCisgICAgeGltX2xvZygicHJlZWRpdF9kcmF3X2NicHJvYygpXG4iKTsKKyNlbmRpZgorCisgICAgZHJhd19kYXRhID0gKFhJTVByZWVkaXREcmF3Q2FsbGJhY2tTdHJ1Y3QgKikgY2FsbF9kYXRhOworICAgIHRleHQgPSAoWElNVGV4dCAqKSBkcmF3X2RhdGEtPnRleHQ7CisKKyAgICBpZiAoKHRleHQgPT0gTlVMTCAmJiBkcmF3X2RhdGEtPmNoZ19sZW5ndGggPT0gcHJlZWRpdF9idWZfbGVuKQorCQkJCQkJICAgICAgfHwgcHJlZWRpdF9idWZfbGVuID09IDApCisgICAgeworCWluaXRfcHJlZWRpdF9zdGFydF9jb2woKTsKKwl2aW1fZnJlZShkcmF3X2ZlZWRiYWNrKTsKKwlkcmF3X2ZlZWRiYWNrID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGRyYXdfZGF0YS0+Y2hnX2xlbmd0aCA+IDApCisgICAgeworCWludCBic19jbnQ7CisKKwlpZiAoZHJhd19kYXRhLT5jaGdfbGVuZ3RoID4gcHJlZWRpdF9idWZfbGVuKQorCSAgICBic19jbnQgPSBwcmVlZGl0X2J1Zl9sZW47CisJZWxzZQorCSAgICBic19jbnQgPSBkcmF3X2RhdGEtPmNoZ19sZW5ndGg7CisJeGltX2JhY2tfZGVsZXRlKGJzX2NudCk7CisJcHJlZWRpdF9idWZfbGVuIC09IGJzX2NudDsKKyAgICB9CisgICAgaWYgKHRleHQgIT0gTlVMTCkKKyAgICB7CisJaW50CQlsZW47CisjaWZkZWYgRkVBVF9NQllURQorCWNoYXJfdQkJKmJ1ZiA9IE5VTEw7CisJdW5zaWduZWQgaW50CW5mZWVkYmFjayA9IDA7CisjZW5kaWYKKwljaGFyX3UJCSpwdHI7CisKKwlzcmMgPSB0ZXh0LT5zdHJpbmcubXVsdGlfYnl0ZTsKKwlpZiAoc3JjICE9IE5VTEwgJiYgIXRleHQtPmVuY29kaW5nX2lzX3djaGFyKQorCXsKKwkgICAgbGVuID0gc3RybGVuKHNyYyk7CisJICAgIHB0ciA9IChjaGFyX3UgKilzcmM7CisJICAgIC8qIEF2b2lkIHRoZSBlbnRlciBmb3IgZGVjaXNpb24gKi8KKwkgICAgaWYgKCpwdHIgPT0gJ1xuJykKKwkJcmV0dXJuOworCisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaW5wdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORQorCQkgICAgJiYgKGJ1ZiA9IHN0cmluZ19jb252ZXJ0KCZpbnB1dF9jb252LAorCQkJCQkJIChjaGFyX3UgKilzcmMsICZsZW4pKSAhPSBOVUxMKQorCSAgICB7CisJCS8qIENvbnZlcnRlZCBmcm9tICd0ZXJtZW5jb2RpbmcnIHRvICdlbmNvZGluZycuICovCisJCWFkZF90b19pbnB1dF9idWZfY3NpKGJ1ZiwgbGVuKTsKKwkJcHRyID0gYnVmOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCQlhZGRfdG9faW5wdXRfYnVmX2NzaSgoY2hhcl91ICopc3JjLCBsZW4pOworCSAgICAvKiBBZGQgY291bnQgb2YgY2hhcmFjdGVyIHRvIHByZWVkaXRfYnVmX2xlbiAgKi8KKwkgICAgd2hpbGUgKCpwdHIgIT0gTlVMKQorCSAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCQlpZiAoZHJhd19kYXRhLT50ZXh0LT5mZWVkYmFjayAhPSBOVUxMKQorCQl7CisJCSAgICBpZiAoZHJhd19mZWVkYmFjayA9PSBOVUxMKQorCQkJZHJhd19mZWVkYmFjayA9IChjaGFyICopYWxsb2MoZHJhd19kYXRhLT5jaGdfZmlyc3QKKwkJCQkJCQkgICAgICArIHRleHQtPmxlbmd0aCk7CisJCSAgICBlbHNlCisJCQlkcmF3X2ZlZWRiYWNrID0gcmVhbGxvYyhkcmF3X2ZlZWRiYWNrLAorCQkJCQkgZHJhd19kYXRhLT5jaGdfZmlyc3QgKyB0ZXh0LT5sZW5ndGgpOworCQkgICAgaWYgKGRyYXdfZmVlZGJhY2sgIT0gTlVMTCkKKwkJICAgIHsKKwkJCWRyYXdfZmVlZGJhY2tbbmZlZWRiYWNrICsgZHJhd19kYXRhLT5jaGdfZmlyc3RdCisJCQkJICAgICAgID0gZHJhd19kYXRhLT50ZXh0LT5mZWVkYmFja1tuZmVlZGJhY2tdOworCQkJbmZlZWRiYWNrKys7CisJCSAgICB9CisJCX0KKwkJaWYgKGhhc19tYnl0ZSkKKwkJICAgIHB0ciArPSBtYl9wdHIybGVuX2NoZWNrKHB0cik7CisJCWVsc2UKKyNlbmRpZgorCQkgICAgcHRyKys7CisJCXByZWVkaXRfYnVmX2xlbisrOworCSAgICB9CisjaWZkZWYgRkVBVF9NQllURQorCSAgICB2aW1fZnJlZShidWYpOworI2VuZGlmCisJICAgIHByZWVkaXRfZW5kX2NvbCA9IE1BWENPTDsKKwl9CisgICAgfQorICAgIGlmICh0ZXh0ICE9IE5VTEwgfHwgZHJhd19kYXRhLT5jaGdfbGVuZ3RoID4gMCkKKyAgICB7CisJZXZlbnRfcXVldWUgPSBrZXlfcHJlc3NfZXZlbnRfcXVldWU7CisJcHJvY2Vzc2luZ19xdWV1ZWRfZXZlbnQgPSBUUlVFOworCXdoaWxlIChldmVudF9xdWV1ZSAhPSBOVUxMICYmIHByb2Nlc3NpbmdfcXVldWVkX2V2ZW50KQorCXsKKwkgICAgR2RrRXZlbnQgKmV2ID0gZXZlbnRfcXVldWUtPmRhdGE7CisKKwkgICAgZ2Jvb2xlYW4gKnJldDsKKwkgICAgZ3RrX3NpZ25hbF9lbWl0X2J5X25hbWUoKEd0a09iamVjdCopZ3VpLm1haW53aW4sICJrZXlfcHJlc3NfZXZlbnQiLAorCQkJCQkJCQkgICAgZXYsICZyZXQpOworCSAgICBnZGtfZXZlbnRfZnJlZShldik7CisJICAgIGV2ZW50X3F1ZXVlID0gZXZlbnRfcXVldWUtPm5leHQ7CisJfQorCXByb2Nlc3NpbmdfcXVldWVkX2V2ZW50ID0gRkFMU0U7CisJaWYgKGtleV9wcmVzc19ldmVudF9xdWV1ZSkKKwl7CisJICAgIGdfc2xpc3RfZnJlZShrZXlfcHJlc3NfZXZlbnRfcXVldWUpOworCSAgICBrZXlfcHJlc3NfZXZlbnRfcXVldWUgPSBOVUxMOworCX0KKyAgICB9CisgICAgaWYgKGd0a19tYWluX2xldmVsKCkgPiAwKQorCWd0a19tYWluX3F1aXQoKTsKK30KKworLyoKKyAqIFJldHJpZXZlIHRoZSBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBhdCBjb2x1bW4gY29sIGluIHRoZSBwcmVlZGl0IHN0cmluZy4KKyAqIFJldHVybiAtMSBpZiBub3QgaW4gcHJlZWRpdGluZyBtb2RlIG9yIGlmIGNvbCBpcyBvdXQgb2YgcmFuZ2UuCisgKi8KKyAgICBpbnQKK2ltX2dldF9mZWVkYmFja19hdHRyKGludCBjb2wpCit7CisgICAgaWYgKGRyYXdfZmVlZGJhY2sgIT0gTlVMTCAmJiBjb2wgPCBwcmVlZGl0X2J1Zl9sZW4pCisgICAgeworCWlmIChkcmF3X2ZlZWRiYWNrW2NvbF0gJiBYSU1SZXZlcnNlKQorCSAgICByZXR1cm4gSExfSU5WRVJTRTsKKwllbHNlIGlmIChkcmF3X2ZlZWRiYWNrW2NvbF0gJiBYSU1VbmRlcmxpbmUpCisJICAgIHJldHVybiBITF9VTkRFUkxJTkU7CisJZWxzZQorCSAgICByZXR1cm4gaGxfYXR0cihITEZfVik7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorcHJlZWRpdF9jYXJldF9jYnByb2MoWElDIHhpYywgWFBvaW50ZXIgY2xpZW50X2RhdGEsIFhQb2ludGVyIGNhbGxfZGF0YSkKK3sKKyNpZmRlZiBYSU1fREVCVUcKKyAgICB4aW1fbG9nKCJwcmVlZGl0X2NhcmV0X2NicHJvYygpXG4iKTsKKyNlbmRpZgorfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorcHJlZWRpdF9kb25lX2NicHJvYyhYSUMgeGljLCBYUG9pbnRlciBjbGllbnRfZGF0YSwgWFBvaW50ZXIgY2FsbF9kYXRhKQoreworI2lmZGVmIFhJTV9ERUJVRworICAgIHhpbV9sb2coInByZWVkaXRfZG9uZV9jYnByb2MoKVxuIik7CisjZW5kaWYKKworICAgIHZpbV9mcmVlKGRyYXdfZmVlZGJhY2spOworICAgIGRyYXdfZmVlZGJhY2sgPSBOVUxMOworICAgIHhpbV9jYW5fcHJlZWRpdGluZyA9IEZBTFNFOworICAgIHhpbV9oYXNfcHJlZWRpdGluZyA9IEZBTFNFOworICAgIGd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKyAgICBpZiAoc2hvd21vZGUoKSA+IDApCisgICAgeworCXNldGN1cnNvcigpOworCW91dF9mbHVzaCgpOworICAgIH0KK30KKworICAgIHZvaWQKK3hpbV9yZXNldCh2b2lkKQoreworICAgIGNoYXIgKnRleHQ7CisKKyNpZmRlZiBYSU1fREVCVUcKKyAgICB4aW1fbG9nKCJ4aW1fcmVzZXQoKVxuIik7CisjZW5kaWYKKworICAgIGlmICh4aWMgIT0gTlVMTCkKKyAgICB7CisJdGV4dCA9IFhtYlJlc2V0SUMoKChHZGtJQ1ByaXZhdGUgKil4aWMpLT54aWMpOworCWlmICh0ZXh0ICE9IE5VTEwgJiYgISh4aW1faW5wdXRfc3R5bGUgJiAoaW50KUdES19JTV9QUkVFRElUX0NBTExCQUNLUykpCisJICAgIGFkZF90b19pbnB1dF9idWZfY3NpKChjaGFyX3UgKil0ZXh0LCBzdHJsZW4odGV4dCkpOworCWVsc2UKKwkgICAgcHJlZWRpdF9idWZfbGVuID0gMDsKKwlpZiAodGV4dCAhPSBOVUxMKQorCSAgICBYRnJlZSh0ZXh0KTsKKyAgICB9Cit9CisKKy8qQVJHU1VTRUQqLworICAgIGludAoreGltX3F1ZXVlX2tleV9wcmVzc19ldmVudChHZGtFdmVudEtleSAqZXZlbnQsIGludCBkb3duKQoreworI2lmZGVmIFhJTV9ERUJVRworICAgIHhpbV9sb2coInhpbV9xdWV1ZV9rZXlfcHJlc3NfZXZlbnQoKVxuIik7CisjZW5kaWYKKworICAgIGlmIChwcmVlZGl0X2J1Zl9sZW4gPD0gMCkKKwlyZXR1cm4gRkFMU0U7CisgICAgaWYgKHByb2Nlc3NpbmdfcXVldWVkX2V2ZW50KQorCXByb2Nlc3NpbmdfcXVldWVkX2V2ZW50ID0gRkFMU0U7CisKKyAgICBrZXlfcHJlc3NfZXZlbnRfcXVldWUgPSBnX3NsaXN0X2FwcGVuZChrZXlfcHJlc3NfZXZlbnRfcXVldWUsCisJCQkJCSAgIGdka19ldmVudF9jb3B5KChHZGtFdmVudCAqKWV2ZW50KSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCitwcmVlZGl0X2NhbGxiYWNrX3NldHVwKEdka0lDICppYykKK3sKKyAgICBYSUMgeHhpYzsKKyAgICBYVmFOZXN0ZWRMaXN0IHByZWVkaXRfYXR0cjsKKyAgICBYSU1DYWxsYmFjayBwcmVlZGl0X3N0YXJ0X2NiOworICAgIFhJTUNhbGxiYWNrIHByZWVkaXRfZHJhd19jYjsKKyAgICBYSU1DYWxsYmFjayBwcmVlZGl0X2NhcmV0X2NiOworICAgIFhJTUNhbGxiYWNrIHByZWVkaXRfZG9uZV9jYjsKKworICAgIHh4aWMgPSAoKEdka0lDUHJpdmF0ZSopeGljKS0+eGljOworICAgIHByZWVkaXRfc3RhcnRfY2IuY2FsbGJhY2sgPSAoWElNUHJvYylwcmVlZGl0X3N0YXJ0X2NicHJvYzsKKyAgICBwcmVlZGl0X2RyYXdfY2IuY2FsbGJhY2sgPSAoWElNUHJvYylwcmVlZGl0X2RyYXdfY2Jwcm9jOworICAgIHByZWVkaXRfY2FyZXRfY2IuY2FsbGJhY2sgPSAoWElNUHJvYylwcmVlZGl0X2NhcmV0X2NicHJvYzsKKyAgICBwcmVlZGl0X2RvbmVfY2IuY2FsbGJhY2sgPSAoWElNUHJvYylwcmVlZGl0X2RvbmVfY2Jwcm9jOworICAgIHByZWVkaXRfYXR0cgorCT0gWFZhQ3JlYXRlTmVzdGVkTGlzdCAoMCwKKwkJCSAgICAgICBYTlByZWVkaXRTdGFydENhbGxiYWNrLCAmcHJlZWRpdF9zdGFydF9jYiwKKwkJCSAgICAgICBYTlByZWVkaXREcmF3Q2FsbGJhY2ssICZwcmVlZGl0X2RyYXdfY2IsCisJCQkgICAgICAgWE5QcmVlZGl0Q2FyZXRDYWxsYmFjaywgJnByZWVkaXRfY2FyZXRfY2IsCisJCQkgICAgICAgWE5QcmVlZGl0RG9uZUNhbGxiYWNrLCAmcHJlZWRpdF9kb25lX2NiLAorCQkJICAgICAgIDApOworICAgIFhTZXRJQ1ZhbHVlcyAoeHhpYywgWE5QcmVlZGl0QXR0cmlidXRlcywgcHJlZWRpdF9hdHRyLCAwKTsKKyAgICBYRnJlZShwcmVlZGl0X2F0dHIpOworfQorCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAorcmVzZXRfc3RhdGVfc2V0dXAoR2RrSUMgKmljKQoreworI2lmZGVmIFVTRV9YMTFSNl9YSU0KKyAgICAvKiBkb24ndCBjaGFuZ2UgdGhlIGlucHV0IGNvbnRleHQgd2hlbiB3ZSBjYWxsIHJlc2V0ICovCisgICAgWFNldElDVmFsdWVzKCgoR2RrSUNQcml2YXRlKilpYyktPnhpYywgWE5SZXNldFN0YXRlLCBYSU1QcmVzZXJ2ZVN0YXRlLCAwKTsKKyNlbmRpZgorfQorCisgICAgdm9pZAoreGltX2luaXQodm9pZCkKK3sKKyNpZmRlZiBYSU1fREVCVUcKKyAgICB4aW1fbG9nKCJ4aW1faW5pdCgpXG4iKTsKKyNlbmRpZgorCisgICAgeGljID0gTlVMTDsKKyAgICB4aWNfYXR0ciA9IE5VTEw7CisKKyAgICBpZiAoIWdka19pbV9yZWFkeSgpKQorICAgIHsKKwlpZiAocF92ZXJib3NlID4gMCkKKwkgICAgRU1TRyhfKCJFMjkyOiBJbnB1dCBNZXRob2QgU2VydmVyIGlzIG5vdCBydW5uaW5nIikpOworCXJldHVybjsKKyAgICB9CisgICAgaWYgKCh4aWNfYXR0ciA9IGdka19pY19hdHRyX25ldygpKSAhPSBOVUxMKQorICAgIHsKKyNpZmRlZiBGRUFUX1hGT05UU0VUCisJZ2ludCB3aWR0aCwgaGVpZ2h0OworI2VuZGlmCisJaW50CQltYXNrOworCUdka0NvbG9ybWFwCSpjb2xvcm1hcDsKKwlHZGtJQ0F0dHIJKmF0dHIgPSB4aWNfYXR0cjsKKwlpbnQJCWF0dHJtYXNrID0gKGludClHREtfSUNfQUxMX1JFUTsKKwlHdGtXaWRnZXQJKndpZGdldCA9IGd1aS5kcmF3YXJlYTsKKworCWF0dHItPnN0eWxlID0gKEdka0lNU3R5bGUpeGltX2lucHV0X3N0eWxlOworCWF0dHItPmNsaWVudF93aW5kb3cgPSBndWkubWFpbndpbi0+d2luZG93OworCisJaWYgKChjb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwKHdpZGdldCkpICE9CisJICAgIGd0a193aWRnZXRfZ2V0X2RlZmF1bHRfY29sb3JtYXAoKSkKKwl7CisJICAgIGF0dHJtYXNrIHw9IChpbnQpR0RLX0lDX1BSRUVESVRfQ09MT1JNQVA7CisJICAgIGF0dHItPnByZWVkaXRfY29sb3JtYXAgPSBjb2xvcm1hcDsKKwl9CisJYXR0cm1hc2sgfD0gKGludClHREtfSUNfUFJFRURJVF9GT1JFR1JPVU5EOworCWF0dHJtYXNrIHw9IChpbnQpR0RLX0lDX1BSRUVESVRfQkFDS0dST1VORDsKKwlhdHRyLT5wcmVlZGl0X2ZvcmVncm91bmQgPSB3aWRnZXQtPnN0eWxlLT5mZ1tHVEtfU1RBVEVfTk9STUFMXTsKKwlhdHRyLT5wcmVlZGl0X2JhY2tncm91bmQgPSB3aWRnZXQtPnN0eWxlLT5iYXNlW0dUS19TVEFURV9OT1JNQUxdOworCisjaWZkZWYgRkVBVF9YRk9OVFNFVAorCWlmICgoeGltX2lucHV0X3N0eWxlICYgKGludClHREtfSU1fUFJFRURJVF9NQVNLKQorCQkJCQkgICAgICA9PSAoaW50KUdES19JTV9QUkVFRElUX1BPU0lUSU9OKQorCXsKKwkgICAgaWYgKGd1aS5mb250c2V0ID09IE5PRk9OVFNFVAorCQkgICAgfHwgZ3VpLmZvbnRzZXQtPnR5cGUgIT0gR0RLX0ZPTlRfRk9OVFNFVCkKKwkgICAgeworCQlFTVNHKF8oZV9vdmVydGhlc3BvdCkpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlnZGtfd2luZG93X2dldF9zaXplKHdpZGdldC0+d2luZG93LCAmd2lkdGgsICZoZWlnaHQpOworCisJCWF0dHJtYXNrIHw9IChpbnQpR0RLX0lDX1BSRUVESVRfUE9TSVRJT05fUkVROworCQlhdHRyLT5zcG90X2xvY2F0aW9uLnggPSBURVhUX1goMCk7CisJCWF0dHItPnNwb3RfbG9jYXRpb24ueSA9IFRFWFRfWSgwKTsKKwkJYXR0ci0+cHJlZWRpdF9hcmVhLnggPSBndWkuYm9yZGVyX29mZnNldDsKKwkJYXR0ci0+cHJlZWRpdF9hcmVhLnkgPSBndWkuYm9yZGVyX29mZnNldDsKKwkJYXR0ci0+cHJlZWRpdF9hcmVhLndpZHRoID0gd2lkdGggLSAyKmd1aS5ib3JkZXJfb2Zmc2V0OworCQlhdHRyLT5wcmVlZGl0X2FyZWEuaGVpZ2h0ID0gaGVpZ2h0IC0gMipndWkuYm9yZGVyX29mZnNldDsKKwkJYXR0ci0+cHJlZWRpdF9mb250c2V0ID0gZ3VpLmZvbnRzZXQ7CisJICAgIH0KKwl9CisKKwlpZiAoKHhpbV9pbnB1dF9zdHlsZSAmIChpbnQpR0RLX0lNX1NUQVRVU19NQVNLKQorCQkJCQkJICAgPT0gKGludClHREtfSU1fU1RBVFVTX0FSRUEpCisJeworCSAgICBpZiAoZ3VpLmZvbnRzZXQgPT0gTk9GT05UU0VUCisJCSAgICB8fCBndWkuZm9udHNldC0+dHlwZSAhPSBHREtfRk9OVF9GT05UU0VUKQorCSAgICB7CisJCUVNU0coXyhlX292ZXJ0aGVzcG90KSk7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWdka193aW5kb3dfZ2V0X3NpemUoZ3VpLm1haW53aW4tPndpbmRvdywgJndpZHRoLCAmaGVpZ2h0KTsKKwkJYXR0cm1hc2sgfD0gKGludClHREtfSUNfU1RBVFVTX0FSRUFfUkVROworCQlhdHRyLT5zdGF0dXNfYXJlYS54ID0gMDsKKwkJYXR0ci0+c3RhdHVzX2FyZWEueSA9IGhlaWdodCAtIGd1aS5jaGFyX2hlaWdodCAtIDE7CisJCWF0dHItPnN0YXR1c19hcmVhLndpZHRoID0gd2lkdGg7CisJCWF0dHItPnN0YXR1c19hcmVhLmhlaWdodCA9IGd1aS5jaGFyX2hlaWdodDsKKwkJYXR0ci0+c3RhdHVzX2ZvbnRzZXQgPSBndWkuZm9udHNldDsKKwkgICAgfQorCX0KKwllbHNlIGlmICgoeGltX2lucHV0X3N0eWxlICYgKGludClHREtfSU1fU1RBVFVTX01BU0spCisJCQkJCSAgICAgID09IChpbnQpR0RLX0lNX1NUQVRVU19DQUxMQkFDS1MpCisJeworCSAgICAvKiBGSVhNRSAqLworCX0KKyNlbmRpZgorCisJeGljID0gZ2RrX2ljX25ldyhhdHRyLCAoR2RrSUNBdHRyaWJ1dGVzVHlwZSlhdHRybWFzayk7CisKKwlpZiAoeGljID09IE5VTEwpCisJICAgIEVNU0coXyhlX3hpbSkpOworCWVsc2UKKwl7CisJICAgIG1hc2sgPSAoaW50KWdka193aW5kb3dfZ2V0X2V2ZW50cyh3aWRnZXQtPndpbmRvdyk7CisJICAgIG1hc2sgfD0gKGludClnZGtfaWNfZ2V0X2V2ZW50cyh4aWMpOworCSAgICBnZGtfd2luZG93X3NldF9ldmVudHMod2lkZ2V0LT53aW5kb3csIChHZGtFdmVudE1hc2spbWFzayk7CisJICAgIGlmICh4aW1faW5wdXRfc3R5bGUgJiAoaW50KUdES19JTV9QUkVFRElUX0NBTExCQUNLUykKKwkJcHJlZWRpdF9jYWxsYmFja19zZXR1cCh4aWMpOworCSAgICByZXNldF9zdGF0ZV9zZXR1cCh4aWMpOworCX0KKyAgICB9Cit9CisKKyAgICB2b2lkCitpbV9zaHV0ZG93bih2b2lkKQoreworI2lmZGVmIFhJTV9ERUJVRworICAgIHhpbV9sb2coImltX3NodXRkb3duKClcbiIpOworI2VuZGlmCisKKyAgICBpZiAoeGljICE9IE5VTEwpCisgICAgeworCWdka19pbV9lbmQoKTsKKwlnZGtfaWNfZGVzdHJveSh4aWMpOworCXhpYyA9IE5VTEw7CisgICAgfQorICAgIHhpbV9pc19hY3RpdmUgPSBGQUxTRTsKKyAgICB4aW1fY2FuX3ByZWVkaXRpbmcgPSBGQUxTRTsKKyAgICBwcmVlZGl0X3N0YXJ0X2NvbCA9IE1BWENPTDsKKyAgICB4aW1faGFzX3ByZWVkaXRpbmcgPSBGQUxTRTsKK30KKworI2VuZGlmIC8qIEZFQVRfR1VJX0dUSyAqLworCisgICAgaW50Cit4aW1fZ2V0X3N0YXR1c19hcmVhX2hlaWdodCgpCit7CisjaWZkZWYgRkVBVF9HVUlfR1RLCisgICAgaWYgKHhpbV9pbnB1dF9zdHlsZSAmIChpbnQpR0RLX0lNX1NUQVRVU19BUkVBKQorCXJldHVybiBndWkuY2hhcl9oZWlnaHQ7CisjZWxzZQorICAgIGlmIChzdGF0dXNfYXJlYV9lbmFibGVkKQorCXJldHVybiBndWkuY2hhcl9oZWlnaHQ7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEdldCBJTSBzdGF0dXMuICBXaGVuIElNIGlzIG9uLCByZXR1cm4gVFJVRS4gIEVsc2UgcmV0dXJuIEZBTFNFLgorICogRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseTogSGF2aW5nIGZvY3VzIGRvZXNuJ3QgYWx3YXlzIG1lYW4gWElNIGlzCisgKiBhY3RpdmUsIHdoZW4gbm90IGhhdmluZyBmb2N1cyBYSU0gbWF5IHN0aWxsIGJlIGFjdGl2ZSAoZS5nLiwgd2hlbiB1c2luZyBhCisgKiB0ZWFyLW9mZiBtZW51IGl0ZW0pLgorICovCisgICAgaW50CitpbV9nZXRfc3RhdHVzKCkKK3sKKyMgIGlmZGVmIEZFQVRfR1VJX0dUSworICAgIGlmICh4aW1faW5wdXRfc3R5bGUgJiAoaW50KUdES19JTV9QUkVFRElUX0NBTExCQUNLUykKKwlyZXR1cm4geGltX2Nhbl9wcmVlZGl0aW5nOworIyAgZW5kaWYKKyAgICByZXR1cm4geGltX2hhc19mb2N1czsKK30KKworIyBlbmRpZiAvKiAhSEFWRV9HVEsyICovCisKKyMgaWYgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoUFJPVE8pCisgICAgaW50CitpbV9pc19wcmVlZGl0aW5nKCkKK3sKKyAgICByZXR1cm4geGltX2hhc19wcmVlZGl0aW5nOworfQorIyBlbmRpZgorI2VuZGlmIC8qIEZFQVRfWElNICovCisKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qCisgKiBTZXR1cCAidmNwIiBmb3IgY29udmVyc2lvbiBmcm9tICJmcm9tIiB0byAidG8iLgorICogVGhlIG5hbWVzIG11c3QgaGF2ZSBiZWVuIG1hZGUgY2Fub25pY2FsIHdpdGggZW5jX2Nhbm9uaXplKCkuCisgKiB2Y3AtPnZjX3R5cGUgbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdG8gQ09OVl9OT05FLgorICogTm90ZTogY2Fubm90IGJlIHVzZWQgZm9yIGNvbnZlcnNpb24gZnJvbS90byB1Y3MtMiBhbmQgdWNzLTQgKHdpbGwgdXNlIHV0Zi04CisgKiBpbnN0ZWFkKS4KKyAqIEFmdGVyd2FyZHMgaW52b2tlIHdpdGggImZyb20iIGFuZCAidG8iIGVxdWFsIHRvIE5VTEwgdG8gY2xlYW51cC4KKyAqIFJldHVybiBGQUlMIHdoZW4gY29udmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkLCBPSyBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK2NvbnZlcnRfc2V0dXAodmNwLCBmcm9tLCB0bykKKyAgICB2aW1jb252X1QJKnZjcDsKKyAgICBjaGFyX3UJKmZyb207CisgICAgY2hhcl91CSp0bzsKK3sKKyAgICBpbnQJCWZyb21fcHJvcDsKKyAgICBpbnQJCXRvX3Byb3A7CisKKyAgICAvKiBSZXNldCB0byBubyBjb252ZXJzaW9uLiAqLworIyBpZmRlZiBVU0VfSUNPTlYKKyAgICBpZiAodmNwLT52Y190eXBlID09IENPTlZfSUNPTlYgJiYgdmNwLT52Y19mZCAhPSAoaWNvbnZfdCktMSkKKwlpY29udl9jbG9zZSh2Y3AtPnZjX2ZkKTsKKyMgZW5kaWYKKyAgICB2Y3AtPnZjX3R5cGUgPSBDT05WX05PTkU7CisgICAgdmNwLT52Y19mYWN0b3IgPSAxOworICAgIHZjcC0+dmNfZmFpbCA9IEZBTFNFOworCisgICAgLyogTm8gY29udmVyc2lvbiB3aGVuIG9uZSBvZiB0aGUgbmFtZXMgaXMgZW1wdHkgb3IgdGhleSBhcmUgZXF1YWwuICovCisgICAgaWYgKGZyb20gPT0gTlVMTCB8fCAqZnJvbSA9PSBOVUwgfHwgdG8gPT0gTlVMTCB8fCAqdG8gPT0gTlVMCisJCQkJCQkgICAgIHx8IFNUUkNNUChmcm9tLCB0bykgPT0gMCkKKwlyZXR1cm4gT0s7CisKKyAgICBmcm9tX3Byb3AgPSBlbmNfY2Fub25fcHJvcHMoZnJvbSk7CisgICAgdG9fcHJvcCA9IGVuY19jYW5vbl9wcm9wcyh0byk7CisgICAgaWYgKChmcm9tX3Byb3AgJiBFTkNfTEFUSU4xKSAmJiAodG9fcHJvcCAmIEVOQ19VTklDT0RFKSkKKyAgICB7CisJLyogSW50ZXJuYWwgbGF0aW4xIC0+IHV0Zi04IGNvbnZlcnNpb24uICovCisJdmNwLT52Y190eXBlID0gQ09OVl9UT19VVEY4OworCXZjcC0+dmNfZmFjdG9yID0gMjsJLyogdXAgdG8gdHdpY2UgYXMgbG9uZyAqLworICAgIH0KKyAgICBlbHNlIGlmICgoZnJvbV9wcm9wICYgRU5DX1VOSUNPREUpICYmICh0b19wcm9wICYgRU5DX0xBVElOMSkpCisgICAgeworCS8qIEludGVybmFsIHV0Zi04IC0+IGxhdGluMSBjb252ZXJzaW9uLiAqLworCXZjcC0+dmNfdHlwZSA9IENPTlZfVE9fTEFUSU4xOworICAgIH0KKyNpZmRlZiBXSU4zMjY0CisgICAgLyogV2luMzItc3BlY2lmaWMgY29kZXBhZ2UgPC0+IGNvZGVwYWdlIGNvbnZlcnNpb24gd2l0aG91dCBpY29udi4gKi8KKyAgICBlbHNlIGlmICgoKGZyb21fcHJvcCAmIEVOQ19VTklDT0RFKSB8fCBlbmNuYW1lMmNvZGVwYWdlKGZyb20pID4gMCkKKwkgICAgJiYgKCh0b19wcm9wICYgRU5DX1VOSUNPREUpIHx8IGVuY25hbWUyY29kZXBhZ2UodG8pID4gMCkpCisgICAgeworCXZjcC0+dmNfdHlwZSA9IENPTlZfQ09ERVBBR0U7CisJdmNwLT52Y19mYWN0b3IgPSAyOwkvKiB1cCB0byB0d2ljZSBhcyBsb25nICovCisJdmNwLT52Y19jcGZyb20gPSAoZnJvbV9wcm9wICYgRU5DX1VOSUNPREUpID8gMCA6IGVuY25hbWUyY29kZXBhZ2UoZnJvbSk7CisJdmNwLT52Y19jcHRvID0gKHRvX3Byb3AgJiBFTkNfVU5JQ09ERSkgPyAwIDogZW5jbmFtZTJjb2RlcGFnZSh0byk7CisgICAgfQorI2VuZGlmCisjaWZkZWYgTUFDT1NfWAorICAgIGVsc2UgaWYgKChmcm9tX3Byb3AgJiBFTkNfTUFDUk9NQU4pICYmICh0b19wcm9wICYgRU5DX0xBVElOMSkpCisgICAgeworCXZjcC0+dmNfdHlwZSA9IENPTlZfTUFDX0xBVElOMTsKKyAgICB9CisgICAgZWxzZSBpZiAoKGZyb21fcHJvcCAmIEVOQ19NQUNST01BTikgJiYgKHRvX3Byb3AgJiBFTkNfVU5JQ09ERSkpCisgICAgeworCXZjcC0+dmNfdHlwZSA9IENPTlZfTUFDX1VURjg7CisJdmNwLT52Y19mYWN0b3IgPSAyOwkvKiB1cCB0byB0d2ljZSBhcyBsb25nICovCisgICAgfQorICAgIGVsc2UgaWYgKChmcm9tX3Byb3AgJiBFTkNfTEFUSU4xKSAmJiAodG9fcHJvcCAmIEVOQ19NQUNST01BTikpCisgICAgeworCXZjcC0+dmNfdHlwZSA9IENPTlZfTEFUSU4xX01BQzsKKyAgICB9CisgICAgZWxzZSBpZiAoKGZyb21fcHJvcCAmIEVOQ19VTklDT0RFKSAmJiAodG9fcHJvcCAmIEVOQ19NQUNST01BTikpCisgICAgeworCXZjcC0+dmNfdHlwZSA9IENPTlZfVVRGOF9NQUM7CisgICAgfQorI2VuZGlmCisjIGlmZGVmIFVTRV9JQ09OVgorICAgIGVsc2UKKyAgICB7CisJLyogVXNlIGljb252KCkgZm9yIGNvbnZlcnNpb24uICovCisJdmNwLT52Y19mZCA9IChpY29udl90KW15X2ljb252X29wZW4oCisJCSh0b19wcm9wICYgRU5DX1VOSUNPREUpID8gKGNoYXJfdSAqKSJ1dGYtOCIgOiB0bywKKwkJKGZyb21fcHJvcCAmIEVOQ19VTklDT0RFKSA/IChjaGFyX3UgKikidXRmLTgiIDogZnJvbSk7CisJaWYgKHZjcC0+dmNfZmQgIT0gKGljb252X3QpLTEpCisJeworCSAgICB2Y3AtPnZjX3R5cGUgPSBDT05WX0lDT05WOworCSAgICB2Y3AtPnZjX2ZhY3RvciA9IDQ7CS8qIGNvdWxkIGJlIGxvbmdlciB0b28uLi4gKi8KKwl9CisgICAgfQorIyBlbmRpZgorICAgIGlmICh2Y3AtPnZjX3R5cGUgPT0gQ09OVl9OT05FKQorCXJldHVybiBGQUlMOworICAgIHJldHVybiBPSzsKK30KKworI2lmIGRlZmluZWQoRkVBVF9HVUkpIHx8IGRlZmluZWQoQU1JR0EpIHx8IGRlZmluZWQoV0lOMzI2NCkgXAorCXx8IGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogRG8gY29udmVyc2lvbiBvbiB0eXBlZCBpbnB1dCBjaGFyYWN0ZXJzIGluLXBsYWNlLgorICogVGhlIGlucHV0IGFuZCBvdXRwdXQgYXJlIG5vdCBOVUwgdGVybWluYXRlZCEKKyAqIFJldHVybnMgdGhlIGxlbmd0aCBhZnRlciBjb252ZXJzaW9uLgorICovCisgICAgaW50Citjb252ZXJ0X2lucHV0KHB0ciwgbGVuLCBtYXhsZW4pCisgICAgY2hhcl91CSpwdHI7CisgICAgaW50CQlsZW47CisgICAgaW50CQltYXhsZW47Cit7CisgICAgcmV0dXJuIGNvbnZlcnRfaW5wdXRfc2FmZShwdHIsIGxlbiwgbWF4bGVuLCBOVUxMLCBOVUxMKTsKK30KKyNlbmRpZgorCisvKgorICogTGlrZSBjb252ZXJ0X2lucHV0KCksIGJ1dCB3aGVuIHRoZXJlIGlzIGFuIGluY29tcGxldGUgYnl0ZSBzZXF1ZW5jZSBhdCB0aGUKKyAqIGVuZCByZXR1cm4gdGhhdCBhcyBhbiBhbGxvY2F0ZWQgc3RyaW5nIGluICJyZXN0cCIgYW5kIHNldCAiKnJlc3RsZW5wIiB0bworICogdGhlIGxlbmd0aC4gIElmICJyZXN0cCIgaXMgTlVMTCBpdCBpcyBub3QgdXNlZC4KKyAqLworICAgIGludAorY29udmVydF9pbnB1dF9zYWZlKHB0ciwgbGVuLCBtYXhsZW4sIHJlc3RwLCByZXN0bGVucCkKKyAgICBjaGFyX3UJKnB0cjsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCW1heGxlbjsKKyAgICBjaGFyX3UJKipyZXN0cDsKKyAgICBpbnQJCSpyZXN0bGVucDsKK3sKKyAgICBjaGFyX3UJKmQ7CisgICAgaW50CQlkbGVuID0gbGVuOworICAgIGludAkJdW5jb252ZXJ0bGVuID0gMDsKKworICAgIGQgPSBzdHJpbmdfY29udmVydF9leHQoJmlucHV0X2NvbnYsIHB0ciwgJmRsZW4sCisJCQkJCXJlc3RwID09IE5VTEwgPyBOVUxMIDogJnVuY29udmVydGxlbik7CisgICAgaWYgKGQgIT0gTlVMTCkKKyAgICB7CisJaWYgKGRsZW4gPD0gbWF4bGVuKQorCXsKKwkgICAgaWYgKHVuY29udmVydGxlbiA+IDApCisJICAgIHsKKwkJLyogTW92ZSB0aGUgdW5jb252ZXJ0ZWQgY2hhcmFjdGVycyB0byBhbGxvY2F0ZWQgbWVtb3J5LiAqLworCQkqcmVzdHAgPSBhbGxvYyh1bmNvbnZlcnRsZW4pOworCQlpZiAoKnJlc3RwICE9IE5VTEwpCisJCSAgICBtY2hfbWVtbW92ZSgqcmVzdHAsIHB0ciArIGxlbiAtIHVuY29udmVydGxlbiwgdW5jb252ZXJ0bGVuKTsKKwkJKnJlc3RsZW5wID0gdW5jb252ZXJ0bGVuOworCSAgICB9CisJICAgIG1jaF9tZW1tb3ZlKHB0ciwgZCwgZGxlbik7CisJfQorCWVsc2UKKwkgICAgLyogcmVzdWx0IGlzIHRvbyBsb25nLCBrZWVwIHRoZSB1bmNvbnZlcnRlZCB0ZXh0ICh0aGUgY2FsbGVyIG11c3QKKwkgICAgICogaGF2ZSBkb25lIHNvbWV0aGluZyB3cm9uZyEpICovCisJICAgIGRsZW4gPSBsZW47CisJdmltX2ZyZWUoZCk7CisgICAgfQorICAgIHJldHVybiBkbGVuOworfQorCisjaWYgZGVmaW5lZChNQUNPU19YKQorc3RhdGljIGNoYXJfdSAqbWFjX3N0cmluZ19jb252ZXJ0IF9fQVJHUygoY2hhcl91ICpwdHIsIGludCBsZW4sIGludCAqbGVucCwgaW50IGZhaWxfb25fZXJyb3IsIENGU3RyaW5nRW5jb2RpbmcgZnJvbSwgQ0ZTdHJpbmdFbmNvZGluZyB0bywgaW50ICp1bmNvbnZsZW5wKSk7CisKKy8qCisgKiBBIE1hYyB2ZXJzaW9uIG9mIHN0cmluZ19jb252ZXJ0X2V4dCgpIGZvciBzcGVjaWFsIGNhc2VzLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCittYWNfc3RyaW5nX2NvbnZlcnQocHRyLCBsZW4sIGxlbnAsIGZhaWxfb25fZXJyb3IsIGZyb20sIHRvLCB1bmNvbnZsZW5wKQorICAgIGNoYXJfdQkJKnB0cjsKKyAgICBpbnQJCQlsZW47CisgICAgaW50CQkJKmxlbnA7CisgICAgaW50CQkJZmFpbF9vbl9lcnJvcjsKKyAgICBDRlN0cmluZ0VuY29kaW5nCWZyb207CisgICAgQ0ZTdHJpbmdFbmNvZGluZwl0bzsKKyAgICBpbnQJCQkqdW5jb252bGVucDsKK3sKKyAgICBjaGFyX3UJCSpyZXR2YWwsICpkOworICAgIENGU3RyaW5nUmVmCQljZnN0cjsKKyAgICBpbnQJCQlidWZsZW4sIGluLCBvdXQsIGwsIGk7CisKKyAgICBpZiAodW5jb252bGVucCAhPSBOVUxMKQorCSp1bmNvbnZsZW5wID0gMDsKKyAgICBjZnN0ciA9IENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHB0ciwgbGVuLCBmcm9tLCAwKTsKKyAgICAvKiBXaGVuIGNvbnZlcnNpb24gZmFpbGVkLCB0cnkgZXhjbHVkaW5nIGJ5dGVzIGZyb20gdGhlIGVuZCwgaGVscHMgd2hlbgorICAgICAqIHRoZXJlIGlzIGFuIGluY29tcGxldGUgYnl0ZSBzZXF1ZW5jZS4gIE9ubHkgZG8gdXAgdG8gNiBieXRlcyB0byBhdm9pZAorICAgICAqIGxvb3BpbmcgYSBsb25nIHRpbWUgd2hlbiB0aGVyZSByZWFsbHkgaXMgc29tZXRoaW5nIHVuY29udmVydGFibGUuICovCisgICAgd2hpbGUgKGNmc3RyID09IE5VTEwgJiYgdW5jb252bGVucCAhPSBOVUxMICYmIGxlbiA+IDEgJiYgKnVuY29udmxlbnAgPCA2KQorICAgIHsKKwktLWxlbjsKKwkrKyp1bmNvbnZsZW5wOworCWNmc3RyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoTlVMTCwgcHRyLCBsZW4sIGZyb20sIDApOworICAgIH0KKyAgICBpZiAoY2ZzdHIgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyAgICBpZiAodG8gPT0ga0NGU3RyaW5nRW5jb2RpbmdVVEY4KQorCWJ1ZmxlbiA9IGxlbiAqIDYgKyAxOworICAgIGVsc2UKKwlidWZsZW4gPSBsZW4gKyAxOworICAgIHJldHZhbCA9IGFsbG9jKGJ1Zmxlbik7CisgICAgaWYgKHJldHZhbCA9PSBOVUxMKQorICAgIHsKKwlDRlJlbGVhc2UoY2ZzdHIpOworCXJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIUNGU3RyaW5nR2V0Q1N0cmluZyhjZnN0ciwgcmV0dmFsLCBidWZsZW4sIHRvKSkKKyAgICB7CisJQ0ZSZWxlYXNlKGNmc3RyKTsKKwlpZiAoZmFpbF9vbl9lcnJvcikKKwl7CisJICAgIHZpbV9mcmVlKHJldHZhbCk7CisJICAgIHJldHVybiBOVUxMOworCX0KKworCS8qIGNvbnZlcnNpb24gZmFpbGVkIGZvciB0aGUgd2hvbGUgc3RyaW5nLCBidXQgbWF5YmUgaXQgd2lsbCB3b3JrCisJICogZm9yIGVhY2ggY2hhcmFjdGVyICovCisJZm9yIChkID0gcmV0dmFsLCBpbiA9IDAsIG91dCA9IDA7IGluIDwgbGVuICYmIG91dCA8IGJ1ZmxlbiAtIDE7KQorCXsKKwkgICAgaWYgKGZyb20gPT0ga0NGU3RyaW5nRW5jb2RpbmdVVEY4KQorCQlsID0gdXRmX3B0cjJsZW5fY2hlY2socHRyICsgaW4pOworCSAgICBlbHNlCisJCWwgPSAxOworCSAgICBjZnN0ciA9IENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHB0ciArIGluLCBsLCBmcm9tLCAwKTsKKwkgICAgaWYgKGNmc3RyID09IE5VTEwpCisJICAgIHsKKwkJKmQrKyA9ICc/JzsKKwkJb3V0Kys7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlmICghQ0ZTdHJpbmdHZXRDU3RyaW5nKGNmc3RyLCBkLCBidWZsZW4gLSBvdXQsIHRvKSkKKwkJeworCQkgICAgKmQrKyA9ICc/JzsKKwkJICAgIG91dCsrOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgaSA9IHN0cmxlbihkKTsKKwkJICAgIGQgKz0gaTsKKwkJICAgIG91dCArPSBpOworCQl9CisJCUNGUmVsZWFzZShjZnN0cik7CisJICAgIH0KKwkgICAgaW4gKz0gbDsKKwl9CisJKmQgPSBOVUw7CisJaWYgKGxlbnAgIT0gTlVMTCkKKwkgICAgKmxlbnAgPSBvdXQ7CisJcmV0dXJuIHJldHZhbDsKKyAgICB9CisgICAgQ0ZSZWxlYXNlKGNmc3RyKTsKKyAgICBpZiAobGVucCAhPSBOVUxMKQorCSpsZW5wID0gc3RybGVuKHJldHZhbCk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKyNlbmRpZgorCisvKgorICogQ29udmVydCB0ZXh0ICJwdHJbKmxlbnBdIiBhY2NvcmRpbmcgdG8gInZjcCIuCisgKiBSZXR1cm5zIHRoZSByZXN1bHQgaW4gYWxsb2NhdGVkIG1lbW9yeSBhbmQgc2V0cyAiKmxlbnAiLgorICogV2hlbiAibGVucCIgaXMgTlVMTCwgdXNlIE5VTCB0ZXJtaW5hdGVkIHN0cmluZ3MuCisgKiBJbGxlZ2FsIGNoYXJzIGFyZSBvZnRlbiBjaGFuZ2VkIHRvICI/IiwgdW5sZXNzIHZjcC0+dmNfZmFpbCBpcyBzZXQuCisgKiBXaGVuIHNvbWV0aGluZyBnb2VzIHdyb25nLCBOVUxMIGlzIHJldHVybmVkIGFuZCAiKmxlbnAiIGlzIHVuY2hhbmdlZC4KKyAqLworICAgIGNoYXJfdSAqCitzdHJpbmdfY29udmVydCh2Y3AsIHB0ciwgbGVucCkKKyAgICB2aW1jb252X1QJKnZjcDsKKyAgICBjaGFyX3UJKnB0cjsKKyAgICBpbnQJCSpsZW5wOworeworICAgIHJldHVybiBzdHJpbmdfY29udmVydF9leHQodmNwLCBwdHIsIGxlbnAsIE5VTEwpOworfQorCisvKgorICogTGlrZSBzdHJpbmdfY29udmVydCgpLCBidXQgd2hlbiAidW5jb252bGVucCIgaXMgbm90IE5VTEwgYW5kIHRoZXJlIGFyZSBpcworICogYW4gaW5jb21wbGV0ZSBzZXF1ZW5jZSBhdCB0aGUgZW5kIGl0IGlzIG5vdCBjb252ZXJ0ZWQgYW5kICIqdW5jb252bGVucCIgaXMKKyAqIHNldCB0byB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBieXRlcy4KKyAqLworICAgIGNoYXJfdSAqCitzdHJpbmdfY29udmVydF9leHQodmNwLCBwdHIsIGxlbnAsIHVuY29udmxlbnApCisgICAgdmltY29udl9UCSp2Y3A7CisgICAgY2hhcl91CSpwdHI7CisgICAgaW50CQkqbGVucDsKKyAgICBpbnQJCSp1bmNvbnZsZW5wOworeworICAgIGNoYXJfdQkqcmV0dmFsID0gTlVMTDsKKyAgICBjaGFyX3UJKmQ7CisgICAgaW50CQlsZW47CisgICAgaW50CQlpOworICAgIGludAkJbDsKKyAgICBpbnQJCWM7CisKKyAgICBpZiAobGVucCA9PSBOVUxMKQorCWxlbiA9IChpbnQpU1RSTEVOKHB0cik7CisgICAgZWxzZQorCWxlbiA9ICpsZW5wOworICAgIGlmIChsZW4gPT0gMCkKKwlyZXR1cm4gdmltX3N0cnNhdmUoKGNoYXJfdSAqKSIiKTsKKworICAgIHN3aXRjaCAodmNwLT52Y190eXBlKQorICAgIHsKKwljYXNlIENPTlZfVE9fVVRGODoJLyogbGF0aW4xIHRvIHV0Zi04IGNvbnZlcnNpb24gKi8KKwkgICAgcmV0dmFsID0gYWxsb2MobGVuICogMiArIDEpOworCSAgICBpZiAocmV0dmFsID09IE5VTEwpCisJCWJyZWFrOworCSAgICBkID0gcmV0dmFsOworCSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisJICAgIHsKKwkJaWYgKHB0cltpXSA8IDB4ODApCisJCSAgICAqZCsrID0gcHRyW2ldOworCQllbHNlCisJCXsKKwkJICAgICpkKysgPSAweGMwICsgKCh1bnNpZ25lZClwdHJbaV0gPj4gNik7CisJCSAgICAqZCsrID0gMHg4MCArIChwdHJbaV0gJiAweDNmKTsKKwkJfQorCSAgICB9CisJICAgICpkID0gTlVMOworCSAgICBpZiAobGVucCAhPSBOVUxMKQorCQkqbGVucCA9IChpbnQpKGQgLSByZXR2YWwpOworCSAgICBicmVhazsKKworCWNhc2UgQ09OVl9UT19MQVRJTjE6CS8qIHV0Zi04IHRvIGxhdGluMSBjb252ZXJzaW9uICovCisJICAgIHJldHZhbCA9IGFsbG9jKGxlbiArIDEpOworCSAgICBpZiAocmV0dmFsID09IE5VTEwpCisJCWJyZWFrOworCSAgICBkID0gcmV0dmFsOworCSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisJICAgIHsKKwkJbCA9IHV0Zl9wdHIybGVuX2NoZWNrKHB0ciArIGkpOworCQlpZiAobCA9PSAwKQorCQkgICAgKmQrKyA9IE5VTDsKKwkJZWxzZSBpZiAobCA9PSAxKQorCQl7CisJCSAgICBpZiAodW5jb252bGVucCAhPSBOVUxMICYmIHV0ZjhsZW5fdGFiW3B0cltpXV0gPiBsZW4gLSBpKQorCQkgICAgeworCQkJLyogSW5jb21wbGV0ZSBzZXF1ZW5jZSBhdCB0aGUgZW5kLiAqLworCQkJKnVuY29udmxlbnAgPSBsZW4gLSBpOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICAqZCsrID0gcHRyW2ldOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgYyA9IHV0Zl9wdHIyY2hhcihwdHIgKyBpKTsKKwkJICAgIGlmICghdXRmX2lzY29tcG9zaW5nKGMpKQkvKiBza2lwIGNvbXBvc2luZyBjaGFycyAqLworCQkgICAgeworCQkJaWYgKGMgPCAweDEwMCkKKwkJCSAgICAqZCsrID0gYzsKKwkJCWVsc2UgaWYgKHZjcC0+dmNfZmFpbCkKKwkJCXsKKwkJCSAgICB2aW1fZnJlZShyZXR2YWwpOworCQkJICAgIHJldHVybiBOVUxMOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJICAgICpkKysgPSAweGJmOworCQkJICAgIGlmICh1dGZfY2hhcjJjZWxscyhjKSA+IDEpCisJCQkJKmQrKyA9ICc/JzsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGkgKz0gbCAtIDE7CisJCX0KKwkgICAgfQorCSAgICAqZCA9IE5VTDsKKwkgICAgaWYgKGxlbnAgIT0gTlVMTCkKKwkJKmxlbnAgPSAoaW50KShkIC0gcmV0dmFsKTsKKwkgICAgYnJlYWs7CisKKyMgaWZkZWYgTUFDT1NfWAorCWNhc2UgQ09OVl9NQUNfTEFUSU4xOgorCSAgICByZXR2YWwgPSBtYWNfc3RyaW5nX2NvbnZlcnQocHRyLCBsZW4sIGxlbnAsIHZjcC0+dmNfZmFpbCwKKwkJCQkJa0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbiwKKwkJCQkJa0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsCisJCQkJCXVuY29udmxlbnApOworCSAgICBicmVhazsKKworCWNhc2UgQ09OVl9MQVRJTjFfTUFDOgorCSAgICByZXR2YWwgPSBtYWNfc3RyaW5nX2NvbnZlcnQocHRyLCBsZW4sIGxlbnAsIHZjcC0+dmNfZmFpbCwKKwkJCQkJa0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsCisJCQkJCWtDRlN0cmluZ0VuY29kaW5nTWFjUm9tYW4sCisJCQkJCXVuY29udmxlbnApOworCSAgICBicmVhazsKKworCWNhc2UgQ09OVl9NQUNfVVRGODoKKwkgICAgcmV0dmFsID0gbWFjX3N0cmluZ19jb252ZXJ0KHB0ciwgbGVuLCBsZW5wLCB2Y3AtPnZjX2ZhaWwsCisJCQkJCWtDRlN0cmluZ0VuY29kaW5nTWFjUm9tYW4sCisJCQkJCWtDRlN0cmluZ0VuY29kaW5nVVRGOCwKKwkJCQkJdW5jb252bGVucCk7CisJICAgIGJyZWFrOworCisJY2FzZSBDT05WX1VURjhfTUFDOgorCSAgICByZXR2YWwgPSBtYWNfc3RyaW5nX2NvbnZlcnQocHRyLCBsZW4sIGxlbnAsIHZjcC0+dmNfZmFpbCwKKwkJCQkJa0NGU3RyaW5nRW5jb2RpbmdVVEY4LAorCQkJCQlrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuLAorCQkJCQl1bmNvbnZsZW5wKTsKKwkgICAgYnJlYWs7CisjIGVuZGlmCisKKyMgaWZkZWYgVVNFX0lDT05WCisJY2FzZSBDT05WX0lDT05WOgkvKiBjb252ZXJzaW9uIHdpdGggb3V0cHV0X2NvbnYudmNfZmQgKi8KKwkgICAgcmV0dmFsID0gaWNvbnZfc3RyaW5nKHZjcCwgcHRyLCBsZW4sIHVuY29udmxlbnApOworCSAgICBpZiAocmV0dmFsICE9IE5VTEwgJiYgbGVucCAhPSBOVUxMKQorCQkqbGVucCA9IChpbnQpU1RSTEVOKHJldHZhbCk7CisJICAgIGJyZWFrOworIyBlbmRpZgorIyBpZmRlZiBXSU4zMjY0CisJY2FzZSBDT05WX0NPREVQQUdFOgkJLyogY29kZXBhZ2UgLT4gY29kZXBhZ2UgKi8KKwl7CisJICAgIGludAkJcmV0bGVuOworCSAgICBpbnQJCXRtcF9sZW47CisJICAgIHNob3J0X3UJKnRtcDsKKworCSAgICAvKiAxLiBjb2RlcGFnZS9VVEYtOCAgLT4gIHVjcy0yLiAqLworCSAgICBpZiAodmNwLT52Y19jcGZyb20gPT0gMCkKKwkJdG1wX2xlbiA9IHV0ZjhfdG9fdWNzMihwdHIsIGxlbiwgTlVMTCwgTlVMTCk7CisJICAgIGVsc2UKKwkJdG1wX2xlbiA9IE11bHRpQnl0ZVRvV2lkZUNoYXIodmNwLT52Y19jcGZyb20sIDAsCisJCQkJCQkJICAgICAgcHRyLCBsZW4sIDAsIDApOworCSAgICB0bXAgPSAoc2hvcnRfdSAqKWFsbG9jKHNpemVvZihzaG9ydF91KSAqIHRtcF9sZW4pOworCSAgICBpZiAodG1wID09IE5VTEwpCisJCWJyZWFrOworCSAgICBpZiAodmNwLT52Y19jcGZyb20gPT0gMCkKKwkJdXRmOF90b191Y3MyKHB0ciwgbGVuLCB0bXAsIHVuY29udmxlbnApOworCSAgICBlbHNlCisJCU11bHRpQnl0ZVRvV2lkZUNoYXIodmNwLT52Y19jcGZyb20sIDAsIHB0ciwgbGVuLCB0bXAsIHRtcF9sZW4pOworCisJICAgIC8qIDIuIHVjcy0yICAtPiAgY29kZXBhZ2UvVVRGLTguICovCisJICAgIGlmICh2Y3AtPnZjX2NwdG8gPT0gMCkKKwkJcmV0bGVuID0gdWNzMl90b191dGY4KHRtcCwgdG1wX2xlbiwgTlVMTCk7CisJICAgIGVsc2UKKwkJcmV0bGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZSh2Y3AtPnZjX2NwdG8sIDAsCisJCQkJCQkgICAgdG1wLCB0bXBfbGVuLCAwLCAwLCAwLCAwKTsKKwkgICAgcmV0dmFsID0gYWxsb2MocmV0bGVuICsgMSk7CisJICAgIGlmIChyZXR2YWwgIT0gTlVMTCkKKwkgICAgeworCQlpZiAodmNwLT52Y19jcHRvID09IDApCisJCSAgICB1Y3MyX3RvX3V0ZjgodG1wLCB0bXBfbGVuLCByZXR2YWwpOworCQllbHNlCisJCSAgICBXaWRlQ2hhclRvTXVsdGlCeXRlKHZjcC0+dmNfY3B0bywgMCwKKwkJCQkJICB0bXAsIHRtcF9sZW4sIHJldHZhbCwgcmV0bGVuLCAwLCAwKTsKKwkJcmV0dmFsW3JldGxlbl0gPSBOVUw7CisJCWlmIChsZW5wICE9IE5VTEwpCisJCSAgICAqbGVucCA9IHJldGxlbjsKKwkgICAgfQorCSAgICB2aW1fZnJlZSh0bXApOworCSAgICBicmVhazsKKwl9CisjIGVuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL21lbWZpbGUuYyBiL3NyYy9tZW1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0MTgzMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tZW1maWxlLmMKQEAgLTAsMCArMSwxMzEyIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBtZW1maWxlLmM6IENvbnRhaW5zIHRoZSBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGJsb2NrcyBvZiBtZW1vcnkgd2hpY2ggY2FuCisgKiBiZSBzdG9yZWQgaW4gYSBmaWxlLiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHNvcnQgb2YgdmlydHVhbCBtZW1vcnkuCisgKgorICogQSBtZW1maWxlIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgYmxvY2tzLiBUaGUgYmxvY2tzIG51bWJlcmVkIGZyb20gMAorICogdXB3YXJkcyBoYXZlIGJlZW4gYXNzaWduZWQgYSBwbGFjZSBpbiB0aGUgYWN0dWFsIGZpbGUuIFRoZSBibG9jayBudW1iZXIKKyAqIGlzIGVxdWFsIHRvIHRoZSBwYWdlIG51bWJlciBpbiB0aGUgZmlsZS4gVGhlCisgKiBibG9ja3Mgd2l0aCBuZWdhdGl2ZSBudW1iZXJzIGFyZSBjdXJyZW50bHkgaW4gbWVtb3J5IG9ubHkuIFRoZXkgY2FuIGJlCisgKiBhc3NpZ25lZCBhIHBsYWNlIGluIHRoZSBmaWxlIHdoZW4gdG9vIG11Y2ggbWVtb3J5IGlzIGJlaW5nIHVzZWQuIEF0IHRoYXQKKyAqIG1vbWVudCB0aGV5IGdldCBhIG5ldywgcG9zaXRpdmUsIG51bWJlci4gQSBsaXN0IGlzIHVzZWQgZm9yIHRyYW5zbGF0aW9uIG9mCisgKiBuZWdhdGl2ZSB0byBwb3NpdGl2ZSBudW1iZXJzLgorICoKKyAqIFRoZSBzaXplIG9mIGEgYmxvY2sgaXMgYSBtdWx0aXBsZSBvZiBhIHBhZ2Ugc2l6ZSwgbm9ybWFsbHkgdGhlIHBhZ2Ugc2l6ZSBvZgorICogdGhlIGRldmljZSB0aGUgZmlsZSBpcyBvbi4gTW9zdCBibG9ja3MgYXJlIDEgcGFnZSBsb25nLiBBIEJsb2NrIG9mIG11bHRpcGxlCisgKiBwYWdlcyBpcyB1c2VkIGZvciBhIGxpbmUgdGhhdCBkb2VzIG5vdCBmaXQgaW4gYSBzaW5nbGUgcGFnZS4KKyAqCisgKiBFYWNoIGJsb2NrIGNhbiBiZSBpbiBtZW1vcnkgYW5kL29yIGluIGEgZmlsZS4gVGhlIGJsb2NrIHN0YXlzIGluIG1lbW9yeQorICogYXMgbG9uZyBhcyBpdCBpcyBsb2NrZWQuIElmIGl0IGlzIG5vIGxvbmdlciBsb2NrZWQgaXQgY2FuIGJlIHN3YXBwZWQgb3V0IHRvCisgKiB0aGUgZmlsZS4gSXQgaXMgb25seSB3cml0dGVuIHRvIHRoZSBmaWxlIGlmIGl0IGhhcyBiZWVuIGNoYW5nZWQuCisgKgorICogVW5kZXIgbm9ybWFsIG9wZXJhdGlvbiB0aGUgZmlsZSBpcyBjcmVhdGVkIHdoZW4gb3BlbmluZyB0aGUgbWVtb3J5IGZpbGUgYW5kCisgKiBkZWxldGVkIHdoZW4gY2xvc2luZyB0aGUgbWVtb3J5IGZpbGUuIE9ubHkgd2l0aCByZWNvdmVyeSBhbiBleGlzdGluZyBtZW1vcnkKKyAqIGZpbGUgaXMgb3BlbmVkLgorICovCisKKyNpZiBkZWZpbmVkIE1TRE9TIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQorIyBpbmNsdWRlIDxpby5oPgkvKiBmb3IgbHNlZWsoKSwgbXVzdCBiZSBiZWZvcmUgdmltLmggKi8KKyNlbmRpZgorCisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisvKgorICogU29tZSBzeXN0ZW1zIGhhdmUgdGhlIHBhZ2Ugc2l6ZSBpbiBzdGF0ZnMuZl9ic2l6ZSwgc29tZSBpbiBzdGF0LnN0X2Jsa3NpemUKKyAqLworI2lmZGVmIEhBVkVfU1RfQkxLU0laRQorIyBkZWZpbmUgU1RBVEZTIHN0YXQKKyMgZGVmaW5lIEZfQlNJWkUgc3RfYmxrc2l6ZQorIyBkZWZpbmUgZnN0YXRmcyhmZCwgYnVmLCBsZW4sIG51bCkgbWNoX2ZzdGF0KChmZCksIChidWYpKQorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TWVNfU1RBVEZTX0gKKyMgIGluY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyMgIGRlZmluZSBTVEFURlMgc3RhdGZzCisjICBkZWZpbmUgRl9CU0laRSBmX2JzaXplCisjICBpZmRlZiBfX01JTlRfXwkJLyogZG8gd2Ugc3RpbGwgbmVlZCB0aGlzPyAqLworIyAgIGRlZmluZSBmc3RhdGZzKGZkLCBidWYsIGxlbiwgbnVsKSBtY2hfZnN0YXQoKGZkKSwgKGJ1ZikpCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBmb3IgQW1pZ2EgRG9zIDIuMHggd2UgdXNlIEZsdXNoCisgKi8KKyNpZmRlZiBBTUlHQQorIyBpZmRlZiBGRUFUX0FSUAorZXh0ZXJuIGludCBkb3MyOwkJCS8qIHRoaXMgaXMgaW4gb3NfYW1pZ2EuYyAqLworIyBlbmRpZgorIyBpZmRlZiBTQVNDCisjICBpbmNsdWRlIDxwcm90by9kb3MuaD4KKyMgIGluY2x1ZGUgPGlvczEuaD4JCQkvKiBmb3IgY2hrdWZiKCkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIE1FTUZJTEVfUEFHRV9TSVpFIDQwOTYJCS8qIGRlZmF1bHQgcGFnZSBzaXplICovCisKK3N0YXRpYyBsb25nX3UJdG90YWxfbWVtX3VzZWQgPSAwOwkvKiB0b3RhbCBtZW1vcnkgdXNlZCBmb3IgbWVtZmlsZXMgKi8KK3N0YXRpYyBpbnQJZG9udF9yZWxlYXNlID0gRkFMU0U7CS8qIGRvbid0IHJlbGVhc2UgYmxvY2tzICovCisKK3N0YXRpYyB2b2lkIG1mX2luc19oYXNoIF9fQVJHUygobWVtZmlsZV9UICosIGJoZHJfVCAqKSk7CitzdGF0aWMgdm9pZCBtZl9yZW1faGFzaCBfX0FSR1MoKG1lbWZpbGVfVCAqLCBiaGRyX1QgKikpOworc3RhdGljIGJoZHJfVCAqbWZfZmluZF9oYXNoIF9fQVJHUygobWVtZmlsZV9UICosIGJsb2NrbnJfVCkpOworc3RhdGljIHZvaWQgbWZfaW5zX3VzZWQgX19BUkdTKChtZW1maWxlX1QgKiwgYmhkcl9UICopKTsKK3N0YXRpYyB2b2lkIG1mX3JlbV91c2VkIF9fQVJHUygobWVtZmlsZV9UICosIGJoZHJfVCAqKSk7CitzdGF0aWMgYmhkcl9UICptZl9yZWxlYXNlIF9fQVJHUygobWVtZmlsZV9UICosIGludCkpOworc3RhdGljIGJoZHJfVCAqbWZfYWxsb2NfYmhkciBfX0FSR1MoKG1lbWZpbGVfVCAqLCBpbnQpKTsKK3N0YXRpYyB2b2lkIG1mX2ZyZWVfYmhkciBfX0FSR1MoKGJoZHJfVCAqKSk7CitzdGF0aWMgdm9pZCBtZl9pbnNfZnJlZSBfX0FSR1MoKG1lbWZpbGVfVCAqLCBiaGRyX1QgKikpOworc3RhdGljIGJoZHJfVCAqbWZfcmVtX2ZyZWUgX19BUkdTKChtZW1maWxlX1QgKikpOworc3RhdGljIGludCAgbWZfcmVhZCBfX0FSR1MoKG1lbWZpbGVfVCAqLCBiaGRyX1QgKikpOworc3RhdGljIGludCAgbWZfd3JpdGUgX19BUkdTKChtZW1maWxlX1QgKiwgYmhkcl9UICopKTsKK3N0YXRpYyBpbnQgIG1mX3RyYW5zX2FkZCBfX0FSR1MoKG1lbWZpbGVfVCAqLCBiaGRyX1QgKikpOworc3RhdGljIHZvaWQgbWZfZG9fb3BlbiBfX0FSR1MoKG1lbWZpbGVfVCAqLCBjaGFyX3UgKiwgaW50KSk7CisKKy8qCisgKiBUaGUgZnVuY3Rpb25zIGZvciB1c2luZyBhIG1lbWZpbGU6CisgKgorICogbWZfb3BlbigpCSAgICBvcGVuIGEgbmV3IG9yIGV4aXN0aW5nIG1lbWZpbGUKKyAqIG1mX29wZW5fZmlsZSgpICAgb3BlbiBhIHN3YXAgZmlsZSBmb3IgYW4gZXhpc3RpbmcgbWVtZmlsZQorICogbWZfY2xvc2UoKQkgICAgY2xvc2UgKGFuZCBkZWxldGUpIGEgbWVtZmlsZQorICogbWZfbmV3KCkJICAgIGNyZWF0ZSBhIG5ldyBibG9jayBpbiBhIG1lbWZpbGUgYW5kIGxvY2sgaXQKKyAqIG1mX2dldCgpCSAgICBnZXQgYW4gZXhpc3RpbmcgYmxvY2sgYW5kIGxvY2sgaXQKKyAqIG1mX3B1dCgpCSAgICB1bmxvY2sgYSBibG9jaywgbWF5IGJlIG1hcmtlZCBmb3Igd3JpdGluZworICogbWZfZnJlZSgpCSAgICByZW1vdmUgYSBibG9jaworICogbWZfc3luYygpCSAgICBzeW5jIGNoYW5nZWQgcGFydHMgb2YgbWVtZmlsZSB0byBkaXNrCisgKiBtZl9yZWxlYXNlX2FsbCgpIHJlbGVhc2UgYXMgbXVjaCBtZW1vcnkgYXMgcG9zc2libGUKKyAqIG1mX3RyYW5zX2RlbCgpICAgbWF5IHRyYW5zbGF0ZSBuZWdhdGl2ZSB0byBwb3NpdGl2ZSBibG9jayBudW1iZXIKKyAqIG1mX2Z1bGxuYW1lKCkgICAgbWFrZSBmaWxlIG5hbWUgZnVsbCBwYXRoICh1c2UgYmVmb3JlIGZpcnN0IDpjZCkKKyAqLworCisvKgorICogT3BlbiBhbiBleGlzdGluZyBvciBuZXcgbWVtb3J5IGJsb2NrIGZpbGUuCisgKgorICogIGZuYW1lOgluYW1lIG9mIGZpbGUgdG8gdXNlIChOVUxMIG1lYW5zIG5vIGZpbGUgYXQgYWxsKQorICoJCU5vdGU6IGZuYW1lIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCwgaXQgaXMgbm90IGNvcGllZCEKKyAqCQkJSWYgb3BlbmluZyB0aGUgZmlsZSBmYWlscywgZm5hbWUgaXMgZnJlZWQuCisgKiAgZmxhZ3M6CWZsYWdzIGZvciBvcGVuKCkgY2FsbAorICoKKyAqICBJZiBmbmFtZSAhPSBOVUxMIGFuZCBmaWxlIGNhbm5vdCBiZSBvcGVuZWQsIGZhaWwuCisgKgorICogcmV0dXJuIHZhbHVlOiBpZGVudGlmaWVyIGZvciB0aGlzIG1lbW9yeSBibG9jayBmaWxlLgorICovCisgICAgbWVtZmlsZV9UICoKK21mX29wZW4oZm5hbWUsIGZsYWdzKQorICAgIGNoYXJfdQkqZm5hbWU7CisgICAgaW50CQlmbGFnczsKK3sKKyAgICBtZW1maWxlX1QJCSptZnA7CisgICAgaW50CQkJaTsKKyAgICBvZmZfdAkJc2l6ZTsKKyNpZiBkZWZpbmVkKFNUQVRGUykgJiYgZGVmaW5lZChVTklYKSAmJiAhZGVmaW5lZChfX1FOWF9fKQorIyBkZWZpbmUgVVNFX0ZTVEFURlMKKyAgICBzdHJ1Y3QgU1RBVEZTCXN0ZjsKKyNlbmRpZgorCisgICAgaWYgKChtZnAgPSAobWVtZmlsZV9UICopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihtZW1maWxlX1QpKSkgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmIChmbmFtZSA9PSBOVUxMKQkgICAgLyogbm8gZmlsZSBmb3IgdGhpcyBtZW1maWxlLCB1c2UgbWVtb3J5IG9ubHkgKi8KKyAgICB7CisJbWZwLT5tZl9mbmFtZSA9IE5VTEw7CisJbWZwLT5tZl9mZm5hbWUgPSBOVUxMOworCW1mcC0+bWZfZmQgPSAtMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwltZl9kb19vcGVuKG1mcCwgZm5hbWUsIGZsYWdzKTsJLyogdHJ5IHRvIG9wZW4gdGhlIGZpbGUgKi8KKworCS8qIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQsIHJldHVybiBoZXJlICovCisJaWYgKG1mcC0+bWZfZmQgPCAwKQorCXsKKwkgICAgdmltX2ZyZWUobWZwKTsKKwkgICAgcmV0dXJuIE5VTEw7CisJfQorICAgIH0KKworICAgIG1mcC0+bWZfZnJlZV9maXJzdCA9IE5VTEw7CQkvKiBmcmVlIGxpc3QgaXMgZW1wdHkgKi8KKyAgICBtZnAtPm1mX3VzZWRfZmlyc3QgPSBOVUxMOwkJLyogdXNlZCBsaXN0IGlzIGVtcHR5ICovCisgICAgbWZwLT5tZl91c2VkX2xhc3QgPSBOVUxMOworICAgIG1mcC0+bWZfZGlydHkgPSBGQUxTRTsKKyAgICBtZnAtPm1mX3VzZWRfY291bnQgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBNRU1IQVNIU0laRTsgKytpKQorICAgIHsKKwltZnAtPm1mX2hhc2hbaV0gPSBOVUxMOwkJLyogaGFzaCBsaXN0cyBhcmUgZW1wdHkgKi8KKwltZnAtPm1mX3RyYW5zW2ldID0gTlVMTDsJLyogdHJhbnMgbGlzdHMgYXJlIGVtcHR5ICovCisgICAgfQorICAgIG1mcC0+bWZfcGFnZV9zaXplID0gTUVNRklMRV9QQUdFX1NJWkU7CisKKyNpZmRlZiBVU0VfRlNUQVRGUworICAgIC8qCisgICAgICogVHJ5IHRvIHNldCB0aGUgcGFnZSBzaXplIGVxdWFsIHRvIHRoZSBibG9jayBzaXplIG9mIHRoZSBkZXZpY2UuCisgICAgICogU3BlZWRzIHVwIEkvTyBhIGxvdC4KKyAgICAgKiBXaGVuIHJlY292ZXJpbmcsIHRoZSBhY3R1YWwgYmxvY2sgc2l6ZSB3aWxsIGJlIHJldHJpZXZlZCBmcm9tIGJsb2NrIDAKKyAgICAgKiBpbiBtbF9yZWNvdmVyKCkuICBUaGUgc2l6ZSB1c2VkIGhlcmUgbWF5IGJlIHdyb25nLCB0aGVyZWZvcmUKKyAgICAgKiBtZl9ibG9ja25yX21heCBtdXN0IGJlIHJvdW5kZWQgdXAuCisgICAgICovCisgICAgaWYgKG1mcC0+bWZfZmQgPj0gMAorCSAgICAmJiBmc3RhdGZzKG1mcC0+bWZfZmQsICZzdGYsIHNpemVvZihzdHJ1Y3Qgc3RhdGZzKSwgMCkgPT0gMAorCSAgICAmJiBzdGYuRl9CU0laRSA+PSBNSU5fU1dBUF9QQUdFX1NJWkUKKwkgICAgJiYgc3RmLkZfQlNJWkUgPD0gTUFYX1NXQVBfUEFHRV9TSVpFKQorCW1mcC0+bWZfcGFnZV9zaXplID0gc3RmLkZfQlNJWkU7CisjZW5kaWYKKworICAgIGlmIChtZnAtPm1mX2ZkIDwgMCB8fCAoZmxhZ3MgJiAoT19UUlVOQ3xPX0VYQ0wpKQorCQkgICAgICB8fCAoc2l6ZSA9IGxzZWVrKG1mcC0+bWZfZmQsIChvZmZfdCkwTCwgU0VFS19FTkQpKSA8PSAwKQorCW1mcC0+bWZfYmxvY2tucl9tYXggPSAwOwkvKiBubyBmaWxlIG9yIGVtcHR5IGZpbGUgKi8KKyAgICBlbHNlCisJbWZwLT5tZl9ibG9ja25yX21heCA9IChibG9ja25yX1QpKChzaXplICsgbWZwLT5tZl9wYWdlX3NpemUgLSAxKQorCQkJCQkJCSAvIG1mcC0+bWZfcGFnZV9zaXplKTsKKyAgICBtZnAtPm1mX2Jsb2NrbnJfbWluID0gLTE7CisgICAgbWZwLT5tZl9uZWdfY291bnQgPSAwOworICAgIG1mcC0+bWZfaW5maWxlX2NvdW50ID0gbWZwLT5tZl9ibG9ja25yX21heDsKKyAgICBtZnAtPm1mX3VzZWRfY291bnRfbWF4ID0gcF9tbSAqIDEwMjQgLyBtZnAtPm1mX3BhZ2Vfc2l6ZTsKKworICAgIHJldHVybiBtZnA7Cit9CisKKy8qCisgKiBPcGVuIGEgZmlsZSBmb3IgYW4gZXhpc3RpbmcgbWVtZmlsZS4gIFVzZWQgd2hlbiB1cGRhdGVjb3VudCBzZXQgZnJvbSAwIHRvCisgKiBzb21lIHZhbHVlLgorICogSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoaXMgZmFpbHMuCisgKiAiZm5hbWUiIGlzIHRoZSBuYW1lIG9mIGZpbGUgdG8gdXNlIChOVUxMIG1lYW5zIG5vIGZpbGUgYXQgYWxsKQorICogTm90ZTogImZuYW1lIiBtdXN0IGhhdmUgYmVlbiBhbGxvY2F0ZWQsIGl0IGlzIG5vdCBjb3BpZWQhICBJZiBvcGVuaW5nIHRoZQorICogZmlsZSBmYWlscywgImZuYW1lIiBpcyBmcmVlZC4KKyAqCisgKiByZXR1cm4gdmFsdWU6IEZBSUwgaWYgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAorbWZfb3Blbl9maWxlKG1mcCwgZm5hbWUpCisgICAgbWVtZmlsZV9UCSptZnA7CisgICAgY2hhcl91CSpmbmFtZTsKK3sKKyAgICBtZl9kb19vcGVuKG1mcCwgZm5hbWUsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTCk7IC8qIHRyeSB0byBvcGVuIHRoZSBmaWxlICovCisKKyAgICBpZiAobWZwLT5tZl9mZCA8IDApCisJcmV0dXJuIEZBSUw7CisKKyAgICBtZnAtPm1mX2RpcnR5ID0gVFJVRTsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBjbG9zZSBhIG1lbW9yeSBmaWxlIGFuZCBkZWxldGUgdGhlIGFzc29jaWF0ZWQgZmlsZSBpZiAnZGVsX2ZpbGUnIGlzIFRSVUUKKyAqLworICAgIHZvaWQKK21mX2Nsb3NlKG1mcCwgZGVsX2ZpbGUpCisgICAgbWVtZmlsZV9UCSptZnA7CisgICAgaW50CQlkZWxfZmlsZTsKK3sKKyAgICBiaGRyX1QJKmhwLCAqbmV4dHA7CisgICAgTlJfVFJBTlMJKnRwLCAqdHBuZXh0OworICAgIGludAkJaTsKKworICAgIGlmIChtZnAgPT0gTlVMTCkJCSAgICAvKiBzYWZldHkgY2hlY2sgKi8KKwlyZXR1cm47CisgICAgaWYgKG1mcC0+bWZfZmQgPj0gMCkKKyAgICB7CisJaWYgKGNsb3NlKG1mcC0+bWZfZmQpIDwgMCkKKwkgICAgRU1TRyhfKGVfc3dhcGNsb3NlKSk7CisgICAgfQorICAgIGlmIChkZWxfZmlsZSAmJiBtZnAtPm1mX2ZuYW1lICE9IE5VTEwpCisJbWNoX3JlbW92ZShtZnAtPm1mX2ZuYW1lKTsKKwkJCQkJICAgIC8qIGZyZWUgZW50cmllcyBpbiB1c2VkIGxpc3QgKi8KKyAgICBmb3IgKGhwID0gbWZwLT5tZl91c2VkX2ZpcnN0OyBocCAhPSBOVUxMOyBocCA9IG5leHRwKQorICAgIHsKKwl0b3RhbF9tZW1fdXNlZCAtPSBocC0+YmhfcGFnZV9jb3VudCAqIG1mcC0+bWZfcGFnZV9zaXplOworCW5leHRwID0gaHAtPmJoX25leHQ7CisJbWZfZnJlZV9iaGRyKGhwKTsKKyAgICB9CisgICAgd2hpbGUgKG1mcC0+bWZfZnJlZV9maXJzdCAhPSBOVUxMKQkgICAgLyogZnJlZSBlbnRyaWVzIGluIGZyZWUgbGlzdCAqLworCXZpbV9mcmVlKG1mX3JlbV9mcmVlKG1mcCkpOworICAgIGZvciAoaSA9IDA7IGkgPCBNRU1IQVNIU0laRTsgKytpKQkgICAgLyogZnJlZSBlbnRyaWVzIGluIHRyYW5zIGxpc3RzICovCisJZm9yICh0cCA9IG1mcC0+bWZfdHJhbnNbaV07IHRwICE9IE5VTEw7IHRwID0gdHBuZXh0KQorCXsKKwkgICAgdHBuZXh0ID0gdHAtPm50X25leHQ7CisJICAgIHZpbV9mcmVlKHRwKTsKKwl9CisgICAgdmltX2ZyZWUobWZwLT5tZl9mbmFtZSk7CisgICAgdmltX2ZyZWUobWZwLT5tZl9mZm5hbWUpOworICAgIHZpbV9mcmVlKG1mcCk7Cit9CisKKy8qCisgKiBDbG9zZSB0aGUgc3dhcCBmaWxlIGZvciBhIG1lbWZpbGUuICBVc2VkIHdoZW4gJ3N3YXBmaWxlJyBpcyByZXNldC4KKyAqLworICAgIHZvaWQKK21mX2Nsb3NlX2ZpbGUoYnVmLCBnZXRsaW5lcykKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJZ2V0bGluZXM7CS8qIGdldCBhbGwgbGluZXMgaW50byBtZW1vcnk/ICovCit7CisgICAgbWVtZmlsZV9UCSptZnA7CisgICAgbGluZW5yX1QJbG51bTsKKworICAgIG1mcCA9IGJ1Zi0+Yl9tbC5tbF9tZnA7CisgICAgaWYgKG1mcCA9PSBOVUxMIHx8IG1mcC0+bWZfZmQgPCAwKQkJLyogbm90aGluZyB0byBjbG9zZSAqLworCXJldHVybjsKKworICAgIGlmIChnZXRsaW5lcykKKyAgICB7CisJLyogZ2V0IGFsbCBibG9ja3MgaW4gbWVtb3J5IGJ5IGFjY2Vzc2luZyBhbGwgbGluZXMgKGNsdW1zeSEpICovCisJZG9udF9yZWxlYXNlID0gVFJVRTsKKwlmb3IgKGxudW0gPSAxOyBsbnVtIDw9IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OyArK2xudW0pCisJICAgICh2b2lkKW1sX2dldF9idWYoYnVmLCBsbnVtLCBGQUxTRSk7CisJZG9udF9yZWxlYXNlID0gRkFMU0U7CisJLyogVE9ETzogc2hvdWxkIGNoZWNrIGlmIGFsbCBibG9ja3MgYXJlIHJlYWxseSBpbiBjb3JlICovCisgICAgfQorCisgICAgaWYgKGNsb3NlKG1mcC0+bWZfZmQpIDwgMCkJCQkvKiBjbG9zZSB0aGUgZmlsZSAqLworCUVNU0coXyhlX3N3YXBjbG9zZSkpOworICAgIG1mcC0+bWZfZmQgPSAtMTsKKworICAgIGlmIChtZnAtPm1mX2ZuYW1lICE9IE5VTEwpCisgICAgeworCW1jaF9yZW1vdmUobWZwLT5tZl9mbmFtZSk7CQkvKiBkZWxldGUgdGhlIHN3YXAgZmlsZSAqLworCXZpbV9mcmVlKG1mcC0+bWZfZm5hbWUpOworCXZpbV9mcmVlKG1mcC0+bWZfZmZuYW1lKTsKKwltZnAtPm1mX2ZuYW1lID0gTlVMTDsKKwltZnAtPm1mX2ZmbmFtZSA9IE5VTEw7CisgICAgfQorfQorCisvKgorICogU2V0IG5ldyBzaXplIGZvciBhIG1lbWZpbGUuICBVc2VkIHdoZW4gYmxvY2sgMCBvZiBhIHN3YXBmaWxlIGhhcyBiZWVuIHJlYWQKKyAqIGFuZCB0aGUgc2l6ZSBpdCBpbmRpY2F0ZXMgZGlmZmVycyBmcm9tIHdoYXQgd2FzIGd1ZXNzZWQuCisgKi8KKyAgICB2b2lkCittZl9uZXdfcGFnZV9zaXplKG1mcCwgbmV3X3NpemUpCisgICAgbWVtZmlsZV9UCSptZnA7CisgICAgdW5zaWduZWQJbmV3X3NpemU7Cit7CisgICAgLyogQ29ycmVjdCB0aGUgbWVtb3J5IHVzZWQgZm9yIGJsb2NrIDAgdG8gdGhlIG5ldyBzaXplLCBiZWNhdXNlIGl0IHdpbGwgYmUKKyAgICAgKiBmcmVlZCB3aXRoIHRoYXQgc2l6ZSBsYXRlciBvbi4gKi8KKyAgICB0b3RhbF9tZW1fdXNlZCArPSBuZXdfc2l6ZSAtIG1mcC0+bWZfcGFnZV9zaXplOworICAgIG1mcC0+bWZfcGFnZV9zaXplID0gbmV3X3NpemU7Cit9CisKKy8qCisgKiBnZXQgYSBuZXcgYmxvY2sKKyAqCisgKiAgIG5lZ2F0aXZlOiBUUlVFIGlmIG5lZ2F0aXZlIGJsb2NrIG51bWJlciBkZXNpcmVkIChkYXRhIGJsb2NrKQorICovCisgICAgYmhkcl9UICoKK21mX25ldyhtZnAsIG5lZ2F0aXZlLCBwYWdlX2NvdW50KQorICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGludAkJbmVnYXRpdmU7CisgICAgaW50CQlwYWdlX2NvdW50OworeworICAgIGJoZHJfVCAgICAqaHA7CSAgICAvKiBuZXcgYmhkcl9UICovCisgICAgYmhkcl9UICAgICpmcmVlcDsJICAgIC8qIGZpcnN0IGJsb2NrIGluIGZyZWUgbGlzdCAqLworICAgIGNoYXJfdSAgKnA7CisKKyAgICAvKgorICAgICAqIElmIHdlIHJlYWNoZWQgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIHVzZWQgbWVtb3J5IGJsb2NrcywgcmVsZWFzZSBvbmUKKyAgICAgKiBJZiBhIGJoZHJfVCBpcyByZXR1cm5lZCwgdXNlIGl0IGFuZCBhZGp1c3QgdGhlIHBhZ2VfY291bnQgaWYgbmVjZXNzYXJ5LgorICAgICAqLworICAgIGhwID0gbWZfcmVsZWFzZShtZnAsIHBhZ2VfY291bnQpOworCisvKgorICogRGVjaWRlIG9uIHRoZSBudW1iZXIgdG8gdXNlOgorICogSWYgdGhlcmUgaXMgYSBmcmVlIGJsb2NrLCB1c2UgaXRzIG51bWJlci4KKyAqIE90aGVyd2lzZSB1c2UgbWZfYmxvY2tfbWluIGZvciBhIG5lZ2F0aXZlIG51bWJlciwgbWZfYmxvY2tfbWF4IGZvcgorICogYSBwb3NpdGl2ZSBudW1iZXIuCisgKi8KKyAgICBmcmVlcCA9IG1mcC0+bWZfZnJlZV9maXJzdDsKKyAgICBpZiAoIW5lZ2F0aXZlICYmIGZyZWVwICE9IE5VTEwgJiYgZnJlZXAtPmJoX3BhZ2VfY291bnQgPj0gcGFnZV9jb3VudCkKKyAgICB7CisJLyoKKwkgKiBJZiB0aGUgYmxvY2sgaW4gdGhlIGZyZWUgbGlzdCBoYXMgbW9yZSBwYWdlcywgdGFrZSBvbmx5IHRoZSBudW1iZXIKKwkgKiBvZiBwYWdlcyBuZWVkZWQgYW5kIGFsbG9jYXRlIGEgbmV3IGJoZHJfVCB3aXRoIGRhdGEKKwkgKgorCSAqIElmIHRoZSBudW1iZXIgb2YgcGFnZXMgbWF0Y2hlcyBhbmQgbWZfcmVsZWFzZSBkaWQgbm90IHJldHVybiBhIGJoZHJfVCwKKwkgKiB1c2UgdGhlIGJoZHJfVCBmcm9tIHRoZSBmcmVlIGxpc3QgYW5kIGFsbG9jYXRlIHRoZSBkYXRhCisJICoKKwkgKiBJZiB0aGUgbnVtYmVyIG9mIHBhZ2VzIG1hdGNoZXMgYW5kIG1mX3JlbGVhc2UgcmV0dXJuZWQgYSBiaGRyX1QsCisJICoganVzdCB1c2UgdGhlIG51bWJlciBhbmQgZnJlZSB0aGUgYmhkcl9UIGZyb20gdGhlIGZyZWUgbGlzdAorCSAqLworCWlmIChmcmVlcC0+YmhfcGFnZV9jb3VudCA+IHBhZ2VfY291bnQpCisJeworCSAgICBpZiAoaHAgPT0gTlVMTCAmJiAoaHAgPSBtZl9hbGxvY19iaGRyKG1mcCwgcGFnZV9jb3VudCkpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCSAgICBocC0+YmhfYm51bSA9IGZyZWVwLT5iaF9ibnVtOworCSAgICBmcmVlcC0+YmhfYm51bSArPSBwYWdlX2NvdW50OworCSAgICBmcmVlcC0+YmhfcGFnZV9jb3VudCAtPSBwYWdlX2NvdW50OworCX0KKwllbHNlIGlmIChocCA9PSBOVUxMKQkgICAgLyogbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoaXMgYmxvY2sgKi8KKwl7CisJICAgIGlmICgocCA9IChjaGFyX3UgKilhbGxvYyhtZnAtPm1mX3BhZ2Vfc2l6ZSAqIHBhZ2VfY291bnQpKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwkgICAgaHAgPSBtZl9yZW1fZnJlZShtZnApOworCSAgICBocC0+YmhfZGF0YSA9IHA7CisJfQorCWVsc2UJCSAgICAvKiB1c2UgdGhlIG51bWJlciwgcmVtb3ZlIGVudHJ5IGZyb20gZnJlZSBsaXN0ICovCisJeworCSAgICBmcmVlcCA9IG1mX3JlbV9mcmVlKG1mcCk7CisJICAgIGhwLT5iaF9ibnVtID0gZnJlZXAtPmJoX2JudW07CisJICAgIHZpbV9mcmVlKGZyZWVwKTsKKwl9CisgICAgfQorICAgIGVsc2UJLyogZ2V0IGEgbmV3IG51bWJlciAqLworICAgIHsKKwlpZiAoaHAgPT0gTlVMTCAmJiAoaHAgPSBtZl9hbGxvY19iaGRyKG1mcCwgcGFnZV9jb3VudCkpID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCWlmIChuZWdhdGl2ZSkKKwl7CisJICAgIGhwLT5iaF9ibnVtID0gbWZwLT5tZl9ibG9ja25yX21pbi0tOworCSAgICBtZnAtPm1mX25lZ19jb3VudCsrOworCX0KKwllbHNlCisJeworCSAgICBocC0+YmhfYm51bSA9IG1mcC0+bWZfYmxvY2tucl9tYXg7CisJICAgIG1mcC0+bWZfYmxvY2tucl9tYXggKz0gcGFnZV9jb3VudDsKKwl9CisgICAgfQorICAgIGhwLT5iaF9mbGFncyA9IEJIX0xPQ0tFRCB8IEJIX0RJUlRZOwkvKiBuZXcgYmxvY2sgaXMgYWx3YXlzIGRpcnR5ICovCisgICAgbWZwLT5tZl9kaXJ0eSA9IFRSVUU7CisgICAgaHAtPmJoX3BhZ2VfY291bnQgPSBwYWdlX2NvdW50OworICAgIG1mX2luc191c2VkKG1mcCwgaHApOworICAgIG1mX2luc19oYXNoKG1mcCwgaHApOworCisgICAgLyoKKyAgICAgKiBJbml0IHRoZSBkYXRhIHRvIGFsbCB6ZXJvLCB0byBhdm9pZCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4KKyAgICAgKiBUaGlzIGFsc28gYXZvaWRzIHRoYXQgdGhlIHBhc3N3ZCBmaWxlIGVuZHMgdXAgaW4gdGhlIHN3YXAgZmlsZSEKKyAgICAgKi8KKyAgICAodm9pZCl2aW1fbWVtc2V0KChjaGFyICopKGhwLT5iaF9kYXRhKSwgMCwgKHNpemVfdCltZnAtPm1mX3BhZ2Vfc2l6ZSk7CisKKyAgICByZXR1cm4gaHA7Cit9CisKKy8qCisgKiBnZXQgZXhpc3RpbmcgYmxvY2sgJ25yJyB3aXRoICdwYWdlX2NvdW50JyBwYWdlcworICoKKyAqIE5vdGU6IFRoZSBjYWxsZXIgc2hvdWxkIGZpcnN0IGNoZWNrIGEgbmVnYXRpdmUgbnIgd2l0aCBtZl90cmFuc19kZWwoKQorICovCisgICAgYmhkcl9UICoKK21mX2dldChtZnAsIG5yLCBwYWdlX2NvdW50KQorICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGJsb2NrbnJfVAlucjsKKyAgICBpbnQJCXBhZ2VfY291bnQ7Cit7CisgICAgYmhkcl9UICAgICpocDsKKwkJCQkJCS8qIGRvZXNuJ3QgZXhpc3QgKi8KKyAgICBpZiAobnIgPj0gbWZwLT5tZl9ibG9ja25yX21heCB8fCBuciA8PSBtZnAtPm1mX2Jsb2NrbnJfbWluKQorCXJldHVybiBOVUxMOworCisgICAgLyoKKyAgICAgKiBzZWUgaWYgaXQgaXMgaW4gdGhlIGNhY2hlCisgICAgICovCisgICAgaHAgPSBtZl9maW5kX2hhc2gobWZwLCBucik7CisgICAgaWYgKGhwID09IE5VTEwpCS8qIG5vdCBpbiB0aGUgaGFzaCBsaXN0ICovCisgICAgeworCWlmIChuciA8IDAgfHwgbnIgPj0gbWZwLT5tZl9pbmZpbGVfY291bnQpICAgLyogY2FuJ3QgYmUgaW4gdGhlIGZpbGUgKi8KKwkgICAgcmV0dXJuIE5VTEw7CisKKwkvKiBjb3VsZCBjaGVjayBoZXJlIGlmIHRoZSBibG9jayBpcyBpbiB0aGUgZnJlZSBsaXN0ICovCisKKwkvKgorCSAqIENoZWNrIGlmIHdlIG5lZWQgdG8gZmx1c2ggYW4gZXhpc3RpbmcgYmxvY2suCisJICogSWYgc28sIHVzZSB0aGF0IGJsb2NrLgorCSAqIElmIG5vdCwgYWxsb2NhdGUgYSBuZXcgYmxvY2suCisJICovCisJaHAgPSBtZl9yZWxlYXNlKG1mcCwgcGFnZV9jb3VudCk7CisJaWYgKGhwID09IE5VTEwgJiYgKGhwID0gbWZfYWxsb2NfYmhkcihtZnAsIHBhZ2VfY291bnQpKSA9PSBOVUxMKQorCSAgICByZXR1cm4gTlVMTDsKKworCWhwLT5iaF9ibnVtID0gbnI7CisJaHAtPmJoX2ZsYWdzID0gMDsKKwlocC0+YmhfcGFnZV9jb3VudCA9IHBhZ2VfY291bnQ7CisJaWYgKG1mX3JlYWQobWZwLCBocCkgPT0gRkFJTCkJICAgIC8qIGNhbm5vdCByZWFkIHRoZSBibG9jayEgKi8KKwl7CisJICAgIG1mX2ZyZWVfYmhkcihocCk7CisJICAgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwltZl9yZW1fdXNlZChtZnAsIGhwKTsJLyogcmVtb3ZlIGZyb20gbGlzdCwgaW5zZXJ0IGluIGZyb250IGJlbG93ICovCisJbWZfcmVtX2hhc2gobWZwLCBocCk7CisgICAgfQorCisgICAgaHAtPmJoX2ZsYWdzIHw9IEJIX0xPQ0tFRDsKKyAgICBtZl9pbnNfdXNlZChtZnAsIGhwKTsJLyogcHV0IGluIGZyb250IG9mIHVzZWQgbGlzdCAqLworICAgIG1mX2luc19oYXNoKG1mcCwgaHApOwkvKiBwdXQgaW4gZnJvbnQgb2YgaGFzaCBsaXN0ICovCisKKyAgICByZXR1cm4gaHA7Cit9CisKKy8qCisgKiByZWxlYXNlIHRoZSBibG9jayAqaHAKKyAqCisgKiAgIGRpcnR5OiBCbG9jayBtdXN0IGJlIHdyaXR0ZW4gdG8gZmlsZSBsYXRlcgorICogICBpbmZpbGU6IEJsb2NrIHNob3VsZCBiZSBpbiBmaWxlIChuZWVkZWQgZm9yIHJlY292ZXJ5KQorICoKKyAqICBubyByZXR1cm4gdmFsdWUsIGZ1bmN0aW9uIGNhbm5vdCBmYWlsCisgKi8KKyAgICB2b2lkCittZl9wdXQobWZwLCBocCwgZGlydHksIGluZmlsZSkKKyAgICBtZW1maWxlX1QJKm1mcDsKKyAgICBiaGRyX1QJKmhwOworICAgIGludAkJZGlydHk7CisgICAgaW50CQlpbmZpbGU7Cit7CisgICAgaW50CQlmbGFnczsKKworICAgIGZsYWdzID0gaHAtPmJoX2ZsYWdzOworCisgICAgaWYgKChmbGFncyAmIEJIX0xPQ0tFRCkgPT0gMCkKKwlFTVNHKF8oIkUyOTM6IGJsb2NrIHdhcyBub3QgbG9ja2VkIikpOworICAgIGZsYWdzICY9IH5CSF9MT0NLRUQ7CisgICAgaWYgKGRpcnR5KQorICAgIHsKKwlmbGFncyB8PSBCSF9ESVJUWTsKKwltZnAtPm1mX2RpcnR5ID0gVFJVRTsKKyAgICB9CisgICAgaHAtPmJoX2ZsYWdzID0gZmxhZ3M7CisgICAgaWYgKGluZmlsZSkKKwltZl90cmFuc19hZGQobWZwLCBocCk7CSAgICAvKiBtYXkgdHJhbnNsYXRlIG5lZ2F0aXZlIGluIHBvc2l0aXZlIG5yICovCit9CisKKy8qCisgKiBibG9jayAqaHAgaXMgbm8gbG9uZ2VyIGluIHVzZWQsIG1heSBwdXQgaXQgaW4gdGhlIGZyZWUgbGlzdCBvZiBtZW1maWxlICptZnAKKyAqLworICAgIHZvaWQKK21mX2ZyZWUobWZwLCBocCkKKyAgICBtZW1maWxlX1QJKm1mcDsKKyAgICBiaGRyX1QJKmhwOworeworICAgIHZpbV9mcmVlKGhwLT5iaF9kYXRhKTsJLyogZnJlZSB0aGUgbWVtb3J5ICovCisgICAgbWZfcmVtX2hhc2gobWZwLCBocCk7CS8qIGdldCAqaHAgb3V0IG9mIHRoZSBoYXNoIGxpc3QgKi8KKyAgICBtZl9yZW1fdXNlZChtZnAsIGhwKTsJLyogZ2V0ICpocCBvdXQgb2YgdGhlIHVzZWQgbGlzdCAqLworICAgIGlmIChocC0+YmhfYm51bSA8IDApCisgICAgeworCXZpbV9mcmVlKGhwKTsJCS8qIGRvbid0IHdhbnQgbmVnYXRpdmUgbnVtYmVycyBpbiBmcmVlIGxpc3QgKi8KKwltZnAtPm1mX25lZ19jb3VudC0tOworICAgIH0KKyAgICBlbHNlCisJbWZfaW5zX2ZyZWUobWZwLCBocCk7CS8qIHB1dCAqaHAgaW4gdGhlIGZyZWUgbGlzdCAqLworfQorCisjaWYgZGVmaW5lZChfX01PUlBIT1NfXykKKy8qIGZ1bmN0aW9uIGlzIG1pc3NpbmcgaW4gTW9ycGhPUyBsaWJuaXggdmVyc2lvbiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKl9fc3RkZmlsZWRlczsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nCitmZHRvZmgoaW50IGZpbGVkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBfX3N0ZGZpbGVkZXNbZmlsZWRlc2NyaXB0b3JdOworfQorI2VuZGlmCisKKy8qCisgKiBTeW5jIHRoZSBtZW1vcnkgZmlsZSAqbWZwIHRvIGRpc2suCisgKiBGbGFnczoKKyAqICBNRlNfQUxMCUlmIG5vdCBnaXZlbiwgYmxvY2tzIHdpdGggbmVnYXRpdmUgbnVtYmVycyBhcmUgbm90IHN5bmNlZCwKKyAqCQlldmVuIHdoZW4gdGhleSBhcmUgZGlydHkhCisgKiAgTUZTX1NUT1AJU3RvcCBzeW5jaW5nIHdoZW4gYSBjaGFyYWN0ZXIgYmVjb21lcyBhdmFpbGFibGUsIGJ1dCBzeW5jIGF0CisgKgkJbGVhc3Qgb25lIGJsb2NrLgorICogIE1GU19GTFVTSAlNYWtlIHN1cmUgYnVmZmVycyBhcmUgZmx1c2hlZCB0byBkaXNrLCBzbyB0aGV5IHdpbGwgc3Vydml2ZSBhCisgKgkJc3lzdGVtIGNyYXNoLgorICogIE1GU19aRVJPCU9ubHkgd3JpdGUgYmxvY2sgMC4KKyAqCisgKiBSZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK21mX3N5bmMobWZwLCBmbGFncykKKyAgICBtZW1maWxlX1QJKm1mcDsKKyAgICBpbnQJCWZsYWdzOworeworICAgIGludAkJc3RhdHVzOworICAgIGJoZHJfVAkqaHA7CisjaWYgZGVmaW5lZChTWU5DX0RVUF9DTE9TRSkgJiYgIWRlZmluZWQoTVNET1MpCisgICAgaW50CQlmZDsKKyNlbmRpZgorICAgIGludAkJZ290X2ludF9zYXZlID0gZ290X2ludDsKKworICAgIGlmIChtZnAtPm1mX2ZkIDwgMCkJICAgIC8qIHRoZXJlIGlzIG5vIGZpbGUsIG5vdGhpbmcgdG8gZG8gKi8KKyAgICB7CisJbWZwLT5tZl9kaXJ0eSA9IEZBTFNFOworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIC8qIE9ubHkgYSBDVFJMLUMgd2hpbGUgd3JpdGluZyB3aWxsIGJyZWFrIHVzIGhlcmUsIG5vdCBvbmUgdHlwZWQKKyAgICAgKiBwcmV2aW91c2x5LiAqLworICAgIGdvdF9pbnQgPSBGQUxTRTsKKworICAgIC8qCisgICAgICogc3luYyBmcm9tIGxhc3QgdG8gZmlyc3QgKG1heSByZWR1Y2UgdGhlIHByb2JhYmlsaXR5IG9mIGFuIGluY29uc2lzdGVudAorICAgICAqIGZpbGUpIElmIGEgd3JpdGUgZmFpbHMsIGl0IGlzIHZlcnkgbGlrZWx5IGNhdXNlZCBieSBhIGZ1bGwgZmlsZXN5c3RlbS4KKyAgICAgKiBUaGVuIHdlIG9ubHkgdHJ5IHRvIHdyaXRlIGJsb2NrcyB3aXRoaW4gdGhlIGV4aXN0aW5nIGZpbGUuIElmIHRoYXQgYWxzbworICAgICAqIGZhaWxzIHRoZW4gd2UgZ2l2ZSB1cC4KKyAgICAgKi8KKyAgICBzdGF0dXMgPSBPSzsKKyAgICBmb3IgKGhwID0gbWZwLT5tZl91c2VkX2xhc3Q7IGhwICE9IE5VTEw7IGhwID0gaHAtPmJoX3ByZXYpCisJaWYgKCgoZmxhZ3MgJiBNRlNfQUxMKSB8fCBocC0+YmhfYm51bSA+PSAwKQorCQkmJiAoaHAtPmJoX2ZsYWdzICYgQkhfRElSVFkpCisJCSYmIChzdGF0dXMgPT0gT0sgfHwgKGhwLT5iaF9ibnVtID49IDAKKwkJICAgICYmIGhwLT5iaF9ibnVtIDwgbWZwLT5tZl9pbmZpbGVfY291bnQpKSkKKwl7CisJICAgIGlmICgoZmxhZ3MgJiBNRlNfWkVSTykgJiYgaHAtPmJoX2JudW0gIT0gMCkKKwkJY29udGludWU7CisJICAgIGlmIChtZl93cml0ZShtZnAsIGhwKSA9PSBGQUlMKQorCSAgICB7CisJCWlmIChzdGF0dXMgPT0gRkFJTCkJLyogZG91YmxlIGVycm9yOiBxdWl0IHN5bmNpbmcgKi8KKwkJICAgIGJyZWFrOworCQlzdGF0dXMgPSBGQUlMOworCSAgICB9CisJICAgIGlmIChmbGFncyAmIE1GU19TVE9QKQorCSAgICB7CisJCS8qIFN0b3Agd2hlbiBjaGFyIGF2YWlsYWJsZSBub3cuICovCisJCWlmICh1aV9jaGFyX2F2YWlsKCkpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBlbHNlCisJCXVpX2JyZWFrY2hlY2soKTsKKwkgICAgaWYgKGdvdF9pbnQpCisJCWJyZWFrOworCX0KKworICAgIC8qCisgICAgICogSWYgdGhlIHdob2xlIGxpc3QgaXMgZmx1c2hlZCwgdGhlIG1lbWZpbGUgaXMgbm90IGRpcnR5IGFueW1vcmUuCisgICAgICogSW4gY2FzZSBvZiBhbiBlcnJvciB0aGlzIGZsYWcgaXMgYWxzbyBzZXQsIHRvIGF2b2lkIHRyeWluZyBhbGwgdGhlIHRpbWUuCisgICAgICovCisgICAgaWYgKGhwID09IE5VTEwgfHwgc3RhdHVzID09IEZBSUwpCisJbWZwLT5tZl9kaXJ0eSA9IEZBTFNFOworCisgICAgaWYgKChmbGFncyAmIE1GU19GTFVTSCkgJiYgKnBfc3dzICE9IE5VTCkKKyAgICB7CisjaWYgZGVmaW5lZChVTklYKQorIyBpZmRlZiBIQVZFX0ZTWU5DCisJLyoKKwkgKiBtb3N0IFVuaXhlcyBoYXZlIHRoZSB2ZXJ5IHVzZWZ1bCBmc3luYygpIGZ1bmN0aW9uLCBqdXN0IHdoYXQgd2UgbmVlZC4KKwkgKiBIb3dldmVyLCB3aXRoIE9TLzIgYW5kIEVNWCBpdCBpcyBhbHNvIGF2YWlsYWJsZSwgYnV0IHRoZXJlIGFyZQorCSAqIHJlcG9ydHMgb2YgYmFkIHByb2JsZW1zIHdpdGggaXQgKGEgYnVnIGluIEhQRlMuSUZTKS4KKwkgKiBTbyB3ZSBkaXNhYmxlIHVzZSBvZiBpdCBoZXJlIGluIGNhc2Ugc29tZW9uZSB0cmllcyB0byBiZSBzbWFydAorCSAqIGFuZCBjaGFuZ2VzIG9zX29zMl9jZmcuaC4uLiAoZXZlbiB0aG91Z2ggdGhlcmUgaXMgbm8gX19FTVhfXyB0ZXN0CisJICogaW4gdGhlICNpZiwgYXMgX19FTVhfXyBkb2VzIG5vdCBoYXZlIHN5bmMoKTsgd2UgaG9wZSBmb3IgYSB0aW1lbHkKKwkgKiBzeW5jIGZyb20gdGhlIHN5c3RlbSBpdHNlbGYpLgorCSAqLworIyAgaWYgZGVmaW5lZChfX0VNWF9fKQorICAgZXJyb3IgIkRvbnQgdXNlIGZzeW5jIHdpdGggRU1YISBSZWFkIGVteGRvYy5kb2Mgb3IgZW14Zml4MDEuZG9jIGZvciBpbmZvLiIKKyMgIGVuZGlmCisJaWYgKFNUUkNNUChwX3N3cywgImZzeW5jIikgPT0gMCkKKwl7CisJICAgIGlmIChmc3luYyhtZnAtPm1mX2ZkKSkKKwkJc3RhdHVzID0gRkFJTDsKKwl9CisJZWxzZQorIyBlbmRpZgorCSAgICAvKiBPcGVuTlQgaXMgc3RyaWN0bHkgUE9TSVggKEJlbnppbmdlcikgKi8KKwkgICAgLyogVGFuZGVtL0hpbWFsYXlhIE5TSy1PU1MgZG9lc24ndCBoYXZlIHN5bmMoKSAqLworIyBpZiBkZWZpbmVkKF9fT1BFTk5UKSB8fCBkZWZpbmVkKF9fVEFOREVNKQorCSAgICBmZmx1c2goTlVMTCk7CisjIGVsc2UKKwkgICAgc3luYygpOworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgVk1TCisJaWYgKFNUUkNNUChwX3N3cywgImZzeW5jIikgPT0gMCkKKwl7CisJICAgIGlmIChmc3luYyhtZnAtPm1mX2ZkKSkKKwkJc3RhdHVzID0gRkFJTDsKKwl9CisjZW5kaWYKKyNpZmRlZiBNU0RPUworCWlmIChfZG9zX2NvbW1pdChtZnAtPm1mX2ZkKSkKKwkgICAgc3RhdHVzID0gRkFJTDsKKyNlbHNlCisjIGlmZGVmIFNZTkNfRFVQX0NMT1NFCisJLyoKKwkgKiBXaW4zMiBpcyBhIGJpdCBtb3JlIHdvcms6IER1cGxpY2F0ZSB0aGUgZmlsZSBoYW5kbGUgYW5kIGNsb3NlIGl0LgorCSAqIFRoaXMgc2hvdWxkIGZsdXNoIHRoZSBmaWxlIHRvIGRpc2suCisJICovCisJaWYgKChmZCA9IGR1cChtZnAtPm1mX2ZkKSkgPj0gMCkKKwkgICAgY2xvc2UoZmQpOworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgQU1JR0EKKyMgaWZkZWYgX19BUk9TX18KKwlpZiAoZnN5bmMobWZwLT5tZl9mZCkgIT0gMCkKKwkgICAgc3RhdHVzID0gRkFJTDsKKyMgZWxzZQorCS8qCisJICogRmx1c2goKSBvbmx5IGV4aXN0cyBmb3IgQW1pZ2FEb3MgMi4wLgorCSAqIEZvciAxLjMgaXQgc2hvdWxkIGJlIGRvbmUgd2l0aCBjbG9zZSgpICsgb3BlbigpLCBidXQgdGhlbiB0aGUgcmlzaworCSAqIGlzIHRoYXQgdGhlIG9wZW4oKSBtYXkgZmFpbCBhbmQgbG9zZSB0aGUgZmlsZS4uLi4KKwkgKi8KKyMgIGlmZGVmIEZFQVRfQVJQCisJaWYgKGRvczIpCisjICBlbmRpZgorIyAgaWZkZWYgU0FTQworCXsKKwkgICAgc3RydWN0IFVGQiAqZnAgPSBjaGt1ZmIobWZwLT5tZl9mZCk7CisKKwkgICAgaWYgKGZwICE9IE5VTEwpCisJCUZsdXNoKGZwLT51ZmJmaCk7CisJfQorIyAgZWxzZQorIyAgIGlmIGRlZmluZWQoX0RDQykgfHwgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX01PUlBIT1NfXykKKwl7CisjICAgIGlmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fTU9SUEhPU19fKQorCSAgICAvKiBIYXZlIGZ1bmN0aW9uIChpbiBsaWJuaXggYXQgbGVhc3QpLAorCSAgICAgKiBidXQgYWluJ3QgZ290IG5vIHByb3RvdHlwZSBhbnl3aGVyZS4gKi8KKwkgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmR0b2ZoKGludCBmaWxlZGVzY3JpcHRvcik7CisjICAgIGVuZGlmCisJICAgIEJQVFIgZmggPSAoQlBUUilmZHRvZmgobWZwLT5tZl9mZCk7CisKKwkgICAgaWYgKGZoICE9IDApCisJCUZsdXNoKGZoKTsKKwl9CisjICAgZWxzZSAvKiBhc3N1bWUgTWFueCAqLworCSAgICBGbHVzaChfZGV2dGFiW21mcC0+bWZfZmRdLmZkKTsKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiBBTUlHQSAqLworICAgIH0KKworICAgIGdvdF9pbnQgfD0gZ290X2ludF9zYXZlOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIGluc2VydCBibG9jayAqaHAgaW4gZnJvbnQgb2YgaGFzaGxpc3Qgb2YgbWVtZmlsZSAqbWZwCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbWZfaW5zX2hhc2gobWZwLCBocCkKKyAgICBtZW1maWxlX1QJKm1mcDsKKyAgICBiaGRyX1QJKmhwOworeworICAgIGJoZHJfVAkqaGhwOworICAgIGludAkJaGFzaDsKKworICAgIGhhc2ggPSBNRU1IQVNIKGhwLT5iaF9ibnVtKTsKKyAgICBoaHAgPSBtZnAtPm1mX2hhc2hbaGFzaF07CisgICAgaHAtPmJoX2hhc2hfbmV4dCA9IGhocDsKKyAgICBocC0+YmhfaGFzaF9wcmV2ID0gTlVMTDsKKyAgICBpZiAoaGhwICE9IE5VTEwpCisJaGhwLT5iaF9oYXNoX3ByZXYgPSBocDsKKyAgICBtZnAtPm1mX2hhc2hbaGFzaF0gPSBocDsKK30KKworLyoKKyAqIHJlbW92ZSBibG9jayAqaHAgZnJvbSBoYXNobGlzdCBvZiBtZW1maWxlIGxpc3QgKm1mcAorICovCisgICAgc3RhdGljIHZvaWQKK21mX3JlbV9oYXNoKG1mcCwgaHApCisgICAgbWVtZmlsZV9UCSptZnA7CisgICAgYmhkcl9UCSpocDsKK3sKKyAgICBpZiAoaHAtPmJoX2hhc2hfcHJldiA9PSBOVUxMKQorCW1mcC0+bWZfaGFzaFtNRU1IQVNIKGhwLT5iaF9ibnVtKV0gPSBocC0+YmhfaGFzaF9uZXh0OworICAgIGVsc2UKKwlocC0+YmhfaGFzaF9wcmV2LT5iaF9oYXNoX25leHQgPSBocC0+YmhfaGFzaF9uZXh0OworCisgICAgaWYgKGhwLT5iaF9oYXNoX25leHQpCisJaHAtPmJoX2hhc2hfbmV4dC0+YmhfaGFzaF9wcmV2ID0gaHAtPmJoX2hhc2hfcHJldjsKK30KKworLyoKKyAqIGxvb2sgaW4gaGFzaCBsaXN0cyBvZiBtZW1maWxlICptZnAgZm9yIGJsb2NrIGhlYWRlciB3aXRoIG51bWJlciAnbnInCisgKi8KKyAgICBzdGF0aWMgYmhkcl9UICoKK21mX2ZpbmRfaGFzaChtZnAsIG5yKQorICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGJsb2NrbnJfVAlucjsKK3sKKyAgICBiaGRyX1QJKmhwOworCisgICAgZm9yIChocCA9IG1mcC0+bWZfaGFzaFtNRU1IQVNIKG5yKV07IGhwICE9IE5VTEw7IGhwID0gaHAtPmJoX2hhc2hfbmV4dCkKKwlpZiAoaHAtPmJoX2JudW0gPT0gbnIpCisJICAgIGJyZWFrOworICAgIHJldHVybiBocDsKK30KKworLyoKKyAqIGluc2VydCBibG9jayAqaHAgaW4gZnJvbnQgb2YgdXNlZCBsaXN0IG9mIG1lbWZpbGUgKm1mcAorICovCisgICAgc3RhdGljIHZvaWQKK21mX2luc191c2VkKG1mcCwgaHApCisgICAgbWVtZmlsZV9UCSptZnA7CisgICAgYmhkcl9UCSpocDsKK3sKKyAgICBocC0+YmhfbmV4dCA9IG1mcC0+bWZfdXNlZF9maXJzdDsKKyAgICBtZnAtPm1mX3VzZWRfZmlyc3QgPSBocDsKKyAgICBocC0+YmhfcHJldiA9IE5VTEw7CisgICAgaWYgKGhwLT5iaF9uZXh0ID09IE5VTEwpCSAgICAvKiBsaXN0IHdhcyBlbXB0eSwgYWRqdXN0IGxhc3QgcG9pbnRlciAqLworCW1mcC0+bWZfdXNlZF9sYXN0ID0gaHA7CisgICAgZWxzZQorCWhwLT5iaF9uZXh0LT5iaF9wcmV2ID0gaHA7CisgICAgbWZwLT5tZl91c2VkX2NvdW50ICs9IGhwLT5iaF9wYWdlX2NvdW50OworICAgIHRvdGFsX21lbV91c2VkICs9IGhwLT5iaF9wYWdlX2NvdW50ICogbWZwLT5tZl9wYWdlX3NpemU7Cit9CisKKy8qCisgKiByZW1vdmUgYmxvY2sgKmhwIGZyb20gdXNlZCBsaXN0IG9mIG1lbWZpbGUgKm1mcAorICovCisgICAgc3RhdGljIHZvaWQKK21mX3JlbV91c2VkKG1mcCwgaHApCisgICAgbWVtZmlsZV9UCSptZnA7CisgICAgYmhkcl9UCSpocDsKK3sKKyAgICBpZiAoaHAtPmJoX25leHQgPT0gTlVMTCkJICAgIC8qIGxhc3QgYmxvY2sgaW4gdXNlZCBsaXN0ICovCisJbWZwLT5tZl91c2VkX2xhc3QgPSBocC0+YmhfcHJldjsKKyAgICBlbHNlCisJaHAtPmJoX25leHQtPmJoX3ByZXYgPSBocC0+YmhfcHJldjsKKyAgICBpZiAoaHAtPmJoX3ByZXYgPT0gTlVMTCkJICAgIC8qIGZpcnN0IGJsb2NrIGluIHVzZWQgbGlzdCAqLworCW1mcC0+bWZfdXNlZF9maXJzdCA9IGhwLT5iaF9uZXh0OworICAgIGVsc2UKKwlocC0+YmhfcHJldi0+YmhfbmV4dCA9IGhwLT5iaF9uZXh0OworICAgIG1mcC0+bWZfdXNlZF9jb3VudCAtPSBocC0+YmhfcGFnZV9jb3VudDsKKyAgICB0b3RhbF9tZW1fdXNlZCAtPSBocC0+YmhfcGFnZV9jb3VudCAqIG1mcC0+bWZfcGFnZV9zaXplOworfQorCisvKgorICogUmVsZWFzZSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBibG9jayBmcm9tIHRoZSB1c2VkIGxpc3QgaWYgdGhlIG51bWJlcgorICogb2YgdXNlZCBtZW1vcnkgYmxvY2tzIGdldHMgdG8gYmlnLgorICoKKyAqIFJldHVybiB0aGUgYmxvY2sgaGVhZGVyIHRvIHRoZSBjYWxsZXIsIGluY2x1ZGluZyB0aGUgbWVtb3J5IGJsb2NrLCBzbworICogaXQgY2FuIGJlIHJlLXVzZWQuIE1ha2Ugc3VyZSB0aGUgcGFnZV9jb3VudCBpcyByaWdodC4KKyAqLworICAgIHN0YXRpYyBiaGRyX1QgKgorbWZfcmVsZWFzZShtZnAsIHBhZ2VfY291bnQpCisgICAgbWVtZmlsZV9UCSptZnA7CisgICAgaW50CQlwYWdlX2NvdW50OworeworICAgIGJoZHJfVAkqaHA7CisgICAgaW50CQluZWVkX3JlbGVhc2U7CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIC8qIGRvbid0IHJlbGVhc2Ugd2hpbGUgaW4gbWZfY2xvc2VfZmlsZSgpICovCisgICAgaWYgKGRvbnRfcmVsZWFzZSkKKwlyZXR1cm4gTlVMTDsKKworICAgIC8qCisgICAgICogTmVlZCB0byByZWxlYXNlIGEgYmxvY2sgaWYgdGhlIG51bWJlciBvZiBibG9ja3MgZm9yIHRoaXMgbWVtZmlsZSBpcworICAgICAqIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtIG9yIHRvdGFsIG1lbW9yeSB1c2VkIGlzIG92ZXIgJ21heG1lbXRvdCcKKyAgICAgKi8KKyAgICBuZWVkX3JlbGVhc2UgPSAoKG1mcC0+bWZfdXNlZF9jb3VudCA+PSBtZnAtPm1mX3VzZWRfY291bnRfbWF4KQorCQkJCSAgfHwgKHRvdGFsX21lbV91c2VkID4+IDEwKSA+PSAobG9uZ191KXBfbW10KTsKKworICAgIC8qCisgICAgICogVHJ5IHRvIGNyZWF0ZSBhIHN3YXAgZmlsZSBpZiB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGlzIGdldHRpbmcgdG9vCisgICAgICogaGlnaC4KKyAgICAgKi8KKyAgICBpZiAobWZwLT5tZl9mZCA8IDAgJiYgbmVlZF9yZWxlYXNlICYmIHBfdWMpCisgICAgeworCS8qIGZpbmQgZm9yIHdoaWNoIGJ1ZmZlciB0aGlzIG1lbWZpbGUgaXMgKi8KKwlmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTDsgYnVmID0gYnVmLT5iX25leHQpCisJICAgIGlmIChidWYtPmJfbWwubWxfbWZwID09IG1mcCkKKwkJYnJlYWs7CisJaWYgKGJ1ZiAhPSBOVUxMICYmIGJ1Zi0+Yl9tYXlfc3dhcCkKKwkgICAgbWxfb3Blbl9maWxlKGJ1Zik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBkb24ndCByZWxlYXNlIGEgYmxvY2sgaWYKKyAgICAgKgl0aGVyZSBpcyBubyBmaWxlIGZvciB0aGlzIG1lbWZpbGUKKyAgICAgKiBvcgorICAgICAqCXRoZSBudW1iZXIgb2YgYmxvY2tzIGZvciB0aGlzIG1lbWZpbGUgaXMgbG93ZXIgdGhhbiB0aGUgbWF4aW11bQorICAgICAqCSAgYW5kCisgICAgICoJdG90YWwgbWVtb3J5IHVzZWQgaXMgbm90IHVwIHRvICdtYXhtZW10b3QnCisgICAgICovCisgICAgaWYgKG1mcC0+bWZfZmQgPCAwIHx8ICFuZWVkX3JlbGVhc2UpCisJcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGhwID0gbWZwLT5tZl91c2VkX2xhc3Q7IGhwICE9IE5VTEw7IGhwID0gaHAtPmJoX3ByZXYpCisJaWYgKCEoaHAtPmJoX2ZsYWdzICYgQkhfTE9DS0VEKSkKKwkgICAgYnJlYWs7CisgICAgaWYgKGhwID09IE5VTEwpCS8qIG5vdCBhIHNpbmdsZSBvbmUgdGhhdCBjYW4gYmUgcmVsZWFzZWQgKi8KKwlyZXR1cm4gTlVMTDsKKworICAgIC8qCisgICAgICogSWYgdGhlIGJsb2NrIGlzIGRpcnR5LCB3cml0ZSBpdC4KKyAgICAgKiBJZiB0aGUgd3JpdGUgZmFpbHMgd2UgZG9uJ3QgZnJlZSBpdC4KKyAgICAgKi8KKyAgICBpZiAoKGhwLT5iaF9mbGFncyAmIEJIX0RJUlRZKSAmJiBtZl93cml0ZShtZnAsIGhwKSA9PSBGQUlMKQorCXJldHVybiBOVUxMOworCisgICAgbWZfcmVtX3VzZWQobWZwLCBocCk7CisgICAgbWZfcmVtX2hhc2gobWZwLCBocCk7CisKKyAgICAvKgorICAgICAqIElmIGEgYmhkcl9UIGlzIHJldHVybmVkLCBtYWtlIHN1cmUgdGhhdCB0aGUgcGFnZV9jb3VudCBvZiBiaF9kYXRhIGlzCisgICAgICogcmlnaHQKKyAgICAgKi8KKyAgICBpZiAoaHAtPmJoX3BhZ2VfY291bnQgIT0gcGFnZV9jb3VudCkKKyAgICB7CisJdmltX2ZyZWUoaHAtPmJoX2RhdGEpOworCWlmICgoaHAtPmJoX2RhdGEgPSBhbGxvYyhtZnAtPm1mX3BhZ2Vfc2l6ZSAqIHBhZ2VfY291bnQpKSA9PSBOVUxMKQorCXsKKwkgICAgdmltX2ZyZWUoaHApOworCSAgICByZXR1cm4gTlVMTDsKKwl9CisJaHAtPmJoX3BhZ2VfY291bnQgPSBwYWdlX2NvdW50OworICAgIH0KKyAgICByZXR1cm4gaHA7Cit9CisKKy8qCisgKiByZWxlYXNlIGFzIG1hbnkgYmxvY2tzIGFzIHBvc3NpYmxlCisgKiBVc2VkIGluIGNhc2Ugb2Ygb3V0IG9mIG1lbW9yeQorICoKKyAqIHJldHVybiBUUlVFIGlmIGFueSBtZW1vcnkgd2FzIHJlbGVhc2VkCisgKi8KKyAgICBpbnQKK21mX3JlbGVhc2VfYWxsKCkKK3sKKyAgICBidWZfVAkqYnVmOworICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGJoZHJfVAkqaHA7CisgICAgaW50CQlyZXR2YWwgPSBGQUxTRTsKKworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKyAgICB7CisJbWZwID0gYnVmLT5iX21sLm1sX21mcDsKKwlpZiAobWZwICE9IE5VTEwpCisJeworCSAgICAvKiBJZiBubyBzd2FwIGZpbGUgeWV0LCBtYXkgb3BlbiBvbmUgKi8KKwkgICAgaWYgKG1mcC0+bWZfZmQgPCAwICYmIGJ1Zi0+Yl9tYXlfc3dhcCkKKwkJbWxfb3Blbl9maWxlKGJ1Zik7CisKKwkgICAgLyogb25seSBpZiB0aGVyZSBpcyBhIHN3YXBmaWxlICovCisJICAgIGlmIChtZnAtPm1mX2ZkID49IDApCisJICAgIHsKKwkJZm9yIChocCA9IG1mcC0+bWZfdXNlZF9sYXN0OyBocCAhPSBOVUxMOyApCisJCXsKKwkJICAgIGlmICghKGhwLT5iaF9mbGFncyAmIEJIX0xPQ0tFRCkKKwkJCSAgICAmJiAoIShocC0+YmhfZmxhZ3MgJiBCSF9ESVJUWSkKKwkJCQl8fCBtZl93cml0ZShtZnAsIGhwKSAhPSBGQUlMKSkKKwkJICAgIHsKKwkJCW1mX3JlbV91c2VkKG1mcCwgaHApOworCQkJbWZfcmVtX2hhc2gobWZwLCBocCk7CisJCQltZl9mcmVlX2JoZHIoaHApOworCQkJaHAgPSBtZnAtPm1mX3VzZWRfbGFzdDsJLyogcmUtc3RhcnQsIGxpc3Qgd2FzIGNoYW5nZWQgKi8KKwkJCXJldHZhbCA9IFRSVUU7CisJCSAgICB9CisJCSAgICBlbHNlCisJCQlocCA9IGhwLT5iaF9wcmV2OworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIGJsb2NrIGhlYWRlciBhbmQgYSBibG9jayBvZiBtZW1vcnkgZm9yIGl0CisgKi8KKyAgICBzdGF0aWMgYmhkcl9UICoKK21mX2FsbG9jX2JoZHIobWZwLCBwYWdlX2NvdW50KQorICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGludAkJcGFnZV9jb3VudDsKK3sKKyAgICBiaGRyX1QJKmhwOworCisgICAgaWYgKChocCA9IChiaGRyX1QgKilhbGxvYygodW5zaWduZWQpc2l6ZW9mKGJoZHJfVCkpKSAhPSBOVUxMKQorICAgIHsKKwlpZiAoKGhwLT5iaF9kYXRhID0gKGNoYXJfdSAqKWFsbG9jKG1mcC0+bWZfcGFnZV9zaXplICogcGFnZV9jb3VudCkpCisJCQkJCQkJCSAgICAgID09IE5VTEwpCisJeworCSAgICB2aW1fZnJlZShocCk7CSAgICAvKiBub3QgZW5vdWdoIG1lbW9yeSAqLworCSAgICByZXR1cm4gTlVMTDsKKwl9CisJaHAtPmJoX3BhZ2VfY291bnQgPSBwYWdlX2NvdW50OworICAgIH0KKyAgICByZXR1cm4gaHA7Cit9CisKKy8qCisgKiBGcmVlIGEgYmxvY2sgaGVhZGVyIGFuZCB0aGUgYmxvY2sgb2YgbWVtb3J5IGZvciBpdAorICovCisgICAgc3RhdGljIHZvaWQKK21mX2ZyZWVfYmhkcihocCkKKyAgICBiaGRyX1QJKmhwOworeworICAgIHZpbV9mcmVlKGhwLT5iaF9kYXRhKTsKKyAgICB2aW1fZnJlZShocCk7Cit9CisKKy8qCisgKiBpbnNlcnQgZW50cnkgKmhwIGluIHRoZSBmcmVlIGxpc3QKKyAqLworICAgIHN0YXRpYyB2b2lkCittZl9pbnNfZnJlZShtZnAsIGhwKQorICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGJoZHJfVAkqaHA7Cit7CisgICAgaHAtPmJoX25leHQgPSBtZnAtPm1mX2ZyZWVfZmlyc3Q7CisgICAgbWZwLT5tZl9mcmVlX2ZpcnN0ID0gaHA7Cit9CisKKy8qCisgKiByZW1vdmUgdGhlIGZpcnN0IGVudHJ5IGZyb20gdGhlIGZyZWUgbGlzdCBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdAorICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgdGhhdCBtZnAtPm1mX2ZyZWVfZmlyc3QgaXMgbm90IE5VTEwhCisgKi8KKyAgICBzdGF0aWMgYmhkcl9UICoKK21mX3JlbV9mcmVlKG1mcCkKKyAgICBtZW1maWxlX1QJKm1mcDsKK3sKKyAgICBiaGRyX1QJKmhwOworCisgICAgaHAgPSBtZnAtPm1mX2ZyZWVfZmlyc3Q7CisgICAgbWZwLT5tZl9mcmVlX2ZpcnN0ID0gaHAtPmJoX25leHQ7CisgICAgcmV0dXJuIGhwOworfQorCisvKgorICogcmVhZCBhIGJsb2NrIGZyb20gZGlzaworICoKKyAqIFJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIHN0YXRpYyBpbnQKK21mX3JlYWQobWZwLCBocCkKKyAgICBtZW1maWxlX1QJKm1mcDsKKyAgICBiaGRyX1QJKmhwOworeworICAgIG9mZl90CW9mZnNldDsKKyAgICB1bnNpZ25lZAlwYWdlX3NpemU7CisgICAgdW5zaWduZWQJc2l6ZTsKKworICAgIGlmIChtZnAtPm1mX2ZkIDwgMCkJICAgIC8qIHRoZXJlIGlzIG5vIGZpbGUsIGNhbid0IHJlYWQgKi8KKwlyZXR1cm4gRkFJTDsKKworICAgIHBhZ2Vfc2l6ZSA9IG1mcC0+bWZfcGFnZV9zaXplOworICAgIG9mZnNldCA9IChvZmZfdClwYWdlX3NpemUgKiBocC0+YmhfYm51bTsKKyAgICBzaXplID0gcGFnZV9zaXplICogaHAtPmJoX3BhZ2VfY291bnQ7CisgICAgaWYgKGxzZWVrKG1mcC0+bWZfZmQsIG9mZnNldCwgU0VFS19TRVQpICE9IG9mZnNldCkKKyAgICB7CisJRU1TRyhfKCJFMjk0OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSByZWFkIikpOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICBpZiAoKHVuc2lnbmVkKXZpbV9yZWFkKG1mcC0+bWZfZmQsIGhwLT5iaF9kYXRhLCBzaXplKSAhPSBzaXplKQorICAgIHsKKwlFTVNHKF8oIkUyOTU6IFJlYWQgZXJyb3IgaW4gc3dhcCBmaWxlIikpOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiB3cml0ZSBhIGJsb2NrIHRvIGRpc2sKKyAqCisgKiBSZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBzdGF0aWMgaW50CittZl93cml0ZShtZnAsIGhwKQorICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGJoZHJfVAkqaHA7Cit7CisgICAgb2ZmX3QJb2Zmc2V0OwkgICAgLyogb2Zmc2V0IGluIHRoZSBmaWxlICovCisgICAgYmxvY2tucl9UCW5yOwkgICAgLyogYmxvY2sgbnIgd2hpY2ggaXMgYmVpbmcgd3JpdHRlbiAqLworICAgIGJoZHJfVAkqaHAyOworICAgIHVuc2lnbmVkCXBhZ2Vfc2l6ZTsgIC8qIG51bWJlciBvZiBieXRlcyBpbiBhIHBhZ2UgKi8KKyAgICB1bnNpZ25lZAlwYWdlX2NvdW50OyAvKiBudW1iZXIgb2YgcGFnZXMgd3JpdHRlbiAqLworICAgIHVuc2lnbmVkCXNpemU7CSAgICAvKiBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiAqLworCisgICAgaWYgKG1mcC0+bWZfZmQgPCAwKQkgICAgLyogdGhlcmUgaXMgbm8gZmlsZSwgY2FuJ3Qgd3JpdGUgKi8KKwlyZXR1cm4gRkFJTDsKKworICAgIGlmIChocC0+YmhfYm51bSA8IDApCS8qIG11c3QgYXNzaWduIGZpbGUgYmxvY2sgbnVtYmVyICovCisJaWYgKG1mX3RyYW5zX2FkZChtZnAsIGhwKSA9PSBGQUlMKQorCSAgICByZXR1cm4gRkFJTDsKKworICAgIHBhZ2Vfc2l6ZSA9IG1mcC0+bWZfcGFnZV9zaXplOworCisgICAgLyoKKyAgICAgKiBXZSBkb24ndCB3YW50IGdhcHMgaW4gdGhlIGZpbGUuIFdyaXRlIHRoZSBibG9ja3MgaW4gZnJvbnQgb2YgKmhwCisgICAgICogdG8gZXh0ZW5kIHRoZSBmaWxlLgorICAgICAqIElmIGJsb2NrICdtZl9pbmZpbGVfY291bnQnIGlzIG5vdCBpbiB0aGUgaGFzaCBsaXN0LCBpdCBoYXMgYmVlbgorICAgICAqIGZyZWVkLiBGaWxsIHRoZSBzcGFjZSBpbiB0aGUgZmlsZSB3aXRoIGRhdGEgZnJvbSB0aGUgY3VycmVudCBibG9jay4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwluciA9IGhwLT5iaF9ibnVtOworCWlmIChuciA+IG1mcC0+bWZfaW5maWxlX2NvdW50KQkJLyogYmV5b25kIGVuZCBvZiBmaWxlICovCisJeworCSAgICBuciA9IG1mcC0+bWZfaW5maWxlX2NvdW50OworCSAgICBocDIgPSBtZl9maW5kX2hhc2gobWZwLCBucik7CS8qIE5VTEwgY2F0Y2hlZCBiZWxvdyAqLworCX0KKwllbHNlCisJICAgIGhwMiA9IGhwOworCisJb2Zmc2V0ID0gKG9mZl90KXBhZ2Vfc2l6ZSAqIG5yOworCWlmIChsc2VlayhtZnAtPm1mX2ZkLCBvZmZzZXQsIFNFRUtfU0VUKSAhPSBvZmZzZXQpCisJeworCSAgICBFTVNHKF8oIkUyOTY6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHdyaXRlIikpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisJaWYgKGhwMiA9PSBOVUxMKQkgICAgLyogZnJlZWQgYmxvY2ssIGZpbGwgd2l0aCBkdW1teSBkYXRhICovCisJICAgIHBhZ2VfY291bnQgPSAxOworCWVsc2UKKwkgICAgcGFnZV9jb3VudCA9IGhwMi0+YmhfcGFnZV9jb3VudDsKKwlzaXplID0gcGFnZV9zaXplICogcGFnZV9jb3VudDsKKwlpZiAoKHVuc2lnbmVkKXZpbV93cml0ZShtZnAtPm1mX2ZkLAorCSAgICAgKGhwMiA9PSBOVUxMID8gaHAgOiBocDIpLT5iaF9kYXRhLCBzaXplKSAhPSBzaXplKQorCXsKKwkgICAgLyoKKwkgICAgICogQXZvaWQgcmVwZWF0aW5nIHRoZSBlcnJvciBtZXNzYWdlLCB0aGlzIG1vc3RseSBoYXBwZW5zIHdoZW4gdGhlCisJICAgICAqIGRpc2sgaXMgZnVsbC4gV2UgZ2l2ZSB0aGUgbWVzc2FnZSBhZ2FpbiBvbmx5IGFmdGVyIGEgc3VjY2VzZnVsCisJICAgICAqIHdyaXRlIG9yIHdoZW4gaGl0dGluZyBhIGtleS4gV2Uga2VlcCBvbiB0cnlpbmcsIGluIGNhc2Ugc29tZQorCSAgICAgKiBzcGFjZSBiZWNvbWVzIGF2YWlsYWJsZS4KKwkgICAgICovCisJICAgIGlmICghZGlkX3N3YXB3cml0ZV9tc2cpCisJCUVNU0coXygiRTI5NzogV3JpdGUgZXJyb3IgaW4gc3dhcCBmaWxlIikpOworCSAgICBkaWRfc3dhcHdyaXRlX21zZyA9IFRSVUU7CisJICAgIHJldHVybiBGQUlMOworCX0KKwlkaWRfc3dhcHdyaXRlX21zZyA9IEZBTFNFOworCWlmIChocDIgIT0gTlVMTCkJCSAgICAvKiB3cml0dGVuIGEgbm9uLWR1bW15IGJsb2NrICovCisJICAgIGhwMi0+YmhfZmxhZ3MgJj0gfkJIX0RJUlRZOworCQkJCQkgICAgLyogYXBwZW5kZWQgdG8gdGhlIGZpbGUgKi8KKwlpZiAobnIgKyAoYmxvY2tucl9UKXBhZ2VfY291bnQgPiBtZnAtPm1mX2luZmlsZV9jb3VudCkKKwkgICAgbWZwLT5tZl9pbmZpbGVfY291bnQgPSBuciArIHBhZ2VfY291bnQ7CisJaWYgKG5yID09IGhwLT5iaF9ibnVtKQkJICAgIC8qIHdyaXR0ZW4gdGhlIGRlc2lyZWQgYmxvY2sgKi8KKwkgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIE1ha2UgYmxvY2sgbnVtYmVyIGZvciAqaHAgcG9zaXRpdmUgYW5kIGFkZCBpdCB0byB0aGUgdHJhbnNsYXRpb24gbGlzdAorICoKKyAqIFJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIHN0YXRpYyBpbnQKK21mX3RyYW5zX2FkZChtZnAsIGhwKQorICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGJoZHJfVAkqaHA7Cit7CisgICAgYmhkcl9UCSpmcmVlcDsKKyAgICBibG9ja25yX1QJbmV3X2JudW07CisgICAgaW50CQloYXNoOworICAgIE5SX1RSQU5TCSpucDsKKyAgICBpbnQJCXBhZ2VfY291bnQ7CisKKyAgICBpZiAoaHAtPmJoX2JudW0gPj0gMCkJCSAgICAvKiBpdCdzIGFscmVhZHkgcG9zaXRpdmUgKi8KKwlyZXR1cm4gT0s7CisKKyAgICBpZiAoKG5wID0gKE5SX1RSQU5TICopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihOUl9UUkFOUykpKSA9PSBOVUxMKQorCXJldHVybiBGQUlMOworCisvKgorICogZ2V0IGEgbmV3IG51bWJlciBmb3IgdGhlIGJsb2NrLgorICogSWYgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGZyZWUgbGlzdCBoYXMgc3VmZmljaWVudCBwYWdlcywgdXNlIGl0cyBudW1iZXIKKyAqIE90aGVyd2lzZSB1c2UgbWZfYmxvY2tucl9tYXguCisgKi8KKyAgICBmcmVlcCA9IG1mcC0+bWZfZnJlZV9maXJzdDsKKyAgICBwYWdlX2NvdW50ID0gaHAtPmJoX3BhZ2VfY291bnQ7CisgICAgaWYgKGZyZWVwICE9IE5VTEwgJiYgZnJlZXAtPmJoX3BhZ2VfY291bnQgPj0gcGFnZV9jb3VudCkKKyAgICB7CisJbmV3X2JudW0gPSBmcmVlcC0+YmhfYm51bTsKKwkvKgorCSAqIElmIHRoZSBwYWdlIGNvdW50IG9mIHRoZSBmcmVlIGJsb2NrIHdhcyBsYXJnZXIsIHJlY3VkZSBpdC4KKwkgKiBJZiB0aGUgcGFnZSBjb3VudCBtYXRjaGVzLCByZW1vdmUgdGhlIGJsb2NrIGZyb20gdGhlIGZyZWUgbGlzdAorCSAqLworCWlmIChmcmVlcC0+YmhfcGFnZV9jb3VudCA+IHBhZ2VfY291bnQpCisJeworCSAgICBmcmVlcC0+YmhfYm51bSArPSBwYWdlX2NvdW50OworCSAgICBmcmVlcC0+YmhfcGFnZV9jb3VudCAtPSBwYWdlX2NvdW50OworCX0KKwllbHNlCisJeworCSAgICBmcmVlcCA9IG1mX3JlbV9mcmVlKG1mcCk7CisJICAgIHZpbV9mcmVlKGZyZWVwKTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJbmV3X2JudW0gPSBtZnAtPm1mX2Jsb2NrbnJfbWF4OworCW1mcC0+bWZfYmxvY2tucl9tYXggKz0gcGFnZV9jb3VudDsKKyAgICB9CisKKyAgICBucC0+bnRfb2xkX2JudW0gPSBocC0+YmhfYm51bTsJICAgIC8qIGFkanVzdCBudW1iZXIgKi8KKyAgICBucC0+bnRfbmV3X2JudW0gPSBuZXdfYm51bTsKKworICAgIG1mX3JlbV9oYXNoKG1mcCwgaHApOwkJICAgIC8qIHJlbW92ZSBmcm9tIG9sZCBoYXNoIGxpc3QgKi8KKyAgICBocC0+YmhfYm51bSA9IG5ld19ibnVtOworICAgIG1mX2luc19oYXNoKG1mcCwgaHApOwkJICAgIC8qIGluc2VydCBpbiBuZXcgaGFzaCBsaXN0ICovCisKKyAgICBoYXNoID0gTUVNSEFTSChucC0+bnRfb2xkX2JudW0pOwkgICAgLyogaW5zZXJ0IGluIHRyYW5zIGxpc3QgKi8KKyAgICBucC0+bnRfbmV4dCA9IG1mcC0+bWZfdHJhbnNbaGFzaF07CisgICAgbWZwLT5tZl90cmFuc1toYXNoXSA9IG5wOworICAgIGlmIChucC0+bnRfbmV4dCAhPSBOVUxMKQorCW5wLT5udF9uZXh0LT5udF9wcmV2ID0gbnA7CisgICAgbnAtPm50X3ByZXYgPSBOVUxMOworCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogTG9va3VwIGEgdHJhbmxhdGlvbiBmcm9tIHRoZSB0cmFucyBsaXN0cyBhbmQgZGVsZXRlIHRoZSBlbnRyeQorICoKKyAqIFJldHVybiB0aGUgcG9zaXRpdmUgbmV3IG51bWJlciB3aGVuIGZvdW5kLCB0aGUgb2xkIG51bWJlciB3aGVuIG5vdCBmb3VuZAorICovCisgICAgYmxvY2tucl9UCittZl90cmFuc19kZWwobWZwLCBvbGRfbnIpCisgICAgbWVtZmlsZV9UCSptZnA7CisgICAgYmxvY2tucl9UCW9sZF9ucjsKK3sKKyAgICBpbnQJCWhhc2g7CisgICAgTlJfVFJBTlMJKm5wOworICAgIGJsb2NrbnJfVAluZXdfYm51bTsKKworICAgIGhhc2ggPSBNRU1IQVNIKG9sZF9ucik7CisgICAgZm9yIChucCA9IG1mcC0+bWZfdHJhbnNbaGFzaF07IG5wICE9IE5VTEw7IG5wID0gbnAtPm50X25leHQpCisJaWYgKG5wLT5udF9vbGRfYm51bSA9PSBvbGRfbnIpCisJICAgIGJyZWFrOworICAgIGlmIChucCA9PSBOVUxMKQkJLyogbm90IGZvdW5kICovCisJcmV0dXJuIG9sZF9ucjsKKworICAgIG1mcC0+bWZfbmVnX2NvdW50LS07CisgICAgbmV3X2JudW0gPSBucC0+bnRfbmV3X2JudW07CisgICAgaWYgKG5wLT5udF9wcmV2ICE9IE5VTEwpCQkvKiByZW1vdmUgZW50cnkgZnJvbSB0aGUgdHJhbnMgbGlzdCAqLworCW5wLT5udF9wcmV2LT5udF9uZXh0ID0gbnAtPm50X25leHQ7CisgICAgZWxzZQorCW1mcC0+bWZfdHJhbnNbaGFzaF0gPSBucC0+bnRfbmV4dDsKKyAgICBpZiAobnAtPm50X25leHQgIT0gTlVMTCkKKwlucC0+bnRfbmV4dC0+bnRfcHJldiA9IG5wLT5udF9wcmV2OworICAgIHZpbV9mcmVlKG5wKTsKKworICAgIHJldHVybiBuZXdfYm51bTsKK30KKworLyoKKyAqIFNldCBtZnAtPm1mX2ZmbmFtZSBhY2NvcmRpbmcgdG8gbWZwLT5tZl9mbmFtZSBhbmQgc29tZSBvdGhlciB0aGluZ3MuCisgKiBPbmx5IGNhbGxlZCB3aGVuIGNyZWF0aW5nIG9yIHJlbmFtaW5nIHRoZSBzd2FwZmlsZS4JRWl0aGVyIHdheSBpdCdzIGEgbmV3CisgKiBuYW1lIHNvIHdlIG11c3Qgd29yayBvdXQgdGhlIGZ1bGwgcGF0aCBuYW1lLgorICovCisgICAgdm9pZAorbWZfc2V0X2ZmbmFtZShtZnApCisgICAgbWVtZmlsZV9UCSptZnA7Cit7CisgICAgbWZwLT5tZl9mZm5hbWUgPSBGdWxsTmFtZV9zYXZlKG1mcC0+bWZfZm5hbWUsIEZBTFNFKTsKK30KKworLyoKKyAqIE1ha2UgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdXNlZCBmb3IgdGhlIG1lbWZpbGUgYSBmdWxsIHBhdGguCisgKiBVc2VkIGJlZm9yZSBkb2luZyBhIDpjZAorICovCisgICAgdm9pZAorbWZfZnVsbG5hbWUobWZwKQorICAgIG1lbWZpbGVfVAkqbWZwOworeworICAgIGlmIChtZnAgIT0gTlVMTCAmJiBtZnAtPm1mX2ZuYW1lICE9IE5VTEwgJiYgbWZwLT5tZl9mZm5hbWUgIT0gTlVMTCkKKyAgICB7CisJdmltX2ZyZWUobWZwLT5tZl9mbmFtZSk7CisJbWZwLT5tZl9mbmFtZSA9IG1mcC0+bWZfZmZuYW1lOworCW1mcC0+bWZfZmZuYW1lID0gTlVMTDsKKyAgICB9Cit9CisKKy8qCisgKiByZXR1cm4gVFJVRSBpZiB0aGVyZSBhcmUgYW55IHRyYW5zbGF0aW9ucyBwZW5kaW5nIGZvciAnbWZwJworICovCisgICAgaW50CittZl9uZWVkX3RyYW5zKG1mcCkKKyAgICBtZW1maWxlX1QJKm1mcDsKK3sKKyAgICByZXR1cm4gKG1mcC0+bWZfZm5hbWUgIT0gTlVMTCAmJiBtZnAtPm1mX25lZ19jb3VudCA+IDApOworfQorCisvKgorICogT3BlbiBhIHN3YXAgZmlsZSBmb3IgYSBtZW1maWxlLgorICogVGhlICJmbmFtZSIgbXVzdCBiZSBpbiBhbGxvY2F0ZWQgbWVtb3J5LCBhbmQgaXMgY29uc3VtZWQgKGFsc28gd2hlbiBhbgorICogZXJyb3Igb2NjdXJzKS4KKyAqLworICAgIHN0YXRpYyB2b2lkCittZl9kb19vcGVuKG1mcCwgZm5hbWUsIGZsYWdzKQorICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGNoYXJfdQkqZm5hbWU7CisgICAgaW50CQlmbGFnczsJCS8qIGZsYWdzIGZvciBvcGVuKCkgKi8KK3sKKyNpZmRlZiBIQVZFX0xTVEFUCisgICAgc3RydWN0IHN0YXQgc2I7CisjZW5kaWYKKworICAgIG1mcC0+bWZfZm5hbWUgPSBmbmFtZTsKKworICAgIC8qCisgICAgICogR2V0IHRoZSBmdWxsIHBhdGggbmFtZSBiZWZvcmUgdGhlIG9wZW4sIGJlY2F1c2UgdGhpcyBpcworICAgICAqIG5vdCBwb3NzaWJsZSBhZnRlciB0aGUgb3BlbiBvbiB0aGUgQW1pZ2EuCisgICAgICogZm5hbWUgY2Fubm90IGJlIE5hbWVCdWZmLCBiZWNhdXNlIGl0IG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZC4KKyAgICAgKi8KKyAgICBtZl9zZXRfZmZuYW1lKG1mcCk7CisjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChNU1dJTikgfHwgZGVmaW5lZChSSVNDT1MpCisgICAgLyoKKyAgICAgKiBBICI6IWNkIGU6eHh4IiBtYXkgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgd2l0aG91dCB1cyBrbm93bmluZywgdXNlIHRoZQorICAgICAqIGZ1bGwgcGF0aG5hbWUgYWx3YXlzLiAgQ2FyZWZ1bDogVGhpcyBmcmVlcyBmbmFtZSEKKyAgICAgKi8KKyAgICBtZl9mdWxsbmFtZShtZnApOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xTVEFUCisgICAgLyoKKyAgICAgKiBFeHRyYSBzZWN1cml0eSBjaGVjazogV2hlbiBjcmVhdGluZyBhIHN3YXAgZmlsZSBpdCByZWFsbHkgc2hvdWxkbid0CisgICAgICogZXhpc3QgeWV0LiAgSWYgdGhlcmUgaXMgYSBzeW1ib2xpYyBsaW5rLCB0aGlzIGlzIG1vc3QgbGlrZWx5IGFuIGF0dGFjay4KKyAgICAgKi8KKyAgICBpZiAoKGZsYWdzICYgT19DUkVBVCkgJiYgbWNoX2xzdGF0KChjaGFyICopbWZwLT5tZl9mbmFtZSwgJnNiKSA+PSAwKQorICAgIHsKKwltZnAtPm1mX2ZkID0gLTE7CisJRU1TRyhfKCJFMzAwOiBTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMgKHN5bWxpbmsgYXR0YWNrPykiKSk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwkvKgorCSAqIHRyeSB0byBvcGVuIHRoZSBmaWxlCisJICovCisJZmxhZ3MgfD0gT19FWFRSQTsKKyNpZmRlZiBXSU4zMgorCS8qIFByZXZlbnQgaGFuZGxlIGluaGVyaXRhbmNlIHRoYXQgY2F1c2UgcHJvYmxlbXMgd2l0aCBDc2NvcGUKKwkgKiAoc3dhcCBmaWxlIG1heSBub3QgYmUgZGVsZXRlZCBpZiBjc2NvcGUgY29ubmVjdGlvbiB3YXMgb3BlbiBhZnRlcgorCSAqIHRoZSBmaWxlKSAqLworCWZsYWdzIHw9IE9fTk9JTkhFUklUOworI2VuZGlmCisJbWZwLT5tZl9mZCA9IG1jaF9vcGVuX3J3KChjaGFyICopbWZwLT5tZl9mbmFtZSwgZmxhZ3MpOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlIGZpbGUgY2Fubm90IGJlIG9wZW5lZCwgdXNlIG1lbW9yeSBvbmx5CisgICAgICovCisgICAgaWYgKG1mcC0+bWZfZmQgPCAwKQorICAgIHsKKwl2aW1fZnJlZShtZnAtPm1mX2ZuYW1lKTsKKwl2aW1fZnJlZShtZnAtPm1mX2ZmbmFtZSk7CisJbWZwLT5tZl9mbmFtZSA9IE5VTEw7CisJbWZwLT5tZl9mZm5hbWUgPSBOVUxMOworICAgIH0KKyAgICBlbHNlCisJbWNoX2hpZGUobWZwLT5tZl9mbmFtZSk7ICAgIC8qIHRyeSBzZXR0aW5nIHRoZSAnaGlkZGVuJyBmbGFnICovCit9CmRpZmYgLS1naXQgYS9zcmMvbWVtbGluZS5jIGIvc3JjL21lbWxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzE4NjYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21lbWxpbmUuYwpAQCAtMCwwICsxLDQzNzggQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyogZm9yIGRlYnVnZ2luZyAqLworLyogI2RlZmluZSBDSEVDSyhjLCBzKQlpZiAoYykgRU1TRyhzKSAqLworI2RlZmluZSBDSEVDSyhjLCBzKQorCisvKgorICogbWVtbGluZS5jOiBDb250YWlucyB0aGUgZnVuY3Rpb25zIGZvciBhcHBlbmRpbmcsIGRlbGV0aW5nIGFuZCBjaGFuZ2luZyB0aGUKKyAqIHRleHQgbGluZXMuIFRoZSBtZW1maWxlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gaW4gYmxvY2tzCisgKiBvZiBtZW1vcnksIGJhY2tlZCB1cCBieSBhIGZpbGUuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGluZm9ybWF0aW9uIGlzIGEgdHJlZS4KKyAqIFRoZSByb290IG9mIHRoZSB0cmVlIGlzIGEgcG9pbnRlciBibG9jay4gVGhlIGxlYXZlcyBvZiB0aGUgdHJlZSBhcmUgZGF0YQorICogYmxvY2tzLiBJbiBiZXR3ZWVuIG1heSBiZSBzZXZlcmFsIGxheWVycyBvZiBwb2ludGVyIGJsb2NrcywgZm9ybWluZyBicmFuY2hlcy4KKyAqCisgKiBUaHJlZSB0eXBlcyBvZiBibG9ja3MgYXJlIHVzZWQ6CisgKiAtIEJsb2NrIG5yIDAgY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIHJlY292ZXJ5CisgKiAtIFBvaW50ZXIgYmxvY2tzIGNvbnRhaW4gbGlzdCBvZiBwb2ludGVycyB0byBvdGhlciBibG9ja3MuCisgKiAtIERhdGEgYmxvY2tzIGNvbnRhaW4gdGhlIGFjdHVhbCB0ZXh0LgorICoKKyAqIEJsb2NrIG5yIDAgY29udGFpbnMgdGhlIGJsb2NrMCBzdHJ1Y3R1cmUgKHNlZSBiZWxvdykuCisgKgorICogQmxvY2sgbnIgMSBpcyB0aGUgZmlyc3QgcG9pbnRlciBibG9jay4gSXQgaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKiBPdGhlciBwb2ludGVyIGJsb2NrcyBhcmUgYnJhbmNoZXMuCisgKgorICogIElmIGEgbGluZSBpcyB0b28gYmlnIHRvIGZpdCBpbiBhIHNpbmdsZSBwYWdlLCB0aGUgYmxvY2sgY29udGFpbmluZyB0aGF0CisgKiAgbGluZSBpcyBtYWRlIGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgbGluZS4gSXQgbWF5IHNwYW4gc2V2ZXJhbCBwYWdlcy4KKyAqICBPdGhlcndpc2UgYWxsIGJsb2NrcyBhcmUgb25lIHBhZ2UuCisgKgorICogIEEgZGF0YSBibG9jayB0aGF0IHdhcyBmaWxsZWQgd2hlbiBzdGFydGluZyB0byBlZGl0IGEgZmlsZSBhbmQgd2FzIG5vdAorICogIGNoYW5nZWQgc2luY2UgdGhlbiwgY2FuIGhhdmUgYSBuZWdhdGl2ZSBibG9jayBudW1iZXIuIFRoaXMgbWVhbnMgdGhhdCBpdAorICogIGhhcyBub3QgeWV0IGJlZW4gYXNzaWduZWQgYSBwbGFjZSBpbiB0aGUgZmlsZS4gV2hlbiByZWNvdmVyaW5nLCB0aGUgbGluZXMKKyAqICBpbiB0aGlzIGRhdGEgYmxvY2sgY2FuIGJlIHJlYWQgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZS4gV2hlbiB0aGUgYmxvY2sgaXMKKyAqICBjaGFuZ2VkIChsaW5lcyBhcHBlbmRlZC9kZWxldGVkL2NoYW5nZWQpIG9yIHdoZW4gaXQgaXMgZmx1c2hlZCBpdCBnZXRzIGEKKyAqICBwb3NpdGl2ZSBudW1iZXIuIFVzZSBtZl90cmFuc19kZWwoKSB0byBnZXQgdGhlIG5ldyBudW1iZXIsIGJlZm9yZSBjYWxsaW5nCisgKiAgbWZfZ2V0KCkuCisgKi8KKworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQorIyBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmZGVmIEhBVkVfRkNOVExfSAorIyBpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisjaWZuZGVmIFVOSVgJCS8qIGl0J3MgaW4gb3NfdW5peC5oIGZvciBVbml4ICovCisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorCisjaWZkZWYgU0FTQworIyBpbmNsdWRlIDxwcm90by9kb3MuaD4JICAgIC8qIGZvciBPcGVuKCkgYW5kIENsb3NlKCkgKi8KKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBibG9jazAJCVpFUk9fQkw7ICAgIC8qIGNvbnRlbnRzIG9mIHRoZSBmaXJzdCBibG9jayAqLwordHlwZWRlZiBzdHJ1Y3QgcG9pbnRlcl9ibG9jawlQVFJfQkw7CSAgICAvKiBjb250ZW50cyBvZiBhIHBvaW50ZXIgYmxvY2sgKi8KK3R5cGVkZWYgc3RydWN0IGRhdGFfYmxvY2sJREFUQV9CTDsgICAgLyogY29udGVudHMgb2YgYSBkYXRhIGJsb2NrICovCit0eXBlZGVmIHN0cnVjdCBwb2ludGVyX2VudHJ5CVBUUl9FTjsJICAgIC8qIGJsb2NrL2xpbmUtY291bnQgcGFpciAqLworCisjZGVmaW5lIERBVEFfSUQJICAgICgoJ2QnIDw8IDgpICsgJ2EnKQkgICAgLyogZGF0YSBibG9jayBpZCAqLworI2RlZmluZSBQVFJfSUQJICAgICgoJ3AnIDw8IDgpICsgJ3QnKQkgICAgLyogcG9pbnRlciBibG9jayBpZCAqLworI2RlZmluZSBCTE9DSzBfSUQwICAnYicJCQkgICAgLyogYmxvY2sgMCBpZCAwICovCisjZGVmaW5lIEJMT0NLMF9JRDEgICcwJwkJCSAgICAvKiBibG9jayAwIGlkIDEgKi8KKworLyoKKyAqIHBvaW50ZXIgdG8gYSBibG9jaywgdXNlZCBpbiBhIHBvaW50ZXIgYmxvY2sKKyAqLworc3RydWN0IHBvaW50ZXJfZW50cnkKK3sKKyAgICBibG9ja25yX1QJcGVfYm51bTsJLyogYmxvY2sgbnVtYmVyICovCisgICAgbGluZW5yX1QJcGVfbGluZV9jb3VudDsJLyogbnVtYmVyIG9mIGxpbmVzIGluIHRoaXMgYnJhbmNoICovCisgICAgbGluZW5yX1QJcGVfb2xkX2xudW07CS8qIGxudW0gZm9yIHRoaXMgYmxvY2sgKGZvciByZWNvdmVyeSkgKi8KKyAgICBpbnQJCXBlX3BhZ2VfY291bnQ7CS8qIG51bWJlciBvZiBwYWdlcyBpbiBibG9jayBwZV9ibnVtICovCit9OworCisvKgorICogQSBwb2ludGVyIGJsb2NrIGNvbnRhaW5zIGEgbGlzdCBvZiBicmFuY2hlcyBpbiB0aGUgdHJlZS4KKyAqLworc3RydWN0IHBvaW50ZXJfYmxvY2sKK3sKKyAgICBzaG9ydF91CXBiX2lkOwkJLyogSUQgZm9yIHBvaW50ZXIgYmxvY2s6IFBUUl9JRCAqLworICAgIHNob3J0X3UJcGJfY291bnQ7CS8qIG51bWJlciBvZiBwb2ludGVyIGluIHRoaXMgYmxvY2sgKi8KKyAgICBzaG9ydF91CXBiX2NvdW50X21heDsJLyogbWF4aW11bSB2YWx1ZSBmb3IgcGJfY291bnQgKi8KKyAgICBQVFJfRU4JcGJfcG9pbnRlclsxXTsJLyogbGlzdCBvZiBwb2ludGVycyB0byBibG9ja3MgKGFjdHVhbGx5IGxvbmdlcikKKwkJCQkgKiBmb2xsb3dlZCBieSBlbXB0eSBzcGFjZSB1bnRpbCBlbmQgb2YgcGFnZSAqLworfTsKKworLyoKKyAqIEEgZGF0YSBibG9jayBpcyBhIGxlYWYgaW4gdGhlIHRyZWUuCisgKgorICogVGhlIHRleHQgb2YgdGhlIGxpbmVzIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBUaGUgdGV4dCBvZiB0aGUgZmlyc3QgbGluZQorICogaW4gdGhlIGJsb2NrIGlzIHB1dCBhdCB0aGUgZW5kLCB0aGUgdGV4dCBvZiB0aGUgc2Vjb25kIGxpbmUgaW4gZnJvbnQgb2YgaXQsCisgKiBldGMuIFRodXMgdGhlIG9yZGVyIG9mIHRoZSBsaW5lcyBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIGxpbmUgbnVtYmVyLgorICovCitzdHJ1Y3QgZGF0YV9ibG9jaworeworICAgIHNob3J0X3UJZGJfaWQ7CQkvKiBJRCBmb3IgZGF0YSBibG9jazogREFUQV9JRCAqLworICAgIHVuc2lnbmVkCWRiX2ZyZWU7CS8qIGZyZWUgc3BhY2UgYXZhaWxhYmxlICovCisgICAgdW5zaWduZWQJZGJfdHh0X3N0YXJ0OwkvKiBieXRlIHdoZXJlIHRleHQgc3RhcnRzICovCisgICAgdW5zaWduZWQJZGJfdHh0X2VuZDsJLyogYnl0ZSBqdXN0IGFmdGVyIGRhdGEgYmxvY2sgKi8KKyAgICBsaW5lbnJfVAlkYl9saW5lX2NvdW50OwkvKiBudW1iZXIgb2YgbGluZXMgaW4gdGhpcyBibG9jayAqLworICAgIHVuc2lnbmVkCWRiX2luZGV4WzFdOwkvKiBpbmRleCBmb3Igc3RhcnQgb2YgbGluZSAoYWN0dWFsbHkgYmlnZ2VyKQorCQkJCSAqIGZvbGxvd2VkIGJ5IGVtcHR5IHNwYWNlIHVwdG8gZGJfdHh0X3N0YXJ0CisJCQkJICogZm9sbG93ZWQgYnkgdGhlIHRleHQgaW4gdGhlIGxpbmVzIHVudGlsCisJCQkJICogZW5kIG9mIHBhZ2UgKi8KK307CisKKy8qCisgKiBUaGUgbG93IGJpdHMgb2YgZGJfaW5kZXggaG9sZCB0aGUgYWN0dWFsIGluZGV4LiBUaGUgdG9wbW9zdCBiaXQgaXMKKyAqIHVzZWQgZm9yIHRoZSBnbG9iYWwgY29tbWFuZCB0byBiZSBhYmxlIHRvIG1hcmsgYSBsaW5lLgorICogVGhpcyBtZXRob2QgaXMgbm90IGNsZWFuLCBidXQgb3RoZXJ3aXNlIHRoZXJlIHdvdWxkIGJlIGF0IGxlYXN0IG9uZSBleHRyYQorICogYnl0ZSB1c2VkIGZvciBlYWNoIGxpbmUuCisgKiBUaGUgbWFyayBoYXMgdG8gYmUgaW4gdGhpcyBwbGFjZSB0byBrZWVwIGl0IHdpdGggdGhlIGNvcnJlY3QgbGluZSB3aGVuIG90aGVyCisgKiBsaW5lcyBhcmUgaW5zZXJ0ZWQgb3IgZGVsZXRlZC4KKyAqLworI2RlZmluZSBEQl9NQVJLRUQJKCh1bnNpZ25lZCkxIDw8ICgoc2l6ZW9mKHVuc2lnbmVkKSAqIDgpIC0gMSkpCisjZGVmaW5lIERCX0lOREVYX01BU0sJKH5EQl9NQVJLRUQpCisKKyNkZWZpbmUgSU5ERVhfU0laRSAgKHNpemVvZih1bnNpZ25lZCkpCSAgICAvKiBzaXplIG9mIG9uZSBkYl9pbmRleCBlbnRyeSAqLworI2RlZmluZSBIRUFERVJfU0laRSAoc2l6ZW9mKERBVEFfQkwpIC0gSU5ERVhfU0laRSkgIC8qIHNpemUgb2YgZGF0YSBibG9jayBoZWFkZXIgKi8KKworI2RlZmluZSBCMF9GTkFNRV9TSVpFCTkwMAorI2RlZmluZSBCMF9VTkFNRV9TSVpFCTQwCisjZGVmaW5lIEIwX0hOQU1FX1NJWkUJNDAKKy8qCisgKiBSZXN0cmljdCB0aGUgbnVtYmVycyB0byAzMiBiaXRzLCBvdGhlcndpc2UgbW9zdCBjb21waWxlcnMgd2lsbCBjb21wbGFpbi4KKyAqIFRoaXMgd29uJ3QgZGV0ZWN0IGEgNjQgYml0IG1hY2hpbmUgdGhhdCBvbmx5IHN3YXBzIGEgYnl0ZSBpbiB0aGUgdG9wIDMyCisgKiBiaXRzLCBidXQgdGhhdCBpcyBjcmF6eSBhbnl3YXkuCisgKi8KKyNkZWZpbmUgQjBfTUFHSUNfTE9ORwkweDMwMzEzMjMzTAorI2RlZmluZSBCMF9NQUdJQ19JTlQJMHgyMDIxMjIyM0wKKyNkZWZpbmUgQjBfTUFHSUNfU0hPUlQJMHgxMDExMTIxM0wKKyNkZWZpbmUgQjBfTUFHSUNfQ0hBUgkweDU1CisKKy8qCisgKiBCbG9jayB6ZXJvIGhvbGRzIGFsbCBpbmZvIGFib3V0IHRoZSBzd2FwIGZpbGUuCisgKgorICogTk9URTogREVGSU5JVElPTiBPRiBCTE9DSyAwIFNIT1VMRCBOT1QgQ0hBTkdFISBJdCB3b3VsZCBtYWtlIGFsbCBleGlzdGluZworICogc3dhcCBmaWxlcyB1bnVzYWJsZSEKKyAqCisgKiBJZiBzaXplIG9mIGJsb2NrMCBjaGFuZ2VzIGFueXdheSwgYWRqdXN0IE1JTl9TV0FQX1BBR0VfU0laRSBpbiB2aW0uaCEhCisgKgorICogVGhpcyBibG9jayBpcyBidWlsdCB1cCBvZiBzaW5nbGUgYnl0ZXMsIHRvIG1ha2UgaXQgcG9ydGFibGUgYWNjcm9zCisgKiBkaWZmZXJlbnQgbWFjaGluZXMuIGIwX21hZ2ljXyogaXMgdXNlZCB0byBjaGVjayB0aGUgYnl0ZSBvcmRlciBhbmQgc2l6ZSBvZgorICogdmFyaWFibGVzLCBiZWNhdXNlIHRoZSByZXN0IG9mIHRoZSBzd2FwIGZpbGUgaXMgbm90IHBvcnRhYmxlLgorICovCitzdHJ1Y3QgYmxvY2swCit7CisgICAgY2hhcl91CWIwX2lkWzJdOwkvKiBpZCBmb3IgYmxvY2sgMDogQkxPQ0swX0lEMCBhbmQgQkxPQ0swX0lEMSAqLworICAgIGNoYXJfdQliMF92ZXJzaW9uWzEwXTsJLyogVmltIHZlcnNpb24gc3RyaW5nICovCisgICAgY2hhcl91CWIwX3BhZ2Vfc2l6ZVs0XTsvKiBudW1iZXIgb2YgYnl0ZXMgcGVyIHBhZ2UgKi8KKyAgICBjaGFyX3UJYjBfbXRpbWVbNF07CS8qIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgZmlsZSAqLworICAgIGNoYXJfdQliMF9pbm9bNF07CS8qIGlub2RlIG9mIGIwX2ZuYW1lICovCisgICAgY2hhcl91CWIwX3BpZFs0XTsJLyogcHJvY2VzcyBpZCBvZiBjcmVhdG9yIChvciAwKSAqLworICAgIGNoYXJfdQliMF91bmFtZVtCMF9VTkFNRV9TSVpFXTsgLyogbmFtZSBvZiB1c2VyICh1aWQgaWYgbm8gbmFtZSkgKi8KKyAgICBjaGFyX3UJYjBfaG5hbWVbQjBfSE5BTUVfU0laRV07IC8qIGhvc3QgbmFtZSAoaWYgaXQgaGFzIGEgbmFtZSkgKi8KKyAgICBjaGFyX3UJYjBfZm5hbWVbQjBfRk5BTUVfU0laRV07IC8qIG5hbWUgb2YgZmlsZSBiZWluZyBlZGl0ZWQgKi8KKyAgICBsb25nCWIwX21hZ2ljX2xvbmc7CS8qIGNoZWNrIGZvciBieXRlIG9yZGVyIG9mIGxvbmcgKi8KKyAgICBpbnQJCWIwX21hZ2ljX2ludDsJLyogY2hlY2sgZm9yIGJ5dGUgb3JkZXIgb2YgaW50ICovCisgICAgc2hvcnQJYjBfbWFnaWNfc2hvcnQ7CS8qIGNoZWNrIGZvciBieXRlIG9yZGVyIG9mIHNob3J0ICovCisgICAgY2hhcl91CWIwX21hZ2ljX2NoYXI7CS8qIGNoZWNrIGZvciBsYXN0IGNoYXIgKi8KK307CisjZGVmaW5lICAgYjBfZGlydHkgYjBfZm5hbWVbQjBfRk5BTUVfU0laRS0xXQorCisjZGVmaW5lIFNUQUNLX0lOQ1IJNQkvKiBuciBvZiBlbnRyaWVzIGFkZGVkIHRvIG1sX3N0YWNrIGF0IGEgdGltZSAqLworCisvKgorICogVGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBmaXJzdCBtYXJrIG1heSBiZSBpcyByZW1lbWJlcmVkLgorICogSWYgaXQgaXMgMCB0aGVyZSBhcmUgbm8gbWFya3MgYXQgYWxsLgorICogKGFsd2F5cyB1c2VkIGZvciB0aGUgY3VycmVudCBidWZmZXIgb25seSwgbm8gYnVmZmVyIGNoYW5nZSBwb3NzaWJsZSB3aGlsZQorICogZXhlY3V0aW5nIGEgZ2xvYmFsIGNvbW1hbmQpLgorICovCitzdGF0aWMgbGluZW5yX1QJbG93ZXN0X21hcmtlZCA9IDA7CisKKy8qCisgKiBhcmd1bWVudHMgZm9yIG1sX2ZpbmRfbGluZSgpCisgKi8KKyNkZWZpbmUgTUxfREVMRVRFCTB4MTEJICAgIC8qIGRlbGV0ZSBsaW5lICovCisjZGVmaW5lIE1MX0lOU0VSVAkweDEyCSAgICAvKiBpbnNlcnQgbGluZSAqLworI2RlZmluZSBNTF9GSU5ECQkweDEzCSAgICAvKiBqdXN0IGZpbmQgdGhlIGxpbmUgKi8KKyNkZWZpbmUgTUxfRkxVU0gJMHgwMgkgICAgLyogZmx1c2ggbG9ja2VkIGJsb2NrICovCisjZGVmaW5lIE1MX1NJTVBMRSh4KQkoeCAmIDB4MTApICAvKiBERUwsIElOUyBvciBGSU5EICovCisKK3N0YXRpYyB2b2lkIHNldF9iMF9mbmFtZSBfX0FSR1MoKFpFUk9fQkwgKiwgYnVmX1QgKmJ1ZikpOworc3RhdGljIHRpbWVfdCBzd2FwZmlsZV9pbmZvIF9fQVJHUygoY2hhcl91ICopKTsKK3N0YXRpYyBpbnQgcmVjb3ZfZmlsZV9uYW1lcyBfX0FSR1MoKGNoYXJfdSAqKiwgY2hhcl91ICosIGludCBwcmVwZW5kX2RvdCkpOworc3RhdGljIGludCBtbF9hcHBlbmRfaW50IF9fQVJHUygoYnVmX1QgKiwgbGluZW5yX1QsIGNoYXJfdSAqLCBjb2xucl9ULCBpbnQsIGludCkpOworc3RhdGljIGludCBtbF9kZWxldGVfaW50IF9fQVJHUygoYnVmX1QgKiwgbGluZW5yX1QsIGludCkpOworc3RhdGljIGNoYXJfdSAqZmluZHN3YXBuYW1lIF9fQVJHUygoYnVmX1QgKiwgY2hhcl91ICoqLCBjaGFyX3UgKikpOworc3RhdGljIHZvaWQgbWxfZmx1c2hfbGluZSBfX0FSR1MoKGJ1Zl9UICopKTsKK3N0YXRpYyBiaGRyX1QgKm1sX25ld19kYXRhIF9fQVJHUygobWVtZmlsZV9UICosIGludCwgaW50KSk7CitzdGF0aWMgYmhkcl9UICptbF9uZXdfcHRyIF9fQVJHUygobWVtZmlsZV9UICopKTsKK3N0YXRpYyBiaGRyX1QgKm1sX2ZpbmRfbGluZSBfX0FSR1MoKGJ1Zl9UICosIGxpbmVucl9ULCBpbnQpKTsKK3N0YXRpYyBpbnQgbWxfYWRkX3N0YWNrIF9fQVJHUygoYnVmX1QgKikpOworc3RhdGljIGNoYXJfdSAqbWFrZXN3YXBuYW1lIF9fQVJHUygoYnVmX1QgKiwgY2hhcl91ICopKTsKK3N0YXRpYyB2b2lkIG1sX2xpbmVhZGQgX19BUkdTKChidWZfVCAqLCBpbnQpKTsKK3N0YXRpYyBpbnQgYjBfbWFnaWNfd3JvbmcgX19BUkdTKChaRVJPX0JMICopKTsKKyNpZmRlZiBDSEVDS19JTk9ERQorc3RhdGljIGludCBmbmFtZWNtcF9pbm8gX19BUkdTKChjaGFyX3UgKiwgY2hhcl91ICosIGxvbmcpKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgbG9uZ190b19jaGFyIF9fQVJHUygobG9uZywgY2hhcl91ICopKTsKK3N0YXRpYyBsb25nIGNoYXJfdG9fbG9uZyBfX0FSR1MoKGNoYXJfdSAqKSk7CisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFdJTjMyNjQpCitzdGF0aWMgY2hhcl91ICptYWtlX3BlcmNlbnRfc3duYW1lIF9fQVJHUygoY2hhcl91ICpkaXIsIGNoYXJfdSAqbmFtZSkpOworI2VuZGlmCisjaWZkZWYgRkVBVF9CWVRFT0ZGCitzdGF0aWMgdm9pZCBtbF91cGRhdGVjaHVuayBfX0FSR1MoKGJ1Zl9UICpidWYsIGxvbmcgbGluZSwgbG9uZyBsZW4sIGludCB1cGR0eXBlKSk7CisjZW5kaWYKKworLyoKKyAqIG9wZW4gYSBuZXcgbWVtbGluZSBmb3IgJ2N1cmJ1ZicKKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK21sX29wZW4oKQoreworICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGJoZHJfVAkqaHAgPSBOVUxMOworICAgIFpFUk9fQkwJKmIwcDsKKyAgICBQVFJfQkwJKnBwOworICAgIERBVEFfQkwJKmRwOworCisvKgorICogaW5pdCBmaWVsZHMgaW4gbWVtbGluZSBzdHJ1Y3QKKyAqLworICAgIGN1cmJ1Zi0+Yl9tbC5tbF9zdGFja19zaXplID0gMDsJLyogbm8gc3RhY2sgeWV0ICovCisgICAgY3VyYnVmLT5iX21sLm1sX3N0YWNrID0gTlVMTDsJLyogbm8gc3RhY2sgeWV0ICovCisgICAgY3VyYnVmLT5iX21sLm1sX3N0YWNrX3RvcCA9IDA7CS8qIG5vdGhpbmcgaW4gdGhlIHN0YWNrICovCisgICAgY3VyYnVmLT5iX21sLm1sX2xvY2tlZCA9IE5VTEw7CS8qIG5vIGNhY2hlZCBibG9jayAqLworICAgIGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2xudW0gPSAwOwkvKiBubyBjYWNoZWQgbGluZSAqLworI2lmZGVmIEZFQVRfQllURU9GRgorICAgIGN1cmJ1Zi0+Yl9tbC5tbF9jaHVua3NpemUgPSBOVUxMOworI2VuZGlmCisKKy8qCisgKiBXaGVuICd1cGRhdGVjb3VudCcgaXMgbm9uLXplcm8sIGZsYWcgdGhhdCBhIHN3YXAgZmlsZSBtYXkgYmUgb3BlbmVkIGxhdGVyLgorICovCisgICAgaWYgKHBfdWMgJiYgY3VyYnVmLT5iX3Bfc3dmKQorCWN1cmJ1Zi0+Yl9tYXlfc3dhcCA9IFRSVUU7CisgICAgZWxzZQorCWN1cmJ1Zi0+Yl9tYXlfc3dhcCA9IEZBTFNFOworCisvKgorICogT3BlbiB0aGUgbWVtZmlsZS4gIE5vIHN3YXAgZmlsZSBpcyBjcmVhdGVkIHlldC4KKyAqLworICAgIG1mcCA9IG1mX29wZW4oTlVMTCwgMCk7CisgICAgaWYgKG1mcCA9PSBOVUxMKQorCWdvdG8gZXJyb3I7CisKKyAgICBjdXJidWYtPmJfbWwubWxfbWZwID0gbWZwOworICAgIGN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyA9IE1MX0VNUFRZOworICAgIGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ID0gMTsKKworI2lmIGRlZmluZWQoTVNET1MpICYmICFkZWZpbmVkKERKR1BQKQorICAgIC8qIGZvciAxNiBiaXQgTVMtRE9TIGNyZWF0ZSBhIHN3YXBmaWxlIG5vdywgYmVjYXVzZSB3ZSBydW4gb3V0IG9mCisgICAgICogbWVtb3J5IHZlcnkgcXVpY2tseSAqLworICAgIGlmIChwX3VjICE9IDApCisJbWxfb3Blbl9maWxlKGN1cmJ1Zik7CisjZW5kaWYKKworLyoKKyAqIGZpbGwgYmxvY2swIHN0cnVjdCBhbmQgd3JpdGUgcGFnZSAwCisgKi8KKyAgICBpZiAoKGhwID0gbWZfbmV3KG1mcCwgRkFMU0UsIDEpKSA9PSBOVUxMKQorCWdvdG8gZXJyb3I7CisgICAgaWYgKGhwLT5iaF9ibnVtICE9IDApCisgICAgeworCUVNU0coXygiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIpKTsKKwlnb3RvIGVycm9yOworICAgIH0KKyAgICBiMHAgPSAoWkVST19CTCAqKShocC0+YmhfZGF0YSk7CisKKyAgICBiMHAtPmIwX2lkWzBdID0gQkxPQ0swX0lEMDsKKyAgICBiMHAtPmIwX2lkWzFdID0gQkxPQ0swX0lEMTsKKyAgICBiMHAtPmIwX2RpcnR5ID0gY3VyYnVmLT5iX2NoYW5nZWQgPyAweDU1IDogMDsKKyAgICBiMHAtPmIwX21hZ2ljX2xvbmcgPSAobG9uZylCMF9NQUdJQ19MT05HOworICAgIGIwcC0+YjBfbWFnaWNfaW50ID0gKGludClCMF9NQUdJQ19JTlQ7CisgICAgYjBwLT5iMF9tYWdpY19zaG9ydCA9IChzaG9ydClCMF9NQUdJQ19TSE9SVDsKKyAgICBiMHAtPmIwX21hZ2ljX2NoYXIgPSBCMF9NQUdJQ19DSEFSOworCisgICAgU1RSTkNQWShiMHAtPmIwX3ZlcnNpb24sICJWSU0gIiwgNCk7CisgICAgU1RSTkNQWShiMHAtPmIwX3ZlcnNpb24gKyA0LCBWZXJzaW9uLCA2KTsKKyAgICBzZXRfYjBfZm5hbWUoYjBwLCBjdXJidWYpOworICAgIGxvbmdfdG9fY2hhcigobG9uZyltZnAtPm1mX3BhZ2Vfc2l6ZSwgYjBwLT5iMF9wYWdlX3NpemUpOworICAgICh2b2lkKWdldF91c2VyX25hbWUoYjBwLT5iMF91bmFtZSwgQjBfVU5BTUVfU0laRSk7CisgICAgYjBwLT5iMF91bmFtZVtCMF9VTkFNRV9TSVpFIC0gMV0gPSBOVUw7CisgICAgbWNoX2dldF9ob3N0X25hbWUoYjBwLT5iMF9obmFtZSwgQjBfSE5BTUVfU0laRSk7CisgICAgYjBwLT5iMF9obmFtZVtCMF9ITkFNRV9TSVpFIC0gMV0gPSBOVUw7CisgICAgbG9uZ190b19jaGFyKG1jaF9nZXRfcGlkKCksIGIwcC0+YjBfcGlkKTsKKworICAgIC8qCisgICAgICogQWx3YXlzIHN5bmMgYmxvY2sgbnVtYmVyIDAgdG8gZGlzaywgc28gd2UgY2FuIGNoZWNrIHRoZSBmaWxlIG5hbWUgaW4KKyAgICAgKiB0aGUgc3dhcCBmaWxlIGluIGZpbmRzd2FwbmFtZSgpLiBEb24ndCBkbyB0aGlzIGZvciBoZWxwIGZpbGVzIHRob3VnaC4KKyAgICAgKiBPbmx5IHdvcmtzIHdoZW4gdGhlcmUncyBhIHN3YXBmaWxlLCBvdGhlcndpc2UgaXQncyBkb25lIHdoZW4gdGhlIGZpbGUKKyAgICAgKiBpcyBjcmVhdGVkLgorICAgICAqLworICAgIG1mX3B1dChtZnAsIGhwLCBUUlVFLCBGQUxTRSk7CisgICAgaWYgKCFjdXJidWYtPmJfaGVscCkKKwkodm9pZCltZl9zeW5jKG1mcCwgMCk7CisKKy8qCisgKiBmaWxsIGluIHJvb3QgcG9pbnRlciBibG9jayBhbmQgd3JpdGUgcGFnZSAxCisgKi8KKyAgICBpZiAoKGhwID0gbWxfbmV3X3B0cihtZnApKSA9PSBOVUxMKQorCWdvdG8gZXJyb3I7CisgICAgaWYgKGhwLT5iaF9ibnVtICE9IDEpCisgICAgeworCUVNU0coXygiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAxPyIpKTsKKwlnb3RvIGVycm9yOworICAgIH0KKyAgICBwcCA9IChQVFJfQkwgKikoaHAtPmJoX2RhdGEpOworICAgIHBwLT5wYl9jb3VudCA9IDE7CisgICAgcHAtPnBiX3BvaW50ZXJbMF0ucGVfYm51bSA9IDI7CisgICAgcHAtPnBiX3BvaW50ZXJbMF0ucGVfcGFnZV9jb3VudCA9IDE7CisgICAgcHAtPnBiX3BvaW50ZXJbMF0ucGVfb2xkX2xudW0gPSAxOworICAgIHBwLT5wYl9wb2ludGVyWzBdLnBlX2xpbmVfY291bnQgPSAxOyAgICAvKiBsaW5lIGNvdW50IGFmdGVyIGluc2VydGlvbiAqLworICAgIG1mX3B1dChtZnAsIGhwLCBUUlVFLCBGQUxTRSk7CisKKy8qCisgKiBhbGxvY2F0ZSBmaXJzdCBkYXRhIGJsb2NrIGFuZCBjcmVhdGUgYW4gZW1wdHkgbGluZSAxLgorICovCisgICAgaWYgKChocCA9IG1sX25ld19kYXRhKG1mcCwgRkFMU0UsIDEpKSA9PSBOVUxMKQorCWdvdG8gZXJyb3I7CisgICAgaWYgKGhwLT5iaF9ibnVtICE9IDIpCisgICAgeworCUVNU0coXygiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAyPyIpKTsKKwlnb3RvIGVycm9yOworICAgIH0KKworICAgIGRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworICAgIGRwLT5kYl9pbmRleFswXSA9IC0tZHAtPmRiX3R4dF9zdGFydDsJLyogYXQgZW5kIG9mIGJsb2NrICovCisgICAgZHAtPmRiX2ZyZWUgLT0gMSArIElOREVYX1NJWkU7CisgICAgZHAtPmRiX2xpbmVfY291bnQgPSAxOworICAgICooKGNoYXJfdSAqKWRwICsgZHAtPmRiX3R4dF9zdGFydCkgPSBOVUw7CS8qIGVtdHB5IGxpbmUgKi8KKworICAgIHJldHVybiBPSzsKKworZXJyb3I6CisgICAgaWYgKG1mcCAhPSBOVUxMKQorICAgIHsKKwlpZiAoaHApCisJICAgIG1mX3B1dChtZnAsIGhwLCBGQUxTRSwgRkFMU0UpOworCW1mX2Nsb3NlKG1mcCwgVFJVRSk7CSAgICAvKiB3aWxsIGFsc28gZnJlZShtZnAtPm1mX2ZuYW1lKSAqLworICAgIH0KKyAgICBjdXJidWYtPmJfbWwubWxfbWZwID0gTlVMTDsKKyAgICByZXR1cm4gRkFJTDsKK30KKworLyoKKyAqIG1sX3NldG5hbWUoKSBpcyBjYWxsZWQgd2hlbiB0aGUgZmlsZSBuYW1lIG9mICJidWYiIGhhcyBiZWVuIGNoYW5nZWQuCisgKiBJdCBtYXkgcmVuYW1lIHRoZSBzd2FwIGZpbGUuCisgKi8KKyAgICB2b2lkCittbF9zZXRuYW1lKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIGludAkJc3VjY2VzcyA9IEZBTFNFOworICAgIG1lbWZpbGVfVAkqbWZwOworICAgIGNoYXJfdQkqZm5hbWU7CisgICAgY2hhcl91CSpkaXJwOworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pCisgICAgY2hhcl91CSpwOworI2VuZGlmCisKKyAgICBtZnAgPSBidWYtPmJfbWwubWxfbWZwOworICAgIGlmIChtZnAtPm1mX2ZkIDwgMCkJCSAgICAvKiB0aGVyZSBpcyBubyBzd2FwIGZpbGUgeWV0ICovCisgICAgeworCS8qCisJICogV2hlbiAndXBkYXRlY291bnQnIGlzIDAgYW5kICdub3N3YXBmaWxlJyB0aGVyZSBpcyBubyBzd2FwIGZpbGUuCisJICogRm9yIGhlbHAgZmlsZXMgd2Ugd2lsbCBtYWtlIGEgc3dhcCBmaWxlIG5vdy4KKwkgKi8KKwlpZiAocF91YyAhPSAwKQorCSAgICBtbF9vcGVuX2ZpbGUoYnVmKTsJICAgIC8qIGNyZWF0ZSBhIHN3YXAgZmlsZSAqLworCXJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRyeSBhbGwgZGlyZWN0b3JpZXMgaW4gdGhlICdkaXJlY3RvcnknIG9wdGlvbi4KKyAgICAgKi8KKyAgICBkaXJwID0gcF9kaXI7CisgICAgZm9yICg7OykKKyAgICB7CisJaWYgKCpkaXJwID09IE5VTCkJICAgIC8qIHRyaWVkIGFsbCBkaXJlY3RvcmllcywgZmFpbCAqLworCSAgICBicmVhazsKKwlmbmFtZSA9IGZpbmRzd2FwbmFtZShidWYsICZkaXJwLCBtZnAtPm1mX2ZuYW1lKTsgLyogYWxsb2MncyBmbmFtZSAqLworCWlmIChmbmFtZSA9PSBOVUxMKQkgICAgLyogbm8gZmlsZSBuYW1lIGZvdW5kIGZvciB0aGlzIGRpciAqLworCSAgICBjb250aW51ZTsKKworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pCisJLyoKKwkgKiBTZXQgZnVsbCBwYXRobmFtZSBmb3Igc3dhcCBmaWxlIG5vdywgYmVjYXVzZSBhICI6IWNkIGRpciIgbWF5CisJICogY2hhbmdlIGRpcmVjdG9yeSB3aXRob3V0IHVzIGtub3dpbmcgaXQuCisJICovCisJcCA9IEZ1bGxOYW1lX3NhdmUoZm5hbWUsIEZBTFNFKTsKKwl2aW1fZnJlZShmbmFtZSk7CisJZm5hbWUgPSBwOworCWlmIChmbmFtZSA9PSBOVUxMKQorCSAgICBjb250aW51ZTsKKyNlbmRpZgorCS8qIGlmIHRoZSBmaWxlIG5hbWUgaXMgdGhlIHNhbWUgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyAqLworCWlmIChmbmFtZWNtcChmbmFtZSwgbWZwLT5tZl9mbmFtZSkgPT0gMCkKKwl7CisJICAgIHZpbV9mcmVlKGZuYW1lKTsKKwkgICAgc3VjY2VzcyA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKwkvKiBuZWVkIHRvIGNsb3NlIHRoZSBzd2FwIGZpbGUgYmVmb3JlIHJlbmFtaW5nICovCisJaWYgKG1mcC0+bWZfZmQgPj0gMCkKKwl7CisJICAgIGNsb3NlKG1mcC0+bWZfZmQpOworCSAgICBtZnAtPm1mX2ZkID0gLTE7CisJfQorCisJLyogdHJ5IHRvIHJlbmFtZSB0aGUgc3dhcCBmaWxlICovCisJaWYgKHZpbV9yZW5hbWUobWZwLT5tZl9mbmFtZSwgZm5hbWUpID09IDApCisJeworCSAgICBzdWNjZXNzID0gVFJVRTsKKwkgICAgdmltX2ZyZWUobWZwLT5tZl9mbmFtZSk7CisJICAgIG1mcC0+bWZfZm5hbWUgPSBmbmFtZTsKKwkgICAgdmltX2ZyZWUobWZwLT5tZl9mZm5hbWUpOworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pCisJICAgIG1mcC0+bWZfZmZuYW1lID0gTlVMTDsgIC8qIG1mX2ZuYW1lIGlzIGZ1bGwgcGF0aG5hbWUgYWxyZWFkeSAqLworI2Vsc2UKKwkgICAgbWZfc2V0X2ZmbmFtZShtZnApOworI2VuZGlmCisJICAgIGJyZWFrOworCX0KKwl2aW1fZnJlZShmbmFtZSk7CSAgICAvKiB0aGlzIGZuYW1lIGRpZG4ndCB3b3JrLCB0cnkgYW5vdGhlciAqLworICAgIH0KKworICAgIGlmIChtZnAtPm1mX2ZkID09IC0xKQkgICAgLyogbmVlZCB0byAocmUpb3BlbiB0aGUgc3dhcCBmaWxlICovCisgICAgeworCW1mcC0+bWZfZmQgPSBtY2hfb3BlbigoY2hhciAqKW1mcC0+bWZfZm5hbWUsIE9fUkRXUiB8IE9fRVhUUkEsIDApOworCWlmIChtZnAtPm1mX2ZkIDwgMCkKKwl7CisJICAgIC8qIGNvdWxkIG5vdCAocmUpb3BlbiB0aGUgc3dhcCBmaWxlLCB3aGF0IGNhbiB3ZSBkbz8/Pz8gKi8KKwkgICAgRU1TRyhfKCJFMzAxOiBPb3BzLCBsb3N0IHRoZSBzd2FwIGZpbGUhISEiKSk7CisJICAgIHJldHVybjsKKwl9CisgICAgfQorICAgIGlmICghc3VjY2VzcykKKwlFTVNHKF8oIkUzMDI6IENvdWxkIG5vdCByZW5hbWUgc3dhcCBmaWxlIikpOworfQorCisvKgorICogT3BlbiBhIGZpbGUgZm9yIHRoZSBtZW1maWxlIGZvciBhbGwgYnVmZmVycyB0aGF0IGFyZSBub3QgcmVhZG9ubHkgb3IgaGF2ZQorICogYmVlbiBtb2RpZmllZC4KKyAqIFVzZWQgd2hlbiAndXBkYXRlY291bnQnIGNoYW5nZXMgZnJvbSB6ZXJvIHRvIG5vbi16ZXJvLgorICovCisgICAgdm9pZAorbWxfb3Blbl9maWxlcygpCit7CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKwlpZiAoIWJ1Zi0+Yl9wX3JvIHx8IGJ1Zi0+Yl9jaGFuZ2VkKQorCSAgICBtbF9vcGVuX2ZpbGUoYnVmKTsKK30KKworLyoKKyAqIE9wZW4gYSBzd2FwIGZpbGUgZm9yIGFuIGV4aXN0aW5nIG1lbWZpbGUsIGlmIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSB5ZXQuCisgKiBJZiB3ZSBhcmUgdW5hYmxlIHRvIGZpbmQgYSBmaWxlIG5hbWUsIG1mX2ZuYW1lIHdpbGwgYmUgTlVMTAorICogYW5kIHRoZSBtZW1maWxlIHdpbGwgYmUgaW4gbWVtb3J5IG9ubHkgKG5vIHJlY292ZXJ5IHBvc3NpYmxlKS4KKyAqLworICAgIHZvaWQKK21sX29wZW5fZmlsZShidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBtZW1maWxlX1QJKm1mcDsKKyAgICBjaGFyX3UJKmZuYW1lOworICAgIGNoYXJfdQkqZGlycDsKKworICAgIG1mcCA9IGJ1Zi0+Yl9tbC5tbF9tZnA7CisgICAgaWYgKG1mcCA9PSBOVUxMIHx8IG1mcC0+bWZfZmQgPj0gMCB8fCAhYnVmLT5iX3Bfc3dmKQorCXJldHVybjsJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKworICAgIC8qCisgICAgICogVHJ5IGFsbCBkaXJlY3RvcmllcyBpbiAnZGlyZWN0b3J5JyBvcHRpb24uCisgICAgICovCisgICAgZGlycCA9IHBfZGlyOworICAgIGZvciAoOzspCisgICAgeworCWlmICgqZGlycCA9PSBOVUwpCisJICAgIGJyZWFrOworCS8qIFRoZXJlIGlzIGEgc21hbGwgY2hhbmNlIHRoYXQgYmV0d2VlbiBjaG9zaW5nIHRoZSBzd2FwIGZpbGUgbmFtZSBhbmQKKwkgKiBjcmVhdGluZyBpdCwgYW5vdGhlciBWaW0gY3JlYXRlcyB0aGUgZmlsZS4gIEluIHRoYXQgY2FzZSB0aGUKKwkgKiBjcmVhdGlvbiB3aWxsIGZhaWwgYW5kIHdlIHdpbGwgdXNlIGFub3RoZXIgZGlyZWN0b3J5LiAqLworCWZuYW1lID0gZmluZHN3YXBuYW1lKGJ1ZiwgJmRpcnAsIE5VTEwpOwkvKiBhbGxvY2F0ZXMgZm5hbWUgKi8KKwlpZiAoZm5hbWUgPT0gTlVMTCkKKwkgICAgY29udGludWU7CisJaWYgKG1mX29wZW5fZmlsZShtZnAsIGZuYW1lKSA9PSBPSykJLyogY29uc3VtZXMgZm5hbWUhICovCisJeworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoUklTQ09TKQorCSAgICAvKgorCSAgICAgKiBzZXQgZnVsbCBwYXRobmFtZSBmb3Igc3dhcCBmaWxlIG5vdywgYmVjYXVzZSBhICI6IWNkIGRpciIgbWF5CisJICAgICAqIGNoYW5nZSBkaXJlY3Rvcnkgd2l0aG91dCB1cyBrbm93aW5nIGl0LgorCSAgICAgKi8KKwkgICAgbWZfZnVsbG5hbWUobWZwKTsKKyNlbmRpZgorCSAgICAvKiBGbHVzaCBibG9jayB6ZXJvLCBzbyBvdGhlcnMgY2FuIHJlYWQgaXQgKi8KKwkgICAgaWYgKG1mX3N5bmMobWZwLCBNRlNfWkVSTykgPT0gT0spCisJCWJyZWFrOworCSAgICAvKiBXcml0aW5nIGJsb2NrIDAgZmFpbGVkOiBjbG9zZSB0aGUgZmlsZSBhbmQgdHJ5IGFub3RoZXIgZGlyICovCisJICAgIG1mX2Nsb3NlX2ZpbGUoYnVmLCBGQUxTRSk7CisJfQorICAgIH0KKworICAgIGlmIChtZnAtPm1mX2ZuYW1lID09IE5VTEwpCQkvKiBGYWlsZWQhICovCisgICAgeworCW5lZWRfd2FpdF9yZXR1cm4gPSBUUlVFOwkvKiBjYWxsIHdhaXRfcmV0dXJuIGxhdGVyICovCisJKytub193YWl0X3JldHVybjsKKwkodm9pZClFTVNHMihfKCJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIpLAorCQkgICAgYnVmX3NwbmFtZShidWYpICE9IE5VTEwKKwkJCT8gKGNoYXJfdSAqKWJ1Zl9zcG5hbWUoYnVmKQorCQkJOiBidWYtPmJfZm5hbWUpOworCS0tbm9fd2FpdF9yZXR1cm47CisgICAgfQorCisgICAgLyogZG9uJ3QgdHJ5IHRvIG9wZW4gYSBzd2FwIGZpbGUgYWdhaW4gKi8KKyAgICBidWYtPmJfbWF5X3N3YXAgPSBGQUxTRTsKK30KKworLyoKKyAqIElmIHN0aWxsIG5lZWQgdG8gY3JlYXRlIGEgc3dhcCBmaWxlLCBhbmQgc3RhcnRpbmcgdG8gZWRpdCBhIG5vdC1yZWFkb25seQorICogZmlsZSwgb3IgcmVhZGluZyBpbnRvIGFuIGV4aXN0aW5nIGJ1ZmZlciwgY3JlYXRlIGEgc3dhcCBmaWxlIG5vdy4KKyAqLworICAgIHZvaWQKK2NoZWNrX25lZWRfc3dhcChuZXdmaWxlKQorICAgIGludAkgICAgbmV3ZmlsZTsJCS8qIHJlYWRpbmcgZmlsZSBpbnRvIG5ldyBidWZmZXIgKi8KK3sKKyAgICBpZiAoY3VyYnVmLT5iX21heV9zd2FwICYmICghY3VyYnVmLT5iX3Bfcm8gfHwgIW5ld2ZpbGUpKQorCW1sX29wZW5fZmlsZShjdXJidWYpOworfQorCisvKgorICogQ2xvc2UgbWVtbGluZSBmb3IgYnVmZmVyICdidWYnLgorICogSWYgJ2RlbF9maWxlJyBpcyBUUlVFLCBkZWxldGUgdGhlIHN3YXAgZmlsZQorICovCisgICAgdm9pZAorbWxfY2xvc2UoYnVmLCBkZWxfZmlsZSkKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJZGVsX2ZpbGU7Cit7CisgICAgaWYgKGJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCkJCS8qIG5vdCBvcGVuICovCisJcmV0dXJuOworICAgIG1mX2Nsb3NlKGJ1Zi0+Yl9tbC5tbF9tZnAsIGRlbF9maWxlKTsJLyogY2xvc2UgdGhlIC5zd3AgZmlsZSAqLworICAgIGlmIChidWYtPmJfbWwubWxfbGluZV9sbnVtICE9IDAgJiYgKGJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0xJTkVfRElSVFkpKQorCXZpbV9mcmVlKGJ1Zi0+Yl9tbC5tbF9saW5lX3B0cik7CisgICAgdmltX2ZyZWUoYnVmLT5iX21sLm1sX3N0YWNrKTsKKyNpZmRlZiBGRUFUX0JZVEVPRkYKKyAgICB2aW1fZnJlZShidWYtPmJfbWwubWxfY2h1bmtzaXplKTsKKyAgICBidWYtPmJfbWwubWxfY2h1bmtzaXplID0gTlVMTDsKKyNlbmRpZgorICAgIGJ1Zi0+Yl9tbC5tbF9tZnAgPSBOVUxMOworCisgICAgLyogUmVzZXQgdGhlICJyZWNvdmVyZWQiIGZsYWcsIGdpdmUgdGhlIEFUVEVOVElPTiBwcm9tcHQgdGhlIG5leHQgdGltZQorICAgICAqIHRoaXMgYnVmZmVyIGlzIGxvYWRlZC4gKi8KKyAgICBidWYtPmJfZmxhZ3MgJj0gfkJGX1JFQ09WRVJFRDsKK30KKworLyoKKyAqIENsb3NlIGFsbCBleGlzdGluZyBtZW1saW5lcyBhbmQgbWVtZmlsZXMuCisgKiBPbmx5IHVzZWQgd2hlbiBleGl0aW5nLgorICogV2hlbiAnZGVsX2ZpbGUnIGlzIFRSVUUsIGRlbGV0ZSB0aGUgbWVtZmlsZXMuCisgKi8KKyAgICB2b2lkCittbF9jbG9zZV9hbGwoZGVsX2ZpbGUpCisgICAgaW50CQlkZWxfZmlsZTsKK3sKKyAgICBidWZfVAkqYnVmOworCisgICAgZm9yIChidWYgPSBmaXJzdGJ1ZjsgYnVmICE9IE5VTEw7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorCW1sX2Nsb3NlKGJ1ZiwgZGVsX2ZpbGUpOworI2lmZGVmIFRFTVBESVJOQU1FUworICAgIHZpbV9kZWx0ZW1wZGlyKCk7CSAgICAvKiBkZWxldGUgY3JlYXRlZCB0ZW1wIGRpcmVjdG9yeSAqLworI2VuZGlmCit9CisKKy8qCisgKiBDbG9zZSBhbGwgbWVtZmlsZXMgZm9yIG5vdCBtb2RpZmllZCBidWZmZXJzLgorICogT25seSB1c2UganVzdCBiZWZvcmUgZXhpdGluZyEKKyAqLworICAgIHZvaWQKK21sX2Nsb3NlX25vdG1vZCgpCit7CisgICAgYnVmX1QJKmJ1ZjsKKworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKwlpZiAoIWJ1ZklzQ2hhbmdlZChidWYpKQorCSAgICBtbF9jbG9zZShidWYsIFRSVUUpOyAgICAvKiBjbG9zZSBhbGwgbm90LW1vZGlmaWVkIGJ1ZmZlcnMgKi8KK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgdGltZXN0YW1wIGluIHRoZSAuc3dwIGZpbGUuCisgKiBVc2VkIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gd3JpdHRlbi4KKyAqLworICAgIHZvaWQKK21sX3RpbWVzdGFtcChidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBtZW1maWxlX1QJKm1mcDsKKyAgICBiaGRyX1QJKmhwOworICAgIFpFUk9fQkwJKmIwcDsKKworICAgIG1mcCA9IGJ1Zi0+Yl9tbC5tbF9tZnA7CisKKyAgICBpZiAobWZwID09IE5VTEwgfHwgKGhwID0gbWZfZ2V0KG1mcCwgKGJsb2NrbnJfVCkwLCAxKSkgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgYjBwID0gKFpFUk9fQkwgKikoaHAtPmJoX2RhdGEpOworICAgIGlmIChiMHAtPmIwX2lkWzBdICE9IEJMT0NLMF9JRDAgfHwgYjBwLT5iMF9pZFsxXSAhPSBCTE9DSzBfSUQxKQorCUVNU0coXygiRTMwNDogbWxfdGltZXN0YW1wOiBEaWRuJ3QgZ2V0IGJsb2NrIDA/PyIpKTsKKyAgICBlbHNlCisJc2V0X2IwX2ZuYW1lKGIwcCwgYnVmKTsKKyAgICBtZl9wdXQobWZwLCBocCwgVFJVRSwgRkFMU0UpOworfQorCisvKgorICogV3JpdGUgZmlsZSBuYW1lIGFuZCB0aW1lc3RhbXAgaW50byBibG9jayAwIG9mIGEgc3dhcCBmaWxlLgorICogQWxzbyBzZXQgYnVmLT5iX210aW1lLgorICogRG9uJ3QgdXNlIE5hbWVCdWZmW10hISEKKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfYjBfZm5hbWUoYjBwLCBidWYpCisgICAgWkVST19CTAkqYjBwOworICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgc3RydWN0IHN0YXQJc3Q7CisKKyAgICBpZiAoYnVmLT5iX2ZmbmFtZSA9PSBOVUxMKQorCWIwcC0+YjBfZm5hbWVbMF0gPSBOVUw7CisgICAgZWxzZQorICAgIHsKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKEFNSUdBKSB8fCBkZWZpbmVkKFJJU0NPUykKKwkvKiBzeXN0ZW1zIHRoYXQgY2Fubm90IHRyYW5zbGF0ZSAifnVzZXIiIGJhY2sgaW50byBhIHBhdGg6IGNvcHkgdGhlCisJICogZmlsZSBuYW1lIHVubW9kaWZpZWQgKi8KKwlTVFJOQ1BZKGIwcC0+YjBfZm5hbWUsIGJ1Zi0+Yl9mZm5hbWUsIEIwX0ZOQU1FX1NJWkUpOworI2Vsc2UKKwlzaXplX3QJZmxlbiwgdWxlbjsKKwljaGFyX3UJdW5hbWVbQjBfVU5BTUVfU0laRV07CisKKwkvKgorCSAqIEZvciBhIGZpbGUgdW5kZXIgdGhlIGhvbWUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IHVzZXIsIHdlIHRyeSB0bworCSAqIHJlcGxhY2UgdGhlIGhvbWUgZGlyZWN0b3J5IHBhdGggd2l0aCAifnVzZXIiLiBUaGlzIGhlbHBzIHdoZW4KKwkgKiBlZGl0aW5nIHRoZSBzYW1lIGZpbGUgb24gZGlmZmVyZW50IG1hY2hpbmVzIG92ZXIgYSBuZXR3b3JrLgorCSAqIEZpcnN0IHJlcGxhY2UgaG9tZSBkaXIgcGF0aCB3aXRoICJ+LyIgd2l0aCBob21lX3JlcGxhY2UoKS4KKwkgKiBUaGVuIGluc2VydCB0aGUgdXNlciBuYW1lIHRvIGdldCAifnVzZXIvIi4KKwkgKi8KKwlob21lX3JlcGxhY2UoTlVMTCwgYnVmLT5iX2ZmbmFtZSwgYjBwLT5iMF9mbmFtZSwgQjBfRk5BTUVfU0laRSwgVFJVRSk7CisJaWYgKGIwcC0+YjBfZm5hbWVbMF0gPT0gJ34nKQorCXsKKwkgICAgZmxlbiA9IFNUUkxFTihiMHAtPmIwX2ZuYW1lKTsKKwkgICAgLyogSWYgdGhlcmUgaXMgbm8gdXNlciBuYW1lIG9yIGl0IGlzIHRvbyBsb25nLCBkb24ndCB1c2UgIn4vIiAqLworCSAgICBpZiAoZ2V0X3VzZXJfbmFtZSh1bmFtZSwgQjBfVU5BTUVfU0laRSkgPT0gRkFJTAorCQkJIHx8ICh1bGVuID0gU1RSTEVOKHVuYW1lKSkgKyBmbGVuID4gQjBfRk5BTUVfU0laRSAtIDEpCisJCVNUUk5DUFkoYjBwLT5iMF9mbmFtZSwgYnVmLT5iX2ZmbmFtZSwgQjBfRk5BTUVfU0laRSk7CisJICAgIGVsc2UKKwkgICAgeworCQltY2hfbWVtbW92ZShiMHAtPmIwX2ZuYW1lICsgdWxlbiArIDEsIGIwcC0+YjBfZm5hbWUgKyAxLCBmbGVuKTsKKwkJbWNoX21lbW1vdmUoYjBwLT5iMF9mbmFtZSArIDEsIHVuYW1lLCB1bGVuKTsKKwkgICAgfQorCX0KKyNlbmRpZgorCWlmIChtY2hfc3RhdCgoY2hhciAqKWJ1Zi0+Yl9mZm5hbWUsICZzdCkgPj0gMCkKKwl7CisJICAgIGxvbmdfdG9fY2hhcigobG9uZylzdC5zdF9tdGltZSwgYjBwLT5iMF9tdGltZSk7CisjaWZkZWYgQ0hFQ0tfSU5PREUKKwkgICAgbG9uZ190b19jaGFyKChsb25nKXN0LnN0X2lubywgYjBwLT5iMF9pbm8pOworI2VuZGlmCisJICAgIGJ1Zl9zdG9yZV90aW1lKGJ1ZiwgJnN0LCBidWYtPmJfZmZuYW1lKTsKKwkgICAgYnVmLT5iX210aW1lX3JlYWQgPSBidWYtPmJfbXRpbWU7CisJfQorCWVsc2UKKwl7CisJICAgIGxvbmdfdG9fY2hhcigwTCwgYjBwLT5iMF9tdGltZSk7CisjaWZkZWYgQ0hFQ0tfSU5PREUKKwkgICAgbG9uZ190b19jaGFyKDBMLCBiMHAtPmIwX2lubyk7CisjZW5kaWYKKwkgICAgYnVmLT5iX210aW1lID0gMDsKKwkgICAgYnVmLT5iX210aW1lX3JlYWQgPSAwOworCSAgICBidWYtPmJfb3JpZ19zaXplID0gMDsKKwkgICAgYnVmLT5iX29yaWdfbW9kZSA9IDA7CisJfQorICAgIH0KK30KKworLyoKKyAqIHRyeSB0byByZWNvdmVyIGN1cmJ1ZiBmcm9tIHRoZSAuc3dwIGZpbGUKKyAqLworICAgIHZvaWQKK21sX3JlY292ZXIoKQoreworICAgIGJ1Zl9UCSpidWYgPSBOVUxMOworICAgIG1lbWZpbGVfVAkqbWZwID0gTlVMTDsKKyAgICBjaGFyX3UJKmZuYW1lOworICAgIGJoZHJfVAkqaHAgPSBOVUxMOworICAgIFpFUk9fQkwJKmIwcDsKKyAgICBQVFJfQkwJKnBwOworICAgIERBVEFfQkwJKmRwOworICAgIGluZm9wdHJfVAkqaXA7CisgICAgYmxvY2tucl9UCWJudW07CisgICAgaW50CQlwYWdlX2NvdW50OworICAgIHN0cnVjdCBzdGF0CW9yZ19zdGF0LCBzd3Bfc3RhdDsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWRpcmVjdGx5OworICAgIGxpbmVucl9UCWxudW07CisgICAgY2hhcl91CSpwOworICAgIGludAkJaTsKKyAgICBsb25nCWVycm9yOworICAgIGludAkJY2Fubm90X29wZW47CisgICAgbGluZW5yX1QJbGluZV9jb3VudDsKKyAgICBpbnQJCWhhc19lcnJvcjsKKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCXRvcDsKKyAgICBpbnQJCXR4dF9zdGFydDsKKyAgICBvZmZfdAlzaXplOworICAgIGludAkJY2FsbGVkX2Zyb21fbWFpbjsKKyAgICBpbnQJCXNlcmlvdXNfZXJyb3IgPSBUUlVFOworICAgIGxvbmcJbXRpbWU7CisgICAgaW50CQlhdHRyOworCisgICAgcmVjb3Zlcnltb2RlID0gVFJVRTsKKyAgICBjYWxsZWRfZnJvbV9tYWluID0gKGN1cmJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCk7CisgICAgYXR0ciA9IGhsX2F0dHIoSExGX0UpOworLyoKKyAqIElmIHRoZSBmaWxlIG5hbWUgZW5kcyBpbiAiLnN3PyIgd2UgdXNlIGl0IGRpcmVjdGx5LgorICogT3RoZXJ3aXNlIGEgc2VhcmNoIGlzIGRvbmUgdG8gZmluZCB0aGUgc3dhcCBmaWxlKHMpLgorICovCisgICAgZm5hbWUgPSBjdXJidWYtPmJfZm5hbWU7CisgICAgaWYgKGZuYW1lID09IE5VTEwpCQkgICAgLyogV2hlbiB0aGVyZSBpcyBubyBmaWxlIG5hbWUgKi8KKwlmbmFtZSA9IChjaGFyX3UgKikiIjsKKyAgICBsZW4gPSAoaW50KVNUUkxFTihmbmFtZSk7CisgICAgaWYgKGxlbiA+PSA0ICYmCisjaWYgZGVmaW5lZChWTVMpIHx8IGRlZmluZWQoUklTQ09TKQorCSAgICBTVFJOSUNNUChmbmFtZSArIGxlbiAtIDQsICJfc3ciICwgMykKKyNlbHNlCisJICAgIFNUUk5JQ01QKGZuYW1lICsgbGVuIC0gNCwgIi5zdyIgLCAzKQorI2VuZGlmCisJCT09IDApCisgICAgeworCWRpcmVjdGx5ID0gVFJVRTsKKwlmbmFtZSA9IHZpbV9zdHJzYXZlKGZuYW1lKTsgLyogbWFrZSBhIGNvcHkgZm9yIG1mX29wZW4oKSAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworCWRpcmVjdGx5ID0gRkFMU0U7CisKKwkvKiBjb3VudCB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIHN3YXAgZmlsZXMgKi8KKwlsZW4gPSByZWNvdmVyX25hbWVzKCZmbmFtZSwgRkFMU0UsIDApOworCWlmIChsZW4gPT0gMCkJCSAgICAvKiBubyBzd2FwIGZpbGVzIGZvdW5kICovCisJeworCSAgICBFTVNHMihfKCJFMzA1OiBObyBzd2FwIGZpbGUgZm91bmQgZm9yICVzIiksIGZuYW1lKTsKKwkgICAgZ290byB0aGVlbmQ7CisJfQorCWlmIChsZW4gPT0gMSkJCSAgICAvKiBvbmUgc3dhcCBmaWxlIGZvdW5kLCB1c2UgaXQgKi8KKwkgICAgaSA9IDE7CisJZWxzZQkJCSAgICAvKiBzZXZlcmFsIHN3YXAgZmlsZXMgZm91bmQsIGNob29zZSAqLworCXsKKwkgICAgLyogbGlzdCB0aGUgbmFtZXMgb2YgdGhlIHN3YXAgZmlsZXMgKi8KKwkgICAgKHZvaWQpcmVjb3Zlcl9uYW1lcygmZm5hbWUsIFRSVUUsIDApOworCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKwkgICAgTVNHX1BVVFMoXygiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIpKTsKKwkgICAgaSA9IGdldF9udW1iZXIoRkFMU0UpOworCSAgICBpZiAoaSA8IDEgfHwgaSA+IGxlbikKKwkJZ290byB0aGVlbmQ7CisJfQorCS8qIGdldCB0aGUgc3dhcCBmaWxlIG5hbWUgdGhhdCB3aWxsIGJlIHVzZWQgKi8KKwkodm9pZClyZWNvdmVyX25hbWVzKCZmbmFtZSwgRkFMU0UsIGkpOworICAgIH0KKyAgICBpZiAoZm5hbWUgPT0gTlVMTCkKKwlnb3RvIHRoZWVuZDsJCQkvKiBvdXQgb2YgbWVtb3J5ICovCisKKyAgICAvKiBXaGVuIGNhbGxlZCBmcm9tIG1haW4oKSBzdGlsbCBuZWVkIHRvIGluaXRpYWxpemUgc3RvcmFnZSBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoY2FsbGVkX2Zyb21fbWFpbiAmJiBtbF9vcGVuKCkgPT0gRkFJTCkKKwlnZXRvdXQoMSk7CisKKy8qCisgKiBhbGxvY2F0ZSBhIGJ1ZmZlciBzdHJ1Y3R1cmUgKG9ubHkgdGhlIG1lbWxpbmUgaW4gaXQgaXMgcmVhbGx5IHVzZWQpCisgKi8KKyAgICBidWYgPSAoYnVmX1QgKilhbGxvYygodW5zaWduZWQpc2l6ZW9mKGJ1Zl9UKSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShmbmFtZSk7CisJZ290byB0aGVlbmQ7CisgICAgfQorCisvKgorICogaW5pdCBmaWVsZHMgaW4gbWVtbGluZSBzdHJ1Y3QKKyAqLworICAgIGJ1Zi0+Yl9tbC5tbF9zdGFja19zaXplID0gMDsJLyogbm8gc3RhY2sgeWV0ICovCisgICAgYnVmLT5iX21sLm1sX3N0YWNrID0gTlVMTDsJCS8qIG5vIHN0YWNrIHlldCAqLworICAgIGJ1Zi0+Yl9tbC5tbF9zdGFja190b3AgPSAwOwkJLyogbm90aGluZyBpbiB0aGUgc3RhY2sgKi8KKyAgICBidWYtPmJfbWwubWxfbGluZV9sbnVtID0gMDsJCS8qIG5vIGNhY2hlZCBsaW5lICovCisgICAgYnVmLT5iX21sLm1sX2xvY2tlZCA9IE5VTEw7CQkvKiBubyBsb2NrZWQgYmxvY2sgKi8KKyAgICBidWYtPmJfbWwubWxfZmxhZ3MgPSAwOworCisvKgorICogb3BlbiB0aGUgbWVtZmlsZSBmcm9tIHRoZSBvbGQgc3dhcCBmaWxlCisgKi8KKyAgICBwID0gdmltX3N0cnNhdmUoZm5hbWUpOwkJLyogc2F2ZSBmbmFtZSBmb3IgdGhlIG1lc3NhZ2UKKwkJCQkJICAgKG1mX29wZW4oKSBtYXkgZnJlZSBmbmFtZSkgKi8KKyAgICBtZnAgPSBtZl9vcGVuKGZuYW1lLCBPX1JET05MWSk7CS8qIGNvbnN1bWVzIGZuYW1lISAqLworICAgIGlmIChtZnAgPT0gTlVMTCB8fCBtZnAtPm1mX2ZkIDwgMCkKKyAgICB7CisJaWYgKHAgIT0gTlVMTCkKKwl7CisJICAgIEVNU0cyKF8oIkUzMDY6IENhbm5vdCBvcGVuICVzIiksIHApOworCSAgICB2aW1fZnJlZShwKTsKKwl9CisJZ290byB0aGVlbmQ7CisgICAgfQorICAgIHZpbV9mcmVlKHApOworICAgIGJ1Zi0+Yl9tbC5tbF9tZnAgPSBtZnA7CisKKyAgICAvKgorICAgICAqIFRoZSBwYWdlIHNpemUgc2V0IGluIG1mX29wZW4oKSBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgcGFnZSBzaXplCisgICAgICogdXNlZCBpbiB0aGUgc3dhcCBmaWxlLCB3ZSBtdXN0IGdldCBpdCBmcm9tIGJsb2NrIDAuICBCdXQgdG8gcmVhZCBibG9jaworICAgICAqIDAgd2UgbmVlZCBhIHBhZ2Ugc2l6ZS4gIFVzZSB0aGUgbWluaW1hbCBzaXplIGZvciBibG9jayAwIGhlcmUsIGl0IHdpbGwKKyAgICAgKiBiZSBzZXQgdG8gdGhlIHJlYWwgdmFsdWUgYmVsb3cuCisgICAgICovCisgICAgbWZwLT5tZl9wYWdlX3NpemUgPSBNSU5fU1dBUF9QQUdFX1NJWkU7CisKKy8qCisgKiB0cnkgdG8gcmVhZCBibG9jayAwCisgKi8KKyAgICBpZiAoKGhwID0gbWZfZ2V0KG1mcCwgKGJsb2NrbnJfVCkwLCAxKSkgPT0gTlVMTCkKKyAgICB7CisJbXNnX3N0YXJ0KCk7CisJTVNHX1BVVFNfQVRUUihfKCJVbmFibGUgdG8gcmVhZCBibG9jayAwIGZyb20gIiksIGF0dHIgfCBNU0dfSElTVCk7CisJbXNnX291dHRyYW5zX2F0dHIobWZwLT5tZl9mbmFtZSwgYXR0ciB8IE1TR19ISVNUKTsKKwlNU0dfUFVUU19BVFRSKAorCSAgIF8oIlxuTWF5YmUgbm8gY2hhbmdlcyB3ZXJlIG1hZGUgb3IgVmltIGRpZCBub3QgdXBkYXRlIHRoZSBzd2FwIGZpbGUuIiksCisJCWF0dHIgfCBNU0dfSElTVCk7CisJbXNnX2VuZCgpOworCWdvdG8gdGhlZW5kOworICAgIH0KKyAgICBiMHAgPSAoWkVST19CTCAqKShocC0+YmhfZGF0YSk7CisgICAgaWYgKFNUUk5DTVAoYjBwLT5iMF92ZXJzaW9uLCAiVklNIDMuMCIsIDcpID09IDApCisgICAgeworCW1zZ19zdGFydCgpOworCW1zZ19vdXR0cmFuc19hdHRyKG1mcC0+bWZfZm5hbWUsIE1TR19ISVNUKTsKKwlNU0dfUFVUU19BVFRSKF8oIiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW0uXG4iKSwKKwkJCQkJCQkJICAgIE1TR19ISVNUKTsKKwlNU0dfUFVUU19BVFRSKF8oIlVzZSBWaW0gdmVyc2lvbiAzLjAuXG4iKSwgTVNHX0hJU1QpOworCW1zZ19lbmQoKTsKKwlnb3RvIHRoZWVuZDsKKyAgICB9CisgICAgaWYgKGIwcC0+YjBfaWRbMF0gIT0gQkxPQ0swX0lEMCB8fCBiMHAtPmIwX2lkWzFdICE9IEJMT0NLMF9JRDEpCisgICAgeworCUVNU0cyKF8oIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiKSwgbWZwLT5tZl9mbmFtZSk7CisJZ290byB0aGVlbmQ7CisgICAgfQorICAgIGlmIChiMF9tYWdpY193cm9uZyhiMHApKQorICAgIHsKKwltc2dfc3RhcnQoKTsKKwltc2dfb3V0dHJhbnNfYXR0cihtZnAtPm1mX2ZuYW1lLCBhdHRyIHwgTVNHX0hJU1QpOworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pCisJaWYgKFNUUk5DTVAoYjBwLT5iMF9obmFtZSwgIlBDICIsIDMpID09IDApCisJICAgIE1TR19QVVRTX0FUVFIoXygiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIpLAorCQkJCQkJCSAgICAgYXR0ciB8IE1TR19ISVNUKTsKKwllbHNlCisjZW5kaWYKKwkgICAgTVNHX1BVVFNfQVRUUihfKCIgY2Fubm90IGJlIHVzZWQgb24gdGhpcyBjb21wdXRlci5cbiIpLAorCQkJCQkJCSAgICAgYXR0ciB8IE1TR19ISVNUKTsKKwlNU0dfUFVUU19BVFRSKF8oIlRoZSBmaWxlIHdhcyBjcmVhdGVkIG9uICIpLCBhdHRyIHwgTVNHX0hJU1QpOworCS8qIGF2b2lkIGdvaW5nIHBhc3QgdGhlIGVuZCBvZiBhIGN1cnJ1cHRlZCBob3N0bmFtZSAqLworCWIwcC0+YjBfZm5hbWVbMF0gPSBOVUw7CisJTVNHX1BVVFNfQVRUUihiMHAtPmIwX2huYW1lLCBhdHRyIHwgTVNHX0hJU1QpOworCU1TR19QVVRTX0FUVFIoXygiLFxub3IgdGhlIGZpbGUgaGFzIGJlZW4gZGFtYWdlZC4iKSwgYXR0ciB8IE1TR19ISVNUKTsKKwltc2dfZW5kKCk7CisJZ290byB0aGVlbmQ7CisgICAgfQorICAgIC8qCisgICAgICogSWYgd2UgZ3Vlc3NlZCB0aGUgd3JvbmcgcGFnZSBzaXplLCB3ZSBoYXZlIHRvIHJlY2FsY3VsYXRlIHRoZQorICAgICAqIGhpZ2hlc3QgYmxvY2sgbnVtYmVyIGluIHRoZSBmaWxlLgorICAgICAqLworICAgIGlmIChtZnAtPm1mX3BhZ2Vfc2l6ZSAhPSAodW5zaWduZWQpY2hhcl90b19sb25nKGIwcC0+YjBfcGFnZV9zaXplKSkKKyAgICB7CisJbWZfbmV3X3BhZ2Vfc2l6ZShtZnAsICh1bnNpZ25lZCljaGFyX3RvX2xvbmcoYjBwLT5iMF9wYWdlX3NpemUpKTsKKwlpZiAoKHNpemUgPSBsc2VlayhtZnAtPm1mX2ZkLCAob2ZmX3QpMEwsIFNFRUtfRU5EKSkgPD0gMCkKKwkgICAgbWZwLT5tZl9ibG9ja25yX21heCA9IDA7CSAgICAvKiBubyBmaWxlIG9yIGVtcHR5IGZpbGUgKi8KKwllbHNlCisJICAgIG1mcC0+bWZfYmxvY2tucl9tYXggPSAoYmxvY2tucl9UKShzaXplIC8gbWZwLT5tZl9wYWdlX3NpemUpOworCW1mcC0+bWZfaW5maWxlX2NvdW50ID0gbWZwLT5tZl9ibG9ja25yX21heDsKKyAgICB9CisKKy8qCisgKiBJZiAuc3dwIGZpbGUgbmFtZSBnaXZlbiBkaXJlY3RseSwgdXNlIG5hbWUgZnJvbSBzd2FwIGZpbGUgZm9yIGJ1ZmZlci4KKyAqLworICAgIGlmIChkaXJlY3RseSkKKyAgICB7CisJZXhwYW5kX2VudihiMHAtPmIwX2ZuYW1lLCBOYW1lQnVmZiwgTUFYUEFUSEwpOworCWlmIChzZXRmbmFtZShjdXJidWYsIE5hbWVCdWZmLCBOVUxMLCBUUlVFKSA9PSBGQUlMKQorCSAgICBnb3RvIHRoZWVuZDsKKyAgICB9CisKKyAgICBob21lX3JlcGxhY2UoTlVMTCwgbWZwLT5tZl9mbmFtZSwgTmFtZUJ1ZmYsIE1BWFBBVEhMLCBUUlVFKTsKKyAgICBtc2dfc3RyKChjaGFyX3UgKilfKCJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIiksIE5hbWVCdWZmKTsKKworICAgIGlmIChidWZfc3BuYW1lKGN1cmJ1ZikgIT0gTlVMTCkKKwlTVFJDUFkoTmFtZUJ1ZmYsIGJ1Zl9zcG5hbWUoY3VyYnVmKSk7CisgICAgZWxzZQorCWhvbWVfcmVwbGFjZShOVUxMLCBjdXJidWYtPmJfZmZuYW1lLCBOYW1lQnVmZiwgTUFYUEFUSEwsIFRSVUUpOworICAgIG1zZ19zdHIoKGNoYXJfdSAqKV8oIk9yaWdpbmFsIGZpbGUgXCIlc1wiIiksIE5hbWVCdWZmKTsKKyAgICBtc2dfcHV0Y2hhcignXG4nKTsKKworLyoKKyAqIGNoZWNrIGRhdGUgb2Ygc3dhcCBmaWxlIGFuZCBvcmlnaW5hbCBmaWxlCisgKi8KKyAgICBtdGltZSA9IGNoYXJfdG9fbG9uZyhiMHAtPmIwX210aW1lKTsKKyAgICBpZiAoY3VyYnVmLT5iX2ZmbmFtZSAhPSBOVUxMCisJICAgICYmIG1jaF9zdGF0KChjaGFyICopY3VyYnVmLT5iX2ZmbmFtZSwgJm9yZ19zdGF0KSAhPSAtMQorCSAgICAmJiAoKG1jaF9zdGF0KChjaGFyICopbWZwLT5tZl9mbmFtZSwgJnN3cF9zdGF0KSAhPSAtMQorCQkgICAgJiYgb3JnX3N0YXQuc3RfbXRpbWUgPiBzd3Bfc3RhdC5zdF9tdGltZSkKKwkJfHwgb3JnX3N0YXQuc3RfbXRpbWUgIT0gbXRpbWUpKQorICAgIHsKKwlFTVNHKF8oIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIikpOworICAgIH0KKyAgICBvdXRfZmx1c2goKTsKKyAgICBtZl9wdXQobWZwLCBocCwgRkFMU0UsIEZBTFNFKTsJLyogcmVsZWFzZSBibG9jayAwICovCisgICAgaHAgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBOb3cgdGhhdCB3ZSBhcmUgc3VyZSB0aGF0IHRoZSBmaWxlIGlzIGdvaW5nIHRvIGJlIHJlY292ZXJlZCwgY2xlYXIgdGhlCisgICAgICogY29udGVudHMgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLgorICAgICAqLworICAgIHdoaWxlICghKGN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZKSkKKwltbF9kZWxldGUoKGxpbmVucl9UKTEsIEZBTFNFKTsKKworICAgIC8qCisgICAgICogVHJ5IHJlYWRpbmcgdGhlIG9yaWdpbmFsIGZpbGUgdG8gb2J0YWluIHRoZSB2YWx1ZXMgb2YgJ2ZpbGVmb3JtYXQnLAorICAgICAqICdmaWxlZW5jb2RpbmcnLCBldGMuICBJZ25vcmUgZXJyb3JzLiAgVGhlIHRleHQgaXRzZWxmIGlzIG5vdCB1c2VkLgorICAgICAqLworICAgIGlmIChjdXJidWYtPmJfZmZuYW1lICE9IE5VTEwpCisgICAgeworCSh2b2lkKXJlYWRmaWxlKGN1cmJ1Zi0+Yl9mZm5hbWUsIE5VTEwsIChsaW5lbnJfVCkwLAorCQkJICAgICAgKGxpbmVucl9UKTAsIChsaW5lbnJfVClNQVhMTlVNLCBOVUxMLCBSRUFEX05FVyk7CisJd2hpbGUgKCEoY3VyYnVmLT5iX21sLm1sX2ZsYWdzICYgTUxfRU1QVFkpKQorCSAgICBtbF9kZWxldGUoKGxpbmVucl9UKTEsIEZBTFNFKTsKKyAgICB9CisKKyAgICBibnVtID0gMTsJCS8qIHN0YXJ0IHdpdGggYmxvY2sgMSAqLworICAgIHBhZ2VfY291bnQgPSAxOwkvKiB3aGljaCBpcyAxIHBhZ2UgKi8KKyAgICBsbnVtID0gMDsJCS8qIGFwcGVuZCBhZnRlciBsaW5lIDAgaW4gY3VyYnVmICovCisgICAgbGluZV9jb3VudCA9IDA7CisgICAgaWR4ID0gMDsJCS8qIHN0YXJ0IHdpdGggZmlyc3QgaW5kZXggaW4gYmxvY2sgMSAqLworICAgIGVycm9yID0gMDsKKyAgICBidWYtPmJfbWwubWxfc3RhY2tfdG9wID0gMDsKKyAgICBidWYtPmJfbWwubWxfc3RhY2sgPSBOVUxMOworICAgIGJ1Zi0+Yl9tbC5tbF9zdGFja19zaXplID0gMDsJLyogbm8gc3RhY2sgeWV0ICovCisKKyAgICBpZiAoY3VyYnVmLT5iX2ZmbmFtZSA9PSBOVUxMKQorCWNhbm5vdF9vcGVuID0gVFJVRTsKKyAgICBlbHNlCisJY2Fubm90X29wZW4gPSBGQUxTRTsKKworICAgIHNlcmlvdXNfZXJyb3IgPSBGQUxTRTsKKyAgICBmb3IgKCA7ICFnb3RfaW50OyBsaW5lX2JyZWFrY2hlY2soKSkKKyAgICB7CisJaWYgKGhwICE9IE5VTEwpCisJICAgIG1mX3B1dChtZnAsIGhwLCBGQUxTRSwgRkFMU0UpOwkvKiByZWxlYXNlIHByZXZpb3VzIGJsb2NrICovCisKKwkvKgorCSAqIGdldCBibG9jaworCSAqLworCWlmICgoaHAgPSBtZl9nZXQobWZwLCAoYmxvY2tucl9UKWJudW0sIHBhZ2VfY291bnQpKSA9PSBOVUxMKQorCXsKKwkgICAgaWYgKGJudW0gPT0gMSkKKwkgICAgeworCQlFTVNHMihfKCJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiKSwgbWZwLT5tZl9mbmFtZSk7CisJCWdvdG8gdGhlZW5kOworCSAgICB9CisJICAgICsrZXJyb3I7CisJICAgIG1sX2FwcGVuZChsbnVtKyssIChjaGFyX3UgKilfKCI/Pz9NQU5ZIExJTkVTIE1JU1NJTkciKSwKKwkJCQkJCQkgICAgKGNvbG5yX1QpMCwgVFJVRSk7CisJfQorCWVsc2UJCS8qIHRoZXJlIGlzIGEgYmxvY2sgKi8KKwl7CisJICAgIHBwID0gKFBUUl9CTCAqKShocC0+YmhfZGF0YSk7CisJICAgIGlmIChwcC0+cGJfaWQgPT0gUFRSX0lEKQkJLyogaXQgaXMgYSBwb2ludGVyIGJsb2NrICovCisJICAgIHsKKwkJLyogY2hlY2sgbGluZSBjb3VudCB3aGVuIHVzaW5nIHBvaW50ZXIgYmxvY2sgZmlyc3QgdGltZSAqLworCQlpZiAoaWR4ID09IDAgJiYgbGluZV9jb3VudCAhPSAwKQorCQl7CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgKGludClwcC0+cGJfY291bnQ7ICsraSkKKwkJCWxpbmVfY291bnQgLT0gcHAtPnBiX3BvaW50ZXJbaV0ucGVfbGluZV9jb3VudDsKKwkJICAgIGlmIChsaW5lX2NvdW50ICE9IDApCisJCSAgICB7CisJCQkrK2Vycm9yOworCQkJbWxfYXBwZW5kKGxudW0rKywgKGNoYXJfdSAqKV8oIj8/P0xJTkUgQ09VTlQgV1JPTkciKSwKKwkJCQkJCQkgICAgKGNvbG5yX1QpMCwgVFJVRSk7CisJCSAgICB9CisJCX0KKworCQlpZiAocHAtPnBiX2NvdW50ID09IDApCisJCXsKKwkJICAgIG1sX2FwcGVuZChsbnVtKyssIChjaGFyX3UgKilfKCI/Pz9FTVBUWSBCTE9DSyIpLAorCQkJCQkJCSAgICAoY29sbnJfVCkwLCBUUlVFKTsKKwkJICAgICsrZXJyb3I7CisJCX0KKwkJZWxzZSBpZiAoaWR4IDwgKGludClwcC0+cGJfY291bnQpCS8qIGdvIGEgYmxvY2sgZGVlcGVyICovCisJCXsKKwkJICAgIGlmIChwcC0+cGJfcG9pbnRlcltpZHhdLnBlX2JudW0gPCAwKQorCQkgICAgeworCQkJLyoKKwkJCSAqIERhdGEgYmxvY2sgd2l0aCBuZWdhdGl2ZSBibG9jayBudW1iZXIuCisJCQkgKiBUcnkgdG8gcmVhZCBsaW5lcyBmcm9tIHRoZSBvcmlnaW5hbCBmaWxlLgorCQkJICogVGhpcyBpcyBzbG93LCBidXQgaXQgd29ya3MuCisJCQkgKi8KKwkJCWlmICghY2Fubm90X29wZW4pCisJCQl7CisJCQkgICAgbGluZV9jb3VudCA9IHBwLT5wYl9wb2ludGVyW2lkeF0ucGVfbGluZV9jb3VudDsKKwkJCSAgICBpZiAocmVhZGZpbGUoY3VyYnVmLT5iX2ZmbmFtZSwgTlVMTCwgbG51bSwKKwkJCQkJcHAtPnBiX3BvaW50ZXJbaWR4XS5wZV9vbGRfbG51bSAtIDEsCisJCQkJCWxpbmVfY291bnQsIE5VTEwsIDApID09IEZBSUwpCisJCQkJY2Fubm90X29wZW4gPSBUUlVFOworCQkJICAgIGVsc2UKKwkJCQlsbnVtICs9IGxpbmVfY291bnQ7CisJCQl9CisJCQlpZiAoY2Fubm90X29wZW4pCisJCQl7CisJCQkgICAgKytlcnJvcjsKKwkJCSAgICBtbF9hcHBlbmQobG51bSsrLCAoY2hhcl91ICopXygiPz8/TElORVMgTUlTU0lORyIpLAorCQkJCQkJCSAgICAoY29sbnJfVCkwLCBUUlVFKTsKKwkJCX0KKwkJCSsraWR4OwkgICAgLyogZ2V0IHNhbWUgYmxvY2sgYWdhaW4gZm9yIG5leHQgaW5kZXggKi8KKwkJCWNvbnRpbnVlOworCQkgICAgfQorCisJCSAgICAvKgorCQkgICAgICogZ29pbmcgb25lIGJsb2NrIGRlZXBlciBpbiB0aGUgdHJlZQorCQkgICAgICovCisJCSAgICBpZiAoKHRvcCA9IG1sX2FkZF9zdGFjayhidWYpKSA8IDApCS8qIG5ldyBlbnRyeSBpbiBzdGFjayAqLworCQkgICAgeworCQkJKytlcnJvcjsKKwkJCWJyZWFrOwkJICAgIC8qIG91dCBvZiBtZW1vcnkgKi8KKwkJICAgIH0KKwkJICAgIGlwID0gJihidWYtPmJfbWwubWxfc3RhY2tbdG9wXSk7CisJCSAgICBpcC0+aXBfYm51bSA9IGJudW07CisJCSAgICBpcC0+aXBfaW5kZXggPSBpZHg7CisKKwkJICAgIGJudW0gPSBwcC0+cGJfcG9pbnRlcltpZHhdLnBlX2JudW07CisJCSAgICBsaW5lX2NvdW50ID0gcHAtPnBiX3BvaW50ZXJbaWR4XS5wZV9saW5lX2NvdW50OworCQkgICAgcGFnZV9jb3VudCA9IHBwLT5wYl9wb2ludGVyW2lkeF0ucGVfcGFnZV9jb3VudDsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkgICAgZWxzZQkgICAgLyogbm90IGEgcG9pbnRlciBibG9jayAqLworCSAgICB7CisJCWRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworCQlpZiAoZHAtPmRiX2lkICE9IERBVEFfSUQpCS8qIGJsb2NrIGlkIHdyb25nICovCisJCXsKKwkJICAgIGlmIChibnVtID09IDEpCisJCSAgICB7CisJCQlFTVNHMihfKCJFMzEwOiBCbG9jayAxIElEIHdyb25nICglcyBub3QgYSAuc3dwIGZpbGU/KSIpLAorCQkJCQkJCSAgICAgICBtZnAtPm1mX2ZuYW1lKTsKKwkJCWdvdG8gdGhlZW5kOworCQkgICAgfQorCQkgICAgKytlcnJvcjsKKwkJICAgIG1sX2FwcGVuZChsbnVtKyssIChjaGFyX3UgKilfKCI/Pz9CTE9DSyBNSVNTSU5HIiksCisJCQkJCQkJICAgIChjb2xucl9UKTAsIFRSVUUpOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgLyoKKwkJICAgICAqIGl0IGlzIGEgZGF0YSBibG9jaworCQkgICAgICogQXBwZW5kIGFsbCB0aGUgbGluZXMgaW4gdGhpcyBibG9jaworCQkgICAgICovCisJCSAgICBoYXNfZXJyb3IgPSBGQUxTRTsKKwkJCS8qCisJCQkgKiBjaGVjayBsZW5ndGggb2YgYmxvY2sKKwkJCSAqIGlmIHdyb25nLCB1c2UgbGVuZ3RoIGluIHBvaW50ZXIgYmxvY2sKKwkJCSAqLworCQkgICAgaWYgKHBhZ2VfY291bnQgKiBtZnAtPm1mX3BhZ2Vfc2l6ZSAhPSBkcC0+ZGJfdHh0X2VuZCkKKwkJICAgIHsKKwkJCW1sX2FwcGVuZChsbnVtKyssIChjaGFyX3UgKilfKCI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgYmUgbWVzc2VkIHVwIiksCisJCQkJCQkJICAgIChjb2xucl9UKTAsIFRSVUUpOworCQkJKytlcnJvcjsKKwkJCWhhc19lcnJvciA9IFRSVUU7CisJCQlkcC0+ZGJfdHh0X2VuZCA9IHBhZ2VfY291bnQgKiBtZnAtPm1mX3BhZ2Vfc2l6ZTsKKwkJICAgIH0KKworCQkJLyogbWFrZSBzdXJlIHRoZXJlIGlzIGEgTlVMIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCisJCSAgICAqKChjaGFyX3UgKilkcCArIGRwLT5kYl90eHRfZW5kIC0gMSkgPSBOVUw7CisKKwkJCS8qCisJCQkgKiBjaGVjayBudW1iZXIgb2YgbGluZXMgaW4gYmxvY2sKKwkJCSAqIGlmIHdyb25nLCB1c2UgY291bnQgaW4gZGF0YSBibG9jaworCQkJICovCisJCSAgICBpZiAobGluZV9jb3VudCAhPSBkcC0+ZGJfbGluZV9jb3VudCkKKwkJICAgIHsKKwkJCW1sX2FwcGVuZChsbnVtKyssIChjaGFyX3UgKilfKCI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiKSwKKwkJCQkJCQkgICAgKGNvbG5yX1QpMCwgVFJVRSk7CisJCQkrK2Vycm9yOworCQkJaGFzX2Vycm9yID0gVFJVRTsKKwkJICAgIH0KKworCQkgICAgZm9yIChpID0gMDsgaSA8IGRwLT5kYl9saW5lX2NvdW50OyArK2kpCisJCSAgICB7CisJCQl0eHRfc3RhcnQgPSAoZHAtPmRiX2luZGV4W2ldICYgREJfSU5ERVhfTUFTSyk7CisJCQlpZiAodHh0X3N0YXJ0IDw9IEhFQURFUl9TSVpFCisJCQkJCSAgfHwgdHh0X3N0YXJ0ID49IChpbnQpZHAtPmRiX3R4dF9lbmQpCisJCQl7CisJCQkgICAgcCA9IChjaGFyX3UgKikiPz8/IjsKKwkJCSAgICArK2Vycm9yOworCQkJfQorCQkJZWxzZQorCQkJICAgIHAgPSAoY2hhcl91ICopZHAgKyB0eHRfc3RhcnQ7CisJCQltbF9hcHBlbmQobG51bSsrLCBwLCAoY29sbnJfVCkwLCBUUlVFKTsKKwkJICAgIH0KKwkJICAgIGlmIChoYXNfZXJyb3IpCisJCQltbF9hcHBlbmQobG51bSsrLCAoY2hhcl91ICopXygiPz8/RU5EIiksIChjb2xucl9UKTAsIFRSVUUpOworCQl9CisJICAgIH0KKwl9CisKKwlpZiAoYnVmLT5iX21sLm1sX3N0YWNrX3RvcCA9PSAwKQkvKiBmaW5pc2hlZCAqLworCSAgICBicmVhazsKKworCS8qCisJICogZ28gb25lIGJsb2NrIHVwIGluIHRoZSB0cmVlCisJICovCisJaXAgPSAmKGJ1Zi0+Yl9tbC5tbF9zdGFja1stLShidWYtPmJfbWwubWxfc3RhY2tfdG9wKV0pOworCWJudW0gPSBpcC0+aXBfYm51bTsKKwlpZHggPSBpcC0+aXBfaW5kZXggKyAxOwkgICAgLyogZ28gdG8gbmV4dCBpbmRleCAqLworCXBhZ2VfY291bnQgPSAxOworICAgIH0KKworICAgIC8qCisgICAgICogVGhlIGR1bW15IGxpbmUgZnJvbSB0aGUgZW1wdHkgYnVmZmVyIHdpbGwgbm93IGJlIGFmdGVyIHRoZSBsYXN0IGxpbmUgaW4KKyAgICAgKiB0aGUgYnVmZmVyLiBEZWxldGUgaXQuCisgICAgICovCisgICAgbWxfZGVsZXRlKGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LCBGQUxTRSk7CisgICAgY3VyYnVmLT5iX2ZsYWdzIHw9IEJGX1JFQ09WRVJFRDsKKworICAgIHJlY292ZXJ5bW9kZSA9IEZBTFNFOworICAgIGlmIChnb3RfaW50KQorCUVNU0coXygiRTMxMTogUmVjb3ZlcnkgSW50ZXJydXB0ZWQiKSk7CisgICAgZWxzZSBpZiAoZXJyb3IpCisgICAgeworCSsrbm9fd2FpdF9yZXR1cm47CisJTVNHKCI+Pj4+Pj4+Pj4+Pj4+Iik7CisJRU1TRyhfKCJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iKSk7CisJLS1ub193YWl0X3JldHVybjsKKwlNU0coXygiU2VlIFwiOmhlbHAgRTMxMlwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpKTsKKwlNU0coIj4+Pj4+Pj4+Pj4+Pj4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlNU0coXygiUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIikpOworCU1TR19QVVRTKF8oIlxuKFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIG91dCB0aGlzIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lXG4iKSk7CisJTVNHX1BVVFMoXygiYW5kIHJ1biBkaWZmIHdpdGggdGhlIG9yaWdpbmFsIGZpbGUgdG8gY2hlY2sgZm9yIGNoYW5nZXMpXG4iKSk7CisJTVNHX1BVVFMoXygiRGVsZXRlIHRoZSAuc3dwIGZpbGUgYWZ0ZXJ3YXJkcy5cblxuIikpOworCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKyAgICB9CisgICAgcmVkcmF3X2N1cmJ1Zl9sYXRlcihOT1RfVkFMSUQpOworCit0aGVlbmQ6CisgICAgcmVjb3Zlcnltb2RlID0gRkFMU0U7CisgICAgaWYgKG1mcCAhPSBOVUxMKQorICAgIHsKKwlpZiAoaHAgIT0gTlVMTCkKKwkgICAgbWZfcHV0KG1mcCwgaHAsIEZBTFNFLCBGQUxTRSk7CisJbWZfY2xvc2UobWZwLCBGQUxTRSk7CSAgICAvKiB3aWxsIGFsc28gdmltX2ZyZWUobWZwLT5tZl9mbmFtZSkgKi8KKyAgICB9CisgICAgdmltX2ZyZWUoYnVmKTsKKyAgICBpZiAoc2VyaW91c19lcnJvciAmJiBjYWxsZWRfZnJvbV9tYWluKQorCW1sX2Nsb3NlKGN1cmJ1ZiwgVFJVRSk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgZWxzZQorICAgIHsKKwlhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZSRUFEUE9TVCwgTlVMTCwgY3VyYnVmLT5iX2ZuYW1lLCBGQUxTRSwgY3VyYnVmKTsKKwlhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZXSU5FTlRFUiwgTlVMTCwgY3VyYnVmLT5iX2ZuYW1lLCBGQUxTRSwgY3VyYnVmKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm47Cit9CisKKy8qCisgKiBGaW5kIHRoZSBuYW1lcyBvZiBzd2FwIGZpbGVzIGluIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCB0aGUgZGlyZWN0b3J5IGdpdmVuCisgKiB3aXRoIHRoZSAnZGlyZWN0b3J5JyBvcHRpb24uCisgKgorICogVXNlZCB0bzoKKyAqIC0gbGlzdCB0aGUgc3dhcCBmaWxlcyBmb3IgInZpbSAtciIKKyAqIC0gY291bnQgdGhlIG51bWJlciBvZiBzd2FwIGZpbGVzIHdoZW4gcmVjb3ZlcmluZworICogLSBsaXN0IHRoZSBzd2FwIGZpbGVzIHdoZW4gcmVjb3ZlcmluZworICogLSBmaW5kIHRoZSBuYW1lIG9mIHRoZSBuJ3RoIHN3YXAgZmlsZSB3aGVuIHJlY292ZXJpbmcKKyAqLworICAgIGludAorcmVjb3Zlcl9uYW1lcyhmbmFtZSwgbGlzdCwgbnIpCisgICAgY2hhcl91CSoqZm5hbWU7ICAgIC8qIGJhc2UgZm9yIHN3YXAgZmlsZSBuYW1lICovCisgICAgaW50CQlsaXN0OwkgICAgLyogd2hlbiBUUlVFLCBsaXN0IHRoZSBzd2FwIGZpbGUgbmFtZXMgKi8KKyAgICBpbnQJCW5yOwkgICAgLyogd2hlbiBub24temVybywgcmV0dXJuIG5yJ3RoIHN3YXAgZmlsZSBuYW1lICovCit7CisgICAgaW50CQludW1fbmFtZXM7CisgICAgY2hhcl91CSoobmFtZXNbNl0pOworICAgIGNoYXJfdQkqdGFpbDsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQludW1fZmlsZXM7CisgICAgaW50CQlmaWxlX2NvdW50ID0gMDsKKyAgICBjaGFyX3UJKipmaWxlczsKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpkaXJwOworICAgIGNoYXJfdQkqZGlyX25hbWU7CisKKyAgICBpZiAobGlzdCkKKyAgICB7CisJICAgIC8qIHVzZSBtc2coKSB0byBzdGFydCB0aGUgc2Nyb2xsaW5nIHByb3Blcmx5ICovCisJbXNnKChjaGFyX3UgKilfKCJTd2FwIGZpbGVzIGZvdW5kOiIpKTsKKwltc2dfcHV0Y2hhcignXG4nKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERvIHRoZSBsb29wIGZvciBldmVyeSBkaXJlY3RvcnkgaW4gJ2RpcmVjdG9yeScuCisgICAgICogRmlyc3QgYWxsb2NhdGUgc29tZSBtZW1vcnkgdG8gcHV0IHRoZSBkaXJlY3RvcnkgbmFtZSBpbi4KKyAgICAgKi8KKyAgICBkaXJfbmFtZSA9IGFsbG9jKCh1bnNpZ25lZClTVFJMRU4ocF9kaXIpICsgMSk7CisgICAgZGlycCA9IHBfZGlyOworICAgIHdoaWxlIChkaXJfbmFtZSAhPSBOVUxMICYmICpkaXJwKQorICAgIHsKKwkvKgorCSAqIElzb2xhdGUgYSBkaXJlY3RvcnkgbmFtZSBmcm9tICpkaXJwIGFuZCBwdXQgaXQgaW4gZGlyX25hbWUgKHdlIGtub3cKKwkgKiBpdCBpcyBsYXJnZSBlbm91Z2gsIHNvIHVzZSAzMTAwMCBmb3IgbGVuZ3RoKS4KKwkgKiBBZHZhbmNlIGRpcnAgdG8gbmV4dCBkaXJlY3RvcnkgbmFtZS4KKwkgKi8KKwkodm9pZCljb3B5X29wdGlvbl9wYXJ0KCZkaXJwLCBkaXJfbmFtZSwgMzEwMDAsICIsIik7CisKKwlpZiAoZGlyX25hbWVbMF0gPT0gJy4nICYmIGRpcl9uYW1lWzFdID09IE5VTCkJLyogY2hlY2sgY3VycmVudCBkaXIgKi8KKwl7CisJICAgIGlmIChmbmFtZSA9PSBOVUxMIHx8ICpmbmFtZSA9PSBOVUxMKQorCSAgICB7CisjaWZkZWYgVk1TCisJCW5hbWVzWzBdID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKSIqX3N3JSIpOworI2Vsc2UKKyMgaWZkZWYgUklTQ09TCisJCW5hbWVzWzBdID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKSIqX3N3IyIpOworIyBlbHNlCisJCW5hbWVzWzBdID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKSIqLnN3PyIpOworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgVU5JWAorCQkvKiBmb3IgVW5peCBuYW1lcyBzdGFydGluZyB3aXRoIGEgZG90IGFyZSBzcGVjaWFsICovCisJCW5hbWVzWzFdID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKSIuKi5zdz8iKTsKKwkJbmFtZXNbMl0gPSB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopIi5zdz8iKTsKKwkJbnVtX25hbWVzID0gMzsKKyNlbHNlCisjIGlmZGVmIFZNUworCQluYW1lc1sxXSA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKikiLipfc3clIik7CisJCW51bV9uYW1lcyA9IDI7CisjIGVsc2UKKwkJbnVtX25hbWVzID0gMTsKKyMgZW5kaWYKKyNlbmRpZgorCSAgICB9CisJICAgIGVsc2UKKwkJbnVtX25hbWVzID0gcmVjb3ZfZmlsZV9uYW1lcyhuYW1lcywgKmZuYW1lLCBUUlVFKTsKKwl9CisJZWxzZQkJCSAgICAvKiBjaGVjayBkaXJlY3RvcnkgZGlyX25hbWUgKi8KKwl7CisJICAgIGlmIChmbmFtZSA9PSBOVUxMIHx8ICpmbmFtZSA9PSBOVUxMKQorCSAgICB7CisjaWZkZWYgVk1TCisJCW5hbWVzWzBdID0gY29uY2F0X2ZuYW1lcyhkaXJfbmFtZSwgKGNoYXJfdSAqKSIqX3N3JSIsIFRSVUUpOworI2Vsc2UKKyMgaWZkZWYgUklTQ09TCisJCW5hbWVzWzBdID0gY29uY2F0X2ZuYW1lcyhkaXJfbmFtZSwgKGNoYXJfdSAqKSIqX3N3IyIsIFRSVUUpOworIyBlbHNlCisJCW5hbWVzWzBdID0gY29uY2F0X2ZuYW1lcyhkaXJfbmFtZSwgKGNoYXJfdSAqKSIqLnN3PyIsIFRSVUUpOworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgVU5JWAorCQkvKiBmb3IgVW5peCBuYW1lcyBzdGFydGluZyB3aXRoIGEgZG90IGFyZSBzcGVjaWFsICovCisJCW5hbWVzWzFdID0gY29uY2F0X2ZuYW1lcyhkaXJfbmFtZSwgKGNoYXJfdSAqKSIuKi5zdz8iLCBUUlVFKTsKKwkJbmFtZXNbMl0gPSBjb25jYXRfZm5hbWVzKGRpcl9uYW1lLCAoY2hhcl91ICopIi5zdz8iLCBUUlVFKTsKKwkJbnVtX25hbWVzID0gMzsKKyNlbHNlCisjIGlmZGVmIFZNUworCQluYW1lc1sxXSA9IGNvbmNhdF9mbmFtZXMoZGlyX25hbWUsIChjaGFyX3UgKikiLipfc3clIiwgVFJVRSk7CisJCW51bV9uYW1lcyA9IDI7CisjIGVsc2UKKwkJbnVtX25hbWVzID0gMTsKKyMgZW5kaWYKKyNlbmRpZgorCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChXSU4zMjY0KQorCQlwID0gZGlyX25hbWUgKyBTVFJMRU4oZGlyX25hbWUpOworCQlpZiAodmltX2lzcGF0aHNlcChwWy0xXSkgJiYgcFstMV0gPT0gcFstMl0pCisJCXsKKwkJICAgIC8qIEVuZHMgd2l0aCAnLy8nLCBVc2UgRnVsbCBwYXRoIGZvciBzd2FwIG5hbWUgKi8KKwkJICAgIHRhaWwgPSBtYWtlX3BlcmNlbnRfc3duYW1lKGRpcl9uYW1lLCAqZm5hbWUpOworCQl9CisJCWVsc2UKKyNlbmRpZgorCQl7CisJCSAgICB0YWlsID0gZ2V0dGFpbCgqZm5hbWUpOworCQkgICAgdGFpbCA9IGNvbmNhdF9mbmFtZXMoZGlyX25hbWUsIHRhaWwsIFRSVUUpOworCQl9CisJCWlmICh0YWlsID09IE5VTEwpCisJCSAgICBudW1fbmFtZXMgPSAwOworCQllbHNlCisJCXsKKwkJICAgIG51bV9uYW1lcyA9IHJlY292X2ZpbGVfbmFtZXMobmFtZXMsIHRhaWwsIEZBTFNFKTsKKwkJICAgIHZpbV9mcmVlKHRhaWwpOworCQl9CisJICAgIH0KKwl9CisKKwkgICAgLyogY2hlY2sgZm9yIG91dC1vZi1tZW1vcnkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX25hbWVzOyArK2kpCisJeworCSAgICBpZiAobmFtZXNbaV0gPT0gTlVMTCkKKwkgICAgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX25hbWVzOyArK2kpCisJCSAgICB2aW1fZnJlZShuYW1lc1tpXSk7CisJCW51bV9uYW1lcyA9IDA7CisJICAgIH0KKwl9CisJaWYgKG51bV9uYW1lcyA9PSAwKQorCSAgICBudW1fZmlsZXMgPSAwOworCWVsc2UgaWYgKGV4cGFuZF93aWxkY2FyZHMobnVtX25hbWVzLCBuYW1lcywgJm51bV9maWxlcywgJmZpbGVzLAorCQkJCQlFV19LRUVQQUxMfEVXX0ZJTEV8RVdfU0lMRU5UKSA9PSBGQUlMKQorCSAgICBudW1fZmlsZXMgPSAwOworCisJLyoKKwkgKiBXaGVuIG5vIHN3YXAgZmlsZSBmb3VuZCwgd2lsZGNhcmQgZXhwYW5zaW9uIG1pZ2h0IGhhdmUgZmFpbGVkIChlLmcuCisJICogbm90IGFibGUgdG8gZXhlY3V0ZSB0aGUgc2hlbGwpLgorCSAqIFRyeSBmaW5kaW5nIGEgc3dhcCBmaWxlIGJ5IHNpbXBseSBhZGRpbmcgIi5zd3AiIHRvIHRoZSBmaWxlIG5hbWUuCisJICovCisJaWYgKCpkaXJwID09IE5VTCAmJiBmaWxlX2NvdW50ICsgbnVtX2ZpbGVzID09IDAKKwkJCQkJICAgJiYgZm5hbWUgIT0gTlVMTCAmJiAqZm5hbWUgIT0gTlVMTCkKKwl7CisJICAgIHN0cnVjdCBzdGF0CSAgICBzdDsKKwkgICAgY2hhcl91CSAgICAqc3dhcG5hbWU7CisKKyNpZiBkZWZpbmVkKFZNUykgfHwgZGVmaW5lZChSSVNDT1MpCisJICAgIHN3YXBuYW1lID0gbW9kbmFtZSgqZm5hbWUsIChjaGFyX3UgKikiX3N3cCIsIEZBTFNFKTsKKyNlbHNlCisJICAgIHN3YXBuYW1lID0gbW9kbmFtZSgqZm5hbWUsIChjaGFyX3UgKikiLnN3cCIsIFRSVUUpOworI2VuZGlmCisJICAgIGlmIChzd2FwbmFtZSAhPSBOVUxMKQorCSAgICB7CisJCWlmIChtY2hfc3RhdCgoY2hhciAqKXN3YXBuYW1lLCAmc3QpICE9IC0xKQkgICAgLyogSXQgZXhpc3RzISAqLworCQl7CisJCSAgICBmaWxlcyA9IChjaGFyX3UgKiopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihjaGFyX3UgKikpOworCQkgICAgaWYgKGZpbGVzICE9IE5VTEwpCisJCSAgICB7CisJCQlmaWxlc1swXSA9IHN3YXBuYW1lOworCQkJc3dhcG5hbWUgPSBOVUxMOworCQkJbnVtX2ZpbGVzID0gMTsKKwkJICAgIH0KKwkJfQorCQl2aW1fZnJlZShzd2FwbmFtZSk7CisJICAgIH0KKwl9CisKKwkvKgorCSAqIHJlbW92ZSBzd2FwZmlsZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwgaXQgbXVzdCBiZSBpZ25vcmVkCisJICovCisJaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9tZnAgIT0gTlVMTAorCQkJICAgICAgICYmIChwID0gY3VyYnVmLT5iX21sLm1sX21mcC0+bWZfZm5hbWUpICE9IE5VTEwpCisJeworCSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2ZpbGVzOyArK2kpCisJCWlmIChmdWxscGF0aGNtcChwLCBmaWxlc1tpXSwgVFJVRSkgJiBGUENfU0FNRSkKKwkJeworCQkgICAgdmltX2ZyZWUoZmlsZXNbaV0pOworCQkgICAgLS1udW1fZmlsZXM7CisJCSAgICBmb3IgKCA7IGkgPCBudW1fZmlsZXM7ICsraSkKKwkJCWZpbGVzW2ldID0gZmlsZXNbaSArIDFdOworCQl9CisJfQorCWlmIChucikKKwl7CisJICAgIGZpbGVfY291bnQgKz0gbnVtX2ZpbGVzOworCSAgICBpZiAobnIgPD0gZmlsZV9jb3VudCkKKwkgICAgeworCQkqZm5hbWUgPSB2aW1fc3Ryc2F2ZShmaWxlc1tuciAtIDEgKyBudW1fZmlsZXMgLSBmaWxlX2NvdW50XSk7CisJCWRpcnAgPSAoY2hhcl91ICopIiI7CQkgICAgLyogc3RvcCBzZWFyY2hpbmcgKi8KKwkgICAgfQorCX0KKwllbHNlIGlmIChsaXN0KQorCXsKKwkgICAgaWYgKGRpcl9uYW1lWzBdID09ICcuJyAmJiBkaXJfbmFtZVsxXSA9PSBOVUwpCisJICAgIHsKKwkJaWYgKGZuYW1lID09IE5VTEwgfHwgKmZuYW1lID09IE5VTEwpCisJCSAgICBNU0dfUFVUUyhfKCIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIpKTsKKwkJZWxzZQorCQkgICAgTVNHX1BVVFMoXygiICAgVXNpbmcgc3BlY2lmaWVkIG5hbWU6XG4iKSk7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCU1TR19QVVRTKF8oIiAgIEluIGRpcmVjdG9yeSAiKSk7CisJCW1zZ19ob21lX3JlcGxhY2UoZGlyX25hbWUpOworCQlNU0dfUFVUUygiOlxuIik7CisJICAgIH0KKworCSAgICBpZiAobnVtX2ZpbGVzKQorCSAgICB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fZmlsZXM7ICsraSkKKwkJeworCQkgICAgLyogcHJpbnQgdGhlIHN3YXAgZmlsZSBuYW1lICovCisJCSAgICBtc2dfb3V0bnVtKChsb25nKSsrZmlsZV9jb3VudCk7CisJCSAgICBNU0dfUFVUUygiLiAgICAiKTsKKwkJICAgIG1zZ19wdXRzKGdldHRhaWwoZmlsZXNbaV0pKTsKKwkJICAgIG1zZ19wdXRjaGFyKCdcbicpOworCQkgICAgKHZvaWQpc3dhcGZpbGVfaW5mbyhmaWxlc1tpXSk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJCU1TR19QVVRTKF8oIiAgICAgIC0tIG5vbmUgLS1cbiIpKTsKKwkgICAgb3V0X2ZsdXNoKCk7CisJfQorCWVsc2UKKwkgICAgZmlsZV9jb3VudCArPSBudW1fZmlsZXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX25hbWVzOyArK2kpCisJICAgIHZpbV9mcmVlKG5hbWVzW2ldKTsKKwlGcmVlV2lsZChudW1fZmlsZXMsIGZpbGVzKTsKKyAgICB9CisgICAgdmltX2ZyZWUoZGlyX25hbWUpOworICAgIHJldHVybiBmaWxlX2NvdW50OworfQorCisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFdJTjMyNjQpICAvKiBOZWVkIF92ZXJ5XyBsb25nIGZpbGUgbmFtZXMgKi8KKy8qCisgKiBBcHBlbmQgdGhlIGZ1bGwgcGF0aCB0byBuYW1lIHdpdGggcGF0aCBzZXBhcmF0b3JzIG1hZGUgaW50byBwZXJjZW50CisgKiBzaWducywgdG8gZGlyLiBBbiB1bm5hbWVkIGJ1ZmZlciBpcyBoYW5kbGVkIGFzICIiICg8Y3VycmVudGRpcj4vIiIpCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK21ha2VfcGVyY2VudF9zd25hbWUoZGlyLCBuYW1lKQorICAgIGNoYXJfdQkqZGlyOworICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBjaGFyX3UgKmQsICpzLCAqZiwgKnA7CisKKyAgICBmID0gZml4X2ZuYW1lKG5hbWUgIT0gTlVMTCA/IG5hbWUgOiAoY2hhcl91ICopICIiKTsKKyAgICBkID0gTlVMTDsKKyAgICBpZiAoZiAhPSBOVUxMKQorICAgIHsKKwlzID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4oZikgKyAxKSk7CisJaWYgKHMgIT0gTlVMTCkKKwl7CisJICAgIGZvciAoZCA9IHMsIHAgPSBmOyAqcDsgcCsrLCBkKyspCisJCSpkID0gdmltX2lzcGF0aHNlcCgqcCkgPyAnJScgOiAqcDsKKwkgICAgKmQgPSAwOworCSAgICBkID0gY29uY2F0X2ZuYW1lcyhkaXIsIHMsIFRSVUUpOworCSAgICB2aW1fZnJlZShzKTsKKwl9CisJdmltX2ZyZWUoZik7CisgICAgfQorICAgIHJldHVybiBkOworfQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKF9fRU1YX18pIHx8IGRlZmluZWQoVk1TKSkgJiYgKGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykpCitzdGF0aWMgaW50IHByb2Nlc3Nfc3RpbGxfcnVubmluZzsKKyNlbmRpZgorCisvKgorICogR2l2ZSBpbmZvcm1hdGlvbiBhYm91dCBhbiBleGlzdGluZyBzd2FwIGZpbGUKKyAqIFJldHVybnMgdGltZXN0YW1wICgwIHdoZW4gdW5rbm93bikuCisgKi8KKyAgICBzdGF0aWMgdGltZV90Citzd2FwZmlsZV9pbmZvKGZuYW1lKQorICAgIGNoYXJfdQkqZm5hbWU7Cit7CisgICAgc3RydWN0IHN0YXQJICAgIHN0OworICAgIGludAkJICAgIGZkOworICAgIHN0cnVjdCBibG9jazAgICBiMDsKKyAgICB0aW1lX3QJICAgIHggPSAodGltZV90KTA7CisjaWZkZWYgVU5JWAorICAgIGNoYXJfdQkgICAgdW5hbWVbQjBfVU5BTUVfU0laRV07CisjZW5kaWYKKworICAgIC8qIHByaW50IHRoZSBzd2FwIGZpbGUgZGF0ZSAqLworICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWZuYW1lLCAmc3QpICE9IC0xKQorICAgIHsKKyNpZmRlZiBVTklYCisJLyogcHJpbnQgbmFtZSBvZiBvd25lciBvZiB0aGUgZmlsZSAqLworCWlmIChtY2hfZ2V0X3VuYW1lKHN0LnN0X3VpZCwgdW5hbWUsIEIwX1VOQU1FX1NJWkUpID09IE9LKQorCXsKKwkgICAgTVNHX1BVVFMoXygiICAgICAgICAgIG93bmVkIGJ5OiAiKSk7CisJICAgIG1zZ19vdXR0cmFucyh1bmFtZSk7CisJICAgIE1TR19QVVRTKF8oIiAgIGRhdGVkOiAiKSk7CisJfQorCWVsc2UKKyNlbmRpZgorCSAgICBNU0dfUFVUUyhfKCIgICAgICAgICAgICAgZGF0ZWQ6ICIpKTsKKwl4ID0gc3Quc3RfbXRpbWU7CQkgICAgLyogTWFueCBDIGNhbid0IGRvICZzdC5zdF9tdGltZSAqLworCU1TR19QVVRTKGN0aW1lKCZ4KSk7CQkgICAgLyogaW5jbHVkZXMgJ1xuJyAqLworCisgICAgfQorCisgICAgLyoKKyAgICAgKiBwcmludCB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lCisgICAgICovCisgICAgZmQgPSBtY2hfb3BlbigoY2hhciAqKWZuYW1lLCBPX1JET05MWSB8IE9fRVhUUkEsIDApOworICAgIGlmIChmZCA+PSAwKQorICAgIHsKKwlpZiAocmVhZChmZCwgKGNoYXIgKikmYjAsIHNpemVvZihiMCkpID09IHNpemVvZihiMCkpCisJeworCSAgICBpZiAoU1RSTkNNUChiMC5iMF92ZXJzaW9uLCAiVklNIDMuMCIsIDcpID09IDApCisJICAgIHsKKwkJTVNHX1BVVFMoXygiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIpKTsKKwkgICAgfQorCSAgICBlbHNlIGlmIChiMC5iMF9pZFswXSAhPSBCTE9DSzBfSUQwIHx8IGIwLmIwX2lkWzFdICE9IEJMT0NLMF9JRDEpCisJICAgIHsKKwkJTVNHX1BVVFMoXygiICAgICAgICAgW2RvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGVdIikpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlNU0dfUFVUUyhfKCIgICAgICAgICBmaWxlIG5hbWU6ICIpKTsKKwkJaWYgKGIwLmIwX2ZuYW1lWzBdID09IE5VTCkKKwkJICAgIE1TR19QVVRTKF8oIltObyBGaWxlXSIpKTsKKwkJZWxzZQorCQkgICAgbXNnX291dHRyYW5zKGIwLmIwX2ZuYW1lKTsKKworCQlNU0dfUFVUUyhfKCJcbiAgICAgICAgICBtb2RpZmllZDogIikpOworCQlNU0dfUFVUUyhiMC5iMF9kaXJ0eSA/IF8oIllFUyIpIDogXygibm8iKSk7CisKKwkJaWYgKCooYjAuYjBfdW5hbWUpICE9IE5VTCkKKwkJeworCQkgICAgTVNHX1BVVFMoXygiXG4gICAgICAgICB1c2VyIG5hbWU6ICIpKTsKKwkJICAgIG1zZ19vdXR0cmFucyhiMC5iMF91bmFtZSk7CisJCX0KKworCQlpZiAoKihiMC5iMF9obmFtZSkgIT0gTlVMKQorCQl7CisJCSAgICBpZiAoKihiMC5iMF91bmFtZSkgIT0gTlVMKQorCQkJTVNHX1BVVFMoXygiICAgaG9zdCBuYW1lOiAiKSk7CisJCSAgICBlbHNlCisJCQlNU0dfUFVUUyhfKCJcbiAgICAgICAgIGhvc3QgbmFtZTogIikpOworCQkgICAgbXNnX291dHRyYW5zKGIwLmIwX2huYW1lKTsKKwkJfQorCisJCWlmIChjaGFyX3RvX2xvbmcoYjAuYjBfcGlkKSAhPSAwTCkKKwkJeworCQkgICAgTVNHX1BVVFMoXygiXG4gICAgICAgIHByb2Nlc3MgSUQ6ICIpKTsKKwkJICAgIG1zZ19vdXRudW0oY2hhcl90b19sb25nKGIwLmIwX3BpZCkpOworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChfX0VNWF9fKQorCQkgICAgLyogRU1YIGtpbGwoKSBub3Qgd29ya2luZyBjb3JyZWN0bHksIGl0IHNlZW1zICovCisJCSAgICBpZiAoa2lsbCgocGlkX3QpY2hhcl90b19sb25nKGIwLmIwX3BpZCksIDApID09IDApCisJCSAgICB7CisJCQlNU0dfUFVUUyhfKCIgKHN0aWxsIHJ1bm5pbmcpIikpOworIyBpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCisJCQlwcm9jZXNzX3N0aWxsX3J1bm5pbmcgPSBUUlVFOworIyBlbmRpZgorCQkgICAgfQorI2VuZGlmCisJCX0KKworCQlpZiAoYjBfbWFnaWNfd3JvbmcoJmIwKSkKKwkJeworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pCisJCSAgICBpZiAoU1RSTkNNUChiMC5iMF9obmFtZSwgIlBDICIsIDMpID09IDApCisJCQlNU0dfUFVUUyhfKCJcbiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iKSk7CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCU1TR19QVVRTKF8oIlxuICAgICAgICAgW25vdCB1c2FibGUgb24gdGhpcyBjb21wdXRlcl0iKSk7CisJCX0KKwkgICAgfQorCX0KKwllbHNlCisJICAgIE1TR19QVVRTKF8oIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iKSk7CisJY2xvc2UoZmQpOworICAgIH0KKyAgICBlbHNlCisJTVNHX1BVVFMoXygiICAgICAgICAgW2Nhbm5vdCBiZSBvcGVuZWRdIikpOworICAgIG1zZ19wdXRjaGFyKCdcbicpOworCisgICAgcmV0dXJuIHg7Cit9CisKKyAgICBzdGF0aWMgaW50CityZWNvdl9maWxlX25hbWVzKG5hbWVzLCBwYXRoLCBwcmVwZW5kX2RvdCkKKyAgICBjaGFyX3UJKipuYW1lczsKKyAgICBjaGFyX3UJKnBhdGg7CisgICAgaW50CQlwcmVwZW5kX2RvdDsKK3sKKyAgICBpbnQJCW51bV9uYW1lczsKKworI2lmZGVmIFNIT1JUX0ZOQU1FCisgICAgLyoKKyAgICAgKiAoTVMtRE9TKSBhbHdheXMgc2hvcnQgbmFtZXMKKyAgICAgKi8KKyAgICBuYW1lc1swXSA9IG1vZG5hbWUocGF0aCwgKGNoYXJfdSAqKSIuc3c/IiwgRkFMU0UpOworICAgIG51bV9uYW1lcyA9IDE7CisjZWxzZSAvKiAhU0hPUlRfRk5BTUUgKi8KKyAgICAvKgorICAgICAqIChXaW4zMiBhbmQgV2luNjQpIG5ldmVyIHNob3J0IG5hbWVzLCBidXQgZG8gcHJlcGVuZCBhIGRvdC4KKyAgICAgKiAoTm90IE1TLURPUyBvciBXaW4zMiBvciBXaW42NCkgbWF5YmUgc2hvcnQgbmFtZSwgbWF5YmUgbm90OiBUcnkgYm90aC4KKyAgICAgKiBPbmx5IHVzZSB0aGUgc2hvcnQgbmFtZSBpZiBpdCBpcyBkaWZmZXJlbnQuCisgICAgICovCisgICAgY2hhcl91CSpwOworICAgIGludAkJaTsKKyMgaWZuZGVmIFdJTjMyNjQKKyAgICBpbnQJICAgIHNob3J0bmFtZSA9IGN1cmJ1Zi0+Yl9zaG9ydG5hbWU7CisKKyAgICBjdXJidWYtPmJfc2hvcnRuYW1lID0gRkFMU0U7CisjIGVuZGlmCisKKyAgICBudW1fbmFtZXMgPSAwOworCisgICAgLyoKKyAgICAgKiBNYXkgYWxzbyBhZGQgdGhlIGZpbGUgbmFtZSB3aXRoIGEgZG90IHByZXBlbmRlZCwgZm9yIHN3YXAgZmlsZSBpbiBzYW1lCisgICAgICogZGlyIGFzIG9yaWdpbmFsIGZpbGUuCisgICAgICovCisgICAgaWYgKHByZXBlbmRfZG90KQorICAgIHsKKwluYW1lc1tudW1fbmFtZXNdID0gbW9kbmFtZShwYXRoLCAoY2hhcl91ICopIi5zdz8iLCBUUlVFKTsKKwlpZiAobmFtZXNbbnVtX25hbWVzXSA9PSBOVUxMKQorCSAgICBnb3RvIGVuZDsKKwkrK251bV9uYW1lczsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZvcm0gdGhlIG5vcm1hbCBzd2FwIGZpbGUgbmFtZSBwYXR0ZXJuIGJ5IGFwcGVuZGluZyAiLnN3PyIuCisgICAgICovCisjaWZkZWYgVk1TCisgICAgbmFtZXNbbnVtX25hbWVzXSA9IGNvbmNhdF9mbmFtZXMocGF0aCwgKGNoYXJfdSAqKSJfc3clIiwgRkFMU0UpOworI2Vsc2UKKyMgaWZkZWYgUklTQ09TCisgICAgbmFtZXNbbnVtX25hbWVzXSA9IGNvbmNhdF9mbmFtZXMocGF0aCwgKGNoYXJfdSAqKSJfc3cjIiwgRkFMU0UpOworIyBlbHNlCisgICAgbmFtZXNbbnVtX25hbWVzXSA9IGNvbmNhdF9mbmFtZXMocGF0aCwgKGNoYXJfdSAqKSIuc3c/IiwgRkFMU0UpOworIyBlbmRpZgorI2VuZGlmCisgICAgaWYgKG5hbWVzW251bV9uYW1lc10gPT0gTlVMTCkKKwlnb3RvIGVuZDsKKyAgICBpZiAobnVtX25hbWVzID49IDEpCSAgICAvKiBjaGVjayBpZiB3ZSBoYXZlIHRoZSBzYW1lIG5hbWUgdHdpY2UgKi8KKyAgICB7CisJcCA9IG5hbWVzW251bV9uYW1lcyAtIDFdOworCWkgPSAoaW50KVNUUkxFTihuYW1lc1tudW1fbmFtZXMgLSAxXSkgLSAoaW50KVNUUkxFTihuYW1lc1tudW1fbmFtZXNdKTsKKwlpZiAoaSA+IDApCisJICAgIHAgKz0gaTsJICAgIC8qIGZpbGUgbmFtZSBoYXMgYmVlbiBleHBhbmRlZCB0byBmdWxsIHBhdGggKi8KKworCWlmIChTVFJDTVAocCwgbmFtZXNbbnVtX25hbWVzXSkgIT0gMCkKKwkgICAgKytudW1fbmFtZXM7CisJZWxzZQorCSAgICB2aW1fZnJlZShuYW1lc1tudW1fbmFtZXNdKTsKKyAgICB9CisgICAgZWxzZQorCSsrbnVtX25hbWVzOworCisjIGlmbmRlZiBXSU4zMjY0CisgICAgLyoKKyAgICAgKiBBbHNvIHRyeSB3aXRoICdzaG9ydG5hbWUnIHNldCwgaW4gY2FzZSB0aGUgZmlsZSBpcyBvbiBhIERPUyBmaWxlc3lzdGVtLgorICAgICAqLworICAgIGN1cmJ1Zi0+Yl9zaG9ydG5hbWUgPSBUUlVFOworI2lmZGVmIFZNUworICAgIG5hbWVzW251bV9uYW1lc10gPSBtb2RuYW1lKHBhdGgsIChjaGFyX3UgKikiX3N3JSIsIEZBTFNFKTsKKyNlbHNlCisjIGlmZGVmIFJJU0NPUworICAgIG5hbWVzW251bV9uYW1lc10gPSBtb2RuYW1lKHBhdGgsIChjaGFyX3UgKikiX3N3IyIsIEZBTFNFKTsKKyMgZWxzZQorICAgIG5hbWVzW251bV9uYW1lc10gPSBtb2RuYW1lKHBhdGgsIChjaGFyX3UgKikiLnN3PyIsIEZBTFNFKTsKKyMgZW5kaWYKKyNlbmRpZgorICAgIGlmIChuYW1lc1tudW1fbmFtZXNdID09IE5VTEwpCisJZ290byBlbmQ7CisKKyAgICAvKgorICAgICAqIFJlbW92ZSB0aGUgb25lIGZyb20gJ3Nob3J0bmFtZScsIGlmIGl0J3MgdGhlIHNhbWUgYXMgd2l0aCAnbm9zaG9ydG5hbWUnLgorICAgICAqLworICAgIHAgPSBuYW1lc1tudW1fbmFtZXNdOworICAgIGkgPSBTVFJMRU4obmFtZXNbbnVtX25hbWVzXSkgLSBTVFJMRU4obmFtZXNbbnVtX25hbWVzIC0gMV0pOworICAgIGlmIChpID4gMCkKKwlwICs9IGk7CQkvKiBmaWxlIG5hbWUgaGFzIGJlZW4gZXhwYW5kZWQgdG8gZnVsbCBwYXRoICovCisgICAgaWYgKFNUUkNNUChuYW1lc1tudW1fbmFtZXMgLSAxXSwgcCkgPT0gMCkKKwl2aW1fZnJlZShuYW1lc1tudW1fbmFtZXNdKTsKKyAgICBlbHNlCisJKytudW1fbmFtZXM7CisjIGVuZGlmCisKK2VuZDoKKyMgaWZuZGVmIFdJTjMyNjQKKyAgICBjdXJidWYtPmJfc2hvcnRuYW1lID0gc2hvcnRuYW1lOworIyBlbmRpZgorCisjZW5kaWYgLyogIVNIT1JUX0ZOQU1FICovCisKKyAgICByZXR1cm4gbnVtX25hbWVzOworfQorCisvKgorICogc3luYyBhbGwgbWVtbGluZXMKKyAqCisgKiBJZiAnY2hlY2tfZmlsZScgaXMgVFJVRSwgY2hlY2sgaWYgb3JpZ2luYWwgZmlsZSBleGlzdHMgYW5kIHdhcyBub3QgY2hhbmdlZC4KKyAqIElmICdjaGVja19jaGFyJyBpcyBUUlVFLCBzdG9wIHN5bmNpbmcgd2hlbiBjaGFyYWN0ZXIgYmVjb21lcyBhdmFpbGFibGUsIGJ1dAorICogYWx3YXlzIHN5bmMgYXQgbGVhc3Qgb25lIGJsb2NrLgorICovCisgICAgdm9pZAorbWxfc3luY19hbGwoY2hlY2tfZmlsZSwgY2hlY2tfY2hhcikKKyAgICBpbnQJICAgIGNoZWNrX2ZpbGU7CisgICAgaW50CSAgICBjaGVja19jaGFyOworeworICAgIGJ1Zl9UCQkqYnVmOworICAgIHN0cnVjdCBzdGF0CQlzdDsKKworICAgIGZvciAoYnVmID0gZmlyc3RidWY7IGJ1ZiAhPSBOVUxMOyBidWYgPSBidWYtPmJfbmV4dCkKKyAgICB7CisJaWYgKGJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCB8fCBidWYtPmJfbWwubWxfbWZwLT5tZl9mbmFtZSA9PSBOVUxMKQorCSAgICBjb250aW51ZTsJCQkgICAgLyogbm8gZmlsZSAqLworCisJbWxfZmx1c2hfbGluZShidWYpOwkJICAgIC8qIGZsdXNoIGJ1ZmZlcmVkIGxpbmUgKi8KKwkJCQkJICAgIC8qIGZsdXNoIGxvY2tlZCBibG9jayAqLworCSh2b2lkKW1sX2ZpbmRfbGluZShidWYsIChsaW5lbnJfVCkwLCBNTF9GTFVTSCk7CisJaWYgKGJ1ZklzQ2hhbmdlZChidWYpICYmIGNoZWNrX2ZpbGUgJiYgbWZfbmVlZF90cmFucyhidWYtPmJfbWwubWxfbWZwKQorCQkJCQkJICAgICAmJiBidWYtPmJfZmZuYW1lICE9IE5VTEwpCisJeworCSAgICAvKgorCSAgICAgKiBJZiB0aGUgb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCBhbnltb3JlIG9yIGhhcyBiZWVuIGNoYW5nZWQKKwkgICAgICogY2FsbCBtbF9wcmVzZXJ2ZSgpIHRvIGdldCByaWQgb2YgYWxsIG5lZ2F0aXZlIG51bWJlcmVkIGJsb2Nrcy4KKwkgICAgICovCisJICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWJ1Zi0+Yl9mZm5hbWUsICZzdCkgPT0gLTEKKwkJICAgIHx8IHN0LnN0X210aW1lICE9IGJ1Zi0+Yl9tdGltZV9yZWFkCisJCSAgICB8fCAoc2l6ZV90KXN0LnN0X3NpemUgIT0gYnVmLT5iX29yaWdfc2l6ZSkKKwkgICAgeworCQltbF9wcmVzZXJ2ZShidWYsIEZBTFNFKTsKKwkJZGlkX2NoZWNrX3RpbWVzdGFtcHMgPSBGQUxTRTsKKwkJbmVlZF9jaGVja190aW1lc3RhbXBzID0gVFJVRTsJLyogZ2l2ZSBtZXNzYWdlIGxhdGVyICovCisJICAgIH0KKwl9CisJaWYgKGJ1Zi0+Yl9tbC5tbF9tZnAtPm1mX2RpcnR5KQorCXsKKwkgICAgKHZvaWQpbWZfc3luYyhidWYtPmJfbWwubWxfbWZwLCAoY2hlY2tfY2hhciA/IE1GU19TVE9QIDogMCkKKwkJCQkJfCAoYnVmSXNDaGFuZ2VkKGJ1ZikgPyBNRlNfRkxVU0ggOiAwKSk7CisJICAgIGlmIChjaGVja19jaGFyICYmIHVpX2NoYXJfYXZhaWwoKSkJLyogY2hhcmFjdGVyIGF2YWlsYWJsZSBub3cgKi8KKwkJYnJlYWs7CisJfQorICAgIH0KK30KKworLyoKKyAqIHN5bmMgb25lIGJ1ZmZlciwgaW5jbHVkaW5nIG5lZ2F0aXZlIGJsb2NrcworICoKKyAqIGFmdGVyIHRoaXMgYWxsIHRoZSBibG9ja3MgYXJlIGluIHRoZSBzd2FwIGZpbGUKKyAqCisgKiBVc2VkIGZvciB0aGUgOnByZXNlcnZlIGNvbW1hbmQgYW5kIHdoZW4gdGhlIG9yaWdpbmFsIGZpbGUgaGFzIGJlZW4KKyAqIGNoYW5nZWQgb3IgZGVsZXRlZC4KKyAqCisgKiB3aGVuIG1lc3NhZ2UgaXMgVFJVRSB0aGUgc3VjY2VzcyBvZiBwcmVzZXJ2aW5nIGlzIHJlcG9ydGVkCisgKi8KKyAgICB2b2lkCittbF9wcmVzZXJ2ZShidWYsIG1lc3NhZ2UpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCW1lc3NhZ2U7Cit7CisgICAgYmhkcl9UCSpocDsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIG1lbWZpbGVfVAkqbWZwID0gYnVmLT5iX21sLm1sX21mcDsKKyAgICBpbnQJCXN0YXR1czsKKyAgICBpbnQJCWdvdF9pbnRfc2F2ZSA9IGdvdF9pbnQ7CisKKyAgICBpZiAobWZwID09IE5VTEwgfHwgbWZwLT5tZl9mbmFtZSA9PSBOVUxMKQorICAgIHsKKwlpZiAobWVzc2FnZSkKKwkgICAgRU1TRyhfKCJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogV2Ugb25seSB3YW50IHRvIHN0b3Agd2hlbiBpbnRlcnJ1cHRlZCBoZXJlLCBub3Qgd2hlbiBpbnRlcnJ1cHRlZAorICAgICAqIGJlZm9yZS4gKi8KKyAgICBnb3RfaW50ID0gRkFMU0U7CisKKyAgICBtbF9mbHVzaF9saW5lKGJ1Zik7CQkJCSAgICAvKiBmbHVzaCBidWZmZXJlZCBsaW5lICovCisgICAgKHZvaWQpbWxfZmluZF9saW5lKGJ1ZiwgKGxpbmVucl9UKTAsIE1MX0ZMVVNIKTsgLyogZmx1c2ggbG9ja2VkIGJsb2NrICovCisgICAgc3RhdHVzID0gbWZfc3luYyhtZnAsIE1GU19BTEwgfCBNRlNfRkxVU0gpOworCisgICAgLyogc3RhY2sgaXMgaW52YWxpZCBhZnRlciBtZl9zeW5jKC4uLCBNRlNfQUxMKSAqLworICAgIGJ1Zi0+Yl9tbC5tbF9zdGFja190b3AgPSAwOworCisgICAgLyoKKyAgICAgKiBTb21lIG9mIHRoZSBkYXRhIGJsb2NrcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQgZnJvbSBuZWdhdGl2ZSB0bworICAgICAqIHBvc2l0aXZlIGJsb2NrIG51bWJlci4gSW4gdGhhdCBjYXNlIHRoZSBwb2ludGVyIGJsb2NrcyBuZWVkIHRvIGJlCisgICAgICogdXBkYXRlZC4KKyAgICAgKgorICAgICAqIFdlIGRvbid0IGtub3cgaW4gd2hpY2ggcG9pbnRlciBibG9jayB0aGUgcmVmZXJlbmNlcyBhcmUsIHNvIHdlIHZpc2l0CisgICAgICogYWxsIGRhdGEgYmxvY2tzIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHRyYW5zbGF0aW9ucyB0byBiZSBkb25lIChvcgorICAgICAqIHdlIGhpdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCB3aGljaCBjYW4gb25seSBoYXBwZW4gaW4gY2FzZSBhIHdyaXRlIGZhaWxzLAorICAgICAqIGUuZy4gd2hlbiBmaWxlIHN5c3RlbSBpZiBmdWxsKS4KKyAgICAgKiBtbF9maW5kX2xpbmUoKSBkb2VzIHRoZSB3b3JrIGJ5IHRyYW5zbGF0aW5nIHRoZSBuZWdhdGl2ZSBibG9jayBudW1iZXJzCisgICAgICogd2hlbiBnZXR0aW5nIHRoZSBmaXJzdCBsaW5lIG9mIGVhY2ggZGF0YSBibG9jay4KKyAgICAgKi8KKyAgICBpZiAobWZfbmVlZF90cmFucyhtZnApICYmICFnb3RfaW50KQorICAgIHsKKwlsbnVtID0gMTsKKwl3aGlsZSAobWZfbmVlZF90cmFucyhtZnApICYmIGxudW0gPD0gYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJeworCSAgICBocCA9IG1sX2ZpbmRfbGluZShidWYsIGxudW0sIE1MX0ZJTkQpOworCSAgICBpZiAoaHAgPT0gTlVMTCkKKwkgICAgeworCQlzdGF0dXMgPSBGQUlMOworCQlnb3RvIHRoZWVuZDsKKwkgICAgfQorCSAgICBDSEVDSyhidWYtPmJfbWwubWxfbG9ja2VkX2xvdyAhPSBsbnVtLCAibG93ICE9IGxudW0iKTsKKwkgICAgbG51bSA9IGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfaGlnaCArIDE7CisJfQorCSh2b2lkKW1sX2ZpbmRfbGluZShidWYsIChsaW5lbnJfVCkwLCBNTF9GTFVTSCk7CS8qIGZsdXNoIGxvY2tlZCBibG9jayAqLworCS8qIHN5bmMgdGhlIHVwZGF0ZWQgcG9pbnRlciBibG9ja3MgKi8KKwlpZiAobWZfc3luYyhtZnAsIE1GU19BTEwgfCBNRlNfRkxVU0gpID09IEZBSUwpCisJICAgIHN0YXR1cyA9IEZBSUw7CisJYnVmLT5iX21sLm1sX3N0YWNrX3RvcCA9IDA7CSAgICAvKiBzdGFjayBpcyBpbnZhbGlkIG5vdyAqLworICAgIH0KK3RoZWVuZDoKKyAgICBnb3RfaW50IHw9IGdvdF9pbnRfc2F2ZTsKKworICAgIGlmIChtZXNzYWdlKQorICAgIHsKKwlpZiAoc3RhdHVzID09IE9LKQorCSAgICBNU0coXygiRmlsZSBwcmVzZXJ2ZWQiKSk7CisJZWxzZQorCSAgICBFTVNHKF8oIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIpKTsKKyAgICB9Cit9CisKKy8qCisgKiBOT1RFOiBUaGUgcG9pbnRlciByZXR1cm5lZCBieSB0aGUgbWxfZ2V0XyooKSBmdW5jdGlvbnMgb25seSByZW1haW5zIHZhbGlkCisgKiB1bnRpbCB0aGUgbmV4dCBjYWxsIQorICogIGxpbmUxID0gbWxfZ2V0KDEpOworICogIGxpbmUyID0gbWxfZ2V0KDIpOwkvLyBsaW5lMSBpcyBub3cgaW52YWxpZCEKKyAqIE1ha2UgYSBjb3B5IG9mIHRoZSBsaW5lIGlmIG5lY2Vzc2FyeS4KKyAqLworLyoKKyAqIGdldCBhIHBvaW50ZXIgdG8gYSAocmVhZC1vbmx5IGNvcHkgb2YgYSkgbGluZQorICoKKyAqIE9uIGZhaWx1cmUgYW4gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbiBhbmQgSU9idWZmIGlzIHJldHVybmVkICh0byBhdm9pZAorICogaGF2aW5nIHRvIGNoZWNrIGZvciBlcnJvciBldmVyeXdoZXJlKS4KKyAqLworICAgIGNoYXJfdSAgKgorbWxfZ2V0KGxudW0pCisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICByZXR1cm4gbWxfZ2V0X2J1ZihjdXJidWYsIGxudW0sIEZBTFNFKTsKK30KKworLyoKKyAqIG1sX2dldF9wb3M6IGdldCBwb2ludGVyIHRvIHBvc2l0aW9uICdwb3MnCisgKi8KKyAgICBjaGFyX3UgKgorbWxfZ2V0X3Bvcyhwb3MpCisgICAgcG9zX1QJKnBvczsKK3sKKyAgICByZXR1cm4gKG1sX2dldF9idWYoY3VyYnVmLCBwb3MtPmxudW0sIEZBTFNFKSArIHBvcy0+Y29sKTsKK30KKworLyoKKyAqIG1sX2dldF9jdXJsaW5lOiBnZXQgcG9pbnRlciB0byBjdXJzb3IgbGluZS4KKyAqLworICAgIGNoYXJfdSAqCittbF9nZXRfY3VybGluZSgpCit7CisgICAgcmV0dXJuIG1sX2dldF9idWYoY3VyYnVmLCBjdXJ3aW4tPndfY3Vyc29yLmxudW0sIEZBTFNFKTsKK30KKworLyoKKyAqIG1sX2dldF9jdXJzb3I6IGdldCBwb2ludGVyIHRvIGN1cnNvciBwb3NpdGlvbgorICovCisgICAgY2hhcl91ICoKK21sX2dldF9jdXJzb3IoKQoreworICAgIHJldHVybiAobWxfZ2V0X2J1ZihjdXJidWYsIGN1cndpbi0+d19jdXJzb3IubG51bSwgRkFMU0UpICsKKwkJCQkJCQljdXJ3aW4tPndfY3Vyc29yLmNvbCk7Cit9CisKKy8qCisgKiBnZXQgYSBwb2ludGVyIHRvIGEgbGluZSBpbiBhIHNwZWNpZmljIGJ1ZmZlcgorICoKKyAqICJ3aWxsX2NoYW5nZSI6IGlmIFRSVUUgbWFyayB0aGUgYnVmZmVyIGRpcnR5IChjaGFycyBpbiB0aGUgbGluZSB3aWxsIGJlCisgKiBjaGFuZ2VkKQorICovCisgICAgY2hhcl91ICAqCittbF9nZXRfYnVmKGJ1ZiwgbG51bSwgd2lsbF9jaGFuZ2UpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJd2lsbF9jaGFuZ2U7CQkvKiBsaW5lIHdpbGwgYmUgY2hhbmdlZCAqLworeworICAgIGJoZHJfVCAgICAqaHA7CisgICAgREFUQV9CTCAqZHA7CisgICAgY2hhcl91ICAqcHRyOworCisgICAgaWYgKGxudW0gPiBidWYtPmJfbWwubWxfbGluZV9jb3VudCkJLyogaW52YWxpZCBsaW5lIG51bWJlciAqLworICAgIHsKKwlFTVNHTihfKCJFMzE1OiBtbF9nZXQ6IGludmFsaWQgbG51bTogJWxkIiksIGxudW0pOworZXJyb3JyZXQ6CisJU1RSQ1BZKElPYnVmZiwgIj8/PyIpOworCXJldHVybiBJT2J1ZmY7CisgICAgfQorICAgIGlmIChsbnVtIDw9IDApCQkJLyogcHJldGVuZCBsaW5lIDAgaXMgbGluZSAxICovCisJbG51bSA9IDE7CisKKyAgICBpZiAoYnVmLT5iX21sLm1sX21mcCA9PSBOVUxMKQkvKiB0aGVyZSBhcmUgbm8gbGluZXMgKi8KKwlyZXR1cm4gKGNoYXJfdSAqKSIiOworCisvKgorICogU2VlIGlmIGl0IGlzIHRoZSBzYW1lIGxpbmUgYXMgcmVxdWVzdGVkIGxhc3QgdGltZS4KKyAqIE90aGVyd2lzZSBtYXkgbmVlZCB0byBmbHVzaCBsYXN0IHVzZWQgbGluZS4KKyAqLworICAgIGlmIChidWYtPmJfbWwubWxfbGluZV9sbnVtICE9IGxudW0pCisgICAgeworCW1sX2ZsdXNoX2xpbmUoYnVmKTsKKworCS8qCisJICogRmluZCB0aGUgZGF0YSBibG9jayBjb250YWluaW5nIHRoZSBsaW5lLgorCSAqIFRoaXMgYWxzbyBmaWxscyB0aGUgc3RhY2sgd2l0aCB0aGUgYmxvY2tzIGZyb20gdGhlIHJvb3QgdG8gdGhlIGRhdGEKKwkgKiBibG9jayBhbmQgcmVsZWFzZXMgYW55IGxvY2tlZCBibG9jay4KKwkgKi8KKwlpZiAoKGhwID0gbWxfZmluZF9saW5lKGJ1ZiwgbG51bSwgTUxfRklORCkpID09IE5VTEwpCisJeworCSAgICBFTVNHTihfKCJFMzE2OiBtbF9nZXQ6IGNhbm5vdCBmaW5kIGxpbmUgJWxkIiksIGxudW0pOworCSAgICBnb3RvIGVycm9ycmV0OworCX0KKworCWRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworCisJcHRyID0gKGNoYXJfdSAqKWRwICsgKChkcC0+ZGJfaW5kZXhbbG51bSAtIGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbG93XSkgJiBEQl9JTkRFWF9NQVNLKTsKKwlidWYtPmJfbWwubWxfbGluZV9wdHIgPSBwdHI7CisJYnVmLT5iX21sLm1sX2xpbmVfbG51bSA9IGxudW07CisJYnVmLT5iX21sLm1sX2ZsYWdzICY9IH5NTF9MSU5FX0RJUlRZOworICAgIH0KKyAgICBpZiAod2lsbF9jaGFuZ2UpCisJYnVmLT5iX21sLm1sX2ZsYWdzIHw9IChNTF9MT0NLRURfRElSVFkgfCBNTF9MT0NLRURfUE9TKTsKKworICAgIHJldHVybiBidWYtPmJfbWwubWxfbGluZV9wdHI7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIGxpbmUgdGhhdCB3YXMganVzdCBvYnRhaW5lZCBieSBhIGNhbGwgdG8gbWxfZ2V0CisgKiBpcyBpbiBhbGxvY2F0ZWQgbWVtb3J5LgorICovCisgICAgaW50CittbF9saW5lX2FsbG9jZWQoKQoreworICAgIHJldHVybiAoY3VyYnVmLT5iX21sLm1sX2ZsYWdzICYgTUxfTElORV9ESVJUWSk7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBsaW5lIGFmdGVyIGxudW0gKG1heSBiZSAwIHRvIGluc2VydCBhIGxpbmUgaW4gZnJvbnQgb2YgdGhlIGZpbGUpLgorICogImxpbmUiIGRvZXMgbm90IG5lZWQgdG8gYmUgYWxsb2NhdGVkLCBidXQgY2FuJ3QgYmUgYW5vdGhlciBsaW5lIGluIGEKKyAqIGJ1ZmZlciwgdW5sb2NraW5nIG1heSBtYWtlIGl0IGludmFsaWQuCisgKgorICogICBuZXdmaWxlOiBUUlVFIHdoZW4gc3RhcnRpbmcgdG8gZWRpdCBhIG5ldyBmaWxlLCBtZWFuaW5nIHRoYXQgcGVfb2xkX2xudW0KKyAqCQl3aWxsIGJlIHNldCBmb3IgcmVjb3ZlcnkKKyAqIENoZWNrOiBUaGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHByb2JhYmx5IGFsc28gY2FsbAorICogYXBwZW5kZWRfbGluZXMoKS4KKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK21sX2FwcGVuZChsbnVtLCBsaW5lLCBsZW4sIG5ld2ZpbGUpCisgICAgbGluZW5yX1QJbG51bTsJCS8qIGFwcGVuZCBhZnRlciB0aGlzIGxpbmUgKGNhbiBiZSAwKSAqLworICAgIGNoYXJfdQkqbGluZTsJCS8qIHRleHQgb2YgdGhlIG5ldyBsaW5lICovCisgICAgY29sbnJfVAlsZW47CQkvKiBsZW5ndGggb2YgbmV3IGxpbmUsIGluY2x1ZGluZyBOVUwsIG9yIDAgKi8KKyAgICBpbnQJCW5ld2ZpbGU7CS8qIGZsYWcsIHNlZSBhYm92ZSAqLworeworICAgIC8qIFdoZW4gc3RhcnRpbmcgdXAsIHdlIG1pZ2h0IHN0aWxsIG5lZWQgdG8gY3JlYXRlIHRoZSBtZW1maWxlICovCisgICAgaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCAmJiBvcGVuX2J1ZmZlcihGQUxTRSwgTlVMTCkgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIGlmIChjdXJidWYtPmJfbWwubWxfbGluZV9sbnVtICE9IDApCisJbWxfZmx1c2hfbGluZShjdXJidWYpOworICAgIHJldHVybiBtbF9hcHBlbmRfaW50KGN1cmJ1ZiwgbG51bSwgbGluZSwgbGVuLCBuZXdmaWxlLCBGQUxTRSk7Cit9CisKKyAgICBzdGF0aWMgaW50CittbF9hcHBlbmRfaW50KGJ1ZiwgbG51bSwgbGluZSwgbGVuLCBuZXdmaWxlLCBtYXJrKQorICAgIGJ1Zl9UCSpidWY7CisgICAgbGluZW5yX1QJbG51bTsJCS8qIGFwcGVuZCBhZnRlciB0aGlzIGxpbmUgKGNhbiBiZSAwKSAqLworICAgIGNoYXJfdQkqbGluZTsJCS8qIHRleHQgb2YgdGhlIG5ldyBsaW5lICovCisgICAgY29sbnJfVAlsZW47CQkvKiBsZW5ndGggb2YgbGluZSwgaW5jbHVkaW5nIE5VTCwgb3IgMCAqLworICAgIGludAkJbmV3ZmlsZTsJLyogZmxhZywgc2VlIGFib3ZlICovCisgICAgaW50CQltYXJrOwkJLyogbWFyayB0aGUgbmV3IGxpbmUgKi8KK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQlsaW5lX2NvdW50OwkvKiBudW1iZXIgb2YgaW5kZXhlcyBpbiBjdXJyZW50IGJsb2NrICovCisgICAgaW50CQlvZmZzZXQ7CisgICAgaW50CQlmcm9tLCB0bzsKKyAgICBpbnQJCXNwYWNlX25lZWRlZDsJLyogc3BhY2UgbmVlZGVkIGZvciBuZXcgbGluZSAqLworICAgIGludAkJcGFnZV9zaXplOworICAgIGludAkJcGFnZV9jb3VudDsKKyAgICBpbnQJCWRiX2lkeDsJCS8qIGluZGV4IGZvciBsbnVtIGluIGRhdGEgYmxvY2sgKi8KKyAgICBiaGRyX1QJKmhwOworICAgIG1lbWZpbGVfVAkqbWZwOworICAgIERBVEFfQkwJKmRwOworICAgIFBUUl9CTAkqcHA7CisgICAgaW5mb3B0cl9UCSppcDsKKworCQkJCQkvKiBsbnVtIG91dCBvZiByYW5nZSAqLworICAgIGlmIChsbnVtID4gYnVmLT5iX21sLm1sX2xpbmVfY291bnQgfHwgYnVmLT5iX21sLm1sX21mcCA9PSBOVUxMKQorCXJldHVybiBGQUlMOworCisgICAgaWYgKGxvd2VzdF9tYXJrZWQgJiYgbG93ZXN0X21hcmtlZCA+IGxudW0pCisJbG93ZXN0X21hcmtlZCA9IGxudW0gKyAxOworCisgICAgaWYgKGxlbiA9PSAwKQorCWxlbiA9IChjb2xucl9UKVNUUkxFTihsaW5lKSArIDE7CS8qIHNwYWNlIG5lZWRlZCBmb3IgdGhlIHRleHQgKi8KKyAgICBzcGFjZV9uZWVkZWQgPSBsZW4gKyBJTkRFWF9TSVpFOwkvKiBzcGFjZSBuZWVkZWQgZm9yIHRleHQgKyBpbmRleCAqLworCisgICAgbWZwID0gYnVmLT5iX21sLm1sX21mcDsKKyAgICBwYWdlX3NpemUgPSBtZnAtPm1mX3BhZ2Vfc2l6ZTsKKworLyoKKyAqIGZpbmQgdGhlIGRhdGEgYmxvY2sgY29udGFpbmluZyB0aGUgcHJldmlvdXMgbGluZQorICogVGhpcyBhbHNvIGZpbGxzIHRoZSBzdGFjayB3aXRoIHRoZSBibG9ja3MgZnJvbSB0aGUgcm9vdCB0byB0aGUgZGF0YSBibG9jaworICogVGhpcyBhbHNvIHJlbGVhc2VzIGFueSBsb2NrZWQgYmxvY2suCisgKi8KKyAgICBpZiAoKGhwID0gbWxfZmluZF9saW5lKGJ1ZiwgbG51bSA9PSAwID8gKGxpbmVucl9UKTEgOiBsbnVtLAorCQkJCQkJCSAgTUxfSU5TRVJUKSkgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIGJ1Zi0+Yl9tbC5tbF9mbGFncyAmPSB+TUxfRU1QVFk7CisKKyAgICBpZiAobG51bSA9PSAwKQkJLyogZ290IGxpbmUgb25lIGluc3RlYWQsIGNvcnJlY3QgZGJfaWR4ICovCisJZGJfaWR4ID0gLTE7CQkvKiBjYXJlZnVsLCBpdCBpcyBuZWdhdGl2ZSEgKi8KKyAgICBlbHNlCisJZGJfaWR4ID0gbG51bSAtIGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbG93OworCQkvKiBnZXQgbGluZSBjb3VudCBiZWZvcmUgdGhlIGluc2VydGlvbiAqLworICAgIGxpbmVfY291bnQgPSBidWYtPmJfbWwubWxfbG9ja2VkX2hpZ2ggLSBidWYtPmJfbWwubWxfbG9ja2VkX2xvdzsKKworICAgIGRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworCisvKgorICogSWYKKyAqIC0gdGhlcmUgaXMgbm90IGVub3VnaCByb29tIGluIHRoZSBjdXJyZW50IGJsb2NrCisgKiAtIGFwcGVuZGluZyB0byB0aGUgbGFzdCBsaW5lIGluIHRoZSBibG9jaworICogLSBub3QgYXBwZW5kaW5nIHRvIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGZpbGUKKyAqIGluc2VydCBpbiBmcm9udCBvZiB0aGUgbmV4dCBibG9jay4KKyAqLworICAgIGlmICgoaW50KWRwLT5kYl9mcmVlIDwgc3BhY2VfbmVlZGVkICYmIGRiX2lkeCA9PSBsaW5lX2NvdW50IC0gMQorCQkJCQkgICAgJiYgbG51bSA8IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorICAgIHsKKwkvKgorCSAqIE5vdyB0aGF0IHRoZSBsaW5lIGlzIG5vdCBnb2luZyB0byBiZSBpbnNlcnRlZCBpbiB0aGUgYmxvY2sgdGhhdCB3ZQorCSAqIGV4cGVjdGVkLCB0aGUgbGluZSBjb3VudCBoYXMgdG8gYmUgYWRqdXN0ZWQgaW4gdGhlIHBvaW50ZXIgYmxvY2tzCisJICogYnkgdXNpbmcgbWxfbG9ja2VkX2xpbmVhZGQuCisJICovCisJLS0oYnVmLT5iX21sLm1sX2xvY2tlZF9saW5lYWRkKTsKKwktLShidWYtPmJfbWwubWxfbG9ja2VkX2hpZ2gpOworCWlmICgoaHAgPSBtbF9maW5kX2xpbmUoYnVmLCBsbnVtICsgMSwgTUxfSU5TRVJUKSkgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBSUw7CisKKwlkYl9pZHggPSAtMTsJCSAgICAvKiBjYXJlZnVsLCBpdCBpcyBuZWdhdGl2ZSEgKi8KKwkJICAgIC8qIGdldCBsaW5lIGNvdW50IGJlZm9yZSB0aGUgaW5zZXJ0aW9uICovCisJbGluZV9jb3VudCA9IGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfaGlnaCAtIGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbG93OworCUNIRUNLKGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbG93ICE9IGxudW0gKyAxLCAibG9ja2VkX2xvdyAhPSBsbnVtICsgMSIpOworCisJZHAgPSAoREFUQV9CTCAqKShocC0+YmhfZGF0YSk7CisgICAgfQorCisgICAgKytidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKworICAgIGlmICgoaW50KWRwLT5kYl9mcmVlID49IHNwYWNlX25lZWRlZCkJLyogZW5vdWdoIHJvb20gaW4gZGF0YSBibG9jayAqLworICAgIHsKKy8qCisgKiBJbnNlcnQgbmV3IGxpbmUgaW4gZXhpc3RpbmcgZGF0YSBibG9jaywgb3IgaW4gZGF0YSBibG9jayBhbGxvY2F0ZWQgYWJvdmUuCisgKi8KKwlkcC0+ZGJfdHh0X3N0YXJ0IC09IGxlbjsKKwlkcC0+ZGJfZnJlZSAtPSBzcGFjZV9uZWVkZWQ7CisJKysoZHAtPmRiX2xpbmVfY291bnQpOworCisJLyoKKwkgKiBtb3ZlIHRoZSB0ZXh0IG9mIHRoZSBsaW5lcyB0aGF0IGZvbGxvdyB0byB0aGUgZnJvbnQKKwkgKiBhZGp1c3QgdGhlIGluZGV4ZXMgb2YgdGhlIGxpbmVzIHRoYXQgZm9sbG93CisJICovCisJaWYgKGxpbmVfY291bnQgPiBkYl9pZHggKyAxKQkgICAgLyogaWYgdGhlcmUgYXJlIGZvbGxvd2luZyBsaW5lcyAqLworCXsKKwkgICAgLyoKKwkgICAgICogT2Zmc2V0IGlzIHRoZSBzdGFydCBvZiB0aGUgcHJldmlvdXMgbGluZS4KKwkgICAgICogVGhpcyB3aWxsIGJlY29tZSB0aGUgY2hhcmFjdGVyIGp1c3QgYWZ0ZXIgdGhlIG5ldyBsaW5lLgorCSAgICAgKi8KKwkgICAgaWYgKGRiX2lkeCA8IDApCisJCW9mZnNldCA9IGRwLT5kYl90eHRfZW5kOworCSAgICBlbHNlCisJCW9mZnNldCA9ICgoZHAtPmRiX2luZGV4W2RiX2lkeF0pICYgREJfSU5ERVhfTUFTSyk7CisJICAgIG1jaF9tZW1tb3ZlKChjaGFyICopZHAgKyBkcC0+ZGJfdHh0X3N0YXJ0LAorCQkJCQkgIChjaGFyICopZHAgKyBkcC0+ZGJfdHh0X3N0YXJ0ICsgbGVuLAorCQkJCSAoc2l6ZV90KShvZmZzZXQgLSAoZHAtPmRiX3R4dF9zdGFydCArIGxlbikpKTsKKwkgICAgZm9yIChpID0gbGluZV9jb3VudCAtIDE7IGkgPiBkYl9pZHg7IC0taSkKKwkJZHAtPmRiX2luZGV4W2kgKyAxXSA9IGRwLT5kYl9pbmRleFtpXSAtIGxlbjsKKwkgICAgZHAtPmRiX2luZGV4W2RiX2lkeCArIDFdID0gb2Zmc2V0IC0gbGVuOworCX0KKwllbHNlCQkJCSAgICAvKiBhZGQgbGluZSBhdCB0aGUgZW5kICovCisJICAgIGRwLT5kYl9pbmRleFtkYl9pZHggKyAxXSA9IGRwLT5kYl90eHRfc3RhcnQ7CisKKwkvKgorCSAqIGNvcHkgdGhlIHRleHQgaW50byB0aGUgYmxvY2sKKwkgKi8KKwltY2hfbWVtbW92ZSgoY2hhciAqKWRwICsgZHAtPmRiX2luZGV4W2RiX2lkeCArIDFdLCBsaW5lLCAoc2l6ZV90KWxlbik7CisJaWYgKG1hcmspCisJICAgIGRwLT5kYl9pbmRleFtkYl9pZHggKyAxXSB8PSBEQl9NQVJLRUQ7CisKKwkvKgorCSAqIE1hcmsgdGhlIGJsb2NrIGRpcnR5LgorCSAqLworCWJ1Zi0+Yl9tbC5tbF9mbGFncyB8PSBNTF9MT0NLRURfRElSVFk7CisJaWYgKCFuZXdmaWxlKQorCSAgICBidWYtPmJfbWwubWxfZmxhZ3MgfD0gTUxfTE9DS0VEX1BPUzsKKyAgICB9CisgICAgZWxzZQkgICAgLyogbm90IGVub3VnaCBzcGFjZSBpbiBkYXRhIGJsb2NrICovCisgICAgeworLyoKKyAqIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSB3ZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBkYXRhIGJsb2NrIGFuZCBjb3B5IHNvbWUKKyAqIGxpbmVzIGludG8gaXQuCisgKiBUaGVuIHdlIGhhdmUgdG8gaW5zZXJ0IGFuIGVudHJ5IGluIHRoZSBwb2ludGVyIGJsb2NrLgorICogSWYgdGhpcyBwb2ludGVyIGJsb2NrIGFsc28gaXMgZnVsbCwgd2UgZ28gdXAgYW5vdGhlciBibG9jaywgYW5kIHNvIG9uLCB1cAorICogdG8gdGhlIHJvb3QgaWYgbmVjZXNzYXJ5LgorICogVGhlIGxpbmUgY291bnRzIGluIHRoZSBwb2ludGVyIGJsb2NrcyBoYXZlIGFscmVhZHkgYmVlbiBhZGp1c3RlZCBieQorICogbWxfZmluZF9saW5lKCkuCisgKi8KKwlsb25nCSAgICBsaW5lX2NvdW50X2xlZnQsIGxpbmVfY291bnRfcmlnaHQ7CisJaW50CSAgICBwYWdlX2NvdW50X2xlZnQsIHBhZ2VfY291bnRfcmlnaHQ7CisJYmhkcl9UCSAgICAqaHBfbGVmdDsKKwliaGRyX1QJICAgICpocF9yaWdodDsKKwliaGRyX1QJICAgICpocF9uZXc7CisJaW50CSAgICBsaW5lc19tb3ZlZDsKKwlpbnQJICAgIGRhdGFfbW92ZWQgPSAwOwkgICAgLyogaW5pdCB0byBzaHV0IHVwIGdjYyAqLworCWludAkgICAgdG90YWxfbW92ZWQgPSAwOwkgICAgLyogaW5pdCB0byBzaHV0IHVwIGdjYyAqLworCURBVEFfQkwJICAgICpkcF9yaWdodCwgKmRwX2xlZnQ7CisJaW50CSAgICBzdGFja19pZHg7CisJaW50CSAgICBpbl9sZWZ0OworCWludAkgICAgbGluZWFkZDsKKwlibG9ja25yX1QgICBibnVtX2xlZnQsIGJudW1fcmlnaHQ7CisJbGluZW5yX1QgICAgbG51bV9sZWZ0LCBsbnVtX3JpZ2h0OworCWludAkgICAgcGJfaWR4OworCVBUUl9CTAkgICAgKnBwX25ldzsKKworCS8qCisJICogV2UgYXJlIGdvaW5nIHRvIGFsbG9jYXRlIGEgbmV3IGRhdGEgYmxvY2suIERlcGVuZGluZyBvbiB0aGUKKwkgKiBzaXR1YXRpb24gaXQgd2lsbCBiZSBwdXQgdG8gdGhlIGxlZnQgb3IgcmlnaHQgb2YgdGhlIGV4aXN0aW5nCisJICogYmxvY2suICBJZiBwb3NzaWJsZSB3ZSBwdXQgdGhlIG5ldyBsaW5lIGluIHRoZSBsZWZ0IGJsb2NrIGFuZCBtb3ZlCisJICogdGhlIGxpbmVzIGFmdGVyIGl0IHRvIHRoZSByaWdodCBibG9jay4gT3RoZXJ3aXNlIHRoZSBuZXcgbGluZSBpcworCSAqIGFsc28gcHV0IGluIHRoZSByaWdodCBibG9jay4gVGhpcyBtZXRob2QgaXMgbW9yZSBlZmZpY2llbnQgd2hlbgorCSAqIGluc2VydGluZyBhIGxvdCBvZiBsaW5lcyBhdCBvbmUgcGxhY2UuCisJICovCisJaWYgKGRiX2lkeCA8IDApCQkvKiBsZWZ0IGJsb2NrIGlzIG5ldywgcmlnaHQgYmxvY2sgaXMgZXhpc3RpbmcgKi8KKwl7CisJICAgIGxpbmVzX21vdmVkID0gMDsKKwkgICAgaW5fbGVmdCA9IFRSVUU7CisJICAgIC8qIHNwYWNlX25lZWRlZCBkb2VzIG5vdCBjaGFuZ2UgKi8KKwl9CisJZWxzZQkJCS8qIGxlZnQgYmxvY2sgaXMgZXhpc3RpbmcsIHJpZ2h0IGJsb2NrIGlzIG5ldyAqLworCXsKKwkgICAgbGluZXNfbW92ZWQgPSBsaW5lX2NvdW50IC0gZGJfaWR4IC0gMTsKKwkgICAgaWYgKGxpbmVzX21vdmVkID09IDApCisJCWluX2xlZnQgPSBGQUxTRTsJLyogcHV0IG5ldyBsaW5lIGluIHJpZ2h0IGJsb2NrICovCisJCQkJCS8qIHNwYWNlX25lZWRlZCBkb2VzIG5vdCBjaGFuZ2UgKi8KKwkgICAgZWxzZQorCSAgICB7CisJCWRhdGFfbW92ZWQgPSAoKGRwLT5kYl9pbmRleFtkYl9pZHhdKSAmIERCX0lOREVYX01BU0spIC0KKwkJCQkJCQkgICAgZHAtPmRiX3R4dF9zdGFydDsKKwkJdG90YWxfbW92ZWQgPSBkYXRhX21vdmVkICsgbGluZXNfbW92ZWQgKiBJTkRFWF9TSVpFOworCQlpZiAoKGludClkcC0+ZGJfZnJlZSArIHRvdGFsX21vdmVkID49IHNwYWNlX25lZWRlZCkKKwkJeworCQkgICAgaW5fbGVmdCA9IFRSVUU7CS8qIHB1dCBuZXcgbGluZSBpbiBsZWZ0IGJsb2NrICovCisJCSAgICBzcGFjZV9uZWVkZWQgPSB0b3RhbF9tb3ZlZDsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGluX2xlZnQgPSBGQUxTRTsJICAgIC8qIHB1dCBuZXcgbGluZSBpbiByaWdodCBibG9jayAqLworCQkgICAgc3BhY2VfbmVlZGVkICs9IHRvdGFsX21vdmVkOworCQl9CisJICAgIH0KKwl9CisKKwlwYWdlX2NvdW50ID0gKChzcGFjZV9uZWVkZWQgKyBIRUFERVJfU0laRSkgKyBwYWdlX3NpemUgLSAxKSAvIHBhZ2Vfc2l6ZTsKKwlpZiAoKGhwX25ldyA9IG1sX25ld19kYXRhKG1mcCwgbmV3ZmlsZSwgcGFnZV9jb3VudCkpID09IE5VTEwpCisJeworCQkJLyogY29ycmVjdCBsaW5lIGNvdW50cyBpbiBwb2ludGVyIGJsb2NrcyAqLworCSAgICAtLShidWYtPmJfbWwubWxfbG9ja2VkX2xpbmVhZGQpOworCSAgICAtLShidWYtPmJfbWwubWxfbG9ja2VkX2hpZ2gpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisJaWYgKGRiX2lkeCA8IDApCQkvKiBsZWZ0IGJsb2NrIGlzIG5ldyAqLworCXsKKwkgICAgaHBfbGVmdCA9IGhwX25ldzsKKwkgICAgaHBfcmlnaHQgPSBocDsKKwkgICAgbGluZV9jb3VudF9sZWZ0ID0gMDsKKwkgICAgbGluZV9jb3VudF9yaWdodCA9IGxpbmVfY291bnQ7CisJfQorCWVsc2UJCQkvKiByaWdodCBibG9jayBpcyBuZXcgKi8KKwl7CisJICAgIGhwX2xlZnQgPSBocDsKKwkgICAgaHBfcmlnaHQgPSBocF9uZXc7CisJICAgIGxpbmVfY291bnRfbGVmdCA9IGxpbmVfY291bnQ7CisJICAgIGxpbmVfY291bnRfcmlnaHQgPSAwOworCX0KKwlkcF9yaWdodCA9IChEQVRBX0JMICopKGhwX3JpZ2h0LT5iaF9kYXRhKTsKKwlkcF9sZWZ0ID0gKERBVEFfQkwgKikoaHBfbGVmdC0+YmhfZGF0YSk7CisJYm51bV9sZWZ0ID0gaHBfbGVmdC0+YmhfYm51bTsKKwlibnVtX3JpZ2h0ID0gaHBfcmlnaHQtPmJoX2JudW07CisJcGFnZV9jb3VudF9sZWZ0ID0gaHBfbGVmdC0+YmhfcGFnZV9jb3VudDsKKwlwYWdlX2NvdW50X3JpZ2h0ID0gaHBfcmlnaHQtPmJoX3BhZ2VfY291bnQ7CisKKwkvKgorCSAqIE1heSBtb3ZlIHRoZSBuZXcgbGluZSBpbnRvIHRoZSByaWdodC9uZXcgYmxvY2suCisJICovCisJaWYgKCFpbl9sZWZ0KQorCXsKKwkgICAgZHBfcmlnaHQtPmRiX3R4dF9zdGFydCAtPSBsZW47CisJICAgIGRwX3JpZ2h0LT5kYl9mcmVlIC09IGxlbiArIElOREVYX1NJWkU7CisJICAgIGRwX3JpZ2h0LT5kYl9pbmRleFswXSA9IGRwX3JpZ2h0LT5kYl90eHRfc3RhcnQ7CisJICAgIGlmIChtYXJrKQorCQlkcF9yaWdodC0+ZGJfaW5kZXhbMF0gfD0gREJfTUFSS0VEOworCisJICAgIG1jaF9tZW1tb3ZlKChjaGFyICopZHBfcmlnaHQgKyBkcF9yaWdodC0+ZGJfdHh0X3N0YXJ0LAorCQkJCQkJCSAgIGxpbmUsIChzaXplX3QpbGVuKTsKKwkgICAgKytsaW5lX2NvdW50X3JpZ2h0OworCX0KKwkvKgorCSAqIG1heSBtb3ZlIGxpbmVzIGZyb20gdGhlIGxlZnQvb2xkIGJsb2NrIHRvIHRoZSByaWdodC9uZXcgb25lLgorCSAqLworCWlmIChsaW5lc19tb3ZlZCkKKwl7CisJICAgIC8qCisJICAgICAqLworCSAgICBkcF9yaWdodC0+ZGJfdHh0X3N0YXJ0IC09IGRhdGFfbW92ZWQ7CisJICAgIGRwX3JpZ2h0LT5kYl9mcmVlIC09IHRvdGFsX21vdmVkOworCSAgICBtY2hfbWVtbW92ZSgoY2hhciAqKWRwX3JpZ2h0ICsgZHBfcmlnaHQtPmRiX3R4dF9zdGFydCwKKwkJCShjaGFyICopZHBfbGVmdCArIGRwX2xlZnQtPmRiX3R4dF9zdGFydCwKKwkJCShzaXplX3QpZGF0YV9tb3ZlZCk7CisJICAgIG9mZnNldCA9IGRwX3JpZ2h0LT5kYl90eHRfc3RhcnQgLSBkcF9sZWZ0LT5kYl90eHRfc3RhcnQ7CisJICAgIGRwX2xlZnQtPmRiX3R4dF9zdGFydCArPSBkYXRhX21vdmVkOworCSAgICBkcF9sZWZ0LT5kYl9mcmVlICs9IHRvdGFsX21vdmVkOworCisJICAgIC8qCisJICAgICAqIHVwZGF0ZSBpbmRleGVzIGluIHRoZSBuZXcgYmxvY2sKKwkgICAgICovCisJICAgIGZvciAodG8gPSBsaW5lX2NvdW50X3JpZ2h0LCBmcm9tID0gZGJfaWR4ICsgMTsKKwkJCQkJIGZyb20gPCBsaW5lX2NvdW50X2xlZnQ7ICsrZnJvbSwgKyt0bykKKwkJZHBfcmlnaHQtPmRiX2luZGV4W3RvXSA9IGRwLT5kYl9pbmRleFtmcm9tXSArIG9mZnNldDsKKwkgICAgbGluZV9jb3VudF9yaWdodCArPSBsaW5lc19tb3ZlZDsKKwkgICAgbGluZV9jb3VudF9sZWZ0IC09IGxpbmVzX21vdmVkOworCX0KKworCS8qCisJICogTWF5IG1vdmUgdGhlIG5ldyBsaW5lIGludG8gdGhlIGxlZnQgKG9sZCBvciBuZXcpIGJsb2NrLgorCSAqLworCWlmIChpbl9sZWZ0KQorCXsKKwkgICAgZHBfbGVmdC0+ZGJfdHh0X3N0YXJ0IC09IGxlbjsKKwkgICAgZHBfbGVmdC0+ZGJfZnJlZSAtPSBsZW4gKyBJTkRFWF9TSVpFOworCSAgICBkcF9sZWZ0LT5kYl9pbmRleFtsaW5lX2NvdW50X2xlZnRdID0gZHBfbGVmdC0+ZGJfdHh0X3N0YXJ0OworCSAgICBpZiAobWFyaykKKwkJZHBfbGVmdC0+ZGJfaW5kZXhbbGluZV9jb3VudF9sZWZ0XSB8PSBEQl9NQVJLRUQ7CisJICAgIG1jaF9tZW1tb3ZlKChjaGFyICopZHBfbGVmdCArIGRwX2xlZnQtPmRiX3R4dF9zdGFydCwKKwkJCQkJCQkgICBsaW5lLCAoc2l6ZV90KWxlbik7CisJICAgICsrbGluZV9jb3VudF9sZWZ0OworCX0KKworCWlmIChkYl9pZHggPCAwKQkJLyogbGVmdCBibG9jayBpcyBuZXcgKi8KKwl7CisJICAgIGxudW1fbGVmdCA9IGxudW0gKyAxOworCSAgICBsbnVtX3JpZ2h0ID0gMDsKKwl9CisJZWxzZQkJCS8qIHJpZ2h0IGJsb2NrIGlzIG5ldyAqLworCXsKKwkgICAgbG51bV9sZWZ0ID0gMDsKKwkgICAgaWYgKGluX2xlZnQpCisJCWxudW1fcmlnaHQgPSBsbnVtICsgMjsKKwkgICAgZWxzZQorCQlsbnVtX3JpZ2h0ID0gbG51bSArIDE7CisJfQorCWRwX2xlZnQtPmRiX2xpbmVfY291bnQgPSBsaW5lX2NvdW50X2xlZnQ7CisJZHBfcmlnaHQtPmRiX2xpbmVfY291bnQgPSBsaW5lX2NvdW50X3JpZ2h0OworCisJLyoKKwkgKiByZWxlYXNlIHRoZSB0d28gZGF0YSBibG9ja3MKKwkgKiBUaGUgbmV3IG9uZSAoaHBfbmV3KSBhbHJlYWR5IGhhcyBhIGNvcnJlY3QgYmxvY2tudW1iZXIuCisJICogVGhlIG9sZCBvbmUgKGhwLCBpbiBtbF9sb2NrZWQpIGdldHMgYSBwb3NpdGl2ZSBibG9ja251bWJlciBpZgorCSAqIHdlIGNoYW5nZWQgaXQgYW5kIHdlIGFyZSBub3QgZWRpdGluZyBhIG5ldyBmaWxlLgorCSAqLworCWlmIChsaW5lc19tb3ZlZCB8fCBpbl9sZWZ0KQorCSAgICBidWYtPmJfbWwubWxfZmxhZ3MgfD0gTUxfTE9DS0VEX0RJUlRZOworCWlmICghbmV3ZmlsZSAmJiBkYl9pZHggPj0gMCAmJiBpbl9sZWZ0KQorCSAgICBidWYtPmJfbWwubWxfZmxhZ3MgfD0gTUxfTE9DS0VEX1BPUzsKKwltZl9wdXQobWZwLCBocF9uZXcsIFRSVUUsIEZBTFNFKTsKKworCS8qCisJICogZmx1c2ggdGhlIG9sZCBkYXRhIGJsb2NrCisJICogc2V0IG1sX2xvY2tlZF9saW5lYWRkIHRvIDAsIGJlY2F1c2UgdGhlIHVwZGF0aW5nIG9mIHRoZQorCSAqIHBvaW50ZXIgYmxvY2tzIGlzIGRvbmUgYmVsb3cKKwkgKi8KKwlsaW5lYWRkID0gYnVmLT5iX21sLm1sX2xvY2tlZF9saW5lYWRkOworCWJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbGluZWFkZCA9IDA7CisJbWxfZmluZF9saW5lKGJ1ZiwgKGxpbmVucl9UKTAsIE1MX0ZMVVNIKTsgICAvKiBmbHVzaCBkYXRhIGJsb2NrICovCisKKwkvKgorCSAqIHVwZGF0ZSBwb2ludGVyIGJsb2NrcyBmb3IgdGhlIG5ldyBkYXRhIGJsb2NrCisJICovCisJZm9yIChzdGFja19pZHggPSBidWYtPmJfbWwubWxfc3RhY2tfdG9wIC0gMTsgc3RhY2tfaWR4ID49IDA7CisJCQkJCQkJCSAgLS1zdGFja19pZHgpCisJeworCSAgICBpcCA9ICYoYnVmLT5iX21sLm1sX3N0YWNrW3N0YWNrX2lkeF0pOworCSAgICBwYl9pZHggPSBpcC0+aXBfaW5kZXg7CisJICAgIGlmICgoaHAgPSBtZl9nZXQobWZwLCBpcC0+aXBfYm51bSwgMSkpID09IE5VTEwpCisJCXJldHVybiBGQUlMOworCSAgICBwcCA9IChQVFJfQkwgKikoaHAtPmJoX2RhdGEpOyAgIC8qIG11c3QgYmUgcG9pbnRlciBibG9jayAqLworCSAgICBpZiAocHAtPnBiX2lkICE9IFBUUl9JRCkKKwkgICAgeworCQlFTVNHKF8oIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIpKTsKKwkJbWZfcHV0KG1mcCwgaHAsIEZBTFNFLCBGQUxTRSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJICAgIC8qCisJICAgICAqIFRPRE86IElmIHRoZSBwb2ludGVyIGJsb2NrIGlzIGZ1bGwgYW5kIHdlIGFyZSBhZGRpbmcgYXQgdGhlIGVuZAorCSAgICAgKiB0cnkgdG8gaW5zZXJ0IGluIGZyb250IG9mIHRoZSBuZXh0IGJsb2NrCisJICAgICAqLworCSAgICAvKiBibG9jayBub3QgZnVsbCwgYWRkIG9uZSBlbnRyeSAqLworCSAgICBpZiAocHAtPnBiX2NvdW50IDwgcHAtPnBiX2NvdW50X21heCkKKwkgICAgeworCQlpZiAocGJfaWR4ICsgMSA8IChpbnQpcHAtPnBiX2NvdW50KQorCQkgICAgbWNoX21lbW1vdmUoJnBwLT5wYl9wb2ludGVyW3BiX2lkeCArIDJdLAorCQkJCSZwcC0+cGJfcG9pbnRlcltwYl9pZHggKyAxXSwKKwkJCShzaXplX3QpKHBwLT5wYl9jb3VudCAtIHBiX2lkeCAtIDEpICogc2l6ZW9mKFBUUl9FTikpOworCQkrK3BwLT5wYl9jb3VudDsKKwkJcHAtPnBiX3BvaW50ZXJbcGJfaWR4XS5wZV9saW5lX2NvdW50ID0gbGluZV9jb3VudF9sZWZ0OworCQlwcC0+cGJfcG9pbnRlcltwYl9pZHhdLnBlX2JudW0gPSBibnVtX2xlZnQ7CisJCXBwLT5wYl9wb2ludGVyW3BiX2lkeF0ucGVfcGFnZV9jb3VudCA9IHBhZ2VfY291bnRfbGVmdDsKKwkJcHAtPnBiX3BvaW50ZXJbcGJfaWR4ICsgMV0ucGVfbGluZV9jb3VudCA9IGxpbmVfY291bnRfcmlnaHQ7CisJCXBwLT5wYl9wb2ludGVyW3BiX2lkeCArIDFdLnBlX2JudW0gPSBibnVtX3JpZ2h0OworCQlwcC0+cGJfcG9pbnRlcltwYl9pZHggKyAxXS5wZV9wYWdlX2NvdW50ID0gcGFnZV9jb3VudF9yaWdodDsKKworCQlpZiAobG51bV9sZWZ0ICE9IDApCisJCSAgICBwcC0+cGJfcG9pbnRlcltwYl9pZHhdLnBlX29sZF9sbnVtID0gbG51bV9sZWZ0OworCQlpZiAobG51bV9yaWdodCAhPSAwKQorCQkgICAgcHAtPnBiX3BvaW50ZXJbcGJfaWR4ICsgMV0ucGVfb2xkX2xudW0gPSBsbnVtX3JpZ2h0OworCisJCW1mX3B1dChtZnAsIGhwLCBUUlVFLCBGQUxTRSk7CisJCWJ1Zi0+Yl9tbC5tbF9zdGFja190b3AgPSBzdGFja19pZHggKyAxOwkgICAgLyogdHJ1bmNhdGUgc3RhY2sgKi8KKworCQlpZiAobGluZWFkZCkKKwkJeworCQkgICAgLS0oYnVmLT5iX21sLm1sX3N0YWNrX3RvcCk7CisJCQkvKiBmaXggbGluZSBjb3VudCBmb3IgcmVzdCBvZiBibG9ja3MgaW4gdGhlIHN0YWNrICovCisJCSAgICBtbF9saW5lYWRkKGJ1ZiwgbGluZWFkZCk7CisJCQkJCQkJLyogZml4IHN0YWNrIGl0c2VsZiAqLworCQkgICAgYnVmLT5iX21sLm1sX3N0YWNrW2J1Zi0+Yl9tbC5tbF9zdGFja190b3BdLmlwX2hpZ2ggKz0KKwkJCQkJCQkJICAgICAgbGluZWFkZDsKKwkJICAgICsrKGJ1Zi0+Yl9tbC5tbF9zdGFja190b3ApOworCQl9CisKKwkJLyoKKwkJICogV2UgYXJlIGZpbmlzaGVkLCBicmVhayB0aGUgbG9vcCBoZXJlLgorCQkgKi8KKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZWxzZQkJCS8qIHBvaW50ZXIgYmxvY2sgZnVsbCAqLworCSAgICB7CisJCS8qCisJCSAqIHNwbGl0IHRoZSBwb2ludGVyIGJsb2NrCisJCSAqIGFsbG9jYXRlIGEgbmV3IHBvaW50ZXIgYmxvY2sKKwkJICogbW92ZSBzb21lIG9mIHRoZSBwb2ludGVyIGludG8gdGhlIG5ldyBibG9jaworCQkgKiBwcmVwYXJlIGZvciB1cGRhdGluZyB0aGUgcGFyZW50IGJsb2NrCisJCSAqLworCQlmb3IgKDs7KQkvKiBkbyB0aGlzIHR3aWNlIHdoZW4gc3BsaXR0aW5nIGJsb2NrIDEgKi8KKwkJeworCQkgICAgaHBfbmV3ID0gbWxfbmV3X3B0cihtZnApOworCQkgICAgaWYgKGhwX25ldyA9PSBOVUxMKQkgICAgLyogVE9ETzogdHJ5IHRvIGZpeCB0cmVlICovCisJCQlyZXR1cm4gRkFJTDsKKwkJICAgIHBwX25ldyA9IChQVFJfQkwgKikoaHBfbmV3LT5iaF9kYXRhKTsKKworCQkgICAgaWYgKGhwLT5iaF9ibnVtICE9IDEpCisJCQlicmVhazsKKworCQkgICAgLyoKKwkJICAgICAqIGlmIGJsb2NrIDEgYmVjb21lcyBmdWxsIHRoZSB0cmVlIGlzIGdpdmVuIGFuIGV4dHJhIGxldmVsCisJCSAgICAgKiBUaGUgcG9pbnRlcnMgZnJvbSBibG9jayAxIGFyZSBtb3ZlZCBpbnRvIHRoZSBuZXcgYmxvY2suCisJCSAgICAgKiBibG9jayAxIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIG5ldyBibG9jaworCQkgICAgICogdGhlbiBjb250aW51ZSB0byBzcGxpdCB0aGUgbmV3IGJsb2NrCisJCSAgICAgKi8KKwkJICAgIG1jaF9tZW1tb3ZlKHBwX25ldywgcHAsIChzaXplX3QpcGFnZV9zaXplKTsKKwkJICAgIHBwLT5wYl9jb3VudCA9IDE7CisJCSAgICBwcC0+cGJfcG9pbnRlclswXS5wZV9ibnVtID0gaHBfbmV3LT5iaF9ibnVtOworCQkgICAgcHAtPnBiX3BvaW50ZXJbMF0ucGVfbGluZV9jb3VudCA9IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCQkgICAgcHAtPnBiX3BvaW50ZXJbMF0ucGVfb2xkX2xudW0gPSAxOworCQkgICAgcHAtPnBiX3BvaW50ZXJbMF0ucGVfcGFnZV9jb3VudCA9IDE7CisJCSAgICBtZl9wdXQobWZwLCBocCwgVFJVRSwgRkFMU0UpOyAgIC8qIHJlbGVhc2UgYmxvY2sgMSAqLworCQkgICAgaHAgPSBocF9uZXc7CQkvKiBuZXcgYmxvY2sgaXMgdG8gYmUgc3BsaXQgKi8KKwkJICAgIHBwID0gcHBfbmV3OworCQkgICAgQ0hFQ0soc3RhY2tfaWR4ICE9IDAsIF8oInN0YWNrX2lkeCBzaG91bGQgYmUgMCIpKTsKKwkJICAgIGlwLT5pcF9pbmRleCA9IDA7CisJCSAgICArK3N0YWNrX2lkeDsJLyogZG8gYmxvY2sgMSBhZ2FpbiBsYXRlciAqLworCQl9CisJCS8qCisJCSAqIG1vdmUgdGhlIHBvaW50ZXJzIGFmdGVyIHRoZSBjdXJyZW50IG9uZSB0byB0aGUgbmV3IGJsb2NrCisJCSAqIElmIHRoZXJlIGFyZSBub25lLCB0aGUgbmV3IGVudHJ5IHdpbGwgYmUgaW4gdGhlIG5ldyBibG9jay4KKwkJICovCisJCXRvdGFsX21vdmVkID0gcHAtPnBiX2NvdW50IC0gcGJfaWR4IC0gMTsKKwkJaWYgKHRvdGFsX21vdmVkKQorCQl7CisJCSAgICBtY2hfbWVtbW92ZSgmcHBfbmV3LT5wYl9wb2ludGVyWzBdLAorCQkJCSZwcC0+cGJfcG9pbnRlcltwYl9pZHggKyAxXSwKKwkJCQkoc2l6ZV90KSh0b3RhbF9tb3ZlZCkgKiBzaXplb2YoUFRSX0VOKSk7CisJCSAgICBwcF9uZXctPnBiX2NvdW50ID0gdG90YWxfbW92ZWQ7CisJCSAgICBwcC0+cGJfY291bnQgLT0gdG90YWxfbW92ZWQgLSAxOworCQkgICAgcHAtPnBiX3BvaW50ZXJbcGJfaWR4ICsgMV0ucGVfYm51bSA9IGJudW1fcmlnaHQ7CisJCSAgICBwcC0+cGJfcG9pbnRlcltwYl9pZHggKyAxXS5wZV9saW5lX2NvdW50ID0gbGluZV9jb3VudF9yaWdodDsKKwkJICAgIHBwLT5wYl9wb2ludGVyW3BiX2lkeCArIDFdLnBlX3BhZ2VfY291bnQgPSBwYWdlX2NvdW50X3JpZ2h0OworCQkgICAgaWYgKGxudW1fcmlnaHQpCisJCQlwcC0+cGJfcG9pbnRlcltwYl9pZHggKyAxXS5wZV9vbGRfbG51bSA9IGxudW1fcmlnaHQ7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBwcF9uZXctPnBiX2NvdW50ID0gMTsKKwkJICAgIHBwX25ldy0+cGJfcG9pbnRlclswXS5wZV9ibnVtID0gYm51bV9yaWdodDsKKwkJICAgIHBwX25ldy0+cGJfcG9pbnRlclswXS5wZV9saW5lX2NvdW50ID0gbGluZV9jb3VudF9yaWdodDsKKwkJICAgIHBwX25ldy0+cGJfcG9pbnRlclswXS5wZV9wYWdlX2NvdW50ID0gcGFnZV9jb3VudF9yaWdodDsKKwkJICAgIHBwX25ldy0+cGJfcG9pbnRlclswXS5wZV9vbGRfbG51bSA9IGxudW1fcmlnaHQ7CisJCX0KKwkJcHAtPnBiX3BvaW50ZXJbcGJfaWR4XS5wZV9ibnVtID0gYm51bV9sZWZ0OworCQlwcC0+cGJfcG9pbnRlcltwYl9pZHhdLnBlX2xpbmVfY291bnQgPSBsaW5lX2NvdW50X2xlZnQ7CisJCXBwLT5wYl9wb2ludGVyW3BiX2lkeF0ucGVfcGFnZV9jb3VudCA9IHBhZ2VfY291bnRfbGVmdDsKKwkJaWYgKGxudW1fbGVmdCkKKwkJICAgIHBwLT5wYl9wb2ludGVyW3BiX2lkeF0ucGVfb2xkX2xudW0gPSBsbnVtX2xlZnQ7CisJCWxudW1fbGVmdCA9IDA7CisJCWxudW1fcmlnaHQgPSAwOworCisJCS8qCisJCSAqIHJlY29tcHV0ZSBsaW5lIGNvdW50cworCQkgKi8KKwkJbGluZV9jb3VudF9yaWdodCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCAoaW50KXBwX25ldy0+cGJfY291bnQ7ICsraSkKKwkJICAgIGxpbmVfY291bnRfcmlnaHQgKz0gcHBfbmV3LT5wYl9wb2ludGVyW2ldLnBlX2xpbmVfY291bnQ7CisJCWxpbmVfY291bnRfbGVmdCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCAoaW50KXBwLT5wYl9jb3VudDsgKytpKQorCQkgICAgbGluZV9jb3VudF9sZWZ0ICs9IHBwLT5wYl9wb2ludGVyW2ldLnBlX2xpbmVfY291bnQ7CisKKwkJYm51bV9sZWZ0ID0gaHAtPmJoX2JudW07CisJCWJudW1fcmlnaHQgPSBocF9uZXctPmJoX2JudW07CisJCXBhZ2VfY291bnRfbGVmdCA9IDE7CisJCXBhZ2VfY291bnRfcmlnaHQgPSAxOworCQltZl9wdXQobWZwLCBocCwgVFJVRSwgRkFMU0UpOworCQltZl9wdXQobWZwLCBocF9uZXcsIFRSVUUsIEZBTFNFKTsKKwkgICAgfQorCX0KKworCS8qCisJICogU2FmZXR5IGNoZWNrOiBmYWxsZW4gb3V0IG9mIGZvciBsb29wPworCSAqLworCWlmIChzdGFja19pZHggPCAwKQorCXsKKwkgICAgRU1TRyhfKCJFMzE4OiBVcGRhdGVkIHRvbyBtYW55IGJsb2Nrcz8iKSk7CisJICAgIGJ1Zi0+Yl9tbC5tbF9zdGFja190b3AgPSAwOwkvKiBpbnZhbGlkYXRlIHN0YWNrICovCisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfQllURU9GRgorICAgIC8qIFRoZSBsaW5lIHdhcyBpbnNlcnRlZCBiZWxvdyAnbG51bScgKi8KKyAgICBtbF91cGRhdGVjaHVuayhidWYsIGxudW0gKyAxLCAobG9uZylsZW4sIE1MX0NITktfQURETElORSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKyAgICBpZiAodXNpbmdOZXRiZWFucykKKyAgICB7CisJaWYgKFNUUkxFTihsaW5lKSA+IDApCisJICAgIG5ldGJlYW5zX2luc2VydGVkKGJ1ZiwgbG51bSsxLCAoY29sbnJfVCkwLCAwLCBsaW5lLCBTVFJMRU4obGluZSkpOworCW5ldGJlYW5zX2luc2VydGVkKGJ1ZiwgbG51bSsxLCAoY29sbnJfVClTVFJMRU4obGluZSksIDAsCisJCQkJCQkJICAgKGNoYXJfdSAqKSJcbiIsIDEpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIHJlcGxhY2UgbGluZSBsbnVtLCB3aXRoIGJ1ZmZlcmluZywgaW4gY3VycmVudCBidWZmZXIKKyAqCisgKiBJZiBjb3B5IGlzIFRSVUUsIG1ha2UgYSBjb3B5IG9mIHRoZSBsaW5lLCBvdGhlcndpc2UgdGhlIGxpbmUgaGFzIGJlZW4KKyAqIGNvcGllZCB0byBhbGxvY2F0ZWQgbWVtb3J5IGFscmVhZHkuCisgKgorICogQ2hlY2s6IFRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgcHJvYmFibHkgYWxzbyBjYWxsCisgKiBjaGFuZ2VkX2xpbmVzKCksIHVubGVzcyB1cGRhdGVfc2NyZWVuKE5PVF9WQUxJRCkgaXMgdXNlZC4KKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK21sX3JlcGxhY2UobG51bSwgbGluZSwgY29weSkKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGNoYXJfdQkqbGluZTsKKyAgICBpbnQJCWNvcHk7Cit7CisgICAgaWYgKGxpbmUgPT0gTlVMTCkJCS8qIGp1c3QgY2hlY2tpbmcuLi4gKi8KKwlyZXR1cm4gRkFJTDsKKworICAgIC8qIFdoZW4gc3RhcnRpbmcgdXAsIHdlIG1pZ2h0IHN0aWxsIG5lZWQgdG8gY3JlYXRlIHRoZSBtZW1maWxlICovCisgICAgaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCAmJiBvcGVuX2J1ZmZlcihGQUxTRSwgTlVMTCkgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIGlmIChjb3B5ICYmIChsaW5lID0gdmltX3N0cnNhdmUobGluZSkpID09IE5VTEwpIC8qIGFsbG9jYXRlIG1lbW9yeSAqLworCXJldHVybiBGQUlMOworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIGlmICh1c2luZ05ldGJlYW5zKQorICAgIHsKKwluZXRiZWFuc19yZW1vdmVkKGN1cmJ1ZiwgbG51bSwgMCwgKGxvbmcpU1RSTEVOKG1sX2dldChsbnVtKSkpOworCW5ldGJlYW5zX2luc2VydGVkKGN1cmJ1ZiwgbG51bSwgMCwgMCwgbGluZSwgU1RSTEVOKGxpbmUpKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoY3VyYnVmLT5iX21sLm1sX2xpbmVfbG51bSAhPSBsbnVtKQkgICAgLyogb3RoZXIgbGluZSBidWZmZXJlZCAqLworCW1sX2ZsdXNoX2xpbmUoY3VyYnVmKTsJCQkgICAgLyogZmx1c2ggaXQgKi8KKyAgICBlbHNlIGlmIChjdXJidWYtPmJfbWwubWxfZmxhZ3MgJiBNTF9MSU5FX0RJUlRZKSAvKiBzYW1lIGxpbmUgYWxsb2NhdGVkICovCisJdmltX2ZyZWUoY3VyYnVmLT5iX21sLm1sX2xpbmVfcHRyKTsJICAgIC8qIGZyZWUgaXQgKi8KKyAgICBjdXJidWYtPmJfbWwubWxfbGluZV9wdHIgPSBsaW5lOworICAgIGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2xudW0gPSBsbnVtOworICAgIGN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyA9IChjdXJidWYtPmJfbWwubWxfZmxhZ3MgfCBNTF9MSU5FX0RJUlRZKSAmIH5NTF9FTVBUWTsKKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIGRlbGV0ZSBsaW5lICdsbnVtJworICoKKyAqIENoZWNrOiBUaGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHByb2JhYmx5IGFsc28gY2FsbAorICogZGVsZXRlZF9saW5lcygpIGFmdGVyIHRoaXMuCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CittbF9kZWxldGUobG51bSwgbWVzc2FnZSkKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJbWVzc2FnZTsKK3sKKyAgICBtbF9mbHVzaF9saW5lKGN1cmJ1Zik7CisgICAgcmV0dXJuIG1sX2RlbGV0ZV9pbnQoY3VyYnVmLCBsbnVtLCBtZXNzYWdlKTsKK30KKworICAgIHN0YXRpYyBpbnQKK21sX2RlbGV0ZV9pbnQoYnVmLCBsbnVtLCBtZXNzYWdlKQorICAgIGJ1Zl9UCSpidWY7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBpbnQJCW1lc3NhZ2U7Cit7CisgICAgYmhkcl9UCSpocDsKKyAgICBtZW1maWxlX1QJKm1mcDsKKyAgICBEQVRBX0JMCSpkcDsKKyAgICBQVFJfQkwJKnBwOworICAgIGluZm9wdHJfVAkqaXA7CisgICAgaW50CQljb3VudDsJICAgIC8qIG51bWJlciBvZiBlbnRyaWVzIGluIGJsb2NrICovCisgICAgaW50CQlpZHg7CisgICAgaW50CQlzdGFja19pZHg7CisgICAgaW50CQl0ZXh0X3N0YXJ0OworICAgIGludAkJbGluZV9zdGFydDsKKyAgICBsb25nCWxpbmVfc2l6ZTsKKyAgICBpbnQJCWk7CisKKyAgICBpZiAobG51bSA8IDEgfHwgbG51bSA+IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXJldHVybiBGQUlMOworCisgICAgaWYgKGxvd2VzdF9tYXJrZWQgJiYgbG93ZXN0X21hcmtlZCA+IGxudW0pCisJbG93ZXN0X21hcmtlZC0tOworCisvKgorICogSWYgdGhlIGZpbGUgYmVjb21lcyBlbXB0eSB0aGUgbGFzdCBsaW5lIGlzIHJlcGxhY2VkIGJ5IGFuIGVtcHR5IGxpbmUuCisgKi8KKyAgICBpZiAoYnVmLT5iX21sLm1sX2xpbmVfY291bnQgPT0gMSkJICAgIC8qIGZpbGUgYmVjb21lcyBlbXB0eSAqLworICAgIHsKKwlpZiAobWVzc2FnZQorI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCQkmJiAhbmV0YmVhbnNTdXBwcmVzc05vTGluZXMKKyNlbmRpZgorCSAgICkKKwl7CisJICAgIHNldF9rZWVwX21zZygoY2hhcl91ICopXyhub19saW5lc19tc2cpKTsKKwkgICAga2VlcF9tc2dfYXR0ciA9IDA7CisJfQorCS8qIEZFQVRfQllURU9GRiBhbHJlYWR5IGhhbmRsZWQgaW4gdGhlcmUsIGRvbnQgd29ycnkgJ2JvdXQgaXQgYmVsb3cgKi8KKwlpID0gbWxfcmVwbGFjZSgobGluZW5yX1QpMSwgKGNoYXJfdSAqKSIiLCBUUlVFKTsKKwlidWYtPmJfbWwubWxfZmxhZ3MgfD0gTUxfRU1QVFk7CisKKwlyZXR1cm4gaTsKKyAgICB9CisKKy8qCisgKiBmaW5kIHRoZSBkYXRhIGJsb2NrIGNvbnRhaW5pbmcgdGhlIGxpbmUKKyAqIFRoaXMgYWxzbyBmaWxscyB0aGUgc3RhY2sgd2l0aCB0aGUgYmxvY2tzIGZyb20gdGhlIHJvb3QgdG8gdGhlIGRhdGEgYmxvY2sKKyAqIFRoaXMgYWxzbyByZWxlYXNlcyBhbnkgbG9ja2VkIGJsb2NrLgorICovCisgICAgbWZwID0gYnVmLT5iX21sLm1sX21mcDsKKyAgICBpZiAobWZwID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBpZiAoKGhwID0gbWxfZmluZF9saW5lKGJ1ZiwgbG51bSwgTUxfREVMRVRFKSkgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIGRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworICAgIC8qIGNvbXB1dGUgbGluZSBjb3VudCBiZWZvcmUgdGhlIGRlbGV0ZSAqLworICAgIGNvdW50ID0gKGxvbmcpKGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfaGlnaCkKKwkJCQkJLSAobG9uZykoYnVmLT5iX21sLm1sX2xvY2tlZF9sb3cpICsgMjsKKyAgICBpZHggPSBsbnVtIC0gYnVmLT5iX21sLm1sX2xvY2tlZF9sb3c7CisKKyAgICAtLWJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCisgICAgbGluZV9zdGFydCA9ICgoZHAtPmRiX2luZGV4W2lkeF0pICYgREJfSU5ERVhfTUFTSyk7CisgICAgaWYgKGlkeCA9PSAwKQkJLyogZmlyc3QgbGluZSBpbiBibG9jaywgdGV4dCBhdCB0aGUgZW5kICovCisJbGluZV9zaXplID0gZHAtPmRiX3R4dF9lbmQgLSBsaW5lX3N0YXJ0OworICAgIGVsc2UKKwlsaW5lX3NpemUgPSAoKGRwLT5kYl9pbmRleFtpZHggLSAxXSkgJiBEQl9JTkRFWF9NQVNLKSAtIGxpbmVfc3RhcnQ7CisKKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKyAgICBpZiAodXNpbmdOZXRiZWFucykKKwluZXRiZWFuc19yZW1vdmVkKGJ1ZiwgbG51bSwgMCwgbGluZV9zaXplKTsKKyNlbmRpZgorCisvKgorICogc3BlY2lhbCBjYXNlOiBJZiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIGluIHRoZSBkYXRhIGJsb2NrIGl0IGJlY29tZXMgZW1wdHkuCisgKiBUaGVuIHdlIGhhdmUgdG8gcmVtb3ZlIHRoZSBlbnRyeSwgcG9pbnRpbmcgdG8gdGhpcyBkYXRhIGJsb2NrLCBmcm9tIHRoZQorICogcG9pbnRlciBibG9jay4gSWYgdGhpcyBwb2ludGVyIGJsb2NrIGFsc28gYmVjb21lcyBlbXB0eSwgd2UgZ28gdXAgYW5vdGhlcgorICogYmxvY2ssIGFuZCBzbyBvbiwgdXAgdG8gdGhlIHJvb3QgaWYgbmVjZXNzYXJ5LgorICogVGhlIGxpbmUgY291bnRzIGluIHRoZSBwb2ludGVyIGJsb2NrcyBoYXZlIGFscmVhZHkgYmVlbiBhZGp1c3RlZCBieQorICogbWxfZmluZF9saW5lKCkuCisgKi8KKyAgICBpZiAoY291bnQgPT0gMSkKKyAgICB7CisJbWZfZnJlZShtZnAsIGhwKTsJLyogZnJlZSB0aGUgZGF0YSBibG9jayAqLworCWJ1Zi0+Yl9tbC5tbF9sb2NrZWQgPSBOVUxMOworCisJZm9yIChzdGFja19pZHggPSBidWYtPmJfbWwubWxfc3RhY2tfdG9wIC0gMTsgc3RhY2tfaWR4ID49IDA7IC0tc3RhY2tfaWR4KQorCXsKKwkgICAgYnVmLT5iX21sLm1sX3N0YWNrX3RvcCA9IDA7CSAgICAvKiBzdGFjayBpcyBpbnZhbGlkIHdoZW4gZmFpbGluZyAqLworCSAgICBpcCA9ICYoYnVmLT5iX21sLm1sX3N0YWNrW3N0YWNrX2lkeF0pOworCSAgICBpZHggPSBpcC0+aXBfaW5kZXg7CisJICAgIGlmICgoaHAgPSBtZl9nZXQobWZwLCBpcC0+aXBfYm51bSwgMSkpID09IE5VTEwpCisJCXJldHVybiBGQUlMOworCSAgICBwcCA9IChQVFJfQkwgKikoaHAtPmJoX2RhdGEpOyAgIC8qIG11c3QgYmUgcG9pbnRlciBibG9jayAqLworCSAgICBpZiAocHAtPnBiX2lkICE9IFBUUl9JRCkKKwkgICAgeworCQlFTVNHKF8oIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgNCIpKTsKKwkJbWZfcHV0KG1mcCwgaHAsIEZBTFNFLCBGQUxTRSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJICAgIGNvdW50ID0gLS0ocHAtPnBiX2NvdW50KTsKKwkgICAgaWYgKGNvdW50ID09IDApCSAgICAvKiB0aGUgcG9pbnRlciBibG9jayBiZWNvbWVzIGVtcHR5ISAqLworCQltZl9mcmVlKG1mcCwgaHApOworCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKGNvdW50ICE9IGlkeCkJLyogbW92ZSBlbnRyaWVzIGFmdGVyIHRoZSBkZWxldGVkIG9uZSAqLworCQkgICAgbWNoX21lbW1vdmUoJnBwLT5wYl9wb2ludGVyW2lkeF0sICZwcC0+cGJfcG9pbnRlcltpZHggKyAxXSwKKwkJCQkgICAgICAoc2l6ZV90KShjb3VudCAtIGlkeCkgKiBzaXplb2YoUFRSX0VOKSk7CisJCW1mX3B1dChtZnAsIGhwLCBUUlVFLCBGQUxTRSk7CisKKwkJYnVmLT5iX21sLm1sX3N0YWNrX3RvcCA9IHN0YWNrX2lkeDsJLyogdHJ1bmNhdGUgc3RhY2sgKi8KKwkJICAgIC8qIGZpeCBsaW5lIGNvdW50IGZvciByZXN0IG9mIGJsb2NrcyBpbiB0aGUgc3RhY2sgKi8KKwkJaWYgKGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbGluZWFkZCkKKwkJeworCQkgICAgbWxfbGluZWFkZChidWYsIGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbGluZWFkZCk7CisJCSAgICBidWYtPmJfbWwubWxfc3RhY2tbYnVmLT5iX21sLm1sX3N0YWNrX3RvcF0uaXBfaGlnaCArPQorCQkJCQkJYnVmLT5iX21sLm1sX2xvY2tlZF9saW5lYWRkOworCQl9CisJCSsrKGJ1Zi0+Yl9tbC5tbF9zdGFja190b3ApOworCisJCWJyZWFrOworCSAgICB9CisJfQorCUNIRUNLKHN0YWNrX2lkeCA8IDAsIF8oImRlbGV0ZWQgYmxvY2sgMT8iKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBkZWxldGUgdGhlIHRleHQgYnkgbW92aW5nIHRoZSBuZXh0IGxpbmVzIGZvcndhcmRzCisJICovCisJdGV4dF9zdGFydCA9IGRwLT5kYl90eHRfc3RhcnQ7CisJbWNoX21lbW1vdmUoKGNoYXIgKilkcCArIHRleHRfc3RhcnQgKyBsaW5lX3NpemUsCisJCSAgKGNoYXIgKilkcCArIHRleHRfc3RhcnQsIChzaXplX3QpKGxpbmVfc3RhcnQgLSB0ZXh0X3N0YXJ0KSk7CisKKwkvKgorCSAqIGRlbGV0ZSB0aGUgaW5kZXggYnkgbW92aW5nIHRoZSBuZXh0IGluZGV4ZXMgYmFja3dhcmRzCisJICogQWRqdXN0IHRoZSBpbmRleGVzIGZvciB0aGUgdGV4dCBtb3ZlbWVudC4KKwkgKi8KKwlmb3IgKGkgPSBpZHg7IGkgPCBjb3VudCAtIDE7ICsraSkKKwkgICAgZHAtPmRiX2luZGV4W2ldID0gZHAtPmRiX2luZGV4W2kgKyAxXSArIGxpbmVfc2l6ZTsKKworCWRwLT5kYl9mcmVlICs9IGxpbmVfc2l6ZSArIElOREVYX1NJWkU7CisJZHAtPmRiX3R4dF9zdGFydCArPSBsaW5lX3NpemU7CisJLS0oZHAtPmRiX2xpbmVfY291bnQpOworCisJLyoKKwkgKiBtYXJrIHRoZSBibG9jayBkaXJ0eSBhbmQgbWFrZSBzdXJlIGl0IGlzIGluIHRoZSBmaWxlIChmb3IgcmVjb3ZlcnkpCisJICovCisJYnVmLT5iX21sLm1sX2ZsYWdzIHw9IChNTF9MT0NLRURfRElSVFkgfCBNTF9MT0NLRURfUE9TKTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX0JZVEVPRkYKKyAgICBtbF91cGRhdGVjaHVuayhidWYsIGxudW0sIGxpbmVfc2l6ZSwgTUxfQ0hOS19ERUxMSU5FKTsKKyNlbmRpZgorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIHNldCB0aGUgQl9NQVJLRUQgZmxhZyBmb3IgbGluZSAnbG51bScKKyAqLworICAgIHZvaWQKK21sX3NldG1hcmtlZChsbnVtKQorICAgIGxpbmVucl9UIGxudW07Cit7CisgICAgYmhkcl9UICAgICpocDsKKyAgICBEQVRBX0JMICpkcDsKKwkJCQkgICAgLyogaW52YWxpZCBsaW5lIG51bWJlciAqLworICAgIGlmIChsbnVtIDwgMSB8fCBsbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQKKwkJCQkJICAgICAgIHx8IGN1cmJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCkKKwlyZXR1cm47CQkJICAgIC8qIGdpdmUgZXJyb3IgbWVzc2FnZT8gKi8KKworICAgIGlmIChsb3dlc3RfbWFya2VkID09IDAgfHwgbG93ZXN0X21hcmtlZCA+IGxudW0pCisJbG93ZXN0X21hcmtlZCA9IGxudW07CisKKyAgICAvKgorICAgICAqIGZpbmQgdGhlIGRhdGEgYmxvY2sgY29udGFpbmluZyB0aGUgbGluZQorICAgICAqIFRoaXMgYWxzbyBmaWxscyB0aGUgc3RhY2sgd2l0aCB0aGUgYmxvY2tzIGZyb20gdGhlIHJvb3QgdG8gdGhlIGRhdGEgYmxvY2sKKyAgICAgKiBUaGlzIGFsc28gcmVsZWFzZXMgYW55IGxvY2tlZCBibG9jay4KKyAgICAgKi8KKyAgICBpZiAoKGhwID0gbWxfZmluZF9saW5lKGN1cmJ1ZiwgbG51bSwgTUxfRklORCkpID09IE5VTEwpCisJcmV0dXJuOwkJICAgIC8qIGdpdmUgZXJyb3IgbWVzc2FnZT8gKi8KKworICAgIGRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworICAgIGRwLT5kYl9pbmRleFtsbnVtIC0gY3VyYnVmLT5iX21sLm1sX2xvY2tlZF9sb3ddIHw9IERCX01BUktFRDsKKyAgICBjdXJidWYtPmJfbWwubWxfZmxhZ3MgfD0gTUxfTE9DS0VEX0RJUlRZOworfQorCisvKgorICogZmluZCB0aGUgZmlyc3QgbGluZSB3aXRoIGl0cyBCX01BUktFRCBmbGFnIHNldAorICovCisgICAgbGluZW5yX1QKK21sX2ZpcnN0bWFya2VkKCkKK3sKKyAgICBiaGRyX1QJKmhwOworICAgIERBVEFfQkwJKmRwOworICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQlpOworCisgICAgaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTCkKKwlyZXR1cm4gKGxpbmVucl9UKSAwOworCisgICAgLyoKKyAgICAgKiBUaGUgc2VhcmNoIHN0YXJ0cyB3aXRoIGxvd2VzdF9tYXJrZWQgbGluZS4gVGhpcyBpcyB0aGUgbGFzdCBsaW5lIHdoZXJlCisgICAgICogYSBtYXJrIHdhcyBmb3VuZCwgYWRqdXN0ZWQgYnkgaW5zZXJ0aW5nL2RlbGV0aW5nIGxpbmVzLgorICAgICAqLworICAgIGZvciAobG51bSA9IGxvd2VzdF9tYXJrZWQ7IGxudW0gPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7ICkKKyAgICB7CisJLyoKKwkgKiBGaW5kIHRoZSBkYXRhIGJsb2NrIGNvbnRhaW5pbmcgdGhlIGxpbmUuCisJICogVGhpcyBhbHNvIGZpbGxzIHRoZSBzdGFjayB3aXRoIHRoZSBibG9ja3MgZnJvbSB0aGUgcm9vdCB0byB0aGUgZGF0YQorCSAqIGJsb2NrIFRoaXMgYWxzbyByZWxlYXNlcyBhbnkgbG9ja2VkIGJsb2NrLgorCSAqLworCWlmICgoaHAgPSBtbF9maW5kX2xpbmUoY3VyYnVmLCBsbnVtLCBNTF9GSU5EKSkgPT0gTlVMTCkKKwkgICAgcmV0dXJuIChsaW5lbnJfVCkwOwkJICAgIC8qIGdpdmUgZXJyb3IgbWVzc2FnZT8gKi8KKworCWRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworCisJZm9yIChpID0gbG51bSAtIGN1cmJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbG93OworCQkJICAgIGxudW0gPD0gY3VyYnVmLT5iX21sLm1sX2xvY2tlZF9oaWdoOyArK2ksICsrbG51bSkKKwkgICAgaWYgKChkcC0+ZGJfaW5kZXhbaV0pICYgREJfTUFSS0VEKQorCSAgICB7CisJCShkcC0+ZGJfaW5kZXhbaV0pICY9IERCX0lOREVYX01BU0s7CisJCWN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyB8PSBNTF9MT0NLRURfRElSVFk7CisJCWxvd2VzdF9tYXJrZWQgPSBsbnVtICsgMTsKKwkJcmV0dXJuIGxudW07CisJICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKGxpbmVucl9UKSAwOworfQorCisjaWYgMCAgLyogbm90IHVzZWQgKi8KKy8qCisgKiByZXR1cm4gVFJVRSBpZiBsaW5lICdsbnVtJyBoYXMgYSBtYXJrCisgKi8KKyAgICBpbnQKK21sX2hhc19tYXJrKGxudW0pCisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBiaGRyX1QJKmhwOworICAgIERBVEFfQkwJKmRwOworCisgICAgaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9tZnAgPT0gTlVMTAorCQkJfHwgKGhwID0gbWxfZmluZF9saW5lKGN1cmJ1ZiwgbG51bSwgTUxfRklORCkpID09IE5VTEwpCisJcmV0dXJuIEZBTFNFOworCisgICAgZHAgPSAoREFUQV9CTCAqKShocC0+YmhfZGF0YSk7CisgICAgcmV0dXJuIChpbnQpKChkcC0+ZGJfaW5kZXhbbG51bSAtIGN1cmJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbG93XSkgJiBEQl9NQVJLRUQpOworfQorI2VuZGlmCisKKy8qCisgKiBjbGVhciBhbGwgREJfTUFSS0VEIGZsYWdzCisgKi8KKyAgICB2b2lkCittbF9jbGVhcm1hcmtlZCgpCit7CisgICAgYmhkcl9UCSpocDsKKyAgICBEQVRBX0JMCSpkcDsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJaTsKKworICAgIGlmIChjdXJidWYtPmJfbWwubWxfbWZwID09IE5VTEwpCSAgICAvKiBub3RoaW5nIHRvIGRvICovCisJcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBUaGUgc2VhcmNoIHN0YXJ0cyB3aXRoIGxpbmUgbG93ZXN0X21hcmtlZC4KKyAgICAgKi8KKyAgICBmb3IgKGxudW0gPSBsb3dlc3RfbWFya2VkOyBsbnVtIDw9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OyApCisgICAgeworCS8qCisJICogRmluZCB0aGUgZGF0YSBibG9jayBjb250YWluaW5nIHRoZSBsaW5lLgorCSAqIFRoaXMgYWxzbyBmaWxscyB0aGUgc3RhY2sgd2l0aCB0aGUgYmxvY2tzIGZyb20gdGhlIHJvb3QgdG8gdGhlIGRhdGEKKwkgKiBibG9jayBhbmQgcmVsZWFzZXMgYW55IGxvY2tlZCBibG9jay4KKwkgKi8KKwlpZiAoKGhwID0gbWxfZmluZF9saW5lKGN1cmJ1ZiwgbG51bSwgTUxfRklORCkpID09IE5VTEwpCisJICAgIHJldHVybjsJCS8qIGdpdmUgZXJyb3IgbWVzc2FnZT8gKi8KKworCWRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworCisJZm9yIChpID0gbG51bSAtIGN1cmJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbG93OworCQkJICAgIGxudW0gPD0gY3VyYnVmLT5iX21sLm1sX2xvY2tlZF9oaWdoOyArK2ksICsrbG51bSkKKwkgICAgaWYgKChkcC0+ZGJfaW5kZXhbaV0pICYgREJfTUFSS0VEKQorCSAgICB7CisJCShkcC0+ZGJfaW5kZXhbaV0pICY9IERCX0lOREVYX01BU0s7CisJCWN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyB8PSBNTF9MT0NLRURfRElSVFk7CisJICAgIH0KKyAgICB9CisKKyAgICBsb3dlc3RfbWFya2VkID0gMDsKKyAgICByZXR1cm47Cit9CisKKy8qCisgKiBmbHVzaCBtbF9saW5lIGlmIG5lY2Vzc2FyeQorICovCisgICAgc3RhdGljIHZvaWQKK21sX2ZsdXNoX2xpbmUoYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgYmhkcl9UCSpocDsKKyAgICBEQVRBX0JMCSpkcDsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGNoYXJfdQkqbmV3X2xpbmU7CisgICAgY2hhcl91CSpvbGRfbGluZTsKKyAgICBjb2xucl9UCW5ld19sZW47CisgICAgaW50CQlvbGRfbGVuOworICAgIGludAkJZXh0cmE7CisgICAgaW50CQlpZHg7CisgICAgaW50CQlzdGFydDsKKyAgICBpbnQJCWNvdW50OworICAgIGludAkJaTsKKworICAgIGlmIChidWYtPmJfbWwubWxfbGluZV9sbnVtID09IDAgfHwgYnVmLT5iX21sLm1sX21mcCA9PSBOVUxMKQorCXJldHVybjsJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKworICAgIGlmIChidWYtPmJfbWwubWxfZmxhZ3MgJiBNTF9MSU5FX0RJUlRZKQorICAgIHsKKwlsbnVtID0gYnVmLT5iX21sLm1sX2xpbmVfbG51bTsKKwluZXdfbGluZSA9IGJ1Zi0+Yl9tbC5tbF9saW5lX3B0cjsKKworCWhwID0gbWxfZmluZF9saW5lKGJ1ZiwgbG51bSwgTUxfRklORCk7CisJaWYgKGhwID09IE5VTEwpCisJICAgIEVNU0dOKF8oIkUzMjA6IENhbm5vdCBmaW5kIGxpbmUgJWxkIiksIGxudW0pOworCWVsc2UKKwl7CisJICAgIGRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworCSAgICBpZHggPSBsbnVtIC0gYnVmLT5iX21sLm1sX2xvY2tlZF9sb3c7CisJICAgIHN0YXJ0ID0gKChkcC0+ZGJfaW5kZXhbaWR4XSkgJiBEQl9JTkRFWF9NQVNLKTsKKwkgICAgb2xkX2xpbmUgPSAoY2hhcl91ICopZHAgKyBzdGFydDsKKwkgICAgaWYgKGlkeCA9PSAwKQkvKiBsaW5lIGlzIGxhc3QgaW4gYmxvY2sgKi8KKwkJb2xkX2xlbiA9IGRwLT5kYl90eHRfZW5kIC0gc3RhcnQ7CisJICAgIGVsc2UJCS8qIHRleHQgb2YgcHJldmlvdXMgbGluZSBmb2xsb3dzICovCisJCW9sZF9sZW4gPSAoZHAtPmRiX2luZGV4W2lkeCAtIDFdICYgREJfSU5ERVhfTUFTSykgLSBzdGFydDsKKwkgICAgbmV3X2xlbiA9IChjb2xucl9UKVNUUkxFTihuZXdfbGluZSkgKyAxOworCSAgICBleHRyYSA9IG5ld19sZW4gLSBvbGRfbGVuOwkgICAgLyogbmVnYXRpdmUgaWYgbGluZXMgZ2V0cyBzbWFsbGVyICovCisKKwkgICAgLyoKKwkgICAgICogaWYgbmV3IGxpbmUgZml0cyBpbiBkYXRhIGJsb2NrLCByZXBsYWNlIGRpcmVjdGx5CisJICAgICAqLworCSAgICBpZiAoKGludClkcC0+ZGJfZnJlZSA+PSBleHRyYSkKKwkgICAgeworCQkvKiBpZiB0aGUgbGVuZ3RoIGNoYW5nZXMgYW5kIHRoZXJlIGFyZSBmb2xsb3dpbmcgbGluZXMgKi8KKwkJY291bnQgPSBidWYtPmJfbWwubWxfbG9ja2VkX2hpZ2ggLSBidWYtPmJfbWwubWxfbG9ja2VkX2xvdyArIDE7CisJCWlmIChleHRyYSAhPSAwICYmIGlkeCA8IGNvdW50IC0gMSkKKwkJeworCQkgICAgLyogbW92ZSB0ZXh0IG9mIGZvbGxvd2luZyBsaW5lcyAqLworCQkgICAgbWNoX21lbW1vdmUoKGNoYXIgKilkcCArIGRwLT5kYl90eHRfc3RhcnQgLSBleHRyYSwKKwkJCQkoY2hhciAqKWRwICsgZHAtPmRiX3R4dF9zdGFydCwKKwkJCQkoc2l6ZV90KShzdGFydCAtIGRwLT5kYl90eHRfc3RhcnQpKTsKKworCQkgICAgLyogYWRqdXN0IHBvaW50ZXJzIG9mIHRoaXMgYW5kIGZvbGxvd2luZyBsaW5lcyAqLworCQkgICAgZm9yIChpID0gaWR4ICsgMTsgaSA8IGNvdW50OyArK2kpCisJCQlkcC0+ZGJfaW5kZXhbaV0gLT0gZXh0cmE7CisJCX0KKwkJZHAtPmRiX2luZGV4W2lkeF0gLT0gZXh0cmE7CisKKwkJLyogYWRqdXN0IGZyZWUgc3BhY2UgKi8KKwkJZHAtPmRiX2ZyZWUgLT0gZXh0cmE7CisJCWRwLT5kYl90eHRfc3RhcnQgLT0gZXh0cmE7CisKKwkJLyogY29weSBuZXcgbGluZSBpbnRvIHRoZSBkYXRhIGJsb2NrICovCisJCW1jaF9tZW1tb3ZlKG9sZF9saW5lIC0gZXh0cmEsIG5ld19saW5lLCAoc2l6ZV90KW5ld19sZW4pOworCQlidWYtPmJfbWwubWxfZmxhZ3MgfD0gKE1MX0xPQ0tFRF9ESVJUWSB8IE1MX0xPQ0tFRF9QT1MpOworI2lmZGVmIEZFQVRfQllURU9GRgorCQkvKiBUaGUgZWxzZSBjYXNlIGlzIGFscmVhZHkgY292ZXJlZCBieSB0aGUgaW5zZXJ0IGFuZCBkZWxldGUgKi8KKwkJbWxfdXBkYXRlY2h1bmsoYnVmLCBsbnVtLCAobG9uZylleHRyYSwgTUxfQ0hOS19VUERMSU5FKTsKKyNlbmRpZgorCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKgorCQkgKiBDYW5ub3QgZG8gaXQgaW4gb25lIGRhdGEgYmxvY2s6IERlbGV0ZSBhbmQgYXBwZW5kLgorCQkgKiBBcHBlbmQgZmlyc3QsIGJlY2F1c2UgbWxfZGVsZXRlX2ludCgpIGNhbm5vdCBkZWxldGUgdGhlCisJCSAqIGxhc3QgbGluZSBpbiBhIGJ1ZmZlciwgd2hpY2ggY2F1c2VzIHRyb3VibGUgZm9yIGEgYnVmZmVyCisJCSAqIHRoYXQgaGFzIG9ubHkgb25lIGxpbmUuCisJCSAqIERvbid0IGZvcmdldCB0byBjb3B5IHRoZSBtYXJrIQorCQkgKi8KKwkJLyogSG93IGFib3V0IGhhbmRsaW5nIGVycm9ycz8/PyAqLworCQkodm9pZCltbF9hcHBlbmRfaW50KGJ1ZiwgbG51bSwgbmV3X2xpbmUsIG5ld19sZW4sIEZBTFNFLAorCQkJCQkgICAgIChkcC0+ZGJfaW5kZXhbaWR4XSAmIERCX01BUktFRCkpOworCQkodm9pZCltbF9kZWxldGVfaW50KGJ1ZiwgbG51bSwgRkFMU0UpOworCSAgICB9CisJfQorCXZpbV9mcmVlKG5ld19saW5lKTsKKyAgICB9CisKKyAgICBidWYtPmJfbWwubWxfbGluZV9sbnVtID0gMDsKK30KKworLyoKKyAqIGNyZWF0ZSBhIG5ldywgZW1wdHksIGRhdGEgYmxvY2sKKyAqLworICAgIHN0YXRpYyBiaGRyX1QgKgorbWxfbmV3X2RhdGEobWZwLCBuZWdhdGl2ZSwgcGFnZV9jb3VudCkKKyAgICBtZW1maWxlX1QJKm1mcDsKKyAgICBpbnQJCW5lZ2F0aXZlOworICAgIGludAkJcGFnZV9jb3VudDsKK3sKKyAgICBiaGRyX1QJKmhwOworICAgIERBVEFfQkwJKmRwOworCisgICAgaWYgKChocCA9IG1mX25ldyhtZnAsIG5lZ2F0aXZlLCBwYWdlX2NvdW50KSkgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworICAgIGRwLT5kYl9pZCA9IERBVEFfSUQ7CisgICAgZHAtPmRiX3R4dF9zdGFydCA9IGRwLT5kYl90eHRfZW5kID0gcGFnZV9jb3VudCAqIG1mcC0+bWZfcGFnZV9zaXplOworICAgIGRwLT5kYl9mcmVlID0gZHAtPmRiX3R4dF9zdGFydCAtIEhFQURFUl9TSVpFOworICAgIGRwLT5kYl9saW5lX2NvdW50ID0gMDsKKworICAgIHJldHVybiBocDsKK30KKworLyoKKyAqIGNyZWF0ZSBhIG5ldywgZW1wdHksIHBvaW50ZXIgYmxvY2sKKyAqLworICAgIHN0YXRpYyBiaGRyX1QgKgorbWxfbmV3X3B0cihtZnApCisgICAgbWVtZmlsZV9UCSptZnA7Cit7CisgICAgYmhkcl9UCSpocDsKKyAgICBQVFJfQkwJKnBwOworCisgICAgaWYgKChocCA9IG1mX25ldyhtZnAsIEZBTFNFLCAxKSkgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIHBwID0gKFBUUl9CTCAqKShocC0+YmhfZGF0YSk7CisgICAgcHAtPnBiX2lkID0gUFRSX0lEOworICAgIHBwLT5wYl9jb3VudCA9IDA7CisgICAgcHAtPnBiX2NvdW50X21heCA9IChzaG9ydF91KSgobWZwLT5tZl9wYWdlX3NpemUgLSBzaXplb2YoUFRSX0JMKSkgLyBzaXplb2YoUFRSX0VOKSArIDEpOworCisgICAgcmV0dXJuIGhwOworfQorCisvKgorICogbG9va3VwIGxpbmUgJ2xudW0nIGluIGEgbWVtbGluZQorICoKKyAqICAgYWN0aW9uOiBpZiBNTF9ERUxFVEUgb3IgTUxfSU5TRVJUIHRoZSBsaW5lIGNvdW50IGlzIHVwZGF0ZWQgd2hpbGUgc2VhcmNoaW5nCisgKgkgICAgIGlmIE1MX0ZMVVNIIG9ubHkgZmx1c2ggYSBsb2NrZWQgYmxvY2sKKyAqCSAgICAgaWYgTUxfRklORCBqdXN0IGZpbmQgdGhlIGxpbmUKKyAqCisgKiBJZiB0aGUgYmxvY2sgd2FzIGZvdW5kIGl0IGlzIGxvY2tlZCBhbmQgcHV0IGluIG1sX2xvY2tlZC4KKyAqIFRoZSBzdGFjayBpcyB1cGRhdGVkIHRvIGxlYWQgdG8gdGhlIGxvY2tlZCBibG9jay4gVGhlIGlwX2hpZ2ggZmllbGQgaW4KKyAqIHRoZSBzdGFjayBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGxhc3QgbGluZSBpbiB0aGUgYmxvY2sgQUZURVIgdGhlCisgKiBpbnNlcnQgb3IgZGVsZXRlLCBhbHNvIGlmIHRoZSBwb2ludGVyIGJsb2NrIGhhcyBub3QgYmVlbiB1cGRhdGVkIHlldC4gQnV0CisgKiBpZiBpZiBtbF9sb2NrZWQgIT0gTlVMTCBtbF9sb2NrZWRfbGluZWFkZCBtdXN0IGJlIGFkZGVkIHRvIGlwX2hpZ2guCisgKgorICogcmV0dXJuOiBOVUxMIGZvciBmYWlsdXJlLCBwb2ludGVyIHRvIGJsb2NrIGhlYWRlciBvdGhlcndpc2UKKyAqLworICAgIHN0YXRpYyBiaGRyX1QgKgorbWxfZmluZF9saW5lKGJ1ZiwgbG51bSwgYWN0aW9uKQorICAgIGJ1Zl9UCSpidWY7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBpbnQJCWFjdGlvbjsKK3sKKyAgICBEQVRBX0JMCSpkcDsKKyAgICBQVFJfQkwJKnBwOworICAgIGluZm9wdHJfVAkqaXA7CisgICAgYmhkcl9UCSpocDsKKyAgICBtZW1maWxlX1QJKm1mcDsKKyAgICBsaW5lbnJfVAl0OworICAgIGJsb2NrbnJfVAlibnVtLCBibnVtMjsKKyAgICBpbnQJCWRpcnR5OworICAgIGxpbmVucl9UCWxvdywgaGlnaDsKKyAgICBpbnQJCXRvcDsKKyAgICBpbnQJCXBhZ2VfY291bnQ7CisgICAgaW50CQlpZHg7CisKKyAgICBtZnAgPSBidWYtPmJfbWwubWxfbWZwOworCisgICAgLyoKKyAgICAgKiBJZiB0aGVyZSBpcyBhIGxvY2tlZCBibG9jayBjaGVjayBpZiB0aGUgd2FudGVkIGxpbmUgaXMgaW4gaXQuCisgICAgICogSWYgbm90LCBmbHVzaCBhbmQgcmVsZWFzZSB0aGUgbG9ja2VkIGJsb2NrLgorICAgICAqIERvbid0IGRvIHRoaXMgZm9yIE1MX0lOU0VSVF9TQU1FLCBiZWNhdXNlIHRoZSBzdGFjayBuZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAgICogRG9uJ3QgZG8gdGhpcyBmb3IgTUxfRkxVU0gsIGJlY2F1c2Ugd2Ugd2FudCB0byBmbHVzaCB0aGUgbG9ja2VkIGJsb2NrLgorICAgICAqLworICAgIGlmIChidWYtPmJfbWwubWxfbG9ja2VkKQorICAgIHsKKwlpZiAoTUxfU0lNUExFKGFjdGlvbikgJiYgYnVmLT5iX21sLm1sX2xvY2tlZF9sb3cgPD0gbG51bQorCQkJCQkgICYmIGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfaGlnaCA+PSBsbnVtKQorCXsKKwkJLyogcmVtZW1iZXIgdG8gdXBkYXRlIHBvaW50ZXIgYmxvY2tzIGFuZCBzdGFjayBsYXRlciAqLworCSAgICBpZiAoYWN0aW9uID09IE1MX0lOU0VSVCkKKwkgICAgeworCQkrKyhidWYtPmJfbWwubWxfbG9ja2VkX2xpbmVhZGQpOworCQkrKyhidWYtPmJfbWwubWxfbG9ja2VkX2hpZ2gpOworCSAgICB9CisJICAgIGVsc2UgaWYgKGFjdGlvbiA9PSBNTF9ERUxFVEUpCisJICAgIHsKKwkJLS0oYnVmLT5iX21sLm1sX2xvY2tlZF9saW5lYWRkKTsKKwkJLS0oYnVmLT5iX21sLm1sX2xvY2tlZF9oaWdoKTsKKwkgICAgfQorCSAgICByZXR1cm4gKGJ1Zi0+Yl9tbC5tbF9sb2NrZWQpOworCX0KKworCW1mX3B1dChtZnAsIGJ1Zi0+Yl9tbC5tbF9sb2NrZWQsIGJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0xPQ0tFRF9ESVJUWSwKKwkJCQkJICAgIGJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0xPQ0tFRF9QT1MpOworCWJ1Zi0+Yl9tbC5tbF9sb2NrZWQgPSBOVUxMOworCisJICAgIC8qCisJICAgICAqIGlmIGxpbmVzIGhhdmUgYmVlbiBhZGRlZCBvciBkZWxldGVkIGluIHRoZSBsb2NrZWQgYmxvY2ssIG5lZWQgdG8KKwkgICAgICogdXBkYXRlIHRoZSBsaW5lIGNvdW50IGluIHBvaW50ZXIgYmxvY2tzCisJICAgICAqLworCWlmIChidWYtPmJfbWwubWxfbG9ja2VkX2xpbmVhZGQpCisJICAgIG1sX2xpbmVhZGQoYnVmLCBidWYtPmJfbWwubWxfbG9ja2VkX2xpbmVhZGQpOworICAgIH0KKworICAgIGlmIChhY3Rpb24gPT0gTUxfRkxVU0gpCSAgICAvKiBub3RoaW5nIGVsc2UgdG8gZG8gKi8KKwlyZXR1cm4gTlVMTDsKKworICAgIGJudW0gPSAxOwkJCSAgICAvKiBzdGFydCBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZSAqLworICAgIHBhZ2VfY291bnQgPSAxOworICAgIGxvdyA9IDE7CisgICAgaGlnaCA9IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCisgICAgaWYgKGFjdGlvbiA9PSBNTF9GSU5EKQkvKiBmaXJzdCB0cnkgc3RhY2sgZW50cmllcyAqLworICAgIHsKKwlmb3IgKHRvcCA9IGJ1Zi0+Yl9tbC5tbF9zdGFja190b3AgLSAxOyB0b3AgPj0gMDsgLS10b3ApCisJeworCSAgICBpcCA9ICYoYnVmLT5iX21sLm1sX3N0YWNrW3RvcF0pOworCSAgICBpZiAoaXAtPmlwX2xvdyA8PSBsbnVtICYmIGlwLT5pcF9oaWdoID49IGxudW0pCisJICAgIHsKKwkJYm51bSA9IGlwLT5pcF9ibnVtOworCQlsb3cgPSBpcC0+aXBfbG93OworCQloaWdoID0gaXAtPmlwX2hpZ2g7CisJCWJ1Zi0+Yl9tbC5tbF9zdGFja190b3AgPSB0b3A7CS8qIHRydW5jYXRlIHN0YWNrIGF0IHByZXYgZW50cnkgKi8KKwkJYnJlYWs7CisJICAgIH0KKwl9CisJaWYgKHRvcCA8IDApCisJICAgIGJ1Zi0+Yl9tbC5tbF9zdGFja190b3AgPSAwOwkJLyogbm90IGZvdW5kLCBzdGFydCBhdCB0aGUgcm9vdCAqLworICAgIH0KKyAgICBlbHNlCS8qIE1MX0RFTEVURSBvciBNTF9JTlNFUlQgKi8KKwlidWYtPmJfbWwubWxfc3RhY2tfdG9wID0gMDsJLyogc3RhcnQgYXQgdGhlIHJvb3QgKi8KKworLyoKKyAqIHNlYXJjaCBkb3dud2FyZHMgaW4gdGhlIHRyZWUgdW50aWwgYSBkYXRhIGJsb2NrIGlzIGZvdW5kCisgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwlpZiAoKGhwID0gbWZfZ2V0KG1mcCwgYm51bSwgcGFnZV9jb3VudCkpID09IE5VTEwpCisJICAgIGdvdG8gZXJyb3Jfbm9ibG9jazsKKworCS8qCisJICogdXBkYXRlIGhpZ2ggZm9yIGluc2VydC9kZWxldGUKKwkgKi8KKwlpZiAoYWN0aW9uID09IE1MX0lOU0VSVCkKKwkgICAgKytoaWdoOworCWVsc2UgaWYgKGFjdGlvbiA9PSBNTF9ERUxFVEUpCisJICAgIC0taGlnaDsKKworCWRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworCWlmIChkcC0+ZGJfaWQgPT0gREFUQV9JRCkJLyogZGF0YSBibG9jayAqLworCXsKKwkgICAgYnVmLT5iX21sLm1sX2xvY2tlZCA9IGhwOworCSAgICBidWYtPmJfbWwubWxfbG9ja2VkX2xvdyA9IGxvdzsKKwkgICAgYnVmLT5iX21sLm1sX2xvY2tlZF9oaWdoID0gaGlnaDsKKwkgICAgYnVmLT5iX21sLm1sX2xvY2tlZF9saW5lYWRkID0gMDsKKwkgICAgYnVmLT5iX21sLm1sX2ZsYWdzICY9IH4oTUxfTE9DS0VEX0RJUlRZIHwgTUxfTE9DS0VEX1BPUyk7CisJICAgIHJldHVybiBocDsKKwl9CisKKwlwcCA9IChQVFJfQkwgKikoZHApOwkJLyogbXVzdCBiZSBwb2ludGVyIGJsb2NrICovCisJaWYgKHBwLT5wYl9pZCAhPSBQVFJfSUQpCisJeworCSAgICBFTVNHKF8oIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmciKSk7CisJICAgIGdvdG8gZXJyb3JfYmxvY2s7CisJfQorCisJaWYgKCh0b3AgPSBtbF9hZGRfc3RhY2soYnVmKSkgPCAwKQkvKiBhZGQgbmV3IGVudHJ5IHRvIHN0YWNrICovCisJICAgIGdvdG8gZXJyb3JfYmxvY2s7CisJaXAgPSAmKGJ1Zi0+Yl9tbC5tbF9zdGFja1t0b3BdKTsKKwlpcC0+aXBfYm51bSA9IGJudW07CisJaXAtPmlwX2xvdyA9IGxvdzsKKwlpcC0+aXBfaGlnaCA9IGhpZ2g7CisJaXAtPmlwX2luZGV4ID0gLTE7CQkvKiBpbmRleCBub3Qga25vd24geWV0ICovCisKKwlkaXJ0eSA9IEZBTFNFOworCWZvciAoaWR4ID0gMDsgaWR4IDwgKGludClwcC0+cGJfY291bnQ7ICsraWR4KQorCXsKKwkgICAgdCA9IHBwLT5wYl9wb2ludGVyW2lkeF0ucGVfbGluZV9jb3VudDsKKwkgICAgQ0hFQ0sodCA9PSAwLCBfKCJwZV9saW5lX2NvdW50IGlzIHplcm8iKSk7CisJICAgIGlmICgobG93ICs9IHQpID4gbG51bSkKKwkgICAgeworCQlpcC0+aXBfaW5kZXggPSBpZHg7CisJCWJudW0gPSBwcC0+cGJfcG9pbnRlcltpZHhdLnBlX2JudW07CisJCXBhZ2VfY291bnQgPSBwcC0+cGJfcG9pbnRlcltpZHhdLnBlX3BhZ2VfY291bnQ7CisJCWhpZ2ggPSBsb3cgLSAxOworCQlsb3cgLT0gdDsKKworCQkvKgorCQkgKiBhIG5lZ2F0aXZlIGJsb2NrIG51bWJlciBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQKKwkJICovCisJCWlmIChibnVtIDwgMCkKKwkJeworCQkgICAgYm51bTIgPSBtZl90cmFuc19kZWwobWZwLCBibnVtKTsKKwkJICAgIGlmIChibnVtICE9IGJudW0yKQorCQkgICAgeworCQkJYm51bSA9IGJudW0yOworCQkJcHAtPnBiX3BvaW50ZXJbaWR4XS5wZV9ibnVtID0gYm51bTsKKwkJCWRpcnR5ID0gVFJVRTsKKwkJICAgIH0KKwkJfQorCisJCWJyZWFrOworCSAgICB9CisJfQorCWlmIChpZHggPj0gKGludClwcC0+cGJfY291bnQpCSAgICAvKiBwYXN0IHRoZSBlbmQ6IHNvbWV0aGluZyB3cm9uZyEgKi8KKwl7CisJICAgIGlmIChsbnVtID4gYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCUVNU0dOKF8oIkUzMjI6IGxpbmUgbnVtYmVyIG91dCBvZiByYW5nZTogJWxkIHBhc3QgdGhlIGVuZCIpLAorCQkJCQkgICAgICBsbnVtIC0gYnVmLT5iX21sLm1sX2xpbmVfY291bnQpOworCisJICAgIGVsc2UKKwkJRU1TR04oXygiRTMyMzogbGluZSBjb3VudCB3cm9uZyBpbiBibG9jayAlbGQiKSwgYm51bSk7CisJICAgIGdvdG8gZXJyb3JfYmxvY2s7CisJfQorCWlmIChhY3Rpb24gPT0gTUxfREVMRVRFKQorCXsKKwkgICAgcHAtPnBiX3BvaW50ZXJbaWR4XS5wZV9saW5lX2NvdW50LS07CisJICAgIGRpcnR5ID0gVFJVRTsKKwl9CisJZWxzZSBpZiAoYWN0aW9uID09IE1MX0lOU0VSVCkKKwl7CisJICAgIHBwLT5wYl9wb2ludGVyW2lkeF0ucGVfbGluZV9jb3VudCsrOworCSAgICBkaXJ0eSA9IFRSVUU7CisJfQorCW1mX3B1dChtZnAsIGhwLCBkaXJ0eSwgRkFMU0UpOworICAgIH0KKworZXJyb3JfYmxvY2s6CisgICAgbWZfcHV0KG1mcCwgaHAsIEZBTFNFLCBGQUxTRSk7CitlcnJvcl9ub2Jsb2NrOgorLyoKKyAqIElmIGFjdGlvbiBpcyBNTF9ERUxFVEUgb3IgTUxfSU5TRVJUIHdlIGhhdmUgdG8gY29ycmVjdCB0aGUgdHJlZSBmb3IKKyAqIHRoZSBpbmNyZW1lbnRlZC9kZWNyZW1lbnRlZCBsaW5lIGNvdW50cywgYmVjYXVzZSB0aGVyZSB3b24ndCBiZSBhIGxpbmUKKyAqIGluc2VydGVkL2RlbGV0ZWQgYWZ0ZXIgYWxsLgorICovCisgICAgaWYgKGFjdGlvbiA9PSBNTF9ERUxFVEUpCisJbWxfbGluZWFkZChidWYsIDEpOworICAgIGVsc2UgaWYgKGFjdGlvbiA9PSBNTF9JTlNFUlQpCisJbWxfbGluZWFkZChidWYsIC0xKTsKKyAgICBidWYtPmJfbWwubWxfc3RhY2tfdG9wID0gMDsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGFkZCBhbiBlbnRyeSB0byB0aGUgaW5mbyBwb2ludGVyIHN0YWNrCisgKgorICogcmV0dXJuIC0xIGZvciBmYWlsdXJlLCBudW1iZXIgb2YgdGhlIG5ldyBlbnRyeSBvdGhlcndpc2UKKyAqLworICAgIHN0YXRpYyBpbnQKK21sX2FkZF9zdGFjayhidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBpbnQJCXRvcDsKKyAgICBpbmZvcHRyX1QJKm5ld3N0YWNrOworCisgICAgdG9wID0gYnVmLT5iX21sLm1sX3N0YWNrX3RvcDsKKworCS8qIG1heSBoYXZlIHRvIGluY3JlYXNlIHRoZSBzdGFjayBzaXplICovCisgICAgaWYgKHRvcCA9PSBidWYtPmJfbWwubWxfc3RhY2tfc2l6ZSkKKyAgICB7CisJQ0hFQ0sodG9wID4gMCwgXygiU3RhY2sgc2l6ZSBpbmNyZWFzZXMiKSk7CS8qIG1vcmUgdGhhbiA1IGxldmVscz8/PyAqLworCisJbmV3c3RhY2sgPSAoaW5mb3B0cl9UICopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihpbmZvcHRyX1QpICoKKwkJCQkJKGJ1Zi0+Yl9tbC5tbF9zdGFja19zaXplICsgU1RBQ0tfSU5DUikpOworCWlmIChuZXdzdGFjayA9PSBOVUxMKQorCSAgICByZXR1cm4gLTE7CisJbWNoX21lbW1vdmUobmV3c3RhY2ssIGJ1Zi0+Yl9tbC5tbF9zdGFjaywgKHNpemVfdCl0b3AgKiBzaXplb2YoaW5mb3B0cl9UKSk7CisJdmltX2ZyZWUoYnVmLT5iX21sLm1sX3N0YWNrKTsKKwlidWYtPmJfbWwubWxfc3RhY2sgPSBuZXdzdGFjazsKKwlidWYtPmJfbWwubWxfc3RhY2tfc2l6ZSArPSBTVEFDS19JTkNSOworICAgIH0KKworICAgIGJ1Zi0+Yl9tbC5tbF9zdGFja190b3ArKzsKKyAgICByZXR1cm4gdG9wOworfQorCisvKgorICogVXBkYXRlIHRoZSBwb2ludGVyIGJsb2NrcyBvbiB0aGUgc3RhY2sgZm9yIGluc2VydGVkL2RlbGV0ZWQgbGluZXMuCisgKiBUaGUgc3RhY2sgaXRzZWxmIGlzIGFsc28gdXBkYXRlZC4KKyAqCisgKiBXaGVuIGEgaW5zZXJ0L2RlbGV0ZSBsaW5lIGFjdGlvbiBmYWlscywgdGhlIGxpbmUgaXMgbm90IGluc2VydGVkL2RlbGV0ZWQsCisgKiBidXQgdGhlIHBvaW50ZXIgYmxvY2tzIGhhdmUgYWxyZWFkeSBiZWVuIHVwZGF0ZWQuIFRoYXQgaXMgZml4ZWQgaGVyZSBieQorICogd2Fsa2luZyB0aHJvdWdoIHRoZSBzdGFjay4KKyAqCisgKiBDb3VudCBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGFkZGVkLCBuZWdhdGl2ZSBpZiBsaW5lcyBoYXZlIGJlZW4gZGVsZXRlZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCittbF9saW5lYWRkKGJ1ZiwgY291bnQpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCWNvdW50OworeworICAgIGludAkJaWR4OworICAgIGluZm9wdHJfVAkqaXA7CisgICAgUFRSX0JMCSpwcDsKKyAgICBtZW1maWxlX1QJKm1mcCA9IGJ1Zi0+Yl9tbC5tbF9tZnA7CisgICAgYmhkcl9UCSpocDsKKworICAgIGZvciAoaWR4ID0gYnVmLT5iX21sLm1sX3N0YWNrX3RvcCAtIDE7IGlkeCA+PSAwOyAtLWlkeCkKKyAgICB7CisJaXAgPSAmKGJ1Zi0+Yl9tbC5tbF9zdGFja1tpZHhdKTsKKwlpZiAoKGhwID0gbWZfZ2V0KG1mcCwgaXAtPmlwX2JudW0sIDEpKSA9PSBOVUxMKQorCSAgICBicmVhazsKKwlwcCA9IChQVFJfQkwgKikoaHAtPmJoX2RhdGEpOwkvKiBtdXN0IGJlIHBvaW50ZXIgYmxvY2sgKi8KKwlpZiAocHAtPnBiX2lkICE9IFBUUl9JRCkKKwl7CisJICAgIG1mX3B1dChtZnAsIGhwLCBGQUxTRSwgRkFMU0UpOworCSAgICBFTVNHKF8oIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMiIpKTsKKwkgICAgYnJlYWs7CisJfQorCXBwLT5wYl9wb2ludGVyW2lwLT5pcF9pbmRleF0ucGVfbGluZV9jb3VudCArPSBjb3VudDsKKwlpcC0+aXBfaGlnaCArPSBjb3VudDsKKwltZl9wdXQobWZwLCBocCwgVFJVRSwgRkFMU0UpOworICAgIH0KK30KKworLyoKKyAqIG1ha2Ugc3dhcCBmaWxlIG5hbWUgb3V0IG9mIHRoZSBmaWxlIG5hbWUgYW5kIGEgZGlyZWN0b3J5IG5hbWUKKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorbWFrZXN3YXBuYW1lKGJ1ZiwgZGlyX25hbWUpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBjaGFyX3UJKmRpcl9uYW1lOworeworICAgIGNoYXJfdQkqciwgKnM7CisKKyNpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoV0lOMzI2NCkgIC8qIE5lZWQgX3ZlcnlfIGxvbmcgZmlsZSBuYW1lcyAqLworICAgIHMgPSBkaXJfbmFtZSArIFNUUkxFTihkaXJfbmFtZSk7CisgICAgaWYgKHZpbV9pc3BhdGhzZXAoc1stMV0pICYmIHNbLTFdID09IHNbLTJdKQorICAgIHsJCQkgICAgICAgLyogRW5kcyB3aXRoICcvLycsIFVzZSBGdWxsIHBhdGggKi8KKwlyID0gTlVMTDsKKwlpZiAoKHMgPSBtYWtlX3BlcmNlbnRfc3duYW1lKGRpcl9uYW1lLCBidWYtPmJfZm5hbWUpKSAhPSBOVUxMKQorCXsKKwkgICAgciA9IG1vZG5hbWUocywgKGNoYXJfdSAqKSIuc3dwIiwgRkFMU0UpOworCSAgICB2aW1fZnJlZShzKTsKKwl9CisJcmV0dXJuIHI7CisgICAgfQorI2VuZGlmCisKKyAgICByID0gYnVmX21vZG5hbWUoCisjaWZkZWYgU0hPUlRfRk5BTUUKKwkgICAgVFJVRSwKKyNlbHNlCisJICAgIChidWYtPmJfcF9zbiB8fCBidWYtPmJfc2hvcnRuYW1lKSwKKyNlbmRpZgorI2lmZGVmIFJJU0NPUworCSAgICAvKiBBdm9pZCBwcm9ibGVtcyBpZiBmbmFtZSBoYXMgc3BlY2lhbCBjaGFycywgZWcgPFdpbXAkU2NyYXA+ICovCisJICAgIGJ1Zi0+Yl9mZm5hbWUsCisjZWxzZQorCSAgICBidWYtPmJfZm5hbWUsCisjZW5kaWYKKwkgICAgKGNoYXJfdSAqKQorI2lmIGRlZmluZWQoVk1TKSB8fCBkZWZpbmVkKFJJU0NPUykKKwkgICAgIl9zd3AiLAorI2Vsc2UKKwkgICAgIi5zd3AiLAorI2VuZGlmCisjaWZkZWYgU0hPUlRfRk5BTUUJCS8qIGFsd2F5cyA4LjMgZmlsZSBuYW1lICovCisJICAgIEZBTFNFCisjZWxzZQorCSAgICAvKiBQcmVwZW5kIGEgJy4nIHRvIHRoZSBzd2FwIGZpbGUgbmFtZSBmb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAqLworCSAgICBkaXJfbmFtZVswXSA9PSAnLicgJiYgZGlyX25hbWVbMV0gPT0gTlVMCisjZW5kaWYKKwkgICAgICAgKTsKKyAgICBpZiAociA9PSBOVUxMKQkgICAgLyogb3V0IG9mIG1lbW9yeSAqLworCXJldHVybiBOVUxMOworCisgICAgcyA9IGdldF9maWxlX2luX2RpcihyLCBkaXJfbmFtZSk7CisgICAgdmltX2ZyZWUocik7CisgICAgcmV0dXJuIHM7Cit9CisKKy8qCisgKiBHZXQgZmlsZSBuYW1lIHRvIHVzZSBmb3Igc3dhcCBmaWxlIG9yIGJhY2t1cCBmaWxlLgorICogVXNlIHRoZSBuYW1lIG9mIHRoZSBlZGl0ZWQgZmlsZSAiZm5hbWUiIGFuZCBhbiBlbnRyeSBpbiB0aGUgJ2Rpcicgb3IgJ2JkaXInCisgKiBvcHRpb24gImRuYW1lIi4KKyAqIC0gSWYgImRuYW1lIiBpcyAiLiIsIHJldHVybiAiZm5hbWUiIChzd2FwIGZpbGUgaW4gZGlyIG9mIGZpbGUpLgorICogLSBJZiAiZG5hbWUiIHN0YXJ0cyB3aXRoICIuLyIsIGluc2VydCAiZG5hbWUiIGluICJmbmFtZSIgKHN3YXAgZmlsZQorICogICByZWxhdGl2ZSB0byBkaXIgb2YgZmlsZSkuCisgKiAtIE90aGVyd2lzZSwgcHJlcGVuZCAiZG5hbWUiIHRvIHRoZSB0YWlsIG9mICJmbmFtZSIgKHN3YXAgZmlsZSBpbiBzcGVjaWZpYworICogICBkaXIpLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYWxsb2NhdGVkIHN0cmluZyBhbmQgY2FuIGJlIE5VTEwuCisgKi8KKyAgICBjaGFyX3UgKgorZ2V0X2ZpbGVfaW5fZGlyKGZuYW1lLCBkbmFtZSkKKyAgICBjaGFyX3UgICpmbmFtZTsKKyAgICBjaGFyX3UgICpkbmFtZTsJLyogZG9uJ3QgdXNlICJkaXJuYW1lIiwgaXQgaXMgYSBnbG9iYWwgZm9yIEFscGhhICovCit7CisgICAgY2hhcl91CSp0OworICAgIGNoYXJfdQkqdGFpbDsKKyAgICBjaGFyX3UJKnJldHZhbDsKKyAgICBpbnQJCXNhdmVfY2hhcjsKKworICAgIHRhaWwgPSBnZXR0YWlsKGZuYW1lKTsKKworICAgIGlmIChkbmFtZVswXSA9PSAnLicgJiYgZG5hbWVbMV0gPT0gTlVMKQorCXJldHZhbCA9IHZpbV9zdHJzYXZlKGZuYW1lKTsKKyAgICBlbHNlIGlmIChkbmFtZVswXSA9PSAnLicgJiYgdmltX2lzcGF0aHNlcChkbmFtZVsxXSkpCisgICAgeworCWlmICh0YWlsID09IGZuYW1lKQkgICAgLyogbm8gcGF0aCBiZWZvcmUgZmlsZSBuYW1lICovCisJICAgIHJldHZhbCA9IGNvbmNhdF9mbmFtZXMoZG5hbWUgKyAyLCB0YWlsLCBUUlVFKTsKKwllbHNlCisJeworCSAgICBzYXZlX2NoYXIgPSAqdGFpbDsKKwkgICAgKnRhaWwgPSBOVUw7CisJICAgIHQgPSBjb25jYXRfZm5hbWVzKGZuYW1lLCBkbmFtZSArIDIsIFRSVUUpOworCSAgICAqdGFpbCA9IHNhdmVfY2hhcjsKKwkgICAgaWYgKHQgPT0gTlVMTCkJICAgIC8qIG91dCBvZiBtZW1vcnkgKi8KKwkJcmV0dmFsID0gTlVMTDsKKwkgICAgZWxzZQorCSAgICB7CisJCXJldHZhbCA9IGNvbmNhdF9mbmFtZXModCwgdGFpbCwgVFJVRSk7CisJCXZpbV9mcmVlKHQpOworCSAgICB9CisJfQorICAgIH0KKyAgICBlbHNlCisJcmV0dmFsID0gY29uY2F0X2ZuYW1lcyhkbmFtZSwgdGFpbCwgVFJVRSk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogRmluZCBvdXQgd2hhdCBuYW1lIHRvIHVzZSBmb3IgdGhlIHN3YXAgZmlsZSBmb3IgYnVmZmVyICdidWYnLgorICoKKyAqIFNldmVyYWwgbmFtZXMgYXJlIHRyaWVkIHRvIGZpbmQgb25lIHRoYXQgZG9lcyBub3QgZXhpc3QKKyAqCisgKiBOb3RlOiBJZiBCQVNFTkFNRUxFTiBpcyBub3QgY29ycmVjdCwgeW91IHdpbGwgZ2V0IGVycm9yIG1lc3NhZ2VzIGZvcgorICoJIG5vdCBiZWluZyBhYmxlIHRvIG9wZW4gdGhlIHN3YXBmaWxlCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2ZpbmRzd2FwbmFtZShidWYsIGRpcnAsIG9sZF9mbmFtZSkKKyAgICBidWZfVAkqYnVmOworICAgIGNoYXJfdQkqKmRpcnA7CQkvKiBwb2ludGVyIHRvIGxpc3Qgb2YgZGlyZWN0b3JpZXMgKi8KKyAgICBjaGFyX3UJKm9sZF9mbmFtZTsJLyogZG9uJ3QgZ2l2ZSB3YXJuaW5nIGZvciB0aGlzIGZpbGUgbmFtZSAqLworeworICAgIGNoYXJfdQkqZm5hbWU7CisgICAgaW50CQluOworICAgIHRpbWVfdAl4LCBzeDsKKyAgICBjaGFyX3UJKmRpcl9uYW1lOworI2lmZGVmIEFNSUdBCisgICAgQlBUUglmaDsKKyNlbmRpZgorI2lmbmRlZiBTSE9SVF9GTkFNRQorICAgIGludAkJcjsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0hPUlRfRk5BTUUpIFwKKwkJICAgICAmJiAoKCFkZWZpbmVkKFVOSVgpICYmICFkZWZpbmVkKE9TMikpIHx8IGRlZmluZWQoQVJDSElFKSkKKyMgZGVmaW5lIENSRUFURV9EVU1NWV9GSUxFCisgICAgRklMRQkqZHVtbXlmZCA9IE5VTEw7CisKKy8qCisgKiBJZiB3ZSBzdGFydCBlZGl0aW5nIGEgbmV3IGZpbGUsIGUuZy4gInRlc3QuZG9jIiwgd2hpY2ggcmVzaWRlcyBvbiBhbiBNU0RPUworICogY29tcGF0aWJsZSBmaWxlc3lzdGVtLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBmaWxlICJ0ZXN0LmRvYy5zd3AiIHdoaWNoIHdlCisgKiBjcmVhdGUgd2lsbCBiZSBleGFjdGx5IHRoZSBzYW1lIGZpbGUuIFRvIGF2b2lkIHRoaXMgcHJvYmxlbSB3ZSB0ZW1wb3JhcmlseQorICogY3JlYXRlICJ0ZXN0LmRvYyIuCisgKiBEb24ndCBkbyB0aGlzIHdoZW4gdGhlIGNoZWNrIGJlbG93IGZvciBhIDguMyBmaWxlIG5hbWUgaXMgdXNlZC4KKyAqLworICAgIGlmICghKGJ1Zi0+Yl9wX3NuIHx8IGJ1Zi0+Yl9zaG9ydG5hbWUpICYmIGJ1Zi0+Yl9mbmFtZSAhPSBOVUxMCisJCQkJCSAgICAgJiYgbWNoX2dldHBlcm0oYnVmLT5iX2ZuYW1lKSA8IDApCisJZHVtbXlmZCA9IG1jaF9mb3BlbigoY2hhciAqKWJ1Zi0+Yl9mbmFtZSwgInciKTsKKyNlbmRpZgorCisvKgorICogSXNvbGF0ZSBhIGRpcmVjdG9yeSBuYW1lIGZyb20gKmRpcnAgYW5kIHB1dCBpdCBpbiBkaXJfbmFtZS4KKyAqIEZpcnN0IGFsbG9jYXRlIHNvbWUgbWVtb3J5IHRvIHB1dCB0aGUgZGlyZWN0b3J5IG5hbWUgaW4uCisgKi8KKyAgICBkaXJfbmFtZSA9IGFsbG9jKCh1bnNpZ25lZClTVFJMRU4oKmRpcnApICsgMSk7CisgICAgaWYgKGRpcl9uYW1lICE9IE5VTEwpCisJKHZvaWQpY29weV9vcHRpb25fcGFydChkaXJwLCBkaXJfbmFtZSwgMzEwMDAsICIsIik7CisKKy8qCisgKiB3ZSB0cnkgZGlmZmVyZW50IG5hbWVzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgZG9lcyBub3QgZXhpc3QgeWV0CisgKi8KKyAgICBpZiAoZGlyX25hbWUgPT0gTlVMTCkJICAgIC8qIG91dCBvZiBtZW1vcnkgKi8KKwlmbmFtZSA9IE5VTEw7CisgICAgZWxzZQorCWZuYW1lID0gbWFrZXN3YXBuYW1lKGJ1ZiwgZGlyX25hbWUpOworCisgICAgZm9yICg7OykKKyAgICB7CisJaWYgKGZuYW1lID09IE5VTEwpCS8qIG11c3QgYmUgb3V0IG9mIG1lbW9yeSAqLworCSAgICBicmVhazsKKwlpZiAoKG4gPSAoaW50KVNUUkxFTihmbmFtZSkpID09IDApCS8qIHNhZmV0eSBjaGVjayAqLworCXsKKwkgICAgdmltX2ZyZWUoZm5hbWUpOworCSAgICBmbmFtZSA9IE5VTEw7CisJICAgIGJyZWFrOworCX0KKyNpZiAoZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKE9TMikpICYmICFkZWZpbmVkKEFSQ0hJRSkgJiYgIWRlZmluZWQoU0hPUlRfRk5BTUUpCisvKgorICogU29tZSBzeXN0ZW1zIGhhdmUgYSBNUy1ET1MgY29tcGF0aWJsZSBmaWxlc3lzdGVtIHRoYXQgdXNlIDguMyBjaGFyYWN0ZXIKKyAqIGZpbGUgbmFtZXMuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRyeSBhbmQgdGhlIHN3YXAgZmlsZSBuYW1lIGRvZXMgbm90IGZpdCBpbgorICogOC4zLCBkZXRlY3QgaWYgdGhpcyBpcyB0aGUgY2FzZSwgc2V0IHNob3J0bmFtZSBhbmQgdHJ5IGFnYWluLgorICovCisJaWYgKGZuYW1lW24gLSAyXSA9PSAndycgJiYgZm5hbWVbbiAtIDFdID09ICdwJworCQkJCQkmJiAhKGJ1Zi0+Yl9wX3NuIHx8IGJ1Zi0+Yl9zaG9ydG5hbWUpKQorCXsKKwkgICAgY2hhcl91CSAgICAqdGFpbDsKKwkgICAgY2hhcl91CSAgICAqZm5hbWUyOworCSAgICBzdHJ1Y3Qgc3RhdAkgICAgczEsIHMyOworCSAgICBpbnQJCSAgICBmMSwgZjI7CisJICAgIGludAkJICAgIGNyZWF0ZWQxID0gRkFMU0UsIGNyZWF0ZWQyID0gRkFMU0U7CisJICAgIGludAkJICAgIHNhbWUgPSBGQUxTRTsKKworCSAgICAvKgorCSAgICAgKiBDaGVjayBpZiBzd2FwZmlsZSBuYW1lIGRvZXMgbm90IGZpdCBpbiA4LjM6CisJICAgICAqIEl0IGVpdGhlciBjb250YWlucyB0d28gZG90cywgaXMgbG9uZ2VyIHRoYW4gOCBjaGFycywgb3Igc3RhcnRzCisJICAgICAqIHdpdGggYSBkb3QuCisJICAgICAqLworCSAgICB0YWlsID0gZ2V0dGFpbChidWYtPmJfZm5hbWUpOworCSAgICBpZiAoICAgICAgIHZpbV9zdHJjaHIodGFpbCwgJy4nKSAhPSBOVUxMCisJCSAgICB8fCBTVFJMRU4odGFpbCkgPiAoc2l6ZV90KTgKKwkJICAgIHx8ICpnZXR0YWlsKGZuYW1lKSA9PSAnLicpCisJICAgIHsKKwkJZm5hbWUyID0gYWxsb2MobiArIDIpOworCQlpZiAoZm5hbWUyICE9IE5VTEwpCisJCXsKKwkJICAgIFNUUkNQWShmbmFtZTIsIGZuYW1lKTsKKwkJICAgIC8qIGlmIGZuYW1lID09ICJ4eC54eC5zd3AiLAkgICAgZm5hbWUyID0gInh4Lnh4LnN3eCIKKwkJICAgICAqIGlmIGZuYW1lID09ICIueHguc3dwIiwJICAgIGZuYW1lMiA9ICIueHguc3dweCIKKwkJICAgICAqIGlmIGZuYW1lID09ICIxMjM0NTY3ODkuc3dwIiwgZm5hbWUyID0gIjEyMzQ1Njc4eC5zd3AiCisJCSAgICAgKi8KKwkJICAgIGlmICh2aW1fc3RyY2hyKHRhaWwsICcuJykgIT0gTlVMTCkKKwkJCWZuYW1lMltuIC0gMV0gPSAneCc7CisJCSAgICBlbHNlIGlmICgqZ2V0dGFpbChmbmFtZSkgPT0gJy4nKQorCQkgICAgeworCQkJZm5hbWUyW25dID0gJ3gnOworCQkJZm5hbWUyW24gKyAxXSA9IE5VTDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCWZuYW1lMltuIC0gNV0gKz0gMTsKKwkJICAgIC8qCisJCSAgICAgKiBtYXkgbmVlZCB0byBjcmVhdGUgdGhlIGZpbGVzIHRvIGJlIGFibGUgdG8gdXNlIG1jaF9zdGF0KCkKKwkJICAgICAqLworCQkgICAgZjEgPSBtY2hfb3BlbigoY2hhciAqKWZuYW1lLCBPX1JET05MWSB8IE9fRVhUUkEsIDApOworCQkgICAgaWYgKGYxIDwgMCkKKwkJICAgIHsKKwkJCWYxID0gbWNoX29wZW5fcncoKGNoYXIgKilmbmFtZSwKKwkJCQkJICAgICAgIE9fUkRXUnxPX0NSRUFUfE9fRVhDTHxPX0VYVFJBKTsKKyNpZiBkZWZpbmVkKE9TMikKKwkJCWlmIChmMSA8IDAgJiYgZXJybm8gPT0gRU5PRU5UKQorCQkJICAgIHNhbWUgPSBUUlVFOworI2VuZGlmCisJCQljcmVhdGVkMSA9IFRSVUU7CisJCSAgICB9CisJCSAgICBpZiAoZjEgPj0gMCkKKwkJICAgIHsKKwkJCWYyID0gbWNoX29wZW4oKGNoYXIgKilmbmFtZTIsIE9fUkRPTkxZIHwgT19FWFRSQSwgMCk7CisJCQlpZiAoZjIgPCAwKQorCQkJeworCQkJICAgIGYyID0gbWNoX29wZW5fcncoKGNoYXIgKilmbmFtZTIsCisJCQkJCSAgICAgICBPX1JEV1J8T19DUkVBVHxPX0VYQ0x8T19FWFRSQSk7CisJCQkgICAgY3JlYXRlZDIgPSBUUlVFOworCQkJfQorCQkJaWYgKGYyID49IDApCisJCQl7CisJCQkgICAgLyoKKwkJCSAgICAgKiBCb3RoIGZpbGVzIGV4aXN0IG5vdy4gSWYgbWNoX3N0YXQoKSByZXR1cm5zIHRoZQorCQkJICAgICAqIHNhbWUgZGV2aWNlIGFuZCBpbm9kZSB0aGV5IGFyZSB0aGUgc2FtZSBmaWxlLgorCQkJICAgICAqLworCQkJICAgIGlmIChtY2hfZnN0YXQoZjEsICZzMSkgIT0gLTEKKwkJCQkgICAgJiYgbWNoX2ZzdGF0KGYyLCAmczIpICE9IC0xCisJCQkJICAgICYmIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYKKwkJCQkgICAgJiYgczEuc3RfaW5vID09IHMyLnN0X2lubykKKwkJCQlzYW1lID0gVFJVRTsKKwkJCSAgICBjbG9zZShmMik7CisJCQkgICAgaWYgKGNyZWF0ZWQyKQorCQkJCW1jaF9yZW1vdmUoZm5hbWUyKTsKKwkJCX0KKwkJCWNsb3NlKGYxKTsKKwkJCWlmIChjcmVhdGVkMSkKKwkJCSAgICBtY2hfcmVtb3ZlKGZuYW1lKTsKKwkJICAgIH0KKwkJICAgIHZpbV9mcmVlKGZuYW1lMik7CisJCSAgICBpZiAoc2FtZSkKKwkJICAgIHsKKwkJCWJ1Zi0+Yl9zaG9ydG5hbWUgPSBUUlVFOworCQkJdmltX2ZyZWUoZm5hbWUpOworCQkJZm5hbWUgPSBtYWtlc3dhcG5hbWUoYnVmLCBkaXJfbmFtZSk7CisJCQljb250aW51ZTsJLyogdHJ5IGFnYWluIHdpdGggYl9zaG9ydG5hbWUgc2V0ICovCisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZgorCS8qCisJICogY2hlY2sgaWYgdGhlIHN3YXBmaWxlIGFscmVhZHkgZXhpc3RzCisJICovCisJaWYgKG1jaF9nZXRwZXJtKGZuYW1lKSA8IDApCS8qIGl0IGRvZXMgbm90IGV4aXN0ICovCisJeworI2lmZGVmIEhBVkVfTFNUQVQKKwkgICAgc3RydWN0IHN0YXQgc2I7CisKKwkgICAgLyoKKwkgICAgICogRXh0cmEgc2VjdXJpdHkgY2hlY2s6IFdoZW4gYSBzd2FwIGZpbGUgaXMgYSBzeW1ib2xpYyBsaW5rLCB0aGlzCisJICAgICAqIGlzIG1vc3QgbGlrZWx5IGEgc3ltbGluayBhdHRhY2suCisJICAgICAqLworCSAgICBpZiAobWNoX2xzdGF0KChjaGFyICopZm5hbWUsICZzYikgPCAwKQorI2Vsc2UKKyMgaWZkZWYgQU1JR0EKKwkgICAgZmggPSBPcGVuKChVQllURSAqKWZuYW1lLCAobG9uZylNT0RFX05FV0ZJTEUpOworCSAgICAvKgorCSAgICAgKiBvbiB0aGUgQW1pZ2EgbWNoX2dldHBlcm0oKSB3aWxsIHJldHVybiAtMSB3aGVuIHRoZSBmaWxlIGV4aXN0cworCSAgICAgKiBidXQgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyIHByb2dyYW0uIFRoaXMgaGFwcGVucyBpZiB5b3UgZWRpdAorCSAgICAgKiBhIGZpbGUgdHdpY2UuCisJICAgICAqLworCSAgICBpZiAoZmggIT0gKEJQVFIpTlVMTCkJLyogY2FuIG9wZW4gZmlsZSwgT0sgKi8KKwkgICAgeworCQlDbG9zZShmaCk7CisJCW1jaF9yZW1vdmUoZm5hbWUpOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoSW9FcnIoKSAhPSBFUlJPUl9PQkpFQ1RfSU5fVVNFCisJCQkJCSAgICAmJiBJb0VycigpICE9IEVSUk9SX09CSkVDVF9FWElTVFMpCisjIGVuZGlmCisjZW5kaWYKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBBIGZpbGUgbmFtZSBlcXVhbCB0byBvbGRfZm5hbWUgaXMgT0sgdG8gdXNlLgorCSAqLworCWlmIChvbGRfZm5hbWUgIT0gTlVMTCAmJiBmbmFtZWNtcChmbmFtZSwgb2xkX2ZuYW1lKSA9PSAwKQorCSAgICBicmVhazsKKworCS8qCisJICogZ2V0IGhlcmUgd2hlbiBmaWxlIGFscmVhZHkgZXhpc3RzCisJICovCisJaWYgKGZuYW1lW24gLSAyXSA9PSAndycgJiYgZm5hbWVbbiAtIDFdID09ICdwJykJLyogZmlyc3QgdHJ5ICovCisJeworI2lmbmRlZiBTSE9SVF9GTkFNRQorCSAgICAvKgorCSAgICAgKiBvbiBNUy1ET1MgY29tcGF0aWJsZSBmaWxlc3lzdGVtcyAoZS5nLiBtZXNzeWRvcykgZmlsZS5kb2Muc3dwCisJICAgICAqIGFuZCBmaWxlLmRvYyBhcmUgdGhlIHNhbWUgZmlsZS4gVG8gZ3Vlc3MgaWYgdGhpcyBwcm9ibGVtIGlzCisJICAgICAqIHByZXNlbnQgdHJ5IGlmIGZpbGUuZG9jLnN3eCBleGlzdHMuIElmIGl0IGRvZXMsIHdlIHNldAorCSAgICAgKiBidWYtPmJfc2hvcnRuYW1lIGFuZCB0cnkgZmlsZV9kb2Muc3dwIChkb3RzIHJlcGxhY2VkIGJ5CisJICAgICAqIHVuZGVyc2NvcmVzIGZvciB0aGlzIGZpbGUpLCBhbmQgdHJ5IGFnYWluLiBJZiBpdCBkb2Vzbid0IHdlCisJICAgICAqIGFzc3VtZSB0aGF0ICJmaWxlLmRvYy5zd3AiIGFscmVhZHkgZXhpc3RzLgorCSAgICAgKi8KKwkgICAgaWYgKCEoYnVmLT5iX3Bfc24gfHwgYnVmLT5iX3Nob3J0bmFtZSkpCS8qIG5vdCB0cmllZCB5ZXQgKi8KKwkgICAgeworCQlmbmFtZVtuIC0gMV0gPSAneCc7CisJCXIgPSBtY2hfZ2V0cGVybShmbmFtZSk7CQkvKiB0cnkgImZpbGUuc3d4IiAqLworCQlmbmFtZVtuIC0gMV0gPSAncCc7CisJCWlmIChyID49IDApCQkgICAgLyogImZpbGUuc3d4IiBzZWVtcyB0byBleGlzdCAqLworCQl7CisJCSAgICBidWYtPmJfc2hvcnRuYW1lID0gVFJVRTsKKwkJICAgIHZpbV9mcmVlKGZuYW1lKTsKKwkJICAgIGZuYW1lID0gbWFrZXN3YXBuYW1lKGJ1ZiwgZGlyX25hbWUpOworCQkgICAgY29udGludWU7CSAgICAvKiB0cnkgYWdhaW4gd2l0aCAnLicgcmVwbGFjZWQgd2l0aCAnXycgKi8KKwkJfQorCSAgICB9CisjZW5kaWYKKwkgICAgLyoKKwkgICAgICogSWYgd2UgZ2V0IGhlcmUgdGhlICIuc3dwIiBmaWxlIHJlYWxseSBleGlzdHMuCisJICAgICAqIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSwgdW5sZXNzIHJlY292ZXJpbmcsIG5vIGZpbGUgbmFtZSwgd2UgYXJlCisJICAgICAqIHZpZXdpbmcgYSBoZWxwIGZpbGUgb3Igd2hlbiB0aGUgcGF0aCBvZiB0aGUgZmlsZSBpcyBkaWZmZXJlbnQKKwkgICAgICogKGhhcHBlbnMgd2hlbiBhbGwgLnN3cCBmaWxlcyBhcmUgaW4gb25lIGRpcmVjdG9yeSkuCisJICAgICAqLworCSAgICBpZiAoIXJlY292ZXJ5bW9kZSAmJiBidWYtPmJfZm5hbWUgIT0gTlVMTCAmJiAhYnVmLT5iX2hlbHApCisJICAgIHsKKwkJaW50CQlmZDsKKwkJc3RydWN0IGJsb2NrMAliMDsKKwkJaW50CQlkaWZmZXIgPSBGQUxTRTsKKworCQkvKgorCQkgKiBUcnkgdG8gcmVhZCBibG9jayAwIGZyb20gdGhlIHN3YXAgZmlsZSB0byBnZXQgdGhlIG9yaWdpbmFsCisJCSAqIGZpbGUgbmFtZSAoYW5kIGlub2RlIG51bWJlcikuCisJCSAqLworCQlmZCA9IG1jaF9vcGVuKChjaGFyICopZm5hbWUsIE9fUkRPTkxZIHwgT19FWFRSQSwgMCk7CisJCWlmIChmZCA+PSAwKQorCQl7CisJCSAgICBpZiAocmVhZChmZCwgKGNoYXIgKikmYjAsIHNpemVvZihiMCkpID09IHNpemVvZihiMCkpCisJCSAgICB7CisJCQkvKgorCQkJICogVGhlIG5hbWUgaW4gdGhlIHN3YXAgZmlsZSBtYXkgYmUgIn51c2VyL3BhdGgvZmlsZSIuCisJCQkgKiBFeHBhbmQgaXQgZmlyc3QuCisJCQkgKi8KKwkJCWV4cGFuZF9lbnYoYjAuYjBfZm5hbWUsIE5hbWVCdWZmLCBNQVhQQVRITCk7CisjaWZkZWYgQ0hFQ0tfSU5PREUKKwkJCWlmIChmbmFtZWNtcF9pbm8oYnVmLT5iX2ZmbmFtZSwgTmFtZUJ1ZmYsCisJCQkJCQkgICAgIGNoYXJfdG9fbG9uZyhiMC5iMF9pbm8pKSkKKwkJCSAgICBkaWZmZXIgPSBUUlVFOworI2Vsc2UKKwkJCWlmIChmbmFtZWNtcChOYW1lQnVmZiwgYnVmLT5iX2ZmbmFtZSkgIT0gMCkKKwkJCSAgICBkaWZmZXIgPSBUUlVFOworI2VuZGlmCisJCSAgICB9CisJCSAgICBjbG9zZShmZCk7CisJCX0KKyNpZmRlZiBSSVNDT1MKKwkJZWxzZQorCQkgICAgLyogQ2FuJ3Qgb3BlbiBzd2FwIGZpbGUsIHRob3VnaCBpdCBkb2VzIGV4aXN0LgorCQkgICAgICogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaXMgZWRpdGluZyB0d28gZmlsZXMgd2l0aAorCQkgICAgICogdGhlIHNhbWUgbmFtZSBpbiBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuIE5vIGVycm9yLgorCQkgICAgICovCisJCSAgICBkaWZmZXIgPSBUUlVFOworI2VuZGlmCisKKwkJLyogZ2l2ZSB0aGUgQVRURU5USU9OIG1lc3NhZ2Ugd2hlbiB0aGVyZSBpcyBhbiBvbGQgc3dhcCBmaWxlCisJCSAqIGZvciB0aGUgY3VycmVudCBmaWxlLCBhbmQgdGhlIGJ1ZmZlciB3YXMgbm90IHJlY292ZXJlZC4gKi8KKwkJaWYgKGRpZmZlciA9PSBGQUxTRSAmJiAhKGN1cmJ1Zi0+Yl9mbGFncyAmIEJGX1JFQ09WRVJFRCkKKwkJCSYmIHZpbV9zdHJjaHIocF9zaG0sIFNITV9BVFRFTlRJT04pID09IE5VTEwpCisJCXsKKwkJICAgIHN0cnVjdCBzdGF0IHN0OworI2lmZGVmIENSRUFURV9EVU1NWV9GSUxFCisJCSAgICBpbnQJCWRpZF91c2VfZHVtbXkgPSBGQUxTRTsKKworCQkgICAgLyogQXZvaWQgZ2V0dGluZyBhIHdhcm5pbmcgZm9yIHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWQKKwkJICAgICAqIG91dHNpZGUgb2YgVmltLCBpdCB3YXMgY3JlYXRlZCBhdCB0aGUgc3RhcnQgb2YgdGhpcworCQkgICAgICogZnVuY3Rpb24uICBEZWxldGUgdGhlIGZpbGUgbm93LCBiZWNhdXNlIFZpbSBtaWdodCBleGl0CisJCSAgICAgKiBoZXJlIGlmIHRoZSB3aW5kb3cgaXMgY2xvc2VkLiAqLworCQkgICAgaWYgKGR1bW15ZmQgIT0gTlVMTCkKKwkJICAgIHsKKwkJCWZjbG9zZShkdW1teWZkKTsKKwkJCWR1bW15ZmQgPSBOVUxMOworCQkJbWNoX3JlbW92ZShidWYtPmJfZm5hbWUpOworCQkJZGlkX3VzZV9kdW1teSA9IFRSVUU7CisJCSAgICB9CisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSQorCQkgICAgLyogSWYgd2UgYXJlIHN1cHBvc2VkIHRvIHN0YXJ0IHRoZSBHVUkgYnV0IGl0IHdhc24ndAorCQkgICAgICogY29tcGxldGVseSBzdGFydGVkIHlldCwgc3RhcnQgaXQgbm93LiAgVGhpcyBtYWtlcyB0aGUKKwkJICAgICAqIG1lc3NhZ2VzIGRpc3BsYXllZCBpbiB0aGUgVmltIHdpbmRvdyB3aGVuIGxvYWRpbmcgYQorCQkgICAgICogc2Vzc2lvbiBmcm9tIHRoZSAuZ3ZpbXJjIGZpbGUuICovCisJCSAgICBpZiAoZ3VpLnN0YXJ0aW5nICYmICFndWkuaW5fdXNlKQorCQkJZ3VpX3N0YXJ0KCk7CisjZW5kaWYKKworI2lmIChkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoX19FTVhfXykgfHwgZGVmaW5lZChWTVMpKSAmJiAoZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKSkKKwkJICAgIHByb2Nlc3Nfc3RpbGxfcnVubmluZyA9IEZBTFNFOworI2VuZGlmCisJCSAgICArK25vX3dhaXRfcmV0dXJuOworCQkgICAgKHZvaWQpRU1TRyhfKCJFMzI1OiBBVFRFTlRJT04iKSk7CisJCSAgICBNU0dfUFVUUyhfKCJcbkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIikpOworCQkgICAgbXNnX2hvbWVfcmVwbGFjZShmbmFtZSk7CisJCSAgICBNU0dfUFVUUygiXCJcbiIpOworCQkgICAgc3ggPSBzd2FwZmlsZV9pbmZvKGZuYW1lKTsKKwkJICAgIE1TR19QVVRTKF8oIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIpKTsKKwkJICAgIG1zZ19vdXR0cmFucyhidWYtPmJfZm5hbWUpOworCQkgICAgTVNHX1BVVFMoIlwiXG4iKTsKKwkJICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWJ1Zi0+Yl9mbmFtZSwgJnN0KSAhPSAtMSkKKwkJICAgIHsKKwkJCU1TR19QVVRTKF8oIiAgICAgICAgICAgICBkYXRlZDogIikpOworCQkJeCA9IHN0LnN0X210aW1lOyAgICAvKiBNYW54IEMgY2FuJ3QgZG8gJnN0LnN0X210aW1lICovCisJCQlNU0dfUFVUUyhjdGltZSgmeCkpOworCQkJaWYgKHN4ICE9IDAgJiYgeCA+IHN4KQorCQkJICAgIE1TR19QVVRTKF8oIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIikpOworCQkgICAgfQorCQkgICAgLyogU29tZSBvZiB0aGVzZSBtZXNzYWdlcyBhcmUgbG9uZyB0byBhbGxvdyB0cmFuc2xhdGlvbiB0bworCQkgICAgICogb3RoZXIgbGFuZ3VhZ2VzLiAqLworCQkgICAgTVNHX1BVVFMoXygiXG4oMSkgQW5vdGhlciBwcm9ncmFtIG1heSBiZSBlZGl0aW5nIHRoZSBzYW1lIGZpbGUuXG4gICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgYmUgY2FyZWZ1bCBub3QgdG8gZW5kIHVwIHdpdGggdHdvXG4gICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iKSk7CisJCSAgICBNU0dfUFVUUyhfKCIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIikpOworCQkgICAgTVNHX1BVVFMoXygiXG4oMikgQW4gZWRpdCBzZXNzaW9uIGZvciB0aGlzIGZpbGUgY3Jhc2hlZC5cbiIpKTsKKwkJICAgIE1TR19QVVRTKF8oIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIpKTsKKwkJICAgIG1zZ19vdXR0cmFucyhidWYtPmJfZm5hbWUpOworCQkgICAgTVNHX1BVVFMoXygiXCJcbiAgICB0byByZWNvdmVyIHRoZSBjaGFuZ2VzIChzZWUgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIpKTsKKwkJICAgIE1TR19QVVRTKF8oIiAgICBJZiB5b3UgZGlkIHRoaXMgYWxyZWFkeSwgZGVsZXRlIHRoZSBzd2FwIGZpbGUgXCIiKSk7CisJCSAgICBtc2dfb3V0dHJhbnMoZm5hbWUpOworCQkgICAgTVNHX1BVVFMoXygiXCJcbiAgICB0byBhdm9pZCB0aGlzIG1lc3NhZ2UuXG4iKSk7CisJCSAgICBjbWRsaW5lX3JvdyA9IG1zZ19yb3c7CisJCSAgICAtLW5vX3dhaXRfcmV0dXJuOworCisJCSAgICAvKiBXZSBkb24ndCB3YW50IGEgJ3EnIHR5cGVkIGF0IHRoZSBtb3JlLXByb21wdCBpbnRlcnJ1cHQKKwkJICAgICAqIGxvYWRpbmcgYSBmaWxlLiAqLworCQkgICAgZ290X2ludCA9IEZBTFNFOworCisjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKQorCQkgICAgaWYgKHN3YXBfZXhpc3RzX2FjdGlvbikKKwkJICAgIHsKKwkJCWNoYXJfdQkqbmFtZTsKKworCQkJbmFtZSA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKGZuYW1lKQorCQkJCSsgU1RSTEVOKF8oIlN3YXAgZmlsZSBcIiIpKQorCQkJCSsgU1RSTEVOKF8oIlwiIGFscmVhZHkgZXhpc3RzISIpKSArIDUpKTsKKwkJCWlmIChuYW1lICE9IE5VTEwpCisJCQl7CisJCQkgICAgU1RSQ1BZKG5hbWUsIF8oIlN3YXAgZmlsZSBcIiIpKTsKKwkJCSAgICBob21lX3JlcGxhY2UoTlVMTCwgZm5hbWUsIG5hbWUgKyBTVFJMRU4obmFtZSksCisJCQkJCQkJCSAgMTAwMCwgVFJVRSk7CisJCQkgICAgU1RSQ0FUKG5hbWUsIF8oIlwiIGFscmVhZHkgZXhpc3RzISIpKTsKKwkJCX0KKwkJCXN3aXRjaCAoZG9fZGlhbG9nKFZJTV9XQVJOSU5HLAorCQkJCSAgICAoY2hhcl91ICopXygiVklNIC0gQVRURU5USU9OIiksCisJCQkJICAgIG5hbWUgPT0gTlVMTAorCQkJCQk/ICAoY2hhcl91ICopXygiU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzISIpCisJCQkJCTogbmFtZSwKKyMgaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKF9fRU1YX18pIHx8IGRlZmluZWQoVk1TKQorCQkJCSAgICBwcm9jZXNzX3N0aWxsX3J1bm5pbmcKKwkJCQkJPyAoY2hhcl91ICopXygiJk9wZW4gUmVhZC1Pbmx5XG4mRWRpdCBhbnl3YXlcbiZSZWNvdmVyXG4mUXVpdFxuJkFib3J0IikgOgorIyBlbmRpZgorCQkJCQkoY2hhcl91ICopXygiJk9wZW4gUmVhZC1Pbmx5XG4mRWRpdCBhbnl3YXlcbiZSZWNvdmVyXG4mUXVpdFxuJkFib3J0XG4mRGVsZXRlIGl0IiksIDEsIE5VTEwpKQorCQkJeworCQkJICAgIGNhc2UgMToKKwkJCQlidWYtPmJfcF9ybyA9IFRSVUU7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSAyOgorCQkJCWJyZWFrOworCQkJICAgIGNhc2UgMzoKKwkJCQlzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfUkVDT1ZFUjsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIDQ6CisJCQkJc3dhcF9leGlzdHNfYWN0aW9uID0gU0VBX1FVSVQ7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSA1OgorCQkJCXN3YXBfZXhpc3RzX2FjdGlvbiA9IFNFQV9RVUlUOworCQkJCWdvdF9pbnQgPSBUUlVFOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgNjoKKwkJCQltY2hfcmVtb3ZlKGZuYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXZpbV9mcmVlKG5hbWUpOworCisJCQkvKiBwcmV0ZW5kIHNjcmVlbiBkaWRuJ3Qgc2Nyb2xsLCBuZWVkIHJlZHJhdyBhbnl3YXkgKi8KKwkJCW1zZ19zY3JvbGxlZCA9IDA7CisJCQlyZWRyYXdfYWxsX2xhdGVyKE5PVF9WQUxJRCk7CisKKwkJCS8qIElmIHRoZSBmaWxlIHdhcyBkZWxldGVkIHRoaXMgZm5hbWUgY2FuIGJlIHVzZWQuICovCisJCQlpZiAobWNoX2dldHBlcm0oZm5hbWUpIDwgMCkKKwkJCSAgICBicmVhazsKKwkJICAgIH0KKwkJICAgIGVsc2UKKyNlbmRpZgorCQkgICAgeworCQkJTVNHX1BVVFMoIlxuIik7CisJCQluZWVkX3dhaXRfcmV0dXJuID0gVFJVRTsgLyogY2FsbCB3YWl0X3JldHVybiBsYXRlciAqLworCQkgICAgfQorCisjaWZkZWYgQ1JFQVRFX0RVTU1ZX0ZJTEUKKwkJICAgIC8qIEdvaW5nIHRvIHRyeSBhbm90aGVyIG5hbWUsIG5lZWQgdGhlIGR1bW15IGZpbGUgYWdhaW4uICovCisJCSAgICBpZiAoZGlkX3VzZV9kdW1teSkKKwkJCWR1bW15ZmQgPSBtY2hfZm9wZW4oKGNoYXIgKilidWYtPmJfZm5hbWUsICJ3Iik7CisjZW5kaWYKKwkJfQorCSAgICB9CisJfQorCisJLyoKKwkgKiBDaGFuZ2UgdGhlICIuc3dwIiBleHRlbnNpb24gdG8gZmluZCBhbm90aGVyIGZpbGUgdGhhdCBjYW4gYmUgdXNlZC4KKwkgKiBGaXJzdCBkZWNyZW1lbnQgdGhlIGxhc3QgY2hhcjogIi5zd28iLCAiLnN3biIsIGV0Yy4KKwkgKiBJZiB0aGF0IHN0aWxsIGlzbid0IGVub3VnaCBkZWNyZW1lbnQgdGhlIGxhc3QgYnV0IG9uZSBjaGFyOiAiLnN2eiIKKwkgKiBDYW4gaGFwcGVuIHdoZW4gZWRpdGluZyBtYW55ICJObyBGaWxlIiBidWZmZXJzLgorCSAqLworCWlmIChmbmFtZVtuIC0gMV0gPT0gJ2EnKQkvKiAiLnM/YSIgKi8KKwl7CisJICAgIGlmIChmbmFtZVtuIC0gMl0gPT0gJ2EnKSAgICAvKiAiLnNhYSI6IHRyaWVkIGVub3VnaCwgZ2l2ZSB1cCAqLworCSAgICB7CisJCUVNU0coXygiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIpKTsKKwkJdmltX2ZyZWUoZm5hbWUpOworCQlmbmFtZSA9IE5VTEw7CisJCWJyZWFrOworCSAgICB9CisJICAgIC0tZm5hbWVbbiAtIDJdOwkJLyogIi5zdnoiLCAiLnN1eiIsIGV0Yy4gKi8KKwkgICAgZm5hbWVbbiAtIDFdID0gJ3onICsgMTsKKwl9CisJLS1mbmFtZVtuIC0gMV07CQkJLyogIi5zd28iLCAiLnN3biIsIGV0Yy4gKi8KKyAgICB9CisKKyAgICB2aW1fZnJlZShkaXJfbmFtZSk7CisjaWZkZWYgQ1JFQVRFX0RVTU1ZX0ZJTEUKKyAgICBpZiAoZHVtbXlmZCAhPSBOVUxMKQkvKiBmaWxlIGhhcyBiZWVuIGNyZWF0ZWQgdGVtcG9yYXJpbHkgKi8KKyAgICB7CisJZmNsb3NlKGR1bW15ZmQpOworCW1jaF9yZW1vdmUoYnVmLT5iX2ZuYW1lKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gZm5hbWU7Cit9CisKKyAgICBzdGF0aWMgaW50CitiMF9tYWdpY193cm9uZyhiMHApCisgICAgWkVST19CTCAqYjBwOworeworICAgIHJldHVybiAoYjBwLT5iMF9tYWdpY19sb25nICE9IChsb25nKUIwX01BR0lDX0xPTkcKKwkgICAgfHwgYjBwLT5iMF9tYWdpY19pbnQgIT0gKGludClCMF9NQUdJQ19JTlQKKwkgICAgfHwgYjBwLT5iMF9tYWdpY19zaG9ydCAhPSAoc2hvcnQpQjBfTUFHSUNfU0hPUlQKKwkgICAgfHwgYjBwLT5iMF9tYWdpY19jaGFyICE9IEIwX01BR0lDX0NIQVIpOworfQorCisjaWZkZWYgQ0hFQ0tfSU5PREUKKy8qCisgKiBDb21wYXJlIGN1cnJlbnQgZmlsZSBuYW1lIHdpdGggZmlsZSBuYW1lIGZyb20gc3dhcCBmaWxlLgorICogVHJ5IHRvIHVzZSBpbm9kZSBudW1iZXJzIHdoZW4gcG9zc2libGUuCisgKiBSZXR1cm4gbm9uLXplcm8gd2hlbiBmaWxlcyBhcmUgZGlmZmVyZW50LgorICoKKyAqIFdoZW4gY29tcGFyaW5nIGZpbGUgbmFtZXMgYSBmZXcgdGhpbmdzIGhhdmUgdG8gYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uOgorICogLSBXaGVuIHdvcmtpbmcgb3ZlciBhIG5ldHdvcmsgdGhlIGZ1bGwgcGF0aCBvZiBhIGZpbGUgZGVwZW5kcyBvbiB0aGUgaG9zdC4KKyAqICAgV2UgY2hlY2sgdGhlIGlub2RlIG51bWJlciBpZiBwb3NzaWJsZS4gIEl0IGlzIG5vdCAxMDAlIHJlbGlhYmxlIHRob3VnaCwKKyAqICAgYmVjYXVzZSB0aGUgZGV2aWNlIG51bWJlciBjYW5ub3QgYmUgdXNlZCBvdmVyIGEgbmV0d29yay4KKyAqIC0gV2hlbiBhIGZpbGUgZG9lcyBub3QgZXhpc3QgeWV0IChlZGl0aW5nIGEgbmV3IGZpbGUpIHRoZXJlIGlzIG5vIGlub2RlCisgKiAgIG51bWJlci4KKyAqIC0gVGhlIGZpbGUgbmFtZSBpbiBhIHN3YXAgZmlsZSBtYXkgbm90IGJlIHZhbGlkIG9uIHRoZSBjdXJyZW50IGhvc3QuICBUaGUKKyAqICAgIn51c2VyIiBmb3JtIGlzIHVzZWQgd2hlbmV2ZXIgcG9zc2libGUgdG8gYXZvaWQgdGhpcy4KKyAqCisgKiBUaGlzIGlzIGdldHRpbmcgY29tcGxpY2F0ZWQsIGxldCdzIG1ha2UgYSB0YWJsZToKKyAqCisgKgkJaW5vX2MgIGlub19zICBmbmFtZV9jICBmbmFtZV9zCWRpZmZlciA9CisgKgorICogYm90aCBmaWxlcyBleGlzdCAtPiBjb21wYXJlIGlub2RlIG51bWJlcnM6CisgKgkJIT0gMCAgICE9IDAJWAkgWAlpbm9fYyAhPSBpbm9fcworICoKKyAqIGlub2RlIG51bWJlcihzKSB1bmtub3duLCBmaWxlIG5hbWVzIGF2YWlsYWJsZSAtPiBjb21wYXJlIGZpbGUgbmFtZXMKKyAqCQk9PSAwCVgJT0sJIE9LCWZuYW1lX2MgIT0gZm5hbWVfcworICoJCSBYICAgICA9PSAwCU9LCSBPSwlmbmFtZV9jICE9IGZuYW1lX3MKKyAqCisgKiBjdXJyZW50IGZpbGUgZG9lc24ndCBleGlzdCwgZmlsZSBmb3Igc3dhcCBmaWxlIGV4aXN0LCBmaWxlIG5hbWUocykgbm90CisgKiBhdmFpbGFibGUgLT4gcHJvYmFibHkgZGlmZmVyZW50CisgKgkJPT0gMCAgICE9IDAgICAgRkFJTAkgWAlUUlVFCisgKgkJPT0gMCAgICE9IDAJWAlGQUlMCVRSVUUKKyAqCisgKiBjdXJyZW50IGZpbGUgZXhpc3RzLCBpbm9kZSBmb3Igc3dhcCB1bmtub3duLCBmaWxlIG5hbWUocykgbm90CisgKiBhdmFpbGFibGUgLT4gcHJvYmFibHkgZGlmZmVyZW50CisgKgkJIT0gMCAgID09IDAgICAgRkFJTAkgWAlUUlVFCisgKgkJIT0gMCAgID09IDAJWAlGQUlMCVRSVUUKKyAqCisgKiBjdXJyZW50IGZpbGUgZG9lc24ndCBleGlzdCwgaW5vZGUgZm9yIHN3YXAgdW5rbm93biwgb25lIGZpbGUgbmFtZSBub3QKKyAqIGF2YWlsYWJsZSAtPiBwcm9iYWJseSBkaWZmZXJlbnQKKyAqCQk9PSAwICAgPT0gMCAgICBGQUlMCSBPSwlUUlVFCisgKgkJPT0gMCAgID09IDAJT0sJRkFJTAlUUlVFCisgKgorICogY3VycmVudCBmaWxlIGRvZXNuJ3QgZXhpc3QsIGlub2RlIGZvciBzd2FwIHVua25vd24sIGJvdGggZmlsZSBuYW1lcyBub3QKKyAqIGF2YWlsYWJsZSAtPiBwcm9iYWJseSBzYW1lIGZpbGUKKyAqCQk9PSAwICAgPT0gMCAgICBGQUlMCUZBSUwJRkFMU0UKKyAqCisgKiBOb3RlIHRoYXQgd2hlbiB0aGUgaW5vX3QgaXMgNjQgYml0cywgb25seSB0aGUgbGFzdCAzMiB3aWxsIGJlIHVzZWQuICBUaGlzCisgKiBjYW4ndCBiZSBjaGFuZ2VkIHdpdGhvdXQgbWFraW5nIHRoZSBibG9jayAwIGluY29tcGF0aWJsZSB3aXRoIDMyIGJpdAorICogdmVyc2lvbnMuCisgKi8KKworICAgIHN0YXRpYyBpbnQKK2ZuYW1lY21wX2lubyhmbmFtZV9jLCBmbmFtZV9zLCBpbm9fYmxvY2swKQorICAgIGNoYXJfdQkqZm5hbWVfYzsJICAgIC8qIGN1cnJlbnQgZmlsZSBuYW1lICovCisgICAgY2hhcl91CSpmbmFtZV9zOwkgICAgLyogZmlsZSBuYW1lIGZyb20gc3dhcCBmaWxlICovCisgICAgbG9uZwlpbm9fYmxvY2swOworeworICAgIHN0cnVjdCBzdGF0CXN0OworICAgIGlub190CWlub19jID0gMDsJICAgIC8qIGlubyBvZiBjdXJyZW50IGZpbGUgKi8KKyAgICBpbm9fdAlpbm9fczsJCSAgICAvKiBpbm8gb2YgZmlsZSBmcm9tIHN3YXAgZmlsZSAqLworICAgIGNoYXJfdQlidWZfY1tNQVhQQVRITF07ICAgIC8qIGZ1bGwgcGF0aCBvZiBmbmFtZV9jICovCisgICAgY2hhcl91CWJ1Zl9zW01BWFBBVEhMXTsgICAgLyogZnVsbCBwYXRoIG9mIGZuYW1lX3MgKi8KKyAgICBpbnQJCXJldHZhbF9jOwkgICAgLyogZmxhZzogYnVmX2MgdmFsaWQgKi8KKyAgICBpbnQJCXJldHZhbF9zOwkgICAgLyogZmxhZzogYnVmX3MgdmFsaWQgKi8KKworICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWZuYW1lX2MsICZzdCkgPT0gMCkKKwlpbm9fYyA9IChpbm9fdClzdC5zdF9pbm87CisKKyAgICAvKgorICAgICAqIEZpcnN0IHdlIHRyeSB0byBnZXQgdGhlIGlub2RlIGZyb20gdGhlIGZpbGUgbmFtZSwgYmVjYXVzZSB0aGUgaW5vZGUgaW4KKyAgICAgKiB0aGUgc3dhcCBmaWxlIG1heSBiZSBvdXRkYXRlZC4gIElmIHRoYXQgZmFpbHMgKGUuZy4gdGhpcyBwYXRoIGlzIG5vdAorICAgICAqIHZhbGlkIG9uIHRoaXMgbWFjaGluZSksIHVzZSB0aGUgaW5vZGUgZnJvbSBibG9jayAwLgorICAgICAqLworICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWZuYW1lX3MsICZzdCkgPT0gMCkKKwlpbm9fcyA9IChpbm9fdClzdC5zdF9pbm87CisgICAgZWxzZQorCWlub19zID0gKGlub190KWlub19ibG9jazA7CisKKyAgICBpZiAoaW5vX2MgJiYgaW5vX3MpCisJcmV0dXJuIChpbm9fYyAhPSBpbm9fcyk7CisKKyAgICAvKgorICAgICAqIE9uZSBvZiB0aGUgaW5vZGUgbnVtYmVycyBpcyB1bmtub3duLCB0cnkgYSBmb3JjZWQgdmltX0Z1bGxOYW1lKCkgYW5kCisgICAgICogY29tcGFyZSB0aGUgZmlsZSBuYW1lcy4KKyAgICAgKi8KKyAgICByZXR2YWxfYyA9IHZpbV9GdWxsTmFtZShmbmFtZV9jLCBidWZfYywgTUFYUEFUSEwsIFRSVUUpOworICAgIHJldHZhbF9zID0gdmltX0Z1bGxOYW1lKGZuYW1lX3MsIGJ1Zl9zLCBNQVhQQVRITCwgVFJVRSk7CisgICAgaWYgKHJldHZhbF9jID09IE9LICYmIHJldHZhbF9zID09IE9LKQorCXJldHVybiAoU1RSQ01QKGJ1Zl9jLCBidWZfcykgIT0gMCk7CisKKyAgICAvKgorICAgICAqIENhbid0IGNvbXBhcmUgaW5vZGVzIG9yIGZpbGUgbmFtZXMsIGd1ZXNzIHRoYXQgdGhlIGZpbGVzIGFyZSBkaWZmZXJlbnQsCisgICAgICogdW5sZXNzIGJvdGggYXBwZWFyIG5vdCB0byBleGlzdCBhdCBhbGwuCisgICAgICovCisgICAgaWYgKGlub19zID09IDAgJiYgaW5vX2MgPT0gMCAmJiByZXR2YWxfYyA9PSBGQUlMICYmIHJldHZhbF9zID09IEZBSUwpCisJcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmIC8qIENIRUNLX0lOT0RFICovCisKKy8qCisgKiBNb3ZlIGEgbG9uZyBpbnRlZ2VyIGludG8gYSBmb3VyIGJ5dGUgY2hhcmFjdGVyIGFycmF5LgorICogVXNlZCBmb3IgbWFjaGluZSBpbmRlcGVuZGVuY3kgaW4gYmxvY2sgemVyby4KKyAqLworICAgIHN0YXRpYyB2b2lkCitsb25nX3RvX2NoYXIobiwgcykKKyAgICBsb25nICAgIG47CisgICAgY2hhcl91ICAqczsKK3sKKyAgICBzWzBdID0gKGNoYXJfdSkobiAmIDB4ZmYpOworICAgIG4gPSAodW5zaWduZWQpbiA+PiA4OworICAgIHNbMV0gPSAoY2hhcl91KShuICYgMHhmZik7CisgICAgbiA9ICh1bnNpZ25lZCluID4+IDg7CisgICAgc1syXSA9IChjaGFyX3UpKG4gJiAweGZmKTsKKyAgICBuID0gKHVuc2lnbmVkKW4gPj4gODsKKyAgICBzWzNdID0gKGNoYXJfdSkobiAmIDB4ZmYpOworfQorCisgICAgc3RhdGljIGxvbmcKK2NoYXJfdG9fbG9uZyhzKQorICAgIGNoYXJfdSAgKnM7Cit7CisgICAgbG9uZyAgICByZXR2YWw7CisKKyAgICByZXR2YWwgPSBzWzNdOworICAgIHJldHZhbCA8PD0gODsKKyAgICByZXR2YWwgfD0gc1syXTsKKyAgICByZXR2YWwgPDw9IDg7CisgICAgcmV0dmFsIHw9IHNbMV07CisgICAgcmV0dmFsIDw8PSA4OworICAgIHJldHZhbCB8PSBzWzBdOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworICAgIHZvaWQKK21sX3NldGRpcnR5KGJ1ZiwgZmxhZykKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJZmxhZzsKK3sKKyAgICBiaGRyX1QJKmhwOworICAgIFpFUk9fQkwJKmIwcDsKKworICAgIGlmICghYnVmLT5iX21sLm1sX21mcCkKKwlyZXR1cm47CisgICAgZm9yIChocCA9IGJ1Zi0+Yl9tbC5tbF9tZnAtPm1mX3VzZWRfbGFzdDsgaHAgIT0gTlVMTDsgaHAgPSBocC0+YmhfcHJldikKKyAgICB7CisJaWYgKGhwLT5iaF9ibnVtID09IDApCisJeworCSAgICBiMHAgPSAoWkVST19CTCAqKShocC0+YmhfZGF0YSk7CisJICAgIGIwcC0+YjBfZGlydHkgPSBmbGFnID8gMHg1NSA6IDA7CisJICAgIGhwLT5iaF9mbGFncyB8PSBCSF9ESVJUWTsKKwkgICAgbWZfc3luYyhidWYtPmJfbWwubWxfbWZwLCBNRlNfWkVSTyk7CisJICAgIGJyZWFrOworCX0KKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQllURU9GRikgfHwgZGVmaW5lZChQUk9UTykKKworI2RlZmluZSBNTENTX01BWEwgODAwCS8qIG1heCBubyBvZiBsaW5lcyBpbiBjaHVuayAqLworI2RlZmluZSBNTENTX01JTkwgNDAwICAgLyogc2hvdWxkIGJlIGhhbGYgb2YgTUxDU19NQVhMICovCisKKy8qCisgKiBLZWVwIGluZm9ybWF0aW9uIGZvciBmaW5kaW5nIGJ5dGUgb2Zmc2V0IG9mIGEgbGluZSwgdXBkdHl0cGUgbWF5IGJlIG9uZSBvZjoKKyAqIE1MX0NITktfQURETElORTogQWRkIGxlbiB0byBwYXJlbnQgY2h1bmssIHBvc3NpYmx5IHNwbGl0dGluZyBpdAorICoJICAgQ2FyZWZ1bDogTUxfQ0hOS19BRERMSU5FIG1heSBjYXVzZSBtbF9maW5kX2xpbmUoKSB0byBiZSBjYWxsZWQuCisgKiBNTF9DSE5LX0RFTExJTkU6IFN1YnRyYWN0IGxlbiBmcm9tIHBhcmVudCBjaHVuaywgcG9zc2libHkgZGVsZXRpbmcgaXQKKyAqIE1MX0NITktfVVBETElORTogQWRkIGxlbiB0byBwYXJlbnQgY2h1bmssIGFzIGEgc2lnbmVkIGVudGl0eS4KKyAqLworICAgIHN0YXRpYyB2b2lkCittbF91cGRhdGVjaHVuayhidWYsIGxpbmUsIGxlbiwgdXBkdHlwZSkKKyAgICBidWZfVAkqYnVmOworICAgIGxpbmVucl9UCWxpbmU7CisgICAgbG9uZwlsZW47CisgICAgaW50CQl1cGR0eXBlOworeworICAgIHN0YXRpYyBidWZfVAkqbWxfdXBkX2xhc3RidWYgPSBOVUxMOworICAgIHN0YXRpYyBsaW5lbnJfVAltbF91cGRfbGFzdGxpbmU7CisgICAgc3RhdGljIGxpbmVucl9UCW1sX3VwZF9sYXN0Y3VybGluZTsKKyAgICBzdGF0aWMgaW50CQltbF91cGRfbGFzdGN1cml4OworCisgICAgbGluZW5yX1QJCWN1cmxpbmUgPSBtbF91cGRfbGFzdGN1cmxpbmU7CisgICAgaW50CQkJY3VyaXggPSBtbF91cGRfbGFzdGN1cml4OworICAgIGxvbmcJCXNpemU7CisgICAgY2h1bmtzaXplX1QJCSpjdXJjaG5rOworICAgIGludAkJCXJlc3Q7CisgICAgYmhkcl9UCQkqaHA7CisgICAgREFUQV9CTAkJKmRwOworCisgICAgaWYgKGJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzID09IC0xIHx8IGxlbiA9PSAwKQorCXJldHVybjsKKyAgICBpZiAoYnVmLT5iX21sLm1sX2NodW5rc2l6ZSA9PSBOVUxMKQorICAgIHsKKwlidWYtPmJfbWwubWxfY2h1bmtzaXplID0gKGNodW5rc2l6ZV9UICopCisJCQkJICBhbGxvYygodW5zaWduZWQpc2l6ZW9mKGNodW5rc2l6ZV9UKSAqIDEwMCk7CisJaWYgKGJ1Zi0+Yl9tbC5tbF9jaHVua3NpemUgPT0gTlVMTCkKKwl7CisJICAgIGJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzID0gLTE7CisJICAgIHJldHVybjsKKwl9CisJYnVmLT5iX21sLm1sX251bWNodW5rcyA9IDEwMDsKKwlidWYtPmJfbWwubWxfdXNlZGNodW5rcyA9IDE7CisJYnVmLT5iX21sLm1sX2NodW5rc2l6ZVswXS5tbGNzX251bWxpbmVzID0gMTsKKwlidWYtPmJfbWwubWxfY2h1bmtzaXplWzBdLm1sY3NfdG90YWxzaXplID0gMTsKKyAgICB9CisKKyAgICBpZiAodXBkdHlwZSA9PSBNTF9DSE5LX1VQRExJTkUgJiYgYnVmLT5iX21sLm1sX2xpbmVfY291bnQgPT0gMSkKKyAgICB7CisJLyoKKwkgKiBGaXJzdCBsaW5lIGluIGVtcHR5IGJ1ZmZlciBmcm9tIG1sX2ZsdXNoX2xpbmUoKSAtLSByZXNldAorCSAqLworCWJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzID0gMTsKKwlidWYtPmJfbWwubWxfY2h1bmtzaXplWzBdLm1sY3NfbnVtbGluZXMgPSAxOworCWJ1Zi0+Yl9tbC5tbF9jaHVua3NpemVbMF0ubWxjc190b3RhbHNpemUgPQorCQkJCSAgKGxvbmcpU1RSTEVOKGJ1Zi0+Yl9tbC5tbF9saW5lX3B0cikgKyAxOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbmQgY2h1bmsgdGhhdCBvdXIgbGluZSBiZWxvbmdzIHRvLCBjdXJsaW5lIHdpbGwgYmUgYXQgc3RhcnQgb2YgdGhlCisgICAgICogY2h1bmsuCisgICAgICovCisgICAgaWYgKGJ1ZiAhPSBtbF91cGRfbGFzdGJ1ZiB8fCBsaW5lICE9IG1sX3VwZF9sYXN0bGluZSArIDEKKwkgICAgfHwgdXBkdHlwZSAhPSBNTF9DSE5LX0FERExJTkUpCisgICAgeworCWZvciAoY3VybGluZSA9IDEsIGN1cml4ID0gMDsKKwkgICAgIGN1cml4IDwgYnVmLT5iX21sLm1sX3VzZWRjaHVua3MgLSAxCisJICAgICAmJiBsaW5lID49IGN1cmxpbmUgKyBidWYtPmJfbWwubWxfY2h1bmtzaXplW2N1cml4XS5tbGNzX251bWxpbmVzOworCSAgICAgY3VyaXgrKykKKwl7CisJICAgIGN1cmxpbmUgKz0gYnVmLT5iX21sLm1sX2NodW5rc2l6ZVtjdXJpeF0ubWxjc19udW1saW5lczsKKwl9CisgICAgfQorICAgIGVsc2UgaWYgKGxpbmUgPj0gY3VybGluZSArIGJ1Zi0+Yl9tbC5tbF9jaHVua3NpemVbY3VyaXhdLm1sY3NfbnVtbGluZXMKKwkJICYmIGN1cml4IDwgYnVmLT5iX21sLm1sX3VzZWRjaHVua3MgLSAxKQorICAgIHsKKwkvKiBBZGp1c3QgY2FjaGVkIGN1cml4ICYgY3VybGluZSAqLworCWN1cmxpbmUgKz0gYnVmLT5iX21sLm1sX2NodW5rc2l6ZVtjdXJpeF0ubWxjc19udW1saW5lczsKKwljdXJpeCsrOworICAgIH0KKyAgICBjdXJjaG5rID0gYnVmLT5iX21sLm1sX2NodW5rc2l6ZSArIGN1cml4OworCisgICAgaWYgKHVwZHR5cGUgPT0gTUxfQ0hOS19ERUxMSU5FKQorCWxlbiAqPSAtMTsKKyAgICBjdXJjaG5rLT5tbGNzX3RvdGFsc2l6ZSArPSBsZW47CisgICAgaWYgKHVwZHR5cGUgPT0gTUxfQ0hOS19BRERMSU5FKQorICAgIHsKKwljdXJjaG5rLT5tbGNzX251bWxpbmVzKys7CisKKwkvKiBNYXkgcmVzaXplIGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBpbiBib3RoIGNhc2VzIGJlbG93ICovCisJaWYgKGJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzICsgMSA+PSBidWYtPmJfbWwubWxfbnVtY2h1bmtzKQorCXsKKwkgICAgYnVmLT5iX21sLm1sX251bWNodW5rcyA9IGJ1Zi0+Yl9tbC5tbF9udW1jaHVua3MgKiAzIC8gMjsKKwkgICAgYnVmLT5iX21sLm1sX2NodW5rc2l6ZSA9IChjaHVua3NpemVfVCAqKQorCQl2aW1fcmVhbGxvYyhidWYtPmJfbWwubWxfY2h1bmtzaXplLAorCQkJICAgIHNpemVvZihjaHVua3NpemVfVCkgKiBidWYtPmJfbWwubWxfbnVtY2h1bmtzKTsKKwkgICAgaWYgKGJ1Zi0+Yl9tbC5tbF9jaHVua3NpemUgPT0gTlVMTCkKKwkgICAgeworCQkvKiBIbW1tbSwgR2l2ZSB1cCBvbiBvZmZzZXQgZm9yIHRoaXMgYnVmZmVyICovCisJCWJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzID0gLTE7CisJCXJldHVybjsKKwkgICAgfQorCX0KKworCWlmIChidWYtPmJfbWwubWxfY2h1bmtzaXplW2N1cml4XS5tbGNzX251bWxpbmVzID49IE1MQ1NfTUFYTCkKKwl7CisJICAgIGludAkgICAgY291bnQ7CSAgICAvKiBudW1iZXIgb2YgZW50cmllcyBpbiBibG9jayAqLworCSAgICBpbnQJICAgIGlkeDsKKwkgICAgaW50CSAgICB0ZXh0X2VuZDsKKwkgICAgaW50CSAgICBsaW5lY250OworCisJICAgIG1jaF9tZW1tb3ZlKGJ1Zi0+Yl9tbC5tbF9jaHVua3NpemUgKyBjdXJpeCArIDEsCisJCQlidWYtPmJfbWwubWxfY2h1bmtzaXplICsgY3VyaXgsCisJCQkoYnVmLT5iX21sLm1sX3VzZWRjaHVua3MgLSBjdXJpeCkgKgorCQkJc2l6ZW9mKGNodW5rc2l6ZV9UKSk7CisJICAgIC8qIENvbXB1dGUgbGVuZ3RoIG9mIGZpcnN0IGhhbGYgb2YgbGluZXMgaW4gdGhlIHNwbGl0dGVkIGNodW5rICovCisJICAgIHNpemUgPSAwOworCSAgICBsaW5lY250ID0gMDsKKwkgICAgd2hpbGUgKGN1cmxpbmUgPCBidWYtPmJfbWwubWxfbGluZV9jb3VudAorCQkJJiYgbGluZWNudCA8IE1MQ1NfTUlOTCkKKwkgICAgeworCQlpZiAoKGhwID0gbWxfZmluZF9saW5lKGJ1ZiwgY3VybGluZSwgTUxfRklORCkpID09IE5VTEwpCisJCXsKKwkJICAgIGJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzID0gLTE7CisJCSAgICByZXR1cm47CisJCX0KKwkJZHAgPSAoREFUQV9CTCAqKShocC0+YmhfZGF0YSk7CisJCWNvdW50ID0gKGxvbmcpKGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfaGlnaCkgLQorCQkJKGxvbmcpKGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfbG93KSArIDE7CisJCWlkeCA9IGN1cmxpbmUgLSBidWYtPmJfbWwubWxfbG9ja2VkX2xvdzsKKwkJY3VybGluZSA9IGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfaGlnaCArIDE7CisJCWlmIChpZHggPT0gMCkvKiBmaXJzdCBsaW5lIGluIGJsb2NrLCB0ZXh0IGF0IHRoZSBlbmQgKi8KKwkJICAgIHRleHRfZW5kID0gZHAtPmRiX3R4dF9lbmQ7CisJCWVsc2UKKwkJICAgIHRleHRfZW5kID0gKChkcC0+ZGJfaW5kZXhbaWR4IC0gMV0pICYgREJfSU5ERVhfTUFTSyk7CisJCS8qIENvbXB1dGUgaW5kZXggb2YgbGFzdCBsaW5lIHRvIHVzZSBpbiB0aGlzIE1FTUxJTkUgKi8KKwkJcmVzdCA9IGNvdW50IC0gaWR4OworCQlpZiAobGluZWNudCArIHJlc3QgPiBNTENTX01JTkwpCisJCXsKKwkJICAgIGlkeCArPSBNTENTX01JTkwgLSBsaW5lY250IC0gMTsKKwkJICAgIGxpbmVjbnQgPSBNTENTX01JTkw7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBpZHggPSBjb3VudCAtIDE7CisJCSAgICBsaW5lY250ICs9IHJlc3Q7CisJCX0KKwkJc2l6ZSArPSB0ZXh0X2VuZCAtICgoZHAtPmRiX2luZGV4W2lkeF0pICYgREJfSU5ERVhfTUFTSyk7CisJICAgIH0KKwkgICAgYnVmLT5iX21sLm1sX2NodW5rc2l6ZVtjdXJpeF0ubWxjc19udW1saW5lcyA9IGxpbmVjbnQ7CisJICAgIGJ1Zi0+Yl9tbC5tbF9jaHVua3NpemVbY3VyaXggKyAxXS5tbGNzX251bWxpbmVzIC09IGxpbmVjbnQ7CisJICAgIGJ1Zi0+Yl9tbC5tbF9jaHVua3NpemVbY3VyaXhdLm1sY3NfdG90YWxzaXplID0gc2l6ZTsKKwkgICAgYnVmLT5iX21sLm1sX2NodW5rc2l6ZVtjdXJpeCArIDFdLm1sY3NfdG90YWxzaXplIC09IHNpemU7CisJICAgIGJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzKys7CisJICAgIG1sX3VwZF9sYXN0YnVmID0gTlVMTDsgICAvKiBGb3JjZSByZWNhbGMgb2YgY3VyaXggJiBjdXJsaW5lICovCisJICAgIHJldHVybjsKKwl9CisJZWxzZSBpZiAoYnVmLT5iX21sLm1sX2NodW5rc2l6ZVtjdXJpeF0ubWxjc19udW1saW5lcyA+PSBNTENTX01JTkwKKwkJICAgICAmJiBjdXJpeCA9PSBidWYtPmJfbWwubWxfdXNlZGNodW5rcyAtIDEKKwkJICAgICAmJiBidWYtPmJfbWwubWxfbGluZV9jb3VudCAtIGxpbmUgPD0gMSkKKwl7CisJICAgIC8qCisJICAgICAqIFdlIGFyZSBpbiB0aGUgbGFzdCBjaHVuayBhbmQgaXQgaXMgY2hlYXAgdG8gY3JhdGUgYSBuZXcgb25lCisJICAgICAqIGFmdGVyIHRoaXMuIERvIGl0IG5vdyB0byBhdm9pZCB0aGUgbG9vcCBhYm92ZSBsYXRlciBvbgorCSAgICAgKi8KKwkgICAgY3VyY2huayA9IGJ1Zi0+Yl9tbC5tbF9jaHVua3NpemUgKyBjdXJpeCArIDE7CisJICAgIGJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzKys7CisJICAgIGlmIChsaW5lID09IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSAgICB7CisJCWN1cmNobmstPm1sY3NfbnVtbGluZXMgPSAwOworCQljdXJjaG5rLT5tbGNzX3RvdGFsc2l6ZSA9IDA7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qCisJCSAqIExpbmUgaXMganVzdCBwcmlvciB0byBsYXN0LCBtb3ZlIGNvdW50IGZvciBsYXN0CisJCSAqIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlICB3aGVuIGxvYWRpbmcgYSBuZXcgZmlsZQorCQkgKi8KKwkJaHAgPSBtbF9maW5kX2xpbmUoYnVmLCBidWYtPmJfbWwubWxfbGluZV9jb3VudCwgTUxfRklORCk7CisJCWlmIChocCA9PSBOVUxMKQorCQl7CisJCSAgICBidWYtPmJfbWwubWxfdXNlZGNodW5rcyA9IC0xOworCQkgICAgcmV0dXJuOworCQl9CisJCWRwID0gKERBVEFfQkwgKikoaHAtPmJoX2RhdGEpOworCQlpZiAoZHAtPmRiX2xpbmVfY291bnQgPT0gMSkKKwkJICAgIHJlc3QgPSBkcC0+ZGJfdHh0X2VuZCAtIGRwLT5kYl90eHRfc3RhcnQ7CisJCWVsc2UKKwkJICAgIHJlc3QgPQorCQkJKChkcC0+ZGJfaW5kZXhbZHAtPmRiX2xpbmVfY291bnQgLSAyXSkgJiBEQl9JTkRFWF9NQVNLKQorCQkJLSBkcC0+ZGJfdHh0X3N0YXJ0OworCQljdXJjaG5rLT5tbGNzX3RvdGFsc2l6ZSA9IHJlc3Q7CisJCWN1cmNobmstPm1sY3NfbnVtbGluZXMgPSAxOworCQljdXJjaG5rWy0xXS5tbGNzX3RvdGFsc2l6ZSAtPSByZXN0OworCQljdXJjaG5rWy0xXS5tbGNzX251bWxpbmVzIC09IDE7CisJICAgIH0KKwl9CisgICAgfQorICAgIGVsc2UgaWYgKHVwZHR5cGUgPT0gTUxfQ0hOS19ERUxMSU5FKQorICAgIHsKKwljdXJjaG5rLT5tbGNzX251bWxpbmVzLS07CisJbWxfdXBkX2xhc3RidWYgPSBOVUxMOyAgIC8qIEZvcmNlIHJlY2FsYyBvZiBjdXJpeCAmIGN1cmxpbmUgKi8KKwlpZiAoY3VyaXggPCAoYnVmLT5iX21sLm1sX3VzZWRjaHVua3MgLSAxKQorCQkmJiAoY3VyY2huay0+bWxjc19udW1saW5lcyArIGN1cmNobmtbMV0ubWxjc19udW1saW5lcykKKwkJICAgPD0gTUxDU19NSU5MKQorCXsKKwkgICAgY3VyaXgrKzsKKwkgICAgY3VyY2huayA9IGJ1Zi0+Yl9tbC5tbF9jaHVua3NpemUgKyBjdXJpeDsKKwl9CisJZWxzZSBpZiAoY3VyaXggPT0gMCAmJiBjdXJjaG5rLT5tbGNzX251bWxpbmVzIDw9IDApCisJeworCSAgICBidWYtPmJfbWwubWxfdXNlZGNodW5rcy0tOworCSAgICBtY2hfbWVtbW92ZShidWYtPmJfbWwubWxfY2h1bmtzaXplLCBidWYtPmJfbWwubWxfY2h1bmtzaXplICsgMSwKKwkJCWJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzICogc2l6ZW9mKGNodW5rc2l6ZV9UKSk7CisJICAgIHJldHVybjsKKwl9CisJZWxzZSBpZiAoY3VyaXggPT0gMCB8fCAoY3VyY2huay0+bWxjc19udW1saW5lcyA+IDEwCisJCSAgICAmJiAoY3VyY2huay0+bWxjc19udW1saW5lcyArIGN1cmNobmtbLTFdLm1sY3NfbnVtbGluZXMpCisJCSAgICAgICA+IE1MQ1NfTUlOTCkpCisJeworCSAgICByZXR1cm47CisJfQorCisJLyogQ29sbGFwc2UgY2h1bmtzICovCisJY3VyY2hua1stMV0ubWxjc19udW1saW5lcyArPSBjdXJjaG5rLT5tbGNzX251bWxpbmVzOworCWN1cmNobmtbLTFdLm1sY3NfdG90YWxzaXplICs9IGN1cmNobmstPm1sY3NfdG90YWxzaXplOworCWJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzLS07CisJaWYgKGN1cml4IDwgYnVmLT5iX21sLm1sX3VzZWRjaHVua3MpCisJeworCSAgICBtY2hfbWVtbW92ZShidWYtPmJfbWwubWxfY2h1bmtzaXplICsgY3VyaXgsCisJCQlidWYtPmJfbWwubWxfY2h1bmtzaXplICsgY3VyaXggKyAxLAorCQkJKGJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzIC0gY3VyaXgpICoKKwkJCXNpemVvZihjaHVua3NpemVfVCkpOworCX0KKwlyZXR1cm47CisgICAgfQorICAgIG1sX3VwZF9sYXN0YnVmID0gYnVmOworICAgIG1sX3VwZF9sYXN0bGluZSA9IGxpbmU7CisgICAgbWxfdXBkX2xhc3RjdXJsaW5lID0gY3VybGluZTsKKyAgICBtbF91cGRfbGFzdGN1cml4ID0gY3VyaXg7Cit9CisKKy8qCisgKiBGaW5kIG9mZnNldCBmb3IgbGluZSBvciBsaW5lIHdpdGggb2Zmc2V0LgorICogRmluZCBsaW5lIHdpdGggb2Zmc2V0IGlmIGxpbmUgaXMgMDsgcmV0dXJuIHJlbWFpbmluZyBvZmZzZXQgaW4gb2ZmcAorICogRmluZCBvZmZzZXQgb2YgbGluZSBpZiBsaW5lID4gMAorICogcmV0dXJuIC0xIGlmIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUKKyAqLworICAgIGxvbmcKK21sX2ZpbmRfbGluZV9vcl9vZmZzZXQoYnVmLCBsaW5lLCBvZmZwKQorICAgIGJ1Zl9UCSpidWY7CisgICAgbGluZW5yX1QJbGluZTsKKyAgICBsb25nCSpvZmZwOworeworICAgIGxpbmVucl9UCWN1cmxpbmU7CisgICAgaW50CQljdXJpeDsKKyAgICBsb25nCXNpemU7CisgICAgYmhkcl9UCSpocDsKKyAgICBEQVRBX0JMCSpkcDsKKyAgICBpbnQJCWNvdW50OwkJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gYmxvY2sgKi8KKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCXN0YXJ0X2lkeDsKKyAgICBpbnQJCXRleHRfZW5kOworICAgIGxvbmcJb2Zmc2V0OworICAgIGludAkJbGVuOworICAgIGludAkJZmZkb3MgPSAoZ2V0X2ZpbGVmb3JtYXQoYnVmKSA9PSBFT0xfRE9TKTsKKyAgICBpbnQJCWV4dHJhID0gMDsKKworICAgIGlmIChidWYtPmJfbWwubWxfdXNlZGNodW5rcyA9PSAtMQorCSAgICB8fCBidWYtPmJfbWwubWxfY2h1bmtzaXplID09IE5VTEwKKwkgICAgfHwgbGluZSA8IDApCisJcmV0dXJuIC0xOworCisgICAgaWYgKG9mZnAgPT0gTlVMTCkKKwlvZmZzZXQgPSAwOworICAgIGVsc2UKKwlvZmZzZXQgPSAqb2ZmcDsKKyAgICBpZiAobGluZSA9PSAwICYmIG9mZnNldCA8PSAwKQorCXJldHVybiAxOyAgIC8qIE5vdCBhICJmaW5kIG9mZnNldCIgYW5kIG9mZnNldCAwIF9tdXN0XyBiZSBpbiBsaW5lIDEgKi8KKyAgICAvKgorICAgICAqIEZpbmQgdGhlIGxhc3QgY2h1bmsgYmVmb3JlIHRoZSBvbmUgY29udGFpbmluZyBvdXIgbGluZS4gTGFzdCBjaHVuayBpcworICAgICAqIHNwZWNpYWwgYmVjYXVzZSBpdCB3aWxsIG5ldmVyIHF1YWxpZnkKKyAgICAgKi8KKyAgICBjdXJsaW5lID0gMTsKKyAgICBjdXJpeCA9IHNpemUgPSAwOworICAgIHdoaWxlIChjdXJpeCA8IGJ1Zi0+Yl9tbC5tbF91c2VkY2h1bmtzIC0gMQorCSAgICAmJiAoKGxpbmUgIT0gMAorCSAgICAgJiYgbGluZSA+PSBjdXJsaW5lICsgYnVmLT5iX21sLm1sX2NodW5rc2l6ZVtjdXJpeF0ubWxjc19udW1saW5lcykKKwkJfHwgKG9mZnNldCAhPSAwCisJICAgICAgICYmIG9mZnNldCA+IHNpemUgKyBidWYtPmJfbWwubWxfY2h1bmtzaXplW2N1cml4XS5tbGNzX3RvdGFsc2l6ZQorCQkgICAgICArIGZmZG9zICogYnVmLT5iX21sLm1sX2NodW5rc2l6ZVtjdXJpeF0ubWxjc19udW1saW5lcykpKQorICAgIHsKKwljdXJsaW5lICs9IGJ1Zi0+Yl9tbC5tbF9jaHVua3NpemVbY3VyaXhdLm1sY3NfbnVtbGluZXM7CisJc2l6ZSArPSBidWYtPmJfbWwubWxfY2h1bmtzaXplW2N1cml4XS5tbGNzX3RvdGFsc2l6ZTsKKwlpZiAob2Zmc2V0ICYmIGZmZG9zKQorCSAgICBzaXplICs9IGJ1Zi0+Yl9tbC5tbF9jaHVua3NpemVbY3VyaXhdLm1sY3NfbnVtbGluZXM7CisJY3VyaXgrKzsKKyAgICB9CisKKyAgICB3aGlsZSAoKGxpbmUgIT0gMCAmJiBjdXJsaW5lIDwgbGluZSkgfHwgKG9mZnNldCAhPSAwICYmIHNpemUgPCBvZmZzZXQpKQorICAgIHsKKwlpZiAoY3VybGluZSA+IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50CisJCXx8IChocCA9IG1sX2ZpbmRfbGluZShidWYsIGN1cmxpbmUsIE1MX0ZJTkQpKSA9PSBOVUxMKQorCSAgICByZXR1cm4gLTE7CisJZHAgPSAoREFUQV9CTCAqKShocC0+YmhfZGF0YSk7CisJY291bnQgPSAobG9uZykoYnVmLT5iX21sLm1sX2xvY2tlZF9oaWdoKSAtCisJCShsb25nKShidWYtPmJfbWwubWxfbG9ja2VkX2xvdykgKyAxOworCXN0YXJ0X2lkeCA9IGlkeCA9IGN1cmxpbmUgLSBidWYtPmJfbWwubWxfbG9ja2VkX2xvdzsKKwlpZiAoaWR4ID09IDApLyogZmlyc3QgbGluZSBpbiBibG9jaywgdGV4dCBhdCB0aGUgZW5kICovCisJICAgIHRleHRfZW5kID0gZHAtPmRiX3R4dF9lbmQ7CisJZWxzZQorCSAgICB0ZXh0X2VuZCA9ICgoZHAtPmRiX2luZGV4W2lkeCAtIDFdKSAmIERCX0lOREVYX01BU0spOworCS8qIENvbXB1dGUgaW5kZXggb2YgbGFzdCBsaW5lIHRvIHVzZSBpbiB0aGlzIE1FTUxJTkUgKi8KKwlpZiAobGluZSAhPSAwKQorCXsKKwkgICAgaWYgKGN1cmxpbmUgKyAoY291bnQgLSBpZHgpID49IGxpbmUpCisJCWlkeCArPSBsaW5lIC0gY3VybGluZSAtIDE7CisJICAgIGVsc2UKKwkJaWR4ID0gY291bnQgLSAxOworCX0KKwllbHNlCisJeworCSAgICBleHRyYSA9IDA7CisJICAgIHdoaWxlIChvZmZzZXQgPj0gc2l6ZQorCQkgICAgICAgKyB0ZXh0X2VuZCAtIChpbnQpKChkcC0+ZGJfaW5kZXhbaWR4XSkgJiBEQl9JTkRFWF9NQVNLKQorCQkJCQkJCQkgICAgICArIGZmZG9zKQorCSAgICB7CisJCWlmIChmZmRvcykKKwkJICAgIHNpemUrKzsKKwkJaWYgKGlkeCA9PSBjb3VudCAtIDEpCisJCXsKKwkJICAgIGV4dHJhID0gMTsKKwkJICAgIGJyZWFrOworCQl9CisJCWlkeCsrOworCSAgICB9CisJfQorCWxlbiA9IHRleHRfZW5kIC0gKChkcC0+ZGJfaW5kZXhbaWR4XSkgJiBEQl9JTkRFWF9NQVNLKTsKKwlzaXplICs9IGxlbjsKKwlpZiAob2Zmc2V0ICE9IDAgJiYgc2l6ZSA+PSBvZmZzZXQpCisJeworCSAgICBpZiAoc2l6ZSArIGZmZG9zID09IG9mZnNldCkKKwkJKm9mZnAgPSAwOworCSAgICBlbHNlIGlmIChpZHggPT0gc3RhcnRfaWR4KQorCQkqb2ZmcCA9IG9mZnNldCAtIHNpemUgKyBsZW47CisJICAgIGVsc2UKKwkJKm9mZnAgPSBvZmZzZXQgLSBzaXplICsgbGVuCisJCSAgICAgLSAodGV4dF9lbmQgLSAoKGRwLT5kYl9pbmRleFtpZHggLSAxXSkgJiBEQl9JTkRFWF9NQVNLKSk7CisJICAgIGN1cmxpbmUgKz0gaWR4IC0gc3RhcnRfaWR4ICsgZXh0cmE7CisJICAgIGlmIChjdXJsaW5lID4gYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCXJldHVybiAtMTsJLyogZXhhY3RseSBvbmUgYnl0ZSBiZXlvbmQgdGhlIGVuZCAqLworCSAgICByZXR1cm4gY3VybGluZTsKKwl9CisJY3VybGluZSA9IGJ1Zi0+Yl9tbC5tbF9sb2NrZWRfaGlnaCArIDE7CisgICAgfQorCisgICAgaWYgKGZmZG9zKQorCXNpemUgKz0gbGluZSAtIDE7CisgICAgcmV0dXJuIHNpemU7Cit9CisKKy8qCisgKiBHb3RvIGJ5dGUgaW4gYnVmZmVyIHdpdGggb2Zmc2V0ICdjbnQnLgorICovCisgICAgdm9pZAorZ290b19ieXRlKGNudCkKKyAgICBsb25nCWNudDsKK3sKKyAgICBsb25nCWJvZmYgPSBjbnQ7CisgICAgbGluZW5yX1QJbG51bTsKKworICAgIG1sX2ZsdXNoX2xpbmUoY3VyYnVmKTsJLyogY2FjaGVkIGxpbmUgbWF5IGJlIGRpcnR5ICovCisgICAgc2V0cGNtYXJrKCk7CisgICAgaWYgKGJvZmYpCisJLS1ib2ZmOworICAgIGxudW0gPSBtbF9maW5kX2xpbmVfb3Jfb2Zmc2V0KGN1cmJ1ZiwgKGxpbmVucl9UKTAsICZib2ZmKTsKKyAgICBpZiAobG51bSA8IDEpCS8qIHBhc3QgdGhlIGVuZCAqLworICAgIHsKKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwljdXJ3aW4tPndfY3Vyc3dhbnQgPSBNQVhDT0w7CisJY29sYWR2YW5jZSgoY29sbnJfVClNQVhDT0wpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisJY3Vyd2luLT53X2N1cnNvci5jb2wgPSAoY29sbnJfVClib2ZmOworCWN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworICAgIH0KKyAgICBjaGVja19jdXJzb3IoKTsKKworIyBpZmRlZiBGRUFUX01CWVRFCisgICAgLyogTWFrZSBzdXJlIHRoZSBjdXJzb3IgaXMgb24gdGhlIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aS1ieXRlIGNoYXIuICovCisgICAgaWYgKGhhc19tYnl0ZSkKKwltYl9hZGp1c3RfY3Vyc29yKCk7CisjIGVuZGlmCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9tZW51LmMgYi9zcmMvbWVudS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MjkxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWVudS5jCkBAIC0wLDAgKzEsMjM4NSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAkJYnkgQnJhbSBNb29sZW5hYXIKKyAqCQkJCUdVSS9Nb3RpZiBzdXBwb3J0IGJ5IFJvYmVydCBXZWJiCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBDb2RlIGZvciBtZW51cy4gIFVzZWQgZm9yIHRoZSBHVUkgYW5kICd3aWxkbWVudScuCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisjaWYgZGVmaW5lZChGRUFUX01FTlUpIHx8IGRlZmluZWQoUFJPVE8pCisKKyNkZWZpbmUgTUVOVURFUFRIICAgMTAJCS8qIG1heGltdW0gZGVwdGggb2YgbWVudXMgKi8KKworI2lmZGVmIEZFQVRfR1VJX1czMgorc3RhdGljIGludCBhZGRfbWVudV9wYXRoIF9fQVJHUygoY2hhcl91ICosIHZpbW1lbnVfVCAqLCBpbnQgKiwgY2hhcl91ICosIGludCkpOworI2Vsc2UKK3N0YXRpYyBpbnQgYWRkX21lbnVfcGF0aCBfX0FSR1MoKGNoYXJfdSAqLCB2aW1tZW51X1QgKiwgaW50ICosIGNoYXJfdSAqKSk7CisjZW5kaWYKK3N0YXRpYyBpbnQgbWVudV9uYWJsZV9yZWN1cnNlIF9fQVJHUygodmltbWVudV9UICptZW51LCBjaGFyX3UgKm5hbWUsIGludCBtb2RlcywgaW50IGVuYWJsZSkpOworc3RhdGljIGludCByZW1vdmVfbWVudSBfX0FSR1MoKHZpbW1lbnVfVCAqKiwgY2hhcl91ICosIGludCwgaW50IHNpbGVudCkpOworc3RhdGljIHZvaWQgZnJlZV9tZW51IF9fQVJHUygodmltbWVudV9UICoqbWVudXApKTsKK3N0YXRpYyB2b2lkIGZyZWVfbWVudV9zdHJpbmcgX19BUkdTKCh2aW1tZW51X1QgKiwgaW50KSk7CitzdGF0aWMgaW50IHNob3dfbWVudXMgX19BUkdTKChjaGFyX3UgKiwgaW50KSk7CitzdGF0aWMgdm9pZCBzaG93X21lbnVzX3JlY3Vyc2l2ZSBfX0FSR1MoKHZpbW1lbnVfVCAqLCBpbnQsIGludCkpOworc3RhdGljIGludCBtZW51X25hbWVfZXF1YWwgX19BUkdTKChjaGFyX3UgKm5hbWUsIHZpbW1lbnVfVCAqbWVudSkpOworc3RhdGljIGludCBtZW51X25hbWVjbXAgX19BUkdTKChjaGFyX3UgKm5hbWUsIGNoYXJfdSAqbW5hbWUpKTsKK3N0YXRpYyBpbnQgZ2V0X21lbnVfY21kX21vZGVzIF9fQVJHUygoY2hhcl91ICosIGludCwgaW50ICosIGludCAqKSk7CitzdGF0aWMgY2hhcl91ICpwb3B1cF9tb2RlX25hbWUgX19BUkdTKChjaGFyX3UgKm5hbWUsIGludCBpZHgpKTsKK3N0YXRpYyBjaGFyX3UgKm1lbnVfdGV4dCBfX0FSR1MoKGNoYXJfdSAqdGV4dCwgaW50ICptbmVtb25pYywgY2hhcl91ICoqYWN0ZXh0KSk7CisjaWZkZWYgRkVBVF9HVUkKK3N0YXRpYyBpbnQgZ2V0X21lbnVfbW9kZSBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGd1aV91cGRhdGVfbWVudXNfcmVjdXJzZSBfX0FSR1MoKHZpbW1lbnVfVCAqLCBpbnQpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpICYmIGRlZmluZWQoRkVBVF9URUFST0ZGKQorc3RhdGljIHZvaWQgZ3VpX2NyZWF0ZV90ZWFyb2Zmc19yZWN1cnNlIF9fQVJHUygodmltbWVudV9UICptZW51LCBjb25zdCBjaGFyX3UgKnBuYW1lLCBpbnQgKnByaV90YWIsIGludCBwcmlfaWR4KSk7CitzdGF0aWMgdm9pZCBndWlfYWRkX3RlYXJvZmYgX19BUkdTKChjaGFyX3UgKnRlYXJwYXRoLCBpbnQgKnByaV90YWIsIGludCBwcmlfaWR4KSk7CitzdGF0aWMgdm9pZCBndWlfZGVzdHJveV90ZWFyb2Zmc19yZWN1cnNlIF9fQVJHUygodmltbWVudV9UICptZW51KSk7CitzdGF0aWMgaW50IHNfdGVhcm9mZnMgPSBGQUxTRTsKKyNlbmRpZgorCitzdGF0aWMgaW50IG1lbnVfaXNfaGlkZGVuIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CisjaWYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpIHx8IChkZWZpbmVkKEZFQVRfR1VJX1czMikgJiYgZGVmaW5lZChGRUFUX1RFQVJPRkYpKQorc3RhdGljIGludCBtZW51X2lzX3RlYXJvZmYgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX01VTFRJX0xBTkcpIHx8IGRlZmluZWQoRkVBVF9UT09MQkFSKQorc3RhdGljIGNoYXJfdSAqbWVudV9za2lwX3BhcnQgX19BUkdTKChjaGFyX3UgKnApKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfTVVMVElfTEFORworc3RhdGljIGNoYXJfdSAqbWVudXRyYW5zX2xvb2t1cCBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGxlbikpOworI2VuZGlmCisKKy8qIFRoZSBjaGFyYWN0ZXIgZm9yIGVhY2ggbWVudSBtb2RlICovCitzdGF0aWMgY2hhcl91CW1lbnVfbW9kZV9jaGFyc1tdID0geyduJywgJ3YnLCAnbycsICdpJywgJ2MnLCAndCd9OworCitzdGF0aWMgY2hhcl91IGVfbm90c3VibWVudVtdID0gTl8oIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51Iik7CitzdGF0aWMgY2hhcl91IGVfb3RoZXJtb2RlW10gPSBOXygiRTMyODogTWVudSBvbmx5IGV4aXN0cyBpbiBhbm90aGVyIG1vZGUiKTsKK3N0YXRpYyBjaGFyX3UgZV9ub21lbnVbXSA9IE5fKCJFMzI5OiBObyBtZW51IG9mIHRoYXQgbmFtZSIpOworCisjaWZkZWYgRkVBVF9UT09MQkFSCitzdGF0aWMgY29uc3QgY2hhciAqdG9vbGJhcl9uYW1lc1tdID0KK3sKKyAgICAvKiAgMCAqLyAiTmV3IiwgIk9wZW4iLCAiU2F2ZSIsICJVbmRvIiwgIlJlZG8iLAorICAgIC8qICA1ICovICJDdXQiLCAiQ29weSIsICJQYXN0ZSIsICJQcmludCIsICJIZWxwIiwKKyAgICAvKiAxMCAqLyAiRmluZCIsICJTYXZlQWxsIiwgIlNhdmVTZXNuIiwgIk5ld1Nlc24iLCAiTG9hZFNlc24iLAorICAgIC8qIDE1ICovICJSdW5TY3JpcHQiLCAiUmVwbGFjZSIsICJXaW5DbG9zZSIsICJXaW5NYXgiLCAiV2luTWluIiwKKyAgICAvKiAyMCAqLyAiV2luU3BsaXQiLCAiU2hlbGwiLCAiRmluZFByZXYiLCAiRmluZE5leHQiLCAiRmluZEhlbHAiLAorICAgIC8qIDI1ICovICJNYWtlIiwgIlRhZ0p1bXAiLCAiUnVuQ3RhZ3MiLCAiV2luVlNwbGl0IiwgIldpbk1heFdpZHRoIiwKKyAgICAvKiAzMCAqLyAiV2luTWluV2lkdGgiLCAiRXhpdCIKK307CisjIGRlZmluZSBUT09MQkFSX05BTUVfQ09VTlQgKHNpemVvZih0b29sYmFyX25hbWVzKSAvIHNpemVvZihjaGFyICopKQorI2VuZGlmCisKKy8qCisgKiBEbyB0aGUgOm1lbnUgY29tbWFuZCBhbmQgcmVsYXRpdmVzLgorICovCisgICAgdm9pZAorZXhfbWVudShlYXApCisgICAgZXhhcmdfVAkqZWFwOwkJICAgIC8qIEV4IGNvbW1hbmQgYXJndW1lbnRzICovCit7CisgICAgY2hhcl91CSptZW51X3BhdGg7CisgICAgaW50CQltb2RlczsKKyAgICBjaGFyX3UJKm1hcF90bzsKKyAgICBpbnQJCW5vcmVtYXA7CisgICAgaW50CQlzaWxlbnQgPSBGQUxTRTsKKyAgICBpbnQJCXVubWVudTsKKyAgICBjaGFyX3UJKm1hcF9idWY7CisgICAgY2hhcl91CSphcmc7CisgICAgY2hhcl91CSpwOworICAgIGludAkJaTsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9HVEspCisgICAgaW50CQlvbGRfbWVudV9oZWlnaHQ7CisjIGlmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpICYmICFkZWZpbmVkKEZFQVRfR1VJX1cxNikKKyAgICBpbnQJCW9sZF90b29sYmFyX2hlaWdodDsKKyMgZW5kaWYKKyNlbmRpZgorICAgIGludAkJcHJpX3RhYltNRU5VREVQVEggKyAxXTsKKyAgICBpbnQJCWVuYWJsZSA9IE1BWUJFOwkgICAgLyogVFJVRSBmb3IgIm1lbnUgZW5hYmxlIiwgRkFMU0UgZm9yICJtZW51CisJCQkJICAgICAqIGRpc2FibGUgKi8KKyNpZmRlZiBGRUFUX01VTFRJX0xBTkcKKyAgICBjaGFyX3UJKnRvZnJlZSA9IE5VTEw7CisgICAgY2hhcl91CSpuZXdfY21kOworI2VuZGlmCisjaWZkZWYgRkVBVF9UT09MQkFSCisgICAgY2hhcl91CSppY29uID0gTlVMTDsKKyNlbmRpZgorICAgIHZpbW1lbnVfVAltZW51YXJnOworCisgICAgbW9kZXMgPSBnZXRfbWVudV9jbWRfbW9kZXMoZWFwLT5jbWQsIGVhcC0+Zm9yY2VpdCwgJm5vcmVtYXAsICZ1bm1lbnUpOworICAgIGFyZyA9IGVhcC0+YXJnOworCisgICAgZm9yICg7OykKKyAgICB7CisJaWYgKFNUUk5DTVAoYXJnLCAiPHNjcmlwdD4iLCA4KSA9PSAwKQorCXsKKwkgICAgbm9yZW1hcCA9IFJFTUFQX1NDUklQVDsKKwkgICAgYXJnID0gc2tpcHdoaXRlKGFyZyArIDgpOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKFNUUk5DTVAoYXJnLCAiPHNpbGVudD4iLCA4KSA9PSAwKQorCXsKKwkgICAgc2lsZW50ID0gVFJVRTsKKwkgICAgYXJnID0gc2tpcHdoaXRlKGFyZyArIDgpOworCSAgICBjb250aW51ZTsKKwl9CisJYnJlYWs7CisgICAgfQorCisKKyAgICAvKiBMb2NhdGUgYW4gb3B0aW9uYWwgImljb249ZmlsZW5hbWUiIGFyZ3VtZW50LiAqLworICAgIGlmIChTVFJOQ01QKGFyZywgImljb249IiwgNSkgPT0gMCkKKyAgICB7CisJYXJnICs9IDU7CisjaWZkZWYgRkVBVF9UT09MQkFSCisJaWNvbiA9IGFyZzsKKyNlbmRpZgorCXdoaWxlICgqYXJnICE9IE5VTCAmJiAqYXJnICE9ICcgJykKKwl7CisJICAgIGlmICgqYXJnID09ICdcXCcpCisJCW1jaF9tZW1tb3ZlKGFyZywgYXJnICsgMSwgU1RSTEVOKGFyZykpOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJYXJnICs9ICgqbWJfcHRyMmxlbl9jaGVjaykoYXJnKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCSsrYXJnOworCX0KKwlpZiAoKmFyZyAhPSBOVUwpCisJeworCSAgICAqYXJnKysgPSBOVUw7CisJICAgIGFyZyA9IHNraXB3aGl0ZShhcmcpOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbGwgaW4gdGhlIHByaW9yaXR5IHRhYmxlLgorICAgICAqLworICAgIGZvciAocCA9IGFyZzsgKnA7ICsrcCkKKwlpZiAoIVZJTV9JU0RJR0lUKCpwKSAmJiAqcCAhPSAnLicpCisJICAgIGJyZWFrOworICAgIGlmICh2aW1faXN3aGl0ZSgqcCkpCisgICAgeworCWZvciAoaSA9IDA7IGkgPCBNRU5VREVQVEggJiYgIXZpbV9pc3doaXRlKCphcmcpOyArK2kpCisJeworCSAgICBwcmlfdGFiW2ldID0gZ2V0ZGlnaXRzKCZhcmcpOworCSAgICBpZiAocHJpX3RhYltpXSA9PSAwKQorCQlwcmlfdGFiW2ldID0gNTAwOworCSAgICBpZiAoKmFyZyA9PSAnLicpCisJCSsrYXJnOworCX0KKwlhcmcgPSBza2lwd2hpdGUoYXJnKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZWFwLT5hZGRyX2NvdW50ICYmIGVhcC0+bGluZTIgIT0gMCkKKyAgICB7CisJcHJpX3RhYlswXSA9IGVhcC0+bGluZTI7CisJaSA9IDE7CisgICAgfQorICAgIGVsc2UKKwlpID0gMDsKKyAgICB3aGlsZSAoaSA8IE1FTlVERVBUSCkKKwlwcmlfdGFiW2krK10gPSA1MDA7CisgICAgcHJpX3RhYltNRU5VREVQVEhdID0gLTE7CQkvKiBtYXJrIGVuZCBvZiB0aGUgdGFibGUgKi8KKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yICJkaXNhYmxlIiBvciAiZW5hYmxlIiBhcmd1bWVudC4KKyAgICAgKi8KKyAgICBpZiAoU1RSTkNNUChhcmcsICJlbmFibGUiLCA2KSA9PSAwICYmIHZpbV9pc3doaXRlKGFyZ1s2XSkpCisgICAgeworCWVuYWJsZSA9IFRSVUU7CisJYXJnID0gc2tpcHdoaXRlKGFyZyArIDYpOworICAgIH0KKyAgICBlbHNlIGlmIChTVFJOQ01QKGFyZywgImRpc2FibGUiLCA3KSA9PSAwICYmIHZpbV9pc3doaXRlKGFyZ1s3XSkpCisgICAgeworCWVuYWJsZSA9IEZBTFNFOworCWFyZyA9IHNraXB3aGl0ZShhcmcgKyA3KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGlzIG5vIGFyZ3VtZW50LCBkaXNwbGF5IGFsbCBtZW51cy4KKyAgICAgKi8KKyAgICBpZiAoKmFyZyA9PSBOVUwpCisgICAgeworCXNob3dfbWVudXMoYXJnLCBtb2Rlcyk7CisJcmV0dXJuOworICAgIH0KKworI2lmZGVmIEZFQVRfVE9PTEJBUgorICAgIC8qCisgICAgICogTmVlZCB0byBnZXQgdGhlIHRvb2xiYXIgaWNvbiBpbmRleCBiZWZvcmUgZG9pbmcgdGhlIHRyYW5zbGF0aW9uLgorICAgICAqLworICAgIG1lbnVhcmcuaWNvbmlkeCA9IC0xOworICAgIG1lbnVhcmcuaWNvbl9idWlsdGluID0gRkFMU0U7CisgICAgaWYgKG1lbnVfaXNfdG9vbGJhcihhcmcpKQorICAgIHsKKwltZW51X3BhdGggPSBtZW51X3NraXBfcGFydChhcmcpOworCWlmICgqbWVudV9wYXRoID09ICcuJykKKwl7CisJICAgIHAgPSBtZW51X3NraXBfcGFydCgrK21lbnVfcGF0aCk7CisJICAgIGlmIChTVFJOQ01QKG1lbnVfcGF0aCwgIkJ1aWx0SW4iLCA3KSA9PSAwKQorCSAgICB7CisJCWlmIChza2lwZGlnaXRzKG1lbnVfcGF0aCArIDcpID09IHApCisJCXsKKwkJICAgIG1lbnVhcmcuaWNvbmlkeCA9IGF0b2koKGNoYXIgKiltZW51X3BhdGggKyA3KTsKKwkJICAgIGlmIChtZW51YXJnLmljb25pZHggPj0gVE9PTEJBUl9OQU1FX0NPVU5UKQorCQkJbWVudWFyZy5pY29uaWR4ID0gLTE7CisJCSAgICBlbHNlCisJCQltZW51YXJnLmljb25fYnVpbHRpbiA9IFRSVUU7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJZm9yIChpID0gMDsgaSA8IFRPT0xCQVJfTkFNRV9DT1VOVDsgKytpKQorCQkgICAgaWYgKFNUUk5DTVAodG9vbGJhcl9uYW1lc1tpXSwgbWVudV9wYXRoLCBwIC0gbWVudV9wYXRoKQorCQkJCQkJCQkJID09IDApCisJCSAgICB7CisJCQltZW51YXJnLmljb25pZHggPSBpOworCQkJYnJlYWs7CisJCSAgICB9CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX01VTFRJX0xBTkcKKyAgICAvKgorICAgICAqIFRyYW5zbGF0ZSBtZW51IG5hbWVzIGFzIHNwZWNpZmllZCB3aXRoICI6bWVudXRyYW5zIiBjb21tYW5kcy4KKyAgICAgKi8KKyAgICBtZW51X3BhdGggPSBhcmc7CisgICAgd2hpbGUgKCptZW51X3BhdGgpCisgICAgeworCS8qIGZpbmQgdGhlIGVuZCBvZiBvbmUgcGFydCBhbmQgY2hlY2sgaWYgaXQgc2hvdWxkIGJlIHRyYW5zbGF0ZWQgKi8KKwlwID0gbWVudV9za2lwX3BhcnQobWVudV9wYXRoKTsKKwltYXBfdG8gPSBtZW51dHJhbnNfbG9va3VwKG1lbnVfcGF0aCwgKGludCkocCAtIG1lbnVfcGF0aCkpOworCWlmIChtYXBfdG8gIT0gTlVMTCkKKwl7CisJICAgIC8qIGZvdW5kIGEgbWF0Y2g6IHJlcGxhY2Ugd2l0aCB0aGUgdHJhbnNsYXRlZCBwYXJ0ICovCisJICAgIGkgPSAoaW50KVNUUkxFTihtYXBfdG8pOworCSAgICBuZXdfY21kID0gYWxsb2MoKHVuc2lnbmVkKVNUUkxFTihhcmcpICsgaSArIDEpOworCSAgICBpZiAobmV3X2NtZCA9PSBOVUxMKQorCQlicmVhazsKKwkgICAgbWNoX21lbW1vdmUobmV3X2NtZCwgYXJnLCBtZW51X3BhdGggLSBhcmcpOworCSAgICBtY2hfbWVtbW92ZShuZXdfY21kICsgKG1lbnVfcGF0aCAtIGFyZyksIG1hcF90bywgKHNpemVfdClpKTsKKwkgICAgU1RSQ1BZKG5ld19jbWQgKyAobWVudV9wYXRoIC0gYXJnKSArIGksIHApOworCSAgICBwID0gbmV3X2NtZCArIChtZW51X3BhdGggLSBhcmcpICsgaTsKKwkgICAgdmltX2ZyZWUodG9mcmVlKTsKKwkgICAgdG9mcmVlID0gbmV3X2NtZDsKKwkgICAgYXJnID0gbmV3X2NtZDsKKwl9CisJaWYgKCpwICE9ICcuJykKKwkgICAgYnJlYWs7CisJbWVudV9wYXRoID0gcCArIDE7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIElzb2xhdGUgdGhlIG1lbnUgbmFtZS4KKyAgICAgKiBTa2lwIHRoZSBtZW51IG5hbWUsIGFuZCB0cmFuc2xhdGUgPFRhYj4gaW50byBhIHJlYWwgVEFCLgorICAgICAqLworICAgIG1lbnVfcGF0aCA9IGFyZzsKKyAgICBpZiAoKm1lbnVfcGF0aCA9PSAnLicpCisgICAgeworCUVNU0cyKF8oZV9pbnZhcmcyKSwgbWVudV9wYXRoKTsKKwlnb3RvIHRoZWVuZDsKKyAgICB9CisKKyAgICB3aGlsZSAoKmFyZyAmJiAhdmltX2lzd2hpdGUoKmFyZykpCisgICAgeworCWlmICgoKmFyZyA9PSAnXFwnIHx8ICphcmcgPT0gQ3RybF9WKSAmJiBhcmdbMV0gIT0gTlVMKQorCSAgICBhcmcrKzsKKwllbHNlIGlmIChTVFJOSUNNUChhcmcsICI8VEFCPiIsIDUpID09IDApCisJeworCSAgICAqYXJnID0gVEFCOworCSAgICBtY2hfbWVtbW92ZShhcmcgKyAxLCBhcmcgKyA1LCBTVFJMRU4oYXJnICsgNCkpOworCX0KKwlhcmcrKzsKKyAgICB9CisgICAgaWYgKCphcmcgIT0gTlVMKQorCSphcmcrKyA9IE5VTDsKKyAgICBhcmcgPSBza2lwd2hpdGUoYXJnKTsKKyAgICBtYXBfdG8gPSBhcmc7CisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGlzIG9ubHkgYSBtZW51IG5hbWUsIGRpc3BsYXkgbWVudXMgd2l0aCB0aGF0IG5hbWUuCisgICAgICovCisgICAgaWYgKCptYXBfdG8gPT0gTlVMICYmICF1bm1lbnUgJiYgZW5hYmxlID09IE1BWUJFKQorICAgIHsKKwlzaG93X21lbnVzKG1lbnVfcGF0aCwgbW9kZXMpOworCWdvdG8gdGhlZW5kOworICAgIH0KKyAgICBlbHNlIGlmICgqbWFwX3RvICE9IE5VTCAmJiAodW5tZW51IHx8IGVuYWJsZSAhPSBNQVlCRSkpCisgICAgeworCUVNU0coXyhlX3RyYWlsaW5nKSk7CisJZ290byB0aGVlbmQ7CisgICAgfQorI2lmIGRlZmluZWQoRkVBVF9HVUkpICYmICEoZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKSkKKyAgICBvbGRfbWVudV9oZWlnaHQgPSBndWkubWVudV9oZWlnaHQ7CisjIGlmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpICYmICFkZWZpbmVkKEZFQVRfR1VJX1cxNikKKyAgICBvbGRfdG9vbGJhcl9oZWlnaHQgPSBndWkudG9vbGJhcl9oZWlnaHQ7CisjIGVuZGlmCisjZW5kaWYKKworICAgIGlmIChlbmFibGUgIT0gTUFZQkUpCisgICAgeworCS8qCisJICogQ2hhbmdlIHNlbnNpdGl2aXR5IG9mIHRoZSBtZW51LgorCSAqIEZvciB0aGUgUG9wVXAgbWVudSwgcmVtb3ZlIGEgbWVudSBmb3IgZWFjaCBtb2RlIHNlcGFyYXRlbHkuCisJICogQ2FyZWZ1bDogbWVudV9uYWJsZV9yZWN1cnNlKCkgY2hhbmdlcyBtZW51X3BhdGguCisJICovCisJaWYgKFNUUkNNUChtZW51X3BhdGgsICIqIikgPT0gMCkJLyogbWVhbmluZzogZG8gYWxsIG1lbnVzICovCisJICAgIG1lbnVfcGF0aCA9IChjaGFyX3UgKikiIjsKKworCWlmIChtZW51X2lzX3BvcHVwKG1lbnVfcGF0aCkpCisJeworCSAgICBmb3IgKGkgPSAwOyBpIDwgTUVOVV9JTkRFWF9USVA7ICsraSkKKwkJaWYgKG1vZGVzICYgKDEgPDwgaSkpCisJCXsKKwkJICAgIHAgPSBwb3B1cF9tb2RlX25hbWUobWVudV9wYXRoLCBpKTsKKwkJICAgIGlmIChwICE9IE5VTEwpCisJCSAgICB7CisJCQltZW51X25hYmxlX3JlY3Vyc2Uocm9vdF9tZW51LCBwLCBNRU5VX0FMTF9NT0RFUywKKwkJCQkJCQkJICAgICAgZW5hYmxlKTsKKwkJCXZpbV9mcmVlKHApOworCQkgICAgfQorCQl9CisJfQorCW1lbnVfbmFibGVfcmVjdXJzZShyb290X21lbnUsIG1lbnVfcGF0aCwgbW9kZXMsIGVuYWJsZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHVubWVudSkKKyAgICB7CisJLyoKKwkgKiBEZWxldGUgbWVudShzKS4KKwkgKi8KKwlpZiAoU1RSQ01QKG1lbnVfcGF0aCwgIioiKSA9PSAwKQkvKiBtZWFuaW5nOiByZW1vdmUgYWxsIG1lbnVzICovCisJICAgIG1lbnVfcGF0aCA9IChjaGFyX3UgKikiIjsKKworCS8qCisJICogRm9yIHRoZSBQb3BVcCBtZW51LCByZW1vdmUgYSBtZW51IGZvciBlYWNoIG1vZGUgc2VwYXJhdGVseS4KKwkgKi8KKwlpZiAobWVudV9pc19wb3B1cChtZW51X3BhdGgpKQorCXsKKwkgICAgZm9yIChpID0gMDsgaSA8IE1FTlVfSU5ERVhfVElQOyArK2kpCisJCWlmIChtb2RlcyAmICgxIDw8IGkpKQorCQl7CisJCSAgICBwID0gcG9wdXBfbW9kZV9uYW1lKG1lbnVfcGF0aCwgaSk7CisJCSAgICBpZiAocCAhPSBOVUxMKQorCQkgICAgeworCQkJcmVtb3ZlX21lbnUoJnJvb3RfbWVudSwgcCwgTUVOVV9BTExfTU9ERVMsIFRSVUUpOworCQkJdmltX2ZyZWUocCk7CisJCSAgICB9CisJCX0KKwl9CisKKwkvKiBDYXJlZnVsOiByZW1vdmVfbWVudSgpIGNoYW5nZXMgbWVudV9wYXRoICovCisJcmVtb3ZlX21lbnUoJnJvb3RfbWVudSwgbWVudV9wYXRoLCBtb2RlcywgRkFMU0UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qCisJICogQWRkIG1lbnUocykuCisJICogUmVwbGFjZSBzcGVjaWFsIGtleSBjb2Rlcy4KKwkgKi8KKwlpZiAoU1RSSUNNUChtYXBfdG8sICI8bm9wPiIpID09IDApCS8qICI8Tm9wPiIgbWVhbnMgbm90aGluZyAqLworCXsKKwkgICAgbWFwX3RvID0gKGNoYXJfdSAqKSIiOworCSAgICBtYXBfYnVmID0gTlVMTDsKKwl9CisJZWxzZQorCSAgICBtYXBfdG8gPSByZXBsYWNlX3Rlcm1jb2RlcyhtYXBfdG8sICZtYXBfYnVmLCBGQUxTRSwgVFJVRSk7CisJbWVudWFyZy5tb2RlcyA9IG1vZGVzOworI2lmZGVmIEZFQVRfVE9PTEJBUgorCW1lbnVhcmcuaWNvbmZpbGUgPSBpY29uOworI2VuZGlmCisJbWVudWFyZy5ub3JlbWFwWzBdID0gbm9yZW1hcDsKKwltZW51YXJnLnNpbGVudFswXSA9IHNpbGVudDsKKwlhZGRfbWVudV9wYXRoKG1lbnVfcGF0aCwgJm1lbnVhcmcsIHByaV90YWIsIG1hcF90bworI2lmZGVmIEZFQVRfR1VJX1czMgorCQksIFRSVUUKKyNlbmRpZgorCQkpOworCisJLyoKKwkgKiBGb3IgdGhlIFBvcFVwIG1lbnUsIGFkZCBhIG1lbnUgZm9yIGVhY2ggbW9kZSBzZXBhcmF0ZWx5LgorCSAqLworCWlmIChtZW51X2lzX3BvcHVwKG1lbnVfcGF0aCkpCisJeworCSAgICBmb3IgKGkgPSAwOyBpIDwgTUVOVV9JTkRFWF9USVA7ICsraSkKKwkJaWYgKG1vZGVzICYgKDEgPDwgaSkpCisJCXsKKwkJICAgIHAgPSBwb3B1cF9tb2RlX25hbWUobWVudV9wYXRoLCBpKTsKKwkJICAgIGlmIChwICE9IE5VTEwpCisJCSAgICB7CisJCQkvKiBJbmNsdWRlIGFsbCBtb2RlcywgdG8gbWFrZSAiOmFtZW51IiB3b3JrICovCisJCQltZW51YXJnLm1vZGVzID0gbW9kZXM7CisjaWZkZWYgRkVBVF9UT09MQkFSCisJCQltZW51YXJnLmljb25maWxlID0gTlVMTDsKKwkJCW1lbnVhcmcuaWNvbmlkeCA9IC0xOworCQkJbWVudWFyZy5pY29uX2J1aWx0aW4gPSBGQUxTRTsKKyNlbmRpZgorCQkJYWRkX21lbnVfcGF0aChwLCAmbWVudWFyZywgcHJpX3RhYiwgbWFwX3RvCisjaWZkZWYgRkVBVF9HVUlfVzMyCisJCQkJLCBUUlVFCisjZW5kaWYKKwkJCQkJICk7CisJCQl2aW1fZnJlZShwKTsKKwkJICAgIH0KKwkJfQorCX0KKworCXZpbV9mcmVlKG1hcF9idWYpOworICAgIH0KKworI2lmIGRlZmluZWQoRkVBVF9HVUkpICYmICFkZWZpbmVkKEZFQVRfR1VJX0dUSykKKyAgICAvKiBJZiB0aGUgbWVudWJhciBoZWlnaHQgY2hhbmdlZCwgcmVzaXplIHRoZSB3aW5kb3cgKi8KKyAgICBpZiAoZ3VpLmluX3VzZQorCSAgICAmJiAoZ3VpLm1lbnVfaGVpZ2h0ICE9IG9sZF9tZW51X2hlaWdodAorIyBpZiBkZWZpbmVkKEZFQVRfVE9PTEJBUikgJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9XMTYpCisJCXx8IGd1aS50b29sYmFyX2hlaWdodCAhPSBvbGRfdG9vbGJhcl9oZWlnaHQKKyMgZW5kaWYKKwkgICAgKSkKKwlndWlfc2V0X3NoZWxsc2l6ZShGQUxTRSwgRkFMU0UpOworI2VuZGlmCisKK3RoZWVuZDoKKyNpZmRlZiBGRUFUX01VTFRJX0xBTkcKKyAgICB2aW1fZnJlZSh0b2ZyZWUpOworI2Vsc2UKKyAgICA7CisjZW5kaWYKK30KKworLyoKKyAqIEFkZCB0aGUgbWVudSB3aXRoIHRoZSBnaXZlbiBuYW1lIHRvIHRoZSBtZW51IGhpZXJhcmNoeQorICovCisgICAgc3RhdGljIGludAorYWRkX21lbnVfcGF0aChtZW51X3BhdGgsIG1lbnVhcmcsIHByaV90YWIsIGNhbGxfZGF0YQorI2lmZGVmIEZFQVRfR1VJX1czMgorCSwgYWRkdGVhcm9mZgorI2VuZGlmCisJKQorICAgIGNoYXJfdQkqbWVudV9wYXRoOworICAgIHZpbW1lbnVfVAkqbWVudWFyZzsJLyogcGFzc2VzIG1vZGVzLCBpY29uZmlsZSwgaWNvbmlkeCwKKwkJCQkgICBpY29uX2J1aWx0aW4sIHNpbGVudFswXSwgbm9yZW1hcFswXSAqLworICAgIGludAkJKnByaV90YWI7CisgICAgY2hhcl91CSpjYWxsX2RhdGE7CisjaWZkZWYgRkVBVF9HVUlfVzMyCisgICAgaW50CQlhZGR0ZWFyb2ZmOwkvKiBtYXkgYWRkIHRlYXJvZmYgaXRlbSAqLworI2VuZGlmCit7CisgICAgY2hhcl91CSpwYXRoX25hbWU7CisgICAgaW50CQltb2RlcyA9IG1lbnVhcmctPm1vZGVzOworICAgIHZpbW1lbnVfVAkqKm1lbnVwOworICAgIHZpbW1lbnVfVAkqbWVudSA9IE5VTEw7CisgICAgdmltbWVudV9UCSpwYXJlbnQ7CisgICAgdmltbWVudV9UCSoqbG93ZXJfcHJpOworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgY2hhcl91CSpkbmFtZTsKKyAgICBjaGFyX3UJKm5leHRfbmFtZTsKKyAgICBpbnQJCWk7CisgICAgaW50CQljOworI2lmZGVmIEZFQVRfR1VJCisgICAgaW50CQlpZHg7CisgICAgaW50CQluZXdfaWR4OworI2VuZGlmCisgICAgaW50CQlwcmlfaWR4ID0gMDsKKyAgICBpbnQJCW9sZF9tb2RlcyA9IDA7CisgICAgaW50CQlhbWVudTsKKworICAgIC8qIE1ha2UgYSBjb3B5IHNvIHdlIGNhbiBzdHVmZiBhcm91bmQgd2l0aCBpdCwgc2luY2UgaXQgY291bGQgYmUgY29uc3QgKi8KKyAgICBwYXRoX25hbWUgPSB2aW1fc3Ryc2F2ZShtZW51X3BhdGgpOworICAgIGlmIChwYXRoX25hbWUgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKyAgICBtZW51cCA9ICZyb290X21lbnU7CisgICAgcGFyZW50ID0gTlVMTDsKKyAgICBuYW1lID0gcGF0aF9uYW1lOworICAgIHdoaWxlICgqbmFtZSkKKyAgICB7CisJLyogR2V0IG5hbWUgb2YgdGhpcyBlbGVtZW50IGluIHRoZSBtZW51IGhpZXJhcmNoeSwgYW5kIHRoZSBzaW1wbGlmaWVkCisJICogbmFtZSAod2l0aG91dCBtbmVtb25pYyBhbmQgYWNjZWxlcmF0b3IgdGV4dCkuICovCisJbmV4dF9uYW1lID0gbWVudV9uYW1lX3NraXAobmFtZSk7CisJZG5hbWUgPSBtZW51X3RleHQobmFtZSwgTlVMTCwgTlVMTCk7CisKKwkvKiBTZWUgaWYgaXQncyBhbHJlYWR5IHRoZXJlICovCisJbG93ZXJfcHJpID0gbWVudXA7CisjaWZkZWYgRkVBVF9HVUkKKwlpZHggPSAwOworCW5ld19pZHggPSAwOworI2VuZGlmCisJbWVudSA9ICptZW51cDsKKwl3aGlsZSAobWVudSAhPSBOVUxMKQorCXsKKwkgICAgaWYgKG1lbnVfbmFtZV9lcXVhbChuYW1lLCBtZW51KSB8fCBtZW51X25hbWVfZXF1YWwoZG5hbWUsIG1lbnUpKQorCSAgICB7CisJCWlmICgqbmV4dF9uYW1lID09IE5VTCAmJiBtZW51LT5jaGlsZHJlbiAhPSBOVUxMKQorCQl7CisJCSAgICBpZiAoIXN5c19tZW51KQorCQkJRU1TRyhfKCJFMzMwOiBNZW51IHBhdGggbXVzdCBub3QgbGVhZCB0byBhIHN1Yi1tZW51IikpOworCQkgICAgZ290byBlcnJldDsKKwkJfQorCQlpZiAoKm5leHRfbmFtZSAhPSBOVUwgJiYgbWVudS0+Y2hpbGRyZW4gPT0gTlVMTAorI2lmZGVmIEZFQVRfR1VJX1czMgorCQkJJiYgYWRkdGVhcm9mZgorI2VuZGlmCisJCQkpCisJCXsKKwkJICAgIGlmICghc3lzX21lbnUpCisJCQlFTVNHKF8oZV9ub3RzdWJtZW51KSk7CisJCSAgICBnb3RvIGVycmV0OworCQl9CisJCWJyZWFrOworCSAgICB9CisJICAgIG1lbnVwID0gJm1lbnUtPm5leHQ7CisKKwkgICAgLyogQ291bnQgbWVudXMsIHRvIGZpbmQgd2hlcmUgdGhpcyBvbmUgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQuCisJICAgICAqIElnbm9yZSBtZW51cyB0aGF0IGFyZSBub3QgaW4gdGhlIG1lbnViYXIgKFBvcFVwIGFuZCBUb29sYmFyKSAqLworCSAgICBpZiAocGFyZW50ICE9IE5VTEwgfHwgbWVudV9pc19tZW51YmFyKG1lbnUtPm5hbWUpKQorCSAgICB7CisjaWZkZWYgRkVBVF9HVUkKKwkJKytpZHg7CisjZW5kaWYKKwkJaWYgKG1lbnUtPnByaW9yaXR5IDw9IHByaV90YWJbcHJpX2lkeF0pCisJCXsKKwkJICAgIGxvd2VyX3ByaSA9IG1lbnVwOworI2lmZGVmIEZFQVRfR1VJCisJCSAgICBuZXdfaWR4ID0gaWR4OworI2VuZGlmCisJCX0KKwkgICAgfQorCSAgICBtZW51ID0gbWVudS0+bmV4dDsKKwl9CisKKwlpZiAobWVudSA9PSBOVUxMKQorCXsKKwkgICAgaWYgKCpuZXh0X25hbWUgPT0gTlVMICYmIHBhcmVudCA9PSBOVUxMKQorCSAgICB7CisJCUVNU0coXygiRTMzMTogTXVzdCBub3QgYWRkIG1lbnUgaXRlbXMgZGlyZWN0bHkgdG8gbWVudSBiYXIiKSk7CisJCWdvdG8gZXJyZXQ7CisJICAgIH0KKworCSAgICBpZiAobWVudV9pc19zZXBhcmF0b3IoZG5hbWUpICYmICpuZXh0X25hbWUgIT0gTlVMKQorCSAgICB7CisJCUVNU0coXygiRTMzMjogU2VwYXJhdG9yIGNhbm5vdCBiZSBwYXJ0IG9mIGEgbWVudSBwYXRoIikpOworCQlnb3RvIGVycmV0OworCSAgICB9CisKKwkgICAgLyogTm90IGFscmVhZHkgdGhlcmUsIHNvIGxldHMgYWRkIGl0ICovCisJICAgIG1lbnUgPSAodmltbWVudV9UICopYWxsb2NfY2xlYXIoKHVuc2lnbmVkKXNpemVvZih2aW1tZW51X1QpKTsKKwkgICAgaWYgKG1lbnUgPT0gTlVMTCkKKwkJZ290byBlcnJldDsKKworCSAgICBtZW51LT5tb2RlcyA9IG1vZGVzOworCSAgICBtZW51LT5lbmFibGVkID0gTUVOVV9BTExfTU9ERVM7CisJICAgIG1lbnUtPm5hbWUgPSB2aW1fc3Ryc2F2ZShuYW1lKTsKKwkgICAgLyogc2VwYXJhdGUgbW5lbW9uaWMgYW5kIGFjY2VsZXJhdG9yIHRleHQgZnJvbSBhY3R1YWwgbWVudSBuYW1lICovCisJICAgIG1lbnUtPmRuYW1lID0gbWVudV90ZXh0KG5hbWUsICZtZW51LT5tbmVtb25pYywgJm1lbnUtPmFjdGV4dCk7CisJICAgIG1lbnUtPnByaW9yaXR5ID0gcHJpX3RhYltwcmlfaWR4XTsKKwkgICAgbWVudS0+cGFyZW50ID0gcGFyZW50OworI2lmZGVmIEZFQVRfR1VJX01PVElGCisJICAgIG1lbnUtPnNlbnNpdGl2ZSA9IFRSVUU7CSAgICAvKiB0aGUgZGVmYXVsdCAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9CRVZBTF9USVAKKwkgICAgbWVudS0+dGlwID0gTlVMTDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJX0FUSEVOQQorCSAgICBtZW51LT5pbWFnZSA9IE5vbmU7CQkgICAgLyogWC1XaW5kb3dzIGRlZmluaXRpb24gZm9yIE5VTEwqLworI2VuZGlmCisKKwkgICAgLyoKKwkgICAgICogQWRkIGFmdGVyIG1lbnUgdGhhdCBoYXMgbG93ZXIgcHJpb3JpdHkuCisJICAgICAqLworCSAgICBtZW51LT5uZXh0ID0gKmxvd2VyX3ByaTsKKwkgICAgKmxvd2VyX3ByaSA9IG1lbnU7CisKKwkgICAgb2xkX21vZGVzID0gMDsKKworI2lmZGVmIEZFQVRfVE9PTEJBUgorCSAgICBtZW51LT5pY29uaWR4ID0gbWVudWFyZy0+aWNvbmlkeDsKKwkgICAgbWVudS0+aWNvbl9idWlsdGluID0gbWVudWFyZy0+aWNvbl9idWlsdGluOworCSAgICBpZiAoKm5leHRfbmFtZSA9PSBOVUwgJiYgbWVudWFyZy0+aWNvbmZpbGUgIT0gTlVMTCkKKwkJbWVudS0+aWNvbmZpbGUgPSB2aW1fc3Ryc2F2ZShtZW51YXJnLT5pY29uZmlsZSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX1czMikgJiYgZGVmaW5lZChGRUFUX1RFQVJPRkYpCisJICAgIC8qIHRoZSB0ZWFyb2ZmIGl0ZW0gbXVzdCBiZSBwcmVzZW50IGluIHRoZSBtb2RlcyBvZiBlYWNoIGl0ZW0uICovCisJICAgIGlmIChwYXJlbnQgIT0gTlVMTCAmJiBtZW51X2lzX3RlYXJvZmYocGFyZW50LT5jaGlsZHJlbi0+ZG5hbWUpKQorCQlwYXJlbnQtPmNoaWxkcmVuLT5tb2RlcyB8PSBtb2RlczsKKyNlbmRpZgorCX0KKwllbHNlCisJeworCSAgICBvbGRfbW9kZXMgPSBtZW51LT5tb2RlczsKKworCSAgICAvKgorCSAgICAgKiBJZiB0aGlzIG1lbnUgb3B0aW9uIHdhcyBwcmV2aW91c2x5IG9ubHkgYXZhaWxhYmxlIGluIG90aGVyCisJICAgICAqIG1vZGVzLCB0aGVuIG1ha2Ugc3VyZSBpdCdzIGF2YWlsYWJsZSBmb3IgdGhpcyBvbmUgbm93CisJICAgICAqIEFsc28gZW5hYmxlIGEgbWVudSB3aGVuIGl0J3MgY3JlYXRlZCBvciBjaGFuZ2VkLgorCSAgICAgKi8KKyNpZmRlZiBGRUFUX0dVSV9XMzIKKwkgICAgLyogSWYgYWRkaW5nIGEgdGVhcmJhciAoYWRkdGVhcm9mZiA9PSBGQUxTRSkgZG9uJ3QgdXBkYXRlIG1vZGVzICovCisJICAgIGlmIChhZGR0ZWFyb2ZmKQorI2VuZGlmCisJICAgIHsKKwkJbWVudS0+bW9kZXMgfD0gbW9kZXM7CisJCW1lbnUtPmVuYWJsZWQgfD0gbW9kZXM7CisJICAgIH0KKwl9CisKKyNpZmRlZiBGRUFUX0dVSQorCS8qCisJICogQWRkIHRoZSBtZW51IGl0ZW0gd2hlbiBpdCdzIHVzZWQgaW4gb25lIG9mIHRoZSBtb2RlcywgYnV0IG5vdCB3aGVuCisJICogb25seSBhIHRvb2x0aXAgaXMgZGVmaW5lZC4KKwkgKi8KKwlpZiAoKG9sZF9tb2RlcyAmIE1FTlVfQUxMX01PREVTKSA9PSAwCisJCSYmIChtZW51LT5tb2RlcyAmIE1FTlVfQUxMX01PREVTKSAhPSAwKQorCXsKKwkgICAgaWYgKGd1aS5pbl91c2UpICAvKiBPdGhlcndpc2UgaXQgd2lsbCBiZSBhZGRlZCB3aGVuIEdVSSBzdGFydHMgKi8KKwkgICAgeworCQlpZiAoKm5leHRfbmFtZSA9PSBOVUwpCisJCXsKKwkJICAgIC8qIFJlYWwgbWVudSBpdGVtLCBub3Qgc3ViLW1lbnUgKi8KKwkJICAgIGd1aV9tY2hfYWRkX21lbnVfaXRlbShtZW51LCBuZXdfaWR4KTsKKworCQkgICAgLyogV2FudCB0byB1cGRhdGUgbWVudXMgbm93IGV2ZW4gaWYgbW9kZSBub3QgY2hhbmdlZCAqLworCQkgICAgZm9yY2VfbWVudV91cGRhdGUgPSBUUlVFOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgLyogU3ViLW1lbnUgKG5vdCBhdCBlbmQgb2YgcGF0aCB5ZXQpICovCisJCSAgICBndWlfbWNoX2FkZF9tZW51KG1lbnUsIG5ld19pZHgpOworCQl9CisJICAgIH0KKworIyBpZiBkZWZpbmVkKEZFQVRfR1VJX1czMikgJiBkZWZpbmVkKEZFQVRfVEVBUk9GRikKKwkgICAgLyogV2hlbiBhZGRpbmcgYSBuZXcgc3VibWVudSwgbWF5IGFkZCBhIHRlYXJvZmYgaXRlbSAqLworCSAgICBpZiAoCWFkZHRlYXJvZmYKKwkJICAgICYmICpuZXh0X25hbWUKKwkJICAgICYmIHZpbV9zdHJjaHIocF9nbywgR09fVEVBUk9GRikgIT0gTlVMTAorCQkgICAgJiYgbWVudV9pc19tZW51YmFyKG5hbWUpKQorCSAgICB7CisJCWNoYXJfdQkJKnRlYXJwYXRoOworCisJCS8qCisJCSAqIFRoZSBwb2ludGVycyBuZXh0X25hbWUgJiBwYXRoX25hbWUgcmVmZXIgdG8gYSBzdHJpbmcgd2l0aAorCQkgKiBcJ3MgYW5kIF5WJ3Mgc3RyaXBwZWQgb3V0LiBCdXQgbWVudV9wYXRoIGlzIGEgInJhdyIKKwkJICogc3RyaW5nLCBzbyB3ZSBtdXN0IGNvcnJlY3QgZm9yIHNwZWNpYWwgY2hhcmFjdGVycy4KKwkJICovCisJCXRlYXJwYXRoID0gYWxsb2MoKHVuc2lnbmVkIGludClTVFJMRU4obWVudV9wYXRoKSArIFRFQVJfTEVOICsgMik7CisJCWlmICh0ZWFycGF0aCAhPSBOVUxMKQorCQl7CisJCSAgICBjaGFyX3UgICpzOworCQkgICAgaW50CSAgICBpZHg7CisKKwkJICAgIFNUUkNQWSh0ZWFycGF0aCwgbWVudV9wYXRoKTsKKwkJICAgIGlkeCA9IChpbnQpKG5leHRfbmFtZSAtIHBhdGhfbmFtZSAtIDEpOworCQkgICAgZm9yIChzID0gdGVhcnBhdGg7ICpzICYmIHMgPCB0ZWFycGF0aCArIGlkeDsgKytzKQorCQkgICAgeworCQkJaWYgKCgqcyA9PSAnXFwnIHx8ICpzID09IEN0cmxfVikgJiYgc1sxXSkKKwkJCXsKKwkJCSAgICArK2lkeDsKKwkJCSAgICArK3M7CisJCQl9CisjICBpZmRlZiBGRUFUX01CWVRFCisJCQlpZiAoaGFzX21ieXRlKQorCQkJICAgIHMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKSAtIDE7CisjICBlbmRpZgorCQkgICAgfQorCQkgICAgdGVhcnBhdGhbaWR4XSA9IE5VTDsKKwkJICAgIGd1aV9hZGRfdGVhcm9mZih0ZWFycGF0aCwgcHJpX3RhYiwgcHJpX2lkeCk7CisJCSAgICB2aW1fZnJlZSh0ZWFycGF0aCk7CisJCX0KKwkgICAgfQorIyBlbmRpZgorCX0KKyNlbmRpZiAvKiBGRUFUX0dVSSAqLworCisJbWVudXAgPSAmbWVudS0+Y2hpbGRyZW47CisJcGFyZW50ID0gbWVudTsKKwluYW1lID0gbmV4dF9uYW1lOworCXZpbV9mcmVlKGRuYW1lKTsKKwlpZiAocHJpX3RhYltwcmlfaWR4ICsgMV0gIT0gLTEpCisJICAgICsrcHJpX2lkeDsKKyAgICB9CisgICAgdmltX2ZyZWUocGF0aF9uYW1lKTsKKworICAgIC8qCisgICAgICogT25seSBhZGQgc3lzdGVtIG1lbnUgaXRlbXMgd2hpY2ggaGF2ZSBub3QgYmVlbiBkZWZpbmVkIHlldC4KKyAgICAgKiBGaXJzdCBjaGVjayBpZiB0aGlzIHdhcyBhbiAiOmFtZW51Ii4KKyAgICAgKi8KKyAgICBhbWVudSA9ICgobW9kZXMgJiAoTUVOVV9OT1JNQUxfTU9ERSB8IE1FTlVfSU5TRVJUX01PREUpKSA9PQorCQkJCSAgICAgICAoTUVOVV9OT1JNQUxfTU9ERSB8IE1FTlVfSU5TRVJUX01PREUpKTsKKyAgICBpZiAoc3lzX21lbnUpCisJbW9kZXMgJj0gfm9sZF9tb2RlczsKKworICAgIGlmIChtZW51ICE9IE5VTEwgJiYgbW9kZXMpCisgICAgeworI2lmZGVmIEZFQVRfR1VJCisJbWVudS0+Y2IgPSBndWlfbWVudV9jYjsKKyNlbmRpZgorCXAgPSAoY2FsbF9kYXRhID09IE5VTEwpID8gTlVMTCA6IHZpbV9zdHJzYXZlKGNhbGxfZGF0YSk7CisKKwkvKiBsb29wIG92ZXIgYWxsIG1vZGVzLCBtYXkgYWRkIG1vcmUgdGhhbiBvbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUVOVV9NT0RFUzsgKytpKQorCXsKKwkgICAgaWYgKG1vZGVzICYgKDEgPDwgaSkpCisJICAgIHsKKwkJLyogZnJlZSBhbnkgb2xkIG1lbnUgKi8KKwkJZnJlZV9tZW51X3N0cmluZyhtZW51LCBpKTsKKworCQkvKiBGb3IgImFtZW51IiwgbWF5IGluc2VydCBhbiBleHRyYSBjaGFyYWN0ZXIuCisJCSAqIERvbid0IGRvIHRoaXMgaWYgYWRkaW5nIGEgdGVhcmJhciAoYWRkdGVhcm9mZiA9PSBGQUxTRSkuCisJCSAqIERvbid0IGRvIHRoaXMgZm9yICI8Tm9wPiIuICovCisJCWMgPSAwOworCQlpZiAoYW1lbnUgJiYgY2FsbF9kYXRhICE9IE5VTEwgJiYgKmNhbGxfZGF0YSAhPSBOVUwKKyNpZmRlZiBGRUFUX0dVSV9XMzIKKwkJICAgICAgICYmIGFkZHRlYXJvZmYKKyNlbmRpZgorCQkJCSAgICAgICApCisJCXsKKwkJICAgIHN3aXRjaCAoMSA8PCBpKQorCQkgICAgeworCQkJY2FzZSBNRU5VX1ZJU1VBTF9NT0RFOgorCQkJY2FzZSBNRU5VX09QX1BFTkRJTkdfTU9ERToKKwkJCWNhc2UgTUVOVV9DTURMSU5FX01PREU6CisJCQkgICAgYyA9IEN0cmxfQzsKKwkJCSAgICBicmVhazsKKwkJCWNhc2UgTUVOVV9JTlNFUlRfTU9ERToKKwkJCSAgICBjID0gQ3RybF9POworCQkJICAgIGJyZWFrOworCQkgICAgfQorCQl9CisKKwkJaWYgKGMpCisJCXsKKwkJICAgIG1lbnUtPnN0cmluZ3NbaV0gPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTihjYWxsX2RhdGEpICsgNCkpOworCQkgICAgaWYgKG1lbnUtPnN0cmluZ3NbaV0gIT0gTlVMTCkKKwkJICAgIHsKKwkJCW1lbnUtPnN0cmluZ3NbaV1bMF0gPSBjOworCQkJU1RSQ1BZKG1lbnUtPnN0cmluZ3NbaV0gKyAxLCBjYWxsX2RhdGEpOworCQkJaWYgKGMgPT0gQ3RybF9DKQorCQkJeworCQkJICAgIGludAkgICAgbGVuID0gU1RSTEVOKG1lbnUtPnN0cmluZ3NbaV0pOworCisJCQkgICAgLyogQXBwZW5kIENUUkwtXCBDVFJMLUcgdG8gb2JleSAnaW5zZXJ0bW9kZScuICovCisJCQkgICAgbWVudS0+c3RyaW5nc1tpXVtsZW5dID0gQ3RybF9CU0w7CisJCQkgICAgbWVudS0+c3RyaW5nc1tpXVtsZW4gKyAxXSA9IEN0cmxfRzsKKwkJCSAgICBtZW51LT5zdHJpbmdzW2ldW2xlbiArIDJdID0gTlVMOworCQkJfQorCQkgICAgfQorCQl9CisJCWVsc2UKKwkJICAgIG1lbnUtPnN0cmluZ3NbaV0gPSBwOworCQltZW51LT5ub3JlbWFwW2ldID0gbWVudWFyZy0+bm9yZW1hcFswXTsKKwkJbWVudS0+c2lsZW50W2ldID0gbWVudWFyZy0+c2lsZW50WzBdOworCSAgICB9CisJfQorI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpIFwKKwkmJiAoZGVmaW5lZChGRUFUX0JFVkFMKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykpCisJLyogTmVlZCB0byB1cGRhdGUgdGhlIG1lbnUgdGlwLiAqLworCWlmIChtb2RlcyAmIE1FTlVfVElQX01PREUpCisJICAgIGd1aV9tY2hfbWVudV9zZXRfdGlwKG1lbnUpOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiBPSzsKKworZXJyZXQ6CisgICAgdmltX2ZyZWUocGF0aF9uYW1lKTsKKyAgICB2aW1fZnJlZShkbmFtZSk7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKy8qCisgKiBTZXQgdGhlIChzdWIpbWVudSB3aXRoIHRoZSBnaXZlbiBuYW1lIHRvIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisgKiBDYWxsZWQgcmVjdXJzaXZlbHkuCisgKi8KKyAgICBzdGF0aWMgaW50CittZW51X25hYmxlX3JlY3Vyc2UobWVudSwgbmFtZSwgbW9kZXMsIGVuYWJsZSkKKyAgICB2aW1tZW51X1QJKm1lbnU7CisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJbW9kZXM7CisgICAgaW50CQllbmFibGU7Cit7CisgICAgY2hhcl91CSpwOworCisgICAgaWYgKG1lbnUgPT0gTlVMTCkKKwlyZXR1cm4gT0s7CQkvKiBHb3QgdG8gYm90dG9tIG9mIGhpZXJhcmNoeSAqLworCisgICAgLyogR2V0IG5hbWUgb2YgdGhpcyBlbGVtZW50IGluIHRoZSBtZW51IGhpZXJhcmNoeSAqLworICAgIHAgPSBtZW51X25hbWVfc2tpcChuYW1lKTsKKworICAgIC8qIEZpbmQgdGhlIG1lbnUgKi8KKyAgICB3aGlsZSAobWVudSAhPSBOVUxMKQorICAgIHsKKwlpZiAoKm5hbWUgPT0gTlVMIHx8ICpuYW1lID09ICcqJyB8fCBtZW51X25hbWVfZXF1YWwobmFtZSwgbWVudSkpCisJeworCSAgICBpZiAoKnAgIT0gTlVMKQorCSAgICB7CisJCWlmIChtZW51LT5jaGlsZHJlbiA9PSBOVUxMKQorCQl7CisJCSAgICBFTVNHKF8oZV9ub3RzdWJtZW51KSk7CisJCSAgICByZXR1cm4gRkFJTDsKKwkJfQorCQlpZiAobWVudV9uYWJsZV9yZWN1cnNlKG1lbnUtPmNoaWxkcmVuLCBwLCBtb2RlcywgZW5hYmxlKQorCQkJCQkJCQkgICAgICA9PSBGQUlMKQorCQkgICAgcmV0dXJuIEZBSUw7CisJICAgIH0KKwkgICAgZWxzZQorCQlpZiAoZW5hYmxlKQorCQkgICAgbWVudS0+ZW5hYmxlZCB8PSBtb2RlczsKKwkJZWxzZQorCQkgICAgbWVudS0+ZW5hYmxlZCAmPSB+bW9kZXM7CisKKwkgICAgLyoKKwkgICAgICogV2hlbiBuYW1lIGlzIGVtcHR5LCB3ZSBhcmUgZG9pbmcgYWxsIG1lbnUgaXRlbXMgZm9yIHRoZSBnaXZlbgorCSAgICAgKiBtb2Rlcywgc28ga2VlcCBsb29waW5nLCBvdGhlcndpc2Ugd2UgYXJlIGp1c3QgZG9pbmcgdGhlIG5hbWVkCisJICAgICAqIG1lbnUgaXRlbSAod2hpY2ggaGFzIGJlZW4gZm91bmQpIHNvIGJyZWFrIGhlcmUuCisJICAgICAqLworCSAgICBpZiAoKm5hbWUgIT0gTlVMICYmICpuYW1lICE9ICcqJykKKwkJYnJlYWs7CisJfQorCW1lbnUgPSBtZW51LT5uZXh0OworICAgIH0KKyAgICBpZiAoKm5hbWUgIT0gTlVMICYmICpuYW1lICE9ICcqJyAmJiBtZW51ID09IE5VTEwpCisgICAgeworCUVNU0coXyhlX25vbWVudSkpOworCXJldHVybiBGQUlMOworICAgIH0KKworI2lmZGVmIEZFQVRfR1VJCisgICAgLyogV2FudCB0byB1cGRhdGUgbWVudXMgbm93IGV2ZW4gaWYgbW9kZSBub3QgY2hhbmdlZCAqLworICAgIGZvcmNlX21lbnVfdXBkYXRlID0gVFJVRTsKKyNlbmRpZgorCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogUmVtb3ZlIHRoZSAoc3ViKW1lbnUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBmcm9tIHRoZSBtZW51IGhpZXJhcmNoeQorICogQ2FsbGVkIHJlY3Vyc2l2ZWx5LgorICovCisgICAgc3RhdGljIGludAorcmVtb3ZlX21lbnUobWVudXAsIG5hbWUsIG1vZGVzLCBzaWxlbnQpCisgICAgdmltbWVudV9UCSoqbWVudXA7CisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJbW9kZXM7CisgICAgaW50CQlzaWxlbnQ7CQkvKiBkb24ndCBnaXZlIGVycm9yIG1lc3NhZ2VzICovCit7CisgICAgdmltbWVudV9UCSptZW51OworICAgIHZpbW1lbnVfVAkqY2hpbGQ7CisgICAgY2hhcl91CSpwOworCisgICAgaWYgKCptZW51cCA9PSBOVUxMKQorCXJldHVybiBPSzsJCS8qIEdvdCB0byBib3R0b20gb2YgaGllcmFyY2h5ICovCisKKyAgICAvKiBHZXQgbmFtZSBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIG1lbnUgaGllcmFyY2h5ICovCisgICAgcCA9IG1lbnVfbmFtZV9za2lwKG5hbWUpOworCisgICAgLyogRmluZCB0aGUgbWVudSAqLworICAgIHdoaWxlICgobWVudSA9ICptZW51cCkgIT0gTlVMTCkKKyAgICB7CisJaWYgKCpuYW1lID09IE5VTCB8fCBtZW51X25hbWVfZXF1YWwobmFtZSwgbWVudSkpCisJeworCSAgICBpZiAoKnAgIT0gTlVMICYmIG1lbnUtPmNoaWxkcmVuID09IE5VTEwpCisJICAgIHsKKwkJaWYgKCFzaWxlbnQpCisJCSAgICBFTVNHKF8oZV9ub3RzdWJtZW51KSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJICAgIGlmICgobWVudS0+bW9kZXMgJiBtb2RlcykgIT0gMHgwKQorCSAgICB7CisjaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpICYgZGVmaW5lZChGRUFUX1RFQVJPRkYpCisJCS8qCisJCSAqIElmIHdlIGFyZSByZW1vdmluZyBhbGwgZW50cmllcyBmb3IgdGhpcyBtZW51LE1FTlVfQUxMX01PREVTLAorCQkgKiBUaGVuIGtpbGwgYW55IHRlYXJvZmYgYmVmb3JlIHdlIHN0YXJ0CisJCSAqLworCQlpZiAoKnAgPT0gTlVMICYmIG1vZGVzID09IE1FTlVfQUxMX01PREVTKQorCQl7CisJCSAgICBpZiAoSXNXaW5kb3cobWVudS0+dGVhcm9mZl9oYW5kbGUpKQorCQkJRGVzdHJveVdpbmRvdyhtZW51LT50ZWFyb2ZmX2hhbmRsZSk7CisJCX0KKyNlbmRpZgorCQlpZiAocmVtb3ZlX21lbnUoJm1lbnUtPmNoaWxkcmVuLCBwLCBtb2Rlcywgc2lsZW50KSA9PSBGQUlMKQorCQkgICAgcmV0dXJuIEZBSUw7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKm5hbWUgIT0gTlVMKQorCSAgICB7CisJCWlmICghc2lsZW50KQorCQkgICAgRU1TRyhfKGVfb3RoZXJtb2RlKSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogV2hlbiBuYW1lIGlzIGVtcHR5LCB3ZSBhcmUgcmVtb3ZpbmcgYWxsIG1lbnUgaXRlbXMgZm9yIHRoZSBnaXZlbgorCSAgICAgKiBtb2Rlcywgc28ga2VlcCBsb29waW5nLCBvdGhlcndpc2Ugd2UgYXJlIGp1c3QgcmVtb3ZpbmcgdGhlIG5hbWVkCisJICAgICAqIG1lbnUgaXRlbSAod2hpY2ggaGFzIGJlZW4gZm91bmQpIHNvIGJyZWFrIGhlcmUuCisJICAgICAqLworCSAgICBpZiAoKm5hbWUgIT0gTlVMKQorCQlicmVhazsKKworCSAgICAvKiBSZW1vdmUgdGhlIG1lbnUgaXRlbSBmb3IgdGhlIGdpdmVuIG1vZGVbc10uICBJZiB0aGUgbWVudSBpdGVtCisJICAgICAqIGlzIG5vIGxvbmdlciB2YWxpZCBpbiBBTlkgbW9kZSwgZGVsZXRlIGl0ICovCisJICAgIG1lbnUtPm1vZGVzICY9IH5tb2RlczsKKwkgICAgaWYgKG1vZGVzICYgTUVOVV9USVBfTU9ERSkKKwkJZnJlZV9tZW51X3N0cmluZyhtZW51LCBNRU5VX0lOREVYX1RJUCk7CisJICAgIGlmICgobWVudS0+bW9kZXMgJiBNRU5VX0FMTF9NT0RFUykgPT0gMCkKKwkJZnJlZV9tZW51KG1lbnVwKTsKKwkgICAgZWxzZQorCQltZW51cCA9ICZtZW51LT5uZXh0OworCX0KKwllbHNlCisJICAgIG1lbnVwID0gJm1lbnUtPm5leHQ7CisgICAgfQorICAgIGlmICgqbmFtZSAhPSBOVUwpCisgICAgeworCWlmIChtZW51ID09IE5VTEwpCisJeworCSAgICBpZiAoIXNpbGVudCkKKwkJRU1TRyhfKGVfbm9tZW51KSk7CisJICAgIHJldHVybiBGQUlMOworCX0KKworCisJLyogUmVjYWxjdWxhdGUgbW9kZXMgZm9yIG1lbnUgYmFzZWQgb24gdGhlIG5ldyB1cGRhdGVkIGNoaWxkcmVuICovCisJbWVudS0+bW9kZXMgJj0gfm1vZGVzOworI2lmIGRlZmluZWQoRkVBVF9HVUlfVzMyKSAmIGRlZmluZWQoRkVBVF9URUFST0ZGKQorCWlmICgoc190ZWFyb2ZmcykgJiYgKG1lbnUtPmNoaWxkcmVuICE9IE5VTEwpKSAvKiB0aGVyZSdzIGEgdGVhciBiYXIuLiAqLworCSAgICBjaGlsZCA9IG1lbnUtPmNoaWxkcmVuLT5uZXh0OyAvKiBkb24ndCBjb3VudCB0ZWFyb2ZmIGJhciAqLworCWVsc2UKKyNlbmRpZgorCSAgICBjaGlsZCA9IG1lbnUtPmNoaWxkcmVuOworCWZvciAoIDsgY2hpbGQgIT0gTlVMTDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkKKwkgICAgbWVudS0+bW9kZXMgfD0gY2hpbGQtPm1vZGVzOworCWlmIChtb2RlcyAmIE1FTlVfVElQX01PREUpCisJeworCSAgICBmcmVlX21lbnVfc3RyaW5nKG1lbnUsIE1FTlVfSU5ERVhfVElQKTsKKyNpZiBkZWZpbmVkKEZFQVRfVE9PTEJBUikgJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKSBcCisJICAgICYmIChkZWZpbmVkKEZFQVRfQkVWQUwpIHx8IGRlZmluZWQoRkVBVF9HVUlfR1RLKSkKKwkgICAgLyogTmVlZCB0byB1cGRhdGUgdGhlIG1lbnUgdGlwLiAqLworCSAgICBpZiAoZ3VpLmluX3VzZSkKKwkJZ3VpX21jaF9tZW51X3NldF90aXAobWVudSk7CisjZW5kaWYKKwl9CisJaWYgKChtZW51LT5tb2RlcyAmIE1FTlVfQUxMX01PREVTKSA9PSAwKQorCXsKKwkgICAgLyogVGhlIG1lbnUgaXRlbSBpcyBubyBsb25nZXIgdmFsaWQgaW4gQU5ZIG1vZGUsIHNvIGRlbGV0ZSBpdCAqLworI2lmIGRlZmluZWQoRkVBVF9HVUlfVzMyKSAmIGRlZmluZWQoRkVBVF9URUFST0ZGKQorCSAgICBpZiAoc190ZWFyb2ZmcyAmJiBtZW51LT5jaGlsZHJlbiAhPSBOVUxMKSAvKiB0aGVyZSdzIGEgdGVhciBiYXIuLiAqLworCQlmcmVlX21lbnUoJm1lbnUtPmNoaWxkcmVuKTsKKyNlbmRpZgorCSAgICAqbWVudXAgPSBtZW51OworCSAgICBmcmVlX21lbnUobWVudXApOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBnaXZlbiBtZW51IHN0cnVjdHVyZSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGxpbmtlZCBsaXN0LgorICovCisgICAgc3RhdGljIHZvaWQKK2ZyZWVfbWVudShtZW51cCkKKyAgICB2aW1tZW51X1QJKiptZW51cDsKK3sKKyAgICBpbnQJCWk7CisgICAgdmltbWVudV9UCSptZW51OworCisgICAgbWVudSA9ICptZW51cDsKKworI2lmZGVmIEZFQVRfR1VJCisgICAgLyogRnJlZSBtYWNoaW5lIHNwZWNpZmljIG1lbnUgc3RydWN0dXJlcyAob25seSB3aGVuIGFscmVhZHkgY3JlYXRlZCkgKi8KKyAgICAvKiBBbHNvIG1heSByZWJ1aWxkIGEgdGVhcm9mZidlZCBtZW51ICovCisgICAgaWYgKGd1aS5pbl91c2UpCisJZ3VpX21jaF9kZXN0cm95X21lbnUobWVudSk7CisjZW5kaWYKKworICAgIC8qIERvbid0IGNoYW5nZSAqbWVudXAgdW50aWwgYWZ0ZXIgY2FsbGluZyBndWlfbWNoX2Rlc3Ryb3lfbWVudSgpLiBUaGUKKyAgICAgKiBNYWNPUyBjb2RlIG5lZWRzIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUgdG8gcHJvcGVybHkgZGVsZXRlIHRoZSBtZW51LiAqLworICAgICptZW51cCA9IG1lbnUtPm5leHQ7CisgICAgdmltX2ZyZWUobWVudS0+bmFtZSk7CisgICAgdmltX2ZyZWUobWVudS0+ZG5hbWUpOworICAgIHZpbV9mcmVlKG1lbnUtPmFjdGV4dCk7CisjaWZkZWYgRkVBVF9UT09MQkFSCisgICAgdmltX2ZyZWUobWVudS0+aWNvbmZpbGUpOworI2VuZGlmCisgICAgZm9yIChpID0gMDsgaSA8IE1FTlVfTU9ERVM7IGkrKykKKwlmcmVlX21lbnVfc3RyaW5nKG1lbnUsIGkpOworICAgIHZpbV9mcmVlKG1lbnUpOworCisjaWZkZWYgRkVBVF9HVUkKKyAgICAvKiBXYW50IHRvIHVwZGF0ZSBtZW51cyBub3cgZXZlbiBpZiBtb2RlIG5vdCBjaGFuZ2VkICovCisgICAgZm9yY2VfbWVudV91cGRhdGUgPSBUUlVFOworI2VuZGlmCit9CisKKy8qCisgKiBGcmVlIHRoZSBtZW51LT5zdHJpbmcgd2l0aCB0aGUgZ2l2ZW4gaW5kZXguCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZnJlZV9tZW51X3N0cmluZyhtZW51LCBpZHgpCisgICAgdmltbWVudV9UCSptZW51OworICAgIGludAkJaWR4OworeworICAgIGludAkJY291bnQgPSAwOworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBNRU5VX01PREVTOyBpKyspCisJaWYgKG1lbnUtPnN0cmluZ3NbaV0gPT0gbWVudS0+c3RyaW5nc1tpZHhdKQorCSAgICBjb3VudCsrOworICAgIGlmIChjb3VudCA9PSAxKQorCXZpbV9mcmVlKG1lbnUtPnN0cmluZ3NbaWR4XSk7CisgICAgbWVudS0+c3RyaW5nc1tpZHhdID0gTlVMTDsKK30KKworLyoKKyAqIFNob3cgdGhlIG1hcHBpbmcgYXNzb2NpYXRlZCB3aXRoIGEgbWVudSBpdGVtIG9yIGhpZXJhcmNoeSBpbiBhIHN1Yi1tZW51LgorICovCisgICAgc3RhdGljIGludAorc2hvd19tZW51cyhwYXRoX25hbWUsIG1vZGVzKQorICAgIGNoYXJfdSAgKnBhdGhfbmFtZTsKKyAgICBpbnQJICAgIG1vZGVzOworeworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgdmltbWVudV9UCSptZW51OworICAgIHZpbW1lbnVfVAkqcGFyZW50ID0gTlVMTDsKKworICAgIG1lbnUgPSByb290X21lbnU7CisgICAgbmFtZSA9IHBhdGhfbmFtZSA9IHZpbV9zdHJzYXZlKHBhdGhfbmFtZSk7CisgICAgaWYgKHBhdGhfbmFtZSA9PSBOVUxMKQorCXJldHVybiBGQUlMOworCisgICAgLyogRmlyc3QsIGZpbmQgdGhlIChzdWIpbWVudSB3aXRoIHRoZSBnaXZlbiBuYW1lICovCisgICAgd2hpbGUgKCpuYW1lKQorICAgIHsKKwlwID0gbWVudV9uYW1lX3NraXAobmFtZSk7CisJd2hpbGUgKG1lbnUgIT0gTlVMTCkKKwl7CisJICAgIGlmIChtZW51X25hbWVfZXF1YWwobmFtZSwgbWVudSkpCisJICAgIHsKKwkJLyogRm91bmQgbWVudSAqLworCQlpZiAoKnAgIT0gTlVMICYmIG1lbnUtPmNoaWxkcmVuID09IE5VTEwpCisJCXsKKwkJICAgIEVNU0coXyhlX25vdHN1Ym1lbnUpKTsKKwkJICAgIHZpbV9mcmVlKHBhdGhfbmFtZSk7CisJCSAgICByZXR1cm4gRkFJTDsKKwkJfQorCQllbHNlIGlmICgobWVudS0+bW9kZXMgJiBtb2RlcykgPT0gMHgwKQorCQl7CisJCSAgICBFTVNHKF8oZV9vdGhlcm1vZGUpKTsKKwkJICAgIHZpbV9mcmVlKHBhdGhfbmFtZSk7CisJCSAgICByZXR1cm4gRkFJTDsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCSAgICBtZW51ID0gbWVudS0+bmV4dDsKKwl9CisJaWYgKG1lbnUgPT0gTlVMTCkKKwl7CisJICAgIEVNU0coXyhlX25vbWVudSkpOworCSAgICB2aW1fZnJlZShwYXRoX25hbWUpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisJbmFtZSA9IHA7CisJcGFyZW50ID0gbWVudTsKKwltZW51ID0gbWVudS0+Y2hpbGRyZW47CisgICAgfQorCisgICAgLyogTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncyAqLworCQkJCQkJICAgIC8qIEhpZ2hsaWdodCB0aXRsZSAqLworICAgIE1TR19QVVRTX1RJVExFKF8oIlxuLS0tIE1lbnVzIC0tLSIpKTsKKworICAgIHNob3dfbWVudXNfcmVjdXJzaXZlKHBhcmVudCwgbW9kZXMsIDApOworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IHNob3cgdGhlIG1hcHBpbmdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVudXMgdW5kZXIgdGhlIGdpdmVuIG9uZQorICovCisgICAgc3RhdGljIHZvaWQKK3Nob3dfbWVudXNfcmVjdXJzaXZlKG1lbnUsIG1vZGVzLCBkZXB0aCkKKyAgICB2aW1tZW51X1QJKm1lbnU7CisgICAgaW50CQltb2RlczsKKyAgICBpbnQJCWRlcHRoOworeworICAgIGludAkJaTsKKyAgICBpbnQJCWJpdDsKKworICAgIGlmIChtZW51ICE9IE5VTEwgJiYgKG1lbnUtPm1vZGVzICYgbW9kZXMpID09IDB4MCkKKwlyZXR1cm47CisKKyAgICBpZiAobWVudSAhPSBOVUxMKQorICAgIHsKKwltc2dfcHV0Y2hhcignXG4nKTsKKwlpZiAoZ290X2ludCkJCS8qICJxIiBoaXQgZm9yICItLW1vcmUtLSIgKi8KKwkgICAgcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorCSAgICBNU0dfUFVUUygiICAiKTsKKwlpZiAobWVudS0+cHJpb3JpdHkpCisJeworCSAgICBtc2dfb3V0bnVtKChsb25nKW1lbnUtPnByaW9yaXR5KTsKKwkgICAgTVNHX1BVVFMoIiAiKTsKKwl9CisJCQkJLyogU2FtZSBoaWdobGlnaHRpbmcgYXMgZm9yIGRpcmVjdG9yaWVzIT8gKi8KKwltc2dfb3V0dHJhbnNfYXR0cihtZW51LT5uYW1lLCBobF9hdHRyKEhMRl9EKSk7CisgICAgfQorCisgICAgaWYgKG1lbnUgIT0gTlVMTCAmJiBtZW51LT5jaGlsZHJlbiA9PSBOVUxMKQorICAgIHsKKwlmb3IgKGJpdCA9IDA7IGJpdCA8IE1FTlVfTU9ERVM7IGJpdCsrKQorCSAgICBpZiAoKG1lbnUtPm1vZGVzICYgbW9kZXMgJiAoMSA8PCBiaXQpKSAhPSAwKQorCSAgICB7CisJCW1zZ19wdXRjaGFyKCdcbicpOworCQlpZiAoZ290X2ludCkJCS8qICJxIiBoaXQgZm9yICItLW1vcmUtLSIgKi8KKwkJICAgIHJldHVybjsKKwkJZm9yIChpID0gMDsgaSA8IGRlcHRoICsgMjsgaSsrKQorCQkgICAgTVNHX1BVVFMoIiAgIik7CisJCW1zZ19wdXRjaGFyKG1lbnVfbW9kZV9jaGFyc1tiaXRdKTsKKwkJaWYgKG1lbnUtPm5vcmVtYXBbYml0XSA9PSBSRU1BUF9OT05FKQorCQkgICAgbXNnX3B1dGNoYXIoJyonKTsKKwkJZWxzZSBpZiAobWVudS0+bm9yZW1hcFtiaXRdID09IFJFTUFQX1NDUklQVCkKKwkJICAgIG1zZ19wdXRjaGFyKCcmJyk7CisJCWVsc2UKKwkJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJCWlmIChtZW51LT5zaWxlbnRbYml0XSkKKwkJICAgIG1zZ19wdXRjaGFyKCdzJyk7CisJCWVsc2UKKwkJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJCWlmICgobWVudS0+bW9kZXMgJiBtZW51LT5lbmFibGVkICYgKDEgPDwgYml0KSkgPT0gMCkKKwkJICAgIG1zZ19wdXRjaGFyKCctJyk7CisJCWVsc2UKKwkJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJCU1TR19QVVRTKCIgIik7CisJCWlmICgqbWVudS0+c3RyaW5nc1tiaXRdID09IE5VTCkKKwkJICAgIG1zZ19wdXRzX2F0dHIoKGNoYXJfdSAqKSI8Tm9wPiIsIGhsX2F0dHIoSExGXzgpKTsKKwkJZWxzZQorCQkgICAgbXNnX291dHRyYW5zX3NwZWNpYWwobWVudS0+c3RyaW5nc1tiaXRdLCBGQUxTRSk7CisJICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAobWVudSA9PSBOVUxMKQorCXsKKwkgICAgbWVudSA9IHJvb3RfbWVudTsKKwkgICAgZGVwdGgtLTsKKwl9CisJZWxzZQorCSAgICBtZW51ID0gbWVudS0+Y2hpbGRyZW47CisKKwkvKiByZWN1cnNpdmVseSBzaG93IGFsbCBjaGlsZHJlbi4gIFNraXAgUG9wVXBbbnZvY2ldLiAqLworCWZvciAoOyBtZW51ICE9IE5VTEwgJiYgIWdvdF9pbnQ7IG1lbnUgPSBtZW51LT5uZXh0KQorCSAgICBpZiAoIW1lbnVfaXNfaGlkZGVuKG1lbnUtPmRuYW1lKSkKKwkJc2hvd19tZW51c19yZWN1cnNpdmUobWVudSwgbW9kZXMsIGRlcHRoICsgMSk7CisgICAgfQorfQorCisjaWZkZWYgRkVBVF9DTURMX0NPTVBMCisKKy8qCisgKiBVc2VkIHdoZW4gZXhwYW5kaW5nIG1lbnUgbmFtZXMuCisgKi8KK3N0YXRpYyB2aW1tZW51X1QJKmV4cGFuZF9tZW51ID0gTlVMTDsKK3N0YXRpYyBpbnQJCWV4cGFuZF9tb2RlcyA9IDB4MDsKK3N0YXRpYyBpbnQJCWV4cGFuZF9lbWVudTsJLyogVFJVRSBmb3IgIjplbWVudSIgY29tbWFuZCAqLworCisvKgorICogV29yayBvdXQgd2hhdCB0byBjb21wbGV0ZSB3aGVuIGRvaW5nIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIG9mIG1lbnUgbmFtZXMuCisgKi8KKyAgICBjaGFyX3UgKgorc2V0X2NvbnRleHRfaW5fbWVudV9jbWQoeHAsIGNtZCwgYXJnLCBmb3JjZWl0KQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBjaGFyX3UJKmNtZDsKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBpbnQJCWZvcmNlaXQ7Cit7CisgICAgY2hhcl91CSphZnRlcl9kb3Q7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqcGF0aF9uYW1lID0gTlVMTDsKKyAgICBjaGFyX3UJKm5hbWU7CisgICAgaW50CQl1bm1lbnU7CisgICAgdmltbWVudV9UCSptZW51OworICAgIGludAkJZXhwYW5kX21lbnVzOworCisgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfVU5TVUNDRVNTRlVMOworCisKKyAgICAvKiBDaGVjayBmb3IgcHJpb3JpdHkgbnVtYmVycywgZW5hYmxlIGFuZCBkaXNhYmxlICovCisgICAgZm9yIChwID0gYXJnOyAqcDsgKytwKQorCWlmICghVklNX0lTRElHSVQoKnApICYmICpwICE9ICcuJykKKwkgICAgYnJlYWs7CisKKyAgICBpZiAoIXZpbV9pc3doaXRlKCpwKSkKKyAgICB7CisJaWYgKFNUUk5DTVAoYXJnLCAiZW5hYmxlIiwgNikgPT0gMAorCQkmJiAoYXJnWzZdID09IE5VTCB8fCAgdmltX2lzd2hpdGUoYXJnWzZdKSkpCisJICAgIHAgPSBhcmcgKyA2OworCWVsc2UgaWYgKFNUUk5DTVAoYXJnLCAiZGlzYWJsZSIsIDcpID09IDAKKwkJJiYgKGFyZ1s3XSA9PSBOVUwgfHwgdmltX2lzd2hpdGUoYXJnWzddKSkpCisJICAgIHAgPSBhcmcgKyA3OworCWVsc2UKKwkgICAgcCA9IGFyZzsKKyAgICB9CisKKyAgICB3aGlsZSAoKnAgIT0gTlVMICYmIHZpbV9pc3doaXRlKCpwKSkKKwkrK3A7CisKKyAgICBhcmcgPSBhZnRlcl9kb3QgPSBwOworCisgICAgZm9yICg7ICpwICYmICF2aW1faXN3aGl0ZSgqcCk7ICsrcCkKKyAgICB7CisJaWYgKCgqcCA9PSAnXFwnIHx8ICpwID09IEN0cmxfVikgJiYgcFsxXSAhPSBOVUwpCisJICAgIHArKzsKKwllbHNlIGlmICgqcCA9PSAnLicpCisJICAgIGFmdGVyX2RvdCA9IHAgKyAxOworICAgIH0KKworICAgIC8qICI6dGVhcm9mZiIgYW5kICI6cG9wdXAiIG9ubHkgdXNlIG1lbnVzLCBub3QgZW50cmllcyAqLworICAgIGV4cGFuZF9tZW51cyA9ICEoKCpjbWQgPT0gJ3QnICYmIGNtZFsxXSA9PSAnZScpIHx8ICpjbWQgPT0gJ3AnKTsKKyAgICBleHBhbmRfZW1lbnUgPSAoKmNtZCA9PSAnZScpOworICAgIGlmIChleHBhbmRfbWVudXMgJiYgdmltX2lzd2hpdGUoKnApKQorCXJldHVybiBOVUxMOwkvKiBUT0RPOiBjaGVjayBmb3IgbmV4dCBjb21tYW5kPyAqLworICAgIGlmICgqcCA9PSBOVUwpCQkvKiBDb21wbGV0ZSB0aGUgbWVudSBuYW1lICovCisgICAgeworCS8qCisJICogV2l0aCA6dW5tZW51LCB5b3Ugb25seSB3YW50IHRvIG1hdGNoIG1lbnVzIGZvciB0aGUgYXBwcm9wcmlhdGUgbW9kZS4KKwkgKiBXaXRoIDptZW51IHRob3VnaCB5b3UgbWlnaHQgd2FudCB0byBhZGQgYSBtZW51IHdpdGggdGhlIHNhbWUgbmFtZSBhcworCSAqIG9uZSBpbiBhbm90aGVyIG1vZGUsIHNvIG1hdGNoIG1lbnVzIGZyb20gb3RoZXIgbW9kZXMgdG9vLgorCSAqLworCWV4cGFuZF9tb2RlcyA9IGdldF9tZW51X2NtZF9tb2RlcyhjbWQsIGZvcmNlaXQsIE5VTEwsICZ1bm1lbnUpOworCWlmICghdW5tZW51KQorCSAgICBleHBhbmRfbW9kZXMgPSBNRU5VX0FMTF9NT0RFUzsKKworCW1lbnUgPSByb290X21lbnU7CisJaWYgKGFmdGVyX2RvdCAhPSBhcmcpCisJeworCSAgICBwYXRoX25hbWUgPSBhbGxvYygodW5zaWduZWQpKGFmdGVyX2RvdCAtIGFyZykpOworCSAgICBpZiAocGF0aF9uYW1lID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCSAgICBTVFJOQ1BZKHBhdGhfbmFtZSwgYXJnLCBhZnRlcl9kb3QgLSBhcmcgLSAxKTsKKwkgICAgcGF0aF9uYW1lW2FmdGVyX2RvdCAtIGFyZyAtIDFdID0gTlVMOworCX0KKwluYW1lID0gcGF0aF9uYW1lOworCXdoaWxlIChuYW1lICE9IE5VTEwgJiYgKm5hbWUpCisJeworCSAgICBwID0gbWVudV9uYW1lX3NraXAobmFtZSk7CisJICAgIHdoaWxlIChtZW51ICE9IE5VTEwpCisJICAgIHsKKwkJaWYgKG1lbnVfbmFtZV9lcXVhbChuYW1lLCBtZW51KSkKKwkJeworCQkgICAgLyogRm91bmQgbWVudSAqLworCQkgICAgaWYgKCgqcCAhPSBOVUwgJiYgbWVudS0+Y2hpbGRyZW4gPT0gTlVMTCkKKwkJCXx8ICgobWVudS0+bW9kZXMgJiBleHBhbmRfbW9kZXMpID09IDB4MCkpCisJCSAgICB7CisJCQkvKgorCQkJICogTWVudSBwYXRoIGNvbnRpbnVlcywgYnV0IHdlIGhhdmUgcmVhY2hlZCBhIGxlYWYuCisJCQkgKiBPciBtZW51IGV4aXN0cyBvbmx5IGluIGFub3RoZXIgbW9kZS4KKwkJCSAqLworCQkJdmltX2ZyZWUocGF0aF9uYW1lKTsKKwkJCXJldHVybiBOVUxMOworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCX0KKwkJbWVudSA9IG1lbnUtPm5leHQ7CisJICAgIH0KKwkgICAgaWYgKG1lbnUgPT0gTlVMTCkKKwkgICAgeworCQkvKiBObyBtZW51IGZvdW5kIHdpdGggdGhlIG5hbWUgd2Ugd2VyZSBsb29raW5nIGZvciAqLworCQl2aW1fZnJlZShwYXRoX25hbWUpOworCQlyZXR1cm4gTlVMTDsKKwkgICAgfQorCSAgICBuYW1lID0gcDsKKwkgICAgbWVudSA9IG1lbnUtPmNoaWxkcmVuOworCX0KKworCXhwLT54cF9jb250ZXh0ID0gZXhwYW5kX21lbnVzID8gRVhQQU5EX01FTlVOQU1FUyA6IEVYUEFORF9NRU5VUzsKKwl4cC0+eHBfcGF0dGVybiA9IGFmdGVyX2RvdDsKKwlleHBhbmRfbWVudSA9IG1lbnU7CisgICAgfQorICAgIGVsc2UJCQkvKiBXZSdyZSBpbiB0aGUgbWFwcGluZyBwYXJ0ICovCisJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEZ1bmN0aW9uIGdpdmVuIHRvIEV4cGFuZEdlbmVyaWMoKSB0byBvYnRhaW4gdGhlIGxpc3Qgb2YgKHN1YiltZW51cyAobm90CisgKiBlbnRyaWVzKS4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICoKK2dldF9tZW51X25hbWUoeHAsIGlkeCkKKyAgICBleHBhbmRfVAkqeHA7CisgICAgaW50CQlpZHg7Cit7CisgICAgc3RhdGljIHZpbW1lbnVfVAkqbWVudSA9IE5VTEw7CisgICAgY2hhcl91CQkqc3RyOworCisgICAgaWYgKGlkeCA9PSAwKQkgICAgLyogZmlyc3QgY2FsbDogc3RhcnQgYXQgZmlyc3QgaXRlbSAqLworCW1lbnUgPSBleHBhbmRfbWVudTsKKworICAgIC8qIFNraXAgUG9wVXBbbnZvY2ldLiAqLworICAgIHdoaWxlIChtZW51ICE9IE5VTEwgJiYgKG1lbnVfaXNfaGlkZGVuKG1lbnUtPmRuYW1lKQorCSAgICB8fCBtZW51X2lzX3NlcGFyYXRvcihtZW51LT5kbmFtZSkKKwkgICAgfHwgbWVudV9pc190ZWFyb2ZmKG1lbnUtPmRuYW1lKQorCSAgICB8fCBtZW51LT5jaGlsZHJlbiA9PSBOVUxMKSkKKwltZW51ID0gbWVudS0+bmV4dDsKKworICAgIGlmIChtZW51ID09IE5VTEwpCSAgICAvKiBhdCBlbmQgb2YgbGlua2VkIGxpc3QgKi8KKwlyZXR1cm4gTlVMTDsKKworICAgIGlmIChtZW51LT5tb2RlcyAmIGV4cGFuZF9tb2RlcykKKwlzdHIgPSBtZW51LT5kbmFtZTsKKyAgICBlbHNlCisJc3RyID0gKGNoYXJfdSAqKSIiOworCisgICAgLyogQWR2YW5jZSB0byBuZXh0IG1lbnUgZW50cnkuICovCisgICAgbWVudSA9IG1lbnUtPm5leHQ7CisKKyAgICByZXR1cm4gc3RyOworfQorCisvKgorICogRnVuY3Rpb24gZ2l2ZW4gdG8gRXhwYW5kR2VuZXJpYygpIHRvIG9idGFpbiB0aGUgbGlzdCBvZiBtZW51cyBhbmQgbWVudQorICogZW50cmllcy4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICoKK2dldF9tZW51X25hbWVzKHhwLCBpZHgpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGludAkJaWR4OworeworICAgIHN0YXRpYyB2aW1tZW51X1QJKm1lbnUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyX3UJdGJ1ZmZlclsyNTZdOyAvKmhhY2sqLworICAgIGNoYXJfdQkJKnN0cjsKKworICAgIGlmIChpZHggPT0gMCkJICAgIC8qIGZpcnN0IGNhbGw6IHN0YXJ0IGF0IGZpcnN0IGl0ZW0gKi8KKwltZW51ID0gZXhwYW5kX21lbnU7CisKKyAgICAvKiBTa2lwIEJyb3dzZS1zdHlsZSBlbnRyaWVzLCBwb3B1cCBtZW51cyBhbmQgc2VwYXJhdG9ycy4gKi8KKyAgICB3aGlsZSAobWVudSAhPSBOVUxMCisJICAgICYmICggICBtZW51X2lzX2hpZGRlbihtZW51LT5kbmFtZSkKKwkJfHwgKGV4cGFuZF9lbWVudSAmJiBtZW51X2lzX3NlcGFyYXRvcihtZW51LT5kbmFtZSkpCisJCXx8IG1lbnVfaXNfdGVhcm9mZihtZW51LT5kbmFtZSkKKyNpZm5kZWYgRkVBVF9CUk9XU0UKKwkJfHwgbWVudS0+ZG5hbWVbU1RSTEVOKG1lbnUtPmRuYW1lKSAtIDFdID09ICcuJworI2VuZGlmCisJICAgICAgICkpCisJbWVudSA9IG1lbnUtPm5leHQ7CisKKyAgICBpZiAobWVudSA9PSBOVUxMKQkgICAgLyogYXQgZW5kIG9mIGxpbmtlZCBsaXN0ICovCisJcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobWVudS0+bW9kZXMgJiBleHBhbmRfbW9kZXMpCisgICAgeworCWlmIChtZW51LT5jaGlsZHJlbiAhPSBOVUxMKQorCXsKKwkgICAgU1RSQ1BZKHRidWZmZXIsIG1lbnUtPmRuYW1lKTsKKwkgICAgLyogaGFjayBvbiBtZW51IHNlcGFyYXRvcnM6ICB1c2UgYSAnbWFnaWMnIGNoYXIgZm9yIHRoZSBzZXBhcmF0b3IKKwkgICAgICogc28gdGhhdCAnLicgaW4gbmFtZXMgZ2V0cyBlc2NhcGVkIHByb3Blcmx5ICovCisJICAgIFNUUkNBVCh0YnVmZmVyLCAiXDAwMSIpOworCSAgICBzdHIgPSB0YnVmZmVyOworCX0KKwllbHNlCisJICAgIHN0ciA9IG1lbnUtPmRuYW1lOworICAgIH0KKyAgICBlbHNlCisJc3RyID0gKGNoYXJfdSAqKSIiOworCisgICAgLyogQWR2YW5jZSB0byBuZXh0IG1lbnUgZW50cnkuICovCisgICAgbWVudSA9IG1lbnUtPm5leHQ7CisKKyAgICByZXR1cm4gc3RyOworfQorI2VuZGlmIC8qIEZFQVRfQ01ETF9DT01QTCAqLworCisvKgorICogU2tpcCBvdmVyIHRoaXMgZWxlbWVudCBvZiB0aGUgbWVudSBwYXRoIGFuZCByZXR1cm4gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0CisgKiBlbGVtZW50LiAgQW55IFwgYW5kIF5WcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjdXJyZW50IGVsZW1lbnQuCisgKi8KKyAgICBjaGFyX3UgKgorbWVudV9uYW1lX3NraXAobmFtZSkKKyAgICBjaGFyX3UgICpuYW1lOworeworICAgIGNoYXJfdSAgKnA7CisKKyAgICBmb3IgKHAgPSBuYW1lOyAqcCAmJiAqcCAhPSAnLic7IHArKykKKyAgICB7CisJaWYgKCpwID09ICdcXCcgfHwgKnAgPT0gQ3RybF9WKQorCXsKKwkgICAgbWNoX21lbW1vdmUocCwgcCArIDEsIFNUUkxFTihwKSk7CisJICAgIGlmICgqcCA9PSBOVUwpCisJCWJyZWFrOworCX0KKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsJLyogc2tpcCBtdWx0aWJ5dGUgY2hhciAqLworI2VuZGlmCisgICAgfQorICAgIGlmICgqcCkKKwkqcCsrID0gTlVMOworICAgIHJldHVybiBwOworfQorCisvKgorICogUmV0dXJuIFRSVUUgd2hlbiAibmFtZSIgbWF0Y2hlcyB3aXRoIG1lbnUgIm1lbnUiLiAgVGhlIG5hbWUgaXMgY29tcGFyZWQgaW4KKyAqIHR3byB3YXlzOiByYXcgbWVudSBuYW1lIGFuZCBtZW51IG5hbWUgd2l0aG91dCAnJicuICBpZ25vcmUgcGFydCBhZnRlciBhIFRBQi4KKyAqLworICAgIHN0YXRpYyBpbnQKK21lbnVfbmFtZV9lcXVhbChuYW1lLCBtZW51KQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICB2aW1tZW51X1QJKm1lbnU7Cit7CisgICAgcmV0dXJuIChtZW51X25hbWVjbXAobmFtZSwgbWVudS0+bmFtZSkgfHwgbWVudV9uYW1lY21wKG5hbWUsIG1lbnUtPmRuYW1lKSk7Cit9CisKKyAgICBzdGF0aWMgaW50CittZW51X25hbWVjbXAobmFtZSwgbW5hbWUpCisgICAgY2hhcl91CSpuYW1lOworICAgIGNoYXJfdQkqbW5hbWU7Cit7CisgICAgaW50CQlpOworCisgICAgZm9yIChpID0gMDsgbmFtZVtpXSAhPSBOVUwgJiYgbmFtZVtpXSAhPSBUQUI7ICsraSkKKwlpZiAobmFtZVtpXSAhPSBtbmFtZVtpXSkKKwkgICAgYnJlYWs7CisgICAgcmV0dXJuICgobmFtZVtpXSA9PSBOVUwgfHwgbmFtZVtpXSA9PSBUQUIpCisJICAgICYmIChtbmFtZVtpXSA9PSBOVUwgfHwgbW5hbWVbaV0gPT0gVEFCKSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG1vZGVzIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gbWVudSBjb21tYW5kIChlZyA6bWVudSEgcmV0dXJucworICogTUVOVV9DTURMSU5FX01PREUgfCBNRU5VX0lOU0VSVF9NT0RFKS4KKyAqIElmICJub3JlbWFwIiBpcyBub3QgTlVMTCwgdGhlbiB0aGUgZmxhZyBpdCBwb2ludHMgdG8gaXMgc2V0IGFjY29yZGluZyB0bworICogd2hldGhlciB0aGUgY29tbWFuZCBpcyBhICJub3JlIiBjb21tYW5kLgorICogSWYgInVubWVudSIgaXMgbm90IE5VTEwsIHRoZW4gdGhlIGZsYWcgaXQgcG9pbnRzIHRvIGlzIHNldCBhY2NvcmRpbmcgdG8KKyAqIHdoZXRoZXIgdGhlIGNvbW1hbmQgaXMgYW4gInVubWVudSIgY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyBpbnQKK2dldF9tZW51X2NtZF9tb2RlcyhjbWQsIGZvcmNlaXQsIG5vcmVtYXAsIHVubWVudSkKKyAgICBjaGFyX3UgICpjbWQ7CisgICAgaW50CSAgICBmb3JjZWl0OwkgICAgLyogV2FzIHRoZXJlIGEgIiEiIGFmdGVyIHRoZSBjb21tYW5kPyAqLworICAgIGludAkgICAgKm5vcmVtYXA7CisgICAgaW50CSAgICAqdW5tZW51OworeworICAgIGludAkgICAgbW9kZXM7CisKKyAgICBzd2l0Y2ggKCpjbWQrKykKKyAgICB7CisJY2FzZSAndic6CQkJLyogdm1lbnUsIHZ1bm1lbnUsIHZub3JlbWVudSAqLworCSAgICBtb2RlcyA9IE1FTlVfVklTVUFMX01PREU7CisJICAgIGJyZWFrOworCWNhc2UgJ28nOgkJCS8qIG9tZW51ICovCisJICAgIG1vZGVzID0gTUVOVV9PUF9QRU5ESU5HX01PREU7CisJICAgIGJyZWFrOworCWNhc2UgJ2knOgkJCS8qIGltZW51ICovCisJICAgIG1vZGVzID0gTUVOVV9JTlNFUlRfTU9ERTsKKwkgICAgYnJlYWs7CisJY2FzZSAndCc6CisJICAgIG1vZGVzID0gTUVOVV9USVBfTU9ERTsJLyogdG1lbnUgKi8KKwkgICAgYnJlYWs7CisJY2FzZSAnYyc6CQkJLyogY21lbnUgKi8KKwkgICAgbW9kZXMgPSBNRU5VX0NNRExJTkVfTU9ERTsKKwkgICAgYnJlYWs7CisJY2FzZSAnYSc6CQkJLyogYW1lbnUgKi8KKwkgICAgbW9kZXMgPSBNRU5VX0lOU0VSVF9NT0RFIHwgTUVOVV9DTURMSU5FX01PREUgfCBNRU5VX05PUk1BTF9NT0RFCisJCQkJICAgIHwgTUVOVV9WSVNVQUxfTU9ERSB8IE1FTlVfT1BfUEVORElOR19NT0RFOworCSAgICBicmVhazsKKwljYXNlICduJzoKKwkgICAgaWYgKCpjbWQgIT0gJ28nKQkJLyogbm1lbnUsIG5vdCBub3JlbWVudSAqLworCSAgICB7CisJCW1vZGVzID0gTUVOVV9OT1JNQUxfTU9ERTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgLyogRkFMTFRIUk9VR0ggKi8KKwlkZWZhdWx0OgorCSAgICAtLWNtZDsKKwkgICAgaWYgKGZvcmNlaXQpCQkvKiBtZW51ISEgKi8KKwkJbW9kZXMgPSBNRU5VX0lOU0VSVF9NT0RFIHwgTUVOVV9DTURMSU5FX01PREU7CisJICAgIGVsc2UJCQkvKiBtZW51ICovCisJCW1vZGVzID0gTUVOVV9OT1JNQUxfTU9ERSB8IE1FTlVfVklTVUFMX01PREUKKwkJCQkJCSAgICAgICB8IE1FTlVfT1BfUEVORElOR19NT0RFOworICAgIH0KKworICAgIGlmIChub3JlbWFwICE9IE5VTEwpCisJKm5vcmVtYXAgPSAoKmNtZCA9PSAnbicgPyBSRU1BUF9OT05FIDogUkVNQVBfWUVTKTsKKyAgICBpZiAodW5tZW51ICE9IE5VTEwpCisJKnVubWVudSA9ICgqY21kID09ICd1Jyk7CisgICAgcmV0dXJuIG1vZGVzOworfQorCisvKgorICogTW9kaWZ5IGEgbWVudSBuYW1lIHN0YXJ0aW5nIHdpdGggIlBvcFVwIiB0byBpbmNsdWRlIHRoZSBtb2RlIGNoYXJhY3Rlci4KKyAqIFJldHVybnMgdGhlIG5hbWUgaW4gYWxsb2NhdGVkIG1lbW9yeSAoTlVMTCBmb3IgZmFpbHVyZSkuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3BvcHVwX21vZGVfbmFtZShuYW1lLCBpZHgpCisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJaWR4OworeworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWxlbiA9IChpbnQpU1RSTEVOKG5hbWUpOworCisgICAgcCA9IHZpbV9zdHJuc2F2ZShuYW1lLCBsZW4gKyAxKTsKKyAgICBpZiAocCAhPSBOVUxMKQorICAgIHsKKwltY2hfbWVtbW92ZShwICsgNiwgcCArIDUsIChzaXplX3QpKGxlbiAtIDQpKTsKKwlwWzVdID0gbWVudV9tb2RlX2NoYXJzW2lkeF07CisgICAgfQorICAgIHJldHVybiBwOworfQorCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXR1cm4gdGhlIGluZGV4IGludG8gdGhlIG1lbnUtPnN0cmluZ3Mgb3IgbWVudS0+bm9yZW1hcCBhcnJheXMgZm9yIHRoZQorICogY3VycmVudCBzdGF0ZS4gIFJldHVybnMgTUVOVV9JTkRFWF9JTlZBTElEIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcgZm9yIHRoZQorICogZ2l2ZW4gbWVudSBpbiB0aGUgY3VycmVudCBtb2RlLgorICovCisgICAgaW50CitnZXRfbWVudV9pbmRleChtZW51LCBzdGF0ZSkKKyAgICB2aW1tZW51X1QJKm1lbnU7CisgICAgaW50CQlzdGF0ZTsKK3sKKyAgICBpbnQJCWlkeDsKKworICAgIGlmICgoc3RhdGUgJiBJTlNFUlQpKQorCWlkeCA9IE1FTlVfSU5ERVhfSU5TRVJUOworICAgIGVsc2UgaWYgKHN0YXRlICYgQ01ETElORSkKKwlpZHggPSBNRU5VX0lOREVYX0NNRExJTkU7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBlbHNlIGlmIChWSXN1YWxfYWN0aXZlKQorCWlkeCA9IE1FTlVfSU5ERVhfVklTVUFMOworI2VuZGlmCisgICAgZWxzZSBpZiAoc3RhdGUgPT0gSElUUkVUVVJOIHx8IHN0YXRlID09IEFTS01PUkUpCisJaWR4ID0gTUVOVV9JTkRFWF9DTURMSU5FOworICAgIGVsc2UgaWYgKGZpbmlzaF9vcCkKKwlpZHggPSBNRU5VX0lOREVYX09QX1BFTkRJTkc7CisgICAgZWxzZSBpZiAoKHN0YXRlICYgTk9STUFMKSkKKwlpZHggPSBNRU5VX0lOREVYX05PUk1BTDsKKyAgICBlbHNlCisJaWR4ID0gTUVOVV9JTkRFWF9JTlZBTElEOworCisgICAgaWYgKGlkeCAhPSBNRU5VX0lOREVYX0lOVkFMSUQgJiYgbWVudS0+c3RyaW5nc1tpZHhdID09IE5VTEwpCisJaWR4ID0gTUVOVV9JTkRFWF9JTlZBTElEOworICAgIHJldHVybiBpZHg7Cit9CisjZW5kaWYKKworLyoKKyAqIER1cGxpY2F0ZSB0aGUgbWVudSBpdGVtIHRleHQgYW5kIHRoZW4gcHJvY2VzcyB0byBzZWUgaWYgYSBtbmVtb25pYyBrZXkKKyAqIGFuZC9vciBhY2NlbGVyYXRvciB0ZXh0IGhhcyBiZWVuIGlkZW50aWZpZWQuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5LCBvciBOVUxMIGZvciBmYWlsdXJlLgorICogSWYgbW5lbW9uaWMgIT0gTlVMTCwgKm1uZW1vbmljIGlzIHNldCB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBmaXJzdCAnJicuCisgKiBJZiBhY3RleHQgIT0gTlVMTCwgKmFjdGV4dCBpcyBzZXQgdG8gdGhlIHRleHQgYWZ0ZXIgdGhlIGZpcnN0IFRBQi4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorbWVudV90ZXh0KHN0ciwgbW5lbW9uaWMsIGFjdGV4dCkKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBpbnQJCSptbmVtb25pYzsKKyAgICBjaGFyX3UJKiphY3RleHQ7Cit7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqdGV4dDsKKworICAgIC8qIExvY2F0ZSBhY2NlbGVyYXRvciB0ZXh0LCBhZnRlciB0aGUgZmlyc3QgVEFCICovCisgICAgcCA9IHZpbV9zdHJjaHIoc3RyLCBUQUIpOworICAgIGlmIChwICE9IE5VTEwpCisgICAgeworCWlmIChhY3RleHQgIT0gTlVMTCkKKwkgICAgKmFjdGV4dCA9IHZpbV9zdHJzYXZlKHAgKyAxKTsKKwl0ZXh0ID0gdmltX3N0cm5zYXZlKHN0ciwgKGludCkocCAtIHN0cikpOworICAgIH0KKyAgICBlbHNlCisJdGV4dCA9IHZpbV9zdHJzYXZlKHN0cik7CisKKyAgICAvKiBGaW5kIG1uZW1vbmljIGNoYXJhY3RlcnMgIiZhIiBhbmQgcmVkdWNlICImJiIgdG8gIiYiLiAqLworICAgIGZvciAocCA9IHRleHQ7IHAgIT0gTlVMTDsgKQorICAgIHsKKwlwID0gdmltX3N0cmNocihwLCAnJicpOworCWlmIChwICE9IE5VTEwpCisJeworCSAgICBpZiAocFsxXSA9PSBOVUwpCSAgICAvKiB0cmFpbGluZyAiJiIgKi8KKwkJYnJlYWs7CisJICAgIGlmIChtbmVtb25pYyAhPSBOVUxMICYmIHBbMV0gIT0gJyYnKQorI2lmICFkZWZpbmVkKF9fTVZTX18pIHx8IGRlZmluZWQoTU9USUYzOTBfTU5FTU9OSUNfRklYRUQpCisJCSptbmVtb25pYyA9IHBbMV07CisjZWxzZQorCSAgICB7CisJCS8qCisJCSAqIFdlbGwgdGhlcmUgaXMgYSBidWcgaW4gdGhlIE1vdGlmIGxpYnJhcmllcyBvbiBPUzM5MCBVbml4LgorCQkgKiBUaGUgbW5lbW9uaWMga2V5cyBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gQVNDSUkgdmFsdWVzCisJCSAqIGZpcnN0LgorCQkgKiBUaGlzIGJlaGF2aW9yIGhhcyBiZWVuIHNlZW4gaW4gMi44IGFuZCAyLjkuCisJCSAqLworCQljaGFyIGMgPSBwWzFdOworCQlfX2V0b2FfbCgmYywgMSk7CisJCSptbmVtb25pYyA9IGM7CisJICAgIH0KKyNlbmRpZgorCSAgICBtY2hfbWVtbW92ZShwLCBwICsgMSwgU1RSTEVOKHApKTsKKwkgICAgcCA9IHAgKyAxOworCX0KKyAgICB9CisgICAgcmV0dXJuIHRleHQ7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAibmFtZSIgY2FuIGJlIGEgbWVudSBpbiB0aGUgTWVudUJhci4KKyAqLworICAgIGludAorbWVudV9pc19tZW51YmFyKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIHJldHVybiAoIW1lbnVfaXNfcG9wdXAobmFtZSkKKwkgICAgJiYgIW1lbnVfaXNfdG9vbGJhcihuYW1lKQorCSAgICAmJiAqbmFtZSAhPSBNTlVfSElEREVOX0NIQVIpOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgIm5hbWUiIGlzIGEgcG9wdXAgbWVudSBuYW1lLgorICovCisgICAgaW50CittZW51X2lzX3BvcHVwKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIHJldHVybiAoU1RSTkNNUChuYW1lLCAiUG9wVXAiLCA1KSA9PSAwKTsKK30KKworI2lmIChkZWZpbmVkKEZFQVRfR1VJX01PVElGKSAmJiAoWG1WZXJzaW9uIDw9IDEwMDIpKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiBUUlVFIGlmICJuYW1lIiBpcyBwYXJ0IG9mIGEgcG9wdXAgbWVudS4KKyAqLworICAgIGludAorbWVudV9pc19jaGlsZF9vZl9wb3B1cChtZW51KQorICAgIHZpbW1lbnVfVCAqbWVudTsKK3sKKyAgICB3aGlsZSAobWVudS0+cGFyZW50ICE9IE5VTEwpCisJbWVudSA9IG1lbnUtPnBhcmVudDsKKyAgICByZXR1cm4gbWVudV9pc19wb3B1cChtZW51LT5uYW1lKTsKK30KKyNlbmRpZgorCisvKgorICogUmV0dXJuIFRSVUUgaWYgIm5hbWUiIGlzIGEgdG9vbGJhciBtZW51IG5hbWUuCisgKi8KKyAgICBpbnQKK21lbnVfaXNfdG9vbGJhcihuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICByZXR1cm4gKFNUUk5DTVAobmFtZSwgIlRvb2xCYXIiLCA3KSA9PSAwKTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBuYW1lIGlzIGEgbWVudSBzZXBhcmF0b3IgaWRlbnRpZmllcjogU3RhcnRzIGFuZCBlbmRzCisgKiB3aXRoICctJworICovCisgICAgaW50CittZW51X2lzX3NlcGFyYXRvcihuYW1lKQorICAgIGNoYXJfdSAqbmFtZTsKK3sKKyAgICByZXR1cm4gKG5hbWVbMF0gPT0gJy0nICYmIG5hbWVbU1RSTEVOKG5hbWUpIC0gMV0gPT0gJy0nKTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBtZW51IGlzIGhpZGRlbjogIFN0YXJ0cyB3aXRoICddJworICovCisgICAgc3RhdGljIGludAorbWVudV9pc19oaWRkZW4obmFtZSkKKyAgICBjaGFyX3UgKm5hbWU7Cit7CisgICAgcmV0dXJuIChuYW1lWzBdID09ICddJykgfHwgKG1lbnVfaXNfcG9wdXAobmFtZSkgJiYgbmFtZVs1XSAhPSBOVUwpOworfQorCisjaWYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpIFwKKwl8fCAoZGVmaW5lZChGRUFUX0dVSV9XMzIpICYmIGRlZmluZWQoRkVBVF9URUFST0ZGKSkKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgbWVudSBpcyB0aGUgdGVhcm9mZiBtZW51LgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgaW50CittZW51X2lzX3RlYXJvZmYobmFtZSkKKyAgICBjaGFyX3UgKm5hbWU7Cit7CisjaWZkZWYgRkVBVF9HVUkKKyAgICByZXR1cm4gKFNUUkNNUChuYW1lLCBURUFSX1NUUklORykgPT0gMCk7CisjZWxzZQorICAgIHJldHVybiBGQUxTRTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSQorCisgICAgc3RhdGljIGludAorZ2V0X21lbnVfbW9kZSgpCit7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKwlyZXR1cm4gTUVOVV9JTkRFWF9WSVNVQUw7CisjZW5kaWYKKyAgICBpZiAoU3RhdGUgJiBJTlNFUlQpCisJcmV0dXJuIE1FTlVfSU5ERVhfSU5TRVJUOworICAgIGlmICgoU3RhdGUgJiBDTURMSU5FKSB8fCBTdGF0ZSA9PSBBU0tNT1JFIHx8IFN0YXRlID09IEhJVFJFVFVSTikKKwlyZXR1cm4gTUVOVV9JTkRFWF9DTURMSU5FOworICAgIGlmIChmaW5pc2hfb3ApCisJcmV0dXJuIE1FTlVfSU5ERVhfT1BfUEVORElORzsKKyAgICBpZiAoU3RhdGUgJiBOT1JNQUwpCisJcmV0dXJuIE1FTlVfSU5ERVhfTk9STUFMOworICAgIGlmIChTdGF0ZSAmIExBTkdNQVApCS8qIG11c3QgYmUgYSAiciIgY29tbWFuZCwgbGlrZSBJbnNlcnQgbW9kZSAqLworCXJldHVybiBNRU5VX0lOREVYX0lOU0VSVDsKKyAgICByZXR1cm4gTUVOVV9JTkRFWF9JTlZBTElEOworfQorCisvKgorICogQWZ0ZXIgd2UgaGF2ZSBzdGFydGVkIHRoZSBHVUksIHRoZW4gd2UgY2FuIGNyZWF0ZSBhbnkgbWVudXMgdGhhdCBoYXZlIGJlZW4KKyAqIGRlZmluZWQuICBUaGlzIGlzIGRvbmUgb25jZSBoZXJlLiAgYWRkX21lbnVfcGF0aCgpIG1heSBoYXZlIGFscmVhZHkgYmVlbgorICogY2FsbGVkIHRvIGRlZmluZSB0aGVzZSBtZW51cywgYW5kIG1heSBiZSBjYWxsZWQgYWdhaW4uICBUaGlzIGZ1bmN0aW9uIGNhbGxzCisgKiBpdHNlbGYgcmVjdXJzaXZlbHkuCVNob3VsZCBiZSBjYWxsZWQgYXQgdGhlIHRvcCBsZXZlbCB3aXRoOgorICogZ3VpX2NyZWF0ZV9pbml0aWFsX21lbnVzKHJvb3RfbWVudSwgTlVMTCk7CisgKi8KKyAgICB2b2lkCitndWlfY3JlYXRlX2luaXRpYWxfbWVudXMobWVudSkKKyAgICB2aW1tZW51X1QJKm1lbnU7Cit7CisgICAgaW50CQlpZHggPSAwOworCisgICAgd2hpbGUgKG1lbnUgIT0gTlVMTCkKKyAgICB7CisJLyogRG9uJ3QgYWRkIGEgbWVudSB3aGVuIG9ubHkgYSB0aXAgd2FzIGRlZmluZWQuICovCisJaWYgKG1lbnUtPm1vZGVzICYgTUVOVV9BTExfTU9ERVMpCisJeworCSAgICBpZiAobWVudS0+Y2hpbGRyZW4gIT0gTlVMTCkKKwkgICAgeworCQlndWlfbWNoX2FkZF9tZW51KG1lbnUsIGlkeCk7CisJCWd1aV9jcmVhdGVfaW5pdGlhbF9tZW51cyhtZW51LT5jaGlsZHJlbik7CisJICAgIH0KKwkgICAgZWxzZQorCQlndWlfbWNoX2FkZF9tZW51X2l0ZW0obWVudSwgaWR4KTsKKwl9CisJbWVudSA9IG1lbnUtPm5leHQ7CisJKytpZHg7CisgICAgfQorfQorCisvKgorICogVXNlZCByZWN1cnNpdmVseSBieSBndWlfdXBkYXRlX21lbnVzIChzZWUgYmVsb3cpCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ3VpX3VwZGF0ZV9tZW51c19yZWN1cnNlKG1lbnUsIG1vZGUpCisgICAgdmltbWVudV9UCSptZW51OworICAgIGludAkJbW9kZTsKK3sKKyAgICBpbnQJCWdyZXk7CisKKyAgICB3aGlsZSAobWVudSkKKyAgICB7CisJaWYgKChtZW51LT5tb2RlcyAmIG1lbnUtPmVuYWJsZWQgJiBtb2RlKQorI2lmIGRlZmluZWQoRkVBVF9HVUlfVzMyKSAmJiBkZWZpbmVkKEZFQVRfVEVBUk9GRikKKwkJfHwgbWVudV9pc190ZWFyb2ZmKG1lbnUtPmRuYW1lKQorI2VuZGlmCisJICAgKQorCSAgICBncmV5ID0gRkFMU0U7CisJZWxzZQorCSAgICBncmV5ID0gVFJVRTsKKyNpZmRlZiBGRUFUX0dVSV9BVEhFTkEKKwkvKiBIaWRpbmcgbWVudXMgZG9lc24ndCB3b3JrIGZvciBBdGhlbmEsIGl0IGNhbiBjYXVzZSBhIGNyYXNoLiAqLworCWd1aV9tY2hfbWVudV9ncmV5KG1lbnUsIGdyZXkpOworI2Vsc2UKKwkvKiBOZXZlciBoaWRlIGEgdG9wbGV2ZWwgbWVudSwgaXQgbWF5IG1ha2UgdGhlIG1lbnViYXIgcmVzaXplIG9yCisJICogZGlzYXBwZWFyLiBTYW1lIHByb2JsZW0gZm9yIFRvb2xCYXIgaXRlbXMuICovCisJaWYgKHZpbV9zdHJjaHIocF9nbywgR09fR1JFWSkgIT0gTlVMTCB8fCBtZW51LT5wYXJlbnQgPT0gTlVMTAorIyBpZmRlZiBGRUFUX1RPT0xCQVIKKwkJfHwgbWVudV9pc190b29sYmFyKG1lbnUtPnBhcmVudC0+bmFtZSkKKyMgZW5kaWYKKwkJICAgKQorCSAgICBndWlfbWNoX21lbnVfZ3JleShtZW51LCBncmV5KTsKKwllbHNlCisJICAgIGd1aV9tY2hfbWVudV9oaWRkZW4obWVudSwgZ3JleSk7CisjZW5kaWYKKwlndWlfdXBkYXRlX21lbnVzX3JlY3Vyc2UobWVudS0+Y2hpbGRyZW4sIG1vZGUpOworCW1lbnUgPSBtZW51LT5uZXh0OworICAgIH0KK30KKworLyoKKyAqIE1ha2Ugc3VyZSBvbmx5IHRoZSB2YWxpZCBtZW51IGl0ZW1zIGFwcGVhciBmb3IgdGhpcyBtb2RlLiAgSWYKKyAqIGZvcmNlX21lbnVfdXBkYXRlIGlzIG5vdCBUUlVFLCB0aGVuIHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgbW9kZSBoYXMgY2hhbmdlZAorICogc2luY2UgbGFzdCB0aW1lLiAgSWYgIm1vZGVzIiBpcyBub3QgMCwgdGhlbiB3ZSB1c2UgdGhlc2UgbW9kZXMgaW5zdGVhZC4KKyAqLworICAgIHZvaWQKK2d1aV91cGRhdGVfbWVudXMobW9kZXMpCisgICAgaW50CSAgICBtb2RlczsKK3sKKyAgICBzdGF0aWMgaW50CSAgICBwcmV2X21vZGUgPSAtMTsKKyAgICBpbnQJCSAgICBtb2RlID0gMDsKKworICAgIGlmIChtb2RlcyAhPSAweDApCisJbW9kZSA9IG1vZGVzOworICAgIGVsc2UKKyAgICB7CisJbW9kZSA9IGdldF9tZW51X21vZGUoKTsKKwlpZiAobW9kZSA9PSBNRU5VX0lOREVYX0lOVkFMSUQpCisJICAgIG1vZGUgPSAwOworCWVsc2UKKwkgICAgbW9kZSA9ICgxIDw8IG1vZGUpOworICAgIH0KKworICAgIGlmIChmb3JjZV9tZW51X3VwZGF0ZSB8fCBtb2RlICE9IHByZXZfbW9kZSkKKyAgICB7CisJZ3VpX3VwZGF0ZV9tZW51c19yZWN1cnNlKHJvb3RfbWVudSwgbW9kZSk7CisJZ3VpX21jaF9kcmF3X21lbnViYXIoKTsKKwlwcmV2X21vZGUgPSBtb2RlOworCWZvcmNlX21lbnVfdXBkYXRlID0gRkFMU0U7CisjaWZkZWYgRkVBVF9HVUlfVzMyCisJLyogVGhpcyBjYW4gbGVhdmUgYSB0ZWFyb2ZmIGFzIGFjdGl2ZSB3aW5kb3cgLSBtYWtlIHN1cmUgd2UKKwkgKiBoYXZlIHRoZSBmb2N1cyA8bmVncmk+Ki8KKwlndWlfbWNoX2FjdGl2YXRlX3dpbmRvdygpOworI2VuZGlmCisgICAgfQorfQorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9NU1dJTikgfHwgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgfHwgZGVmaW5lZChGRUFUX0dVSV9HVEspIFwKKyAgICB8fCBkZWZpbmVkKEZFQVRfR1VJX1BIT1RPTikgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDaGVjayBpZiBhIGtleSBpcyB1c2VkIGFzIGEgbW5lbW9uaWMgZm9yIGEgdG9wbGV2ZWwgbWVudS4KKyAqIENhc2Ugb2YgdGhlIGtleSBpcyBpZ25vcmVkLgorICovCisgICAgaW50CitndWlfaXNfbWVudV9zaG9ydGN1dChrZXkpCisgICAgaW50CQlrZXk7Cit7CisgICAgdmltbWVudV9UCSptZW51OworCisgICAgaWYgKGtleSA8IDI1NikKKwlrZXkgPSBUT0xPV0VSX0xPQyhrZXkpOworICAgIGZvciAobWVudSA9IHJvb3RfbWVudTsgbWVudSAhPSBOVUxMOyBtZW51ID0gbWVudS0+bmV4dCkKKwlpZiAobWVudS0+bW5lbW9uaWMgPT0ga2V5CisJCXx8IChtZW51LT5tbmVtb25pYyA8IDI1NiAmJiBUT0xPV0VSX0xPQyhtZW51LT5tbmVtb25pYykgPT0ga2V5KSkKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIEZBTFNFOworfQorI2VuZGlmCisKKy8qCisgKiBEaXNwbGF5IHRoZSBTcGVjaWFsICJQb3BVcCIgbWVudSBhcyBhIHBvcC11cCBhdCB0aGUgY3VycmVudCBtb3VzZQorICogcG9zaXRpb24uICBUaGUgIlBvcFVwbiIgbWVudSBpcyBmb3IgTm9ybWFsIG1vZGUsICJQb3BVcGkiIGZvciBJbnNlcnQgbW9kZSwKKyAqIGV0Yy4KKyAqLworICAgIHZvaWQKK2d1aV9zaG93X3BvcHVwbWVudSgpCit7CisgICAgdmltbWVudV9UCSptZW51OworICAgIGludAkJbW9kZTsKKworICAgIG1vZGUgPSBnZXRfbWVudV9tb2RlKCk7CisgICAgaWYgKG1vZGUgPT0gTUVOVV9JTkRFWF9JTlZBTElEKQorCXJldHVybjsKKyAgICBtb2RlID0gbWVudV9tb2RlX2NoYXJzW21vZGVdOworCisgICAgZm9yIChtZW51ID0gcm9vdF9tZW51OyBtZW51ICE9IE5VTEw7IG1lbnUgPSBtZW51LT5uZXh0KQorCWlmIChTVFJOQ01QKCJQb3BVcCIsIG1lbnUtPm5hbWUsIDUpID09IDAgJiYgbWVudS0+bmFtZVs1XSA9PSBtb2RlKQorCSAgICBicmVhazsKKworICAgIC8qIE9ubHkgc2hvdyBhIHBvcHVwIHdoZW4gaXQgaXMgZGVmaW5lZCBhbmQgaGFzIGVudHJpZXMgKi8KKyAgICBpZiAobWVudSAhPSBOVUxMICYmIG1lbnUtPmNoaWxkcmVuICE9IE5VTEwpCisJZ3VpX21jaF9zaG93X3BvcHVwbWVudShtZW51KTsKK30KKyNlbmRpZiAvKiBGRUFUX0dVSSAqLworCisjaWYgKGRlZmluZWQoRkVBVF9HVUlfVzMyKSAmJiBkZWZpbmVkKEZFQVRfVEVBUk9GRikpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qCisgKiBEZWFsIHdpdGggdGVhcm9mZiBpdGVtcyB0aGF0IGFyZSBhZGRlZCBsaWtlIGEgbWVudSBpdGVtLgorICogQ3VycmVudGx5IG9ubHkgZm9yIFdpbjMyIEdVSS4gIE90aGVycyBtYXkgZm9sbG93IGxhdGVyLgorICovCisKKyAgICB2b2lkCitndWlfbWNoX3RvZ2dsZV90ZWFyb2ZmcyhpbnQgZW5hYmxlKQoreworICAgIGludAkJcHJpX3RhYltNRU5VREVQVEggKyAxXTsKKyAgICBpbnQJCWk7CisKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUVOVURFUFRIOyArK2kpCisJICAgIHByaV90YWJbaV0gPSA1MDA7CisJcHJpX3RhYltNRU5VREVQVEhdID0gLTE7CisJZ3VpX2NyZWF0ZV90ZWFyb2Zmc19yZWN1cnNlKHJvb3RfbWVudSwgKGNoYXJfdSAqKSIiLCBwcmlfdGFiLCAwKTsKKyAgICB9CisgICAgZWxzZQorCWd1aV9kZXN0cm95X3RlYXJvZmZzX3JlY3Vyc2Uocm9vdF9tZW51KTsKKyAgICBzX3RlYXJvZmZzID0gZW5hYmxlOworfQorCisvKgorICogUmVjdXJzaXZlbHkgYWRkIHRlYXJvZmYgaXRlbXMKKyAqLworICAgIHN0YXRpYyB2b2lkCitndWlfY3JlYXRlX3RlYXJvZmZzX3JlY3Vyc2UobWVudSwgcG5hbWUsIHByaV90YWIsIHByaV9pZHgpCisgICAgdmltbWVudV9UCQkqbWVudTsKKyAgICBjb25zdCBjaGFyX3UJKnBuYW1lOworICAgIGludAkJCSpwcmlfdGFiOworICAgIGludAkJCXByaV9pZHg7Cit7CisgICAgY2hhcl91CSpuZXdwbmFtZSA9IE5VTEw7CisgICAgaW50CQlsZW47CisgICAgY2hhcl91CSpzOworICAgIGNoYXJfdQkqZDsKKworICAgIGlmIChwcmlfdGFiW3ByaV9pZHggKyAxXSAhPSAtMSkKKwkrK3ByaV9pZHg7CisgICAgd2hpbGUgKG1lbnUgIT0gTlVMTCkKKyAgICB7CisJaWYgKG1lbnUtPmNoaWxkcmVuICE9IE5VTEwgJiYgbWVudV9pc19tZW51YmFyKG1lbnUtPm5hbWUpKQorCXsKKwkgICAgLyogQWRkIHRoZSBtZW51IG5hbWUgdG8gdGhlIG1lbnUgcGF0aC4gIEluc2VydCBhIGJhY2tzbGFzaCBiZWZvcmUKKwkgICAgICogZG90cyAoaXQncyB1c2VkIHRvIHNlcGFyYXRlIG1lbnUgbmFtZXMpLiAqLworCSAgICBsZW4gPSAoaW50KVNUUkxFTihwbmFtZSkgKyAoaW50KVNUUkxFTihtZW51LT5uYW1lKTsKKwkgICAgZm9yIChzID0gbWVudS0+bmFtZTsgKnM7ICsrcykKKwkJaWYgKCpzID09ICcuJyB8fCAqcyA9PSAnXFwnKQorCQkgICAgKytsZW47CisJICAgIG5ld3BuYW1lID0gYWxsb2MobGVuICsgVEVBUl9MRU4gKyAyKTsKKwkgICAgaWYgKG5ld3BuYW1lICE9IE5VTEwpCisJICAgIHsKKwkJU1RSQ1BZKG5ld3BuYW1lLCBwbmFtZSk7CisJCWQgPSBuZXdwbmFtZSArIFNUUkxFTihuZXdwbmFtZSk7CisJCWZvciAocyA9IG1lbnUtPm5hbWU7ICpzOyArK3MpCisJCXsKKwkJICAgIGlmICgqcyA9PSAnLicgfHwgKnMgPT0gJ1xcJykKKwkJCSpkKysgPSAnXFwnOworCQkgICAgKmQrKyA9ICpzOworCQl9CisJCSpkID0gTlVMOworCisJCS8qIGNoZWNrIGlmIHRlYXJvZmYgYWxyZWFkeSBleGlzdHMgKi8KKwkJaWYgKFNUUkNNUChtZW51LT5jaGlsZHJlbi0+bmFtZSwgVEVBUl9TVFJJTkcpICE9IDApCisJCXsKKwkJICAgIGd1aV9hZGRfdGVhcm9mZihuZXdwbmFtZSwgcHJpX3RhYiwgcHJpX2lkeCAtIDEpOworCQkgICAgKmQgPSBOVUw7CQkJLyogcmVtb3ZlIFRFQVJfU1RSSU5HICovCisJCX0KKworCQlTVFJDQVQobmV3cG5hbWUsICIuIik7CisJCWd1aV9jcmVhdGVfdGVhcm9mZnNfcmVjdXJzZShtZW51LT5jaGlsZHJlbiwgbmV3cG5hbWUsCisJCQkJCQkJICAgIHByaV90YWIsIHByaV9pZHgpOworCQl2aW1fZnJlZShuZXdwbmFtZSk7CisJICAgIH0KKwl9CisJbWVudSA9IG1lbnUtPm5leHQ7CisgICAgfQorfQorCisvKgorICogQWRkIHRlYXItb2ZmIG1lbnUgaXRlbSBmb3IgYSBzdWJtZW51LgorICogInRlYXJwYXRoIiBpcyB0aGUgbWVudSBwYXRoLCBhbmQgbXVzdCBoYXZlIHJvb20gdG8gYWRkIFRFQVJfU1RSSU5HLgorICovCisgICAgc3RhdGljIHZvaWQKK2d1aV9hZGRfdGVhcm9mZih0ZWFycGF0aCwgcHJpX3RhYiwgcHJpX2lkeCkKKyAgICBjaGFyX3UJKnRlYXJwYXRoOworICAgIGludAkJKnByaV90YWI7CisgICAgaW50CQlwcmlfaWR4OworeworICAgIGNoYXJfdQkqdGJ1ZjsKKyAgICBpbnQJCXQ7CisgICAgdmltbWVudV9UCW1lbnVhcmc7CisKKyAgICB0YnVmID0gYWxsb2MoNSArICh1bnNpZ25lZCBpbnQpU1RSTEVOKHRlYXJwYXRoKSk7CisgICAgaWYgKHRidWYgIT0gTlVMTCkKKyAgICB7CisJdGJ1ZlswXSA9IEtfU1BFQ0lBTDsKKwl0YnVmWzFdID0gS19TRUNPTkQoS19URUFST0ZGKTsKKwl0YnVmWzJdID0gS19USElSRChLX1RFQVJPRkYpOworCVNUUkNQWSh0YnVmICsgMywgdGVhcnBhdGgpOworCVNUUkNBVCh0YnVmICsgMywgIlxyIik7CisKKwlTVFJDQVQodGVhcnBhdGgsICIuIik7CisJU1RSQ0FUKHRlYXJwYXRoLCBURUFSX1NUUklORyk7CisKKwkvKiBQcmlvcml0eSBvZiB0ZWFyLW9mZiBpcyBhbHdheXMgMSAqLworCXQgPSBwcmlfdGFiW3ByaV9pZHggKyAxXTsKKwlwcmlfdGFiW3ByaV9pZHggKyAxXSA9IDE7CisKKyNpZmRlZiBGRUFUX1RPT0xCQVIKKwltZW51YXJnLmljb25maWxlID0gTlVMTDsKKwltZW51YXJnLmljb25pZHggPSAtMTsKKwltZW51YXJnLmljb25fYnVpbHRpbiA9IEZBTFNFOworI2VuZGlmCisJbWVudWFyZy5ub3JlbWFwWzBdID0gUkVNQVBfTk9ORTsKKwltZW51YXJnLnNpbGVudFswXSA9IFRSVUU7CisKKwltZW51YXJnLm1vZGVzID0gTUVOVV9BTExfTU9ERVM7CisJYWRkX21lbnVfcGF0aCh0ZWFycGF0aCwgJm1lbnVhcmcsIHByaV90YWIsIHRidWYsIEZBTFNFKTsKKworCW1lbnVhcmcubW9kZXMgPSBNRU5VX1RJUF9NT0RFOworCWFkZF9tZW51X3BhdGgodGVhcnBhdGgsICZtZW51YXJnLCBwcmlfdGFiLAorCQkoY2hhcl91ICopXygiVGVhciBvZmYgdGhpcyBtZW51IiksIEZBTFNFKTsKKworCXByaV90YWJbcHJpX2lkeCArIDFdID0gdDsKKwl2aW1fZnJlZSh0YnVmKTsKKyAgICB9Cit9CisKKy8qCisgKiBSZWN1cnNpdmVseSBkZXN0cm95IHRlYXJvZmYgaXRlbXMKKyAqLworICAgIHN0YXRpYyB2b2lkCitndWlfZGVzdHJveV90ZWFyb2Zmc19yZWN1cnNlKG1lbnUpCisgICAgdmltbWVudV9UCSptZW51OworeworICAgIHdoaWxlIChtZW51KQorICAgIHsKKwlpZiAobWVudS0+Y2hpbGRyZW4pCisJeworCSAgICAvKiBjaGVjayBpZiB0ZWFyb2ZmIGV4aXN0cyAqLworCSAgICBpZiAoU1RSQ01QKG1lbnUtPmNoaWxkcmVuLT5uYW1lLCBURUFSX1NUUklORykgPT0gMCkKKwkgICAgeworCQkvKiBEaXNjb25uZWN0IHRoZSBpdGVtIGFuZCBmcmVlIHRoZSBtZW1vcnkgKi8KKwkJZnJlZV9tZW51KCZtZW51LT5jaGlsZHJlbik7CisJICAgIH0KKwkgICAgaWYgKG1lbnUtPmNoaWxkcmVuICE9IE5VTEwpIC8qIGlmIG5vdCB0aGUgbGFzdCBvbmUgKi8KKwkJZ3VpX2Rlc3Ryb3lfdGVhcm9mZnNfcmVjdXJzZShtZW51LT5jaGlsZHJlbik7CisJfQorCW1lbnUgPSBtZW51LT5uZXh0OworICAgIH0KK30KKworI2VuZGlmIC8qIEZFQVRfR1VJX1czMiAmJiBGRUFUX1RFQVJPRkYgKi8KKworLyoKKyAqIEdpdmVuIGEgbWVudSBkZXNjcmlwdG9yLCBlLmcuICJGaWxlLk5ldyIsIGZpbmQgaXQgaW4gdGhlIG1lbnUgaGllcmFyY2h5IGFuZAorICogZXhlY3V0ZSBpdC4KKyAqLworICAgIHZvaWQKK2V4X2VtZW51KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgdmltbWVudV9UCSptZW51OworICAgIGNoYXJfdQkqbmFtZTsKKyAgICBjaGFyX3UJKnNhdmVkX25hbWU7CisgICAgY2hhcl91CSpwOworICAgIGludAkJaWR4OworICAgIGNoYXJfdQkqbW9kZTsKKworICAgIHNhdmVkX25hbWUgPSB2aW1fc3Ryc2F2ZShlYXAtPmFyZyk7CisgICAgaWYgKHNhdmVkX25hbWUgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBtZW51ID0gcm9vdF9tZW51OworICAgIG5hbWUgPSBzYXZlZF9uYW1lOworICAgIHdoaWxlICgqbmFtZSkKKyAgICB7CisJLyogRmluZCBpbiB0aGUgbWVudSBoaWVyYXJjaHkgKi8KKwlwID0gbWVudV9uYW1lX3NraXAobmFtZSk7CisKKwl3aGlsZSAobWVudSAhPSBOVUxMKQorCXsKKwkgICAgaWYgKG1lbnVfbmFtZV9lcXVhbChuYW1lLCBtZW51KSkKKwkgICAgeworCQlpZiAoKnAgPT0gTlVMICYmIG1lbnUtPmNoaWxkcmVuICE9IE5VTEwpCisJCXsKKwkJICAgIEVNU0coXygiRTMzMzogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIG1lbnUgaXRlbSIpKTsKKwkJICAgIG1lbnUgPSBOVUxMOworCQl9CisJCWVsc2UgaWYgKCpwICE9IE5VTCAmJiBtZW51LT5jaGlsZHJlbiA9PSBOVUxMKQorCQl7CisJCSAgICBFTVNHKF8oZV9ub3RzdWJtZW51KSk7CisJCSAgICBtZW51ID0gTlVMTDsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCSAgICBtZW51ID0gbWVudS0+bmV4dDsKKwl9CisJaWYgKG1lbnUgPT0gTlVMTCB8fCAqcCA9PSBOVUwpCisJICAgIGJyZWFrOworCW1lbnUgPSBtZW51LT5jaGlsZHJlbjsKKwluYW1lID0gcDsKKyAgICB9CisgICAgdmltX2ZyZWUoc2F2ZWRfbmFtZSk7CisgICAgaWYgKG1lbnUgPT0gTlVMTCkKKyAgICB7CisJRU1TRzIoXygiRTMzNDogTWVudSBub3QgZm91bmQ6ICVzIiksIGVhcC0+YXJnKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogRm91bmQgdGhlIG1lbnUsIHNvIGV4ZWN1dGUuICovCisgICAgaWYgKHJlc3RhcnRfZWRpdCkKKyAgICB7CisJbW9kZSA9IChjaGFyX3UgKikiSW5zZXJ0IjsKKwlpZHggPSBNRU5VX0lOREVYX0lOU0VSVDsKKyAgICB9CisgICAgZWxzZSBpZiAoZWFwLT5hZGRyX2NvdW50KQorICAgIHsKKwlwb3NfVAl0cG9zOworCisJbW9kZSA9IChjaGFyX3UgKikiVmlzdWFsIjsKKwlpZHggPSBNRU5VX0lOREVYX1ZJU1VBTDsKKworCS8qIEdFRERFUzogVGhpcyBpcyBub3QgcGVyZmVjdCAtIGJ1dCBpdCBpcyBhCisJICogcXVpY2sgd2F5IG9mIGRldGVjdGluZyB3aGV0aGVyIHdlIGFyZSBkb2luZyB0aGlzIGZyb20gYQorCSAqIHNlbGVjdGlvbiAtIHNlZSBpZiB0aGUgcmFuZ2UgbWF0Y2hlcyB1cCB3aXRoIHRoZSB2aXN1YWwKKwkgKiBzZWxlY3Qgc3RhcnQgYW5kIGVuZC4KKwkgKi8KKwlpZiAoKGN1cmJ1Zi0+Yl92aXN1YWxfc3RhcnQubG51bSA9PSBlYXAtPmxpbmUxKQorCQkmJiAoY3VyYnVmLT5iX3Zpc3VhbF9lbmQubG51bSkgPT0gZWFwLT5saW5lMikKKwl7CisJICAgIC8qIFNldCBpdCB1cCBmb3IgdmlzdWFsIG1vZGUgLSBlcXVpdmFsZW50IHRvIGd2LiAgKi8KKwkgICAgVklzdWFsX21vZGUgPSBjdXJidWYtPmJfdmlzdWFsX21vZGU7CisJICAgIHRwb3MgPSBjdXJidWYtPmJfdmlzdWFsX2VuZDsKKwkgICAgY3Vyd2luLT53X2N1cnNvciA9IGN1cmJ1Zi0+Yl92aXN1YWxfc3RhcnQ7CisJICAgIGN1cndpbi0+d19jdXJzd2FudCA9IGN1cmJ1Zi0+Yl92aXN1YWxfY3Vyc3dhbnQ7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIFNldCBpdCB1cCBmb3IgbGluZS13aXNlIHZpc3VhbCBtb2RlICovCisJICAgIFZJc3VhbF9tb2RlID0gJ1YnOworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBlYXAtPmxpbmUxOworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDE7CisJICAgIHRwb3MubG51bSA9IGVhcC0+bGluZTI7CisJICAgIHRwb3MuY29sID0gTUFYQ09MOworCX0KKworCS8qIEFjdGl2YXRlIHZpc3VhbCBtb2RlCisJICovCisJVklzdWFsX2FjdGl2ZSA9IFRSVUU7CisJVklzdWFsX3Jlc2VsZWN0ID0gVFJVRTsKKwljaGVja19jdXJzb3IoKTsKKwlWSXN1YWwgPSBjdXJ3aW4tPndfY3Vyc29yOworCWN1cndpbi0+d19jdXJzb3IgPSB0cG9zOworCisJY2hlY2tfY3Vyc29yKCk7CisKKwkvKiBBZGp1c3QgdGhlIGN1cnNvciB0byBtYWtlIHN1cmUgaXQgaXMgaW4gdGhlIGNvcnJlY3QgcG9zCisJICogZm9yIGV4Y2x1c2l2ZSBtb2RlCisJICovCisJaWYgKCpwX3NlbCA9PSAnZScgJiYgZ2NoYXJfY3Vyc29yKCkgIT0gTlVMKQorCSAgICArK2N1cndpbi0+d19jdXJzb3IuY29sOworICAgIH0KKyAgICBlbHNlCisgICAgeworCW1vZGUgPSAoY2hhcl91ICopIk5vcm1hbCI7CisJaWR4ID0gTUVOVV9JTkRFWF9OT1JNQUw7CisgICAgfQorCisgICAgaWYgKGlkeCAhPSBNRU5VX0lOREVYX0lOVkFMSUQgJiYgbWVudS0+c3RyaW5nc1tpZHhdICE9IE5VTEwpCisgICAgeworCWluc190eXBlYnVmKG1lbnUtPnN0cmluZ3NbaWR4XSwgbWVudS0+bm9yZW1hcFtpZHhdLCAwLAorCQkJCQkJICAgICBUUlVFLCBtZW51LT5zaWxlbnRbaWR4XSk7CisgICAgfQorICAgIGVsc2UKKwlFTVNHMihfKCJFMzM1OiBNZW51IG5vdCBkZWZpbmVkIGZvciAlcyBtb2RlIiksIG1vZGUpOworfQorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9NU1dJTikgXAorCXx8IChkZWZpbmVkKEZFQVRfR1VJX0dUSykgJiYgZGVmaW5lZChGRUFUX01FTlUpKSBcCisJfHwgZGVmaW5lZChGRUFUX0JFVkFMX1RJUCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBHaXZlbiBhIG1lbnUgZGVzY3JpcHRvciwgZS5nLiAiRmlsZS5OZXciLCBmaW5kIGl0IGluIHRoZSBtZW51IGhpZXJhcmNoeS4KKyAqLworICAgIHZpbW1lbnVfVCAqCitndWlfZmluZF9tZW51KHBhdGhfbmFtZSkKKyAgICBjaGFyX3UgKnBhdGhfbmFtZTsKK3sKKyAgICB2aW1tZW51X1QJKm1lbnUgPSBOVUxMOworICAgIGNoYXJfdQkqbmFtZTsKKyAgICBjaGFyX3UJKnNhdmVkX25hbWU7CisgICAgY2hhcl91CSpwOworCisgICAgbWVudSA9IHJvb3RfbWVudTsKKworICAgIHNhdmVkX25hbWUgPSB2aW1fc3Ryc2F2ZShwYXRoX25hbWUpOworICAgIGlmIChzYXZlZF9uYW1lID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICBuYW1lID0gc2F2ZWRfbmFtZTsKKyAgICB3aGlsZSAoKm5hbWUpCisgICAgeworCS8qIGZpbmQgdGhlIGVuZCBvZiBvbmUgZG90LXNlcGFyYXRlZCBuYW1lIGFuZCBwdXQgYSBOVUwgYXQgdGhlIGRvdCAqLworCXAgPSBtZW51X25hbWVfc2tpcChuYW1lKTsKKworCXdoaWxlIChtZW51ICE9IE5VTEwpCisJeworCSAgICBpZiAoU1RSQ01QKG5hbWUsIG1lbnUtPm5hbWUpID09IDAgfHwgU1RSQ01QKG5hbWUsIG1lbnUtPmRuYW1lKSA9PSAwKQorCSAgICB7CisJCWlmIChtZW51LT5jaGlsZHJlbiA9PSBOVUxMKQorCQl7CisJCSAgICAvKiBmb3VuZCBhIG1lbnUgaXRlbSBpbnN0ZWFkIG9mIGEgc3ViLW1lbnUgKi8KKwkJICAgIGlmICgqcCA9PSBOVUwpCisJCQlFTVNHKF8oIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIpKTsKKwkJICAgIGVsc2UKKwkJCUVNU0coXyhlX25vdHN1Ym1lbnUpKTsKKwkJICAgIG1lbnUgPSBOVUxMOworCQkgICAgZ290byB0aGVlbmQ7CisJCX0KKwkJaWYgKCpwID09IE5VTCkJICAgIC8qIGZvdW5kIGEgZnVsbCBtYXRjaCAqLworCQkgICAgZ290byB0aGVlbmQ7CisJCWJyZWFrOworCSAgICB9CisJICAgIG1lbnUgPSBtZW51LT5uZXh0OworCX0KKwlpZiAobWVudSA9PSBOVUxMKQkvKiBkaWRuJ3QgZmluZCBpdCAqLworCSAgICBicmVhazsKKworCS8qIEZvdW5kIGEgbWF0Y2gsIHNlYXJjaCB0aGUgc3ViLW1lbnUuICovCisJbWVudSA9IG1lbnUtPmNoaWxkcmVuOworCW5hbWUgPSBwOworICAgIH0KKworICAgIGlmIChtZW51ID09IE5VTEwpCisJRU1TRyhfKCJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiKSk7Cit0aGVlbmQ6CisgICAgdmltX2ZyZWUoc2F2ZWRfbmFtZSk7CisgICAgcmV0dXJuIG1lbnU7Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTVVMVElfTEFORworLyoKKyAqIFRyYW5zbGF0aW9uIG9mIG1lbnUgbmFtZXMuICBKdXN0IGEgc2ltcGxlIGxvb2t1cCB0YWJsZS4KKyAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGNoYXJfdQkqZnJvbTsJCS8qIEVuZ2xpc2ggbmFtZSAqLworICAgIGNoYXJfdQkqZnJvbV9ub2FtcDsJLyogc2FtZSwgd2l0aG91dCAnJicgKi8KKyAgICBjaGFyX3UJKnRvOwkJLyogdHJhbnNsYXRlZCBuYW1lICovCit9IG1lbnV0cmFuc19UOworCitzdGF0aWMgZ2FycmF5X1QgbWVudXRyYW5zX2dhID0gezAsIDAsIDAsIDAsIE5VTEx9OworI2VuZGlmCisKKy8qCisgKiAiOm1lbnV0cmFucyIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gZGVmaW5lZCB3aXRob3V0IHRoZSArbXVsdGlfbGFuZyBmZWF0dXJlLCBpbiB3aGljaAorICogY2FzZSB0aGUgY29tbWFuZHMgYXJlIGlnbm9yZWQuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK2V4X21lbnV0cmFuc2xhdGUoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyNpZmRlZiBGRUFUX01VTFRJX0xBTkcKKyAgICBjaGFyX3UJCSphcmcgPSBlYXAtPmFyZzsKKyAgICBtZW51dHJhbnNfVAkJKnRwOworICAgIGludAkJCWk7CisgICAgY2hhcl91CQkqZnJvbSwgKmZyb21fbm9hbXAsICp0bzsKKworICAgIGlmIChtZW51dHJhbnNfZ2EuZ2FfaXRlbXNpemUgPT0gMCkKKwlnYV9pbml0MigmbWVudXRyYW5zX2dhLCAoaW50KXNpemVvZihtZW51dHJhbnNfVCksIDUpOworCisgICAgLyoKKyAgICAgKiAiOm1lbnV0cmFucyBjbGVhciI6IGNsZWFyIGFsbCB0cmFuc2xhdGlvbnMuCisgICAgICovCisgICAgaWYgKFNUUk5DTVAoYXJnLCAiY2xlYXIiLCA1KSA9PSAwICYmIGVuZHNfZXhjbWQoKnNraXB3aGl0ZShhcmcgKyA1KSkpCisgICAgeworCXRwID0gKG1lbnV0cmFuc19UICopbWVudXRyYW5zX2dhLmdhX2RhdGE7CisJZm9yIChpID0gMDsgaSA8IG1lbnV0cmFuc19nYS5nYV9sZW47ICsraSkKKwl7CisJICAgIHZpbV9mcmVlKHRwW2ldLmZyb20pOworCSAgICB2aW1fZnJlZSh0cFtpXS5mcm9tX25vYW1wKTsKKwkgICAgdmltX2ZyZWUodHBbaV0udG8pOworCX0KKwlnYV9jbGVhcigmbWVudXRyYW5zX2dhKTsKKyMgaWZkZWYgRkVBVF9FVkFMCisJLyogRGVsZXRlIGFsbCAibWVudXRyYW5zXyIgZ2xvYmFsIHZhcmlhYmxlcy4gKi8KKwlkZWxfbWVudXRyYW5zX3ZhcnMoKTsKKyMgZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiAiOm1lbnV0cmFucyBmcm9tIHRvIjogYWRkIHRyYW5zbGF0aW9uICovCisJZnJvbSA9IGFyZzsKKwlhcmcgPSBtZW51X3NraXBfcGFydChhcmcpOworCXRvID0gc2tpcHdoaXRlKGFyZyk7CisJKmFyZyA9IE5VTDsKKwlhcmcgPSBtZW51X3NraXBfcGFydCh0byk7CisJaWYgKGFyZyA9PSB0bykKKwkgICAgRU1TRyhfKGVfaW52YXJnKSk7CisJZWxzZQorCXsKKwkgICAgaWYgKGdhX2dyb3coJm1lbnV0cmFuc19nYSwgMSkgPT0gT0spCisJICAgIHsKKwkJdHAgPSAobWVudXRyYW5zX1QgKiltZW51dHJhbnNfZ2EuZ2FfZGF0YTsKKwkJZnJvbSA9IHZpbV9zdHJzYXZlKGZyb20pOworCQlmcm9tX25vYW1wID0gbWVudV90ZXh0KGZyb20sIE5VTEwsIE5VTEwpOworCQl0byA9IHZpbV9zdHJuc2F2ZSh0bywgKGludCkoYXJnIC0gdG8pKTsKKwkJaWYgKGZyb20gIT0gTlVMTCAmJiBmcm9tX25vYW1wICE9IE5VTEwgJiYgdG8gIT0gTlVMTCkKKwkJeworCQkgICAgdHBbbWVudXRyYW5zX2dhLmdhX2xlbl0uZnJvbSA9IGZyb207CisJCSAgICB0cFttZW51dHJhbnNfZ2EuZ2FfbGVuXS5mcm9tX25vYW1wID0gZnJvbV9ub2FtcDsKKwkJICAgIHRwW21lbnV0cmFuc19nYS5nYV9sZW5dLnRvID0gdG87CisJCSAgICArK21lbnV0cmFuc19nYS5nYV9sZW47CisJCSAgICAtLW1lbnV0cmFuc19nYS5nYV9yb29tOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgdmltX2ZyZWUoZnJvbSk7CisJCSAgICB2aW1fZnJlZShmcm9tX25vYW1wKTsKKwkJICAgIHZpbV9mcmVlKHRvKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChGRUFUX01VTFRJX0xBTkcpIHx8IGRlZmluZWQoRkVBVF9UT09MQkFSKQorLyoKKyAqIEZpbmQgdGhlIGNoYXJhY3RlciBqdXN0IGFmdGVyIG9uZSBwYXJ0IG9mIGEgbWVudSBuYW1lLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCittZW51X3NraXBfcGFydChwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICB3aGlsZSAoKnAgIT0gTlVMICYmICpwICE9ICcuJyAmJiAhdmltX2lzd2hpdGUoKnApKQorICAgIHsKKwlpZiAoKCpwID09ICdcXCcgfHwgKnAgPT0gQ3RybF9WKSAmJiBwWzFdICE9IE5VTCkKKwkgICAgKytwOworCSsrcDsKKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTVVMVElfTEFORworLyoKKyAqIExvb2t1cCBwYXJ0IG9mIGEgbWVudSBuYW1lIGluIHRoZSB0cmFuc2xhdGlvbnMuCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0cmFuc2xhdGlvbiBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorbWVudXRyYW5zX2xvb2t1cChuYW1lLCBsZW4pCisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJbGVuOworeworICAgIG1lbnV0cmFuc19UCQkqdHAgPSAobWVudXRyYW5zX1QgKiltZW51dHJhbnNfZ2EuZ2FfZGF0YTsKKyAgICBpbnQJCQlpOworICAgIGNoYXJfdQkJKmRuYW1lOworCisgICAgZm9yIChpID0gMDsgaSA8IG1lbnV0cmFuc19nYS5nYV9sZW47ICsraSkKKwlpZiAoU1RSTkNNUChuYW1lLCB0cFtpXS5mcm9tLCBsZW4pID09IDAgJiYgdHBbaV0uZnJvbVtsZW5dID09IE5VTCkKKwkgICAgcmV0dXJuIHRwW2ldLnRvOworCisgICAgLyogTm93IHRyeSBhZ2FpbiB3aGlsZSBpZ25vcmluZyAnJicgY2hhcmFjdGVycy4gKi8KKyAgICBpID0gbmFtZVtsZW5dOworICAgIG5hbWVbbGVuXSA9IE5VTDsKKyAgICBkbmFtZSA9IG1lbnVfdGV4dChuYW1lLCBOVUxMLCBOVUxMKTsKKyAgICBuYW1lW2xlbl0gPSBpOworICAgIGlmIChkbmFtZSAhPSBOVUxMKQorICAgIHsKKwlmb3IgKGkgPSAwOyBpIDwgbWVudXRyYW5zX2dhLmdhX2xlbjsgKytpKQorCSAgICBpZiAoU1RSQ01QKGRuYW1lLCB0cFtpXS5mcm9tX25vYW1wKSA9PSAwKQorCSAgICB7CisJCXZpbV9mcmVlKGRuYW1lKTsKKwkJcmV0dXJuIHRwW2ldLnRvOworCSAgICB9CisJdmltX2ZyZWUoZG5hbWUpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIEZFQVRfTVVMVElfTEFORyAqLworCisjZW5kaWYgLyogRkVBVF9NRU5VICovCmRpZmYgLS1naXQgYS9zcmMvbWVzc2FnZS5jIGIvc3JjL21lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDVhZTZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21lc3NhZ2UuYwpAQCAtMCwwICsxLDMxNjUgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIG1lc3NhZ2UuYzogZnVuY3Rpb25zIGZvciBkaXNwbGF5aW5nIG1lc3NhZ2VzIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAqLworCisjZGVmaW5lIE1FU1NBR0VfRklMRQkJLyogZG9uJ3QgaW5jbHVkZSBwcm90b3R5cGUgZm9yIHNtc2coKSAqLworCisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBIQVZFX1NUREFSR19ICisjIGluY2x1ZGUgPHN0ZGFyZy5oPgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHJlc2V0X2xhc3Rfc291cmNpbmcgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgY2hhcl91ICpnZXRfZW1zZ19zb3VyY2UgX19BUkdTKChpbnQgb3RoZXIpKTsKK3N0YXRpYyBjaGFyX3UgKmdldF9lbXNnX2xudW0gX19BUkdTKChpbnQgb3RoZXIpKTsKK3N0YXRpYyB2b2lkIGFkZF9tc2dfaGlzdCBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGxlbiwgaW50IGF0dHIpKTsKK3N0YXRpYyB2b2lkIGhpdF9yZXR1cm5fbXNnIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgbXNnX2hvbWVfcmVwbGFjZV9hdHRyIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgaW50IGF0dHIpKTsKKyNpZmRlZiBGRUFUX01CWVRFCitzdGF0aWMgY2hhcl91ICpzY3JlZW5fcHV0c19tYnl0ZSBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGwsIGludCBhdHRyKSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIG1zZ19wdXRzX2F0dHJfbGVuIF9fQVJHUygoY2hhcl91ICpzdHIsIGludCBtYXhsZW4sIGludCBhdHRyKSk7CitzdGF0aWMgdm9pZCB0X3B1dHMgX19BUkdTKChpbnQgdF9jb2wsIGNoYXJfdSAqdF9zLCBjaGFyX3UgKnMsIGludCBhdHRyKSk7CitzdGF0aWMgdm9pZCBtc2dfc2NyZWVuX3B1dGNoYXIgX19BUkdTKChpbnQgYywgaW50IGF0dHIpKTsKK3N0YXRpYyBpbnQgIG1zZ19jaGVja19zY3JlZW4gX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCByZWRpcl93cml0ZSBfX0FSR1MoKGNoYXJfdSAqcywgaW50IG1heGxlbikpOworI2lmZGVmIEZFQVRfQ09OX0RJQUxPRworc3RhdGljIGNoYXJfdSAqbXNnX3Nob3dfY29uc29sZV9kaWFsb2cgX19BUkdTKChjaGFyX3UgKm1lc3NhZ2UsIGNoYXJfdSAqYnV0dG9ucywgaW50IGRmbHRidXR0b24pKTsKK3N0YXRpYyBpbnQJY29uZmlybV9tc2dfdXNlZCA9IEZBTFNFOwkvKiBkaXNwbGF5aW5nIGNvbmZpcm1fbXNnICovCitzdGF0aWMgY2hhcl91CSpjb25maXJtX21zZyA9IE5VTEw7CQkvKiAiOmNvbmZpcm0iIG1lc3NhZ2UgKi8KK3N0YXRpYyBjaGFyX3UJKmNvbmZpcm1fbXNnX3RhaWw7CQkvKiB0YWlsIG9mIGNvbmZpcm1fbXNnICovCisjZW5kaWYKKworc3RydWN0IG1zZ19oaXN0Cit7CisgICAgc3RydWN0IG1zZ19oaXN0CSpuZXh0OworICAgIGNoYXJfdQkJKm1zZzsKKyAgICBpbnQJCQlhdHRyOworfTsKKworc3RhdGljIHN0cnVjdCBtc2dfaGlzdCAqZmlyc3RfbXNnX2hpc3QgPSBOVUxMOworc3RhdGljIHN0cnVjdCBtc2dfaGlzdCAqbGFzdF9tc2dfaGlzdCA9IE5VTEw7CitzdGF0aWMgaW50IG1zZ19oaXN0X2xlbiA9IDA7CitzdGF0aWMgaW50IG1zZ19oaXN0X29mZiA9IEZBTFNFOwkvKiBkb24ndCBhZGQgbWVzc2FnZXMgdG8gaGlzdG9yeSAqLworCisvKgorICogV2hlbiB3cml0aW5nIG1lc3NhZ2VzIHRvIHRoZSBzY3JlZW4sIHRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBzaXR1YXRpb25zLgorICogQSBudW1iZXIgb2YgdmFyaWFibGVzIGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhlIGN1cnJlbnQgc3RhdGU6CisgKiBtc2dfZGlkYW55CSAgICBUUlVFIHdoZW4gbWVzc2FnZXMgd2VyZSB3cml0dGVuIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlCisgKgkJICAgIHVzZXIgcmVhY3RlZCB0byBhIHByb21wdC4KKyAqCQkgICAgUmVzZXQ6IEFmdGVyIGhpdHRpbmcgYSBrZXkgZm9yIHRoZSBoaXQtcmV0dXJuIHByb21wdCwKKyAqCQkgICAgaGl0dGluZyA8Q1I+IGZvciB0aGUgY29tbWFuZCBsaW5lIG9yIGlucHV0KCkuCisgKgkJICAgIFNldDogV2hlbiBhbnkgbWVzc2FnZSBpcyB3cml0dGVuIHRvIHRoZSBzY3JlZW4uCisgKiBtc2dfZGlkb3V0CSAgICBUUlVFIHdoZW4gc29tZXRoaW5nIHdhcyB3cml0dGVuIHRvIHRoZSBjdXJyZW50IGxpbmUuCisgKgkJICAgIFJlc2V0OiBXaGVuIGFkdmFuY2luZyB0byB0aGUgbmV4dCBsaW5lLCB3aGVuIHRoZSBjdXJyZW50CisgKgkJICAgIHRleHQgY2FuIGJlIG92ZXJ3cml0dGVuLgorICoJCSAgICBTZXQ6IFdoZW4gYW55IG1lc3NhZ2UgaXMgd3JpdHRlbiB0byB0aGUgc2NyZWVuLgorICogbXNnX25vd2FpdAkgICAgTm8gZXh0cmEgZGVsYXkgZm9yIHRoZSBsYXN0IGRyYXduIG1lc3NhZ2UuCisgKgkJICAgIFVzZWQgaW4gbm9ybWFsX2NtZCgpIGJlZm9yZSB0aGUgbW9kZSBtZXNzYWdlIGlzIGRyYXduLgorICogZW1zZ19vbl9kaXNwbGF5ICBUaGVyZSB3YXMgYW4gZXJyb3IgbWVzc2FnZSByZWNlbnRseS4gIEluZGljYXRlcyB0aGF0IHRoZXJlCisgKgkJICAgIHNob3VsZCBiZSBhIGRlbGF5IGJlZm9yZSByZWRyYXdpbmcuCisgKiBtc2dfc2Nyb2xsCSAgICBUaGUgbmV4dCBtZXNzYWdlIHNob3VsZCBub3Qgb3ZlcndyaXRlIHRoZSBjdXJyZW50IG9uZS4KKyAqIG1zZ19zY3JvbGxlZAkgICAgSG93IG1hbnkgbGluZXMgdGhlIHNjcmVlbiBoYXMgYmVlbiBzY3JvbGxlZCAoYmVjYXVzZSBvZgorICoJCSAgICBtZXNzYWdlcykuICBVc2VkIGluIHVwZGF0ZV9zY3JlZW4oKSB0byBzY3JvbGwgdGhlIHNjcmVlbgorICoJCSAgICBiYWNrLiAgSW5jcmVtZW50ZWQgZWFjaCB0aW1lIHRoZSBzY3JlZW4gc2Nyb2xscyBhIGxpbmUuCisgKiBtc2dfc2Nyb2xsZWRfaWduICBUUlVFIHdoZW4gbXNnX3Njcm9sbGVkIGlzIG5vbi16ZXJvIGFuZCBtc2dfcHV0c19hdHRyKCkKKyAqCQkgICAgd3JpdGVzIHNvbWV0aGluZyB3aXRob3V0IHNjcm9sbGluZyBzaG91bGQgbm90IG1ha2UKKyAqCQkgICAgbmVlZF93YWl0X3JldHVybiB0byBiZSBzZXQuICBUaGlzIGlzIGEgaGFjayB0byBtYWtlICI6dHMiCisgKgkJICAgIHdvcmsgd2l0aG91dCBhbiBleHRyYSBwcm9tcHQuCisgKiBsaW5lc19sZWZ0CSAgICBOdW1iZXIgb2YgbGluZXMgYXZhaWxhYmxlIGZvciBtZXNzYWdlcyBiZWZvcmUgdGhlCisgKgkJICAgIG1vcmUtcHJvbXB0IGlzIHRvIGJlIGdpdmVuLgorICogbmVlZF93YWl0X3JldHVybiBUUlVFIHdoZW4gdGhlIGhpdC1yZXR1cm4gcHJvbXB0IGlzIG5lZWRlZC4KKyAqCQkgICAgUmVzZXQ6IEFmdGVyIGdpdmluZyB0aGUgaGl0LXJldHVybiBwcm9tcHQsIHdoZW4gdGhlIHVzZXIKKyAqCQkgICAgaGFzIGFuc3dlcmVkIHNvbWUgb3RoZXIgcHJvbXB0LgorICoJCSAgICBTZXQ6IFdoZW4gdGhlIHJ1bGVyIG9yIHR5cGVhaGVhZCBkaXNwbGF5IGlzIG92ZXJ3cml0dGVuLAorICoJCSAgICBzY3JvbGxpbmcgdGhlIHNjcmVlbiBmb3Igc29tZSBtZXNzYWdlLgorICoga2VlcF9tc2cJICAgIE1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIGFmdGVyIHJlZHJhd2luZyB0aGUgc2NyZWVuLCBpbgorICoJCSAgICBtYWluX2xvb3AoKS4KKyAqCQkgICAgVGhpcyBpcyBhbiBhbGxvY2F0ZWQgc3RyaW5nIG9yIE5VTEwgd2hlbiBub3QgdXNlZC4KKyAqLworCisvKgorICogbXNnKHMpIC0gZGlzcGxheXMgdGhlIHN0cmluZyAncycgb24gdGhlIHN0YXR1cyBsaW5lCisgKiBXaGVuIHRlcm1pbmFsIG5vdCBpbml0aWFsaXplZCAoeWV0KSBtY2hfZXJybXNnKC4uKSBpcyB1c2VkLgorICogcmV0dXJuIFRSVUUgaWYgd2FpdF9yZXR1cm4gbm90IGNhbGxlZAorICovCisgICAgaW50Cittc2cocykKKyAgICBjaGFyX3UJKnM7Cit7CisgICAgcmV0dXJuIG1zZ19hdHRyX2tlZXAocywgMCwgRkFMU0UpOworfQorCisgICAgaW50Cittc2dfYXR0cihzLCBhdHRyKQorICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWF0dHI7Cit7CisgICAgcmV0dXJuIG1zZ19hdHRyX2tlZXAocywgYXR0ciwgRkFMU0UpOworfQorCisgICAgaW50Cittc2dfYXR0cl9rZWVwKHMsIGF0dHIsIGtlZXApCisgICAgY2hhcl91CSpzOworICAgIGludAkJYXR0cjsKKyAgICBpbnQJCWtlZXA7CSAgICAvKiBUUlVFOiBzZXQga2VlcF9tc2cgaWYgaXQgZG9lc24ndCBzY3JvbGwgKi8KK3sKKyAgICBzdGF0aWMgaW50CWVudGVyZWQgPSAwOworICAgIGludAkJcmV0dmFsOworICAgIGNoYXJfdQkqYnVmID0gTlVMTDsKKworI2lmZGVmIEZFQVRfRVZBTAorICAgIGlmIChhdHRyID09IDApCisJc2V0X3ZpbV92YXJfc3RyaW5nKFZWX1NUQVRVU01TRywgcywgLTEpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgZGlzcGxheWluZyBhIG1lc3NhZ2VzIGNhdXNlcyBhIHByb2JsZW0gKGUuZy4sCisgICAgICogd2hlbiByZWRyYXdpbmcgdGhlIHdpbmRvdyksIHdoaWNoIGNhdXNlcyBhbm90aGVyIG1lc3NhZ2UsIGV0Yy4uCVRvCisgICAgICogYnJlYWsgdGhpcyBsb29wLCBsaW1pdCB0aGUgcmVjdXJzaXZlbmVzcyB0byAzIGxldmVscy4KKyAgICAgKi8KKyAgICBpZiAoZW50ZXJlZCA+PSAzKQorCXJldHVybiBUUlVFOworICAgICsrZW50ZXJlZDsKKworICAgIC8qIEFkZCBtZXNzYWdlIHRvIGhpc3RvcnkgKHVubGVzcyBpdCdzIGEgcmVwZWF0ZWQga2VwdCBtZXNzYWdlIG9yIGEKKyAgICAgKiB0cnVuY2F0ZWQgbWVzc2FnZSkgKi8KKyAgICBpZiAocyAhPSBrZWVwX21zZworCSAgICB8fCAoKnMgIT0gJzwnCisJCSYmIGxhc3RfbXNnX2hpc3QgIT0gTlVMTAorCQkmJiBsYXN0X21zZ19oaXN0LT5tc2cgIT0gTlVMTAorCQkmJiBTVFJDTVAocywgbGFzdF9tc2dfaGlzdC0+bXNnKSkpCisJYWRkX21zZ19oaXN0KHMsIC0xLCBhdHRyKTsKKworICAgIC8qIFdoZW4gZGlzcGxheWluZyBrZWVwX21zZywgZG9uJ3QgbGV0IG1zZ19zdGFydCgpIGZyZWUgaXQsIGNhbGxlciBtdXN0IGRvCisgICAgICogdGhhdC4gKi8KKyAgICBpZiAocyA9PSBrZWVwX21zZykKKwlrZWVwX21zZyA9IE5VTEw7CisKKyAgICAvKiBUcnVuY2F0ZSB0aGUgbWVzc2FnZSBpZiBuZWVkZWQuICovCisgICAgYnVmID0gbXNnX3N0cnRydW5jKHMpOworICAgIGlmIChidWYgIT0gTlVMTCkKKwlzID0gYnVmOworCisgICAgbXNnX3N0YXJ0KCk7CisgICAgbXNnX291dHRyYW5zX2F0dHIocywgYXR0cik7CisgICAgbXNnX2Nscl9lb3MoKTsKKyAgICByZXR2YWwgPSBtc2dfZW5kKCk7CisKKyAgICBpZiAoa2VlcCAmJiByZXR2YWwgJiYgdmltX3N0cnNpemUocykgPCAoaW50KShSb3dzIC0gY21kbGluZV9yb3cgLSAxKQorCQkJCQkJCSAgICogQ29sdW1ucyArIHNjX2NvbCkKKyAgICB7CisJc2V0X2tlZXBfbXNnKHMpOworCWtlZXBfbXNnX2F0dHIgPSAwOworICAgIH0KKworICAgIHZpbV9mcmVlKGJ1Zik7CisgICAgLS1lbnRlcmVkOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUcnVuY2F0ZSBhIHN0cmluZyBzdWNoIHRoYXQgaXQgY2FuIGJlIHByaW50ZWQgd2l0aG91dCBjYXVzaW5nIGEgc2Nyb2xsLgorICogUmV0dXJucyBhbiBhbGxvY2F0ZWQgc3RyaW5nIG9yIE5VTEwgd2hlbiBubyB0cnVuY2F0aW5nIGlzIGRvbmUuCisgKi8KKyAgICBjaGFyX3UgKgorbXNnX3N0cnRydW5jKHMpCisgICAgY2hhcl91CSpzOworeworICAgIGNoYXJfdQkqYnVmID0gTlVMTDsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCXJvb207CisKKyAgICAvKiBNYXkgdHJ1bmNhdGUgbWVzc2FnZSB0byBhdm9pZCBhIGhpdC1yZXR1cm4gcHJvbXB0ICovCisgICAgaWYgKCFtc2dfc2Nyb2xsICYmICFuZWVkX3dhaXRfcmV0dXJuICYmIHNob3J0bWVzcyhTSE1fVFJVTkNBTEwpCisJCQkJCQkJICAgICYmICFleG1vZGVfYWN0aXZlKQorICAgIHsKKwlsZW4gPSB2aW1fc3Ryc2l6ZShzKTsKKwlyb29tID0gKGludCkoUm93cyAtIGNtZGxpbmVfcm93IC0gMSkgKiBDb2x1bW5zICsgc2NfY29sIC0gMTsKKwlpZiAobGVuID4gcm9vbSAmJiByb29tID4gMCkKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoZW5jX3V0ZjgpCisJCS8qIG1heSBoYXZlIHVwIHRvIDE4IGJ5dGVzIHBlciBjZWxsICg2IHBlciBjaGFyLCB1cCB0byB0d28KKwkJICogY29tcG9zaW5nIGNoYXJzKSAqLworCQlidWYgPSBhbGxvYygocm9vbSArIDIpICogMTgpOworCSAgICBlbHNlIGlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUpCisJCS8qIG1heSBoYXZlIHVwIHRvIDIgYnl0ZXMgcGVyIGNlbGwgZm9yIGV1Yy1qcCAqLworCQlidWYgPSBhbGxvYygocm9vbSArIDIpICogMik7CisJICAgIGVsc2UKKyNlbmRpZgorCQlidWYgPSBhbGxvYyhyb29tICsgMik7CisJICAgIGlmIChidWYgIT0gTlVMTCkKKwkJdHJ1bmNfc3RyaW5nKHMsIGJ1Ziwgcm9vbSk7CisJfQorICAgIH0KKyAgICByZXR1cm4gYnVmOworfQorCisvKgorICogVHJ1bmNhdGUgYSBzdHJpbmcgInMiIHRvICJidWYiIHdpdGggY2VsbCB3aWR0aCAicm9vbSIuCisgKiAicyIgYW5kICJidWYiIG1heSBiZSBlcXVhbC4KKyAqLworICAgIHZvaWQKK3RydW5jX3N0cmluZyhzLCBidWYsIHJvb20pCisgICAgY2hhcl91CSpzOworICAgIGNoYXJfdQkqYnVmOworICAgIGludAkJcm9vbTsKK3sKKyAgICBpbnQJCWhhbGY7CisgICAgaW50CQlsZW47CisgICAgaW50CQllOworICAgIGludAkJaTsKKyAgICBpbnQJCW47CisKKyAgICByb29tIC09IDM7CisgICAgaGFsZiA9IHJvb20gLyAyOworICAgIGxlbiA9IDA7CisKKyAgICAvKiBGaXJzdCBwYXJ0OiBTdGFydCBvZiB0aGUgc3RyaW5nLiAqLworICAgIGZvciAoZSA9IDA7IGxlbiA8IGhhbGY7ICsrZSkKKyAgICB7CisJaWYgKHNbZV0gPT0gTlVMKQorCXsKKwkgICAgLyogdGV4dCBmaXRzIHdpdGhvdXQgdHJ1bmNhdGluZyEgKi8KKwkgICAgYnVmW2VdID0gTlVMOworCSAgICByZXR1cm47CisJfQorCW4gPSBwdHIyY2VsbHMocyArIGUpOworCWlmIChsZW4gKyBuID49IGhhbGYpCisJICAgIGJyZWFrOworCWxlbiArPSBuOworCWJ1ZltlXSA9IHNbZV07CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIGZvciAobiA9ICgqbWJfcHRyMmxlbl9jaGVjaykocyArIGUpOyAtLW4gPiAwOyApCisJICAgIHsKKwkJKytlOworCQlidWZbZV0gPSBzW2VdOworCSAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBMYXN0IHBhcnQ6IEVuZCBvZiB0aGUgc3RyaW5nLiAqLworICAgIGkgPSBlOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoZW5jX2RiY3MgIT0gMCkKKyAgICB7CisJLyogRm9yIERCQ1MgZ29pbmcgYmFja3dhcmRzIGluIGEgc3RyaW5nIGlzIHNsb3csIGJ1dAorCSAqIGNvbXB1dGluZyB0aGUgY2VsbCB3aWR0aCBpc24ndCB0b28gc2xvdzogZ28gZm9yd2FyZAorCSAqIHVudGlsIHRoZSByZXN0IGZpdHMuICovCisJbiA9IHZpbV9zdHJzaXplKHMgKyBpKTsKKwl3aGlsZSAobGVuICsgbiA+IHJvb20pCisJeworCSAgICBuIC09IHB0cjJjZWxscyhzICsgaSk7CisJICAgIGkgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzICsgaSk7CisJfQorICAgIH0KKyAgICBlbHNlIGlmIChlbmNfdXRmOCkKKyAgICB7CisJLyogRm9yIFVURi04IHdlIGNhbiBnbyBiYWNrd2FyZHMgZWFzaWx5LiAqLworCWkgPSAoaW50KVNUUkxFTihzKTsKKwlmb3IgKDs7KQorCXsKKwkgICAgaGFsZiA9IGkgLSAoKm1iX2hlYWRfb2ZmKShzLCBzICsgaSAtIDEpIC0gMTsKKwkgICAgbiA9IHB0cjJjZWxscyhzICsgaGFsZik7CisJICAgIGlmIChsZW4gKyBuID4gcm9vbSkKKwkJYnJlYWs7CisJICAgIGxlbiArPSBuOworCSAgICBpID0gaGFsZjsKKwl9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwlmb3IgKGkgPSAoaW50KVNUUkxFTihzKTsgbGVuICsgKG4gPSBwdHIyY2VsbHMocyArIGkgLSAxKSkgPD0gcm9vbTsgLS1pKQorCSAgICBsZW4gKz0gbjsKKyAgICB9CisKKyAgICAvKiBTZXQgdGhlIG1pZGRsZSBhbmQgY29weSB0aGUgbGFzdCBwYXJ0LiAqLworICAgIG1jaF9tZW1tb3ZlKGJ1ZiArIGUsICIuLi4iLCAoc2l6ZV90KTMpOworICAgIG1jaF9tZW1tb3ZlKGJ1ZiArIGUgKyAzLCBzICsgaSwgU1RSTEVOKHMgKyBpKSArIDEpOworfQorCisvKgorICogQXV0b21hdGljIHByb3RvdHlwZSBnZW5lcmF0aW9uIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4KKyAqIE5vdGU6IENhbGxlciBvZiBzbWdzKCkgYW5kIHNtc2dfYXR0cigpIG11c3QgY2hlY2sgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXMKKyAqIHNob3J0ZXIgdGhhbiBJT1NJWkUhISEKKyAqLworI2lmbmRlZiBQUk9UTworIyBpZm5kZWYgSEFWRV9TVERBUkdfSAorCitpbnQKKyNpZmRlZiBfX0JPUkxBTkRDX18KK19SVExFTlRSWUYKKyNlbmRpZgorc21zZyBfX0FSR1MoKGNoYXJfdSAqLCBsb25nLCBsb25nLCBsb25nLAorCQkJbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZykpOworaW50CisjaWZkZWYgX19CT1JMQU5EQ19fCitfUlRMRU5UUllGCisjZW5kaWYKK3Ntc2dfYXR0ciBfX0FSR1MoKGludCwgY2hhcl91ICosIGxvbmcsIGxvbmcsIGxvbmcsCisJCQlsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBsb25nKSk7CisKKy8qIFZBUkFSR1MgKi8KKyAgICBpbnQKKyNpZmRlZiBfX0JPUkxBTkRDX18KK19SVExFTlRSWUYKKyNlbmRpZgorc21zZyhzLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTApCisgICAgY2hhcl91CSpzOworICAgIGxvbmcJYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwOworeworICAgIHJldHVybiBzbXNnX2F0dHIoMCwgcywgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwKTsKK30KKworLyogVkFSQVJHUyAqLworICAgIGludAorI2lmZGVmIF9fQk9STEFORENfXworX1JUTEVOVFJZRgorI2VuZGlmCitzbXNnX2F0dHIoYXR0ciwgcywgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwKQorICAgIGludAkJYXR0cjsKKyAgICBjaGFyX3UJKnM7CisgICAgbG9uZwlhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTA7Cit7CisgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgKGNoYXIgKilzLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTApOworICAgIHJldHVybiBtc2dfYXR0cihJT2J1ZmYsIGF0dHIpOworfQorCisjIGVsc2UgLyogSEFWRV9TVERBUkdfSCAqLworCisgICAgaW50CisjaWZkZWYgX19CT1JMQU5EQ19fCitfUlRMRU5UUllGCisjZW5kaWYKK3Ntc2coY2hhcl91ICpzLCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdsaXN0OworCisgICAgdmFfc3RhcnQoYXJnbGlzdCwgcyk7CisjIGlmZGVmIEhBVkVfVlNOUFJJTlRGCisgICAgdnNucHJpbnRmKChjaGFyICopSU9idWZmLCBJT1NJWkUsIChjaGFyICopcywgYXJnbGlzdCk7CisjIGVsc2UKKyAgICB2c3ByaW50ZigoY2hhciAqKUlPYnVmZiwgKGNoYXIgKilzLCBhcmdsaXN0KTsKKyMgZW5kaWYKKyAgICB2YV9lbmQoYXJnbGlzdCk7CisgICAgcmV0dXJuIG1zZyhJT2J1ZmYpOworfQorCisgICAgaW50CisjaWZkZWYgX19CT1JMQU5EQ19fCitfUlRMRU5UUllGCisjZW5kaWYKK3Ntc2dfYXR0cihpbnQgYXR0ciwgY2hhcl91ICpzLCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdsaXN0OworCisgICAgdmFfc3RhcnQoYXJnbGlzdCwgcyk7CisjIGlmZGVmIEhBVkVfVlNOUFJJTlRGCisgICAgdnNucHJpbnRmKChjaGFyICopSU9idWZmLCBJT1NJWkUsIChjaGFyICopcywgYXJnbGlzdCk7CisjIGVsc2UKKyAgICB2c3ByaW50ZigoY2hhciAqKUlPYnVmZiwgKGNoYXIgKilzLCBhcmdsaXN0KTsKKyMgZW5kaWYKKyAgICB2YV9lbmQoYXJnbGlzdCk7CisgICAgcmV0dXJuIG1zZ19hdHRyKElPYnVmZiwgYXR0cik7Cit9CisKKyMgZW5kaWYgLyogSEFWRV9TVERBUkdfSCAqLworI2VuZGlmCisKKy8qCisgKiBSZW1lbWJlciB0aGUgbGFzdCBzb3VyY2luZyBuYW1lL2xudW0gdXNlZCBpbiBhbiBlcnJvciBtZXNzYWdlLCBzbyB0aGF0IGl0CisgKiBpc24ndCBwcmludGVkIGVhY2ggdGltZSB3aGVuIGl0IGRpZG4ndCBjaGFuZ2UuCisgKi8KK3N0YXRpYyBpbnQJbGFzdF9zb3VyY2luZ19sbnVtID0gMDsKK3N0YXRpYyBjaGFyX3UgICAqbGFzdF9zb3VyY2luZ19uYW1lID0gTlVMTDsKKworLyoKKyAqIFJlc2V0IHRoZSBsYXN0IHVzZWQgc291cmNpbmcgbmFtZS9sbnVtLiAgTWFrZXMgc3VyZSBpdCBpcyBkaXNwbGF5ZWQgYWdhaW4KKyAqIGZvciB0aGUgbmV4dCBlcnJvciBtZXNzYWdlOworICovCisgICAgc3RhdGljIHZvaWQKK3Jlc2V0X2xhc3Rfc291cmNpbmcoKQoreworICAgIHZpbV9mcmVlKGxhc3Rfc291cmNpbmdfbmFtZSk7CisgICAgbGFzdF9zb3VyY2luZ19uYW1lID0gTlVMTDsKKyAgICBsYXN0X3NvdXJjaW5nX2xudW0gPSAwOworfQorCisvKgorICogR2V0IHRoZSBtZXNzYWdlIGFib3V0IHRoZSBzb3VyY2UsIGFzIHVzZWQgZm9yIGFuIGVycm9yIG1lc3NhZ2UuCisgKiBSZXR1cm5zIGFuIGFsbG9jYXRlZCBzdHJpbmcgd2l0aCByb29tIGZvciBvbmUgbW9yZSBjaGFyYWN0ZXIuCisgKiBSZXR1cm5zIE5VTEwgd2hlbiBubyBtZXNzYWdlIGlzIHRvIGJlIGdpdmVuLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitnZXRfZW1zZ19zb3VyY2Uob3RoZXIpCisgICAgaW50CQlvdGhlcjsJLyogVFJVRSB3aGVuICJzb3VyY2luZ19uYW1lIiBkaWZmZXJzIGZyb20gbGFzdCB0aW1lICovCit7CisgICAgY2hhcl91CSpCdWYsICpwOworCisgICAgaWYgKHNvdXJjaW5nX25hbWUgIT0gTlVMTCAmJiBvdGhlcikKKyAgICB7CisJcCA9IChjaGFyX3UgKilfKCJFcnJvciBkZXRlY3RlZCB3aGlsZSBwcm9jZXNzaW5nICVzOiIpOworCUJ1ZiA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKHNvdXJjaW5nX25hbWUpICsgU1RSTEVOKHApKSk7CisJaWYgKEJ1ZiAhPSBOVUxMKQorCSAgICBzcHJpbnRmKChjaGFyICopQnVmLCAoY2hhciAqKXAsIHNvdXJjaW5nX25hbWUpOworCXJldHVybiBCdWY7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCisvKgorICogR2V0IHRoZSBtZXNzYWdlIGFib3V0IHRoZSBzb3VyY2UgbG51bSwgYXMgdXNlZCBmb3IgYW4gZXJyb3IgbWVzc2FnZS4KKyAqIFJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZyB3aXRoIHJvb20gZm9yIG9uZSBtb3JlIGNoYXJhY3Rlci4KKyAqIFJldHVybnMgTlVMTCB3aGVuIG5vIG1lc3NhZ2UgaXMgdG8gYmUgZ2l2ZW4uCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2dldF9lbXNnX2xudW0ob3RoZXIpCisgICAgaW50CQlvdGhlcjsJLyogVFJVRSB3aGVuICJzb3VyY2luZ19uYW1lIiBkaWZmZXJzIGZyb20gbGFzdCB0aW1lICovCit7CisgICAgY2hhcl91CSpCdWYsICpwOworCisgICAgLyogbG51bSBpcyAwIHdoZW4gZXhlY3V0aW5nIGEgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgKiBhcmd1bWVudCwgd2UgZG9uJ3Qgd2FudCBhIGxpbmUgbnVtYmVyIHRoZW4gKi8KKyAgICBpZiAoc291cmNpbmdfbmFtZSAhPSBOVUxMCisJICAgICYmIChvdGhlciB8fCBzb3VyY2luZ19sbnVtICE9IGxhc3Rfc291cmNpbmdfbG51bSkKKwkgICAgJiYgc291cmNpbmdfbG51bSAhPSAwKQorICAgIHsKKwlwID0gKGNoYXJfdSAqKV8oImxpbmUgJTRsZDoiKTsKKwlCdWYgPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTihwKSArIDIwKSk7CisJaWYgKEJ1ZiAhPSBOVUxMKQorCSAgICBzcHJpbnRmKChjaGFyICopQnVmLCAoY2hhciAqKXAsIChsb25nKXNvdXJjaW5nX2xudW0pOworCXJldHVybiBCdWY7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCisvKgorICogZW1zZygpIC0gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlCisgKgorICogUmluZ3MgdGhlIGJlbGwsIGlmIGFwcHJvcHJpYXRlLCBhbmQgY2FsbHMgbWVzc2FnZSgpIHRvIGRvIHRoZSByZWFsIHdvcmsKKyAqIFdoZW4gdGVybWluYWwgbm90IGluaXRpYWxpemVkICh5ZXQpIG1jaF9lcnJtc2coLi4pIGlzIHVzZWQuCisgKgorICogcmV0dXJuIFRSVUUgaWYgd2FpdF9yZXR1cm4gbm90IGNhbGxlZAorICovCisgICAgaW50CitlbXNnKHMpCisgICAgY2hhcl91CSpzOworeworICAgIGludAkJYXR0cjsKKyAgICBpbnQJCW90aGVyX3NvdXJjaW5nX25hbWU7CisgICAgY2hhcl91CSpwOworI2lmZGVmIEZFQVRfRVZBTAorICAgIGludAkJaWdub3JlID0gRkFMU0U7CisgICAgaW50CQlzZXZlcmU7CisjZW5kaWYKKworICAgIGNhbGxlZF9lbXNnID0gVFJVRTsKKworICAgIC8qCisgICAgICogSWYgImVtc2dfc2V2ZXJlIiBpcyBUUlVFOiBXaGVuIGFuIGVycm9yIGV4Y2VwdGlvbiBpcyB0byBiZSB0aHJvd24sIHByZWZlcgorICAgICAqIHRoaXMgbWVzc2FnZSBvdmVyIHByZXZpb3VzIG1lc3NhZ2VzIGZvciB0aGUgc2FtZSBjb21tYW5kLgorICAgICAqLworI2lmZGVmIEZFQVRfRVZBTAorICAgIHNldmVyZSA9IGVtc2dfc2V2ZXJlOworICAgIGVtc2dfc2V2ZXJlID0gRkFMU0U7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgImVtc2dfb2ZmIiBpcyBzZXQ6IG5vIGVycm9yIG1lc3NhZ2VzIGF0IHRoZSBtb21lbnQuCisgICAgICogSWYgJ2RlYnVnJyBpcyBzZXQ6IGRvIGVycm9yIG1lc3NhZ2UgYW55d2F5LCBidXQgd2l0aG91dCBzaWRlIGVmZmVjdHMuCisgICAgICogSWYgImVtc2dfc2tpcCIgaXMgc2V0OiBuZXZlciBkbyBlcnJvciBtZXNzYWdlcy4KKyAgICAgKi8KKyAgICBpZiAoKGVtc2dfb2ZmID4gMCAmJiAqcF9kZWJ1ZyA9PSBOVUwpCisjaWZkZWYgRkVBVF9FVkFMCisJICAgIHx8IGVtc2dfc2tpcCA+IDAKKyNlbmRpZgorCSAgICApCisJcmV0dXJuIFRSVUU7CisKKyAgICBpZiAoc291cmNpbmdfbmFtZSAhPSBOVUxMKQorICAgIHsKKwlpZiAobGFzdF9zb3VyY2luZ19uYW1lICE9IE5VTEwpCisJICAgIG90aGVyX3NvdXJjaW5nX25hbWUgPSBTVFJDTVAoc291cmNpbmdfbmFtZSwgbGFzdF9zb3VyY2luZ19uYW1lKTsKKwllbHNlCisJICAgIG90aGVyX3NvdXJjaW5nX25hbWUgPSBUUlVFOworICAgIH0KKyAgICBlbHNlCisJb3RoZXJfc291cmNpbmdfbmFtZSA9IEZBTFNFOworCisgICAgaWYgKCFlbXNnX29mZikKKyAgICB7CisjaWZkZWYgRkVBVF9FVkFMCisJLyoKKwkgKiBDYXVzZSBhIHRocm93IG9mIGFuIGVycm9yIGV4Y2VwdGlvbiBpZiBhcHByb3ByaWF0ZS4gIERvbid0IGRpc3BsYXkKKwkgKiB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGlzIGNhc2UuICAoSWYgbm8gbWF0Y2hpbmcgY2F0Y2ggY2xhdXNlIHdpbGwKKwkgKiBiZSBmb3VuZCwgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgbGF0ZXIgb24uKSAgImlnbm9yZSIgaXMgc2V0CisJICogd2hlbiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgaWdub3JlZCBjb21wbGV0ZWx5ICh1c2VkIGZvciB0aGUKKwkgKiBpbnRlcnJ1cHQgbWVzc2FnZSkuCisJICovCisJaWYgKGNhdXNlX2VycnRocm93KHMsIHNldmVyZSwgJmlnbm9yZSkgPT0gVFJVRSkKKwl7CisJICAgIGlmICghaWdub3JlKQorCQlkaWRfZW1zZyA9IFRSVUU7CisJICAgIHJldHVybiBUUlVFOworCX0KKworCS8qIHNldCAidjplcnJtc2ciLCBhbHNvIHdoZW4gdXNpbmcgIjpzaWxlbnQhIGNtZCIgKi8KKwlzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRVJSTVNHLCBzLCAtMSk7CisjZW5kaWYKKworCS8qCisJICogV2hlbiB1c2luZyAiOnNpbGVudCEgY21kIiBpZ25vcmUgZXJyb3IgbWVzc3NhZ2VzLgorCSAqIEJ1dCBkbyB3cml0ZSBpdCB0byB0aGUgcmVkaXJlY3Rpb24gZmlsZS4KKwkgKi8KKwlpZiAoZW1zZ19zaWxlbnQgIT0gMCkKKwl7CisJICAgIG1zZ19zdGFydCgpOworCSAgICBwID0gZ2V0X2Vtc2dfc291cmNlKG90aGVyX3NvdXJjaW5nX25hbWUpOworCSAgICBpZiAocCAhPSBOVUxMKQorCSAgICB7CisJCVNUUkNBVChwLCAiXG4iKTsKKwkJcmVkaXJfd3JpdGUocCwgLTEpOworCQl2aW1fZnJlZShwKTsKKwkgICAgfQorCSAgICBwID0gZ2V0X2Vtc2dfbG51bShvdGhlcl9zb3VyY2luZ19uYW1lKTsKKwkgICAgaWYgKHAgIT0gTlVMTCkKKwkgICAgeworCQlTVFJDQVQocCwgIlxuIik7CisJCXJlZGlyX3dyaXRlKHAsIC0xKTsKKwkJdmltX2ZyZWUocCk7CisJICAgIH0KKwkgICAgcmVkaXJfd3JpdGUocywgLTEpOworCSAgICByZXR1cm4gVFJVRTsKKwl9CisKKwkvKiBSZXNldCBtc2dfc2lsZW50LCBhbiBlcnJvciBjYXVzZXMgbWVzc2FnZXMgdG8gYmUgc3dpdGNoZWQgYmFjayBvbi4gKi8KKwltc2dfc2lsZW50ID0gMDsKKwljbWRfc2lsZW50ID0gRkFMU0U7CisKKwlpZiAoZ2xvYmFsX2J1c3kpCQkvKiBicmVhayA6Z2xvYmFsIGNvbW1hbmQgKi8KKwkgICAgKytnbG9iYWxfYnVzeTsKKworCWlmIChwX2ViKQorCSAgICBiZWVwX2ZsdXNoKCk7CQkvKiBhbHNvIGluY2x1ZGVzIGZsdXNoX2J1ZmZlcnMoKSAqLworCWVsc2UKKwkgICAgZmx1c2hfYnVmZmVycyhGQUxTRSk7CS8qIGZsdXNoIGludGVybmFsIGJ1ZmZlcnMgKi8KKwlkaWRfZW1zZyA9IFRSVUU7CQkvKiBmbGFnIGZvciBEb09uZUNtZCgpICovCisKKyNpZmRlZiBWSU1CVUREWQorCWlmIChzb3VyY2luZ19uYW1lID09IE5VTEwpCisJeworCSAgICBWaW1CdWRkeVRleHQocywgMik7CisJICAgIHJldHVybiBUUlVFOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIGVtc2dfb25fZGlzcGxheSA9IFRSVUU7CS8qIHJlbWVtYmVyIHRoZXJlIGlzIGFuIGVycm9yIG1lc3NhZ2UgKi8KKyAgICArK21zZ19zY3JvbGw7CQkvKiBkb24ndCBvdmVyd3JpdGUgYSBwcmV2aW91cyBtZXNzYWdlICovCisgICAgYXR0ciA9IGhsX2F0dHIoSExGX0UpOwkvKiBzZXQgaGlnaGxpZ2h0IG1vZGUgZm9yIGVycm9yIG1lc3NhZ2VzICovCisgICAgaWYgKG1zZ19zY3JvbGxlZCkKKwluZWVkX3dhaXRfcmV0dXJuID0gVFJVRTsgICAgLyogbmVlZGVkIGluIGNhc2UgZW1zZygpIGlzIGNhbGxlZCBhZnRlcgorCQkJCSAgICAgKiB3YWl0X3JldHVybiBoYXMgcmVzZXQgbmVlZF93YWl0X3JldHVybgorCQkJCSAgICAgKiBhbmQgYSByZWRyYXcgaXMgZXhwZWN0ZWQgYmVjYXVzZQorCQkJCSAgICAgKiBtc2dfc2Nyb2xsZWQgaXMgbm9uLXplcm8gKi8KKworICAgIC8qCisgICAgICogRGlzcGxheSBuYW1lIGFuZCBsaW5lIG51bWJlciBmb3IgdGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IuCisgICAgICovCisgICAgKytub193YWl0X3JldHVybjsKKyAgICBwID0gZ2V0X2Vtc2dfc291cmNlKG90aGVyX3NvdXJjaW5nX25hbWUpOworICAgIGlmIChwICE9IE5VTEwpCisgICAgeworCW1zZ19hdHRyKHAsIGF0dHIpOworCXZpbV9mcmVlKHApOworICAgIH0KKyAgICBwID0gZ2V0X2Vtc2dfbG51bShvdGhlcl9zb3VyY2luZ19uYW1lKTsKKyAgICBpZiAocCAhPSBOVUxMKQorICAgIHsKKwltc2dfYXR0cihwLCBobF9hdHRyKEhMRl9OKSk7CisJdmltX2ZyZWUocCk7CisJbGFzdF9zb3VyY2luZ19sbnVtID0gc291cmNpbmdfbG51bTsgIC8qIG9ubHkgb25jZSBmb3IgZWFjaCBsaW5lICovCisgICAgfQorICAgIC0tbm9fd2FpdF9yZXR1cm47CisKKyAgICAvKiByZW1lbWJlciB0aGUgbGFzdCBzb3VyY2luZyBuYW1lIHByaW50ZWQsIGFsc28gd2hlbiBpdCdzIGVtcHR5ICovCisgICAgaWYgKHNvdXJjaW5nX25hbWUgPT0gTlVMTCB8fCBvdGhlcl9zb3VyY2luZ19uYW1lKQorICAgIHsKKwl2aW1fZnJlZShsYXN0X3NvdXJjaW5nX25hbWUpOworCWlmIChzb3VyY2luZ19uYW1lID09IE5VTEwpCisJICAgIGxhc3Rfc291cmNpbmdfbmFtZSA9IE5VTEw7CisJZWxzZQorCSAgICBsYXN0X3NvdXJjaW5nX25hbWUgPSB2aW1fc3Ryc2F2ZShzb3VyY2luZ19uYW1lKTsKKyAgICB9CisgICAgbXNnX25vd2FpdCA9IEZBTFNFOwkJCS8qIHdhaXQgZm9yIHRoaXMgbXNnICovCisKKyAgICAvKgorICAgICAqIERpc3BsYXkgdGhlIGVycm9yIG1lc3NhZ2UgaXRzZWxmLgorICAgICAqLworICAgIHJldHVybiBtc2dfYXR0cihzLCBhdHRyKTsKK30KKworLyoKKyAqIFByaW50IGFuIGVycm9yIG1lc3NhZ2Ugd2l0aCBvbmUgIiVzIiBhbmQgb25lIHN0cmluZyBhcmd1bWVudC4KKyAqLworICAgIGludAorZW1zZzIocywgYTEpCisgICAgY2hhcl91ICpzLCAqYTE7Cit7CisgICAgcmV0dXJuIGVtc2czKHMsIGExLCBOVUxMKTsKK30KKworLyoKKyAqIFByaW50IGFuIGVycm9yIG1lc3NhZ2Ugd2l0aCBvbmUgb3IgdHdvICIlcyIgYW5kIG9uZSBvciB0d28gc3RyaW5nIGFyZ3VtZW50cy4KKyAqLworICAgIGludAorZW1zZzMocywgYTEsIGEyKQorICAgIGNoYXJfdSAqcywgKmExLCAqYTI7Cit7CisgICAgaWYgKChlbXNnX29mZiA+IDAgJiYgKnBfZGVidWcgPT0gTlVMKQorI2lmZGVmIEZFQVRfRVZBTAorCSAgICB8fCBlbXNnX3NraXAgPiAwCisjZW5kaWYKKwkgICAgKQorCXJldHVybiBUUlVFOwkJLyogbm8gZXJyb3IgbWVzc2FnZXMgYXQgdGhlIG1vbWVudCAqLworCisgICAgLyogQ2hlY2sgZm9yIE5VTEwgc3RyaW5ncyAoanVzdCBpbiBjYXNlKSAqLworICAgIGlmIChhMSA9PSBOVUxMKQorCWExID0gKGNoYXJfdSAqKSJbTlVMTF0iOworICAgIGlmIChhMiA9PSBOVUxMKQorCWEyID0gKGNoYXJfdSAqKSJbTlVMTF0iOworCisgICAgLyogQ2hlY2sgZm9yIHZlcnkgbG9uZyBzdHJpbmdzIChjYW4gaGFwcGVuIHdpdGggIjpoZWxwIF5BPENSPiIpLiAqLworICAgIGlmIChTVFJMRU4ocykgKyBTVFJMRU4oYTEpICsgU1RSTEVOKGEyKSA+PSAoc2l6ZV90KUlPU0laRSkKKwlhMSA9IGEyID0gKGNoYXJfdSAqKV8oIltzdHJpbmcgdG9vIGxvbmddIik7CisKKyAgICBzcHJpbnRmKChjaGFyICopSU9idWZmLCAoY2hhciAqKXMsIChjaGFyICopYTEsIChjaGFyICopYTIpOworICAgIHJldHVybiBlbXNnKElPYnVmZik7Cit9CisKKy8qCisgKiBQcmludCBhbiBlcnJvciBtZXNzYWdlIHdpdGggb25lICIlbGQiIGFuZCBvbmUgbG9uZyBpbnQgYXJndW1lbnQuCisgKi8KKyAgICBpbnQKK2Vtc2duKHMsIG4pCisgICAgY2hhcl91CSpzOworICAgIGxvbmcJbjsKK3sKKyAgICBpZiAoKGVtc2dfb2ZmID4gMCAmJiAqcF9kZWJ1ZyA9PSBOVUwpCisjaWZkZWYgRkVBVF9FVkFMCisJICAgIHx8IGVtc2dfc2tpcCA+IDAKKyNlbmRpZgorCSAgICApCisJcmV0dXJuIFRSVUU7CQkvKiBubyBlcnJvciBtZXNzYWdlcyBhdCB0aGUgbW9tZW50ICovCisgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgKGNoYXIgKilzLCBuKTsKKyAgICByZXR1cm4gZW1zZyhJT2J1ZmYpOworfQorCisvKgorICogTGlrZSBtc2coKSwgYnV0IHRydW5jYXRlIHRvIGEgc2luZ2xlIGxpbmUgaWYgcF9zaG0gY29udGFpbnMgJ3QnLCBvciB3aGVuCisgKiAiZm9yY2UiIGlzIFRSVUUuICBUaGlzIHRydW5jYXRlcyBpbiBhbm90aGVyIHdheSBhcyBmb3Igbm9ybWFsIG1lc3NhZ2VzLgorICogQ2FyZWZ1bDogVGhlIHN0cmluZyBtYXkgYmUgY2hhbmdlZCBieSBtc2dfbWF5X3RydW5jKCkhCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcHJpbnRlZCBtZXNzYWdlLCBpZiB3YWl0X3JldHVybigpIG5vdCBjYWxsZWQuCisgKi8KKyAgICBjaGFyX3UgKgorbXNnX3RydW5jX2F0dHIocywgZm9yY2UsIGF0dHIpCisgICAgY2hhcl91CSpzOworICAgIGludAkJZm9yY2U7CisgICAgaW50CQlhdHRyOworeworICAgIGludAkJbjsKKworICAgIC8qIEFkZCBtZXNzYWdlIHRvIGhpc3RvcnkgYmVmb3JlIHRydW5jYXRpbmcgKi8KKyAgICBhZGRfbXNnX2hpc3QocywgLTEsIGF0dHIpOworCisgICAgcyA9IG1zZ19tYXlfdHJ1bmMoZm9yY2UsIHMpOworCisgICAgbXNnX2hpc3Rfb2ZmID0gVFJVRTsKKyAgICBuID0gbXNnX2F0dHIocywgYXR0cik7CisgICAgbXNnX2hpc3Rfb2ZmID0gRkFMU0U7CisKKyAgICBpZiAobikKKwlyZXR1cm4gczsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIENoZWNrIGlmIG1lc3NhZ2UgInMiIHNob3VsZCBiZSB0cnVuY2F0ZWQgYXQgdGhlIHN0YXJ0IChmb3IgZmlsZW5hbWVzKS4KKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIHRydW5jYXRlZCBtZXNzYWdlIHN0YXJ0cy4KKyAqIE5vdGU6IE1heSBjaGFuZ2UgdGhlIG1lc3NhZ2UgYnkgcmVwbGFjaW5nIGEgY2hhcmFjdGVyIHdpdGggJzwnLgorICovCisgICAgY2hhcl91ICoKK21zZ19tYXlfdHJ1bmMoZm9yY2UsIHMpCisgICAgaW50CQlmb3JjZTsKKyAgICBjaGFyX3UJKnM7Cit7CisgICAgaW50CQluOworICAgIGludAkJcm9vbTsKKworICAgIHJvb20gPSAoaW50KShSb3dzIC0gY21kbGluZV9yb3cgLSAxKSAqIENvbHVtbnMgKyBzY19jb2wgLSAxOworICAgIGlmICgoZm9yY2UgfHwgKHNob3J0bWVzcyhTSE1fVFJVTkMpICYmICFleG1vZGVfYWN0aXZlKSkKKwkgICAgJiYgKG4gPSAoaW50KVNUUkxFTihzKSAtIHJvb20pID4gMCkKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBpbnQJc2l6ZSA9IHZpbV9zdHJzaXplKHMpOworCisJICAgIGZvciAobiA9IDA7IHNpemUgPj0gcm9vbTsgKQorCSAgICB7CisJCXNpemUgLT0gKCptYl9wdHIyY2VsbHMpKHMgKyBuKTsKKwkJbiArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHMgKyBuKTsKKwkgICAgfQorCSAgICAtLW47CisJfQorI2VuZGlmCisJcyArPSBuOworCSpzID0gJzwnOworICAgIH0KKyAgICByZXR1cm4gczsKK30KKworICAgIHN0YXRpYyB2b2lkCithZGRfbXNnX2hpc3QocywgbGVuLCBhdHRyKQorICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWxlbjsJCS8qIC0xIGZvciB1bmRldGVybWluZWQgbGVuZ3RoICovCisgICAgaW50CQlhdHRyOworeworICAgIHN0cnVjdCBtc2dfaGlzdCAqcDsKKworICAgIGlmIChtc2dfaGlzdF9vZmYgfHwgbXNnX3NpbGVudCAhPSAwKQorCXJldHVybjsKKworICAgIC8qIERvbid0IGxldCB0aGUgbWVzc2FnZSBoaXN0b3J5IGdldCB0b28gYmlnICovCisgICAgd2hpbGUgKG1zZ19oaXN0X2xlbiA+IDIwKQorICAgIHsKKwlwID0gZmlyc3RfbXNnX2hpc3Q7CisJZmlyc3RfbXNnX2hpc3QgPSBwLT5uZXh0OworCXZpbV9mcmVlKHAtPm1zZyk7CisJdmltX2ZyZWUocCk7CisJLS1tc2dfaGlzdF9sZW47CisgICAgfQorICAgIC8qIGFsbG9jYXRlIGFuIGVudHJ5IGFuZCBhZGQgdGhlIG1lc3NhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgaGlzdG9yeSAqLworICAgIHAgPSAoc3RydWN0IG1zZ19oaXN0ICopYWxsb2MoKGludClzaXplb2Yoc3RydWN0IG1zZ19oaXN0KSk7CisgICAgaWYgKHAgIT0gTlVMTCkKKyAgICB7CisJaWYgKGxlbiA8IDApCisJICAgIGxlbiA9IChpbnQpU1RSTEVOKHMpOworCS8qIHJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBuZXdsaW5lcyAqLworCXdoaWxlIChsZW4gPiAwICYmICpzID09ICdcbicpCisJeworCSAgICArK3M7CisJICAgIC0tbGVuOworCX0KKwl3aGlsZSAobGVuID4gMCAmJiBzW2xlbiAtIDFdID09ICdcbicpCisJICAgIC0tbGVuOworCXAtPm1zZyA9IHZpbV9zdHJuc2F2ZShzLCBsZW4pOworCXAtPm5leHQgPSBOVUxMOworCXAtPmF0dHIgPSBhdHRyOworCWlmIChsYXN0X21zZ19oaXN0ICE9IE5VTEwpCisJICAgIGxhc3RfbXNnX2hpc3QtPm5leHQgPSBwOworCWxhc3RfbXNnX2hpc3QgPSBwOworCWlmIChmaXJzdF9tc2dfaGlzdCA9PSBOVUxMKQorCSAgICBmaXJzdF9tc2dfaGlzdCA9IGxhc3RfbXNnX2hpc3Q7CisJKyttc2dfaGlzdF9sZW47CisgICAgfQorfQorCisvKgorICogIjptZXNzYWdlcyIgY29tbWFuZC4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorZXhfbWVzc2FnZXMoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBzdHJ1Y3QgbXNnX2hpc3QgKnA7CisgICAgY2hhcl91CSAgICAqczsKKworICAgIG1zZ19oaXN0X29mZiA9IFRSVUU7CisKKyAgICBzID0gbWNoX2dldGVudigoY2hhcl91ICopIkxBTkciKTsKKyAgICBpZiAocyAhPSBOVUxMICYmICpzICE9IE5VTCkKKwltc2dfYXR0cigoY2hhcl91ICopCisJCV8oIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IiksCisJCWhsX2F0dHIoSExGX1QpKTsKKworICAgIGZvciAocCA9IGZpcnN0X21zZ19oaXN0OyBwICE9IE5VTEw7IHAgPSBwLT5uZXh0KQorCWlmIChwLT5tc2cgIT0gTlVMTCkKKwkgICAgbXNnX2F0dHIocC0+bXNnLCBwLT5hdHRyKTsKKworICAgIG1zZ19oaXN0X29mZiA9IEZBTFNFOworfQorCisjaWYgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpIHx8IGRlZmluZWQoUFJPVE8pCitzdGF0aWMgdm9pZCBtc2dfZW5kX3Byb21wdCBfX0FSR1MoKHZvaWQpKTsKKworLyoKKyAqIENhbGwgdGhpcyBhZnRlciBwcm9tcHRpbmcgdGhlIHVzZXIuICBUaGlzIHdpbGwgYXZvaWQgYSBoaXQtcmV0dXJuIG1lc3NhZ2UKKyAqIGFuZCBhIGRlbGF5LgorICovCisgICAgc3RhdGljIHZvaWQKK21zZ19lbmRfcHJvbXB0KCkKK3sKKyAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisgICAgZW1zZ19vbl9kaXNwbGF5ID0gRkFMU0U7CisgICAgY21kbGluZV9yb3cgPSBtc2dfcm93OworICAgIG1zZ19jb2wgPSAwOworICAgIG1zZ19jbHJfZW9zKCk7Cit9CisjZW5kaWYKKworLyoKKyAqIHdhaXQgZm9yIHRoZSB1c2VyIHRvIGhpdCBhIGtleSAobm9ybWFsbHkgYSByZXR1cm4pCisgKiBpZiAncmVkcmF3JyBpcyBUUlVFLCBjbGVhciBhbmQgcmVkcmF3IHRoZSBzY3JlZW4KKyAqIGlmICdyZWRyYXcnIGlzIEZBTFNFLCBqdXN0IHJlZHJhdyB0aGUgc2NyZWVuCisgKiBpZiAncmVkcmF3JyBpcyAtMSwgZG9uJ3QgcmVkcmF3IGF0IGFsbAorICovCisgICAgdm9pZAord2FpdF9yZXR1cm4ocmVkcmF3KQorICAgIGludAkJcmVkcmF3OworeworICAgIGludAkJYzsKKyAgICBpbnQJCW9sZFN0YXRlOworICAgIGludAkJdG1wU3RhdGU7CisjaWZuZGVmIE9SR19ISVRSRVRVUk4KKyAgICBpbnQJCWhhZF9nb3RfaW50OworI2VuZGlmCisKKyAgICBpZiAocmVkcmF3ID09IFRSVUUpCisJbXVzdF9yZWRyYXcgPSBDTEVBUjsKKworICAgIC8qIElmIHVzaW5nICI6c2lsZW50IGNtZCIsIGRvbid0IHdhaXQgZm9yIGEgcmV0dXJuLiAgQWxzbyBkb24ndCBzZXQKKyAgICAgKiBuZWVkX3dhaXRfcmV0dXJuIHRvIGRvIGl0IGxhdGVyLiAqLworICAgIGlmIChtc2dfc2lsZW50ICE9IDApCisJcmV0dXJuOworCisvKgorICogV2l0aCB0aGUgZ2xvYmFsIGNvbW1hbmQgKGFuZCBzb21lIG90aGVycykgd2Ugb25seSBuZWVkIG9uZSByZXR1cm4gYXQgdGhlCisgKiBlbmQuIEFkanVzdCBjbWRsaW5lX3JvdyB0byBhdm9pZCB0aGUgbmV4dCBtZXNzYWdlIG92ZXJ3cml0aW5nIHRoZSBsYXN0IG9uZS4KKyAqIFdoZW4gaW5zaWRlIHZnZXRjKCksIHdlIGNhbid0IHdhaXQgZm9yIGEgdHlwZWQgY2hhcmFjdGVyIGF0IGFsbC4KKyAqLworICAgIGlmICh2Z2V0Y19idXN5KQorCXJldHVybjsKKyAgICBpZiAobm9fd2FpdF9yZXR1cm4pCisgICAgeworCW5lZWRfd2FpdF9yZXR1cm4gPSBUUlVFOworCWlmICghZXhtb2RlX2FjdGl2ZSkKKwkgICAgY21kbGluZV9yb3cgPSBtc2dfcm93OworCXJldHVybjsKKyAgICB9CisKKyAgICByZWRpcl9vZmYgPSBUUlVFOwkJLyogZG9uJ3QgcmVkaXJlY3QgdGhpcyBtZXNzYWdlICovCisgICAgb2xkU3RhdGUgPSBTdGF0ZTsKKyAgICBpZiAocXVpdF9tb3JlKQorICAgIHsKKwljID0gQ0FSOwkJLyoganVzdCBwcmV0ZW5kIENSIHdhcyBoaXQgKi8KKwlxdWl0X21vcmUgPSBGQUxTRTsKKwlnb3RfaW50ID0gRkFMU0U7CisgICAgfQorICAgIGVsc2UgaWYgKGV4bW9kZV9hY3RpdmUpCisgICAgeworCU1TR19QVVRTKCIgIik7CQkvKiBtYWtlIHN1cmUgdGhlIGN1cnNvciBpcyBvbiB0aGUgcmlnaHQgbGluZSAqLworCWMgPSBDQVI7CQkvKiBubyBuZWVkIGZvciBhIHJldHVybiBpbiBleCBtb2RlICovCisJZ290X2ludCA9IEZBTFNFOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIE1ha2Ugc3VyZSB0aGUgaGl0LXJldHVybiBwcm9tcHQgaXMgb24gc2NyZWVuIHdoZW4gJ2d1aW9wdGlvbnMnIHdhcworCSAqIGp1c3QgY2hhbmdlZC4gKi8KKwlzY3JlZW5hbGxvYyhGQUxTRSk7CisKKwlTdGF0ZSA9IEhJVFJFVFVSTjsKKyNpZmRlZiBGRUFUX01PVVNFCisJc2V0bW91c2UoKTsKKyNlbmRpZgorI2lmZGVmIFVTRV9PTl9GTFlfU0NST0xMCisJZG9udF9zY3JvbGwgPSBUUlVFOwkJLyogZGlzYWxsb3cgc2Nyb2xsaW5nIGhlcmUgKi8KKyNlbmRpZgorCWhpdF9yZXR1cm5fbXNnKCk7CisKKyNpZmRlZiBPUkdfSElUUkVUVVJOCisJZG8KKwl7CisJICAgIGMgPSBzYWZlX3ZnZXRjKCk7CisJfSB3aGlsZSAodmltX3N0cmNocigoY2hhcl91ICopIlxyXG46ICIsIGMpID09IE5VTEwpOworCWlmIChjID09ICc6JykJCQkvKiB0aGlzIGNhbiB2aSB0b28gKGJ1dCBub3QgYWx3YXlzISkgKi8KKwkgICAgc3R1ZmZjaGFyUmVhZGJ1ZmYoYyk7CisjZWxzZQorCWRvCisJeworCSAgICAvKiBSZW1lbWJlciAiZ290X2ludCIsIGlmIGl0IGlzIHNldCB2Z2V0YygpIHByb2JhYmx5IHJldHVybnMgYQorCSAgICAgKiBDVFJMLUMsIGJ1dCB3ZSBuZWVkIHRvIGxvb3AgdGhlbi4gKi8KKwkgICAgaGFkX2dvdF9pbnQgPSBnb3RfaW50OworCSAgICBjID0gc2FmZV92Z2V0YygpOworCSAgICBpZiAoIWdsb2JhbF9idXN5KQorCQlnb3RfaW50ID0gRkFMU0U7CisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKwkgICAgLyogU3RyYW5nZSB3YXkgdG8gYWxsb3cgY29weWluZyAoeWFua2luZykgYSBtb2RlbGVzcyBzZWxlY3Rpb24gYXQKKwkgICAgICogdGhlIGhpdC1lbnRlciBwcm9tcHQuICBVc2UgQ1RSTC1ZLCBiZWNhdXNlIHRoZSBzYW1lIGlzIHVzZWQgaW4KKwkgICAgICogQ21kbGluZS1tb2RlIGFuZCBpdCdzIGhhcm1sZXNzIHdoZW4gdGhlcmUgaXMgbm8gc2VsZWN0aW9uLiAqLworCSAgICBpZiAoYyA9PSBDdHJsX1kgJiYgY2xpcF9zdGFyLnN0YXRlID09IFNFTEVDVF9ET05FKQorCSAgICB7CisJCWNsaXBfY29weV9tb2RlbGVzc19zZWxlY3Rpb24oVFJVRSk7CisJCWMgPSBLX0lHTk9SRTsKKwkgICAgfQorI2VuZGlmCisJfSB3aGlsZSAoKGhhZF9nb3RfaW50ICYmIGMgPT0gQ3RybF9DKQorCQkJCXx8IGMgPT0gS19JR05PUkUKKyNpZmRlZiBGRUFUX0dVSQorCQkJCXx8IGMgPT0gS19WRVJfU0NST0xMQkFSIHx8IGMgPT0gS19IT1JfU0NST0xMQkFSCisjZW5kaWYKKyNpZmRlZiBGRUFUX01PVVNFCisJCQkJfHwgYyA9PSBLX0xFRlREUkFHICAgfHwgYyA9PSBLX0xFRlRSRUxFQVNFCisJCQkJfHwgYyA9PSBLX01JRERMRURSQUcgfHwgYyA9PSBLX01JRERMRVJFTEVBU0UKKwkJCQl8fCBjID09IEtfUklHSFREUkFHICB8fCBjID09IEtfUklHSFRSRUxFQVNFCisJCQkJfHwgYyA9PSBLX01PVVNFRE9XTiAgfHwgYyA9PSBLX01PVVNFVVAKKwkJCQl8fCAoIW1vdXNlX2hhcyhNT1VTRV9SRVRVUk4pCisJCQkJICAgICYmIG1vdXNlX3JvdyA8IG1zZ19yb3cKKwkJCQkgICAgJiYgKGMgPT0gS19MRUZUTU9VU0UKKwkJCQkJfHwgYyA9PSBLX01JRERMRU1PVVNFCisJCQkJCXx8IGMgPT0gS19SSUdIVE1PVVNFCisJCQkJCXx8IGMgPT0gS19YMU1PVVNFCisJCQkJCXx8IGMgPT0gS19YMk1PVVNFKSkKKyNlbmRpZgorCQkJCSk7CisJdWlfYnJlYWtjaGVjaygpOworI2lmZGVmIEZFQVRfTU9VU0UKKwkvKgorCSAqIEF2b2lkIHRoYXQgdGhlIG1vdXNlLXVwIGV2ZW50IGNhdXNlcyB2aXN1YWwgbW9kZSB0byBzdGFydC4KKwkgKi8KKwlpZiAoYyA9PSBLX0xFRlRNT1VTRSB8fCBjID09IEtfTUlERExFTU9VU0UgfHwgYyA9PSBLX1JJR0hUTU9VU0UKKwkJCQkJICB8fCBjID09IEtfWDFNT1VTRSB8fCBjID09IEtfWDJNT1VTRSkKKwkgICAgKHZvaWQpanVtcF90b19tb3VzZShNT1VTRV9TRVRQT1MsIE5VTEwsIDApOworCWVsc2UKKyNlbmRpZgorCSAgICBpZiAodmltX3N0cmNocigoY2hhcl91ICopIlxyXG4gIiwgYykgPT0gTlVMTCAmJiBjICE9IEN0cmxfQykKKwl7CisJICAgIHN0dWZmY2hhclJlYWRidWZmKGMpOworCSAgICBkb19yZWRyYXcgPSBUUlVFOwkgICAgLyogbmVlZCBhIHJlZHJhdyBldmVuIHRob3VnaCB0aGVyZSBpcworCQkJCSAgICAgICBzb21ldGhpbmcgaW4gdGhlIHN0dWZmIGJ1ZmZlciAqLworCX0KKyNlbmRpZgorICAgIH0KKyAgICByZWRpcl9vZmYgPSBGQUxTRTsKKworICAgIC8qCisgICAgICogSWYgdGhlIHVzZXIgaGl0cyAnOicsICc/JyBvciAnLycgd2UgZ2V0IGEgY29tbWFuZCBsaW5lIGZyb20gdGhlIG5leHQKKyAgICAgKiBsaW5lLgorICAgICAqLworICAgIGlmIChjID09ICc6JyB8fCBjID09ICc/JyB8fCBjID09ICcvJykKKyAgICB7CisJaWYgKCFleG1vZGVfYWN0aXZlKQorCSAgICBjbWRsaW5lX3JvdyA9IG1zZ19yb3c7CisJc2tpcF9yZWRyYXcgPSBUUlVFOwkgICAgLyogc2tpcCByZWRyYXcgb25jZSAqLworCWRvX3JlZHJhdyA9IEZBTFNFOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlIHdpbmRvdyBzaXplIGNoYW5nZWQgc2V0X3NoZWxsc2l6ZSgpIHdpbGwgcmVkcmF3IHRoZSBzY3JlZW4uCisgICAgICogT3RoZXJ3aXNlIHRoZSBzY3JlZW4gaXMgb25seSByZWRyYXduIGlmICdyZWRyYXcnIGlzIHNldCBhbmQgbm8gJzonCisgICAgICogdHlwZWQuCisgICAgICovCisgICAgdG1wU3RhdGUgPSBTdGF0ZTsKKyAgICBTdGF0ZSA9IG9sZFN0YXRlOwkJICAgIC8qIHJlc3RvcmUgU3RhdGUgYmVmb3JlIHNldF9zaGVsbHNpemUgKi8KKyNpZmRlZiBGRUFUX01PVVNFCisgICAgc2V0bW91c2UoKTsKKyNlbmRpZgorICAgIG1zZ19jaGVjaygpOworCisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykKKyAgICAvKgorICAgICAqIFdoZW4gc3dpdGNoaW5nIHNjcmVlbnMsIHdlIG5lZWQgdG8gb3V0cHV0IGFuIGV4dHJhIG5ld2xpbmUgb24gZXhpdC4KKyAgICAgKi8KKyAgICBpZiAoc3dhcHBpbmdfc2NyZWVuKCkgJiYgIXRlcm1jYXBfYWN0aXZlKQorCW5ld2xpbmVfb25fZXhpdCA9IFRSVUU7CisjZW5kaWYKKworICAgIG5lZWRfd2FpdF9yZXR1cm4gPSBGQUxTRTsKKyAgICBkaWRfd2FpdF9yZXR1cm4gPSBUUlVFOworICAgIGVtc2dfb25fZGlzcGxheSA9IEZBTFNFOwkvKiBjYW4gZGVsZXRlIGVycm9yIG1lc3NhZ2Ugbm93ICovCisgICAgbGluZXNfbGVmdCA9IC0xOwkJLyogcmVzZXQgbGluZXNfbGVmdCBhdCBuZXh0IG1zZ19zdGFydCgpICovCisgICAgcmVzZXRfbGFzdF9zb3VyY2luZygpOworICAgIGlmIChrZWVwX21zZyAhPSBOVUxMICYmIHZpbV9zdHJzaXplKGtlZXBfbXNnKSA+PQorCQkJCSAgKFJvd3MgLSBjbWRsaW5lX3JvdyAtIDEpICogQ29sdW1ucyArIHNjX2NvbCkKKyAgICB7CisJdmltX2ZyZWUoa2VlcF9tc2cpOworCWtlZXBfbXNnID0gTlVMTDsJICAgIC8qIGRvbid0IHJlZGlzcGxheSBtZXNzYWdlLCBpdCdzIHRvbyBsb25nICovCisgICAgfQorCisgICAgaWYgKHRtcFN0YXRlID09IFNFVFdTSVpFKQkgICAgLyogZ290IHJlc2l6ZSBldmVudCB3aGlsZSBpbiB2Z2V0YygpICovCisgICAgeworCXN0YXJ0dGVybWNhcCgpOwkJICAgIC8qIHN0YXJ0IHRlcm1jYXAgYmVmb3JlIHJlZHJhd2luZyAqLworCXNoZWxsX3Jlc2l6ZWQoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIXNraXBfcmVkcmF3CisJICAgICYmIChyZWRyYXcgPT0gVFJVRSB8fCAobXNnX3Njcm9sbGVkICE9IDAgJiYgcmVkcmF3ICE9IC0xKSkpCisgICAgeworCXN0YXJ0dGVybWNhcCgpOwkJICAgIC8qIHN0YXJ0IHRlcm1jYXAgYmVmb3JlIHJlZHJhd2luZyAqLworCXJlZHJhd19sYXRlcihWQUxJRCk7CisgICAgfQorfQorCisvKgorICogV3JpdGUgdGhlIGhpdC1yZXR1cm4gcHJvbXB0LgorICovCisgICAgc3RhdGljIHZvaWQKK2hpdF9yZXR1cm5fbXNnKCkKK3sKKyAgICBpZiAobXNnX2RpZG91dCkJCSAgICAvKiBzdGFydCBvbiBhIG5ldyBsaW5lICovCisJbXNnX3B1dGNoYXIoJ1xuJyk7CisgICAgaWYgKGdvdF9pbnQpCisJTVNHX1BVVFMoXygiSW50ZXJydXB0OiAiKSk7CisKKyNpZmRlZiBPUkdfSElUUkVUVVJOCisgICAgTVNHX1BVVFNfQVRUUihfKCJIaXQgRU5URVIgdG8gY29udGludWUiKSwgaGxfYXR0cihITEZfUikpOworI2Vsc2UKKyAgICBNU0dfUFVUU19BVFRSKF8oIkhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUiKSwgaGxfYXR0cihITEZfUikpOworI2VuZGlmCisgICAgaWYgKCFtc2dfdXNlX3ByaW50ZigpKQorCW1zZ19jbHJfZW9zKCk7Cit9CisKKy8qCisgKiBTZXQgImtlZXBfbXNnIiB0byAicyIuICBGcmVlIHRoZSBvbGQgdmFsdWUgYW5kIGNoZWNrIGZvciBOVUxMIHBvaW50ZXIuCisgKi8KKyAgICB2b2lkCitzZXRfa2VlcF9tc2cocykKKyAgICBjaGFyX3UJKnM7Cit7CisgICAgdmltX2ZyZWUoa2VlcF9tc2cpOworICAgIGlmIChzICE9IE5VTEwgJiYgbXNnX3NpbGVudCA9PSAwKQorCWtlZXBfbXNnID0gdmltX3N0cnNhdmUocyk7CisgICAgZWxzZQorCWtlZXBfbXNnID0gTlVMTDsKK30KKworLyoKKyAqIFByZXBhcmUgZm9yIG91dHB1dHRpbmcgY2hhcmFjdGVycyBpbiB0aGUgY29tbWFuZCBsaW5lLgorICovCisgICAgdm9pZAorbXNnX3N0YXJ0KCkKK3sKKyAgICBpbnQJCWRpZF9yZXR1cm4gPSBGQUxTRTsKKworICAgIHZpbV9mcmVlKGtlZXBfbXNnKTsKKyAgICBrZWVwX21zZyA9IE5VTEw7CQkJLyogZG9uJ3QgZGlzcGxheSBvbGQgbWVzc2FnZSBub3cgKi8KKyAgICBpZiAoIW1zZ19zY3JvbGwgJiYgZnVsbF9zY3JlZW4pCS8qIG92ZXJ3cml0ZSBsYXN0IG1lc3NhZ2UgKi8KKyAgICB7CisJbXNnX3JvdyA9IGNtZGxpbmVfcm93OworCW1zZ19jb2wgPQorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJICAgIGNtZG1zZ19ybCA/IENvbHVtbnMgLSAxIDoKKyNlbmRpZgorCSAgICAwOworICAgIH0KKyAgICBlbHNlIGlmIChtc2dfZGlkb3V0KQkJICAgIC8qIHN0YXJ0IG1lc3NhZ2Ugb24gbmV4dCBsaW5lICovCisgICAgeworCW1zZ19wdXRjaGFyKCdcbicpOworCWRpZF9yZXR1cm4gPSBUUlVFOworCWlmIChleG1vZGVfYWN0aXZlICE9IEVYTU9ERV9OT1JNQUwpCisJICAgIGNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKyAgICB9CisgICAgaWYgKCFtc2dfZGlkYW55IHx8IGxpbmVzX2xlZnQgPCAwKQorCW1zZ19zdGFydGhlcmUoKTsKKyAgICBpZiAobXNnX3NpbGVudCA9PSAwKQorICAgIHsKKwltc2dfZGlkb3V0ID0gRkFMU0U7CQkgICAgLyogbm8gb3V0cHV0IG9uIGN1cnJlbnQgbGluZSB5ZXQgKi8KKwljdXJzb3Jfb2ZmKCk7CisgICAgfQorCisgICAgLyogd2hlbiByZWRpcmVjdGluZywgbWF5IG5lZWQgdG8gc3RhcnQgYSBuZXcgbGluZS4gKi8KKyAgICBpZiAoIWRpZF9yZXR1cm4pCisJcmVkaXJfd3JpdGUoKGNoYXJfdSAqKSJcbiIsIC0xKTsKK30KKworLyoKKyAqIE5vdGUgdGhhdCB0aGUgY3VycmVudCBtc2cgcG9zaXRpb24gaXMgd2hlcmUgbWVzc2FnZXMgc3RhcnQuCisgKi8KKyAgICB2b2lkCittc2dfc3RhcnRoZXJlKCkKK3sKKyAgICBsaW5lc19sZWZ0ID0gY21kbGluZV9yb3c7CisgICAgbXNnX2RpZGFueSA9IEZBTFNFOworfQorCisgICAgdm9pZAorbXNnX3B1dGNoYXIoYykKKyAgICBpbnQJCWM7Cit7CisgICAgbXNnX3B1dGNoYXJfYXR0cihjLCAwKTsKK30KKworICAgIHZvaWQKK21zZ19wdXRjaGFyX2F0dHIoYywgYXR0cikKKyAgICBpbnQJCWM7CisgICAgaW50CQlhdHRyOworeworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBjaGFyX3UJYnVmW01CX01BWEJZVEVTICsgMV07CisjZWxzZQorICAgIGNoYXJfdQlidWZbNF07CisjZW5kaWYKKworICAgIGlmIChJU19TUEVDSUFMKGMpKQorICAgIHsKKwlidWZbMF0gPSBLX1NQRUNJQUw7CisJYnVmWzFdID0gS19TRUNPTkQoYyk7CisJYnVmWzJdID0gS19USElSRChjKTsKKwlidWZbM10gPSBOVUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWJ1ZlsoKm1iX2NoYXIyYnl0ZXMpKGMsIGJ1ZildID0gTlVMOworI2Vsc2UKKwlidWZbMF0gPSBjOworCWJ1ZlsxXSA9IE5VTDsKKyNlbmRpZgorICAgIH0KKyAgICBtc2dfcHV0c19hdHRyKGJ1ZiwgYXR0cik7Cit9CisKKyAgICB2b2lkCittc2dfb3V0bnVtKG4pCisgICAgbG9uZwluOworeworICAgIGNoYXJfdQlidWZbMjBdOworCisgICAgc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVsZCIsIG4pOworICAgIG1zZ19wdXRzKGJ1Zik7Cit9CisKKyAgICB2b2lkCittc2dfaG9tZV9yZXBsYWNlKGZuYW1lKQorICAgIGNoYXJfdQkqZm5hbWU7Cit7CisgICAgbXNnX2hvbWVfcmVwbGFjZV9hdHRyKGZuYW1lLCAwKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9GSU5EX0lEKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK21zZ19ob21lX3JlcGxhY2VfaGwoZm5hbWUpCisgICAgY2hhcl91CSpmbmFtZTsKK3sKKyAgICBtc2dfaG9tZV9yZXBsYWNlX2F0dHIoZm5hbWUsIGhsX2F0dHIoSExGX0QpKTsKK30KKyNlbmRpZgorCisgICAgc3RhdGljIHZvaWQKK21zZ19ob21lX3JlcGxhY2VfYXR0cihmbmFtZSwgYXR0cikKKyAgICBjaGFyX3UgICpmbmFtZTsKKyAgICBpbnQJICAgIGF0dHI7Cit7CisgICAgY2hhcl91CSpuYW1lOworCisgICAgbmFtZSA9IGhvbWVfcmVwbGFjZV9zYXZlKE5VTEwsIGZuYW1lKTsKKyAgICBpZiAobmFtZSAhPSBOVUxMKQorCW1zZ19vdXR0cmFuc19hdHRyKG5hbWUsIGF0dHIpOworICAgIHZpbV9mcmVlKG5hbWUpOworfQorCisvKgorICogT3V0cHV0ICdsZW4nIGNoYXJhY3RlcnMgaW4gJ3N0cicgKGluY2x1ZGluZyBOVUxzKSB3aXRoIHRyYW5zbGF0aW9uCisgKiBpZiAnbGVuJyBpcyAtMSwgb3V0cHV0IHVwdG8gYSBOVUwgY2hhcmFjdGVyLgorICogVXNlIGF0dHJpYnV0ZXMgJ2F0dHInLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpdCB0YWtlcyBvbiB0aGUgc2NyZWVuLgorICovCisgICAgaW50Cittc2dfb3V0dHJhbnMoc3RyKQorICAgIGNoYXJfdQkgICAgKnN0cjsKK3sKKyAgICByZXR1cm4gbXNnX291dHRyYW5zX2F0dHIoc3RyLCAwKTsKK30KKworICAgIGludAorbXNnX291dHRyYW5zX2F0dHIoc3RyLCBhdHRyKQorICAgIGNoYXJfdQkqc3RyOworICAgIGludAkJYXR0cjsKK3sKKyAgICByZXR1cm4gbXNnX291dHRyYW5zX2xlbl9hdHRyKHN0ciwgKGludClTVFJMRU4oc3RyKSwgYXR0cik7Cit9CisKKyAgICBpbnQKK21zZ19vdXR0cmFuc19sZW4oc3RyLCBsZW4pCisgICAgY2hhcl91CSpzdHI7CisgICAgaW50CQlsZW47Cit7CisgICAgcmV0dXJuIG1zZ19vdXR0cmFuc19sZW5fYXR0cihzdHIsIGxlbiwgMCk7Cit9CisKKy8qCisgKiBPdXRwdXQgb25lIGNoYXJhY3RlciBhdCAicCIuICBSZXR1cm4gcG9pbnRlciB0byB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgKiBIYW5kbGVzIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKyAqLworICAgIGNoYXJfdSAqCittc2dfb3V0dHJhbnNfb25lKHAsIGF0dHIpCisgICAgY2hhcl91CSpwOworICAgIGludAkJYXR0cjsKK3sKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQlsOworCisgICAgaWYgKGhhc19tYnl0ZSAmJiAobCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkpID4gMSkKKyAgICB7CisJbXNnX291dHRyYW5zX2xlbl9hdHRyKHAsIGwsIGF0dHIpOworCXJldHVybiBwICsgbDsKKyAgICB9CisjZW5kaWYKKyAgICBtc2dfcHV0c19hdHRyKHRyYW5zY2hhcl9ieXRlKCpwKSwgYXR0cik7CisgICAgcmV0dXJuIHAgKyAxOworfQorCisgICAgaW50Cittc2dfb3V0dHJhbnNfbGVuX2F0dHIobXNnc3RyLCBsZW4sIGF0dHIpCisgICAgY2hhcl91CSptc2dzdHI7CisgICAgaW50CQlsZW47CisgICAgaW50CQlhdHRyOworeworICAgIGludAkJcmV0dmFsID0gMDsKKyAgICBjaGFyX3UJKnN0ciA9IG1zZ3N0cjsKKyAgICBjaGFyX3UJKnBsYWluX3N0YXJ0ID0gbXNnc3RyOworICAgIGNoYXJfdQkqczsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQltYl9sOworICAgIGludAkJYzsKKyNlbmRpZgorCisgICAgLyogaWYgTVNHX0hJU1QgZmxhZyBzZXQsIGFkZCBtZXNzYWdlIHRvIGhpc3RvcnkgKi8KKyAgICBpZiAoYXR0ciAmIE1TR19ISVNUKQorICAgIHsKKwlhZGRfbXNnX2hpc3Qoc3RyLCBsZW4sIGF0dHIpOworCWF0dHIgJj0gfk1TR19ISVNUOworICAgIH0KKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKiBJZiB0aGUgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgY29tcG9zaW5nIGNoYXJhY3RlciBmaXJzdCBkcmF3IGEgc3BhY2Ugb24KKyAgICAgKiB3aGljaCB0aGUgY29tcG9zaW5nIGNoYXIgY2FuIGJlIGRyYXduLiAqLworICAgIGlmIChlbmNfdXRmOCAmJiB1dGZfaXNjb21wb3NpbmcodXRmX3B0cjJjaGFyKG1zZ3N0cikpKQorCW1zZ19wdXRzX2F0dHIoKGNoYXJfdSAqKSIgIiwgYXR0cik7CisjZW5kaWYKKworICAgIC8qCisgICAgICogR28gb3ZlciB0aGUgc3RyaW5nLiAgU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSB0cmFuc2xhdGVkIGFuZCBwcmludGVkLgorICAgICAqIE5vcm1hbCBjaGFyYWN0ZXJzIGFyZSBwcmludGVkIHNldmVyYWwgYXQgYSB0aW1lLgorICAgICAqLworICAgIHdoaWxlICgtLWxlbiA+PSAwKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGVuY191dGY4KQorCSAgICAvKiBEb24ndCBpbmNsdWRlIGNvbXBvc2luZyBjaGFycyBhZnRlciB0aGUgZW5kLiAqLworCSAgICBtYl9sID0gdXRmY19wdHIybGVuX2NoZWNrX2xlbihzdHIsIGxlbiArIDEpOworCWVsc2UgaWYgKGhhc19tYnl0ZSkKKwkgICAgbWJfbCA9ICgqbWJfcHRyMmxlbl9jaGVjaykoc3RyKTsKKwllbHNlCisJICAgIG1iX2wgPSAxOworCWlmIChoYXNfbWJ5dGUgJiYgbWJfbCA+IDEpCisJeworCSAgICBjID0gKCptYl9wdHIyY2hhcikoc3RyKTsKKwkgICAgaWYgKHZpbV9pc3ByaW50YyhjKSkKKwkJLyogcHJpbnRhYmxlIG11bHRpLWJ5dGUgY2hhcjogY291bnQgdGhlIGNlbGxzLiAqLworCQlyZXR2YWwgKz0gKCptYl9wdHIyY2VsbHMpKHN0cik7CisJICAgIGVsc2UKKwkgICAgeworCQkvKiB1bnByaW50YWJsZSBtdWx0aS1ieXRlIGNoYXI6IHByaW50IHRoZSBwcmludGFibGUgY2hhcnMgc28KKwkJICogZmFyIGFuZCB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIHVucHJpbnRhYmxlIGNoYXIuICovCisJCWlmIChzdHIgPiBwbGFpbl9zdGFydCkKKwkJICAgIG1zZ19wdXRzX2F0dHJfbGVuKHBsYWluX3N0YXJ0LCAoaW50KShzdHIgLSBwbGFpbl9zdGFydCksCisJCQkJCQkJCQlhdHRyKTsKKwkJcGxhaW5fc3RhcnQgPSBzdHIgKyBtYl9sOworCQltc2dfcHV0c19hdHRyKHRyYW5zY2hhcihjKSwgYXR0ciA9PSAwID8gaGxfYXR0cihITEZfOCkgOiBhdHRyKTsKKwkJcmV0dmFsICs9IGNoYXIyY2VsbHMoYyk7CisJICAgIH0KKwkgICAgbGVuIC09IG1iX2wgLSAxOworCSAgICBzdHIgKz0gbWJfbDsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBzID0gdHJhbnNjaGFyX2J5dGUoKnN0cik7CisJICAgIGlmIChzWzFdICE9IE5VTCkKKwkgICAgeworCQkvKiB1bnByaW50YWJsZSBjaGFyOiBwcmludCB0aGUgcHJpbnRhYmxlIGNoYXJzIHNvIGZhciBhbmQgdGhlCisJCSAqIHRyYW5zbGF0aW9uIG9mIHRoZSB1bnByaW50YWJsZSBjaGFyLiAqLworCQlpZiAoc3RyID4gcGxhaW5fc3RhcnQpCisJCSAgICBtc2dfcHV0c19hdHRyX2xlbihwbGFpbl9zdGFydCwgKGludCkoc3RyIC0gcGxhaW5fc3RhcnQpLAorCQkJCQkJCQkJYXR0cik7CisJCXBsYWluX3N0YXJ0ID0gc3RyICsgMTsKKwkJbXNnX3B1dHNfYXR0cihzLCBhdHRyID09IDAgPyBobF9hdHRyKEhMRl84KSA6IGF0dHIpOworCSAgICB9CisJICAgIHJldHZhbCArPSBwdHIyY2VsbHMoc3RyKTsKKwkgICAgKytzdHI7CisJfQorICAgIH0KKworICAgIGlmIChzdHIgPiBwbGFpbl9zdGFydCkKKwkvKiBwcmludCB0aGUgcHJpbnRhYmxlIGNoYXJzIGF0IHRoZSBlbmQgKi8KKwltc2dfcHV0c19hdHRyX2xlbihwbGFpbl9zdGFydCwgKGludCkoc3RyIC0gcGxhaW5fc3RhcnQpLCBhdHRyKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorbXNnX21ha2UoYXJnKQorICAgIGNoYXJfdSAgKmFyZzsKK3sKKyAgICBpbnQJICAgIGk7CisgICAgc3RhdGljIGNoYXJfdSAqc3RyID0gKGNoYXJfdSAqKSJlZWZmb2MiLCAqcnMgPSAoY2hhcl91ICopIlBsb24jZHFnI3Z4amR1QiI7CisKKyAgICBhcmcgPSBza2lwd2hpdGUoYXJnKTsKKyAgICBmb3IgKGkgPSA1OyAqYXJnICYmIGkgPj0gMDsgLS1pKQorCWlmICgqYXJnKysgIT0gc3RyW2ldKQorCSAgICBicmVhazsKKyAgICBpZiAoaSA8IDApCisgICAgeworCW1zZ19wdXRjaGFyKCdcbicpOworCWZvciAoaSA9IDA7IHJzW2ldOyArK2kpCisJICAgIG1zZ19wdXRjaGFyKHJzW2ldIC0gMyk7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBPdXRwdXQgdGhlIHN0cmluZyAnc3RyJyB1cHRvIGEgTlVMIGNoYXJhY3Rlci4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaXQgdGFrZXMgb24gdGhlIHNjcmVlbi4KKyAqCisgKiBJZiBLX1NQRUNJQUwgaXMgZW5jb3VudGVyZWQsIHRoZW4gaXQgaXMgdGFrZW4gaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKKyAqIGZvbGxvd2luZyBjaGFyYWN0ZXIgYW5kIHNob3duIGFzIDxGMT4sIDxTLVVwPiBldGMuICBBbnkgb3RoZXIgY2hhcmFjdGVyCisgKiB3aGljaCBpcyBub3QgcHJpbnRhYmxlIHNob3duIGluIDw+IGZvcm0uCisgKiBJZiAnZnJvbScgaXMgVFJVRSAobGhzIG9mIGEgbWFwcGluZyksIGEgc3BhY2UgaXMgc2hvd24gYXMgPFNwYWNlPi4KKyAqIElmIGEgY2hhcmFjdGVyIGlzIGRpc3BsYXllZCBpbiBvbmUgb2YgdGhlc2Ugc3BlY2lhbCB3YXlzLCBpcyBhbHNvCisgKiBoaWdobGlnaHRlZCAoaXRzIGhpZ2hsaWdodCBuYW1lIGlzICc4JyBpbiB0aGUgcF9obCB2YXJpYWJsZSkuCisgKiBPdGhlcndpc2UgY2hhcmFjdGVycyBhcmUgbm90IGhpZ2hsaWdodGVkLgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNob3cgbWFwcGluZ3MsIHdoZXJlIHdlIHdhbnQgdG8gc2VlIGhvdyB0byB0eXBlCisgKiB0aGUgY2hhcmFjdGVyL3N0cmluZyAtLSB3ZWJiCisgKi8KKyAgICBpbnQKK21zZ19vdXR0cmFuc19zcGVjaWFsKHN0cnN0YXJ0LCBmcm9tKQorICAgIGNoYXJfdQkqc3Ryc3RhcnQ7CisgICAgaW50CQlmcm9tOwkvKiBUUlVFIGZvciBsaHMgb2YgYSBtYXBwaW5nICovCit7CisgICAgY2hhcl91CSpzdHIgPSBzdHJzdGFydDsKKyAgICBpbnQJCXJldHZhbCA9IDA7CisgICAgY2hhcl91CSpzdHJpbmc7CisgICAgaW50CQlhdHRyOworICAgIGludAkJbGVuOworCisgICAgYXR0ciA9IGhsX2F0dHIoSExGXzgpOworICAgIHdoaWxlICgqc3RyICE9IE5VTCkKKyAgICB7CisJLyogTGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIG5lZWQgdG8gYmUgZGlzcGxheWVkIGluIDw+IGZvcm0uICovCisJaWYgKChzdHIgPT0gc3Ryc3RhcnQgfHwgc3RyWzFdID09IE5VTCkgJiYgKnN0ciA9PSAnICcpCisJeworCSAgICBzdHJpbmcgPSAoY2hhcl91ICopIjxTcGFjZT4iOworCSAgICArK3N0cjsKKwl9CisJZWxzZQorCSAgICBzdHJpbmcgPSBzdHIyc3BlY2lhbCgmc3RyLCBmcm9tKTsKKwlsZW4gPSB2aW1fc3Ryc2l6ZShzdHJpbmcpOworCS8qIEhpZ2hsaWdodCBzcGVjaWFsIGtleXMgKi8KKwltc2dfcHV0c19hdHRyKHN0cmluZywgbGVuID4gMQorI2lmZGVmIEZFQVRfTUJZVEUKKwkJJiYgKCptYl9wdHIybGVuX2NoZWNrKShzdHJpbmcpIDw9IDEKKyNlbmRpZgorCQk/IGF0dHIgOiAwKTsKKwlyZXR2YWwgKz0gbGVuOworICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogUmV0dXJuIHRoZSBwcmludGFibGUgc3RyaW5nIGZvciB0aGUga2V5IGNvZGVzIGF0ICIqc3AiLgorICogVXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhlIGxocyBvciByaHMgb2YgYSBtYXBwaW5nIHRvIHByaW50YWJsZSBjaGFycy4KKyAqIEFkdmFuY2VzICJzcCIgdG8gdGhlIG5leHQgY29kZS4KKyAqLworICAgIGNoYXJfdSAqCitzdHIyc3BlY2lhbChzcCwgZnJvbSkKKyAgICBjaGFyX3UJKipzcDsKKyAgICBpbnQJCWZyb207CS8qIFRSVUUgZm9yIGxocyBvZiBtYXBwaW5nICovCit7CisgICAgaW50CQkJYzsKKyAgICBzdGF0aWMgY2hhcl91CWJ1Zls3XTsKKyAgICBjaGFyX3UJCSpzdHIgPSAqc3A7CisgICAgaW50CQkJbW9kaWZpZXJzID0gMDsKKyAgICBpbnQJCQlzcGVjaWFsID0gRkFMU0U7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGhhc19tYnl0ZSkKKyAgICB7CisJY2hhcl91CSpwOworCisJLyogVHJ5IHRvIHVuLWVzY2FwZSBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiAgUmV0dXJuIHRoZSB1bi1lc2NhcGVkCisJICogc3RyaW5nIGlmIGl0IGlzIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuICovCisJcCA9IG1iX3VuZXNjYXBlKHNwKTsKKwlpZiAocCAhPSBOVUxMKQorCSAgICByZXR1cm4gcDsKKyAgICB9CisjZW5kaWYKKworICAgIGMgPSAqc3RyOworICAgIGlmIChjID09IEtfU1BFQ0lBTCAmJiBzdHJbMV0gIT0gTlVMICYmIHN0clsyXSAhPSBOVUwpCisgICAgeworCWlmIChzdHJbMV0gPT0gS1NfTU9ESUZJRVIpCisJeworCSAgICBtb2RpZmllcnMgPSBzdHJbMl07CisJICAgIHN0ciArPSAzOworCSAgICBjID0gKnN0cjsKKwl9CisJaWYgKGMgPT0gS19TUEVDSUFMICYmIHN0clsxXSAhPSBOVUwgJiYgc3RyWzJdICE9IE5VTCkKKwl7CisJICAgIGMgPSBUT19TUEVDSUFMKHN0clsxXSwgc3RyWzJdKTsKKwkgICAgc3RyICs9IDI7CisJICAgIGlmIChjID09IEtfWkVSTykJLyogZGlzcGxheSA8TnVsPiBhcyBeQCAqLworCQljID0gTlVMOworCX0KKwlpZiAoSVNfU1BFQ0lBTChjKSB8fCBtb2RpZmllcnMpCS8qIHNwZWNpYWwga2V5ICovCisJICAgIHNwZWNpYWwgPSBUUlVFOworICAgIH0KKyAgICAqc3AgPSBzdHIgKyAxOworCisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIEZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgY2hlY2sgZm9yIGFuIGlsbGVnYWwgYnl0ZS4gKi8KKyAgICBpZiAoaGFzX21ieXRlICYmIE1CX0JZVEUyTEVOKCpzdHIpID4gKCptYl9wdHIybGVuX2NoZWNrKShzdHIpKQorICAgIHsKKwl0cmFuc2NoYXJfbm9ucHJpbnQoYnVmLCBjKTsKKwlyZXR1cm4gYnVmOworICAgIH0KKyNlbmRpZgorCisgICAgLyogTWFrZSB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGluIDw+IGZvcm0sIGFsc28gPE0tU3BhY2U+IGFuZCA8VGFiPi4KKyAgICAgKiBVc2UgPFNwYWNlPiBvbmx5IGZvciBsaHMgb2YgYSBtYXBwaW5nLiAqLworICAgIGlmIChzcGVjaWFsIHx8IGNoYXIyY2VsbHMoYykgPiAxIHx8IChmcm9tICYmIGMgPT0gJyAnKSkKKwlyZXR1cm4gZ2V0X3NwZWNpYWxfa2V5X25hbWUoYywgbW9kaWZpZXJzKTsKKyAgICBidWZbMF0gPSBjOworICAgIGJ1ZlsxXSA9IE5VTDsKKyAgICByZXR1cm4gYnVmOworfQorCisvKgorICogVHJhbnNsYXRlIGEga2V5IHNlcXVlbmNlIGludG8gc3BlY2lhbCBrZXkgbmFtZXMuCisgKi8KKyAgICB2b2lkCitzdHIyc3BlY2lhbGJ1ZihzcCwgYnVmLCBsZW4pCisgICAgY2hhcl91CSpzcDsKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCWxlbjsKK3sKKyAgICBjaGFyX3UJKnM7CisKKyAgICAqYnVmID0gTlVMOworICAgIHdoaWxlICgqc3ApCisgICAgeworCXMgPSBzdHIyc3BlY2lhbCgmc3AsIEZBTFNFKTsKKwlpZiAoKGludCkoU1RSTEVOKHMpICsgU1RSTEVOKGJ1ZikpIDwgbGVuKQorCSAgICBTVFJDQVQoYnVmLCBzKTsKKyAgICB9Cit9CisKKy8qCisgKiBwcmludCBsaW5lIGZvciA6cHJpbnQgb3IgOmxpc3QgY29tbWFuZAorICovCisgICAgdm9pZAorbXNnX3BydF9saW5lKHMpCisgICAgY2hhcl91CSpzOworeworICAgIGludAkJYzsKKyAgICBpbnQJCWNvbCA9IDA7CisgICAgaW50CQluX2V4dHJhID0gMDsKKyAgICBpbnQJCWNfZXh0cmEgPSAwOworICAgIGNoYXJfdQkqcF9leHRyYSA9IE5VTEw7CSAgICAvKiBpbml0IHRvIG1ha2UgU0FTQyBzaHV0IHVwICovCisgICAgaW50CQluOworICAgIGludAkJYXR0cj0gMDsKKyAgICBjaGFyX3UJKnRyYWlsID0gTlVMTDsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQlsOworICAgIGNoYXJfdQlidWZbTUJfTUFYQllURVMgKyAxXTsKKyNlbmRpZgorCisgICAgLyogZmluZCBzdGFydCBvZiB0cmFpbGluZyB3aGl0ZXNwYWNlICovCisgICAgaWYgKGN1cndpbi0+d19wX2xpc3QgJiYgbGNzX3RyYWlsKQorICAgIHsKKwl0cmFpbCA9IHMgKyBTVFJMRU4ocyk7CisJd2hpbGUgKHRyYWlsID4gcyAmJiB2aW1faXN3aGl0ZSh0cmFpbFstMV0pKQorCSAgICAtLXRyYWlsOworICAgIH0KKworICAgIC8qIG91dHB1dCBhIHNwYWNlIGZvciBhbiBlbXB0eSBsaW5lLCBvdGhlcndpc2UgdGhlIGxpbmUgd2lsbCBiZQorICAgICAqIG92ZXJ3cml0dGVuICovCisgICAgaWYgKCpzID09IE5VTCAmJiAhKGN1cndpbi0+d19wX2xpc3QgJiYgbGNzX2VvbCAhPSBOVUwpKQorCW1zZ19wdXRjaGFyKCcgJyk7CisKKyAgICBmb3IgKDs7KQorICAgIHsKKwlpZiAobl9leHRyYSkKKwl7CisJICAgIC0tbl9leHRyYTsKKwkgICAgaWYgKGNfZXh0cmEpCisJCWMgPSBjX2V4dHJhOworCSAgICBlbHNlCisJCWMgPSAqcF9leHRyYSsrOworCX0KKyNpZmRlZiBGRUFUX01CWVRFCisJZWxzZSBpZiAoaGFzX21ieXRlICYmIChsID0gKCptYl9wdHIybGVuX2NoZWNrKShzKSkgPiAxKQorCXsKKwkgICAgY29sICs9ICgqbWJfcHRyMmNlbGxzKShzKTsKKwkgICAgbWNoX21lbW1vdmUoYnVmLCBzLCAoc2l6ZV90KWwpOworCSAgICBidWZbbF0gPSBOVUw7CisJICAgIG1zZ19wdXRzX2F0dHIoYnVmLCBhdHRyKTsKKwkgICAgcyArPSBsOworCSAgICBjb250aW51ZTsKKwl9CisjZW5kaWYKKwllbHNlCisJeworCSAgICBhdHRyID0gMDsKKwkgICAgYyA9ICpzKys7CisJICAgIGlmIChjID09IFRBQiAmJiAoIWN1cndpbi0+d19wX2xpc3QgfHwgbGNzX3RhYjEpKQorCSAgICB7CisJCS8qIHRhYiBhbW91bnQgZGVwZW5kcyBvbiBjdXJyZW50IGNvbHVtbiAqLworCQluX2V4dHJhID0gY3VyYnVmLT5iX3BfdHMgLSBjb2wgJSBjdXJidWYtPmJfcF90cyAtIDE7CisJCWlmICghY3Vyd2luLT53X3BfbGlzdCkKKwkJeworCQkgICAgYyA9ICcgJzsKKwkJICAgIGNfZXh0cmEgPSAnICc7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBjID0gbGNzX3RhYjE7CisJCSAgICBjX2V4dHJhID0gbGNzX3RhYjI7CisJCSAgICBhdHRyID0gaGxfYXR0cihITEZfOCk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIGlmIChjID09IE5VTCAmJiBjdXJ3aW4tPndfcF9saXN0ICYmIGxjc19lb2wgIT0gTlVMKQorCSAgICB7CisJCXBfZXh0cmEgPSAoY2hhcl91ICopIiI7CisJCWNfZXh0cmEgPSBOVUw7CisJCW5fZXh0cmEgPSAxOworCQljID0gbGNzX2VvbDsKKwkJYXR0ciA9IGhsX2F0dHIoSExGX0FUKTsKKwkJLS1zOworCSAgICB9CisJICAgIGVsc2UgaWYgKGMgIT0gTlVMICYmIChuID0gYnl0ZTJjZWxscyhjKSkgPiAxKQorCSAgICB7CisJCW5fZXh0cmEgPSBuIC0gMTsKKwkJcF9leHRyYSA9IHRyYW5zY2hhcl9ieXRlKGMpOworCQljX2V4dHJhID0gTlVMOworCQljID0gKnBfZXh0cmErKzsKKwkgICAgfQorCSAgICBlbHNlIGlmIChjID09ICcgJyAmJiB0cmFpbCAhPSBOVUxMICYmIHMgPiB0cmFpbCkKKwkgICAgeworCQljID0gbGNzX3RyYWlsOworCQlhdHRyID0gaGxfYXR0cihITEZfOCk7CisJICAgIH0KKwl9CisKKwlpZiAoYyA9PSBOVUwpCisJICAgIGJyZWFrOworCisJbXNnX3B1dGNoYXJfYXR0cihjLCBhdHRyKTsKKwljb2wrKzsKKyAgICB9CisgICAgbXNnX2Nscl9lb3MoKTsKK30KKworI2lmZGVmIEZFQVRfTUJZVEUKKy8qCisgKiBVc2Ugc2NyZWVuX3B1dHMoKSB0byBvdXRwdXQgb25lIG11bHRpLWJ5dGUgY2hhcmFjdGVyLgorICogUmV0dXJuIHRoZSBwb2ludGVyICJzIiBhZHZhbmNlZCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3NjcmVlbl9wdXRzX21ieXRlKHMsIGwsIGF0dHIpCisgICAgY2hhcl91CSpzOworICAgIGludAkJbDsKKyAgICBpbnQJCWF0dHI7Cit7CisgICAgaW50CQljdzsKKworICAgIG1zZ19kaWRvdXQgPSBUUlVFOwkJLyogcmVtZW1iZXIgdGhhdCBsaW5lIGlzIG5vdCBlbXB0eSAqLworICAgIGN3ID0gKCptYl9wdHIyY2VsbHMpKHMpOworICAgIGlmIChjdyA+IDEgJiYgKAorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCWNtZG1zZ19ybCA/IG1zZ19jb2wgPD0gMSA6CisjZW5kaWYKKwkJbXNnX2NvbCA9PSBDb2x1bW5zIC0gMSkpCisgICAgeworCS8qIERvZXNuJ3QgZml0LCBwcmludCBhIGhpZ2hsaWdodGVkICc+JyB0byBmaWxsIGl0IHVwLiAqLworCW1zZ19zY3JlZW5fcHV0Y2hhcignPicsIGhsX2F0dHIoSExGX0FUKSk7CisJcmV0dXJuIHM7CisgICAgfQorCisgICAgc2NyZWVuX3B1dHNfbGVuKHMsIGwsIG1zZ19yb3csIG1zZ19jb2wsIGF0dHIpOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgaWYgKGNtZG1zZ19ybCkKKyAgICB7CisJbXNnX2NvbCAtPSBjdzsKKwlpZiAobXNnX2NvbCA9PSAwKQorCXsKKwkgICAgbXNnX2NvbCA9IENvbHVtbnM7CisJICAgICsrbXNnX3JvdzsKKwl9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwltc2dfY29sICs9IGN3OworCWlmIChtc2dfY29sID49IENvbHVtbnMpCisJeworCSAgICBtc2dfY29sID0gMDsKKwkgICAgKyttc2dfcm93OworCX0KKyAgICB9CisgICAgcmV0dXJuIHMgKyBsOworfQorI2VuZGlmCisKKy8qCisgKiBPdXRwdXQgYSBzdHJpbmcgdG8gdGhlIHNjcmVlbiBhdCBwb3NpdGlvbiBtc2dfcm93LCBtc2dfY29sLgorICogVXBkYXRlIG1zZ19yb3cgYW5kIG1zZ19jb2wgZm9yIHRoZSBuZXh0IG1lc3NhZ2UuCisgKi8KKyAgICB2b2lkCittc2dfcHV0cyhzKQorICAgIGNoYXJfdQkqczsKK3sKKyAgICBtc2dfcHV0c19hdHRyKHMsIDApOworfQorCisgICAgdm9pZAorbXNnX3B1dHNfdGl0bGUocykKKyAgICBjaGFyX3UJKnM7Cit7CisgICAgbXNnX3B1dHNfYXR0cihzLCBobF9hdHRyKEhMRl9UKSk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQ1NDT1BFKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIGlmIHByaW50aW5nIGEgc3RyaW5nIHdpbGwgZXhjZWVkIHRoZSBzY3JlZW4gd2lkdGgsIHByaW50ICIuLi4iIGluIHRoZQorICogbWlkZGxlLgorICovCisgICAgdm9pZAorbXNnX3B1dHNfbG9uZyhsb25nc3RyKQorICAgIGNoYXJfdQkqbG9uZ3N0cjsKK3sKKyAgICBtc2dfcHV0c19sb25nX2xlbl9hdHRyKGxvbmdzdHIsIChpbnQpc3RybGVuKChjaGFyICopbG9uZ3N0ciksIDApOworfQorI2VuZGlmCisKKy8qCisgKiBTaG93IGEgbWVzc2FnZSBpbiBzdWNoIGEgd2F5IHRoYXQgaXQgYWx3YXlzIGZpdHMgaW4gdGhlIGxpbmUuICBDdXQgb3V0IGEKKyAqIHBhcnQgaW4gdGhlIG1pZGRsZSBhbmQgcmVwbGFjZSBpdCB3aXRoICIuLi4iIHdoZW4gbmVjZXNzYXJ5LgorICogRG9lcyBub3QgaGFuZGxlIG11bHRpLWJ5dGUgY2hhcmFjdGVycyEKKyAqLworICAgIHZvaWQKK21zZ19wdXRzX2xvbmdfYXR0cihsb25nc3RyLCBhdHRyKQorICAgIGNoYXJfdQkqbG9uZ3N0cjsKKyAgICBpbnQJCWF0dHI7Cit7CisgICAgbXNnX3B1dHNfbG9uZ19sZW5fYXR0cihsb25nc3RyLCAoaW50KXN0cmxlbigoY2hhciAqKWxvbmdzdHIpLCBhdHRyKTsKK30KKworICAgIHZvaWQKK21zZ19wdXRzX2xvbmdfbGVuX2F0dHIobG9uZ3N0ciwgbGVuLCBhdHRyKQorICAgIGNoYXJfdQkqbG9uZ3N0cjsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWF0dHI7Cit7CisgICAgaW50CQlzbGVuID0gbGVuOworICAgIGludAkJcm9vbTsKKworICAgIHJvb20gPSBDb2x1bW5zIC0gbXNnX2NvbDsKKyAgICBpZiAobGVuID4gcm9vbSAmJiByb29tID49IDIwKQorICAgIHsKKwlzbGVuID0gKHJvb20gLSAzKSAvIDI7CisJbXNnX291dHRyYW5zX2xlbl9hdHRyKGxvbmdzdHIsIHNsZW4sIGF0dHIpOworCW1zZ19wdXRzX2F0dHIoKGNoYXJfdSAqKSIuLi4iLCBobF9hdHRyKEhMRl84KSk7CisgICAgfQorICAgIG1zZ19vdXR0cmFuc19sZW5fYXR0cihsb25nc3RyICsgbGVuIC0gc2xlbiwgc2xlbiwgYXR0cik7Cit9CisKKy8qCisgKiBCYXNpYyBmdW5jdGlvbiBmb3Igd3JpdGluZyBhIG1lc3NhZ2Ugd2l0aCBoaWdobGlnaHQgYXR0cmlidXRlcy4KKyAqLworICAgIHZvaWQKK21zZ19wdXRzX2F0dHIocywgYXR0cikKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQlhdHRyOworeworICAgIG1zZ19wdXRzX2F0dHJfbGVuKHMsIC0xLCBhdHRyKTsKK30KKworLyoKKyAqIExpa2UgbXNnX3B1dHNfYXR0cigpLCBidXQgd2l0aCBhIG1heGltdW0gbGVuZ3RoICJtYXhsZW4iIChpbiBieXRlcykuCisgKiBXaGVuICJtYXhsZW4iIGlzIC0xIHRoZXJlIGlzIG5vIG1heGltdW0gbGVuZ3RoLgorICogV2hlbiAibWF4bGVuIiBpcyA+PSAwIHRoZSBtZXNzYWdlIGlzIG5vdCBwdXQgaW4gdGhlIGhpc3RvcnkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbXNnX3B1dHNfYXR0cl9sZW4oc3RyLCBtYXhsZW4sIGF0dHIpCisgICAgY2hhcl91CSpzdHI7CisgICAgaW50CQltYXhsZW47CisgICAgaW50CQlhdHRyOworeworICAgIGludAkJb2xkU3RhdGU7CisgICAgY2hhcl91CSpzID0gc3RyOworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJYnVmWzRdOworICAgIGNoYXJfdQkqdF9zID0gc3RyOwkvKiBzdHJpbmcgZnJvbSAidF9zIiB0byAicyIgaXMgc3RpbGwgdG9kbyAqLworICAgIGludAkJdF9jb2wgPSAwOwkvKiBzY3JlZW4gY2VsbHMgdG9kbywgMCB3aGVuICJ0X3MiIG5vdCB1c2VkICovCisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJbDsKKyAgICBpbnQJCWN3OworI2VuZGlmCisgICAgaW50CQljOworCisgICAgLyoKKyAgICAgKiBJZiByZWRpcmVjdGlvbiBpcyBvbiwgYWxzbyB3cml0ZSB0byB0aGUgcmVkaXJlY3Rpb24gZmlsZS4KKyAgICAgKi8KKyAgICByZWRpcl93cml0ZShzLCBtYXhsZW4pOworCisgICAgLyoKKyAgICAgKiBEb24ndCBwcmludCBhbnl0aGluZyB3aGVuIHVzaW5nICI6c2lsZW50IGNtZCIuCisgICAgICovCisgICAgaWYgKG1zZ19zaWxlbnQgIT0gMCkKKwlyZXR1cm47CisKKyAgICAvKiBpZiBNU0dfSElTVCBmbGFnIHNldCwgYWRkIG1lc3NhZ2UgdG8gaGlzdG9yeSAqLworICAgIGlmICgoYXR0ciAmIE1TR19ISVNUKSAmJiBtYXhsZW4gPCAwKQorICAgIHsKKwlhZGRfbXNnX2hpc3QocywgLTEsIGF0dHIpOworCWF0dHIgJj0gfk1TR19ISVNUOworICAgIH0KKworICAgIC8qCisgICAgICogV2hlbiB3cml0aW5nIHNvbWV0aGluZyB0byB0aGUgc2NyZWVuIGFmdGVyIGl0IGhhcyBzY3JvbGxlZCwgcmVxdWlyZXMgYQorICAgICAqIHdhaXQtcmV0dXJuIHByb21wdCBsYXRlci4gIE5lZWRlZCB3aGVuIHNjcm9sbGluZywgcmVzZXR0aW5nCisgICAgICogbmVlZF93YWl0X3JldHVybiBhZnRlciBzb21lIHByb21wdCwgYW5kIHRoZW4gb3V0cHV0dGluZyBzb21ldGhpbmcKKyAgICAgKiB3aXRob3V0IHNjcm9sbGluZworICAgICAqLworICAgIGlmIChtc2dfc2Nyb2xsZWQgJiYgIW1zZ19zY3JvbGxlZF9pZ24pCisJbmVlZF93YWl0X3JldHVybiA9IFRSVUU7CisgICAgbXNnX2RpZGFueSA9IFRSVUU7CQkvKiByZW1lbWJlciB0aGF0IHNvbWV0aGluZyB3YXMgb3V0cHV0dGVkICovCisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGlzIG5vIHZhbGlkIHNjcmVlbiwgdXNlIGZwcmludGYgc28gd2UgY2FuIHNlZSBlcnJvciBtZXNzYWdlcy4KKyAgICAgKiBJZiB0ZXJtY2FwIGlzIG5vdCBhY3RpdmUsIHdlIG1heSBiZSB3cml0aW5nIGluIGFuIGFsdGVybmF0ZSBjb25zb2xlCisgICAgICogd2luZG93LCBjdXJzb3IgcG9zaXRpb25pbmcgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSAod2luZG93IHNpemUgbWF5IGJlCisgICAgICogZGlmZmVyZW50LCBlLmcuIGZvciBXaW4zMiBjb25zb2xlKSBvciB3ZSBqdXN0IGRvbid0IGtub3cgd2hlcmUgdGhlCisgICAgICogY3Vyc29yIGlzLgorICAgICAqLworICAgIGlmIChtc2dfdXNlX3ByaW50ZigpKQorICAgIHsKKyNpZmRlZiBXSU4zMjY0CisJaWYgKCEoc2lsZW50X21vZGUgJiYgcF92ZXJib3NlID09IDApKQorCSAgICBtY2hfc2V0dG1vZGUoVE1PREVfQ09PSyk7CS8qIGhhbmRsZSAnXHInIGFuZCAnXG4nIGNvcnJlY3RseSAqLworI2VuZGlmCisJd2hpbGUgKCpzICE9IE5VTCAmJiAobWF4bGVuIDwgMCB8fCAoaW50KShzIC0gc3RyKSA8IG1heGxlbikpCisJeworCSAgICBpZiAoIShzaWxlbnRfbW9kZSAmJiBwX3ZlcmJvc2UgPT0gMCkpCisJICAgIHsKKwkJcCA9ICZidWZbMF07CisJCS8qIE5MIC0tPiBDUiBOTCB0cmFuc2xhdGlvbiAoZm9yIFVuaXgsIG5vdCBmb3IgIi0tdmVyc2lvbiIpICovCisJCS8qIE5MIC0tPiBDUiB0cmFuc2xhdGlvbiAoZm9yIE1hYykgKi8KKwkJaWYgKCpzID09ICdcbicgJiYgIWluZm9fbWVzc2FnZSkKKwkJICAgICpwKysgPSAnXHInOworI2lmIGRlZmluZWQoVVNFX0NSKSAmJiAhZGVmaW5lZChNQUNPU19YX1VOSVgpCisJCWVsc2UKKyNlbmRpZgorCQkgICAgKnArKyA9ICpzOworCQkqcCA9ICdcMCc7CisJCWlmIChpbmZvX21lc3NhZ2UpCS8qIGluZm9ybWF0aXZlIG1lc3NhZ2UsIG5vdCBhbiBlcnJvciAqLworCQkgICAgbWNoX21zZygoY2hhciAqKWJ1Zik7CisJCWVsc2UKKwkJICAgIG1jaF9lcnJtc2coKGNoYXIgKilidWYpOworCSAgICB9CisKKwkgICAgLyogcHJpbWl0aXZlIHdheSB0byBjb21wdXRlIHRoZSBjdXJyZW50IGNvbHVtbiAqLworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJICAgIGlmIChjbWRtc2dfcmwpCisJICAgIHsKKwkJaWYgKCpzID09ICdccicgfHwgKnMgPT0gJ1xuJykKKwkJICAgIG1zZ19jb2wgPSBDb2x1bW5zIC0gMTsKKwkJZWxzZQorCQkgICAgLS1tc2dfY29sOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCWlmICgqcyA9PSAnXHInIHx8ICpzID09ICdcbicpCisJCSAgICBtc2dfY29sID0gMDsKKwkJZWxzZQorCQkgICAgKyttc2dfY29sOworCSAgICB9CisJICAgICsrczsKKwl9CisJbXNnX2RpZG91dCA9IFRSVUU7CSAgICAvKiBhc3N1bWUgdGhhdCBsaW5lIGlzIG5vdCBlbXB0eSAqLworCisjaWZkZWYgV0lOMzI2NAorCWlmICghKHNpbGVudF9tb2RlICYmIHBfdmVyYm9zZSA9PSAwKSkKKwkgICAgbWNoX3NldHRtb2RlKFRNT0RFX1JBVyk7CisjZW5kaWYKKwlyZXR1cm47CisgICAgfQorCisgICAgZGlkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisgICAgd2hpbGUgKCpzICE9IE5VTCAmJiAobWF4bGVuIDwgMCB8fCAoaW50KShzIC0gc3RyKSA8IG1heGxlbikpCisgICAgeworCS8qCisJICogVGhlIHNjcmVlbiBpcyBzY3JvbGxlZCB1cCB3aGVuOgorCSAqIC0gV2hlbiBvdXRwdXR0aW5nIGEgbmV3bGluZSBpbiB0aGUgbGFzdCByb3cKKwkgKiAtIHdoZW4gb3V0cHV0dGluZyBhIGNoYXJhY3RlciBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIGxhc3Qgcm93CisJICogICAoc29tZSB0ZXJtaW5hbHMgc2Nyb2xsIGF1dG9tYXRpY2FsbHksIHNvbWUgZG9uJ3QuIFRvIGF2b2lkCisJICogICBwcm9ibGVtcyB3ZSBzY3JvbGwgb3Vyc2VsdmVzKQorCSAqLworCWlmIChtc2dfcm93ID49IFJvd3MgLSAxCisJCSYmICgqcyA9PSAnXG4nCisJCSAgICB8fCAoCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJICAgIGNtZG1zZ19ybAorCQkgICAgPyAoCisJCQltc2dfY29sIDw9IDEKKwkJCXx8ICgqcyA9PSBUQUIgJiYgbXNnX2NvbCA8PSA3KQorIyBpZmRlZiBGRUFUX01CWVRFCisJCQl8fCAoaGFzX21ieXRlICYmICgqbWJfcHRyMmNlbGxzKShzKSA+IDEgJiYgbXNnX2NvbCA8PSAyKQorIyBlbmRpZgorCQkgICAgICApCisJCSAgICA6CisjZW5kaWYKKwkJICAgICAgKG1zZ19jb2wgKyB0X2NvbCA+PSBDb2x1bW5zIC0gMQorCQkgICAgICAgfHwgKCpzID09IFRBQiAmJiBtc2dfY29sICsgdF9jb2wgPj0gKChDb2x1bW5zIC0gMSkgJiB+NykpCisjIGlmZGVmIEZFQVRfTUJZVEUKKwkJICAgICAgIHx8IChoYXNfbWJ5dGUgJiYgKCptYl9wdHIyY2VsbHMpKHMpID4gMQorCQkJCQkgICAgJiYgbXNnX2NvbCArIHRfY29sID49IENvbHVtbnMgLSAyKQorIyBlbmRpZgorCQkgICAgICApKSkpCisJeworCSAgICBpZiAodF9jb2wgPiAwKQorCSAgICB7CisJCS8qIG91dHB1dCBwb3N0cG9uZWQgdGV4dCAqLworCQl0X3B1dHModF9jb2wsIHRfcywgcywgYXR0cik7CisJCXRfY29sID0gMDsKKwkgICAgfQorCisJICAgIC8qIFdoZW4gbm8gbW9yZSBwcm9tcHQgYW4gbm8gbW9yZSByb29tLCB0cnVuY2F0ZSBoZXJlICovCisJICAgIGlmIChtc2dfbm9fbW9yZSAmJiBsaW5lc19sZWZ0ID09IDApCisJCWJyZWFrOworI2lmZGVmIEZFQVRfR1VJCisJICAgIC8qIFJlbW92ZSB0aGUgY3Vyc29yIGJlZm9yZSBzY3JvbGxpbmcsIFNjcmVlbkxpbmVzW10gaXMgZ29pbmcgdG8KKwkgICAgICogYmVjb21lIGludmFsaWQuICovCisJICAgIGlmIChndWkuaW5fdXNlKQorCQlndWlfdW5kcmF3X2N1cnNvcigpOworI2VuZGlmCisJICAgIC8qIHNjcm9sbGluZyB1cCBhbHdheXMgd29ya3MgKi8KKwkgICAgc2NyZWVuX2RlbF9saW5lcygwLCAwLCAxLCAoaW50KVJvd3MsIFRSVUUsIE5VTEwpOworCisJICAgIGlmICghY2FuX2NsZWFyKChjaGFyX3UgKikiICIpKQorCSAgICB7CisJCS8qIFNjcm9sbGluZyB1cCBkb2Vzbid0IHJlc3VsdCBpbiB0aGUgcmlnaHQgYmFja2dyb3VuZC4gIFNldAorCQkgKiB0aGUgYmFja2dyb3VuZCBoZXJlLiAgSXQncyBub3QgZWZmaWNpZW50LCBidXQgYXZvaWRzIHRoYXQKKwkJICogd2UgaGF2ZSB0byBkbyBpdCBhbGwgb3ZlciB0aGUgY29kZS4gKi8KKwkJc2NyZWVuX2ZpbGwoKGludClSb3dzIC0gMSwgKGludClSb3dzLCAwLAorCQkJCQkJICAgKGludClDb2x1bW5zLCAnICcsICcgJywgMCk7CisKKwkJLyogQWxzbyBjbGVhciB0aGUgbGFzdCBjaGFyIG9mIHRoZSBsYXN0IGJ1dCBvbmUgbGluZSBpZiBpdCB3YXMKKwkJICogbm90IGNsZWFyZWQgYmVmb3JlIHRvIGF2b2lkIGEgc2Nyb2xsLXVwLiAqLworCQlpZiAoU2NyZWVuQXR0cnNbTGluZU9mZnNldFtSb3dzIC0gMl0gKyBDb2x1bW5zIC0gMV0KKwkJCQkJCQkgICAgICAgPT0gKHNhdHRyX1QpLTEpCisJCSAgICBzY3JlZW5fZmlsbCgoaW50KVJvd3MgLSAyLCAoaW50KVJvd3MgLSAxLAorCQkJCSAoaW50KUNvbHVtbnMgLSAxLCAoaW50KUNvbHVtbnMsICcgJywgJyAnLCAwKTsKKwkgICAgfQorCisJICAgIG1zZ19yb3cgPSBSb3dzIC0gMjsKKwkgICAgaWYgKG1zZ19jb2wgPj0gQ29sdW1ucykJLyogY2FuIGhhcHBlbiBhZnRlciBzY3JlZW4gcmVzaXplICovCisJCW1zZ19jb2wgPSBDb2x1bW5zIC0gMTsKKworCSAgICArK21zZ19zY3JvbGxlZDsKKwkgICAgbmVlZF93YWl0X3JldHVybiA9IFRSVUU7CS8qIG1heSBuZWVkIHdhaXRfcmV0dXJuIGluIG1haW4oKSAqLworCSAgICBpZiAobXVzdF9yZWRyYXcgPCBWQUxJRCkKKwkJbXVzdF9yZWRyYXcgPSBWQUxJRDsKKwkgICAgcmVkcmF3X2NtZGxpbmUgPSBUUlVFOworCSAgICBpZiAoY21kbGluZV9yb3cgPiAwICYmICFleG1vZGVfYWN0aXZlKQorCQktLWNtZGxpbmVfcm93OworCisJICAgIC8qCisJICAgICAqIGlmIHNjcmVlbiBpcyBjb21wbGV0ZWx5IGZpbGxlZCB3YWl0IGZvciBhIGNoYXJhY3RlcgorCSAgICAgKi8KKwkgICAgaWYgKHBfbW9yZSAmJiAtLWxpbmVzX2xlZnQgPT0gMCAmJiBTdGF0ZSAhPSBISVRSRVRVUk4KKwkJCQkJICAgICYmICFtc2dfbm9fbW9yZSAmJiAhZXhtb2RlX2FjdGl2ZSkKKwkgICAgeworCQlvbGRTdGF0ZSA9IFN0YXRlOworCQlTdGF0ZSA9IEFTS01PUkU7CisjaWZkZWYgRkVBVF9NT1VTRQorCQlzZXRtb3VzZSgpOworI2VuZGlmCisJCW1zZ19tb3JlbXNnKEZBTFNFKTsKKwkJZm9yICg7OykKKwkJeworCQkgICAgLyoKKwkJICAgICAqIEdldCBhIHR5cGVkIGNoYXJhY3RlciBkaXJlY3RseSBmcm9tIHRoZSB1c2VyLgorCQkgICAgICovCisJCSAgICBjID0gZ2V0X2tleXN0cm9rZSgpOworCisjaWYgZGVmaW5lZChGRUFUX01FTlUpICYmIGRlZmluZWQoRkVBVF9HVUkpCisJCSAgICBpZiAoYyA9PSBLX01FTlUpCisJCSAgICB7CisJCQlpbnQgaWR4ID0gZ2V0X21lbnVfaW5kZXgoY3VycmVudF9tZW51LCBBU0tNT1JFKTsKKworCQkJLyogVXNlZCBhIG1lbnUuICBJZiBpdCBzdGFydHMgd2l0aCBDVFJMLVksIGl0IG11c3QKKwkJCSAqIGJlIGEgIkNvcHkiIGZvciB0aGUgY2xpcGJvYXJkLiAgT3RoZXJ3aXNlCisJCQkgKiBhc3N1bWUgdGhhdCB3ZSBlbmQgKi8KKwkJCWlmIChpZHggPT0gTUVOVV9JTkRFWF9JTlZBTElEKQorCQkJICAgIGNvbnRpbnVlOworCQkJYyA9ICpjdXJyZW50X21lbnUtPnN0cmluZ3NbaWR4XTsKKwkJCWlmIChjICE9IE5VTCAmJiBjdXJyZW50X21lbnUtPnN0cmluZ3NbaWR4XVsxXSAhPSBOVUwpCisJCQkgICAgaW5zX3R5cGVidWYoY3VycmVudF9tZW51LT5zdHJpbmdzW2lkeF0gKyAxLAorCQkJCSAgICBjdXJyZW50X21lbnUtPm5vcmVtYXBbaWR4XSwgMCwgVFJVRSwKKwkJCQkgICAgY3VycmVudF9tZW51LT5zaWxlbnRbaWR4XSk7CisJCSAgICB9CisjZW5kaWYKKworCQkgICAgc3dpdGNoIChjKQorCQkgICAgeworCQkgICAgY2FzZSBCUzoKKwkJICAgIGNhc2UgJ2snOgorCQkgICAgY2FzZSBLX1VQOgorCQkJaWYgKCFtb3JlX2JhY2tfdXNlZCkKKwkJCXsKKwkJCSAgICBtc2dfbW9yZW1zZyhUUlVFKTsKKwkJCSAgICBjb250aW51ZTsKKwkJCX0KKwkJCW1vcmVfYmFjayA9IDE7CisJCQlsaW5lc19sZWZ0ID0gMTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBDQVI6CQkvKiBvbmUgZXh0cmEgbGluZSAqLworCQkgICAgY2FzZSBOTDoKKwkJICAgIGNhc2UgJ2onOgorCQkgICAgY2FzZSBLX0RPV046CisJCQlsaW5lc19sZWZ0ID0gMTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAnOic6CQkvKiBzdGFydCBuZXcgY29tbWFuZCBsaW5lICovCisjaWZkZWYgRkVBVF9DT05fRElBTE9HCisJCQlpZiAoIWNvbmZpcm1fbXNnX3VzZWQpCisjZW5kaWYKKwkJCXsKKwkJCSAgICAvKiBTaW5jZSBnb3RfaW50IGlzIHNldCBhbGwgdHlwZWFoZWFkIHdpbGwgYmUKKwkJCSAgICAgKiBmbHVzaGVkLCBidXQgd2Ugd2FudCB0byBrZWVwIHRoaXMgJzonLCByZW1lbWJlcgorCQkJICAgICAqIHRoYXQgaW4gYSBzcGVjaWFsIHdheS4gKi8KKwkJCSAgICB0eXBlYWhlYWRfbm9mbHVzaCgnOicpOworCQkJICAgIGNtZGxpbmVfcm93ID0gUm93cyAtIDE7ICAgLyogcHV0ICc6JyBvbiB0aGlzIGxpbmUgKi8KKwkJCSAgICBza2lwX3JlZHJhdyA9IFRSVUU7CSAgICAgIC8qIHNraXAgcmVkcmF3IG9uY2UgKi8KKwkJCSAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7IC8qIGRvbid0IHdhaXQgaW4gbWFpbigpICovCisJCQl9CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJICAgIGNhc2UgJ3EnOgkJLyogcXVpdCAqLworCQkgICAgY2FzZSBDdHJsX0M6CisJCSAgICBjYXNlIEVTQzoKKyNpZmRlZiBGRUFUX0NPTl9ESUFMT0cKKwkJCWlmIChjb25maXJtX21zZ191c2VkKQorCQkJeworCQkJICAgIC8qIEp1bXAgdG8gdGhlIGNob2ljZXMgb2YgdGhlIGRpYWxvZy4gKi8KKwkJCSAgICBzID0gY29uZmlybV9tc2dfdGFpbDsKKwkJCSAgICBsaW5lc19sZWZ0ID0gUm93cyAtIDE7CisJCQl9CisJCQllbHNlCisjZW5kaWYKKwkJCXsKKwkJCSAgICBnb3RfaW50ID0gVFJVRTsKKwkJCSAgICBxdWl0X21vcmUgPSBUUlVFOworCQkJfQorCQkJYnJlYWs7CisJCSAgICBjYXNlICd1JzoJCS8qIFVwIGhhbGYgYSBwYWdlICovCisJCSAgICBjYXNlIEtfUEFHRVVQOgorCQkJaWYgKCFtb3JlX2JhY2tfdXNlZCkKKwkJCXsKKwkJCSAgICBtc2dfbW9yZW1zZyhUUlVFKTsKKwkJCSAgICBjb250aW51ZTsKKwkJCX0KKwkJCW1vcmVfYmFjayA9IFJvd3MgLyAyOworCQkJLypGQUxMVEhST1VHSCovCisJCSAgICBjYXNlICdkJzoJCS8qIERvd24gaGFsZiBhIHBhZ2UgKi8KKwkJCWxpbmVzX2xlZnQgPSBSb3dzIC8gMjsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAnYic6CQkvKiBvbmUgcGFnZSBiYWNrICovCisJCQlpZiAoIW1vcmVfYmFja191c2VkKQorCQkJeworCQkJICAgIG1zZ19tb3JlbXNnKFRSVUUpOworCQkJICAgIGNvbnRpbnVlOworCQkJfQorCQkJbW9yZV9iYWNrID0gUm93cyAtIDE7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJICAgIGNhc2UgJyAnOgkJLyogb25lIGV4dHJhIHBhZ2UgKi8KKwkJICAgIGNhc2UgS19QQUdFRE9XTjoKKwkJICAgIGNhc2UgS19MRUZUTU9VU0U6CisJCQlsaW5lc19sZWZ0ID0gUm93cyAtIDE7CisJCQlicmVhazsKKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisJCSAgICBjYXNlIEN0cmxfWToKKwkJCS8qIFN0cmFuZ2Ugd2F5IHRvIGFsbG93IGNvcHlpbmcgKHlhbmtpbmcpIGEgbW9kZWxlc3MKKwkJCSAqIHNlbGVjdGlvbiBhdCB0aGUgbW9yZSBwcm9tcHQuICBVc2UgQ1RSTC1ZLAorCQkJICogYmVjYXVzZSB0aGUgc2FtZSBpcyB1c2VkIGluIENtZGxpbmUtbW9kZSBhbmQgYXQgdGhlCisJCQkgKiBoaXQtZW50ZXIgcHJvbXB0LiAgSG93ZXZlciwgc2Nyb2xsaW5nIG9uZSBsaW5lIHVwCisJCQkgKiBtaWdodCBiZSBleHBlY3RlZC4uLiAqLworCQkJaWYgKGNsaXBfc3Rhci5zdGF0ZSA9PSBTRUxFQ1RfRE9ORSkKKwkJCSAgICBjbGlwX2NvcHlfbW9kZWxlc3Nfc2VsZWN0aW9uKFRSVUUpOworCQkJY29udGludWU7CisjZW5kaWYKKwkJICAgIGRlZmF1bHQ6CQkvKiBubyB2YWxpZCByZXNwb25zZSAqLworCQkJbXNnX21vcmVtc2coVFJVRSk7CisJCQljb250aW51ZTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQl9CisKKwkJLyogY2xlYXIgdGhlIC0tbW9yZS0tIG1lc3NhZ2UgKi8KKwkJc2NyZWVuX2ZpbGwoKGludClSb3dzIC0gMSwgKGludClSb3dzLAorCQkJCQkJMCwgKGludClDb2x1bW5zLCAnICcsICcgJywgMCk7CisJCVN0YXRlID0gb2xkU3RhdGU7CisjaWZkZWYgRkVBVF9NT1VTRQorCQlzZXRtb3VzZSgpOworI2VuZGlmCisJCWlmIChxdWl0X21vcmUpCisJCXsKKwkJICAgIG1zZ19yb3cgPSBSb3dzIC0gMTsKKwkJICAgIG1zZ19jb2wgPSAwOworCQkgICAgcmV0dXJuOwkgICAgLyogdGhlIHN0cmluZyBpcyBub3QgZGlzcGxheWVkISAqLworCQl9CisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJaWYgKGNtZG1zZ19ybCkKKwkJICAgIG1zZ19jb2wgPSBDb2x1bW5zIC0gMTsKKyNlbmRpZgorCSAgICB9CisJfQorCisJaWYgKHRfY29sID4gMAorCQkmJiAodmltX3N0cmNocigoY2hhcl91ICopIlxuXHJcYlx0IiwgKnMpICE9IE5VTEwKKwkJICAgIHx8ICpzID09IEJFTEwKKwkJICAgIHx8IG1zZ19jb2wgKyB0X2NvbCA+PSBDb2x1bW5zCisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgfHwgKGhhc19tYnl0ZSAmJiAoKm1iX3B0cjJjZWxscykocykgPiAxCisJCQkJCSAgICAmJiBtc2dfY29sICsgdF9jb2wgPj0gQ29sdW1ucyAtIDEpCisjZW5kaWYKKwkJICAgICkpCisJeworCSAgICAvKiBvdXRwdXQgYW55IHBvc3Rwb25lZCB0ZXh0ICovCisJICAgIHRfcHV0cyh0X2NvbCwgdF9zLCBzLCBhdHRyKTsKKwkgICAgdF9jb2wgPSAwOworCX0KKworCWlmICgqcyA9PSAnXG4nKQkJICAgIC8qIGdvIHRvIG5leHQgbGluZSAqLworCXsKKwkgICAgbXNnX2RpZG91dCA9IEZBTFNFOwkgICAgLyogcmVtZW1iZXIgdGhhdCBsaW5lIGlzIGVtcHR5ICovCisJICAgIG1zZ19jb2wgPSAwOworCSAgICBpZiAoKyttc2dfcm93ID49IFJvd3MpICAvKiBzYWZldHkgY2hlY2sgKi8KKwkJbXNnX3JvdyA9IFJvd3MgLSAxOworCX0KKwllbHNlIGlmICgqcyA9PSAnXHInKQkgICAgLyogZ28gdG8gY29sdW1uIDAgKi8KKwl7CisJICAgIG1zZ19jb2wgPSAwOworCX0KKwllbHNlIGlmICgqcyA9PSAnXGInKQkgICAgLyogZ28gdG8gcHJldmlvdXMgY2hhciAqLworCXsKKwkgICAgaWYgKG1zZ19jb2wpCisJCS0tbXNnX2NvbDsKKwl9CisJZWxzZSBpZiAoKnMgPT0gVEFCKQkgICAgLyogdHJhbnNsYXRlIGludG8gc3BhY2VzICovCisJeworCSAgICBkbworCQltc2dfc2NyZWVuX3B1dGNoYXIoJyAnLCBhdHRyKTsKKwkgICAgd2hpbGUgKG1zZ19jb2wgJiA3KTsKKwl9CisJZWxzZSBpZiAoKnMgPT0gQkVMTCkJICAgIC8qIGJlZXAgKGZyb20gIjpzaCIpICovCisJICAgIHZpbV9iZWVwKCk7CisJZWxzZQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJICAgIHsKKwkJY3cgPSAoKm1iX3B0cjJjZWxscykocyk7CisJCWlmIChlbmNfdXRmOCAmJiBtYXhsZW4gPj0gMCkKKwkJICAgIC8qIGF2b2lkIGluY2x1ZGluZyBjb21wb3NpbmcgY2hhcnMgYWZ0ZXIgdGhlIGVuZCAqLworCQkgICAgbCA9IHV0ZmNfcHRyMmxlbl9jaGVja19sZW4ocywgKGludCkoKHN0ciArIG1heGxlbikgLSBzKSk7CisJCWVsc2UKKwkJICAgIGwgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHMpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQljdyA9IDE7CisJCWwgPSAxOworCSAgICB9CisjZW5kaWYKKwkgICAgLyogV2hlbiBkcmF3aW5nIGZyb20gcmlnaHQgdG8gbGVmdCBvciB3aGVuIGEgZG91YmxlLXdpZGUgY2hhcmFjdGVyCisJICAgICAqIGRvZXNuJ3QgZml0LCBkcmF3IGEgc2luZ2xlIGNoYXJhY3RlciBoZXJlLiAgT3RoZXJ3aXNlIGNvbGxlY3QKKwkgICAgICogY2hhcmFjdGVycyBhbmQgZHJhdyB0aGVtIGFsbCBhdCBvbmNlIGxhdGVyLiAqLworI2lmIGRlZmluZWQoRkVBVF9SSUdIVExFRlQpIHx8IGRlZmluZWQoRkVBVF9NQllURSkKKwkgICAgaWYgKAorIyBpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkgICAgY21kbXNnX3JsCisjICBpZmRlZiBGRUFUX01CWVRFCisJCSAgICB8fAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9NQllURQorCQkgICAgKGN3ID4gMSAmJiBtc2dfY29sICsgdF9jb2wgPj0gQ29sdW1ucyAtIDEpCisjIGVuZGlmCisJCSAgICApCisJICAgIHsKKyMgaWZkZWYgRkVBVF9NQllURQorCQlpZiAobCA+IDEpCisJCSAgICBzID0gc2NyZWVuX3B1dHNfbWJ5dGUocywgbCwgYXR0cikgLSAxOworCQllbHNlCisjIGVuZGlmCisJCSAgICBtc2dfc2NyZWVuX3B1dGNoYXIoKnMsIGF0dHIpOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCS8qIHBvc3Rwb25lIHRoaXMgY2hhcmFjdGVyIHVudGlsIGxhdGVyICovCisJCWlmICh0X2NvbCA9PSAwKQorCQkgICAgdF9zID0gczsKKyNpZmRlZiBGRUFUX01CWVRFCisJCXRfY29sICs9IGN3OworCQlzICs9IGwgLSAxOworI2Vsc2UKKwkJKyt0X2NvbDsKKyNlbmRpZgorCSAgICB9CisJfQorCSsrczsKKyAgICB9CisKKyAgICAvKiBvdXRwdXQgYW55IHBvc3Rwb25lZCB0ZXh0ICovCisgICAgaWYgKHRfY29sID4gMCkKKwl0X3B1dHModF9jb2wsIHRfcywgcywgYXR0cik7CisKKyAgICBtc2dfY2hlY2soKTsKK30KKworLyoKKyAqIE91dHB1dCBhbnkgcG9zdHBvbmVkIHRleHQgZm9yIG1zZ19wdXRzX2F0dHJfbGVuKCkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordF9wdXRzKHRfY29sLCB0X3MsIHMsIGF0dHIpCisgICAgaW50CQl0X2NvbDsKKyAgICBjaGFyX3UJKnRfczsKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQlhdHRyOworeworICAgIC8qIG91dHB1dCBwb3N0cG9uZWQgdGV4dCAqLworICAgIG1zZ19kaWRvdXQgPSBUUlVFOwkJLyogcmVtZW1iZXIgdGhhdCBsaW5lIGlzIG5vdCBlbXB0eSAqLworICAgIHNjcmVlbl9wdXRzX2xlbih0X3MsIChpbnQpKHMgLSB0X3MpLCBtc2dfcm93LCBtc2dfY29sLCBhdHRyKTsKKyAgICBtc2dfY29sICs9IHRfY29sOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKiBJZiB0aGUgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgY29tcG9zaW5nIGNoYXJhY3RlciBkb24ndCBpbmNyZW1lbnQgdGhlCisgICAgICogY29sdW1uIHBvc2l0aW9uIGZvciBpdC4gKi8KKyAgICBpZiAoZW5jX3V0ZjggJiYgdXRmX2lzY29tcG9zaW5nKHV0Zl9wdHIyY2hhcih0X3MpKSkKKwktLW1zZ19jb2w7CisjZW5kaWYKKyAgICBpZiAobXNnX2NvbCA+PSBDb2x1bW5zKQorICAgIHsKKwltc2dfY29sID0gMDsKKwkrK21zZ19yb3c7CisgICAgfQorfQorCisKKy8qCisgKiBSZXR1cm5zIFRSVUUgd2hlbiBtZXNzYWdlcyBzaG91bGQgYmUgcHJpbnRlZCB3aXRoIG1jaF9lcnJtc2coKS4KKyAqIFRoaXMgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHZhbGlkIHNjcmVlbiwgc28gd2UgY2FuIHNlZSBlcnJvciBtZXNzYWdlcy4KKyAqIElmIHRlcm1jYXAgaXMgbm90IGFjdGl2ZSwgd2UgbWF5IGJlIHdyaXRpbmcgaW4gYW4gYWx0ZXJuYXRlIGNvbnNvbGUKKyAqIHdpbmRvdywgY3Vyc29yIHBvc2l0aW9uaW5nIG1heSBub3Qgd29yayBjb3JyZWN0bHkgKHdpbmRvdyBzaXplIG1heSBiZQorICogZGlmZmVyZW50LCBlLmcuIGZvciBXaW4zMiBjb25zb2xlKSBvciB3ZSBqdXN0IGRvbid0IGtub3cgd2hlcmUgdGhlCisgKiBjdXJzb3IgaXMuCisgKi8KKyAgICBpbnQKK21zZ191c2VfcHJpbnRmKCkKK3sKKyAgICByZXR1cm4gKCFtc2dfY2hlY2tfc2NyZWVuKCkKKyNpZiBkZWZpbmVkKFdJTjMyNjQpICYmICFkZWZpbmVkKEZFQVRfR1VJX01TV0lOKQorCSAgICB8fCAhdGVybWNhcF9hY3RpdmUKKyNlbmRpZgorCSAgICB8fCAoc3dhcHBpbmdfc2NyZWVuKCkgJiYgIXRlcm1jYXBfYWN0aXZlKQorCSAgICAgICApOworfQorCisjaWYgZGVmaW5lZChVU0VfTUNIX0VSUk1TRykgfHwgZGVmaW5lZChQUk9UTykKKworI2lmZGVmIG1jaF9lcnJtc2cKKyMgdW5kZWYgbWNoX2Vycm1zZworI2VuZGlmCisjaWZkZWYgbWNoX21zZworIyB1bmRlZiBtY2hfbXNnCisjZW5kaWYKKworLyoKKyAqIEdpdmUgYW4gZXJyb3IgbWVzc2FnZS4gIFRvIGJlIHVzZWQgd2hlbiB0aGUgc2NyZWVuIGhhc24ndCBiZWVuIGluaXRpYWxpemVkCisgKiB5ZXQuICBXaGVuIHN0ZGVyciBjYW4ndCBiZSB1c2VkLCBjb2xsZWN0IGVycm9yIG1lc3NhZ2VzIHVudGlsIHRoZSBHVUkgaGFzCisgKiBzdGFydGVkIGFuZCB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgaW4gYSBtZXNzYWdlIGJveC4KKyAqLworICAgIHZvaWQKK21jaF9lcnJtc2coc3RyKQorICAgIGNoYXIJKnN0cjsKK3sKKyAgICBpbnQJCWxlbjsKKworI2lmIChkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoRkVBVF9HVUkpKSAmJiAhZGVmaW5lZChBTFdBWVNfVVNFX0dVSSkKKyAgICAvKiBPbiBVbml4IHVzZSBzdGRlcnIgaWYgaXQncyBhIHR0eS4KKyAgICAgKiBXaGVuIG5vdCBnb2luZyB0byBzdGFydCB0aGUgR1VJIGFsc28gdXNlIHN0ZGVyci4KKyAgICAgKiBPbiBNYWMsIHdoZW4gc3RhcnRlZCBmcm9tIEZpbmRlciwgc3RkZXJyIGlzIHRoZSBjb25zb2xlLiAqLworICAgIGlmICgKKyMgaWZkZWYgVU5JWAorIyAgaWZkZWYgTUFDT1NfWF9VTklYCisJICAgIChpc2F0dHkoMikgJiYgc3RyY21wKCIvZGV2L2NvbnNvbGUiLCB0dHluYW1lKDIpKSAhPSAwKQorIyAgZWxzZQorCSAgICBpc2F0dHkoMikKKyMgIGVuZGlmCisjICBpZmRlZiBGRUFUX0dVSQorCSAgICB8fAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9HVUkKKwkgICAgIShndWkuaW5fdXNlIHx8IGd1aS5zdGFydGluZykKKyMgZW5kaWYKKwkgICAgKQorICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgc3RyKTsKKwlyZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBhdm9pZCBhIGRlbGF5IGZvciBhIG1lc3NhZ2UgdGhhdCBpc24ndCB0aGVyZSAqLworICAgIGVtc2dfb25fZGlzcGxheSA9IEZBTFNFOworCisgICAgbGVuID0gKGludClTVFJMRU4oc3RyKSArIDE7CisgICAgaWYgKGVycm9yX2dhLmdhX2dyb3dzaXplID09IDApCisgICAgeworCWVycm9yX2dhLmdhX2dyb3dzaXplID0gODA7CisJZXJyb3JfZ2EuZ2FfaXRlbXNpemUgPSAxOworICAgIH0KKyAgICBpZiAoZ2FfZ3JvdygmZXJyb3JfZ2EsIGxlbikgPT0gT0spCisgICAgeworCW1jaF9tZW1tb3ZlKChjaGFyX3UgKillcnJvcl9nYS5nYV9kYXRhICsgZXJyb3JfZ2EuZ2FfbGVuLAorCQkJCQkJCSAgKGNoYXJfdSAqKXN0ciwgbGVuKTsKKyNpZmRlZiBVTklYCisJLyogcmVtb3ZlIENSIGNoYXJhY3RlcnMsIHRoZXkgYXJlIGRpc3BsYXllZCAqLworCXsKKwkgICAgY2hhcl91CSpwOworCisJICAgIHAgPSAoY2hhcl91ICopZXJyb3JfZ2EuZ2FfZGF0YSArIGVycm9yX2dhLmdhX2xlbjsKKwkgICAgZm9yICg7OykKKwkgICAgeworCQlwID0gdmltX3N0cmNocihwLCAnXHInKTsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJICAgIGJyZWFrOworCQkqcCA9ICcgJzsKKwkgICAgfQorCX0KKyNlbmRpZgorCS0tbGVuOwkJLyogZG9uJ3QgY291bnQgdGhlIE5VTCBhdCB0aGUgZW5kICovCisJZXJyb3JfZ2EuZ2FfbGVuICs9IGxlbjsKKwllcnJvcl9nYS5nYV9yb29tIC09IGxlbjsKKyAgICB9Cit9CisKKy8qCisgKiBHaXZlIGEgbWVzc2FnZS4gIFRvIGJlIHVzZWQgd2hlbiB0aGUgc2NyZWVuIGhhc24ndCBiZWVuIGluaXRpYWxpemVkIHlldC4KKyAqIFdoZW4gdGhlcmUgaXMgbm8gdHR5LCBjb2xsZWN0IG1lc3NhZ2VzIHVudGlsIHRoZSBHVUkgaGFzIHN0YXJ0ZWQgYW5kIHRoZXkKKyAqIGNhbiBiZSBkaXNwbGF5ZWQgaW4gYSBtZXNzYWdlIGJveC4KKyAqLworICAgIHZvaWQKK21jaF9tc2coc3RyKQorICAgIGNoYXIJKnN0cjsKK3sKKyNpZiAoZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKEZFQVRfR1VJKSkgJiYgIWRlZmluZWQoQUxXQVlTX1VTRV9HVUkpCisgICAgLyogT24gVW5peCB1c2Ugc3Rkb3V0IGlmIHdlIGhhdmUgYSB0dHkuICBUaGlzIGFsbG93cyAidmltIC1oIHwgbW9yZSIgYW5kCisgICAgICogdXNlcyBtY2hfZXJybXNnKCkgd2hlbiBzdGFydGVkIGZyb20gdGhlIGRlc2t0b3AuCisgICAgICogV2hlbiBub3QgZ29pbmcgdG8gc3RhcnQgdGhlIEdVSSBhbHNvIHVzZSBzdGRvdXQuCisgICAgICogT24gTWFjLCB3aGVuIHN0YXJ0ZWQgZnJvbSBGaW5kZXIsIHN0ZGVyciBpcyB0aGUgY29uc29sZS4gKi8KKyAgICBpZiAoCisjICBpZmRlZiBVTklYCisjICAgaWZkZWYgTUFDT1NfWF9VTklYCisJICAgIChpc2F0dHkoMikgJiYgc3RyY21wKCIvZGV2L2NvbnNvbGUiLCB0dHluYW1lKDIpKSAhPSAwKQorIyAgIGVsc2UKKwkgICAgaXNhdHR5KDIpCisjICAgIGVuZGlmCisjICAgaWZkZWYgRkVBVF9HVUkKKwkgICAgfHwKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIEZFQVRfR1VJCisJICAgICEoZ3VpLmluX3VzZSB8fCBndWkuc3RhcnRpbmcpCisjICBlbmRpZgorCSAgICApCisgICAgeworCXByaW50ZigiJXMiLCBzdHIpOworCXJldHVybjsKKyAgICB9CisjIGVuZGlmCisgICAgbWNoX2Vycm1zZyhzdHIpOworfQorI2VuZGlmIC8qIFVTRV9NQ0hfRVJSTVNHICovCisKKy8qCisgKiBQdXQgYSBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbiBhdCB0aGUgY3VycmVudCBtZXNzYWdlIHBvc2l0aW9uIGFuZCBhZHZhbmNlCisgKiB0byB0aGUgbmV4dCBwb3NpdGlvbi4gIE9ubHkgZm9yIHByaW50YWJsZSBBU0NJSSEKKyAqLworICAgIHN0YXRpYyB2b2lkCittc2dfc2NyZWVuX3B1dGNoYXIoYywgYXR0cikKKyAgICBpbnQJCWM7CisgICAgaW50CQlhdHRyOworeworICAgIG1zZ19kaWRvdXQgPSBUUlVFOwkJLyogcmVtZW1iZXIgdGhhdCBsaW5lIGlzIG5vdCBlbXB0eSAqLworICAgIHNjcmVlbl9wdXRjaGFyKGMsIG1zZ19yb3csIG1zZ19jb2wsIGF0dHIpOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgaWYgKGNtZG1zZ19ybCkKKyAgICB7CisJaWYgKC0tbXNnX2NvbCA9PSAwKQorCXsKKwkgICAgbXNnX2NvbCA9IENvbHVtbnM7CisJICAgICsrbXNnX3JvdzsKKwl9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwlpZiAoKyttc2dfY29sID49IENvbHVtbnMpCisJeworCSAgICBtc2dfY29sID0gMDsKKwkgICAgKyttc2dfcm93OworCX0KKyAgICB9Cit9CisKKyAgICB2b2lkCittc2dfbW9yZW1zZyhmdWxsKQorICAgIGludAkgICAgZnVsbDsKK3sKKyAgICBpbnQJICAgIGF0dHI7CisKKyAgICBhdHRyID0gaGxfYXR0cihITEZfTSk7CisgICAgc2NyZWVuX3B1dHMoKGNoYXJfdSAqKV8oIi0tIE1vcmUgLS0iKSwgKGludClSb3dzIC0gMSwgMCwgYXR0cik7CisgICAgaWYgKGZ1bGwpCisJc2NyZWVuX3B1dHMobW9yZV9iYWNrX3VzZWQKKwkgICAgPyAoY2hhcl91ICopXygiIChSRVQvQlM6IGxpbmUsIFNQQUNFL2I6IHBhZ2UsIGQvdTogaGFsZiBwYWdlLCBxOiBxdWl0KSIpCisJICAgIDogKGNoYXJfdSAqKV8oIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIpLAorCSAgICAoaW50KVJvd3MgLSAxLCAxMCwgYXR0cik7Cit9CisKKy8qCisgKiBSZXBlYXQgdGhlIG1lc3NhZ2UgZm9yIHRoZSBjdXJyZW50IG1vZGU6IEFTS01PUkUsIEVYVEVSTkNNRCwgQ09ORklSTSBvcgorICogZXhtb2RlX2FjdGl2ZS4KKyAqLworICAgIHZvaWQKK3JlcGVhdF9tZXNzYWdlKCkKK3sKKyAgICBpZiAoU3RhdGUgPT0gQVNLTU9SRSkKKyAgICB7CisJbXNnX21vcmVtc2coVFJVRSk7CS8qIGRpc3BsYXkgLS1tb3JlLS0gbWVzc2FnZSBhZ2FpbiAqLworCW1zZ19yb3cgPSBSb3dzIC0gMTsKKyAgICB9CisjaWZkZWYgRkVBVF9DT05fRElBTE9HCisgICAgZWxzZSBpZiAoU3RhdGUgPT0gQ09ORklSTSkKKyAgICB7CisJZGlzcGxheV9jb25maXJtX21zZygpOwkvKiBkaXNwbGF5ICI6Y29uZmlybSIgbWVzc2FnZSBhZ2FpbiAqLworCW1zZ19yb3cgPSBSb3dzIC0gMTsKKyAgICB9CisjZW5kaWYKKyAgICBlbHNlIGlmIChTdGF0ZSA9PSBFWFRFUk5DTUQpCisgICAgeworCXdpbmRnb3RvKG1zZ19yb3csIG1zZ19jb2wpOyAvKiBwdXQgY3Vyc29yIGJhY2sgKi8KKyAgICB9CisgICAgZWxzZSBpZiAoU3RhdGUgPT0gSElUUkVUVVJOIHx8IFN0YXRlID09IFNFVFdTSVpFKQorICAgIHsKKwloaXRfcmV0dXJuX21zZygpOworCW1zZ19yb3cgPSBSb3dzIC0gMTsKKyAgICB9Cit9CisKKy8qCisgKiBtc2dfY2hlY2tfc2NyZWVuIC0gY2hlY2sgaWYgdGhlIHNjcmVlbiBpcyBpbml0aWFsaXplZC4KKyAqIEFsc28gY2hlY2sgbXNnX3JvdyBhbmQgbXNnX2NvbCwgaWYgdGhleSBhcmUgdG9vIGJpZyBpdCBtYXkgY2F1c2UgYSBjcmFzaC4KKyAqIFdoaWxlIHN0YXJ0aW5nIHRoZSBHVUkgdGhlIHRlcm1pbmFsIGNvZGVzIHdpbGwgYmUgc2V0IGZvciB0aGUgR1VJLCBidXQgdGhlCisgKiBvdXRwdXQgZ29lcyB0byB0aGUgdGVybWluYWwuICBEb24ndCB1c2UgdGhlIHRlcm1pbmFsIGNvZGVzIHRoZW4uCisgKi8KKyAgICBzdGF0aWMgaW50Cittc2dfY2hlY2tfc2NyZWVuKCkKK3sKKyAgICBpZiAoIWZ1bGxfc2NyZWVuIHx8ICFzY3JlZW5fdmFsaWQoRkFMU0UpKQorCXJldHVybiBGQUxTRTsKKworICAgIGlmIChtc2dfcm93ID49IFJvd3MpCisJbXNnX3JvdyA9IFJvd3MgLSAxOworICAgIGlmIChtc2dfY29sID49IENvbHVtbnMpCisJbXNnX2NvbCA9IENvbHVtbnMgLSAxOworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICogQ2xlYXIgZnJvbSBjdXJyZW50IG1lc3NhZ2UgcG9zaXRpb24gdG8gZW5kIG9mIHNjcmVlbi4KKyAqIFNraXAgdGhpcyB3aGVuICI6c2lsZW50IiB3YXMgdXNlZCwgbm8gbmVlZCB0byBjbGVhciBmb3IgcmVkaXJlY3Rpb24uCisgKi8KKyAgICB2b2lkCittc2dfY2xyX2VvcygpCit7CisgICAgaWYgKG1zZ19zaWxlbnQgPT0gMCkKKwltc2dfY2xyX2Vvc19mb3JjZSgpOworfQorCisvKgorICogQ2xlYXIgZnJvbSBjdXJyZW50IG1lc3NhZ2UgcG9zaXRpb24gdG8gZW5kIG9mIHNjcmVlbi4KKyAqIE5vdGU6IG1zZ19jb2wgaXMgbm90IHVwZGF0ZWQsIHNvIHdlIHJlbWVtYmVyIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2UKKyAqIGZvciBtc2dfY2hlY2soKS4KKyAqLworICAgIHZvaWQKK21zZ19jbHJfZW9zX2ZvcmNlKCkKK3sKKyAgICBpZiAobXNnX3VzZV9wcmludGYoKSkKKyAgICB7CisJaWYgKGZ1bGxfc2NyZWVuKQkvKiBvbmx5IHdoZW4gdGVybWNhcCBjb2RlcyBhcmUgdmFsaWQgKi8KKwl7CisJICAgIGlmICgqVF9DRCkKKwkJb3V0X3N0cihUX0NEKTsJLyogY2xlYXIgdG8gZW5kIG9mIGRpc3BsYXkgKi8KKwkgICAgZWxzZSBpZiAoKlRfQ0UpCisJCW91dF9zdHIoVF9DRSk7CS8qIGNsZWFyIHRvIGVuZCBvZiBsaW5lICovCisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJaWYgKGNtZG1zZ19ybCkKKwl7CisJICAgIHNjcmVlbl9maWxsKG1zZ19yb3csIG1zZ19yb3cgKyAxLCAwLCBtc2dfY29sICsgMSwgJyAnLCAnICcsIDApOworCSAgICBzY3JlZW5fZmlsbChtc2dfcm93ICsgMSwgKGludClSb3dzLCAwLCAoaW50KUNvbHVtbnMsICcgJywgJyAnLCAwKTsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBzY3JlZW5fZmlsbChtc2dfcm93LCBtc2dfcm93ICsgMSwgbXNnX2NvbCwgKGludClDb2x1bW5zLAorCQkJCQkJCQkgJyAnLCAnICcsIDApOworCSAgICBzY3JlZW5fZmlsbChtc2dfcm93ICsgMSwgKGludClSb3dzLCAwLCAoaW50KUNvbHVtbnMsICcgJywgJyAnLCAwKTsKKwl9CisgICAgfQorfQorCisvKgorICogQ2xlYXIgdGhlIGNvbW1hbmQgbGluZS4KKyAqLworICAgIHZvaWQKK21zZ19jbHJfY21kbGluZSgpCit7CisgICAgbXNnX3JvdyA9IGNtZGxpbmVfcm93OworICAgIG1zZ19jb2wgPSAwOworICAgIG1zZ19jbHJfZW9zX2ZvcmNlKCk7Cit9CisKKy8qCisgKiBlbmQgcHV0dGluZyBhIG1lc3NhZ2Ugb24gdGhlIHNjcmVlbgorICogY2FsbCB3YWl0X3JldHVybiBpZiB0aGUgbWVzc2FnZSBkb2VzIG5vdCBmaXQgaW4gdGhlIGF2YWlsYWJsZSBzcGFjZQorICogcmV0dXJuIFRSVUUgaWYgd2FpdF9yZXR1cm4gbm90IGNhbGxlZC4KKyAqLworICAgIGludAorbXNnX2VuZCgpCit7CisgICAgLyoKKyAgICAgKiBpZiB0aGUgc3RyaW5nIGlzIGxhcmdlciB0aGFuIHRoZSB3aW5kb3csCisgICAgICogb3IgdGhlIHJ1bGVyIG9wdGlvbiBpcyBzZXQgYW5kIHdlIHJ1biBpbnRvIGl0LAorICAgICAqIHdlIGhhdmUgdG8gcmVkcmF3IHRoZSB3aW5kb3cuCisgICAgICogRG8gbm90IGRvIHRoaXMgaWYgd2UgYXJlIGFiYW5kb25pbmcgdGhlIGZpbGUgb3IgZWRpdGluZyB0aGUgY29tbWFuZCBsaW5lLgorICAgICAqLworICAgIGlmICghZXhpdGluZyAmJiBuZWVkX3dhaXRfcmV0dXJuICYmICEoU3RhdGUgJiBDTURMSU5FKSkKKyAgICB7CisJd2FpdF9yZXR1cm4oRkFMU0UpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisgICAgb3V0X2ZsdXNoKCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBJZiB0aGUgd3JpdHRlbiBtZXNzYWdlIHJ1bnMgaW50byB0aGUgc2hvd24gY29tbWFuZCBvciBydWxlciwgd2UgaGF2ZSB0bworICogd2FpdCBmb3IgaGl0LXJldHVybiBhbmQgcmVkcmF3IHRoZSB3aW5kb3cgbGF0ZXIuCisgKi8KKyAgICB2b2lkCittc2dfY2hlY2soKQoreworICAgIGlmIChtc2dfcm93ID09IFJvd3MgLSAxICYmIG1zZ19jb2wgPj0gc2NfY29sKQorICAgIHsKKwluZWVkX3dhaXRfcmV0dXJuID0gVFJVRTsKKwlyZWRyYXdfY21kbGluZSA9IFRSVUU7CisgICAgfQorfQorCisvKgorICogTWF5IHdyaXRlIGEgc3RyaW5nIHRvIHRoZSByZWRpcmVjdGlvbiBmaWxlLgorICogV2hlbiAibWF4bGVuIiBpcyAtMSB3cml0ZSB0aGUgd2hvbGUgc3RyaW5nLCBvdGhlcndpc2UgdXAgdG8gIm1heGxlbiIgYnl0ZXMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcmVkaXJfd3JpdGUoc3RyLCBtYXhsZW4pCisgICAgY2hhcl91CSpzdHI7CisgICAgaW50CQltYXhsZW47Cit7CisgICAgY2hhcl91CSpzID0gc3RyOworICAgIHN0YXRpYyBpbnQJY3VyX2NvbCA9IDA7CisKKyAgICBpZiAoKHJlZGlyX2ZkICE9IE5VTEwKKyNpZmRlZiBGRUFUX0VWQUwKKwkJCSAgfHwgcmVkaXJfcmVnCisjZW5kaWYKKwkJCQkgICAgICAgKSAmJiAhcmVkaXJfb2ZmKQorICAgIHsKKwkvKiBJZiB0aGUgc3RyaW5nIGRvZXNuJ3Qgc3RhcnQgd2l0aCBDUiBvciBOTCwgZ28gdG8gbXNnX2NvbCAqLworCWlmICgqcyAhPSAnXG4nICYmICpzICE9ICdccicpCisJeworCSAgICB3aGlsZSAoY3VyX2NvbCA8IG1zZ19jb2wpCisJICAgIHsKKyNpZmRlZiBGRUFUX0VWQUwKKwkJaWYgKHJlZGlyX3JlZykKKwkJICAgIHdyaXRlX3JlZ19jb250ZW50cyhyZWRpcl9yZWcsIChjaGFyX3UgKikiICIsIC0xLCBUUlVFKTsKKwkJZWxzZSBpZiAocmVkaXJfZmQpCisjZW5kaWYKKwkJICAgIGZwdXRzKCIgIiwgcmVkaXJfZmQpOworCQkrK2N1cl9jb2w7CisJICAgIH0KKwl9CisKKyNpZmRlZiBGRUFUX0VWQUwKKwlpZiAocmVkaXJfcmVnKQorCSAgICB3cml0ZV9yZWdfY29udGVudHMocmVkaXJfcmVnLCBzLCBtYXhsZW4sIFRSVUUpOworI2VuZGlmCisKKwkvKiBBZGp1c3QgdGhlIGN1cnJlbnQgY29sdW1uICovCisJd2hpbGUgKCpzICE9IE5VTCAmJiAobWF4bGVuIDwgMCB8fCAoaW50KShzIC0gc3RyKSA8IG1heGxlbikpCisJeworI2lmZGVmIEZFQVRfRVZBTAorCSAgICBpZiAoIXJlZGlyX3JlZyAmJiByZWRpcl9mZCAhPSBOVUxMKQorI2VuZGlmCisJCXB1dGMoKnMsIHJlZGlyX2ZkKTsKKwkgICAgaWYgKCpzID09ICdccicgfHwgKnMgPT0gJ1xuJykKKwkJY3VyX2NvbCA9IDA7CisJICAgIGVsc2UgaWYgKCpzID09ICdcdCcpCisJCWN1cl9jb2wgKz0gKDggLSBjdXJfY29sICUgOCk7CisJICAgIGVsc2UKKwkJKytjdXJfY29sOworCSAgICArK3M7CisJfQorCisJaWYgKG1zZ19zaWxlbnQgIT0gMCkJLyogc2hvdWxkIHVwZGF0ZSBtc2dfY29sICovCisJICAgIG1zZ19jb2wgPSBjdXJfY29sOworICAgIH0KK30KKworLyoKKyAqIEdpdmUgYSB3YXJuaW5nIG1lc3NhZ2UgKGZvciBzZWFyY2hpbmcpLgorICogVXNlICd3JyBoaWdobGlnaHRpbmcgYW5kIG1heSByZXBlYXQgdGhlIG1lc3NhZ2UgYWZ0ZXIgcmVkcmF3aW5nCisgKi8KKyAgICB2b2lkCitnaXZlX3dhcm5pbmcobWVzc2FnZSwgaGwpCisgICAgY2hhcl91ICAqbWVzc2FnZTsKKyAgICBpbnQJICAgIGhsOworeworICAgIC8qIERvbid0IGRvIHRoaXMgZm9yICI6c2lsZW50Ii4gKi8KKyAgICBpZiAobXNnX3NpbGVudCAhPSAwKQorCXJldHVybjsKKworICAgIC8qIERvbid0IHdhbnQgYSBoaXQtZW50ZXIgcHJvbXB0IGhlcmUuICovCisgICAgKytub193YWl0X3JldHVybjsKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBzZXRfdmltX3Zhcl9zdHJpbmcoVlZfV0FSTklOR01TRywgbWVzc2FnZSwgLTEpOworI2VuZGlmCisjaWZkZWYgVklNQlVERFkKKyAgICBWaW1CdWRkeVRleHQobWVzc2FnZSwgMSk7CisjZWxzZQorICAgIHZpbV9mcmVlKGtlZXBfbXNnKTsKKyAgICBrZWVwX21zZyA9IE5VTEw7CisgICAgaWYgKGhsKQorCWtlZXBfbXNnX2F0dHIgPSBobF9hdHRyKEhMRl9XKTsKKyAgICBlbHNlCisJa2VlcF9tc2dfYXR0ciA9IDA7CisgICAgaWYgKG1zZ19hdHRyKG1lc3NhZ2UsIGtlZXBfbXNnX2F0dHIpICYmIG1zZ19zY3JvbGxlZCA9PSAwKQorCXNldF9rZWVwX21zZyhtZXNzYWdlKTsKKyAgICBtc2dfZGlkb3V0ID0gRkFMU0U7CSAgICAvKiBvdmVyd3JpdGUgdGhpcyBtZXNzYWdlICovCisgICAgbXNnX25vd2FpdCA9IFRSVUU7CSAgICAvKiBkb24ndCB3YWl0IGZvciB0aGlzIG1lc3NhZ2UgKi8KKyAgICBtc2dfY29sID0gMDsKKyNlbmRpZgorICAgIC0tbm9fd2FpdF9yZXR1cm47Cit9CisKKy8qCisgKiBBZHZhbmNlIG1zZyBjdXJzb3IgdG8gY29sdW1uICJjb2wiLgorICovCisgICAgdm9pZAorbXNnX2FkdmFuY2UoY29sKQorICAgIGludAkgICAgY29sOworeworICAgIGlmIChtc2dfc2lsZW50ICE9IDApCS8qIG5vdGhpbmcgdG8gYWR2YW5jZSB0byAqLworICAgIHsKKwltc2dfY29sID0gY29sOwkJLyogZm9yIHJlZGlyZWN0aW9uLCBtYXkgZmlsbCBpdCB1cCBsYXRlciAqLworCXJldHVybjsKKyAgICB9CisgICAgaWYgKGNvbCA+PSBDb2x1bW5zKQkJLyogbm90IGVub3VnaCByb29tICovCisJY29sID0gQ29sdW1ucyAtIDE7CisgICAgd2hpbGUgKG1zZ19jb2wgPCBjb2wpCisJbXNnX3B1dGNoYXIoJyAnKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9DT05fRElBTE9HKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFVzZWQgZm9yICJjb25maXJtKCkiIGZ1bmN0aW9uLCBhbmQgdGhlIDpjb25maXJtIGNvbW1hbmQgcHJlZml4LgorICogVmVyc2lvbnMgd2hpY2ggaGF2ZW4ndCBnb3QgZmxleGlibGUgZGlhbG9ncyB5ZXQsIGFuZCBjb25zb2xlCisgKiB2ZXJzaW9ucywgZ2V0IHRoaXMgZ2VuZXJpYyBoYW5kbGVyIHdoaWNoIHVzZXMgdGhlIGNvbW1hbmQgbGluZS4KKyAqCisgKiB0eXBlICA9IG9uZSBvZjoKKyAqCSAgIFZJTV9RVUVTVElPTiwgVklNX0lORk8sIFZJTV9XQVJOSU5HLCBWSU1fRVJST1Igb3IgVklNX0dFTkVSSUMKKyAqIHRpdGxlID0gdGl0bGUgc3RyaW5nIChjYW4gYmUgTlVMTCBmb3IgZGVmYXVsdCkKKyAqIChuZWl0aGVyIHVzZWQgaW4gY29uc29sZSBkaWFsb2dzIGF0IHRoZSBtb21lbnQpCisgKgorICogRm9ybWF0IG9mIHRoZSAiYnV0dG9ucyIgc3RyaW5nOgorICogIkJ1dHRvbjFOYW1lXG5CdXR0b24yTmFtZVxuQnV0dG9uM05hbWUiCisgKiBUaGUgZmlyc3QgYnV0dG9uIHNob3VsZCBub3JtYWxseSBiZSB0aGUgZGVmYXVsdC9hY2NlcHQKKyAqIFRoZSBzZWNvbmQgYnV0dG9uIHNob3VsZCBiZSB0aGUgJ0NhbmNlbCcgYnV0dG9uCisgKiBPdGhlciBidXR0b25zLSB1c2UgeW91ciBpbWFnaW5hdGlvbiEKKyAqIEEgJyYnIGluIGEgYnV0dG9uIG5hbWUgYmVjb21lcyBhIHNob3J0Y3V0LCBzbyBlYWNoICcmJyBzaG91bGQgYmUgYmVmb3JlIGEKKyAqIGRpZmZlcmVudCBsZXR0ZXIuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgaW50Citkb19kaWFsb2codHlwZSwgdGl0bGUsIG1lc3NhZ2UsIGJ1dHRvbnMsIGRmbHRidXR0b24sIHRleHRmaWVsZCkKKyAgICBpbnQJCXR5cGU7CisgICAgY2hhcl91CSp0aXRsZTsKKyAgICBjaGFyX3UJKm1lc3NhZ2U7CisgICAgY2hhcl91CSpidXR0b25zOworICAgIGludAkJZGZsdGJ1dHRvbjsKKyAgICBjaGFyX3UJKnRleHRmaWVsZDsJLyogSU9idWZmIGZvciBpbnB1dGRpYWxvZygpLCBOVUxMIG90aGVyd2lzZSAqLworeworICAgIGludAkJb2xkU3RhdGU7CisgICAgaW50CQlyZXR2YWwgPSAwOworICAgIGNoYXJfdQkqaG90a2V5czsKKyAgICBpbnQJCWM7CisgICAgaW50CQlpOworCisjaWZuZGVmIE5PX0NPTlNPTEUKKyAgICAvKiBEb24ndCBvdXRwdXQgYW55dGhpbmcgaW4gc2lsZW50IG1vZGUgKCJleCAtcyIpICovCisgICAgaWYgKHNpbGVudF9tb2RlKQorCXJldHVybiBkZmx0YnV0dG9uOyAgIC8qIHJldHVybiBkZWZhdWx0IG9wdGlvbiAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSV9ESUFMT0cKKyAgICAvKiBXaGVuIEdVSSBpcyBydW5uaW5nIGFuZCAnYycgbm90IGluICdndWlvcHRpb25zJywgdXNlIHRoZSBHVUkgZGlhbG9nICovCisgICAgaWYgKGd1aS5pbl91c2UgJiYgdmltX3N0cmNocihwX2dvLCBHT19DT05ESUFMT0cpID09IE5VTEwpCisgICAgeworCWMgPSBndWlfbWNoX2RpYWxvZyh0eXBlLCB0aXRsZSwgbWVzc2FnZSwgYnV0dG9ucywgZGZsdGJ1dHRvbiwKKwkJCQkJCQkJICAgdGV4dGZpZWxkKTsKKwltc2dfZW5kX3Byb21wdCgpOworCisJLyogRmx1c2ggb3V0cHV0IHRvIGF2b2lkIHRoYXQgZnVydGhlciBtZXNzYWdlcyBhbmQgcmVkcmF3aW5nIGlzIGRvbmUKKwkgKiBpbiB0aGUgd3Jvbmcgb3JkZXIuICovCisJb3V0X2ZsdXNoKCk7CisJZ3VpX21jaF91cGRhdGUoKTsKKworCXJldHVybiBjOworICAgIH0KKyNlbmRpZgorCisgICAgb2xkU3RhdGUgPSBTdGF0ZTsKKyAgICBTdGF0ZSA9IENPTkZJUk07CisjaWZkZWYgRkVBVF9NT1VTRQorICAgIHNldG1vdXNlKCk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogU2luY2Ugd2Ugd2FpdCBmb3IgYSBrZXlwcmVzcywgZG9uJ3QgbWFrZSB0aGUKKyAgICAgKiB1c2VyIHByZXNzIFJFVFVSTiBhcyB3ZWxsIGFmdGVyd2FyZHMuCisgICAgICovCisgICAgKytub193YWl0X3JldHVybjsKKyAgICBob3RrZXlzID0gbXNnX3Nob3dfY29uc29sZV9kaWFsb2cobWVzc2FnZSwgYnV0dG9ucywgZGZsdGJ1dHRvbik7CisKKyAgICBpZiAoaG90a2V5cyAhPSBOVUxMKQorICAgIHsKKwlmb3IgKDs7KQorCXsKKwkgICAgLyogR2V0IGEgdHlwZWQgY2hhcmFjdGVyIGRpcmVjdGx5IGZyb20gdGhlIHVzZXIuICovCisJICAgIGMgPSBnZXRfa2V5c3Ryb2tlKCk7CisJICAgIHN3aXRjaCAoYykKKwkgICAgeworCSAgICBjYXNlIENBUjoJCS8qIFVzZXIgYWNjZXB0cyBkZWZhdWx0IG9wdGlvbiAqLworCSAgICBjYXNlIE5MOgorCQlyZXR2YWwgPSBkZmx0YnV0dG9uOworCQlicmVhazsKKwkgICAgY2FzZSBDdHJsX0M6CS8qIFVzZXIgYWJvcnRzL2NhbmNlbHMgKi8KKwkgICAgY2FzZSBFU0M6CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgkJLyogQ291bGQgYmUgYSBob3RrZXk/ICovCisJCWlmIChjIDwgMCkJLyogc3BlY2lhbCBrZXlzIGFyZSBpZ25vcmVkIGhlcmUgKi8KKwkJICAgIGNvbnRpbnVlOworCQkvKiBNYWtlIHRoZSBjaGFyYWN0ZXIgbG93ZXJjYXNlLCBhcyBjaGFycyBpbiAiaG90a2V5cyIgYXJlLiAqLworCQljID0gTUJfVE9MT1dFUihjKTsKKwkJcmV0dmFsID0gMTsKKwkJZm9yIChpID0gMDsgaG90a2V5c1tpXTsgKytpKQorCQl7CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJICAgIHsKKwkJCWlmICgoKm1iX3B0cjJjaGFyKShob3RrZXlzICsgaSkgPT0gYykKKwkJCSAgICBicmVhazsKKwkJCWkgKz0gKCptYl9wdHIybGVuX2NoZWNrKShob3RrZXlzICsgaSkgLSAxOworCQkgICAgfQorCQkgICAgZWxzZQorI2VuZGlmCisJCQlpZiAoaG90a2V5c1tpXSA9PSBjKQorCQkJICAgIGJyZWFrOworCQkgICAgKytyZXR2YWw7CisJCX0KKwkJaWYgKGhvdGtleXNbaV0pCisJCSAgICBicmVhazsKKwkJLyogTm8gaG90a2V5IG1hdGNoLCBzbyBrZWVwIHdhaXRpbmcgKi8KKwkJY29udGludWU7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCisJdmltX2ZyZWUoaG90a2V5cyk7CisgICAgfQorCisgICAgU3RhdGUgPSBvbGRTdGF0ZTsKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgc2V0bW91c2UoKTsKKyNlbmRpZgorICAgIC0tbm9fd2FpdF9yZXR1cm47CisgICAgbXNnX2VuZF9wcm9tcHQoKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgY29weV9jaGFyIF9fQVJHUygoY2hhcl91ICpmcm9tLCBjaGFyX3UgKnRvLCBpbnQgbG93ZXJjYXNlKSk7CisKKy8qCisgKiBDb3B5IG9uZSBjaGFyYWN0ZXIgZnJvbSAiKmZyb20iIHRvICIqdG8iLCB0YWtpbmcgY2FyZSBvZiBtdWx0aS1ieXRlCisgKiBjaGFyYWN0ZXJzLiAgUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGNoYXJhY3RlciBpbiBieXRlcy4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NvcHlfY2hhcihmcm9tLCB0bywgbG93ZXJjYXNlKQorICAgIGNoYXJfdQkqZnJvbTsKKyAgICBjaGFyX3UJKnRvOworICAgIGludAkJbG93ZXJjYXNlOwkvKiBtYWtlIGNoYXJhY3RlciBsb3dlciBjYXNlICovCit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJbGVuOworICAgIGludAkJYzsKKworICAgIGlmIChoYXNfbWJ5dGUpCisgICAgeworCWlmIChsb3dlcmNhc2UpCisJeworCSAgICBjID0gTUJfVE9MT1dFUigoKm1iX3B0cjJjaGFyKShmcm9tKSk7CisJICAgIHJldHVybiAoKm1iX2NoYXIyYnl0ZXMpKGMsIHRvKTsKKwl9CisJZWxzZQorCXsKKwkgICAgbGVuID0gKCptYl9wdHIybGVuX2NoZWNrKShmcm9tKTsKKwkgICAgbWNoX21lbW1vdmUodG8sIGZyb20sIChzaXplX3QpbGVuKTsKKwkgICAgcmV0dXJuIGxlbjsKKwl9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwlpZiAobG93ZXJjYXNlKQorCSAgICAqdG8gPSAoY2hhcl91KVRPTE9XRVJfTE9DKCpmcm9tKTsKKwllbHNlCisJICAgICp0byA9ICpmcm9tOworCXJldHVybiAxOworICAgIH0KK30KKworLyoKKyAqIEZvcm1hdCB0aGUgZGlhbG9nIHN0cmluZywgYW5kIGRpc3BsYXkgaXQgYXQgdGhlIGJvdHRvbSBvZgorICogdGhlIHNjcmVlbi4gUmV0dXJuIGEgc3RyaW5nIG9mIGhvdGtleSBjaGFycyAoaWYgZGVmaW5lZCkgZm9yCisgKiBlYWNoICdidXR0b24nLiBJZiBhIGJ1dHRvbiBoYXMgbm8gaG90a2V5IGRlZmluZWQsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YKKyAqIHRoZSBidXR0b24gaXMgdXNlZC4KKyAqIFRoZSBob3RrZXlzIGNhbiBiZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMsIGJ1dCB3aXRob3V0IGNvbWJpbmluZyBjaGFycy4KKyAqCisgKiBSZXR1cm5zIGFuIGFsbG9jYXRlZCBzdHJpbmcgd2l0aCBob3RrZXlzLCBvciBOVUxMIGZvciBlcnJvci4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorbXNnX3Nob3dfY29uc29sZV9kaWFsb2cobWVzc2FnZSwgYnV0dG9ucywgZGZsdGJ1dHRvbikKKyAgICBjaGFyX3UJKm1lc3NhZ2U7CisgICAgY2hhcl91CSpidXR0b25zOworICAgIGludAkJZGZsdGJ1dHRvbjsKK3sKKyAgICBpbnQJCWxlbiA9IDA7CisjaWZkZWYgRkVBVF9NQllURQorIyBkZWZpbmUgSE9US19MRU4gKGhhc19tYnl0ZSA/IE1CX01BWEJZVEVTIDogMSkKKyNlbHNlCisjIGRlZmluZSBIT1RLX0xFTiAxCisjZW5kaWYKKyAgICBpbnQJCWxlbmhvdGtleSA9IEhPVEtfTEVOOwkvKiBjb3VudCBmaXJzdCBidXR0b24gKi8KKyAgICBjaGFyX3UJKmhvdGsgPSBOVUxMOworICAgIGNoYXJfdQkqbXNncCA9IE5VTEw7CisgICAgY2hhcl91CSpob3RrcCA9IE5VTEw7CisgICAgY2hhcl91CSpyOworICAgIGludAkJY29weTsKKyNkZWZpbmUgSEFTX0hPVEtFWV9MRU4gMzAKKyAgICBjaGFyX3UJaGFzX2hvdGtleVtIQVNfSE9US0VZX0xFTl07CisgICAgaW50CQlmaXJzdF9ob3RrZXkgPSBGQUxTRTsJLyogZmlyc3QgY2hhciBvZiBidXR0b24gaXMgaG90a2V5ICovCisgICAgaW50CQlpZHg7CisKKyAgICBoYXNfaG90a2V5WzBdID0gRkFMU0U7CisKKyAgICAvKgorICAgICAqIEZpcnN0IGxvb3A6IGNvbXB1dGUgdGhlIHNpemUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLgorICAgICAqIFNlY29uZCBsb29wOiBjb3B5IHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LgorICAgICAqLworICAgIGZvciAoY29weSA9IDA7IGNvcHkgPD0gMTsgKytjb3B5KQorICAgIHsKKwlyID0gYnV0dG9uczsKKwlpZHggPSAwOworCXdoaWxlICgqcikKKwl7CisJICAgIGlmICgqciA9PSBETEdfQlVUVE9OX1NFUCkKKwkgICAgeworCQlpZiAoY29weSkKKwkJeworCQkgICAgKm1zZ3ArKyA9ICcsJzsKKwkJICAgICptc2dwKysgPSAnICc7CSAgICAvKiAnXG4nIC0+ICcsICcgKi8KKworCQkgICAgLyogYWR2YW5jZSB0byBuZXh0IGhvdGtleSBhbmQgc2V0IGRlZmF1bHQgaG90a2V5ICovCisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCWhvdGtwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykoaG90a3ApOworCQkgICAgZWxzZQorI2VuZGlmCisJCQkrK2hvdGtwOworCQkgICAgKHZvaWQpY29weV9jaGFyKHIgKyAxLCBob3RrcCwgVFJVRSk7CisJCSAgICBpZiAoZGZsdGJ1dHRvbikKKwkJCS0tZGZsdGJ1dHRvbjsKKworCQkgICAgLyogSWYgbm8gaG90a2V5IGlzIHNwZWNpZmllZCBmaXJzdCBjaGFyIGlzIHVzZWQuICovCisJCSAgICBpZiAoaWR4IDwgSEFTX0hPVEtFWV9MRU4gLSAxICYmICFoYXNfaG90a2V5WysraWR4XSkKKwkJCWZpcnN0X2hvdGtleSA9IFRSVUU7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBsZW4gKz0gMzsJCSAgICAvKiAnXG4nIC0+ICcsICc7ICd4JyAtPiAnKHgpJyAqLworCQkgICAgbGVuaG90a2V5ICs9IEhPVEtfTEVOOyAgLyogZWFjaCBidXR0b24gbmVlZHMgYSBob3RrZXkgKi8KKwkJICAgIGlmIChpZHggPCBIQVNfSE9US0VZX0xFTiAtIDEpCisJCQloYXNfaG90a2V5WysraWR4XSA9IEZBTFNFOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKnIgPT0gRExHX0hPVEtFWV9DSEFSIHx8IGZpcnN0X2hvdGtleSkKKwkgICAgeworCQlpZiAoKnIgPT0gRExHX0hPVEtFWV9DSEFSKQorCQkgICAgKytyOworCQlmaXJzdF9ob3RrZXkgPSBGQUxTRTsKKwkJaWYgKGNvcHkpCisJCXsKKwkJICAgIGlmICgqciA9PSBETEdfSE9US0VZX0NIQVIpCQkvKiAnJiZhJyAtPiAnJmEnICovCisJCQkqbXNncCsrID0gKnI7CisJCSAgICBlbHNlCisJCSAgICB7CisJCQkvKiAnJmEnIC0+ICdbYV0nICovCisJCQkqbXNncCsrID0gKGRmbHRidXR0b24gPT0gMSkgPyAnWycgOiAnKCc7CisJCQltc2dwICs9IGNvcHlfY2hhcihyLCBtc2dwLCBGQUxTRSk7CisJCQkqbXNncCsrID0gKGRmbHRidXR0b24gPT0gMSkgPyAnXScgOiAnKSc7CisKKwkJCS8qIHJlZGVmaW5lIGhvdGtleSAqLworCQkJKHZvaWQpY29weV9jaGFyKHIsIGhvdGtwLCBUUlVFKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCXsKKwkJICAgICsrbGVuOwkgICAgLyogJyZhJyAtPiAnW2FdJyAqLworCQkgICAgaWYgKGlkeCA8IEhBU19IT1RLRVlfTEVOIC0gMSkKKwkJCWhhc19ob3RrZXlbaWR4XSA9IFRSVUU7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogZXZlcnl0aGluZyBlbHNlIGNvcHkgbGl0ZXJhbGx5ICovCisJCWlmIChjb3B5KQorCQkgICAgbXNncCArPSBjb3B5X2NoYXIociwgbXNncCwgRkFMU0UpOworCSAgICB9CisKKwkgICAgLyogYWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCXIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShyKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCSsrcjsKKwl9CisKKwlpZiAoY29weSkKKwl7CisJICAgICptc2dwKysgPSAnOic7CisJICAgICptc2dwKysgPSAnICc7CisJICAgICptc2dwID0gTlVMOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJaG90a3AgKz0gKCptYl9wdHIybGVuX2NoZWNrKShob3RrcCk7CisJICAgIGVsc2UKKyNlbmRpZgorCQkrK2hvdGtwOworCSAgICAqaG90a3AgPSBOVUw7CisJfQorCWVsc2UKKwl7CisJICAgIGxlbiArPSBTVFJMRU4obWVzc2FnZSkKKwkJICAgICsgMgkJCS8qIGZvciB0aGUgTkwncyAqLworCQkgICAgKyBTVFJMRU4oYnV0dG9ucykKKwkJICAgICsgMzsJCS8qIGZvciB0aGUgIjogIiBhbmQgTlVMICovCisJICAgIGxlbmhvdGtleSsrOwkJLyogZm9yIHRoZSBOVUwgKi8KKworCSAgICAvKiBJZiBubyBob3RrZXkgaXMgc3BlY2lmaWVkIGZpcnN0IGNoYXIgaXMgdXNlZC4gKi8KKwkgICAgaWYgKCFoYXNfaG90a2V5WzBdKQorCSAgICB7CisJCWZpcnN0X2hvdGtleSA9IFRSVUU7CisJCWxlbiArPSAyOwkJLyogIngiIC0+ICJbeF0iICovCisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBOb3cgYWxsb2NhdGUgYW5kIGxvYWQgdGhlIHN0cmluZ3MKKwkgICAgICovCisJICAgIHZpbV9mcmVlKGNvbmZpcm1fbXNnKTsKKwkgICAgY29uZmlybV9tc2cgPSBhbGxvYyhsZW4pOworCSAgICBpZiAoY29uZmlybV9tc2cgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJICAgICpjb25maXJtX21zZyA9IE5VTDsKKwkgICAgaG90ayA9IGFsbG9jKGxlbmhvdGtleSk7CisJICAgIGlmIChob3RrID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJICAgICpjb25maXJtX21zZyA9ICdcbic7CisJICAgIFNUUkNQWShjb25maXJtX21zZyArIDEsIG1lc3NhZ2UpOworCisJICAgIG1zZ3AgPSBjb25maXJtX21zZyArIDEgKyBTVFJMRU4obWVzc2FnZSk7CisJICAgIGhvdGtwID0gaG90azsKKworCSAgICAvKiBkZWZpbmUgZmlyc3QgZGVmYXVsdCBob3RrZXkgKi8KKwkgICAgKHZvaWQpY29weV9jaGFyKGJ1dHRvbnMsIGhvdGtwLCBUUlVFKTsKKworCSAgICAvKiBSZW1lbWJlciB3aGVyZSB0aGUgY2hvaWNlcyBzdGFydCwgZGlzcGxheWluZyBzdGFydHMgaGVyZSB3aGVuCisJICAgICAqICJob3RrcCIgdHlwZWQgYXQgdGhlIG1vcmUgcHJvbXB0LiAqLworCSAgICBjb25maXJtX21zZ190YWlsID0gbXNncDsKKwkgICAgKm1zZ3ArKyA9ICdcbic7CisJfQorICAgIH0KKworICAgIGRpc3BsYXlfY29uZmlybV9tc2coKTsKKyAgICByZXR1cm4gaG90azsKK30KKworLyoKKyAqIERpc3BsYXkgdGhlICI6Y29uZmlybSIgbWVzc2FnZS4gIEFsc28gY2FsbGVkIHdoZW4gc2NyZWVuIHJlc2l6ZWQuCisgKi8KKyAgICB2b2lkCitkaXNwbGF5X2NvbmZpcm1fbXNnKCkKK3sKKyAgICAvKiBhdm9pZCB0aGF0ICdxJyBhdCB0aGUgbW9yZSBwcm9tcHQgdHJ1bmNhdGVzIHRoZSBtZXNzYWdlIGhlcmUgKi8KKyAgICArK2NvbmZpcm1fbXNnX3VzZWQ7CisgICAgaWYgKGNvbmZpcm1fbXNnICE9IE5VTEwpCisJbXNnX3B1dHNfYXR0cihjb25maXJtX21zZywgaGxfYXR0cihITEZfTSkpOworICAgIC0tY29uZmlybV9tc2dfdXNlZDsKK30KKworI2VuZGlmIC8qIEZFQVRfQ09OX0RJQUxPRyAqLworCisjaWYgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKQorCisgICAgaW50Cit2aW1fZGlhbG9nX3llc25vKHR5cGUsIHRpdGxlLCBtZXNzYWdlLCBkZmx0KQorICAgIGludAkJdHlwZTsKKyAgICBjaGFyX3UJKnRpdGxlOworICAgIGNoYXJfdQkqbWVzc2FnZTsKKyAgICBpbnQJCWRmbHQ7Cit7CisgICAgaWYgKGRvX2RpYWxvZyh0eXBlLAorCQl0aXRsZSA9PSBOVUxMID8gKGNoYXJfdSAqKV8oIlF1ZXN0aW9uIikgOiB0aXRsZSwKKwkJbWVzc2FnZSwKKwkJKGNoYXJfdSAqKV8oIiZZZXNcbiZObyIpLCBkZmx0LCBOVUxMKSA9PSAxKQorCXJldHVybiBWSU1fWUVTOworICAgIHJldHVybiBWSU1fTk87Cit9CisKKyAgICBpbnQKK3ZpbV9kaWFsb2dfeWVzbm9jYW5jZWwodHlwZSwgdGl0bGUsIG1lc3NhZ2UsIGRmbHQpCisgICAgaW50CQl0eXBlOworICAgIGNoYXJfdQkqdGl0bGU7CisgICAgY2hhcl91CSptZXNzYWdlOworICAgIGludAkJZGZsdDsKK3sKKyAgICBzd2l0Y2ggKGRvX2RpYWxvZyh0eXBlLAorCQl0aXRsZSA9PSBOVUxMID8gKGNoYXJfdSAqKV8oIlF1ZXN0aW9uIikgOiB0aXRsZSwKKwkJbWVzc2FnZSwKKwkJKGNoYXJfdSAqKV8oIiZZZXNcbiZOb1xuJkNhbmNlbCIpLCBkZmx0LCBOVUxMKSkKKyAgICB7CisJY2FzZSAxOiByZXR1cm4gVklNX1lFUzsKKwljYXNlIDI6IHJldHVybiBWSU1fTk87CisgICAgfQorICAgIHJldHVybiBWSU1fQ0FOQ0VMOworfQorCisgICAgaW50Cit2aW1fZGlhbG9nX3llc25vYWxsY2FuY2VsKHR5cGUsIHRpdGxlLCBtZXNzYWdlLCBkZmx0KQorICAgIGludAkJdHlwZTsKKyAgICBjaGFyX3UJKnRpdGxlOworICAgIGNoYXJfdQkqbWVzc2FnZTsKKyAgICBpbnQJCWRmbHQ7Cit7CisgICAgc3dpdGNoIChkb19kaWFsb2codHlwZSwKKwkJdGl0bGUgPT0gTlVMTCA/IChjaGFyX3UgKikiUXVlc3Rpb24iIDogdGl0bGUsCisJCW1lc3NhZ2UsCisJCShjaGFyX3UgKilfKCImWWVzXG4mTm9cblNhdmUgJkFsbFxuJkRpc2NhcmQgQWxsXG4mQ2FuY2VsIiksCisJCQkJCQkJCSAgZGZsdCwgTlVMTCkpCisgICAgeworCWNhc2UgMTogcmV0dXJuIFZJTV9ZRVM7CisJY2FzZSAyOiByZXR1cm4gVklNX05POworCWNhc2UgMzogcmV0dXJuIFZJTV9BTEw7CisJY2FzZSA0OiByZXR1cm4gVklNX0RJU0NBUkRBTEw7CisgICAgfQorICAgIHJldHVybiBWSU1fQ0FOQ0VMOworfQorCisjZW5kaWYgLyogRkVBVF9HVUlfRElBTE9HIHx8IEZFQVRfQ09OX0RJQUxPRyAqLworCisjaWYgZGVmaW5lZChGRUFUX0JST1dTRSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBHZW5lcmljIGJyb3dzZSBmdW5jdGlvbi4gIENhbGxzIGd1aV9tY2hfYnJvd3NlKCkgd2hlbiBwb3NzaWJsZS4KKyAqIExhdGVyIHRoaXMgbWF5IHBvcC11cCBhIG5vbi1HVUkgZmlsZSBzZWxlY3RvciAoZXh0ZXJuYWwgY29tbWFuZD8pLgorICovCisgICAgY2hhcl91ICoKK2RvX2Jyb3dzZShzYXZpbmcsIHRpdGxlLCBkZmx0LCBleHQsIGluaXRkaXIsIGZpbHRlciwgYnVmKQorICAgIGludAkJc2F2aW5nOwkJLyogd3JpdGUgYWN0aW9uICovCisgICAgY2hhcl91CSp0aXRsZTsJCS8qIHRpdGxlIGZvciB0aGUgd2luZG93ICovCisgICAgY2hhcl91CSpkZmx0OwkJLyogZGVmYXVsdCBmaWxlIG5hbWUgKG1heSBpbmNsdWRlIGRpcmVjdG9yeSkgKi8KKyAgICBjaGFyX3UJKmV4dDsJCS8qIGV4dGVuc2lvbiBhZGRlZCAqLworICAgIGNoYXJfdQkqaW5pdGRpcjsJLyogaW5pdGlhbCBkaXJlY3RvcnksIE5VTEwgZm9yIGN1cnJlbnQgZGlyIG9yCisJCQkJICAgd2hlbiB1c2luZyBwYXRoIGZyb20gImRmbHQiICovCisgICAgY2hhcl91CSpmaWx0ZXI7CS8qIGZpbGUgbmFtZSBmaWx0ZXIgKi8KKyAgICBidWZfVAkqYnVmOwkJLyogYnVmZmVyIHRvIHJlYWQvd3JpdGUgZm9yICovCit7CisgICAgY2hhcl91CQkqZm5hbWU7CisgICAgc3RhdGljIGNoYXJfdQkqbGFzdF9kaXIgPSBOVUxMOyAgICAvKiBsYXN0IHVzZWQgZGlyZWN0b3J5ICovCisgICAgY2hhcl91CQkqdG9mcmVlID0gTlVMTDsKKyAgICBpbnQJCQlzYXZlX2Jyb3dzZSA9IGNtZG1vZC5icm93c2U7CisKKyAgICAvKiBNdXN0IHR1cm4gb2ZmIGJyb3dzZSB0byBhdm9pZCB0aGF0IGF1dG9jb21tYW5kcyB3aWxsIGdldCB0aGUKKyAgICAgKiBmbGFnIHRvbyEgICovCisgICAgY21kbW9kLmJyb3dzZSA9IEZBTFNFOworCisgICAgaWYgKHRpdGxlID09IE5VTEwpCisgICAgeworCWlmIChzYXZpbmcpCisJICAgIHRpdGxlID0gKGNoYXJfdSAqKV8oIlNhdmUgRmlsZSBkaWFsb2ciKTsKKwllbHNlCisJICAgIHRpdGxlID0gKGNoYXJfdSAqKV8oIk9wZW4gRmlsZSBkaWFsb2ciKTsKKyAgICB9CisKKyAgICAvKiBXaGVuIG5vIGRpcmVjdG9yeSBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0IGZpbGUgbmFtZSwgZGVmYXVsdCBkaXIsIGJ1ZmZlcgorICAgICAqIGRpciwgbGFzdCBkaXIgb3IgY3VycmVudCBkaXIgKi8KKyAgICBpZiAoKGluaXRkaXIgPT0gTlVMTCB8fCAqaW5pdGRpciA9PSBOVUwpICYmIGRmbHQgIT0gTlVMTCAmJiAqZGZsdCAhPSBOVUwpCisgICAgeworCWlmIChtY2hfaXNkaXIoZGZsdCkpCQkvKiBkZWZhdWx0IGZpbGUgbmFtZSBpcyBhIGRpcmVjdG9yeSAqLworCXsKKwkgICAgaW5pdGRpciA9IGRmbHQ7CisJICAgIGRmbHQgPSBOVUxMOworCX0KKwllbHNlIGlmIChnZXR0YWlsKGRmbHQpICE9IGRmbHQpCS8qIGRlZmF1bHQgZmlsZSBuYW1lIGluY2x1ZGVzIGEgcGF0aCAqLworCXsKKwkgICAgdG9mcmVlID0gdmltX3N0cnNhdmUoZGZsdCk7CisJICAgIGlmICh0b2ZyZWUgIT0gTlVMTCkKKwkgICAgeworCQlpbml0ZGlyID0gdG9mcmVlOworCQkqZ2V0dGFpbChpbml0ZGlyKSA9IE5VTDsKKwkJZGZsdCA9IGdldHRhaWwoZGZsdCk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKGluaXRkaXIgPT0gTlVMTCB8fCAqaW5pdGRpciA9PSBOVUwpCisgICAgeworCS8qIFdoZW4gJ2Jyb3dzZWRpcicgaXMgYSBkaXJlY3RvcnksIHVzZSBpdCAqLworCWlmIChtY2hfaXNkaXIocF9ic2RpcikpCisJICAgIGluaXRkaXIgPSBwX2JzZGlyOworCS8qIFdoZW4gc2F2aW5nIG9yICdicm93c2VkaXInIGlzICJidWZmZXIiLCB1c2UgYnVmZmVyIGZuYW1lICovCisJZWxzZSBpZiAoKHNhdmluZyB8fCAqcF9ic2RpciA9PSAnYicpCisJCSYmIGJ1ZiAhPSBOVUxMICYmIGJ1Zi0+Yl9mZm5hbWUgIT0gTlVMTCkKKwl7CisJICAgIGlmIChkZmx0ID09IE5VTEwgfHwgKmRmbHQgPT0gTlVMKQorCQlkZmx0ID0gZ2V0dGFpbChjdXJidWYtPmJfZmZuYW1lKTsKKwkgICAgdG9mcmVlID0gdmltX3N0cnNhdmUoY3VyYnVmLT5iX2ZmbmFtZSk7CisJICAgIGlmICh0b2ZyZWUgIT0gTlVMTCkKKwkgICAgeworCQlpbml0ZGlyID0gdG9mcmVlOworCQkqZ2V0dGFpbChpbml0ZGlyKSA9IE5VTDsKKwkgICAgfQorCX0KKwkvKiBXaGVuICdicm93c2VkaXInIGlzICJsYXN0IiwgdXNlIGRpciBmcm9tIGxhc3QgYnJvd3NlICovCisJZWxzZSBpZiAoKnBfYnNkaXIgPT0gJ2wnKQorCSAgICBpbml0ZGlyID0gbGFzdF9kaXI7CisJLyogV2hlbiAnYnJvd3NlZGlyIGlzICJjdXJyZW50IiwgdXNlIGN1cnJlbnQgZGlyZWN0b3J5LiAgVGhpcyBpcyB0aGUKKwkgKiBkZWZhdWx0IGFscmVhZHksIGxlYXZlIGluaXRkaXIgZW1wdHkuICovCisgICAgfQorCisjIGlmZGVmIEZFQVRfR1VJCisgICAgaWYgKGd1aS5pbl91c2UpCQkvKiB3aGVuIHRoaXMgY2hhbmdlcywgYWxzbyBhZGp1c3QgZl9oYXMoKSEgKi8KKyAgICB7CisJaWYgKGZpbHRlciA9PSBOVUxMCisjICBpZmRlZiBGRUFUX0VWQUwKKwkJJiYgKGZpbHRlciA9IGdldF92YXJfdmFsdWUoKGNoYXJfdSAqKSJiOmJyb3dzZWZpbHRlciIpKSA9PSBOVUxMCisJCSYmIChmaWx0ZXIgPSBnZXRfdmFyX3ZhbHVlKChjaGFyX3UgKikiZzpicm93c2VmaWx0ZXIiKSkgPT0gTlVMTAorIyAgZW5kaWYKKwkpCisJICAgIGZpbHRlciA9IEJST1dTRV9GSUxURVJfREVGQVVMVDsKKwlmbmFtZSA9IGd1aV9tY2hfYnJvd3NlKHNhdmluZywgdGl0bGUsIGRmbHQsIGV4dCwgaW5pdGRpciwgZmlsdGVyKTsKKworCS8qIFdlIGhhbmcgYXJvdW5kIGluIHRoZSBkaWFsb2cgZm9yIGEgd2hpbGUsIHRoZSB1c2VyIG1pZ2h0IGRvIHNvbWUKKwkgKiB0aGluZ3MgdG8gb3VyIGZpbGVzLiAgVGhlIFdpbjMyIGRpYWxvZyBhbGxvd3MgZGVsZXRpbmcgb3IgcmVuYW1pbmcKKwkgKiBhIGZpbGUsIGNoZWNrIHRpbWVzdGFtcHMuICovCisJbmVlZF9jaGVja190aW1lc3RhbXBzID0gVFJVRTsKKwlkaWRfY2hlY2tfdGltZXN0YW1wcyA9IEZBTFNFOworICAgIH0KKyAgICBlbHNlCisjIGVuZGlmCisgICAgeworCS8qIFRPRE86IG5vbi1HVUkgZmlsZSBzZWxlY3RvciBoZXJlICovCisJRU1TRyhfKCJFMzM4OiBTb3JyeSwgbm8gZmlsZSBicm93c2VyIGluIGNvbnNvbGUgbW9kZSIpKTsKKwlmbmFtZSA9IE5VTEw7CisgICAgfQorCisgICAgLyoga2VlcCB0aGUgZGlyZWN0b3J5IGZvciBuZXh0IHRpbWUgKi8KKyAgICBpZiAoZm5hbWUgIT0gTlVMTCkKKyAgICB7CisJdmltX2ZyZWUobGFzdF9kaXIpOworCWxhc3RfZGlyID0gdmltX3N0cnNhdmUoZm5hbWUpOworCWlmIChsYXN0X2RpciAhPSBOVUxMKQorCXsKKwkgICAgKmdldHRhaWwobGFzdF9kaXIpID0gTlVMOworCSAgICBpZiAoKmxhc3RfZGlyID09IE5VTCkKKwkgICAgeworCQkvKiBmaWxlbmFtZSBvbmx5IHJldHVybmVkLCBtdXN0IGJlIGluIGN1cnJlbnQgZGlyICovCisJCXZpbV9mcmVlKGxhc3RfZGlyKTsKKwkJbGFzdF9kaXIgPSBhbGxvYyhNQVhQQVRITCk7CisJCWlmIChsYXN0X2RpciAhPSBOVUxMKQorCQkgICAgbWNoX2Rpcm5hbWUobGFzdF9kaXIsIE1BWFBBVEhMKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICB2aW1fZnJlZSh0b2ZyZWUpOworICAgIGNtZG1vZC5icm93c2UgPSBzYXZlX2Jyb3dzZTsKKworICAgIHJldHVybiBmbmFtZTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL21pc2MxLmMgYi9zcmMvbWlzYzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTA3MDVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21pc2MxLmMKQEAgLTAsMCArMSw4NDU1IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBtaXNjMS5jOiBmdW5jdGlvbnMgdGhhdCBkaWRuJ3Qgc2VlbSB0byBmaXQgZWxzZXdoZXJlCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKworI2lmZGVmIEhBVkVfRkNOVExfSAorIyBpbmNsdWRlIDxmY250bC5oPgkJLyogZm9yIGNoZGlyKCkgKi8KKyNlbmRpZgorCitzdGF0aWMgY2hhcl91ICp2aW1fdmVyc2lvbl9kaXIgX19BUkdTKChjaGFyX3UgKnZpbWRpcikpOworc3RhdGljIGNoYXJfdSAqcmVtb3ZlX3RhaWwgX19BUkdTKChjaGFyX3UgKnAsIGNoYXJfdSAqcGVuZCwgY2hhcl91ICpuYW1lKSk7CisjaWYgZGVmaW5lZChVU0VfRVhFX05BTUUpICYmIGRlZmluZWQoTUFDT1NfWCkKK3N0YXRpYyBjaGFyX3UgKnJlbW92ZV90YWlsX3dpdGhfZXh0IF9fQVJHUygoY2hhcl91ICpwLCBjaGFyX3UgKnBlbmQsIGNoYXJfdSAqZXh0KSk7CisjZW5kaWYKK3N0YXRpYyBpbnQgZ2V0X2luZGVudF9zdHIgX19BUkdTKChjaGFyX3UgKnB0ciwgaW50IHRzKSk7CitzdGF0aWMgaW50IGNvcHlfaW5kZW50IF9fQVJHUygoaW50IHNpemUsIGNoYXJfdQkqc3JjKSk7CisKKy8qCisgKiBDb3VudCB0aGUgc2l6ZSAoaW4gd2luZG93IGNlbGxzKSBvZiB0aGUgaW5kZW50IGluIHRoZSBjdXJyZW50IGxpbmUuCisgKi8KKyAgICBpbnQKK2dldF9pbmRlbnQoKQoreworICAgIHJldHVybiBnZXRfaW5kZW50X3N0cihtbF9nZXRfY3VybGluZSgpLCAoaW50KWN1cmJ1Zi0+Yl9wX3RzKTsKK30KKworLyoKKyAqIENvdW50IHRoZSBzaXplIChpbiB3aW5kb3cgY2VsbHMpIG9mIHRoZSBpbmRlbnQgaW4gbGluZSAibG51bSIuCisgKi8KKyAgICBpbnQKK2dldF9pbmRlbnRfbG51bShsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgcmV0dXJuIGdldF9pbmRlbnRfc3RyKG1sX2dldChsbnVtKSwgKGludCljdXJidWYtPmJfcF90cyk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRk9MRElORykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDb3VudCB0aGUgc2l6ZSAoaW4gd2luZG93IGNlbGxzKSBvZiB0aGUgaW5kZW50IGluIGxpbmUgImxudW0iIG9mIGJ1ZmZlcgorICogImJ1ZiIuCisgKi8KKyAgICBpbnQKK2dldF9pbmRlbnRfYnVmKGJ1ZiwgbG51bSkKKyAgICBidWZfVAkqYnVmOworICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgcmV0dXJuIGdldF9pbmRlbnRfc3RyKG1sX2dldF9idWYoYnVmLCBsbnVtLCBGQUxTRSksIChpbnQpYnVmLT5iX3BfdHMpOworfQorI2VuZGlmCisKKy8qCisgKiBjb3VudCB0aGUgc2l6ZSAoaW4gd2luZG93IGNlbGxzKSBvZiB0aGUgaW5kZW50IGluIGxpbmUgInB0ciIsIHdpdGgKKyAqICd0YWJzdG9wJyBhdCAidHMiCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfaW5kZW50X3N0cihwdHIsIHRzKQorICAgIGNoYXJfdQkqcHRyOworICAgIGludAkJdHM7Cit7CisgICAgaW50CQljb3VudCA9IDA7CisKKyAgICBmb3IgKCA7ICpwdHI7ICsrcHRyKQorICAgIHsKKwlpZiAoKnB0ciA9PSBUQUIpICAgIC8qIGNvdW50IGEgdGFiIGZvciB3aGF0IGl0IGlzIHdvcnRoICovCisJICAgIGNvdW50ICs9IHRzIC0gKGNvdW50ICUgdHMpOworCWVsc2UgaWYgKCpwdHIgPT0gJyAnKQorCSAgICArK2NvdW50OwkJLyogY291bnQgYSBzcGFjZSBmb3Igb25lICovCisJZWxzZQorCSAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIChjb3VudCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIGluZGVudCBvZiB0aGUgY3VycmVudCBsaW5lLgorICogTGVhdmVzIHRoZSBjdXJzb3Igb24gdGhlIGZpcnN0IG5vbi1ibGFuayBpbiB0aGUgbGluZS4KKyAqIENhbGxlciBtdXN0IHRha2UgY2FyZSBvZiB1bmRvLgorICogImZsYWdzIjoKKyAqCVNJTl9DSEFOR0VEOgljYWxsIGNoYW5nZWRfYnl0ZXMoKSBpZiB0aGUgbGluZSB3YXMgY2hhbmdlZC4KKyAqCVNJTl9JTlNFUlQ6CWluc2VydCB0aGUgaW5kZW50IGluIGZyb250IG9mIHRoZSBsaW5lLgorICoJU0lOX1VORE86CXNhdmUgbGluZSBmb3IgdW5kbyBiZWZvcmUgY2hhbmdpbmcgaXQuCisgKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGxpbmUgd2FzIGNoYW5nZWQuCisgKi8KKyAgICBpbnQKK3NldF9pbmRlbnQoc2l6ZSwgZmxhZ3MpCisgICAgaW50CQlzaXplOworICAgIGludAkJZmxhZ3M7Cit7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqbmV3bGluZTsKKyAgICBjaGFyX3UJKm9sZGxpbmU7CisgICAgY2hhcl91CSpzOworICAgIGludAkJdG9kbzsKKyAgICBpbnQJCWluZF9sZW47CisgICAgaW50CQlsaW5lX2xlbjsKKyAgICBpbnQJCWRvaXQgPSBGQUxTRTsKKyAgICBpbnQJCWluZF9kb25lOworICAgIGludAkJdGFiX3BhZDsKKworICAgIC8qCisgICAgICogRmlyc3QgY2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZG8gYW5kIGNvbXB1dGUgdGhlIG51bWJlciBvZgorICAgICAqIGNoYXJhY3RlcnMgbmVlZGVkIGZvciB0aGUgaW5kZW50LgorICAgICAqLworICAgIHRvZG8gPSBzaXplOworICAgIGluZF9sZW4gPSAwOworICAgIHAgPSBvbGRsaW5lID0gbWxfZ2V0X2N1cmxpbmUoKTsKKworICAgIC8qIENhbGN1bGF0ZSB0aGUgYnVmZmVyIHNpemUgZm9yIHRoZSBuZXcgaW5kZW50LCBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0CisgICAgICogaXNuJ3QgYWxyZWFkeSBzZXQgKi8KKworICAgIC8qIGlmICdleHBhbmR0YWInIGlzbid0IHNldDogdXNlIFRBQnMgKi8KKyAgICBpZiAoIWN1cmJ1Zi0+Yl9wX2V0KQorICAgIHsKKwkvKiBJZiAncHJlc2VydmVpbmRlbnQnIGlzIHNldCB0aGVuIHJldXNlIGFzIG11Y2ggYXMgcG9zc2libGUgb2YKKwkgKiB0aGUgZXhpc3RpbmcgaW5kZW50IHN0cnVjdHVyZSBmb3IgdGhlIG5ldyBpbmRlbnQgKi8KKwlpZiAoIShmbGFncyAmIFNJTl9JTlNFUlQpICYmIGN1cmJ1Zi0+Yl9wX3BpKQorCXsKKwkgICAgaW5kX2RvbmUgPSAwOworCisJICAgIC8qIGNvdW50IGFzIG1hbnkgY2hhcmFjdGVycyBhcyB3ZSBjYW4gdXNlICovCisJICAgIHdoaWxlICh0b2RvID4gMCAmJiB2aW1faXN3aGl0ZSgqcCkpCisJICAgIHsKKwkJaWYgKCpwID09IFRBQikKKwkJeworCQkgICAgdGFiX3BhZCA9IChpbnQpY3VyYnVmLT5iX3BfdHMKKwkJCQkJICAgLSAoaW5kX2RvbmUgJSAoaW50KWN1cmJ1Zi0+Yl9wX3RzKTsKKwkJICAgIC8qIHN0b3AgaWYgdGhpcyB0YWIgd2lsbCBvdmVyc2hvb3QgdGhlIHRhcmdldCAqLworCQkgICAgaWYgKHRvZG8gPCB0YWJfcGFkKQorCQkJYnJlYWs7CisJCSAgICB0b2RvIC09IHRhYl9wYWQ7CisJCSAgICArK2luZF9sZW47CisJCSAgICBpbmRfZG9uZSArPSB0YWJfcGFkOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgLS10b2RvOworCQkgICAgKytpbmRfbGVuOworCQkgICAgKytpbmRfZG9uZTsKKwkJfQorCQkrK3A7CisJICAgIH0KKworCSAgICAvKiBGaWxsIHRvIG5leHQgdGFic3RvcCB3aXRoIGEgdGFiLCBpZiBwb3NzaWJsZSAqLworCSAgICB0YWJfcGFkID0gKGludCljdXJidWYtPmJfcF90cyAtIChpbmRfZG9uZSAlIChpbnQpY3VyYnVmLT5iX3BfdHMpOworCSAgICBpZiAodG9kbyA+PSB0YWJfcGFkKQorCSAgICB7CisJCWRvaXQgPSBUUlVFOworCQl0b2RvIC09IHRhYl9wYWQ7CisJCSsraW5kX2xlbjsKKwkJLyogaW5kX2RvbmUgKz0gdGFiX3BhZDsgKi8KKwkgICAgfQorCX0KKworCS8qIGNvdW50IHRhYnMgcmVxdWlyZWQgZm9yIGluZGVudCAqLworCXdoaWxlICh0b2RvID49IChpbnQpY3VyYnVmLT5iX3BfdHMpCisJeworCSAgICBpZiAoKnAgIT0gVEFCKQorCQlkb2l0ID0gVFJVRTsKKwkgICAgZWxzZQorCQkrK3A7CisJICAgIHRvZG8gLT0gKGludCljdXJidWYtPmJfcF90czsKKwkgICAgKytpbmRfbGVuOworCSAgICAvKiBpbmRfZG9uZSArPSAoaW50KWN1cmJ1Zi0+Yl9wX3RzOyAqLworCX0KKyAgICB9CisgICAgLyogY291bnQgc3BhY2VzIHJlcXVpcmVkIGZvciBpbmRlbnQgKi8KKyAgICB3aGlsZSAodG9kbyA+IDApCisgICAgeworCWlmICgqcCAhPSAnICcpCisJICAgIGRvaXQgPSBUUlVFOworCWVsc2UKKwkgICAgKytwOworCS0tdG9kbzsKKwkrK2luZF9sZW47CisJLyogKytpbmRfZG9uZTsgKi8KKyAgICB9CisKKyAgICAvKiBSZXR1cm4gaWYgdGhlIGluZGVudCBpcyBPSyBhbHJlYWR5LiAqLworICAgIGlmICghZG9pdCAmJiAhdmltX2lzd2hpdGUoKnApICYmICEoZmxhZ3MgJiBTSU5fSU5TRVJUKSkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBuZXcgbGluZS4gKi8KKyAgICBpZiAoZmxhZ3MgJiBTSU5fSU5TRVJUKQorCXAgPSBvbGRsaW5lOworICAgIGVsc2UKKwlwID0gc2tpcHdoaXRlKHApOworICAgIGxpbmVfbGVuID0gKGludClTVFJMRU4ocCkgKyAxOworICAgIG5ld2xpbmUgPSBhbGxvYyhpbmRfbGVuICsgbGluZV9sZW4pOworICAgIGlmIChuZXdsaW5lID09IE5VTEwpCisJcmV0dXJuIEZBTFNFOworCisgICAgLyogUHV0IHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBuZXcgbGluZS4gKi8KKyAgICBzID0gbmV3bGluZTsKKyAgICB0b2RvID0gc2l6ZTsKKyAgICAvKiBpZiAnZXhwYW5kdGFiJyBpc24ndCBzZXQ6IHVzZSBUQUJzICovCisgICAgaWYgKCFjdXJidWYtPmJfcF9ldCkKKyAgICB7CisJLyogSWYgJ3ByZXNlcnZlaW5kZW50JyBpcyBzZXQgdGhlbiByZXVzZSBhcyBtdWNoIGFzIHBvc3NpYmxlIG9mCisJICogdGhlIGV4aXN0aW5nIGluZGVudCBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXcgaW5kZW50ICovCisJaWYgKCEoZmxhZ3MgJiBTSU5fSU5TRVJUKSAmJiBjdXJidWYtPmJfcF9waSkKKwl7CisJICAgIHAgPSBvbGRsaW5lOworCSAgICBpbmRfZG9uZSA9IDA7CisKKwkgICAgd2hpbGUgKHRvZG8gPiAwICYmIHZpbV9pc3doaXRlKCpwKSkKKwkgICAgeworCQlpZiAoKnAgPT0gVEFCKQorCQl7CisJCSAgICB0YWJfcGFkID0gKGludCljdXJidWYtPmJfcF90cworCQkJCQkgICAtIChpbmRfZG9uZSAlIChpbnQpY3VyYnVmLT5iX3BfdHMpOworCQkgICAgLyogc3RvcCBpZiB0aGlzIHRhYiB3aWxsIG92ZXJzaG9vdCB0aGUgdGFyZ2V0ICovCisJCSAgICBpZiAodG9kbyA8IHRhYl9wYWQpCisJCQlicmVhazsKKwkJICAgIHRvZG8gLT0gdGFiX3BhZDsKKwkJICAgIGluZF9kb25lICs9IHRhYl9wYWQ7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICAtLXRvZG87CisJCSAgICArK2luZF9kb25lOworCQl9CisJCSpzKysgPSAqcCsrOworCSAgICB9CisKKwkgICAgLyogRmlsbCB0byBuZXh0IHRhYnN0b3Agd2l0aCBhIHRhYiwgaWYgcG9zc2libGUgKi8KKwkgICAgdGFiX3BhZCA9IChpbnQpY3VyYnVmLT5iX3BfdHMgLSAoaW5kX2RvbmUgJSAoaW50KWN1cmJ1Zi0+Yl9wX3RzKTsKKwkgICAgaWYgKHRvZG8gPj0gdGFiX3BhZCkKKwkgICAgeworCQkqcysrID0gVEFCOworCQl0b2RvIC09IHRhYl9wYWQ7CisJICAgIH0KKworCSAgICBwID0gc2tpcHdoaXRlKHApOworCX0KKworCXdoaWxlICh0b2RvID49IChpbnQpY3VyYnVmLT5iX3BfdHMpCisJeworCSAgICAqcysrID0gVEFCOworCSAgICB0b2RvIC09IChpbnQpY3VyYnVmLT5iX3BfdHM7CisJfQorICAgIH0KKyAgICB3aGlsZSAodG9kbyA+IDApCisgICAgeworCSpzKysgPSAnICc7CisJLS10b2RvOworICAgIH0KKyAgICBtY2hfbWVtbW92ZShzLCBwLCAoc2l6ZV90KWxpbmVfbGVuKTsKKworICAgIC8qIFJlcGxhY2UgdGhlIGxpbmUgKHVubGVzcyB1bmRvIGZhaWxzKS4gKi8KKyAgICBpZiAoIShmbGFncyAmIFNJTl9VTkRPKSB8fCB1X3NhdmVzdWIoY3Vyd2luLT53X2N1cnNvci5sbnVtKSA9PSBPSykKKyAgICB7CisJbWxfcmVwbGFjZShjdXJ3aW4tPndfY3Vyc29yLmxudW0sIG5ld2xpbmUsIEZBTFNFKTsKKwlpZiAoZmxhZ3MgJiBTSU5fQ0hBTkdFRCkKKwkgICAgY2hhbmdlZF9ieXRlcyhjdXJ3aW4tPndfY3Vyc29yLmxudW0sIDApOworCS8qIENvcnJlY3Qgc2F2ZWQgY3Vyc29yIHBvc2l0aW9uIGlmIGl0J3MgYWZ0ZXIgdGhlIGluZGVudC4gKi8KKwlpZiAoc2F2ZWRfY3Vyc29yLmxudW0gPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtCisJCQkJJiYgc2F2ZWRfY3Vyc29yLmNvbCA+PSAoY29sbnJfVCkocCAtIG9sZGxpbmUpKQorCSAgICBzYXZlZF9jdXJzb3IuY29sICs9IGluZF9sZW4gLSAocCAtIG9sZGxpbmUpOworICAgIH0KKyAgICBlbHNlCisJdmltX2ZyZWUobmV3bGluZSk7CisKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGluZF9sZW47CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBDb3B5IHRoZSBpbmRlbnQgZnJvbSBwdHIgdG8gdGhlIGN1cnJlbnQgbGluZSAoYW5kIGZpbGwgdG8gc2l6ZSkKKyAqIExlYXZlcyB0aGUgY3Vyc29yIG9uIHRoZSBmaXJzdCBub24tYmxhbmsgaW4gdGhlIGxpbmUuCisgKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGxpbmUgd2FzIGNoYW5nZWQuCisgKi8KKyAgICBzdGF0aWMgaW50Citjb3B5X2luZGVudChzaXplLCBzcmMpCisgICAgaW50CQlzaXplOworICAgIGNoYXJfdQkqc3JjOworeworICAgIGNoYXJfdQkqcCA9IE5VTEw7CisgICAgY2hhcl91CSpsaW5lID0gTlVMTDsKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQl0b2RvOworICAgIGludAkJaW5kX2xlbjsKKyAgICBpbnQJCWxpbmVfbGVuID0gMDsKKyAgICBpbnQJCXRhYl9wYWQ7CisgICAgaW50CQlpbmRfZG9uZTsKKyAgICBpbnQJCXJvdW5kOworCisgICAgLyogUm91bmQgMTogY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgbmVlZGVkIGZvciB0aGUgaW5kZW50CisgICAgICogUm91bmQgMjogY29weSB0aGUgY2hhcmFjdGVycy4gKi8KKyAgICBmb3IgKHJvdW5kID0gMTsgcm91bmQgPD0gMjsgKytyb3VuZCkKKyAgICB7CisJdG9kbyA9IHNpemU7CisJaW5kX2xlbiA9IDA7CisJaW5kX2RvbmUgPSAwOworCXMgPSBzcmM7CisKKwkvKiBDb3VudC9jb3B5IHRoZSB1c2FibGUgcG9ydGlvbiBvZiB0aGUgc291cmNlIGxpbmUgKi8KKwl3aGlsZSAodG9kbyA+IDAgJiYgdmltX2lzd2hpdGUoKnMpKQorCXsKKwkgICAgaWYgKCpzID09IFRBQikKKwkgICAgeworCQl0YWJfcGFkID0gKGludCljdXJidWYtPmJfcF90cworCQkJCQkgICAtIChpbmRfZG9uZSAlIChpbnQpY3VyYnVmLT5iX3BfdHMpOworCQkvKiBTdG9wIGlmIHRoaXMgdGFiIHdpbGwgb3ZlcnNob290IHRoZSB0YXJnZXQgKi8KKwkJaWYgKHRvZG8gPCB0YWJfcGFkKQorCQkgICAgYnJlYWs7CisJCXRvZG8gLT0gdGFiX3BhZDsKKwkJaW5kX2RvbmUgKz0gdGFiX3BhZDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLS10b2RvOworCQkrK2luZF9kb25lOworCSAgICB9CisJICAgICsraW5kX2xlbjsKKwkgICAgaWYgKHJvdW5kID09IDIpCisJCSpwKysgPSAqczsKKwkgICAgKytzOworCX0KKworCS8qIEZpbGwgdG8gbmV4dCB0YWJzdG9wIHdpdGggYSB0YWIsIGlmIHBvc3NpYmxlICovCisJdGFiX3BhZCA9IChpbnQpY3VyYnVmLT5iX3BfdHMgLSAoaW5kX2RvbmUgJSAoaW50KWN1cmJ1Zi0+Yl9wX3RzKTsKKwlpZiAodG9kbyA+PSB0YWJfcGFkKQorCXsKKwkgICAgdG9kbyAtPSB0YWJfcGFkOworCSAgICArK2luZF9sZW47CisJICAgIGlmIChyb3VuZCA9PSAyKQorCQkqcCsrID0gVEFCOworCX0KKworCS8qIEFkZCB0YWJzIHJlcXVpcmVkIGZvciBpbmRlbnQgKi8KKwl3aGlsZSAodG9kbyA+PSAoaW50KWN1cmJ1Zi0+Yl9wX3RzKQorCXsKKwkgICAgdG9kbyAtPSAoaW50KWN1cmJ1Zi0+Yl9wX3RzOworCSAgICArK2luZF9sZW47CisJICAgIGlmIChyb3VuZCA9PSAyKQorCQkqcCsrID0gVEFCOworCX0KKworCS8qIENvdW50L2FkZCBzcGFjZXMgcmVxdWlyZWQgZm9yIGluZGVudCAqLworCXdoaWxlICh0b2RvID4gMCkKKwl7CisJICAgIC0tdG9kbzsKKwkgICAgKytpbmRfbGVuOworCSAgICBpZiAocm91bmQgPT0gMikKKwkJKnArKyA9ICcgJzsKKwl9CisKKwlpZiAocm91bmQgPT0gMSkKKwl7CisJICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlc3VsdDogdGhlIGNvcGllZCBpbmRlbnQsIG5ldyBpbmRlbnQKKwkgICAgICogYW5kIHRoZSByZXN0IG9mIHRoZSBsaW5lLiAqLworCSAgICBsaW5lX2xlbiA9IChpbnQpU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpICsgMTsKKwkgICAgbGluZSA9IGFsbG9jKGluZF9sZW4gKyBsaW5lX2xlbik7CisJICAgIGlmIChsaW5lID09IE5VTEwpCisJCXJldHVybiBGQUxTRTsKKwkgICAgcCA9IGxpbmU7CisJfQorICAgIH0KKworICAgIC8qIEFwcGVuZCB0aGUgb3JpZ2luYWwgbGluZSAqLworICAgIG1jaF9tZW1tb3ZlKHAsIG1sX2dldF9jdXJsaW5lKCksIChzaXplX3QpbGluZV9sZW4pOworCisgICAgLyogUmVwbGFjZSB0aGUgbGluZSAqLworICAgIG1sX3JlcGxhY2UoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBsaW5lLCBGQUxTRSk7CisKKyAgICAvKiBQdXQgdGhlIGN1cnNvciBhZnRlciB0aGUgaW5kZW50LiAqLworICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gaW5kX2xlbjsKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgaW5kZW50IG9mIHRoZSBjdXJyZW50IGxpbmUgYWZ0ZXIgYSBudW1iZXIuICBSZXR1cm4gLTEgaWYgbm8KKyAqIG51bWJlciB3YXMgZm91bmQuICBVc2VkIGZvciAnbicgaW4gJ2Zvcm1hdG9wdGlvbnMnOiBudW1iZXJlZCBsaXN0LgorICovCisgICAgaW50CitnZXRfbnVtYmVyX2luZGVudChsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgY2hhcl91CSpsaW5lOworICAgIGNoYXJfdQkqcDsKKyAgICBjb2xucl9UCWNvbDsKKyAgICBwb3NfVAlwb3M7CisKKyAgICBpZiAobG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXJldHVybiAtMTsKKyAgICBsaW5lID0gbWxfZ2V0KGxudW0pOworICAgIHAgPSBza2lwd2hpdGUobGluZSk7CisgICAgaWYgKCFWSU1fSVNESUdJVCgqcCkpCisJcmV0dXJuIC0xOworICAgIHAgPSBza2lwZGlnaXRzKHApOworICAgIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiOi4pXX1cdCAiLCAqcCkgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisgICAgcCA9IHNraXB3aGl0ZShwICsgMSk7CisgICAgaWYgKCpwID09IE5VTCkKKwlyZXR1cm4gLTE7CisgICAgcG9zLmxudW0gPSBsbnVtOworICAgIHBvcy5jb2wgPSAoY29sbnJfVCkocCAtIGxpbmUpOworICAgIGdldHZjb2woY3Vyd2luLCAmcG9zLCAmY29sLCBOVUxMLCBOVUxMKTsKKyAgICByZXR1cm4gKGludCljb2w7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQ0lOREVOVCkgfHwgZGVmaW5lZChGRUFUX1NNQVJUSU5ERU5UKQorCitzdGF0aWMgaW50IGNpbl9pc19jaW53b3JkIF9fQVJHUygoY2hhcl91ICpsaW5lKSk7CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgc3RyaW5nICJsaW5lIiBzdGFydHMgd2l0aCBhIHdvcmQgZnJvbSAnY2lud29yZHMnLgorICovCisgICAgc3RhdGljIGludAorY2luX2lzX2NpbndvcmQobGluZSkKKyAgICBjaGFyX3UJKmxpbmU7Cit7CisgICAgY2hhcl91CSpjaW53OworICAgIGNoYXJfdQkqY2lud19idWY7CisgICAgaW50CQljaW53X2xlbjsKKyAgICBpbnQJCXJldHZhbCA9IEZBTFNFOworICAgIGludAkJbGVuOworCisgICAgY2lud19sZW4gPSAoaW50KVNUUkxFTihjdXJidWYtPmJfcF9jaW53KSArIDE7CisgICAgY2lud19idWYgPSBhbGxvYygodW5zaWduZWQpY2lud19sZW4pOworICAgIGlmIChjaW53X2J1ZiAhPSBOVUxMKQorICAgIHsKKwlsaW5lID0gc2tpcHdoaXRlKGxpbmUpOworCWZvciAoY2ludyA9IGN1cmJ1Zi0+Yl9wX2Npbnc7ICpjaW53OyApCisJeworCSAgICBsZW4gPSBjb3B5X29wdGlvbl9wYXJ0KCZjaW53LCBjaW53X2J1ZiwgY2lud19sZW4sICIsIik7CisJICAgIGlmIChTVFJOQ01QKGxpbmUsIGNpbndfYnVmLCBsZW4pID09IDAKKwkJICAgICYmICghdmltX2lzd29yZGMobGluZVtsZW5dKSB8fCAhdmltX2lzd29yZGMobGluZVtsZW4gLSAxXSkpKQorCSAgICB7CisJCXJldHZhbCA9IFRSVUU7CisJCWJyZWFrOworCSAgICB9CisJfQorCXZpbV9mcmVlKGNpbndfYnVmKTsKKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKyNlbmRpZgorCisvKgorICogb3Blbl9saW5lOiBBZGQgYSBuZXcgbGluZSBiZWxvdyBvciBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorICoKKyAqIEZvciBWUkVQTEFDRSBtb2RlLCB3ZSBvbmx5IGFkZCBhIG5ldyBsaW5lIHdoZW4gd2UgZ2V0IHRvIHRoZSBlbmQgb2YgdGhlCisgKiBmaWxlLCBvdGhlcndpc2Ugd2UganVzdCBzdGFydCByZXBsYWNpbmcgdGhlIG5leHQgbGluZS4KKyAqCisgKiBDYWxsZXIgbXVzdCB0YWtlIGNhcmUgb2YgdW5kby4gIFNpbmNlIFZSRVBMQUNFIG1heSBhZmZlY3QgYW55IG51bWJlciBvZgorICogbGluZXMgaG93ZXZlciwgaXQgbWF5IGNhbGwgdV9zYXZlX2N1cnNvcigpIGFnYWluIHdoZW4gc3RhcnRpbmcgdG8gY2hhbmdlIGEKKyAqIG5ldyBsaW5lLgorICogImZsYWdzIjogT1BFTkxJTkVfREVMU1BBQ0VTCWRlbGV0ZSBzcGFjZXMgYWZ0ZXIgY3Vyc29yCisgKgkgICAgT1BFTkxJTkVfRE9fQ09NCWZvcm1hdCBjb21tZW50cworICoJICAgIE9QRU5MSU5FX0tFRVBUUkFJTAlrZWVwIHRyYWlsaW5nIHNwYWNlcworICoJICAgIE9QRU5MSU5FX01BUktGSVgJYWRqdXN0IG1hcmsgcG9zaXRpb25zIGFmdGVyIHRoZSBsaW5lIGJyZWFrCisgKgorICogUmV0dXJuIFRSVUUgZm9yIHN1Y2Nlc3MsIEZBTFNFIGZvciBmYWlsdXJlCisgKi8KKyAgICBpbnQKK29wZW5fbGluZShkaXIsIGZsYWdzLCBvbGRfaW5kZW50KQorICAgIGludAkJZGlyOwkJLyogRk9SV0FSRCBvciBCQUNLV0FSRCAqLworICAgIGludAkJZmxhZ3M7CisgICAgaW50CQlvbGRfaW5kZW50OwkvKiBpbmRlbnQgZm9yIGFmdGVyIF5eRCBpbiBJbnNlcnQgbW9kZSAqLworeworICAgIGNoYXJfdQkqc2F2ZWRfbGluZTsJCS8qIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGxpbmUgKi8KKyAgICBjaGFyX3UJKm5leHRfbGluZSA9IE5VTEw7CS8qIGNvcHkgb2YgdGhlIG5leHQgbGluZSAqLworICAgIGNoYXJfdQkqcF9leHRyYSA9IE5VTEw7CS8qIHdoYXQgZ29lcyB0byBuZXh0IGxpbmUgKi8KKyAgICBpbnQJCWxlc3NfY29scyA9IDA7CQkvKiBsZXNzIGNvbHVtbnMgZm9yIG1hcmsgaW4gbmV3IGxpbmUgKi8KKyAgICBpbnQJCWxlc3NfY29sc19vZmYgPSAwOwkvKiBjb2x1bW5zIHRvIHNraXAgZm9yIG1hcmsgYWRqdXN0ICovCisgICAgcG9zX1QJb2xkX2N1cnNvcjsJCS8qIG9sZCBjdXJzb3IgcG9zaXRpb24gKi8KKyAgICBpbnQJCW5ld2NvbCA9IDA7CQkvKiBuZXcgY3Vyc29yIGNvbHVtbiAqLworICAgIGludAkJbmV3aW5kZW50ID0gMDsJCS8qIGF1dG8taW5kZW50IG9mIHRoZSBuZXcgbGluZSAqLworICAgIGludAkJbjsKKyAgICBpbnQJCXRydW5jX2xpbmUgPSBGQUxTRTsJLyogdHJ1bmNhdGUgY3VycmVudCBsaW5lIGFmdGVyd2FyZHMgKi8KKyAgICBpbnQJCXJldHZhbCA9IEZBTFNFOwkJLyogcmV0dXJuIHZhbHVlLCBkZWZhdWx0IGlzIEZBSUwgKi8KKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisgICAgaW50CQlleHRyYV9sZW4gPSAwOwkJLyogbGVuZ3RoIG9mIHBfZXh0cmEgc3RyaW5nICovCisgICAgaW50CQlsZWFkX2xlbjsJCS8qIGxlbmd0aCBvZiBjb21tZW50IGxlYWRlciAqLworICAgIGNoYXJfdQkqbGVhZF9mbGFnczsJLyogcG9zaXRpb24gaW4gJ2NvbW1lbnRzJyBmb3IgY29tbWVudCBsZWFkZXIgKi8KKyAgICBjaGFyX3UJKmxlYWRlciA9IE5VTEw7CQkvKiBjb3B5IG9mIGNvbW1lbnQgbGVhZGVyICovCisjZW5kaWYKKyAgICBjaGFyX3UJKmFsbG9jYXRlZCA9IE5VTEw7CS8qIGFsbG9jYXRlZCBtZW1vcnkgKi8KKyNpZiBkZWZpbmVkKEZFQVRfU01BUlRJTkRFTlQpIHx8IGRlZmluZWQoRkVBVF9WUkVQTEFDRSkgfHwgZGVmaW5lZChGRUFUX0xJU1ApIFwKKwl8fCBkZWZpbmVkKEZFQVRfQ0lOREVOVCkgfHwgZGVmaW5lZChGRUFUX0NPTU1FTlRTKQorICAgIGNoYXJfdQkqcDsKKyNlbmRpZgorICAgIGludAkJc2F2ZWRfY2hhciA9IE5VTDsJLyogaW5pdCBmb3IgR0NDICovCisjaWYgZGVmaW5lZChGRUFUX1NNQVJUSU5ERU5UKSB8fCBkZWZpbmVkKEZFQVRfQ09NTUVOVFMpCisgICAgcG9zX1QJKnBvczsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKKyAgICBpbnQJCWRvX3NpID0gKCFwX3Bhc3RlICYmIGN1cmJ1Zi0+Yl9wX3NpCisjIGlmZGVmIEZFQVRfQ0lOREVOVAorCQkJCQkmJiAhY3VyYnVmLT5iX3BfY2luCisjIGVuZGlmCisJCQkpOworICAgIGludAkJbm9fc2kgPSBGQUxTRTsJCS8qIHJlc2V0IGRpZF9zaSBhZnRlcndhcmRzICovCisgICAgaW50CQlmaXJzdF9jaGFyID0gTlVMOwkvKiBpbml0IGZvciBHQ0MgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9WUkVQTEFDRSkgJiYgKGRlZmluZWQoRkVBVF9MSVNQKSB8fCBkZWZpbmVkKEZFQVRfQ0lOREVOVCkpCisgICAgaW50CQl2cmVwbGFjZV9tb2RlOworI2VuZGlmCisgICAgaW50CQlkaWRfYXBwZW5kOwkJLyogYXBwZW5kZWQgYSBuZXcgbGluZSAqLworICAgIGludAkJc2F2ZWRfcGkgPSBjdXJidWYtPmJfcF9waTsgLyogY29weSBvZiBwcmVzZXJ2ZWluZGVudCBzZXR0aW5nICovCisKKyAgICAvKgorICAgICAqIG1ha2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGxpbmUgc28gd2UgY2FuIG1lc3Mgd2l0aCBpdAorICAgICAqLworICAgIHNhdmVkX2xpbmUgPSB2aW1fc3Ryc2F2ZShtbF9nZXRfY3VybGluZSgpKTsKKyAgICBpZiAoc2F2ZWRfbGluZSA9PSBOVUxMKQkgICAgLyogb3V0IG9mIG1lbW9yeSEgKi8KKwlyZXR1cm4gRkFMU0U7CisKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisgICAgaWYgKFN0YXRlICYgVlJFUExBQ0VfRkxBRykKKyAgICB7CisJLyoKKwkgKiBXaXRoIFZSRVBMQUNFIHdlIG1ha2UgYSBjb3B5IG9mIHRoZSBuZXh0IGxpbmUsIHdoaWNoIHdlIHdpbGwgYmUKKwkgKiBzdGFydGluZyB0byByZXBsYWNlLiAgRmlyc3QgbWFrZSB0aGUgbmV3IGxpbmUgZW1wdHkgYW5kIGxldCB2aW0gcGxheQorCSAqIHdpdGggdGhlIGluZGVudGluZyBhbmQgY29tbWVudCBsZWFkZXIgdG8gaXRzIGhlYXJ0J3MgY29udGVudC4gIFRoZW4KKwkgKiB3ZSBncmFiIHdoYXQgaXQgZW5kZWQgdXAgcHV0dGluZyBvbiB0aGUgbmV3IGxpbmUsIHB1dCBiYWNrIHRoZQorCSAqIG9yaWdpbmFsIGxpbmUsIGFuZCBjYWxsIGluc19jaGFyKCkgdG8gcHV0IGVhY2ggbmV3IGNoYXJhY3RlciBvbnRvCisJICogdGhlIGxpbmUsIHJlcGxhY2luZyB3aGF0IHdhcyB0aGVyZSBiZWZvcmUgYW5kIHB1c2hpbmcgdGhlIHJpZ2h0CisJICogc3R1ZmYgb250byB0aGUgcmVwbGFjZSBzdGFjay4gIC0tIHdlYmIuCisJICovCisJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8IG9yaWdfbGluZV9jb3VudCkKKwkgICAgbmV4dF9saW5lID0gdmltX3N0cnNhdmUobWxfZ2V0KGN1cndpbi0+d19jdXJzb3IubG51bSArIDEpKTsKKwllbHNlCisJICAgIG5leHRfbGluZSA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKikiIik7CisJaWYgKG5leHRfbGluZSA9PSBOVUxMKQkgICAgLyogb3V0IG9mIG1lbW9yeSEgKi8KKwkgICAgZ290byB0aGVlbmQ7CisKKwkvKgorCSAqIEluIFZSRVBMQUNFIG1vZGUsIGEgTkwgcmVwbGFjZXMgdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIGFuZCBzdGFydHMKKwkgKiByZXBsYWNpbmcgdGhlIG5leHQgbGluZSwgc28gcHVzaCBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgbGVmdCBvbiB0aGUKKwkgKiBsaW5lIG9udG8gdGhlIHJlcGxhY2Ugc3RhY2suICBXZSdsbCBwdXNoIGFueSBvdGhlciBjaGFyYWN0ZXJzIHRoYXQKKwkgKiBtaWdodCBiZSByZXBsYWNlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgbGluZSAoZHVlIHRvIGF1dG9pbmRlbnQKKwkgKiBldGMpIGEgYml0IGxhdGVyLgorCSAqLworCXJlcGxhY2VfcHVzaChOVUwpOyAgLyogQ2FsbCB0d2ljZSBiZWNhdXNlIEJTIG92ZXIgTkwgZXhwZWN0cyBpdCAqLworCXJlcGxhY2VfcHVzaChOVUwpOworCXAgPSBzYXZlZF9saW5lICsgY3Vyd2luLT53X2N1cnNvci5jb2w7CisJd2hpbGUgKCpwICE9IE5VTCkKKwkgICAgcmVwbGFjZV9wdXNoKCpwKyspOworCXNhdmVkX2xpbmVbY3Vyd2luLT53X2N1cnNvci5jb2xdID0gTlVMOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKChTdGF0ZSAmIElOU0VSVCkKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisJICAgICYmICEoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorI2VuZGlmCisJICAgICkKKyAgICB7CisJcF9leHRyYSA9IHNhdmVkX2xpbmUgKyBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisJaWYgKGRvX3NpKQkJLyogbmVlZCBmaXJzdCBjaGFyIGFmdGVyIG5ldyBsaW5lIGJyZWFrICovCisJeworCSAgICBwID0gc2tpcHdoaXRlKHBfZXh0cmEpOworCSAgICBmaXJzdF9jaGFyID0gKnA7CisJfQorI2VuZGlmCisjaWZkZWYgRkVBVF9DT01NRU5UUworCWV4dHJhX2xlbiA9IChpbnQpU1RSTEVOKHBfZXh0cmEpOworI2VuZGlmCisJc2F2ZWRfY2hhciA9ICpwX2V4dHJhOworCSpwX2V4dHJhID0gTlVMOworICAgIH0KKworICAgIHVfY2xlYXJsaW5lKCk7CQkvKiBjYW5ub3QgZG8gIlUiIGNvbW1hbmQgd2hlbiBhZGRpbmcgbGluZXMgKi8KKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisgICAgZGlkX3NpID0gRkFMU0U7CisjZW5kaWYKKyAgICBhaV9jb2wgPSAwOworCisgICAgLyoKKyAgICAgKiBJZiB3ZSBqdXN0IGRpZCBhbiBhdXRvLWluZGVudCwgdGhlbiB3ZSBkaWRuJ3QgdHlwZSBhbnl0aGluZyBvbgorICAgICAqIHRoZSBwcmlvciBsaW5lLCBhbmQgaXQgc2hvdWxkIGJlIHRydW5jYXRlZC4gIERvIHRoaXMgZXZlbiBpZiAnYWknIGlzIG5vdAorICAgICAqIHNldCBiZWNhdXNlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0aW5nIGEgY29tbWVudCBsZWFkZXIgYWxzbyBzZXRzIGRpZF9haS4KKyAgICAgKi8KKyAgICBpZiAoZGlyID09IEZPUldBUkQgJiYgZGlkX2FpKQorCXRydW5jX2xpbmUgPSBUUlVFOworCisgICAgLyoKKyAgICAgKiBJZiAnYXV0b2luZGVudCcgYW5kL29yICdzbWFydGluZGVudCcgaXMgc2V0LCB0cnkgdG8gZmlndXJlIG91dCB3aGF0CisgICAgICogaW5kZW50IHRvIHVzZSBmb3IgdGhlIG5ldyBsaW5lLgorICAgICAqLworICAgIGlmIChjdXJidWYtPmJfcF9haQorI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKKwkJCXx8IGRvX3NpCisjZW5kaWYKKwkJCQkJICAgICkKKyAgICB7CisJLyoKKwkgKiBjb3VudCB3aGl0ZSBzcGFjZSBvbiBjdXJyZW50IGxpbmUKKwkgKi8KKwluZXdpbmRlbnQgPSBnZXRfaW5kZW50X3N0cihzYXZlZF9saW5lLCAoaW50KWN1cmJ1Zi0+Yl9wX3RzKTsKKwlpZiAobmV3aW5kZW50ID09IDApCisJICAgIG5ld2luZGVudCA9IG9sZF9pbmRlbnQ7CS8qIGZvciBeXkQgY29tbWFuZCBpbiBpbnNlcnQgbW9kZSAqLworCisjaWZkZWYgRkVBVF9TTUFSVElOREVOVAorCS8qCisJICogRG8gc21hcnQgaW5kZW50aW5nLgorCSAqIEluIGluc2VydC9yZXBsYWNlIG1vZGUgKG9ubHkgd2hlbiBkaXIgPT0gRk9SV0FSRCkKKwkgKiB3ZSBtYXkgbW92ZSBzb21lIHRleHQgdG8gdGhlIG5leHQgbGluZS4gSWYgaXQgc3RhcnRzIHdpdGggJ3snCisJICogZG9uJ3QgYWRkIGFuIGluZGVudC4gRml4ZXMgaW5zZXJ0aW5nIGEgTkwgYmVmb3JlICd7JyBpbiBsaW5lCisJICoJImlmIChjb25kaXRpb24pIHsiCisJICovCisJaWYgKCF0cnVuY19saW5lICYmIGRvX3NpICYmICpzYXZlZF9saW5lICE9IE5VTAorCQkJCSAgICAmJiAocF9leHRyYSA9PSBOVUxMIHx8IGZpcnN0X2NoYXIgIT0gJ3snKSkKKwl7CisJICAgIGNoYXJfdSAgKnB0cjsKKwkgICAgY2hhcl91ICBsYXN0X2NoYXI7CisKKwkgICAgb2xkX2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7CisJICAgIHB0ciA9IHNhdmVkX2xpbmU7CisjIGlmZGVmIEZFQVRfQ09NTUVOVFMKKwkgICAgaWYgKGZsYWdzICYgT1BFTkxJTkVfRE9fQ09NKQorCQlsZWFkX2xlbiA9IGdldF9sZWFkZXJfbGVuKHB0ciwgTlVMTCwgRkFMU0UpOworCSAgICBlbHNlCisJCWxlYWRfbGVuID0gMDsKKyMgZW5kaWYKKwkgICAgaWYgKGRpciA9PSBGT1JXQVJEKQorCSAgICB7CisJCS8qCisJCSAqIFNraXAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIHVubGVzcyB0aGV5IGFyZQorCQkgKiByZWNvZ25pc2VkIGFzIGNvbW1lbnRzLgorCQkgKi8KKwkJaWYgKAorIyBpZmRlZiBGRUFUX0NPTU1FTlRTCisJCQlsZWFkX2xlbiA9PSAwICYmCisjIGVuZGlmCisJCQlwdHJbMF0gPT0gJyMnKQorCQl7CisJCSAgICB3aGlsZSAocHRyWzBdID09ICcjJyAmJiBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiAxKQorCQkJcHRyID0gbWxfZ2V0KC0tY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKwkJICAgIG5ld2luZGVudCA9IGdldF9pbmRlbnQoKTsKKwkJfQorIyBpZmRlZiBGRUFUX0NPTU1FTlRTCisJCWlmIChmbGFncyAmIE9QRU5MSU5FX0RPX0NPTSkKKwkJICAgIGxlYWRfbGVuID0gZ2V0X2xlYWRlcl9sZW4ocHRyLCBOVUxMLCBGQUxTRSk7CisJCWVsc2UKKwkJICAgIGxlYWRfbGVuID0gMDsKKwkJaWYgKGxlYWRfbGVuID4gMCkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIFRoaXMgY2FzZSBnZXRzIHRoZSBmb2xsb3dpbmcgcmlnaHQ6CisJCSAgICAgKgkgICAgXCoKKwkJICAgICAqCSAgICAgKiBBIGNvbW1lbnQgKHJlYWQgJ1wnIGFzICcvJykuCisJCSAgICAgKgkgICAgICpcCisJCSAgICAgKiAjZGVmaW5lIElOX1RIRV9XQVkKKwkJICAgICAqCSAgICBUaGlzIHNob3VsZCBsaW5lIHVwIGhlcmU7CisJCSAgICAgKi8KKwkJICAgIHAgPSBza2lwd2hpdGUocHRyKTsKKwkJICAgIGlmIChwWzBdID09ICcvJyAmJiBwWzFdID09ICcqJykKKwkJCXArKzsKKwkJICAgIGlmIChwWzBdID09ICcqJykKKwkJICAgIHsKKwkJCWZvciAocCsrOyAqcDsgcCsrKQorCQkJeworCQkJICAgIGlmIChwWzBdID09ICcvJyAmJiBwWy0xXSA9PSAnKicpCisJCQkgICAgeworCQkJCS8qCisJCQkJICogRW5kIG9mIEMgY29tbWVudCwgaW5kZW50IHNob3VsZCBsaW5lIHVwCisJCQkJICogd2l0aCB0aGUgbGluZSBjb250YWluaW5nIHRoZSBzdGFydCBvZgorCQkJCSAqIHRoZSBjb21tZW50CisJCQkJICovCisJCQkJY3Vyd2luLT53X2N1cnNvci5jb2wgPSAoY29sbnJfVCkocCAtIHB0cik7CisJCQkJaWYgKChwb3MgPSBmaW5kbWF0Y2goTlVMTCwgTlVMKSkgIT0gTlVMTCkKKwkJCQl7CisJCQkJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IHBvcy0+bG51bTsKKwkJCQkgICAgbmV3aW5kZW50ID0gZ2V0X2luZGVudCgpOworCQkJCX0KKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0KKwkJZWxzZQkvKiBOb3QgYSBjb21tZW50IGxpbmUgKi8KKyMgZW5kaWYKKwkJeworCQkgICAgLyogRmluZCBsYXN0IG5vbi1ibGFuayBpbiBsaW5lICovCisJCSAgICBwID0gcHRyICsgU1RSTEVOKHB0cikgLSAxOworCQkgICAgd2hpbGUgKHAgPiBwdHIgJiYgdmltX2lzd2hpdGUoKnApKQorCQkJLS1wOworCQkgICAgbGFzdF9jaGFyID0gKnA7CisKKwkJICAgIC8qCisJCSAgICAgKiBmaW5kIHRoZSBjaGFyYWN0ZXIganVzdCBiZWZvcmUgdGhlICd7JyBvciAnOycKKwkJICAgICAqLworCQkgICAgaWYgKGxhc3RfY2hhciA9PSAneycgfHwgbGFzdF9jaGFyID09ICc7JykKKwkJICAgIHsKKwkJCWlmIChwID4gcHRyKQorCQkJICAgIC0tcDsKKwkJCXdoaWxlIChwID4gcHRyICYmIHZpbV9pc3doaXRlKCpwKSkKKwkJCSAgICAtLXA7CisJCSAgICB9CisJCSAgICAvKgorCQkgICAgICogVHJ5IHRvIGNhdGNoIGxpbmVzIHRoYXQgYXJlIHNwbGl0IG92ZXIgbXVsdGlwbGUKKwkJICAgICAqIGxpbmVzLiAgZWc6CisJCSAgICAgKgkgICAgaWYgKGNvbmRpdGlvbiAmJgorCQkgICAgICoJCQljb25kaXRpb24pIHsKKwkJICAgICAqCQlTaG91bGQgbGluZSB1cCBoZXJlIQorCQkgICAgICoJICAgIH0KKwkJICAgICAqLworCQkgICAgaWYgKCpwID09ICcpJykKKwkJICAgIHsKKwkJCWN1cndpbi0+d19jdXJzb3IuY29sID0gKGNvbG5yX1QpKHAgLSBwdHIpOworCQkJaWYgKChwb3MgPSBmaW5kbWF0Y2goTlVMTCwgJygnKSkgIT0gTlVMTCkKKwkJCXsKKwkJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBwb3MtPmxudW07CisJCQkgICAgbmV3aW5kZW50ID0gZ2V0X2luZGVudCgpOworCQkJICAgIHB0ciA9IG1sX2dldF9jdXJsaW5lKCk7CisJCQl9CisJCSAgICB9CisJCSAgICAvKgorCQkgICAgICogSWYgbGFzdCBjaGFyYWN0ZXIgaXMgJ3snIGRvIGluZGVudCwgd2l0aG91dAorCQkgICAgICogY2hlY2tpbmcgZm9yICJpZiIgYW5kIHRoZSBsaWtlLgorCQkgICAgICovCisJCSAgICBpZiAobGFzdF9jaGFyID09ICd7JykKKwkJICAgIHsKKwkJCWRpZF9zaSA9IFRSVUU7CS8qIGRvIGluZGVudCAqLworCQkJbm9fc2kgPSBUUlVFOwkvKiBkb24ndCBkZWxldGUgaXQgd2hlbiAneycgdHlwZWQgKi8KKwkJICAgIH0KKwkJICAgIC8qCisJCSAgICAgKiBMb29rIGZvciAiaWYiIGFuZCB0aGUgbGlrZSwgdXNlICdjaW53b3JkcycuCisJCSAgICAgKiBEb24ndCBkbyB0aGlzIGlmIHRoZSBwcmV2aW91cyBsaW5lIGVuZGVkIGluICc7JyBvcgorCQkgICAgICogJ30nLgorCQkgICAgICovCisJCSAgICBlbHNlIGlmIChsYXN0X2NoYXIgIT0gJzsnICYmIGxhc3RfY2hhciAhPSAnfScKKwkJCQkJCSAgICAgICAmJiBjaW5faXNfY2lud29yZChwdHIpKQorCQkJZGlkX3NpID0gVFJVRTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UgLyogZGlyID09IEJBQ0tXQVJEICovCisJICAgIHsKKwkJLyoKKwkJICogU2tpcCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgdW5sZXNzIHRoZXkgYXJlCisJCSAqIHJlY29nbmlzZWQgYXMgY29tbWVudHMuCisJCSAqLworCQlpZiAoCisjIGlmZGVmIEZFQVRfQ09NTUVOVFMKKwkJCWxlYWRfbGVuID09IDAgJiYKKyMgZW5kaWYKKwkJCXB0clswXSA9PSAnIycpCisJCXsKKwkJICAgIGludCB3YXNfYmFja3NsYXNoZWQgPSBGQUxTRTsKKworCQkgICAgd2hpbGUgKChwdHJbMF0gPT0gJyMnIHx8IHdhc19iYWNrc2xhc2hlZCkgJiYKKwkJCSBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPCBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkJICAgIHsKKwkJCWlmICgqcHRyICYmIHB0cltTVFJMRU4ocHRyKSAtIDFdID09ICdcXCcpCisJCQkgICAgd2FzX2JhY2tzbGFzaGVkID0gVFJVRTsKKwkJCWVsc2UKKwkJCSAgICB3YXNfYmFja3NsYXNoZWQgPSBGQUxTRTsKKwkJCXB0ciA9IG1sX2dldCgrK2N1cndpbi0+d19jdXJzb3IubG51bSk7CisJCSAgICB9CisJCSAgICBpZiAod2FzX2JhY2tzbGFzaGVkKQorCQkJbmV3aW5kZW50ID0gMDsJICAgIC8qIEdvdCB0byBlbmQgb2YgZmlsZSAqLworCQkgICAgZWxzZQorCQkJbmV3aW5kZW50ID0gZ2V0X2luZGVudCgpOworCQl9CisJCXAgPSBza2lwd2hpdGUocHRyKTsKKwkJaWYgKCpwID09ICd9JykJICAgIC8qIGlmIGxpbmUgc3RhcnRzIHdpdGggJ30nOiBkbyBpbmRlbnQgKi8KKwkJICAgIGRpZF9zaSA9IFRSVUU7CisJCWVsc2UJCSAgICAvKiBjYW4gZGVsZXRlIGluZGVudCB3aGVuICd7JyB0eXBlZCAqLworCQkgICAgY2FuX3NpX2JhY2sgPSBUUlVFOworCSAgICB9CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBvbGRfY3Vyc29yOworCX0KKwlpZiAoZG9fc2kpCisJICAgIGNhbl9zaSA9IFRSVUU7CisjZW5kaWYgLyogRkVBVF9TTUFSVElOREVOVCAqLworCisJZGlkX2FpID0gVFJVRTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisgICAgLyoKKyAgICAgKiBGaW5kIG91dCBpZiB0aGUgY3VycmVudCBsaW5lIHN0YXJ0cyB3aXRoIGEgY29tbWVudCBsZWFkZXIuCisgICAgICogVGhpcyBtYXkgdGhlbiBiZSBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgbmV3IGxpbmUuCisgICAgICovCisgICAgZW5kX2NvbW1lbnRfcGVuZGluZyA9IE5VTDsKKyAgICBpZiAoZmxhZ3MgJiBPUEVOTElORV9ET19DT00pCisJbGVhZF9sZW4gPSBnZXRfbGVhZGVyX2xlbihzYXZlZF9saW5lLCAmbGVhZF9mbGFncywgZGlyID09IEJBQ0tXQVJEKTsKKyAgICBlbHNlCisJbGVhZF9sZW4gPSAwOworICAgIGlmIChsZWFkX2xlbiA+IDApCisgICAgeworCWNoYXJfdQkqbGVhZF9yZXBsID0gTlVMTDsJICAgIC8qIHJlcGxhY2VzIGNvbW1lbnQgbGVhZGVyICovCisJaW50CWxlYWRfcmVwbF9sZW4gPSAwOwkgICAgLyogbGVuZ3RoIG9mICpsZWFkX3JlcGwgKi8KKwljaGFyX3UJbGVhZF9taWRkbGVbQ09NX01BWF9MRU5dOyAgIC8qIG1pZGRsZS1jb21tZW50IHN0cmluZyAqLworCWNoYXJfdQlsZWFkX2VuZFtDT01fTUFYX0xFTl07CSAgICAvKiBlbmQtY29tbWVudCBzdHJpbmcgKi8KKwljaGFyX3UJKmNvbW1lbnRfZW5kID0gTlVMTDsJICAgIC8qIHdoZXJlIGxlYWRfZW5kIGhhcyBiZWVuIGZvdW5kICovCisJaW50CWV4dHJhX3NwYWNlID0gRkFMU0U7CSAgICAvKiBhcHBlbmQgZXh0cmEgc3BhY2UgKi8KKwlpbnQJY3VycmVudF9mbGFnOworCWludAlyZXF1aXJlX2JsYW5rID0gRkFMU0U7CSAgICAvKiByZXF1aXJlcyBibGFuayBhZnRlciBtaWRkbGUgKi8KKwljaGFyX3UJKnAyOworCisJLyoKKwkgKiBJZiB0aGUgY29tbWVudCBsZWFkZXIgaGFzIHRoZSBzdGFydCwgbWlkZGxlIG9yIGVuZCBmbGFnLCBpdCBtYXkgbm90CisJICogYmUgdXNlZCBvciBtYXkgYmUgcmVwbGFjZWQgd2l0aCB0aGUgbWlkZGxlIGxlYWRlci4KKwkgKi8KKwlmb3IgKHAgPSBsZWFkX2ZsYWdzOyAqcCAmJiAqcCAhPSAnOic7ICsrcCkKKwl7CisJICAgIGlmICgqcCA9PSBDT01fQkxBTkspCisJICAgIHsKKwkJcmVxdWlyZV9ibGFuayA9IFRSVUU7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGlmICgqcCA9PSBDT01fU1RBUlQgfHwgKnAgPT0gQ09NX01JRERMRSkKKwkgICAgeworCQljdXJyZW50X2ZsYWcgPSAqcDsKKwkJaWYgKCpwID09IENPTV9TVEFSVCkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIERvaW5nICJPIiBvbiBhIHN0YXJ0IG9mIGNvbW1lbnQgZG9lcyBub3QgaW5zZXJ0IGxlYWRlci4KKwkJICAgICAqLworCQkgICAgaWYgKGRpciA9PSBCQUNLV0FSRCkKKwkJICAgIHsKKwkJCWxlYWRfbGVuID0gMDsKKwkJCWJyZWFrOworCQkgICAgfQorCisJCSAgICAvKiBmaW5kIHN0YXJ0IG9mIG1pZGRsZSBwYXJ0ICovCisJCSAgICAodm9pZCljb3B5X29wdGlvbl9wYXJ0KCZwLCBsZWFkX21pZGRsZSwgQ09NX01BWF9MRU4sICIsIik7CisJCSAgICByZXF1aXJlX2JsYW5rID0gRkFMU0U7CisJCX0KKworCQkvKgorCQkgKiBJc29sYXRlIHRoZSBzdHJpbmdzIG9mIHRoZSBtaWRkbGUgYW5kIGVuZCBsZWFkZXIuCisJCSAqLworCQl3aGlsZSAoKnAgJiYgcFstMV0gIT0gJzonKQkvKiBmaW5kIGVuZCBvZiBtaWRkbGUgZmxhZ3MgKi8KKwkJeworCQkgICAgaWYgKCpwID09IENPTV9CTEFOSykKKwkJCXJlcXVpcmVfYmxhbmsgPSBUUlVFOworCQkgICAgKytwOworCQl9CisJCSh2b2lkKWNvcHlfb3B0aW9uX3BhcnQoJnAsIGxlYWRfbWlkZGxlLCBDT01fTUFYX0xFTiwgIiwiKTsKKworCQl3aGlsZSAoKnAgJiYgcFstMV0gIT0gJzonKQkvKiBmaW5kIGVuZCBvZiBlbmQgZmxhZ3MgKi8KKwkJeworCQkgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBhbGxvdyBhdXRvbWF0aWMgZW5kaW5nIG9mIGNvbW1lbnRzICovCisJCSAgICBpZiAoKnAgPT0gQ09NX0FVVE9fRU5EKQorCQkJZW5kX2NvbW1lbnRfcGVuZGluZyA9IC0xOyAvKiBtZWFucyB3ZSB3YW50IHRvIHNldCBpdCAqLworCQkgICAgKytwOworCQl9CisJCW4gPSBjb3B5X29wdGlvbl9wYXJ0KCZwLCBsZWFkX2VuZCwgQ09NX01BWF9MRU4sICIsIik7CisKKwkJaWYgKGVuZF9jb21tZW50X3BlbmRpbmcgPT0gLTEpCS8qIHdlIGNhbiBzZXQgaXQgbm93ICovCisJCSAgICBlbmRfY29tbWVudF9wZW5kaW5nID0gbGVhZF9lbmRbbiAtIDFdOworCisJCS8qCisJCSAqIElmIHRoZSBlbmQgb2YgdGhlIGNvbW1lbnQgaXMgaW4gdGhlIHNhbWUgbGluZSwgZG9uJ3QgdXNlCisJCSAqIHRoZSBjb21tZW50IGxlYWRlci4KKwkJICovCisJCWlmIChkaXIgPT0gRk9SV0FSRCkKKwkJeworCQkgICAgZm9yIChwID0gc2F2ZWRfbGluZSArIGxlYWRfbGVuOyAqcDsgKytwKQorCQkJaWYgKFNUUk5DTVAocCwgbGVhZF9lbmQsIG4pID09IDApCisJCQl7CisJCQkgICAgY29tbWVudF9lbmQgPSBwOworCQkJICAgIGxlYWRfbGVuID0gMDsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIERvaW5nICJvIiBvbiBhIHN0YXJ0IG9mIGNvbW1lbnQgaW5zZXJ0cyB0aGUgbWlkZGxlIGxlYWRlci4KKwkJICovCisJCWlmIChsZWFkX2xlbiA+IDApCisJCXsKKwkJICAgIGlmIChjdXJyZW50X2ZsYWcgPT0gQ09NX1NUQVJUKQorCQkgICAgeworCQkJbGVhZF9yZXBsID0gbGVhZF9taWRkbGU7CisJCQlsZWFkX3JlcGxfbGVuID0gKGludClTVFJMRU4obGVhZF9taWRkbGUpOworCQkgICAgfQorCisJCSAgICAvKgorCQkgICAgICogSWYgd2UgaGF2ZSBoaXQgUkVUVVJOIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzdGFydAorCQkgICAgICogY29tbWVudCBsZWFkZXIsIHRoZW4gcHV0IGEgc3BhY2UgYWZ0ZXIgdGhlIG1pZGRsZQorCQkgICAgICogY29tbWVudCBsZWFkZXIgb24gdGhlIG5leHQgbGluZS4KKwkJICAgICAqLworCQkgICAgaWYgKCF2aW1faXN3aGl0ZShzYXZlZF9saW5lW2xlYWRfbGVuIC0gMV0pCisJCQkgICAgJiYgKChwX2V4dHJhICE9IE5VTEwKKwkJCQkgICAgJiYgKGludCljdXJ3aW4tPndfY3Vyc29yLmNvbCA9PSBsZWFkX2xlbikKKwkJCQl8fCAocF9leHRyYSA9PSBOVUxMCisJCQkJICAgICYmIHNhdmVkX2xpbmVbbGVhZF9sZW5dID09IE5VTCkKKwkJCQl8fCByZXF1aXJlX2JsYW5rKSkKKwkJCWV4dHJhX3NwYWNlID0gVFJVRTsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoKnAgPT0gQ09NX0VORCkKKwkgICAgeworCQkvKgorCQkgKiBEb2luZyAibyIgb24gdGhlIGVuZCBvZiBhIGNvbW1lbnQgZG9lcyBub3QgaW5zZXJ0IGxlYWRlci4KKwkJICogUmVtZW1iZXIgd2hlcmUgdGhlIGVuZCBpcywgbWlnaHQgd2FudCB0byB1c2UgaXQgdG8gZmluZCB0aGUKKwkJICogc3RhcnQgKGZvciBDLWNvbW1lbnRzKS4KKwkJICovCisJCWlmIChkaXIgPT0gRk9SV0FSRCkKKwkJeworCQkgICAgY29tbWVudF9lbmQgPSBza2lwd2hpdGUoc2F2ZWRfbGluZSk7CisJCSAgICBsZWFkX2xlbiA9IDA7CisJCSAgICBicmVhazsKKwkJfQorCisJCS8qCisJCSAqIERvaW5nICJPIiBvbiB0aGUgZW5kIG9mIGEgY29tbWVudCBpbnNlcnRzIHRoZSBtaWRkbGUgbGVhZGVyLgorCQkgKiBGaW5kIHRoZSBzdHJpbmcgZm9yIHRoZSBtaWRkbGUgbGVhZGVyLCBzZWFyY2hpbmcgYmFja3dhcmRzLgorCQkgKi8KKwkJd2hpbGUgKHAgPiBjdXJidWYtPmJfcF9jb20gJiYgKnAgIT0gJywnKQorCQkgICAgLS1wOworCQlmb3IgKGxlYWRfcmVwbCA9IHA7IGxlYWRfcmVwbCA+IGN1cmJ1Zi0+Yl9wX2NvbQorCQkJCQkgJiYgbGVhZF9yZXBsWy0xXSAhPSAnOic7IC0tbGVhZF9yZXBsKQorCQkgICAgOworCQlsZWFkX3JlcGxfbGVuID0gKGludCkocCAtIGxlYWRfcmVwbCk7CisKKwkJLyogV2UgY2FuIHByb2JhYmx5IGFsd2F5cyBhZGQgYW4gZXh0cmEgc3BhY2Ugd2hlbiBkb2luZyAiTyIgb24KKwkJICogdGhlIGNvbW1lbnQtZW5kICovCisJCWV4dHJhX3NwYWNlID0gVFJVRTsKKworCQkvKiBDaGVjayB3aGV0aGVyIHdlIGFsbG93IGF1dG9tYXRpYyBlbmRpbmcgb2YgY29tbWVudHMgKi8KKwkJZm9yIChwMiA9IHA7ICpwMiAmJiAqcDIgIT0gJzonOyBwMisrKQorCQl7CisJCSAgICBpZiAoKnAyID09IENPTV9BVVRPX0VORCkKKwkJCWVuZF9jb21tZW50X3BlbmRpbmcgPSAtMTsgLyogbWVhbnMgd2Ugd2FudCB0byBzZXQgaXQgKi8KKwkJfQorCQlpZiAoZW5kX2NvbW1lbnRfcGVuZGluZyA9PSAtMSkKKwkJeworCQkgICAgLyogRmluZCBsYXN0IGNoYXJhY3RlciBpbiBlbmQtY29tbWVudCBzdHJpbmcgKi8KKwkJICAgIHdoaWxlICgqcDIgJiYgKnAyICE9ICcsJykKKwkJCXAyKys7CisJCSAgICBlbmRfY29tbWVudF9wZW5kaW5nID0gcDJbLTFdOworCQl9CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmICgqcCA9PSBDT01fRklSU1QpCisJICAgIHsKKwkJLyoKKwkJICogQ29tbWVudCBsZWFkZXIgZm9yIGZpcnN0IGxpbmUgb25seToJRG9uJ3QgcmVwZWF0IGxlYWRlcgorCQkgKiB3aGVuIHVzaW5nICJPIiwgYmxhbmsgb3V0IGxlYWRlciB3aGVuIHVzaW5nICJvIi4KKwkJICovCisJCWlmIChkaXIgPT0gQkFDS1dBUkQpCisJCSAgICBsZWFkX2xlbiA9IDA7CisJCWVsc2UKKwkJeworCQkgICAgbGVhZF9yZXBsID0gKGNoYXJfdSAqKSIiOworCQkgICAgbGVhZF9yZXBsX2xlbiA9IDA7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKwl9CisJaWYgKGxlYWRfbGVuKQorCXsKKwkgICAgLyogYWxsb2NhdGUgYnVmZmVyIChtYXkgY29uY2F0ZW5hdGUgcF9leHRhIGxhdGVyKSAqLworCSAgICBsZWFkZXIgPSBhbGxvYyhsZWFkX2xlbiArIGxlYWRfcmVwbF9sZW4gKyBleHRyYV9zcGFjZSArCisJCQkJCQkJICAgICAgZXh0cmFfbGVuICsgMSk7CisJICAgIGFsbG9jYXRlZCA9IGxlYWRlcjsJCSAgICAvKiByZW1lbWJlciB0byBmcmVlIGl0IGxhdGVyICovCisKKwkgICAgaWYgKGxlYWRlciA9PSBOVUxMKQorCQlsZWFkX2xlbiA9IDA7CisJICAgIGVsc2UKKwkgICAgeworCQlTVFJOQ1BZKGxlYWRlciwgc2F2ZWRfbGluZSwgbGVhZF9sZW4pOworCQlsZWFkZXJbbGVhZF9sZW5dID0gTlVMOworCisJCS8qCisJCSAqIFJlcGxhY2UgbGVhZGVyIHdpdGggbGVhZF9yZXBsLCByaWdodCBvciBsZWZ0IGFkanVzdGVkCisJCSAqLworCQlpZiAobGVhZF9yZXBsICE9IE5VTEwpCisJCXsKKwkJICAgIGludAkJYyA9IDA7CisJCSAgICBpbnQJCW9mZiA9IDA7CisKKwkJICAgIGZvciAocCA9IGxlYWRfZmxhZ3M7ICpwICYmICpwICE9ICc6JzsgKytwKQorCQkgICAgeworCQkJaWYgKCpwID09IENPTV9SSUdIVCB8fCAqcCA9PSBDT01fTEVGVCkKKwkJCSAgICBjID0gKnA7CisJCQllbHNlIGlmIChWSU1fSVNESUdJVCgqcCkgfHwgKnAgPT0gJy0nKQorCQkJICAgIG9mZiA9IGdldGRpZ2l0cygmcCk7CisJCSAgICB9CisJCSAgICBpZiAoYyA9PSBDT01fUklHSFQpICAgIC8qIHJpZ2h0IGFkanVzdGVkIGxlYWRlciAqLworCQkgICAgeworCQkJLyogZmluZCBsYXN0IG5vbi13aGl0ZSBpbiB0aGUgbGVhZGVyIHRvIGxpbmUgdXAgd2l0aCAqLworCQkJZm9yIChwID0gbGVhZGVyICsgbGVhZF9sZW4gLSAxOyBwID4gbGVhZGVyCisJCQkJCQkgICAgICAmJiB2aW1faXN3aGl0ZSgqcCk7IC0tcCkKKwkJCSAgICA7CisKKwkJCSsrcDsKKwkJCWlmIChwIDwgbGVhZGVyICsgbGVhZF9yZXBsX2xlbikKKwkJCSAgICBwID0gbGVhZGVyOworCQkJZWxzZQorCQkJICAgIHAgLT0gbGVhZF9yZXBsX2xlbjsKKwkJCW1jaF9tZW1tb3ZlKHAsIGxlYWRfcmVwbCwgKHNpemVfdClsZWFkX3JlcGxfbGVuKTsKKwkJCWlmIChwICsgbGVhZF9yZXBsX2xlbiA+IGxlYWRlciArIGxlYWRfbGVuKQorCQkJICAgIHBbbGVhZF9yZXBsX2xlbl0gPSBOVUw7CisKKwkJCS8qIGJsYW5rLW91dCBhbnkgb3RoZXIgY2hhcnMgZnJvbSB0aGUgb2xkIGxlYWRlci4gKi8KKwkJCXdoaWxlICgtLXAgPj0gbGVhZGVyKQorCQkJICAgIGlmICghdmltX2lzd2hpdGUoKnApKQorCQkJCSpwID0gJyAnOworCQkgICAgfQorCQkgICAgZWxzZQkJICAgIC8qIGxlZnQgYWRqdXN0ZWQgbGVhZGVyICovCisJCSAgICB7CisJCQlwID0gc2tpcHdoaXRlKGxlYWRlcik7CisJCQltY2hfbWVtbW92ZShwLCBsZWFkX3JlcGwsIChzaXplX3QpbGVhZF9yZXBsX2xlbik7CisKKwkJCS8qIFJlcGxhY2UgYW55IHJlbWFpbmluZyBub24td2hpdGUgY2hhcnMgaW4gdGhlIG9sZAorCQkJICogbGVhZGVyIGJ5IHNwYWNlcy4gIEtlZXAgVGFicywgdGhlIGluZGVudCBtdXN0CisJCQkgKiByZW1haW4gdGhlIHNhbWUuICovCisJCQlmb3IgKHAgKz0gbGVhZF9yZXBsX2xlbjsgcCA8IGxlYWRlciArIGxlYWRfbGVuOyArK3ApCisJCQkgICAgaWYgKCF2aW1faXN3aGl0ZSgqcCkpCisJCQkgICAgeworCQkJCS8qIERvbid0IHB1dCBhIHNwYWNlIGJlZm9yZSBhIFRBQi4gKi8KKwkJCQlpZiAocCArIDEgPCBsZWFkZXIgKyBsZWFkX2xlbiAmJiBwWzFdID09IFRBQikKKwkJCQl7CisJCQkJICAgIC0tbGVhZF9sZW47CisJCQkJICAgIG1jaF9tZW1tb3ZlKHAsIHAgKyAxLAorCQkJCQkJICAgICAobGVhZGVyICsgbGVhZF9sZW4pIC0gcCk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkgICAgKnAgPSAnICc7CisJCQkgICAgfQorCQkJKnAgPSBOVUw7CisJCSAgICB9CisKKwkJICAgIC8qIFJlY29tcHV0ZSB0aGUgaW5kZW50LCBpdCBtYXkgaGF2ZSBjaGFuZ2VkLiAqLworCQkgICAgaWYgKGN1cmJ1Zi0+Yl9wX2FpCisjaWZkZWYgRkVBVF9TTUFSVElOREVOVAorCQkJCQl8fCBkb19zaQorI2VuZGlmCisJCQkJCQkJICAgKQorCQkJbmV3aW5kZW50ID0gZ2V0X2luZGVudF9zdHIobGVhZGVyLCAoaW50KWN1cmJ1Zi0+Yl9wX3RzKTsKKworCQkgICAgLyogQWRkIHRoZSBpbmRlbnQgb2Zmc2V0ICovCisJCSAgICBpZiAobmV3aW5kZW50ICsgb2ZmIDwgMCkKKwkJICAgIHsKKwkJCW9mZiA9IC1uZXdpbmRlbnQ7CisJCQluZXdpbmRlbnQgPSAwOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJbmV3aW5kZW50ICs9IG9mZjsKKworCQkgICAgLyogQ29ycmVjdCB0cmFpbGluZyBzcGFjZXMgZm9yIHRoZSBzaGlmdCwgc28gdGhhdAorCQkgICAgICogYWxpZ25tZW50IHJlbWFpbnMgZXF1YWwuICovCisJCSAgICB3aGlsZSAob2ZmID4gMCAmJiBsZWFkX2xlbiA+IDAKKwkJCQkJICAgICAgICYmIGxlYWRlcltsZWFkX2xlbiAtIDFdID09ICcgJykKKwkJICAgIHsKKwkJCS8qIERvbid0IGRvIGl0IHdoZW4gdGhlcmUgaXMgYSB0YWIgYmVmb3JlIHRoZSBzcGFjZSAqLworCQkJaWYgKHZpbV9zdHJjaHIoc2tpcHdoaXRlKGxlYWRlciksICdcdCcpICE9IE5VTEwpCisJCQkgICAgYnJlYWs7CisJCQktLWxlYWRfbGVuOworCQkJLS1vZmY7CisJCSAgICB9CisKKwkJICAgIC8qIElmIHRoZSBsZWFkZXIgZW5kcyBpbiB3aGl0ZSBzcGFjZSwgZG9uJ3QgYWRkIGFuCisJCSAgICAgKiBleHRyYSBzcGFjZSAqLworCQkgICAgaWYgKGxlYWRfbGVuID4gMCAmJiB2aW1faXN3aGl0ZShsZWFkZXJbbGVhZF9sZW4gLSAxXSkpCisJCQlleHRyYV9zcGFjZSA9IEZBTFNFOworCQkgICAgbGVhZGVyW2xlYWRfbGVuXSA9IE5VTDsKKwkJfQorCisJCWlmIChleHRyYV9zcGFjZSkKKwkJeworCQkgICAgbGVhZGVyW2xlYWRfbGVuKytdID0gJyAnOworCQkgICAgbGVhZGVyW2xlYWRfbGVuXSA9IE5VTDsKKwkJfQorCisJCW5ld2NvbCA9IGxlYWRfbGVuOworCisJCS8qCisJCSAqIGlmIGEgbmV3IGluZGVudCB3aWxsIGJlIHNldCBiZWxvdywgcmVtb3ZlIHRoZSBpbmRlbnQgdGhhdAorCQkgKiBpcyBpbiB0aGUgY29tbWVudCBsZWFkZXIKKwkJICovCisJCWlmIChuZXdpbmRlbnQKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisJCQkJfHwgZGlkX3NpCisjZW5kaWYKKwkJCQkJICAgKQorCQl7CisJCSAgICB3aGlsZSAobGVhZF9sZW4gJiYgdmltX2lzd2hpdGUoKmxlYWRlcikpCisJCSAgICB7CisJCQktLWxlYWRfbGVuOworCQkJLS1uZXdjb2w7CisJCQkrK2xlYWRlcjsKKwkJICAgIH0KKwkJfQorCisJICAgIH0KKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisJICAgIGRpZF9zaSA9IGNhbl9zaSA9IEZBTFNFOworI2VuZGlmCisJfQorCWVsc2UgaWYgKGNvbW1lbnRfZW5kICE9IE5VTEwpCisJeworCSAgICAvKgorCSAgICAgKiBXZSBoYXZlIGZpbmlzaGVkIGEgY29tbWVudCwgc28gd2UgZG9uJ3QgdXNlIHRoZSBsZWFkZXIuCisJICAgICAqIElmIHRoaXMgd2FzIGEgQy1jb21tZW50IGFuZCAnYWknIG9yICdzaScgaXMgc2V0IGRvIGEgbm9ybWFsCisJICAgICAqIGluZGVudCB0byBhbGlnbiB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIHN0YXJ0IG9mIHRoZQorCSAgICAgKiBjb21tZW50LgorCSAgICAgKi8KKwkgICAgaWYgKGNvbW1lbnRfZW5kWzBdID09ICcqJyAmJiBjb21tZW50X2VuZFsxXSA9PSAnLycgJiYKKwkJCShjdXJidWYtPmJfcF9haQorI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKKwkJCQkJfHwgZG9fc2kKKyNlbmRpZgorCQkJCQkJCSAgICkpCisJICAgIHsKKwkJb2xkX2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7CisJCWN1cndpbi0+d19jdXJzb3IuY29sID0gKGNvbG5yX1QpKGNvbW1lbnRfZW5kIC0gc2F2ZWRfbGluZSk7CisJCWlmICgocG9zID0gZmluZG1hdGNoKE5VTEwsIE5VTCkpICE9IE5VTEwpCisJCXsKKwkJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IHBvcy0+bG51bTsKKwkJICAgIG5ld2luZGVudCA9IGdldF9pbmRlbnQoKTsKKwkJfQorCQljdXJ3aW4tPndfY3Vyc29yID0gb2xkX2N1cnNvcjsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qIChTdGF0ZSA9PSBJTlNFUlQgfHwgU3RhdGUgPT0gUkVQTEFDRSksIG9ubHkgd2hlbiBkaXIgPT0gRk9SV0FSRCAqLworICAgIGlmIChwX2V4dHJhICE9IE5VTEwpCisgICAgeworCSpwX2V4dHJhID0gc2F2ZWRfY2hhcjsJCS8qIHJlc3RvcmUgY2hhciB0aGF0IE5VTCByZXBsYWNlZCAqLworCisJLyoKKwkgKiBXaGVuICdhaScgc2V0IG9yICJmbGFncyIgaGFzIE9QRU5MSU5FX0RFTFNQQUNFUywgc2tpcCB0byB0aGUgZmlyc3QKKwkgKiBub24tYmxhbmsuCisJICoKKwkgKiBXaGVuIGluIFJFUExBQ0UgbW9kZSwgcHV0IHRoZSBkZWxldGVkIGJsYW5rcyBvbiB0aGUgcmVwbGFjZSBzdGFjaywKKwkgKiBwcmVjZWRlZCBieSBhIE5VTCwgc28gdGhleSBjYW4gYmUgcHV0IGJhY2sgd2hlbiBhIEJTIGlzIGVudGVyZWQuCisJICovCisJaWYgKFJFUExBQ0VfTk9STUFMKFN0YXRlKSkKKwkgICAgcmVwbGFjZV9wdXNoKE5VTCk7CSAgICAvKiBlbmQgb2YgZXh0cmEgYmxhbmtzICovCisJaWYgKGN1cmJ1Zi0+Yl9wX2FpIHx8IChmbGFncyAmIE9QRU5MSU5FX0RFTFNQQUNFUykpCisJeworCSAgICB3aGlsZSAoKCpwX2V4dHJhID09ICcgJyB8fCAqcF9leHRyYSA9PSAnXHQnKQorI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgICYmICghZW5jX3V0ZjgKKwkJCSAgICAgICB8fCAhdXRmX2lzY29tcG9zaW5nKHV0Zl9wdHIyY2hhcihwX2V4dHJhICsgMSkpKQorI2VuZGlmCisJCSAgICApCisJICAgIHsKKwkJaWYgKFJFUExBQ0VfTk9STUFMKFN0YXRlKSkKKwkJICAgIHJlcGxhY2VfcHVzaCgqcF9leHRyYSk7CisJCSsrcF9leHRyYTsKKwkJKytsZXNzX2NvbHNfb2ZmOworCSAgICB9CisJfQorCWlmICgqcF9leHRyYSAhPSBOVUwpCisJICAgIGRpZF9haSA9IEZBTFNFOwkgICAgLyogYXBwZW5kIHNvbWUgdGV4dCwgZG9uJ3QgdHJ1bmNhdGUgbm93ICovCisKKwkvKiBjb2x1bW5zIGZvciBtYXJrcyBhZGp1c3RlZCBmb3IgcmVtb3ZlZCBjb2x1bW5zICovCisJbGVzc19jb2xzID0gKGludCkocF9leHRyYSAtIHNhdmVkX2xpbmUpOworICAgIH0KKworICAgIGlmIChwX2V4dHJhID09IE5VTEwpCisJcF9leHRyYSA9IChjaGFyX3UgKikiIjsJCSAgICAvKiBhcHBlbmQgZW1wdHkgbGluZSAqLworCisjaWZkZWYgRkVBVF9DT01NRU5UUworICAgIC8qIGNvbmNhdGVuYXRlIGxlYWRlciBhbmQgcF9leHRyYSwgaWYgdGhlcmUgaXMgYSBsZWFkZXIgKi8KKyAgICBpZiAobGVhZF9sZW4pCisgICAgeworCVNUUkNBVChsZWFkZXIsIHBfZXh0cmEpOworCXBfZXh0cmEgPSBsZWFkZXI7CisJZGlkX2FpID0gVFJVRTsJICAgIC8qIFNvIHRydW5jYXRpbmcgYmxhbmtzIHdvcmtzIHdpdGggY29tbWVudHMgKi8KKwlsZXNzX2NvbHMgLT0gbGVhZF9sZW47CisgICAgfQorICAgIGVsc2UKKwllbmRfY29tbWVudF9wZW5kaW5nID0gTlVMOyAgLyogdHVybnMgb3V0IHRoZXJlIHdhcyBubyBsZWFkZXIgKi8KKyNlbmRpZgorCisgICAgb2xkX2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgaWYgKGRpciA9PSBCQUNLV0FSRCkKKwktLWN1cndpbi0+d19jdXJzb3IubG51bTsKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisgICAgaWYgKCEoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKSB8fCBvbGRfY3Vyc29yLmxudW0gPj0gb3JpZ19saW5lX2NvdW50KQorI2VuZGlmCisgICAgeworCWlmIChtbF9hcHBlbmQoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBwX2V4dHJhLCAoY29sbnJfVCkwLCBGQUxTRSkKKwkJCQkJCQkJICAgICAgPT0gRkFJTCkKKwkgICAgZ290byB0aGVlbmQ7CisJLyogUG9zdHBvbmUgY2FsbGluZyBjaGFuZ2VkX2xpbmVzKCksIGJlY2F1c2UgaXQgd291bGQgbWVzcyB1cCBmb2xkaW5nCisJICogd2l0aCBtYXJrZXJzLiAqLworCW1hcmtfYWRqdXN0KGN1cndpbi0+d19jdXJzb3IubG51bSArIDEsIChsaW5lbnJfVClNQVhMTlVNLCAxTCwgMEwpOworCWRpZF9hcHBlbmQgPSBUUlVFOworICAgIH0KKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIEluIFZSRVBMQUNFIG1vZGUgd2UgYXJlIHN0YXJ0aW5nIHRvIHJlcGxhY2UgdGhlIG5leHQgbGluZS4KKwkgKi8KKwljdXJ3aW4tPndfY3Vyc29yLmxudW0rKzsKKwlpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID49IEluc3N0YXJ0LmxudW0gKyB2cl9saW5lc19jaGFuZ2VkKQorCXsKKwkgICAgLyogSW4gY2FzZSB3ZSBOTCB0byBhIG5ldyBsaW5lLCBCUyB0byB0aGUgcHJldmlvdXMgb25lLCBhbmQgTkwKKwkgICAgICogYWdhaW4sIHdlIGRvbid0IHdhbnQgdG8gc2F2ZSB0aGUgbmV3IGxpbmUgZm9yIHVuZG8gdHdpY2UuCisJICAgICAqLworCSAgICAodm9pZCl1X3NhdmVfY3Vyc29yKCk7CQkgICAgLyogZXJyb3JzIGFyZSBpZ25vcmVkISAqLworCSAgICB2cl9saW5lc19jaGFuZ2VkKys7CisJfQorCW1sX3JlcGxhY2UoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBwX2V4dHJhLCBUUlVFKTsKKwljaGFuZ2VkX2J5dGVzKGN1cndpbi0+d19jdXJzb3IubG51bSwgMCk7CisJY3Vyd2luLT53X2N1cnNvci5sbnVtLS07CisJZGlkX2FwcGVuZCA9IEZBTFNFOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKG5ld2luZGVudAorI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKKwkJICAgIHx8IGRpZF9zaQorI2VuZGlmCisJCQkJKQorICAgIHsKKwkrK2N1cndpbi0+d19jdXJzb3IubG51bTsKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisJaWYgKGRpZF9zaSkKKwl7CisJICAgIGlmIChwX3NyKQorCQluZXdpbmRlbnQgLT0gbmV3aW5kZW50ICUgKGludCljdXJidWYtPmJfcF9zdzsKKwkgICAgbmV3aW5kZW50ICs9IChpbnQpY3VyYnVmLT5iX3Bfc3c7CisJfQorI2VuZGlmCisJLyogQ29weSB0aGUgaW5kZW50IG9ubHkgaWYgZXhwYW5kIHRhYiBpcyBkaXNhYmxlZCAqLworCWlmIChjdXJidWYtPmJfcF9jaSAmJiAhY3VyYnVmLT5iX3BfZXQpCisJeworCSAgICAodm9pZCljb3B5X2luZGVudChuZXdpbmRlbnQsIHNhdmVkX2xpbmUpOworCisJICAgIC8qCisJICAgICAqIFNldCB0aGUgJ3ByZXNlcnZlaW5kZW50JyBvcHRpb24gc28gdGhhdCBhbnkgZnVydGhlciBzY3Jld2luZworCSAgICAgKiB3aXRoIHRoZSBsaW5lIGRvZXNuJ3QgZW50aXJlbHkgZGVzdHJveSBvdXIgZWZmb3J0cyB0byBwcmVzZXJ2ZQorCSAgICAgKiBpdC4gIEl0IGdldHMgcmVzdG9yZWQgYXQgdGhlIGZ1bmN0aW9uIGVuZC4KKwkgICAgICovCisJICAgIGN1cmJ1Zi0+Yl9wX3BpID0gVFJVRTsKKwl9CisJZWxzZQorCSAgICAodm9pZClzZXRfaW5kZW50KG5ld2luZGVudCwgU0lOX0lOU0VSVCk7CisJbGVzc19jb2xzIC09IGN1cndpbi0+d19jdXJzb3IuY29sOworCisJYWlfY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisKKwkvKgorCSAqIEluIFJFUExBQ0UgbW9kZSwgZm9yIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBuZXcgaW5kZW50LCB0aGVyZSBtdXN0CisJICogYmUgYSBOVUwgb24gdGhlIHJlcGxhY2Ugc3RhY2ssIGZvciB3aGVuIGl0IGlzIGRlbGV0ZWQgd2l0aCBCUworCSAqLworCWlmIChSRVBMQUNFX05PUk1BTChTdGF0ZSkpCisJICAgIGZvciAobiA9IDA7IG4gPCAoaW50KWN1cndpbi0+d19jdXJzb3IuY29sOyArK24pCisJCXJlcGxhY2VfcHVzaChOVUwpOworCW5ld2NvbCArPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisJaWYgKG5vX3NpKQorCSAgICBkaWRfc2kgPSBGQUxTRTsKKyNlbmRpZgorICAgIH0KKworI2lmZGVmIEZFQVRfQ09NTUVOVFMKKyAgICAvKgorICAgICAqIEluIFJFUExBQ0UgbW9kZSwgZm9yIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBleHRyYSBsZWFkZXIsIHRoZXJlIG11c3QgYmUKKyAgICAgKiBhIE5VTCBvbiB0aGUgcmVwbGFjZSBzdGFjaywgZm9yIHdoZW4gaXQgaXMgZGVsZXRlZCB3aXRoIEJTLgorICAgICAqLworICAgIGlmIChSRVBMQUNFX05PUk1BTChTdGF0ZSkpCisJd2hpbGUgKGxlYWRfbGVuLS0gPiAwKQorCSAgICByZXBsYWNlX3B1c2goTlVMKTsKKyNlbmRpZgorCisgICAgY3Vyd2luLT53X2N1cnNvciA9IG9sZF9jdXJzb3I7CisKKyAgICBpZiAoZGlyID09IEZPUldBUkQpCisgICAgeworCWlmICh0cnVuY19saW5lIHx8IChTdGF0ZSAmIElOU0VSVCkpCisJeworCSAgICAvKiB0cnVuY2F0ZSBjdXJyZW50IGxpbmUgYXQgY3Vyc29yICovCisJICAgIHNhdmVkX2xpbmVbY3Vyd2luLT53X2N1cnNvci5jb2xdID0gTlVMOworCSAgICAvKiBSZW1vdmUgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIHVubGVzcyBPUEVOTElORV9LRUVQVFJBSUwgdXNlZC4gKi8KKwkgICAgaWYgKHRydW5jX2xpbmUgJiYgIShmbGFncyAmIE9QRU5MSU5FX0tFRVBUUkFJTCkpCisJCXRydW5jYXRlX3NwYWNlcyhzYXZlZF9saW5lKTsKKwkgICAgbWxfcmVwbGFjZShjdXJ3aW4tPndfY3Vyc29yLmxudW0sIHNhdmVkX2xpbmUsIEZBTFNFKTsKKwkgICAgc2F2ZWRfbGluZSA9IE5VTEw7CisJICAgIGlmIChkaWRfYXBwZW5kKQorCSAgICB7CisJCWNoYW5nZWRfbGluZXMoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBjdXJ3aW4tPndfY3Vyc29yLmNvbCwKKwkJCQkJICAgICAgIGN1cndpbi0+d19jdXJzb3IubG51bSArIDEsIDFMKTsKKwkJZGlkX2FwcGVuZCA9IEZBTFNFOworCisJCS8qIE1vdmUgbWFya3MgYWZ0ZXIgdGhlIGxpbmUgYnJlYWsgdG8gdGhlIG5ldyBsaW5lLiAqLworCQlpZiAoZmxhZ3MgJiBPUEVOTElORV9NQVJLRklYKQorCQkgICAgbWFya19jb2xfYWRqdXN0KGN1cndpbi0+d19jdXJzb3IubG51bSwKKwkJCQkJIGN1cndpbi0+d19jdXJzb3IuY29sICsgbGVzc19jb2xzX29mZiwKKwkJCQkJCQkxTCwgKGxvbmcpLWxlc3NfY29scyk7CisJICAgIH0KKwkgICAgZWxzZQorCQljaGFuZ2VkX2J5dGVzKGN1cndpbi0+d19jdXJzb3IubG51bSwgY3Vyd2luLT53X2N1cnNvci5jb2wpOworCX0KKworCS8qCisJICogUHV0IHRoZSBjdXJzb3Igb24gdGhlIG5ldyBsaW5lLiAgQ2FyZWZ1bDogdGhlIHNjcm9sbHVwKCkgYWJvdmUgbWF5CisJICogaGF2ZSBtb3ZlZCB3X2N1cnNvciwgd2UgbXVzdCB1c2Ugb2xkX2N1cnNvci4KKwkgKi8KKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBvbGRfY3Vyc29yLmxudW0gKyAxOworICAgIH0KKyAgICBpZiAoZGlkX2FwcGVuZCkKKwljaGFuZ2VkX2xpbmVzKGN1cndpbi0+d19jdXJzb3IubG51bSwgMCwgY3Vyd2luLT53X2N1cnNvci5sbnVtLCAxTCk7CisKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IG5ld2NvbDsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfVlJFUExBQ0UpICYmIChkZWZpbmVkKEZFQVRfTElTUCkgfHwgZGVmaW5lZChGRUFUX0NJTkRFTlQpKQorICAgIC8qCisgICAgICogSW4gVlJFUExBQ0UgbW9kZSwgd2UgYXJlIGhhbmRsaW5nIHRoZSByZXBsYWNlIHN0YWNrIG91cnNlbHZlcywgc28gc3RvcAorICAgICAqIGZpeHRoaXNsaW5lKCkgZnJvbSBkb2luZyBpdCAodmlhIGNoYW5nZV9pbmRlbnQoKSkgYnkgdGVsbGluZyBpdCB3ZSdyZSBpbgorICAgICAqIG5vcm1hbCBJTlNFUlQgbW9kZS4KKyAgICAgKi8KKyAgICBpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorICAgIHsKKwl2cmVwbGFjZV9tb2RlID0gU3RhdGU7CS8qIFNvIHdlIGtub3cgdG8gcHV0IHRoaW5ncyByaWdodCBsYXRlciAqLworCVN0YXRlID0gSU5TRVJUOworICAgIH0KKyAgICBlbHNlCisJdnJlcGxhY2VfbW9kZSA9IDA7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0xJU1AKKyAgICAvKgorICAgICAqIE1heSBkbyBsaXNwIGluZGVudGluZy4KKyAgICAgKi8KKyAgICBpZiAoIXBfcGFzdGUKKyMgaWZkZWYgRkVBVF9DT01NRU5UUworCSAgICAmJiBsZWFkZXIgPT0gTlVMTAorIyBlbmRpZgorCSAgICAmJiBjdXJidWYtPmJfcF9saXNwCisJICAgICYmIGN1cmJ1Zi0+Yl9wX2FpKQorICAgIHsKKwlmaXh0aGlzbGluZShnZXRfbGlzcF9pbmRlbnQpOworCXAgPSBtbF9nZXRfY3VybGluZSgpOworCWFpX2NvbCA9IChjb2xucl9UKShza2lwd2hpdGUocCkgLSBwKTsKKyAgICB9CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKyAgICAvKgorICAgICAqIE1heSBkbyBpbmRlbnRpbmcgYWZ0ZXIgb3BlbmluZyBhIG5ldyBsaW5lLgorICAgICAqLworICAgIGlmICghcF9wYXN0ZQorCSAgICAmJiAoY3VyYnVmLT5iX3BfY2luCisjICBpZmRlZiBGRUFUX0VWQUwKKwkJICAgIHx8ICpjdXJidWYtPmJfcF9pbmRlICE9IE5VTAorIyAgZW5kaWYKKwkJKQorCSAgICAmJiBpbl9jaW5rZXlzKGRpciA9PSBGT1JXQVJECisJCT8gS0VZX09QRU5fRk9SVworCQk6IEtFWV9PUEVOX0JBQ0ssICcgJywgbGluZXdoaXRlKGN1cndpbi0+d19jdXJzb3IubG51bSkpKQorICAgIHsKKwlkb19jX2V4cHJfaW5kZW50KCk7CisJcCA9IG1sX2dldF9jdXJsaW5lKCk7CisJYWlfY29sID0gKGNvbG5yX1QpKHNraXB3aGl0ZShwKSAtIHApOworICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9WUkVQTEFDRSkgJiYgKGRlZmluZWQoRkVBVF9MSVNQKSB8fCBkZWZpbmVkKEZFQVRfQ0lOREVOVCkpCisgICAgaWYgKHZyZXBsYWNlX21vZGUgIT0gMCkKKwlTdGF0ZSA9IHZyZXBsYWNlX21vZGU7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKyAgICAvKgorICAgICAqIEZpbmFsbHksIFZSRVBMQUNFIGdldHMgdGhlIHN0dWZmIG9uIHRoZSBuZXcgbGluZSwgdGhlbiBwdXRzIGJhY2sgdGhlCisgICAgICogb3JpZ2luYWwgbGluZSwgYW5kIGluc2VydHMgdGhlIG5ldyBzdHVmZiBjaGFyIGJ5IGNoYXIsIHB1c2hpbmcgb2xkIHN0dWZmCisgICAgICogb250byB0aGUgcmVwbGFjZSBzdGFjayAodmlhIGluc19jaGFyKCkpLgorICAgICAqLworICAgIGlmIChTdGF0ZSAmIFZSRVBMQUNFX0ZMQUcpCisgICAgeworCS8qIFB1dCBuZXcgbGluZSBpbiBwX2V4dHJhICovCisJcF9leHRyYSA9IHZpbV9zdHJzYXZlKG1sX2dldF9jdXJsaW5lKCkpOworCWlmIChwX2V4dHJhID09IE5VTEwpCisJICAgIGdvdG8gdGhlZW5kOworCisJLyogUHV0IGJhY2sgb3JpZ2luYWwgbGluZSAqLworCW1sX3JlcGxhY2UoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBuZXh0X2xpbmUsIEZBTFNFKTsKKworCS8qIEluc2VydCBuZXcgc3R1ZmYgaW50byBsaW5lIGFnYWluICovCisJY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwljdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisjZW5kaWYKKwlpbnNfYnl0ZXMocF9leHRyYSk7CS8qIHdpbGwgY2FsbCBjaGFuZ2VkX2J5dGVzKCkgKi8KKwl2aW1fZnJlZShwX2V4dHJhKTsKKwluZXh0X2xpbmUgPSBOVUxMOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dmFsID0gVFJVRTsJCS8qIHN1Y2Nlc3MhICovCit0aGVlbmQ6CisgICAgY3VyYnVmLT5iX3BfcGkgPSBzYXZlZF9waTsKKyAgICB2aW1fZnJlZShzYXZlZF9saW5lKTsKKyAgICB2aW1fZnJlZShuZXh0X2xpbmUpOworICAgIHZpbV9mcmVlKGFsbG9jYXRlZCk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworI2lmIGRlZmluZWQoRkVBVF9DT01NRU5UUykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBnZXRfbGVhZGVyX2xlbigpIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgcHJlZml4IG9mIHRoZSBnaXZlbiBzdHJpbmcKKyAqIHdoaWNoIGludHJvZHVjZXMgYSBjb21tZW50LglJZiB0aGlzIHN0cmluZyBpcyBub3QgYSBjb21tZW50IHRoZW4gMCBpcworICogcmV0dXJuZWQuCisgKiBXaGVuICJmbGFncyIgaXMgbm90IE5VTEwsIGl0IGlzIHNldCB0byBwb2ludCB0byB0aGUgZmxhZ3Mgb2YgdGhlIHJlY29nbml6ZWQKKyAqIGNvbW1lbnQgbGVhZGVyLgorICogImJhY2t3YXJkIiBtdXN0IGJlIHRydWUgZm9yIHRoZSAiTyIgY29tbWFuZC4KKyAqLworICAgIGludAorZ2V0X2xlYWRlcl9sZW4obGluZSwgZmxhZ3MsIGJhY2t3YXJkKQorICAgIGNoYXJfdQkqbGluZTsKKyAgICBjaGFyX3UJKipmbGFnczsKKyAgICBpbnQJCWJhY2t3YXJkOworeworICAgIGludAkJaSwgajsKKyAgICBpbnQJCWdvdF9jb20gPSBGQUxTRTsKKyAgICBpbnQJCWZvdW5kX29uZTsKKyAgICBjaGFyX3UJcGFydF9idWZbQ09NX01BWF9MRU5dOwkvKiBidWZmZXIgZm9yIG9uZSBvcHRpb24gcGFydCAqLworICAgIGNoYXJfdQkqc3RyaW5nOwkJLyogcG9pbnRlciB0byBjb21tZW50IHN0cmluZyAqLworICAgIGNoYXJfdQkqbGlzdDsKKworICAgIGkgPSAwOworICAgIHdoaWxlICh2aW1faXN3aGl0ZShsaW5lW2ldKSkgICAgLyogbGVhZGluZyB3aGl0ZSBzcGFjZSBpcyBpZ25vcmVkICovCisJKytpOworCisgICAgLyoKKyAgICAgKiBSZXBlYXQgdG8gbWF0Y2ggc2V2ZXJhbCBuZXN0ZWQgY29tbWVudCBzdHJpbmdzLgorICAgICAqLworICAgIHdoaWxlIChsaW5lW2ldKQorICAgIHsKKwkvKgorCSAqIHNjYW4gdGhyb3VnaCB0aGUgJ2NvbW1lbnRzJyBvcHRpb24gZm9yIGEgbWF0Y2gKKwkgKi8KKwlmb3VuZF9vbmUgPSBGQUxTRTsKKwlmb3IgKGxpc3QgPSBjdXJidWYtPmJfcF9jb207ICpsaXN0OyApCisJeworCSAgICAvKgorCSAgICAgKiBHZXQgb25lIG9wdGlvbiBwYXJ0IGludG8gcGFydF9idWZbXS4gIEFkdmFuY2UgbGlzdCB0byBuZXh0IG9uZS4KKwkgICAgICogcHV0IHN0cmluZyBhdCBzdGFydCBvZiBzdHJpbmcuCisJICAgICAqLworCSAgICBpZiAoIWdvdF9jb20gJiYgZmxhZ3MgIT0gTlVMTCkgIC8qIHJlbWVtYmVyIHdoZXJlIGZsYWdzIHN0YXJ0ZWQgKi8KKwkJKmZsYWdzID0gbGlzdDsKKwkgICAgKHZvaWQpY29weV9vcHRpb25fcGFydCgmbGlzdCwgcGFydF9idWYsIENPTV9NQVhfTEVOLCAiLCIpOworCSAgICBzdHJpbmcgPSB2aW1fc3RyY2hyKHBhcnRfYnVmLCAnOicpOworCSAgICBpZiAoc3RyaW5nID09IE5VTEwpCSAgICAvKiBtaXNzaW5nICc6JywgaWdub3JlIHRoaXMgcGFydCAqLworCQljb250aW51ZTsKKwkgICAgKnN0cmluZysrID0gTlVMOwkgICAgLyogaXNvbGF0ZSBmbGFncyBmcm9tIHN0cmluZyAqLworCisJICAgIC8qCisJICAgICAqIFdoZW4gYWxyZWFkeSBmb3VuZCBhIG5lc3RlZCBjb21tZW50LCBvbmx5IGFjY2VwdCBmdXJ0aGVyCisJICAgICAqIG5lc3RlZCBjb21tZW50cy4KKwkgICAgICovCisJICAgIGlmIChnb3RfY29tICYmIHZpbV9zdHJjaHIocGFydF9idWYsIENPTV9ORVNUKSA9PSBOVUxMKQorCQljb250aW51ZTsKKworCSAgICAvKiBXaGVuICdPJyBmbGFnIHVzZWQgZG9uJ3QgdXNlIGZvciAiTyIgY29tbWFuZCAqLworCSAgICBpZiAoYmFja3dhcmQgJiYgdmltX3N0cmNocihwYXJ0X2J1ZiwgQ09NX05PQkFDSykgIT0gTlVMTCkKKwkJY29udGludWU7CisKKwkgICAgLyoKKwkgICAgICogTGluZSBjb250ZW50cyBhbmQgc3RyaW5nIG11c3QgbWF0Y2guCisJICAgICAqIFdoZW4gc3RyaW5nIHN0YXJ0cyB3aXRoIHdoaXRlIHNwYWNlLCBtdXN0IGhhdmUgc29tZSB3aGl0ZSBzcGFjZQorCSAgICAgKiAoYnV0IHRoZSBhbW91bnQgZG9lcyBub3QgbmVlZCB0byBtYXRjaCwgdGhlcmUgbWlnaHQgYmUgYSBtaXggb2YKKwkgICAgICogVEFCcyBhbmQgc3BhY2VzKS4KKwkgICAgICovCisJICAgIGlmICh2aW1faXN3aGl0ZShzdHJpbmdbMF0pKQorCSAgICB7CisJCWlmIChpID09IDAgfHwgIXZpbV9pc3doaXRlKGxpbmVbaSAtIDFdKSkKKwkJICAgIGNvbnRpbnVlOworCQl3aGlsZSAodmltX2lzd2hpdGUoc3RyaW5nWzBdKSkKKwkJICAgICsrc3RyaW5nOworCSAgICB9CisJICAgIGZvciAoaiA9IDA7IHN0cmluZ1tqXSAhPSBOVUwgJiYgc3RyaW5nW2pdID09IGxpbmVbaSArIGpdOyArK2opCisJCTsKKwkgICAgaWYgKHN0cmluZ1tqXSAhPSBOVUwpCisJCWNvbnRpbnVlOworCisJICAgIC8qCisJICAgICAqIFdoZW4gJ2InIGZsYWcgdXNlZCwgdGhlcmUgbXVzdCBiZSB3aGl0ZSBzcGFjZSBvciBhbgorCSAgICAgKiBlbmQtb2YtbGluZSBhZnRlciB0aGUgc3RyaW5nIGluIHRoZSBsaW5lLgorCSAgICAgKi8KKwkgICAgaWYgKHZpbV9zdHJjaHIocGFydF9idWYsIENPTV9CTEFOSykgIT0gTlVMTAorCQkJICAgJiYgIXZpbV9pc3doaXRlKGxpbmVbaSArIGpdKSAmJiBsaW5lW2kgKyBqXSAhPSBOVUwpCisJCWNvbnRpbnVlOworCisJICAgIC8qCisJICAgICAqIFdlIGhhdmUgZm91bmQgYSBtYXRjaCwgc3RvcCBzZWFyY2hpbmcuCisJICAgICAqLworCSAgICBpICs9IGo7CisJICAgIGdvdF9jb20gPSBUUlVFOworCSAgICBmb3VuZF9vbmUgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisKKwkvKgorCSAqIE5vIG1hdGNoIGZvdW5kLCBzdG9wIHNjYW5uaW5nLgorCSAqLworCWlmICghZm91bmRfb25lKQorCSAgICBicmVhazsKKworCS8qCisJICogSW5jbHVkZSBhbnkgdHJhaWxpbmcgd2hpdGUgc3BhY2UuCisJICovCisJd2hpbGUgKHZpbV9pc3doaXRlKGxpbmVbaV0pKQorCSAgICArK2k7CisKKwkvKgorCSAqIElmIHRoaXMgY29tbWVudCBkb2Vzbid0IG5lc3QsIHN0b3AgaGVyZS4KKwkgKi8KKwlpZiAodmltX3N0cmNocihwYXJ0X2J1ZiwgQ09NX05FU1QpID09IE5VTEwpCisJICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gKGdvdF9jb20gPyBpIDogMCk7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHdpbmRvdyBsaW5lcyBvY2N1cGllZCBieSBidWZmZXIgbGluZSAibG51bSIuCisgKi8KKyAgICBpbnQKK3BsaW5lcyhsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgcmV0dXJuIHBsaW5lc193aW4oY3Vyd2luLCBsbnVtLCBUUlVFKTsKK30KKworICAgIGludAorcGxpbmVzX3dpbih3cCwgbG51bSwgd2luaGVpZ2h0KQorICAgIHdpbl9UCSp3cDsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJd2luaGVpZ2h0OwkvKiB3aGVuIFRSVUUgbGltaXQgdG8gd2luZG93IGhlaWdodCAqLworeworI2lmIGRlZmluZWQoRkVBVF9ESUZGKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIC8qIENoZWNrIGZvciBmaWxsZXIgbGluZXMgYWJvdmUgdGhpcyBidWZmZXIgbGluZS4gIFdoZW4gZm9sZGVkIHRoZSByZXN1bHQKKyAgICAgKiBpcyBvbmUgbGluZSBhbnl3YXkuICovCisgICAgcmV0dXJuIHBsaW5lc193aW5fbm9maWxsKHdwLCBsbnVtLCB3aW5oZWlnaHQpICsgZGlmZl9jaGVja19maWxsKHdwLCBsbnVtKTsKK30KKworICAgIGludAorcGxpbmVzX25vZmlsbChsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgcmV0dXJuIHBsaW5lc193aW5fbm9maWxsKGN1cndpbiwgbG51bSwgVFJVRSk7Cit9CisKKyAgICBpbnQKK3BsaW5lc193aW5fbm9maWxsKHdwLCBsbnVtLCB3aW5oZWlnaHQpCisgICAgd2luX1QJKndwOworICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQl3aW5oZWlnaHQ7CS8qIHdoZW4gVFJVRSBsaW1pdCB0byB3aW5kb3cgaGVpZ2h0ICovCit7CisjZW5kaWYKKyAgICBpbnQJCWxpbmVzOworCisgICAgaWYgKCF3cC0+d19wX3dyYXApCisJcmV0dXJuIDE7CisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGlmICh3cC0+d193aWR0aCA9PSAwKQorCXJldHVybiAxOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICAvKiBBIGZvbGRlZCBsaW5lcyBpcyBoYW5kbGVkIGp1c3QgbGlrZSBhbiBlbXB0eSBsaW5lLiAqLworICAgIC8qIE5PVEU6IENhbGxlciBtdXN0IGhhbmRsZSBsaW5lcyB0aGF0IGFyZSBNQVlCRSBmb2xkZWQuICovCisgICAgaWYgKGxpbmVGb2xkZWQod3AsIGxudW0pID09IFRSVUUpCisJcmV0dXJuIDE7CisjZW5kaWYKKworICAgIGxpbmVzID0gcGxpbmVzX3dpbl9ub2ZvbGQod3AsIGxudW0pOworICAgIGlmICh3aW5oZWlnaHQgPiAwICYmIGxpbmVzID4gd3AtPndfaGVpZ2h0KQorCXJldHVybiAoaW50KXdwLT53X2hlaWdodDsKKyAgICByZXR1cm4gbGluZXM7Cit9CisKKy8qCisgKiBSZXR1cm4gbnVtYmVyIG9mIHdpbmRvdyBsaW5lcyBwaHlzaWNhbCBsaW5lICJsbnVtIiB3aWxsIG9jY3VweSBpbiB3aW5kb3cKKyAqICJ3cCIuICBEb2VzIG5vdCBjYXJlIGFib3V0IGZvbGRpbmcsICd3cmFwJyBvciAnZGlmZicuCisgKi8KKyAgICBpbnQKK3BsaW5lc193aW5fbm9mb2xkKHdwLCBsbnVtKQorICAgIHdpbl9UCSp3cDsKKyAgICBsaW5lbnJfVAlsbnVtOworeworICAgIGNoYXJfdQkqczsKKyAgICBsb25nCWNvbDsKKyAgICBpbnQJCXdpZHRoOworCisgICAgcyA9IG1sX2dldF9idWYod3AtPndfYnVmZmVyLCBsbnVtLCBGQUxTRSk7CisgICAgaWYgKCpzID09IE5VTCkJCS8qIGVtcHR5IGxpbmUgKi8KKwlyZXR1cm4gMTsKKyAgICBjb2wgPSB3aW5fbGluZXRhYnNpemUod3AsIHMsIChjb2xucl9UKU1BWENPTCk7CisKKyAgICAvKgorICAgICAqIElmIGxpc3QgbW9kZSBpcyBvbiwgdGhlbiB0aGUgJyQnIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgbWF5IHRha2UgdXAgb25lCisgICAgICogZXh0cmEgY29sdW1uLgorICAgICAqLworICAgIGlmICh3cC0+d19wX2xpc3QgJiYgbGNzX2VvbCAhPSBOVUwpCisJY29sICs9IDE7CisKKyAgICAvKgorICAgICAqIEFkZCBjb2x1bW4gb2Zmc2V0IGZvciAnbnVtYmVyJyBhbmQgJ2ZvbGRjb2x1bW4nLgorICAgICAqLworICAgIHdpZHRoID0gV19XSURUSCh3cCkgLSB3aW5fY29sX29mZih3cCk7CisgICAgaWYgKHdpZHRoIDw9IDApCisJcmV0dXJuIDMyMDAwOworICAgIGlmIChjb2wgPD0gd2lkdGgpCisJcmV0dXJuIDE7CisgICAgY29sIC09IHdpZHRoOworICAgIHdpZHRoICs9IHdpbl9jb2xfb2ZmMih3cCk7CisgICAgcmV0dXJuIChjb2wgKyAod2lkdGggLSAxKSkgLyB3aWR0aCArIDE7Cit9CisKKy8qCisgKiBMaWtlIHBsaW5lc193aW4oKSwgYnV0IG9ubHkgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIHNjcmVlbiBsaW5lcworICogdXNlZCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgbGluZSB0byB0aGUgZ2l2ZW4gY29sdW1uIG51bWJlci4KKyAqLworICAgIGludAorcGxpbmVzX3dpbl9jb2wod3AsIGxudW0sIGNvbHVtbikKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBsb25nCWNvbHVtbjsKK3sKKyAgICBsb25nCWNvbDsKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQlsaW5lcyA9IDA7CisgICAgaW50CQl3aWR0aDsKKworI2lmZGVmIEZFQVRfRElGRgorICAgIC8qIENoZWNrIGZvciBmaWxsZXIgbGluZXMgYWJvdmUgdGhpcyBidWZmZXIgbGluZS4gIFdoZW4gZm9sZGVkIHRoZSByZXN1bHQKKyAgICAgKiBpcyBvbmUgbGluZSBhbnl3YXkuICovCisgICAgbGluZXMgPSBkaWZmX2NoZWNrX2ZpbGwod3AsIGxudW0pOworI2VuZGlmCisKKyAgICBpZiAoIXdwLT53X3Bfd3JhcCkKKwlyZXR1cm4gbGluZXMgKyAxOworCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBpZiAod3AtPndfd2lkdGggPT0gMCkKKwlyZXR1cm4gbGluZXMgKyAxOworI2VuZGlmCisKKyAgICBzID0gbWxfZ2V0X2J1Zih3cC0+d19idWZmZXIsIGxudW0sIEZBTFNFKTsKKworICAgIGNvbCA9IDA7CisgICAgd2hpbGUgKCpzICE9IE5VTCAmJiAtLWNvbHVtbiA+PSAwKQorICAgIHsKKwljb2wgKz0gd2luX2xicl9jaGFydGFic2l6ZSh3cCwgcywgKGNvbG5yX1QpY29sLCBOVUxMKTsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgcyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHMpOworCWVsc2UKKyNlbmRpZgorCSAgICArK3M7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiAqcyBpcyBhIFRBQiwgYW5kIHRoZSBUQUIgaXMgbm90IGRpc3BsYXllZCBhcyBeSSwgYW5kIHdlJ3JlIG5vdCBpbgorICAgICAqIElOU0VSVCBtb2RlLCB0aGVuIGNvbCBtdXN0IGJlIGFkanVzdGVkIHNvIHRoYXQgaXQgcmVwcmVzZW50cyB0aGUgbGFzdAorICAgICAqIHNjcmVlbiBwb3NpdGlvbiBvZiB0aGUgVEFCLiAgVGhpcyBvbmx5IGZpeGVzIGFuIGVycm9yIHdoZW4gdGhlIFRBQiB3cmFwcworICAgICAqIGZyb20gb25lIHNjcmVlbiBsaW5lIHRvIHRoZSBuZXh0ICh3aGVuICdjb2x1bW5zJyBpcyBub3QgYSBtdWx0aXBsZSBvZgorICAgICAqICd0cycpIC0tIHdlYmIuCisgICAgICovCisgICAgaWYgKCpzID09IFRBQiAmJiAoU3RhdGUgJiBOT1JNQUwpICYmICghd3AtPndfcF9saXN0IHx8IGxjc190YWIxKSkKKwljb2wgKz0gd2luX2xicl9jaGFydGFic2l6ZSh3cCwgcywgKGNvbG5yX1QpY29sLCBOVUxMKSAtIDE7CisKKyAgICAvKgorICAgICAqIEFkZCBjb2x1bW4gb2Zmc2V0IGZvciAnbnVtYmVyJywgJ2ZvbGRjb2x1bW4nLCBldGMuCisgICAgICovCisgICAgd2lkdGggPSBXX1dJRFRIKHdwKSAtIHdpbl9jb2xfb2ZmKHdwKTsKKyAgICBpZiAod2lkdGggPiAwKQorICAgIHsKKwlsaW5lcyArPSAxOworCWlmIChjb2wgPj0gd2lkdGgpCisJICAgIGxpbmVzICs9IChjb2wgLSB3aWR0aCkgLyAod2lkdGggKyB3aW5fY29sX29mZjIod3ApKTsKKwlpZiAobGluZXMgPD0gd3AtPndfaGVpZ2h0KQorCSAgICByZXR1cm4gbGluZXM7CisgICAgfQorICAgIHJldHVybiAoaW50KSh3cC0+d19oZWlnaHQpOwkgICAgLyogbWF4aW11bSBsZW5ndGggKi8KK30KKworICAgIGludAorcGxpbmVzX21fd2luKHdwLCBmaXJzdCwgbGFzdCkKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJZmlyc3QsIGxhc3Q7Cit7CisgICAgaW50CQljb3VudCA9IDA7CisKKyAgICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkKKyAgICB7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJaW50CXg7CisKKwkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHJlYWxseSBmb2xkZWQgbGluZXMsIGJ1dCBhbHNvIGluY2x1ZGVkIGxpbmVzCisJICogdGhhdCBhcmUgbWF5YmUgZm9sZGVkLiAqLworCXggPSBmb2xkZWRDb3VudCh3cCwgZmlyc3QsIE5VTEwpOworCWlmICh4ID4gMCkKKwl7CisJICAgICsrY291bnQ7CSAgICAvKiBjb3VudCAxIGZvciAiKy0tIGZvbGRlZCIgbGluZSAqLworCSAgICBmaXJzdCArPSB4OworCX0KKwllbHNlCisjZW5kaWYKKwl7CisjaWZkZWYgRkVBVF9ESUZGCisJICAgIGlmIChmaXJzdCA9PSB3cC0+d190b3BsaW5lKQorCQljb3VudCArPSBwbGluZXNfd2luX25vZmlsbCh3cCwgZmlyc3QsIFRSVUUpICsgd3AtPndfdG9wZmlsbDsKKwkgICAgZWxzZQorI2VuZGlmCisJCWNvdW50ICs9IHBsaW5lc193aW4od3AsIGZpcnN0LCBUUlVFKTsKKwkgICAgKytmaXJzdDsKKwl9CisgICAgfQorICAgIHJldHVybiAoY291bnQpOworfQorCisjaWYgZGVmaW5lZChGRUFUX1ZSRVBMQUNFKSB8fCBkZWZpbmVkKEZFQVRfSU5TX0VYUEFORCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBJbnNlcnQgc3RyaW5nICJwIiBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uLiAgU3RvcHMgYXQgYSBOVUwgYnl0ZS4KKyAqIEhhbmRsZXMgUmVwbGFjZSBtb2RlIGFuZCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCisgKi8KKyAgICB2b2lkCitpbnNfYnl0ZXMocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgaW5zX2J5dGVzX2xlbihwLCAoaW50KVNUUkxFTihwKSk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9WUkVQTEFDRSkgfHwgZGVmaW5lZChGRUFUX0lOU19FWFBBTkQpIFwKKwl8fCBkZWZpbmVkKEZFQVRfQ09NTUVOVFMpIHx8IGRlZmluZWQoRkVBVF9NQllURSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBJbnNlcnQgc3RyaW5nICJwIiB3aXRoIGxlbmd0aCAibGVuIiBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uLgorICogSGFuZGxlcyBSZXBsYWNlIG1vZGUgYW5kIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKyAqLworICAgIHZvaWQKK2luc19ieXRlc19sZW4ocCwgbGVuKQorICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWxlbjsKK3sKKyAgICBpbnQJCWk7CisjIGlmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCW47CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IG4pCisgICAgeworCW4gPSAoKm1iX3B0cjJsZW5fY2hlY2spKHAgKyBpKTsKKwlpbnNfY2hhcl9ieXRlcyhwICsgaSwgbik7CisgICAgfQorIyBlbHNlCisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQorCWluc19jaGFyKHBbaV0pOworIyBlbmRpZgorfQorI2VuZGlmCisKKy8qCisgKiBJbnNlcnQgb3IgcmVwbGFjZSBhIHNpbmdsZSBjaGFyYWN0ZXIgYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4KKyAqIFdoZW4gaW4gUkVQTEFDRSBvciBWUkVQTEFDRSBtb2RlLCByZXBsYWNlIGFueSBleGlzdGluZyBjaGFyYWN0ZXIuCisgKiBDYWxsZXIgbXVzdCBoYXZlIHByZXBhcmVkIGZvciB1bmRvLgorICogRm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycyB3ZSBnZXQgdGhlIHdob2xlIGNoYXJhY3RlciwgdGhlIGNhbGxlciBtdXN0CisgKiBjb252ZXJ0IGJ5dGVzIHRvIGEgY2hhcmFjdGVyLgorICovCisgICAgdm9pZAoraW5zX2NoYXIoYykKKyAgICBpbnQJCWM7Cit7CisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIGNoYXJfdQlidWZbTUJfTUFYQllURVNdOworICAgIGludAkJbjsKKworICAgIG4gPSAoKm1iX2NoYXIyYnl0ZXMpKGMsIGJ1Zik7CisKKyAgICAvKiBXaGVuICJjIiBpcyAweDEwMCwgMHgyMDAsIGV0Yy4gd2UgZG9uJ3Qgd2FudCB0byBpbnNlcnQgYSBOVUwgYnl0ZS4KKyAgICAgKiBIYXBwZW5zIGZvciBDVFJMLVZ1OTkwMC4gKi8KKyAgICBpZiAoYnVmWzBdID09IDApCisJYnVmWzBdID0gJ1xuJzsKKworICAgIGluc19jaGFyX2J5dGVzKGJ1Ziwgbik7Cit9CisKKyAgICB2b2lkCitpbnNfY2hhcl9ieXRlcyhidWYsIGNoYXJsZW4pCisgICAgY2hhcl91CSpidWY7CisgICAgaW50CQljaGFybGVuOworeworICAgIGludAkJYyA9IGJ1ZlswXTsKKyAgICBpbnQJCWwsIGo7CisjZW5kaWYKKyAgICBpbnQJCW5ld2xlbjsJCS8qIG5yIG9mIGJ5dGVzIGluc2VydGVkICovCisgICAgaW50CQlvbGRsZW47CQkvKiBuciBvZiBieXRlcyBkZWxldGVkICgwIHdoZW4gbm90IHJlcGxhY2luZykgKi8KKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSpuZXdwOworICAgIGNoYXJfdQkqb2xkcDsKKyAgICBpbnQJCWxpbmVsZW47CS8qIGxlbmd0aCBvZiBvbGQgbGluZSBpbmNsdWRpbmcgTlVMICovCisgICAgY29sbnJfVAljb2w7CisgICAgbGluZW5yX1QJbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICBpbnQJCWk7CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgLyogQnJlYWsgdGFicyBpZiBuZWVkZWQuICovCisgICAgaWYgKHZpcnR1YWxfYWN0aXZlKCkgJiYgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPiAwKQorCWNvbGFkdmFuY2VfZm9yY2UoZ2V0dmlzY29sKCkpOworI2VuZGlmCisKKyAgICBjb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyAgICBvbGRwID0gbWxfZ2V0KGxudW0pOworICAgIGxpbmVsZW4gPSAoaW50KVNUUkxFTihvbGRwKSArIDE7CisKKyAgICAvKiBUaGUgbGVuZ3RocyBkZWZhdWx0IHRvIHRoZSB2YWx1ZXMgZm9yIHdoZW4gbm90IHJlcGxhY2luZy4gKi8KKyAgICBvbGRsZW4gPSAwOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBuZXdsZW4gPSBjaGFybGVuOworI2Vsc2UKKyAgICBuZXdsZW4gPSAxOworI2VuZGlmCisKKyAgICBpZiAoU3RhdGUgJiBSRVBMQUNFX0ZMQUcpCisgICAgeworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwlpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQorCXsKKwkgICAgY29sbnJfVAluZXdfdmNvbCA9IDA7ICAgLyogaW5pdCBmb3IgR0NDICovCisJICAgIGNvbG5yX1QJdmNvbDsKKwkgICAgaW50CQlvbGRfbGlzdDsKKyNpZm5kZWYgRkVBVF9NQllURQorCSAgICBjaGFyX3UJYnVmWzJdOworI2VuZGlmCisKKwkgICAgLyoKKwkgICAgICogRGlzYWJsZSAnbGlzdCcgdGVtcG9yYXJpbHksIHVubGVzcyAnY3BvJyBjb250YWlucyB0aGUgJ0wnIGZsYWcuCisJICAgICAqIFJldHVybnMgdGhlIG9sZCB2YWx1ZSBvZiBsaXN0LCBzbyB3aGVuIGZpbmlzaGVkLAorCSAgICAgKiBjdXJ3aW4tPndfcF9saXN0IHNob3VsZCBiZSBzZXQgYmFjayB0byB0aGlzLgorCSAgICAgKi8KKwkgICAgb2xkX2xpc3QgPSBjdXJ3aW4tPndfcF9saXN0OworCSAgICBpZiAob2xkX2xpc3QgJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0xJU1RXTSkgPT0gTlVMTCkKKwkJY3Vyd2luLT53X3BfbGlzdCA9IEZBTFNFOworCisJICAgIC8qCisJICAgICAqIEluIHZpcnR1YWwgcmVwbGFjZSBtb2RlIGVhY2ggY2hhcmFjdGVyIG1heSByZXBsYWNlIG9uZSBvciBtb3JlCisJICAgICAqIGNoYXJhY3RlcnMgKHplcm8gaWYgaXQncyBhIFRBQikuICBDb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvCisJICAgICAqIGJlIGRlbGV0ZWQgdG8gbWFrZSByb29tIGZvciB0aGUgbmV3IGNoYXJhY3RlciwgY291bnRpbmcgc2NyZWVuCisJICAgICAqIGNlbGxzLiAgTWF5IHJlc3VsdCBpbiBhZGRpbmcgc3BhY2VzIHRvIGZpbGwgYSBnYXAuCisJICAgICAqLworCSAgICBnZXR2Y29sKGN1cndpbiwgJmN1cndpbi0+d19jdXJzb3IsIE5VTEwsICZ2Y29sLCBOVUxMKTsKKyNpZm5kZWYgRkVBVF9NQllURQorCSAgICBidWZbMF0gPSBjOworCSAgICBidWZbMV0gPSBOVUw7CisjZW5kaWYKKwkgICAgbmV3X3Zjb2wgPSB2Y29sICsgY2hhcnRhYnNpemUoYnVmLCB2Y29sKTsKKwkgICAgd2hpbGUgKG9sZHBbY29sICsgb2xkbGVuXSAhPSBOVUwgJiYgdmNvbCA8IG5ld192Y29sKQorCSAgICB7CisJCXZjb2wgKz0gY2hhcnRhYnNpemUob2xkcCArIGNvbCArIG9sZGxlbiwgdmNvbCk7CisJCS8qIERvbid0IG5lZWQgdG8gcmVtb3ZlIGEgVEFCIHRoYXQgdGFrZXMgdXMgdG8gdGhlIHJpZ2h0CisJCSAqIHBvc2l0aW9uLiAqLworCQlpZiAodmNvbCA+IG5ld192Y29sICYmIG9sZHBbY29sICsgb2xkbGVuXSA9PSBUQUIpCisJCSAgICBicmVhazsKKyNpZmRlZiBGRUFUX01CWVRFCisJCW9sZGxlbiArPSAoKm1iX3B0cjJsZW5fY2hlY2spKG9sZHAgKyBjb2wgKyBvbGRsZW4pOworI2Vsc2UKKwkJKytvbGRsZW47CisjZW5kaWYKKwkJLyogRGVsZXRlZCBhIGJpdCB0b28gbXVjaCwgaW5zZXJ0IHNwYWNlcy4gKi8KKwkJaWYgKHZjb2wgPiBuZXdfdmNvbCkKKwkJICAgIG5ld2xlbiArPSB2Y29sIC0gbmV3X3Zjb2w7CisJICAgIH0KKwkgICAgY3Vyd2luLT53X3BfbGlzdCA9IG9sZF9saXN0OworCX0KKwllbHNlCisjZW5kaWYKKwkgICAgaWYgKG9sZHBbY29sXSAhPSBOVUwpCisJeworCSAgICAvKiBub3JtYWwgcmVwbGFjZSAqLworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgb2xkbGVuID0gKCptYl9wdHIybGVuX2NoZWNrKShvbGRwICsgY29sKTsKKyNlbHNlCisJICAgIG9sZGxlbiA9IDE7CisjZW5kaWYKKwl9CisKKworCS8qIFB1c2ggdGhlIHJlcGxhY2VkIGJ5dGVzIG9udG8gdGhlIHJlcGxhY2Ugc3RhY2ssIHNvIHRoYXQgdGhleSBjYW4gYmUKKwkgKiBwdXQgYmFjayB3aGVuIEJTIGlzIHVzZWQuICBUaGUgYnl0ZXMgb2YgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciBhcmUKKwkgKiBkb25lIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzbyB0aGF0IHRoZSBmaXJzdCBieXRlIGlzIHBvcHBlZCBvZmYKKwkgKiBmaXJzdCAoaXQgdGVsbHMgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBjaGFyYWN0ZXIpLiAqLworCXJlcGxhY2VfcHVzaChOVUwpOworCWZvciAoaSA9IDA7IGkgPCBvbGRsZW47ICsraSkKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBsID0gKCptYl9wdHIybGVuX2NoZWNrKShvbGRwICsgY29sICsgaSkgLSAxOworCSAgICBmb3IgKGogPSBsOyBqID49IDA7IC0taikKKwkJcmVwbGFjZV9wdXNoKG9sZHBbY29sICsgaSArIGpdKTsKKwkgICAgaSArPSBsOworI2Vsc2UKKwkgICAgcmVwbGFjZV9wdXNoKG9sZHBbY29sICsgaV0pOworI2VuZGlmCisJfQorICAgIH0KKworICAgIG5ld3AgPSBhbGxvY19jaGVjaygodW5zaWduZWQpKGxpbmVsZW4gKyBuZXdsZW4gLSBvbGRsZW4pKTsKKyAgICBpZiAobmV3cCA9PSBOVUxMKQorCXJldHVybjsKKworICAgIC8qIENvcHkgYnl0ZXMgYmVmb3JlIHRoZSBjdXJzb3IuICovCisgICAgaWYgKGNvbCA+IDApCisJbWNoX21lbW1vdmUobmV3cCwgb2xkcCwgKHNpemVfdCljb2wpOworCisgICAgLyogQ29weSBieXRlcyBhZnRlciB0aGUgY2hhbmdlZCBjaGFyYWN0ZXIocykuICovCisgICAgcCA9IG5ld3AgKyBjb2w7CisgICAgbWNoX21lbW1vdmUocCArIG5ld2xlbiwgb2xkcCArIGNvbCArIG9sZGxlbiwKKwkJCQkJICAgIChzaXplX3QpKGxpbmVsZW4gLSBjb2wgLSBvbGRsZW4pKTsKKworICAgIC8qIEluc2VydCBvciBvdmVyd3JpdGUgdGhlIG5ldyBjaGFyYWN0ZXIuICovCisjaWZkZWYgRkVBVF9NQllURQorICAgIG1jaF9tZW1tb3ZlKHAsIGJ1ZiwgY2hhcmxlbik7CisgICAgaSA9IGNoYXJsZW47CisjZWxzZQorICAgICpwID0gYzsKKyAgICBpID0gMTsKKyNlbmRpZgorCisgICAgLyogRmlsbCB3aXRoIHNwYWNlcyB3aGVuIG5lY2Vzc2FyeS4gKi8KKyAgICB3aGlsZSAoaSA8IG5ld2xlbikKKwlwW2krK10gPSAnICc7CisKKyAgICAvKiBSZXBsYWNlIHRoZSBsaW5lIGluIHRoZSBidWZmZXIuICovCisgICAgbWxfcmVwbGFjZShsbnVtLCBuZXdwLCBGQUxTRSk7CisKKyAgICAvKiBtYXJrIHRoZSBidWZmZXIgYXMgY2hhbmdlZCBhbmQgcHJlcGFyZSBmb3IgZGlzcGxheWluZyAqLworICAgIGNoYW5nZWRfYnl0ZXMobG51bSwgY29sKTsKKworICAgIC8qCisgICAgICogSWYgd2UncmUgaW4gSW5zZXJ0IG9yIFJlcGxhY2UgbW9kZSBhbmQgJ3Nob3dtYXRjaCcgaXMgc2V0LCB0aGVuIGJyaWVmbHkKKyAgICAgKiBzaG93IHRoZSBtYXRjaCBmb3IgcmlnaHQgcGFyZW5zIGFuZCBicmFjZXMuCisgICAgICovCisgICAgaWYgKHBfc20gJiYgKFN0YXRlICYgSU5TRVJUKQorCSAgICAmJiBtc2dfc2lsZW50ID09IDAKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgICYmIGNoYXJsZW4gPT0gMQorI2VuZGlmCisgICAgICAgKQorCXNob3dtYXRjaChjKTsKKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgaWYgKCFwX3JpIHx8IChTdGF0ZSAmIFJFUExBQ0VfRkxBRykpCisjZW5kaWYKKyAgICB7CisJLyogTm9ybWFsIGluc2VydDogbW92ZSBjdXJzb3IgcmlnaHQgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisJY3Vyd2luLT53X2N1cnNvci5jb2wgKz0gY2hhcmxlbjsKKyNlbHNlCisJKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyNlbmRpZgorICAgIH0KKyAgICAvKgorICAgICAqIFRPRE86IHNob3VsZCB0cnkgdG8gdXBkYXRlIHdfcm93IGhlcmUsIHRvIGF2b2lkIHJlY29tcHV0aW5nIGl0IGxhdGVyLgorICAgICAqLworfQorCisvKgorICogSW5zZXJ0IGEgc3RyaW5nIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24uCisgKiBOb3RlOiBEb2VzIE5PVCBoYW5kbGUgUmVwbGFjZSBtb2RlLgorICogQ2FsbGVyIG11c3QgaGF2ZSBwcmVwYXJlZCBmb3IgdW5kby4KKyAqLworICAgIHZvaWQKK2luc19zdHIocykKKyAgICBjaGFyX3UJKnM7Cit7CisgICAgY2hhcl91CSpvbGRwLCAqbmV3cDsKKyAgICBpbnQJCW5ld2xlbiA9IChpbnQpU1RSTEVOKHMpOworICAgIGludAkJb2xkbGVuOworICAgIGNvbG5yX1QJY29sOworICAgIGxpbmVucl9UCWxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgaWYgKHZpcnR1YWxfYWN0aXZlKCkgJiYgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPiAwKQorCWNvbGFkdmFuY2VfZm9yY2UoZ2V0dmlzY29sKCkpOworI2VuZGlmCisKKyAgICBjb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyAgICBvbGRwID0gbWxfZ2V0KGxudW0pOworICAgIG9sZGxlbiA9IChpbnQpU1RSTEVOKG9sZHApOworCisgICAgbmV3cCA9IGFsbG9jX2NoZWNrKCh1bnNpZ25lZCkob2xkbGVuICsgbmV3bGVuICsgMSkpOworICAgIGlmIChuZXdwID09IE5VTEwpCisJcmV0dXJuOworICAgIGlmIChjb2wgPiAwKQorCW1jaF9tZW1tb3ZlKG5ld3AsIG9sZHAsIChzaXplX3QpY29sKTsKKyAgICBtY2hfbWVtbW92ZShuZXdwICsgY29sLCBzLCAoc2l6ZV90KW5ld2xlbik7CisgICAgbWNoX21lbW1vdmUobmV3cCArIGNvbCArIG5ld2xlbiwgb2xkcCArIGNvbCwgKHNpemVfdCkob2xkbGVuIC0gY29sICsgMSkpOworICAgIG1sX3JlcGxhY2UobG51bSwgbmV3cCwgRkFMU0UpOworICAgIGNoYW5nZWRfYnl0ZXMobG51bSwgY29sKTsKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCArPSBuZXdsZW47Cit9CisKKy8qCisgKiBEZWxldGUgb25lIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLgorICogSWYgImZpeHBvcyIgaXMgVFJVRSwgZG9uJ3QgbGVhdmUgdGhlIGN1cnNvciBvbiB0aGUgTlVMIGFmdGVyIHRoZSBsaW5lLgorICogQ2FsbGVyIG11c3QgaGF2ZSBwcmVwYXJlZCBmb3IgdW5kby4KKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK2RlbF9jaGFyKGZpeHBvcykKKyAgICBpbnQJCWZpeHBvczsKK3sKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGhhc19tYnl0ZSkKKyAgICB7CisJLyogTWFrZSBzdXJlIHRoZSBjdXJzb3IgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgY2hhcmFjdGVyLiAqLworCW1iX2FkanVzdF9jdXJzb3IoKTsKKwlpZiAoKm1sX2dldF9jdXJzb3IoKSA9PSBOVUwpCisJICAgIHJldHVybiBGQUlMOworCXJldHVybiBkZWxfY2hhcnMoMUwsIGZpeHBvcyk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGRlbF9ieXRlcygxTCwgZml4cG9zKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9NQllURSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBMaWtlIGRlbF9ieXRlcygpLCBidXQgZGVsZXRlIGNoYXJhY3RlcnMgaW5zdGVhZCBvZiBieXRlcy4KKyAqLworICAgIGludAorZGVsX2NoYXJzKGNvdW50LCBmaXhwb3MpCisgICAgbG9uZwljb3VudDsKKyAgICBpbnQJCWZpeHBvczsKK3sKKyAgICBsb25nCWJ5dGVzID0gMDsKKyAgICBsb25nCWk7CisgICAgY2hhcl91CSpwOworICAgIGludAkJbDsKKworICAgIHAgPSBtbF9nZXRfY3Vyc29yKCk7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50ICYmICpwICE9IE5VTDsgKytpKQorICAgIHsKKwlsID0gKCptYl9wdHIybGVuX2NoZWNrKShwKTsKKwlieXRlcyArPSBsOworCXAgKz0gbDsKKyAgICB9CisgICAgcmV0dXJuIGRlbF9ieXRlcyhieXRlcywgZml4cG9zKTsKK30KKyNlbmRpZgorCisvKgorICogRGVsZXRlICJjb3VudCIgYnl0ZXMgdW5kZXIgdGhlIGN1cnNvci4KKyAqIElmICJmaXhwb3MiIGlzIFRSVUUsIGRvbid0IGxlYXZlIHRoZSBjdXJzb3Igb24gdGhlIE5VTCBhZnRlciB0aGUgbGluZS4KKyAqIENhbGxlciBtdXN0IGhhdmUgcHJlcGFyZWQgZm9yIHVuZG8uCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CitkZWxfYnl0ZXMoY291bnQsIGZpeHBvcykKKyAgICBsb25nCWNvdW50OworICAgIGludAkJZml4cG9zOworeworICAgIGNoYXJfdQkqb2xkcCwgKm5ld3A7CisgICAgY29sbnJfVAlvbGRsZW47CisgICAgbGluZW5yX1QJbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICBjb2xucl9UCWNvbCA9IGN1cndpbi0+d19jdXJzb3IuY29sOworICAgIGludAkJd2FzX2FsbG9jZWQ7CisgICAgbG9uZwltb3ZlbGVuOworCisgICAgb2xkcCA9IG1sX2dldChsbnVtKTsKKyAgICBvbGRsZW4gPSAoaW50KVNUUkxFTihvbGRwKTsKKworICAgIC8qCisgICAgICogQ2FuJ3QgZG8gYW55dGhpbmcgd2hlbiB0aGUgY3Vyc29yIGlzIG9uIHRoZSBOVUwgYWZ0ZXIgdGhlIGxpbmUuCisgICAgICovCisgICAgaWYgKGNvbCA+PSBvbGRsZW4pCisJcmV0dXJuIEZBSUw7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyogSWYgJ2RlbGNvbWJpbmUnIGlzIHNldCBhbmQgZGVsZXRpbmcgKGxlc3MgdGhhbikgb25lIGNoYXJhY3Rlciwgb25seQorICAgICAqIGRlbGV0ZSB0aGUgbGFzdCBjb21iaW5pbmcgY2hhcmFjdGVyLiAqLworICAgIGlmIChwX2RlY28gJiYgZW5jX3V0ZjggJiYgKCptYl9wdHIybGVuX2NoZWNrKShvbGRwICsgY29sKSA8PSBjb3VudCkKKyAgICB7CisJaW50CWMxLCBjMjsKKwlpbnQJbjsKKworCSh2b2lkKXV0ZmNfcHRyMmNoYXIob2xkcCArIGNvbCwgJmMxLCAmYzIpOworCWlmIChjMSAhPSBOVUwpCisJeworCSAgICAvKiBGaW5kIHRoZSBsYXN0IGNvbXBvc2luZyBjaGFyLCB0aGVyZSBjYW4gYmUgc2V2ZXJhbC4gKi8KKwkgICAgbiA9IGNvbDsKKwkgICAgZG8KKwkgICAgeworCQljb2wgPSBuOworCQljb3VudCA9IHV0Zl9wdHIybGVuX2NoZWNrKG9sZHAgKyBuKTsKKwkJbiArPSBjb3VudDsKKwkgICAgfSB3aGlsZSAoVVRGX0NPTVBPU0lOR0xJS0Uob2xkcCArIGNvbCwgb2xkcCArIG4pKTsKKwkgICAgZml4cG9zID0gMDsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIFdoZW4gY291bnQgaXMgdG9vIGJpZywgcmVkdWNlIGl0LgorICAgICAqLworICAgIG1vdmVsZW4gPSAobG9uZylvbGRsZW4gLSAobG9uZyljb2wgLSBjb3VudCArIDE7IC8qIGluY2x1ZGVzIHRyYWlsaW5nIE5VTCAqLworICAgIGlmIChtb3ZlbGVuIDw9IDEpCisgICAgeworCS8qCisJICogSWYgd2UganVzdCB0b29rIG9mZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSBub24tYmxhbmsgbGluZSwgYW5kCisJICogZml4cG9zIGlzIFRSVUUsIHdlIGRvbid0IHdhbnQgdG8gZW5kIHVwIHBvc2l0aW9uZWQgYXQgdGhlIE5VTC4KKwkgKi8KKwlpZiAoY29sID4gMCAmJiBmaXhwb3MpCisJeworCSAgICAtLWN1cndpbi0+d19jdXJzb3IuY29sOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkgICAgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworI2VuZGlmCisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQljdXJ3aW4tPndfY3Vyc29yLmNvbCAtPQorCQkJICAgICgqbWJfaGVhZF9vZmYpKG9sZHAsIG9sZHAgKyBjdXJ3aW4tPndfY3Vyc29yLmNvbCk7CisjZW5kaWYKKwl9CisJY291bnQgPSBvbGRsZW4gLSBjb2w7CisJbW92ZWxlbiA9IDE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB0aGUgb2xkIGxpbmUgaGFzIGJlZW4gYWxsb2NhdGVkIHRoZSBkZWxldGlvbiBjYW4gYmUgZG9uZSBpbiB0aGUKKyAgICAgKiBleGlzdGluZyBsaW5lLiBPdGhlcndpc2UgYSBuZXcgbGluZSBoYXMgdG8gYmUgYWxsb2NhdGVkCisgICAgICovCisgICAgd2FzX2FsbG9jZWQgPSBtbF9saW5lX2FsbG9jZWQoKTsJICAgIC8qIGNoZWNrIGlmIG9sZHAgd2FzIGFsbG9jYXRlZCAqLworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIGlmICh3YXNfYWxsb2NlZCAmJiB1c2luZ05ldGJlYW5zKQorCW5ldGJlYW5zX3JlbW92ZWQoY3VyYnVmLCBsbnVtLCBjb2wsIGNvdW50KTsKKyAgICAvKiBlbHNlIGlzIGhhbmRsZWQgYnkgbWxfcmVwbGFjZSgpICovCisjZW5kaWYKKyAgICBpZiAod2FzX2FsbG9jZWQpCisJbmV3cCA9IG9sZHA7CQkJICAgIC8qIHVzZSBzYW1lIGFsbG9jYXRlZCBtZW1vcnkgKi8KKyAgICBlbHNlCisgICAgewkJCQkJICAgIC8qIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgbGluZSAqLworCW5ld3AgPSBhbGxvYygodW5zaWduZWQpKG9sZGxlbiArIDEgLSBjb3VudCkpOworCWlmIChuZXdwID09IE5VTEwpCisJICAgIHJldHVybiBGQUlMOworCW1jaF9tZW1tb3ZlKG5ld3AsIG9sZHAsIChzaXplX3QpY29sKTsKKyAgICB9CisgICAgbWNoX21lbW1vdmUobmV3cCArIGNvbCwgb2xkcCArIGNvbCArIGNvdW50LCAoc2l6ZV90KW1vdmVsZW4pOworICAgIGlmICghd2FzX2FsbG9jZWQpCisJbWxfcmVwbGFjZShsbnVtLCBuZXdwLCBGQUxTRSk7CisKKyAgICAvKiBtYXJrIHRoZSBidWZmZXIgYXMgY2hhbmdlZCBhbmQgcHJlcGFyZSBmb3IgZGlzcGxheWluZyAqLworICAgIGNoYW5nZWRfYnl0ZXMobG51bSwgY3Vyd2luLT53X2N1cnNvci5jb2wpOworCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogRGVsZXRlIGZyb20gY3Vyc29yIHRvIGVuZCBvZiBsaW5lLgorICogQ2FsbGVyIG11c3QgaGF2ZSBwcmVwYXJlZCBmb3IgdW5kby4KKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK3RydW5jYXRlX2xpbmUoZml4cG9zKQorICAgIGludAkJZml4cG9zOwkgICAgLyogaWYgVFJVRSBmaXggdGhlIGN1cnNvciBwb3NpdGlvbiB3aGVuIGRvbmUgKi8KK3sKKyAgICBjaGFyX3UJKm5ld3A7CisgICAgbGluZW5yX1QJbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICBjb2xucl9UCWNvbCA9IGN1cndpbi0+d19jdXJzb3IuY29sOworCisgICAgaWYgKGNvbCA9PSAwKQorCW5ld3AgPSB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopIiIpOworICAgIGVsc2UKKwluZXdwID0gdmltX3N0cm5zYXZlKG1sX2dldChsbnVtKSwgY29sKTsKKworICAgIGlmIChuZXdwID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBtbF9yZXBsYWNlKGxudW0sIG5ld3AsIEZBTFNFKTsKKworICAgIC8qIG1hcmsgdGhlIGJ1ZmZlciBhcyBjaGFuZ2VkIGFuZCBwcmVwYXJlIGZvciBkaXNwbGF5aW5nICovCisgICAgY2hhbmdlZF9ieXRlcyhsbnVtLCBjdXJ3aW4tPndfY3Vyc29yLmNvbCk7CisKKyAgICAvKgorICAgICAqIElmICJmaXhwb3MiIGlzIFRSVUUgd2UgZG9uJ3Qgd2FudCB0byBlbmQgdXAgcG9zaXRpb25lZCBhdCB0aGUgTlVMLgorICAgICAqLworICAgIGlmIChmaXhwb3MgJiYgY3Vyd2luLT53X2N1cnNvci5jb2wgPiAwKQorCS0tY3Vyd2luLT53X2N1cnNvci5jb2w7CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBEZWxldGUgIm5saW5lcyIgbGluZXMgYXQgdGhlIGN1cnNvci4KKyAqIFNhdmVzIHRoZSBsaW5lcyBmb3IgdW5kbyBmaXJzdCBpZiAidW5kbyIgaXMgVFJVRS4KKyAqLworICAgIHZvaWQKK2RlbF9saW5lcyhubGluZXMsIHVuZG8pCisgICAgbG9uZwlubGluZXM7CQkvKiBudW1iZXIgb2YgbGluZXMgdG8gZGVsZXRlICovCisgICAgaW50CQl1bmRvOwkJLyogaWYgVFJVRSwgcHJlcGFyZSBmb3IgdW5kbyAqLworeworICAgIGxvbmcJbjsKKworICAgIGlmIChubGluZXMgPD0gMCkKKwlyZXR1cm47CisKKyAgICAvKiBzYXZlIHRoZSBkZWxldGVkIGxpbmVzIGZvciB1bmRvICovCisgICAgaWYgKHVuZG8gJiYgdV9zYXZlZGVsKGN1cndpbi0+d19jdXJzb3IubG51bSwgbmxpbmVzKSA9PSBGQUlMKQorCXJldHVybjsKKworICAgIGZvciAobiA9IDA7IG4gPCBubGluZXM7ICkKKyAgICB7CisJaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZKQkgICAgLyogbm90aGluZyB0byBkZWxldGUgKi8KKwkgICAgYnJlYWs7CisKKwltbF9kZWxldGUoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBUUlVFKTsKKwkrK247CisKKwkvKiBJZiB3ZSBkZWxldGUgdGhlIGxhc3QgbGluZSBpbiB0aGUgZmlsZSwgc3RvcCAqLworCWlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkgICAgYnJlYWs7CisgICAgfQorICAgIC8qIGFkanVzdCBtYXJrcywgbWFyayB0aGUgYnVmZmVyIGFzIGNoYW5nZWQgYW5kIHByZXBhcmUgZm9yIGRpc3BsYXlpbmcgKi8KKyAgICBkZWxldGVkX2xpbmVzX21hcmsoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBuKTsKKworICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKyAgICBjaGVja19jdXJzb3JfbG51bSgpOworfQorCisgICAgaW50CitnY2hhcl9wb3MocG9zKQorICAgIHBvc19UICpwb3M7Cit7CisgICAgY2hhcl91CSpwdHIgPSBtbF9nZXRfcG9zKHBvcyk7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGhhc19tYnl0ZSkKKwlyZXR1cm4gKCptYl9wdHIyY2hhcikocHRyKTsKKyNlbmRpZgorICAgIHJldHVybiAoaW50KSpwdHI7Cit9CisKKyAgICBpbnQKK2djaGFyX2N1cnNvcigpCit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChoYXNfbWJ5dGUpCisJcmV0dXJuICgqbWJfcHRyMmNoYXIpKG1sX2dldF9jdXJzb3IoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gKGludCkqbWxfZ2V0X2N1cnNvcigpOworfQorCisvKgorICogV3JpdGUgYSBjaGFyYWN0ZXIgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorICogSXQgaXMgZGlyZWN0bHkgd3JpdHRlbiBpbnRvIHRoZSBibG9jay4KKyAqLworICAgIHZvaWQKK3BjaGFyX2N1cnNvcihjKQorICAgIGludCBjOworeworICAgICoobWxfZ2V0X2J1ZihjdXJidWYsIGN1cndpbi0+d19jdXJzb3IubG51bSwgVFJVRSkKKwkJCQkJCSAgKyBjdXJ3aW4tPndfY3Vyc29yLmNvbCkgPSBjOworfQorCisjaWYgMCAvKiBub3QgdXNlZCAqLworLyoKKyAqIFB1dCAqcG9zIGF0IGVuZCBvZiBjdXJyZW50IGJ1ZmZlcgorICovCisgICAgdm9pZAorZ290b19lbmRvZmJ1Zihwb3MpCisgICAgcG9zX1QgICAgKnBvczsKK3sKKyAgICBjaGFyX3UgICpwOworCisgICAgcG9zLT5sbnVtID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisgICAgcG9zLT5jb2wgPSAwOworICAgIHAgPSBtbF9nZXQocG9zLT5sbnVtKTsKKyAgICB3aGlsZSAoKnArKykKKwkrK3Bvcy0+Y29sOworfQorI2VuZGlmCisKKy8qCisgKiBXaGVuIGV4dHJhID09IDA6IFJldHVybiBUUlVFIGlmIHRoZSBjdXJzb3IgaXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdAorICoJCSAgICBub24tYmxhbmsgaW4gdGhlIGxpbmUuCisgKiBXaGVuIGV4dHJhID09IDE6IFJldHVybiBUUlVFIGlmIHRoZSBjdXJzb3IgaXMgYmVmb3JlIHRoZSBmaXJzdCBub24tYmxhbmsgaW4KKyAqCQkgICAgdGhlIGxpbmUuCisgKi8KKyAgICBpbnQKK2luaW5kZW50KGV4dHJhKQorICAgIGludAkgICAgZXh0cmE7Cit7CisgICAgY2hhcl91CSpwdHI7CisgICAgY29sbnJfVAljb2w7CisKKyAgICBmb3IgKGNvbCA9IDAsIHB0ciA9IG1sX2dldF9jdXJsaW5lKCk7IHZpbV9pc3doaXRlKCpwdHIpOyArK2NvbCkKKwkrK3B0cjsKKyAgICBpZiAoY29sID49IGN1cndpbi0+d19jdXJzb3IuY29sICsgZXh0cmEpCisJcmV0dXJuIFRSVUU7CisgICAgZWxzZQorCXJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFNraXAgdG8gbmV4dCBwYXJ0IG9mIGFuIG9wdGlvbiBhcmd1bWVudDogU2tpcCBzcGFjZSBhbmQgY29tbWEuCisgKi8KKyAgICBjaGFyX3UgKgorc2tpcF90b19vcHRpb25fcGFydChwKQorICAgIGNoYXJfdSAgKnA7Cit7CisgICAgaWYgKCpwID09ICcsJykKKwkrK3A7CisgICAgd2hpbGUgKCpwID09ICcgJykKKwkrK3A7CisgICAgcmV0dXJuIHA7Cit9CisKKy8qCisgKiBjaGFuZ2VkKCkgaXMgY2FsbGVkIHdoZW4gc29tZXRoaW5nIGluIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBjaGFuZ2VkLgorICoKKyAqIE1vc3Qgb2Z0ZW4gY2FsbGVkIHRocm91Z2ggY2hhbmdlZF9ieXRlcygpIGFuZCBjaGFuZ2VkX2xpbmVzKCksIHdoaWNoIGFsc28KKyAqIG1hcmsgdGhlIGFyZWEgb2YgdGhlIGRpc3BsYXkgdG8gYmUgcmVkcmF3bi4KKyAqLworICAgIHZvaWQKK2NoYW5nZWQoKQoreworI2lmIGRlZmluZWQoRkVBVF9YSU0pICYmIGRlZmluZWQoRkVBVF9HVUlfR1RLKQorICAgIC8qIFRoZSB0ZXh0IG9mIHRoZSBwcmVlZGl0aW5nIGFyZWEgaXMgaW5zZXJ0ZWQsIGJ1dCB0aGlzIGRvZXNuJ3QKKyAgICAgKiBtZWFuIGEgY2hhbmdlIG9mIHRoZSBidWZmZXIgeWV0LiAgVGhhdCBpcyBkZWxheWVkIHVudGlsIHRoZQorICAgICAqIHRleHQgaXMgY29tbWl0dGVkLiAodGhpcyBtZWFucyBwcmVlZGl0IGJlY29tZXMgZW1wdHkpICovCisgICAgaWYgKGltX2lzX3ByZWVkaXRpbmcoKSAmJiAheGltX2NoYW5nZWRfd2hpbGVfcHJlZWRpdGluZykKKwlyZXR1cm47CisgICAgeGltX2NoYW5nZWRfd2hpbGVfcHJlZWRpdGluZyA9IEZBTFNFOworI2VuZGlmCisKKyAgICBpZiAoIWN1cmJ1Zi0+Yl9jaGFuZ2VkKQorICAgIHsKKwlpbnQJc2F2ZV9tc2dfc2Nyb2xsID0gbXNnX3Njcm9sbDsKKworCWNoYW5nZV93YXJuaW5nKDApOworCS8qIENyZWF0ZSBhIHN3YXAgZmlsZSBpZiB0aGF0IGlzIHdhbnRlZC4KKwkgKiBEb24ndCBkbyB0aGlzIGZvciAibm9maWxlIiBhbmQgIm5vd3JpdGUiIGJ1ZmZlciB0eXBlcy4gKi8KKwlpZiAoY3VyYnVmLT5iX21heV9zd2FwCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCQkmJiAhYnRfZG9udHdyaXRlKGN1cmJ1ZikKKyNlbmRpZgorCQkpCisJeworCSAgICBtbF9vcGVuX2ZpbGUoY3VyYnVmKTsKKworCSAgICAvKiBUaGUgbWxfb3Blbl9maWxlKCkgY2FuIGNhdXNlIGFuIEFUVEVOVElPTiBtZXNzYWdlLgorCSAgICAgKiBXYWl0IHR3byBzZWNvbmRzLCB0byBtYWtlIHN1cmUgdGhlIHVzZXIgcmVhZHMgdGhpcyB1bmV4cGVjdGVkCisJICAgICAqIG1lc3NhZ2UuICBTaW5jZSB3ZSBjb3VsZCBiZSBhbnl3aGVyZSwgY2FsbCB3YWl0X3JldHVybigpIG5vdywKKwkgICAgICogYW5kIGRvbid0IGxldCB0aGUgZW1zZygpIHNldCBtc2dfc2Nyb2xsLiAqLworCSAgICBpZiAobmVlZF93YWl0X3JldHVybiAmJiBlbXNnX3NpbGVudCA9PSAwKQorCSAgICB7CisJCW91dF9mbHVzaCgpOworCQl1aV9kZWxheSgyMDAwTCwgVFJVRSk7CisJCXdhaXRfcmV0dXJuKFRSVUUpOworCQltc2dfc2Nyb2xsID0gc2F2ZV9tc2dfc2Nyb2xsOworCSAgICB9CisJfQorCWN1cmJ1Zi0+Yl9jaGFuZ2VkID0gVFJVRTsKKwltbF9zZXRkaXJ0eShjdXJidWYsIFRSVUUpOworI2lmZGVmIEZFQVRfV0lORE9XUworCWNoZWNrX3N0YXR1cyhjdXJidWYpOworI2VuZGlmCisjaWZkZWYgRkVBVF9USVRMRQorCW5lZWRfbWFrZXRpdGxlID0gVFJVRTsJICAgIC8qIHNldCB3aW5kb3cgdGl0bGUgbGF0ZXIgKi8KKyNlbmRpZgorICAgIH0KKyAgICArK2N1cmJ1Zi0+Yl9jaGFuZ2VkdGljazsKKyAgICArK2dsb2JhbF9jaGFuZ2VkdGljazsKK30KKworc3RhdGljIHZvaWQgY2hhbmdlZE9uZWxpbmUgX19BUkdTKChsaW5lbnJfVCBsbnVtKSk7CitzdGF0aWMgdm9pZCBjaGFuZ2VkX2NvbW1vbiBfX0FSR1MoKGxpbmVucl9UIGxudW0sIGNvbG5yX1QgY29sLCBsaW5lbnJfVCBsbnVtZSwgbG9uZyB4dHJhKSk7CisKKy8qCisgKiBDaGFuZ2VkIGJ5dGVzIHdpdGhpbiBhIHNpbmdsZSBsaW5lIGZvciB0aGUgY3VycmVudCBidWZmZXIuCisgKiAtIG1hcmtzIHRoZSB3aW5kb3dzIG9uIHRoaXMgYnVmZmVyIHRvIGJlIHJlZGlzcGxheWVkCisgKiAtIG1hcmtzIHRoZSBidWZmZXIgY2hhbmdlZCBieSBjYWxsaW5nIGNoYW5nZWQoKQorICogLSBpbnZhbGlkYXRlcyBjYWNoZWQgdmFsdWVzCisgKi8KKyAgICB2b2lkCitjaGFuZ2VkX2J5dGVzKGxudW0sIGNvbCkKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGNvbG5yX1QJY29sOworeworICAgIGNoYW5nZWRPbmVsaW5lKGxudW0pOworICAgIGNoYW5nZWRfY29tbW9uKGxudW0sIGNvbCwgbG51bSArIDEsIDBMKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitjaGFuZ2VkT25lbGluZShsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgaWYgKGN1cmJ1Zi0+Yl9tb2Rfc2V0KQorICAgIHsKKwkvKiBmaW5kIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCBtdXN0IGJlIHJlZGlzcGxheWVkICovCisJaWYgKGxudW0gPCBjdXJidWYtPmJfbW9kX3RvcCkKKwkgICAgY3VyYnVmLT5iX21vZF90b3AgPSBsbnVtOworCWVsc2UgaWYgKGxudW0gPj0gY3VyYnVmLT5iX21vZF9ib3QpCisJICAgIGN1cmJ1Zi0+Yl9tb2RfYm90ID0gbG51bSArIDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogc2V0IHRoZSBhcmVhIHRoYXQgbXVzdCBiZSByZWRpc3BsYXllZCB0byBvbmUgbGluZSAqLworCWN1cmJ1Zi0+Yl9tb2Rfc2V0ID0gVFJVRTsKKwljdXJidWYtPmJfbW9kX3RvcCA9IGxudW07CisJY3VyYnVmLT5iX21vZF9ib3QgPSBsbnVtICsgMTsKKwljdXJidWYtPmJfbW9kX3hsaW5lcyA9IDA7CisgICAgfQorfQorCisvKgorICogQXBwZW5kZWQgImNvdW50IiBsaW5lcyBiZWxvdyBsaW5lICJsbnVtIiBpbiB0aGUgY3VycmVudCBidWZmZXIuCisgKiBNdXN0IGJlIGNhbGxlZCBBRlRFUiB0aGUgY2hhbmdlIGFuZCBhZnRlciBtYXJrX2FkanVzdCgpLgorICogVGFrZXMgY2FyZSBvZiBtYXJraW5nIHRoZSBidWZmZXIgdG8gYmUgcmVkcmF3biBhbmQgc2V0cyB0aGUgY2hhbmdlZCBmbGFnLgorICovCisgICAgdm9pZAorYXBwZW5kZWRfbGluZXMobG51bSwgY291bnQpCisgICAgbGluZW5yX1QJbG51bTsKKyAgICBsb25nCWNvdW50OworeworICAgIGNoYW5nZWRfbGluZXMobG51bSArIDEsIDAsIGxudW0gKyAxLCBjb3VudCk7Cit9CisKKy8qCisgKiBMaWtlIGFwcGVuZGVkX2xpbmVzKCksIGJ1dCBhZGp1c3QgbWFya3MgZmlyc3QuCisgKi8KKyAgICB2b2lkCithcHBlbmRlZF9saW5lc19tYXJrKGxudW0sIGNvdW50KQorICAgIGxpbmVucl9UCWxudW07CisgICAgbG9uZwljb3VudDsKK3sKKyAgICBtYXJrX2FkanVzdChsbnVtICsgMSwgKGxpbmVucl9UKU1BWExOVU0sIGNvdW50LCAwTCk7CisgICAgY2hhbmdlZF9saW5lcyhsbnVtICsgMSwgMCwgbG51bSArIDEsIGNvdW50KTsKK30KKworLyoKKyAqIERlbGV0ZWQgImNvdW50IiBsaW5lcyBhdCBsaW5lICJsbnVtIiBpbiB0aGUgY3VycmVudCBidWZmZXIuCisgKiBNdXN0IGJlIGNhbGxlZCBBRlRFUiB0aGUgY2hhbmdlIGFuZCBhZnRlciBtYXJrX2FkanVzdCgpLgorICogVGFrZXMgY2FyZSBvZiBtYXJraW5nIHRoZSBidWZmZXIgdG8gYmUgcmVkcmF3biBhbmQgc2V0cyB0aGUgY2hhbmdlZCBmbGFnLgorICovCisgICAgdm9pZAorZGVsZXRlZF9saW5lcyhsbnVtLCBjb3VudCkKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGxvbmcJY291bnQ7Cit7CisgICAgY2hhbmdlZF9saW5lcyhsbnVtLCAwLCBsbnVtICsgY291bnQsIC1jb3VudCk7Cit9CisKKy8qCisgKiBMaWtlIGRlbGV0ZWRfbGluZXMoKSwgYnV0IGFkanVzdCBtYXJrcyBmaXJzdC4KKyAqLworICAgIHZvaWQKK2RlbGV0ZWRfbGluZXNfbWFyayhsbnVtLCBjb3VudCkKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGxvbmcJY291bnQ7Cit7CisgICAgbWFya19hZGp1c3QobG51bSwgKGxpbmVucl9UKShsbnVtICsgY291bnQgLSAxKSwgKGxvbmcpTUFYTE5VTSwgLWNvdW50KTsKKyAgICBjaGFuZ2VkX2xpbmVzKGxudW0sIDAsIGxudW0gKyBjb3VudCwgLWNvdW50KTsKK30KKworLyoKKyAqIENoYW5nZWQgbGluZXMgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlci4KKyAqIE11c3QgYmUgY2FsbGVkIEFGVEVSIHRoZSBjaGFuZ2UgYW5kIGFmdGVyIG1hcmtfYWRqdXN0KCkuCisgKiAtIG1hcmsgdGhlIGJ1ZmZlciBjaGFuZ2VkIGJ5IGNhbGxpbmcgY2hhbmdlZCgpCisgKiAtIG1hcmsgdGhlIHdpbmRvd3Mgb24gdGhpcyBidWZmZXIgdG8gYmUgcmVkaXNwbGF5ZWQKKyAqIC0gaW52YWxpZGF0ZSBjYWNoZWQgdmFsdWVzCisgKiAibG51bSIgaXMgdGhlIGZpcnN0IGxpbmUgdGhhdCBuZWVkcyBkaXNwbGF5aW5nLCAibG51bWUiIHRoZSBmaXJzdCBsaW5lCisgKiBiZWxvdyB0aGUgY2hhbmdlZCBsaW5lcyAoQkVGT1JFIHRoZSBjaGFuZ2UpLgorICogV2hlbiBvbmx5IGluc2VydGluZyBsaW5lcywgImxudW0iIGFuZCAibG51bWUiIGFyZSBlcXVhbC4KKyAqIFRha2VzIGNhcmUgb2YgY2FsbGluZyBjaGFuZ2VkKCkgYW5kIHVwZGF0aW5nIGJfbW9kXyouCisgKi8KKyAgICB2b2lkCitjaGFuZ2VkX2xpbmVzKGxudW0sIGNvbCwgbG51bWUsIHh0cmEpCisgICAgbGluZW5yX1QJbG51bTsJICAgIC8qIGZpcnN0IGxpbmUgd2l0aCBjaGFuZ2UgKi8KKyAgICBjb2xucl9UCWNvbDsJICAgIC8qIGNvbHVtbiBpbiBmaXJzdCBsaW5lIHdpdGggY2hhbmdlICovCisgICAgbGluZW5yX1QJbG51bWU7CSAgICAvKiBsaW5lIGJlbG93IGxhc3QgY2hhbmdlZCBsaW5lICovCisgICAgbG9uZwl4dHJhOwkgICAgLyogbnVtYmVyIG9mIGV4dHJhIGxpbmVzIChuZWdhdGl2ZSB3aGVuIGRlbGV0aW5nKSAqLworeworICAgIGlmIChjdXJidWYtPmJfbW9kX3NldCkKKyAgICB7CisJLyogZmluZCB0aGUgbWF4aW11bSBhcmVhIHRoYXQgbXVzdCBiZSByZWRpc3BsYXllZCAqLworCWlmIChsbnVtIDwgY3VyYnVmLT5iX21vZF90b3ApCisJICAgIGN1cmJ1Zi0+Yl9tb2RfdG9wID0gbG51bTsKKwlpZiAobG51bSA8IGN1cmJ1Zi0+Yl9tb2RfYm90KQorCXsKKwkgICAgLyogYWRqdXN0IG9sZCBib3QgcG9zaXRpb24gZm9yIHh0cmEgbGluZXMgKi8KKwkgICAgY3VyYnVmLT5iX21vZF9ib3QgKz0geHRyYTsKKwkgICAgaWYgKGN1cmJ1Zi0+Yl9tb2RfYm90IDwgbG51bSkKKwkJY3VyYnVmLT5iX21vZF9ib3QgPSBsbnVtOworCX0KKwlpZiAobG51bWUgKyB4dHJhID4gY3VyYnVmLT5iX21vZF9ib3QpCisJICAgIGN1cmJ1Zi0+Yl9tb2RfYm90ID0gbG51bWUgKyB4dHJhOworCWN1cmJ1Zi0+Yl9tb2RfeGxpbmVzICs9IHh0cmE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogc2V0IHRoZSBhcmVhIHRoYXQgbXVzdCBiZSByZWRpc3BsYXllZCAqLworCWN1cmJ1Zi0+Yl9tb2Rfc2V0ID0gVFJVRTsKKwljdXJidWYtPmJfbW9kX3RvcCA9IGxudW07CisJY3VyYnVmLT5iX21vZF9ib3QgPSBsbnVtZSArIHh0cmE7CisJY3VyYnVmLT5iX21vZF94bGluZXMgPSB4dHJhOworICAgIH0KKworICAgIGNoYW5nZWRfY29tbW9uKGxudW0sIGNvbCwgbG51bWUsIHh0cmEpOworfQorCisgICAgc3RhdGljIHZvaWQKK2NoYW5nZWRfY29tbW9uKGxudW0sIGNvbCwgbG51bWUsIHh0cmEpCisgICAgbGluZW5yX1QJbG51bTsKKyAgICBjb2xucl9UCWNvbDsKKyAgICBsaW5lbnJfVAlsbnVtZTsKKyAgICBsb25nCXh0cmE7Cit7CisgICAgd2luX1QJKndwOworICAgIGludAkJaTsKKyNpZmRlZiBGRUFUX0pVTVBMSVNUCisgICAgaW50CQljb2xzOworICAgIHBvc19UCSpwOworICAgIGludAkJYWRkOworI2VuZGlmCisKKyAgICAvKiBtYXJrIHRoZSBidWZmZXIgYXMgbW9kaWZpZWQgKi8KKyAgICBjaGFuZ2VkKCk7CisKKyAgICAvKiBzZXQgdGhlICcuIG1hcmsgKi8KKyAgICBpZiAoIWNtZG1vZC5rZWVwanVtcHMpCisgICAgeworCWN1cmJ1Zi0+Yl9sYXN0X2NoYW5nZS5sbnVtID0gbG51bTsKKwljdXJidWYtPmJfbGFzdF9jaGFuZ2UuY29sID0gY29sOworCisjaWZkZWYgRkVBVF9KVU1QTElTVAorCS8qIENyZWF0ZSBhIG5ldyBlbnRyeSBpZiBhIG5ldyB1bmRvLWFibGUgY2hhbmdlIHdhcyBzdGFydGVkIG9yIHdlCisJICogZG9uJ3QgaGF2ZSBhbiBlbnRyeSB5ZXQuICovCisJaWYgKGN1cmJ1Zi0+Yl9uZXdfY2hhbmdlIHx8IGN1cmJ1Zi0+Yl9jaGFuZ2VsaXN0bGVuID09IDApCisJeworCSAgICBpZiAoY3VyYnVmLT5iX2NoYW5nZWxpc3RsZW4gPT0gMCkKKwkJYWRkID0gVFJVRTsKKwkgICAgZWxzZQorCSAgICB7CisJCS8qIERvbid0IGNyZWF0ZSBhIG5ldyBlbnRyeSB3aGVuIHRoZSBsaW5lIG51bWJlciBpcyB0aGUgc2FtZQorCQkgKiBhcyB0aGUgbGFzdCBvbmUgYW5kIHRoZSBjb2x1bW4gaXMgbm90IHRvbyBmYXIgYXdheS4gIEF2b2lkcworCQkgKiBjcmVhdGluZyBtYW55IGVudHJpZXMgZm9yIHR5cGluZyAieHh4eHgiLiAqLworCQlwID0gJmN1cmJ1Zi0+Yl9jaGFuZ2VsaXN0W2N1cmJ1Zi0+Yl9jaGFuZ2VsaXN0bGVuIC0gMV07CisJCWlmIChwLT5sbnVtICE9IGxudW0pCisJCSAgICBhZGQgPSBUUlVFOworCQllbHNlCisJCXsKKwkJICAgIGNvbHMgPSBjb21wX3RleHR3aWR0aChGQUxTRSk7CisJCSAgICBpZiAoY29scyA9PSAwKQorCQkJY29scyA9IDc5OworCQkgICAgYWRkID0gKHAtPmNvbCArIGNvbHMgPCBjb2wgfHwgY29sICsgY29scyA8IHAtPmNvbCk7CisJCX0KKwkgICAgfQorCSAgICBpZiAoYWRkKQorCSAgICB7CisJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IG9mIGEgbmV3IHNlcXVlbmNlIG9mIHVuZG8tYWJsZSBjaGFuZ2VzCisJCSAqIGFuZCBpdCdzIGF0IHNvbWUgZGlzdGFuY2Ugb2YgdGhlIGxhc3QgY2hhbmdlLiAgVXNlIGEgbmV3CisJCSAqIHBvc2l0aW9uIGluIHRoZSBjaGFuZ2VsaXN0LiAqLworCQljdXJidWYtPmJfbmV3X2NoYW5nZSA9IEZBTFNFOworCisJCWlmIChjdXJidWYtPmJfY2hhbmdlbGlzdGxlbiA9PSBKVU1QTElTVFNJWkUpCisJCXsKKwkJICAgIC8qIGNoYW5nZWxpc3QgaXMgZnVsbDogcmVtb3ZlIG9sZGVzdCBlbnRyeSAqLworCQkgICAgY3VyYnVmLT5iX2NoYW5nZWxpc3RsZW4gPSBKVU1QTElTVFNJWkUgLSAxOworCQkgICAgbWNoX21lbW1vdmUoY3VyYnVmLT5iX2NoYW5nZWxpc3QsIGN1cmJ1Zi0+Yl9jaGFuZ2VsaXN0ICsgMSwKKwkJCQkJICBzaXplb2YocG9zX1QpICogKEpVTVBMSVNUU0laRSAtIDEpKTsKKwkJICAgIEZPUl9BTExfV0lORE9XUyh3cCkKKwkJICAgIHsKKwkJCS8qIENvcnJlY3QgcG9zaXRpb24gaW4gY2hhbmdlbGlzdCBmb3Igb3RoZXIgd2luZG93cyBvbgorCQkJICogdGhpcyBidWZmZXIuICovCisJCQlpZiAod3AtPndfYnVmZmVyID09IGN1cmJ1ZiAmJiB3cC0+d19jaGFuZ2VsaXN0aWR4ID4gMCkKKwkJCSAgICAtLXdwLT53X2NoYW5nZWxpc3RpZHg7CisJCSAgICB9CisJCX0KKwkJRk9SX0FMTF9XSU5ET1dTKHdwKQorCQl7CisJCSAgICAvKiBGb3Igb3RoZXIgd2luZG93cywgaWYgdGhlIHBvc2l0aW9uIGluIHRoZSBjaGFuZ2VsaXN0IGlzCisJCSAgICAgKiBhdCB0aGUgZW5kIGl0IHN0YXlzIGF0IHRoZSBlbmQuICovCisJCSAgICBpZiAod3AtPndfYnVmZmVyID09IGN1cmJ1ZgorCQkJICAgICYmIHdwLT53X2NoYW5nZWxpc3RpZHggPT0gY3VyYnVmLT5iX2NoYW5nZWxpc3RsZW4pCisJCQkrK3dwLT53X2NoYW5nZWxpc3RpZHg7CisJCX0KKwkJKytjdXJidWYtPmJfY2hhbmdlbGlzdGxlbjsKKwkgICAgfQorCX0KKwljdXJidWYtPmJfY2hhbmdlbGlzdFtjdXJidWYtPmJfY2hhbmdlbGlzdGxlbiAtIDFdID0KKwkJCQkJCQljdXJidWYtPmJfbGFzdF9jaGFuZ2U7CisJLyogVGhlIGN1cnJlbnQgd2luZG93IGlzIGFsd2F5cyBhZnRlciB0aGUgbGFzdCBjaGFuZ2UsIHNvIHRoYXQgImcsIgorCSAqIHRha2VzIHlvdSBiYWNrIHRvIGl0LiAqLworCWN1cndpbi0+d19jaGFuZ2VsaXN0aWR4ID0gY3VyYnVmLT5iX2NoYW5nZWxpc3RsZW47CisjZW5kaWYKKyAgICB9CisKKyAgICBGT1JfQUxMX1dJTkRPV1Mod3ApCisgICAgeworCWlmICh3cC0+d19idWZmZXIgPT0gY3VyYnVmKQorCXsKKwkgICAgLyogTWFyayB0aGlzIHdpbmRvdyB0byBiZSByZWRyYXduIGxhdGVyLiAqLworCSAgICBpZiAod3AtPndfcmVkcl90eXBlIDwgVkFMSUQpCisJCXdwLT53X3JlZHJfdHlwZSA9IFZBTElEOworCisJICAgIC8qIENoZWNrIGlmIGEgY2hhbmdlIGluIHRoZSBidWZmZXIgaGFzIGludmFsaWRhdGVkIHRoZSBjYWNoZWQKKwkgICAgICogdmFsdWVzIGZvciB0aGUgY3Vyc29yLiAqLworI2lmZGVmIEZFQVRfRk9MRElORworCSAgICAvKgorCSAgICAgKiBVcGRhdGUgdGhlIGZvbGRzIGZvciB0aGlzIHdpbmRvdy4gIENhbid0IHBvc3Rwb25lIHRoaXMsIGJlY2F1c2UKKwkgICAgICogYSBmb2xsb3dpbmcgb3BlcmF0b3IgbWlnaHQgd29yayBvbiB0aGUgd2hvbGUgZm9sZDogIj4+ZGQiLgorCSAgICAgKi8KKwkgICAgZm9sZFVwZGF0ZSh3cCwgbG51bSwgbG51bWUgKyB4dHJhIC0gMSk7CisKKwkgICAgLyogVGhlIGNoYW5nZSBtYXkgY2F1c2UgbGluZXMgYWJvdmUgb3IgYmVsb3cgdGhlIGNoYW5nZSB0byBiZWNvbWUKKwkgICAgICogaW5jbHVkZWQgaW4gYSBmb2xkLiAgU2V0IGxudW0vbG51bWUgdG8gdGhlIGZpcnN0L2xhc3QgbGluZSB0aGF0CisJICAgICAqIG1pZ2h0IGJlIGRpc3BsYXllZCBkaWZmZXJlbnRseS4KKwkgICAgICogU2V0IHdfY2xpbmVfZm9sZGVkIGhlcmUgYXMgYW4gZWZmaWNpZW50IHdheSB0byB1cGRhdGUgaXQgd2hlbgorCSAgICAgKiBpbnNlcnRpbmcgbGluZXMganVzdCBhYm92ZSBhIGNsb3NlZCBmb2xkLiAqLworCSAgICBpID0gaGFzRm9sZGluZ1dpbih3cCwgbG51bSwgJmxudW0sIE5VTEwsIEZBTFNFLCBOVUxMKTsKKwkgICAgaWYgKHdwLT53X2N1cnNvci5sbnVtID09IGxudW0pCisJCXdwLT53X2NsaW5lX2ZvbGRlZCA9IGk7CisJICAgIGkgPSBoYXNGb2xkaW5nV2luKHdwLCBsbnVtZSwgTlVMTCwgJmxudW1lLCBGQUxTRSwgTlVMTCk7CisJICAgIGlmICh3cC0+d19jdXJzb3IubG51bSA9PSBsbnVtZSkKKwkJd3AtPndfY2xpbmVfZm9sZGVkID0gaTsKKworCSAgICAvKiBJZiB0aGUgY2hhbmdlZCBsaW5lIGlzIGluIGEgcmFuZ2Ugb2YgcHJldmlvdXNseSBmb2xkZWQgbGluZXMsCisJICAgICAqIGNvbXBhcmUgd2l0aCB0aGUgZmlyc3QgbGluZSBpbiB0aGF0IHJhbmdlLiAqLworCSAgICBpZiAod3AtPndfY3Vyc29yLmxudW0gPD0gbG51bSkKKwkgICAgeworCQlpID0gZmluZF93bF9lbnRyeSh3cCwgbG51bSk7CisJCWlmIChpID49IDAgJiYgd3AtPndfY3Vyc29yLmxudW0gPiB3cC0+d19saW5lc1tpXS53bF9sbnVtKQorCQkgICAgY2hhbmdlZF9saW5lX2Fidl9jdXJzX3dpbih3cCk7CisJICAgIH0KKyNlbmRpZgorCisJICAgIGlmICh3cC0+d19jdXJzb3IubG51bSA+IGxudW0pCisJCWNoYW5nZWRfbGluZV9hYnZfY3Vyc193aW4od3ApOworCSAgICBlbHNlIGlmICh3cC0+d19jdXJzb3IubG51bSA9PSBsbnVtICYmIHdwLT53X2N1cnNvci5jb2wgPj0gY29sKQorCQljaGFuZ2VkX2NsaW5lX2JlZl9jdXJzX3dpbih3cCk7CisJICAgIGlmICh3cC0+d19ib3RsaW5lID49IGxudW0pCisJICAgIHsKKwkJLyogQXNzdW1lIHRoYXQgYm90bGluZSBkb2Vzbid0IGNoYW5nZSAoaW5zZXJ0ZWQgbGluZXMgbWFrZQorCQkgKiBvdGhlciBsaW5lcyBzY3JvbGwgZG93biBiZWxvdyBib3RsaW5lKS4gKi8KKwkJYXBwcm94aW1hdGVfYm90bGluZV93aW4od3ApOworCSAgICB9CisKKwkgICAgLyogQ2hlY2sgaWYgYW55IHdfbGluZXNbXSBlbnRyaWVzIGhhdmUgYmVjb21lIGludmFsaWQuCisJICAgICAqIEZvciBlbnRyaWVzIGJlbG93IHRoZSBjaGFuZ2U6IENvcnJlY3QgdGhlIGxudW1zIGZvcgorCSAgICAgKiBpbnNlcnRlZC9kZWxldGVkIGxpbmVzLiAgTWFrZXMgaXQgcG9zc2libGUgdG8gc3RvcCBkaXNwbGF5aW5nCisJICAgICAqIGFmdGVyIHRoZSBjaGFuZ2UuICovCisJICAgIGZvciAoaSA9IDA7IGkgPCB3cC0+d19saW5lc192YWxpZDsgKytpKQorCQlpZiAod3AtPndfbGluZXNbaV0ud2xfdmFsaWQpCisJCXsKKwkJICAgIGlmICh3cC0+d19saW5lc1tpXS53bF9sbnVtID49IGxudW0pCisJCSAgICB7CisJCQlpZiAod3AtPndfbGluZXNbaV0ud2xfbG51bSA8IGxudW1lKQorCQkJeworCQkJICAgIC8qIGxpbmUgaW5jbHVkZWQgaW4gY2hhbmdlICovCisJCQkgICAgd3AtPndfbGluZXNbaV0ud2xfdmFsaWQgPSBGQUxTRTsKKwkJCX0KKwkJCWVsc2UgaWYgKHh0cmEgIT0gMCkKKwkJCXsKKwkJCSAgICAvKiBsaW5lIGJlbG93IGNoYW5nZSAqLworCQkJICAgIHdwLT53X2xpbmVzW2ldLndsX2xudW0gKz0geHRyYTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkJCSAgICB3cC0+d19saW5lc1tpXS53bF9sYXN0bG51bSArPSB4dHJhOworI2VuZGlmCisJCQl9CisJCSAgICB9CisjaWZkZWYgRkVBVF9GT0xESU5HCisJCSAgICBlbHNlIGlmICh3cC0+d19saW5lc1tpXS53bF9sYXN0bG51bSA+PSBsbnVtKQorCQkgICAgeworCQkJLyogY2hhbmdlIHNvbWV3aGVyZSBpbnNpZGUgdGhpcyByYW5nZSBvZiBmb2xkZWQgbGluZXMsCisJCQkgKiBtYXkgbmVlZCB0byBiZSByZWRyYXduICovCisJCQl3cC0+d19saW5lc1tpXS53bF92YWxpZCA9IEZBTFNFOworCQkgICAgfQorI2VuZGlmCisJCX0KKwl9CisgICAgfQorCisgICAgLyogQ2FsbCB1cGRhdGVfc2NyZWVuKCkgbGF0ZXIsIHdoaWNoIGNoZWNrcyBvdXQgd2hhdCBuZWVkcyB0byBiZSByZWRyYXduLAorICAgICAqIHNpbmNlIGl0IG5vdGljZXMgYl9tb2Rfc2V0IGFuZCB0aGVuIHVzZXMgYl9tb2RfKi4gKi8KKyAgICBpZiAobXVzdF9yZWRyYXcgPCBWQUxJRCkKKwltdXN0X3JlZHJhdyA9IFZBTElEOworfQorCisvKgorICogdW5jaGFuZ2VkKCkgaXMgY2FsbGVkIHdoZW4gdGhlIGNoYW5nZWQgZmxhZyBtdXN0IGJlIHJlc2V0IGZvciBidWZmZXIgJ2J1ZicKKyAqLworICAgIHZvaWQKK3VuY2hhbmdlZChidWYsIGZmKQorICAgIGJ1Zl9UCSpidWY7CisgICAgaW50CQlmZjsJLyogYWxzbyByZXNldCAnZmlsZWZvcm1hdCcgKi8KK3sKKyAgICBpZiAoYnVmLT5iX2NoYW5nZWQgfHwgKGZmICYmIGZpbGVfZmZfZGlmZmVycyhidWYpKSkKKyAgICB7CisJYnVmLT5iX2NoYW5nZWQgPSAwOworCW1sX3NldGRpcnR5KGJ1ZiwgRkFMU0UpOworCWlmIChmZikKKwkgICAgc2F2ZV9maWxlX2ZmKGJ1Zik7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJY2hlY2tfc3RhdHVzKGJ1Zik7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1RJVExFCisJbmVlZF9tYWtldGl0bGUgPSBUUlVFOwkgICAgLyogc2V0IHdpbmRvdyB0aXRsZSBsYXRlciAqLworI2VuZGlmCisgICAgfQorICAgICsrYnVmLT5iX2NoYW5nZWR0aWNrOworICAgICsrZ2xvYmFsX2NoYW5nZWR0aWNrOworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIG5ldGJlYW5zX3VubW9kaWZpZWQoYnVmKTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogY2hlY2tfc3RhdHVzOiBjYWxsZWQgd2hlbiB0aGUgc3RhdHVzIGJhcnMgZm9yIHRoZSBidWZmZXIgJ2J1ZicKKyAqCQkgbmVlZCB0byBiZSB1cGRhdGVkCisgKi8KKyAgICB2b2lkCitjaGVja19zdGF0dXMoYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgd2luX1QJKndwOworCisgICAgZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSBOVUxMOyB3cCA9IHdwLT53X25leHQpCisJaWYgKHdwLT53X2J1ZmZlciA9PSBidWYgJiYgd3AtPndfc3RhdHVzX2hlaWdodCkKKwl7CisJICAgIHdwLT53X3JlZHJfc3RhdHVzID0gVFJVRTsKKwkgICAgaWYgKG11c3RfcmVkcmF3IDwgVkFMSUQpCisJCW11c3RfcmVkcmF3ID0gVkFMSUQ7CisJfQorfQorI2VuZGlmCisKKy8qCisgKiBJZiB0aGUgZmlsZSBpcyByZWFkb25seSwgZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSB3aXRoIHRoZSBmaXJzdCBjaGFuZ2UuCisgKiBEb24ndCBkbyB0aGlzIGZvciBhdXRvY29tbWFuZHMuCisgKiBEb24ndCB1c2UgZW1zZygpLCBiZWNhdXNlIGl0IGZsdXNoZXMgdGhlIG1hY3JvIGJ1ZmZlci4KKyAqIElmIHdlIGhhdmUgdW5kb25lIGFsbCBjaGFuZ2VzIGJfY2hhbmdlZCB3aWxsIGJlIEZBTFNFLCBidXQgYl9kaWRfd2FybgorICogd2lsbCBiZSBUUlVFLgorICovCisgICAgdm9pZAorY2hhbmdlX3dhcm5pbmcoY29sKQorICAgIGludAkgICAgY29sOwkJLyogY29sdW1uIGZvciBtZXNzYWdlOyBub24temVybyB3aGVuIGluIGluc2VydAorCQkJCSAgIG1vZGUgYW5kICdzaG93bW9kZScgaXMgb24gKi8KK3sKKyAgICBpZiAoY3VyYnVmLT5iX2RpZF93YXJuID09IEZBTFNFCisJICAgICYmIGN1cmJ1ZklzQ2hhbmdlZCgpID09IDAKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgJiYgIWF1dG9jbWRfYnVzeQorI2VuZGlmCisJICAgICYmIGN1cmJ1Zi0+Yl9wX3JvKQorICAgIHsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwlhcHBseV9hdXRvY21kcyhFVkVOVF9GSUxFQ0hBTkdFRFJPLCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKKwlpZiAoIWN1cmJ1Zi0+Yl9wX3JvKQorCSAgICByZXR1cm47CisjZW5kaWYKKwkvKgorCSAqIERvIHdoYXQgbXNnKCkgZG9lcywgYnV0IHdpdGggYSBjb2x1bW4gb2Zmc2V0IGlmIHRoZSB3YXJuaW5nIHNob3VsZAorCSAqIGJlIGFmdGVyIHRoZSBtb2RlIG1lc3NhZ2UuCisJICovCisJbXNnX3N0YXJ0KCk7CisJaWYgKG1zZ19yb3cgPT0gUm93cyAtIDEpCisJICAgIG1zZ19jb2wgPSBjb2w7CisJTVNHX1BVVFNfQVRUUihfKCJXMTA6IFdhcm5pbmc6IENoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSIpLAorCQkJCQkJICAgaGxfYXR0cihITEZfVykgfCBNU0dfSElTVCk7CisJbXNnX2Nscl9lb3MoKTsKKwkodm9pZCltc2dfZW5kKCk7CisJaWYgKG1zZ19zaWxlbnQgPT0gMCAmJiAhc2lsZW50X21vZGUpCisJeworCSAgICBvdXRfZmx1c2goKTsKKwkgICAgdWlfZGVsYXkoMTAwMEwsIFRSVUUpOyAvKiBnaXZlIHRoZSB1c2VyIHRpbWUgdG8gdGhpbmsgYWJvdXQgaXQgKi8KKwl9CisJY3VyYnVmLT5iX2RpZF93YXJuID0gVFJVRTsKKwlyZWRyYXdfY21kbGluZSA9IEZBTFNFOwkvKiBkb24ndCByZWRyYXcgYW5kIGVyYXNlIHRoZSBtZXNzYWdlICovCisJaWYgKG1zZ19yb3cgPCBSb3dzIC0gMSkKKwkgICAgc2hvd21vZGUoKTsKKyAgICB9Cit9CisKKy8qCisgKiBBc2sgZm9yIGEgcmVwbHkgZnJvbSB0aGUgdXNlciwgYSAneScgb3IgYSAnbicuCisgKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBhY2NlcHRlZCwgdGhlIG1lc3NhZ2UgaXMgcmVwZWF0ZWQgdW50aWwgYSB2YWxpZAorICogcmVwbHkgaXMgZW50ZXJlZCBvciBDVFJMLUMgaXMgaGl0LgorICogSWYgZGlyZWN0IGlzIFRSVUUsIGRvbid0IHVzZSB2Z2V0YygpIGJ1dCB1aV9pbmNoYXIoKSwgZG9uJ3QgZ2V0IGNoYXJhY3RlcnMKKyAqIGZyb20gYW55IGJ1ZmZlcnMgYnV0IGRpcmVjdGx5IGZyb20gdGhlIHVzZXIuCisgKgorICogcmV0dXJuIHRoZSAneScgb3IgJ24nCisgKi8KKyAgICBpbnQKK2Fza195ZXNubyhzdHIsIGRpcmVjdCkKKyAgICBjaGFyX3UgICpzdHI7CisgICAgaW50CSAgICBkaXJlY3Q7Cit7CisgICAgaW50CSAgICByID0gJyAnOworICAgIGludAkgICAgc2F2ZV9TdGF0ZSA9IFN0YXRlOworCisgICAgaWYgKGV4aXRpbmcpCQkvKiBwdXQgdGVybWluYWwgaW4gcmF3IG1vZGUgZm9yIHRoaXMgcXVlc3Rpb24gKi8KKwlzZXR0bW9kZShUTU9ERV9SQVcpOworICAgICsrbm9fd2FpdF9yZXR1cm47CisjaWZkZWYgVVNFX09OX0ZMWV9TQ1JPTEwKKyAgICBkb250X3Njcm9sbCA9IFRSVUU7CQkvKiBkaXNhbGxvdyBzY3JvbGxpbmcgaGVyZSAqLworI2VuZGlmCisgICAgU3RhdGUgPSBDT05GSVJNOwkJLyogbW91c2UgYmVoYXZlcyBsaWtlIHdpdGggOmNvbmZpcm0gKi8KKyNpZmRlZiBGRUFUX01PVVNFCisgICAgc2V0bW91c2UoKTsJCQkvKiBkaXNhYmxlcyBtb3VzZSBmb3IgeHRlcm0gKi8KKyNlbmRpZgorICAgICsrbm9fbWFwcGluZzsKKyAgICArK2FsbG93X2tleXM7CQkvKiBubyBtYXBwaW5nIGhlcmUsIGJ1dCByZWNvZ25pemUga2V5cyAqLworCisgICAgd2hpbGUgKHIgIT0gJ3knICYmIHIgIT0gJ24nKQorICAgIHsKKwkvKiBzYW1lIGhpZ2hsaWdodGluZyBhcyBmb3Igd2FpdF9yZXR1cm4gKi8KKwlzbXNnX2F0dHIoaGxfYXR0cihITEZfUiksIChjaGFyX3UgKikiJXMgKHkvbik/Iiwgc3RyKTsKKwlpZiAoZGlyZWN0KQorCSAgICByID0gZ2V0X2tleXN0cm9rZSgpOworCWVsc2UKKwkgICAgciA9IHNhZmVfdmdldGMoKTsKKwlpZiAociA9PSBDdHJsX0MgfHwgciA9PSBFU0MpCisJICAgIHIgPSAnbic7CisJbXNnX3B1dGNoYXIocik7CSAgICAvKiBzaG93IHdoYXQgeW91IHR5cGVkICovCisJb3V0X2ZsdXNoKCk7CisgICAgfQorICAgIC0tbm9fd2FpdF9yZXR1cm47CisgICAgU3RhdGUgPSBzYXZlX1N0YXRlOworI2lmZGVmIEZFQVRfTU9VU0UKKyAgICBzZXRtb3VzZSgpOworI2VuZGlmCisgICAgLS1ub19tYXBwaW5nOworICAgIC0tYWxsb3dfa2V5czsKKworICAgIHJldHVybiByOworfQorCisvKgorICogR2V0IGEga2V5IHN0cm9rZSBkaXJlY3RseSBmcm9tIHRoZSB1c2VyLgorICogSWdub3JlcyBtb3VzZSBjbGlja3MgYW5kIHNjcm9sbGJhciBldmVudHMsIGV4Y2VwdCBhIGNsaWNrIGZvciB0aGUgbGVmdAorICogYnV0dG9uICh1c2VkIGF0IHRoZSBtb3JlIHByb21wdCkuCisgKiBEb2Vzbid0IHVzZSB2Z2V0YygpLCBiZWNhdXNlIGl0IHN5bmNzIHVuZG8gYW5kIGVhdHMgbWFwcGVkIGNoYXJhY3RlcnMuCisgKiBEaXNhZHZhbnRhZ2U6IHR5cGVhaGVhZCBpcyBpZ25vcmVkLgorICogVHJhbnNsYXRlcyB0aGUgaW50ZXJydXB0IGNoYXJhY3RlciBmb3IgdW5peCB0byBFU0MuCisgKi8KKyAgICBpbnQKK2dldF9rZXlzdHJva2UoKQoreworI2RlZmluZSBDQlVGTEVOIDE1MQorICAgIGNoYXJfdQlidWZbQ0JVRkxFTl07CisgICAgaW50CQlsZW4gPSAwOworICAgIGludAkJbjsKKyAgICBpbnQJCXNhdmVfbWFwcGVkX2N0cmxfYyA9IG1hcHBlZF9jdHJsX2M7CisKKyAgICBtYXBwZWRfY3RybF9jID0gRkFMU0U7CS8qIG1hcHBpbmdzIGFyZSBub3QgdXNlZCBoZXJlICovCisgICAgZm9yICg7OykKKyAgICB7CisJY3Vyc29yX29uKCk7CisJb3V0X2ZsdXNoKCk7CisKKwkvKiBGaXJzdCB0aW1lOiBibG9ja2luZyB3YWl0LiAgU2Vjb25kIHRpbWU6IHdhaXQgdXAgdG8gMTAwbXMgZm9yIGEKKwkgKiB0ZXJtaW5hbCBjb2RlIHRvIGNvbXBsZXRlLiAgTGVhdmUgc29tZSByb29tIGZvciBjaGVja190ZXJtY29kZSgpIHRvCisJICogaW5zZXJ0IGEga2V5IGNvZGUgaW50byAobWF4IDUgY2hhcnMgcGx1cyBOVUwpLiAgQW5kCisJICogZml4X2lucHV0X2J1ZmZlcigpIGNhbiB0cmlwbGUgdGhlIG51bWJlciBvZiBieXRlcy4gKi8KKwluID0gdWlfaW5jaGFyKGJ1ZiArIGxlbiwgKENCVUZMRU4gLSA2IC0gbGVuKSAvIDMsCisJCQkJCQkgICAgbGVuID09IDAgPyAtMUwgOiAxMDBMLCAwKTsKKwlpZiAobiA+IDApCisJeworCSAgICAvKiBSZXBsYWNlIHplcm8gYW5kIENTSSBieSBhIHNwZWNpYWwga2V5IGNvZGUuICovCisJICAgIG4gPSBmaXhfaW5wdXRfYnVmZmVyKGJ1ZiArIGxlbiwgbiwgRkFMU0UpOworCSAgICBsZW4gKz0gbjsKKwl9CisKKwkvKiBpbmNvbXBsZXRlIHRlcm1jb2RlOiBnZXQgbW9yZSBjaGFyYWN0ZXJzICovCisJaWYgKChuID0gY2hlY2tfdGVybWNvZGUoMSwgYnVmLCBsZW4pKSA8IDApCisJICAgIGNvbnRpbnVlOworCS8qIGZvdW5kIGEgdGVybWNvZGU6IGFkanVzdCBsZW5ndGggKi8KKwlpZiAobiA+IDApCisJICAgIGxlbiA9IG47CisJaWYgKGxlbiA9PSAwKQkgICAgLyogbm90aGluZyB0eXBlZCB5ZXQgKi8KKwkgICAgY29udGludWU7CisKKwkvKiBIYW5kbGUgbW9kaWZpZXIgYW5kL29yIHNwZWNpYWwga2V5IGNvZGUuICovCisJbiA9IGJ1ZlswXTsKKwlpZiAobiA9PSBLX1NQRUNJQUwpCisJeworCSAgICBuID0gVE9fU1BFQ0lBTChidWZbMV0sIGJ1ZlsyXSk7CisJICAgIGlmIChidWZbMV0gPT0gS1NfTU9ESUZJRVIKKwkJICAgIHx8IG4gPT0gS19JR05PUkUKKyNpZmRlZiBGRUFUX01PVVNFCisJCSAgICB8fCBuID09IEtfTEVGVE1PVVNFX05NCisJCSAgICB8fCBuID09IEtfTEVGVERSQUcKKwkJICAgIHx8IG4gPT0gS19MRUZUUkVMRUFTRQorCQkgICAgfHwgbiA9PSBLX0xFRlRSRUxFQVNFX05NCisJCSAgICB8fCBuID09IEtfTUlERExFTU9VU0UKKwkJICAgIHx8IG4gPT0gS19NSURETEVEUkFHCisJCSAgICB8fCBuID09IEtfTUlERExFUkVMRUFTRQorCQkgICAgfHwgbiA9PSBLX1JJR0hUTU9VU0UKKwkJICAgIHx8IG4gPT0gS19SSUdIVERSQUcKKwkJICAgIHx8IG4gPT0gS19SSUdIVFJFTEVBU0UKKwkJICAgIHx8IG4gPT0gS19NT1VTRURPV04KKwkJICAgIHx8IG4gPT0gS19NT1VTRVVQCisJCSAgICB8fCBuID09IEtfWDFNT1VTRQorCQkgICAgfHwgbiA9PSBLX1gxRFJBRworCQkgICAgfHwgbiA9PSBLX1gxUkVMRUFTRQorCQkgICAgfHwgbiA9PSBLX1gyTU9VU0UKKwkJICAgIHx8IG4gPT0gS19YMkRSQUcKKwkJICAgIHx8IG4gPT0gS19YMlJFTEVBU0UKKyMgaWZkZWYgRkVBVF9HVUkKKwkJICAgIHx8IG4gPT0gS19WRVJfU0NST0xMQkFSCisJCSAgICB8fCBuID09IEtfSE9SX1NDUk9MTEJBUgorIyBlbmRpZgorI2VuZGlmCisJICAgICAgICkKKwkgICAgeworCQlpZiAoYnVmWzFdID09IEtTX01PRElGSUVSKQorCQkgICAgbW9kX21hc2sgPSBidWZbMl07CisJCWxlbiAtPSAzOworCQlpZiAobGVuID4gMCkKKwkJICAgIG1jaF9tZW1tb3ZlKGJ1ZiwgYnVmICsgMywgKHNpemVfdClsZW4pOworCQljb250aW51ZTsKKwkgICAgfQorCX0KKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIGlmIChNQl9CWVRFMkxFTihuKSA+IGxlbikKKwkJY29udGludWU7CS8qIG1vcmUgYnl0ZXMgdG8gZ2V0ICovCisJICAgIGJ1ZltsZW4gPj0gQ0JVRkxFTiA/IENCVUZMRU4gLSAxIDogbGVuXSA9IE5VTDsKKwkgICAgbiA9ICgqbWJfcHRyMmNoYXIpKGJ1Zik7CisJfQorI2VuZGlmCisjaWZkZWYgVU5JWAorCWlmIChuID09IGludHJfY2hhcikKKwkgICAgbiA9IEVTQzsKKyNlbmRpZgorCWJyZWFrOworICAgIH0KKworICAgIG1hcHBlZF9jdHJsX2MgPSBzYXZlX21hcHBlZF9jdHJsX2M7CisgICAgcmV0dXJuIG47Cit9CisKKy8qCisgKiBnZXQgYSBudW1iZXIgZnJvbSB0aGUgdXNlcgorICovCisgICAgaW50CitnZXRfbnVtYmVyKGNvbG9uKQorICAgIGludAljb2xvbjsJCQkvKiBhbGxvdyBjb2xvbiB0byBhYm9ydCAqLworeworICAgIGludAluID0gMDsKKyAgICBpbnQJYzsKKworICAgIC8qIFdoZW4gbm90IHByaW50aW5nIG1lc3NhZ2VzLCB0aGUgdXNlciB3b24ndCBrbm93IHdoYXQgdG8gdHlwZSwgcmV0dXJuIGEKKyAgICAgKiB6ZXJvIChhcyBpZiBDUiB3YXMgaGl0KS4gKi8KKyAgICBpZiAobXNnX3NpbGVudCAhPSAwKQorCXJldHVybiAwOworCisjaWZkZWYgVVNFX09OX0ZMWV9TQ1JPTEwKKyAgICBkb250X3Njcm9sbCA9IFRSVUU7CQkvKiBkaXNhbGxvdyBzY3JvbGxpbmcgaGVyZSAqLworI2VuZGlmCisgICAgKytub19tYXBwaW5nOworICAgICsrYWxsb3dfa2V5czsJCS8qIG5vIG1hcHBpbmcgaGVyZSwgYnV0IHJlY29nbml6ZSBrZXlzICovCisgICAgZm9yICg7OykKKyAgICB7CisJd2luZGdvdG8obXNnX3JvdywgbXNnX2NvbCk7CisJYyA9IHNhZmVfdmdldGMoKTsKKwlpZiAoVklNX0lTRElHSVQoYykpCisJeworCSAgICBuID0gbiAqIDEwICsgYyAtICcwJzsKKwkgICAgbXNnX3B1dGNoYXIoYyk7CisJfQorCWVsc2UgaWYgKGMgPT0gS19ERUwgfHwgYyA9PSBLX0tERUwgfHwgYyA9PSBLX0JTIHx8IGMgPT0gQ3RybF9IKQorCXsKKwkgICAgbiAvPSAxMDsKKwkgICAgTVNHX1BVVFMoIlxiIFxiIik7CisJfQorCWVsc2UgaWYgKG4gPT0gMCAmJiBjID09ICc6JyAmJiBjb2xvbikKKwl7CisJICAgIHN0dWZmY2hhclJlYWRidWZmKCc6Jyk7CisJICAgIGlmICghZXhtb2RlX2FjdGl2ZSkKKwkJY21kbGluZV9yb3cgPSBtc2dfcm93OworCSAgICBza2lwX3JlZHJhdyA9IFRSVUU7CSAgICAvKiBza2lwIHJlZHJhdyBvbmNlICovCisJICAgIGRvX3JlZHJhdyA9IEZBTFNFOworCSAgICBicmVhazsKKwl9CisJZWxzZSBpZiAoYyA9PSBDQVIgfHwgYyA9PSBOTCB8fCBjID09IEN0cmxfQyB8fCBjID09IEVTQykKKwkgICAgYnJlYWs7CisgICAgfQorICAgIC0tbm9fbWFwcGluZzsKKyAgICAtLWFsbG93X2tleXM7CisgICAgcmV0dXJuIG47Cit9CisKKyAgICB2b2lkCittc2dtb3JlKG4pCisgICAgbG9uZyBuOworeworICAgIGxvbmcgcG47CisKKyAgICBpZiAoZ2xvYmFsX2J1c3kJICAgIC8qIG5vIG1lc3NhZ2VzIG5vdywgd2FpdCB1bnRpbCBnbG9iYWwgaXMgZmluaXNoZWQgKi8KKwkgICAgfHwga2VlcF9tc2cgIT0gTlVMTCAvKiB0aGVyZSBpcyBhIG1lc3NhZ2UgYWxyZWFkeSwgc2tpcCB0aGlzIG9uZSAqLworCSAgICB8fCAhbWVzc2FnaW5nKCkpICAvKiAnbGF6eXJlZHJhdycgc2V0LCBkb24ndCBkbyBtZXNzYWdlcyBub3cgKi8KKwlyZXR1cm47CisKKyAgICBpZiAobiA+IDApCisJcG4gPSBuOworICAgIGVsc2UKKwlwbiA9IC1uOworCisgICAgaWYgKHBuID4gcF9yZXBvcnQpCisgICAgeworCWlmIChwbiA9PSAxKQorCXsKKwkgICAgaWYgKG4gPiAwKQorCQlTVFJDUFkobXNnX2J1ZiwgXygiMSBtb3JlIGxpbmUiKSk7CisJICAgIGVsc2UKKwkJU1RSQ1BZKG1zZ19idWYsIF8oIjEgbGluZSBsZXNzIikpOworCX0KKwllbHNlCisJeworCSAgICBpZiAobiA+IDApCisJCXNwcmludGYoKGNoYXIgKiltc2dfYnVmLCBfKCIlbGQgbW9yZSBsaW5lcyIpLCBwbik7CisJICAgIGVsc2UKKwkJc3ByaW50ZigoY2hhciAqKW1zZ19idWYsIF8oIiVsZCBmZXdlciBsaW5lcyIpLCBwbik7CisJfQorCWlmIChnb3RfaW50KQorCSAgICBTVFJDQVQobXNnX2J1ZiwgXygiIChJbnRlcnJ1cHRlZCkiKSk7CisJaWYgKG1zZyhtc2dfYnVmKSkKKwl7CisJICAgIHNldF9rZWVwX21zZyhtc2dfYnVmKTsKKwkgICAga2VlcF9tc2dfYXR0ciA9IDA7CisJfQorICAgIH0KK30KKworLyoKKyAqIGZsdXNoIG1hcCBhbmQgdHlwZWFoZWFkIGJ1ZmZlcnMgYW5kIGdpdmUgYSB3YXJuaW5nIGZvciBhbiBlcnJvcgorICovCisgICAgdm9pZAorYmVlcF9mbHVzaCgpCit7CisgICAgaWYgKGVtc2dfc2lsZW50ID09IDApCisgICAgeworCWZsdXNoX2J1ZmZlcnMoRkFMU0UpOworCXZpbV9iZWVwKCk7CisgICAgfQorfQorCisvKgorICogZ2l2ZSBhIHdhcm5pbmcgZm9yIGFuIGVycm9yCisgKi8KKyAgICB2b2lkCit2aW1fYmVlcCgpCit7CisgICAgaWYgKGVtc2dfc2lsZW50ID09IDApCisgICAgeworCWlmIChwX3ZiCisjaWZkZWYgRkVBVF9HVUkKKwkJLyogV2hpbGUgdGhlIEdVSSBpcyBzdGFydGluZyB1cCB0aGUgdGVybWNhcCBpcyBzZXQgZm9yIHRoZSBHVUkKKwkJICogYnV0IHRoZSBvdXRwdXQgc3RpbGwgZ29lcyB0byBhIHRlcm1pbmFsLiAqLworCQkmJiAhKGd1aS5pbl91c2UgJiYgZ3VpLnN0YXJ0aW5nKQorI2VuZGlmCisJCSkKKwl7CisJICAgIG91dF9zdHIoVF9WQik7CisJfQorCWVsc2UKKwl7CisjaWZkZWYgTVNET1MKKwkgICAgLyoKKwkgICAgICogVGhlIG51bWJlciBvZiBiZWVwcyBvdXRwdXR0ZWQgaXMgcmVkdWNlZCB0byBhdm9pZCBoYXZpbmcgdG8gd2FpdAorCSAgICAgKiBmb3IgYWxsIHRoZSBiZWVwcyB0byBmaW5pc2guIFRoaXMgaXMgb25seSBhIHByb2JsZW0gb24gc3lzdGVtcworCSAgICAgKiB3aGVyZSB0aGUgYmVlcHMgZG9uJ3Qgb3ZlcmxhcC4KKwkgICAgICovCisJICAgIGlmIChiZWVwX2NvdW50ID09IDAgfHwgYmVlcF9jb3VudCA9PSAxMCkKKwkgICAgeworCQlvdXRfY2hhcihCRUxMKTsKKwkJYmVlcF9jb3VudCA9IDE7CisJICAgIH0KKwkgICAgZWxzZQorCQkrK2JlZXBfY291bnQ7CisjZWxzZQorCSAgICBvdXRfY2hhcihCRUxMKTsKKyNlbmRpZgorCX0KKyAgICB9Cit9CisKKy8qCisgKiBUbyBnZXQgdGhlICJyZWFsIiBob21lIGRpcmVjdG9yeToKKyAqIC0gZ2V0IHZhbHVlIG9mICRIT01FCisgKiBGb3IgVW5peDoKKyAqICAtIGdvIHRvIHRoYXQgZGlyZWN0b3J5CisgKiAgLSBkbyBtY2hfZGlybmFtZSgpIHRvIGdldCB0aGUgcmVhbCBuYW1lIG9mIHRoYXQgZGlyZWN0b3J5LgorICogIFRoaXMgYWxzbyB3b3JrcyB3aXRoIG1vdW50cyBhbmQgbGlua3MuCisgKiAgRG9uJ3QgZG8gdGhpcyBmb3IgTVMtRE9TLCBpdCB3aWxsIGNoYW5nZSB0aGUgImN1cnJlbnQgZGlyIiBmb3IgYSBkcml2ZS4KKyAqLworc3RhdGljIGNoYXJfdQkqaG9tZWRpciA9IE5VTEw7CisKKyAgICB2b2lkCitpbml0X2hvbWVkaXIoKQoreworICAgIGNoYXJfdSAgKnZhcjsKKworI2lmZGVmIFZNUworICAgIHZhciA9IG1jaF9nZXRlbnYoKGNoYXJfdSAqKSJTWVMkTE9HSU4iKTsKKyNlbHNlCisgICAgdmFyID0gbWNoX2dldGVudigoY2hhcl91ICopIkhPTUUiKTsKKyNlbmRpZgorCisgICAgaWYgKHZhciAhPSBOVUxMICYmICp2YXIgPT0gTlVMKQkvKiBlbXB0eSBpcyBzYW1lIGFzIG5vdCBzZXQgKi8KKwl2YXIgPSBOVUxMOworCisjaWZkZWYgV0lOMzI2NAorICAgIC8qCisgICAgICogV2VpcmQgYnV0IHRydWU6ICRIT01FIG1heSBjb250YWluIGFuIGluZGlyZWN0IHJlZmVyZW5jZSB0byBhbm90aGVyCisgICAgICogdmFyaWFibGUsIGVzcC4gIiVVU0VSUFJPRklMRSUiLiAgSGFwcGVucyB3aGVuICRVU0VSUFJPRklMRSBpc24ndCBzZXQKKyAgICAgKiB3aGVuICRIT01FIGlzIGJlaW5nIHNldC4KKyAgICAgKi8KKyAgICBpZiAodmFyICE9IE5VTEwgJiYgKnZhciA9PSAnJScpCisgICAgeworCWNoYXJfdQkqcDsKKwljaGFyX3UJKmV4cDsKKworCXAgPSB2aW1fc3RyY2hyKHZhciArIDEsICclJyk7CisJaWYgKHAgIT0gTlVMTCkKKwl7CisJICAgIFNUUk5DUFkoTmFtZUJ1ZmYsIHZhciArIDEsIHAgLSAodmFyICsgMSkpOworCSAgICBOYW1lQnVmZltwIC0gKHZhciArIDEpXSA9IE5VTDsKKwkgICAgZXhwID0gbWNoX2dldGVudihOYW1lQnVmZik7CisJICAgIGlmIChleHAgIT0gTlVMTCAmJiAqZXhwICE9IE5VTAorCQkJCQkmJiBTVFJMRU4oZXhwKSArIFNUUkxFTihwKSA8IE1BWFBBVEhMKQorCSAgICB7CisJCXNwcmludGYoKGNoYXIgKilOYW1lQnVmZiwgIiVzJXMiLCBleHAsIHAgKyAxKTsKKwkJdmFyID0gTmFtZUJ1ZmY7CisJCS8qIEFsc28gc2V0ICRIT01FLCBpdCdzIG5lZWRlZCBmb3IgX3ZpbWluZm8uICovCisJCXZpbV9zZXRlbnYoKGNoYXJfdSAqKSJIT01FIiwgTmFtZUJ1ZmYpOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogVHlwaWNhbGx5LCAkSE9NRSBpcyBub3QgZGVmaW5lZCBvbiBXaW5kb3dzLCB1bmxlc3MgdGhlIHVzZXIgaGFzCisgICAgICogc3BlY2lmaWNhbGx5IGRlZmluZWQgaXQgZm9yIFZpbSdzIHNha2UuICBIb3dldmVyLCBvbiBXaW5kb3dzIE5UCisgICAgICogcGxhdGZvcm1zLCAkSE9NRURSSVZFIGFuZCAkSE9NRVBBVEggYXJlIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBmb3IKKyAgICAgKiBlYWNoIHVzZXIuICBUcnkgY29uc3RydWN0aW5nICRIT01FIGZyb20gdGhlc2UuCisgICAgICovCisgICAgaWYgKHZhciA9PSBOVUxMKQorICAgIHsKKwljaGFyX3UgKmhvbWVkcml2ZSwgKmhvbWVwYXRoOworCisJaG9tZWRyaXZlID0gbWNoX2dldGVudigoY2hhcl91ICopIkhPTUVEUklWRSIpOworCWhvbWVwYXRoID0gbWNoX2dldGVudigoY2hhcl91ICopIkhPTUVQQVRIIik7CisJaWYgKGhvbWVkcml2ZSAhPSBOVUxMICYmIGhvbWVwYXRoICE9IE5VTEwKKwkJCSAgICYmIFNUUkxFTihob21lZHJpdmUpICsgU1RSTEVOKGhvbWVwYXRoKSA8IE1BWFBBVEhMKQorCXsKKwkgICAgc3ByaW50ZigoY2hhciAqKU5hbWVCdWZmLCAiJXMlcyIsIGhvbWVkcml2ZSwgaG9tZXBhdGgpOworCSAgICBpZiAoTmFtZUJ1ZmZbMF0gIT0gTlVMKQorCSAgICB7CisJCXZhciA9IE5hbWVCdWZmOworCQkvKiBBbHNvIHNldCAkSE9NRSwgaXQncyBuZWVkZWQgZm9yIF92aW1pbmZvLiAqLworCQl2aW1fc2V0ZW52KChjaGFyX3UgKikiSE9NRSIsIE5hbWVCdWZmKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKQorICAgIC8qCisgICAgICogRGVmYXVsdCBob21lIGRpciBpcyBDOi8KKyAgICAgKiBCZXN0IGFzc3VtcHRpb24gd2UgY2FuIG1ha2UgaW4gc3VjaCBhIHNpdHVhdGlvbi4KKyAgICAgKi8KKyAgICBpZiAodmFyID09IE5VTEwpCisJdmFyID0gIkM6LyI7CisjZW5kaWYKKyAgICBpZiAodmFyICE9IE5VTEwpCisgICAgeworI2lmZGVmIFVOSVgKKwkvKgorCSAqIENoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGFuZCBnZXQgdGhlIGFjdHVhbCBwYXRoLiAgVGhpcyByZXNvbHZlcworCSAqIGxpbmtzLiAgRG9uJ3QgZG8gaXQgd2hlbiB3ZSBjYW4ndCByZXR1cm4uCisJICovCisJaWYgKG1jaF9kaXJuYW1lKE5hbWVCdWZmLCBNQVhQQVRITCkgPT0gT0sKKwkJCQkJICAmJiBtY2hfY2hkaXIoKGNoYXIgKilOYW1lQnVmZikgPT0gMCkKKwl7CisJICAgIGlmICghbWNoX2NoZGlyKChjaGFyICopdmFyKSAmJiBtY2hfZGlybmFtZShJT2J1ZmYsIElPU0laRSkgPT0gT0spCisJCXZhciA9IElPYnVmZjsKKwkgICAgaWYgKG1jaF9jaGRpcigoY2hhciAqKU5hbWVCdWZmKSAhPSAwKQorCQlFTVNHKF8oZV9wcmV2X2RpcikpOworCX0KKyNlbmRpZgorCWhvbWVkaXIgPSB2aW1fc3Ryc2F2ZSh2YXIpOworICAgIH0KK30KKworLyoKKyAqIEV4cGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHBhdGggbmFtZS4KKyAqICJ+LyIgaXMgYWxzbyBleHBhbmRlZCwgdXNpbmcgJEhPTUUuCUZvciBVbml4ICJ+dXNlci8iIGlzIGV4cGFuZGVkLgorICogU2tpcHMgb3ZlciAiXCAiLCAiXH4iIGFuZCAiXCQiLgorICogSWYgYW55dGhpbmcgZmFpbHMgbm8gZXhwYW5zaW9uIGlzIGRvbmUgYW5kIGRzdCBlcXVhbHMgc3JjLgorICovCisgICAgdm9pZAorZXhwYW5kX2VudihzcmMsIGRzdCwgZHN0bGVuKQorICAgIGNoYXJfdQkqc3JjOwkJLyogaW5wdXQgc3RyaW5nIGUuZy4gIiRIT01FL3ZpbS5obHAiICovCisgICAgY2hhcl91CSpkc3Q7CQkvKiB3aGVyZSB0byBwdXQgdGhlIHJlc3VsdCAqLworICAgIGludAkJZHN0bGVuOwkJLyogbWF4aW11bSBsZW5ndGggb2YgdGhlIHJlc3VsdCAqLworeworICAgIGV4cGFuZF9lbnZfZXNjKHNyYywgZHN0LCBkc3RsZW4sIEZBTFNFKTsKK30KKworICAgIHZvaWQKK2V4cGFuZF9lbnZfZXNjKHNyYywgZHN0LCBkc3RsZW4sIGVzYykKKyAgICBjaGFyX3UJKnNyYzsJCS8qIGlucHV0IHN0cmluZyBlLmcuICIkSE9NRS92aW0uaGxwIiAqLworICAgIGNoYXJfdQkqZHN0OwkJLyogd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQgKi8KKyAgICBpbnQJCWRzdGxlbjsJCS8qIG1heGltdW0gbGVuZ3RoIG9mIHRoZSByZXN1bHQgKi8KKyAgICBpbnQJCWVzYzsJCS8qIGVzY2FwZSBzcGFjZXMgaW4gZXhwYW5kZWQgdmFyaWFibGVzICovCit7CisgICAgY2hhcl91CSp0YWlsOworICAgIGludAkJYzsKKyAgICBjaGFyX3UJKnZhcjsKKyAgICBpbnQJCWNvcHlfY2hhcjsKKyAgICBpbnQJCW11c3RmcmVlOwkvKiB2YXIgd2FzIGFsbG9jYXRlZCwgbmVlZCB0byBmcmVlIGl0IGxhdGVyICovCisgICAgaW50CQlhdF9zdGFydCA9IFRSVUU7IC8qIGF0IHN0YXJ0IG9mIGEgbmFtZSAqLworCisgICAgc3JjID0gc2tpcHdoaXRlKHNyYyk7CisgICAgLS1kc3RsZW47CQkgICAgLyogbGVhdmUgb25lIGNoYXIgc3BhY2UgZm9yICJcLCIgKi8KKyAgICB3aGlsZSAoKnNyYyAmJiBkc3RsZW4gPiAwKQorICAgIHsKKwljb3B5X2NoYXIgPSBUUlVFOworCWlmICgqc3JjID09ICckJworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoT1MyKQorCQl8fCAqc3JjID09ICclJworI2VuZGlmCisJCXx8ICgqc3JjID09ICd+JyAmJiBhdF9zdGFydCkpCisJeworCSAgICBtdXN0ZnJlZSA9IEZBTFNFOworCisJICAgIC8qCisJICAgICAqIFRoZSB2YXJpYWJsZSBuYW1lIGlzIGNvcGllZCBpbnRvIGRzdCB0ZW1wb3JhcmlseSwgYmVjYXVzZSBpdCBtYXkKKwkgICAgICogYmUgYSBzdHJpbmcgaW4gcmVhZC1vbmx5IG1lbW9yeSBhbmQgYSBOVUwgbmVlZHMgdG8gYmUgYXBwZW5kZWQuCisJICAgICAqLworCSAgICBpZiAoKnNyYyAhPSAnficpCQkJCS8qIGVudmlyb25tZW50IHZhciAqLworCSAgICB7CisJCXRhaWwgPSBzcmMgKyAxOworCQl2YXIgPSBkc3Q7CisJCWMgPSBkc3RsZW4gLSAxOworCisjaWZkZWYgVU5JWAorCQkvKiBVbml4IGhhcyAke3Zhci1uYW1lfSB0eXBlIGVudmlyb25tZW50IHZhcnMgKi8KKwkJaWYgKCp0YWlsID09ICd7JyAmJiAhdmltX2lzSURjKCd7JykpCisJCXsKKwkJICAgIHRhaWwrKzsJLyogaWdub3JlICd7JyAqLworCQkgICAgd2hpbGUgKGMtLSA+IDAgJiYgKnRhaWwgJiYgKnRhaWwgIT0gJ30nKQorCQkJKnZhcisrID0gKnRhaWwrKzsKKwkJfQorCQllbHNlCisjZW5kaWYKKwkJeworCQkgICAgd2hpbGUgKGMtLSA+IDAgJiYgKnRhaWwgIT0gTlVMICYmICgodmltX2lzSURjKCp0YWlsKSkKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKE9TMikKKwkJCSAgICB8fCAoKnNyYyA9PSAnJScgJiYgKnRhaWwgIT0gJyUnKQorI2VuZGlmCisJCQkgICAgKSkKKwkJICAgIHsKKyNpZmRlZiBPUzIJCS8qIGVudiB2YXJzIG9ubHkgaW4gdXBwZXJjYXNlICovCisJCQkqdmFyKysgPSBUT1VQUEVSX0xPQygqdGFpbCk7CisJCQl0YWlsKys7CSAgICAvKiB0b3VwcGVyKCkgbWF5IGJlIGEgbWFjcm8hICovCisjZWxzZQorCQkJKnZhcisrID0gKnRhaWwrKzsKKyNlbmRpZgorCQkgICAgfQorCQl9CisKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChVTklYKQorIyBpZmRlZiBVTklYCisJCWlmIChzcmNbMV0gPT0gJ3snICYmICp0YWlsICE9ICd9JykKKyMgZWxzZQorCQlpZiAoKnNyYyA9PSAnJScgJiYgKnRhaWwgIT0gJyUnKQorIyBlbmRpZgorCQkgICAgdmFyID0gTlVMTDsKKwkJZWxzZQorCQl7CisjIGlmZGVmIFVOSVgKKwkJICAgIGlmIChzcmNbMV0gPT0gJ3snKQorIyBlbHNlCisJCSAgICBpZiAoKnNyYyA9PSAnJScpCisjZW5kaWYKKwkJCSsrdGFpbDsKKyNlbmRpZgorCQkgICAgKnZhciA9IE5VTDsKKwkJICAgIHZhciA9IHZpbV9nZXRlbnYoZHN0LCAmbXVzdGZyZWUpOworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFVOSVgpCisJCX0KKyNlbmRpZgorCSAgICB9CisJCQkJCQkJLyogaG9tZSBkaXJlY3RvcnkgKi8KKwkgICAgZWxzZSBpZiAoICBzcmNbMV0gPT0gTlVMCisJCSAgICB8fCB2aW1faXNwYXRoc2VwKHNyY1sxXSkKKwkJICAgIHx8IHZpbV9zdHJjaHIoKGNoYXJfdSAqKSIgLFx0XG4iLCBzcmNbMV0pICE9IE5VTEwpCisJICAgIHsKKwkJdmFyID0gaG9tZWRpcjsKKwkJdGFpbCA9IHNyYyArIDE7CisJICAgIH0KKwkgICAgZWxzZQkJCQkJLyogdXNlciBkaXJlY3RvcnkgKi8KKwkgICAgeworI2lmIGRlZmluZWQoVU5JWCkgfHwgKGRlZmluZWQoVk1TKSAmJiBkZWZpbmVkKFVTRVJfSE9NRSkpCisJCS8qCisJCSAqIENvcHkgfnVzZXIgdG8gZHN0W10sIHNvIHdlIGNhbiBwdXQgYSBOVUwgYWZ0ZXIgaXQuCisJCSAqLworCQl0YWlsID0gc3JjOworCQl2YXIgPSBkc3Q7CisJCWMgPSBkc3RsZW4gLSAxOworCQl3aGlsZSAoCSAgIGMtLSA+IDAKKwkJCSYmICp0YWlsCisJCQkmJiB2aW1faXNmaWxlYygqdGFpbCkKKwkJCSYmICF2aW1faXNwYXRoc2VwKCp0YWlsKSkKKwkJICAgICp2YXIrKyA9ICp0YWlsKys7CisJCSp2YXIgPSBOVUw7CisjIGlmZGVmIFVOSVgKKwkJLyoKKwkJICogSWYgdGhlIHN5c3RlbSBzdXBwb3J0cyBnZXRwd25hbSgpLCB1c2UgaXQuCisJCSAqIE90aGVyd2lzZSwgb3IgaWYgZ2V0cHduYW0oKSBmYWlscywgdGhlIHNoZWxsIGlzIHVzZWQgdG8KKwkJICogZXhwYW5kIH51c2VyLiAgVGhpcyBpcyBzbG93ZXIgYW5kIG1heSBmYWlsIGlmIHRoZSBzaGVsbAorCQkgKiBkb2VzIG5vdCBzdXBwb3J0IH51c2VyIChvbGQgdmVyc2lvbnMgb2YgL2Jpbi9zaCkuCisJCSAqLworIyAgaWYgZGVmaW5lZChIQVZFX0dFVFBXTkFNKSAmJiBkZWZpbmVkKEhBVkVfUFdEX0gpCisJCXsKKwkJICAgIHN0cnVjdCBwYXNzd2QgKnB3OworCisJCSAgICBwdyA9IGdldHB3bmFtKChjaGFyICopZHN0ICsgMSk7CisJCSAgICBpZiAocHcgIT0gTlVMTCkKKwkJCXZhciA9IChjaGFyX3UgKilwdy0+cHdfZGlyOworCQkgICAgZWxzZQorCQkJdmFyID0gTlVMTDsKKwkJfQorCQlpZiAodmFyID09IE5VTEwpCisjICBlbmRpZgorCQl7CisJCSAgICBleHBhbmRfVAl4cGM7CisKKwkJICAgIEV4cGFuZEluaXQoJnhwYyk7CisJCSAgICB4cGMueHBfY29udGV4dCA9IEVYUEFORF9GSUxFUzsKKwkJICAgIHZhciA9IEV4cGFuZE9uZSgmeHBjLCBkc3QsIE5VTEwsCisJCQkJV0lMRF9BRERfU0xBU0h8V0lMRF9TSUxFTlQsIFdJTERfRVhQQU5EX0ZSRUUpOworCQkgICAgRXhwYW5kQ2xlYW51cCgmeHBjKTsKKwkJICAgIG11c3RmcmVlID0gVFJVRTsKKwkJfQorCisjIGVsc2UJLyogIVVOSVgsIHRodXMgVk1TICovCisJCS8qCisJCSAqIFVTRVJfSE9NRSBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mCisJCSAqIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgdGhlIHVzZXIgYWNjb3VudCBpbi4KKwkJICovCisJCXsKKwkJICAgIGNoYXJfdQl0ZXN0W01BWFBBVEhMXSwgcGF0aHNbTUFYUEFUSExdOworCQkgICAgY2hhcl91CSpwYXRoLCAqbmV4dF9wYXRoLCAqcHRyOworCQkgICAgc3RydWN0IHN0YXQJc3Q7CisKKwkJICAgIFNUUkNQWShwYXRocywgVVNFUl9IT01FKTsKKwkJICAgIG5leHRfcGF0aCA9IHBhdGhzOworCQkgICAgd2hpbGUgKCpuZXh0X3BhdGgpCisJCSAgICB7CisJCQlmb3IgKHBhdGggPSBuZXh0X3BhdGg7ICpuZXh0X3BhdGggJiYgKm5leHRfcGF0aCAhPSAnLCc7CisJCQkJbmV4dF9wYXRoKyspOworCQkJaWYgKCpuZXh0X3BhdGgpCisJCQkgICAgKm5leHRfcGF0aCsrID0gTlVMOworCQkJU1RSQ1BZKHRlc3QsIHBhdGgpOworCQkJU1RSQ0FUKHRlc3QsICIvIik7CisJCQlTVFJDQVQodGVzdCwgZHN0ICsgMSk7CisJCQlpZiAobWNoX3N0YXQodGVzdCwgJnN0KSA9PSAwKQorCQkJeworCQkJICAgIHZhciA9IGFsbG9jKFNUUkxFTih0ZXN0KSArIDEpOworCQkJICAgIFNUUkNQWSh2YXIsIHRlc3QpOworCQkJICAgIG11c3RmcmVlID0gVFJVRTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorIyBlbmRpZiAvKiBVTklYICovCisjZWxzZQorCQkvKiBjYW5ub3QgZXhwYW5kIHVzZXIncyBob21lIGRpcmVjdG9yeSwgc28gZG9uJ3QgdHJ5ICovCisJCXZhciA9IE5VTEw7CisJCXRhaWwgPSAoY2hhcl91ICopIiI7CS8qIGZvciBnY2MgKi8KKyNlbmRpZiAvKiBVTklYIHx8IFZNUyAqLworCSAgICB9CisKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwkgICAgLyogSWYgJ3NoZWxsc2xhc2gnIGlzIHNldCBjaGFuZ2UgYmFja3NsYXNoZXMgdG8gZm9yd2FyZCBzbGFzaGVzLgorCSAgICAgKiBDYW4ndCB1c2Ugc2xhc2hfYWRqdXN0KCksIHBfc3NsIG1heSBiZSBzZXQgdGVtcG9yYXJpbHkuICovCisJICAgIGlmIChwX3NzbCAmJiB2YXIgIT0gTlVMTCAmJiB2aW1fc3RyY2hyKHZhciwgJ1xcJykgIT0gTlVMTCkKKwkgICAgeworCQljaGFyX3UJKnAgPSB2aW1fc3Ryc2F2ZSh2YXIpOworCisJCWlmIChwICE9IE5VTEwpCisJCXsKKwkJICAgIGlmIChtdXN0ZnJlZSkKKwkJCXZpbV9mcmVlKHZhcik7CisJCSAgICB2YXIgPSBwOworCQkgICAgbXVzdGZyZWUgPSBUUlVFOworCQkgICAgZm9yd2FyZF9zbGFzaCh2YXIpOworCQl9CisJICAgIH0KKyNlbmRpZgorCisJICAgIC8qIElmICJ2YXIiIGNvbnRhaW5zIHdoaXRlIHNwYWNlLCBlc2NhcGUgaXQgd2l0aCBhIGJhY2tzbGFzaC4KKwkgICAgICogUmVxdWlyZWQgZm9yICI6ZSB+L3R0IiB3aGVuICRIT01FIGluY2x1ZGVzIGEgc3BhY2UuICovCisJICAgIGlmIChlc2MgJiYgdmFyICE9IE5VTEwgJiYgdmltX3N0cnBicmsodmFyLCAoY2hhcl91ICopIiBcdCIpICE9IE5VTEwpCisJICAgIHsKKwkJY2hhcl91CSpwID0gdmltX3N0cnNhdmVfZXNjYXBlZCh2YXIsIChjaGFyX3UgKikiIFx0Iik7CisKKwkJaWYgKHAgIT0gTlVMTCkKKwkJeworCQkgICAgaWYgKG11c3RmcmVlKQorCQkJdmltX2ZyZWUodmFyKTsKKwkJICAgIHZhciA9IHA7CisJCSAgICBtdXN0ZnJlZSA9IFRSVUU7CisJCX0KKwkgICAgfQorCisJICAgIGlmICh2YXIgIT0gTlVMTCAmJiAqdmFyICE9IE5VTAorCQkgICAgJiYgKFNUUkxFTih2YXIpICsgU1RSTEVOKHRhaWwpICsgMSA8ICh1bnNpZ25lZClkc3RsZW4pKQorCSAgICB7CisJCVNUUkNQWShkc3QsIHZhcik7CisJCWRzdGxlbiAtPSAoaW50KVNUUkxFTih2YXIpOworCQlkc3QgKz0gU1RSTEVOKHZhcik7CisJCS8qIGlmIHZhcltdIGVuZHMgaW4gYSBwYXRoIHNlcGFyYXRvciBhbmQgdGFpbFtdIHN0YXJ0cworCQkgKiB3aXRoIGl0LCBza2lwIGEgY2hhcmFjdGVyICovCisJCWlmICgqdmFyICE9IE5VTCAmJiB2aW1faXNwYXRoc2VwKGRzdFstMV0pCisjaWYgZGVmaW5lZChCQUNLU0xBU0hfSU5fRklMRU5BTUUpIHx8IGRlZmluZWQoQU1JR0EpCisJCQkmJiBkc3RbLTFdICE9ICc6JworI2VuZGlmCisJCQkmJiB2aW1faXNwYXRoc2VwKCp0YWlsKSkKKwkJICAgICsrdGFpbDsKKwkJc3JjID0gdGFpbDsKKwkJY29weV9jaGFyID0gRkFMU0U7CisJICAgIH0KKwkgICAgaWYgKG11c3RmcmVlKQorCQl2aW1fZnJlZSh2YXIpOworCX0KKworCWlmIChjb3B5X2NoYXIpCSAgICAvKiBjb3B5IGF0IGxlYXN0IG9uZSBjaGFyICovCisJeworCSAgICAvKgorCSAgICAgKiBSZWNvZ2l6ZSB0aGUgc3RhcnQgb2YgYSBuZXcgbmFtZSwgZm9yICd+Jy4KKwkgICAgICovCisJICAgIGF0X3N0YXJ0ID0gRkFMU0U7CisJICAgIGlmIChzcmNbMF0gPT0gJ1xcJyAmJiBzcmNbMV0gIT0gTlVMKQorCSAgICB7CisJCSpkc3QrKyA9ICpzcmMrKzsKKwkJLS1kc3RsZW47CisJICAgIH0KKwkgICAgZWxzZSBpZiAoc3JjWzBdID09ICcgJyB8fCBzcmNbMF0gPT0gJywnKQorCQlhdF9zdGFydCA9IFRSVUU7CisJICAgICpkc3QrKyA9ICpzcmMrKzsKKwkgICAgLS1kc3RsZW47CisJfQorICAgIH0KKyAgICAqZHN0ID0gTlVMOworfQorCisvKgorICogVmltJ3MgdmVyc2lvbiBvZiBnZXRlbnYoKS4KKyAqIFNwZWNpYWwgaGFuZGxpbmcgb2YgJEhPTUUsICRWSU0gYW5kICRWSU1SVU5USU1FLgorICovCisgICAgY2hhcl91ICoKK3ZpbV9nZXRlbnYobmFtZSwgbXVzdGZyZWUpCisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJKm11c3RmcmVlOwkvKiBzZXQgdG8gVFJVRSB3aGVuIHJldHVybmVkIGlzIGFsbG9jYXRlZCAqLworeworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKnBlbmQ7CisgICAgaW50CQl2aW1ydW50aW1lOworCisjaWYgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pCisgICAgLyogdXNlICJDOi8iIHdoZW4gJEhPTUUgaXMgbm90IHNldCAqLworICAgIGlmIChTVFJDTVAobmFtZSwgIkhPTUUiKSA9PSAwKQorCXJldHVybiBob21lZGlyOworI2VuZGlmCisKKyAgICBwID0gbWNoX2dldGVudihuYW1lKTsKKyAgICBpZiAocCAhPSBOVUxMICYmICpwID09IE5VTCkJICAgIC8qIGVtcHR5IGlzIHRoZSBzYW1lIGFzIG5vdCBzZXQgKi8KKwlwID0gTlVMTDsKKworICAgIGlmIChwICE9IE5VTEwpCisJcmV0dXJuIHA7CisKKyAgICB2aW1ydW50aW1lID0gKFNUUkNNUChuYW1lLCAiVklNUlVOVElNRSIpID09IDApOworICAgIGlmICghdmltcnVudGltZSAmJiBTVFJDTVAobmFtZSwgIlZJTSIpICE9IDApCisJcmV0dXJuIE5VTEw7CisKKyAgICAvKgorICAgICAqIFdoZW4gZXhwYW5kaW5nICRWSU1SVU5USU1FIGZhaWxzLCB0cnkgdXNpbmcgJFZJTS92aW08dmVyc2lvbj4gb3IgJFZJTS4KKyAgICAgKiBEb24ndCBkbyB0aGlzIHdoZW4gZGVmYXVsdF92aW1ydW50aW1lX2RpciBpcyBub24tZW1wdHkuCisgICAgICovCisgICAgaWYgKHZpbXJ1bnRpbWUKKyNpZmRlZiBIQVZFX1BBVEhERUYKKwkgICAgJiYgKmRlZmF1bHRfdmltcnVudGltZV9kaXIgPT0gTlVMCisjZW5kaWYKKyAgICAgICApCisgICAgeworCXAgPSBtY2hfZ2V0ZW52KChjaGFyX3UgKikiVklNIik7CisJaWYgKHAgIT0gTlVMTCAmJiAqcCA9PSBOVUwpCSAgICAvKiBlbXB0eSBpcyB0aGUgc2FtZSBhcyBub3Qgc2V0ICovCisJICAgIHAgPSBOVUxMOworCWlmIChwICE9IE5VTEwpCisJeworCSAgICBwID0gdmltX3ZlcnNpb25fZGlyKHApOworCSAgICBpZiAocCAhPSBOVUxMKQorCQkqbXVzdGZyZWUgPSBUUlVFOworCSAgICBlbHNlCisJCXAgPSBtY2hfZ2V0ZW52KChjaGFyX3UgKikiVklNIik7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogV2hlbiBleHBhbmRpbmcgJFZJTSBvciAkVklNUlVOVElNRSBmYWlscywgdHJ5IHVzaW5nOgorICAgICAqIC0gdGhlIGRpcmVjdG9yeSBuYW1lIGZyb20gJ2hlbHBmaWxlJyAodW5sZXNzIGl0IGNvbnRhaW5zICckJykKKyAgICAgKiAtIHRoZSBleGVjdXRhYmxlIG5hbWUgZnJvbSBhcmd2WzBdCisgICAgICovCisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICB7CisJaWYgKHBfaGYgIT0gTlVMTCAmJiB2aW1fc3RyY2hyKHBfaGYsICckJykgPT0gTlVMTCkKKwkgICAgcCA9IHBfaGY7CisjaWZkZWYgVVNFX0VYRV9OQU1FCisJLyoKKwkgKiBVc2UgdGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUsIG9idGFpbmVkIGZyb20gYXJndlswXS4KKwkgKi8KKwllbHNlCisJICAgIHAgPSBleGVfbmFtZTsKKyNlbmRpZgorCWlmIChwICE9IE5VTEwpCisJeworCSAgICAvKiByZW1vdmUgdGhlIGZpbGUgbmFtZSAqLworCSAgICBwZW5kID0gZ2V0dGFpbChwKTsKKworCSAgICAvKiByZW1vdmUgImRvYy8iIGZyb20gJ2hlbHBmaWxlJywgaWYgcHJlc2VudCAqLworCSAgICBpZiAocCA9PSBwX2hmKQorCQlwZW5kID0gcmVtb3ZlX3RhaWwocCwgcGVuZCwgKGNoYXJfdSAqKSJkb2MiKTsKKworI2lmZGVmIFVTRV9FWEVfTkFNRQorIyBpZmRlZiBNQUNPU19YCisJICAgIC8qIHJlbW92ZSAiYnVpbGQvLi4uIiBmcm9tIGV4ZV9uYW1lLCBpZiBwcmVzZW50ICovCisJICAgIGlmIChwID09IGV4ZV9uYW1lKQorCSAgICB7CisJCWNoYXJfdQkqcGVuZDE7CisJCWNoYXJfdSAgKnBlbmQyOworCisJCXBlbmQxID0gcmVtb3ZlX3RhaWwocCwgcGVuZCwgKGNoYXJfdSAqKSJDb250ZW50cy9NYWNPUyIpOworCQlwZW5kMiA9IHJlbW92ZV90YWlsX3dpdGhfZXh0KHAsIHBlbmQxLCAoY2hhcl91ICopIi5hcHAiKTsKKwkJcGVuZCA9IHJlbW92ZV90YWlsKHAsIHBlbmQyLCAoY2hhcl91ICopImJ1aWxkIik7CisJCS8qIFdoZW4gcnVubmlnIGZyb20gcHJvamVjdCBidWlsZGVyIGdldCByaWQgb2YgdGhlCisJCSAqIGJ1aWxkLz8/Py5hcHAsIG90aGVyd2lzZSBrZWVwIHRoZSA/Pz8uYXBwICovCisJCWlmIChwZW5kMiA9PSBwZW5kKQorCQkgICAgcGVuZCA9IHBlbmQxOworCSAgICB9CisjIGVuZGlmCisJICAgIC8qIHJlbW92ZSAic3JjLyIgZnJvbSBleGVfbmFtZSwgaWYgcHJlc2VudCAqLworCSAgICBpZiAocCA9PSBleGVfbmFtZSkKKwkJcGVuZCA9IHJlbW92ZV90YWlsKHAsIHBlbmQsIChjaGFyX3UgKikic3JjIik7CisjZW5kaWYKKworCSAgICAvKiBmb3IgJFZJTSwgcmVtb3ZlICJydW50aW1lLyIgb3IgInZpbTU0LyIsIGlmIHByZXNlbnQgKi8KKwkgICAgaWYgKCF2aW1ydW50aW1lKQorCSAgICB7CisJCXBlbmQgPSByZW1vdmVfdGFpbChwLCBwZW5kLCAoY2hhcl91ICopUlVOVElNRV9ESVJOQU1FKTsKKwkJcGVuZCA9IHJlbW92ZV90YWlsKHAsIHBlbmQsIChjaGFyX3UgKilWSU1fVkVSU0lPTl9OT0RPVCk7CisJICAgIH0KKworCSAgICAvKiByZW1vdmUgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgKi8KKyNpZm5kZWYgTUFDT1NfQ0xBU1NJQworCSAgICAvKiBXaXRoIE1hY09TIHBhdGggKHdpdGggIGNvbG9ucykgdGhlIGZpbmFsIGNvbG9uIGlzIHJlcXVpcmVkICovCisJICAgIC8qIHRvIGF2b2lkIGNvbmZ1c2lvbiBiZXR3ZWVuIGFic291bHV0ZSBhbmQgcmVsYXRpdmUgcGF0aCAqLworCSAgICBpZiAocGVuZCA+IHAgJiYgdmltX2lzcGF0aHNlcCgqKHBlbmQgLSAxKSkpCisJCS0tcGVuZDsKKyNlbmRpZgorCisJICAgIC8qIGNoZWNrIHRoYXQgdGhlIHJlc3VsdCBpcyBhIGRpcmVjdG9yeSBuYW1lICovCisJICAgIHAgPSB2aW1fc3RybnNhdmUocCwgKGludCkocGVuZCAtIHApKTsKKworCSAgICBpZiAocCAhPSBOVUxMICYmICFtY2hfaXNkaXIocCkpCisJICAgIHsKKwkJdmltX2ZyZWUocCk7CisJCXAgPSBOVUxMOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworI2lmZGVmIFVTRV9FWEVfTkFNRQorCQkvKiBtYXkgYWRkICIvdmltNTQiIG9yICIvcnVudGltZSIgaWYgaXQgZXhpc3RzICovCisJCWlmICh2aW1ydW50aW1lICYmIChwZW5kID0gdmltX3ZlcnNpb25fZGlyKHApKSAhPSBOVUxMKQorCQl7CisJCSAgICB2aW1fZnJlZShwKTsKKwkJICAgIHAgPSBwZW5kOworCQl9CisjZW5kaWYKKwkJKm11c3RmcmVlID0gVFJVRTsKKwkgICAgfQorCX0KKyAgICB9CisKKyNpZmRlZiBIQVZFX1BBVEhERUYKKyAgICAvKiBXaGVuIHRoZXJlIGlzIGEgcGF0aGRlZi5jIGZpbGUgd2UgY2FuIHVzZSBkZWZhdWx0X3ZpbV9kaXIgYW5kCisgICAgICogZGVmYXVsdF92aW1ydW50aW1lX2RpciAqLworICAgIGlmIChwID09IE5VTEwpCisgICAgeworCS8qIE9ubHkgdXNlIGRlZmF1bHRfdmltcnVudGltZV9kaXIgd2hlbiBpdCBpcyBub3QgZW1wdHkgKi8KKwlpZiAodmltcnVudGltZSAmJiAqZGVmYXVsdF92aW1ydW50aW1lX2RpciAhPSBOVUwpCisJeworCSAgICBwID0gZGVmYXVsdF92aW1ydW50aW1lX2RpcjsKKwkgICAgKm11c3RmcmVlID0gRkFMU0U7CisJfQorCWVsc2UgaWYgKCpkZWZhdWx0X3ZpbV9kaXIgIT0gTlVMKQorCXsKKwkgICAgaWYgKHZpbXJ1bnRpbWUgJiYgKHAgPSB2aW1fdmVyc2lvbl9kaXIoZGVmYXVsdF92aW1fZGlyKSkgIT0gTlVMTCkKKwkJKm11c3RmcmVlID0gVFJVRTsKKwkgICAgZWxzZQorCSAgICB7CisJCXAgPSBkZWZhdWx0X3ZpbV9kaXI7CisJCSptdXN0ZnJlZSA9IEZBTFNFOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCBzbyB0aGF0IHRoZSBuZXcgdmFsdWUgY2FuIGJlIGZvdW5kIGZhc3QKKyAgICAgKiBuZXh0IHRpbWUsIGFuZCBvdGhlcnMgY2FuIGFsc28gdXNlIGl0IChlLmcuIFBlcmwpLgorICAgICAqLworICAgIGlmIChwICE9IE5VTEwpCisgICAgeworCWlmICh2aW1ydW50aW1lKQorCXsKKwkgICAgdmltX3NldGVudigoY2hhcl91ICopIlZJTVJVTlRJTUUiLCBwKTsKKwkgICAgZGlkc2V0X3ZpbXJ1bnRpbWUgPSBUUlVFOworI2lmZGVmIEZFQVRfR0VUVEVYVAorCSAgICB7CisJCWNoYXJfdQkqYnVmID0gYWxsb2MoKHVuc2lnbmVkIGludClTVFJMRU4ocCkgKyA2KTsKKworCQlpZiAoYnVmICE9IE5VTEwpCisJCXsKKwkJICAgIFNUUkNQWShidWYsIHApOworCQkgICAgU1RSQ0FUKGJ1ZiwgIi9sYW5nIik7CisJCSAgICBiaW5kdGV4dGRvbWFpbihWSU1QQUNLQUdFLCAoY2hhciAqKWJ1Zik7CisJCSAgICB2aW1fZnJlZShidWYpOworCQl9CisJICAgIH0KKyNlbmRpZgorCX0KKwllbHNlCisJeworCSAgICB2aW1fc2V0ZW52KChjaGFyX3UgKikiVklNIiwgcCk7CisJICAgIGRpZHNldF92aW0gPSBUUlVFOworCX0KKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgZGlyZWN0b3J5ICJ2aW1kaXIvPHZlcnNpb24+IiBvciAidmltZGlyL3J1bnRpbWUiIGV4aXN0cy4KKyAqIFJldHVybiBOVUxMIGlmIG5vdCwgcmV0dXJuIGl0cyBuYW1lIGluIGFsbG9jYXRlZCBtZW1vcnkgb3RoZXJ3aXNlLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCit2aW1fdmVyc2lvbl9kaXIodmltZGlyKQorICAgIGNoYXJfdQkqdmltZGlyOworeworICAgIGNoYXJfdQkqcDsKKworICAgIGlmICh2aW1kaXIgPT0gTlVMTCB8fCAqdmltZGlyID09IE5VTCkKKwlyZXR1cm4gTlVMTDsKKyAgICBwID0gY29uY2F0X2ZuYW1lcyh2aW1kaXIsIChjaGFyX3UgKilWSU1fVkVSU0lPTl9OT0RPVCwgVFJVRSk7CisgICAgaWYgKHAgIT0gTlVMTCAmJiBtY2hfaXNkaXIocCkpCisJcmV0dXJuIHA7CisgICAgdmltX2ZyZWUocCk7CisgICAgcCA9IGNvbmNhdF9mbmFtZXModmltZGlyLCAoY2hhcl91ICopUlVOVElNRV9ESVJOQU1FLCBUUlVFKTsKKyAgICBpZiAocCAhPSBOVUxMICYmIG1jaF9pc2RpcihwKSkKKwlyZXR1cm4gcDsKKyAgICB2aW1fZnJlZShwKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIElmIHRoZSBzdHJpbmcgYmV0d2VlbiAicCIgYW5kICJwZW5kIiBlbmRzIGluICJuYW1lLyIsIHJldHVybiAicGVuZCIgbWludXMKKyAqIHRoZSBsZW5ndGggb2YgIm5hbWUvIi4gIE90aGVyd2lzZSByZXR1cm4gInBlbmQiLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCityZW1vdmVfdGFpbChwLCBwZW5kLCBuYW1lKQorICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKnBlbmQ7CisgICAgY2hhcl91CSpuYW1lOworeworICAgIGludAkJbGVuID0gKGludClTVFJMRU4obmFtZSkgKyAxOworICAgIGNoYXJfdQkqbmV3ZW5kID0gcGVuZCAtIGxlbjsKKworICAgIGlmIChuZXdlbmQgPj0gcAorCSAgICAmJiBmbmFtZW5jbXAobmV3ZW5kLCBuYW1lLCBsZW4gLSAxKSA9PSAwCisJICAgICYmIChuZXdlbmQgPT0gcCB8fCB2aW1faXNwYXRoc2VwKCoobmV3ZW5kIC0gMSkpKSkKKwlyZXR1cm4gbmV3ZW5kOworICAgIHJldHVybiBwZW5kOworfQorCisjaWYgZGVmaW5lZChVU0VfRVhFX05BTUUpICYmIGRlZmluZWQoTUFDT1NfWCkKKy8qCisgKiBJZiB0aGUgc3RyaW5nIGJldHdlZW4gInAiIGFuZCAicGVuZCIgZW5kcyBpbiAiPz8/LmV4dC8iLCByZXR1cm4gInBlbmQiCisgKiBtaW51cyB0aGUgbGVuZ3RoIG9mICI/Pz8uZXh0LyIuICBPdGhlcndpc2UgcmV0dXJuICJwZW5kIi4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorcmVtb3ZlX3RhaWxfd2l0aF9leHQocCwgcGVuZCwgZXh0KQorICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKnBlbmQ7CisgICAgY2hhcl91CSpleHQ7Cit7CisgICAgaW50CQlsZW4gPSAoaW50KVNUUkxFTihleHQpICsgMTsKKyAgICBjaGFyX3UJKm5ld2VuZCA9IHBlbmQgLSBsZW47CisKKyAgICBpZiAobmV3ZW5kID49IHAgJiYgZm5hbWVuY21wKG5ld2VuZCwgZXh0LCBsZW4gLSAxKSA9PSAwKQorCXdoaWxlIChuZXdlbmQgIT0gcCAmJiAhdmltX2lzcGF0aHNlcCgqKG5ld2VuZCAtIDEpKSkKKwkgICAgLS1uZXdlbmQ7CisgICAgaWYgKG5ld2VuZCA9PSBwIHx8IHZpbV9pc3BhdGhzZXAoKihuZXdlbmQgLSAxKSkpCisJcmV0dXJuIG5ld2VuZDsKKyAgICByZXR1cm4gcGVuZDsKK30KKyNlbmRpZgorCisvKgorICogQ2FsbCBleHBhbmRfZW52KCkgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gYW4gYWxsb2NhdGVkIHN0cmluZy4KKyAqIFRoaXMgaXMgbm90IHZlcnkgbWVtb3J5IGVmZmljaWVudCwgdGhpcyBleHBlY3RzIHRoZSByZXN1bHQgdG8gYmUgZnJlZWQKKyAqIGFnYWluIHNvb24uCisgKi8KKyAgICBjaGFyX3UgKgorZXhwYW5kX2Vudl9zYXZlKHNyYykKKyAgICBjaGFyX3UJKnNyYzsKK3sKKyAgICBjaGFyX3UJKnA7CisKKyAgICBwID0gYWxsb2MoTUFYUEFUSEwpOworICAgIGlmIChwICE9IE5VTEwpCisJZXhwYW5kX2VudihzcmMsIHAsIE1BWFBBVEhMKTsKKyAgICByZXR1cm4gcDsKK30KKworLyoKKyAqIE91ciBwb3J0YWJsZSB2ZXJzaW9uIG9mIHNldGVudi4KKyAqLworICAgIHZvaWQKK3ZpbV9zZXRlbnYobmFtZSwgdmFsKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBjaGFyX3UJKnZhbDsKK3sKKyNpZmRlZiBIQVZFX1NFVEVOVgorICAgIG1jaF9zZXRlbnYoKGNoYXIgKiluYW1lLCAoY2hhciAqKXZhbCwgMSk7CisjZWxzZQorICAgIGNoYXJfdQkqZW52YnVmOworCisgICAgLyoKKyAgICAgKiBQdXRlbnYgZG9lcyBub3QgY29weSB0aGUgc3RyaW5nLCBpdCBoYXMgdG8gcmVtYWluCisgICAgICogdmFsaWQuICBUaGUgYWxsb2NhdGVkIG1lbW9yeSB3aWxsIG5ldmVyIGJlIGZyZWVkLgorICAgICAqLworICAgIGVudmJ1ZiA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKG5hbWUpICsgU1RSTEVOKHZhbCkgKyAyKSk7CisgICAgaWYgKGVudmJ1ZiAhPSBOVUxMKQorICAgIHsKKwlzcHJpbnRmKChjaGFyICopZW52YnVmLCAiJXM9JXMiLCBuYW1lLCB2YWwpOworCXB1dGVudigoY2hhciAqKWVudmJ1Zik7CisgICAgfQorI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBGdW5jdGlvbiBnaXZlbiB0byBFeHBhbmRHZW5lcmljKCkgdG8gb2J0YWluIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIGNoYXJfdSAqCitnZXRfZW52X25hbWUoeHAsIGlkeCkKKyAgICBleHBhbmRfVAkqeHA7CisgICAgaW50CQlpZHg7Cit7CisjIGlmIGRlZmluZWQoQU1JR0EpIHx8IGRlZmluZWQoX19NUkNfXykgfHwgZGVmaW5lZChfX1NDX18pCisgICAgLyoKKyAgICAgKiBObyBlbnZpcm9uW10gb24gdGhlIEFtaWdhIGFuZCBvbiB0aGUgTWFjICh1c2luZyBNUFcpLgorICAgICAqLworICAgIHJldHVybiBOVUxMOworIyBlbHNlCisjIGlmbmRlZiBfX1dJTjMyX18KKyAgICAvKiBCb3JsYW5kIEMrKyA1LjIgaGFzIHRoaXMgaW4gYSBoZWFkZXIgZmlsZS4gKi8KKyAgICBleHRlcm4gY2hhcgkJKiplbnZpcm9uOworIyBlbmRpZgorICAgIHN0YXRpYyBjaGFyX3UJbmFtZVsxMDBdOworICAgIGNoYXJfdQkJKnN0cjsKKyAgICBpbnQJCQluOworCisgICAgc3RyID0gKGNoYXJfdSAqKWVudmlyb25baWR4XTsKKyAgICBpZiAoc3RyID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgOTk7ICsrbikKKyAgICB7CisJaWYgKHN0cltuXSA9PSAnPScgfHwgc3RyW25dID09IE5VTCkKKwkgICAgYnJlYWs7CisJbmFtZVtuXSA9IHN0cltuXTsKKyAgICB9CisgICAgbmFtZVtuXSA9IE5VTDsKKyAgICByZXR1cm4gbmFtZTsKKyMgZW5kaWYKK30KKyNlbmRpZgorCisvKgorICogUmVwbGFjZSBob21lIGRpcmVjdG9yeSBieSAifiIgaW4gZWFjaCBzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgZmlsZSBuYW1lIGluCisgKiAnc3JjJy4KKyAqIElmIGFueXRoaW5nIGZhaWxzIChleGNlcHQgd2hlbiBvdXQgb2Ygc3BhY2UpIGRzdCBlcXVhbHMgc3JjLgorICovCisgICAgdm9pZAoraG9tZV9yZXBsYWNlKGJ1Ziwgc3JjLCBkc3QsIGRzdGxlbiwgb25lKQorICAgIGJ1Zl9UCSpidWY7CS8qIHdoZW4gbm90IE5VTEwsIGNoZWNrIGZvciBoZWxwIGZpbGVzICovCisgICAgY2hhcl91CSpzcmM7CS8qIGlucHV0IGZpbGUgbmFtZSAqLworICAgIGNoYXJfdQkqZHN0OwkvKiB3aGVyZSB0byBwdXQgdGhlIHJlc3VsdCAqLworICAgIGludAkJZHN0bGVuOwkvKiBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgcmVzdWx0ICovCisgICAgaW50CQlvbmU7CS8qIGlmIFRSVUUsIG9ubHkgcmVwbGFjZSBvbmUgZmlsZSBuYW1lLCBpbmNsdWRlCisJCQkgICBzcGFjZXMgYW5kIGNvbW1hcyBpbiB0aGUgZmlsZSBuYW1lLiAqLworeworICAgIHNpemVfdAlkaXJsZW4gPSAwLCBlbnZsZW4gPSAwOworICAgIHNpemVfdAlsZW47CisgICAgY2hhcl91CSpob21lZGlyX2VudjsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBpZiAoc3JjID09IE5VTEwpCisgICAgeworCSpkc3QgPSBOVUw7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlIGZpbGUgaXMgYSBoZWxwIGZpbGUsIHJlbW92ZSB0aGUgcGF0aCBjb21wbGV0ZWx5LgorICAgICAqLworICAgIGlmIChidWYgIT0gTlVMTCAmJiBidWYtPmJfaGVscCkKKyAgICB7CisJU1RSQ1BZKGRzdCwgZ2V0dGFpbChzcmMpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXZSBjaGVjayBib3RoIHRoZSB2YWx1ZSBvZiB0aGUgJEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHRoZQorICAgICAqICJyZWFsIiBob21lIGRpcmVjdG9yeS4KKyAgICAgKi8KKyAgICBpZiAoaG9tZWRpciAhPSBOVUxMKQorCWRpcmxlbiA9IFNUUkxFTihob21lZGlyKTsKKworI2lmZGVmIFZNUworICAgIGhvbWVkaXJfZW52ID0gbWNoX2dldGVudigoY2hhcl91ICopIlNZUyRMT0dJTiIpOworI2Vsc2UKKyAgICBob21lZGlyX2VudiA9IG1jaF9nZXRlbnYoKGNoYXJfdSAqKSJIT01FIik7CisjZW5kaWYKKworICAgIGlmIChob21lZGlyX2VudiAhPSBOVUxMICYmICpob21lZGlyX2VudiA9PSBOVUwpCisJaG9tZWRpcl9lbnYgPSBOVUxMOworICAgIGlmIChob21lZGlyX2VudiAhPSBOVUxMKQorCWVudmxlbiA9IFNUUkxFTihob21lZGlyX2Vudik7CisKKyAgICBpZiAoIW9uZSkKKwlzcmMgPSBza2lwd2hpdGUoc3JjKTsKKyAgICB3aGlsZSAoKnNyYyAmJiBkc3RsZW4gPiAwKQorICAgIHsKKwkvKgorCSAqIEhlcmUgd2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWxlIG5hbWUuCisJICogRmlyc3QsIGNoZWNrIHRvIHNlZSBpZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIG5hbWUgbWF0Y2hlcworCSAqICRIT01FIG9yIHRoZSAicmVhbCIgaG9tZSBkaXJlY3RvcnkuIENoZWNrIHRoYXQgdGhlcmUgaXMgYSAnLycKKwkgKiBhZnRlciB0aGUgbWF0Y2ggKHNvIHRoYXQgaWYgZS5nLiB0aGUgZmlsZSBpcyAiL2hvbWUvcGlldGVyL2JsYSIsCisJICogYW5kIHRoZSBob21lIGRpcmVjdG9yeSBpcyAiL2hvbWUvcGlldCIsIHRoZSBmaWxlIGRvZXMgbm90IGVuZCB1cAorCSAqIGFzICJ+ZXIvYmxhIiAod2hpY2ggd291bGQgc2VlbSB0byBpbmRpY2F0ZSB0aGUgZmlsZSAiYmxhIiBpbiB1c2VyCisJICogZXIncyBob21lIGRpcmVjdG9yeSkpLgorCSAqLworCXAgPSBob21lZGlyOworCWxlbiA9IGRpcmxlbjsKKwlmb3IgKDs7KQorCXsKKwkgICAgaWYgKCAgIGxlbgorCQkmJiBmbmFtZW5jbXAoc3JjLCBwLCBsZW4pID09IDAKKwkJJiYgKHZpbV9pc3BhdGhzZXAoc3JjW2xlbl0pCisJCSAgICB8fCAoIW9uZSAmJiAoc3JjW2xlbl0gPT0gJywnIHx8IHNyY1tsZW5dID09ICcgJykpCisJCSAgICB8fCBzcmNbbGVuXSA9PSBOVUwpKQorCSAgICB7CisJCXNyYyArPSBsZW47CisJCWlmICgtLWRzdGxlbiA+IDApCisJCSAgICAqZHN0KysgPSAnfic7CisKKwkJLyoKKwkJICogSWYgaXQncyBqdXN0IHRoZSBob21lIGRpcmVjdG9yeSwgYWRkICAiLyIuCisJCSAqLworCQlpZiAoIXZpbV9pc3BhdGhzZXAoc3JjWzBdKSAmJiAtLWRzdGxlbiA+IDApCisJCSAgICAqZHN0KysgPSAnLyc7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChwID09IGhvbWVkaXJfZW52KQorCQlicmVhazsKKwkgICAgcCA9IGhvbWVkaXJfZW52OworCSAgICBsZW4gPSBlbnZsZW47CisJfQorCisJLyogaWYgKCFvbmUpIHNraXAgdG8gc2VwYXJhdG9yOiBzcGFjZSBvciBjb21tYSAqLworCXdoaWxlICgqc3JjICYmIChvbmUgfHwgKCpzcmMgIT0gJywnICYmICpzcmMgIT0gJyAnKSkgJiYgLS1kc3RsZW4gPiAwKQorCSAgICAqZHN0KysgPSAqc3JjKys7CisJLyogc2tpcCBzZXBhcmF0b3IgKi8KKwl3aGlsZSAoKCpzcmMgPT0gJyAnIHx8ICpzcmMgPT0gJywnKSAmJiAtLWRzdGxlbiA+IDApCisJICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICB9CisgICAgLyogaWYgKGRzdGxlbiA9PSAwKSBvdXQgb2Ygc3BhY2UsIHdoYXQgdG8gZG8/Pz8gKi8KKworICAgICpkc3QgPSBOVUw7Cit9CisKKy8qCisgKiBMaWtlIGhvbWVfcmVwbGFjZSwgc3RvcmUgdGhlIHJlcGxhY2VkIHN0cmluZyBpbiBhbGxvY2F0ZWQgbWVtb3J5LgorICogV2hlbiBzb21ldGhpbmcgZmFpbHMsIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KKyAgICBjaGFyX3UgICoKK2hvbWVfcmVwbGFjZV9zYXZlKGJ1Ziwgc3JjKQorICAgIGJ1Zl9UCSpidWY7CS8qIHdoZW4gbm90IE5VTEwsIGNoZWNrIGZvciBoZWxwIGZpbGVzICovCisgICAgY2hhcl91CSpzcmM7CS8qIGlucHV0IGZpbGUgbmFtZSAqLworeworICAgIGNoYXJfdQkqZHN0OworICAgIHVuc2lnbmVkCWxlbjsKKworICAgIGxlbiA9IDM7CQkJLyogc3BhY2UgZm9yICJ+LyIgYW5kIHRyYWlsaW5nIE5VTCAqLworICAgIGlmIChzcmMgIT0gTlVMTCkJCS8qIGp1c3QgaW4gY2FzZSAqLworCWxlbiArPSAodW5zaWduZWQpU1RSTEVOKHNyYyk7CisgICAgZHN0ID0gYWxsb2MobGVuKTsKKyAgICBpZiAoZHN0ICE9IE5VTEwpCisJaG9tZV9yZXBsYWNlKGJ1Ziwgc3JjLCBkc3QsIGxlbiwgVFJVRSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworLyoKKyAqIENvbXBhcmUgdHdvIGZpbGUgbmFtZXMgYW5kIHJldHVybjoKKyAqIEZQQ19TQU1FICAgaWYgdGhleSBib3RoIGV4aXN0IGFuZCBhcmUgdGhlIHNhbWUgZmlsZS4KKyAqIEZQQ19TQU1FWCAgaWYgdGhleSBib3RoIGRvbid0IGV4aXN0IGFuZCBoYXZlIHRoZSBzYW1lIGZpbGUgbmFtZS4KKyAqIEZQQ19ESUZGICAgaWYgdGhleSBib3RoIGV4aXN0IGFuZCBhcmUgZGlmZmVyZW50IGZpbGVzLgorICogRlBDX05PVFggICBpZiB0aGV5IGJvdGggZG9uJ3QgZXhpc3QuCisgKiBGUENfRElGRlggIGlmIG9uZSBvZiB0aGVtIGRvZXNuJ3QgZXhpc3QuCisgKiBGb3IgdGhlIGZpcnN0IG5hbWUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZAorICovCisgICAgaW50CitmdWxscGF0aGNtcChzMSwgczIsIGNoZWNrbmFtZSkKKyAgICBjaGFyX3UgKnMxLCAqczI7CisgICAgaW50CSAgICBjaGVja25hbWU7CQkvKiB3aGVuIGJvdGggZG9uJ3QgZXhpc3QsIGNoZWNrIGZpbGUgbmFtZXMgKi8KK3sKKyNpZmRlZiBVTklYCisgICAgY2hhcl91CSAgICBleHAxW01BWFBBVEhMXTsKKyAgICBjaGFyX3UJICAgIGZ1bGwxW01BWFBBVEhMXTsKKyAgICBjaGFyX3UJICAgIGZ1bGwyW01BWFBBVEhMXTsKKyAgICBzdHJ1Y3Qgc3RhdAkgICAgc3QxLCBzdDI7CisgICAgaW50CQkgICAgcjEsIHIyOworCisgICAgZXhwYW5kX2VudihzMSwgZXhwMSwgTUFYUEFUSEwpOworICAgIHIxID0gbWNoX3N0YXQoKGNoYXIgKilleHAxLCAmc3QxKTsKKyAgICByMiA9IG1jaF9zdGF0KChjaGFyICopczIsICZzdDIpOworICAgIGlmIChyMSAhPSAwICYmIHIyICE9IDApCisgICAgeworCS8qIGlmIG1jaF9zdGF0KCkgZG9lc24ndCB3b3JrLCBtYXkgY29tcGFyZSB0aGUgbmFtZXMgKi8KKwlpZiAoY2hlY2tuYW1lKQorCXsKKwkgICAgaWYgKGZuYW1lY21wKGV4cDEsIHMyKSA9PSAwKQorCQlyZXR1cm4gRlBDX1NBTUVYOworCSAgICByMSA9IHZpbV9GdWxsTmFtZShleHAxLCBmdWxsMSwgTUFYUEFUSEwsIEZBTFNFKTsKKwkgICAgcjIgPSB2aW1fRnVsbE5hbWUoczIsIGZ1bGwyLCBNQVhQQVRITCwgRkFMU0UpOworCSAgICBpZiAocjEgPT0gT0sgJiYgcjIgPT0gT0sgJiYgZm5hbWVjbXAoZnVsbDEsIGZ1bGwyKSA9PSAwKQorCQlyZXR1cm4gRlBDX1NBTUVYOworCX0KKwlyZXR1cm4gRlBDX05PVFg7CisgICAgfQorICAgIGlmIChyMSAhPSAwIHx8IHIyICE9IDApCisJcmV0dXJuIEZQQ19ESUZGWDsKKyAgICBpZiAoc3QxLnN0X2RldiA9PSBzdDIuc3RfZGV2ICYmIHN0MS5zdF9pbm8gPT0gc3QyLnN0X2lubykKKwlyZXR1cm4gRlBDX1NBTUU7CisgICAgcmV0dXJuIEZQQ19ESUZGOworI2Vsc2UKKyAgICBjaGFyX3UgICpleHAxOwkJLyogZXhwYW5kZWQgczEgKi8KKyAgICBjaGFyX3UgICpmdWxsMTsJCS8qIGZ1bGwgcGF0aCBvZiBzMSAqLworICAgIGNoYXJfdSAgKmZ1bGwyOwkJLyogZnVsbCBwYXRoIG9mIHMyICovCisgICAgaW50CSAgICByZXR2YWwgPSBGUENfRElGRjsKKyAgICBpbnQJICAgIHIxLCByMjsKKworICAgIC8qIGFsbG9jYXRlIG9uZSBidWZmZXIgdG8gc3RvcmUgdGhyZWUgcGF0aHMgKGFsbG9jKCkvZnJlZSgpIGlzIHNsb3chKSAqLworICAgIGlmICgoZXhwMSA9IGFsbG9jKE1BWFBBVEhMICogMykpICE9IE5VTEwpCisgICAgeworCWZ1bGwxID0gZXhwMSArIE1BWFBBVEhMOworCWZ1bGwyID0gZnVsbDEgKyBNQVhQQVRITDsKKworCWV4cGFuZF9lbnYoczEsIGV4cDEsIE1BWFBBVEhMKTsKKwlyMSA9IHZpbV9GdWxsTmFtZShleHAxLCBmdWxsMSwgTUFYUEFUSEwsIEZBTFNFKTsKKwlyMiA9IHZpbV9GdWxsTmFtZShzMiwgZnVsbDIsIE1BWFBBVEhMLCBGQUxTRSk7CisKKwkvKiBJZiB2aW1fRnVsbE5hbWUoKSBmYWlscywgdGhlIGZpbGUgcHJvYmFibHkgZG9lc24ndCBleGlzdC4gKi8KKwlpZiAocjEgIT0gT0sgJiYgcjIgIT0gT0spCisJeworCSAgICBpZiAoY2hlY2tuYW1lICYmIGZuYW1lY21wKGV4cDEsIHMyKSA9PSAwKQorCQlyZXR2YWwgPSBGUENfU0FNRVg7CisJICAgIGVsc2UKKwkJcmV0dmFsID0gRlBDX05PVFg7CisJfQorCWVsc2UgaWYgKHIxICE9IE9LIHx8IHIyICE9IE9LKQorCSAgICByZXR2YWwgPSBGUENfRElGRlg7CisJZWxzZSBpZiAoZm5hbWVjbXAoZnVsbDEsIGZ1bGwyKSkKKwkgICAgcmV0dmFsID0gRlBDX0RJRkY7CisJZWxzZQorCSAgICByZXR2YWwgPSBGUENfU0FNRTsKKwl2aW1fZnJlZShleHAxKTsKKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKKyNlbmRpZgorfQorCisvKgorICogZ2V0IHRoZSB0YWlsIG9mIGEgcGF0aDogdGhlIGZpbGUgbmFtZS4KKyAqLworICAgIGNoYXJfdSAqCitnZXR0YWlsKGZuYW1lKQorICAgIGNoYXJfdSAqZm5hbWU7Cit7CisgICAgY2hhcl91ICAqcDEsICpwMjsKKworICAgIGlmIChmbmFtZSA9PSBOVUxMKQorCXJldHVybiAoY2hhcl91ICopIiI7CisgICAgZm9yIChwMSA9IHAyID0gZm5hbWU7ICpwMjsgKQkvKiBmaW5kIGxhc3QgcGFydCBvZiBwYXRoICovCisgICAgeworCWlmICh2aW1faXNwYXRoc2VwKCpwMikpCisJICAgIHAxID0gcDIgKyAxOworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCSAgICBwMiArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHAyKTsKKwllbHNlCisjZW5kaWYKKwkgICAgKytwMjsKKyAgICB9CisgICAgcmV0dXJuIHAxOworfQorCisvKgorICogZ2V0IHRoZSBuZXh0IHBhdGggY29tcG9uZW50IChqdXN0IGFmdGVyIHRoZSBuZXh0IHBhdGggc2VwYXJhdG9yKS4KKyAqLworICAgIGNoYXJfdSAqCitnZXRuZXh0Y29tcChmbmFtZSkKKyAgICBjaGFyX3UgKmZuYW1lOworeworICAgIHdoaWxlICgqZm5hbWUgJiYgIXZpbV9pc3BhdGhzZXAoKmZuYW1lKSkKKwkrK2ZuYW1lOworICAgIGlmICgqZm5hbWUpCisJKytmbmFtZTsKKyAgICByZXR1cm4gZm5hbWU7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTU9ESUZZX0ZOQU1FKSB8fCBkZWZpbmVkKEZFQVRfRVZBTCkgXAorCXx8IGRlZmluZWQoRkVBVF9TRVNTSU9OKSB8fCBkZWZpbmVkKE1TV0lOKSBcCisJfHwgKGRlZmluZWQoRkVBVF9HVUlfR1RLKSBcCisJCQkgICAgJiYgKGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKEZFQVRfRE5EKSkpIFwKKwl8fCBkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKSB8fCBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykgXAorCXx8IGRlZmluZWQoUFJPVE8pCisvKgorICogR2V0IGEgcG9pbnRlciB0byBvbmUgY2hhcmFjdGVyIHBhc3QgdGhlIGhlYWQgb2YgYSBwYXRoIG5hbWUuCisgKiBVbml4OiBhZnRlciAiLyI7IERPUzogYWZ0ZXIgImM6XCI7IEFtaWdhOiBhZnRlciAiZGlzazovIjsgTWFjOiBubyBoZWFkLgorICogSWYgdGhlcmUgaXMgbm8gaGVhZCwgcGF0aCBpcyByZXR1cm5lZC4KKyAqLworICAgIGNoYXJfdSAqCitnZXRfcGFzdF9oZWFkKHBhdGgpCisgICAgY2hhcl91ICAqcGF0aDsKK3sKKyAgICBjaGFyX3UgICpyZXR2YWw7CisKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKE9TMikKKyAgICAvKiBtYXkgc2tpcCAiYzoiICovCisgICAgaWYgKGlzYWxwaGEocGF0aFswXSkgJiYgcGF0aFsxXSA9PSAnOicpCisJcmV0dmFsID0gcGF0aCArIDI7CisgICAgZWxzZQorCXJldHZhbCA9IHBhdGg7CisjZWxzZQorIyBpZiBkZWZpbmVkKEFNSUdBKQorICAgIC8qIG1heSBza2lwICJsYWJlbDoiICovCisgICAgcmV0dmFsID0gdmltX3N0cmNocihwYXRoLCAnOicpOworICAgIGlmIChyZXR2YWwgPT0gTlVMTCkKKwlyZXR2YWwgPSBwYXRoOworIyBlbHNlCS8qIFVuaXggKi8KKyAgICByZXR2YWwgPSBwYXRoOworIyBlbmRpZgorI2VuZGlmCisKKyAgICB3aGlsZSAodmltX2lzcGF0aHNlcCgqcmV0dmFsKSkKKwkrK3JldHZhbDsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisjZW5kaWYKKworLyoKKyAqIHJldHVybiBUUlVFIGlmICdjJyBpcyBhIHBhdGggc2VwYXJhdG9yLgorICovCisgICAgaW50Cit2aW1faXNwYXRoc2VwKGMpCisgICAgaW50IGM7Cit7CisjaWZkZWYgUklTQ09TCisgICAgcmV0dXJuIChjID09ICcuJyB8fCBjID09ICc6Jyk7CisjZWxzZQorIyBpZmRlZiBVTklYCisgICAgcmV0dXJuIChjID09ICcvJyk7CSAgICAvKiBVTklYIGhhcyAnOicgaW5zaWRlIGZpbGUgbmFtZXMgKi8KKyMgZWxzZQorIyAgaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisgICAgcmV0dXJuIChjID09ICc6JyB8fCBjID09ICcvJyB8fCBjID09ICdcXCcpOworIyAgZWxzZQorIyAgIGlmZGVmIFZNUworICAgIC8qIHNlcnZlciJ1c2VyIHBhc3N3ZCI6OmRldmljZTpbZnVsbC5wYXRoLm5hbWVdZm5hbWUuZXh0ZW5zaW9uO3ZlcnNpb24iICovCisgICAgcmV0dXJuIChjID09ICc6JyB8fCBjID09ICdbJyB8fCBjID09ICddJyB8fCBjID09ICcvJworCSAgICB8fCBjID09ICc8JyB8fCBjID09ICc+JyB8fCBjID09ICciJyApOworIyAgIGVsc2UKKyMgICAgaWZkZWYgQ09MT05fQVNfUEFUSFNFUAorICAgIHJldHVybiAoYyA9PSAnOicpOworIyAgICBlbHNlCQkvKiBBbWlnYSAqLworICAgIHJldHVybiAoYyA9PSAnOicgfHwgYyA9PSAnLycpOworIyAgICBlbmRpZgorIyAgIGVuZGlmIC8qIFZNUyAqLworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiBSSVNDIE9TICovCit9CisKKyNpZiBkZWZpbmVkKEZFQVRfU0VBUkNIUEFUSCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiByZXR1cm4gVFJVRSBpZiAnYycgaXMgYSBwYXRoIGxpc3Qgc2VwYXJhdG9yLgorICovCisgICAgaW50Cit2aW1faXNwYXRobGlzdHNlcChjKQorICAgIGludCBjOworeworI2lmZGVmIFVOSVgKKyAgICByZXR1cm4gKGMgPT0gJzonKTsKKyNlbHNlCisgICAgcmV0dXJuIChjID09ICc7Jyk7CS8qIG1pZ2h0IG5vdCBiZSByaWd0aCBmb3IgZXZlcnkgc3lzdGVtLi4uICovCisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRSkgJiYgZGVmaW5lZChCQUNLU0xBU0hfSU5fRklMRU5BTUUpKSBcCisJfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBWZXJzaW9ucyBvZiBmbmFtZWNtcCgpIGFuZCBmbmFtZW5jbXAoKSB0aGF0IGhhbmRsZSAnLycgYW5kICdcJyBlcXVhbGx5LgorICovCisgICAgaW50Cit2aW1fZm5hbWVjbXAoeCwgeSkKKyAgICBjaGFyX3UJKngsICp5OworeworICAgIHJldHVybiB2aW1fZm5hbWVuY21wKHgsIHksIE1BWFBBVEhMKTsKK30KKworICAgIGludAordmltX2ZuYW1lbmNtcCh4LCB5LCBsZW4pCisgICAgY2hhcl91CSp4LCAqeTsKKyAgICBzaXplX3QJbGVuOworeworICAgIHdoaWxlIChsZW4gPiAwICYmICp4ICYmICp5KQorICAgIHsKKwlpZiAoVE9MT1dFUl9MT0MoKngpICE9IFRPTE9XRVJfTE9DKCp5KQorCQkmJiAhKCp4ID09ICcvJyAmJiAqeSA9PSAnXFwnKQorCQkmJiAhKCp4ID09ICdcXCcgJiYgKnkgPT0gJy8nKSkKKwkgICAgYnJlYWs7CisJKyt4OworCSsreTsKKwktLWxlbjsKKyAgICB9CisgICAgaWYgKGxlbiA9PSAwKQorCXJldHVybiAwOworICAgIHJldHVybiAoKnggLSAqeSk7Cit9CisjZW5kaWYKKworLyoKKyAqIENvbmNhdGVuYXRlIGZpbGUgbmFtZXMgZm5hbWUxIGFuZCBmbmFtZTIgaW50byBhbGxvY2F0ZWQgbWVtb3J5LgorICogT25seSBhZGQgYSAnLycgb3IgJ1xcJyB3aGVuICdzZXAnIGlzIFRSVUUgYW5kIGl0IGlzIG5lY2Nlc2FyeS4KKyAqLworICAgIGNoYXJfdSAgKgorY29uY2F0X2ZuYW1lcyhmbmFtZTEsIGZuYW1lMiwgc2VwKQorICAgIGNoYXJfdSAgKmZuYW1lMTsKKyAgICBjaGFyX3UgICpmbmFtZTI7CisgICAgaW50CSAgICBzZXA7Cit7CisgICAgY2hhcl91ICAqZGVzdDsKKworICAgIGRlc3QgPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTihmbmFtZTEpICsgU1RSTEVOKGZuYW1lMikgKyAzKSk7CisgICAgaWYgKGRlc3QgIT0gTlVMTCkKKyAgICB7CisJU1RSQ1BZKGRlc3QsIGZuYW1lMSk7CisJaWYgKHNlcCkKKwkgICAgYWRkX3BhdGhzZXAoZGVzdCk7CisJU1RSQ0FUKGRlc3QsIGZuYW1lMik7CisgICAgfQorICAgIHJldHVybiBkZXN0OworfQorCisvKgorICogQWRkIGEgcGF0aCBzZXBhcmF0b3IgdG8gYSBmaWxlIG5hbWUsIHVubGVzcyBpdCBhbHJlYWR5IGVuZHMgaW4gYSBwYXRoCisgKiBzZXBhcmF0b3IuCisgKi8KKyAgICB2b2lkCithZGRfcGF0aHNlcChwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBpZiAoKnAgIT0gTlVMICYmICF2aW1faXNwYXRoc2VwKCoocCArIFNUUkxFTihwKSAtIDEpKSkKKwlTVFJDQVQocCwgUEFUSFNFUFNUUik7Cit9CisKKy8qCisgKiBGdWxsTmFtZV9zYXZlIC0gTWFrZSBhbiBhbGxvY2F0ZWQgY29weSBvZiBhIGZ1bGwgZmlsZSBuYW1lLgorICogUmV0dXJucyBOVUxMIHdoZW4gb3V0IG9mIG1lbW9yeS4KKyAqLworICAgIGNoYXJfdSAgKgorRnVsbE5hbWVfc2F2ZShmbmFtZSwgZm9yY2UpCisgICAgY2hhcl91CSpmbmFtZTsKKyAgICBpbnQJCWZvcmNlOwkgICAgLyogZm9yY2UgZXhwYW5zaW9uLCBldmVuIHdoZW4gaXQgYWxyZWFkeSBsb29rcworCQkJICAgICAgIGxpa2UgYSBmdWxsIHBhdGggbmFtZSAqLworeworICAgIGNoYXJfdQkqYnVmOworICAgIGNoYXJfdQkqbmV3X2ZuYW1lID0gTlVMTDsKKworICAgIGlmIChmbmFtZSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgYnVmID0gYWxsb2MoKHVuc2lnbmVkKU1BWFBBVEhMKTsKKyAgICBpZiAoYnVmICE9IE5VTEwpCisgICAgeworCWlmICh2aW1fRnVsbE5hbWUoZm5hbWUsIGJ1ZiwgTUFYUEFUSEwsIGZvcmNlKSAhPSBGQUlMKQorCSAgICBuZXdfZm5hbWUgPSB2aW1fc3Ryc2F2ZShidWYpOworCWVsc2UKKwkgICAgbmV3X2ZuYW1lID0gdmltX3N0cnNhdmUoZm5hbWUpOworCXZpbV9mcmVlKGJ1Zik7CisgICAgfQorICAgIHJldHVybiBuZXdfZm5hbWU7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQ0lOREVOVCkgfHwgZGVmaW5lZChGRUFUX1NZTl9ITCkKKworc3RhdGljIGNoYXJfdQkqc2tpcF9zdHJpbmcgX19BUkdTKChjaGFyX3UgKnApKTsKKworLyoKKyAqIEZpbmQgdGhlIHN0YXJ0IG9mIGEgY29tbWVudCwgbm90IGtub3dpbmcgaWYgd2UgYXJlIGluIGEgY29tbWVudCByaWdodCBub3cuCisgKiBTZWFyY2ggc3RhcnRzIGF0IHdfY3Vyc29yLmxudW0gYW5kIGdvZXMgYmFja3dhcmRzLgorICovCisgICAgcG9zX1QgKgorZmluZF9zdGFydF9jb21tZW50KGluZF9tYXhjb21tZW50KQkgICAgLyogWFhYICovCisgICAgaW50CQlpbmRfbWF4Y29tbWVudDsKK3sKKyAgICBwb3NfVAkqcG9zOworICAgIGNoYXJfdQkqbGluZTsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBpZiAoKHBvcyA9IGZpbmRtYXRjaGxpbWl0KE5VTEwsICcqJywgRk1fQkFDS1dBUkQsIGluZF9tYXhjb21tZW50KSkgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlIGNvbW1lbnQgc3RhcnQgd2UgZm91bmQgaXMgaW5zaWRlIGEgc3RyaW5nLgorICAgICAqLworICAgIGxpbmUgPSBtbF9nZXQocG9zLT5sbnVtKTsKKyAgICBmb3IgKHAgPSBsaW5lOyAqcCAmJiAodW5zaWduZWQpKHAgLSBsaW5lKSA8IHBvcy0+Y29sOyArK3ApCisJcCA9IHNraXBfc3RyaW5nKHApOworICAgIGlmICgodW5zaWduZWQpKHAgLSBsaW5lKSA+IHBvcy0+Y29sKQorCXJldHVybiBOVUxMOworICAgIHJldHVybiBwb3M7Cit9CisKKy8qCisgKiBTa2lwIHRvIHRoZSBlbmQgb2YgYSAic3RyaW5nIiBhbmQgYSAnYycgY2hhcmFjdGVyLgorICogSWYgdGhlcmUgaXMgbm8gc3RyaW5nIG9yIGNoYXJhY3RlciwgcmV0dXJuIGFyZ3VtZW50IHVubW9kaWZpZWQuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3NraXBfc3RyaW5nKHApCisgICAgY2hhcl91ICAqcDsKK3sKKyAgICBpbnQJICAgIGk7CisKKyAgICAvKgorICAgICAqIFdlIGxvb3AsIGJlY2F1c2Ugc3RyaW5ncyBtYXkgYmUgY29uY2F0ZW5hdGVkOiAiZGF0ZSIidGltZSIuCisgICAgICovCisgICAgZm9yICggOyA7ICsrcCkKKyAgICB7CisJaWYgKHBbMF0gPT0gJ1wnJykJCSAgICAvKiAnYycgb3IgJ1xuJyBvciAnXDAwMCcgKi8KKwl7CisJICAgIGlmICghcFsxXSkJCQkgICAgLyogJyBhdCBlbmQgb2YgbGluZSAqLworCQlicmVhazsKKwkgICAgaSA9IDI7CisJICAgIGlmIChwWzFdID09ICdcXCcpCQkgICAgLyogJ1xuJyBvciAnXDAwMCcgKi8KKwkgICAgeworCQkrK2k7CisJCXdoaWxlICh2aW1faXNkaWdpdChwW2kgLSAxXSkpICAgLyogJ1wwMDAnICovCisJCSAgICArK2k7CisJICAgIH0KKwkgICAgaWYgKHBbaV0gPT0gJ1wnJykJCSAgICAvKiBjaGVjayBmb3IgdHJhaWxpbmcgJyAqLworCSAgICB7CisJCXAgKz0gaTsKKwkJY29udGludWU7CisJICAgIH0KKwl9CisJZWxzZSBpZiAocFswXSA9PSAnIicpCQkgICAgLyogc3RhcnQgb2Ygc3RyaW5nICovCisJeworCSAgICBmb3IgKCsrcDsgcFswXTsgKytwKQorCSAgICB7CisJCWlmIChwWzBdID09ICdcXCcgJiYgcFsxXSAhPSBOVUwpCisJCSAgICArK3A7CisJCWVsc2UgaWYgKHBbMF0gPT0gJyInKQkgICAgLyogZW5kIG9mIHN0cmluZyAqLworCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKHBbMF0gPT0gJyInKQorCQljb250aW51ZTsKKwl9CisJYnJlYWs7CQkJCSAgICAvKiBubyBzdHJpbmcgZm91bmQgKi8KKyAgICB9CisgICAgaWYgKCEqcCkKKwktLXA7CQkJCSAgICAvKiBiYWNrdXAgZnJvbSBOVUwgKi8KKyAgICByZXR1cm4gcDsKK30KKyNlbmRpZiAvKiBGRUFUX0NJTkRFTlQgfHwgRkVBVF9TWU5fSEwgKi8KKworI2lmIGRlZmluZWQoRkVBVF9DSU5ERU5UKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogRG8gQyBvciBleHByZXNzaW9uIGluZGVudGluZyBvbiB0aGUgY3VycmVudCBsaW5lLgorICovCisgICAgdm9pZAorZG9fY19leHByX2luZGVudCgpCit7CisjIGlmZGVmIEZFQVRfRVZBTAorICAgIGlmICgqY3VyYnVmLT5iX3BfaW5kZSAhPSBOVUwpCisJZml4dGhpc2xpbmUoZ2V0X2V4cHJfaW5kZW50KTsKKyAgICBlbHNlCisjIGVuZGlmCisJZml4dGhpc2xpbmUoZ2V0X2NfaW5kZW50KTsKK30KKworLyoKKyAqIEZ1bmN0aW9ucyBmb3IgQy1pbmRlbnRpbmcuCisgKiBNb3N0IG9mIHRoaXMgb3JpZ2luYWxseSBjb21lcyBmcm9tIEVyaWMgRmlzY2hlci4KKyAqLworLyoKKyAqIEJlbG93ICJYWFgiIG1lYW5zIHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkgdW5sb2NrIHRoZSBjdXJyZW50IGxpbmUuCisgKi8KKworc3RhdGljIGNoYXJfdQkqY2luX3NraXBjb21tZW50IF9fQVJHUygoY2hhcl91ICopKTsKK3N0YXRpYyBpbnQJY2luX25vY29kZSBfX0FSR1MoKGNoYXJfdSAqKSk7CitzdGF0aWMgcG9zX1QJKmZpbmRfbGluZV9jb21tZW50IF9fQVJHUygodm9pZCkpOworc3RhdGljIGludAljaW5faXNsYWJlbF9za2lwIF9fQVJHUygoY2hhcl91ICoqKSk7CitzdGF0aWMgaW50CWNpbl9pc2RlZmF1bHQgX19BUkdTKChjaGFyX3UgKikpOworc3RhdGljIGNoYXJfdQkqYWZ0ZXJfbGFiZWwgX19BUkdTKChjaGFyX3UgKmwpKTsKK3N0YXRpYyBpbnQJZ2V0X2luZGVudF9ub2xhYmVsIF9fQVJHUygobGluZW5yX1QgbG51bSkpOworc3RhdGljIGludAlza2lwX2xhYmVsIF9fQVJHUygobGluZW5yX1QsIGNoYXJfdSAqKnBwLCBpbnQgaW5kX21heGNvbW1lbnQpKTsKK3N0YXRpYyBpbnQJY2luX2ZpcnN0X2lkX2Ftb3VudCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQJY2luX2dldF9lcXVhbF9hbW91bnQgX19BUkdTKChsaW5lbnJfVCBsbnVtKSk7CitzdGF0aWMgaW50CWNpbl9pc3ByZXByb2MgX19BUkdTKChjaGFyX3UgKikpOworc3RhdGljIGludAljaW5faXNwcmVwcm9jX2NvbnQgX19BUkdTKChjaGFyX3UgKipwcCwgbGluZW5yX1QgKmxudW1wKSk7CitzdGF0aWMgaW50CWNpbl9pc2NvbW1lbnQgX19BUkdTKChjaGFyX3UgKikpOworc3RhdGljIGludAljaW5faXNsaW5lY29tbWVudCBfX0FSR1MoKGNoYXJfdSAqKSk7CitzdGF0aWMgaW50CWNpbl9pc3Rlcm1pbmF0ZWQgX19BUkdTKChjaGFyX3UgKiwgaW50LCBpbnQpKTsKK3N0YXRpYyBpbnQJY2luX2lzaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQJY2luX2lzZnVuY2RlY2wgX19BUkdTKChjaGFyX3UgKiosIGxpbmVucl9UKSk7CitzdGF0aWMgaW50CWNpbl9pc2lmIF9fQVJHUygoY2hhcl91ICopKTsKK3N0YXRpYyBpbnQJY2luX2lzZWxzZSBfX0FSR1MoKGNoYXJfdSAqKSk7CitzdGF0aWMgaW50CWNpbl9pc2RvIF9fQVJHUygoY2hhcl91ICopKTsKK3N0YXRpYyBpbnQJY2luX2lzd2hpbGVvZmRvIF9fQVJHUygoY2hhcl91ICosIGxpbmVucl9ULCBpbnQpKTsKK3N0YXRpYyBpbnQJY2luX2lzYnJlYWsgX19BUkdTKChjaGFyX3UgKikpOworc3RhdGljIGludAljaW5faXNfY3BwX2Jhc2VjbGFzcyBfX0FSR1MoKGNoYXJfdSAqbGluZSwgY29sbnJfVCAqY29sKSk7CitzdGF0aWMgaW50CWNpbl9lbmRzX2luIF9fQVJHUygoY2hhcl91ICosIGNoYXJfdSAqLCBjaGFyX3UgKikpOworc3RhdGljIGludAljaW5fc2tpcDJwb3MgX19BUkdTKChwb3NfVCAqdHJ5cG9zKSk7CitzdGF0aWMgcG9zX1QJKmZpbmRfc3RhcnRfYnJhY2UgX19BUkdTKChpbnQpKTsKK3N0YXRpYyBwb3NfVAkqZmluZF9tYXRjaF9wYXJlbiBfX0FSR1MoKGludCwgaW50KSk7CitzdGF0aWMgaW50CWNvcnJfaW5kX21heHBhcmVuIF9fQVJHUygoaW50IGluZF9tYXhwYXJlbiwgcG9zX1QgKnN0YXJ0cG9zKSk7CitzdGF0aWMgaW50CWZpbmRfbGFzdF9wYXJlbiBfX0FSR1MoKGNoYXJfdSAqbCwgaW50IHN0YXJ0LCBpbnQgZW5kKSk7CitzdGF0aWMgaW50CWZpbmRfbWF0Y2ggX19BUkdTKChpbnQgbG9va2ZvciwgbGluZW5yX1Qgb3Vyc2NvcGUsIGludCBpbmRfbWF4cGFyZW4sIGludCBpbmRfbWF4Y29tbWVudCkpOworCisvKgorICogU2tpcCBvdmVyIHdoaXRlIHNwYWNlIGFuZCBDIGNvbW1lbnRzIHdpdGhpbiB0aGUgbGluZS4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorY2luX3NraXBjb21tZW50KHMpCisgICAgY2hhcl91CSpzOworeworICAgIHdoaWxlICgqcykKKyAgICB7CisJcyA9IHNraXB3aGl0ZShzKTsKKwlpZiAoKnMgIT0gJy8nKQorCSAgICBicmVhazsKKwkrK3M7CisJaWYgKCpzID09ICcvJykJCS8qIHNsYXNoLXNsYXNoIGNvbW1lbnQgY29udGludWVzIHRpbGwgZW9sICovCisJeworCSAgICBzICs9IFNUUkxFTihzKTsKKwkgICAgYnJlYWs7CisJfQorCWlmICgqcyAhPSAnKicpCisJICAgIGJyZWFrOworCWZvciAoKytzOyAqczsgKytzKQkvKiBza2lwIHNsYXNoLXN0YXIgY29tbWVudCAqLworCSAgICBpZiAoc1swXSA9PSAnKicgJiYgc1sxXSA9PSAnLycpCisJICAgIHsKKwkJcyArPSAyOworCQlicmVhazsKKwkgICAgfQorICAgIH0KKyAgICByZXR1cm4gczsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZXJlIHRoZXJlIGlzIG5vIGNvZGUgYXQgKnMuICBXaGl0ZSBzcGFjZSBhbmQgY29tbWVudHMgYXJlCisgKiBub3QgY29uc2lkZXJlZCBjb2RlLgorICovCisgICAgc3RhdGljIGludAorY2luX25vY29kZShzKQorICAgIGNoYXJfdQkqczsKK3sKKyAgICByZXR1cm4gKmNpbl9za2lwY29tbWVudChzKSA9PSBOVUw7Cit9CisKKy8qCisgKiBDaGVjayBwcmV2aW91cyBsaW5lcyBmb3IgYSAiLy8iIGxpbmUgY29tbWVudCwgc2tpcHBpbmcgb3ZlciBibGFuayBsaW5lcy4KKyAqLworICAgIHN0YXRpYyBwb3NfVCAqCitmaW5kX2xpbmVfY29tbWVudCgpIC8qIFhYWCAqLworeworICAgIHN0YXRpYyBwb3NfVCBwb3M7CisgICAgY2hhcl91CSAqbGluZTsKKyAgICBjaGFyX3UJICpwOworCisgICAgcG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICB3aGlsZSAoLS1wb3MubG51bSA+IDApCisgICAgeworCWxpbmUgPSBtbF9nZXQocG9zLmxudW0pOworCXAgPSBza2lwd2hpdGUobGluZSk7CisJaWYgKGNpbl9pc2xpbmVjb21tZW50KHApKQorCXsKKwkgICAgcG9zLmNvbCA9IChpbnQpKHAgLSBsaW5lKTsKKwkgICAgcmV0dXJuICZwb3M7CisJfQorCWlmICgqcCAhPSBOVUwpCisJICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIENoZWNrIGlmIHN0cmluZyBtYXRjaGVzICJsYWJlbDoiOyBtb3ZlIHRvIGNoYXJhY3RlciBhZnRlciAnOicgaWYgdHJ1ZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2Npbl9pc2xhYmVsX3NraXAocykKKyAgICBjaGFyX3UJKipzOworeworICAgIGlmICghdmltX2lzSURjKCoqcykpCSAgICAvKiBuZWVkIGF0IGxlYXN0IG9uZSBJRCBjaGFyYWN0ZXIgKi8KKwlyZXR1cm4gRkFMU0U7CisKKyAgICB3aGlsZSAodmltX2lzSURjKCoqcykpCisJKCpzKSsrOworCisgICAgKnMgPSBjaW5fc2tpcGNvbW1lbnQoKnMpOworCisgICAgLyogIjo6IiBpcyBub3QgYSBsYWJlbCwgaXQncyBDKysgKi8KKyAgICByZXR1cm4gKCoqcyA9PSAnOicgJiYgKisrKnMgIT0gJzonKTsKK30KKworLyoKKyAqIFJlY29nbml6ZSBhIGxhYmVsOiAibGFiZWw6Ii4KKyAqIE5vdGU6IGN1cndpbi0+d19jdXJzb3IgbXVzdCBiZSB3aGVyZSB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIGxhYmVsLgorICovCisgICAgaW50CitjaW5faXNsYWJlbChpbmRfbWF4Y29tbWVudCkJCS8qIFhYWCAqLworICAgIGludAkJaW5kX21heGNvbW1lbnQ7Cit7CisgICAgY2hhcl91CSpzOworCisgICAgcyA9IGNpbl9za2lwY29tbWVudChtbF9nZXRfY3VybGluZSgpKTsKKworICAgIC8qCisgICAgICogRXhjbHVkZSAiZGVmYXVsdCIgZnJvbSBsYWJlbHMsIHNpbmNlIGl0IHNob3VsZCBiZSBpbmRlbnRlZAorICAgICAqIGxpa2UgYSBzd2l0Y2ggbGFiZWwuICBTYW1lIGZvciBDKysgc2NvcGUgZGVjbGFyYXRpb25zLgorICAgICAqLworICAgIGlmIChjaW5faXNkZWZhdWx0KHMpKQorCXJldHVybiBGQUxTRTsKKyAgICBpZiAoY2luX2lzc2NvcGVkZWNsKHMpKQorCXJldHVybiBGQUxTRTsKKworICAgIGlmIChjaW5faXNsYWJlbF9za2lwKCZzKSkKKyAgICB7CisJLyoKKwkgKiBPbmx5IGFjY2VwdCBhIGxhYmVsIGlmIHRoZSBwcmV2aW91cyBsaW5lIGlzIHRlcm1pbmF0ZWQgb3IgaXMgYSBjYXNlCisJICogbGFiZWwuCisJICovCisJcG9zX1QJY3Vyc29yX3NhdmU7CisJcG9zX1QJKnRyeXBvczsKKwljaGFyX3UJKmxpbmU7CisKKwljdXJzb3Jfc2F2ZSA9IGN1cndpbi0+d19jdXJzb3I7CisJd2hpbGUgKGN1cndpbi0+d19jdXJzb3IubG51bSA+IDEpCisJeworCSAgICAtLWN1cndpbi0+d19jdXJzb3IubG51bTsKKworCSAgICAvKgorCSAgICAgKiBJZiB3ZSdyZSBpbiBhIGNvbW1lbnQgbm93LCBza2lwIHRvIHRoZSBzdGFydCBvZiB0aGUgY29tbWVudC4KKwkgICAgICovCisJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKwkgICAgaWYgKCh0cnlwb3MgPSBmaW5kX3N0YXJ0X2NvbW1lbnQoaW5kX21heGNvbW1lbnQpKSAhPSBOVUxMKSAvKiBYWFggKi8KKwkJY3Vyd2luLT53X2N1cnNvciA9ICp0cnlwb3M7CisKKwkgICAgbGluZSA9IG1sX2dldF9jdXJsaW5lKCk7CisJICAgIGlmIChjaW5faXNwcmVwcm9jKGxpbmUpKQkvKiBpZ25vcmUgI2RlZmluZXMsICNpZiwgZXRjLiAqLworCQljb250aW51ZTsKKwkgICAgaWYgKCoobGluZSA9IGNpbl9za2lwY29tbWVudChsaW5lKSkgPT0gTlVMKQorCQljb250aW51ZTsKKworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gY3Vyc29yX3NhdmU7CisJICAgIGlmIChjaW5faXN0ZXJtaW5hdGVkKGxpbmUsIFRSVUUsIEZBTFNFKQorCQkgICAgfHwgY2luX2lzc2NvcGVkZWNsKGxpbmUpCisJCSAgICB8fCBjaW5faXNjYXNlKGxpbmUpCisJCSAgICB8fCAoY2luX2lzbGFiZWxfc2tpcCgmbGluZSkgJiYgY2luX25vY29kZShsaW5lKSkpCisJCXJldHVybiBUUlVFOworCSAgICByZXR1cm4gRkFMU0U7CisJfQorCWN1cndpbi0+d19jdXJzb3IgPSBjdXJzb3Jfc2F2ZTsKKwlyZXR1cm4gVFJVRTsJCS8qIGxhYmVsIGF0IHN0YXJ0IG9mIGZpbGU/Pz8gKi8KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogUmVjb2duaXplIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBhbmQgZW51bWVyYXRpb25zLgorICogUSZELUltcGxlbWVudGF0aW9uOgorICogY2hlY2sgZm9yICI9IiBhdCBlbmQgb3IgIlt0eXBlZGVmXSBlbnVtIiBhdCBiZWdpbm5pbmcgb2YgbGluZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2Npbl9pc2luaXQodm9pZCkKK3sKKyAgICBjaGFyX3UJKnM7CisKKyAgICBzID0gY2luX3NraXBjb21tZW50KG1sX2dldF9jdXJsaW5lKCkpOworCisgICAgaWYgKFNUUk5DTVAocywgInR5cGVkZWYiLCA3KSA9PSAwICYmICF2aW1faXNJRGMoc1s3XSkpCisJcyA9IGNpbl9za2lwY29tbWVudChzICsgNyk7CisKKyAgICBpZiAoU1RSTkNNUChzLCAiZW51bSIsIDQpID09IDAgJiYgIXZpbV9pc0lEYyhzWzRdKSkKKwlyZXR1cm4gVFJVRTsKKworICAgIGlmIChjaW5fZW5kc19pbihzLCAoY2hhcl91ICopIj0iLCAoY2hhcl91ICopInsiKSkKKwlyZXR1cm4gVFJVRTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFJlY29nbml6ZSBhIHN3aXRjaCBsYWJlbDogImNhc2UgLio6IiBvciAiZGVmYXVsdDoiLgorICovCisgICAgIGludAorY2luX2lzY2FzZShzKQorICAgIGNoYXJfdSAqczsKK3sKKyAgICBzID0gY2luX3NraXBjb21tZW50KHMpOworICAgIGlmIChTVFJOQ01QKHMsICJjYXNlIiwgNCkgPT0gMCAmJiAhdmltX2lzSURjKHNbNF0pKQorICAgIHsKKwlmb3IgKHMgKz0gNDsgKnM7ICsrcykKKwl7CisJICAgIHMgPSBjaW5fc2tpcGNvbW1lbnQocyk7CisJICAgIGlmICgqcyA9PSAnOicpCisJICAgIHsKKwkJaWYgKHNbMV0gPT0gJzonKQkvKiBza2lwIG92ZXIgIjo6IiBmb3IgQysrICovCisJCSAgICArK3M7CisJCWVsc2UKKwkJICAgIHJldHVybiBUUlVFOworCSAgICB9CisJICAgIGlmICgqcyA9PSAnXCcnICYmIHNbMV0gJiYgc1syXSA9PSAnXCcnKQorCQlzICs9IDI7CQkJLyogc2tpcCBvdmVyICcuJyAqLworCSAgICBlbHNlIGlmICgqcyA9PSAnLycgJiYgKHNbMV0gPT0gJyonIHx8IHNbMV0gPT0gJy8nKSkKKwkJcmV0dXJuIEZBTFNFOwkJLyogc3RvcCBhdCBjb21tZW50ICovCisJICAgIGVsc2UgaWYgKCpzID09ICciJykKKwkJcmV0dXJuIEZBTFNFOwkJLyogc3RvcCBhdCBzdHJpbmcgKi8KKwl9CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChjaW5faXNkZWZhdWx0KHMpKQorCXJldHVybiBUUlVFOworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFJlY29nbml6ZSBhICJkZWZhdWx0IiBzd2l0Y2ggbGFiZWwuCisgKi8KKyAgICBzdGF0aWMgaW50CitjaW5faXNkZWZhdWx0KHMpCisgICAgY2hhcl91ICAqczsKK3sKKyAgICByZXR1cm4gKFNUUk5DTVAocywgImRlZmF1bHQiLCA3KSA9PSAwCisJICAgICYmICoocyA9IGNpbl9za2lwY29tbWVudChzICsgNykpID09ICc6JworCSAgICAmJiBzWzFdICE9ICc6Jyk7Cit9CisKKy8qCisgKiBSZWNvZ25pemUgYSAicHVibGljL3ByaXZhdGUvcHJvY3RlY3RlZCIgc2NvcGUgZGVjbGFyYXRpb24gbGFiZWwuCisgKi8KKyAgICBpbnQKK2Npbl9pc3Njb3BlZGVjbChzKQorICAgIGNoYXJfdQkqczsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBzID0gY2luX3NraXBjb21tZW50KHMpOworICAgIGlmIChTVFJOQ01QKHMsICJwdWJsaWMiLCA2KSA9PSAwKQorCWkgPSA2OworICAgIGVsc2UgaWYgKFNUUk5DTVAocywgInByb3RlY3RlZCIsIDkpID09IDApCisJaSA9IDk7CisgICAgZWxzZSBpZiAoU1RSTkNNUChzLCAicHJpdmF0ZSIsIDcpID09IDApCisJaSA9IDc7CisgICAgZWxzZQorCXJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gKCoocyA9IGNpbl9za2lwY29tbWVudChzICsgaSkpID09ICc6JyAmJiBzWzFdICE9ICc6Jyk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBub24tZW1wdHkgbm9uLWNvbW1lbnQgY2hhcmFjdGVyIGFmdGVyIGEgJzonLgorICogUmV0dXJuIE5VTEwgaWYgbm90IGZvdW5kLgorICoJICBjYXNlIDIzNDogICAgYSA9IGI7CisgKgkJICAgICAgIF4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorYWZ0ZXJfbGFiZWwobCkKKyAgICBjaGFyX3UgICpsOworeworICAgIGZvciAoIDsgKmw7ICsrbCkKKyAgICB7CisJaWYgKCpsID09ICc6JykKKwl7CisJICAgIGlmIChsWzFdID09ICc6JykJICAgIC8qIHNraXAgb3ZlciAiOjoiIGZvciBDKysgKi8KKwkJKytsOworCSAgICBlbHNlIGlmICghY2luX2lzY2FzZShsICsgMSkpCisJCWJyZWFrOworCX0KKwllbHNlIGlmICgqbCA9PSAnXCcnICYmIGxbMV0gJiYgbFsyXSA9PSAnXCcnKQorCSAgICBsICs9IDI7CQkgICAgLyogc2tpcCBvdmVyICd4JyAqLworICAgIH0KKyAgICBpZiAoKmwgPT0gTlVMKQorCXJldHVybiBOVUxMOworICAgIGwgPSBjaW5fc2tpcGNvbW1lbnQobCArIDEpOworICAgIGlmICgqbCA9PSBOVUwpCisJcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIGw7Cit9CisKKy8qCisgKiBHZXQgaW5kZW50IG9mIGxpbmUgImxudW0iLCBza2lwcGluZyBhIGxhYmVsLgorICogUmV0dXJuIDAgaWYgdGhlcmUgaXMgbm90aGluZyBhZnRlciB0aGUgbGFiZWwuCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfaW5kZW50X25vbGFiZWwobG51bSkJCS8qIFhYWCAqLworICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgY2hhcl91CSpsOworICAgIHBvc19UCWZwOworICAgIGNvbG5yX1QJY29sOworICAgIGNoYXJfdQkqcDsKKworICAgIGwgPSBtbF9nZXQobG51bSk7CisgICAgcCA9IGFmdGVyX2xhYmVsKGwpOworICAgIGlmIChwID09IE5VTEwpCisJcmV0dXJuIDA7CisKKyAgICBmcC5jb2wgPSAoY29sbnJfVCkocCAtIGwpOworICAgIGZwLmxudW0gPSBsbnVtOworICAgIGdldHZjb2woY3Vyd2luLCAmZnAsICZjb2wsIE5VTEwsIE5VTEwpOworICAgIHJldHVybiAoaW50KWNvbDsKK30KKworLyoKKyAqIEZpbmQgaW5kZW50IGZvciBsaW5lICJsbnVtIiwgaWdub3JpbmcgYW55IGNhc2Ugb3IganVtcCBsYWJlbC4KKyAqIEFsc28gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdGV4dCAoYWZ0ZXIgdGhlIGxhYmVsKS4KKyAqICAgbGFiZWw6CWlmIChhc2RmICYmIGFzZGZhc2RmKQorICoJCV4KKyAqLworICAgIHN0YXRpYyBpbnQKK3NraXBfbGFiZWwobG51bSwgcHAsIGluZF9tYXhjb21tZW50KQorICAgIGxpbmVucl9UCWxudW07CisgICAgY2hhcl91CSoqcHA7CisgICAgaW50CQlpbmRfbWF4Y29tbWVudDsKK3sKKyAgICBjaGFyX3UJKmw7CisgICAgaW50CQlhbW91bnQ7CisgICAgcG9zX1QJY3Vyc29yX3NhdmU7CisKKyAgICBjdXJzb3Jfc2F2ZSA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbG51bTsKKyAgICBsID0gbWxfZ2V0X2N1cmxpbmUoKTsKKwkJCQkgICAgLyogWFhYICovCisgICAgaWYgKGNpbl9pc2Nhc2UobCkgfHwgY2luX2lzc2NvcGVkZWNsKGwpIHx8IGNpbl9pc2xhYmVsKGluZF9tYXhjb21tZW50KSkKKyAgICB7CisJYW1vdW50ID0gZ2V0X2luZGVudF9ub2xhYmVsKGxudW0pOworCWwgPSBhZnRlcl9sYWJlbChtbF9nZXRfY3VybGluZSgpKTsKKwlpZiAobCA9PSBOVUxMKQkJLyoganVzdCBpbiBjYXNlICovCisJICAgIGwgPSBtbF9nZXRfY3VybGluZSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWFtb3VudCA9IGdldF9pbmRlbnQoKTsKKwlsID0gbWxfZ2V0X2N1cmxpbmUoKTsKKyAgICB9CisgICAgKnBwID0gbDsKKworICAgIGN1cndpbi0+d19jdXJzb3IgPSBjdXJzb3Jfc2F2ZTsKKyAgICByZXR1cm4gYW1vdW50OworfQorCisvKgorICogUmV0dXJuIHRoZSBpbmRlbnQgb2YgdGhlIGZpcnN0IHZhcmlhYmxlIG5hbWUgYWZ0ZXIgYSB0eXBlIGluIGEgZGVjbGFyYXRpb24uCisgKiAgaW50CSAgICBhLAkJCWluZGVudCBvZiAiYSIKKyAqICBzdGF0aWMgc3RydWN0IGZvbyAgICBiLAlpbmRlbnQgb2YgImIiCisgKiAgZW51bSBibGEgICAgYywJCWluZGVudCBvZiAiYyIKKyAqIFJldHVybnMgemVybyB3aGVuIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGEgZGVjbGFyYXRpb24uCisgKi8KKyAgICBzdGF0aWMgaW50CitjaW5fZmlyc3RfaWRfYW1vdW50KCkKK3sKKyAgICBjaGFyX3UJKmxpbmUsICpwLCAqczsKKyAgICBpbnQJCWxlbjsKKyAgICBwb3NfVAlmcDsKKyAgICBjb2xucl9UCWNvbDsKKworICAgIGxpbmUgPSBtbF9nZXRfY3VybGluZSgpOworICAgIHAgPSBza2lwd2hpdGUobGluZSk7CisgICAgbGVuID0gc2tpcHRvd2hpdGUocCkgLSBwOworICAgIGlmIChsZW4gPT0gNiAmJiBTVFJOQ01QKHAsICJzdGF0aWMiLCA2KSA9PSAwKQorICAgIHsKKwlwID0gc2tpcHdoaXRlKHAgKyA2KTsKKwlsZW4gPSBza2lwdG93aGl0ZShwKSAtIHA7CisgICAgfQorICAgIGlmIChsZW4gPT0gNiAmJiBTVFJOQ01QKHAsICJzdHJ1Y3QiLCA2KSA9PSAwKQorCXAgPSBza2lwd2hpdGUocCArIDYpOworICAgIGVsc2UgaWYgKGxlbiA9PSA0ICYmIFNUUk5DTVAocCwgImVudW0iLCA0KSA9PSAwKQorCXAgPSBza2lwd2hpdGUocCArIDQpOworICAgIGVsc2UgaWYgKChsZW4gPT0gOCAmJiBTVFJOQ01QKHAsICJ1bnNpZ25lZCIsIDgpID09IDApCisJICAgIHx8IChsZW4gPT0gNiAmJiBTVFJOQ01QKHAsICJzaWduZWQiLCA2KSA9PSAwKSkKKyAgICB7CisJcyA9IHNraXB3aGl0ZShwICsgbGVuKTsKKwlpZiAoKFNUUk5DTVAocywgImludCIsIDMpID09IDAgJiYgdmltX2lzd2hpdGUoc1szXSkpCisJCXx8IChTVFJOQ01QKHMsICJsb25nIiwgNCkgPT0gMCAmJiB2aW1faXN3aGl0ZShzWzRdKSkKKwkJfHwgKFNUUk5DTVAocywgInNob3J0IiwgNSkgPT0gMCAmJiB2aW1faXN3aGl0ZShzWzVdKSkKKwkJfHwgKFNUUk5DTVAocywgImNoYXIiLCA0KSA9PSAwICYmIHZpbV9pc3doaXRlKHNbNF0pKSkKKwkgICAgcCA9IHM7CisgICAgfQorICAgIGZvciAobGVuID0gMDsgdmltX2lzSURjKHBbbGVuXSk7ICsrbGVuKQorCTsKKyAgICBpZiAobGVuID09IDAgfHwgIXZpbV9pc3doaXRlKHBbbGVuXSkgfHwgY2luX25vY29kZShwKSkKKwlyZXR1cm4gMDsKKworICAgIHAgPSBza2lwd2hpdGUocCArIGxlbik7CisgICAgZnAubG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICBmcC5jb2wgPSAoY29sbnJfVCkocCAtIGxpbmUpOworICAgIGdldHZjb2woY3Vyd2luLCAmZnAsICZjb2wsIE5VTEwsIE5VTEwpOworICAgIHJldHVybiAoaW50KWNvbDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgaW5kZW50IG9mIHRoZSBmaXJzdCBub24tYmxhbmsgYWZ0ZXIgYW4gZXF1YWwgc2lnbi4KKyAqICAgICAgIGNoYXIgKmZvbyA9ICJoZXJlIjsKKyAqIFJldHVybiB6ZXJvIGlmIG5vICh1c2VmdWwpIGVxdWFsIHNpZ24gZm91bmQuCisgKiBSZXR1cm4gLTEgaWYgdGhlIGxpbmUgYWJvdmUgImxudW0iIGVuZHMgaW4gYSBiYWNrc2xhc2guCisgKiAgICAgIGZvbyA9ICJhc2RmXAorICoJICAgICAgIGFzZGZcCisgKgkgICAgICAgaGVyZSI7CisgKi8KKyAgICBzdGF0aWMgaW50CitjaW5fZ2V0X2VxdWFsX2Ftb3VudChsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgY2hhcl91CSpsaW5lOworICAgIGNoYXJfdQkqczsKKyAgICBjb2xucl9UCWNvbDsKKyAgICBwb3NfVAlmcDsKKworICAgIGlmIChsbnVtID4gMSkKKyAgICB7CisJbGluZSA9IG1sX2dldChsbnVtIC0gMSk7CisJaWYgKCpsaW5lICE9IE5VTCAmJiBsaW5lW1NUUkxFTihsaW5lKSAtIDFdID09ICdcXCcpCisJICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBsaW5lID0gcyA9IG1sX2dldChsbnVtKTsKKyAgICB3aGlsZSAoKnMgIT0gTlVMICYmIHZpbV9zdHJjaHIoKGNoYXJfdSAqKSI9O3t9XCInIiwgKnMpID09IE5VTEwpCisgICAgeworCWlmIChjaW5faXNjb21tZW50KHMpKQkvKiBpZ25vcmUgY29tbWVudHMgKi8KKwkgICAgcyA9IGNpbl9za2lwY29tbWVudChzKTsKKwllbHNlCisJICAgICsrczsKKyAgICB9CisgICAgaWYgKCpzICE9ICc9JykKKwlyZXR1cm4gMDsKKworICAgIHMgPSBza2lwd2hpdGUocyArIDEpOworICAgIGlmIChjaW5fbm9jb2RlKHMpKQorCXJldHVybiAwOworCisgICAgaWYgKCpzID09ICciJykJLyogbmljZSBhbGlnbm1lbnQgZm9yIGNvbnRpbnVlZCBzdHJpbmdzICovCisJKytzOworCisgICAgZnAubG51bSA9IGxudW07CisgICAgZnAuY29sID0gKGNvbG5yX1QpKHMgLSBsaW5lKTsKKyAgICBnZXR2Y29sKGN1cndpbiwgJmZwLCAmY29sLCBOVUxMLCBOVUxMKTsKKyAgICByZXR1cm4gKGludCljb2w7Cit9CisKKy8qCisgKiBSZWNvZ25pemUgYSBwcmVwcm9jZXNzb3Igc3RhdGVtZW50OiBBbnkgbGluZSB0aGF0IHN0YXJ0cyB3aXRoICcjJy4KKyAqLworICAgIHN0YXRpYyBpbnQKK2Npbl9pc3ByZXByb2MocykKKyAgICBjaGFyX3UgKnM7Cit7CisgICAgcyA9IHNraXB3aGl0ZShzKTsKKyAgICBpZiAoKnMgPT0gJyMnKQorCXJldHVybiBUUlVFOworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGxpbmUgIipwcCIgYXQgIipsbnVtcCIgaXMgYSBwcmVwcm9jZXNzb3Igc3RhdGVtZW50IG9yIGEKKyAqIGNvbnRpbnVhdGlvbiBsaW5lIG9mIGEgcHJlcHJvY2Vzc29yIHN0YXRlbWVudC4gIERlY3JlYXNlICIqbG51bXAiIHRvIHRoZQorICogc3RhcnQgYW5kIHJldHVybiB0aGUgbGluZSBpbiAiKnBwIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK2Npbl9pc3ByZXByb2NfY29udChwcCwgbG51bXApCisgICAgY2hhcl91CSoqcHA7CisgICAgbGluZW5yX1QJKmxudW1wOworeworICAgIGNoYXJfdQkqbGluZSA9ICpwcDsKKyAgICBsaW5lbnJfVAlsbnVtID0gKmxudW1wOworICAgIGludAkJcmV0dmFsID0gRkFMU0U7CisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisJaWYgKGNpbl9pc3ByZXByb2MobGluZSkpCisJeworCSAgICByZXR2YWwgPSBUUlVFOworCSAgICAqbG51bXAgPSBsbnVtOworCSAgICBicmVhazsKKwl9CisJaWYgKGxudW0gPT0gMSkKKwkgICAgYnJlYWs7CisJbGluZSA9IG1sX2dldCgtLWxudW0pOworCWlmICgqbGluZSA9PSBOVUwgfHwgbGluZVtTVFJMRU4obGluZSkgLSAxXSAhPSAnXFwnKQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobG51bSAhPSAqbG51bXApCisJKnBwID0gbWxfZ2V0KCpsbnVtcCk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFJlY29nbml6ZSB0aGUgc3RhcnQgb2YgYSBDIG9yIEMrKyBjb21tZW50LgorICovCisgICAgc3RhdGljIGludAorY2luX2lzY29tbWVudChwKQorICAgIGNoYXJfdSAgKnA7Cit7CisgICAgcmV0dXJuIChwWzBdID09ICcvJyAmJiAocFsxXSA9PSAnKicgfHwgcFsxXSA9PSAnLycpKTsKK30KKworLyoKKyAqIFJlY29nbml6ZSB0aGUgc3RhcnQgb2YgYSAiLy8iIGNvbW1lbnQuCisgKi8KKyAgICBzdGF0aWMgaW50CitjaW5faXNsaW5lY29tbWVudChwKQorICAgIGNoYXJfdSAqcDsKK3sKKyAgICByZXR1cm4gKHBbMF0gPT0gJy8nICYmIHBbMV0gPT0gJy8nKTsKK30KKworLyoKKyAqIFJlY29nbml6ZSBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAneycgb3IgJ30nLCBvciBlbmRzIHdpdGggJzsnLCAneycgb3IgJ30nLgorICogRG9uJ3QgY29uc2lkZXIgIn0gZWxzZSIgYSB0ZXJtaW5hdGVkIGxpbmUuCisgKiBSZXR1cm4gdGhlIGNoYXJhY3RlciB0ZXJtaW5hdGluZyB0aGUgbGluZSAoZW5kaW5nIGNoYXIncyBoYXZlIHByZWNlZGVuY2UgaWYKKyAqIGJvdGggYXBwbHkgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGluaXRpYWxpemF0aW9ucykuCisgKi8KKyAgICBzdGF0aWMgaW50CitjaW5faXN0ZXJtaW5hdGVkKHMsIGluY2xfb3BlbiwgaW5jbF9jb21tYSkKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQlpbmNsX29wZW47CS8qIGluY2x1ZGUgJ3snIGF0IHRoZSBlbmQgYXMgdGVybWluYXRvciAqLworICAgIGludAkJaW5jbF9jb21tYTsJLyogcmVjb2duaXplIGEgdHJhaWxpbmcgY29tbWEgKi8KK3sKKyAgICBjaGFyX3UgZm91bmRfc3RhcnQgPSAwOworCisgICAgcyA9IGNpbl9za2lwY29tbWVudChzKTsKKworICAgIGlmICgqcyA9PSAneycgfHwgKCpzID09ICd9JyAmJiAhY2luX2lzZWxzZShzKSkpCisJZm91bmRfc3RhcnQgPSAqczsKKworICAgIHdoaWxlICgqcykKKyAgICB7CisJLyogc2tpcCBvdmVyIGNvbW1lbnRzLCAiIiBzdHJpbmdzIGFuZCAnYydoYXJhY3RlcnMgKi8KKwlzID0gc2tpcF9zdHJpbmcoY2luX3NraXBjb21tZW50KHMpKTsKKwlpZiAoKCpzID09ICc7JyB8fCAoaW5jbF9vcGVuICYmICpzID09ICd7JykgfHwgKnMgPT0gJ30nCisJCQkJCQkgfHwgKGluY2xfY29tbWEgJiYgKnMgPT0gJywnKSkKKwkJJiYgY2luX25vY29kZShzICsgMSkpCisJICAgIHJldHVybiAqczsKKworCWlmICgqcykKKwkgICAgcysrOworICAgIH0KKyAgICByZXR1cm4gZm91bmRfc3RhcnQ7Cit9CisKKy8qCisgKiBSZWNvZ25pemUgdGhlIGJhc2ljIHBpY3R1cmUgb2YgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiAtLSBpdCBuZWVkcyB0bworICogaGF2ZSBhbiBvcGVuIHBhcmVuIHNvbWV3aGVyZSBhbmQgYSBjbG9zZSBwYXJlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIGFuZAorICogbm8gc2VtaWNvbG9ucyBhbnl3aGVyZS4KKyAqIFdoZW4gYSBsaW5lIGVuZHMgaW4gYSBjb21tYSB3ZSBjb250aW51ZSBsb29raW5nIGluIHRoZSBuZXh0IGxpbmUuCisgKiAic3AiIHBvaW50cyB0byBhIHN0cmluZyB3aXRoIHRoZSBsaW5lLiAgV2hlbiBsb29raW5nIGF0IG90aGVyIGxpbmVzIGl0IG11c3QKKyAqIGJlIHJlc3RvcmVkIHRvIHRoZSBsaW5lLiAgV2hlbiBpdCdzIE5VTEwgZmV0Y2ggbGluZXMgaGVyZS4KKyAqICJsbnVtIiBpcyB3aGVyZSB3ZSBzdGFydCBsb29raW5nLgorICovCisgICAgc3RhdGljIGludAorY2luX2lzZnVuY2RlY2woc3AsIGZpcnN0X2xudW0pCisgICAgY2hhcl91CSoqc3A7CisgICAgbGluZW5yX1QJZmlyc3RfbG51bTsKK3sKKyAgICBjaGFyX3UJKnM7CisgICAgbGluZW5yX1QJbG51bSA9IGZpcnN0X2xudW07CisgICAgaW50CQlyZXR2YWwgPSBGQUxTRTsKKworICAgIGlmIChzcCA9PSBOVUxMKQorCXMgPSBtbF9nZXQobG51bSk7CisgICAgZWxzZQorCXMgPSAqc3A7CisKKyAgICB3aGlsZSAoKnMgJiYgKnMgIT0gJygnICYmICpzICE9ICc7JyAmJiAqcyAhPSAnXCcnICYmICpzICE9ICciJykKKyAgICB7CisJaWYgKGNpbl9pc2NvbW1lbnQocykpCS8qIGlnbm9yZSBjb21tZW50cyAqLworCSAgICBzID0gY2luX3NraXBjb21tZW50KHMpOworCWVsc2UKKwkgICAgKytzOworICAgIH0KKyAgICBpZiAoKnMgIT0gJygnKQorCXJldHVybiBGQUxTRTsJCS8qICc7JywgJyBvciAiICBiZWZvcmUgYW55ICgpIG9yIG5vICcoJyAqLworCisgICAgd2hpbGUgKCpzICYmICpzICE9ICc7JyAmJiAqcyAhPSAnXCcnICYmICpzICE9ICciJykKKyAgICB7CisJaWYgKCpzID09ICcpJyAmJiBjaW5fbm9jb2RlKHMgKyAxKSkKKwl7CisJICAgIC8qICcpJyBhdCB0aGUgZW5kOiBtYXkgaGF2ZSBmb3VuZCBhIG1hdGNoCisJICAgICAqIENoZWNrIGZvciBoZSBwcmV2aW91cyBsaW5lIG5vdCB0byBlbmQgaW4gYSBiYWNrc2xhc2g6CisJICAgICAqICAgICAgICNpZiBkZWZpbmVkKHgpICYmIFwKKwkgICAgICoJCSBkZWZpbmVkKHkpCisJICAgICAqLworCSAgICBsbnVtID0gZmlyc3RfbG51bSAtIDE7CisJICAgIHMgPSBtbF9nZXQobG51bSk7CisJICAgIGlmICgqcyA9PSBOVUwgfHwgc1tTVFJMRU4ocykgLSAxXSAhPSAnXFwnKQorCQlyZXR2YWwgPSBUUlVFOworCSAgICBnb3RvIGRvbmU7CisJfQorCWlmICgqcyA9PSAnLCcgJiYgY2luX25vY29kZShzICsgMSkpCisJeworCSAgICAvKiAnLCcgYXQgdGhlIGVuZDogY29udGludWUgbG9va2luZyBpbiB0aGUgbmV4dCBsaW5lICovCisJICAgIGlmIChsbnVtID49IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQlicmVhazsKKworCSAgICBzID0gbWxfZ2V0KCsrbG51bSk7CisJfQorCWVsc2UgaWYgKGNpbl9pc2NvbW1lbnQocykpCS8qIGlnbm9yZSBjb21tZW50cyAqLworCSAgICBzID0gY2luX3NraXBjb21tZW50KHMpOworCWVsc2UKKwkgICAgKytzOworICAgIH0KKworZG9uZToKKyAgICBpZiAobG51bSAhPSBmaXJzdF9sbnVtICYmIHNwICE9IE5VTEwpCisJKnNwID0gbWxfZ2V0KGZpcnN0X2xudW0pOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworICAgIHN0YXRpYyBpbnQKK2Npbl9pc2lmKHApCisgICAgY2hhcl91ICAqcDsKK3sKKyAgICByZXR1cm4gKFNUUk5DTVAocCwgImlmIiwgMikgPT0gMCAmJiAhdmltX2lzSURjKHBbMl0pKTsKK30KKworICAgIHN0YXRpYyBpbnQKK2Npbl9pc2Vsc2UocCkKKyAgICBjaGFyX3UgICpwOworeworICAgIGlmICgqcCA9PSAnfScpCSAgICAvKiBhY2NlcHQgIn0gZWxzZSIgKi8KKwlwID0gY2luX3NraXBjb21tZW50KHAgKyAxKTsKKyAgICByZXR1cm4gKFNUUk5DTVAocCwgImVsc2UiLCA0KSA9PSAwICYmICF2aW1faXNJRGMocFs0XSkpOworfQorCisgICAgc3RhdGljIGludAorY2luX2lzZG8ocCkKKyAgICBjaGFyX3UgICpwOworeworICAgIHJldHVybiAoU1RSTkNNUChwLCAiZG8iLCAyKSA9PSAwICYmICF2aW1faXNJRGMocFsyXSkpOworfQorCisvKgorICogQ2hlY2sgaWYgdGhpcyBpcyBhICJ3aGlsZSIgdGhhdCBzaG91bGQgaGF2ZSBhIG1hdGNoaW5nICJkbyIuCisgKiBXZSBvbmx5IGFjY2VwdCBhICJ3aGlsZSAoY29uZGl0aW9uKSA7Iiwgd2l0aCBvbmx5IHdoaXRlIHNwYWNlIGJldHdlZW4gdGhlCisgKiAnKScgYW5kICc7Jy4gVGhlIGNvbmRpdGlvbiBtYXkgYmUgc3ByZWFkIG92ZXIgc2V2ZXJhbCBsaW5lcy4KKyAqLworICAgIHN0YXRpYyBpbnQKK2Npbl9pc3doaWxlb2ZkbyhwLCBsbnVtLCBpbmRfbWF4cGFyZW4pCSAgICAvKiBYWFggKi8KKyAgICBjaGFyX3UJKnA7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBpbnQJCWluZF9tYXhwYXJlbjsKK3sKKyAgICBwb3NfVAljdXJzb3Jfc2F2ZTsKKyAgICBwb3NfVAkqdHJ5cG9zOworICAgIGludAkJcmV0dmFsID0gRkFMU0U7CisKKyAgICBwID0gY2luX3NraXBjb21tZW50KHApOworICAgIGlmICgqcCA9PSAnfScpCQkvKiBhY2NlcHQgIn0gd2hpbGUgKGNvbmQpOyIgKi8KKwlwID0gY2luX3NraXBjb21tZW50KHAgKyAxKTsKKyAgICBpZiAoU1RSTkNNUChwLCAid2hpbGUiLCA1KSA9PSAwICYmICF2aW1faXNJRGMocFs1XSkpCisgICAgeworCWN1cnNvcl9zYXZlID0gY3Vyd2luLT53X2N1cnNvcjsKKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtOworCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKwlwID0gbWxfZ2V0X2N1cmxpbmUoKTsKKwl3aGlsZSAoKnAgJiYgKnAgIT0gJ3cnKQkvKiBza2lwIGFueSAnfScsIHVudGlsIHRoZSAndycgb2YgdGhlICJ3aGlsZSIgKi8KKwl7CisJICAgICsrcDsKKwkgICAgKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwl9CisJaWYgKCh0cnlwb3MgPSBmaW5kbWF0Y2hsaW1pdChOVUxMLCAwLCAwLCBpbmRfbWF4cGFyZW4pKSAhPSBOVUxMCisJCSYmICpjaW5fc2tpcGNvbW1lbnQobWxfZ2V0X3Bvcyh0cnlwb3MpICsgMSkgPT0gJzsnKQorCSAgICByZXR2YWwgPSBUUlVFOworCWN1cndpbi0+d19jdXJzb3IgPSBjdXJzb3Jfc2F2ZTsKKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworICAgIHN0YXRpYyBpbnQKK2Npbl9pc2JyZWFrKHApCisgICAgY2hhcl91ICAqcDsKK3sKKyAgICByZXR1cm4gKFNUUk5DTVAocCwgImJyZWFrIiwgNSkgPT0gMCAmJiAhdmltX2lzSURjKHBbNV0pKTsKK30KKworLyogRmluZCB0aGUgcG9zaXRpb24gb2YgYSBDKysgYmFzZS1jbGFzcyBkZWNsYXJhdGlvbiBvcgorICogY29uc3RydWN0b3ItaW5pdGlhbGl6YXRpb24uIGVnOgorICoKKyAqIGNsYXNzIE15Q2xhc3MgOgorICoJYmFzZUNsYXNzCQk8LS0gaGVyZQorICogY2xhc3MgTXlDbGFzcyA6IHB1YmxpYyBiYXNlQ2xhc3MsCisgKglhbm90aGVyQmFzZUNsYXNzCTwtLSBoZXJlIChzaG91bGQgcHJvYmFibHkgbGluZXVwID8/KQorICogTXlDbGFzczo6TXlDbGFzcyguLi4pIDoKKyAqCWJhc2VDbGFzcyguLi4pCQk8LS0gaGVyZSAoY29uc3RydWN0b3ItaW5pdGlhbGl6YXRpb24pCisgKi8KKyAgICBzdGF0aWMgaW50CitjaW5faXNfY3BwX2Jhc2VjbGFzcyhsaW5lLCBjb2wpCisgICAgY2hhcl91CSpsaW5lOworICAgIGNvbG5yX1QJKmNvbDsKK3sKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQljbGFzc19vcl9zdHJ1Y3QsIGxvb2tmb3JfY3Rvcl9pbml0LCBjcHBfYmFzZV9jbGFzczsKKworICAgICpjb2wgPSAwOworCisgICAgcyA9IGNpbl9za2lwY29tbWVudChsaW5lKTsKKyAgICBpZiAoKnMgPT0gTlVMKQorCXJldHVybiBGQUxTRTsKKworICAgIGNwcF9iYXNlX2NsYXNzID0gbG9va2Zvcl9jdG9yX2luaXQgPSBjbGFzc19vcl9zdHJ1Y3QgPSBGQUxTRTsKKworICAgIHdoaWxlKCpzICE9IE5VTCkKKyAgICB7CisJaWYgKHNbMF0gPT0gJzonKQorCXsKKwkgICAgaWYgKHNbMV0gPT0gJzonKQorCSAgICB7CisJCS8qIHNraXAgZG91YmxlIGNvbG9uLiBJdCBjYW4ndCBiZSBhIGNvbnN0cnVjdG9yCisJCSAqIGluaXRpYWxpemF0aW9uIGFueSBtb3JlICovCisJCWxvb2tmb3JfY3Rvcl9pbml0ID0gRkFMU0U7CisJCXMgPSBjaW5fc2tpcGNvbW1lbnQocyArIDIpOworCSAgICB9CisJICAgIGVsc2UgaWYgKGxvb2tmb3JfY3Rvcl9pbml0IHx8IGNsYXNzX29yX3N0cnVjdCkKKwkgICAgeworCQkvKiB3ZSBoYXZlIHNvbWV0aGluZyBmb3VuZCwgdGhhdCBsb29rcyBsaWtlIHRoZSBzdGFydCBvZgorCQkgKiBjcHAtYmFzZS1jbGFzcy1kZWNsYXJhdGlvbiBvciBjb250cnVjdG9yLWluaXRpYWxpemF0aW9uICovCisJCWNwcF9iYXNlX2NsYXNzID0gVFJVRTsKKwkJbG9va2Zvcl9jdG9yX2luaXQgPSBjbGFzc19vcl9zdHJ1Y3QgPSBGQUxTRTsKKwkJKmNvbCA9IDA7CisJCXMgPSBjaW5fc2tpcGNvbW1lbnQocyArIDEpOworCSAgICB9CisJICAgIGVsc2UKKwkJcyA9IGNpbl9za2lwY29tbWVudChzICsgMSk7CisJfQorCWVsc2UgaWYgKChTVFJOQ01QKHMsICJjbGFzcyIsIDUpID09IDAgJiYgIXZpbV9pc0lEYyhzWzVdKSkKKwkJfHwgKFNUUk5DTVAocywgInN0cnVjdCIsIDYpID09IDAgJiYgIXZpbV9pc0lEYyhzWzZdKSkpCisJeworCSAgICBjbGFzc19vcl9zdHJ1Y3QgPSBUUlVFOworCSAgICBsb29rZm9yX2N0b3JfaW5pdCA9IEZBTFNFOworCisJICAgIGlmICgqcyA9PSAnYycpCisJCXMgPSBjaW5fc2tpcGNvbW1lbnQocyArIDUpOworCSAgICBlbHNlCisJCXMgPSBjaW5fc2tpcGNvbW1lbnQocyArIDYpOworCX0KKwllbHNlCisJeworCSAgICBpZiAoc1swXSA9PSAneycgfHwgc1swXSA9PSAnfScgfHwgc1swXSA9PSAnOycpCisJICAgIHsKKwkJY3BwX2Jhc2VfY2xhc3MgPSBsb29rZm9yX2N0b3JfaW5pdCA9IGNsYXNzX29yX3N0cnVjdCA9IEZBTFNFOworCSAgICB9CisJICAgIGVsc2UgaWYgKHNbMF0gPT0gJyknKQorCSAgICB7CisJCS8qIENvbnN0cnVjdG9yLWluaXRpYWxpemF0aW9uIGlzIGFzc3VtZWQgaWYgd2UgY29tZSBhY3Jvc3MKKwkJICogc29tZXRoaW5nIGxpa2UgIik6IiAqLworCQljbGFzc19vcl9zdHJ1Y3QgPSBGQUxTRTsKKwkJbG9va2Zvcl9jdG9yX2luaXQgPSBUUlVFOworCSAgICB9CisJICAgIGVsc2UgaWYgKCF2aW1faXNJRGMoc1swXSkpCisJICAgIHsKKwkJLyogaWYgaXQgaXMgbm90IGFuIGlkZW50aWZpZXIsIHdlIGFyZSB3cm9uZyAqLworCQljbGFzc19vcl9zdHJ1Y3QgPSBGQUxTRTsKKwkJbG9va2Zvcl9jdG9yX2luaXQgPSBGQUxTRTsKKwkgICAgfQorCSAgICBlbHNlIGlmICgqY29sID09IDApCisJICAgIHsKKwkJLyogaXQgY2FuJ3QgYmUgYSBjb25zdHJ1Y3Rvci1pbml0aWFsaXphdGlvbiBhbnkgbW9yZSAqLworCQlsb29rZm9yX2N0b3JfaW5pdCA9IEZBTFNFOworCisJCS8qIHRoZSBmaXJzdCBzdGF0ZW1lbnQgc3RhcnRzIGhlcmU6IGxpbmV1cCB3aXRoIHRoaXMgb25lLi4uICovCisJCWlmIChjcHBfYmFzZV9jbGFzcyAmJiAqY29sID09IDApCisJCSAgICAqY29sID0gKGNvbG5yX1QpKHMgLSBsaW5lKTsKKwkgICAgfQorCisJICAgIHMgPSBjaW5fc2tpcGNvbW1lbnQocyArIDEpOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gY3BwX2Jhc2VfY2xhc3M7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBzdHJpbmcgInMiIGVuZHMgd2l0aCB0aGUgc3RyaW5nICJmaW5kIiwgcG9zc2libHkgZm9sbG93ZWQgYnkKKyAqIHdoaXRlIHNwYWNlIGFuZCBjb21tZW50cy4gIFNraXAgc3RyaW5ncyBhbmQgY29tbWVudHMuCisgKiBJZ25vcmUgImlnbm9yZSIgYWZ0ZXIgImZpbmQiIGlmIGl0J3Mgbm90IE5VTEwuCisgKi8KKyAgICBzdGF0aWMgaW50CitjaW5fZW5kc19pbihzLCBmaW5kLCBpZ25vcmUpCisgICAgY2hhcl91CSpzOworICAgIGNoYXJfdQkqZmluZDsKKyAgICBjaGFyX3UJKmlnbm9yZTsKK3sKKyAgICBjaGFyX3UJKnAgPSBzOworICAgIGNoYXJfdQkqcjsKKyAgICBpbnQJCWxlbiA9IChpbnQpU1RSTEVOKGZpbmQpOworCisgICAgd2hpbGUgKCpwICE9IE5VTCkKKyAgICB7CisJcCA9IGNpbl9za2lwY29tbWVudChwKTsKKwlpZiAoU1RSTkNNUChwLCBmaW5kLCBsZW4pID09IDApCisJeworCSAgICByID0gc2tpcHdoaXRlKHAgKyBsZW4pOworCSAgICBpZiAoaWdub3JlICE9IE5VTEwgJiYgU1RSTkNNUChyLCBpZ25vcmUsIFNUUkxFTihpZ25vcmUpKSA9PSAwKQorCQlyID0gc2tpcHdoaXRlKHIgKyBTVFJMRU4oaWdub3JlKSk7CisJICAgIGlmIChjaW5fbm9jb2RlKHIpKQorCQlyZXR1cm4gVFJVRTsKKwl9CisJaWYgKCpwICE9IE5VTCkKKwkgICAgKytwOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBTa2lwIHN0cmluZ3MsIGNoYXJzIGFuZCBjb21tZW50cyB1bnRpbCBhdCBvciBwYXN0ICJ0cnlwb3MiLgorICogUmV0dXJuIHRoZSBjb2x1bW4gZm91bmQuCisgKi8KKyAgICBzdGF0aWMgaW50CitjaW5fc2tpcDJwb3ModHJ5cG9zKQorICAgIHBvc19UCSp0cnlwb3M7Cit7CisgICAgY2hhcl91CSpsaW5lOworICAgIGNoYXJfdQkqcDsKKworICAgIHAgPSBsaW5lID0gbWxfZ2V0KHRyeXBvcy0+bG51bSk7CisgICAgd2hpbGUgKCpwICYmIChjb2xucl9UKShwIC0gbGluZSkgPCB0cnlwb3MtPmNvbCkKKyAgICB7CisJaWYgKGNpbl9pc2NvbW1lbnQocCkpCisJICAgIHAgPSBjaW5fc2tpcGNvbW1lbnQocCk7CisJZWxzZQorCXsKKwkgICAgcCA9IHNraXBfc3RyaW5nKHApOworCSAgICArK3A7CisJfQorICAgIH0KKyAgICByZXR1cm4gKGludCkocCAtIGxpbmUpOworfQorCisvKgorICogRmluZCB0aGUgJ3snIGF0IHRoZSBzdGFydCBvZiB0aGUgYmxvY2sgd2UgYXJlIGluLgorICogUmV0dXJuIE5VTEwgaWYgbm8gbWF0Y2ggZm91bmQuCisgKiBJZ25vcmUgYSAneycgdGhhdCBpcyBpbiBhIGNvbW1lbnQsIG1ha2VzIGluZGVudGluZyB0aGUgbmV4dCB0aHJlZSBsaW5lcworICogd29yay4gKi8KKy8qIGZvbygpICAgICovCisvKiB7CSAgICAqLworLyogfQkgICAgKi8KKworICAgIHN0YXRpYyBwb3NfVCAqCitmaW5kX3N0YXJ0X2JyYWNlKGluZF9tYXhjb21tZW50KQkgICAgLyogWFhYICovCisgICAgaW50CQlpbmRfbWF4Y29tbWVudDsKK3sKKyAgICBwb3NfVAljdXJzb3Jfc2F2ZTsKKyAgICBwb3NfVAkqdHJ5cG9zOworICAgIHBvc19UCSpwb3M7CisgICAgc3RhdGljIHBvc19UCXBvc19jb3B5OworCisgICAgY3Vyc29yX3NhdmUgPSBjdXJ3aW4tPndfY3Vyc29yOworICAgIHdoaWxlICgodHJ5cG9zID0gZmluZG1hdGNobGltaXQoTlVMTCwgJ3snLCBGTV9CTE9DS1NUT1AsIDApKSAhPSBOVUxMKQorICAgIHsKKwlwb3NfY29weSA9ICp0cnlwb3M7CS8qIGNvcHkgcG9zX1QsIG5leHQgZmluZG1hdGNoIHdpbGwgY2hhbmdlIGl0ICovCisJdHJ5cG9zID0gJnBvc19jb3B5OworCWN1cndpbi0+d19jdXJzb3IgPSAqdHJ5cG9zOworCXBvcyA9IE5VTEw7CisJLyogaWdub3JlIHRoZSB7IGlmIGl0J3MgaW4gYSAvLyBjb21tZW50ICovCisJaWYgKChjb2xucl9UKWNpbl9za2lwMnBvcyh0cnlwb3MpID09IHRyeXBvcy0+Y29sCisJCSYmIChwb3MgPSBmaW5kX3N0YXJ0X2NvbW1lbnQoaW5kX21heGNvbW1lbnQpKSA9PSBOVUxMKSAvKiBYWFggKi8KKwkgICAgYnJlYWs7CisJaWYgKHBvcyAhPSBOVUxMKQorCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBwb3MtPmxudW07CisgICAgfQorICAgIGN1cndpbi0+d19jdXJzb3IgPSBjdXJzb3Jfc2F2ZTsKKyAgICByZXR1cm4gdHJ5cG9zOworfQorCisvKgorICogRmluZCB0aGUgbWF0Y2hpbmcgJygnLCBmYWlsaW5nIGlmIGl0IGlzIGluIGEgY29tbWVudC4KKyAqIFJldHVybiBOVUxMIG9mIG5vIG1hdGNoIGZvdW5kLgorICovCisgICAgc3RhdGljIHBvc19UICoKK2ZpbmRfbWF0Y2hfcGFyZW4oaW5kX21heHBhcmVuLCBpbmRfbWF4Y29tbWVudCkJICAgIC8qIFhYWCAqLworICAgIGludAkJaW5kX21heHBhcmVuOworICAgIGludAkJaW5kX21heGNvbW1lbnQ7Cit7CisgICAgcG9zX1QJY3Vyc29yX3NhdmU7CisgICAgcG9zX1QJKnRyeXBvczsKKyAgICBzdGF0aWMgcG9zX1QJcG9zX2NvcHk7CisKKyAgICBjdXJzb3Jfc2F2ZSA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgaWYgKCh0cnlwb3MgPSBmaW5kbWF0Y2hsaW1pdChOVUxMLCAnKCcsIDAsIGluZF9tYXhwYXJlbikpICE9IE5VTEwpCisgICAgeworCS8qIGNoZWNrIGlmIHRoZSAoIGlzIGluIGEgLy8gY29tbWVudCAqLworCWlmICgoY29sbnJfVCljaW5fc2tpcDJwb3ModHJ5cG9zKSA+IHRyeXBvcy0+Y29sKQorCSAgICB0cnlwb3MgPSBOVUxMOworCWVsc2UKKwl7CisJICAgIHBvc19jb3B5ID0gKnRyeXBvczsJICAgIC8qIGNvcHkgdHJ5cG9zLCBmaW5kbWF0Y2ggd2lsbCBjaGFuZ2UgaXQgKi8KKwkgICAgdHJ5cG9zID0gJnBvc19jb3B5OworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gKnRyeXBvczsKKwkgICAgaWYgKGZpbmRfc3RhcnRfY29tbWVudChpbmRfbWF4Y29tbWVudCkgIT0gTlVMTCkgLyogWFhYICovCisJCXRyeXBvcyA9IE5VTEw7CisJfQorICAgIH0KKyAgICBjdXJ3aW4tPndfY3Vyc29yID0gY3Vyc29yX3NhdmU7CisgICAgcmV0dXJuIHRyeXBvczsKK30KKworLyoKKyAqIFJldHVybiBpbmRfbWF4cGFyZW4gY29ycmVjdGVkIGZvciB0aGUgZGlmZmVyZW5jZSBpbiBsaW5lIG51bWJlciBiZXR3ZWVuIHRoZQorICogY3Vyc29yIHBvc2l0aW9uIGFuZCAic3RhcnRwb3MiLiAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgc2VhcmNoaW5nIGZvciBhCisgKiBtYXRjaGluZyBwYXJlbiBhYm92ZSB0aGUgY3Vyc29yIGxpbmUgZG9lc24ndCBmaW5kIGEgbWF0Y2ggYmVjYXVzZSBvZgorICogbG9va2luZyBhIGZldyBsaW5lcyBmdXJ0aGVyLgorICovCisgICAgc3RhdGljIGludAorY29ycl9pbmRfbWF4cGFyZW4oaW5kX21heHBhcmVuLCBzdGFydHBvcykKKyAgICBpbnQJCWluZF9tYXhwYXJlbjsKKyAgICBwb3NfVAkqc3RhcnRwb3M7Cit7CisgICAgbG9uZwluID0gKGxvbmcpc3RhcnRwb3MtPmxudW0gLSAobG9uZyljdXJ3aW4tPndfY3Vyc29yLmxudW07CisKKyAgICBpZiAobiA+IDAgJiYgbiA8IGluZF9tYXhwYXJlbiAvIDIpCisJcmV0dXJuIGluZF9tYXhwYXJlbiAtIChpbnQpbjsKKyAgICByZXR1cm4gaW5kX21heHBhcmVuOworfQorCisvKgorICogU2V0IHdfY3Vyc29yLmNvbCB0byB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgbGFzdCB1bm1hdGNoZWQgJyknIG9yICd7JyBpbgorICogbGluZSAibCIuCisgKi8KKyAgICBzdGF0aWMgaW50CitmaW5kX2xhc3RfcGFyZW4obCwgc3RhcnQsIGVuZCkKKyAgICBjaGFyX3UJKmw7CisgICAgaW50CQlzdGFydCwgZW5kOworeworICAgIGludAkJaTsKKyAgICBpbnQJCXJldHZhbCA9IEZBTFNFOworICAgIGludAkJb3Blbl9jb3VudCA9IDA7CisKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CQkgICAgLyogZGVmYXVsdCBpcyBzdGFydCBvZiBsaW5lICovCisKKyAgICBmb3IgKGkgPSAwOyBsW2ldOyBpKyspCisgICAgeworCWkgPSAoaW50KShjaW5fc2tpcGNvbW1lbnQobCArIGkpIC0gbCk7IC8qIGlnbm9yZSBwYXJlbnMgaW4gY29tbWVudHMgKi8KKwlpID0gKGludCkoc2tpcF9zdHJpbmcobCArIGkpIC0gbCk7ICAgIC8qIGlnbm9yZSBwYXJlbnMgaW4gcXVvdGVzICovCisJaWYgKGxbaV0gPT0gc3RhcnQpCisJICAgICsrb3Blbl9jb3VudDsKKwllbHNlIGlmIChsW2ldID09IGVuZCkKKwl7CisJICAgIGlmIChvcGVuX2NvdW50ID4gMCkKKwkJLS1vcGVuX2NvdW50OworCSAgICBlbHNlCisJICAgIHsKKwkJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBpOworCQlyZXR2YWwgPSBUUlVFOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisgICAgaW50CitnZXRfY19pbmRlbnQoKQoreworICAgIC8qCisgICAgICogc3BhY2VzIGZyb20gYSBibG9jaydzIG9wZW5pbmcgYnJhY2UgdGhlIHByZXZhaWxpbmcgaW5kZW50IGZvciB0aGF0CisgICAgICogYmxvY2sgc2hvdWxkIGJlCisgICAgICovCisgICAgaW50IGluZF9sZXZlbCA9IGN1cmJ1Zi0+Yl9wX3N3OworCisgICAgLyoKKyAgICAgKiBzcGFjZXMgZnJvbSB0aGUgZWRnZSBvZiB0aGUgbGluZSBhbiBvcGVuIGJyYWNlIHRoYXQncyBhdCB0aGUgZW5kIG9mIGEKKyAgICAgKiBsaW5lIGlzIGltYWdpbmVkIHRvIGJlLgorICAgICAqLworICAgIGludCBpbmRfb3Blbl9pbWFnID0gMDsKKworICAgIC8qCisgICAgICogc3BhY2VzIGZyb20gdGhlIHByZXZhaWxpbmcgaW5kZW50IGZvciBhIGxpbmUgdGhhdCBpcyBub3QgcHJlY2VkZWRvZiBieQorICAgICAqIGFuIG9wZW5pbmcgYnJhY2UuCisgICAgICovCisgICAgaW50IGluZF9ub19icmFjZSA9IDA7CisKKyAgICAvKgorICAgICAqIGNvbHVtbiB3aGVyZSB0aGUgZmlyc3QgeyBvZiBhIGZ1bmN0aW9uIHNob3VsZCBiZSBsb2NhdGVkIH0KKyAgICAgKi8KKyAgICBpbnQgaW5kX2ZpcnN0X29wZW4gPSAwOworCisgICAgLyoKKyAgICAgKiBzcGFjZXMgZnJvbSB0aGUgcHJldmFpbGluZyBpbmRlbnQgYSBsZWZ0bW9zdCBvcGVuIGJyYWNlIHNob3VsZCBiZQorICAgICAqIGxvY2F0ZWQKKyAgICAgKi8KKyAgICBpbnQgaW5kX29wZW5fZXh0cmEgPSAwOworCisgICAgLyoKKyAgICAgKiBzcGFjZXMgZnJvbSB0aGUgbWF0Y2hpbmcgb3BlbiBicmFjZSAocmVhbCBsb2NhdGlvbiBmb3Igb25lIGF0IHRoZSBsZWZ0CisgICAgICogZWRnZTsgaW1hZ2luYXJ5IGxvY2F0aW9uIGZyb20gb25lIHRoYXQgZW5kcyBhIGxpbmUpIHRoZSBtYXRjaGluZyBjbG9zZQorICAgICAqIGJyYWNlIHNob3VsZCBiZSBsb2NhdGVkCisgICAgICovCisgICAgaW50IGluZF9jbG9zZV9leHRyYSA9IDA7CisKKyAgICAvKgorICAgICAqIHNwYWNlcyBmcm9tIHRoZSBlZGdlIG9mIHRoZSBsaW5lIGFuIG9wZW4gYnJhY2Ugc2l0dGluZyBpbiB0aGUgbGVmdG1vc3QKKyAgICAgKiBjb2x1bW4gaXMgaW1hZ2luZWQgdG8gYmUKKyAgICAgKi8KKyAgICBpbnQgaW5kX29wZW5fbGVmdF9pbWFnID0gMDsKKworICAgIC8qCisgICAgICogc3BhY2VzIGZyb20gdGhlIHN3aXRjaCgpIGluZGVudCBhICJjYXNlIHh4IiBsYWJlbCBzaG91bGQgYmUgbG9jYXRlZAorICAgICAqLworICAgIGludCBpbmRfY2FzZSA9IGN1cmJ1Zi0+Yl9wX3N3OworCisgICAgLyoKKyAgICAgKiBzcGFjZXMgZnJvbSB0aGUgImNhc2UgeHg6IiBjb2RlIGFmdGVyIGEgc3dpdGNoKCkgc2hvdWxkIGJlIGxvY2F0ZWQKKyAgICAgKi8KKyAgICBpbnQgaW5kX2Nhc2VfY29kZSA9IGN1cmJ1Zi0+Yl9wX3N3OworCisgICAgLyoKKyAgICAgKiBsaW5ldXAgYnJlYWsgYXQgZW5kIG9mIGNhc2UgaW4gc3dpdGNoKCkgd2l0aCBjYXNlIGxhYmVsCisgICAgICovCisgICAgaW50IGluZF9jYXNlX2JyZWFrID0gMDsKKworICAgIC8qCisgICAgICogc3BhY2VzIGZyb20gdGhlIGNsYXNzIGRlY2xhcmF0aW9uIGluZGVudCBhIHNjb3BlIGRlY2xhcmF0aW9uIGxhYmVsCisgICAgICogc2hvdWxkIGJlIGxvY2F0ZWQKKyAgICAgKi8KKyAgICBpbnQgaW5kX3Njb3BlZGVjbCA9IGN1cmJ1Zi0+Yl9wX3N3OworCisgICAgLyoKKyAgICAgKiBzcGFjZXMgZnJvbSB0aGUgc2NvcGUgZGVjbGFyYXRpb24gbGFiZWwgY29kZSBzaG91bGQgYmUgbG9jYXRlZAorICAgICAqLworICAgIGludCBpbmRfc2NvcGVkZWNsX2NvZGUgPSBjdXJidWYtPmJfcF9zdzsKKworICAgIC8qCisgICAgICogYW1vdW50IEsmUi1zdHlsZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBpbmRlbnRlZAorICAgICAqLworICAgIGludCBpbmRfcGFyYW0gPSBjdXJidWYtPmJfcF9zdzsKKworICAgIC8qCisgICAgICogYW1vdW50IGEgZnVuY3Rpb24gdHlwZSBzcGVjIHNob3VsZCBiZSBpbmRlbnRlZAorICAgICAqLworICAgIGludCBpbmRfZnVuY190eXBlID0gY3VyYnVmLT5iX3Bfc3c7CisKKyAgICAvKgorICAgICAqIGFtb3VudCBhIGNwcCBiYXNlIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uCisgICAgICogc2hvdWxkIGJlIGluZGVudGVkCisgICAgICovCisgICAgaW50IGluZF9jcHBfYmFzZWNsYXNzID0gY3VyYnVmLT5iX3Bfc3c7CisKKyAgICAvKgorICAgICAqIGFkZGl0aW9uYWwgc3BhY2VzIGJleW9uZCB0aGUgcHJldmFpbGluZyBpbmRlbnQgYSBjb250aW51YXRpb24gbGluZQorICAgICAqIHNob3VsZCBiZSBsb2NhdGVkCisgICAgICovCisgICAgaW50IGluZF9jb250aW51YXRpb24gPSBjdXJidWYtPmJfcF9zdzsKKworICAgIC8qCisgICAgICogc3BhY2VzIGZyb20gdGhlIGluZGVudCBvZiB0aGUgbGluZSB3aXRoIGFuIHVuY2xvc2VkIHBhcmVudGhlc2VzCisgICAgICovCisgICAgaW50IGluZF91bmNsb3NlZCA9IGN1cmJ1Zi0+Yl9wX3N3ICogMjsKKworICAgIC8qCisgICAgICogc3BhY2VzIGZyb20gdGhlIGluZGVudCBvZiB0aGUgbGluZSB3aXRoIGFuIHVuY2xvc2VkIHBhcmVudGhlc2VzLCB3aGljaAorICAgICAqIGl0c2VsZiBpcyBhbHNvIHVuY2xvc2VkCisgICAgICovCisgICAgaW50IGluZF91bmNsb3NlZDIgPSBjdXJidWYtPmJfcF9zdzsKKworICAgIC8qCisgICAgICogc3VwcHJlc3MgaWdub3Jpbmcgc3BhY2VzIGZyb20gdGhlIGluZGVudCBvZiBhIGxpbmUgc3RhcnRpbmcgd2l0aCBhbgorICAgICAqIHVuY2xvc2VkIHBhcmVudGhlc2VzLgorICAgICAqLworICAgIGludCBpbmRfdW5jbG9zZWRfbm9pZ25vcmUgPSAwOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgb3BlbmluZyBwYXJlbiBpcyB0aGUgbGFzdCBub253aGl0ZSBjaGFyYWN0ZXIgb24gdGhlIGxpbmUsIGFuZAorICAgICAqIGluZF91bmNsb3NlZF93cmFwcGVkIGlzIG5vbnplcm8sIHVzZSB0aGlzIGluZGVudCByZWxhdGl2ZSB0byB0aGUgb3V0ZXIKKyAgICAgKiBjb250ZXh0IChmb3IgdmVyeSBsb25nIGxpbmVzKS4KKyAgICAgKi8KKyAgICBpbnQgaW5kX3VuY2xvc2VkX3dyYXBwZWQgPSAwOworCisgICAgLyoKKyAgICAgKiBzdXBwcmVzcyBpZ25vcmluZyB3aGl0ZSBzcGFjZSB3aGVuIGxpbmluZyB1cCB3aXRoIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgKiBhbiB1bmNsb3NlZCBwYXJlbnRoZXNlcy4KKyAgICAgKi8KKyAgICBpbnQgaW5kX3VuY2xvc2VkX3doaXRlb2sgPSAwOworCisgICAgLyoKKyAgICAgKiBpbmRlbnQgYSBjbG9zaW5nIHBhcmVudGhlc2VzIHVuZGVyIHRoZSBsaW5lIHN0YXJ0IG9mIHRoZSBtYXRjaGluZworICAgICAqIG9wZW5pbmcgcGFyZW50aGVzZXMuCisgICAgICovCisgICAgaW50IGluZF9tYXRjaGluZ19wYXJlbiA9IDA7CisKKyAgICAvKgorICAgICAqIEV4dHJhIGluZGVudCBmb3IgY29tbWVudHMuCisgICAgICovCisgICAgaW50IGluZF9jb21tZW50ID0gMDsKKworICAgIC8qCisgICAgICogc3BhY2VzIGZyb20gdGhlIGNvbW1lbnQgb3BlbmVyIHdoZW4gdGhlcmUgaXMgbm90aGluZyBhZnRlciBpdC4KKyAgICAgKi8KKyAgICBpbnQgaW5kX2luX2NvbW1lbnQgPSAzOworCisgICAgLyoKKyAgICAgKiBib29sZWFuOiBpZiBub24temVybywgdXNlIGluZF9pbl9jb21tZW50IGV2ZW4gaWYgdGhlcmUgaXMgc29tZXRoaW5nCisgICAgICogYWZ0ZXIgdGhlIGNvbW1lbnQgb3BlbmVyLgorICAgICAqLworICAgIGludCBpbmRfaW5fY29tbWVudDIgPSAwOworCisgICAgLyoKKyAgICAgKiBtYXggbGluZXMgdG8gc2VhcmNoIGZvciBhbiBvcGVuIHBhcmVuCisgICAgICovCisgICAgaW50IGluZF9tYXhwYXJlbiA9IDIwOworCisgICAgLyoKKyAgICAgKiBtYXggbGluZXMgdG8gc2VhcmNoIGZvciBhbiBvcGVuIGNvbW1lbnQKKyAgICAgKi8KKyAgICBpbnQgaW5kX21heGNvbW1lbnQgPSA3MDsKKworICAgIC8qCisgICAgICogaGFuZGxlIGJyYWNlcyBmb3IgamF2YSBjb2RlCisgICAgICovCisgICAgaW50CWluZF9qYXZhID0gMDsKKworICAgIC8qCisgICAgICogaGFuZGxlIGJsb2NrZWQgY2FzZXMgY29ycmVjdGx5CisgICAgICovCisgICAgaW50IGluZF9rZWVwX2Nhc2VfbGFiZWwgPSAwOworCisgICAgcG9zX1QJY3VyX2N1cnBvczsKKyAgICBpbnQJCWFtb3VudDsKKyAgICBpbnQJCXNjb3BlX2Ftb3VudDsKKyAgICBpbnQJCWN1cl9hbW91bnQ7CisgICAgY29sbnJfVAljb2w7CisgICAgY2hhcl91CSp0aGVsaW5lOworICAgIGNoYXJfdQkqbGluZWNvcHk7CisgICAgcG9zX1QJKnRyeXBvczsKKyAgICBwb3NfVAkqdHJ5cG9zQnJhY2UgPSBOVUxMOworICAgIHBvc19UCW91cl9wYXJlbl9wb3M7CisgICAgY2hhcl91CSpzdGFydDsKKyAgICBpbnQJCXN0YXJ0X2JyYWNlOworI2RlZmluZSBCUkFDRV9JTl9DT0wwCQkxCSAgICAvKiAneycgaXMgaW4gY29tdW1uIDAgKi8KKyNkZWZpbmUgQlJBQ0VfQVRfU1RBUlQJCTIJICAgIC8qICd7JyBpcyBhdCBzdGFydCBvZiBsaW5lICovCisjZGVmaW5lIEJSQUNFX0FUX0VORAkJMwkgICAgLyogJ3snIGlzIGF0IGVuZCBvZiBsaW5lICovCisgICAgbGluZW5yX1QJb3Vyc2NvcGU7CisgICAgY2hhcl91CSpsOworICAgIGNoYXJfdQkqbG9vazsKKyAgICBjaGFyX3UJdGVybWluYXRlZDsKKyAgICBpbnQJCWxvb2tmb3I7CisjZGVmaW5lIExPT0tGT1JfSU5JVElBTAkJMAorI2RlZmluZSBMT09LRk9SX0lGCQkxCisjZGVmaW5lIExPT0tGT1JfRE8JCTIKKyNkZWZpbmUgTE9PS0ZPUl9DQVNFCQkzCisjZGVmaW5lIExPT0tGT1JfQU5ZCQk0CisjZGVmaW5lIExPT0tGT1JfVEVSTQkJNQorI2RlZmluZSBMT09LRk9SX1VOVEVSTQkJNgorI2RlZmluZSBMT09LRk9SX1NDT1BFREVDTAk3CisjZGVmaW5lIExPT0tGT1JfTk9CUkVBSwkJOAorI2RlZmluZSBMT09LRk9SX0NQUF9CQVNFQ0xBU1MJOQorI2RlZmluZSBMT09LRk9SX0VOVU1fT1JfSU5JVAkxMAorCisgICAgaW50CQl3aGlsZWxldmVsOworICAgIGxpbmVucl9UCWxudW07CisgICAgY2hhcl91CSpvcHRpb25zOworICAgIGludAkJZnJhY3Rpb24gPSAwOwkgICAgLyogaW5pdCBmb3IgR0NDICovCisgICAgaW50CQlkaXZpZGVyOworICAgIGludAkJbjsKKyAgICBpbnQJCWlzY2FzZTsKKyAgICBpbnQJCWxvb2tmb3JfYnJlYWs7CisgICAgaW50CQljb250X2Ftb3VudCA9IDA7ICAgIC8qIGFtb3VudCBmb3IgY29udGludWF0aW9uIGxpbmUgKi8KKworICAgIGZvciAob3B0aW9ucyA9IGN1cmJ1Zi0+Yl9wX2Npbm87ICpvcHRpb25zOyApCisgICAgeworCWwgPSBvcHRpb25zKys7CisJaWYgKCpvcHRpb25zID09ICctJykKKwkgICAgKytvcHRpb25zOworCW4gPSBnZXRkaWdpdHMoJm9wdGlvbnMpOworCWRpdmlkZXIgPSAwOworCWlmICgqb3B0aW9ucyA9PSAnLicpCSAgICAvKiAiLjVzIiBtZWFucyBhIGZyYWN0aW9uICovCisJeworCSAgICBmcmFjdGlvbiA9IGF0b2woKGNoYXIgKikrK29wdGlvbnMpOworCSAgICB3aGlsZSAoVklNX0lTRElHSVQoKm9wdGlvbnMpKQorCSAgICB7CisJCSsrb3B0aW9uczsKKwkJaWYgKGRpdmlkZXIpCisJCSAgICBkaXZpZGVyICo9IDEwOworCQllbHNlCisJCSAgICBkaXZpZGVyID0gMTA7CisJICAgIH0KKwl9CisJaWYgKCpvcHRpb25zID09ICdzJykJICAgIC8qICIycyIgbWVhbnMgdHdvIHRpbWVzICdzaGlmdHdpZHRoJyAqLworCXsKKwkgICAgaWYgKG4gPT0gMCAmJiBmcmFjdGlvbiA9PSAwKQorCQluID0gY3VyYnVmLT5iX3Bfc3c7CS8qIGp1c3QgInMiIGlzIG9uZSAnc2hpZnR3aWR0aCcgKi8KKwkgICAgZWxzZQorCSAgICB7CisJCW4gKj0gY3VyYnVmLT5iX3Bfc3c7CisJCWlmIChkaXZpZGVyKQorCQkgICAgbiArPSAoY3VyYnVmLT5iX3Bfc3cgKiBmcmFjdGlvbiArIGRpdmlkZXIgLyAyKSAvIGRpdmlkZXI7CisJICAgIH0KKwkgICAgKytvcHRpb25zOworCX0KKwlpZiAobFsxXSA9PSAnLScpCisJICAgIG4gPSAtbjsKKwkvKiBXaGVuIGFkZGluZyBhbiBlbnRyeSBoZXJlLCBhbHNvIHVwZGF0ZSB0aGUgZGVmYXVsdCAnY2lub3B0aW9ucycgaW4KKwkgKiBjaGFuZ2UudHh0LCBhbmQgYWRkIGV4cGxhbmF0aW9uIGZvciBpdCEgKi8KKwlzd2l0Y2ggKCpsKQorCXsKKwkgICAgY2FzZSAnPic6IGluZF9sZXZlbCA9IG47IGJyZWFrOworCSAgICBjYXNlICdlJzogaW5kX29wZW5faW1hZyA9IG47IGJyZWFrOworCSAgICBjYXNlICduJzogaW5kX25vX2JyYWNlID0gbjsgYnJlYWs7CisJICAgIGNhc2UgJ2YnOiBpbmRfZmlyc3Rfb3BlbiA9IG47IGJyZWFrOworCSAgICBjYXNlICd7JzogaW5kX29wZW5fZXh0cmEgPSBuOyBicmVhazsKKwkgICAgY2FzZSAnfSc6IGluZF9jbG9zZV9leHRyYSA9IG47IGJyZWFrOworCSAgICBjYXNlICdeJzogaW5kX29wZW5fbGVmdF9pbWFnID0gbjsgYnJlYWs7CisJICAgIGNhc2UgJzonOiBpbmRfY2FzZSA9IG47IGJyZWFrOworCSAgICBjYXNlICc9JzogaW5kX2Nhc2VfY29kZSA9IG47IGJyZWFrOworCSAgICBjYXNlICdiJzogaW5kX2Nhc2VfYnJlYWsgPSBuOyBicmVhazsKKwkgICAgY2FzZSAncCc6IGluZF9wYXJhbSA9IG47IGJyZWFrOworCSAgICBjYXNlICd0JzogaW5kX2Z1bmNfdHlwZSA9IG47IGJyZWFrOworCSAgICBjYXNlICcvJzogaW5kX2NvbW1lbnQgPSBuOyBicmVhazsKKwkgICAgY2FzZSAnYyc6IGluZF9pbl9jb21tZW50ID0gbjsgYnJlYWs7CisJICAgIGNhc2UgJ0MnOiBpbmRfaW5fY29tbWVudDIgPSBuOyBicmVhazsKKwkgICAgY2FzZSAnaSc6IGluZF9jcHBfYmFzZWNsYXNzID0gbjsgYnJlYWs7CisJICAgIGNhc2UgJysnOiBpbmRfY29udGludWF0aW9uID0gbjsgYnJlYWs7CisJICAgIGNhc2UgJygnOiBpbmRfdW5jbG9zZWQgPSBuOyBicmVhazsKKwkgICAgY2FzZSAndSc6IGluZF91bmNsb3NlZDIgPSBuOyBicmVhazsKKwkgICAgY2FzZSAnVSc6IGluZF91bmNsb3NlZF9ub2lnbm9yZSA9IG47IGJyZWFrOworCSAgICBjYXNlICdXJzogaW5kX3VuY2xvc2VkX3dyYXBwZWQgPSBuOyBicmVhazsKKwkgICAgY2FzZSAndyc6IGluZF91bmNsb3NlZF93aGl0ZW9rID0gbjsgYnJlYWs7CisJICAgIGNhc2UgJ20nOiBpbmRfbWF0Y2hpbmdfcGFyZW4gPSBuOyBicmVhazsKKwkgICAgY2FzZSAnKSc6IGluZF9tYXhwYXJlbiA9IG47IGJyZWFrOworCSAgICBjYXNlICcqJzogaW5kX21heGNvbW1lbnQgPSBuOyBicmVhazsKKwkgICAgY2FzZSAnZyc6IGluZF9zY29wZWRlY2wgPSBuOyBicmVhazsKKwkgICAgY2FzZSAnaCc6IGluZF9zY29wZWRlY2xfY29kZSA9IG47IGJyZWFrOworCSAgICBjYXNlICdqJzogaW5kX2phdmEgPSBuOyBicmVhazsKKwkgICAgY2FzZSAnbCc6IGluZF9rZWVwX2Nhc2VfbGFiZWwgPSBuOyBicmVhazsKKwl9CisgICAgfQorCisgICAgLyogcmVtZW1iZXIgd2hlcmUgdGhlIGN1cnNvciB3YXMgd2hlbiB3ZSBzdGFydGVkICovCisgICAgY3VyX2N1cnBvcyA9IGN1cndpbi0+d19jdXJzb3I7CisKKyAgICAvKiBHZXQgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBsaW5lLgorICAgICAqIFRoaXMgaXMgcmVxdWlyZWQsIGJlY2F1c2Ugb25seSB0aGUgbW9zdCByZWNlbnQgbGluZSBvYnRhaW5lZCB3aXRoCisgICAgICogbWxfZ2V0IGlzIHZhbGlkISAqLworICAgIGxpbmVjb3B5ID0gdmltX3N0cnNhdmUobWxfZ2V0KGN1cl9jdXJwb3MubG51bSkpOworICAgIGlmIChsaW5lY29weSA9PSBOVUxMKQorCXJldHVybiAwOworCisgICAgLyoKKyAgICAgKiBJbiBpbnNlcnQgbW9kZSBhbmQgdGhlIGN1cnNvciBpcyBvbiBhICcpJyB0cnVuY2F0ZSB0aGUgbGluZSBhdCB0aGUKKyAgICAgKiBjdXJzb3IgcG9zaXRpb24uICBXZSBkb24ndCB3YW50IHRvIGxpbmUgdXAgd2l0aCB0aGUgbWF0Y2hpbmcgJygnIHdoZW4KKyAgICAgKiBpbnNlcnRpbmcgbmV3IHN0dWZmLgorICAgICAqIEZvciB1bmtub3duIHJlYXNvbnMgdGhlIGN1cnNvciBtaWdodCBiZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUsIHRodXMKKyAgICAgKiBjaGVjayBmb3IgdGhhdC4KKyAgICAgKi8KKyAgICBpZiAoKFN0YXRlICYgSU5TRVJUKQorCSAgICAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbCA8IFNUUkxFTihsaW5lY29weSkKKwkgICAgJiYgbGluZWNvcHlbY3Vyd2luLT53X2N1cnNvci5jb2xdID09ICcpJykKKwlsaW5lY29weVtjdXJ3aW4tPndfY3Vyc29yLmNvbF0gPSBOVUw7CisKKyAgICB0aGVsaW5lID0gc2tpcHdoaXRlKGxpbmVjb3B5KTsKKworICAgIC8qIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgKi8KKworICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKworICAgIC8qCisgICAgICogI2RlZmluZXMgYW5kIHNvIG9uIGFsd2F5cyBnbyBhdCB0aGUgbGVmdCB3aGVuIGluY2x1ZGVkIGluICdjaW5rZXlzJy4KKyAgICAgKi8KKyAgICBpZiAoKnRoZWxpbmUgPT0gJyMnICYmICgqbGluZWNvcHkgPT0gJyMnIHx8IGluX2NpbmtleXMoJyMnLCAnICcsIFRSVUUpKSkKKyAgICB7CisJYW1vdW50ID0gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElzIGl0IGEgbm9uLWNhc2UgbGFiZWw/CVRoZW4gdGhhdCBnb2VzIGF0IHRoZSBsZWZ0IG1hcmdpbiB0b28uCisgICAgICovCisgICAgZWxzZSBpZiAoY2luX2lzbGFiZWwoaW5kX21heGNvbW1lbnQpKQkgICAgLyogWFhYICovCisgICAgeworCWFtb3VudCA9IDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB3ZSdyZSBpbnNpZGUgYSAiLy8iIGNvbW1lbnQgYW5kIHRoZXJlIGlzIGEgIi8vIiBjb21tZW50IGluIGEKKyAgICAgKiBwcmV2aW91cyBsaW5lLCBsaW5ldXAgd2l0aCB0aGF0IG9uZS4KKyAgICAgKi8KKyAgICBlbHNlIGlmIChjaW5faXNsaW5lY29tbWVudCh0aGVsaW5lKQorCSAgICAmJiAodHJ5cG9zID0gZmluZF9saW5lX2NvbW1lbnQoKSkgIT0gTlVMTCkgLyogWFhYICovCisgICAgeworCS8qIGZpbmQgaG93IGluZGVudGVkIHRoZSBsaW5lIGJlZ2lubmluZyB0aGUgY29tbWVudCBpcyAqLworCWdldHZjb2woY3Vyd2luLCB0cnlwb3MsICZjb2wsIE5VTEwsIE5VTEwpOworCWFtb3VudCA9IGNvbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHdlJ3JlIGluc2lkZSBhIGNvbW1lbnQgYW5kIG5vdCBsb29raW5nIGF0IHRoZSBzdGFydCBvZiB0aGUKKyAgICAgKiBjb21tZW50LCB0cnkgdXNpbmcgdGhlICdjb21tZW50cycgb3B0aW9uLgorICAgICAqLworICAgIGVsc2UgaWYgKCFjaW5faXNjb21tZW50KHRoZWxpbmUpCisJICAgICYmICh0cnlwb3MgPSBmaW5kX3N0YXJ0X2NvbW1lbnQoaW5kX21heGNvbW1lbnQpKSAhPSBOVUxMKSAvKiBYWFggKi8KKyAgICB7CisJaW50CWxlYWRfc3RhcnRfbGVuID0gMjsKKwlpbnQJbGVhZF9taWRkbGVfbGVuID0gMTsKKwljaGFyX3UJbGVhZF9zdGFydFtDT01fTUFYX0xFTl07CS8qIHN0YXJ0LWNvbW1lbnQgc3RyaW5nICovCisJY2hhcl91CWxlYWRfbWlkZGxlW0NPTV9NQVhfTEVOXTsJLyogbWlkZGxlLWNvbW1lbnQgc3RyaW5nICovCisJY2hhcl91CWxlYWRfZW5kW0NPTV9NQVhfTEVOXTsJCS8qIGVuZC1jb21tZW50IHN0cmluZyAqLworCWNoYXJfdQkqcDsKKwlpbnQJc3RhcnRfYWxpZ24gPSAwOworCWludAlzdGFydF9vZmYgPSAwOworCWludAlkb25lID0gRkFMU0U7CisKKwkvKiBmaW5kIGhvdyBpbmRlbnRlZCB0aGUgbGluZSBiZWdpbm5pbmcgdGhlIGNvbW1lbnQgaXMgKi8KKwlnZXR2Y29sKGN1cndpbiwgdHJ5cG9zLCAmY29sLCBOVUxMLCBOVUxMKTsKKwlhbW91bnQgPSBjb2w7CisKKwlwID0gY3VyYnVmLT5iX3BfY29tOworCXdoaWxlICgqcCAhPSBOVUwpCisJeworCSAgICBpbnQJYWxpZ24gPSAwOworCSAgICBpbnQJb2ZmID0gMDsKKwkgICAgaW50IHdoYXQgPSAwOworCisJICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gJzonKQorCSAgICB7CisJCWlmICgqcCA9PSBDT01fU1RBUlQgfHwgKnAgPT0gQ09NX0VORCB8fCAqcCA9PSBDT01fTUlERExFKQorCQkgICAgd2hhdCA9ICpwKys7CisJCWVsc2UgaWYgKCpwID09IENPTV9MRUZUIHx8ICpwID09IENPTV9SSUdIVCkKKwkJICAgIGFsaWduID0gKnArKzsKKwkJZWxzZSBpZiAoVklNX0lTRElHSVQoKnApIHx8ICpwID09ICctJykKKwkJICAgIG9mZiA9IGdldGRpZ2l0cygmcCk7CisJCWVsc2UKKwkJICAgICsrcDsKKwkgICAgfQorCisJICAgIGlmICgqcCA9PSAnOicpCisJCSsrcDsKKwkgICAgKHZvaWQpY29weV9vcHRpb25fcGFydCgmcCwgbGVhZF9lbmQsIENPTV9NQVhfTEVOLCAiLCIpOworCSAgICBpZiAod2hhdCA9PSBDT01fU1RBUlQpCisJICAgIHsKKwkJU1RSQ1BZKGxlYWRfc3RhcnQsIGxlYWRfZW5kKTsKKwkJbGVhZF9zdGFydF9sZW4gPSAoaW50KVNUUkxFTihsZWFkX3N0YXJ0KTsKKwkJc3RhcnRfb2ZmID0gb2ZmOworCQlzdGFydF9hbGlnbiA9IGFsaWduOworCSAgICB9CisJICAgIGVsc2UgaWYgKHdoYXQgPT0gQ09NX01JRERMRSkKKwkgICAgeworCQlTVFJDUFkobGVhZF9taWRkbGUsIGxlYWRfZW5kKTsKKwkJbGVhZF9taWRkbGVfbGVuID0gKGludClTVFJMRU4obGVhZF9taWRkbGUpOworCSAgICB9CisJICAgIGVsc2UgaWYgKHdoYXQgPT0gQ09NX0VORCkKKwkgICAgeworCQkvKiBJZiBvdXIgbGluZSBzdGFydHMgd2l0aCB0aGUgbWlkZGxlIGNvbW1lbnQgc3RyaW5nLCBsaW5lIGl0CisJCSAqIHVwIHdpdGggdGhlIGNvbW1lbnQgb3BlbmVyIHBlciB0aGUgJ2NvbW1lbnRzJyBvcHRpb24uICovCisJCWlmIChTVFJOQ01QKHRoZWxpbmUsIGxlYWRfbWlkZGxlLCBsZWFkX21pZGRsZV9sZW4pID09IDAKKwkJCSYmIFNUUk5DTVAodGhlbGluZSwgbGVhZF9lbmQsIFNUUkxFTihsZWFkX2VuZCkpICE9IDApCisJCXsKKwkJICAgIGRvbmUgPSBUUlVFOworCQkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA+IDEpCisJCSAgICB7CisJCQkvKiBJZiB0aGUgc3RhcnQgY29tbWVudCBzdHJpbmcgbWF0Y2hlcyBpbiB0aGUgcHJldmlvdXMKKwkJCSAqIGxpbmUsIHVzZSB0aGUgaW5kZW50IG9mIHRoYXQgbGluZSBwbHVzcyBvZmZzZXQuICBJZgorCQkJICogdGhlIG1pZGRsZSBjb21tZW50IHN0cmluZyBtYXRjaGVzIGluIHRoZSBwcmV2aW91cworCQkJICogbGluZSwgdXNlIHRoZSBpbmRlbnQgb2YgdGhhdCBsaW5lLiAgWFhYICovCisJCQlsb29rID0gc2tpcHdoaXRlKG1sX2dldChjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSAxKSk7CisJCQlpZiAoU1RSTkNNUChsb29rLCBsZWFkX3N0YXJ0LCBsZWFkX3N0YXJ0X2xlbikgPT0gMCkKKwkJCSAgICBhbW91bnQgPSBnZXRfaW5kZW50X2xudW0oY3Vyd2luLT53X2N1cnNvci5sbnVtIC0gMSk7CisJCQllbHNlIGlmIChTVFJOQ01QKGxvb2ssIGxlYWRfbWlkZGxlLAorCQkJCQkJCWxlYWRfbWlkZGxlX2xlbikgPT0gMCkKKwkJCXsKKwkJCSAgICBhbW91bnQgPSBnZXRfaW5kZW50X2xudW0oY3Vyd2luLT53X2N1cnNvci5sbnVtIC0gMSk7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQkvKiBJZiB0aGUgc3RhcnQgY29tbWVudCBzdHJpbmcgZG9lc24ndCBtYXRjaCB3aXRoIHRoZQorCQkJICogc3RhcnQgb2YgdGhlIGNvbW1lbnQsIHNraXAgdGhpcyBlbnRyeS4gWFhYICovCisJCQllbHNlIGlmIChTVFJOQ01QKG1sX2dldCh0cnlwb3MtPmxudW0pICsgdHJ5cG9zLT5jb2wsCisJCQkJCSAgICAgbGVhZF9zdGFydCwgbGVhZF9zdGFydF9sZW4pICE9IDApCisJCQkgICAgY29udGludWU7CisJCSAgICB9CisJCSAgICBpZiAoc3RhcnRfb2ZmICE9IDApCisJCQlhbW91bnQgKz0gc3RhcnRfb2ZmOworCQkgICAgZWxzZSBpZiAoc3RhcnRfYWxpZ24gPT0gQ09NX1JJR0hUKQorCQkJYW1vdW50ICs9IGxlYWRfc3RhcnRfbGVuIC0gbGVhZF9taWRkbGVfbGVuOworCQkgICAgYnJlYWs7CisJCX0KKworCQkvKiBJZiBvdXIgbGluZSBzdGFydHMgd2l0aCB0aGUgZW5kIGNvbW1lbnQgc3RyaW5nLCBsaW5lIGl0IHVwCisJCSAqIHdpdGggdGhlIG1pZGRsZSBjb21tZW50ICovCisJCWlmIChTVFJOQ01QKHRoZWxpbmUsIGxlYWRfbWlkZGxlLCBsZWFkX21pZGRsZV9sZW4pICE9IDAKKwkJCSYmIFNUUk5DTVAodGhlbGluZSwgbGVhZF9lbmQsIFNUUkxFTihsZWFkX2VuZCkpID09IDApCisJCXsKKwkJICAgIGFtb3VudCA9IGdldF9pbmRlbnRfbG51bShjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSAxKTsKKwkJCQkJCQkJICAgICAvKiBYWFggKi8KKwkJICAgIGlmIChvZmYgIT0gMCkKKwkJCWFtb3VudCArPSBvZmY7CisJCSAgICBlbHNlIGlmIChhbGlnbiA9PSBDT01fUklHSFQpCisJCQlhbW91bnQgKz0gbGVhZF9zdGFydF9sZW4gLSBsZWFkX21pZGRsZV9sZW47CisJCSAgICBkb25lID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisKKwkvKiBJZiBvdXIgbGluZSBzdGFydHMgd2l0aCBhbiBhc3RlcmlzaywgbGluZSB1cCB3aXRoIHRoZQorCSAqIGFzdGVyaXNrIGluIHRoZSBjb21tZW50IG9wZW5lcjsgb3RoZXJ3aXNlLCBsaW5lIHVwCisJICogd2l0aCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBjb21tZW50IHRleHQuCisJICovCisJaWYgKGRvbmUpCisJICAgIDsKKwllbHNlIGlmICh0aGVsaW5lWzBdID09ICcqJykKKwkgICAgYW1vdW50ICs9IDE7CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogSWYgd2UgYXJlIG1vcmUgdGhhbiBvbmUgbGluZSBhd2F5IGZyb20gdGhlIGNvbW1lbnQgb3BlbmVyLCB0YWtlCisJICAgICAqIHRoZSBpbmRlbnQgb2YgdGhlIHByZXZpb3VzIG5vbi1lbXB0eSBsaW5lLiAgSWYgJ2Npbm8nIGhhcyAiQ08iCisJICAgICAqIGFuZCB3ZSBhcmUganVzdCBiZWxvdyB0aGUgY29tbWVudCBvcGVuZXIgYW5kIHRoZXJlIGFyZSBhbnkKKwkgICAgICogd2hpdGUgY2hhcmFjdGVycyBhZnRlciBpdCBsaW5lIHVwIHdpdGggdGhlIHRleHQgYWZ0ZXIgaXQ7CisJICAgICAqIG90aGVyd2lzZSwgYWRkIHRoZSBhbW91bnQgc3BlY2lmaWVkIGJ5ICJjIiBpbiAnY2lubycKKwkgICAgICovCisJICAgIGFtb3VudCA9IC0xOworCSAgICBmb3IgKGxudW0gPSBjdXJfY3VycG9zLmxudW0gLSAxOyBsbnVtID4gdHJ5cG9zLT5sbnVtOyAtLWxudW0pCisJICAgIHsKKwkJaWYgKGxpbmV3aGl0ZShsbnVtKSkJCSAgICAvKiBza2lwIGJsYW5rIGxpbmVzICovCisJCSAgICBjb250aW51ZTsKKwkJYW1vdW50ID0gZ2V0X2luZGVudF9sbnVtKGxudW0pOwkgICAgLyogWFhYICovCisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChhbW91bnQgPT0gLTEpCQkJICAgIC8qIHVzZSB0aGUgY29tbWVudCBvcGVuZXIgKi8KKwkgICAgeworCQlpZiAoIWluZF9pbl9jb21tZW50MikKKwkJeworCQkgICAgc3RhcnQgPSBtbF9nZXQodHJ5cG9zLT5sbnVtKTsKKwkJICAgIGxvb2sgPSBzdGFydCArIHRyeXBvcy0+Y29sICsgMjsgLyogc2tpcCAvIGFuZCAqICovCisJCSAgICBpZiAoKmxvb2sgIT0gTlVMKQkJICAgIC8qIGlmIHNvbWV0aGluZyBhZnRlciBpdCAqLworCQkJdHJ5cG9zLT5jb2wgPSAoY29sbnJfVCkoc2tpcHdoaXRlKGxvb2spIC0gc3RhcnQpOworCQl9CisJCWdldHZjb2woY3Vyd2luLCB0cnlwb3MsICZjb2wsIE5VTEwsIE5VTEwpOworCQlhbW91bnQgPSBjb2w7CisJCWlmIChpbmRfaW5fY29tbWVudDIgfHwgKmxvb2sgPT0gTlVMKQorCQkgICAgYW1vdW50ICs9IGluZF9pbl9jb21tZW50OworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogQXJlIHdlIGluc2lkZSBwYXJlbnRoZXNlcyBvciBicmFjZXM/CisgICAgICovCQkJCQkJICAgIC8qIFhYWCAqLworICAgIGVsc2UgaWYgKCgodHJ5cG9zID0gZmluZF9tYXRjaF9wYXJlbihpbmRfbWF4cGFyZW4sIGluZF9tYXhjb21tZW50KSkgIT0gTlVMTAorCQkmJiBpbmRfamF2YSA9PSAwKQorCSAgICB8fCAodHJ5cG9zQnJhY2UgPSBmaW5kX3N0YXJ0X2JyYWNlKGluZF9tYXhjb21tZW50KSkgIT0gTlVMTAorCSAgICB8fCB0cnlwb3MgIT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAodHJ5cG9zICE9IE5VTEwgJiYgdHJ5cG9zQnJhY2UgIT0gTlVMTCkKKyAgICAgIHsKKwkgIC8qIEJvdGggYW4gdW5tYXRjaGVkICcoJyBhbmQgJ3snIGlzIGZvdW5kLiAgVXNlIHRoZSBvbmUgd2hpY2ggaXMKKwkgICAqIGNsb3NlciB0byB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24sIHNldCB0aGUgb3RoZXIgdG8gTlVMTC4gKi8KKwkgIGlmICh0cnlwb3MtPmxudW0gIT0gdHJ5cG9zQnJhY2UtPmxudW0KKwkJICA/IHRyeXBvcy0+bG51bSA8IHRyeXBvc0JyYWNlLT5sbnVtCisJCSAgOiB0cnlwb3MtPmNvbCA8IHRyeXBvc0JyYWNlLT5jb2wpCisJICAgICAgdHJ5cG9zID0gTlVMTDsKKwkgIGVsc2UKKwkgICAgICB0cnlwb3NCcmFjZSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIGlmICh0cnlwb3MgIT0gTlVMTCkKKyAgICAgIHsKKwkvKgorCSAqIElmIHRoZSBtYXRjaGluZyBwYXJlbiBpcyBtb3JlIHRoYW4gb25lIGxpbmUgYXdheSwgdXNlIHRoZSBpbmRlbnQgb2YKKwkgKiBhIHByZXZpb3VzIG5vbi1lbXB0eSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgc2FtZSBwYXJlbi4KKwkgKi8KKwlhbW91bnQgPSAtMTsKKwljdXJfYW1vdW50ID0gTUFYQ09MOworCW91cl9wYXJlbl9wb3MgPSAqdHJ5cG9zOworCWZvciAobG51bSA9IGN1cl9jdXJwb3MubG51bSAtIDE7IGxudW0gPiBvdXJfcGFyZW5fcG9zLmxudW07IC0tbG51bSkKKwl7CisJICAgIGwgPSBza2lwd2hpdGUobWxfZ2V0KGxudW0pKTsKKwkgICAgaWYgKGNpbl9ub2NvZGUobCkpCQkvKiBza2lwIGNvbW1lbnQgbGluZXMgKi8KKwkJY29udGludWU7CisJICAgIGlmIChjaW5faXNwcmVwcm9jX2NvbnQoJmwsICZsbnVtKSkJLyogaWdub3JlICNkZWZpbmVzLCAjaWYsIGV0Yy4gKi8KKwkJY29udGludWU7CisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisKKwkgICAgLyogU2tpcCBhIGNvbW1lbnQuIFhYWCAqLworCSAgICBpZiAoKHRyeXBvcyA9IGZpbmRfc3RhcnRfY29tbWVudChpbmRfbWF4Y29tbWVudCkpICE9IE5VTEwpCisJICAgIHsKKwkJbG51bSA9IHRyeXBvcy0+bG51bSArIDE7CisJCWNvbnRpbnVlOworCSAgICB9CisKKwkgICAgLyogWFhYICovCisJICAgIGlmICgodHJ5cG9zID0gZmluZF9tYXRjaF9wYXJlbigKKwkJCSAgICBjb3JyX2luZF9tYXhwYXJlbihpbmRfbWF4cGFyZW4sICZjdXJfY3VycG9zKSwKKwkJCQkJCSAgICAgIGluZF9tYXhjb21tZW50KSkgIT0gTlVMTAorCQkgICAgJiYgdHJ5cG9zLT5sbnVtID09IG91cl9wYXJlbl9wb3MubG51bQorCQkgICAgJiYgdHJ5cG9zLT5jb2wgPT0gb3VyX3BhcmVuX3Bvcy5jb2wpCisJICAgIHsKKwkJICAgIGFtb3VudCA9IGdldF9pbmRlbnRfbG51bShsbnVtKTsJLyogWFhYICovCisKKwkJICAgIGlmICh0aGVsaW5lWzBdID09ICcpJykKKwkJICAgIHsKKwkJCWlmIChvdXJfcGFyZW5fcG9zLmxudW0gIT0gbG51bSAmJiBjdXJfYW1vdW50ID4gYW1vdW50KQorCQkJICAgIGN1cl9hbW91bnQgPSBhbW91bnQ7CisJCQlhbW91bnQgPSAtMTsKKwkJICAgIH0KKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKwkvKgorCSAqIExpbmUgdXAgd2l0aCBsaW5lIHdoZXJlIHRoZSBtYXRjaGluZyBwYXJlbiBpcy4gWFhYCisJICogSWYgdGhlIGxpbmUgc3RhcnRzIHdpdGggYSAnKCcgb3IgdGhlIGluZGVudCBmb3IgdW5jbG9zZWQKKwkgKiBwYXJlbnRoZXNlcyBpcyB6ZXJvLCBsaW5lIHVwIHdpdGggdGhlIHVuY2xvc2VkIHBhcmVudGhlc2VzLgorCSAqLworCWlmIChhbW91bnQgPT0gLTEpCisJeworCSAgICBhbW91bnQgPSBza2lwX2xhYmVsKG91cl9wYXJlbl9wb3MubG51bSwgJmxvb2ssIGluZF9tYXhjb21tZW50KTsKKwkgICAgaWYgKHRoZWxpbmVbMF0gPT0gJyknIHx8IGluZF91bmNsb3NlZCA9PSAwCisJCSAgICAgICB8fCAoIWluZF91bmNsb3NlZF9ub2lnbm9yZSAmJiAqc2tpcHdoaXRlKGxvb2spID09ICcoJykpCisJICAgIHsKKwkJLyoKKwkJICogSWYgd2UncmUgbG9va2luZyBhdCBhIGNsb3NlIHBhcmVuLCBsaW5lIHVwIHJpZ2h0IHRoZXJlOworCQkgKiBvdGhlcndpc2UsIGxpbmUgdXAgd2l0aCB0aGUgbmV4dCAobm9uLXdoaXRlKSBjaGFyYWN0ZXIuCisJCSAqIFdoZW4gaW5kX3VuY2xvc2VkX3dyYXBwZWQgaXMgc2V0IGFuZCB0aGUgbWF0Y2hpbmcgcGFyZW4gaXMKKwkJICogdGhlIGxhc3Qgbm9ud2hpdGUgY2hhcmFjdGVyIG9mIHRoZSBsaW5lLCB1c2UgZWl0aGVyIHRoZQorCQkgKiBpbmRlbnQgb2YgdGhlIGN1cnJlbnQgbGluZSBvciB0aGUgaW5kZW50YXRpb24gb2YgdGhlIG5leHQKKwkJICogb3V0ZXIgcGFyZW4gYW5kIGFkZCBpbmRfdW5jbG9zZWRfd3JhcHBlZCAoZm9yIHZlcnkgbG9uZworCQkgKiBsaW5lcykuCisJCSAqLworCQlpZiAodGhlbGluZVswXSAhPSAnKScpCisJCXsKKwkJICAgIGN1cl9hbW91bnQgPSBNQVhDT0w7CisJCSAgICBsID0gbWxfZ2V0KG91cl9wYXJlbl9wb3MubG51bSk7CisJCSAgICBpZiAoaW5kX3VuY2xvc2VkX3dyYXBwZWQKKwkJCQkgICAgICAgJiYgY2luX2VuZHNfaW4obCwgKGNoYXJfdSAqKSIoIiwgTlVMTCkpCisJCSAgICB7CisJCQkvKiBsb29rIGZvciBvcGVuaW5nIHVubWF0Y2hlZCBwYXJlbiwgaW5kZW50IG9uZSBsZXZlbAorCQkJICogZm9yIGVhY2ggYWRkaXRpb25hbCBsZXZlbCAqLworCQkJbiA9IDE7CisJCQlmb3IgKGNvbCA9IDA7IGNvbCA8IG91cl9wYXJlbl9wb3MuY29sOyArK2NvbCkKKwkJCXsKKwkJCSAgICBzd2l0Y2ggKGxbY29sXSkKKwkJCSAgICB7CisJCQkJY2FzZSAnKCc6CisJCQkJY2FzZSAneyc6ICsrbjsKKwkJCQkJICBicmVhazsKKworCQkJCWNhc2UgJyknOgorCQkJCWNhc2UgJ30nOiBpZiAobiA+IDEpCisJCQkJCSAgICAgIC0tbjsKKwkJCQkJICBicmVhazsKKwkJCSAgICB9CisJCQl9CisKKwkJCW91cl9wYXJlbl9wb3MuY29sID0gMDsKKwkJCWFtb3VudCArPSBuICogaW5kX3VuY2xvc2VkX3dyYXBwZWQ7CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChpbmRfdW5jbG9zZWRfd2hpdGVvaykKKwkJCW91cl9wYXJlbl9wb3MuY29sKys7CisJCSAgICBlbHNlCisJCSAgICB7CisJCQljb2wgPSBvdXJfcGFyZW5fcG9zLmNvbCArIDE7CisJCQl3aGlsZSAodmltX2lzd2hpdGUobFtjb2xdKSkKKwkJCSAgICBjb2wrKzsKKwkJCWlmIChsW2NvbF0gIT0gTlVMKQkvKiBJbiBjYXNlIG9mIHRyYWlsaW5nIHNwYWNlICovCisJCQkgICAgb3VyX3BhcmVuX3Bvcy5jb2wgPSBjb2w7CisJCQllbHNlCisJCQkgICAgb3VyX3BhcmVuX3Bvcy5jb2wrKzsKKwkJICAgIH0KKwkJfQorCisJCS8qCisJCSAqIEZpbmQgaG93IGluZGVudGVkIHRoZSBwYXJlbiBpcywgb3IgdGhlIGNoYXJhY3RlciBhZnRlciBpdAorCQkgKiBpZiB3ZSBkaWQgdGhlIGFib3ZlICJpZiIuCisJCSAqLworCQlpZiAob3VyX3BhcmVuX3Bvcy5jb2wgPiAwKQorCQl7CisJCSAgICBnZXR2Y29sKGN1cndpbiwgJm91cl9wYXJlbl9wb3MsICZjb2wsIE5VTEwsIE5VTEwpOworCQkgICAgaWYgKGN1cl9hbW91bnQgPiAoaW50KWNvbCkKKwkJCWN1cl9hbW91bnQgPSBjb2w7CisJCX0KKwkgICAgfQorCisJICAgIGlmICh0aGVsaW5lWzBdID09ICcpJyAmJiBpbmRfbWF0Y2hpbmdfcGFyZW4pCisJICAgIHsKKwkJLyogTGluZSB1cCB3aXRoIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2hpbmcgcGFyZW4gbGluZS4gKi8KKwkgICAgfQorCSAgICBlbHNlIGlmIChpbmRfdW5jbG9zZWQgPT0gMCB8fCAoIWluZF91bmNsb3NlZF9ub2lnbm9yZQorCQkJCQkJICAmJiAqc2tpcHdoaXRlKGxvb2spID09ICcoJykpCisJICAgIHsKKwkJaWYgKGN1cl9hbW91bnQgIT0gTUFYQ09MKQorCQkgICAgYW1vdW50ID0gY3VyX2Ftb3VudDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogYWRkIGluZF91bmNsb3NlZDIgZm9yIGVhY2ggJygnIGJlZm9yZSBvdXIgbWF0Y2hpbmcgb25lICovCisJCWNvbCA9IG91cl9wYXJlbl9wb3MuY29sOworCQl3aGlsZSAob3VyX3BhcmVuX3Bvcy5jb2wgPiAwKQorCQl7CisJCSAgICAtLW91cl9wYXJlbl9wb3MuY29sOworCQkgICAgc3dpdGNoICgqbWxfZ2V0X3Bvcygmb3VyX3BhcmVuX3BvcykpCisJCSAgICB7CisJCQljYXNlICcoJzogYW1vdW50ICs9IGluZF91bmNsb3NlZDI7CisJCQkJICBjb2wgPSBvdXJfcGFyZW5fcG9zLmNvbDsKKwkJCQkgIGJyZWFrOworCQkJY2FzZSAnKSc6IGFtb3VudCAtPSBpbmRfdW5jbG9zZWQyOworCQkJCSAgY29sID0gTUFYQ09MOworCQkJCSAgYnJlYWs7CisJCSAgICB9CisJCX0KKworCQkvKiBVc2UgaW5kX3VuY2xvc2VkIG9uY2UsIHdoZW4gdGhlIGZpcnN0ICcoJyBpcyBub3QgaW5zaWRlCisJCSAqIGJyYWNlcyAqLworCQlpZiAoY29sID09IE1BWENPTCkKKwkJICAgIGFtb3VudCArPSBpbmRfdW5jbG9zZWQ7CisJCWVsc2UKKwkJeworCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gb3VyX3BhcmVuX3Bvcy5sbnVtOworCQkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSBjb2w7CisJCSAgICBpZiAoKHRyeXBvcyA9IGZpbmRfbWF0Y2hfcGFyZW4oaW5kX21heHBhcmVuLAorCQkJCQkJICAgICBpbmRfbWF4Y29tbWVudCkpICE9IE5VTEwpCisJCQlhbW91bnQgKz0gaW5kX3VuY2xvc2VkMjsKKwkJICAgIGVsc2UKKwkJCWFtb3VudCArPSBpbmRfdW5jbG9zZWQ7CisJCX0KKwkJLyoKKwkJICogRm9yIGEgbGluZSBzdGFydGluZyB3aXRoICcpJyB1c2UgdGhlIG1pbmltdW0gb2YgdGhlIHR3bworCQkgKiBwb3NpdGlvbnMsIHRvIGF2b2lkIGdpdmluZyBpdCBtb3JlIGluZGVudCB0aGFuIHRoZSBwcmV2aW91cworCQkgKiBsaW5lczoKKwkJICogIGZ1bmNfbG9uZ19uYW1lKAkJICAgIGlmICh4CisJCSAqCWFyZwkJCQkgICAgJiYgeXkKKwkJICoJKQkgIF4gbm90IGhlcmUJICAgICAgICkgICAgXiBub3QgaGVyZQorCQkgKi8KKwkJaWYgKGN1cl9hbW91bnQgPCBhbW91bnQpCisJCSAgICBhbW91bnQgPSBjdXJfYW1vdW50OworCSAgICB9CisJfQorCisJLyogYWRkIGV4dHJhIGluZGVudCBmb3IgYSBjb21tZW50ICovCisJaWYgKGNpbl9pc2NvbW1lbnQodGhlbGluZSkpCisJICAgIGFtb3VudCArPSBpbmRfY29tbWVudDsKKyAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIEFyZSB3ZSBhdCBsZWFzdCBpbnNpZGUgYnJhY2VzLCB0aGVuPworICAgICAgICovCisgICAgICBlbHNlCisgICAgICB7CisJdHJ5cG9zID0gdHJ5cG9zQnJhY2U7CisKKwlvdXJzY29wZSA9IHRyeXBvcy0+bG51bTsKKwlzdGFydCA9IG1sX2dldChvdXJzY29wZSk7CisKKwkvKgorCSAqIE5vdyBmaWd1cmUgb3V0IGhvdyBpbmRlbnRlZCB0aGUgbGluZSBpcyBpbiBnZW5lcmFsLgorCSAqIElmIHRoZSBicmFjZSB3YXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLCB3ZSB1c2UgdGhhdDsKKwkgKiBvdGhlcndpc2UsIGNoZWNrIG91dCB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGxpbmUgYXMKKwkgKiBhIHdob2xlIGFuZCB0aGVuIGFkZCB0aGUgImltYWdpbmFyeSBpbmRlbnQiIHRvIHRoYXQuCisJICovCisJbG9vayA9IHNraXB3aGl0ZShzdGFydCk7CisJaWYgKCpsb29rID09ICd7JykKKwl7CisJICAgIGdldHZjb2woY3Vyd2luLCB0cnlwb3MsICZjb2wsIE5VTEwsIE5VTEwpOworCSAgICBhbW91bnQgPSBjb2w7CisJICAgIGlmICgqc3RhcnQgPT0gJ3snKQorCQlzdGFydF9icmFjZSA9IEJSQUNFX0lOX0NPTDA7CisJICAgIGVsc2UKKwkJc3RhcnRfYnJhY2UgPSBCUkFDRV9BVF9TVEFSVDsKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogdGhhdCBvcGVuaW5nIGJyYWNlIG1pZ2h0IGhhdmUgYmVlbiBvbiBhIGNvbnRpbnVhdGlvbgorCSAgICAgKiBsaW5lLiAgaWYgc28sIGZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLgorCSAgICAgKi8KKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gb3Vyc2NvcGU7CisKKwkgICAgLyoKKwkgICAgICogcG9zaXRpb24gdGhlIGN1cnNvciBvdmVyIHRoZSByaWdodG1vc3QgcGFyZW4sIHNvIHRoYXQKKwkgICAgICogbWF0Y2hpbmcgaXQgd2lsbCB0YWtlIHVzIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLgorCSAgICAgKi8KKwkgICAgbG51bSA9IG91cnNjb3BlOworCSAgICBpZiAoZmluZF9sYXN0X3BhcmVuKHN0YXJ0LCAnKCcsICcpJykKKwkJICAgICYmICh0cnlwb3MgPSBmaW5kX21hdGNoX3BhcmVuKGluZF9tYXhwYXJlbiwKKwkJCQkJCSAgICAgaW5kX21heGNvbW1lbnQpKSAhPSBOVUxMKQorCQlsbnVtID0gdHJ5cG9zLT5sbnVtOworCisJICAgIC8qCisJICAgICAqIEl0IGNvdWxkIGhhdmUgYmVlbiBzb21ldGhpbmcgbGlrZQorCSAgICAgKgkgICBjYXNlIDE6IGlmIChhc2RmICYmCisJICAgICAqCQkJbGRmZCkgeworCSAgICAgKgkJICAgIH0KKwkgICAgICovCisJICAgIGlmIChpbmRfa2VlcF9jYXNlX2xhYmVsICYmIGNpbl9pc2Nhc2Uoc2tpcHdoaXRlKG1sX2dldF9jdXJsaW5lKCkpKSkKKwkJYW1vdW50ID0gZ2V0X2luZGVudCgpOworCSAgICBlbHNlCisJCWFtb3VudCA9IHNraXBfbGFiZWwobG51bSwgJmwsIGluZF9tYXhjb21tZW50KTsKKworCSAgICBzdGFydF9icmFjZSA9IEJSQUNFX0FUX0VORDsKKwl9CisKKwkvKgorCSAqIGlmIHdlJ3JlIGxvb2tpbmcgYXQgYSBjbG9zaW5nIGJyYWNlLCB0aGF0J3Mgd2hlcmUKKwkgKiB3ZSB3YW50IHRvIGJlLiAgb3RoZXJ3aXNlLCBhZGQgdGhlIGFtb3VudCBvZiByb29tCisJICogdGhhdCBhbiBpbmRlbnQgaXMgc3VwcG9zZWQgdG8gYmUuCisJICovCisJaWYgKHRoZWxpbmVbMF0gPT0gJ30nKQorCXsKKwkgICAgLyoKKwkgICAgICogdGhleSBtYXkgd2FudCBjbG9zaW5nIGJyYWNlcyB0byBsaW5lIHVwIHdpdGggc29tZXRoaW5nCisJICAgICAqIG90aGVyIHRoYW4gdGhlIG9wZW4gYnJhY2UuICBpbmR1bGdlIHRoZW0sIGlmIHNvLgorCSAgICAgKi8KKwkgICAgYW1vdW50ICs9IGluZF9jbG9zZV9leHRyYTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogSWYgd2UncmUgbG9va2luZyBhdCBhbiAiZWxzZSIsIHRyeSB0byBmaW5kIGFuICJpZiIKKwkgICAgICogdG8gbWF0Y2ggaXQgd2l0aC4KKwkgICAgICogSWYgd2UncmUgbG9va2luZyBhdCBhICJ3aGlsZSIsIHRyeSB0byBmaW5kIGEgImRvIgorCSAgICAgKiB0byBtYXRjaCBpdCB3aXRoLgorCSAgICAgKi8KKwkgICAgbG9va2ZvciA9IExPT0tGT1JfSU5JVElBTDsKKwkgICAgaWYgKGNpbl9pc2Vsc2UodGhlbGluZSkpCisJCWxvb2tmb3IgPSBMT09LRk9SX0lGOworCSAgICBlbHNlIGlmIChjaW5faXN3aGlsZW9mZG8odGhlbGluZSwgY3VyX2N1cnBvcy5sbnVtLCBpbmRfbWF4cGFyZW4pKQorCQkJCQkJCQkgICAgLyogWFhYICovCisJCWxvb2tmb3IgPSBMT09LRk9SX0RPOworCSAgICBpZiAobG9va2ZvciAhPSBMT09LRk9SX0lOSVRJQUwpCisJICAgIHsKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gY3VyX2N1cnBvcy5sbnVtOworCQlpZiAoZmluZF9tYXRjaChsb29rZm9yLCBvdXJzY29wZSwgaW5kX21heHBhcmVuLAorCQkJCQkJCWluZF9tYXhjb21tZW50KSA9PSBPSykKKwkJeworCQkgICAgYW1vdW50ID0gZ2V0X2luZGVudCgpOwkvKiBYWFggKi8KKwkJICAgIGdvdG8gdGhlZW5kOworCQl9CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBXZSBnZXQgaGVyZSBpZiB3ZSBhcmUgbm90IG9uIGFuICJ3aGlsZS1vZi1kbyIgb3IgImVsc2UiIChvcgorCSAgICAgKiBmYWlsZWQgdG8gZmluZCBhIG1hdGNoaW5nICJpZiIpLgorCSAgICAgKiBTZWFyY2ggYmFja3dhcmRzIGZvciBzb21ldGhpbmcgdG8gbGluZSB1cCB3aXRoLgorCSAgICAgKiBGaXJzdCBzZXQgYW1vdW50IGZvciB3aGVuIHdlIGRvbid0IGZpbmQgYW55dGhpbmcuCisJICAgICAqLworCisJICAgIC8qCisJICAgICAqIGlmIHRoZSAneycgaXMgIF9yZWFsbHlfIGF0IHRoZSBsZWZ0IG1hcmdpbiwgdXNlIHRoZSBpbWFnaW5hcnkKKwkgICAgICogbG9jYXRpb24gb2YgYSBsZWZ0LW1hcmdpbiBicmFjZS4gIE90aGVyd2lzZSwgY29ycmVjdCB0aGUKKwkgICAgICogbG9jYXRpb24gZm9yIGluZF9vcGVuX2V4dHJhLgorCSAgICAgKi8KKworCSAgICBpZiAoc3RhcnRfYnJhY2UgPT0gQlJBQ0VfSU5fQ09MMCkJICAgIC8qICd7JyBpcyBpbiBjb2x1bW4gMCAqLworCSAgICB7CisJCWFtb3VudCA9IGluZF9vcGVuX2xlZnRfaW1hZzsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKHN0YXJ0X2JyYWNlID09IEJSQUNFX0FUX0VORCkgICAgLyogJ3snIGlzIGF0IGVuZCBvZiBsaW5lICovCisJCSAgICBhbW91bnQgKz0gaW5kX29wZW5faW1hZzsKKwkJZWxzZQorCQl7CisJCSAgICAvKiBDb21wZW5zYXRlIGZvciBhZGRpbmcgaW5kX29wZW5fZXh0cmEgbGF0ZXIuICovCisJCSAgICBhbW91bnQgLT0gaW5kX29wZW5fZXh0cmE7CisJCSAgICBpZiAoYW1vdW50IDwgMCkKKwkJCWFtb3VudCA9IDA7CisJCX0KKwkgICAgfQorCisJICAgIGxvb2tmb3JfYnJlYWsgPSBGQUxTRTsKKworCSAgICBpZiAoY2luX2lzY2FzZSh0aGVsaW5lKSkJLyogaXQncyBhIHN3aXRjaCgpIGxhYmVsICovCisJICAgIHsKKwkJbG9va2ZvciA9IExPT0tGT1JfQ0FTRTsJLyogZmluZCBhIHByZXZpb3VzIHN3aXRjaCgpIGxhYmVsICovCisJCWFtb3VudCArPSBpbmRfY2FzZTsKKwkgICAgfQorCSAgICBlbHNlIGlmIChjaW5faXNzY29wZWRlY2wodGhlbGluZSkpCS8qIHByaXZhdGU6LCAuLi4gKi8KKwkgICAgeworCQlsb29rZm9yID0gTE9PS0ZPUl9TQ09QRURFQ0w7CS8qIGNsYXNzIGRlY2wgaXMgdGhpcyBibG9jayAqLworCQlhbW91bnQgKz0gaW5kX3Njb3BlZGVjbDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKGluZF9jYXNlX2JyZWFrICYmIGNpbl9pc2JyZWFrKHRoZWxpbmUpKQkvKiBicmVhazsgLi4uICovCisJCSAgICBsb29rZm9yX2JyZWFrID0gVFJVRTsKKworCQlsb29rZm9yID0gTE9PS0ZPUl9JTklUSUFMOworCQlhbW91bnQgKz0gaW5kX2xldmVsOwkvKiBpbmRfbGV2ZWwgZnJvbSBzdGFydCBvZiBibG9jayAqLworCSAgICB9CisJICAgIHNjb3BlX2Ftb3VudCA9IGFtb3VudDsKKwkgICAgd2hpbGVsZXZlbCA9IDA7CisKKwkgICAgLyoKKwkgICAgICogU2VhcmNoIGJhY2t3YXJkcy4gIElmIHdlIGZpbmQgc29tZXRoaW5nIHdlIHJlY29nbml6ZSwgbGluZSB1cAorCSAgICAgKiB3aXRoIHRoYXQuCisJICAgICAqCisJICAgICAqIGlmIHdlJ3JlIGxvb2tpbmcgYXQgYW4gb3BlbiBicmFjZSwgaW5kZW50CisJICAgICAqIHRoZSB1c3VhbCBhbW91bnQgcmVsYXRpdmUgdG8gdGhlIGNvbmRpdGlvbmFsCisJICAgICAqIHRoYXQgb3BlbnMgdGhlIGJsb2NrLgorCSAgICAgKi8KKwkgICAgY3Vyd2luLT53X2N1cnNvciA9IGN1cl9jdXJwb3M7CisJICAgIGZvciAoOzspCisJICAgIHsKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtLS07CisJCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKworCQkvKgorCQkgKiBJZiB3ZSB3ZW50IGFsbCB0aGUgd2F5IGJhY2sgdG8gdGhlIHN0YXJ0IG9mIG91ciBzY29wZSwgbGluZQorCQkgKiB1cCB3aXRoIGl0LgorCQkgKi8KKwkJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8PSBvdXJzY29wZSkKKwkJeworCQkgICAgLyogd2UgcmVhY2hlZCBlbmQgb2Ygc2NvcGU6CisJCSAgICAgKiBpZiBsb29raW5nIGZvciBhIGVudW0gb3Igc3RydWN0dXJlIGluaXRpYWxpemF0aW9uCisJCSAgICAgKiBnbyBmdXJ0aGVyIGJhY2s6CisJCSAgICAgKiBpZiBpdCBpcyBhbiBpbml0aWFsaXplciAoZW51bSB4eHggb3IgeHh4ID0pLCB0aGVuCisJCSAgICAgKiBkb24ndCBhZGQgaW5kX2NvbnRpbnVhdGlvbiwgb3RoZXJ3aXNlIGl0IGlzIGEgdmFyaWFibGUKKwkJICAgICAqIGRlY2xhcmF0aW9uOgorCQkgICAgICogaW50IHgsCisJCSAgICAgKiAgICAgaGVyZTsgPC0tIGFkZCBpbmRfY29udGludWF0aW9uCisJCSAgICAgKi8KKwkJICAgIGlmIChsb29rZm9yID09IExPT0tGT1JfRU5VTV9PUl9JTklUKQorCQkgICAgeworCQkJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA9PSAwCisJCQkJfHwgY3Vyd2luLT53X2N1cnNvci5sbnVtCisJCQkJCQkgICAgPCBvdXJzY29wZSAtIGluZF9tYXhwYXJlbikKKwkJCXsKKwkJCSAgICAvKiBub3RoaW5nIGZvdW5kIChhYnVzZSBpbmRfbWF4cGFyZW4gYXMgbGltaXQpCisJCQkgICAgICogYXNzdW1lIHRlcm1pbmF0ZWQgbGluZSAoaS5lLiBhIHZhcmlhYmxlCisJCQkgICAgICogaW5pdGlhbGl6YXRpb24pICovCisJCQkgICAgaWYgKGNvbnRfYW1vdW50ID4gMCkKKwkJCQlhbW91bnQgPSBjb250X2Ftb3VudDsKKwkJCSAgICBlbHNlCisJCQkJYW1vdW50ICs9IGluZF9jb250aW51YXRpb247CisJCQkgICAgYnJlYWs7CisJCQl9CisKKwkJCWwgPSBtbF9nZXRfY3VybGluZSgpOworCisJCQkvKgorCQkJICogSWYgd2UncmUgaW4gYSBjb21tZW50IG5vdywgc2tpcCB0byB0aGUgc3RhcnQgb2YgdGhlCisJCQkgKiBjb21tZW50LgorCQkJICovCisJCQl0cnlwb3MgPSBmaW5kX3N0YXJ0X2NvbW1lbnQoaW5kX21heGNvbW1lbnQpOworCQkJaWYgKHRyeXBvcyAhPSBOVUxMKQorCQkJeworCQkJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IHRyeXBvcy0+bG51bSArIDE7CisJCQkgICAgY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBTa2lwIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFuZCBibGFuayBsaW5lcy4KKwkJCSAqLworCQkJaWYgKGNpbl9pc3ByZXByb2NfY29udCgmbCwgJmN1cndpbi0+d19jdXJzb3IubG51bSkpCisJCQkgICAgY29udGludWU7CisKKwkJCWlmIChjaW5fbm9jb2RlKGwpKQorCQkJICAgIGNvbnRpbnVlOworCisJCQl0ZXJtaW5hdGVkID0gY2luX2lzdGVybWluYXRlZChsLCBGQUxTRSwgVFJVRSk7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgYXQgdG9wIGxldmVsIGFuZCB0aGUgbGluZSBsb29rcyBsaWtlIGEKKwkJCSAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCB3ZSBhcmUgZG9uZQorCQkJICogKGl0J3MgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbikuCisJCQkgKi8KKwkJCWlmIChzdGFydF9icmFjZSAhPSBCUkFDRV9JTl9DT0wwCisJCQkJfHwgIWNpbl9pc2Z1bmNkZWNsKCZsLCBjdXJ3aW4tPndfY3Vyc29yLmxudW0pKQorCQkJeworCQkJICAgIC8qIGlmIHRoZSBsaW5lIGlzIHRlcm1pbmF0ZWQgd2l0aCBhbm90aGVyICcsJworCQkJICAgICAqIGl0IGlzIGEgY29udGludWVkIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLgorCQkJICAgICAqIGRvbid0IGFkZCBleHRyYSBpbmRlbnQuCisJCQkgICAgICogVE9ETzogZG9lcyBub3Qgd29yaywgaWYgIGEgZnVuY3Rpb24KKwkJCSAgICAgKiBkZWNsYXJhdGlvbiBpcyBzcGxpdCBvdmVyIG11bHRpcGxlIGxpbmVzOgorCQkJICAgICAqIGNpbl9pc2Z1bmNkZWNsIHJldHVybnMgRkFMU0UgdGhlbi4KKwkJCSAgICAgKi8KKwkJCSAgICBpZiAodGVybWluYXRlZCA9PSAnLCcpCisJCQkJYnJlYWs7CisKKwkJCSAgICAvKiBpZiBpdCBlcyBhIGVudW0gZGVjbGFyYXRpb24gb3IgYW4gYXNzaWdubWVudCwKKwkJCSAgICAgKiB3ZSBhcmUgZG9uZS4KKwkJCSAgICAgKi8KKwkJCSAgICBpZiAodGVybWluYXRlZCAhPSAnOycgJiYgY2luX2lzaW5pdCgpKQorCQkJCWJyZWFrOworCisJCQkgICAgLyogbm90aGluZyB1c2VmdWwgZm91bmQgKi8KKwkJCSAgICBpZiAodGVybWluYXRlZCA9PSAwIHx8IHRlcm1pbmF0ZWQgPT0gJ3snKQorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAodGVybWluYXRlZCAhPSAnOycpCisJCQl7CisJCQkgICAgLyogU2tpcCBwYXJlbnMgYW5kIGJyYWNlcy4gUG9zaXRpb24gdGhlIGN1cnNvcgorCQkJICAgICAqIG92ZXIgdGhlIHJpZ2h0bW9zdCBwYXJlbiwgc28gdGhhdCBtYXRjaGluZyBpdAorCQkJICAgICAqIHdpbGwgdGFrZSB1cyBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgbGluZS4KKwkJCSAgICAgKi8JCQkJCS8qIFhYWCAqLworCQkJICAgIHRyeXBvcyA9IE5VTEw7CisJCQkgICAgaWYgKGZpbmRfbGFzdF9wYXJlbihsLCAnKCcsICcpJykpCisJCQkJdHJ5cG9zID0gZmluZF9tYXRjaF9wYXJlbihpbmRfbWF4cGFyZW4sCisJCQkJCWluZF9tYXhjb21tZW50KTsKKworCQkJICAgIGlmICh0cnlwb3MgPT0gTlVMTCAmJiBmaW5kX2xhc3RfcGFyZW4obCwgJ3snLCAnfScpKQorCQkJCXRyeXBvcyA9IGZpbmRfc3RhcnRfYnJhY2UoaW5kX21heGNvbW1lbnQpOworCisJCQkgICAgaWYgKHRyeXBvcyAhPSBOVUxMKQorCQkJICAgIHsKKwkJCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSB0cnlwb3MtPmxudW0gKyAxOworCQkJCWNvbnRpbnVlOworCQkJICAgIH0KKwkJCX0KKworCQkJLyogaXQncyBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uLCBhZGQgaW5kZW50YXRpb24KKwkJCSAqIGxpa2UgaW4KKwkJCSAqIGludCBhLAorCQkJICogICAgYjsKKwkJCSAqLworCQkJaWYgKGNvbnRfYW1vdW50ID4gMCkKKwkJCSAgICBhbW91bnQgPSBjb250X2Ftb3VudDsKKwkJCWVsc2UKKwkJCSAgICBhbW91bnQgKz0gaW5kX2NvbnRpbnVhdGlvbjsKKwkJICAgIH0KKwkJICAgIGVsc2UgaWYgKGxvb2tmb3IgPT0gTE9PS0ZPUl9VTlRFUk0pCisJCSAgICB7CisJCQlpZiAoY29udF9hbW91bnQgPiAwKQorCQkJICAgIGFtb3VudCA9IGNvbnRfYW1vdW50OworCQkJZWxzZQorCQkJICAgIGFtb3VudCArPSBpbmRfY29udGludWF0aW9uOworCQkgICAgfQorCQkgICAgZWxzZSBpZiAobG9va2ZvciAhPSBMT09LRk9SX1RFUk0KKwkJCQkJICAmJiBsb29rZm9yICE9IExPT0tGT1JfQ1BQX0JBU0VDTEFTUykKKwkJICAgIHsKKwkJCWFtb3VudCA9IHNjb3BlX2Ftb3VudDsKKwkJCWlmICh0aGVsaW5lWzBdID09ICd7JykKKwkJCSAgICBhbW91bnQgKz0gaW5kX29wZW5fZXh0cmE7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlJ3JlIGluIGEgY29tbWVudCBub3csIHNraXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb21tZW50LgorCQkgKi8JCQkJCSAgICAvKiBYWFggKi8KKwkJaWYgKCh0cnlwb3MgPSBmaW5kX3N0YXJ0X2NvbW1lbnQoaW5kX21heGNvbW1lbnQpKSAhPSBOVUxMKQorCQl7CisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSB0cnlwb3MtPmxudW0gKyAxOworCQkgICAgY29udGludWU7CisJCX0KKworCQlsID0gbWxfZ2V0X2N1cmxpbmUoKTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgc3dpdGNoKCkgbGFiZWwsIG1heSBsaW5lIHVwIHJlbGF0aXZlIHRvIHRoYXQuCisJCSAqIGlmIHRoaXMgaXMgYSBDKysgc2NvcGUgZGVjbGFyYXRpb24sIGRvIHRoZSBzYW1lLgorCQkgKi8KKwkJaXNjYXNlID0gY2luX2lzY2FzZShsKTsKKwkJaWYgKGlzY2FzZSB8fCBjaW5faXNzY29wZWRlY2wobCkpCisJCXsKKwkJICAgIC8qIHdlIGFyZSBvbmx5IGxvb2tpbmcgZm9yIGNwcCBiYXNlIGNsYXNzCisJCSAgICAgKiBkZWNsYXJhdGlvbi9pbml0aWFsaXphdGlvbiBhbnkgbG9uZ2VyICovCisJCSAgICBpZiAobG9va2ZvciA9PSBMT09LRk9SX0NQUF9CQVNFQ0xBU1MpCisJCQlicmVhazsKKworCQkgICAgLyogV2hlbiBsb29raW5nIGZvciBhICJkbyIgd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluCisJCSAgICAgKiBsYWJlbHMuICovCisJCSAgICBpZiAod2hpbGVsZXZlbCA+IDApCisJCQljb250aW51ZTsKKworCQkgICAgLyoKKwkJICAgICAqCWNhc2UgeHg6CisJCSAgICAgKgkgICAgYyA9IDk5ICsJICAgIDwtIHRoaXMgaW5kZW50IHBsdXMgY29udGludWF0aW9uCisJCSAgICAgKi0+CSAgIGhlcmU7CisJCSAgICAgKi8KKwkJICAgIGlmIChsb29rZm9yID09IExPT0tGT1JfVU5URVJNCisJCQkJCSAgIHx8IGxvb2tmb3IgPT0gTE9PS0ZPUl9FTlVNX09SX0lOSVQpCisJCSAgICB7CisJCQlpZiAoY29udF9hbW91bnQgPiAwKQorCQkJICAgIGFtb3VudCA9IGNvbnRfYW1vdW50OworCQkJZWxzZQorCQkJICAgIGFtb3VudCArPSBpbmRfY29udGludWF0aW9uOworCQkJYnJlYWs7CisJCSAgICB9CisKKwkJICAgIC8qCisJCSAgICAgKgljYXNlIHh4Ogk8LSBsaW5lIHVwIHdpdGggdGhpcyBjYXNlCisJCSAgICAgKgkgICAgeCA9IDMzMzsKKwkJICAgICAqCWNhc2UgeXk6CisJCSAgICAgKi8KKwkJICAgIGlmICggICAgICAgKGlzY2FzZSAmJiBsb29rZm9yID09IExPT0tGT1JfQ0FTRSkKKwkJCSAgICB8fCAoaXNjYXNlICYmIGxvb2tmb3JfYnJlYWspCisJCQkgICAgfHwgKCFpc2Nhc2UgJiYgbG9va2ZvciA9PSBMT09LRk9SX1NDT1BFREVDTCkpCisJCSAgICB7CisJCQkvKgorCQkJICogQ2hlY2sgdGhhdCB0aGlzIGNhc2UgbGFiZWwgaXMgbm90IGZvciBhbm90aGVyCisJCQkgKiBzd2l0Y2goKQorCQkJICovCQkJCSAgICAvKiBYWFggKi8KKwkJCWlmICgodHJ5cG9zID0gZmluZF9zdGFydF9icmFjZShpbmRfbWF4Y29tbWVudCkpID09CisJCQkJCSAgICAgTlVMTCB8fCB0cnlwb3MtPmxudW0gPT0gb3Vyc2NvcGUpCisJCQl7CisJCQkgICAgYW1vdW50ID0gZ2V0X2luZGVudCgpOwkvKiBYWFggKi8KKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQkgICAgfQorCisJCSAgICBuID0gZ2V0X2luZGVudF9ub2xhYmVsKGN1cndpbi0+d19jdXJzb3IubG51bSk7ICAvKiBYWFggKi8KKworCQkgICAgLyoKKwkJICAgICAqCSBjYXNlIHh4OiBpZiAoY29uZCkJICAgIDwtIGxpbmUgdXAgd2l0aCB0aGlzIGlmCisJCSAgICAgKgkJICAgICAgeSA9IHkgKyAxOworCQkgICAgICogLT4JICBzID0gOTk7CisJCSAgICAgKgorCQkgICAgICoJIGNhc2UgeHg6CisJCSAgICAgKgkgICAgIGlmIChjb25kKQkJPC0gbGluZSB1cCB3aXRoIHRoaXMgbGluZQorCQkgICAgICoJCSB5ID0geSArIDE7CisJCSAgICAgKiAtPiAgICBzID0gOTk7CisJCSAgICAgKi8KKwkJICAgIGlmIChsb29rZm9yID09IExPT0tGT1JfVEVSTSkKKwkJICAgIHsKKwkJCWlmIChuKQorCQkJICAgIGFtb3VudCA9IG47CisKKwkJCWlmICghbG9va2Zvcl9icmVhaykKKwkJCSAgICBicmVhazsKKwkJICAgIH0KKworCQkgICAgLyoKKwkJICAgICAqCSBjYXNlIHh4OiB4ID0geCArIDE7CSAgICA8LSBsaW5lIHVwIHdpdGggdGhpcyB4CisJCSAgICAgKiAtPgkgIHkgPSB5ICsgMTsKKwkJICAgICAqCisJCSAgICAgKgkgY2FzZSB4eDogaWYgKGNvbmQpCSAgICA8LSBsaW5lIHVwIHdpdGggdGhpcyBpZgorCQkgICAgICogLT4JICAgICAgIHkgPSB5ICsgMTsKKwkJICAgICAqLworCQkgICAgaWYgKG4pCisJCSAgICB7CisJCQlhbW91bnQgPSBuOworCQkJbCA9IGFmdGVyX2xhYmVsKG1sX2dldF9jdXJsaW5lKCkpOworCQkJaWYgKGwgIT0gTlVMTCAmJiBjaW5faXNfY2lud29yZChsKSkKKwkJCSAgICBhbW91bnQgKz0gaW5kX2xldmVsICsgaW5kX25vX2JyYWNlOworCQkJYnJlYWs7CisJCSAgICB9CisKKwkJICAgIC8qCisJCSAgICAgKiBUcnkgdG8gZ2V0IHRoZSBpbmRlbnQgb2YgYSBzdGF0ZW1lbnQgYmVmb3JlIHRoZSBzd2l0Y2gKKwkJICAgICAqIGxhYmVsLiAgSWYgbm90aGluZyBpcyBmb3VuZCwgbGluZSB1cCByZWxhdGl2ZSB0byB0aGUKKwkJICAgICAqIHN3aXRjaCBsYWJlbC4KKwkJICAgICAqCSAgICBicmVhazsJCTwtIG1heSBsaW5lIHVwIHdpdGggdGhpcyBsaW5lCisJCSAgICAgKgkgY2FzZSB4eDoKKwkJICAgICAqIC0+ICAgeSA9IDE7CisJCSAgICAgKi8KKwkJICAgIHNjb3BlX2Ftb3VudCA9IGdldF9pbmRlbnQoKSArIChpc2Nhc2UgICAgLyogWFhYICovCisJCQkJCT8gaW5kX2Nhc2VfY29kZSA6IGluZF9zY29wZWRlY2xfY29kZSk7CisJCSAgICBsb29rZm9yID0gaW5kX2Nhc2VfYnJlYWsgPyBMT09LRk9SX05PQlJFQUsgOiBMT09LRk9SX0FOWTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTG9va2luZyBmb3IgYSBzd2l0Y2goKSBsYWJlbCBvciBDKysgc2NvcGUgZGVjbGFyYXRpb24sCisJCSAqIGlnbm9yZSBvdGhlciBsaW5lcywgc2tpcCB7fS1ibG9ja3MuCisJCSAqLworCQlpZiAobG9va2ZvciA9PSBMT09LRk9SX0NBU0UgfHwgbG9va2ZvciA9PSBMT09LRk9SX1NDT1BFREVDTCkKKwkJeworCQkgICAgaWYgKGZpbmRfbGFzdF9wYXJlbihsLCAneycsICd9JykgJiYgKHRyeXBvcyA9CisJCQkJICAgIGZpbmRfc3RhcnRfYnJhY2UoaW5kX21heGNvbW1lbnQpKSAhPSBOVUxMKQorCQkJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gdHJ5cG9zLT5sbnVtICsgMTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogSWdub3JlIGp1bXAgbGFiZWxzIHdpdGggbm90aGluZyBhZnRlciB0aGVtLgorCQkgKi8KKwkJaWYgKGNpbl9pc2xhYmVsKGluZF9tYXhjb21tZW50KSkKKwkJeworCQkgICAgbCA9IGFmdGVyX2xhYmVsKG1sX2dldF9jdXJsaW5lKCkpOworCQkgICAgaWYgKGwgPT0gTlVMTCB8fCBjaW5fbm9jb2RlKGwpKQorCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBJZ25vcmUgI2RlZmluZXMsICNpZiwgZXRjLgorCQkgKiBJZ25vcmUgY29tbWVudCBhbmQgZW1wdHkgbGluZXMuCisJCSAqIChuZWVkIHRvIGdldCB0aGUgbGluZSBhZ2FpbiwgY2luX2lzbGFiZWwoKSBtYXkgaGF2ZQorCQkgKiB1bmxvY2tlZCBpdCkKKwkJICovCisJCWwgPSBtbF9nZXRfY3VybGluZSgpOworCQlpZiAoY2luX2lzcHJlcHJvY19jb250KCZsLCAmY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCQkJCQkJCSAgICAgfHwgY2luX25vY29kZShsKSkKKwkJICAgIGNvbnRpbnVlOworCisJCS8qCisJCSAqIEFyZSB3ZSBhdCB0aGUgc3RhcnQgb2YgYSBjcHAgYmFzZSBjbGFzcyBkZWNsYXJhdGlvbiBvcgorCQkgKiBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbj8KKwkJICovCQkJCQkJICAgIC8qIFhYWCAqLworCQlpZiAobG9va2ZvciAhPSBMT09LRk9SX1RFUk0gJiYgaW5kX2NwcF9iYXNlY2xhc3MKKwkJCQkJICAgICAmJiBjaW5faXNfY3BwX2Jhc2VjbGFzcyhsLCAmY29sKSkKKwkJeworCQkgICAgaWYgKGxvb2tmb3IgPT0gTE9PS0ZPUl9VTlRFUk0pCisJCSAgICB7CisJCQlpZiAoY29udF9hbW91bnQgPiAwKQorCQkJICAgIGFtb3VudCA9IGNvbnRfYW1vdW50OworCQkJZWxzZQorCQkJICAgIGFtb3VudCArPSBpbmRfY29udGludWF0aW9uOworCQkgICAgfQorCQkgICAgZWxzZSBpZiAoY29sID09IDAgfHwgdGhlbGluZVswXSA9PSAneycpCisJCSAgICB7CisJCQlhbW91bnQgPSBnZXRfaW5kZW50KCk7CisJCQlpZiAoZmluZF9sYXN0X3BhcmVuKGwsICcoJywgJyknKQorCQkJCSYmICh0cnlwb3MgPSBmaW5kX21hdGNoX3BhcmVuKGluZF9tYXhwYXJlbiwKKwkJCQkJaW5kX21heGNvbW1lbnQpKSAhPSBOVUxMKQorCQkJICAgIGFtb3VudCA9IGdldF9pbmRlbnRfbG51bSh0cnlwb3MtPmxudW0pOyAvKiBYWFggKi8KKwkJCWlmICh0aGVsaW5lWzBdICE9ICd7JykKKwkJCSAgICBhbW91bnQgKz0gaW5kX2NwcF9iYXNlY2xhc3M7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGNvbDsKKwkJCWdldHZjb2woY3Vyd2luLCAmY3Vyd2luLT53X2N1cnNvciwgJmNvbCwgTlVMTCwgTlVMTCk7CisJCQlhbW91bnQgPSAoaW50KWNvbDsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQl9CisJCWVsc2UgaWYgKGxvb2tmb3IgPT0gTE9PS0ZPUl9DUFBfQkFTRUNMQVNTKQorCQl7CisJCSAgICAvKiBvbmx5IGxvb2ssIHdoZXRoZXIgdGhlcmUgaXMgYSBjcHAgYmFzZSBjbGFzcworCQkgICAgICogZGVjbGFyYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoZSBvcGVuaW5nIGJyYWNlLiAqLworCQkgICAgaWYgKGNpbl9pc3Rlcm1pbmF0ZWQobCwgVFJVRSwgRkFMU0UpKQorCQkJYnJlYWs7CisJCSAgICBlbHNlCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIGxpbmUgYmVpbmcgdGVybWluYXRlZC4KKwkJICogSWYgdGVybWluYXRlZCB3aXRoIGEgJywnIG9ubHkgY29uc2lkZXIgaXQgdGVybWluYXRpbmcgaWYKKwkJICogdGhlcmUgaXMgYW5vdGVyIHVudGVybWluYXRlZCBzdGF0ZW1lbnQgYmVoaW5kLCBlZzoKKwkJICogICAxMjMsCisJCSAqICAgc2l6ZW9mCisJCSAqCSAgaGVyZQorCQkgKiBPdGhlcndpc2UgY2hlY2sgd2hldGhlciBpdCBpcyBhIGVudW1lcmF0aW9uIG9yIHN0cnVjdHVyZQorCQkgKiBpbml0aWFsaXNhdGlvbiAobm90IGluZGVudGVkKSBvciBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uCisJCSAqIChpbmRlbnRlZCkuCisJCSAqLworCQl0ZXJtaW5hdGVkID0gY2luX2lzdGVybWluYXRlZChsLCBGQUxTRSwgVFJVRSk7CisKKwkJaWYgKHRlcm1pbmF0ZWQgPT0gMCB8fCAobG9va2ZvciAhPSBMT09LRk9SX1VOVEVSTQorCQkJCQkJCSYmIHRlcm1pbmF0ZWQgPT0gJywnKSkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIGlmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBwYXJlbiB0aGluZywKKwkJICAgICAqIGdvIGJhY2sgdG8gdGhlIGxpbmUgdGhhdCBzdGFydHMgaXQgc28KKwkJICAgICAqIHdlIGNhbiBnZXQgdGhlIHJpZ2h0IHByZXZhaWxpbmcgaW5kZW50CisJCSAgICAgKgkgICBpZiAoIGZvbyAmJgorCQkgICAgICoJCSAgICBiYXIgKQorCQkgICAgICovCisJCSAgICAvKgorCQkgICAgICogcG9zaXRpb24gdGhlIGN1cnNvciBvdmVyIHRoZSByaWdodG1vc3QgcGFyZW4sIHNvIHRoYXQKKwkJICAgICAqIG1hdGNoaW5nIGl0IHdpbGwgdGFrZSB1cyBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgbGluZS4KKwkJICAgICAqLworCQkgICAgKHZvaWQpZmluZF9sYXN0X3BhcmVuKGwsICcoJywgJyknKTsKKwkJICAgIHRyeXBvcyA9IGZpbmRfbWF0Y2hfcGFyZW4oCisJCQkJIGNvcnJfaW5kX21heHBhcmVuKGluZF9tYXhwYXJlbiwgJmN1cl9jdXJwb3MpLAorCQkJCQkJCSAgICAgIGluZF9tYXhjb21tZW50KTsKKworCQkgICAgLyoKKwkJICAgICAqIElmIHdlIGFyZSBsb29raW5nIGZvciAnLCcsIHdlIGFsc28gbG9vayBmb3IgbWF0Y2hpbmcKKwkJICAgICAqIGJyYWNlcy4KKwkJICAgICAqLworCQkgICAgaWYgKHRyeXBvcyA9PSBOVUxMICYmIGZpbmRfbGFzdF9wYXJlbihsLCAneycsICd9JykpCisJCQl0cnlwb3MgPSBmaW5kX3N0YXJ0X2JyYWNlKGluZF9tYXhjb21tZW50KTsKKworCQkgICAgaWYgKHRyeXBvcyAhPSBOVUxMKQorCQkgICAgeworCQkJLyoKKwkJCSAqIENoZWNrIGlmIHdlIGFyZSBvbiBhIGNhc2UgbGFiZWwgbm93LiAgVGhpcyBpcworCQkJICogaGFuZGxlZCBhYm92ZS4KKwkJCSAqICAgICBjYXNlIHh4OiAgaWYgKCBhc2RmICYmCisJCQkgKgkJCWFzZGYpCisJCQkgKi8KKwkJCWN1cndpbi0+d19jdXJzb3IubG51bSA9IHRyeXBvcy0+bG51bTsKKwkJCWwgPSBtbF9nZXRfY3VybGluZSgpOworCQkJaWYgKGNpbl9pc2Nhc2UobCkgfHwgY2luX2lzc2NvcGVkZWNsKGwpKQorCQkJeworCQkJICAgICsrY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQkJICAgIGNvbnRpbnVlOworCQkJfQorCQkgICAgfQorCisJCSAgICAvKgorCQkgICAgICogU2tpcCBvdmVyIGNvbnRpbnVhdGlvbiBsaW5lcyB0byBmaW5kIHRoZSBvbmUgdG8gZ2V0IHRoZQorCQkgICAgICogaW5kZW50IGZyb20KKwkJICAgICAqIGNoYXIgKnVzZXRoaXMgPSAiYmxhXAorCQkgICAgICoJCSBibGEiLAorCQkgICAgICogICAgICBoZXJlOworCQkgICAgICovCisJCSAgICBpZiAodGVybWluYXRlZCA9PSAnLCcpCisJCSAgICB7CisJCQl3aGlsZSAoY3Vyd2luLT53X2N1cnNvci5sbnVtID4gMSkKKwkJCXsKKwkJCSAgICBsID0gbWxfZ2V0KGN1cndpbi0+d19jdXJzb3IubG51bSAtIDEpOworCQkJICAgIGlmICgqbCA9PSBOVUwgfHwgbFtTVFJMRU4obCkgLSAxXSAhPSAnXFwnKQorCQkJCWJyZWFrOworCQkJICAgIC0tY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQkJfQorCQkgICAgfQorCisJCSAgICAvKgorCQkgICAgICogR2V0IGluZGVudCBhbmQgcG9pbnRlciB0byB0ZXh0IGZvciBjdXJyZW50IGxpbmUsCisJCSAgICAgKiBpZ25vcmluZyBhbnkganVtcCBsYWJlbC4JICAgIFhYWAorCQkgICAgICovCisJCSAgICBjdXJfYW1vdW50ID0gc2tpcF9sYWJlbChjdXJ3aW4tPndfY3Vyc29yLmxudW0sCisJCQkJCQkJICAmbCwgaW5kX21heGNvbW1lbnQpOworCisJCSAgICAvKgorCQkgICAgICogSWYgdGhpcyBpcyBqdXN0IGFib3ZlIHRoZSBsaW5lIHdlIGFyZSBpbmRlbnRpbmcsIGFuZCBpdAorCQkgICAgICogc3RhcnRzIHdpdGggYSAneycsIGxpbmUgaXQgdXAgd2l0aCB0aGlzIGxpbmUuCisJCSAgICAgKgkJd2hpbGUgKG5vdCkKKwkJICAgICAqIC0+CXsKKwkJICAgICAqCQl9CisJCSAgICAgKi8KKwkJICAgIGlmICh0ZXJtaW5hdGVkICE9ICcsJyAmJiBsb29rZm9yICE9IExPT0tGT1JfVEVSTQorCQkJCQkJCSAmJiB0aGVsaW5lWzBdID09ICd7JykKKwkJICAgIHsKKwkJCWFtb3VudCA9IGN1cl9hbW91bnQ7CisJCQkvKgorCQkJICogT25seSBhZGQgaW5kX29wZW5fZXh0cmEgd2hlbiB0aGUgY3VycmVudCBsaW5lCisJCQkgKiBkb2Vzbid0IHN0YXJ0IHdpdGggYSAneycsIHdoaWNoIG11c3QgaGF2ZSBhIG1hdGNoCisJCQkgKiBpbiB0aGUgc2FtZSBsaW5lIChzY29wZSBpcyB0aGUgc2FtZSkuICBQcm9iYWJseToKKwkJCSAqCXsgMSwgMiB9LAorCQkJICogLT4JeyAzLCA0IH0KKwkJCSAqLworCQkJaWYgKCpza2lwd2hpdGUobCkgIT0gJ3snKQorCQkJICAgIGFtb3VudCArPSBpbmRfb3Blbl9leHRyYTsKKworCQkJaWYgKGluZF9jcHBfYmFzZWNsYXNzKQorCQkJeworCQkJICAgIC8qIGhhdmUgdG8gbG9vayBiYWNrLCB3aGV0aGVyIGl0IGlzIGEgY3BwIGJhc2UKKwkJCSAgICAgKiBjbGFzcyBkZWNsYXJhdGlvbiBvciBpbml0aWFsaXphdGlvbiAqLworCQkJICAgIGxvb2tmb3IgPSBMT09LRk9SX0NQUF9CQVNFQ0xBU1M7CisJCQkgICAgY29udGludWU7CisJCQl9CisJCQlicmVhazsKKwkJICAgIH0KKworCQkgICAgLyoKKwkJICAgICAqIENoZWNrIGlmIHdlIGFyZSBhZnRlciBhbiAiaWYiLCAid2hpbGUiLCBldGMuCisJCSAgICAgKiBBbHNvIGFsbG93ICIgICB9IGVsc2UiLgorCQkgICAgICovCisJCSAgICBpZiAoY2luX2lzX2NpbndvcmQobCkgfHwgY2luX2lzZWxzZShza2lwd2hpdGUobCkpKQorCQkgICAgeworCQkJLyoKKwkJCSAqIEZvdW5kIGFuIHVudGVybWluYXRlZCBsaW5lIGFmdGVyIGFuIGlmICgpLCBsaW5lIHVwCisJCQkgKiB3aXRoIHRoZSBsYXN0IG9uZS4KKwkJCSAqICAgaWYgKGNvbmQpCisJCQkgKgkgICAgMTAwICsKKwkJCSAqIC0+CQloZXJlOworCQkJICovCisJCQlpZiAobG9va2ZvciA9PSBMT09LRk9SX1VOVEVSTQorCQkJCQkgICB8fCBsb29rZm9yID09IExPT0tGT1JfRU5VTV9PUl9JTklUKQorCQkJeworCQkJICAgIGlmIChjb250X2Ftb3VudCA+IDApCisJCQkJYW1vdW50ID0gY29udF9hbW91bnQ7CisJCQkgICAgZWxzZQorCQkJCWFtb3VudCArPSBpbmRfY29udGludWF0aW9uOworCQkJICAgIGJyZWFrOworCQkJfQorCisJCQkvKgorCQkJICogSWYgdGhpcyBpcyBqdXN0IGFib3ZlIHRoZSBsaW5lIHdlIGFyZSBpbmRlbnRpbmcsIHdlCisJCQkgKiBhcmUgZmluaXNoZWQuCisJCQkgKgkgICAgd2hpbGUgKG5vdCkKKwkJCSAqIC0+CQloZXJlOworCQkJICogT3RoZXJ3aXNlIHRoaXMgaW5kZW50IGNhbiBiZSB1c2VkIHdoZW4gdGhlIGxpbmUKKwkJCSAqIGJlZm9yZSB0aGlzIGlzIHRlcm1pbmF0ZWQuCisJCQkgKgl5eXk7CisJCQkgKglpZiAoc3RhdCkKKwkJCSAqCSAgICB3aGlsZSAobm90KQorCQkJICoJCXh4eDsKKwkJCSAqIC0+CWhlcmU7CisJCQkgKi8KKwkJCWFtb3VudCA9IGN1cl9hbW91bnQ7CisJCQlpZiAodGhlbGluZVswXSA9PSAneycpCisJCQkgICAgYW1vdW50ICs9IGluZF9vcGVuX2V4dHJhOworCQkJaWYgKGxvb2tmb3IgIT0gTE9PS0ZPUl9URVJNKQorCQkJeworCQkJICAgIGFtb3VudCArPSBpbmRfbGV2ZWwgKyBpbmRfbm9fYnJhY2U7CisJCQkgICAgYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBTcGVjaWFsIHRyaWNrOiB3aGVuIGV4cGVjdGluZyB0aGUgd2hpbGUgKCkgYWZ0ZXIgYQorCQkJICogZG8sIGxpbmUgdXAgd2l0aCB0aGUgd2hpbGUoKQorCQkJICogICAgIGRvCisJCQkgKgkgICAgeCA9IDE7CisJCQkgKiAtPiAgaGVyZQorCQkJICovCisJCQlsID0gc2tpcHdoaXRlKG1sX2dldF9jdXJsaW5lKCkpOworCQkJaWYgKGNpbl9pc2RvKGwpKQorCQkJeworCQkJICAgIGlmICh3aGlsZWxldmVsID09IDApCisJCQkJYnJlYWs7CisJCQkgICAgLS13aGlsZWxldmVsOworCQkJfQorCisJCQkvKgorCQkJICogV2hlbiBzZWFyY2hpbmcgZm9yIGEgdGVybWluYXRlZCBsaW5lLCBkb24ndCB1c2UgdGhlCisJCQkgKiBvbmUgYmV0d2VlbiB0aGUgImlmIiBhbmQgdGhlICJlbHNlIi4KKwkJCSAqIE5lZWQgdG8gdXNlIHRoZSBzY29wZSBvZiB0aGlzICJlbHNlIi4gIFhYWAorCQkJICogSWYgd2hpbGVsZXZlbCAhPSAwIGNvbnRpbnVlIGxvb2tpbmcgZm9yIGEgImRvIHsiLgorCQkJICovCisJCQlpZiAoY2luX2lzZWxzZShsKQorCQkJCSYmIHdoaWxlbGV2ZWwgPT0gMAorCQkJCSYmICgodHJ5cG9zID0gZmluZF9zdGFydF9icmFjZShpbmRfbWF4Y29tbWVudCkpCisJCQkJCQkJCSAgICA9PSBOVUxMCisJCQkJICAgIHx8IGZpbmRfbWF0Y2goTE9PS0ZPUl9JRiwgdHJ5cG9zLT5sbnVtLAorCQkJCQlpbmRfbWF4cGFyZW4sIGluZF9tYXhjb21tZW50KSA9PSBGQUlMKSkKKwkJCSAgICBicmVhazsKKwkJICAgIH0KKworCQkgICAgLyoKKwkJICAgICAqIElmIHdlJ3JlIGJlbG93IGFuIHVudGVybWluYXRlZCBsaW5lIHRoYXQgaXMgbm90IGFuCisJCSAgICAgKiAiaWYiIG9yIHNvbWV0aGluZywgd2UgbWF5IGxpbmUgdXAgd2l0aCB0aGlzIGxpbmUgb3IKKwkJICAgICAqIGFkZCBzb21ldGluZyBmb3IgYSBjb250aW51YXRpb24gbGluZSwgZGVwZW5kaW5nIG9uCisJCSAgICAgKiB0aGUgbGluZSBiZWZvcmUgdGhpcyBvbmUuCisJCSAgICAgKi8KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCS8qCisJCQkgKiBGb3VuZCB0d28gdW50ZXJtaW5hdGVkIGxpbmVzIG9uIGEgcm93LCBsaW5lIHVwIHdpdGgKKwkJCSAqIHRoZSBsYXN0IG9uZS4KKwkJCSAqICAgYyA9IDk5ICsKKwkJCSAqCSAgICAxMDAgKworCQkJICogLT4JICAgIGhlcmU7CisJCQkgKi8KKwkJCWlmIChsb29rZm9yID09IExPT0tGT1JfVU5URVJNKQorCQkJeworCQkJICAgIC8qIFdoZW4gbGluZSBlbmRzIGluIGEgY29tbWEgYWRkIGV4dHJhIGluZGVudCAqLworCQkJICAgIGlmICh0ZXJtaW5hdGVkID09ICcsJykKKwkJCQlhbW91bnQgKz0gaW5kX2NvbnRpbnVhdGlvbjsKKwkJCSAgICBicmVhazsKKwkJCX0KKworCQkJaWYgKGxvb2tmb3IgPT0gTE9PS0ZPUl9FTlVNX09SX0lOSVQpCisJCQl7CisJCQkgICAgLyogRm91bmQgdHdvIGxpbmVzIGVuZGluZyBpbiAnLCcsIGxpbmV1cCB3aXRoIHRoZQorCQkJICAgICAqIGxvd2VzdCBvbmUsIGJ1dCBjaGVjayBmb3IgY3BwIGJhc2UgY2xhc3MKKwkJCSAgICAgKiBkZWNsYXJhdGlvbi9pbml0aWFsaXphdGlvbiwgaWYgaXQgaXMgYW4KKwkJCSAgICAgKiBvcGVuaW5nIGJyYWNlIG9yIHdlIGFyZSBsb29raW5nIGp1c3QgZm9yCisJCQkgICAgICogZW51bWVyYXRpb25zL2luaXRpYWxpemF0aW9ucy4gKi8KKwkJCSAgICBpZiAodGVybWluYXRlZCA9PSAnLCcpCisJCQkgICAgeworCQkJCWlmIChpbmRfY3BwX2Jhc2VjbGFzcyA9PSAwKQorCQkJCSAgICBicmVhazsKKworCQkJCWxvb2tmb3IgPSBMT09LRk9SX0NQUF9CQVNFQ0xBU1M7CisJCQkJY29udGludWU7CisJCQkgICAgfQorCisJCQkgICAgLyogSWdub3JlIHVudGVybWluYXRlZCBsaW5lcyBpbiBiZXR3ZWVuLCBidXQKKwkJCSAgICAgKiByZWR1Y2UgaW5kZW50LiAqLworCQkJICAgIGlmIChhbW91bnQgPiBjdXJfYW1vdW50KQorCQkJCWFtb3VudCA9IGN1cl9hbW91bnQ7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkgICAgLyoKKwkJCSAgICAgKiBGb3VuZCBmaXJzdCB1bnRlcm1pbmF0ZWQgbGluZSBvbiBhIHJvdywgbWF5CisJCQkgICAgICogbGluZSB1cCB3aXRoIHRoaXMgbGluZSwgcmVtZW1iZXIgaXRzIGluZGVudAorCQkJICAgICAqCSAgICAxMDAgKworCQkJICAgICAqIC0+CSAgICBoZXJlOworCQkJICAgICAqLworCQkJICAgIGFtb3VudCA9IGN1cl9hbW91bnQ7CisKKwkJCSAgICAvKgorCQkJICAgICAqIElmIHByZXZpb3VzIGxpbmUgZW5kcyBpbiAnLCcsIGNoZWNrIHdoZXRoZXIgd2UKKwkJCSAgICAgKiBhcmUgaW4gYW4gaW5pdGlhbGl6YXRpb24gb3IgZW51bQorCQkJICAgICAqIHN0cnVjdCB4eHggPQorCQkJICAgICAqIHsKKwkJCSAgICAgKiAgICAgIHNpemVvZiBhLAorCQkJICAgICAqICAgICAgMTI0IH07CisJCQkgICAgICogb3IgYSBub3JtYWwgcG9zc2libGUgY29udGludWF0aW9uIGxpbmUuCisJCQkgICAgICogYnV0IG9ubHksIG9mIG5vIG90aGVyIHN0YXRlbWVudCBoYXMgYmVlbiBmb3VuZAorCQkJICAgICAqIHlldC4KKwkJCSAgICAgKi8KKwkJCSAgICBpZiAobG9va2ZvciA9PSBMT09LRk9SX0lOSVRJQUwgJiYgdGVybWluYXRlZCA9PSAnLCcpCisJCQkgICAgeworCQkJCWxvb2tmb3IgPSBMT09LRk9SX0VOVU1fT1JfSU5JVDsKKwkJCQljb250X2Ftb3VudCA9IGNpbl9maXJzdF9pZF9hbW91bnQoKTsKKwkJCSAgICB9CisJCQkgICAgZWxzZQorCQkJICAgIHsKKwkJCQlpZiAobG9va2ZvciA9PSBMT09LRk9SX0lOSVRJQUwKKwkJCQkJJiYgKmwgIT0gTlVMCisJCQkJCSYmIGxbU1RSTEVOKGwpIC0gMV0gPT0gJ1xcJykKKwkJCQkJCQkJLyogWFhYICovCisJCQkJICAgIGNvbnRfYW1vdW50ID0gY2luX2dldF9lcXVhbF9hbW91bnQoCisJCQkJCQkgICAgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKwkJCQlpZiAobG9va2ZvciAhPSBMT09LRk9SX1RFUk0pCisJCQkJICAgIGxvb2tmb3IgPSBMT09LRk9SX1VOVEVSTTsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0KKworCQkvKgorCQkgKiBDaGVjayBpZiB3ZSBhcmUgYWZ0ZXIgYSB3aGlsZSAoY29uZCk7CisJCSAqIElmIHNvOiBJZ25vcmUgdW50aWwgdGhlIG1hdGNoaW5nICJkbyIuCisJCSAqLworCQkJCQkJCS8qIFhYWCAqLworCQllbHNlIGlmIChjaW5faXN3aGlsZW9mZG8obCwKKwkJCQkJIGN1cndpbi0+d19jdXJzb3IubG51bSwgaW5kX21heHBhcmVuKSkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIEZvdW5kIGFuIHVudGVybWluYXRlZCBsaW5lIGFmdGVyIGEgd2hpbGUgKCk7LCBsaW5lIHVwCisJCSAgICAgKiB3aXRoIHRoZSBsYXN0IG9uZS4KKwkJICAgICAqCSAgICB3aGlsZSAoY29uZCk7CisJCSAgICAgKgkgICAgMTAwICsJCTwtIGxpbmUgdXAgd2l0aCB0aGlzIG9uZQorCQkgICAgICogLT4JICAgIGhlcmU7CisJCSAgICAgKi8KKwkJICAgIGlmIChsb29rZm9yID09IExPT0tGT1JfVU5URVJNCisJCQkJCSAgIHx8IGxvb2tmb3IgPT0gTE9PS0ZPUl9FTlVNX09SX0lOSVQpCisJCSAgICB7CisJCQlpZiAoY29udF9hbW91bnQgPiAwKQorCQkJICAgIGFtb3VudCA9IGNvbnRfYW1vdW50OworCQkJZWxzZQorCQkJICAgIGFtb3VudCArPSBpbmRfY29udGludWF0aW9uOworCQkJYnJlYWs7CisJCSAgICB9CisKKwkJICAgIGlmICh3aGlsZWxldmVsID09IDApCisJCSAgICB7CisJCQlsb29rZm9yID0gTE9PS0ZPUl9URVJNOworCQkJYW1vdW50ID0gZ2V0X2luZGVudCgpOwkgICAgLyogWFhYICovCisJCQlpZiAodGhlbGluZVswXSA9PSAneycpCisJCQkgICAgYW1vdW50ICs9IGluZF9vcGVuX2V4dHJhOworCQkgICAgfQorCQkgICAgKyt3aGlsZWxldmVsOworCQl9CisKKwkJLyoKKwkJICogV2UgYXJlIGFmdGVyIGEgIm5vcm1hbCIgc3RhdGVtZW50LgorCQkgKiBJZiB3ZSBoYWQgYW5vdGhlciBzdGF0ZW1lbnQgd2UgY2FuIHN0b3Agbm93IGFuZCB1c2UgdGhlCisJCSAqIGluZGVudCBvZiB0aGF0IG90aGVyIHN0YXRlbWVudC4KKwkJICogT3RoZXJ3aXNlIHRoZSBpbmRlbnQgb2YgdGhlIGN1cnJlbnQgc3RhdGVtZW50IG1heSBiZSB1c2VkLAorCQkgKiBzZWFyY2ggYmFja3dhcmRzIGZvciB0aGUgbmV4dCAibm9ybWFsIiBzdGF0ZW1lbnQuCisJCSAqLworCQllbHNlCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBTa2lwIHNpbmdsZSBicmVhayBsaW5lLCBpZiBiZWZvcmUgYSBzd2l0Y2ggbGFiZWwuIEl0CisJCSAgICAgKiBtYXkgYmUgbGluZWQgdXAgd2l0aCB0aGUgY2FzZSBsYWJlbC4KKwkJICAgICAqLworCQkgICAgaWYgKGxvb2tmb3IgPT0gTE9PS0ZPUl9OT0JSRUFLCisJCQkJICAmJiBjaW5faXNicmVhayhza2lwd2hpdGUobWxfZ2V0X2N1cmxpbmUoKSkpKQorCQkgICAgeworCQkJbG9va2ZvciA9IExPT0tGT1JfQU5ZOworCQkJY29udGludWU7CisJCSAgICB9CisKKwkJICAgIC8qCisJCSAgICAgKiBIYW5kbGUgImRvIHsiIGxpbmUuCisJCSAgICAgKi8KKwkJICAgIGlmICh3aGlsZWxldmVsID4gMCkKKwkJICAgIHsKKwkJCWwgPSBjaW5fc2tpcGNvbW1lbnQobWxfZ2V0X2N1cmxpbmUoKSk7CisJCQlpZiAoY2luX2lzZG8obCkpCisJCQl7CisJCQkgICAgYW1vdW50ID0gZ2V0X2luZGVudCgpOwkvKiBYWFggKi8KKwkJCSAgICAtLXdoaWxlbGV2ZWw7CisJCQkgICAgY29udGludWU7CisJCQl9CisJCSAgICB9CisKKwkJICAgIC8qCisJCSAgICAgKiBGb3VuZCBhIHRlcm1pbmF0ZWQgbGluZSBhYm92ZSBhbiB1bnRlcm1pbmF0ZWQgbGluZS4gQWRkCisJCSAgICAgKiB0aGUgYW1vdW50IGZvciBhIGNvbnRpbnVhdGlvbiBsaW5lLgorCQkgICAgICoJIHggPSAxOworCQkgICAgICoJIHkgPSBmb28gKworCQkgICAgICogLT4JaGVyZTsKKwkJICAgICAqIG9yCisJCSAgICAgKgkgaW50IHggPSAxOworCQkgICAgICoJIGludCBmb28sCisJCSAgICAgKiAtPgloZXJlOworCQkgICAgICovCisJCSAgICBpZiAobG9va2ZvciA9PSBMT09LRk9SX1VOVEVSTQorCQkJCQkgICB8fCBsb29rZm9yID09IExPT0tGT1JfRU5VTV9PUl9JTklUKQorCQkgICAgeworCQkJaWYgKGNvbnRfYW1vdW50ID4gMCkKKwkJCSAgICBhbW91bnQgPSBjb250X2Ftb3VudDsKKwkJCWVsc2UKKwkJCSAgICBhbW91bnQgKz0gaW5kX2NvbnRpbnVhdGlvbjsKKwkJCWJyZWFrOworCQkgICAgfQorCisJCSAgICAvKgorCQkgICAgICogRm91bmQgYSB0ZXJtaW5hdGVkIGxpbmUgYWJvdmUgYSB0ZXJtaW5hdGVkIGxpbmUgb3IgImlmIgorCQkgICAgICogZXRjLiBsaW5lLiBVc2UgdGhlIGFtb3VudCBvZiB0aGUgbGluZSBiZWxvdyB1cy4KKwkJICAgICAqCSB4ID0gMTsJCQkJeCA9IDE7CisJCSAgICAgKgkgaWYgKGFzZGYpCQkgICAgeSA9IDI7CisJCSAgICAgKgkgICAgIHdoaWxlIChhc2RmKQkgIC0+aGVyZTsKKwkJICAgICAqCQloZXJlOworCQkgICAgICogLT5mb287CisJCSAgICAgKi8KKwkJICAgIGlmIChsb29rZm9yID09IExPT0tGT1JfVEVSTSkKKwkJICAgIHsKKwkJCWlmICghbG9va2Zvcl9icmVhayAmJiB3aGlsZWxldmVsID09IDApCisJCQkgICAgYnJlYWs7CisJCSAgICB9CisKKwkJICAgIC8qCisJCSAgICAgKiBGaXJzdCBsaW5lIGFib3ZlIHRoZSBvbmUgd2UncmUgaW5kZW50aW5nIGlzIHRlcm1pbmF0ZWQuCisJCSAgICAgKiBUbyBrbm93IHdoYXQgbmVlZHMgdG8gYmUgZG9uZSBsb29rIGZ1cnRoZXIgYmFja3dhcmQgZm9yCisJCSAgICAgKiBhIHRlcm1pbmF0ZWQgbGluZS4KKwkJICAgICAqLworCQkgICAgZWxzZQorCQkgICAgeworCQkJLyoKKwkJCSAqIHBvc2l0aW9uIHRoZSBjdXJzb3Igb3ZlciB0aGUgcmlnaHRtb3N0IHBhcmVuLCBzbworCQkJICogdGhhdCBtYXRjaGluZyBpdCB3aWxsIHRha2UgdXMgYmFjayB0byB0aGUgc3RhcnQgb2YKKwkJCSAqIHRoZSBsaW5lLiAgSGVscHMgZm9yOgorCQkJICogICAgIGZ1bmMoYXNkciwKKwkJCSAqCSAgICAgIGFzZGZhc2RmKTsKKwkJCSAqICAgICBoZXJlOworCQkJICovCit0ZXJtX2FnYWluOgorCQkJbCA9IG1sX2dldF9jdXJsaW5lKCk7CisJCQlpZiAoZmluZF9sYXN0X3BhcmVuKGwsICcoJywgJyknKQorCQkJCSYmICh0cnlwb3MgPSBmaW5kX21hdGNoX3BhcmVuKGluZF9tYXhwYXJlbiwKKwkJCQkJCSAgICAgaW5kX21heGNvbW1lbnQpKSAhPSBOVUxMKQorCQkJeworCQkJICAgIC8qCisJCQkgICAgICogQ2hlY2sgaWYgd2UgYXJlIG9uIGEgY2FzZSBsYWJlbCBub3cuICBUaGlzIGlzCisJCQkgICAgICogaGFuZGxlZCBhYm92ZS4KKwkJCSAgICAgKgkgICBjYXNlIHh4OiAgaWYgKCBhc2RmICYmCisJCQkgICAgICoJCQkgICAgYXNkZikKKwkJCSAgICAgKi8KKwkJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSB0cnlwb3MtPmxudW07CisJCQkgICAgbCA9IG1sX2dldF9jdXJsaW5lKCk7CisJCQkgICAgaWYgKGNpbl9pc2Nhc2UobCkgfHwgY2luX2lzc2NvcGVkZWNsKGwpKQorCQkJICAgIHsKKwkJCQkrK2N1cndpbi0+d19jdXJzb3IubG51bTsKKwkJCQljb250aW51ZTsKKwkJCSAgICB9CisJCQl9CisKKwkJCS8qIFdoZW4gYWxpZ25pbmcgd2l0aCB0aGUgY2FzZSBzdGF0ZW1lbnQsIGRvbid0IGFsaWduCisJCQkgKiB3aXRoIGEgc3RhdGVtZW50IGFmdGVyIGl0LgorCQkJICogIGNhc2UgMTogeyAgIDwtLSBkb24ndCB1c2UgdGhpcyB7IHBvc2l0aW9uCisJCQkgKglzdGF0OworCQkJICogIH0KKwkJCSAqICBjYXNlIDI6CisJCQkgKglzdGF0OworCQkJICogfQorCQkJICovCisJCQlpc2Nhc2UgPSAoaW5kX2tlZXBfY2FzZV9sYWJlbCAmJiBjaW5faXNjYXNlKGwpKTsKKworCQkJLyoKKwkJCSAqIEdldCBpbmRlbnQgYW5kIHBvaW50ZXIgdG8gdGV4dCBmb3IgY3VycmVudCBsaW5lLAorCQkJICogaWdub3JpbmcgYW55IGp1bXAgbGFiZWwuCisJCQkgKi8KKwkJCWFtb3VudCA9IHNraXBfbGFiZWwoY3Vyd2luLT53X2N1cnNvci5sbnVtLAorCQkJCQkJCSAgJmwsIGluZF9tYXhjb21tZW50KTsKKworCQkJaWYgKHRoZWxpbmVbMF0gPT0gJ3snKQorCQkJICAgIGFtb3VudCArPSBpbmRfb3Blbl9leHRyYTsKKwkJCS8qIFNlZSByZW1hcmsgYWJvdmU6ICJPbmx5IGFkZCBpbmRfb3Blbl9leHRyYS4uIiAqLworCQkJaWYgKCpza2lwd2hpdGUobCkgPT0gJ3snKQorCQkJICAgIGFtb3VudCAtPSBpbmRfb3Blbl9leHRyYTsKKwkJCWxvb2tmb3IgPSBpc2Nhc2UgPyBMT09LRk9SX0FOWSA6IExPT0tGT1JfVEVSTTsKKworCQkJLyoKKwkJCSAqIElmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgYSBibG9jaywgc2tpcCB0byB0aGUgc3RhcnQgb2YKKwkJCSAqIHRoYXQgYmxvY2suCisJCQkgKi8KKwkJCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKwkJCWlmICgqY2luX3NraXBjb21tZW50KGwpID09ICd9JworCQkJCSYmICh0cnlwb3MgPSBmaW5kX3N0YXJ0X2JyYWNlKGluZF9tYXhjb21tZW50KSkKKwkJCQkJCQkgICAgIT0gTlVMTCkgLyogWFhYICovCisJCQl7CisJCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gdHJ5cG9zLT5sbnVtOworCQkJICAgIC8qIGlmIG5vdCAiZWxzZSB7IiBjaGVjayBmb3IgdGVybWluYXRlZCBhZ2FpbiAqLworCQkJICAgIC8qIGJ1dCBza2lwIGJsb2NrIGZvciAifSBlbHNlIHsiICovCisJCQkgICAgbCA9IGNpbl9za2lwY29tbWVudChtbF9nZXRfY3VybGluZSgpKTsKKwkJCSAgICBpZiAoKmwgPT0gJ30nIHx8ICFjaW5faXNlbHNlKGwpKQorCQkJCWdvdG8gdGVybV9hZ2FpbjsKKwkJCSAgICArK2N1cndpbi0+d19jdXJzb3IubG51bTsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgICAgfQorCisgICAgICAvKiBhZGQgZXh0cmEgaW5kZW50IGZvciBhIGNvbW1lbnQgKi8KKyAgICAgIGlmIChjaW5faXNjb21tZW50KHRoZWxpbmUpKQorCSAgYW1vdW50ICs9IGluZF9jb21tZW50OworICAgIH0KKworICAgIC8qCisgICAgICogb2sgLS0gd2UncmUgbm90IGluc2lkZSBhbnkgc29ydCBvZiBzdHJ1Y3R1cmUgYXQgYWxsIQorICAgICAqCisgICAgICogdGhpcyBtZWFucyB3ZSdyZSBhdCB0aGUgdG9wIGxldmVsLCBhbmQgZXZlcnl0aGluZyBzaG91bGQKKyAgICAgKiBiYXNpY2FsbHkganVzdCBtYXRjaCB3aGVyZSB0aGUgcHJldmlvdXMgbGluZSBpcywgZXhjZXB0CisgICAgICogZm9yIHRoZSBsaW5lcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiwKKyAgICAgKiB3aGljaCBhcmUgSyZSLXN0eWxlIHBhcmFtZXRlcnMgYW5kIG5lZWQgdG8gYmUgaW5kZW50ZWQuCisgICAgICovCisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIGlmIG91ciBsaW5lIHN0YXJ0cyB3aXRoIGFuIG9wZW4gYnJhY2UsIGZvcmdldCBhYm91dCBhbnkKKwkgKiBwcmV2YWlsaW5nIGluZGVudCBhbmQgbWFrZSBzdXJlIGl0IGxvb2tzIGxpa2UgdGhlIHN0YXJ0CisJICogb2YgYSBmdW5jdGlvbgorCSAqLworCisJaWYgKHRoZWxpbmVbMF0gPT0gJ3snKQorCXsKKwkgICAgYW1vdW50ID0gaW5kX2ZpcnN0X29wZW47CisJfQorCisJLyoKKwkgKiBJZiB0aGUgTkVYVCBsaW5lIGlzIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIHRoZSBjdXJyZW50CisJICogbGluZSBuZWVkcyB0byBiZSBpbmRlbnRlZCBhcyBhIGZ1bmN0aW9uIHR5cGUgc3BlYy4KKwkgKiBEb24ndCBkbyB0aGlzIGlmIHRoZSBjdXJyZW50IGxpbmUgbG9va3MgbGlrZSBhIGNvbW1lbnQKKwkgKiBvciBpZiB0aGUgY3VycmVudCBsaW5lIGlzIHRlcm1pbmF0ZWQsIGllLiBlbmRzIGluICc7Jy4KKwkgKi8KKwllbHNlIGlmIChjdXJfY3VycG9zLmxudW0gPCBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudAorCQkmJiAhY2luX25vY29kZSh0aGVsaW5lKQorCQkmJiAhY2luX2VuZHNfaW4odGhlbGluZSwgKGNoYXJfdSAqKSI6IiwgTlVMTCkKKwkJJiYgIWNpbl9lbmRzX2luKHRoZWxpbmUsIChjaGFyX3UgKikiLCIsIE5VTEwpCisJCSYmIGNpbl9pc2Z1bmNkZWNsKE5VTEwsIGN1cl9jdXJwb3MubG51bSArIDEpCisJCSYmICFjaW5faXN0ZXJtaW5hdGVkKHRoZWxpbmUsIEZBTFNFLCBUUlVFKSkKKwl7CisJICAgIGFtb3VudCA9IGluZF9mdW5jX3R5cGU7CisJfQorCWVsc2UKKwl7CisJICAgIGFtb3VudCA9IDA7CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBjdXJfY3VycG9zOworCisJICAgIC8qIHNlYXJjaCBiYWNrd2FyZHMgdW50aWwgd2UgZmluZCBzb21ldGhpbmcgd2UgcmVjb2duaXplICovCisKKwkgICAgd2hpbGUgKGN1cndpbi0+d19jdXJzb3IubG51bSA+IDEpCisJICAgIHsKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtLS07CisJCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKworCQlsID0gbWxfZ2V0X2N1cmxpbmUoKTsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSBpbiBhIGNvbW1lbnQgbm93LCBza2lwIHRvIHRoZSBzdGFydCBvZiB0aGUgY29tbWVudC4KKwkJICovCQkJCQkJLyogWFhYICovCisJCWlmICgodHJ5cG9zID0gZmluZF9zdGFydF9jb21tZW50KGluZF9tYXhjb21tZW50KSkgIT0gTlVMTCkKKwkJeworCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gdHJ5cG9zLT5sbnVtICsgMTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogQXJlIHdlIGF0IHRoZSBzdGFydCBvZiBhIGNwcCBiYXNlIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGNvbnN0cnVjdG9yCisJCSAqIGluaXRpYWxpemF0aW9uPworCQkgKi8JCQkJCQkgICAgLyogWFhYICovCisJCWlmIChpbmRfY3BwX2Jhc2VjbGFzcyAhPSAwICYmIHRoZWxpbmVbMF0gIT0gJ3snCisJCQkJCSAgICAgJiYgY2luX2lzX2NwcF9iYXNlY2xhc3MobCwgJmNvbCkpCisJCXsKKwkJICAgIGlmIChjb2wgPT0gMCkKKwkJICAgIHsKKwkJCWFtb3VudCA9IGdldF9pbmRlbnQoKSArIGluZF9jcHBfYmFzZWNsYXNzOyAgLyogWFhYICovCisJCQlpZiAoZmluZF9sYXN0X3BhcmVuKGwsICcoJywgJyknKQorCQkJCSYmICh0cnlwb3MgPSBmaW5kX21hdGNoX3BhcmVuKGluZF9tYXhwYXJlbiwKKwkJCQkJaW5kX21heGNvbW1lbnQpKSAhPSBOVUxMKQorCQkJICAgIGFtb3VudCA9IGdldF9pbmRlbnRfbG51bSh0cnlwb3MtPmxudW0pCisJCQkJCSAgICsgaW5kX2NwcF9iYXNlY2xhc3M7CSAgICAvKiBYWFggKi8KKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWN1cndpbi0+d19jdXJzb3IuY29sID0gY29sOworCQkJZ2V0dmNvbChjdXJ3aW4sICZjdXJ3aW4tPndfY3Vyc29yLCAmY29sLCBOVUxMLCBOVUxMKTsKKwkJCWFtb3VudCA9IChpbnQpY29sOworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBTa2lwIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFuZCBibGFuayBsaW5lcy4KKwkJICovCisJCWlmIChjaW5faXNwcmVwcm9jX2NvbnQoJmwsICZjdXJ3aW4tPndfY3Vyc29yLmxudW0pKQorCQkgICAgY29udGludWU7CisKKwkJaWYgKGNpbl9ub2NvZGUobCkpCisJCSAgICBjb250aW51ZTsKKworCQkvKgorCQkgKiBJZiB0aGUgcHJldmlvdXMgbGluZSBlbmRzIGluICcsJywgdXNlIG9uZSBsZXZlbCBvZgorCQkgKiBpbmRlbnRhdGlvbjoKKwkJICogaW50IGZvbywKKwkJICogICAgIGJhcjsKKwkJICogZG8gdGhpcyBiZWZvcmUgY2hlY2tpbmcgZm9yICd9JyBpbiBjYXNlIG9mIGVnLgorCQkgKiBlbnVtIGZvb2JhcgorCQkgKiB7CisJCSAqICAgLi4uCisJCSAqIH0gZm9vLAorCQkgKiAgIGJhcjsKKwkJICovCisJCW4gPSAwOworCQlpZiAoY2luX2VuZHNfaW4obCwgKGNoYXJfdSAqKSIsIiwgTlVMTCkKKwkJCSAgICAgfHwgKCpsICE9IE5VTCAmJiAobiA9IGxbU1RSTEVOKGwpIC0gMV0pID09ICdcXCcpKQorCQl7CisJCSAgICAvKiB0YWtlIHVzIGJhY2sgdG8gb3BlbmluZyBwYXJlbiAqLworCQkgICAgaWYgKGZpbmRfbGFzdF9wYXJlbihsLCAnKCcsICcpJykKKwkJCSAgICAmJiAodHJ5cG9zID0gZmluZF9tYXRjaF9wYXJlbihpbmRfbWF4cGFyZW4sCisJCQkJCQkgICAgIGluZF9tYXhjb21tZW50KSkgIT0gTlVMTCkKKwkJCWN1cndpbi0+d19jdXJzb3IubG51bSA9IHRyeXBvcy0+bG51bTsKKworCQkgICAgLyogRm9yIGEgbGluZSBlbmRpbmcgaW4gJywnIHRoYXQgaXMgYSBjb250aW51YXRpb24gbGluZSBnbworCQkgICAgICogYmFjayB0byB0aGUgZmlyc3QgbGluZSB3aXRoIGEgYmFja3NsYXNoOgorCQkgICAgICogY2hhciAqZm9vID0gImJsYVwKKwkJICAgICAqCQkgYmxhIiwKKwkJICAgICAqICAgICAgaGVyZTsKKwkJICAgICAqLworCQkgICAgd2hpbGUgKG4gPT0gMCAmJiBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiAxKQorCQkgICAgeworCQkJbCA9IG1sX2dldChjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSAxKTsKKwkJCWlmICgqbCA9PSBOVUwgfHwgbFtTVFJMRU4obCkgLSAxXSAhPSAnXFwnKQorCQkJICAgIGJyZWFrOworCQkJLS1jdXJ3aW4tPndfY3Vyc29yLmxudW07CisJCSAgICB9CisKKwkJICAgIGFtb3VudCA9IGdldF9pbmRlbnQoKTsJICAgIC8qIFhYWCAqLworCisJCSAgICBpZiAoYW1vdW50ID09IDApCisJCQlhbW91bnQgPSBjaW5fZmlyc3RfaWRfYW1vdW50KCk7CisJCSAgICBpZiAoYW1vdW50ID09IDApCisJCQlhbW91bnQgPSBpbmRfY29udGludWF0aW9uOworCQkgICAgYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGUgbGluZSBsb29rcyBsaWtlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFuZCB3ZSdyZQorCQkgKiBub3QgaW4gYSBjb21tZW50LCBwdXQgaXQgdGhlIGxlZnQgbWFyZ2luLgorCQkgKi8KKwkJaWYgKGNpbl9pc2Z1bmNkZWNsKE5VTEwsIGN1cl9jdXJwb3MubG51bSkpICAvKiBYWFggKi8KKwkJICAgIGJyZWFrOworCQlsID0gbWxfZ2V0X2N1cmxpbmUoKTsKKworCQkvKgorCQkgKiBGaW5kaW5nIHRoZSBjbG9zaW5nICd9JyBvZiBhIHByZXZpb3VzIGZ1bmN0aW9uLiAgUHV0CisJCSAqIGN1cnJlbnQgbGluZSBhdCB0aGUgbGVmdCBtYXJnaW4uICBGb3Igd2hlbiAnY2lubycgaGFzICJmcyIuCisJCSAqLworCQlpZiAoKnNraXB3aGl0ZShsKSA9PSAnfScpCisJCSAgICBicmVhazsKKworCQkvKgkJCSAgICAobWF0Y2hpbmcgeykKKwkJICogSWYgdGhlIHByZXZpb3VzIGxpbmUgZW5kcyBvbiAnfTsnIChtYXliZSBmb2xsb3dlZCBieQorCQkgKiBjb21tZW50cykgYWxpZ24gYXQgY29sdW1uIDAuICBGb3IgZXhhbXBsZToKKwkJICogY2hhciAqc3RyaW5nX2FycmF5W10gPSB7ICJmb28iLAorCQkgKiAgICAgLyAqIHggKiAvICJifTthciIgfTsgLyAqIGZvb2JhciAqIC8KKwkJICovCisJCWlmIChjaW5fZW5kc19pbihsLCAoY2hhcl91ICopIn07IiwgTlVMTCkpCisJCSAgICBicmVhazsKKworCQkvKgorCQkgKiBJZiB0aGUgUFJFVklPVVMgbGluZSBpcyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCB0aGUgY3VycmVudAorCQkgKiBsaW5lIChhbmQgdGhlIG9uZXMgdGhhdCBmb2xsb3cpIG5lZWRzIHRvIGJlIGluZGVudGVkIGFzCisJCSAqIHBhcmFtZXRlcnMuCisJCSAqLworCQlpZiAoY2luX2lzZnVuY2RlY2woJmwsIGN1cndpbi0+d19jdXJzb3IubG51bSkpCisJCXsKKwkJICAgIGFtb3VudCA9IGluZF9wYXJhbTsKKwkJICAgIGJyZWFrOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhlIHByZXZpb3VzIGxpbmUgZW5kcyBpbiAnOycgYW5kIHRoZSBsaW5lIGJlZm9yZSB0aGUKKwkJICogcHJldmlvdXMgbGluZSBlbmRzIGluICcsJyBvciAnXCcsIGlkZW50IHRvIGNvbHVtbiB6ZXJvOgorCQkgKiBpbnQgZm9vLAorCQkgKiAgICAgYmFyOworCQkgKiBpbmRlbnRfdG9fMCBoZXJlOworCQkgKi8KKwkJaWYgKGNpbl9lbmRzX2luKGwsIChjaGFyX3UqKSI7IiwgTlVMTCkpCisJCXsKKwkJICAgIGwgPSBtbF9nZXQoY3Vyd2luLT53X2N1cnNvci5sbnVtIC0gMSk7CisJCSAgICBpZiAoY2luX2VuZHNfaW4obCwgKGNoYXJfdSAqKSIsIiwgTlVMTCkKKwkJCSAgICB8fCAoKmwgIT0gTlVMICYmIGxbU1RSTEVOKGwpIC0gMV0gPT0gJ1xcJykpCisJCQlicmVhazsKKwkJICAgIGwgPSBtbF9nZXRfY3VybGluZSgpOworCQl9CisKKwkJLyoKKwkJICogRG9lc24ndCBsb29rIGxpa2UgYW55dGhpbmcgaW50ZXJlc3RpbmcgLS0gc28ganVzdAorCQkgKiB1c2UgdGhlIGluZGVudCBvZiB0aGlzIGxpbmUuCisJCSAqCisJCSAqIFBvc2l0aW9uIHRoZSBjdXJzb3Igb3ZlciB0aGUgcmlnaHRtb3N0IHBhcmVuLCBzbyB0aGF0CisJCSAqIG1hdGNoaW5nIGl0IHdpbGwgdGFrZSB1cyBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgbGluZS4KKwkJICovCisJCWZpbmRfbGFzdF9wYXJlbihsLCAnKCcsICcpJyk7CisKKwkJaWYgKCh0cnlwb3MgPSBmaW5kX21hdGNoX3BhcmVuKGluZF9tYXhwYXJlbiwKKwkJCQkJCSAgICAgaW5kX21heGNvbW1lbnQpKSAhPSBOVUxMKQorCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gdHJ5cG9zLT5sbnVtOworCQlhbW91bnQgPSBnZXRfaW5kZW50KCk7CSAgICAvKiBYWFggKi8KKwkJYnJlYWs7CisJICAgIH0KKworCSAgICAvKiBhZGQgZXh0cmEgaW5kZW50IGZvciBhIGNvbW1lbnQgKi8KKwkgICAgaWYgKGNpbl9pc2NvbW1lbnQodGhlbGluZSkpCisJCWFtb3VudCArPSBpbmRfY29tbWVudDsKKworCSAgICAvKiBhZGQgZXh0cmEgaW5kZW50IGlmIHRoZSBwcmV2aW91cyBsaW5lIGVuZGVkIGluIGEgYmFja3NsYXNoOgorCSAgICAgKgkgICAgICAiYXNkZmFzZGZcCisJICAgICAqCQkgIGhlcmUiOworCSAgICAgKgkgICAgY2hhciAqZm9vID0gImFzZGZcCisJICAgICAqCQkJIGhlcmUiOworCSAgICAgKi8KKwkgICAgaWYgKGN1cl9jdXJwb3MubG51bSA+IDEpCisJICAgIHsKKwkJbCA9IG1sX2dldChjdXJfY3VycG9zLmxudW0gLSAxKTsKKwkJaWYgKCpsICE9IE5VTCAmJiBsW1NUUkxFTihsKSAtIDFdID09ICdcXCcpCisJCXsKKwkJICAgIGN1cl9hbW91bnQgPSBjaW5fZ2V0X2VxdWFsX2Ftb3VudChjdXJfY3VycG9zLmxudW0gLSAxKTsKKwkJICAgIGlmIChjdXJfYW1vdW50ID4gMCkKKwkJCWFtb3VudCA9IGN1cl9hbW91bnQ7CisJCSAgICBlbHNlIGlmIChjdXJfYW1vdW50ID09IDApCisJCQlhbW91bnQgKz0gaW5kX2NvbnRpbnVhdGlvbjsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKwordGhlZW5kOgorICAgIC8qIHB1dCB0aGUgY3Vyc29yIGJhY2sgd2hlcmUgaXQgYmVsb25ncyAqLworICAgIGN1cndpbi0+d19jdXJzb3IgPSBjdXJfY3VycG9zOworCisgICAgdmltX2ZyZWUobGluZWNvcHkpOworCisgICAgaWYgKGFtb3VudCA8IDApCisJcmV0dXJuIDA7CisgICAgcmV0dXJuIGFtb3VudDsKK30KKworICAgIHN0YXRpYyBpbnQKK2ZpbmRfbWF0Y2gobG9va2Zvciwgb3Vyc2NvcGUsIGluZF9tYXhwYXJlbiwgaW5kX21heGNvbW1lbnQpCisgICAgaW50CQlsb29rZm9yOworICAgIGxpbmVucl9UCW91cnNjb3BlOworICAgIGludAkJaW5kX21heHBhcmVuOworICAgIGludAkJaW5kX21heGNvbW1lbnQ7Cit7CisgICAgY2hhcl91CSpsb29rOworICAgIHBvc19UCSp0aGVpcnNjb3BlOworICAgIGNoYXJfdQkqbWlnaHRiZWlmOworICAgIGludAkJZWxzZWxldmVsOworICAgIGludAkJd2hpbGVsZXZlbDsKKworICAgIGlmIChsb29rZm9yID09IExPT0tGT1JfSUYpCisgICAgeworCWVsc2VsZXZlbCA9IDE7CisJd2hpbGVsZXZlbCA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZWxzZWxldmVsID0gMDsKKwl3aGlsZWxldmVsID0gMTsKKyAgICB9CisKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisKKyAgICB3aGlsZSAoY3Vyd2luLT53X2N1cnNvci5sbnVtID4gb3Vyc2NvcGUgKyAxKQorICAgIHsKKwljdXJ3aW4tPndfY3Vyc29yLmxudW0tLTsKKwljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisKKwlsb29rID0gY2luX3NraXBjb21tZW50KG1sX2dldF9jdXJsaW5lKCkpOworCWlmIChjaW5faXNlbHNlKGxvb2spCisJCXx8IGNpbl9pc2lmKGxvb2spCisJCXx8IGNpbl9pc2RvKGxvb2spCQkJICAgIC8qIFhYWCAqLworCQl8fCBjaW5faXN3aGlsZW9mZG8obG9vaywgY3Vyd2luLT53X2N1cnNvci5sbnVtLCBpbmRfbWF4cGFyZW4pKQorCXsKKwkgICAgLyoKKwkgICAgICogaWYgd2UndmUgZ29uZSBvdXRzaWRlIHRoZSBicmFjZXMgZW50aXJlbHksCisJICAgICAqIHdlIG11c3QgYmUgb3V0IG9mIHNjb3BlLi4uCisJICAgICAqLworCSAgICB0aGVpcnNjb3BlID0gZmluZF9zdGFydF9icmFjZShpbmRfbWF4Y29tbWVudCk7ICAvKiBYWFggKi8KKwkgICAgaWYgKHRoZWlyc2NvcGUgPT0gTlVMTCkKKwkJYnJlYWs7CisKKwkgICAgLyoKKwkgICAgICogYW5kIGlmIHRoZSBicmFjZSBlbmNsb3NpbmcgdGhpcyBpcyBmdXJ0aGVyCisJICAgICAqIGJhY2sgdGhhbiB0aGUgb25lIGVuY2xvc2luZyB0aGUgZWxzZSwgd2UncmUKKwkgICAgICogb3V0IG9mIGx1Y2sgdG9vLgorCSAgICAgKi8KKwkgICAgaWYgKHRoZWlyc2NvcGUtPmxudW0gPCBvdXJzY29wZSkKKwkJYnJlYWs7CisKKwkgICAgLyoKKwkgICAgICogYW5kIGlmIHRoZXkncmUgZW5jbG9zZWQgaW4gYSAqZGVlcGVyKiBicmFjZSwKKwkgICAgICogdGhlbiB3ZSBjYW4gaWdub3JlIGl0IGJlY2F1c2UgaXQncyBpbiBhCisJICAgICAqIGRpZmZlcmVudCBzY29wZS4uLgorCSAgICAgKi8KKwkgICAgaWYgKHRoZWlyc2NvcGUtPmxudW0gPiBvdXJzY29wZSkKKwkJY29udGludWU7CisKKwkgICAgLyoKKwkgICAgICogaWYgaXQgd2FzIGFuICJlbHNlIiAodGhhdCdzIG5vdCBhbiAiZWxzZSBpZiIpCisJICAgICAqIHRoZW4gd2UgbmVlZCB0byBnbyBiYWNrIHRvIGFub3RoZXIgaWYsIHNvCisJICAgICAqIGluY3JlbWVudCBlbHNlbGV2ZWwKKwkgICAgICovCisJICAgIGxvb2sgPSBjaW5fc2tpcGNvbW1lbnQobWxfZ2V0X2N1cmxpbmUoKSk7CisJICAgIGlmIChjaW5faXNlbHNlKGxvb2spKQorCSAgICB7CisJCW1pZ2h0YmVpZiA9IGNpbl9za2lwY29tbWVudChsb29rICsgNCk7CisJCWlmICghY2luX2lzaWYobWlnaHRiZWlmKSkKKwkJICAgICsrZWxzZWxldmVsOworCQljb250aW51ZTsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIGlmIGl0IHdhcyBhICJ3aGlsZSIgdGhlbiB3ZSBuZWVkIHRvIGdvIGJhY2sgdG8KKwkgICAgICogYW5vdGhlciAiZG8iLCBzbyBpbmNyZW1lbnQgd2hpbGVsZXZlbC4gIFhYWAorCSAgICAgKi8KKwkgICAgaWYgKGNpbl9pc3doaWxlb2Zkbyhsb29rLCBjdXJ3aW4tPndfY3Vyc29yLmxudW0sIGluZF9tYXhwYXJlbikpCisJICAgIHsKKwkJKyt3aGlsZWxldmVsOworCQljb250aW51ZTsKKwkgICAgfQorCisJICAgIC8qIElmIGl0J3MgYW4gImlmIiBkZWNyZW1lbnQgZWxzZWxldmVsICovCisJICAgIGxvb2sgPSBjaW5fc2tpcGNvbW1lbnQobWxfZ2V0X2N1cmxpbmUoKSk7CisJICAgIGlmIChjaW5faXNpZihsb29rKSkKKwkgICAgeworCQllbHNlbGV2ZWwtLTsKKwkJLyoKKwkJICogV2hlbiBsb29raW5nIGZvciBhbiAiaWYiIGlnbm9yZSAid2hpbGUicyB0aGF0CisJCSAqIGdldCBpbiB0aGUgd2F5LgorCQkgKi8KKwkJaWYgKGVsc2VsZXZlbCA9PSAwICYmIGxvb2tmb3IgPT0gTE9PS0ZPUl9JRikKKwkJICAgIHdoaWxlbGV2ZWwgPSAwOworCSAgICB9CisKKwkgICAgLyogSWYgaXQncyBhICJkbyIgZGVjcmVtZW50IHdoaWxlbGV2ZWwgKi8KKwkgICAgaWYgKGNpbl9pc2RvKGxvb2spKQorCQl3aGlsZWxldmVsLS07CisKKwkgICAgLyoKKwkgICAgICogaWYgd2UndmUgdXNlZCB1cCBhbGwgdGhlIGVsc2VzLCB0aGVuCisJICAgICAqIHRoaXMgbXVzdCBiZSB0aGUgaWYgdGhhdCB3ZSB3YW50IQorCSAgICAgKiBtYXRjaCB0aGUgaW5kZW50IGxldmVsIG9mIHRoYXQgaWYuCisJICAgICAqLworCSAgICBpZiAoZWxzZWxldmVsIDw9IDAgJiYgd2hpbGVsZXZlbCA8PSAwKQorCSAgICB7CisJCXJldHVybiBPSzsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKyMgaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogR2V0IGluZGVudCBsZXZlbCBmcm9tICdpbmRlbnRleHByJy4KKyAqLworICAgIGludAorZ2V0X2V4cHJfaW5kZW50KCkKK3sKKyAgICBpbnQJCWluZGVudDsKKyAgICBwb3NfVAlwb3M7CisgICAgaW50CQlzYXZlX1N0YXRlOworCisgICAgcG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICBzZXRfdmltX3Zhcl9ucihWVl9MTlVNLCBjdXJ3aW4tPndfY3Vyc29yLmxudW0pOworICAgICsrc2FuZGJveDsKKyAgICBpbmRlbnQgPSBldmFsX3RvX251bWJlcihjdXJidWYtPmJfcF9pbmRlKTsKKyAgICAtLXNhbmRib3g7CisKKyAgICAvKiBSZXN0b3JlIHRoZSBjdXJzb3IgcG9zaXRpb24gc28gdGhhdCAnaW5kZW50ZXhwcicgZG9lc24ndCBuZWVkIHRvLgorICAgICAqIFByZXRlbmQgdG8gYmUgaW4gSW5zZXJ0IG1vZGUsIGFsbG93IGN1cnNvciBwYXN0IGVuZCBvZiBsaW5lIGZvciAibyIKKyAgICAgKiBjb21tYW5kLiAqLworICAgIHNhdmVfU3RhdGUgPSBTdGF0ZTsKKyAgICBTdGF0ZSA9IElOU0VSVDsKKyAgICBjdXJ3aW4tPndfY3Vyc29yID0gcG9zOworICAgIGNoZWNrX2N1cnNvcigpOworICAgIFN0YXRlID0gc2F2ZV9TdGF0ZTsKKworICAgIC8qIElmIHRoZXJlIGlzIGFuIGVycm9yLCBqdXN0IGtlZXAgdGhlIGN1cnJlbnQgaW5kZW50LiAqLworICAgIGlmIChpbmRlbnQgPCAwKQorCWluZGVudCA9IGdldF9pbmRlbnQoKTsKKworICAgIHJldHVybiBpbmRlbnQ7Cit9CisjIGVuZGlmCisKKyNlbmRpZiAvKiBGRUFUX0NJTkRFTlQgKi8KKworI2lmIGRlZmluZWQoRkVBVF9MSVNQKSB8fCBkZWZpbmVkKFBST1RPKQorCitzdGF0aWMgaW50IGxpc3BfbWF0Y2ggX19BUkdTKChjaGFyX3UgKnApKTsKKworICAgIHN0YXRpYyBpbnQKK2xpc3BfbWF0Y2gocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgY2hhcl91CWJ1ZltMU0laRV07CisgICAgaW50CQlsZW47CisgICAgY2hhcl91CSp3b3JkID0gcF9saXNwd29yZHM7CisKKyAgICB3aGlsZSAoKndvcmQgIT0gTlVMKQorICAgIHsKKwkodm9pZCljb3B5X29wdGlvbl9wYXJ0KCZ3b3JkLCBidWYsIExTSVpFLCAiLCIpOworCWxlbiA9IChpbnQpU1RSTEVOKGJ1Zik7CisJaWYgKFNUUk5DTVAoYnVmLCBwLCBsZW4pID09IDAgJiYgcFtsZW5dID09ICcgJykKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFdoZW4gJ3AnIGlzIHByZXNlbnQgaW4gJ2Nwb3B0aW9ucywgYSBWaSBjb21wYXRpYmxlIG1ldGhvZCBpcyB1c2VkLgorICogVGhlIGluY29tcGF0aWJsZSBuZXdlciBtZXRob2QgaXMgcXVpdGUgYSBiaXQgYmV0dGVyIGF0IGluZGVudGluZworICogY29kZSBpbiBsaXNwLWxpa2UgbGFuZ3VhZ2VzIHRoYW4gdGhlIHRyYWRpdGlvbmFsIG9uZTsgaXQncyBzdGlsbAorICogbW9zdGx5IGhldXJpc3RpY3MgaG93ZXZlciAtLSBEaXJrIHZhbiBEZXVuLCBkaXJrQHJhdmUub3JnCisgKgorICogVE9ETzoKKyAqIEZpbmRtYXRjaCgpIHNob3VsZCBiZSBhZGFwdGVkIGZvciBsaXNwLCBhbHNvIHRvIG1ha2Ugc2hvd21hdGNoCisgKiB3b3JrIGNvcnJlY3RseTogbm93ICh2NS4zKSBpdCBzZWVtcyBhbGwgQy9DKysgb3JpZW50ZWQ6CisgKiAtIGl0IGRvZXMgbm90IHJlY29nbml6ZSB0aGUgI1woIGFuZCAjXCkgbm90YXRpb25zIGFzIGNoYXJhY3RlciBsaXRlcmFscworICogLSBpdCBkb2Vzbid0IGtub3cgYWJvdXQgY29tbWVudHMgc3RhcnRpbmcgd2l0aCBhIHNlbWljb2xvbgorICogLSBpdCBpbmNvcnJlY3RseSBpbnRlcnByZXRzICcoJyBhcyBhIGNoYXJhY3RlciBsaXRlcmFsCisgKiBBbGwgdGhpcyBtZXNzZXMgdXAgZ2V0X2xpc3BfaW5kZW50IGluIHNvbWUgcmFyZSBjYXNlcy4KKyAqLworICAgIGludAorZ2V0X2xpc3BfaW5kZW50KCkKK3sKKyAgICBwb3NfVAkqcG9zLCByZWFscG9zOworICAgIGludAkJYW1vdW50OworICAgIGNoYXJfdQkqdGhhdDsKKyAgICBjb2xucl9UCWNvbDsKKyAgICBjb2xucl9UCWZpcnN0dHJ5OworICAgIGludAkJcGFyZW5jb3VudCwgcXVvdGVjb3VudDsKKyAgICBpbnQJCXZpX2xpc3A7CisKKyAgICAvKiBTZXQgdmlfbGlzcCB0byB1c2UgdGhlIHZpLWNvbXBhdGlibGUgbWV0aG9kICovCisgICAgdmlfbGlzcCA9ICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fTElTUCkgIT0gTlVMTCk7CisKKyAgICByZWFscG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisKKyAgICBpZiAoKHBvcyA9IGZpbmRtYXRjaChOVUxMLCAnKCcpKSAhPSBOVUxMKQorICAgIHsKKwkvKiBFeHRyYSB0cmljazogVGFrZSB0aGUgaW5kZW50IG9mIHRoZSBmaXJzdCBwcmV2aW91cyBub24td2hpdGUKKwkgKiBsaW5lIHRoYXQgaXMgYXQgdGhlIHNhbWUgKCkgbGV2ZWwuICovCisJYW1vdW50ID0gLTE7CisJcGFyZW5jb3VudCA9IDA7CisKKwl3aGlsZSAoLS1jdXJ3aW4tPndfY3Vyc29yLmxudW0gPj0gcG9zLT5sbnVtKQorCXsKKwkgICAgaWYgKGxpbmV3aGl0ZShjdXJ3aW4tPndfY3Vyc29yLmxudW0pKQorCQljb250aW51ZTsKKwkgICAgZm9yICh0aGF0ID0gbWxfZ2V0X2N1cmxpbmUoKTsgKnRoYXQgIT0gTlVMOyArK3RoYXQpCisJICAgIHsKKwkJaWYgKCp0aGF0ID09ICc7JykKKwkJeworCQkgICAgd2hpbGUgKCoodGhhdCArIDEpICE9IE5VTCkKKwkJCSsrdGhhdDsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJCWlmICgqdGhhdCA9PSAnXFwnKQorCQl7CisJCSAgICBpZiAoKih0aGF0ICsgMSkgIT0gTlVMKQorCQkJKyt0aGF0OworCQkgICAgY29udGludWU7CisJCX0KKwkJaWYgKCp0aGF0ID09ICciJyAmJiAqKHRoYXQgKyAxKSAhPSBOVUwpCisJCXsKKwkJICAgIHRoYXQrKzsKKwkJICAgIHdoaWxlICgqdGhhdCAmJiAoKnRoYXQgIT0gJyInIHx8ICoodGhhdCAtIDEpID09ICdcXCcpKQorCQkJKyt0aGF0OworCQl9CisJCWlmICgqdGhhdCA9PSAnKCcpCisJCSAgICArK3BhcmVuY291bnQ7CisJCWVsc2UgaWYgKCp0aGF0ID09ICcpJykKKwkJICAgIC0tcGFyZW5jb3VudDsKKwkgICAgfQorCSAgICBpZiAocGFyZW5jb3VudCA9PSAwKQorCSAgICB7CisJCWFtb3VudCA9IGdldF9pbmRlbnQoKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKwlpZiAoYW1vdW50ID09IC0xKQorCXsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gcG9zLT5sbnVtOworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IHBvcy0+Y29sOworCSAgICBjb2wgPSBwb3MtPmNvbDsKKworCSAgICB0aGF0ID0gbWxfZ2V0X2N1cmxpbmUoKTsKKworCSAgICBpZiAodmlfbGlzcCAmJiBnZXRfaW5kZW50KCkgPT0gMCkKKwkJYW1vdW50ID0gMjsKKwkgICAgZWxzZQorCSAgICB7CisJCWFtb3VudCA9IDA7CisJCXdoaWxlICgqdGhhdCAmJiBjb2wpCisJCXsKKwkJICAgIGFtb3VudCArPSBsYnJfY2hhcnRhYnNpemVfYWR2KCZ0aGF0LCAoY29sbnJfVClhbW91bnQpOworCQkgICAgY29sLS07CisJCX0KKworCQkvKgorCQkgKiBTb21lIGtleXdvcmRzIHJlcXVpcmUgImJvZHkiIGluZGVudGluZyBydWxlcyAodGhlCisJCSAqIG5vbi1zdGFuZGFyZC1saXNwIG9uZXMgYXJlIFNjaGVtZSBzcGVjaWFsIGZvcm1zKToKKwkJICoKKwkJICogKGxldCAoKGEgMSkpICAgIGluc3RlYWQgICAgKGxldCAoKGEgMSkpCisJCSAqICAgKC4uLikpCSAgICAgIG9mCSAgICguLi4pKQorCQkgKi8KKworCQlpZiAoIXZpX2xpc3AgJiYgKnRoYXQgPT0gJygnICYmIGxpc3BfbWF0Y2godGhhdCArIDEpKQorCQkgICAgYW1vdW50ICs9IDI7CisJCWVsc2UKKwkJeworCQkgICAgdGhhdCsrOworCQkgICAgYW1vdW50Kys7CisJCSAgICBmaXJzdHRyeSA9IGFtb3VudDsKKworCQkgICAgd2hpbGUgKHZpbV9pc3doaXRlKCp0aGF0KSkKKwkJICAgIHsKKwkJCWFtb3VudCArPSBsYnJfY2hhcnRhYnNpemUodGhhdCwgKGNvbG5yX1QpYW1vdW50KTsKKwkJCSsrdGhhdDsKKwkJICAgIH0KKworCQkgICAgaWYgKCp0aGF0ICYmICp0aGF0ICE9ICc7JykgLyogbm90IGEgY29tbWVudCBsaW5lICovCisJCSAgICB7CisJCQkvKiB0ZXN0ICp0aGF0ICE9ICcoJyB0byBhY2NvbW9kYXRlIGZpcnN0IGxldC9kbworCQkJICogYXJndW1lbnQgaWYgaXQgaXMgbW9yZSB0aGFuIG9uZSBsaW5lICovCisJCQlpZiAoIXZpX2xpc3AgJiYgKnRoYXQgIT0gJygnKQorCQkJICAgIGZpcnN0dHJ5Kys7CisKKwkJCXBhcmVuY291bnQgPSAwOworCQkJcXVvdGVjb3VudCA9IDA7CisKKwkJCWlmICh2aV9saXNwCisJCQkJfHwgKCp0aGF0ICE9ICciJworCQkJCSAgICAmJiAqdGhhdCAhPSAnXCcnCisJCQkJICAgICYmICp0aGF0ICE9ICcjJworCQkJCSAgICAmJiAoKnRoYXQgPCAnMCcgfHwgKnRoYXQgPiAnOScpKSkKKwkJCXsKKwkJCSAgICB3aGlsZSAoKnRoYXQKKwkJCQkgICAgJiYgKCF2aW1faXN3aGl0ZSgqdGhhdCkKKwkJCQkJfHwgcXVvdGVjb3VudAorCQkJCQl8fCBwYXJlbmNvdW50KQorCQkJCSAgICAmJiAoISgqdGhhdCA9PSAnKCcKKwkJCQkJICAgICYmICFxdW90ZWNvdW50CisJCQkJCSAgICAmJiAhcGFyZW5jb3VudAorCQkJCQkgICAgJiYgdmlfbGlzcCkpKQorCQkJICAgIHsKKwkJCQlpZiAoKnRoYXQgPT0gJyInKQorCQkJCSAgICBxdW90ZWNvdW50ID0gIXF1b3RlY291bnQ7CisJCQkJaWYgKCp0aGF0ID09ICcoJyAmJiAhcXVvdGVjb3VudCkKKwkJCQkgICAgKytwYXJlbmNvdW50OworCQkJCWlmICgqdGhhdCA9PSAnKScgJiYgIXF1b3RlY291bnQpCisJCQkJICAgIC0tcGFyZW5jb3VudDsKKwkJCQlpZiAoKnRoYXQgPT0gJ1xcJyAmJiAqKHRoYXQrMSkgIT0gTlVMKQorCQkJCSAgICBhbW91bnQgKz0gbGJyX2NoYXJ0YWJzaXplX2FkdigmdGhhdCwKKwkJCQkJCQkgICAgIChjb2xucl9UKWFtb3VudCk7CisJCQkJYW1vdW50ICs9IGxicl9jaGFydGFic2l6ZV9hZHYoJnRoYXQsCisJCQkJCQkJICAgICAoY29sbnJfVClhbW91bnQpOworCQkJICAgIH0KKwkJCX0KKwkJCXdoaWxlICh2aW1faXN3aGl0ZSgqdGhhdCkpCisJCQl7CisJCQkgICAgYW1vdW50ICs9IGxicl9jaGFydGFic2l6ZSh0aGF0LCAoY29sbnJfVClhbW91bnQpOworCQkJICAgIHRoYXQrKzsKKwkJCX0KKwkJCWlmICghKnRoYXQgfHwgKnRoYXQgPT0gJzsnKQorCQkJICAgIGFtb3VudCA9IGZpcnN0dHJ5OworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIGVsc2UKKwlhbW91bnQgPSAwOwkvKiBubyBtYXRjaGluZyAnKCcgZm91bmQsIHVzZSB6ZXJvIGluZGVudCAqLworCisgICAgY3Vyd2luLT53X2N1cnNvciA9IHJlYWxwb3M7CisKKyAgICByZXR1cm4gYW1vdW50OworfQorI2VuZGlmIC8qIEZFQVRfTElTUCAqLworCisgICAgdm9pZAorcHJlcGFyZV90b19leGl0KCkKK3sKKyNpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlKQorICAgIHsKKwlndWkuZHlpbmcgPSBUUlVFOworCW91dF90cmFzaCgpOwkvKiB0cmFzaCBhbnkgcGVuZGluZyBvdXRwdXQgKi8KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCXdpbmRnb3RvKChpbnQpUm93cyAtIDEsIDApOworCisJLyoKKwkgKiBTd2l0Y2ggdGVybWluYWwgbW9kZSBiYWNrIG5vdywgc28gbWVzc2FnZXMgZW5kIHVwIG9uIHRoZSAibm9ybWFsIgorCSAqIHNjcmVlbiAoaWYgdGhlcmUgYXJlIHR3byBzY3JlZW5zKS4KKwkgKi8KKwlzZXR0bW9kZShUTU9ERV9DT09LKTsKKyNpZmRlZiBXSU4zMjY0CisJaWYgKGNhbl9lbmRfdGVybWNhcF9tb2RlKEZBTFNFKSA9PSBUUlVFKQorI2VuZGlmCisJICAgIHN0b3B0ZXJtY2FwKCk7CisJb3V0X2ZsdXNoKCk7CisgICAgfQorfQorCisvKgorICogUHJlc2VydmUgZmlsZXMgYW5kIGV4aXQuCisgKiBXaGVuIGNhbGxlZCBJT2J1ZmYgbXVzdCBjb250YWluIGEgbWVzc2FnZS4KKyAqLworICAgIHZvaWQKK3ByZXNlcnZlX2V4aXQoKQoreworICAgIGJ1Zl9UCSpidWY7CisKKyAgICBwcmVwYXJlX3RvX2V4aXQoKTsKKworICAgIG91dF9zdHIoSU9idWZmKTsKKyAgICBzY3JlZW5fc3RhcnQoKTsJCSAgICAvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKyAgICBvdXRfZmx1c2goKTsKKworICAgIG1sX2Nsb3NlX25vdG1vZCgpOwkJICAgIC8qIGNsb3NlIGFsbCBub3QtbW9kaWZpZWQgYnVmZmVycyAqLworCisgICAgZm9yIChidWYgPSBmaXJzdGJ1ZjsgYnVmICE9IE5VTEw7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorICAgIHsKKwlpZiAoYnVmLT5iX21sLm1sX21mcCAhPSBOVUxMICYmIGJ1Zi0+Yl9tbC5tbF9tZnAtPm1mX2ZuYW1lICE9IE5VTEwpCisJeworCSAgICBPVVRfU1RSKF8oIlZpbTogcHJlc2VydmluZyBmaWxlcy4uLlxuIikpOworCSAgICBzY3JlZW5fc3RhcnQoKTsJICAgIC8qIGRvbid0IGtub3cgd2hlcmUgY3Vyc29yIGlzIG5vdyAqLworCSAgICBvdXRfZmx1c2goKTsKKwkgICAgbWxfc3luY19hbGwoRkFMU0UsIEZBTFNFKTsJLyogcHJlc2VydmUgYWxsIHN3YXAgZmlsZXMgKi8KKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIG1sX2Nsb3NlX2FsbChGQUxTRSk7CSAgICAvKiBjbG9zZSBhbGwgbWVtZmlsZXMsIHdpdGhvdXQgZGVsZXRpbmcgKi8KKworICAgIE9VVF9TVFIoXygiVmltOiBGaW5pc2hlZC5cbiIpKTsKKworICAgIGdldG91dCgxKTsKK30KKworLyoKKyAqIHJldHVybiBUUlVFIGlmICJmbmFtZSIgZXhpc3RzLgorICovCisgICAgaW50Cit2aW1fZmV4aXN0cyhmbmFtZSkKKyAgICBjaGFyX3UgICpmbmFtZTsKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKworICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWZuYW1lLCAmc3QpKQorCXJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAqIENoZWNrIGZvciBDVFJMLUMgcHJlc3NlZCwgYnV0IG9ubHkgb25jZSBpbiBhIHdoaWxlLgorICogU2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB1aV9icmVha2NoZWNrKCkgZm9yIGZ1bmN0aW9ucyB0aGF0IGNoZWNrIGZvcgorICogZWFjaCBsaW5lIGluIHRoZSBmaWxlLiAgQ2FsbGluZyB1aV9icmVha2NoZWNrKCkgZWFjaCB0aW1lIHRha2VzIHRvbyBtdWNoCisgKiB0aW1lLCBiZWNhdXNlIGl0IGNhbiBiZSBhIHN5c3RlbSBjYWxsLgorICovCisKKyNpZm5kZWYgQlJFQUtDSEVDS19TS0lQCisjIGlmZGVmIEZFQVRfR1VJCQkgICAgLyogYXNzdW1lIHRoZSBHVUkgb25seSBydW5zIG9uIGZhc3QgY29tcHV0ZXJzICovCisjICBkZWZpbmUgQlJFQUtDSEVDS19TS0lQIDIwMAorIyBlbHNlCisjICBkZWZpbmUgQlJFQUtDSEVDS19TS0lQIDMyCisjIGVuZGlmCisjZW5kaWYKKworc3RhdGljIGludAlicmVha2NoZWNrX2NvdW50ID0gMDsKKworICAgIHZvaWQKK2xpbmVfYnJlYWtjaGVjaygpCit7CisgICAgaWYgKCsrYnJlYWtjaGVja19jb3VudCA+PSBCUkVBS0NIRUNLX1NLSVApCisgICAgeworCWJyZWFrY2hlY2tfY291bnQgPSAwOworCXVpX2JyZWFrY2hlY2soKTsKKyAgICB9Cit9CisKKy8qCisgKiBMaWtlIGxpbmVfYnJlYWtjaGVjaygpIGJ1dCBjaGVjayAxMCB0aW1lcyBsZXNzIG9mdGVuLgorICovCisgICAgdm9pZAorZmFzdF9icmVha2NoZWNrKCkKK3sKKyAgICBpZiAoKyticmVha2NoZWNrX2NvdW50ID49IEJSRUFLQ0hFQ0tfU0tJUCAqIDEwKQorICAgIHsKKwlicmVha2NoZWNrX2NvdW50ID0gMDsKKwl1aV9icmVha2NoZWNrKCk7CisgICAgfQorfQorCisvKgorICogRXhwYW5kIHdpbGRjYXJkcy4gIENhbGxzIGdlbl9leHBhbmRfd2lsZGNhcmRzKCkgYW5kIHJlbW92ZXMgZmlsZXMgbWF0Y2hpbmcKKyAqICd3aWxkaWdub3JlJy4KKyAqLworICAgIGludAorZXhwYW5kX3dpbGRjYXJkcyhudW1fcGF0LCBwYXQsIG51bV9maWxlLCBmaWxlLCBmbGFncykKKyAgICBpbnQJCSAgIG51bV9wYXQ7CS8qIG51bWJlciBvZiBpbnB1dCBwYXR0ZXJucyAqLworICAgIGNoYXJfdQkgKipwYXQ7CQkvKiBhcnJheSBvZiBpbnB1dCBwYXR0ZXJucyAqLworICAgIGludAkJICAqbnVtX2ZpbGU7CS8qIHJlc3VsdGluZyBudW1iZXIgb2YgZmlsZXMgKi8KKyAgICBjaGFyX3UJKioqZmlsZTsJLyogYXJyYXkgb2YgcmVzdWx0aW5nIGZpbGVzICovCisgICAgaW50CQkgICBmbGFnczsJLyogRVdfRElSLCBldGMuICovCit7CisgICAgaW50CQlyZXR2YWw7CisgICAgaW50CQlpLCBqOworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCW5vbl9zdWZfbWF0Y2g7CS8qIG51bWJlciB3aXRob3V0IG1hdGNoaW5nIHN1ZmZpeCAqLworCisgICAgcmV0dmFsID0gZ2VuX2V4cGFuZF93aWxkY2FyZHMobnVtX3BhdCwgcGF0LCBudW1fZmlsZSwgZmlsZSwgZmxhZ3MpOworCisgICAgLyogV2hlbiBrZWVwaW5nIGFsbCBtYXRjaGVzLCByZXR1cm4gaGVyZSAqLworICAgIGlmIChmbGFncyAmIEVXX0tFRVBBTEwpCisJcmV0dXJuIHJldHZhbDsKKworI2lmZGVmIEZFQVRfV0lMRElHTgorICAgIC8qCisgICAgICogUmVtb3ZlIG5hbWVzIHRoYXQgbWF0Y2ggJ3dpbGRpZ25vcmUnLgorICAgICAqLworICAgIGlmICgqcF93aWcpCisgICAgeworCWNoYXJfdQkqZmZuYW1lOworCisJLyogY2hlY2sgYWxsIGZpbGVzIGluICgqZmlsZSlbXSAqLworCWZvciAoaSA9IDA7IGkgPCAqbnVtX2ZpbGU7ICsraSkKKwl7CisJICAgIGZmbmFtZSA9IEZ1bGxOYW1lX3NhdmUoKCpmaWxlKVtpXSwgRkFMU0UpOworCSAgICBpZiAoZmZuYW1lID09IE5VTEwpCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCWJyZWFrOworIyBpZmRlZiBWTVMKKwkgICAgdm1zX3JlbW92ZV92ZXJzaW9uKGZmbmFtZSk7CisjIGVuZGlmCisJICAgIGlmIChtYXRjaF9maWxlX2xpc3QocF93aWcsICgqZmlsZSlbaV0sIGZmbmFtZSkpCisJICAgIHsKKwkJLyogcmVtb3ZlIHRoaXMgbWF0Y2hpbmcgZmlsZSBmcm9tIHRoZSBsaXN0ICovCisJCXZpbV9mcmVlKCgqZmlsZSlbaV0pOworCQlmb3IgKGogPSBpOyBqICsgMSA8ICpudW1fZmlsZTsgKytqKQorCQkgICAgKCpmaWxlKVtqXSA9ICgqZmlsZSlbaiArIDFdOworCQktLSpudW1fZmlsZTsKKwkJLS1pOworCSAgICB9CisJICAgIHZpbV9mcmVlKGZmbmFtZSk7CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBNb3ZlIHRoZSBuYW1lcyB3aGVyZSAnc3VmZml4ZXMnIG1hdGNoIHRvIHRoZSBlbmQuCisgICAgICovCisgICAgaWYgKCpudW1fZmlsZSA+IDEpCisgICAgeworCW5vbl9zdWZfbWF0Y2ggPSAwOworCWZvciAoaSA9IDA7IGkgPCAqbnVtX2ZpbGU7ICsraSkKKwl7CisJICAgIGlmICghbWF0Y2hfc3VmZml4KCgqZmlsZSlbaV0pKQorCSAgICB7CisJCS8qCisJCSAqIE1vdmUgdGhlIG5hbWUgd2l0aG91dCBtYXRjaGluZyBzdWZmaXggdG8gdGhlIGZyb250CisJCSAqIG9mIHRoZSBsaXN0LgorCQkgKi8KKwkJcCA9ICgqZmlsZSlbaV07CisJCWZvciAoaiA9IGk7IGogPiBub25fc3VmX21hdGNoOyAtLWopCisJCSAgICAoKmZpbGUpW2pdID0gKCpmaWxlKVtqIC0gMV07CisJCSgqZmlsZSlbbm9uX3N1Zl9tYXRjaCsrXSA9IHA7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmICJmbmFtZSIgbWF0Y2hlcyB3aXRoIGFuIGVudHJ5IGluICdzdWZmaXhlcycuCisgKi8KKyAgICBpbnQKK21hdGNoX3N1ZmZpeChmbmFtZSkKKyAgICBjaGFyX3UJKmZuYW1lOworeworICAgIGludAkJZm5hbWVsZW4sIHNldHN1ZmxlbjsKKyAgICBjaGFyX3UJKnNldHN1ZjsKKyNkZWZpbmUgTUFYU1VGTEVOIDMwCSAgICAvKiBtYXhpbXVtIGxlbmd0aCBvZiBhIGZpbGUgc3VmZml4ICovCisgICAgY2hhcl91CXN1Zl9idWZbTUFYU1VGTEVOXTsKKworICAgIGZuYW1lbGVuID0gKGludClTVFJMRU4oZm5hbWUpOworICAgIHNldHN1ZmxlbiA9IDA7CisgICAgZm9yIChzZXRzdWYgPSBwX3N1OyAqc2V0c3VmOyApCisgICAgeworCXNldHN1ZmxlbiA9IGNvcHlfb3B0aW9uX3BhcnQoJnNldHN1Ziwgc3VmX2J1ZiwgTUFYU1VGTEVOLCAiLiwiKTsKKwlpZiAoZm5hbWVsZW4gPj0gc2V0c3VmbGVuCisJCSYmIGZuYW1lbmNtcChzdWZfYnVmLCBmbmFtZSArIGZuYW1lbGVuIC0gc2V0c3VmbGVuLAorCQkJCQkgICAgICAoc2l6ZV90KXNldHN1ZmxlbikgPT0gMCkKKwkgICAgYnJlYWs7CisJc2V0c3VmbGVuID0gMDsKKyAgICB9CisgICAgcmV0dXJuIChzZXRzdWZsZW4gIT0gMCk7Cit9CisKKyNpZiAhZGVmaW5lZChOT19FWFBBTkRQQVRIKSB8fCBkZWZpbmVkKFBST1RPKQorCisjIGlmZGVmIFZJTV9CQUNLVElDSworc3RhdGljIGludCB2aW1fYmFja3RpY2sgX19BUkdTKChjaGFyX3UgKnApKTsKK3N0YXRpYyBpbnQgZXhwYW5kX2JhY2t0aWNrIF9fQVJHUygoZ2FycmF5X1QgKmdhcCwgY2hhcl91ICpwYXQsIGludCBmbGFncykpOworIyBlbmRpZgorCisjIGlmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoRkVBVF9HVUlfVzE2KSB8fCBkZWZpbmVkKFdJTjMyNjQpCisvKgorICogRmlsZSBuYW1lIGV4cGFuc2lvbiBjb2RlIGZvciBNUy1ET1MsIFdpbjE2IGFuZCBXaW4zMi4gIEl0J3MgaGVyZSBiZWNhdXNlCisgKiBpdCdzIHNoYXJlZCBiZXR3ZWVuIHRoZXNlIHN5c3RlbXMuCisgKi8KKyMgaWYgZGVmaW5lZChESkdQUCkgfHwgZGVmaW5lZChQUk9UTykKKyMgIGRlZmluZSBfY2RlY2wJICAgIC8qIERKR1BQIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisjIGVsc2UKKyMgIGlmZGVmIF9fQk9STEFORENfXworIyAgIGRlZmluZSBfY2RlY2wgX1JUTEVOVFJZRgorIyAgZW5kaWYKKyMgZW5kaWYKKworLyoKKyAqIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIHFzb3J0IGluIGRvc19leHBhbmRwYXRoKCkKKyAqLworICAgIHN0YXRpYyBpbnQgX2NkZWNsCitwc3RyY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisgICAgcmV0dXJuIChwYXRoY21wKCooY2hhciAqKilhLCAqKGNoYXIgKiopYikpOworfQorCisjIGlmbmRlZiBXSU4zMjY0CisgICAgc3RhdGljIHZvaWQKK25hbWVsb3djcHkoCisgICAgY2hhcl91ICpkLAorICAgIGNoYXJfdSAqcykKK3sKKyMgIGlmZGVmIERKR1BQCisgICAgaWYgKFVTRV9MT05HX0ZOQU1FKQkgICAgLyogZG9uJ3QgbG93ZXIgY2FzZSBvbiBXaW5kb3dzIDk1L05UIHN5c3RlbXMgKi8KKwl3aGlsZSAoKnMpCisJICAgICpkKysgPSAqcysrOworICAgIGVsc2UKKyMgIGVuZGlmCisJd2hpbGUgKCpzKQorCSAgICAqZCsrID0gVE9MT1dFUl9MT0MoKnMrKyk7CisgICAgKmQgPSBOVUw7Cit9CisjIGVuZGlmCisKKy8qCisgKiBSZWN1cnNpdmVseSBidWlsZCB1cCBhIGxpc3Qgb2YgZmlsZXMgaW4gImdhcCIgbWF0Y2hpbmcgdGhlIGZpcnN0IHdpbGRjYXJkCisgKiBpbiBgcGF0aCcuICBDYWxsZWQgYnkgZXhwYW5kX3dpbGRjYXJkcygpLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3VuZC4KKyAqICJwYXRoIiBoYXMgYmFja3NsYXNoZXMgYmVmb3JlIGNoYXJzIHRoYXQgYXJlIG5vdCB0byBiZSBleHBhbmRlZCwgc3RhcnRpbmcKKyAqIGF0ICJwYXRoW3dpbGRvZmZdIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK2Rvc19leHBhbmRwYXRoKAorICAgIGdhcnJheV9UCSpnYXAsCisgICAgY2hhcl91CSpwYXRoLAorICAgIGludAkJd2lsZG9mZiwKKyAgICBpbnQJCWZsYWdzKQkJLyogRVdfKiBmbGFncyAqLworeworICAgIGNoYXJfdQkJKmJ1ZjsKKyAgICBjaGFyX3UJCSpwYXRoX2VuZDsKKyAgICBjaGFyX3UJCSpwLCAqcywgKmU7CisgICAgaW50CQkJc3RhcnRfbGVuID0gZ2FwLT5nYV9sZW47CisgICAgaW50CQkJb2s7CisjaWZkZWYgV0lOMzI2NAorICAgIFdJTjMyX0ZJTkRfREFUQQlmYjsKKyAgICBIQU5ETEUJCWhGaW5kID0gKEhBTkRMRSkwOworIyBpZmRlZiBGRUFUX01CWVRFCisgICAgV0lOMzJfRklORF9EQVRBVyAgICB3ZmI7CisgICAgV0NIQVIJCSp3biA9IE5VTEw7CS8qIFVDUy0yIG5hbWUsIE5VTEwgd2hlbiBub3QgdXNlZC4gKi8KKyMgZW5kaWYKKyNlbHNlCisgICAgc3RydWN0IGZmYmxrCWZiOworI2VuZGlmCisgICAgaW50CQkJbWF0Y2hlczsKKyAgICBpbnQJCQlzdGFydHNfd2l0aF9kb3Q7CisgICAgaW50CQkJbGVuOworICAgIGNoYXJfdQkJKnBhdDsKKyAgICByZWdtYXRjaF9UCQlyZWdtYXRjaDsKKyAgICBjaGFyX3UJCSptYXRjaG5hbWU7CisKKyAgICAvKiBtYWtlIHJvb20gZm9yIGZpbGUgbmFtZSAqLworICAgIGJ1ZiA9IGFsbG9jKCh1bnNpZ25lZCBpbnQpU1RSTEVOKHBhdGgpICsgQkFTRU5BTUVMRU4gKyA1KTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisJcmV0dXJuIDA7CisKKyAgICAvKgorICAgICAqIEZpbmQgdGhlIGZpcnN0IHBhcnQgaW4gdGhlIHBhdGggbmFtZSB0aGF0IGNvbnRhaW5zIGEgd2lsZGNhcmQgb3IgYSB+MS4KKyAgICAgKiBDb3B5IGl0IGludG8gYnVmLCBpbmNsdWRpbmcgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXJzLgorICAgICAqLworICAgIHAgPSBidWY7CisgICAgcyA9IGJ1ZjsKKyAgICBlID0gTlVMTDsKKyAgICBwYXRoX2VuZCA9IHBhdGg7CisgICAgd2hpbGUgKCpwYXRoX2VuZCAhPSBOVUwpCisgICAgeworCS8qIE1heSBpZ25vcmUgYSB3aWxkY2FyZCB0aGF0IGhhcyBhIGJhY2tzbGFzaCBiZWZvcmUgaXQ7IGl0IHdpbGwKKwkgKiBiZSByZW1vdmVkIGJ5IHJlbV9iYWNrc2xhc2goKSBvciBmaWxlX3BhdF90b19yZWdfcGF0KCkgYmVsb3cuICovCisJaWYgKHBhdGhfZW5kID49IHBhdGggKyB3aWxkb2ZmICYmIHJlbV9iYWNrc2xhc2gocGF0aF9lbmQpKQorCSAgICAqcCsrID0gKnBhdGhfZW5kKys7CisJZWxzZSBpZiAoKnBhdGhfZW5kID09ICdcXCcgfHwgKnBhdGhfZW5kID09ICc6JyB8fCAqcGF0aF9lbmQgPT0gJy8nKQorCXsKKwkgICAgaWYgKGUgIT0gTlVMTCkKKwkJYnJlYWs7CisJICAgIHMgPSBwICsgMTsKKwl9CisJZWxzZSBpZiAocGF0aF9lbmQgPj0gcGF0aCArIHdpbGRvZmYKKwkJCSAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikiKj9bfiIsICpwYXRoX2VuZCkgIT0gTlVMTCkKKwkgICAgZSA9IHA7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBsZW4gPSAoKm1iX3B0cjJsZW5fY2hlY2spKHBhdGhfZW5kKTsKKwkgICAgU1RSTkNQWShwLCBwYXRoX2VuZCwgbGVuKTsKKwkgICAgcCArPSBsZW47CisJICAgIHBhdGhfZW5kICs9IGxlbjsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgICpwKysgPSAqcGF0aF9lbmQrKzsKKyAgICB9CisgICAgZSA9IHA7CisgICAgKmUgPSBOVUw7CisKKyAgICAvKiBub3cgd2UgaGF2ZSBvbmUgd2lsZGNhcmQgY29tcG9uZW50IGJldHdlZW4gcyBhbmQgZSAqLworICAgIC8qIFJlbW92ZSBiYWNrc2xhc2hlcyBiZXR3ZWVuICJ3aWxkb2ZmIiBhbmQgdGhlIHN0YXJ0IG9mIHRoZSB3aWxkY2FyZAorICAgICAqIGNvbXBvbmVudC4gKi8KKyAgICBmb3IgKHAgPSBidWYgKyB3aWxkb2ZmOyBwIDwgczsgKytwKQorCWlmIChyZW1fYmFja3NsYXNoKHApKQorCXsKKwkgICAgU1RSQ1BZKHAsIHAgKyAxKTsKKwkgICAgLS1lOworCSAgICAtLXM7CisJfQorCisgICAgc3RhcnRzX3dpdGhfZG90ID0gKCpzID09ICcuJyk7CisgICAgcGF0ID0gZmlsZV9wYXRfdG9fcmVnX3BhdChzLCBlLCBOVUxMLCBGQUxTRSk7CisgICAgaWYgKHBhdCA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShidWYpOworCXJldHVybiAwOworICAgIH0KKworICAgIC8qIGNvbXBpbGUgdGhlIHJlZ2V4cCBpbnRvIGEgcHJvZ3JhbSAqLworICAgIHJlZ21hdGNoLnJtX2ljID0gVFJVRTsJCS8qIEFsd2F5cyBpZ25vcmUgY2FzZSAqLworICAgIHJlZ21hdGNoLnJlZ3Byb2cgPSB2aW1fcmVnY29tcChwYXQsIFJFX01BR0lDKTsKKyAgICB2aW1fZnJlZShwYXQpOworCisgICAgaWYgKHJlZ21hdGNoLnJlZ3Byb2cgPT0gTlVMTCkKKyAgICB7CisJdmltX2ZyZWUoYnVmKTsKKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiByZW1lbWJlciB0aGUgcGF0dGVybiBvciBmaWxlIG5hbWUgYmVpbmcgbG9va2VkIGZvciAqLworICAgIG1hdGNobmFtZSA9IHZpbV9zdHJzYXZlKHMpOworCisgICAgLyogU2NhbiBhbGwgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSB3aXRoICJkaXIvICouKiIgKi8KKyAgICBTVFJDUFkocywgIiouKiIpOworI2lmZGVmIFdJTjMyNjQKKyMgaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChlbmNfY29kZXBhZ2UgPj0gMCAmJiAoaW50KUdldEFDUCgpICE9IGVuY19jb2RlcGFnZSkKKyAgICB7CisJLyogVGhlIGFjdGl2ZSBjb2RlcGFnZSBkaWZmZXJzIGZyb20gJ2VuY29kaW5nJy4gIEF0dGVtcHQgdXNpbmcgdGhlCisJICogd2lkZSBmdW5jdGlvbi4gIElmIGl0IGZhaWxzIGJlY2F1c2UgaXQgaXMgbm90IGltcGxlbWVudGVkIGZhbGwgYmFjaworCSAqIHRvIHRoZSBub24td2lkZSB2ZXJzaW9uIChmb3IgV2luZG93cyA5OCkgKi8KKwl3biA9IGVuY190b191Y3MyKGJ1ZiwgTlVMTCk7CisJaWYgKHduICE9IE5VTEwpCisJeworCSAgICBoRmluZCA9IEZpbmRGaXJzdEZpbGVXKHduLCAmd2ZiKTsKKwkgICAgaWYgKGhGaW5kID09IElOVkFMSURfSEFORExFX1ZBTFVFCisJCQkgICAgICAmJiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKKwkgICAgeworCQl2aW1fZnJlZSh3bik7CisJCXduID0gTlVMTDsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBpZiAod24gPT0gTlVMTCkKKyMgZW5kaWYKKwloRmluZCA9IEZpbmRGaXJzdEZpbGUoYnVmLCAmZmIpOworICAgIG9rID0gKGhGaW5kICE9IElOVkFMSURfSEFORExFX1ZBTFVFKTsKKyNlbHNlCisgICAgLyogSWYgd2UgYXJlIGV4cGFuZGluZyB3aWxkY2FyZHMgd2UgdHJ5IGJvdGggZmlsZXMgYW5kIGRpcmVjdG9yaWVzICovCisgICAgb2sgPSAoZmluZGZpcnN0KChjaGFyICopYnVmLCAmZmIsCisJCSgqcGF0aF9lbmQgIT0gTlVMIHx8IChmbGFncyAmIEVXX0RJUikpID8gRkFfRElSRUMgOiAwKSA9PSAwKTsKKyNlbmRpZgorCisgICAgd2hpbGUgKG9rKQorICAgIHsKKyNpZmRlZiBXSU4zMjY0CisjIGlmZGVmIEZFQVRfTUJZVEUKKwlpZiAod24gIT0gTlVMTCkKKwkgICAgcCA9IHVjczJfdG9fZW5jKHdmYi5jRmlsZU5hbWUsIE5VTEwpOyAgIC8qIHAgaXMgYWxsb2NhdGVkIGhlcmUgKi8KKwllbHNlCisjIGVuZGlmCisJICAgIHAgPSAoY2hhcl91ICopZmIuY0ZpbGVOYW1lOworI2Vsc2UKKwlwID0gKGNoYXJfdSAqKWZiLmZmX25hbWU7CisjZW5kaWYKKwkvKiBJZ25vcmUgZW50cmllcyBzdGFydGluZyB3aXRoIGEgZG90LCB1bmxlc3Mgd2hlbiBhc2tlZCBmb3IuICBBY2NlcHQKKwkgKiBhbGwgZW50cmllcyBmb3VuZCB3aXRoICJtYXRjaG5hbWUiLiAqLworCWlmICgocFswXSAhPSAnLicgfHwgc3RhcnRzX3dpdGhfZG90KQorCQkmJiAobWF0Y2huYW1lID09IE5VTEwKKwkJICAgIHx8IHZpbV9yZWdleGVjKCZyZWdtYXRjaCwgcCwgKGNvbG5yX1QpMCkpKQorCXsKKyNpZmRlZiBXSU4zMjY0CisJICAgIFNUUkNQWShzLCBwKTsKKyNlbHNlCisJICAgIG5hbWVsb3djcHkocywgcCk7CisjZW5kaWYKKwkgICAgbGVuID0gKGludClTVFJMRU4oYnVmKTsKKwkgICAgU1RSQ1BZKGJ1ZiArIGxlbiwgcGF0aF9lbmQpOworCSAgICBpZiAobWNoX2hhc19leHBfd2lsZGNhcmQocGF0aF9lbmQpKQorCSAgICB7CisJCS8qIG5lZWQgdG8gZXhwYW5kIGFub3RoZXIgY29tcG9uZW50IG9mIHRoZSBwYXRoICovCisJCS8qIHJlbW92ZSBiYWNrc2xhc2hlcyBmb3IgdGhlIHJlbWFpbmluZyBjb21wb25lbnRzIG9ubHkgKi8KKwkJKHZvaWQpZG9zX2V4cGFuZHBhdGgoZ2FwLCBidWYsIGxlbiArIDEsIGZsYWdzKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogbm8gbW9yZSB3aWxkY2FyZHMsIGNoZWNrIGlmIHRoZXJlIGlzIGEgbWF0Y2ggKi8KKwkJLyogcmVtb3ZlIGJhY2tzbGFzaGVzIGZvciB0aGUgcmVtYWluaW5nIGNvbXBvbmVudHMgb25seSAqLworCQlpZiAoKnBhdGhfZW5kICE9IDApCisJCSAgICBiYWNrc2xhc2hfaGFsdmUoYnVmICsgbGVuICsgMSk7CisJCWlmIChtY2hfZ2V0cGVybShidWYpID49IDApCS8qIGFkZCBleGlzdGluZyBmaWxlICovCisJCSAgICBhZGRmaWxlKGdhcCwgYnVmLCBmbGFncyk7CisJICAgIH0KKwl9CisKKyNpZmRlZiBXSU4zMjY0CisjIGlmZGVmIEZFQVRfTUJZVEUKKwlpZiAod24gIT0gTlVMTCkKKwl7CisJICAgIHZpbV9mcmVlKHApOworCSAgICBvayA9IEZpbmROZXh0RmlsZVcoaEZpbmQsICZ3ZmIpOworCX0KKwllbHNlCisjIGVuZGlmCisJICAgIG9rID0gRmluZE5leHRGaWxlKGhGaW5kLCAmZmIpOworI2Vsc2UKKwlvayA9IChmaW5kbmV4dCgmZmIpID09IDApOworI2VuZGlmCisKKwkvKiBJZiBubyBtb3JlIG1hdGNoZXMgYW5kIG5vIG1hdGNoIHdhcyB1c2VkLCB0cnkgZXhwYW5kaW5nIHRoZSBuYW1lCisJICogaXRzZWxmLiAgRmluZHMgdGhlIGxvbmcgbmFtZSBvZiBhIHNob3J0IGZpbGVuYW1lLiAqLworCWlmICghb2sgJiYgbWF0Y2huYW1lICE9IE5VTEwgJiYgZ2FwLT5nYV9sZW4gPT0gc3RhcnRfbGVuKQorCXsKKwkgICAgU1RSQ1BZKHMsIG1hdGNobmFtZSk7CisjaWZkZWYgV0lOMzI2NAorCSAgICBGaW5kQ2xvc2UoaEZpbmQpOworIyBpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmICh3biAhPSBOVUxMKQorCSAgICB7CisJCXZpbV9mcmVlKHduKTsKKwkJd24gPSBlbmNfdG9fdWNzMihidWYsIE5VTEwpOworCQlpZiAod24gIT0gTlVMTCkKKwkJICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcod24sICZ3ZmIpOworCSAgICB9CisJICAgIGlmICh3biA9PSBOVUxMKQorIyBlbmRpZgorCQloRmluZCA9IEZpbmRGaXJzdEZpbGUoYnVmLCAmZmIpOworCSAgICBvayA9IChoRmluZCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSk7CisjZWxzZQorCSAgICBvayA9IChmaW5kZmlyc3QoKGNoYXIgKilidWYsICZmYiwKKwkJICgqcGF0aF9lbmQgIT0gTlVMIHx8IChmbGFncyAmIEVXX0RJUikpID8gRkFfRElSRUMgOiAwKSA9PSAwKTsKKyNlbmRpZgorCSAgICB2aW1fZnJlZShtYXRjaG5hbWUpOworCSAgICBtYXRjaG5hbWUgPSBOVUxMOworCX0KKyAgICB9CisKKyNpZmRlZiBXSU4zMjY0CisgICAgRmluZENsb3NlKGhGaW5kKTsKKyMgaWZkZWYgRkVBVF9NQllURQorICAgIHZpbV9mcmVlKHduKTsKKyMgZW5kaWYKKyNlbmRpZgorICAgIHZpbV9mcmVlKGJ1Zik7CisgICAgdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7CisgICAgdmltX2ZyZWUobWF0Y2huYW1lKTsKKworICAgIG1hdGNoZXMgPSBnYXAtPmdhX2xlbiAtIHN0YXJ0X2xlbjsKKyAgICBpZiAobWF0Y2hlcyA+IDApCisJcXNvcnQoKChjaGFyX3UgKiopZ2FwLT5nYV9kYXRhKSArIHN0YXJ0X2xlbiwgKHNpemVfdCltYXRjaGVzLAorCQkJCQkJICAgc2l6ZW9mKGNoYXJfdSAqKSwgcHN0cmNtcCk7CisgICAgcmV0dXJuIG1hdGNoZXM7Cit9CisKKyAgICBpbnQKK21jaF9leHBhbmRwYXRoKAorICAgIGdhcnJheV9UCSpnYXAsCisgICAgY2hhcl91CSpwYXRoLAorICAgIGludAkJZmxhZ3MpCQkvKiBFV18qIGZsYWdzICovCit7CisgICAgcmV0dXJuIGRvc19leHBhbmRwYXRoKGdhcCwgcGF0aCwgMCwgZmxhZ3MpOworfQorIyBlbmRpZiAvKiBNU0RPUyB8fCBGRUFUX0dVSV9XMTYgfHwgV0lOMzI2NCAqLworCisvKgorICogR2VuZXJpYyB3aWxkY2FyZCBleHBhbnNpb24gY29kZS4KKyAqCisgKiBDaGFyYWN0ZXJzIGluICJwYXQiIHRoYXQgc2hvdWxkIG5vdCBiZSBleHBhbmRlZCBtdXN0IGJlIHByZWNlZGVkIHdpdGggYQorICogYmFja3NsYXNoLiBFLmcuLCAiL3BhdGhcIHdpdGhcIHNwYWNlcy9teVwqc3RhcioiCisgKgorICogUmV0dXJuIEZBSUwgd2hlbiBubyBzaW5nbGUgZmlsZSB3YXMgZm91bmQuICBJbiB0aGlzIGNhc2UgIm51bV9maWxlIiBpcyBub3QKKyAqIHNldCwgYW5kICJmaWxlIiBtYXkgY29udGFpbiBhbiBlcnJvciBtZXNzYWdlLgorICogUmV0dXJuIE9LIHdoZW4gc29tZSBmaWxlcyBmb3VuZC4gICJudW1fZmlsZSIgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YKKyAqIG1hdGNoZXMsICJmaWxlIiB0byB0aGUgYXJyYXkgb2YgbWF0Y2hlcy4gIENhbGwgRnJlZVdpbGQoKSBsYXRlci4KKyAqLworICAgIGludAorZ2VuX2V4cGFuZF93aWxkY2FyZHMobnVtX3BhdCwgcGF0LCBudW1fZmlsZSwgZmlsZSwgZmxhZ3MpCisgICAgaW50CQludW1fcGF0OwkvKiBudW1iZXIgb2YgaW5wdXQgcGF0dGVybnMgKi8KKyAgICBjaGFyX3UJKipwYXQ7CQkvKiBhcnJheSBvZiBpbnB1dCBwYXR0ZXJucyAqLworICAgIGludAkJKm51bV9maWxlOwkvKiByZXN1bHRpbmcgbnVtYmVyIG9mIGZpbGVzICovCisgICAgY2hhcl91CSoqKmZpbGU7CS8qIGFycmF5IG9mIHJlc3VsdGluZyBmaWxlcyAqLworICAgIGludAkJZmxhZ3M7CQkvKiBFV18qIGZsYWdzICovCit7CisgICAgaW50CQkJaTsKKyAgICBnYXJyYXlfVAkJZ2E7CisgICAgY2hhcl91CQkqcDsKKyAgICBzdGF0aWMgaW50CQlyZWN1cnNpdmUgPSBGQUxTRTsKKyAgICBpbnQJCQlhZGRfcGF0OworCisgICAgLyoKKyAgICAgKiBleHBhbmRfZW52KCkgaXMgY2FsbGVkIHRvIGV4cGFuZCB0aGluZ3MgbGlrZSAifnVzZXIiLiAgSWYgdGhpcyBmYWlscywKKyAgICAgKiBpdCBjYWxscyBFeHBhbmRPbmUoKSwgd2hpY2ggYnJpbmdzIHVzIGJhY2sgaGVyZS4gIEluIHRoaXMgY2FzZSwgYWx3YXlzCisgICAgICogY2FsbCB0aGUgbWFjaGluZSBzcGVjaWZpYyBleHBhbnNpb24gZnVuY3Rpb24sIGlmIHBvc3NpYmxlLiAgT3RoZXJ3aXNlLAorICAgICAqIHJldHVybiBGQUlMLgorICAgICAqLworICAgIGlmIChyZWN1cnNpdmUpCisjaWZkZWYgU1BFQ0lBTF9XSUxEQ0hBUgorCXJldHVybiBtY2hfZXhwYW5kX3dpbGRjYXJkcyhudW1fcGF0LCBwYXQsIG51bV9maWxlLCBmaWxlLCBmbGFncyk7CisjZWxzZQorCXJldHVybiBGQUlMOworI2VuZGlmCisKKyNpZmRlZiBTUEVDSUFMX1dJTERDSEFSCisgICAgLyoKKyAgICAgKiBJZiB0aGVyZSBhcmUgYW55IHNwZWNpYWwgd2lsZGNhcmQgY2hhcmFjdGVycyB3aGljaCB3ZSBjYW5ub3QgaGFuZGxlCisgICAgICogaGVyZSwgY2FsbCBtYWNoaW5lIHNwZWNpZmljIGZ1bmN0aW9uIGZvciBhbGwgdGhlIGV4cGFuc2lvbi4gIFRoaXMKKyAgICAgKiBhdm9pZHMgc3RhcnRpbmcgdGhlIHNoZWxsIGZvciBlYWNoIGFyZ3VtZW50IHNlcGFyYXRlbHkuCisgICAgICogRm9yIGA9ZXhwcmAgZG8gdXNlIHRoZSBpbnRlcm5hbCBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BhdDsgaSsrKQorICAgIHsKKwlpZiAodmltX3N0cnBicmsocGF0W2ldLCAoY2hhcl91ICopU1BFQ0lBTF9XSUxEQ0hBUikgIT0gTlVMTAorIyBpZmRlZiBWSU1fQkFDS1RJQ0sKKwkJJiYgISh2aW1fYmFja3RpY2socGF0W2ldKSAmJiBwYXRbaV1bMV0gPT0gJz0nKQorIyBlbmRpZgorCSAgICkKKwkgICAgcmV0dXJuIG1jaF9leHBhbmRfd2lsZGNhcmRzKG51bV9wYXQsIHBhdCwgbnVtX2ZpbGUsIGZpbGUsIGZsYWdzKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJlY3Vyc2l2ZSA9IFRSVUU7CisKKyAgICAvKgorICAgICAqIFRoZSBtYXRjaGluZyBmaWxlIG5hbWVzIGFyZSBzdG9yZWQgaW4gYSBncm93YXJyYXkuICBJbml0IGl0IGVtcHR5LgorICAgICAqLworICAgIGdhX2luaXQyKCZnYSwgKGludClzaXplb2YoY2hhcl91ICopLCAzMCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BhdDsgKytpKQorICAgIHsKKwlhZGRfcGF0ID0gLTE7CisJcCA9IHBhdFtpXTsKKworI2lmZGVmIFZJTV9CQUNLVElDSworCWlmICh2aW1fYmFja3RpY2socCkpCisJICAgIGFkZF9wYXQgPSBleHBhbmRfYmFja3RpY2soJmdhLCBwLCBmbGFncyk7CisJZWxzZQorI2VuZGlmCisJeworCSAgICAvKgorCSAgICAgKiBGaXJzdCBleHBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzLCAifi8iIGFuZCAifnVzZXIvIi4KKwkgICAgICovCisJICAgIGlmICh2aW1fc3RycGJyayhwLCAoY2hhcl91ICopIiR+IikgIT0gTlVMTCkKKwkgICAgeworCQlwID0gZXhwYW5kX2Vudl9zYXZlKHApOworCQlpZiAocCA9PSBOVUxMKQorCQkgICAgcCA9IHBhdFtpXTsKKyNpZmRlZiBVTklYCisJCS8qCisJCSAqIE9uIFVuaXgsIGlmIGV4cGFuZF9lbnYoKSBjYW4ndCBleHBhbmQgYW4gZW52aXJvbm1lbnQKKwkJICogdmFyaWFibGUsIHVzZSB0aGUgc2hlbGwgdG8gZG8gdGhhdC4gIERpc2NhcmQgcHJldmlvdXNseQorCQkgKiBmb3VuZCBmaWxlIG5hbWVzIGFuZCBzdGFydCBhbGwgb3ZlciBhZ2Fpbi4KKwkJICovCisJCWVsc2UgaWYgKHZpbV9zdHJwYnJrKHAsIChjaGFyX3UgKikiJH4iKSAhPSBOVUxMKQorCQl7CisJCSAgICB2aW1fZnJlZShwKTsKKwkJICAgIGdhX2NsZWFyKCZnYSk7CisJCSAgICBpID0gbWNoX2V4cGFuZF93aWxkY2FyZHMobnVtX3BhdCwgcGF0LCBudW1fZmlsZSwgZmlsZSwKKwkJCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJICAgIHJlY3Vyc2l2ZSA9IEZBTFNFOworCQkgICAgcmV0dXJuIGk7CisJCX0KKyNlbmRpZgorCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogSWYgdGhlcmUgYXJlIHdpbGRjYXJkczogRXhwYW5kIGZpbGUgbmFtZXMgYW5kIGFkZCBlYWNoIG1hdGNoIHRvCisJICAgICAqIHRoZSBsaXN0LiAgSWYgdGhlcmUgaXMgbm8gbWF0Y2gsIGFuZCBFV19OT1RGT1VORCBpcyBnaXZlbiwgYWRkCisJICAgICAqIHRoZSBwYXR0ZXJuLgorCSAgICAgKiBJZiB0aGVyZSBhcmUgbm8gd2lsZGNhcmRzOiBBZGQgdGhlIGZpbGUgbmFtZSBpZiBpdCBleGlzdHMgb3IKKwkgICAgICogd2hlbiBFV19OT1RGT1VORCBpcyBnaXZlbi4KKwkgICAgICovCisJICAgIGlmIChtY2hfaGFzX2V4cF93aWxkY2FyZChwKSkKKwkJYWRkX3BhdCA9IG1jaF9leHBhbmRwYXRoKCZnYSwgcCwgZmxhZ3MpOworCX0KKworCWlmIChhZGRfcGF0ID09IC0xIHx8IChhZGRfcGF0ID09IDAgJiYgKGZsYWdzICYgRVdfTk9URk9VTkQpKSkKKwl7CisJICAgIGNoYXJfdQkqdCA9IGJhY2tzbGFzaF9oYWx2ZV9zYXZlKHApOworCisjaWYgZGVmaW5lZChNQUNPU19DTEFTU0lDKQorCSAgICBzbGFzaF90b19jb2xvbih0KTsKKyNlbmRpZgorCSAgICAvKiBXaGVuIEVXX05PVEZPVU5EIGlzIHVzZWQsIGFsd2F5cyBhZGQgZmlsZXMgYW5kIGRpcnMuICBNYWtlcworCSAgICAgKiAidmltIGM6LyIgd29yay4gKi8KKwkgICAgaWYgKGZsYWdzICYgRVdfTk9URk9VTkQpCisJCWFkZGZpbGUoJmdhLCB0LCBmbGFncyB8IEVXX0RJUiB8IEVXX0ZJTEUpOworCSAgICBlbHNlIGlmIChtY2hfZ2V0cGVybSh0KSA+PSAwKQorCQlhZGRmaWxlKCZnYSwgdCwgZmxhZ3MpOworCSAgICB2aW1fZnJlZSh0KTsKKwl9CisKKwlpZiAocCAhPSBwYXRbaV0pCisJICAgIHZpbV9mcmVlKHApOworICAgIH0KKworICAgICpudW1fZmlsZSA9IGdhLmdhX2xlbjsKKyAgICAqZmlsZSA9IChnYS5nYV9kYXRhICE9IE5VTEwpID8gKGNoYXJfdSAqKilnYS5nYV9kYXRhIDogKGNoYXJfdSAqKikiIjsKKworICAgIHJlY3Vyc2l2ZSA9IEZBTFNFOworCisgICAgcmV0dXJuIChnYS5nYV9kYXRhICE9IE5VTEwpID8gT0sgOiBGQUlMOworfQorCisjIGlmZGVmIFZJTV9CQUNLVElDSworCisvKgorICogUmV0dXJuIFRSVUUgaWYgd2UgY2FuIGV4cGFuZCB0aGlzIGJhY2t0aWNrIHRoaW5nIGhlcmUuCisgKi8KKyAgICBzdGF0aWMgaW50Cit2aW1fYmFja3RpY2socCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgcmV0dXJuICgqcCA9PSAnYCcgJiYgKihwICsgMSkgIT0gTlVMICYmICoocCArIFNUUkxFTihwKSAtIDEpID09ICdgJyk7Cit9CisKKy8qCisgKiBFeHBhbmQgYW4gaXRlbSBpbiBgYmFja3RpY2tzYCBieSBleGVjdXRpbmcgaXQgYXMgYSBjb21tYW5kLgorICogQ3VycmVudGx5IG9ubHkgd29ya3Mgd2hlbiBwYXRbXSBzdGFydHMgYW5kIGVuZHMgd2l0aCBhIGAuCisgKiBSZXR1cm5zIG51bWJlciBvZiBmaWxlIG5hbWVzIGZvdW5kLgorICovCisgICAgc3RhdGljIGludAorZXhwYW5kX2JhY2t0aWNrKGdhcCwgcGF0LCBmbGFncykKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGNoYXJfdQkqcGF0OworICAgIGludAkJZmxhZ3M7CS8qIEVXXyogZmxhZ3MgKi8KK3sKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSpjbWQ7CisgICAgY2hhcl91CSpidWZmZXI7CisgICAgaW50CQljbnQgPSAwOworICAgIGludAkJaTsKKworICAgIC8qIENyZWF0ZSB0aGUgY29tbWFuZDogbG9wIG9mZiB0aGUgYmFja3RpY2tzLiAqLworICAgIGNtZCA9IHZpbV9zdHJuc2F2ZShwYXQgKyAxLCAoaW50KVNUUkxFTihwYXQpIC0gMik7CisgICAgaWYgKGNtZCA9PSBOVUxMKQorCXJldHVybiAwOworCisjaWZkZWYgRkVBVF9FVkFMCisgICAgaWYgKCpjbWQgPT0gJz0nKQkgICAgLyogYD17ZXhwcn1gOiBFeHBhbmQgZXhwcmVzc2lvbiAqLworCWJ1ZmZlciA9IGV2YWxfdG9fc3RyaW5nKGNtZCArIDEsICZwKTsKKyAgICBlbHNlCisjZW5kaWYKKwlidWZmZXIgPSBnZXRfY21kX291dHB1dChjbWQsIChmbGFncyAmIEVXX1NJTEVOVCkgPyBTSEVMTF9TSUxFTlQgOiAwKTsKKyAgICB2aW1fZnJlZShjbWQpOworICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKwlyZXR1cm4gMDsKKworICAgIGNtZCA9IGJ1ZmZlcjsKKyAgICB3aGlsZSAoKmNtZCAhPSBOVUwpCisgICAgeworCWNtZCA9IHNraXB3aGl0ZShjbWQpOwkJLyogc2tpcCBvdmVyIHdoaXRlIHNwYWNlICovCisJcCA9IGNtZDsKKwl3aGlsZSAoKnAgIT0gTlVMICYmICpwICE9ICdccicgJiYgKnAgIT0gJ1xuJykgLyogc2tpcCBvdmVyIGVudHJ5ICovCisJICAgICsrcDsKKwkvKiBhZGQgYW4gZW50cnkgaWYgaXQgaXMgbm90IGVtcHR5ICovCisJaWYgKHAgPiBjbWQpCisJeworCSAgICBpID0gKnA7CisJICAgICpwID0gTlVMOworCSAgICBhZGRmaWxlKGdhcCwgY21kLCBmbGFncyk7CisJICAgICpwID0gaTsKKwkgICAgKytjbnQ7CisJfQorCWNtZCA9IHA7CisJd2hpbGUgKCpjbWQgIT0gTlVMICYmICgqY21kID09ICdccicgfHwgKmNtZCA9PSAnXG4nKSkKKwkgICAgKytjbWQ7CisgICAgfQorCisgICAgdmltX2ZyZWUoYnVmZmVyKTsKKyAgICByZXR1cm4gY250OworfQorIyBlbmRpZiAvKiBWSU1fQkFDS1RJQ0sgKi8KKworLyoKKyAqIEFkZCBhIGZpbGUgdG8gYSBmaWxlIGxpc3QuICBBY2NlcHRlZCBmbGFnczoKKyAqIEVXX0RJUglhZGQgZGlyZWN0b3JpZXMKKyAqIEVXX0ZJTEUJYWRkIGZpbGVzCisgKiBFV19OT1RGT1VORAlhZGQgZXZlbiB3aGVuIGl0IGRvZXNuJ3QgZXhpc3QKKyAqIEVXX0FERFNMQVNICWFkZCBzbGFzaCBhZnRlciBkaXJlY3RvcnkgbmFtZQorICovCisgICAgdm9pZAorYWRkZmlsZShnYXAsIGYsIGZsYWdzKQorICAgIGdhcnJheV9UCSpnYXA7CisgICAgY2hhcl91CSpmOwkvKiBmaWxlbmFtZSAqLworICAgIGludAkJZmxhZ3M7Cit7CisgICAgY2hhcl91CSpwOworICAgIGludAkJaXNkaXI7CisKKyAgICAvKiBpZiB0aGUgZmlsZS9kaXIgZG9lc24ndCBleGlzdCwgbWF5IG5vdCBhZGQgaXQgKi8KKyAgICBpZiAoIShmbGFncyAmIEVXX05PVEZPVU5EKSAmJiBtY2hfZ2V0cGVybShmKSA8IDApCisJcmV0dXJuOworCisjaWZkZWYgRk5BTUVfSUxMRUdBTAorICAgIC8qIGlmIHRoZSBmaWxlL2RpciBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMsIGRvbid0IGFkZCBpdCAqLworICAgIGlmICh2aW1fc3RycGJyayhmLCAoY2hhcl91ICopRk5BTUVfSUxMRUdBTCkgIT0gTlVMTCkKKwlyZXR1cm47CisjZW5kaWYKKworICAgIGlzZGlyID0gbWNoX2lzZGlyKGYpOworICAgIGlmICgoaXNkaXIgJiYgIShmbGFncyAmIEVXX0RJUikpIHx8ICghaXNkaXIgJiYgIShmbGFncyAmIEVXX0ZJTEUpKSkKKwlyZXR1cm47CisKKyAgICAvKiBNYWtlIHJvb20gZm9yIGFub3RoZXIgaXRlbSBpbiB0aGUgZmlsZSBsaXN0LiAqLworICAgIGlmIChnYV9ncm93KGdhcCwgMSkgPT0gRkFJTCkKKwlyZXR1cm47CisKKyAgICBwID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4oZikgKyAxICsgaXNkaXIpKTsKKyAgICBpZiAocCA9PSBOVUxMKQorCXJldHVybjsKKworICAgIFNUUkNQWShwLCBmKTsKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKyAgICBzbGFzaF9hZGp1c3QocCk7CisjZW5kaWYKKyAgICAvKgorICAgICAqIEFwcGVuZCBhIHNsYXNoIG9yIGJhY2tzbGFzaCBhZnRlciBkaXJlY3RvcnkgbmFtZXMgaWYgbm9uZSBpcyBwcmVzZW50LgorICAgICAqLworI2lmbmRlZiBET05UX0FERF9QQVRIU0VQX1RPX0RJUgorICAgIGlmIChpc2RpciAmJiAoZmxhZ3MgJiBFV19BRERTTEFTSCkpCisJYWRkX3BhdGhzZXAocCk7CisjZW5kaWYKKyAgICAoKGNoYXJfdSAqKilnYXAtPmdhX2RhdGEpW2dhcC0+Z2FfbGVuKytdID0gcDsKKyAgICAtLWdhcC0+Z2Ffcm9vbTsKK30KKyNlbmRpZiAvKiAhTk9fRVhQQU5EUEFUSCAqLworCisjaWYgZGVmaW5lZChWSU1fQkFDS1RJQ0spIHx8IGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorCisjaWZuZGVmIFNFRUtfU0VUCisjIGRlZmluZSBTRUVLX1NFVCAwCisjZW5kaWYKKyNpZm5kZWYgU0VFS19FTkQKKyMgZGVmaW5lIFNFRUtfRU5EIDIKKyNlbmRpZgorCisvKgorICogR2V0IHRoZSBzdGRvdXQgb2YgYW4gZXh0ZXJuYWwgY29tbWFuZC4KKyAqIFJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZywgb3IgTlVMTCBmb3IgZXJyb3IuCisgKi8KKyAgICBjaGFyX3UgKgorZ2V0X2NtZF9vdXRwdXQoY21kLCBmbGFncykKKyAgICBjaGFyX3UJKmNtZDsKKyAgICBpbnQJCWZsYWdzOwkJLyogY2FuIGJlIFNIRUxMX1NJTEVOVCAqLworeworICAgIGNoYXJfdQkqdGVtcG5hbWU7CisgICAgY2hhcl91CSpjb21tYW5kOworICAgIGNoYXJfdQkqYnVmZmVyID0gTlVMTDsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWkgPSAwOworICAgIEZJTEUJKmZkOworCisgICAgaWYgKGNoZWNrX3Jlc3RyaWN0ZWQoKSB8fCBjaGVja19zZWN1cmUoKSkKKwlyZXR1cm4gTlVMTDsKKworICAgIC8qIGdldCBhIG5hbWUgZm9yIHRoZSB0ZW1wIGZpbGUgKi8KKyAgICBpZiAoKHRlbXBuYW1lID0gdmltX3RlbXBuYW1lKCdvJykpID09IE5VTEwpCisgICAgeworCUVNU0coXyhlX25vdG1wKSk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogQWRkIHRoZSByZWRpcmVjdGlvbiBzdHVmZiAqLworICAgIGNvbW1hbmQgPSBtYWtlX2ZpbHRlcl9jbWQoY21kLCBOVUxMLCB0ZW1wbmFtZSk7CisgICAgaWYgKGNvbW1hbmQgPT0gTlVMTCkKKwlnb3RvIGRvbmU7CisKKyAgICAvKgorICAgICAqIENhbGwgdGhlIHNoZWxsIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKGVycm9ycyBhcmUgaWdub3JlZCkuCisgICAgICogRG9uJ3QgY2hlY2sgdGltZXN0YW1wcyBoZXJlLgorICAgICAqLworICAgICsrbm9fY2hlY2tfdGltZXN0YW1wczsKKyAgICBjYWxsX3NoZWxsKGNvbW1hbmQsIFNIRUxMX0RPT1VUIHwgU0hFTExfRVhQQU5EIHwgZmxhZ3MpOworICAgIC0tbm9fY2hlY2tfdGltZXN0YW1wczsKKworICAgIHZpbV9mcmVlKGNvbW1hbmQpOworCisgICAgLyoKKyAgICAgKiByZWFkIHRoZSBuYW1lcyBmcm9tIHRoZSBmaWxlIGludG8gbWVtb3J5CisgICAgICovCisjIGlmZGVmIFZNUworICAgIC8qIGNyZWF0ZWQgdGVtcG9yYXJ5IGZpbGUgaXMgbm90IGFsbHdheXMgcmVhZGFibGUgYXMgYmluYXJ5ICovCisgICAgZmQgPSBtY2hfZm9wZW4oKGNoYXIgKil0ZW1wbmFtZSwgInIiKTsKKyMgZWxzZQorICAgIGZkID0gbWNoX2ZvcGVuKChjaGFyICopdGVtcG5hbWUsIFJFQURCSU4pOworIyBlbmRpZgorCisgICAgaWYgKGZkID09IE5VTEwpCisgICAgeworCUVNU0cyKF8oZV9ub3RvcGVuKSwgdGVtcG5hbWUpOworCWdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBmc2VlayhmZCwgMEwsIFNFRUtfRU5EKTsKKyAgICBsZW4gPSBmdGVsbChmZCk7CQkgICAgLyogZ2V0IHNpemUgb2YgdGVtcCBmaWxlICovCisgICAgZnNlZWsoZmQsIDBMLCBTRUVLX1NFVCk7CisKKyAgICBidWZmZXIgPSBhbGxvYyhsZW4gKyAxKTsKKyAgICBpZiAoYnVmZmVyICE9IE5VTEwpCisJaSA9IChpbnQpZnJlYWQoKGNoYXIgKilidWZmZXIsIChzaXplX3QpMSwgKHNpemVfdClsZW4sIGZkKTsKKyAgICBmY2xvc2UoZmQpOworICAgIG1jaF9yZW1vdmUodGVtcG5hbWUpOworICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKwlnb3RvIGRvbmU7CisjaWZkZWYgVk1TCisgICAgbGVuID0gaTsJLyogVk1TIGRvZXNuJ3QgZ2l2ZSB1cyB3aGF0IHdlIGFza2VkIGZvci4uLiAqLworI2VuZGlmCisgICAgaWYgKGkgIT0gbGVuKQorICAgIHsKKwlFTVNHMihfKGVfbm90cmVhZCksIHRlbXBuYW1lKTsKKwl2aW1fZnJlZShidWZmZXIpOworCWJ1ZmZlciA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKwlidWZmZXJbbGVuXSA9ICdcMCc7CS8qIG1ha2Ugc3VyZSB0aGUgYnVmZmVyIGlzIHRlcm1pbmF0ZWQgKi8KKworZG9uZToKKyAgICB2aW1fZnJlZSh0ZW1wbmFtZSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKyNlbmRpZgorCisvKgorICogRnJlZSB0aGUgbGlzdCBvZiBmaWxlcyByZXR1cm5lZCBieSBleHBhbmRfd2lsZGNhcmRzKCkgb3Igb3RoZXIgZXhwYW5zaW9uCisgKiBmdW5jdGlvbnMuCisgKi8KKyAgICB2b2lkCitGcmVlV2lsZChjb3VudCwgZmlsZXMpCisgICAgaW50CSAgICBjb3VudDsKKyAgICBjaGFyX3UgICoqZmlsZXM7Cit7CisgICAgaWYgKGZpbGVzID09IE5VTEwgfHwgY291bnQgPD0gMCkKKwlyZXR1cm47CisjaWYgZGVmaW5lZChfX0VNWF9fKSAmJiBkZWZpbmVkKF9fQUxXQVlTX0hBU19UUkFJTElOR19OVUxMX1BPSU5URVIpIC8qIFhYWCAqLworICAgIC8qCisgICAgICogSXMgdGhpcyBzdGlsbCBPSyBmb3Igd2hlbiBvdGhlciBmdW5jdGlvbnMgdGhhbiBleHBhbmRfd2lsZGNhcmRzKCkgaGF2ZQorICAgICAqIGJlZW4gdXNlZD8/PworICAgICAqLworICAgIF9mbmV4cGxvZGVmcmVlKChjaGFyICoqKWZpbGVzKTsKKyNlbHNlCisgICAgd2hpbGUgKGNvdW50LS0pCisJdmltX2ZyZWUoZmlsZXNbY291bnRdKTsKKyAgICB2aW1fZnJlZShmaWxlcyk7CisjZW5kaWYKK30KKworLyoKKyAqIHJldHVybiBUUlVFIHdoZW4gbmVlZCB0byBnbyB0byBJbnNlcnQgbW9kZSBiZWNhdXNlIG9mICdpbnNlcnRtb2RlJy4KKyAqIERvbid0IGRvIHRoaXMgd2hlbiBzdGlsbCBwcm9jZXNzaW5nIGEgY29tbWFuZCBvciBhIG1hcHBpbmcuCisgKiBEb24ndCBkbyB0aGlzIHdoZW4gaW5zaWRlIGEgIjpub3JtYWwiIGNvbW1hbmQuCisgKi8KKyAgICBpbnQKK2dvdG9faW0oKQoreworICAgIHJldHVybiAocF9pbSAmJiBzdHVmZl9lbXB0eSgpICYmIHR5cGVidWZfdHlwZWQoKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWlzYzIuYyBiL3NyYy9taXNjMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YzQ0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWlzYzIuYwpAQCAtMCwwICsxLDU1NTYgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIG1pc2MyLmM6IFZhcmlvdXMgZnVuY3Rpb25zLgorICovCisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgaW5jbHVkZSA8ZmNudGwuaD4JICAgIC8qIGZvciBjaGRpcigpICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9WSVJUVUFMRURJVCkgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBpbnQgY29sYWR2YW5jZTIgX19BUkdTKChwb3NfVCAqcG9zLCBpbnQgYWRkc3BhY2VzLCBpbnQgZmluZXR1bmUsIGNvbG5yX1Qgd2NvbCkpOworCisvKgorICogUmV0dXJuIFRSVUUgaWYgaW4gdGhlIGN1cnJlbnQgbW9kZSB3ZSBuZWVkIHRvIHVzZSB2aXJ0dWFsLgorICovCisgICAgaW50Cit2aXJ0dWFsX2FjdGl2ZSgpCit7CisgICAgLyogV2hpbGUgYW4gb3BlcmF0b3IgaXMgYmVpbmcgZXhlY3V0ZWQgd2UgcmV0dXJuICJ2aXJ0dWFsX29wIiwgYmVjYXVzZQorICAgICAqIFZJc3VhbF9hY3RpdmUgaGFzIGFscmVhZHkgYmVlbiByZXNldCwgdGh1cyB3ZSBjYW4ndCBjaGVjayBmb3IgImJsb2NrIgorICAgICAqIGJlaW5nIHVzZWQuICovCisgICAgaWYgKHZpcnR1YWxfb3AgIT0gTUFZQkUpCisJcmV0dXJuIHZpcnR1YWxfb3A7CisgICAgcmV0dXJuICh2ZV9mbGFncyA9PSBWRV9BTEwKKyMgaWZkZWYgRkVBVF9WSVNVQUwKKwkgICAgfHwgKCh2ZV9mbGFncyAmIFZFX0JMT0NLKSAmJiBWSXN1YWxfYWN0aXZlICYmIFZJc3VhbF9tb2RlID09IEN0cmxfVikKKyMgZW5kaWYKKwkgICAgfHwgKCh2ZV9mbGFncyAmIFZFX0lOU0VSVCkgJiYgKFN0YXRlICYgSU5TRVJUKSkpOworfQorCisvKgorICogR2V0IHRoZSBzY3JlZW4gcG9zaXRpb24gb2YgdGhlIGN1cnNvci4KKyAqLworICAgIGludAorZ2V0dmlzY29sKCkKK3sKKyAgICBjb2xucl9UCXg7CisKKyAgICBnZXR2dmNvbChjdXJ3aW4sICZjdXJ3aW4tPndfY3Vyc29yLCAmeCwgTlVMTCwgTlVMTCk7CisgICAgcmV0dXJuIChpbnQpeDsKK30KKworLyoKKyAqIEdldCB0aGUgc2NyZWVuIHBvc2l0aW9uIG9mIGNoYXJhY3RlciBjb2wgd2l0aCBhIGNvbGFkZCBpbiB0aGUgY3Vyc29yIGxpbmUuCisgKi8KKyAgICBpbnQKK2dldHZpc2NvbDIoY29sLCBjb2xhZGQpCisgICAgY29sbnJfVAljb2w7CisgICAgY29sbnJfVAljb2xhZGQ7Cit7CisgICAgY29sbnJfVAl4OworICAgIHBvc19UCXBvczsKKworICAgIHBvcy5sbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworICAgIHBvcy5jb2wgPSBjb2w7CisgICAgcG9zLmNvbGFkZCA9IGNvbGFkZDsKKyAgICBnZXR2dmNvbChjdXJ3aW4sICZwb3MsICZ4LCBOVUxMLCBOVUxMKTsKKyAgICByZXR1cm4gKGludCl4OworfQorCisvKgorICogR28gdG8gY29sdW1uICJ3Y29sIiwgYW5kIGFkZC9pbnNlcnQgd2hpdGUgc3BhY2UgYXMgbmVjY2Vzc2FyeSB0byBnZXQgdGhlCisgKiBjdXJzb3IgaW4gdGhhdCBjb2x1bW4uCisgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBzYXZlZCB0aGUgY3Vyc29yIGxpbmUgZm9yIHVuZG8hCisgKi8KKyAgICBpbnQKK2NvbGFkdmFuY2VfZm9yY2Uod2NvbCkKKyAgICBjb2xucl9UIHdjb2w7Cit7CisgICAgaW50IHJjID0gY29sYWR2YW5jZTIoJmN1cndpbi0+d19jdXJzb3IsIFRSVUUsIEZBTFNFLCB3Y29sKTsKKworICAgIGlmICh3Y29sID09IE1BWENPTCkKKwljdXJ3aW4tPndfdmFsaWQgJj0gflZBTElEX1ZJUlRDT0w7CisgICAgZWxzZQorICAgIHsKKwkvKiBWaXJ0Y29sIGlzIHZhbGlkICovCisJY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX1ZJUlRDT0w7CisJY3Vyd2luLT53X3ZpcnRjb2wgPSB3Y29sOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisjZW5kaWYKKworLyoKKyAqIFRyeSB0byBhZHZhbmNlIHRoZSBDdXJzb3IgdG8gdGhlIHNwZWNpZmllZCBzY3JlZW4gY29sdW1uLgorICogSWYgdmlydHVhbCBlZGl0aW5nOiBmaW5lIHR1bmUgdGhlIGN1cnNvciBwb3NpdGlvbi4KKyAqIE5vdGUgdGhhdCBhbGwgdmlydHVhbCBwb3NpdGlvbnMgb2ZmIHRoZSBlbmQgb2YgYSBsaW5lIHNob3VsZCBzaGFyZQorICogYSBjdXJ3aW4tPndfY3Vyc29yLmNvbCB2YWx1ZSAobi5iLiB0aGlzIGlzIGVxdWFsIHRvIFNUUkxFTihsaW5lKSksCisgKiBiZWdpbm5pbmcgYXQgY29sYWRkIDAuCisgKgorICogcmV0dXJuIE9LIGlmIGRlc2lyZWQgY29sdW1uIGlzIHJlYWNoZWQsIEZBSUwgaWYgbm90CisgKi8KKyAgICBpbnQKK2NvbGFkdmFuY2Uod2NvbCkKKyAgICBjb2xucl9UCXdjb2w7Cit7CisgICAgaW50IHJjID0gZ2V0dnBvcygmY3Vyd2luLT53X2N1cnNvciwgd2NvbCk7CisKKyAgICBpZiAod2NvbCA9PSBNQVhDT0wgfHwgcmMgPT0gRkFJTCkKKwljdXJ3aW4tPndfdmFsaWQgJj0gflZBTElEX1ZJUlRDT0w7CisgICAgZWxzZQorICAgIHsKKwkvKiBWaXJ0Y29sIGlzIHZhbGlkICovCisJY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX1ZJUlRDT0w7CisJY3Vyd2luLT53X3ZpcnRjb2wgPSB3Y29sOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBSZXR1cm4gaW4gInBvcyIgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IgYWR2YW5jZWQgdG8gc2NyZWVuIGNvbHVtbiAid2NvbCIuCisgKiByZXR1cm4gT0sgaWYgZGVzaXJlZCBjb2x1bW4gaXMgcmVhY2hlZCwgRkFJTCBpZiBub3QKKyAqLworICAgIGludAorZ2V0dnBvcyhwb3MsIHdjb2wpCisgICAgcG9zX1QgICAqcG9zOworICAgIGNvbG5yX1Qgd2NvbDsKK3sKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgcmV0dXJuIGNvbGFkdmFuY2UyKHBvcywgRkFMU0UsIHZpcnR1YWxfYWN0aXZlKCksIHdjb2wpOworfQorCisgICAgc3RhdGljIGludAorY29sYWR2YW5jZTIocG9zLCBhZGRzcGFjZXMsIGZpbmV0dW5lLCB3Y29sKQorICAgIHBvc19UCSpwb3M7CisgICAgaW50CQlhZGRzcGFjZXM7CS8qIGNoYW5nZSB0aGUgdGV4dCB0byBhY2hpZXZlIG91ciBnb2FsPyAqLworICAgIGludAkJZmluZXR1bmU7CS8qIGNoYW5nZSBjaGFyIG9mZnNldCBmb3IgdGhlIGV4Y2FjdCBjb2x1bW4gKi8KKyAgICBjb2xucl9UCXdjb2w7CQkvKiBjb2x1bW4gdG8gbW92ZSB0byAqLworeworI2VuZGlmCisgICAgaW50CQlpZHg7CisgICAgY2hhcl91CSpwdHI7CisgICAgY2hhcl91CSpsaW5lOworICAgIGNvbG5yX1QJY29sID0gMDsKKyAgICBpbnQJCWNzaXplID0gMDsKKyAgICBpbnQJCW9uZV9tb3JlOworI2lmZGVmIEZFQVRfTElORUJSRUFLCisgICAgaW50CQloZWFkID0gMDsKKyNlbmRpZgorCisgICAgb25lX21vcmUgPSAoU3RhdGUgJiBJTlNFUlQpIHx8IHJlc3RhcnRfZWRpdCAhPSBOVUwKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkJCQkgIHx8IChWSXN1YWxfYWN0aXZlICYmICpwX3NlbCAhPSAnbycpCisjZW5kaWYKKwkJCQkJICA7CisgICAgbGluZSA9IG1sX2dldF9jdXJsaW5lKCk7CisKKyAgICBpZiAod2NvbCA+PSBNQVhDT0wpCisgICAgeworCSAgICBpZHggPSAoaW50KVNUUkxFTihsaW5lKSAtIDEgKyBvbmVfbW9yZTsKKwkgICAgY29sID0gd2NvbDsKKworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkgICAgaWYgKChhZGRzcGFjZXMgfHwgZmluZXR1bmUpICYmICFWSXN1YWxfYWN0aXZlKQorCSAgICB7CisJCWN1cndpbi0+d19jdXJzd2FudCA9IGxpbmV0YWJzaXplKGxpbmUpICsgb25lX21vcmU7CisJCWlmIChjdXJ3aW4tPndfY3Vyc3dhbnQgPiAwKQorCQkgICAgLS1jdXJ3aW4tPndfY3Vyc3dhbnQ7CisJICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwlpbnQgd2lkdGggPSBXX1dJRFRIKGN1cndpbikgLSB3aW5fY29sX29mZihjdXJ3aW4pOworCisJaWYgKChhZGRzcGFjZXMgfHwgZmluZXR1bmUpCisJCSYmIGN1cndpbi0+d19wX3dyYXAKKyMgaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkJJiYgY3Vyd2luLT53X3dpZHRoICE9IDAKKyMgZW5kaWYKKwkJJiYgd2NvbCA+PSAoY29sbnJfVCl3aWR0aCkKKwl7CisJICAgIGNzaXplID0gbGluZXRhYnNpemUobGluZSk7CisJICAgIGlmIChjc2l6ZSA+IDApCisJCWNzaXplLS07CisKKwkgICAgaWYgKHdjb2wgLyB3aWR0aCA+IChjb2xucl9UKWNzaXplIC8gd2lkdGgpCisJICAgIHsKKwkJLyogSW4gY2FzZSBvZiBsaW5lIHdyYXBwaW5nIGRvbid0IG1vdmUgdGhlIGN1cnNvciBiZXlvbmQgdGhlCisJCSAqIHJpZ2h0IHNjcmVlbiBlZGdlLiAqLworCQl3Y29sID0gKGNzaXplIC8gd2lkdGggKyAxKSAqIHdpZHRoIC0gMTsKKwkgICAgfQorCX0KKyNlbmRpZgorCisJaWR4ID0gLTE7CisJcHRyID0gbGluZTsKKwl3aGlsZSAoY29sIDw9IHdjb2wgJiYgKnB0ciAhPSBOVUwpCisJeworCSAgICAvKiBDb3VudCBhIHRhYiBmb3Igd2hhdCBpdCdzIHdvcnRoIChpZiBsaXN0IG1vZGUgbm90IG9uKSAqLworI2lmZGVmIEZFQVRfTElORUJSRUFLCisJICAgIGNzaXplID0gd2luX2xicl9jaGFydGFic2l6ZShjdXJ3aW4sIHB0ciwgY29sLCAmaGVhZCk7CisjIGlmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJcHRyICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocHRyKTsKKwkgICAgZWxzZQorIyBlbmRpZgorCQkrK3B0cjsKKyNlbHNlCisJICAgIGNzaXplID0gbGJyX2NoYXJ0YWJzaXplX2FkdigmcHRyLCBjb2wpOworI2VuZGlmCisJICAgIGNvbCArPSBjc2l6ZTsKKwl9CisJaWR4ID0gKGludCkocHRyIC0gbGluZSk7CisJLyoKKwkgKiBIYW5kbGUgYWxsIHRoZSBzcGVjaWFsIGNhc2VzLiAgVGhlIHZpcnR1YWxfYWN0aXZlKCkgY2hlY2sKKwkgKiBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgYSB2aXJ0dWFsIHBvc2l0aW9uIG9mZiB0aGUgZW5kIG9mCisJICogYSBsaW5lIGhhcyB0aGUgY29ycmVjdCBpbmRleGluZy4gIFRoZSBvbmVfbW9yZSBjb21wYXJpc29uCisJICogcmVwbGFjZXMgYW4gZXhwbGljaXQgYWRkIG9mIG9uZV9tb3JlIGxhdGVyIG9uLgorCSAqLworCWlmIChjb2wgPiB3Y29sIHx8ICghdmlydHVhbF9hY3RpdmUoKSAmJiBvbmVfbW9yZSA9PSAwKSkKKwl7CisJICAgIGlkeCAtPSAxOworIyBpZmRlZiBGRUFUX0xJTkVCUkVBSworCSAgICAvKiBEb24ndCBjb3VudCB0aGUgY2hhcnMgZnJvbSAnc2hvd2JyZWFrJy4gKi8KKwkgICAgY3NpemUgLT0gaGVhZDsKKyMgZW5kaWYKKwkgICAgY29sIC09IGNzaXplOworCX0KKworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwlpZiAodmlydHVhbF9hY3RpdmUoKQorCQkmJiBhZGRzcGFjZXMKKwkJJiYgKChjb2wgIT0gd2NvbCAmJiBjb2wgIT0gd2NvbCArIDEpIHx8IGNzaXplID4gMSkpCisJeworCSAgICAvKiAndmlydHVhbGVkaXQnIGlzIHNldDogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3Y29sIGFuZCBjb2wgaXMKKwkgICAgICogZmlsbGVkIHdpdGggc3BhY2VzLiAqLworCisJICAgIGlmIChsaW5lW2lkeF0gPT0gTlVMKQorCSAgICB7CisJCS8qIEFwcGVuZCBzcGFjZXMgKi8KKwkJaW50CWNvcnJlY3QgPSB3Y29sIC0gY29sOworCQljaGFyX3UJKm5ld2xpbmUgPSBhbGxvYyhpZHggKyBjb3JyZWN0ICsgMSk7CisJCWludAl0OworCisJCWlmIChuZXdsaW5lID09IE5VTEwpCisJCSAgICByZXR1cm4gRkFJTDsKKworCQlmb3IgKHQgPSAwOyB0IDwgaWR4OyArK3QpCisJCSAgICBuZXdsaW5lW3RdID0gbGluZVt0XTsKKworCQlmb3IgKHQgPSAwOyB0IDwgY29ycmVjdDsgKyt0KQorCQkgICAgbmV3bGluZVt0ICsgaWR4XSA9ICcgJzsKKworCQluZXdsaW5lW2lkeCArIGNvcnJlY3RdID0gTlVMOworCisJCW1sX3JlcGxhY2UocG9zLT5sbnVtLCBuZXdsaW5lLCBGQUxTRSk7CisJCWNoYW5nZWRfYnl0ZXMocG9zLT5sbnVtLCAoY29sbnJfVClpZHgpOworCQlpZHggKz0gY29ycmVjdDsKKwkJY29sID0gd2NvbDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogQnJlYWsgYSB0YWIgKi8KKwkJaW50CWxpbmVsZW4gPSAoaW50KVNUUkxFTihsaW5lKTsKKwkJaW50CWNvcnJlY3QgPSB3Y29sIC0gY29sIC0gY3NpemUgKyAxOyAvKiBuZWdhdGl2ZSEhICovCisJCWNoYXJfdQkqbmV3bGluZSA9IGFsbG9jKGxpbmVsZW4gKyBjc2l6ZSk7CisJCWludAl0LCBzID0gMDsKKwkJaW50CXY7CisKKwkJLyoKKwkJICogYnJlYWsgYSB0YWIKKwkJICovCisJCWlmIChuZXdsaW5lID09IE5VTEwgfHwgLWNvcnJlY3QgPiBjc2l6ZSkKKwkJICAgIHJldHVybiBGQUlMOworCisJCWZvciAodCA9IDA7IHQgPCBsaW5lbGVuOyB0KyspCisJCXsKKwkJICAgIGlmICh0ICE9IGlkeCkKKwkJCW5ld2xpbmVbcysrXSA9IGxpbmVbdF07CisJCSAgICBlbHNlCisJCQlmb3IgKHYgPSAwOyB2IDwgY3NpemU7IHYrKykKKwkJCSAgICBuZXdsaW5lW3MrK10gPSAnICc7CisJCX0KKworCQluZXdsaW5lW2xpbmVsZW4gKyBjc2l6ZSAtIDFdID0gTlVMOworCisJCW1sX3JlcGxhY2UocG9zLT5sbnVtLCBuZXdsaW5lLCBGQUxTRSk7CisJCWNoYW5nZWRfYnl0ZXMocG9zLT5sbnVtLCBpZHgpOworCQlpZHggKz0gKGNzaXplIC0gMSArIGNvcnJlY3QpOworCQljb2wgKz0gY29ycmVjdDsKKwkgICAgfQorCX0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChpZHggPCAwKQorCXBvcy0+Y29sID0gMDsKKyAgICBlbHNlCisJcG9zLT5jb2wgPSBpZHg7CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgcG9zLT5jb2xhZGQgPSAwOworCisgICAgaWYgKGZpbmV0dW5lKQorICAgIHsKKwlpZiAod2NvbCA9PSBNQVhDT0wpCisJeworCSAgICAvKiBUaGUgd2lkdGggb2YgdGhlIGxhc3QgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2V0IGNvbGFkZC4gKi8KKwkgICAgaWYgKCFvbmVfbW9yZSkKKwkgICAgeworCQljb2xucl9UCSAgICBzY29sLCBlY29sOworCisJCWdldHZjb2woY3Vyd2luLCBwb3MsICZzY29sLCBOVUxMLCAmZWNvbCk7CisJCXBvcy0+Y29sYWRkID0gZWNvbCAtIHNjb2w7CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgaW50IGIgPSAoaW50KXdjb2wgLSAoaW50KWNvbDsKKworCSAgICAvKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdjb2wgYW5kIGNvbCBpcyB1c2VkIHRvIHNldCBjb2xhZGQuICovCisJICAgIGlmIChiID4gMCAmJiBiIDwgKE1BWENPTCAtIDIgKiBXX1dJRFRIKGN1cndpbikpKQorCQlwb3MtPmNvbGFkZCA9IGI7CisKKwkgICAgY29sICs9IGI7CisJfQorICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIHByZXZlbnQgY3Vyc29yIGZyb20gbW92aW5nIG9uIHRoZSB0cmFpbCBieXRlICovCisgICAgaWYgKGhhc19tYnl0ZSkKKwltYl9hZGp1c3RfY3Vyc29yKCk7CisjZW5kaWYKKworICAgIGlmIChjb2wgPCB3Y29sKQorCXJldHVybiBGQUlMOworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIGluYyhwKQorICoKKyAqIEluY3JlbWVudCB0aGUgbGluZSBwb2ludGVyICdwJyBjcm9zc2luZyBsaW5lIGJvdW5kYXJpZXMgYXMgbmVjZXNzYXJ5LgorICogUmV0dXJuIDEgd2hlbiBnb2luZyB0byB0aGUgbmV4dCBsaW5lLgorICogUmV0dXJuIDIgd2hlbiBtb3ZpbmcgZm9yd2FyZCBvbnRvIGEgTlVMIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUpLgorICogUmV0dXJuIC0xIHdoZW4gYXQgdGhlIGVuZCBvZiBmaWxlLgorICogUmV0dXJuIDAgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitpbmNfY3Vyc29yKCkKK3sKKyAgICByZXR1cm4gaW5jKCZjdXJ3aW4tPndfY3Vyc29yKTsKK30KKworICAgIGludAoraW5jKGxwKQorICAgIHBvc19UICAqbHA7Cit7CisgICAgY2hhcl91ICAqcCA9IG1sX2dldF9wb3MobHApOworCisgICAgaWYgKCpwICE9IE5VTCkJLyogc3RpbGwgd2l0aGluIGxpbmUsIG1vdmUgdG8gbmV4dCBjaGFyIChtYXkgYmUgTlVMKSAqLworICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIGludCBsID0gKCptYl9wdHIybGVuX2NoZWNrKShwKTsKKworCSAgICBscC0+Y29sICs9IGw7CisJICAgIHJldHVybiAoKHBbbF0gIT0gTlVMKSA/IDAgOiAyKTsKKwl9CisjZW5kaWYKKwlscC0+Y29sKys7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCWxwLT5jb2xhZGQgPSAwOworI2VuZGlmCisJcmV0dXJuICgocFsxXSAhPSBOVUwpID8gMCA6IDIpOworICAgIH0KKyAgICBpZiAobHAtPmxudW0gIT0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpICAgICAvKiB0aGVyZSBpcyBhIG5leHQgbGluZSAqLworICAgIHsKKwlscC0+Y29sID0gMDsKKwlscC0+bG51bSsrOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwlscC0+Y29sYWRkID0gMDsKKyNlbmRpZgorCXJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKKy8qCisgKiBpbmNsKGxwKTogc2FtZSBhcyBpbmMoKSwgYnV0IHNraXAgdGhlIE5VTCBhdCB0aGUgZW5kIG9mIG5vbi1lbXB0eSBsaW5lcworICovCisgICAgaW50CitpbmNsKGxwKQorICAgIHBvc19UICAgICpscDsKK3sKKyAgICBpbnQJICAgIHI7CisKKyAgICBpZiAoKHIgPSBpbmMobHApKSA+PSAxICYmIGxwLT5jb2wpCisJciA9IGluYyhscCk7CisgICAgcmV0dXJuIHI7Cit9CisKKy8qCisgKiBkZWMocCkKKyAqCisgKiBEZWNyZW1lbnQgdGhlIGxpbmUgcG9pbnRlciAncCcgY3Jvc3NpbmcgbGluZSBib3VuZGFyaWVzIGFzIG5lY2Vzc2FyeS4KKyAqIFJldHVybiAxIHdoZW4gY3Jvc3NpbmcgYSBsaW5lLCAtMSB3aGVuIGF0IHN0YXJ0IG9mIGZpbGUsIDAgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitkZWNfY3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZGVjKCZjdXJ3aW4tPndfY3Vyc29yKTsKK30KKworICAgIGludAorZGVjKGxwKQorICAgIHBvc19UICAqbHA7Cit7CisgICAgY2hhcl91CSpwOworCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorICAgIGxwLT5jb2xhZGQgPSAwOworI2VuZGlmCisgICAgaWYgKGxwLT5jb2wgPiAwKQkJLyogc3RpbGwgd2l0aGluIGxpbmUgKi8KKyAgICB7CisJbHAtPmNvbC0tOworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCXsKKwkgICAgcCA9IG1sX2dldChscC0+bG51bSk7CisJICAgIGxwLT5jb2wgLT0gKCptYl9oZWFkX29mZikocCwgcCArIGxwLT5jb2wpOworCX0KKyNlbmRpZgorCXJldHVybiAwOworICAgIH0KKyAgICBpZiAobHAtPmxudW0gPiAxKQkJLyogdGhlcmUgaXMgYSBwcmlvciBsaW5lICovCisgICAgeworCWxwLT5sbnVtLS07CisJcCA9IG1sX2dldChscC0+bG51bSk7CisJbHAtPmNvbCA9IChjb2xucl9UKVNUUkxFTihwKTsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgbHAtPmNvbCAtPSAoKm1iX2hlYWRfb2ZmKShwLCBwICsgbHAtPmNvbCk7CisjZW5kaWYKKwlyZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIC0xOwkJCS8qIGF0IHN0YXJ0IG9mIGZpbGUgKi8KK30KKworLyoKKyAqIGRlY2wobHApOiBzYW1lIGFzIGRlYygpLCBidXQgc2tpcCB0aGUgTlVMIGF0IHRoZSBlbmQgb2Ygbm9uLWVtcHR5IGxpbmVzCisgKi8KKyAgICBpbnQKK2RlY2wobHApCisgICAgcG9zX1QgICAgKmxwOworeworICAgIGludAkgICAgcjsKKworICAgIGlmICgociA9IGRlYyhscCkpID09IDEgJiYgbHAtPmNvbCkKKwlyID0gZGVjKGxwKTsKKyAgICByZXR1cm4gcjsKK30KKworLyoKKyAqIE1ha2Ugc3VyZSBjdXJ3aW4tPndfY3Vyc29yLmxudW0gaXMgdmFsaWQuCisgKi8KKyAgICB2b2lkCitjaGVja19jdXJzb3JfbG51bSgpCit7CisgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorICAgIHsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkvKiBJZiB0aGVyZSBpcyBhIGNsb3NlZCBmb2xkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIHB1dCB0aGUgY3Vyc29yIGluCisJICogaXRzIGZpcnN0IGxpbmUuICBPdGhlcndpc2UgaW4gdGhlIGxhc3QgbGluZS4gKi8KKwlpZiAoIWhhc0ZvbGRpbmcoY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQsCisJCQkJCQkmY3Vyd2luLT53X2N1cnNvci5sbnVtLCBOVUxMKSkKKyNlbmRpZgorCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKyAgICB9CisgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8PSAwKQorCWN1cndpbi0+d19jdXJzb3IubG51bSA9IDE7Cit9CisKKy8qCisgKiBNYWtlIHN1cmUgY3Vyd2luLT53X2N1cnNvci5jb2wgaXMgdmFsaWQuCisgKi8KKyAgICB2b2lkCitjaGVja19jdXJzb3JfY29sKCkKK3sKKyAgICBjb2xucl9UIGxlbjsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgY29sbnJfVCBvbGRjb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbCArIGN1cndpbi0+d19jdXJzb3IuY29sYWRkOworI2VuZGlmCisKKyAgICBsZW4gPSAoY29sbnJfVClTVFJMRU4obWxfZ2V0X2N1cmxpbmUoKSk7CisgICAgaWYgKGxlbiA9PSAwKQorCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKyAgICBlbHNlIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA+PSBsZW4pCisgICAgeworCS8qIEFsbG93IGN1cnNvciBwYXN0IGVuZC1vZi1saW5lIGluIEluc2VydCBtb2RlLCByZXN0YXJ0aW5nIEluc2VydAorCSAqIG1vZGUgb3Igd2hlbiBpbiBWaXN1YWwgbW9kZSBhbmQgJ3NlbGVjdGlvbicgaXNuJ3QgIm9sZCIgKi8KKwlpZiAoU3RhdGUgJiBJTlNFUlQgfHwgcmVzdGFydF9lZGl0CisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJfHwgKFZJc3VhbF9hY3RpdmUgJiYgKnBfc2VsICE9ICdvJykKKyNlbmRpZgorCQl8fCB2aXJ0dWFsX2FjdGl2ZSgpKQorCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGxlbjsKKwllbHNlCisJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gbGVuIC0gMTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgLyogSWYgdmlydHVhbCBlZGl0aW5nIGlzIG9uLCB3ZSBjYW4gbGVhdmUgdGhlIGN1cnNvciBvbiB0aGUgb2xkIHBvc2l0aW9uLAorICAgICAqIG9ubHkgd2UgbXVzdCBzZXQgaXQgdG8gdmlydHVhbC4gIEJ1dCBkb24ndCBkbyBpdCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICogbGluZS4gKi8KKyAgICBpZiAob2xkY29sID09IE1BWENPTCkKKwljdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisgICAgZWxzZSBpZiAodmVfZmxhZ3MgPT0gVkVfQUxMKQorCWN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gb2xkY29sIC0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisjZW5kaWYKK30KKworLyoKKyAqIG1ha2Ugc3VyZSBjdXJ3aW4tPndfY3Vyc29yIGluIG9uIGEgdmFsaWQgY2hhcmFjdGVyCisgKi8KKyAgICB2b2lkCitjaGVja19jdXJzb3IoKQoreworICAgIGNoZWNrX2N1cnNvcl9sbnVtKCk7CisgICAgY2hlY2tfY3Vyc29yX2NvbCgpOworfQorCisjaWYgZGVmaW5lZChGRUFUX1RFWFRPQkopIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogTWFrZSBzdXJlIGN1cndpbi0+d19jdXJzb3IgaXMgbm90IG9uIHRoZSBOVUwgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKyAqIEFsbG93IGl0IHdoZW4gaW4gVmlzdWFsIG1vZGUgYW5kICdzZWxlY3Rpb24nIGlzIG5vdCAib2xkIi4KKyAqLworICAgIHZvaWQKK2FkanVzdF9jdXJzb3JfY29sKCkKK3sKKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPiAwCisjIGlmZGVmIEZFQVRfVklTVUFMCisJICAgICYmICghVklzdWFsX2FjdGl2ZSB8fCAqcF9zZWwgPT0gJ28nKQorIyBlbmRpZgorCSAgICAmJiBnY2hhcl9jdXJzb3IoKSA9PSBOVUwpCisJLS1jdXJ3aW4tPndfY3Vyc29yLmNvbDsKK30KKyNlbmRpZgorCisvKgorICogV2hlbiBjdXJ3aW4tPndfbGVmdGNvbCBoYXMgY2hhbmdlZCwgYWRqdXN0IHRoZSBjdXJzb3IgcG9zaXRpb24uCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZC4KKyAqLworICAgIGludAorbGVmdGNvbF9jaGFuZ2VkKCkKK3sKKyAgICBsb25nCWxhc3Rjb2w7CisgICAgY29sbnJfVAlzLCBlOworICAgIGludAkJcmV0dmFsID0gRkFMU0U7CisKKyAgICBjaGFuZ2VkX2NsaW5lX2JlZl9jdXJzKCk7CisgICAgbGFzdGNvbCA9IGN1cndpbi0+d19sZWZ0Y29sICsgV19XSURUSChjdXJ3aW4pIC0gY3Vyd2luX2NvbF9vZmYoKSAtIDE7CisgICAgdmFsaWRhdGVfdmlydGNvbCgpOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgY3Vyc29yIGlzIHJpZ2h0IG9yIGxlZnQgb2YgdGhlIHNjcmVlbiwgbW92ZSBpdCB0byBsYXN0IG9yIGZpcnN0CisgICAgICogY2hhcmFjdGVyLgorICAgICAqLworICAgIGlmIChjdXJ3aW4tPndfdmlydGNvbCA+IChjb2xucl9UKShsYXN0Y29sIC0gcF9zaXNvKSkKKyAgICB7CisJcmV0dmFsID0gVFJVRTsKKwljb2xhZHZhbmNlKChjb2xucl9UKShsYXN0Y29sIC0gcF9zaXNvKSk7CisgICAgfQorICAgIGVsc2UgaWYgKGN1cndpbi0+d192aXJ0Y29sIDwgY3Vyd2luLT53X2xlZnRjb2wgKyBwX3Npc28pCisgICAgeworCXJldHZhbCA9IFRSVUU7CisJKHZvaWQpY29sYWR2YW5jZSgoY29sbnJfVCkoY3Vyd2luLT53X2xlZnRjb2wgKyBwX3Npc28pKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZSBzdGFydCBvZiB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgaXMgbm90IG9uIHRoZSBzY3JlZW4sCisgICAgICogYWR2YW5jZSB0aGUgY3Vyc29yIG9uZSBtb3JlIGNoYXIuICBJZiB0aGlzIGZhaWxzIChsYXN0IGNoYXIgb2YgdGhlCisgICAgICogbGluZSkgYWRqdXN0IHRoZSBzY3JvbGxpbmcuCisgICAgICovCisgICAgZ2V0dnZjb2woY3Vyd2luLCAmY3Vyd2luLT53X2N1cnNvciwgJnMsIE5VTEwsICZlKTsKKyAgICBpZiAoZSA+IChjb2xucl9UKWxhc3Rjb2wpCisgICAgeworCXJldHZhbCA9IFRSVUU7CisJY29sYWR2YW5jZShzIC0gMSk7CisgICAgfQorICAgIGVsc2UgaWYgKHMgPCBjdXJ3aW4tPndfbGVmdGNvbCkKKyAgICB7CisJcmV0dmFsID0gVFJVRTsKKwlpZiAoY29sYWR2YW5jZShlICsgMSkgPT0gRkFJTCkJLyogdGhlcmUgaXNuJ3QgYW5vdGhlciBjaGFyYWN0ZXIgKi8KKwl7CisJICAgIGN1cndpbi0+d19sZWZ0Y29sID0gczsJLyogYWRqdXN0IHdfbGVmdGNvbCBpbnN0ZWFkICovCisJICAgIGNoYW5nZWRfY2xpbmVfYmVmX2N1cnMoKTsKKwl9CisgICAgfQorCisgICAgaWYgKHJldHZhbCkKKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKyAgICByZWRyYXdfbGF0ZXIoTk9UX1ZBTElEKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaW91cyByb3V0aW5lcyBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIG1lbW9yeS4KKyAqLworCisjaWYgZGVmaW5lZChNRU1fUFJPRklMRSkgfHwgZGVmaW5lZChQUk9UTykKKworIyBkZWZpbmUgTUVNX1NJWkVTICA4MjAwCitzdGF0aWMgbG9uZ191IG1lbV9hbGxvY3NbTUVNX1NJWkVTXTsKK3N0YXRpYyBsb25nX3UgbWVtX2ZyZWVzW01FTV9TSVpFU107CitzdGF0aWMgbG9uZ191IG1lbV9hbGxvY2F0ZWQ7CitzdGF0aWMgbG9uZ191IG1lbV9mcmVlZDsKK3N0YXRpYyBsb25nX3UgbWVtX3BlYWs7CitzdGF0aWMgbG9uZ191IG51bV9hbGxvYzsKK3N0YXRpYyBsb25nX3UgbnVtX2ZyZWVkOworCitzdGF0aWMgdm9pZCBtZW1fcHJlX2FsbG9jX3MgX19BUkdTKChzaXplX3QgKnNpemVwKSk7CitzdGF0aWMgdm9pZCBtZW1fcHJlX2FsbG9jX2wgX19BUkdTKChsb25nX3UgKnNpemVwKSk7CitzdGF0aWMgdm9pZCBtZW1fcG9zdF9hbGxvYyBfX0FSR1MoKHZvaWQgKipwcCwgc2l6ZV90IHNpemUpKTsKK3N0YXRpYyB2b2lkIG1lbV9wcmVfZnJlZSBfX0FSR1MoKHZvaWQgKipwcCkpOworCisgICAgc3RhdGljIHZvaWQKK21lbV9wcmVfYWxsb2NfcyhzaXplcCkKKyAgICBzaXplX3QgKnNpemVwOworeworICAgICpzaXplcCArPSBzaXplb2Yoc2l6ZV90KTsKK30KKworICAgIHN0YXRpYyB2b2lkCittZW1fcHJlX2FsbG9jX2woc2l6ZXApCisgICAgbG9uZ191ICpzaXplcDsKK3sKKyAgICAqc2l6ZXAgKz0gc2l6ZW9mKHNpemVfdCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorbWVtX3Bvc3RfYWxsb2MocHAsIHNpemUpCisgICAgdm9pZCAqKnBwOworICAgIHNpemVfdCBzaXplOworeworICAgIGlmICgqcHAgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgc2l6ZSAtPSBzaXplb2Yoc2l6ZV90KTsKKyAgICAqKGxvbmdfdSAqKSpwcCA9IHNpemU7CisgICAgaWYgKHNpemUgPD0gTUVNX1NJWkVTLTEpCisJbWVtX2FsbG9jc1tzaXplLTFdKys7CisgICAgZWxzZQorCW1lbV9hbGxvY3NbTUVNX1NJWkVTLTFdKys7CisgICAgbWVtX2FsbG9jYXRlZCArPSBzaXplOworICAgIGlmIChtZW1fYWxsb2NhdGVkIC0gbWVtX2ZyZWVkID4gbWVtX3BlYWspCisJbWVtX3BlYWsgPSBtZW1fYWxsb2NhdGVkIC0gbWVtX2ZyZWVkOworICAgIG51bV9hbGxvYysrOworICAgICpwcCA9ICh2b2lkICopKChjaGFyICopKnBwICsgc2l6ZW9mKHNpemVfdCkpOworfQorCisgICAgc3RhdGljIHZvaWQKK21lbV9wcmVfZnJlZShwcCkKKyAgICB2b2lkICoqcHA7Cit7CisgICAgbG9uZ191IHNpemU7CisKKyAgICAqcHAgPSAodm9pZCAqKSgoY2hhciAqKSpwcCAtIHNpemVvZihzaXplX3QpKTsKKyAgICBzaXplID0gKihzaXplX3QgKikqcHA7CisgICAgaWYgKHNpemUgPD0gTUVNX1NJWkVTLTEpCisJbWVtX2ZyZWVzW3NpemUtMV0rKzsKKyAgICBlbHNlCisJbWVtX2ZyZWVzW01FTV9TSVpFUy0xXSsrOworICAgIG1lbV9mcmVlZCArPSBzaXplOworICAgIG51bV9mcmVlZCsrOworfQorCisvKgorICogY2FsbGVkIG9uIGV4aXQgdmlhIGF0ZXhpdCgpCisgKi8KKyAgICB2b2lkCit2aW1fbWVtX3Byb2ZpbGVfZHVtcCgpCit7CisgICAgaW50IGksIGo7CisKKyAgICBwcmludGYoIlxyXG4iKTsKKyAgICBqID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTUVNX1NJWkVTIC0gMTsgaSsrKQorICAgIHsKKwlpZiAobWVtX2FsbG9jc1tpXSB8fCBtZW1fZnJlZXNbaV0pCisJeworCSAgICBpZiAobWVtX2ZyZWVzW2ldID4gbWVtX2FsbG9jc1tpXSkKKwkJcHJpbnRmKCJcclxuJXMiLCBfKCJFUlJPUjogIikpOworCSAgICBwcmludGYoIlslNGQgLyAlNGx1LSUtNGx1XSAiLCBpICsgMSwgbWVtX2FsbG9jc1tpXSwgbWVtX2ZyZWVzW2ldKTsKKwkgICAgaisrOworCSAgICBpZiAoaiA+IDMpCisJICAgIHsKKwkJaiA9IDA7CisJCXByaW50ZigiXHJcbiIpOworCSAgICB9CisJfQorICAgIH0KKworICAgIGkgPSBNRU1fU0laRVMgLSAxOworICAgIGlmIChtZW1fYWxsb2NzW2ldKQorICAgIHsKKwlwcmludGYoIlxyXG4iKTsKKwlpZiAobWVtX2ZyZWVzW2ldID4gbWVtX2FsbG9jc1tpXSkKKwkgICAgcHJpbnRmKF8oIkVSUk9SOiAiKSk7CisJcHJpbnRmKCJbPiVkIC8gJTRsdS0lLTRsdV0iLCBpLCBtZW1fYWxsb2NzW2ldLCBtZW1fZnJlZXNbaV0pOworICAgIH0KKworICAgIHByaW50ZihfKCJcbltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iKSwKKwkgICAgbWVtX2FsbG9jYXRlZCwgbWVtX2ZyZWVkLCBtZW1fYWxsb2NhdGVkIC0gbWVtX2ZyZWVkLCBtZW1fcGVhayk7CisgICAgcHJpbnRmKF8oIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuXG4iKSwKKwkgICAgbnVtX2FsbG9jLCBudW1fZnJlZWQpOworfQorCisjZW5kaWYgLyogTUVNX1BST0ZJTEUgKi8KKworLyoKKyAqIFNvbWUgbWVtb3J5IGlzIHJlc2VydmVkIGZvciBlcnJvciBtZXNzYWdlcyBhbmQgZm9yIGJlaW5nIGFibGUgdG8KKyAqIGNhbGwgbWZfcmVsZWFzZV9hbGwoKSwgd2hpY2ggbmVlZHMgc29tZSBtZW1vcnkgZm9yIG1mX3RyYW5zX2FkZCgpLgorICovCisjaWYgZGVmaW5lZChNU0RPUykgJiYgIWRlZmluZWQoREpHUFApCisjIGRlZmluZSBTTUFMTF9NRU0KKyMgZGVmaW5lIEtFRVBfUk9PTSA4MTkyTAorI2Vsc2UKKyMgZGVmaW5lIEtFRVBfUk9PTSAoMiAqIDgxOTJMKQorI2VuZGlmCisKKy8qCisgKiBOb3RlOiBpZiB1bnNpbmdlZCBpcyAxNiBiaXRzIHdlIGNhbiBvbmx5IGFsbG9jYXRlIHVwIHRvIDY0SyB3aXRoIGFsbG9jKCkuCisgKiBVc2UgbGFsbG9jIGZvciBsYXJnZXIgYmxvY2tzLgorICovCisgICAgY2hhcl91ICoKK2FsbG9jKHNpemUpCisgICAgdW5zaWduZWQJICAgIHNpemU7Cit7CisgICAgcmV0dXJuIChsYWxsb2MoKGxvbmdfdSlzaXplLCBUUlVFKSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBtZW1vcnkgYW5kIHNldCBhbGwgYnl0ZXMgdG8gemVyby4KKyAqLworICAgIGNoYXJfdSAqCithbGxvY19jbGVhcihzaXplKQorICAgIHVuc2lnbmVkCSAgICBzaXplOworeworICAgIGNoYXJfdSAqcDsKKworICAgIHAgPSAobGFsbG9jKChsb25nX3Upc2l6ZSwgVFJVRSkpOworICAgIGlmIChwICE9IE5VTEwpCisJKHZvaWQpdmltX21lbXNldChwLCAwLCAoc2l6ZV90KXNpemUpOworICAgIHJldHVybiBwOworfQorCisvKgorICogYWxsb2MoKSB3aXRoIGNoZWNrIGZvciBtYXhpbXVtIGxpbmUgbGVuZ3RoCisgKi8KKyAgICBjaGFyX3UgKgorYWxsb2NfY2hlY2soc2l6ZSkKKyAgICB1bnNpZ25lZAkgICAgc2l6ZTsKK3sKKyNpZiAhZGVmaW5lZChVTklYKSAmJiAhZGVmaW5lZChfX0VNWF9fKQorICAgIGlmIChzaXplb2YoaW50KSA9PSAyICYmIHNpemUgPiAweDdmZmYpCisgICAgeworCS8qIERvbid0IGhpZGUgdGhpcyBtZXNzYWdlICovCisJZW1zZ19zaWxlbnQgPSAwOworCUVNU0coXygiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIpKTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gKGxhbGxvYygobG9uZ191KXNpemUsIFRSVUUpKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIG1lbW9yeSBsaWtlIGxhbGxvYygpIGFuZCBzZXQgYWxsIGJ5dGVzIHRvIHplcm8uCisgKi8KKyAgICBjaGFyX3UgKgorbGFsbG9jX2NsZWFyKHNpemUsIG1lc3NhZ2UpCisgICAgbG9uZ191CXNpemU7CisgICAgaW50CQltZXNzYWdlOworeworICAgIGNoYXJfdSAqcDsKKworICAgIHAgPSAobGFsbG9jKHNpemUsIG1lc3NhZ2UpKTsKKyAgICBpZiAocCAhPSBOVUxMKQorCSh2b2lkKXZpbV9tZW1zZXQocCwgMCwgKHNpemVfdClzaXplKTsKKyAgICByZXR1cm4gcDsKK30KKworLyoKKyAqIExvdyBsZXZlbCBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbi4KKyAqIFRoaXMgaXMgdXNlZCBvZnRlbiwgS0VFUCBJVCBGQVNUIQorICovCisgICAgY2hhcl91ICoKK2xhbGxvYyhzaXplLCBtZXNzYWdlKQorICAgIGxvbmdfdQlzaXplOworICAgIGludAkJbWVzc2FnZTsKK3sKKyAgICBjaGFyX3UJKnA7CQkgICAgLyogcG9pbnRlciB0byBuZXcgc3RvcmFnZSBzcGFjZSAqLworICAgIHN0YXRpYyBpbnQJcmVsZWFzaW5nID0gRkFMU0U7ICAvKiBkb24ndCBkbyBtZl9yZWxlYXNlX2FsbCgpIHJlY3Vyc2l2ZSAqLworICAgIGludAkJdHJ5X2FnYWluOworI2lmIGRlZmluZWQoSEFWRV9BVkFJTF9NRU0pICYmICFkZWZpbmVkKFNNQUxMX01FTSkKKyAgICBzdGF0aWMgbG9uZ191IGFsbG9jYXRlZCA9IDA7ICAgIC8qIGFsbG9jYXRlZCBzaW5jZSBsYXN0IGF2YWlsIGNoZWNrICovCisjZW5kaWYKKworICAgIC8qIFNhZmV0eSBjaGVjayBmb3IgYWxsb2NhdGluZyB6ZXJvIGJ5dGVzICovCisgICAgaWYgKHNpemUgPT0gMCkKKyAgICB7CisJLyogRG9uJ3QgaGlkZSB0aGlzIG1lc3NhZ2UgKi8KKwllbXNnX3NpbGVudCA9IDA7CisJRU1TR04oXygiRTM0MTogSW50ZXJuYWwgZXJyb3I6IGxhbGxvYyglbGQsICkiKSwgc2l6ZSk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisjaWZkZWYgTUVNX1BST0ZJTEUKKyAgICBtZW1fcHJlX2FsbG9jX2woJnNpemUpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1TRE9TKSAmJiAhZGVmaW5lZChESkdQUCkKKyAgICBpZiAoc2l6ZSA+PSAweGZmZjApCQkvKiBpbiBNU0RPUyB3ZSBjYW4ndCBkZWFsIHdpdGggPjY0SyBibG9ja3MgKi8KKwlwID0gTlVMTDsKKyAgICBlbHNlCisjZW5kaWYKKworICAgIC8qCisgICAgICogTG9vcCB3aGVuIG91dCBvZiBtZW1vcnk6IFRyeSB0byByZWxlYXNlIHNvbWUgbWVtZmlsZSBibG9ja3MgYW5kCisgICAgICogaWYgc29tZSBibG9ja3MgYXJlIHJlbGVhc2VkIGNhbGwgbWFsbG9jIGFnYWluLgorICAgICAqLworICAgIGZvciAoOzspCisgICAgeworCS8qCisJICogSGFuZGxlIHRocmVlIGtpbmQgb2Ygc3lzdGVtczoKKwkgKiAxLiBObyBjaGVjayBmb3IgYXZhaWxhYmxlIG1lbW9yeTogSnVzdCByZXR1cm4uCisJICogMi4gU2xvdyBjaGVjayBmb3IgYXZhaWxhYmxlIG1lbW9yeTogY2FsbCBtY2hfYXZhaWxfbWVtKCkgYWZ0ZXIKKwkgKiAgICBhbGxvY2F0aW5nIEtFRVBfUk9PTSBhbW91bnQgb2YgbWVtb3J5LgorCSAqIDMuIFN0cmljdCBjaGVjayBmb3IgYXZhaWxhYmxlIG1lbW9yeTogY2FsbCBtY2hfYXZhaWxfbWVtKCkKKwkgKi8KKwlpZiAoKHAgPSAoY2hhcl91ICopbWFsbG9jKChzaXplX3Qpc2l6ZSkpICE9IE5VTEwpCisJeworI2lmbmRlZiBIQVZFX0FWQUlMX01FTQorCSAgICAvKiAxLiBObyBjaGVjayBmb3IgYXZhaWxhYmxlIG1lbW9yeTogSnVzdCByZXR1cm4uICovCisJICAgIGdvdG8gdGhlZW5kOworI2Vsc2UKKyMgaWZuZGVmIFNNQUxMX01FTQorCSAgICAvKiAyLiBTbG93IGNoZWNrIGZvciBhdmFpbGFibGUgbWVtb3J5OiBjYWxsIG1jaF9hdmFpbF9tZW0oKSBhZnRlcgorCSAgICAgKiAgICBhbGxvY2F0aW5nIChLRUVQX1JPT00gLyAyKSBhbW91bnQgb2YgbWVtb3J5LiAqLworCSAgICBhbGxvY2F0ZWQgKz0gc2l6ZTsKKwkgICAgaWYgKGFsbG9jYXRlZCA8IEtFRVBfUk9PTSAvIDIpCisJCWdvdG8gdGhlZW5kOworCSAgICBhbGxvY2F0ZWQgPSAwOworIyBlbmRpZgorCSAgICAvKiAzLiBjaGVjayBmb3IgYXZhaWxhYmxlIG1lbW9yeTogY2FsbCBtY2hfYXZhaWxfbWVtKCkgKi8KKwkgICAgaWYgKG1jaF9hdmFpbF9tZW0oVFJVRSkgPCBLRUVQX1JPT00gJiYgIXJlbGVhc2luZykKKwkgICAgeworCQl2aW1fZnJlZSgoY2hhciAqKXApOwkvKiBTeXN0ZW0gaXMgbG93Li4uIG5vIGdvISAqLworCQlwID0gTlVMTDsKKwkgICAgfQorCSAgICBlbHNlCisJCWdvdG8gdGhlZW5kOworI2VuZGlmCisJfQorCS8qCisJICogUmVtZW1iZXIgdGhhdCBtZl9yZWxlYXNlX2FsbCgpIGlzIGJlaW5nIGNhbGxlZCB0byBhdm9pZCBhbiBlbmRsZXNzCisJICogbG9vcCwgYmVjYXVzZSBtZl9yZWxlYXNlX2FsbCgpIG1heSBjYWxsIGFsbG9jKCkgcmVjdXJzaXZlbHkuCisJICovCisJaWYgKHJlbGVhc2luZykKKwkgICAgYnJlYWs7CisJcmVsZWFzaW5nID0gVFJVRTsKKwl0cnlfYWdhaW4gPSBtZl9yZWxlYXNlX2FsbCgpOworCXJlbGVhc2luZyA9IEZBTFNFOworCWlmICghdHJ5X2FnYWluKQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSAmJiBwID09IE5VTEwpCisJZG9fb3V0b2ZtZW1fbXNnKHNpemUpOworCit0aGVlbmQ6CisjaWZkZWYgTUVNX1BST0ZJTEUKKyAgICBtZW1fcG9zdF9hbGxvYygodm9pZCAqKikmcCwgKHNpemVfdClzaXplKTsKKyNlbmRpZgorICAgIHJldHVybiBwOworfQorCisjaWYgZGVmaW5lZChNRU1fUFJPRklMRSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiByZWFsbG9jKCkgd2l0aCBtZW1vcnkgcHJvZmlsaW5nLgorICovCisgICAgdm9pZCAqCittZW1fcmVhbGxvYyhwdHIsIHNpemUpCisgICAgdm9pZCAqcHRyOworICAgIHNpemVfdCBzaXplOworeworICAgIHZvaWQgKnA7CisKKyAgICBtZW1fcHJlX2ZyZWUoJnB0cik7CisgICAgbWVtX3ByZV9hbGxvY19zKCZzaXplKTsKKworICAgIHAgPSByZWFsbG9jKHB0ciwgc2l6ZSk7CisKKyAgICBtZW1fcG9zdF9hbGxvYygmcCwgc2l6ZSk7CisKKyAgICByZXR1cm4gcDsKK30KKyNlbmRpZgorCisvKgorKiBBdm9pZCByZXBlYXRpbmcgdGhlIGVycm9yIG1lc3NhZ2UgbWFueSB0aW1lcyAodGhleSB0YWtlIDEgc2Vjb25kIGVhY2gpLgorKiBEaWRfb3V0b2ZtZW1fbXNnIGlzIHJlc2V0IHdoZW4gYSBjaGFyYWN0ZXIgaXMgcmVhZC4KKyovCisgICAgdm9pZAorZG9fb3V0b2ZtZW1fbXNnKHNpemUpCisgICAgbG9uZ191CXNpemU7Cit7CisgICAgaWYgKCFkaWRfb3V0b2ZtZW1fbXNnKQorICAgIHsKKwkvKiBEb24ndCBoaWRlIHRoaXMgbWVzc2FnZSAqLworCWVtc2dfc2lsZW50ID0gMDsKKwlFTVNHTihfKCJFMzQyOiBPdXQgb2YgbWVtb3J5ISAgKGFsbG9jYXRpbmcgJWx1IGJ5dGVzKSIpLCBzaXplKTsKKwlkaWRfb3V0b2ZtZW1fbXNnID0gVFJVRTsKKyAgICB9Cit9CisKKy8qCisgKiBjb3B5IGEgc3RyaW5nIGludG8gbmV3bHkgYWxsb2NhdGVkIG1lbW9yeQorICovCisgICAgY2hhcl91ICoKK3ZpbV9zdHJzYXZlKHN0cmluZykKKyAgICBjaGFyX3UJKnN0cmluZzsKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgdW5zaWduZWQJbGVuOworCisgICAgbGVuID0gKHVuc2lnbmVkKVNUUkxFTihzdHJpbmcpICsgMTsKKyAgICBwID0gYWxsb2MobGVuKTsKKyAgICBpZiAocCAhPSBOVUxMKQorCW1jaF9tZW1tb3ZlKHAsIHN0cmluZywgKHNpemVfdClsZW4pOworICAgIHJldHVybiBwOworfQorCisgICAgY2hhcl91ICoKK3ZpbV9zdHJuc2F2ZShzdHJpbmcsIGxlbikKKyAgICBjaGFyX3UJKnN0cmluZzsKKyAgICBpbnQJCWxlbjsKK3sKKyAgICBjaGFyX3UJKnA7CisKKyAgICBwID0gYWxsb2MoKHVuc2lnbmVkKShsZW4gKyAxKSk7CisgICAgaWYgKHAgIT0gTlVMTCkKKyAgICB7CisJU1RSTkNQWShwLCBzdHJpbmcsIGxlbik7CisJcFtsZW5dID0gTlVMOworICAgIH0KKyAgICByZXR1cm4gcDsKK30KKworI2lmIDAJLyogbm90IHVzZWQgKi8KKy8qCisgKiBsaWtlIHZpbV9zdHJuc2F2ZSgpLCBidXQgcmVtb3ZlIGJhY2tzbGFzaGVzIGZyb20gdGhlIHN0cmluZy4KKyAqLworICAgIGNoYXJfdSAqCit2aW1fc3RybnNhdmVfZXNjKHN0cmluZywgbGVuKQorICAgIGNoYXJfdQkqc3RyaW5nOworICAgIGludAkJbGVuOworeworICAgIGNoYXJfdSAqcDEsICpwMjsKKworICAgIHAxID0gYWxsb2MoKHVuc2lnbmVkKSAobGVuICsgMSkpOworICAgIGlmIChwMSAhPSBOVUxMKQorICAgIHsKKwlTVFJOQ1BZKHAxLCBzdHJpbmcsIGxlbik7CisJcDFbbGVuXSA9IE5VTDsKKwlmb3IgKHAyID0gcDE7ICpwMjsgKytwMikKKwkgICAgaWYgKCpwMiA9PSAnXFwnICYmICoocDIgKyAxKSAhPSBOVUwpCisJCVNUUkNQWShwMiwgcDIgKyAxKTsKKyAgICB9CisgICAgcmV0dXJuIHAxOworfQorI2VuZGlmCisKKy8qCisgKiBTYW1lIGFzIHZpbV9zdHJzYXZlKCksIGJ1dCBhbnkgY2hhcmFjdGVycyBmb3VuZCBpbiBlc2NfY2hhcnMgYXJlIHByZWNlZGVkCisgKiBieSBhIGJhY2tzbGFzaC4KKyAqLworICAgIGNoYXJfdSAqCit2aW1fc3Ryc2F2ZV9lc2NhcGVkKHN0cmluZywgZXNjX2NoYXJzKQorICAgIGNoYXJfdQkqc3RyaW5nOworICAgIGNoYXJfdQkqZXNjX2NoYXJzOworeworICAgIHJldHVybiB2aW1fc3Ryc2F2ZV9lc2NhcGVkX2V4dChzdHJpbmcsIGVzY19jaGFycywgRkFMU0UpOworfQorCisvKgorICogU2FtZSBhcyB2aW1fc3Ryc2F2ZV9lc2NhcGVkKCksIGJ1dCB3aGVuICJic2wiIGlzIFRSVUUgYWxzbyBlc2NhcGUKKyAqIGNoYXJhY3RlcnMgd2hlcmUgcmVtX2JhY2tzbGFzaCgpIHdvdWxkIHJlbW92ZSB0aGUgYmFja3NsYXNoLgorICovCisgICAgY2hhcl91ICoKK3ZpbV9zdHJzYXZlX2VzY2FwZWRfZXh0KHN0cmluZywgZXNjX2NoYXJzLCBic2wpCisgICAgY2hhcl91CSpzdHJpbmc7CisgICAgY2hhcl91CSplc2NfY2hhcnM7CisgICAgaW50CQlic2w7Cit7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqcDI7CisgICAgY2hhcl91CSplc2NhcGVkX3N0cmluZzsKKyAgICB1bnNpZ25lZAlsZW5ndGg7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJbDsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBGaXJzdCBjb3VudCB0aGUgbnVtYmVyIG9mIGJhY2tzbGFzaGVzIHJlcXVpcmVkLgorICAgICAqIFRoZW4gYWxsb2NhdGUgdGhlIG1lbW9yeSBhbmQgaW5zZXJ0IHRoZW0uCisgICAgICovCisgICAgbGVuZ3RoID0gMTsJCQkJLyogY291bnQgdGhlIHRyYWlsaW5nIE5VTCAqLworICAgIGZvciAocCA9IHN0cmluZzsgKnA7IHArKykKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUgJiYgKGwgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApKSA+IDEpCisJeworCSAgICBsZW5ndGggKz0gbDsJCS8qIGNvdW50IGEgbXVsdGlieXRlIGNoYXIgKi8KKwkgICAgcCArPSBsIC0gMTsKKwkgICAgY29udGludWU7CisJfQorI2VuZGlmCisJaWYgKHZpbV9zdHJjaHIoZXNjX2NoYXJzLCAqcCkgIT0gTlVMTCB8fCAoYnNsICYmIHJlbV9iYWNrc2xhc2gocCkpKQorCSAgICArK2xlbmd0aDsJCQkvKiBjb3VudCBhIGJhY2tzbGFzaCAqLworCSsrbGVuZ3RoOwkJCS8qIGNvdW50IGFuIG9yZGluYXJ5IGNoYXIgKi8KKyAgICB9CisgICAgZXNjYXBlZF9zdHJpbmcgPSBhbGxvYyhsZW5ndGgpOworICAgIGlmIChlc2NhcGVkX3N0cmluZyAhPSBOVUxMKQorICAgIHsKKwlwMiA9IGVzY2FwZWRfc3RyaW5nOworCWZvciAocCA9IHN0cmluZzsgKnA7IHArKykKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlICYmIChsID0gKCptYl9wdHIybGVuX2NoZWNrKShwKSkgPiAxKQorCSAgICB7CisJCW1jaF9tZW1tb3ZlKHAyLCBwLCAoc2l6ZV90KWwpOworCQlwMiArPSBsOworCQlwICs9IGwgLSAxOwkJLyogc2tpcCBtdWx0aWJ5dGUgY2hhciAgKi8KKwkJY29udGludWU7CisJICAgIH0KKyNlbmRpZgorCSAgICBpZiAodmltX3N0cmNocihlc2NfY2hhcnMsICpwKSAhPSBOVUxMIHx8IChic2wgJiYgcmVtX2JhY2tzbGFzaChwKSkpCisJCSpwMisrID0gJ1xcJzsKKwkgICAgKnAyKysgPSAqcDsKKwl9CisJKnAyID0gTlVMOworICAgIH0KKyAgICByZXR1cm4gZXNjYXBlZF9zdHJpbmc7Cit9CisKKy8qCisgKiBMaWtlIHZpbV9zdHJzYXZlKCksIGJ1dCBtYWtlIGFsbCBjaGFyYWN0ZXJzIHVwcGVyY2FzZS4KKyAqIFRoaXMgdXNlcyBBU0NJSSBsb3dlci10by11cHBlciBjYXNlIHRyYW5zbGF0aW9uLCBsYW5ndWFnZSBpbmRlcGVuZGVudC4KKyAqLworICAgIGNoYXJfdSAqCit2aW1fc3Ryc2F2ZV91cChzdHJpbmcpCisgICAgY2hhcl91CSpzdHJpbmc7Cit7CisgICAgY2hhcl91ICpwMTsKKworICAgIHAxID0gdmltX3N0cnNhdmUoc3RyaW5nKTsKKyAgICB2aW1fc3RydXAocDEpOworICAgIHJldHVybiBwMTsKK30KKworLyoKKyAqIExpa2UgdmltX3N0cm5zYXZlKCksIGJ1dCBtYWtlIGFsbCBjaGFyYWN0ZXJzIHVwcGVyY2FzZS4KKyAqIFRoaXMgdXNlcyBBU0NJSSBsb3dlci10by11cHBlciBjYXNlIHRyYW5zbGF0aW9uLCBsYW5ndWFnZSBpbmRlcGVuZGVudC4KKyAqLworICAgIGNoYXJfdSAqCit2aW1fc3RybnNhdmVfdXAoc3RyaW5nLCBsZW4pCisgICAgY2hhcl91CSpzdHJpbmc7CisgICAgaW50CQlsZW47Cit7CisgICAgY2hhcl91ICpwMTsKKworICAgIHAxID0gdmltX3N0cm5zYXZlKHN0cmluZywgbGVuKTsKKyAgICB2aW1fc3RydXAocDEpOworICAgIHJldHVybiBwMTsKK30KKworLyoKKyAqIEFTQ0lJIGxvd2VyLXRvLXVwcGVyIGNhc2UgdHJhbnNsYXRpb24sIGxhbmd1YWdlIGluZGVwZW5kZW50LgorICovCisgICAgdm9pZAordmltX3N0cnVwKHApCisgICAgY2hhcl91CSpwOworeworICAgIGNoYXJfdSAgKnAyOworICAgIGludAkgICAgYzsKKworICAgIGlmIChwICE9IE5VTEwpCisgICAgeworCXAyID0gcDsKKwl3aGlsZSAoKGMgPSAqcDIpICE9IE5VTCkKKyNpZmRlZiBFQkNESUMKKwkgICAgKnAyKysgPSBpc2FscGhhKGMpID8gdG91cHBlcihjKSA6IGM7CisjZWxzZQorCSAgICAqcDIrKyA9IChjIDwgJ2EnIHx8IGMgPiAneicpID8gYyA6IChjIC0gMHgyMCk7CisjZW5kaWYKKyAgICB9Cit9CisKKy8qCisgKiBjb3B5IGEgc3BhY2UgYSBudW1iZXIgb2YgdGltZXMKKyAqLworICAgIHZvaWQKK2NvcHlfc3BhY2VzKHB0ciwgY291bnQpCisgICAgY2hhcl91CSpwdHI7CisgICAgc2l6ZV90CWNvdW50OworeworICAgIHNpemVfdAlpID0gY291bnQ7CisgICAgY2hhcl91CSpwID0gcHRyOworCisgICAgd2hpbGUgKGktLSkKKwkqcCsrID0gJyAnOworfQorCisjaWYgZGVmaW5lZChGRUFUX1ZJU1VBTEVYVFJBKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENvcHkgYSBjaGFyYWN0ZXIgYSBudW1iZXIgb2YgdGltZXMuCisgKiBEb2VzIG5vdCB3b3JrIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcyEKKyAqLworICAgIHZvaWQKK2NvcHlfY2hhcnMocHRyLCBjb3VudCwgYykKKyAgICBjaGFyX3UJKnB0cjsKKyAgICBzaXplX3QJY291bnQ7CisgICAgaW50CQljOworeworICAgIHNpemVfdAlpID0gY291bnQ7CisgICAgY2hhcl91CSpwID0gcHRyOworCisgICAgd2hpbGUgKGktLSkKKwkqcCsrID0gYzsKK30KKyNlbmRpZgorCisvKgorICogZGVsZXRlIHNwYWNlcyBhdCB0aGUgZW5kIG9mIGEgc3RyaW5nCisgKi8KKyAgICB2b2lkCitkZWxfdHJhaWxpbmdfc3BhY2VzKHB0cikKKyAgICBjaGFyX3UJKnB0cjsKK3sKKyAgICBjaGFyX3UJKnE7CisKKyAgICBxID0gcHRyICsgU1RSTEVOKHB0cik7CisgICAgd2hpbGUgKC0tcSA+IHB0ciAmJiB2aW1faXN3aGl0ZShxWzBdKSAmJiBxWy0xXSAhPSAnXFwnICYmIHFbLTFdICE9IEN0cmxfVikKKwkqcSA9IE5VTDsKK30KKworLyoKKyAqIFRoaXMgaXMgaGVyZSBiZWNhdXNlIHN0cm5jcHkoKSBkb2VzIG5vdCBndWFyYW50ZWUgc3VjY2Vzc2Z1bCByZXN1bHRzIHdoZW4KKyAqIHRoZSB0byBhbmQgZnJvbSBzdHJpbmdzIG92ZXJsYXAuICBJdCBpcyBvbmx5IGN1cnJlbnRseSBjYWxsZWQgZnJvbQorICogbmV4dHdpbGQoKSB3aGljaCBjb3BpZXMgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lIHRvIGFub3RoZXIgcGFydCBvZiB0aGUKKyAqIGNvbW1hbmQgbGluZS4gIFRoaXMgcHJvZHVjZWQgZ2FyYmFnZSB3aGVuIGV4cGFuZGluZyBmaWxlcyBldGMgaW4gdGhlIG1pZGRsZQorICogb2YgdGhlIGNvbW1hbmQgbGluZSAob24gbXkgdGVybWluYWwsIGFueXdheSkgLS0gd2ViYi4KKyAqIE5vdGU6IHN0cm5jcHkoKSBwYWRzIHRoZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciB3aXRoIE5VTCBieXRlcywKKyAqIHZpbV9zdHJuY3B5KCkgZG9lc24ndCBkbyB0aGF0LgorICovCisgICAgdm9pZAordmltX3N0cm5jcHkodG8sIGZyb20sIGxlbikKKyAgICBjaGFyX3UgKnRvOworICAgIGNoYXJfdSAqZnJvbTsKKyAgICBpbnQgbGVuOworeworICAgIGludCBpOworCisgICAgaWYgKHRvIDw9IGZyb20pCisgICAgeworCXdoaWxlIChsZW4tLSAmJiAqZnJvbSkKKwkgICAgKnRvKysgPSAqZnJvbSsrOworCWlmIChsZW4gPj0gMCkKKwkgICAgKnRvID0gKmZyb207ICAgIC8qIENvcHkgTlVMICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCXsKKwkgICAgdG8rKzsKKwkgICAgaWYgKCpmcm9tKysgPT0gTlVMKQorCSAgICB7CisJCWkrKzsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJZm9yICg7IGkgPiAwOyBpLS0pCisJICAgICotLXRvID0gKi0tZnJvbTsKKyAgICB9Cit9CisKKy8qCisgKiBJc29sYXRlIG9uZSBwYXJ0IG9mIGEgc3RyaW5nIG9wdGlvbiB3aGVyZSBwYXJ0cyBhcmUgc2VwYXJhdGVkIHdpdGgKKyAqICJzZXBfY2hhcnMiLgorICogVGhlIHBhcnQgaXMgY29waWVkIGludG8gYnVmW21heGxlbl0uCisgKiAiKm9wdGlvbiIgaXMgYWR2YW5jZWQgdG8gdGhlIG5leHQgcGFydC4KKyAqIFRoZSBsZW5ndGggaXMgcmV0dXJuZWQuCisgKi8KKyAgICBpbnQKK2NvcHlfb3B0aW9uX3BhcnQob3B0aW9uLCBidWYsIG1heGxlbiwgc2VwX2NoYXJzKQorICAgIGNoYXJfdQkqKm9wdGlvbjsKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCW1heGxlbjsKKyAgICBjaGFyCSpzZXBfY2hhcnM7Cit7CisgICAgaW50CSAgICBsZW4gPSAwOworICAgIGNoYXJfdSAgKnAgPSAqb3B0aW9uOworCisgICAgLyogc2tpcCAnLicgYXQgc3RhcnQgb2Ygb3B0aW9uIHBhcnQsIGZvciAnc3VmZml4ZXMnICovCisgICAgaWYgKCpwID09ICcuJykKKwlidWZbbGVuKytdID0gKnArKzsKKyAgICB3aGlsZSAoKnAgIT0gTlVMICYmIHZpbV9zdHJjaHIoKGNoYXJfdSAqKXNlcF9jaGFycywgKnApID09IE5VTEwpCisgICAgeworCS8qCisJICogU2tpcCBiYWNrc2xhc2ggYmVmb3JlIGEgc2VwYXJhdG9yIGNoYXJhY3RlciBhbmQgc3BhY2UuCisJICovCisJaWYgKHBbMF0gPT0gJ1xcJyAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKilzZXBfY2hhcnMsIHBbMV0pICE9IE5VTEwpCisJICAgICsrcDsKKwlpZiAobGVuIDwgbWF4bGVuIC0gMSkKKwkgICAgYnVmW2xlbisrXSA9ICpwOworCSsrcDsKKyAgICB9CisgICAgYnVmW2xlbl0gPSBOVUw7CisKKyAgICBpZiAoKnAgIT0gTlVMICYmICpwICE9ICcsJykJLyogc2tpcCBub24tc3RhbmRhcmQgc2VwYXJhdG9yICovCisJKytwOworICAgIHAgPSBza2lwX3RvX29wdGlvbl9wYXJ0KHApOwkvKiBwIHBvaW50cyB0byBuZXh0IGZpbGUgbmFtZSAqLworCisgICAgKm9wdGlvbiA9IHA7CisgICAgcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIHJlcGxhY2VtZW50IGZvciBmcmVlKCkgdGhhdCBpZ25vcmVzIE5VTEwgcG9pbnRlcnMKKyAqLworICAgIHZvaWQKK3ZpbV9mcmVlKHgpCisgICAgdm9pZCAqeDsKK3sKKyAgICBpZiAoeCAhPSBOVUxMKQorICAgIHsKKyNpZmRlZiBNRU1fUFJPRklMRQorCW1lbV9wcmVfZnJlZSgmeCk7CisjZW5kaWYKKwlmcmVlKHgpOworICAgIH0KK30KKworI2lmbmRlZiBIQVZFX01FTVNFVAorICAgIHZvaWQgKgordmltX21lbXNldChwdHIsIGMsIHNpemUpCisgICAgdm9pZCAgICAqcHRyOworICAgIGludAkgICAgYzsKKyAgICBzaXplX3QgIHNpemU7Cit7CisgICAgY2hhciAqcCA9IHB0cjsKKworICAgIHdoaWxlIChzaXplLS0gPiAwKQorCSpwKysgPSBjOworICAgIHJldHVybiBwdHI7Cit9CisjZW5kaWYKKworI2lmZGVmIFZJTV9NRU1DTVAKKy8qCisgKiBSZXR1cm4gemVybyB3aGVuICJiMSIgYW5kICJiMiIgYXJlIHRoZSBzYW1lIGZvciAibGVuIiBieXRlcy4KKyAqIFJldHVybiBub24temVybyBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK3ZpbV9tZW1jbXAoYjEsIGIyLCBsZW4pCisgICAgdm9pZCAgICAqYjE7CisgICAgdm9pZCAgICAqYjI7CisgICAgc2l6ZV90ICBsZW47Cit7CisgICAgY2hhcl91ICAqcDEgPSAoY2hhcl91ICopYjEsICpwMiA9IChjaGFyX3UgKiliMjsKKworICAgIGZvciAoIDsgbGVuID4gMDsgLS1sZW4pCisgICAgeworCWlmICgqcDEgIT0gKnAyKQorCSAgICByZXR1cm4gMTsKKwkrK3AxOworCSsrcDI7CisgICAgfQorICAgIHJldHVybiAwOworfQorI2VuZGlmCisKKyNpZmRlZiBWSU1fTUVNTU9WRQorLyoKKyAqIFZlcnNpb24gb2YgbWVtbW92ZSgpIHRoYXQgaGFuZGxlcyBvdmVybGFwcGluZyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLgorICogRm9yIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIGEgZnVuY3Rpb24gdGhhdCBpcyBndWFyYW50ZWVkIHRvIGRvIHRoYXQgKFNZU1YpLgorICovCisgICAgdm9pZAorbWNoX21lbW1vdmUoZHN0X2FyZywgc3JjX2FyZywgbGVuKQorICAgIHZvaWQgICAgKnNyY19hcmcsICpkc3RfYXJnOworICAgIHNpemVfdCAgbGVuOworeworICAgIC8qCisgICAgICogQSB2b2lkIGRvZXNuJ3QgaGF2ZSBhIHNpemUsIHdlIHVzZSBjaGFyIHBvaW50ZXJzLgorICAgICAqLworICAgIGNoYXIgKmRzdCA9IGRzdF9hcmcsICpzcmMgPSBzcmNfYXJnOworCisJCQkJCS8qIG92ZXJsYXAsIGNvcHkgYmFja3dhcmRzICovCisgICAgaWYgKGRzdCA+IHNyYyAmJiBkc3QgPCBzcmMgKyBsZW4pCisgICAgeworCXNyYyArPSBsZW47CisJZHN0ICs9IGxlbjsKKwl3aGlsZSAobGVuLS0gPiAwKQorCSAgICAqLS1kc3QgPSAqLS1zcmM7CisgICAgfQorICAgIGVsc2UJCQkJLyogY29weSBmb3J3YXJkcyAqLworCXdoaWxlIChsZW4tLSA+IDApCisJICAgICpkc3QrKyA9ICpzcmMrKzsKK30KKyNlbmRpZgorCisjaWYgKCFkZWZpbmVkKEhBVkVfU1RSQ0FTRUNNUCkgJiYgIWRlZmluZWQoSEFWRV9TVFJJQ01QKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDb21wYXJlIHR3byBzdHJpbmdzLCBpZ25vcmluZyBjYXNlLCB1c2luZyBjdXJyZW50IGxvY2FsZS4KKyAqIERvZXNuJ3Qgd29yayBmb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorICogcmV0dXJuIDAgZm9yIG1hdGNoLCA8IDAgZm9yIHNtYWxsZXIsID4gMCBmb3IgYmlnZ2VyCisgKi8KKyAgICBpbnQKK3ZpbV9zdHJpY21wKHMxLCBzMikKKyAgICBjaGFyCSpzMTsKKyAgICBjaGFyCSpzMjsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKDs7KQorICAgIHsKKwlpID0gKGludClUT0xPV0VSX0xPQygqczEpIC0gKGludClUT0xPV0VSX0xPQygqczIpOworCWlmIChpICE9IDApCisJICAgIHJldHVybiBpOwkJCSAgICAvKiB0aGlzIGNoYXJhY3RlciBkaWZmZXJlbnQgKi8KKwlpZiAoKnMxID09IE5VTCkKKwkgICAgYnJlYWs7CQkJICAgIC8qIHN0cmluZ3MgbWF0Y2ggdW50aWwgTlVMICovCisJKytzMTsKKwkrK3MyOworICAgIH0KKyAgICByZXR1cm4gMDsJCQkJICAgIC8qIHN0cmluZ3MgbWF0Y2ggKi8KK30KKyNlbmRpZgorCisjaWYgKCFkZWZpbmVkKEhBVkVfU1RSTkNBU0VDTVApICYmICFkZWZpbmVkKEhBVkVfU1RSTklDTVApKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENvbXBhcmUgdHdvIHN0cmluZ3MsIGZvciBsZW5ndGggImxlbiIsIGlnbm9yaW5nIGNhc2UsIHVzaW5nIGN1cnJlbnQgbG9jYWxlLgorICogRG9lc24ndCB3b3JrIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCisgKiByZXR1cm4gMCBmb3IgbWF0Y2gsIDwgMCBmb3Igc21hbGxlciwgPiAwIGZvciBiaWdnZXIKKyAqLworICAgIGludAordmltX3N0cm5pY21wKHMxLCBzMiwgbGVuKQorICAgIGNoYXIJKnMxOworICAgIGNoYXIJKnMyOworICAgIHNpemVfdAlsZW47Cit7CisgICAgaW50CQlpOworCisgICAgd2hpbGUgKGxlbiA+IDApCisgICAgeworCWkgPSAoaW50KVRPTE9XRVJfTE9DKCpzMSkgLSAoaW50KVRPTE9XRVJfTE9DKCpzMik7CisJaWYgKGkgIT0gMCkKKwkgICAgcmV0dXJuIGk7CQkJICAgIC8qIHRoaXMgY2hhcmFjdGVyIGRpZmZlcmVudCAqLworCWlmICgqczEgPT0gTlVMKQorCSAgICBicmVhazsJCQkgICAgLyogc3RyaW5ncyBtYXRjaCB1bnRpbCBOVUwgKi8KKwkrK3MxOworCSsrczI7CisJLS1sZW47CisgICAgfQorICAgIHJldHVybiAwOwkJCQkgICAgLyogc3RyaW5ncyBtYXRjaCAqLworfQorI2VuZGlmCisKKyNpZiAwCS8qIGN1cnJlbnRseSBub3QgdXNlZCAqLworLyoKKyAqIENoZWNrIGlmIHN0cmluZyAiczIiIGFwcGVhcnMgc29tZXdoZXJlIGluICJzMSIgd2hpbGUgaWdub3JpbmcgY2FzZS4KKyAqIFJldHVybiBOVUxMIGlmIG5vdCwgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGlmIGl0IGRvZXMuCisgKi8KKyAgICBjaGFyX3UgKgordmltX3N0cmlzdHIoczEsIHMyKQorICAgIGNoYXJfdQkqczE7CisgICAgY2hhcl91CSpzMjsKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlsZW4gPSBTVFJMRU4oczIpOworICAgIGNoYXJfdQkqZW5kID0gczEgKyBTVFJMRU4oczEpIC0gbGVuOworCisgICAgZm9yIChwID0gczE7IHAgPD0gZW5kOyArK3ApCisJaWYgKFNUUk5JQ01QKHAsIHMyLCBsZW4pID09IDApCisJICAgIHJldHVybiBwOworICAgIHJldHVybiBOVUxMOworfQorI2VuZGlmCisKKy8qCisgKiBWZXJzaW9uIG9mIHN0cmNocigpIGFuZCBzdHJyY2hyKCkgdGhhdCBoYW5kbGUgdW5zaWduZWQgY2hhciBzdHJpbmdzCisgKiB3aXRoIGNoYXJhY3RlcnMgYWJvdmUgMTI4IGNvcnJlY3RseS4gQWxzbyBpdCBkb2Vzbid0IHJldHVybiBhIHBvaW50ZXIgdG8KKyAqIHRoZSBOVUwgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorICovCisgICAgY2hhcl91ICAqCit2aW1fc3RyY2hyKHN0cmluZywgYykKKyAgICBjaGFyX3UJKnN0cmluZzsKKyAgICBpbnQJCWM7Cit7CisgICAgY2hhcl91CSpwOworICAgIGludAkJYjsKKworICAgIHAgPSBzdHJpbmc7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChlbmNfdXRmOCAmJiBjID49IDB4ODApCisgICAgeworCXdoaWxlICgqcCAhPSBOVUwpCisJeworCSAgICBpZiAodXRmX3B0cjJjaGFyKHApID09IGMpCisJCXJldHVybiBwOworCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7CisJfQorCXJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoZW5jX2RiY3MgIT0gMCAmJiBjID4gMjU1KQorICAgIHsKKwlpbnQJbjIgPSBjICYgMHhmZjsKKworCWMgPSAoKHVuc2lnbmVkKWMgPj4gOCkgJiAweGZmOworCXdoaWxlICgoYiA9ICpwKSAhPSBOVUwpCisJeworCSAgICBpZiAoYiA9PSBjICYmIHBbMV0gPT0gbjIpCisJCXJldHVybiBwOworCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7CisJfQorCXJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoaGFzX21ieXRlKQorICAgIHsKKwl3aGlsZSAoKGIgPSAqcCkgIT0gTlVMKQorCXsKKwkgICAgaWYgKGIgPT0gYykKKwkJcmV0dXJuIHA7CisJICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKTsKKwl9CisJcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCisgICAgd2hpbGUgKChiID0gKnApICE9IE5VTCkKKyAgICB7CisJaWYgKGIgPT0gYykKKwkgICAgcmV0dXJuIHA7CisJKytwOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgbGFzdCBvY2N1cnJlbmNlIG9mICJjIiBpbiAic3RyaW5nIi4KKyAqIHJldHVybiBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqIERvZXMgbm90IGhhbmRsZSBtdWx0aS1ieXRlIQorICovCisgICAgY2hhcl91ICAqCit2aW1fc3RycmNocihzdHJpbmcsIGMpCisgICAgY2hhcl91CSpzdHJpbmc7CisgICAgaW50CQljOworeworICAgIGNoYXJfdQkqcmV0dmFsID0gTlVMTDsKKworICAgIHdoaWxlICgqc3RyaW5nKQorICAgIHsKKwlpZiAoKnN0cmluZyA9PSBjKQorCSAgICByZXR2YWwgPSBzdHJpbmc7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHN0cmluZyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHN0cmluZyk7CisJZWxzZQorI2VuZGlmCisJICAgICsrc3RyaW5nOworICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVmltJ3MgdmVyc2lvbiBvZiBzdHJwYnJrKCksIGluIGNhc2UgaXQncyBtaXNzaW5nLgorICogRG9uJ3QgZ2VuZXJhdGUgYSBwcm90b3R5cGUgZm9yIHRoaXMsIGNhdXNlcyBwcm9ibGVtcyB3aGVuIGl0J3Mgbm90IHVzZWQuCisgKi8KKyNpZm5kZWYgUFJPVE8KKyMgaWZuZGVmIEhBVkVfU1RSUEJSSworIyAgaWZkZWYgdmltX3N0cnBicmsKKyMgICB1bmRlZiB2aW1fc3RycGJyaworIyAgZW5kaWYKKyAgICBjaGFyX3UgKgordmltX3N0cnBicmsocywgY2hhcnNldCkKKyAgICBjaGFyX3UJKnM7CisgICAgY2hhcl91CSpjaGFyc2V0OworeworICAgIHdoaWxlICgqcykKKyAgICB7CisJaWYgKHZpbV9zdHJjaHIoY2hhcnNldCwgKnMpICE9IE5VTEwpCisJICAgIHJldHVybiBzOworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCSAgICBzICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocyk7CisJZWxzZQorI2VuZGlmCisJICAgICsrczsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIFZpbSBoYXMgaXRzIG93biBpc3NwYWNlKCkgZnVuY3Rpb24sIGJlY2F1c2Ugb24gc29tZSBtYWNoaW5lcyBpc3NwYWNlKCkKKyAqIGNhbid0IGhhbmRsZSBjaGFyYWN0ZXJzIGFib3ZlIDEyOC4KKyAqLworICAgIGludAordmltX2lzc3BhY2UoeCkKKyAgICBpbnQJICAgIHg7Cit7CisgICAgcmV0dXJuICgoeCA+PSA5ICYmIHggPD0gMTMpIHx8IHggPT0gJyAnKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb25zIGZvciBoYW5sZGluZyBncm93aW5nIGFycmF5cy4KKyAqLworCisvKgorICogQ2xlYXIgYW4gYWxsb2NhdGVkIGdyb3dpbmcgYXJyYXkuCisgKi8KKyAgICB2b2lkCitnYV9jbGVhcihnYXApCisgICAgZ2FycmF5X1QgKmdhcDsKK3sKKyAgICB2aW1fZnJlZShnYXAtPmdhX2RhdGEpOworICAgIGdhX2luaXQoZ2FwKTsKK30KKworLyoKKyAqIENsZWFyIGEgZ3Jvd2luZyBhcnJheSB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBzdHJpbmdzLgorICovCisgICAgdm9pZAorZ2FfY2xlYXJfc3RyaW5ncyhnYXApCisgICAgZ2FycmF5X1QgKmdhcDsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZ2FwLT5nYV9sZW47ICsraSkKKwl2aW1fZnJlZSgoKGNoYXJfdSAqKikoZ2FwLT5nYV9kYXRhKSlbaV0pOworICAgIGdhX2NsZWFyKGdhcCk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgZ3Jvd2luZyBhcnJheS4JRG9uJ3QgZm9yZ2V0IHRvIHNldCBnYV9pdGVtc2l6ZSBhbmQKKyAqIGdhX2dyb3dzaXplISAgT3IgdXNlIGdhX2luaXQyKCkuCisgKi8KKyAgICB2b2lkCitnYV9pbml0KGdhcCkKKyAgICBnYXJyYXlfVCAqZ2FwOworeworICAgIGdhcC0+Z2FfZGF0YSA9IE5VTEw7CisgICAgZ2FwLT5nYV9yb29tID0gMDsKKyAgICBnYXAtPmdhX2xlbiA9IDA7Cit9CisKKyAgICB2b2lkCitnYV9pbml0MihnYXAsIGl0ZW1zaXplLCBncm93c2l6ZSkKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGludAkJaXRlbXNpemU7CisgICAgaW50CQlncm93c2l6ZTsKK3sKKyAgICBnYV9pbml0KGdhcCk7CisgICAgZ2FwLT5nYV9pdGVtc2l6ZSA9IGl0ZW1zaXplOworICAgIGdhcC0+Z2FfZ3Jvd3NpemUgPSBncm93c2l6ZTsKK30KKworLyoKKyAqIE1ha2Ugcm9vbSBpbiBncm93aW5nIGFycmF5ICJnYXAiIGZvciBhdCBsZWFzdCAibiIgaXRlbXMuCisgKiBSZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitnYV9ncm93KGdhcCwgbikKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGludAkJbjsKK3sKKyAgICBzaXplX3QJbGVuOworICAgIGNoYXJfdQkqcHA7CisKKyAgICBpZiAoZ2FwLT5nYV9yb29tIDwgbikKKyAgICB7CisJaWYgKG4gPCBnYXAtPmdhX2dyb3dzaXplKQorCSAgICBuID0gZ2FwLT5nYV9ncm93c2l6ZTsKKwlsZW4gPSBnYXAtPmdhX2l0ZW1zaXplICogKGdhcC0+Z2FfbGVuICsgbik7CisJcHAgPSBhbGxvY19jbGVhcigodW5zaWduZWQpbGVuKTsKKwlpZiAocHAgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBSUw7CisJZ2FwLT5nYV9yb29tID0gbjsKKwlpZiAoZ2FwLT5nYV9kYXRhICE9IE5VTEwpCisJeworCSAgICBtY2hfbWVtbW92ZShwcCwgZ2FwLT5nYV9kYXRhLAorCQkJCSAgICAgIChzaXplX3QpKGdhcC0+Z2FfaXRlbXNpemUgKiBnYXAtPmdhX2xlbikpOworCSAgICB2aW1fZnJlZShnYXAtPmdhX2RhdGEpOworCX0KKwlnYXAtPmdhX2RhdGEgPSBwcDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogQ29uY2F0ZW5hdGUgYSBzdHJpbmcgdG8gYSBncm93YXJyYXkgd2hpY2ggY29udGFpbnMgY2hhcmFjdGVycy4KKyAqIE5vdGU6IERvZXMgTk9UIGNvcHkgdGhlIE5VTCBhdCB0aGUgZW5kIQorICovCisgICAgdm9pZAorZ2FfY29uY2F0KGdhcCwgcykKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGNoYXJfdQkqczsKK3sKKyAgICBpbnQgICAgbGVuID0gKGludClTVFJMRU4ocyk7CisKKyAgICBpZiAoZ2FfZ3JvdyhnYXAsIGxlbikgPT0gT0spCisgICAgeworCW1jaF9tZW1tb3ZlKChjaGFyICopZ2FwLT5nYV9kYXRhICsgZ2FwLT5nYV9sZW4sIHMsIChzaXplX3QpbGVuKTsKKwlnYXAtPmdhX2xlbiArPSBsZW47CisJZ2FwLT5nYV9yb29tIC09IGxlbjsKKyAgICB9Cit9CisKKy8qCisgKiBBcHBlbmQgb25lIGJ5dGUgdG8gYSBncm93YXJyYXkgd2hpY2ggY29udGFpbnMgYnl0ZXMuCisgKi8KKyAgICB2b2lkCitnYV9hcHBlbmQoZ2FwLCBjKQorICAgIGdhcnJheV9UCSpnYXA7CisgICAgaW50CQljOworeworICAgIGlmIChnYV9ncm93KGdhcCwgMSkgPT0gT0spCisgICAgeworCSooKGNoYXIgKilnYXAtPmdhX2RhdGEgKyBnYXAtPmdhX2xlbikgPSBjOworCSsrZ2FwLT5nYV9sZW47CisJLS1nYXAtPmdhX3Jvb207CisgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBmdW5jdGlvbnMgdGhhdCB1c2UgbG9va3VwIHRhYmxlcyBmb3IgdmFyaW91cyB0aGluZ3MsIGdlbmVyYWxseSB0byBkbyB3aXRoCisgKiBzcGVjaWFsIGtleSBjb2Rlcy4KKyAqLworCisvKgorICogU29tZSB1c2VmdWwgdGFibGVzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgbW9kbWFza3RhYmxlCit7CisgICAgc2hvcnQJbW9kX21hc2s7CS8qIEJpdC1tYXNrIGZvciBwYXJ0aWN1bGFyIGtleSBtb2RpZmllciAqLworICAgIHNob3J0CW1vZF9mbGFnOwkvKiBCaXQocykgZm9yIHBhcnRpY3VsYXIga2V5IG1vZGlmaWVyICovCisgICAgY2hhcl91CW5hbWU7CQkvKiBTaW5nbGUgbGV0dGVyIG5hbWUgb2YgbW9kaWZpZXIgKi8KK30gbW9kX21hc2tfdGFibGVbXSA9Cit7CisgICAge01PRF9NQVNLX0FMVCwJCU1PRF9NQVNLX0FMVCwJCShjaGFyX3UpJ00nfSwKKyAgICB7TU9EX01BU0tfQ1RSTCwJCU1PRF9NQVNLX0NUUkwsCQkoY2hhcl91KSdDJ30sCisgICAge01PRF9NQVNLX1NISUZULAkJTU9EX01BU0tfU0hJRlQsCQkoY2hhcl91KSdTJ30sCisgICAge01PRF9NQVNLX01VTFRJX0NMSUNLLAlNT0RfTUFTS18yQ0xJQ0ssCShjaGFyX3UpJzInfSwKKyAgICB7TU9EX01BU0tfTVVMVElfQ0xJQ0ssCU1PRF9NQVNLXzNDTElDSywJKGNoYXJfdSknMyd9LAorICAgIHtNT0RfTUFTS19NVUxUSV9DTElDSywJTU9EX01BU0tfNENMSUNLLAkoY2hhcl91KSc0J30sCisjaWZkZWYgTUFDT1MKKyAgICB7TU9EX01BU0tfQ01ELAkJTU9EX01BU0tfQ01ELAkJKGNoYXJfdSknRCd9LAorI2VuZGlmCisgICAgLyogJ0EnIG11c3QgYmUgdGhlIGxhc3Qgb25lICovCisgICAge01PRF9NQVNLX0FMVCwJCU1PRF9NQVNLX0FMVCwJCShjaGFyX3UpJ0EnfSwKKyAgICB7MCwgMCwgTlVMfQorfTsKKworLyoKKyAqIFNoaWZ0ZWQga2V5IHRlcm1pbmFsIGNvZGVzIGFuZCB0aGVpciB1bnNoaWZ0ZWQgZXF1aXZhbGVudC4KKyAqIERvbid0IGFkZCBtb3VzZSBjb2RlcyBoZXJlLCB0aGV5IGFyZSBoYW5kbGVkIHNlcGVyYXRlbHkhCisgKi8KKyNkZWZpbmUgTU9EX0tFWVNfRU5UUllfU0laRSA1CisKK3N0YXRpYyBjaGFyX3UgbW9kaWZpZXJfa2V5c190YWJsZVtdID0KK3sKKy8qICBtb2QgbWFzawkgICAgd2l0aCBtb2RpZmllcgkJd2l0aG91dCBtb2RpZmllciAqLworICAgIE1PRF9NQVNLX1NISUZULCAnJicsICc5JywJCQknQCcsICcxJywJLyogYmVnaW4gKi8KKyAgICBNT0RfTUFTS19TSElGVCwgJyYnLCAnMCcsCQkJJ0AnLCAnMicsCS8qIGNhbmNlbCAqLworICAgIE1PRF9NQVNLX1NISUZULCAnKicsICcxJywJCQknQCcsICc0JywJLyogY29tbWFuZCAqLworICAgIE1PRF9NQVNLX1NISUZULCAnKicsICcyJywJCQknQCcsICc1JywJLyogY29weSAqLworICAgIE1PRF9NQVNLX1NISUZULCAnKicsICczJywJCQknQCcsICc2JywJLyogY3JlYXRlICovCisgICAgTU9EX01BU0tfU0hJRlQsICcqJywgJzQnLAkJCSdrJywgJ0QnLAkvKiBkZWxldGUgY2hhciAqLworICAgIE1PRF9NQVNLX1NISUZULCAnKicsICc1JywJCQknaycsICdMJywJLyogZGVsZXRlIGxpbmUgKi8KKyAgICBNT0RfTUFTS19TSElGVCwgJyonLCAnNycsCQkJJ0AnLCAnNycsCS8qIGVuZCAqLworICAgIE1PRF9NQVNLX0NUUkwsICBLU19FWFRSQSwgKGludClLRV9DX0VORCwJJ0AnLCAnNycsCS8qIGVuZCAqLworICAgIE1PRF9NQVNLX1NISUZULCAnKicsICc5JywJCQknQCcsICc5JywJLyogZXhpdCAqLworICAgIE1PRF9NQVNLX1NISUZULCAnKicsICcwJywJCQknQCcsICcwJywJLyogZmluZCAqLworICAgIE1PRF9NQVNLX1NISUZULCAnIycsICcxJywJCQknJScsICcxJywJLyogaGVscCAqLworICAgIE1PRF9NQVNLX1NISUZULCAnIycsICcyJywJCQknaycsICdoJywJLyogaG9tZSAqLworICAgIE1PRF9NQVNLX0NUUkwsICBLU19FWFRSQSwgKGludClLRV9DX0hPTUUsCSdrJywgJ2gnLAkvKiBob21lICovCisgICAgTU9EX01BU0tfU0hJRlQsICcjJywgJzMnLAkJCSdrJywgJ0knLAkvKiBpbnNlcnQgKi8KKyAgICBNT0RfTUFTS19TSElGVCwgJyMnLCAnNCcsCQkJJ2snLCAnbCcsCS8qIGxlZnQgYXJyb3cgKi8KKyAgICBNT0RfTUFTS19DVFJMLCAgS1NfRVhUUkEsIChpbnQpS0VfQ19MRUZULAknaycsICdsJywJLyogbGVmdCBhcnJvdyAqLworICAgIE1PRF9NQVNLX1NISUZULCAnJScsICdhJywJCQknJScsICczJywJLyogbWVzc2FnZSAqLworICAgIE1PRF9NQVNLX1NISUZULCAnJScsICdiJywJCQknJScsICc0JywJLyogbW92ZSAqLworICAgIE1PRF9NQVNLX1NISUZULCAnJScsICdjJywJCQknJScsICc1JywJLyogbmV4dCAqLworICAgIE1PRF9NQVNLX1NISUZULCAnJScsICdkJywJCQknJScsICc3JywJLyogb3B0aW9ucyAqLworICAgIE1PRF9NQVNLX1NISUZULCAnJScsICdlJywJCQknJScsICc4JywJLyogcHJldmlvdXMgKi8KKyAgICBNT0RfTUFTS19TSElGVCwgJyUnLCAnZicsCQkJJyUnLCAnOScsCS8qIHByaW50ICovCisgICAgTU9EX01BU0tfU0hJRlQsICclJywgJ2cnLAkJCSclJywgJzAnLAkvKiByZWRvICovCisgICAgTU9EX01BU0tfU0hJRlQsICclJywgJ2gnLAkJCScmJywgJzMnLAkvKiByZXBsYWNlICovCisgICAgTU9EX01BU0tfU0hJRlQsICclJywgJ2knLAkJCSdrJywgJ3InLAkvKiByaWdodCBhcnIuICovCisgICAgTU9EX01BU0tfQ1RSTCwgIEtTX0VYVFJBLCAoaW50KUtFX0NfUklHSFQsCSdrJywgJ3InLAkvKiByaWdodCBhcnIuICovCisgICAgTU9EX01BU0tfU0hJRlQsICclJywgJ2onLAkJCScmJywgJzUnLAkvKiByZXN1bWUgKi8KKyAgICBNT0RfTUFTS19TSElGVCwgJyEnLCAnMScsCQkJJyYnLCAnNicsCS8qIHNhdmUgKi8KKyAgICBNT0RfTUFTS19TSElGVCwgJyEnLCAnMicsCQkJJyYnLCAnNycsCS8qIHN1c3BlbmQgKi8KKyAgICBNT0RfTUFTS19TSElGVCwgJyEnLCAnMycsCQkJJyYnLCAnOCcsCS8qIHVuZG8gKi8KKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19VUCwJJ2snLCAndScsCS8qIHVwIGFycm93ICovCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRE9XTiwJJ2snLCAnZCcsCS8qIGRvd24gYXJyb3cgKi8KKworCQkJCQkJCQkvKiB2dDEwMCBGMSAqLworICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX1hGMSwJS1NfRVhUUkEsIChpbnQpS0VfWEYxLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX1hGMiwJS1NfRVhUUkEsIChpbnQpS0VfWEYyLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX1hGMywJS1NfRVhUUkEsIChpbnQpS0VfWEYzLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX1hGNCwJS1NfRVhUUkEsIChpbnQpS0VfWEY0LAorCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjEsCSdrJywgJzEnLAkvKiBGMSAqLworICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0YyLAknaycsICcyJywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GMywJJ2snLCAnMycsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjQsCSdrJywgJzQnLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0Y1LAknaycsICc1JywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GNiwJJ2snLCAnNicsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjcsCSdrJywgJzcnLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0Y4LAknaycsICc4JywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GOSwJJ2snLCAnOScsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjEwLAknaycsICc7JywJLyogRjEwICovCisKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GMTEsCSdGJywgJzEnLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0YxMiwJJ0YnLCAnMicsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjEzLAknRicsICczJywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GMTQsCSdGJywgJzQnLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0YxNSwJJ0YnLCAnNScsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjE2LAknRicsICc2JywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GMTcsCSdGJywgJzcnLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0YxOCwJJ0YnLCAnOCcsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjE5LAknRicsICc5JywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GMjAsCSdGJywgJ0EnLAorCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjIxLAknRicsICdCJywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GMjIsCSdGJywgJ0MnLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0YyMywJJ0YnLCAnRCcsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjI0LAknRicsICdFJywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GMjUsCSdGJywgJ0YnLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0YyNiwJJ0YnLCAnRycsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjI3LAknRicsICdIJywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GMjgsCSdGJywgJ0knLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0YyOSwJJ0YnLCAnSicsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjMwLAknRicsICdLJywKKworICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0YzMSwJJ0YnLCAnTCcsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjMyLAknRicsICdNJywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GMzMsCSdGJywgJ04nLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0YzNCwJJ0YnLCAnTycsCisgICAgTU9EX01BU0tfU0hJRlQsIEtTX0VYVFJBLCAoaW50KUtFX1NfRjM1LAknRicsICdQJywKKyAgICBNT0RfTUFTS19TSElGVCwgS1NfRVhUUkEsIChpbnQpS0VfU19GMzYsCSdGJywgJ1EnLAorICAgIE1PRF9NQVNLX1NISUZULCBLU19FWFRSQSwgKGludClLRV9TX0YzNywJJ0YnLCAnUicsCisKKwkJCQkJCQkgICAgLyogVEFCIHBzZXVkbyBjb2RlKi8KKyAgICBNT0RfTUFTS19TSElGVCwgJ2snLCAnQicsCQkJS1NfRVhUUkEsIChpbnQpS0VfVEFCLAorCisgICAgTlVMCit9OworCitzdGF0aWMgc3RydWN0IGtleV9uYW1lX2VudHJ5Cit7CisgICAgaW50CSAgICBrZXk7CS8qIFNwZWNpYWwga2V5IGNvZGUgb3IgYXNjaWkgdmFsdWUgKi8KKyAgICBjaGFyX3UgICpuYW1lOwkvKiBOYW1lIG9mIGtleSAqLworfSBrZXlfbmFtZXNfdGFibGVbXSA9Cit7CisgICAgeycgJywJCShjaGFyX3UgKikiU3BhY2UifSwKKyAgICB7VEFCLAkJKGNoYXJfdSAqKSJUYWIifSwKKyAgICB7S19UQUIsCQkoY2hhcl91ICopIlRhYiJ9LAorICAgIHtOTCwJCShjaGFyX3UgKikiTkwifSwKKyAgICB7TkwsCQkoY2hhcl91ICopIk5ld0xpbmUifSwJLyogQWx0ZXJuYXRpdmUgbmFtZSAqLworICAgIHtOTCwJCShjaGFyX3UgKikiTGluZUZlZWQifSwJLyogQWx0ZXJuYXRpdmUgbmFtZSAqLworICAgIHtOTCwJCShjaGFyX3UgKikiTEYifSwJLyogQWx0ZXJuYXRpdmUgbmFtZSAqLworICAgIHtDQVIsCQkoY2hhcl91ICopIkNSIn0sCisgICAge0NBUiwJCShjaGFyX3UgKikiUmV0dXJuIn0sCS8qIEFsdGVybmF0aXZlIG5hbWUgKi8KKyAgICB7Q0FSLAkJKGNoYXJfdSAqKSJFbnRlciJ9LAkvKiBBbHRlcm5hdGl2ZSBuYW1lICovCisgICAge0tfQlMsCQkoY2hhcl91ICopIkJTIn0sCisgICAge0tfQlMsCQkoY2hhcl91ICopIkJhY2tTcGFjZSJ9LAkvKiBBbHRlcm5hdGl2ZSBuYW1lICovCisgICAge0VTQywJCShjaGFyX3UgKikiRXNjIn0sCisgICAge0NTSSwJCShjaGFyX3UgKikiQ1NJIn0sCisgICAge0tfQ1NJLAkJKGNoYXJfdSAqKSJ4Q1NJIn0sCisgICAgeyd8JywJCShjaGFyX3UgKikiQmFyIn0sCisgICAgeydcXCcsCQkoY2hhcl91ICopIkJzbGFzaCJ9LAorICAgIHtLX0RFTCwJCShjaGFyX3UgKikiRGVsIn0sCisgICAge0tfREVMLAkJKGNoYXJfdSAqKSJEZWxldGUifSwJLyogQWx0ZXJuYXRpdmUgbmFtZSAqLworICAgIHtLX0tERUwsCQkoY2hhcl91ICopImtEZWwifSwKKyAgICB7S19VUCwJCShjaGFyX3UgKikiVXAifSwKKyAgICB7S19ET1dOLAkJKGNoYXJfdSAqKSJEb3duIn0sCisgICAge0tfTEVGVCwJCShjaGFyX3UgKikiTGVmdCJ9LAorICAgIHtLX1JJR0hULAkJKGNoYXJfdSAqKSJSaWdodCJ9LAorCisgICAge0tfRjEsCQkoY2hhcl91ICopIkYxIn0sCisgICAge0tfRjIsCQkoY2hhcl91ICopIkYyIn0sCisgICAge0tfRjMsCQkoY2hhcl91ICopIkYzIn0sCisgICAge0tfRjQsCQkoY2hhcl91ICopIkY0In0sCisgICAge0tfRjUsCQkoY2hhcl91ICopIkY1In0sCisgICAge0tfRjYsCQkoY2hhcl91ICopIkY2In0sCisgICAge0tfRjcsCQkoY2hhcl91ICopIkY3In0sCisgICAge0tfRjgsCQkoY2hhcl91ICopIkY4In0sCisgICAge0tfRjksCQkoY2hhcl91ICopIkY5In0sCisgICAge0tfRjEwLAkJKGNoYXJfdSAqKSJGMTAifSwKKworICAgIHtLX0YxMSwJCShjaGFyX3UgKikiRjExIn0sCisgICAge0tfRjEyLAkJKGNoYXJfdSAqKSJGMTIifSwKKyAgICB7S19GMTMsCQkoY2hhcl91ICopIkYxMyJ9LAorICAgIHtLX0YxNCwJCShjaGFyX3UgKikiRjE0In0sCisgICAge0tfRjE1LAkJKGNoYXJfdSAqKSJGMTUifSwKKyAgICB7S19GMTYsCQkoY2hhcl91ICopIkYxNiJ9LAorICAgIHtLX0YxNywJCShjaGFyX3UgKikiRjE3In0sCisgICAge0tfRjE4LAkJKGNoYXJfdSAqKSJGMTgifSwKKyAgICB7S19GMTksCQkoY2hhcl91ICopIkYxOSJ9LAorICAgIHtLX0YyMCwJCShjaGFyX3UgKikiRjIwIn0sCisKKyAgICB7S19GMjEsCQkoY2hhcl91ICopIkYyMSJ9LAorICAgIHtLX0YyMiwJCShjaGFyX3UgKikiRjIyIn0sCisgICAge0tfRjIzLAkJKGNoYXJfdSAqKSJGMjMifSwKKyAgICB7S19GMjQsCQkoY2hhcl91ICopIkYyNCJ9LAorICAgIHtLX0YyNSwJCShjaGFyX3UgKikiRjI1In0sCisgICAge0tfRjI2LAkJKGNoYXJfdSAqKSJGMjYifSwKKyAgICB7S19GMjcsCQkoY2hhcl91ICopIkYyNyJ9LAorICAgIHtLX0YyOCwJCShjaGFyX3UgKikiRjI4In0sCisgICAge0tfRjI5LAkJKGNoYXJfdSAqKSJGMjkifSwKKyAgICB7S19GMzAsCQkoY2hhcl91ICopIkYzMCJ9LAorCisgICAge0tfRjMxLAkJKGNoYXJfdSAqKSJGMzEifSwKKyAgICB7S19GMzIsCQkoY2hhcl91ICopIkYzMiJ9LAorICAgIHtLX0YzMywJCShjaGFyX3UgKikiRjMzIn0sCisgICAge0tfRjM0LAkJKGNoYXJfdSAqKSJGMzQifSwKKyAgICB7S19GMzUsCQkoY2hhcl91ICopIkYzNSJ9LAorICAgIHtLX0YzNiwJCShjaGFyX3UgKikiRjM2In0sCisgICAge0tfRjM3LAkJKGNoYXJfdSAqKSJGMzcifSwKKworICAgIHtLX1hGMSwJCShjaGFyX3UgKikieEYxIn0sCisgICAge0tfWEYyLAkJKGNoYXJfdSAqKSJ4RjIifSwKKyAgICB7S19YRjMsCQkoY2hhcl91ICopInhGMyJ9LAorICAgIHtLX1hGNCwJCShjaGFyX3UgKikieEY0In0sCisKKyAgICB7S19IRUxQLAkJKGNoYXJfdSAqKSJIZWxwIn0sCisgICAge0tfVU5ETywJCShjaGFyX3UgKikiVW5kbyJ9LAorICAgIHtLX0lOUywJCShjaGFyX3UgKikiSW5zZXJ0In0sCisgICAge0tfSU5TLAkJKGNoYXJfdSAqKSJJbnMifSwJLyogQWx0ZXJuYXRpdmUgbmFtZSAqLworICAgIHtLX0tJTlMsCQkoY2hhcl91ICopImtJbnNlcnQifSwKKyAgICB7S19IT01FLAkJKGNoYXJfdSAqKSJIb21lIn0sCisgICAge0tfS0hPTUUsCQkoY2hhcl91ICopImtIb21lIn0sCisgICAge0tfWEhPTUUsCQkoY2hhcl91ICopInhIb21lIn0sCisgICAge0tfRU5ELAkJKGNoYXJfdSAqKSJFbmQifSwKKyAgICB7S19LRU5ELAkJKGNoYXJfdSAqKSJrRW5kIn0sCisgICAge0tfWEVORCwJCShjaGFyX3UgKikieEVuZCJ9LAorICAgIHtLX1BBR0VVUCwJCShjaGFyX3UgKikiUGFnZVVwIn0sCisgICAge0tfUEFHRURPV04sCShjaGFyX3UgKikiUGFnZURvd24ifSwKKyAgICB7S19LUEFHRVVQLAkJKGNoYXJfdSAqKSJrUGFnZVVwIn0sCisgICAge0tfS1BBR0VET1dOLAkoY2hhcl91ICopImtQYWdlRG93biJ9LAorCisgICAge0tfS1BMVVMsCQkoY2hhcl91ICopImtQbHVzIn0sCisgICAge0tfS01JTlVTLAkJKGNoYXJfdSAqKSJrTWludXMifSwKKyAgICB7S19LRElWSURFLAkJKGNoYXJfdSAqKSJrRGl2aWRlIn0sCisgICAge0tfS01VTFRJUExZLAkoY2hhcl91ICopImtNdWx0aXBseSJ9LAorICAgIHtLX0tFTlRFUiwJCShjaGFyX3UgKikia0VudGVyIn0sCisgICAge0tfS1BPSU5ULAkJKGNoYXJfdSAqKSJrUG9pbnQifSwKKworICAgIHtLX0swLAkJKGNoYXJfdSAqKSJrMCJ9LAorICAgIHtLX0sxLAkJKGNoYXJfdSAqKSJrMSJ9LAorICAgIHtLX0syLAkJKGNoYXJfdSAqKSJrMiJ9LAorICAgIHtLX0szLAkJKGNoYXJfdSAqKSJrMyJ9LAorICAgIHtLX0s0LAkJKGNoYXJfdSAqKSJrNCJ9LAorICAgIHtLX0s1LAkJKGNoYXJfdSAqKSJrNSJ9LAorICAgIHtLX0s2LAkJKGNoYXJfdSAqKSJrNiJ9LAorICAgIHtLX0s3LAkJKGNoYXJfdSAqKSJrNyJ9LAorICAgIHtLX0s4LAkJKGNoYXJfdSAqKSJrOCJ9LAorICAgIHtLX0s5LAkJKGNoYXJfdSAqKSJrOSJ9LAorCisgICAgeyc8JywJCShjaGFyX3UgKikibHQifSwKKworICAgIHtLX01PVVNFLAkJKGNoYXJfdSAqKSJNb3VzZSJ9LAorICAgIHtLX05FVFRFUk1fTU9VU0UsCShjaGFyX3UgKikiTmV0TW91c2UifSwKKyAgICB7S19ERUNfTU9VU0UsCShjaGFyX3UgKikiRGVjTW91c2UifSwKKyAgICB7S19KU0JURVJNX01PVVNFLAkoY2hhcl91ICopIkpzYk1vdXNlIn0sCisgICAge0tfUFRFUk1fTU9VU0UsCShjaGFyX3UgKikiUHRlcm1Nb3VzZSJ9LAorICAgIHtLX0xFRlRNT1VTRSwJKGNoYXJfdSAqKSJMZWZ0TW91c2UifSwKKyAgICB7S19MRUZUTU9VU0VfTk0sCShjaGFyX3UgKikiTGVmdE1vdXNlTk0ifSwKKyAgICB7S19MRUZURFJBRywJKGNoYXJfdSAqKSJMZWZ0RHJhZyJ9LAorICAgIHtLX0xFRlRSRUxFQVNFLAkoY2hhcl91ICopIkxlZnRSZWxlYXNlIn0sCisgICAge0tfTEVGVFJFTEVBU0VfTk0sCShjaGFyX3UgKikiTGVmdFJlbGVhc2VOTSJ9LAorICAgIHtLX01JRERMRU1PVVNFLAkoY2hhcl91ICopIk1pZGRsZU1vdXNlIn0sCisgICAge0tfTUlERExFRFJBRywJKGNoYXJfdSAqKSJNaWRkbGVEcmFnIn0sCisgICAge0tfTUlERExFUkVMRUFTRSwJKGNoYXJfdSAqKSJNaWRkbGVSZWxlYXNlIn0sCisgICAge0tfUklHSFRNT1VTRSwJKGNoYXJfdSAqKSJSaWdodE1vdXNlIn0sCisgICAge0tfUklHSFREUkFHLAkoY2hhcl91ICopIlJpZ2h0RHJhZyJ9LAorICAgIHtLX1JJR0hUUkVMRUFTRSwJKGNoYXJfdSAqKSJSaWdodFJlbGVhc2UifSwKKyAgICB7S19NT1VTRURPV04sCShjaGFyX3UgKikiTW91c2VEb3duIn0sCisgICAge0tfTU9VU0VVUCwJCShjaGFyX3UgKikiTW91c2VVcCJ9LAorICAgIHtLX1gxTU9VU0UsCQkoY2hhcl91ICopIlgxTW91c2UifSwKKyAgICB7S19YMURSQUcsCQkoY2hhcl91ICopIlgxRHJhZyJ9LAorICAgIHtLX1gxUkVMRUFTRSwJCShjaGFyX3UgKikiWDFSZWxlYXNlIn0sCisgICAge0tfWDJNT1VTRSwJCShjaGFyX3UgKikiWDJNb3VzZSJ9LAorICAgIHtLX1gyRFJBRywJCShjaGFyX3UgKikiWDJEcmFnIn0sCisgICAge0tfWDJSRUxFQVNFLAkJKGNoYXJfdSAqKSJYMlJlbGVhc2UifSwKKyAgICB7S19EUk9QLAkJKGNoYXJfdSAqKSJEcm9wIn0sCisgICAge0tfWkVSTywJCShjaGFyX3UgKikiTnVsIn0sCisjaWZkZWYgRkVBVF9FVkFMCisgICAge0tfU05SLAkJKGNoYXJfdSAqKSJTTlIifSwKKyNlbmRpZgorICAgIHtLX1BMVUcsCQkoY2hhcl91ICopIlBsdWcifSwKKyAgICB7MCwJCQlOVUxMfQorfTsKKworI2RlZmluZSBLRVlfTkFNRVNfVEFCTEVfTEVOIChzaXplb2Yoa2V5X25hbWVzX3RhYmxlKSAvIHNpemVvZihzdHJ1Y3Qga2V5X25hbWVfZW50cnkpKQorCisjaWZkZWYgRkVBVF9NT1VTRQorc3RhdGljIHN0cnVjdCBtb3VzZXRhYmxlCit7CisgICAgaW50CSAgICBwc2V1ZG9fY29kZTsJLyogQ29kZSBmb3IgcHNldWRvIG1vdXNlIGV2ZW50ICovCisgICAgaW50CSAgICBidXR0b247CQkvKiBXaGljaCBtb3VzZSBidXR0b24gaXMgaXQ/ICovCisgICAgaW50CSAgICBpc19jbGljazsJCS8qIElzIGl0IGEgbW91c2UgYnV0dG9uIGNsaWNrIGV2ZW50PyAqLworICAgIGludAkgICAgaXNfZHJhZzsJCS8qIElzIGl0IGEgbW91c2UgZHJhZyBldmVudD8gKi8KK30gbW91c2VfdGFibGVbXSA9Cit7CisgICAgeyhpbnQpS0VfTEVGVE1PVVNFLAkJTU9VU0VfTEVGVCwJVFJVRSwJRkFMU0V9LAorI2lmZGVmIEZFQVRfR1VJCisgICAgeyhpbnQpS0VfTEVGVE1PVVNFX05NLAlNT1VTRV9MRUZULAlUUlVFLAlGQUxTRX0sCisjZW5kaWYKKyAgICB7KGludClLRV9MRUZURFJBRywJCU1PVVNFX0xFRlQsCUZBTFNFLAlUUlVFfSwKKyAgICB7KGludClLRV9MRUZUUkVMRUFTRSwJTU9VU0VfTEVGVCwJRkFMU0UsCUZBTFNFfSwKKyNpZmRlZiBGRUFUX0dVSQorICAgIHsoaW50KUtFX0xFRlRSRUxFQVNFX05NLAlNT1VTRV9MRUZULAlGQUxTRSwJRkFMU0V9LAorI2VuZGlmCisgICAgeyhpbnQpS0VfTUlERExFTU9VU0UsCU1PVVNFX01JRERMRSwJVFJVRSwJRkFMU0V9LAorICAgIHsoaW50KUtFX01JRERMRURSQUcsCU1PVVNFX01JRERMRSwJRkFMU0UsCVRSVUV9LAorICAgIHsoaW50KUtFX01JRERMRVJFTEVBU0UsCU1PVVNFX01JRERMRSwJRkFMU0UsCUZBTFNFfSwKKyAgICB7KGludClLRV9SSUdIVE1PVVNFLAlNT1VTRV9SSUdIVCwJVFJVRSwJRkFMU0V9LAorICAgIHsoaW50KUtFX1JJR0hURFJBRywJCU1PVVNFX1JJR0hULAlGQUxTRSwJVFJVRX0sCisgICAgeyhpbnQpS0VfUklHSFRSRUxFQVNFLAlNT1VTRV9SSUdIVCwJRkFMU0UsCUZBTFNFfSwKKyAgICB7KGludClLRV9YMU1PVVNFLAkJTU9VU0VfWDEsCVRSVUUsCUZBTFNFfSwKKyAgICB7KGludClLRV9YMURSQUcsCQlNT1VTRV9YMSwJRkFMU0UsCVRSVUV9LAorICAgIHsoaW50KUtFX1gxUkVMRUFTRSwJCU1PVVNFX1gxLAlGQUxTRSwJRkFMU0V9LAorICAgIHsoaW50KUtFX1gyTU9VU0UsCQlNT1VTRV9YMiwJVFJVRSwJRkFMU0V9LAorICAgIHsoaW50KUtFX1gyRFJBRywJCU1PVVNFX1gyLAlGQUxTRSwJVFJVRX0sCisgICAgeyhpbnQpS0VfWDJSRUxFQVNFLAkJTU9VU0VfWDIsCUZBTFNFLAlGQUxTRX0sCisgICAgLyogRFJBRyB3aXRob3V0IENMSUNLICovCisgICAgeyhpbnQpS0VfSUdOT1JFLAkJTU9VU0VfUkVMRUFTRSwJRkFMU0UsCVRSVUV9LAorICAgIC8qIFJFTEVBU0Ugd2l0aG91dCBDTElDSyAqLworICAgIHsoaW50KUtFX0lHTk9SRSwJCU1PVVNFX1JFTEVBU0UsCUZBTFNFLAlGQUxTRX0sCisgICAgezAsCQkJCTAsCQkwLAkwfSwKK307CisjZW5kaWYgLyogRkVBVF9NT1VTRSAqLworCisvKgorICogUmV0dXJuIHRoZSBtb2RpZmllciBtYXNrIGJpdCAoTU9EX01BU0tfKikgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuCisgKiBtb2RpZmllciBuYW1lICgnUycgZm9yIFNoaWZ0LCAnQycgZm9yIEN0cmwgZXRjKS4KKyAqLworICAgIGludAorbmFtZV90b19tb2RfbWFzayhjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBpbnQJICAgIGk7CisKKyAgICBjID0gVE9VUFBFUl9BU0MoYyk7CisgICAgZm9yIChpID0gMDsgbW9kX21hc2tfdGFibGVbaV0ubW9kX21hc2sgIT0gMDsgaSsrKQorCWlmIChjID09IG1vZF9tYXNrX3RhYmxlW2ldLm5hbWUpCisJICAgIHJldHVybiBtb2RfbWFza190YWJsZVtpXS5tb2RfZmxhZzsKKyAgICByZXR1cm4gMDsKK30KKworI2lmIDAgLyogbm90IHVzZWQgKi8KKy8qCisgKiBEZWNpZGUgd2hldGhlciB0aGUgZ2l2ZW4ga2V5IGNvZGUgKEtfKikgaXMgYSBzaGlmdGVkIHNwZWNpYWwKKyAqIGtleSAoYnkgbG9va2luZyBhdCBtb2RfbWFzaykuICBJZiBpdCBpcywgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHNoaWZ0ZWQKKyAqIGtleSBjb2RlLCBvdGhlcndpc2UganVzdCByZXR1cm4gdGhlIGNoYXJhY3RlciBhcyBpcy4KKyAqLworICAgIGludAorY2hlY2tfc2hpZnRlZF9zcGVjX2tleShjKQorICAgIGludAkgICAgYzsKK3sKKyAgICByZXR1cm4gc2ltcGxpZnlfa2V5KGMsICZtb2RfbWFzayk7Cit9CisjZW5kaWYKKworLyoKKyAqIENoZWNrIGlmIGlmIHRoZXJlIGlzIGEgc3BlY2lhbCBrZXkgY29kZSBmb3IgImtleSIgdGhhdCBpbmNsdWRlcyB0aGUKKyAqIG1vZGlmaWVycyBzcGVjaWZpZWQuCisgKi8KKyAgICBpbnQKK3NpbXBsaWZ5X2tleShrZXksIG1vZGlmaWVycykKKyAgICBpbnQJICAgIGtleTsKKyAgICBpbnQJICAgICptb2RpZmllcnM7Cit7CisgICAgaW50CSAgICBpOworICAgIGludAkgICAga2V5MDsKKyAgICBpbnQJICAgIGtleTE7CisKKyAgICBpZiAoKm1vZGlmaWVycyAmIChNT0RfTUFTS19TSElGVCB8IE1PRF9NQVNLX0NUUkwgfCBNT0RfTUFTS19BTFQpKQorICAgIHsKKwkvKiBUQUIgaXMgYSBzcGVjaWFsIGNhc2UgKi8KKwlpZiAoa2V5ID09IFRBQiAmJiAoKm1vZGlmaWVycyAmIE1PRF9NQVNLX1NISUZUKSkKKwl7CisJICAgICptb2RpZmllcnMgJj0gfk1PRF9NQVNLX1NISUZUOworCSAgICByZXR1cm4gS19TX1RBQjsKKwl9CisJa2V5MCA9IEtFWTJURVJNQ0FQMChrZXkpOworCWtleTEgPSBLRVkyVEVSTUNBUDEoa2V5KTsKKwlmb3IgKGkgPSAwOyBtb2RpZmllcl9rZXlzX3RhYmxlW2ldICE9IE5VTDsgaSArPSBNT0RfS0VZU19FTlRSWV9TSVpFKQorCSAgICBpZiAoa2V5MCA9PSBtb2RpZmllcl9rZXlzX3RhYmxlW2kgKyAzXQorCQkgICAgJiYga2V5MSA9PSBtb2RpZmllcl9rZXlzX3RhYmxlW2kgKyA0XQorCQkgICAgJiYgKCptb2RpZmllcnMgJiBtb2RpZmllcl9rZXlzX3RhYmxlW2ldKSkKKwkgICAgeworCQkqbW9kaWZpZXJzICY9IH5tb2RpZmllcl9rZXlzX3RhYmxlW2ldOworCQlyZXR1cm4gVEVSTUNBUDJLRVkobW9kaWZpZXJfa2V5c190YWJsZVtpICsgMV0sCisJCQkJCQkgICBtb2RpZmllcl9rZXlzX3RhYmxlW2kgKyAyXSk7CisJICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGtleTsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyB3aGljaCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4ga2V5IHdoZW4gdGhlIGdpdmVuCisgKiBtb2RpZmllcnMgYXJlIGRvd24uCisgKi8KKyAgICBjaGFyX3UgKgorZ2V0X3NwZWNpYWxfa2V5X25hbWUoYywgbW9kaWZpZXJzKQorICAgIGludAkgICAgYzsKKyAgICBpbnQJICAgIG1vZGlmaWVyczsKK3sKKyAgICBzdGF0aWMgY2hhcl91IHN0cmluZ1tNQVhfS0VZX05BTUVfTEVOICsgMV07CisKKyAgICBpbnQJICAgIGksIGlkeDsKKyAgICBpbnQJICAgIHRhYmxlX2lkeDsKKyAgICBjaGFyX3UgICpzOworCisgICAgc3RyaW5nWzBdID0gJzwnOworICAgIGlkeCA9IDE7CisKKyAgICAvKiBLZXkgdGhhdCBzdGFuZHMgZm9yIGEgbm9ybWFsIGNoYXJhY3Rlci4gKi8KKyAgICBpZiAoSVNfU1BFQ0lBTChjKSAmJiBLRVkyVEVSTUNBUDAoYykgPT0gS1NfS0VZKQorCWMgPSBLRVkyVEVSTUNBUDEoYyk7CisKKyAgICAvKgorICAgICAqIFRyYW5zbGF0ZSBzaGlmdGVkIHNwZWNpYWwga2V5cyBpbnRvIHVuc2hpZnRlZCBrZXlzIGFuZCBzZXQgbW9kaWZpZXIuCisgICAgICogU2FtZSBmb3IgQ1RSTCBhbmQgQUxUIG1vZGlmaWVycy4KKyAgICAgKi8KKyAgICBpZiAoSVNfU1BFQ0lBTChjKSkKKyAgICB7CisJZm9yIChpID0gMDsgbW9kaWZpZXJfa2V5c190YWJsZVtpXSAhPSAwOyBpICs9IE1PRF9LRVlTX0VOVFJZX1NJWkUpCisJICAgIGlmICggICAgICAgS0VZMlRFUk1DQVAwKGMpID09IChpbnQpbW9kaWZpZXJfa2V5c190YWJsZVtpICsgMV0KKwkJICAgICYmIChpbnQpS0VZMlRFUk1DQVAxKGMpID09IChpbnQpbW9kaWZpZXJfa2V5c190YWJsZVtpICsgMl0pCisJICAgIHsKKwkJbW9kaWZpZXJzIHw9IG1vZGlmaWVyX2tleXNfdGFibGVbaV07CisJCWMgPSBURVJNQ0FQMktFWShtb2RpZmllcl9rZXlzX3RhYmxlW2kgKyAzXSwKKwkJCQkJCSAgIG1vZGlmaWVyX2tleXNfdGFibGVbaSArIDRdKTsKKwkJYnJlYWs7CisJICAgIH0KKyAgICB9CisKKyAgICAvKiB0cnkgdG8gZmluZCB0aGUga2V5IGluIHRoZSBzcGVjaWFsIGtleSB0YWJsZSAqLworICAgIHRhYmxlX2lkeCA9IGZpbmRfc3BlY2lhbF9rZXlfaW5fdGFibGUoYyk7CisKKyAgICAvKgorICAgICAqIFdoZW4gbm90IGEga25vd24gc3BlY2lhbCBrZXksIGFuZCBub3QgYSBwcmludGFibGUgY2hhcmFjdGVyLCB0cnkgdG8KKyAgICAgKiBleHRyYWN0IG1vZGlmaWVycy4KKyAgICAgKi8KKyAgICBpZiAoYyA+IDAKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgICYmICgqbWJfY2hhcjJsZW4pKGMpID09IDEKKyNlbmRpZgorICAgICAgICkKKyAgICB7CisJaWYgKHRhYmxlX2lkeCA8IDAKKwkJJiYgKCF2aW1faXNwcmludGMoYykgfHwgKGMgJiAweDdmKSA9PSAnICcpCisJCSYmIChjICYgMHg4MCkpCisJeworCSAgICBjICY9IDB4N2Y7CisJICAgIG1vZGlmaWVycyB8PSBNT0RfTUFTS19BTFQ7CisJICAgIC8qIHRyeSBhZ2FpbiwgdG8gZmluZCB0aGUgdW4tYWx0ZWQga2V5IGluIHRoZSBzcGVjaWFsIGtleSB0YWJsZSAqLworCSAgICB0YWJsZV9pZHggPSBmaW5kX3NwZWNpYWxfa2V5X2luX3RhYmxlKGMpOworCX0KKwlpZiAodGFibGVfaWR4IDwgMCAmJiAhdmltX2lzcHJpbnRjKGMpICYmIGMgPCAnICcpCisJeworI2lmZGVmIEVCQ0RJQworCSAgICBjID0gQ3RybENoYXIoYyk7CisjZWxzZQorCSAgICBjICs9ICdAJzsKKyNlbmRpZgorCSAgICBtb2RpZmllcnMgfD0gTU9EX01BU0tfQ1RSTDsKKwl9CisgICAgfQorCisgICAgLyogdHJhbnNsYXRlIHRoZSBtb2RpZmllciBpbnRvIGEgc3RyaW5nICovCisgICAgZm9yIChpID0gMDsgbW9kX21hc2tfdGFibGVbaV0ubmFtZSAhPSAnQSc7IGkrKykKKwlpZiAoKG1vZGlmaWVycyAmIG1vZF9tYXNrX3RhYmxlW2ldLm1vZF9tYXNrKQorCQkJCQkJPT0gbW9kX21hc2tfdGFibGVbaV0ubW9kX2ZsYWcpCisJeworCSAgICBzdHJpbmdbaWR4KytdID0gbW9kX21hc2tfdGFibGVbaV0ubmFtZTsKKwkgICAgc3RyaW5nW2lkeCsrXSA9IChjaGFyX3UpJy0nOworCX0KKworICAgIGlmICh0YWJsZV9pZHggPCAwKQkJLyogdW5rbm93biBzcGVjaWFsIGtleSwgbWF5IG91dHB1dCB0X3h4ICovCisgICAgeworCWlmIChJU19TUEVDSUFMKGMpKQorCXsKKwkgICAgc3RyaW5nW2lkeCsrXSA9ICd0JzsKKwkgICAgc3RyaW5nW2lkeCsrXSA9ICdfJzsKKwkgICAgc3RyaW5nW2lkeCsrXSA9IEtFWTJURVJNQ0FQMChjKTsKKwkgICAgc3RyaW5nW2lkeCsrXSA9IEtFWTJURVJNQ0FQMShjKTsKKwl9CisJLyogTm90IGEgc3BlY2lhbCBrZXksIG9ubHkgbW9kaWZpZXJzLCBvdXRwdXQgZGlyZWN0bHkgKi8KKwllbHNlCisJeworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSAmJiAoKm1iX2NoYXIybGVuKShjKSA+IDEpCisJCWlkeCArPSAoKm1iX2NoYXIyYnl0ZXMpKGMsIHN0cmluZyArIGlkeCk7CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICBpZiAodmltX2lzcHJpbnRjKGMpKQorCQlzdHJpbmdbaWR4KytdID0gYzsKKwkgICAgZWxzZQorCSAgICB7CisJCXMgPSB0cmFuc2NoYXIoYyk7CisJCXdoaWxlICgqcykKKwkJICAgIHN0cmluZ1tpZHgrK10gPSAqcysrOworCSAgICB9CisJfQorICAgIH0KKyAgICBlbHNlCQkvKiB1c2UgbmFtZSBvZiBzcGVjaWFsIGtleSAqLworICAgIHsKKwlTVFJDUFkoc3RyaW5nICsgaWR4LCBrZXlfbmFtZXNfdGFibGVbdGFibGVfaWR4XS5uYW1lKTsKKwlpZHggPSAoaW50KVNUUkxFTihzdHJpbmcpOworICAgIH0KKyAgICBzdHJpbmdbaWR4KytdID0gJz4nOworICAgIHN0cmluZ1tpZHhdID0gTlVMOworICAgIHJldHVybiBzdHJpbmc7Cit9CisKKy8qCisgKiBUcnkgdHJhbnNsYXRpbmcgYSA8PiBuYW1lIGF0ICgqc3JjcClbXSB0byBkc3RbXS4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWRkZWQgdG8gZHN0W10sIHplcm8gZm9yIG5vIG1hdGNoLgorICogSWYgdGhlcmUgaXMgYSBtYXRjaCwgc3JjcCBpcyBhZHZhbmNlZCB0byBhZnRlciB0aGUgPD4gbmFtZS4KKyAqIGRzdFtdIG11c3QgYmUgYmlnIGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQgKHVwIHRvIHNpeCBjaGFyYWN0ZXJzKSEKKyAqLworICAgIGludAordHJhbnNfc3BlY2lhbChzcmNwLCBkc3QsIGtleWNvZGUpCisgICAgY2hhcl91CSoqc3JjcDsKKyAgICBjaGFyX3UJKmRzdDsKKyAgICBpbnQJCWtleWNvZGU7IC8qIHByZWZlciBrZXkgY29kZSwgZS5nLiBLX0RFTCBpbnN0ZWFkIG9mIERFTCAqLworeworICAgIGludAkJbW9kaWZpZXJzID0gMDsKKyAgICBpbnQJCWtleTsKKyAgICBpbnQJCWRsZW4gPSAwOworCisgICAga2V5ID0gZmluZF9zcGVjaWFsX2tleShzcmNwLCAmbW9kaWZpZXJzLCBrZXljb2RlKTsKKyAgICBpZiAoa2V5ID09IDApCisJcmV0dXJuIDA7CisKKyAgICAvKiBQdXQgdGhlIGFwcHJvcHJpYXRlIG1vZGlmaWVyIGluIGEgc3RyaW5nICovCisgICAgaWYgKG1vZGlmaWVycyAhPSAwKQorICAgIHsKKwlkc3RbZGxlbisrXSA9IEtfU1BFQ0lBTDsKKwlkc3RbZGxlbisrXSA9IEtTX01PRElGSUVSOworCWRzdFtkbGVuKytdID0gbW9kaWZpZXJzOworICAgIH0KKworICAgIGlmIChJU19TUEVDSUFMKGtleSkpCisgICAgeworCWRzdFtkbGVuKytdID0gS19TUEVDSUFMOworCWRzdFtkbGVuKytdID0gS0VZMlRFUk1DQVAwKGtleSk7CisJZHN0W2RsZW4rK10gPSBLRVkyVEVSTUNBUDEoa2V5KTsKKyAgICB9CisjaWZkZWYgRkVBVF9NQllURQorICAgIGVsc2UgaWYgKGhhc19tYnl0ZSAmJiAha2V5Y29kZSkKKwlkbGVuICs9ICgqbWJfY2hhcjJieXRlcykoa2V5LCBkc3QgKyBkbGVuKTsKKyNlbmRpZgorICAgIGVsc2UgaWYgKGtleWNvZGUpCisJZGxlbiA9IChpbnQpKGFkZF9jaGFyMmJ1ZihrZXksIGRzdCArIGRsZW4pIC0gZHN0KTsKKyAgICBlbHNlCisJZHN0W2RsZW4rK10gPSBrZXk7CisKKyAgICByZXR1cm4gZGxlbjsKK30KKworLyoKKyAqIFRyeSB0cmFuc2xhdGluZyBhIDw+IG5hbWUgYXQgKCpzcmNwKVtdLCByZXR1cm4gdGhlIGtleSBhbmQgbW9kaWZpZXJzLgorICogc3JjcCBpcyBhZHZhbmNlZCB0byBhZnRlciB0aGUgPD4gbmFtZS4KKyAqIHJldHVybnMgMCBpZiB0aGVyZSBpcyBubyBtYXRjaC4KKyAqLworICAgIGludAorZmluZF9zcGVjaWFsX2tleShzcmNwLCBtb2RwLCBrZXljb2RlKQorICAgIGNoYXJfdQkqKnNyY3A7CisgICAgaW50CQkqbW9kcDsKKyAgICBpbnQJCWtleWNvZGU7IC8qIHByZWZlciBrZXkgY29kZSwgZS5nLiBLX0RFTCBpbnN0ZWFkIG9mIERFTCAqLworeworICAgIGNoYXJfdQkqbGFzdF9kYXNoOworICAgIGNoYXJfdQkqZW5kX29mX25hbWU7CisgICAgY2hhcl91CSpzcmM7CisgICAgY2hhcl91CSpicDsKKyAgICBpbnQJCW1vZGlmaWVyczsKKyAgICBpbnQJCWJpdDsKKyAgICBpbnQJCWtleTsKKyAgICBsb25nX3UJbjsKKworICAgIHNyYyA9ICpzcmNwOworICAgIGlmIChzcmNbMF0gIT0gJzwnKQorCXJldHVybiAwOworCisgICAgLyogRmluZCBlbmQgb2YgbW9kaWZpZXIgbGlzdCAqLworICAgIGxhc3RfZGFzaCA9IHNyYzsKKyAgICBmb3IgKGJwID0gc3JjICsgMTsgKmJwID09ICctJyB8fCB2aW1faXNJRGMoKmJwKTsgYnArKykKKyAgICB7CisJaWYgKCpicCA9PSAnLScpCisJeworCSAgICBsYXN0X2Rhc2ggPSBicDsKKwkgICAgaWYgKGJwWzFdICE9IE5VTCAmJiBicFsyXSA9PSAnPicpCisJCSsrYnA7CS8qIGFueXRoaW5nIGFjY2VwdGVkLCBsaWtlIDxDLT8+ICovCisJfQorCWlmIChicFswXSA9PSAndCcgJiYgYnBbMV0gPT0gJ18nICYmIGJwWzJdICYmIGJwWzNdKQorCSAgICBicCArPSAzOwkvKiBza2lwIHRfeHgsIHh4IG1heSBiZSAnLScgb3IgJz4nICovCisgICAgfQorCisgICAgaWYgKCpicCA9PSAnPicpCS8qIGZvdW5kIG1hdGNoaW5nICc+JyAqLworICAgIHsKKwllbmRfb2ZfbmFtZSA9IGJwICsgMTsKKworCWlmIChTVFJOSUNNUChzcmMgKyAxLCAiY2hhci0iLCA1KSA9PSAwICYmIFZJTV9JU0RJR0lUKHNyY1s2XSkpCisJeworCSAgICAvKiA8Q2hhci0xMjM+IG9yIDxDaGFyLTAzMz4gb3IgPENoYXItMHgzMz4gKi8KKwkgICAgdmltX3N0cjJucihzcmMgKyA2LCBOVUxMLCBOVUxMLCBUUlVFLCBUUlVFLCBOVUxMLCAmbik7CisJICAgICptb2RwID0gMDsKKwkgICAgKnNyY3AgPSBlbmRfb2ZfbmFtZTsKKwkgICAgcmV0dXJuIChpbnQpbjsKKwl9CisKKwkvKiBXaGljaCBtb2RpZmllcnMgYXJlIGdpdmVuPyAqLworCW1vZGlmaWVycyA9IDB4MDsKKwlmb3IgKGJwID0gc3JjICsgMTsgYnAgPCBsYXN0X2Rhc2g7IGJwKyspCisJeworCSAgICBpZiAoKmJwICE9ICctJykKKwkgICAgeworCQliaXQgPSBuYW1lX3RvX21vZF9tYXNrKCpicCk7CisJCWlmIChiaXQgPT0gMHgwKQorCQkgICAgYnJlYWs7CS8qIElsbGVnYWwgbW9kaWZpZXIgbmFtZSAqLworCQltb2RpZmllcnMgfD0gYml0OworCSAgICB9CisJfQorCisJLyoKKwkgKiBMZWdhbCBtb2RpZmllciBuYW1lLgorCSAqLworCWlmIChicCA+PSBsYXN0X2Rhc2gpCisJeworCSAgICAvKgorCSAgICAgKiBNb2RpZmllciB3aXRoIHNpbmdsZSBsZXR0ZXIsIG9yIHNwZWNpYWwga2V5IG5hbWUuCisJICAgICAqLworCSAgICBpZiAobW9kaWZpZXJzICE9IDAgJiYgbGFzdF9kYXNoWzJdID09ICc+JykKKwkJa2V5ID0gbGFzdF9kYXNoWzFdOworCSAgICBlbHNlCisJCWtleSA9IGdldF9zcGVjaWFsX2tleV9jb2RlKGxhc3RfZGFzaCArIDEpOworCisJICAgIC8qCisJICAgICAqIGdldF9zcGVjaWFsX2tleV9jb2RlKCkgbWF5IHJldHVybiBOVUwgZm9yIGludmFsaWQKKwkgICAgICogc3BlY2lhbCBrZXkgbmFtZS4KKwkgICAgICovCisJICAgIGlmIChrZXkgIT0gTlVMKQorCSAgICB7CisJCS8qCisJCSAqIE9ubHkgdXNlIGEgbW9kaWZpZXIgd2hlbiB0aGVyZSBpcyBubyBzcGVjaWFsIGtleSBjb2RlIHRoYXQKKwkJICogaW5jbHVkZXMgdGhlIG1vZGlmaWVyLgorCQkgKi8KKwkJa2V5ID0gc2ltcGxpZnlfa2V5KGtleSwgJm1vZGlmaWVycyk7CisKKwkJaWYgKCFrZXljb2RlKQorCQl7CisJCSAgICAvKiBkb24ndCB3YW50IGtleWNvZGUsIHVzZSBzaW5nbGUgYnl0ZSBjb2RlICovCisJCSAgICBpZiAoa2V5ID09IEtfQlMpCisJCQlrZXkgPSBCUzsKKwkJICAgIGVsc2UgaWYgKGtleSA9PSBLX0RFTCB8fCBrZXkgPT0gS19LREVMKQorCQkJa2V5ID0gREVMOworCQl9CisKKwkJLyoKKwkJICogTm9ybWFsIEtleSB3aXRoIG1vZGlmaWVyOiBUcnkgdG8gbWFrZSBhIHNpbmdsZSBieXRlIGNvZGUuCisJCSAqLworCQlpZiAoIUlTX1NQRUNJQUwoa2V5KSkKKwkJICAgIGtleSA9IGV4dHJhY3RfbW9kaWZpZXJzKGtleSwgJm1vZGlmaWVycyk7CisKKwkJKm1vZHAgPSBtb2RpZmllcnM7CisJCSpzcmNwID0gZW5kX29mX25hbWU7CisJCXJldHVybiBrZXk7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorICogVHJ5IHRvIGluY2x1ZGUgbW9kaWZpZXJzIGluIHRoZSBrZXkuCisgKiBDaGFuZ2VzICJTaGlmdC1hIiB0byAnQScsICJBbHQtQSIgdG8gMHhjMCwgZXRjLgorICovCisgICAgaW50CitleHRyYWN0X21vZGlmaWVycyhrZXksIG1vZHApCisgICAgaW50CSAgICBrZXk7CisgICAgaW50CSAgICAqbW9kcDsKK3sKKyAgICBpbnQJbW9kaWZpZXJzID0gKm1vZHA7CisKKyNpZmRlZiBNQUNPUworICAgIC8qIENvbW1hbmQta2V5IHJlYWxseSBzcGVjaWFsLCBObyBmYW5jeW5lc3QgKi8KKyAgICBpZiAoIShtb2RpZmllcnMgJiBNT0RfTUFTS19DTUQpKQorI2VuZGlmCisgICAgaWYgKChtb2RpZmllcnMgJiBNT0RfTUFTS19TSElGVCkgJiYgQVNDSUlfSVNBTFBIQShrZXkpKQorICAgIHsKKwlrZXkgPSBUT1VQUEVSX0FTQyhrZXkpOworCW1vZGlmaWVycyAmPSB+TU9EX01BU0tfU0hJRlQ7CisgICAgfQorICAgIGlmICgobW9kaWZpZXJzICYgTU9EX01BU0tfQ1RSTCkKKyNpZmRlZiBFQkNESUMKKwkgICAgLyogKiBUT0RPOiBFQkNESUMgQmV0dGVyIHVzZToKKwkgICAgICogJiYgKEN0cmxfY2hyKGtleSkgfHwga2V5ID09ICc/JykKKwkgICAgICogPz8/ICAqLworCSAgICAmJiBzdHJjaHIoIj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl8iLCBrZXkpCisJCQkJCQkgICAgICAgIT0gTlVMTAorI2Vsc2UKKwkgICAgJiYgKChrZXkgPj0gJz8nICYmIGtleSA8PSAnXycpIHx8IEFTQ0lJX0lTQUxQSEEoa2V5KSkKKyNlbmRpZgorCSAgICApCisgICAgeworCWtleSA9IEN0cmxfY2hyKGtleSk7CisJbW9kaWZpZXJzICY9IH5NT0RfTUFTS19DVFJMOworCS8qIDxDLUA+IGlzIDxOdWw+ICovCisJaWYgKGtleSA9PSAwKQorCSAgICBrZXkgPSBLX1pFUk87CisgICAgfQorI2lmZGVmIE1BQ09TCisgICAgLyogQ29tbWFuZC1rZXkgcmVhbGx5IHNwZWNpYWwsIE5vIGZhbmN5bmVzdCAqLworICAgIGlmICghKG1vZGlmaWVycyAmIE1PRF9NQVNLX0NNRCkpCisjZW5kaWYKKyAgICBpZiAoKG1vZGlmaWVycyAmIE1PRF9NQVNLX0FMVCkgJiYga2V5IDwgMHg4MAorI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgJiYgIWVuY19kYmNzCQkvKiBhdm9pZCBjcmVhdGluZyBhIGxlYWQgYnl0ZSAqLworI2VuZGlmCisJICAgICkKKyAgICB7CisJa2V5IHw9IDB4ODA7CisJbW9kaWZpZXJzICY9IH5NT0RfTUFTS19BTFQ7CS8qIHJlbW92ZSB0aGUgTUVUQSBtb2RpZmllciAqLworICAgIH0KKworICAgICptb2RwID0gbW9kaWZpZXJzOworICAgIHJldHVybiBrZXk7Cit9CisKKy8qCisgKiBUcnkgdG8gZmluZCBrZXkgImMiIGluIHRoZSBzcGVjaWFsIGtleSB0YWJsZS4KKyAqIFJldHVybiB0aGUgaW5kZXggd2hlbiBmb3VuZCwgLTEgd2hlbiBub3QgZm91bmQuCisgKi8KKyAgICBpbnQKK2ZpbmRfc3BlY2lhbF9rZXlfaW5fdGFibGUoYykKKyAgICBpbnQJICAgIGM7Cit7CisgICAgaW50CSAgICBpOworCisgICAgZm9yIChpID0gMDsga2V5X25hbWVzX3RhYmxlW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQorCWlmIChjID09IGtleV9uYW1lc190YWJsZVtpXS5rZXkpCisJICAgIGJyZWFrOworICAgIGlmIChrZXlfbmFtZXNfdGFibGVbaV0ubmFtZSA9PSBOVUxMKQorCWkgPSAtMTsKKyAgICByZXR1cm4gaTsKK30KKworLyoKKyAqIEZpbmQgdGhlIHNwZWNpYWwga2V5IHdpdGggdGhlIGdpdmVuIG5hbWUgKHRoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgaGF2ZSB0bworICogZW5kIHdpdGggTlVMLCB0aGUgbmFtZSBpcyBhc3N1bWVkIHRvIGVuZCBiZWZvcmUgdGhlIGZpcnN0IG5vbi1pZGNoYXIpLgorICogSWYgdGhlIG5hbWUgc3RhcnRzIHdpdGggInRfIiB0aGUgbmV4dCB0d28gY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgYQorICogdGVybWNhcCBuYW1lLgorICogUmV0dXJuIHRoZSBrZXkgY29kZSwgb3IgMCBpZiBub3QgZm91bmQuCisgKi8KKyAgICBpbnQKK2dldF9zcGVjaWFsX2tleV9jb2RlKG5hbWUpCisgICAgY2hhcl91ICAqbmFtZTsKK3sKKyAgICBjaGFyX3UgICp0YWJsZV9uYW1lOworICAgIGNoYXJfdSAgc3RyaW5nWzNdOworICAgIGludAkgICAgaSwgajsKKworICAgIC8qCisgICAgICogSWYgaXQncyA8dF94eD4gd2UgZ2V0IHRoZSBjb2RlIGZvciB4eCBmcm9tIHRoZSB0ZXJtY2FwCisgICAgICovCisgICAgaWYgKG5hbWVbMF0gPT0gJ3QnICYmIG5hbWVbMV0gPT0gJ18nICYmIG5hbWVbMl0gIT0gTlVMICYmIG5hbWVbM10gIT0gTlVMKQorICAgIHsKKwlzdHJpbmdbMF0gPSBuYW1lWzJdOworCXN0cmluZ1sxXSA9IG5hbWVbM107CisJc3RyaW5nWzJdID0gTlVMOworCWlmIChhZGRfdGVybWNhcF9lbnRyeShzdHJpbmcsIEZBTFNFKSA9PSBPSykKKwkgICAgcmV0dXJuIFRFUk1DQVAyS0VZKG5hbWVbMl0sIG5hbWVbM10pOworICAgIH0KKyAgICBlbHNlCisJZm9yIChpID0gMDsga2V5X25hbWVzX3RhYmxlW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQorCXsKKwkgICAgdGFibGVfbmFtZSA9IGtleV9uYW1lc190YWJsZVtpXS5uYW1lOworCSAgICBmb3IgKGogPSAwOyB2aW1faXNJRGMobmFtZVtqXSkgJiYgdGFibGVfbmFtZVtqXSAhPSBOVUw7IGorKykKKwkJaWYgKFRPTE9XRVJfQVNDKHRhYmxlX25hbWVbal0pICE9IFRPTE9XRVJfQVNDKG5hbWVbal0pKQorCQkgICAgYnJlYWs7CisJICAgIGlmICghdmltX2lzSURjKG5hbWVbal0pICYmIHRhYmxlX25hbWVbal0gPT0gTlVMKQorCQlyZXR1cm4ga2V5X25hbWVzX3RhYmxlW2ldLmtleTsKKwl9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBGRUFUX0NNRExfQ09NUEwKKyAgICBjaGFyX3UgKgorZ2V0X2tleV9uYW1lKGkpCisgICAgaW50CSAgICBpOworeworICAgIGlmIChpID49IEtFWV9OQU1FU19UQUJMRV9MRU4pCisJcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuICBrZXlfbmFtZXNfdGFibGVbaV0ubmFtZTsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NT1VTRQorLyoKKyAqIExvb2sgdXAgdGhlIGdpdmVuIG1vdXNlIGNvZGUgdG8gcmV0dXJuIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBpbiB0aGUgb3RoZXIKKyAqIGFyZ3VtZW50cy4gIFJldHVybiB3aGljaCBidXR0b24gaXMgZG93biBvciB3YXMgcmVsZWFzZWQuCisgKi8KKyAgICBpbnQKK2dldF9tb3VzZV9idXR0b24oY29kZSwgaXNfY2xpY2ssIGlzX2RyYWcpCisgICAgaW50CSAgICBjb2RlOworICAgIGludAkgICAgKmlzX2NsaWNrOworICAgIGludAkgICAgKmlzX2RyYWc7Cit7CisgICAgaW50CSAgICBpOworCisgICAgZm9yIChpID0gMDsgbW91c2VfdGFibGVbaV0ucHNldWRvX2NvZGU7IGkrKykKKwlpZiAoY29kZSA9PSBtb3VzZV90YWJsZVtpXS5wc2V1ZG9fY29kZSkKKwl7CisJICAgICppc19jbGljayA9IG1vdXNlX3RhYmxlW2ldLmlzX2NsaWNrOworCSAgICAqaXNfZHJhZyA9IG1vdXNlX3RhYmxlW2ldLmlzX2RyYWc7CisJICAgIHJldHVybiBtb3VzZV90YWJsZVtpXS5idXR0b247CisJfQorICAgIHJldHVybiAwOwkgICAgLyogU2hvdWxkbid0IGdldCBoZXJlICovCit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHBzZXVkbyBtb3VzZSBldmVudCB0b2tlbiAoS0VfTEVGVE1PVVNFIGV0YykgYmFzZWQgb24KKyAqIHRoZSBnaXZlbiBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBtb3VzZSBidXR0b24gaXMgZG93biwgYW5kIHdoZXRoZXIgdGhlCisgKiBtb3VzZSB3YXMgY2xpY2tlZCwgZHJhZ2dlZCBvciByZWxlYXNlZC4KKyAqLworICAgIGludAorZ2V0X3BzZXVkb19tb3VzZV9jb2RlKGJ1dHRvbiwgaXNfY2xpY2ssIGlzX2RyYWcpCisgICAgaW50CSAgICBidXR0b247CS8qIGVnIE1PVVNFX0xFRlQgKi8KKyAgICBpbnQJICAgIGlzX2NsaWNrOworICAgIGludAkgICAgaXNfZHJhZzsKK3sKKyAgICBpbnQJICAgIGk7CisKKyAgICBmb3IgKGkgPSAwOyBtb3VzZV90YWJsZVtpXS5wc2V1ZG9fY29kZTsgaSsrKQorCWlmIChidXR0b24gPT0gbW91c2VfdGFibGVbaV0uYnV0dG9uCisJICAgICYmIGlzX2NsaWNrID09IG1vdXNlX3RhYmxlW2ldLmlzX2NsaWNrCisJICAgICYmIGlzX2RyYWcgPT0gbW91c2VfdGFibGVbaV0uaXNfZHJhZykKKwl7CisjaWZkZWYgRkVBVF9HVUkKKwkgICAgLyogVHJpY2s6IGEgbm9uIG1hcHBhYmxlIGxlZnQgY2xpY2sgYW5kIHJlbGVhc2UgaGFzIG1vdXNlX2NvbCA8IDAuCisJICAgICAqIFVzZWQgZm9yICdtb3VzZWZvY3VzJyBpbiBndWlfbW91c2VfbW92ZWQoKSAqLworCSAgICBpZiAobW91c2VfY29sIDwgMCkKKwkgICAgeworCQltb3VzZV9jb2wgPSAwOworCQlpZiAobW91c2VfdGFibGVbaV0ucHNldWRvX2NvZGUgPT0gKGludClLRV9MRUZUTU9VU0UpCisJCSAgICByZXR1cm4gKGludClLRV9MRUZUTU9VU0VfTk07CisJCWlmIChtb3VzZV90YWJsZVtpXS5wc2V1ZG9fY29kZSA9PSAoaW50KUtFX0xFRlRSRUxFQVNFKQorCQkgICAgcmV0dXJuIChpbnQpS0VfTEVGVFJFTEVBU0VfTk07CisJICAgIH0KKyNlbmRpZgorCSAgICByZXR1cm4gbW91c2VfdGFibGVbaV0ucHNldWRvX2NvZGU7CisJfQorICAgIHJldHVybiAoaW50KUtFX0lHTk9SRTsJICAgIC8qIG5vdCByZWNvbmduaXplZCwgaWdub3JlIGl0ICovCit9CisjZW5kaWYgLyogRkVBVF9NT1VTRSAqLworCisvKgorICogUmV0dXJuIHRoZSBjdXJyZW50IGVuZC1vZi1saW5lIHR5cGU6IEVPTF9ET1MsIEVPTF9VTklYIG9yIEVPTF9NQUMuCisgKi8KKyAgICBpbnQKK2dldF9maWxlZm9ybWF0KGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIGludAkJYyA9ICpidWYtPmJfcF9mZjsKKworICAgIGlmIChidWYtPmJfcF9iaW4gfHwgYyA9PSAndScpCisJcmV0dXJuIEVPTF9VTklYOworICAgIGlmIChjID09ICdtJykKKwlyZXR1cm4gRU9MX01BQzsKKyAgICByZXR1cm4gRU9MX0RPUzsKK30KKworLyoKKyAqIExpa2UgZ2V0X2ZpbGVmb3JtYXQoKSwgYnV0IG92ZXJyaWRlICdmaWxlZm9ybWF0JyB3aXRoICJwIiBmb3IgIisrb3B0PXZhbCIKKyAqIGFyZ3VtZW50LgorICovCisgICAgaW50CitnZXRfZmlsZWZvcm1hdF9mb3JjZShidWYsIGVhcCkKKyAgICBidWZfVAkqYnVmOworICAgIGV4YXJnX1QJKmVhcDsJICAgIC8qIGNhbiBiZSBOVUxMISAqLworeworICAgIGludAkJYzsKKworICAgIGlmIChlYXAgIT0gTlVMTCAmJiBlYXAtPmZvcmNlX2ZmICE9IDApCisJYyA9IGVhcC0+Y21kW2VhcC0+Zm9yY2VfZmZdOworICAgIGVsc2UKKyAgICB7CisJaWYgKChlYXAgIT0gTlVMTCAmJiBlYXAtPmZvcmNlX2JpbiAhPSAwKQorCQkJICAgICAgID8gKGVhcC0+Zm9yY2VfYmluID09IEZPUkNFX0JJTikgOiBidWYtPmJfcF9iaW4pCisJICAgIHJldHVybiBFT0xfVU5JWDsKKwljID0gKmJ1Zi0+Yl9wX2ZmOworICAgIH0KKyAgICBpZiAoYyA9PSAndScpCisJcmV0dXJuIEVPTF9VTklYOworICAgIGlmIChjID09ICdtJykKKwlyZXR1cm4gRU9MX01BQzsKKyAgICByZXR1cm4gRU9MX0RPUzsKK30KKworLyoKKyAqIFNldCB0aGUgY3VycmVudCBlbmQtb2YtbGluZSB0eXBlIHRvIEVPTF9ET1MsIEVPTF9VTklYIG9yIEVPTF9NQUMuCisgKiBTZXRzIGJvdGggJ3RleHRtb2RlJyBhbmQgJ2ZpbGVmb3JtYXQnLgorICogTm90ZTogRG9lcyBfbm90XyBzZXQgZ2xvYmFsIHZhbHVlIG9mICd0ZXh0bW9kZSchCisgKi8KKyAgICB2b2lkCitzZXRfZmlsZWZvcm1hdCh0LCBvcHRfZmxhZ3MpCisgICAgaW50CQl0OworICAgIGludAkJb3B0X2ZsYWdzOwkvKiBPUFRfTE9DQUwgYW5kL29yIE9QVF9HTE9CQUwgKi8KK3sKKyAgICBjaGFyCSpwID0gTlVMTDsKKworICAgIHN3aXRjaCAodCkKKyAgICB7CisgICAgY2FzZSBFT0xfRE9TOgorCXAgPSBGRl9ET1M7CisJY3VyYnVmLT5iX3BfdHggPSBUUlVFOworCWJyZWFrOworICAgIGNhc2UgRU9MX1VOSVg6CisJcCA9IEZGX1VOSVg7CisJY3VyYnVmLT5iX3BfdHggPSBGQUxTRTsKKwlicmVhazsKKyAgICBjYXNlIEVPTF9NQUM6CisJcCA9IEZGX01BQzsKKwljdXJidWYtPmJfcF90eCA9IEZBTFNFOworCWJyZWFrOworICAgIH0KKyAgICBpZiAocCAhPSBOVUxMKQorCXNldF9zdHJpbmdfb3B0aW9uX2RpcmVjdCgoY2hhcl91ICopImZmIiwgLTEsIChjaGFyX3UgKilwLAorCQkJCQkJCU9QVF9GUkVFIHwgb3B0X2ZsYWdzKTsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBjaGVja19zdGF0dXMoY3VyYnVmKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfVElUTEUKKyAgICBuZWVkX21ha2V0aXRsZSA9IFRSVUU7CSAgICAvKiBzZXQgd2luZG93IHRpdGxlIGxhdGVyICovCisjZW5kaWYKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCBmaWxlZm9ybWF0IGZyb20gJ2ZpbGVmb3JtYXRzJy4KKyAqLworICAgIGludAorZGVmYXVsdF9maWxlZm9ybWF0KCkKK3sKKyAgICBzd2l0Y2ggKCpwX2ZmcykKKyAgICB7CisJY2FzZSAnbSc6ICAgcmV0dXJuIEVPTF9NQUM7CisJY2FzZSAnZCc6ICAgcmV0dXJuIEVPTF9ET1M7CisgICAgfQorICAgIHJldHVybiBFT0xfVU5JWDsKK30KKworLyoKKyAqIENhbGwgc2hlbGwuCUNhbGxzIG1jaF9jYWxsX3NoZWxsLCB3aXRoICdzaGVsbHhxdW90ZScgYWRkZWQuCisgKi8KKyAgICBpbnQKK2NhbGxfc2hlbGwoY21kLCBvcHQpCisgICAgY2hhcl91CSpjbWQ7CisgICAgaW50CQlvcHQ7Cit7CisgICAgY2hhcl91CSpuY21kOworICAgIGludAkJcmV0dmFsOworCisgICAgaWYgKHBfdmVyYm9zZSA+IDMpCisgICAgeworCW1zZ19zdHIoKGNoYXJfdSAqKV8oIkNhbGxpbmcgc2hlbGwgdG8gZXhlY3V0ZTogXCIlc1wiIiksCisJCQkJCQkgICAgY21kID09IE5VTEwgPyBwX3NoIDogY21kKTsKKwlvdXRfY2hhcignXG4nKTsKKwljdXJzb3Jfb24oKTsKKyAgICB9CisKKyAgICBpZiAoKnBfc2ggPT0gTlVMKQorICAgIHsKKwlFTVNHKF8oZV9zaGVsbGVtcHR5KSk7CisJcmV0dmFsID0gLTE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWZkZWYgRkVBVF9HVUlfTVNXSU4KKwkvKiBEb24ndCBoaWRlIHRoZSBwb2ludGVyIHdoaWxlIGV4ZWN1dGluZyBhIHNoZWxsIGNvbW1hbmQuICovCisJZ3VpX21jaF9tb3VzZWhpZGUoRkFMU0UpOworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUkKKwkrK2hvbGRfZ3VpX2V2ZW50czsKKyNlbmRpZgorCS8qIFRoZSBleHRlcm5hbCBjb21tYW5kIG1heSB1cGRhdGUgYSB0YWdzIGZpbGUsIGNsZWFyIGNhY2hlZCB0YWdzLiAqLworCXRhZ19mcmVlbWF0Y2goKTsKKworCWlmIChjbWQgPT0gTlVMTCB8fCAqcF9zeHEgPT0gTlVMKQorCSAgICByZXR2YWwgPSBtY2hfY2FsbF9zaGVsbChjbWQsIG9wdCk7CisJZWxzZQorCXsKKwkgICAgbmNtZCA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKGNtZCkgKyBTVFJMRU4ocF9zeHEpICogMiArIDEpKTsKKwkgICAgaWYgKG5jbWQgIT0gTlVMTCkKKwkgICAgeworCQlTVFJDUFkobmNtZCwgcF9zeHEpOworCQlTVFJDQVQobmNtZCwgY21kKTsKKwkJU1RSQ0FUKG5jbWQsIHBfc3hxKTsKKwkJcmV0dmFsID0gbWNoX2NhbGxfc2hlbGwobmNtZCwgb3B0KTsKKwkJdmltX2ZyZWUobmNtZCk7CisJICAgIH0KKwkgICAgZWxzZQorCQlyZXR2YWwgPSAtMTsKKwl9CisjaWZkZWYgRkVBVF9HVUkKKwktLWhvbGRfZ3VpX2V2ZW50czsKKyNlbmRpZgorCS8qCisJICogQ2hlY2sgdGhlIHdpbmRvdyBzaXplLCBpbiBjYXNlIGl0IGNoYW5nZWQgd2hpbGUgZXhlY3V0aW5nIHRoZQorCSAqIGV4dGVybmFsIGNvbW1hbmQuCisJICovCisJc2hlbGxfcmVzaXplZF9jaGVjaygpOworICAgIH0KKworI2lmZGVmIEZFQVRfRVZBTAorICAgIHNldF92aW1fdmFyX25yKFZWX1NIRUxMX0VSUk9SLCAobG9uZylyZXR2YWwpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVklTVUFMIGFuZCBPUF9QRU5ESU5HIFN0YXRlIGFyZSBuZXZlciBzZXQsIHRoZXkgYXJlIGVxdWFsIHRvIE5PUk1BTCBTdGF0ZQorICogd2l0aCBhIGNvbmRpdGlvbi4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVhbCBTdGF0ZS4KKyAqLworICAgIGludAorZ2V0X3JlYWxfc3RhdGUoKQoreworICAgIGlmIChTdGF0ZSAmIE5PUk1BTCkKKyAgICB7CisjaWZkZWYgRkVBVF9WSVNVQUwKKwlpZiAoVklzdWFsX2FjdGl2ZSkKKwkgICAgcmV0dXJuIFZJU1VBTDsKKwllbHNlCisjZW5kaWYKKwkgICAgaWYgKGZpbmlzaF9vcCkKKwkgICAgcmV0dXJuIE9QX1BFTkRJTkc7CisgICAgfQorICAgIHJldHVybiBTdGF0ZTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9TRVNTSU9OKSB8fCBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKEZFQVRfR1VJX01BQykgXAorCXx8IChkZWZpbmVkKEZFQVRfR1VJX0dUSykgXAorCQkJICAgICYmIChkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChGRUFUX0RORCkpKSBcCisJfHwgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkgfHwgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpIFwKKwl8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENoYW5nZSB0byBhIGZpbGUncyBkaXJlY3RvcnkuCisgKiBDYWxsZXIgbXVzdCBjYWxsIHNob3J0ZW5fZm5hbWVzKCkhCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIGludAordmltX2NoZGlyZmlsZShmbmFtZSkKKyAgICBjaGFyX3UJKmZuYW1lOworeworICAgIGNoYXJfdQl0ZW1wX3N0cmluZ1tNQVhQQVRITF07CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqdDsKKworICAgIFNUUkNQWSh0ZW1wX3N0cmluZywgZm5hbWUpOworICAgIHAgPSBnZXRfcGFzdF9oZWFkKHRlbXBfc3RyaW5nKTsKKyAgICB0ID0gZ2V0dGFpbCh0ZW1wX3N0cmluZyk7CisgICAgd2hpbGUgKHQgPiBwICYmIHZpbV9pc3BhdGhzZXAodFstMV0pKQorCS0tdDsKKyAgICAqdCA9IE5VTDsgLyogY2hvcCBvZmYgZW5kIG9mIHN0cmluZyAqLworCisgICAgcmV0dXJuIG1jaF9jaGRpcigoY2hhciAqKXRlbXBfc3RyaW5nKSA9PSAwID8gT0sgOiBGQUlMOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUQVRfSUdOT1JFU19TTEFTSCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDaGVjayBpZiAibmFtZSIgZW5kcyBpbiBhIHNsYXNoIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkuCisgKiBVc2VkIGZvciBzeXN0ZW1zIHdoZXJlIHN0YXQoKSBpZ25vcmVzIGEgdHJhaWxpbmcgc2xhc2ggb24gYSBmaWxlIG5hbWUuCisgKiBUaGUgVmltIGNvZGUgYXNzdW1lcyBhIHRyYWlsaW5nIHNsYXNoIGlzIG9ubHkgaWdub3JlZCBmb3IgYSBkaXJlY3RvcnkuCisgKi8KKyAgICBpbnQKK2lsbGVnYWxfc2xhc2gobmFtZSkKKyAgICBjaGFyICpuYW1lOworeworICAgIGlmIChuYW1lWzBdID09IE5VTCkKKwlyZXR1cm4gRkFMU0U7CSAgICAvKiBubyBmaWxlIG5hbWUgaXMgbm90IGlsbGVnYWwgKi8KKyAgICBpZiAobmFtZVtzdHJsZW4obmFtZSkgLSAxXSAhPSAnLycpCisJcmV0dXJuIEZBTFNFOwkgICAgLyogbm8gdHJhaWxpbmcgc2xhc2ggKi8KKyAgICBpZiAobWNoX2lzZGlyKChjaGFyX3UgKiluYW1lKSkKKwlyZXR1cm4gRkFMU0U7CSAgICAvKiB0cmFpbGluZyBzbGFzaCBmb3IgYSBkaXJlY3RvcnkgKi8KKyAgICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDVVJTT1JfU0hBUEUpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qCisgKiBIYW5kbGluZyBvZiBjdXJzb3IgYW5kIG1vdXNlIHBvaW50ZXIgc2hhcGVzIGluIHZhcmlvdXMgbW9kZXMuCisgKi8KKworY3Vyc29yZW50cnlfVCBzaGFwZV90YWJsZVtTSEFQRV9JRFhfQ09VTlRdID0KK3sKKyAgICAvKiBUaGUgdmFsdWVzIHdpbGwgYmUgZmlsbGVkIGluIGZyb20gdGhlICdndWljdXJzb3InIGFuZCAnbW91c2VzaGFwZScKKyAgICAgKiBkZWZhdWx0cyB3aGVuIFZpbSBzdGFydHMuCisgICAgICogQWRqdXN0IHRoZSBTSEFQRV9JRFhfIGRlZmluZXMgd2hlbiBtYWtpbmcgY2hhbmdlcyEgKi8KKyAgICB7MCwJMCwgMCwgNzAwTCwgNDAwTCwgMjUwTCwgMCwgMCwgIm4iLCBTSEFQRV9DVVJTT1IrU0hBUEVfTU9VU0V9LAorICAgIHswLAkwLCAwLCA3MDBMLCA0MDBMLCAyNTBMLCAwLCAwLCAidiIsIFNIQVBFX0NVUlNPUitTSEFQRV9NT1VTRX0sCisgICAgezAsCTAsIDAsIDcwMEwsIDQwMEwsIDI1MEwsIDAsIDAsICJpIiwgU0hBUEVfQ1VSU09SK1NIQVBFX01PVVNFfSwKKyAgICB7MCwJMCwgMCwgNzAwTCwgNDAwTCwgMjUwTCwgMCwgMCwgInIiLCBTSEFQRV9DVVJTT1IrU0hBUEVfTU9VU0V9LAorICAgIHswLAkwLCAwLCA3MDBMLCA0MDBMLCAyNTBMLCAwLCAwLCAiYyIsIFNIQVBFX0NVUlNPUitTSEFQRV9NT1VTRX0sCisgICAgezAsCTAsIDAsIDcwMEwsIDQwMEwsIDI1MEwsIDAsIDAsICJjaSIsIFNIQVBFX0NVUlNPUitTSEFQRV9NT1VTRX0sCisgICAgezAsCTAsIDAsIDcwMEwsIDQwMEwsIDI1MEwsIDAsIDAsICJjciIsIFNIQVBFX0NVUlNPUitTSEFQRV9NT1VTRX0sCisgICAgezAsCTAsIDAsIDcwMEwsIDQwMEwsIDI1MEwsIDAsIDAsICJvIiwgU0hBUEVfQ1VSU09SK1NIQVBFX01PVVNFfSwKKyAgICB7MCwJMCwgMCwgNzAwTCwgNDAwTCwgMjUwTCwgMCwgMCwgInZlIiwgU0hBUEVfQ1VSU09SK1NIQVBFX01PVVNFfSwKKyAgICB7MCwJMCwgMCwgICAwTCwgICAwTCwgICAwTCwgMCwgMCwgImUiLCBTSEFQRV9NT1VTRX0sCisgICAgezAsCTAsIDAsICAgMEwsICAgMEwsICAgMEwsIDAsIDAsICJzIiwgU0hBUEVfTU9VU0V9LAorICAgIHswLAkwLCAwLCAgIDBMLCAgIDBMLCAgIDBMLCAwLCAwLCAic2QiLCBTSEFQRV9NT1VTRX0sCisgICAgezAsCTAsIDAsICAgMEwsICAgMEwsICAgMEwsIDAsIDAsICJ2cyIsIFNIQVBFX01PVVNFfSwKKyAgICB7MCwJMCwgMCwgICAwTCwgICAwTCwgICAwTCwgMCwgMCwgInZkIiwgU0hBUEVfTU9VU0V9LAorICAgIHswLAkwLCAwLCAgIDBMLCAgIDBMLCAgIDBMLCAwLCAwLCAibSIsIFNIQVBFX01PVVNFfSwKKyAgICB7MCwJMCwgMCwgICAwTCwgICAwTCwgICAwTCwgMCwgMCwgIm1sIiwgU0hBUEVfTU9VU0V9LAorICAgIHswLAkwLCAwLCAxMDBMLCAxMDBMLCAxMDBMLCAwLCAwLCAic20iLCBTSEFQRV9DVVJTT1J9LAorfTsKKworI2lmZGVmIEZFQVRfTU9VU0VTSEFQRQorLyoKKyAqIFRhYmxlIHdpdGggbmFtZXMgZm9yIG1vdXNlIHNoYXBlcy4gIEtlZXAgaW4gc3luYyB3aXRoIGFsbCB0aGUgdGFibGVzIGZvcgorICogbWNoX3NldF9tb3VzZV9zaGFwZSgpIS4KKyAqLworc3RhdGljIGNoYXIgKiBtc2hhcGVfbmFtZXNbXSA9Cit7CisgICAgImFycm93IiwJLyogZGVmYXVsdCwgbXVzdCBiZSB0aGUgZmlyc3Qgb25lICovCisgICAgImJsYW5rIiwJLyogaGlkZGVuICovCisgICAgImJlYW0iLAorICAgICJ1cGRvd24iLAorICAgICJ1ZHNpemluZyIsCisgICAgImxlZnRyaWdodCIsCisgICAgImxyc2l6aW5nIiwKKyAgICAiYnVzeSIsCisgICAgIm5vIiwKKyAgICAiY3Jvc3NoYWlyIiwKKyAgICAiaGFuZDEiLAorICAgICJoYW5kMiIsCisgICAgInBlbmNpbCIsCisgICAgInF1ZXN0aW9uIiwKKyAgICAicmlnaHR1cC1hcnJvdyIsCisgICAgInVwLWFycm93IiwKKyAgICBOVUxMCit9OworI2VuZGlmCisKKy8qCisgKiBQYXJzZSB0aGUgJ2d1aWN1cnNvcicgb3B0aW9uICgid2hhdCIgaXMgU0hBUEVfQ1VSU09SKSBvciAnbW91c2VzaGFwZScKKyAqICgid2hhdCIgaXMgU0hBUEVfTU9VU0UpLgorICogUmV0dXJucyBlcnJvciBtZXNzYWdlIGZvciBhbiBpbGxlZ2FsIG9wdGlvbiwgTlVMTCBvdGhlcndpc2UuCisgKi8KKyAgICBjaGFyX3UgKgorcGFyc2Vfc2hhcGVfb3B0KHdoYXQpCisgICAgaW50CQl3aGF0OworeworICAgIGNoYXJfdQkqbW9kZXA7CisgICAgY2hhcl91CSpjb2xvbnA7CisgICAgY2hhcl91CSpjb21tYXA7CisgICAgY2hhcl91CSpzbGFzaHA7CisgICAgY2hhcl91CSpwLCAqZW5kcDsKKyAgICBpbnQJCWlkeCA9IDA7CQkvKiBpbml0IGZvciBHQ0MgKi8KKyAgICBpbnQJCWFsbF9pZHg7CisgICAgaW50CQlsZW47CisgICAgaW50CQlpOworICAgIGxvbmcJbjsKKyAgICBpbnQJCWZvdW5kX3ZlID0gRkFMU0U7CS8qIGZvdW5kICJ2ZSIgZmxhZyAqLworICAgIGludAkJcm91bmQ7CisKKyAgICAvKgorICAgICAqIEZpcnN0IHJvdW5kOiBjaGVjayBmb3IgZXJyb3JzOyBzZWNvbmQgcm91bmQ6IGRvIGl0IGZvciByZWFsLgorICAgICAqLworICAgIGZvciAocm91bmQgPSAxOyByb3VuZCA8PSAyOyArK3JvdW5kKQorICAgIHsKKwkvKgorCSAqIFJlcGVhdCBmb3IgYWxsIGNvbW1hIHNlcGFyYXRlZCBwYXJ0cy4KKwkgKi8KKyNpZmRlZiBGRUFUX01PVVNFU0hBUEUKKwlpZiAod2hhdCA9PSBTSEFQRV9NT1VTRSkKKwkgICAgbW9kZXAgPSBwX21vdXNlc2hhcGU7CisJZWxzZQorI2VuZGlmCisJICAgIG1vZGVwID0gcF9ndWljdXJzb3I7CisJd2hpbGUgKCptb2RlcCAhPSBOVUwpCisJeworCSAgICBjb2xvbnAgPSB2aW1fc3RyY2hyKG1vZGVwLCAnOicpOworCSAgICBpZiAoY29sb25wID09IE5VTEwpCisJCXJldHVybiAoY2hhcl91ICopTl8oIkU1NDU6IE1pc3NpbmcgY29sb24iKTsKKwkgICAgaWYgKGNvbG9ucCA9PSBtb2RlcCkKKwkJcmV0dXJuIChjaGFyX3UgKilOXygiRTU0NjogSWxsZWdhbCBtb2RlIik7CisJICAgIGNvbW1hcCA9IHZpbV9zdHJjaHIobW9kZXAsICcsJyk7CisKKwkgICAgLyoKKwkgICAgICogUmVwZWF0IGZvciBhbGwgbW9kZSdzIGJlZm9yZSB0aGUgY29sb24uCisJICAgICAqIEZvciB0aGUgJ2EnIG1vZGUsIHdlIGxvb3AgdG8gaGFuZGxlIGFsbCB0aGUgbW9kZXMuCisJICAgICAqLworCSAgICBhbGxfaWR4ID0gLTE7CisJICAgIHdoaWxlIChtb2RlcCA8IGNvbG9ucCB8fCBhbGxfaWR4ID49IDApCisJICAgIHsKKwkJaWYgKGFsbF9pZHggPCAwKQorCQl7CisJCSAgICAvKiBGaW5kIHRoZSBtb2RlLiAqLworCQkgICAgaWYgKG1vZGVwWzFdID09ICctJyB8fCBtb2RlcFsxXSA9PSAnOicpCisJCQlsZW4gPSAxOworCQkgICAgZWxzZQorCQkJbGVuID0gMjsKKwkJICAgIGlmIChsZW4gPT0gMSAmJiBUT0xPV0VSX0FTQyhtb2RlcFswXSkgPT0gJ2EnKQorCQkJYWxsX2lkeCA9IFNIQVBFX0lEWF9DT1VOVCAtIDE7CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IFNIQVBFX0lEWF9DT1VOVDsgKytpZHgpCisJCQkgICAgaWYgKFNUUk5JQ01QKG1vZGVwLCBzaGFwZV90YWJsZVtpZHhdLm5hbWUsIGxlbikKKwkJCQkJCQkJCSA9PSAwKQorCQkJCWJyZWFrOworCQkJaWYgKGlkeCA9PSBTSEFQRV9JRFhfQ09VTlQKKwkJCQkgICB8fCAoc2hhcGVfdGFibGVbaWR4XS51c2VkX2ZvciAmIHdoYXQpID09IDApCisJCQkgICAgcmV0dXJuIChjaGFyX3UgKilOXygiRTU0NjogSWxsZWdhbCBtb2RlIik7CisJCQlpZiAobGVuID09IDIgJiYgbW9kZXBbMF0gPT0gJ3YnICYmIG1vZGVwWzFdID09ICdlJykKKwkJCSAgICBmb3VuZF92ZSA9IFRSVUU7CisJCSAgICB9CisJCSAgICBtb2RlcCArPSBsZW4gKyAxOworCQl9CisKKwkJaWYgKGFsbF9pZHggPj0gMCkKKwkJICAgIGlkeCA9IGFsbF9pZHgtLTsKKwkJZWxzZSBpZiAocm91bmQgPT0gMikKKwkJeworI2lmZGVmIEZFQVRfTU9VU0VTSEFQRQorCQkgICAgaWYgKHdoYXQgPT0gU0hBUEVfTU9VU0UpCisJCSAgICB7CisJCQkvKiBTZXQgdGhlIGRlZmF1bHQsIGZvciB0aGUgbWlzc2luZyBwYXJ0cyAqLworCQkJc2hhcGVfdGFibGVbaWR4XS5tc2hhcGUgPSAwOworCQkgICAgfQorCQkgICAgZWxzZQorI2VuZGlmCisJCSAgICB7CisJCQkvKiBTZXQgdGhlIGRlZmF1bHRzLCBmb3IgdGhlIG1pc3NpbmcgcGFydHMgKi8KKwkJCXNoYXBlX3RhYmxlW2lkeF0uc2hhcGUgPSBTSEFQRV9CTE9DSzsKKwkJCXNoYXBlX3RhYmxlW2lkeF0uYmxpbmt3YWl0ID0gNzAwTDsKKwkJCXNoYXBlX3RhYmxlW2lkeF0uYmxpbmtvbiA9IDQwMEw7CisJCQlzaGFwZV90YWJsZVtpZHhdLmJsaW5rb2ZmID0gMjUwTDsKKwkJICAgIH0KKwkJfQorCisJCS8qIFBhcnNlIHRoZSBwYXJ0IGFmdGVyIHRoZSBjb2xvbiAqLworCQlmb3IgKHAgPSBjb2xvbnAgKyAxOyAqcCAmJiAqcCAhPSAnLCc7ICkKKwkJeworI2lmZGVmIEZFQVRfTU9VU0VTSEFQRQorCQkgICAgaWYgKHdoYXQgPT0gU0hBUEVfTU9VU0UpCisJCSAgICB7CisJCQlmb3IgKGkgPSAwOyA7ICsraSkKKwkJCXsKKwkJCSAgICBpZiAobXNoYXBlX25hbWVzW2ldID09IE5VTEwpCisJCQkgICAgeworCQkJCWlmICghVklNX0lTRElHSVQoKnApKQorCQkJCSAgICByZXR1cm4gKGNoYXJfdSAqKU5fKCJFNTQ3OiBJbGxlZ2FsIG1vdXNlc2hhcGUiKTsKKwkJCQlpZiAocm91bmQgPT0gMikKKwkJCQkgICAgc2hhcGVfdGFibGVbaWR4XS5tc2hhcGUgPQorCQkJCQkgICAgICBnZXRkaWdpdHMoJnApICsgTVNIQVBFX05VTUJFUkVEOworCQkJCWVsc2UKKwkJCQkgICAgKHZvaWQpZ2V0ZGlnaXRzKCZwKTsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQkgICAgbGVuID0gKGludClTVFJMRU4obXNoYXBlX25hbWVzW2ldKTsKKwkJCSAgICBpZiAoU1RSTklDTVAocCwgbXNoYXBlX25hbWVzW2ldLCBsZW4pID09IDApCisJCQkgICAgeworCQkJCWlmIChyb3VuZCA9PSAyKQorCQkJCSAgICBzaGFwZV90YWJsZVtpZHhdLm1zaGFwZSA9IGk7CisJCQkJcCArPSBsZW47CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQkgICAgZWxzZSAvKiBpZiAod2hhdCA9PSBTSEFQRV9NT1VTRSkgKi8KKyNlbmRpZgorCQkgICAgeworCQkJLyoKKwkJCSAqIEZpcnN0IGhhbmRsZSB0aGUgb25lcyB3aXRoIGEgbnVtYmVyIGFyZ3VtZW50LgorCQkJICovCisJCQlpID0gKnA7CisJCQlsZW4gPSAwOworCQkJaWYgKFNUUk5JQ01QKHAsICJ2ZXIiLCAzKSA9PSAwKQorCQkJICAgIGxlbiA9IDM7CisJCQllbHNlIGlmIChTVFJOSUNNUChwLCAiaG9yIiwgMykgPT0gMCkKKwkJCSAgICBsZW4gPSAzOworCQkJZWxzZSBpZiAoU1RSTklDTVAocCwgImJsaW5rd2FpdCIsIDkpID09IDApCisJCQkgICAgbGVuID0gOTsKKwkJCWVsc2UgaWYgKFNUUk5JQ01QKHAsICJibGlua29uIiwgNykgPT0gMCkKKwkJCSAgICBsZW4gPSA3OworCQkJZWxzZSBpZiAoU1RSTklDTVAocCwgImJsaW5rb2ZmIiwgOCkgPT0gMCkKKwkJCSAgICBsZW4gPSA4OworCQkJaWYgKGxlbiAhPSAwKQorCQkJeworCQkJICAgIHAgKz0gbGVuOworCQkJICAgIGlmICghVklNX0lTRElHSVQoKnApKQorCQkJCXJldHVybiAoY2hhcl91ICopTl8oIkU1NDg6IGRpZ2l0IGV4cGVjdGVkIik7CisJCQkgICAgbiA9IGdldGRpZ2l0cygmcCk7CisJCQkgICAgaWYgKGxlbiA9PSAzKSAgIC8qICJ2ZXIiIG9yICJob3IiICovCisJCQkgICAgeworCQkJCWlmIChuID09IDApCisJCQkJICAgIHJldHVybiAoY2hhcl91ICopTl8oIkU1NDk6IElsbGVnYWwgcGVyY2VudGFnZSIpOworCQkJCWlmIChyb3VuZCA9PSAyKQorCQkJCXsKKwkJCQkgICAgaWYgKFRPTE9XRVJfQVNDKGkpID09ICd2JykKKwkJCQkJc2hhcGVfdGFibGVbaWR4XS5zaGFwZSA9IFNIQVBFX1ZFUjsKKwkJCQkgICAgZWxzZQorCQkJCQlzaGFwZV90YWJsZVtpZHhdLnNoYXBlID0gU0hBUEVfSE9SOworCQkJCSAgICBzaGFwZV90YWJsZVtpZHhdLnBlcmNlbnRhZ2UgPSBuOworCQkJCX0KKwkJCSAgICB9CisJCQkgICAgZWxzZSBpZiAocm91bmQgPT0gMikKKwkJCSAgICB7CisJCQkJaWYgKGxlbiA9PSA5KQorCQkJCSAgICBzaGFwZV90YWJsZVtpZHhdLmJsaW5rd2FpdCA9IG47CisJCQkJZWxzZSBpZiAobGVuID09IDcpCisJCQkJICAgIHNoYXBlX3RhYmxlW2lkeF0uYmxpbmtvbiA9IG47CisJCQkJZWxzZQorCQkJCSAgICBzaGFwZV90YWJsZVtpZHhdLmJsaW5rb2ZmID0gbjsKKwkJCSAgICB9CisJCQl9CisJCQllbHNlIGlmIChTVFJOSUNNUChwLCAiYmxvY2siLCA1KSA9PSAwKQorCQkJeworCQkJICAgIGlmIChyb3VuZCA9PSAyKQorCQkJCXNoYXBlX3RhYmxlW2lkeF0uc2hhcGUgPSBTSEFQRV9CTE9DSzsKKwkJCSAgICBwICs9IDU7CisJCQl9CisJCQllbHNlCS8qIG11c3QgYmUgYSBoaWdobGlnaHQgZ3JvdXAgbmFtZSB0aGVuICovCisJCQl7CisJCQkgICAgZW5kcCA9IHZpbV9zdHJjaHIocCwgJy0nKTsKKwkJCSAgICBpZiAoY29tbWFwID09IE5VTEwpCQkgICAgLyogbGFzdCBwYXJ0ICovCisJCQkgICAgeworCQkJCWlmIChlbmRwID09IE5VTEwpCisJCQkJICAgIGVuZHAgPSBwICsgU1RSTEVOKHApOyAgIC8qIGZpbmQgZW5kIG9mIHBhcnQgKi8KKwkJCSAgICB9CisJCQkgICAgZWxzZSBpZiAoZW5kcCA+IGNvbW1hcCB8fCBlbmRwID09IE5VTEwpCisJCQkJZW5kcCA9IGNvbW1hcDsKKwkJCSAgICBzbGFzaHAgPSB2aW1fc3RyY2hyKHAsICcvJyk7CisJCQkgICAgaWYgKHNsYXNocCAhPSBOVUxMICYmIHNsYXNocCA8IGVuZHApCisJCQkgICAgeworCQkJCS8qICJncm91cC9sYW5nbWFwX2dyb3VwIiAqLworCQkJCWkgPSBzeW5fY2hlY2tfZ3JvdXAocCwgKGludCkoc2xhc2hwIC0gcCkpOworCQkJCXAgPSBzbGFzaHAgKyAxOworCQkJICAgIH0KKwkJCSAgICBpZiAocm91bmQgPT0gMikKKwkJCSAgICB7CisJCQkJc2hhcGVfdGFibGVbaWR4XS5pZCA9IHN5bl9jaGVja19ncm91cChwLAorCQkJCQkJCSAgICAgKGludCkoZW5kcCAtIHApKTsKKwkJCQlzaGFwZV90YWJsZVtpZHhdLmlkX2xtID0gc2hhcGVfdGFibGVbaWR4XS5pZDsKKwkJCQlpZiAoc2xhc2hwICE9IE5VTEwgJiYgc2xhc2hwIDwgZW5kcCkKKwkJCQkgICAgc2hhcGVfdGFibGVbaWR4XS5pZCA9IGk7CisJCQkgICAgfQorCQkJICAgIHAgPSBlbmRwOworCQkJfQorCQkgICAgfSAvKiBpZiAod2hhdCAhPSBTSEFQRV9NT1VTRSkgKi8KKworCQkgICAgaWYgKCpwID09ICctJykKKwkJCSsrcDsKKwkJfQorCSAgICB9CisJICAgIG1vZGVwID0gcDsKKwkgICAgaWYgKCptb2RlcCA9PSAnLCcpCisJCSsrbW9kZXA7CisJfQorICAgIH0KKworICAgIC8qIElmIHRoZSAncycgZmxhZyBpcyBub3QgZ2l2ZW4sIHVzZSB0aGUgJ3YnIGN1cnNvciBmb3IgJ3MnICovCisgICAgaWYgKCFmb3VuZF92ZSkKKyAgICB7CisjaWZkZWYgRkVBVF9NT1VTRVNIQVBFCisJaWYgKHdoYXQgPT0gU0hBUEVfTU9VU0UpCisJeworCSAgICBzaGFwZV90YWJsZVtTSEFQRV9JRFhfVkVdLm1zaGFwZSA9IHNoYXBlX3RhYmxlW1NIQVBFX0lEWF9WXS5tc2hhcGU7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgc2hhcGVfdGFibGVbU0hBUEVfSURYX1ZFXS5zaGFwZSA9IHNoYXBlX3RhYmxlW1NIQVBFX0lEWF9WXS5zaGFwZTsKKwkgICAgc2hhcGVfdGFibGVbU0hBUEVfSURYX1ZFXS5wZXJjZW50YWdlID0KKwkJCQkJIHNoYXBlX3RhYmxlW1NIQVBFX0lEWF9WXS5wZXJjZW50YWdlOworCSAgICBzaGFwZV90YWJsZVtTSEFQRV9JRFhfVkVdLmJsaW5rd2FpdCA9CisJCQkJCSAgc2hhcGVfdGFibGVbU0hBUEVfSURYX1ZdLmJsaW5rd2FpdDsKKwkgICAgc2hhcGVfdGFibGVbU0hBUEVfSURYX1ZFXS5ibGlua29uID0KKwkJCQkJICAgIHNoYXBlX3RhYmxlW1NIQVBFX0lEWF9WXS5ibGlua29uOworCSAgICBzaGFwZV90YWJsZVtTSEFQRV9JRFhfVkVdLmJsaW5rb2ZmID0KKwkJCQkJICAgc2hhcGVfdGFibGVbU0hBUEVfSURYX1ZdLmJsaW5rb2ZmOworCSAgICBzaGFwZV90YWJsZVtTSEFQRV9JRFhfVkVdLmlkID0gc2hhcGVfdGFibGVbU0hBUEVfSURYX1ZdLmlkOworCSAgICBzaGFwZV90YWJsZVtTSEFQRV9JRFhfVkVdLmlkX2xtID0gc2hhcGVfdGFibGVbU0hBUEVfSURYX1ZdLmlkX2xtOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgaW5kZXggaW50byBzaGFwZV90YWJsZVtdIGZvciB0aGUgY3VycmVudCBtb2RlLgorICogV2hlbiAibW91c2UiIGlzIFRSVUUsIGNvbnNpZGVyIGluZGV4ZXMgdmFsaWQgZm9yIHRoZSBtb3VzZSBwb2ludGVyLgorICovCisgICAgaW50CitnZXRfc2hhcGVfaWR4KG1vdXNlKQorICAgIGludAltb3VzZTsKK3sKKyNpZmRlZiBGRUFUX01PVVNFU0hBUEUKKyAgICBpZiAobW91c2UgJiYgKFN0YXRlID09IEhJVFJFVFVSTiB8fCBTdGF0ZSA9PSBBU0tNT1JFKSkKKyAgICB7CisjIGlmZGVmIEZFQVRfR1VJCisJaWYgKFlfMl9ST1coZ3VpX21jaF9nZXRfbW91c2VfeSgpKSA9PSBSb3dzIC0gMSkKKwkgICAgcmV0dXJuIFNIQVBFX0lEWF9NT1JFTDsKKyMgZW5kaWYKKwlyZXR1cm4gU0hBUEVfSURYX01PUkU7CisgICAgfQorICAgIGlmIChtb3VzZSAmJiBkcmFnX3N0YXR1c19saW5lKQorCXJldHVybiBTSEFQRV9JRFhfU0RSQUc7CisjIGlmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaWYgKG1vdXNlICYmIGRyYWdfc2VwX2xpbmUpCisJcmV0dXJuIFNIQVBFX0lEWF9WRFJBRzsKKyMgZW5kaWYKKyNlbmRpZgorICAgIGlmICghbW91c2UgJiYgU3RhdGUgPT0gU0hPV01BVENIKQorCXJldHVybiBTSEFQRV9JRFhfU007CisjaWZkZWYgRkVBVF9WUkVQTEFDRQorICAgIGlmIChTdGF0ZSAmIFZSRVBMQUNFX0ZMQUcpCisJcmV0dXJuIFNIQVBFX0lEWF9SOworI2VuZGlmCisgICAgaWYgKFN0YXRlICYgUkVQTEFDRV9GTEFHKQorCXJldHVybiBTSEFQRV9JRFhfUjsKKyAgICBpZiAoU3RhdGUgJiBJTlNFUlQpCisJcmV0dXJuIFNIQVBFX0lEWF9JOworICAgIGlmIChTdGF0ZSAmIENNRExJTkUpCisgICAgeworCWlmIChjbWRsaW5lX2F0X2VuZCgpKQorCSAgICByZXR1cm4gU0hBUEVfSURYX0M7CisJaWYgKGNtZGxpbmVfb3ZlcnN0cmlrZSgpKQorCSAgICByZXR1cm4gU0hBUEVfSURYX0NSOworCXJldHVybiBTSEFQRV9JRFhfQ0k7CisgICAgfQorICAgIGlmIChmaW5pc2hfb3ApCisJcmV0dXJuIFNIQVBFX0lEWF9POworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKFZJc3VhbF9hY3RpdmUpCisgICAgeworCWlmICgqcF9zZWwgPT0gJ2UnKQorCSAgICByZXR1cm4gU0hBUEVfSURYX1ZFOworCWVsc2UKKwkgICAgcmV0dXJuIFNIQVBFX0lEWF9WOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBTSEFQRV9JRFhfTjsKK30KKworIyBpZiBkZWZpbmVkKEZFQVRfTU9VU0VTSEFQRSkgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBpbnQgb2xkX21vdXNlX3NoYXBlID0gMDsKKworLyoKKyAqIFNldCB0aGUgbW91c2Ugc2hhcGU6CisgKiBJZiAic2hhcGUiIGlzIC0xLCB1c2Ugc2hhcGUgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IG1vZGUsCisgKiBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3RhdGUuCisgKiBJZiAic2hhcGUiIGlzIC0yLCBvbmx5IHVwZGF0ZSB0aGUgc2hhcGUgd2hlbiBpdCdzIENMSU5FIG9yIFNUQVRVUyAodXNlZAorICogd2hlbiB0aGUgbW91c2UgbW92ZXMgb2ZmIHRoZSBzdGF0dXMgb3IgY29tbWFuZCBsaW5lKS4KKyAqLworICAgIHZvaWQKK3VwZGF0ZV9tb3VzZXNoYXBlKHNoYXBlX2lkeCkKKyAgICBpbnQJc2hhcGVfaWR4OworeworICAgIGludCBuZXdfbW91c2Vfc2hhcGU7CisKKyAgICAvKiBPbmx5IHdvcmtzIGluIEdVSSBtb2RlLiAqLworICAgIGlmICghZ3VpLmluX3VzZSkKKwlyZXR1cm47CisKKyAgICAvKiBQb3N0cG9uZSB0aGUgdXBkYXRpbmcgd2hlbiBtb3JlIGlzIHRvIGNvbWUuICBTcGVlZHMgdXAgZXhlY3V0aW5nIG9mCisgICAgICogbWFwcGluZ3MuICovCisgICAgaWYgKHNoYXBlX2lkeCA9PSAtMSAmJiBjaGFyX2F2YWlsKCkpCisgICAgeworCXBvc3Rwb25lZF9tb3VzZXNoYXBlID0gVFJVRTsKKwlyZXR1cm47CisgICAgfQorCisgICAgaWYgKHNoYXBlX2lkeCA9PSAtMgorCSAgICAmJiBvbGRfbW91c2Vfc2hhcGUgIT0gc2hhcGVfdGFibGVbU0hBUEVfSURYX0NMSU5FXS5tc2hhcGUKKwkgICAgJiYgb2xkX21vdXNlX3NoYXBlICE9IHNoYXBlX3RhYmxlW1NIQVBFX0lEWF9TVEFUVVNdLm1zaGFwZQorCSAgICAmJiBvbGRfbW91c2Vfc2hhcGUgIT0gc2hhcGVfdGFibGVbU0hBUEVfSURYX1ZTRVBdLm1zaGFwZSkKKwlyZXR1cm47CisgICAgaWYgKHNoYXBlX2lkeCA8IDApCisJbmV3X21vdXNlX3NoYXBlID0gc2hhcGVfdGFibGVbZ2V0X3NoYXBlX2lkeChUUlVFKV0ubXNoYXBlOworICAgIGVsc2UKKwluZXdfbW91c2Vfc2hhcGUgPSBzaGFwZV90YWJsZVtzaGFwZV9pZHhdLm1zaGFwZTsKKyAgICBpZiAobmV3X21vdXNlX3NoYXBlICE9IG9sZF9tb3VzZV9zaGFwZSkKKyAgICB7CisJbWNoX3NldF9tb3VzZV9zaGFwZShuZXdfbW91c2Vfc2hhcGUpOworCW9sZF9tb3VzZV9zaGFwZSA9IG5ld19tb3VzZV9zaGFwZTsKKyAgICB9CisgICAgcG9zdHBvbmVkX21vdXNlc2hhcGUgPSBGQUxTRTsKK30KKyMgZW5kaWYKKworI2VuZGlmIC8qIENVUlNPUl9TSEFQRSAqLworCisKKyNpZmRlZiBGRUFUX0NSWVBUCisvKgorICogT3B0aW9uYWwgZW5jcnlwdGlvbiBzdXlwcG9ydC4KKyAqIE1vaHNpbiBBaG1lZCwgbW9zaEBzYXNpLmNvbSwgOTgtMDktMjQKKyAqIEJhc2VkIG9uIHppcC9jcnlwdCBzb3VyY2VzLgorICoKKyAqIE5PVEUgRk9SIFVTQTogU2luY2UgMjAwMCBleHBvcnRpbmcgdGhpcyBjb2RlIGZyb20gdGhlIFVTQSBpcyBhbGxvd2VkIHRvCisgKiBtb3N0IGNvdW50cmllcy4gIFRoZXJlIGFyZSBhIGZldyBleGNlcHRpb25zLCBidXQgdGhhdCBzdGlsbCBzaG91bGQgbm90IGJlIGEKKyAqIHByb2JsZW0gc2luY2UgdGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGNyZWF0ZWQgaW4gRXVyb3BlIGFuZCBJbmRpYS4KKyAqLworCisvKiBmcm9tIHppcC5oICovCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNoOwkvKiB1bnNpZ25lZCAxNi1iaXQgdmFsdWUgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgdWxnOwkvKiB1bnNpZ25lZCAzMi1iaXQgdmFsdWUgKi8KKworc3RhdGljIHZvaWQgbWFrZV9jcmNfdGFiIF9fQVJHUygodm9pZCkpOworCit1bGcgY3JjXzMyX3RhYlsyNTZdOworCisvKgorICogRmlsbCB0aGUgQ1JDIHRhYmxlLgorICovCisgICAgc3RhdGljIHZvaWQKK21ha2VfY3JjX3RhYigpCit7CisgICAgdWxnCQlzLHQsdjsKKyAgICBzdGF0aWMgaW50CWRvbmUgPSBGQUxTRTsKKworICAgIGlmIChkb25lKQorCXJldHVybjsKKyAgICBmb3IgKHQgPSAwOyB0IDwgMjU2OyB0KyspCisgICAgeworCXYgPSB0OworCWZvciAocyA9IDA7IHMgPCA4OyBzKyspCisJICAgIHYgPSAodiA+PiAxKSBeICgodiAmIDEpICogKHVsZykweGVkYjg4MzIwTCk7CisJY3JjXzMyX3RhYlt0XSA9IHY7CisgICAgfQorICAgIGRvbmUgPSBUUlVFOworfQorCisjZGVmaW5lIENSQzMyKGMsIGIpIChjcmNfMzJfdGFiWygoaW50KShjKSBeIChiKSkgJiAweGZmXSBeICgoYykgPj4gOCkpCisKKworc3RhdGljIHVsZyBrZXlzWzNdOyAvKiBrZXlzIGRlZmluaW5nIHRoZSBwc2V1ZG8tcmFuZG9tIHNlcXVlbmNlICovCisKKy8qCisgKiBSZXR1cm4gdGhlIG5leHQgYnl0ZSBpbiB0aGUgcHNldWRvLXJhbmRvbSBzZXF1ZW5jZQorICovCisgICAgaW50CitkZWNyeXB0X2J5dGUoKQoreworICAgIHVzaCB0ZW1wOworCisgICAgdGVtcCA9ICh1c2gpa2V5c1syXSB8IDI7CisgICAgcmV0dXJuIChpbnQpKCgodW5zaWduZWQpKHRlbXAgKiAodGVtcCBeIDEpKSA+PiA4KSAmIDB4ZmYpOworfQorCisvKgorICogVXBkYXRlIHRoZSBlbmNyeXB0aW9uIGtleXMgd2l0aCB0aGUgbmV4dCBieXRlIG9mIHBsYWluIHRleHQKKyAqLworICAgIGludAordXBkYXRlX2tleXMoYykKKyAgICBpbnQgYzsJCQkvKiBieXRlIG9mIHBsYWluIHRleHQgKi8KK3sKKyAgICBrZXlzWzBdID0gQ1JDMzIoa2V5c1swXSwgYyk7CisgICAga2V5c1sxXSArPSBrZXlzWzBdICYgMHhmZjsKKyAgICBrZXlzWzFdID0ga2V5c1sxXSAqIDEzNDc3NTgxM0wgKyAxOworICAgIGtleXNbMl0gPSBDUkMzMihrZXlzWzJdLCAoaW50KShrZXlzWzFdID4+IDI0KSk7CisgICAgcmV0dXJuIGM7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBlbmNyeXB0aW9uIGtleXMgYW5kIHRoZSByYW5kb20gaGVhZGVyIGFjY29yZGluZyB0bworICogdGhlIGdpdmVuIHBhc3N3b3JkLgorICogSWYgInBhc3N3ZCIgaXMgTlVMTCBvciBlbXB0eSwgZG9uJ3QgZG8gYW55dGhpbmcuCisgKi8KKyAgICB2b2lkCitjcnlwdF9pbml0X2tleXMocGFzc3dkKQorICAgIGNoYXJfdSAqcGFzc3dkOwkJLyogcGFzc3dvcmQgc3RyaW5nIHdpdGggd2hpY2ggdG8gbW9kaWZ5IGtleXMgKi8KK3sKKyAgICBpZiAocGFzc3dkICE9IE5VTEwgJiYgKnBhc3N3ZCAhPSBOVUwpCisgICAgeworCW1ha2VfY3JjX3RhYigpOworCWtleXNbMF0gPSAzMDU0MTk4OTZMOworCWtleXNbMV0gPSA1OTE3NTEwNDlMOworCWtleXNbMl0gPSA4NzgwODIxOTJMOworCXdoaWxlICgqcGFzc3dkICE9ICdcMCcpCisJICAgIHVwZGF0ZV9rZXlzKChpbnQpKnBhc3N3ZCsrKTsKKyAgICB9Cit9CisKKy8qCisgKiBBc2sgdGhlIHVzZXIgZm9yIGEgY3J5cHQga2V5LgorICogV2hlbiAic3RvcmUiIGlzIFRSVUUsIHRoZSBuZXcga2V5IGluIHN0b3JlZCBpbiB0aGUgJ2tleScgb3B0aW9uLCBhbmQgdGhlCisgKiAna2V5JyBvcHRpb24gdmFsdWUgaXMgcmV0dXJuZWQ6IERvbid0IGZyZWUgaXQuCisgKiBXaGVuICJzdG9yZSIgaXMgRkFMU0UsIHRoZSB0eXBlZCBrZXkgaXMgcmV0dXJuZWQgaW4gYWxsb2NhdGVkIG1lbW9yeS4KKyAqIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLgorICovCisgICAgY2hhcl91ICoKK2dldF9jcnlwdF9rZXkoc3RvcmUsIHR3aWNlKQorICAgIGludAkJc3RvcmU7CisgICAgaW50CQl0d2ljZTsJICAgIC8qIEFzayBmb3IgdGhlIGtleSB0d2ljZS4gKi8KK3sKKyAgICBjaGFyX3UJKnAxLCAqcDIgPSBOVUxMOworICAgIGludAkJcm91bmQ7CisKKyAgICBmb3IgKHJvdW5kID0gMDsgOyArK3JvdW5kKQorICAgIHsKKwljbWRsaW5lX3N0YXIgPSBUUlVFOworCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKwlwMSA9IGdldGNtZGxpbmVfcHJvbXB0KE5VTCwgcm91bmQgPT0gMAorCQk/IChjaGFyX3UgKilfKCJFbnRlciBlbmNyeXB0aW9uIGtleTogIikKKwkJOiAoY2hhcl91ICopXygiRW50ZXIgc2FtZSBrZXkgYWdhaW46ICIpLCAwKTsKKwljbWRsaW5lX3N0YXIgPSBGQUxTRTsKKworCWlmIChwMSA9PSBOVUxMKQorCSAgICBicmVhazsKKworCWlmIChyb3VuZCA9PSB0d2ljZSkKKwl7CisJICAgIGlmIChwMiAhPSBOVUxMICYmIFNUUkNNUChwMSwgcDIpICE9IDApCisJICAgIHsKKwkJTVNHKF8oIktleXMgZG9uJ3QgbWF0Y2ghIikpOworCQl2aW1fZnJlZShwMSk7CisJCXZpbV9mcmVlKHAyKTsKKwkJcDIgPSBOVUxMOworCQlyb3VuZCA9IC0xOwkJLyogZG8gaXQgYWdhaW4gKi8KKwkJY29udGludWU7CisJICAgIH0KKwkgICAgaWYgKHN0b3JlKQorCSAgICB7CisJCXNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJrZXkiLCAwTCwgcDEsIE9QVF9MT0NBTCk7CisJCXZpbV9mcmVlKHAxKTsKKwkJcDEgPSBjdXJidWYtPmJfcF9rZXk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCXAyID0gcDE7CisgICAgfQorCisgICAgLyogc2luY2UgdGhlIHVzZXIgdHlwZWQgdGhpcywgbm8gbmVlZCB0byB3YWl0IGZvciByZXR1cm4gKi8KKyAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisgICAgbXNnX2RpZG91dCA9IEZBTFNFOworCisgICAgdmltX2ZyZWUocDIpOworICAgIHJldHVybiBwMTsKK30KKworI2VuZGlmIC8qIEZFQVRfQ1JZUFQgKi8KKworLyogVE9ETzogbWFrZSBzb21lICNpZmRlZiBmb3IgdGhpcyAqLworLyotLS0tLS0tLVsgZmlsZSBzZWFyY2hpbmcgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIEZpbGUgc2VhcmNoaW5nIGZ1bmN0aW9ucyBmb3IgJ3BhdGgnLCAndGFncycgYW5kICdjZHBhdGgnIG9wdGlvbnMuCisgKiBFeHRlcm5hbCB2aXNpYmxlIGZ1bmN0aW9uczoKKyAqIHZpbV9maW5kZmlsZV9pbml0KCkJCWNyZWF0ZXMvaW5pdGlhbGlzZXMgdGhlIHNlYXJjaCBjb250ZXh0CisgKiB2aW1fZmluZGZpbGVfZnJlZV92aXNpdGVkKCkJZnJlZSBsaXN0IG9mIHZpc2l0ZWQgZmlsZXMvZGlycyBvZiBzZWFyY2gKKyAqCQkJCWNvbnRleHQKKyAqIHZpbV9maW5kZmlsZSgpCQlmaW5kIGEgZmlsZSBpbiB0aGUgc2VhcmNoIGNvbnRleHQKKyAqIHZpbV9maW5kZmlsZV9jbGVhbnVwKCkJY2xlYW51cC9mcmVlIHNlYXJjaCBjb250ZXh0IGNyZWF0ZWQgYnkKKyAqCQkJCXZpbV9maW5kZmlsZV9pbml0KCkKKyAqCisgKiBBbGwgc3RhdGljIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIHN0YXJ0IHdpdGggJ2ZmXycKKyAqCisgKiBJbiBnZW5lcmFsIGl0IHdvcmtzIGxpa2UgdGhpczoKKyAqIEZpcnN0IHlvdSBjcmVhdGUgeW91cnNlbGYgYSBzZWFyY2ggY29udGV4dCBieSBjYWxsaW5nIHZpbV9maW5kZmlsZV9pbml0KCkuCisgKiBJdCBpcyBwb3NzaWJsZSB0byBnaXZlIGEgc2VhcmNoIGNvbnRleHQgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8KKyAqIHZpbV9maW5kZmlsZV9pbml0KCksIHNvIGl0IGNhbiBiZSByZXVzZWQuIEFmdGVyIHRoaXMgeW91IGNhbGwgdmltX2ZpbmRmaWxlKCkKKyAqIHVudGlsIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIHJlc3VsdCBvciBpdCByZXR1cm5zIE5VTEwuIE9uIGV2ZXJ5IGNhbGwgaXQKKyAqIHJldHVybnMgdGhlIG5leHQgZmlsZSB3aGljaCBtYXRjaGVzIHRoZSBjb25kaXRpb25zIGdpdmVuIHRvCisgKiB2aW1fZmluZGZpbGVfaW5pdCgpLiBJZiBpdCBkb2Vzbid0IGZpbmQgYSBuZXh0IGZpbGUgaXQgcmV0dXJucyBOVUxMLgorICoKKyAqIEl0IGlzIHBvc3NpYmxlIHRvIGNhbGwgdmltX2ZpbmRmaWxlX2luaXQoKSBhZ2FpbiB0byByZWluaXRpYWxpc2UgeW91ciBzZWFyY2gKKyAqIHdpdGggc29tZSBuZXcgcGFyYW1ldGVycy4gRG9uJ3QgZm9yZ2V0IHRvIHBhc3MgeW91ciBvbGQgc2VhcmNoIGNvbnRleHQgdG8KKyAqIGl0LCBzbyBpdCBjYW4gcmV1c2UgaXQgYW5kIGVzcGVjaWFsbHkgcmV1c2UgdGhlIGxpc3Qgb2YgYWxyZWFkeSB2aXNpdGVkCisgKiBkaXJlY3Rvcmllcy4gSWYgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBsaXN0IG9mIGFscmVhZHkgdmlzaXRlZCBkaXJlY3RvcmllcworICogc2ltcGx5IGNhbGwgdmltX2ZpbmRmaWxlX2ZyZWVfdmlzaXRlZCgpLgorICoKKyAqIFdoZW4geW91IGFyZSBkb25lIGNhbGwgdmltX2ZpbmRmaWxlX2NsZWFudXAoKSB0byBmcmVlIHRoZSBzZWFyY2ggY29udGV4dC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gdmltX2ZpbmRmaWxlX2luaXQoKSBoYXMgYSBsb25nIGNvbW1lbnQsIHdoaWNoIGRlc2NyaWJlcyB0aGUKKyAqIG5lZWRlZCBwYXJhbWV0ZXJzLgorICoKKyAqCisgKgorICogQVRURU5USU9OOgorICogPT09PT09PT09PQorICoJQWxzbyB3ZSB1c2UgYW4gYWxsb2NhdGVkIHNlYXJjaCBjb250ZXh0IGhlcmUsIHRoaXMgZnVuY3Rpb25zIEFSRSBOT1QKKyAqCXRocmVhZC1zYWZlISEhISEKKyAqCisgKglUbyBtaW5pbWl6ZSBwYXJhbWV0ZXIgcGFzc2luZyAob3IgYmVjYXVzZSBJJ20gdG8gbGF6eSksIG9ubHkgdGhlCisgKglleHRlcm5hbCB2aXNpYmxlIGZ1bmN0aW9ucyBnZXQgYSBzZWFyY2ggY29udGV4dCBhcyBhIHBhcmFtZXRlci4gVGhpcyBpcworICoJdGhlbiBhc3NpZ25lZCB0byBhIHN0YXRpYyBnbG9iYWwsIHdoaWNoIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgbG9jYWwKKyAqCWZ1bmN0aW9ucy4KKyAqLworCisvKgorICogdHlwZSBmb3IgdGhlIGRpcmVjdG9yeSBzZWFyY2ggc3RhY2sKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZmZfc3RhY2sKK3sKKyAgICBzdHJ1Y3QgZmZfc3RhY2sJKmZmc19wcmV2OworCisgICAgLyogdGhlIGZpeCBwYXJ0IChubyB3aWxkY2FyZHMpIGFuZCB0aGUgcGFydCBjb250YWluaW5nIHRoZSB3aWxkY2FyZHMKKyAgICAgKiBvZiB0aGUgc2VhcmNoIHBhdGgKKyAgICAgKi8KKyAgICBjaGFyX3UJCSpmZnNfZml4X3BhdGg7CisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisgICAgY2hhcl91CQkqZmZzX3djX3BhdGg7CisjZW5kaWYKKworICAgIC8qIGZpbGVzL2RpcnMgZm91bmQgaW4gdGhlIGFib3ZlIGRpcmVjdG9yeSwgbWF0Y2hlZCBieSB0aGUgZmlyc3Qgd2lsZGNhcmQKKyAgICAgKiBvZiB3Y19wYXJ0CisgICAgICovCisgICAgY2hhcl91CQkqKmZmc19maWxlYXJyYXk7CisgICAgaW50CQkJZmZzX2ZpbGVhcnJheV9zaXplOworICAgIGNoYXJfdQkJZmZzX2ZpbGVhcnJheV9jdXI7ICAgLyogbmVlZGVkIGZvciBwYXJ0bHkgaGFuZGxlZCBkaXJzICovCisKKyAgICAvKiB0byBzdG9yZSBzdGF0dXMgb2YgcGFydGx5IGhhbmRsZWQgZGlyZWN0b3JpZXMKKyAgICAgKiAwOiB3ZSB3b3JrIHRoZSBvbiB0aGlzIGRpcmVjdG9yeSBmb3IgdGhlIGZpcnN0IHRpbWUKKyAgICAgKiAxOiB0aGlzIGRpcmVjdG9yeSB3YXMgcGFydGx5IHNlYXJjaGVkIGluIGFuIGVhcmxpZXIgc3RlcAorICAgICovCisgICAgaW50CQkJZmZzX3N0YWdlOworCisgICAgLyogSG93IGRlZXAgYXJlIHdlIGluIHRoZSBkaXJlY3RvcnkgdHJlZT8KKyAgICAgKiBDb3VudHMgYmFja3dhcmQgZnJvbSB2YWx1ZSBvZiBsZXZlbCBwYXJhbWV0ZXIgdG8gdmltX2ZpbmRmaWxlX2luaXQKKyAgICAgKi8KKyAgICBpbnQJCQlmZnNfbGV2ZWw7CisKKyAgICAvKiBEaWQgd2UgYWxyZWFkeSBleHBhbmQgJyoqJyB0byBhbiBlbXB0eSBzdHJpbmc/ICovCisgICAgaW50CQkJZmZzX3N0YXJfc3Rhcl9lbXB0eTsKK30gZmZfc3RhY2tfVDsKKworLyoKKyAqIHR5cGUgZm9yIGFscmVhZHkgdmlzaXRlZCBkaXJlY3RvcmllcyBvciBmaWxlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZmZfdmlzaXRlZAoreworICAgIHN0cnVjdCBmZl92aXNpdGVkCSpmZnZfbmV4dDsKKworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorICAgIC8qIFZpc2l0ZWQgZGlyZWN0b3JpZXMgYXJlIGRpZmZlcmVudCBpZiB0aGUgd2lsZGNhcmQgc3RyaW5nIGFyZQorICAgICAqIGRpZmZlcmVudC4gU28gd2UgaGF2ZSB0byBzYXZlIGl0LgorICAgICAqLworICAgIGNoYXJfdQkJKmZmdl93Y19wYXRoOworI2VuZGlmCisgICAgLyogZm9yIHVuaXggdXNlIGlub2RlIGV0YyBmb3IgY29tcGFyaXNvbiAobmVlZGVkIGJlY2F1c2Ugb2YgbGlua3MpLCBlbHNlCisgICAgICogdXNlIGZpbGVuYW1lLgorICAgICAqLworI2lmZGVmIFVOSVgKKyAgICBpbnQJCQlmZnZfZGV2OwkvKiBkZXZpY2UgbnVtYmVyICgtMSBpZiBub3Qgc2V0KSAqLworICAgIGlub190CQlmZnZfaW5vOwkvKiBpbm9kZSBudW1iZXIgKi8KKyNlbmRpZgorICAgIC8qIFRoZSBtZW1vcnkgZm9yIHRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGxlbmd0aCBvZgorICAgICAqIGZmdl9mbmFtZS4KKyAgICAgKi8KKyAgICBjaGFyX3UJCWZmdl9mbmFtZVsxXTsJLyogYWN0dWFsbHkgbG9uZ2VyICovCit9IGZmX3Zpc2l0ZWRfVDsKKworLyoKKyAqIFdlIG1pZ2h0IGhhdmUgdG8gbWFuYWdlIHNldmVyYWwgdmlzaXRlZCBsaXN0cyBkdXJpbmcgYSBzZWFyY2guCisgKiBUaGlzIGlzIGV4cGVjaWFsbHkgbmVlZGVkIGZvciB0aGUgdGFncyBvcHRpb24uIElmIHRhZ3MgaXMgc2V0IHRvOgorICogICAgICAiLi8rKy90YWdzLC4vKysvVEFHUywrKy90YWdzIiAgKHJlcGxhY2UgKyB3aXRoICopCisgKiBTbyB3ZSBoYXZlIHRvIGRvIDMgc2VhcmNoZXM6CisgKiAgIDEpIHNlYXJjaCBmcm9tIHRoZSBjdXJyZW50IGZpbGVzIGRpcmVjdG9yeSBkb3dud2FyZCBmb3IgdGhlIGZpbGUgInRhZ3MiCisgKiAgIDIpIHNlYXJjaCBmcm9tIHRoZSBjdXJyZW50IGZpbGVzIGRpcmVjdG9yeSBkb3dud2FyZCBmb3IgdGhlIGZpbGUgIlRBR1MiCisgKiAgIDMpIHNlYXJjaCBmcm9tIFZpbXMgY3VycmVudCBkaXJlY3RvcnkgZG93bndhcmRzIGZvciB0aGUgZmlsZSAidGFncyIKKyAqIEFzIHlvdSBjYW4gc2VlLCB0aGUgZmlyc3QgYW5kIHRoZSB0aGlyZCBzZWFyY2ggYXJlIGZvciB0aGUgc2FtZSBmaWxlLCBzbyBmb3IKKyAqIHRoZSB0aGlyZCBzZWFyY2ggd2UgY2FuIHVzZSB0aGUgdmlzaXRlZCBsaXN0IG9mIHRoZSBmaXJzdCBzZWFyY2guIEZvciB0aGUKKyAqIHNlY29uZCBzZWFyY2ggd2UgbXVzdCBzdGFydCBmcm9tIGEgZW1wdHkgdmlzaXRlZCBsaXN0LgorICogVGhlIHN0cnVjdCBmZl92aXNpdGVkX2xpc3RfaGRyIGlzIHVzZWQgdG8gbWFuYWdlIGEgbGlua2VkIGxpc3Qgb2YgYWxyZWFkeQorICogdmlzaXRlZCBsaXN0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZmZfdmlzaXRlZF9saXN0X2hkcgoreworICAgIHN0cnVjdCBmZl92aXNpdGVkX2xpc3RfaGRyCSpmZnZsX25leHQ7CisKKyAgICAvKiB0aGUgZmlsZW5hbWUgdGhlIGF0dGFjaGVkIHZpc2l0ZWQgbGlzdCBpcyBmb3IgKi8KKyAgICBjaGFyX3UJCQkqZmZ2bF9maWxlbmFtZTsKKworICAgIGZmX3Zpc2l0ZWRfVAkJKmZmdmxfdmlzaXRlZF9saXN0OworCit9IGZmX3Zpc2l0ZWRfbGlzdF9oZHJfVDsKKworCisvKgorICogJyoqJyBjYW4gYmUgZXhwYW5kZWQgdG8gc2V2ZXJhbCBkaXJlY3RvcnkgbGV2ZWxzLgorICogU2V0IHRoZSBkZWZhdWx0IG1heGltaXVtIGRlcHRoLgorICovCisjZGVmaW5lIEZGX01BWF9TVEFSX1NUQVJfRVhQQU5EICgoY2hhcl91KTMwKQorLyoKKyAqIFRoZSBzZWFyY2ggY29udGV4dDoKKyAqICAgZmZzY19zdGFja19wdHI6CXRoZSBzdGFjayBmb3IgdGhlIGRpcnMgdG8gc2VhcmNoCisgKiAgIGZmc2NfdmlzaXRlZF9saXN0OiB0aGUgY3VycmVudGx5IGFjdGl2ZSB2aXNpdGVkIGxpc3QKKyAqICAgZmZzY19kaXJfdmlzaXRlZF9saXN0OiB0aGUgY3VycmVudGx5IGFjdGl2ZSB2aXNpdGVkIGxpc3QgZm9yIHNlYXJjaCBkaXJzCisgKiAgIGZmc2NfdmlzaXRlZF9saXN0c19saXN0OiB0aGUgbGlzdCBvZiBhbGwgdmlzaXRlZCBsaXN0cworICogICBmZnNjX2Rpcl92aXNpdGVkX2xpc3RzX2xpc3Q6IHRoZSBsaXN0IG9mIGFsbCB2aXNpdGVkIGxpc3RzIGZvciBzZWFyY2ggZGlycworICogICBmZnNjX2ZpbGVfdG9fc2VhcmNoOiAgICAgdGhlIGZpbGUgdG8gc2VhcmNoIGZvcgorICogICBmZnNjX3N0YXJ0X2RpcjoJdGhlIHN0YXJ0aW5nIGRpcmVjdG9yeSwgaWYgc2VhcmNoIHBhdGggd2FzIHJlbGF0aXZlCisgKiAgIGZmc2NfZml4X3BhdGg6CXRoZSBmaXggcGFydCBvZiB0aGUgZ2l2ZW4gcGF0aCAod2l0aG91dCB3aWxkY2FyZHMpCisgKgkJCU5lZWRlZCBmb3IgdXB3YXJkIHNlYXJjaC4KKyAqICAgZmZzY193Y19wYXRoOgl0aGUgcGFydCBvZiB0aGUgZ2l2ZW4gcGF0aCBjb250YWluaW5nIHdpbGRjYXJkcworICogICBmZnNjX2xldmVsOglob3cgbWFueSBsZXZlbHMgb2YgZGlycyB0byBzZWFyY2ggZG93bndhcmRzCisgKiAgIGZmc2Nfc3RvcGRpcnNfdjoJYXJyYXkgb2Ygc3RvcCBkaXJlY3RvcmllcyBmb3IgdXB3YXJkIHNlYXJjaAorICogICBmZnNjX25lZWRfZGlyOglUUlVFIGlmIHdlIHNlYXJjaCBmb3IgYSBkaXJlY3RvcnkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZmZfc2VhcmNoX2N0eF9UCit7CisgICAgIGZmX3N0YWNrX1QJCQkqZmZzY19zdGFja19wdHI7CisgICAgIGZmX3Zpc2l0ZWRfbGlzdF9oZHJfVAkqZmZzY192aXNpdGVkX2xpc3Q7CisgICAgIGZmX3Zpc2l0ZWRfbGlzdF9oZHJfVAkqZmZzY19kaXJfdmlzaXRlZF9saXN0OworICAgICBmZl92aXNpdGVkX2xpc3RfaGRyX1QJKmZmc2NfdmlzaXRlZF9saXN0c19saXN0OworICAgICBmZl92aXNpdGVkX2xpc3RfaGRyX1QJKmZmc2NfZGlyX3Zpc2l0ZWRfbGlzdHNfbGlzdDsKKyAgICAgY2hhcl91CQkJKmZmc2NfZmlsZV90b19zZWFyY2g7CisgICAgIGNoYXJfdQkJCSpmZnNjX3N0YXJ0X2RpcjsKKyAgICAgY2hhcl91CQkJKmZmc2NfZml4X3BhdGg7CisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisgICAgIGNoYXJfdQkJCSpmZnNjX3djX3BhdGg7CisgICAgIGludAkJCWZmc2NfbGV2ZWw7CisgICAgIGNoYXJfdQkJCSoqZmZzY19zdG9wZGlyc192OworI2VuZGlmCisgICAgIGludAkJCWZmc2NfbmVlZF9kaXI7Cit9ZmZfc2VhcmNoX2N0eF9UOworc3RhdGljIGZmX3NlYXJjaF9jdHhfVCAqZmZfc2VhcmNoX2N0eCA9IE5VTEw7CisKKy8qIHVzZWQgZm9yIGV4cGFuZGluZyBmaWxlbmFtZXMgKi8KK3N0YXRpYyBjaGFyX3UJCSpmZl9leHBhbmRfYnVmZmVyID0gTlVMTDsKKworLyogbG9jYWxseSBuZWVkZWQgZnVuY3Rpb25zICovCisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCitzdGF0aWMgaW50IGZmX2NoZWNrX3Zpc2l0ZWQgX19BUkdTKChmZl92aXNpdGVkX1QgKiosIGNoYXJfdSAqLCBjaGFyX3UgKikpOworI2Vsc2UKK3N0YXRpYyBpbnQgZmZfY2hlY2tfdmlzaXRlZCBfX0FSR1MoKGZmX3Zpc2l0ZWRfVCAqKiwgY2hhcl91ICopKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgdmltX2ZpbmRmaWxlX2ZyZWVfdmlzaXRlZF9saXN0IF9fQVJHUygoZmZfdmlzaXRlZF9saXN0X2hkcl9UICoqbGlzdF9oZWFkcCkpOworc3RhdGljIHZvaWQgZmZfZnJlZV92aXNpdGVkX2xpc3QgX19BUkdTKChmZl92aXNpdGVkX1QgKnZsKSk7CitzdGF0aWMgZmZfdmlzaXRlZF9saXN0X2hkcl9UKiBmZl9nZXRfdmlzaXRlZF9saXN0IF9fQVJHUygoY2hhcl91ICosIGZmX3Zpc2l0ZWRfbGlzdF9oZHJfVCAqKmxpc3RfaGVhZHApKTsKKyNpZmRlZiBGRUFUX1BBVEhfRVhUUkEKK3N0YXRpYyBpbnQgZmZfd2NfZXF1YWwgX19BUkdTKChjaGFyX3UgKnMxLCBjaGFyX3UgKnMyKSk7CisjZW5kaWYKKworc3RhdGljIHZvaWQgZmZfcHVzaCBfX0FSR1MoKGZmX3N0YWNrX1QgKikpOworc3RhdGljIGZmX3N0YWNrX1QgKiBmZl9wb3AgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBmZl9jbGVhciBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGZmX2ZyZWVfc3RhY2tfZWxlbWVudCBfX0FSR1MoKGZmX3N0YWNrX1QgKikpOworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorc3RhdGljIGZmX3N0YWNrX1QgKmZmX2NyZWF0ZV9zdGFja19lbGVtZW50IF9fQVJHUygoY2hhcl91ICosIGNoYXJfdSAqLCBpbnQsIGludCkpOworI2Vsc2UKK3N0YXRpYyBmZl9zdGFja19UICpmZl9jcmVhdGVfc3RhY2tfZWxlbWVudCBfX0FSR1MoKGNoYXJfdSAqLCBpbnQsIGludCkpOworI2VuZGlmCisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCitzdGF0aWMgaW50IGZmX3BhdGhfaW5fc3RvcGxpc3QgX19BUkdTKChjaGFyX3UgKiwgaW50LCBjaGFyX3UgKiopKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TRUFSQ0hQQVRICitzdGF0aWMgY2hhcl91ICpmaW5kX2ZpbGVfaW5fcGF0aF9vcHRpb24gX19BUkdTKChjaGFyX3UgKnB0ciwgaW50IGxlbiwgaW50IG9wdGlvbnMsIGludCBmaXJzdCwgY2hhcl91ICpwYXRoX29wdGlvbiwgaW50IG5lZWRfZGlyLCBjaGFyX3UgKnJlbF9mbmFtZSkpOworI2VuZGlmCisKKyNpZiAwCisvKgorICogaWYgc29tZW9uZSBsaWtlcyBmaW5kZmlyc3QvZmluZG5leHQsIGhlcmUgYXJlIHRoZSBmdW5jdGlvbnMKKyAqIE5PVCBURVNURUQhIQorICovCisKK3N0YXRpYyB2b2lkICpmZl9mbl9zZWFyY2hfY29udGV4dCA9IE5VTEw7CisKKyAgICBjaGFyX3UgKgordmltX2ZpbmRmaXJzdChwYXRoLCBmaWxlbmFtZSwgbGV2ZWwpCisgICAgY2hhcl91CSpwYXRoOworICAgIGNoYXJfdQkqZmlsZW5hbWU7CisgICAgaW50CQlsZXZlbDsKK3sKKyAgICBmZl9mbl9zZWFyY2hfY29udGV4dCA9CisJdmltX2ZpbmRmaWxlX2luaXQocGF0aCwgZmlsZW5hbWUsIE5VTEwsIGxldmVsLCBUUlVFLCBGQUxTRSwKKwkJZmZfZm5fc2VhcmNoX2NvbnRleHQsIHJlbF9mbmFtZSk7CisgICAgaWYgKE5VTEwgPT0gZmZfZm5fc2VhcmNoX2NvbnRleHQpCisJcmV0dXJuIE5VTEw7CisgICAgZWxzZQorCXJldHVybiB2aW1fZmluZG5leHQoKQorfQorCisgICAgY2hhcl91ICoKK3ZpbV9maW5kbmV4dCgpCit7CisgICAgY2hhcl91ICpyZXQgPSB2aW1fZmluZGZpbGUoZmZfZm5fc2VhcmNoX2NvbnRleHQpOworCisgICAgaWYgKE5VTEwgPT0gcmV0KQorICAgIHsKKwl2aW1fZmluZGZpbGVfY2xlYW51cChmZl9mbl9zZWFyY2hfY29udGV4dCk7CisJZmZfZm5fc2VhcmNoX2NvbnRleHQgPSBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKKy8qCisgKiBJbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB2aW1fZmluZGZpbGUuCisgKgorICogUmV0dXJucyB0aGUgbmV3bHkgYWxsb2NhdGVkIHNlYXJjaCBjb250ZXh0IG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJlZC4KKyAqCisgKiBEb24ndCBmb3JnZXQgdG8gY2xlYW4gdXAgYnkgY2FsbGluZyB2aW1fZmluZGZpbGVfY2xlYW51cCgpIGlmIHlvdSBhcmUgZG9uZQorICogd2l0aCB0aGUgc2VhcmNoIGNvbnRleHQuCisgKgorICogRmluZCB0aGUgZmlsZSAnZmlsZW5hbWUnIGluIHRoZSBkaXJlY3RvcnkgJ3BhdGgnLgorICogVGhlIHBhcmFtZXRlciAncGF0aCcgbWF5IGNvbnRhaW4gd2lsZGNhcmRzLiBJZiBzbyBvbmx5IHNlYXJjaCAnbGV2ZWwnCisgKiBkaXJlY3RvcmllcyBkZWVwLiBUaGUgcGFyYW1ldGVyICdsZXZlbCcgaXMgdGhlIGFic29sdXRlIG1heGltdW0gYW5kIGlzCisgKiBub3QgcmVsYXRlZCB0byByZXN0cmljdHMgZ2l2ZW4gdG8gdGhlICcqKicgd2lsZGNhcmQuIElmICdsZXZlbCcgaXMgMTAwCisgKiBhbmQgeW91IHVzZSAnKioyMDAnIHZpbV9maW5kZmlsZSgpIHdpbGwgc3RvcCBhZnRlciAxMDAgbGV2ZWxzLgorICoKKyAqIElmICdzdG9wZGlycycgaXMgbm90IE5VTEwgYW5kIG5vdGhpbmcgaXMgZm91bmQgZG93bndhcmQsIHRoZSBzZWFyY2ggaXMKKyAqIHJlc3RhcnRlZCBvbiB0aGUgbmV4dCBoaWdoZXIgZGlyZWN0b3J5IGxldmVsLiBUaGlzIGlzIHJlcGVhdGVkIHVudGlsIHRoZQorICogc3RhcnQtZGlyZWN0b3J5IG9mIGEgc2VhcmNoIGlzIGNvbnRhaW5lZCBpbiAnc3RvcGRpcnMnLiAnc3RvcGRpcnMnIGhhcyB0aGUKKyAqIGZvcm1hdCAiOyo8ZGlybmFtZT4qXCg7PGRpcm5hbWU+XCkqO1w9JCIuCisgKgorICogSWYgdGhlICdwYXRoJyBpcyByZWxhdGl2ZSwgdGhlIHN0YXJ0aW5nIGRpciBmb3IgdGhlIHNlYXJjaCBpcyBlaXRoZXIgVklNJ3MKKyAqIGN1cnJlbnQgZGlyIG9yIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoICIuLyIgdGhlIGN1cnJlbnQgZmlsZXMgZGlyLgorICogSWYgdGhlICdwYXRoJyBpcyBhYnNvbHV0LCB0aGUgc3RhcnRpbmcgZGlyIGlzIHRoYXQgcGFydCBvZiB0aGUgcGF0aCBiZWZvcmUKKyAqIHRoZSBmaXJzdCB3aWxkY2FyZC4KKyAqCisgKiBVcHdhcmQgc2VhcmNoIGlzIG9ubHkgZG9uZSBvbiB0aGUgc3RhcnRpbmcgZGlyLgorICoKKyAqIElmICdmcmVlX3Zpc2l0ZWQnIGlzIFRSVUUgdGhlIGxpc3Qgb2YgYWxyZWFkeSB2aXNpdGVkIGZpbGVzL2RpcmVjdG9yaWVzIGlzCisgKiBjbGVhcmVkLiBTZXQgdGhpcyB0byBGQUxTRSBpZiB5b3UganVzdCB3YW50IHRvIHNlYXJjaCBmcm9tIGFub3RoZXIKKyAqIGRpcmVjdG9yeSwgYnV0IHdhbnQgdG8gYmUgc3VyZSB0aGF0IG5vIGRpcmVjdG9yeSBmcm9tIGEgcHJldmlvdXMgc2VhcmNoIGlzCisgKiBzZWFyY2hlZCBhZ2Fpbi4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IHNlYXJjaCBmb3IgYSBmaWxlIGF0IGRpZmZlcmVudCBwbGFjZXMuCisgKiBUaGUgbGlzdCBvZiB2aXNpdGVkIGZpbGVzL2RpcnMgY2FuIGFsc28gYmUgY2xlYXJlZCB3aXRoIHRoZSBmdW5jdGlvbgorICogdmltX2ZpbmRmaWxlX2ZyZWVfdmlzaXRlZCgpLgorICoKKyAqIFNldCB0aGUgcGFyYW1ldGVyICduZWVkX2RpcicgdG8gVFJVRSBpZiB5b3Ugd2FudCB0byBzZWFyY2ggZm9yIGEgZGlyZWN0b3J5CisgKiBpbnN0ZWFkIG9mIGEgZmlsZS4KKyAqCisgKiBBIHNlYXJjaCBjb250ZXh0IHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byB2aW1fZmluZGZpbGVfaW5pdCgpIGNhbiBiZQorICogcGFzc2VkIGluIHRoZSBwYXJhbWV0ZXIgJ3NlYXJjaF9jdHgnLiBUaGlzIGNvbnRleHQgaXMgdGhhbiByZXVzZWQgYW5kCisgKiByZWluaXRpYWxpemVkIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXJzLiBUaGUgbGlzdCBvZiBhbHJlYWR5IHZpc2V0ZWQKKyAqIGRpcmVjdG9yaWVzIGZyb20gdGhpcyBjb250ZXh0IGlzIG9ubHkgZGVsZXRlZCBpZiB0aGUgcGFyYW1ldGVyCisgKiAnZnJlZV92aXNpdGVkJyBpcyB0cnVlLiBCZSBhd2FyZSB0aGF0IHRoZSBwYXNzZWQgc2VhcmNoX2NvbnRleHQgaXMgZnJlZWQgaWYKKyAqIHRoZSByZWluaXRpYWxpemF0aW9uIGZhaWxzLgorICoKKyAqIElmIHlvdSBkb24ndCBoYXZlIGEgc2VhcmNoIGNvbnRleHQgZnJvbSBhIHByZXZpb3VzIGNhbGwgJ3NlYXJjaF9jdHgnIG11c3QgYmUKKyAqIE5VTEwuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaWxlbnRseSBpZ25vcmVzIGEgZmV3IGVycm9ycywgdmltX2ZpbmRmaWxlKCkgd2lsbCBoYXZlCisgKiBsaW1pdGVkIGZ1bmN0aW9uYWxpdHkgdGhlbi4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZCAqCit2aW1fZmluZGZpbGVfaW5pdChwYXRoLCBmaWxlbmFtZSwgc3RvcGRpcnMsIGxldmVsLCBmcmVlX3Zpc2l0ZWQsIG5lZWRfZGlyLAorCQkJCQkJc2VhcmNoX2N0eCwgdGFnZmlsZSwgcmVsX2ZuYW1lKQorICAgIGNoYXJfdQkqcGF0aDsKKyAgICBjaGFyX3UJKmZpbGVuYW1lOworICAgIGNoYXJfdQkqc3RvcGRpcnM7CisgICAgaW50CQlsZXZlbDsKKyAgICBpbnQJCWZyZWVfdmlzaXRlZDsKKyAgICBpbnQJCW5lZWRfZGlyOworICAgIHZvaWQJKnNlYXJjaF9jdHg7CisgICAgaW50CQl0YWdmaWxlOworICAgIGNoYXJfdQkqcmVsX2ZuYW1lOwkvKiBmaWxlIG5hbWUgdG8gdXNlIGZvciAiLiIgKi8KK3sKKyNpZmRlZiBGRUFUX1BBVEhfRVhUUkEKKyAgICBjaGFyX3UJKndjX3BhcnQ7CisjZW5kaWYKKyAgICBmZl9zdGFja19UCSpzcHRyOworCisgICAgLyogSWYgYSBzZWFyY2ggY29udGV4dCBpcyBnaXZlbiBieSB0aGUgY2FsbGVyLCByZXVzZSBpdCwgZWxzZSBhbGxvY2F0ZSBhCisgICAgICogbmV3IG9uZS4KKyAgICAgKi8KKyAgICBpZiAoc2VhcmNoX2N0eCAhPSBOVUxMKQorCWZmX3NlYXJjaF9jdHggPSBzZWFyY2hfY3R4OworICAgIGVsc2UKKyAgICB7CisJZmZfc2VhcmNoX2N0eCA9IChmZl9zZWFyY2hfY3R4X1QqKWFsbG9jKAorCQkJCQkgICAodW5zaWduZWQpc2l6ZW9mKGZmX3NlYXJjaF9jdHhfVCkpOworCWlmIChmZl9zZWFyY2hfY3R4ID09IE5VTEwpCisJICAgIGdvdG8gZXJyb3JfcmV0dXJuOworCW1lbXNldChmZl9zZWFyY2hfY3R4LCAwLCBzaXplb2YoZmZfc2VhcmNoX2N0eF9UKSk7CisgICAgfQorCisgICAgLyogY2xlYXIgdGhlIHNlYXJjaCBjb250ZXh0LCBidXQgTk9UIHRoZSB2aXNpdGVkIGxpc3RzICovCisgICAgZmZfY2xlYXIoKTsKKworICAgIC8qIGNsZWFyIHZpc2l0ZWQgbGlzdCBpZiB3YW50ZWQgKi8KKyAgICBpZiAoZnJlZV92aXNpdGVkID09IFRSVUUpCisJdmltX2ZpbmRmaWxlX2ZyZWVfdmlzaXRlZChmZl9zZWFyY2hfY3R4KTsKKyAgICBlbHNlCisgICAgeworCS8qIFJldXNlIG9sZCB2aXNpdGVkIGxpc3RzLiBHZXQgdGhlIHZpc2l0ZWQgbGlzdCBmb3IgdGhlIGdpdmVuCisJICogZmlsZW5hbWUuIElmIG5vIGxpc3QgZm9yIHRoZSBjdXJyZW50IGZpbGVuYW1lIGV4aXN0cywgY3JlYXRlcyBhIG5ldworCSAqIG9uZS4KKwkgKi8KKwlmZl9zZWFyY2hfY3R4LT5mZnNjX3Zpc2l0ZWRfbGlzdCA9IGZmX2dldF92aXNpdGVkX2xpc3QoZmlsZW5hbWUsCisJCQkJICAgICAmZmZfc2VhcmNoX2N0eC0+ZmZzY192aXNpdGVkX2xpc3RzX2xpc3QpOworCWlmIChmZl9zZWFyY2hfY3R4LT5mZnNjX3Zpc2l0ZWRfbGlzdCA9PSBOVUxMKQorCSAgICBnb3RvIGVycm9yX3JldHVybjsKKwlmZl9zZWFyY2hfY3R4LT5mZnNjX2Rpcl92aXNpdGVkX2xpc3QgPSBmZl9nZXRfdmlzaXRlZF9saXN0KGZpbGVuYW1lLAorCQkJCSAmZmZfc2VhcmNoX2N0eC0+ZmZzY19kaXJfdmlzaXRlZF9saXN0c19saXN0KTsKKwlpZiAoZmZfc2VhcmNoX2N0eC0+ZmZzY19kaXJfdmlzaXRlZF9saXN0ID09IE5VTEwpCisJICAgIGdvdG8gZXJyb3JfcmV0dXJuOworICAgIH0KKworICAgIGlmIChmZl9leHBhbmRfYnVmZmVyID09IE5VTEwpCisgICAgeworCWZmX2V4cGFuZF9idWZmZXIgPSAoY2hhcl91KilhbGxvYyhNQVhQQVRITCk7CisJaWYgKGZmX2V4cGFuZF9idWZmZXIgPT0gTlVMTCkKKwkgICAgZ290byBlcnJvcl9yZXR1cm47CisgICAgfQorCisgICAgLyogU3RvcmUgaW5mb3JtYXRpb24gb24gc3RhcnRpbmcgZGlyIG5vdyBpZiBwYXRoIGlzIHJlbGF0aXZlLgorICAgICAqIElmIHBhdGggaXMgYWJzb2x1dGUsIHdlIGRvIHRoYXQgbGF0ZXIuCisgICAgICovCisgICAgaWYgKHBhdGhbMF0gPT0gJy4nCisJICAgICYmICh2aW1faXNwYXRoc2VwKHBhdGhbMV0pIHx8IHBhdGhbMV0gPT0gTlVMKQorCSAgICAmJiAoIXRhZ2ZpbGUgfHwgdmltX3N0cmNocihwX2NwbywgQ1BPX0RPVFRBRykgPT0gTlVMTCkKKwkgICAgJiYgcmVsX2ZuYW1lICE9IE5VTEwpCisgICAgeworCWludAlsZW4gPSAoaW50KShnZXR0YWlsKHJlbF9mbmFtZSkgLSByZWxfZm5hbWUpOworCisJaWYgKCF2aW1faXNBYnNOYW1lKHJlbF9mbmFtZSkgJiYgbGVuICsgMSA8IE1BWFBBVEhMKQorCXsKKwkgICAgLyogTWFrZSB0aGUgc3RhcnQgZGlyIGFuIGFic29sdXRlIHBhdGggbmFtZS4gKi8KKwkgICAgU1RSTkNQWShmZl9leHBhbmRfYnVmZmVyLCByZWxfZm5hbWUsIGxlbik7CisJICAgIGZmX2V4cGFuZF9idWZmZXJbbGVuXSA9IE5VTDsKKwkgICAgZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIgPSBGdWxsTmFtZV9zYXZlKGZmX2V4cGFuZF9idWZmZXIsCisJCQkJCQkJCSAgICAgICBGQUxTRSk7CisJfQorCWVsc2UKKwkgICAgZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIgPSB2aW1fc3RybnNhdmUocmVsX2ZuYW1lLCBsZW4pOworCWlmIChmZl9zZWFyY2hfY3R4LT5mZnNjX3N0YXJ0X2RpciA9PSBOVUxMKQorCSAgICBnb3RvIGVycm9yX3JldHVybjsKKwlpZiAoKisrcGF0aCAhPSBOVUwpCisJICAgICsrcGF0aDsKKyAgICB9CisgICAgZWxzZSBpZiAoKnBhdGggPT0gTlVMIHx8ICF2aW1faXNBYnNOYW1lKHBhdGgpKQorICAgIHsKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwkvKiAiYzpkaXIiIG5lZWRzICJjOiIgdG8gYmUgZXhwYW5kZWQsIG90aGVyd2lzZSB1c2UgY3VycmVudCBkaXIgKi8KKwlpZiAoKnBhdGggIT0gTlVMICYmIHBhdGhbMV0gPT0gJzonKQorCXsKKwkgICAgY2hhcl91ICBkcml2ZVszXTsKKworCSAgICBkcml2ZVswXSA9IHBhdGhbMF07CisJICAgIGRyaXZlWzFdID0gJzonOworCSAgICBkcml2ZVsyXSA9IE5VTDsKKwkgICAgaWYgKHZpbV9GdWxsTmFtZShkcml2ZSwgZmZfZXhwYW5kX2J1ZmZlciwgTUFYUEFUSEwsIFRSVUUpID09IEZBSUwpCisJCWdvdG8gZXJyb3JfcmV0dXJuOworCSAgICBwYXRoICs9IDI7CisJfQorCWVsc2UKKyNlbmRpZgorCWlmIChtY2hfZGlybmFtZShmZl9leHBhbmRfYnVmZmVyLCBNQVhQQVRITCkgPT0gRkFJTCkKKwkgICAgZ290byBlcnJvcl9yZXR1cm47CisKKwlmZl9zZWFyY2hfY3R4LT5mZnNjX3N0YXJ0X2RpciA9IHZpbV9zdHJzYXZlKGZmX2V4cGFuZF9idWZmZXIpOworCWlmIChmZl9zZWFyY2hfY3R4LT5mZnNjX3N0YXJ0X2RpciA9PSBOVUxMKQorCSAgICBnb3RvIGVycm9yX3JldHVybjsKKworI2lmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorCS8qIEEgcGF0aCB0aGF0IHN0YXJ0cyB3aXRoICIvZGlyIiBpcyByZWxhdGl2ZSB0byB0aGUgZHJpdmUsIG5vdCB0byB0aGUKKwkgKiBkaXJlY3RvcnkgKGJ1dCBub3QgZm9yICIvL21hY2hpbmUvZGlyIikuICBPbmx5IHVzZSB0aGUgZHJpdmUgbmFtZS4gKi8KKwlpZiAoKCpwYXRoID09ICcvJyB8fCAqcGF0aCA9PSAnXFwnKQorCQkmJiBwYXRoWzFdICE9IHBhdGhbMF0KKwkJJiYgZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXJbMV0gPT0gJzonKQorCSAgICBmZl9zZWFyY2hfY3R4LT5mZnNjX3N0YXJ0X2RpclsyXSA9IE5VTDsKKyNlbmRpZgorICAgIH0KKworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorICAgIC8qCisgICAgICogSWYgc3RvcGRpcnMgYXJlIGdpdmVuLCBzcGxpdCB0aGVtIGludG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMuCisgICAgICogSWYgdGhpcyBmYWlscyAobWVtIGFsbG9jYXRpb24pLCB0aGVyZSBpcyBubyB1cHdhcmQgc2VhcmNoIGF0IGFsbCBvciBhCisgICAgICogc3RvcCBkaXJlY3RvcnkgaXMgbm90IHJlY29nbml6ZWQgLT4gY29udGludWUgc2lsZW50bHkuCisgICAgICogSWYgc3RvcGRpcnMganVzdCBjb250YWlucyBhICI7IiBvciBpcyBlbXB0eSwKKyAgICAgKiBmZl9zZWFyY2hfY3R4LT5mZnNjX3N0b3BkaXJzX3Ygd2lsbCBvbmx5IGNvbnRhaW4gYSAgTlVMTCBwb2ludGVyLiBUaGlzCisgICAgICogaXMgaGFuZGxlZCBhcyB1bmxpbWl0ZWQgdXB3YXJkIHNlYXJjaC4gIFNlZSBmdW5jdGlvbgorICAgICAqIGZmX3BhdGhfaW5fc3RvcGxpc3QoKSBmb3IgZGV0YWlscy4KKyAgICAgKi8KKyAgICBpZiAoc3RvcGRpcnMgIT0gTlVMTCkKKyAgICB7CisJY2hhcl91CSp3YWxrZXIgPSBzdG9wZGlyczsKKwlpbnQJZGlyY291bnQ7CisKKwl3aGlsZSAoKndhbGtlciA9PSAnOycpCisJICAgIHdhbGtlcisrOworCisJZGlyY291bnQgPSAxOworCWZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RvcGRpcnNfdiA9CisJICAgIChjaGFyX3UgKiopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihjaGFyX3UgKikpOworCisJaWYgKGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RvcGRpcnNfdiAhPSBOVUxMKQorCXsKKwkgICAgZG8KKwkgICAgeworCQljaGFyX3UJKmhlbHBlcjsKKwkJdm9pZAkqcHRyOworCisJCWhlbHBlciA9IHdhbGtlcjsKKwkJcHRyID0gdmltX3JlYWxsb2MoZmZfc2VhcmNoX2N0eC0+ZmZzY19zdG9wZGlyc192LAorCQkJCQkgICAoZGlyY291bnQgKyAxKSAqIHNpemVvZihjaGFyX3UgKikpOworCQlpZiAocHRyKQorCQkgICAgZmZfc2VhcmNoX2N0eC0+ZmZzY19zdG9wZGlyc192ID0gcHRyOworCQllbHNlCisJCSAgICAvKiBpZ25vcmUsIGtlZXAgd2hhdCB3ZSBoYXZlIGFuZCBjb250aW51ZSAqLworCQkgICAgYnJlYWs7CisJCXdhbGtlciA9IHZpbV9zdHJjaHIod2Fsa2VyLCAnOycpOworCQlpZiAod2Fsa2VyKQorCQl7CisJCSAgICBmZl9zZWFyY2hfY3R4LT5mZnNjX3N0b3BkaXJzX3ZbZGlyY291bnQtMV0gPQorCQkJdmltX3N0cm5zYXZlKGhlbHBlciwgKGludCkod2Fsa2VyIC0gaGVscGVyKSk7CisJCSAgICB3YWxrZXIrKzsKKwkJfQorCQllbHNlCisJCSAgICAvKiB0aGlzIG1pZ2h0IGJlICIiLCB3aGljaCBtZWFucyBhc2NlbnQgdGlsbCB0b3AKKwkJICAgICAqIG9mIGRpcmVjdG9yeSB0cmVlLgorCQkgICAgICovCisJCSAgICBmZl9zZWFyY2hfY3R4LT5mZnNjX3N0b3BkaXJzX3ZbZGlyY291bnQtMV0gPQorCQkJdmltX3N0cnNhdmUoaGVscGVyKTsKKworCQlkaXJjb3VudCsrOworCisJICAgIH0gd2hpbGUgKHdhbGtlciAhPSBOVUxMKTsKKwkgICAgZmZfc2VhcmNoX2N0eC0+ZmZzY19zdG9wZGlyc192W2RpcmNvdW50LTFdID0gTlVMTDsKKwl9CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1BBVEhfRVhUUkEKKyAgICBmZl9zZWFyY2hfY3R4LT5mZnNjX2xldmVsID0gbGV2ZWw7CisKKyAgICAvKiBzcGxpdCBpbnRvOgorICAgICAqICAtZml4IHBhdGgKKyAgICAgKiAgLXdpbGRjYXJkX3N0dWZmIChtaWdodCBiZSBOVUxMKQorICAgICAqLworICAgIHdjX3BhcnQgPSB2aW1fc3RyY2hyKHBhdGgsICcqJyk7CisgICAgaWYgKHdjX3BhcnQgIT0gTlVMTCkKKyAgICB7CisJaW50CWxsZXZlbDsKKwlpbnQJbGVuOworCWNoYXJfdQkqZXJycHQ7CisKKwkvKiBzYXZlIHRoZSBmaXggcGFydCBvZiB0aGUgcGF0aCAqLworCWZmX3NlYXJjaF9jdHgtPmZmc2NfZml4X3BhdGggPSB2aW1fc3RybnNhdmUocGF0aCwKKwkJCQkJCSAgICAgICAoaW50KSh3Y19wYXJ0IC0gcGF0aCkpOworCisJLyoKKwkgKiBjb3B5IHdjX3BhdGggYW5kIGFkZCByZXN0cmljdHMgdG8gdGhlICcqKicgd2lsZGNhcmQuCisJICogVGhlIG9jdGV0dCBhZnRlciBhICcqKicgaXMgdXNlZCBhcyBhIChiaW5hcnkpIGNvdW50ZXIuCisJICogU28gJyoqMycgaXMgdHJhbnNwb3NlZCB0byAnKipeQycgKCdeQycgaXMgQVNDSUkgdmFsdWUgMykKKwkgKiBvciAnKio3NicgaXMgdHJhbnNwb3NlZCB0byAnKipOJyggJ04nIGlzIEFTQ0lJIHZhbHVlIDc2KS4KKwkgKiBGb3IgRUJDRElDIHlvdSBnZXQgZGlmZmVyZW50IGNoYXJhY3RlciB2YWx1ZXMuCisJICogSWYgbm8gcmVzdHJpY3QgaXMgZ2l2ZW4gYWZ0ZXIgJyoqJyB0aGUgZGVmYXVsdCBpcyB1c2VkLgorCSAqIER1ZSB0byB0aGlzIHRlY2huaWMgdGhlIHBhdGggbG9va3MgYXdmdWwgaWYgeW91IHByaW50IGl0IGFzIGEKKwkgKiBzdHJpbmcuCisJICovCisJbGVuID0gMDsKKwl3aGlsZSAoKndjX3BhcnQgIT0gTlVMKQorCXsKKwkgICAgaWYgKFNUUk5DTVAod2NfcGFydCwgIioqIiwgMikgPT0gMCkKKwkgICAgeworCQlmZl9leHBhbmRfYnVmZmVyW2xlbisrXSA9ICp3Y19wYXJ0Kys7CisJCWZmX2V4cGFuZF9idWZmZXJbbGVuKytdID0gKndjX3BhcnQrKzsKKworCQlsbGV2ZWwgPSBzdHJ0b2woKGNoYXIgKil3Y19wYXJ0LCAoY2hhciAqKikmZXJycHQsIDEwKTsKKwkJaWYgKGVycnB0ICE9IHdjX3BhcnQgJiYgbGxldmVsID4gMCAmJiBsbGV2ZWwgPCAyNTUpCisJCSAgICBmZl9leHBhbmRfYnVmZmVyW2xlbisrXSA9IGxsZXZlbDsKKwkJZWxzZSBpZiAoZXJycHQgIT0gd2NfcGFydCAmJiBsbGV2ZWwgPT0gMCkKKwkJICAgIC8qIHJlc3RyaWN0IGlzIDAgLT4gcmVtb3ZlIGFscmVhZHkgYWRkZWQgJyoqJyAqLworCQkgICAgbGVuIC09IDI7CisJCWVsc2UKKwkJICAgIGZmX2V4cGFuZF9idWZmZXJbbGVuKytdID0gRkZfTUFYX1NUQVJfU1RBUl9FWFBBTkQ7CisJCXdjX3BhcnQgPSBlcnJwdDsKKwkJaWYgKCp3Y19wYXJ0ICE9IFBBVEhTRVAgJiYgKndjX3BhcnQgIT0gTlVMKQorCQl7CisJCSAgICBFTVNHMihfKCJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgZm9sbG93ZWQgYnkgJyVzJy4iKSwgUEFUSFNFUFNUUik7CisJCSAgICBnb3RvIGVycm9yX3JldHVybjsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKwkJZmZfZXhwYW5kX2J1ZmZlcltsZW4rK10gPSAqd2NfcGFydCsrOworCX0KKwlmZl9leHBhbmRfYnVmZmVyW2xlbl0gPSBOVUw7CisJZmZfc2VhcmNoX2N0eC0+ZmZzY193Y19wYXRoID0KKwkgICAgdmltX3N0cnNhdmUoZmZfZXhwYW5kX2J1ZmZlcik7CisKKwlpZiAoZmZfc2VhcmNoX2N0eC0+ZmZzY193Y19wYXRoID09IE5VTEwpCisJICAgIGdvdG8gZXJyb3JfcmV0dXJuOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwlmZl9zZWFyY2hfY3R4LT5mZnNjX2ZpeF9wYXRoID0gdmltX3N0cnNhdmUocGF0aCk7CisKKyAgICBpZiAoZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIgPT0gTlVMTCkKKyAgICB7CisJLyogc3RvcmUgdGhlIGZpeCBwYXJ0IGFzIHN0YXJ0ZGlyLgorCSAqIFRoaXMgaXMgbmVlZGVkIGlmIHRoZSBwYXJhbWV0ZXIgcGF0aCBpcyBmdWxseSBxdWFsaWZpZWQuCisJICovCisJZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIgPSB2aW1fc3Ryc2F2ZShmZl9zZWFyY2hfY3R4LT5mZnNjX2ZpeF9wYXRoKTsKKwlpZiAoZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIpCisJICAgIGZmX3NlYXJjaF9jdHgtPmZmc2NfZml4X3BhdGhbMF0gPSBOVUw7CisgICAgfQorCisgICAgLyogY3JlYXRlIGFuIGFic29sdXRlIHBhdGggKi8KKyAgICBTVFJDUFkoZmZfZXhwYW5kX2J1ZmZlciwgZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIpOworICAgIGFkZF9wYXRoc2VwKGZmX2V4cGFuZF9idWZmZXIpOworICAgIFNUUkNBVChmZl9leHBhbmRfYnVmZmVyLCBmZl9zZWFyY2hfY3R4LT5mZnNjX2ZpeF9wYXRoKTsKKyAgICBhZGRfcGF0aHNlcChmZl9leHBhbmRfYnVmZmVyKTsKKworICAgIHNwdHIgPSBmZl9jcmVhdGVfc3RhY2tfZWxlbWVudChmZl9leHBhbmRfYnVmZmVyLAorI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorCSAgICBmZl9zZWFyY2hfY3R4LT5mZnNjX3djX3BhdGgsCisjZW5kaWYKKwkgICAgbGV2ZWwsIDApOworCisgICAgaWYgKHNwdHIgPT0gTlVMTCkKKwlnb3RvIGVycm9yX3JldHVybjsKKworICAgIGZmX3B1c2goc3B0cik7CisKKyAgICBmZl9zZWFyY2hfY3R4LT5mZnNjX2ZpbGVfdG9fc2VhcmNoID0gdmltX3N0cnNhdmUoZmlsZW5hbWUpOworICAgIGlmIChmZl9zZWFyY2hfY3R4LT5mZnNjX2ZpbGVfdG9fc2VhcmNoID09IE5VTEwpCisJZ290byBlcnJvcl9yZXR1cm47CisKKyAgICByZXR1cm4gZmZfc2VhcmNoX2N0eDsKKworZXJyb3JfcmV0dXJuOgorICAgIC8qCisgICAgICogV2UgY2xlYXIgdGhlIHNlYXJjaCBjb250ZXh0IG5vdyEKKyAgICAgKiBFdmVuIHdoZW4gdGhlIGNhbGxlciBnYXZlIHVzIGEgKHBlcmhhcHMgdmFsaWQpIGNvbnRleHQgd2UgZnJlZSBpdCBoZXJlLAorICAgICAqIGFzIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBkZXN0cm95ZWQgaXQuCisgICAgICovCisgICAgdmltX2ZpbmRmaWxlX2NsZWFudXAoZmZfc2VhcmNoX2N0eCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfUEFUSF9FWFRSQSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBHZXQgdGhlIHN0b3BkaXIgc3RyaW5nLiAgQ2hlY2sgdGhhdCAnOycgaXMgbm90IGVzY2FwZWQuCisgKi8KKyAgICBjaGFyX3UgKgordmltX2ZpbmRmaWxlX3N0b3BkaXIoYnVmKQorICAgIGNoYXJfdQkqYnVmOworeworICAgIGNoYXJfdQkqcl9wdHIgPSBidWY7CisKKyAgICB3aGlsZSAoKnJfcHRyICE9IE5VTCAmJiAqcl9wdHIgIT0gJzsnKQorICAgIHsKKwlpZiAocl9wdHJbMF0gPT0gJ1xcJyAmJiByX3B0clsxXSA9PSAnOycpCisJeworCSAgICAvKiBvdmVyd3JpdGUgdGhlIGVzY2FwZSBjaGFyLAorCSAgICAgKiB1c2UgU1RSTEVOKHJfcHRyKSB0byBtb3ZlIHRoZSB0cmFpbGluZyAnXDAnCisJICAgICAqLworCSAgICBtY2hfbWVtbW92ZShyX3B0ciwgcl9wdHIgKyAxLCBTVFJMRU4ocl9wdHIpKTsKKwkgICAgcl9wdHIrKzsKKwl9CisJcl9wdHIrKzsKKyAgICB9CisgICAgaWYgKCpyX3B0ciA9PSAnOycpCisgICAgeworCSpyX3B0ciA9IDA7CisJcl9wdHIrKzsKKyAgICB9CisgICAgZWxzZSBpZiAoKnJfcHRyID09IE5VTCkKKwlyX3B0ciA9IE5VTEw7CisgICAgcmV0dXJuIHJfcHRyOworfQorI2VuZGlmCisKKy8qIENsZWFuIHVwIHRoZSBnaXZlbiBzZWFyY2ggY29udGV4dC4gQ2FuIGhhbmRsZSBhIE5VTEwgcG9pbnRlciAqLworICAgIHZvaWQKK3ZpbV9maW5kZmlsZV9jbGVhbnVwKGN0eCkKKyAgICB2b2lkCSpjdHg7Cit7CisgICAgaWYgKE5VTEwgPT0gY3R4KQorCXJldHVybjsKKworICAgIGZmX3NlYXJjaF9jdHggPSBjdHg7CisKKyAgICB2aW1fZmluZGZpbGVfZnJlZV92aXNpdGVkKGN0eCk7CisgICAgZmZfY2xlYXIoKTsKKyAgICB2aW1fZnJlZShjdHgpOworICAgIGZmX3NlYXJjaF9jdHggPSBOVUxMOworfQorCisvKgorICogRmluZCBhIGZpbGUgaW4gYSBzZWFyY2ggY29udGV4dC4KKyAqIFRoZSBzZWFyY2ggY29udGV4dCB3YXMgY3JlYXRlZCB3aXRoIHZpbV9maW5kZmlsZV9pbml0KCkgYWJvdmUuCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGFuIGFsbG9jYXRlZCBmaWxlIG5hbWUgb3IgTlVMTCBpZiBub3RoaW5nIGZvdW5kLgorICogVG8gZ2V0IGFsbCBtYXRjaGluZyBmaWxlcyBjYWxsIHRoaXMgZnVuY3Rpb24gdW50aWwgeW91IGdldCBOVUxMLgorICoKKyAqIElmIHRoZSBwYXNzZWQgc2VhcmNoX2NvbnRleHQgaXMgTlVMTCwgaXQgdGhlIHJldHVybnMgTlVMTC4KKyAqCisgKiBUaGUgc2VhcmNoIGFsZ29yaXRobSBpcyBkZXB0aCBmaXJzdC4gVG8gY2hhbmdlIHRoaXMgcmVwbGFjZSB0aGUKKyAqIHN0YWNrIHdpdGggYSBsaXN0IChkb24ndCBmb3JnZXQgdG8gbGVhdmUgcGFydGx5IHNlYXJjaGVkIGRpcmVjdG9yaWVzIG9uIHRoZQorICogdG9wIG9mIHRoZSBsaXN0KS4KKyAqLworICAgIGNoYXJfdSAqCit2aW1fZmluZGZpbGUoc2VhcmNoX2N0eCkKKyAgICB2b2lkCSpzZWFyY2hfY3R4OworeworICAgIGNoYXJfdQkqZmlsZV9wYXRoOworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorICAgIGNoYXJfdQkqcmVzdF9vZl93aWxkY2FyZHM7CisgICAgY2hhcl91CSpwYXRoX2VuZCA9IE5VTEw7CisjZW5kaWYKKyAgICBmZl9zdGFja19UCSpjdHg7CisjaWYgZGVmaW5lZChGRUFUX1NFQVJDSFBBVEgpIHx8IGRlZmluZWQoRkVBVF9QQVRIX0VYVFJBKQorICAgIGludAkJbGVuOworI2VuZGlmCisgICAgaW50CQlpOworICAgIGNoYXJfdQkqcDsKKyNpZmRlZiBGRUFUX1NFQVJDSFBBVEgKKyAgICBjaGFyX3UJKnN1ZjsKKyNlbmRpZgorCisgICAgaWYgKHNlYXJjaF9jdHggPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGZmX3NlYXJjaF9jdHggPSAoZmZfc2VhcmNoX2N0eF9UKilzZWFyY2hfY3R4OworCisgICAgLyoKKyAgICAgKiBmaWxlcGF0aCBpcyB1c2VkIGFzIGJ1ZmZlciBmb3IgdmFyaW91cyBhY3Rpb25zIGFuZCBhcyB0aGUgc3RvcmFnZSB0bworICAgICAqIHJldHVybiBhIGZvdW5kIGZpbGVuYW1lLgorICAgICAqLworICAgIGlmICgoZmlsZV9wYXRoID0gYWxsb2MoKGludClNQVhQQVRITCkpID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBGRUFUX1BBVEhfRVhUUkEKKyAgICAvKiBzdG9yZSB0aGUgZW5kIG9mIHRoZSBzdGFydCBkaXIgLS0gbmVlZGVkIGZvciB1cHdhcmQgc2VhcmNoICovCisgICAgaWYgKGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RhcnRfZGlyICE9IE5VTEwpCisJcGF0aF9lbmQgPSAmZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXJbU1RSTEVOKGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RhcnRfZGlyKV07CisjZW5kaWYKKworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorICAgIC8qIHVwd2FyZCBzZWFyY2ggbG9vcCAqLworICAgIGZvciAoOzspCisgICAgeworI2VuZGlmCisJLyogZG93bndhcmQgc2VhcmNoIGxvb3AgKi8KKwlmb3IgKDs7KQorCXsKKwkgICAgLyogY2hlY2sgaWYgdXNlciB1c2VyIHdhbnRzIHRvIHN0b3AgdGhlIHNlYXJjaCovCisJICAgIHVpX2JyZWFrY2hlY2soKTsKKwkgICAgaWYgKGdvdF9pbnQpCisJCWJyZWFrOworCisJICAgIC8qIGdldCBkaXJlY3RvcnkgdG8gd29yayBvbiBmcm9tIHN0YWNrICovCisJICAgIGN0eCA9IGZmX3BvcCgpOworCSAgICBpZiAoY3R4ID09IE5VTEwpCisJCWJyZWFrOworCisJICAgIC8qCisJICAgICAqIFRPRE86IGRlY2lkZSBpZiB3ZSBsZWF2ZSB0aGlzIHRlc3QgaW4KKwkgICAgICoKKwkgICAgICogR09PRDogZG9uJ3Qgc2VhcmNoIGEgZGlyZWN0b3J5KC10cmVlKSB0d2ljZS4KKwkgICAgICogQkFEOiAgLSBjaGVjayBsaW5rZWQgbGlzdCBmb3IgZXZlcnkgbmV3IGRpcmVjdG9yeSBlbnRlcmVkLgorCSAgICAgKiAgICAgICAtIGNoZWNrIGZvciBkb3VibGUgZmlsZXMgYWxzbyBkb25lIGJlbG93CisJICAgICAqCisJICAgICAqIEhlcmUgd2UgY2hlY2sgaWYgd2UgYWxyZWFkeSBzZWFyY2hlZCB0aGlzIGRpcmVjdG9yeS4KKwkgICAgICogV2UgYWxyZWFkeSBzZWFyY2hlZCBhIGRpcmVjdG9yeSBpZjoKKwkgICAgICogMSkgVGhlIGRpcmVjdG9yeSBpcyB0aGUgc2FtZS4KKwkgICAgICogMikgV2Ugd291bGQgdXNlIHRoZSBzYW1lIHdpbGRjYXJkIHN0cmluZy4KKwkgICAgICoKKwkgICAgICogR29vZCBpZiB5b3UgaGF2ZSBsaW5rcyBvbiBzYW1lIGRpcmVjdG9yeSB2aWEgc2V2ZXJhbCB3YXlzCisJICAgICAqICBvciB5b3UgaGF2ZSBzZWxmcmVmZXJlbmNlcyBpbiBkaXJlY3RvcmllcyAoZS5nLiBTdVNFIExpbnV4IDYuMzoKKwkgICAgICogIC9ldGMvcmMuZC9pbml0LmQgaXMgbGlua2VkIHRvIC9ldGMvcmMuZCAtPiBlbmRsZXNzIGxvb3ApCisJICAgICAqCisJICAgICAqIFRoaXMgY2hlY2sgaXMgb25seSBuZWVkZWQgZm9yIGRpcmVjdG9yaWVzIHdlIHdvcmsgb24gZm9yIHRoZQorCSAgICAgKiBmaXJzdCB0aW1lIChoZW5jZSBjdHgtPmZmX2ZpbGVhcnJheSA9PSBOVUxMKQorCSAgICAgKi8KKwkgICAgaWYgKGN0eC0+ZmZzX2ZpbGVhcnJheSA9PSBOVUxMCisJCSAgICAmJiBmZl9jaGVja192aXNpdGVkKCZmZl9zZWFyY2hfY3R4LT5mZnNjX2Rpcl92aXNpdGVkX2xpc3QKKwkJCQkJCQkgIC0+ZmZ2bF92aXNpdGVkX2xpc3QsCisJCQljdHgtPmZmc19maXhfcGF0aAorI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorCQkJLCBjdHgtPmZmc193Y19wYXRoCisjZW5kaWYKKwkJCSkgPT0gRkFJTCkKKwkgICAgeworI2lmZGVmIEZGX1ZFUkJPU0UKKwkJaWYgKHBfdmVyYm9zZSA+PSA1KQorCQl7CisJCSAgICAvKiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUgKi8KKwkJICAgIG1zZ19zY3JvbGwgPSBUUlVFOworCQkgICAgc21zZygoY2hhcl91ICopIkFscmVhZHkgU2VhcmNoZWQ6ICVzICglcykiLAorCQkJCQkgICBjdHgtPmZmc19maXhfcGF0aCwgY3R4LT5mZnNfd2NfcGF0aCk7CisJCSAgICAvKiBkb24ndCBvdmVyd3JpdGUgdGhpcyBlaXRoZXIgKi8KKwkJICAgIG1zZ19wdXRzKChjaGFyX3UgKikiXG4iKTsKKwkJICAgIGNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKwkJfQorI2VuZGlmCisJCWZmX2ZyZWVfc3RhY2tfZWxlbWVudChjdHgpOworCQljb250aW51ZTsKKwkgICAgfQorI2lmZGVmIEZGX1ZFUkJPU0UKKwkgICAgZWxzZSBpZiAocF92ZXJib3NlID49IDUpCisJICAgIHsKKwkJLyogYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlICovCisJCW1zZ19zY3JvbGwgPSBUUlVFOworCQlzbXNnKChjaGFyX3UgKikiU2VhcmNoaW5nOiAlcyAoJXMpIiwgY3R4LT5mZnNfZml4X3BhdGgsCisJCQljdHgtPmZmc193Y19wYXRoKTsKKwkJLyogZG9uJ3Qgb3ZlcndyaXRlIHRoaXMgZWl0aGVyICovCisJCW1zZ19wdXRzKChjaGFyX3UgKikiXG4iKTsKKwkJY21kbGluZV9yb3cgPSBtc2dfcm93OworCSAgICB9CisjZW5kaWYKKworCSAgICAvKiBjaGVjayBkZXB0aCAqLworCSAgICBpZiAoY3R4LT5mZnNfbGV2ZWwgPD0gMCkKKwkgICAgeworCQlmZl9mcmVlX3N0YWNrX2VsZW1lbnQoY3R4KTsKKwkJY29udGludWU7CisJICAgIH0KKworCSAgICBmaWxlX3BhdGhbMF0gPSBOVUw7CisKKwkgICAgLyoKKwkgICAgICogSWYgbm8gZmlsZWFycmF5IHRpbGwgbm93IGV4cGFuZCB3aWxkY2FyZHMKKwkgICAgICogVGhlIGZ1bmN0aW9uIGV4cGFuZF93aWxkY2FyZHMoKSBjYW4gaGFuZGxlIGFuIGFycmF5IG9mIHBhdGhzCisJICAgICAqIGFuZCBhbGwgcG9zc2libGUgZXhwYW5kcyBhcmUgcmV0dXJuZWQgaW4gb25lIGFycmF5LiBXZSB1c2UgdGhpcworCSAgICAgKiB0byBoYW5kbGUgdGhlIGV4cGFuc2lvbiBvZiAnKionIGludG8gYW4gZW1wdHkgc3RyaW5nLgorCSAgICAgKi8KKwkgICAgaWYgKGN0eC0+ZmZzX2ZpbGVhcnJheSA9PSBOVUxMKQorCSAgICB7CisJCWNoYXJfdSAqZGlycHRyc1syXTsKKworCQkvKiB3ZSB1c2UgZmlsZXBhdGggdG8gYnVpbGQgdGhlIHBhdGggZXhwYW5kX3dpbGRjYXJkcygpIHNob3VsZAorCQkgKiBleHBhbmQuCisJCSAqLworCQlkaXJwdHJzWzBdID0gZmlsZV9wYXRoOworCQlkaXJwdHJzWzFdID0gTlVMTDsKKworCQkvKiBpZiB3ZSBoYXZlIGEgc3RhcnQgZGlyIGNvcHkgaXQgaW4gKi8KKwkJaWYgKCF2aW1faXNBYnNOYW1lKGN0eC0+ZmZzX2ZpeF9wYXRoKQorCQkJJiYgZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIpCisJCXsKKwkJICAgIFNUUkNQWShmaWxlX3BhdGgsIGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RhcnRfZGlyKTsKKwkJICAgIGFkZF9wYXRoc2VwKGZpbGVfcGF0aCk7CisJCX0KKworCQkvKiBhcHBlbmQgdGhlIGZpeCBwYXJ0IG9mIHRoZSBzZWFyY2ggcGF0aCAqLworCQlTVFJDQVQoZmlsZV9wYXRoLCBjdHgtPmZmc19maXhfcGF0aCk7CisJCWFkZF9wYXRoc2VwKGZpbGVfcGF0aCk7CisKKyNpZmRlZiBGRUFUX1BBVEhfRVhUUkEKKwkJcmVzdF9vZl93aWxkY2FyZHMgPSBjdHgtPmZmc193Y19wYXRoOworCQlpZiAoKnJlc3Rfb2Zfd2lsZGNhcmRzICE9IE5VTCkKKwkJeworCQkgICAgbGVuID0gKGludClTVFJMRU4oZmlsZV9wYXRoKTsKKwkJICAgIGlmIChTVFJOQ01QKHJlc3Rfb2Zfd2lsZGNhcmRzLCAiKioiLCAyKSA9PSAwKQorCQkgICAgeworCQkJLyogcG9pbnRlciB0byB0aGUgcmVzdHJpY3QgYnl0ZQorCQkJICogVGhlIHJlc3RyaWN0IGJ5dGUgaXMgbm90IGEgY2hhcmFjdGVyIQorCQkJICovCisJCQlwID0gcmVzdF9vZl93aWxkY2FyZHMgKyAyOworCisJCQlpZiAoKnAgPiAwKQorCQkJeworCQkJICAgICgqcCktLTsKKwkJCSAgICBmaWxlX3BhdGhbbGVuKytdID0gJyonOworCQkJfQorCisJCQlpZiAoKnAgPT0gMCkKKwkJCXsKKwkJCSAgICAvKiByZW1vdmUgJyoqPG51bWI+IGZyb20gd2lsZGNhcmRzICovCisJCQkgICAgbWNoX21lbW1vdmUocmVzdF9vZl93aWxkY2FyZHMsCisJCQkJICAgIHJlc3Rfb2Zfd2lsZGNhcmRzICsgMywKKwkJCQkgICAgU1RSTEVOKHJlc3Rfb2Zfd2lsZGNhcmRzICsgMykgKyAxKTsKKwkJCX0KKwkJCWVsc2UKKwkJCSAgICByZXN0X29mX3dpbGRjYXJkcyArPSAzOworCisJCQlpZiAoY3R4LT5mZnNfc3Rhcl9zdGFyX2VtcHR5ID09IDApCisJCQl7CisJCQkgICAgLyogaWYgbm90IGRvbmUgYmVmb3JlLCBleHBhbmQgJyoqJyB0byBlbXB0eSAqLworCQkJICAgIGN0eC0+ZmZzX3N0YXJfc3Rhcl9lbXB0eSA9IDE7CisJCQkgICAgZGlycHRyc1sxXSA9IGN0eC0+ZmZzX2ZpeF9wYXRoOworCQkJfQorCQkgICAgfQorCisJCSAgICAvKgorCQkgICAgICogSGVyZSB3ZSBjb3B5IHVudGlsIHRoZSBuZXh0IHBhdGggc2VwYXJhdG9yIG9yIHRoZSBlbmQgb2YKKwkJICAgICAqIHRoZSBwYXRoLiBJZiB3ZSBzdG9wIGF0IGEgcGF0aCBzZXBhcmF0b3IsIHRoZXJlIGlzCisJCSAgICAgKiBzdGlsbCBzb210aGluZyBlbHNlIGxlZnQuIFRoaXMgaXMgaGFuZGxlZCBiZWxvdyBieQorCQkgICAgICogcHVzaGluZyBldmVyeSBkaXJlY3RvcnkgcmV0dXJuZWQgZnJvbSBleHBhbmRfd2lsZGNhcmRzKCkKKwkJICAgICAqIG9uIHRoZSBzdGFjayBhZ2FpbiBmb3IgZnVydGhlciBzZWFyY2guCisJCSAgICAgKi8KKwkJICAgIHdoaWxlICgqcmVzdF9vZl93aWxkY2FyZHMKKwkJCSAgICAmJiAhdmltX2lzcGF0aHNlcCgqcmVzdF9vZl93aWxkY2FyZHMpKQorCQkJZmlsZV9wYXRoW2xlbisrXSA9ICpyZXN0X29mX3dpbGRjYXJkcysrOworCisJCSAgICBmaWxlX3BhdGhbbGVuXSA9IE5VTDsKKwkJICAgIGlmICh2aW1faXNwYXRoc2VwKCpyZXN0X29mX3dpbGRjYXJkcykpCisJCQlyZXN0X29mX3dpbGRjYXJkcysrOworCQl9CisjZW5kaWYKKworCQkvKgorCQkgKiBFeHBhbmQgd2lsZGNhcmRzIGxpa2UgIioiIGFuZCAiJFZBUiIuCisJCSAqIElmIHRoZSBwYXRoIGlzIGEgVVJMIGRvbid0IHRyeSB0aGlzLgorCQkgKi8KKwkJaWYgKHBhdGhfd2l0aF91cmwoZGlycHRyc1swXSkpCisJCXsKKwkJICAgIGN0eC0+ZmZzX2ZpbGVhcnJheSA9IChjaGFyX3UgKiopCisJCQkJCSAgICAgIGFsbG9jKCh1bnNpZ25lZClzaXplb2YoY2hhciAqKSk7CisJCSAgICBpZiAoY3R4LT5mZnNfZmlsZWFycmF5ICE9IE5VTEwKKwkJCSAgICAmJiAoY3R4LT5mZnNfZmlsZWFycmF5WzBdCisJCQkJPSB2aW1fc3Ryc2F2ZShkaXJwdHJzWzBdKSkgIT0gTlVMTCkKKwkJCWN0eC0+ZmZzX2ZpbGVhcnJheV9zaXplID0gMTsKKwkJICAgIGVsc2UKKwkJCWN0eC0+ZmZzX2ZpbGVhcnJheV9zaXplID0gMDsKKwkJfQorCQllbHNlCisJCSAgICBleHBhbmRfd2lsZGNhcmRzKChkaXJwdHJzWzFdID09IE5VTEwpID8gMSA6IDIsIGRpcnB0cnMsCisJCQkgICAgJmN0eC0+ZmZzX2ZpbGVhcnJheV9zaXplLAorCQkJICAgICZjdHgtPmZmc19maWxlYXJyYXksCisJCQkgICAgRVdfRElSfEVXX0FERFNMQVNIfEVXX1NJTEVOVCk7CisKKwkJY3R4LT5mZnNfZmlsZWFycmF5X2N1ciA9IDA7CisJCWN0eC0+ZmZzX3N0YWdlID0gMDsKKwkgICAgfQorI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorCSAgICBlbHNlCisJCXJlc3Rfb2Zfd2lsZGNhcmRzID0gJmN0eC0+ZmZzX3djX3BhdGhbU1RSTEVOKGN0eC0+ZmZzX3djX3BhdGgpXTsKKyNlbmRpZgorCisJICAgIGlmIChjdHgtPmZmc19zdGFnZSA9PSAwKQorCSAgICB7CisJCS8qIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Ugd29yayBvbiB0aGlzIGRpcmVjdG9yeSAqLworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorCQlpZiAoKnJlc3Rfb2Zfd2lsZGNhcmRzID09IE5VTCkKKyNlbmRpZgorCQl7CisJCSAgICAvKgorCQkgICAgICogd2UgZG9uJ3QgaGF2ZSBmdXJ0aGVyIHdpbGRjYXJkcyB0byBleHBhbmQsIHNvIHdlIGhhdmUgdG8KKwkJICAgICAqIGNoZWNrIGZvciB0aGUgZmluYWwgZmlsZSBub3cKKwkJICAgICAqLworCQkgICAgZm9yIChpID0gY3R4LT5mZnNfZmlsZWFycmF5X2N1cjsKKwkJCQkJICAgICBpIDwgY3R4LT5mZnNfZmlsZWFycmF5X3NpemU7ICsraSkKKwkJICAgIHsKKwkJCWlmICghcGF0aF93aXRoX3VybChjdHgtPmZmc19maWxlYXJyYXlbaV0pCisJCQkJCSAmJiAhbWNoX2lzZGlyKGN0eC0+ZmZzX2ZpbGVhcnJheVtpXSkpCisJCQkgICAgY29udGludWU7ICAgLyogbm90IGEgZGlyZWN0b3J5ICovCisKKwkJCS8qIHByZXBhcmUgdGhlIGZpbGVuYW1lIHRvIGJlIGNoZWNrZWQgZm9yIGV4aXN0YW5jZQorCQkJICogYmVsb3cgKi8KKwkJCVNUUkNQWShmaWxlX3BhdGgsIGN0eC0+ZmZzX2ZpbGVhcnJheVtpXSk7CisJCQlhZGRfcGF0aHNlcChmaWxlX3BhdGgpOworCQkJU1RSQ0FUKGZpbGVfcGF0aCwgZmZfc2VhcmNoX2N0eC0+ZmZzY19maWxlX3RvX3NlYXJjaCk7CisKKwkJCS8qCisJCQkgKiBUcnkgd2l0aG91dCBleHRyYSBzdWZmaXggYW5kIHRoZW4gd2l0aCBzdWZmaXhlcworCQkJICogZnJvbSAnc3VmZml4ZXNhZGQnLgorCQkJICovCisjaWZkZWYgRkVBVF9TRUFSQ0hQQVRICisJCQlsZW4gPSAoaW50KVNUUkxFTihmaWxlX3BhdGgpOworCQkJc3VmID0gY3VyYnVmLT5iX3Bfc3VhOworCQkJZm9yICg7OykKKyNlbmRpZgorCQkJeworCQkJICAgIC8qIGlmIGZpbGUgZXhpc3RzIGFuZCB3ZSBkaWRuJ3QgYWxyZWFkeSBmaW5kIGl0ICovCisJCQkgICAgaWYgKChwYXRoX3dpdGhfdXJsKGZpbGVfcGF0aCkKKwkJCQkJfHwgKG1jaF9nZXRwZXJtKGZpbGVfcGF0aCkgPj0gMAorCQkJCQkgICAgJiYgKCFmZl9zZWFyY2hfY3R4LT5mZnNjX25lZWRfZGlyCisJCQkJCQl8fCBtY2hfaXNkaXIoZmlsZV9wYXRoKSkpKQorI2lmbmRlZiBGRl9WRVJCT1NFCisJCQkJICAgICYmIChmZl9jaGVja192aXNpdGVkKAorCQkJCQkgICAgJmZmX3NlYXJjaF9jdHgtPmZmc2NfdmlzaXRlZF9saXN0LT5mZnZsX3Zpc2l0ZWRfbGlzdCwKKwkJCQkJICAgIGZpbGVfcGF0aAorI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorCQkJCQkgICAgLCAoY2hhcl91ICopIiIKKyNlbmRpZgorCQkJCQkgICAgKSA9PSBPSykKKyNlbmRpZgorCQkJICAgICAgICkKKwkJCSAgICB7CisjaWZkZWYgRkZfVkVSQk9TRQorCQkJCWlmIChmZl9jaGVja192aXNpdGVkKAorCQkJCQkgICAgJmZmX3NlYXJjaF9jdHgtPmZmc2NfdmlzaXRlZF9saXN0LT5mZnZsX3Zpc2l0ZWRfbGlzdCwKKwkJCQkJICAgIGZpbGVfcGF0aAorI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorCQkJCQkgICAgLCAoY2hhcl91ICopIiIKKyNlbmRpZgorCQkJCQkJICAgICkgPT0gRkFJTCkKKwkJCQl7CisJCQkJICAgIGlmIChwX3ZlcmJvc2UgPj0gNSkKKwkJCQkgICAgeworCQkJCQkvKiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUgKi8KKwkJCQkJbXNnX3Njcm9sbCA9IFRSVUU7CisJCQkJCW1zZ19zdHIoKGNoYXJfdSAqKSJBbHJlYWR5OiAlcyIsCisJCQkJCQkJCSAgIGZpbGVfcGF0aCk7CisJCQkJCS8qIGRvbid0IG92ZXJ3cml0ZSB0aGlzIGVpdGhlciAqLworCQkJCQltc2dfcHV0cygoY2hhcl91ICopIlxuIik7CisJCQkJCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKwkJCQkgICAgfQorCQkJCSAgICBjb250aW51ZTsKKwkJCQl9CisjZW5kaWYKKworCQkJCS8qIHB1c2ggZGlyIHRvIGV4YW1pbmUgcmVzdCBvZiBzdWJkaXJzIGxhdGVyICovCisJCQkJY3R4LT5mZnNfZmlsZWFycmF5X2N1ciA9IGkgKyAxOworCQkJCWZmX3B1c2goY3R4KTsKKworCQkJCXNpbXBsaWZ5X2ZpbGVuYW1lKGZpbGVfcGF0aCk7CisJCQkJaWYgKG1jaF9kaXJuYW1lKGZmX2V4cGFuZF9idWZmZXIsIE1BWFBBVEhMKQorCQkJCQkJCQkJPT0gT0spCisJCQkJeworCQkJCSAgICBwID0gc2hvcnRlbl9mbmFtZShmaWxlX3BhdGgsCisJCQkJCQkJICAgIGZmX2V4cGFuZF9idWZmZXIpOworCQkJCSAgICBpZiAocCAhPSBOVUxMKQorCQkJCQltY2hfbWVtbW92ZShmaWxlX3BhdGgsIHAsCisJCQkJCQkJICAgICAgIFNUUkxFTihwKSArIDEpOworCQkJCX0KKyNpZmRlZiBGRl9WRVJCT1NFCisJCQkJaWYgKHBfdmVyYm9zZSA+PSA1KQorCQkJCXsKKwkJCQkgICAgLyogYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlICovCisJCQkJICAgIG1zZ19zY3JvbGwgPSBUUlVFOworCQkJCSAgICBtc2dfc3RyKChjaGFyX3UgKikiSElUOiAlcyIsIGZpbGVfcGF0aCk7CisJCQkJICAgIC8qIGRvbid0IG92ZXJ3cml0ZSB0aGlzIGVpdGhlciAqLworCQkJCSAgICBtc2dfcHV0cygoY2hhcl91ICopIlxuIik7CisJCQkJICAgIGNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKwkJCQl9CisjZW5kaWYKKwkJCQlyZXR1cm4gZmlsZV9wYXRoOworCQkJICAgIH0KKworI2lmZGVmIEZFQVRfU0VBUkNIUEFUSAorCQkJICAgIC8qIE5vdCBmb3VuZCBvciBmb3VuZCBhbHJlYWR5LCB0cnkgbmV4dCBzdWZmaXguICovCisJCQkgICAgaWYgKCpzdWYgPT0gTlVMKQorCQkJCWJyZWFrOworCQkJICAgIGNvcHlfb3B0aW9uX3BhcnQoJnN1ZiwgZmlsZV9wYXRoICsgbGVuLAorCQkJCQkJCSBNQVhQQVRITCAtIGxlbiwgIiwiKTsKKyNlbmRpZgorCQkJfQorCQkgICAgfQorCQl9CisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisJCWVsc2UKKwkJeworCQkgICAgLyoKKwkJICAgICAqIHN0aWxsIHdpbGRjYXJkcyBsZWZ0LCBwdXNoIHRoZSBkaXJlY3RvcmllcyBmb3IgZnVydGhlcgorCQkgICAgICogc2VhcmNoCisJCSAgICAgKi8KKwkJICAgIGZvciAoaSA9IGN0eC0+ZmZzX2ZpbGVhcnJheV9jdXI7IGkgPCBjdHgtPmZmc19maWxlYXJyYXlfc2l6ZTsKKwkJCQkJCQkJCSAgKytpKQorCQkgICAgeworCQkJaWYgKCFtY2hfaXNkaXIoY3R4LT5mZnNfZmlsZWFycmF5W2ldKSkKKwkJCSAgICBjb250aW51ZTsJLyogbm90IGEgZGlyZWN0b3J5ICovCisKKwkJCWZmX3B1c2goZmZfY3JlYXRlX3N0YWNrX2VsZW1lbnQoY3R4LT5mZnNfZmlsZWFycmF5W2ldLAorCQkJCSAgICAgIHJlc3Rfb2Zfd2lsZGNhcmRzLCBjdHgtPmZmc19sZXZlbCAtIDEsIDApKTsKKwkJICAgIH0KKwkJfQorI2VuZGlmCisJCWN0eC0+ZmZzX2ZpbGVhcnJheV9jdXIgPSAwOworCQljdHgtPmZmc19zdGFnZSA9IDE7CisJICAgIH0KKworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorCSAgICAvKgorCSAgICAgKiBpZiB3aWxkY2FyZHMgY29udGFpbnMgJyoqJyB3ZSBoYXZlIHRvIGRlc2NlbnQgdGlsbCB3ZSByZWFjaCB0aGUKKwkgICAgICogbGVhdmVzIG9mIHRoZSBkaXJlY3RvcnkgdHJlZS4KKwkgICAgICovCisJICAgIGlmIChTVFJOQ01QKGN0eC0+ZmZzX3djX3BhdGgsICIqKiIsIDIpID09IDApCisJICAgIHsKKwkJZm9yIChpID0gY3R4LT5mZnNfZmlsZWFycmF5X2N1cjsgaSA8IGN0eC0+ZmZzX2ZpbGVhcnJheV9zaXplOyArK2kpCisJCXsKKwkJICAgIGlmIChmbmFtZWNtcChjdHgtPmZmc19maWxlYXJyYXlbaV0sIGN0eC0+ZmZzX2ZpeF9wYXRoKSA9PSAwKQorCQkJY29udGludWU7IC8qIGRvbid0IHJlcHVzaCBzYW1lIGRpcmVjdG9yeSAqLworCQkgICAgaWYgKCFtY2hfaXNkaXIoY3R4LT5mZnNfZmlsZWFycmF5W2ldKSkKKwkJCWNvbnRpbnVlOyAgIC8qIG5vdCBhIGRpcmVjdG9yeSAqLworCQkgICAgZmZfcHVzaChmZl9jcmVhdGVfc3RhY2tfZWxlbWVudChjdHgtPmZmc19maWxlYXJyYXlbaV0sCisJCQkJY3R4LT5mZnNfd2NfcGF0aCwgY3R4LT5mZnNfbGV2ZWwgLSAxLCAxKSk7CisJCX0KKwkgICAgfQorI2VuZGlmCisKKwkgICAgLyogd2UgYXJlIGRvbmUgd2l0aCB0aGUgY3VycmVudCBkaXJlY3RvcnkgKi8KKwkgICAgZmZfZnJlZV9zdGFja19lbGVtZW50KGN0eCk7CisKKwl9CisKKyNpZmRlZiBGRUFUX1BBVEhfRVhUUkEKKwkvKiBJZiB3ZSByZWFjaGVkIHRoaXMsIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIGRvd253YXJkcy4KKwkgKiBMZXQncyBjaGVjayBpZiB3ZSBzaG91bGQgZG8gYW4gdXB3YXJkIHNlYXJjaC4KKwkgKi8KKwlpZiAoZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIKKwkJJiYgZmZfc2VhcmNoX2N0eC0+ZmZzY19zdG9wZGlyc192ICE9IE5VTEwgJiYgIWdvdF9pbnQpCisJeworCSAgICBmZl9zdGFja19UICAqc3B0cjsKKworCSAgICAvKiBpcyB0aGUgbGFzdCBzdGFydGluZyBkaXJlY3RvcnkgaW4gdGhlIHN0b3AgbGlzdD8gKi8KKwkgICAgaWYgKGZmX3BhdGhfaW5fc3RvcGxpc3QoZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIsCisJCSAgICAgICAoaW50KShwYXRoX2VuZCAtIGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RhcnRfZGlyKSwKKwkJICAgICAgIGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RvcGRpcnNfdikgPT0gVFJVRSkKKwkJYnJlYWs7CisKKwkgICAgLyogY3V0IG9mIGxhc3QgZGlyICovCisJICAgIHdoaWxlIChwYXRoX2VuZCA+IGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RhcnRfZGlyCisJCSAgICAmJiAqcGF0aF9lbmQgPT0gUEFUSFNFUCkKKwkJcGF0aF9lbmQtLTsKKwkgICAgd2hpbGUgKHBhdGhfZW5kID4gZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIKKwkJICAgICYmICoocGF0aF9lbmQtMSkgIT0gUEFUSFNFUCkKKwkJcGF0aF9lbmQtLTsKKwkgICAgKnBhdGhfZW5kID0gMDsKKwkgICAgcGF0aF9lbmQtLTsKKworCSAgICBpZiAoKmZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RhcnRfZGlyID09IDApCisJCWJyZWFrOworCisJICAgIFNUUkNQWShmaWxlX3BhdGgsIGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RhcnRfZGlyKTsKKwkgICAgYWRkX3BhdGhzZXAoZmlsZV9wYXRoKTsKKwkgICAgU1RSQ0FUKGZpbGVfcGF0aCwgZmZfc2VhcmNoX2N0eC0+ZmZzY19maXhfcGF0aCk7CisKKwkgICAgLyogY3JlYXRlIGEgbmV3IHN0YWNrIGVudHJ5ICovCisJICAgIHNwdHIgPSBmZl9jcmVhdGVfc3RhY2tfZWxlbWVudChmaWxlX3BhdGgsCisJCSAgICBmZl9zZWFyY2hfY3R4LT5mZnNjX3djX3BhdGgsIGZmX3NlYXJjaF9jdHgtPmZmc2NfbGV2ZWwsIDApOworCSAgICBpZiAoc3B0ciA9PSBOVUxMKQorCQlicmVhazsKKwkgICAgZmZfcHVzaChzcHRyKTsKKwl9CisJZWxzZQorCSAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKworICAgIHZpbV9mcmVlKGZpbGVfcGF0aCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBsaXN0IG9mIGxpc3RzIG9mIHZpc2l0ZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCisgKiBDYW4gaGFuZGxlIGl0IGlmIHRoZSBwYXNzZWQgc2VhcmNoX2NvbnRleHQgaXMgTlVMTDsKKyAqLworICAgIHZvaWQKK3ZpbV9maW5kZmlsZV9mcmVlX3Zpc2l0ZWQoc2VhcmNoX2N0eCkKKyAgICB2b2lkCSpzZWFyY2hfY3R4OworeworICAgIGlmIChzZWFyY2hfY3R4ID09IE5VTEwpCisJcmV0dXJuOworCisgICAgZmZfc2VhcmNoX2N0eCA9IChmZl9zZWFyY2hfY3R4X1QgKilzZWFyY2hfY3R4OworCisgICAgdmltX2ZpbmRmaWxlX2ZyZWVfdmlzaXRlZF9saXN0KCZmZl9zZWFyY2hfY3R4LT5mZnNjX3Zpc2l0ZWRfbGlzdHNfbGlzdCk7CisgICAgdmltX2ZpbmRmaWxlX2ZyZWVfdmlzaXRlZF9saXN0KCZmZl9zZWFyY2hfY3R4LT5mZnNjX2Rpcl92aXNpdGVkX2xpc3RzX2xpc3QpOworfQorCisgICAgc3RhdGljIHZvaWQKK3ZpbV9maW5kZmlsZV9mcmVlX3Zpc2l0ZWRfbGlzdChsaXN0X2hlYWRwKQorICAgIGZmX3Zpc2l0ZWRfbGlzdF9oZHJfVAkqKmxpc3RfaGVhZHA7Cit7CisgICAgZmZfdmlzaXRlZF9saXN0X2hkcl9UICp2cDsKKworICAgIHdoaWxlICgqbGlzdF9oZWFkcCAhPSBOVUxMKQorICAgIHsKKwl2cCA9ICgqbGlzdF9oZWFkcCktPmZmdmxfbmV4dDsKKwlmZl9mcmVlX3Zpc2l0ZWRfbGlzdCgoKmxpc3RfaGVhZHApLT5mZnZsX3Zpc2l0ZWRfbGlzdCk7CisKKwl2aW1fZnJlZSgoKmxpc3RfaGVhZHApLT5mZnZsX2ZpbGVuYW1lKTsKKwl2aW1fZnJlZSgqbGlzdF9oZWFkcCk7CisJKmxpc3RfaGVhZHAgPSB2cDsKKyAgICB9CisgICAgKmxpc3RfaGVhZHAgPSBOVUxMOworfQorCisgICAgc3RhdGljIHZvaWQKK2ZmX2ZyZWVfdmlzaXRlZF9saXN0KHZsKQorICAgIGZmX3Zpc2l0ZWRfVCAqdmw7Cit7CisgICAgZmZfdmlzaXRlZF9UICp2cDsKKworICAgIHdoaWxlICh2bCAhPSBOVUxMKQorICAgIHsKKwl2cCA9IHZsLT5mZnZfbmV4dDsKKyNpZmRlZiBGRUFUX1BBVEhfRVhUUkEKKwl2aW1fZnJlZSh2bC0+ZmZ2X3djX3BhdGgpOworI2VuZGlmCisJdmltX2ZyZWUodmwpOworCXZsID0gdnA7CisgICAgfQorICAgIHZsID0gTlVMTDsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIGFscmVhZHkgdmlzaXRlZCBsaXN0IGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUuIElmIG5vbmUgaXMgZm91bmQgaXQKKyAqIGFsbG9jYXRlcyBhIG5ldyBvbmUuCisgKi8KKyAgICBzdGF0aWMgZmZfdmlzaXRlZF9saXN0X2hkcl9UKgorZmZfZ2V0X3Zpc2l0ZWRfbGlzdChmaWxlbmFtZSwgbGlzdF9oZWFkcCkKKyAgICBjaGFyX3UJCQkqZmlsZW5hbWU7CisgICAgZmZfdmlzaXRlZF9saXN0X2hkcl9UCSoqbGlzdF9oZWFkcDsKK3sKKyAgICBmZl92aXNpdGVkX2xpc3RfaGRyX1QgICpyZXRwdHIgPSBOVUxMOworCisgICAgLyogY2hlY2sgaWYgYSB2aXNpdGVkIGxpc3QgZm9yIHRoZSBnaXZlbiBmaWxlbmFtZSBleGlzdHMgKi8KKyAgICBpZiAoKmxpc3RfaGVhZHAgIT0gTlVMTCkKKyAgICB7CisJcmV0cHRyID0gKmxpc3RfaGVhZHA7CisJd2hpbGUgKHJldHB0ciAhPSBOVUxMKQorCXsKKwkgICAgaWYgKGZuYW1lY21wKGZpbGVuYW1lLCByZXRwdHItPmZmdmxfZmlsZW5hbWUpID09IDApCisJICAgIHsKKyNpZmRlZiBGRl9WRVJCT1NFCisJCWlmIChwX3ZlcmJvc2UgPj0gNSkKKwkJeworCQkgICAgLyogYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlICovCisJCSAgICBtc2dfc2Nyb2xsID0gVFJVRTsKKwkJICAgIG1zZ19zdHIoKGNoYXJfdSAqKSJmZl9nZXRfdmlzaXRlZF9saXN0OiBGT1VORCBsaXN0IGZvciAlcyIsCisJCQkJCQkJCSAgICBmaWxlbmFtZSk7CisJCSAgICAvKiBkb24ndCBvdmVyd3JpdGUgdGhpcyBlaXRoZXIgKi8KKwkJICAgIG1zZ19wdXRzKChjaGFyX3UgKikiXG4iKTsKKwkJICAgIGNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKwkJfQorI2VuZGlmCisJCXJldHVybiByZXRwdHI7CisJICAgIH0KKwkgICAgcmV0cHRyID0gcmV0cHRyLT5mZnZsX25leHQ7CisJfQorICAgIH0KKworI2lmZGVmIEZGX1ZFUkJPU0UKKyAgICBpZiAocF92ZXJib3NlID49IDUpCisgICAgeworCS8qIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZSAqLworCW1zZ19zY3JvbGwgPSBUUlVFOworCW1zZ19zdHIoKGNoYXJfdSAqKSJmZl9nZXRfdmlzaXRlZF9saXN0OiBuZXcgbGlzdCBmb3IgJXMiLCBmaWxlbmFtZSk7CisJLyogZG9uJ3Qgb3ZlcndyaXRlIHRoaXMgZWl0aGVyICovCisJbXNnX3B1dHMoKGNoYXJfdSAqKSJcbiIpOworCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogaWYgd2UgcmVhY2ggdGhpcyB3ZSBkaWRuJ3QgZmluZCBhIGxpc3QgYW5kIHdlIGhhdmUgdG8gYWxsb2NhdGUgbmV3IGxpc3QKKyAgICAgKi8KKyAgICByZXRwdHIgPSAoZmZfdmlzaXRlZF9saXN0X2hkcl9UKilhbGxvYygodW5zaWduZWQpc2l6ZW9mKCpyZXRwdHIpKTsKKyAgICBpZiAocmV0cHRyID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICByZXRwdHItPmZmdmxfdmlzaXRlZF9saXN0ID0gTlVMTDsKKyAgICByZXRwdHItPmZmdmxfZmlsZW5hbWUgPSB2aW1fc3Ryc2F2ZShmaWxlbmFtZSk7CisgICAgaWYgKHJldHB0ci0+ZmZ2bF9maWxlbmFtZSA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShyZXRwdHIpOworCXJldHVybiBOVUxMOworICAgIH0KKyAgICByZXRwdHItPmZmdmxfbmV4dCA9ICpsaXN0X2hlYWRwOworICAgICpsaXN0X2hlYWRwID0gcmV0cHRyOworCisgICAgcmV0dXJuIHJldHB0cjsKK30KKworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorLyoKKyAqIGNoZWNrIGlmIHR3byB3aWxkY2FyZCBwYXRocyBhcmUgZXF1YWwuIFJldHVybnMgVFJVRSBvciBGQUxTRS4KKyAqIFRoZXkgYXJlIGVxdWFsIGlmOgorICogIC0gYm90aCBwYXRocyBhcmUgTlVMTAorICogIC0gdGhleSBoYXZlIHRoZSBzYW1lIGxlbmd0aAorICogIC0gY2hhciBieSBjaGFyIGNvbXBhcmlzb24gaXMgT0sKKyAqICAtIHRoZSBvbmx5IGRpZmZlcmVuY2VzIGFyZSBpbiB0aGUgY291bnRlcnMgYmVoaW5kIGEgJyoqJywgc28KKyAqICAgICcqKlwyMCcgaXMgZXF1YWwgdG8gJyoqXDI0JworICovCisgICAgc3RhdGljIGludAorZmZfd2NfZXF1YWwoczEsIHMyKQorICAgIGNoYXJfdQkqczE7CisgICAgY2hhcl91CSpzMjsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBpZiAoczEgPT0gczIpCisJcmV0dXJuIFRSVUU7CisKKyAgICBpZiAoczEgPT0gTlVMTCB8fCBzMiA9PSBOVUxMKQorCXJldHVybiBGQUxTRTsKKworICAgIGlmIChTVFJMRU4oczEpICE9IFNUUkxFTihzMikpCisJcmV0dXJuIEZBSUw7CisKKyAgICBmb3IgKGkgPSAwOyBzMVtpXSAhPSBOVUwgJiYgczJbaV0gIT0gTlVMOyBpKyspCisgICAgeworCWlmIChzMVtpXSAhPSBzMltpXQorI2lmZGVmIENBU0VfSU5TRU5TSVRJVkVfRklMRU5BTUUKKwkJJiYgVE9VUFBFUl9MT0MoczFbaV0pICE9IFRPVVBQRVJfTE9DKHMyW2ldKQorI2VuZGlmCisJCSkKKwl7CisJICAgIGlmIChpID49IDIpCisJCWlmIChzMVtpLTFdID09ICcqJyAmJiBzMVtpLTJdID09ICcqJykKKwkJICAgIGNvbnRpbnVlOworCQllbHNlCisJCSAgICByZXR1cm4gRkFJTDsKKwkgICAgZWxzZQorCQlyZXR1cm4gRkFJTDsKKwl9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmCisKKy8qCisgKiBtYWludGFpbnMgdGhlIGxpc3Qgb2YgYWxyZWFkeSB2aXNpdGVkIGZpbGVzIGFuZCBkaXJzCisgKiByZXR1cm5zIEZBSUwgaWYgdGhlIGdpdmVuIGZpbGUvZGlyIGlzIGFscmVhZHkgaW4gdGhlIGxpc3QKKyAqIHJldHVybnMgT0sgaWYgaXQgaXMgbmV3bHkgYWRkZWQKKyAqCisgKiBUT0RPOiBXaGF0IHRvIGRvIG9uIG1lbW9yeSBhbGxvY2F0aW9uIHByb2JsZW1zPworICoJIC0+IHJldHVybiBUUlVFIC0gQmV0dGVyIHRoZSBmaWxlIGlzIGZvdW5kIHNldmVyYWwgdGltZXMgaW5zdGVhZCBvZgorICoJICAgIG5ldmVyLgorICovCisgICAgc3RhdGljIGludAorZmZfY2hlY2tfdmlzaXRlZCh2aXNpdGVkX2xpc3QsIGZuYW1lCisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisJLCB3Y19wYXRoCisjZW5kaWYKKwkpCisgICAgZmZfdmlzaXRlZF9UCSoqdmlzaXRlZF9saXN0OworICAgIGNoYXJfdQkJKmZuYW1lOworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorICAgIGNoYXJfdQkJKndjX3BhdGg7CisjZW5kaWYKK3sKKyAgICBmZl92aXNpdGVkX1QJKnZwOworI2lmZGVmIFVOSVgKKyAgICBzdHJ1Y3Qgc3RhdAkJc3Q7CisgICAgaW50CQkJdXJsID0gRkFMU0U7CisjZW5kaWYKKworICAgIC8qIEZvciBhbiBVUkwgd2Ugb25seSBjb21wYXJlIHRoZSBuYW1lLCBvdGhlcndpc2Ugd2UgY29tcGFyZSB0aGUKKyAgICAgKiBkZXZpY2UvaW5vZGUgKHVuaXgpIG9yIHRoZSBmdWxsIHBhdGggbmFtZSAobm90IFVuaXgpLiAqLworICAgIGlmIChwYXRoX3dpdGhfdXJsKGZuYW1lKSkKKyAgICB7CisJU1RSTkNQWShmZl9leHBhbmRfYnVmZmVyLCBmbmFtZSwgTUFYUEFUSEwpOworI2lmZGVmIFVOSVgKKwl1cmwgPSBUUlVFOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZmZfZXhwYW5kX2J1ZmZlclswXSA9IE5VTDsKKyNpZmRlZiBVTklYCisJaWYgKG1jaF9zdGF0KChjaGFyICopZm5hbWUsICZzdCkgPCAwKQorI2Vsc2UKKwlpZiAodmltX0Z1bGxOYW1lKGZuYW1lLCBmZl9leHBhbmRfYnVmZmVyLCBNQVhQQVRITCwgVFJVRSkgPT0gRkFJTCkKKyNlbmRpZgorCSAgICByZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBjaGVjayBhZ2FpbnN0IGxpc3Qgb2YgYWxyZWFkeSB2aXNpdGVkIGZpbGVzICovCisgICAgZm9yICh2cCA9ICp2aXNpdGVkX2xpc3Q7IHZwICE9IE5VTEw7IHZwID0gdnAtPmZmdl9uZXh0KQorICAgIHsKKwlpZiAoCisjaWZkZWYgVU5JWAorCQkhdXJsCisJCSAgICA/ICh2cC0+ZmZ2X2RldiA9PSBzdC5zdF9kZXYKKwkJCSYmIHZwLT5mZnZfaW5vID09IHN0LnN0X2lubykKKwkJICAgIDoKKyNlbmRpZgorCQlmbmFtZWNtcCh2cC0+ZmZ2X2ZuYW1lLCBmZl9leHBhbmRfYnVmZmVyKSA9PSAwCisJICAgKQorCXsKKyNpZmRlZiBGRUFUX1BBVEhfRVhUUkEKKwkgICAgLyogYXJlIHRoZSB3aWxkY2FyZCBwYXJ0cyBlcXVhbCAqLworCSAgICBpZiAoZmZfd2NfZXF1YWwodnAtPmZmdl93Y19wYXRoLCB3Y19wYXRoKSA9PSBUUlVFKQorI2VuZGlmCisJCS8qIGFscmVhZHkgdmlzaXRlZCAqLworCQlyZXR1cm4gRkFJTDsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOZXcgZmlsZS9kaXIuICBBZGQgaXQgdG8gdGhlIGxpc3Qgb2YgdmlzaXRlZCBmaWxlcy9kaXJzLgorICAgICAqLworICAgIHZwID0gKGZmX3Zpc2l0ZWRfVCAqKWFsbG9jKCh1bnNpZ25lZCkoc2l6ZW9mKGZmX3Zpc2l0ZWRfVCkKKwkJCQkJCSArIFNUUkxFTihmZl9leHBhbmRfYnVmZmVyKSkpOworCisgICAgaWYgKHZwICE9IE5VTEwpCisgICAgeworI2lmZGVmIFVOSVgKKwlpZiAoIXVybCkKKwl7CisJICAgIHZwLT5mZnZfaW5vID0gc3Quc3RfaW5vOworCSAgICB2cC0+ZmZ2X2RldiA9IHN0LnN0X2RldjsKKwkgICAgdnAtPmZmdl9mbmFtZVswXSA9IE5VTDsKKwl9CisJZWxzZQorCXsKKwkgICAgdnAtPmZmdl9pbm8gPSAwOworCSAgICB2cC0+ZmZ2X2RldiA9IC0xOworI2VuZGlmCisJICAgIFNUUkNQWSh2cC0+ZmZ2X2ZuYW1lLCBmZl9leHBhbmRfYnVmZmVyKTsKKyNpZmRlZiBVTklYCisJfQorI2VuZGlmCisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisJaWYgKHdjX3BhdGggIT0gTlVMTCkKKwkgICAgdnAtPmZmdl93Y19wYXRoID0gdmltX3N0cnNhdmUod2NfcGF0aCk7CisJZWxzZQorCSAgICB2cC0+ZmZ2X3djX3BhdGggPSBOVUxMOworI2VuZGlmCisKKwl2cC0+ZmZ2X25leHQgPSAqdmlzaXRlZF9saXN0OworCSp2aXNpdGVkX2xpc3QgPSB2cDsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBjcmVhdGUgc3RhY2sgZWxlbWVudCBmcm9tIGdpdmVuIHBhdGggcGllY2VzCisgKi8KKyAgICBzdGF0aWMgZmZfc3RhY2tfVCAqCitmZl9jcmVhdGVfc3RhY2tfZWxlbWVudChmaXhfcGFydCwKKyNpZmRlZiBGRUFUX1BBVEhfRVhUUkEKKwl3Y19wYXJ0LAorI2VuZGlmCisJbGV2ZWwsIHN0YXJfc3Rhcl9lbXB0eSkKKyAgICBjaGFyX3UJKmZpeF9wYXJ0OworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorICAgIGNoYXJfdQkqd2NfcGFydDsKKyNlbmRpZgorICAgIGludAkJbGV2ZWw7CisgICAgaW50CQlzdGFyX3N0YXJfZW1wdHk7Cit7CisgICAgZmZfc3RhY2tfVAkqbmV3OworCisgICAgbmV3ID0gKGZmX3N0YWNrX1QgKilhbGxvYygodW5zaWduZWQpc2l6ZW9mKGZmX3N0YWNrX1QpKTsKKyAgICBpZiAobmV3ID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICBuZXctPmZmc19wcmV2CSAgID0gTlVMTDsKKyAgICBuZXctPmZmc19maWxlYXJyYXkJICAgPSBOVUxMOworICAgIG5ldy0+ZmZzX2ZpbGVhcnJheV9zaXplID0gMDsKKyAgICBuZXctPmZmc19maWxlYXJyYXlfY3VyICA9IDA7CisgICAgbmV3LT5mZnNfc3RhZ2UJICAgPSAwOworICAgIG5ldy0+ZmZzX2xldmVsCSAgID0gbGV2ZWw7CisgICAgbmV3LT5mZnNfc3Rhcl9zdGFyX2VtcHR5ID0gc3Rhcl9zdGFyX2VtcHR5OzsKKworICAgIC8qIHRoZSBmb2xsb3dpbmcgc2F2ZXMgTlVMTCBwb2ludGVyIGNoZWNrcyBpbiB2aW1fZmluZGZpbGUgKi8KKyAgICBpZiAoZml4X3BhcnQgPT0gTlVMTCkKKwlmaXhfcGFydCA9IChjaGFyX3UgKikiIjsKKyAgICBuZXctPmZmc19maXhfcGF0aCA9IHZpbV9zdHJzYXZlKGZpeF9wYXJ0KTsKKworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorICAgIGlmICh3Y19wYXJ0ID09IE5VTEwpCisJd2NfcGFydCAgPSAoY2hhcl91ICopIiI7CisgICAgbmV3LT5mZnNfd2NfcGF0aCA9IHZpbV9zdHJzYXZlKHdjX3BhcnQpOworI2VuZGlmCisKKyAgICBpZiAobmV3LT5mZnNfZml4X3BhdGggPT0gTlVMTAorI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorCSAgICB8fCBuZXctPmZmc193Y19wYXRoID09IE5VTEwKKyNlbmRpZgorCSAgICApCisgICAgeworCWZmX2ZyZWVfc3RhY2tfZWxlbWVudChuZXcpOworCW5ldyA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG5ldzsKK30KKworLyoKKyAqIHB1c2ggYSBkaXIgb24gdGhlIGRpcmVjdG9yeSBzdGFjaworICovCisgICAgc3RhdGljIHZvaWQKK2ZmX3B1c2goY3R4KQorICAgIGZmX3N0YWNrX1QgKmN0eDsKK3sKKyAgICAvKiBjaGVjayBmb3IgTlVMTCBwb2ludGVyLCBub3QgdG8gcmV0dXJuIGFuIGVycm9yIHRvIHRoZSB1c2VyLCBidXQKKyAgICAgKiB0byBwcmV2ZW50IGEgY3Jhc2gKKyAgICAgKi8KKyAgICBpZiAoY3R4ICE9IE5VTEwpCisgICAgeworCWN0eC0+ZmZzX3ByZXYgICA9IGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RhY2tfcHRyOworCWZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RhY2tfcHRyID0gY3R4OworICAgIH0KK30KKworLyoKKyAqIHBvcCBhIGRpciBmcm9tIHRoZSBkaXJlY3Rvcnkgc3RhY2sKKyAqIHJldHVybnMgTlVMTCBpZiBzdGFjayBpcyBlbXB0eQorICovCisgICAgc3RhdGljIGZmX3N0YWNrX1QgKgorZmZfcG9wKCkKK3sKKyAgICBmZl9zdGFja19UICAqc3B0cjsKKworICAgIHNwdHIgPSBmZl9zZWFyY2hfY3R4LT5mZnNjX3N0YWNrX3B0cjsKKyAgICBpZiAoZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFja19wdHIgIT0gTlVMTCkKKwlmZl9zZWFyY2hfY3R4LT5mZnNjX3N0YWNrX3B0ciA9IGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RhY2tfcHRyLT5mZnNfcHJldjsKKworICAgIHJldHVybiBzcHRyOworfQorCisvKgorICogZnJlZSB0aGUgZ2l2ZW4gc3RhY2sgZWxlbWVudAorICovCisgICAgc3RhdGljIHZvaWQKK2ZmX2ZyZWVfc3RhY2tfZWxlbWVudChjdHgpCisgICAgZmZfc3RhY2tfVCAgKmN0eDsKK3sKKyAgICAvKiB2aW1fZnJlZSBoYW5kbGVzIHBvc3NpYmxlIE5VTEwgcG9pbnRlcnMgKi8KKyAgICB2aW1fZnJlZShjdHgtPmZmc19maXhfcGF0aCk7CisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisgICAgdmltX2ZyZWUoY3R4LT5mZnNfd2NfcGF0aCk7CisjZW5kaWYKKworICAgIGlmIChjdHgtPmZmc19maWxlYXJyYXkgIT0gTlVMTCkKKwlGcmVlV2lsZChjdHgtPmZmc19maWxlYXJyYXlfc2l6ZSwgY3R4LT5mZnNfZmlsZWFycmF5KTsKKworICAgIHZpbV9mcmVlKGN0eCk7Cit9CisKKy8qCisgKiBjbGVhciB0aGUgc2VhcmNoIGNvbnRleHQKKyAqLworICAgIHN0YXRpYyB2b2lkCitmZl9jbGVhcigpCit7CisgICAgZmZfc3RhY2tfVCAgICpzcHRyOworCisgICAgLyogY2xlYXIgdXAgc3RhY2sgKi8KKyAgICB3aGlsZSAoKHNwdHIgPSBmZl9wb3AoKSkgIT0gTlVMTCkKKwlmZl9mcmVlX3N0YWNrX2VsZW1lbnQoc3B0cik7CisKKyAgICB2aW1fZnJlZShmZl9zZWFyY2hfY3R4LT5mZnNjX2ZpbGVfdG9fc2VhcmNoKTsKKyAgICB2aW1fZnJlZShmZl9zZWFyY2hfY3R4LT5mZnNjX3N0YXJ0X2Rpcik7CisgICAgdmltX2ZyZWUoZmZfc2VhcmNoX2N0eC0+ZmZzY19maXhfcGF0aCk7CisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisgICAgdmltX2ZyZWUoZmZfc2VhcmNoX2N0eC0+ZmZzY193Y19wYXRoKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisgICAgaWYgKGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RvcGRpcnNfdiAhPSBOVUxMKQorICAgIHsKKwlpbnQgIGkgPSAwOworCisJd2hpbGUgKGZmX3NlYXJjaF9jdHgtPmZmc2Nfc3RvcGRpcnNfdltpXSAhPSBOVUxMKQorCXsKKwkgICAgdmltX2ZyZWUoZmZfc2VhcmNoX2N0eC0+ZmZzY19zdG9wZGlyc192W2ldKTsKKwkgICAgaSsrOworCX0KKwl2aW1fZnJlZShmZl9zZWFyY2hfY3R4LT5mZnNjX3N0b3BkaXJzX3YpOworICAgIH0KKyAgICBmZl9zZWFyY2hfY3R4LT5mZnNjX3N0b3BkaXJzX3YgPSBOVUxMOworI2VuZGlmCisKKyAgICAvKiByZXNldCBldmVyeXRoaW5nICovCisgICAgZmZfc2VhcmNoX2N0eC0+ZmZzY19maWxlX3RvX3NlYXJjaAk9IE5VTEw7CisgICAgZmZfc2VhcmNoX2N0eC0+ZmZzY19zdGFydF9kaXIJPSBOVUxMOworICAgIGZmX3NlYXJjaF9jdHgtPmZmc2NfZml4X3BhdGgJPSBOVUxMOworI2lmZGVmIEZFQVRfUEFUSF9FWFRSQQorICAgIGZmX3NlYXJjaF9jdHgtPmZmc2Nfd2NfcGF0aAkJPSBOVUxMOworICAgIGZmX3NlYXJjaF9jdHgtPmZmc2NfbGV2ZWwJCT0gMDsKKyNlbmRpZgorfQorCisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisvKgorICogY2hlY2sgaWYgdGhlIGdpdmVuIHBhdGggaXMgaW4gdGhlIHN0b3BkaXJzCisgKiByZXR1cm5zIFRSVUUgaWYgeWVzIGVsc2UgRkFMU0UKKyAqLworICAgIHN0YXRpYyBpbnQKK2ZmX3BhdGhfaW5fc3RvcGxpc3QocGF0aCwgcGF0aF9sZW4sIHN0b3BkaXJzX3YpCisgICAgY2hhcl91CSpwYXRoOworICAgIGludAkJcGF0aF9sZW47CisgICAgY2hhcl91CSoqc3RvcGRpcnNfdjsKK3sKKyAgICBpbnQJCWkgPSAwOworCisgICAgLyogZWF0IHVwIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9ycywgZXhjZXB0IHRoZSBmaXJzdCAqLworICAgIHdoaWxlIChwYXRoX2xlbiA+IDEgJiYgcGF0aFtwYXRoX2xlbiAtIDFdID09IFBBVEhTRVApCisJcGF0aF9sZW4tLTsKKworICAgIC8qIGlmIG5vIHBhdGggY29uc2lkZXIgaXQgYXMgbWF0Y2ggKi8KKyAgICBpZiAocGF0aF9sZW4gPT0gMCkKKwlyZXR1cm4gVFJVRTsKKworICAgIGZvciAoaSA9IDA7IHN0b3BkaXJzX3ZbaV0gIT0gTlVMTDsgaSsrKQorICAgIHsKKwlpZiAoKGludClTVFJMRU4oc3RvcGRpcnNfdltpXSkgPiBwYXRoX2xlbikKKwl7CisJICAgIC8qIG1hdGNoIGZvciBwYXJlbnQgZGlyZWN0b3J5LiBTbyAnL2hvbWUnIGFsc28gbWF0Y2hlcworCSAgICAgKiAnL2hvbWUvcmtzJy4gQ2hlY2sgZm9yIFBBVEhTRVAgaW4gc3RvcGRpcnNfdltpXSwgZWxzZQorCSAgICAgKiAnL2hvbWUvcicgd291bGQgYWxzbyBtYXRjaCAnL2hvbWUvcmtzJworCSAgICAgKi8KKwkgICAgaWYgKGZuYW1lbmNtcChzdG9wZGlyc192W2ldLCBwYXRoLCBwYXRoX2xlbikgPT0gMAorCQkgICAgJiYgc3RvcGRpcnNfdltpXVtwYXRoX2xlbl0gPT0gUEFUSFNFUCkKKwkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UKKwl7CisJICAgIGlmIChmbmFtZWNtcChzdG9wZGlyc192W2ldLCBwYXRoKSA9PSAwKQorCQlyZXR1cm4gVFJVRTsKKwl9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1NFQVJDSFBBVEgpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogRmluZCB0aGUgZmlsZSBuYW1lICJwdHJbbGVuXSIgaW4gdGhlIHBhdGguCisgKgorICogT24gdGhlIGZpcnN0IGNhbGwgc2V0IHRoZSBwYXJhbWV0ZXIgJ2ZpcnN0JyB0byBUUlVFIHRvIGluaXRpYWxpemUKKyAqIHRoZSBzZWFyY2guICBGb3IgcmVwZWF0aW5nIGNhbGxzIHRvIEZBTFNFLgorICoKKyAqIFJlcGVhdGluZyBjYWxscyB3aWxsIHJldHVybiBvdGhlciBmaWxlcyBjYWxsZWQgJ3B0cltsZW5dJyBmcm9tIHRoZSBwYXRoLgorICoKKyAqIE9ubHkgb24gdGhlIGZpcnN0IGNhbGwgJ3B0cicgYW5kICdsZW4nIGFyZSB1c2VkLiAgRm9yIHJlcGVhdGluZyBjYWxscyB0aGV5CisgKiBkb24ndCBuZWVkIHZhbGlkIHZhbHVlcy4KKyAqCisgKiBJZiBub3RoaW5nIGZvdW5kIG9uIHRoZSBmaXJzdCBjYWxsIHRoZSBvcHRpb24gRk5BTUVfTUVTUyB3aWxsIGlzc3VlIHRoZQorICogbWVzc2FnZToKKyAqCSAgICAnQ2FuJ3QgZmluZCBmaWxlICI8ZmlsZT4iIGluIHBhdGgnCisgKiBPbiByZXBlYXRpbmcgY2FsbHM6CisgKgkgICAgJ05vIG1vcmUgZmlsZSAiPGZpbGU+IiBmb3VuZCBpbiBwYXRoJworICoKKyAqIG9wdGlvbnM6CisgKiBGTkFNRV9NRVNTCSAgICBnaXZlIGVycm9yIG1lc3NhZ2Ugd2hlbiBub3QgZm91bmQKKyAqCisgKiBVc2VzIE5hbWVCdWZmW10hCisgKgorICogUmV0dXJucyBhbiBhbGxvY2F0ZWQgc3RyaW5nIGZvciB0aGUgZmlsZSBuYW1lLiAgTlVMTCBmb3IgZXJyb3IuCisgKgorICovCisgICAgY2hhcl91ICoKK2ZpbmRfZmlsZV9pbl9wYXRoKHB0ciwgbGVuLCBvcHRpb25zLCBmaXJzdCwgcmVsX2ZuYW1lKQorICAgIGNoYXJfdQkqcHRyOwkJLyogZmlsZSBuYW1lICovCisgICAgaW50CQlsZW47CQkvKiBsZW5ndGggb2YgZmlsZSBuYW1lICovCisgICAgaW50CQlvcHRpb25zOworICAgIGludAkJZmlyc3Q7CQkvKiB1c2UgY291bnQndGggbWF0Y2hpbmcgZmlsZSBuYW1lICovCisgICAgY2hhcl91CSpyZWxfZm5hbWU7CS8qIGZpbGUgbmFtZSBzZWFyY2hpbmcgcmVsYXRpdmUgdG8gKi8KK3sKKyAgICByZXR1cm4gZmluZF9maWxlX2luX3BhdGhfb3B0aW9uKHB0ciwgbGVuLCBvcHRpb25zLCBmaXJzdCwKKwkgICAgKmN1cmJ1Zi0+Yl9wX3BhdGggPT0gTlVMID8gcF9wYXRoIDogY3VyYnVmLT5iX3BfcGF0aCwKKwkgICAgRkFMU0UsIHJlbF9mbmFtZSk7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBkaXJlY3RvcnkgbmFtZSAicHRyW2xlbl0iIGluIHRoZSBwYXRoLgorICoKKyAqIG9wdGlvbnM6CisgKiBGTkFNRV9NRVNTCSAgICBnaXZlIGVycm9yIG1lc3NhZ2Ugd2hlbiBub3QgZm91bmQKKyAqCisgKiBVc2VzIE5hbWVCdWZmW10hCisgKgorICogUmV0dXJucyBhbiBhbGxvY2F0ZWQgc3RyaW5nIGZvciB0aGUgZmlsZSBuYW1lLiAgTlVMTCBmb3IgZXJyb3IuCisgKi8KKyAgICBjaGFyX3UgKgorZmluZF9kaXJlY3RvcnlfaW5fcGF0aChwdHIsIGxlbiwgb3B0aW9ucywgcmVsX2ZuYW1lKQorICAgIGNoYXJfdQkqcHRyOwkJLyogZmlsZSBuYW1lICovCisgICAgaW50CQlsZW47CQkvKiBsZW5ndGggb2YgZmlsZSBuYW1lICovCisgICAgaW50CQlvcHRpb25zOworICAgIGNoYXJfdQkqcmVsX2ZuYW1lOwkvKiBmaWxlIG5hbWUgc2VhcmNoaW5nIHJlbGF0aXZlIHRvICovCit7CisgICAgcmV0dXJuIGZpbmRfZmlsZV9pbl9wYXRoX29wdGlvbihwdHIsIGxlbiwgb3B0aW9ucywgVFJVRSwgcF9jZHBhdGgsCisJCQkJCQkJICAgICBUUlVFLCByZWxfZm5hbWUpOworfQorCisgICAgc3RhdGljIGNoYXJfdSAqCitmaW5kX2ZpbGVfaW5fcGF0aF9vcHRpb24ocHRyLCBsZW4sIG9wdGlvbnMsIGZpcnN0LCBwYXRoX29wdGlvbiwgbmVlZF9kaXIsIHJlbF9mbmFtZSkKKyAgICBjaGFyX3UJKnB0cjsJCS8qIGZpbGUgbmFtZSAqLworICAgIGludAkJbGVuOwkJLyogbGVuZ3RoIG9mIGZpbGUgbmFtZSAqLworICAgIGludAkJb3B0aW9uczsKKyAgICBpbnQJCWZpcnN0OwkJLyogdXNlIGNvdW50J3RoIG1hdGNoaW5nIGZpbGUgbmFtZSAqLworICAgIGNoYXJfdQkqcGF0aF9vcHRpb247CS8qIHBfcGF0aCBvciBwX2NkcGF0aCAqLworICAgIGludAkJbmVlZF9kaXI7CS8qIGxvb2tpbmcgZm9yIGRpcmVjdG9yeSBuYW1lICovCisgICAgY2hhcl91CSpyZWxfZm5hbWU7CS8qIGZpbGUgbmFtZSB3ZSBhcmUgbG9va2luZyByZWxhdGl2ZSB0by4gKi8KK3sKKyAgICBzdGF0aWMgdm9pZAkJKnNlYXJjaF9jdHggPSBOVUxMOworICAgIHN0YXRpYyBjaGFyX3UJKmRpcjsKKyAgICBzdGF0aWMgY2hhcl91CSpmaWxlX3RvX2ZpbmQgPSBOVUxMOworICAgIHN0YXRpYyBpbnQJCWRpZF9maW5kZmlsZV9pbml0ID0gRkFMU0U7CisgICAgY2hhcl91CQlzYXZlX2NoYXI7CisgICAgY2hhcl91CQkqZmlsZV9uYW1lID0gTlVMTDsKKyAgICBjaGFyX3UJCSpidWYgPSBOVUxMOworICAgIGludAkJCXJlbF90b19jdXJkaXI7CisjaWZkZWYgQU1JR0EKKyAgICBzdHJ1Y3QgUHJvY2VzcwkqcHJvYyA9IChzdHJ1Y3QgUHJvY2VzcyAqKUZpbmRUYXNrKDBMKTsKKyAgICBBUFRSCQlzYXZlX3dpbnB0ciA9IHByb2MtPnByX1dpbmRvd1B0cjsKKworICAgIC8qIEF2b2lkIGEgcmVxdWVzdGVyIGhlcmUgZm9yIGEgdm9sdW1lIHRoYXQgZG9lc24ndCBleGlzdC4gKi8KKyAgICBwcm9jLT5wcl9XaW5kb3dQdHIgPSAoQVBUUiktMUw7CisjZW5kaWYKKworICAgIGlmIChmaXJzdCA9PSBUUlVFKQorICAgIHsKKwkvKiBjb3B5IGZpbGUgbmFtZSBpbnRvIE5hbWVCdWZmLCBleHBhbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisJc2F2ZV9jaGFyID0gcHRyW2xlbl07CisJcHRyW2xlbl0gPSBOVUw7CisJZXhwYW5kX2VudihwdHIsIE5hbWVCdWZmLCBNQVhQQVRITCk7CisJcHRyW2xlbl0gPSBzYXZlX2NoYXI7CisKKwl2aW1fZnJlZShmaWxlX3RvX2ZpbmQpOworCWZpbGVfdG9fZmluZCA9IHZpbV9zdHJzYXZlKE5hbWVCdWZmKTsKKwlpZiAoZmlsZV90b19maW5kID09IE5VTEwpCS8qIG91dCBvZiBtZW1vcnkgKi8KKwl7CisJICAgIGZpbGVfbmFtZSA9IE5VTEw7CisJICAgIGdvdG8gdGhlZW5kOworCX0KKyAgICB9CisKKyAgICByZWxfdG9fY3VyZGlyID0gKGZpbGVfdG9fZmluZFswXSA9PSAnLicKKwkJICAgICYmIChmaWxlX3RvX2ZpbmRbMV0gPT0gTlVMCisJCQl8fCB2aW1faXNwYXRoc2VwKGZpbGVfdG9fZmluZFsxXSkKKwkJCXx8IChmaWxlX3RvX2ZpbmRbMV0gPT0gJy4nCisJCQkgICAgJiYgKGZpbGVfdG9fZmluZFsyXSA9PSBOVUwKKwkJCQl8fCB2aW1faXNwYXRoc2VwKGZpbGVfdG9fZmluZFsyXSkpKSkpOworICAgIGlmICh2aW1faXNBYnNOYW1lKGZpbGVfdG9fZmluZCkKKwkgICAgLyogIi4uIiwgIi4uL3BhdGgiLCAiLiIgYW5kICIuL3BhdGgiOiBkb24ndCB1c2UgdGhlIHBhdGhfb3B0aW9uICovCisJICAgIHx8IHJlbF90b19jdXJkaXIKKyNpZiBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikKKwkgICAgLyogaGFuZGxlICJcdG1wIiBhcyBhYnNvbHV0ZSBwYXRoICovCisJICAgIHx8IHZpbV9pc3BhdGhzZXAoZmlsZV90b19maW5kWzBdKQorCSAgICAvKiBoYW5kbGUgImM6bmFtZSIgYXMgYWJzdWx1dGUgcGF0aCAqLworCSAgICB8fCAoZmlsZV90b19maW5kWzBdICE9IE5VTCAmJiBmaWxlX3RvX2ZpbmRbMV0gPT0gJzonKQorI2VuZGlmCisjaWZkZWYgQU1JR0EKKwkgICAgLyogaGFuZGxlICI6dG1wIiBhcyBhYnNvbHV0ZSBwYXRoICovCisJICAgIHx8IGZpbGVfdG9fZmluZFswXSA9PSAnOicKKyNlbmRpZgorICAgICAgICkKKyAgICB7CisJLyoKKwkgKiBBYnNvbHV0ZSBwYXRoLCBubyBuZWVkIHRvIHVzZSAicGF0aF9vcHRpb24iLgorCSAqIElmIHRoaXMgaXMgbm90IGEgZmlyc3QgY2FsbCwgcmV0dXJuIE5VTEwuICBXZSBhbHJlYWR5IHJldHVybmVkIGEKKwkgKiBmaWxlbmFtZSBvbiB0aGUgZmlyc3QgY2FsbC4KKwkgKi8KKwlpZiAoZmlyc3QgPT0gVFJVRSkKKwl7CisJICAgIGludAkJbDsKKwkgICAgaW50CQlydW47CisKKwkgICAgaWYgKHBhdGhfd2l0aF91cmwoZmlsZV90b19maW5kKSkKKwkgICAgeworCQlmaWxlX25hbWUgPSB2aW1fc3Ryc2F2ZShmaWxlX3RvX2ZpbmQpOworCQlnb3RvIHRoZWVuZDsKKwkgICAgfQorCisJICAgIC8qIFdoZW4gRk5BTUVfUkVMIGZsYWcgZ2l2ZW4gZmlyc3QgdXNlIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUuCisJICAgICAqIE90aGVyd2lzZSBvciB3aGVuIHRoaXMgZmFpbHMgdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gKi8KKwkgICAgZm9yIChydW4gPSAxOyBydW4gPD0gMjsgKytydW4pCisJICAgIHsKKwkJbCA9IChpbnQpU1RSTEVOKGZpbGVfdG9fZmluZCk7CisJCWlmIChydW4gPT0gMQorCQkJJiYgcmVsX3RvX2N1cmRpcgorCQkJJiYgKG9wdGlvbnMgJiBGTkFNRV9SRUwpCisJCQkmJiByZWxfZm5hbWUgIT0gTlVMTAorCQkJJiYgU1RSTEVOKHJlbF9mbmFtZSkgKyBsIDwgTUFYUEFUSEwpCisJCXsKKwkJICAgIFNUUkNQWShOYW1lQnVmZiwgcmVsX2ZuYW1lKTsKKwkJICAgIFNUUkNQWShnZXR0YWlsKE5hbWVCdWZmKSwgZmlsZV90b19maW5kKTsKKwkJICAgIGwgPSAoaW50KVNUUkxFTihOYW1lQnVmZik7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBTVFJDUFkoTmFtZUJ1ZmYsIGZpbGVfdG9fZmluZCk7CisJCSAgICBydW4gPSAyOworCQl9CisKKwkJLyogV2hlbiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LCB0cnkgYWRkaW5nIHBhcnRzIG9mCisJCSAqICdzdWZmaXhlc2FkZCcuICovCisJCWJ1ZiA9IGN1cmJ1Zi0+Yl9wX3N1YTsKKwkJZm9yICg7OykKKwkJeworCQkgICAgaWYgKAorI2lmZGVmIERKR1BQCisJCQkgICAgLyogIkM6IiBieSBpdHNlbGYgd2lsbCBmYWlsIGZvciBtY2hfZ2V0cGVybSgpLAorCQkJICAgICAqIGFzc3VtZSBpdCdzIGFsd2F5cyB2YWxpZC4gKi8KKwkJCSAgICAobmVlZF9kaXIgJiYgTmFtZUJ1ZmZbMF0gIT0gTlVMCisJCQkJICAmJiBOYW1lQnVmZlsxXSA9PSAnOicKKwkJCQkgICYmIE5hbWVCdWZmWzJdID09IE5VTCkgfHwKKyNlbmRpZgorCQkJICAgIChtY2hfZ2V0cGVybShOYW1lQnVmZikgPj0gMAorCQkJCSAgICAgICAmJiAoIW5lZWRfZGlyIHx8IG1jaF9pc2RpcihOYW1lQnVmZikpKSkKKwkJICAgIHsKKwkJCWZpbGVfbmFtZSA9IHZpbV9zdHJzYXZlKE5hbWVCdWZmKTsKKwkJCWdvdG8gdGhlZW5kOworCQkgICAgfQorCQkgICAgaWYgKCpidWYgPT0gTlVMKQorCQkJYnJlYWs7CisJCSAgICBjb3B5X29wdGlvbl9wYXJ0KCZidWYsIE5hbWVCdWZmICsgbCwgTUFYUEFUSEwgLSBsLCAiLCIpOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBMb29wIG92ZXIgYWxsIHBhdGhzIGluIHRoZSAncGF0aCcgb3IgJ2NkcGF0aCcgb3B0aW9uLgorCSAqIFdoZW4gImZpcnN0IiBpcyBzZXQsIGZpcnN0IHNldHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgb3B0aW9uLgorCSAqIE90aGVyd2lzZSBjb250aW51ZSB0byBmaW5kIHRoZSBuZXh0IG1hdGNoLgorCSAqLworCWlmIChmaXJzdCA9PSBUUlVFKQorCXsKKwkgICAgLyogdmltX2ZpbmRmaWxlX2ZyZWVfdmlzaXRlZCBjYW4gaGFuZGxlIGEgcG9zc2libGUgTlVMTCBwb2ludGVyICovCisJICAgIHZpbV9maW5kZmlsZV9mcmVlX3Zpc2l0ZWQoc2VhcmNoX2N0eCk7CisJICAgIGRpciA9IHBhdGhfb3B0aW9uOworCSAgICBkaWRfZmluZGZpbGVfaW5pdCA9IEZBTFNFOworCX0KKworCWZvciAoOzspCisJeworCSAgICBpZiAoZGlkX2ZpbmRmaWxlX2luaXQpCisJICAgIHsKKwkJZmZfc2VhcmNoX2N0eC0+ZmZzY19uZWVkX2RpciA9IG5lZWRfZGlyOworCQlmaWxlX25hbWUgPSB2aW1fZmluZGZpbGUoc2VhcmNoX2N0eCk7CisJCWZmX3NlYXJjaF9jdHgtPmZmc2NfbmVlZF9kaXIgPSBGQUxTRTsKKwkJaWYgKGZpbGVfbmFtZSAhPSBOVUxMKQorCQkgICAgYnJlYWs7CisKKwkJZGlkX2ZpbmRmaWxlX2luaXQgPSBGQUxTRTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJY2hhcl91ICAqcl9wdHI7CisKKwkJaWYgKGRpciA9PSBOVUxMIHx8ICpkaXIgPT0gTlVMKQorCQl7CisJCSAgICAvKiBXZSBzZWFyY2hlZCBhbGwgcGF0aHMgb2YgdGhlIG9wdGlvbiwgbm93IHdlIGNhbgorCQkgICAgICogZnJlZSB0aGUgc2VhcmNoIGNvbnRleHQuICovCisJCSAgICB2aW1fZmluZGZpbGVfY2xlYW51cChzZWFyY2hfY3R4KTsKKwkJICAgIHNlYXJjaF9jdHggPSBOVUxMOworCQkgICAgYnJlYWs7CisJCX0KKworCQlpZiAoKGJ1ZiA9IGFsbG9jKChpbnQpKE1BWFBBVEhMKSkpID09IE5VTEwpCisJCSAgICBicmVhazsKKworCQkvKiBjb3B5IG5leHQgcGF0aCAqLworCQlidWZbMF0gPSAwOworCQljb3B5X29wdGlvbl9wYXJ0KCZkaXIsIGJ1ZiwgTUFYUEFUSEwsICIgLCIpOworCisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisJCS8qIGdldCB0aGUgc3RvcGRpciBzdHJpbmcgKi8KKwkJcl9wdHIgPSB2aW1fZmluZGZpbGVfc3RvcGRpcihidWYpOworI2Vsc2UKKwkJcl9wdHIgPSBOVUxMOworI2VuZGlmCisJCXNlYXJjaF9jdHggPSB2aW1fZmluZGZpbGVfaW5pdChidWYsIGZpbGVfdG9fZmluZCwgcl9wdHIsIDEwMCwKKwkJCQkgICBGQUxTRSwgVFJVRSwgc2VhcmNoX2N0eCwgRkFMU0UsIHJlbF9mbmFtZSk7CisJCWlmIChzZWFyY2hfY3R4ICE9IE5VTEwpCisJCSAgICBkaWRfZmluZGZpbGVfaW5pdCA9IFRSVUU7CisJCXZpbV9mcmVlKGJ1Zik7CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIChmaWxlX25hbWUgPT0gTlVMTCAmJiAob3B0aW9ucyAmIEZOQU1FX01FU1MpKQorICAgIHsKKwlpZiAoZmlyc3QgPT0gVFJVRSkKKwl7CisJICAgIGlmIChuZWVkX2RpcikKKwkJRU1TRzIoXygiRTM0NDogQ2FuJ3QgZmluZCBkaXJlY3RvcnkgXCIlc1wiIGluIGNkcGF0aCIpLAorCQkJZmlsZV90b19maW5kKTsKKwkgICAgZWxzZQorCQlFTVNHMihfKCJFMzQ1OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiKSwKKwkJCWZpbGVfdG9fZmluZCk7CisJfQorCWVsc2UKKwl7CisJICAgIGlmIChuZWVkX2RpcikKKwkJRU1TRzIoXygiRTM0NjogTm8gbW9yZSBkaXJlY3RvcnkgXCIlc1wiIGZvdW5kIGluIGNkcGF0aCIpLAorCQkJZmlsZV90b19maW5kKTsKKwkgICAgZWxzZQorCQlFTVNHMihfKCJFMzQ3OiBObyBtb3JlIGZpbGUgXCIlc1wiIGZvdW5kIGluIHBhdGgiKSwKKwkJCWZpbGVfdG9fZmluZCk7CisJfQorICAgIH0KKwordGhlZW5kOgorI2lmZGVmIEFNSUdBCisgICAgcHJvYy0+cHJfV2luZG93UHRyID0gc2F2ZV93aW5wdHI7CisjZW5kaWYKKyAgICByZXR1cm4gZmlsZV9uYW1lOworfQorCisjZW5kaWYgLyogRkVBVF9TRUFSQ0hQQVRIICovCisKKy8qCisgKiBDaGFuZ2UgZGlyZWN0b3J5IHRvICJuZXdfZGlyIi4gIElmIEZFQVRfU0VBUkNIUEFUSCBpcyBkZWZpbmVkLCBzZWFyY2gKKyAqICdjZHBhdGgnIGZvciByZWxhdGl2ZSBkaXJlY3RvcnkgbmFtZXMsIG90aGVyd2lzZSBqdXN0IG1jaF9jaGRpcigpLgorICovCisgICAgaW50Cit2aW1fY2hkaXIobmV3X2RpcikKKyAgICBjaGFyX3UJKm5ld19kaXI7Cit7CisjaWZuZGVmIEZFQVRfU0VBUkNIUEFUSAorICAgIHJldHVybiBtY2hfY2hkaXIoKGNoYXIgKiluZXdfZGlyKTsKKyNlbHNlCisgICAgY2hhcl91CSpkaXJfbmFtZTsKKyAgICBpbnQJCXI7CisKKyAgICBkaXJfbmFtZSA9IGZpbmRfZGlyZWN0b3J5X2luX3BhdGgobmV3X2RpciwgKGludClTVFJMRU4obmV3X2RpciksCisJCQkJCQlGTkFNRV9NRVNTLCBjdXJidWYtPmJfZmZuYW1lKTsKKyAgICBpZiAoZGlyX25hbWUgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisgICAgciA9IG1jaF9jaGRpcigoY2hhciAqKWRpcl9uYW1lKTsKKyAgICB2aW1fZnJlZShkaXJfbmFtZSk7CisgICAgcmV0dXJuIHI7CisjZW5kaWYKK30KKworLyoKKyAqIEdldCB1c2VyIG5hbWUgZnJvbSBtYWNoaW5lLXNwZWNpZmljIGZ1bmN0aW9uIGFuZCBjYWNoZSBpdC4KKyAqIFJldHVybnMgdGhlIHVzZXIgbmFtZSBpbiAiYnVmW2xlbl0iLgorICogU29tZSBzeXN0ZW1zIGFyZSBxdWl0ZSBzbG93IGluIG9idGFpbmluZyB0aGUgdXNlciBuYW1lIChXaW5kb3dzIE5UKS4KKyAqIFJldHVybnMgT0sgb3IgRkFJTC4KKyAqLworICAgIGludAorZ2V0X3VzZXJfbmFtZShidWYsIGxlbikKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCWxlbjsKK3sKKyAgICBzdGF0aWMgY2hhcl91CSpuYW1lID0gTlVMTDsKKworICAgIGlmIChuYW1lID09IE5VTEwpCisgICAgeworCWlmIChtY2hfZ2V0X3VzZXJfbmFtZShidWYsIGxlbikgPT0gRkFJTCkKKwkgICAgcmV0dXJuIEZBSUw7CisJbmFtZSA9IHZpbV9zdHJzYXZlKGJ1Zik7CisgICAgfQorICAgIGVsc2UKKwlTVFJOQ1BZKGJ1ZiwgbmFtZSwgbGVuKTsKKyAgICByZXR1cm4gT0s7Cit9CisKKyNpZm5kZWYgSEFWRV9RU09SVAorLyoKKyAqIE91ciBvd24gcXNvcnQoKSwgZm9yIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIGl0LgorICogSXQncyBzaW1wbGUgYW5kIHNsb3cuICBGcm9tIHRoZSBLJlIgQyBib29rLgorICovCisgICAgdm9pZAorcXNvcnQoYmFzZSwgZWxtX2NvdW50LCBlbG1fc2l6ZSwgY21wKQorICAgIHZvaWQJKmJhc2U7CisgICAgc2l6ZV90CWVsbV9jb3VudDsKKyAgICBzaXplX3QJZWxtX3NpemU7CisgICAgaW50ICgqY21wKSBfX0FSR1MoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7Cit7CisgICAgY2hhcl91CSpidWY7CisgICAgY2hhcl91CSpwMTsKKyAgICBjaGFyX3UJKnAyOworICAgIGludAkJaSwgajsKKyAgICBpbnQJCWdhcDsKKworICAgIGJ1ZiA9IGFsbG9jKCh1bnNpZ25lZCllbG1fc2l6ZSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCXJldHVybjsKKworICAgIGZvciAoZ2FwID0gZWxtX2NvdW50IC8gMjsgZ2FwID4gMDsgZ2FwIC89IDIpCisJZm9yIChpID0gZ2FwOyBpIDwgZWxtX2NvdW50OyArK2kpCisJICAgIGZvciAoaiA9IGkgLSBnYXA7IGogPj0gMDsgaiAtPSBnYXApCisJICAgIHsKKwkJLyogQ29tcGFyZSB0aGUgZWxlbWVudHMuICovCisJCXAxID0gKGNoYXJfdSAqKWJhc2UgKyBqICogZWxtX3NpemU7CisJCXAyID0gKGNoYXJfdSAqKWJhc2UgKyAoaiArIGdhcCkgKiBlbG1fc2l6ZTsKKwkJaWYgKCgqY21wKSgodm9pZCAqKXAxLCAodm9pZCAqKXAyKSA8PSAwKQorCQkgICAgYnJlYWs7CisJCS8qIEV4Y2hhbmdlIHRoZSBlbGVtZXRzLiAqLworCQltY2hfbWVtbW92ZShidWYsIHAxLCBlbG1fc2l6ZSk7CisJCW1jaF9tZW1tb3ZlKHAxLCBwMiwgZWxtX3NpemUpOworCQltY2hfbWVtbW92ZShwMiwgYnVmLCBlbG1fc2l6ZSk7CisJICAgIH0KKworICAgIHZpbV9mcmVlKGJ1Zik7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9FWF9FWFRSQSkgfHwgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogU29ydCBhbiBhcnJheSBvZiBzdHJpbmdzLgorICovCitzdGF0aWMgaW50CisjaWZkZWYgX19CT1JMQU5EQ19fCitfUlRMRU5UUllGCisjZW5kaWYKK3NvcnRfY29tcGFyZSBfX0FSR1MoKGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMikpOworCisgICAgc3RhdGljIGludAorI2lmZGVmIF9fQk9STEFORENfXworX1JUTEVOVFJZRgorI2VuZGlmCitzb3J0X2NvbXBhcmUoczEsIHMyKQorICAgIGNvbnN0IHZvaWQJKnMxOworICAgIGNvbnN0IHZvaWQJKnMyOworeworICAgIHJldHVybiBTVFJDTVAoKihjaGFyICoqKXMxLCAqKGNoYXIgKiopczIpOworfQorCisgICAgdm9pZAorc29ydF9zdHJpbmdzKGZpbGVzLCBjb3VudCkKKyAgICBjaGFyX3UJKipmaWxlczsKKyAgICBpbnQJCWNvdW50OworeworICAgIHFzb3J0KCh2b2lkICopZmlsZXMsIChzaXplX3QpY291bnQsIHNpemVvZihjaGFyX3UgKiksIHNvcnRfY29tcGFyZSk7Cit9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE5PX0VYUEFORFBBVEgpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ29tcGFyZSBwYXRoICJwW10iIHRvICJxW10iLgorICogUmV0dXJuIHZhbHVlIGxpa2Ugc3RyY21wKHAsIHEpLCBidXQgY29uc2lkZXIgcGF0aCBzZXBhcmF0b3JzLgorICovCisgICAgaW50CitwYXRoY21wKHAsIHEpCisgICAgY29uc3QgY2hhciAqcCwgKnE7Cit7CisgICAgaW50CQlpOworICAgIGNvbnN0IGNoYXIJKnM7CisKKyAgICBmb3IgKGkgPSAwOyA7ICsraSkKKyAgICB7CisJLyogRW5kIG9mICJwIjogY2hlY2sgaWYgInEiIGFsc28gZW5kcyBvciBqdXN0IGhhcyBhIHNsYXNoLiAqLworCWlmIChwW2ldID09IE5VTCkKKwl7CisJICAgIGlmIChxW2ldID09IE5VTCkgIC8qIGZ1bGwgbWF0Y2ggKi8KKwkJcmV0dXJuIDA7CisJICAgIHMgPSBxOworCSAgICBicmVhazsKKwl9CisKKwkvKiBFbmQgb2YgInEiOiBjaGVjayBpZiAicCIganVzdCBoYXMgYSBzbGFzaC4gKi8KKwlpZiAocVtpXSA9PSBOVUwpCisJeworCSAgICBzID0gcDsKKwkgICAgYnJlYWs7CisJfQorCisJaWYgKAorI2lmZGVmIENBU0VfSU5TRU5TSVRJVkVfRklMRU5BTUUKKwkJVE9VUFBFUl9MT0MocFtpXSkgIT0gVE9VUFBFUl9MT0MocVtpXSkKKyNlbHNlCisJCXBbaV0gIT0gcVtpXQorI2VuZGlmCisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJCS8qIGNvbnNpZGVyICcvJyBhbmQgJ1xcJyB0byBiZSBlcXVhbCAqLworCQkmJiAhKChwW2ldID09ICcvJyAmJiBxW2ldID09ICdcXCcpCisJCSAgICB8fCAocFtpXSA9PSAnXFwnICYmIHFbaV0gPT0gJy8nKSkKKyNlbmRpZgorCQkpCisJeworCSAgICBpZiAodmltX2lzcGF0aHNlcChwW2ldKSkKKwkJcmV0dXJuIC0xOworCSAgICBpZiAodmltX2lzcGF0aHNlcChxW2ldKSkKKwkJcmV0dXJuIDE7CisJICAgIHJldHVybiAoKGNoYXJfdSAqKXApW2ldIC0gKChjaGFyX3UgKilxKVtpXTsJICAgIC8qIG5vIG1hdGNoICovCisJfQorICAgIH0KKworICAgIC8qIGlnbm9yZSBhIHRyYWlsaW5nIHNsYXNoLCBidXQgbm90ICIvLyIgb3IgIjovIiAqLworICAgIGlmIChzW2kgKyAxXSA9PSBOVUwgJiYgaSA+IDAgJiYgIXZpbV9pc3BhdGhzZXAoc1tpIC0gMV0pCisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJICAgICYmIChzW2ldID09ICcvJyB8fCBzW2ldID09ICdcXCcpCisjZWxzZQorCSAgICAmJiBzW2ldID09ICcvJworI2VuZGlmCisgICAgICAgKQorCXJldHVybiAwOyAgIC8qIG1hdGNoIHdpdGggdHJhaWxpbmcgc2xhc2ggKi8KKyAgICBpZiAocyA9PSBxKQorCXJldHVybiAtMTsJICAgIC8qIG5vIG1hdGNoICovCisgICAgcmV0dXJuIDE7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9QUklOVEVSKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFBhcnNlIGEgbGlzdCBvZiBvcHRpb25zIGluIHRoZSBmb3JtCisgKiBvcHRpb246dmFsdWUsb3B0aW9uOnZhbHVlLG9wdGlvbjp2YWx1ZQorICoKKyAqICJ2YWx1ZSIgY2FuIHN0YXJ0IHdpdGggYSBudW1iZXIgd2hpY2ggaXMgcGFyc2VkIG91dCwgZS5nLgorICogbWFyZ2luOjEybW0KKyAqCisgKiBSZXR1cm5zIGVycm9yIG1lc3NhZ2UgZm9yIGFuIGlsbGVnYWwgb3B0aW9uLCBOVUxMIG90aGVyd2lzZS4KKyAqIE9ubHkgdXNlZCBmb3IgdGhlIHByaW50ZXIgYXQgdGhlIG1vbWVudC4uLgorICovCisgICAgY2hhcl91ICoKK3BhcnNlX2xpc3Rfb3B0aW9ucyhvcHRpb25fc3RyLCB0YWJsZSwgdGFibGVfc2l6ZSkKKyAgICBjaGFyX3UJCSpvcHRpb25fc3RyOworICAgIG9wdGlvbl90YWJsZV9UCSp0YWJsZTsKKyAgICBpbnQJCQl0YWJsZV9zaXplOworeworICAgIGNoYXJfdQkqc3RyaW5ncDsKKyAgICBjaGFyX3UJKmNvbG9ucDsKKyAgICBjaGFyX3UJKmNvbW1hcDsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpZHggPSAwOwkJLyogaW5pdCBmb3IgR0NDICovCisgICAgaW50CQlsZW47CisKKyAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IHRhYmxlX3NpemU7ICsraWR4KQorCXRhYmxlW2lkeF0ucHJlc2VudCA9IEZBTFNFOworCisgICAgLyoKKyAgICAgKiBSZXBlYXQgZm9yIGFsbCBjb21tYSBzZXBhcmF0ZWQgcGFydHMuCisgICAgICovCisgICAgc3RyaW5ncCA9IG9wdGlvbl9zdHI7CisgICAgd2hpbGUgKCpzdHJpbmdwKQorICAgIHsKKwljb2xvbnAgPSB2aW1fc3RyY2hyKHN0cmluZ3AsICc6Jyk7CisJaWYgKGNvbG9ucCA9PSBOVUxMKQorCSAgICByZXR1cm4gKGNoYXJfdSAqKU5fKCJFNTUwOiBNaXNzaW5nIGNvbG9uIik7CisJY29tbWFwID0gdmltX3N0cmNocihzdHJpbmdwLCAnLCcpOworCWlmIChjb21tYXAgPT0gTlVMTCkKKwkgICAgY29tbWFwID0gb3B0aW9uX3N0ciArIFNUUkxFTihvcHRpb25fc3RyKTsKKworCWxlbiA9IChpbnQpKGNvbG9ucCAtIHN0cmluZ3ApOworCisJZm9yIChpZHggPSAwOyBpZHggPCB0YWJsZV9zaXplOyArK2lkeCkKKwkgICAgaWYgKFNUUk5JQ01QKHN0cmluZ3AsIHRhYmxlW2lkeF0ubmFtZSwgbGVuKSA9PSAwKQorCQlicmVhazsKKworCWlmIChpZHggPT0gdGFibGVfc2l6ZSkKKwkgICAgcmV0dXJuIChjaGFyX3UgKilOXygiRTU1MTogSWxsZWdhbCBjb21wb25lbnQiKTsKKworCXAgPSBjb2xvbnAgKyAxOworCXRhYmxlW2lkeF0ucHJlc2VudCA9IFRSVUU7CisKKwlpZiAodGFibGVbaWR4XS5oYXNudW0pCisJeworCSAgICBpZiAoIVZJTV9JU0RJR0lUKCpwKSkKKwkJcmV0dXJuIChjaGFyX3UgKilOXygiRTU1MjogZGlnaXQgZXhwZWN0ZWQiKTsKKworCSAgICB0YWJsZVtpZHhdLm51bWJlciA9IGdldGRpZ2l0cygmcCk7IC8qYWR2YW5jZXMgcCovCisJfQorCisJdGFibGVbaWR4XS5zdHJpbmcgPSBwOworCXRhYmxlW2lkeF0uc3RybGVuID0gKGludCkoY29tbWFwIC0gcCk7CisKKwlzdHJpbmdwID0gY29tbWFwOworCWlmICgqc3RyaW5ncCA9PSAnLCcpCisJICAgICsrc3RyaW5ncDsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworCisjZW5kaWYgLypGRUFUX1BSSU5URVIqLworCisvKgorICogVGhlIHB1dGVudigpIGltcGxlbWVudGF0aW9uIGJlbG93IGNvbWVzIGZyb20gdGhlICJzY3JlZW4iIHByb2dyYW0uCisgKiBJbmNsdWRlZCB3aXRoIHBlcm1pc3Npb24gZnJvbSBKdWVyZ2VuIFdlaWdlcnQuCisgKiBTZWUgcHR5LmMgZm9yIHRoZSBjb3B5cmlnaHQgbm90aWNlLgorICovCisKKy8qCisgKiAgcHV0ZW52ICAtLQlwdXQgdmFsdWUgaW50byBlbnZpcm9ubWVudAorICoKKyAqICBVc2FnZTogIGkgPSBwdXRlbnYgKHN0cmluZykKKyAqICAgIGludCBpOworICogICAgY2hhciAgKnN0cmluZzsKKyAqCisgKiAgd2hlcmUgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIDxuYW1lPj08dmFsdWU+LgorICogIFB1dGVudiByZXR1cm5zIDAgbm9ybWFsbHksIC0xIG9uIGVycm9yIChub3QgZW5vdWdoIGNvcmUgZm9yIG1hbGxvYykuCisgKgorICogIFB1dGVudiBtYXkgbmVlZCB0byBhZGQgYSBuZXcgbmFtZSBpbnRvIHRoZSBlbnZpcm9ubWVudCwgb3IgdG8KKyAqICBhc3NvY2lhdGUgYSB2YWx1ZSBsb25nZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSB3aXRoIGEgcGFydGljdWxhcgorICogIG5hbWUuICBTbywgdG8gbWFrZSBsaWZlIHNpbXBsZXIsIHB1dGVudigpIGNvcGllcyB5b3VyIGVudGlyZQorICogIGVudmlyb25tZW50IGludG8gdGhlIGhlYXAgKGkuZS4gbWFsbG9jKCkpIGZyb20gdGhlIHN0YWNrCisgKiAgKGkuZS4gd2hlcmUgaXQgcmVzaWRlcyB3aGVuIHlvdXIgcHJvY2VzcyBpcyBpbml0aWF0ZWQpIHRoZSBmaXJzdAorICogIHRpbWUgeW91IGNhbGwgaXQuCisgKgorICogIChoaXN0b3J5IHJlbW92ZWQsIG5vdCB2ZXJ5IGludGVyZXN0aW5nLiAgU2VlIHRoZSAic2NyZWVuIiBzb3VyY2VzLikKKyAqLworCisjaWYgIWRlZmluZWQoSEFWRV9TRVRFTlYpICYmICFkZWZpbmVkKEhBVkVfUFVURU5WKQorCisjZGVmaW5lIEVYVFJBU0laRSA1CQkvKiBpbmNyZW1lbnQgdG8gYWRkIHRvIGVudi4gc2l6ZSAqLworCitzdGF0aWMgaW50ICBlbnZzaXplID0gLTE7CS8qIGN1cnJlbnQgc2l6ZSBvZiBlbnZpcm9ubWVudCAqLworI2lmbmRlZiBNQUNPU19DTEFTU0lDCitleHRlcm4KKyNlbmRpZgorICAgICAgIGNoYXIgKiplbnZpcm9uOwkJLyogdGhlIGdsb2JhbCB3aGljaCBpcyB5b3VyIGVudi4gKi8KKworc3RhdGljIGludCAgZmluZGVudiBfX0FSR1MoKGNoYXIgKm5hbWUpKTsgLyogbG9vayBmb3IgYSBuYW1lIGluIHRoZSBlbnYuICovCitzdGF0aWMgaW50ICBuZXdlbnYgX19BUkdTKCh2b2lkKSk7CS8qIGNvcHkgZW52LiBmcm9tIHN0YWNrIHRvIGhlYXAgKi8KK3N0YXRpYyBpbnQgIG1vcmVlbnYgX19BUkdTKCh2b2lkKSk7CS8qIGluY3IuIHNpemUgb2YgZW52LiAqLworCisgICAgaW50CitwdXRlbnYoc3RyaW5nKQorICAgIGNvbnN0IGNoYXIgKnN0cmluZzsKK3sKKyAgICBpbnQJICAgIGk7CisgICAgY2hhciAgICAqcDsKKworICAgIGlmIChlbnZzaXplIDwgMCkKKyAgICB7CQkJCS8qIGZpcnN0IHRpbWUgcHV0ZW52IGNhbGxlZCAqLworCWlmIChuZXdlbnYoKSA8IDApCS8qIGNvcHkgZW52LiB0byBoZWFwICovCisJICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpID0gZmluZGVudigoY2hhciAqKXN0cmluZyk7IC8qIGxvb2sgZm9yIG5hbWUgaW4gZW52aXJvbm1lbnQgKi8KKworICAgIGlmIChpIDwgMCkKKyAgICB7CQkJCS8qIG5hbWUgbXVzdCBiZSBhZGRlZCAqLworCWZvciAoaSA9IDA7IGVudmlyb25baV07IGkrKyk7CisJaWYgKGkgPj0gKGVudnNpemUgLSAxKSkKKwl7CQkJLyogbmVlZCBuZXcgc2xvdCAqLworCSAgICBpZiAobW9yZWVudigpIDwgMCkKKwkJcmV0dXJuIC0xOworCX0KKwlwID0gKGNoYXIgKilhbGxvYygodW5zaWduZWQpKHN0cmxlbihzdHJpbmcpICsgMSkpOworCWlmIChwID09IE5VTEwpCQkvKiBub3QgZW5vdWdoIGNvcmUgKi8KKwkgICAgcmV0dXJuIC0xOworCWVudmlyb25baSArIDFdID0gMDsJLyogbmV3IGVuZCBvZiBlbnYuICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CQkJCS8qIG5hbWUgYWxyZWFkeSBpbiBlbnYuICovCisJcCA9IHZpbV9yZWFsbG9jKGVudmlyb25baV0sIHN0cmxlbihzdHJpbmcpICsgMSk7CisJaWYgKHAgPT0gTlVMTCkKKwkgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzcHJpbnRmKHAsICIlcyIsIHN0cmluZyk7CS8qIGNvcHkgaW50byBlbnYuICovCisgICAgZW52aXJvbltpXSA9IHA7CisKKyAgICByZXR1cm4gMDsKK30KKworICAgIHN0YXRpYyBpbnQKK2ZpbmRlbnYobmFtZSkKKyAgICBjaGFyICpuYW1lOworeworICAgIGNoYXIgICAgKm5hbWVjaGFyLCAqZW52Y2hhcjsKKyAgICBpbnQJICAgIGksIGZvdW5kOworCisgICAgZm91bmQgPSAwOworICAgIGZvciAoaSA9IDA7IGVudmlyb25baV0gJiYgIWZvdW5kOyBpKyspCisgICAgeworCWVudmNoYXIgPSBlbnZpcm9uW2ldOworCW5hbWVjaGFyID0gbmFtZTsKKwl3aGlsZSAoKm5hbWVjaGFyICYmICpuYW1lY2hhciAhPSAnPScgJiYgKCpuYW1lY2hhciA9PSAqZW52Y2hhcikpCisJeworCSAgICBuYW1lY2hhcisrOworCSAgICBlbnZjaGFyKys7CisJfQorCWZvdW5kID0gKCgqbmFtZWNoYXIgPT0gJ1wwJyB8fCAqbmFtZWNoYXIgPT0gJz0nKSAmJiAqZW52Y2hhciA9PSAnPScpOworICAgIH0KKyAgICByZXR1cm4gZm91bmQgPyBpIC0gMSA6IC0xOworfQorCisgICAgc3RhdGljIGludAorbmV3ZW52KCkKK3sKKyAgICBjaGFyICAgICoqZW52LCAqZWxlbTsKKyAgICBpbnQJICAgIGksIGVzaXplOworCisjaWZkZWYgTUFDT1MKKyAgICAvKiBmb3IgTWFjIGEgbmV3LCBlbXB0eSBlbnZpcm9ubWVudCBpcyBjcmVhdGVkICovCisgICAgaSA9IDA7CisjZWxzZQorICAgIGZvciAoaSA9IDA7IGVudmlyb25baV07IGkrKykKKwk7CisjZW5kaWYKKyAgICBlc2l6ZSA9IGkgKyBFWFRSQVNJWkUgKyAxOworICAgIGVudiA9IChjaGFyICoqKWFsbG9jKCh1bnNpZ25lZCkoZXNpemUgKiBzaXplb2YgKGVsZW0pKSk7CisgICAgaWYgKGVudiA9PSBOVUxMKQorCXJldHVybiAtMTsKKworI2lmbmRlZiBNQUNPUworICAgIGZvciAoaSA9IDA7IGVudmlyb25baV07IGkrKykKKyAgICB7CisJZWxlbSA9IChjaGFyICopYWxsb2MoKHVuc2lnbmVkKShzdHJsZW4oZW52aXJvbltpXSkgKyAxKSk7CisJaWYgKGVsZW0gPT0gTlVMTCkKKwkgICAgcmV0dXJuIC0xOworCWVudltpXSA9IGVsZW07CisJc3RyY3B5KGVsZW0sIGVudmlyb25baV0pOworICAgIH0KKyNlbmRpZgorCisgICAgZW52W2ldID0gMDsKKyAgICBlbnZpcm9uID0gZW52OworICAgIGVudnNpemUgPSBlc2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworICAgIHN0YXRpYyBpbnQKK21vcmVlbnYoKQoreworICAgIGludAkgICAgZXNpemU7CisgICAgY2hhciAgICAqKmVudjsKKworICAgIGVzaXplID0gZW52c2l6ZSArIEVYVFJBU0laRTsKKyAgICBlbnYgPSAoY2hhciAqKil2aW1fcmVhbGxvYygoY2hhciAqKWVudmlyb24sIGVzaXplICogc2l6ZW9mICgqZW52KSk7CisgICAgaWYgKGVudiA9PSAwKQorCXJldHVybiAtMTsKKyAgICBlbnZpcm9uID0gZW52OworICAgIGVudnNpemUgPSBlc2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworIyBpZmRlZiBVU0VfVklNUFRZX0dFVEVOVgorICAgIGNoYXJfdSAqCit2aW1wdHlfZ2V0ZW52KHN0cmluZykKKyAgICBjb25zdCBjaGFyX3UgKnN0cmluZzsKK3sKKyAgICBpbnQgaTsKKyAgICBjaGFyX3UgKnA7CisKKyAgICBpZiAoZW52c2l6ZSA8IDApCisJcmV0dXJuIE5VTEw7CisKKyAgICBpID0gZmluZGVudigoY2hhciAqKXN0cmluZyk7CisKKyAgICBpZiAoaSA8IDApCisJcmV0dXJuIE5VTEw7CisKKyAgICBwID0gdmltX3N0cmNocigoY2hhcl91ICopZW52aXJvbltpXSwgJz0nKTsKKyAgICByZXR1cm4gKHAgKyAxKTsKK30KKyMgZW5kaWYKKworI2VuZGlmIC8qICFkZWZpbmVkKEhBVkVfU0VURU5WKSAmJiAhZGVmaW5lZChIQVZFX1BVVEVOVikgKi8KKworLyoKKyAqIFByaW50IGEgbWVzc2FnZSB3aXRoIG9uZSBzdHJpbmcgYXJndW1lbnQuCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0IGZpdHMgaW4gSU9idWZmLgorICogVGhpcyBpcyBub3QgaW4gbWVzc2FnZS5jLCBiZWNhdXNlIHRoZSBwcm90b3R5cGUgZm9yIHNtc2coKSBpc24ndCB1c2VkCisgKiB0aGVyZS4KKyAqLworICAgIHZvaWQKK21zZ19zdHIocywgYXJnKQorICAgIGNoYXJfdQkqczsKKyAgICBjaGFyX3UJKmFyZzsKK3sKKyAgICBpbnQJCWxzID0gU1RSTEVOKHMpOworICAgIGludAkJbGFyZyA9IFNUUkxFTihhcmcpOworCisgICAgaWYgKGxzICsgbGFyZyA+PSBJT1NJWkUpCisJc21zZyhzLCBhcmcgKyAobHMgKyBsYXJnIC0gSU9TSVpFKSk7CisgICAgZWxzZQorCXNtc2cocywgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9ta2luc3RhbGxkaXJzIGIvc3JjL21raW5zdGFsbGRpcnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjRhZTM5MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ta2luc3RhbGxkaXJzCkBAIC0wLDAgKzEsNDAgQEAKKyMhIC9iaW4vc2gKKyMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CisjIEF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorIyBDcmVhdGVkOiAxOTkzLTA1LTE2CisjIFB1YmxpYyBkb21haW4KKworIyAkSWQkCisKK2VycnN0YXR1cz0wCisKK2ZvciBmaWxlCitkbworICAgc2V0IGZub3JkIGBlY2hvICI6JGZpbGUiIHwgc2VkIC1uZSAncy9eOlwvLyMvO3MvXjovLztzL1wvLyAvZztzL14jL1wvLztwJ2AKKyAgIHNoaWZ0CisKKyAgIHBhdGhjb21wPQorICAgZm9yIGQKKyAgIGRvCisgICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKyAgICAgY2FzZSAiJHBhdGhjb21wIiBpbgorICAgICAgIC0qICkgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKyAgICAgZXNhYworCisgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorCWVjaG8gIm1rZGlyICRwYXRoY29tcCIgMT4mMgorCisJbWtkaXIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworCisJaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisJICBlcnJzdGF0dXM9JGxhc3RlcnIKKwlmaQorICAgICBmaQorCisgICAgIHBhdGhjb21wPSIkcGF0aGNvbXAvIgorICAgZG9uZQorZG9uZQorCitleGl0ICRlcnJzdGF0dXMKKworIyBta2luc3RhbGxkaXJzIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvc3JjL21vdmUuYyBiL3NyYy9tb3ZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhMGZiNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tb3ZlLmMKQEAgLTAsMCArMSwyNzk2IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisvKgorICogbW92ZS5jOiBGdW5jdGlvbnMgZm9yIG1vdmluZyB0aGUgY3Vyc29yIGFuZCBzY3JvbGxpbmcgdGV4dC4KKyAqCisgKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gbW92ZSB0aGUgY3Vyc29yOgorICogMS4gTW92ZSB0aGUgY3Vyc29yIGRpcmVjdGx5LCB0aGUgdGV4dCBpcyBzY3JvbGxlZCB0byBrZWVwIHRoZSBjdXJzb3IgaW4gdGhlCisgKiAgICB3aW5kb3cuCisgKiAyLiBTY3JvbGwgdGhlIHRleHQsIHRoZSBjdXJzb3IgaXMgbW92ZWQgaW50byB0aGUgdGV4dCB2aXNpYmxlIGluIHRoZQorICogICAgd2luZG93LgorICogVGhlICdzY3JvbGxvZmYnIG9wdGlvbiBtYWtlcyB0aGlzIGEgYml0IGNvbXBsaWNhdGVkLgorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworc3RhdGljIHZvaWQgY29tcF9ib3RsaW5lIF9fQVJHUygod2luX1QgKndwKSk7CitzdGF0aWMgaW50IGNoZWNrX3RvcF9vZmZzZXQgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBjdXJzX3Jvd3MgX19BUkdTKCh3aW5fVCAqd3AsIGludCBkb19ib3RsaW5lKSk7CitzdGF0aWMgdm9pZCB2YWxpZGF0ZV9ib3RsaW5lX3dpbiBfX0FSR1MoKHdpbl9UICp3cCkpOworc3RhdGljIHZvaWQgdmFsaWRhdGVfY2hlaWdodCBfX0FSR1MoKHZvaWQpKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBsaW5lbnJfVAkgICAgbG51bTsJLyogbGluZSBudW1iZXIgKi8KKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBpbnQJCSAgICBmaWxsOwkvKiBmaWxsZXIgbGluZXMgKi8KKyNlbmRpZgorICAgIGludAkJICAgIGhlaWdodDsJLyogaGVpZ2h0IG9mIGFkZGVkIGxpbmUgKi8KK30gbGluZW9mZl9UOworCitzdGF0aWMgdm9pZCB0b3BsaW5lX2JhY2sgX19BUkdTKChsaW5lb2ZmX1QgKmxwKSk7CitzdGF0aWMgdm9pZCBib3RsaW5lX2ZvcncgX19BUkdTKChsaW5lb2ZmX1QgKmxwKSk7CisjaWZkZWYgRkVBVF9ESUZGCitzdGF0aWMgdm9pZCBib3RsaW5lX3RvcGxpbmUgX19BUkdTKChsaW5lb2ZmX1QgKmxwKSk7CitzdGF0aWMgdm9pZCB0b3BsaW5lX2JvdGxpbmUgX19BUkdTKChsaW5lb2ZmX1QgKmxwKSk7CitzdGF0aWMgdm9pZCBtYXhfdG9wZmlsbCBfX0FSR1MoKHZvaWQpKTsKKyNlbmRpZgorCisvKgorICogQ29tcHV0ZSB3cC0+d19ib3RsaW5lIGZvciB0aGUgY3VycmVudCB3cC0+d190b3BsaW5lLiAgQ2FuIGJlIGNhbGxlZCBhZnRlcgorICogd3AtPndfdG9wbGluZSBjaGFuZ2VkLgorICovCisgICAgc3RhdGljIHZvaWQKK2NvbXBfYm90bGluZSh3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgaW50CQluOworICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQlkb25lOworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGxpbmVucl9UICAgIGxhc3Q7CisgICAgaW50CQlmb2xkZWQ7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgd19jbGluZV9yb3cgaXMgdmFsaWQsIHN0YXJ0IHRoZXJlLgorICAgICAqIE90aGVyd2lzZSBoYXZlIHRvIHN0YXJ0IGF0IHdfdG9wbGluZS4KKyAgICAgKi8KKyAgICBjaGVja19jdXJzb3JfbW92ZWQod3ApOworICAgIGlmICh3cC0+d192YWxpZCAmIFZBTElEX0NST1cpCisgICAgeworCWxudW0gPSB3cC0+d19jdXJzb3IubG51bTsKKwlkb25lID0gd3AtPndfY2xpbmVfcm93OworICAgIH0KKyAgICBlbHNlCisgICAgeworCWxudW0gPSB3cC0+d190b3BsaW5lOworCWRvbmUgPSAwOworICAgIH0KKworICAgIGZvciAoIDsgbG51bSA8PSB3cC0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudDsgKytsbnVtKQorICAgIHsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwlsYXN0ID0gbG51bTsKKwlmb2xkZWQgPSBGQUxTRTsKKwlpZiAoaGFzRm9sZGluZ1dpbih3cCwgbG51bSwgTlVMTCwgJmxhc3QsIFRSVUUsIE5VTEwpKQorCXsKKwkgICAgbiA9IDE7CisJICAgIGZvbGRlZCA9IFRSVUU7CisJfQorCWVsc2UKKyNlbmRpZgorI2lmZGVmIEZFQVRfRElGRgorCSAgICBpZiAobG51bSA9PSB3cC0+d190b3BsaW5lKQorCQluID0gcGxpbmVzX3dpbl9ub2ZpbGwod3AsIGxudW0sIFRSVUUpICsgd3AtPndfdG9wZmlsbDsKKwkgICAgZWxzZQorI2VuZGlmCisJCW4gPSBwbGluZXNfd2luKHdwLCBsbnVtLCBUUlVFKTsKKwlpZiAoCisjaWZkZWYgRkVBVF9GT0xESU5HCisJCWxudW0gPD0gd3AtPndfY3Vyc29yLmxudW0gJiYgbGFzdCA+PSB3cC0+d19jdXJzb3IubG51bQorI2Vsc2UKKwkJbG51bSA9PSB3cC0+d19jdXJzb3IubG51bQorI2VuZGlmCisJICAgKQorCXsKKwkgICAgd3AtPndfY2xpbmVfcm93ID0gZG9uZTsKKwkgICAgd3AtPndfY2xpbmVfaGVpZ2h0ID0gbjsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgd3AtPndfY2xpbmVfZm9sZGVkID0gZm9sZGVkOworI2VuZGlmCisJICAgIHdwLT53X3ZhbGlkIHw9IChWQUxJRF9DUk9XfFZBTElEX0NIRUlHSFQpOworCX0KKwlpZiAoZG9uZSArIG4gPiB3cC0+d19oZWlnaHQpCisJICAgIGJyZWFrOworCWRvbmUgKz0gbjsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwlsbnVtID0gbGFzdDsKKyNlbmRpZgorICAgIH0KKworICAgIC8qIHdwLT53X2JvdGxpbmUgaXMgdGhlIGxpbmUgdGhhdCBpcyBqdXN0IGJlbG93IHRoZSB3aW5kb3cgKi8KKyAgICB3cC0+d19ib3RsaW5lID0gbG51bTsKKyAgICB3cC0+d192YWxpZCB8PSBWQUxJRF9CT1RMSU5FfFZBTElEX0JPVExJTkVfQVA7CisKKyAgICBzZXRfZW1wdHlfcm93cyh3cCwgZG9uZSk7Cit9CisKKy8qCisgKiBVcGRhdGUgY3Vyd2luLT53X3RvcGxpbmUgYW5kIHJlZHJhdyBpZiBuZWNlc3NhcnkuCisgKiBVc2VkIHRvIHVwZGF0ZSB0aGUgc2NyZWVuIGJlZm9yZSBwcmludGluZyBhIG1lc3NhZ2UuCisgKi8KKyAgICB2b2lkCit1cGRhdGVfdG9wbGluZV9yZWRyYXcoKQoreworICAgIHVwZGF0ZV90b3BsaW5lKCk7CisgICAgaWYgKG11c3RfcmVkcmF3KQorCXVwZGF0ZV9zY3JlZW4oMCk7Cit9CisKKy8qCisgKiBVcGRhdGUgY3Vyd2luLT53X3RvcGxpbmUgdG8gbW92ZSB0aGUgY3Vyc29yIG9udG8gdGhlIHNjcmVlbi4KKyAqLworICAgIHZvaWQKK3VwZGF0ZV90b3BsaW5lKCkKK3sKKyAgICBsb25nCWxpbmVfY291bnQ7CisgICAgaW50CQloYWxmaGVpZ2h0OworICAgIGludAkJbjsKKyAgICBsaW5lbnJfVAlvbGRfdG9wbGluZTsKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBpbnQJCW9sZF90b3BmaWxsOworI2VuZGlmCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgbGluZW5yX1QJbG51bTsKKyNlbmRpZgorICAgIGludAkJY2hlY2tfdG9wbGluZSA9IEZBTFNFOworICAgIGludAkJY2hlY2tfYm90bGluZSA9IEZBTFNFOworI2lmZGVmIEZFQVRfTU9VU0UKKyAgICBpbnQJCXNhdmVfc28gPSBwX3NvOworI2VuZGlmCisKKyAgICBpZiAoIXNjcmVlbl92YWxpZChUUlVFKSkKKwlyZXR1cm47CisKKyAgICBjaGVja19jdXJzb3JfbW92ZWQoY3Vyd2luKTsKKyAgICBpZiAoY3Vyd2luLT53X3ZhbGlkICYgVkFMSURfVE9QTElORSkKKwlyZXR1cm47CisKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgLyogV2hlbiBkcmFnZ2luZyB3aXRoIHRoZSBtb3VzZSwgZG9uJ3Qgc2Nyb2xsIHRoYXQgcXVpY2tseSAqLworICAgIGlmIChtb3VzZV9kcmFnZ2luZykKKwlwX3NvID0gbW91c2VfZHJhZ2dpbmcgLSAxOworI2VuZGlmCisKKyAgICBvbGRfdG9wbGluZSA9IGN1cndpbi0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfRElGRgorICAgIG9sZF90b3BmaWxsID0gY3Vyd2luLT53X3RvcGZpbGw7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgdGhlIGJ1ZmZlciBpcyBlbXB0eSwgYWx3YXlzIHNldCB0b3BsaW5lIHRvIDEuCisgICAgICovCisgICAgaWYgKGJ1ZmVtcHR5KCkpCQkvKiBzcGVjaWFsIGNhc2UgLSBmaWxlIGlzIGVtcHR5ICovCisgICAgeworCWlmIChjdXJ3aW4tPndfdG9wbGluZSAhPSAxKQorCSAgICByZWRyYXdfbGF0ZXIoTk9UX1ZBTElEKTsKKwljdXJ3aW4tPndfdG9wbGluZSA9IDE7CisjaWZkZWYgRkVBVF9ESUZGCisJY3Vyd2luLT53X3RvcGZpbGwgPSAwOworI2VuZGlmCisJY3Vyd2luLT53X2JvdGxpbmUgPSAyOworCWN1cndpbi0+d192YWxpZCB8PSBWQUxJRF9CT1RMSU5FfFZBTElEX0JPVExJTkVfQVA7CisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisJY3Vyd2luLT53X3NjYmluZF9wb3MgPSAxOworI2VuZGlmCisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB0aGUgY3Vyc29yIGlzIGFib3ZlIG9yIG5lYXIgdGhlIHRvcCBvZiB0aGUgd2luZG93LCBzY3JvbGwgdGhlIHdpbmRvdworICAgICAqIHRvIHNob3cgdGhlIGxpbmUgdGhlIGN1cnNvciBpcyBpbiwgd2l0aCAnc2Nyb2xsb2ZmJyBjb250ZXh0LgorICAgICAqLworICAgIGVsc2UKKyAgICB7CisJaWYgKGN1cndpbi0+d190b3BsaW5lID4gMSkKKwl7CisJICAgIC8qIElmIHRoZSBjdXJzb3IgaXMgYWJvdmUgdG9wbGluZSwgc2Nyb2xsaW5nIGlzIGFsd2F5cyBuZWVkZWQuCisJICAgICAqIElmIHRoZSBjdXJzb3IgaXMgZmFyIGJlbG93IHRvcGxpbmUgYW5kIHRoZXJlIGlzIG5vIGZvbGRpbmcsCisJICAgICAqIHNjcm9sbGluZyBkb3duIGlzIG5ldmVyIG5lZWRlZC4gKi8KKwkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8IGN1cndpbi0+d190b3BsaW5lKQorCQljaGVja190b3BsaW5lID0gVFJVRTsKKwkgICAgZWxzZSBpZiAoY2hlY2tfdG9wX29mZnNldCgpKQorCQljaGVja190b3BsaW5lID0gVFJVRTsKKwl9CisjaWZkZWYgRkVBVF9ESUZGCisJICAgIC8qIENoZWNrIGlmIHRoZXJlIGFyZSBtb3JlIGZpbGxlciBsaW5lcyB0aGFuIGFsbG93ZWQuICovCisJaWYgKCFjaGVja190b3BsaW5lICYmIGN1cndpbi0+d190b3BmaWxsID4gZGlmZl9jaGVja19maWxsKGN1cndpbiwKKwkJCQkJCQkgICBjdXJ3aW4tPndfdG9wbGluZSkpCisJICAgIGNoZWNrX3RvcGxpbmUgPSBUUlVFOworI2VuZGlmCisKKwlpZiAoY2hlY2tfdG9wbGluZSkKKwl7CisJICAgIGhhbGZoZWlnaHQgPSBjdXJ3aW4tPndfaGVpZ2h0IC8gMiAtIDE7CisJICAgIGlmIChoYWxmaGVpZ2h0IDwgMikKKwkJaGFsZmhlaWdodCA9IDI7CisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgaWYgKGhhc0FueUZvbGRpbmcoY3Vyd2luKSkKKwkgICAgeworCQkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGxvZ2ljYWwgbGluZXMgYmV0d2VlbiB0aGUgY3Vyc29yIGFuZAorCQkgKiB0b3BsaW5lICsgcF9zbyAoYXBwcm94aW1hdGlvbiBvZiBob3cgbXVjaCB3aWxsIGJlCisJCSAqIHNjcm9sbGVkKS4gKi8KKwkJbiA9IDA7CisJCWZvciAobG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKwkJCQkgICAgICBsbnVtIDwgY3Vyd2luLT53X3RvcGxpbmUgKyBwX3NvOyArK2xudW0pCisJCXsKKwkJICAgICsrbjsKKwkJICAgIC8qIHN0b3AgYXQgZW5kIG9mIGZpbGUgb3Igd2hlbiB3ZSBrbm93IHdlIGFyZSBmYXIgb2ZmICovCisJCSAgICBpZiAobG51bSA+PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCB8fCBuID49IGhhbGZoZWlnaHQpCisJCQlicmVhazsKKwkJICAgICh2b2lkKWhhc0ZvbGRpbmcobG51bSwgTlVMTCwgJmxudW0pOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJCW4gPSBjdXJ3aW4tPndfdG9wbGluZSArIHBfc28gLSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisKKwkgICAgLyogSWYgd2Ugd2VyZW4ndCB2ZXJ5IGNsb3NlIHRvIGJlZ2luIHdpdGgsIHdlIHNjcm9sbCB0byBwdXQgdGhlCisJICAgICAqIGN1cnNvciBpbiB0aGUgbWlkZGxlIG9mIHRoZSB3aW5kb3cuICBPdGhlcndpc2UgcHV0IHRoZSBjdXJzb3IKKwkgICAgICogbmVhciB0aGUgdG9wIG9mIHRoZSB3aW5kb3cuICovCisJICAgIGlmIChuID49IGhhbGZoZWlnaHQpCisJCXNjcm9sbF9jdXJzb3JfaGFsZndheShGQUxTRSk7CisJICAgIGVsc2UKKwkgICAgeworCQlzY3JvbGxfY3Vyc29yX3RvcCgoaW50KXBfc2osIEZBTFNFKTsKKwkJY2hlY2tfYm90bGluZSA9IFRSVUU7CisJICAgIH0KKwl9CisKKwllbHNlCisJeworI2lmZGVmIEZFQVRfRk9MRElORworCSAgICAvKiBNYWtlIHN1cmUgdG9wbGluZSBpcyB0aGUgZmlyc3QgbGluZSBvZiBhIGZvbGQuICovCisJICAgICh2b2lkKWhhc0ZvbGRpbmcoY3Vyd2luLT53X3RvcGxpbmUsICZjdXJ3aW4tPndfdG9wbGluZSwgTlVMTCk7CisjZW5kaWYKKwkgICAgY2hlY2tfYm90bGluZSA9IFRSVUU7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlIGN1cnNvciBpcyBiZWxvdyB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3csIHNjcm9sbCB0aGUgd2luZG93CisgICAgICogdG8gcHV0IHRoZSBjdXJzb3Igb24gdGhlIHdpbmRvdy4KKyAgICAgKiBXaGVuIHdfYm90bGluZSBpcyBpbnZhbGlkLCByZWNvbXB1dGUgaXQgZmlyc3QsIHRvIGF2b2lkIGEgcmVkcmF3IGxhdGVyLgorICAgICAqIElmIHdfYm90bGluZSB3YXMgYXBwcm94aW1hdGVkLCB3ZSBtaWdodCBuZWVkIGEgcmVkcmF3IGxhdGVyIGluIGEgZmV3CisgICAgICogY2FzZXMsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHNwZW5kIChhIGxvdCBvZikgdGltZSByZWNvbXB1dGluZyB3X2JvdGxpbmUKKyAgICAgKiBmb3IgZXZlcnkgc21hbGwgY2hhbmdlLgorICAgICAqLworICAgIGlmIChjaGVja19ib3RsaW5lKQorICAgIHsKKwlpZiAoIShjdXJ3aW4tPndfdmFsaWQgJiBWQUxJRF9CT1RMSU5FX0FQKSkKKwkgICAgdmFsaWRhdGVfYm90bGluZSgpOworCisJaWYgKGN1cndpbi0+d19ib3RsaW5lIDw9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXsKKwkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8IGN1cndpbi0+d19ib3RsaW5lCisJCSAgICAmJiAoKGxvbmcpY3Vyd2luLT53X2N1cnNvci5sbnVtCisJCQkJCSAgICAgPj0gKGxvbmcpY3Vyd2luLT53X2JvdGxpbmUgLSBwX3NvCisjaWZkZWYgRkVBVF9GT0xESU5HCisJCQl8fCBoYXNBbnlGb2xkaW5nKGN1cndpbikKKyNlbmRpZgorCQkJKSkKKwkgICAgeworCQlsaW5lb2ZmX1QJbG9mZjsKKworCQkvKiBDdXJzb3IgaXMgYWJvdmUgYm90bGluZSwgY2hlY2sgaWYgdGhlcmUgYXJlICdzY3JvbGxvZmYnCisJCSAqIHdpbmRvdyBsaW5lcyBiZWxvdyB0aGUgY3Vyc29yLiAgSWYgbm90LCBuZWVkIHRvIHNjcm9sbC4gKi8KKwkJbiA9IGN1cndpbi0+d19lbXB0eV9yb3dzOworCQlsb2ZmLmxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisjaWZkZWYgRkVBVF9GT0xESU5HCisJCS8qIEluIGEgZm9sZCBnbyB0byBpdHMgbGFzdCBsaW5lLiAqLworCQkodm9pZCloYXNGb2xkaW5nKGxvZmYubG51bSwgTlVMTCwgJmxvZmYubG51bSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0RJRkYKKwkJbG9mZi5maWxsID0gMDsKKwkJbiArPSBjdXJ3aW4tPndfZmlsbGVyX3Jvd3M7CisjZW5kaWYKKwkJbG9mZi5oZWlnaHQgPSAwOworCQl3aGlsZSAobG9mZi5sbnVtIDwgY3Vyd2luLT53X2JvdGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkJCSYmIChsb2ZmLmxudW0gKyAxIDwgY3Vyd2luLT53X2JvdGxpbmUgfHwgbG9mZi5maWxsID09IDApCisjZW5kaWYKKwkJCSkKKwkJeworCQkgICAgbiArPSBsb2ZmLmhlaWdodDsKKwkJICAgIGlmIChuID49IHBfc28pCisJCQlicmVhazsKKwkJICAgIGJvdGxpbmVfZm9ydygmbG9mZik7CisJCX0KKwkJaWYgKG4gPj0gcF9zbykKKwkJICAgIC8qIHN1ZmZpY2llbnQgY29udGV4dCwgbm8gbmVlZCB0byBzY3JvbGwgKi8KKwkJICAgIGNoZWNrX2JvdGxpbmUgPSBGQUxTRTsKKwkgICAgfQorCSAgICBpZiAoY2hlY2tfYm90bGluZSkKKwkgICAgeworI2lmZGVmIEZFQVRfRk9MRElORworCQlpZiAoaGFzQW55Rm9sZGluZyhjdXJ3aW4pKQorCQl7CisJCSAgICAvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGxvZ2ljYWwgbGluZXMgYmV0d2VlbiB0aGUgY3Vyc29yIGFuZAorCQkgICAgICogYm90bGluZSAtIHBfc28gKGFwcHJveGltYXRpb24gb2YgaG93IG11Y2ggd2lsbCBiZQorCQkgICAgICogc2Nyb2xsZWQpLiAqLworCQkgICAgbGluZV9jb3VudCA9IDA7CisJCSAgICBmb3IgKGxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJCQkJICAgICBsbnVtID49IGN1cndpbi0+d19ib3RsaW5lIC0gcF9zbzsgLS1sbnVtKQorCQkgICAgeworCQkJKytsaW5lX2NvdW50OworCQkJLyogc3RvcCBhdCBlbmQgb2YgZmlsZSBvciB3aGVuIHdlIGtub3cgd2UgYXJlIGZhciBvZmYgKi8KKwkJCWlmIChsbnVtIDw9IDAgfHwgbGluZV9jb3VudCA+IGN1cndpbi0+d19oZWlnaHQgKyAxKQorCQkJICAgIGJyZWFrOworCQkJKHZvaWQpaGFzRm9sZGluZyhsbnVtLCAmbG51bSwgTlVMTCk7CisJCSAgICB9CisJCX0KKwkJZWxzZQorI2VuZGlmCisJCSAgICBsaW5lX2NvdW50ID0gY3Vyd2luLT53X2N1cnNvci5sbnVtIC0gY3Vyd2luLT53X2JvdGxpbmUKKwkJCQkJCQkJICAgKyAxICsgcF9zbzsKKwkJaWYgKGxpbmVfY291bnQgPD0gY3Vyd2luLT53X2hlaWdodCArIDEpCisJCSAgICBzY3JvbGxfY3Vyc29yX2JvdCgoaW50KXBfc2osIEZBTFNFKTsKKwkJZWxzZQorCQkgICAgc2Nyb2xsX2N1cnNvcl9oYWxmd2F5KEZBTFNFKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX1RPUExJTkU7CisKKyAgICAvKgorICAgICAqIE5lZWQgdG8gcmVkcmF3IHdoZW4gdG9wbGluZSBjaGFuZ2VkLgorICAgICAqLworICAgIGlmIChjdXJ3aW4tPndfdG9wbGluZSAhPSBvbGRfdG9wbGluZQorI2lmZGVmIEZFQVRfRElGRgorCSAgICB8fCBjdXJ3aW4tPndfdG9wZmlsbCAhPSBvbGRfdG9wZmlsbAorI2VuZGlmCisJICAgICkKKyAgICB7CisJZG9sbGFyX3Zjb2wgPSAwOworCWlmIChjdXJ3aW4tPndfc2tpcGNvbCkKKwl7CisJICAgIGN1cndpbi0+d19za2lwY29sID0gMDsKKwkgICAgcmVkcmF3X2xhdGVyKE5PVF9WQUxJRCk7CisJfQorCWVsc2UKKwkgICAgcmVkcmF3X2xhdGVyKFZBTElEKTsKKwkvKiBNYXkgbmVlZCB0byBzZXQgd19za2lwY29sIHdoZW4gY3Vyc29yIGluIHdfdG9wbGluZS4gKi8KKwlpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID09IGN1cndpbi0+d190b3BsaW5lKQorCSAgICB2YWxpZGF0ZV9jdXJzb3IoKTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgcF9zbyA9IHNhdmVfc287CisjZW5kaWYKK30KKworLyoKKyAqIFJldHVybiBUUlVFIHdoZW4gdGhlcmUgYXJlIG5vdCAnc2Nyb2xsb2ZmJyBsaW5lcyBhYm92ZSB0aGUgY3Vyc29yIGZvciB0aGUKKyAqIGN1cnJlbnQgd2luZG93LgorICovCisgICAgc3RhdGljIGludAorY2hlY2tfdG9wX29mZnNldCgpCit7CisgICAgbGluZW9mZl9UCWxvZmY7CisgICAgaW50CQluOworCisgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8IGN1cndpbi0+d190b3BsaW5lICsgcF9zbworI2lmZGVmIEZFQVRfRk9MRElORworCQkgICAgfHwgaGFzQW55Rm9sZGluZyhjdXJ3aW4pCisjZW5kaWYKKwkgICAgKQorICAgIHsKKwlsb2ZmLmxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisjaWZkZWYgRkVBVF9ESUZGCisJbG9mZi5maWxsID0gMDsKKwluID0gY3Vyd2luLT53X3RvcGZpbGw7CSAgICAvKiBhbHdheXMgaGF2ZSB0aGlzIGNvbnRleHQgKi8KKyNlbHNlCisJbiA9IDA7CisjZW5kaWYKKwkvKiBDb3VudCB0aGUgdmlzaWJsZSBzY3JlZW4gbGluZXMgYWJvdmUgdGhlIGN1cnNvciBsaW5lLiAqLworCXdoaWxlIChuIDwgcF9zbykKKwl7CisJICAgIHRvcGxpbmVfYmFjaygmbG9mZik7CisJICAgIC8qIFN0b3Agd2hlbiBpbmNsdWRlZCBhIGxpbmUgYWJvdmUgdGhlIHdpbmRvdy4gKi8KKwkgICAgaWYgKGxvZmYubG51bSA8IGN1cndpbi0+d190b3BsaW5lCisjaWZkZWYgRkVBVF9ESUZGCisJCSAgICB8fCAobG9mZi5sbnVtID09IGN1cndpbi0+d190b3BsaW5lICYmIGxvZmYuZmlsbCA+IDApCisjZW5kaWYKKwkJICAgICkKKwkJYnJlYWs7CisJICAgIG4gKz0gbG9mZi5oZWlnaHQ7CisJfQorCWlmIChuIDwgcF9zbykKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworICAgIHZvaWQKK3VwZGF0ZV9jdXJzd2FudCgpCit7CisgICAgaWYgKGN1cndpbi0+d19zZXRfY3Vyc3dhbnQpCisgICAgeworCXZhbGlkYXRlX3ZpcnRjb2woKTsKKwljdXJ3aW4tPndfY3Vyc3dhbnQgPSBjdXJ3aW4tPndfdmlydGNvbDsKKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gRkFMU0U7CisgICAgfQorfQorCisvKgorICogQ2hlY2sgaWYgdGhlIGN1cnNvciBoYXMgbW92ZWQuICBTZXQgdGhlIHdfdmFsaWQgZmxhZyBhY2NvcmRpbmdseS4KKyAqLworICAgIHZvaWQKK2NoZWNrX2N1cnNvcl9tb3ZlZCh3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgaWYgKHdwLT53X2N1cnNvci5sbnVtICE9IHdwLT53X3ZhbGlkX2N1cnNvci5sbnVtKQorICAgIHsKKwl3cC0+d192YWxpZCAmPSB+KFZBTElEX1dST1d8VkFMSURfV0NPTHxWQUxJRF9WSVJUQ09MCisJCQkJICAgICB8VkFMSURfQ0hFSUdIVHxWQUxJRF9DUk9XfFZBTElEX1RPUExJTkUpOworCXdwLT53X3ZhbGlkX2N1cnNvciA9IHdwLT53X2N1cnNvcjsKKwl3cC0+d192YWxpZF9sZWZ0Y29sID0gd3AtPndfbGVmdGNvbDsKKyAgICB9CisgICAgZWxzZSBpZiAod3AtPndfY3Vyc29yLmNvbCAhPSB3cC0+d192YWxpZF9jdXJzb3IuY29sCisJICAgICB8fCB3cC0+d19sZWZ0Y29sICE9IHdwLT53X3ZhbGlkX2xlZnRjb2wKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJICAgICB8fCB3cC0+d19jdXJzb3IuY29sYWRkICE9IHdwLT53X3ZhbGlkX2N1cnNvci5jb2xhZGQKKyNlbmRpZgorCSAgICAgKQorICAgIHsKKwl3cC0+d192YWxpZCAmPSB+KFZBTElEX1dST1d8VkFMSURfV0NPTHxWQUxJRF9WSVJUQ09MKTsKKwl3cC0+d192YWxpZF9jdXJzb3IuY29sID0gd3AtPndfY3Vyc29yLmNvbDsKKwl3cC0+d192YWxpZF9sZWZ0Y29sID0gd3AtPndfbGVmdGNvbDsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJd3AtPndfdmFsaWRfY3Vyc29yLmNvbGFkZCA9IHdwLT53X2N1cnNvci5jb2xhZGQ7CisjZW5kaWYKKyAgICB9Cit9CisKKy8qCisgKiBDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBzb21lIHdpbmRvdyBzZXR0aW5ncyBoYXZlIGNoYW5nZWQsIHdoaWNoIHJlcXVpcmUKKyAqIHRoZSBjdXJzb3IgcG9zaXRpb24sIGJvdGxpbmUgYW5kIHRvcGxpbmUgdG8gYmUgcmVjb21wdXRlZCBhbmQgdGhlIHdpbmRvdyB0bworICogYmUgcmVkcmF3bi4gIEUuZywgd2hlbiBjaGFuZ2luZyB0aGUgJ3dyYXAnIG9wdGlvbiBvciBmb2xkaW5nLgorICovCisgICAgdm9pZAorY2hhbmdlZF93aW5kb3dfc2V0dGluZygpCit7CisgICAgY2hhbmdlZF93aW5kb3dfc2V0dGluZ193aW4oY3Vyd2luKTsKK30KKworICAgIHZvaWQKK2NoYW5nZWRfd2luZG93X3NldHRpbmdfd2luKHdwKQorICAgIHdpbl9UCSp3cDsKK3sKKyAgICB3cC0+d19saW5lc192YWxpZCA9IDA7CisgICAgY2hhbmdlZF9saW5lX2Fidl9jdXJzX3dpbih3cCk7CisgICAgd3AtPndfdmFsaWQgJj0gfihWQUxJRF9CT1RMSU5FfFZBTElEX0JPVExJTkVfQVB8VkFMSURfVE9QTElORSk7CisgICAgcmVkcmF3X3dpbl9sYXRlcih3cCwgTk9UX1ZBTElEKTsKK30KKworLyoKKyAqIFNldCB3cC0+d190b3BsaW5lIHRvIGEgY2VydGFpbiBudW1iZXIuCisgKi8KKyAgICB2b2lkCitzZXRfdG9wbGluZSh3cCwgbG51bSkKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICAvKiBnbyB0byBmaXJzdCBvZiBmb2xkZWQgbGluZXMgKi8KKyAgICAodm9pZCloYXNGb2xkaW5nV2luKHdwLCBsbnVtLCAmbG51bSwgTlVMTCwgVFJVRSwgTlVMTCk7CisjZW5kaWYKKyAgICAvKiBBcHByb3hpbWF0ZSB0aGUgdmFsdWUgb2Ygd19ib3RsaW5lICovCisgICAgd3AtPndfYm90bGluZSArPSBsbnVtIC0gd3AtPndfdG9wbGluZTsKKyAgICB3cC0+d190b3BsaW5lID0gbG51bTsKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICB3cC0+d190b3BmaWxsID0gMDsKKyNlbmRpZgorICAgIHdwLT53X3ZhbGlkICY9IH4oVkFMSURfV1JPV3xWQUxJRF9DUk9XfFZBTElEX0JPVExJTkV8VkFMSURfVE9QTElORSk7CisgICAgLyogRG9uJ3Qgc2V0IFZBTElEX1RPUExJTkUgaGVyZSwgJ3Njcm9sbG9mZicgbmVlZHMgdG8gYmUgY2hlY2tlZC4gKi8KKyAgICByZWRyYXdfbGF0ZXIoVkFMSUQpOworfQorCisvKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIGxlbmd0aCBvZiB0aGUgY3Vyc29yIGxpbmUgKGluIHNjcmVlbgorICogY2hhcmFjdGVycykgaGFzIGNoYW5nZWQsIGFuZCB0aGUgY2hhbmdlIGlzIGJlZm9yZSB0aGUgY3Vyc29yLgorICogTmVlZCB0byB0YWtlIGNhcmUgb2Ygd19ib3RsaW5lIHNlcGFyYXRlbHkhCisgKi8KKyAgICB2b2lkCitjaGFuZ2VkX2NsaW5lX2JlZl9jdXJzKCkKK3sKKyAgICBjdXJ3aW4tPndfdmFsaWQgJj0gfihWQUxJRF9XUk9XfFZBTElEX1dDT0x8VkFMSURfVklSVENPTAorCQkJCQkJfFZBTElEX0NIRUlHSFR8VkFMSURfVE9QTElORSk7Cit9CisKKyAgICB2b2lkCitjaGFuZ2VkX2NsaW5lX2JlZl9jdXJzX3dpbih3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgd3AtPndfdmFsaWQgJj0gfihWQUxJRF9XUk9XfFZBTElEX1dDT0x8VkFMSURfVklSVENPTAorCQkJCQkJfFZBTElEX0NIRUlHSFR8VkFMSURfVE9QTElORSk7Cit9CisKKyNpZiAwIC8qIG5vdCB1c2VkICovCisvKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIGxlbmd0aCBvZiB0aGUgY3Vyc29yIGxpbmUgKGluIHNjcmVlbgorICogY2hhcmFjdGVycykgaGFzIGNoYW5nZWQsIGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnNvciBkb2Vzbid0IGNoYW5nZS4KKyAqIE5lZWQgdG8gdGFrZSBjYXJlIG9mIHdfYm90bGluZSBzZXBhcmF0ZWx5IQorICovCisgICAgdm9pZAorY2hhbmdlZF9jbGluZV9hZnRfY3VycygpCit7CisgICAgY3Vyd2luLT53X3ZhbGlkICY9IH5WQUxJRF9DSEVJR0hUOworfQorI2VuZGlmCisKKy8qCisgKiBDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiB0aGUgbGVuZ3RoIG9mIGEgbGluZSAoaW4gc2NyZWVuIGNoYXJhY3RlcnMpIGFib3ZlCisgKiB0aGUgY3Vyc29yIGhhdmUgY2hhbmdlZC4KKyAqIE5lZWQgdG8gdGFrZSBjYXJlIG9mIHdfYm90bGluZSBzZXBhcmF0ZWx5IQorICovCisgICAgdm9pZAorY2hhbmdlZF9saW5lX2Fidl9jdXJzKCkKK3sKKyAgICBjdXJ3aW4tPndfdmFsaWQgJj0gfihWQUxJRF9XUk9XfFZBTElEX1dDT0x8VkFMSURfVklSVENPTHxWQUxJRF9DUk9XCisJCQkJCQl8VkFMSURfQ0hFSUdIVHxWQUxJRF9UT1BMSU5FKTsKK30KKworICAgIHZvaWQKK2NoYW5nZWRfbGluZV9hYnZfY3Vyc193aW4od3ApCisgICAgd2luX1QJKndwOworeworICAgIHdwLT53X3ZhbGlkICY9IH4oVkFMSURfV1JPV3xWQUxJRF9XQ09MfFZBTElEX1ZJUlRDT0x8VkFMSURfQ1JPVworCQkJCQkJfFZBTElEX0NIRUlHSFR8VkFMSURfVE9QTElORSk7Cit9CisKKy8qCisgKiBNYWtlIHN1cmUgdGhlIHZhbHVlIG9mIGN1cndpbi0+d19ib3RsaW5lIGlzIHZhbGlkLgorICovCisgICAgdm9pZAordmFsaWRhdGVfYm90bGluZSgpCit7CisgICAgaWYgKCEoY3Vyd2luLT53X3ZhbGlkICYgVkFMSURfQk9UTElORSkpCisJY29tcF9ib3RsaW5lKGN1cndpbik7Cit9CisKKy8qCisgKiBNYWtlIHN1cmUgdGhlIHZhbHVlIG9mIHdwLT53X2JvdGxpbmUgaXMgdmFsaWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordmFsaWRhdGVfYm90bGluZV93aW4od3ApCisgICAgd2luX1QJKndwOworeworICAgIGlmICghKHdwLT53X3ZhbGlkICYgVkFMSURfQk9UTElORSkpCisJY29tcF9ib3RsaW5lKHdwKTsKK30KKworLyoKKyAqIE1hcmsgY3Vyd2luLT53X2JvdGxpbmUgYXMgaW52YWxpZCAoYmVjYXVzZSBvZiBzb21lIGNoYW5nZSBpbiB0aGUgYnVmZmVyKS4KKyAqLworICAgIHZvaWQKK2ludmFsaWRhdGVfYm90bGluZSgpCit7CisgICAgY3Vyd2luLT53X3ZhbGlkICY9IH4oVkFMSURfQk9UTElORXxWQUxJRF9CT1RMSU5FX0FQKTsKK30KKworICAgIHZvaWQKK2ludmFsaWRhdGVfYm90bGluZV93aW4od3ApCisgICAgd2luX1QJKndwOworeworICAgIHdwLT53X3ZhbGlkICY9IH4oVkFMSURfQk9UTElORXxWQUxJRF9CT1RMSU5FX0FQKTsKK30KKworI2lmIDAgLyogbmV2ZXIgdXNlZCAqLworLyoKKyAqIE1hcmsgY3Vyd2luLT53X2JvdGxpbmUgYXMgYXBwcm94aW1hdGVkIChiZWNhdXNlIG9mIHNvbWUgc21hbGwgY2hhbmdlIGluIHRoZQorICogYnVmZmVyKS4KKyAqLworICAgIHZvaWQKK2FwcHJveGltYXRlX2JvdGxpbmUoKQoreworICAgIGN1cndpbi0+d192YWxpZCAmPSB+VkFMSURfQk9UTElORTsKK30KKyNlbmRpZgorCisgICAgdm9pZAorYXBwcm94aW1hdGVfYm90bGluZV93aW4od3ApCisgICAgd2luX1QJKndwOworeworICAgIHdwLT53X3ZhbGlkICY9IH5WQUxJRF9CT1RMSU5FOworfQorCisjaWYgMCAvKiBub3QgdXNlZCAqLworLyoKKyAqIFJldHVybiBUUlVFIGlmIGN1cndpbi0+d19ib3RsaW5lIGlzIHZhbGlkLgorICovCisgICAgaW50Citib3RsaW5lX3ZhbGlkKCkKK3sKKyAgICByZXR1cm4gKGN1cndpbi0+d192YWxpZCAmIFZBTElEX0JPVExJTkUpOworfQorI2VuZGlmCisKKyNpZiAwIC8qIG5vdCB1c2VkICovCisvKgorICogUmV0dXJuIFRSVUUgaWYgY3Vyd2luLT53X2JvdGxpbmUgaXMgdmFsaWQgb3IgYXBwcm94aW1hdGVkLgorICovCisgICAgaW50Citib3RsaW5lX2FwcHJveGltYXRlZCgpCit7CisgICAgcmV0dXJuIChjdXJ3aW4tPndfdmFsaWQgJiBWQUxJRF9CT1RMSU5FX0FQKTsKK30KKyNlbmRpZgorCisvKgorICogUmV0dXJuIFRSVUUgaWYgY3Vyd2luLT53X3dyb3cgYW5kIGN1cndpbi0+d193Y29sIGFyZSB2YWxpZC4KKyAqLworICAgIGludAorY3Vyc29yX3ZhbGlkKCkKK3sKKyAgICBjaGVja19jdXJzb3JfbW92ZWQoY3Vyd2luKTsKKyAgICByZXR1cm4gKChjdXJ3aW4tPndfdmFsaWQgJiAoVkFMSURfV1JPV3xWQUxJRF9XQ09MKSkgPT0KKwkJCQkJCSAgICAgIChWQUxJRF9XUk9XfFZBTElEX1dDT0wpKTsKK30KKworLyoKKyAqIFZhbGlkYXRlIGN1cnNvciBwb3NpdGlvbi4gIE1ha2VzIHN1cmUgd193cm93IGFuZCB3X3djb2wgYXJlIHZhbGlkLgorICogd190b3BsaW5lIG11c3QgYmUgdmFsaWQsIHlvdSBtYXkgbmVlZCB0byBjYWxsIHVwZGF0ZV90b3BsaW5lKCkgZmlyc3QhCisgKi8KKyAgICB2b2lkCit2YWxpZGF0ZV9jdXJzb3IoKQoreworICAgIGNoZWNrX2N1cnNvcl9tb3ZlZChjdXJ3aW4pOworICAgIGlmICgoY3Vyd2luLT53X3ZhbGlkICYgKFZBTElEX1dDT0x8VkFMSURfV1JPVykpICE9IChWQUxJRF9XQ09MfFZBTElEX1dST1cpKQorCWN1cnNfY29sdW1ucyhUUlVFKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9HVUkpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogdmFsaWRhdGUgd19jbGluZV9yb3cuCisgKi8KKyAgICB2b2lkCit2YWxpZGF0ZV9jbGluZV9yb3coKQoreworICAgIC8qCisgICAgICogRmlyc3QgbWFrZSBzdXJlIHRoYXQgd190b3BsaW5lIGlzIHZhbGlkIChhZnRlciBtb3ZpbmcgdGhlIGN1cnNvcikuCisgICAgICovCisgICAgdXBkYXRlX3RvcGxpbmUoKTsKKyAgICBjaGVja19jdXJzb3JfbW92ZWQoY3Vyd2luKTsKKyAgICBpZiAoIShjdXJ3aW4tPndfdmFsaWQgJiBWQUxJRF9DUk9XKSkKKwljdXJzX3Jvd3MoY3Vyd2luLCBGQUxTRSk7Cit9CisjZW5kaWYKKworLyoKKyAqIENvbXB1dGUgd3AtPndfY2xpbmVfcm93IGFuZCB3cC0+d19jbGluZV9oZWlnaHQsIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlCisgKiBvZiB3cC0+d190b3BpbmUuCisgKgorICogUmV0dXJucyBPSyB3aGVuIGN1cnNvciBpcyBpbiB0aGUgd2luZG93LCBGQUlMIHdoZW4gaXQgaXNuJ3QuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY3Vyc19yb3dzKHdwLCBkb19ib3RsaW5lKQorICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCWRvX2JvdGxpbmU7CQkvKiBhbHNvIGNvbXB1dGUgd19ib3RsaW5lICovCit7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBpbnQJCWk7CisgICAgaW50CQlhbGxfaW52YWxpZDsKKyAgICBpbnQJCXZhbGlkOworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGxvbmcJZm9sZF9jb3VudDsKKyNlbmRpZgorCisgICAgLyogQ2hlY2sgaWYgd3AtPndfbGluZXNbXS53bF9zaXplIGlzIGludmFsaWQgKi8KKyAgICBhbGxfaW52YWxpZCA9ICghcmVkcmF3aW5nKCkKKwkJCXx8IHdwLT53X2xpbmVzX3ZhbGlkID09IDAKKwkJCXx8IHdwLT53X2xpbmVzWzBdLndsX2xudW0gPiB3cC0+d190b3BsaW5lKTsKKyAgICBpID0gMDsKKyAgICB3cC0+d19jbGluZV9yb3cgPSAwOworICAgIGZvciAobG51bSA9IHdwLT53X3RvcGxpbmU7IGxudW0gPCB3cC0+d19jdXJzb3IubG51bTsgKytpKQorICAgIHsKKwl2YWxpZCA9IEZBTFNFOworCWlmICghYWxsX2ludmFsaWQgJiYgaSA8IHdwLT53X2xpbmVzX3ZhbGlkKQorCXsKKwkgICAgaWYgKHdwLT53X2xpbmVzW2ldLndsX2xudW0gPCBsbnVtIHx8ICF3cC0+d19saW5lc1tpXS53bF92YWxpZCkKKwkJY29udGludWU7CQkvKiBza2lwIGNoYW5nZWQgb3IgZGVsZXRlZCBsaW5lcyAqLworCSAgICBpZiAod3AtPndfbGluZXNbaV0ud2xfbG51bSA9PSBsbnVtKQorCSAgICB7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJCS8qIENoZWNrIGZvciBuZXdseSBpbnNlcnRlZCBsaW5lcyBiZWxvdyB0aGlzIHJvdywgaW4gd2hpY2gKKwkJICogY2FzZSB3ZSBuZWVkIHRvIGNoZWNrIGZvciBmb2xkZWQgbGluZXMuICovCisJCWlmICghd3AtPndfYnVmZmVyLT5iX21vZF9zZXQKKwkJCXx8IHdwLT53X2xpbmVzW2ldLndsX2xhc3RsbnVtIDwgd3AtPndfY3Vyc29yLmxudW0KKwkJCXx8IHdwLT53X2J1ZmZlci0+Yl9tb2RfdG9wCisJCQkJCSAgICAgPiB3cC0+d19saW5lc1tpXS53bF9sYXN0bG51bSArIDEpCisjZW5kaWYKKwkJdmFsaWQgPSBUUlVFOworCSAgICB9CisJICAgIGVsc2UgaWYgKHdwLT53X2xpbmVzW2ldLndsX2xudW0gPiBsbnVtKQorCQktLWk7CQkJLyogaG9sZCBhdCBpbnNlcnRlZCBsaW5lcyAqLworCX0KKwlpZiAodmFsaWQKKyNpZmRlZiBGRUFUX0RJRkYKKwkJJiYgKGxudW0gIT0gd3AtPndfdG9wbGluZSB8fCAhd3AtPndfcF9kaWZmKQorI2VuZGlmCisJCSkKKwl7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIGxudW0gPSB3cC0+d19saW5lc1tpXS53bF9sYXN0bG51bSArIDE7CisJICAgIC8qIEN1cnNvciBpbnNpZGUgZm9sZGVkIGxpbmVzLCBkb24ndCBjb3VudCB0aGlzIHJvdyAqLworCSAgICBpZiAobG51bSA+IHdwLT53X2N1cnNvci5sbnVtKQorCQlicmVhazsKKyNlbHNlCisJICAgICsrbG51bTsKKyNlbmRpZgorCSAgICB3cC0+d19jbGluZV9yb3cgKz0gd3AtPndfbGluZXNbaV0ud2xfc2l6ZTsKKwl9CisJZWxzZQorCXsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgZm9sZF9jb3VudCA9IGZvbGRlZENvdW50KHdwLCBsbnVtLCBOVUxMKTsKKwkgICAgaWYgKGZvbGRfY291bnQpCisJICAgIHsKKwkJbG51bSArPSBmb2xkX2NvdW50OworCQlpZiAobG51bSA+IHdwLT53X2N1cnNvci5sbnVtKQorCQkgICAgYnJlYWs7CisJCSsrd3AtPndfY2xpbmVfcm93OworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIEZFQVRfRElGRgorCQlpZiAobG51bSA9PSB3cC0+d190b3BsaW5lKQorCQkgICAgd3AtPndfY2xpbmVfcm93ICs9IHBsaW5lc193aW5fbm9maWxsKHdwLCBsbnVtKyssIFRSVUUpCisJCQkJCQkJICAgICAgKyB3cC0+d190b3BmaWxsOworCQllbHNlCisjZW5kaWYKKwkJICAgIHdwLT53X2NsaW5lX3JvdyArPSBwbGluZXNfd2luKHdwLCBsbnVtKyssIFRSVUUpOworCX0KKyAgICB9CisKKyAgICBjaGVja19jdXJzb3JfbW92ZWQod3ApOworICAgIGlmICghKHdwLT53X3ZhbGlkICYgVkFMSURfQ0hFSUdIVCkpCisgICAgeworCWlmIChhbGxfaW52YWxpZAorCQl8fCBpID09IHdwLT53X2xpbmVzX3ZhbGlkCisJCXx8IChpIDwgd3AtPndfbGluZXNfdmFsaWQKKwkJICAgICYmICghd3AtPndfbGluZXNbaV0ud2xfdmFsaWQKKwkJCXx8IHdwLT53X2xpbmVzW2ldLndsX2xudW0gIT0gd3AtPndfY3Vyc29yLmxudW0pKSkKKwl7CisjaWZkZWYgRkVBVF9ESUZGCisJICAgIGlmICh3cC0+d19jdXJzb3IubG51bSA9PSB3cC0+d190b3BsaW5lKQorCQl3cC0+d19jbGluZV9oZWlnaHQgPSBwbGluZXNfd2luX25vZmlsbCh3cCwgd3AtPndfY3Vyc29yLmxudW0sCisJCQkJCQkJVFJVRSkgKyB3cC0+d190b3BmaWxsOworCSAgICBlbHNlCisjZW5kaWYKKwkJd3AtPndfY2xpbmVfaGVpZ2h0ID0gcGxpbmVzX3dpbih3cCwgd3AtPndfY3Vyc29yLmxudW0sIFRSVUUpOworI2lmZGVmIEZFQVRfRk9MRElORworCSAgICB3cC0+d19jbGluZV9mb2xkZWQgPSBoYXNGb2xkaW5nV2luKHdwLCB3cC0+d19jdXJzb3IubG51bSwKKwkJCQkJCSAgICAgIE5VTEwsIE5VTEwsIFRSVUUsIE5VTEwpOworI2VuZGlmCisJfQorCWVsc2UgaWYgKGkgPiB3cC0+d19saW5lc192YWxpZCkKKwl7CisJICAgIC8qIGEgbGluZSB0aGF0IGlzIHRvbyBsb25nIHRvIGZpdCBvbiB0aGUgbGFzdCBzY3JlZW4gbGluZSAqLworCSAgICB3cC0+d19jbGluZV9oZWlnaHQgPSAwOworI2lmZGVmIEZFQVRfRk9MRElORworCSAgICB3cC0+d19jbGluZV9mb2xkZWQgPSBoYXNGb2xkaW5nV2luKHdwLCB3cC0+d19jdXJzb3IubG51bSwKKwkJCQkJCSAgICAgIE5VTEwsIE5VTEwsIFRSVUUsIE5VTEwpOworI2VuZGlmCisJfQorCWVsc2UKKwl7CisJICAgIHdwLT53X2NsaW5lX2hlaWdodCA9IHdwLT53X2xpbmVzW2ldLndsX3NpemU7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIHdwLT53X2NsaW5lX2ZvbGRlZCA9IHdwLT53X2xpbmVzW2ldLndsX2ZvbGRlZDsKKyNlbmRpZgorCX0KKyAgICB9CisKKyAgICB3cC0+d192YWxpZCB8PSBWQUxJRF9DUk9XfFZBTElEX0NIRUlHSFQ7CisKKyAgICAvKiB2YWxpZGF0ZSBib3RsaW5lIHRvbywgaWYgdXBkYXRlX3NjcmVlbiBkb2Vzbid0IGRvIGl0ICovCisgICAgaWYgKGRvX2JvdGxpbmUgJiYgYWxsX2ludmFsaWQpCisJdmFsaWRhdGVfYm90bGluZV93aW4od3ApOworfQorCisvKgorICogVmFsaWRhdGUgY3Vyd2luLT53X3ZpcnRjb2wgb25seS4KKyAqLworICAgIHZvaWQKK3ZhbGlkYXRlX3ZpcnRjb2woKQoreworICAgIHZhbGlkYXRlX3ZpcnRjb2xfd2luKGN1cndpbik7Cit9CisKKy8qCisgKiBWYWxpZGF0ZSB3cC0+d192aXJ0Y29sIG9ubHkuCisgKi8KKyAgICB2b2lkCit2YWxpZGF0ZV92aXJ0Y29sX3dpbih3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgY2hlY2tfY3Vyc29yX21vdmVkKHdwKTsKKyAgICBpZiAoISh3cC0+d192YWxpZCAmIFZBTElEX1ZJUlRDT0wpKQorICAgIHsKKwlnZXR2dmNvbCh3cCwgJndwLT53X2N1cnNvciwgTlVMTCwgJih3cC0+d192aXJ0Y29sKSwgTlVMTCk7CisJd3AtPndfdmFsaWQgfD0gVkFMSURfVklSVENPTDsKKyAgICB9Cit9CisKKy8qCisgKiBWYWxpZGF0ZSBjdXJ3aW4tPndfY2xpbmVfaGVpZ2h0IG9ubHkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordmFsaWRhdGVfY2hlaWdodCgpCit7CisgICAgY2hlY2tfY3Vyc29yX21vdmVkKGN1cndpbik7CisgICAgaWYgKCEoY3Vyd2luLT53X3ZhbGlkICYgVkFMSURfQ0hFSUdIVCkpCisgICAgeworI2lmZGVmIEZFQVRfRElGRgorCWlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gY3Vyd2luLT53X3RvcGxpbmUpCisJICAgIGN1cndpbi0+d19jbGluZV9oZWlnaHQgPSBwbGluZXNfbm9maWxsKGN1cndpbi0+d19jdXJzb3IubG51bSkKKwkJCQkJCQkgICsgY3Vyd2luLT53X3RvcGZpbGw7CisJZWxzZQorI2VuZGlmCisJICAgIGN1cndpbi0+d19jbGluZV9oZWlnaHQgPSBwbGluZXMoY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwljdXJ3aW4tPndfY2xpbmVfZm9sZGVkID0gaGFzRm9sZGluZyhjdXJ3aW4tPndfY3Vyc29yLmxudW0sIE5VTEwsIE5VTEwpOworI2VuZGlmCisJY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX0NIRUlHSFQ7CisgICAgfQorfQorCisvKgorICogdmFsaWRhdGUgd193Y29sIGFuZCB3X3ZpcnRjb2wgb25seS4JT25seSBjb3JyZWN0IHdoZW4gJ3dyYXAnIG9uIQorICovCisgICAgdm9pZAordmFsaWRhdGVfY3Vyc29yX2NvbCgpCit7CisgICAgY29sbnJfVCBvZmY7CisgICAgY29sbnJfVCBjb2w7CisKKyAgICB2YWxpZGF0ZV92aXJ0Y29sKCk7CisgICAgaWYgKCEoY3Vyd2luLT53X3ZhbGlkICYgVkFMSURfV0NPTCkpCisgICAgeworCWNvbCA9IGN1cndpbi0+d192aXJ0Y29sOworCW9mZiA9IGN1cndpbl9jb2xfb2ZmKCk7CisJY29sICs9IG9mZjsKKworCS8qIGxvbmcgbGluZSB3cmFwcGluZywgYWRqdXN0IGN1cndpbi0+d193cm93ICovCisJaWYgKGN1cndpbi0+d19wX3dyYXAgJiYgY29sID49IChjb2xucl9UKVdfV0lEVEgoY3Vyd2luKQorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJCSYmIGN1cndpbi0+d193aWR0aCAhPSAwCisjZW5kaWYKKwkJKQorCXsKKwkgICAgY29sIC09IFdfV0lEVEgoY3Vyd2luKTsKKwkgICAgY29sID0gY29sICUgKFdfV0lEVEgoY3Vyd2luKSAtIG9mZiArIGN1cndpbl9jb2xfb2ZmMigpKTsKKwl9CisJY3Vyd2luLT53X3djb2wgPSBjb2w7CisJY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX1dDT0w7CisgICAgfQorfQorCisvKgorICogQ29tcHV0ZSBvZmZzZXQgb2YgYSB3aW5kb3csIG9jY3VwaWVkIGJ5IGxpbmUgbnVtYmVyLCBmb2xkIGNvbHVtbiBhbmQgc2lnbgorICogY29sdW1uICh0aGVzZSBkb24ndCBtb3ZlIHdoZW4gc2Nyb2xsaW5nIGhvcml6b250YWxseSkuCisgKi8KKyAgICBpbnQKK3dpbl9jb2xfb2ZmKHdwKQorICAgIHdpbl9UCSp3cDsKK3sKKyAgICByZXR1cm4gKCh3cC0+d19wX251ID8gOCA6IDApCisjaWZkZWYgRkVBVF9DTURXSU4KKwkgICAgKyAoY21kd2luX3R5cGUgPT0gMCB8fCB3cCAhPSBjdXJ3aW4gPyAwIDogMSkKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworCSAgICArIHdwLT53X3BfZmRjCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NJR05TCisJICAgICsgKAorIyBpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKwkJLyogYWx3YXlzIHNob3cgZ2x5cGggZ3V0dGVyIGluIG5ldGJlYW5zICovCisJCXVzaW5nTmV0YmVhbnMgfHwKKyMgZW5kaWYKKwkJd3AtPndfYnVmZmVyLT5iX3NpZ25saXN0ICE9IE5VTEwgPyAyIDogMCkKKyNlbmRpZgorCSAgICk7Cit9CisKKyAgICBpbnQKK2N1cndpbl9jb2xfb2ZmKCkKK3sKKyAgICByZXR1cm4gd2luX2NvbF9vZmYoY3Vyd2luKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGlmZmVyZW5jZSBpbiBjb2x1bW4gb2Zmc2V0IGZvciB0aGUgc2Vjb25kIHNjcmVlbiBsaW5lIG9mIGEKKyAqIHdyYXBwZWQgbGluZS4gIEl0J3MgOCBpZiAnbnVtYmVyJyBpcyBvbiBhbmQgJ24nIGlzIGluICdjcG9wdGlvbnMnLgorICovCisgICAgaW50Cit3aW5fY29sX29mZjIod3ApCisgICAgd2luX1QJKndwOworeworICAgIGlmICh3cC0+d19wX251ICYmIHZpbV9zdHJjaHIocF9jcG8sIENQT19OVU1DT0wpICE9IE5VTEwpCisJcmV0dXJuIDg7CisgICAgcmV0dXJuIDA7Cit9CisKKyAgICBpbnQKK2N1cndpbl9jb2xfb2ZmMigpCit7CisgICAgcmV0dXJuIHdpbl9jb2xfb2ZmMihjdXJ3aW4pOworfQorCisvKgorICogY29tcHV0ZSBjdXJ3aW4tPndfd2NvbCBhbmQgY3Vyd2luLT53X3ZpcnRjb2wuCisgKiBBbHNvIHVwZGF0ZXMgY3Vyd2luLT53X3dyb3cgYW5kIGN1cndpbi0+d19jbGluZV9yb3cuCisgKiBBbHNvIHVwZGF0ZXMgY3Vyd2luLT53X2xlZnRjb2wuCisgKi8KKyAgICB2b2lkCitjdXJzX2NvbHVtbnMoc2Nyb2xsKQorICAgIGludAkJc2Nyb2xsOwkJLyogd2hlbiBUUlVFLCBtYXkgc2Nyb2xsIGhvcml6b250YWxseSAqLworeworICAgIGludAkJZGlmZjsKKyAgICBpbnQJCWV4dHJhOwkJLyogb2Zmc2V0IGZvciBmaXJzdCBzY3JlZW4gbGluZSAqLworICAgIGludAkJb2ZmX2xlZnQsIG9mZl9yaWdodDsKKyAgICBpbnQJCW47CisgICAgaW50CQlwX2xpbmVzOworICAgIGludAkJd2lkdGggPSAwOworICAgIGludAkJdGV4dHdpZHRoOworICAgIGludAkJbmV3X2xlZnRjb2w7CisgICAgY29sbnJfVAlzdGFydGNvbDsKKyAgICBjb2xucl9UCWVuZGNvbDsKKyAgICBjb2xucl9UCXByZXZfc2tpcGNvbDsKKworICAgIC8qCisgICAgICogRmlyc3QgbWFrZSBzdXJlIHRoYXQgd190b3BsaW5lIGlzIHZhbGlkIChhZnRlciBtb3ZpbmcgdGhlIGN1cnNvcikuCisgICAgICovCisgICAgdXBkYXRlX3RvcGxpbmUoKTsKKworICAgIC8qCisgICAgICogTmV4dCBtYWtlIHN1cmUgdGhhdCB3X2NsaW5lX3JvdyBpcyB2YWxpZC4KKyAgICAgKi8KKyAgICBpZiAoIShjdXJ3aW4tPndfdmFsaWQgJiBWQUxJRF9DUk9XKSkKKwljdXJzX3Jvd3MoY3Vyd2luLCBGQUxTRSk7CisKKyAgICAvKgorICAgICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB2aXJ0dWFsIGNvbHVtbnMuCisgICAgICovCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaWYgKGN1cndpbi0+d19jbGluZV9mb2xkZWQpCisJLyogSW4gYSBmb2xkZWQgbGluZSB0aGUgY3Vyc29yIGlzIGFsd2F5cyBpbiB0aGUgZmlyc3QgY29sdW1uICovCisJc3RhcnRjb2wgPSBjdXJ3aW4tPndfdmlydGNvbCA9IGVuZGNvbCA9IGN1cndpbi0+d19sZWZ0Y29sOworICAgIGVsc2UKKyNlbmRpZgorCWdldHZ2Y29sKGN1cndpbiwgJmN1cndpbi0+d19jdXJzb3IsCisJCQkJJnN0YXJ0Y29sLCAmKGN1cndpbi0+d192aXJ0Y29sKSwgJmVuZGNvbCk7CisKKyAgICAvKiByZW1vdmUgJyQnIGZyb20gY2hhbmdlIGNvbW1hbmQgd2hlbiBjdXJzb3IgbW92ZXMgb250byBpdCAqLworICAgIGlmIChzdGFydGNvbCA+IGRvbGxhcl92Y29sKQorCWRvbGxhcl92Y29sID0gMDsKKworICAgIGV4dHJhID0gY3Vyd2luX2NvbF9vZmYoKTsKKyAgICBjdXJ3aW4tPndfd2NvbCA9IGN1cndpbi0+d192aXJ0Y29sICsgZXh0cmE7CisgICAgZW5kY29sICs9IGV4dHJhOworCisgICAgLyoKKyAgICAgKiBOb3cgY29tcHV0ZSB3X3dyb3csIGNvdW50aW5nIHNjcmVlbiBsaW5lcyBmcm9tIHdfY2xpbmVfcm93LgorICAgICAqLworICAgIGN1cndpbi0+d193cm93ID0gY3Vyd2luLT53X2NsaW5lX3JvdzsKKworICAgIHRleHR3aWR0aCA9IFdfV0lEVEgoY3Vyd2luKSAtIGV4dHJhOworICAgIGlmICh0ZXh0d2lkdGggPD0gMCkKKyAgICB7CisJLyogTm8gcm9vbSBmb3IgdGV4dCwgcHV0IGN1cnNvciBpbiBsYXN0IGNoYXIgb2Ygd2luZG93LiAqLworCWN1cndpbi0+d193Y29sID0gV19XSURUSChjdXJ3aW4pIC0gMTsKKwljdXJ3aW4tPndfd3JvdyA9IGN1cndpbi0+d19oZWlnaHQgLSAxOworICAgIH0KKyAgICBlbHNlIGlmIChjdXJ3aW4tPndfcF93cmFwCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkgICAgJiYgY3Vyd2luLT53X3dpZHRoICE9IDAKKyNlbmRpZgorCSAgICApCisgICAgeworCXdpZHRoID0gdGV4dHdpZHRoICsgY3Vyd2luX2NvbF9vZmYyKCk7CisKKwkvKiBsb25nIGxpbmUgd3JhcHBpbmcsIGFkanVzdCBjdXJ3aW4tPndfd3JvdyAqLworCWlmIChjdXJ3aW4tPndfd2NvbCA+PSBXX1dJRFRIKGN1cndpbikpCisJeworCSAgICBuID0gKGN1cndpbi0+d193Y29sIC0gV19XSURUSChjdXJ3aW4pKSAvIHdpZHRoICsgMTsKKwkgICAgY3Vyd2luLT53X3djb2wgLT0gbiAqIHdpZHRoOworCSAgICBjdXJ3aW4tPndfd3JvdyArPSBuOworCisjaWZkZWYgRkVBVF9MSU5FQlJFQUsKKwkgICAgLyogV2hlbiBjdXJzb3Igd3JhcHMgdG8gZmlyc3QgY2hhciBvZiBuZXh0IGxpbmUgaW4gSW5zZXJ0CisJICAgICAqIG1vZGUsIHRoZSAnc2hvd2JyZWFrJyBzdHJpbmcgaXNuJ3Qgc2hvd24sIGJhY2t1cCB0byBmaXJzdAorCSAgICAgKiBjb2x1bW4gKi8KKwkgICAgaWYgKCpwX3NiciAmJiAqbWxfZ2V0X2N1cnNvcigpID09IE5VTAorCQkgICAgJiYgY3Vyd2luLT53X3djb2wgPT0gKGludCl2aW1fc3Ryc2l6ZShwX3NicikpCisJCWN1cndpbi0+d193Y29sID0gMDsKKyNlbmRpZgorCX0KKyAgICB9CisKKyAgICAvKiBObyBsaW5lIHdyYXBwaW5nOiBjb21wdXRlIGN1cndpbi0+d19sZWZ0Y29sIGlmIHNjcm9sbGluZyBpcyBvbiBhbmQgbGluZQorICAgICAqIGlzIG5vdCBmb2xkZWQuCisgICAgICogSWYgc2Nyb2xsaW5nIGlzIG9mZiwgY3Vyd2luLT53X2xlZnRjb2wgaXMgYXNzdW1lZCB0byBiZSAwICovCisgICAgZWxzZSBpZiAoc2Nyb2xsCisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgICYmICFjdXJ3aW4tPndfY2xpbmVfZm9sZGVkCisjZW5kaWYKKwkgICAgKQorICAgIHsKKwkvKgorCSAqIElmIEN1cnNvciBpcyBsZWZ0IG9mIHRoZSBzY3JlZW4sIHNjcm9sbCByaWdodHdhcmRzLgorCSAqIElmIEN1cnNvciBpcyByaWdodCBvZiB0aGUgc2NyZWVuLCBzY3JvbGwgbGVmdHdhcmRzCisJICogSWYgd2UgZ2V0IGNsb3NlciB0byB0aGUgZWRnZSB0aGFuICdzaWRlc2Nyb2xsb2ZmJywgc2Nyb2xsIGEgbGl0dGxlCisJICogZXh0cmEKKwkgKi8KKwlvZmZfbGVmdCA9IChpbnQpc3RhcnRjb2wgLSAoaW50KWN1cndpbi0+d19sZWZ0Y29sIC0gcF9zaXNvOworCW9mZl9yaWdodCA9IChpbnQpZW5kY29sIC0gKGludCkoY3Vyd2luLT53X2xlZnRjb2wgKyBXX1dJRFRIKGN1cndpbikKKwkJCQkJCQkJLSBwX3Npc28pICsgMTsKKwlpZiAob2ZmX2xlZnQgPCAwIHx8IG9mZl9yaWdodCA+IDApCisJeworCSAgICBpZiAob2ZmX2xlZnQgPCAwKQorCQlkaWZmID0gLW9mZl9sZWZ0OworCSAgICBlbHNlCisJCWRpZmYgPSBvZmZfcmlnaHQ7CisKKwkgICAgLyogV2hlbiBmYXIgb2ZmIG9yIG5vdCBlbm91Z2ggcm9vbSBvbiBlaXRoZXIgc2lkZSwgcHV0IGN1cnNvciBpbgorCSAgICAgKiBtaWRkbGUgb2Ygd2luZG93LiAqLworCSAgICBpZiAocF9zcyA9PSAwIHx8IGRpZmYgPj0gdGV4dHdpZHRoIC8gMiB8fCBvZmZfcmlnaHQgPj0gb2ZmX2xlZnQpCisJCW5ld19sZWZ0Y29sID0gY3Vyd2luLT53X3djb2wgLSBleHRyYSAtIHRleHR3aWR0aCAvIDI7CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoZGlmZiA8IHBfc3MpCisJCSAgICBkaWZmID0gcF9zczsKKwkJaWYgKG9mZl9sZWZ0IDwgMCkKKwkJICAgIG5ld19sZWZ0Y29sID0gY3Vyd2luLT53X2xlZnRjb2wgLSBkaWZmOworCQllbHNlCisJCSAgICBuZXdfbGVmdGNvbCA9IGN1cndpbi0+d19sZWZ0Y29sICsgZGlmZjsKKwkgICAgfQorCSAgICBpZiAobmV3X2xlZnRjb2wgPCAwKQorCQluZXdfbGVmdGNvbCA9IDA7CisJICAgIGlmIChuZXdfbGVmdGNvbCAhPSAoaW50KWN1cndpbi0+d19sZWZ0Y29sKQorCSAgICB7CisJCWN1cndpbi0+d19sZWZ0Y29sID0gbmV3X2xlZnRjb2w7CisJCS8qIHNjcmVlbiBoYXMgdG8gYmUgcmVkcmF3biB3aXRoIG5ldyBjdXJ3aW4tPndfbGVmdGNvbCAqLworCQlyZWRyYXdfbGF0ZXIoTk9UX1ZBTElEKTsKKwkgICAgfQorCX0KKwljdXJ3aW4tPndfd2NvbCAtPSBjdXJ3aW4tPndfbGVmdGNvbDsKKyAgICB9CisgICAgZWxzZSBpZiAoY3Vyd2luLT53X3djb2wgPiAoaW50KWN1cndpbi0+d19sZWZ0Y29sKQorCWN1cndpbi0+d193Y29sIC09IGN1cndpbi0+d19sZWZ0Y29sOworICAgIGVsc2UKKwljdXJ3aW4tPndfd2NvbCA9IDA7CisKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICAvKiBTa2lwIG92ZXIgZmlsbGVyIGxpbmVzLiAgQXQgdGhlIHRvcCB1c2Ugd190b3BmaWxsLCB0aGVyZQorICAgICAqIG1heSBiZSBzb21lIGZpbGxlciBsaW5lcyBhYm92ZSB0aGUgd2luZG93LiAqLworICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gY3Vyd2luLT53X3RvcGxpbmUpCisJY3Vyd2luLT53X3dyb3cgKz0gY3Vyd2luLT53X3RvcGZpbGw7CisgICAgZWxzZQorCWN1cndpbi0+d193cm93ICs9IGRpZmZfY2hlY2tfZmlsbChjdXJ3aW4sIGN1cndpbi0+d19jdXJzb3IubG51bSk7CisjZW5kaWYKKworICAgIHByZXZfc2tpcGNvbCA9IGN1cndpbi0+d19za2lwY29sOworCisgICAgcF9saW5lcyA9IDA7CisgICAgaWYgKChjdXJ3aW4tPndfd3JvdyA+PSBjdXJ3aW4tPndfaGVpZ2h0CisJCXx8ICgocHJldl9za2lwY29sID4gMAorCQkJfHwgY3Vyd2luLT53X3dyb3cgKyBwX3NvID49IGN1cndpbi0+d19oZWlnaHQpCisJCSAgICAmJiAocF9saW5lcyA9CisjaWZkZWYgRkVBVF9ESUZGCisJCQlwbGluZXNfd2luX25vZmlsbAorI2Vsc2UKKwkJCXBsaW5lc193aW4KKyNlbmRpZgorCQkJKGN1cndpbiwgY3Vyd2luLT53X2N1cnNvci5sbnVtLCBGQUxTRSkpCisJCQkJCQkgICAgLSAxID49IGN1cndpbi0+d19oZWlnaHQpKQorCSAgICAmJiBjdXJ3aW4tPndfaGVpZ2h0ICE9IDAKKwkgICAgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtID09IGN1cndpbi0+d190b3BsaW5lCisJICAgICYmIHdpZHRoID4gMAorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJICAgICYmIGN1cndpbi0+d193aWR0aCAhPSAwCisjZW5kaWYKKwkgICAgKQorICAgIHsKKwkvKiBDdXJzb3IgcGFzdCBlbmQgb2Ygc2NyZWVuLiAgSGFwcGVucyB3aXRoIGEgc2luZ2xlIGxpbmUgdGhhdCBkb2VzCisJICogbm90IGZpdCBvbiBzY3JlZW4uICBGaW5kIGEgc2tpcGNvbCB0byBzaG93IHRoZSB0ZXh0IGFyb3VuZCB0aGUKKwkgKiBjdXJzb3IuICBBdm9pZCBzY3JvbGxpbmcgYWxsIHRoZSB0aW1lLiBjb21wdXRlIHZhbHVlIG9mICJleHRyYSI6CisJICogMTogTGVzcyB0aGFuICJwX3NvIiBsaW5lcyBhYm92ZQorCSAqIDI6IExlc3MgdGhhbiAicF9zbyIgbGluZXMgYmVsb3cKKwkgKiAzOiBib3RoIG9mIHRoZW0gKi8KKwlleHRyYSA9IDA7CisJaWYgKGN1cndpbi0+d19za2lwY29sICsgcF9zbyAqIHdpZHRoID4gY3Vyd2luLT53X3ZpcnRjb2wpCisJICAgIGV4dHJhID0gMTsKKwkvKiBDb21wdXRlIGxhc3QgZGlzcGxheSBsaW5lIG9mIHRoZSBidWZmZXIgbGluZSB0aGF0IHdlIHdhbnQgYXQgdGhlCisJICogYm90dG9tIG9mIHRoZSB3aW5kb3cuICovCisJaWYgKHBfbGluZXMgPT0gMCkKKwkgICAgcF9saW5lcyA9IHBsaW5lc193aW4oY3Vyd2luLCBjdXJ3aW4tPndfY3Vyc29yLmxudW0sIEZBTFNFKTsKKwktLXBfbGluZXM7CisJaWYgKHBfbGluZXMgPiBjdXJ3aW4tPndfd3JvdyArIHBfc28pCisJICAgIG4gPSBjdXJ3aW4tPndfd3JvdyArIHBfc287CisJZWxzZQorCSAgICBuID0gcF9saW5lczsKKwlpZiAoKGNvbG5yX1QpbiA+PSBjdXJ3aW4tPndfaGVpZ2h0ICsgY3Vyd2luLT53X3NraXBjb2wgLyB3aWR0aCkKKwkgICAgZXh0cmEgKz0gMjsKKworCWlmIChleHRyYSA9PSAzIHx8IHBfbGluZXMgPCBwX3NvICogMikKKwl7CisJICAgIC8qIG5vdCBlbm91Z2ggcm9vbSBmb3IgJ3Njcm9sbG9mZicsIHB1dCBjdXJzb3IgaW4gdGhlIG1pZGRsZSAqLworCSAgICBuID0gY3Vyd2luLT53X3ZpcnRjb2wgLyB3aWR0aDsKKwkgICAgaWYgKG4gPiBjdXJ3aW4tPndfaGVpZ2h0IC8gMikKKwkJbiAtPSBjdXJ3aW4tPndfaGVpZ2h0IC8gMjsKKwkgICAgZWxzZQorCQluID0gMDsKKwkgICAgLyogZG9uJ3Qgc2tpcCBtb3JlIHRoYW4gbmVjZXNzYXJ5ICovCisJICAgIGlmIChuID4gcF9saW5lcyAtIGN1cndpbi0+d19oZWlnaHQgKyAxKQorCQluID0gcF9saW5lcyAtIGN1cndpbi0+d19oZWlnaHQgKyAxOworCSAgICBjdXJ3aW4tPndfc2tpcGNvbCA9IG4gKiB3aWR0aDsKKwl9CisJZWxzZSBpZiAoZXh0cmEgPT0gMSkKKwl7CisJICAgIC8qIGxlc3MgdGhlbiAnc2Nyb2xsb2ZmJyBsaW5lcyBhYm92ZSwgZGVjcmVhc2Ugc2tpcGNvbCAqLworCSAgICBleHRyYSA9IChjdXJ3aW4tPndfc2tpcGNvbCArIHBfc28gKiB3aWR0aCAtIGN1cndpbi0+d192aXJ0Y29sCisJCQkJICAgICArIHdpZHRoIC0gMSkgLyB3aWR0aDsKKwkgICAgaWYgKGV4dHJhID4gMCkKKwkgICAgeworCQlpZiAoKGNvbG5yX1QpKGV4dHJhICogd2lkdGgpID4gY3Vyd2luLT53X3NraXBjb2wpCisJCSAgICBleHRyYSA9IGN1cndpbi0+d19za2lwY29sIC8gd2lkdGg7CisJCWN1cndpbi0+d19za2lwY29sIC09IGV4dHJhICogd2lkdGg7CisJICAgIH0KKwl9CisJZWxzZSBpZiAoZXh0cmEgPT0gMikKKwl7CisJICAgIC8qIGxlc3MgdGhlbiAnc2Nyb2xsb2ZmJyBsaW5lcyBiZWxvdywgaW5jcmVhc2Ugc2tpcGNvbCAqLworCSAgICBlbmRjb2wgPSAobiAtIGN1cndpbi0+d19oZWlnaHQgKyAxKSAqIHdpZHRoOworCSAgICB3aGlsZSAoZW5kY29sID4gY3Vyd2luLT53X3ZpcnRjb2wpCisJCWVuZGNvbCAtPSB3aWR0aDsKKwkgICAgaWYgKGVuZGNvbCA+IGN1cndpbi0+d19za2lwY29sKQorCQljdXJ3aW4tPndfc2tpcGNvbCA9IGVuZGNvbDsKKwl9CisKKwljdXJ3aW4tPndfd3JvdyAtPSBjdXJ3aW4tPndfc2tpcGNvbCAvIHdpZHRoOworCWlmIChjdXJ3aW4tPndfd3JvdyA+PSBjdXJ3aW4tPndfaGVpZ2h0KQorCXsKKwkgICAgLyogc21hbGwgd2luZG93LCBtYWtlIHN1cmUgY3Vyc29yIGlzIGluIGl0ICovCisJICAgIGV4dHJhID0gY3Vyd2luLT53X3dyb3cgLSBjdXJ3aW4tPndfaGVpZ2h0ICsgMTsKKwkgICAgY3Vyd2luLT53X3NraXBjb2wgKz0gZXh0cmEgKiB3aWR0aDsKKwkgICAgY3Vyd2luLT53X3dyb3cgLT0gZXh0cmE7CisJfQorCisJZXh0cmEgPSAoKGludClwcmV2X3NraXBjb2wgLSAoaW50KWN1cndpbi0+d19za2lwY29sKSAvIHdpZHRoOworCWlmIChleHRyYSA+IDApCisJICAgIHdpbl9pbnNfbGluZXMoY3Vyd2luLCAwLCBleHRyYSwgRkFMU0UsIEZBTFNFKTsKKwllbHNlIGlmIChleHRyYSA8IDApCisJICAgIHdpbl9kZWxfbGluZXMoY3Vyd2luLCAwLCAtZXh0cmEsIEZBTFNFLCBGQUxTRSk7CisgICAgfQorICAgIGVsc2UKKwljdXJ3aW4tPndfc2tpcGNvbCA9IDA7CisgICAgaWYgKHByZXZfc2tpcGNvbCAhPSBjdXJ3aW4tPndfc2tpcGNvbCkKKwlyZWRyYXdfbGF0ZXIoTk9UX1ZBTElEKTsKKworICAgIGN1cndpbi0+d192YWxpZCB8PSBWQUxJRF9XQ09MfFZBTElEX1dST1d8VkFMSURfVklSVENPTDsKK30KKworLyoKKyAqIFNjcm9sbCB0aGUgY3VycmVudCB3aW5kb3cgZG93biBieSAibGluZV9jb3VudCIgbG9naWNhbCBsaW5lcy4gICJDVFJMLVkiCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK3Njcm9sbGRvd24obGluZV9jb3VudCwgYnlmb2xkKQorICAgIGxvbmcJbGluZV9jb3VudDsKKyAgICBpbnQJCWJ5Zm9sZDsJCS8qIFRSVUU6IGNvdW50IGEgY2xvc2VkIGZvbGQgYXMgb25lIGxpbmUgKi8KK3sKKyAgICBsb25nCWRvbmUgPSAwOwkvKiB0b3RhbCAjIG9mIHBoeXNpY2FsIGxpbmVzIGRvbmUgKi8KKyAgICBpbnQJCXdyb3c7CisgICAgaW50CQltb3ZlZCA9IEZBTFNFOworCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgbGluZW5yX1QJZmlyc3Q7CisKKyAgICAvKiBNYWtlIHN1cmUgd190b3BsaW5lIGlzIGF0IHRoZSBmaXJzdCBvZiBhIHNlcXVlbmNlIG9mIGZvbGRlZCBsaW5lcy4gKi8KKyAgICAodm9pZCloYXNGb2xkaW5nKGN1cndpbi0+d190b3BsaW5lLCAmY3Vyd2luLT53X3RvcGxpbmUsIE5VTEwpOworI2VuZGlmCisgICAgdmFsaWRhdGVfY3Vyc29yKCk7CQkvKiB3X3dyb3cgbmVlZHMgdG8gYmUgdmFsaWQgKi8KKyAgICB3aGlsZSAobGluZV9jb3VudC0tID4gMCkKKyAgICB7CisjaWZkZWYgRkVBVF9ESUZGCisJaWYgKGN1cndpbi0+d190b3BmaWxsIDwgZGlmZl9jaGVjayhjdXJ3aW4sIGN1cndpbi0+d190b3BsaW5lKSkKKwl7CisJICAgICsrY3Vyd2luLT53X3RvcGZpbGw7CisJICAgICsrZG9uZTsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBpZiAoY3Vyd2luLT53X3RvcGxpbmUgPT0gMSkKKwkJYnJlYWs7CisJICAgIC0tY3Vyd2luLT53X3RvcGxpbmU7CisjaWZkZWYgRkVBVF9ESUZGCisJICAgIGN1cndpbi0+d190b3BmaWxsID0gMDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworCSAgICAvKiBBIHNlcXVlbmNlIG9mIGZvbGRlZCBsaW5lcyBvbmx5IGNvdW50cyBmb3Igb25lIGxvZ2ljYWwgbGluZSAqLworCSAgICBpZiAoaGFzRm9sZGluZyhjdXJ3aW4tPndfdG9wbGluZSwgJmZpcnN0LCBOVUxMKSkKKwkgICAgeworCQkrK2RvbmU7CisJCWlmICghYnlmb2xkKQorCQkgICAgbGluZV9jb3VudCAtPSBjdXJ3aW4tPndfdG9wbGluZSAtIGZpcnN0IC0gMTsKKwkJY3Vyd2luLT53X2JvdGxpbmUgLT0gY3Vyd2luLT53X3RvcGxpbmUgLSBmaXJzdDsKKwkJY3Vyd2luLT53X3RvcGxpbmUgPSBmaXJzdDsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBGRUFUX0RJRkYKKwkJZG9uZSArPSBwbGluZXNfbm9maWxsKGN1cndpbi0+d190b3BsaW5lKTsKKyNlbHNlCisJCWRvbmUgKz0gcGxpbmVzKGN1cndpbi0+d190b3BsaW5lKTsKKyNlbmRpZgorCX0KKwktLWN1cndpbi0+d19ib3RsaW5lOwkJLyogYXBwcm94aW1hdGUgd19ib3RsaW5lICovCisJaW52YWxpZGF0ZV9ib3RsaW5lKCk7CisgICAgfQorICAgIGN1cndpbi0+d193cm93ICs9IGRvbmU7CQkvKiBrZWVwIHdfd3JvdyB1cGRhdGVkICovCisgICAgY3Vyd2luLT53X2NsaW5lX3JvdyArPSBkb25lOwkvKiBrZWVwIHdfY2xpbmVfcm93IHVwZGF0ZWQgKi8KKworI2lmZGVmIEZFQVRfRElGRgorICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gY3Vyd2luLT53X3RvcGxpbmUpCisJY3Vyd2luLT53X2NsaW5lX3JvdyA9IDA7CisgICAgY2hlY2tfdG9wZmlsbChjdXJ3aW4sIFRSVUUpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIENvbXB1dGUgdGhlIHJvdyBudW1iZXIgb2YgdGhlIGxhc3Qgcm93IG9mIHRoZSBjdXJzb3IgbGluZQorICAgICAqIGFuZCBtb3ZlIHRoZSBjdXJzb3Igb250byB0aGUgZGlzcGxheWVkIHBhcnQgb2YgdGhlIHdpbmRvdy4KKyAgICAgKi8KKyAgICB3cm93ID0gY3Vyd2luLT53X3dyb3c7CisgICAgaWYgKGN1cndpbi0+d19wX3dyYXAKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQkmJiBjdXJ3aW4tPndfd2lkdGggIT0gMAorI2VuZGlmCisJICAgICkKKyAgICB7CisJdmFsaWRhdGVfdmlydGNvbCgpOworCXZhbGlkYXRlX2NoZWlnaHQoKTsKKwl3cm93ICs9IGN1cndpbi0+d19jbGluZV9oZWlnaHQgLSAxIC0KKwkgICAgY3Vyd2luLT53X3ZpcnRjb2wgLyBXX1dJRFRIKGN1cndpbik7CisgICAgfQorICAgIHdoaWxlICh3cm93ID49IGN1cndpbi0+d19oZWlnaHQgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtID4gMSkKKyAgICB7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJaWYgKGhhc0ZvbGRpbmcoY3Vyd2luLT53X2N1cnNvci5sbnVtLCAmZmlyc3QsIE5VTEwpKQorCXsKKwkgICAgLS13cm93OworCSAgICBpZiAoZmlyc3QgPT0gMSkKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gMTsKKwkgICAgZWxzZQorCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBmaXJzdCAtIDE7CisJfQorCWVsc2UKKyNlbmRpZgorCSAgICB3cm93IC09IHBsaW5lcyhjdXJ3aW4tPndfY3Vyc29yLmxudW0tLSk7CisJY3Vyd2luLT53X3ZhbGlkICY9CisJICAgICAgfihWQUxJRF9XUk9XfFZBTElEX1dDT0x8VkFMSURfQ0hFSUdIVHxWQUxJRF9DUk9XfFZBTElEX1ZJUlRDT0wpOworCW1vdmVkID0gVFJVRTsKKyAgICB9CisgICAgaWYgKG1vdmVkKQorICAgIHsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkvKiBNb3ZlIGN1cnNvciB0byBmaXJzdCBsaW5lIG9mIGNsb3NlZCBmb2xkLiAqLworCWZvbGRBZGp1c3RDdXJzb3IoKTsKKyNlbmRpZgorCWNvbGFkdmFuY2UoY3Vyd2luLT53X2N1cnN3YW50KTsKKyAgICB9Cit9CisKKy8qCisgKiBTY3JvbGwgdGhlIGN1cnJlbnQgd2luZG93IHVwIGJ5ICJsaW5lX2NvdW50IiBsb2dpY2FsIGxpbmVzLiAgIkNUUkwtRSIKKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorc2Nyb2xsdXAobGluZV9jb3VudCwgYnlmb2xkKQorICAgIGxvbmcJbGluZV9jb3VudDsKKyAgICBpbnQJCWJ5Zm9sZDsJCS8qIFRSVUU6IGNvdW50IGEgY2xvc2VkIGZvbGQgYXMgb25lIGxpbmUgKi8KK3sKKyNpZiBkZWZpbmVkKEZFQVRfRk9MRElORykgfHwgZGVmaW5lZChGRUFUX0RJRkYpCisgICAgbGluZW5yX1QJbG51bTsKKworICAgIGlmICgKKyMgaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIChieWZvbGQgJiYgaGFzQW55Rm9sZGluZyhjdXJ3aW4pKQorIyAgaWZkZWYgRkVBVF9ESUZGCisJICAgIHx8CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBGRUFUX0RJRkYKKwkgICAgY3Vyd2luLT53X3BfZGlmZgorIyBlbmRpZgorCSAgICApCisgICAgeworCS8qIGNvdW50IGVhY2ggc2VxdWVuY2Ugb2YgZm9sZGVkIGxpbmVzIGFzIG9uZSBsb2dpY2FsIGxpbmUgKi8KKwlsbnVtID0gY3Vyd2luLT53X3RvcGxpbmU7CisJd2hpbGUgKGxpbmVfY291bnQtLSkKKwl7CisjIGlmZGVmIEZFQVRfRElGRgorCSAgICBpZiAoY3Vyd2luLT53X3RvcGZpbGwgPiAwKQorCQktLWN1cndpbi0+d190b3BmaWxsOworCSAgICBlbHNlCisjIGVuZGlmCisJICAgIHsKKyMgaWZkZWYgRkVBVF9GT0xESU5HCisJCWlmIChieWZvbGQpCisJCSAgICAodm9pZCloYXNGb2xkaW5nKGxudW0sIE5VTEwsICZsbnVtKTsKKyMgZW5kaWYKKwkJaWYgKGxudW0gPj0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCSAgICBicmVhazsKKwkJKytsbnVtOworIyBpZmRlZiBGRUFUX0RJRkYKKwkJY3Vyd2luLT53X3RvcGZpbGwgPSBkaWZmX2NoZWNrX2ZpbGwoY3Vyd2luLCBsbnVtKTsKKyMgZW5kaWYKKwkgICAgfQorCX0KKwkvKiBhcHByb3hpbWF0ZSB3X2JvdGxpbmUgKi8KKwljdXJ3aW4tPndfYm90bGluZSArPSBsbnVtIC0gY3Vyd2luLT53X3RvcGxpbmU7CisJY3Vyd2luLT53X3RvcGxpbmUgPSBsbnVtOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJY3Vyd2luLT53X3RvcGxpbmUgKz0gbGluZV9jb3VudDsKKwljdXJ3aW4tPndfYm90bGluZSArPSBsaW5lX2NvdW50OwkvKiBhcHByb3hpbWF0ZSB3X2JvdGxpbmUgKi8KKyAgICB9CisKKyAgICBpZiAoY3Vyd2luLT53X3RvcGxpbmUgPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwljdXJ3aW4tPndfdG9wbGluZSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworICAgIGlmIChjdXJ3aW4tPndfYm90bGluZSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ICsgMSkKKwljdXJ3aW4tPndfYm90bGluZSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ICsgMTsKKworI2lmZGVmIEZFQVRfRElGRgorICAgIGNoZWNrX3RvcGZpbGwoY3Vyd2luLCBGQUxTRSk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGlmIChoYXNBbnlGb2xkaW5nKGN1cndpbikpCisJLyogTWFrZSBzdXJlIHdfdG9wbGluZSBpcyBhdCB0aGUgZmlyc3Qgb2YgYSBzZXF1ZW5jZSBvZiBmb2xkZWQgbGluZXMuICovCisJKHZvaWQpaGFzRm9sZGluZyhjdXJ3aW4tPndfdG9wbGluZSwgJmN1cndpbi0+d190b3BsaW5lLCBOVUxMKTsKKyNlbmRpZgorCisgICAgY3Vyd2luLT53X3ZhbGlkICY9IH4oVkFMSURfV1JPV3xWQUxJRF9DUk9XfFZBTElEX0JPVExJTkUpOworICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPCBjdXJ3aW4tPndfdG9wbGluZSkKKyAgICB7CisJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gY3Vyd2luLT53X3RvcGxpbmU7CisJY3Vyd2luLT53X3ZhbGlkICY9CisJICAgICAgfihWQUxJRF9XUk9XfFZBTElEX1dDT0x8VkFMSURfQ0hFSUdIVHxWQUxJRF9DUk9XfFZBTElEX1ZJUlRDT0wpOworCWNvbGFkdmFuY2UoY3Vyd2luLT53X2N1cnN3YW50KTsKKyAgICB9Cit9CisKKyNpZmRlZiBGRUFUX0RJRkYKKy8qCisgKiBEb24ndCBlbmQgdXAgd2l0aCB0b28gbWFueSBmaWxsZXIgbGluZXMgaW4gdGhlIHdpbmRvdy4KKyAqLworICAgIHZvaWQKK2NoZWNrX3RvcGZpbGwod3AsIGRvd24pCisgICAgd2luX1QJKndwOworICAgIGludAkJZG93bjsJLyogd2hlbiBUUlVFIHNjcm9sbCBkb3duIHdoZW4gbm90IGVub3VnaCBzcGFjZSAqLworeworICAgIGludAkJbjsKKworICAgIGlmICh3cC0+d190b3BmaWxsID4gMCkKKyAgICB7CisJbiA9IHBsaW5lc193aW5fbm9maWxsKHdwLCB3cC0+d190b3BsaW5lLCBUUlVFKTsKKwlpZiAod3AtPndfdG9wZmlsbCArIG4gPiB3cC0+d19oZWlnaHQpCisJeworCSAgICBpZiAoZG93biAmJiB3cC0+d190b3BsaW5lID4gMSkKKwkgICAgeworCQktLXdwLT53X3RvcGxpbmU7CisJCXdwLT53X3RvcGZpbGwgPSAwOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQl3cC0+d190b3BmaWxsID0gd3AtPndfaGVpZ2h0IC0gbjsKKwkJaWYgKHdwLT53X3RvcGZpbGwgPCAwKQorCQkgICAgd3AtPndfdG9wZmlsbCA9IDA7CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKgorICogVXNlIGFzIG1hbnkgZmlsbGVyIGxpbmVzIGFzIHBvc3NpYmxlIGZvciB3X3RvcGxpbmUuICBNYWtlIHN1cmUgd190b3BsaW5lCisgKiBpcyBzdGlsbCB2aXNpYmxlLgorICovCisgICAgc3RhdGljIHZvaWQKK21heF90b3BmaWxsKCkKK3sKKyAgICBpbnQJCW47CisKKyAgICBuID0gcGxpbmVzX25vZmlsbChjdXJ3aW4tPndfdG9wbGluZSk7CisgICAgaWYgKG4gPj0gY3Vyd2luLT53X2hlaWdodCkKKwljdXJ3aW4tPndfdG9wZmlsbCA9IDA7CisgICAgZWxzZQorICAgIHsKKwljdXJ3aW4tPndfdG9wZmlsbCA9IGRpZmZfY2hlY2tfZmlsbChjdXJ3aW4sIGN1cndpbi0+d190b3BsaW5lKTsKKwlpZiAoY3Vyd2luLT53X3RvcGZpbGwgKyBuID4gY3Vyd2luLT53X2hlaWdodCkKKwkgICAgY3Vyd2luLT53X3RvcGZpbGwgPSBjdXJ3aW4tPndfaGVpZ2h0IC0gbjsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9JTlNfRVhQQU5EKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFNjcm9sbCB0aGUgc2NyZWVuIG9uZSBsaW5lIGRvd24sIGJ1dCBkb24ndCBkbyBpdCBpZiBpdCB3b3VsZCBtb3ZlIHRoZQorICogY3Vyc29yIG9mZiB0aGUgc2NyZWVuLgorICovCisgICAgdm9pZAorc2Nyb2xsZG93bl9jbGFtcCgpCit7CisgICAgaW50CQllbmRfcm93OworI2lmZGVmIEZFQVRfRElGRgorICAgIGludAkJY2FuX2ZpbGwgPSAoY3Vyd2luLT53X3RvcGZpbGwKKwkJCQk8IGRpZmZfY2hlY2tfZmlsbChjdXJ3aW4sIGN1cndpbi0+d190b3BsaW5lKSk7CisjZW5kaWYKKworICAgIGlmIChjdXJ3aW4tPndfdG9wbGluZSA8PSAxCisjaWZkZWYgRkVBVF9ESUZGCisJICAgICYmICFjYW5fZmlsbAorI2VuZGlmCisJICAgICkKKwlyZXR1cm47CisKKyAgICB2YWxpZGF0ZV9jdXJzb3IoKTsJICAgIC8qIHdfd3JvdyBuZWVkcyB0byBiZSB2YWxpZCAqLworCisgICAgLyoKKyAgICAgKiBDb21wdXRlIHRoZSByb3cgbnVtYmVyIG9mIHRoZSBsYXN0IHJvdyBvZiB0aGUgY3Vyc29yIGxpbmUKKyAgICAgKiBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgZ28gb2ZmIHRoZSBzY3JlZW4uIE1ha2Ugc3VyZSB0aGUgY3Vyc29yCisgICAgICogZG9lc24ndCBnbyBwYXN0ICdzY3JvbGxvZmYnIGxpbmVzIGZyb20gdGhlIHNjcmVlbiBlbmQuCisgICAgICovCisgICAgZW5kX3JvdyA9IGN1cndpbi0+d193cm93OworI2lmZGVmIEZFQVRfRElGRgorICAgIGlmIChjYW5fZmlsbCkKKwkrK2VuZF9yb3c7CisgICAgZWxzZQorCWVuZF9yb3cgKz0gcGxpbmVzX25vZmlsbChjdXJ3aW4tPndfdG9wbGluZSAtIDEpOworI2Vsc2UKKyAgICBlbmRfcm93ICs9IHBsaW5lcyhjdXJ3aW4tPndfdG9wbGluZSAtIDEpOworI2VuZGlmCisgICAgaWYgKGN1cndpbi0+d19wX3dyYXAKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQkmJiBjdXJ3aW4tPndfd2lkdGggIT0gMAorI2VuZGlmCisJICAgICkKKyAgICB7CisJdmFsaWRhdGVfY2hlaWdodCgpOworCXZhbGlkYXRlX3ZpcnRjb2woKTsKKwllbmRfcm93ICs9IGN1cndpbi0+d19jbGluZV9oZWlnaHQgLSAxIC0KKwkgICAgY3Vyd2luLT53X3ZpcnRjb2wgLyBXX1dJRFRIKGN1cndpbik7CisgICAgfQorICAgIGlmIChlbmRfcm93IDwgY3Vyd2luLT53X2hlaWdodCAtIHBfc28pCisgICAgeworI2lmZGVmIEZFQVRfRElGRgorCWlmIChjYW5fZmlsbCkKKwl7CisJICAgICsrY3Vyd2luLT53X3RvcGZpbGw7CisJICAgIGNoZWNrX3RvcGZpbGwoY3Vyd2luLCBUUlVFKTsKKwl9CisJZWxzZQorCXsKKwkgICAgLS1jdXJ3aW4tPndfdG9wbGluZTsKKwkgICAgY3Vyd2luLT53X3RvcGZpbGwgPSAwOworCX0KKyNlbHNlCisJLS1jdXJ3aW4tPndfdG9wbGluZTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworCWhhc0ZvbGRpbmcoY3Vyd2luLT53X3RvcGxpbmUsICZjdXJ3aW4tPndfdG9wbGluZSwgTlVMTCk7CisjZW5kaWYKKwktLWN1cndpbi0+d19ib3RsaW5lOwkgICAgLyogYXBwcm94aW1hdGUgd19ib3RsaW5lICovCisJY3Vyd2luLT53X3ZhbGlkICY9IH4oVkFMSURfV1JPV3xWQUxJRF9DUk9XfFZBTElEX0JPVExJTkUpOworICAgIH0KK30KKworLyoKKyAqIFNjcm9sbCB0aGUgc2NyZWVuIG9uZSBsaW5lIHVwLCBidXQgZG9uJ3QgZG8gaXQgaWYgaXQgd291bGQgbW92ZSB0aGUgY3Vyc29yCisgKiBvZmYgdGhlIHNjcmVlbi4KKyAqLworICAgIHZvaWQKK3Njcm9sbHVwX2NsYW1wKCkKK3sKKyAgICBpbnQJICAgIHN0YXJ0X3JvdzsKKworICAgIGlmIChjdXJ3aW4tPndfdG9wbGluZSA9PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudAorI2lmZGVmIEZFQVRfRElGRgorCSAgICAmJiBjdXJ3aW4tPndfdG9wZmlsbCA9PSAwCisjZW5kaWYKKwkgICAgKQorCXJldHVybjsKKworICAgIHZhbGlkYXRlX2N1cnNvcigpOwkgICAgLyogd193cm93IG5lZWRzIHRvIGJlIHZhbGlkICovCisKKyAgICAvKgorICAgICAqIENvbXB1dGUgdGhlIHJvdyBudW1iZXIgb2YgdGhlIGZpcnN0IHJvdyBvZiB0aGUgY3Vyc29yIGxpbmUKKyAgICAgKiBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgZ28gb2ZmIHRoZSBzY3JlZW4uIE1ha2Ugc3VyZSB0aGUgY3Vyc29yCisgICAgICogZG9lc24ndCBnbyBiZWZvcmUgJ3Njcm9sbG9mZicgbGluZXMgZnJvbSB0aGUgc2NyZWVuIHN0YXJ0LgorICAgICAqLworI2lmZGVmIEZFQVRfRElGRgorICAgIHN0YXJ0X3JvdyA9IGN1cndpbi0+d193cm93IC0gcGxpbmVzX25vZmlsbChjdXJ3aW4tPndfdG9wbGluZSkKKwkJCQkJCQkgIC0gY3Vyd2luLT53X3RvcGZpbGw7CisjZWxzZQorICAgIHN0YXJ0X3JvdyA9IGN1cndpbi0+d193cm93IC0gcGxpbmVzKGN1cndpbi0+d190b3BsaW5lKTsKKyNlbmRpZgorICAgIGlmIChjdXJ3aW4tPndfcF93cmFwCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkJJiYgY3Vyd2luLT53X3dpZHRoICE9IDAKKyNlbmRpZgorCSAgICApCisgICAgeworCXZhbGlkYXRlX3ZpcnRjb2woKTsKKwlzdGFydF9yb3cgLT0gY3Vyd2luLT53X3ZpcnRjb2wgLyBXX1dJRFRIKGN1cndpbik7CisgICAgfQorICAgIGlmIChzdGFydF9yb3cgPj0gcF9zbykKKyAgICB7CisjaWZkZWYgRkVBVF9ESUZGCisJaWYgKGN1cndpbi0+d190b3BmaWxsID4gMCkKKwkgICAgLS1jdXJ3aW4tPndfdG9wZmlsbDsKKwllbHNlCisjZW5kaWYKKwkgICAgKytjdXJ3aW4tPndfdG9wbGluZTsKKwkrK2N1cndpbi0+d19ib3RsaW5lOwkJLyogYXBwcm94aW1hdGUgd19ib3RsaW5lICovCisJY3Vyd2luLT53X3ZhbGlkICY9IH4oVkFMSURfV1JPV3xWQUxJRF9DUk9XfFZBTElEX0JPVExJTkUpOworICAgIH0KK30KKyNlbmRpZiAvKiBGRUFUX0lOU19FWFBBTkQgKi8KKworLyoKKyAqIEFkZCBvbmUgbGluZSBhYm92ZSAibHAtPmxudW0iLiAgVGhpcyBjYW4gYmUgYSBmaWxsZXIgbGluZSwgYSBjbG9zZWQgZm9sZCBvcgorICogYSAod3JhcHBlZCkgdGV4dCBsaW5lLiAgVXNlcyBhbmQgc2V0cyAibHAtPmZpbGwiLgorICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBhZGRlZCBsaW5lIGluICJscC0+aGVpZ2h0Ii4KKyAqIExpbmVzIGFib3ZlIHRoZSBmaXJzdCBvbmUgYXJlIGluY3JlZGlibHkgaGlnaC4KKyAqLworICAgIHN0YXRpYyB2b2lkCit0b3BsaW5lX2JhY2sobHApCisgICAgbGluZW9mZl9UCSpscDsKK3sKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBpZiAobHAtPmZpbGwgPCBkaWZmX2NoZWNrX2ZpbGwoY3Vyd2luLCBscC0+bG51bSkpCisgICAgeworCS8qIEFkZCBhIGZpbGxlciBsaW5lLiAqLworCSsrbHAtPmZpbGw7CisJbHAtPmhlaWdodCA9IDE7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwktLWxwLT5sbnVtOworI2lmZGVmIEZFQVRfRElGRgorCWxwLT5maWxsID0gMDsKKyNlbmRpZgorCWlmIChscC0+bG51bSA8IDEpCisJICAgIGxwLT5oZWlnaHQgPSBNQVhDT0w7CisJZWxzZQorI2lmZGVmIEZFQVRfRk9MRElORworCSAgICBpZiAoaGFzRm9sZGluZyhscC0+bG51bSwgJmxwLT5sbnVtLCBOVUxMKSkKKwkgICAgLyogQWRkIGEgY2xvc2VkIGZvbGQgKi8KKwkgICAgbHAtPmhlaWdodCA9IDE7CisJZWxzZQorI2VuZGlmCisJeworI2lmZGVmIEZFQVRfRElGRgorCSAgICBscC0+aGVpZ2h0ID0gcGxpbmVzX25vZmlsbChscC0+bG51bSk7CisjZWxzZQorCSAgICBscC0+aGVpZ2h0ID0gcGxpbmVzKGxwLT5sbnVtKTsKKyNlbmRpZgorCX0KKyAgICB9Cit9CisKKy8qCisgKiBBZGQgb25lIGxpbmUgYmVsb3cgImxwLT5sbnVtIi4gIFRoaXMgY2FuIGJlIGEgZmlsbGVyIGxpbmUsIGEgY2xvc2VkIGZvbGQgb3IKKyAqIGEgKHdyYXBwZWQpIHRleHQgbGluZS4gIFVzZXMgYW5kIHNldHMgImxwLT5maWxsIi4KKyAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgYWRkZWQgbGluZSBpbiAibHAtPmhlaWdodCIuCisgKiBMaW5lcyBiZWxvdyB0aGUgbGFzdCBvbmUgYXJlIGluY3JlZGlibHkgaGlnaC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitib3RsaW5lX2ZvcncobHApCisgICAgbGluZW9mZl9UCSpscDsKK3sKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBpZiAobHAtPmZpbGwgPCBkaWZmX2NoZWNrX2ZpbGwoY3Vyd2luLCBscC0+bG51bSArIDEpKQorICAgIHsKKwkvKiBBZGQgYSBmaWxsZXIgbGluZS4gKi8KKwkrK2xwLT5maWxsOworCWxwLT5oZWlnaHQgPSAxOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJKytscC0+bG51bTsKKyNpZmRlZiBGRUFUX0RJRkYKKwlscC0+ZmlsbCA9IDA7CisjZW5kaWYKKwlpZiAobHAtPmxudW0gPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkgICAgbHAtPmhlaWdodCA9IE1BWENPTDsKKwllbHNlCisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIGlmIChoYXNGb2xkaW5nKGxwLT5sbnVtLCBOVUxMLCAmbHAtPmxudW0pKQorCSAgICAvKiBBZGQgYSBjbG9zZWQgZm9sZCAqLworCSAgICBscC0+aGVpZ2h0ID0gMTsKKwllbHNlCisjZW5kaWYKKwl7CisjaWZkZWYgRkVBVF9ESUZGCisJICAgIGxwLT5oZWlnaHQgPSBwbGluZXNfbm9maWxsKGxwLT5sbnVtKTsKKyNlbHNlCisJICAgIGxwLT5oZWlnaHQgPSBwbGluZXMobHAtPmxudW0pOworI2VuZGlmCisJfQorICAgIH0KK30KKworI2lmZGVmIEZFQVRfRElGRgorLyoKKyAqIFN3aXRjaCBmcm9tIGluY2x1ZGluZyBmaWxsZXIgbGluZXMgYmVsb3cgbHAtPmxudW0gdG8gaW5jbHVkaW5nIGZpbGxlcgorICogbGluZXMgYWJvdmUgbG9mZi5sbnVtICsgMS4gIFRoaXMga2VlcHMgcG9pbnRpbmcgdG8gdGhlIHNhbWUgbGluZS4KKyAqIFdoZW4gdGhlcmUgYXJlIG5vIGZpbGxlciBsaW5lcyBub3RoaW5nIGNoYW5nZXMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYm90bGluZV90b3BsaW5lKGxwKQorICAgIGxpbmVvZmZfVAkqbHA7Cit7CisgICAgaWYgKGxwLT5maWxsID4gMCkKKyAgICB7CisJKytscC0+bG51bTsKKwlscC0+ZmlsbCA9IGRpZmZfY2hlY2tfZmlsbChjdXJ3aW4sIGxwLT5sbnVtKSAtIGxwLT5maWxsICsgMTsKKyAgICB9Cit9CisKKy8qCisgKiBTd2l0Y2ggZnJvbSBpbmNsdWRpbmcgZmlsbGVyIGxpbmVzIGFib3ZlIGxwLT5sbnVtIHRvIGluY2x1ZGluZyBmaWxsZXIKKyAqIGxpbmVzIGJlbG93IGxvZmYubG51bSAtIDEuICBUaGlzIGtlZXBzIHBvaW50aW5nIHRvIHRoZSBzYW1lIGxpbmUuCisgKiBXaGVuIHRoZXJlIGFyZSBubyBmaWxsZXIgbGluZXMgbm90aGluZyBjaGFuZ2VzLgorICovCisgICAgc3RhdGljIHZvaWQKK3RvcGxpbmVfYm90bGluZShscCkKKyAgICBsaW5lb2ZmX1QJKmxwOworeworICAgIGlmIChscC0+ZmlsbCA+IDApCisgICAgeworCWxwLT5maWxsID0gZGlmZl9jaGVja19maWxsKGN1cndpbiwgbHAtPmxudW0pIC0gbHAtPmZpbGwgKyAxOworCS0tbHAtPmxudW07CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBSZWNvbXB1dGUgdG9wbGluZSB0byBwdXQgdGhlIGN1cnNvciBhdCB0aGUgdG9wIG9mIHRoZSB3aW5kb3cuCisgKiBTY3JvbGwgYXQgbGVhc3QgIm1pbl9zY3JvbGwiIGxpbmVzLgorICogSWYgImFsd2F5cyIgaXMgVFJVRSwgYWx3YXlzIHNldCB0b3BsaW5lIChmb3IgInp0IikuCisgKi8KKyAgICB2b2lkCitzY3JvbGxfY3Vyc29yX3RvcChtaW5fc2Nyb2xsLCBhbHdheXMpCisgICAgaW50CQltaW5fc2Nyb2xsOworICAgIGludAkJYWx3YXlzOworeworICAgIGludAkJc2Nyb2xsZWQgPSAwOworICAgIGludAkJZXh0cmEgPSAwOworICAgIGludAkJdXNlZDsKKyAgICBpbnQJCWk7CisgICAgbGluZW5yX1QJdG9wOwkJLyoganVzdCBhYm92ZSBkaXNwbGF5ZWQgbGluZXMgKi8KKyAgICBsaW5lbnJfVAlib3Q7CQkvKiBqdXN0IGJlbG93IGRpc3BsYXllZCBsaW5lcyAqLworICAgIGxpbmVucl9UCW9sZF90b3BsaW5lID0gY3Vyd2luLT53X3RvcGxpbmU7CisjaWZkZWYgRkVBVF9ESUZGCisgICAgbGluZW5yX1QJb2xkX3RvcGZpbGwgPSBjdXJ3aW4tPndfdG9wZmlsbDsKKyNlbmRpZgorICAgIGxpbmVucl9UCW5ld190b3BsaW5lOworICAgIGludAkJb2ZmID0gcF9zbzsKKworI2lmZGVmIEZFQVRfTU9VU0UKKyAgICBpZiAobW91c2VfZHJhZ2dpbmcgPiAwKQorCW9mZiA9IG1vdXNlX2RyYWdnaW5nIC0gMTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBEZWNyZWFzZSB0b3BsaW5lIHVudGlsOgorICAgICAqIC0gaXQgaGFzIGJlY29tZSAxCisgICAgICogLSAocGFydCBvZikgdGhlIGN1cnNvciBsaW5lIGlzIG1vdmVkIG9mZiB0aGUgc2NyZWVuIG9yCisgICAgICogLSBtb3ZlZCBhdCBsZWFzdCAnc2Nyb2xsanVtcCcgbGluZXMgYW5kCisgICAgICogLSBhdCBsZWFzdCAnc2Nyb2xsb2ZmJyBsaW5lcyBhYm92ZSBhbmQgYmVsb3cgdGhlIGN1cnNvcgorICAgICAqLworICAgIHZhbGlkYXRlX2NoZWlnaHQoKTsKKyAgICB1c2VkID0gY3Vyd2luLT53X2NsaW5lX2hlaWdodDsKKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtIDwgY3Vyd2luLT53X3RvcGxpbmUpCisJc2Nyb2xsZWQgPSB1c2VkOworCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaWYgKGhhc0ZvbGRpbmcoY3Vyd2luLT53X2N1cnNvci5sbnVtLCAmdG9wLCAmYm90KSkKKyAgICB7CisJLS10b3A7CisJKytib3Q7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwl0b3AgPSBjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSAxOworCWJvdCA9IGN1cndpbi0+d19jdXJzb3IubG51bSArIDE7CisgICAgfQorICAgIG5ld190b3BsaW5lID0gdG9wICsgMTsKKworI2lmZGVmIEZFQVRfRElGRgorICAgIC8qIGNvdW50IGZpbGxlciBsaW5lcyBvZiB0aGUgY3Vyc29yIHdpbmRvdyBhcyBjb250ZXh0ICovCisgICAgaSA9IGRpZmZfY2hlY2tfZmlsbChjdXJ3aW4sIGN1cndpbi0+d19jdXJzb3IubG51bSk7CisgICAgdXNlZCArPSBpOworICAgIGV4dHJhICs9IGk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlIGxpbmVzIGZyb20gInRvcCIgdG8gImJvdCIgZml0IGluIHRoZSB3aW5kb3cuICBJZiB0aGV5IGRvLAorICAgICAqIHNldCBuZXdfdG9wbGluZSBhbmQgYWR2YW5jZSAidG9wIiBhbmQgImJvdCIgdG8gaW5jbHVkZSBtb3JlIGxpbmVzLgorICAgICAqLworICAgIHdoaWxlICh0b3AgPiAwKQorICAgIHsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwlpZiAoaGFzRm9sZGluZyh0b3AsICZ0b3AsIE5VTEwpKQorCSAgICAvKiBjb3VudCBvbmUgbG9naWNhbCBsaW5lIGZvciBhIHNlcXVlbmNlIG9mIGZvbGRlZCBsaW5lcyAqLworCSAgICBpID0gMTsKKwllbHNlCisjZW5kaWYKKwkgICAgaSA9IHBsaW5lcyh0b3ApOworCXVzZWQgKz0gaTsKKwlpZiAoZXh0cmEgKyBpIDw9IG9mZiAmJiBib3QgPCBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwl7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIGlmIChoYXNGb2xkaW5nKGJvdCwgTlVMTCwgJmJvdCkpCisJCS8qIGNvdW50IG9uZSBsb2dpY2FsIGxpbmUgZm9yIGEgc2VxdWVuY2Ugb2YgZm9sZGVkIGxpbmVzICovCisJCSsrdXNlZDsKKwkgICAgZWxzZQorI2VuZGlmCisJCXVzZWQgKz0gcGxpbmVzKGJvdCk7CisJfQorCWlmICh1c2VkID4gY3Vyd2luLT53X2hlaWdodCkKKwkgICAgYnJlYWs7CisJaWYgKHRvcCA8IGN1cndpbi0+d190b3BsaW5lKQorCSAgICBzY3JvbGxlZCArPSBpOworCisJLyoKKwkgKiBJZiBzY3JvbGxpbmcgaXMgbmVlZGVkLCBzY3JvbGwgYXQgbGVhc3QgJ3NqJyBsaW5lcy4KKwkgKi8KKwlpZiAoKG5ld190b3BsaW5lID49IGN1cndpbi0+d190b3BsaW5lIHx8IHNjcm9sbGVkID4gbWluX3Njcm9sbCkKKwkJJiYgZXh0cmEgPj0gb2ZmKQorCSAgICBicmVhazsKKworCWV4dHJhICs9IGk7CisJbmV3X3RvcGxpbmUgPSB0b3A7CisJLS10b3A7CisJKytib3Q7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBzcGFjZSwgcHV0IGN1cnNvciBpbiB0aGUgbWlkZGxlLgorICAgICAqIFRoaXMgbWFrZXMgc3VyZSB3ZSBnZXQgdGhlIHNhbWUgcG9zaXRpb24gd2hlbiB1c2luZyAiayIgYW5kICJqIgorICAgICAqIGluIGEgc21hbGwgd2luZG93LgorICAgICAqLworICAgIGlmICh1c2VkID4gY3Vyd2luLT53X2hlaWdodCkKKwlzY3JvbGxfY3Vyc29yX2hhbGZ3YXkoRkFMU0UpOworICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBJZiAiYWx3YXlzIiBpcyBGQUxTRSwgb25seSBhZGp1c3QgdG9wbGluZSB0byBhIGxvd2VyIHZhbHVlLCBoaWdoZXIKKwkgKiB2YWx1ZSBtYXkgaGFwcGVuIHdpdGggd3JhcHBpbmcgbGluZXMKKwkgKi8KKwlpZiAobmV3X3RvcGxpbmUgPCBjdXJ3aW4tPndfdG9wbGluZSB8fCBhbHdheXMpCisJICAgIGN1cndpbi0+d190b3BsaW5lID0gbmV3X3RvcGxpbmU7CisJaWYgKGN1cndpbi0+d190b3BsaW5lID4gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCSAgICBjdXJ3aW4tPndfdG9wbGluZSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyNpZmRlZiBGRUFUX0RJRkYKKwljdXJ3aW4tPndfdG9wZmlsbCA9IGRpZmZfY2hlY2tfZmlsbChjdXJ3aW4sIGN1cndpbi0+d190b3BsaW5lKTsKKwlpZiAoY3Vyd2luLT53X3RvcGZpbGwgPiAwICYmIGV4dHJhID4gb2ZmKQorCXsKKwkgICAgY3Vyd2luLT53X3RvcGZpbGwgLT0gZXh0cmEgLSBvZmY7CisJICAgIGlmIChjdXJ3aW4tPndfdG9wZmlsbCA8IDApCisJCWN1cndpbi0+d190b3BmaWxsID0gMDsKKwl9CisJY2hlY2tfdG9wZmlsbChjdXJ3aW4sIEZBTFNFKTsKKyNlbmRpZgorCWlmIChjdXJ3aW4tPndfdG9wbGluZSAhPSBvbGRfdG9wbGluZQorI2lmZGVmIEZFQVRfRElGRgorCQl8fCBjdXJ3aW4tPndfdG9wZmlsbCAhPSBvbGRfdG9wZmlsbAorI2VuZGlmCisJCSkKKwkgICAgY3Vyd2luLT53X3ZhbGlkICY9CisJCSAgICAgIH4oVkFMSURfV1JPV3xWQUxJRF9DUk9XfFZBTElEX0JPVExJTkV8VkFMSURfQk9UTElORV9BUCk7CisJY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX1RPUExJTkU7CisgICAgfQorfQorCisvKgorICogU2V0IHdfZW1wdHlfcm93cyBhbmQgd19maWxsZXJfcm93cyBmb3Igd2luZG93ICJ3cCIsIGhhdmluZyB1c2VkIHVwICJ1c2VkIgorICogc2NyZWVuIGxpbmVzIGZvciB0ZXh0IGxpbmVzLgorICovCisgICAgdm9pZAorc2V0X2VtcHR5X3Jvd3Mod3AsIHVzZWQpCisgICAgd2luX1QJKndwOworICAgIGludAkJdXNlZDsKK3sKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICB3cC0+d19maWxsZXJfcm93cyA9IDA7CisjZW5kaWYKKyAgICBpZiAodXNlZCA9PSAwKQorCXdwLT53X2VtcHR5X3Jvd3MgPSAwOwkvKiBzaW5nbGUgbGluZSB0aGF0IGRvZXNuJ3QgZml0ICovCisgICAgZWxzZQorICAgIHsKKwl3cC0+d19lbXB0eV9yb3dzID0gd3AtPndfaGVpZ2h0IC0gdXNlZDsKKyNpZmRlZiBGRUFUX0RJRkYKKwlpZiAod3AtPndfYm90bGluZSA8PSB3cC0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudCkKKwl7CisJICAgIHdwLT53X2ZpbGxlcl9yb3dzID0gZGlmZl9jaGVja19maWxsKHdwLCB3cC0+d19ib3RsaW5lKTsKKwkgICAgaWYgKHdwLT53X2VtcHR5X3Jvd3MgPiB3cC0+d19maWxsZXJfcm93cykKKwkJd3AtPndfZW1wdHlfcm93cyAtPSB3cC0+d19maWxsZXJfcm93czsKKwkgICAgZWxzZQorCSAgICB7CisJCXdwLT53X2ZpbGxlcl9yb3dzID0gd3AtPndfZW1wdHlfcm93czsKKwkJd3AtPndfZW1wdHlfcm93cyA9IDA7CisJICAgIH0KKwl9CisjZW5kaWYKKyAgICB9Cit9CisKKy8qCisgKiBSZWNvbXB1dGUgdG9wbGluZSB0byBwdXQgdGhlIGN1cnNvciBhdCB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3cuCisgKiBTY3JvbGwgYXQgbGVhc3QgIm1pbl9zY3JvbGwiIGxpbmVzLgorICogSWYgInNldF90b3Bib3QiIGlzIFRSVUUsIHNldCB0b3BsaW5lIGFuZCBib3RsaW5lIGZpcnN0IChmb3IgInpiIikuCisgKiBUaGlzIGlzIG1lc3N5IHN0dWZmISEhCisgKi8KKyAgICB2b2lkCitzY3JvbGxfY3Vyc29yX2JvdChtaW5fc2Nyb2xsLCBzZXRfdG9wYm90KQorICAgIGludAkJbWluX3Njcm9sbDsKKyAgICBpbnQJCXNldF90b3Bib3Q7Cit7CisgICAgaW50CQl1c2VkOworICAgIGludAkJc2Nyb2xsZWQgPSAwOworICAgIGludAkJZXh0cmEgPSAwOworICAgIGludAkJaTsKKyAgICBsaW5lbnJfVAlsaW5lX2NvdW50OworICAgIGxpbmVucl9UCW9sZF90b3BsaW5lID0gY3Vyd2luLT53X3RvcGxpbmU7CisgICAgbGluZW9mZl9UCWxvZmY7CisgICAgbGluZW9mZl9UCWJvZmY7CisjaWZkZWYgRkVBVF9ESUZGCisgICAgaW50CQlvbGRfdG9wZmlsbCA9IGN1cndpbi0+d190b3BmaWxsOworICAgIGludAkJZmlsbF9iZWxvd193aW5kb3c7CisjZW5kaWYKKyAgICBsaW5lbnJfVAlvbGRfYm90bGluZSA9IGN1cndpbi0+d19ib3RsaW5lOworICAgIGxpbmVucl9UCW9sZF92YWxpZCA9IGN1cndpbi0+d192YWxpZDsKKyAgICBpbnQJCW9sZF9lbXB0eV9yb3dzID0gY3Vyd2luLT53X2VtcHR5X3Jvd3M7CisgICAgbGluZW5yX1QJY2xuOwkJICAgIC8qIEN1cnNvciBMaW5lIE51bWJlciAqLworCisgICAgY2xuID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworICAgIGlmIChzZXRfdG9wYm90KQorICAgIHsKKwl1c2VkID0gMDsKKwljdXJ3aW4tPndfYm90bGluZSA9IGNsbiArIDE7CisjaWZkZWYgRkVBVF9ESUZGCisJbG9mZi5maWxsID0gMDsKKyNlbmRpZgorCWZvciAoY3Vyd2luLT53X3RvcGxpbmUgPSBjdXJ3aW4tPndfYm90bGluZTsKKwkJY3Vyd2luLT53X3RvcGxpbmUgPiAxOworCQljdXJ3aW4tPndfdG9wbGluZSA9IGxvZmYubG51bSkKKwl7CisJICAgIGxvZmYubG51bSA9IGN1cndpbi0+d190b3BsaW5lOworCSAgICB0b3BsaW5lX2JhY2soJmxvZmYpOworCSAgICBpZiAodXNlZCArIGxvZmYuaGVpZ2h0ID4gY3Vyd2luLT53X2hlaWdodCkKKwkJYnJlYWs7CisJICAgIHVzZWQgKz0gbG9mZi5oZWlnaHQ7CisjaWZkZWYgRkVBVF9ESUZGCisJICAgIGN1cndpbi0+d190b3BmaWxsID0gbG9mZi5maWxsOworI2VuZGlmCisJfQorCXNldF9lbXB0eV9yb3dzKGN1cndpbiwgdXNlZCk7CisJY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX0JPVExJTkV8VkFMSURfQk9UTElORV9BUDsKKwlpZiAoY3Vyd2luLT53X3RvcGxpbmUgIT0gb2xkX3RvcGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkJfHwgY3Vyd2luLT53X3RvcGZpbGwgIT0gb2xkX3RvcGZpbGwKKyNlbmRpZgorCQkpCisJICAgIGN1cndpbi0+d192YWxpZCAmPSB+KFZBTElEX1dST1d8VkFMSURfQ1JPVyk7CisgICAgfQorICAgIGVsc2UKKwl2YWxpZGF0ZV9ib3RsaW5lKCk7CisKKyAgICAvKiBUaGUgbGluZXMgb2YgdGhlIGN1cnNvciBsaW5lIGl0c2VsZiBhcmUgYWx3YXlzIHVzZWQuICovCisjaWZkZWYgRkVBVF9ESUZGCisgICAgdXNlZCA9IHBsaW5lc19ub2ZpbGwoY2xuKTsKKyNlbHNlCisgICAgdmFsaWRhdGVfY2hlaWdodCgpOworICAgIHVzZWQgPSBjdXJ3aW4tPndfY2xpbmVfaGVpZ2h0OworI2VuZGlmCisKKyAgICAvKiBJZiB0aGUgY3Vyc29yIGlzIGJlbG93IGJvdGxpbmUsIHdlIHdpbGwgYXQgbGVhc3Qgc2Nyb2xsIGJ5IHRoZSBoZWlnaHQKKyAgICAgKiBvZiB0aGUgY3Vyc29yIGxpbmUuICBDb3JyZWN0IGZvciBlbXB0eSBsaW5lcywgd2hpY2ggYXJlIHJlYWxseSBwYXJ0IG9mCisgICAgICogYm90bGluZS4gKi8KKyAgICBpZiAoY2xuID49IGN1cndpbi0+d19ib3RsaW5lKQorICAgIHsKKwlzY3JvbGxlZCA9IHVzZWQ7CisJaWYgKGNsbiA9PSBjdXJ3aW4tPndfYm90bGluZSkKKwkgICAgc2Nyb2xsZWQgLT0gY3Vyd2luLT53X2VtcHR5X3Jvd3M7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTdG9wIGNvdW50aW5nIGxpbmVzIHRvIHNjcm9sbCB3aGVuCisgICAgICogLSBoaXR0aW5nIHN0YXJ0IG9mIHRoZSBmaWxlCisgICAgICogLSBzY3JvbGxlZCBub3RoaW5nIG9yIGF0IGxlYXN0ICdzaicgbGluZXMKKyAgICAgKiAtIGF0IGxlYXN0ICdzbycgbGluZXMgYmVsb3cgdGhlIGN1cnNvcgorICAgICAqIC0gbGluZXMgYmV0d2VlbiBib3RsaW5lIGFuZCBjdXJzb3IgaGF2ZSBiZWVuIGNvdW50ZWQKKyAgICAgKi8KKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBpZiAoIWhhc0ZvbGRpbmcoY3Vyd2luLT53X2N1cnNvci5sbnVtLCAmbG9mZi5sbnVtLCAmYm9mZi5sbnVtKSkKKyNlbmRpZgorICAgIHsKKwlsb2ZmLmxudW0gPSBjbG47CisJYm9mZi5sbnVtID0gY2xuOworICAgIH0KKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBsb2ZmLmZpbGwgPSAwOworICAgIGJvZmYuZmlsbCA9IDA7CisgICAgZmlsbF9iZWxvd193aW5kb3cgPSBkaWZmX2NoZWNrX2ZpbGwoY3Vyd2luLCBjdXJ3aW4tPndfYm90bGluZSkKKwkJCQkJCSAgICAgIC0gY3Vyd2luLT53X2ZpbGxlcl9yb3dzOworI2VuZGlmCisKKyAgICB3aGlsZSAobG9mZi5sbnVtID4gMSkKKyAgICB7CisJLyogU3RvcCB3aGVuIHNjcm9sbGVkIG5vdGhpbmcgb3IgYXQgbGVhc3QgIm1pbl9zY3JvbGwiLCBmb3VuZCAiZXh0cmEiCisJICogY29udGV4dCBmb3IgJ3Njcm9sbG9mZicgYW5kIGNvdW50ZWQgYWxsIGxpbmVzIGJlbG93IHRoZSB3aW5kb3cuICovCisJaWYgKCgoKHNjcm9sbGVkIDw9IDAgfHwgc2Nyb2xsZWQgPj0gbWluX3Njcm9sbCkKKwkJCSYmIGV4dHJhID49ICgKKyNpZmRlZiBGRUFUX01PVVNFCisJCQkgICAgbW91c2VfZHJhZ2dpbmcgPyBtb3VzZV9kcmFnZ2luZyAtIDEgOgorI2VuZGlmCisJCQkgICAgcF9zbykpCisJCSAgICB8fCBib2ZmLmxudW0gKyAxID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCSYmIGxvZmYubG51bSA8PSBjdXJ3aW4tPndfYm90bGluZQorI2lmZGVmIEZFQVRfRElGRgorCQkmJiAobG9mZi5sbnVtIDwgY3Vyd2luLT53X2JvdGxpbmUKKwkJICAgIHx8IGxvZmYuZmlsbCA+PSBmaWxsX2JlbG93X3dpbmRvdykKKyNlbmRpZgorCQkpCisJICAgIGJyZWFrOworCisJLyogQWRkIG9uZSBsaW5lIGFib3ZlICovCisJdG9wbGluZV9iYWNrKCZsb2ZmKTsKKwl1c2VkICs9IGxvZmYuaGVpZ2h0OworCWlmICh1c2VkID4gY3Vyd2luLT53X2hlaWdodCkKKwkgICAgYnJlYWs7CisJaWYgKGxvZmYubG51bSA+PSBjdXJ3aW4tPndfYm90bGluZQorI2lmZGVmIEZFQVRfRElGRgorCQkmJiAobG9mZi5sbnVtID4gY3Vyd2luLT53X2JvdGxpbmUKKwkJICAgIHx8IGxvZmYuZmlsbCA8PSBmaWxsX2JlbG93X3dpbmRvdykKKyNlbmRpZgorCQkpCisJeworCSAgICAvKiBDb3VudCBzY3JlZW4gbGluZXMgdGhhdCBhcmUgYmVsb3cgdGhlIHdpbmRvdy4gKi8KKwkgICAgc2Nyb2xsZWQgKz0gbG9mZi5oZWlnaHQ7CisJICAgIGlmIChsb2ZmLmxudW0gPT0gY3Vyd2luLT53X2JvdGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkJCSAgICAmJiBib2ZmLmZpbGwgPT0gMAorI2VuZGlmCisJCSAgICApCisJCXNjcm9sbGVkIC09IGN1cndpbi0+d19lbXB0eV9yb3dzOworCX0KKworCWlmIChib2ZmLmxudW0gPCBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwl7CisJICAgIC8qIEFkZCBvbmUgbGluZSBiZWxvdyAqLworCSAgICBib3RsaW5lX2ZvcncoJmJvZmYpOworCSAgICB1c2VkICs9IGJvZmYuaGVpZ2h0OworCSAgICBpZiAodXNlZCA+IGN1cndpbi0+d19oZWlnaHQpCisJCWJyZWFrOworCSAgICBpZiAoZXh0cmEgPCAoCisjaWZkZWYgRkVBVF9NT1VTRQorCQkJbW91c2VfZHJhZ2dpbmcgPiAwID8gbW91c2VfZHJhZ2dpbmcgLSAxIDoKKyNlbmRpZgorCQkJcF9zbykgfHwgc2Nyb2xsZWQgPCBtaW5fc2Nyb2xsKQorCSAgICB7CisJCWV4dHJhICs9IGJvZmYuaGVpZ2h0OworCQlpZiAoYm9mZi5sbnVtID49IGN1cndpbi0+d19ib3RsaW5lCisjaWZkZWYgRkVBVF9ESUZGCisJCQl8fCAoYm9mZi5sbnVtICsgMSA9PSBjdXJ3aW4tPndfYm90bGluZQorCQkJICAgICYmIGJvZmYuZmlsbCA+IGN1cndpbi0+d19maWxsZXJfcm93cykKKyNlbmRpZgorCQkgICApCisJCXsKKwkJICAgIC8qIENvdW50IHNjcmVlbiBsaW5lcyB0aGF0IGFyZSBiZWxvdyB0aGUgd2luZG93LiAqLworCQkgICAgc2Nyb2xsZWQgKz0gYm9mZi5oZWlnaHQ7CisJCSAgICBpZiAoYm9mZi5sbnVtID09IGN1cndpbi0+d19ib3RsaW5lCisjaWZkZWYgRkVBVF9ESUZGCisJCQkgICAgJiYgYm9mZi5maWxsID09IDAKKyNlbmRpZgorCQkJICAgICkKKwkJCXNjcm9sbGVkIC09IGN1cndpbi0+d19lbXB0eV9yb3dzOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogY3Vyd2luLT53X2VtcHR5X3Jvd3MgaXMgbGFyZ2VyLCBubyBuZWVkIHRvIHNjcm9sbCAqLworICAgIGlmIChzY3JvbGxlZCA8PSAwKQorCWxpbmVfY291bnQgPSAwOworICAgIC8qIG1vcmUgdGhhbiBhIHNjcmVlbmZ1bGwsIGRvbid0IHNjcm9sbCBidXQgcmVkcmF3ICovCisgICAgZWxzZSBpZiAodXNlZCA+IGN1cndpbi0+d19oZWlnaHQpCisJbGluZV9jb3VudCA9IHVzZWQ7CisgICAgLyogc2Nyb2xsIG1pbmltYWwgbnVtYmVyIG9mIGxpbmVzICovCisgICAgZWxzZQorICAgIHsKKwlsaW5lX2NvdW50ID0gMDsKKyNpZmRlZiBGRUFUX0RJRkYKKwlib2ZmLmZpbGwgPSBjdXJ3aW4tPndfdG9wZmlsbDsKKyNlbmRpZgorCWJvZmYubG51bSA9IGN1cndpbi0+d190b3BsaW5lIC0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgc2Nyb2xsZWQgJiYgYm9mZi5sbnVtIDwgY3Vyd2luLT53X2JvdGxpbmU7ICkKKwl7CisJICAgIGJvdGxpbmVfZm9ydygmYm9mZik7CisJICAgIGkgKz0gYm9mZi5oZWlnaHQ7CisJICAgICsrbGluZV9jb3VudDsKKwl9CisJaWYgKGkgPCBzY3JvbGxlZCkJLyogYmVsb3cgY3Vyd2luLT53X2JvdGxpbmUsIGRvbid0IHNjcm9sbCAqLworCSAgICBsaW5lX2NvdW50ID0gOTk5OTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNjcm9sbCB1cCBpZiB0aGUgY3Vyc29yIGlzIG9mZiB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4gYSBiaXQuCisgICAgICogT3RoZXJ3aXNlIHB1dCBpdCBhdCAxLzIgb2YgdGhlIHNjcmVlbi4KKyAgICAgKi8KKyAgICBpZiAobGluZV9jb3VudCA+PSBjdXJ3aW4tPndfaGVpZ2h0ICYmIGxpbmVfY291bnQgPiBtaW5fc2Nyb2xsKQorCXNjcm9sbF9jdXJzb3JfaGFsZndheShGQUxTRSk7CisgICAgZWxzZQorCXNjcm9sbHVwKGxpbmVfY291bnQsIFRSVUUpOworCisgICAgLyoKKyAgICAgKiBJZiB0b3BsaW5lIGRpZG4ndCBjaGFuZ2Ugd2UgbmVlZCB0byByZXN0b3JlIHdfYm90bGluZSBhbmQgd19lbXB0eV9yb3dzCisgICAgICogKHdlIGNoYW5nZWQgdGhlbSkuCisgICAgICogSWYgdG9wbGluZSBkaWQgY2hhbmdlLCB1cGRhdGVfc2NyZWVuKCkgd2lsbCBzZXQgYm90bGluZS4KKyAgICAgKi8KKyAgICBpZiAoY3Vyd2luLT53X3RvcGxpbmUgPT0gb2xkX3RvcGxpbmUgJiYgc2V0X3RvcGJvdCkKKyAgICB7CisJY3Vyd2luLT53X2JvdGxpbmUgPSBvbGRfYm90bGluZTsKKwljdXJ3aW4tPndfZW1wdHlfcm93cyA9IG9sZF9lbXB0eV9yb3dzOworCWN1cndpbi0+d192YWxpZCA9IG9sZF92YWxpZDsKKyAgICB9CisgICAgY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX1RPUExJTkU7Cit9CisKKy8qCisgKiBSZWNvbXB1dGUgdG9wbGluZSB0byBwdXQgdGhlIGN1cnNvciBoYWxmd2F5IHRoZSB3aW5kb3cKKyAqIElmICJhdGVuZCIgaXMgVFJVRSwgYWxzbyBwdXQgaXQgaGFsZndheSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICovCisgICAgdm9pZAorc2Nyb2xsX2N1cnNvcl9oYWxmd2F5KGF0ZW5kKQorICAgIGludAkJYXRlbmQ7Cit7CisgICAgaW50CQlhYm92ZSA9IDA7CisgICAgbGluZW5yX1QJdG9wbGluZTsKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBpbnQJCXRvcGZpbGwgPSAwOworI2VuZGlmCisgICAgaW50CQliZWxvdyA9IDA7CisgICAgaW50CQl1c2VkOworICAgIGxpbmVvZmZfVAlsb2ZmOworICAgIGxpbmVvZmZfVAlib2ZmOworCisgICAgbG9mZi5sbnVtID0gYm9mZi5sbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworI2lmZGVmIEZFQVRfRk9MRElORworICAgICh2b2lkKWhhc0ZvbGRpbmcobG9mZi5sbnVtLCAmbG9mZi5sbnVtLCAmYm9mZi5sbnVtKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRElGRgorICAgIHVzZWQgPSBwbGluZXNfbm9maWxsKGxvZmYubG51bSk7CisgICAgbG9mZi5maWxsID0gMDsKKyAgICBib2ZmLmZpbGwgPSAwOworI2Vsc2UKKyAgICB1c2VkID0gcGxpbmVzKGxvZmYubG51bSk7CisjZW5kaWYKKyAgICB0b3BsaW5lID0gbG9mZi5sbnVtOworICAgIHdoaWxlICh0b3BsaW5lID4gMSkKKyAgICB7CisJaWYgKGJlbG93IDw9IGFib3ZlKQkgICAgLyogYWRkIGEgbGluZSBiZWxvdyB0aGUgY3Vyc29yIGZpcnN0ICovCisJeworCSAgICBpZiAoYm9mZi5sbnVtIDwgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJICAgIHsKKwkJYm90bGluZV9mb3J3KCZib2ZmKTsKKwkJdXNlZCArPSBib2ZmLmhlaWdodDsKKwkJaWYgKHVzZWQgPiBjdXJ3aW4tPndfaGVpZ2h0KQorCQkgICAgYnJlYWs7CisJCWJlbG93ICs9IGJvZmYuaGVpZ2h0OworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkrK2JlbG93OwkgICAgLyogY291bnQgYSAifiIgbGluZSAqLworCQlpZiAoYXRlbmQpCisJCSAgICArK3VzZWQ7CisJICAgIH0KKwl9CisKKwlpZiAoYmVsb3cgPiBhYm92ZSkJICAgIC8qIGFkZCBhIGxpbmUgYWJvdmUgdGhlIGN1cnNvciAqLworCXsKKwkgICAgdG9wbGluZV9iYWNrKCZsb2ZmKTsKKwkgICAgdXNlZCArPSBsb2ZmLmhlaWdodDsKKwkgICAgaWYgKHVzZWQgPiBjdXJ3aW4tPndfaGVpZ2h0KQorCQlicmVhazsKKwkgICAgYWJvdmUgKz0gbG9mZi5oZWlnaHQ7CisJICAgIHRvcGxpbmUgPSBsb2ZmLmxudW07CisjaWZkZWYgRkVBVF9ESUZGCisJICAgIHRvcGZpbGwgPSBsb2ZmLmZpbGw7CisjZW5kaWYKKwl9CisgICAgfQorI2lmZGVmIEZFQVRfRk9MRElORworICAgIGlmICghaGFzRm9sZGluZyh0b3BsaW5lLCAmY3Vyd2luLT53X3RvcGxpbmUsIE5VTEwpKQorI2VuZGlmCisJY3Vyd2luLT53X3RvcGxpbmUgPSB0b3BsaW5lOworI2lmZGVmIEZFQVRfRElGRgorICAgIGN1cndpbi0+d190b3BmaWxsID0gdG9wZmlsbDsKKyAgICBjaGVja190b3BmaWxsKGN1cndpbiwgRkFMU0UpOworI2VuZGlmCisgICAgY3Vyd2luLT53X3ZhbGlkICY9IH4oVkFMSURfV1JPV3xWQUxJRF9DUk9XfFZBTElEX0JPVExJTkV8VkFMSURfQk9UTElORV9BUCk7CisgICAgY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX1RPUExJTkU7Cit9CisKKy8qCisgKiBDb3JyZWN0IHRoZSBjdXJzb3IgcG9zaXRpb24gc28gdGhhdCBpdCBpcyBpbiBhIHBhcnQgb2YgdGhlIHNjcmVlbiBhdCBsZWFzdAorICogJ3NvJyBsaW5lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSwgaWYgcG9zc2libGUuCisgKiBJZiBub3QgcG9zc2libGUsIHB1dCBpdCBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyBzY3JvbGxfY3Vyc29yX2hhbGZ3YXkoKS4KKyAqIFdoZW4gY2FsbGVkIHRvcGxpbmUgbXVzdCBiZSB2YWxpZCEKKyAqLworICAgIHZvaWQKK2N1cnNvcl9jb3JyZWN0KCkKK3sKKyAgICBpbnQJCWFib3ZlID0gMDsJICAgIC8qIHNjcmVlbiBsaW5lcyBhYm92ZSB0b3BsaW5lICovCisgICAgbGluZW5yX1QJdG9wbGluZTsKKyAgICBpbnQJCWJlbG93ID0gMDsJICAgIC8qIHNjcmVlbiBsaW5lcyBiZWxvdyBib3RsaW5lICovCisgICAgbGluZW5yX1QJYm90bGluZTsKKyAgICBpbnQJCWFib3ZlX3dhbnRlZCwgYmVsb3dfd2FudGVkOworICAgIGxpbmVucl9UCWNsbjsJCSAgICAvKiBDdXJzb3IgTGluZSBOdW1iZXIgKi8KKyAgICBpbnQJCW1heF9vZmY7CisKKyAgICAvKgorICAgICAqIEhvdyBtYW55IGxpbmVzIHdlIHdvdWxkIGxpa2UgdG8gaGF2ZSBhYm92ZS9iZWxvdyB0aGUgY3Vyc29yIGRlcGVuZHMgb24KKyAgICAgKiB3aGV0aGVyIHRoZSBmaXJzdC9sYXN0IGxpbmUgb2YgdGhlIGZpbGUgaXMgb24gc2NyZWVuLgorICAgICAqLworICAgIGFib3ZlX3dhbnRlZCA9IHBfc287CisgICAgYmVsb3dfd2FudGVkID0gcF9zbzsKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgaWYgKG1vdXNlX2RyYWdnaW5nKQorICAgIHsKKwlhYm92ZV93YW50ZWQgPSBtb3VzZV9kcmFnZ2luZyAtIDE7CisJYmVsb3dfd2FudGVkID0gbW91c2VfZHJhZ2dpbmcgLSAxOworICAgIH0KKyNlbmRpZgorICAgIGlmIChjdXJ3aW4tPndfdG9wbGluZSA9PSAxKQorICAgIHsKKwlhYm92ZV93YW50ZWQgPSAwOworCW1heF9vZmYgPSBjdXJ3aW4tPndfaGVpZ2h0IC8gMjsKKwlpZiAoYmVsb3dfd2FudGVkID4gbWF4X29mZikKKwkgICAgYmVsb3dfd2FudGVkID0gbWF4X29mZjsKKyAgICB9CisgICAgdmFsaWRhdGVfYm90bGluZSgpOworICAgIGlmIChjdXJ3aW4tPndfYm90bGluZSA9PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCArIDEKKyNpZmRlZiBGRUFUX01PVVNFCisJICAgICYmICFtb3VzZV9kcmFnZ2luZworI2VuZGlmCisJICAgICkKKyAgICB7CisJYmVsb3dfd2FudGVkID0gMDsKKwltYXhfb2ZmID0gKGN1cndpbi0+d19oZWlnaHQgLSAxKSAvIDI7CisJaWYgKGFib3ZlX3dhbnRlZCA+IG1heF9vZmYpCisJICAgIGFib3ZlX3dhbnRlZCA9IG1heF9vZmY7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB0aGVyZSBhcmUgc3VmZmljaWVudCBmaWxlLWxpbmVzIGFib3ZlIGFuZCBiZWxvdyB0aGUgY3Vyc29yLCB3ZSBjYW4KKyAgICAgKiByZXR1cm4gbm93LgorICAgICAqLworICAgIGNsbiA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICBpZiAoY2xuID49IGN1cndpbi0+d190b3BsaW5lICsgYWJvdmVfd2FudGVkCisJICAgICYmIGNsbiA8IGN1cndpbi0+d19ib3RsaW5lIC0gYmVsb3dfd2FudGVkCisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgICYmICFoYXNBbnlGb2xkaW5nKGN1cndpbikKKyNlbmRpZgorCSAgICApCisJcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBOYXJyb3cgZG93biB0aGUgYXJlYSB3aGVyZSB0aGUgY3Vyc29yIGNhbiBiZSBwdXQgYnkgdGFraW5nIGxpbmVzIGZyb20KKyAgICAgKiB0aGUgdG9wIGFuZCB0aGUgYm90dG9tIHVudGlsOgorICAgICAqIC0gdGhlIGRlc2lyZWQgY29udGV4dCBsaW5lcyBhcmUgZm91bmQKKyAgICAgKiAtIHRoZSBsaW5lcyBmcm9tIHRoZSB0b3AgaXMgcGFzdCB0aGUgbGluZXMgZnJvbSB0aGUgYm90dG9tCisgICAgICovCisgICAgdG9wbGluZSA9IGN1cndpbi0+d190b3BsaW5lOworICAgIGJvdGxpbmUgPSBjdXJ3aW4tPndfYm90bGluZSAtIDE7CisjaWZkZWYgRkVBVF9ESUZGCisgICAgLyogY291bnQgZmlsbGVyIGxpbmVzIGFzIGNvbnRleHQgKi8KKyAgICBhYm92ZSA9IGN1cndpbi0+d190b3BmaWxsOworICAgIGJlbG93ID0gY3Vyd2luLT53X2ZpbGxlcl9yb3dzOworI2VuZGlmCisgICAgd2hpbGUgKChhYm92ZSA8IGFib3ZlX3dhbnRlZCB8fCBiZWxvdyA8IGJlbG93X3dhbnRlZCkgJiYgdG9wbGluZSA8IGJvdGxpbmUpCisgICAgeworCWlmIChiZWxvdyA8IGJlbG93X3dhbnRlZCAmJiAoYmVsb3cgPD0gYWJvdmUgfHwgYWJvdmUgPj0gYWJvdmVfd2FudGVkKSkKKwl7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIGlmIChoYXNGb2xkaW5nKGJvdGxpbmUsICZib3RsaW5lLCBOVUxMKSkKKwkJKytiZWxvdzsKKwkgICAgZWxzZQorI2VuZGlmCisJCWJlbG93ICs9IHBsaW5lcyhib3RsaW5lKTsKKwkgICAgLS1ib3RsaW5lOworCX0KKwlpZiAoYWJvdmUgPCBhYm92ZV93YW50ZWQgJiYgKGFib3ZlIDwgYmVsb3cgfHwgYmVsb3cgPj0gYmVsb3dfd2FudGVkKSkKKwl7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIGlmIChoYXNGb2xkaW5nKHRvcGxpbmUsIE5VTEwsICZ0b3BsaW5lKSkKKwkJKythYm92ZTsKKwkgICAgZWxzZQorI2VuZGlmCisjaWZuZGVmIEZFQVRfRElGRgorCQlhYm92ZSArPSBwbGluZXModG9wbGluZSk7CisjZWxzZQorCQlhYm92ZSArPSBwbGluZXNfbm9maWxsKHRvcGxpbmUpOworCisJICAgIC8qIENvdW50IGZpbGxlciBsaW5lcyBiZWxvdyB0aGlzIGxpbmUgYXMgY29udGV4dC4gKi8KKwkgICAgaWYgKHRvcGxpbmUgPCBib3RsaW5lKQorCQlhYm92ZSArPSBkaWZmX2NoZWNrX2ZpbGwoY3Vyd2luLCB0b3BsaW5lICsgMSk7CisjZW5kaWYKKwkgICAgKyt0b3BsaW5lOworCX0KKyAgICB9CisgICAgaWYgKHRvcGxpbmUgPT0gYm90bGluZSB8fCBib3RsaW5lID09IDApCisJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gdG9wbGluZTsKKyAgICBlbHNlIGlmICh0b3BsaW5lID4gYm90bGluZSkKKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBib3RsaW5lOworICAgIGVsc2UKKyAgICB7CisJaWYgKGNsbiA8IHRvcGxpbmUgJiYgY3Vyd2luLT53X3RvcGxpbmUgPiAxKQorCXsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gdG9wbGluZTsKKwkgICAgY3Vyd2luLT53X3ZhbGlkICY9CisJCQkgICAgfihWQUxJRF9XUk9XfFZBTElEX1dDT0x8VkFMSURfQ0hFSUdIVHxWQUxJRF9DUk9XKTsKKwl9CisJaWYgKGNsbiA+IGJvdGxpbmUgJiYgY3Vyd2luLT53X2JvdGxpbmUgPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJeworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBib3RsaW5lOworCSAgICBjdXJ3aW4tPndfdmFsaWQgJj0KKwkJCSAgICB+KFZBTElEX1dST1d8VkFMSURfV0NPTHxWQUxJRF9DSEVJR0hUfFZBTElEX0NST1cpOworCX0KKyAgICB9CisgICAgY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX1RPUExJTkU7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zY3JvbGxfb3ZlcmxhcCBfX0FSR1MoKGxpbmVvZmZfVCAqbHAsIGludCBkaXIpKTsKKworLyoKKyAqIG1vdmUgc2NyZWVuICdjb3VudCcgcGFnZXMgdXAgb3IgZG93biBhbmQgdXBkYXRlIHNjcmVlbgorICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAorb25lcGFnZShkaXIsIGNvdW50KQorICAgIGludAkJZGlyOworICAgIGxvbmcJY291bnQ7Cit7CisgICAgbG9uZwluOworICAgIGludAkJcmV0dmFsID0gT0s7CisgICAgbGluZW9mZl9UCWxvZmY7CisgICAgbGluZW5yX1QJb2xkX3RvcGxpbmUgPSBjdXJ3aW4tPndfdG9wbGluZTsKKworICAgIGlmIChjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCA9PSAxKSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgeworCWJlZXBfZmx1c2goKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICBmb3IgKCA7IGNvdW50ID4gMDsgLS1jb3VudCkKKyAgICB7CisJdmFsaWRhdGVfYm90bGluZSgpOworCS8qCisJICogSXQncyBhbiBlcnJvciB0byBtb3ZlIGEgcGFnZSB1cCB3aGVuIHRoZSBmaXJzdCBsaW5lIGlzIGFscmVhZHkgb24KKwkgKiB0aGUgc2NyZWVuLglJdCdzIGFuIGVycm9yIHRvIG1vdmUgYSBwYWdlIGRvd24gd2hlbiB0aGUgbGFzdCBsaW5lCisJICogaXMgb24gdGhlIHNjcmVlbiBhbmQgdGhlIHRvcGxpbmUgaXMgJ3Njcm9sbG9mZicgbGluZXMgZnJvbSB0aGUKKwkgKiBsYXN0IGxpbmUuCisJICovCisJaWYgKGRpciA9PSBGT1JXQVJECisJCT8gKChjdXJ3aW4tPndfdG9wbGluZSA+PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCAtIHBfc28pCisJCSAgICAmJiBjdXJ3aW4tPndfYm90bGluZSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQk6IChjdXJ3aW4tPndfdG9wbGluZSA9PSAxCisjaWZkZWYgRkVBVF9ESUZGCisJCSAgICAmJiBjdXJ3aW4tPndfdG9wZmlsbCA9PQorCQkJCSAgICBkaWZmX2NoZWNrX2ZpbGwoY3Vyd2luLCBjdXJ3aW4tPndfdG9wbGluZSkKKyNlbmRpZgorCQkgICAgKSkKKwl7CisJICAgIGJlZXBfZmx1c2goKTsKKwkgICAgcmV0dmFsID0gRkFJTDsKKwkgICAgYnJlYWs7CisJfQorCisjaWZkZWYgRkVBVF9ESUZGCisJbG9mZi5maWxsID0gMDsKKyNlbmRpZgorCWlmIChkaXIgPT0gRk9SV0FSRCkKKwl7CisJCQkJCS8qIGF0IGVuZCBvZiBmaWxlICovCisJICAgIGlmIChjdXJ3aW4tPndfYm90bGluZSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSAgICB7CisJCWN1cndpbi0+d190b3BsaW5lID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisjaWZkZWYgRkVBVF9ESUZGCisJCWN1cndpbi0+d190b3BmaWxsID0gMDsKKyNlbmRpZgorCQljdXJ3aW4tPndfdmFsaWQgJj0gfihWQUxJRF9XUk9XfFZBTElEX0NST1cpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBGb3IgdGhlIG92ZXJsYXAsIHN0YXJ0IHdpdGggdGhlIGxpbmUganVzdCBiZWxvdyB0aGUgd2luZG93CisJCSAqIGFuZCBnbyB1cHdhcmRzLiAqLworCQlsb2ZmLmxudW0gPSBjdXJ3aW4tPndfYm90bGluZTsKKyNpZmRlZiBGRUFUX0RJRkYKKwkJbG9mZi5maWxsID0gZGlmZl9jaGVja19maWxsKGN1cndpbiwgbG9mZi5sbnVtKQorCQkJCQkJICAgICAgLSBjdXJ3aW4tPndfZmlsbGVyX3Jvd3M7CisjZW5kaWYKKwkJZ2V0X3Njcm9sbF9vdmVybGFwKCZsb2ZmLCAtMSk7CisJCWN1cndpbi0+d190b3BsaW5lID0gbG9mZi5sbnVtOworI2lmZGVmIEZFQVRfRElGRgorCQljdXJ3aW4tPndfdG9wZmlsbCA9IGxvZmYuZmlsbDsKKwkJY2hlY2tfdG9wZmlsbChjdXJ3aW4sIEZBTFNFKTsKKyNlbmRpZgorCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJ3aW4tPndfdG9wbGluZTsKKwkJY3Vyd2luLT53X3ZhbGlkICY9IH4oVkFMSURfV0NPTHxWQUxJRF9DSEVJR0hUfFZBTElEX1dST1d8CisJCQkJICAgVkFMSURfQ1JPV3xWQUxJRF9CT1RMSU5FfFZBTElEX0JPVExJTkVfQVApOworCSAgICB9CisJfQorCWVsc2UJLyogZGlyID09IEJBQ0tXQVJEUyAqLworCXsKKyNpZmRlZiBGRUFUX0RJRkYKKwkgICAgaWYgKGN1cndpbi0+d190b3BsaW5lID09IDEpCisJICAgIHsKKwkJLyogSW5jbHVkZSBtYXggbnVtYmVyIG9mIGZpbGxlciBsaW5lcyAqLworCQltYXhfdG9wZmlsbCgpOworCQljb250aW51ZTsKKwkgICAgfQorI2VuZGlmCisJICAgIC8qIEZpbmQgdGhlIGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgd2luZG93IHRoYXQgaXMgZ29pbmcgdG8gYmUgdGhlCisJICAgICAqIGxpbmUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgd2luZG93LiAgTWFrZSBzdXJlIHRoaXMgcmVzdWx0cyBpbgorCSAgICAgKiB0aGUgc2FtZSBsaW5lIGFzIGJlZm9yZSBkb2luZyBDVFJMLUYuICovCisJICAgIGxvZmYubG51bSA9IGN1cndpbi0+d190b3BsaW5lIC0gMTsKKyNpZmRlZiBGRUFUX0RJRkYKKwkgICAgbG9mZi5maWxsID0gZGlmZl9jaGVja19maWxsKGN1cndpbiwgbG9mZi5sbnVtICsgMSkKKwkJCQkJCQkgIC0gY3Vyd2luLT53X3RvcGZpbGw7CisjZW5kaWYKKwkgICAgZ2V0X3Njcm9sbF9vdmVybGFwKCZsb2ZmLCAxKTsKKworCSAgICBpZiAobG9mZi5sbnVtID49IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSAgICB7CisJCWxvZmYubG51bSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworI2lmZGVmIEZFQVRfRElGRgorCQlsb2ZmLmZpbGwgPSAwOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlib3RsaW5lX3RvcGxpbmUoJmxvZmYpOworI2VuZGlmCisJICAgIH0KKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbG9mZi5sbnVtOworCisJICAgIC8qIEZpbmQgdGhlIGxpbmUganVzdCBhYm92ZSB0aGUgbmV3IHRvcGxpbmUgdG8gZ2V0IHRoZSByaWdodCBsaW5lCisJICAgICAqIGF0IHRoZSBib3R0b20gb2YgdGhlIHdpbmRvdy4gKi8KKwkgICAgbiA9IDA7CisJICAgIHdoaWxlIChuIDw9IGN1cndpbi0+d19oZWlnaHQgJiYgbG9mZi5sbnVtID49IDEpCisJICAgIHsKKwkJdG9wbGluZV9iYWNrKCZsb2ZmKTsKKwkJbiArPSBsb2ZmLmhlaWdodDsKKwkgICAgfQorCSAgICBpZiAobiA8PSBjdXJ3aW4tPndfaGVpZ2h0KQkJICAgIC8qIGF0IGJlZ2luIG9mIGZpbGUgKi8KKwkgICAgeworCQljdXJ3aW4tPndfdG9wbGluZSA9IDE7CisjaWZkZWYgRkVBVF9ESUZGCisJCW1heF90b3BmaWxsKCk7CisjZW5kaWYKKwkJY3Vyd2luLT53X3ZhbGlkICY9IH4oVkFMSURfV1JPV3xWQUxJRF9DUk9XfFZBTElEX0JPVExJTkUpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBHbyB0d28gbGluZXMgZm9yd2FyZCBhZ2Fpbi4gKi8KKyNpZmRlZiBGRUFUX0RJRkYKKwkJdG9wbGluZV9ib3RsaW5lKCZsb2ZmKTsKKyNlbmRpZgorCQlib3RsaW5lX2ZvcncoJmxvZmYpOworCQlib3RsaW5lX2ZvcncoJmxvZmYpOworI2lmZGVmIEZFQVRfRElGRgorCQlib3RsaW5lX3RvcGxpbmUoJmxvZmYpOworI2VuZGlmCisjaWZkZWYgRkVBVF9GT0xESU5HCisJCS8qIFdlJ3JlIGF0IHRoZSB3cm9uZyBlbmQgb2YgYSBmb2xkIG5vdy4gKi8KKwkJKHZvaWQpaGFzRm9sZGluZyhsb2ZmLmxudW0sICZsb2ZmLmxudW0sIE5VTEwpOworI2VuZGlmCisKKwkJLyogQWx3YXlzIHNjcm9sbCBhdCBsZWFzdCBvbmUgbGluZS4gIEF2b2lkIGdldHRpbmcgc3R1Y2sgb24KKwkJICogdmVyeSBsb25nIGxpbmVzLiAqLworCQlpZiAobG9mZi5sbnVtID49IGN1cndpbi0+d190b3BsaW5lCisjaWZkZWYgRkVBVF9ESUZGCisJCQkmJiAobG9mZi5sbnVtID4gY3Vyd2luLT53X3RvcGxpbmUKKwkJCSAgICB8fCBsb2ZmLmZpbGwgPj0gY3Vyd2luLT53X3RvcGZpbGwpCisjZW5kaWYKKwkJCSkKKwkJeworI2lmZGVmIEZFQVRfRElGRgorCQkgICAgLyogRmlyc3QgdHJ5IHVzaW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxsZXIgbGluZXMuICBJZgorCQkgICAgICogdGhhdCdzIG5vdCBlbm91Z2gsIGJhY2t1cCBvbmUgbGluZS4gKi8KKwkJICAgIGxvZmYuZmlsbCA9IGN1cndpbi0+d190b3BmaWxsOworCQkgICAgaWYgKGN1cndpbi0+d190b3BmaWxsIDwgZGlmZl9jaGVja19maWxsKGN1cndpbiwKKwkJCQkJCQkgICBjdXJ3aW4tPndfdG9wbGluZSkpCisJCQltYXhfdG9wZmlsbCgpOworCQkgICAgaWYgKGN1cndpbi0+d190b3BmaWxsID09IGxvZmYuZmlsbCkKKyNlbmRpZgorCQkgICAgeworCQkJLS1jdXJ3aW4tPndfdG9wbGluZTsKKyNpZmRlZiBGRUFUX0RJRkYKKwkJCWN1cndpbi0+d190b3BmaWxsID0gMDsKKyNlbmRpZgorCQkgICAgfQorCQkgICAgY29tcF9ib3RsaW5lKGN1cndpbik7CisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJ3aW4tPndfYm90bGluZSAtIDE7CisJCSAgICBjdXJ3aW4tPndfdmFsaWQgJj0gfihWQUxJRF9XQ09MfFZBTElEX0NIRUlHSFR8CisJCQkgICAgVkFMSURfV1JPV3xWQUxJRF9DUk9XKTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGN1cndpbi0+d190b3BsaW5lID0gbG9mZi5sbnVtOworI2lmZGVmIEZFQVRfRElGRgorCQkgICAgY3Vyd2luLT53X3RvcGZpbGwgPSBsb2ZmLmZpbGw7CisJCSAgICBjaGVja190b3BmaWxsKGN1cndpbiwgRkFMU0UpOworI2VuZGlmCisJCSAgICBjdXJ3aW4tPndfdmFsaWQgJj0gfihWQUxJRF9XUk9XfFZBTElEX0NST1d8VkFMSURfQk9UTElORSk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgZm9sZEFkanVzdEN1cnNvcigpOworI2VuZGlmCisgICAgY3Vyc29yX2NvcnJlY3QoKTsKKyAgICBiZWdpbmxpbmUoQkxfU09MIHwgQkxfRklYKTsKKyAgICBjdXJ3aW4tPndfdmFsaWQgJj0gfihWQUxJRF9XQ09MfFZBTElEX1dST1d8VkFMSURfVklSVENPTCk7CisKKyAgICAvKgorICAgICAqIEF2b2lkIHRoZSBzY3JlZW4ganVtcGluZyB1cCBhbmQgZG93biB3aGVuICdzY3JvbGxvZmYnIGlzIG5vbi16ZXJvLgorICAgICAqIEJ1dCBtYWtlIHN1cmUgd2Ugc2Nyb2xsIGF0IGxlYXN0IG9uZSBsaW5lIChoYXBwZW5zIHdpdGggbWl4IG9mIGxvbmcKKyAgICAgKiB3cmFwcGluZyBsaW5lcyBhbmQgbm9uLXdyYXBwaW5nIGxpbmUpLgorICAgICAqLworICAgIGlmIChyZXR2YWwgPT0gT0sgJiYgZGlyID09IEZPUldBUkQgJiYgY2hlY2tfdG9wX29mZnNldCgpKQorICAgIHsKKwlzY3JvbGxfY3Vyc29yX3RvcCgxLCBGQUxTRSk7CisJaWYgKGN1cndpbi0+d190b3BsaW5lIDw9IG9sZF90b3BsaW5lCisJCQkJICAmJiBvbGRfdG9wbGluZSA8IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXsKKwkgICAgY3Vyd2luLT53X3RvcGxpbmUgPSBvbGRfdG9wbGluZSArIDE7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgICh2b2lkKWhhc0ZvbGRpbmcoY3Vyd2luLT53X3RvcGxpbmUsICZjdXJ3aW4tPndfdG9wbGluZSwgTlVMTCk7CisjZW5kaWYKKwl9CisgICAgfQorCisgICAgcmVkcmF3X2xhdGVyKFZBTElEKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogRGVjaWRlIGhvdyBtdWNoIG92ZXJsYXAgdG8gdXNlIGZvciBwYWdlLXVwIG9yIHBhZ2UtZG93biBzY3JvbGxpbmcuCisgKiBUaGlzIGlzIHN5bW1ldHJpYywgc28gdGhhdCBkb2luZyBib3RoIGtlZXBzIHRoZSBzYW1lIGxpbmVzIGRpc3BsYXllZC4KKyAqIFRocmVlIGxpbmVzIGFyZSBleGFtaW5lZDoKKyAqCisgKiAgYmVmb3JlIENUUkwtRgkgICAgYWZ0ZXIgQ1RSTC1GIC8gYmVmb3JlIENUUkwtQgorICogICAgIGV0Yy4JCQlsMQorICogIGwxIGxhc3QgYnV0IG9uZSBsaW5lCS0tLS0tLS0tLS0tLQorICogIGwyIGxhc3QgdGV4dCBsaW5lCQlsMiB0b3AgdGV4dCBsaW5lCisgKiAgLS0tLS0tLS0tLS0tLQkJbDMgc2Vjb25kIHRleHQgbGluZQorICogIGwzCQkJCSAgIGV0Yy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitnZXRfc2Nyb2xsX292ZXJsYXAobHAsIGRpcikKKyAgICBsaW5lb2ZmX1QJKmxwOworICAgIGludAkJZGlyOworeworICAgIGludAkJaDEsIGgyLCBoMywgaDQ7CisgICAgaW50CQltaW5faGVpZ2h0ID0gY3Vyd2luLT53X2hlaWdodCAtIDI7CisgICAgbGluZW9mZl9UCWxvZmYwLCBsb2ZmMSwgbG9mZjI7CisKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBpZiAobHAtPmZpbGwgPiAwKQorCWxwLT5oZWlnaHQgPSAxOworICAgIGVsc2UKKwlscC0+aGVpZ2h0ID0gcGxpbmVzX25vZmlsbChscC0+bG51bSk7CisjZWxzZQorICAgIGxwLT5oZWlnaHQgPSBwbGluZXMobHAtPmxudW0pOworI2VuZGlmCisgICAgaDEgPSBscC0+aGVpZ2h0OworICAgIGlmIChoMSA+IG1pbl9oZWlnaHQpCisJcmV0dXJuOwkJLyogbm8gb3ZlcmxhcCAqLworCisgICAgbG9mZjAgPSAqbHA7CisgICAgaWYgKGRpciA+IDApCisJYm90bGluZV9mb3J3KGxwKTsKKyAgICBlbHNlCisJdG9wbGluZV9iYWNrKGxwKTsKKyAgICBoMiA9IGxwLT5oZWlnaHQ7CisgICAgaWYgKGgyICsgaDEgPiBtaW5faGVpZ2h0KQorICAgIHsKKwkqbHAgPSBsb2ZmMDsJLyogbm8gb3ZlcmxhcCAqLworCXJldHVybjsKKyAgICB9CisKKyAgICBsb2ZmMSA9ICpscDsKKyAgICBpZiAoZGlyID4gMCkKKwlib3RsaW5lX2ZvcncobHApOworICAgIGVsc2UKKwl0b3BsaW5lX2JhY2sobHApOworICAgIGgzID0gbHAtPmhlaWdodDsKKyAgICBpZiAoaDMgKyBoMiA+IG1pbl9oZWlnaHQpCisgICAgeworCSpscCA9IGxvZmYwOwkvKiBubyBvdmVybGFwICovCisJcmV0dXJuOworICAgIH0KKworICAgIGxvZmYyID0gKmxwOworICAgIGlmIChkaXIgPiAwKQorCWJvdGxpbmVfZm9ydyhscCk7CisgICAgZWxzZQorCXRvcGxpbmVfYmFjayhscCk7CisgICAgaDQgPSBscC0+aGVpZ2h0OworICAgIGlmIChoNCArIGgzICsgaDIgPiBtaW5faGVpZ2h0IHx8IGgzICsgaDIgKyBoMSA+IG1pbl9oZWlnaHQpCisJKmxwID0gbG9mZjE7CS8qIDEgbGluZSBvdmVybGFwICovCisgICAgZWxzZQorCSpscCA9IGxvZmYyOwkvKiAyIGxpbmVzIG92ZXJsYXAgKi8KKyAgICByZXR1cm47Cit9CisKKy8qICNkZWZpbmUgS0VFUF9TQ1JFRU5fTElORSAqLworLyoKKyAqIFNjcm9sbCAnc2Nyb2xsJyBsaW5lcyB1cCBvciBkb3duLgorICovCisgICAgdm9pZAoraGFsZnBhZ2UoZmxhZywgUHJlbnVtKQorICAgIGludAkJZmxhZzsKKyAgICBsaW5lbnJfVAlQcmVudW07Cit7CisgICAgbG9uZwlzY3JvbGxlZCA9IDA7CisgICAgaW50CQlpOworICAgIGludAkJbjsKKyAgICBpbnQJCXJvb207CisKKyAgICBpZiAoUHJlbnVtKQorCWN1cndpbi0+d19wX3NjciA9IChQcmVudW0gPiBjdXJ3aW4tPndfaGVpZ2h0KSA/CisJCQkJCQljdXJ3aW4tPndfaGVpZ2h0IDogUHJlbnVtOworICAgIG4gPSAoY3Vyd2luLT53X3Bfc2NyIDw9IGN1cndpbi0+d19oZWlnaHQpID8KKwkJCQkgICAgY3Vyd2luLT53X3Bfc2NyIDogY3Vyd2luLT53X2hlaWdodDsKKworICAgIHZhbGlkYXRlX2JvdGxpbmUoKTsKKyAgICByb29tID0gY3Vyd2luLT53X2VtcHR5X3Jvd3M7CisjaWZkZWYgRkVBVF9ESUZGCisgICAgcm9vbSArPSBjdXJ3aW4tPndfZmlsbGVyX3Jvd3M7CisjZW5kaWYKKyAgICBpZiAoZmxhZykKKyAgICB7CisJLyoKKwkgKiBzY3JvbGwgdGhlIHRleHQgdXAKKwkgKi8KKwl3aGlsZSAobiA+IDAgJiYgY3Vyd2luLT53X2JvdGxpbmUgPD0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJeworI2lmZGVmIEZFQVRfRElGRgorCSAgICBpZiAoY3Vyd2luLT53X3RvcGZpbGwgPiAwKQorCSAgICB7CisJCWkgPSAxOworCQlpZiAoLS1uIDwgMCAmJiBzY3JvbGxlZCA+IDApCisJCSAgICBicmVhazsKKwkJLS1jdXJ3aW4tPndfdG9wZmlsbDsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkgICAgeworI2lmZGVmIEZFQVRfRElGRgorCQlpID0gcGxpbmVzX25vZmlsbChjdXJ3aW4tPndfdG9wbGluZSk7CisjZWxzZQorCQlpID0gcGxpbmVzKGN1cndpbi0+d190b3BsaW5lKTsKKyNlbmRpZgorCQluIC09IGk7CisJCWlmIChuIDwgMCAmJiBzY3JvbGxlZCA+IDApCisJCSAgICBicmVhazsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkJKHZvaWQpaGFzRm9sZGluZyhjdXJ3aW4tPndfdG9wbGluZSwgTlVMTCwgJmN1cndpbi0+d190b3BsaW5lKTsKKyNlbmRpZgorCQkrK2N1cndpbi0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfRElGRgorCQljdXJ3aW4tPndfdG9wZmlsbCA9IGRpZmZfY2hlY2tfZmlsbChjdXJ3aW4sIGN1cndpbi0+d190b3BsaW5lKTsKKyNlbmRpZgorCisjaWZuZGVmIEtFRVBfU0NSRUVOX0xJTkUKKwkJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQl7CisJCSAgICArK2N1cndpbi0+d19jdXJzb3IubG51bTsKKwkJICAgIGN1cndpbi0+d192YWxpZCAmPQorCQkJCSAgICB+KFZBTElEX1ZJUlRDT0x8VkFMSURfQ0hFSUdIVHxWQUxJRF9XQ09MKTsKKwkJfQorI2VuZGlmCisJICAgIH0KKwkgICAgY3Vyd2luLT53X3ZhbGlkICY9IH4oVkFMSURfQ1JPV3xWQUxJRF9XUk9XKTsKKwkgICAgc2Nyb2xsZWQgKz0gaTsKKworCSAgICAvKgorCSAgICAgKiBDb3JyZWN0IHdfYm90bGluZSBmb3IgY2hhbmdlZCB3X3RvcGxpbmUuCisJICAgICAqIFdvbid0IHdvcmsgd2hlbiB0aGVyZSBhcmUgZmlsbGVyIGxpbmVzLgorCSAgICAgKi8KKyNpZmRlZiBGRUFUX0RJRkYKKwkgICAgaWYgKGN1cndpbi0+d19wX2RpZmYpCisJCWN1cndpbi0+d192YWxpZCAmPSB+KFZBTElEX0JPVExJTkV8VkFMSURfQk9UTElORV9BUCk7CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCXJvb20gKz0gaTsKKwkJZG8KKwkJeworCQkgICAgaSA9IHBsaW5lcyhjdXJ3aW4tPndfYm90bGluZSk7CisJCSAgICBpZiAoaSA+IHJvb20pCisJCQlicmVhazsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkJICAgICh2b2lkKWhhc0ZvbGRpbmcoY3Vyd2luLT53X2JvdGxpbmUsIE5VTEwsCisJCQkJCQkJICAmY3Vyd2luLT53X2JvdGxpbmUpOworI2VuZGlmCisJCSAgICArK2N1cndpbi0+d19ib3RsaW5lOworCQkgICAgcm9vbSAtPSBpOworCQl9IHdoaWxlIChjdXJ3aW4tPndfYm90bGluZSA8PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCk7CisJICAgIH0KKwl9CisKKyNpZm5kZWYgS0VFUF9TQ1JFRU5fTElORQorCS8qCisJICogV2hlbiBoaXQgYm90dG9tIG9mIHRoZSBmaWxlOiBtb3ZlIGN1cnNvciBkb3duLgorCSAqLworCWlmIChuID4gMCkKKwl7CisjIGlmZGVmIEZFQVRfRk9MRElORworCSAgICBpZiAoaGFzQW55Rm9sZGluZyhjdXJ3aW4pKQorCSAgICB7CisJCXdoaWxlICgtLW4gPj0gMAorCQkJJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtIDwgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCXsKKwkJICAgICh2b2lkKWhhc0ZvbGRpbmcoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBOVUxMLAorCQkJCQkJICAgICAgJmN1cndpbi0+d19jdXJzb3IubG51bSk7CisJCSAgICArK2N1cndpbi0+d19jdXJzb3IubG51bTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKyMgZW5kaWYKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtICs9IG47CisJICAgIGNoZWNrX2N1cnNvcl9sbnVtKCk7CisJfQorI2Vsc2UKKwkvKiB0cnkgdG8gcHV0IHRoZSBjdXJzb3IgaW4gdGhlIHNhbWUgc2NyZWVuIGxpbmUgKi8KKwl3aGlsZSAoKGN1cndpbi0+d19jdXJzb3IubG51bSA8IGN1cndpbi0+d190b3BsaW5lIHx8IHNjcm9sbGVkID4gMCkKKwkJCSAgICAgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtIDwgY3Vyd2luLT53X2JvdGxpbmUgLSAxKQorCXsKKwkgICAgc2Nyb2xsZWQgLT0gcGxpbmVzKGN1cndpbi0+d19jdXJzb3IubG51bSk7CisJICAgIGlmIChzY3JvbGxlZCA8IDAgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtID49IGN1cndpbi0+d190b3BsaW5lKQorCQlicmVhazsKKyMgaWZkZWYgRkVBVF9GT0xESU5HCisJICAgICh2b2lkKWhhc0ZvbGRpbmcoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBOVUxMLAorCQkJCQkJICAgICAgJmN1cndpbi0+d19jdXJzb3IubG51bSk7CisjIGVuZGlmCisJICAgICsrY3Vyd2luLT53X2N1cnNvci5sbnVtOworCX0KKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qCisJICogc2Nyb2xsIHRoZSB0ZXh0IGRvd24KKwkgKi8KKwl3aGlsZSAobiA+IDAgJiYgY3Vyd2luLT53X3RvcGxpbmUgPiAxKQorCXsKKyNpZmRlZiBGRUFUX0RJRkYKKwkgICAgaWYgKGN1cndpbi0+d190b3BmaWxsIDwgZGlmZl9jaGVja19maWxsKGN1cndpbiwgY3Vyd2luLT53X3RvcGxpbmUpKQorCSAgICB7CisJCWkgPSAxOworCQlpZiAoLS1uIDwgMCAmJiBzY3JvbGxlZCA+IDApCisJCSAgICBicmVhazsKKwkJKytjdXJ3aW4tPndfdG9wZmlsbDsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkgICAgeworI2lmZGVmIEZFQVRfRElGRgorCQlpID0gcGxpbmVzX25vZmlsbChjdXJ3aW4tPndfdG9wbGluZSAtIDEpOworI2Vsc2UKKwkJaSA9IHBsaW5lcyhjdXJ3aW4tPndfdG9wbGluZSAtIDEpOworI2VuZGlmCisJCW4gLT0gaTsKKwkJaWYgKG4gPCAwICYmIHNjcm9sbGVkID4gMCkKKwkJICAgIGJyZWFrOworCQktLWN1cndpbi0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfRk9MRElORworCQkodm9pZCloYXNGb2xkaW5nKGN1cndpbi0+d190b3BsaW5lLCAmY3Vyd2luLT53X3RvcGxpbmUsIE5VTEwpOworI2VuZGlmCisjaWZkZWYgRkVBVF9ESUZGCisJCWN1cndpbi0+d190b3BmaWxsID0gMDsKKyNlbmRpZgorCSAgICB9CisJICAgIGN1cndpbi0+d192YWxpZCAmPSB+KFZBTElEX0NST1d8VkFMSURfV1JPV3wKKwkJCQkJICAgICAgVkFMSURfQk9UTElORXxWQUxJRF9CT1RMSU5FX0FQKTsKKwkgICAgc2Nyb2xsZWQgKz0gaTsKKyNpZm5kZWYgS0VFUF9TQ1JFRU5fTElORQorCSAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID4gMSkKKwkgICAgeworCQktLWN1cndpbi0+d19jdXJzb3IubG51bTsKKwkJY3Vyd2luLT53X3ZhbGlkICY9IH4oVkFMSURfVklSVENPTHxWQUxJRF9DSEVJR0hUfFZBTElEX1dDT0wpOworCSAgICB9CisjZW5kaWYKKwl9CisjaWZuZGVmIEtFRVBfU0NSRUVOX0xJTkUKKwkvKgorCSAqIFdoZW4gaGl0IHRvcCBvZiB0aGUgZmlsZTogbW92ZSBjdXJzb3IgdXAuCisJICovCisJaWYgKG4gPiAwKQorCXsKKwkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8PSAobGluZW5yX1QpbikKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gMTsKKwkgICAgZWxzZQorIyBpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgaWYgKGhhc0FueUZvbGRpbmcoY3Vyd2luKSkKKwkgICAgeworCQl3aGlsZSAoLS1uID49IDAgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtID4gMSkKKwkJeworCQkgICAgLS1jdXJ3aW4tPndfY3Vyc29yLmxudW07CisJCSAgICAodm9pZCloYXNGb2xkaW5nKGN1cndpbi0+d19jdXJzb3IubG51bSwKKwkJCQkJCSZjdXJ3aW4tPndfY3Vyc29yLmxudW0sIE5VTEwpOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorIyBlbmRpZgorCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gLT0gbjsKKwl9CisjZWxzZQorCS8qIHRyeSB0byBwdXQgdGhlIGN1cnNvciBpbiB0aGUgc2FtZSBzY3JlZW4gbGluZSAqLworCXNjcm9sbGVkICs9IG47CSAgICAvKiBtb3ZlIGN1cnNvciB3aGVuIHRvcGxpbmUgaXMgMSAqLworCXdoaWxlIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiBjdXJ3aW4tPndfdG9wbGluZQorCSAgICAgICYmIChzY3JvbGxlZCA+IDAgfHwgY3Vyd2luLT53X2N1cnNvci5sbnVtID49IGN1cndpbi0+d19ib3RsaW5lKSkKKwl7CisJICAgIHNjcm9sbGVkIC09IHBsaW5lcyhjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSAxKTsKKwkgICAgaWYgKHNjcm9sbGVkIDwgMCAmJiBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPCBjdXJ3aW4tPndfYm90bGluZSkKKwkJYnJlYWs7CisJICAgIC0tY3Vyd2luLT53X2N1cnNvci5sbnVtOworIyBpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgZm9sZEFkanVzdEN1cnNvcigpOworIyBlbmRpZgorCX0KKyNlbmRpZgorICAgIH0KKyMgaWZkZWYgRkVBVF9GT0xESU5HCisgICAgLyogTW92ZSBjdXJzb3IgdG8gZmlyc3QgbGluZSBvZiBjbG9zZWQgZm9sZC4gKi8KKyAgICBmb2xkQWRqdXN0Q3Vyc29yKCk7CisjIGVuZGlmCisjaWZkZWYgRkVBVF9ESUZGCisgICAgY2hlY2tfdG9wZmlsbChjdXJ3aW4sICFmbGFnKTsKKyNlbmRpZgorICAgIGN1cnNvcl9jb3JyZWN0KCk7CisgICAgYmVnaW5saW5lKEJMX1NPTCB8IEJMX0ZJWCk7CisgICAgcmVkcmF3X2xhdGVyKFZBTElEKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9teXNpZ24gYi9zcmMvbXlzaWduCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MjhlMTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbXlzaWduCkBAIC0wLDAgKzEgQEAKKz1hdXRvL2NvbmZpZ3VyZRstbGFzdHVwZGF0ZT0xMDg0Nzg5ODc1LjI1Gz1jb25maWd1cmUuaW5AbWQ1PThmMmNmOTEzNWUyOTcwOTRjNTMwODBjNTNlNTQxYTBmGy1AYnVpbGRjaGVjaz0yYzkyYTllNDY3NmIyMzA0ZmFiOWFmMTZmMTY2NDE5NBsKZGlmZiAtLWdpdCBhL3NyYy9uYmRlYnVnLmMgYi9zcmMvbmJkZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjg3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbmJkZWJ1Zy5jCkBAIC0wLDAgKzEsMTgyIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9OCBzdz04OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCVZpc3VhbCBXb3Jrc2hvcCBpbnRlZ3JhdGlvbiBieSBHb3Jkb24gUHJpZXVyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBOZXRCZWFucyBEZWJ1Z2dpbmcgVG9vbHMuIFdoYXQgYXJlIHRoZXNlIHRvb2xzIGFuZCB3aHkgYXJlIHRoZXkgaW1wb3J0YW50PworICogVGhlcmUgYXJlIHR3byBtYWluIHRvb2xzIGhlcmUuIFRoZSBmaXJzdCB0b29sIGlzIGEgdG9vbCBmb3IgZGVsYXlpbmcgb3IKKyAqIHN0b3BwaW5nIGd2aW0gZHVyaW5nIHN0YXJ0dXAuICBUaGUgc2Vjb25kIHRvb2wgaXMgYSBwcm90b2NvbCBsb2cgdG9vbC4KKyAqCisgKiBUaGUgc3RhcnR1cCBkZWxheSB0b29sIGlzIGNhbGxlZCBuYmRlYnVnX3dhaXQoKS4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBmb3IKKyAqIGRlYnVnZ2luZyBzdGFydHVwIHByb2JsZW1zIGJlY2F1c2UgZ3ZpbSB3aWxsIGJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSBmcm9tCisgKiBuZXRiZWFucyBhbmQgY2Fubm90IGJlIHJ1biBkaXJlY3RseSBmcm9tIGEgZGVidWdnZXIuIFRoZSBvbmx5IHdheSB0byBkZWJ1ZworICogYSBndmltIHN0YXJ0ZWQgYnkgbmV0YmVhbnMgaXMgYnkgYXR0YWNoaW5nIGEgZGVidWdnZXIgdG8gaXQuIFdpdGhvdXQgdGhpcworICogdG9vbCBhbGwgc3RhcnVwIGNvZGUgd2lsbCBoYXZlIGNvbXBsZXRlZCBiZWZvcmUgeW91IGNhbiBnZXQgdGhlIHBpZCBhbmQKKyAqIGF0dGFjaC4KKyAqCisgKiBUaGUgc2Vjb25kIHRvb2wgaXMgYSBsb2cgdG9vbC4KKyAqCisgKiBUaGlzIGNvZGUgbXVzdCBoYXZlIE5CREVCVUcgZGVmaW5lZCBmb3IgaXQgdG8gYmUgY29tcGlsZWQgaW50byB2aW0vZ3ZpbS4KKyAqLworCisjaWZkZWYgTkJERUJVRworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlICJ2aW0uaCIKKworRklMRQkJKm5iX2RlYnVnID0gTlVMTDsKK3VfaW50CQkgbmJfZGxldmVsID0gMDsJCS8qIG5iX2RlYnVnIHZlcmJvc2l0eSBsZXZlbCAqLworCit2b2lkCQkgbmJkYihjaGFyICosIC4uLik7Cit2b2lkCQkgbmJ0cmFjZShjaGFyICosIC4uLik7CisKK3N0YXRpYyBpbnQJIGxvb2t1cChjaGFyICopOworI2lmbmRlZiBGRUFUX0dVSV9XMzIKK3N0YXRpYyBpbnQJIGVycm9ySGFuZGxlcihEaXNwbGF5ICosIFhFcnJvckV2ZW50ICopOworI2VuZGlmCisKKy8qCisgKiBuYmRlYnVnX3dhaXQJLSAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZGVsYXkgb3Igc3RvcCBleGVjdXRpb24gb2YgdmltLgorICoJCSAgICBJdHMgbm9ybWFsbHkgdXNlZCB0byBkZWxheSBzdGFydHVwIHdoaWxlIGF0dGFjaGluZyBhCisgKgkJICAgIGRlYnVnZ2VyIHRvIGEgcnVubmluZyBwcm9jZXNzLiBTaW5jZSB3b3Jrc2hvcCBzdGFydHMgZ3ZpbQorICoJCSAgICBmcm9tIGEgYmFja2dyb3VuZCBwcm9jZXNzIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGRlYnVnCisgKgkJICAgIHN0YXJ0dXAgcHJvYmxlbXMuCisgKi8KKwordm9pZCBuYmRlYnVnX3dhaXQoCisJdV9pbnQJCSB3YWl0X2ZsYWdzLAkvKiB0ZWxscyB3aGF0IHRvIGRvICovCisJY2hhcgkJKndhaXRfdmFyLAkvKiB3YWl0IGVudmlyb25tZW50IHZhcmlhYmxlICovCisJdV9pbnQJCSB3YWl0X3NlY3MpCS8qIGhvdyBtYW55IHNlY29uZHMgdG8gd2FpdCAqLworeworCisJaW5pdF9ob21lZGlyKCk7CQkJLyogbm90IGluaXRlZCB5ZXQgKi8KKyNpZmRlZiBVU0VfV0REVU1QCisJV0REdW1wKDAsIDAsIDApOworI2VuZGlmCisKKwkvKiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIG9ubHkgKi8KKwlpZiAod2FpdF9mbGFncyAmIFdUX0VOViAmJiB3YWl0X3ZhciAmJiBnZXRlbnYod2FpdF92YXIpICE9IE5VTEwpIHsKKwkJc2xlZXAoYXRvaShnZXRlbnYod2FpdF92YXIpKSk7CisJfSBlbHNlIGlmICh3YWl0X2ZsYWdzICYgV1RfV0FJVCAmJiBsb29rdXAoIn4vLmd2aW13YWl0IikpIHsKKwkJc2xlZXAod2FpdF9zZWNzID4gMCAmJiB3YWl0X3NlY3MgPCAxMjAgPyB3YWl0X3NlY3MgOiAyMCk7CisJfSBlbHNlIGlmICh3YWl0X2ZsYWdzICYgV1RfU1RPUCAmJiBsb29rdXAoIn4vLmd2aW1zdG9wIikpIHsKKwkJaW50IHcgPSAxOworCQl3aGlsZSAodykgeworCQkJOworCQl9CisJfQorfSAgICAvKiBlbmQgbmJkZWJ1Z193YWl0ICovCisKKwordm9pZAorbmJkZWJ1Z19sb2dfaW5pdCgKKwljaGFyCQkqbG9nX3ZhciwJLyogZW52IHZhciB3aXRoIGxvZyBmaWxlICovCisJY2hhcgkJKmxldmVsX3ZhcikJLyogZW52IHZhciB3aXRoIG5iX2RlYnVnIGxldmVsICovCit7CisJY2hhcgkJKmZpbGU7CQkvKiBwb3NzaWJsZSBuYl9kZWJ1ZyBvdXRwdXQgZmlsZSAqLworCWNoYXIJCSpjcDsJCS8qIG5iX2RsZXZlbCBwb2ludGVyICovCisKKwlpZiAobG9nX3ZhciAmJiAoZmlsZSA9IGdldGVudihsb2dfdmFyKSkgIT0gTlVMTCkgeworCQl0aW1lX3Qgbm93OworCisJCW5iX2RlYnVnID0gZm9wZW4oZmlsZSwgImEiKTsKKwkJdGltZSgmbm93KTsKKwkJZnByaW50ZihuYl9kZWJ1ZywgIiVzIiwgYXNjdGltZShsb2NhbHRpbWUoJm5vdykpKTsKKwkJaWYgKGxldmVsX3ZhciAmJiAoY3AgPSBnZXRlbnYobGV2ZWxfdmFyKSkgIT0gTlVMTCkgeworCQkJbmJfZGxldmVsID0gc3RydG91bChjcCwgTlVMTCwgMCk7CisJCX0gZWxzZSB7CisJCQluYl9kbGV2ZWwgPSBOQl9UUkFDRTsJLyogZGVmYXVsdCBsZXZlbCAqLworCQl9CisJCS8qIFhTZXRFcnJvckhhbmRsZXIoZXJyb3JIYW5kbGVyKTsgKi8KKwl9CisKK30gICAgLyogZW5kIG5iZGVidWdfbG9nX2luaXQgKi8KKworCisKKwordm9pZAorbmJ0cmFjZSgKKwljaGFyCQkqZm10LAorCS4uLikKK3sKKwl2YV9saXN0CQkgYXA7CisKKwlpZiAobmJfZGVidWchPSBOVUxMICYmIChuYl9kbGV2ZWwgJiAoTkJfVFJBQ0UgfCBOQl9UUkFDRV9WRVJCT1NFKSkpIHsKKwkJdmFfc3RhcnQoYXAsIGZtdCk7CisJCXZmcHJpbnRmKG5iX2RlYnVnLCBmbXQsIGFwKTsKKwkJdmFfZW5kKGFwKTsKKwkJZmZsdXNoKG5iX2RlYnVnKTsKKwl9CisKK30gICAgLyogZW5kIG5idHJhY2UgKi8KKworCit2b2lkCituYmRiZygKKwljaGFyCQkqZm10LAorCS4uLikKK3sKKwl2YV9saXN0CQkgYXA7CisKKwlpZiAobmJfZGVidWcgIT0gTlVMTCkgeworCQl2YV9zdGFydChhcCwgZm10KTsKKwkJdmZwcmludGYobmJfZGVidWcsIGZtdCwgYXApOworCQl2YV9lbmQoYXApOworCQlmZmx1c2gobmJfZGVidWcpOworCX0KKworfSAgICAvKiBlbmQgbmJkYmcgKi8KKworCitzdGF0aWMgaW50Citsb29rdXAoCisJY2hhcgkJKmZpbGUpCit7CisJY2hhcgkJIGJ1ZltCVUZTSVpdOworCisJZXhwYW5kX2VudigoY2hhcl91ICopIGZpbGUsIChjaGFyX3UgKikgYnVmLCBCVUZTSVopOworCXJldHVybgorI2lmbmRlZiBGRUFUX0dVSV9XMzIKKwkJKGFjY2VzcyhidWYsIEZfT0spID09IDApOworI2Vsc2UKKwkJKGFjY2VzcyhidWYsIDApID09IDApOworI2VuZGlmCisKK30gICAgLyogZW5kIGxvb2t1cCAqLworCisjaWZuZGVmIEZFQVRfR1VJX1czMgorc3RhdGljIGludAorZXJyb3JIYW5kbGVyKAorCURpc3BsYXkJCSpkcHksCisJWEVycm9yRXZlbnQJKmVycikKK3sKKwljaGFyCQkgbXNnWzI1Nl07CisJY2hhcgkJIGJ1ZlsyNTZdOworCisJWEdldEVycm9yVGV4dChkcHksIGVyci0+ZXJyb3JfY29kZSwgbXNnLCBzaXplb2YobXNnKSk7CisJbmJkYmcoIlxuXG5OQkRFQlVHIFZpbTogWCBFcnJvciBvZiBmYWlsZWQgcmVxdWVzdDogJXNcbiIsIG1zZyk7CisKKwlzcHJpbnRmKGJ1ZiwgIiVkIiwgZXJyLT5yZXF1ZXN0X2NvZGUpOworCVhHZXRFcnJvckRhdGFiYXNlVGV4dChkcHksCisJICAgICJYUmVxdWVzdCIsIGJ1ZiwgIlVua25vd24iLCBtc2csIHNpemVvZihtc2cpKTsKKwluYmRiZygiXHRNYWpvciBvcGNvZGUgb2YgZmFpbGVkIHJlcXVlc3Q6ICVkICglcylcbiIsCisJICAgIGVyci0+cmVxdWVzdF9jb2RlLCBtc2cpOworCWlmIChlcnItPnJlcXVlc3RfY29kZSA+IDEyOCkgeworCQluYmRiZygiXHRNaW5vciBvcGNvZGUgb2YgZmFpbGVkIHJlcXVlc3Q6ICVkXG4iLAorCQkgICAgZXJyLT5taW5vcl9jb2RlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKyNlbmRpZiAvKiBOQkRFQlVHICovCmRpZmYgLS1naXQgYS9zcmMvbmJkZWJ1Zy5oIGIvc3JjL25iZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmIyYzA4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL25iZGVidWcuaApAQCAtMCwwICsxLDgxIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9OCBzdz04OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCVZpc3VhbCBXb3Jrc2hvcCBpbnRlZ3JhdGlvbiBieSBHb3Jkb24gUHJpZXVyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisKKyNpZm5kZWYgTkJERUJVR19ICisjZGVmaW5lIE5CREVCVUdfSAorCisjaWZkZWYgTkJERUJVRworCisjaWZuZGVmIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoYykgXAorICAgIGlmICghKGMpKSB7IFwKKwlmcHJpbnRmKHN0ZGVyciwgIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQsIGZpbGUgJXNcbiIsIFwKKwkJX19MSU5FX18sIF9fRklMRV9fKTsgXAorCWZmbHVzaChzdGRlcnIpOyBcCisJYWJvcnQoKTsgXAorICAgIH0KKyNlbmRpZgorCisjZGVmaW5lIG5iZGVidWcoYSkgbmJkYmcjI2EKKworI2RlZmluZSBOQl9UUkFDRQkJMHgwMDAwMDAwMQorI2RlZmluZSBOQl9UUkFDRV9WRVJCT1NFCTB4MDAwMDAwMDIKKyNkZWZpbmUgTkJfVFJBQ0VfQ09MT05DTUQJMHgwMDAwMDAwNAorI2RlZmluZSBOQl9ERUJVR19BTEwJCTB4ZmZmZmZmZmYKKworI2RlZmluZSBOQkRMRVZFTChmbGFncykJCShuYl9kZWJ1ZyAhPSBOVUxMICYmIChuYl9kbGV2ZWwgJiAoZmxhZ3MpKSkKKworI2RlZmluZSBOQkRFQlVHX1RSQUNFCTEKKy8vI2RlZmluZSBOQkRFQlVHX1NFTlNFCTIKKwordHlwZWRlZiBlbnVtIHsKKwkJV1RfRU5WID0gMSwJCS8qIGxvb2sgZm9yIGVudiB2YXIgaWYgc2V0ICovCisJCVdUX1dBSVQsCQkvKiBsb29rIGZvciB+Ly5ndmltd2FpdCBpZiBzZXQgKi8KKwkJV1RfU1RPUAkJCS8qIGxvb2sgZm9yIH4vLmd2aW1zdG9wIGlmIHNldCAqLworfSBXdFdhaXQ7CisKKwordm9pZAkJIG5iZGJnKGNoYXIgKiwgLi4uKTsKK3ZvaWQJCSBuYnRyYWNlKGNoYXIgKiwgLi4uKTsKKwordm9pZCBuYmRlYnVnX3dhaXQgX19BUkdTKCh1X2ludCB3YWl0X2ZsYWdzLCBjaGFyICp3YWl0X3ZhciwgdV9pbnQgd2FpdF9zZWNzKSk7Cit2b2lkIG5iZGVidWdfbG9nX2luaXQgX19BUkdTKChjaGFyICpsb2dfdmFyLCBjaGFyICpsZXZlbF92YXIpKTsKKworZXh0ZXJuIEZJTEUJKm5iX2RlYnVnOworZXh0ZXJuIHVfaW50CSBuYl9kbGV2ZWw7CQkvKiBuYl9kZWJ1ZyB2ZXJib3NpdHkgbGV2ZWwgKi8KKworIyBlbHNlCQkvKiBub3QgTkJERUJVRyAqLworCisjaWZuZGVmIEFTU0VSVAorIyBkZWZpbmUgQVNTRVJUKGMpCisjZW5kaWYKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgMiBzdHVicyBhcmUgbmVlZGVkIGJlY2F1c2UgYSBtYWNybyBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIG9mCisgKiB0aGUgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAqLworCit2b2lkCituYmRiZygKKwljaGFyCQkqZm10LAorCS4uLikKK3sKK30KKworCit2b2lkCituYnRyYWNlKAorCWNoYXIJCSpmbXQsCisJLi4uKQoreworfQorCisjZW5kaWYgLyogTkJERUJVRyAqLworI2VuZGlmIC8qIE5CREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL25ldGJlYW5zLmMgYi9zcmMvbmV0YmVhbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODdmMzViCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL25ldGJlYW5zLmMKQEAgLTAsMCArMSwzMTg1IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCU5ldGJlYW5zIGludGVncmF0aW9uIGJ5IERhdmlkIFdlYXRoZXJmb3JkCisgKgkJCUFkb3B0ZWQgZm9yIFdpbjMyIGJ5IFNlcmdleSBLaG9yZXYKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKy8qCisgKiBJbXBsZW1lbnRzIGNsaWVudCBzaWRlIG9mIG9yZy5uZXRiZWFucy5tb2R1bGVzLmVtYWNzIGVkaXRvcgorICogaW50ZWdyYXRpb24gcHJvdG9jb2wuICBCZSBjYXJlZnVsISAgVGhlIHByb3RvY29sIHVzZXMgb2Zmc2V0cworICogd2hpY2ggYXJlICpiZXR3ZWVuKiBjaGFyYWN0ZXJzLCB3aGVyZWFzIHZpbSB1c2VzIGxpbmUgbnVtYmVyCisgKiBhbmQgY29sdW1uIG51bWJlciB3aGljaCBhcmUgKm9uKiBjaGFyYWN0ZXJzLgorICogU2VlICI6aGVscCBuZXRiZWFucy1wcm90b2NvbCIgZm9yIGV4cGxhbmF0aW9uLgorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmIGRlZmluZWQoRkVBVF9ORVRCRUFOU19JTlRHKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKiBOb3RlOiB3aGVuIG1ha2luZyBjaGFuZ2VzIGhlcmUgYWxzbyBhZGp1c3QgY29uZmlndXJlLmluLiAqLworIyBpbmNsdWRlIDxzdGRhcmcuaD4KKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNpZmRlZiBXSU4zMgorIyBpZmRlZiBERUJVRworIyAgaW5jbHVkZSA8dGNoYXIuaD4JLyogZm9yIF9UIGRlZmluaXRpb24gZm9yIFRSQUNFbiBtYWNyb3MgKi8KKyMgZW5kaWYKKyMgaW5jbHVkZSA8aW8uaD4KKy8qIFdpblNvY2sgQVBJIGlzIHNlcGFyYXRlZCBmcm9tIEMgQVBJLCB0aHVzIHdlIGNhbid0IHVzZSByZWFkKCksIHdyaXRlKCksCisgKiBlcnJuby4uLiAqLworIyBkZWZpbmUgc29ja19lcnJubyBXU0FHZXRMYXN0RXJyb3IoKQorIyBkZWZpbmUgRUNPTk5SRUZVU0VEIFdTQUVDT05OUkVGVVNFRAorIyBpZmRlZiBFSU5UUgorIyAgdW5kZWYgRUlOVFIKKyMgZW5kaWYKKyMgZGVmaW5lIEVJTlRSIFdTQUVJTlRSCisjIGRlZmluZSBzb2NrX3dyaXRlKHNkLCBidWYsIGxlbikgc2VuZChzZCwgYnVmLCBsZW4sIDApCisjIGRlZmluZSBzb2NrX3JlYWQoc2QsIGJ1ZiwgbGVuKSByZWN2KHNkLCBidWYsIGxlbiwgMCkKKyMgZGVmaW5lIHNvY2tfY2xvc2Uoc2QpIGNsb3Nlc29ja2V0KHNkKQorIyBkZWZpbmUgc2xlZXAodCkgU2xlZXAodCoxMDAwKSAvKiBXaW5BUEkgU2xlZXAoKSBhY2NlcHRzIG1pbGxpc2Vjb25kcyAqLworI2Vsc2UKKyMgaW5jbHVkZSA8bmV0ZGIuaD4KKyMgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjIGlmZGVmIEhBVkVfTElCR0VOX0gKKyMgIGluY2x1ZGUgPGxpYmdlbi5oPgorIyBlbmRpZgorIyBkZWZpbmUgc29ja19lcnJubyBlcnJubworIyBkZWZpbmUgc29ja193cml0ZShzZCwgYnVmLCBsZW4pIHdyaXRlKHNkLCBidWYsIGxlbikKKyMgZGVmaW5lIHNvY2tfcmVhZChzZCwgYnVmLCBsZW4pIHJlYWQoc2QsIGJ1ZiwgbGVuKQorIyBkZWZpbmUgc29ja19jbG9zZShzZCkgY2xvc2Uoc2QpCisjZW5kaWYKKworI2luY2x1ZGUgInZlcnNpb24uaCIKKworI2RlZmluZSBJTkVUX1NPQ0tFVFMKKworI2RlZmluZSBHVUFSREVECQkxMDAwMCAvKiB0eXBlbnIgZm9yICJndWFyZGVkIiBhbm5vdGF0aW9uICovCisjZGVmaW5lIEdVQVJERURPRkZTRVQgMTAwMDAwMCAvKiBiYXNlIGZvciAiZ3VhcmRlZCIgc2lnbiBpZCdzICovCisKKy8qIFRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiAod29ya2luZyBvbmx5IHdpdGggTmV0YmVhbnMpIHJldHVybmVkICIxLjEiLiAgVGhlCisgKiBwcm90b2NvbCBpbXBsZW1lbnRlZCBoZXJlIGFsc28gc3VwcG9ydHMgQS1BLVAuICovCitzdGF0aWMgY2hhciAqRXh0RWRQcm90b2NvbFZlcnNpb24gPSAiMi4yIjsKKworc3RhdGljIGxvbmcgcG9zMm9mZiBfX0FSR1MoKGJ1Zl9UICosIHBvc19UICopKTsKK3N0YXRpYyBwb3NfVCAqb2ZmMnBvcyBfX0FSR1MoKGJ1Zl9UICosIGxvbmcpKTsKK3N0YXRpYyBwb3NfVCAqZ2V0X29mZl9vcl9sbnVtIF9fQVJHUygoYnVmX1QgKmJ1ZiwgY2hhcl91ICoqYXJncCkpOworc3RhdGljIGxvbmcgZ2V0X2J1Zl9zaXplIF9fQVJHUygoYnVmX1QgKikpOworCitzdGF0aWMgdm9pZCBuZXRiZWFuc19jb25uZWN0IF9fQVJHUygodm9pZCkpOworc3RhdGljIGludCBnZXRDb25uSW5mbyBfX0FSR1MoKGNoYXIgKmZpbGUsIGNoYXIgKipob3N0LCBjaGFyICoqcG9ydCwgY2hhciAqKnBhc3N3b3JkKSk7CisKK3N0YXRpYyB2b2lkIG5iX2luaXRfZ3JhcGhpY3MgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBjb2xvbmNtZCBfX0FSR1MoKGNoYXIgKmNtZCwgLi4uKSk7CisjaWZkZWYgRkVBVF9HVUlfTU9USUYKK3N0YXRpYyB2b2lkIG1lc3NhZ2VGcm9tTmV0YmVhbnMgX19BUkdTKChYdFBvaW50ZXIsIGludCAqLCBYdElucHV0SWQgKikpOworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUlfR1RLCitzdGF0aWMgdm9pZCBtZXNzYWdlRnJvbU5ldGJlYW5zIF9fQVJHUygoZ3BvaW50ZXIsIGdpbnQsIEdka0lucHV0Q29uZGl0aW9uKSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIG5iX3BhcnNlX2NtZCBfX0FSR1MoKGNoYXJfdSAqKSk7CitzdGF0aWMgaW50ICBuYl9kb19jbWQgX19BUkdTKChpbnQsIGNoYXJfdSAqLCBpbnQsIGludCwgY2hhcl91ICopKTsKK3N0YXRpYyB2b2lkIG5iX3NlbmQgX19BUkdTKChjaGFyICpidWYsIGNoYXIgKmZ1bikpOworI2lmZGVmIEZFQVRfQkVWQUwKK3N0YXRpYyB2b2lkIG5ldGJlYW5zX2JldmFsX2NiIF9fQVJHUygoQmFsbG9vbkV2YWwgKmJldmFsLCBpbnQgc3RhdGUpKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHNkID0gLTE7CQkJLyogc29ja2V0IGZkIGZvciBOZXRiZWFucyBjb25uZWN0aW9uICovCisjaWZkZWYgRkVBVF9HVUlfTU9USUYKK3N0YXRpYyBYdElucHV0SWQgaW5wdXRIYW5kbGVyOwkJLyogQ29va2llIGZvciBpbnB1dCAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUlfR1RLCitzdGF0aWMgZ2ludCBpbnB1dEhhbmRsZXI7CQkvKiBDb29raWUgZm9yIGlucHV0ICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9XMzIKK3N0YXRpYyBpbnQgIGlucHV0SGFuZGxlciA9IC0xOwkJLyogc2ltcGx5IHJldC52YWx1ZSBvZiBXU0FBc3luY1NlbGVjdCgpICovCitleHRlcm4gSFdORCBzX2h3bmQ7CQkJLyogR3ZpbSdzIFdpbmRvdyBoYW5kbGUgKi8KKyNlbmRpZgorc3RhdGljIGludCBjbWRubzsJCQkvKiBjdXJyZW50IGNvbW1hbmQgbnVtYmVyIGZvciByZXBseSAqLworc3RhdGljIGludCBoYXZlQ29ubmVjdGlvbiA9IEZBTFNFOwkvKiBzb2NrZXQgaXMgY29ubmVjdGVkIGFuZAorCQkJCQkgICBpbml0aWFsaXphdGlvbiBpcyBkb25lICovCitzdGF0aWMgaW50IG9sZEZpcmUgPSAxOworc3RhdGljIGludCBleGl0X2RlbGF5ID0gMjsJCS8qIGV4aXQgZGVsYXkgaW4gc2Vjb25kcyAqLworCisjaWZkZWYgRkVBVF9CRVZBTAorIyBpZiBkZWZpbmVkKEZFQVRfR1VJX01PVElGKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkKK2V4dGVybiBXaWRnZXQJdGV4dEFyZWE7CisjIGVuZGlmCitCYWxsb29uRXZhbAkqYmFsbG9vbkV2YWwgPSBOVUxMOworI2VuZGlmCisKKy8qCisgKiBJbmNsdWRlIHRoZSBkZWJ1Z2dpbmcgY29kZSBpZiB3YW50ZWQuCisgKi8KKyNpZmRlZiBOQkRFQlVHCisjIGluY2x1ZGUgIm5iZGVidWcuYyIKKyNlbmRpZgorCisvKiBDb25uZWN0IGJhY2sgdG8gTmV0YmVhbnMgcHJvY2VzcyAqLworI2lmIGRlZmluZWQoRkVBVF9HVUlfTU9USUYpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorbmV0YmVhbnNfWHRfY29ubmVjdCh2b2lkICpjb250ZXh0KQoreworICAgIG5ldGJlYW5zX2Nvbm5lY3QoKTsKKyAgICBpZiAoc2QgPiAwKQorICAgIHsKKwkvKiB0ZWxsIG5vdGlmaWVyIHdlIGFyZSBpbnRlcmVzdGVkIGluIGJlaW5nIGNhbGxlZAorCSAqIHdoZW4gdGhlcmUgaXMgaW5wdXQgb24gdGhlIGVkaXRvciBjb25uZWN0aW9uIHNvY2tldAorCSAqLworCWlucHV0SGFuZGxlciA9IFh0QXBwQWRkSW5wdXQoKFh0QXBwQ29udGV4dCljb250ZXh0LCBzZCwKKwkJCSAgICAgKFh0UG9pbnRlcikoWHRJbnB1dFJlYWRNYXNrICsgWHRJbnB1dEV4Y2VwdE1hc2spLAorCQkJCQkJICAgbWVzc2FnZUZyb21OZXRiZWFucywgTlVMTCk7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK25ldGJlYW5zX2Rpc2Nvbm5lY3Qodm9pZCkKK3sKKyAgICBpZiAoaW5wdXRIYW5kbGVyICE9IChYdElucHV0SWQpTlVMTCkKKyAgICB7CisJWHRSZW1vdmVJbnB1dChpbnB1dEhhbmRsZXIpOworCWlucHV0SGFuZGxlciA9IChYdElucHV0SWQpTlVMTDsKKyAgICB9CisgICAgc2QgPSAtMTsKKyAgICBoYXZlQ29ubmVjdGlvbiA9IEZBTFNFOworfQorI2VuZGlmIC8qIEZFQVRfTU9USUZfR1VJICovCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0dUSykgfHwgZGVmaW5lZChQUk9UTykKKyAgICB2b2lkCituZXRiZWFuc19ndGtfY29ubmVjdCh2b2lkKQoreworIyBpZmRlZiBGRUFUX0JFVkFMCisgICAgLyoKKyAgICAgKiBTZXQgdXAgdGhlIEJhbGxvb24gRXhwcmVzc2lvbiBFdmFsdWF0aW9uIGFyZWEuCisgICAgICogQWx3YXlzIGNyZWF0ZSBpdCBidXQgZGlzYWJsZSBpdCB3aGVuICdiYWxsb29uZXZhbCcgaXNuJ3Qgc2V0LgorICAgICAqLworICAgIGJhbGxvb25FdmFsID0gZ3VpX21jaF9jcmVhdGVfYmV2YWxfYXJlYShndWkuZHJhd2FyZWEsIE5VTEwsCisJCQkJCSAgICAmbmV0YmVhbnNfYmV2YWxfY2IsIE5VTEwpOworICAgIGlmICghcF9iZXZhbCkKKwlndWlfbWNoX2Rpc2FibGVfYmV2YWxfYXJlYShiYWxsb29uRXZhbCk7CisjIGVuZGlmCisKKyAgICBuZXRiZWFuc19jb25uZWN0KCk7CisgICAgaWYgKHNkID4gMCkKKyAgICB7CisJLyoKKwkgKiBUZWxsIGdkayB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBiZWluZyBjYWxsZWQgd2hlbiB0aGVyZQorCSAqIGlzIGlucHV0IG9uIHRoZSBlZGl0b3IgY29ubmVjdGlvbiBzb2NrZXQKKwkgKi8KKwlpbnB1dEhhbmRsZXIgPSBnZGtfaW5wdXRfYWRkKHNkLCAoR2RrSW5wdXRDb25kaXRpb24pCisJCSgoaW50KUdES19JTlBVVF9SRUFEICsgKGludClHREtfSU5QVVRfRVhDRVBUSU9OKSwKKwkJCQkJCSAgIG1lc3NhZ2VGcm9tTmV0YmVhbnMsIE5VTEwpOworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCituZXRiZWFuc19kaXNjb25uZWN0KHZvaWQpCit7CisgICAgaWYgKGlucHV0SGFuZGxlciAhPSAwKQorICAgIHsKKwlnZGtfaW5wdXRfcmVtb3ZlKGlucHV0SGFuZGxlcik7CisJaW5wdXRIYW5kbGVyID0gMDsKKyAgICB9CisgICAgc2QgPSAtMTsKKyAgICBoYXZlQ29ubmVjdGlvbiA9IEZBTFNFOworfQorI2VuZGlmIC8qIEZFQVRfR1VJX0dUSyAqLworCisjaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorbmV0YmVhbnNfdzMyX2Nvbm5lY3Qodm9pZCkKK3sKKyAgICBuZXRiZWFuc19jb25uZWN0KCk7CisgICAgaWYgKHNkID4gMCkKKyAgICB7CisJLyoKKwkgKiBUZWxsIFdpbmRvd3Mgd2UgYXJlIGludGVyZXN0ZWQgaW4gcmVjZWl2aW5nIG1lc3NhZ2Ugd2hlbiB0aGVyZQorCSAqIGlzIGlucHV0IG9uIHRoZSBlZGl0b3IgY29ubmVjdGlvbiBzb2NrZXQKKwkgKi8KKwlpbnB1dEhhbmRsZXIgPSBXU0FBc3luY1NlbGVjdChzZCwgc19od25kLCBXTV9ORVRCRUFOUywgRkRfUkVBRCk7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK25ldGJlYW5zX2Rpc2Nvbm5lY3Qodm9pZCkKK3sKKyAgICBpZiAoaW5wdXRIYW5kbGVyID09IDApCisgICAgeworCVdTQUFzeW5jU2VsZWN0KHNkLCBzX2h3bmQsIDAsIDApOworCWlucHV0SGFuZGxlciA9IC0xOworICAgIH0KKyAgICBzZCA9IC0xOworICAgIGhhdmVDb25uZWN0aW9uID0gRkFMU0U7CisKKyAgICAvKiBJdCBzZWVtcyB0aGF0IE1vdGlmIGFuZCBHVEsgdmVyc2lvbnMgYWxzbyBuZWVkIHRoaXM6ICovCisgICAgZ3VpX21jaF9kZXN0cm95X2JldmFsX2FyZWEoYmFsbG9vbkV2YWwpOworICAgIGJhbGxvb25FdmFsID0gTlVMTDsKK30KKyNlbmRpZiAvKiBGRUFUX0dVSV9XMzIgKi8KKworI2RlZmluZSBOQl9ERUZfSE9TVCAibG9jYWxob3N0IgorI2RlZmluZSBOQl9ERUZfQUREUiAiMzIxOSIKKyNkZWZpbmUgTkJfREVGX1BBU1MgImNoYW5nZW1lIgorCisgICAgc3RhdGljIHZvaWQKK25ldGJlYW5zX2Nvbm5lY3Qodm9pZCkKK3sKKyNpZmRlZiBJTkVUX1NPQ0tFVFMKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4Jc2VydmVyOworICAgIHN0cnVjdCBob3N0ZW50ICoJaG9zdDsKKyMgaWZkZWYgRkVBVF9HVUlfVzMyCisgICAgdV9zaG9ydAkJcG9ydDsKKyMgZWxzZQorICAgIGludAkJCXBvcnQ7CisjZW5kaWYKKyNlbHNlCisgICAgc3RydWN0IHNvY2thZGRyX3VuCXNlcnZlcjsKKyNlbmRpZgorICAgIGNoYXIJYnVmWzMyXTsKKyAgICBjaGFyCSpob3N0bmFtZSA9IE5VTEw7CisgICAgY2hhcgkqYWRkcmVzcyA9IE5VTEw7CisgICAgY2hhcgkqcGFzc3dvcmQgPSBOVUxMOworICAgIGNoYXIJKmZuYW1lOworICAgIGNoYXIJKmFyZyA9IE5VTEw7CisKKyAgICBpZiAobmV0YmVhbnNBcmdbM10gPT0gJz0nKQorICAgIHsKKwkvKiAiLW5iPWZuYW1lIjogUmVhZCBpbmZvIGZyb20gc3BlY2lmaWVkIGZpbGUuICovCisJaWYgKGdldENvbm5JbmZvKG5ldGJlYW5zQXJnICsgNCwgJmhvc3RuYW1lLCAmYWRkcmVzcywgJnBhc3N3b3JkKQorCQkJCQkJCQkgICAgICA9PSBGQUlMKQorCSAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKG5ldGJlYW5zQXJnWzNdID09ICc6JykKKwkgICAgLyogIi1uYjo8aG9zdD46PGFkZHI+OjxwYXNzd29yZD4iOiBnZXQgaW5mbyBmcm9tIGFyZ3VtZW50ICovCisJICAgIGFyZyA9IG5ldGJlYW5zQXJnICsgNDsKKwlpZiAoYXJnID09IE5VTEwgJiYgKGZuYW1lID0gZ2V0ZW52KCJfX05FVEJFQU5TX0NPTklORk8iKSkgIT0gTlVMTCkKKwl7CisJICAgIC8qICItbmIiOiBnZXQgaW5mbyBmcm9tIGZpbGUgc3BlY2lmaWVkIGluIGVudmlyb25tZW50ICovCisJICAgIGlmIChnZXRDb25uSW5mbyhmbmFtZSwgJmhvc3RuYW1lLCAmYWRkcmVzcywgJnBhc3N3b3JkKSA9PSBGQUlMKQorCQlyZXR1cm47CisJfQorCWVsc2UKKwl7CisJICAgIGlmIChhcmcgIT0gTlVMTCkKKwkgICAgeworCQkvKiAiLW5iOjxob3N0Pjo8YWRkcj46PHBhc3N3b3JkPiI6IGdldCBpbmZvIGZyb20gYXJndW1lbnQgKi8KKwkJaG9zdG5hbWUgPSBhcmc7CisJCWFkZHJlc3MgPSBzdHJjaHIoaG9zdG5hbWUsICc6Jyk7CisJCWlmIChhZGRyZXNzICE9IE5VTEwpCisJCXsKKwkJICAgICphZGRyZXNzKysgPSAnXDAnOworCQkgICAgcGFzc3dvcmQgPSBzdHJjaHIoYWRkcmVzcywgJzonKTsKKwkJICAgIGlmIChwYXNzd29yZCAhPSBOVUxMKQorCQkJKnBhc3N3b3JkKysgPSAnXDAnOworCQl9CisJICAgIH0KKworCSAgICAvKiBHZXQgdGhlIG1pc3NpbmcgdmFsdWVzIGZyb20gdGhlIGVudmlyb25tZW50LiAqLworCSAgICBpZiAoaG9zdG5hbWUgPT0gTlVMTCB8fCAqaG9zdG5hbWUgPT0gJ1wwJykKKwkJaG9zdG5hbWUgPSBnZXRlbnYoIl9fTkVUQkVBTlNfSE9TVCIpOworCSAgICBpZiAoYWRkcmVzcyA9PSBOVUxMKQorCQlhZGRyZXNzID0gZ2V0ZW52KCJfX05FVEJFQU5TX1NPQ0tFVCIpOworCSAgICBpZiAocGFzc3dvcmQgPT0gTlVMTCkKKwkJcGFzc3dvcmQgPSBnZXRlbnYoIl9fTkVUQkVBTlNfVklNX1BBU1NXT1JEIik7CisKKwkgICAgLyogTW92ZSB2YWx1ZXMgdG8gYWxsb2NhdGVkIG1lbW9yeS4gKi8KKwkgICAgaWYgKGhvc3RuYW1lICE9IE5VTEwpCisJCWhvc3RuYW1lID0gKGNoYXIgKil2aW1fc3Ryc2F2ZSgoY2hhcl91ICopaG9zdG5hbWUpOworCSAgICBpZiAoYWRkcmVzcyAhPSBOVUxMKQorCQlhZGRyZXNzID0gKGNoYXIgKil2aW1fc3Ryc2F2ZSgoY2hhcl91ICopYWRkcmVzcyk7CisJICAgIGlmIChwYXNzd29yZCAhPSBOVUxMKQorCQlwYXNzd29yZCA9IChjaGFyICopdmltX3N0cnNhdmUoKGNoYXJfdSAqKXBhc3N3b3JkKTsKKwl9CisgICAgfQorCisgICAgLyogVXNlIHRoZSBkZWZhdWx0IHdoZW4gYSB2YWx1ZSBpcyBtaXNzaW5nLiAqLworICAgIGlmIChob3N0bmFtZSA9PSBOVUxMIHx8ICpob3N0bmFtZSA9PSAnXDAnKQorICAgIHsKKwl2aW1fZnJlZShob3N0bmFtZSk7CisJaG9zdG5hbWUgPSAoY2hhciAqKXZpbV9zdHJzYXZlKChjaGFyX3UgKilOQl9ERUZfSE9TVCk7CisgICAgfQorICAgIGlmIChhZGRyZXNzID09IE5VTEwgfHwgKmFkZHJlc3MgPT0gJ1wwJykKKyAgICB7CisJdmltX2ZyZWUoYWRkcmVzcyk7CisJYWRkcmVzcyA9IChjaGFyICopdmltX3N0cnNhdmUoKGNoYXJfdSAqKU5CX0RFRl9BRERSKTsKKyAgICB9CisgICAgaWYgKHBhc3N3b3JkID09IE5VTEwgfHwgKnBhc3N3b3JkID09ICdcMCcpCisgICAgeworCXZpbV9mcmVlKHBhc3N3b3JkKTsKKwlwYXNzd29yZCA9IChjaGFyICopdmltX3N0cnNhdmUoKGNoYXJfdSAqKU5CX0RFRl9QQVNTKTsKKyAgICB9CisgICAgaWYgKGhvc3RuYW1lID09IE5VTEwgfHwgYWRkcmVzcyA9PSBOVUxMIHx8IHBhc3N3b3JkID09IE5VTEwpCisJZ290byB0aGVlbmQ7CSAgICAvKiBvdXQgb2YgbWVtb3J5ICovCisKKyNpZmRlZiBJTkVUX1NPQ0tFVFMKKyAgICBwb3J0ID0gYXRvaShhZGRyZXNzKTsKKworICAgIGlmICgoc2QgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA9PSAtMSkKKyAgICB7CisJUEVSUk9SKCJzb2NrZXQoKSBpbiBuZXRiZWFuc19jb25uZWN0KCkiKTsKKwlnb3RvIHRoZWVuZDsKKyAgICB9CisKKyAgICAvKiBHZXQgdGhlIHNlcnZlciBpbnRlcm5ldCBhZGRyZXNzIGFuZCBwdXQgaW50byBhZGRyIHN0cnVjdHVyZSAqLworICAgIC8qIGZpbGwgaW4gdGhlIHNvY2tldCBhZGRyZXNzIHN0cnVjdHVyZSBhbmQgY29ubmVjdCB0byBzZXJ2ZXIgKi8KKyAgICBtZW1zZXQoKGNoYXIgKikmc2VydmVyLCAnXDAnLCBzaXplb2Yoc2VydmVyKSk7CisgICAgc2VydmVyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIHNlcnZlci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICAgIGlmICgoaG9zdCA9IGdldGhvc3RieW5hbWUoaG9zdG5hbWUpKSA9PSBOVUxMKQorICAgIHsKKwlpZiAobWNoX2FjY2Vzcyhob3N0bmFtZSwgUl9PSykgPj0gMCkKKwl7CisJICAgIC8qIERFQlVHOiBpbnB1dCBmaWxlICovCisJICAgIHNkID0gbWNoX29wZW4oaG9zdG5hbWUsIE9fUkRPTkxZLCAwKTsKKwkgICAgZ290byB0aGVlbmQ7CisJfQorCVBFUlJPUigiZ2V0aG9zdGJ5bmFtZSgpIGluIG5ldGJlYW5zX2Nvbm5lY3QoKSIpOworCXNkID0gLTE7CisJZ290byB0aGVlbmQ7CisgICAgfQorICAgIG1lbWNweSgoY2hhciAqKSZzZXJ2ZXIuc2luX2FkZHIsIGhvc3QtPmhfYWRkciwgaG9zdC0+aF9sZW5ndGgpOworI2Vsc2UKKyAgICBpZiAoKHNkID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKSkgPT0gLTEpCisgICAgeworCVBFUlJPUigic29ja2V0KCkiKTsKKwlnb3RvIHRoZWVuZDsKKyAgICB9CisKKyAgICBzZXJ2ZXIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisgICAgc3RyY3B5KHNlcnZlci5zdW5fcGF0aCwgYWRkcmVzcyk7CisjZW5kaWYKKyAgICAvKiBDb25uZWN0IHRvIHNlcnZlciAqLworICAgIGlmIChjb25uZWN0KHNkLCAoc3RydWN0IHNvY2thZGRyICopJnNlcnZlciwgc2l6ZW9mKHNlcnZlcikpKQorICAgIHsKKwluYmRlYnVnKCgibmV0YmVhbnNfY29ubmVjdDogQ29ubmVjdCBmYWlsZWQgd2l0aCBlcnJubyAlZFxuIiwgc29ja19lcnJubykpOworCWlmIChzb2NrX2Vycm5vID09IEVDT05OUkVGVVNFRCkKKwl7CisJICAgIHNvY2tfY2xvc2Uoc2QpOworI2lmZGVmIElORVRfU09DS0VUUworCSAgICBpZiAoKHNkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKSkgPT0gLTEpCisJICAgIHsKKwkJUEVSUk9SKCJzb2NrZXQoKSMyIGluIG5ldGJlYW5zX2Nvbm5lY3QoKSIpOworCQlnb3RvIHRoZWVuZDsKKwkgICAgfQorI2Vsc2UKKwkgICAgaWYgKChzZCA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCkpID09IC0xKQorCSAgICB7CisJCVBFUlJPUigic29ja2V0KCkjMiBpbiBuZXRiZWFuc19jb25uZWN0KCkiKTsKKwkJZ290byB0aGVlbmQ7CisJICAgIH0KKyNlbmRpZgorCSAgICBpZiAoY29ubmVjdChzZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsIHNpemVvZihzZXJ2ZXIpKSkKKwkgICAgeworCQlpbnQgcmV0cmllcyA9IDM2OworCQlpbnQgc3VjY2VzcyA9IEZBTFNFOworCQl3aGlsZSAocmV0cmllcy0tCisJCQkgICAgICYmICgoc29ja19lcnJubyA9PSBFQ09OTlJFRlVTRUQpIHx8IChzb2NrX2Vycm5vID09IEVJTlRSKSkpCisJCXsKKwkJICAgIG5iZGVidWcoKCJyZXRyeWluZy4uLlxuIikpOworCQkgICAgc2xlZXAoNSk7CisJCSAgICBpZiAoY29ubmVjdChzZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsCisJCQkJc2l6ZW9mKHNlcnZlcikpID09IDApCisJCSAgICB7CisJCQlzdWNjZXNzID0gVFJVRTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWlmICghc3VjY2VzcykKKwkJeworCQkgICAgLyogR2V0IGhlcmUgd2hlbiB0aGUgc2VydmVyIGNhbid0IGJlIGZvdW5kLiAqLworCQkgICAgUEVSUk9SKF8oIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zICMyIikpOworCQkgICAgZ2V0b3V0KDEpOworCQl9CisJICAgIH0KKworCX0KKwllbHNlCisJeworCSAgICBQRVJST1IoXygiQ2Fubm90IGNvbm5lY3QgdG8gTmV0YmVhbnMiKSk7CisJICAgIGdldG91dCgxKTsKKwl9CisgICAgfQorCisgICAgc3ByaW50ZihidWYsICJBVVRIICVzXG4iLCBwYXNzd29yZCk7CisgICAgbmJfc2VuZChidWYsICJuZXRiZWFuc19jb25uZWN0Iik7CisKKyAgICBzcHJpbnRmKGJ1ZiwgIjA6dmVyc2lvbj0wIFwiJXNcIlxuIiwgRXh0RWRQcm90b2NvbFZlcnNpb24pOworICAgIG5iX3NlbmQoYnVmLCAiZXh0ZXJuYWxlZGl0b3JfdmVyc2lvbiIpOworCisgICAgbmJkZWJ1ZygoIm5ldGJlYW5zX2Nvbm5lY3Q6IENvbm5lY3Rpb24gc3VjY2VlZGVkXG4iKSk7CisKKy8qICAgIG5iX2luaXRfZ3JhcGhpY3MoKTsgIGRlbGF5IHVudGlsIG5lZWRlZCAqLworCisgICAgaGF2ZUNvbm5lY3Rpb24gPSBUUlVFOworCit0aGVlbmQ6CisgICAgdmltX2ZyZWUoaG9zdG5hbWUpOworICAgIHZpbV9mcmVlKGFkZHJlc3MpOworICAgIHZpbV9mcmVlKHBhc3N3b3JkKTsKKyAgICByZXR1cm47Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIE5ldEJlYW5zIGhvc3RuYW1lLCBwb3J0IGFkZHJlc3MgYW5kIHBhc3N3b3JkIGZyb20gYSBmaWxlLgorICogUmV0dXJuIHRoZSBzdHJpbmdzIGluIGFsbG9jYXRlZCBtZW1vcnkuCisgKiBSZXR1cm4gRkFJTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgcmVhZCwgT0sgb3RoZXJ3aXNlIChubyBtYXR0ZXIgd2hhdCBpdAorICogY29udGFpbnMpLgorICovCisgICAgc3RhdGljIGludAorZ2V0Q29ubkluZm8oY2hhciAqZmlsZSwgY2hhciAqKmhvc3QsIGNoYXIgKipwb3J0LCBjaGFyICoqYXV0aCkKK3sKKyAgICBGSUxFICpmcDsKKyAgICBjaGFyX3UgYnVmW0JVRlNJWl07CisgICAgY2hhcl91ICpscDsKKyAgICBjaGFyX3UgKm5sOworI2lmZGVmIFVOSVgKKyAgICBzdHJ1Y3Qgc3RhdAlzdDsKKworICAgIC8qCisgICAgICogRm9yIFVuaXggb25seSBhY2NlcHQgdGhlIGZpbGUgd2hlbiBpdCdzIG5vdCBhY2Nlc3NpYmxlIGJ5IG90aGVycy4KKyAgICAgKiBUaGUgb3BlbiB3aWxsIHRoZW4gZmFpbCBpZiB3ZSBkb24ndCBvd24gdGhlIGZpbGUuCisgICAgICovCisgICAgaWYgKG1jaF9zdGF0KGZpbGUsICZzdCkgPT0gMCAmJiAoc3Quc3RfbW9kZSAmIDAwNzcpICE9IDApCisgICAgeworCUVNU0cyKF8oIkU2Njg6IFdyb25nIGFjY2VzcyBtb2RlIGZvciBOZXRCZWFucyBjb25uZWN0aW9uIGluZm8gZmlsZTogXCIlc1wiIiksCisJCQkJCQkJCQlmaWxlKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisjZW5kaWYKKworICAgIGZwID0gbWNoX2ZvcGVuKGZpbGUsICJyIik7CisgICAgaWYgKGZwID09IE5VTEwpCisgICAgeworCVBFUlJPUigiRTY2MDogQ2Fubm90IG9wZW4gTmV0QmVhbnMgY29ubmVjdGlvbiBpbmZvIGZpbGUiKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBSZWFkIHRoZSBmaWxlLiBUaGVyZSBzaG91bGQgYmUgb25lIG9mIGVhY2ggcGFyYW1ldGVyICovCisgICAgd2hpbGUgKChscCA9IChjaGFyX3UgKilmZ2V0cygoY2hhciAqKWJ1ZiwgQlVGU0laLCBmcCkpICE9IE5VTEwpCisgICAgeworCWlmICgobmwgPSB2aW1fc3RyY2hyKGxwLCAnXG4nKSkgIT0gTlVMTCkKKwkgICAgKm5sID0gMDsJICAgIC8qIHN0cmlwIG9mZiB0aGUgdHJhaWxpbmcgbmV3bGluZSAqLworCisJaWYgKFNUUk5DTVAobHAsICJob3N0PSIsIDUpID09IDApCisJeworCSAgICB2aW1fZnJlZSgqaG9zdCk7CisJICAgICpob3N0ID0gKGNoYXIgKil2aW1fc3Ryc2F2ZSgmYnVmWzVdKTsKKwl9CisJZWxzZSBpZiAoU1RSTkNNUChscCwgInBvcnQ9IiwgNSkgPT0gMCkKKwl7CisJICAgIHZpbV9mcmVlKCpwb3J0KTsKKwkgICAgKnBvcnQgPSAoY2hhciAqKXZpbV9zdHJzYXZlKCZidWZbNV0pOworCX0KKwllbHNlIGlmIChTVFJOQ01QKGxwLCAiYXV0aD0iLCA1KSA9PSAwKQorCXsKKwkgICAgdmltX2ZyZWUoKmF1dGgpOworCSAgICAqYXV0aCA9IChjaGFyICopdmltX3N0cnNhdmUoJmJ1Zls1XSk7CisJfQorICAgIH0KKyAgICBmY2xvc2UoZnApOworCisgICAgcmV0dXJuIE9LOworfQorCisKK3N0cnVjdCBrZXlxdWV1ZQoreworICAgIGludAkJICAgICBrZXk7CisgICAgc3RydWN0IGtleXF1ZXVlICpuZXh0OworICAgIHN0cnVjdCBrZXlxdWV1ZSAqcHJldjsKK307CisKK3R5cGVkZWYgc3RydWN0IGtleXF1ZXVlIGtleVFfVDsKKworc3RhdGljIGtleVFfVCBrZXlIZWFkOyAvKiBkdW1teSBub2RlLCBoZWFkZXIgZm9yIGNpcmN1bGFyIHF1ZXVlICovCisKKworLyoKKyAqIFF1ZXVlIHVwIGtleSBjb21tYW5kcyBzZW50IGZyb20gbmV0YmVhbnMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcG9zdHBvbmVfa2V5Y29tbWFuZChpbnQga2V5KQoreworICAgIGtleVFfVCAqbm9kZTsKKworICAgIG5vZGUgPSAoa2V5UV9UICopYWxsb2Moc2l6ZW9mKGtleVFfVCkpOworCisgICAgaWYgKGtleUhlYWQubmV4dCA9PSBOVUxMKSAvKiBpbml0aWFsaXplIGNpcmN1bGFyIHF1ZXVlICovCisgICAgeworCWtleUhlYWQubmV4dCA9ICZrZXlIZWFkOworCWtleUhlYWQucHJldiA9ICZrZXlIZWFkOworICAgIH0KKworICAgIC8qIGluc2VydCBub2RlIGF0IHRhaWwgb2YgcXVldWUgKi8KKyAgICBub2RlLT5uZXh0ID0gJmtleUhlYWQ7CisgICAgbm9kZS0+cHJldiA9IGtleUhlYWQucHJldjsKKyAgICBrZXlIZWFkLnByZXYtPm5leHQgPSBub2RlOworICAgIGtleUhlYWQucHJldiA9IG5vZGU7CisKKyAgICBub2RlLT5rZXkgPSBrZXk7Cit9CisKKy8qCisgKiBIYW5kbGUgYW55IHF1ZXVlZC11cCBOZXRCZWFucyBrZXljb21tYW5kcyB0byBiZSBzZW5kLgorICovCisgICAgc3RhdGljIHZvaWQKK2hhbmRsZV9rZXlfcXVldWUodm9pZCkKK3sKKyAgICB3aGlsZSAoa2V5SGVhZC5uZXh0ICYmIGtleUhlYWQubmV4dCAhPSAma2V5SGVhZCkKKyAgICB7CisJLyogZmlyc3QsIHVubGluayB0aGUgbm9kZSAqLworCWtleVFfVCAqbm9kZSA9IGtleUhlYWQubmV4dDsKKwlrZXlIZWFkLm5leHQgPSBub2RlLT5uZXh0OworCW5vZGUtPm5leHQtPnByZXYgPSBub2RlLT5wcmV2OworCisJLyogbm93LCBzZW5kIHRoZSBrZXljb21tYW5kICovCisJbmV0YmVhbnNfa2V5Y29tbWFuZChub2RlLT5rZXkpOworCisJLyogRmluYWxseSwgZGlzcG9zZSBvZiB0aGUgbm9kZSAqLworCXZpbV9mcmVlKG5vZGUpOworICAgIH0KK30KKworCitzdHJ1Y3QgY21kcXVldWUKK3sKKyAgICBjaGFyX3UJICAgICpidWZmZXI7CisgICAgc3RydWN0IGNtZHF1ZXVlICpuZXh0OworICAgIHN0cnVjdCBjbWRxdWV1ZSAqcHJldjsKK307CisKK3R5cGVkZWYgc3RydWN0IGNtZHF1ZXVlIHF1ZXVlX1Q7CisKK3N0YXRpYyBxdWV1ZV9UIGhlYWQ7ICAvKiBkdW1teSBub2RlLCBoZWFkZXIgZm9yIGNpcmN1bGFyIHF1ZXVlICovCisKKworLyoKKyAqIFB1dCB0aGUgYnVmZmVyIG9uIHRoZSB3b3JrIHF1ZXVlOyBwb3NzaWJseSBzYXZlIGl0IHRvIGEgZmlsZSBhcyB3ZWxsLgorICovCisgICAgc3RhdGljIHZvaWQKK3NhdmUoY2hhcl91ICpidWYsIGludCBsZW4pCit7CisgICAgcXVldWVfVCAqbm9kZTsKKworICAgIG5vZGUgPSAocXVldWVfVCAqKWFsbG9jKHNpemVvZihxdWV1ZV9UKSk7CisgICAgaWYgKG5vZGUgPT0gTlVMTCkKKwlyZXR1cm47CSAgICAvKiBvdXQgb2YgbWVtb3J5ICovCisgICAgbm9kZS0+YnVmZmVyID0gYWxsb2MobGVuICsgMSk7CisgICAgaWYgKG5vZGUtPmJ1ZmZlciA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShub2RlKTsKKwlyZXR1cm47CSAgICAvKiBvdXQgb2YgbWVtb3J5ICovCisgICAgfQorICAgIG1jaF9tZW1tb3ZlKG5vZGUtPmJ1ZmZlciwgYnVmLCAoc2l6ZV90KWxlbik7CisgICAgbm9kZS0+YnVmZmVyW2xlbl0gPSBOVUw7CisKKyAgICBpZiAoaGVhZC5uZXh0ID09IE5VTEwpICAgLyogaW5pdGlhbGl6ZSBjaXJjdWxhciBxdWV1ZSAqLworICAgIHsKKwloZWFkLm5leHQgPSAmaGVhZDsKKwloZWFkLnByZXYgPSAmaGVhZDsKKyAgICB9CisKKyAgICAvKiBpbnNlcnQgbm9kZSBhdCB0YWlsIG9mIHF1ZXVlICovCisgICAgbm9kZS0+bmV4dCA9ICZoZWFkOworICAgIG5vZGUtPnByZXYgPSBoZWFkLnByZXY7CisgICAgaGVhZC5wcmV2LT5uZXh0ID0gbm9kZTsKKyAgICBoZWFkLnByZXYgPSBub2RlOworCisjaWZkZWYgTkJERUJVRworICAgIHsKKwlzdGF0aWMgaW50IG91dGZkID0gLTI7CisKKwkvKiBwb3NzaWJseSB3cml0ZSBidWZmZXIgb3V0IHRvIGEgZmlsZSAqLworCWlmIChvdXRmZCA9PSAtMykKKwkgICAgcmV0dXJuOworCisJaWYgKG91dGZkID09IC0yKQorCXsKKwkgICAgY2hhciAqZmlsZSA9IGdldGVudigiX19ORVRCRUFOU19TQVZFIik7CisJICAgIGlmIChmaWxlID09IE5VTEwpCisJCW91dGZkID0gLTM7CisJICAgIGVsc2UKKwkJb3V0ZmQgPSBtY2hfb3BlbihmaWxlLCBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkMsIDA2NjYpOworCX0KKworCWlmIChvdXRmZCA+PSAwKQorCSAgICB3cml0ZShvdXRmZCwgYnVmLCBsZW4pOworICAgIH0KKyNlbmRpZgorfQorCisKKy8qCisgKiBXaGlsZSB0aGVyZSdzIHN0aWxsIGEgY29tbWFuZCBpbiB0aGUgd29yayBxdWV1ZSwgcGFyc2UgYW5kIGV4ZWN1dGUgaXQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbmJfcGFyc2VfbWVzc2FnZXModm9pZCkKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgcXVldWVfVAkqbm9kZTsKKworICAgIHdoaWxlIChoZWFkLm5leHQgIT0gJmhlYWQpCisgICAgeworCW5vZGUgPSBoZWFkLm5leHQ7CisKKwkvKiBMb2NhdGUgdGhlIGZpcnN0IGxpbmUgaW4gdGhlIGZpcnN0IGJ1ZmZlci4gKi8KKwlwID0gdmltX3N0cmNocihub2RlLT5idWZmZXIsICdcbicpOworCWlmIChwID09IE5VTEwpCisJeworCSAgICAvKiBDb21tYW5kIGlzbid0IGNvbXBsZXRlLiAgSWYgdGhlcmUgaXMgbm8gZm9sbG93aW5nIGJ1ZmZlciwKKwkgICAgICogcmV0dXJuICh3YWl0IGZvciBtb3JlKS4gSWYgdGhlcmUgaXMgYW5vdGhlciBidWZmZXIgZm9sbG93aW5nLAorCSAgICAgKiBwcmVwZW5kIHRoZSB0ZXh0IHRvIHRoYXQgYnVmZmVyIGFuZCBkZWxldGUgdGhpcyBvbmUuICAqLworCSAgICBpZiAobm9kZS0+bmV4dCA9PSAmaGVhZCkKKwkJcmV0dXJuOworCSAgICBwID0gYWxsb2MoU1RSTEVOKG5vZGUtPmJ1ZmZlcikgKyBTVFJMRU4obm9kZS0+bmV4dC0+YnVmZmVyKSArIDEpOworCSAgICBpZiAocCA9PSBOVUxMKQorCQlyZXR1cm47CSAgICAvKiBvdXQgb2YgbWVtb3J5ICovCisJICAgIFNUUkNQWShwLCBub2RlLT5idWZmZXIpOworCSAgICBTVFJDQVQocCwgbm9kZS0+bmV4dC0+YnVmZmVyKTsKKwkgICAgdmltX2ZyZWUobm9kZS0+bmV4dC0+YnVmZmVyKTsKKwkgICAgbm9kZS0+bmV4dC0+YnVmZmVyID0gcDsKKworCSAgICAvKiBkaXNwb3NlIG9mIHRoZSBub2RlIGFuZCBidWZmZXIgKi8KKwkgICAgaGVhZC5uZXh0ID0gbm9kZS0+bmV4dDsKKwkgICAgbm9kZS0+bmV4dC0+cHJldiA9IG5vZGUtPnByZXY7CisJICAgIHZpbV9mcmVlKG5vZGUtPmJ1ZmZlcik7CisJICAgIHZpbV9mcmVlKG5vZGUpOworCX0KKwllbHNlCisJeworCSAgICAvKiBUaGVyZSBpcyBhIGNvbXBsZXRlIGNvbW1hbmQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuCisJICAgICAqIFRlcm1pbmF0ZSBpdCB3aXRoIGEgTlVMLiAgV2hlbiBubyBtb3JlIHRleHQgaXMgZm9sbG93aW5nIHVubGluaworCSAgICAgKiB0aGUgYnVmZmVyLiAgRG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nLCBiZWNhdXNlIG5ldyBidWZmZXJzIGNhbgorCSAgICAgKiBiZSBhZGRlZCB3aGlsZSBidXN5IGhhbmRsaW5nIHRoZSBjb21tYW5kLiAqLworCSAgICAqcCsrID0gTlVMOworCSAgICBpZiAoKnAgPT0gTlVMKQorCSAgICB7CisJCWhlYWQubmV4dCA9IG5vZGUtPm5leHQ7CisJCW5vZGUtPm5leHQtPnByZXYgPSBub2RlLT5wcmV2OworCSAgICB9CisKKwkgICAgLyogbm93LCBwYXJzZSBhbmQgZXhlY3V0ZSB0aGUgY29tbWFuZHMgKi8KKwkgICAgbmJfcGFyc2VfY21kKG5vZGUtPmJ1ZmZlcik7CisKKwkgICAgaWYgKCpwID09IE5VTCkKKwkgICAgeworCQkvKiBidWZmZXIgZmluaXNoZWQsIGRpc3Bvc2Ugb2YgdGhlIG5vZGUgYW5kIGJ1ZmZlciAqLworCQl2aW1fZnJlZShub2RlLT5idWZmZXIpOworCQl2aW1fZnJlZShub2RlKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogbW9yZSBmb2xsb3dzLCBtb3ZlIHRvIHRoZSBzdGFydCAqLworCQltY2hfbWVtbW92ZShub2RlLT5idWZmZXIsIHAsIFNUUkxFTihwKSArIDEpOworCSAgICB9CisJfQorICAgIH0KK30KKworLyogQnVmZmVyIHNpemUgZm9yIHJlYWRpbmcgaW5jb21pbmcgbWVzc2FnZXMuICovCisjZGVmaW5lIE1BWE1TR1NJWkUgNDA5NgorCisvKgorICogUmVhZCBhbmQgcHJvY2VzcyBhIGNvbW1hbmQgZnJvbSBuZXRiZWFucy4KKyAqLworLypBUkdTVVNFRCovCisjaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpIHx8IGRlZmluZWQoUFJPVE8pCisvKiBVc2UgdGhpcyBvbmUgd2hlbiBnZW5lcmF0aW5nIHByb3RvdHlwZXMsIHRoZSBvdGhlcnMgYXJlIHN0YXRpYy4gKi8KKyAgICB2b2lkCittZXNzYWdlRnJvbU5ldGJlYW5zVzMyKCkKKyNlbHNlCisjIGlmZGVmIEZFQVRfR1VJX01PVElGCisgICAgc3RhdGljIHZvaWQKK21lc3NhZ2VGcm9tTmV0YmVhbnMoWHRQb2ludGVyIGNsaWVudERhdGEsIGludCAqdW51c2VkMSwgWHRJbnB1dElkICp1bnVzZWQyKQorIyBlbmRpZgorIyBpZmRlZiBGRUFUX0dVSV9HVEsKKyAgICBzdGF0aWMgdm9pZAorbWVzc2FnZUZyb21OZXRiZWFucyhncG9pbnRlciBjbGllbnREYXRhLCBnaW50IHVudXNlZDEsCisJCQkJCQkgICAgR2RrSW5wdXRDb25kaXRpb24gdW51c2VkMikKKyMgZW5kaWYKKyNlbmRpZgoreworICAgIHN0YXRpYyBjaGFyX3UJKmJ1ZiA9IE5VTEw7CisgICAgaW50CQkJbGVuOworICAgIGludAkJCXJlYWRsZW4gPSAwOworICAgIHN0YXRpYyBpbnQJCWxldmVsID0gMDsKKworICAgIGlmIChzZCA8IDApCisgICAgeworCW5iZGVidWcoKCJtZXNzYWdlRnJvbU5ldGJlYW5zKCkgY2FsbGVkIHdpdGhvdXQgYSBzb2NrZXRcbiIpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgKytsZXZlbDsgIC8qIHJlY3Vyc2lvbiBndWFyZDsgdGhpcyB3aWxsIGJlIGNhbGxlZCBmcm9tIHRoZSBYIGV2ZW50IGxvb3AgKi8KKworICAgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIHRvIHJlYWQgaW50by4gKi8KKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgeworCWJ1ZiA9IGFsbG9jKE1BWE1TR1NJWkUpOworCWlmIChidWYgPT0gTlVMTCkKKwkgICAgcmV0dXJuOwkvKiBvdXQgb2YgbWVtb3J5ISAqLworICAgIH0KKworICAgIC8qIEtlZXAgb24gcmVhZGluZyBmb3IgYXMgbG9uZyBhcyB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVhZC4gKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwlsZW4gPSBzb2NrX3JlYWQoc2QsIGJ1ZiwgTUFYTVNHU0laRSk7CisJaWYgKGxlbiA8PSAwKQorCSAgICBicmVhazsJLyogZXJyb3Igb3Igbm90aGluZyBtb3JlIHRvIHJlYWQgKi8KKworCS8qIFN0b3JlIHRoZSByZWFkIG1lc3NhZ2UgaW4gdGhlIHF1ZXVlLiAqLworCXNhdmUoYnVmLCBsZW4pOworCXJlYWRsZW4gKz0gbGVuOworCWlmIChsZW4gPCBNQVhNU0dTSVpFKQorCSAgICBicmVhazsJLyogZGlkIHJlYWQgZXZlcnl0aGluZyB0aGF0J3MgYXZhaWxhYmxlICovCisgICAgfQorCisgICAgaWYgKHJlYWRsZW4gPD0gMCkKKyAgICB7CisJLyogcmVhZCBlcnJvciBvciBkaWRuJ3QgcmVhZCBhbnl0aGluZyAqLworCW5ldGJlYW5zX2Rpc2Nvbm5lY3QoKTsKKwluYmRlYnVnKCgibWVzc2FnZUZyb21OZXRiZWFuczogRXJyb3IgaW4gcmVhZCgpIGZyb20gc29ja2V0XG4iKSk7CisJaWYgKGxlbiA8IDApCisJICAgIFBFUlJPUihfKCJyZWFkIGZyb20gTmV0YmVhbnMgc29ja2V0IikpOworCXJldHVybjsgLyogZG9uJ3QgdHJ5IHRvIHBhcnNlIGl0ICovOworICAgIH0KKworICAgIC8qIFBhcnNlIHRoZSBtZXNzYWdlcywgYnV0IGF2b2lkIHJlY3Vyc2lvbi4gKi8KKyAgICBpZiAobGV2ZWwgPT0gMSkKKwluYl9wYXJzZV9tZXNzYWdlcygpOworCisgICAgLS1sZXZlbDsKK30KKworLyoKKyAqIEhhbmRsZSBvbmUgTlVMIHRlcm1pbmF0ZWQgY29tbWFuZC4KKyAqCisgKiBmb3JtYXQgb2YgYSBjb21tYW5kIGZyb20gbmV0YmVhbnM6CisgKgorICogICAgNjpzZXRUaXRsZSE4NCAiYS5jIgorICoKKyAqICAgIGJ1Zm5vCisgKiAgICAgY29sb24KKyAqICAgICAgY21kCisgKgkJIQorICoJCSBjbWRubworICoJCSAgICBhcmdzCisgKgorICogZm9yIGZ1bmN0aW9uIGNhbGxzLCB0aGUgISBpcyByZXBsYWNlZCBieSBhIC8KKyAqLworICAgIHN0YXRpYyB2b2lkCituYl9wYXJzZV9jbWQoY2hhcl91ICpjbWQpCit7CisgICAgY2hhcl91CSp2ZXJiOworICAgIGNoYXJfdQkqcTsKKyAgICBpbnQJCWJ1Zm5vOworICAgIGludAkJaXNmdW5jID0gLTE7CisKKyAgICBpZiAoU1RSQ01QKGNtZCwgIkRJU0NPTk5FQ1QiKSA9PSAwKQorICAgIHsKKwkvKiBXZSBhc3N1bWUgdGhlIHNlcnZlciBrbm93cyB0aGF0IHdlIGNhbiBzYWZlbHkgZXhpdCEgKi8KKwlpZiAoc2QgPj0gMCkKKwkgICAgc29ja19jbG9zZShzZCk7CisJLyogRGlzY29ubmVjdCBiZWZvcmUgZXhpdGluZywgTW90aWYgaGFuZ3MgaW4gYSBTZWxlY3QgZXJyb3IKKwkgKiBtZXNzYWdlIG90aGVyd2lzZS4gKi8KKwluZXRiZWFuc19kaXNjb25uZWN0KCk7CisJZ2V0b3V0KDApOworCS8qIE5PVFJFQUNIRUQgKi8KKyAgICB9CisKKyAgICBpZiAoU1RSQ01QKGNtZCwgIkRFVEFDSCIpID09IDApCisgICAgeworCS8qIFRoZSBJREUgaXMgYnJlYWtpbmcgdGhlIGNvbm5lY3Rpb24uICovCisJaWYgKHNkID49IDApCisJICAgIHNvY2tfY2xvc2Uoc2QpOworCW5ldGJlYW5zX2Rpc2Nvbm5lY3QoKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgYnVmbm8gPSBzdHJ0b2woKGNoYXIgKiljbWQsIChjaGFyICoqKSZ2ZXJiLCAxMCk7CisKKyAgICBpZiAoKnZlcmIgIT0gJzonKQorICAgIHsKKwlFTVNHMigiRTYyNzogbWlzc2luZyBjb2xvbjogJXMiLCBjbWQpOworCXJldHVybjsKKyAgICB9CisgICAgKyt2ZXJiOyAvKiBza2lwIGNvbG9uICovCisKKyAgICBmb3IgKHEgPSB2ZXJiOyAqcTsgcSsrKQorICAgIHsKKwlpZiAoKnEgPT0gJyEnKQorCXsKKwkgICAgKnErKyA9IE5VTDsKKwkgICAgaXNmdW5jID0gMDsKKwkgICAgYnJlYWs7CisJfQorCWVsc2UgaWYgKCpxID09ICcvJykKKwl7CisJICAgICpxKysgPSBOVUw7CisJICAgIGlzZnVuYyA9IDE7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICBpZiAoaXNmdW5jIDwgMCkKKyAgICB7CisJRU1TRzIoIkU2Mjg6IG1pc3NpbmcgISBvciAvIGluOiAlcyIsIGNtZCk7CisJcmV0dXJuOworICAgIH0KKworICAgIGNtZG5vID0gc3RydG9sKChjaGFyICopcSwgKGNoYXIgKiopJnEsIDEwKTsKKworICAgIHEgPSBza2lwd2hpdGUocSk7CisKKyAgICBpZiAobmJfZG9fY21kKGJ1Zm5vLCB2ZXJiLCBpc2Z1bmMsIGNtZG5vLCBxKSA9PSBGQUlMKQorICAgIHsKKwluYmRlYnVnKCgibmJfcGFyc2VfY21kOiBDb21tYW5kIGVycm9yIGZvciBcIiVzXCJcbiIsIGNtZCkpOworCUVNU0coIkU2Mjk6IGJhZCByZXR1cm4gZnJvbSBuYl9kb19jbWQiKTsKKyAgICB9Cit9CisKK3N0cnVjdCBuYmJ1Zl9zdHJ1Y3QKK3sKKyAgICBidWZfVAkJKmJ1ZnA7CisgICAgdW5zaWduZWQgaW50CSBmaXJlQ2hhbmdlczoxOworICAgIHVuc2lnbmVkIGludAkgaW5pdERvbmU6MTsKKyAgICB1bnNpZ25lZCBpbnQJIG1vZGlmaWVkOjE7CisgICAgY2hhcgkJKmRpc3BsYXluYW1lOworICAgIGNoYXJfdQkJKnBhcnRpYWxfbGluZTsKKyAgICBpbnQJCQkqc2lnbm1hcDsKKyAgICBzaG9ydF91CQkgc2lnbm1hcGxlbjsKKyAgICBzaG9ydF91CQkgc2lnbm1hcHVzZWQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCBuYmJ1Zl9zdHJ1Y3QgbmJidWZfVDsKKworc3RhdGljIG5iYnVmX1QgKmJ1Zl9saXN0ID0gMDsKK2ludCBidWZfbGlzdF9zaXplID0gMDsJLyogc2l6ZSBvZiBidWZfbGlzdCAqLworaW50IGJ1Zl9saXN0X3VzZWQgPSAwOwkvKiBuciBvZiBlbnRyaWVzIGluIGJ1Zl9saXN0IGFjdHVhbGx5IGluIHVzZSAqLworCitzdGF0aWMgY2hhciAqKmdsb2JhbHNpZ25tYXA7CitzdGF0aWMgaW50IGdsb2JhbHNpZ25tYXBsZW47CitzdGF0aWMgaW50IGdsb2JhbHNpZ25tYXB1c2VkOworCitzdGF0aWMgaW50ICBtYXBzaWdudHlwZSBfX0FSR1MoKG5iYnVmX1QgKiwgaW50IGxvY2Fsc2lnbnR5cGUpKTsKK3N0YXRpYyB2b2lkIGFkZHNpZ250eXBlIF9fQVJHUygobmJidWZfVCAqLCBpbnQgbG9jYWxzaWdudHlwZSwgY2hhcl91ICp0eXBlTmFtZSwKKwkJCWNoYXJfdSAqdG9vbHRpcCwgY2hhcl91ICpnbHlwaGZpbGUsCisJCQlpbnQgdXNlZmcsIGludCBmZywgaW50IHVzZWJnLCBpbnQgYmcpKTsKKworc3RhdGljIGludCBjdXJQQ3R5cGUgPSAtMTsKKworLyoKKyAqIEdldCB0aGUgTmV0YmVhbnMgYnVmZmVyIG51bWJlciBmb3IgdGhlIHNwZWNpZmllZCBidWZmZXIuCisgKi8KKyAgICBzdGF0aWMgaW50CituYl9nZXRidWZubyhidWZfVCAqYnVmcCkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBidWZfbGlzdF91c2VkOyBpKyspCisJaWYgKGJ1Zl9saXN0W2ldLmJ1ZnAgPT0gYnVmcCkKKwkgICAgcmV0dXJuIGk7CisgICAgcmV0dXJuIC0xOworfQorCisvKgorICogSXMgdGhpcyBhIE5ldEJlYW5zLW93bmVkIGJ1ZmZlcj8KKyAqLworICAgIGludAoraXNOZXRiZWFuc0J1ZmZlcihidWZfVCAqYnVmcCkKK3sKKyAgICByZXR1cm4gYnVmcC0+Yl9uZXRiZWFuc19maWxlOworfQorCisvKgorICogTmV0QmVhbnMgYW5kIFZpbSBoYXZlIGRpZmZlcmVudCB1bmRvIG1vZGVscy4gSW4gVmltLCB0aGUgZmlsZSBpc24ndAorICogY2hhbmdlZCBpZiBjaGFuZ2VzIGFyZSB1bmRvbmUgdmlhIHRoZSB1bmRvIGNvbW1hbmQuIEluIE5ldEJlYW5zLCBvbmNlCisgKiBhIGNoYW5nZSBoYXMgYmVlbiBtYWRlIHRoZSBmaWxlIGlzIG1hcmtlZCBhcyBtb2RpZmllZCB1bnRpbCBzYXZlZC4gSXQKKyAqIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSBjaGFuZ2Ugd2FzIHVuZG9uZS4KKyAqCisgKiBTbyB0aGlzIGZ1bmN0aW9uIGlzIGZvciB0aGUgY29ybmVyIGNhc2Ugd2hlcmUgVmltIHRoaW5rcyBhIGJ1ZmZlciBpcworICogdW5tb2RpZmllZCBidXQgTmV0QmVhbnMgdGhpbmtzIGl0IElTIG1vZGlmaWVkLgorICovCisgICAgaW50Citpc05ldGJlYW5zTW9kaWZpZWQoYnVmX1QgKmJ1ZnApCit7CisgICAgaW50IGJ1Zm5vID0gbmJfZ2V0YnVmbm8oYnVmcCk7CisKKyAgICBpZiAoYnVmbm8gPiAwKQorCXJldHVybiBidWZfbGlzdFtidWZub10ubW9kaWZpZWQ7CisgICAgZWxzZQorCXJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIEdpdmVuIGEgTmV0YmVhbnMgYnVmZmVyIG51bWJlciwgcmV0dXJuIHRoZSBuZXRiZWFucyBidWZmZXIuCisgKiBSZXR1cm5zIE5VTEwgZm9yIDAgb3IgYSBuZWdhdGl2ZSBudW1iZXIuIEEgMCBidWZubyBtZWFucyBhCisgKiBub24tYnVmZmVyIHJlbGF0ZWQgY29tbWFuZCBoYXMgYmVlbiBzZW50LgorICovCisgICAgc3RhdGljIG5iYnVmX1QgKgorbmJfZ2V0X2J1ZihpbnQgYnVmbm8pCit7CisgICAgLyogZmluZCBvciBjcmVhdGUgYSBidWZmZXIgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyICovCisgICAgaW50IGluY3I7CisKKyAgICBpZiAoYnVmbm8gPD0gMCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmICghYnVmX2xpc3QpCisgICAgeworCS8qIGluaXRpYWxpemUgKi8KKwlidWZfbGlzdCA9IChuYmJ1Zl9UICopYWxsb2NfY2xlYXIoMTAwICogc2l6ZW9mKG5iYnVmX1QpKTsKKwlidWZfbGlzdF9zaXplID0gMTAwOworICAgIH0KKyAgICBpZiAoYnVmbm8gPj0gYnVmX2xpc3RfdXNlZCkgLyogbmV3ICovCisgICAgeworCWlmIChidWZubyA+PSBidWZfbGlzdF9zaXplKSAvKiBncm93IGxpc3QgKi8KKwl7CisJICAgIGluY3IgPSBidWZubyAtIGJ1Zl9saXN0X3NpemUgKyA5MDsKKwkgICAgYnVmX2xpc3Rfc2l6ZSArPSBpbmNyOworCSAgICBidWZfbGlzdCA9IChuYmJ1Zl9UICopdmltX3JlYWxsb2MoCisJCQkJICAgYnVmX2xpc3QsIGJ1Zl9saXN0X3NpemUgKiBzaXplb2YobmJidWZfVCkpOworCSAgICBtZW1zZXQoYnVmX2xpc3QgKyBidWZfbGlzdF9zaXplIC0gaW5jciwgMCwgaW5jciAqIHNpemVvZihuYmJ1Zl9UKSk7CisJfQorCisJd2hpbGUgKGJ1Zl9saXN0X3VzZWQgPD0gYnVmbm8pCisJeworCSAgICAvKiBEZWZhdWx0IGlzIHRvIGZpcmUgdGV4dCBjaGFuZ2VzLiAqLworCSAgICBidWZfbGlzdFtidWZfbGlzdF91c2VkXS5maXJlQ2hhbmdlcyA9IDE7CisJICAgICsrYnVmX2xpc3RfdXNlZDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIGJ1Zl9saXN0ICsgYnVmbm87Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBidWZmZXJzIHRoYXQgYXJlIG1vZGlmaWVkLgorICovCisgICAgc3RhdGljIGludAorY291bnRfY2hhbmdlZF9idWZmZXJzKHZvaWQpCit7CisgICAgYnVmX1QJKmJ1ZnA7CisgICAgaW50CQluOworCisgICAgbiA9IDA7CisgICAgZm9yIChidWZwID0gZmlyc3RidWY7IGJ1ZnAgIT0gTlVMTDsgYnVmcCA9IGJ1ZnAtPmJfbmV4dCkKKwlpZiAoYnVmcC0+Yl9jaGFuZ2VkKQorCSAgICArK247CisgICAgcmV0dXJuIG47Cit9CisKKy8qCisgKiBFbmQgdGhlIG5ldGJlYW5zIHNlc3Npb24uCisgKi8KKyAgICB2b2lkCituZXRiZWFuc19lbmQodm9pZCkKK3sKKyAgICBpbnQgaTsKKyAgICBzdGF0aWMgY2hhciBidWZbMTI4XTsKKworICAgIGlmICghaGF2ZUNvbm5lY3Rpb24pCisJcmV0dXJuOworCisgICAgZm9yIChpID0gMDsgaSA8IGJ1Zl9saXN0X3VzZWQ7IGkrKykKKyAgICB7CisJaWYgKCFidWZfbGlzdFtpXS5idWZwKQorCSAgICBjb250aW51ZTsKKwlpZiAobmV0YmVhbnNGb3JjZWRRdWl0KQorCXsKKwkgICAgLyogbWFyayBhcyB1bm1vZGlmaWVkIHNvIE5ldEJlYW5zIHdvbid0IHB1dCB1cCBkaWFsb2cgb24gImtpbGxlZCIgKi8KKwkgICAgc3ByaW50ZihidWYsICIlZDp1bm1vZGlmaWVkPSVkXG4iLCBpLCBjbWRubyk7CisJICAgIG5iZGVidWcoKCJFVlQ6ICVzIiwgYnVmKSk7CisJICAgIG5iX3NlbmQoYnVmLCAibmV0YmVhbnNfZW5kIik7CisJfQorCXNwcmludGYoYnVmLCAiJWQ6a2lsbGVkPSVkXG4iLCBpLCBjbWRubyk7CisJbmJkZWJ1ZygoIkVWVDogJXMiLCBidWYpKTsKKy8qCW5iX3NlbmQoYnVmLCAibmV0YmVhbnNfZW5kIik7ICAgIGF2b2lkICJ3cml0ZSBmYWlsZWQiIG1lc3NhZ2VzICovCisJaWYgKHNkID49IDApCisJICAgIHNvY2tfd3JpdGUoc2QsIGJ1ZiwgU1RSTEVOKGJ1ZikpOyAgLyogaWdub3JlIGVycm9ycyAqLworICAgIH0KKworICAgIC8qIEdpdmUgTmV0QmVhbnMgYSBjaGFuY2UgdG8gd3JpdGUgc29tZSBjbGVhbi11cCBjbWRzIHRvIHRoZSBzb2NrZXQgYmVmb3JlCisgICAgICogd2UgY2xvc2UgdGhlIGNvbm5lY3Rpb24uICBPdGhlciBjbGllbnRzIG1heSBzZXQgdGhlIGRlbGF5IHRvIHplcm8uICovCisgICAgaWYgKGV4aXRfZGVsYXkgPiAwKQorCXNsZWVwKGV4aXRfZGVsYXkpOworfQorCisvKgorICogU2VuZCBhIG1lc3NhZ2UgdG8gbmV0YmVhbnMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbmJfc2VuZChjaGFyICpidWYsIGNoYXIgKmZ1bikKK3sKKyAgICAvKiBBdm9pZCBnaXZpbmcgcGFnZXMgZnVsbCBvZiBlcnJvciBtZXNzYWdlcyB3aGVuIHRoZSBvdGhlciBzaWRlIGhhcworICAgICAqIGV4aXRlZCwgb25seSBtZW50aW9uIHRoZSBmaXJzdCBlcnJvciB1bnRpbCB0aGUgY29ubmVjdGlvbiB3b3JrcyBhZ2Fpbi4gKi8KKyAgICBzdGF0aWMgaW50IGRpZF9lcnJvciA9IEZBTFNFOworCisgICAgaWYgKHNkIDwgMCkKKyAgICB7CisJaWYgKCFkaWRfZXJyb3IpCisJICAgIEVNU0cyKCJFNjMwOiAlcygpOiB3cml0ZSB3aGlsZSBub3QgY29ubmVjdGVkIiwgZnVuKTsKKwlkaWRfZXJyb3IgPSBUUlVFOworICAgIH0KKyAgICBlbHNlIGlmIChzb2NrX3dyaXRlKHNkLCBidWYsIFNUUkxFTihidWYpKSAhPSAoaW50KVNUUkxFTihidWYpKQorICAgIHsKKwlpZiAoIWRpZF9lcnJvcikKKwkgICAgRU1TRzIoIkU2MzE6ICVzKCk6IHdyaXRlIGZhaWxlZCIsIGZ1bik7CisJZGlkX2Vycm9yID0gVFJVRTsKKyAgICB9CisgICAgZWxzZQorCWRpZF9lcnJvciA9IEZBTFNFOworfQorCisvKgorICogU29tZSBpbnB1dCByZWNlaXZlZCBmcm9tIG5ldGJlYW5zIHJlcXVpcmVzIGEgcmVzcG9uc2UuIFRoaXMgZnVuY3Rpb24KKyAqIGhhbmRsZXMgYSByZXNwb25zZSB3aXRoIG5vIGluZm9ybWF0aW9uIChleGNlcHQgdGhlIGNvbW1hbmQgbnVtYmVyKS4KKyAqLworICAgIHN0YXRpYyB2b2lkCituYl9yZXBseV9uaWwoaW50IGNtZG5vKQoreworICAgIGNoYXIgcmVwbHlbMzJdOworCisgICAgaWYgKCFoYXZlQ29ubmVjdGlvbikKKwlyZXR1cm47CisKKyAgICBzcHJpbnRmKHJlcGx5LCAiJWRcbiIsIGNtZG5vKTsKKworICAgIG5iZGVidWcoKCIgICAgUkVQTFk6ICVzIiwgcmVwbHkpKTsKKworICAgIG5iX3NlbmQocmVwbHksICJuYl9yZXBseV9uaWwiKTsKK30KKworCisvKgorICogU2VuZCBhIHJlc3BvbnNlIHdpdGggdGV4dC4KKyAqICJyZXN1bHQiIG11c3QgaGF2ZSBiZWVuIHF1b3RlZCBhbHJlYWR5ICh1c2luZyBuYl9xdW90ZSgpKS4KKyAqLworICAgIHN0YXRpYyB2b2lkCituYl9yZXBseV90ZXh0KGludCBjbWRubywgY2hhcl91ICpyZXN1bHQpCit7CisgICAgY2hhcl91ICpyZXBseTsKKworICAgIGlmICghaGF2ZUNvbm5lY3Rpb24pCisJcmV0dXJuOworCisgICAgcmVwbHkgPSBhbGxvYyhTVFJMRU4ocmVzdWx0KSArIDMyKTsKKyAgICBzcHJpbnRmKChjaGFyICopcmVwbHksICIlZCAlc1xuIiwgY21kbm8sIChjaGFyICopcmVzdWx0KTsKKworICAgIG5iZGVidWcoKCIgICAgUkVQTFk6ICVzIiwgcmVwbHkpKTsKKyAgICBuYl9zZW5kKChjaGFyICopcmVwbHksICJuYl9yZXBseV90ZXh0Iik7CisKKyAgICB2aW1fZnJlZShyZXBseSk7Cit9CisKKworLyoKKyAqIFNlbmQgYSByZXNwb25zZSB3aXRoIGEgbnVtYmVyIHJlc3VsdCBjb2RlLgorICovCisgICAgc3RhdGljIHZvaWQKK25iX3JlcGx5X25yKGludCBjbWRubywgbG9uZyByZXN1bHQpCit7CisgICAgY2hhciByZXBseVszMl07CisKKyAgICBpZiAoIWhhdmVDb25uZWN0aW9uKQorCXJldHVybjsKKworICAgIHNwcmludGYocmVwbHksICIlZCAlbGRcbiIsIGNtZG5vLCByZXN1bHQpOworCisgICAgbmJkZWJ1ZygoIlJFUExZOiAlcyIsIHJlcGx5KSk7CisKKyAgICBuYl9zZW5kKHJlcGx5LCAibmJfcmVwbHlfbnIiKTsKK30KKworCisvKgorICogRW5jb2RlIG5ld2xpbmUsIHJldCwgYmFja3NsYXNoLCBkb3VibGUgcXVvdGUgZm9yIHRyYW5zbWlzc2lvbiB0byBOZXRCZWFucy4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorbmJfcXVvdGUoY2hhcl91ICp0eHQpCit7CisgICAgY2hhcl91ICpidWYgPSBhbGxvYygyICogU1RSTEVOKHR4dCkgKyAxKTsKKyAgICBjaGFyX3UgKnAgPSB0eHQ7CisgICAgY2hhcl91ICpxID0gYnVmOworCisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgIGZvciAoOyAqcDsgcCsrKQorICAgIHsKKwlzd2l0Y2ggKCpwKQorCXsKKwkgICAgY2FzZSAnXCInOgorCSAgICBjYXNlICdcXCc6CisJCSpxKysgPSAnXFwnOyAqcSsrID0gKnA7IGJyZWFrOworCSAvKiBjYXNlICdcdCc6ICovCisJIC8qICAgICAqcSsrID0gJ1xcJzsgKnErKyA9ICd0JzsgYnJlYWs7ICovCisJICAgIGNhc2UgJ1xuJzoKKwkJKnErKyA9ICdcXCc7ICpxKysgPSAnbic7IGJyZWFrOworCSAgICBjYXNlICdccic6CisJCSpxKysgPSAnXFwnOyAqcSsrID0gJ3InOyBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJKnErKyA9ICpwOworCQlicmVhazsKKwl9CisgICAgfQorICAgICpxKysgPSAnXDAnOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKworCisvKgorICogUmVtb3ZlIHRvcCBsZXZlbCBkb3VibGUgcXVvdGVzOyBjb252ZXJ0IGJhY2tzbGFzaGVkIGNoYXJzLgorICogUmV0dXJucyBhbiBhbGxvY2F0ZWQgc3RyaW5nIChOVUxMIGZvciBmYWlsdXJlKS4KKyAqIElmICJlbmRwIiBpcyBub3QgTlVMTCBpdCBpcyBzZXQgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRpbmcKKyAqIHF1b3RlLgorICovCisgICAgc3RhdGljIGNoYXIgKgorbmJfdW5xdW90ZShjaGFyX3UgKnAsIGNoYXJfdSAqKmVuZHApCit7CisgICAgY2hhciAqcmVzdWx0ID0gMDsKKyAgICBjaGFyICpxOworICAgIGludCBkb25lID0gMDsKKworICAgIC8qIHJlc3VsdCBpcyBuZXZlciBsb25nZXIgdGhhbiBpbnB1dCAqLworICAgIHJlc3VsdCA9IChjaGFyICopYWxsb2NfY2xlYXIoU1RSTEVOKHApICsgMSk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgaWYgKCpwKysgIT0gJyInKQorICAgIHsKKwluYmRlYnVnKCgibmJfdW5xdW90ZSBjYWxsZWQgd2l0aCBzdHJpbmcgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggYSBxdW90ZSE6ICVzXG4iLAorCQkJcCkpOworCXJlc3VsdFswXSA9IE5VTDsKKwlyZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGZvciAocSA9IHJlc3VsdDsgIWRvbmUgJiYgKnAgIT0gTlVMOykKKyAgICB7CisJc3dpdGNoICgqcCkKKwl7CisJICAgIGNhc2UgJyInOgorCQkvKgorCQkgKiBVbmJhY2tzbGFzaGVkIGRxdW90ZSBtYXJrcyB0aGUgZW5kLCBpZiBmaXJzdCBjaGFyIHdhcyBkcXVvdGUuCisJCSAqLworCQlkb25lID0gMTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnXFwnOgorCQkrK3A7CisJCXN3aXRjaCAoKnApCisJCXsKKwkJICAgIGNhc2UgJ1xcJzoJKnErKyA9ICdcXCc7CWJyZWFrOworCQkgICAgY2FzZSAnbic6CSpxKysgPSAnXG4nOwlicmVhazsKKwkJICAgIGNhc2UgJ3QnOgkqcSsrID0gJ1x0JzsJYnJlYWs7CisJCSAgICBjYXNlICdyJzoJKnErKyA9ICdccic7CWJyZWFrOworCQkgICAgY2FzZSAnIic6CSpxKysgPSAnIic7CWJyZWFrOworCQkgICAgY2FzZSBOVUw6CS0tcDsJCWJyZWFrOworCQkgICAgLyogZGVmYXVsdDogc2tpcCBvdmVyIGlsbGVnYWwgY2hhcnMgKi8KKwkJfQorCQkrK3A7CisJCWJyZWFrOworCisJICAgIGRlZmF1bHQ6CisJCSpxKysgPSAqcCsrOworCX0KKyAgICB9CisKKyAgICBpZiAoZW5kcCAhPSBOVUxMKQorCSplbmRwID0gcDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgU0tJUF9TVE9QIDIKKyNkZWZpbmUgc3RyZXEoYSxiKSAoc3RyY21wKGEsYikgPT0gMCkKK3N0YXRpYyBpbnQgbmVlZHVwZGF0ZSA9IDA7CitzdGF0aWMgaW50IGluQXRvbWljID0gMDsKKworLyoKKyAqIERvIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBvZiBhIHNpbmdsZSBuZXRiZWFucyBjb21tYW5kIG9yIGZ1bmN0aW9uLgorICogVGhlIGRpZmZlcmFuY2UgYmV0d2VlbiBhIGNvbW1hbmQgYW5kIGZ1bmN0aW9uIGlzIHRoYXQgYSBmdW5jdGlvbgorICogZ2V0cyBhIHJlc3BvbnNlIChpdHMgcmVxdWlyZWQpIGJ1dCBhIGNvbW1hbmQgZG9lcyBub3QuCisgKiBGb3IgYXJndW1lbnRzIHNlZSBjb21tZW50IGZvciBuYl9wYXJzZV9jbWQoKS4KKyAqLworICAgIHN0YXRpYyBpbnQKK25iX2RvX2NtZCgKKyAgICBpbnQJCWJ1Zm5vLAorICAgIGNoYXJfdQkqY21kLAorICAgIGludAkJZnVuYywKKyAgICBpbnQJCWNtZG5vLAorICAgIGNoYXJfdQkqYXJncykJICAgIC8qIHBvaW50cyB0byBzcGFjZSBiZWZvcmUgYXJndW1lbnRzIG9yIE5VTCAqLworeworICAgIGludAkJZG91cGRhdGUgPSAwOworICAgIGxvbmcJb2ZmID0gMDsKKyAgICBuYmJ1Zl9UCSpidWYgPSBuYl9nZXRfYnVmKGJ1Zm5vKTsKKyAgICBzdGF0aWMgaW50CXNraXAgPSAwOworICAgIGludAkJcmV0dmFsID0gT0s7CisKKyAgICBuYmRlYnVnKCgiJXMgJWQ6ICglZCkgJXMgJXNcbiIsIChmdW5jKSA/ICJGVU4iIDogIkNNRCIsIGNtZG5vLCBidWZubywgY21kLAorCVNUUkNNUChjbWQsICJpbnNlcnQiKSA9PSAwID8gIjx0ZXh0PiIgOiAoY2hhciAqKWFyZ3MpKTsKKworICAgIGlmIChmdW5jKQorICAgIHsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJaWYgKHN0cmVxKChjaGFyICopY21kLCAiZ2V0TW9kaWZpZWQiKSkKKwl7CisJICAgIGlmIChidWYgPT0gTlVMTCB8fCBidWYtPmJ1ZnAgPT0gTlVMTCkKKwkJLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnVmZmVycyB0aGF0IGFyZSBtb2RpZmllZC4gKi8KKwkJbmJfcmVwbHlfbnIoY21kbm8sIChsb25nKWNvdW50X2NoYW5nZWRfYnVmZmVycygpKTsKKwkgICAgZWxzZQorCQkvKiBSZXR1cm4gd2hldGhlciB0aGUgYnVmZmVyIGlzIG1vZGlmaWVkLiAqLworCQluYl9yZXBseV9ucihjbWRubywgKGxvbmcpKGJ1Zi0+YnVmcC0+Yl9jaGFuZ2VkCisJCQkJCSAgIHx8IGlzTmV0YmVhbnNNb2RpZmllZChidWYtPmJ1ZnApKSk7CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCX0KKwllbHNlIGlmIChzdHJlcSgoY2hhciAqKWNtZCwgInNhdmVBbmRFeGl0IikpCisJeworCSAgICAvKiBOb3RlOiB0aGlzIHdpbGwgZXhpdCBWaW0gaWYgc3VjY2Vzc2Z1bC4gKi8KKwkgICAgY29sb25jbWQoIjpjb25maXJtIHFhbGwiKTsKKworCSAgICAvKiBXZSBkaWRuJ3QgZXhpdDogcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhbmdlZCBidWZmZXJzLiAqLworCSAgICBuYl9yZXBseV9ucihjbWRubywgKGxvbmcpY291bnRfY2hhbmdlZF9idWZmZXJzKCkpOworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwl9CisJZWxzZSBpZiAoc3RyZXEoKGNoYXIgKiljbWQsICJnZXRDdXJzb3IiKSkKKwl7CisJICAgIGNoYXJfdSB0ZXh0WzIwMF07CisKKwkgICAgLyogTm90ZTogbmJfZ2V0YnVmbm8oKSBtYXkgcmV0dXJuIC0xLiAgVGhpcyBpbmRpY2F0ZXMgdGhlIElERQorCSAgICAgKiBkaWRuJ3QgYXNzaWduIGEgbnVtYmVyIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciBpbiByZXNwb25zZSB0byBhCisJICAgICAqIGZpbGVPcGVuZWQgZXZlbnQuICovCisJICAgIHNwcmludGYoKGNoYXIgKil0ZXh0LCAiJWQgJWxkICVkICVsZCIsCisJCSAgICBuYl9nZXRidWZubyhjdXJidWYpLAorCQkgICAgKGxvbmcpY3Vyd2luLT53X2N1cnNvci5sbnVtLAorCQkgICAgKGludCljdXJ3aW4tPndfY3Vyc29yLmNvbCwKKwkJICAgIHBvczJvZmYoY3VyYnVmLCAmY3Vyd2luLT53X2N1cnNvcikpOworCSAgICBuYl9yZXBseV90ZXh0KGNtZG5vLCB0ZXh0KTsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAiZ2V0TGVuZ3RoIikpCisJeworCSAgICBsb25nIGxlbiA9IDA7CisKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zi0+YnVmcCA9PSBOVUxMKQorCSAgICB7CisJCW5iZGVidWcoKCIgICAgbnVsbCBidWZwIGluIGdldExlbmd0aCIpKTsKKwkJRU1TRygiRTYzMjogbnVsbCBidWZwIGluIGdldExlbmd0aCIpOworCQlyZXR2YWwgPSBGQUlMOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlsZW4gPSBnZXRfYnVmX3NpemUoYnVmLT5idWZwKTsKKwkJLyogYWRqdXN0IGZvciBhIHBhcnRpYWwgbGFzdCBsaW5lICovCisJCWlmIChidWYtPnBhcnRpYWxfbGluZSAhPSBOVUxMKQorCQl7CisJCSAgICBuYmRlYnVnKCgiICAgIEFkanVzdGluZyBidWZmZXIgbGVuIGZvciBwYXJ0aWFsIGxhc3QgbGluZTogJWRcbiIsCisJCQkJU1RSTEVOKGJ1Zi0+cGFydGlhbF9saW5lKSkpOworCQkgICAgbGVuICs9IFNUUkxFTihidWYtPnBhcnRpYWxfbGluZSk7CisJCX0KKwkgICAgfQorCSAgICBuYl9yZXBseV9ucihjbWRubywgbGVuKTsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAiZ2V0VGV4dCIpKQorCXsKKwkgICAgbG9uZwlsZW47CisJICAgIGxpbmVucl9UCW5saW5lczsKKwkgICAgY2hhcl91CSp0ZXh0ID0gTlVMTDsKKwkgICAgbGluZW5yX1QJbG5vID0gMTsKKwkgICAgY2hhcl91CSpwOworCSAgICBjaGFyX3UJKmxpbmU7CisKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zi0+YnVmcCA9PSBOVUxMKQorCSAgICB7CisJCW5iZGVidWcoKCIgICAgbnVsbCBidWZwIGluIGdldFRleHQiKSk7CisJCUVNU0coIkU2MzM6IG51bGwgYnVmcCBpbiBnZXRUZXh0Iik7CisJCXJldHZhbCA9IEZBSUw7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWxlbiA9IGdldF9idWZfc2l6ZShidWYtPmJ1ZnApOworCQlubGluZXMgPSBidWYtPmJ1ZnAtPmJfbWwubWxfbGluZV9jb3VudDsKKwkJdGV4dCA9IGFsbG9jKCh1bnNpZ25lZCkoKGxlbiA+IDApCisJCQkJCQkgPyAoKGxlbiArIG5saW5lcykgKiAyKSA6IDQpKTsKKwkJaWYgKHRleHQgPT0gTlVMTCkKKwkJeworCQkgICAgbmJkZWJ1ZygoIiAgICBuYl9kb19jbWQ6IGdldFRleHQgaGFzIG51bGwgdGV4dCBmaWVsZFxuIikpOworCQkgICAgcmV0dmFsID0gRkFJTDsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIHAgPSB0ZXh0OworCQkgICAgKnArKyA9ICdcIic7CisJCSAgICBmb3IgKDsgbG5vIDw9IG5saW5lcyA7IGxubysrKQorCQkgICAgeworCQkJbGluZSA9IG5iX3F1b3RlKG1sX2dldF9idWYoYnVmLT5idWZwLCBsbm8sIEZBTFNFKSk7CisJCQlpZiAobGluZSAhPSBOVUxMKQorCQkJeworCQkJICAgIFNUUkNQWShwLCBsaW5lKTsKKwkJCSAgICBwICs9IFNUUkxFTihsaW5lKTsKKwkJCSAgICAqcCsrID0gJ1xcJzsKKwkJCSAgICAqcCsrID0gJ24nOworCQkJfQorCQkJdmltX2ZyZWUobGluZSk7CisJCSAgICB9CisJCSAgICAqcCsrID0gJ1wiJzsKKwkJICAgICpwID0gJ1wwJzsKKwkJfQorCSAgICB9CisJICAgIGlmICh0ZXh0ID09IE5VTEwpCisJCW5iX3JlcGx5X3RleHQoY21kbm8sIChjaGFyX3UgKikiIik7CisJICAgIGVsc2UKKwkgICAgeworCQluYl9yZXBseV90ZXh0KGNtZG5vLCB0ZXh0KTsKKwkJdmltX2ZyZWUodGV4dCk7CisJICAgIH0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAicmVtb3ZlIikpCisJeworCSAgICBsb25nIGNvdW50OworCSAgICBwb3NfVCBmaXJzdCwgbGFzdDsKKwkgICAgcG9zX1QgKnBvczsKKwkgICAgaW50IG9sZEZpcmUgPSBuZXRiZWFuc0ZpcmVDaGFuZ2VzOworCSAgICBpbnQgb2xkU3VwcHJlc3MgPSBuZXRiZWFuc1N1cHByZXNzTm9MaW5lczsKKwkgICAgaW50IHdhc0NoYW5nZWQ7CisKKwkgICAgaWYgKHNraXAgPj0gU0tJUF9TVE9QKQorCSAgICB7CisJCW5iZGVidWcoKCIgICAgU2tpcHBpbmcgJXMgY29tbWFuZFxuIiwgKGNoYXIgKikgY21kKSk7CisJCW5iX3JlcGx5X25pbChjbWRubyk7CisJCXJldHVybiBPSzsKKwkgICAgfQorCisJICAgIGlmIChidWYgPT0gTlVMTCB8fCBidWYtPmJ1ZnAgPT0gTlVMTCkKKwkgICAgeworCQluYmRlYnVnKCgiICAgIG51bGwgYnVmcCBpbiByZW1vdmUiKSk7CisJCUVNU0coIkU2MzQ6IG51bGwgYnVmcCBpbiByZW1vdmUiKTsKKwkJcmV0dmFsID0gRkFJTDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJbmV0YmVhbnNGaXJlQ2hhbmdlcyA9IEZBTFNFOworCQluZXRiZWFuc1N1cHByZXNzTm9MaW5lcyA9IFRSVUU7CisKKwkJaWYgKGN1cmJ1ZiAhPSBidWYtPmJ1ZnApCisJCSAgICBzZXRfY3VyYnVmKGJ1Zi0+YnVmcCwgRE9CVUZfR09UTyk7CisJCXdhc0NoYW5nZWQgPSBidWYtPmJ1ZnAtPmJfY2hhbmdlZDsKKwkJb2ZmID0gc3RydG9sKChjaGFyICopYXJncywgKGNoYXIgKiopJmFyZ3MsIDEwKTsKKwkJY291bnQgPSBzdHJ0b2woKGNoYXIgKilhcmdzLCAoY2hhciAqKikmYXJncywgMTApOworCQkvKiBkZWxldGUgImNvdW50IiBjaGFycywgc3RhcnRpbmcgYXQgIm9mZiIgKi8KKwkJcG9zID0gb2ZmMnBvcyhidWYtPmJ1ZnAsIG9mZik7CisJCWlmICghcG9zKQorCQl7CisJCSAgICBuYl9yZXBseV90ZXh0KGNtZG5vLCAoY2hhcl91ICopIiFiYWQgcG9zaXRpb24iKTsKKwkJICAgIG5ldGJlYW5zRmlyZUNoYW5nZXMgPSBvbGRGaXJlOworCQkgICAgbmV0YmVhbnNTdXBwcmVzc05vTGluZXMgPSBvbGRTdXBwcmVzczsKKwkJICAgIHJldHVybiBGQUlMOworCQl9CisJCWZpcnN0ID0gKnBvczsKKwkJbmJkZWJ1ZygoIiAgICBGSVJTVCBQT1M6IGxpbmUgJWQsIGNvbCAlZFxuIiwgZmlyc3QubG51bSwgZmlyc3QuY29sKSk7CisJCXBvcyA9IG9mZjJwb3MoYnVmLT5idWZwLCBvZmYrY291bnQtMSk7CisJCWlmICghcG9zKQorCQl7CisJCSAgICBuYl9yZXBseV90ZXh0KGNtZG5vLCAoY2hhcl91ICopIiFiYWQgY291bnQiKTsKKwkJICAgIG5ldGJlYW5zRmlyZUNoYW5nZXMgPSBvbGRGaXJlOworCQkgICAgbmV0YmVhbnNTdXBwcmVzc05vTGluZXMgPSBvbGRTdXBwcmVzczsKKwkJICAgIHJldHVybiBGQUlMOworCQl9CisJCWxhc3QgPSAqcG9zOworCQluYmRlYnVnKCgiICAgIExBU1QgUE9TOiBsaW5lICVkLCBjb2wgJWRcbiIsIGxhc3QubG51bSwgbGFzdC5jb2wpKTsKKwkJY3Vyd2luLT53X2N1cnNvciA9IGZpcnN0OworCQlkb3VwZGF0ZSA9IDE7CisKKwkJLyoga2VlcCBwYXJ0IG9mIGZpcnN0IGxpbmUgKi8KKwkJaWYgKGZpcnN0LmxudW0gPT0gbGFzdC5sbnVtICYmIGZpcnN0LmNvbCAhPSBsYXN0LmNvbCkKKwkJeworCQkgICAgLyogZGVsZXRpb24gaXMgd2l0aGluIG9uZSBsaW5lICovCisJCSAgICBjaGFyX3UgKnAgPSBtbF9nZXQoZmlyc3QubG51bSk7CisJCSAgICBtY2hfbWVtbW92ZShwICsgZmlyc3QuY29sLCBwICsgbGFzdC5jb2wgKyAxLCBTVFJMRU4ocCArIGxhc3QuY29sKSArIDEpOworCQkgICAgbmJkZWJ1ZygoIiAgICBORVcgTElORSAlZDogJXNcbiIsIGZpcnN0LmxudW0sIHApKTsKKwkJICAgIG1sX3JlcGxhY2UoZmlyc3QubG51bSwgcCwgVFJVRSk7CisJCX0KKworCQlpZiAoZmlyc3QubG51bSA8IGxhc3QubG51bSkKKwkJeworCQkgICAgaW50IGk7CisKKwkJICAgIC8qIGRlbGV0ZSBzaWducyBmcm9tIHRoZSBsaW5lcyBiZWluZyBkZWxldGVkICovCisJCSAgICBmb3IgKGkgPSBmaXJzdC5sbnVtOyBpIDw9IGxhc3QubG51bTsgaSsrKQorCQkgICAgeworCQkJaW50IGlkID0gYnVmX2ZpbmRzaWduX2lkKGJ1Zi0+YnVmcCwgKGxpbmVucl9UKWkpOworCQkJaWYgKGlkID4gMCkKKwkJCXsKKwkJCSAgICBuYmRlYnVnKCgiICAgIERlbGV0aW5nIHNpZ24gJWQgb24gbGluZSAlZFxuIiwgaWQsIGkpKTsKKwkJCSAgICBidWZfZGVsc2lnbihidWYtPmJ1ZnAsIGlkKTsKKwkJCX0KKwkJCWVsc2UKKwkJCSAgICBuYmRlYnVnKCgiICAgIE5vIHNpZ24gb24gbGluZSAlZFxuIiwgaSkpOworCQkgICAgfQorCisJCSAgICAvKiBkZWxldGUgd2hvbGUgbGluZXMgKi8KKwkJICAgIG5iZGVidWcoKCIgICAgRGVsZXRpbmcgbGluZXMgJWQgdGhyb3VnaCAlZFxuIiwgZmlyc3QubG51bSwgbGFzdC5sbnVtKSk7CisJCSAgICBkZWxfbGluZXMobGFzdC5sbnVtIC0gZmlyc3QubG51bSArIDEsIEZBTFNFKTsKKwkJfQorCQlidWYtPmJ1ZnAtPmJfY2hhbmdlZCA9IHdhc0NoYW5nZWQ7IC8qIGxvZ2ljYWxseSB1bmNoYW5nZWQgKi8KKwkJbmV0YmVhbnNGaXJlQ2hhbmdlcyA9IG9sZEZpcmU7CisJCW5ldGJlYW5zU3VwcHJlc3NOb0xpbmVzID0gb2xkU3VwcHJlc3M7CisKKwkJdV9ibG9ja2ZyZWUoYnVmLT5idWZwKTsKKwkJdV9jbGVhcmFsbChidWYtPmJ1ZnApOworCSAgICB9CisJICAgIG5iX3JlcGx5X25pbChjbWRubyk7CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCX0KKwllbHNlIGlmIChzdHJlcSgoY2hhciAqKWNtZCwgImluc2VydCIpKQorCXsKKwkgICAgcG9zX1QJKnBvczsKKwkgICAgcG9zX1QJbXlwb3M7CisJICAgIGNoYXJfdQkqdG9fZnJlZTsKKwkgICAgY2hhcl91CSpubDsKKwkgICAgaW50CQlsbnVtOworCSAgICBwb3NfVAlvbGRfd19jdXJzb3I7CisJICAgIGludAkJb2xkX2JfY2hhbmdlZDsKKworCSAgICBpZiAoc2tpcCA+PSBTS0lQX1NUT1ApCisJICAgIHsKKwkJbmJkZWJ1ZygoIiAgICBTa2lwcGluZyAlcyBjb21tYW5kXG4iLCAoY2hhciAqKSBjbWQpKTsKKwkJbmJfcmVwbHlfbmlsKGNtZG5vKTsKKwkJcmV0dXJuIE9LOworCSAgICB9CisKKwkgICAgLyogZ2V0IG9mZnNldCAqLworCSAgICBvZmYgPSBzdHJ0b2woKGNoYXIgKilhcmdzLCAoY2hhciAqKikmYXJncywgMTApOworCisJICAgIC8qIGdldCB0ZXh0IHRvIGJlIGluc2VydGVkICovCisJICAgIGFyZ3MgPSBza2lwd2hpdGUoYXJncyk7CisJICAgIGFyZ3MgPSB0b19mcmVlID0gKGNoYXJfdSAqKW5iX3VucXVvdGUoYXJncywgTlVMTCk7CisKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zi0+YnVmcCA9PSBOVUxMKQorCSAgICB7CisJCW5iZGVidWcoKCIgICAgbnVsbCBidWZwIGluIGluc2VydCIpKTsKKwkJRU1TRygiRTYzNTogbnVsbCBidWZwIGluIGluc2VydCIpOworCQlyZXR2YWwgPSBGQUlMOworCSAgICB9CisJICAgIGVsc2UgaWYgKGFyZ3MgIT0gTlVMTCkKKwkgICAgeworCQkvKiBXZSBuZWVkIHRvIGRldGVjdCBFT0wgc3R5bGUKKwkJICogYmVjYXVzZSBhZGRBbm5vIHBhc3NlcyBjaGFyLW9mZnNldAorCQkgKi8KKwkJaW50ICAgIGZmX2RldGVjdGVkID0gRU9MX1VOS05PV047CisJCWludCAgICBidWZfd2FzX2VtcHR5ID0gKGJ1Zi0+YnVmcC0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZKTsKKworCQlvbGRGaXJlID0gbmV0YmVhbnNGaXJlQ2hhbmdlczsKKwkJbmV0YmVhbnNGaXJlQ2hhbmdlcyA9IDA7CisKKwkJaWYgKGN1cmJ1ZiAhPSBidWYtPmJ1ZnApCisJCSAgICBzZXRfY3VyYnVmKGJ1Zi0+YnVmcCwgRE9CVUZfR09UTyk7CisJCW9sZF9iX2NoYW5nZWQgPSBidWYtPmJ1ZnAtPmJfY2hhbmdlZDsKKworCQlpZiAoYnVmLT5wYXJ0aWFsX2xpbmUgIT0gTlVMTCkKKwkJeworCQkgICAgbmJkZWJ1ZygoIiAgICBDb21iaW5pbmcgd2l0aCBwYXJ0aWFsIGxpbmVcbiIpKTsKKwkJICAgIG9mZiAtPSBTVFJMRU4oYnVmLT5wYXJ0aWFsX2xpbmUpOworCQkgICAgcG9zID0gb2ZmMnBvcyhidWYtPmJ1ZnAsIG9mZik7CisJCSAgICBpZiAocG9zICYmIHBvcy0+Y29sICE9IDApCisJCQlvZmYgLT0gcG9zLT5jb2w7ICAvKiB3YW50IHN0YXJ0IG9mIGxpbmUgKi8KKwkJICAgIGJ1Zi0+cGFydGlhbF9saW5lID0gdmltX3JlYWxsb2MoYnVmLT5wYXJ0aWFsX2xpbmUsCisJCQkJU1RSTEVOKGJ1Zi0+cGFydGlhbF9saW5lKSArIFNUUkxFTihhcmdzKSArIDEpOworCQkgICAgU1RSQ0FUKGJ1Zi0+cGFydGlhbF9saW5lLCBhcmdzKTsKKwkJICAgIHZpbV9mcmVlKHRvX2ZyZWUpOworCQkgICAgYXJncyA9IGJ1Zi0+cGFydGlhbF9saW5lOworCQkgICAgYnVmLT5wYXJ0aWFsX2xpbmUgPSBOVUxMOworCQkgICAgdG9fZnJlZSA9IGFyZ3M7CisJCX0KKwkJcG9zID0gb2ZmMnBvcyhidWYtPmJ1ZnAsIG9mZik7CisJCWlmIChwb3MpCisJCXsKKwkJICAgIGlmIChwb3MtPmxudW0gPT0gMCkKKwkJCXBvcy0+bG51bSA9IDE7CisJCSAgICBuYmRlYnVnKCgiICAgIFBPU0lUSU9OOiBsaW5lID0gJWQsIGNvbCA9ICVkXG4iLAorCQkJCQkJCXBvcy0+bG51bSwgcG9zLT5jb2wpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIC8qIGlmIHRoZSBnaXZlbiBwb3NpdGlvbiBpcyBub3QgZm91bmQsIGFzc3VtZSB3ZSB3YW50CisJCSAgICAgKiB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgU2VlIHNldExvY0FuZFNpemUgSEFDSy4gKi8KKwkJICAgIHBvcyA9ICZteXBvczsKKwkJICAgIHBvcy0+Y29sID0gMDsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCSAgICBwb3MtPmNvbGFkZCA9IDA7CisjZW5kaWYKKwkJICAgIHBvcy0+bG51bSA9IGJ1Zi0+YnVmcC0+Yl9tbC5tbF9saW5lX2NvdW50OworCQkgICAgbmJkZWJ1ZygoIiAgICBQT1NJVElPTjogbGluZSA9ICVkIChFT0YpXG4iLCBwb3MtPmxudW0pKTsKKwkJfQorCQlsbnVtID0gcG9zLT5sbnVtOworCQlvbGRfd19jdXJzb3IgPSBjdXJ3aW4tPndfY3Vyc29yOworCQljdXJ3aW4tPndfY3Vyc29yID0gKnBvczsKKworCQlkb3VwZGF0ZSA9IDE7CisJCXdoaWxlICgqYXJncykKKwkJeworCQkgICAgbmwgPSAoY2hhcl91ICopc3RyY2hyKChjaGFyICopYXJncywgJ1xuJyk7CisJCSAgICBpZiAoIW5sKQorCQkgICAgeworCQkJbmJkZWJ1ZygoIiAgICBQQVJUSUFMWyVkXTogJXNcbiIsIGxudW0sIGFyZ3MpKTsKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAgLyogRU9MIGRldGVjdGluZy4KKwkJICAgICAqIE5vdCBzdXJlIGhvdyB0byBkZWFsIHdpdGggJ1xuJyBvbiBNYWMKKwkJICAgICAqIGl0IHdpbGwgZmFpbCBhbHJlYWR5IGluIG5sID0gLi4uIGFib3ZlCisJCSAgICAgKi8KKwkJICAgIGlmIChidWZfd2FzX2VtcHR5ICYmIC8qIFRoZXJlIGlzIG5lZWQgdG8gZGV0ZWN0IEVPTHMgKi8KKwkJCSAgICAvKiBBTkQ6IHN0cmluZyBpcyBlbXB0eSAqLworCQkJICAgIChhcmdzID09IG5sCisJCQkgICAgIC8qIE9SIGhhc24ndCAnXHInIGF0IHRoZSBlbmQgKi8KKwkJCSAgICB8fCAqKG5sIC0gMSkgIT0gJ1xyJykpCisJCQlmZl9kZXRlY3RlZCA9IEVPTF9VTklYOworCisJCSAgICAqbmwgPSAnXDAnOworCQkgICAgbmJkZWJ1ZygoIiAgICBJTlNFUlRbJWRdOiAlc1xuIiwgbG51bSwgYXJncykpOworCQkgICAgbWxfYXBwZW5kKChsaW5lbnJfVCkobG51bSsrIC0gMSksIGFyZ3MsCisJCQkJCQkgICAgIFNUUkxFTihhcmdzKSArIDEsIEZBTFNFKTsKKwkJICAgIGFyZ3MgPSBubCArIDE7CisJCX0KKworCQlhcHBlbmRlZF9saW5lc19tYXJrKHBvcy0+bG51bSAtIDEsIGxudW0gLSBwb3MtPmxudW0pOworCisJCS8qIFdlIGNhbiBjaGFuZ2UgaW5pdGlhbCBmZiB3aXRob3V0IGNvbnNlcXVlbmNlcworCQkgKiBJc24ndCBpdCBhIGtpbmQgb2YgaGFja2luZz8KKwkJICovCisJCWlmIChidWZfd2FzX2VtcHR5KQorCQl7CisJCSAgICBpZiAoZmZfZGV0ZWN0ZWQgPT0gRU9MX1VOS05PV04pCisJCQlmZl9kZXRlY3RlZCA9IEVPTF9ET1M7CisJCSAgICBzZXRfZmlsZWZvcm1hdChmZl9kZXRlY3RlZCwgT1BUX0xPQ0FMKTsKKwkJICAgIGJ1Zi0+YnVmcC0+Yl9zdGFydF9mZmMgPSAqYnVmLT5idWZwLT5iX3BfZmY7CisJCX0KKworCQlpZiAoKmFyZ3MpCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBJbmNvbXBsZXRlIGxpbmUsIHNxdWlycmVsIGF3YXkgYW5kIHdhaXQgZm9yIG5leHQgaW5zZXJ0LgorCQkgICAgICovCisJCSAgICBuYmRlYnVnKCgiICAgIFBBUlRJQUwtU0FWRUQ6ICVzXG4iLCBhcmdzKSk7CisJCSAgICBidWYtPnBhcnRpYWxfbGluZSA9IHZpbV9yZWFsbG9jKGJ1Zi0+cGFydGlhbF9saW5lLAorCQkJCQkJCSAgICBTVFJMRU4oYXJncykgKyAxKTsKKwkJICAgIFNUUkNQWShidWYtPnBhcnRpYWxfbGluZSwgYXJncyk7CisJCX0KKwkJY3Vyd2luLT53X2N1cnNvciA9IG9sZF93X2N1cnNvcjsKKworCQkvKgorCQkgKiBYWFggLSBHUlAgLSBJcyB0aGUgbmV4dCBsaW5lIHJpZ2h0PyBJZiBJJ3ZlIGluc2VydGVkCisJCSAqIHRleHQgdGhlIGJ1ZmZlciBoYXMgYmVlbiB1cGRhdGVkIGJ1dCBub3Qgd3JpdHRlbi4gV2lsbAorCQkgKiBuZXRiZWFucyBndWFyYW50ZWUgdG8gd3JpdGUgaXQ/IEV2ZW4gaWYgSSBkbyBhIDpxISA/CisJCSAqLworCQlidWYtPmJ1ZnAtPmJfY2hhbmdlZCA9IG9sZF9iX2NoYW5nZWQ7IC8qIGxvZ2ljYWxseSB1bmNoYW5nZWQgKi8KKwkJbmV0YmVhbnNGaXJlQ2hhbmdlcyA9IG9sZEZpcmU7CisKKwkJdV9ibG9ja2ZyZWUoYnVmLT5idWZwKTsKKwkJdV9jbGVhcmFsbChidWYtPmJ1ZnApOworCSAgICB9CisJICAgIHZpbV9mcmVlKHRvX2ZyZWUpOworCSAgICBuYl9yZXBseV9uaWwoY21kbm8pOyAvKiBvciAhZXJyb3IgKi8KKwl9CisJZWxzZQorCXsKKwkgICAgbmJkZWJ1ZygoIlVOSU1QTEVNRU5URUQgRlVOQ1RJT046ICVzXG4iLCBjbWQpKTsKKwkgICAgbmJfcmVwbHlfbmlsKGNtZG5vKTsKKwkgICAgcmV0dmFsID0gRkFJTDsKKwl9CisgICAgfQorICAgIGVsc2UgLyogTm90IGEgZnVuY3Rpb247IG5vIHJlcGx5IHJlcXVpcmVkLiAqLworICAgIHsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJaWYgKHN0cmVxKChjaGFyICopY21kLCAiY3JlYXRlIikpCisJeworCSAgICAvKiBDcmVhdGUgYSBidWZmZXIgd2l0aG91dCBhIG5hbWUuICovCisJICAgIGlmIChidWYgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKCJFNjM2OiBudWxsIGJ1ZiBpbiBjcmVhdGUiKTsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKwkgICAgdmltX2ZyZWUoYnVmLT5kaXNwbGF5bmFtZSk7CisJICAgIGJ1Zi0+ZGlzcGxheW5hbWUgPSBOVUxMOworCSAgICBuYmRlYnVnKCgiICAgIENSRUFURSAlZFxuIiwgYnVmbm8pKTsKKworCSAgICBuZXRiZWFuc1JlYWRGaWxlID0gMDsgLyogZG9uJ3QgdHJ5IHRvIG9wZW4gZGlzayBmaWxlICovCisJICAgIGRvX2VjbWQoMCwgTlVMTCwgMCwgMCwgRUNNRF9PTkUsIEVDTURfSElERSArIEVDTURfT0xEQlVGKTsKKwkgICAgbmV0YmVhbnNSZWFkRmlsZSA9IDE7CisJICAgIGJ1Zi0+YnVmcCA9IGN1cmJ1ZjsKKwkgICAgbWFrZXRpdGxlKCk7CisJICAgIGd1aV91cGRhdGVfbWVudXMoMCk7CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCX0KKwllbHNlIGlmIChzdHJlcSgoY2hhciAqKWNtZCwgInN0YXJ0RG9jdW1lbnRMaXN0ZW4iKSkKKwl7CisJICAgIGlmIChidWYgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKCJFNjM3OiBudWxsIGJ1ZiBpbiBzdGFydERvY3VtZW50TGlzdGVuIik7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJICAgIGJ1Zi0+ZmlyZUNoYW5nZXMgPSAxOworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwl9CisJZWxzZSBpZiAoc3RyZXEoKGNoYXIgKiljbWQsICJzdG9wRG9jdW1lbnRMaXN0ZW4iKSkKKwl7CisJICAgIGlmIChidWYgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKCJFNjM4OiBudWxsIGJ1ZiBpbiBzdG9wRG9jdW1lbnRMaXN0ZW4iKTsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKwkgICAgYnVmLT5maXJlQ2hhbmdlcyA9IDA7CisJICAgIGlmIChidWYtPmJ1ZnAgIT0gTlVMTAorCQkgICAgJiYgYnVmLT5idWZwLT5iX3dhc19uZXRiZWFuc19maWxlCisJCSAgICAmJiAhYnVmLT5idWZwLT5iX25ldGJlYW5zX2ZpbGUpCisJCUVNU0dOKF8oIkU2NTg6IE5ldEJlYW5zIGNvbm5lY3Rpb24gbG9zdCBmb3IgYnVmZmVyICVsZCIpLAorCQkJCQkJCSAgIGJ1Zi0+YnVmcC0+Yl9mbnVtKTsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAic2V0VGl0bGUiKSkKKwl7CisJICAgIGlmIChidWYgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKCJFNjM5OiBudWxsIGJ1ZiBpbiBzZXRUaXRsZSIpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICB2aW1fZnJlZShidWYtPmRpc3BsYXluYW1lKTsKKwkgICAgYnVmLT5kaXNwbGF5bmFtZSA9IG5iX3VucXVvdGUoYXJncywgTlVMTCk7CisJICAgIG5iZGVidWcoKCIgICAgU0VUVElUTEUgJWQgJXNcbiIsIGJ1Zm5vLCBidWYtPmRpc3BsYXluYW1lKSk7CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCX0KKwllbHNlIGlmIChzdHJlcSgoY2hhciAqKWNtZCwgImluaXREb25lIikpCisJeworCSAgICBpZiAoYnVmID09IE5VTEwgfHwgYnVmLT5idWZwID09IE5VTEwpCisJICAgIHsKKwkJRU1TRygiRTY0MDogbnVsbCBidWYgaW4gaW5pdERvbmUiKTsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKwkgICAgZG91cGRhdGUgPSAxOworCSAgICBidWYtPmluaXREb25lID0gMTsKKwkgICAgaWYgKGN1cmJ1ZiAhPSBidWYtPmJ1ZnApCisJCXNldF9jdXJidWYoYnVmLT5idWZwLCBET0JVRl9HT1RPKTsKKyNpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkKKwkgICAgYXBwbHlfYXV0b2NtZHMoRVZFTlRfQlVGUkVBRFBPU1QsIDAsIDAsIEZBTFNFLCBidWYtPmJ1ZnApOworI2VuZGlmCisKKwkgICAgLyogaGFuZGxlIGFueSBwb3N0cG9uZWQga2V5IGNvbW1hbmRzICovCisJICAgIGhhbmRsZV9rZXlfcXVldWUoKTsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAic2V0QnVmZmVyTnVtYmVyIikKKwkJfHwgc3RyZXEoKGNoYXIgKiljbWQsICJwdXRCdWZmZXJOdW1iZXIiKSkKKwl7CisJICAgIGNoYXJfdQkqdG9fZnJlZTsKKwkgICAgYnVmX1QJKmJ1ZnA7CisKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCSAgICB7CisJCUVNU0coIkU2NDE6IG51bGwgYnVmIGluIHNldEJ1ZmZlck51bWJlciIpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICB0b19mcmVlID0gKGNoYXJfdSAqKW5iX3VucXVvdGUoYXJncywgTlVMTCk7CisJICAgIGlmICh0b19mcmVlID09IE5VTEwpCisJCXJldHVybiBGQUlMOworCSAgICBidWZwID0gYnVmbGlzdF9maW5kbmFtZSh0b19mcmVlKTsKKwkgICAgdmltX2ZyZWUodG9fZnJlZSk7CisJICAgIGlmIChidWZwID09IE5VTEwpCisJICAgIHsKKwkJRU1TRzIoIkU2NDI6IEZpbGUgJXMgbm90IGZvdW5kIGluIHNldEJ1ZmZlck51bWJlciIsIGFyZ3MpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICBidWYtPmJ1ZnAgPSBidWZwOworCisJICAgIC8qICJzZXRCdWZmZXJOdW1iZXIiIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YganVtcGluZyB0byB0aGUgYnVmZmVyCisJICAgICAqIChkb24ndCBrbm93IHdoeSEpLiAgRG9uJ3QgZG8gdGhhdCBmb3IgInB1dEJ1ZmZlck51bWJlciIuICovCisJICAgIGlmICgqY21kICE9ICdwJykKKwkJY29sb25jbWQoIjpidWZmZXIgJWQiLCBidWZwLT5iX2ZudW0pOworCSAgICBlbHNlCisJICAgIHsKKwkJYnVmLT5pbml0RG9uZSA9IDE7CisKKwkJLyogaGFuZGxlIGFueSBwb3N0cG9uZWQga2V5IGNvbW1hbmRzICovCisJCWhhbmRsZV9rZXlfcXVldWUoKTsKKwkgICAgfQorCisjaWYgMCAgLyogbmV2ZXIgdXNlZCAqLworCSAgICBidWYtPmludGVybmFsbmFtZSA9IChjaGFyICopYWxsb2NfY2xlYXIoOCk7CisJICAgIHNwcmludGYoYnVmLT5pbnRlcm5hbG5hbWUsICI8JWQ+IiwgYnVmbm8pOworCSAgICBidWYtPm5ldGJlYW5zT3ducyA9IDA7CisjZW5kaWYKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAic2V0RnVsbE5hbWUiKSkKKwl7CisJICAgIGlmIChidWYgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKCJFNjQzOiBudWxsIGJ1ZiBpbiBzZXRGdWxsTmFtZSIpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICB2aW1fZnJlZShidWYtPmRpc3BsYXluYW1lKTsKKwkgICAgYnVmLT5kaXNwbGF5bmFtZSA9IG5iX3VucXVvdGUoYXJncywgTlVMTCk7CisJICAgIG5iZGVidWcoKCIgICAgU0VURlVMTE5BTUUgJWQgJXNcbiIsIGJ1Zm5vLCBidWYtPmRpc3BsYXluYW1lKSk7CisKKwkgICAgbmV0YmVhbnNSZWFkRmlsZSA9IDA7IC8qIGRvbid0IHRyeSB0byBvcGVuIGRpc2sgZmlsZSAqLworCSAgICBkb19lY21kKDAsIChjaGFyX3UgKilidWYtPmRpc3BsYXluYW1lLCAwLCAwLCBFQ01EX09ORSwKKwkJCQkJCSAgICAgRUNNRF9ISURFICsgRUNNRF9PTERCVUYpOworCSAgICBuZXRiZWFuc1JlYWRGaWxlID0gMTsKKwkgICAgYnVmLT5idWZwID0gY3VyYnVmOworCSAgICBtYWtldGl0bGUoKTsKKwkgICAgZ3VpX3VwZGF0ZV9tZW51cygwKTsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAiZWRpdEZpbGUiKSkKKwl7CisJICAgIGlmIChidWYgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKCJFNjQ0OiBudWxsIGJ1ZiBpbiBlZGl0RmlsZSIpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICAvKiBFZGl0IGEgZmlsZTogbGlrZSBjcmVhdGUgKyBzZXRGdWxsTmFtZSArIHJlYWQgdGhlIGZpbGUuICovCisJICAgIHZpbV9mcmVlKGJ1Zi0+ZGlzcGxheW5hbWUpOworCSAgICBidWYtPmRpc3BsYXluYW1lID0gbmJfdW5xdW90ZShhcmdzLCBOVUxMKTsKKwkgICAgbmJkZWJ1ZygoIiAgICBFRElURklMRSAlZCAlc1xuIiwgYnVmbm8sIGJ1Zi0+ZGlzcGxheW5hbWUpKTsKKwkgICAgZG9fZWNtZCgwLCAoY2hhcl91ICopYnVmLT5kaXNwbGF5bmFtZSwgTlVMTCwgTlVMTCwgRUNNRF9PTkUsCisJCQkJCQkgICAgIEVDTURfSElERSArIEVDTURfT0xEQlVGKTsKKwkgICAgYnVmLT5idWZwID0gY3VyYnVmOworCSAgICBidWYtPmluaXREb25lID0gMTsKKwkgICAgZG91cGRhdGUgPSAxOworI2lmIGRlZmluZWQoRkVBVF9USVRMRSkKKwkgICAgbWFrZXRpdGxlKCk7CisjZW5kaWYKKwkgICAgZ3VpX3VwZGF0ZV9tZW51cygwKTsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAic2V0VmlzaWJsZSIpKQorCXsKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zi0+YnVmcCA9PSBOVUxMKQorCSAgICB7CisvKgkJRU1TRygiRTY0NTogbnVsbCBidWZwIGluIHNldFZpc2libGUiKTsgKi8KKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKwkgICAgaWYgKHN0cmVxKChjaGFyICopYXJncywgIlQiKSkKKwkgICAgeworCQlleGFyZ19UIGV4YXJnOworCQlleGFyZy5jbWQgPSAoY2hhcl91ICopImdvdG8iOworCQlleGFyZy5mb3JjZWl0ID0gRkFMU0U7CisJCWdvdG9fYnVmZmVyKCZleGFyZywgRE9CVUZfRklSU1QsIEZPUldBUkQsIGJ1Zi0+YnVmcC0+Yl9mbnVtKTsKKwkJZG91cGRhdGUgPSAxOworCisJCS8qIFNpZGUgZWZmZWN0ISEhLiAqLworCQlpZiAoIWd1aS5zdGFydGluZykKKwkJICAgIGd1aV9tY2hfc2V0X2ZvcmVncm91bmQoKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogYnVyeSB0aGUgYnVmZmVyIC0gbm90IHlldCAqLworCSAgICB9CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCX0KKwllbHNlIGlmIChzdHJlcSgoY2hhciAqKWNtZCwgInJhaXNlIikpCisJeworCSAgICAvKiBCcmluZyBndmltIHRvIHRoZSBmb3JlZ3JvdW5kLiAqLworCSAgICBpZiAoIWd1aS5zdGFydGluZykKKwkJZ3VpX21jaF9zZXRfZm9yZWdyb3VuZCgpOworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwl9CisJZWxzZSBpZiAoc3RyZXEoKGNoYXIgKiljbWQsICJzZXRNb2RpZmllZCIpKQorCXsKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zi0+YnVmcCA9PSBOVUxMKQorCSAgICB7CisvKgkJRU1TRygiRTY0NjogbnVsbCBidWZwIGluIHNldE1vZGlmaWVkIik7ICovCisJCXJldHVybiBGQUlMOworCSAgICB9CisJICAgIGlmIChzdHJlcSgoY2hhciAqKWFyZ3MsICJUIikpCisJCWJ1Zi0+YnVmcC0+Yl9jaGFuZ2VkID0gMTsKKwkgICAgZWxzZQorCSAgICB7CisJCXN0cnVjdCBzdGF0CXN0OworCisJCS8qIEFzc3VtZSBOZXRCZWFucyBzdG9yZWQgdGhlIGZpbGUuICBSZXNldCB0aGUgdGltZXN0YW1wIHRvCisJCSAqIGF2b2lkICJmaWxlIGNoYW5nZWQiIHdhcm5pbmdzLiAqLworCQlpZiAoYnVmLT5idWZwLT5iX2ZmbmFtZSAhPSBOVUxMCisJCQkmJiBtY2hfc3RhdCgoY2hhciAqKWJ1Zi0+YnVmcC0+Yl9mZm5hbWUsICZzdCkgPj0gMCkKKwkJICAgIGJ1Zl9zdG9yZV90aW1lKGJ1Zi0+YnVmcCwgJnN0LCBidWYtPmJ1ZnAtPmJfZmZuYW1lKTsKKwkJYnVmLT5idWZwLT5iX2NoYW5nZWQgPSAwOworCSAgICB9CisJICAgIGJ1Zi0+bW9kaWZpZWQgPSBidWYtPmJ1ZnAtPmJfY2hhbmdlZDsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAic2V0TWFyayIpKQorCXsKKwkgICAgLyogbm90IHlldCAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwl9CisJZWxzZSBpZiAoc3RyZXEoKGNoYXIgKiljbWQsICJzaG93QmFsbG9vbiIpKQorCXsKKyNpZiBkZWZpbmVkKEZFQVRfQkVWQUwpCisJICAgIHN0YXRpYyBjaGFyCSp0ZXh0ID0gTlVMTDsKKworCSAgICAvKgorCSAgICAgKiBTZXQgdXAgdGhlIEJhbGxvb24gRXhwcmVzc2lvbiBFdmFsdWF0aW9uIGFyZWEuCisJICAgICAqIElnbm9yZSAnYmFsbG9vbmV2YWwnIGhlcmUuCisJICAgICAqIFRoZSB0ZXh0IHBvaW50ZXIgbXVzdCByZW1haW4gdmFsaWQgZm9yIGEgd2hpbGUuCisJICAgICAqLworCSAgICBpZiAoYmFsbG9vbkV2YWwgIT0gTlVMTCkKKwkgICAgeworCQl2aW1fZnJlZSh0ZXh0KTsKKwkJdGV4dCA9IG5iX3VucXVvdGUoYXJncywgTlVMTCk7CisJCWlmICh0ZXh0ICE9IE5VTEwpCisJCSAgICBndWlfbWNoX3Bvc3RfYmFsbG9vbihiYWxsb29uRXZhbCwgKGNoYXJfdSAqKXRleHQpOworCSAgICB9CisjZW5kaWYKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAic2V0RG90IikpCisJeworCSAgICBwb3NfVCAqcG9zOworI2lmZGVmIE5CREVCVUcKKwkgICAgY2hhcl91ICpzOworI2VuZGlmCisKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zi0+YnVmcCA9PSBOVUxMKQorCSAgICB7CisJCUVNU0coIkU2NDc6IG51bGwgYnVmcCBpbiBzZXREb3QiKTsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKworCSAgICBpZiAoY3VyYnVmICE9IGJ1Zi0+YnVmcCkKKwkJc2V0X2N1cmJ1ZihidWYtPmJ1ZnAsIERPQlVGX0dPVE8pOworI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIC8qIERvbid0IHdhbnQgVmlzdWFsIG1vZGUgbm93LiAqLworCSAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKwkJZW5kX3Zpc3VhbF9tb2RlKCk7CisjZW5kaWYKKyNpZmRlZiBOQkRFQlVHCisJICAgIHMgPSBhcmdzOworI2VuZGlmCisJICAgIHBvcyA9IGdldF9vZmZfb3JfbG51bShidWYtPmJ1ZnAsICZhcmdzKTsKKwkgICAgaWYgKHBvcykKKwkgICAgeworCQljdXJ3aW4tPndfY3Vyc29yID0gKnBvczsKKwkJY2hlY2tfY3Vyc29yKCk7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKKwkgICAgfQorCSAgICBlbHNlCisJCW5iZGVidWcoKCIgICAgQkFEIFBPU0lUSU9OIGluIHNldERvdDogJXNcbiIsIHMpKTsKKworCSAgICAvKiBndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7ICovCisJICAgIC8qIHVwZGF0ZV9jdXJidWYoTk9UX1ZBTElEKTsgKi8KKwkgICAgdXBkYXRlX3RvcGxpbmUoKTsJCS8qIHNjcm9sbCB0byBzaG93IHRoZSBsaW5lICovCisJICAgIHVwZGF0ZV9zY3JlZW4oVkFMSUQpOworCSAgICBzZXRjdXJzb3IoKTsKKwkgICAgb3V0X2ZsdXNoKCk7CisJICAgIGd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKwkgICAgZ3VpX21jaF9mbHVzaCgpOworCSAgICAvKiBRdWl0IGEgaGl0LXJldHVybiBvciBtb3JlIHByb21wdC4gKi8KKwkgICAgaWYgKFN0YXRlID09IEhJVFJFVFVSTiB8fCBTdGF0ZSA9PSBBU0tNT1JFKQorCSAgICB7CisJCWFkZF90b19pbnB1dF9idWYoKGNoYXJfdSAqKSJcMDAzIiwgMSk7CisjaWZkZWYgRkVBVF9HVUlfR1RLCisJCWlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwkJICAgIGd0a19tYWluX3F1aXQoKTsKKyNlbmRpZgorCSAgICB9CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCX0KKwllbHNlIGlmIChzdHJlcSgoY2hhciAqKWNtZCwgImNsb3NlIikpCisJeworI2lmZGVmIE5CREVCVUcKKwkgICAgY2hhciAqbmFtZSA9ICI8Tk9ORT4iOworI2VuZGlmCisKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCSAgICB7CisJCUVNU0coIkU2NDg6IG51bGwgYnVmIGluIGNsb3NlIik7CisJCXJldHVybiBGQUlMOworCSAgICB9CisKKyNpZmRlZiBOQkRFQlVHCisJICAgIGlmIChidWYtPmRpc3BsYXluYW1lICE9IE5VTEwpCisJCW5hbWUgPSBidWYtPmRpc3BsYXluYW1lOworI2VuZGlmCisvKgkgICAgaWYgKGJ1Zi0+YnVmcCA9PSBOVUxMKSAqLworLyoJCUVNU0coIkU2NDk6IG51bGwgYnVmcCBpbiBjbG9zZSIpOyAqLworCSAgICBuYmRlYnVnKCgiICAgIENMT1NFICVkOiAlc1xuIiwgYnVmbm8sIG5hbWUpKTsKKwkgICAgbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKwkgICAgaWYgKGJ1Zi0+YnVmcCAhPSBOVUxMKQorCQlkb19idWZmZXIoRE9CVUZfV0lQRSwgRE9CVUZfRklSU1QsIEZPUldBUkQsCisJCQkJCQkgICAgIGJ1Zi0+YnVmcC0+Yl9mbnVtLCBUUlVFKTsKKwkgICAgZG91cGRhdGUgPSAxOworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwl9CisJZWxzZSBpZiAoc3RyZXEoKGNoYXIgKiljbWQsICJzZXRTdHlsZSIpKSAvKiBvYnNvbGV0ZS4uLiAqLworCXsKKwkgICAgbmJkZWJ1ZygoIiAgICBzZXRTdHlsZSBpcyBvYnNvbGV0ZSEiKSk7CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCX0KKwllbHNlIGlmIChzdHJlcSgoY2hhciAqKWNtZCwgInNldEV4aXREZWxheSIpKQorCXsKKwkgICAgLyogTmV3IGluIHZlcnNpb24gMi4xLiAqLworCSAgICBleGl0X2RlbGF5ID0gc3RydG9sKChjaGFyICopYXJncywgKGNoYXIgKiopJmFyZ3MsIDEwKTsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAiZGVmaW5lQW5ub1R5cGUiKSkKKwl7CisjaWZkZWYgRkVBVF9TSUdOUworCSAgICBpbnQgdHlwZU51bTsKKwkgICAgY2hhcl91ICp0eXBlTmFtZTsKKwkgICAgY2hhcl91ICp0b29sdGlwOworCSAgICBjaGFyX3UgKnA7CisJICAgIGNoYXJfdSAqZ2x5cGhGaWxlOworCSAgICBpbnQgdXNlX2ZnID0gMDsKKwkgICAgaW50IHVzZV9iZyA9IDA7CisJICAgIGludCBmZyA9IC0xOworCSAgICBpbnQgYmcgPSAtMTsKKworCSAgICBpZiAoYnVmID09IE5VTEwpCisJICAgIHsKKwkJRU1TRygiRTY1MDogbnVsbCBidWYgaW4gZGVmaW5lQW5ub1R5cGUiKTsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKworCSAgICB0eXBlTnVtID0gc3RydG9sKChjaGFyICopYXJncywgKGNoYXIgKiopJmFyZ3MsIDEwKTsKKwkgICAgYXJncyA9IHNraXB3aGl0ZShhcmdzKTsKKwkgICAgdHlwZU5hbWUgPSAoY2hhcl91ICopbmJfdW5xdW90ZShhcmdzLCAmYXJncyk7CisJICAgIGFyZ3MgPSBza2lwd2hpdGUoYXJncyArIDEpOworCSAgICB0b29sdGlwID0gKGNoYXJfdSAqKW5iX3VucXVvdGUoYXJncywgJmFyZ3MpOworCSAgICBhcmdzID0gc2tpcHdoaXRlKGFyZ3MgKyAxKTsKKworCSAgICBwID0gKGNoYXJfdSAqKW5iX3VucXVvdGUoYXJncywgJmFyZ3MpOworCSAgICBnbHlwaEZpbGUgPSB2aW1fc3Ryc2F2ZV9lc2NhcGVkKHAsIGVzY2FwZV9jaGFycyk7CisJICAgIHZpbV9mcmVlKHApOworCisJICAgIGFyZ3MgPSBza2lwd2hpdGUoYXJncyArIDEpOworCSAgICBpZiAoU1RSTkNNUChhcmdzLCAibm9uZSIsIDQpID09IDApCisJCWFyZ3MgKz0gNTsKKwkgICAgZWxzZQorCSAgICB7CisJCXVzZV9mZyA9IDE7CisJCWZnID0gc3RydG9sKChjaGFyICopYXJncywgKGNoYXIgKiopJmFyZ3MsIDEwKTsKKwkgICAgfQorCSAgICBpZiAoU1RSTkNNUChhcmdzLCAibm9uZSIsIDQpID09IDApCisJCWFyZ3MgKz0gNTsKKwkgICAgZWxzZQorCSAgICB7CisJCXVzZV9iZyA9IDE7CisJCWJnID0gc3RydG9sKChjaGFyICopYXJncywgKGNoYXIgKiopJmFyZ3MsIDEwKTsKKwkgICAgfQorCSAgICBpZiAodHlwZU5hbWUgIT0gTlVMTCAmJiB0b29sdGlwICE9IE5VTEwgJiYgZ2x5cGhGaWxlICE9IE5VTEwpCisJCWFkZHNpZ250eXBlKGJ1ZiwgdHlwZU51bSwgdHlwZU5hbWUsIHRvb2x0aXAsIGdseXBoRmlsZSwKKwkJCQkJCSAgICAgIHVzZV9mZywgZmcsIHVzZV9iZywgYmcpOworCSAgICBlbHNlCisJCXZpbV9mcmVlKHR5cGVOYW1lKTsKKworCSAgICAvKiBkb24ndCBmcmVlIHR5cGVOYW1lOyBpdCdzIHVzZWQgZGlyZWN0bHkgaW4gYWRkc2lnbnR5cGUoKSAqLworCSAgICB2aW1fZnJlZSh0b29sdGlwKTsKKwkgICAgdmltX2ZyZWUoZ2x5cGhGaWxlKTsKKworI2VuZGlmCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCX0KKwllbHNlIGlmIChzdHJlcSgoY2hhciAqKWNtZCwgImFkZEFubm8iKSkKKwl7CisjaWZkZWYgRkVBVF9TSUdOUworCSAgICBpbnQgc2VyTnVtOworCSAgICBpbnQgbG9jYWxUeXBlTnVtOworCSAgICBpbnQgdHlwZU51bTsKKyMgaWZkZWYgTkJERUJVRworCSAgICBpbnQgbGVuOworIyBlbmRpZgorCSAgICBwb3NfVCAqcG9zOworCisJICAgIGlmIChidWYgPT0gTlVMTCB8fCBidWYtPmJ1ZnAgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKCJFNjUxOiBudWxsIGJ1ZnAgaW4gYWRkQW5ubyIpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCisJICAgIGRvdXBkYXRlID0gMTsKKworCSAgICBzZXJOdW0gPSBzdHJ0b2woKGNoYXIgKilhcmdzLCAoY2hhciAqKikmYXJncywgMTApOworCisJICAgIC8qIEdldCB0aGUgdHlwZW5yIHNwZWNpZmljIGZvciB0aGlzIGJ1ZmZlciBhbmQgY29udmVydCBpdCB0bworCSAgICAgKiB0aGUgZ2xvYmFsIHR5cGVudW1iZXIsIGFzIHVzZWQgZm9yIHRoZSBzaWduIG5hbWUuICovCisJICAgIGxvY2FsVHlwZU51bSA9IHN0cnRvbCgoY2hhciAqKWFyZ3MsIChjaGFyICoqKSZhcmdzLCAxMCk7CisJICAgIHR5cGVOdW0gPSBtYXBzaWdudHlwZShidWYsIGxvY2FsVHlwZU51bSk7CisKKwkgICAgcG9zID0gZ2V0X29mZl9vcl9sbnVtKGJ1Zi0+YnVmcCwgJmFyZ3MpOworCisjIGlmZGVmIE5CREVCVUcKKwkgICAgbGVuID0KKyMgZW5kaWYKKwkJc3RydG9sKChjaGFyICopYXJncywgKGNoYXIgKiopJmFyZ3MsIDEwKTsKKyMgaWZkZWYgTkJERUJVRworCSAgICBpZiAobGVuICE9IC0xKQorCSAgICB7CisJCW5iZGVidWcoKCIgICAgcGFydGlhbCBsaW5lIGFubm90YXRpb24gLS0gTm90IFlldCBJbXBsZW1lbnRlZCEiKSk7CisJICAgIH0KKyMgZW5kaWYKKwkgICAgaWYgKHNlck51bSA+PSBHVUFSREVET0ZGU0VUKQorCSAgICB7CisJCW5iZGVidWcoKCIgICAgdG9vIG1hbnkgYW5ub3RhdGlvbnMhIGlnbm9yaW5nLi4uIikpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICBpZiAocG9zKQorCSAgICB7CisJCWNvbG9uY21kKCI6c2lnbiBwbGFjZSAlZCBsaW5lPSVkIG5hbWU9JWQgYnVmZmVyPSVkIiwKKwkJCSAgIHNlck51bSwgcG9zLT5sbnVtLCB0eXBlTnVtLCBidWYtPmJ1ZnAtPmJfZm51bSk7CisJCWlmICh0eXBlTnVtID09IGN1clBDdHlwZSkKKwkJICAgIGNvbG9uY21kKCI6c2lnbiBqdW1wICVkIGJ1ZmZlcj0lZCIsIHNlck51bSwKKwkJCQkJCSAgICAgICBidWYtPmJ1ZnAtPmJfZm51bSk7CisJICAgIH0KKwkgICAgLyogWFhYIG9ubHkgcmVkcmF3IHdoYXQgY2hhbmdlZC4gKi8KKwkgICAgcmVkcmF3X2xhdGVyKENMRUFSKTsKKyNlbmRpZgorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwl9CisJZWxzZSBpZiAoc3RyZXEoKGNoYXIgKiljbWQsICJyZW1vdmVBbm5vIikpCisJeworI2lmZGVmIEZFQVRfU0lHTlMKKwkgICAgaW50IHNlck51bTsKKworCSAgICBpZiAoYnVmID09IE5VTEwgfHwgYnVmLT5idWZwID09IE5VTEwpCisJICAgIHsKKwkJbmJkZWJ1ZygoIiAgICBudWxsIGJ1ZnAgaW4gcmVtb3ZlQW5ubyIpKTsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKwkgICAgZG91cGRhdGUgPSAxOworCSAgICBzZXJOdW0gPSBzdHJ0b2woKGNoYXIgKilhcmdzLCAoY2hhciAqKikmYXJncywgMTApOworCSAgICBjb2xvbmNtZCgiOnNpZ24gdW5wbGFjZSAlZCBidWZmZXI9JWQiLAorCQkgICAgIHNlck51bSwgYnVmLT5idWZwLT5iX2ZudW0pOworCSAgICByZWRyYXdfYnVmX2xhdGVyKGJ1Zi0+YnVmcCwgTk9UX1ZBTElEKTsKKyNlbmRpZgorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwl9CisJZWxzZSBpZiAoc3RyZXEoKGNoYXIgKiljbWQsICJtb3ZlQW5ub1RvRnJvbnQiKSkKKwl7CisjaWZkZWYgRkVBVF9TSUdOUworCSAgICBuYmRlYnVnKCgiICAgIG1vdmVBbm5vVG9Gcm9udDogTm90IFlldCBJbXBsZW1lbnRlZCEiKSk7CisjZW5kaWYKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAiZ3VhcmQiKSB8fCBzdHJlcSgoY2hhciAqKWNtZCwgInVuZ3VhcmQiKSkKKwl7CisJICAgIGludCBsZW47CisJICAgIHBvc19UIGZpcnN0OworCSAgICBwb3NfVCBsYXN0OworCSAgICBwb3NfVCAqcG9zOworCSAgICBpbnQgdW4gPSAoY21kWzBdID09ICd1Jyk7CisJICAgIHN0YXRpYyBpbnQgZ3VhcmRJZCA9IEdVQVJERURPRkZTRVQ7CisKKwkgICAgaWYgKHNraXAgPj0gU0tJUF9TVE9QKQorCSAgICB7CisJCW5iZGVidWcoKCIgICAgU2tpcHBpbmcgJXMgY29tbWFuZFxuIiwgKGNoYXIgKikgY21kKSk7CisJCXJldHVybiBPSzsKKwkgICAgfQorCisJICAgIG5iX2luaXRfZ3JhcGhpY3MoKTsKKworCSAgICBpZiAoYnVmID09IE5VTEwgfHwgYnVmLT5idWZwID09IE5VTEwpCisJICAgIHsKKwkJbmJkZWJ1ZygoIiAgICBudWxsIGJ1ZnAgaW4gJXMgY29tbWFuZCIsIGNtZCkpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICBpZiAoY3VyYnVmICE9IGJ1Zi0+YnVmcCkKKwkJc2V0X2N1cmJ1ZihidWYtPmJ1ZnAsIERPQlVGX0dPVE8pOworCSAgICBvZmYgPSBzdHJ0b2woKGNoYXIgKilhcmdzLCAoY2hhciAqKikmYXJncywgMTApOworCSAgICBsZW4gPSBzdHJ0b2woKGNoYXIgKilhcmdzLCAwLCAxMCk7CisJICAgIHBvcyA9IG9mZjJwb3MoYnVmLT5idWZwLCBvZmYpOworCSAgICBkb3VwZGF0ZSA9IDE7CisJICAgIGlmICghcG9zKQorCQluYmRlYnVnKCgiICAgIG5vIHN1Y2ggc3RhcnQgcG9zIGluICVzLCAlbGRcbiIsIGNtZCwgb2ZmKSk7CisJICAgIGVsc2UKKwkgICAgeworCQlmaXJzdCA9ICpwb3M7CisJCXBvcyA9IG9mZjJwb3MoYnVmLT5idWZwLCBvZmYgKyBsZW4gLSAxKTsKKwkJaWYgKHBvcyAhPSBOVUxMICYmIHBvcy0+Y29sID09IDApIHsKKwkJCS8qCisJCQkgKiBJbiBKYXZhIFN3aW5nIHRoZSBvZmZzZXQgaXMgYSBwb3NpdGlvbiBiZXR3ZWVuIDIKKwkJCSAqIGNoYXJhY3RlcnMuIElmIGNvbCA9PSAwIHRoZW4gd2UgcmVhbGx5IHdhbnQgdGhlCisJCQkgKiBwcmV2aW91cyBsaW5lIGFzIHRoZSBlbmQuCisJCQkgKi8KKwkJCXBvcyA9IG9mZjJwb3MoYnVmLT5idWZwLCBvZmYgKyBsZW4gLSAyKTsKKwkJfQorCQlpZiAoIXBvcykKKwkJICAgIG5iZGVidWcoKCIgICAgbm8gc3VjaCBlbmQgcG9zIGluICVzLCAlbGRcbiIsCisJCQkgICAgY21kLCBvZmYgKyBsZW4gLSAxKSk7CisJCWVsc2UKKwkJeworCQkgICAgbG9uZyBsbnVtOworCQkgICAgbGFzdCA9ICpwb3M7CisJCSAgICAvKiBzZXQgaGlnaGxpZ2h0IGZvciByZWdpb24gKi8KKwkJICAgIG5iZGVidWcoKCIgICAgJXNHVUFSRCAlbGQsJWQgdG8gJWxkLCVkXG4iLCAodW4pID8gIlVOIiA6ICIiLAorCQkJICAgICBmaXJzdC5sbnVtLCBmaXJzdC5jb2wsCisJCQkgICAgIGxhc3QubG51bSwgbGFzdC5jb2wpKTsKKyNpZmRlZiBGRUFUX1NJR05TCisJCSAgICBmb3IgKGxudW0gPSBmaXJzdC5sbnVtOyBsbnVtIDw9IGxhc3QubG51bTsgbG51bSsrKQorCQkgICAgeworCQkJaWYgKHVuKQorCQkJeworCQkJICAgIC8qIG5ldmVyIHVzZWQgKi8KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCSAgICBpZiAoYnVmX2ZpbmRzaWdudHlwZV9pZChidWYtPmJ1ZnAsIGxudW0sCisJCQkJR1VBUkRFRCkgPT0gMCkKKwkJCSAgICB7CisJCQkJY29sb25jbWQoCisJCQkJICAgICI6c2lnbiBwbGFjZSAlZCBsaW5lPSVkIG5hbWU9JWQgYnVmZmVyPSVkIiwKKwkJCQkgICAgIGd1YXJkSWQrKywgbG51bSwgR1VBUkRFRCwKKwkJCQkgICAgIGJ1Zi0+YnVmcC0+Yl9mbnVtKTsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisjZW5kaWYKKwkJICAgIHJlZHJhd19idWZfbGF0ZXIoYnVmLT5idWZwLCBOT1RfVkFMSUQpOworCQl9CisJICAgIH0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAic3RhcnRBdG9taWMiKSkKKwl7CisJICAgIGluQXRvbWljID0gMTsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAiZW5kQXRvbWljIikpCisJeworCSAgICBpbkF0b21pYyA9IDA7CisJICAgIGlmIChuZWVkdXBkYXRlKQorCSAgICB7CisJCWRvdXBkYXRlID0gMTsKKwkJbmVlZHVwZGF0ZSA9IDA7CisJICAgIH0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJfQorCWVsc2UgaWYgKHN0cmVxKChjaGFyICopY21kLCAic2F2ZSIpKQorCXsKKwkgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zi0+YnVmcCA9PSBOVUxMKQorCSAgICB7CisJCW5iZGVidWcoKCIgICAgbnVsbCBidWZwIGluICVzIGNvbW1hbmQiLCBjbWQpKTsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKworCSAgICAvKiB0aGUgZm9sbG93aW5nIGlzIHRha2VuIGZyb20gZXhfY21kcy5jIChkb193cWFsbCBmdW5jdGlvbikgKi8KKwkgICAgaWYgKGJ1ZklzQ2hhbmdlZChidWYtPmJ1ZnApKQorCSAgICB7CisJCS8qIE9ubHkgd3JpdGUgaWYgdGhlIGJ1ZmZlciBjYW4gYmUgd3JpdHRlbi4gKi8KKwkJaWYgKHBfd3JpdGUKKwkJCSYmICFidWYtPmJ1ZnAtPmJfcF9ybworCQkJJiYgYnVmLT5idWZwLT5iX2ZmbmFtZSAhPSBOVUxMCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCQkJJiYgIWJ0X2RvbnR3cml0ZShidWYtPmJ1ZnApCisjZW5kaWYKKwkJCSkKKwkJeworCQkgICAgYnVmX3dyaXRlX2FsbChidWYtPmJ1ZnAsIEZBTFNFKTsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkJICAgIC8qIGFuIGF1dG9jb21tYW5kIG1heSBoYXZlIGRlbGV0ZWQgdGhlIGJ1ZmZlciAqLworCQkgICAgaWYgKCFidWZfdmFsaWQoYnVmLT5idWZwKSkKKwkJCWJ1Zi0+YnVmcCA9IE5VTEw7CisjZW5kaWYKKwkJfQorCSAgICB9CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCX0KKwllbHNlIGlmIChzdHJlcSgoY2hhciAqKWNtZCwgIm5ldGJlYW5zQnVmZmVyIikpCisJeworCSAgICBpZiAoYnVmID09IE5VTEwgfHwgYnVmLT5idWZwID09IE5VTEwpCisJICAgIHsKKwkJbmJkZWJ1ZygoIiAgICBudWxsIGJ1ZnAgaW4gJXMgY29tbWFuZCIsIGNtZCkpOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICBpZiAoKmFyZ3MgPT0gJ1QnKQorCSAgICB7CisJCWJ1Zi0+YnVmcC0+Yl9uZXRiZWFuc19maWxlID0gVFJVRTsKKwkJYnVmLT5idWZwLT5iX3dhc19uZXRiZWFuc19maWxlID0gVFJVRTsKKwkgICAgfQorCSAgICBlbHNlCisJCWJ1Zi0+YnVmcC0+Yl9uZXRiZWFuc19maWxlID0gRkFMU0U7CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCX0KKwllbHNlIGlmIChzdHJlcSgoY2hhciAqKWNtZCwgInZlcnNpb24iKSkKKwl7CisJICAgIG5iZGVidWcoKCIgICAgVmVyc2lvbiA9ICVzXG4iLCAoY2hhciAqKSBhcmdzKSk7CisJfQorCS8qCisJICogVW5yZWNvZ25pemVkIGNvbW1hbmQgaXMgaWdub3JlZC4KKwkgKi8KKyAgICB9CisgICAgaWYgKGluQXRvbWljICYmIGRvdXBkYXRlKQorICAgIHsKKwluZWVkdXBkYXRlID0gMTsKKwlkb3VwZGF0ZSA9IDA7CisgICAgfQorCisgICAgaWYgKGJ1ZiAhPSBOVUxMICYmIGJ1Zi0+aW5pdERvbmUgJiYgZG91cGRhdGUpCisgICAgeworCXVwZGF0ZV9zY3JlZW4oTk9UX1ZBTElEKTsKKwlzZXRjdXJzb3IoKTsKKwlvdXRfZmx1c2goKTsKKwlndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisJZ3VpX21jaF9mbHVzaCgpOworCS8qIFF1aXQgYSBoaXQtcmV0dXJuIG9yIG1vcmUgcHJvbXB0LiAqLworCWlmIChTdGF0ZSA9PSBISVRSRVRVUk4gfHwgU3RhdGUgPT0gQVNLTU9SRSkKKwl7CisJICAgIGFkZF90b19pbnB1dF9idWYoKGNoYXJfdSAqKSJcMDAzIiwgMSk7CisjaWZkZWYgRkVBVF9HVUlfR1RLCisJICAgIGlmIChndGtfbWFpbl9sZXZlbCgpID4gMCkKKwkJZ3RrX21haW5fcXVpdCgpOworI2VuZGlmCisJfQorICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIFByb2Nlc3MgYSB2aW0gY29sb24gY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjb2xvbmNtZChjaGFyICpjbWQsIC4uLikKK3sKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICB2YV9saXN0IGFwOworCisgICAgdmFfc3RhcnQoYXAsIGNtZCk7CisgICAgdnNwcmludGYoYnVmLCBjbWQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgbmJkZWJ1ZygoIiAgICBDT0xPTkNNRCAlc1xuIiwgYnVmKSk7CisKKy8qICAgICBBTFRfSU5QVVRfTE9DS19PTjsgKi8KKyAgICBkb19jbWRsaW5lKChjaGFyX3UgKilidWYsIE5VTEwsIE5VTEwsIERPQ01EX05PV0FJVCB8IERPQ01EX0tFWVRZUEVEKTsKKy8qICAgICBBTFRfSU5QVVRfTE9DS19PRkY7ICovCisKKyAgICBzZXRjdXJzb3IoKTsJCS8qIHJlc3RvcmUgdGhlIGN1cnNvciBwb3NpdGlvbiAqLworICAgIG91dF9mbHVzaCgpOwkJLyogbWFrZSBzdXJlIG91dHB1dCBoYXMgYmVlbiB3cml0dGVuICovCisKKyAgICBndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CisgICAgZ3VpX21jaF9mbHVzaCgpOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIGhpZ2hsaWdodHMgYW5kIHNpZ25zIGZvciB1c2UgYnkgbmV0YmVhbnMgIChtb3N0bHkgb2Jzb2xldGUpCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbmJfaW5pdF9ncmFwaGljcyh2b2lkKQoreworICAgIHN0YXRpYyBpbnQgZGlkX2luaXQgPSBGQUxTRTsKKworICAgIGlmICghZGlkX2luaXQpCisgICAgeworCWNvbG9uY21kKCI6aGlnaGxpZ2h0IE5CR3VhcmRlZCBndWliZz1DeWFuIGd1aWZnPUJsYWNrIik7CisJY29sb25jbWQoIjpzaWduIGRlZmluZSAlZCBsaW5laGw9TkJHdWFyZGVkIiwgR1VBUkRFRCk7CisKKwlkaWRfaW5pdCA9IFRSVUU7CisgICAgfQorfQorCisvKgorICogQ29udmVydCBrZXkgdG8gbmV0YmVhbnMgbmFtZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCituZXRiZWFuc19rZXluYW1lKGludCBrZXksIGNoYXIgKmJ1ZikKK3sKKyAgICBjaGFyICpuYW1lID0gMDsKKyAgICBjaGFyIG5hbWVidWZbMl07CisgICAgaW50IGN0cmwgID0gMDsKKyAgICBpbnQgc2hpZnQgPSAwOworICAgIGludCBhbHQgICA9IDA7CisKKyAgICBpZiAobW9kX21hc2sgJiBNT0RfTUFTS19DVFJMKQorCWN0cmwgPSAxOworICAgIGlmIChtb2RfbWFzayAmIE1PRF9NQVNLX1NISUZUKQorCXNoaWZ0ID0gMTsKKyAgICBpZiAobW9kX21hc2sgJiBNT0RfTUFTS19BTFQpCisJYWx0ID0gMTsKKworCisgICAgc3dpdGNoIChrZXkpCisgICAgeworCWNhc2UgS19GMToJCW5hbWUgPSAiRjEiOwkJYnJlYWs7CisJY2FzZSBLX1NfRjE6CW5hbWUgPSAiRjEiOwlzaGlmdCA9IDE7CWJyZWFrOworCWNhc2UgS19GMjoJCW5hbWUgPSAiRjIiOwkJYnJlYWs7CisJY2FzZSBLX1NfRjI6CW5hbWUgPSAiRjIiOwlzaGlmdCA9IDE7CWJyZWFrOworCWNhc2UgS19GMzoJCW5hbWUgPSAiRjMiOwkJYnJlYWs7CisJY2FzZSBLX1NfRjM6CW5hbWUgPSAiRjMiOwlzaGlmdCA9IDE7CWJyZWFrOworCWNhc2UgS19GNDoJCW5hbWUgPSAiRjQiOwkJYnJlYWs7CisJY2FzZSBLX1NfRjQ6CW5hbWUgPSAiRjQiOwlzaGlmdCA9IDE7CWJyZWFrOworCWNhc2UgS19GNToJCW5hbWUgPSAiRjUiOwkJYnJlYWs7CisJY2FzZSBLX1NfRjU6CW5hbWUgPSAiRjUiOwlzaGlmdCA9IDE7CWJyZWFrOworCWNhc2UgS19GNjoJCW5hbWUgPSAiRjYiOwkJYnJlYWs7CisJY2FzZSBLX1NfRjY6CW5hbWUgPSAiRjYiOwlzaGlmdCA9IDE7CWJyZWFrOworCWNhc2UgS19GNzoJCW5hbWUgPSAiRjciOwkJYnJlYWs7CisJY2FzZSBLX1NfRjc6CW5hbWUgPSAiRjciOwlzaGlmdCA9IDE7CWJyZWFrOworCWNhc2UgS19GODoJCW5hbWUgPSAiRjgiOwkJYnJlYWs7CisJY2FzZSBLX1NfRjg6CW5hbWUgPSAiRjgiOwlzaGlmdCA9IDE7CWJyZWFrOworCWNhc2UgS19GOToJCW5hbWUgPSAiRjkiOwkJYnJlYWs7CisJY2FzZSBLX1NfRjk6CW5hbWUgPSAiRjkiOwlzaGlmdCA9IDE7CWJyZWFrOworCWNhc2UgS19GMTA6CQluYW1lID0gIkYxMCI7CQlicmVhazsKKwljYXNlIEtfU19GMTA6CW5hbWUgPSAiRjEwIjsJc2hpZnQgPSAxOwlicmVhazsKKwljYXNlIEtfRjExOgkJbmFtZSA9ICJGMTEiOwkJYnJlYWs7CisJY2FzZSBLX1NfRjExOgluYW1lID0gIkYxMSI7CXNoaWZ0ID0gMTsJYnJlYWs7CisJY2FzZSBLX0YxMjoJCW5hbWUgPSAiRjEyIjsJCWJyZWFrOworCWNhc2UgS19TX0YxMjoJbmFtZSA9ICJGMTIiOwlzaGlmdCA9IDE7CWJyZWFrOworCWRlZmF1bHQ6CisJCQlpZiAoa2V5ID49ICcgJyAmJiBrZXkgPD0gJ34nKQorCQkJeworCQkJICAgIC8qIEFsbG93IEFTQ0lJIGNoYXJhY3RlcnMuICovCisJCQkgICAgbmFtZSA9IG5hbWVidWY7CisJCQkgICAgbmFtZWJ1ZlswXSA9IGtleTsKKwkJCSAgICBuYW1lYnVmWzFdID0gTlVMOworCQkJfQorCQkJZWxzZQorCQkJICAgIG5hbWUgPSAiWCI7CisJCQlicmVhazsKKyAgICB9CisKKyAgICBidWZbMF0gPSAnXDAnOworICAgIGlmIChjdHJsKQorCXN0cmNhdChidWYsICJDIik7CisgICAgaWYgKHNoaWZ0KQorCXN0cmNhdChidWYsICJTIik7CisgICAgaWYgKGFsdCkKKwlzdHJjYXQoYnVmLCAiTSIpOyAvKiBNRVRBICovCisgICAgaWYgKGN0cmwgfHwgc2hpZnQgfHwgYWx0KQorCXN0cmNhdChidWYsICItIik7CisgICAgc3RyY2F0KGJ1ZiwgbmFtZSk7Cit9CisKKyNpZmRlZiBGRUFUX0JFVkFMCisvKgorICogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBiYWxsb29uIGV2YWx1YXRpb24uICBHcmFicyB0aGUgdGV4dCB1bmRlciB0aGUKKyAqIGN1cnNvciBhbmQgc2VuZHMgaXQgdG8gdGhlIGRlYnVnZ2VyIGZvciBldmFsdWF0aW9uLiAgVGhlIGRlYnVnZ2VyIHNob3VsZAorICogcmVzcG9uZCB3aXRoIGEgc2hvd0JhbGxvb24gY29tbWFuZCB3aGVuIHRoZXJlIGlzIGEgdXNlZnVsIHJlc3VsdC4KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK25ldGJlYW5zX2JldmFsX2NiKAorCUJhbGxvb25FdmFsCSpiZXZhbCwKKwlpbnQJCSBzdGF0ZSkKK3sKKyAgICBjaGFyX3UJKmZpbGVuYW1lOworICAgIGNoYXJfdQkqdGV4dDsKKyAgICBpbnQJCWxpbmU7CisgICAgaW50CQljb2w7CisgICAgY2hhcglidWZbTUFYUEFUSEwgKiAyICsgMjVdOworICAgIGNoYXJfdQkqcDsKKworICAgIC8qIERvbid0IGRvIGFueXRoaW5nIHdoZW4gJ2JhbGxvb25ldmFsJyBpcyBvZmYsIG1lc3NhZ2VzIHNjcm9sbGVkIHRoZQorICAgICAqIHdpbmRvd3MgdXAgb3Igd2UgaGF2ZSBubyBjb25uZWN0aW9uLiAqLworICAgIGlmICghcF9iZXZhbCB8fCBtc2dfc2Nyb2xsZWQgPiAwIHx8ICFoYXZlQ29ubmVjdGlvbikKKwlyZXR1cm47CisKKyAgICBpZiAoZ3VpX21jaF9nZXRfYmV2YWxfaW5mbyhiZXZhbCwgJmZpbGVuYW1lLCAmbGluZSwgJnRleHQsICZjb2wpID09IE9LKQorICAgIHsKKwkvKiBTZW5kIGRlYnVnZ2VyIHJlcXVlc3QuICBPbmx5IHdoZW4gdGhlIHRleHQgaXMgb2YgcmVhc29uYWJsZQorCSAqIGxlbmd0aC4gKi8KKwlpZiAodGV4dCAhPSBOVUxMICYmIHRleHRbMF0gIT0gTlVMICYmIFNUUkxFTih0ZXh0KSA8IE1BWFBBVEhMKQorCXsKKwkgICAgcCA9IG5iX3F1b3RlKHRleHQpOworCSAgICBpZiAocCAhPSBOVUxMKQorCQlzcHJpbnRmKGJ1ZiwgIjA6YmFsbG9vblRleHQ9JWQgXCIlc1wiXG4iLCBjbWRubywgcCk7CisJICAgIHZpbV9mcmVlKHApOworCSAgICBuYmRlYnVnKCgiRVZUOiAlcyIsIGJ1ZikpOworCSAgICBuYl9zZW5kKGJ1ZiwgIm5ldGJlYW5zX2JldmFsX2NiIik7CisJfQorCXZpbV9mcmVlKHRleHQpOworICAgIH0KK30KKyNlbmRpZgorCisvKgorICogVGVsbCBuZXRiZWFucyB0aGF0IHRoZSB3aW5kb3cgd2FzIG9wZW5lZCwgcmVhZHkgZm9yIGNvbW1hbmRzLgorICovCisgICAgdm9pZAorbmV0YmVhbnNfc3RhcnR1cF9kb25lKHZvaWQpCit7CisgICAgY2hhciAqY21kID0gIjA6c3RhcnR1cERvbmU9MFxuIjsKKworICAgIGlmICghaGF2ZUNvbm5lY3Rpb24pCisJcmV0dXJuOworCisgICAgbmJkZWJ1ZygoIkVWVDogJXMiLCBjbWQpKTsKKyAgICBuYl9zZW5kKGNtZCwgIm5ldGJlYW5zX3N0YXJ0dXBfZG9uZSIpOworCisjaWZkZWYgRkVBVF9CRVZBTAorIyBpZmRlZiBGRUFUX0dVSV9NT1RJRgorICAgIGlmIChndWkuaW5fdXNlKQorICAgIHsKKwkvKgorCSAqIFNldCB1cCB0aGUgQmFsbG9vbiBFeHByZXNzaW9uIEV2YWx1YXRpb24gYXJlYSBmb3IgTW90aWYuCisJICogR1RLIGNhbiBkbyBpdCBlYXJsaWVyLi4uCisJICogQWx3YXlzIGNyZWF0ZSBpdCBidXQgZGlzYWJsZSBpdCB3aGVuICdiYWxsb29uZXZhbCcgaXNuJ3Qgc2V0LgorCSAqLworCWJhbGxvb25FdmFsID0gZ3VpX21jaF9jcmVhdGVfYmV2YWxfYXJlYSh0ZXh0QXJlYSwgTlVMTCwKKwkJCQkJCSAgICAmbmV0YmVhbnNfYmV2YWxfY2IsIE5VTEwpOworCWlmICghcF9iZXZhbCkKKwkgICAgZ3VpX21jaF9kaXNhYmxlX2JldmFsX2FyZWEoYmFsbG9vbkV2YWwpOworICAgIH0KKyMgZWxzZQorIyAgaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpICYmIGRlZmluZWQoRkVBVF9CRVZBTCkKKwliYWxsb29uRXZhbCA9IGd1aV9tY2hfY3JlYXRlX2JldmFsX2FyZWEoTlVMTCwgTlVMTCwKKwkJCQkJCSAgICAmbmV0YmVhbnNfYmV2YWxfY2IsIE5VTEwpOworCWlmICghcF9iZXZhbCkKKwkgICAgZ3VpX21jaF9kaXNhYmxlX2JldmFsX2FyZWEoYmFsbG9vbkV2YWwpOworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgfHwgZGVmaW5lZChGRUFUX0dVSV9XMzIpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogVGVsbCBuZXRiZWFucyB0aGF0IHRoZSB3aW5kb3cgd2FzIG1vdmVkIG9yIHJlc2l6ZWQuCisgKi8KKyAgICB2b2lkCituZXRiZWFuc19mcmFtZV9tb3ZlZChpbnQgbmV3X3gsIGludCBuZXdfeSkKK3sKKyAgICBjaGFyIGJ1ZlsxMjhdOworCisgICAgaWYgKCFoYXZlQ29ubmVjdGlvbikKKwlyZXR1cm47CisKKyAgICBzcHJpbnRmKGJ1ZiwgIjA6Z2VvbWV0cnk9JWQgJWQgJWQgJWQgJWRcbiIsCisJCSAgICBjbWRubywgKGludClDb2x1bW5zLCAoaW50KVJvd3MsIG5ld194LCBuZXdfeSk7CisgICAgbmJkZWJ1ZygoIkVWVDogJXMiLCBidWYpKTsKKyAgICBuYl9zZW5kKGJ1ZiwgIm5ldGJlYW5zX2ZyYW1lX21vdmVkIik7Cit9CisjZW5kaWYKKworLyoKKyAqIFRlbGwgbmV0YmVhbnMgdGhlIHVzZXIgb3BlbmVkIGEgZmlsZS4KKyAqLworICAgIHZvaWQKK25ldGJlYW5zX2ZpbGVfb3BlbmVkKGNoYXIgKmZpbGVuYW1lKQoreworICAgIGNoYXIgICAgYnVmZmVyWzIqTUFYUEFUSExdOworICAgIGNoYXJfdSAgKnE7CisKKyAgICBpZiAoIWhhdmVDb25uZWN0aW9uKQorCXJldHVybjsKKworICAgIHEgPSBuYl9xdW90ZSgoY2hhcl91ICopZmlsZW5hbWUpOworICAgIGlmIChxID09IE5VTEwpCisJcmV0dXJuOworICAgIHNwcmludGYoYnVmZmVyLCAiMDpmaWxlT3BlbmVkPSVkIFwiJXNcIiAlcyAlc1xuIiwKKwkgICAgMCwKKwkgICAgKGNoYXIgKilxLAorCSAgICAiVCIsICAvKiBvcGVuIGluIE5ldEJlYW5zICovCisJICAgICJGIik7IC8qIG1vZGlmaWVkICovCisKKyAgICB2aW1fZnJlZShxKTsKKyAgICBuYmRlYnVnKCgiRVZUOiAlcyIsIGJ1ZmZlcikpOworCisgICAgbmJfc2VuZChidWZmZXIsICJuZXRiZWFuc19maWxlX29wZW5lZCIpOworICAgIGlmIChwX2FjZCAmJiB2aW1fY2hkaXJmaWxlKChjaGFyX3UgKilmaWxlbmFtZSkgPT0gT0spCisJc2hvcnRlbl9mbmFtZXMoVFJVRSk7Cit9CisKKy8qCisgKiBUZWxsIG5ldGJlYW5zIGEgZmlsZSB3YXMgY2xvc2VkLgorICovCisgICAgdm9pZAorbmV0YmVhbnNfZmlsZV9jbG9zZWQoYnVmX1QgKmJ1ZnApCit7CisgICAgaW50CQlidWZubyA9IG5iX2dldGJ1Zm5vKGJ1ZnApOworICAgIG5iYnVmX1QJKm5iYnVmID0gbmJfZ2V0X2J1ZihidWZubyk7CisgICAgY2hhcglidWZmZXJbMipNQVhQQVRITF07CisKKyAgICBpZiAoIWhhdmVDb25uZWN0aW9uIHx8IGJ1Zm5vIDwgMCkKKwlyZXR1cm47CisKKyAgICBpZiAoIW5ldGJlYW5zQ2xvc2VGaWxlKQorICAgIHsKKwluYmRlYnVnKCgiaWdub3JpbmcgZmlsZV9jbG9zZWQgZm9yICVzXG4iLCBidWZwLT5iX2ZmbmFtZSkpOworCXJldHVybjsKKyAgICB9CisKKyAgICBuYmRlYnVnKCgibmV0YmVhbnNfZmlsZV9jbG9zZWQoKSBidWZubyA9ICAlZCwgZmlsZSA9ICVzLCBkaXNwbGF5bmFtZSA9ICVzXG4iLAorCQlidWZubywgYnVmcC0+Yl9mZm5hbWUsCisJCShuYmJ1ZiAhPSBOVUxMKSA/IG5iYnVmLT5kaXNwbGF5bmFtZSA6ICI8PiIpKTsKKworICAgIGlmIChidWZubyA8PSAwKQorCXJldHVybjsKKworICAgIHNwcmludGYoYnVmZmVyLCAiJWQ6a2lsbGVkPSVkXG4iLCBidWZubywgY21kbm8pOworCisgICAgbmJkZWJ1ZygoIkVWVDogJXMiLCBidWZmZXIpKTsKKworICAgIG5iX3NlbmQoYnVmZmVyLCAibmV0YmVhbnNfZmlsZV9jbG9zZWQiKTsKKworICAgIGlmIChuYmJ1ZiAhPSBOVUxMKQorCW5iYnVmLT5idWZwID0gTlVMTDsKK30KKworLyoKKyAqIEdldCBhIHBvaW50ZXIgdG8gdGhlIE5ldGJlYW5zIGJ1ZmZlciBmb3IgVmltIGJ1ZmZlciAiYnVmcCIuCisgKiBSZXR1cm4gTlVMTCBpZiB0aGVyZSBpcyBubyBzdWNoIGJ1ZmZlciBvciBjaGFuZ2VzIGFyZSBub3QgdG8gYmUgcmVwb3J0ZWQuCisgKiBPdGhlcndpc2Ugc3RvcmUgdGhlIGJ1ZmZlciBudW1iZXIgaW4gIipidWZub3AiLgorICovCisgICAgc3RhdGljIG5iYnVmX1QgKgorbmJfYnVmcDJuYmJ1Zl9maXJlKGJ1Zl9UICpidWZwLCBpbnQgKmJ1Zm5vcCkKK3sKKyAgICBpbnQJCWJ1Zm5vOworICAgIG5iYnVmX1QJKm5iYnVmOworCisgICAgaWYgKCFoYXZlQ29ubmVjdGlvbiB8fCAhbmV0YmVhbnNGaXJlQ2hhbmdlcykKKwlyZXR1cm4gTlVMTDsJCS8qIGNoYW5nZXMgYXJlIG5vdCByZXBvcnRlZCBhdCBhbGwgKi8KKworICAgIGJ1Zm5vID0gbmJfZ2V0YnVmbm8oYnVmcCk7CisgICAgaWYgKGJ1Zm5vIDw9IDApCisJcmV0dXJuIE5VTEw7CQkvKiBmaWxlIGlzIG5vdCBrbm93biB0byBOZXRCZWFucyAqLworCisgICAgbmJidWYgPSBuYl9nZXRfYnVmKGJ1Zm5vKTsKKyAgICBpZiAobmJidWYgIT0gTlVMTCAmJiAhbmJidWYtPmZpcmVDaGFuZ2VzKQorCXJldHVybiBOVUxMOwkJLyogY2hhbmdlcyBpbiB0aGlzIGJ1ZmZlciBhcmUgbm90IHJlcG9ydGVkICovCisKKyAgICAqYnVmbm9wID0gYnVmbm87CisgICAgcmV0dXJuIG5iYnVmOworfQorCisvKgorICogVGVsbCBuZXRiZWFucyB0aGUgdXNlciBpbnNlcnRlZCBzb21lIHRleHQuCisgKi8KKyAgICB2b2lkCituZXRiZWFuc19pbnNlcnRlZCgKKyAgICBidWZfVAkqYnVmcCwKKyAgICBsaW5lbnJfVAlsaW5lbnIsCisgICAgY29sbnJfVAljb2wsCisgICAgaW50CQlvbGRsZW4sCisgICAgY2hhcl91CSp0eHQsCisgICAgaW50CQluZXdsZW4pCit7CisgICAgY2hhcl91CSpidWY7CisgICAgaW50CQlidWZubzsKKyAgICBuYmJ1Zl9UCSpuYmJ1ZjsKKyAgICBwb3NfVAlwb3M7CisgICAgbG9uZwlvZmY7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqbmV3dHh0OworCisgICAgbmJidWYgPSBuYl9idWZwMm5iYnVmX2ZpcmUoYnVmcCwgJmJ1Zm5vKTsKKyAgICBpZiAobmJidWYgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBuYmJ1Zi0+bW9kaWZpZWQgPSAxOworCisgICAgcG9zLmxudW0gPSBsaW5lbnI7CisgICAgcG9zLmNvbCA9IGNvbDsKKworICAgIG9mZiA9IHBvczJvZmYoYnVmcCwgJnBvcyk7CisKKy8qICAgICBuYmRlYnVnKCgibGluZW5yID0gJWQsIGNvbCA9ICVkLCBvZmYgPSAlbGRcbiIsIGxpbmVuciwgY29sLCBvZmYpKTsgKi8KKworICAgIGJ1ZiA9IGFsbG9jKDEyOCArIDIqbmV3bGVuKTsKKworICAgIGlmIChvbGRsZW4gPiAwKQorICAgIHsKKwkvKiBzb21lIGNoYXJzIHdlcmUgcmVwbGFjZWQ7IHNlbmQgInJlbW92ZSIgRVZUICovCisJc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVkOnJlbW92ZT0lZCAlbGQgJWRcbiIsCisJCQkJCQkgICBidWZubywgY21kbm8sIG9mZiwgb2xkbGVuKTsKKwluYmRlYnVnKCgiRVZUOiAlcyIsIGJ1ZikpOworCW5iX3NlbmQoKGNoYXIgKilidWYsICJuZXRiZWFuc19pbnNlcnRlZCIpOworICAgIH0KKyAgICBlbHNlIGlmIChvbGRsZW4gPCAwKQorICAgIHsKKwkvKiBjYW4ndCBoYXBwZW4/ICovCisJbmJkZWJ1ZygoInVuZXhwZWN0ZWQ6IG9sZGxlbiA8IDAgaW4gbmV0YmVhbnNfaW5zZXJ0ZWQiKSk7CisgICAgfQorCisgICAgLyogc2VuZCB0aGUgImluc2VydCIgRVZUICovCisgICAgbmV3dHh0ID0gYWxsb2MobmV3bGVuICsgMSk7CisgICAgU1RSTkNQWShuZXd0eHQsIHR4dCwgbmV3bGVuKTsKKyAgICBuZXd0eHRbbmV3bGVuXSA9ICdcMCc7CisgICAgcCA9IG5iX3F1b3RlKG5ld3R4dCk7CisgICAgaWYgKHAgIT0gTlVMTCkKKyAgICB7CisJc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVkOmluc2VydD0lZCAlbGQgXCIlc1wiXG4iLCBidWZubywgY21kbm8sIG9mZiwgcCk7CisJbmJkZWJ1ZygoIkVWVDogJXMiLCBidWYpKTsKKwluYl9zZW5kKChjaGFyICopYnVmLCAibmV0YmVhbnNfaW5zZXJ0ZWQiKTsKKyAgICB9CisgICAgdmltX2ZyZWUocCk7CisgICAgdmltX2ZyZWUobmV3dHh0KTsKKyAgICB2aW1fZnJlZShidWYpOworfQorCisvKgorICogVGVsbCBuZXRiZWFucyBzb21lIGJ5dGVzIGhhdmUgYmVlbiByZW1vdmVkLgorICovCisgICAgdm9pZAorbmV0YmVhbnNfcmVtb3ZlZCgKKyAgICBidWZfVAkqYnVmcCwKKyAgICBsaW5lbnJfVAlsaW5lbnIsCisgICAgY29sbnJfVAljb2wsCisgICAgbG9uZwlsZW4pCit7CisgICAgY2hhcl91CWJ1ZlsxMjhdOworICAgIGludAkJYnVmbm87CisgICAgbmJidWZfVAkqbmJidWY7CisgICAgcG9zX1QJcG9zOworICAgIGxvbmcJb2ZmOworCisgICAgbmJidWYgPSBuYl9idWZwMm5iYnVmX2ZpcmUoYnVmcCwgJmJ1Zm5vKTsKKyAgICBpZiAobmJidWYgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBpZiAobGVuIDwgMCkKKyAgICB7CisJbmJkZWJ1ZygoIk5lZ2F0aXZlIGxlbiAlbGQgaW4gbmV0YmVhbnNfcmVtb3ZlZCgpISIsIGxlbikpOworCXJldHVybjsKKyAgICB9CisKKyAgICBuYmJ1Zi0+bW9kaWZpZWQgPSAxOworCisgICAgcG9zLmxudW0gPSBsaW5lbnI7CisgICAgcG9zLmNvbCA9IGNvbDsKKworICAgIG9mZiA9IHBvczJvZmYoYnVmcCwgJnBvcyk7CisKKyAgICBzcHJpbnRmKChjaGFyICopYnVmLCAiJWQ6cmVtb3ZlPSVkICVsZCAlbGRcbiIsIGJ1Zm5vLCBjbWRubywgb2ZmLCBsZW4pOworICAgIG5iZGVidWcoKCJFVlQ6ICVzIiwgYnVmKSk7CisgICAgbmJfc2VuZCgoY2hhciAqKWJ1ZiwgIm5ldGJlYW5zX3JlbW92ZWQiKTsKK30KKworLyoKKyAqIFNlbmQgbmV0YmVhbnMgYW4gdW5tb2R1ZmllZCBjb21tYW5kLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCituZXRiZWFuc191bm1vZGlmaWVkKGJ1Zl9UICpidWZwKQoreworI2lmIDAKKyAgICBjaGFyX3UJYnVmWzEyOF07CisgICAgaW50CQlidWZubzsKKyAgICBuYmJ1Zl9UCSpuYmJ1ZjsKKworICAgIC8qIFRoaXMgaGFzIGJlZW4gZGlzYWJsZWQsIGJlY2F1c2UgTmV0QmVhbnMgY29uc2lkZXJzIGEgYnVmZmVyIG1vZGlmaWVkCisgICAgICogZXZlbiB3aGVuIGFsbCBjaGFuZ2VzIGhhdmUgYmVlbiB1bmRvbmUuICovCisgICAgbmJidWYgPSBuYl9idWZwMm5iYnVmX2ZpcmUoYnVmcCwgJmJ1Zm5vKTsKKyAgICBpZiAobmJidWYgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBuYmJ1Zi0+bW9kaWZpZWQgPSAwOworCisgICAgc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVkOnVubW9kaWZpZWQ9JWRcbiIsIGJ1Zm5vLCBjbWRubyk7CisgICAgbmJkZWJ1ZygoIkVWVDogJXMiLCBidWYpKTsKKyAgICBuYl9zZW5kKChjaGFyICopYnVmLCAibmV0YmVhbnNfdW5tb2RpZmllZCIpOworI2VuZGlmCit9CisKKy8qCisgKiBTZW5kIGEgYnV0dG9uIHJlbGVhc2UgZXZlbnQgYmFjayB0byBuZXRiZWFucy4gSXRzIHVwIHRvIG5ldGJlYW5zCisgKiB0byBkZWNpZGUgd2hhdCB0byBkbyAoaWYgYW55dGhpbmcpIHdpdGggdGhpcyBldmVudC4KKyAqLworICAgIHZvaWQKK25ldGJlYW5zX2J1dHRvbl9yZWxlYXNlKGludCBidXR0b24pCit7CisgICAgY2hhcglidWZbMTI4XTsKKyAgICBpbnQJCWJ1Zm5vOworCisgICAgYnVmbm8gPSBuYl9nZXRidWZubyhjdXJidWYpOworCisgICAgaWYgKGJ1Zm5vID49IDAgJiYgY3Vyd2luICE9IE5VTEwgJiYgY3Vyd2luLT53X2J1ZmZlciA9PSBjdXJidWYpCisgICAgeworCWludCBjb2wgPSBtb3VzZV9jb2wgLSBjdXJ3aW4tPndfd2luY29sIC0gKGN1cndpbi0+d19wX251ID8gOSA6IDEpOworCWxvbmcgb2ZmID0gcG9zMm9mZihjdXJidWYsICZjdXJ3aW4tPndfY3Vyc29yKTsKKworCS8qIHN5bmMgdGhlIGN1cnNvciBwb3NpdGlvbiAqLworCXNwcmludGYoYnVmLCAiJWQ6bmV3RG90QW5kTWFyaz0lZCAlbGQgJWxkXG4iLCBidWZubywgY21kbm8sIG9mZiwgb2ZmKTsKKwluYmRlYnVnKCgiRVZUOiAlcyIsIGJ1ZikpOworCW5iX3NlbmQoYnVmLCAibmV0YmVhbnNfYnV0dG9uX3JlbGVhc2VbbmV3RG90QW5kTWFya10iKTsKKworCXNwcmludGYoYnVmLCAiJWQ6YnV0dG9uUmVsZWFzZT0lZCAlZCAlbGQgJWRcbiIsIGJ1Zm5vLCBjbWRubywKKwkJCQkgICAgYnV0dG9uLCAobG9uZyljdXJ3aW4tPndfY3Vyc29yLmxudW0sIGNvbCk7CisJbmJkZWJ1ZygoIkVWVDogJXMiLCBidWYpKTsKKwluYl9zZW5kKGJ1ZiwgIm5ldGJlYW5zX2J1dHRvbl9yZWxlYXNlIik7CisgICAgfQorfQorCisKKy8qCisgKiBTZW5kIGEga2V5cHJlc3MgZXZlbnQgYmFjayB0byBuZXRiZWFucy4gVGhpcyB1c3VhbHkgc2ltdWxhdGVzIHNvbWUKKyAqIGtpbmQgb2YgZnVuY3Rpb24ga2V5IHByZXNzLgorICovCisgICAgdm9pZAorbmV0YmVhbnNfa2V5Y29tbWFuZChpbnQga2V5KQoreworICAgIGNoYXIJYnVmWzIqTUFYUEFUSExdOworICAgIGludAkJYnVmbm87CisgICAgY2hhcglrZXlOYW1lWzYwXTsKKyAgICBsb25nCW9mZjsKKyAgICBjaGFyX3UJKnE7CisKKyAgICBpZiAoIWhhdmVDb25uZWN0aW9uKQorCXJldHVybjsKKworICAgIC8qIGNvbnZlcnQga2V5IHRvIG5ldGJlYW5zIG5hbWUgKi8KKyAgICBuZXRiZWFuc19rZXluYW1lKGtleSwga2V5TmFtZSk7CisKKyAgICBidWZubyA9IG5iX2dldGJ1Zm5vKGN1cmJ1Zik7CisKKyAgICBpZiAoYnVmbm8gPT0gLTEpCisgICAgeworCW5iZGVidWcoKCJnb3Qga2V5Y29tbWFuZCBmb3Igbm9uLU5ldEJlYW5zIGJ1ZmZlciwgb3BlbmluZy4uLlxuIikpOworCXEgPSBjdXJidWYtPmJfZmZuYW1lID09IE5VTEwgPyAoY2hhcl91ICopIiIKKwkJCQkJCSA6IG5iX3F1b3RlKGN1cmJ1Zi0+Yl9mZm5hbWUpOworCWlmIChxID09IE5VTEwpCisJICAgIHJldHVybjsKKwlzcHJpbnRmKGJ1ZiwgIjA6ZmlsZU9wZW5lZD0lZCBcIiVzXCIgJXMgJXNcbiIsIDAsCisJCXEsCisJCSJUIiwgIC8qIG9wZW4gaW4gTmV0QmVhbnMgKi8KKwkJIkYiKTsgLyogbW9kaWZpZWQgKi8KKwlpZiAoY3VyYnVmLT5iX2ZmbmFtZSAhPSBOVUxMKQorCSAgICB2aW1fZnJlZShxKTsKKwluYmRlYnVnKCgiRVZUOiAlcyIsIGJ1ZikpOworCW5iX3NlbmQoYnVmLCAibmV0YmVhbnNfa2V5Y29tbWFuZCIpOworCisJcG9zdHBvbmVfa2V5Y29tbWFuZChrZXkpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBzeW5jIHRoZSBjdXJzb3IgcG9zaXRpb24gKi8KKyAgICBvZmYgPSBwb3Myb2ZmKGN1cmJ1ZiwgJmN1cndpbi0+d19jdXJzb3IpOworICAgIHNwcmludGYoYnVmLCAiJWQ6bmV3RG90QW5kTWFyaz0lZCAlbGQgJWxkXG4iLCBidWZubywgY21kbm8sIG9mZiwgb2ZmKTsKKyAgICBuYmRlYnVnKCgiRVZUOiAlcyIsIGJ1ZikpOworICAgIG5iX3NlbmQoYnVmLCAibmV0YmVhbnNfa2V5Y29tbWFuZCIpOworCisgICAgLyogVG8gd29yayBvbiBXaW4zMiB5b3UgbXVzdCBhcHBseSBwYXRjaCB0byBFeHRFZGl0b3IgbW9kdWxlCisgICAgICogZnJvbSBFeHRFZENhcmV0LmphdmEuZGlmZiAtIG1ha2UgRVZUX25ld0RvdEFuZE1hcmsgaGFuZGxlcgorICAgICAqIG1vcmUgc3luY2hyb25vdXMKKyAgICAgKi8KKworICAgIC8qIG5vdyBzZW5kIGtleUNvbW1hbmQgZXZlbnQgKi8KKyAgICBzcHJpbnRmKGJ1ZiwgIiVkOmtleUNvbW1hbmQ9JWQgXCIlc1wiXG4iLCBidWZubywgY21kbm8sIGtleU5hbWUpOworICAgIG5iZGVidWcoKCJFVlQ6ICVzIiwgYnVmKSk7CisgICAgbmJfc2VuZChidWYsICJuZXRiZWFuc19rZXljb21tYW5kIik7CisKKyAgICAvKiBOZXc6IGRvIGJvdGggYXQgb25jZSBhbmQgaW5jbHVkZSB0aGUgbG51bS9jb2wuICovCisgICAgc3ByaW50ZihidWYsICIlZDprZXlBdFBvcz0lZCBcIiVzXCIgJWxkICVsZC8lbGRcbiIsIGJ1Zm5vLCBjbWRubywga2V5TmFtZSwKKwkJb2ZmLCAobG9uZyljdXJ3aW4tPndfY3Vyc29yLmxudW0sIChsb25nKWN1cndpbi0+d19jdXJzb3IuY29sKTsKKyAgICBuYmRlYnVnKCgiRVZUOiAlcyIsIGJ1ZikpOworICAgIG5iX3NlbmQoYnVmLCAibmV0YmVhbnNfa2V5Y29tbWFuZCIpOworfQorCisKKy8qCisgKiBTZW5kIGEgc2F2ZSBldmVudCB0byBuZXRiZWFucy4KKyAqLworICAgIHZvaWQKK25ldGJlYW5zX3NhdmVfYnVmZmVyKGJ1Zl9UICpidWZwKQoreworICAgIGNoYXJfdQlidWZbNjRdOworICAgIGludAkJYnVmbm87CisgICAgbmJidWZfVAkqbmJidWY7CisKKyAgICBuYmJ1ZiA9IG5iX2J1ZnAybmJidWZfZmlyZShidWZwLCAmYnVmbm8pOworICAgIGlmIChuYmJ1ZiA9PSBOVUxMKQorCXJldHVybjsKKworICAgIG5iYnVmLT5tb2RpZmllZCA9IDA7CisKKyAgICBzcHJpbnRmKChjaGFyICopYnVmLCAiJWQ6c2F2ZT0lZFxuIiwgYnVmbm8sIGNtZG5vKTsKKyAgICBuYmRlYnVnKCgiRVZUOiAlcyIsIGJ1ZikpOworICAgIG5iX3NlbmQoKGNoYXIgKilidWYsICJuZXRiZWFuc19zYXZlX2J1ZmZlciIpOworfQorCisKKy8qCisgKiBTZW5kIHJlbW92ZSBjb21tYW5kIHRvIG5ldGJlYW5zICh0aGlzIGNvbW1hbmQgaGFzIGJlZW4gdHVybmVkIG9mZikuCisgKi8KKyAgICB2b2lkCituZXRiZWFuc19kZWxldGVkX2FsbF9saW5lcyhidWZfVCAqYnVmcCkKK3sKKyAgICBjaGFyX3UJYnVmWzY0XTsKKyAgICBpbnQJCWJ1Zm5vOworICAgIG5iYnVmX1QJKm5iYnVmOworCisgICAgbmJidWYgPSBuYl9idWZwMm5iYnVmX2ZpcmUoYnVmcCwgJmJ1Zm5vKTsKKyAgICBpZiAobmJidWYgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBuYmJ1Zi0+bW9kaWZpZWQgPSAxOworCisgICAgc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVkOnJlbW92ZT0lZCAwIC0xXG4iLCBidWZubywgY21kbm8pOworICAgIG5iZGVidWcoKCJFVlQoc3VwcHJlc3NlZCk6ICVzIiwgYnVmKSk7CisvKiAgICAgbmJfc2VuZChidWYsICJuZXRiZWFuc19kZWxldGVkX2FsbF9saW5lcyIpOyAqLworfQorCisKKy8qCisgKiBTZWUgaWYgdGhlIGxpbmVzIGFyZSBndWFyZGVkLiBUaGUgdG9wIGFuZCBib3QgcGFyYW1ldGVycyBhcmUgZnJvbQorICogdV9zYXZlY29tbW9uKCksIHRoZXNlIGFyZSB0aGUgbGluZSBhYm92ZSB0aGUgY2hhbmdlIGFuZCB0aGUgbGluZSBiZWxvdyB0aGUKKyAqIGNoYW5nZS4KKyAqLworICAgIGludAorbmV0YmVhbnNfaXNfZ3VhcmRlZChsaW5lbnJfVCB0b3AsIGxpbmVucl9UIGJvdCkKK3sKKyAgICBzaWdubGlzdF9UCSpwOworICAgIGludAkJbG51bTsKKworICAgIGZvciAocCA9IGN1cmJ1Zi0+Yl9zaWdubGlzdDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkKKwlpZiAocC0+aWQgPj0gR1VBUkRFRE9GRlNFVCkKKwkgICAgZm9yIChsbnVtID0gdG9wICsgMTsgbG51bSA8IGJvdDsgbG51bSsrKQorCQlpZiAobG51bSA9PSBwLT5sbnVtKQorCQkgICAgcmV0dXJuIFRSVUU7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX01PVElGKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFdlIGhhdmUgbXVsdGlwbGUgc2lnbnMgdG8gZHJhdyBhdCB0aGUgc2FtZSBsb2NhdGlvbi4gRHJhdyB0aGUKKyAqIG11bHRpLXNpZ24gaW5kaWNhdG9yIGluc3RlYWQuIFRoaXMgaXMgdGhlIE1vdGlmIHZlcnNpb24uCisgKi8KKyAgICB2b2lkCituZXRiZWFuc19kcmF3X211bHRpc2lnbl9pbmRpY2F0b3IoaW50IHJvdykKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgeTsKKyAgICBpbnQgeDsKKworICAgIHggPSAwOworICAgIHkgPSByb3cgKiBndWkuY2hhcl9oZWlnaHQgKyAyOworCisgICAgZm9yIChpID0gMDsgaSA8IGd1aS5jaGFyX2hlaWdodCAtIDM7IGkrKykKKwlYRHJhd1BvaW50KGd1aS5kcHksIGd1aS53aWQsIGd1aS50ZXh0X2djLCB4KzIsIHkrKyk7CisKKyAgICBYRHJhd1BvaW50KGd1aS5kcHksIGd1aS53aWQsIGd1aS50ZXh0X2djLCB4KzAsIHkpOworICAgIFhEcmF3UG9pbnQoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLnRleHRfZ2MsIHgrMiwgeSk7CisgICAgWERyYXdQb2ludChndWkuZHB5LCBndWkud2lkLCBndWkudGV4dF9nYywgeCs0LCB5KyspOworICAgIFhEcmF3UG9pbnQoZ3VpLmRweSwgZ3VpLndpZCwgZ3VpLnRleHRfZ2MsIHgrMSwgeSk7CisgICAgWERyYXdQb2ludChndWkuZHB5LCBndWkud2lkLCBndWkudGV4dF9nYywgeCsyLCB5KTsKKyAgICBYRHJhd1BvaW50KGd1aS5kcHksIGd1aS53aWQsIGd1aS50ZXh0X2djLCB4KzMsIHkrKyk7CisgICAgWERyYXdQb2ludChndWkuZHB5LCBndWkud2lkLCBndWkudGV4dF9nYywgeCsyLCB5KTsKK30KKyNlbmRpZiAvKiBGRUFUX0dVSV9NT1RJRiAqLworCisjaWZkZWYgRkVBVF9HVUlfR1RLCisvKgorICogV2UgaGF2ZSBtdWx0aXBsZSBzaWducyB0byBkcmF3IGF0IHRoZSBzYW1lIGxvY2F0aW9uLiBEcmF3IHRoZQorICogbXVsdGktc2lnbiBpbmRpY2F0b3IgaW5zdGVhZC4gVGhpcyBpcyB0aGUgR1RLL0dub21lIHZlcnNpb24uCisgKi8KKyAgICB2b2lkCituZXRiZWFuc19kcmF3X211bHRpc2lnbl9pbmRpY2F0b3IoaW50IHJvdykKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgeTsKKyAgICBpbnQgeDsKKyAgICBHZGtEcmF3YWJsZSAqZHJhd2FibGUgPSBndWkuZHJhd2FyZWEtPndpbmRvdzsKKworICAgIHggPSAwOworICAgIHkgPSByb3cgKiBndWkuY2hhcl9oZWlnaHQgKyAyOworCisgICAgZm9yIChpID0gMDsgaSA8IGd1aS5jaGFyX2hlaWdodCAtIDM7IGkrKykKKwlnZGtfZHJhd19wb2ludChkcmF3YWJsZSwgZ3VpLnRleHRfZ2MsIHgrMiwgeSsrKTsKKworICAgIGdka19kcmF3X3BvaW50KGRyYXdhYmxlLCBndWkudGV4dF9nYywgeCswLCB5KTsKKyAgICBnZGtfZHJhd19wb2ludChkcmF3YWJsZSwgZ3VpLnRleHRfZ2MsIHgrMiwgeSk7CisgICAgZ2RrX2RyYXdfcG9pbnQoZHJhd2FibGUsIGd1aS50ZXh0X2djLCB4KzQsIHkrKyk7CisgICAgZ2RrX2RyYXdfcG9pbnQoZHJhd2FibGUsIGd1aS50ZXh0X2djLCB4KzEsIHkpOworICAgIGdka19kcmF3X3BvaW50KGRyYXdhYmxlLCBndWkudGV4dF9nYywgeCsyLCB5KTsKKyAgICBnZGtfZHJhd19wb2ludChkcmF3YWJsZSwgZ3VpLnRleHRfZ2MsIHgrMywgeSsrKTsKKyAgICBnZGtfZHJhd19wb2ludChkcmF3YWJsZSwgZ3VpLnRleHRfZ2MsIHgrMiwgeSk7Cit9CisjZW5kaWYgLyogRkVBVF9HVUlfR1RLICovCisKKy8qCisgKiBJZiB0aGUgbW91c2UgaXMgY2xpY2tlZCBpbiB0aGUgZ3V0dGVyIG9mIGEgbGluZSB3aXRoIG11bHRpcGxlCisgKiBhbm5vdGF0aW9ucywgY3ljbGUgdGhyb3VnaCB0aGUgc2V0IG9mIHNpZ25zLgorICovCisgICAgdm9pZAorbmV0YmVhbnNfZ3V0dGVyX2NsaWNrKGxpbmVucl9UIGxudW0pCit7CisgICAgc2lnbmxpc3RfVAkqcDsKKworICAgIGZvciAocCA9IGN1cmJ1Zi0+Yl9zaWdubGlzdDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkKKyAgICB7CisJaWYgKHAtPmxudW0gPT0gbG51bSAmJiBwLT5uZXh0ICYmIHAtPm5leHQtPmxudW0gPT0gbG51bSkKKwl7CisJICAgIHNpZ25saXN0X1QgKnRhaWw7CisKKwkgICAgLyogcmVtb3ZlICJwIiBmcm9tIGxpc3QsIHJlaW5zZXJ0IGl0IGF0IHRoZSB0YWlsIG9mIHRoZSBzdWJsaXN0ICovCisJICAgIGlmIChwLT5wcmV2KQorCQlwLT5wcmV2LT5uZXh0ID0gcC0+bmV4dDsKKwkgICAgZWxzZQorCQljdXJidWYtPmJfc2lnbmxpc3QgPSBwLT5uZXh0OworCSAgICBwLT5uZXh0LT5wcmV2ID0gcC0+cHJldjsKKwkgICAgLyogbm93IGZpbmQgZW5kIG9mIHN1Ymxpc3QgYW5kIGluc2VydCBwICovCisJICAgIGZvciAodGFpbCA9IHAtPm5leHQ7CisJCSAgdGFpbC0+bmV4dCAmJiB0YWlsLT5uZXh0LT5sbnVtID09IGxudW0KKwkJCQkJICAgICYmIHRhaWwtPm5leHQtPmlkIDwgR1VBUkRFRE9GRlNFVDsKKwkJICB0YWlsID0gdGFpbC0+bmV4dCkKKwkJOworCSAgICAvKiB0YWlsIG5vdyBwb2ludHMgdG8gbGFzdCBlbnRyeSB3aXRoIHNhbWUgbG51bSAoZXhjZXB0CisJICAgICAqIHRoYXQgImd1YXJkZWQiIGFubm90YXRpb25zIGFyZSBhbHdheXMgbGFzdCkgKi8KKwkgICAgcC0+bmV4dCA9IHRhaWwtPm5leHQ7CisJICAgIGlmICh0YWlsLT5uZXh0KQorCQl0YWlsLT5uZXh0LT5wcmV2ID0gcDsKKwkgICAgcC0+cHJldiA9IHRhaWw7CisJICAgIHRhaWwtPm5leHQgPSBwOworCSAgICB1cGRhdGVfZGVidWdfc2lnbihjdXJidWYsIGxudW0pOworCSAgICBicmVhazsKKwl9CisgICAgfQorfQorCisKKy8qCisgKiBBZGQgYSBzaWduIG9mIHRoZSByZXFlc3RlZCB0eXBlIGF0IHRoZSByZXF1ZXN0ZWQgbG9jYXRpb24uCisgKgorICogUmV2ZXJzZSBlbmdpbmVlcmluZzoKKyAqIEFwcGFyZW50bHkgYW4gYW5ub3RhdGlvbiBpcyBkZWZpbmVkIHRoZSBmaXJzdCB0aW1lIGl0IGlzIHVzZWQgaW4gYSBidWZmZXIuCisgKiBXaGVuIHRoZSBzYW1lIGFubm90YXRpb24gaXMgdXNlZCBpbiB0d28gYnVmZmVycywgdGhlIHNlY29uZCB0aW1lIHdlIGRvIG5vdAorICogbmVlZCB0byBkZWZpbmUgYSBuZXcgc2lnbiBuYW1lIGJ1dCByZXVzZSB0aGUgZXhpc3Rpbmcgb25lLiAgQnV0IHNpbmNlIHRoZQorICogSUQgbnVtYmVyIHVzZWQgaW4gdGhlIHNlY29uZCBidWZmZXIgc3RhcnRzIGNvdW50aW5nIGF0IG9uZSBhZ2FpbiwgYSBtYXBwaW5nCisgKiBpcyBtYWRlIGZyb20gdGhlIElEIHNwZWNpZmljYWxseSBmb3IgdGhlIGJ1ZmZlciB0byB0aGUgZ2xvYmFsIHNpZ24gbmFtZQorICogKHdoaWNoIGlzIGEgbnVtYmVyKS4KKyAqCisgKiBnbG9iYWxzaWdubWFwW10Jc3RvcmVzIHRoZSBzaWducyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIGdsb2JhbGx5LgorICogYnVmLT5zaWdubWFwdXNlZFtdCW1hcHMgYnVmZmVyLWxvY2FsIGFubm90YXRpb24gSURzIHRvIGFuIGluZGV4IGluCisgKgkJCWdsb2JhbHNpZ25tYXBbXS4KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2FkZHNpZ250eXBlKAorICAgIG5iYnVmX1QJKmJ1ZiwKKyAgICBpbnQJCXR5cGVOdW0sCisgICAgY2hhcl91CSp0eXBlTmFtZSwKKyAgICBjaGFyX3UJKnRvb2x0aXAsCisgICAgY2hhcl91CSpnbHlwaEZpbGUsCisgICAgaW50CQl1c2VfZmcsCisgICAgaW50CQlmZywKKyAgICBpbnQJCXVzZV9iZywKKyAgICBpbnQJCWJnKQoreworICAgIGNoYXIgZmdidWZbMzJdOworICAgIGNoYXIgYmdidWZbMzJdOworICAgIGludCBpLCBqOworCisgICAgZm9yIChpID0gMDsgaSA8IGdsb2JhbHNpZ25tYXB1c2VkOyBpKyspCisJaWYgKFNUUkNNUCh0eXBlTmFtZSwgZ2xvYmFsc2lnbm1hcFtpXSkgPT0gMCkKKwkgICAgYnJlYWs7CisKKyAgICBpZiAoaSA9PSBnbG9iYWxzaWdubWFwdXNlZCkgLyogbm90IGZvdW5kOyBhZGQgaXQgdG8gZ2xvYmFsIG1hcCAqLworICAgIHsKKwluYmRlYnVnKCgiREVGSU5FQU5OT1RZUEUoJWQsJXMsJXMsJXMsJWQsJWQpXG4iLAorCQkJICAgIHR5cGVOdW0sIHR5cGVOYW1lLCB0b29sdGlwLCBnbHlwaEZpbGUsIGZnLCBiZykpOworCWlmICh1c2VfZmcgfHwgdXNlX2JnKQorCXsKKwkgICAgc3ByaW50ZihmZ2J1ZiwgImd1aWZnPSMlMDZ4IiwgZmcgJiAweEZGRkZGRik7CisJICAgIHNwcmludGYoYmdidWYsICJndWliZz0jJTA2eCIsIGJnICYgMHhGRkZGRkYpOworCisJICAgIGNvbG9uY21kKCI6aGlnaGxpZ2h0IE5CXyVzICVzICVzIiwgdHlwZU5hbWUsICh1c2VfZmcpID8gZmdidWYgOiAiIiwKKwkJICAgICAodXNlX2JnKSA/IGJnYnVmIDogIiIpOworCSAgICBpZiAoKmdseXBoRmlsZSA9PSBOVUwpCisJCS8qIG5vIGdseXBoLCBsaW5lIGhpZ2hsaWdodGluZyBvbmx5ICovCisJCWNvbG9uY21kKCI6c2lnbiBkZWZpbmUgJWQgbGluZWhsPU5CXyVzIiwgaSArIDEsIHR5cGVOYW1lKTsKKwkgICAgZWxzZSBpZiAodmltX3N0cnNpemUoZ2x5cGhGaWxlKSA8PSAyKQorCQkvKiBvbmUtIG9yIHR3by1jaGFyYWN0ZXIgZ2x5cGggbmFtZSwgdXNlIGFzIHRleHQgZ2x5cGggd2l0aAorCQkgKiB0ZXh0aGwgKi8KKwkJY29sb25jbWQoIjpzaWduIGRlZmluZSAlZCB0ZXh0PSVzIHRleHRobD1OQl8lcyIsIGkgKyAxLAorCQkJCQkJCSBnbHlwaEZpbGUsIHR5cGVOYW1lKTsKKwkgICAgZWxzZQorCQkvKiBnbHlwaCwgbGluZSBoaWdobGlnaHRpbmcgKi8KKwkJY29sb25jbWQoIjpzaWduIGRlZmluZSAlZCBpY29uPSVzIGxpbmVobD1OQl8lcyIsIGkgKyAxLAorCQkJCQkJCSBnbHlwaEZpbGUsIHR5cGVOYW1lKTsKKwl9CisJZWxzZQorCSAgICAvKiBnbHlwaCwgbm8gbGluZSBoaWdobGlnaHRpbmcgKi8KKwkgICAgY29sb25jbWQoIjpzaWduIGRlZmluZSAlZCBpY29uPSVzIiwgaSArIDEsIGdseXBoRmlsZSk7CisKKwlpZiAoU1RSQ01QKHR5cGVOYW1lLCJDdXJyZW50UEMiKSA9PSAwKQorCSAgICBjdXJQQ3R5cGUgPSB0eXBlTnVtOworCisJaWYgKGdsb2JhbHNpZ25tYXB1c2VkID09IGdsb2JhbHNpZ25tYXBsZW4pCisJeworCSAgICBpZiAoZ2xvYmFsc2lnbm1hcGxlbiA9PSAwKSAvKiBmaXJzdCBhbGxvY2F0aW9uICovCisJICAgIHsKKwkJZ2xvYmFsc2lnbm1hcGxlbiA9IDIwOworCQlnbG9iYWxzaWdubWFwID0gKGNoYXIgKiopYWxsb2NfY2xlYXIoZ2xvYmFsc2lnbm1hcGxlbipzaXplb2YoY2hhciAqKSk7CisJICAgIH0KKwkgICAgZWxzZSAgICAvKiBncm93IGl0ICovCisJICAgIHsKKwkJaW50IGluY3I7CisJCWludCBvbGRsZW4gPSBnbG9iYWxzaWdubWFwbGVuOworCisJCWdsb2JhbHNpZ25tYXBsZW4gKj0gMjsKKwkJaW5jciA9IGdsb2JhbHNpZ25tYXBsZW4gLSBvbGRsZW47CisJCWdsb2JhbHNpZ25tYXAgPSAoY2hhciAqKil2aW1fcmVhbGxvYyhnbG9iYWxzaWdubWFwLAorCQkJCQkgICBnbG9iYWxzaWdubWFwbGVuICogc2l6ZW9mKGNoYXIgKikpOworCQltZW1zZXQoZ2xvYmFsc2lnbm1hcCArIG9sZGxlbiwgMCwgaW5jciAqIHNpemVvZihjaGFyICopKTsKKwkgICAgfQorCX0KKworCWdsb2JhbHNpZ25tYXBbaV0gPSAoY2hhciAqKXR5cGVOYW1lOworCWdsb2JhbHNpZ25tYXB1c2VkID0gaSArIDE7CisgICAgfQorCisgICAgLyogY2hlY2sgbG9jYWwgbWFwOyBzaG91bGQgKm5vdCogYmUgZm91bmQhICovCisgICAgZm9yIChqID0gMDsgaiA8IGJ1Zi0+c2lnbm1hcHVzZWQ7IGorKykKKwlpZiAoYnVmLT5zaWdubWFwW2pdID09IGkgKyAxKQorCSAgICByZXR1cm47CisKKyAgICAvKiBhZGQgdG8gbG9jYWwgbWFwICovCisgICAgaWYgKGJ1Zi0+c2lnbm1hcHVzZWQgPT0gYnVmLT5zaWdubWFwbGVuKQorICAgIHsKKwlpZiAoYnVmLT5zaWdubWFwbGVuID09IDApIC8qIGZpcnN0IGFsbG9jYXRpb24gKi8KKwl7CisJICAgIGJ1Zi0+c2lnbm1hcGxlbiA9IDU7CisJICAgIGJ1Zi0+c2lnbm1hcCA9IChpbnQgKilhbGxvY19jbGVhcihidWYtPnNpZ25tYXBsZW4gKiBzaXplb2YoaW50ICopKTsKKwl9CisJZWxzZSAgICAvKiBncm93IGl0ICovCisJeworCSAgICBpbnQgaW5jcjsKKwkgICAgaW50IG9sZGxlbiA9IGJ1Zi0+c2lnbm1hcGxlbjsKKwkgICAgYnVmLT5zaWdubWFwbGVuICo9IDI7CisJICAgIGluY3IgPSBidWYtPnNpZ25tYXBsZW4gLSBvbGRsZW47CisJICAgIGJ1Zi0+c2lnbm1hcCA9IChpbnQgKil2aW1fcmVhbGxvYyhidWYtPnNpZ25tYXAsCisJCQkJCSAgICAgICBidWYtPnNpZ25tYXBsZW4qc2l6ZW9mKGludCAqKSk7CisJICAgIG1lbXNldChidWYtPnNpZ25tYXAgKyBvbGRsZW4sIDAsIGluY3IgKiBzaXplb2YoaW50ICopKTsKKwl9CisgICAgfQorCisgICAgYnVmLT5zaWdubWFwW2J1Zi0+c2lnbm1hcHVzZWQrK10gPSBpICsgMTsKKworfQorCisKKy8qCisgKiBTZWUgaWYgd2UgaGF2ZSB0aGUgcmVxdWVzdGVkIHNpZ24gdHlwZSBpbiB0aGUgYnVmZmVyLgorICovCisgICAgc3RhdGljIGludAorbWFwc2lnbnR5cGUobmJidWZfVCAqYnVmLCBpbnQgbG9jYWxzaWdudHlwZSkKK3sKKyAgICBpZiAoLS1sb2NhbHNpZ250eXBlID49IDAgJiYgbG9jYWxzaWdudHlwZSA8IGJ1Zi0+c2lnbm1hcHVzZWQpCisJcmV0dXJuIGJ1Zi0+c2lnbm1hcFtsb2NhbHNpZ250eXBlXTsKKworICAgIHJldHVybiAwOworfQorCisKKy8qCisgKiBDb21wdXRlIGxlbmd0aCBvZiBidWZmZXIsIGRvbid0IHByaW50IGFueXRoaW5nLgorICovCisgICAgc3RhdGljIGxvbmcKK2dldF9idWZfc2l6ZShidWZfVCAqYnVmcCkKK3sKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGxvbmcJY2hhcl9jb3VudCA9IDA7CisgICAgaW50CQllb2xfc2l6ZTsKKyAgICBsb25nCWxhc3RfY2hlY2sgPSAxMDAwMDBMOworCisgICAgaWYgKGJ1ZnAtPmJfbWwubWxfZmxhZ3MgJiBNTF9FTVBUWSkKKwlyZXR1cm4gMDsKKyAgICBlbHNlCisgICAgeworCWlmIChnZXRfZmlsZWZvcm1hdChidWZwKSA9PSBFT0xfRE9TKQorCSAgICBlb2xfc2l6ZSA9IDI7CisJZWxzZQorCSAgICBlb2xfc2l6ZSA9IDE7CisJZm9yIChsbnVtID0gMTsgbG51bSA8PSBidWZwLT5iX21sLm1sX2xpbmVfY291bnQ7ICsrbG51bSkKKwl7CisJICAgIGNoYXJfY291bnQgKz0gU1RSTEVOKG1sX2dldChsbnVtKSkgKyBlb2xfc2l6ZTsKKwkgICAgLyogQ2hlY2sgZm9yIGEgQ1RSTC1DIGV2ZXJ5IDEwMDAwMCBjaGFyYWN0ZXJzICovCisJICAgIGlmIChjaGFyX2NvdW50ID4gbGFzdF9jaGVjaykKKwkgICAgeworCQl1aV9icmVha2NoZWNrKCk7CisJCWlmIChnb3RfaW50KQorCQkgICAgcmV0dXJuIGNoYXJfY291bnQ7CisJCWxhc3RfY2hlY2sgPSBjaGFyX2NvdW50ICsgMTAwMDAwTDsKKwkgICAgfQorCX0KKwkvKiBDb3JyZWN0aW9uIGZvciB3aGVuIGxhc3QgbGluZSBkb2Vzbid0IGhhdmUgYW4gRU9MLiAqLworCWlmICghYnVmcC0+Yl9wX2VvbCAmJiBidWZwLT5iX3BfYmluKQorCSAgICBjaGFyX2NvdW50IC09IGVvbF9zaXplOworICAgIH0KKworICAgIHJldHVybiBjaGFyX2NvdW50OworfQorCisvKgorICogQ29udmVydCBjaGFyYWN0ZXIgb2Zmc2V0IHRvIGxudW0sY29sCisgKi8KKyAgICBzdGF0aWMgcG9zX1QgKgorb2ZmMnBvcyhidWZfVCAqYnVmLCBsb25nIG9mZnNldCkKK3sKKyAgICBsaW5lbnJfVAkgbG51bTsKKyAgICBzdGF0aWMgcG9zX1QgcG9zOworCisgICAgcG9zLmxudW0gPSAwOworICAgIHBvcy5jb2wgPSAwOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICBwb3MuY29sYWRkID0gMDsKKyNlbmRpZgorCisgICAgaWYgKCEoYnVmLT5iX21sLm1sX2ZsYWdzICYgTUxfRU1QVFkpKQorICAgIHsKKwlpZiAoKGxudW0gPSBtbF9maW5kX2xpbmVfb3Jfb2Zmc2V0KGJ1ZiwgKGxpbmVucl9UKTAsICZvZmZzZXQpKSA8IDApCisJICAgIHJldHVybiBOVUxMOworCXBvcy5sbnVtID0gbG51bTsKKwlwb3MuY29sID0gb2Zmc2V0OworICAgIH0KKworICAgIHJldHVybiAmcG9zOworfQorCisvKgorICogQ29udmVydCBhbiBhcmd1bWVudCBpbiB0aGUgZm9ybSAiMTIzNCIgdG8gYW4gb2Zmc2V0IGFuZCBjb21wdXRlIHRoZQorICogbG51bS9jb2wgZnJvbSBpdC4gIENvbnZlcnQgYW4gYXJndW1lbnQgaW4gdGhlIGZvcm0gIjEyMy8xMiIgZGlyZWN0bHkgdG8gYQorICogbG51bS9jb2wuCisgKiAiYXJncCIgaXMgYWR2YW5jZWQgdG8gYWZ0ZXIgdGhlIGFyZ3VtZW50LgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcG9zaXRpb24sIE5VTEwgaWYgc29tZXRoaW5nIGlzIHdyb25nLgorICovCisgICAgc3RhdGljIHBvc19UICoKK2dldF9vZmZfb3JfbG51bShidWZfVCAqYnVmLCBjaGFyX3UgKiphcmdwKQoreworICAgIHN0YXRpYyBwb3NfVAlteXBvczsKKyAgICBsb25nCQlvZmY7CisKKyAgICBvZmYgPSBzdHJ0b2woKGNoYXIgKikqYXJncCwgKGNoYXIgKiopYXJncCwgMTApOworICAgIGlmICgqKmFyZ3AgPT0gJy8nKQorICAgIHsKKwlteXBvcy5sbnVtID0gKGxpbmVucl9UKW9mZjsKKwkrKyphcmdwOworCW15cG9zLmNvbCA9IHN0cnRvbCgoY2hhciAqKSphcmdwLCAoY2hhciAqKilhcmdwLCAxMCk7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCW15cG9zLmNvbGFkZCA9IDA7CisjZW5kaWYKKwlyZXR1cm4gJm15cG9zOworICAgIH0KKyAgICByZXR1cm4gb2ZmMnBvcyhidWYsIG9mZik7Cit9CisKKworLyoKKyAqIENvbnZlcnQgbG51bSxjb2wgdG8gY2hhcmFjdGVyIG9mZnNldAorICovCisgICAgc3RhdGljIGxvbmcKK3BvczJvZmYoYnVmX1QgKmJ1ZiwgcG9zX1QgKnBvcykKK3sKKyAgICBsb25nCSBvZmZzZXQgPSAwOworCisgICAgaWYgKCEoYnVmLT5iX21sLm1sX2ZsYWdzICYgTUxfRU1QVFkpKQorICAgIHsKKwlpZiAoKG9mZnNldCA9IG1sX2ZpbmRfbGluZV9vcl9vZmZzZXQoYnVmLCBwb3MtPmxudW0sIDApKSA8IDApCisJICAgIHJldHVybiAwOworCW9mZnNldCArPSBwb3MtPmNvbDsKKyAgICB9CisKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCisKKyNlbmRpZiAvKiBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykgKi8KZGlmZiAtLWdpdCBhL3NyYy9ub3JtYWwuYyBiL3NyYy9ub3JtYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTE5NmRhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL25vcm1hbC5jCkBAIC0wLDAgKzEsODUwOCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworLyoKKyAqIG5vcm1hbC5jOglDb250YWlucyB0aGUgbWFpbiByb3V0aW5lIGZvciBwcm9jZXNzaW5nIGNoYXJhY3RlcnMgaW4gY29tbWFuZAorICoJCW1vZGUuICBDb21tdW5pY2F0ZXMgY2xvc2VseSB3aXRoIHRoZSBjb2RlIGluIG9wcy5jIHRvIGhhbmRsZQorICoJCXRoZSBvcGVyYXRvcnMuCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisjaWZkZWYgRkVBVF9WSVNVQUwKKy8qCisgKiBUaGUgVmlzdWFsIGFyZWEgaXMgcmVtZW1iZXJlZCBmb3IgcmVzZWxlY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQJcmVzZWxfVklzdWFsX21vZGUgPSBOVUw7CS8qICd2JywgJ1YnLCBvciBDdHJsLVYgKi8KK3N0YXRpYyBsaW5lbnJfVAlyZXNlbF9WSXN1YWxfbGluZV9jb3VudDsJLyogbnVtYmVyIG9mIGxpbmVzICovCitzdGF0aWMgY29sbnJfVAlyZXNlbF9WSXN1YWxfY29sOwkJLyogbnIgb2YgY29scyBvciBlbmQgY29sICovCisKK3N0YXRpYyBpbnQJcmVzdGFydF9WSXN1YWxfc2VsZWN0ID0gMDsKKyNlbmRpZgorCitzdGF0aWMgaW50CisjIGlmZGVmIF9fQk9STEFORENfXworX1JUTEVOVFJZRgorIyBlbmRpZgorCQludl9jb21wYXJlIF9fQVJHUygoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyKSk7CitzdGF0aWMgaW50CWZpbmRfY29tbWFuZCBfX0FSR1MoKGludCBjbWRjaGFyKSk7CitzdGF0aWMgdm9pZAlvcF9jb2xvbiBfX0FSR1MoKG9wYXJnX1QgKm9hcCkpOworI2lmIGRlZmluZWQoRkVBVF9NT1VTRSkgJiYgZGVmaW5lZChGRUFUX1ZJU1VBTCkKK3N0YXRpYyB2b2lkCWZpbmRfc3RhcnRfb2Zfd29yZCBfX0FSR1MoKHBvc19UICopKTsKK3N0YXRpYyB2b2lkCWZpbmRfZW5kX29mX3dvcmQgX19BUkdTKChwb3NfVCAqKSk7CitzdGF0aWMgaW50CWdldF9tb3VzZV9jbGFzcyBfX0FSR1MoKGNoYXJfdSAqcCkpOworI2VuZGlmCitzdGF0aWMgdm9pZAlwcmVwX3JlZG9fY21kIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJcHJlcF9yZWRvIF9fQVJHUygoaW50IHJlZ25hbWUsIGxvbmcsIGludCwgaW50LCBpbnQsIGludCwgaW50KSk7CitzdGF0aWMgaW50CWNoZWNrY2xlYXJvcCBfX0FSR1MoKG9wYXJnX1QgKm9hcCkpOworc3RhdGljIGludAljaGVja2NsZWFyb3BxIF9fQVJHUygob3BhcmdfVCAqb2FwKSk7CitzdGF0aWMgdm9pZAljbGVhcm9wIF9fQVJHUygob3BhcmdfVCAqb2FwKSk7CitzdGF0aWMgdm9pZAljbGVhcm9wYmVlcCBfX0FSR1MoKG9wYXJnX1QgKm9hcCkpOworI2lmZGVmIEZFQVRfVklTVUFMCitzdGF0aWMgdm9pZAl1bnNoaWZ0X3NwZWNpYWwgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworc3RhdGljIHZvaWQJZGVsX2Zyb21fc2hvd2NtZCBfX0FSR1MoKGludCkpOworI2VuZGlmCisKKy8qCisgKiBudl8qKCk6IGZ1bmN0aW9ucyBjYWxsZWQgdG8gaGFuZGxlIE5vcm1hbCBhbmQgVmlzdWFsIG1vZGUgY29tbWFuZHMuCisgKiBuXyooKTogZnVuY3Rpb25zIGNhbGxlZCB0byBoYW5kbGUgTm9ybWFsIG1vZGUgY29tbWFuZHMuCisgKiB2XyooKTogZnVuY3Rpb25zIGNhbGxlZCB0byBoYW5kbGUgVmlzdWFsIG1vZGUgY29tbWFuZHMuCisgKi8KK3N0YXRpYyB2b2lkCW52X2lnbm9yZSBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X2Vycm9yIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfaGVscCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X2FkZHN1YiBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X3BhZ2UgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9nZCBfX0FSR1MoKG9wYXJnX1QgKm9hcCwgaW50IG5jaGFyKSk7CitzdGF0aWMgaW50CW52X3NjcmVlbmdvIF9fQVJHUygob3BhcmdfVCAqb2FwLCBpbnQgZGlyLCBsb25nIGRpc3QpKTsKKyNpZmRlZiBGRUFUX01PVVNFCitzdGF0aWMgdm9pZAludl9tb3VzZXNjcm9sbCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X21vdXNlIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworI2VuZGlmCitzdGF0aWMgdm9pZAludl9zY3JvbGxfbGluZSBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X3pldCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKKyNpZmRlZiBGRUFUX0dVSQorc3RhdGljIHZvaWQJbnZfdmVyX3Njcm9sbGJhciBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X2hvcl9zY3JvbGxiYXIgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkCW52X2V4bW9kZSBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X2NvbG9uIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfY3RybGcgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9jdHJsaCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X2NsZWFyIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfY3RybG8gX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9oYXQgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9aZXQgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9pZGVudCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorc3RhdGljIGludAlnZXRfdmlzdWFsX3RleHQgX19BUkdTKChjbWRhcmdfVCAqY2FwLCBjaGFyX3UgKipwcCwgaW50ICpsZW5wKSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkCW52X3RhZ3BvcCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X3Njcm9sbCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X3JpZ2h0IF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfbGVmdCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X3VwIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfZG93biBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKKyNpZmRlZiBGRUFUX1NFQVJDSFBBVEgKK3N0YXRpYyB2b2lkCW52X2dvdG9maWxlIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworI2VuZGlmCitzdGF0aWMgdm9pZAludl9lbmQgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9kb2xsYXIgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9zZWFyY2ggX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9uZXh0IF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbm9ybWFsX3NlYXJjaCBfX0FSR1MoKGNtZGFyZ19UICpjYXAsIGludCBkaXIsIGNoYXJfdSAqcGF0LCBpbnQgb3B0KSk7CitzdGF0aWMgdm9pZAludl9jc2VhcmNoIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfYnJhY2tldHMgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9wZXJjZW50IF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfYnJhY2UgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9tYXJrIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfZmluZHBhciBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X3VuZG8gX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9rdW5kbyBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X1JlcGxhY2UgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CisjaWZkZWYgRkVBVF9WUkVQTEFDRQorc3RhdGljIHZvaWQJbnZfdnJlcGxhY2UgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJU1VBTAorc3RhdGljIHZvaWQJdl9zd2FwX2Nvcm5lcnMgX19BUkdTKChpbnQgY21kY2hhcikpOworI2VuZGlmCitzdGF0aWMgdm9pZAludl9yZXBsYWNlIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbl9zd2FwY2hhciBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X2N1cnNvcm1hcmsgX19BUkdTKChjbWRhcmdfVCAqY2FwLCBpbnQgZmxhZywgcG9zX1QgKnBvcykpOworI2lmZGVmIEZFQVRfVklTVUFMCitzdGF0aWMgdm9pZAl2X3Zpc29wIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworI2VuZGlmCitzdGF0aWMgdm9pZAludl9zdWJzdCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X2FiYnJldiBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X29wdHJhbnMgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9nb21hcmsgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9wY21hcmsgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9yZWduYW1lIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworI2lmZGVmIEZFQVRfVklTVUFMCitzdGF0aWMgdm9pZAludl92aXN1YWwgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAluX3N0YXJ0X3Zpc3VhbF9tb2RlIF9fQVJHUygoaW50IGMpKTsKKyNlbmRpZgorc3RhdGljIHZvaWQJbnZfd2luZG93IF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfc3VzcGVuZCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X2dfY21kIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbl9vcGVuY21kIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfZG90IF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfcmVkbyBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X1VuZG8gX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl90aWxkZSBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X29wZXJhdG9yIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfbGluZW9wIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfaG9tZSBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X3BpcGUgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9iY2tfd29yZCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X3dvcmRjbWQgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9iZWdpbmxpbmUgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CisjaWZkZWYgRkVBVF9WSVNVQUwKK3N0YXRpYyB2b2lkCWFkanVzdF9mb3Jfc2VsIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIGludAl1bmFkanVzdF9mb3Jfc2VsIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQJbnZfc2VsZWN0IF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworI2VuZGlmCitzdGF0aWMgdm9pZAludl9nb3RvIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfbm9ybWFsIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfZXNjIF9fQVJHUygoY21kYXJnX1QgKm9hcCkpOworc3RhdGljIHZvaWQJbnZfZWRpdCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCWludm9rZV9lZGl0IF9fQVJHUygoY21kYXJnX1QgKmNhcCwgaW50IHJlcGwsIGludCBjbWQsIGludCBzdGFydGxuKSk7CisjaWZkZWYgRkVBVF9URVhUT0JKCitzdGF0aWMgdm9pZAludl9vYmplY3QgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkCW52X3JlY29yZCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKK3N0YXRpYyB2b2lkCW52X2F0IF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfaGFsZnBhZ2UgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitzdGF0aWMgdm9pZAludl9qb2luIF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfcHV0IF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOworc3RhdGljIHZvaWQJbnZfb3BlbiBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKKyNpZmRlZiBGRUFUX1NOSUZGCitzdGF0aWMgdm9pZAludl9zbmlmZiBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworc3RhdGljIHZvaWQJbnZfbmJjbWQgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0RORAorc3RhdGljIHZvaWQJbnZfZHJvcCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKKyNlbmRpZgorCisvKgorICogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBhIE5vcm1hbCBvciBWaXN1YWwgbW9kZSBjb21tYW5kLgorICogVGhlIGFyZ3VtZW50IGlzIGEgY21kYXJnX1QuCisgKi8KK3R5cGVkZWYgdm9pZCAoKm52X2Z1bmNfVCkgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CisKKy8qIFZhbHVlcyBmb3IgY21kX2ZsYWdzLiAqLworI2RlZmluZSBOVl9OQ0gJICAgIDB4MDEJICAvKiBtYXkgbmVlZCB0byBnZXQgYSBzZWNvbmQgY2hhciAqLworI2RlZmluZSBOVl9OQ0hfTk9QICAoMHgwMnxOVl9OQ0gpIC8qIGdldCBzZWNvbmQgY2hhciB3aGVuIG5vIG9wZXJhdG9yIHBlbmRpbmcgKi8KKyNkZWZpbmUgTlZfTkNIX0FMVyAgKDB4MDR8TlZfTkNIKSAvKiBhbHdheXMgZ2V0IGEgc2Vjb25kIGNoYXIgKi8KKyNkZWZpbmUgTlZfTEFORwkgICAgMHgwOAkvKiBzZWNvbmQgY2hhciBuZWVkcyBsYW5ndWFnZSBhZGp1c3RtZW50ICovCisKKyNkZWZpbmUgTlZfU1MJICAgIDB4MTAJLyogbWF5IHN0YXJ0IHNlbGVjdGlvbiAqLworI2RlZmluZSBOVl9TU1MJICAgIDB4MjAJLyogbWF5IHN0YXJ0IHNlbGVjdGlvbiB3aXRoIHNoaWZ0IG1vZGlmaWVyICovCisjZGVmaW5lIE5WX1NUUwkgICAgMHg0MAkvKiBtYXkgc3RvcCBzZWxlY3Rpb24gd2l0aG91dCBzaGlmdCBtb2RpZi4gKi8KKyNkZWZpbmUgTlZfUkwJICAgIDB4ODAJLyogJ3JpZ2h0bGVmdCcgbW9kaWZpZXMgY29tbWFuZCAqLworI2RlZmluZSBOVl9LRUVQUkVHICAweDEwMAkvKiBkb24ndCBjbGVhciByZWduYW1lICovCisjZGVmaW5lIE5WX05DVwkgICAgMHgyMDAJLyogbm90IGFsbG93ZWQgaW4gY29tbWFuZC1saW5lIHdpbmRvdyAqLworCisvKgorICogR2VuZXJhbGx5IHNwZWFraW5nLCBldmVyeSBOb3JtYWwgbW9kZSBjb21tYW5kIHNob3VsZCBlaXRoZXIgY2xlYXIgYW55CisgKiBwZW5kaW5nIG9wZXJhdG9yICh3aXRoICpjbGVhcm9wKigpKSwgb3Igc2V0IHRoZSBtb3Rpb24gdHlwZSB2YXJpYWJsZQorICogb2FwLT5tb3Rpb25fdHlwZS4KKyAqCisgKiBXaGVuIGEgY3Vyc29yIG1vdGlvbiBjb21tYW5kIGlzIG1hZGUsIGl0IGlzIG1hcmtlZCBhcyBiZWluZyBhIGNoYXJhY3RlciBvcgorICogbGluZSBvcmllbnRlZCBtb3Rpb24uICBUaGVuLCBpZiBhbiBvcGVyYXRvciBpcyBpbiBlZmZlY3QsIHRoZSBvcGVyYXRpb24KKyAqIGJlY29tZXMgY2hhcmFjdGVyIG9yIGxpbmUgb3JpZW50ZWQgYWNjb3JkaW5nbHkuCisgKi8KKworLyoKKyAqIFRoaXMgdGFibGUgY29udGFpbnMgb25lIGVudHJ5IGZvciBldmVyeSBOb3JtYWwgb3IgVmlzdWFsIG1vZGUgY29tbWFuZC4KKyAqIFRoZSBvcmRlciBkb2Vzbid0IG1hdHRlciwgaW5pdF9ub3JtYWxfY21kcygpIHdpbGwgY3JlYXRlIGEgc29ydGVkIGluZGV4LgorICogSXQgaXMgZmFzdGVyIHdoZW4gYWxsIGtleXMgZnJvbSB6ZXJvIHRvICd+JyBhcmUgcHJlc2VudC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBudl9jbWQKK3sKKyAgICBpbnQJCWNtZF9jaGFyOwkvKiAoZmlyc3QpIGNvbW1hbmQgY2hhcmFjdGVyICovCisgICAgbnZfZnVuY19UICAgY21kX2Z1bmM7CS8qIGZ1bmN0aW9uIGZvciB0aGlzIGNvbW1hbmQgKi8KKyAgICBzaG9ydF91CWNtZF9mbGFnczsJLyogTlZfIGZsYWdzICovCisgICAgc2hvcnQJY21kX2FyZzsJLyogdmFsdWUgZm9yIGNhLmFyZyAqLworfSBudl9jbWRzW10gPQoreworICAgIHtOVUwsCW52X2Vycm9yLAkwLAkJCTB9LAorICAgIHtDdHJsX0EsCW52X2FkZHN1YiwJMCwJCQkwfSwKKyAgICB7Q3RybF9CLAludl9wYWdlLAlOVl9TVFMsCQkJQkFDS1dBUkR9LAorICAgIHtDdHJsX0MsCW52X2VzYywJCTAsCQkJVFJVRX0sCisgICAge0N0cmxfRCwJbnZfaGFsZnBhZ2UsCTAsCQkJMH0sCisgICAge0N0cmxfRSwJbnZfc2Nyb2xsX2xpbmUsCTAsCQkJVFJVRX0sCisgICAge0N0cmxfRiwJbnZfcGFnZSwJTlZfU1RTLAkJCUZPUldBUkR9LAorICAgIHtDdHJsX0csCW52X2N0cmxnLAkwLAkJCTB9LAorICAgIHtDdHJsX0gsCW52X2N0cmxoLAkwLAkJCTB9LAorICAgIHtDdHJsX0ksCW52X3BjbWFyaywJMCwJCQkwfSwKKyAgICB7TkwsCW52X2Rvd24sCTAsCQkJRkFMU0V9LAorICAgIHtDdHJsX0ssCW52X2Vycm9yLAkwLAkJCTB9LAorICAgIHtDdHJsX0wsCW52X2NsZWFyLAkwLAkJCTB9LAorICAgIHtDQVIsCW52X2Rvd24sCTAsCQkJVFJVRX0sCisgICAge0N0cmxfTiwJbnZfZG93biwJTlZfU1RTLAkJCUZBTFNFfSwKKyAgICB7Q3RybF9PLAludl9jdHJsbywJMCwJCQkwfSwKKyAgICB7Q3RybF9QLAludl91cCwJCU5WX1NUUywJCQlGQUxTRX0sCisgICAge0N0cmxfUSwJbnZfaWdub3JlLAkwLAkJCTB9LAorICAgIHtDdHJsX1IsCW52X3JlZG8sCTAsCQkJMH0sCisgICAge0N0cmxfUywJbnZfaWdub3JlLAkwLAkJCTB9LAorICAgIHtDdHJsX1QsCW52X3RhZ3BvcCwJTlZfTkNXLAkJCTB9LAorICAgIHtDdHJsX1UsCW52X2hhbGZwYWdlLAkwLAkJCTB9LAorI2lmZGVmIEZFQVRfVklTVUFMCisgICAge0N0cmxfViwJbnZfdmlzdWFsLAkwLAkJCUZBTFNFfSwKKyAgICB7J1YnLAludl92aXN1YWwsCTAsCQkJRkFMU0V9LAorICAgIHsndicsCW52X3Zpc3VhbCwJMCwJCQlGQUxTRX0sCisjZWxzZQorICAgIHtDdHJsX1YsCW52X2Vycm9yLAkwLAkJCTB9LAorICAgIHsnVicsCW52X2Vycm9yLAkwLAkJCTB9LAorICAgIHsndicsCW52X2Vycm9yLAkwLAkJCTB9LAorI2VuZGlmCisgICAge0N0cmxfVywJbnZfd2luZG93LAkwLAkJCTB9LAorICAgIHtDdHJsX1gsCW52X2FkZHN1YiwJMCwJCQkwfSwKKyAgICB7Q3RybF9ZLAludl9zY3JvbGxfbGluZSwJMCwJCQlGQUxTRX0sCisgICAge0N0cmxfWiwJbnZfc3VzcGVuZCwJMCwJCQkwfSwKKyAgICB7RVNDLAludl9lc2MsCQkwLAkJCUZBTFNFfSwKKyAgICB7Q3RybF9CU0wsCW52X25vcm1hbCwJTlZfTkNIX0FMVywJCTB9LAorICAgIHtDdHJsX1JTQiwJbnZfaWRlbnQsCU5WX05DVywJCQkwfSwKKyAgICB7Q3RybF9IQVQsCW52X2hhdCwJCU5WX05DVywJCQkwfSwKKyAgICB7Q3RybF9fLAludl9lcnJvciwJMCwJCQkwfSwKKyAgICB7JyAnLAludl9yaWdodCwJMCwJCQkwfSwKKyAgICB7JyEnLAludl9vcGVyYXRvciwJMCwJCQkwfSwKKyAgICB7JyInLAludl9yZWduYW1lLAlOVl9OQ0hfTk9QfE5WX0tFRVBSRUcsCTB9LAorICAgIHsnIycsCW52X2lkZW50LAkwLAkJCTB9LAorICAgIHsnJCcsCW52X2RvbGxhciwJMCwJCQkwfSwKKyAgICB7JyUnLAludl9wZXJjZW50LAkwLAkJCTB9LAorICAgIHsnJicsCW52X29wdHJhbnMsCTAsCQkJMH0sCisgICAgeydcJycsCW52X2dvbWFyaywJTlZfTkNIX0FMVywJCVRSVUV9LAorICAgIHsnKCcsCW52X2JyYWNlLAkwLAkJCUJBQ0tXQVJEfSwKKyAgICB7JyknLAludl9icmFjZSwJMCwJCQlGT1JXQVJEfSwKKyAgICB7JyonLAludl9pZGVudCwJMCwJCQkwfSwKKyAgICB7JysnLAludl9kb3duLAkwLAkJCVRSVUV9LAorICAgIHsnLCcsCW52X2NzZWFyY2gsCTAsCQkJVFJVRX0sCisgICAgeyctJywJbnZfdXAsCQkwLAkJCVRSVUV9LAorICAgIHsnLicsCW52X2RvdCwJCU5WX0tFRVBSRUcsCQkwfSwKKyAgICB7Jy8nLAludl9zZWFyY2gsCTAsCQkJRkFMU0V9LAorICAgIHsnMCcsCW52X2JlZ2lubGluZSwJMCwJCQkwfSwKKyAgICB7JzEnLAludl9pZ25vcmUsCTAsCQkJMH0sCisgICAgeycyJywJbnZfaWdub3JlLAkwLAkJCTB9LAorICAgIHsnMycsCW52X2lnbm9yZSwJMCwJCQkwfSwKKyAgICB7JzQnLAludl9pZ25vcmUsCTAsCQkJMH0sCisgICAgeyc1JywJbnZfaWdub3JlLAkwLAkJCTB9LAorICAgIHsnNicsCW52X2lnbm9yZSwJMCwJCQkwfSwKKyAgICB7JzcnLAludl9pZ25vcmUsCTAsCQkJMH0sCisgICAgeyc4JywJbnZfaWdub3JlLAkwLAkJCTB9LAorICAgIHsnOScsCW52X2lnbm9yZSwJMCwJCQkwfSwKKyAgICB7JzonLAludl9jb2xvbiwJMCwJCQkwfSwKKyAgICB7JzsnLAludl9jc2VhcmNoLAkwLAkJCUZBTFNFfSwKKyAgICB7JzwnLAludl9vcGVyYXRvciwJTlZfUkwsCQkJMH0sCisgICAgeyc9JywJbnZfb3BlcmF0b3IsCTAsCQkJMH0sCisgICAgeyc+JywJbnZfb3BlcmF0b3IsCU5WX1JMLAkJCTB9LAorICAgIHsnPycsCW52X3NlYXJjaCwJMCwJCQlGQUxTRX0sCisgICAgeydAJywJbnZfYXQsCQlOVl9OQ0hfTk9QLAkJRkFMU0V9LAorICAgIHsnQScsCW52X2VkaXQsCTAsCQkJMH0sCisgICAgeydCJywJbnZfYmNrX3dvcmQsCTAsCQkJMX0sCisgICAgeydDJywJbnZfYWJicmV2LAlOVl9LRUVQUkVHLAkJMH0sCisgICAgeydEJywJbnZfYWJicmV2LAlOVl9LRUVQUkVHLAkJMH0sCisgICAgeydFJywJbnZfd29yZGNtZCwJMCwJCQlUUlVFfSwKKyAgICB7J0YnLAludl9jc2VhcmNoLAlOVl9OQ0hfQUxXfE5WX0xBTkcsCUJBQ0tXQVJEfSwKKyAgICB7J0cnLAludl9nb3RvLAkwLAkJCVRSVUV9LAorICAgIHsnSCcsCW52X3Njcm9sbCwJMCwJCQkwfSwKKyAgICB7J0knLAludl9lZGl0LAkwLAkJCTB9LAorICAgIHsnSicsCW52X2pvaW4sCTAsCQkJMH0sCisgICAgeydLJywJbnZfaWRlbnQsCTAsCQkJMH0sCisgICAgeydMJywJbnZfc2Nyb2xsLAkwLAkJCTB9LAorICAgIHsnTScsCW52X3Njcm9sbCwJMCwJCQkwfSwKKyAgICB7J04nLAludl9uZXh0LAkwLAkJCVNFQVJDSF9SRVZ9LAorICAgIHsnTycsCW52X29wZW4sCTAsCQkJMH0sCisgICAgeydQJywJbnZfcHV0LAkJMCwJCQkwfSwKKyAgICB7J1EnLAludl9leG1vZGUsCU5WX05DVywJCQkwfSwKKyAgICB7J1InLAludl9SZXBsYWNlLAkwLAkJCUZBTFNFfSwKKyAgICB7J1MnLAludl9zdWJzdCwJTlZfS0VFUFJFRywJCTB9LAorICAgIHsnVCcsCW52X2NzZWFyY2gsCU5WX05DSF9BTFd8TlZfTEFORywJQkFDS1dBUkR9LAorICAgIHsnVScsCW52X1VuZG8sCTAsCQkJMH0sCisgICAgeydXJywJbnZfd29yZGNtZCwJMCwJCQlUUlVFfSwKKyAgICB7J1gnLAludl9hYmJyZXYsCU5WX0tFRVBSRUcsCQkwfSwKKyAgICB7J1knLAludl9hYmJyZXYsCU5WX0tFRVBSRUcsCQkwfSwKKyAgICB7J1onLAludl9aZXQsCQlOVl9OQ0hfTk9QfE5WX05DVywJMH0sCisgICAgeydbJywJbnZfYnJhY2tldHMsCU5WX05DSF9BTFcsCQlCQUNLV0FSRH0sCisgICAgeydcXCcsCW52X2Vycm9yLAkwLAkJCTB9LAorICAgIHsnXScsCW52X2JyYWNrZXRzLAlOVl9OQ0hfQUxXLAkJRk9SV0FSRH0sCisgICAgeydeJywJbnZfYmVnaW5saW5lLAkwLAkJCUJMX1dISVRFIHwgQkxfRklYfSwKKyAgICB7J18nLAludl9saW5lb3AsCTAsCQkJMH0sCisgICAgeydgJywJbnZfZ29tYXJrLAlOVl9OQ0hfQUxXLAkJRkFMU0V9LAorICAgIHsnYScsCW52X2VkaXQsCU5WX05DSCwJCQkwfSwKKyAgICB7J2InLAludl9iY2tfd29yZCwJMCwJCQkwfSwKKyAgICB7J2MnLAludl9vcGVyYXRvciwJMCwJCQkwfSwKKyAgICB7J2QnLAludl9vcGVyYXRvciwJMCwJCQkwfSwKKyAgICB7J2UnLAludl93b3JkY21kLAkwLAkJCUZBTFNFfSwKKyAgICB7J2YnLAludl9jc2VhcmNoLAlOVl9OQ0hfQUxXfE5WX0xBTkcsCUZPUldBUkR9LAorICAgIHsnZycsCW52X2dfY21kLAlOVl9OQ0hfQUxXLAkJRkFMU0V9LAorICAgIHsnaCcsCW52X2xlZnQsCU5WX1JMLAkJCTB9LAorICAgIHsnaScsCW52X2VkaXQsCU5WX05DSCwJCQkwfSwKKyAgICB7J2onLAludl9kb3duLAkwLAkJCUZBTFNFfSwKKyAgICB7J2snLAludl91cCwJCTAsCQkJRkFMU0V9LAorICAgIHsnbCcsCW52X3JpZ2h0LAlOVl9STCwJCQkwfSwKKyAgICB7J20nLAludl9tYXJrLAlOVl9OQ0hfTk9QLAkJMH0sCisgICAgeyduJywJbnZfbmV4dCwJMCwJCQkwfSwKKyAgICB7J28nLAludl9vcGVuLAkwLAkJCTB9LAorICAgIHsncCcsCW52X3B1dCwJCTAsCQkJMH0sCisgICAgeydxJywJbnZfcmVjb3JkLAlOVl9OQ0gsCQkJMH0sCisgICAgeydyJywJbnZfcmVwbGFjZSwJTlZfTkNIX05PUHxOVl9MQU5HLAkwfSwKKyAgICB7J3MnLAludl9zdWJzdCwJTlZfS0VFUFJFRywJCTB9LAorICAgIHsndCcsCW52X2NzZWFyY2gsCU5WX05DSF9BTFd8TlZfTEFORywJRk9SV0FSRH0sCisgICAgeyd1JywJbnZfdW5kbywJMCwJCQkwfSwKKyAgICB7J3cnLAludl93b3JkY21kLAkwLAkJCUZBTFNFfSwKKyAgICB7J3gnLAludl9hYmJyZXYsCU5WX0tFRVBSRUcsCQkwfSwKKyAgICB7J3knLAludl9vcGVyYXRvciwJMCwJCQkwfSwKKyAgICB7J3onLAludl96ZXQsCQlOVl9OQ0hfQUxXLAkJMH0sCisgICAgeyd7JywJbnZfZmluZHBhciwJMCwJCQlCQUNLV0FSRH0sCisgICAgeyd8JywJbnZfcGlwZSwJMCwJCQkwfSwKKyAgICB7J30nLAludl9maW5kcGFyLAkwLAkJCUZPUldBUkR9LAorICAgIHsnficsCW52X3RpbGRlLAkwLAkJCTB9LAorCisgICAgLyogcG91bmQgc2lnbiAqLworICAgIHtQT1VORCwJbnZfaWRlbnQsCTAsCQkJMH0sCisjaWZkZWYgRkVBVF9NT1VTRQorICAgIHtLX01PVVNFVVAsIG52X21vdXNlc2Nyb2xsLAkwLAkJCVRSVUV9LAorICAgIHtLX01PVVNFRE9XTiwgbnZfbW91c2VzY3JvbGwsIDAsCQkJRkFMU0V9LAorICAgIHtLX0xFRlRNT1VTRSwgbnZfbW91c2UsCTAsCQkJMH0sCisgICAge0tfTEVGVE1PVVNFX05NLCBudl9tb3VzZSwJMCwJCQkwfSwKKyAgICB7S19MRUZURFJBRywgbnZfbW91c2UsCTAsCQkJMH0sCisgICAge0tfTEVGVFJFTEVBU0UsIG52X21vdXNlLAkwLAkJCTB9LAorICAgIHtLX0xFRlRSRUxFQVNFX05NLCBudl9tb3VzZSwgMCwJCQkwfSwKKyAgICB7S19NSURETEVNT1VTRSwgbnZfbW91c2UsCTAsCQkJMH0sCisgICAge0tfTUlERExFRFJBRywgbnZfbW91c2UsCTAsCQkJMH0sCisgICAge0tfTUlERExFUkVMRUFTRSwgbnZfbW91c2UsCTAsCQkJMH0sCisgICAge0tfUklHSFRNT1VTRSwgbnZfbW91c2UsCTAsCQkJMH0sCisgICAge0tfUklHSFREUkFHLCBudl9tb3VzZSwJMCwJCQkwfSwKKyAgICB7S19SSUdIVFJFTEVBU0UsIG52X21vdXNlLAkwLAkJCTB9LAorICAgIHtLX1gxTU9VU0UsIG52X21vdXNlLAkwLAkJCTB9LAorICAgIHtLX1gxRFJBRywgbnZfbW91c2UsCTAsCQkJMH0sCisgICAge0tfWDFSRUxFQVNFLCBudl9tb3VzZSwJMCwJCQkwfSwKKyAgICB7S19YMk1PVVNFLCBudl9tb3VzZSwJMCwJCQkwfSwKKyAgICB7S19YMkRSQUcsIG52X21vdXNlLAkwLAkJCTB9LAorICAgIHtLX1gyUkVMRUFTRSwgbnZfbW91c2UsCTAsCQkJMH0sCisjZW5kaWYKKyAgICB7S19JR05PUkUsCW52X2lnbm9yZSwJMCwJCQkwfSwKKyAgICB7S19JTlMsCW52X2VkaXQsCTAsCQkJMH0sCisgICAge0tfS0lOUywJbnZfZWRpdCwJMCwJCQkwfSwKKyAgICB7S19CUywJbnZfY3RybGgsCTAsCQkJMH0sCisgICAge0tfVVAsCW52X3VwLAkJTlZfU1NTfE5WX1NUUywJCUZBTFNFfSwKKyAgICB7S19TX1VQLAludl9wYWdlLAlOVl9TUywJCQlCQUNLV0FSRH0sCisgICAge0tfRE9XTiwJbnZfZG93biwJTlZfU1NTfE5WX1NUUywJCUZBTFNFfSwKKyAgICB7S19TX0RPV04sCW52X3BhZ2UsCU5WX1NTLAkJCUZPUldBUkR9LAorICAgIHtLX0xFRlQsCW52X2xlZnQsCU5WX1NTU3xOVl9TVFN8TlZfUkwsCTB9LAorICAgIHtLX1NfTEVGVCwJbnZfYmNrX3dvcmQsCU5WX1NTfE5WX1JMLAkJMH0sCisgICAge0tfQ19MRUZULAludl9iY2tfd29yZCwJTlZfU1NTfE5WX1JMfE5WX1NUUywJMX0sCisgICAge0tfUklHSFQsCW52X3JpZ2h0LAlOVl9TU1N8TlZfU1RTfE5WX1JMLAkwfSwKKyAgICB7S19TX1JJR0hULAludl93b3JkY21kLAlOVl9TU3xOVl9STCwJCUZBTFNFfSwKKyAgICB7S19DX1JJR0hULAludl93b3JkY21kLAlOVl9TU1N8TlZfUkx8TlZfU1RTLAlUUlVFfSwKKyAgICB7S19QQUdFVVAsCW52X3BhZ2UsCU5WX1NTU3xOVl9TVFMsCQlCQUNLV0FSRH0sCisgICAge0tfS1BBR0VVUCwJbnZfcGFnZSwJTlZfU1NTfE5WX1NUUywJCUJBQ0tXQVJEfSwKKyAgICB7S19QQUdFRE9XTiwgbnZfcGFnZSwJTlZfU1NTfE5WX1NUUywJCUZPUldBUkR9LAorICAgIHtLX0tQQUdFRE9XTiwgbnZfcGFnZSwJTlZfU1NTfE5WX1NUUywJCUZPUldBUkR9LAorICAgIHtLX0VORCwJbnZfZW5kLAkJTlZfU1NTfE5WX1NUUywJCUZBTFNFfSwKKyAgICB7S19LRU5ELAludl9lbmQsCQlOVl9TU1N8TlZfU1RTLAkJRkFMU0V9LAorICAgIHtLX1hFTkQsCW52X2VuZCwJCU5WX1NTU3xOVl9TVFMsCQlGQUxTRX0sCisgICAge0tfU19FTkQsCW52X2VuZCwJCU5WX1NTLAkJCUZBTFNFfSwKKyAgICB7S19DX0VORCwJbnZfZW5kLAkJTlZfU1NTfE5WX1NUUywJCVRSVUV9LAorICAgIHtLX0hPTUUsCW52X2hvbWUsCU5WX1NTU3xOVl9TVFMsCQkwfSwKKyAgICB7S19LSE9NRSwJbnZfaG9tZSwJTlZfU1NTfE5WX1NUUywJCTB9LAorICAgIHtLX1hIT01FLAludl9ob21lLAlOVl9TU1N8TlZfU1RTLAkJMH0sCisgICAge0tfU19IT01FLAludl9ob21lLAlOVl9TUywJCQkwfSwKKyAgICB7S19DX0hPTUUsCW52X2dvdG8sCU5WX1NTU3xOVl9TVFMsCQlGQUxTRX0sCisgICAge0tfREVMLAludl9hYmJyZXYsCTAsCQkJMH0sCisgICAge0tfS0RFTCwJbnZfYWJicmV2LAkwLAkJCTB9LAorICAgIHtLX1VORE8sCW52X2t1bmRvLAkwLAkJCTB9LAorICAgIHtLX0hFTFAsCW52X2hlbHAsCU5WX05DVywJCQkwfSwKKyAgICB7S19GMSwJbnZfaGVscCwJTlZfTkNXLAkJCTB9LAorICAgIHtLX1hGMSwJbnZfaGVscCwJTlZfTkNXLAkJCTB9LAorI2lmZGVmIEZFQVRfVklTVUFMCisgICAge0tfU0VMRUNULAludl9zZWxlY3QsCTAsCQkJMH0sCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSQorICAgIHtLX1ZFUl9TQ1JPTExCQVIsIG52X3Zlcl9zY3JvbGxiYXIsIDAsCQkwfSwKKyAgICB7S19IT1JfU0NST0xMQkFSLCBudl9ob3Jfc2Nyb2xsYmFyLCAwLAkJMH0sCisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZLTUFQCisgICAge0tfRjgsCWZhcnNpX2ZrZXksCTAsCQkJMH0sCisgICAge0tfRjksCWZhcnNpX2ZrZXksCTAsCQkJMH0sCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NOSUZGCisgICAge0tfU05JRkYsCW52X3NuaWZmLAkwLAkJCTB9LAorI2VuZGlmCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAge0tfRjIxLAludl9uYmNtZCwJTlZfTkNIX0FMVywJCTB9LAorI2VuZGlmCisjaWZkZWYgRkVBVF9ETkQKKyAgICB7S19EUk9QLAludl9kcm9wLAlOVl9TVFMsCQkJMH0sCisjZW5kaWYKK307CisKKy8qIE51bWJlciBvZiBjb21tYW5kcyBpbiBudl9jbWRzW10uICovCisjZGVmaW5lIE5WX0NNRFNfU0laRSAoc2l6ZW9mKG52X2NtZHMpIC8gc2l6ZW9mKHN0cnVjdCBudl9jbWQpKQorCisvKiBTb3J0ZWQgaW5kZXggb2YgY29tbWFuZHMgaW4gbnZfY21kc1tdLiAqLworc3RhdGljIHNob3J0IG52X2NtZF9pZHhbTlZfQ01EU19TSVpFXTsKKworLyogVGhlIGhpZ2hlc3QgaW5kZXggZm9yIHdoaWNoCisgKiBudl9jbWRzW2lkeF0uY21kX2NoYXIgPT0gbnZfY21kX2lkeFtudl9jbWRzW2lkeF0uY21kX2NoYXJdICovCitzdGF0aWMgaW50IG52X21heF9saW5lYXI7CisKKy8qCisgKiBDb21wYXJlIGZ1bmN0aW9ucyBmb3IgcXNvcnQoKSBiZWxvdywgdGhhdCBjaGVja3MgdGhlIGNvbW1hbmQgY2hhcmFjdGVyCisgKiB0aHJvdWdoIHRoZSBpbmRleCBpbiBudl9jbWRfaWR4W10uCisgKi8KKyAgICBzdGF0aWMgaW50CisjaWZkZWYgX19CT1JMQU5EQ19fCitfUlRMRU5UUllGCisjZW5kaWYKK252X2NvbXBhcmUoczEsIHMyKQorICAgIGNvbnN0IHZvaWQJKnMxOworICAgIGNvbnN0IHZvaWQJKnMyOworeworICAgIGludAkJYzEsIGMyOworCisgICAgLyogVGhlIGNvbW1hbmRzIGFyZSBzb3J0ZWQgb24gYWJzb2x1dGUgdmFsdWUuICovCisgICAgYzEgPSBudl9jbWRzWyooY29uc3Qgc2hvcnQgKilzMV0uY21kX2NoYXI7CisgICAgYzIgPSBudl9jbWRzWyooY29uc3Qgc2hvcnQgKilzMl0uY21kX2NoYXI7CisgICAgaWYgKGMxIDwgMCkKKwljMSA9IC1jMTsKKyAgICBpZiAoYzIgPCAwKQorCWMyID0gLWMyOworICAgIHJldHVybiBjMSAtIGMyOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgbnZfY21kX2lkeFtdIHRhYmxlLgorICovCisgICAgdm9pZAoraW5pdF9ub3JtYWxfY21kcygpCit7CisgICAgaW50CQlpOworCisgICAgLyogRmlsbCB0aGUgaW5kZXggdGFibGUgd2l0aCBhIG9uZSB0byBvbmUgcmVsYXRpb24uICovCisgICAgZm9yIChpID0gMDsgaSA8IE5WX0NNRFNfU0laRTsgKytpKQorCW52X2NtZF9pZHhbaV0gPSBpOworCisgICAgLyogU29ydCB0aGUgY29tbWFuZHMgYnkgdGhlIGNvbW1hbmQgY2hhcmFjdGVyLiAgKi8KKyAgICBxc29ydCgodm9pZCAqKSZudl9jbWRfaWR4LCAoc2l6ZV90KU5WX0NNRFNfU0laRSwgc2l6ZW9mKHNob3J0KSwgbnZfY29tcGFyZSk7CisKKyAgICAvKiBGaW5kIHRoZSBmaXJzdCBlbnRyeSB0aGF0IGNhbid0IGJlIGluZGV4ZWQgYnkgdGhlIGNvbW1hbmQgY2hhcmFjdGVyLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBOVl9DTURTX1NJWkU7ICsraSkKKwlpZiAoaSAhPSBudl9jbWRzW252X2NtZF9pZHhbaV1dLmNtZF9jaGFyKQorCSAgICBicmVhazsKKyAgICBudl9tYXhfbGluZWFyID0gaSAtIDE7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIGEgY29tbWFuZCBpbiB0aGUgY29tbWFuZHMgdGFibGUuCisgKiBSZXR1cm5zIC0xIGZvciBpbnZhbGlkIGNvbW1hbmQuCisgKi8KKyAgICBzdGF0aWMgaW50CitmaW5kX2NvbW1hbmQoY21kY2hhcikKKyAgICBpbnQJCWNtZGNoYXI7Cit7CisgICAgaW50CQlpOworICAgIGludAkJaWR4OworICAgIGludAkJdG9wLCBib3Q7CisgICAgaW50CQljOworCisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIEEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgaXMgbmV2ZXIgYSBjb21tYW5kLiAqLworICAgIGlmIChjbWRjaGFyID49IDB4MTAwKQorCXJldHVybiAtMTsKKyNlbmRpZgorCisgICAgLyogV2UgdXNlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgY2hhcmFjdGVyLiAgU3BlY2lhbCBrZXlzIGhhdmUgYQorICAgICAqIG5lZ2F0aXZlIHZhbHVlLCBidXQgYXJlIHNvcnRlZCBvbiB0aGVpciBhYnNvbHV0ZSB2YWx1ZS4gKi8KKyAgICBpZiAoY21kY2hhciA8IDApCisJY21kY2hhciA9IC1jbWRjaGFyOworCisgICAgLyogSWYgdGhlIGNoYXJhY3RlciBpcyBpbiB0aGUgZmlyc3QgcGFydDogVGhlIGNoYXJhY3RlciBpcyB0aGUgaW5kZXggaW50bworICAgICAqIG52X2NtZF9pZHhbXS4gKi8KKyAgICBpZiAoY21kY2hhciA8PSBudl9tYXhfbGluZWFyKQorCXJldHVybiBudl9jbWRfaWR4W2NtZGNoYXJdOworCisgICAgLyogUGVyZm9ybSBhIGJpbmFyeSBzZWFyY2guICovCisgICAgYm90ID0gbnZfbWF4X2xpbmVhciArIDE7CisgICAgdG9wID0gTlZfQ01EU19TSVpFIC0gMTsKKyAgICBpZHggPSAtMTsKKyAgICB3aGlsZSAoYm90IDw9IHRvcCkKKyAgICB7CisJaSA9ICh0b3AgKyBib3QpIC8gMjsKKwljID0gbnZfY21kc1tudl9jbWRfaWR4W2ldXS5jbWRfY2hhcjsKKwlpZiAoYyA8IDApCisJICAgIGMgPSAtYzsKKwlpZiAoY21kY2hhciA9PSBjKQorCXsKKwkgICAgaWR4ID0gbnZfY21kX2lkeFtpXTsKKwkgICAgYnJlYWs7CisJfQorCWlmIChjbWRjaGFyID4gYykKKwkgICAgYm90ID0gaSArIDE7CisJZWxzZQorCSAgICB0b3AgPSBpIC0gMTsKKyAgICB9CisgICAgcmV0dXJuIGlkeDsKK30KKworLyoKKyAqIEV4ZWN1dGUgYSBjb21tYW5kIGluIE5vcm1hbCBtb2RlLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitub3JtYWxfY21kKG9hcCwgdG9wbGV2ZWwpCisgICAgb3BhcmdfVAkqb2FwOworICAgIGludAkJdG9wbGV2ZWw7CQkvKiBUUlVFIHdoZW4gY2FsbGVkIGZyb20gbWFpbigpICovCit7CisgICAgc3RhdGljIGxvbmcJb3Bjb3VudCA9IDA7CQkvKiBjYS5vcGNvdW50IHNhdmVkIGhlcmUgKi8KKyAgICBjbWRhcmdfVAljYTsJCQkvKiBjb21tYW5kIGFyZ3VtZW50cyAqLworICAgIGludAkJYzsKKyAgICBpbnQJCWN0cmxfdyA9IEZBTFNFOwkJLyogZ290IENUUkwtVyBjb21tYW5kICovCisgICAgaW50CQlvbGRfY29sID0gY3Vyd2luLT53X2N1cnN3YW50OworI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisgICAgaW50CQluZWVkX2ZsdXNoYnVmOwkJLyogbmVlZCB0byBjYWxsIG91dF9mbHVzaCgpICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIHBvc19UCW9sZF9wb3M7CQkvKiBjdXJzb3IgcG9zaXRpb24gYmVmb3JlIGNvbW1hbmQgKi8KKyAgICBpbnQJCW1hcHBlZF9sZW47CisjZW5kaWYKKyAgICBzdGF0aWMgaW50CW9sZF9tYXBwZWRfbGVuID0gMDsKKyAgICBpbnQJCWlkeDsKKworICAgIHZpbV9tZW1zZXQoJmNhLCAwLCBzaXplb2YoY2EpKTsJLyogYWxzbyByZXNldHMgY2EucmV0dmFsICovCisgICAgY2Eub2FwID0gb2FwOworICAgIGNhLm9wY291bnQgPSBvcGNvdW50OworCisjaWZkZWYgRkVBVF9TTklGRgorICAgIHdhbnRfc25pZmZfcmVxdWVzdCA9IHNuaWZmX2Nvbm5lY3RlZDsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBJZiB0aGVyZSBpcyBhbiBvcGVyYXRvciBwZW5kaW5nLCB0aGVuIHRoZSBjb21tYW5kIHdlIHRha2UgdGhpcyB0aW1lCisgICAgICogd2lsbCB0ZXJtaW5hdGUgaXQuIEZpbmlzaF9vcCB0ZWxscyB1cyB0byBmaW5pc2ggdGhlIG9wZXJhdGlvbiBiZWZvcmUKKyAgICAgKiByZXR1cm5pbmcgdGhpcyB0aW1lICh1bmxlc3MgdGhlIG9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkKS4KKyAgICAgKi8KKyNpZmRlZiBDVVJTT1JfU0hBUEUKKyAgICBjID0gZmluaXNoX29wOworI2VuZGlmCisgICAgZmluaXNoX29wID0gKG9hcC0+b3BfdHlwZSAhPSBPUF9OT1ApOworI2lmZGVmIENVUlNPUl9TSEFQRQorICAgIGlmIChmaW5pc2hfb3AgIT0gYykKKyAgICB7CisJdWlfY3Vyc29yX3NoYXBlKCk7CQkvKiBtYXkgc2hvdyBkaWZmZXJlbnQgY3Vyc29yIHNoYXBlICovCisjIGlmZGVmIEZFQVRfTU9VU0VTSEFQRQorCXVwZGF0ZV9tb3VzZXNoYXBlKC0xKTsKKyMgZW5kaWYKKyAgICB9CisjZW5kaWYKKworICAgIGlmICghZmluaXNoX29wICYmICFvYXAtPnJlZ25hbWUpCisJY2Eub3Bjb3VudCA9IDA7CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIG1hcHBlZF9sZW4gPSB0eXBlYnVmX21hcGxlbigpOworI2VuZGlmCisKKyAgICBTdGF0ZSA9IE5PUk1BTF9CVVNZOworI2lmZGVmIFVTRV9PTl9GTFlfU0NST0xMCisgICAgZG9udF9zY3JvbGwgPSBGQUxTRTsJLyogYWxsb3cgc2Nyb2xsaW5nIGhlcmUgKi8KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBHZXQgdGhlIGNvbW1hbmQgY2hhcmFjdGVyIGZyb20gdGhlIHVzZXIuCisgICAgICovCisgICAgYyA9IHNhZmVfdmdldGMoKTsKKworI2lmZGVmIEZFQVRfTEFOR01BUAorICAgIExBTkdNQVBfQURKVVNUKGMsIFRSVUUpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIElmIGEgbWFwcGluZyB3YXMgc3RhcnRlZCBpbiBWaXN1YWwgb3IgU2VsZWN0IG1vZGUsIHJlbWVtYmVyIHRoZSBsZW5ndGgKKyAgICAgKiBvZiB0aGUgbWFwcGluZy4gIFRoaXMgaXMgdXNlZCBiZWxvdyB0byBub3QgcmV0dXJuIHRvIEluc2VydCBtb2RlIGZvciBhcworICAgICAqIGxvbmcgYXMgdGhlIG1hcHBpbmcgaXMgYmVpbmcgZXhlY3V0ZWQuCisgICAgICovCisgICAgaWYgKHJlc3RhcnRfZWRpdCA9PSAwKQorCW9sZF9tYXBwZWRfbGVuID0gMDsKKyAgICBlbHNlIGlmIChvbGRfbWFwcGVkX2xlbgorI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIHx8IChWSXN1YWxfYWN0aXZlICYmIG1hcHBlZF9sZW4gPT0gMCAmJiB0eXBlYnVmX21hcGxlbigpID4gMCkKKyNlbmRpZgorCSAgICApCisJb2xkX21hcHBlZF9sZW4gPSB0eXBlYnVmX21hcGxlbigpOworCisgICAgaWYgKGMgPT0gTlVMKQorCWMgPSBLX1pFUk87CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIC8qCisgICAgICogSW4gU2VsZWN0IG1vZGUsIHR5cGVkIHRleHQgcmVwbGFjZXMgdGhlIHNlbGVjdGlvbi4KKyAgICAgKi8KKyAgICBpZiAoVklzdWFsX2FjdGl2ZQorCSAgICAmJiBWSXN1YWxfc2VsZWN0CisJICAgICYmICh2aW1faXNwcmludGMoYykgfHwgYyA9PSBOTCB8fCBjID09IENBUiB8fCBjID09IEtfS0VOVEVSKSkKKyAgICB7CisjIGlmZGVmIEZFQVRfTUJZVEUKKwljaGFyX3UJICAgIGJ1ZltNQl9NQVhCWVRFUyArIDFdOworCisJYnVmWygqbWJfY2hhcjJieXRlcykoYywgYnVmKV0gPSBOVUw7CisjIGVsc2UKKwljaGFyX3UJICAgIGJ1ZlsyXTsKKworCWJ1ZlswXSA9IGM7CisJYnVmWzFdID0gTlVMOworIyBlbmRpZgorCS8qIEZha2UgYSAiYyJoYW5nZSBjb21tYW5kLgorCSAqIEluc2VydCB0aGUgdHlwZWQgY2hhcmFjdGVyIGluIHRoZSB0eXBlYWhlYWQgYnVmZmVyLCBzbyB0aGF0IGl0IHdpbGwKKwkgKiBiZSBtYXBwZWQgaW4gSW5zZXJ0IG1vZGUuICBSZXF1aXJlZCBmb3IgIjpsbWFwIiB0byB3b3JrLiAgTWF5IGNhdXNlCisJICogbWFwcGluZyBhIGNoYXJhY3RlciBmcm9tICI6dm5vcmVtYXAiLi4uICovCisJKHZvaWQpaW5zX3R5cGVidWYoYnVmLCBSRU1BUF9ZRVMsIDAsICFLZXlUeXBlZCwgRkFMU0UpOworCWMgPSAnYyc7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworICAgIG5lZWRfZmx1c2hidWYgPSBhZGRfdG9fc2hvd2NtZChjKTsKKyNlbmRpZgorCitnZXRjb3VudDoKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmICghKFZJc3VhbF9hY3RpdmUgJiYgVklzdWFsX3NlbGVjdCkpCisjZW5kaWYKKyAgICB7CisJLyoKKwkgKiBIYW5kbGUgYSBjb3VudCBiZWZvcmUgYSBjb21tYW5kIGFuZCBjb21wdXRlIGNhLmNvdW50MC4KKwkgKiBOb3RlIHRoYXQgJzAnIGlzIGEgY29tbWFuZCBhbmQgbm90IHRoZSBzdGFydCBvZiBhIGNvdW50LCBidXQgaXQncworCSAqIHBhcnQgb2YgYSBjb3VudCBhZnRlciBvdGhlciBkaWdpdHMuCisJICovCisJd2hpbGUgKCAgICAoYyA+PSAnMScgJiYgYyA8PSAnOScpCisJCXx8IChjYS5jb3VudDAgIT0gMCAmJiAoYyA9PSBLX0RFTCB8fCBjID09IEtfS0RFTCB8fCBjID09ICcwJykpKQorCXsKKwkgICAgaWYgKGMgPT0gS19ERUwgfHwgYyA9PSBLX0tERUwpCisJICAgIHsKKwkJY2EuY291bnQwIC89IDEwOworI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJCWRlbF9mcm9tX3Nob3djbWQoNCk7CS8qIGRlbGV0ZSB0aGUgZGlnaXQgYW5kIH5AJSAqLworI2VuZGlmCisJICAgIH0KKwkgICAgZWxzZQorCQljYS5jb3VudDAgPSBjYS5jb3VudDAgKiAxMCArIChjIC0gJzAnKTsKKwkgICAgaWYgKGNhLmNvdW50MCA8IDApCSAgICAvKiBnb3QgdG9vIGxhcmdlISAqLworCQljYS5jb3VudDAgPSA5OTk5OTk5OTlMOworCSAgICBpZiAoY3RybF93KQorCSAgICB7CisJCSsrbm9fbWFwcGluZzsKKwkJKythbGxvd19rZXlzOwkJLyogbm8gbWFwcGluZyBmb3IgbmNoYXIsIGJ1dCBrZXlzICovCisJICAgIH0KKwkgICAgKytub196ZXJvX21hcHBpbmc7CQkvKiBkb24ndCBtYXAgemVybyBoZXJlICovCisJICAgIGMgPSBzYWZlX3ZnZXRjKCk7CisjaWZkZWYgRkVBVF9MQU5HTUFQCisJICAgIExBTkdNQVBfQURKVVNUKGMsIFRSVUUpOworI2VuZGlmCisJICAgIC0tbm9femVyb19tYXBwaW5nOworCSAgICBpZiAoY3RybF93KQorCSAgICB7CisJCS0tbm9fbWFwcGluZzsKKwkJLS1hbGxvd19rZXlzOworCSAgICB9CisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwkgICAgbmVlZF9mbHVzaGJ1ZiB8PSBhZGRfdG9fc2hvd2NtZChjKTsKKyNlbmRpZgorCX0KKworCS8qCisJICogSWYgd2UgZ290IENUUkwtVyB0aGVyZSBtYXkgYmUgYS9hbm90aGVyIGNvdW50CisJICovCisJaWYgKGMgPT0gQ3RybF9XICYmICFjdHJsX3cgJiYgb2FwLT5vcF90eXBlID09IE9QX05PUCkKKwl7CisJICAgIGN0cmxfdyA9IFRSVUU7CisJICAgIGNhLm9wY291bnQgPSBjYS5jb3VudDA7CS8qIHJlbWVtYmVyIGZpcnN0IGNvdW50ICovCisJICAgIGNhLmNvdW50MCA9IDA7CisJICAgICsrbm9fbWFwcGluZzsKKwkgICAgKythbGxvd19rZXlzOwkJLyogbm8gbWFwcGluZyBmb3IgbmNoYXIsIGJ1dCBrZXlzICovCisJICAgIGMgPSBzYWZlX3ZnZXRjKCk7CQkvKiBnZXQgbmV4dCBjaGFyYWN0ZXIgKi8KKyNpZmRlZiBGRUFUX0xBTkdNQVAKKwkgICAgTEFOR01BUF9BREpVU1QoYywgVFJVRSk7CisjZW5kaWYKKwkgICAgLS1ub19tYXBwaW5nOworCSAgICAtLWFsbG93X2tleXM7CisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwkgICAgbmVlZF9mbHVzaGJ1ZiB8PSBhZGRfdG9fc2hvd2NtZChjKTsKKyNlbmRpZgorCSAgICBnb3RvIGdldGNvdW50OwkJLyoganVtcCBiYWNrICovCisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBvcGVyYXRvciAoaW5jbHVkaW5nIGFmdGVyIGVudGVyaW5nIGEgeWFuaworICAgICAqIGJ1ZmZlciB3aXRoICciJykgQU5EIHdlIGhhZCBhIGNvdW50IGJlZm9yZSB0aGUgb3BlcmF0b3IsIHRoZW4gdGhhdAorICAgICAqIGNvdW50IG92ZXJyaWRlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiBjYS5jb3VudDAuCisgICAgICogV2hhdCB0aGlzIG1lYW5zIGVmZmVjdGl2ZWx5LCBpcyB0aGF0IGNvbW1hbmRzIGxpa2UgIjNkdyIgZ2V0IHR1cm5lZAorICAgICAqIGludG8gImQzdyIgd2hpY2ggbWFrZXMgdGhpbmdzIGZhbGwgaW50byBwbGFjZSBwcmV0dHkgbmVhdGx5LgorICAgICAqIElmIHlvdSBnaXZlIGEgY291bnQgYmVmb3JlIEFORCBhZnRlciB0aGUgb3BlcmF0b3IsIHRoZXkgYXJlIG11bHRpcGxpZWQuCisgICAgICovCisgICAgaWYgKGNhLm9wY291bnQgIT0gMCkKKyAgICB7CisJaWYgKGNhLmNvdW50MCkKKwkgICAgY2EuY291bnQwICo9IGNhLm9wY291bnQ7CisJZWxzZQorCSAgICBjYS5jb3VudDAgPSBjYS5vcGNvdW50OworICAgIH0KKworICAgIC8qCisgICAgICogQWx3YXlzIHJlbWVtYmVyIHRoZSBjb3VudC4gIEl0IHdpbGwgYmUgc2V0IHRvIHplcm8gKG9uIHRoZSBuZXh0IGNhbGwsCisgICAgICogYWJvdmUpIHdoZW4gdGhlcmUgaXMgbm8gcGVuZGluZyBvcGVyYXRvci4KKyAgICAgKiBXaGVuIGNhbGxlZCBmcm9tIG1haW4oKSwgc2F2ZSB0aGUgY291bnQgZm9yIHVzZSBieSB0aGUgImNvdW50IiBidWlsdC1pbgorICAgICAqIHZhcmlhYmxlLgorICAgICAqLworICAgIGNhLm9wY291bnQgPSBjYS5jb3VudDA7CisgICAgY2EuY291bnQxID0gKGNhLmNvdW50MCA9PSAwID8gMSA6IGNhLmNvdW50MCk7CisKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICAvKgorICAgICAqIE9ubHkgc2V0IHY6Y291bnQgd2hlbiBjYWxsZWQgZnJvbSBtYWluKCkgYW5kIG5vdCBhIHN0dWZmZWQgY29tbWFuZC4KKyAgICAgKi8KKyAgICBpZiAodG9wbGV2ZWwgJiYgc3R1ZmZfZW1wdHkoKSkKKwlzZXRfdmNvdW50KGNhLmNvdW50MCwgY2EuY291bnQxKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBGaW5kIHRoZSBjb21tYW5kIGNoYXJhY3RlciBpbiB0aGUgdGFibGUgb2YgY29tbWFuZHMuCisgICAgICogRm9yIENUUkwtVyB3ZSBhbHJlYWR5IGdvdCBuY2hhciB3aGVuIGxvb2tpbmcgZm9yIGEgY291bnQuCisgICAgICovCisgICAgaWYgKGN0cmxfdykKKyAgICB7CisJY2EubmNoYXIgPSBjOworCWNhLmNtZGNoYXIgPSBDdHJsX1c7CisgICAgfQorICAgIGVsc2UKKwljYS5jbWRjaGFyID0gYzsKKyAgICBpZHggPSBmaW5kX2NvbW1hbmQoY2EuY21kY2hhcik7CisgICAgaWYgKGlkeCA8IDApCisgICAgeworCS8qIE5vdCBhIGtub3duIGNvbW1hbmQ6IGJlZXAuICovCisJY2xlYXJvcGJlZXAob2FwKTsKKwlnb3RvIG5vcm1hbF9lbmQ7CisgICAgfQorI2lmZGVmIEZFQVRfQ01EV0lOCisgICAgaWYgKGNtZHdpbl90eXBlICE9IDAgJiYgKG52X2NtZHNbaWR4XS5jbWRfZmxhZ3MgJiBOVl9OQ1cpKQorICAgIHsKKwkvKiBUaGlzIGNvbW1hbmQgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNtZGxpbmUgd2luZG93OiBiZWVwLiAqLworCWNsZWFyb3BiZWVwKG9hcCk7CisJRU1TRyhfKGVfY21kd2luKSk7CisJZ290byBub3JtYWxfZW5kOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICAvKgorICAgICAqIEluIFZpc3VhbC9TZWxlY3QgbW9kZSwgYSBmZXcga2V5cyBhcmUgaGFuZGxlZCBpbiBhIHNwZWNpYWwgd2F5LgorICAgICAqLworICAgIGlmIChWSXN1YWxfYWN0aXZlKQorICAgIHsKKwkvKiB3aGVuICdrZXltb2RlbCcgY29udGFpbnMgInN0b3BzZWwiIG1heSBzdG9wIFNlbGVjdC9WaXN1YWwgbW9kZSAqLworCWlmIChrbV9zdG9wc2VsCisJCSYmIChudl9jbWRzW2lkeF0uY21kX2ZsYWdzICYgTlZfU1RTKQorCQkmJiAhKG1vZF9tYXNrICYgTU9EX01BU0tfU0hJRlQpKQorCXsKKwkgICAgZW5kX3Zpc3VhbF9tb2RlKCk7CisJICAgIHJlZHJhd19jdXJidWZfbGF0ZXIoSU5WRVJURUQpOworCX0KKworCS8qIEtleXMgdGhhdCB3b3JrIGRpZmZlcmVudCB3aGVuICdrZXltb2RlbCcgY29udGFpbnMgInN0YXJ0c2VsIiAqLworCWlmIChrbV9zdGFydHNlbCkKKwl7CisJICAgIGlmIChudl9jbWRzW2lkeF0uY21kX2ZsYWdzICYgTlZfU1MpCisJICAgIHsKKwkJdW5zaGlmdF9zcGVjaWFsKCZjYSk7CisJCWlkeCA9IGZpbmRfY29tbWFuZChjYS5jbWRjaGFyKTsKKwkgICAgfQorCSAgICBlbHNlIGlmICgobnZfY21kc1tpZHhdLmNtZF9mbGFncyAmIE5WX1NTUykKKwkJCQkJICAgICAgICYmIChtb2RfbWFzayAmIE1PRF9NQVNLX1NISUZUKSkKKwkgICAgeworCQltb2RfbWFzayAmPSB+TU9EX01BU0tfU0hJRlQ7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorICAgIGlmIChjdXJ3aW4tPndfcF9ybCAmJiBLZXlUeXBlZCAmJiAhS2V5U3R1ZmZlZAorCQkJCQkgICYmIChudl9jbWRzW2lkeF0uY21kX2ZsYWdzICYgTlZfUkwpKQorICAgIHsKKwkvKiBJbnZlcnQgaG9yaXpvbnRhbCBtb3ZlbWVudHMgYW5kIG9wZXJhdGlvbnMuICBPbmx5IHdoZW4gdHlwZWQgYnkgdGhlCisJICogdXNlciBkaXJlY3RseSwgbm90IHdoZW4gdGhlIHJlc3VsdCBvZiBhIG1hcHBpbmcgb3IgIngiIHRyYW5zbGF0ZWQKKwkgKiB0byAiZGwiLiAqLworCXN3aXRjaCAoY2EuY21kY2hhcikKKwl7CisJICAgIGNhc2UgJ2wnOgkgICAgY2EuY21kY2hhciA9ICdoJzsgYnJlYWs7CisJICAgIGNhc2UgS19SSUdIVDogICBjYS5jbWRjaGFyID0gS19MRUZUOyBicmVhazsKKwkgICAgY2FzZSBLX1NfUklHSFQ6IGNhLmNtZGNoYXIgPSBLX1NfTEVGVDsgYnJlYWs7CisJICAgIGNhc2UgS19DX1JJR0hUOiBjYS5jbWRjaGFyID0gS19DX0xFRlQ7IGJyZWFrOworCSAgICBjYXNlICdoJzoJICAgIGNhLmNtZGNoYXIgPSAnbCc7IGJyZWFrOworCSAgICBjYXNlIEtfTEVGVDogICAgY2EuY21kY2hhciA9IEtfUklHSFQ7IGJyZWFrOworCSAgICBjYXNlIEtfU19MRUZUOiAgY2EuY21kY2hhciA9IEtfU19SSUdIVDsgYnJlYWs7CisJICAgIGNhc2UgS19DX0xFRlQ6ICBjYS5jbWRjaGFyID0gS19DX1JJR0hUOyBicmVhazsKKwkgICAgY2FzZSAnPic6CSAgICBjYS5jbWRjaGFyID0gJzwnOyBicmVhazsKKwkgICAgY2FzZSAnPCc6CSAgICBjYS5jbWRjaGFyID0gJz4nOyBicmVhazsKKwl9CisJaWR4ID0gZmluZF9jb21tYW5kKGNhLmNtZGNoYXIpOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBHZXQgYW4gYWRkaXRpb25hbCBjaGFyYWN0ZXIgaWYgd2UgbmVlZCBvbmUuCisgICAgICovCisgICAgaWYgKChudl9jbWRzW2lkeF0uY21kX2ZsYWdzICYgTlZfTkNIKQorCSAgICAmJiAoKChudl9jbWRzW2lkeF0uY21kX2ZsYWdzICYgTlZfTkNIX05PUCkgPT0gTlZfTkNIX05PUAorCQkgICAgJiYgb2FwLT5vcF90eXBlID09IE9QX05PUCkKKwkJfHwgKG52X2NtZHNbaWR4XS5jbWRfZmxhZ3MgJiBOVl9OQ0hfQUxXKSA9PSBOVl9OQ0hfQUxXCisJCXx8IChjYS5jbWRjaGFyID09ICdxJworCQkgICAgJiYgb2FwLT5vcF90eXBlID09IE9QX05PUAorCQkgICAgJiYgIVJlY29yZGluZworCQkgICAgJiYgIUV4ZWNfcmVnKQorCQl8fCAoKGNhLmNtZGNoYXIgPT0gJ2EnIHx8IGNhLmNtZGNoYXIgPT0gJ2knKQorCQkgICAgJiYgKG9hcC0+b3BfdHlwZSAhPSBPUF9OT1AKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkJfHwgVklzdWFsX2FjdGl2ZQorI2VuZGlmCisJCSAgICAgICApKSkpCisgICAgeworCWludAkqY3A7CisJaW50CXJlcGwgPSBGQUxTRTsJLyogZ2V0IGNoYXJhY3RlciBmb3IgcmVwbGFjZSBtb2RlICovCisJaW50CWxpdCA9IEZBTFNFOwkvKiBnZXQgZXh0cmEgY2hhcmFjdGVyIGxpdGVyYWxseSAqLworCWludAlsYW5nbWFwX2FjdGl2ZSA9IEZBTFNFOyAgICAvKiB1c2luZyA6bG1hcCBtYXBwaW5ncyAqLworCWludAlsYW5nOwkJLyogZ2V0dGluZyBhIHRleHQgY2hhcmFjdGVyICovCisjaWZkZWYgVVNFX0lNX0NPTlRST0wKKwlpbnQJc2F2ZV9zbWQ7CS8qIHNhdmVkIHZhbHVlIG9mIHBfc21kICovCisjZW5kaWYKKworCSsrbm9fbWFwcGluZzsKKwkrK2FsbG93X2tleXM7CQkvKiBubyBtYXBwaW5nIGZvciBuY2hhciwgYnV0IGFsbG93IGtleSBjb2RlcyAqLworCWlmIChjYS5jbWRjaGFyID09ICdnJykKKwl7CisJICAgIC8qCisJICAgICAqIEZvciAnZycgZ2V0IHRoZSBuZXh0IGNoYXJhY3RlciBub3csIHNvIHRoYXQgd2UgY2FuIGNoZWNrIGZvcgorCSAgICAgKiAiZ3IiLCAiZyciIGFuZCAiZ2AiLgorCSAgICAgKi8KKwkgICAgY2EubmNoYXIgPSBzYWZlX3ZnZXRjKCk7CisjaWZkZWYgRkVBVF9MQU5HTUFQCisJICAgIExBTkdNQVBfQURKVVNUKGNhLm5jaGFyLCBUUlVFKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJICAgIG5lZWRfZmx1c2hidWYgfD0gYWRkX3RvX3Nob3djbWQoY2EubmNoYXIpOworI2VuZGlmCisJICAgIGlmIChjYS5uY2hhciA9PSAncicgfHwgY2EubmNoYXIgPT0gJ1wnJyB8fCBjYS5uY2hhciA9PSAnYCcKKwkJCQkJCSAgICAgIHx8IGNhLm5jaGFyID09IEN0cmxfQlNMKQorCSAgICB7CisJCWNwID0gJmNhLmV4dHJhX2NoYXI7CS8qIG5lZWQgdG8gZ2V0IGEgdGhpcmQgY2hhcmFjdGVyICovCisJCWlmIChjYS5uY2hhciAhPSAncicpCisJCSAgICBsaXQgPSBUUlVFOwkJCS8qIGdldCBpdCBsaXRlcmFsbHkgKi8KKwkJZWxzZQorCQkgICAgcmVwbCA9IFRSVUU7CQkvKiBnZXQgaXQgaW4gcmVwbGFjZSBtb2RlICovCisJICAgIH0KKwkgICAgZWxzZQorCQljcCA9IE5VTEw7CQkvKiBubyB0aGlyZCBjaGFyYWN0ZXIgbmVlZGVkICovCisJfQorCWVsc2UKKwl7CisJICAgIGlmIChjYS5jbWRjaGFyID09ICdyJykJCS8qIGdldCBpdCBpbiByZXBsYWNlIG1vZGUgKi8KKwkJcmVwbCA9IFRSVUU7CisJICAgIGNwID0gJmNhLm5jaGFyOworCX0KKwlsYW5nID0gKHJlcGwgfHwgKG52X2NtZHNbaWR4XS5jbWRfZmxhZ3MgJiBOVl9MQU5HKSk7CisKKwkvKgorCSAqIEdldCBhIHNlY29uZCBvciB0aGlyZCBjaGFyYWN0ZXIuCisJICovCisJaWYgKGNwICE9IE5VTEwpCisJeworI2lmZGVmIENVUlNPUl9TSEFQRQorCSAgICBpZiAocmVwbCkKKwkgICAgeworCQlTdGF0ZSA9IFJFUExBQ0U7CS8qIHByZXRlbmQgUmVwbGFjZSBtb2RlICovCisJCXVpX2N1cnNvcl9zaGFwZSgpOwkvKiBzaG93IGRpZmZlcmVudCBjdXJzb3Igc2hhcGUgKi8KKwkgICAgfQorI2VuZGlmCisJICAgIGlmIChsYW5nICYmIGN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0ID09IEJfSU1PREVfTE1BUCkKKwkgICAgeworCQkvKiBBbGxvdyBtYXBwaW5ncyBkZWZpbmVkIHdpdGggIjpsbWFwIi4gKi8KKwkJLS1ub19tYXBwaW5nOworCQktLWFsbG93X2tleXM7CisJCWlmIChyZXBsKQorCQkgICAgU3RhdGUgPSBMUkVQTEFDRTsKKwkJZWxzZQorCQkgICAgU3RhdGUgPSBMQU5HTUFQOworCQlsYW5nbWFwX2FjdGl2ZSA9IFRSVUU7CisJICAgIH0KKyNpZmRlZiBVU0VfSU1fQ09OVFJPTAorCSAgICBzYXZlX3NtZCA9IHBfc21kOworCSAgICBwX3NtZCA9IEZBTFNFOwkvKiBEb24ndCBsZXQgdGhlIElNIGNvZGUgc2hvdyB0aGUgbW9kZSBoZXJlICovCisJICAgIGlmIChsYW5nICYmIGN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0ID09IEJfSU1PREVfSU0pCisJCWltX3NldF9hY3RpdmUoVFJVRSk7CisjZW5kaWYKKworCSAgICAqY3AgPSBzYWZlX3ZnZXRjKCk7CisKKwkgICAgaWYgKGxhbmdtYXBfYWN0aXZlKQorCSAgICB7CisJCS8qIFVuZG8gdGhlIGRlY3JlbWVudCBkb25lIGFib3ZlICovCisJCSsrbm9fbWFwcGluZzsKKwkJKythbGxvd19rZXlzOworCQlTdGF0ZSA9IE5PUk1BTF9CVVNZOworCSAgICB9CisjaWZkZWYgVVNFX0lNX0NPTlRST0wKKwkgICAgaWYgKGxhbmcpCisJICAgIHsKKwkJaWYgKGN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0ICE9IEJfSU1PREVfTE1BUCkKKwkJICAgIGltX3NhdmVfc3RhdHVzKCZjdXJidWYtPmJfcF9pbWluc2VydCk7CisJCWltX3NldF9hY3RpdmUoRkFMU0UpOworCSAgICB9CisJICAgIHBfc21kID0gc2F2ZV9zbWQ7CisjZW5kaWYKKyNpZmRlZiBDVVJTT1JfU0hBUEUKKwkgICAgU3RhdGUgPSBOT1JNQUxfQlVTWTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJICAgIG5lZWRfZmx1c2hidWYgfD0gYWRkX3RvX3Nob3djbWQoKmNwKTsKKyNlbmRpZgorCisJICAgIGlmICghbGl0KQorCSAgICB7CisjaWZkZWYgRkVBVF9ESUdSQVBIUworCQkvKiBUeXBpbmcgQ1RSTC1LIGdldHMgYSBkaWdyYXBoLiAqLworCQlpZiAoKmNwID09IEN0cmxfSworCQkJJiYgKChudl9jbWRzW2lkeF0uY21kX2ZsYWdzICYgTlZfTEFORykKKwkJCSAgICB8fCBjcCA9PSAmY2EuZXh0cmFfY2hhcikKKwkJCSYmIHZpbV9zdHJjaHIocF9jcG8sIENQT19ESUdSQVBIKSA9PSBOVUxMKQorCQl7CisJCSAgICBjID0gZ2V0X2RpZ3JhcGgoRkFMU0UpOworCQkgICAgaWYgKGMgPiAwKQorCQkgICAgeworCQkJKmNwID0gYzsKKyMgaWZkZWYgRkVBVF9DTURMX0lORk8KKwkJCS8qIEd1ZXNzaW5nIGhvdyB0byB1cGRhdGUgc2hvd2NtZCBoZXJlLi4uICovCisJCQlkZWxfZnJvbV9zaG93Y21kKDMpOworCQkJbmVlZF9mbHVzaGJ1ZiB8PSBhZGRfdG9fc2hvd2NtZCgqY3ApOworIyBlbmRpZgorCQkgICAgfQorCQl9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTEFOR01BUAorCQkvKiBhZGp1c3QgY2hhcnMgPiAxMjcsIGV4Y2VwdCBhZnRlciAidFRmRnIiIGNvbW1hbmRzICovCisJCUxBTkdNQVBfQURKVVNUKCpjcCwgIWxhbmcpOworI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJLyogYWRqdXN0IEhlYnJldyBtYXBwZWQgY2hhciAqLworCQlpZiAocF9oa21hcCAmJiBsYW5nICYmIEtleVR5cGVkKQorCQkgICAgKmNwID0gaGttYXAoKmNwKTsKKyMgaWZkZWYgRkVBVF9GS01BUAorCQkvKiBhZGp1c3QgRmFyc2kgbWFwcGVkIGNoYXIgKi8KKwkJaWYgKHBfZmttYXAgJiYgbGFuZyAmJiBLZXlUeXBlZCkKKwkJICAgICpjcCA9IGZrbWFwKCpjcCk7CisjIGVuZGlmCisjZW5kaWYKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIFdoZW4gdGhlIG5leHQgY2hhcmFjdGVyIGlzIENUUkwtXCBhIGZvbGxvd2luZyBDVFJMLU4gbWVhbnMgdGhlCisJICAgICAqIGNvbW1hbmQgaXMgYWJvcnRlZCBhbmQgd2UgZ28gdG8gTm9ybWFsIG1vZGUuCisJICAgICAqLworCSAgICBpZiAoY3AgPT0gJmNhLmV4dHJhX2NoYXIKKwkJICAgICYmIGNhLm5jaGFyID09IEN0cmxfQlNMCisJCSAgICAmJiAoY2EuZXh0cmFfY2hhciA9PSBDdHJsX04gfHwgY2EuZXh0cmFfY2hhciA9PSBDdHJsX0cpKQorCSAgICB7CisJCWNhLmNtZGNoYXIgPSBDdHJsX0JTTDsKKwkJY2EubmNoYXIgPSBjYS5leHRyYV9jaGFyOworCQlpZHggPSBmaW5kX2NvbW1hbmQoY2EuY21kY2hhcik7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKmNwID09IEN0cmxfQlNMKQorCSAgICB7CisJCWxvbmcgdG93YWl0ID0gKHBfdHRtID49IDAgPyBwX3R0bSA6IHBfdG0pOworCisJCS8qIFRoZXJlIGlzIGEgYnVzeSB3YWl0IGhlcmUgd2hlbiB0eXBpbmcgImY8Qy1cPiIgYW5kIHRoZW4KKwkJICogc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIENUUkwtTi4gIENhbid0IGJlIGF2b2lkZWQuICovCisJCXdoaWxlICgoYyA9IHZwZWVrYygpKSA8PSAwICYmIHRvd2FpdCA+IDBMKQorCQl7CisJCSAgICBkb19zbGVlcCh0b3dhaXQgPiA1MEwgPyA1MEwgOiB0b3dhaXQpOworCQkgICAgdG93YWl0IC09IDUwTDsKKwkJfQorCQlpZiAoYyA+IDApCisJCXsKKwkJICAgIGMgPSBzYWZlX3ZnZXRjKCk7CisJCSAgICBpZiAoYyAhPSBDdHJsX04gJiYgYyAhPSBDdHJsX0cpCisJCQl2dW5nZXRjKGMpOworCQkgICAgZWxzZQorCQkgICAgeworCQkJY2EuY21kY2hhciA9IEN0cmxfQlNMOworCQkJY2EubmNoYXIgPSBjOworCQkJaWR4ID0gZmluZF9jb21tYW5kKGNhLmNtZGNoYXIpOworCQkgICAgfQorCQl9CisJICAgIH0KKworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgLyogV2hlbiBnZXR0aW5nIGEgdGV4dCBjaGFyYWN0ZXIgYW5kIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhCisJICAgICAqIG11bHRpLWJ5dGUgY2hhcmFjdGVyLCBpdCBjb3VsZCBiZSBhIGNvbXBvc2luZyBjaGFyYWN0ZXIuCisJICAgICAqIEhvd2V2ZXIsIGRvbid0IHdhaXQgZm9yIGl0IHRvIGFycml2ZS4gKi8KKwkgICAgd2hpbGUgKGVuY191dGY4ICYmIGxhbmcgJiYgKGMgPSB2cGVla2MoKSkgPiAwCisJCQkJICYmIChjID49IDB4MTAwIHx8IE1CX0JZVEUyTEVOKHZwZWVrYygpKSA+IDEpKQorCSAgICB7CisJCWMgPSBzYWZlX3ZnZXRjKCk7CisJCWlmICghdXRmX2lzY29tcG9zaW5nKGMpKQorCQl7CisJCSAgICB2dW5nZXRjKGMpOwkJLyogaXQgd2Fzbid0LCBwdXQgaXQgYmFjayAqLworCQkgICAgYnJlYWs7CisJCX0KKwkJZWxzZSBpZiAoY2EubmNoYXJDMSA9PSAwKQorCQkgICAgY2EubmNoYXJDMSA9IGM7CisJCWVsc2UKKwkJICAgIGNhLm5jaGFyQzIgPSBjOworCSAgICB9CisjZW5kaWYKKwl9CisJLS1ub19tYXBwaW5nOworCS0tYWxsb3dfa2V5czsKKyAgICB9CisKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworICAgIC8qCisgICAgICogRmx1c2ggdGhlIHNob3djbWQgY2hhcmFjdGVycyBvbnRvIHRoZSBzY3JlZW4gc28gd2UgY2FuIHNlZSB0aGVtIHdoaWxlCisgICAgICogdGhlIGNvbW1hbmQgaXMgYmVpbmcgZXhlY3V0ZWQuICBPbmx5IGRvIHRoaXMgd2hlbiB0aGUgc2hvd24gY29tbWFuZCB3YXMKKyAgICAgKiBhY3R1YWxseSBkaXNwbGF5ZWQsIG90aGVyd2lzZSB0aGlzIHdpbGwgc2xvdyBkb3duIGEgbG90IHdoZW4gZXhlY3V0aW5nCisgICAgICogbWFwcGluZ3MuCisgICAgICovCisgICAgaWYgKG5lZWRfZmx1c2hidWYpCisJb3V0X2ZsdXNoKCk7CisjZW5kaWYKKworICAgIFN0YXRlID0gTk9STUFMOworCisgICAgaWYgKGNhLm5jaGFyID09IEVTQykKKyAgICB7CisJY2xlYXJvcChvYXApOworCWlmIChyZXN0YXJ0X2VkaXQgPT0gMCAmJiBnb3RvX2ltKCkpCisJICAgIHJlc3RhcnRfZWRpdCA9ICdhJzsKKwlnb3RvIG5vcm1hbF9lbmQ7CisgICAgfQorCisgICAgbXNnX2RpZG91dCA9IEZBTFNFOwkgICAgLyogZG9uJ3Qgc2Nyb2xsIHNjcmVlbiB1cCBmb3Igbm9ybWFsIGNvbW1hbmQgKi8KKyAgICBtc2dfY29sID0gMDsKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgb2xkX3BvcyA9IGN1cndpbi0+d19jdXJzb3I7CQkvKiByZW1lbWJlciB3aGVyZSBjdXJzb3Igd2FzICovCisKKyAgICAvKiBXaGVuICdrZXltb2RlbCcgY29udGFpbnMgInN0YXJ0c2VsIiBzb21lIGtleXMgc3RhcnQgU2VsZWN0L1Zpc3VhbAorICAgICAqIG1vZGUuICovCisgICAgaWYgKCFWSXN1YWxfYWN0aXZlICYmIGttX3N0YXJ0c2VsKQorICAgIHsKKwlpZiAobnZfY21kc1tpZHhdLmNtZF9mbGFncyAmIE5WX1NTKQorCXsKKwkgICAgc3RhcnRfc2VsZWN0aW9uKCk7CisJICAgIHVuc2hpZnRfc3BlY2lhbCgmY2EpOworCSAgICBpZHggPSBmaW5kX2NvbW1hbmQoY2EuY21kY2hhcik7CisJfQorCWVsc2UgaWYgKChudl9jbWRzW2lkeF0uY21kX2ZsYWdzICYgTlZfU1NTKQorCQkJCQkgICAmJiAobW9kX21hc2sgJiBNT0RfTUFTS19TSElGVCkpCisJeworCSAgICBzdGFydF9zZWxlY3Rpb24oKTsKKwkgICAgbW9kX21hc2sgJj0gfk1PRF9NQVNLX1NISUZUOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogRXhlY3V0ZSB0aGUgY29tbWFuZCEKKyAgICAgKiBDYWxsIHRoZSBjb21tYW5kIGZ1bmN0aW9uIGZvdW5kIGluIHRoZSBjb21tYW5kcyB0YWJsZS4KKyAgICAgKi8KKyAgICBjYS5hcmcgPSBudl9jbWRzW2lkeF0uY21kX2FyZzsKKyAgICAobnZfY21kc1tpZHhdLmNtZF9mdW5jKSgmY2EpOworCisgICAgLyoKKyAgICAgKiBJZiB3ZSBkaWRuJ3Qgc3RhcnQgb3IgZmluaXNoIGFuIG9wZXJhdG9yLCByZXNldCBvYXAtPnJlZ25hbWUsIHVubGVzcyB3ZQorICAgICAqIG5lZWQgaXQgbGF0ZXIuCisgICAgICovCisgICAgaWYgKCFmaW5pc2hfb3AKKwkgICAgJiYgIW9hcC0+b3BfdHlwZQorCSAgICAmJiAoaWR4IDwgMCB8fCAhKG52X2NtZHNbaWR4XS5jbWRfZmxhZ3MgJiBOVl9LRUVQUkVHKSkpCisgICAgeworCWNsZWFyb3Aob2FwKTsKKyNpZmRlZiBGRUFUX0VWQUwKKwlzZXRfcmVnX3ZhcignIicpOworI2VuZGlmCisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiBhbiBvcGVyYXRpb24gaXMgcGVuZGluZywgaGFuZGxlIGl0Li4uCisgICAgICovCisgICAgZG9fcGVuZGluZ19vcGVyYXRvcigmY2EsIG9sZF9jb2wsIEZBTFNFKTsKKworICAgIC8qCisgICAgICogV2FpdCBmb3IgYSBtb21lbnQgd2hlbiBhIG1lc3NhZ2UgaXMgZGlzcGxheWVkIHRoYXQgd2lsbCBiZSBvdmVyd3JpdHRlbgorICAgICAqIGJ5IHRoZSBtb2RlIG1lc3NhZ2UuCisgICAgICogSW4gVmlzdWFsIG1vZGUgYW5kIHdpdGggIl5PIiBpbiBJbnNlcnQgbW9kZSwgYSBzaG9ydCBtZXNzYWdlIHdpbGwgYmUKKyAgICAgKiBvdmVyd3JpdHRlbiBieSB0aGUgbW9kZSBtZXNzYWdlLiAgV2FpdCBhIGJpdCwgdW50aWwgYSBrZXkgaXMgaGl0LgorICAgICAqIEluIFZpc3VhbCBtb2RlLCBpdCdzIG1vcmUgaW1wb3J0YW50IHRvIGtlZXAgdGhlIFZpc3VhbCBhcmVhIHVwZGF0ZWQKKyAgICAgKiB0aGFuIGtlZXBpbmcgYSBtZXNzYWdlIChlLmcuIGZyb20gYSAvcGF0IHNlYXJjaCkuCisgICAgICogT25seSBkbyB0aGlzIGlmIHRoZSBjb21tYW5kIHdhcyB0eXBlZCwgbm90IGZyb20gYSBtYXBwaW5nLgorICAgICAqIERvbid0IHdhaXQgd2hlbiBlbXNnX3NpbGVudCBpcyBub24temVyby4KKyAgICAgKiBBbHNvIHdhaXQgYSBiaXQgYWZ0ZXIgYW4gZXJyb3IgbWVzc2FnZSwgZS5nLiBmb3IgIl5POiIuCisgICAgICogRG9uJ3QgcmVkcmF3IHRoZSBzY3JlZW4sIGl0IHdvdWxkIHJlbW92ZSB0aGUgbWVzc2FnZS4KKyAgICAgKi8KKyAgICBpZiAoICAgICAgICgocF9zbWQKKwkJICAgICYmIChyZXN0YXJ0X2VkaXQgIT0gMAorI2lmZGVmIEZFQVRfVklTVUFMCisJCQl8fCAoVklzdWFsX2FjdGl2ZQorCQkJICAgICYmIG9sZF9wb3MubG51bSA9PSBjdXJ3aW4tPndfY3Vyc29yLmxudW0KKwkJCSAgICAmJiBvbGRfcG9zLmNvbCA9PSBjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKyNlbmRpZgorCQkgICAgICAgKQorCQkgICAgJiYgKGNsZWFyX2NtZGxpbmUKKwkJCXx8IHJlZHJhd19jbWRsaW5lKQorCQkgICAgJiYgKG1zZ19kaWRvdXQgfHwgKG1zZ19kaWRhbnkgJiYgbXNnX3Njcm9sbCkpCisJCSAgICAmJiAhbXNnX25vd2FpdAorCQkgICAgJiYgS2V5VHlwZWQpCisJCXx8IChyZXN0YXJ0X2VkaXQgIT0gMAorI2lmZGVmIEZFQVRfVklTVUFMCisJCSAgICAmJiAhVklzdWFsX2FjdGl2ZQorI2VuZGlmCisJCSAgICAmJiAobXNnX3Njcm9sbAorCQkJfHwgZW1zZ19vbl9kaXNwbGF5KSkpCisJICAgICYmIG9hcC0+cmVnbmFtZSA9PSAwCisJICAgICYmICEoY2EucmV0dmFsICYgQ0FfQ09NTUFORF9CVVNZKQorCSAgICAmJiBzdHVmZl9lbXB0eSgpCisJICAgICYmIHR5cGVidWZfdHlwZWQoKQorCSAgICAmJiBlbXNnX3NpbGVudCA9PSAwCisJICAgICYmICFkaWRfd2FpdF9yZXR1cm4KKwkgICAgJiYgb2FwLT5vcF90eXBlID09IE9QX05PUCkKKyAgICB7CisJaW50CXNhdmVfU3RhdGUgPSBTdGF0ZTsKKworCS8qIERyYXcgdGhlIGN1cnNvciB3aXRoIHRoZSByaWdodCBzaGFwZSBoZXJlICovCisJaWYgKHJlc3RhcnRfZWRpdCAhPSAwKQorCSAgICBTdGF0ZSA9IElOU0VSVDsKKworCS8qIElmIG5lZWQgdG8gcmVkcmF3LCBhbmQgdGhlcmUgaXMgYSAia2VlcF9tc2ciLCByZWRyYXcgYmVmb3JlIHRoZQorCSAqIGRlbGF5ICovCisJaWYgKG11c3RfcmVkcmF3ICYmIGtlZXBfbXNnICE9IE5VTEwgJiYgIWVtc2dfb25fZGlzcGxheSkKKwl7CisJICAgIGNoYXJfdQkqa21zZzsKKworCSAgICBrbXNnID0ga2VlcF9tc2c7CisJICAgIGtlZXBfbXNnID0gTlVMTDsKKwkgICAgLyogc2hvd21vZGUoKSB3aWxsIGNsZWFyIGtlZXBfbXNnLCBidXQgd2Ugd2FudCB0byB1c2UgaXQgYW55d2F5ICovCisJICAgIHVwZGF0ZV9zY3JlZW4oMCk7CisJICAgIC8qIG5vdyByZXNldCBpdCwgb3RoZXJ3aXNlIGl0J3MgcHV0IGluIHRoZSBoaXN0b3J5IGFnYWluICovCisJICAgIGtlZXBfbXNnID0ga21zZzsKKwkgICAgbXNnX2F0dHIoa21zZywga2VlcF9tc2dfYXR0cik7CisJICAgIHZpbV9mcmVlKGttc2cpOworCX0KKwlzZXRjdXJzb3IoKTsKKwljdXJzb3Jfb24oKTsKKwlvdXRfZmx1c2goKTsKKwlpZiAobXNnX3Njcm9sbCB8fCBlbXNnX29uX2Rpc3BsYXkpCisJICAgIHVpX2RlbGF5KDEwMDBMLCBUUlVFKTsJLyogd2FpdCBhdCBsZWFzdCBvbmUgc2Vjb25kICovCisJdWlfZGVsYXkoMzAwMEwsIEZBTFNFKTsJCS8qIHdhaXQgdXAgdG8gdGhyZWUgc2Vjb25kcyAqLworCVN0YXRlID0gc2F2ZV9TdGF0ZTsKKworCW1zZ19zY3JvbGwgPSBGQUxTRTsKKwllbXNnX29uX2Rpc3BsYXkgPSBGQUxTRTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbmlzaCB1cCBhZnRlciBleGVjdXRpbmcgYSBOb3JtYWwgbW9kZSBjb21tYW5kLgorICAgICAqLworbm9ybWFsX2VuZDoKKworICAgIG1zZ19ub3dhaXQgPSBGQUxTRTsKKworICAgIC8qIFJlc2V0IGZpbmlzaF9vcCwgaW4gY2FzZSBpdCB3YXMgc2V0ICovCisjaWZkZWYgQ1VSU09SX1NIQVBFCisgICAgYyA9IGZpbmlzaF9vcDsKKyNlbmRpZgorICAgIGZpbmlzaF9vcCA9IEZBTFNFOworI2lmZGVmIENVUlNPUl9TSEFQRQorICAgIC8qIFJlZHJhdyB0aGUgY3Vyc29yIHdpdGggYW5vdGhlciBzaGFwZSwgaWYgd2Ugd2VyZSBpbiBPcGVyYXRvci1wZW5kaW5nCisgICAgICogbW9kZSBvciBkaWQgYSByZXBsYWNlIGNvbW1hbmQuICovCisgICAgaWYgKGMgfHwgY2EuY21kY2hhciA9PSAncicpCisgICAgeworCXVpX2N1cnNvcl9zaGFwZSgpOwkJLyogbWF5IHNob3cgZGlmZmVyZW50IGN1cnNvciBzaGFwZSAqLworIyBpZmRlZiBGRUFUX01PVVNFU0hBUEUKKwl1cGRhdGVfbW91c2VzaGFwZSgtMSk7CisjIGVuZGlmCisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworICAgIGlmIChvYXAtPm9wX3R5cGUgPT0gT1BfTk9QICYmIG9hcC0+cmVnbmFtZSA9PSAwKQorCWNsZWFyX3Nob3djbWQoKTsKKyNlbmRpZgorCisgICAgY2hlY2twY21hcmsoKTsJCS8qIGNoZWNrIGlmIHdlIG1vdmVkIHNpbmNlIHNldHRpbmcgcGNtYXJrICovCisgICAgdmltX2ZyZWUoY2Euc2VhcmNoYnVmKTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoaGFzX21ieXRlKQorCW1iX2FkanVzdF9jdXJzb3IoKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisgICAgaWYgKGN1cndpbi0+d19wX3NjYiAmJiB0b3BsZXZlbCkKKyAgICB7CisJdmFsaWRhdGVfY3Vyc29yKCk7CS8qIG1heSBuZWVkIHRvIHVwZGF0ZSB3X2xlZnRjb2wgKi8KKwlkb19jaGVja19zY3JvbGxiaW5kKFRSVUUpOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBNYXkgcmVzdGFydCBlZGl0KCksIGlmIHdlIGdvdCBoZXJlIHdpdGggQ1RSTC1PIGluIEluc2VydCBtb2RlIChidXQgbm90CisgICAgICogaWYgc3RpbGwgaW5zaWRlIGEgbWFwcGluZyB0aGF0IHN0YXJ0ZWQgaW4gVmlzdWFsIG1vZGUpLgorICAgICAqIE1heSBzd2l0Y2ggZnJvbSBWaXN1YWwgdG8gU2VsZWN0IG1vZGUgYWZ0ZXIgQ1RSTC1PIGNvbW1hbmQuCisgICAgICovCisgICAgaWYgKCAgICAgICBvYXAtPm9wX3R5cGUgPT0gT1BfTk9QCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkgICAgJiYgKChyZXN0YXJ0X2VkaXQgIT0gMCAmJiAhVklzdWFsX2FjdGl2ZSAmJiBvbGRfbWFwcGVkX2xlbiA9PSAwKQorCQl8fCByZXN0YXJ0X1ZJc3VhbF9zZWxlY3QgPT0gMSkKKyNlbmRpZgorCSAgICAmJiAhKGNhLnJldHZhbCAmIENBX0NPTU1BTkRfQlVTWSkKKwkgICAgJiYgc3R1ZmZfZW1wdHkoKQorCSAgICAmJiBvYXAtPnJlZ25hbWUgPT0gMCkKKyAgICB7CisjaWZkZWYgRkVBVF9WSVNVQUwKKwlpZiAocmVzdGFydF9WSXN1YWxfc2VsZWN0ID09IDEpCisJeworCSAgICBWSXN1YWxfc2VsZWN0ID0gVFJVRTsKKwkgICAgc2hvd21vZGUoKTsKKwkgICAgcmVzdGFydF9WSXN1YWxfc2VsZWN0ID0gMDsKKwl9CisjZW5kaWYKKwlpZiAocmVzdGFydF9lZGl0ICE9IDAKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkmJiAhVklzdWFsX2FjdGl2ZQorI2VuZGlmCisJCSYmIG9sZF9tYXBwZWRfbGVuID09IDApCisJICAgICh2b2lkKWVkaXQocmVzdGFydF9lZGl0LCBGQUxTRSwgMUwpOworICAgIH0KKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKHJlc3RhcnRfVklzdWFsX3NlbGVjdCA9PSAyKQorCXJlc3RhcnRfVklzdWFsX3NlbGVjdCA9IDE7CisjZW5kaWYKKworICAgIC8qIFNhdmUgY291bnQgYmVmb3JlIGFuIG9wZXJhdG9yIGZvciBuZXh0IHRpbWUuICovCisgICAgb3Bjb3VudCA9IGNhLm9wY291bnQ7Cit9CisKKy8qCisgKiBIYW5kbGUgYW4gb3BlcmF0b3IgYWZ0ZXIgdmlzdWFsIG1vZGUgb3Igd2hlbiB0aGUgbW92ZW1lbnQgaXMgZmluaXNoZWQKKyAqLworICAgIHZvaWQKK2RvX3BlbmRpbmdfb3BlcmF0b3IoY2FwLCBvbGRfY29sLCBndWlfeWFuaykKKyAgICBjbWRhcmdfVAkqY2FwOworICAgIGludAkJb2xkX2NvbDsKKyAgICBpbnQJCWd1aV95YW5rOworeworICAgIG9wYXJnX1QJKm9hcCA9IGNhcC0+b2FwOworICAgIHBvc19UCW9sZF9jdXJzb3I7CisgICAgaW50CQllbXB0eV9yZWdpb25fZXJyb3I7CisgICAgaW50CQlyZXN0YXJ0X2VkaXRfc2F2ZTsKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgLyogVGhlIHZpc3VhbCBhcmVhIGlzIHJlbWVtYmVyZWQgZm9yIHJlZG8gKi8KKyAgICBzdGF0aWMgaW50CSAgICByZWRvX1ZJc3VhbF9tb2RlID0gTlVMOyAvKiAndicsICdWJywgb3IgQ3RybC1WICovCisgICAgc3RhdGljIGxpbmVucl9UIHJlZG9fVklzdWFsX2xpbmVfY291bnQ7IC8qIG51bWJlciBvZiBsaW5lcyAqLworICAgIHN0YXRpYyBjb2xucl9UICByZWRvX1ZJc3VhbF9jb2w7CSAgICAvKiBudW1iZXIgb2YgY29scyBvciBlbmQgY29sdW1uICovCisgICAgc3RhdGljIGxvbmcJICAgIHJlZG9fVklzdWFsX2NvdW50OwkgICAgLyogY291bnQgZm9yIFZpc3VhbCBvcGVyYXRvciAqLworIyBpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgaW50CQkgICAgaW5jbHVkZV9saW5lX2JyZWFrID0gRkFMU0U7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9DTElQQk9BUkQpCisgICAgLyoKKyAgICAgKiBZYW5rIHRoZSB2aXN1YWwgYXJlYSBpbnRvIHRoZSBHVUkgc2VsZWN0aW9uIHJlZ2lzdGVyIGJlZm9yZSB3ZSBvcGVyYXRlCisgICAgICogb24gaXQgYW5kIGxvc2UgaXQgZm9yZXZlci4KKyAgICAgKiBEb24ndCBkbyBpdCBpZiBhIHNwZWNpZmljIHJlZ2lzdGVyIHdhcyBzcGVjaWZpZWQsIHNvIHRoYXQgIiJ4IipQIHdvcmtzLgorICAgICAqIFRoaXMgY291bGQgY2FsbCBkb19wZW5kaW5nX29wZXJhdG9yKCkgcmVjdXJzaXZlbHksIGJ1dCB0aGF0J3MgT0sKKyAgICAgKiBiZWNhdXNlIGd1aV95YW5rIHdpbGwgYmUgVFJVRSBmb3IgdGhlIG5lc3RlZCBjYWxsLgorICAgICAqLworICAgIGlmIChjbGlwX3N0YXIuYXZhaWxhYmxlCisJICAgICYmIG9hcC0+b3BfdHlwZSAhPSBPUF9OT1AKKwkgICAgJiYgIWd1aV95YW5rCisjIGlmZGVmIEZFQVRfVklTVUFMCisJICAgICYmIFZJc3VhbF9hY3RpdmUKKwkgICAgJiYgIXJlZG9fVklzdWFsX2J1c3kKKyMgZW5kaWYKKwkgICAgJiYgb2FwLT5yZWduYW1lID09IDApCisJY2xpcF9hdXRvX3NlbGVjdCgpOworI2VuZGlmCisgICAgb2xkX2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7CisKKyAgICAvKgorICAgICAqIElmIGFuIG9wZXJhdGlvbiBpcyBwZW5kaW5nLCBoYW5kbGUgaXQuLi4KKyAgICAgKi8KKyAgICBpZiAoKGZpbmlzaF9vcAorI2lmZGVmIEZFQVRfVklTVUFMCisJCXx8IFZJc3VhbF9hY3RpdmUKKyNlbmRpZgorCQkpICYmIG9hcC0+b3BfdHlwZSAhPSBPUF9OT1ApCisgICAgeworI2lmZGVmIEZFQVRfVklTVUFMCisJb2FwLT5pc19WSXN1YWwgPSBWSXN1YWxfYWN0aXZlOworCWlmIChvYXAtPm1vdGlvbl9mb3JjZSA9PSAnVicpCisJICAgIG9hcC0+bW90aW9uX3R5cGUgPSBNTElORTsKKwllbHNlIGlmIChvYXAtPm1vdGlvbl9mb3JjZSA9PSAndicpCisJeworCSAgICAvKiBJZiB0aGUgbW90aW9uIHdhcyBsaW5ld2lzZSwgImluY2x1c2l2ZSIgd2lsbCBub3QgaGF2ZSBiZWVuIHNldC4KKwkgICAgICogVXNlICJleGNsdXNpdmUiIHRvIGJlIGNvbnNpc3RlbnQuICBNYWtlcyAiZHZqIiB3b3JrIG5pY2UuICovCisJICAgIGlmIChvYXAtPm1vdGlvbl90eXBlID09IE1MSU5FKQorCQlvYXAtPmluY2x1c2l2ZSA9IEZBTFNFOworCSAgICAvKiBJZiB0aGUgbW90aW9uIGFscmVhZHkgd2FzIGNoYXJhY3Rlcndpc2UsIHRvZ2dsZSAiaW5jbHVzaXZlIiAqLworCSAgICBlbHNlIGlmIChvYXAtPm1vdGlvbl90eXBlID09IE1DSEFSKQorCQlvYXAtPmluY2x1c2l2ZSA9ICFvYXAtPmluY2x1c2l2ZTsKKwkgICAgb2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworCX0KKwllbHNlIGlmIChvYXAtPm1vdGlvbl9mb3JjZSA9PSBDdHJsX1YpCisJeworCSAgICAvKiBDaGFuZ2UgbGluZS0gb3IgY2hhcmFjdGVyd2lzZSBtb3Rpb24gaW50byBWaXN1YWwgYmxvY2sgbW9kZS4gKi8KKwkgICAgVklzdWFsX2FjdGl2ZSA9IFRSVUU7CisJICAgIFZJc3VhbCA9IG9hcC0+c3RhcnQ7CisJICAgIFZJc3VhbF9tb2RlID0gQ3RybF9WOworCSAgICBWSXN1YWxfc2VsZWN0ID0gRkFMU0U7CisJICAgIFZJc3VhbF9yZXNlbGVjdCA9IEZBTFNFOworCX0KKyNlbmRpZgorCisJLyogb25seSByZWRvIHlhbmsgd2hlbiAneScgZmxhZyBpcyBpbiAnY3BvcHRpb25zJyAqLworCS8qIG5ldmVyIHJlZG8gInpmIiAoZGVmaW5lIGZvbGQpICovCisJaWYgKCh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fWUFOSykgIT0gTlVMTCB8fCBvYXAtPm9wX3R5cGUgIT0gT1BfWUFOSykKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkmJiAoIVZJc3VhbF9hY3RpdmUgfHwgb2FwLT5tb3Rpb25fZm9yY2UpCisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkJJiYgb2FwLT5vcF90eXBlICE9IE9QX0ZPTEQKKwkJJiYgb2FwLT5vcF90eXBlICE9IE9QX0ZPTERPUEVOCisJCSYmIG9hcC0+b3BfdHlwZSAhPSBPUF9GT0xET1BFTlJFQworCQkmJiBvYXAtPm9wX3R5cGUgIT0gT1BfRk9MRENMT1NFCisJCSYmIG9hcC0+b3BfdHlwZSAhPSBPUF9GT0xEQ0xPU0VSRUMKKwkJJiYgb2FwLT5vcF90eXBlICE9IE9QX0ZPTERERUwKKwkJJiYgb2FwLT5vcF90eXBlICE9IE9QX0ZPTERERUxSRUMKKyNlbmRpZgorCQkpCisJeworCSAgICBwcmVwX3JlZG8ob2FwLT5yZWduYW1lLCBjYXAtPmNvdW50MCwKKwkJICAgIGdldF9vcF9jaGFyKG9hcC0+b3BfdHlwZSksIGdldF9leHRyYV9vcF9jaGFyKG9hcC0+b3BfdHlwZSksCisJCSAgICBvYXAtPm1vdGlvbl9mb3JjZSwgY2FwLT5jbWRjaGFyLCBjYXAtPm5jaGFyKTsKKwkgICAgaWYgKGNhcC0+Y21kY2hhciA9PSAnLycgfHwgY2FwLT5jbWRjaGFyID09ICc/JykgLyogd2FzIGEgc2VhcmNoICovCisJICAgIHsKKwkJLyoKKwkJICogSWYgJ2Nwb3B0aW9ucycgZG9lcyBub3QgY29udGFpbiAncicsIGluc2VydCB0aGUgc2VhcmNoCisJCSAqIHBhdHRlcm4gdG8gcmVhbGx5IHJlcGVhdCB0aGUgc2FtZSBjb21tYW5kLgorCQkgKi8KKwkJaWYgKHZpbV9zdHJjaHIocF9jcG8sIENQT19SRURPKSA9PSBOVUxMKQorCQkgICAgQXBwZW5kVG9SZWRvYnVmZkxpdChjYXAtPnNlYXJjaGJ1Zik7CisJCUFwcGVuZFRvUmVkb2J1ZmYoTkxfU1RSKTsKKwkgICAgfQorCSAgICBlbHNlIGlmIChjYXAtPmNtZGNoYXIgPT0gJzonKQorCSAgICB7CisJCS8qIGRvX2NtZGxpbmUoKSBoYXMgc3RvcmVkIHRoZSBmaXJzdCB0eXBlZCBsaW5lIGluCisJCSAqICJyZXBlYXRfY21kbGluZSIuICBXaGVuIHNldmVyYWwgbGluZXMgYXJlIHR5cGVkIHJlcGVhdGluZworCQkgKiB3b24ndCBiZSBwb3NzaWJsZS4gKi8KKwkJaWYgKHJlcGVhdF9jbWRsaW5lID09IE5VTEwpCisJCSAgICBSZXNldFJlZG9idWZmKCk7CisJCWVsc2UKKwkJeworCQkgICAgQXBwZW5kVG9SZWRvYnVmZkxpdChyZXBlYXRfY21kbGluZSk7CisJCSAgICBBcHBlbmRUb1JlZG9idWZmKE5MX1NUUik7CisJCSAgICB2aW1fZnJlZShyZXBlYXRfY21kbGluZSk7CisJCSAgICByZXBlYXRfY21kbGluZSA9IE5VTEw7CisJCX0KKwkgICAgfQorCX0KKworI2lmZGVmIEZFQVRfVklTVUFMCisJaWYgKHJlZG9fVklzdWFsX2J1c3kpCisJeworCSAgICBvYXAtPnN0YXJ0ID0gY3Vyd2luLT53X2N1cnNvcjsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtICs9IHJlZG9fVklzdWFsX2xpbmVfY291bnQgLSAxOworCSAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCWN1cndpbi0+d19jdXJzb3IubG51bSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCSAgICBWSXN1YWxfbW9kZSA9IHJlZG9fVklzdWFsX21vZGU7CisJICAgIGlmIChWSXN1YWxfbW9kZSA9PSAndicpCisJICAgIHsKKwkJaWYgKHJlZG9fVklzdWFsX2xpbmVfY291bnQgPD0gMSkKKwkJICAgIGN1cndpbi0+d19jdXJzb3IuY29sICs9IHJlZG9fVklzdWFsX2NvbCAtIDE7CisJCWVsc2UKKwkJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gcmVkb19WSXN1YWxfY29sOworCSAgICB9CisJICAgIGlmIChyZWRvX1ZJc3VhbF9jb2wgPT0gTUFYQ09MKQorCSAgICB7CisJCWN1cndpbi0+d19jdXJzd2FudCA9IE1BWENPTDsKKwkJY29sYWR2YW5jZSgoY29sbnJfVClNQVhDT0wpOworCSAgICB9CisJICAgIGNhcC0+Y291bnQwID0gcmVkb19WSXN1YWxfY291bnQ7CisJICAgIGlmIChyZWRvX1ZJc3VhbF9jb3VudCAhPSAwKQorCQljYXAtPmNvdW50MSA9IHJlZG9fVklzdWFsX2NvdW50OworCSAgICBlbHNlCisJCWNhcC0+Y291bnQxID0gMTsKKwl9CisJZWxzZSBpZiAoVklzdWFsX2FjdGl2ZSkKKwl7CisJICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgVklzdWFsIGFyZWEgZm9yICc8IGFuZCAnPiBtYXJrcywgYW5kICJndiIgKi8KKwkgICAgY3VyYnVmLT5iX3Zpc3VhbF9zdGFydCA9IFZJc3VhbDsKKwkgICAgY3VyYnVmLT5iX3Zpc3VhbF9lbmQgPSBjdXJ3aW4tPndfY3Vyc29yOworCSAgICBjdXJidWYtPmJfdmlzdWFsX21vZGUgPSBWSXN1YWxfbW9kZTsKKyMgaWZkZWYgRkVBVF9FVkFMCisJICAgIGN1cmJ1Zi0+Yl92aXN1YWxfbW9kZV9ldmFsID0gVklzdWFsX21vZGU7CisjIGVuZGlmCisJICAgIGN1cmJ1Zi0+Yl92aXN1YWxfY3Vyc3dhbnQgPSBjdXJ3aW4tPndfY3Vyc3dhbnQ7CisKKwkgICAgLyogSW4gU2VsZWN0IG1vZGUsIGEgbGluZXdpc2Ugc2VsZWN0aW9uIGlzIG9wZXJhdGVkIHVwb24gbGlrZSBhCisJICAgICAqIGNoYXJhY3Rlcndpc2Ugc2VsZWN0aW9uLiAqLworCSAgICBpZiAoVklzdWFsX3NlbGVjdCAmJiBWSXN1YWxfbW9kZSA9PSAnVicpCisJICAgIHsKKwkJaWYgKGx0KFZJc3VhbCwgY3Vyd2luLT53X2N1cnNvcikpCisJCXsKKwkJICAgIFZJc3VhbC5jb2wgPSAwOworCQkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPQorCQkJICAgICAgIChjb2xucl9UKVNUUkxFTihtbF9nZXQoY3Vyd2luLT53X2N1cnNvci5sbnVtKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisJCSAgICBWSXN1YWwuY29sID0gKGNvbG5yX1QpU1RSTEVOKG1sX2dldChWSXN1YWwubG51bSkpOworCQl9CisJCVZJc3VhbF9tb2RlID0gJ3YnOworCSAgICB9CisJICAgIC8qIElmICdzZWxlY3Rpb24nIGlzICJleGNsdXNpdmUiLCBiYWNrdXAgb25lIGNoYXJhY3RlciBmb3IKKwkgICAgICogY2hhcndpc2Ugc2VsZWN0aW9ucy4gKi8KKwkgICAgZWxzZSBpZiAoVklzdWFsX21vZGUgPT0gJ3YnKQorCSAgICB7CisjIGlmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJaW5jbHVkZV9saW5lX2JyZWFrID0KKyMgZW5kaWYKKwkJICAgIHVuYWRqdXN0X2Zvcl9zZWwoKTsKKwkgICAgfQorCisJICAgIG9hcC0+c3RhcnQgPSBWSXN1YWw7CisJICAgIGlmIChWSXN1YWxfbW9kZSA9PSAnVicpCisJCW9hcC0+c3RhcnQuY29sID0gMDsKKwl9CisjZW5kaWYgLyogRkVBVF9WSVNVQUwgKi8KKworCS8qCisJICogU2V0IG9hcC0+c3RhcnQgdG8gdGhlIGZpcnN0IHBvc2l0aW9uIG9mIHRoZSBvcGVyYXRlZCB0ZXh0LCBvYXAtPmVuZAorCSAqIHRvIHRoZSBlbmQgb2YgdGhlIG9wZXJhdGVkIHRleHQuICB3X2N1cnNvciBpcyBlcXVhbCB0byBvYXAtPnN0YXJ0LgorCSAqLworCWlmIChsdChvYXAtPnN0YXJ0LCBjdXJ3aW4tPndfY3Vyc29yKSkKKwl7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIC8qIEluY2x1ZGUgZm9sZGVkIGxpbmVzIGNvbXBsZXRlbHkuICovCisJICAgIGlmICghVklzdWFsX2FjdGl2ZSkKKwkgICAgeworCQlpZiAoaGFzRm9sZGluZyhvYXAtPnN0YXJ0LmxudW0sICZvYXAtPnN0YXJ0LmxudW0sIE5VTEwpKQorCQkgICAgb2FwLT5zdGFydC5jb2wgPSAwOworCQlpZiAoaGFzRm9sZGluZyhjdXJ3aW4tPndfY3Vyc29yLmxudW0sIE5VTEwsCisJCQkJCQkgICAgICAmY3Vyd2luLT53X2N1cnNvci5sbnVtKSkKKwkJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gKGNvbG5yX1QpU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpOworCSAgICB9CisjZW5kaWYKKwkgICAgb2FwLT5lbmQgPSBjdXJ3aW4tPndfY3Vyc29yOworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gb2FwLT5zdGFydDsKKworCSAgICAvKiB3X3ZpcnRjb2wgbWF5IGhhdmUgYmVlbiB1cGRhdGVkOyBpZiB0aGUgY3Vyc29yIGdvZXMgYmFjayB0byBpdHMKKwkgICAgICogcHJldmlvdXMgcG9zaXRpb24gd192aXJ0Y29sIGJlY29tZXMgaW52YWxpZCBhbmQgaXNuJ3QgdXBkYXRlZAorCSAgICAgKiBhdXRvbWF0aWNhbGx5LiAqLworCSAgICBjdXJ3aW4tPndfdmFsaWQgJj0gflZBTElEX1ZJUlRDT0w7CisJfQorCWVsc2UKKwl7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIC8qIEluY2x1ZGUgZm9sZGVkIGxpbmVzIGNvbXBsZXRlbHkuICovCisJICAgIGlmICghVklzdWFsX2FjdGl2ZSAmJiBvYXAtPm1vdGlvbl90eXBlID09IE1MSU5FKQorCSAgICB7CisJCWlmIChoYXNGb2xkaW5nKGN1cndpbi0+d19jdXJzb3IubG51bSwgJmN1cndpbi0+d19jdXJzb3IubG51bSwKKwkJCQkJCQkJCU5VTEwpKQorCQkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOworCQlpZiAoaGFzRm9sZGluZyhvYXAtPnN0YXJ0LmxudW0sIE5VTEwsICZvYXAtPnN0YXJ0LmxudW0pKQorCQkgICAgb2FwLT5zdGFydC5jb2wgPSAoY29sbnJfVClTVFJMRU4obWxfZ2V0KG9hcC0+c3RhcnQubG51bSkpOworCSAgICB9CisjZW5kaWYKKwkgICAgb2FwLT5lbmQgPSBvYXAtPnN0YXJ0OworCSAgICBvYXAtPnN0YXJ0ID0gY3Vyd2luLT53X2N1cnNvcjsKKwl9CisKKwlvYXAtPmxpbmVfY291bnQgPSBvYXAtPmVuZC5sbnVtIC0gb2FwLT5zdGFydC5sbnVtICsgMTsKKworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkvKiBTZXQgInZpcnR1YWxfb3AiIGJlZm9yZSByZXNldHRpbmcgVklzdWFsX2FjdGl2ZS4gKi8KKwl2aXJ0dWFsX29wID0gdmlydHVhbF9hY3RpdmUoKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9WSVNVQUwKKwlpZiAoVklzdWFsX2FjdGl2ZSB8fCByZWRvX1ZJc3VhbF9idXN5KQorCXsKKwkgICAgaWYgKFZJc3VhbF9tb2RlID09IEN0cmxfVikJLyogYmxvY2sgbW9kZSAqLworCSAgICB7CisJCWNvbG5yX1QJICAgIHN0YXJ0LCBlbmQ7CisKKwkJb2FwLT5ibG9ja19tb2RlID0gVFJVRTsKKworCQlnZXR2dmNvbChjdXJ3aW4sICYob2FwLT5zdGFydCksCisJCQkJICAgICAgJm9hcC0+c3RhcnRfdmNvbCwgTlVMTCwgJm9hcC0+ZW5kX3Zjb2wpOworCQlpZiAoIXJlZG9fVklzdWFsX2J1c3kpCisJCXsKKwkJICAgIGdldHZ2Y29sKGN1cndpbiwgJihvYXAtPmVuZCksICZzdGFydCwgTlVMTCwgJmVuZCk7CisKKwkJICAgIGlmIChzdGFydCA8IG9hcC0+c3RhcnRfdmNvbCkKKwkJCW9hcC0+c3RhcnRfdmNvbCA9IHN0YXJ0OworCQkgICAgaWYgKGVuZCA+IG9hcC0+ZW5kX3Zjb2wpCisJCSAgICB7CisJCQlpZiAoKnBfc2VsID09ICdlJyAmJiBzdGFydCA+PSAxCisJCQkJCQkmJiBzdGFydCAtIDEgPj0gb2FwLT5lbmRfdmNvbCkKKwkJCSAgICBvYXAtPmVuZF92Y29sID0gc3RhcnQgLSAxOworCQkJZWxzZQorCQkJICAgIG9hcC0+ZW5kX3Zjb2wgPSBlbmQ7CisJCSAgICB9CisJCX0KKworCQkvKiBpZiAnJCcgd2FzIHVzZWQsIGdldCBvYXAtPmVuZF92Y29sIGZyb20gbG9uZ2VzdCBsaW5lICovCisJCWlmIChjdXJ3aW4tPndfY3Vyc3dhbnQgPT0gTUFYQ09MKQorCQl7CisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IE1BWENPTDsKKwkJICAgIG9hcC0+ZW5kX3Zjb2wgPSAwOworCQkgICAgZm9yIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBvYXAtPnN0YXJ0LmxudW07CisJCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtIDw9IG9hcC0+ZW5kLmxudW07CisJCQkJCQkgICAgICArK2N1cndpbi0+d19jdXJzb3IubG51bSkKKwkJICAgIHsKKwkJCWdldHZ2Y29sKGN1cndpbiwgJmN1cndpbi0+d19jdXJzb3IsIE5VTEwsIE5VTEwsICZlbmQpOworCQkJaWYgKGVuZCA+IG9hcC0+ZW5kX3Zjb2wpCisJCQkgICAgb2FwLT5lbmRfdmNvbCA9IGVuZDsKKwkJICAgIH0KKwkJfQorCQllbHNlIGlmIChyZWRvX1ZJc3VhbF9idXN5KQorCQkgICAgb2FwLT5lbmRfdmNvbCA9IG9hcC0+c3RhcnRfdmNvbCArIHJlZG9fVklzdWFsX2NvbCAtIDE7CisJCS8qCisJCSAqIENvcnJlY3Qgb2FwLT5lbmQuY29sIGFuZCBvYXAtPnN0YXJ0LmNvbCB0byBiZSB0aGUKKwkJICogdXBwZXItbGVmdCBhbmQgbG93ZXItcmlnaHQgY29ybmVyIG9mIHRoZSBibG9jayBhcmVhLgorCQkgKgorCQkgKiAoQWN0dWFsbHksIHRoaXMgZG9lcyBjb252ZXJ0IGNvbHVtbiBwb3NpdGlvbnMgaW50byBjaGFyYWN0ZXIKKwkJICogcG9zaXRpb25zKQorCQkgKi8KKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gb2FwLT5lbmQubG51bTsKKwkJY29sYWR2YW5jZShvYXAtPmVuZF92Y29sKTsKKwkJb2FwLT5lbmQgPSBjdXJ3aW4tPndfY3Vyc29yOworCisJCWN1cndpbi0+d19jdXJzb3IgPSBvYXAtPnN0YXJ0OworCQljb2xhZHZhbmNlKG9hcC0+c3RhcnRfdmNvbCk7CisJCW9hcC0+c3RhcnQgPSBjdXJ3aW4tPndfY3Vyc29yOworCSAgICB9CisKKwkgICAgaWYgKCFyZWRvX1ZJc3VhbF9idXN5ICYmICFndWlfeWFuaykKKwkgICAgeworCQkvKgorCQkgKiBQcmVwYXJlIHRvIHJlc2VsZWN0IGFuZCByZWRvIFZpc3VhbDogdGhpcyBpcyBiYXNlZCBvbiB0aGUKKwkJICogc2l6ZSBvZiB0aGUgVmlzdWFsIHRleHQKKwkJICovCisJCXJlc2VsX1ZJc3VhbF9tb2RlID0gVklzdWFsX21vZGU7CisJCWlmIChjdXJ3aW4tPndfY3Vyc3dhbnQgPT0gTUFYQ09MKQorCQkgICAgcmVzZWxfVklzdWFsX2NvbCA9IE1BWENPTDsKKwkJZWxzZSBpZiAoVklzdWFsX21vZGUgPT0gQ3RybF9WKQorCQkgICAgcmVzZWxfVklzdWFsX2NvbCA9IG9hcC0+ZW5kX3Zjb2wgLSBvYXAtPnN0YXJ0X3Zjb2wgKyAxOworCQllbHNlIGlmIChvYXAtPmxpbmVfY291bnQgPiAxKQorCQkgICAgcmVzZWxfVklzdWFsX2NvbCA9IG9hcC0+ZW5kLmNvbDsKKwkJZWxzZQorCQkgICAgcmVzZWxfVklzdWFsX2NvbCA9IG9hcC0+ZW5kLmNvbCAtIG9hcC0+c3RhcnQuY29sICsgMTsKKwkJcmVzZWxfVklzdWFsX2xpbmVfY291bnQgPSBvYXAtPmxpbmVfY291bnQ7CisJICAgIH0KKworCSAgICAvKiBjYW4ndCByZWRvIHlhbmsgKHVubGVzcyAneScgaXMgaW4gJ2Nwb3B0aW9ucycpIGFuZCAiOiIgKi8KKwkgICAgaWYgKCh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fWUFOSykgIT0gTlVMTCB8fCBvYXAtPm9wX3R5cGUgIT0gT1BfWUFOSykKKwkJICAgICYmIG9hcC0+b3BfdHlwZSAhPSBPUF9DT0xPTgorI2lmZGVmIEZFQVRfRk9MRElORworCQkgICAgJiYgb2FwLT5vcF90eXBlICE9IE9QX0ZPTEQKKwkJICAgICYmIG9hcC0+b3BfdHlwZSAhPSBPUF9GT0xET1BFTgorCQkgICAgJiYgb2FwLT5vcF90eXBlICE9IE9QX0ZPTERPUEVOUkVDCisJCSAgICAmJiBvYXAtPm9wX3R5cGUgIT0gT1BfRk9MRENMT1NFCisJCSAgICAmJiBvYXAtPm9wX3R5cGUgIT0gT1BfRk9MRENMT1NFUkVDCisJCSAgICAmJiBvYXAtPm9wX3R5cGUgIT0gT1BfRk9MRERFTAorCQkgICAgJiYgb2FwLT5vcF90eXBlICE9IE9QX0ZPTERERUxSRUMKKyNlbmRpZgorCQkgICAgJiYgb2FwLT5tb3Rpb25fZm9yY2UgPT0gTlVMCisJCSAgICApCisJICAgIHsKKwkJLyogUHJlcGFyZSBmb3IgcmVkb2luZy4gIE9ubHkgdXNlIHRoZSBuY2hhciBmaWVsZCBmb3IgInIiLAorCQkgKiBvdGhlcndpc2UgaXQgbWlnaHQgYmUgdGhlIHNlY29uZCBjaGFyIG9mIHRoZSBvcGVyYXRvci4gKi8KKwkJcHJlcF9yZWRvKG9hcC0+cmVnbmFtZSwgMEwsIE5VTCwgJ3YnLAorCQkJCWdldF9vcF9jaGFyKG9hcC0+b3BfdHlwZSksCisJCQkJZ2V0X2V4dHJhX29wX2NoYXIob2FwLT5vcF90eXBlKSwKKwkJCQlvYXAtPm9wX3R5cGUgPT0gT1BfUkVQTEFDRSA/IGNhcC0+bmNoYXIgOiBOVUwpOworCQlpZiAoIXJlZG9fVklzdWFsX2J1c3kpCisJCXsKKwkJICAgIHJlZG9fVklzdWFsX21vZGUgPSByZXNlbF9WSXN1YWxfbW9kZTsKKwkJICAgIHJlZG9fVklzdWFsX2NvbCA9IHJlc2VsX1ZJc3VhbF9jb2w7CisJCSAgICByZWRvX1ZJc3VhbF9saW5lX2NvdW50ID0gcmVzZWxfVklzdWFsX2xpbmVfY291bnQ7CisJCSAgICByZWRvX1ZJc3VhbF9jb3VudCA9IGNhcC0+Y291bnQwOworCQl9CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBvYXAtPmluY2x1c2l2ZSBkZWZhdWx0cyB0byBUUlVFLgorCSAgICAgKiBJZiBvYXAtPmVuZCBpcyBvbiBhIE5VTCAoZW1wdHkgbGluZSkgb2FwLT5pbmNsdXNpdmUgYmVjb21lcworCSAgICAgKiBGQUxTRS4gIFRoaXMgbWFrZXMgImR9UCIgYW5kICJ2fWRQIiB3b3JrIHRoZSBzYW1lLgorCSAgICAgKi8KKwkgICAgaWYgKG9hcC0+bW90aW9uX2ZvcmNlID09IE5VTCB8fCBvYXAtPm1vdGlvbl90eXBlID09IE1MSU5FKQorCQlvYXAtPmluY2x1c2l2ZSA9IFRSVUU7CisJICAgIGlmIChWSXN1YWxfbW9kZSA9PSAnVicpCisJCW9hcC0+bW90aW9uX3R5cGUgPSBNTElORTsKKwkgICAgZWxzZQorCSAgICB7CisJCW9hcC0+bW90aW9uX3R5cGUgPSBNQ0hBUjsKKwkJaWYgKFZJc3VhbF9tb2RlICE9IEN0cmxfViAmJiAqbWxfZ2V0X3BvcygmKG9hcC0+ZW5kKSkgPT0gTlVMCisjIGlmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJCSYmIChpbmNsdWRlX2xpbmVfYnJlYWsgfHwgIXZpcnR1YWxfb3ApCisjIGVuZGlmCisJCQkpCisJCXsKKwkJICAgIG9hcC0+aW5jbHVzaXZlID0gRkFMU0U7CisJCSAgICAvKiBUcnkgdG8gaW5jbHVkZSB0aGUgbmV3bGluZSwgdW5sZXNzIGl0J3MgYW4gb3BlcmF0b3IKKwkJICAgICAqIHRoYXQgd29ya3Mgb24gbGluZXMgb25seSAqLworCQkgICAgaWYgKCpwX3NlbCAhPSAnbycKKwkJCSAgICAmJiAhb3Bfb25fbGluZXMob2FwLT5vcF90eXBlKQorCQkJICAgICYmIG9hcC0+ZW5kLmxudW0gPCBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkJICAgIHsKKwkJCSsrb2FwLT5lbmQubG51bTsKKwkJCW9hcC0+ZW5kLmNvbCA9IDA7CisjIGlmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJCW9hcC0+ZW5kLmNvbGFkZCA9IDA7CisjIGVuZGlmCisJCQkrK29hcC0+bGluZV9jb3VudDsKKwkJICAgIH0KKwkJfQorCSAgICB9CisKKwkgICAgcmVkb19WSXN1YWxfYnVzeSA9IEZBTFNFOworCSAgICAvKgorCSAgICAgKiBTd2l0Y2ggVmlzdWFsIG9mZiBub3csIHNvIHNjcmVlbiB1cGRhdGluZyBkb2VzCisJICAgICAqIG5vdCBzaG93IGludmVydGVkIHRleHQgd2hlbiB0aGUgc2NyZWVuIGlzIHJlZHJhd24uCisJICAgICAqIFdpdGggT1BfWUFOSyBhbmQgc29tZXRpbWVzIHdpdGggT1BfQ09MT04gYW5kIE9QX0ZJTFRFUiB0aGVyZSBpcworCSAgICAgKiBubyBzY3JlZW4gcmVkcmF3LCBzbyBpdCBpcyBkb25lIGhlcmUgdG8gcmVtb3ZlIHRoZSBpbnZlcnRlZAorCSAgICAgKiBwYXJ0LgorCSAgICAgKi8KKwkgICAgaWYgKCFndWlfeWFuaykKKwkgICAgeworCQlWSXN1YWxfYWN0aXZlID0gRkFMU0U7CisjIGlmZGVmIEZFQVRfTU9VU0UKKwkJc2V0bW91c2UoKTsKKwkJbW91c2VfZHJhZ2dpbmcgPSAwOworIyBlbmRpZgorCQlpZiAocF9zbWQpCisJCSAgICBjbGVhcl9jbWRsaW5lID0gVFJVRTsgICAvKiB1bnNob3cgdmlzdWFsIG1vZGUgbGF0ZXIgKi8KKyNpZmRlZiBGRUFUX0NNRExfSU5GTworCQllbHNlCisJCSAgICBjbGVhcl9zaG93Y21kKCk7CisjZW5kaWYKKwkJaWYgKChvYXAtPm9wX3R5cGUgPT0gT1BfWUFOSworCQkJICAgIHx8IG9hcC0+b3BfdHlwZSA9PSBPUF9DT0xPTgorCQkJICAgIHx8IG9hcC0+b3BfdHlwZSA9PSBPUF9GSUxURVIpCisJCQkmJiBvYXAtPm1vdGlvbl9mb3JjZSA9PSBOVUwpCisJCSAgICByZWRyYXdfY3VyYnVmX2xhdGVyKElOVkVSVEVEKTsKKwkgICAgfQorCX0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NQllURQorCS8qIEluY2x1ZGUgdGhlIHRyYWlsaW5nIGJ5dGUgb2YgYSBtdWx0aS1ieXRlIGNoYXIuICovCisJaWYgKGhhc19tYnl0ZSAmJiBvYXAtPmluY2x1c2l2ZSkKKwl7CisJICAgIGludAkJbDsKKworCSAgICBsID0gKCptYl9wdHIybGVuX2NoZWNrKShtbF9nZXRfcG9zKCZvYXAtPmVuZCkpOworCSAgICBpZiAobCA+IDEpCisJCW9hcC0+ZW5kLmNvbCArPSBsIC0gMTsKKwl9CisjZW5kaWYKKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKworCS8qCisJICogb2FwLT5lbXB0eSBpcyBzZXQgd2hlbiBzdGFydCBhbmQgZW5kIGFyZSB0aGUgc2FtZS4gIFRoZSBpbmNsdXNpdmUKKwkgKiBmbGFnIGFmZmVjdHMgdGhpcyB0b28sIHVubGVzcyB5YW5raW5nIGFuZCB0aGUgZW5kIGlzIG9uIGEgTlVMLgorCSAqLworCW9hcC0+ZW1wdHkgPSAob2FwLT5tb3Rpb25fdHlwZSA9PSBNQ0hBUgorCQkgICAgJiYgKCFvYXAtPmluY2x1c2l2ZQorCQkJfHwgKG9hcC0+b3BfdHlwZSA9PSBPUF9ZQU5LCisJCQkgICAgJiYgZ2NoYXJfcG9zKCZvYXAtPmVuZCkgPT0gTlVMKSkKKwkJICAgICYmIGVxdWFscG9zKG9hcC0+c3RhcnQsIG9hcC0+ZW5kKQorI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJICAgICYmICEodmlydHVhbF9vcCAmJiBvYXAtPnN0YXJ0LmNvbGFkZCAhPSBvYXAtPmVuZC5jb2xhZGQpCisjZW5kaWYKKwkJICAgICk7CisJLyoKKwkgKiBGb3IgZGVsZXRlLCBjaGFuZ2UgYW5kIHlhbmssIGl0J3MgYW4gZXJyb3IgdG8gb3BlcmF0ZSBvbiBhbgorCSAqIGVtcHR5IHJlZ2lvbiwgd2hlbiAnRScgaW5jbHVkZWQgaW4gJ2Nwb3B0aW9ucycgKFZpIGNvbXBhdGlibGUpLgorCSAqLworCWVtcHR5X3JlZ2lvbl9lcnJvciA9IChvYXAtPmVtcHR5CisJCQkJJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0VNUFRZUkVHSU9OKSAhPSBOVUxMKTsKKworI2lmZGVmIEZFQVRfVklTVUFMCisJLyogRm9yY2UgYSByZWRyYXcgd2hlbiBvcGVyYXRpbmcgb24gYW4gZW1wdHkgVmlzdWFsIHJlZ2lvbiwgd2hlbgorCSAqICdtb2RpZmlhYmxlIGlzIG9mZiBvciBjcmVhdGluZyBhIGZvbGQuICovCisJaWYgKG9hcC0+aXNfVklzdWFsICYmIChvYXAtPmVtcHR5IHx8ICFjdXJidWYtPmJfcF9tYQorIyBpZmRlZiBGRUFUX0ZPTERJTkcKKwkJICAgIHx8IG9hcC0+b3BfdHlwZSA9PSBPUF9GT0xECisjIGVuZGlmCisJCSAgICApKQorCSAgICByZWRyYXdfY3VyYnVmX2xhdGVyKElOVkVSVEVEKTsKKyNlbmRpZgorCisJLyoKKwkgKiBJZiB0aGUgZW5kIG9mIGFuIG9wZXJhdG9yIGlzIGluIGNvbHVtbiBvbmUgd2hpbGUgb2FwLT5tb3Rpb25fdHlwZQorCSAqIGlzIE1DSEFSIGFuZCBvYXAtPmluY2x1c2l2ZSBpcyBGQUxTRSwgd2UgcHV0IG9wX2VuZCBhZnRlciB0aGUgbGFzdAorCSAqIGNoYXJhY3RlciBpbiB0aGUgcHJldmlvdXMgbGluZS4gSWYgb3Bfc3RhcnQgaXMgb24gb3IgYmVmb3JlIHRoZQorCSAqIGZpcnN0IG5vbi1ibGFuayBpbiB0aGUgbGluZSwgdGhlIG9wZXJhdG9yIGJlY29tZXMgbGluZXdpc2UKKwkgKiAoc3RyYW5nZSwgYnV0IHRoYXQncyB0aGUgd2F5IHZpIGRvZXMgaXQpLgorCSAqLworCWlmICgJICAgb2FwLT5tb3Rpb25fdHlwZSA9PSBNQ0hBUgorCQkmJiBvYXAtPmluY2x1c2l2ZSA9PSBGQUxTRQorCQkmJiAhKGNhcC0+cmV0dmFsICYgQ0FfTk9fQURKX09QX0VORCkKKwkJJiYgb2FwLT5lbmQuY29sID09IDAKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkmJiAoIW9hcC0+aXNfVklzdWFsIHx8ICpwX3NlbCA9PSAnbycpCisjZW5kaWYKKwkJJiYgb2FwLT5saW5lX2NvdW50ID4gMSkKKwl7CisJICAgIG9hcC0+ZW5kX2FkanVzdGVkID0gVFJVRTsJICAgIC8qIHJlbWVtYmVyIHRoYXQgd2UgZGlkIHRoaXMgKi8KKwkgICAgLS1vYXAtPmxpbmVfY291bnQ7CisJICAgIC0tb2FwLT5lbmQubG51bTsKKwkgICAgaWYgKGluaW5kZW50KDApKQorCQlvYXAtPm1vdGlvbl90eXBlID0gTUxJTkU7CisJICAgIGVsc2UKKwkgICAgeworCQlvYXAtPmVuZC5jb2wgPSAoY29sbnJfVClTVFJMRU4obWxfZ2V0KG9hcC0+ZW5kLmxudW0pKTsKKwkJaWYgKG9hcC0+ZW5kLmNvbCkKKwkJeworCQkgICAgLS1vYXAtPmVuZC5jb2w7CisJCSAgICBvYXAtPmluY2x1c2l2ZSA9IFRSVUU7CisJCX0KKwkgICAgfQorCX0KKwllbHNlCisJICAgIG9hcC0+ZW5kX2FkanVzdGVkID0gRkFMU0U7CisKKwlzd2l0Y2ggKG9hcC0+b3BfdHlwZSkKKwl7CisJY2FzZSBPUF9MU0hJRlQ6CisJY2FzZSBPUF9SU0hJRlQ6CisJICAgIG9wX3NoaWZ0KG9hcCwgVFJVRSwKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkgICAgb2FwLT5pc19WSXN1YWwgPyAoaW50KWNhcC0+Y291bnQxIDoKKyNlbmRpZgorCQkgICAgMSk7CisJICAgIGF1dG9fZm9ybWF0KEZBTFNFLCBUUlVFKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIE9QX0pPSU5fTlM6CisJY2FzZSBPUF9KT0lOOgorCSAgICBpZiAob2FwLT5saW5lX2NvdW50IDwgMikKKwkJb2FwLT5saW5lX2NvdW50ID0gMjsKKwkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSArIG9hcC0+bGluZV9jb3VudCAtIDEgPgorCQkJCQkJICAgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCWJlZXBfZmx1c2goKTsKKwkgICAgZWxzZQorCSAgICB7CisJCWRvX2RvX2pvaW4ob2FwLT5saW5lX2NvdW50LCBvYXAtPm9wX3R5cGUgPT0gT1BfSk9JTik7CisJCWF1dG9fZm9ybWF0KEZBTFNFLCBUUlVFKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgT1BfREVMRVRFOgorI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIFZJc3VhbF9yZXNlbGVjdCA9IEZBTFNFOwkgICAgLyogZG9uJ3QgcmVzZWxlY3Qgbm93ICovCisjZW5kaWYKKwkgICAgaWYgKGVtcHR5X3JlZ2lvbl9lcnJvcikKKwkJdmltX2JlZXAoKTsKKwkgICAgZWxzZQorCSAgICB7CisJCSh2b2lkKW9wX2RlbGV0ZShvYXApOworCQlpZiAob2FwLT5tb3Rpb25fdHlwZSA9PSBNTElORSAmJiBoYXNfZm9ybWF0X29wdGlvbihGT19BVVRPKSkKKwkJICAgIHVfc2F2ZV9jdXJzb3IoKTsJICAgIC8qIGN1cnNvciBsaW5lIHdhc24ndCBzYXZlZCB5ZXQgKi8KKwkJYXV0b19mb3JtYXQoRkFMU0UsIFRSVUUpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBPUF9ZQU5LOgorCSAgICBpZiAoZW1wdHlfcmVnaW9uX2Vycm9yKQorCSAgICB7CisJCWlmICghZ3VpX3lhbmspCisJCSAgICB2aW1fYmVlcCgpOworCSAgICB9CisJICAgIGVsc2UKKwkJKHZvaWQpb3BfeWFuayhvYXAsIEZBTFNFLCAhZ3VpX3lhbmspOworCSAgICBjaGVja19jdXJzb3JfY29sKCk7CisJICAgIGJyZWFrOworCisJY2FzZSBPUF9DSEFOR0U6CisjaWZkZWYgRkVBVF9WSVNVQUwKKwkgICAgVklzdWFsX3Jlc2VsZWN0ID0gRkFMU0U7CSAgICAvKiBkb24ndCByZXNlbGVjdCBub3cgKi8KKyNlbmRpZgorCSAgICBpZiAoZW1wdHlfcmVnaW9uX2Vycm9yKQorCQl2aW1fYmVlcCgpOworCSAgICBlbHNlCisJICAgIHsKKwkJLyogVGhpcyBpcyBhIG5ldyBlZGl0IGNvbW1hbmQsIG5vdCBhIHJlc3RhcnQuICBOZWVkIHRvCisJCSAqIHJlbWVtYmVyIGl0IHRvIG1ha2UgJ2luc2VydG1vZGUnIHdvcmsgd2l0aCBtYXBwaW5ncyBmb3IKKwkJICogVmlzdWFsIG1vZGUuICBCdXQgZG8gdGhpcyBvbmx5IG9uY2UgYW5kIG5vdCB3aGVuIHR5cGVkIGFuZAorCQkgKiAnaW5zZXJ0bW9kZScgaXNuJ3Qgc2V0LiAqLworCQlpZiAocF9pbSB8fCAhS2V5VHlwZWQpCisJCSAgICByZXN0YXJ0X2VkaXRfc2F2ZSA9IHJlc3RhcnRfZWRpdDsKKwkJZWxzZQorCQkgICAgcmVzdGFydF9lZGl0X3NhdmUgPSAwOworCQlyZXN0YXJ0X2VkaXQgPSAwOworCQkvKiBSZXNldCBmaW5pc2hfb3Agbm93LCBkb24ndCB3YW50IGl0IHNldCBpbnNpZGUgZWRpdCgpLiAqLworCQlmaW5pc2hfb3AgPSBGQUxTRTsKKwkJaWYgKG9wX2NoYW5nZShvYXApKQkvKiB3aWxsIGNhbGwgZWRpdCgpICovCisJCSAgICBjYXAtPnJldHZhbCB8PSBDQV9DT01NQU5EX0JVU1k7CisJCWlmIChyZXN0YXJ0X2VkaXQgPT0gMCkKKwkJICAgIHJlc3RhcnRfZWRpdCA9IHJlc3RhcnRfZWRpdF9zYXZlOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBPUF9GSUxURVI6CisJICAgIGlmICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fRklMVEVSKSAhPSBOVUxMKQorCQlBcHBlbmRUb1JlZG9idWZmKChjaGFyX3UgKikiIVxyIik7ICAvKiB1c2UgYW55IGxhc3QgdXNlZCAhY21kICovCisJICAgIGVsc2UKKwkJYmFuZ3JlZG8gPSBUUlVFOyAgICAvKiBkb19iYW5nKCkgd2lsbCBwdXQgY21kIGluIHJlZG8gYnVmZmVyICovCisKKwljYXNlIE9QX0lOREVOVDoKKwljYXNlIE9QX0NPTE9OOgorCisjaWYgZGVmaW5lZChGRUFUX0xJU1ApIHx8IGRlZmluZWQoRkVBVF9DSU5ERU5UKQorCSAgICAvKgorCSAgICAgKiBJZiAnZXF1YWxwcmcnIGlzIGVtcHR5LCBkbyB0aGUgaW5kZW50aW5nIGludGVybmFsbHkuCisJICAgICAqLworCSAgICBpZiAob2FwLT5vcF90eXBlID09IE9QX0lOREVOVCAmJiAqZ2V0X2VxdWFscHJnKCkgPT0gTlVMKQorCSAgICB7CisjIGlmZGVmIEZFQVRfTElTUAorCQlpZiAoY3VyYnVmLT5iX3BfbGlzcCkKKwkJeworCQkgICAgb3BfcmVpbmRlbnQob2FwLCBnZXRfbGlzcF9pbmRlbnQpOworCQkgICAgYnJlYWs7CisJCX0KKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9DSU5ERU5UCisJCW9wX3JlaW5kZW50KG9hcCwKKyMgIGlmZGVmIEZFQVRfRVZBTAorCQkJKmN1cmJ1Zi0+Yl9wX2luZGUgIT0gTlVMID8gZ2V0X2V4cHJfaW5kZW50IDoKKyMgIGVuZGlmCisJCQkgICAgZ2V0X2NfaW5kZW50KTsKKwkJYnJlYWs7CisjIGVuZGlmCisJICAgIH0KKyNlbmRpZgorCisJICAgIG9wX2NvbG9uKG9hcCk7CisJICAgIGJyZWFrOworCisJY2FzZSBPUF9USUxERToKKwljYXNlIE9QX1VQUEVSOgorCWNhc2UgT1BfTE9XRVI6CisJY2FzZSBPUF9ST1QxMzoKKwkgICAgaWYgKGVtcHR5X3JlZ2lvbl9lcnJvcikKKwkJdmltX2JlZXAoKTsKKwkgICAgZWxzZQorCQlvcF90aWxkZShvYXApOworCSAgICBjaGVja19jdXJzb3JfY29sKCk7CisJICAgIGJyZWFrOworCisJY2FzZSBPUF9GT1JNQVQ6CisJICAgIGlmICgqcF9mcCAhPSBOVUwpCisJCW9wX2NvbG9uKG9hcCk7CQkvKiB1c2UgZXh0ZXJuYWwgY29tbWFuZCAqLworCSAgICBlbHNlCisJCW9wX2Zvcm1hdChvYXAsIEZBTFNFKTsJLyogdXNlIGludGVybmFsIGZ1bmN0aW9uICovCisJICAgIGJyZWFrOworCisJY2FzZSBPUF9GT1JNQVQyOgorCSAgICBvcF9mb3JtYXQob2FwLCBUUlVFKTsJLyogdXNlIGludGVybmFsIGZ1bmN0aW9uICovCisJICAgIGJyZWFrOworCisJY2FzZSBPUF9JTlNFUlQ6CisJY2FzZSBPUF9BUFBFTkQ6CisjaWZkZWYgRkVBVF9WSVNVQUwKKwkgICAgVklzdWFsX3Jlc2VsZWN0ID0gRkFMU0U7CS8qIGRvbid0IHJlc2VsZWN0IG5vdyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9WSVNVQUxFWFRSQQorCSAgICBpZiAoZW1wdHlfcmVnaW9uX2Vycm9yKQorCQl2aW1fYmVlcCgpOworCSAgICBlbHNlCisJICAgIHsKKwkJLyogVGhpcyBpcyBhIG5ldyBlZGl0IGNvbW1hbmQsIG5vdCBhIHJlc3RhcnQuICBOZWVkIHRvCisJCSAqIHJlbWVtYmVyIGl0IHRvIG1ha2UgJ2luc2VydG1vZGUnIHdvcmsgd2l0aCBtYXBwaW5ncyBmb3IKKwkJICogVmlzdWFsIG1vZGUuICBCdXQgZG8gdGhpcyBvbmx5IG9uY2UuICovCisJCXJlc3RhcnRfZWRpdF9zYXZlID0gcmVzdGFydF9lZGl0OworCQlyZXN0YXJ0X2VkaXQgPSAwOworCisJCW9wX2luc2VydChvYXAsIGNhcC0+Y291bnQxKTsKKworCQkvKiBUT0RPOiB3aGVuIGluc2VydGluZyBpbiBzZXZlcmFsIGxpbmVzLCBzaG91bGQgZm9ybWF0IGFsbAorCQkgKiB0aGUgbGluZXMuICovCisJCWF1dG9fZm9ybWF0KEZBTFNFLCBUUlVFKTsKKworCQlpZiAocmVzdGFydF9lZGl0ID09IDApCisJCSAgICByZXN0YXJ0X2VkaXQgPSByZXN0YXJ0X2VkaXRfc2F2ZTsKKwkgICAgfQorI2Vsc2UKKwkgICAgdmltX2JlZXAoKTsKKyNlbmRpZgorCSAgICBicmVhazsKKworCWNhc2UgT1BfUkVQTEFDRToKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCSAgICBWSXN1YWxfcmVzZWxlY3QgPSBGQUxTRTsJLyogZG9uJ3QgcmVzZWxlY3Qgbm93ICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJU1VBTEVYVFJBCisJICAgIGlmIChlbXB0eV9yZWdpb25fZXJyb3IpCisjZW5kaWYKKwkJdmltX2JlZXAoKTsKKyNpZmRlZiBGRUFUX1ZJU1VBTEVYVFJBCisJICAgIGVsc2UKKwkJb3BfcmVwbGFjZShvYXAsIGNhcC0+bmNoYXIpOworI2VuZGlmCisJICAgIGJyZWFrOworCisjaWZkZWYgRkVBVF9GT0xESU5HCisJY2FzZSBPUF9GT0xEOgorCSAgICBWSXN1YWxfcmVzZWxlY3QgPSBGQUxTRTsJLyogZG9uJ3QgcmVzZWxlY3Qgbm93ICovCisJICAgIGZvbGRDcmVhdGUob2FwLT5zdGFydC5sbnVtLCBvYXAtPmVuZC5sbnVtKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIE9QX0ZPTERPUEVOOgorCWNhc2UgT1BfRk9MRE9QRU5SRUM6CisJY2FzZSBPUF9GT0xEQ0xPU0U6CisJY2FzZSBPUF9GT0xEQ0xPU0VSRUM6CisJICAgIFZJc3VhbF9yZXNlbGVjdCA9IEZBTFNFOwkvKiBkb24ndCByZXNlbGVjdCBub3cgKi8KKwkgICAgb3BGb2xkUmFuZ2Uob2FwLT5zdGFydC5sbnVtLCBvYXAtPmVuZC5sbnVtLAorCQkgICAgb2FwLT5vcF90eXBlID09IE9QX0ZPTERPUEVOCisJCQkJCSAgICB8fCBvYXAtPm9wX3R5cGUgPT0gT1BfRk9MRE9QRU5SRUMsCisJCSAgICBvYXAtPm9wX3R5cGUgPT0gT1BfRk9MRE9QRU5SRUMKKwkJCQkJICB8fCBvYXAtPm9wX3R5cGUgPT0gT1BfRk9MRENMT1NFUkVDLAorCQkJCQkgIG9hcC0+aXNfVklzdWFsKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIE9QX0ZPTERERUw6CisJY2FzZSBPUF9GT0xEREVMUkVDOgorCSAgICBWSXN1YWxfcmVzZWxlY3QgPSBGQUxTRTsJLyogZG9uJ3QgcmVzZWxlY3Qgbm93ICovCisJICAgIGRlbGV0ZUZvbGQob2FwLT5zdGFydC5sbnVtLCBvYXAtPmVuZC5sbnVtLAorCQkJICAgICAgIG9hcC0+b3BfdHlwZSA9PSBPUF9GT0xEREVMUkVDLCBvYXAtPmlzX1ZJc3VhbCk7CisJICAgIGJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkgICAgY2xlYXJvcGJlZXAob2FwKTsKKwl9CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCXZpcnR1YWxfb3AgPSBNQVlCRTsKKyNlbmRpZgorCWlmICghZ3VpX3lhbmspCisJeworCSAgICAvKgorCSAgICAgKiBpZiAnc29sJyBub3Qgc2V0LCBnbyBiYWNrIHRvIG9sZCBjb2x1bW4gZm9yIHNvbWUgY29tbWFuZHMKKwkgICAgICovCisJICAgIGlmICghcF9zb2wgJiYgb2FwLT5tb3Rpb25fdHlwZSA9PSBNTElORSAmJiAhb2FwLT5lbmRfYWRqdXN0ZWQKKwkJICAgICYmIChvYXAtPm9wX3R5cGUgPT0gT1BfTFNISUZUIHx8IG9hcC0+b3BfdHlwZSA9PSBPUF9SU0hJRlQKKwkJCQkJCXx8IG9hcC0+b3BfdHlwZSA9PSBPUF9ERUxFVEUpKQorCQljb2xhZHZhbmNlKGN1cndpbi0+d19jdXJzd2FudCA9IG9sZF9jb2wpOworCX0KKwllbHNlCisJeworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gb2xkX2N1cnNvcjsKKwl9CisjaWZkZWYgRkVBVF9WSVNVQUwKKwlvYXAtPmJsb2NrX21vZGUgPSBGQUxTRTsKKyNlbmRpZgorCWNsZWFyb3Aob2FwKTsKKyAgICB9Cit9CisKKy8qCisgKiBIYW5kbGUgaW5kZW50IGFuZCBmb3JtYXQgb3BlcmF0b3JzIGFuZCB2aXN1YWwgbW9kZSAiOiIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorb3BfY29sb24ob2FwKQorICAgIG9wYXJnX1QJKm9hcDsKK3sKKyAgICBzdHVmZmNoYXJSZWFkYnVmZignOicpOworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKG9hcC0+aXNfVklzdWFsKQorCXN0dWZmUmVhZGJ1ZmYoKGNoYXJfdSAqKSInPCwnPiIpOworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwkvKgorCSAqIE1ha2UgdGhlIHJhbmdlIGxvb2sgbmljZSwgc28gaXQgY2FuIGJlIHJlcGVhdGVkLgorCSAqLworCWlmIChvYXAtPnN0YXJ0LmxudW0gPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCSAgICBzdHVmZmNoYXJSZWFkYnVmZignLicpOworCWVsc2UKKwkgICAgc3R1ZmZudW1SZWFkYnVmZigobG9uZylvYXAtPnN0YXJ0LmxudW0pOworCWlmIChvYXAtPmVuZC5sbnVtICE9IG9hcC0+c3RhcnQubG51bSkKKwl7CisJICAgIHN0dWZmY2hhclJlYWRidWZmKCcsJyk7CisJICAgIGlmIChvYXAtPmVuZC5sbnVtID09IGN1cndpbi0+d19jdXJzb3IubG51bSkKKwkJc3R1ZmZjaGFyUmVhZGJ1ZmYoJy4nKTsKKwkgICAgZWxzZSBpZiAob2FwLT5lbmQubG51bSA9PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkJc3R1ZmZjaGFyUmVhZGJ1ZmYoJyQnKTsKKwkgICAgZWxzZSBpZiAob2FwLT5zdGFydC5sbnVtID09IGN1cndpbi0+d19jdXJzb3IubG51bSkKKwkgICAgeworCQlzdHVmZlJlYWRidWZmKChjaGFyX3UgKikiLisiKTsKKwkJc3R1ZmZudW1SZWFkYnVmZigobG9uZylvYXAtPmxpbmVfY291bnQgLSAxKTsKKwkgICAgfQorCSAgICBlbHNlCisJCXN0dWZmbnVtUmVhZGJ1ZmYoKGxvbmcpb2FwLT5lbmQubG51bSk7CisJfQorICAgIH0KKyAgICBpZiAob2FwLT5vcF90eXBlICE9IE9QX0NPTE9OKQorCXN0dWZmUmVhZGJ1ZmYoKGNoYXJfdSAqKSIhIik7CisgICAgaWYgKG9hcC0+b3BfdHlwZSA9PSBPUF9JTkRFTlQpCisgICAgeworI2lmbmRlZiBGRUFUX0NJTkRFTlQKKwlpZiAoKmdldF9lcXVhbHByZygpID09IE5VTCkKKwkgICAgc3R1ZmZSZWFkYnVmZigoY2hhcl91ICopImluZGVudCIpOworCWVsc2UKKyNlbmRpZgorCSAgICBzdHVmZlJlYWRidWZmKGdldF9lcXVhbHByZygpKTsKKwlzdHVmZlJlYWRidWZmKChjaGFyX3UgKikiXG4iKTsKKyAgICB9CisgICAgZWxzZSBpZiAob2FwLT5vcF90eXBlID09IE9QX0ZPUk1BVCkKKyAgICB7CisJaWYgKCpwX2ZwID09IE5VTCkKKwkgICAgc3R1ZmZSZWFkYnVmZigoY2hhcl91ICopImZtdCIpOworCWVsc2UKKwkgICAgc3R1ZmZSZWFkYnVmZihwX2ZwKTsKKwlzdHVmZlJlYWRidWZmKChjaGFyX3UgKikiXG4iKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGRvX2NtZGxpbmUoKSBkb2VzIHRoZSByZXN0CisgICAgICovCit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTU9VU0UpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogRG8gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgbW91c2UgY2xpY2sgaW4gdGhlIGN1cnJlbnQgbW9kZS4KKyAqIE5vdCB1c2VkIGZvciBDb21tYW5kLWxpbmUgbW9kZS4KKyAqCisgKiBOb3JtYWwgTW9kZToKKyAqIGV2ZW50CSBtb2RpLQlwb3NpdGlvbiAgICAgIHZpc3VhbAkgICBjaGFuZ2UgICBhY3Rpb24KKyAqCQkgZmllcgljdXJzb3IJCQkgICB3aW5kb3cKKyAqIGxlZnQgcHJlc3MJICAtCXllcwkgICAgZW5kCQkgICAgeWVzCisgKiBsZWZ0IHByZXNzCSAgQwl5ZXMJICAgIGVuZAkJICAgIHllcwkgICAgIl5dIiAoMikKKyAqIGxlZnQgcHJlc3MJICBTCXllcwkgICAgZW5kCQkgICAgeWVzCSAgICAiKiIgKDIpCisgKiBsZWZ0IGRyYWcJICAtCXllcwlzdGFydCBpZiBtb3ZlZAkgICAgbm8KKyAqIGxlZnQgcmVsc2UJICAtCXllcwlzdGFydCBpZiBtb3ZlZAkgICAgbm8KKyAqIG1pZGRsZSBwcmVzcwkgIC0JeWVzCSBpZiBub3QgYWN0aXZlCSAgICBubwkgICAgcHV0IHJlZ2lzdGVyCisgKiBtaWRkbGUgcHJlc3MJICAtCXllcwkgaWYgYWN0aXZlCSAgICBubwkgICAgeWFuayBhbmQgcHV0CisgKiByaWdodCBwcmVzcwkgIC0JeWVzCXN0YXJ0IG9yIGV4dGVuZAkgICAgeWVzCisgKiByaWdodCBwcmVzcwkgIFMJeWVzCW5vIGNoYW5nZQkgICAgeWVzCSAgICAiIyIgKDIpCisgKiByaWdodCBkcmFnCSAgLQl5ZXMJZXh0ZW5kCQkgICAgbm8KKyAqIHJpZ2h0IHJlbHNlCSAgLQl5ZXMJZXh0ZW5kCQkgICAgbm8KKyAqCisgKiBJbnNlcnQgb3IgUmVwbGFjZSBNb2RlOgorICogZXZlbnQJIG1vZGktCXBvc2l0aW9uICAgICAgdmlzdWFsCSAgIGNoYW5nZSAgIGFjdGlvbgorICoJCSBmaWVyCWN1cnNvcgkJCSAgIHdpbmRvdworICogbGVmdCBwcmVzcwkgIC0JeWVzCShjYW5ub3QgYmUgYWN0aXZlKSAgeWVzCisgKiBsZWZ0IHByZXNzCSAgQwl5ZXMJKGNhbm5vdCBiZSBhY3RpdmUpICB5ZXMJICAgICJDVFJMLU9eXSIgKDIpCisgKiBsZWZ0IHByZXNzCSAgUwl5ZXMJKGNhbm5vdCBiZSBhY3RpdmUpICB5ZXMJICAgICJDVFJMLU8qIiAoMikKKyAqIGxlZnQgZHJhZwkgIC0JeWVzCXN0YXJ0IG9yIGV4dGVuZCAoMSkgbm8JICAgIENUUkwtTyAoMSkKKyAqIGxlZnQgcmVsc2UJICAtCXllcwlzdGFydCBvciBleHRlbmQgKDEpIG5vCSAgICBDVFJMLU8gKDEpCisgKiBtaWRkbGUgcHJlc3MJICAtCW5vCShjYW5ub3QgYmUgYWN0aXZlKSAgbm8JICAgIHB1dCByZWdpc3RlcgorICogcmlnaHQgcHJlc3MJICAtCXllcwlzdGFydCBvciBleHRlbmQJICAgIHllcwkgICAgQ1RSTC1PCisgKiByaWdodCBwcmVzcwkgIFMJeWVzCShjYW5ub3QgYmUgYWN0aXZlKSAgeWVzCSAgICAiQ1RSTC1PIyIgKDIpCisgKgorICogKDEpIG9ubHkgaWYgbW91c2UgcG9pbnRlciBtb3ZlZCBzaW5jZSBwcmVzcworICogKDIpIG9ubHkgaWYgY2xpY2sgaXMgaW4gc2FtZSBidWZmZXIKKyAqCisgKiBSZXR1cm4gVFJVRSBpZiBzdGFydF9hcnJvdygpIHNob3VsZCBiZSBjYWxsZWQgZm9yIGVkaXQgbW9kZS4KKyAqLworICAgIGludAorZG9fbW91c2Uob2FwLCBjLCBkaXIsIGNvdW50LCBmaXhpbmRlbnQpCisgICAgb3BhcmdfVAkqb2FwOwkJLyogb3BlcmF0b3IgYXJndW1lbnQsIGNhbiBiZSBOVUxMICovCisgICAgaW50CQljOwkJLyogS19MRUZUTU9VU0UsIGV0YyAqLworICAgIGludAkJZGlyOwkJLyogRGlyZWN0aW9uIHRvICdwdXQnIGlmIG5lY2Vzc2FyeSAqLworICAgIGxvbmcJY291bnQ7CisgICAgaW50CQlmaXhpbmRlbnQ7CS8qIFBVVF9GSVhJTkRFTlQgaWYgZml4aW5nIGluZGVudCBuZWNlc3NhcnkgKi8KK3sKKyAgICBzdGF0aWMgaW50CWRvX2Fsd2F5cyA9IEZBTFNFOwkvKiBpZ25vcmUgJ21vdXNlJyBzZXR0aW5nIG5leHQgdGltZSAqLworICAgIHN0YXRpYyBpbnQJZ290X2NsaWNrID0gRkFMU0U7CS8qIGdvdCBhIGNsaWNrIHNvbWUgdGltZSBiYWNrICovCisKKyAgICBpbnQJCXdoaWNoX2J1dHRvbjsJLyogTU9VU0VfTEVGVCwgX01JRERMRSBvciBfUklHSFQgKi8KKyAgICBpbnQJCWlzX2NsaWNrOwkvKiBJZiBGQUxTRSBpdCdzIGEgZHJhZyBvciByZWxlYXNlIGV2ZW50ICovCisgICAgaW50CQlpc19kcmFnOwkvKiBJZiBUUlVFIGl0J3MgYSBkcmFnIGV2ZW50ICovCisgICAgaW50CQlqdW1wX2ZsYWdzID0gMDsJLyogZmxhZ3MgZm9yIGp1bXBfdG9fbW91c2UoKSAqLworICAgIHBvc19UCXN0YXJ0X3Zpc3VhbDsKKyAgICBpbnQJCW1vdmVkOwkJLyogSGFzIGN1cnNvciBtb3ZlZD8gKi8KKyAgICBpbnQJCWluX3N0YXR1c19saW5lOwkvKiBtb3VzZSBpbiBzdGF0dXMgbGluZSAqLworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaW50CQlpbl9zZXBfbGluZTsJLyogbW91c2UgaW4gdmVydGljYWwgc2VwYXJhdG9yIGxpbmUgKi8KKyNlbmRpZgorICAgIGludAkJYzEsIGMyOworI2lmIGRlZmluZWQoRkVBVF9GT0xESU5HKQorICAgIHBvc19UCXNhdmVfY3Vyc29yOworI2VuZGlmCisgICAgd2luX1QJKm9sZF9jdXJ3aW4gPSBjdXJ3aW47CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBzdGF0aWMgcG9zX1Qgb3JpZ19jdXJzb3I7CisgICAgY29sbnJfVAlsZWZ0Y29sLCByaWdodGNvbDsKKyAgICBwb3NfVAllbmRfdmlzdWFsOworICAgIGludAkJZGlmZjsKKyAgICBpbnQJCW9sZF9hY3RpdmUgPSBWSXN1YWxfYWN0aXZlOworICAgIGludAkJb2xkX21vZGUgPSBWSXN1YWxfbW9kZTsKKyNlbmRpZgorICAgIGludAkJcmVnbmFtZTsKKworI2lmIGRlZmluZWQoRkVBVF9GT0xESU5HKQorICAgIHNhdmVfY3Vyc29yID0gY3Vyd2luLT53X2N1cnNvcjsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBXaGVuIEdVSSBpcyBhY3RpdmUsIGFsd2F5cyByZWNvZ25pemUgbW91c2UgZXZlbnRzLCBvdGhlcndpc2U6CisgICAgICogLSBJZ25vcmUgbW91c2UgZXZlbnQgaW4gbm9ybWFsIG1vZGUgaWYgJ21vdXNlJyBkb2Vzbid0IGluY2x1ZGUgJ24nLgorICAgICAqIC0gSWdub3JlIG1vdXNlIGV2ZW50IGluIHZpc3VhbCBtb2RlIGlmICdtb3VzZScgZG9lc24ndCBpbmNsdWRlICd2Jy4KKyAgICAgKiAtIEZvciBjb21tYW5kIGxpbmUgYW5kIGluc2VydCBtb2RlICdtb3VzZScgaXMgY2hlY2tlZCBiZWZvcmUgY2FsbGluZworICAgICAqCSBkb19tb3VzZSgpLgorICAgICAqLworICAgIGlmIChkb19hbHdheXMpCisJZG9fYWx3YXlzID0gRkFMU0U7CisgICAgZWxzZQorI2lmZGVmIEZFQVRfR1VJCisJaWYgKCFndWkuaW5fdXNlKQorI2VuZGlmCisJeworI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIGlmIChWSXN1YWxfYWN0aXZlKQorCSAgICB7CisJCWlmICghbW91c2VfaGFzKE1PVVNFX1ZJU1VBTCkpCisJCSAgICByZXR1cm4gRkFMU0U7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJCWlmIChTdGF0ZSA9PSBOT1JNQUwgJiYgIW1vdXNlX2hhcyhNT1VTRV9OT1JNQUwpKQorCQlyZXR1cm4gRkFMU0U7CisJfQorCisgICAgd2hpY2hfYnV0dG9uID0gZ2V0X21vdXNlX2J1dHRvbihLRVkyVEVSTUNBUDEoYyksICZpc19jbGljaywgJmlzX2RyYWcpOworCisjaWZkZWYgRkVBVF9NT1VTRVNIQVBFCisgICAgLyogTWF5IGhhdmUgc3RvcHBlZCBkcmFnZ2luZyB0aGUgc3RhdHVzIG9yIHNlcGFyYXRvciBsaW5lLiAgVGhlIHBvaW50ZXIgaXMKKyAgICAgKiBtb3N0IGxpa2VseSBzdGlsbCBvbiB0aGUgc3RhdHVzIG9yIHNlcGFyYXRvciBsaW5lLiAqLworICAgIGlmICghaXNfZHJhZyAmJiBkcmFnX3N0YXR1c19saW5lKQorICAgIHsKKwlkcmFnX3N0YXR1c19saW5lID0gRkFMU0U7CisJdXBkYXRlX21vdXNlc2hhcGUoU0hBUEVfSURYX1NUQVRVUyk7CisgICAgfQorIyBpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGlmICghaXNfZHJhZyAmJiBkcmFnX3NlcF9saW5lKQorICAgIHsKKwlkcmFnX3NlcF9saW5lID0gRkFMU0U7CisJdXBkYXRlX21vdXNlc2hhcGUoU0hBUEVfSURYX1ZTRVApOworICAgIH0KKyMgZW5kaWYKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBJZ25vcmUgZHJhZyBhbmQgcmVsZWFzZSBldmVudHMgaWYgd2UgZGlkbid0IGdldCBhIGNsaWNrLgorICAgICAqLworICAgIGlmIChpc19jbGljaykKKwlnb3RfY2xpY2sgPSBUUlVFOworICAgIGVsc2UKKyAgICB7CisJaWYgKCFnb3RfY2xpY2spCQkJLyogZGlkbid0IGdldCBjbGljaywgaWdub3JlICovCisJICAgIHJldHVybiBGQUxTRTsKKwlpZiAoIWlzX2RyYWcpCQkJLyogcmVsZWFzZSwgcmVzZXQgZ290X2NsaWNrICovCisJICAgIGdvdF9jbGljayA9IEZBTFNFOworICAgIH0KKworICAgIC8qCisgICAgICogQUxUIGlzIGN1cnJlbnRseSBpZ25vcmVkCisgICAgICovCisgICAgaWYgKChtb2RfbWFzayAmIE1PRF9NQVNLX0FMVCkpCisJcmV0dXJuIEZBTFNFOworCisgICAgLyoKKyAgICAgKiBDVFJMIHJpZ2h0IG1vdXNlIGJ1dHRvbiBkb2VzIENUUkwtVAorICAgICAqLworICAgIGlmIChpc19jbGljayAmJiAobW9kX21hc2sgJiBNT0RfTUFTS19DVFJMKSAmJiB3aGljaF9idXR0b24gPT0gTU9VU0VfUklHSFQpCisgICAgeworCWlmIChTdGF0ZSAmIElOU0VSVCkKKwkgICAgc3R1ZmZjaGFyUmVhZGJ1ZmYoQ3RybF9PKTsKKwlpZiAoY291bnQgPiAxKQorCSAgICBzdHVmZm51bVJlYWRidWZmKGNvdW50KTsKKwlzdHVmZmNoYXJSZWFkYnVmZihDdHJsX1QpOworCWdvdF9jbGljayA9IEZBTFNFOwkJLyogaWdub3JlIGRyYWcmcmVsZWFzZSBub3cgKi8KKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDVFJMIG9ubHkgd29ya3Mgd2l0aCBsZWZ0IG1vdXNlIGJ1dHRvbgorICAgICAqLworICAgIGlmICgobW9kX21hc2sgJiBNT0RfTUFTS19DVFJMKSAmJiB3aGljaF9idXR0b24gIT0gTU9VU0VfTEVGVCkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICAvKgorICAgICAqIFdoZW4gYSBtb2RpZmllciBpcyBkb3duLCBpZ25vcmUgZHJhZyBhbmQgcmVsZWFzZSBldmVudHMsIGFzIHdlbGwgYXMKKyAgICAgKiBtdWx0aXBsZSBjbGlja3MgYW5kIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uLgorICAgICAqIEFjY2VwdCBzaGlmdC1sZWZ0bW91c2UgZHJhZ3Mgd2hlbiAnbW91c2Vtb2RlbCcgaXMgInBvcHVwLioiLgorICAgICAqLworICAgIGlmICgobW9kX21hc2sgJiAoTU9EX01BU0tfU0hJRlQgfCBNT0RfTUFTS19DVFJMIHwgTU9EX01BU0tfQUxUKSkKKwkgICAgJiYgKCFpc19jbGljaworCQl8fCAobW9kX21hc2sgJiBNT0RfTUFTS19NVUxUSV9DTElDSykKKwkJfHwgd2hpY2hfYnV0dG9uID09IE1PVVNFX01JRERMRSkKKwkgICAgJiYgISgobW9kX21hc2sgJiBNT0RfTUFTS19TSElGVCkKKwkJJiYgbW91c2VfbW9kZWxfcG9wdXAoKQorCQkmJiB3aGljaF9idXR0b24gPT0gTU9VU0VfTEVGVCkKKwkgICAgKQorCXJldHVybiBGQUxTRTsKKworICAgIC8qCisgICAgICogSWYgdGhlIGJ1dHRvbiBwcmVzcyB3YXMgdXNlZCBhcyB0aGUgbW92ZW1lbnQgY29tbWFuZCBmb3IgYW4gb3BlcmF0b3IKKyAgICAgKiAoZWcgImQ8TU9VU0U+IiksIG9yIGl0IGlzIHRoZSBtaWRkbGUgYnV0dG9uIHRoYXQgaXMgaGVsZCBkb3duLCBpZ25vcmUKKyAgICAgKiBkcmFnL3JlbGVhc2UgZXZlbnRzLgorICAgICAqLworICAgIGlmICghaXNfY2xpY2sgJiYgd2hpY2hfYnV0dG9uID09IE1PVVNFX01JRERMRSkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBpZiAob2FwICE9IE5VTEwpCisJcmVnbmFtZSA9IG9hcC0+cmVnbmFtZTsKKyAgICBlbHNlCisJcmVnbmFtZSA9IDA7CisKKyAgICAvKgorICAgICAqIE1pZGRsZSBtb3VzZSBidXR0b24gZG9lcyBhICdwdXQnIG9mIHRoZSBzZWxlY3RlZCB0ZXh0CisgICAgICovCisgICAgaWYgKHdoaWNoX2J1dHRvbiA9PSBNT1VTRV9NSURETEUpCisgICAgeworCWlmIChTdGF0ZSA9PSBOT1JNQUwpCisJeworCSAgICAvKgorCSAgICAgKiBJZiBhbiBvcGVyYXRvciB3YXMgcGVuZGluZywgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSB1c2VyIHdhbnRlZAorCSAgICAgKiB0byBkby4gR28gYmFjayB0byBub3JtYWwgbW9kZTogQ2xlYXIgdGhlIG9wZXJhdG9yIGFuZCBiZWVwKCkuCisJICAgICAqLworCSAgICBpZiAob2FwICE9IE5VTEwgJiYgb2FwLT5vcF90eXBlICE9IE9QX05PUCkKKwkgICAgeworCQljbGVhcm9wYmVlcChvYXApOworCQlyZXR1cm4gRkFMU0U7CisJICAgIH0KKworI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIC8qCisJICAgICAqIElmIHZpc3VhbCB3YXMgYWN0aXZlLCB5YW5rIHRoZSBoaWdobGlnaHRlZCB0ZXh0IGFuZCBwdXQgaXQKKwkgICAgICogYmVmb3JlIHRoZSBtb3VzZSBwb2ludGVyIHBvc2l0aW9uLgorCSAgICAgKi8KKwkgICAgaWYgKFZJc3VhbF9hY3RpdmUpCisJICAgIHsKKwkJc3R1ZmZjaGFyUmVhZGJ1ZmYoJ3knKTsKKwkJc3R1ZmZjaGFyUmVhZGJ1ZmYoS19NSURETEVNT1VTRSk7CisJCWRvX2Fsd2F5cyA9IFRSVUU7CS8qIGlnbm9yZSAnbW91c2UnIHNldHRpbmcgbmV4dCB0aW1lICovCisJCXJldHVybiBGQUxTRTsKKwkgICAgfQorI2VuZGlmCisJICAgIC8qCisJICAgICAqIFRoZSByZXN0IGlzIGJlbG93IGp1bXBfdG9fbW91c2UoKQorCSAgICAgKi8KKwl9CisKKwllbHNlIGlmICgoU3RhdGUgJiBJTlNFUlQpID09IDApCisJICAgIHJldHVybiBGQUxTRTsKKworCS8qCisJICogTWlkZGxlIGNsaWNrIGluIGluc2VydCBtb2RlIGRvZXNuJ3QgbW92ZSB0aGUgbW91c2UsIGp1c3QgaW5zZXJ0IHRoZQorCSAqIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIuICAnLicgcmVnaXN0ZXIgaXMgc3BlY2lhbCwgY2FuJ3QgaW5zZXJ0IHRoYXQKKwkgKiB3aXRoIGRvX3B1dCgpLgorCSAqIEFsc28gcGFzdGUgYXQgdGhlIGN1cnNvciBpZiB0aGUgY3VycmVudCBtb2RlIGlzbid0IGluICdtb3VzZScgKG9ubHkKKwkgKiBoYXBwZW5zIGZvciB0aGUgR1VJKS4KKwkgKi8KKwlpZiAoKFN0YXRlICYgSU5TRVJUKSB8fCAhbW91c2VfaGFzKE1PVVNFX05PUk1BTCkpCisJeworCSAgICBpZiAocmVnbmFtZSA9PSAnLicpCisJCWluc2VydF9yZWcocmVnbmFtZSwgVFJVRSk7CisJICAgIGVsc2UKKwkgICAgeworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisJCWlmIChjbGlwX3N0YXIuYXZhaWxhYmxlICYmIHJlZ25hbWUgPT0gMCkKKwkJICAgIHJlZ25hbWUgPSAnKic7CisjZW5kaWYKKwkJaWYgKChTdGF0ZSAmIFJFUExBQ0VfRkxBRykgJiYgIXlhbmtfcmVnaXN0ZXJfbWxpbmUocmVnbmFtZSkpCisJCSAgICBpbnNlcnRfcmVnKHJlZ25hbWUsIFRSVUUpOworCQllbHNlCisJCXsKKwkJICAgIGRvX3B1dChyZWduYW1lLCBCQUNLV0FSRCwgMUwsIGZpeGluZGVudCB8IFBVVF9DVVJTRU5EKTsKKworCQkgICAgLyogUmVwZWF0IGl0IHdpdGggQ1RSTC1SIENUUkwtTyByIG9yIENUUkwtUiBDVFJMLVAgciAqLworCQkgICAgQXBwZW5kQ2hhclRvUmVkb2J1ZmYoQ3RybF9SKTsKKwkJICAgIEFwcGVuZENoYXJUb1JlZG9idWZmKGZpeGluZGVudCA/IEN0cmxfUCA6IEN0cmxfTyk7CisJCSAgICBBcHBlbmRDaGFyVG9SZWRvYnVmZihyZWduYW1lID09IDAgPyAnIicgOiByZWduYW1lKTsKKwkJfQorCSAgICB9CisJICAgIHJldHVybiBGQUxTRTsKKwl9CisgICAgfQorCisgICAgLyogV2hlbiBkcmFnZ2luZyBvciBidXR0b24tdXAgc3RheSBpbiB0aGUgc2FtZSB3aW5kb3cuICovCisgICAgaWYgKCFpc19jbGljaykKKwlqdW1wX2ZsYWdzIHw9IE1PVVNFX0ZPQ1VTIHwgTU9VU0VfRElEX01PVkU7CisKKyAgICBzdGFydF92aXN1YWwubG51bSA9IDA7CisKKyAgICAvKgorICAgICAqIFdoZW4gJ21vdXNlbW9kZWwnIGlzICJwb3B1cCIgb3IgInBvcHVwX3NldHBvcyIsIHRyYW5zbGF0ZSBtb3VzZSBldmVudHM6CisgICAgICogcmlnaHQgYnV0dG9uIHVwICAgLT4gcG9wLXVwIG1lbnUKKyAgICAgKiBzaGlmdC1sZWZ0IGJ1dHRvbiAtPiByaWdodCBidXR0b24KKyAgICAgKi8KKyAgICBpZiAobW91c2VfbW9kZWxfcG9wdXAoKSkKKyAgICB7CisJaWYgKHdoaWNoX2J1dHRvbiA9PSBNT1VTRV9SSUdIVAorCQkJICAgICYmICEobW9kX21hc2sgJiAoTU9EX01BU0tfU0hJRlQgfCBNT0RfTUFTS19DVFJMKSkpCisJeworCSAgICAvKgorCSAgICAgKiBOT1RFOiBJZ25vcmUgcmlnaHQgYnV0dG9uIGRvd24gYW5kIGRyYWcgbW91c2UgZXZlbnRzLgorCSAgICAgKiBXaW5kb3dzIG9ubHkgc2hvd3MgdGhlIHBvcHVwIG1lbnUgb24gdGhlIGJ1dHRvbiB1cCBldmVudC4KKwkgICAgICovCisjaWYgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgfHwgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKQorCSAgICBpZiAoIWlzX2NsaWNrKQorCQlyZXR1cm4gRkFMU0U7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkgfHwgZGVmaW5lZChGRUFUX0dVSV9NU1dJTikKKwkgICAgaWYgKGlzX2NsaWNrIHx8IGlzX2RyYWcpCisJCXJldHVybiBGQUxTRTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9HVUlfTU9USUYpIHx8IGRlZmluZWQoRkVBVF9HVUlfR1RLKSBcCisJICAgIHx8IGRlZmluZWQoRkVBVF9HVUlfQVRIRU5BKSB8fCBkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSBcCisJICAgIHx8IGRlZmluZWQoRkVBVF9HVUlfTUFDKSB8fCBkZWZpbmVkKEZFQVRfR1VJX1BIT1RPTikKKwkgICAgaWYgKGd1aS5pbl91c2UpCisJICAgIHsKKwkJanVtcF9mbGFncyA9IDA7CisJCWlmIChTVFJDTVAocF9tb3VzZW0sICJwb3B1cF9zZXRwb3MiKSA9PSAwKQorCQl7CisJCSAgICAvKiBGaXJzdCBzZXQgdGhlIGN1cnNvciBwb3NpdGlvbiBiZWZvcmUgc2hvd2luZyB0aGUgcG9wdXAKKwkJICAgICAqIG1lbnUuICovCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJICAgIGlmIChWSXN1YWxfYWN0aXZlKQorCQkgICAgeworCQkJcG9zX1QgICAgbV9wb3M7CisKKwkJCS8qCisJCQkgKiBzZXQgTU9VU0VfTUFZX1NUT1BfVklTIGlmIHdlIGFyZSBvdXRzaWRlIHRoZQorCQkJICogc2VsZWN0aW9uIG9yIHRoZSBjdXJyZW50IHdpbmRvdyAobWlnaHQgaGF2ZSBmYWxzZQorCQkJICogbmVnYXRpdmUgaGVyZSkKKwkJCSAqLworCQkJaWYgKG1vdXNlX3JvdyA8IFdfV0lOUk9XKGN1cndpbikKKwkJCSAgICAgfHwgbW91c2Vfcm93CisJCQkJICAgICAgPiAoV19XSU5ST1coY3Vyd2luKSArIGN1cndpbi0+d19oZWlnaHQpKQorCQkJICAgIGp1bXBfZmxhZ3MgPSBNT1VTRV9NQVlfU1RPUF9WSVM7CisJCQllbHNlIGlmIChnZXRfZnBvc19vZl9tb3VzZSgmbV9wb3MpICE9IElOX0JVRkZFUikKKwkJCSAgICBqdW1wX2ZsYWdzID0gTU9VU0VfTUFZX1NUT1BfVklTOworCQkJZWxzZQorCQkJeworCQkJICAgIGlmICgobHQoY3Vyd2luLT53X2N1cnNvciwgVklzdWFsKQorCQkJCQkmJiAobHQobV9wb3MsIGN1cndpbi0+d19jdXJzb3IpCisJCQkJCSAgICB8fCBsdChWSXN1YWwsIG1fcG9zKSkpCisJCQkJICAgIHx8IChsdChWSXN1YWwsIGN1cndpbi0+d19jdXJzb3IpCisJCQkJCSYmIChsdChtX3BvcywgVklzdWFsKQorCQkJCQkgICAgfHwgbHQoY3Vyd2luLT53X2N1cnNvciwgbV9wb3MpKSkpCisJCQkgICAgeworCQkJCWp1bXBfZmxhZ3MgPSBNT1VTRV9NQVlfU1RPUF9WSVM7CisJCQkgICAgfQorCQkJICAgIGVsc2UgaWYgKFZJc3VhbF9tb2RlID09IEN0cmxfVikKKwkJCSAgICB7CisJCQkJZ2V0dmNvbHMoY3Vyd2luLCAmY3Vyd2luLT53X2N1cnNvciwgJlZJc3VhbCwKKwkJCQkJCQkgJmxlZnRjb2wsICZyaWdodGNvbCk7CisJCQkJZ2V0dmNvbChjdXJ3aW4sICZtX3BvcywgTlVMTCwgJm1fcG9zLmNvbCwgTlVMTCk7CisJCQkJaWYgKG1fcG9zLmNvbCA8IGxlZnRjb2wgfHwgbV9wb3MuY29sID4gcmlnaHRjb2wpCisJCQkJICAgIGp1bXBfZmxhZ3MgPSBNT1VTRV9NQVlfU1RPUF9WSVM7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQkgICAgZWxzZQorCQkJanVtcF9mbGFncyA9IE1PVVNFX01BWV9TVE9QX1ZJUzsKKyNlbmRpZgorCQl9CisJCWlmIChqdW1wX2ZsYWdzKQorCQl7CisJCSAgICBqdW1wX2ZsYWdzID0ganVtcF90b19tb3VzZShqdW1wX2ZsYWdzLCBOVUxMLCB3aGljaF9idXR0b24pOworCQkgICAgdXBkYXRlX2N1cmJ1ZigKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkJICAgIFZJc3VhbF9hY3RpdmUgPyBJTlZFUlRFRCA6CisjZW5kaWYKKwkJCSAgICBWQUxJRCk7CisJCSAgICBzZXRjdXJzb3IoKTsKKwkJICAgIG91dF9mbHVzaCgpOyAgICAvKiBVcGRhdGUgYmVmb3JlIHNob3dpbmcgcG9wdXAgbWVudSAqLworCQl9CisjIGlmZGVmIEZFQVRfTUVOVQorCQlndWlfc2hvd19wb3B1cG1lbnUoKTsKKyMgZW5kaWYKKwkJcmV0dXJuIChqdW1wX2ZsYWdzICYgQ1VSU09SX01PVkVEKSAhPSAwOworCSAgICB9CisJICAgIGVsc2UKKwkJcmV0dXJuIEZBTFNFOworI2Vsc2UKKwkgICAgcmV0dXJuIEZBTFNFOworI2VuZGlmCisJfQorCWlmICh3aGljaF9idXR0b24gPT0gTU9VU0VfTEVGVCAmJiAobW9kX21hc2sgJiBNT0RfTUFTS19TSElGVCkpCisJeworCSAgICB3aGljaF9idXR0b24gPSBNT1VTRV9SSUdIVDsKKwkgICAgbW9kX21hc2sgJj0gfk1PRF9NQVNLX1NISUZUOworCX0KKyAgICB9CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmICgoU3RhdGUgJiAoTk9STUFMIHwgSU5TRVJUKSkKKwkJCSAgICAmJiAhKG1vZF9tYXNrICYgKE1PRF9NQVNLX1NISUZUIHwgTU9EX01BU0tfQ1RSTCkpKQorICAgIHsKKwlpZiAod2hpY2hfYnV0dG9uID09IE1PVVNFX0xFRlQpCisJeworCSAgICBpZiAoaXNfY2xpY2spCisJICAgIHsKKwkJLyogc3RvcCBWaXN1YWwgbW9kZSBmb3IgYSBsZWZ0IGNsaWNrIGluIGEgd2luZG93LCBidXQgbm90IHdoZW4KKwkJICogb24gYSBzdGF0dXMgbGluZSAqLworCQlpZiAoVklzdWFsX2FjdGl2ZSkKKwkJICAgIGp1bXBfZmxhZ3MgfD0gTU9VU0VfTUFZX1NUT1BfVklTOworCSAgICB9CisJICAgIGVsc2UgaWYgKG1vdXNlX2hhcyhNT1VTRV9WSVNVQUwpKQorCQlqdW1wX2ZsYWdzIHw9IE1PVVNFX01BWV9WSVM7CisJfQorCWVsc2UgaWYgKHdoaWNoX2J1dHRvbiA9PSBNT1VTRV9SSUdIVCkKKwl7CisJICAgIGlmIChpc19jbGljayAmJiBWSXN1YWxfYWN0aXZlKQorCSAgICB7CisJCS8qCisJCSAqIFJlbWVtYmVyIHRoZSBzdGFydCBhbmQgZW5kIG9mIHZpc3VhbCBiZWZvcmUgbW92aW5nIHRoZQorCQkgKiBjdXJzb3IuCisJCSAqLworCQlpZiAobHQoY3Vyd2luLT53X2N1cnNvciwgVklzdWFsKSkKKwkJeworCQkgICAgc3RhcnRfdmlzdWFsID0gY3Vyd2luLT53X2N1cnNvcjsKKwkJICAgIGVuZF92aXN1YWwgPSBWSXN1YWw7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBzdGFydF92aXN1YWwgPSBWSXN1YWw7CisJCSAgICBlbmRfdmlzdWFsID0gY3Vyd2luLT53X2N1cnNvcjsKKwkJfQorCSAgICB9CisJICAgIGp1bXBfZmxhZ3MgfD0gTU9VU0VfRk9DVVM7CisJICAgIGlmIChtb3VzZV9oYXMoTU9VU0VfVklTVUFMKSkKKwkJanVtcF9mbGFncyB8PSBNT1VTRV9NQVlfVklTOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgYW4gb3BlcmF0b3IgaXMgcGVuZGluZywgaWdub3JlIGFsbCBkcmFncyBhbmQgcmVsZWFzZXMgdW50aWwgdGhlCisgICAgICogbmV4dCBtb3VzZSBjbGljay4KKyAgICAgKi8KKyAgICBpZiAoIWlzX2RyYWcgJiYgb2FwICE9IE5VTEwgJiYgb2FwLT5vcF90eXBlICE9IE9QX05PUCkKKyAgICB7CisJZ290X2NsaWNrID0gRkFMU0U7CisJb2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworICAgIH0KKworICAgIC8qIFdoZW4gcmVsZWFzaW5nIHRoZSBidXR0b24gbGV0IGp1bXBfdG9fbW91c2UoKSBrbm93LiAqLworICAgIGlmICghaXNfY2xpY2sgJiYgIWlzX2RyYWcpCisJanVtcF9mbGFncyB8PSBNT1VTRV9SRUxFQVNFRDsKKworICAgIC8qCisgICAgICogSlVNUCEKKyAgICAgKi8KKyAgICBqdW1wX2ZsYWdzID0ganVtcF90b19tb3VzZShqdW1wX2ZsYWdzLAorCQkJb2FwID09IE5VTEwgPyBOVUxMIDogJihvYXAtPmluY2x1c2l2ZSksIHdoaWNoX2J1dHRvbik7CisgICAgbW92ZWQgPSAoanVtcF9mbGFncyAmIENVUlNPUl9NT1ZFRCk7CisgICAgaW5fc3RhdHVzX2xpbmUgPSAoanVtcF9mbGFncyAmIElOX1NUQVRVU19MSU5FKTsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGluX3NlcF9saW5lID0gKGp1bXBfZmxhZ3MgJiBJTl9TRVBfTElORSk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIGlmICh1c2luZ05ldGJlYW5zICYmIGlzTmV0YmVhbnNCdWZmZXIoY3VyYnVmKQorCQkJICAgICYmICEoanVtcF9mbGFncyAmIChJTl9TVEFUVVNfTElORSB8IElOX1NFUF9MSU5FKSkpCisgICAgeworCWludCBrZXkgPSBLRVkyVEVSTUNBUDEoYyk7CisKKwlpZiAoa2V5ID09IChpbnQpS0VfTEVGVFJFTEVBU0UgfHwga2V5ID09IChpbnQpS0VfTUlERExFUkVMRUFTRQorCQkJCQkgICAgICAgfHwga2V5ID09IChpbnQpS0VfUklHSFRSRUxFQVNFKQorCSAgICBuZXRiZWFuc19idXR0b25fcmVsZWFzZSh3aGljaF9idXR0b24pOworICAgIH0KKyNlbmRpZgorCisgICAgLyogV2hlbiBqdW1waW5nIHRvIGFub3RoZXIgd2luZG93LCBjbGVhciBhIHBlbmRpbmcgb3BlcmF0b3IuICBUaGF0J3MgYSBiaXQKKyAgICAgKiBmcmllbmRsaWVyIHRoYW4gYmVlcGluZyBhbmQgbm90IGp1bXBpbmcgdG8gdGhhdCB3aW5kb3cuICovCisgICAgaWYgKGN1cndpbiAhPSBvbGRfY3Vyd2luICYmIG9hcCAhPSBOVUxMICYmIG9hcC0+b3BfdHlwZSAhPSBPUF9OT1ApCisJY2xlYXJvcChvYXApOworCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaWYgKG1vZF9tYXNrID09IDAKKwkgICAgJiYgIWlzX2RyYWcKKwkgICAgJiYgKGp1bXBfZmxhZ3MgJiAoTU9VU0VfRk9MRF9DTE9TRSB8IE1PVVNFX0ZPTERfT1BFTikpCisJICAgICYmIHdoaWNoX2J1dHRvbiA9PSBNT1VTRV9MRUZUKQorICAgIHsKKwkvKiBvcGVuIG9yIGNsb3NlIGEgZm9sZCBhdCB0aGlzIGxpbmUgKi8KKwlpZiAoanVtcF9mbGFncyAmIE1PVVNFX0ZPTERfT1BFTikKKwkgICAgb3BlbkZvbGQoY3Vyd2luLT53X2N1cnNvci5sbnVtLCAxTCk7CisJZWxzZQorCSAgICBjbG9zZUZvbGQoY3Vyd2luLT53X2N1cnNvci5sbnVtLCAxTCk7CisJLyogZG9uJ3QgbW92ZSB0aGUgY3Vyc29yIGlmIHN0aWxsIGluIHRoZSBzYW1lIHdpbmRvdyAqLworCWlmIChjdXJ3aW4gPT0gb2xkX2N1cndpbikKKwkgICAgY3Vyd2luLT53X2N1cnNvciA9IHNhdmVfY3Vyc29yOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkgJiYgZGVmaW5lZChGRUFUX0NNRFdJTikKKyAgICBpZiAoKGp1bXBfZmxhZ3MgJiBJTl9PVEhFUl9XSU4pICYmICFWSXN1YWxfYWN0aXZlICYmIGNsaXBfc3Rhci5hdmFpbGFibGUpCisgICAgeworCWNsaXBfbW9kZWxlc3Mod2hpY2hfYnV0dG9uLCBpc19jbGljaywgaXNfZHJhZyk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICAvKiBTZXQgZ2xvYmFsIGZsYWcgdGhhdCB3ZSBhcmUgZXh0ZW5kaW5nIHRoZSBWaXN1YWwgYXJlYSB3aXRoIG1vdXNlCisgICAgICogZHJhZ2dpbmc7IHRlbXBvcmFyaWx5IG1pbWltaXplICdzY3JvbGxvZmYnLiAqLworICAgIGlmIChWSXN1YWxfYWN0aXZlICYmIGlzX2RyYWcgJiYgcF9zbykKKyAgICB7CisJLyogSW4gdGhlIHZlcnkgZmlyc3QgbGluZSwgYWxsb3cgc2Nyb2xsaW5nIG9uZSBsaW5lICovCisJaWYgKG1vdXNlX3JvdyA9PSAwKQorCSAgICBtb3VzZV9kcmFnZ2luZyA9IDI7CisJZWxzZQorCSAgICBtb3VzZV9kcmFnZ2luZyA9IDE7CisgICAgfQorCisgICAgLyogV2hlbiBkcmFnZ2luZyB0aGUgbW91c2UgYWJvdmUgdGhlIHdpbmRvdywgc2Nyb2xsIGRvd24uICovCisgICAgaWYgKGlzX2RyYWcgJiYgbW91c2Vfcm93IDwgMCAmJiAhaW5fc3RhdHVzX2xpbmUpCisgICAgeworCXNjcm9sbF9yZWRyYXcoRkFMU0UsIDFMKTsKKwltb3VzZV9yb3cgPSAwOworICAgIH0KKworICAgIGlmIChzdGFydF92aXN1YWwubG51bSkJCS8qIHJpZ2h0IGNsaWNrIGluIHZpc3VhbCBtb2RlICovCisgICAgeworCS8qCisJICogSW4gVmlzdWFsLWJsb2NrIG1vZGUsIGRpdmlkZSB0aGUgYXJlYSBpbiBmb3VyLCBwaWNrIHVwIHRoZSBjb3JuZXIKKwkgKiB0aGF0IGlzIGluIHRoZSBxdWFydGVyIHRoYXQgdGhlIGN1cnNvciBpcyBpbi4KKwkgKi8KKwlpZiAoVklzdWFsX21vZGUgPT0gQ3RybF9WKQorCXsKKwkgICAgZ2V0dmNvbHMoY3Vyd2luLCAmc3RhcnRfdmlzdWFsLCAmZW5kX3Zpc3VhbCwgJmxlZnRjb2wsICZyaWdodGNvbCk7CisJICAgIGlmIChjdXJ3aW4tPndfY3Vyc3dhbnQgPiAobGVmdGNvbCArIHJpZ2h0Y29sKSAvIDIpCisJCWVuZF92aXN1YWwuY29sID0gbGVmdGNvbDsKKwkgICAgZWxzZQorCQllbmRfdmlzdWFsLmNvbCA9IHJpZ2h0Y29sOworCSAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtIDwKKwkJCQkgICAgKHN0YXJ0X3Zpc3VhbC5sbnVtICsgZW5kX3Zpc3VhbC5sbnVtKSAvIDIpCisJCWVuZF92aXN1YWwubG51bSA9IGVuZF92aXN1YWwubG51bTsKKwkgICAgZWxzZQorCQllbmRfdmlzdWFsLmxudW0gPSBzdGFydF92aXN1YWwubG51bTsKKworCSAgICAvKiBtb3ZlIFZJc3VhbCB0byB0aGUgcmlnaHQgY29sdW1uICovCisJICAgIHN0YXJ0X3Zpc3VhbCA9IGN1cndpbi0+d19jdXJzb3I7CSAgICAvKiBzYXZlIHRoZSBjdXJzb3IgcG9zICovCisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBlbmRfdmlzdWFsOworCSAgICBjb2xhZHZhbmNlKGVuZF92aXN1YWwuY29sKTsKKwkgICAgVklzdWFsID0gY3Vyd2luLT53X2N1cnNvcjsKKwkgICAgY3Vyd2luLT53X2N1cnNvciA9IHN0YXJ0X3Zpc3VhbDsJICAgIC8qIHJlc3RvcmUgdGhlIGN1cnNvciAqLworCX0KKwllbHNlCisJeworCSAgICAvKgorCSAgICAgKiBJZiB0aGUgY2xpY2sgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB2aXN1YWwsIGNoYW5nZSB0aGUgc3RhcnQuCisJICAgICAqIElmIHRoZSBjbGljayBpcyBhZnRlciB0aGUgZW5kIG9mIHZpc3VhbCwgY2hhbmdlIHRoZSBlbmQuICBJZgorCSAgICAgKiB0aGUgY2xpY2sgaXMgaW5zaWRlIHRoZSB2aXN1YWwsIGNoYW5nZSB0aGUgY2xvc2VzdCBzaWRlLgorCSAgICAgKi8KKwkgICAgaWYgKGx0KGN1cndpbi0+d19jdXJzb3IsIHN0YXJ0X3Zpc3VhbCkpCisJCVZJc3VhbCA9IGVuZF92aXN1YWw7CisJICAgIGVsc2UgaWYgKGx0KGVuZF92aXN1YWwsIGN1cndpbi0+d19jdXJzb3IpKQorCQlWSXN1YWwgPSBzdGFydF92aXN1YWw7CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBJbiB0aGUgc2FtZSBsaW5lLCBjb21wYXJlIGNvbHVtbiBudW1iZXIgKi8KKwkJaWYgKGVuZF92aXN1YWwubG51bSA9PSBzdGFydF92aXN1YWwubG51bSkKKwkJeworCQkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IuY29sIC0gc3RhcnRfdmlzdWFsLmNvbCA+CisJCQkJICAgIGVuZF92aXN1YWwuY29sIC0gY3Vyd2luLT53X2N1cnNvci5jb2wpCisJCQlWSXN1YWwgPSBzdGFydF92aXN1YWw7CisJCSAgICBlbHNlCisJCQlWSXN1YWwgPSBlbmRfdmlzdWFsOworCQl9CisKKwkJLyogSW4gZGlmZmVyZW50IGxpbmVzLCBjb21wYXJlIGxpbmUgbnVtYmVyICovCisJCWVsc2UKKwkJeworCQkgICAgZGlmZiA9IChjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSBzdGFydF92aXN1YWwubG51bSkgLQorCQkJCShlbmRfdmlzdWFsLmxudW0gLSBjdXJ3aW4tPndfY3Vyc29yLmxudW0pOworCisJCSAgICBpZiAoZGlmZiA+IDApCQkvKiBjbG9zZXN0IHRvIGVuZCAqLworCQkJVklzdWFsID0gc3RhcnRfdmlzdWFsOworCQkgICAgZWxzZSBpZiAoZGlmZiA8IDApCS8qIGNsb3Nlc3QgdG8gc3RhcnQgKi8KKwkJCVZJc3VhbCA9IGVuZF92aXN1YWw7CisJCSAgICBlbHNlCQkJLyogaW4gdGhlIG1pZGRsZSBsaW5lICovCisJCSAgICB7CisJCQlpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPAorCQkJCQkoc3RhcnRfdmlzdWFsLmNvbCArIGVuZF92aXN1YWwuY29sKSAvIDIpCisJCQkgICAgVklzdWFsID0gZW5kX3Zpc3VhbDsKKwkJCWVsc2UKKwkJCSAgICBWSXN1YWwgPSBzdGFydF92aXN1YWw7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgLyoKKyAgICAgKiBJZiBWaXN1YWwgbW9kZSBzdGFydGVkIGluIGluc2VydCBtb2RlLCBleGVjdXRlICJDVFJMLU8iCisgICAgICovCisgICAgZWxzZSBpZiAoKFN0YXRlICYgSU5TRVJUKSAmJiBWSXN1YWxfYWN0aXZlKQorCXN0dWZmY2hhclJlYWRidWZmKEN0cmxfTyk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogTWlkZGxlIG1vdXNlIGNsaWNrOiBQdXQgdGV4dCBiZWZvcmUgY3Vyc29yLgorICAgICAqLworICAgIGlmICh3aGljaF9idXR0b24gPT0gTU9VU0VfTUlERExFKQorICAgIHsKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorCWlmIChjbGlwX3N0YXIuYXZhaWxhYmxlICYmIHJlZ25hbWUgPT0gMCkKKwkgICAgcmVnbmFtZSA9ICcqJzsKKyNlbmRpZgorCWlmICh5YW5rX3JlZ2lzdGVyX21saW5lKHJlZ25hbWUpKQorCXsKKwkgICAgaWYgKG1vdXNlX3Bhc3RfYm90dG9tKQorCQlkaXIgPSBGT1JXQVJEOworCX0KKwllbHNlIGlmIChtb3VzZV9wYXN0X2VvbCkKKwkgICAgZGlyID0gRk9SV0FSRDsKKworCWlmIChmaXhpbmRlbnQpCisJeworCSAgICBjMSA9IChkaXIgPT0gQkFDS1dBUkQpID8gJ1snIDogJ10nOworCSAgICBjMiA9ICdwJzsKKwl9CisJZWxzZQorCXsKKwkgICAgYzEgPSAoZGlyID09IEZPUldBUkQpID8gJ3AnIDogJ1AnOworCSAgICBjMiA9IE5VTDsKKwl9CisJcHJlcF9yZWRvKHJlZ25hbWUsIGNvdW50LCBOVUwsIGMxLCBOVUwsIGMyLCBOVUwpOworCisJLyoKKwkgKiBSZW1lbWJlciB3aGVyZSB0aGUgcGFzdGUgc3RhcnRlZCwgc28gaW4gZWRpdCgpIEluc3N0YXJ0IGNhbiBiZSBzZXQKKwkgKiB0byB0aGlzIHBvc2l0aW9uCisJICovCisJaWYgKHJlc3RhcnRfZWRpdCAhPSAwKQorCSAgICB3aGVyZV9wYXN0ZV9zdGFydGVkID0gY3Vyd2luLT53X2N1cnNvcjsKKwlkb19wdXQocmVnbmFtZSwgZGlyLCBjb3VudCwgZml4aW5kZW50IHwgUFVUX0NVUlNFTkQpOworICAgIH0KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpCisgICAgLyoKKyAgICAgKiBDdHJsLU1vdXNlIGNsaWNrIG9yIGRvdWJsZSBjbGljayBpbiBhIHF1aWNrZml4IHdpbmRvdyBqdW1wcyB0byB0aGUKKyAgICAgKiBlcnJvciB1bmRlciB0aGUgbW91c2UgcG9pbnRlci4KKyAgICAgKi8KKyAgICBlbHNlIGlmICgoKG1vZF9tYXNrICYgTU9EX01BU0tfQ1RSTCkKKwkJfHwgKG1vZF9tYXNrICYgTU9EX01BU0tfTVVMVElfQ0xJQ0spID09IE1PRF9NQVNLXzJDTElDSykKKwkgICAgJiYgYnRfcXVpY2tmaXgoY3VyYnVmKSkKKyAgICB7CisJaWYgKFN0YXRlICYgSU5TRVJUKQorCSAgICBzdHVmZmNoYXJSZWFkYnVmZihDdHJsX08pOworCXN0dWZmUmVhZGJ1ZmYoKGNoYXJfdSAqKSI6LmNjXG4iKTsKKwlnb3RfY2xpY2sgPSBGQUxTRTsJCS8qIGlnbm9yZSBkcmFnJnJlbGVhc2Ugbm93ICovCisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIEN0cmwtTW91c2UgY2xpY2sgKG9yIGRvdWJsZSBjbGljayBpbiBhIGhlbHAgd2luZG93KSBqdW1wcyB0byB0aGUgdGFnCisgICAgICogdW5kZXIgdGhlIG1vdXNlIHBvaW50ZXIuCisgICAgICovCisgICAgZWxzZSBpZiAoKG1vZF9tYXNrICYgTU9EX01BU0tfQ1RSTCkgfHwgKGN1cmJ1Zi0+Yl9oZWxwCisJCSAgICAgJiYgKG1vZF9tYXNrICYgTU9EX01BU0tfTVVMVElfQ0xJQ0spID09IE1PRF9NQVNLXzJDTElDSykpCisgICAgeworCWlmIChTdGF0ZSAmIElOU0VSVCkKKwkgICAgc3R1ZmZjaGFyUmVhZGJ1ZmYoQ3RybF9PKTsKKwlzdHVmZmNoYXJSZWFkYnVmZihDdHJsX1JTQik7CisJZ290X2NsaWNrID0gRkFMU0U7CQkvKiBpZ25vcmUgZHJhZyZyZWxlYXNlIG5vdyAqLworICAgIH0KKworICAgIC8qCisgICAgICogU2hpZnQtTW91c2UgY2xpY2sgc2VhcmNoZXMgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIHdvcmQgdW5kZXIKKyAgICAgKiB0aGUgbW91c2UgcG9pbnRlcgorICAgICAqLworICAgIGVsc2UgaWYgKChtb2RfbWFzayAmIE1PRF9NQVNLX1NISUZUKSkKKyAgICB7CisJaWYgKFN0YXRlICYgSU5TRVJUCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJfHwgKFZJc3VhbF9hY3RpdmUgJiYgVklzdWFsX3NlbGVjdCkKKyNlbmRpZgorCQkpCisJICAgIHN0dWZmY2hhclJlYWRidWZmKEN0cmxfTyk7CisJaWYgKHdoaWNoX2J1dHRvbiA9PSBNT1VTRV9MRUZUKQorCSAgICBzdHVmZmNoYXJSZWFkYnVmZignKicpOworCWVsc2UJLyogTU9VU0VfUklHSFQgKi8KKwkgICAgc3R1ZmZjaGFyUmVhZGJ1ZmYoJyMnKTsKKyAgICB9CisKKyAgICAvKiBIYW5kbGUgZG91YmxlIGNsaWNrcywgdW5sZXNzIG9uIHN0YXR1cyBsaW5lICovCisgICAgZWxzZSBpZiAoaW5fc3RhdHVzX2xpbmUpCisgICAgeworI2lmZGVmIEZFQVRfTU9VU0VTSEFQRQorCWlmICgoaXNfZHJhZyB8fCBpc19jbGljaykgJiYgIWRyYWdfc3RhdHVzX2xpbmUpCisJeworCSAgICBkcmFnX3N0YXR1c19saW5lID0gVFJVRTsKKwkgICAgdXBkYXRlX21vdXNlc2hhcGUoLTEpOworCX0KKyNlbmRpZgorICAgIH0KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGVsc2UgaWYgKGluX3NlcF9saW5lKQorICAgIHsKKyMgaWZkZWYgRkVBVF9NT1VTRVNIQVBFCisJaWYgKChpc19kcmFnIHx8IGlzX2NsaWNrKSAmJiAhZHJhZ19zZXBfbGluZSkKKwl7CisJICAgIGRyYWdfc2VwX2xpbmUgPSBUUlVFOworCSAgICB1cGRhdGVfbW91c2VzaGFwZSgtMSk7CisJfQorIyBlbmRpZgorICAgIH0KKyNlbmRpZgorI2lmZGVmIEZFQVRfVklTVUFMCisgICAgZWxzZSBpZiAoKG1vZF9tYXNrICYgTU9EX01BU0tfTVVMVElfQ0xJQ0spICYmIChTdGF0ZSAmIChOT1JNQUwgfCBJTlNFUlQpKQorCSAgICAgJiYgbW91c2VfaGFzKE1PVVNFX1ZJU1VBTCkpCisgICAgeworCWlmIChpc19jbGljayB8fCAhVklzdWFsX2FjdGl2ZSkKKwl7CisJICAgIGlmIChWSXN1YWxfYWN0aXZlKQorCQlvcmlnX2N1cnNvciA9IFZJc3VhbDsKKwkgICAgZWxzZQorCSAgICB7CisJCWNoZWNrX3Zpc3VhbF9oaWdobGlnaHQoKTsKKwkJVklzdWFsID0gY3Vyd2luLT53X2N1cnNvcjsKKwkJb3JpZ19jdXJzb3IgPSBWSXN1YWw7CisJCVZJc3VhbF9hY3RpdmUgPSBUUlVFOworCQlWSXN1YWxfcmVzZWxlY3QgPSBUUlVFOworCQkvKiBzdGFydCBTZWxlY3QgbW9kZSBpZiAnc2VsZWN0bW9kZScgY29udGFpbnMgIm1vdXNlIiAqLworCQltYXlfc3RhcnRfc2VsZWN0KCdvJyk7CisJCXNldG1vdXNlKCk7CisJICAgIH0KKwkgICAgaWYgKChtb2RfbWFzayAmIE1PRF9NQVNLX01VTFRJX0NMSUNLKSA9PSBNT0RfTUFTS18yQ0xJQ0spCisJCVZJc3VhbF9tb2RlID0gJ3YnOworCSAgICBlbHNlIGlmICgobW9kX21hc2sgJiBNT0RfTUFTS19NVUxUSV9DTElDSykgPT0gTU9EX01BU0tfM0NMSUNLKQorCQlWSXN1YWxfbW9kZSA9ICdWJzsKKwkgICAgZWxzZSBpZiAoKG1vZF9tYXNrICYgTU9EX01BU0tfTVVMVElfQ0xJQ0spID09IE1PRF9NQVNLXzRDTElDSykKKwkJVklzdWFsX21vZGUgPSBDdHJsX1Y7CisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKwkgICAgLyogTWFrZSBzdXJlIHRoZSBjbGlwYm9hcmQgZ2V0cyB1cGRhdGVkLiAgTmVlZGVkIGJlY2F1c2Ugc3RhcnQgYW5kCisJICAgICAqIGVuZCBtYXkgc3RpbGwgYmUgdGhlIHNhbWUsIGFuZCB0aGUgc2VsZWN0aW9uIG5lZWRzIHRvIGJlIG93bmVkICovCisJICAgIGNsaXBfc3Rhci52bW9kZSA9IE5VTDsKKyNlbmRpZgorCX0KKwkvKgorCSAqIEEgZG91YmxlIGNsaWNrIHNlbGVjdHMgYSB3b3JkIG9yIGEgYmxvY2suCisJICovCisJaWYgKChtb2RfbWFzayAmIE1PRF9NQVNLX01VTFRJX0NMSUNLKSA9PSBNT0RfTUFTS18yQ0xJQ0spCisJeworCSAgICBwb3NfVAkqcG9zID0gTlVMTDsKKworCSAgICBpZiAoaXNfY2xpY2spCisJICAgIHsKKwkJLyogSWYgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIChza2lwcGluZyB3aGl0ZSBzcGFjZSkgaXMKKwkJICogbm90IGEgd29yZCBjaGFyYWN0ZXIsIHRyeSBmaW5kaW5nIGEgbWF0Y2ggYW5kIHNlbGVjdCBhICgpLAorCQkgKiB7fSwgW10sICNpZi8jZW5kaWYsIGV0Yy4gYmxvY2suICovCisJCWVuZF92aXN1YWwgPSBjdXJ3aW4tPndfY3Vyc29yOworCQl3aGlsZSAodmltX2lzd2hpdGUoZ2NoYXJfcG9zKCZlbmRfdmlzdWFsKSkpCisJCSAgICBpbmMoJmVuZF92aXN1YWwpOworCQlpZiAob2FwICE9IE5VTEwpCisJCSAgICBvYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisJCWlmIChvYXAgIT0gTlVMTAorCQkJJiYgVklzdWFsX21vZGUgPT0gJ3YnCisJCQkmJiAhdmltX2lzd29yZGMoZ2NoYXJfcG9zKCZlbmRfdmlzdWFsKSkKKwkJCSYmIGVxdWFscG9zKGN1cndpbi0+d19jdXJzb3IsIFZJc3VhbCkKKwkJCSYmIChwb3MgPSBmaW5kbWF0Y2gob2FwLCBOVUwpKSAhPSBOVUxMKQorCQl7CisJCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gKnBvczsKKwkJICAgIGlmIChvYXAtPm1vdGlvbl90eXBlID09IE1MSU5FKQorCQkJVklzdWFsX21vZGUgPSAnVic7CisJCSAgICBlbHNlIGlmICgqcF9zZWwgPT0gJ2UnKQorCQkgICAgeworCQkJaWYgKGx0KGN1cndpbi0+d19jdXJzb3IsIFZJc3VhbCkpCisJCQkgICAgKytWSXN1YWwuY29sOworCQkJZWxzZQorCQkJICAgICsrY3Vyd2luLT53X2N1cnNvci5jb2w7CisJCSAgICB9CisJCX0KKwkgICAgfQorCisJICAgIGlmIChwb3MgPT0gTlVMTCAmJiAoaXNfY2xpY2sgfHwgaXNfZHJhZykpCisJICAgIHsKKwkJLyogV2hlbiBub3QgZm91bmQgYSBtYXRjaCBvciB3aGVuIGRyYWdnaW5nOiBleHRlbmQgdG8gaW5jbHVkZQorCQkgKiBhIHdvcmQuICovCisJCWlmIChsdChjdXJ3aW4tPndfY3Vyc29yLCBvcmlnX2N1cnNvcikpCisJCXsKKwkJICAgIGZpbmRfc3RhcnRfb2Zfd29yZCgmY3Vyd2luLT53X2N1cnNvcik7CisJCSAgICBmaW5kX2VuZF9vZl93b3JkKCZWSXN1YWwpOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgZmluZF9zdGFydF9vZl93b3JkKCZWSXN1YWwpOworCQkgICAgaWYgKCpwX3NlbCA9PSAnZScgJiYgKm1sX2dldF9jdXJzb3IoKSAhPSBOVUwpCisjaWZkZWYgRkVBVF9NQllURQorCQkJY3Vyd2luLT53X2N1cnNvci5jb2wgKz0KKwkJCQkJICgqbWJfcHRyMmxlbl9jaGVjaykobWxfZ2V0X2N1cnNvcigpKTsKKyNlbHNlCisJCQkrK2N1cndpbi0+d19jdXJzb3IuY29sOworI2VuZGlmCisJCSAgICBmaW5kX2VuZF9vZl93b3JkKCZjdXJ3aW4tPndfY3Vyc29yKTsKKwkJfQorCSAgICB9CisJICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCX0KKwlpZiAoaXNfY2xpY2spCisJICAgIHJlZHJhd19jdXJidWZfbGF0ZXIoSU5WRVJURUQpOwkvKiB1cGRhdGUgdGhlIGludmVyc2lvbiAqLworICAgIH0KKyAgICBlbHNlIGlmIChWSXN1YWxfYWN0aXZlICYmICFvbGRfYWN0aXZlKQorCVZJc3VhbF9tb2RlID0gJ3YnOworCisgICAgLyogSWYgVmlzdWFsIG1vZGUgY2hhbmdlZCBzaG93IGl0IGxhdGVyLiAqLworICAgIGlmIChwX3NtZCAmJiAoVklzdWFsX2FjdGl2ZSAhPSBvbGRfYWN0aXZlIHx8IFZJc3VhbF9tb2RlICE9IG9sZF9tb2RlKSkKKwlyZWRyYXdfY21kbGluZSA9IFRSVUU7CisjZW5kaWYKKworICAgIHJldHVybiBtb3ZlZDsKK30KKworI2lmZGVmIEZFQVRfVklTVUFMCisvKgorICogTW92ZSAicG9zIiBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgd29yZCBpdCdzIGluLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZpbmRfc3RhcnRfb2Zfd29yZChwb3MpCisgICAgcG9zX1QJKnBvczsKK3sKKyAgICBjaGFyX3UJKmxpbmU7CisgICAgaW50CQljY2xhc3M7CisgICAgaW50CQljb2w7CisKKyAgICBsaW5lID0gbWxfZ2V0KHBvcy0+bG51bSk7CisgICAgY2NsYXNzID0gZ2V0X21vdXNlX2NsYXNzKGxpbmUgKyBwb3MtPmNvbCk7CisKKyAgICB3aGlsZSAocG9zLT5jb2wgPiAwKQorICAgIHsKKwljb2wgPSBwb3MtPmNvbCAtIDE7CisjaWZkZWYgRkVBVF9NQllURQorCWNvbCAtPSAoKm1iX2hlYWRfb2ZmKShsaW5lLCBsaW5lICsgY29sKTsKKyNlbmRpZgorCWlmIChnZXRfbW91c2VfY2xhc3MobGluZSArIGNvbCkgIT0gY2NsYXNzKQorCSAgICBicmVhazsKKwlwb3MtPmNvbCA9IGNvbDsKKyAgICB9Cit9CisKKy8qCisgKiBNb3ZlICJwb3MiIGZvcndhcmQgdG8gdGhlIGVuZCBvZiB0aGUgd29yZCBpdCdzIGluLgorICogV2hlbiAnc2VsZWN0aW9uJyBpcyAiZXhjbHVzaXZlIiwgdGhlIHBvc2l0aW9uIGlzIGp1c3QgYWZ0ZXIgdGhlIHdvcmQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZmluZF9lbmRfb2Zfd29yZChwb3MpCisgICAgcG9zX1QJKnBvczsKK3sKKyAgICBjaGFyX3UJKmxpbmU7CisgICAgaW50CQljY2xhc3M7CisgICAgaW50CQljb2w7CisKKyAgICBsaW5lID0gbWxfZ2V0KHBvcy0+bG51bSk7CisgICAgaWYgKCpwX3NlbCA9PSAnZScgJiYgcG9zLT5jb2wgPiAwKQorICAgIHsKKwktLXBvcy0+Y29sOworI2lmZGVmIEZFQVRfTUJZVEUKKwlwb3MtPmNvbCAtPSAoKm1iX2hlYWRfb2ZmKShsaW5lLCBsaW5lICsgcG9zLT5jb2wpOworI2VuZGlmCisgICAgfQorICAgIGNjbGFzcyA9IGdldF9tb3VzZV9jbGFzcyhsaW5lICsgcG9zLT5jb2wpOworICAgIHdoaWxlIChsaW5lW3Bvcy0+Y29sXSAhPSBOVUwpCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwljb2wgPSBwb3MtPmNvbCArICgqbWJfcHRyMmxlbl9jaGVjaykobGluZSArIHBvcy0+Y29sKTsKKyNlbHNlCisJY29sID0gcG9zLT5jb2wgKyAxOworI2VuZGlmCisJaWYgKGdldF9tb3VzZV9jbGFzcyhsaW5lICsgY29sKSAhPSBjY2xhc3MpCisJeworCSAgICBpZiAoKnBfc2VsID09ICdlJykKKwkJcG9zLT5jb2wgPSBjb2w7CisJICAgIGJyZWFrOworCX0KKwlwb3MtPmNvbCA9IGNvbDsKKyAgICB9Cit9CisKKy8qCisgKiBHZXQgY2xhc3Mgb2YgYSBjaGFyYWN0ZXIgZm9yIHNlbGVjdGlvbjogc2FtZSBjbGFzcyBtZWFucyBzYW1lIHdvcmQuCisgKiAwOiBibGFuaworICogMTogcHVuY3R1YXRpb24gZ3JvdXBzCisgKiAyOiBub3JtYWwgd29yZCBjaGFyYWN0ZXIKKyAqID4yOiBtdWx0aS1ieXRlIHdvcmQgY2hhcmFjdGVyLgorICovCisgICAgc3RhdGljIGludAorZ2V0X21vdXNlX2NsYXNzKHApCisgICAgY2hhcl91CSpwOworeworICAgIGludAkJYzsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoaGFzX21ieXRlICYmIE1CX0JZVEUyTEVOKHBbMF0pID4gMSkKKwlyZXR1cm4gbWJfZ2V0X2NsYXNzKHApOworI2VuZGlmCisKKyAgICBjID0gKnA7CisgICAgaWYgKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKwlyZXR1cm4gMDsKKworICAgIGlmICh2aW1faXN3b3JkYyhjKSkKKwlyZXR1cm4gMjsKKworICAgIC8qCisgICAgICogVGhlcmUgYXJlIGEgZmV3IHNwZWNpYWwgY2FzZXMgd2hlcmUgd2Ugd2FudCBjZXJ0YWluIGNvbWJpbmF0aW9ucyBvZgorICAgICAqIGNoYXJhY3RlcnMgdG8gYmUgY29uc2lkZXJlZCBhcyBhIHNpbmdsZSB3b3JkLiAgVGhlc2UgYXJlIHRoaW5ncyBsaWtlCisgICAgICogIi0+IiwgIi8gKiIsICIqPSIsICIrPSIsICImPSIsICI8PSIsICI+PSIsICIhPSIgZXRjLiAgT3RoZXJ3aXNlLCBlYWNoCisgICAgICogY2hhcmFjdGVyIGlzIGluIGl0J3Mgb3duIGNsYXNzLgorICAgICAqLworICAgIGlmIChjICE9IE5VTCAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikiLSsqLyU8PiZ8XiE9IiwgYykgIT0gTlVMTCkKKwlyZXR1cm4gMTsKKyAgICByZXR1cm4gYzsKK30KKyNlbmRpZiAvKiBGRUFUX1ZJU1VBTCAqLworI2VuZGlmIC8qIEZFQVRfTU9VU0UgKi8KKworI2lmIGRlZmluZWQoRkVBVF9WSVNVQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ2hlY2sgaWYgIGhpZ2hsaWdodGluZyBmb3IgdmlzdWFsIG1vZGUgaXMgcG9zc2libGUsIGdpdmUgYSB3YXJuaW5nIG1lc3NhZ2UKKyAqIGlmIG5vdC4KKyAqLworICAgIHZvaWQKK2NoZWNrX3Zpc3VhbF9oaWdobGlnaHQoKQoreworICAgIHN0YXRpYyBpbnQJICAgIGRpZF9jaGVjayA9IEZBTFNFOworCisgICAgaWYgKGZ1bGxfc2NyZWVuKQorICAgIHsKKwlpZiAoIWRpZF9jaGVjayAmJiBobF9hdHRyKEhMRl9WKSA9PSAwKQorCSAgICBNU0coXygiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIpKTsKKwlkaWRfY2hlY2sgPSBUUlVFOworICAgIH0KK30KKworLyoKKyAqIEVuZCB2aXN1YWwgbW9kZS4KKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIEFMV0FZUyBiZSBjYWxsZWQgdG8gZW5kIFZpc3VhbCBtb2RlLCBleGNlcHQgZnJvbQorICogZG9fcGVuZGluZ19vcGVyYXRvcigpLgorICovCisgICAgdm9pZAorZW5kX3Zpc3VhbF9tb2RlKCkKK3sKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIC8qCisgICAgICogSWYgd2UgYXJlIHVzaW5nIHRoZSBjbGlwYm9hcmQsIHRoZW4gcmVtZW1iZXIgd2hhdCB3YXMgc2VsZWN0ZWQgaW4gY2FzZQorICAgICAqIHdlIG5lZWQgdG8gcGFzdGUgaXQgc29tZXdoZXJlIHdoaWxlIHdlIHN0aWxsIG93biB0aGUgc2VsZWN0aW9uLgorICAgICAqIE9ubHkgZG8gdGhpcyB3aGVuIHRoZSBjbGlwYm9hcmQgaXMgYWxyZWFkeSBvd25lZC4gIERvbid0IHdhbnQgdG8gZ3JhYgorICAgICAqIHRoZSBzZWxlY3Rpb24gd2hlbiBoaXR0aW5nIEVTQy4KKyAgICAgKi8KKyAgICBpZiAoY2xpcF9zdGFyLmF2YWlsYWJsZSAmJiBjbGlwX3N0YXIub3duZWQpCisJY2xpcF9hdXRvX3NlbGVjdCgpOworI2VuZGlmCisKKyAgICBWSXN1YWxfYWN0aXZlID0gRkFMU0U7CisjaWZkZWYgRkVBVF9NT1VTRQorICAgIHNldG1vdXNlKCk7CisgICAgbW91c2VfZHJhZ2dpbmcgPSAwOworI2VuZGlmCisKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IFZJc3VhbCBhcmVhIGZvciAnPCBhbmQgJz4gbWFya3MsIGFuZCAiZ3YiICovCisgICAgY3VyYnVmLT5iX3Zpc3VhbF9tb2RlID0gVklzdWFsX21vZGU7CisjaWZkZWYgRkVBVF9FVkFMCisgICAgY3VyYnVmLT5iX3Zpc3VhbF9tb2RlX2V2YWwgPSBWSXN1YWxfbW9kZTsKKyNlbmRpZgorICAgIGN1cmJ1Zi0+Yl92aXN1YWxfc3RhcnQgPSBWSXN1YWw7CisgICAgY3VyYnVmLT5iX3Zpc3VhbF9lbmQgPSBjdXJ3aW4tPndfY3Vyc29yOworICAgIGN1cmJ1Zi0+Yl92aXN1YWxfY3Vyc3dhbnQgPSBjdXJ3aW4tPndfY3Vyc3dhbnQ7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorICAgIGlmICghdmlydHVhbF9hY3RpdmUoKSkKKwljdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisjZW5kaWYKKworICAgIGlmIChwX3NtZCkKKwljbGVhcl9jbWRsaW5lID0gVFJVRTsJCS8qIHVuc2hvdyB2aXN1YWwgbW9kZSBsYXRlciAqLworI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisgICAgZWxzZQorCWNsZWFyX3Nob3djbWQoKTsKKyNlbmRpZgorCisgICAgLyogRG9uJ3QgbGVhdmUgdGhlIGN1cnNvciBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUgKi8KKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPiAwICYmICptbF9nZXRfY3Vyc29yKCkgPT0gTlVMKQorCS0tY3Vyd2luLT53X2N1cnNvci5jb2w7Cit9CisKKy8qCisgKiBSZXNldCBWSXN1YWxfYWN0aXZlIGFuZCBWSXN1YWxfcmVzZWxlY3QuCisgKi8KKyAgICB2b2lkCityZXNldF9WSXN1YWxfYW5kX3Jlc2VsKCkKK3sKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKyAgICB7CisJZW5kX3Zpc3VhbF9tb2RlKCk7CisJcmVkcmF3X2N1cmJ1Zl9sYXRlcihJTlZFUlRFRCk7CS8qIGRlbGV0ZSB0aGUgaW52ZXJzaW9uIGxhdGVyICovCisgICAgfQorICAgIFZJc3VhbF9yZXNlbGVjdCA9IEZBTFNFOworfQorCisvKgorICogUmVzZXQgVklzdWFsX2FjdGl2ZSBhbmQgVklzdWFsX3Jlc2VsZWN0IGlmIGl0J3Mgc2V0LgorICovCisgICAgdm9pZAorcmVzZXRfVklzdWFsKCkKK3sKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKyAgICB7CisJZW5kX3Zpc3VhbF9tb2RlKCk7CisJcmVkcmF3X2N1cmJ1Zl9sYXRlcihJTlZFUlRFRCk7CS8qIGRlbGV0ZSB0aGUgaW52ZXJzaW9uIGxhdGVyICovCisJVklzdWFsX3Jlc2VsZWN0ID0gRkFMU0U7CisgICAgfQorfQorI2VuZGlmIC8qIEZFQVRfVklTVUFMICovCisKKyNpZiBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykgJiYgZGVmaW5lZChGRUFUX0JFVkFMKQorc3RhdGljIGludCBmaW5kX2lzX2V2YWxfaXRlbSBfX0FSR1MoKGNoYXJfdSAqcHRyLCBpbnQgKmNvbHAsIGludCAqbmJwLCBpbnQgZGlyKSk7CisKKy8qCisgKiBDaGVjayBmb3IgYSBiYWxsb29uLWV2YWwgc3BlY2lhbCBpdGVtIHRvIGluY2x1ZGUgd2hlbiBzZWFyY2hpbmcgZm9yIGFuCisgKiBpZGVudGlmaWVyLiAgV2hlbiAiZGlyIiBpcyBCQUNLV0FSRCAicHRyWy0xXSIgbXVzdCBiZSB2YWxpZCEKKyAqIFJldHVybnMgVFJVRSBpZiB0aGUgY2hhcmFjdGVyIGF0ICIqcHRyIiBzaG91bGQgYmUgaW5jbHVkZWQuCisgKiAiZGlyIiBpcyBGT1JXQVJEIG9yIEJBQ0tXQVJELCB0aGUgZGlyZWN0aW9uIG9mIHNlYXJjaGluZy4KKyAqICIqY29scCIgaXMgaW4vZGVjcmVtZW50ZWQgaWYgInB0clstZGlyXSIgc2hvdWxkIGFsc28gYmUgaW5jbHVkZWQuCisgKiAiYm5wIiBwb2ludHMgdG8gYSBjb3VudGVyIGZvciBzcXVhcmUgYnJhY2tldHMuCisgKi8KKyAgICBzdGF0aWMgaW50CitmaW5kX2lzX2V2YWxfaXRlbShwdHIsIGNvbHAsIGJucCwgZGlyKQorICAgIGNoYXJfdQkqcHRyOworICAgIGludAkJKmNvbHA7CisgICAgaW50CQkqYm5wOworICAgIGludAkJZGlyOworeworICAgIC8qIEFjY2VwdCBldmVyeXRoaW5nIGluc2lkZSBbXS4gKi8KKyAgICBpZiAoKCpwdHIgPT0gJ10nICYmIGRpciA9PSBCQUNLV0FSRCkgfHwgKCpwdHIgPT0gJ1snICYmIGRpciA9PSBGT1JXQVJEKSkKKwkrKypibnA7CisgICAgaWYgKCpibnAgPiAwKQorICAgIHsKKwlpZiAoKCpwdHIgPT0gJ1snICYmIGRpciA9PSBCQUNLV0FSRCkgfHwgKCpwdHIgPT0gJ10nICYmIGRpciA9PSBGT1JXQVJEKSkKKwkgICAgLS0qYm5wOworCXJldHVybiBUUlVFOworICAgIH0KKworICAgIC8qIHNraXAgb3ZlciAicy52YXIiICovCisgICAgaWYgKCpwdHIgPT0gJy4nKQorCXJldHVybiBUUlVFOworCisgICAgLyogdHdvLWNoYXJhY3RlciBpdGVtOiBzLT52YXIgKi8KKyAgICBpZiAocHRyW2RpciA9PSBCQUNLV0FSRCA/IDAgOiAxXSA9PSAnPicKKwkgICAgJiYgcHRyW2RpciA9PSBCQUNLV0FSRCA/IC0xIDogMF0gPT0gJy0nKQorICAgIHsKKwkqY29scCArPSBkaXI7CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgorCisvKgorICogRmluZCB0aGUgaWRlbnRpZmllciB1bmRlciBvciB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvci4KKyAqICJmaW5kX3R5cGUiIGNhbiBoYXZlIG9uZSBvZiB0aHJlZSB2YWx1ZXM6CisgKiBGSU5EX0lERU5UOiAgIGZpbmQgYW4gaWRlbnRpZmllciAoa2V5d29yZCkKKyAqIEZJTkRfU1RSSU5HOiAgZmluZCBhbnkgbm9uLXdoaXRlIHN0cmluZworICogRklORF9JREVOVCArIEZJTkRfU1RSSU5HOiBmaW5kIGFueSBub24td2hpdGUgc3RyaW5nLCBpZGVudGlmaWVyIHByZWZlcnJlZC4KKyAqCisgKiBUaGVyZSBhcmUgdGhyZWUgc3RlcHM6CisgKiAxLiBTZWFyY2ggZm9yd2FyZCBmb3IgdGhlIHN0YXJ0IG9mIGFuIGlkZW50aWZpZXIvc3RyaW5nLiAgRG9lc24ndCBtb3ZlIGlmCisgKiAgICBhbHJlYWR5IG9uIG9uZS4KKyAqIDIuIFNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIHN0YXJ0IG9mIHRoaXMgaWRlbnRpZmllci9zdHJpbmcuCisgKiAgICBUaGlzIGRvZXNuJ3QgbWF0Y2ggdGhlIHJlYWwgVmkgYnV0IEkgbGlrZSBpdCBhIGxpdHRsZSBiZXR0ZXIgYW5kIGl0CisgKiAgICBzaG91bGRuJ3QgYm90aGVyIGFueW9uZS4KKyAqIDMuIFNlYXJjaCBmb3J3YXJkIHRvIHRoZSBlbmQgb2YgdGhpcyBpZGVudGlmaWVyL3N0cmluZy4KKyAqICAgIFdoZW4gRklORF9JREVOVCBpc24ndCBkZWZpbmVkLCB3ZSBiYWNrdXAgdW50aWwgYSBibGFuay4KKyAqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgb3IgemVybyBpZiBubyBzdHJpbmcgaXMgZm91bmQuCisgKiBJZiBhIHN0cmluZyBpcyBmb3VuZCwgYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgaXMgcHV0IGluICIqc3RyaW5nIi4gIFRoaXMKKyAqIHN0cmluZyBpcyBub3QgYWx3YXlzIE5VTCB0ZXJtaW5hdGVkLgorICovCisgICAgaW50CitmaW5kX2lkZW50X3VuZGVyX2N1cnNvcihzdHJpbmcsIGZpbmRfdHlwZSkKKyAgICBjaGFyX3UJKipzdHJpbmc7CisgICAgaW50CQlmaW5kX3R5cGU7Cit7CisgICAgcmV0dXJuIGZpbmRfaWRlbnRfYXRfcG9zKGN1cndpbiwgY3Vyd2luLT53X2N1cnNvci5sbnVtLAorCQkJCSAgICAgY3Vyd2luLT53X2N1cnNvci5jb2wsIHN0cmluZywgZmluZF90eXBlKTsKK30KKworLyoKKyAqIExpa2UgZmluZF9pZGVudF91bmRlcl9jdXJzb3IoKSwgYnV0IGZvciBhbnkgd2luZG93IGFuZCBhbnkgcG9zaXRpb24uCisgKiBIb3dldmVyOiBVc2VzICdpc2tleXdvcmQnIGZyb20gdGhlIGN1cnJlbnQgd2luZG93IS4KKyAqLworICAgIGludAorZmluZF9pZGVudF9hdF9wb3Mod3AsIGxudW0sIHN0YXJ0Y29sLCBzdHJpbmcsIGZpbmRfdHlwZSkKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBjb2xucl9UCXN0YXJ0Y29sOworICAgIGNoYXJfdQkqKnN0cmluZzsKKyAgICBpbnQJCWZpbmRfdHlwZTsKK3sKKyAgICBjaGFyX3UJKnB0cjsKKyAgICBpbnQJCWNvbCA9IDA7CSAgICAvKiBpbml0IHRvIHNodXQgdXAgR0NDICovCisgICAgaW50CQlpOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCXRoaXNfY2xhc3MgPSAwOworICAgIGludAkJcHJldl9jbGFzczsKKyAgICBpbnQJCXByZXZjb2w7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykgJiYgZGVmaW5lZChGRUFUX0JFVkFMKQorICAgIGludAkJYm4gPSAwOwkgICAgLyogYnJhY2tldCBuZXN0aW5nICovCisjZW5kaWYKKworICAgIC8qCisgICAgICogaWYgaSA9PSAwOiB0cnkgdG8gZmluZCBhbiBpZGVudGlmaWVyCisgICAgICogaWYgaSA9PSAxOiB0cnkgdG8gZmluZCBhbnkgbm9uLXdoaXRlIHN0cmluZworICAgICAqLworICAgIHB0ciA9IG1sX2dldF9idWYod3AtPndfYnVmZmVyLCBsbnVtLCBGQUxTRSk7CisgICAgZm9yIChpID0gKGZpbmRfdHlwZSAmIEZJTkRfSURFTlQpID8gMCA6IDE7CWkgPCAyOyArK2kpCisgICAgeworCS8qCisJICogMS4gc2tpcCB0byBzdGFydCBvZiBpZGVudGlmaWVyL3N0cmluZworCSAqLworCWNvbCA9IHN0YXJ0Y29sOworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCXsKKwkgICAgd2hpbGUgKHB0cltjb2xdICE9IE5VTCkKKwkgICAgeworIyBpZiBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykgJiYgZGVmaW5lZChGRUFUX0JFVkFMKQorCQkvKiBTdG9wIGF0IGEgJ10nIHRvIGV2YWx1YXRlICJhW3hdIi4gKi8KKwkJaWYgKChmaW5kX3R5cGUgJiBGSU5EX0VWQUwpICYmIHB0cltjb2xdID09ICddJykKKwkJICAgIGJyZWFrOworIyBlbmRpZgorCQl0aGlzX2NsYXNzID0gbWJfZ2V0X2NsYXNzKHB0ciArIGNvbCk7CisJCWlmICh0aGlzX2NsYXNzICE9IDAgJiYgKGkgPT0gMSB8fCB0aGlzX2NsYXNzICE9IDEpKQorCQkgICAgYnJlYWs7CisJCWNvbCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHB0ciArIGNvbCk7CisJICAgIH0KKwl9CisJZWxzZQorI2VuZGlmCisJICAgIHdoaWxlIChwdHJbY29sXSAhPSBOVUwKKwkJICAgICYmIChpID09IDAgPyAhdmltX2lzd29yZGMocHRyW2NvbF0pIDogdmltX2lzd2hpdGUocHRyW2NvbF0pKQorIyBpZiBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykgJiYgZGVmaW5lZChGRUFUX0JFVkFMKQorCQkgICAgJiYgKCEoZmluZF90eXBlICYgRklORF9FVkFMKSB8fCBwdHJbY29sXSAhPSAnXScpCisjIGVuZGlmCisJCSAgICApCisJCSsrY29sOworCisjaWYgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpICYmIGRlZmluZWQoRkVBVF9CRVZBTCkKKwkvKiBXaGVuIHN0YXJ0aW5nIG9uIGEgJ10nIGNvdW50IGl0LCBzbyB0aGF0IHdlIGluY2x1ZGUgdGhlICdbJy4gKi8KKwlibiA9IHB0cltjb2xdID09ICddJzsKKyNlbmRpZgorCisJLyoKKwkgKiAyLiBCYWNrIHVwIHRvIHN0YXJ0IG9mIGlkZW50aWZpZXIvc3RyaW5nLgorCSAqLworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCXsKKwkgICAgLyogUmVtZW1iZXIgY2xhc3Mgb2YgY2hhcmFjdGVyIHVuZGVyIGN1cnNvci4gKi8KKyMgaWYgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpICYmIGRlZmluZWQoRkVBVF9CRVZBTCkKKwkgICAgaWYgKChmaW5kX3R5cGUgJiBGSU5EX0VWQUwpICYmIHB0cltjb2xdID09ICddJykKKwkJdGhpc19jbGFzcyA9IG1iX2dldF9jbGFzcygoY2hhcl91ICopImEiKTsKKwkgICAgZWxzZQorIyBlbmRpZgorCQl0aGlzX2NsYXNzID0gbWJfZ2V0X2NsYXNzKHB0ciArIGNvbCk7CisJICAgIHdoaWxlIChjb2wgPiAwKQorCSAgICB7CisJCXByZXZjb2wgPSBjb2wgLSAxIC0gKCptYl9oZWFkX29mZikocHRyLCBwdHIgKyBjb2wgLSAxKTsKKwkJcHJldl9jbGFzcyA9IG1iX2dldF9jbGFzcyhwdHIgKyBwcmV2Y29sKTsKKwkJaWYgKHRoaXNfY2xhc3MgIT0gcHJldl9jbGFzcworCQkJJiYgKGkgPT0gMAorCQkJICAgIHx8IHByZXZfY2xhc3MgPT0gMAorCQkJICAgIHx8IChmaW5kX3R5cGUgJiBGSU5EX0lERU5UKSkKKyMgaWYgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpICYmIGRlZmluZWQoRkVBVF9CRVZBTCkKKwkJCSYmICghKGZpbmRfdHlwZSAmIEZJTkRfRVZBTCkKKwkJCSAgICB8fCBwcmV2Y29sID09IDAKKwkJCSAgICB8fCAhZmluZF9pc19ldmFsX2l0ZW0ocHRyICsgcHJldmNvbCwgJnByZXZjb2wsCisJCQkJCQkJICAgICAgICZibiwgQkFDS1dBUkQpKQorIyBlbmRpZgorCQkJKQorCQkgICAgYnJlYWs7CisJCWNvbCA9IHByZXZjb2w7CisJICAgIH0KKworCSAgICAvKiBJZiB3ZSBkb24ndCB3YW50IGp1c3QgYW55IG9sZCBzdHJpbmcsIG9yIHdlJ3ZlIGZvdW5kIGFuCisJICAgICAqIGlkZW50aWZpZXIsIHN0b3Agc2VhcmNoaW5nLiAqLworCSAgICBpZiAodGhpc19jbGFzcyA+IDIpCisJCXRoaXNfY2xhc3MgPSAyOworCSAgICBpZiAoIShmaW5kX3R5cGUgJiBGSU5EX1NUUklORykgfHwgdGhpc19jbGFzcyA9PSAyKQorCQlicmVhazsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICB3aGlsZSAoY29sID4gMAorCQkgICAgJiYgKChpID09IDAKKwkJCSAgICA/IHZpbV9pc3dvcmRjKHB0cltjb2wgLSAxXSkKKwkJCSAgICA6ICghdmltX2lzd2hpdGUocHRyW2NvbCAtIDFdKQorCQkJCSYmICghKGZpbmRfdHlwZSAmIEZJTkRfSURFTlQpCisJCQkJICAgIHx8ICF2aW1faXN3b3JkYyhwdHJbY29sIC0gMV0pKSkpCisjaWYgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpICYmIGRlZmluZWQoRkVBVF9CRVZBTCkKKwkJCXx8ICgoZmluZF90eXBlICYgRklORF9FVkFMKQorCQkJICAgICYmIGNvbCA+IDEKKwkJCSAgICAmJiBmaW5kX2lzX2V2YWxfaXRlbShwdHIgKyBjb2wgLSAxLCAmY29sLAorCQkJCQkJCSAgICAgICAmYm4sIEJBQ0tXQVJEKSkKKyNlbmRpZgorCQkJKSkKKwkJLS1jb2w7CisKKwkgICAgLyogSWYgd2UgZG9uJ3Qgd2FudCBqdXN0IGFueSBvbGQgc3RyaW5nLCBvciB3ZSd2ZSBmb3VuZCBhbgorCSAgICAgKiBpZGVudGlmaWVyLCBzdG9wIHNlYXJjaGluZy4gKi8KKwkgICAgaWYgKCEoZmluZF90eXBlICYgRklORF9TVFJJTkcpIHx8IHZpbV9pc3dvcmRjKHB0cltjb2xdKSkKKwkJYnJlYWs7CisJfQorICAgIH0KKworICAgIGlmIChwdHJbY29sXSA9PSBOVUwgfHwgKGkgPT0gMCAmJiAoCisjaWZkZWYgRkVBVF9NQllURQorCQloYXNfbWJ5dGUgPyB0aGlzX2NsYXNzICE9IDIgOgorI2VuZGlmCisJCSF2aW1faXN3b3JkYyhwdHJbY29sXSkpKSkKKyAgICB7CisJLyoKKwkgKiBkaWRuJ3QgZmluZCBhbiBpZGVudGlmaWVyIG9yIHN0cmluZworCSAqLworCWlmIChmaW5kX3R5cGUgJiBGSU5EX1NUUklORykKKwkgICAgRU1TRyhfKCJFMzQ4OiBObyBzdHJpbmcgdW5kZXIgY3Vyc29yIikpOworCWVsc2UKKwkgICAgRU1TRyhfKCJFMzQ5OiBObyBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciIpKTsKKwlyZXR1cm4gMDsKKyAgICB9CisgICAgcHRyICs9IGNvbDsKKyAgICAqc3RyaW5nID0gcHRyOworCisgICAgLyoKKyAgICAgKiAzLiBGaW5kIHRoZSBlbmQgaWYgdGhlIGlkZW50aWZpZXIvc3RyaW5nLgorICAgICAqLworI2lmIGRlZmluZWQoRkVBVF9ORVRCRUFOU19JTlRHKSAmJiBkZWZpbmVkKEZFQVRfQkVWQUwpCisgICAgYm4gPSAwOworICAgIHN0YXJ0Y29sIC09IGNvbDsKKyNlbmRpZgorICAgIGNvbCA9IDA7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChoYXNfbWJ5dGUpCisgICAgeworCS8qIFNlYXJjaCBmb3IgcG9pbnQgb2YgY2hhbmdpbmcgbXVsdGlieXRlIGNoYXJhY3RlciBjbGFzcy4gKi8KKwl0aGlzX2NsYXNzID0gbWJfZ2V0X2NsYXNzKHB0cik7CisJd2hpbGUgKHB0cltjb2xdICE9IE5VTAorCQkmJiAoKGkgPT0gMCA/IG1iX2dldF9jbGFzcyhwdHIgKyBjb2wpID09IHRoaXNfY2xhc3MKKwkJCSAgICA6IG1iX2dldF9jbGFzcyhwdHIgKyBjb2wpICE9IDApCisjIGlmIGRlZmluZWQoRkVBVF9ORVRCRUFOU19JTlRHKSAmJiBkZWZpbmVkKEZFQVRfQkVWQUwpCisJCSAgICB8fCAoKGZpbmRfdHlwZSAmIEZJTkRfRVZBTCkKKwkJCSYmIGNvbCA8PSAoaW50KXN0YXJ0Y29sCisJCQkmJiBmaW5kX2lzX2V2YWxfaXRlbShwdHIgKyBjb2wsICZjb2wsICZibiwgRk9SV0FSRCkpCisjIGVuZGlmCisJCSkpCisJICAgIGNvbCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHB0ciArIGNvbCk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCXdoaWxlICgoaSA9PSAwID8gdmltX2lzd29yZGMocHRyW2NvbF0pCisJCSAgICAgICA6IChwdHJbY29sXSAhPSBOVUwgJiYgIXZpbV9pc3doaXRlKHB0cltjb2xdKSkpCisjIGlmIGRlZmluZWQoRkVBVF9ORVRCRUFOU19JTlRHKSAmJiBkZWZpbmVkKEZFQVRfQkVWQUwpCisJCSAgICB8fCAoKGZpbmRfdHlwZSAmIEZJTkRfRVZBTCkKKwkJCSYmIGNvbCA8PSAoaW50KXN0YXJ0Y29sCisJCQkmJiBmaW5kX2lzX2V2YWxfaXRlbShwdHIgKyBjb2wsICZjb2wsICZibiwgRk9SV0FSRCkpCisjIGVuZGlmCisJCSkKKwl7CisJICAgICsrY29sOworCX0KKworICAgIHJldHVybiBjb2w7Cit9CisKKy8qCisgKiBQcmVwYXJlIGZvciByZWRvIG9mIGEgbm9ybWFsIGNvbW1hbmQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcHJlcF9yZWRvX2NtZChjYXApCisgICAgY21kYXJnX1QgICpjYXA7Cit7CisgICAgcHJlcF9yZWRvKGNhcC0+b2FwLT5yZWduYW1lLCBjYXAtPmNvdW50MCwKKwkJCQkgICAgIE5VTCwgY2FwLT5jbWRjaGFyLCBOVUwsIE5VTCwgY2FwLT5uY2hhcik7Cit9CisKKy8qCisgKiBQcmVwYXJlIGZvciByZWRvIG9mIGFueSBjb21tYW5kLgorICogTm90ZSB0aGF0IG9ubHkgdGhlIGxhc3QgYXJndW1lbnQgY2FuIGJlIGEgbXVsdGktYnl0ZSBjaGFyLgorICovCisgICAgc3RhdGljIHZvaWQKK3ByZXBfcmVkbyhyZWduYW1lLCBudW0sIGNtZDEsIGNtZDIsIGNtZDMsIGNtZDQsIGNtZDUpCisgICAgaW50CSAgICByZWduYW1lOworICAgIGxvbmcgICAgbnVtOworICAgIGludAkgICAgY21kMTsKKyAgICBpbnQJICAgIGNtZDI7CisgICAgaW50CSAgICBjbWQzOworICAgIGludAkgICAgY21kNDsKKyAgICBpbnQJICAgIGNtZDU7Cit7CisgICAgUmVzZXRSZWRvYnVmZigpOworICAgIGlmIChyZWduYW1lICE9IDApCS8qIHlhbmsgZnJvbSBzcGVjaWZpZWQgYnVmZmVyICovCisgICAgeworCUFwcGVuZENoYXJUb1JlZG9idWZmKCciJyk7CisJQXBwZW5kQ2hhclRvUmVkb2J1ZmYocmVnbmFtZSk7CisgICAgfQorICAgIGlmIChudW0pCisJQXBwZW5kTnVtYmVyVG9SZWRvYnVmZihudW0pOworCisgICAgaWYgKGNtZDEgIT0gTlVMKQorCUFwcGVuZENoYXJUb1JlZG9idWZmKGNtZDEpOworICAgIGlmIChjbWQyICE9IE5VTCkKKwlBcHBlbmRDaGFyVG9SZWRvYnVmZihjbWQyKTsKKyAgICBpZiAoY21kMyAhPSBOVUwpCisJQXBwZW5kQ2hhclRvUmVkb2J1ZmYoY21kMyk7CisgICAgaWYgKGNtZDQgIT0gTlVMKQorCUFwcGVuZENoYXJUb1JlZG9idWZmKGNtZDQpOworICAgIGlmIChjbWQ1ICE9IE5VTCkKKwlBcHBlbmRDaGFyVG9SZWRvYnVmZihjbWQ1KTsKK30KKworLyoKKyAqIGNoZWNrIGZvciBvcGVyYXRvciBhY3RpdmUgYW5kIGNsZWFyIGl0CisgKgorICogcmV0dXJuIFRSVUUgaWYgb3BlcmF0b3Igd2FzIGFjdGl2ZQorICovCisgICAgc3RhdGljIGludAorY2hlY2tjbGVhcm9wKG9hcCkKKyAgICBvcGFyZ19UCSpvYXA7Cit7CisgICAgaWYgKG9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApCisJcmV0dXJuIEZBTFNFOworICAgIGNsZWFyb3BiZWVwKG9hcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBjaGVjayBmb3Igb3BlcmF0b3Igb3IgVmlzdWFsIGFjdGl2ZSBhbmQgY2xlYXIgaXQKKyAqCisgKiByZXR1cm4gVFJVRSBpZiBvcGVyYXRvciB3YXMgYWN0aXZlCisgKi8KKyAgICBzdGF0aWMgaW50CitjaGVja2NsZWFyb3BxKG9hcCkKKyAgICBvcGFyZ19UCSpvYXA7Cit7CisgICAgaWYgKG9hcC0+b3BfdHlwZSA9PSBPUF9OT1AKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCSAgICAmJiAhVklzdWFsX2FjdGl2ZQorI2VuZGlmCisJICAgICkKKwlyZXR1cm4gRkFMU0U7CisgICAgY2xlYXJvcGJlZXAob2FwKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworICAgIHN0YXRpYyB2b2lkCitjbGVhcm9wKG9hcCkKKyAgICBvcGFyZ19UCSpvYXA7Cit7CisgICAgb2FwLT5vcF90eXBlID0gT1BfTk9QOworICAgIG9hcC0+cmVnbmFtZSA9IDA7CisgICAgb2FwLT5tb3Rpb25fZm9yY2UgPSBOVUw7CisgICAgb2FwLT51c2VfcmVnX29uZSA9IEZBTFNFOworfQorCisgICAgc3RhdGljIHZvaWQKK2NsZWFyb3BiZWVwKG9hcCkKKyAgICBvcGFyZ19UCSpvYXA7Cit7CisgICAgY2xlYXJvcChvYXApOworICAgIGJlZXBfZmx1c2goKTsKK30KKworI2lmZGVmIEZFQVRfVklTVUFMCisvKgorICogUmVtb3ZlIHRoZSBzaGlmdCBtb2RpZmllciBmcm9tIGEgc3BlY2lhbCBrZXkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordW5zaGlmdF9zcGVjaWFsKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIHN3aXRjaCAoY2FwLT5jbWRjaGFyKQorICAgIHsKKwljYXNlIEtfU19SSUdIVDoJY2FwLT5jbWRjaGFyID0gS19SSUdIVDsgYnJlYWs7CisJY2FzZSBLX1NfTEVGVDoJY2FwLT5jbWRjaGFyID0gS19MRUZUOyBicmVhazsKKwljYXNlIEtfU19VUDoJY2FwLT5jbWRjaGFyID0gS19VUDsgYnJlYWs7CisJY2FzZSBLX1NfRE9XTjoJY2FwLT5jbWRjaGFyID0gS19ET1dOOyBicmVhazsKKwljYXNlIEtfU19IT01FOgljYXAtPmNtZGNoYXIgPSBLX0hPTUU7IGJyZWFrOworCWNhc2UgS19TX0VORDoJY2FwLT5jbWRjaGFyID0gS19FTkQ7IGJyZWFrOworICAgIH0KKyAgICBjYXAtPmNtZGNoYXIgPSBzaW1wbGlmeV9rZXkoY2FwLT5jbWRjaGFyLCAmbW9kX21hc2spOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfQ01ETF9JTkZPKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJvdXRpbmVzIGZvciBkaXNwbGF5aW5nIGEgcGFydGx5IHR5cGVkIGNvbW1hbmQKKyAqLworCisjaWZkZWYgRkVBVF9WSVNVQUwJLyogbmVlZCByb29tIGZvciBzaXplIG9mIFZpc3VhbCBhcmVhICovCisjIGRlZmluZSBTSE9XQ01EX0JVRkxFTiBTSE9XQ01EX0NPTFMgKyAxICsgMzAKKyNlbHNlCisjIGRlZmluZSBTSE9XQ01EX0JVRkxFTiBTSE9XQ01EX0NPTFMgKyAxCisjZW5kaWYKK3N0YXRpYyBjaGFyX3UJc2hvd2NtZF9idWZbU0hPV0NNRF9CVUZMRU5dOworc3RhdGljIGNoYXJfdQlvbGRfc2hvd2NtZF9idWZbU0hPV0NNRF9CVUZMRU5dOyAgLyogRm9yIHB1c2hfc2hvd2NtZCgpICovCitzdGF0aWMgaW50CXNob3djbWRfaXNfY2xlYXIgPSBUUlVFOworc3RhdGljIGludAlzaG93Y21kX3Zpc3VhbCA9IEZBTFNFOworCitzdGF0aWMgdm9pZCBkaXNwbGF5X3Nob3djbWQgX19BUkdTKCh2b2lkKSk7CisKKyAgICB2b2lkCitjbGVhcl9zaG93Y21kKCkKK3sKKyAgICBpZiAoIXBfc2MpCisJcmV0dXJuOworCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSAmJiAhY2hhcl9hdmFpbCgpKQorICAgIHsKKwlpbnQJCWkgPSBsdChWSXN1YWwsIGN1cndpbi0+d19jdXJzb3IpOworCWxvbmcJCWxpbmVzOworCWNvbG5yX1QJCWxlZnRjb2wsIHJpZ2h0Y29sOworCWxpbmVucl9UCXRvcCwgYm90OworCisJLyogU2hvdyB0aGUgc2l6ZSBvZiB0aGUgVmlzdWFsIGFyZWEuICovCisJaWYgKGkpCisJeworCSAgICB0b3AgPSBWSXN1YWwubG51bTsKKwkgICAgYm90ID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCX0KKwllbHNlCisJeworCSAgICB0b3AgPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJICAgIGJvdCA9IFZJc3VhbC5sbnVtOworCX0KKyMgaWZkZWYgRkVBVF9GT0xESU5HCisJLyogSW5jbHVkZSBjbG9zZWQgZm9sZHMgYXMgYSB3aG9sZS4gKi8KKwloYXNGb2xkaW5nKHRvcCwgJnRvcCwgTlVMTCk7CisJaGFzRm9sZGluZyhib3QsIE5VTEwsICZib3QpOworIyBlbmRpZgorCWxpbmVzID0gYm90IC0gdG9wICsgMTsKKworCWlmIChWSXN1YWxfbW9kZSA9PSBDdHJsX1YpCisJeworCSAgICBnZXR2Y29scyhjdXJ3aW4sICZjdXJ3aW4tPndfY3Vyc29yLCAmVklzdWFsLCAmbGVmdGNvbCwgJnJpZ2h0Y29sKTsKKwkgICAgc3ByaW50ZigoY2hhciAqKXNob3djbWRfYnVmLCAiJWxkeCVsZCIsIGxpbmVzLAorCQkJCQkgICAgICAobG9uZykocmlnaHRjb2wgLSBsZWZ0Y29sICsgMSkpOworCX0KKwllbHNlIGlmIChWSXN1YWxfbW9kZSA9PSAnVicgfHwgVklzdWFsLmxudW0gIT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCSAgICBzcHJpbnRmKChjaGFyICopc2hvd2NtZF9idWYsICIlbGQiLCBsaW5lcyk7CisJZWxzZQorCSAgICBzcHJpbnRmKChjaGFyICopc2hvd2NtZF9idWYsICIlbGQiLCAobG9uZykoaQorCQkgICAgPyBjdXJ3aW4tPndfY3Vyc29yLmNvbCAtIFZJc3VhbC5jb2wKKwkJICAgIDogVklzdWFsLmNvbCAtIGN1cndpbi0+d19jdXJzb3IuY29sKSArICgqcF9zZWwgIT0gJ2UnKSk7CisJc2hvd2NtZF9idWZbU0hPV0NNRF9DT0xTXSA9IE5VTDsJLyogdHJ1bmNhdGUgKi8KKwlzaG93Y21kX3Zpc3VhbCA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwlzaG93Y21kX2J1ZlswXSA9IE5VTDsKKwlzaG93Y21kX3Zpc3VhbCA9IEZBTFNFOworCisJLyogRG9uJ3QgYWN0dWFsbHkgZGlzcGxheSBzb21ldGhpbmcgaWYgdGhlcmUgaXMgbm90aGluZyB0byBjbGVhci4gKi8KKwlpZiAoc2hvd2NtZF9pc19jbGVhcikKKwkgICAgcmV0dXJuOworICAgIH0KKworICAgIGRpc3BsYXlfc2hvd2NtZCgpOworfQorCisvKgorICogQWRkICdjJyB0byBzdHJpbmcgb2Ygc2hvd24gY29tbWFuZCBjaGFycy4KKyAqIFJldHVybiBUUlVFIGlmIG91dHB1dCBoYXMgYmVlbiB3cml0dGVuIChhbmQgc2V0Y3Vyc29yKCkgaGFzIGJlZW4gY2FsbGVkKS4KKyAqLworICAgIGludAorYWRkX3RvX3Nob3djbWQoYykKKyAgICBpbnQJCWM7Cit7CisgICAgY2hhcl91CSpwOworICAgIGludAkJb2xkX2xlbjsKKyAgICBpbnQJCWV4dHJhX2xlbjsKKyAgICBpbnQJCW92ZXJmbG93OworI2lmIGRlZmluZWQoRkVBVF9NT1VTRSkKKyAgICBpbnQJCWk7CisgICAgc3RhdGljIGludAlpZ25vcmVbXSA9CisgICAgeworI2lmZGVmIEZFQVRfR1VJCisJS19WRVJfU0NST0xMQkFSLCBLX0hPUl9TQ1JPTExCQVIsCisJS19MRUZUTU9VU0VfTk0sIEtfTEVGVFJFTEVBU0VfTk0sCisjZW5kaWYKKwlLX0lHTk9SRSwKKwlLX0xFRlRNT1VTRSwgS19MRUZURFJBRywgS19MRUZUUkVMRUFTRSwKKwlLX01JRERMRU1PVVNFLCBLX01JRERMRURSQUcsIEtfTUlERExFUkVMRUFTRSwKKwlLX1JJR0hUTU9VU0UsIEtfUklHSFREUkFHLCBLX1JJR0hUUkVMRUFTRSwKKwlLX01PVVNFRE9XTiwgS19NT1VTRVVQLAorCUtfWDFNT1VTRSwgS19YMURSQUcsIEtfWDFSRUxFQVNFLCBLX1gyTU9VU0UsIEtfWDJEUkFHLCBLX1gyUkVMRUFTRSwKKwkwCisgICAgfTsKKyNlbmRpZgorCisgICAgaWYgKCFwX3NjKQorCXJldHVybiBGQUxTRTsKKworICAgIGlmIChzaG93Y21kX3Zpc3VhbCkKKyAgICB7CisJc2hvd2NtZF9idWZbMF0gPSBOVUw7CisJc2hvd2NtZF92aXN1YWwgPSBGQUxTRTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEZFQVRfTU9VU0UpCisgICAgLyogSWdub3JlIGtleXMgdGhhdCBhcmUgc2Nyb2xsYmFyIHVwZGF0ZXMgYW5kIG1vdXNlIGNsaWNrcyAqLworICAgIGlmIChJU19TUEVDSUFMKGMpKQorCWZvciAoaSA9IDA7IGlnbm9yZVtpXSAhPSAwOyArK2kpCisJICAgIGlmIChpZ25vcmVbaV0gPT0gYykKKwkJcmV0dXJuIEZBTFNFOworI2VuZGlmCisKKyAgICBwID0gdHJhbnNjaGFyKGMpOworICAgIG9sZF9sZW4gPSAoaW50KVNUUkxFTihzaG93Y21kX2J1Zik7CisgICAgZXh0cmFfbGVuID0gKGludClTVFJMRU4ocCk7CisgICAgb3ZlcmZsb3cgPSBvbGRfbGVuICsgZXh0cmFfbGVuIC0gU0hPV0NNRF9DT0xTOworICAgIGlmIChvdmVyZmxvdyA+IDApCisJU1RSQ1BZKHNob3djbWRfYnVmLCBzaG93Y21kX2J1ZiArIG92ZXJmbG93KTsKKyAgICBTVFJDQVQoc2hvd2NtZF9idWYsIHApOworCisgICAgaWYgKGNoYXJfYXZhaWwoKSkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBkaXNwbGF5X3Nob3djbWQoKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisgICAgdm9pZAorYWRkX3RvX3Nob3djbWRfYyhjKQorICAgIGludAkJYzsKK3sKKyAgICBpZiAoIWFkZF90b19zaG93Y21kKGMpKQorCXNldGN1cnNvcigpOworfQorCisvKgorICogRGVsZXRlICdsZW4nIGNoYXJhY3RlcnMgZnJvbSB0aGUgZW5kIG9mIHRoZSBzaG93biBjb21tYW5kLgorICovCisgICAgc3RhdGljIHZvaWQKK2RlbF9mcm9tX3Nob3djbWQobGVuKQorICAgIGludAkgICAgbGVuOworeworICAgIGludAkgICAgb2xkX2xlbjsKKworICAgIGlmICghcF9zYykKKwlyZXR1cm47CisKKyAgICBvbGRfbGVuID0gKGludClTVFJMRU4oc2hvd2NtZF9idWYpOworICAgIGlmIChsZW4gPiBvbGRfbGVuKQorCWxlbiA9IG9sZF9sZW47CisgICAgc2hvd2NtZF9idWZbb2xkX2xlbiAtIGxlbl0gPSBOVUw7CisKKyAgICBpZiAoIWNoYXJfYXZhaWwoKSkKKwlkaXNwbGF5X3Nob3djbWQoKTsKK30KKworLyoKKyAqIHB1c2hfc2hvd2NtZCgpIGFuZCBwb3Bfc2hvd2NtZCgpIGFyZSB1c2VkIHdoZW4gd2FpdGluZyBmb3IgdGhlIHVzZXIgdG8gdHlwZQorICogc29tZXRoaW5nIGFuZCB0aGVyZSBpcyBhIHBhcnRpYWwgbWFwcGluZy4KKyAqLworICAgIHZvaWQKK3B1c2hfc2hvd2NtZCgpCit7CisgICAgaWYgKHBfc2MpCisJU1RSQ1BZKG9sZF9zaG93Y21kX2J1Ziwgc2hvd2NtZF9idWYpOworfQorCisgICAgdm9pZAorcG9wX3Nob3djbWQoKQoreworICAgIGlmICghcF9zYykKKwlyZXR1cm47CisKKyAgICBTVFJDUFkoc2hvd2NtZF9idWYsIG9sZF9zaG93Y21kX2J1Zik7CisKKyAgICBkaXNwbGF5X3Nob3djbWQoKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitkaXNwbGF5X3Nob3djbWQoKQoreworICAgIGludAkgICAgbGVuOworCisgICAgY3Vyc29yX29mZigpOworCisgICAgbGVuID0gKGludClTVFJMRU4oc2hvd2NtZF9idWYpOworICAgIGlmIChsZW4gPT0gMCkKKwlzaG93Y21kX2lzX2NsZWFyID0gVFJVRTsKKyAgICBlbHNlCisgICAgeworCXNjcmVlbl9wdXRzKHNob3djbWRfYnVmLCAoaW50KVJvd3MgLSAxLCBzY19jb2wsIDApOworCXNob3djbWRfaXNfY2xlYXIgPSBGQUxTRTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNsZWFyIHRoZSByZXN0IG9mIGFuIG9sZCBtZXNzYWdlIGJ5IG91dHB1dGluZyB1cCB0byBTSE9XQ01EX0NPTFMgc3BhY2VzCisgICAgICovCisgICAgc2NyZWVuX3B1dHMoKGNoYXJfdSAqKSIgICAgICAgICAgIiArIGxlbiwgKGludClSb3dzIC0gMSwgc2NfY29sICsgbGVuLCAwKTsKKworICAgIHNldGN1cnNvcigpOwkgICAgLyogcHV0IGN1cnNvciBiYWNrIHdoZXJlIGl0IGJlbG9uZ3MgKi8KK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisvKgorICogV2hlbiAiY2hlY2siIGlzIEZBTFNFLCBwcmVwYXJlIGZvciBjb21tYW5kcyB0aGF0IHNjcm9sbCB0aGUgd2luZG93LgorICogV2hlbiAiY2hlY2siIGlzIFRSVUUsIHRha2UgY2FyZSBvZiBzY3JvbGwtYmluZGluZyBhZnRlciB0aGUgd2luZG93IGhhcworICogc2Nyb2xsZWQuICBDYWxsZWQgZnJvbSBub3JtYWxfY21kKCkgYW5kIGVkaXQoKS4KKyAqLworICAgIHZvaWQKK2RvX2NoZWNrX3Njcm9sbGJpbmQoY2hlY2spCisgICAgaW50CQljaGVjazsKK3sKKyAgICBzdGF0aWMgd2luX1QJKm9sZF9jdXJ3aW4gPSBOVUxMOworICAgIHN0YXRpYyBsaW5lbnJfVAlvbGRfdG9wbGluZSA9IDA7CisjaWZkZWYgRkVBVF9ESUZGCisgICAgc3RhdGljIGludAkJb2xkX3RvcGZpbGwgPSAwOworI2VuZGlmCisgICAgc3RhdGljIGJ1Zl9UCSpvbGRfYnVmID0gTlVMTDsKKyAgICBzdGF0aWMgY29sbnJfVAlvbGRfbGVmdGNvbCA9IDA7CisKKyAgICBpZiAoY2hlY2sgJiYgY3Vyd2luLT53X3Bfc2NiKQorICAgIHsKKwkvKiBJZiBhICI6c3luY2JpbmQiIGNvbW1hbmQgd2FzIGp1c3QgdXNlZCwgZG9uJ3Qgc2Nyb2xsLCBvbmx5IHJlc2V0CisJICogdGhlIHZhbHVlcy4gKi8KKwlpZiAoZGlkX3N5bmNiaW5kKQorCSAgICBkaWRfc3luY2JpbmQgPSBGQUxTRTsKKwllbHNlIGlmIChjdXJ3aW4gPT0gb2xkX2N1cndpbikKKwl7CisJICAgIC8qCisJICAgICAqIFN5bmNocm9uaXplIG90aGVyIHdpbmRvd3MsIGFzIG5lY2Vzc2FyeSBhY2NvcmRpbmcgdG8KKwkgICAgICogJ3Njcm9sbGJpbmQnLiAgRG9uJ3QgZG8gdGhpcyBhZnRlciBhbiAiOmVkaXQiIGNvbW1hbmQsIGV4Y2VwdAorCSAgICAgKiB3aGVuICdkaWZmJyBpcyBzZXQuCisJICAgICAqLworCSAgICBpZiAoKGN1cndpbi0+d19idWZmZXIgPT0gb2xkX2J1ZgorI2lmZGVmIEZFQVRfRElGRgorCQkJfHwgY3Vyd2luLT53X3BfZGlmZgorI2VuZGlmCisJCSkKKwkJJiYgKGN1cndpbi0+d190b3BsaW5lICE9IG9sZF90b3BsaW5lCisjaWZkZWYgRkVBVF9ESUZGCisJCQl8fCBjdXJ3aW4tPndfdG9wZmlsbCAhPSBvbGRfdG9wZmlsbAorI2VuZGlmCisJCQl8fCBjdXJ3aW4tPndfbGVmdGNvbCAhPSBvbGRfbGVmdGNvbCkpCisJICAgIHsKKwkJY2hlY2tfc2Nyb2xsYmluZChjdXJ3aW4tPndfdG9wbGluZSAtIG9sZF90b3BsaW5lLAorCQkJKGxvbmcpKGN1cndpbi0+d19sZWZ0Y29sIC0gb2xkX2xlZnRjb2wpKTsKKwkgICAgfQorCX0KKwllbHNlIGlmICh2aW1fc3RyY2hyKHBfc2JvLCAnaicpKSAvKiBqdW1wIGZsYWcgc2V0IGluICdzY3JvbGxvcHQnICovCisJeworCSAgICAvKgorCSAgICAgKiBXaGVuIHN3aXRjaGluZyBiZXR3ZWVuIHdpbmRvd3MsIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxhdGl2ZQorCSAgICAgKiB2ZXJ0aWNhbCBvZmZzZXQgaXMgdmFsaWQgZm9yIHRoZSBuZXcgd2luZG93LiAgVGhlIHJlbGF0aXZlCisJICAgICAqIG9mZnNldCBpcyBpbnZhbGlkIHdoZW5ldmVyIGFub3RoZXIgJ3Njcm9sbGJpbmQnIHdpbmRvdyBoYXMKKwkgICAgICogc2Nyb2xsZWQgdG8gYSBwb2ludCB0aGF0IHdvdWxkIGZvcmNlIHRoZSBjdXJyZW50IHdpbmRvdyB0bworCSAgICAgKiBzY3JvbGwgcGFzdCB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBpdHMgYnVmZmVyLiAgV2hlbiB0aGUKKwkgICAgICogcmVzeW5jIGlzIHBlcmZvcm1lZCwgc29tZSBvZiB0aGUgb3RoZXIgJ3Njcm9sbGJpbmQnIHdpbmRvd3MgbWF5CisJICAgICAqIG5lZWQgdG8ganVtcCBzbyB0aGF0IHRoZSBjdXJyZW50IHdpbmRvdydzIHJlbGF0aXZlIHBvc2l0aW9uIGlzCisJICAgICAqIHZpc2libGUgb24tc2NyZWVuLgorCSAgICAgKi8KKwkgICAgY2hlY2tfc2Nyb2xsYmluZChjdXJ3aW4tPndfdG9wbGluZSAtIGN1cndpbi0+d19zY2JpbmRfcG9zLCAwTCk7CisJfQorCWN1cndpbi0+d19zY2JpbmRfcG9zID0gY3Vyd2luLT53X3RvcGxpbmU7CisgICAgfQorCisgICAgb2xkX2N1cndpbiA9IGN1cndpbjsKKyAgICBvbGRfdG9wbGluZSA9IGN1cndpbi0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfRElGRgorICAgIG9sZF90b3BmaWxsID0gY3Vyd2luLT53X3RvcGZpbGw7CisjZW5kaWYKKyAgICBvbGRfYnVmID0gY3Vyd2luLT53X2J1ZmZlcjsKKyAgICBvbGRfbGVmdGNvbCA9IGN1cndpbi0+d19sZWZ0Y29sOworfQorCisvKgorICogU3luY2hyb25pemUgYW55IHdpbmRvd3MgdGhhdCBoYXZlICJzY3JvbGxiaW5kIiBzZXQsIGJhc2VkIG9uIHRoZQorICogbnVtYmVyIG9mIHJvd3MgYnkgd2hpY2ggdGhlIGN1cnJlbnQgd2luZG93IGhhcyBjaGFuZ2VkCisgKiAoMTk5OC0xMS0wMiAxNjoyMTowMSAgUi4gRWR3YXJkIFJhbHN0b24gPGVyYWxzdG9uQGNvbXB1dGVyLm9yZz4pCisgKi8KKyAgICB2b2lkCitjaGVja19zY3JvbGxiaW5kKHRvcGxpbmVfZGlmZiwgbGVmdGNvbF9kaWZmKQorICAgIGxpbmVucl9UCXRvcGxpbmVfZGlmZjsKKyAgICBsb25nCWxlZnRjb2xfZGlmZjsKK3sKKyAgICBpbnQJCXdhbnRfdmVyOworICAgIGludAkJd2FudF9ob3I7CisgICAgd2luX1QJKm9sZF9jdXJ3aW4gPSBjdXJ3aW47CisgICAgYnVmX1QJKm9sZF9jdXJidWYgPSBjdXJidWY7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpbnQJCW9sZF9WSXN1YWxfc2VsZWN0ID0gVklzdWFsX3NlbGVjdDsKKyAgICBpbnQJCW9sZF9WSXN1YWxfYWN0aXZlID0gVklzdWFsX2FjdGl2ZTsKKyNlbmRpZgorICAgIGNvbG5yX1QJdGd0X2xlZnRjb2wgPSBjdXJ3aW4tPndfbGVmdGNvbDsKKyAgICBsb25nCXRvcGxpbmU7CisgICAgbG9uZwl5OworCisgICAgLyoKKyAgICAgKiBjaGVjayAnc2Nyb2xsb3B0JyBzdHJpbmcgZm9yIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHNjcm9sbCBvcHRpb25zCisgICAgICovCisgICAgd2FudF92ZXIgPSAodmltX3N0cmNocihwX3NibywgJ3YnKSAmJiB0b3BsaW5lX2RpZmYgIT0gMCk7CisjaWZkZWYgRkVBVF9ESUZGCisgICAgd2FudF92ZXIgfD0gb2xkX2N1cndpbi0+d19wX2RpZmY7CisjZW5kaWYKKyAgICB3YW50X2hvciA9ICh2aW1fc3RyY2hyKHBfc2JvLCAnaCcpICYmIChsZWZ0Y29sX2RpZmYgfHwgdG9wbGluZV9kaWZmICE9IDApKTsKKworICAgIC8qCisgICAgICogbG9vcCB0aHJvdWdoIHRoZSBzY3JvbGxib3VuZCB3aW5kb3dzIGFuZCBzY3JvbGwgYWNjb3JkaW5nbHkKKyAgICAgKi8KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIFZJc3VhbF9zZWxlY3QgPSBWSXN1YWxfYWN0aXZlID0gMDsKKyNlbmRpZgorICAgIGZvciAoY3Vyd2luID0gZmlyc3R3aW47IGN1cndpbjsgY3Vyd2luID0gY3Vyd2luLT53X25leHQpCisgICAgeworCWN1cmJ1ZiA9IGN1cndpbi0+d19idWZmZXI7CisJLyogc2tpcCBvcmlnaW5hbCB3aW5kb3cgIGFuZCB3aW5kb3dzIHdpdGggJ25vc2Nyb2xsYmluZCcgKi8KKwlpZiAoY3Vyd2luICE9IG9sZF9jdXJ3aW4gJiYgY3Vyd2luLT53X3Bfc2NiKQorCXsKKwkgICAgLyoKKwkgICAgICogZG8gdGhlIHZlcnRpY2FsIHNjcm9sbAorCSAgICAgKi8KKwkgICAgaWYgKHdhbnRfdmVyKQorCSAgICB7CisjaWZkZWYgRkVBVF9ESUZGCisJCWlmIChvbGRfY3Vyd2luLT53X3BfZGlmZiAmJiBjdXJ3aW4tPndfcF9kaWZmKQorCQl7CisJCSAgICBkaWZmX3NldF90b3BsaW5lKG9sZF9jdXJ3aW4sIGN1cndpbik7CisJCX0KKwkJZWxzZQorI2VuZGlmCisJCXsKKwkJICAgIGN1cndpbi0+d19zY2JpbmRfcG9zICs9IHRvcGxpbmVfZGlmZjsKKwkJICAgIHRvcGxpbmUgPSBjdXJ3aW4tPndfc2NiaW5kX3BvczsKKwkJICAgIGlmICh0b3BsaW5lID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCQl0b3BsaW5lID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJCSAgICBpZiAodG9wbGluZSA8IDEpCisJCQl0b3BsaW5lID0gMTsKKworCQkgICAgeSA9IHRvcGxpbmUgLSBjdXJ3aW4tPndfdG9wbGluZTsKKwkJICAgIGlmICh5ID4gMCkKKwkJCXNjcm9sbHVwKHksIEZBTFNFKTsKKwkJICAgIGVsc2UKKwkJCXNjcm9sbGRvd24oLXksIEZBTFNFKTsKKwkJfQorCisJCXJlZHJhd19sYXRlcihWQUxJRCk7CisJCWN1cnNvcl9jb3JyZWN0KCk7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJCWN1cndpbi0+d19yZWRyX3N0YXR1cyA9IFRSVUU7CisjZW5kaWYKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIGRvIHRoZSBob3Jpem9udGFsIHNjcm9sbAorCSAgICAgKi8KKwkgICAgaWYgKHdhbnRfaG9yICYmIGN1cndpbi0+d19sZWZ0Y29sICE9IHRndF9sZWZ0Y29sKQorCSAgICB7CisJCWN1cndpbi0+d19sZWZ0Y29sID0gdGd0X2xlZnRjb2w7CisJCWxlZnRjb2xfY2hhbmdlZCgpOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogcmVzZXQgY3VycmVudC13aW5kb3cKKyAgICAgKi8KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIFZJc3VhbF9zZWxlY3QgPSBvbGRfVklzdWFsX3NlbGVjdDsKKyAgICBWSXN1YWxfYWN0aXZlID0gb2xkX1ZJc3VhbF9hY3RpdmU7CisjZW5kaWYKKyAgICBjdXJ3aW4gPSBvbGRfY3Vyd2luOworICAgIGN1cmJ1ZiA9IG9sZF9jdXJidWY7Cit9CisjZW5kaWYgLyogI2lmZGVmIEZFQVRfU0NST0xMQklORCAqLworCisvKgorICogQ29tbWFuZCBjaGFyYWN0ZXIgdGhhdCdzIGlnbm9yZWQuCisgKiBVc2VkIGZvciBDVFJMLVEgYW5kIENUUkwtUyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHRlcm1pbmFscyB0aGF0IHVzZQorICogeG9uL3hvZmYKKyAqLworLypBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitudl9pZ25vcmUoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7Cit9CisKKy8qCisgKiBDb21tYW5kIGNoYXJhY3RlciBkb2Vzbid0IGV4aXN0LgorICovCisgICAgc3RhdGljIHZvaWQKK252X2Vycm9yKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKK30KKworLyoKKyAqIDxIZWxwPiBhbmQgPEYxPiBjb21tYW5kcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9oZWxwKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGlmICghY2hlY2tjbGVhcm9wcShjYXAtPm9hcCkpCisJZXhfaGVscChOVUxMKTsKK30KKworLyoKKyAqIENUUkwtQSBhbmQgQ1RSTC1YOiBBZGQgb3Igc3VidHJhY3QgZnJvbSBsZXR0ZXIgb3IgbnVtYmVyIHVuZGVyIGN1cnNvci4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9hZGRzdWIoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaWYgKCFjaGVja2NsZWFyb3BxKGNhcC0+b2FwKQorCSAgICAmJiBkb19hZGRzdWIoKGludCljYXAtPmNtZGNoYXIsIGNhcC0+Y291bnQxKSA9PSBPSykKKwlwcmVwX3JlZG9fY21kKGNhcCk7Cit9CisKKy8qCisgKiBDVFJMLUYsIENUUkwtQiwgZXRjOiBTY3JvbGwgcGFnZSB1cCBvciBkb3duLgorICovCisgICAgc3RhdGljIHZvaWQKK252X3BhZ2UoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaWYgKCFjaGVja2NsZWFyb3AoY2FwLT5vYXApKQorCSh2b2lkKW9uZXBhZ2UoY2FwLT5hcmcsIGNhcC0+Y291bnQxKTsKK30KKworLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mICJnZCIgYW5kICJnRCIgY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9nZChvYXAsIG5jaGFyKQorICAgIG9wYXJnX1QgICAqb2FwOworICAgIGludAkgICAgbmNoYXI7Cit7CisgICAgaW50CQlsZW47CisgICAgY2hhcl91CSpwYXQ7CisgICAgcG9zX1QJb2xkX3BvczsKKyAgICBpbnQJCXQ7CisgICAgaW50CQlzYXZlX3Bfd3M7CisgICAgaW50CQlzYXZlX3Bfc2NzOworICAgIGNoYXJfdQkqcHRyOworCisgICAgaWYgKChsZW4gPSBmaW5kX2lkZW50X3VuZGVyX2N1cnNvcigmcHRyLCBGSU5EX0lERU5UKSkgPT0gMCB8fAorCQkJCQkgICAgICAgKHBhdCA9IGFsbG9jKGxlbiArIDUpKSA9PSBOVUxMKQorICAgIHsKKwljbGVhcm9wYmVlcChvYXApOworCXJldHVybjsKKyAgICB9CisgICAgc3ByaW50ZigoY2hhciAqKXBhdCwgdmltX2lzd29yZHAocHRyKSA/ICJcXDwlLipzXFw+IiA6ICIlLipzIiwgbGVuLCBwdHIpOworICAgIG9sZF9wb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworICAgIHNhdmVfcF93cyA9IHBfd3M7CisgICAgc2F2ZV9wX3NjcyA9IHBfc2NzOworICAgIHBfd3MgPSBGQUxTRTsJLyogZG9uJ3Qgd3JhcCBhcm91bmQgZW5kIG9mIGZpbGUgbm93ICovCisgICAgcF9zY3MgPSBGQUxTRTsJLyogZG9uJ3Qgc3dpdGNoIGlnbm9yZWNhc2Ugb2ZmIG5vdyAqLworCisgICAgLyoKKyAgICAgKiBXaXRoICJnRCIgZ28gdG8gbGluZSAxLgorICAgICAqIFdpdGggImdkIiBTZWFyY2ggYmFjayBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLCB0aGVuIGdvCisgICAgICogYmFjayB1bnRpbCBhIGJsYW5rIGxpbmUuICBJZiB0aGlzIGZhaWxzIGdvIHRvIGxpbmUgMS4KKyAgICAgKi8KKyAgICBpZiAobmNoYXIgPT0gJ0QnIHx8ICFmaW5kcGFyKG9hcCwgQkFDS1dBUkQsIDFMLCAneycsIEZBTFNFKSkKKyAgICB7CisJc2V0cGNtYXJrKCk7CQkJLyogU2V0IGluIGZpbmRwYXIoKSBvdGhlcndpc2UgKi8KKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXdoaWxlIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiAxICYmICpza2lwd2hpdGUobWxfZ2V0X2N1cmxpbmUoKSkgIT0gTlVMKQorCSAgICAtLWN1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICB9CisgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOworCisgICAgLyogU2VhcmNoIGZvcndhcmQgZm9yIHRoZSBpZGVudGlmaWVyLCBpZ25vcmUgY29tbWVudCBsaW5lcy4gKi8KKyAgICB3aGlsZSAoKHQgPSBzZWFyY2hpdChjdXJ3aW4sIGN1cmJ1ZiwgJmN1cndpbi0+d19jdXJzb3IsIEZPUldBUkQsIHBhdCwgMUwsIDAsCisJCQkJCQkJICAgICBSRV9MQVNUKSkgIT0gRkFJTAorI2lmZGVmIEZFQVRfQ09NTUVOVFMKKwkgICAgJiYgZ2V0X2xlYWRlcl9sZW4obWxfZ2V0X2N1cmxpbmUoKSwgTlVMTCwgRkFMU0UpID4gMAorI2VuZGlmCisJICAgICYmIG9sZF9wb3MubG51bSA+IGN1cndpbi0+d19jdXJzb3IubG51bSkKKyAgICB7CisJLyogSWdub3JlIHRoaXMgbGluZSwgY29udGludWUgYXQgc3RhcnQgb2YgbmV4dCBsaW5lLiAqLworCSsrY3Vyd2luLT53X2N1cnNvci5sbnVtOworCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKyAgICB9CisgICAgaWYgKHQgPT0gRkFJTCB8fCBvbGRfcG9zLmxudW0gPD0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorICAgIHsKKwljbGVhcm9wYmVlcChvYXApOworCWN1cndpbi0+d19jdXJzb3IgPSBvbGRfcG9zOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworI2lmZGVmIEZFQVRfRk9MRElORworCWlmICgoZmRvX2ZsYWdzICYgRkRPX1NFQVJDSCkgJiYgS2V5VHlwZWQgJiYgb2FwLT5vcF90eXBlID09IE9QX05PUCkKKwkgICAgZm9sZE9wZW5DdXJzb3IoKTsKKyNlbmRpZgorCS8qICJuIiBzZWFyY2hlcyBmb3J3YXJkIG5vdyAqLworCXJlc2V0X3NlYXJjaF9kaXIoKTsKKyAgICB9CisKKyAgICB2aW1fZnJlZShwYXQpOworICAgIHBfd3MgPSBzYXZlX3Bfd3M7CisgICAgcF9zY3MgPSBzYXZlX3Bfc2NzOworfQorCisvKgorICogTW92ZSAnZGlzdCcgbGluZXMgaW4gZGlyZWN0aW9uICdkaXInLCBjb3VudGluZyBsaW5lcyBieSAqc2NyZWVuKgorICogbGluZXMgcmF0aGVyIHRoYW4gbGluZXMgaW4gdGhlIGZpbGUuCisgKiAnZGlzdCcgbXVzdCBiZSBwb3NpdGl2ZS4KKyAqCisgKiBSZXR1cm4gT0sgaWYgYWJsZSB0byBtb3ZlIGN1cnNvciwgRkFJTCBvdGhlcndpc2UuCisgKi8KKyAgICBzdGF0aWMgaW50Citudl9zY3JlZW5nbyhvYXAsIGRpciwgZGlzdCkKKyAgICBvcGFyZ19UCSpvYXA7CisgICAgaW50CQlkaXI7CisgICAgbG9uZwlkaXN0OworeworICAgIGludAkJbGluZWxlbiA9IGxpbmV0YWJzaXplKG1sX2dldF9jdXJsaW5lKCkpOworICAgIGludAkJcmV0dmFsID0gT0s7CisgICAgaW50CQlhdGVuZCA9IEZBTFNFOworICAgIGludAkJbjsKKyAgICBpbnQJCWNvbF9vZmYxOwkvKiBtYXJnaW4gb2Zmc2V0IGZvciBmaXJzdCBzY3JlZW4gbGluZSAqLworICAgIGludAkJY29sX29mZjI7CS8qIG1hcmdpbiBvZmZzZXQgZm9yIHdyYXBwZWQgc2NyZWVuIGxpbmUgKi8KKyAgICBpbnQJCXdpZHRoMTsJCS8qIHRleHQgd2lkdGggZm9yIGZpcnN0IHNjcmVlbiBsaW5lICovCisgICAgaW50CQl3aWR0aDI7CQkvKiB0ZXN0IHdpZHRoIGZvciB3cmFwcGVkIHNjcmVlbiBsaW5lICovCisKKyAgICBvYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisgICAgb2FwLT5pbmNsdXNpdmUgPSBGQUxTRTsKKworICAgIGNvbF9vZmYxID0gY3Vyd2luX2NvbF9vZmYoKTsKKyAgICBjb2xfb2ZmMiA9IGNvbF9vZmYxIC0gY3Vyd2luX2NvbF9vZmYyKCk7CisgICAgd2lkdGgxID0gV19XSURUSChjdXJ3aW4pIC0gY29sX29mZjE7CisgICAgd2lkdGgyID0gV19XSURUSChjdXJ3aW4pIC0gY29sX29mZjI7CisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGlmIChjdXJ3aW4tPndfd2lkdGggIT0gMCkKKyAgICB7CisjZW5kaWYKKyAgICAgIC8qCisgICAgICAgKiBJbnN0ZWFkIG9mIHN0aWNraW5nIGF0IHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgYnVmZmVyIGxpbmUgd2UKKyAgICAgICAqIHRyeSB0byBzdGljayBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHNjcmVlbi4KKyAgICAgICAqLworICAgICAgaWYgKGN1cndpbi0+d19jdXJzd2FudCA9PSBNQVhDT0wpCisgICAgICB7CisJYXRlbmQgPSBUUlVFOworCXZhbGlkYXRlX3ZpcnRjb2woKTsKKwlpZiAod2lkdGgxIDw9IDApCisJICAgIGN1cndpbi0+d19jdXJzd2FudCA9IDA7CisJZWxzZQorCXsKKwkgICAgY3Vyd2luLT53X2N1cnN3YW50ID0gd2lkdGgxIC0gMTsKKwkgICAgaWYgKGN1cndpbi0+d192aXJ0Y29sID4gY3Vyd2luLT53X2N1cnN3YW50KQorCQljdXJ3aW4tPndfY3Vyc3dhbnQgKz0gKChjdXJ3aW4tPndfdmlydGNvbAorCQkJICAgICAtIGN1cndpbi0+d19jdXJzd2FudCAtIDEpIC8gd2lkdGgyICsgMSkgKiB3aWR0aDI7CisJfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworCWlmIChsaW5lbGVuID4gd2lkdGgxKQorCSAgICBuID0gKChsaW5lbGVuIC0gd2lkdGgxIC0gMSkgLyB3aWR0aDIgKyAxKSAqIHdpZHRoMiArIHdpZHRoMTsKKwllbHNlCisJICAgIG4gPSB3aWR0aDE7CisJaWYgKGN1cndpbi0+d19jdXJzd2FudCA+IChjb2xucl9UKW4gKyAxKQorCSAgICBjdXJ3aW4tPndfY3Vyc3dhbnQgLT0gKChjdXJ3aW4tPndfY3Vyc3dhbnQgLSBuKSAvIHdpZHRoMiArIDEpCisJCQkJCQkJCSAgICAgKiB3aWR0aDI7CisgICAgICB9CisKKyAgICAgIHdoaWxlIChkaXN0LS0pCisgICAgICB7CisJaWYgKGRpciA9PSBCQUNLV0FSRCkKKwl7CisJICAgIGlmICgobG9uZyljdXJ3aW4tPndfY3Vyc3dhbnQgPj0gd2lkdGgyKQorCQkvKiBtb3ZlIGJhY2sgd2l0aGluIGxpbmUgKi8KKwkJY3Vyd2luLT53X2N1cnN3YW50IC09IHdpZHRoMjsKKwkgICAgZWxzZQorCSAgICB7CisJCS8qIHRvIHByZXZpb3VzIGxpbmUgKi8KKwkJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA9PSAxKQorCQl7CisJCSAgICByZXR2YWwgPSBGQUlMOworCQkgICAgYnJlYWs7CisJCX0KKwkJLS1jdXJ3aW4tPndfY3Vyc29yLmxudW07CisjaWZkZWYgRkVBVF9GT0xESU5HCisJCS8qIE1vdmUgdG8gdGhlIHN0YXJ0IG9mIGEgY2xvc2VkIGZvbGQuICBEb24ndCBkbyB0aGF0IHdoZW4KKwkJICogJ2ZvbGRvcGVuJyBjb250YWlucyAiYWxsIjogaXQgd2lsbCBvcGVuIGluIGEgbW9tZW50LiAqLworCQlpZiAoIShmZG9fZmxhZ3MgJiBGRE9fQUxMKSkKKwkJICAgICh2b2lkKWhhc0ZvbGRpbmcoY3Vyd2luLT53X2N1cnNvci5sbnVtLAorCQkJCQkJJmN1cndpbi0+d19jdXJzb3IubG51bSwgTlVMTCk7CisjZW5kaWYKKwkJbGluZWxlbiA9IGxpbmV0YWJzaXplKG1sX2dldF9jdXJsaW5lKCkpOworCQlpZiAobGluZWxlbiA+IHdpZHRoMSkKKwkJICAgIGN1cndpbi0+d19jdXJzd2FudCArPSAoKChsaW5lbGVuIC0gd2lkdGgxIC0gMSkgLyB3aWR0aDIpCisJCQkJCQkJCSsgMSkgKiB3aWR0aDI7CisJICAgIH0KKwl9CisJZWxzZSAvKiBkaXIgPT0gRk9SV0FSRCAqLworCXsKKwkgICAgaWYgKGxpbmVsZW4gPiB3aWR0aDEpCisJCW4gPSAoKGxpbmVsZW4gLSB3aWR0aDEgLSAxKSAvIHdpZHRoMiArIDEpICogd2lkdGgyICsgd2lkdGgxOworCSAgICBlbHNlCisJCW4gPSB3aWR0aDE7CisJICAgIGlmIChjdXJ3aW4tPndfY3Vyc3dhbnQgKyB3aWR0aDIgPCAoY29sbnJfVCluKQorCQkvKiBtb3ZlIGZvcndhcmQgd2l0aGluIGxpbmUgKi8KKwkJY3Vyd2luLT53X2N1cnN3YW50ICs9IHdpZHRoMjsKKwkgICAgZWxzZQorCSAgICB7CisJCS8qIHRvIG5leHQgbGluZSAqLworI2lmZGVmIEZFQVRfRk9MRElORworCQkvKiBNb3ZlIHRvIHRoZSBlbmQgb2YgYSBjbG9zZWQgZm9sZC4gKi8KKwkJKHZvaWQpaGFzRm9sZGluZyhjdXJ3aW4tPndfY3Vyc29yLmxudW0sIE5VTEwsCisJCQkJCQkgICAgICAmY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKyNlbmRpZgorCQlpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID09IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQl7CisJCSAgICByZXR2YWwgPSBGQUlMOworCQkgICAgYnJlYWs7CisJCX0KKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtKys7CisJCWN1cndpbi0+d19jdXJzd2FudCAlPSB3aWR0aDI7CisJICAgIH0KKwl9CisgICAgICB9CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICB9CisjZW5kaWYKKworICAgIGNvbGFkdmFuY2UoY3Vyd2luLT53X2N1cnN3YW50KTsKKworI2lmIGRlZmluZWQoRkVBVF9MSU5FQlJFQUspIHx8IGRlZmluZWQoRkVBVF9NQllURSkKKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPiAwICYmIGN1cndpbi0+d19wX3dyYXApCisgICAgeworCS8qCisJICogQ2hlY2sgZm9yIGxhbmRpbmcgb24gYSBjaGFyYWN0ZXIgdGhhdCBnb3Qgc3BsaXQgYXQgdGhlIGVuZCBvZiB0aGUKKwkgKiBsYXN0IGxpbmUuICBXZSB3YW50IHRvIGFkdmFuY2UgYSBzY3JlZW5saW5lLCBub3QgZW5kIHVwIGluIHRoZSBzYW1lCisJICogc2NyZWVubGluZSBvciBtb3ZlIHR3byBzY3JlZW5saW5lcy4KKwkgKi8KKwl2YWxpZGF0ZV92aXJ0Y29sKCk7CisJaWYgKGN1cndpbi0+d192aXJ0Y29sID4gY3Vyd2luLT53X2N1cnN3YW50CisJCSYmIChjdXJ3aW4tPndfY3Vyc3dhbnQgPCAoY29sbnJfVCl3aWR0aDEKKwkJICAgID8gKGN1cndpbi0+d19jdXJzd2FudCA+IChjb2xucl9UKXdpZHRoMSAvIDIpCisJCSAgICA6ICgoY3Vyd2luLT53X2N1cnN3YW50IC0gd2lkdGgxKSAlIHdpZHRoMgorCQkJCQkJICAgICAgPiAoY29sbnJfVCl3aWR0aDIgLyAyKSkpCisJICAgIC0tY3Vyd2luLT53X2N1cnNvci5jb2w7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoYXRlbmQpCisJY3Vyd2luLT53X2N1cnN3YW50ID0gTUFYQ09MOwkgICAgLyogc3RpY2sgaW4gdGhlIGxhc3QgY29sdW1uICovCisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYgRkVBVF9NT1VTRQorLyoKKyAqIE1vdXNlIHNjcm9sbCB3aGVlbDogRGVmYXVsdCBhY3Rpb24gaXMgdG8gc2Nyb2xsIHRocmVlIGxpbmVzLCBvciBvbmUgcGFnZQorICogd2hlbiBTaGlmdCBvciBDdHJsIGlzIHVzZWQuCisgKiBLX01PVVNFVVAgKGNhcC0+YXJnID09IFRSVUUpIG9yIEtfTU9VU0VET1dOIChjYXAtPmFyZyA9PSBGQUxTRSkKKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9tb3VzZXNjcm9sbChjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyMgaWYgZGVmaW5lZChGRUFUX0dVSSkgJiYgZGVmaW5lZChGRUFUX1dJTkRPV1MpCisgICAgd2luX1QgKm9sZF9jdXJ3aW47CisKKyAgICBvbGRfY3Vyd2luID0gY3Vyd2luOworCisgICAgLyogQ3VycmVudGx5IHdlIG9ubHkgZ2V0IHRoZSBtb3VzZSBjb29yZGluYXRlcyBpbiB0aGUgR1VJLiAqLworICAgIGlmIChndWkuaW5fdXNlICYmIG1vdXNlX3JvdyA+PSAwICYmIG1vdXNlX2NvbCA+PSAwKQorICAgIHsKKwlpbnQgcm93LCBjb2w7CisKKwlyb3cgPSBtb3VzZV9yb3c7CisJY29sID0gbW91c2VfY29sOworCisJLyogZmluZCB0aGUgd2luZG93IGF0IHRoZSBwb2ludGVyIGNvb3JkaW5hdGVzICovCisJY3Vyd2luID0gbW91c2VfZmluZF93aW4oJnJvdywgJmNvbCk7CisJY3VyYnVmID0gY3Vyd2luLT53X2J1ZmZlcjsKKyAgICB9CisjIGVuZGlmCisKKyAgICBpZiAobW9kX21hc2sgJiAoTU9EX01BU0tfU0hJRlQgfCBNT0RfTUFTS19DVFJMKSkKKyAgICB7CisJKHZvaWQpb25lcGFnZShjYXAtPmFyZyA/IEZPUldBUkQgOiBCQUNLV0FSRCwgMUwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWNhcC0+Y291bnQxID0gMzsKKwljYXAtPmNvdW50MCA9IDM7CisJbnZfc2Nyb2xsX2xpbmUoY2FwKTsKKyAgICB9CisKKyMgaWYgZGVmaW5lZChGRUFUX0dVSSkgJiYgZGVmaW5lZChGRUFUX1dJTkRPV1MpCisgICAgY3Vyd2luLT53X3JlZHJfc3RhdHVzID0gVFJVRTsKKworICAgIGN1cndpbiA9IG9sZF9jdXJ3aW47CisgICAgY3VyYnVmID0gY3Vyd2luLT53X2J1ZmZlcjsKKyMgZW5kaWYKK30KKworLyoKKyAqIE1vdXNlIGNsaWNrcyBhbmQgZHJhZ3MuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfbW91c2UoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgKHZvaWQpZG9fbW91c2UoY2FwLT5vYXAsIGNhcC0+Y21kY2hhciwgQkFDS1dBUkQsIGNhcC0+Y291bnQxLCAwKTsKK30KKyNlbmRpZgorCisvKgorICogSGFuZGxlIENUUkwtRSBhbmQgQ1RSTC1ZIGNvbW1hbmRzOiBzY3JvbGwgYSBsaW5lIHVwIG9yIGRvd24uCisgKiBjYXAtPmFyZyBtdXN0IGJlIFRSVUUgZm9yIENUUkwtRS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9zY3JvbGxfbGluZShjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpZiAoIWNoZWNrY2xlYXJvcChjYXAtPm9hcCkpCisJc2Nyb2xsX3JlZHJhdyhjYXAtPmFyZywgY2FwLT5jb3VudDEpOworfQorCisvKgorICogU2Nyb2xsICJjb3VudCIgbGluZXMgdXAgb3IgZG93biwgYW5kIHJlZHJhdy4KKyAqLworICAgIHZvaWQKK3Njcm9sbF9yZWRyYXcodXAsIGNvdW50KQorICAgIGludAkJdXA7CisgICAgbG9uZwljb3VudDsKK3sKKyAgICBsaW5lbnJfVAlwcmV2X3RvcGxpbmUgPSBjdXJ3aW4tPndfdG9wbGluZTsKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBpbnQJCXByZXZfdG9wZmlsbCA9IGN1cndpbi0+d190b3BmaWxsOworI2VuZGlmCisgICAgbGluZW5yX1QJcHJldl9sbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCisgICAgaWYgKHVwKQorCXNjcm9sbHVwKGNvdW50LCBUUlVFKTsKKyAgICBlbHNlCisJc2Nyb2xsZG93bihjb3VudCwgVFJVRSk7CisgICAgaWYgKHBfc28pCisgICAgeworCS8qIEFkanVzdCB0aGUgY3Vyc29yIHBvc2l0aW9uIGZvciAnc2Nyb2xsb2ZmJy4gIE1hcmsgd190b3BsaW5lIGFzCisJICogdmFsaWQsIG90aGVyd2lzZSB0aGUgc2NyZWVuIGp1bXBzIGJhY2sgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gKi8KKwljdXJzb3JfY29ycmVjdCgpOworCWNoZWNrX2N1cnNvcl9tb3ZlZChjdXJ3aW4pOworCWN1cndpbi0+d192YWxpZCB8PSBWQUxJRF9UT1BMSU5FOworCisJLyogSWYgbW92ZWQgYmFjayB0byB3aGVyZSB3ZSB3ZXJlLCBhdCBsZWFzdCBtb3ZlIHRoZSBjdXJzb3IsIG90aGVyd2lzZQorCSAqIHdlIGdldCBzdHVjayBhdCBvbmUgcG9zaXRpb24uICBEb24ndCBtb3ZlIHRoZSBjdXJzb3IgdXAgaWYgdGhlCisJICogZmlyc3QgbGluZSBvZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgb24gdGhlIHNjcmVlbiAqLworCXdoaWxlIChjdXJ3aW4tPndfdG9wbGluZSA9PSBwcmV2X3RvcGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkJJiYgY3Vyd2luLT53X3RvcGZpbGwgPT0gcHJldl90b3BmaWxsCisjZW5kaWYKKwkJKQorCXsKKwkgICAgaWYgKHVwKQorCSAgICB7CisJCWlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiBwcmV2X2xudW0KKwkJCXx8IGN1cnNvcl9kb3duKDFMLCBGQUxTRSkgPT0gRkFJTCkKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtIDwgcHJldl9sbnVtCisJCQl8fCBwcmV2X3RvcGxpbmUgPT0gMUwKKwkJCXx8IGN1cnNvcl91cCgxTCwgRkFMU0UpID09IEZBSUwpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICAvKiBNYXJrIHdfdG9wbGluZSBhcyB2YWxpZCwgb3RoZXJ3aXNlIHRoZSBzY3JlZW4ganVtcHMgYmFjayBhdCB0aGUKKwkgICAgICogZW5kIG9mIHRoZSBmaWxlLiAqLworCSAgICBjaGVja19jdXJzb3JfbW92ZWQoY3Vyd2luKTsKKwkgICAgY3Vyd2luLT53X3ZhbGlkIHw9IFZBTElEX1RPUExJTkU7CisJfQorICAgIH0KKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtICE9IHByZXZfbG51bSkKKwljb2xhZHZhbmNlKGN1cndpbi0+d19jdXJzd2FudCk7CisgICAgcmVkcmF3X2xhdGVyKFZBTElEKTsKK30KKworLyoKKyAqIENvbW1hbmRzIHRoYXQgc3RhcnQgd2l0aCAieiIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfemV0KGNhcCkKKyAgICBjbWRhcmdfVCAgKmNhcDsKK3sKKyAgICBsb25nCW47CisgICAgY29sbnJfVAljb2w7CisgICAgaW50CQluY2hhciA9IGNhcC0+bmNoYXI7CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgbG9uZwlvbGRfZmRsID0gY3Vyd2luLT53X3BfZmRsOworICAgIGludAkJb2xkX2ZlbiA9IGN1cndpbi0+d19wX2ZlbjsKKyNlbmRpZgorCisgICAgaWYgKFZJTV9JU0RJR0lUKG5jaGFyKSkKKyAgICB7CisJLyoKKwkgKiAiejEyM3tuY2hhcn0iOiBlZGl0IHRoZSBjb3VudCBiZWZvcmUgb2J0YWluaW5nIHtuY2hhcn0KKwkgKi8KKwlpZiAoY2hlY2tjbGVhcm9wKGNhcC0+b2FwKSkKKwkgICAgcmV0dXJuOworCW4gPSBuY2hhciAtICcwJzsKKwlmb3IgKDs7KQorCXsKKyNpZmRlZiBVU0VfT05fRkxZX1NDUk9MTAorCSAgICBkb250X3Njcm9sbCA9IFRSVUU7CQkvKiBkaXNhbGxvdyBzY3JvbGxpbmcgaGVyZSAqLworI2VuZGlmCisJICAgICsrbm9fbWFwcGluZzsKKwkgICAgKythbGxvd19rZXlzOyAgIC8qIG5vIG1hcHBpbmcgZm9yIG5jaGFyLCBidXQgYWxsb3cga2V5IGNvZGVzICovCisJICAgIG5jaGFyID0gc2FmZV92Z2V0YygpOworI2lmZGVmIEZFQVRfTEFOR01BUAorCSAgICBMQU5HTUFQX0FESlVTVChuY2hhciwgVFJVRSk7CisjZW5kaWYKKwkgICAgLS1ub19tYXBwaW5nOworCSAgICAtLWFsbG93X2tleXM7CisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwkgICAgKHZvaWQpYWRkX3RvX3Nob3djbWQobmNoYXIpOworI2VuZGlmCisJICAgIGlmIChuY2hhciA9PSBLX0RFTCB8fCBuY2hhciA9PSBLX0tERUwpCisJCW4gLz0gMTA7CisJICAgIGVsc2UgaWYgKFZJTV9JU0RJR0lUKG5jaGFyKSkKKwkJbiA9IG4gKiAxMCArIChuY2hhciAtICcwJyk7CisJICAgIGVsc2UgaWYgKG5jaGFyID09IENBUikKKwkgICAgeworI2lmZGVmIEZFQVRfR1VJCisJCW5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKwkJd2luX3NldGhlaWdodCgoaW50KW4pOworCQlicmVhazsKKwkgICAgfQorCSAgICBlbHNlIGlmIChuY2hhciA9PSAnbCcKKwkJICAgIHx8IG5jaGFyID09ICdoJworCQkgICAgfHwgbmNoYXIgPT0gS19MRUZUCisJCSAgICB8fCBuY2hhciA9PSBLX1JJR0hUKQorCSAgICB7CisJCWNhcC0+Y291bnQxID0gbiA/IG4gKiBjYXAtPmNvdW50MSA6IGNhcC0+Y291bnQxOworCQlnb3RvIGRvemV0OworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQljbGVhcm9wYmVlcChjYXAtPm9hcCk7CisJCWJyZWFrOworCSAgICB9CisJfQorCWNhcC0+b2FwLT5vcF90eXBlID0gT1BfTk9QOworCXJldHVybjsKKyAgICB9CisKK2RvemV0OgorICAgIGlmICgKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgLyogInpmIiBhbmQgInpGIiBhcmUgYWx3YXlzIGFuIG9wZXJhdG9yLCAiemQiLCAiem8iLCAiek8iLCAiemMiCisJICAgICAqIGFuZCAiekMiIG9ubHkgaW4gVmlzdWFsIG1vZGUuICAiemoiIGFuZCAiemsiIGFyZSBtb3Rpb24KKwkgICAgICogY29tbWFuZHMuICovCisJICAgIGNhcC0+bmNoYXIgIT0gJ2YnICYmIGNhcC0+bmNoYXIgIT0gJ0YnCisJICAgICYmICEoVklzdWFsX2FjdGl2ZSAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikiZGNDb08iLCBjYXAtPm5jaGFyKSkKKwkgICAgJiYgY2FwLT5uY2hhciAhPSAnaicgJiYgY2FwLT5uY2hhciAhPSAnaycKKwkgICAgJiYKKyNlbmRpZgorCSAgICBjaGVja2NsZWFyb3AoY2FwLT5vYXApKQorCXJldHVybjsKKworICAgIC8qCisgICAgICogRm9yICJ6KyIsICJ6PENSPiIsICJ6dCIsICJ6LiIsICJ6eiIsICJ6XiIsICJ6LSIsICJ6YiI6CisgICAgICogSWYgbGluZSBudW1iZXIgZ2l2ZW4sIHNldCBjdXJzb3IuCisgICAgICovCisgICAgaWYgKCh2aW1fc3RyY2hyKChjaGFyX3UgKikiK1xyXG50LnpeLWIiLCBuY2hhcikgIT0gTlVMTCkKKwkgICAgJiYgY2FwLT5jb3VudDAKKwkgICAgJiYgY2FwLT5jb3VudDAgIT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorICAgIHsKKwlzZXRwY21hcmsoKTsKKwlpZiAoY2FwLT5jb3VudDAgPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJZWxzZQorCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjYXAtPmNvdW50MDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5jaGFyKQorICAgIHsKKwkJLyogInorIiwgIno8Q1I+IiBhbmQgInp0IjogcHV0IGN1cnNvciBhdCB0b3Agb2Ygc2NyZWVuICovCisgICAgY2FzZSAnKyc6CisJCWlmIChjYXAtPmNvdW50MCA9PSAwKQorCQl7CisJCSAgICAvKiBObyBjb3VudCBnaXZlbjogcHV0IGN1cnNvciBhdCB0aGUgbGluZSBiZWxvdyBzY3JlZW4gKi8KKwkJICAgIHZhbGlkYXRlX2JvdGxpbmUoKTsJLyogbWFrZSBzdXJlIHdfYm90bGluZSBpcyB2YWxpZCAqLworCQkgICAgaWYgKGN1cndpbi0+d19ib3RsaW5lID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwkJICAgIGVsc2UKKwkJCWN1cndpbi0+d19jdXJzb3IubG51bSA9IGN1cndpbi0+d19ib3RsaW5lOworCQl9CisJCS8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBOTDoKKyAgICBjYXNlIENBUjoKKyAgICBjYXNlIEtfS0VOVEVSOgorCQliZWdpbmxpbmUoQkxfV0hJVEUgfCBCTF9GSVgpOworCQkvKiBGQUxMVEhST1VHSCAqLworCisgICAgY2FzZSAndCc6CXNjcm9sbF9jdXJzb3JfdG9wKDAsIFRSVUUpOworCQlyZWRyYXdfbGF0ZXIoVkFMSUQpOworCQlicmVhazsKKworCQkvKiAiei4iIGFuZCAienoiOiBwdXQgY3Vyc29yIGluIG1pZGRsZSBvZiBzY3JlZW4gKi8KKyAgICBjYXNlICcuJzoJYmVnaW5saW5lKEJMX1dISVRFIHwgQkxfRklYKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKworICAgIGNhc2UgJ3onOglzY3JvbGxfY3Vyc29yX2hhbGZ3YXkoVFJVRSk7CisJCXJlZHJhd19sYXRlcihWQUxJRCk7CisJCWJyZWFrOworCisJCS8qICJ6XiIsICJ6LSIgYW5kICJ6YiI6IHB1dCBjdXJzb3IgYXQgYm90dG9tIG9mIHNjcmVlbiAqLworICAgIGNhc2UgJ14nOgkvKiBTdHJhbmdlIFZpIGJlaGF2aW9yOiA8Y291bnQ+el4gZmluZHMgbGluZSBhdCB0b3Agb2Ygd2luZG93CisJCSAqIHdoZW4gPGNvdW50PiBpcyBhdCBib3R0b20gb2Ygd2luZG93LCBhbmQgcHV0cyB0aGF0IG9uZSBhdAorCQkgKiBib3R0b20gb2Ygd2luZG93LiAqLworCQlpZiAoY2FwLT5jb3VudDAgIT0gMCkKKwkJeworCQkgICAgc2Nyb2xsX2N1cnNvcl9ib3QoMCwgVFJVRSk7CisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJ3aW4tPndfdG9wbGluZTsKKwkJfQorCQllbHNlIGlmIChjdXJ3aW4tPndfdG9wbGluZSA9PSAxKQorCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gMTsKKwkJZWxzZQorCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gY3Vyd2luLT53X3RvcGxpbmUgLSAxOworCQkvKiBGQUxMVEhST1VHSCAqLworICAgIGNhc2UgJy0nOgorCQliZWdpbmxpbmUoQkxfV0hJVEUgfCBCTF9GSVgpOworCQkvKiBGQUxMVEhST1VHSCAqLworCisgICAgY2FzZSAnYic6CXNjcm9sbF9jdXJzb3JfYm90KDAsIFRSVUUpOworCQlyZWRyYXdfbGF0ZXIoVkFMSUQpOworCQlicmVhazsKKworCQkvKiAiekgiIC0gc2Nyb2xsIHNjcmVlbiByaWdodCBoYWxmLXBhZ2UgKi8KKyAgICBjYXNlICdIJzoKKwkJY2FwLT5jb3VudDEgKj0gV19XSURUSChjdXJ3aW4pIC8gMjsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKworCQkvKiAiemgiIC0gc2Nyb2xsIHNjcmVlbiB0byB0aGUgcmlnaHQgKi8KKyAgICBjYXNlICdoJzoKKyAgICBjYXNlIEtfTEVGVDoKKwkJaWYgKCFjdXJ3aW4tPndfcF93cmFwKQorCQl7CisJCSAgICBpZiAoKGNvbG5yX1QpY2FwLT5jb3VudDEgPiBjdXJ3aW4tPndfbGVmdGNvbCkKKwkJCWN1cndpbi0+d19sZWZ0Y29sID0gMDsKKwkJICAgIGVsc2UKKwkJCWN1cndpbi0+d19sZWZ0Y29sIC09IChjb2xucl9UKWNhcC0+Y291bnQxOworCQkgICAgbGVmdGNvbF9jaGFuZ2VkKCk7CisJCX0KKwkJYnJlYWs7CisKKwkJLyogInpMIiAtIHNjcm9sbCBzY3JlZW4gbGVmdCBoYWxmLXBhZ2UgKi8KKyAgICBjYXNlICdMJzoJY2FwLT5jb3VudDEgKj0gV19XSURUSChjdXJ3aW4pIC8gMjsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKworCQkvKiAiemwiIC0gc2Nyb2xsIHNjcmVlbiB0byB0aGUgbGVmdCAqLworICAgIGNhc2UgJ2wnOgorICAgIGNhc2UgS19SSUdIVDoKKwkJaWYgKCFjdXJ3aW4tPndfcF93cmFwKQorCQl7CisJCSAgICAvKiBzY3JvbGwgdGhlIHdpbmRvdyBsZWZ0ICovCisJCSAgICBjdXJ3aW4tPndfbGVmdGNvbCArPSAoY29sbnJfVCljYXAtPmNvdW50MTsKKwkJICAgIGxlZnRjb2xfY2hhbmdlZCgpOworCQl9CisJCWJyZWFrOworCisJCS8qICJ6cyIgLSBzY3JvbGwgc2NyZWVuLCBjdXJzb3IgYXQgdGhlIHN0YXJ0ICovCisgICAgY2FzZSAncyc6CWlmICghY3Vyd2luLT53X3Bfd3JhcCkKKwkJeworI2lmZGVmIEZFQVRfRk9MRElORworCQkgICAgaWYgKGhhc0ZvbGRpbmcoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBOVUxMLCBOVUxMKSkKKwkJCWNvbCA9IDA7CS8qIGxpa2UgdGhlIGN1cnNvciBpcyBpbiBjb2wgMCAqLworCQkgICAgZWxzZQorI2VuZGlmCisJCSAgICBnZXR2Y29sKGN1cndpbiwgJmN1cndpbi0+d19jdXJzb3IsICZjb2wsIE5VTEwsIE5VTEwpOworCQkgICAgaWYgKChsb25nKWNvbCA+IHBfc2lzbykKKwkJCWNvbCAtPSBwX3Npc287CisJCSAgICBlbHNlCisJCQljb2wgPSAwOworCQkgICAgaWYgKGN1cndpbi0+d19sZWZ0Y29sICE9IGNvbCkKKwkJICAgIHsKKwkJCWN1cndpbi0+d19sZWZ0Y29sID0gY29sOworCQkJcmVkcmF3X2xhdGVyKE5PVF9WQUxJRCk7CisJCSAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJLyogInplIiAtIHNjcm9sbCBzY3JlZW4sIGN1cnNvciBhdCB0aGUgZW5kICovCisgICAgY2FzZSAnZSc6CWlmICghY3Vyd2luLT53X3Bfd3JhcCkKKwkJeworI2lmZGVmIEZFQVRfRk9MRElORworCQkgICAgaWYgKGhhc0ZvbGRpbmcoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBOVUxMLCBOVUxMKSkKKwkJCWNvbCA9IDA7CS8qIGxpa2UgdGhlIGN1cnNvciBpcyBpbiBjb2wgMCAqLworCQkgICAgZWxzZQorI2VuZGlmCisJCSAgICBnZXR2Y29sKGN1cndpbiwgJmN1cndpbi0+d19jdXJzb3IsIE5VTEwsIE5VTEwsICZjb2wpOworCQkgICAgbiA9IFdfV0lEVEgoY3Vyd2luKSAtIGN1cndpbl9jb2xfb2ZmKCk7CisJCSAgICBpZiAoKGxvbmcpY29sICsgcF9zaXNvIDwgbikKKwkJCWNvbCA9IDA7CisJCSAgICBlbHNlCisJCQljb2wgPSBjb2wgKyBwX3Npc28gLSBuICsgMTsKKwkJICAgIGlmIChjdXJ3aW4tPndfbGVmdGNvbCAhPSBjb2wpCisJCSAgICB7CisJCQljdXJ3aW4tPndfbGVmdGNvbCA9IGNvbDsKKwkJCXJlZHJhd19sYXRlcihOT1RfVkFMSUQpOworCQkgICAgfQorCQl9CisJCWJyZWFrOworCisjaWZkZWYgRkVBVF9GT0xESU5HCisJCS8qICJ6RiI6IGNyZWF0ZSBmb2xkIGNvbW1hbmQgKi8KKwkJLyogInpmIjogY3JlYXRlIGZvbGQgb3BlcmF0b3IgKi8KKyAgICBjYXNlICdGJzoKKyAgICBjYXNlICdmJzogICBpZiAoZm9sZE1hbnVhbEFsbG93ZWQoVFJVRSkpCisJCXsKKwkJICAgIGNhcC0+bmNoYXIgPSAnZic7CisJCSAgICBudl9vcGVyYXRvcihjYXApOworCQkgICAgY3Vyd2luLT53X3BfZmVuID0gVFJVRTsKKworCQkgICAgLyogInpGIiBpcyBsaWtlICJ6ZnpmIiAqLworCQkgICAgaWYgKG5jaGFyID09ICdGJyAmJiBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9GT0xEKQorCQkgICAgeworCQkJbnZfb3BlcmF0b3IoY2FwKTsKKwkJCWZpbmlzaF9vcCA9IFRSVUU7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQkgICAgY2xlYXJvcGJlZXAoY2FwLT5vYXApOworCQlicmVhazsKKworCQkvKiAiemQiOiBkZWxldGUgZm9sZCBhdCBjdXJzb3IgKi8KKwkJLyogInpEIjogZGVsZXRlIGZvbGQgYXQgY3Vyc29yIHJlY3Vyc2l2ZWx5ICovCisgICAgY2FzZSAnZCc6CisgICAgY2FzZSAnRCc6CWlmIChmb2xkTWFudWFsQWxsb3dlZChGQUxTRSkpCisJCXsKKwkJICAgIGlmIChWSXN1YWxfYWN0aXZlKQorCQkJbnZfb3BlcmF0b3IoY2FwKTsKKwkJICAgIGVsc2UKKwkJCWRlbGV0ZUZvbGQoY3Vyd2luLT53X2N1cnNvci5sbnVtLAorCQkJCSAgY3Vyd2luLT53X2N1cnNvci5sbnVtLCBuY2hhciA9PSAnRCcsIEZBTFNFKTsKKwkJfQorCQlicmVhazsKKworCQkvKiAiekUiOiBlcmVhc2UgYWxsIGZvbGRzICovCisgICAgY2FzZSAnRSc6CWlmIChmb2xkbWV0aG9kSXNNYW51YWwoY3Vyd2luKSkKKwkJeworCQkgICAgY2xlYXJGb2xkaW5nKGN1cndpbik7CisJCSAgICBjaGFuZ2VkX3dpbmRvd19zZXR0aW5nKCk7CisJCX0KKwkJZWxzZSBpZiAoZm9sZG1ldGhvZElzTWFya2VyKGN1cndpbikpCisJCSAgICBkZWxldGVGb2xkKChsaW5lbnJfVCkxLCBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCwKKwkJCQkJCQkJIFRSVUUsIEZBTFNFKTsKKwkJZWxzZQorCQkgICAgRU1TRyhfKCJFMzUyOiBDYW5ub3QgZXJhc2UgZm9sZHMgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIpKTsKKwkJYnJlYWs7CisKKwkJLyogInpuIjogZm9sZCBub25lOiByZXNldCAnZm9sZGVuYWJsZScgKi8KKyAgICBjYXNlICduJzoJY3Vyd2luLT53X3BfZmVuID0gRkFMU0U7CisJCWJyZWFrOworCisJCS8qICJ6TiI6IGZvbGQgTm9ybWFsOiBzZXQgJ2ZvbGRlbmFibGUnICovCisgICAgY2FzZSAnTic6CWN1cndpbi0+d19wX2ZlbiA9IFRSVUU7CisJCWJyZWFrOworCisJCS8qICJ6aSI6IGludmVydCBmb2xkaW5nOiB0b2dnbGUgJ2ZvbGRlbmFibGUnICovCisgICAgY2FzZSAnaSc6CWN1cndpbi0+d19wX2ZlbiA9ICFjdXJ3aW4tPndfcF9mZW47CisJCWJyZWFrOworCisJCS8qICJ6YSI6IG9wZW4gY2xvc2VkIGZvbGQgb3IgY2xvc2Ugb3BlbiBmb2xkIGF0IGN1cnNvciAqLworICAgIGNhc2UgJ2EnOglpZiAoaGFzRm9sZGluZyhjdXJ3aW4tPndfY3Vyc29yLmxudW0sIE5VTEwsIE5VTEwpKQorCQkgICAgb3BlbkZvbGQoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBjYXAtPmNvdW50MSk7CisJCWVsc2UKKwkJeworCQkgICAgY2xvc2VGb2xkKGN1cndpbi0+d19jdXJzb3IubG51bSwgY2FwLT5jb3VudDEpOworCQkgICAgY3Vyd2luLT53X3BfZmVuID0gVFJVRTsKKwkJfQorCQlicmVhazsKKworCQkvKiAiekEiOiBvcGVuIGZvbGQgYXQgY3Vyc29yIHJlY3Vyc2l2ZWx5ICovCisgICAgY2FzZSAnQSc6CWlmIChoYXNGb2xkaW5nKGN1cndpbi0+d19jdXJzb3IubG51bSwgTlVMTCwgTlVMTCkpCisJCSAgICBvcGVuRm9sZFJlY3Vyc2UoY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKwkJZWxzZQorCQl7CisJCSAgICBjbG9zZUZvbGRSZWN1cnNlKGN1cndpbi0+d19jdXJzb3IubG51bSk7CisJCSAgICBjdXJ3aW4tPndfcF9mZW4gPSBUUlVFOworCQl9CisJCWJyZWFrOworCisJCS8qICJ6byI6IG9wZW4gZm9sZCBhdCBjdXJzb3Igb3IgVmlzdWFsIGFyZWEgKi8KKyAgICBjYXNlICdvJzoJaWYgKFZJc3VhbF9hY3RpdmUpCisJCSAgICBudl9vcGVyYXRvcihjYXApOworCQllbHNlCisJCSAgICBvcGVuRm9sZChjdXJ3aW4tPndfY3Vyc29yLmxudW0sIGNhcC0+Y291bnQxKTsKKwkJYnJlYWs7CisKKwkJLyogInpPIjogb3BlbiBmb2xkIHJlY3Vyc2l2ZWx5ICovCisgICAgY2FzZSAnTyc6CWlmIChWSXN1YWxfYWN0aXZlKQorCQkgICAgbnZfb3BlcmF0b3IoY2FwKTsKKwkJZWxzZQorCQkgICAgb3BlbkZvbGRSZWN1cnNlKGN1cndpbi0+d19jdXJzb3IubG51bSk7CisJCWJyZWFrOworCisJCS8qICJ6YyI6IGNsb3NlIGZvbGQgYXQgY3Vyc29yIG9yIFZpc3VhbCBhcmVhICovCisgICAgY2FzZSAnYyc6CWlmIChWSXN1YWxfYWN0aXZlKQorCQkgICAgbnZfb3BlcmF0b3IoY2FwKTsKKwkJZWxzZQorCQkgICAgY2xvc2VGb2xkKGN1cndpbi0+d19jdXJzb3IubG51bSwgY2FwLT5jb3VudDEpOworCQljdXJ3aW4tPndfcF9mZW4gPSBUUlVFOworCQlicmVhazsKKworCQkvKiAiekMiOiBjbG9zZSBmb2xkIHJlY3Vyc2l2ZWx5ICovCisgICAgY2FzZSAnQyc6CWlmIChWSXN1YWxfYWN0aXZlKQorCQkgICAgbnZfb3BlcmF0b3IoY2FwKTsKKwkJZWxzZQorCQkgICAgY2xvc2VGb2xkUmVjdXJzZShjdXJ3aW4tPndfY3Vyc29yLmxudW0pOworCQljdXJ3aW4tPndfcF9mZW4gPSBUUlVFOworCQlicmVhazsKKworCQkvKiAienYiOiBvcGVuIGZvbGRzIGF0IHRoZSBjdXJzb3IgKi8KKyAgICBjYXNlICd2JzoJZm9sZE9wZW5DdXJzb3IoKTsKKwkJYnJlYWs7CisKKwkJLyogInp4IjogcmUtYXBwbHkgJ2ZvbGRsZXZlbCcgYW5kIG9wZW4gZm9sZHMgYXQgdGhlIGN1cnNvciAqLworICAgIGNhc2UgJ3gnOgljdXJ3aW4tPndfcF9mZW4gPSBUUlVFOworCQluZXdGb2xkTGV2ZWwoKTsJCS8qIHVwZGF0ZSByaWdodCBub3cgKi8KKwkJZm9sZE9wZW5DdXJzb3IoKTsKKwkJYnJlYWs7CisKKwkJLyogInpYIjogdW5kbyBtYW51YWwgb3BlbnMvY2xvc2VzLCByZS1hcHBseSAnZm9sZGxldmVsJyAqLworICAgIGNhc2UgJ1gnOgljdXJ3aW4tPndfcF9mZW4gPSBUUlVFOworCQlvbGRfZmRsID0gLTE7CQkvKiBmb3JjZSBhbiB1cGRhdGUgKi8KKwkJYnJlYWs7CisKKwkJLyogInptIjogZm9sZCBtb3JlICovCisgICAgY2FzZSAnbSc6CWlmIChjdXJ3aW4tPndfcF9mZGwgPiAwKQorCQkgICAgLS1jdXJ3aW4tPndfcF9mZGw7CisJCW9sZF9mZGwgPSAtMTsJCS8qIGZvcmNlIGFuIHVwZGF0ZSAqLworCQljdXJ3aW4tPndfcF9mZW4gPSBUUlVFOworCQlicmVhazsKKworCQkvKiAiek0iOiBjbG9zZSBhbGwgZm9sZHMgKi8KKyAgICBjYXNlICdNJzoJY3Vyd2luLT53X3BfZmRsID0gMDsKKwkJb2xkX2ZkbCA9IC0xOwkJLyogZm9yY2UgYW4gdXBkYXRlICovCisJCWN1cndpbi0+d19wX2ZlbiA9IFRSVUU7CisJCWJyZWFrOworCisJCS8qICJ6ciI6IHJlZHVjZSBmb2xkaW5nICovCisgICAgY2FzZSAncic6CSsrY3Vyd2luLT53X3BfZmRsOworCQlicmVhazsKKworCQkvKiAielIiOiBvcGVuIGFsbCBmb2xkcyAqLworICAgIGNhc2UgJ1InOgljdXJ3aW4tPndfcF9mZGwgPSBnZXREZWVwZXN0TmVzdGluZygpOworCQlvbGRfZmRsID0gLTE7CQkvKiBmb3JjZSBhbiB1cGRhdGUgKi8KKwkJYnJlYWs7CisKKyAgICBjYXNlICdqJzoJLyogInpqIiBtb3ZlIHRvIG5leHQgZm9sZCBkb3dud2FyZHMgKi8KKyAgICBjYXNlICdrJzoJLyogInprIiBtb3ZlIHRvIG5leHQgZm9sZCB1cHdhcmRzICovCisJCWlmIChmb2xkTW92ZVRvKFRSVUUsIG5jaGFyID09ICdqJyA/IEZPUldBUkQgOiBCQUNLV0FSRCwKKwkJCQkJCQkgIGNhcC0+Y291bnQxKSA9PSBGQUlMKQorCQkgICAgY2xlYXJvcGJlZXAoY2FwLT5vYXApOworCQlicmVhazsKKworI2VuZGlmIC8qIEZFQVRfRk9MRElORyAqLworCisgICAgZGVmYXVsdDoJY2xlYXJvcGJlZXAoY2FwLT5vYXApOworICAgIH0KKworI2lmZGVmIEZFQVRfRk9MRElORworICAgIC8qIFJlZHJhdyB3aGVuICdmb2xkZW5hYmxlJyBjaGFuZ2VkICovCisgICAgaWYgKG9sZF9mZW4gIT0gY3Vyd2luLT53X3BfZmVuKQorICAgIHsKKyMgaWZkZWYgRkVBVF9ESUZGCisJd2luX1QJICAgICp3cDsKKworCWlmIChmb2xkbWV0aG9kSXNEaWZmKGN1cndpbikgJiYgY3Vyd2luLT53X3Bfc2NiKQorCXsKKwkgICAgLyogQWRqdXN0ICdmb2xkZW5hYmxlJyBpbiBkaWZmLXN5bmNlZCB3aW5kb3dzLiAqLworCSAgICBGT1JfQUxMX1dJTkRPV1Mod3ApCisJICAgIHsKKwkJaWYgKHdwICE9IGN1cndpbiAmJiBmb2xkbWV0aG9kSXNEaWZmKHdwKSAmJiB3cC0+d19wX3NjYikKKwkJeworCQkgICAgd3AtPndfcF9mZW4gPSBjdXJ3aW4tPndfcF9mZW47CisJCSAgICBjaGFuZ2VkX3dpbmRvd19zZXR0aW5nX3dpbih3cCk7CisJCX0KKwkgICAgfQorCX0KKyMgZW5kaWYKKwljaGFuZ2VkX3dpbmRvd19zZXR0aW5nKCk7CisgICAgfQorCisgICAgLyogUmVkcmF3IHdoZW4gJ2ZvbGRsZXZlbCcgY2hhbmdlZC4gKi8KKyAgICBpZiAob2xkX2ZkbCAhPSBjdXJ3aW4tPndfcF9mZGwpCisJbmV3Rm9sZExldmVsKCk7CisjZW5kaWYKK30KKworI2lmZGVmIEZFQVRfR1VJCisvKgorICogVmVydGljYWwgc2Nyb2xsYmFyIG1vdmVtZW50LgorICovCisgICAgc3RhdGljIHZvaWQKK252X3Zlcl9zY3JvbGxiYXIoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaWYgKGNhcC0+b2FwLT5vcF90eXBlICE9IE9QX05PUCkKKwljbGVhcm9wYmVlcChjYXAtPm9hcCk7CisKKyAgICAvKiBFdmVuIGlmIGFuIG9wZXJhdG9yIHdhcyBwZW5kaW5nLCB3ZSBzdGlsbCB3YW50IHRvIHNjcm9sbCAqLworICAgIGd1aV9kb19zY3JvbGwoKTsKK30KKworLyoKKyAqIEhvcml6b250YWwgc2Nyb2xsYmFyIG1vdmVtZW50LgorICovCisgICAgc3RhdGljIHZvaWQKK252X2hvcl9zY3JvbGxiYXIoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaWYgKGNhcC0+b2FwLT5vcF90eXBlICE9IE9QX05PUCkKKwljbGVhcm9wYmVlcChjYXAtPm9hcCk7CisKKyAgICAvKiBFdmVuIGlmIGFuIG9wZXJhdG9yIHdhcyBwZW5kaW5nLCB3ZSBzdGlsbCB3YW50IHRvIHNjcm9sbCAqLworICAgIGd1aV9kb19ob3Jpel9zY3JvbGwoKTsKK30KKyNlbmRpZgorCisvKgorICogIlEiIGNvbW1hbmQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfZXhtb2RlKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIC8qCisgICAgICogSWdub3JlICdRJyBpbiBWaXN1YWwgbW9kZSwganVzdCBnaXZlIGEgYmVlcC4KKyAgICAgKi8KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmIChWSXN1YWxfYWN0aXZlKQorCXZpbV9iZWVwKCk7CisgICAgZWxzZQorI2VuZGlmCisJaWYgKCFjaGVja2NsZWFyb3AoY2FwLT5vYXApKQorCWRvX2V4bW9kZShGQUxTRSk7Cit9CisKKy8qCisgKiBIYW5kbGUgYSAiOiIgY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9jb2xvbihjYXApCisgICAgY21kYXJnX1QgICpjYXA7Cit7CisgICAgaW50CSAgICBvbGRfcF9pbTsKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKFZJc3VhbF9hY3RpdmUpCisJbnZfb3BlcmF0b3IoY2FwKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJaWYgKGNhcC0+b2FwLT5vcF90eXBlICE9IE9QX05PUCkKKwl7CisJICAgIC8qIFVzaW5nICI6IiBhcyBhIG1vdmVtZW50IGlzIGNoYXJhY3Rlcndpc2UgZXhjbHVzaXZlLiAqLworCSAgICBjYXAtPm9hcC0+bW90aW9uX3R5cGUgPSBNQ0hBUjsKKwkgICAgY2FwLT5vYXAtPmluY2x1c2l2ZSA9IEZBTFNFOworCX0KKwllbHNlIGlmIChjYXAtPmNvdW50MCkKKwl7CisJICAgIC8qIHRyYW5zbGF0ZSAiY291bnQ6IiBpbnRvICI6LiwuKyhjb3VudCAtIDEpIiAqLworCSAgICBzdHVmZmNoYXJSZWFkYnVmZignLicpOworCSAgICBpZiAoY2FwLT5jb3VudDAgPiAxKQorCSAgICB7CisJCXN0dWZmUmVhZGJ1ZmYoKGNoYXJfdSAqKSIsLisiKTsKKwkJc3R1ZmZudW1SZWFkYnVmZigobG9uZyljYXAtPmNvdW50MCAtIDFMKTsKKwkgICAgfQorCX0KKworCS8qIFdoZW4gdHlwaW5nLCBkb24ndCB0eXBlIGJlbG93IGFuIG9sZCBtZXNzYWdlICovCisJaWYgKEtleVR5cGVkKQorCSAgICBjb21wdXRlX2NtZHJvdygpOworCisJb2xkX3BfaW0gPSBwX2ltOworCisJLyogZ2V0IGEgY29tbWFuZCBsaW5lIGFuZCBleGVjdXRlIGl0ICovCisJZG9fY21kbGluZShOVUxMLCBnZXRleGxpbmUsIE5VTEwsCisJCQkgICAgY2FwLT5vYXAtPm9wX3R5cGUgIT0gT1BfTk9QID8gRE9DTURfS0VFUExJTkUgOiAwKTsKKworCS8qIElmICdpbnNlcnRtb2RlJyBjaGFuZ2VkLCBlbnRlciBvciBleGl0IEluc2VydCBtb2RlICovCisJaWYgKHBfaW0gIT0gb2xkX3BfaW0pCisJeworCSAgICBpZiAocF9pbSkKKwkJcmVzdGFydF9lZGl0ID0gJ2knOworCSAgICBlbHNlCisJCXJlc3RhcnRfZWRpdCA9IDA7CisJfQorCisJLyogVGhlIHN0YXJ0IG9mIHRoZSBvcGVyYXRvciBtYXkgaGF2ZSBiZWNvbWUgaW52YWxpZCBieSB0aGUgRXgKKwkgKiBjb21tYW5kLiAqLworCWlmIChjYXAtPm9hcC0+b3BfdHlwZSAhPSBPUF9OT1AKKwkJJiYgKGNhcC0+b2FwLT5zdGFydC5sbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQKKwkJICAgIHx8IGNhcC0+b2FwLT5zdGFydC5jb2wgPgorCQkJCQkgU1RSTEVOKG1sX2dldChjYXAtPm9hcC0+c3RhcnQubG51bSkpKSkKKwkgICAgY2xlYXJvcGJlZXAoY2FwLT5vYXApOworICAgIH0KK30KKworLyoKKyAqIEhhbmRsZSBDVFJMLUcgY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9jdHJsZyhjYXApCisgICAgY21kYXJnX1QgKmNhcDsKK3sKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmIChWSXN1YWxfYWN0aXZlKQkvKiB0b2dnbGUgU2VsZWN0aW9uL1Zpc3VhbCBtb2RlICovCisgICAgeworCVZJc3VhbF9zZWxlY3QgPSAhVklzdWFsX3NlbGVjdDsKKwlzaG93bW9kZSgpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwlpZiAoIWNoZWNrY2xlYXJvcChjYXAtPm9hcCkpCisJLyogcHJpbnQgZnVsbCBuYW1lIGlmIGNvdW50IGdpdmVuIG9yIDpjZCB1c2VkICovCisJZmlsZWluZm8oKGludCljYXAtPmNvdW50MCwgRkFMU0UsIFRSVUUpOworfQorCisvKgorICogSGFuZGxlIENUUkwtSCA8QmFja3NwYWNlPiBjb21tYW5kLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2N0cmxoKGNhcCkKKyAgICBjbWRhcmdfVCAqY2FwOworeworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKFZJc3VhbF9hY3RpdmUgJiYgVklzdWFsX3NlbGVjdCkKKyAgICB7CisJY2FwLT5jbWRjaGFyID0gJ3gnOwkvKiBCUyBrZXkgYmVoYXZlcyBsaWtlICd4JyBpbiBTZWxlY3QgbW9kZSAqLworCXZfdmlzb3AoY2FwKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJbnZfbGVmdChjYXApOworfQorCisvKgorICogQ1RSTC1MOiBjbGVhciBzY3JlZW4gYW5kIHJlZHJhdy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9jbGVhcihjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpZiAoIWNoZWNrY2xlYXJvcChjYXAtPm9hcCkpCisgICAgeworI2lmIGRlZmluZWQoX19CRU9TX18pICYmICFVU0VfVEhSRUFEX0ZPUl9JTlBVVF9XSVRIX1RJTUVPVVQKKwkvKgorCSAqIFJpZ2h0IG5vdywgdGhlIEJlQm94IGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFuIGVhc3kgd2F5IHRvIGRldGVjdAorCSAqIHdpbmRvdyByZXNpemluZywgc28gd2UgY2hlYXQgYW5kIG1ha2UgdGhlIHVzZXIgZGV0ZWN0IGl0CisJICogbWFudWFsbHkgd2l0aCBDVFJMLUwgaW5zdGVhZAorCSAqLworCXVpX2dldF9zaGVsbHNpemUoKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU1lOX0hMCisJLyogQ2xlYXIgYWxsIHN5bnRheCBzdGF0ZXMgdG8gZm9yY2UgcmVzeW5jaW5nLiAqLworCXN5bl9zdGFja19mcmVlX2FsbChjdXJidWYpOworI2VuZGlmCisJcmVkcmF3X2xhdGVyKENMRUFSKTsKKyAgICB9Cit9CisKKy8qCisgKiBDVFJMLU86IEluIFNlbGVjdCBtb2RlOiBzd2l0Y2ggdG8gVmlzdWFsIG1vZGUgZm9yIG9uZSBjb21tYW5kLgorICogT3RoZXJ3aXNlOiBHbyB0byBvbGRlciBwY21hcmsuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfY3RybG8oY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSAmJiBWSXN1YWxfc2VsZWN0KQorICAgIHsKKwlWSXN1YWxfc2VsZWN0ID0gRkFMU0U7CisJc2hvd21vZGUoKTsKKwlyZXN0YXJ0X1ZJc3VhbF9zZWxlY3QgPSAyOwkvKiByZXN0YXJ0IFNlbGVjdCBtb2RlIGxhdGVyICovCisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwljYXAtPmNvdW50MSA9IC1jYXAtPmNvdW50MTsKKwludl9wY21hcmsoY2FwKTsKKyAgICB9Cit9CisKKy8qCisgKiBDVFJMLV4gY29tbWFuZCwgc2hvcnQgZm9yICI6ZSAjIgorICovCisgICAgc3RhdGljIHZvaWQKK252X2hhdChjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpZiAoIWNoZWNrY2xlYXJvcHEoY2FwLT5vYXApKQorCSh2b2lkKWJ1Zmxpc3RfZ2V0ZmlsZSgoaW50KWNhcC0+Y291bnQwLCAobGluZW5yX1QpMCwKKwkJCQkJCUdFVEZfU0VUTUFSS3xHRVRGX0FMVCwgRkFMU0UpOworfQorCisvKgorICogIloiIGNvbW1hbmRzLgorICovCisgICAgc3RhdGljIHZvaWQKK252X1pldChjYXApCisgICAgY21kYXJnX1QgKmNhcDsKK3sKKyAgICBpZiAoIWNoZWNrY2xlYXJvcHEoY2FwLT5vYXApKQorICAgIHsKKwlzd2l0Y2ggKGNhcC0+bmNoYXIpCisJeworCQkJLyogIlpaIjogZXF1aXZhbGVudCB0byAiOngiLiAqLworCSAgICBjYXNlICdaJzoJZG9fY21kbGluZV9jbWQoKGNoYXJfdSAqKSJ4Iik7CisJCQlicmVhazsKKworCQkJLyogIlpRIjogZXF1aXZhbGVudCB0byAiOnEhIiAoRWx2aXMgY29tcGF0aWJsZSkuICovCisJICAgIGNhc2UgJ1EnOglkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopInEhIik7CisJCQlicmVhazsKKworCSAgICBkZWZhdWx0OgljbGVhcm9wYmVlcChjYXAtPm9hcCk7CisJfQorICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENhbGwgbnZfaWRlbnQoKSBhcyBpZiAiYzEiIHdhcyB1c2VkLCB3aXRoICJjMiIgYXMgbmV4dCBjaGFyYWN0ZXIuCisgKi8KKyAgICB2b2lkCitkb19udl9pZGVudChjMSwgYzIpCisgICAgaW50CQljMTsKKyAgICBpbnQJCWMyOworeworICAgIG9wYXJnX1QJb2E7CisgICAgY21kYXJnX1QJY2E7CisKKyAgICBjbGVhcl9vcGFyZygmb2EpOworICAgIHZpbV9tZW1zZXQoJmNhLCAwLCBzaXplb2YoY2EpKTsKKyAgICBjYS5vYXAgPSAmb2E7CisgICAgY2EuY21kY2hhciA9IGMxOworICAgIGNhLm5jaGFyID0gYzI7CisgICAgbnZfaWRlbnQoJmNhKTsKK30KKyNlbmRpZgorCisvKgorICogSGFuZGxlIHRoZSBjb21tYW5kcyB0aGF0IHVzZSB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yLgorICogW2ddIENUUkwtXQk6dGEgdG8gY3VycmVudCBpZGVudGlmaWVyCisgKiBbZ10gJ0snCXJ1biBwcm9ncmFtIGZvciBjdXJyZW50IGlkZW50aWZpZXIKKyAqIFtnXSAnKicJLyB0byBjdXJyZW50IGlkZW50aWZpZXIgb3Igc3RyaW5nCisgKiBbZ10gJyMnCT8gdG8gY3VycmVudCBpZGVudGlmaWVyIG9yIHN0cmluZworICogIGcgICddJwk6dHNlbGVjdCBmb3IgY3VycmVudCBpZGVudGlmaWVyCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfaWRlbnQoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgY2hhcl91CSpwdHIgPSBOVUxMOworICAgIGNoYXJfdQkqYnVmOworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKmtwOwkJLyogdmFsdWUgb2YgJ2tleXdvcmRwcmcnICovCisgICAgaW50CQlrcF9oZWxwOwkvKiAna2V5d29yZHByZycgaXMgIjpoZWxwIiAqLworICAgIGludAkJbiA9IDA7CQkvKiBpbml0IGZvciBHQ0MgKi8KKyAgICBpbnQJCWNtZGNoYXI7CisgICAgaW50CQlnX2NtZDsJCS8qICJnIiBjb21tYW5kICovCisgICAgY2hhcl91CSphdXhfcHRyOworICAgIGludAkJaXNtYW47CisgICAgaW50CQlpc21hbl9zOworCisgICAgaWYgKGNhcC0+Y21kY2hhciA9PSAnZycpCS8qICJnKiIsICJnIyIsICJnXSIgYW5kICJnQ1RSTC1dIiAqLworICAgIHsKKwljbWRjaGFyID0gY2FwLT5uY2hhcjsKKwlnX2NtZCA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY21kY2hhciA9IGNhcC0+Y21kY2hhcjsKKwlnX2NtZCA9IEZBTFNFOworICAgIH0KKworICAgIGlmIChjbWRjaGFyID09IFBPVU5EKQkvKiB0aGUgcG91bmQgc2lnbiwgJyMnIGZvciBFbmdsaXNoIGtleWJvYXJkcyAqLworCWNtZGNoYXIgPSAnIyc7CisKKyAgICAvKgorICAgICAqIFRoZSAiXSIsICJDVFJMLV0iIGFuZCAiSyIgY29tbWFuZHMgYWNjZXB0IGFuIGFyZ3VtZW50IGluIFZpc3VhbCBtb2RlLgorICAgICAqLworICAgIGlmIChjbWRjaGFyID09ICddJyB8fCBjbWRjaGFyID09IEN0cmxfUlNCIHx8IGNtZGNoYXIgPT0gJ0snKQorICAgIHsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCWlmIChWSXN1YWxfYWN0aXZlICYmIGdldF92aXN1YWxfdGV4dChjYXAsICZwdHIsICZuKSA9PSBGQUlMKQorCSAgICByZXR1cm47CisjZW5kaWYKKwlpZiAoY2hlY2tjbGVhcm9wcShjYXAtPm9hcCkpCisJICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocHRyID09IE5VTEwgJiYgKG4gPSBmaW5kX2lkZW50X3VuZGVyX2N1cnNvcigmcHRyLAorCQkgICAgKGNtZGNoYXIgPT0gJyonIHx8IGNtZGNoYXIgPT0gJyMnKQorCQkJCSA/IEZJTkRfSURFTlR8RklORF9TVFJJTkcgOiBGSU5EX0lERU5UKSkgPT0gMCkKKyAgICB7CisJY2xlYXJvcChjYXAtPm9hcCk7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qIEFsbG9jYXRlIGJ1ZmZlciB0byBwdXQgdGhlIGNvbW1hbmQgaW4uICBJbnNlcnRpbmcgYmFja3NsYXNoZXMgY2FuCisgICAgICogZG91YmxlIHRoZSBsZW5ndGggb2YgdGhlIHdvcmQuICBwX2twIC8gY3VyYnVmLT5iX3Bfa3AgY291bGQgYmUgYWRkZWQKKyAgICAgKiBhbmQgc29tZSBudW1iZXJzLiAqLworICAgIGtwID0gKCpjdXJidWYtPmJfcF9rcCA9PSBOVUwgPyBwX2twIDogY3VyYnVmLT5iX3Bfa3ApOworICAgIGtwX2hlbHAgPSAoKmtwID09IE5VTCB8fCBTVFJDTVAoa3AsICI6aGUiKSA9PSAwCisJCQkJCQkgfHwgU1RSQ01QKGtwLCAiOmhlbHAiKSA9PSAwKTsKKyAgICBidWYgPSBhbGxvYygodW5zaWduZWQpKG4gKiAyICsgMzAgKyBTVFJMRU4oa3ApKSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCXJldHVybjsKKyAgICBidWZbMF0gPSBOVUw7CisKKyAgICBzd2l0Y2ggKGNtZGNoYXIpCisgICAgeworCWNhc2UgJyonOgorCWNhc2UgJyMnOgorCSAgICAvKgorCSAgICAgKiBQdXQgY3Vyc29yIGF0IHN0YXJ0IG9mIHdvcmQsIG1ha2VzIHNlYXJjaCBza2lwIHRoZSB3b3JkCisJICAgICAqIHVuZGVyIHRoZSBjdXJzb3IuCisJICAgICAqIENhbGwgc2V0cGNtYXJrKCkgZmlyc3QsIHNvICIqYGAiIHB1dHMgdGhlIGN1cnNvciBiYWNrIHdoZXJlCisJICAgICAqIGl0IHdhcy4KKwkgICAgICovCisJICAgIHNldHBjbWFyaygpOworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IChjb2xucl9UKSAocHRyIC0gbWxfZ2V0X2N1cmxpbmUoKSk7CisKKwkgICAgaWYgKCFnX2NtZCAmJiB2aW1faXN3b3JkcChwdHIpKQorCQlTVFJDUFkoYnVmLCAiXFw8Iik7CisJICAgIG5vX3NtYXJ0Y2FzZSA9IFRSVUU7CS8qIGRvbid0IHVzZSAnc21hcnRjYXNlJyBub3cgKi8KKwkgICAgYnJlYWs7CisKKwljYXNlICdLJzoKKwkgICAgaWYgKGtwX2hlbHApCisJCVNUUkNQWShidWYsICJoZSEgIik7CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBXaGVuIGEgY291bnQgaXMgZ2l2ZW4sIHR1cm4gaXQgaW50byBhIHJhbmdlLiAgSXMgdGhpcworCQkgKiByZWFsbHkgd2hhdCB3ZSB3YW50PyAqLworCQlpc21hbiA9IChTVFJDTVAoa3AsICJtYW4iKSA9PSAwKTsKKwkJaXNtYW5fcyA9IChTVFJDTVAoa3AsICJtYW4gLXMiKSA9PSAwKTsKKwkJaWYgKGNhcC0+Y291bnQwICE9IDAgJiYgIShpc21hbiB8fCBpc21hbl9zKSkKKwkJICAgIHNwcmludGYoKGNoYXIgKilidWYsICIuLC4rJWxkIiwgY2FwLT5jb3VudDAgLSAxKTsKKworCQlTVFJDQVQoYnVmLCAiISAiKTsKKwkJaWYgKGNhcC0+Y291bnQwID09IDAgJiYgaXNtYW5fcykKKwkJICAgIFNUUkNBVChidWYsICJtYW4iKTsKKwkJZWxzZQorCQkgICAgU1RSQ0FUKGJ1Ziwga3ApOworCQlTVFJDQVQoYnVmLCAiICIpOworCQlpZiAoY2FwLT5jb3VudDAgIT0gMCAmJiAoaXNtYW4gfHwgaXNtYW5fcykpCisJCXsKKwkJICAgIHNwcmludGYoKGNoYXIgKilidWYgKyBTVFJMRU4oYnVmKSwgIiVsZCIsIGNhcC0+Y291bnQwKTsKKwkJICAgIFNUUkNBVChidWYsICIgIik7CisJCX0KKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJ10nOgorI2lmZGVmIEZFQVRfQ1NDT1BFCisJICAgIGlmIChwX2NzdCkKKwkJU1RSQ1BZKGJ1ZiwgImNzdGFnICIpOworCSAgICBlbHNlCisjZW5kaWYKKwkJU1RSQ1BZKGJ1ZiwgInRzICIpOworCSAgICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIGlmIChjdXJidWYtPmJfaGVscCkKKwkJU1RSQ1BZKGJ1ZiwgImhlISAiKTsKKwkgICAgZWxzZSBpZiAoZ19jbWQpCisJCVNUUkNQWShidWYsICJ0aiAiKTsKKwkgICAgZWxzZQorCQlTVFJDUFkoYnVmLCAidGEgIik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3cgZ3JhYiB0aGUgY2hhcnMgaW4gdGhlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBpZiAoY21kY2hhciA9PSAnKicpCisJYXV4X3B0ciA9IChjaGFyX3UgKikocF9tYWdpYyA/ICIvLip+W14kXFwiIDogIi9eJFxcIik7CisgICAgZWxzZSBpZiAoY21kY2hhciA9PSAnIycpCisJYXV4X3B0ciA9IChjaGFyX3UgKikocF9tYWdpYyA/ICIvPy4qflteJFxcIiA6ICIvP14kXFwiKTsKKyAgICBlbHNlIGlmIChjbWRjaGFyID09ICdLJyAmJiAha3BfaGVscCkKKwlhdXhfcHRyID0gKGNoYXJfdSAqKSIgXHRcXFwifCEiOworICAgIGVsc2UKKwkvKiBEb24ndCBlc2NhcGUgc3BhY2VzIGFuZCBUYWJzIGluIGEgdGFnIHdpdGggYSBiYWNrc2xhc2ggKi8KKwlhdXhfcHRyID0gKGNoYXJfdSAqKSJcXHxcIiI7CisKKyAgICBwID0gYnVmICsgU1RSTEVOKGJ1Zik7CisgICAgd2hpbGUgKG4tLSA+IDApCisgICAgeworCS8qIHB1dCBhIGJhY2tzbGFzaCBiZWZvcmUgXCBhbmQgc29tZSBvdGhlcnMgKi8KKwlpZiAodmltX3N0cmNocihhdXhfcHRyLCAqcHRyKSAhPSBOVUxMKQorCSAgICAqcCsrID0gJ1xcJzsKKyNpZmRlZiBGRUFUX01CWVRFCisJLyogV2hlbiBjdXJyZW50IGJ5dGUgaXMgYSBwYXJ0IG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXIsIGNvcHkgYWxsIGJ5dGVzCisJICogb2YgdGhhdCBjaGFyYWN0ZXIuICovCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIGludCBpOworCSAgICBpbnQgbGVuID0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIpIC0gMTsKKworCSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuICYmIG4gPj0gMTsgKytpLCAtLW4pCisJCSpwKysgPSAqcHRyKys7CisJfQorI2VuZGlmCisJKnArKyA9ICpwdHIrKzsKKyAgICB9CisgICAgKnAgPSBOVUw7CisKKyAgICAvKgorICAgICAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQuCisgICAgICovCisgICAgaWYgKGNtZGNoYXIgPT0gJyonIHx8IGNtZGNoYXIgPT0gJyMnKQorICAgIHsKKwlpZiAoIWdfY21kICYmICgKKyNpZmRlZiBGRUFUX01CWVRFCisJCWhhc19tYnl0ZSA/IHZpbV9pc3dvcmRwKG1iX3ByZXZwdHIobWxfZ2V0X2N1cmxpbmUoKSwgcHRyKSkgOgorI2VuZGlmCisJCXZpbV9pc3dvcmRjKHB0clstMV0pKSkKKwkgICAgU1RSQ0FUKGJ1ZiwgIlxcPiIpOworI2lmZGVmIEZFQVRfQ01ESElTVAorCS8qIHB1dCBwYXR0ZXJuIGluIHNlYXJjaCBoaXN0b3J5ICovCisJYWRkX3RvX2hpc3RvcnkoSElTVF9TRUFSQ0gsIGJ1ZiwgVFJVRSwgTlVMKTsKKyNlbmRpZgorCW5vcm1hbF9zZWFyY2goY2FwLCBjbWRjaGFyID09ICcqJyA/ICcvJyA6ICc/JywgYnVmLCAwKTsKKyAgICB9CisgICAgZWxzZQorCWRvX2NtZGxpbmVfY21kKGJ1Zik7CisKKyAgICB2aW1fZnJlZShidWYpOworfQorCisjaWZkZWYgRkVBVF9WSVNVQUwKKy8qCisgKiBHZXQgdmlzdWFsbHkgc2VsZWN0ZWQgdGV4dCwgd2l0aGluIG9uZSBsaW5lIG9ubHkuCisgKiBSZXR1cm5zIEZBSUwgaWYgbW9yZSB0aGFuIG9uZSBsaW5lIHNlbGVjdGVkLgorICovCisgICAgc3RhdGljIGludAorZ2V0X3Zpc3VhbF90ZXh0KGNhcCwgcHAsIGxlbnApCisgICAgY21kYXJnX1QJKmNhcDsKKyAgICBjaGFyX3UJKipwcDsJICAgIC8qIHJldHVybjogc3RhcnQgb2Ygc2VsZWN0ZWQgdGV4dCAqLworICAgIGludAkJKmxlbnA7CSAgICAvKiByZXR1cm46IGxlbmd0aCBvZiBzZWxlY3RlZCB0ZXh0ICovCit7CisgICAgaWYgKFZJc3VhbF9tb2RlICE9ICdWJykKKwl1bmFkanVzdF9mb3Jfc2VsKCk7CisgICAgaWYgKFZJc3VhbC5sbnVtICE9IGN1cndpbi0+d19jdXJzb3IubG51bSkKKyAgICB7CisJY2xlYXJvcGJlZXAoY2FwLT5vYXApOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICBpZiAoVklzdWFsX21vZGUgPT0gJ1YnKQorICAgIHsKKwkqcHAgPSBtbF9nZXRfY3VybGluZSgpOworCSpsZW5wID0gKGludClTVFJMRU4oKnBwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAobHQoY3Vyd2luLT53X2N1cnNvciwgVklzdWFsKSkKKwl7CisJICAgICpwcCA9IG1sX2dldF9wb3MoJmN1cndpbi0+d19jdXJzb3IpOworCSAgICAqbGVucCA9IFZJc3VhbC5jb2wgLSBjdXJ3aW4tPndfY3Vyc29yLmNvbCArIDE7CisJfQorCWVsc2UKKwl7CisJICAgICpwcCA9IG1sX2dldF9wb3MoJlZJc3VhbCk7CisJICAgICpsZW5wID0gY3Vyd2luLT53X2N1cnNvci5jb2wgLSBWSXN1YWwuY29sICsgMTsKKwl9CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIC8qIENvcnJlY3QgdGhlIGxlbmd0aCB0byBpbmNsdWRlIHRoZSB3aG9sZSBsYXN0IGNoYXJhY3Rlci4gKi8KKwkgICAgKmxlbnAgKz0gKCptYl9wdHIybGVuX2NoZWNrKSgqcHAgKyAoKmxlbnAgLSAxKSkgLSAxOworI2VuZGlmCisgICAgfQorICAgIHJlc2V0X1ZJc3VhbF9hbmRfcmVzZWwoKTsKKyAgICByZXR1cm4gT0s7Cit9CisjZW5kaWYKKworLyoKKyAqIENUUkwtVDogYmFja3dhcmRzIGluIHRhZyBzdGFjaworICovCisgICAgc3RhdGljIHZvaWQKK252X3RhZ3BvcChjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpZiAoIWNoZWNrY2xlYXJvcHEoY2FwLT5vYXApKQorCWRvX3RhZygoY2hhcl91ICopIiIsIERUX1BPUCwgKGludCljYXAtPmNvdW50MSwgRkFMU0UsIFRSVUUpOworfQorCisvKgorICogSGFuZGxlIHNjcm9sbGluZyBjb21tYW5kICdIJywgJ0wnIGFuZCAnTScuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfc2Nyb2xsKGNhcCkKKyAgICBjbWRhcmdfVCAgKmNhcDsKK3sKKyAgICBpbnQJCXVzZWQgPSAwOworICAgIGxvbmcJbjsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBsaW5lbnJfVAlsbnVtOworI2VuZGlmCisgICAgaW50CQloYWxmOworCisgICAgY2FwLT5vYXAtPm1vdGlvbl90eXBlID0gTUxJTkU7CisgICAgc2V0cGNtYXJrKCk7CisKKyAgICBpZiAoY2FwLT5jbWRjaGFyID09ICdMJykKKyAgICB7CisJdmFsaWRhdGVfYm90bGluZSgpOwkgICAgLyogbWFrZSBzdXJlIGN1cndpbi0+d19ib3RsaW5lIGlzIHZhbGlkICovCisJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gY3Vyd2luLT53X2JvdGxpbmUgLSAxOworCWlmIChjYXAtPmNvdW50MSAtIDEgPj0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSAxOworCWVsc2UKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtIC09IGNhcC0+Y291bnQxIC0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoY2FwLT5jbWRjaGFyID09ICdNJykKKwl7CisjaWZkZWYgRkVBVF9ESUZGCisJICAgIC8qIERvbid0IGNvdW50IGZpbGxlciBsaW5lcyBhYm92ZSB0aGUgd2luZG93LiAqLworCSAgICB1c2VkIC09IGRpZmZfY2hlY2tfZmlsbChjdXJ3aW4sIGN1cndpbi0+d190b3BsaW5lKQorCQkJCQkJCSAgLSBjdXJ3aW4tPndfdG9wZmlsbDsKKyNlbmRpZgorCSAgICB2YWxpZGF0ZV9ib3RsaW5lKCk7CSAgICAvKiBtYWtlIHN1cmUgd19lbXB0eV9yb3dzIGlzIHZhbGlkICovCisJICAgIGhhbGYgPSAoY3Vyd2luLT53X2hlaWdodCAtIGN1cndpbi0+d19lbXB0eV9yb3dzICsgMSkgLyAyOworCSAgICBmb3IgKG4gPSAwOyBjdXJ3aW4tPndfdG9wbGluZSArIG4gPCBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsgKytuKQorCSAgICB7CisjaWZkZWYgRkVBVF9ESUZGCisJCS8qIENvdW50IGhhbGYgaGUgbnVtYmVyIG9mIGZpbGxlciBsaW5lcyB0byBiZSAiYmVsb3cgdGhpcworCQkgKiBsaW5lIiBhbmQgaGFsZiB0byBiZSAiYWJvdmUgdGhlIG5leHQgbGluZSIuICovCisJCWlmIChuID4gMCAmJiB1c2VkICsgZGlmZl9jaGVja19maWxsKGN1cndpbiwgY3Vyd2luLT53X3RvcGxpbmUKKwkJCQkJCQkgICAgICsgbikgLyAyID49IGhhbGYpCisJCXsKKwkJICAgIC0tbjsKKwkJICAgIGJyZWFrOworCQl9CisjZW5kaWYKKwkJdXNlZCArPSBwbGluZXMoY3Vyd2luLT53X3RvcGxpbmUgKyBuKTsKKwkJaWYgKHVzZWQgPj0gaGFsZikKKwkJICAgIGJyZWFrOworI2lmZGVmIEZFQVRfRk9MRElORworCQlpZiAoaGFzRm9sZGluZyhjdXJ3aW4tPndfdG9wbGluZSArIG4sIE5VTEwsICZsbnVtKSkKKwkJICAgIG4gPSBsbnVtIC0gY3Vyd2luLT53X3RvcGxpbmU7CisjZW5kaWYKKwkgICAgfQorCSAgICBpZiAobiA+IDAgJiYgdXNlZCA+IGN1cndpbi0+d19oZWlnaHQpCisJCS0tbjsKKwl9CisJZWxzZQorCSAgICBuID0gY2FwLT5jb3VudDEgLSAxOworCWN1cndpbi0+d19jdXJzb3IubG51bSA9IGN1cndpbi0+d190b3BsaW5lICsgbjsKKwlpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworICAgIH0KKworICAgIGN1cnNvcl9jb3JyZWN0KCk7CS8qIGNvcnJlY3QgZm9yICdzbycgKi8KKyAgICBiZWdpbmxpbmUoQkxfU09MIHwgQkxfRklYKTsKK30KKworLyoKKyAqIEN1cnNvciByaWdodCBjb21tYW5kcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9yaWdodChjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBsb25nCW47CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpbnQJCVBBU1RfTElORTsKKyNlbHNlCisjIGRlZmluZSBQQVNUX0xJTkUgMAorI2VuZGlmCisKKyAgICBjYXAtPm9hcC0+bW90aW9uX3R5cGUgPSBNQ0hBUjsKKyAgICBjYXAtPm9hcC0+aW5jbHVzaXZlID0gRkFMU0U7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBQQVNUX0xJTkUgPSAoVklzdWFsX2FjdGl2ZSAmJiAqcF9zZWwgIT0gJ28nKTsKKworIyBpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgLyoKKyAgICAgKiBJbiB2aXJ0dWFsIG1vZGUsIHRoZXJlJ3Mgbm8gc3VjaCB0aGluZyBhcyAiUEFTVF9MSU5FIiwgYXMgbGluZXMgYXJlCisgICAgICogKHRoZW9yZXRpY2FsbHkpIGluZmluaXRseSBsb25nLgorICAgICAqLworICAgIGlmICh2aXJ0dWFsX2FjdGl2ZSgpKQorCVBBU1RfTElORSA9IDA7CisjIGVuZGlmCisjZW5kaWYKKworICAgIGZvciAobiA9IGNhcC0+Y291bnQxOyBuID4gMDsgLS1uKQorICAgIHsKKwlpZiAoKCFQQVNUX0xJTkUgJiYgb25lcmlnaHQoKSA9PSBGQUlMKQorCQl8fCAoUEFTVF9MSU5FICYmICptbF9nZXRfY3Vyc29yKCkgPT0gTlVMKSkKKwl7CisJICAgIC8qCisJICAgICAqCSAgPFNwYWNlPiB3cmFwcyB0byBuZXh0IGxpbmUgaWYgJ3doaWNod3JhcCcgYml0IDEgc2V0LgorCSAgICAgKgkgICAgICAnbCcgd3JhcHMgdG8gbmV4dCBsaW5lIGlmICd3aGljaHdyYXAnIGJpdCAyIHNldC4KKwkgICAgICogQ1VSU19SSUdIVCB3cmFwcyB0byBuZXh0IGxpbmUgaWYgJ3doaWNod3JhcCcgYml0IDMgc2V0CisJICAgICAqLworCSAgICBpZiAoICAgICAgICgoY2FwLT5jbWRjaGFyID09ICcgJworCQkJICAgICYmIHZpbV9zdHJjaHIocF93dywgJ3MnKSAhPSBOVUxMKQorCQkJfHwgKGNhcC0+Y21kY2hhciA9PSAnbCcKKwkJCSAgICAmJiB2aW1fc3RyY2hyKHBfd3csICdsJykgIT0gTlVMTCkKKwkJCXx8IChjYXAtPmNtZGNoYXIgPT0gS19SSUdIVAorCQkJICAgICYmIHZpbV9zdHJjaHIocF93dywgJz4nKSAhPSBOVUxMKSkKKwkJICAgICYmIGN1cndpbi0+d19jdXJzb3IubG51bSA8IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSAgICB7CisJCS8qIFdoZW4gZGVsZXRpbmcgd2UgYWxzbyBjb3VudCB0aGUgTkwgYXMgYSBjaGFyYWN0ZXIuCisJCSAqIFNldCBjYXAtPm9hcC0+aW5jbHVzaXZlIHdoZW4gbGFzdCBjaGFyIGluIHRoZSBsaW5lIGlzCisJCSAqIGluY2x1ZGVkLCBtb3ZlIHRvIG5leHQgbGluZSBhZnRlciB0aGF0ICovCisJCWlmICgJICAgKGNhcC0+b2FwLT5vcF90eXBlID09IE9QX0RFTEVURQorCQkJICAgIHx8IGNhcC0+b2FwLT5vcF90eXBlID09IE9QX0NIQU5HRSkKKwkJCSYmICFjYXAtPm9hcC0+aW5jbHVzaXZlCisJCQkmJiAhbGluZWVtcHR5KGN1cndpbi0+d19jdXJzb3IubG51bSkpCisJCSAgICBjYXAtPm9hcC0+aW5jbHVzaXZlID0gVFJVRTsKKwkJZWxzZQorCQl7CisJCSAgICArK2N1cndpbi0+d19jdXJzb3IubG51bTsKKwkJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisjZW5kaWYKKwkJICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCQkgICAgY2FwLT5vYXAtPmluY2x1c2l2ZSA9IEZBTFNFOworCQl9CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGlmIChjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApCisJICAgIHsKKwkJLyogT25seSBiZWVwIGFuZCBmbHVzaCBpZiBub3QgbW92ZWQgYXQgYWxsICovCisJCWlmIChuID09IGNhcC0+Y291bnQxKQorCQkgICAgYmVlcF9mbHVzaCgpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoIWxpbmVlbXB0eShjdXJ3aW4tPndfY3Vyc29yLmxudW0pKQorCQkgICAgY2FwLT5vYXAtPmluY2x1c2l2ZSA9IFRSVUU7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorI2lmZGVmIEZFQVRfVklTVUFMCisJZWxzZSBpZiAoUEFTVF9MSU5FKQorCXsKKwkgICAgY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisjIGlmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkgICAgaWYgKHZpcnR1YWxfYWN0aXZlKCkpCisJCW9uZXJpZ2h0KCk7CisJICAgIGVsc2UKKyMgZW5kaWYKKwkgICAgeworIyBpZmRlZiBGRUFUX01CWVRFCisJCWlmIChoYXNfbWJ5dGUpCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCArPQorCQkJCQkgKCptYl9wdHIybGVuX2NoZWNrKShtbF9nZXRfY3Vyc29yKCkpOworCQllbHNlCisjIGVuZGlmCisJCSAgICArK2N1cndpbi0+d19jdXJzb3IuY29sOworCSAgICB9CisJfQorI2VuZGlmCisgICAgfQorI2lmZGVmIEZFQVRfRk9MRElORworICAgIGlmIChuICE9IGNhcC0+Y291bnQxICYmIChmZG9fZmxhZ3MgJiBGRE9fSE9SKSAmJiBLZXlUeXBlZAorCQkJCQkgICAgICAgJiYgY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfTk9QKQorCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKK30KKworLyoKKyAqIEN1cnNvciBsZWZ0IGNvbW1hbmRzLgorICoKKyAqIFJldHVybnMgVFJVRSB3aGVuIG9wZXJhdG9yIGVuZCBzaG91bGQgbm90IGJlIGFkanVzdGVkLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2xlZnQoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgbG9uZwluOworCisgICAgY2FwLT5vYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisgICAgY2FwLT5vYXAtPmluY2x1c2l2ZSA9IEZBTFNFOworICAgIGZvciAobiA9IGNhcC0+Y291bnQxOyBuID4gMDsgLS1uKQorICAgIHsKKwlpZiAob25lbGVmdCgpID09IEZBSUwpCisJeworCSAgICAvKiA8QlM+IGFuZCA8RGVsPiB3cmFwIHRvIHByZXZpb3VzIGxpbmUgaWYgJ3doaWNod3JhcCcgaGFzICdiJy4KKwkgICAgICoJCSAnaCcgd3JhcHMgdG8gcHJldmlvdXMgbGluZSBpZiAnd2hpY2h3cmFwJyBoYXMgJ2gnLgorCSAgICAgKgkgICBDVVJTX0xFRlQgd3JhcHMgdG8gcHJldmlvdXMgbGluZSBpZiAnd2hpY2h3cmFwJyBoYXMgJzwnLgorCSAgICAgKi8KKwkgICAgaWYgKCAgICAgICAoKChjYXAtPmNtZGNoYXIgPT0gS19CUworCQkJCXx8IGNhcC0+Y21kY2hhciA9PSBDdHJsX0gpCisJCQkgICAgJiYgdmltX3N0cmNocihwX3d3LCAnYicpICE9IE5VTEwpCisJCQl8fCAoY2FwLT5jbWRjaGFyID09ICdoJworCQkJICAgICYmIHZpbV9zdHJjaHIocF93dywgJ2gnKSAhPSBOVUxMKQorCQkJfHwgKGNhcC0+Y21kY2hhciA9PSBLX0xFRlQKKwkJCSAgICAmJiB2aW1fc3RyY2hyKHBfd3csICc8JykgIT0gTlVMTCkpCisJCSAgICAmJiBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiAxKQorCSAgICB7CisJCS0tKGN1cndpbi0+d19jdXJzb3IubG51bSk7CisJCWNvbGFkdmFuY2UoKGNvbG5yX1QpTUFYQ09MKTsKKwkJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisKKwkJLyogV2hlbiB0aGUgTkwgYmVmb3JlIHRoZSBmaXJzdCBjaGFyIGhhcyB0byBiZSBkZWxldGVkIHdlCisJCSAqIHB1dCB0aGUgY3Vyc29yIG9uIHRoZSBOVUwgYWZ0ZXIgdGhlIHByZXZpb3VzIGxpbmUuCisJCSAqIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpYWwgY2FzZSwgYmUgY2FyZWZ1bCEKKwkJICogZG9uJ3QgYWRqdXN0IG9wX2VuZCBub3csIG90aGVyd2lzZSBpdCB3b24ndCB3b3JrICovCisJCWlmICgJICAgKGNhcC0+b2FwLT5vcF90eXBlID09IE9QX0RFTEVURQorCQkJICAgIHx8IGNhcC0+b2FwLT5vcF90eXBlID09IE9QX0NIQU5HRSkKKwkJCSYmICFsaW5lZW1wdHkoY3Vyd2luLT53X2N1cnNvci5sbnVtKSkKKwkJeworCQkgICAgKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwkJICAgIGNhcC0+cmV0dmFsIHw9IENBX05PX0FESl9PUF9FTkQ7CisJCX0KKwkJY29udGludWU7CisJICAgIH0KKwkgICAgLyogT25seSBiZWVwIGFuZCBmbHVzaCBpZiBub3QgbW92ZWQgYXQgYWxsICovCisJICAgIGVsc2UgaWYgKGNhcC0+b2FwLT5vcF90eXBlID09IE9QX05PUCAmJiBuID09IGNhcC0+Y291bnQxKQorCQliZWVwX2ZsdXNoKCk7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaWYgKG4gIT0gY2FwLT5jb3VudDEgJiYgKGZkb19mbGFncyAmIEZET19IT1IpICYmIEtleVR5cGVkCisJCQkJCSAgICAgICAmJiBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApCisJZm9sZE9wZW5DdXJzb3IoKTsKKyNlbmRpZgorfQorCisvKgorICogQ3Vyc29yIHVwIGNvbW1hbmRzLgorICogY2FwLT5hcmcgaXMgVFJVRSBmb3IgIi0iOiBNb3ZlIGN1cnNvciB0byBmaXJzdCBub24tYmxhbmsuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfdXAoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgY2FwLT5vYXAtPm1vdGlvbl90eXBlID0gTUxJTkU7CisgICAgaWYgKGN1cnNvcl91cChjYXAtPmNvdW50MSwgY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfTk9QKSA9PSBGQUlMKQorCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyAgICBlbHNlIGlmIChjYXAtPmFyZykKKwliZWdpbmxpbmUoQkxfV0hJVEUgfCBCTF9GSVgpOworfQorCisvKgorICogQ3Vyc29yIGRvd24gY29tbWFuZHMuCisgKiBjYXAtPmFyZyBpcyBUUlVFIGZvciBDUiBhbmQgIisiOiBNb3ZlIGN1cnNvciB0byBmaXJzdCBub24tYmxhbmsuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfZG93bihjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorICAgIC8qIEluIGEgcXVpY2tmaXggd2luZG93IGEgPENSPiBqdW1wcyB0byB0aGUgZXJyb3IgdW5kZXIgdGhlIGN1cnNvci4gKi8KKyAgICBpZiAoYnRfcXVpY2tmaXgoY3VyYnVmKSAmJiBjYXAtPmNtZGNoYXIgPT0gJ1xyJykKKwlkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopIi5jYyIpOworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyNpZmRlZiBGRUFUX0NNRFdJTgorCS8qIEluIHRoZSBjbWRsaW5lIHdpbmRvdyBhIDxDUj4gZXhlY3V0ZXMgdGhlIGNvbW1hbmQuICovCisJaWYgKGNtZHdpbl90eXBlICE9IDAgJiYgY2FwLT5jbWRjaGFyID09ICdccicpCisJICAgIGNtZHdpbl9yZXN1bHQgPSBDQVI7CisJZWxzZQorI2VuZGlmCisJeworCSAgICBjYXAtPm9hcC0+bW90aW9uX3R5cGUgPSBNTElORTsKKwkgICAgaWYgKGN1cnNvcl9kb3duKGNhcC0+Y291bnQxLCBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApID09IEZBSUwpCisJCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKwkgICAgZWxzZSBpZiAoY2FwLT5hcmcpCisJCWJlZ2lubGluZShCTF9XSElURSB8IEJMX0ZJWCk7CisJfQorICAgIH0KK30KKworI2lmZGVmIEZFQVRfU0VBUkNIUEFUSAorLyoKKyAqIEdyYWIgdGhlIGZpbGUgbmFtZSB1bmRlciB0aGUgY3Vyc29yIGFuZCBlZGl0IGl0LgorICovCisgICAgc3RhdGljIHZvaWQKK252X2dvdG9maWxlKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGNoYXJfdQkqcHRyOworCisjaWZkZWYgRkVBVF9DTURXSU4KKyAgICBpZiAoY21kd2luX3R5cGUgIT0gMCkKKyAgICB7CisJY2xlYXJvcGJlZXAoY2FwLT5vYXApOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKworIyBpZmRlZiBGRUFUX1ZJU1VBTAorICAgIC8qCisgICAgICogSW4gVmlzdWFsIG1vZGUsIHVzZSB0aGUgc2VsZWN0ZWQgdGV4dCBhcyBhIGZpbGUgbmFtZS4KKyAgICAgKiBEb24ndCBhbGxvdyBzZWxlY3Rpb24gYWNyb3NzIG11bHRpcGxlIGxpbmVzLgorICAgICAqLworICAgIGlmIChWSXN1YWxfYWN0aXZlKQorICAgIHsKKwlpbnQJbGVuOworCisJaWYgKGdldF92aXN1YWxfdGV4dChjYXAsICZwdHIsICZsZW4pID09IEZBSUwpCisJICAgIHJldHVybjsKKwlwdHIgPSBmaW5kX2ZpbGVfbmFtZV9pbl9wYXRoKHB0ciwgbGVuLAorCSAgICAgICBGTkFNRV9NRVNTfEZOQU1FX0VYUHxGTkFNRV9SRUwsIGNhcC0+Y291bnQxLCBjdXJidWYtPmJfZmZuYW1lKTsKKyAgICB9CisgICAgZWxzZQorIyBlbmRpZgorCXB0ciA9IGZpbGVfbmFtZV9hdF9jdXJzb3IoRk5BTUVfTUVTU3xGTkFNRV9IWVB8Rk5BTUVfRVhQfEZOQU1FX1JFTCwKKwkJCQkJCQkJIGNhcC0+Y291bnQxKTsKKworICAgIGlmIChwdHIgIT0gTlVMTCkKKyAgICB7CisJLyogZG8gYXV0b3dyaXRlIGlmIG5lY2Vzc2FyeSAqLworCWlmIChjdXJidWZJc0NoYW5nZWQoKSAmJiBjdXJidWYtPmJfbndpbmRvd3MgPD0gMSAmJiAhUF9ISUQoY3VyYnVmKSkKKwkgICAgYXV0b3dyaXRlKGN1cmJ1ZiwgRkFMU0UpOworCXNldHBjbWFyaygpOworCSh2b2lkKWRvX2VjbWQoMCwgcHRyLCBOVUxMLCBOVUxMLCBFQ01EX0xBU1QsCisJCQkJCSAgICAgICBQX0hJRChjdXJidWYpID8gRUNNRF9ISURFIDogMCk7CisJdmltX2ZyZWUocHRyKTsKKyAgICB9CisgICAgZWxzZQorCWNsZWFyb3AoY2FwLT5vYXApOworfQorI2VuZGlmCisKKy8qCisgKiA8RW5kPiBjb21tYW5kOiB0byBlbmQgb2YgY3VycmVudCBsaW5lIG9yIGxhc3QgbGluZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9lbmQoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaWYgKGNhcC0+YXJnKQkvKiBDVFJMLUVORCA9IGdvdG8gbGFzdCBsaW5lICovCisgICAgeworCW52X2dvdG8oY2FwKTsKKwljYXAtPmNvdW50MSA9IDE7CQkvKiB0byBlbmQgb2YgY3VycmVudCBsaW5lICovCisgICAgfQorICAgIG52X2RvbGxhcihjYXApOworfQorCisvKgorICogSGFuZGxlIHRoZSAiJCIgY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9kb2xsYXIoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgY2FwLT5vYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisgICAgY2FwLT5vYXAtPmluY2x1c2l2ZSA9IFRSVUU7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorICAgIC8qIEluIHZpcnR1YWwgbW9kZSB3aGVuIG9mZiB0aGUgZWRnZSBvZiBhIGxpbmUgYW5kIGFuIG9wZXJhdG9yCisgICAgICogaXMgcGVuZGluZyAod2hldyEpIGtlZXAgdGhlIGN1cnNvciB3aGVyZSBpdCBpcy4KKyAgICAgKiBPdGhlcndpc2UsIHNlbmQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gKi8KKyAgICBpZiAoIXZpcnR1YWxfYWN0aXZlKCkgfHwgZ2NoYXJfY3Vyc29yKCkgIT0gTlVMCisJCQkJCSAgICAgICB8fCBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApCisjZW5kaWYKKwljdXJ3aW4tPndfY3Vyc3dhbnQgPSBNQVhDT0w7CS8qIHNvIHdlIHN0YXkgYXQgdGhlIGVuZCAqLworICAgIGlmIChjdXJzb3JfZG93bigobG9uZykoY2FwLT5jb3VudDEgLSAxKSwKKwkJCQkJIGNhcC0+b2FwLT5vcF90eXBlID09IE9QX05PUCkgPT0gRkFJTCkKKwljbGVhcm9wYmVlcChjYXAtPm9hcCk7CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgZWxzZSBpZiAoKGZkb19mbGFncyAmIEZET19IT1IpICYmIEtleVR5cGVkICYmIGNhcC0+b2FwLT5vcF90eXBlID09IE9QX05PUCkKKwlmb2xkT3BlbkN1cnNvcigpOworI2VuZGlmCit9CisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiAnPycgYW5kICcvJyBjb21tYW5kcy4KKyAqIElmIGNhcC0+YXJnIGlzIFRSVUUgZG9uJ3Qgc2V0IFBDIG1hcmsuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfc2VhcmNoKGNhcCkKKyAgICBjbWRhcmdfVAkgICAgKmNhcDsKK3sKKyAgICBvcGFyZ19UCSpvYXAgPSBjYXAtPm9hcDsKKworICAgIGlmIChjYXAtPmNtZGNoYXIgPT0gJz8nICYmIGNhcC0+b2FwLT5vcF90eXBlID09IE9QX1JPVDEzKQorICAgIHsKKwkvKiBUcmFuc2xhdGUgImc/PyIgdG8gImc/Zz8iICovCisJY2FwLT5jbWRjaGFyID0gJ2cnOworCWNhcC0+bmNoYXIgPSAnPyc7CisJbnZfb3BlcmF0b3IoY2FwKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgY2FwLT5zZWFyY2hidWYgPSBnZXRjbWRsaW5lKGNhcC0+Y21kY2hhciwgY2FwLT5jb3VudDEsIDApOworCisgICAgaWYgKGNhcC0+c2VhcmNoYnVmID09IE5VTEwpCisgICAgeworCWNsZWFyb3Aob2FwKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgbm9ybWFsX3NlYXJjaChjYXAsIGNhcC0+Y21kY2hhciwgY2FwLT5zZWFyY2hidWYsCisJCQkJCQkoY2FwLT5hcmcgPyAwIDogU0VBUkNIX01BUkspKTsKK30KKworLyoKKyAqIEhhbmRsZSAiTiIgYW5kICJuIiBjb21tYW5kcy4KKyAqIGNhcC0+YXJnIGlzIFNFQVJDSF9SRVYgZm9yICJOIiwgMCBmb3IgIm4iLgorICovCisgICAgc3RhdGljIHZvaWQKK252X25leHQoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgbm9ybWFsX3NlYXJjaChjYXAsIDAsIE5VTEwsIFNFQVJDSF9NQVJLIHwgY2FwLT5hcmcpOworfQorCisvKgorICogU2VhcmNoIGZvciAicGF0IiBpbiBkaXJlY3Rpb24gImRpciIgKCcvJyBvciAnPycsIDAgZm9yIHJlcGVhdCkuCisgKiBVc2VzIG9ubHkgY2FwLT5jb3VudDEgYW5kIGNhcC0+b2FwIGZyb20gImNhcCIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbm9ybWFsX3NlYXJjaChjYXAsIGRpciwgcGF0LCBvcHQpCisgICAgY21kYXJnX1QJKmNhcDsKKyAgICBpbnQJCWRpcjsKKyAgICBjaGFyX3UJKnBhdDsKKyAgICBpbnQJCW9wdDsJCS8qIGV4dHJhIGZsYWdzIGZvciBkb19zZWFyY2goKSAqLworeworICAgIGludAkJaTsKKworICAgIGNhcC0+b2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworICAgIGNhcC0+b2FwLT5pbmNsdXNpdmUgPSBGQUxTRTsKKyAgICBjYXAtPm9hcC0+dXNlX3JlZ19vbmUgPSBUUlVFOworICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCisgICAgaSA9IGRvX3NlYXJjaChjYXAtPm9hcCwgZGlyLCBwYXQsIGNhcC0+Y291bnQxLAorCQkJCSBvcHQgfCBTRUFSQ0hfT1BUIHwgU0VBUkNIX0VDSE8gfCBTRUFSQ0hfTVNHKTsKKyAgICBpZiAoaSA9PSAwKQorCWNsZWFyb3AoY2FwLT5vYXApOworICAgIGVsc2UKKyAgICB7CisJaWYgKGkgPT0gMikKKwkgICAgY2FwLT5vYXAtPm1vdGlvbl90eXBlID0gTUxJTkU7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCWN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworCWlmIChjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1AgJiYgKGZkb19mbGFncyAmIEZET19TRUFSQ0gpICYmIEtleVR5cGVkKQorCSAgICBmb2xkT3BlbkN1cnNvcigpOworI2VuZGlmCisgICAgfQorCisgICAgLyogIi8kIiB3aWxsIHB1dCB0aGUgY3Vyc29yIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxpbmUsIG1heSBuZWVkIHRvCisgICAgICogY29ycmVjdCB0aGF0IGhlcmUgKi8KKyAgICBjaGVja19jdXJzb3IoKTsKK30KKworLyoKKyAqIENoYXJhY3RlciBzZWFyY2ggY29tbWFuZHMuCisgKiBjYXAtPmFyZyBpcyBCQUNLV0FSRCBmb3IgJ0YnIGFuZCAnVCcsIEZPUldBUkQgZm9yICdmJyBhbmQgJ3QnLCBUUlVFIGZvcgorICogJywnIGFuZCBGQUxTRSBmb3IgJzsnLgorICogY2FwLT5uY2hhciBpcyBOVUwgZm9yICcsJyBhbmQgJzsnIChyZXBlYXQgdGhlIHNlYXJjaCkKKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9jc2VhcmNoKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGludAkJdF9jbWQ7CisKKyAgICBpZiAoY2FwLT5jbWRjaGFyID09ICd0JyB8fCBjYXAtPmNtZGNoYXIgPT0gJ1QnKQorCXRfY21kID0gVFJVRTsKKyAgICBlbHNlCisJdF9jbWQgPSBGQUxTRTsKKworICAgIGNhcC0+b2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworICAgIGlmIChjYXAtPmFyZyA9PSBCQUNLV0FSRCkKKwljYXAtPm9hcC0+aW5jbHVzaXZlID0gRkFMU0U7CisgICAgZWxzZQorCWNhcC0+b2FwLT5pbmNsdXNpdmUgPSBUUlVFOworICAgIGlmIChJU19TUEVDSUFMKGNhcC0+bmNoYXIpIHx8IHNlYXJjaGMoY2FwLCB0X2NtZCkgPT0gRkFJTCkKKwljbGVhcm9wYmVlcChjYXAtPm9hcCk7CisgICAgZWxzZQorICAgIHsKKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJLyogSW5jbHVkZSBhIFRhYiBmb3IgInR4IiBhbmQgZm9yICJkZngiLiAqLworCWlmIChnY2hhcl9jdXJzb3IoKSA9PSBUQUIgJiYgdmlydHVhbF9hY3RpdmUoKSAmJiBjYXAtPmFyZyA9PSBGT1JXQVJECisJCSYmICh0X2NtZCB8fCBjYXAtPm9hcC0+b3BfdHlwZSAhPSBPUF9OT1ApKQorCXsKKwkgICAgY29sbnJfVAlzY29sLCBlY29sOworCisJICAgIGdldHZjb2woY3Vyd2luLCAmY3Vyd2luLT53X2N1cnNvciwgJnNjb2wsIE5VTEwsICZlY29sKTsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSBlY29sIC0gc2NvbDsKKwl9CisJZWxzZQorCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCWFkanVzdF9mb3Jfc2VsKGNhcCk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwlpZiAoKGZkb19mbGFncyAmIEZET19IT1IpICYmIEtleVR5cGVkICYmIGNhcC0+b2FwLT5vcF90eXBlID09IE9QX05PUCkKKwkgICAgZm9sZE9wZW5DdXJzb3IoKTsKKyNlbmRpZgorICAgIH0KK30KKworLyoKKyAqICJbIiBhbmQgIl0iIGNvbW1hbmRzLgorICogY2FwLT5hcmcgaXMgQkFDS1dBUkQgZm9yICJbIiBhbmQgRk9SV0FSRCBmb3IgIl0iLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2JyYWNrZXRzKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIHBvc19UCW5ld19wb3M7CisgICAgcG9zX1QJcHJldl9wb3M7CisgICAgcG9zX1QJKnBvcyA9IE5VTEw7CSAgICAvKiBpbml0IGZvciBHQ0MgKi8KKyAgICBwb3NfVAlvbGRfcG9zOwkgICAgLyogY3Vyc29yIHBvc2l0aW9uIGJlZm9yZSBjb21tYW5kICovCisgICAgaW50CQlmbGFnOworICAgIGxvbmcJbjsKKyAgICBpbnQJCWZpbmRjOworICAgIGludAkJYzsKKworICAgIGNhcC0+b2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworICAgIGNhcC0+b2FwLT5pbmNsdXNpdmUgPSBGQUxTRTsKKyAgICBvbGRfcG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOwkgICAgLyogVE9ETzogZG9uJ3QgZG8gdGhpcyBmb3IgYW4gZXJyb3IuICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfU0VBUkNIUEFUSAorICAgIC8qCisgICAgICogIltmIiBvciAiXWYiIDogRWRpdCBmaWxlIHVuZGVyIHRoZSBjdXJzb3IgKHNhbWUgYXMgImdmIikKKyAgICAgKi8KKyAgICBpZiAoY2FwLT5uY2hhciA9PSAnZicpCisJbnZfZ290b2ZpbGUoY2FwKTsKKyAgICBlbHNlCisjZW5kaWYKKworI2lmZGVmIEZFQVRfRklORF9JRAorICAgIC8qCisgICAgICogRmluZCB0aGUgb2NjdXJlbmNlKHMpIG9mIHRoZSBpZGVudGlmaWVyIG9yIGRlZmluZSB1bmRlciBjdXJzb3IKKyAgICAgKiBpbiBjdXJyZW50IGFuZCBpbmNsdWRlZCBmaWxlcyBvciBqdW1wIHRvIHRoZSBmaXJzdCBvY2N1cmVuY2UuCisgICAgICoKKyAgICAgKgkJCXNlYXJjaAkgICAgIGxpc3QJICAgIGp1bXAKKyAgICAgKgkJICAgICAgZndkICAgYndkICAgIGZ3ZAkgYndkCSBmd2QJYndkCisgICAgICogaWRlbnRpZmllciAgICAgIl1pIiAgIltpIiAgICJdSSIgICJbSSIJIl1eSSIgICJbXkkiCisgICAgICogZGVmaW5lCSAgICAgICJdZCIgICJbZCIgICAiXUQiICAiW0QiCSJdXkQiICAiW15EIgorICAgICAqLworICAgIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikKKyNpZmRlZiBFQkNESUMKKwkJImlJXDAwNWREXDA2NyIsCisjZWxzZQorCQkiaUlcMDExZERcMDA0IiwKKyNlbmRpZgorCQljYXAtPm5jaGFyKSAhPSBOVUxMKQorICAgIHsKKwljaGFyX3UJKnB0cjsKKwlpbnQJbGVuOworCisJaWYgKChsZW4gPSBmaW5kX2lkZW50X3VuZGVyX2N1cnNvcigmcHRyLCBGSU5EX0lERU5UKSkgPT0gMCkKKwkgICAgY2xlYXJvcChjYXAtPm9hcCk7CisJZWxzZQorCXsKKwkgICAgZmluZF9wYXR0ZXJuX2luX3BhdGgocHRyLCAwLCBsZW4sIFRSVUUsCisJCWNhcC0+Y291bnQwID09IDAgPyAhaXN1cHBlcihjYXAtPm5jaGFyKSA6IEZBTFNFLAorCQkoKGNhcC0+bmNoYXIgJiAweGYpID09ICgnZCcgJiAweGYpKSA/ICBGSU5EX0RFRklORSA6IEZJTkRfQU5ZLAorCQljYXAtPmNvdW50MSwKKwkJaXN1cHBlcihjYXAtPm5jaGFyKSA/IEFDVElPTl9TSE9XX0FMTCA6CisJCQkgICAgaXNsb3dlcihjYXAtPm5jaGFyKSA/IEFDVElPTl9TSE9XIDogQUNUSU9OX0dPVE8sCisJCWNhcC0+Y21kY2hhciA9PSAnXScgPyBjdXJ3aW4tPndfY3Vyc29yLmxudW0gKyAxIDogKGxpbmVucl9UKTEsCisJCShsaW5lbnJfVClNQVhMTlVNKTsKKwkgICAgY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisJfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKworICAgIC8qCisgICAgICogIlt7IiwgIlsoIiwgIl19IiBvciAiXSkiOiBnbyB0byBOdGggdW5jbG9zZWQgJ3snLCAnKCcsICd9JyBvciAnKScKKyAgICAgKiAiWyMiLCAiXSMiOiBnbyB0byBzdGFydC9lbmQgb2YgTnRoIGlubmVybW9zdCAjaWYuLiNlbmRpZiBjb25zdHJ1Y3QuCisgICAgICogIlsvIiwgIlsqIiwgIl0vIiwgIl0qIjogZ28gdG8gTnRoIGNvbW1lbnQgc3RhcnQvZW5kLgorICAgICAqICJbbSIgb3IgIl1tIiBzZWFyY2ggZm9yIHByZXYvbmV4dCBzdGFydCBvZiAoSmF2YSkgbWV0aG9kLgorICAgICAqICJbTSIgb3IgIl1NIiBzZWFyY2ggZm9yIHByZXYvbmV4dCBlbmQgb2YgKEphdmEpIG1ldGhvZC4KKyAgICAgKi8KKyAgICBpZiAoICAoY2FwLT5jbWRjaGFyID09ICdbJworCQkmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikieygqLyNtTSIsIGNhcC0+bmNoYXIpICE9IE5VTEwpCisJICAgIHx8IChjYXAtPmNtZGNoYXIgPT0gJ10nCisJCSYmIHZpbV9zdHJjaHIoKGNoYXJfdSAqKSJ9KSovI21NIiwgY2FwLT5uY2hhcikgIT0gTlVMTCkpCisgICAgeworCWlmIChjYXAtPm5jaGFyID09ICcqJykKKwkgICAgY2FwLT5uY2hhciA9ICcvJzsKKwluZXdfcG9zLmxudW0gPSAwOworCXByZXZfcG9zLmxudW0gPSAwOworCWlmIChjYXAtPm5jaGFyID09ICdtJyB8fCBjYXAtPm5jaGFyID09ICdNJykKKwl7CisJICAgIGlmIChjYXAtPmNtZGNoYXIgPT0gJ1snKQorCQlmaW5kYyA9ICd7JzsKKwkgICAgZWxzZQorCQlmaW5kYyA9ICd9JzsKKwkgICAgbiA9IDk5OTk7CisJfQorCWVsc2UKKwl7CisJICAgIGZpbmRjID0gY2FwLT5uY2hhcjsKKwkgICAgbiA9IGNhcC0+Y291bnQxOworCX0KKwlmb3IgKCA7IG4gPiAwOyAtLW4pCisJeworCSAgICBpZiAoKHBvcyA9IGZpbmRtYXRjaGxpbWl0KGNhcC0+b2FwLCBmaW5kYywKKwkJKGNhcC0+Y21kY2hhciA9PSAnWycpID8gRk1fQkFDS1dBUkQgOiBGTV9GT1JXQVJELCAwKSkgPT0gTlVMTCkKKwkgICAgeworCQlpZiAobmV3X3Bvcy5sbnVtID09IDApCS8qIG5vdGhpbmcgZm91bmQgKi8KKwkJeworCQkgICAgaWYgKGNhcC0+bmNoYXIgIT0gJ20nICYmIGNhcC0+bmNoYXIgIT0gJ00nKQorCQkJY2xlYXJvcGJlZXAoY2FwLT5vYXApOworCQl9CisJCWVsc2UKKwkJICAgIHBvcyA9ICZuZXdfcG9zOwkvKiB1c2UgbGFzdCBvbmUgZm91bmQgKi8KKwkJYnJlYWs7CisJICAgIH0KKwkgICAgcHJldl9wb3MgPSBuZXdfcG9zOworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gKnBvczsKKwkgICAgbmV3X3BvcyA9ICpwb3M7CisJfQorCWN1cndpbi0+d19jdXJzb3IgPSBvbGRfcG9zOworCisJLyoKKwkgKiBIYW5kbGUgIlttIiwgIl1tIiwgIltNIiBhbmQgIltNIi4gIFRoZSBmaW5kbWF0Y2hsaW1pdCgpIG9ubHkKKwkgKiBicm91Z2h0IHVzIHRvIHRoZSBtYXRjaCBmb3IgIlttIiBhbmQgIl1NIiB3aGVuIGluc2lkZSBhIG1ldGhvZC4KKwkgKiBUcnkgZmluZGluZyB0aGUgJ3snIG9yICd9JyB3ZSB3YW50IHRvIGJlIGF0LgorCSAqIEFsc28gcmVwZWF0IGZvciB0aGUgZ2l2ZW4gY291bnQuCisJICovCisJaWYgKGNhcC0+bmNoYXIgPT0gJ20nIHx8IGNhcC0+bmNoYXIgPT0gJ00nKQorCXsKKwkgICAgLyogbm9ybSBpcyBUUlVFIGZvciAiXU0iIGFuZCAiW20iICovCisJICAgIGludAkgICAgbm9ybSA9ICgoZmluZGMgPT0gJ3snKSA9PSAoY2FwLT5uY2hhciA9PSAnbScpKTsKKworCSAgICBuID0gY2FwLT5jb3VudDE7CisJICAgIC8qIGZvdW5kIGEgbWF0Y2g6IHdlIHdlcmUgaW5zaWRlIGEgbWV0aG9kICovCisJICAgIGlmIChwcmV2X3Bvcy5sbnVtICE9IDApCisJICAgIHsKKwkJcG9zID0gJnByZXZfcG9zOworCQljdXJ3aW4tPndfY3Vyc29yID0gcHJldl9wb3M7CisJCWlmIChub3JtKQorCQkgICAgLS1uOworCSAgICB9CisJICAgIGVsc2UKKwkJcG9zID0gTlVMTDsKKwkgICAgd2hpbGUgKG4gPiAwKQorCSAgICB7CisJCWZvciAoOzspCisJCXsKKwkJICAgIGlmICgoZmluZGMgPT0gJ3snID8gZGVjX2N1cnNvcigpIDogaW5jX2N1cnNvcigpKSA8IDApCisJCSAgICB7CisJCQkvKiBpZiBub3QgZm91bmQgYW55dGhpbmcsIHRoYXQncyBhbiBlcnJvciAqLworCQkJaWYgKHBvcyA9PSBOVUxMKQorCQkJICAgIGNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKwkJCW4gPSAwOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBjID0gZ2NoYXJfY3Vyc29yKCk7CisJCSAgICBpZiAoYyA9PSAneycgfHwgYyA9PSAnfScpCisJCSAgICB7CisJCQkvKiBNdXN0IGhhdmUgZm91bmQgZW5kL3N0YXJ0IG9mIGNsYXNzOiB1c2UgaXQuCisJCQkgKiBPciBmb3VuZCB0aGUgcGxhY2UgdG8gYmUgYXQuICovCisJCQlpZiAoKGMgPT0gZmluZGMgJiYgbm9ybSkgfHwgKG4gPT0gMSAmJiAhbm9ybSkpCisJCQl7CisJCQkgICAgbmV3X3BvcyA9IGN1cndpbi0+d19jdXJzb3I7CisJCQkgICAgcG9zID0gJm5ld19wb3M7CisJCQkgICAgbiA9IDA7CisJCQl9CisJCQkvKiBpZiBubyBtYXRjaCBmb3VuZCBhdCBhbGwsIHdlIHN0YXJ0ZWQgb3V0c2lkZSBvZiB0aGUKKwkJCSAqIGNsYXNzIGFuZCB3ZSdyZSBpbnNpZGUgbm93LiAgSnVzdCBnbyBvbi4gKi8KKwkJCWVsc2UgaWYgKG5ld19wb3MubG51bSA9PSAwKQorCQkJeworCQkJICAgIG5ld19wb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworCQkJICAgIHBvcyA9ICZuZXdfcG9zOworCQkJfQorCQkJLyogZm91bmQgc3RhcnQvZW5kIG9mIG90aGVyIG1ldGhvZDogZ28gdG8gbWF0Y2ggKi8KKwkJCWVsc2UgaWYgKChwb3MgPSBmaW5kbWF0Y2hsaW1pdChjYXAtPm9hcCwgZmluZGMsCisJCQkgICAgKGNhcC0+Y21kY2hhciA9PSAnWycpID8gRk1fQkFDS1dBUkQgOiBGTV9GT1JXQVJELAorCQkJCQkJCQkgIDApKSA9PSBOVUxMKQorCQkJICAgIG4gPSAwOworCQkJZWxzZQorCQkJICAgIGN1cndpbi0+d19jdXJzb3IgPSAqcG9zOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJLS1uOworCSAgICB9CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBvbGRfcG9zOworCSAgICBpZiAocG9zID09IE5VTEwgJiYgbmV3X3Bvcy5sbnVtICE9IDApCisJCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKwl9CisJaWYgKHBvcyAhPSBOVUxMKQorCXsKKwkgICAgc2V0cGNtYXJrKCk7CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSAqcG9zOworCSAgICBjdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgaWYgKChmZG9fZmxhZ3MgJiBGRE9fQkxPQ0spICYmIEtleVR5cGVkCisJCQkJCSAgICAgICAmJiBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApCisJCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiAiW1siLCAiW10iLCAiXV0iIGFuZCAiXVsiOiBtb3ZlIHRvIHN0YXJ0IG9yIGVuZCBvZiBmdW5jdGlvbgorICAgICAqLworICAgIGVsc2UgaWYgKGNhcC0+bmNoYXIgPT0gJ1snIHx8IGNhcC0+bmNoYXIgPT0gJ10nKQorICAgIHsKKwlpZiAoY2FwLT5uY2hhciA9PSBjYXAtPmNtZGNoYXIpCQkgICAgLyogIl1dIiBvciAiW1siICovCisJICAgIGZsYWcgPSAneyc7CisJZWxzZQorCSAgICBmbGFnID0gJ30nOwkJICAgIC8qICJdWyIgb3IgIltdIiAqLworCisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisJLyoKKwkgKiBJbWl0YXRlIHN0cmFuZ2UgVmkgYmVoYXZpb3VyOiBXaGVuIHVzaW5nICJdXSIgd2l0aCBhbiBvcGVyYXRvcgorCSAqIHdlIGFsc28gc3RvcCBhdCAnfScuCisJICovCisJaWYgKCFmaW5kcGFyKGNhcC0+b2FwLCBjYXAtPmFyZywgY2FwLT5jb3VudDEsIGZsYWcsCisJICAgICAgKGNhcC0+b2FwLT5vcF90eXBlICE9IE9QX05PUAorCQkJCSAgICAgICYmIGNhcC0+YXJnID09IEZPUldBUkQgJiYgZmxhZyA9PSAneycpKSkKKwkgICAgY2xlYXJvcGJlZXAoY2FwLT5vYXApOworCWVsc2UKKwl7CisJICAgIGlmIChjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApCisJCWJlZ2lubGluZShCTF9XSElURSB8IEJMX0ZJWCk7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIGlmICgoZmRvX2ZsYWdzICYgRkRPX0JMT0NLKSAmJiBLZXlUeXBlZCAmJiBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApCisJCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiAiW3AiLCAiW1AiLCAiXVAiIGFuZCAiXXAiOiBwdXQgd2l0aCBpbmRlbnQgYWRqdXN0bWVudAorICAgICAqLworICAgIGVsc2UgaWYgKGNhcC0+bmNoYXIgPT0gJ3AnIHx8IGNhcC0+bmNoYXIgPT0gJ1AnKQorICAgIHsKKwlpZiAoIWNoZWNrY2xlYXJvcHEoY2FwLT5vYXApKQorCXsKKwkgICAgcHJlcF9yZWRvX2NtZChjYXApOworCSAgICBkb19wdXQoY2FwLT5vYXAtPnJlZ25hbWUsCisJICAgICAgKGNhcC0+Y21kY2hhciA9PSAnXScgJiYgY2FwLT5uY2hhciA9PSAncCcpID8gRk9SV0FSRCA6IEJBQ0tXQVJELAorCQkJCQkJICBjYXAtPmNvdW50MSwgUFVUX0ZJWElOREVOVCk7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogIlsnIiwgIltgIiwgIl0nIiBhbmQgIl1gIjoganVtcCB0byBuZXh0IG1hcmsKKyAgICAgKi8KKyAgICBlbHNlIGlmIChjYXAtPm5jaGFyID09ICdcJycgfHwgY2FwLT5uY2hhciA9PSAnYCcpCisgICAgeworCXBvcyA9ICZjdXJ3aW4tPndfY3Vyc29yOworCWZvciAobiA9IGNhcC0+Y291bnQxOyBuID4gMDsgLS1uKQorCXsKKwkgICAgcHJldl9wb3MgPSAqcG9zOworCSAgICBwb3MgPSBnZXRuZXh0bWFyayhwb3MsIGNhcC0+Y21kY2hhciA9PSAnWycgPyBCQUNLV0FSRCA6IEZPUldBUkQsCisJCQkJCQkJICBjYXAtPm5jaGFyID09ICdcJycpOworCSAgICBpZiAocG9zID09IE5VTEwpCisJCWJyZWFrOworCX0KKwlpZiAocG9zID09IE5VTEwpCisJICAgIHBvcyA9ICZwcmV2X3BvczsKKwludl9jdXJzb3JtYXJrKGNhcCwgY2FwLT5uY2hhciA9PSAnXCcnLCBwb3MpOworICAgIH0KKworI2lmZGVmIEZFQVRfTU9VU0UKKyAgICAvKgorICAgICAqIFsgb3IgXSBmb2xsb3dlZCBieSBhIG1pZGRsZSBtb3VzZSBjbGljazogcHV0IHNlbGVjdGVkIHRleHQgd2l0aAorICAgICAqIGluZGVudCBhZGp1c3RtZW50LiAgQW55IG90aGVyIGJ1dHRvbiBqdXN0IGRvZXMgYXMgdXN1YWwuCisgICAgICovCisgICAgZWxzZSBpZiAoY2FwLT5uY2hhciA+PSBLX0xFRlRNT1VTRSAmJiBjYXAtPm5jaGFyIDw9IEtfUklHSFRSRUxFQVNFKQorICAgIHsKKwkodm9pZClkb19tb3VzZShjYXAtPm9hcCwgY2FwLT5uY2hhciwKKwkJICAgICAgIChjYXAtPmNtZGNoYXIgPT0gJ10nKSA/IEZPUldBUkQgOiBCQUNLV0FSRCwKKwkJICAgICAgIGNhcC0+Y291bnQxLCBQVVRfRklYSU5ERU5UKTsKKyAgICB9CisjZW5kaWYgLyogRkVBVF9NT1VTRSAqLworCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgLyoKKyAgICAgKiAiW3oiIGFuZCAiXXoiOiBtb3ZlIHRvIHN0YXJ0IG9yIGVuZCBvZiBvcGVuIGZvbGQuCisgICAgICovCisgICAgZWxzZSBpZiAoY2FwLT5uY2hhciA9PSAneicpCisgICAgeworCWlmIChmb2xkTW92ZVRvKEZBTFNFLCBjYXAtPmNtZGNoYXIgPT0gJ10nID8gRk9SV0FSRCA6IEJBQ0tXQVJELAorCQkJCQkJCSBjYXAtPmNvdW50MSkgPT0gRkFJTCkKKwkgICAgY2xlYXJvcGJlZXAoY2FwLT5vYXApOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9ESUZGCisgICAgLyoKKyAgICAgKiAiW2MiIGFuZCAiXWMiOiBtb3ZlIHRvIG5leHQgb3IgcHJldmlvdXMgZGlmZi1jaGFuZ2UuCisgICAgICovCisgICAgZWxzZSBpZiAoY2FwLT5uY2hhciA9PSAnYycpCisgICAgeworCWlmIChkaWZmX21vdmVfdG8oY2FwLT5jbWRjaGFyID09ICddJyA/IEZPUldBUkQgOiBCQUNLV0FSRCwKKwkJCQkJCQkgY2FwLT5jb3VudDEpID09IEZBSUwpCisJICAgIGNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIE5vdCBhIHZhbGlkIGNhcC0+bmNoYXIuICovCisgICAgZWxzZQorCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKK30KKworLyoKKyAqIEhhbmRsZSBOb3JtYWwgbW9kZSAiJSIgY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9wZXJjZW50KGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIHBvc19UCSpwb3M7CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgbGluZW5yX1QJbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyNlbmRpZgorCisgICAgY2FwLT5vYXAtPmluY2x1c2l2ZSA9IFRSVUU7CisgICAgaWYgKGNhcC0+Y291bnQwKQkgICAgLyoge2NudH0lIDogZ290byB7Y250fSBwZXJjZW50YWdlIGluIGZpbGUgKi8KKyAgICB7CisJaWYgKGNhcC0+Y291bnQwID4gMTAwKQorCSAgICBjbGVhcm9wYmVlcChjYXAtPm9hcCk7CisJZWxzZQorCXsKKwkgICAgY2FwLT5vYXAtPm1vdGlvbl90eXBlID0gTUxJTkU7CisJICAgIHNldHBjbWFyaygpOworCSAgICAvKiBSb3VuZCB1cCwgc28gQ1RSTC1HIHdpbGwgZ2l2ZSBzYW1lIHZhbHVlLiAgV2F0Y2ggb3V0IGZvciBhCisJICAgICAqIGxhcmdlIGxpbmUgY291bnQsIHRoZSBsaW5lIG51bWJlciBtdXN0IG5vdCBnbyBuZWdhdGl2ZSEgKi8KKwkgICAgaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ID4gMTAwMDAwMCkKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gKGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ICsgOTlMKQorCQkJCQkJCSAvIDEwMEwgKiBjYXAtPmNvdW50MDsKKwkgICAgZWxzZQorCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSAoY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQgKgorCQkJCQkJICAgIGNhcC0+Y291bnQwICsgOTlMKSAvIDEwMEw7CisJICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJICAgIGJlZ2lubGluZShCTF9TT0wgfCBCTF9GSVgpOworCX0KKyAgICB9CisgICAgZWxzZQkJICAgIC8qICIlIiA6IGdvIHRvIG1hdGNoaW5nIHBhcmVuICovCisgICAgeworCWNhcC0+b2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworCWNhcC0+b2FwLT51c2VfcmVnX29uZSA9IFRSVUU7CisJaWYgKChwb3MgPSBmaW5kbWF0Y2goY2FwLT5vYXAsIE5VTCkpID09IE5VTEwpCisJICAgIGNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKwllbHNlCisJeworCSAgICBzZXRwY21hcmsoKTsKKwkgICAgY3Vyd2luLT53X2N1cnNvciA9ICpwb3M7CisJICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkgICAgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworI2VuZGlmCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkgICAgYWRqdXN0X2Zvcl9zZWwoY2FwKTsKKyNlbmRpZgorCX0KKyAgICB9CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaWYgKGNhcC0+b2FwLT5vcF90eXBlID09IE9QX05PUAorCSAgICAmJiBsbnVtICE9IGN1cndpbi0+d19jdXJzb3IubG51bQorCSAgICAmJiAoZmRvX2ZsYWdzICYgRkRPX1BFUkNFTlQpCisJICAgICYmIEtleVR5cGVkKQorCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKK30KKworLyoKKyAqIEhhbmRsZSAiKCIgYW5kICIpIiBjb21tYW5kcy4KKyAqIGNhcC0+YXJnIGlzIEJBQ0tXQVJEIGZvciAiKCIgYW5kIEZPUldBUkQgZm9yICIpIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9icmFjZShjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBjYXAtPm9hcC0+bW90aW9uX3R5cGUgPSBNQ0hBUjsKKyAgICBjYXAtPm9hcC0+dXNlX3JlZ19vbmUgPSBUUlVFOworICAgIGlmIChjYXAtPmNtZGNoYXIgPT0gJyknKQorCWNhcC0+b2FwLT5pbmNsdXNpdmUgPSBGQUxTRTsKKyAgICBlbHNlCisJY2FwLT5vYXAtPmluY2x1c2l2ZSA9IFRSVUU7CisgICAgY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisKKyAgICBpZiAoZmluZHNlbnQoY2FwLT5hcmcsIGNhcC0+Y291bnQxKSA9PSBGQUlMKQorCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyAgICBlbHNlCisgICAgeworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwljdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwlpZiAoKGZkb19mbGFncyAmIEZET19CTE9DSykgJiYgS2V5VHlwZWQgJiYgY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfTk9QKQorCSAgICBmb2xkT3BlbkN1cnNvcigpOworI2VuZGlmCisgICAgfQorfQorCisvKgorICogIm0iIGNvbW1hbmQ6IE1hcmsgYSBwb3NpdGlvbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9tYXJrKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGlmICghY2hlY2tjbGVhcm9wKGNhcC0+b2FwKSkKKyAgICB7CisJaWYgKHNldG1hcmsoY2FwLT5uY2hhcikgPT0gRkFJTCkKKwkgICAgY2xlYXJvcGJlZXAoY2FwLT5vYXApOworICAgIH0KK30KKworLyoKKyAqICJ7IiBhbmQgIn0iIGNvbW1hbmRzLgorICogY21kLT5hcmcgaXMgQkFDS1dBUkQgZm9yICJ7IiBhbmQgRk9SV0FSRCBmb3IgIn0iLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2ZpbmRwYXIoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgY2FwLT5vYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisgICAgY2FwLT5vYXAtPmluY2x1c2l2ZSA9IEZBTFNFOworICAgIGNhcC0+b2FwLT51c2VfcmVnX29uZSA9IFRSVUU7CisgICAgY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisgICAgaWYgKCFmaW5kcGFyKGNhcC0+b2FwLCBjYXAtPmFyZywgY2FwLT5jb3VudDEsIE5VTCwgRkFMU0UpKQorCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyAgICBlbHNlCisgICAgeworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwljdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwlpZiAoKGZkb19mbGFncyAmIEZET19CTE9DSykgJiYgS2V5VHlwZWQgJiYgY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfTk9QKQorCSAgICBmb2xkT3BlbkN1cnNvcigpOworI2VuZGlmCisgICAgfQorfQorCisvKgorICogInUiIGNvbW1hbmQ6IFVuZG8gb3IgbWFrZSBsb3dlciBjYXNlLgorICovCisgICAgc3RhdGljIHZvaWQKK252X3VuZG8oY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaWYgKGNhcC0+b2FwLT5vcF90eXBlID09IE9QX0xPV0VSCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkgICAgfHwgVklzdWFsX2FjdGl2ZQorI2VuZGlmCisJICAgICkKKyAgICB7CisJLyogdHJhbnNsYXRlICI8VmlzdWFsPnUiIHRvICI8VmlzdWFsPmd1IiBhbmQgImd1dSIgdG8gImd1Z3UiICovCisJY2FwLT5jbWRjaGFyID0gJ2cnOworCWNhcC0+bmNoYXIgPSAndSc7CisJbnZfb3BlcmF0b3IoY2FwKTsKKyAgICB9CisgICAgZWxzZQorCW52X2t1bmRvKGNhcCk7Cit9CisKKy8qCisgKiA8VW5kbz4gY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9rdW5kbyhjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpZiAoIWNoZWNrY2xlYXJvcHEoY2FwLT5vYXApKQorICAgIHsKKwl1X3VuZG8oKGludCljYXAtPmNvdW50MSk7CisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisgICAgfQorfQorCisvKgorICogSGFuZGxlIHRoZSAiciIgY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9yZXBsYWNlKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGNoYXJfdQkqcHRyOworICAgIGludAkJaGFkX2N0cmxfdjsKKyAgICBsb25nCW47CisKKyAgICBpZiAoY2hlY2tjbGVhcm9wKGNhcC0+b2FwKSkKKwlyZXR1cm47CisKKyAgICAvKiBnZXQgYW5vdGhlciBjaGFyYWN0ZXIgKi8KKyAgICBpZiAoY2FwLT5uY2hhciA9PSBDdHJsX1YpCisgICAgeworCWhhZF9jdHJsX3YgPSBDdHJsX1Y7CisJY2FwLT5uY2hhciA9IGdldF9saXRlcmFsKCk7CisJLyogRG9uJ3QgcmVkbyBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgd2l0aCBDVFJMLVYuICovCisJaWYgKGNhcC0+bmNoYXIgPiBERUwpCisJICAgIGhhZF9jdHJsX3YgPSBOVUw7CisgICAgfQorICAgIGVsc2UKKwloYWRfY3RybF92ID0gTlVMOworCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICAvKiBWaXN1YWwgbW9kZSAiciIgKi8KKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKyAgICB7CisJbnZfb3BlcmF0b3IoY2FwKTsKKwlyZXR1cm47CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgLyogQnJlYWsgdGFicywgZXRjLiAqLworICAgIGlmICh2aXJ0dWFsX2FjdGl2ZSgpKQorICAgIHsKKwlpZiAodV9zYXZlX2N1cnNvcigpID09IEZBSUwpCisJICAgIHJldHVybjsKKwlpZiAoZ2NoYXJfY3Vyc29yKCkgPT0gTlVMKQorCXsKKwkgICAgLyogQWRkIGV4dHJhIHNwYWNlIGFuZCBwdXQgdGhlIGN1cnNvciBvbiB0aGUgZmlyc3Qgb25lLiAqLworCSAgICBjb2xhZHZhbmNlX2ZvcmNlKChjb2xucl9UKShnZXR2aXNjb2woKSArIGNhcC0+Y291bnQxKSk7CisJICAgIGN1cndpbi0+d19jdXJzb3IuY29sIC09IGNhcC0+Y291bnQxOworCX0KKwllbHNlIGlmIChnY2hhcl9jdXJzb3IoKSA9PSBUQUIpCisJICAgIGNvbGFkdmFuY2VfZm9yY2UoZ2V0dmlzY29sKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgYSBzcGVjaWFsIGtleSBvciBub3QgZW5vdWdoIGNoYXJhY3RlcnMgdG8gcmVwbGFjZS4KKyAgICAgKi8KKyAgICBwdHIgPSBtbF9nZXRfY3Vyc29yKCk7CisgICAgaWYgKElTX1NQRUNJQUwoY2FwLT5uY2hhcikgfHwgU1RSTEVOKHB0cikgPCAodW5zaWduZWQpY2FwLT5jb3VudDEKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIHx8IChoYXNfbWJ5dGUgJiYgbWJfY2hhcmxlbihwdHIpIDwgY2FwLT5jb3VudDEpCisjZW5kaWYKKwkgICAgKQorICAgIHsKKwljbGVhcm9wYmVlcChjYXAtPm9hcCk7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogUmVwbGFjaW5nIHdpdGggYSBUQUIgaXMgZG9uZSBieSBlZGl0KCkgd2hlbiBpdCBpcyBjb21wbGljYXRlZCBiZWNhdXNlCisgICAgICogJ2V4cGFuZHRhYicgb3IgJ3NtYXJ0dGFiJyBpcyBzZXQuICBDVFJMLVYgVEFCIGluc2VydHMgYSBsaXRlcmFsIFRBQi4KKyAgICAgKiBPdGhlciBjaGFyYWN0ZXJzIGFyZSBkb25lIGJlbG93IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggdGhpbmdzIGxpa2UKKyAgICAgKiBDVFJMLVYgMDQ4IChmb3IgZWRpdCgpIHRoaXMgd291bGQgYmUgUiBDVFJMLVYgMCBFU0MpLgorICAgICAqLworICAgIGlmIChoYWRfY3RybF92ICE9IEN0cmxfViAmJiBjYXAtPm5jaGFyID09ICdcdCcgJiYgKGN1cmJ1Zi0+Yl9wX2V0IHx8IHBfc3RhKSkKKyAgICB7CisJc3R1ZmZudW1SZWFkYnVmZihjYXAtPmNvdW50MSk7CisJc3R1ZmZjaGFyUmVhZGJ1ZmYoJ1InKTsKKwlzdHVmZmNoYXJSZWFkYnVmZignXHQnKTsKKwlzdHVmZmNoYXJSZWFkYnVmZihFU0MpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBzYXZlIGxpbmUgZm9yIHVuZG8gKi8KKyAgICBpZiAodV9zYXZlX2N1cnNvcigpID09IEZBSUwpCisJcmV0dXJuOworCisgICAgaWYgKGhhZF9jdHJsX3YgIT0gQ3RybF9WICYmIChjYXAtPm5jaGFyID09ICdccicgfHwgY2FwLT5uY2hhciA9PSAnXG4nKSkKKyAgICB7CisJLyoKKwkgKiBSZXBsYWNlIGNoYXJhY3RlcihzKSBieSBhIHNpbmdsZSBuZXdsaW5lLgorCSAqIFN0cmFuZ2UgdmkgYmVoYXZpb3VyOiBPbmx5IG9uZSBuZXdsaW5lIGlzIGluc2VydGVkLgorCSAqIERlbGV0ZSB0aGUgY2hhcmFjdGVycyBoZXJlLgorCSAqIEluc2VydCB0aGUgbmV3bGluZSB3aXRoIGFuIGluc2VydCBjb21tYW5kLCB0YWtlcyBjYXJlIG9mCisJICogYXV0b2luZGVudC4JVGhlIGluc2VydCBjb21tYW5kIGRlcGVuZHMgb24gYmVpbmcgb24gdGhlIGxhc3QKKwkgKiBjaGFyYWN0ZXIgb2YgYSBsaW5lIG9yIG5vdC4KKwkgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisJKHZvaWQpZGVsX2NoYXJzKGNhcC0+Y291bnQxLCBGQUxTRSk7CS8qIGRlbGV0ZSB0aGUgY2hhcmFjdGVycyAqLworI2Vsc2UKKwkodm9pZClkZWxfYnl0ZXMoY2FwLT5jb3VudDEsIEZBTFNFKTsJLyogZGVsZXRlIHRoZSBjaGFyYWN0ZXJzICovCisjZW5kaWYKKwlzdHVmZmNoYXJSZWFkYnVmZignXHInKTsKKwlzdHVmZmNoYXJSZWFkYnVmZihFU0MpOworCisJLyogR2l2ZSAncicgdG8gZWRpdCgpLCB0byBnZXQgdGhlIHJlZG8gY29tbWFuZCByaWdodC4gKi8KKwlpbnZva2VfZWRpdChjYXAsIFRSVUUsICdyJywgRkFMU0UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXByZXBfcmVkbyhjYXAtPm9hcC0+cmVnbmFtZSwgY2FwLT5jb3VudDEsCisJCQkJICAgICAgIE5VTCwgJ3InLCBOVUwsIGhhZF9jdHJsX3YsIGNhcC0+bmNoYXIpOworCisJY3VyYnVmLT5iX29wX3N0YXJ0ID0gY3Vyd2luLT53X2N1cnNvcjsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIGludAkJb2xkX1N0YXRlID0gU3RhdGU7CisKKwkgICAgaWYgKGNhcC0+bmNoYXJDMSAhPSAwKQorCQlBcHBlbmRDaGFyVG9SZWRvYnVmZihjYXAtPm5jaGFyQzEpOworCSAgICBpZiAoY2FwLT5uY2hhckMyICE9IDApCisJCUFwcGVuZENoYXJUb1JlZG9idWZmKGNhcC0+bmNoYXJDMik7CisKKwkgICAgLyogVGhpcyBpcyBzbG93LCBidXQgaXQgaGFuZGxlcyByZXBsYWNpbmcgYSBzaW5nbGUtYnl0ZSB3aXRoIGEKKwkgICAgICogbXVsdGktYnl0ZSBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQuICBBbHNvIGhhbmRsZXMgYWRkaW5nCisJICAgICAqIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGZvciB1dGYtOC4gKi8KKwkgICAgZm9yIChuID0gY2FwLT5jb3VudDE7IG4gPiAwOyAtLW4pCisJICAgIHsKKwkJU3RhdGUgPSBSRVBMQUNFOworCQlpbnNfY2hhcihjYXAtPm5jaGFyKTsKKwkJU3RhdGUgPSBvbGRfU3RhdGU7CisJCWlmIChjYXAtPm5jaGFyQzEgIT0gMCkKKwkJICAgIGluc19jaGFyKGNhcC0+bmNoYXJDMSk7CisJCWlmIChjYXAtPm5jaGFyQzIgIT0gMCkKKwkJICAgIGluc19jaGFyKGNhcC0+bmNoYXJDMik7CisJICAgIH0KKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICAvKgorCSAgICAgKiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIHdpdGhpbiBvbmUgbGluZS4KKwkgICAgICovCisJICAgIGZvciAobiA9IGNhcC0+Y291bnQxOyBuID4gMDsgLS1uKQorCSAgICB7CisJCS8qCisJCSAqIEdldCBwdHIgYWdhaW4sIGJlY2F1c2UgdV9zYXZlIGFuZC9vciBzaG93bWF0Y2goKSB3aWxsIGhhdmUKKwkJICogcmVsZWFzZWQgdGhlIGxpbmUuICBBdCB0aGUgc2FtZSB0aW1lIHdlIGxldCBrbm93IHRoYXQgdGhlCisJCSAqIGxpbmUgd2lsbCBiZSBjaGFuZ2VkLgorCQkgKi8KKwkJcHRyID0gbWxfZ2V0X2J1ZihjdXJidWYsIGN1cndpbi0+d19jdXJzb3IubG51bSwgVFJVRSk7CisJCXB0cltjdXJ3aW4tPndfY3Vyc29yLmNvbF0gPSBjYXAtPm5jaGFyOworCQlpZiAocF9zbSAmJiBtc2dfc2lsZW50ID09IDApCisJCSAgICBzaG93bWF0Y2goY2FwLT5uY2hhcik7CisJCSsrY3Vyd2luLT53X2N1cnNvci5jb2w7CisJICAgIH0KKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKwkgICAgaWYgKHVzaW5nTmV0YmVhbnMpCisJICAgIHsKKwkJY29sbnJfVCBzdGFydCA9IChjb2xucl9UKShjdXJ3aW4tPndfY3Vyc29yLmNvbCAtIGNhcC0+Y291bnQxKTsKKworCQluZXRiZWFuc19pbnNlcnRlZChjdXJidWYsIGN1cndpbi0+d19jdXJzb3IubG51bSwgc3RhcnQsCisJCQkgICAgIChpbnQpY2FwLT5jb3VudDEsICZwdHJbc3RhcnRdLCAoaW50KWNhcC0+Y291bnQxKTsKKwkgICAgfQorI2VuZGlmCisKKwkgICAgLyogbWFyayB0aGUgYnVmZmVyIGFzIGNoYW5nZWQgYW5kIHByZXBhcmUgZm9yIGRpc3BsYXlpbmcgKi8KKwkgICAgY2hhbmdlZF9ieXRlcyhjdXJ3aW4tPndfY3Vyc29yLmxudW0sCisJCQkgICAgICAgKGNvbG5yX1QpKGN1cndpbi0+d19jdXJzb3IuY29sIC0gY2FwLT5jb3VudDEpKTsKKwl9CisJLS1jdXJ3aW4tPndfY3Vyc29yLmNvbDsJICAgIC8qIGN1cnNvciBvbiB0aGUgbGFzdCByZXBsYWNlZCBjaGFyICovCisjaWZkZWYgRkVBVF9NQllURQorCS8qIGlmIHRoZSBjaGFyYWN0ZXIgb24gdGhlIGxlZnQgb2YgdGhlIGN1cnJlbnQgY3Vyc29yIGlzIGEgbXVsdGktYnl0ZQorCSAqIGNoYXJhY3RlciwgbW92ZSB0d28gY2hhcmFjdGVycyBsZWZ0ICovCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgbWJfYWRqdXN0X2N1cnNvcigpOworI2VuZGlmCisJY3VyYnVmLT5iX29wX2VuZCA9IGN1cndpbi0+d19jdXJzb3I7CisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisJc2V0X2xhc3RfaW5zZXJ0KGNhcC0+bmNoYXIpOworICAgIH0KK30KKworI2lmZGVmIEZFQVRfVklTVUFMCisvKgorICogJ28nOiBFeGNoYW5nZSBzdGFydCBhbmQgZW5kIG9mIFZpc3VhbCBhcmVhLgorICogJ08nOiBzYW1lLCBidXQgaW4gYmxvY2sgbW9kZSBleGNoYW5nZSBsZWZ0IGFuZCByaWdodCBjb3JuZXJzLgorICovCisgICAgc3RhdGljIHZvaWQKK3Zfc3dhcF9jb3JuZXJzKGNtZGNoYXIpCisgICAgaW50CQljbWRjaGFyOworeworICAgIHBvc19UCW9sZF9jdXJzb3I7CisgICAgY29sbnJfVAlsZWZ0LCByaWdodDsKKworICAgIGlmIChjbWRjaGFyID09ICdPJyAmJiBWSXN1YWxfbW9kZSA9PSBDdHJsX1YpCisgICAgeworCW9sZF9jdXJzb3IgPSBjdXJ3aW4tPndfY3Vyc29yOworCWdldHZjb2xzKGN1cndpbiwgJm9sZF9jdXJzb3IsICZWSXN1YWwsICZsZWZ0LCAmcmlnaHQpOworCWN1cndpbi0+d19jdXJzb3IubG51bSA9IFZJc3VhbC5sbnVtOworCWNvbGFkdmFuY2UobGVmdCk7CisJVklzdWFsID0gY3Vyd2luLT53X2N1cnNvcjsKKworCWN1cndpbi0+d19jdXJzb3IubG51bSA9IG9sZF9jdXJzb3IubG51bTsKKwljdXJ3aW4tPndfY3Vyc3dhbnQgPSByaWdodDsKKwkvKiAnc2VsZWN0aW9uICJleGNsdXNpdmUiIGFuZCBjdXJzb3IgYXQgcmlnaHQtYm90dG9tIGNvcm5lcjogbW92ZSBpdAorCSAqIHJpZ2h0IG9uZSBjb2x1bW4gKi8KKwlpZiAob2xkX2N1cnNvci5sbnVtID49IFZJc3VhbC5sbnVtICYmICpwX3NlbCA9PSAnZScpCisJICAgICsrY3Vyd2luLT53X2N1cnN3YW50OworCWNvbGFkdmFuY2UoY3Vyd2luLT53X2N1cnN3YW50KTsKKwlpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPT0gb2xkX2N1cnNvci5jb2wKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCSYmICghdmlydHVhbF9hY3RpdmUoKQorCQkgICAgfHwgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPT0gb2xkX2N1cnNvci5jb2xhZGQpCisjZW5kaWYKKwkJKQorCXsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gVklzdWFsLmxudW07CisJICAgIGlmIChvbGRfY3Vyc29yLmxudW0gPD0gVklzdWFsLmxudW0gJiYgKnBfc2VsID09ICdlJykKKwkJKytyaWdodDsKKwkgICAgY29sYWR2YW5jZShyaWdodCk7CisJICAgIFZJc3VhbCA9IGN1cndpbi0+d19jdXJzb3I7CisKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gb2xkX2N1cnNvci5sbnVtOworCSAgICBjb2xhZHZhbmNlKGxlZnQpOworCSAgICBjdXJ3aW4tPndfY3Vyc3dhbnQgPSBsZWZ0OworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlvbGRfY3Vyc29yID0gY3Vyd2luLT53X2N1cnNvcjsKKwljdXJ3aW4tPndfY3Vyc29yID0gVklzdWFsOworCVZJc3VhbCA9IG9sZF9jdXJzb3I7CisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisgICAgfQorfQorI2VuZGlmIC8qIEZFQVRfVklTVUFMICovCisKKy8qCisgKiAiUiIgKGNhcC0+YXJnIGlzIEZBTFNFKSBhbmQgImdSIiAoY2FwLT5hcmcgaXMgVFJVRSkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfUmVwbGFjZShjYXApCisgICAgY21kYXJnX1QJICAgICpjYXA7Cit7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkJCS8qICJSIiBpcyByZXBsYWNlIGxpbmVzICovCisgICAgeworCWNhcC0+Y21kY2hhciA9ICdjJzsKKwljYXAtPm5jaGFyID0gTlVMOworCVZJc3VhbF9tb2RlID0gJ1YnOworCW52X29wZXJhdG9yKGNhcCk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCWlmICghY2hlY2tjbGVhcm9wcShjYXAtPm9hcCkpCisgICAgeworCWlmICghY3VyYnVmLT5iX3BfbWEpCisJICAgIEVNU0coXyhlX21vZGlmaWFibGUpKTsKKwllbHNlCisJeworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkgICAgaWYgKHZpcnR1YWxfYWN0aXZlKCkpCisJCWNvbGFkdmFuY2UoZ2V0dmlzY29sKCkpOworI2VuZGlmCisJICAgIGludm9rZV9lZGl0KGNhcCwgRkFMU0UsIGNhcC0+YXJnID8gJ1YnIDogJ1InLCBGQUxTRSk7CisJfQorICAgIH0KK30KKworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKy8qCisgKiAiZ3IiLgorICovCisgICAgc3RhdGljIHZvaWQKK252X3ZyZXBsYWNlKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworIyBpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmIChWSXN1YWxfYWN0aXZlKQorICAgIHsKKwljYXAtPmNtZGNoYXIgPSAncic7CisJY2FwLT5uY2hhciA9IGNhcC0+ZXh0cmFfY2hhcjsKKwludl9yZXBsYWNlKGNhcCk7CS8qIERvIHNhbWUgYXMgInIiIGluIFZpc3VhbCBtb2RlIGZvciBub3cgKi8KKyAgICB9CisgICAgZWxzZQorIyBlbmRpZgorCWlmICghY2hlY2tjbGVhcm9wcShjYXAtPm9hcCkpCisgICAgeworCWlmICghY3VyYnVmLT5iX3BfbWEpCisJICAgIEVNU0coXyhlX21vZGlmaWFibGUpKTsKKwllbHNlCisJeworCSAgICBpZiAoY2FwLT5leHRyYV9jaGFyID09IEN0cmxfVikJLyogZ2V0IGFub3RoZXIgY2hhcmFjdGVyICovCisJCWNhcC0+ZXh0cmFfY2hhciA9IGdldF9saXRlcmFsKCk7CisJICAgIHN0dWZmY2hhclJlYWRidWZmKGNhcC0+ZXh0cmFfY2hhcik7CisJICAgIHN0dWZmY2hhclJlYWRidWZmKEVTQyk7CisjIGlmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkgICAgaWYgKHZpcnR1YWxfYWN0aXZlKCkpCisJCWNvbGFkdmFuY2UoZ2V0dmlzY29sKCkpOworIyBlbmRpZgorCSAgICBpbnZva2VfZWRpdChjYXAsIFRSVUUsICd2JywgRkFMU0UpOworCX0KKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqIFN3YXAgY2FzZSBmb3IgIn4iIGNvbW1hbmQsIHdoZW4gaXQgZG9lcyBub3Qgd29yayBsaWtlIGFuIG9wZXJhdG9yLgorICovCisgICAgc3RhdGljIHZvaWQKK25fc3dhcGNoYXIoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgbG9uZwluOworICAgIHBvc19UCXN0YXJ0cG9zOworICAgIGludAkJZGlkX2NoYW5nZSA9IDA7CisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgcG9zX1QJcG9zOworICAgIGNoYXJfdQkqcHRyOworICAgIGludAkJY291bnQ7CisjZW5kaWYKKworICAgIGlmIChjaGVja2NsZWFyb3BxKGNhcC0+b2FwKSkKKwlyZXR1cm47CisKKyAgICBpZiAobGluZWVtcHR5KGN1cndpbi0+d19jdXJzb3IubG51bSkgJiYgdmltX3N0cmNocihwX3d3LCAnficpID09IE5VTEwpCisgICAgeworCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgcHJlcF9yZWRvX2NtZChjYXApOworCisgICAgaWYgKHVfc2F2ZV9jdXJzb3IoKSA9PSBGQUlMKQorCXJldHVybjsKKworICAgIHN0YXJ0cG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKyAgICBwb3MgPSBzdGFydHBvczsKKyNlbmRpZgorICAgIGZvciAobiA9IGNhcC0+Y291bnQxOyBuID4gMDsgLS1uKQorICAgIHsKKwlkaWRfY2hhbmdlIHw9IHN3YXBjaGFyKGNhcC0+b2FwLT5vcF90eXBlLCAmY3Vyd2luLT53X2N1cnNvcik7CisJaW5jX2N1cnNvcigpOworCWlmIChnY2hhcl9jdXJzb3IoKSA9PSBOVUwpCisJeworCSAgICBpZiAodmltX3N0cmNocihwX3d3LCAnficpICE9IE5VTEwKKwkJICAgICYmIGN1cndpbi0+d19jdXJzb3IubG51bSA8IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSAgICB7CisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJCWlmICh1c2luZ05ldGJlYW5zKQorCQl7CisJCSAgICBpZiAoZGlkX2NoYW5nZSkKKwkJICAgIHsKKwkJCXB0ciA9IG1sX2dldChwb3MubG51bSk7CisJCQljb3VudCA9IFNUUkxFTihwdHIpIC0gcG9zLmNvbDsKKwkJCW5ldGJlYW5zX2luc2VydGVkKGN1cmJ1ZiwgcG9zLmxudW0sIHBvcy5jb2wsCisJCQkJCQkgY291bnQsICZwdHJbcG9zLmNvbF0sIGNvdW50KTsKKwkJICAgIH0KKwkJICAgIHBvcy5jb2wgPSAwOworCQkgICAgcG9zLmxudW0rKzsKKwkJfQorI2VuZGlmCisJCSsrY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisJCWlmIChuID4gMSkKKwkJeworCQkgICAgaWYgKHVfc2F2ZXN1YihjdXJ3aW4tPndfY3Vyc29yLmxudW0pID09IEZBSUwpCisJCQlicmVhazsKKwkJICAgIHVfY2xlYXJsaW5lKCk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJCWJyZWFrOworCX0KKyAgICB9CisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgaWYgKGRpZF9jaGFuZ2UgJiYgdXNpbmdOZXRiZWFucykKKyAgICB7CisJcHRyID0gbWxfZ2V0KHBvcy5sbnVtKTsKKwljb3VudCA9IGN1cndpbi0+d19jdXJzb3IuY29sIC0gcG9zLmNvbDsKKwluZXRiZWFuc19pbnNlcnRlZChjdXJidWYsIHBvcy5sbnVtLCBwb3MuY29sLAorCQkJCQkJIGNvdW50LCAmcHRyW3Bvcy5jb2xdLCBjb3VudCk7CisgICAgfQorI2VuZGlmCisKKworICAgIGNoZWNrX2N1cnNvcigpOworICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworICAgIGlmIChkaWRfY2hhbmdlKQorICAgIHsKKwljaGFuZ2VkX2xpbmVzKHN0YXJ0cG9zLmxudW0sIHN0YXJ0cG9zLmNvbCwgY3Vyd2luLT53X2N1cnNvci5sbnVtICsgMSwKKwkJCQkJCQkJCSAgMEwpOworCWN1cmJ1Zi0+Yl9vcF9zdGFydCA9IHN0YXJ0cG9zOworCWN1cmJ1Zi0+Yl9vcF9lbmQgPSBjdXJ3aW4tPndfY3Vyc29yOworCWlmIChjdXJidWYtPmJfb3BfZW5kLmNvbCA+IDApCisJICAgIC0tY3VyYnVmLT5iX29wX2VuZC5jb2w7CisgICAgfQorfQorCisvKgorICogTW92ZSBjdXJzb3IgdG8gbWFyay4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9jdXJzb3JtYXJrKGNhcCwgZmxhZywgcG9zKQorICAgIGNtZGFyZ19UCSpjYXA7CisgICAgaW50CQlmbGFnOworICAgIHBvc19UCSpwb3M7Cit7CisgICAgaWYgKGNoZWNrX21hcmsocG9zKSA9PSBGQUlMKQorCWNsZWFyb3AoY2FwLT5vYXApOworICAgIGVsc2UKKyAgICB7CisJaWYgKGNhcC0+Y21kY2hhciA9PSAnXCcnCisJCXx8IGNhcC0+Y21kY2hhciA9PSAnYCcKKwkJfHwgY2FwLT5jbWRjaGFyID09ICdbJworCQl8fCBjYXAtPmNtZGNoYXIgPT0gJ10nKQorCSAgICBzZXRwY21hcmsoKTsKKwljdXJ3aW4tPndfY3Vyc29yID0gKnBvczsKKwlpZiAoZmxhZykKKwkgICAgYmVnaW5saW5lKEJMX1dISVRFIHwgQkxfRklYKTsKKwllbHNlCisJICAgIGNoZWNrX2N1cnNvcigpOworICAgIH0KKyAgICBjYXAtPm9hcC0+bW90aW9uX3R5cGUgPSBmbGFnID8gTUxJTkUgOiBNQ0hBUjsKKyAgICBpZiAoY2FwLT5jbWRjaGFyID09ICdgJykKKwljYXAtPm9hcC0+dXNlX3JlZ19vbmUgPSBUUlVFOworICAgIGNhcC0+b2FwLT5pbmNsdXNpdmUgPSBGQUxTRTsJCS8qIGlnbm9yZWQgaWYgbm90IE1DSEFSICovCisgICAgY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7Cit9CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorLyoKKyAqIEhhbmRsZSBjb21tYW5kcyB0aGF0IGFyZSBvcGVyYXRvcnMgaW4gVmlzdWFsIG1vZGUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordl92aXNvcChjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBzdGF0aWMgY2hhcl91IHRyYW5zW10gPSAiWXlEZENjeGRYZEFBSUlyciI7CisKKyAgICAvKiBVcHBlcmNhc2UgbWVhbnMgbGluZXdpc2UsIGV4Y2VwdCBpbiBibG9jayBtb2RlLCB0aGVuICJEIiBkZWxldGVzIHRpbGwKKyAgICAgKiB0aGUgZW5kIG9mIHRoZSBsaW5lLCBhbmQgIkMiIHJlcGxhY2VzIHRpbCBFT0wgKi8KKyAgICBpZiAoaXN1cHBlcihjYXAtPmNtZGNoYXIpKQorICAgIHsKKwlpZiAoVklzdWFsX21vZGUgIT0gQ3RybF9WKQorCSAgICBWSXN1YWxfbW9kZSA9ICdWJzsKKwllbHNlIGlmIChjYXAtPmNtZGNoYXIgPT0gJ0MnIHx8IGNhcC0+Y21kY2hhciA9PSAnRCcpCisJICAgIGN1cndpbi0+d19jdXJzd2FudCA9IE1BWENPTDsKKyAgICB9CisgICAgY2FwLT5jbWRjaGFyID0gKih2aW1fc3RyY2hyKHRyYW5zLCBjYXAtPmNtZGNoYXIpICsgMSk7CisgICAgbnZfb3BlcmF0b3IoY2FwKTsKK30KKyNlbmRpZgorCisvKgorICogInMiIGFuZCAiUyIgY29tbWFuZHMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfc3Vic3QoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkJLyogInZzIiBhbmQgInZTIiBhcmUgdGhlIHNhbWUgYXMgInZjIiAqLworICAgIHsKKwlpZiAoY2FwLT5jbWRjaGFyID09ICdTJykKKwkgICAgVklzdWFsX21vZGUgPSAnVic7CisJY2FwLT5jbWRjaGFyID0gJ2MnOworCW52X29wZXJhdG9yKGNhcCk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCW52X29wdHJhbnMoY2FwKTsKK30KKworLyoKKyAqIEFiYnJldmlhdGVkIGNvbW1hbmRzLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2FiYnJldihjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpZiAoY2FwLT5jbWRjaGFyID09IEtfREVMIHx8IGNhcC0+Y21kY2hhciA9PSBLX0tERUwpCisJY2FwLT5jbWRjaGFyID0gJ3gnOwkJLyogREVMIGtleSBiZWhhdmVzIGxpa2UgJ3gnICovCisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIC8qIGluIFZpc3VhbCBtb2RlIHRoZXNlIGNvbW1hbmRzIGFyZSBvcGVyYXRvcnMgKi8KKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKwl2X3Zpc29wKGNhcCk7CisgICAgZWxzZQorI2VuZGlmCisJbnZfb3B0cmFucyhjYXApOworfQorCisvKgorICogVHJhbnNsYXRlIGEgY29tbWFuZCBpbnRvIGFub3RoZXIgY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9vcHRyYW5zKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIHN0YXRpYyBjaGFyX3UgKihhcls4XSkgPSB7KGNoYXJfdSAqKSJkbCIsIChjaGFyX3UgKikiZGgiLAorCQkJICAgICAgKGNoYXJfdSAqKSJkJCIsIChjaGFyX3UgKikiYyQiLAorCQkJICAgICAgKGNoYXJfdSAqKSJjbCIsIChjaGFyX3UgKikiY2MiLAorCQkJICAgICAgKGNoYXJfdSAqKSJ5eSIsIChjaGFyX3UgKikiOnNcciJ9OworICAgIHN0YXRpYyBjaGFyX3UgKnN0ciA9IChjaGFyX3UgKikieFhEQ3NTWSYiOworCisgICAgaWYgKCFjaGVja2NsZWFyb3BxKGNhcC0+b2FwKSkKKyAgICB7CisJaWYgKGNhcC0+Y291bnQwKQorCSAgICBzdHVmZm51bVJlYWRidWZmKGNhcC0+Y291bnQwKTsKKwlzdHVmZlJlYWRidWZmKGFyWyhpbnQpKHZpbV9zdHJjaHIoc3RyLCBjYXAtPmNtZGNoYXIpIC0gc3RyKV0pOworICAgIH0KKyAgICBjYXAtPm9wY291bnQgPSAwOworfQorCisvKgorICogIiciIGFuZCAiYCIgY29tbWFuZHMuICBBbHNvIGZvciAiZyciIGFuZCAiZ2AiLgorICogY2FwLT5hcmcgaXMgVFJVRSBmb3IgIiciIGFuZCAiZyciLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2dvbWFyayhjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBwb3NfVAkqcG9zOworICAgIGludAkJYzsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBsaW5lbnJfVAlsbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworICAgIGludAkJb2xkX0tleVR5cGVkID0gS2V5VHlwZWQ7ICAgIC8qIGdldHRpbmcgZmlsZSBtYXkgcmVzZXQgaXQgKi8KKyNlbmRpZgorCisgICAgaWYgKGNhcC0+Y21kY2hhciA9PSAnZycpCisJYyA9IGNhcC0+ZXh0cmFfY2hhcjsKKyAgICBlbHNlCisJYyA9IGNhcC0+bmNoYXI7CisgICAgcG9zID0gZ2V0bWFyayhjLCAoY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfTk9QKSk7CisgICAgaWYgKHBvcyA9PSAocG9zX1QgKiktMSkJICAgIC8qIGp1bXBlZCB0byBvdGhlciBmaWxlICovCisgICAgeworCWlmIChjYXAtPmFyZykKKwl7CisJICAgIGNoZWNrX2N1cnNvcl9sbnVtKCk7CisJICAgIGJlZ2lubGluZShCTF9XSElURSB8IEJMX0ZJWCk7CisJfQorCWVsc2UKKwkgICAgY2hlY2tfY3Vyc29yKCk7CisgICAgfQorICAgIGVsc2UKKwludl9jdXJzb3JtYXJrKGNhcCwgY2FwLT5hcmcsIHBvcyk7CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgLyogTWF5IG5lZWQgdG8gY2xlYXIgdGhlIGNvbGFkZCB0aGF0IGEgbWFyayBpbmNsdWRlcy4gKi8KKyAgICBpZiAoIXZpcnR1YWxfYWN0aXZlKCkpCisJY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworI2VuZGlmCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaWYgKGNhcC0+b2FwLT5vcF90eXBlID09IE9QX05PUAorCSAgICAmJiAocG9zID09IChwb3NfVCAqKS0xIHx8IGxudW0gIT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCSAgICAmJiAoZmRvX2ZsYWdzICYgRkRPX01BUkspCisJICAgICYmIG9sZF9LZXlUeXBlZCkKKwlmb2xkT3BlbkN1cnNvcigpOworI2VuZGlmCit9CisKKy8qCisgKiBIYW5kbGUgQ1RSTC1PLCBDVFJMLUksICJnOyIgYW5kICJnLCIgY29tbWFuZHMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfcGNtYXJrKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworI2lmZGVmIEZFQVRfSlVNUExJU1QKKyAgICBwb3NfVAkqcG9zOworIyBpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBsaW5lbnJfVAlsbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworICAgIGludAkJb2xkX0tleVR5cGVkID0gS2V5VHlwZWQ7ICAgIC8qIGdldHRpbmcgZmlsZSBtYXkgcmVzZXQgaXQgKi8KKyMgZW5kaWYKKworICAgIGlmICghY2hlY2tjbGVhcm9wcShjYXAtPm9hcCkpCisgICAgeworCWlmIChjYXAtPmNtZGNoYXIgPT0gJ2cnKQorCSAgICBwb3MgPSBtb3ZlY2hhbmdlbGlzdCgoaW50KWNhcC0+Y291bnQxKTsKKwllbHNlCisJICAgIHBvcyA9IG1vdmVtYXJrKChpbnQpY2FwLT5jb3VudDEpOworCWlmIChwb3MgPT0gKHBvc19UICopLTEpCQkvKiBqdW1wIHRvIG90aGVyIGZpbGUgKi8KKwl7CisJICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCSAgICBjaGVja19jdXJzb3IoKTsKKwl9CisJZWxzZSBpZiAocG9zICE9IE5VTEwpCQkgICAgLyogY2FuIGp1bXAgKi8KKwkgICAgbnZfY3Vyc29ybWFyayhjYXAsIEZBTFNFLCBwb3MpOworCWVsc2UgaWYgKGNhcC0+Y21kY2hhciA9PSAnZycpCisJeworCSAgICBpZiAoY3VyYnVmLT5iX2NoYW5nZWxpc3RsZW4gPT0gMCkKKwkJRU1TRyhfKCJFNjY0OiBjaGFuZ2VsaXN0IGlzIGVtcHR5IikpOworCSAgICBlbHNlIGlmIChjYXAtPmNvdW50MSA8IDApCisJCUVNU0coXygiRTY2MjogQXQgc3RhcnQgb2YgY2hhbmdlbGlzdCIpKTsKKwkgICAgZWxzZQorCQlFTVNHKF8oIkU2NjM6IEF0IGVuZCBvZiBjaGFuZ2VsaXN0IikpOworCX0KKwllbHNlCisJICAgIGNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyMgaWZkZWYgRkVBVF9GT0xESU5HCisJaWYgKGNhcC0+b2FwLT5vcF90eXBlID09IE9QX05PUAorCQkmJiAocG9zID09IChwb3NfVCAqKS0xIHx8IGxudW0gIT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCQkmJiAoZmRvX2ZsYWdzICYgRkRPX01BUkspCisJCSYmIG9sZF9LZXlUeXBlZCkKKwkgICAgZm9sZE9wZW5DdXJzb3IoKTsKKyMgZW5kaWYKKyAgICB9CisjZWxzZQorICAgIGNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyNlbmRpZgorfQorCisvKgorICogSGFuZGxlICciJyBjb21tYW5kLgorICovCisgICAgc3RhdGljIHZvaWQKK252X3JlZ25hbWUoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaWYgKGNoZWNrY2xlYXJvcChjYXAtPm9hcCkpCisJcmV0dXJuOworI2lmZGVmIEZFQVRfRVZBTAorICAgIGlmIChjYXAtPm5jaGFyID09ICc9JykKKwljYXAtPm5jaGFyID0gZ2V0X2V4cHJfcmVnaXN0ZXIoKTsKKyNlbmRpZgorICAgIGlmIChjYXAtPm5jaGFyICE9IE5VTCAmJiB2YWxpZF95YW5rX3JlZyhjYXAtPm5jaGFyLCBGQUxTRSkpCisgICAgeworCWNhcC0+b2FwLT5yZWduYW1lID0gY2FwLT5uY2hhcjsKKwljYXAtPm9wY291bnQgPSBjYXAtPmNvdW50MDsJLyogcmVtZW1iZXIgY291bnQgYmVmb3JlICciJyAqLworI2lmZGVmIEZFQVRfRVZBTAorCXNldF9yZWdfdmFyKGNhcC0+b2FwLT5yZWduYW1lKTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisJY2xlYXJvcGJlZXAoY2FwLT5vYXApOworfQorCisjaWZkZWYgRkVBVF9WSVNVQUwKKy8qCisgKiBIYW5kbGUgInYiLCAiViIgYW5kICJDVFJMLVYiIGNvbW1hbmRzLgorICogQWxzbyBmb3IgImdoIiwgImdIIiBhbmQgImdeSCIgY29tbWFuZHM6IEFsd2F5cyBzdGFydCBTZWxlY3QgbW9kZSwgY2FwLT5hcmcKKyAqIGlzIFRSVUUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfdmlzdWFsKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIC8qICd2JywgJ1YnIGFuZCBDVFJMLVYgY2FuIGJlIHVzZWQgd2hpbGUgYW4gb3BlcmF0b3IgaXMgcGVuZGluZyB0byBtYWtlIGl0CisgICAgICogY2hhcmFjdGVyd2lzZSwgbGluZXdpc2UsIG9yIGJsb2Nrd2lzZS4gKi8KKyAgICBpZiAoY2FwLT5vYXAtPm9wX3R5cGUgIT0gT1BfTk9QKQorICAgIHsKKwljYXAtPm9hcC0+bW90aW9uX2ZvcmNlID0gY2FwLT5jbWRjaGFyOworCWZpbmlzaF9vcCA9IEZBTFNFOwkvKiBvcGVyYXRvciBkb2Vzbid0IGZpbmlzaCBub3cgYnV0IGxhdGVyICovCisJcmV0dXJuOworICAgIH0KKworICAgIFZJc3VhbF9zZWxlY3QgPSBjYXAtPmFyZzsKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkJICAgIC8qIGNoYW5nZSBWaXN1YWwgbW9kZSAqLworICAgIHsKKwlpZiAoVklzdWFsX21vZGUgPT0gY2FwLT5jbWRjaGFyKSAgICAvKiBzdG9wIHZpc3VhbCBtb2RlICovCisJICAgIGVuZF92aXN1YWxfbW9kZSgpOworCWVsc2UJCQkJICAgIC8qIHRvZ2dsZSBjaGFyL2Jsb2NrIG1vZGUgKi8KKwl7CQkJCSAgICAvKgkgICBvciBjaGFyL2xpbmUgbW9kZSAqLworCSAgICBWSXN1YWxfbW9kZSA9IGNhcC0+Y21kY2hhcjsKKwkgICAgc2hvd21vZGUoKTsKKwl9CisJcmVkcmF3X2N1cmJ1Zl9sYXRlcihJTlZFUlRFRCk7CSAgICAvKiB1cGRhdGUgdGhlIGludmVyc2lvbiAqLworICAgIH0KKyAgICBlbHNlCQkgICAgLyogc3RhcnQgVmlzdWFsIG1vZGUgKi8KKyAgICB7CisJY2hlY2tfdmlzdWFsX2hpZ2hsaWdodCgpOworCWlmIChjYXAtPmNvdW50MCkJCSAgICAvKiB1c2UgcHJldmlvdXNseSBzZWxlY3RlZCBwYXJ0ICovCisJeworCSAgICBpZiAocmVzZWxfVklzdWFsX21vZGUgPT0gTlVMKSAgIC8qIHRoZXJlIGlzIG5vbmUgKi8KKwkgICAgeworCQliZWVwX2ZsdXNoKCk7CisJCXJldHVybjsKKwkgICAgfQorCSAgICBWSXN1YWwgPSBjdXJ3aW4tPndfY3Vyc29yOworCisJICAgIFZJc3VhbF9hY3RpdmUgPSBUUlVFOworCSAgICBWSXN1YWxfcmVzZWxlY3QgPSBUUlVFOworCSAgICBpZiAoIWNhcC0+YXJnKQorCQkvKiBzdGFydCBTZWxlY3QgbW9kZSB3aGVuICdzZWxlY3Rtb2RlJyBjb250YWlucyAiY21kIiAqLworCQltYXlfc3RhcnRfc2VsZWN0KCdjJyk7CisjaWZkZWYgRkVBVF9NT1VTRQorCSAgICBzZXRtb3VzZSgpOworI2VuZGlmCisJICAgIGlmIChwX3NtZCkKKwkJcmVkcmF3X2NtZGxpbmUgPSBUUlVFOwkgICAgLyogc2hvdyB2aXN1YWwgbW9kZSBsYXRlciAqLworCSAgICAvKgorCSAgICAgKiBGb3IgViBhbmQgXlYsIHdlIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgbGluZXMgZXZlbiBpZiB0aGVyZQorCSAgICAgKiB3YXMgb25seSBvbmUgLS0gd2ViYgorCSAgICAgKi8KKwkgICAgaWYgKHJlc2VsX1ZJc3VhbF9tb2RlICE9ICd2JyB8fCByZXNlbF9WSXN1YWxfbGluZV9jb3VudCA+IDEpCisJICAgIHsKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtICs9CisJCQkJICAgIHJlc2VsX1ZJc3VhbF9saW5lX2NvdW50ICogY2FwLT5jb3VudDAgLSAxOworCQlpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwkgICAgfQorCSAgICBWSXN1YWxfbW9kZSA9IHJlc2VsX1ZJc3VhbF9tb2RlOworCSAgICBpZiAoVklzdWFsX21vZGUgPT0gJ3YnKQorCSAgICB7CisJCWlmIChyZXNlbF9WSXN1YWxfbGluZV9jb3VudCA8PSAxKQorCQkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgKz0gcmVzZWxfVklzdWFsX2NvbCAqIGNhcC0+Y291bnQwIC0gMTsKKwkJZWxzZQorCQkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSByZXNlbF9WSXN1YWxfY29sOworCQljaGVja19jdXJzb3JfY29sKCk7CisJICAgIH0KKwkgICAgaWYgKHJlc2VsX1ZJc3VhbF9jb2wgPT0gTUFYQ09MKQorCSAgICB7CisJCWN1cndpbi0+d19jdXJzd2FudCA9IE1BWENPTDsKKwkJY29sYWR2YW5jZSgoY29sbnJfVClNQVhDT0wpOworCSAgICB9CisJICAgIGVsc2UgaWYgKFZJc3VhbF9tb2RlID09IEN0cmxfVikKKwkgICAgeworCQl2YWxpZGF0ZV92aXJ0Y29sKCk7CisJCWN1cndpbi0+d19jdXJzd2FudCA9IGN1cndpbi0+d192aXJ0Y29sCisJCQkJCSArIHJlc2VsX1ZJc3VhbF9jb2wgKiBjYXAtPmNvdW50MCAtIDE7CisJCWNvbGFkdmFuY2UoY3Vyd2luLT53X2N1cnN3YW50KTsKKwkgICAgfQorCSAgICBlbHNlCisJCWN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCSAgICByZWRyYXdfY3VyYnVmX2xhdGVyKElOVkVSVEVEKTsJLyogc2hvdyB0aGUgaW52ZXJzaW9uICovCisJfQorCWVsc2UKKwl7CisJICAgIGlmICghY2FwLT5hcmcpCisJCS8qIHN0YXJ0IFNlbGVjdCBtb2RlIHdoZW4gJ3NlbGVjdG1vZGUnIGNvbnRhaW5zICJjbWQiICovCisJCW1heV9zdGFydF9zZWxlY3QoJ2MnKTsKKwkgICAgbl9zdGFydF92aXN1YWxfbW9kZShjYXAtPmNtZGNoYXIpOworCX0KKyAgICB9Cit9CisKKy8qCisgKiBTdGFydCBzZWxlY3Rpb24gZm9yIFNoaWZ0LW1vdmVtZW50IGtleXMuCisgKi8KKyAgICB2b2lkCitzdGFydF9zZWxlY3Rpb24oKQoreworICAgIC8qIGlmICdzZWxlY3Rtb2RlJyBjb250YWlucyAia2V5Iiwgc3RhcnQgU2VsZWN0IG1vZGUgKi8KKyAgICBtYXlfc3RhcnRfc2VsZWN0KCdrJyk7CisgICAgbl9zdGFydF92aXN1YWxfbW9kZSgndicpOworfQorCisvKgorICogU3RhcnQgU2VsZWN0IG1vZGUsIGlmICJjIiBpcyBpbiAnc2VsZWN0bW9kZScgYW5kIG5vdCBpbiBhIG1hcHBpbmcgb3IgbWVudS4KKyAqLworICAgIHZvaWQKK21heV9zdGFydF9zZWxlY3QoYykKKyAgICBpbnQJCWM7Cit7CisgICAgVklzdWFsX3NlbGVjdCA9IChzdHVmZl9lbXB0eSgpICYmIHR5cGVidWZfdHlwZWQoKQorCQkgICAgJiYgKHZpbV9zdHJjaHIocF9zbG0sIGMpICE9IE5VTEwpKTsKK30KKworLyoKKyAqIFN0YXJ0IFZpc3VhbCBtb2RlICJjIi4KKyAqIFNob3VsZCBzZXQgVklzdWFsX3NlbGVjdCBiZWZvcmUgY2FsbGluZyB0aGlzLgorICovCisgICAgc3RhdGljIHZvaWQKK25fc3RhcnRfdmlzdWFsX21vZGUoYykKKyAgICBpbnQJCWM7Cit7CisgICAgVklzdWFsX21vZGUgPSBjOworICAgIFZJc3VhbF9hY3RpdmUgPSBUUlVFOworICAgIFZJc3VhbF9yZXNlbGVjdCA9IFRSVUU7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorICAgIC8qIENvcm5lciBjYXNlOiB0aGUgMCBwb3NpdGlvbiBpbiBhIHRhYiBtYXkgY2hhbmdlIHdoZW4gZ29pbmcgaW50bworICAgICAqIHZpcnR1YWxlZGl0LiAgUmVjYWxjdWxhdGUgY3Vyd2luLT53X2N1cnNvciB0byBhdm9pZCBiYWQgaGlsaWdodGluZy4KKyAgICAgKi8KKyAgICBpZiAoYyA9PSBDdHJsX1YgJiYgKHZlX2ZsYWdzICYgVkVfQkxPQ0spICYmIGdjaGFyX2N1cnNvcigpID09IFRBQikKKwljb2xhZHZhbmNlKGN1cndpbi0+d192aXJ0Y29sKTsKKyNlbmRpZgorICAgIFZJc3VhbCA9IGN1cndpbi0+d19jdXJzb3I7CisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBmb2xkQWRqdXN0VmlzdWFsKCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTU9VU0UKKyAgICBzZXRtb3VzZSgpOworI2VuZGlmCisgICAgaWYgKHBfc21kKQorCXJlZHJhd19jbWRsaW5lID0gVFJVRTsJLyogc2hvdyB2aXN1YWwgbW9kZSBsYXRlciAqLworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgLyogTWFrZSBzdXJlIHRoZSBjbGlwYm9hcmQgZ2V0cyB1cGRhdGVkLiAgTmVlZGVkIGJlY2F1c2Ugc3RhcnQgYW5kCisgICAgICogZW5kIG1heSBzdGlsbCBiZSB0aGUgc2FtZSwgYW5kIHRoZSBzZWxlY3Rpb24gbmVlZHMgdG8gYmUgb3duZWQgKi8KKyAgICBjbGlwX3N0YXIudm1vZGUgPSBOVUw7CisjZW5kaWYKKworICAgIC8qIE9ubHkgbmVlZCB0byByZWRyYXcgdGhpcyBsaW5lLCB1bmxlc3Mgc3RpbGwgbmVlZCB0byByZWRyYXcgYW4gb2xkCisgICAgICogVmlzdWFsIGFyZWEgKHdoZW4gJ2xhenlyZWRyYXcnIGlzIHNldCkuICovCisgICAgaWYgKGN1cndpbi0+d19yZWRyX3R5cGUgPCBJTlZFUlRFRCkKKyAgICB7CisJY3Vyd2luLT53X29sZF9jdXJzb3JfbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKwljdXJ3aW4tPndfb2xkX3Zpc3VhbF9sbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworICAgIH0KK30KKworI2VuZGlmIC8qIEZFQVRfVklTVUFMICovCisKKy8qCisgKiBDVFJMLVc6IFdpbmRvdyBjb21tYW5kcworICovCisgICAgc3RhdGljIHZvaWQKK252X3dpbmRvdyhjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBpZiAoIWNoZWNrY2xlYXJvcChjYXAtPm9hcCkpCisJZG9fd2luZG93KGNhcC0+bmNoYXIsIGNhcC0+Y291bnQwLCBOVUwpOyAvKiBldmVyeXRoaW5nIGlzIGluIHdpbmRvdy5jICovCisjZWxzZQorICAgICh2b2lkKWNoZWNrY2xlYXJvcChjYXAtPm9hcCk7CisjZW5kaWYKK30KKworLyoKKyAqIENUUkwtWjogU3VzcGVuZAorICovCisgICAgc3RhdGljIHZvaWQKK252X3N1c3BlbmQoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgY2xlYXJvcChjYXAtPm9hcCk7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKwllbmRfdmlzdWFsX21vZGUoKTsJCS8qIHN0b3AgVmlzdWFsIG1vZGUgKi8KKyNlbmRpZgorICAgIGRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikic3QiKTsKK30KKworLyoKKyAqIENvbW1hbmRzIHN0YXJ0aW5nIHdpdGggImciLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2dfY21kKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIG9wYXJnX1QJKm9hcCA9IGNhcC0+b2FwOworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgcG9zX1QJdHBvczsKKyNlbmRpZgorICAgIGludAkJaTsKKyAgICBpbnQJCWZsYWcgPSBGQUxTRTsKKworICAgIHN3aXRjaCAoY2FwLT5uY2hhcikKKyAgICB7CisjaWZkZWYgTUVNX1BST0ZJTEUKKyAgICAvKgorICAgICAqICJnXkEiOiBkdW1wIGxvZyBvZiB1c2VkIG1lbW9yeS4KKyAgICAgKi8KKyAgICBjYXNlIEN0cmxfQToKKwl2aW1fbWVtX3Byb2ZpbGVfZHVtcCgpOworCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisgICAgLyoKKyAgICAgKiAiZ1IiOiBFbnRlciB2aXJ0dWFsIHJlcGxhY2UgbW9kZS4KKyAgICAgKi8KKyAgICBjYXNlICdSJzoKKwljYXAtPmFyZyA9IFRSVUU7CisJbnZfUmVwbGFjZShjYXApOworCWJyZWFrOworCisgICAgY2FzZSAncic6CisJbnZfdnJlcGxhY2UoY2FwKTsKKwlicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSAnJic6CisJZG9fY21kbGluZV9jbWQoKGNoYXJfdSAqKSIlcy8vfi8mIik7CisJYnJlYWs7CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIC8qCisgICAgICogImd2IjogUmVzZWxlY3QgdGhlIHByZXZpb3VzIFZpc3VhbCBhcmVhLiAgSWYgVmlzdWFsIGFscmVhZHkgYWN0aXZlLAorICAgICAqCSAgICAgZXhjaGFuZ2UgcHJldmlvdXMgYW5kIGN1cnJlbnQgVmlzdWFsIGFyZWEuCisgICAgICovCisgICAgY2FzZSAndic6CisJaWYgKGNoZWNrY2xlYXJvcChvYXApKQorCSAgICBicmVhazsKKworCWlmICgJICAgY3VyYnVmLT5iX3Zpc3VhbF9zdGFydC5sbnVtID09IDAKKwkJfHwgY3VyYnVmLT5iX3Zpc3VhbF9zdGFydC5sbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQKKwkJfHwgY3VyYnVmLT5iX3Zpc3VhbF9lbmQubG51bSA9PSAwKQorCSAgICBiZWVwX2ZsdXNoKCk7CisJZWxzZQorCXsKKwkgICAgLyogc2V0IHdfY3Vyc29yIHRvIHRoZSBzdGFydCBvZiB0aGUgVmlzdWFsIGFyZWEsIHRwb3MgdG8gdGhlIGVuZCAqLworCSAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKwkgICAgeworCQlpID0gVklzdWFsX21vZGU7CisJCVZJc3VhbF9tb2RlID0gY3VyYnVmLT5iX3Zpc3VhbF9tb2RlOworCQljdXJidWYtPmJfdmlzdWFsX21vZGUgPSBpOworIyBpZmRlZiBGRUFUX0VWQUwKKwkJY3VyYnVmLT5iX3Zpc3VhbF9tb2RlX2V2YWwgPSBpOworIyBlbmRpZgorCQlpID0gY3Vyd2luLT53X2N1cnN3YW50OworCQljdXJ3aW4tPndfY3Vyc3dhbnQgPSBjdXJidWYtPmJfdmlzdWFsX2N1cnN3YW50OworCQljdXJidWYtPmJfdmlzdWFsX2N1cnN3YW50ID0gaTsKKworCQl0cG9zID0gY3VyYnVmLT5iX3Zpc3VhbF9lbmQ7CisJCWN1cmJ1Zi0+Yl92aXN1YWxfZW5kID0gY3Vyd2luLT53X2N1cnNvcjsKKwkJY3Vyd2luLT53X2N1cnNvciA9IGN1cmJ1Zi0+Yl92aXN1YWxfc3RhcnQ7CisJCWN1cmJ1Zi0+Yl92aXN1YWxfc3RhcnQgPSBWSXN1YWw7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCVZJc3VhbF9tb2RlID0gY3VyYnVmLT5iX3Zpc3VhbF9tb2RlOworCQljdXJ3aW4tPndfY3Vyc3dhbnQgPSBjdXJidWYtPmJfdmlzdWFsX2N1cnN3YW50OworCQl0cG9zID0gY3VyYnVmLT5iX3Zpc3VhbF9lbmQ7CisJCWN1cndpbi0+d19jdXJzb3IgPSBjdXJidWYtPmJfdmlzdWFsX3N0YXJ0OworCSAgICB9CisKKwkgICAgVklzdWFsX2FjdGl2ZSA9IFRSVUU7CisJICAgIFZJc3VhbF9yZXNlbGVjdCA9IFRSVUU7CisKKwkgICAgLyogU2V0IFZpc3VhbCB0byB0aGUgc3RhcnQgYW5kIHdfY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIFZpc3VhbAorCSAgICAgKiBhcmVhLiAgTWFrZSBzdXJlIHRoZXkgYXJlIG9uIGFuIGV4aXN0aW5nIGNoYXJhY3Rlci4gKi8KKwkgICAgY2hlY2tfY3Vyc29yKCk7CisJICAgIFZJc3VhbCA9IGN1cndpbi0+d19jdXJzb3I7CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSB0cG9zOworCSAgICBjaGVja19jdXJzb3IoKTsKKwkgICAgdXBkYXRlX3RvcGxpbmUoKTsKKwkgICAgLyoKKwkgICAgICogV2hlbiBjYWxsZWQgZnJvbSBub3JtYWwgImciIGNvbW1hbmQ6IHN0YXJ0IFNlbGVjdCBtb2RlIHdoZW4KKwkgICAgICogJ3NlbGVjdG1vZGUnIGNvbnRhaW5zICJjbWQiLiAgV2hlbiBjYWxsZWQgZm9yIEtfU0VMRUNULCBhbHdheXMKKwkgICAgICogc3RhcnQgU2VsZWN0IG1vZGUuCisJICAgICAqLworCSAgICBpZiAoY2FwLT5hcmcpCisJCVZJc3VhbF9zZWxlY3QgPSBUUlVFOworCSAgICBlbHNlCisJCW1heV9zdGFydF9zZWxlY3QoJ2MnKTsKKyNpZmRlZiBGRUFUX01PVVNFCisJICAgIHNldG1vdXNlKCk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorCSAgICAvKiBNYWtlIHN1cmUgdGhlIGNsaXBib2FyZCBnZXRzIHVwZGF0ZWQuICBOZWVkZWQgYmVjYXVzZSBzdGFydCBhbmQKKwkgICAgICogZW5kIGFyZSBzdGlsbCB0aGUgc2FtZSwgYW5kIHRoZSBzZWxlY3Rpb24gbmVlZHMgdG8gYmUgb3duZWQgKi8KKwkgICAgY2xpcF9zdGFyLnZtb2RlID0gTlVMOworI2VuZGlmCisJICAgIHJlZHJhd19jdXJidWZfbGF0ZXIoSU5WRVJURUQpOworCSAgICBzaG93bW9kZSgpOworCX0KKwlicmVhazsKKyAgICAvKgorICAgICAqICJnViI6IERvbid0IHJlc2VsZWN0IHRoZSBwcmV2aW91cyBWaXN1YWwgYXJlYSBhZnRlciBhIFNlbGVjdCBtb2RlCisgICAgICoJICAgICBtYXBwaW5nIG9mIG1lbnUuCisgICAgICovCisgICAgY2FzZSAnVic6CisJVklzdWFsX3Jlc2VsZWN0ID0gRkFMU0U7CisJYnJlYWs7CisKKyAgICAvKgorICAgICAqICJnaCI6ICBzdGFydCBTZWxlY3QgbW9kZS4KKyAgICAgKiAiZ0giOiAgc3RhcnQgU2VsZWN0IGxpbmUgbW9kZS4KKyAgICAgKiAiZ15IIjogc3RhcnQgU2VsZWN0IGJsb2NrIG1vZGUuCisgICAgICovCisgICAgY2FzZSBLX0JTOgorCWNhcC0+bmNoYXIgPSBDdHJsX0g7CisJLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlICdoJzoKKyAgICBjYXNlICdIJzoKKyAgICBjYXNlIEN0cmxfSDoKKyMgaWZkZWYgRUJDRElDCisJLyogRUJDRElDOiAndictJ2gnICE9ICdedictJ15oJyAqLworCWlmIChjYXAtPm5jaGFyID09IEN0cmxfSCkKKwkgICAgY2FwLT5jbWRjaGFyID0gQ3RybF9WOworCWVsc2UKKyMgZW5kaWYKKwljYXAtPmNtZGNoYXIgPSBjYXAtPm5jaGFyICsgKCd2JyAtICdoJyk7CisJY2FwLT5hcmcgPSBUUlVFOworCW52X3Zpc3VhbChjYXApOworCWJyZWFrOworI2VuZGlmIC8qIEZFQVRfVklTVUFMICovCisKKyAgICAvKgorICAgICAqICJnaiIgYW5kICJnayIgdHdvIG5ldyBmdW5ueSBtb3ZlbWVudCBrZXlzIC0tIHVwIGFuZCBkb3duCisgICAgICogbW92ZW1lbnQgYmFzZWQgb24gKnNjcmVlbiogbGluZSByYXRoZXIgdGhhbiAqZmlsZSogbGluZS4KKyAgICAgKi8KKyAgICBjYXNlICdqJzoKKyAgICBjYXNlIEtfRE9XTjoKKwkvKiB3aXRoICdub3dyYXAnIGl0IHdvcmtzIGp1c3QgbGlrZSB0aGUgbm9ybWFsICJqIiBjb21tYW5kOyBhbHNvIHdoZW4KKwkgKiBpbiBhIGNsb3NlZCBmb2xkICovCisJaWYgKCFjdXJ3aW4tPndfcF93cmFwCisjaWZkZWYgRkVBVF9GT0xESU5HCisJCXx8IGhhc0ZvbGRpbmcoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBOVUxMLCBOVUxMKQorI2VuZGlmCisJCSkKKwl7CisJICAgIG9hcC0+bW90aW9uX3R5cGUgPSBNTElORTsKKwkgICAgaSA9IGN1cnNvcl9kb3duKGNhcC0+Y291bnQxLCBvYXAtPm9wX3R5cGUgPT0gT1BfTk9QKTsKKwl9CisJZWxzZQorCSAgICBpID0gbnZfc2NyZWVuZ28ob2FwLCBGT1JXQVJELCBjYXAtPmNvdW50MSk7CisJaWYgKGkgPT0gRkFJTCkKKwkgICAgY2xlYXJvcGJlZXAob2FwKTsKKwlicmVhazsKKworICAgIGNhc2UgJ2snOgorICAgIGNhc2UgS19VUDoKKwkvKiB3aXRoICdub3dyYXAnIGl0IHdvcmtzIGp1c3QgbGlrZSB0aGUgbm9ybWFsICJrIiBjb21tYW5kOyBhbHNvIHdoZW4KKwkgKiBpbiBhIGNsb3NlZCBmb2xkICovCisJaWYgKCFjdXJ3aW4tPndfcF93cmFwCisjaWZkZWYgRkVBVF9GT0xESU5HCisJCXx8IGhhc0ZvbGRpbmcoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBOVUxMLCBOVUxMKQorI2VuZGlmCisJICAgKQorCXsKKwkgICAgb2FwLT5tb3Rpb25fdHlwZSA9IE1MSU5FOworCSAgICBpID0gY3Vyc29yX3VwKGNhcC0+Y291bnQxLCBvYXAtPm9wX3R5cGUgPT0gT1BfTk9QKTsKKwl9CisJZWxzZQorCSAgICBpID0gbnZfc2NyZWVuZ28ob2FwLCBCQUNLV0FSRCwgY2FwLT5jb3VudDEpOworCWlmIChpID09IEZBSUwpCisJICAgIGNsZWFyb3BiZWVwKG9hcCk7CisJYnJlYWs7CisKKyAgICAvKgorICAgICAqICJnSiI6IGpvaW4gdHdvIGxpbmVzIHdpdGhvdXQgaW5zZXJ0aW5nIGEgc3BhY2UuCisgICAgICovCisgICAgY2FzZSAnSic6CisJbnZfam9pbihjYXApOworCWJyZWFrOworCisgICAgLyoKKyAgICAgKiAiZzAiLCAiZ14iIGFuZCAiZyQiOiBMaWtlICIwIiwgIl4iIGFuZCAiJCIgYnV0IGZvciBzY3JlZW4gbGluZXMuCisgICAgICogImdtIjogbWlkZGxlIG9mICJnMCIgYW5kICJnJCIuCisgICAgICovCisgICAgY2FzZSAnXic6CisJZmxhZyA9IFRSVUU7CisJLyogRkFMTFRIUk9VR0ggKi8KKworICAgIGNhc2UgJzAnOgorICAgIGNhc2UgJ20nOgorICAgIGNhc2UgS19IT01FOgorICAgIGNhc2UgS19LSE9NRToKKyAgICBjYXNlIEtfWEhPTUU6CisJb2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworCW9hcC0+aW5jbHVzaXZlID0gRkFMU0U7CisJaWYgKGN1cndpbi0+d19wX3dyYXAKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQkmJiBjdXJ3aW4tPndfd2lkdGggIT0gMAorI2VuZGlmCisJCSkKKwl7CisJICAgIGludAkJd2lkdGgxID0gV19XSURUSChjdXJ3aW4pIC0gY3Vyd2luX2NvbF9vZmYoKTsKKwkgICAgaW50CQl3aWR0aDIgPSB3aWR0aDEgKyBjdXJ3aW5fY29sX29mZjIoKTsKKworCSAgICB2YWxpZGF0ZV92aXJ0Y29sKCk7CisJICAgIGkgPSAwOworCSAgICBpZiAoY3Vyd2luLT53X3ZpcnRjb2wgPj0gKGNvbG5yX1Qpd2lkdGgxICYmIHdpZHRoMiA+IDApCisJCWkgPSAoY3Vyd2luLT53X3ZpcnRjb2wgLSB3aWR0aDEpIC8gd2lkdGgyICogd2lkdGgyICsgd2lkdGgxOworCX0KKwllbHNlCisJICAgIGkgPSBjdXJ3aW4tPndfbGVmdGNvbDsKKwkvKiBHbyB0byB0aGUgbWlkZGxlIG9mIHRoZSBzY3JlZW4gbGluZS4gIFdoZW4gJ251bWJlcicgaXMgb24gYW5kIGxpbmVzCisJICogYXJlIHdyYXBwaW5nIHRoZSBtaWRkbGUgY2FuIGJlIG1vcmUgdG8gdGhlIGxlZnQuKi8KKwlpZiAoY2FwLT5uY2hhciA9PSAnbScpCisJICAgIGkgKz0gKFdfV0lEVEgoY3Vyd2luKSAtIGN1cndpbl9jb2xfb2ZmKCkKKwkJICAgICsgKChjdXJ3aW4tPndfcF93cmFwICYmIGkgPiAwKQorCQkJPyBjdXJ3aW5fY29sX29mZjIoKSA6IDApKSAvIDI7CisJY29sYWR2YW5jZSgoY29sbnJfVClpKTsKKwlpZiAoZmxhZykKKwl7CisJICAgIGRvCisJCWkgPSBnY2hhcl9jdXJzb3IoKTsKKwkgICAgd2hpbGUgKHZpbV9pc3doaXRlKGkpICYmIG9uZXJpZ2h0KCkgPT0gT0spOworCX0KKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKwlicmVhazsKKworICAgIGNhc2UgJ18nOgorCS8qICJnXyI6IHRvIHRoZSBsYXN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUgb3IgPGNvdW50PiBsaW5lcworCSAqIGRvd253YXJkLiAqLworCWNhcC0+b2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworCWNhcC0+b2FwLT5pbmNsdXNpdmUgPSBUUlVFOworCWN1cndpbi0+d19jdXJzd2FudCA9IE1BWENPTDsKKwlpZiAoY3Vyc29yX2Rvd24oKGxvbmcpKGNhcC0+Y291bnQxIC0gMSksCisJCQkJCSBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApID09IEZBSUwpCisJICAgIGNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKwllbHNlCisJeworCSAgICBjaGFyX3UgICpwdHIgPSBtbF9nZXRfY3VybGluZSgpOworCisJICAgIC8qIEluIFZpc3VhbCBtb2RlIHdlIG1heSBlbmQgdXAgYWZ0ZXIgdGhlIGxpbmUuICovCisJICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA+IDAgJiYgcHRyW2N1cndpbi0+d19jdXJzb3IuY29sXSA9PSBOVUwpCisJCS0tY3Vyd2luLT53X2N1cnNvci5jb2w7CisKKwkgICAgLyogRGVjcmVhc2UgdGhlIGN1cnNvciBjb2x1bW4gdW50aWwgaXQncyBvbiBhIG5vbi1ibGFuay4gKi8KKwkgICAgd2hpbGUgKGN1cndpbi0+d19jdXJzb3IuY29sID4gMAorCQkJCSAgICAmJiB2aW1faXN3aGl0ZShwdHJbY3Vyd2luLT53X2N1cnNvci5jb2xdKSkKKwkJLS1jdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwkgICAgY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisJfQorCWJyZWFrOworCisgICAgY2FzZSAnJCc6CisgICAgY2FzZSBLX0VORDoKKyAgICBjYXNlIEtfS0VORDoKKyAgICBjYXNlIEtfWEVORDoKKwl7CisJICAgIGludCBjb2xfb2ZmID0gY3Vyd2luX2NvbF9vZmYoKTsKKworCSAgICBvYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisJICAgIG9hcC0+aW5jbHVzaXZlID0gVFJVRTsKKwkgICAgaWYgKGN1cndpbi0+d19wX3dyYXAKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQkgICAgJiYgY3Vyd2luLT53X3dpZHRoICE9IDAKKyNlbmRpZgorCSAgICAgICApCisJICAgIHsKKwkJY3Vyd2luLT53X2N1cnN3YW50ID0gTUFYQ09MOyAgICAvKiBzbyB3ZSBzdGF5IGF0IHRoZSBlbmQgKi8KKwkJaWYgKGNhcC0+Y291bnQxID09IDEpCisJCXsKKwkJICAgIGludAkJd2lkdGgxID0gV19XSURUSChjdXJ3aW4pIC0gY29sX29mZjsKKwkJICAgIGludAkJd2lkdGgyID0gd2lkdGgxICsgY3Vyd2luX2NvbF9vZmYyKCk7CisKKwkJICAgIHZhbGlkYXRlX3ZpcnRjb2woKTsKKwkJICAgIGkgPSB3aWR0aDEgLSAxOworCQkgICAgaWYgKGN1cndpbi0+d192aXJ0Y29sID49IChjb2xucl9UKXdpZHRoMSkKKwkJCWkgKz0gKChjdXJ3aW4tPndfdmlydGNvbCAtIHdpZHRoMSkgLyB3aWR0aDIgKyAxKQorCQkJCQkJCQkgICAgICogd2lkdGgyOworCQkgICAgY29sYWR2YW5jZSgoY29sbnJfVClpKTsKKyNpZiBkZWZpbmVkKEZFQVRfTElORUJSRUFLKSB8fCBkZWZpbmVkKEZFQVRfTUJZVEUpCisJCSAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPiAwICYmIGN1cndpbi0+d19wX3dyYXApCisJCSAgICB7CisJCQkvKgorCQkJICogQ2hlY2sgZm9yIGxhbmRpbmcgb24gYSBjaGFyYWN0ZXIgdGhhdCBnb3Qgc3BsaXQgYXQKKwkJCSAqIHRoZSBlbmQgb2YgdGhlIGxpbmUuICBXZSBkbyBub3Qgd2FudCB0byBhZHZhbmNlIHRvCisJCQkgKiB0aGUgbmV4dCBzY3JlZW4gbGluZS4KKwkJCSAqLworCQkJdmFsaWRhdGVfdmlydGNvbCgpOworCQkJaWYgKGN1cndpbi0+d192aXJ0Y29sID4gKGNvbG5yX1QpaSkKKwkJCSAgICAtLWN1cndpbi0+d19jdXJzb3IuY29sOworCQkgICAgfQorI2VuZGlmCisJCX0KKwkJZWxzZSBpZiAobnZfc2NyZWVuZ28ob2FwLCBGT1JXQVJELCBjYXAtPmNvdW50MSAtIDEpID09IEZBSUwpCisJCSAgICBjbGVhcm9wYmVlcChvYXApOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpID0gY3Vyd2luLT53X2xlZnRjb2wgKyBXX1dJRFRIKGN1cndpbikgLSBjb2xfb2ZmIC0gMTsKKwkJY29sYWR2YW5jZSgoY29sbnJfVClpKTsKKwkJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisJICAgIH0KKwl9CisJYnJlYWs7CisKKyAgICAvKgorICAgICAqICJnKiIgYW5kICJnIyIsIGxpa2UgIioiIGFuZCAiIyIgYnV0IHdpdGhvdXQgdXNpbmcgIlw8IiBhbmQgIlw+IgorICAgICAqLworICAgIGNhc2UgJyonOgorICAgIGNhc2UgJyMnOgorI2lmIFBPVU5EICE9ICcjJworICAgIGNhc2UgUE9VTkQ6CQkvKiBwb3VuZCBzaWduIChzb21ldGltZXMgZXF1YWwgdG8gJyMnKSAqLworI2VuZGlmCisgICAgY2FzZSBDdHJsX1JTQjoJCS8qIDp0YWcgb3IgOnRzZWxlY3QgZm9yIGN1cnJlbnQgaWRlbnRpZmllciAqLworICAgIGNhc2UgJ10nOgkJCS8qIDp0c2VsZWN0IGZvciBjdXJyZW50IGlkZW50aWZpZXIgKi8KKwludl9pZGVudChjYXApOworCWJyZWFrOworCisgICAgLyoKKyAgICAgKiBnZSBhbmQgZ0U6IGdvIGJhY2sgdG8gZW5kIG9mIHdvcmQKKyAgICAgKi8KKyAgICBjYXNlICdlJzoKKyAgICBjYXNlICdFJzoKKwlvYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisJb2FwLT5pbmNsdXNpdmUgPSBUUlVFOworCWlmIChiY2tlbmRfd29yZChjYXAtPmNvdW50MSwgY2FwLT5uY2hhciA9PSAnRScsIEZBTFNFKSA9PSBGQUlMKQorCSAgICBjbGVhcm9wYmVlcChvYXApOworCWJyZWFrOworCisgICAgLyoKKyAgICAgKiAiZyBDVFJMLUciOiBkaXNwbGF5IGluZm8gYWJvdXQgY3Vyc29yIHBvc2l0aW9uCisgICAgICovCisgICAgY2FzZSBDdHJsX0c6CisJY3Vyc29yX3Bvc19pbmZvKCk7CisJYnJlYWs7CisKKyAgICAvKgorICAgICAqICJnaSI6IHN0YXJ0IEluc2VydCBhdCB0aGUgbGFzdCBwb3NpdGlvbi4KKyAgICAgKi8KKyAgICBjYXNlICdpJzoKKwlpZiAoY3VyYnVmLT5iX2xhc3RfaW5zZXJ0LmxudW0gIT0gMCkKKwl7CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBjdXJidWYtPmJfbGFzdF9pbnNlcnQ7CisJICAgIGNoZWNrX2N1cnNvcl9sbnVtKCk7CisJICAgIGkgPSAoaW50KVNUUkxFTihtbF9nZXRfY3VybGluZSgpKTsKKwkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IuY29sID4gKGNvbG5yX1QpaSkKKwkgICAgeworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJaWYgKHZpcnR1YWxfYWN0aXZlKCkpCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCArPSBjdXJ3aW4tPndfY3Vyc29yLmNvbCAtIGk7CisjZW5kaWYKKwkJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBpOworCSAgICB9CisJfQorCWNhcC0+Y21kY2hhciA9ICdpJzsKKwludl9lZGl0KGNhcCk7CisJYnJlYWs7CisKKyAgICAvKgorICAgICAqICJnSSI6IFN0YXJ0IGluc2VydCBpbiBjb2x1bW4gMS4KKyAgICAgKi8KKyAgICBjYXNlICdJJzoKKwliZWdpbmxpbmUoMCk7CisJaWYgKCFjaGVja2NsZWFyb3BxKG9hcCkpCisJICAgIGludm9rZV9lZGl0KGNhcCwgRkFMU0UsICdnJywgRkFMU0UpOworCWJyZWFrOworCisjaWZkZWYgRkVBVF9TRUFSQ0hQQVRICisgICAgLyoKKyAgICAgKiAiZ2YiOiBnb3RvIGZpbGUsIGVkaXQgZmlsZSB1bmRlciBjdXJzb3IKKyAgICAgKiAiXWYiIGFuZCAiW2YiOiBjYW4gYWxzbyBiZSB1c2VkLgorICAgICAqLworICAgIGNhc2UgJ2YnOgorCW52X2dvdG9maWxlKGNhcCk7CisJYnJlYWs7CisjZW5kaWYKKworCS8qICJnJ20iIGFuZCAiZ2BtIjoganVtcCB0byBtYXJrIHdpdGhvdXQgc2V0dGluZyBwY21hcmsgKi8KKyAgICBjYXNlICdcJyc6CisJY2FwLT5hcmcgPSBUUlVFOworCS8qRkFMTFRIUk9VR0gqLworICAgIGNhc2UgJ2AnOgorCW52X2dvbWFyayhjYXApOworCWJyZWFrOworCisgICAgLyoKKyAgICAgKiAiZ3MiOiBHb3RvIHNsZWVwLgorICAgICAqLworICAgIGNhc2UgJ3MnOgorCWRvX3NsZWVwKGNhcC0+Y291bnQxICogMTAwMEwpOworCWJyZWFrOworCisgICAgLyoKKyAgICAgKiAiZ2EiOiBEaXNwbGF5IHRoZSBhc2NpaSB2YWx1ZSBvZiB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZQorICAgICAqIGN1cnNvci4JSXQgaXMgZGlzcGxheWVkIGluIGRlY2ltYWwsIGhleCwgYW5kIG9jdGFsLiAtLSB3ZWJiCisgICAgICovCisgICAgY2FzZSAnYSc6CisJZG9fYXNjaWkoTlVMTCk7CisJYnJlYWs7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyoKKyAgICAgKiAiZzgiOiBEaXNwbGF5IHRoZSBieXRlcyB1c2VkIGZvciB0aGUgVVRGLTggY2hhcmFjdGVyIHVuZGVyIHRoZQorICAgICAqIGN1cnNvci4JSXQgaXMgZGlzcGxheWVkIGluIGhleC4KKyAgICAgKi8KKyAgICBjYXNlICc4JzoKKwlzaG93X3V0ZjgoKTsKKwlicmVhazsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAiZ2ciOiBHb3RvIHRoZSBmaXJzdCBsaW5lIGluIGZpbGUuICBXaXRoIGEgY291bnQgaXQgZ29lcyB0bworICAgICAqIHRoYXQgbGluZSBudW1iZXIgbGlrZSBmb3IgIkciLiAtLSB3ZWJiCisgICAgICovCisgICAgY2FzZSAnZyc6CisJY2FwLT5hcmcgPSBGQUxTRTsKKwludl9nb3RvKGNhcCk7CisJYnJlYWs7CisKKyAgICAvKgorICAgICAqCSBUd28tY2hhcmFjdGVyIG9wZXJhdG9yczoKKyAgICAgKgkgImdxIgkgICAgRm9ybWF0IHRleHQKKyAgICAgKgkgImd3IgkgICAgRm9ybWF0IHRleHQgYW5kIGtlZXAgY3Vyc29yIHBvc2l0aW9uCisgICAgICoJICJnfiIJICAgIFRvZ2dsZSB0aGUgY2FzZSBvZiB0aGUgdGV4dC4KKyAgICAgKgkgImd1IgkgICAgQ2hhbmdlIHRleHQgdG8gbG93ZXIgY2FzZS4KKyAgICAgKgkgImdVIgkgICAgQ2hhbmdlIHRleHQgdG8gdXBwZXIgY2FzZS4KKyAgICAgKiAgICJnPyIJICAgIHJvdDEzIGVuY29kaW5nCisgICAgICovCisgICAgY2FzZSAncSc6CisgICAgY2FzZSAndyc6CisJb2FwLT5jdXJzb3Jfc3RhcnQgPSBjdXJ3aW4tPndfY3Vyc29yOworCS8qRkFMTFRIUk9VR0gqLworICAgIGNhc2UgJ34nOgorICAgIGNhc2UgJ3UnOgorICAgIGNhc2UgJ1UnOgorICAgIGNhc2UgJz8nOgorCW52X29wZXJhdG9yKGNhcCk7CisJYnJlYWs7CisKKyAgICAvKgorICAgICAqICJnZCI6IEZpbmQgZmlyc3Qgb2NjdXJlbmNlIG9mIHBhdHRlcm4gdW5kZXIgdGhlIGN1cnNvciBpbiB0aGUKKyAgICAgKgkgY3VycmVudCBmdW5jdGlvbgorICAgICAqICJnRCI6IGlkZW0sIGJ1dCBpbiB0aGUgY3VycmVudCBmaWxlLgorICAgICAqLworICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ0QnOgorCW52X2dkKG9hcCwgY2FwLT5uY2hhcik7CisJYnJlYWs7CisKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgLyoKKyAgICAgKiBnPCpNb3VzZT4gOiA8Qy0qbW91c2U+CisgICAgICovCisgICAgY2FzZSBLX01JRERMRU1PVVNFOgorICAgIGNhc2UgS19NSURETEVEUkFHOgorICAgIGNhc2UgS19NSURETEVSRUxFQVNFOgorICAgIGNhc2UgS19MRUZUTU9VU0U6CisgICAgY2FzZSBLX0xFRlREUkFHOgorICAgIGNhc2UgS19MRUZUUkVMRUFTRToKKyAgICBjYXNlIEtfUklHSFRNT1VTRToKKyAgICBjYXNlIEtfUklHSFREUkFHOgorICAgIGNhc2UgS19SSUdIVFJFTEVBU0U6CisgICAgY2FzZSBLX1gxTU9VU0U6CisgICAgY2FzZSBLX1gxRFJBRzoKKyAgICBjYXNlIEtfWDFSRUxFQVNFOgorICAgIGNhc2UgS19YMk1PVVNFOgorICAgIGNhc2UgS19YMkRSQUc6CisgICAgY2FzZSBLX1gyUkVMRUFTRToKKwltb2RfbWFzayA9IE1PRF9NQVNLX0NUUkw7CisJKHZvaWQpZG9fbW91c2Uob2FwLCBjYXAtPm5jaGFyLCBCQUNLV0FSRCwgY2FwLT5jb3VudDEsIDApOworCWJyZWFrOworI2VuZGlmCisKKyAgICBjYXNlIEtfSUdOT1JFOgorCWJyZWFrOworCisgICAgLyoKKyAgICAgKiAiZ1AiIGFuZCAiZ3AiOiBzYW1lIGFzICJQIiBhbmQgInAiIGJ1dCBsZWF2ZSBjdXJzb3IganVzdCBhZnRlciBuZXcgdGV4dAorICAgICAqLworICAgIGNhc2UgJ3AnOgorICAgIGNhc2UgJ1AnOgorCW52X3B1dChjYXApOworCWJyZWFrOworCisjaWZkZWYgRkVBVF9CWVRFT0ZGCisgICAgLyogImdvIjogZ290byBieXRlIGNvdW50IGZyb20gc3RhcnQgb2YgYnVmZmVyICovCisgICAgY2FzZSAnbyc6CisJZ290b19ieXRlKGNhcC0+Y291bnQwKTsKKwlicmVhazsKKyNlbmRpZgorCisgICAgLyogImdRIjogaW1wcm92ZWQgRXggbW9kZSAqLworICAgIGNhc2UgJ1EnOgorI2lmZGVmIEZFQVRfQ01EV0lOCisJaWYgKGNtZHdpbl90eXBlICE9IDApCisJeworCSAgICBjbGVhcm9wYmVlcChjYXAtPm9hcCk7CisJICAgIGJyZWFrOworCX0KKyNlbmRpZgorCWlmICghY2hlY2tjbGVhcm9wcShvYXApKQorCSAgICBkb19leG1vZGUoVFJVRSk7CisJYnJlYWs7CisKKyNpZmRlZiBGRUFUX0pVTVBMSVNUCisgICAgY2FzZSAnLCc6CisJbnZfcGNtYXJrKGNhcCk7CisJYnJlYWs7CisKKyAgICBjYXNlICc7JzoKKwljYXAtPmNvdW50MSA9IC1jYXAtPmNvdW50MTsKKwludl9wY21hcmsoY2FwKTsKKwlicmVhazsKKyNlbmRpZgorCisgICAgZGVmYXVsdDoKKwljbGVhcm9wYmVlcChvYXApOworCWJyZWFrOworICAgIH0KK30KKworLyoKKyAqIEhhbmRsZSAibyIgYW5kICJPIiBjb21tYW5kcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCituX29wZW5jbWQoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaWYgKCFjaGVja2NsZWFyb3BxKGNhcC0+b2FwKSkKKyAgICB7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJaWYgKGNhcC0+Y21kY2hhciA9PSAnTycpCisJICAgIC8qIE9wZW4gYWJvdmUgdGhlIGZpcnN0IGxpbmUgb2YgYSBmb2xkZWQgc2VxdWVuY2Ugb2YgbGluZXMgKi8KKwkgICAgKHZvaWQpaGFzRm9sZGluZyhjdXJ3aW4tPndfY3Vyc29yLmxudW0sCisJCQkJCQkmY3Vyd2luLT53X2N1cnNvci5sbnVtLCBOVUxMKTsKKwllbHNlCisJICAgIC8qIE9wZW4gYmVsb3cgdGhlIGxhc3QgbGluZSBvZiBhIGZvbGRlZCBzZXF1ZW5jZSBvZiBsaW5lcyAqLworCSAgICAodm9pZCloYXNGb2xkaW5nKGN1cndpbi0+d19jdXJzb3IubG51bSwKKwkJCQkJCU5VTEwsICZjdXJ3aW4tPndfY3Vyc29yLmxudW0pOworI2VuZGlmCisJaWYgKHVfc2F2ZSgobGluZW5yX1QpKGN1cndpbi0+d19jdXJzb3IubG51bSAtCisJCQkJCSAgICAgICAoY2FwLT5jbWRjaGFyID09ICdPJyA/IDEgOiAwKSksCisJCSAgIChsaW5lbnJfVCkoY3Vyd2luLT53X2N1cnNvci5sbnVtICsKKwkJCQkJICAgICAgIChjYXAtPmNtZGNoYXIgPT0gJ28nID8gMSA6IDApKQorCQkgICAgICAgKSA9PSBPSworCQkmJiBvcGVuX2xpbmUoY2FwLT5jbWRjaGFyID09ICdPJyA/IEJBQ0tXQVJEIDogRk9SV0FSRCwKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisJCSAgICBoYXNfZm9ybWF0X29wdGlvbihGT19PUEVOX0NPTVMpID8gT1BFTkxJTkVfRE9fQ09NIDoKKyNlbmRpZgorCQkgICAgMCwgMCkpCisJeworCSAgICBpbnZva2VfZWRpdChjYXAsIEZBTFNFLCBjYXAtPmNtZGNoYXIsIFRSVUUpOworCX0KKyAgICB9Cit9CisKKy8qCisgKiAiLiIgY29tbWFuZDogcmVkbyBsYXN0IGNoYW5nZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9kb3QoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaWYgKCFjaGVja2NsZWFyb3BxKGNhcC0+b2FwKSkKKyAgICB7CisJLyoKKwkgKiBJZiAicmVzdGFydF9lZGl0IiBpcyBUUlVFLCB0aGUgbGFzdCBidXQgb25lIGNvbW1hbmQgaXMgcmVwZWF0ZWQKKwkgKiBpbnN0ZWFkIG9mIHRoZSBsYXN0IGNvbW1hbmQgKGluc2VydGluZyB0ZXh0KS4gVGhpcyBpcyB1c2VkIGZvcgorCSAqIENUUkwtTyA8Lj4gaW4gaW5zZXJ0IG1vZGUuCisJICovCisJaWYgKHN0YXJ0X3JlZG8oY2FwLT5jb3VudDAsIHJlc3RhcnRfZWRpdCAhPSAwICYmICFhcnJvd191c2VkKSA9PSBGQUlMKQorCSAgICBjbGVhcm9wYmVlcChjYXAtPm9hcCk7CisgICAgfQorfQorCisvKgorICogQ1RSTC1SOiB1bmRvIHVuZG8KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9yZWRvKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGlmICghY2hlY2tjbGVhcm9wcShjYXAtPm9hcCkpCisgICAgeworCXVfcmVkbygoaW50KWNhcC0+Y291bnQxKTsKKwljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKyAgICB9Cit9CisKKy8qCisgKiBIYW5kbGUgIlUiIGNvbW1hbmQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfVW5kbyhjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICAvKiBJbiBWaXN1YWwgbW9kZSBhbmQgdHlwaW5nICJnVVUiIHRyaWdnZXJzIGFuIG9wZXJhdG9yICovCisgICAgaWYgKGNhcC0+b2FwLT5vcF90eXBlID09IE9QX1VQUEVSCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkgICAgfHwgVklzdWFsX2FjdGl2ZQorI2VuZGlmCisJICAgICkKKyAgICB7CisJLyogdHJhbnNsYXRlICJnVVUiIHRvICJnVWdVIiAqLworCWNhcC0+Y21kY2hhciA9ICdnJzsKKwljYXAtPm5jaGFyID0gJ1UnOworCW52X29wZXJhdG9yKGNhcCk7CisgICAgfQorICAgIGVsc2UgaWYgKCFjaGVja2NsZWFyb3BxKGNhcC0+b2FwKSkKKyAgICB7CisJdV91bmRvbGluZSgpOworCWN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworICAgIH0KK30KKworLyoKKyAqICd+JyBjb21tYW5kOiBJZiB0aWxkZSBpcyBub3QgYW4gb3BlcmF0b3IgYW5kIFZpc3VhbCBpcyBvZmY6IHN3YXAgY2FzZSBvZiBhCisgKiBzaW5nbGUgY2hhcmFjdGVyLgorICovCisgICAgc3RhdGljIHZvaWQKK252X3RpbGRlKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGlmICghcF90bworI2lmZGVmIEZFQVRfVklTVUFMCisJICAgICYmICFWSXN1YWxfYWN0aXZlCisjZW5kaWYKKwkgICAgJiYgY2FwLT5vYXAtPm9wX3R5cGUgIT0gT1BfVElMREUpCisJbl9zd2FwY2hhcihjYXApOworICAgIGVsc2UKKwludl9vcGVyYXRvcihjYXApOworfQorCisvKgorICogSGFuZGxlIGFuIG9wZXJhdG9yIGNvbW1hbmQuCisgKiBUaGUgYWN0dWFsIHdvcmsgaXMgZG9uZSBieSBkb19wZW5kaW5nX29wZXJhdG9yKCkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfb3BlcmF0b3IoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaW50CSAgICBvcF90eXBlOworCisgICAgb3BfdHlwZSA9IGdldF9vcF90eXBlKGNhcC0+Y21kY2hhciwgY2FwLT5uY2hhcik7CisKKyAgICBpZiAob3BfdHlwZSA9PSBjYXAtPm9hcC0+b3BfdHlwZSkJICAgIC8qIGRvdWJsZSBvcGVyYXRvciB3b3JrcyBvbiBsaW5lcyAqLworCW52X2xpbmVvcChjYXApOworICAgIGVsc2UgaWYgKCFjaGVja2NsZWFyb3AoY2FwLT5vYXApKQorICAgIHsKKwljYXAtPm9hcC0+c3RhcnQgPSBjdXJ3aW4tPndfY3Vyc29yOworCWNhcC0+b2FwLT5vcF90eXBlID0gb3BfdHlwZTsKKyAgICB9Cit9CisKKy8qCisgKiBIYW5kbGUgbGluZXdpc2Ugb3BlcmF0b3IgImRkIiwgInl5IiwgZXRjLgorICoKKyAqICJfIiBpcyBpcyBhIHN0cmFuZ2UgbW90aW9uIGNvbW1hbmQgdGhhdCBoZWxwcyBtYWtlIG9wZXJhdG9ycyBtb3JlIGxvZ2ljYWwuCisgKiBJdCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCwgYnV0IG5vdCBkb2N1bWVudGVkIGluIHRoZSByZWFsIFZpLiAgVGhpcyBtb3Rpb24KKyAqIGNvbW1hbmQgYWN0dWFsbHkgcmVmZXJzIHRvICJ0aGUgY3VycmVudCBsaW5lIi4gIENvbW1hbmRzIGxpa2UgImRkIiBhbmQgInl5IgorICogYXJlIHJlYWxseSBhbiBhbHRlcm5hdGUgZm9ybSBvZiAiZF8iIGFuZCAieV8iLiAgSXQgZG9lcyBhY2NlcHQgYSBjb3VudCwgc28KKyAqICJkM18iIHdvcmtzIHRvIGRlbGV0ZSAzIGxpbmVzLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2xpbmVvcChjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBjYXAtPm9hcC0+bW90aW9uX3R5cGUgPSBNTElORTsKKyAgICBpZiAoY3Vyc29yX2Rvd24oY2FwLT5jb3VudDEgLSAxTCwgY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfTk9QKSA9PSBGQUlMKQorCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyAgICBlbHNlIGlmICggIGNhcC0+b2FwLT5vcF90eXBlID09IE9QX0RFTEVURQorCSAgICB8fCBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9MU0hJRlQKKwkgICAgfHwgY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfUlNISUZUKQorCWJlZ2lubGluZShCTF9TT0wgfCBCTF9GSVgpOworICAgIGVsc2UgaWYgKGNhcC0+b2FwLT5vcF90eXBlICE9IE9QX1lBTkspCS8qICdZJyBkb2VzIG5vdCBtb3ZlIGN1cnNvciAqLworCWJlZ2lubGluZShCTF9XSElURSB8IEJMX0ZJWCk7Cit9CisKKy8qCisgKiA8SG9tZT4gY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9ob21lKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGNhcC0+Y291bnQwID0gMTsKKyAgICBudl9waXBlKGNhcCk7Cit9CisKKy8qCisgKiAifCIgY29tbWFuZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9waXBlKGNhcCkKKyAgICBjbWRhcmdfVCAqY2FwOworeworICAgIGNhcC0+b2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworICAgIGNhcC0+b2FwLT5pbmNsdXNpdmUgPSBGQUxTRTsKKyAgICBiZWdpbmxpbmUoMCk7CisgICAgaWYgKGNhcC0+Y291bnQwID4gMCkKKyAgICB7CisJY29sYWR2YW5jZSgoY29sbnJfVCkoY2FwLT5jb3VudDAgLSAxKSk7CisJY3Vyd2luLT53X2N1cnN3YW50ID0gKGNvbG5yX1QpKGNhcC0+Y291bnQwIC0gMSk7CisgICAgfQorICAgIGVsc2UKKwljdXJ3aW4tPndfY3Vyc3dhbnQgPSAwOworICAgIC8qIGtlZXAgY3Vyc3dhbnQgYXQgdGhlIGNvbHVtbiB3aGVyZSB3ZSB3YW50ZWQgdG8gZ28sIG5vdCB3aGVyZQorICAgICAgIHdlIGVuZGVkOyBkaWZmZXJzIGlmIGxpbmUgaXMgdG9vIHNob3J0ICovCisgICAgY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IEZBTFNFOworfQorCisvKgorICogSGFuZGxlIGJhY2std29yZCBjb21tYW5kICJiIiBhbmQgIkIiLgorICogY2FwLT5hcmcgaXMgMSBmb3IgIkIiCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfYmNrX3dvcmQoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgY2FwLT5vYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisgICAgY2FwLT5vYXAtPmluY2x1c2l2ZSA9IEZBTFNFOworICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworICAgIGlmIChiY2tfd29yZChjYXAtPmNvdW50MSwgY2FwLT5hcmcsIEZBTFNFKSA9PSBGQUlMKQorCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBlbHNlIGlmICgoZmRvX2ZsYWdzICYgRkRPX0hPUikgJiYgS2V5VHlwZWQgJiYgY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfTk9QKQorCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKK30KKworLyoKKyAqIEhhbmRsZSB3b3JkIG1vdGlvbiBjb21tYW5kcyAiZSIsICJFIiwgInciIGFuZCAiVyIuCisgKiBjYXAtPmFyZyBpcyBUUlVFIGZvciAiRSIgYW5kICJXIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl93b3JkY21kKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGludAkJbjsKKyAgICBpbnQJCXdvcmRfZW5kOworICAgIGludAkJZmxhZyA9IEZBTFNFOworCisgICAgLyoKKyAgICAgKiBTZXQgaW5jbHVzaXZlIGZvciB0aGUgIkUiIGFuZCAiZSIgY29tbWFuZC4KKyAgICAgKi8KKyAgICBpZiAoY2FwLT5jbWRjaGFyID09ICdlJyB8fCBjYXAtPmNtZGNoYXIgPT0gJ0UnKQorCXdvcmRfZW5kID0gVFJVRTsKKyAgICBlbHNlCisJd29yZF9lbmQgPSBGQUxTRTsKKyAgICBjYXAtPm9hcC0+aW5jbHVzaXZlID0gd29yZF9lbmQ7CisKKyAgICAvKgorICAgICAqICJjdyIgYW5kICJjVyIgYXJlIGEgc3BlY2lhbCBjYXNlLgorICAgICAqLworICAgIGlmICghd29yZF9lbmQgJiYgY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfQ0hBTkdFKQorICAgIHsKKwluID0gZ2NoYXJfY3Vyc29yKCk7CisJaWYgKG4gIT0gTlVMKQkJCS8qIG5vdCBhbiBlbXB0eSBsaW5lICovCisJeworCSAgICBpZiAodmltX2lzd2hpdGUobikpCisJICAgIHsKKwkJLyoKKwkJICogUmVwcm9kdWNlIGEgZnVubnkgVmkgYmVoYXZpb3VyOiAiY3ciIG9uIGEgYmxhbmsgb25seQorCQkgKiBjaGFuZ2VzIG9uZSBjaGFyYWN0ZXIsIG5vdCBhbGwgYmxhbmtzIHVudGlsIHRoZSBzdGFydCBvZgorCQkgKiB0aGUgbmV4dCB3b3JkLiAgT25seSBkbyB0aGlzIHdoZW4gdGhlICd3JyBmbGFnIGlzIGluY2x1ZGVkCisJCSAqIGluICdjcG9wdGlvbnMnLgorCQkgKi8KKwkJaWYgKGNhcC0+Y291bnQxID09IDEgJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0NXKSAhPSBOVUxMKQorCQl7CisJCSAgICBjYXAtPm9hcC0+aW5jbHVzaXZlID0gVFJVRTsKKwkJICAgIGNhcC0+b2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworCQkgICAgcmV0dXJuOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qCisJCSAqIFRoaXMgaXMgYSBsaXR0bGUgc3RyYW5nZS4gVG8gbWF0Y2ggd2hhdCB0aGUgcmVhbCBWaSBkb2VzLAorCQkgKiB3ZSBlZmZlY3RpdmVseSBtYXAgJ2N3JyB0byAnY2UnLCBhbmQgJ2NXJyB0byAnY0UnLCBwcm92aWRlZAorCQkgKiB0aGF0IHdlIGFyZSBub3Qgb24gYSBzcGFjZSBvciBhIFRBQi4gIFRoaXMgc2VlbXMgaW1wb2xpdGUKKwkJICogYXQgZmlyc3QsIGJ1dCBpdCdzIHJlYWxseSBtb3JlIHdoYXQgd2UgbWVhbiB3aGVuIHdlIHNheQorCQkgKiAnY3cnLgorCQkgKiBBbm90aGVyIHN0cmFuZ2VuZXNzOiBXaGVuIHN0YW5kaW5nIG9uIHRoZSBlbmQgb2YgYSB3b3JkCisJCSAqICJjZSIgd2lsbCBjaGFuZ2UgdW50aWwgdGhlIGVuZCBvZiB0aGUgbmV4dCB3b3JkdCwgYnV0ICJjdyIKKwkJICogd2lsbCBjaGFuZ2Ugb25seSBvbmUgY2hhcmFjdGVyISBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZworCQkgKiBmbGFnLgorCQkgKi8KKwkJY2FwLT5vYXAtPmluY2x1c2l2ZSA9IFRSVUU7CisJCXdvcmRfZW5kID0gVFJVRTsKKwkJZmxhZyA9IFRSVUU7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgY2FwLT5vYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisgICAgY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisgICAgaWYgKHdvcmRfZW5kKQorCW4gPSBlbmRfd29yZChjYXAtPmNvdW50MSwgY2FwLT5hcmcsIGZsYWcsIEZBTFNFKTsKKyAgICBlbHNlCisJbiA9IGZ3ZF93b3JkKGNhcC0+Y291bnQxLCBjYXAtPmFyZywgY2FwLT5vYXAtPm9wX3R5cGUgIT0gT1BfTk9QKTsKKworICAgIC8qIERvbid0IGxlYXZlIHRoZSBjdXJzb3Igb24gdGhlIE5VTCBwYXN0IGEgbGluZSAqLworICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCAmJiBnY2hhcl9jdXJzb3IoKSA9PSBOVUwpCisgICAgeworCS0tY3Vyd2luLT53X2N1cnNvci5jb2w7CisJY2FwLT5vYXAtPmluY2x1c2l2ZSA9IFRSVUU7CisgICAgfQorCisgICAgaWYgKG4gPT0gRkFJTCAmJiBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApCisJY2xlYXJvcGJlZXAoY2FwLT5vYXApOworICAgIGVsc2UKKyAgICB7CisjaWZkZWYgRkVBVF9WSVNVQUwKKwlhZGp1c3RfZm9yX3NlbChjYXApOworI2VuZGlmCisjaWZkZWYgRkVBVF9GT0xESU5HCisJaWYgKChmZG9fZmxhZ3MgJiBGRE9fSE9SKSAmJiBLZXlUeXBlZCAmJiBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApCisJICAgIGZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKKyAgICB9Cit9CisKKy8qCisgKiAiMCIgYW5kICJeIiBjb21tYW5kcy4KKyAqIGNhcC0+YXJnIGlzIHRoZSBhcmd1bWVudCBmb3IgYmVnaW5saW5lKCkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfYmVnaW5saW5lKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGNhcC0+b2FwLT5tb3Rpb25fdHlwZSA9IE1DSEFSOworICAgIGNhcC0+b2FwLT5pbmNsdXNpdmUgPSBGQUxTRTsKKyAgICBiZWdpbmxpbmUoY2FwLT5hcmcpOworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGlmICgoZmRvX2ZsYWdzICYgRkRPX0hPUikgJiYgS2V5VHlwZWQgJiYgY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfTk9QKQorCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKK30KKworI2lmZGVmIEZFQVRfVklTVUFMCisvKgorICogSW4gZXhjbHVzaXZlIFZpc3VhbCBtb2RlLCBtYXkgaW5jbHVkZSB0aGUgbGFzdCBjaGFyYWN0ZXIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYWRqdXN0X2Zvcl9zZWwoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaWYgKFZJc3VhbF9hY3RpdmUgJiYgY2FwLT5vYXAtPmluY2x1c2l2ZSAmJiAqcF9zZWwgPT0gJ2UnCisJICAgICYmIGdjaGFyX2N1cnNvcigpICE9IE5VTCAmJiBsdChWSXN1YWwsIGN1cndpbi0+d19jdXJzb3IpKQorICAgIHsKKyMgaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIGluY19jdXJzb3IoKTsKKwllbHNlCisjIGVuZGlmCisJICAgICsrY3Vyd2luLT53X2N1cnNvci5jb2w7CisJY2FwLT5vYXAtPmluY2x1c2l2ZSA9IEZBTFNFOworICAgIH0KK30KKworLyoKKyAqIEV4Y2x1ZGUgbGFzdCBjaGFyYWN0ZXIgYXQgZW5kIG9mIFZpc3VhbCBhcmVhIGZvciAnc2VsZWN0aW9uJyA9PSAiZXhjbHVzaXZlIi4KKyAqIFNob3VsZCBjaGVjayBWSXN1YWxfbW9kZSBiZWZvcmUgY2FsbGluZyB0aGlzLgorICogUmV0dXJucyBUUlVFIHdoZW4gYmFja2VkIHVwIHRvIHRoZSBwcmV2aW91cyBsaW5lLgorICovCisgICAgc3RhdGljIGludAordW5hZGp1c3RfZm9yX3NlbCgpCit7CisgICAgcG9zX1QJKnBwOworCisgICAgaWYgKCpwX3NlbCA9PSAnZScgJiYgIWVxdWFscG9zKFZJc3VhbCwgY3Vyd2luLT53X2N1cnNvcikpCisgICAgeworCWlmIChsdChWSXN1YWwsIGN1cndpbi0+d19jdXJzb3IpKQorCSAgICBwcCA9ICZjdXJ3aW4tPndfY3Vyc29yOworCWVsc2UKKwkgICAgcHAgPSAmVklzdWFsOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwlpZiAocHAtPmNvbGFkZCA+IDApCisJICAgIC0tcHAtPmNvbGFkZDsKKwllbHNlCisjZW5kaWYKKwlpZiAocHAtPmNvbCA+IDApCisJeworCSAgICAtLXBwLT5jb2w7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBtYl9hZGp1c3Rwb3MocHApOworI2VuZGlmCisJfQorCWVsc2UgaWYgKHBwLT5sbnVtID4gMSkKKwl7CisJICAgIC0tcHAtPmxudW07CisJICAgIHBwLT5jb2wgPSAoY29sbnJfVClTVFJMRU4obWxfZ2V0KHBwLT5sbnVtKSk7CisJICAgIHJldHVybiBUUlVFOworCX0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogU0VMRUNUIGtleSBpbiBOb3JtYWwgb3IgVmlzdWFsIG1vZGU6IGVuZCBvZiBTZWxlY3QgbW9kZSBtYXBwaW5nLgorICovCisgICAgc3RhdGljIHZvaWQKK252X3NlbGVjdChjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKwlWSXN1YWxfc2VsZWN0ID0gVFJVRTsKKyAgICBlbHNlIGlmIChWSXN1YWxfcmVzZWxlY3QpCisgICAgeworCWNhcC0+bmNoYXIgPSAndic7CSAgICAvKiBmYWtlICJndiIgY29tbWFuZCAqLworCWNhcC0+YXJnID0gVFJVRTsKKwludl9nX2NtZChjYXApOworICAgIH0KK30KKworI2VuZGlmCisKKy8qCisgKiAiRyIsICJnZyIsIENUUkwtRU5ELCBDVFJMLUhPTUUuCisgKiBjYXAtPmFyZyBpcyBUUlVFIGZvciAiRyIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfZ290byhjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBsaW5lbnJfVAlsbnVtOworCisgICAgaWYgKGNhcC0+YXJnKQorCWxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKyAgICBlbHNlCisJbG51bSA9IDFMOworICAgIGNhcC0+b2FwLT5tb3Rpb25fdHlwZSA9IE1MSU5FOworICAgIHNldHBjbWFyaygpOworCisgICAgLyogV2hlbiBhIGNvdW50IGlzIGdpdmVuLCB1c2UgaXQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBsbnVtICovCisgICAgaWYgKGNhcC0+Y291bnQwICE9IDApCisJbG51bSA9IGNhcC0+Y291bnQwOworICAgIGlmIChsbnVtIDwgMUwpCisJbG51bSA9IDFMOworICAgIGVsc2UgaWYgKGxudW0gPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwlsbnVtID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbG51bTsKKyAgICBiZWdpbmxpbmUoQkxfU09MIHwgQkxfRklYKTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBpZiAoKGZkb19mbGFncyAmIEZET19KVU1QKSAmJiBLZXlUeXBlZCAmJiBjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1ApCisJZm9sZE9wZW5DdXJzb3IoKTsKKyNlbmRpZgorfQorCisvKgorICogQ1RSTC1cIGluIE5vcm1hbCBtb2RlLgorICovCisgICAgc3RhdGljIHZvaWQKK252X25vcm1hbChjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpZiAoY2FwLT5uY2hhciA9PSBDdHJsX04gfHwgY2FwLT5uY2hhciA9PSBDdHJsX0cpCisgICAgeworCWNsZWFyb3AoY2FwLT5vYXApOworCWlmIChyZXN0YXJ0X2VkaXQgIT0gMCAmJiBwX3NtZCkKKwkgICAgY2xlYXJfY21kbGluZSA9IFRSVUU7CQkvKiB1bnNob3cgbW9kZSBsYXRlciAqLworCXJlc3RhcnRfZWRpdCA9IDA7CisjaWZkZWYgRkVBVF9DTURXSU4KKwlpZiAoY21kd2luX3R5cGUgIT0gMCkKKwkgICAgY21kd2luX3Jlc3VsdCA9IEN0cmxfQzsKKyNlbmRpZgorI2lmZGVmIEZFQVRfVklTVUFMCisJaWYgKFZJc3VhbF9hY3RpdmUpCisJeworCSAgICBlbmRfdmlzdWFsX21vZGUoKTsJCS8qIHN0b3AgVmlzdWFsICovCisJICAgIHJlZHJhd19jdXJidWZfbGF0ZXIoSU5WRVJURUQpOworCX0KKyNlbmRpZgorCS8qIENUUkwtXCBDVFJMLUcgcmVzdGFydHMgSW5zZXJ0IG1vZGUgd2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0LiAqLworCWlmIChjYXAtPm5jaGFyID09IEN0cmxfRyAmJiBwX2ltKQorCSAgICByZXN0YXJ0X2VkaXQgPSAnYSc7CisgICAgfQorICAgIGVsc2UKKwljbGVhcm9wYmVlcChjYXAtPm9hcCk7Cit9CisKKy8qCisgKiBFU0MgaW4gTm9ybWFsIG1vZGU6IGJlZXAsIGJ1dCBkb24ndCBmbHVzaCBidWZmZXJzLgorICogRG9uJ3QgZXZlbiBiZWVwIGlmIHdlIGFyZSBjYW5jZWxpbmcgYSBjb21tYW5kLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2VzYyhjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpbnQJCW5vX3JlYXNvbjsKKworICAgIG5vX3JlYXNvbiA9IChjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9OT1AKKwkJJiYgY2FwLT5vcGNvdW50ID09IDAKKwkJJiYgY2FwLT5jb3VudDAgPT0gMAorCQkmJiBjYXAtPm9hcC0+cmVnbmFtZSA9PSAwCisJCSYmICFwX2ltKTsKKworICAgIGlmIChjYXAtPmFyZykJCS8qIFRSVUUgZm9yIENUUkwtQyAqLworICAgIHsKKwlpZiAocmVzdGFydF9lZGl0ID09IDAKKyNpZmRlZiBGRUFUX0NNRFdJTgorCQkmJiBjbWR3aW5fdHlwZSA9PSAwCisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkmJiAhVklzdWFsX2FjdGl2ZQorI2VuZGlmCisJCSYmIG5vX3JlYXNvbikKKwkgICAgTVNHKF8oIlR5cGUgIDpxdWl0PEVudGVyPiAgdG8gZXhpdCBWaW0iKSk7CisKKwkvKiBEb24ndCByZXNldCAicmVzdGFydF9lZGl0IiB3aGVuICdpbnNlcnRtb2RlJyBpcyBzZXQsIGl0IHdvbid0IGJlCisJICogc2V0IGFnYWluIGJlbG93IHdoZW4gaGFsZndheSBhIG1hcHBpbmcuICovCisJaWYgKCFwX2ltKQorCSAgICByZXN0YXJ0X2VkaXQgPSAwOworI2lmZGVmIEZFQVRfQ01EV0lOCisJaWYgKGNtZHdpbl90eXBlICE9IDApCisJeworCSAgICBjbWR3aW5fcmVzdWx0ID0gS19JR05PUkU7CisJICAgIGdvdF9pbnQgPSBGQUxTRTsJLyogZG9uJ3Qgc3RvcCBleGVjdXRpbmcgYXV0b2NvbW1hbmRzIGV0IGFsLiAqLworCSAgICByZXR1cm47CisJfQorI2VuZGlmCisgICAgfQorCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKyAgICB7CisJZW5kX3Zpc3VhbF9tb2RlKCk7CS8qIHN0b3AgVmlzdWFsICovCisJY2hlY2tfY3Vyc29yX2NvbCgpOwkvKiBtYWtlIHN1cmUgY3Vyc29yIGlzIG5vdCBiZXlvbmQgRU9MICovCisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisJcmVkcmF3X2N1cmJ1Zl9sYXRlcihJTlZFUlRFRCk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCWlmIChub19yZWFzb24pCisJICAgIHZpbV9iZWVwKCk7CisgICAgY2xlYXJvcChjYXAtPm9hcCk7CisKKyAgICAvKiBBIENUUkwtQyBpcyBvZnRlbiB1c2VkIGF0IHRoZSBzdGFydCBvZiBhIG1lbnUuICBXaGVuICdpbnNlcnRtb2RlJyBpcworICAgICAqIHNldCByZXR1cm4gdG8gSW5zZXJ0IG1vZGUgYWZ0ZXJ3YXJkcy4gKi8KKyAgICBpZiAocmVzdGFydF9lZGl0ID09IDAgJiYgZ290b19pbSgpCisjaWZkZWYgRkVBVF9FWF9FWFRSQQorCSAgICAmJiBleF9ub3JtYWxfYnVzeSA9PSAwCisjZW5kaWYKKwkgICAgKQorCXJlc3RhcnRfZWRpdCA9ICdhJzsKK30KKworLyoKKyAqIEhhbmRsZSAiQSIsICJhIiwgIkkiLCAiaSIgYW5kIDxJbnNlcnQ+IGNvbW1hbmRzLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2VkaXQoY2FwKQorICAgIGNtZGFyZ19UICpjYXA7Cit7CisgICAgLyogPEluc2VydD4gaXMgZXF1YWwgdG8gImkiICovCisgICAgaWYgKGNhcC0+Y21kY2hhciA9PSBLX0lOUyB8fCBjYXAtPmNtZGNoYXIgPT0gS19LSU5TKQorCWNhcC0+Y21kY2hhciA9ICdpJzsKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgLyogaW4gVmlzdWFsIG1vZGUgIkEiIGFuZCAiSSIgYXJlIGFuIG9wZXJhdG9yICovCisgICAgaWYgKFZJc3VhbF9hY3RpdmUgJiYgKGNhcC0+Y21kY2hhciA9PSAnQScgfHwgY2FwLT5jbWRjaGFyID09ICdJJykpCisJdl92aXNvcChjYXApOworCisgICAgLyogaW4gVmlzdWFsIG1vZGUgYW5kIGFmdGVyIGFuIG9wZXJhdG9yICJhIiBhbmQgImkiIGFyZSBmb3IgdGV4dCBvYmplY3RzICovCisgICAgZWxzZQorI2VuZGlmCisJaWYgKChjYXAtPmNtZGNoYXIgPT0gJ2EnIHx8IGNhcC0+Y21kY2hhciA9PSAnaScpCisJICAgICYmIChjYXAtPm9hcC0+b3BfdHlwZSAhPSBPUF9OT1AKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQl8fCBWSXN1YWxfYWN0aXZlCisjZW5kaWYKKwkJKSkKKyAgICB7CisjaWZkZWYgRkVBVF9URVhUT0JKCisJbnZfb2JqZWN0KGNhcCk7CisjZWxzZQorCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlIGlmICghY3VyYnVmLT5iX3BfbWEgJiYgIXBfaW0pCisgICAgeworCS8qIE9ubHkgZ2l2ZSB0aGlzIGVycm9yIHdoZW4gJ2luc2VydG1vZGUnIGlzIG9mZi4gKi8KKwlFTVNHKF8oZV9tb2RpZmlhYmxlKSk7CisJY2xlYXJvcChjYXAtPm9hcCk7CisgICAgfQorICAgIGVsc2UgaWYgKCFjaGVja2NsZWFyb3BxKGNhcC0+b2FwKSkKKyAgICB7CisJc3dpdGNoIChjYXAtPmNtZGNoYXIpCisJeworCSAgICBjYXNlICdBJzoJLyogIkEicHBlbmQgYWZ0ZXIgdGhlIGxpbmUgKi8KKwkJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCQlpZiAodmVfZmxhZ3MgPT0gVkVfQUxMKQorCQl7CisJCSAgICBpbnQgc2F2ZV9TdGF0ZSA9IFN0YXRlOworCisJCSAgICAvKiBQcmV0ZW50IEluc2VydCBtb2RlIGhlcmUgdG8gYWxsb3cgdGhlIGN1cnNvciBvbiB0aGUKKwkJICAgICAqIGNoYXJhY3RlciBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUgKi8KKwkJICAgIFN0YXRlID0gSU5TRVJUOworCQkgICAgY29sYWR2YW5jZSgoY29sbnJfVClNQVhDT0wpOworCQkgICAgU3RhdGUgPSBzYXZlX1N0YXRlOworCQl9CisJCWVsc2UKKyNlbmRpZgorCQkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgKz0gKGNvbG5yX1QpU1RSTEVOKG1sX2dldF9jdXJzb3IoKSk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ0knOgkvKiAiSSJuc2VydCBiZWZvcmUgdGhlIGZpcnN0IG5vbi1ibGFuayAqLworCQliZWdpbmxpbmUoQkxfV0hJVEUpOworCQlicmVhazsKKworCSAgICBjYXNlICdhJzoJLyogImEicHBlbmQgaXMgbGlrZSAiaSJuc2VydCBvbiB0aGUgbmV4dCBjaGFyYWN0ZXIuICovCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCQkvKiBpbmNyZW1lbnQgY29sYWRkIHdoZW4gaW4gdmlydHVhbCBzcGFjZSwgaW5jcmVtZW50IHRoZQorCQkgKiBjb2x1bW4gb3RoZXJ3aXNlLCBhbHNvIHRvIGFwcGVuZCBhZnRlciBhbiB1bnByaW50YWJsZSBjaGFyICovCisJCWlmICh2aXJ0dWFsX2FjdGl2ZSgpCisJCQkmJiAoY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPiAwCisJCQkgICAgfHwgKm1sX2dldF9jdXJzb3IoKSA9PSBOVUwKKwkJCSAgICB8fCAqbWxfZ2V0X2N1cnNvcigpID09IFRBQikpCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCsrOworCQllbHNlCisjZW5kaWYKKwkJaWYgKCptbF9nZXRfY3Vyc29yKCkgIT0gTlVMKQorCQkgICAgaW5jX2N1cnNvcigpOworCQlicmVhazsKKwl9CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJaWYgKGN1cndpbi0+d19jdXJzb3IuY29sYWRkICYmIGNhcC0+Y21kY2hhciAhPSAnQScpCisJeworCSAgICBpbnQgc2F2ZV9TdGF0ZSA9IFN0YXRlOworCisJICAgIC8qIFByZXRlbnQgSW5zZXJ0IG1vZGUgaGVyZSB0byBhbGxvdyB0aGUgY3Vyc29yIG9uIHRoZQorCSAgICAgKiBjaGFyYWN0ZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBsaW5lICovCisJICAgIFN0YXRlID0gSU5TRVJUOworCSAgICBjb2xhZHZhbmNlKGdldHZpc2NvbCgpKTsKKwkgICAgU3RhdGUgPSBzYXZlX1N0YXRlOworCX0KKyNlbmRpZgorCisJaW52b2tlX2VkaXQoY2FwLCBGQUxTRSwgY2FwLT5jbWRjaGFyLCBGQUxTRSk7CisgICAgfQorfQorCisvKgorICogSW52b2tlIGVkaXQoKSBhbmQgdGFrZSBjYXJlIG9mICJyZXN0YXJ0X2VkaXQiIGFuZCB0aGUgcmV0dXJuIHZhbHVlLgorICovCisgICAgc3RhdGljIHZvaWQKK2ludm9rZV9lZGl0KGNhcCwgcmVwbCwgY21kLCBzdGFydGxuKQorICAgIGNtZGFyZ19UCSpjYXA7CisgICAgaW50CQlyZXBsOwkJLyogInIiIG9yICJnciIgY29tbWFuZCAqLworICAgIGludAkJY21kOworICAgIGludAkJc3RhcnRsbjsKK3sKKyAgICBpbnQJCXJlc3RhcnRfZWRpdF9zYXZlID0gMDsKKworICAgIC8qIENvbXBsaWNhdGVkOiBXaGVuIHRoZSB1c2VyIHR5cGVzICJhPEMtTz5hIiB3ZSBkb24ndCB3YW50IHRvIGRvIEluc2VydAorICAgICAqIG1vZGUgcmVjdXJzaXZlbHkuICBCdXQgd2hlbiBkb2luZyAiYTxDLU8+LiIgb3IgImE8Qy1PPnJ4IiB3ZSBkbyBhbGxvdworICAgICAqIGl0LiAqLworICAgIGlmIChyZXBsIHx8ICFzdHVmZl9lbXB0eSgpKQorCXJlc3RhcnRfZWRpdF9zYXZlID0gcmVzdGFydF9lZGl0OworICAgIGVsc2UKKwlyZXN0YXJ0X2VkaXRfc2F2ZSA9IDA7CisKKyAgICAvKiBBbHdheXMgcmVzZXQgInJlc3RhcnRfZWRpdCIsIHRoaXMgaXMgbm90IGEgcmVzdGFydGVkIGVkaXQuICovCisgICAgcmVzdGFydF9lZGl0ID0gMDsKKworICAgIGlmIChlZGl0KGNtZCwgc3RhcnRsbiwgY2FwLT5jb3VudDEpKQorCWNhcC0+cmV0dmFsIHw9IENBX0NPTU1BTkRfQlVTWTsKKworICAgIGlmIChyZXN0YXJ0X2VkaXQgPT0gMCkKKwlyZXN0YXJ0X2VkaXQgPSByZXN0YXJ0X2VkaXRfc2F2ZTsKK30KKworI2lmZGVmIEZFQVRfVEVYVE9CSgorLyoKKyAqICJhIiBvciAiaSIgd2hpbGUgYW4gb3BlcmF0b3IgaXMgcGVuZGluZyBvciBpbiBWaXN1YWwgbW9kZTogb2JqZWN0IG1vdGlvbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9vYmplY3QoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgaW50CQlmbGFnOworICAgIGludAkJaW5jbHVkZTsKKyAgICBjaGFyX3UJKm1wc19zYXZlOworCisgICAgaWYgKGNhcC0+Y21kY2hhciA9PSAnaScpCisJaW5jbHVkZSA9IEZBTFNFOyAgICAvKiAiaXgiID0gaW5uZXIgb2JqZWN0OiBleGNsdWRlIHdoaXRlIHNwYWNlICovCisgICAgZWxzZQorCWluY2x1ZGUgPSBUUlVFOwkgICAgLyogImF4IiA9IGFuIG9iamVjdDogaW5jbHVkZSB3aGl0ZSBzcGFjZSAqLworCisgICAgLyogTWFrZSBzdXJlICgpLCBbXSwge30gYW5kIDw+IGFyZSBpbiAnbWF0Y2hwYWlycycgKi8KKyAgICBtcHNfc2F2ZSA9IGN1cmJ1Zi0+Yl9wX21wczsKKyAgICBjdXJidWYtPmJfcF9tcHMgPSAoY2hhcl91ICopIig6KSx7On0sWzpdLDw6PiI7CisKKyAgICBzd2l0Y2ggKGNhcC0+bmNoYXIpCisgICAgeworCWNhc2UgJ3cnOiAvKiAiYXciID0gYSB3b3JkICovCisJCWZsYWcgPSBjdXJyZW50X3dvcmQoY2FwLT5vYXAsIGNhcC0+Y291bnQxLCBpbmNsdWRlLCBGQUxTRSk7CisJCWJyZWFrOworCWNhc2UgJ1cnOiAvKiAiYVciID0gYSBXT1JEICovCisJCWZsYWcgPSBjdXJyZW50X3dvcmQoY2FwLT5vYXAsIGNhcC0+Y291bnQxLCBpbmNsdWRlLCBUUlVFKTsKKwkJYnJlYWs7CisJY2FzZSAnYic6IC8qICJhYiIgPSBhIGJyYWNlcyBibG9jayAqLworCWNhc2UgJygnOgorCWNhc2UgJyknOgorCQlmbGFnID0gY3VycmVudF9ibG9jayhjYXAtPm9hcCwgY2FwLT5jb3VudDEsIGluY2x1ZGUsICcoJywgJyknKTsKKwkJYnJlYWs7CisJY2FzZSAnQic6IC8qICJhQiIgPSBhIEJyYWNrZXRzIGJsb2NrICovCisJY2FzZSAneyc6CisJY2FzZSAnfSc6CisJCWZsYWcgPSBjdXJyZW50X2Jsb2NrKGNhcC0+b2FwLCBjYXAtPmNvdW50MSwgaW5jbHVkZSwgJ3snLCAnfScpOworCQlicmVhazsKKwljYXNlICdbJzogLyogImFbIiA9IGEgW10gYmxvY2sgKi8KKwljYXNlICddJzoKKwkJZmxhZyA9IGN1cnJlbnRfYmxvY2soY2FwLT5vYXAsIGNhcC0+Y291bnQxLCBpbmNsdWRlLCAnWycsICddJyk7CisJCWJyZWFrOworCWNhc2UgJzwnOiAvKiAiYTwiID0gYSA8PiBibG9jayAqLworCWNhc2UgJz4nOgorCQlmbGFnID0gY3VycmVudF9ibG9jayhjYXAtPm9hcCwgY2FwLT5jb3VudDEsIGluY2x1ZGUsICc8JywgJz4nKTsKKwkJYnJlYWs7CisJY2FzZSAncCc6IC8qICJhcCIgPSBhIHBhcmFncmFwaCAqLworCQlmbGFnID0gY3VycmVudF9wYXIoY2FwLT5vYXAsIGNhcC0+Y291bnQxLCBpbmNsdWRlLCAncCcpOworCQlicmVhazsKKwljYXNlICdzJzogLyogImFzIiA9IGEgc2VudGVuY2UgKi8KKwkJZmxhZyA9IGN1cnJlbnRfc2VudChjYXAtPm9hcCwgY2FwLT5jb3VudDEsIGluY2x1ZGUpOworCQlicmVhazsKKyNpZiAwCS8qIFRPRE8gKi8KKwljYXNlICdTJzogLyogImFTIiA9IGEgc2VjdGlvbiAqLworCWNhc2UgJ2YnOiAvKiAiYWYiID0gYSBmaWxlbmFtZSAqLworCWNhc2UgJ3UnOiAvKiAiYXUiID0gYSBVUkwgKi8KKyNlbmRpZgorCWRlZmF1bHQ6CisJCWZsYWcgPSBGQUlMOworCQlicmVhazsKKyAgICB9CisKKyAgICBjdXJidWYtPmJfcF9tcHMgPSBtcHNfc2F2ZTsKKyAgICBpZiAoZmxhZyA9PSBGQUlMKQorCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyAgICBhZGp1c3RfY3Vyc29yX2NvbCgpOworICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworfQorI2VuZGlmCisKKy8qCisgKiAicSIgY29tbWFuZDogU3RhcnQvc3RvcCByZWNvcmRpbmcuCisgKiAicToiLCAicS8iLCAicT8iOiBlZGl0IGNvbW1hbmQtbGluZSBpbiBjb21tYW5kLWxpbmUgd2luZG93LgorICovCisgICAgc3RhdGljIHZvaWQKK252X3JlY29yZChjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBpZiAoY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfRk9STUFUKQorICAgIHsKKwkvKiAiZ3FxIiBpcyB0aGUgc2FtZSBhcyAiZ3FncSI6IGZvcm1hdCBsaW5lICovCisJY2FwLT5jbWRjaGFyID0gJ2cnOworCWNhcC0+bmNoYXIgPSAncSc7CisJbnZfb3BlcmF0b3IoY2FwKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIWNoZWNrY2xlYXJvcChjYXAtPm9hcCkpCisgICAgeworI2lmZGVmIEZFQVRfQ01EV0lOCisJaWYgKGNhcC0+bmNoYXIgPT0gJzonIHx8IGNhcC0+bmNoYXIgPT0gJy8nIHx8IGNhcC0+bmNoYXIgPT0gJz8nKQorCXsKKwkgICAgc3R1ZmZjaGFyUmVhZGJ1ZmYoY2FwLT5uY2hhcik7CisJICAgIHN0dWZmY2hhclJlYWRidWZmKEtfQ01EV0lOKTsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgIC8qIChzdG9wKSByZWNvcmRpbmcgaW50byBhIG5hbWVkIHJlZ2lzdGVyLCB1bmxlc3MgZXhlY3V0aW5nIGEKKwkgICAgICogcmVnaXN0ZXIgKi8KKwkgICAgaWYgKCFFeGVjX3JlZyAmJiBkb19yZWNvcmQoY2FwLT5uY2hhcikgPT0gRkFJTCkKKwkJY2xlYXJvcGJlZXAoY2FwLT5vYXApOworICAgIH0KK30KKworLyoKKyAqIEhhbmRsZSB0aGUgIkByIiBjb21tYW5kLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2F0KGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGlmIChjaGVja2NsZWFyb3AoY2FwLT5vYXApKQorCXJldHVybjsKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBpZiAoY2FwLT5uY2hhciA9PSAnPScpCisgICAgeworCWlmIChnZXRfZXhwcl9yZWdpc3RlcigpID09IE5VTCkKKwkgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIHdoaWxlIChjYXAtPmNvdW50MS0tICYmICFnb3RfaW50KQorICAgIHsKKwlpZiAoZG9fZXhlY3JlZyhjYXAtPm5jaGFyLCBGQUxTRSwgRkFMU0UpID09IEZBSUwpCisJeworCSAgICBjbGVhcm9wYmVlcChjYXAtPm9hcCk7CisJICAgIGJyZWFrOworCX0KKwlsaW5lX2JyZWFrY2hlY2soKTsKKyAgICB9Cit9CisKKy8qCisgKiBIYW5kbGUgdGhlIENUUkwtVSBhbmQgQ1RSTC1EIGNvbW1hbmRzLgorICovCisgICAgc3RhdGljIHZvaWQKK252X2hhbGZwYWdlKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIGlmICgoY2FwLT5jbWRjaGFyID09IEN0cmxfVSAmJiBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gMSkKKwkgICAgfHwgKGNhcC0+Y21kY2hhciA9PSBDdHJsX0QKKwkJJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtID09IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KSkKKwljbGVhcm9wYmVlcChjYXAtPm9hcCk7CisgICAgZWxzZSBpZiAoIWNoZWNrY2xlYXJvcChjYXAtPm9hcCkpCisJaGFsZnBhZ2UoY2FwLT5jbWRjaGFyID09IEN0cmxfRCwgY2FwLT5jb3VudDApOworfQorCisvKgorICogSGFuZGxlICJKIiBvciAiZ0oiIGNvbW1hbmQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfam9pbihjYXApCisgICAgY21kYXJnX1QgKmNhcDsKK3sKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmIChWSXN1YWxfYWN0aXZlKQkvKiBqb2luIHRoZSB2aXN1YWwgbGluZXMgKi8KKwludl9vcGVyYXRvcihjYXApOworICAgIGVsc2UKKyNlbmRpZgorCWlmICghY2hlY2tjbGVhcm9wKGNhcC0+b2FwKSkKKyAgICB7CisJaWYgKGNhcC0+Y291bnQwIDw9IDEpCisJICAgIGNhcC0+Y291bnQwID0gMjsJICAgIC8qIGRlZmF1bHQgZm9yIGpvaW4gaXMgdHdvIGxpbmVzISAqLworCWlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gKyBjYXAtPmNvdW50MCAtIDEgPgorCQkJCQkJICAgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJICAgIGNsZWFyb3BiZWVwKGNhcC0+b2FwKTsgIC8qIGJleW9uZCBsYXN0IGxpbmUgKi8KKwllbHNlCisJeworCSAgICBwcmVwX3JlZG8oY2FwLT5vYXAtPnJlZ25hbWUsIGNhcC0+Y291bnQwLAorCQkJIE5VTCwgY2FwLT5jbWRjaGFyLCBOVUwsIE5VTCwgY2FwLT5uY2hhcik7CisJICAgIGRvX2RvX2pvaW4oY2FwLT5jb3VudDAsIGNhcC0+bmNoYXIgPT0gTlVMKTsKKwl9CisgICAgfQorfQorCisvKgorICogIlAiLCAiZ1AiLCAicCIgYW5kICJncCIgY29tbWFuZHMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbnZfcHV0KGNhcCkKKyAgICBjbWRhcmdfVCAgKmNhcDsKK3sKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGludAkJcmVnbmFtZSA9IDA7CisgICAgdm9pZAkqcmVnMSA9IE5VTEwsICpyZWcyID0gTlVMTDsKKyNlbmRpZgorICAgIGludAkJZGlyOworICAgIGludAkJZmxhZ3MgPSAwOworCisgICAgaWYgKGNhcC0+b2FwLT5vcF90eXBlICE9IE9QX05PUCkKKyAgICB7CisjaWZkZWYgRkVBVF9ESUZGCisJLyogImRwIiBpcyAiOmRpZmZwdXQiICovCisJaWYgKGNhcC0+b2FwLT5vcF90eXBlID09IE9QX0RFTEVURSAmJiBjYXAtPmNtZGNoYXIgPT0gJ3AnKQorCXsKKwkgICAgY2xlYXJvcChjYXAtPm9hcCk7CisJICAgIG52X2RpZmZnZXRwdXQoVFJVRSk7CisJfQorCWVsc2UKKyNlbmRpZgorCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlkaXIgPSAoY2FwLT5jbWRjaGFyID09ICdQJworCQl8fCAoY2FwLT5jbWRjaGFyID09ICdnJyAmJiBjYXAtPm5jaGFyID09ICdQJykpCisJCQkJCQkJID8gQkFDS1dBUkQgOiBGT1JXQVJEOworCXByZXBfcmVkb19jbWQoY2FwKTsKKwlpZiAoY2FwLT5jbWRjaGFyID09ICdnJykKKwkgICAgZmxhZ3MgfD0gUFVUX0NVUlNFTkQ7CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCWlmIChWSXN1YWxfYWN0aXZlKQorCXsKKwkgICAgLyogUHV0dGluZyBpbiBWaXN1YWwgbW9kZTogVGhlIHB1dCB0ZXh0IHJlcGxhY2VzIHRoZSBzZWxlY3RlZAorCSAgICAgKiB0ZXh0LiAgRmlyc3QgZGVsZXRlIHRoZSBzZWxlY3RlZCB0ZXh0LCB0aGVuIHB1dCB0aGUgbmV3IHRleHQuCisJICAgICAqIE5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgcmVnaXN0ZXJzIHRoYXQgdGhlIGRlbGV0ZQorCSAgICAgKiBvdmVyd3JpdGVzIGlmIHRoZSBvbGQgY29udGVudHMgaXMgYmVpbmcgcHV0LgorCSAgICAgKi8KKwkgICAgcmVnbmFtZSA9IGNhcC0+b2FwLT5yZWduYW1lOworIyBpZmRlZiBGRUFUX0NMSVBCT0FSRAorCSAgICBhZGp1c3RfY2xpcF9yZWcoJnJlZ25hbWUpOworIyBlbmRpZgorCSAgICBpZiAocmVnbmFtZSA9PSAwIHx8IFZJTV9JU0RJR0lUKHJlZ25hbWUpCisjIGlmZGVmIEZFQVRfQ0xJUEJPQVJECisJCSAgICB8fCAoY2xpcF91bm5hbWVkICYmIChyZWduYW1lID09ICcqJyB8fCByZWduYW1lID09ICcrJykpCisjIGVuZGlmCisKKwkJICAgICkKKwkgICAgeworCQkvKiB0aGUgZGVsZXRlIGlzIGdvaW5nIHRvIG92ZXJ3cml0ZSB0aGUgcmVnaXN0ZXIgd2Ugd2FudCB0bworCQkgKiBwdXQsIHNhdmUgaXQgZmlyc3QuICovCisJCXJlZzEgPSBnZXRfcmVnaXN0ZXIocmVnbmFtZSwgVFJVRSk7CisJICAgIH0KKworCSAgICAvKiBOb3cgZGVsZXRlIHRoZSBzZWxlY3RlZCB0ZXh0LiAqLworCSAgICBjYXAtPmNtZGNoYXIgPSAnZCc7CisJICAgIGNhcC0+bmNoYXIgPSBOVUw7CisJICAgIGNhcC0+b2FwLT5yZWduYW1lID0gTlVMOworCSAgICBudl9vcGVyYXRvcihjYXApOworCSAgICBkb19wZW5kaW5nX29wZXJhdG9yKGNhcCwgMCwgRkFMU0UpOworCisJICAgIC8qIGRlbGV0ZSBQVVRfTElORV9CQUNLV0FSRDsgKi8KKwkgICAgY2FwLT5vYXAtPnJlZ25hbWUgPSByZWduYW1lOworCisJICAgIGlmIChyZWcxICE9IE5VTEwpCisJICAgIHsKKwkJLyogRGVsZXRlIHByb2JhYmx5IGNoYW5nZWQgdGhlIHJlZ2lzdGVyIHdlIHdhbnQgdG8gcHV0LCBzYXZlCisJCSAqIGl0IGZpcnN0LiBUaGVuIHB1dCBiYWNrIHdoYXQgd2FzIHRoZXJlIGJlZm9yZSB0aGUgZGVsZXRlLiAqLworCQlyZWcyID0gZ2V0X3JlZ2lzdGVyKHJlZ25hbWUsIEZBTFNFKTsKKwkJcHV0X3JlZ2lzdGVyKHJlZ25hbWUsIHJlZzEpOworCSAgICB9CisKKwkgICAgLyogV2hlbiBkZWxldGVkIGEgbGluZXdpc2UgVmlzdWFsIGFyZWEsIHB1dCB0aGUgcmVnaXN0ZXIgYXMKKwkgICAgICogbGluZXMgdG8gYXZvaWQgaXQgam9pbmVkIHdpdGggdGhlIG5leHQgbGluZS4gIFdoZW4gZGVsZXRpb24gd2FzCisJICAgICAqIGNoYXJhY3Rlcndpc2UsIHNwbGl0IGEgbGluZSB3aGVuIHB1dHRpbmcgbGluZXMuICovCisJICAgIGlmIChWSXN1YWxfbW9kZSA9PSAnVicpCisJCWZsYWdzIHw9IFBVVF9MSU5FOworCSAgICBlbHNlIGlmIChWSXN1YWxfbW9kZSA9PSAndicpCisJCWZsYWdzIHw9IFBVVF9MSU5FX1NQTElUOworCSAgICBpZiAoVklzdWFsX21vZGUgPT0gQ3RybF9WICYmIGRpciA9PSBGT1JXQVJEKQorCQlmbGFncyB8PSBQVVRfTElORV9GT1JXQVJEOworCSAgICBkaXIgPSBCQUNLV0FSRDsKKwkgICAgaWYgKChWSXN1YWxfbW9kZSAhPSAnVicKKwkJCSYmIGN1cndpbi0+d19jdXJzb3IuY29sIDwgY3VyYnVmLT5iX29wX3N0YXJ0LmNvbCkKKwkJICAgIHx8IChWSXN1YWxfbW9kZSA9PSAnVicKKwkJCSYmIGN1cndpbi0+d19jdXJzb3IubG51bSA8IGN1cmJ1Zi0+Yl9vcF9zdGFydC5sbnVtKSkKKwkJLyogY3Vyc29yIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgb3IgZW5kIG9mIGZpbGUsIHB1dAorCQkgKiBmb3J3YXJkLiAqLworCQlkaXIgPSBGT1JXQVJEOworCX0KKyNlbmRpZgorCWRvX3B1dChjYXAtPm9hcC0+cmVnbmFtZSwgZGlyLCBjYXAtPmNvdW50MSwgZmxhZ3MpOworCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkvKiBJZiBhIHJlZ2lzdGVyIHdhcyBzYXZlZCwgcHV0IGl0IGJhY2sgbm93LiAqLworCWlmIChyZWcyICE9IE5VTEwpCisJICAgIHB1dF9yZWdpc3RlcihyZWduYW1lLCByZWcyKTsKKyNlbmRpZgorCWF1dG9fZm9ybWF0KEZBTFNFLCBUUlVFKTsKKyAgICB9Cit9CisKKy8qCisgKiAibyIgYW5kICJPIiBjb21tYW5kcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitudl9vcGVuKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworI2lmZGVmIEZFQVRfRElGRgorICAgIC8qICJkbyIgaXMgIjpkaWZmZ2V0IiAqLworICAgIGlmIChjYXAtPm9hcC0+b3BfdHlwZSA9PSBPUF9ERUxFVEUgJiYgY2FwLT5jbWRjaGFyID09ICdvJykKKyAgICB7CisJY2xlYXJvcChjYXAtPm9hcCk7CisJbnZfZGlmZmdldHB1dChGQUxTRSk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKFZJc3VhbF9hY3RpdmUpICAvKiBzd2l0Y2ggc3RhcnQgYW5kIGVuZCBvZiB2aXN1YWwgKi8KKwl2X3N3YXBfY29ybmVycyhjYXAtPmNtZGNoYXIpOworICAgIGVsc2UKKyNlbmRpZgorCW5fb3BlbmNtZChjYXApOworfQorCisjaWZkZWYgRkVBVF9TTklGRgorLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK252X3NuaWZmKGNhcCkKKyAgICBjbWRhcmdfVAkqY2FwOworeworICAgIFByb2Nlc3NTbmlmZlJlcXVlc3RzKCk7Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIHN0YXRpYyB2b2lkCitudl9uYmNtZChjYXApCisgICAgY21kYXJnX1QJKmNhcDsKK3sKKyAgICBuZXRiZWFuc19rZXljb21tYW5kKGNhcC0+bmNoYXIpOworfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0RORAorLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK252X2Ryb3AoY2FwKQorICAgIGNtZGFyZ19UCSpjYXA7Cit7CisgICAgZG9fcHV0KCd+JywgQkFDS1dBUkQsIDFMLCBQVVRfQ1VSU0VORCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9vcHMuYyBiL3NyYy9vcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjQwYzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL29wcy5jCkBAIC0wLDAgKzEsNjExNCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogb3BzLmM6IGltcGxlbWVudGF0aW9uIG9mIHZhcmlvdXMgb3BlcmF0b3JzOiBvcF9zaGlmdCwgb3BfZGVsZXRlLCBvcF90aWxkZSwKKyAqCSAgb3BfY2hhbmdlLCBvcF95YW5rLCBkb19wdXQsIGRvX2pvaW4KKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKy8qCisgKiBOdW1iZXIgb2YgcmVnaXN0ZXJzLgorICoJMCA9IHVubmFtZWQgcmVnaXN0ZXIsIGZvciBub3JtYWwgeWFua3MgYW5kIHB1dHMKKyAqICAgMS4uOSA9IHJlZ2lzdGVycyAnMScgdG8gJzknLCBmb3IgZGVsZXRlcworICogMTAuLjM1ID0gcmVnaXN0ZXJzICdhJyB0byAneicKKyAqICAgICAzNiA9IGRlbGV0ZSByZWdpc3RlciAnLScKKyAqICAgICAzNyA9IFNlbGVjdGlvbiByZWdpc3RlciAnKicuIE9ubHkgaWYgRkVBVF9DTElQQk9BUkQgZGVmaW5lZAorICogICAgIDM4ID0gQ2xpcGJvYXJkIHJlZ2lzdGVyICcrJy4gT25seSBpZiBGRUFUX0NMSVBCT0FSRCBhbmQgRkVBVF9YMTEgZGVmaW5lZAorICovCisvKgorICogU3ltYm9saWMgbmFtZXMgZm9yIHNvbWUgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIERFTEVUSU9OX1JFR0lTVEVSCTM2CisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKyMgZGVmaW5lIFNUQVJfUkVHSVNURVIJCTM3CisjICBpZmRlZiBGRUFUX1gxMQorIyAgIGRlZmluZSBQTFVTX1JFR0lTVEVSCTM4CisjICBlbHNlCisjICAgZGVmaW5lIFBMVVNfUkVHSVNURVIJU1RBUl9SRUdJU1RFUgkgICAgLyogdGhlcmUgaXMgb25seSBvbmUgKi8KKyMgIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX0RORAorIyBkZWZpbmUgVElMREVfUkVHSVNURVIJCShQTFVTX1JFR0lTVEVSICsgMSkKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKyMgaWZkZWYgRkVBVF9ETkQKKyMgIGRlZmluZSBOVU1fUkVHSVNURVJTCQkoVElMREVfUkVHSVNURVIgKyAxKQorIyBlbHNlCisjICBkZWZpbmUgTlVNX1JFR0lTVEVSUwkJKFBMVVNfUkVHSVNURVIgKyAxKQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIE5VTV9SRUdJU1RFUlMJCTM3CisjZW5kaWYKKworLyoKKyAqIEVhY2ggeWFuayByZWdpc3RlciBpcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBsaW5lcy4KKyAqLworc3RhdGljIHN0cnVjdCB5YW5rcmVnCit7CisgICAgY2hhcl91CSoqeV9hcnJheTsJLyogcG9pbnRlciB0byBhcnJheSBvZiBsaW5lIHBvaW50ZXJzICovCisgICAgbGluZW5yX1QJeV9zaXplOwkJLyogbnVtYmVyIG9mIGxpbmVzIGluIHlfYXJyYXkgKi8KKyAgICBjaGFyX3UJeV90eXBlOwkJLyogTUxJTkUsIE1DSEFSIG9yIE1CTE9DSyAqLworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgY29sbnJfVAl5X3dpZHRoOwkvKiBvbmx5IHNldCBpZiB5X3R5cGUgPT0gTUJMT0NLICovCisjZW5kaWYKK30geV9yZWdzW05VTV9SRUdJU1RFUlNdOworCitzdGF0aWMgc3RydWN0IHlhbmtyZWcJKnlfY3VycmVudDsJICAgIC8qIHB0ciB0byBjdXJyZW50IHlhbmtyZWcgKi8KK3N0YXRpYyBpbnQJCXlfYXBwZW5kOwkgICAgLyogVFJVRSB3aGVuIGFwcGVuZGluZyAqLworc3RhdGljIHN0cnVjdCB5YW5rcmVnCSp5X3ByZXZpb3VzID0gTlVMTDsgLyogcHRyIHRvIGxhc3Qgd3JpdHRlbiB5YW5rcmVnICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgdXNlZCBieSBibG9ja19wcmVwLCBvcF9kZWxldGUgYW5kIG9wX3lhbmsgZm9yIGJsb2Nrd2lzZSBvcGVyYXRvcnMKKyAqIGFsc28gb3BfY2hhbmdlLCBvcF9zaGlmdCwgb3BfaW5zZXJ0LCBvcF9yZXBsYWNlIC0gQUtlbGx5CisgKi8KK3N0cnVjdCBibG9ja19kZWYKK3sKKyAgICBpbnQJCXN0YXJ0c3BhY2VzOwkvKiAnZXh0cmEnIGNvbHMgb2YgZmlyc3QgY2hhciAqLworICAgIGludAkJZW5kc3BhY2VzOwkvKiAnZXh0cmEnIGNvbHMgb2YgZmlyc3QgY2hhciAqLworICAgIGludAkJdGV4dGxlbjsJLyogY2hhcnMgaW4gYmxvY2sgKi8KKyAgICBjaGFyX3UJKnRleHRzdGFydDsJLyogcG9pbnRlciB0byAxc3QgY2hhciBpbiBibG9jayAqLworICAgIGNvbG5yX1QJdGV4dGNvbDsJLyogY29scyBvZiBjaGFycyAoYXQgbGVhc3QgcGFydC4pIGluIGJsb2NrICovCisgICAgY29sbnJfVAlzdGFydF92Y29sOwkvKiBzdGFydCBjb2wgb2YgMXN0IGNoYXIgd2hvbGx5IGluc2lkZSBibG9jayAqLworICAgIGNvbG5yX1QJZW5kX3Zjb2w7CS8qIHN0YXJ0IGNvbCBvZiAxc3QgY2hhciB3aG9sbHkgYWZ0ZXIgYmxvY2sgKi8KKyNpZmRlZiBGRUFUX1ZJU1VBTEVYVFJBCisgICAgaW50CQlpc19zaG9ydDsJLyogVFJVRSBpZiBsaW5lIGlzIHRvbyBzaG9ydCB0byBmaXQgaW4gYmxvY2sgKi8KKyAgICBpbnQJCWlzX01BWDsJCS8qIFRSVUUgaWYgY3Vyc3dhbnQ9PU1BWENPTCB3aGVuIHN0YXJ0aW5nICovCisgICAgaW50CQlpc19vbmVDaGFyOwkvKiBUUlVFIGlmIGJsb2NrIHdpdGhpbiBvbmUgY2hhcmFjdGVyICovCisgICAgaW50CQlwcmVfd2hpdGVzcDsJLyogc2NyZWVuIGNvbHMgb2Ygd3MgYmVmb3JlIGJsb2NrICovCisgICAgaW50CQlwcmVfd2hpdGVzcF9jOwkvKiBjaGFycyBvZiB3cyBiZWZvcmUgYmxvY2sgKi8KKyAgICBjb2xucl9UCWVuZF9jaGFyX3Zjb2xzOwkvKiBudW1iZXIgb2YgdmNvbHMgb2YgcG9zdC1ibG9jayBjaGFyICovCisjZW5kaWYKKyAgICBjb2xucl9UCXN0YXJ0X2NoYXJfdmNvbHM7IC8qIG51bWJlciBvZiB2Y29scyBvZiBwcmUtYmxvY2sgY2hhciAqLworfTsKKworI2lmZGVmIEZFQVRfVklTVUFMRVhUUkEKK3N0YXRpYyB2b2lkIHNoaWZ0X2Jsb2NrIF9fQVJHUygob3BhcmdfVCAqb2FwLCBpbnQgYW1vdW50KSk7CitzdGF0aWMgdm9pZCBibG9ja19pbnNlcnQgX19BUkdTKChvcGFyZ19UICpvYXAsIGNoYXJfdSAqcywgaW50IGJfaW5zZXJ0LCBzdHJ1Y3QgYmxvY2tfZGVmKmJkcCkpOworI2VuZGlmCitzdGF0aWMgdm9pZAlnZXRfeWFua19yZWdpc3RlciBfX0FSR1MoKGludCByZWduYW1lLCBpbnQgd3JpdGluZykpOworc3RhdGljIGludAlzdHVmZl95YW5rIF9fQVJHUygoaW50LCBjaGFyX3UgKikpOworc3RhdGljIHZvaWQJcHV0X3JlZWRpdF9pbl90eXBlYnVmIF9fQVJHUygodm9pZCkpOworc3RhdGljIGludAlwdXRfaW5fdHlwZWJ1ZiBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGNvbG9uKSk7CitzdGF0aWMgdm9pZAlzdHVmZmVzY2FwZWQgX19BUkdTKChjaGFyX3UgKmFyZywgaW50IGxpdGVyYWxseSkpOworc3RhdGljIGludAlnZXRfc3BlY19yZWcgX19BUkdTKChpbnQgcmVnbmFtZSwgY2hhcl91ICoqYXJncCwgaW50ICphbGxvY2F0ZWQsIGludCBlcnJtc2cpKTsKK3N0YXRpYyB2b2lkCWNtZGxpbmVfcGFzdGVfc3RyIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGl0ZXJhbGx5KSk7CisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIHZvaWQJbWJfYWRqdXN0X29wZW5kIF9fQVJHUygob3BhcmdfVCAqb2FwKSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkCWZyZWVfeWFuayBfX0FSR1MoKGxvbmcpKTsKK3N0YXRpYyB2b2lkCWZyZWVfeWFua19hbGwgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50CXlhbmtfY29weV9saW5lIF9fQVJHUygoc3RydWN0IGJsb2NrX2RlZiAqYmQsIGxvbmcgeV9pZHgpKTsKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorc3RhdGljIHZvaWQJY29weV95YW5rX3JlZyBfX0FSR1MoKHN0cnVjdCB5YW5rcmVnICpyZWcpKTsKKyMgaWYgZGVmaW5lZChGRUFUX1ZJU1VBTCkgfHwgZGVmaW5lZChGRUFUX0VWQUwpCitzdGF0aWMgdm9pZAltYXlfc2V0X3NlbGVjdGlvbiBfX0FSR1MoKHZvaWQpKTsKKyMgZW5kaWYKKyNlbmRpZgorc3RhdGljIHZvaWQJZGlzX21zZyBfX0FSR1MoKGNoYXJfdSAqcCwgaW50IHNraXBfZXNjKSk7CisjaWZkZWYgRkVBVF9WSVNVQUwKK3N0YXRpYyB2b2lkCWJsb2NrX3ByZXAgX19BUkdTKChvcGFyZ19UICpvYXAsIHN0cnVjdCBibG9ja19kZWYgKiwgbGluZW5yX1QsIGludCkpOworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkgfHwgZGVmaW5lZChGRUFUX0VWQUwpCitzdGF0aWMgdm9pZAlzdHJfdG9fcmVnIF9fQVJHUygoc3RydWN0IHlhbmtyZWcgKnlfcHRyLCBpbnQgdHlwZSwgY2hhcl91ICpzdHIsIGxvbmcgbGVuLCBsb25nIGJsb2NrbGVuKSk7CisjZW5kaWYKK3N0YXRpYyBpbnQJZW5kc19pbl93aGl0ZSBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCitzdGF0aWMgaW50CXNhbWVfbGVhZGVyIF9fQVJHUygobGluZW5yX1QgbG51bSwgaW50LCBjaGFyX3UgKiwgaW50LCBjaGFyX3UgKikpOworc3RhdGljIGludAlmbXRfY2hlY2tfcGFyIF9fQVJHUygobGluZW5yX1QsIGludCAqLCBjaGFyX3UgKiosIGludCBkb19jb21tZW50cykpOworI2Vsc2UKK3N0YXRpYyBpbnQJZm10X2NoZWNrX3BhciBfX0FSR1MoKGxpbmVucl9UKSk7CisjZW5kaWYKKworLyoKKyAqIFRoZSBuYW1lcyBvZiBvcGVyYXRvcnMuCisgKiBJTVBPUlRBTlQ6IEluZGV4IG11c3QgY29ycmVzcG9uZCB3aXRoIGRlZmluZXMgaW4gdmltLmghISEKKyAqIFRoZSB0aGlyZCBmaWVsZCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgb3BlcmF0b3IgYWx3YXlzIHdvcmtzIG9uIGxpbmVzLgorICovCitzdGF0aWMgY2hhciBvcGNoYXJzW11bM10gPQoreworICAgIHtOVUwsIE5VTCwgRkFMU0V9LAkvKiBPUF9OT1AgKi8KKyAgICB7J2QnLCBOVUwsIEZBTFNFfSwJLyogT1BfREVMRVRFICovCisgICAgeyd5JywgTlVMLCBGQUxTRX0sCS8qIE9QX1lBTksgKi8KKyAgICB7J2MnLCBOVUwsIEZBTFNFfSwJLyogT1BfQ0hBTkdFICovCisgICAgeyc8JywgTlVMLCBUUlVFfSwJLyogT1BfTFNISUZUICovCisgICAgeyc+JywgTlVMLCBUUlVFfSwJLyogT1BfUlNISUZUICovCisgICAgeychJywgTlVMLCBUUlVFfSwJLyogT1BfRklMVEVSICovCisgICAgeydnJywgJ34nLCBGQUxTRX0sCS8qIE9QX1RJTERFICovCisgICAgeyc9JywgTlVMLCBUUlVFfSwJLyogT1BfSU5ERU5UICovCisgICAgeydnJywgJ3EnLCBUUlVFfSwJLyogT1BfRk9STUFUICovCisgICAgeyc6JywgTlVMLCBUUlVFfSwJLyogT1BfQ09MT04gKi8KKyAgICB7J2cnLCAnVScsIEZBTFNFfSwJLyogT1BfVVBQRVIgKi8KKyAgICB7J2cnLCAndScsIEZBTFNFfSwJLyogT1BfTE9XRVIgKi8KKyAgICB7J0onLCBOVUwsIFRSVUV9LAkvKiBET19KT0lOICovCisgICAgeydnJywgJ0onLCBUUlVFfSwJLyogRE9fSk9JTl9OUyAqLworICAgIHsnZycsICc/JywgRkFMU0V9LAkvKiBPUF9ST1QxMyAqLworICAgIHsncicsIE5VTCwgRkFMU0V9LAkvKiBPUF9SRVBMQUNFICovCisgICAgeydJJywgTlVMLCBGQUxTRX0sCS8qIE9QX0lOU0VSVCAqLworICAgIHsnQScsIE5VTCwgRkFMU0V9LAkvKiBPUF9BUFBFTkQgKi8KKyAgICB7J3onLCAnZicsIFRSVUV9LAkvKiBPUF9GT0xEICovCisgICAgeyd6JywgJ28nLCBUUlVFfSwJLyogT1BfRk9MRE9QRU4gKi8KKyAgICB7J3onLCAnTycsIFRSVUV9LAkvKiBPUF9GT0xET1BFTlJFQyAqLworICAgIHsneicsICdjJywgVFJVRX0sCS8qIE9QX0ZPTERDTE9TRSAqLworICAgIHsneicsICdDJywgVFJVRX0sCS8qIE9QX0ZPTERDTE9TRVJFQyAqLworICAgIHsneicsICdkJywgVFJVRX0sCS8qIE9QX0ZPTERERUwgKi8KKyAgICB7J3onLCAnRCcsIFRSVUV9LAkvKiBPUF9GT0xEREVMUkVDICovCisgICAgeydnJywgJ3cnLCBUUlVFfSwJLyogT1BfRk9STUFUMiAqLworfTsKKworLyoKKyAqIFRyYW5zbGF0ZSBhIGNvbW1hbmQgbmFtZSBpbnRvIGFuIG9wZXJhdG9yIHR5cGUuCisgKiBNdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSB2YWxpZCBvcGVyYXRvciBuYW1lIQorICovCisgICAgaW50CitnZXRfb3BfdHlwZShjaGFyMSwgY2hhcjIpCisgICAgaW50CQljaGFyMTsKKyAgICBpbnQJCWNoYXIyOworeworICAgIGludAkJaTsKKworICAgIGlmIChjaGFyMSA9PSAncicpCQkvKiBpZ25vcmUgc2Vjb25kIGNoYXJhY3RlciAqLworCXJldHVybiBPUF9SRVBMQUNFOworICAgIGlmIChjaGFyMSA9PSAnficpCQkvKiB3aGVuIHRpbGRlIGlzIGFuIG9wZXJhdG9yICovCisJcmV0dXJuIE9QX1RJTERFOworICAgIGZvciAoaSA9IDA7IDsgKytpKQorCWlmIChvcGNoYXJzW2ldWzBdID09IGNoYXIxICYmIG9wY2hhcnNbaV1bMV0gPT0gY2hhcjIpCisJICAgIGJyZWFrOworICAgIHJldHVybiBpOworfQorCisjaWYgZGVmaW5lZChGRUFUX1ZJU1VBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBvcGVyYXRvciAib3AiIGFsd2F5cyB3b3JrcyBvbiB3aG9sZSBsaW5lcy4KKyAqLworICAgIGludAorb3Bfb25fbGluZXMob3ApCisgICAgaW50IG9wOworeworICAgIHJldHVybiBvcGNoYXJzW29wXVsyXTsKK30KKyNlbmRpZgorCisvKgorICogR2V0IGZpcnN0IG9wZXJhdG9yIGNvbW1hbmQgY2hhcmFjdGVyLgorICogUmV0dXJucyAnZycgb3IgJ3onIGlmIHRoZXJlIGlzIGFub3RoZXIgY29tbWFuZCBjaGFyYWN0ZXIuCisgKi8KKyAgICBpbnQKK2dldF9vcF9jaGFyKG9wdHlwZSkKKyAgICBpbnQJCW9wdHlwZTsKK3sKKyAgICByZXR1cm4gb3BjaGFyc1tvcHR5cGVdWzBdOworfQorCisvKgorICogR2V0IHNlY29uZCBvcGVyYXRvciBjb21tYW5kIGNoYXJhY3Rlci4KKyAqLworICAgIGludAorZ2V0X2V4dHJhX29wX2NoYXIob3B0eXBlKQorICAgIGludAkJb3B0eXBlOworeworICAgIHJldHVybiBvcGNoYXJzW29wdHlwZV1bMV07Cit9CisKKy8qCisgKiBvcF9zaGlmdCAtIGhhbmRsZSBhIHNoaWZ0IG9wZXJhdGlvbgorICovCisgICAgdm9pZAorb3Bfc2hpZnQob2FwLCBjdXJzX3RvcCwgYW1vdW50KQorICAgIG9wYXJnX1QJICAgICpvYXA7CisgICAgaW50CQkgICAgY3Vyc190b3A7CisgICAgaW50CQkgICAgYW1vdW50OworeworICAgIGxvbmcJICAgIGk7CisgICAgaW50CQkgICAgZmlyc3RfY2hhcjsKKyAgICBjaGFyX3UJICAgICpzOworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaW50CQkgICAgYmxvY2tfY29sID0gMDsKKyNlbmRpZgorCisgICAgaWYgKHVfc2F2ZSgobGluZW5yX1QpKG9hcC0+c3RhcnQubG51bSAtIDEpLAorCQkJCSAgICAgICAobGluZW5yX1QpKG9hcC0+ZW5kLmxudW0gKyAxKSkgPT0gRkFJTCkKKwlyZXR1cm47CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmIChvYXAtPmJsb2NrX21vZGUpCisJYmxvY2tfY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisjZW5kaWYKKworICAgIGZvciAoaSA9IG9hcC0+bGluZV9jb3VudDsgLS1pID49IDA7ICkKKyAgICB7CisJZmlyc3RfY2hhciA9ICptbF9nZXRfY3VybGluZSgpOworCWlmIChmaXJzdF9jaGFyID09IE5VTCkJCQkJLyogZW1wdHkgbGluZSAqLworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisjaWZkZWYgRkVBVF9WSVNVQUxFWFRSQQorCWVsc2UgaWYgKG9hcC0+YmxvY2tfbW9kZSkKKwkgICAgc2hpZnRfYmxvY2sob2FwLCBhbW91bnQpOworI2VuZGlmCisJZWxzZQorCSAgICAvKiBNb3ZlIHRoZSBsaW5lIHJpZ2h0IGlmIGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCAnIycsICdzbWFydGluZGVudCcKKwkgICAgICogaXNuJ3Qgc2V0IG9yICdjaW5kZW50JyBpc24ndCBzZXQgb3IgJyMnIGlzbid0IGluICdjaW5vJy4gKi8KKyNpZiBkZWZpbmVkKEZFQVRfU01BUlRJTkRFTlQpIHx8IGRlZmluZWQoRkVBVF9DSU5ERU5UKQorCSAgICBpZiAoZmlyc3RfY2hhciAhPSAnIycgfHwgIXByZXByb2NzX2xlZnQoKSkKKyNlbmRpZgorCXsKKwkgICAgc2hpZnRfbGluZShvYXAtPm9wX3R5cGUgPT0gT1BfTFNISUZULCBwX3NyLCBhbW91bnQpOworCX0KKwkrK2N1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICB9CisKKyAgICBjaGFuZ2VkX2xpbmVzKG9hcC0+c3RhcnQubG51bSwgMCwgb2FwLT5lbmQubG51bSArIDEsIDBMKTsKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKG9hcC0+YmxvY2tfbW9kZSkKKyAgICB7CisJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gb2FwLT5zdGFydC5sbnVtOworCWN1cndpbi0+d19jdXJzb3IuY29sID0gYmxvY2tfY29sOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwlpZiAoY3Vyc190b3ApCSAgICAvKiBwdXQgY3Vyc29yIG9uIGZpcnN0IGxpbmUsIGZvciAiPj4iICovCisgICAgeworCWN1cndpbi0+d19jdXJzb3IubG51bSA9IG9hcC0+c3RhcnQubG51bTsKKwliZWdpbmxpbmUoQkxfU09MIHwgQkxfRklYKTsgICAvKiBzaGlmdF9saW5lKCkgbWF5IGhhdmUgc2V0IGN1cnNvci5jb2wgKi8KKyAgICB9CisgICAgZWxzZQorCS0tY3Vyd2luLT53X2N1cnNvci5sbnVtOwkvKiBwdXQgY3Vyc29yIG9uIGxhc3QgbGluZSwgZm9yICI6PiIgKi8KKworICAgIGlmIChvYXAtPmxpbmVfY291bnQgPiBwX3JlcG9ydCkKKyAgICB7CisJaWYgKG9hcC0+b3BfdHlwZSA9PSBPUF9SU0hJRlQpCisJICAgIHMgPSAoY2hhcl91ICopIj4iOworCWVsc2UKKwkgICAgcyA9IChjaGFyX3UgKikiPCI7CisJaWYgKG9hcC0+bGluZV9jb3VudCA9PSAxKQorCXsKKwkgICAgaWYgKGFtb3VudCA9PSAxKQorCQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCIxIGxpbmUgJXNlZCAxIHRpbWUiKSwgcyk7CisJICAgIGVsc2UKKwkJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiMSBsaW5lICVzZWQgJWQgdGltZXMiKSwgcywgYW1vdW50KTsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKGFtb3VudCA9PSAxKQorCQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCIlbGQgbGluZXMgJXNlZCAxIHRpbWUiKSwKKwkJCQkJCQkgIG9hcC0+bGluZV9jb3VudCwgcyk7CisJICAgIGVsc2UKKwkJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiJWxkIGxpbmVzICVzZWQgJWQgdGltZXMiKSwKKwkJCQkJCSAgb2FwLT5saW5lX2NvdW50LCBzLCBhbW91bnQpOworCX0KKwltc2coSU9idWZmKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCAiJ1siIGFuZCAiJ10iIG1hcmtzLgorICAgICAqLworICAgIGN1cmJ1Zi0+Yl9vcF9zdGFydCA9IG9hcC0+c3RhcnQ7CisgICAgY3VyYnVmLT5iX29wX2VuZC5sbnVtID0gb2FwLT5lbmQubG51bTsKKyAgICBjdXJidWYtPmJfb3BfZW5kLmNvbCA9IChjb2xucl9UKVNUUkxFTihtbF9nZXQob2FwLT5lbmQubG51bSkpOworICAgIGlmIChjdXJidWYtPmJfb3BfZW5kLmNvbCA+IDApCisJLS1jdXJidWYtPmJfb3BfZW5kLmNvbDsKK30KKworLyoKKyAqIHNoaWZ0IHRoZSBjdXJyZW50IGxpbmUgb25lIHNoaWZ0d2lkdGggbGVmdCAoaWYgbGVmdCAhPSAwKSBvciByaWdodAorICogbGVhdmVzIGN1cnNvciBvbiBmaXJzdCBibGFuayBpbiB0aGUgbGluZQorICovCisgICAgdm9pZAorc2hpZnRfbGluZShsZWZ0LCByb3VuZCwgYW1vdW50KQorICAgIGludAlsZWZ0OworICAgIGludAlyb3VuZDsKKyAgICBpbnQJYW1vdW50OworeworICAgIGludAkJY291bnQ7CisgICAgaW50CQlpLCBqOworICAgIGludAkJcF9zdyA9IChpbnQpY3VyYnVmLT5iX3Bfc3c7CisKKyAgICBjb3VudCA9IGdldF9pbmRlbnQoKTsJLyogZ2V0IGN1cnJlbnQgaW5kZW50ICovCisKKyAgICBpZiAocm91bmQpCQkJLyogcm91bmQgb2ZmIGluZGVudCAqLworICAgIHsKKwlpID0gY291bnQgLyBwX3N3OwkvKiBudW1iZXIgb2YgcF9zdyByb3VuZGVkIGRvd24gKi8KKwlqID0gY291bnQgJSBwX3N3OwkvKiBleHRyYSBzcGFjZXMgKi8KKwlpZiAoaiAmJiBsZWZ0KQkJLyogZmlyc3QgcmVtb3ZlIGV4dHJhIHNwYWNlcyAqLworCSAgICAtLWFtb3VudDsKKwlpZiAobGVmdCkKKwl7CisJICAgIGkgLT0gYW1vdW50OworCSAgICBpZiAoaSA8IDApCisJCWkgPSAwOworCX0KKwllbHNlCisJICAgIGkgKz0gYW1vdW50OworCWNvdW50ID0gaSAqIHBfc3c7CisgICAgfQorICAgIGVsc2UJCS8qIG9yaWdpbmFsIHZpIGluZGVudCAqLworICAgIHsKKwlpZiAobGVmdCkKKwl7CisJICAgIGNvdW50IC09IHBfc3cgKiBhbW91bnQ7CisJICAgIGlmIChjb3VudCA8IDApCisJCWNvdW50ID0gMDsKKwl9CisJZWxzZQorCSAgICBjb3VudCArPSBwX3N3ICogYW1vdW50OworICAgIH0KKworICAgIC8qIFNldCBuZXcgaW5kZW50ICovCisjaWZkZWYgRkVBVF9WUkVQTEFDRQorICAgIGlmIChTdGF0ZSAmIFZSRVBMQUNFX0ZMQUcpCisJY2hhbmdlX2luZGVudChJTkRFTlRfU0VULCBjb3VudCwgRkFMU0UsIE5VTCk7CisgICAgZWxzZQorI2VuZGlmCisJKHZvaWQpc2V0X2luZGVudChjb3VudCwgU0lOX0NIQU5HRUQpOworfQorCisjaWYgZGVmaW5lZChGRUFUX1ZJU1VBTEVYVFJBKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFNoaWZ0IG9uZSBsaW5lIG9mIHRoZSBjdXJyZW50IGJsb2NrIG9uZSBzaGlmdHdpZHRoIHJpZ2h0IG9yIGxlZnQuCisgKiBMZWF2ZXMgY3Vyc29yIG9uIGZpcnN0IGNoYXJhY3RlciBpbiBibG9jay4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzaGlmdF9ibG9jayhvYXAsIGFtb3VudCkKKyAgICBvcGFyZ19UCSpvYXA7CisgICAgaW50CQlhbW91bnQ7Cit7CisgICAgaW50CQkJbGVmdCA9IChvYXAtPm9wX3R5cGUgPT0gT1BfTFNISUZUKTsKKyAgICBpbnQJCQlvbGRzdGF0ZSA9IFN0YXRlOworICAgIGludAkJCXRvdGFsLCBzcGxpdDsKKyAgICBjaGFyX3UJCSpuZXdwLCAqb2xkcCwgKm1pZHAsICpwdHI7CisgICAgaW50CQkJb2xkY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisgICAgaW50CQkJcF9zdyA9IChpbnQpY3VyYnVmLT5iX3Bfc3c7CisgICAgaW50CQkJcF90cyA9IChpbnQpY3VyYnVmLT5iX3BfdHM7CisgICAgc3RydWN0IGJsb2NrX2RlZgliZDsKKyAgICBpbnQJCQlpbnRlcm5hbCA9IDA7CisgICAgaW50CQkJaW5jcjsKKyAgICBjb2xucl9UCQl2Y29sLCBjb2wgPSAwLCB3c192Y29sOworICAgIGludAkJCWkgPSAwLCBqID0gMDsKKyAgICBpbnQJCQlsZW47CisKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorICAgIGludAkJCW9sZF9wX3JpID0gcF9yaTsKKworICAgIHBfcmkgPSAwOwkJCS8qIGRvbid0IHdhbnQgcmV2aW5zIGluIGlkZW50ICovCisjZW5kaWYKKworICAgIFN0YXRlID0gSU5TRVJUOwkJLyogZG9uJ3Qgd2FudCBSRVBMQUNFIGZvciBTdGF0ZSAqLworICAgIGJsb2NrX3ByZXAob2FwLCAmYmQsIGN1cndpbi0+d19jdXJzb3IubG51bSwgVFJVRSk7CisgICAgaWYgKGJkLmlzX3Nob3J0KQorCXJldHVybjsKKworICAgIC8qIHRvdGFsIGlzIG51bWJlciBvZiBzY3JlZW4gY29sdW1ucyB0byBiZSBpbnNlcnRlZC9yZW1vdmVkICovCisgICAgdG90YWwgPSBhbW91bnQgKiBwX3N3OworICAgIG9sZHAgPSBtbF9nZXRfY3VybGluZSgpOworCisgICAgaWYgKCFsZWZ0KQorICAgIHsKKwkvKgorCSAqICAxLiBHZXQgc3RhcnQgdmNvbAorCSAqICAyLiBUb3RhbCB3cyB2Y29scworCSAqICAzLiBEaXZ2eSBpbnRvIFRBQnMgJiBzcHAKKwkgKiAgNC4gQ29uc3RydWN0IG5ldyBzdHJpbmcKKwkgKi8KKwl0b3RhbCArPSBiZC5wcmVfd2hpdGVzcDsgLyogYWxsIHZpcnR1YWwgV1MgdXB0byAmIGluY2wgYSBzcGxpdCBUQUIgKi8KKwl3c192Y29sID0gYmQuc3RhcnRfdmNvbCAtIGJkLnByZV93aGl0ZXNwOworCWlmIChiZC5zdGFydHNwYWNlcykKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQliZC50ZXh0c3RhcnQgKz0gKCptYl9wdHIybGVuX2NoZWNrKShiZC50ZXh0c3RhcnQpOworI2VuZGlmCisJICAgICsrYmQudGV4dHN0YXJ0OworCX0KKwlmb3IgKCA7IHZpbV9pc3doaXRlKCpiZC50ZXh0c3RhcnQpOyApCisJeworCSAgICBpbmNyID0gbGJyX2NoYXJ0YWJzaXplX2FkdigmYmQudGV4dHN0YXJ0LCAoY29sbnJfVCkoYmQuc3RhcnRfdmNvbCkpOworCSAgICB0b3RhbCArPSBpbmNyOworCSAgICBiZC5zdGFydF92Y29sICs9IGluY3I7CisJfQorCS8qIE9LLCBub3cgdG90YWw9YWxsIHRoZSBWV1MgcmVxZCwgYW5kIHRleHRzdGFydCBwb2ludHMgYXQgdGhlIDFzdAorCSAqIG5vbi13cyBjaGFyIGluIHRoZSBibG9jay4gKi8KKwlpZiAoIWN1cmJ1Zi0+Yl9wX2V0KQorCSAgICBpID0gKCh3c192Y29sICUgcF90cykgKyB0b3RhbCkgLyBwX3RzOyAvKiBudW1iZXIgb2YgdGFicyAqLworCWlmIChpKQorCSAgICBqID0gKCh3c192Y29sICUgcF90cykgKyB0b3RhbCkgJSBwX3RzOyAvKiBudW1iZXIgb2Ygc3BwICovCisJZWxzZQorCSAgICBqID0gdG90YWw7CisJLyogaWYgd2UncmUgc3BsaXR0aW5nIGEgVEFCLCBhbGxvdyBmb3IgaXQgKi8KKwliZC50ZXh0Y29sIC09IGJkLnByZV93aGl0ZXNwX2MgLSAoYmQuc3RhcnRzcGFjZXMgIT0gMCk7CisJbGVuID0gKGludClTVFJMRU4oYmQudGV4dHN0YXJ0KSArIDE7CisJbmV3cCA9IGFsbG9jX2NoZWNrKCh1bnNpZ25lZCkoYmQudGV4dGNvbCArIGkgKyBqICsgbGVuKSk7CisJaWYgKG5ld3AgPT0gTlVMTCkKKwkgICAgcmV0dXJuOworCXZpbV9tZW1zZXQobmV3cCwgTlVMLCAoc2l6ZV90KShiZC50ZXh0Y29sICsgaSArIGogKyBsZW4pKTsKKwltY2hfbWVtbW92ZShuZXdwLCBvbGRwLCAoc2l6ZV90KWJkLnRleHRjb2wpOworCWNvcHlfY2hhcnMobmV3cCArIGJkLnRleHRjb2wsIChzaXplX3QpaSwgVEFCKTsKKwljb3B5X3NwYWNlcyhuZXdwICsgYmQudGV4dGNvbCArIGksIChzaXplX3Qpaik7CisJLyogdGhlIGVuZCAqLworCW1jaF9tZW1tb3ZlKG5ld3AgKyBiZC50ZXh0Y29sICsgaSArIGosIGJkLnRleHRzdGFydCwgKHNpemVfdClsZW4pOworICAgIH0KKyAgICBlbHNlIC8qIGxlZnQgKi8KKyAgICB7CisJdmNvbCA9IG9hcC0+c3RhcnRfdmNvbDsKKwkvKiB3YWxrIHZjb2wgcGFzdCB3cyB0byBiZSByZW1vdmVkICovCisJZm9yIChtaWRwID0gb2xkcCArIGJkLnRleHRjb2w7CisJICAgICAgdmNvbCA8IChvYXAtPnN0YXJ0X3Zjb2wgKyB0b3RhbCkgJiYgdmltX2lzd2hpdGUoKm1pZHApOyApCisJeworCSAgICBpbmNyID0gbGJyX2NoYXJ0YWJzaXplX2FkdigmbWlkcCwgKGNvbG5yX1QpdmNvbCk7CisJICAgIHZjb2wgKz0gaW5jcjsKKwl9CisJLyogaW50ZXJuYWwgaXMgdGhlIGJsb2NrLWludGVybmFsIHdzIHJlcGxhY2luZyBhIHNwbGl0IFRBQiAqLworCWlmICh2Y29sID4gKG9hcC0+c3RhcnRfdmNvbCArIHRvdGFsKSkKKwl7CisJICAgIC8qIHdlIGhhdmUgdG8gc3BsaXQgdGhlIFRBQiAqKG1pZHAtMSkgKi8KKwkgICAgaW50ZXJuYWwgPSB2Y29sIC0gKG9hcC0+c3RhcnRfdmNvbCArIHRvdGFsKTsKKwl9CisJLyogaWYgJ2V4cGFuZHRhYicgaXMgbm90IHNldCwgdXNlIFRBQnMgKi8KKworCXNwbGl0ID0gYmQuc3RhcnRzcGFjZXMgKyBpbnRlcm5hbDsKKwlpZiAoc3BsaXQgPiAwKQorCXsKKwkgICAgaWYgKCFjdXJidWYtPmJfcF9ldCkKKwkgICAgeworCQlmb3IgKHB0ciA9IG9sZHAsIGNvbCA9IDA7IHB0ciA8IG9sZHArYmQudGV4dGNvbDsgKQorCQkgICAgY29sICs9IGxicl9jaGFydGFic2l6ZV9hZHYoJnB0ciwgKGNvbG5yX1QpY29sKTsKKworCQkvKiBjb2wrMSBub3cgZXF1YWxzIHRoZSBzdGFydCBjb2wgb2YgdGhlIGZpcnN0IGNoYXIgb2YgdGhlCisJCSAqIGJsb2NrIChtYXkgYmUgPCBvYXAuc3RhcnRfdmNvbCBpZiB3ZSdyZSBzcGxpdHRpbmcgYSBUQUIpICovCisJCWkgPSAoKGNvbCAlIHBfdHMpICsgc3BsaXQpIC8gcF90czsgLyogbnVtYmVyIG9mIHRhYnMgKi8KKwkgICAgfQorCSAgICBpZiAoaSkKKwkJaiA9ICgoY29sICUgcF90cykgKyBzcGxpdCkgJSBwX3RzOyAvKiBudW1iZXIgb2Ygc3BwICovCisJICAgIGVsc2UKKwkJaiA9IHNwbGl0OworCX0KKworCW5ld3AgPSBhbGxvY19jaGVjayhiZC50ZXh0Y29sICsgaSArIGogKyAodW5zaWduZWQpU1RSTEVOKG1pZHApICsgMSk7CisJaWYgKG5ld3AgPT0gTlVMTCkKKwkgICAgcmV0dXJuOworCXZpbV9tZW1zZXQobmV3cCwgTlVMLCAoc2l6ZV90KShiZC50ZXh0Y29sICsgaSArIGogKyBTVFJMRU4obWlkcCkgKyAxKSk7CisKKwkvKiBjb3B5IGZpcnN0IHBhcnQgd2Ugd2FudCB0byBrZWVwICovCisJbWNoX21lbW1vdmUobmV3cCwgb2xkcCwgKHNpemVfdCliZC50ZXh0Y29sKTsKKwkvKiBOb3cgY29weSBhbnkgVEFCUyBhbmQgc3BwIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCEgKi8KKwl3aGlsZSAodmltX2lzd2hpdGUoKm1pZHApKQorCXsKKwkgICAgaWYgKCptaWRwID09IFRBQikKKwkJaSsrOworCSAgICBlbHNlIC8qc3BhY2UgKi8KKwkJaisrOworCSAgICBtaWRwKys7CisJfQorCS8qIFdlIG1pZ2h0IGhhdmUgYW4gZXh0cmEgVEFCIHdvcnRoIG9mIHNwcCBub3chICovCisJaWYgKGogLyBwX3RzICYmICFjdXJidWYtPmJfcF9ldCkKKwl7CisJICAgIGkrKzsKKwkgICAgaiAtPSBwX3RzOworCX0KKwljb3B5X2NoYXJzKG5ld3AgKyBiZC50ZXh0Y29sLCAoc2l6ZV90KWksIFRBQik7CisJY29weV9zcGFjZXMobmV3cCArIGJkLnRleHRjb2wgKyBpLCAoc2l6ZV90KWopOworCisJLyogdGhlIGVuZCAqLworCW1jaF9tZW1tb3ZlKG5ld3AgKyBTVFJMRU4obmV3cCksIG1pZHAsIChzaXplX3QpU1RSTEVOKG1pZHApICsgMSk7CisgICAgfQorICAgIC8qIHJlcGxhY2UgdGhlIGxpbmUgKi8KKyAgICBtbF9yZXBsYWNlKGN1cndpbi0+d19jdXJzb3IubG51bSwgbmV3cCwgRkFMU0UpOworICAgIGNoYW5nZWRfYnl0ZXMoY3Vyd2luLT53X2N1cnNvci5sbnVtLCAoY29sbnJfVCliZC50ZXh0Y29sKTsKKyAgICBTdGF0ZSA9IG9sZHN0YXRlOworICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gb2xkY29sOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgcF9yaSA9IG9sZF9wX3JpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVklTVUFMRVhUUkEKKy8qCisgKiBJbnNlcnQgc3RyaW5nICJzIiAoYl9pbnNlcnQgPyBiZWZvcmUgOiBhZnRlcikgYmxvY2sgOkFLZWxseQorICogQ2FsbGVyIG11c3QgcHJlcGFyZSBmb3IgdW5kby4KKyAqLworICAgIHN0YXRpYyB2b2lkCitibG9ja19pbnNlcnQob2FwLCBzLCBiX2luc2VydCwgYmRwKQorICAgIG9wYXJnX1QJCSpvYXA7CisgICAgY2hhcl91CQkqczsKKyAgICBpbnQJCQliX2luc2VydDsKKyAgICBzdHJ1Y3QgYmxvY2tfZGVmCSpiZHA7Cit7CisgICAgaW50CQlwX3RzOworICAgIGludAkJY291bnQgPSAwOwkvKiBleHRyYSBzcGFjZXMgdG8gcmVwbGFjZSBhIGN1dCBUQUIgKi8KKyAgICBpbnQJCXNwYWNlcyA9IDA7CS8qIG5vbi16ZXJvIGlmIGN1dHRpbmcgYSBUQUIgKi8KKyAgICBjb2xucl9UCW9mZnNldDsJCS8qIHBvaW50ZXIgYWxvbmcgbmV3IGxpbmUgKi8KKyAgICB1bnNpZ25lZAlzX2xlbjsJCS8qIFNUUkxFTihzKSAqLworICAgIGNoYXJfdQkqbmV3cCwgKm9sZHA7CS8qIG5ldywgb2xkIGxpbmVzICovCisgICAgbGluZW5yX1QJbG51bTsJCS8qIGxvb3AgdmFyICovCisgICAgaW50CQlvbGRzdGF0ZSA9IFN0YXRlOworCisgICAgU3RhdGUgPSBJTlNFUlQ7CQkvKiBkb24ndCB3YW50IFJFUExBQ0UgZm9yIFN0YXRlICovCisgICAgc19sZW4gPSAodW5zaWduZWQpU1RSTEVOKHMpOworCisgICAgZm9yIChsbnVtID0gb2FwLT5zdGFydC5sbnVtICsgMTsgbG51bSA8PSBvYXAtPmVuZC5sbnVtOyBsbnVtKyspCisgICAgeworCWJsb2NrX3ByZXAob2FwLCBiZHAsIGxudW0sIFRSVUUpOworCWlmIChiZHAtPmlzX3Nob3J0ICYmIGJfaW5zZXJ0KQorCSAgICBjb250aW51ZTsJLyogT1BfSU5TRVJULCBsaW5lIGVuZHMgYmVmb3JlIGJsb2NrIHN0YXJ0ICovCisKKwlvbGRwID0gbWxfZ2V0KGxudW0pOworCisJaWYgKGJfaW5zZXJ0KQorCXsKKwkgICAgcF90cyA9IGJkcC0+c3RhcnRfY2hhcl92Y29sczsKKwkgICAgc3BhY2VzID0gYmRwLT5zdGFydHNwYWNlczsKKwkgICAgaWYgKHNwYWNlcyAhPSAwKQorCQljb3VudCA9IHBfdHMgLSAxOyAvKiB3ZSdyZSBjdXR0aW5nIGEgVEFCICovCisJICAgIG9mZnNldCA9IGJkcC0+dGV4dGNvbDsKKwl9CisJZWxzZSAvKiBhcHBlbmQgKi8KKwl7CisJICAgIHBfdHMgPSBiZHAtPmVuZF9jaGFyX3Zjb2xzOworCSAgICBpZiAoIWJkcC0+aXNfc2hvcnQpIC8qIHNwYWNlcyA9IHBhZGRpbmcgYWZ0ZXIgYmxvY2sgKi8KKwkgICAgeworCQlzcGFjZXMgPSAoYmRwLT5lbmRzcGFjZXMgPyBwX3RzIC0gYmRwLT5lbmRzcGFjZXMgOiAwKTsKKwkJaWYgKHNwYWNlcyAhPSAwKQorCQkgICAgY291bnQgPSBwX3RzIC0gMTsgLyogd2UncmUgY3V0dGluZyBhIFRBQiAqLworCQlvZmZzZXQgPSBiZHAtPnRleHRjb2wgKyBiZHAtPnRleHRsZW4gLSAoc3BhY2VzICE9IDApOworCSAgICB9CisJICAgIGVsc2UgLyogc3BhY2VzID0gcGFkZGluZyB0byBibG9jayBlZGdlICovCisJICAgIHsKKwkJLyogaWYgJCB1c2VkLCBqdXN0IGFwcGVuZCB0byBFT0wgKGllIHNwYWNlcz09MCkgKi8KKwkJaWYgKCFiZHAtPmlzX01BWCkKKwkJICAgIHNwYWNlcyA9IChvYXAtPmVuZF92Y29sIC0gYmRwLT5lbmRfdmNvbCkgKyAxOworCQljb3VudCA9IHNwYWNlczsKKwkJb2Zmc2V0ID0gYmRwLT50ZXh0Y29sICsgYmRwLT50ZXh0bGVuOworCSAgICB9CisJfQorCisJbmV3cCA9IGFsbG9jX2NoZWNrKCh1bnNpZ25lZCkoU1RSTEVOKG9sZHApKSArIHNfbGVuICsgY291bnQgKyAxKTsKKwlpZiAobmV3cCA9PSBOVUxMKQorCSAgICBjb250aW51ZTsKKworCS8qIGNvcHkgdXAgdG8gc2hpZnRlZCBwYXJ0ICovCisJbWNoX21lbW1vdmUobmV3cCwgb2xkcCwgKHNpemVfdCkob2Zmc2V0KSk7CisJb2xkcCArPSBvZmZzZXQ7CisKKwkvKiBpbnNlcnQgcHJlLXBhZGRpbmcgKi8KKwljb3B5X3NwYWNlcyhuZXdwICsgb2Zmc2V0LCAoc2l6ZV90KXNwYWNlcyk7CisKKwkvKiBjb3B5IHRoZSBuZXcgdGV4dCAqLworCW1jaF9tZW1tb3ZlKG5ld3AgKyBvZmZzZXQgKyBzcGFjZXMsIHMsIChzaXplX3Qpc19sZW4pOworCW9mZnNldCArPSBzX2xlbjsKKworCWlmIChzcGFjZXMgJiYgIWJkcC0+aXNfc2hvcnQpCisJeworCSAgICAvKiBpbnNlcnQgcG9zdC1wYWRkaW5nICovCisJICAgIGNvcHlfc3BhY2VzKG5ld3AgKyBvZmZzZXQgKyBzcGFjZXMsIChzaXplX3QpKHBfdHMgLSBzcGFjZXMpKTsKKwkgICAgLyogV2UncmUgc3BsaXR0aW5nIGEgVEFCLCBkb24ndCBjb3B5IGl0LiAqLworCSAgICBvbGRwKys7CisJICAgIC8qIFdlIGFsbG93ZWQgZm9yIHRoYXQgVEFCLCByZW1lbWJlciB0aGlzIG5vdyAqLworCSAgICBjb3VudCsrOworCX0KKworCWlmIChzcGFjZXMgPiAwKQorCSAgICBvZmZzZXQgKz0gY291bnQ7CisJbWNoX21lbW1vdmUobmV3cCArIG9mZnNldCwgb2xkcCwgKHNpemVfdCkoU1RSTEVOKG9sZHApICsgMSkpOworCisJbWxfcmVwbGFjZShsbnVtLCBuZXdwLCBGQUxTRSk7CisKKwlpZiAobG51bSA9PSBvYXAtPmVuZC5sbnVtKQorCXsKKwkgICAgLyogU2V0ICInXSIgbWFyayB0byB0aGUgZW5kIG9mIHRoZSBibG9jayBpbnN0ZWFkIG9mIHRoZSBlbmQgb2YKKwkgICAgICogdGhlIGluc2VydCBpbiB0aGUgZmlyc3QgbGluZS4gICovCisJICAgIGN1cmJ1Zi0+Yl9vcF9lbmQubG51bSA9IG9hcC0+ZW5kLmxudW07CisJICAgIGN1cmJ1Zi0+Yl9vcF9lbmQuY29sID0gb2Zmc2V0OworCX0KKyAgICB9IC8qIGZvciBhbGwgbG51bSAqLworCisgICAgY2hhbmdlZF9saW5lcyhvYXAtPnN0YXJ0LmxudW0gKyAxLCAwLCBvYXAtPmVuZC5sbnVtICsgMSwgMEwpOworCisgICAgU3RhdGUgPSBvbGRzdGF0ZTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0xJU1ApIHx8IGRlZmluZWQoRkVBVF9DSU5ERU5UKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIG9wX3JlaW5kZW50IC0gaGFuZGxlIHJlaW5kZW50aW5nIGEgYmxvY2sgb2YgbGluZXMuCisgKi8KKyAgICB2b2lkCitvcF9yZWluZGVudChvYXAsIGhvdykKKyAgICBvcGFyZ19UCSpvYXA7CisgICAgaW50CQkoKmhvdykgX19BUkdTKCh2b2lkKSk7Cit7CisgICAgbG9uZwlpOworICAgIGNoYXJfdQkqbDsKKyAgICBpbnQJCWNvdW50OworICAgIGxpbmVucl9UCWZpcnN0X2NoYW5nZWQgPSAwOworICAgIGxpbmVucl9UCWxhc3RfY2hhbmdlZCA9IDA7CisgICAgbGluZW5yX1QJc3RhcnRfbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKworICAgIGZvciAoaSA9IG9hcC0+bGluZV9jb3VudDsgLS1pID49IDAgJiYgIWdvdF9pbnQ7ICkKKyAgICB7CisJLyogaXQncyBhIHNsb3cgdGhpbmcgdG8gZG8sIHNvIGdpdmUgZmVlZGJhY2sgc28gdGhlcmUncyBubyB3b3JyeSB0aGF0CisJICogdGhlIGNvbXB1dGVyJ3MganVzdCBodW5nLiAqLworCisJaWYgKGkgPiAxCisJCSYmIChpICUgNTAgPT0gMCB8fCBpID09IG9hcC0+bGluZV9jb3VudCAtIDEpCisJCSYmIG9hcC0+bGluZV9jb3VudCA+IHBfcmVwb3J0KQorCSAgICBzbXNnKChjaGFyX3UgKilfKCIlbGQgbGluZXMgdG8gaW5kZW50Li4uICIpLCBpKTsKKworCS8qCisJICogQmUgdmktY29tcGF0aWJsZTogRm9yIGxpc3AgaW5kZW50aW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdAorCSAqIGluZGVudGVkLCB1bmxlc3MgdGhlcmUgaXMgb25seSBvbmUgbGluZS4KKwkgKi8KKyNpZmRlZiBGRUFUX0xJU1AKKwlpZiAoaSAhPSBvYXAtPmxpbmVfY291bnQgLSAxIHx8IG9hcC0+bGluZV9jb3VudCA9PSAxCisJCQkJCQkgICAgfHwgaG93ICE9IGdldF9saXNwX2luZGVudCkKKyNlbmRpZgorCXsKKwkgICAgbCA9IHNraXB3aGl0ZShtbF9nZXRfY3VybGluZSgpKTsKKwkgICAgaWYgKCpsID09IE5VTCkJCSAgICAvKiBlbXB0eSBvciBibGFuayBsaW5lICovCisJCWNvdW50ID0gMDsKKwkgICAgZWxzZQorCQljb3VudCA9IGhvdygpOwkJICAgIC8qIGdldCB0aGUgaW5kZW50IGZvciB0aGlzIGxpbmUgKi8KKworCSAgICBpZiAoc2V0X2luZGVudChjb3VudCwgU0lOX1VORE8pKQorCSAgICB7CisJCS8qIGRpZCBjaGFuZ2UgdGhlIGluZGVudCwgY2FsbCBjaGFuZ2VkX2xpbmVzKCkgbGF0ZXIgKi8KKwkJaWYgKGZpcnN0X2NoYW5nZWQgPT0gMCkKKwkJICAgIGZpcnN0X2NoYW5nZWQgPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJCWxhc3RfY2hhbmdlZCA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKwkgICAgfQorCX0KKwkrK2N1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICB9CisKKyAgICAvKiBwdXQgY3Vyc29yIG9uIGZpcnN0IG5vbi1ibGFuayBvZiBpbmRlbnRlZCBsaW5lICovCisgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gc3RhcnRfbG51bTsKKyAgICBiZWdpbmxpbmUoQkxfU09MIHwgQkxfRklYKTsKKworICAgIC8qIE1hcmsgY2hhbmdlZCBsaW5lcyBzbyB0aGF0IHRoZXkgd2lsbCBiZSByZWRyYXduLiAgV2hlbiBWaXN1YWwKKyAgICAgKiBoaWdobGlnaHRpbmcgd2FzIHByZXNlbnQsIG5lZWQgdG8gY29udGludWUgdW50aWwgdGhlIGxhc3QgbGluZS4gIFdoZW4KKyAgICAgKiB0aGVyZSBpcyBubyBjaGFuZ2Ugc3RpbGwgbmVlZCB0byByZW1vdmUgdGhlIFZpc3VhbCBoaWdobGlnaHRpbmcuICovCisgICAgaWYgKGxhc3RfY2hhbmdlZCAhPSAwKQorCWNoYW5nZWRfbGluZXMoZmlyc3RfY2hhbmdlZCwgMCwKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQlvYXAtPmlzX1ZJc3VhbCA/IHN0YXJ0X2xudW0gKyBvYXAtPmxpbmVfY291bnQgOgorI2VuZGlmCisJCWxhc3RfY2hhbmdlZCArIDEsIDBMKTsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGVsc2UgaWYgKG9hcC0+aXNfVklzdWFsKQorCXJlZHJhd19jdXJidWZfbGF0ZXIoSU5WRVJURUQpOworI2VuZGlmCisKKyAgICBpZiAob2FwLT5saW5lX2NvdW50ID4gcF9yZXBvcnQpCisgICAgeworCWkgPSBvYXAtPmxpbmVfY291bnQgLSAoaSArIDEpOworCWlmIChpID09IDEpCisJICAgIE1TRyhfKCIxIGxpbmUgaW5kZW50ZWQgIikpOworCWVsc2UKKwkgICAgc21zZygoY2hhcl91ICopXygiJWxkIGxpbmVzIGluZGVudGVkICIpLCBpKTsKKyAgICB9CisgICAgLyogc2V0ICdbIGFuZCAnXSBtYXJrcyAqLworICAgIGN1cmJ1Zi0+Yl9vcF9zdGFydCA9IG9hcC0+c3RhcnQ7CisgICAgY3VyYnVmLT5iX29wX2VuZCA9IG9hcC0+ZW5kOworfQorI2VuZGlmIC8qIGRlZmluZWQoRkVBVF9MSVNQKSB8fCBkZWZpbmVkKEZFQVRfQ0lOREVOVCkgKi8KKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEtlZXAgdGhlIGxhc3QgZXhwcmVzc2lvbiBsaW5lIGhlcmUsIGZvciByZXBlYXRpbmcuCisgKi8KK3N0YXRpYyBjaGFyX3UJKmV4cHJfbGluZSA9IE5VTEw7CisKKy8qCisgKiBHZXQgYW4gZXhwcmVzc2lvbiBmb3IgdGhlICJcIj1leHByMSIgb3IgIkNUUkwtUiA9ZXhwcjEiCisgKiBSZXR1cm5zICc9JyB3aGVuIE9LLCBOVUwgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitnZXRfZXhwcl9yZWdpc3RlcigpCit7CisgICAgY2hhcl91CSpuZXdfbGluZTsKKworICAgIG5ld19saW5lID0gZ2V0Y21kbGluZSgnPScsIDBMLCAwKTsKKyAgICBpZiAobmV3X2xpbmUgPT0gTlVMTCkKKwlyZXR1cm4gTlVMOworICAgIGlmICgqbmV3X2xpbmUgPT0gTlVMKQkvKiB1c2UgcHJldmlvdXMgbGluZSAqLworCXZpbV9mcmVlKG5ld19saW5lKTsKKyAgICBlbHNlCisJc2V0X2V4cHJfbGluZShuZXdfbGluZSk7CisgICAgcmV0dXJuICc9JzsKK30KKworLyoKKyAqIFNldCB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlICc9JyByZWdpc3Rlci4KKyAqIEFyZ3VtZW50IG11c3QgYmUgYW4gYWxsb2NhdGVkIHN0cmluZy4KKyAqLworICAgIHZvaWQKK3NldF9leHByX2xpbmUobmV3X2xpbmUpCisgICAgY2hhcl91CSpuZXdfbGluZTsKK3sKKyAgICB2aW1fZnJlZShleHByX2xpbmUpOworICAgIGV4cHJfbGluZSA9IG5ld19saW5lOworfQorCisvKgorICogR2V0IHRoZSByZXN1bHQgb2YgdGhlICc9JyByZWdpc3RlciBleHByZXNzaW9uLgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSwgb3IgTlVMTCBmb3IgZmFpbHVyZS4KKyAqLworICAgIGNoYXJfdSAqCitnZXRfZXhwcl9saW5lKCkKK3sKKyAgICBjaGFyX3UJKmV4cHJfY29weTsKKyAgICBjaGFyX3UJKnJ2OworCisgICAgaWYgKGV4cHJfbGluZSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgLyogTWFrZSBhIGNvcHkgb2YgdGhlIGV4cHJlc3Npb24sIGJlY2F1c2UgZXZhbHVhdGluZyBpdCBtYXkgY2F1c2UgaXQgdG8gYmUKKyAgICAgKiBjaGFuZ2VkLiAqLworICAgIGV4cHJfY29weSA9IHZpbV9zdHJzYXZlKGV4cHJfbGluZSk7CisgICAgaWYgKGV4cHJfY29weSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgcnYgPSBldmFsX3RvX3N0cmluZyhleHByX2NvcHksIE5VTEwpOworICAgIHZpbV9mcmVlKGV4cHJfY29weSk7CisgICAgcmV0dXJuIHJ2OworfQorI2VuZGlmIC8qIEZFQVRfRVZBTCAqLworCisvKgorICogQ2hlY2sgaWYgJ3JlZ25hbWUnIGlzIGEgdmFsaWQgbmFtZSBvZiBhIHlhbmsgcmVnaXN0ZXIuCisgKiBOb3RlOiBUaGVyZSBpcyBubyBjaGVjayBmb3IgMCAoZGVmYXVsdCByZWdpc3RlciksIGNhbGxlciBzaG91bGQgZG8gdGhpcworICovCisgICAgaW50Cit2YWxpZF95YW5rX3JlZyhyZWduYW1lLCB3cml0aW5nKQorICAgIGludAkgICAgcmVnbmFtZTsKKyAgICBpbnQJICAgIHdyaXRpbmc7CSAgICAvKiBpZiBUUlVFIGNoZWNrIGZvciB3cml0YWJsZSByZWdpc3RlcnMgKi8KK3sKKyAgICBpZiAoICAgICAgIChyZWduYW1lID4gMCAmJiBBU0NJSV9JU0FMTlVNKHJlZ25hbWUpKQorCSAgICB8fCAoIXdyaXRpbmcgJiYgdmltX3N0cmNocigoY2hhcl91ICopCisjaWZkZWYgRkVBVF9FVkFMCisJCQkJICAgICIvLiUjOj0iCisjZWxzZQorCQkJCSAgICAiLy4lIzoiCisjZW5kaWYKKwkJCQkJLCByZWduYW1lKSAhPSBOVUxMKQorCSAgICB8fCByZWduYW1lID09ICciJworCSAgICB8fCByZWduYW1lID09ICctJworCSAgICB8fCByZWduYW1lID09ICdfJworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisJICAgIHx8IHJlZ25hbWUgPT0gJyonCisJICAgIHx8IHJlZ25hbWUgPT0gJysnCisjZW5kaWYKKyNpZmRlZiBGRUFUX0RORAorCSAgICB8fCAoIXdyaXRpbmcgJiYgcmVnbmFtZSA9PSAnficpCisjZW5kaWYKKwkJCQkJCQkpCisJcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogU2V0IHlfY3VycmVudCBhbmQgeV9hcHBlbmQsIGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2YgInJlZ25hbWUiLgorICogQ2Fubm90IGhhbmRsZSB0aGUgJ18nIHJlZ2lzdGVyLgorICoKKyAqIElmIHJlZ25hbWUgaXMgMCBhbmQgd3JpdGluZywgdXNlIHJlZ2lzdGVyIDAKKyAqIElmIHJlZ25hbWUgaXMgMCBhbmQgcmVhZGluZywgdXNlIHByZXZpb3VzIHJlZ2lzdGVyCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ2V0X3lhbmtfcmVnaXN0ZXIocmVnbmFtZSwgd3JpdGluZykKKyAgICBpbnQJICAgIHJlZ25hbWU7CisgICAgaW50CSAgICB3cml0aW5nOworeworICAgIGludAkgICAgaTsKKworICAgIHlfYXBwZW5kID0gRkFMU0U7CisgICAgaWYgKChyZWduYW1lID09IDAgfHwgcmVnbmFtZSA9PSAnIicpICYmICF3cml0aW5nICYmIHlfcHJldmlvdXMgIT0gTlVMTCkKKyAgICB7CisJeV9jdXJyZW50ID0geV9wcmV2aW91czsKKwlyZXR1cm47CisgICAgfQorICAgIGkgPSByZWduYW1lOworICAgIGlmIChWSU1fSVNESUdJVChpKSkKKwlpIC09ICcwJzsKKyAgICBlbHNlIGlmIChBU0NJSV9JU0xPV0VSKGkpKQorCWkgPSBDaGFyT3JkTG93KGkpICsgMTA7CisgICAgZWxzZSBpZiAoQVNDSUlfSVNVUFBFUihpKSkKKyAgICB7CisJaSA9IENoYXJPcmRVcChpKSArIDEwOworCXlfYXBwZW5kID0gVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVnbmFtZSA9PSAnLScpCisJaSA9IERFTEVUSU9OX1JFR0lTVEVSOworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgLyogV2hlbiBzZWxlY3Rpb24gaXMgbm90IGF2YWlsYWJsZSwgdXNlIHJlZ2lzdGVyIDAgaW5zdGVhZCBvZiAnKicgKi8KKyAgICBlbHNlIGlmIChjbGlwX3N0YXIuYXZhaWxhYmxlICYmIHJlZ25hbWUgPT0gJyonKQorCWkgPSBTVEFSX1JFR0lTVEVSOworICAgIC8qIFdoZW4gY2xpcGJvYXJkIGlzIG5vdCBhdmFpbGFibGUsIHVzZSByZWdpc3RlciAwIGluc3RlYWQgb2YgJysnICovCisgICAgZWxzZSBpZiAoY2xpcF9wbHVzLmF2YWlsYWJsZSAmJiByZWduYW1lID09ICcrJykKKwlpID0gUExVU19SRUdJU1RFUjsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRE5ECisgICAgZWxzZSBpZiAoIXdyaXRpbmcgJiYgcmVnbmFtZSA9PSAnficpCisJaSA9IFRJTERFX1JFR0lTVEVSOworI2VuZGlmCisgICAgZWxzZQkJLyogbm90IDAtOSwgYS16LCBBLVogb3IgJy0nOiB1c2UgcmVnaXN0ZXIgMCAqLworCWkgPSAwOworICAgIHlfY3VycmVudCA9ICYoeV9yZWdzW2ldKTsKKyAgICBpZiAod3JpdGluZykJLyogcmVtZW1iZXIgdGhlIHJlZ2lzdGVyIHdlIHdyaXRlIGludG8gZm9yIGRvX3B1dCgpICovCisJeV9wcmV2aW91cyA9IHlfY3VycmVudDsKK30KKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisvKgorICogV2hlbiAicmVnbmFtZSIgaXMgYSBjbGlwYm9hcmQgcmVnaXN0ZXIsIG9idGFpbiB0aGUgc2VsZWN0aW9uLiAgSWYgaXQncyBub3QKKyAqIGF2YWlsYWJsZSByZXR1cm4gemVybywgb3RoZXJ3aXNlIHJldHVybiAicmVnbmFtZSIuCisgKi8KK3N0YXRpYyBpbnQgbWF5X2dldF9zZWxlY3Rpb24gX19BUkdTKChpbnQgcmVnbmFtZSkpOworCisgICAgc3RhdGljIGludAorbWF5X2dldF9zZWxlY3Rpb24ocmVnbmFtZSkKKyAgICBpbnQgcmVnbmFtZTsKK3sKKyAgICBpZiAocmVnbmFtZSA9PSAnKicpCisgICAgeworCWlmICghY2xpcF9zdGFyLmF2YWlsYWJsZSkKKwkgICAgcmVnbmFtZSA9IDA7CisJZWxzZQorCSAgICBjbGlwX2dldF9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7CisgICAgfQorICAgIGVsc2UgaWYgKHJlZ25hbWUgPT0gJysnKQorICAgIHsKKwlpZiAoIWNsaXBfcGx1cy5hdmFpbGFibGUpCisJICAgIHJlZ25hbWUgPSAwOworCWVsc2UKKwkgICAgY2xpcF9nZXRfc2VsZWN0aW9uKCZjbGlwX3BsdXMpOworICAgIH0KKyAgICByZXR1cm4gcmVnbmFtZTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1ZJU1VBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBPYnRhaW4gdGhlIGNvbnRlbnRzIG9mIGEgIm5vcm1hbCIgcmVnaXN0ZXIuIFRoZSByZWdpc3RlciBpcyBtYWRlIGVtcHR5LgorICogVGhlIHJldHVybmVkIHBvaW50ZXIgaGFzIGFsbG9jYXRlZCBtZW1vcnksIHVzZSBwdXRfcmVnaXN0ZXIoKSBsYXRlci4KKyAqLworICAgIHZvaWQgKgorZ2V0X3JlZ2lzdGVyKG5hbWUsIGNvcHkpCisgICAgaW50CQluYW1lOworICAgIGludAkJY29weTsJLyogbWFrZSBhIGNvcHksIGlmIEZBTFNFIG1ha2UgcmVnaXN0ZXIgZW1wdHkuICovCit7CisgICAgc3RhdGljIHN0cnVjdCB5YW5rcmVnCSpyZWc7CisgICAgaW50CQkJCWk7CisKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIC8qIFdoZW4gVmlzdWFsIGFyZWEgY2hhbmdlZCwgbWF5IGhhdmUgdG8gdXBkYXRlIHNlbGVjdGlvbi4gIE9idGFpbiB0aGUKKyAgICAgKiBzZWxlY3Rpb24gdG9vLiAqLworICAgIGlmIChuYW1lID09ICcqJyAmJiBjbGlwX3N0YXIuYXZhaWxhYmxlICYmIGNsaXBfaXNhdXRvc2VsKCkpCisgICAgeworCWNsaXBfdXBkYXRlX3NlbGVjdGlvbigpOworCW1heV9nZXRfc2VsZWN0aW9uKG5hbWUpOworICAgIH0KKyNlbmRpZgorCisgICAgZ2V0X3lhbmtfcmVnaXN0ZXIobmFtZSwgMCk7CisgICAgcmVnID0gKHN0cnVjdCB5YW5rcmVnICopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihzdHJ1Y3QgeWFua3JlZykpOworICAgIGlmIChyZWcgIT0gTlVMTCkKKyAgICB7CisJKnJlZyA9ICp5X2N1cnJlbnQ7CisJaWYgKGNvcHkpCisJeworCSAgICAvKiBJZiB3ZSBydW4gb3V0IG9mIG1lbW9yeSBzb21lIG9yIGFsbCBvZiB0aGUgbGluZXMgYXJlIGVtcHR5LiAqLworCSAgICBpZiAocmVnLT55X3NpemUgPT0gMCkKKwkJcmVnLT55X2FycmF5ID0gTlVMTDsKKwkgICAgZWxzZQorCQlyZWctPnlfYXJyYXkgPSAoY2hhcl91ICoqKWFsbG9jKCh1bnNpZ25lZCkoc2l6ZW9mKGNoYXJfdSAqKQorCQkJCQkJCSAgICAgICogcmVnLT55X3NpemUpKTsKKwkgICAgaWYgKHJlZy0+eV9hcnJheSAhPSBOVUxMKQorCSAgICB7CisJCWZvciAoaSA9IDA7IGkgPCByZWctPnlfc2l6ZTsgKytpKQorCQkgICAgcmVnLT55X2FycmF5W2ldID0gdmltX3N0cnNhdmUoeV9jdXJyZW50LT55X2FycmF5W2ldKTsKKwkgICAgfQorCX0KKwllbHNlCisJICAgIHlfY3VycmVudC0+eV9hcnJheSA9IE5VTEw7CisgICAgfQorICAgIHJldHVybiAodm9pZCAqKXJlZzsKK30KKworLyoKKyAqIFB1dCAicmVnIiBpbnRvIHJlZ2lzdGVyICJuYW1lIi4gIEZyZWUgYW55IHByZXZpb3VzIGNvbnRlbnRzLgorICovCisgICAgdm9pZAorcHV0X3JlZ2lzdGVyKG5hbWUsIHJlZykKKyAgICBpbnQJCW5hbWU7CisgICAgdm9pZAkqcmVnOworeworICAgIGdldF95YW5rX3JlZ2lzdGVyKG5hbWUsIDApOworICAgIGZyZWVfeWFua19hbGwoKTsKKyAgICAqeV9jdXJyZW50ID0gKihzdHJ1Y3QgeWFua3JlZyAqKXJlZzsKKworIyBpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIC8qIFNlbmQgdGV4dCB3cml0dGVuIHRvIGNsaXBib2FyZCByZWdpc3RlciB0byB0aGUgY2xpcGJvYXJkLiAqLworICAgIG1heV9zZXRfc2VsZWN0aW9uKCk7CisjIGVuZGlmCit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9NT1VTRSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiByZXR1cm4gVFJVRSBpZiB0aGUgY3VycmVudCB5YW5rIHJlZ2lzdGVyIGhhcyB0eXBlIE1MSU5FCisgKi8KKyAgICBpbnQKK3lhbmtfcmVnaXN0ZXJfbWxpbmUocmVnbmFtZSkKKyAgICBpbnQJICAgIHJlZ25hbWU7Cit7CisgICAgaWYgKHJlZ25hbWUgIT0gMCAmJiAhdmFsaWRfeWFua19yZWcocmVnbmFtZSwgRkFMU0UpKQorCXJldHVybiBGQUxTRTsKKyAgICBpZiAocmVnbmFtZSA9PSAnXycpCQkvKiBibGFjayBob2xlIGlzIGFsd2F5cyBlbXB0eSAqLworCXJldHVybiBGQUxTRTsKKyAgICBnZXRfeWFua19yZWdpc3RlcihyZWduYW1lLCBGQUxTRSk7CisgICAgcmV0dXJuICh5X2N1cnJlbnQtPnlfdHlwZSA9PSBNTElORSk7Cit9CisjZW5kaWYKKworLyoKKyAqIHN0YXJ0IG9yIHN0b3AgcmVjb3JkaW5nIGludG8gYSB5YW5rIHJlZ2lzdGVyCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50Citkb19yZWNvcmQoYykKKyAgICBpbnQgYzsKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgc3RhdGljIGludAlyZWduYW1lOworICAgIHN0cnVjdCB5YW5rcmVnICpvbGRfeV9wcmV2aW91cywgKm9sZF95X2N1cnJlbnQ7CisgICAgaW50CQlyZXR2YWw7CisKKyAgICBpZiAoUmVjb3JkaW5nID09IEZBTFNFKQkgICAgLyogc3RhcnQgcmVjb3JkaW5nICovCisgICAgeworCQkJLyogcmVnaXN0ZXJzIDAtOSwgYS16IGFuZCAiIGFyZSBhbGxvd2VkICovCisJaWYgKGMgPCAwIHx8ICghQVNDSUlfSVNBTE5VTShjKSAmJiBjICE9ICciJykpCisJICAgIHJldHZhbCA9IEZBSUw7CisJZWxzZQorCXsKKwkgICAgUmVjb3JkaW5nID0gVFJVRTsKKwkgICAgc2hvd21vZGUoKTsKKwkgICAgcmVnbmFtZSA9IGM7CisJICAgIHJldHZhbCA9IE9LOworCX0KKyAgICB9CisgICAgZWxzZQkJCSAgICAvKiBzdG9wIHJlY29yZGluZyAqLworICAgIHsKKwkvKgorCSAqIEdldCB0aGUgcmVjb3JkZWQga2V5IGhpdHMuICBLX1NQRUNJQUwgYW5kIENTSSB3aWxsIGJlIGVzY2FwZWQsIHNvCisJICogdGhhdCB0aGUgcmVnaXN0ZXIgY2FuIGJlIHB1dCBpbnRvIHRoZSB0eXBlYWhlYWQgYnVmZmVyIHdpdGhvdXQKKwkgKiB0cmFuc2xhdGlvbi4KKwkgKi8KKwlSZWNvcmRpbmcgPSBGQUxTRTsKKwlNU0coIiIpOworCXAgPSBnZXRfcmVjb3JkZWQoKTsKKwlpZiAocCA9PSBOVUxMKQorCSAgICByZXR2YWwgPSBGQUlMOworCWVsc2UKKwl7CisJICAgIC8qCisJICAgICAqIFdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHJlZ2lzdGVyIGhlcmUsIHNvIHNhdmUgYW5kCisJICAgICAqIHJlc3RvcmUgdGhlIGN1cnJlbnQgcmVnaXN0ZXIgbmFtZS4KKwkgICAgICovCisJICAgIG9sZF95X3ByZXZpb3VzID0geV9wcmV2aW91czsKKwkgICAgb2xkX3lfY3VycmVudCA9IHlfY3VycmVudDsKKworCSAgICByZXR2YWwgPSBzdHVmZl95YW5rKHJlZ25hbWUsIHApOworCisJICAgIHlfcHJldmlvdXMgPSBvbGRfeV9wcmV2aW91czsKKwkgICAgeV9jdXJyZW50ID0gb2xkX3lfY3VycmVudDsKKwl9CisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBTdHVmZiBzdHJpbmcgInAiIGludG8geWFuayByZWdpc3RlciAicmVnbmFtZSIgYXMgYSBzaW5nbGUgbGluZSAoYXBwZW5kIGlmCisgKiB1cHBlcmNhc2UpLgkicCIgbXVzdCBoYXZlIGJlZW4gYWxsb2NlZC4KKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBzdGF0aWMgaW50CitzdHVmZl95YW5rKHJlZ25hbWUsIHApCisgICAgaW50CQlyZWduYW1lOworICAgIGNoYXJfdQkqcDsKK3sKKyAgICBjaGFyX3UJKmxwOworICAgIGNoYXJfdQkqKnBwOworCisgICAgLyogY2hlY2sgZm9yIHJlYWQtb25seSByZWdpc3RlciAqLworICAgIGlmIChyZWduYW1lICE9IDAgJiYgIXZhbGlkX3lhbmtfcmVnKHJlZ25hbWUsIFRSVUUpKQorICAgIHsKKwl2aW1fZnJlZShwKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisgICAgaWYgKHJlZ25hbWUgPT0gJ18nKQkJICAgIC8qIGJsYWNrIGhvbGU6IGRvbid0IGRvIGFueXRoaW5nICovCisgICAgeworCXZpbV9mcmVlKHApOworCXJldHVybiBPSzsKKyAgICB9CisgICAgZ2V0X3lhbmtfcmVnaXN0ZXIocmVnbmFtZSwgVFJVRSk7CisgICAgaWYgKHlfYXBwZW5kICYmIHlfY3VycmVudC0+eV9hcnJheSAhPSBOVUxMKQorICAgIHsKKwlwcCA9ICYoeV9jdXJyZW50LT55X2FycmF5W3lfY3VycmVudC0+eV9zaXplIC0gMV0pOworCWxwID0gbGFsbG9jKChsb25nX3UpKFNUUkxFTigqcHApICsgU1RSTEVOKHApICsgMSksIFRSVUUpOworCWlmIChscCA9PSBOVUxMKQorCXsKKwkgICAgdmltX2ZyZWUocCk7CisJICAgIHJldHVybiBGQUlMOworCX0KKwlTVFJDUFkobHAsICpwcCk7CisJU1RSQ0FUKGxwLCBwKTsKKwl2aW1fZnJlZShwKTsKKwl2aW1fZnJlZSgqcHApOworCSpwcCA9IGxwOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWZyZWVfeWFua19hbGwoKTsKKwlpZiAoKHlfY3VycmVudC0+eV9hcnJheSA9CisJCQkoY2hhcl91ICoqKWFsbG9jKCh1bnNpZ25lZClzaXplb2YoY2hhcl91ICopKSkgPT0gTlVMTCkKKwl7CisJICAgIHZpbV9mcmVlKHApOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisJeV9jdXJyZW50LT55X2FycmF5WzBdID0gcDsKKwl5X2N1cnJlbnQtPnlfc2l6ZSA9IDE7CisJeV9jdXJyZW50LT55X3R5cGUgPSBNQ0hBUjsgIC8qIHVzZWQgdG8gYmUgTUxJTkUsIHdoeT8gKi8KKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogZXhlY3V0ZSBhIHlhbmsgcmVnaXN0ZXI6IGNvcHkgaXQgaW50byB0aGUgc3R1ZmYgYnVmZmVyCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50Citkb19leGVjcmVnKHJlZ25hbWUsIGNvbG9uLCBhZGRjcikKKyAgICBpbnQJICAgIHJlZ25hbWU7CisgICAgaW50CSAgICBjb2xvbjsJCS8qIGluc2VydCAnOicgYmVmb3JlIGVhY2ggbGluZSAqLworICAgIGludAkgICAgYWRkY3I7CQkvKiBhbHdheXMgYWRkICdcbicgdG8gZW5kIG9mIGxpbmUgKi8KK3sKKyAgICBzdGF0aWMgaW50CWxhc3RjID0gTlVMOworICAgIGxvbmcJaTsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlyZXR2YWwgPSBPSzsKKyAgICBpbnQJCXJlbWFwOworCisgICAgaWYgKHJlZ25hbWUgPT0gJ0AnKQkJCS8qIHJlcGVhdCBwcmV2aW91cyBvbmUgKi8KKwlyZWduYW1lID0gbGFzdGM7CisJCQkJCS8qIGNoZWNrIGZvciB2YWxpZCByZWduYW1lICovCisgICAgaWYgKHJlZ25hbWUgPT0gJyUnIHx8IHJlZ25hbWUgPT0gJyMnIHx8ICF2YWxpZF95YW5rX3JlZyhyZWduYW1lLCBGQUxTRSkpCisJcmV0dXJuIEZBSUw7CisgICAgbGFzdGMgPSByZWduYW1lOworCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKyAgICByZWduYW1lID0gbWF5X2dldF9zZWxlY3Rpb24ocmVnbmFtZSk7CisjZW5kaWYKKworICAgIGlmIChyZWduYW1lID09ICdfJykJCQkvKiBibGFjayBob2xlOiBkb24ndCBzdHVmZiBhbnl0aGluZyAqLworCXJldHVybiBPSzsKKworI2lmZGVmIEZFQVRfQ01ESElTVAorICAgIGlmIChyZWduYW1lID09ICc6JykJCQkvKiB1c2UgbGFzdCBjb21tYW5kIGxpbmUgKi8KKyAgICB7CisJaWYgKGxhc3RfY21kbGluZSA9PSBOVUxMKQorCXsKKwkgICAgRU1TRyhfKGVfbm9sYXN0Y21kKSk7CisJICAgIHJldHVybiBGQUlMOworCX0KKwl2aW1fZnJlZShuZXdfbGFzdF9jbWRsaW5lKTsgLyogZG9uJ3Qga2VlcCB0aGUgY21kbGluZSBjb250YWluaW5nIEA6ICovCisJbmV3X2xhc3RfY21kbGluZSA9IE5VTEw7CisJcmV0dmFsID0gcHV0X2luX3R5cGVidWYobGFzdF9jbWRsaW5lLCBUUlVFKTsKKyAgICB9CisjZW5kaWYKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBlbHNlIGlmIChyZWduYW1lID09ICc9JykKKyAgICB7CisJcCA9IGdldF9leHByX2xpbmUoKTsKKwlpZiAocCA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFJTDsKKwlyZXR2YWwgPSBwdXRfaW5fdHlwZWJ1ZihwLCBjb2xvbik7CisJdmltX2ZyZWUocCk7CisgICAgfQorI2VuZGlmCisgICAgZWxzZSBpZiAocmVnbmFtZSA9PSAnLicpCQkvKiB1c2UgbGFzdCBpbnNlcnRlZCB0ZXh0ICovCisgICAgeworCXAgPSBnZXRfbGFzdF9pbnNlcnRfc2F2ZSgpOworCWlmIChwID09IE5VTEwpCisJeworCSAgICBFTVNHKF8oZV9ub2luc3RleHQpKTsKKwkgICAgcmV0dXJuIEZBSUw7CisJfQorCXJldHZhbCA9IHB1dF9pbl90eXBlYnVmKHAsIGNvbG9uKTsKKwl2aW1fZnJlZShwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlnZXRfeWFua19yZWdpc3RlcihyZWduYW1lLCBGQUxTRSk7CisJaWYgKHlfY3VycmVudC0+eV9hcnJheSA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFJTDsKKworCS8qIERpc2FsbG93IHJlbWFwaW5nIGZvciAiOkByIi4gKi8KKwlyZW1hcCA9IGNvbG9uID8gUkVNQVBfTk9ORSA6IFJFTUFQX1lFUzsKKworCS8qCisJICogSW5zZXJ0IGxpbmVzIGludG8gdHlwZWFoZWFkIGJ1ZmZlciwgZnJvbSBsYXN0IG9uZSB0byBmaXJzdCBvbmUuCisJICovCisJcHV0X3JlZWRpdF9pbl90eXBlYnVmKCk7CisJZm9yIChpID0geV9jdXJyZW50LT55X3NpemU7IC0taSA+PSAwOyApCisJeworCSAgICAvKiBpbnNlcnQgTkwgYmV0d2VlbiBsaW5lcyBhbmQgYWZ0ZXIgbGFzdCBsaW5lIGlmIHR5cGUgaXMgTUxJTkUgKi8KKwkgICAgaWYgKHlfY3VycmVudC0+eV90eXBlID09IE1MSU5FIHx8IGkgPCB5X2N1cnJlbnQtPnlfc2l6ZSAtIDEKKwkJCQkJCQkJICAgICB8fCBhZGRjcikKKwkgICAgeworCQlpZiAoaW5zX3R5cGVidWYoKGNoYXJfdSAqKSJcbiIsIHJlbWFwLCAwLCBUUlVFLCBGQUxTRSkgPT0gRkFJTCkKKwkJICAgIHJldHVybiBGQUlMOworCSAgICB9CisJICAgIGlmIChpbnNfdHlwZWJ1Zih5X2N1cnJlbnQtPnlfYXJyYXlbaV0sIHJlbWFwLCAwLCBUUlVFLCBGQUxTRSkKKwkJCQkJCQkJICAgICAgPT0gRkFJTCkKKwkJcmV0dXJuIEZBSUw7CisJICAgIGlmIChjb2xvbiAmJiBpbnNfdHlwZWJ1ZigoY2hhcl91ICopIjoiLCByZW1hcCwgMCwgVFJVRSwgRkFMU0UpCisJCQkJCQkJCSAgICAgID09IEZBSUwpCisJCXJldHVybiBGQUlMOworCX0KKwlFeGVjX3JlZyA9IFRSVUU7CS8qIGRpc2FibGUgdGhlICdxJyBjb21tYW5kICovCisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBJZiAicmVzdGFydF9lZGl0IiBpcyBub3QgemVybywgcHV0IGl0IGluIHRoZSB0eXBlYWhlYWQgYnVmZmVyLCBzbyB0aGF0IGl0J3MKKyAqIHVzZWQgb25seSBhZnRlciBvdGhlciB0eXBlYWhlYWQgaGFzIGJlZW4gcHJvY2Vzc2VkLgorICovCisgICAgc3RhdGljIHZvaWQKK3B1dF9yZWVkaXRfaW5fdHlwZWJ1ZigpCit7CisgICAgY2hhcl91CWJ1ZlszXTsKKworICAgIGlmIChyZXN0YXJ0X2VkaXQgIT0gTlVMKQorICAgIHsKKwlpZiAocmVzdGFydF9lZGl0ID09ICdWJykKKwl7CisJICAgIGJ1ZlswXSA9ICdnJzsKKwkgICAgYnVmWzFdID0gJ1InOworCSAgICBidWZbMl0gPSBOVUw7CisJfQorCWVsc2UKKwl7CisJICAgIGJ1ZlswXSA9IHJlc3RhcnRfZWRpdCA9PSAnSScgPyAnaScgOiByZXN0YXJ0X2VkaXQ7CisJICAgIGJ1ZlsxXSA9IE5VTDsKKwl9CisJaWYgKGluc190eXBlYnVmKGJ1ZiwgUkVNQVBfTk9ORSwgMCwgVFJVRSwgRkFMU0UpID09IE9LKQorCSAgICByZXN0YXJ0X2VkaXQgPSBOVUw7CisgICAgfQorfQorCisgICAgc3RhdGljIGludAorcHV0X2luX3R5cGVidWYocywgY29sb24pCisgICAgY2hhcl91CSpzOworICAgIGludAkJY29sb247CSAgICAvKiBhZGQgJzonIGJlZm9yZSB0aGUgbGluZSAqLworeworICAgIGludAkJcmV0dmFsID0gT0s7CisKKyAgICBwdXRfcmVlZGl0X2luX3R5cGVidWYoKTsKKyAgICBpZiAoY29sb24pCisJcmV0dmFsID0gaW5zX3R5cGVidWYoKGNoYXJfdSAqKSJcbiIsIFJFTUFQX1lFUywgMCwgVFJVRSwgRkFMU0UpOworICAgIGlmIChyZXR2YWwgPT0gT0spCisJcmV0dmFsID0gaW5zX3R5cGVidWYocywgUkVNQVBfWUVTLCAwLCBUUlVFLCBGQUxTRSk7CisgICAgaWYgKGNvbG9uICYmIHJldHZhbCA9PSBPSykKKwlyZXR2YWwgPSBpbnNfdHlwZWJ1ZigoY2hhcl91ICopIjoiLCBSRU1BUF9ZRVMsIDAsIFRSVUUsIEZBTFNFKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogSW5zZXJ0IGEgeWFuayByZWdpc3RlcjogY29weSBpdCBpbnRvIHRoZSBSZWFkIGJ1ZmZlci4KKyAqIFVzZWQgYnkgQ1RSTC1SIGNvbW1hbmQgYW5kIG1pZGRsZSBtb3VzZSBidXR0b24gaW4gaW5zZXJ0IG1vZGUuCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CitpbnNlcnRfcmVnKHJlZ25hbWUsIGxpdGVyYWxseSkKKyAgICBpbnQJCXJlZ25hbWU7CisgICAgaW50CQlsaXRlcmFsbHk7CS8qIGluc2VydCBsaXRlcmFsbHksIG5vdCBhcyBpZiB0eXBlZCAqLworeworICAgIGxvbmcJaTsKKyAgICBpbnQJCXJldHZhbCA9IE9LOworICAgIGNoYXJfdQkqYXJnOworICAgIGludAkJYWxsb2NhdGVkOworCisgICAgLyoKKyAgICAgKiBJdCBpcyBwb3NzaWJsZSB0byBnZXQgaW50byBhbiBlbmRsZXNzIGxvb3AgYnkgaGF2aW5nIENUUkwtUiBhIGluCisgICAgICogcmVnaXN0ZXIgYSBhbmQgdGhlbiwgaW4gaW5zZXJ0IG1vZGUsIGRvaW5nIENUUkwtUiBhLgorICAgICAqIElmIHlvdSBoaXQgQ1RSTC1DLCB0aGUgbG9vcCB3aWxsIGJlIGJyb2tlbiBoZXJlLgorICAgICAqLworICAgIHVpX2JyZWFrY2hlY2soKTsKKyAgICBpZiAoZ290X2ludCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qIGNoZWNrIGZvciB2YWxpZCByZWduYW1lICovCisgICAgaWYgKHJlZ25hbWUgIT0gTlVMICYmICF2YWxpZF95YW5rX3JlZyhyZWduYW1lLCBGQUxTRSkpCisJcmV0dXJuIEZBSUw7CisKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIHJlZ25hbWUgPSBtYXlfZ2V0X3NlbGVjdGlvbihyZWduYW1lKTsKKyNlbmRpZgorCisgICAgaWYgKHJlZ25hbWUgPT0gJy4nKQkJCS8qIGluc2VydCBsYXN0IGluc2VydGVkIHRleHQgKi8KKwlyZXR2YWwgPSBzdHVmZl9pbnNlcnRlZChOVUwsIDFMLCBUUlVFKTsKKyAgICBlbHNlIGlmIChnZXRfc3BlY19yZWcocmVnbmFtZSwgJmFyZywgJmFsbG9jYXRlZCwgVFJVRSkpCisgICAgeworCWlmIChhcmcgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBSUw7CisJc3R1ZmZlc2NhcGVkKGFyZywgbGl0ZXJhbGx5KTsKKwlpZiAoYWxsb2NhdGVkKQorCSAgICB2aW1fZnJlZShhcmcpOworICAgIH0KKyAgICBlbHNlCQkJCS8qIG5hbWUgb3IgbnVtYmVyIHJlZ2lzdGVyICovCisgICAgeworCWdldF95YW5rX3JlZ2lzdGVyKHJlZ25hbWUsIEZBTFNFKTsKKwlpZiAoeV9jdXJyZW50LT55X2FycmF5ID09IE5VTEwpCisJICAgIHJldHZhbCA9IEZBSUw7CisJZWxzZQorCXsKKwkgICAgZm9yIChpID0gMDsgaSA8IHlfY3VycmVudC0+eV9zaXplOyArK2kpCisJICAgIHsKKwkJc3R1ZmZlc2NhcGVkKHlfY3VycmVudC0+eV9hcnJheVtpXSwgbGl0ZXJhbGx5KTsKKwkJLyoKKwkJICogSW5zZXJ0IGEgbmV3bGluZSBiZXR3ZWVuIGxpbmVzIGFuZCBhZnRlciBsYXN0IGxpbmUgaWYKKwkJICogeV90eXBlIGlzIE1MSU5FLgorCQkgKi8KKwkJaWYgKHlfY3VycmVudC0+eV90eXBlID09IE1MSU5FIHx8IGkgPCB5X2N1cnJlbnQtPnlfc2l6ZSAtIDEpCisJCSAgICBzdHVmZmNoYXJSZWFkYnVmZignXG4nKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogU3R1ZmYgYSBzdHJpbmcgaW50byB0aGUgdHlwZWFoZWFkIGJ1ZmZlciwgc3VjaCB0aGF0IGVkaXQoKSB3aWxsIGluc2VydCBpdAorICogbGl0ZXJhbGx5ICgibGl0ZXJhbGx5IiBUUlVFKSBvciBpbnRlcnByZXQgaXMgYXMgdHlwZWQgY2hhcmFjdGVycy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzdHVmZmVzY2FwZWQoYXJnLCBsaXRlcmFsbHkpCisgICAgY2hhcl91CSphcmc7CisgICAgaW50CQlsaXRlcmFsbHk7Cit7CisgICAgaW50CQljOworICAgIGNoYXJfdQkqc3RhcnQ7CisKKyAgICB3aGlsZSAoKmFyZyAhPSBOVUwpCisgICAgeworCS8qIFN0dWZmIGEgc2VxdWVuY2Ugb2Ygbm9ybWFsIEFTQ0lJIGNoYXJhY3RlcnMsIHRoYXQncyBmYXN0LiAgQWxzbworCSAqIHN0dWZmIEtfU1BFQ0lBTCB0byBnZXQgdGhlIGVmZmVjdCBvZiBhIHNwZWNpYWwga2V5IHdoZW4gImxpdGVyYWxseSIKKwkgKiBpcyBUUlVFLiAqLworCXN0YXJ0ID0gYXJnOworCXdoaWxlICgoKmFyZyA+PSAnICcKKyNpZm5kZWYgRUJDRElDCisJCSAgICAmJiAqYXJnIDwgREVMIC8qIEVCQ0RJQzogY2hhcnMgYWJvdmUgc3BhY2UgYXJlIG5vcm1hbCAqLworI2VuZGlmCisJCSAgICApCisJCXx8ICgqYXJnID09IEtfU1BFQ0lBTCAmJiAhbGl0ZXJhbGx5KSkKKwkgICAgKythcmc7CisJaWYgKGFyZyA+IHN0YXJ0KQorCSAgICBzdHVmZlJlYWRidWZmTGVuKHN0YXJ0LCAobG9uZykoYXJnIC0gc3RhcnQpKTsKKworCS8qIHN0dWZmIGEgc2luZ2xlIHNwZWNpYWwgY2hhcmFjdGVyICovCisJaWYgKCphcmcgIT0gTlVMKQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCWMgPSBtYl9wdHIyY2hhcl9hZHYoJmFyZyk7CisJICAgIGVsc2UKKyNlbmRpZgorCQljID0gKmFyZysrOworCSAgICBpZiAobGl0ZXJhbGx5ICYmICgoYyA8ICcgJyAmJiBjICE9IFRBQikgfHwgYyA9PSBERUwpKQorCQlzdHVmZmNoYXJSZWFkYnVmZihDdHJsX1YpOworCSAgICBzdHVmZmNoYXJSZWFkYnVmZihjKTsKKwl9CisgICAgfQorfQorCisvKgorICogSWYgInJlZ25hbWUiIGlzIGEgc3BlY2lhbCByZWdpc3RlciwgcmV0dXJuIGEgcG9pbnRlciB0byBpdHMgdmFsdWUuCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfc3BlY19yZWcocmVnbmFtZSwgYXJncCwgYWxsb2NhdGVkLCBlcnJtc2cpCisgICAgaW50CQlyZWduYW1lOworICAgIGNoYXJfdQkqKmFyZ3A7CisgICAgaW50CQkqYWxsb2NhdGVkOworICAgIGludAkJZXJybXNnOwkJLyogZ2l2ZSBlcnJvciBtZXNzYWdlIHdoZW4gZmFpbGluZyAqLworeworICAgIGludAkJY250OworCisgICAgKmFyZ3AgPSBOVUxMOworICAgICphbGxvY2F0ZWQgPSBGQUxTRTsKKyAgICBzd2l0Y2ggKHJlZ25hbWUpCisgICAgeworCWNhc2UgJyUnOgkJLyogZmlsZSBuYW1lICovCisJICAgIGlmIChlcnJtc2cpCisJCWNoZWNrX2ZuYW1lKCk7CS8qIHdpbGwgZ2l2ZSBlbXNnIGlmIG5vdCBzZXQgKi8KKwkgICAgKmFyZ3AgPSBjdXJidWYtPmJfZm5hbWU7CisJICAgIHJldHVybiBUUlVFOworCisJY2FzZSAnIyc6CQkvKiBhbHRlcm5hdGUgZmlsZSBuYW1lICovCisJICAgICphcmdwID0gZ2V0YWx0Zm5hbWUoZXJybXNnKTsJLyogbWF5IGdpdmUgZW1zZyBpZiBub3Qgc2V0ICovCisJICAgIHJldHVybiBUUlVFOworCisjaWZkZWYgRkVBVF9FVkFMCisJY2FzZSAnPSc6CQkvKiByZXN1bHQgb2YgZXhwcmVzc2lvbiAqLworCSAgICAqYXJncCA9IGdldF9leHByX2xpbmUoKTsKKwkgICAgKmFsbG9jYXRlZCA9IFRSVUU7CisJICAgIHJldHVybiBUUlVFOworI2VuZGlmCisKKwljYXNlICc6JzoJCS8qIGxhc3QgY29tbWFuZCBsaW5lICovCisJICAgIGlmIChsYXN0X2NtZGxpbmUgPT0gTlVMTCAmJiBlcnJtc2cpCisJCUVNU0coXyhlX25vbGFzdGNtZCkpOworCSAgICAqYXJncCA9IGxhc3RfY21kbGluZTsKKwkgICAgcmV0dXJuIFRSVUU7CisKKwljYXNlICcvJzoJCS8qIGxhc3Qgc2VhcmNoLXBhdHRlcm4gKi8KKwkgICAgaWYgKGxhc3Rfc2VhcmNoX3BhdCgpID09IE5VTEwgJiYgZXJybXNnKQorCQlFTVNHKF8oZV9ub3ByZXZyZSkpOworCSAgICAqYXJncCA9IGxhc3Rfc2VhcmNoX3BhdCgpOworCSAgICByZXR1cm4gVFJVRTsKKworCWNhc2UgJy4nOgkJLyogbGFzdCBpbnNlcnRlZCB0ZXh0ICovCisJICAgICphcmdwID0gZ2V0X2xhc3RfaW5zZXJ0X3NhdmUoKTsKKwkgICAgKmFsbG9jYXRlZCA9IFRSVUU7CisJICAgIGlmICgqYXJncCA9PSBOVUxMICYmIGVycm1zZykKKwkJRU1TRyhfKGVfbm9pbnN0ZXh0KSk7CisJICAgIHJldHVybiBUUlVFOworCisjaWZkZWYgRkVBVF9TRUFSQ0hQQVRICisJY2FzZSBDdHJsX0Y6CQkvKiBGaWxlbmFtZSB1bmRlciBjdXJzb3IgKi8KKwljYXNlIEN0cmxfUDoJCS8qIFBhdGggdW5kZXIgY3Vyc29yLCBleHBhbmQgdmlhICJwYXRoIiAqLworCSAgICBpZiAoIWVycm1zZykKKwkJcmV0dXJuIEZBTFNFOworCSAgICAqYXJncCA9IGZpbGVfbmFtZV9hdF9jdXJzb3IoRk5BTUVfTUVTUyB8IEZOQU1FX0hZUAorCQkJCXwgKHJlZ25hbWUgPT0gQ3RybF9QID8gRk5BTUVfRVhQIDogMCksIDFMKTsKKwkgICAgKmFsbG9jYXRlZCA9IFRSVUU7CisJICAgIHJldHVybiBUUlVFOworI2VuZGlmCisKKwljYXNlIEN0cmxfVzoJCS8qIHdvcmQgdW5kZXIgY3Vyc29yICovCisJY2FzZSBDdHJsX0E6CQkvKiBXT1JEIChtbmVtb25pYyBBbGwpIHVuZGVyIGN1cnNvciAqLworCSAgICBpZiAoIWVycm1zZykKKwkJcmV0dXJuIEZBTFNFOworCSAgICBjbnQgPSBmaW5kX2lkZW50X3VuZGVyX2N1cnNvcihhcmdwLCByZWduYW1lID09IEN0cmxfVworCQkJCSAgID8gIChGSU5EX0lERU5UfEZJTkRfU1RSSU5HKSA6IEZJTkRfU1RSSU5HKTsKKwkgICAgKmFyZ3AgPSBjbnQgPyB2aW1fc3RybnNhdmUoKmFyZ3AsIGNudCkgOiBOVUxMOworCSAgICAqYWxsb2NhdGVkID0gVFJVRTsKKwkgICAgcmV0dXJuIFRSVUU7CisKKwljYXNlICdfJzoJCS8qIGJsYWNrIGhvbGU6IGFsd2F5cyBlbXB0eSAqLworCSAgICAqYXJncCA9IChjaGFyX3UgKikiIjsKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogcGFzdGUgYSB5YW5rIHJlZ2lzdGVyIGludG8gdGhlIGNvbW1hbmQgbGluZS4KKyAqIHVzZWQgYnkgQ1RSTC1SIGNvbW1hbmQgaW4gY29tbWFuZC1saW5lIG1vZGUKKyAqIGluc2VydF9yZWcoKSBjYW4ndCBiZSB1c2VkIGhlcmUsIGJlY2F1c2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIGZyb20gdGhlCisgKiByZWdpc3RlciBjb250ZW50cyB3aWxsIGJlIGludGVycHJldGVkIGFzIGNvbW1hbmRzLgorICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAorY21kbGluZV9wYXN0ZShyZWduYW1lLCBsaXRlcmFsbHkpCisgICAgaW50IHJlZ25hbWU7CisgICAgaW50IGxpdGVyYWxseTsJLyogSW5zZXJ0IHRleHQgbGl0ZXJhbGx5IGluc3RlYWQgb2YgImFzIHR5cGVkIiAqLworeworICAgIGxvbmcJaTsKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBpbnQJCWFsbG9jYXRlZDsKKworICAgIC8qIGNoZWNrIGZvciB2YWxpZCByZWduYW1lOyBhbHNvIGFjY2VwdCBzcGVjaWFsIGNoYXJhY3RlcnMgZm9yIENUUkwtUiBpbgorICAgICAqIHRoZSBjb21tYW5kIGxpbmUgKi8KKyAgICBpZiAocmVnbmFtZSAhPSBDdHJsX0YgJiYgcmVnbmFtZSAhPSBDdHJsX1AgJiYgcmVnbmFtZSAhPSBDdHJsX1cKKwkgICAgJiYgcmVnbmFtZSAhPSBDdHJsX0EgJiYgIXZhbGlkX3lhbmtfcmVnKHJlZ25hbWUsIEZBTFNFKSkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qIEEgcmVnaXN0ZXIgY29udGFpbmluZyBDVFJMLVIgY2FuIGNhdXNlIGFuIGVuZGxlc3MgbG9vcC4gIEFsbG93IHVzaW5nCisgICAgICogQ1RSTC1DIHRvIGJyZWFrIHRoZSBsb29wLiAqLworICAgIGxpbmVfYnJlYWtjaGVjaygpOworICAgIGlmIChnb3RfaW50KQorCXJldHVybiBGQUlMOworCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKyAgICByZWduYW1lID0gbWF5X2dldF9zZWxlY3Rpb24ocmVnbmFtZSk7CisjZW5kaWYKKworICAgIGlmIChnZXRfc3BlY19yZWcocmVnbmFtZSwgJmFyZywgJmFsbG9jYXRlZCwgVFJVRSkpCisgICAgeworCWlmIChhcmcgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBSUw7CisJY21kbGluZV9wYXN0ZV9zdHIoYXJnLCBsaXRlcmFsbHkpOworCWlmIChhbGxvY2F0ZWQpCisJICAgIHZpbV9mcmVlKGFyZyk7CisJcmV0dXJuIE9LOworICAgIH0KKworICAgIGdldF95YW5rX3JlZ2lzdGVyKHJlZ25hbWUsIEZBTFNFKTsKKyAgICBpZiAoeV9jdXJyZW50LT55X2FycmF5ID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgeV9jdXJyZW50LT55X3NpemU7ICsraSkKKyAgICB7CisJY21kbGluZV9wYXN0ZV9zdHIoeV9jdXJyZW50LT55X2FycmF5W2ldLCBsaXRlcmFsbHkpOworCisJLyogaW5zZXJ0IF5NIGJldHdlZW4gbGluZXMgYW5kIGFmdGVyIGxhc3QgbGluZSBpZiB0eXBlIGlzIE1MSU5FICovCisJaWYgKHlfY3VycmVudC0+eV90eXBlID09IE1MSU5FIHx8IGkgPCB5X2N1cnJlbnQtPnlfc2l6ZSAtIDEpCisJICAgIGNtZGxpbmVfcGFzdGVfc3RyKChjaGFyX3UgKikiXHIiLCBsaXRlcmFsbHkpOworCisJLyogQ2hlY2sgZm9yIENUUkwtQywgaW4gY2FzZSBzb21lb25lIHRyaWVzIHRvIHBhc3RlIGEgZmV3IHRob3VzYW5kCisJICogbGluZXMgYW5kIGdldHMgYm9yZWQuICovCisJdWlfYnJlYWtjaGVjaygpOworCWlmIChnb3RfaW50KQorCSAgICByZXR1cm4gRkFJTDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogUHV0IGEgc3RyaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgKiBXaGVuICJsaXRlcmFsbHkiIGlzIFRSVUUsIGluc2VydCBsaXRlcmFsbHkuCisgKiBXaGVuICJsaXRlcmFsbHkiIGlzIEZBTFNFLCBpbnNlcnQgYXMgdHlwZWQsIGJ1dCBkb24ndCBsZWF2ZSB0aGUgY29tbWFuZAorICogbGluZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjbWRsaW5lX3Bhc3RlX3N0cihzLCBsaXRlcmFsbHkpCisgICAgY2hhcl91CSpzOworICAgIGludAkJbGl0ZXJhbGx5OworeworICAgIGludAkJYywgY3Y7CisKKyAgICBpZiAobGl0ZXJhbGx5KQorCXB1dF9vbl9jbWRsaW5lKHMsIC0xLCBUUlVFKTsKKyAgICBlbHNlCisJd2hpbGUgKCpzICE9IE5VTCkKKwl7CisJICAgIGN2ID0gKnM7CisJICAgIGlmIChjdiA9PSBDdHJsX1YgJiYgc1sxXSkKKwkJKytzOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkgICAgeworCQljID0gbWJfcHRyMmNoYXIocyk7CisJCXMgKz0gbWJfY2hhcjJsZW4oYyk7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJCWMgPSAqcysrOworCSAgICBpZiAoY3YgPT0gQ3RybF9WIHx8IGMgPT0gRVNDIHx8IGMgPT0gQ3RybF9DIHx8IGMgPT0gQ0FSIHx8IGMgPT0gTkwKKyNpZmRlZiBVTklYCisJCSAgICB8fCBjID09IGludHJfY2hhcgorI2VuZGlmCisJCSAgICB8fCAoYyA9PSBDdHJsX0JTTCAmJiAqcyA9PSBDdHJsX04pKQorCQlzdHVmZmNoYXJSZWFkYnVmZihDdHJsX1YpOworCSAgICBzdHVmZmNoYXJSZWFkYnVmZihjKTsKKwl9Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEFkanVzdCB0aGUgcmVnaXN0ZXIgbmFtZSBwb2ludGVkIHRvIHdpdGggInJwIiBmb3IgdGhlIGNsaXBib2FyZCBiZWluZworICogdXNlZCBhbHdheXMgYW5kIHRoZSBjbGlwYm9hcmQgYmVpbmcgYXZhaWxhYmxlLgorICovCisgICAgdm9pZAorYWRqdXN0X2NsaXBfcmVnKHJwKQorICAgIGludAkJKnJwOworeworICAgIC8qIElmIG5vIHJlZy4gc3BlY2lmaWVkLCBhbmQgInVubmFtZWQiIGlzIGluICdjbGlwYm9hcmQnLCB1c2UgJyonIHJlZy4gKi8KKyAgICBpZiAoKnJwID09IDAgJiYgY2xpcF91bm5hbWVkKQorCSpycCA9ICcqJzsKKyAgICBpZiAoIWNsaXBfc3Rhci5hdmFpbGFibGUgJiYgKnJwID09ICcqJykKKwkqcnAgPSAwOworICAgIGlmICghY2xpcF9wbHVzLmF2YWlsYWJsZSAmJiAqcnAgPT0gJysnKQorCSpycCA9IDA7Cit9CisjZW5kaWYKKworLyoKKyAqIG9wX2RlbGV0ZSAtIGhhbmRsZSBhIGRlbGV0ZSBvcGVyYXRpb24KKyAqCisgKiByZXR1cm4gRkFJTCBpZiB1bmRvIGZhaWxlZCwgT0sgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitvcF9kZWxldGUob2FwKQorICAgIG9wYXJnX1QgICAqb2FwOworeworICAgIGludAkJCW47CisgICAgbGluZW5yX1QJCWxudW07CisgICAgY2hhcl91CQkqcHRyOworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgY2hhcl91CQkqbmV3cCwgKm9sZHA7CisgICAgc3RydWN0IGJsb2NrX2RlZgliZDsKKyNlbmRpZgorICAgIGxpbmVucl9UCQlvbGRfbGNvdW50ID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisgICAgaW50CQkJZGlkX3lhbmsgPSBGQUxTRTsKKworICAgIGlmIChjdXJidWYtPmJfbWwubWxfZmxhZ3MgJiBNTF9FTVBUWSkJICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKwlyZXR1cm4gT0s7CisKKyAgICAvKiBOb3RoaW5nIHRvIGRlbGV0ZSwgcmV0dXJuIGhlcmUuCURvIHByZXBhcmUgdW5kbywgZm9yIG9wX2NoYW5nZSgpLiAqLworICAgIGlmIChvYXAtPmVtcHR5KQorCXJldHVybiB1X3NhdmVfY3Vyc29yKCk7CisKKyAgICBpZiAoIWN1cmJ1Zi0+Yl9wX21hKQorICAgIHsKKwlFTVNHKF8oZV9tb2RpZmlhYmxlKSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKyAgICBhZGp1c3RfY2xpcF9yZWcoJm9hcC0+cmVnbmFtZSk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoaGFzX21ieXRlKQorCW1iX2FkanVzdF9vcGVuZChvYXApOworI2VuZGlmCisKKy8qCisgKiBJbWl0YXRlIHRoZSBzdHJhbmdlIFZpIGJlaGF2aW91cjogSWYgdGhlIGRlbGV0ZSBzcGFucyBtb3JlIHRoYW4gb25lIGxpbmUKKyAqIGFuZCBtb3Rpb25fdHlwZSA9PSBNQ0hBUiBhbmQgdGhlIHJlc3VsdCBpcyBhIGJsYW5rIGxpbmUsIG1ha2UgdGhlIGRlbGV0ZQorICogbGluZXdpc2UuICBEb24ndCBkbyB0aGlzIGZvciB0aGUgY2hhbmdlIGNvbW1hbmQgb3IgVmlzdWFsIG1vZGUuCisgKi8KKyAgICBpZiAoICAgICAgIG9hcC0+bW90aW9uX3R5cGUgPT0gTUNIQVIKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCSAgICAmJiAhb2FwLT5pc19WSXN1YWwKKyNlbmRpZgorCSAgICAmJiBvYXAtPmxpbmVfY291bnQgPiAxCisJICAgICYmIG9hcC0+b3BfdHlwZSA9PSBPUF9ERUxFVEUpCisgICAgeworCXB0ciA9IG1sX2dldChvYXAtPmVuZC5sbnVtKSArIG9hcC0+ZW5kLmNvbCArIG9hcC0+aW5jbHVzaXZlOworCXB0ciA9IHNraXB3aGl0ZShwdHIpOworCWlmICgqcHRyID09IE5VTCAmJiBpbmluZGVudCgwKSkKKwkgICAgb2FwLT5tb3Rpb25fdHlwZSA9IE1MSU5FOworICAgIH0KKworLyoKKyAqIENoZWNrIGZvciB0cnlpbmcgdG8gZGVsZXRlIChlLmcuICJEIikgaW4gYW4gZW1wdHkgbGluZS4KKyAqIE5vdGU6IEZvciB0aGUgY2hhbmdlIG9wZXJhdG9yIGl0IGlzIG9rLgorICovCisgICAgaWYgKCAgICAgICBvYXAtPm1vdGlvbl90eXBlID09IE1DSEFSCisJICAgICYmIG9hcC0+bGluZV9jb3VudCA9PSAxCisJICAgICYmIG9hcC0+b3BfdHlwZSA9PSBPUF9ERUxFVEUKKwkgICAgJiYgKm1sX2dldChvYXAtPnN0YXJ0LmxudW0pID09IE5VTCkKKyAgICB7CisJLyoKKwkgKiBJdCdzIGFuIGVycm9yIHRvIG9wZXJhdGUgb24gYW4gZW1wdHkgcmVnaW9uLCB3aGVuICdFJyBpbmNsdWNkZWQgaW4KKwkgKiAnY3BvcHRpb25zJyAoVmkgY29tcGF0aWJsZSkuCisJICovCisJaWYgKHZpbV9zdHJjaHIocF9jcG8sIENQT19FTVBUWVJFR0lPTikgIT0gTlVMTCkKKwkgICAgYmVlcF9mbHVzaCgpOworCXJldHVybiBPSzsKKyAgICB9CisKKy8qCisgKiBEbyBhIHlhbmsgb2Ygd2hhdGV2ZXIgd2UncmUgYWJvdXQgdG8gZGVsZXRlLgorICogSWYgYSB5YW5rIHJlZ2lzdGVyIHdhcyBzcGVjaWZpZWQsIHB1dCB0aGUgZGVsZXRlZCB0ZXh0IGludG8gdGhhdCByZWdpc3Rlci4KKyAqIEZvciB0aGUgYmxhY2sgaG9sZSByZWdpc3RlciAnXycgZG9uJ3QgeWFuayBhbnl0aGluZy4KKyAqLworICAgIGlmIChvYXAtPnJlZ25hbWUgIT0gJ18nKQorICAgIHsKKwlpZiAob2FwLT5yZWduYW1lICE9IDApCisJeworCSAgICAvKiBjaGVjayBmb3IgcmVhZC1vbmx5IHJlZ2lzdGVyICovCisJICAgIGlmICghdmFsaWRfeWFua19yZWcob2FwLT5yZWduYW1lLCBUUlVFKSkKKwkgICAgeworCQliZWVwX2ZsdXNoKCk7CisJCXJldHVybiBPSzsKKwkgICAgfQorCSAgICBnZXRfeWFua19yZWdpc3RlcihvYXAtPnJlZ25hbWUsIFRSVUUpOyAvKiB5YW5rIGludG8gc3BlY2lmJ2QgcmVnLiAqLworCSAgICBpZiAob3BfeWFuayhvYXAsIFRSVUUsIEZBTFNFKSA9PSBPSykgICAvKiB5YW5rIHdpdGhvdXQgbWVzc2FnZSAqLworCQlkaWRfeWFuayA9IFRSVUU7CisJfQorCisJLyoKKwkgKiBQdXQgZGVsZXRlZCB0ZXh0IGludG8gcmVnaXN0ZXIgMSBhbmQgc2hpZnQgbnVtYmVyIHJlZ2lzdGVycyBpZiB0aGUKKwkgKiBkZWxldGUgY29udGFpbnMgYSBsaW5lIGJyZWFrLCBvciB3aGVuIGEgcmVnbmFtZSBoYXMgYmVlbiBzcGVjaWZpZWQuCisJICovCisJaWYgKG9hcC0+cmVnbmFtZSAhPSAwIHx8IG9hcC0+bW90aW9uX3R5cGUgPT0gTUxJTkUKKwkJCQkgICB8fCBvYXAtPmxpbmVfY291bnQgPiAxIHx8IG9hcC0+dXNlX3JlZ19vbmUpCisJeworCSAgICB5X2N1cnJlbnQgPSAmeV9yZWdzWzldOworCSAgICBmcmVlX3lhbmtfYWxsKCk7CQkJLyogZnJlZSByZWdpc3RlciBuaW5lICovCisJICAgIGZvciAobiA9IDk7IG4gPiAxOyAtLW4pCisJCXlfcmVnc1tuXSA9IHlfcmVnc1tuIC0gMV07CisJICAgIHlfcHJldmlvdXMgPSB5X2N1cnJlbnQgPSAmeV9yZWdzWzFdOworCSAgICB5X3JlZ3NbMV0ueV9hcnJheSA9IE5VTEw7CQkvKiBzZXQgcmVnaXN0ZXIgb25lIHRvIGVtcHR5ICovCisJICAgIGlmIChvcF95YW5rKG9hcCwgVFJVRSwgRkFMU0UpID09IE9LKQorCQlkaWRfeWFuayA9IFRSVUU7CisJfQorCisJLyogWWFuayBpbnRvIHNtYWxsIGRlbGV0ZSByZWdpc3RlciB3aGVuIG5vIHJlZ2lzdGVyIHNwZWNpZmllZCBhbmQgdGhlCisJICogZGVsZXRlIGlzIHdpdGhpbiBvbmUgbGluZS4gKi8KKwlpZiAob2FwLT5yZWduYW1lID09IDAgJiYgb2FwLT5tb3Rpb25fdHlwZSAhPSBNTElORQorCQkJCQkJICAgICAgJiYgb2FwLT5saW5lX2NvdW50ID09IDEpCisJeworCSAgICBvYXAtPnJlZ25hbWUgPSAnLSc7CisJICAgIGdldF95YW5rX3JlZ2lzdGVyKG9hcC0+cmVnbmFtZSwgVFJVRSk7CisJICAgIGlmIChvcF95YW5rKG9hcCwgVFJVRSwgRkFMU0UpID09IE9LKQorCQlkaWRfeWFuayA9IFRSVUU7CisJICAgIG9hcC0+cmVnbmFtZSA9IDA7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSdzIHRvbyBtdWNoIHN0dWZmIHRvIGZpdCBpbiB0aGUgeWFuayByZWdpc3RlciwgdGhlbiBnZXQgYQorCSAqIGNvbmZpcm1hdGlvbiBiZWZvcmUgZG9pbmcgdGhlIGRlbGV0ZS4gVGhpcyBpcyBjcnVkZSwgYnV0IHNpbXBsZS4KKwkgKiBBbmQgaXQgYXZvaWRzIGRvaW5nIGEgZGVsZXRlIG9mIHNvbWV0aGluZyB3ZSBjYW4ndCBwdXQgYmFjayBpZiB3ZQorCSAqIHdhbnQuCisJICovCisJaWYgKCFkaWRfeWFuaykKKwl7CisJICAgIGludCBtc2dfc2lsZW50X3NhdmUgPSBtc2dfc2lsZW50OworCisJICAgIG1zZ19zaWxlbnQgPSAwOwkvKiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdCAqLworCSAgICBuID0gYXNrX3llc25vKChjaGFyX3UgKilfKCJjYW5ub3QgeWFuazsgZGVsZXRlIGFueXdheSIpLCBUUlVFKTsKKwkgICAgbXNnX3NpbGVudCA9IG1zZ19zaWxlbnRfc2F2ZTsKKwkgICAgaWYgKG4gIT0gJ3knKQorCSAgICB7CisJCUVNU0coXyhlX2Fib3J0KSk7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfVklTVUFMCisvKgorICogYmxvY2sgbW9kZSBkZWxldGUKKyAqLworICAgIGlmIChvYXAtPmJsb2NrX21vZGUpCisgICAgeworCWlmICh1X3NhdmUoKGxpbmVucl9UKShvYXAtPnN0YXJ0LmxudW0gLSAxKSwKKwkJCSAgICAgICAobGluZW5yX1QpKG9hcC0+ZW5kLmxudW0gKyAxKSkgPT0gRkFJTCkKKwkgICAgcmV0dXJuIEZBSUw7CisKKwlmb3IgKGxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07IGxudW0gPD0gb2FwLT5lbmQubG51bTsgKytsbnVtKQorCXsKKwkgICAgYmxvY2tfcHJlcChvYXAsICZiZCwgbG51bSwgVFJVRSk7CisJICAgIGlmIChiZC50ZXh0bGVuID09IDApCS8qIG5vdGhpbmcgdG8gZGVsZXRlICovCisJCWNvbnRpbnVlOworCisJICAgIC8qIEFkanVzdCBjdXJzb3IgcG9zaXRpb24gZm9yIHRhYiByZXBsYWNlZCBieSBzcGFjZXMgYW5kICdsYnInLiAqLworCSAgICBpZiAobG51bSA9PSBjdXJ3aW4tPndfY3Vyc29yLmxudW0pCisJICAgIHsKKwkJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBiZC50ZXh0Y29sICsgYmQuc3RhcnRzcGFjZXM7CisjIGlmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworIyBlbmRpZgorCSAgICB9CisKKwkgICAgLyogbiA9PSBudW1iZXIgb2YgY2hhcnMgZGVsZXRlZAorCSAgICAgKiBJZiB3ZSBkZWxldGUgYSBUQUIsIGl0IG1heSBiZSByZXBsYWNlZCBieSBzZXZlcmFsIGNoYXJhY3RlcnMuCisJICAgICAqIFRodXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIG1heSBpbmNyZWFzZSEKKwkgICAgICovCisJICAgIG4gPSBiZC50ZXh0bGVuIC0gYmQuc3RhcnRzcGFjZXMgLSBiZC5lbmRzcGFjZXM7CisJICAgIG9sZHAgPSBtbF9nZXQobG51bSk7CisJICAgIG5ld3AgPSBhbGxvY19jaGVjaygodW5zaWduZWQpU1RSTEVOKG9sZHApICsgMSAtIG4pOworCSAgICBpZiAobmV3cCA9PSBOVUxMKQorCQljb250aW51ZTsKKwkgICAgLyogY29weSB1cCB0byBkZWxldGVkIHBhcnQgKi8KKwkgICAgbWNoX21lbW1vdmUobmV3cCwgb2xkcCwgKHNpemVfdCliZC50ZXh0Y29sKTsKKwkgICAgLyogaW5zZXJ0IHNwYWNlcyAqLworCSAgICBjb3B5X3NwYWNlcyhuZXdwICsgYmQudGV4dGNvbCwKKwkJCQkgICAgIChzaXplX3QpKGJkLnN0YXJ0c3BhY2VzICsgYmQuZW5kc3BhY2VzKSk7CisJICAgIC8qIGNvcHkgdGhlIHBhcnQgYWZ0ZXIgdGhlIGRlbGV0ZWQgcGFydCAqLworCSAgICBvbGRwICs9IGJkLnRleHRjb2wgKyBiZC50ZXh0bGVuOworCSAgICBtY2hfbWVtbW92ZShuZXdwICsgYmQudGV4dGNvbCArIGJkLnN0YXJ0c3BhY2VzICsgYmQuZW5kc3BhY2VzLAorCQkJCQkJICAgICAgb2xkcCwgU1RSTEVOKG9sZHApICsgMSk7CisJICAgIC8qIHJlcGxhY2UgdGhlIGxpbmUgKi8KKwkgICAgbWxfcmVwbGFjZShsbnVtLCBuZXdwLCBGQUxTRSk7CisJfQorCisJY2hlY2tfY3Vyc29yX2NvbCgpOworCWNoYW5nZWRfbGluZXMoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBjdXJ3aW4tPndfY3Vyc29yLmNvbCwKKwkJCQkJCSAgICAgICBvYXAtPmVuZC5sbnVtICsgMSwgMEwpOworCW9hcC0+bGluZV9jb3VudCA9IDA7CSAgICAvKiBubyBsaW5lcyBkZWxldGVkICovCisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCWlmIChvYXAtPm1vdGlvbl90eXBlID09IE1MSU5FKQorICAgIHsKKwlpZiAob2FwLT5vcF90eXBlID09IE9QX0NIQU5HRSkKKwl7CisJICAgIC8qIERlbGV0ZSB0aGUgbGluZXMgZXhjZXB0IHRoZSBmaXJzdCBvbmUuICBUZW1wb3JhcmlseSBtb3ZlIHRoZQorCSAgICAgKiBjdXJzb3IgdG8gdGhlIG5leHQgbGluZS4gIFNhdmUgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIsIGlmIHRoZQorCSAgICAgKiBsYXN0IGxpbmUgaXMgZGVsZXRlZCBpdCBtYXkgYmUgY2hhbmdlZC4KKwkgICAgICovCisJICAgIGlmIChvYXAtPmxpbmVfY291bnQgPiAxKQorCSAgICB7CisJCWxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJCSsrY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQlkZWxfbGluZXMoKGxvbmcpKG9hcC0+bGluZV9jb3VudCAtIDEpLCBUUlVFKTsKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbG51bTsKKwkgICAgfQorCSAgICBpZiAodV9zYXZlX2N1cnNvcigpID09IEZBSUwpCisJCXJldHVybiBGQUlMOworCSAgICBpZiAoY3VyYnVmLT5iX3BfYWkpCQkgICAgLyogZG9uJ3QgZGVsZXRlIGluZGVudCAqLworCSAgICB7CisJCWJlZ2lubGluZShCTF9XSElURSk7CSAgICAvKiBjdXJzb3Igb24gZmlyc3Qgbm9uLXdoaXRlICovCisJCWRpZF9haSA9IFRSVUU7CQkgICAgLyogZGVsZXRlIHRoZSBpbmRlbnQgd2hlbiBFU0MgaGl0ICovCisJCWFpX2NvbCA9IGN1cndpbi0+d19jdXJzb3IuY29sOworCSAgICB9CisJICAgIGVsc2UKKwkJYmVnaW5saW5lKDApOwkJICAgIC8qIGN1cnNvciBpbiBjb2x1bW4gMCAqLworCSAgICB0cnVuY2F0ZV9saW5lKEZBTFNFKTsgICAvKiBkZWxldGUgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKi8KKwkJCQkgICAgLyogbGVhdmUgY3Vyc29yIHBhc3QgbGFzdCBjaGFyIGluIGxpbmUgKi8KKwkgICAgaWYgKG9hcC0+bGluZV9jb3VudCA+IDEpCisJCXVfY2xlYXJsaW5lKCk7CSAgICAvKiAiVSIgY29tbWFuZCBub3QgcG9zc2libGUgYWZ0ZXIgIjJjYyIgKi8KKwl9CisJZWxzZQorCXsKKwkgICAgZGVsX2xpbmVzKG9hcC0+bGluZV9jb3VudCwgVFJVRSk7CisJICAgIGJlZ2lubGluZShCTF9XSElURSB8IEJMX0ZJWCk7CisJICAgIHVfY2xlYXJsaW5lKCk7CS8qICJVIiBjb21tYW5kIG5vdCBwb3NzaWJsZSBhZnRlciAiZGQiICovCisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwlpZiAodmlydHVhbF9vcCkKKwl7CisJICAgIGludAkJZW5kY29sID0gMDsKKworCSAgICAvKiBGb3IgdmlydHVhbGVkaXQ6IGJyZWFrIHRoZSB0YWJzIHRoYXQgYXJlIHBhcnRseSBpbmNsdWRlZC4gKi8KKwkgICAgaWYgKGdjaGFyX3Bvcygmb2FwLT5zdGFydCkgPT0gJ1x0JykKKwkgICAgeworCQlpZiAodV9zYXZlX2N1cnNvcigpID09IEZBSUwpCS8qIHNhdmUgZmlyc3QgbGluZSBmb3IgdW5kbyAqLworCQkgICAgcmV0dXJuIEZBSUw7CisJCWlmIChvYXAtPmxpbmVfY291bnQgPT0gMSkKKwkJICAgIGVuZGNvbCA9IGdldHZpc2NvbDIob2FwLT5lbmQuY29sLCBvYXAtPmVuZC5jb2xhZGQpOworCQljb2xhZHZhbmNlX2ZvcmNlKGdldHZpc2NvbDIob2FwLT5zdGFydC5jb2wsIG9hcC0+c3RhcnQuY29sYWRkKSk7CisJCW9hcC0+c3RhcnQgPSBjdXJ3aW4tPndfY3Vyc29yOworCQlpZiAob2FwLT5saW5lX2NvdW50ID09IDEpCisJCXsKKwkJICAgIGNvbGFkdmFuY2UoZW5kY29sKTsKKwkJICAgIG9hcC0+ZW5kLmNvbCA9IGN1cndpbi0+d19jdXJzb3IuY29sOworCQkgICAgb2FwLT5lbmQuY29sYWRkID0gY3Vyd2luLT53X2N1cnNvci5jb2xhZGQ7CisJCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gb2FwLT5zdGFydDsKKwkJfQorCSAgICB9CisKKwkgICAgLyogQnJlYWsgYSB0YWIgb25seSB3aGVuIGl0J3MgaW5jbHVkZWQgaW4gdGhlIGFyZWEuICovCisJICAgIGlmIChnY2hhcl9wb3MoJm9hcC0+ZW5kKSA9PSAnXHQnCisJCQkJICAgICAmJiAoaW50KW9hcC0+ZW5kLmNvbGFkZCA8IG9hcC0+aW5jbHVzaXZlKQorCSAgICB7CisJCS8qIHNhdmUgbGFzdCBsaW5lIGZvciB1bmRvICovCisJCWlmICh1X3NhdmUoKGxpbmVucl9UKShvYXAtPmVuZC5sbnVtIC0gMSksCisJCQkJICAgICAgIChsaW5lbnJfVCkob2FwLT5lbmQubG51bSArIDEpKSA9PSBGQUlMKQorCQkgICAgcmV0dXJuIEZBSUw7CisJCWN1cndpbi0+d19jdXJzb3IgPSBvYXAtPmVuZDsKKwkJY29sYWR2YW5jZV9mb3JjZShnZXR2aXNjb2wyKG9hcC0+ZW5kLmNvbCwgb2FwLT5lbmQuY29sYWRkKSk7CisJCW9hcC0+ZW5kID0gY3Vyd2luLT53X2N1cnNvcjsKKwkJY3Vyd2luLT53X2N1cnNvciA9IG9hcC0+c3RhcnQ7CisJICAgIH0KKwl9CisjZW5kaWYKKworCWlmIChvYXAtPmxpbmVfY291bnQgPT0gMSkJLyogZGVsZXRlIGNoYXJhY3RlcnMgd2l0aGluIG9uZSBsaW5lICovCisJeworCSAgICBpZiAodV9zYXZlX2N1cnNvcigpID09IEZBSUwpCS8qIHNhdmUgbGluZSBmb3IgdW5kbyAqLworCQlyZXR1cm4gRkFJTDsKKworCSAgICAvKiBpZiAnY3BvcHRpb25zJyBjb250YWlucyAnJCcsIGRpc3BsYXkgJyQnIGF0IGVuZCBvZiBjaGFuZ2UgKi8KKwkgICAgaWYgKAkgICB2aW1fc3RyY2hyKHBfY3BvLCBDUE9fRE9MTEFSKSAhPSBOVUxMCisJCSAgICAmJiBvYXAtPm9wX3R5cGUgPT0gT1BfQ0hBTkdFCisJCSAgICAmJiBvYXAtPmVuZC5sbnVtID09IGN1cndpbi0+d19jdXJzb3IubG51bQorI2lmZGVmIEZFQVRfVklTVUFMCisJCSAgICAmJiAhb2FwLT5pc19WSXN1YWwKKyNlbmRpZgorCQkgICAgKQorCQlkaXNwbGF5X2RvbGxhcihvYXAtPmVuZC5jb2wgLSAhb2FwLT5pbmNsdXNpdmUpOworCisJICAgIG4gPSBvYXAtPmVuZC5jb2wgLSBvYXAtPnN0YXJ0LmNvbCArIDEgLSAhb2FwLT5pbmNsdXNpdmU7CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJICAgIGlmICh2aXJ0dWFsX29wKQorCSAgICB7CisJCS8qIGZpeCB1cCB0aGluZ3MgZm9yIHZpcnR1YWxlZGl0LWRlbGV0ZToKKwkJICogYnJlYWsgdGhlIHRhYnMgd2hpY2ggYXJlIGdvaW5nIHRvIGdldCBpbiBvdXIgd2F5CisJCSAqLworCQljaGFyX3UJCSpjdXJsaW5lID0gbWxfZ2V0X2N1cmxpbmUoKTsKKwkJaW50CQlsZW4gPSAoaW50KVNUUkxFTihjdXJsaW5lKTsKKworCQlpZiAob2FwLT5lbmQuY29sYWRkICE9IDAKKwkJCSYmIChpbnQpb2FwLT5lbmQuY29sID49IGxlbiAtIDEKKwkJCSYmICEob2FwLT5zdGFydC5jb2xhZGQgJiYgKGludClvYXAtPmVuZC5jb2wgPj0gbGVuIC0gMSkpCisJCSAgICBuKys7CisJCS8qIERlbGV0ZSBhdCBsZWFzdCBvbmUgY2hhciAoZS5nLCB3aGVuIG9uIGEgY29udHJvbCBjaGFyKS4gKi8KKwkJaWYgKG4gPT0gMCAmJiBvYXAtPnN0YXJ0LmNvbGFkZCAhPSBvYXAtPmVuZC5jb2xhZGQpCisJCSAgICBuID0gMTsKKworCQkvKiBXaGVuIGRlbGV0ZWQgYSBjaGFyIGluIHRoZSBsaW5lLCByZXNldCBjb2xhZGQuICovCisJCWlmIChnY2hhcl9jdXJzb3IoKSAhPSBOVUwpCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisJICAgIH0KKyNlbmRpZgorCSAgICAodm9pZClkZWxfYnl0ZXMoKGxvbmcpbiwgcmVzdGFydF9lZGl0ID09IE5VTCAmJiAhdmlydHVhbF9vcCk7CisJfQorCWVsc2UJCQkJLyogZGVsZXRlIGNoYXJhY3RlcnMgYmV0d2VlbiBsaW5lcyAqLworCXsKKwkgICAgcG9zX1QgICBjdXJwb3M7CisKKwkgICAgLyogc2F2ZSBkZWxldGVkIGFuZCBjaGFuZ2VkIGxpbmVzIGZvciB1bmRvICovCisJICAgIGlmICh1X3NhdmUoKGxpbmVucl9UKShjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSAxKSwKKwkJIChsaW5lbnJfVCkoY3Vyd2luLT53X2N1cnNvci5sbnVtICsgb2FwLT5saW5lX2NvdW50KSkgPT0gRkFJTCkKKwkJcmV0dXJuIEZBSUw7CisKKwkgICAgdHJ1bmNhdGVfbGluZShUUlVFKTsJLyogZGVsZXRlIGZyb20gY3Vyc29yIHRvIGVuZCBvZiBsaW5lICovCisKKwkgICAgY3VycG9zID0gY3Vyd2luLT53X2N1cnNvcjsJLyogcmVtZW1iZXIgY3Vyd2luLT53X2N1cnNvciAqLworCSAgICArK2N1cndpbi0+d19jdXJzb3IubG51bTsKKwkgICAgZGVsX2xpbmVzKChsb25nKShvYXAtPmxpbmVfY291bnQgLSAyKSwgRkFMU0UpOworCisJICAgIC8qIGRlbGV0ZSBmcm9tIHN0YXJ0IG9mIGxpbmUgdW50aWwgb3BfZW5kICovCisJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKwkgICAgKHZvaWQpZGVsX2J5dGVzKChsb25nKShvYXAtPmVuZC5jb2wgKyAxIC0gIW9hcC0+aW5jbHVzaXZlKSwKKwkJCQkgICAgcmVzdGFydF9lZGl0ID09IE5VTCAmJiAhdmlydHVhbF9vcCk7CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBjdXJwb3M7CQkvKiByZXN0b3JlIGN1cndpbi0+d19jdXJzb3IgKi8KKworCSAgICAodm9pZClkb19qb2luKEZBTFNFKTsKKwl9CisgICAgfQorCisgICAgbXNnbW9yZShjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCAtIG9sZF9sY291bnQpOworCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAob2FwLT5ibG9ja19tb2RlKQorICAgIHsKKwljdXJidWYtPmJfb3BfZW5kLmxudW0gPSBvYXAtPmVuZC5sbnVtOworCWN1cmJ1Zi0+Yl9vcF9lbmQuY29sID0gb2FwLT5zdGFydC5jb2w7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCWN1cmJ1Zi0+Yl9vcF9lbmQgPSBvYXAtPnN0YXJ0OworICAgIGN1cmJ1Zi0+Yl9vcF9zdGFydCA9IG9hcC0+c3RhcnQ7CisKKyAgICByZXR1cm4gT0s7Cit9CisKKyNpZmRlZiBGRUFUX01CWVRFCisvKgorICogQWRqdXN0IGVuZCBvZiBvcGVyYXRpbmcgYXJlYSBmb3IgZW5kaW5nIG9uIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuCisgKiBVc2VkIGZvciBkZWxldGlvbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCittYl9hZGp1c3Rfb3BlbmQob2FwKQorICAgIG9wYXJnX1QJKm9hcDsKK3sKKyAgICBjaGFyX3UJKnA7CisKKyAgICBpZiAob2FwLT5pbmNsdXNpdmUpCisgICAgeworCXAgPSBtbF9nZXQob2FwLT5lbmQubG51bSk7CisJb2FwLT5lbmQuY29sICs9IG1iX3RhaWxfb2ZmKHAsIHAgKyBvYXAtPmVuZC5jb2wpOworICAgIH0KK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1ZJU1VBTEVYVFJBKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJlcGxhY2UgYSB3aG9sZSBhcmVhIHdpdGggb25lIGNoYXJhY3Rlci4KKyAqLworICAgIGludAorb3BfcmVwbGFjZShvYXAsIGMpCisgICAgb3BhcmdfVCAgICpvYXA7CisgICAgaW50CQljOworeworICAgIGludAkJCW4sIG51bWM7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJCW51bV9jaGFyczsKKyNlbmRpZgorICAgIGNoYXJfdQkJKm5ld3AsICpvbGRwOworICAgIHNpemVfdAkJb2xkbGVuOworICAgIHN0cnVjdCBibG9ja19kZWYJYmQ7CisKKyAgICBpZiAoKGN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZICkgfHwgb2FwLT5lbXB0eSkKKwlyZXR1cm4gT0s7CSAgICAvKiBub3RoaW5nIHRvIGRvICovCisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGhhc19tYnl0ZSkKKwltYl9hZGp1c3Rfb3BlbmQob2FwKTsKKyNlbmRpZgorCisgICAgaWYgKHVfc2F2ZSgobGluZW5yX1QpKG9hcC0+c3RhcnQubG51bSAtIDEpLAorCQkJCSAgICAgICAobGluZW5yX1QpKG9hcC0+ZW5kLmxudW0gKyAxKSkgPT0gRkFJTCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogYmxvY2sgbW9kZSByZXBsYWNlCisgICAgICovCisgICAgaWYgKG9hcC0+YmxvY2tfbW9kZSkKKyAgICB7CisJYmQuaXNfTUFYID0gKGN1cndpbi0+d19jdXJzd2FudCA9PSBNQVhDT0wpOworCWZvciAoIDsgY3Vyd2luLT53X2N1cnNvci5sbnVtIDw9IG9hcC0+ZW5kLmxudW07ICsrY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCXsKKwkgICAgYmxvY2tfcHJlcChvYXAsICZiZCwgY3Vyd2luLT53X2N1cnNvci5sbnVtLCBUUlVFKTsKKwkgICAgaWYgKGJkLnRleHRsZW4gPT0gMCAmJiAoIXZpcnR1YWxfb3AgfHwgYmQuaXNfTUFYKSkKKwkJY29udGludWU7CSAgICAvKiBub3RoaW5nIHRvIHJlcGxhY2UgKi8KKworCSAgICAvKiBuID09IG51bWJlciBvZiBleHRyYSBjaGFycyByZXF1aXJlZAorCSAgICAgKiBJZiB3ZSBzcGxpdCBhIFRBQiwgaXQgbWF5IGJlIHJlcGxhY2VkIGJ5IHNldmVyYWwgY2hhcmFjdGVycy4KKwkgICAgICogVGh1cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgbWF5IGluY3JlYXNlIQorCSAgICAgKi8KKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJICAgIC8qIElmIHRoZSByYW5nZSBzdGFydHMgaW4gdmlydHVhbCBzcGFjZSwgY291bnQgdGhlIGluaXRpYWwKKwkgICAgICogY29sYWRkIG9mZnNldCBhcyBwYXJ0IG9mICJzdGFydHNwYWNlcyIgKi8KKwkgICAgaWYgKHZpcnR1YWxfb3AgJiYgYmQuaXNfc2hvcnQgJiYgKmJkLnRleHRzdGFydCA9PSBOVUwpCisJICAgIHsKKwkJcG9zX1QgdnBvczsKKworCQlnZXR2cG9zKCZ2cG9zLCBvYXAtPnN0YXJ0X3Zjb2wpOworCQliZC5zdGFydHNwYWNlcyArPSB2cG9zLmNvbGFkZDsKKwkJbiA9IGJkLnN0YXJ0c3BhY2VzOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCQkvKiBhbGxvdyBmb3IgcHJlIHNwYWNlcyAqLworCQluID0gKGJkLnN0YXJ0c3BhY2VzID8gYmQuc3RhcnRfY2hhcl92Y29scyAtIDEgOiAwKTsKKworCSAgICAvKiBhbGxvdyBmb3IgcG9zdCBzcHAgKi8KKwkgICAgbiArPSAoYmQuZW5kc3BhY2VzCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCQkgICAgJiYgIWJkLmlzX29uZUNoYXIKKyNlbmRpZgorCQkgICAgJiYgYmQuZW5kX2NoYXJfdmNvbHMgPiAwKSA/IGJkLmVuZF9jaGFyX3Zjb2xzIC0gMSA6IDA7CisJICAgIC8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgY2hhcmFjdGVycyB0byByZXBsYWNlLiAqLworCSAgICBudW1jID0gb2FwLT5lbmRfdmNvbCAtIG9hcC0+c3RhcnRfdmNvbCArIDE7CisJICAgIGlmIChiZC5pc19zaG9ydCAmJiAoIXZpcnR1YWxfb3AgfHwgYmQuaXNfTUFYKSkKKwkJbnVtYyAtPSAob2FwLT5lbmRfdmNvbCAtIGJkLmVuZF92Y29sKSArIDE7CisKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIC8qIEEgZG91YmxlLXdpZGUgY2hhcmFjdGVyIGNhbiBiZSByZXBsYWNlZCBvbmx5IHVwIHRvIGhhbGYgdGhlCisJICAgICAqIHRpbWVzLiAqLworCSAgICBpZiAoKCptYl9jaGFyMmNlbGxzKShjKSA+IDEpCisJICAgIHsKKwkJaWYgKChudW1jICYgMSkgJiYgIWJkLmlzX3Nob3J0KQorCQl7CisJCSAgICArK2JkLmVuZHNwYWNlczsKKwkJICAgICsrbjsKKwkJfQorCQludW1jID0gbnVtYyAvIDI7CisJICAgIH0KKworCSAgICAvKiBDb21wdXRlIGJ5dGVzIG5lZWRlZCwgbW92ZSBjaGFyYWN0ZXIgY291bnQgdG8gbnVtX2NoYXJzLiAqLworCSAgICBudW1fY2hhcnMgPSBudW1jOworCSAgICBudW1jICo9ICgqbWJfY2hhcjJsZW4pKGMpOworI2VuZGlmCisJICAgIC8qIG9sZGxlbiBpbmNsdWRlcyB0ZXh0bGVuLCBzbyBkb24ndCBkb3VibGUgY291bnQgKi8KKwkgICAgbiArPSBudW1jIC0gYmQudGV4dGxlbjsKKworCSAgICBvbGRwID0gbWxfZ2V0X2N1cmxpbmUoKTsKKwkgICAgb2xkbGVuID0gU1RSTEVOKG9sZHApOworCSAgICBuZXdwID0gYWxsb2NfY2hlY2soKHVuc2lnbmVkKW9sZGxlbiArIDEgKyBuKTsKKwkgICAgaWYgKG5ld3AgPT0gTlVMTCkKKwkJY29udGludWU7CisJICAgIHZpbV9tZW1zZXQobmV3cCwgTlVMLCAoc2l6ZV90KShvbGRsZW4gKyAxICsgbikpOworCSAgICAvKiBjb3B5IHVwIHRvIGRlbGV0ZWQgcGFydCAqLworCSAgICBtY2hfbWVtbW92ZShuZXdwLCBvbGRwLCAoc2l6ZV90KWJkLnRleHRjb2wpOworCSAgICBvbGRwICs9IGJkLnRleHRjb2wgKyBiZC50ZXh0bGVuOworCSAgICAvKiBpbnNlcnQgcHJlLXNwYWNlcyAqLworCSAgICBjb3B5X3NwYWNlcyhuZXdwICsgYmQudGV4dGNvbCwgKHNpemVfdCliZC5zdGFydHNwYWNlcyk7CisJICAgIC8qIGluc2VydCByZXBsYWNlbWVudCBjaGFycyBDSEVDSyBGT1IgQUxMT0NBVEVEIFNQQUNFICovCisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCSAgICB7CisJCW4gPSBTVFJMRU4obmV3cCk7CisJCXdoaWxlICgtLW51bV9jaGFycyA+PSAwKQorCQkgICAgbiArPSAoKm1iX2NoYXIyYnl0ZXMpKGMsIG5ld3AgKyBuKTsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJY29weV9jaGFycyhuZXdwICsgU1RSTEVOKG5ld3ApLCAoc2l6ZV90KW51bWMsIGMpOworCSAgICBpZiAoIWJkLmlzX3Nob3J0KQorCSAgICB7CisJCS8qIGluc2VydCBwb3N0LXNwYWNlcyAqLworCQljb3B5X3NwYWNlcyhuZXdwICsgU1RSTEVOKG5ld3ApLCAoc2l6ZV90KWJkLmVuZHNwYWNlcyk7CisJCS8qIGNvcHkgdGhlIHBhcnQgYWZ0ZXIgdGhlIGNoYW5nZWQgcGFydCAqLworCQltY2hfbWVtbW92ZShuZXdwICsgU1RSTEVOKG5ld3ApLCBvbGRwLCBTVFJMRU4ob2xkcCkgKyAxKTsKKwkgICAgfQorCSAgICAvKiByZXBsYWNlIHRoZSBsaW5lICovCisJICAgIG1sX3JlcGxhY2UoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBuZXdwLCBGQUxTRSk7CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qCisJICogTUNIQVIgYW5kIE1MSU5FIG1vdGlvbiByZXBsYWNlLgorCSAqLworCWlmIChvYXAtPm1vdGlvbl90eXBlID09IE1MSU5FKQorCXsKKwkgICAgb2FwLT5zdGFydC5jb2wgPSAwOworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisJICAgIG9hcC0+ZW5kLmNvbCA9IChjb2xucl9UKVNUUkxFTihtbF9nZXQob2FwLT5lbmQubG51bSkpOworCSAgICBpZiAob2FwLT5lbmQuY29sKQorCQktLW9hcC0+ZW5kLmNvbDsKKwl9CisJZWxzZSBpZiAoIW9hcC0+aW5jbHVzaXZlKQorCSAgICBkZWMoJihvYXAtPmVuZCkpOworCisJd2hpbGUgKGx0b3JlcShjdXJ3aW4tPndfY3Vyc29yLCBvYXAtPmVuZCkpCisJeworCSAgICBuID0gZ2NoYXJfY3Vyc29yKCk7CisJICAgIGlmIChuICE9IE5VTCkKKwkgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwkJaWYgKCgqbWJfY2hhcjJsZW4pKGMpID4gMSB8fCAoKm1iX2NoYXIybGVuKShuKSA+IDEpCisJCXsKKwkJICAgIC8qIFRoaXMgaXMgc2xvdywgYnV0IGl0IGhhbmRsZXMgcmVwbGFjaW5nIGEgc2luZ2xlLWJ5dGUKKwkJICAgICAqIHdpdGggYSBtdWx0aS1ieXRlIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gKi8KKwkJICAgIG9hcC0+ZW5kLmNvbCArPSAoKm1iX2NoYXIybGVuKShjKSAtICgqbWJfY2hhcjJsZW4pKG4pOworCQkgICAgbiA9IFN0YXRlOworCQkgICAgU3RhdGUgPSBSRVBMQUNFOworCQkgICAgaW5zX2NoYXIoYyk7CisJCSAgICBTdGF0ZSA9IG47CisJCSAgICAvKiBCYWNrdXAgdG8gdGhlIHJlcGxhY2VkIGNoYXJhY3Rlci4gKi8KKwkJICAgIGRlY19jdXJzb3IoKTsKKwkJfQorCQllbHNlCisjZW5kaWYKKwkJeworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJICAgIGlmIChuID09IFRBQikKKwkJICAgIHsKKwkJCWludCBlbmRfdmNvbCA9IDA7CisKKwkJCWlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gb2FwLT5lbmQubG51bSkKKwkJCXsKKwkJCSAgICAvKiBvYXAtPmVuZCBoYXMgdG8gYmUgcmVjYWxjdWxhdGVkIHdoZW4KKwkJCSAgICAgKiB0aGUgdGFiIGJyZWFrcyAqLworCQkJICAgIGVuZF92Y29sID0gZ2V0dmlzY29sMihvYXAtPmVuZC5jb2wsCisJCQkJCQkJICAgICBvYXAtPmVuZC5jb2xhZGQpOworCQkJfQorCQkJY29sYWR2YW5jZV9mb3JjZShnZXR2aXNjb2woKSk7CisJCQlpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID09IG9hcC0+ZW5kLmxudW0pCisJCQkgICAgZ2V0dnBvcygmb2FwLT5lbmQsIGVuZF92Y29sKTsKKwkJICAgIH0KKyNlbmRpZgorCQkgICAgcGNoYXIoY3Vyd2luLT53X2N1cnNvciwgYyk7CisJCX0KKwkgICAgfQorI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkgICAgZWxzZSBpZiAodmlydHVhbF9vcCAmJiBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gb2FwLT5lbmQubG51bSkKKwkgICAgeworCQlpbnQgdmlydGNvbHMgPSBvYXAtPmVuZC5jb2xhZGQ7CisKKwkJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA9PSBvYXAtPnN0YXJ0LmxudW0KKwkJCSYmIG9hcC0+c3RhcnQuY29sID09IG9hcC0+ZW5kLmNvbCAmJiBvYXAtPnN0YXJ0LmNvbGFkZCkKKwkJICAgIHZpcnRjb2xzIC09IG9hcC0+c3RhcnQuY29sYWRkOworCisJCS8qIG9hcC0+ZW5kIGhhcyBiZWVuIHRyaW1tZWQgc28gaXQncyBlZmZlY3RpdmVseSBpbmNsdXNpdmU7CisJCSAqIGFzIGEgcmVzdWx0IGFuIGV4dHJhICsxIG11c3QgYmUgY291bnRlZCBzbyB3ZSBkb24ndAorCQkgKiB0cmFtcGxlIHRoZSBOVUwgYnl0ZS4gKi8KKwkJY29sYWR2YW5jZV9mb3JjZShnZXR2aXNjb2wyKG9hcC0+ZW5kLmNvbCwgb2FwLT5lbmQuY29sYWRkKSArIDEpOworCQljdXJ3aW4tPndfY3Vyc29yLmNvbCAtPSAodmlydGNvbHMgKyAxKTsKKwkJZm9yICg7IHZpcnRjb2xzID49IDA7IHZpcnRjb2xzLS0pCisJCXsKKwkJICAgIHBjaGFyKGN1cndpbi0+d19jdXJzb3IsIGMpOworCQkgICAgaWYgKGluYygmY3Vyd2luLT53X2N1cnNvcikgPT0gLTEpCisJCQlicmVhazsKKwkJfQorCSAgICB9CisjZW5kaWYKKworCSAgICAvKiBBZHZhbmNlIHRvIG5leHQgY2hhcmFjdGVyLCBzdG9wIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuICovCisJICAgIGlmIChpbmNfY3Vyc29yKCkgPT0gLTEpCisJCWJyZWFrOworCX0KKyAgICB9CisKKyAgICBjdXJ3aW4tPndfY3Vyc29yID0gb2FwLT5zdGFydDsKKyAgICBjaGVja19jdXJzb3IoKTsKKyAgICBjaGFuZ2VkX2xpbmVzKG9hcC0+c3RhcnQubG51bSwgb2FwLT5zdGFydC5jb2wsIG9hcC0+ZW5kLmxudW0gKyAxLCAwTCk7CisKKyAgICAvKiBTZXQgIidbIiBhbmQgIiddIiBtYXJrcy4gKi8KKyAgICBjdXJidWYtPmJfb3Bfc3RhcnQgPSBvYXAtPnN0YXJ0OworICAgIGN1cmJ1Zi0+Yl9vcF9lbmQgPSBvYXAtPmVuZDsKKworICAgIHJldHVybiBPSzsKK30KKyNlbmRpZgorCisvKgorICogSGFuZGxlIHRoZSAobm9uLXN0YW5kYXJkIHZpKSB0aWxkZSBvcGVyYXRvci4gIEFsc28gZm9yICJndSIsICJnVSIgYW5kICJnPyIuCisgKi8KKyAgICB2b2lkCitvcF90aWxkZShvYXApCisgICAgb3BhcmdfVAkqb2FwOworeworICAgIHBvc19UCQlwb3M7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBzdHJ1Y3QgYmxvY2tfZGVmCWJkOworICAgIGludAkJCWRvbmU7CisjZW5kaWYKKyAgICBpbnQJCQlkaWRfY2hhbmdlID0gMDsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgY29sbnJfVAkJY29sOworI2VuZGlmCisKKyAgICBpZiAodV9zYXZlKChsaW5lbnJfVCkob2FwLT5zdGFydC5sbnVtIC0gMSksCisJCQkJICAgICAgIChsaW5lbnJfVCkob2FwLT5lbmQubG51bSArIDEpKSA9PSBGQUlMKQorCXJldHVybjsKKworICAgIHBvcyA9IG9hcC0+c3RhcnQ7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAob2FwLT5ibG9ja19tb2RlKQkJICAgIC8qIFZpc3VhbCBibG9jayBtb2RlICovCisgICAgeworCWZvciAoOyBwb3MubG51bSA8PSBvYXAtPmVuZC5sbnVtOyArK3Bvcy5sbnVtKQorCXsKKwkgICAgYmxvY2tfcHJlcChvYXAsICZiZCwgcG9zLmxudW0sIEZBTFNFKTsKKwkgICAgcG9zLmNvbCA9IGJkLnRleHRjb2w7CisJICAgIGZvciAoZG9uZSA9IDA7IGRvbmUgPCBiZC50ZXh0bGVuOyArK2RvbmUpCisJICAgIHsKKwkJZGlkX2NoYW5nZSB8PSBzd2FwY2hhcihvYXAtPm9wX3R5cGUsICZwb3MpOworIyBpZmRlZiBGRUFUX01CWVRFCisJCWNvbCA9IHBvcy5jb2wgKyAxOworIyBlbmRpZgorCQlpZiAoaW5jKCZwb3MpID09IC0xKQkgICAgLyogYXQgZW5kIG9mIGZpbGUgKi8KKwkJICAgIGJyZWFrOworIyBpZmRlZiBGRUFUX01CWVRFCisJCWlmIChwb3MuY29sID4gY29sKQorCQkgICAgLyogQ291bnQgZXh0cmEgYnl0ZXMgb2YgYSBtdWx0aS1ieXRlIGNoYXJhY3Rlci4gKi8KKwkJICAgIGRvbmUgKz0gcG9zLmNvbCAtIGNvbDsKKyMgZW5kaWYKKwkgICAgfQorIyBpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKwkgICAgaWYgKHVzaW5nTmV0YmVhbnMgJiYgZGlkX2NoYW5nZSkKKwkgICAgeworCQljaGFyX3UgKnB0ciA9IG1sX2dldF9idWYoY3VyYnVmLCBwb3MubG51bSwgRkFMU0UpOworCisJCW5ldGJlYW5zX2luc2VydGVkKGN1cmJ1ZiwgcG9zLmxudW0sIGJkLnRleHRjb2wsCisJCQkJICAgIGJkLnRleHRsZW4sICZwdHJbYmQudGV4dGNvbF0sIGJkLnRleHRsZW4pOworCSAgICB9CisjIGVuZGlmCisJfQorCWlmIChkaWRfY2hhbmdlKQorCSAgICBjaGFuZ2VkX2xpbmVzKG9hcC0+c3RhcnQubG51bSwgMCwgb2FwLT5lbmQubG51bSArIDEsIDBMKTsKKyAgICB9CisgICAgZWxzZQkJCQkgICAgLyogbm90IGJsb2NrIG1vZGUgKi8KKyNlbmRpZgorICAgIHsKKwlpZiAob2FwLT5tb3Rpb25fdHlwZSA9PSBNTElORSkKKwl7CisJICAgIG9hcC0+c3RhcnQuY29sID0gMDsKKwkgICAgcG9zLmNvbCA9IDA7CisJICAgIG9hcC0+ZW5kLmNvbCA9IChjb2xucl9UKVNUUkxFTihtbF9nZXQob2FwLT5lbmQubG51bSkpOworCSAgICBpZiAob2FwLT5lbmQuY29sKQorCQktLW9hcC0+ZW5kLmNvbDsKKwl9CisJZWxzZSBpZiAoIW9hcC0+aW5jbHVzaXZlKQorCSAgICBkZWMoJihvYXAtPmVuZCkpOworCisJd2hpbGUgKGx0b3JlcShwb3MsIG9hcC0+ZW5kKSkKKwl7CisJICAgIGRpZF9jaGFuZ2UgfD0gc3dhcGNoYXIob2FwLT5vcF90eXBlLCAmcG9zKTsKKwkgICAgaWYgKGluYygmcG9zKSA9PSAtMSkgICAgLyogYXQgZW5kIG9mIGZpbGUgKi8KKwkJYnJlYWs7CisJfQorCWlmIChkaWRfY2hhbmdlKQorCXsKKwkgICAgY2hhbmdlZF9saW5lcyhvYXAtPnN0YXJ0LmxudW0sIG9hcC0+c3RhcnQuY29sLCBvYXAtPmVuZC5sbnVtICsgMSwKKwkJCQkJCQkJCSAgMEwpOworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCSAgICBpZiAodXNpbmdOZXRiZWFucyAmJiBkaWRfY2hhbmdlKQorCSAgICB7CisJCWNoYXJfdSAqcHRyOworCQlpbnQgY291bnQ7CisKKwkJcG9zID0gb2FwLT5zdGFydDsKKwkJd2hpbGUgKHBvcy5sbnVtIDwgb2FwLT5lbmQubG51bSkKKwkJeworCQkgICAgcHRyID0gbWxfZ2V0X2J1ZihjdXJidWYsIHBvcy5sbnVtLCBGQUxTRSk7CisJCSAgICBjb3VudCA9IFNUUkxFTihwdHIpIC0gcG9zLmNvbDsKKwkJICAgIG5ldGJlYW5zX2luc2VydGVkKGN1cmJ1ZiwgcG9zLmxudW0sIHBvcy5jb2wsCisJCQkJCQkgY291bnQsICZwdHJbcG9zLmNvbF0sIGNvdW50KTsKKwkJICAgIHBvcy5jb2wgPSAwOworCQkgICAgcG9zLmxudW0rKzsKKwkJfQorCQlwdHIgPSBtbF9nZXRfYnVmKGN1cmJ1ZiwgcG9zLmxudW0sIEZBTFNFKTsKKwkJY291bnQgPSBvYXAtPmVuZC5jb2wgLSBwb3MuY29sICsgMTsKKwkJbmV0YmVhbnNfaW5zZXJ0ZWQoY3VyYnVmLCBwb3MubG51bSwgcG9zLmNvbCwKKwkJCQkJCSBjb3VudCwgJnB0cltwb3MuY29sXSwgY291bnQpOworCSAgICB9CisjZW5kaWYKKwl9CisgICAgfQorCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoIWRpZF9jaGFuZ2UgJiYgb2FwLT5pc19WSXN1YWwpCisJLyogTm8gY2hhbmdlOiBuZWVkIHRvIHJlbW92ZSB0aGUgVmlzdWFsIHNlbGVjdGlvbiAqLworCXJlZHJhd19jdXJidWZfbGF0ZXIoSU5WRVJURUQpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFNldCAnWyBhbmQgJ10gbWFya3MuCisgICAgICovCisgICAgY3VyYnVmLT5iX29wX3N0YXJ0ID0gb2FwLT5zdGFydDsKKyAgICBjdXJidWYtPmJfb3BfZW5kID0gb2FwLT5lbmQ7CisKKyAgICBpZiAob2FwLT5saW5lX2NvdW50ID4gcF9yZXBvcnQpCisgICAgeworCWlmIChvYXAtPmxpbmVfY291bnQgPT0gMSkKKwkgICAgTVNHKF8oIjEgbGluZSBjaGFuZ2VkIikpOworCWVsc2UKKwkgICAgc21zZygoY2hhcl91ICopXygiJWxkIGxpbmVzIGNoYW5nZWQiKSwgb2FwLT5saW5lX2NvdW50KTsKKyAgICB9Cit9CisKKy8qCisgKiBJZiBvcF90eXBlID09IE9QX1VQUEVSOiBtYWtlIHVwcGVyY2FzZSwKKyAqIGlmIG9wX3R5cGUgPT0gT1BfTE9XRVI6IG1ha2UgbG93ZXJjYXNlLAorICogaWYgb3BfdHlwZSA9PSBPUF9ST1QxMzogZG8gcm90MTMgZW5jb2RpbmcsCisgKiBlbHNlIHN3YXAgY2FzZSBvZiBjaGFyYWN0ZXIgYXQgJ3BvcycKKyAqIHJldHVybnMgVFJVRSB3aGVuIHNvbWV0aGluZyBhY3R1YWxseSBjaGFuZ2VkLgorICovCisgICAgaW50Citzd2FwY2hhcihvcF90eXBlLCBwb3MpCisgICAgaW50CSAgICBvcF90eXBlOworICAgIHBvc19UICAgICpwb3M7Cit7CisgICAgaW50CSAgICBjOworICAgIGludAkgICAgbmM7CisKKyAgICBjID0gZ2NoYXJfcG9zKHBvcyk7CisKKyAgICAvKiBPbmx5IGRvIHJvdDEzIGVuY29kaW5nIGZvciBBU0NJSSBjaGFyYWN0ZXJzLiAqLworICAgIGlmIChjID49IDB4ODAgJiYgb3BfdHlwZSA9PSBPUF9ST1QxMykKKwlyZXR1cm4gRkFMU0U7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGVuY19kYmNzICE9IDAgJiYgYyA+PSAweDEwMCkJLyogTm8gbG93ZXIvdXBwZXJjYXNlIGxldHRlciAqLworCXJldHVybiBGQUxTRTsKKyNlbmRpZgorICAgIG5jID0gYzsKKyAgICBpZiAoTUJfSVNMT1dFUihjKSkKKyAgICB7CisJaWYgKG9wX3R5cGUgPT0gT1BfUk9UMTMpCisJICAgIG5jID0gUk9UMTMoYywgJ2EnKTsKKwllbHNlIGlmIChvcF90eXBlICE9IE9QX0xPV0VSKQorCSAgICBuYyA9IE1CX1RPVVBQRVIoYyk7CisgICAgfQorICAgIGVsc2UgaWYgKE1CX0lTVVBQRVIoYykpCisgICAgeworCWlmIChvcF90eXBlID09IE9QX1JPVDEzKQorCSAgICBuYyA9IFJPVDEzKGMsICdBJyk7CisJZWxzZSBpZiAob3BfdHlwZSAhPSBPUF9VUFBFUikKKwkgICAgbmMgPSBNQl9UT0xPV0VSKGMpOworICAgIH0KKyAgICBpZiAobmMgIT0gYykKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChlbmNfdXRmOCAmJiAoYyA+PSAweDgwIHx8IG5jID49IDB4ODApKQorCXsKKwkgICAgcG9zX1QgICBzcCA9IGN1cndpbi0+d19jdXJzb3I7CisKKwkgICAgY3Vyd2luLT53X2N1cnNvciA9ICpwb3M7CisJICAgIGRlbF9jaGFyKEZBTFNFKTsKKwkgICAgaW5zX2NoYXIobmMpOworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gc3A7CisJfQorCWVsc2UKKyNlbmRpZgorCSAgICBwY2hhcigqcG9zLCBuYyk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9WSVNVQUxFWFRSQSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBvcF9pbnNlcnQgLSBJbnNlcnQgYW5kIGFwcGVuZCBvcGVyYXRvcnMgZm9yIFZpc3VhbCBtb2RlLgorICovCisgICAgdm9pZAorb3BfaW5zZXJ0KG9hcCwgY291bnQxKQorICAgIG9wYXJnX1QJKm9hcDsKKyAgICBsb25nCWNvdW50MTsKK3sKKyAgICBsb25nCQlpbnNfbGVuLCBwcmVfdGV4dGxlbiA9IDA7CisgICAgY2hhcl91CQkqZmlyc3RsaW5lLCAqaW5zX3RleHQ7CisgICAgc3RydWN0IGJsb2NrX2RlZgliZDsKKyAgICBpbnQJCQlpOworCisgICAgLyogZWRpdCgpIGNoYW5nZXMgdGhpcyAtIHJlY29yZCBpdCBmb3IgT1BfQVBQRU5EICovCisgICAgYmQuaXNfTUFYID0gKGN1cndpbi0+d19jdXJzd2FudCA9PSBNQVhDT0wpOworCisgICAgLyogdmlzIGJsb2NrIGlzIHN0aWxsIG1hcmtlZC4gR2V0IHJpZCBvZiBpdCBub3cuICovCisgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gb2FwLT5zdGFydC5sbnVtOworICAgIHVwZGF0ZV9zY3JlZW4oSU5WRVJURUQpOworCisgICAgaWYgKG9hcC0+YmxvY2tfbW9kZSkKKyAgICB7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCS8qIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyB1c2VkLCBuZWVkIHRvIGluc2VydCB0aGUgZXh0cmEgc3BhY2VzIGJlZm9yZQorCSAqIGRvaW5nIGJsb2NrX3ByZXAoKS4gIFdoZW4gb25seSAiYmxvY2siIGlzIHVzZWQsIHZpcnR1YWwgZWRpdCBpcworCSAqIGFscmVhZHkgZGlzYWJsZWQsIGJ1dCBzdGlsbCBuZWVkIGl0IHdoZW4gY2FsbGluZworCSAqIGNvbGFkdmFuY2VfZm9yY2UoKS4gKi8KKwlpZiAoY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPiAwKQorCXsKKwkgICAgaW50CQlvbGRfdmVfZmxhZ3MgPSB2ZV9mbGFnczsKKworCSAgICB2ZV9mbGFncyA9IFZFX0FMTDsKKwkgICAgaWYgKHVfc2F2ZV9jdXJzb3IoKSA9PSBGQUlMKQorCQlyZXR1cm47CisJICAgIGNvbGFkdmFuY2VfZm9yY2Uob2FwLT5vcF90eXBlID09IE9QX0FQUEVORAorCQkJCQkgICA/IG9hcC0+ZW5kX3Zjb2wgKyAxIDogZ2V0dmlzY29sKCkpOworCSAgICBpZiAob2FwLT5vcF90eXBlID09IE9QX0FQUEVORCkKKwkJLS1jdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwkgICAgdmVfZmxhZ3MgPSBvbGRfdmVfZmxhZ3M7CisJfQorI2VuZGlmCisJLyogR2V0IHRoZSBpbmZvIGFib3V0IHRoZSBibG9jayBiZWZvcmUgZW50ZXJpbmcgdGhlIHRleHQgKi8KKwlibG9ja19wcmVwKG9hcCwgJmJkLCBvYXAtPnN0YXJ0LmxudW0sIFRSVUUpOworCWZpcnN0bGluZSA9IG1sX2dldChvYXAtPnN0YXJ0LmxudW0pICsgYmQudGV4dGNvbDsKKwlpZiAob2FwLT5vcF90eXBlID09IE9QX0FQUEVORCkKKwkgICAgZmlyc3RsaW5lICs9IGJkLnRleHRsZW47CisJcHJlX3RleHRsZW4gPSAobG9uZylTVFJMRU4oZmlyc3RsaW5lKTsKKyAgICB9CisKKyAgICBpZiAob2FwLT5vcF90eXBlID09IE9QX0FQUEVORCkKKyAgICB7CisJaWYgKG9hcC0+YmxvY2tfbW9kZQorI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJJiYgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPT0gMAorI2VuZGlmCisJICAgKQorCXsKKwkgICAgLyogTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBjaGFyYWN0ZXIgcmlnaHQgb2YgdGhlIGJsb2NrLiAqLworCSAgICBjdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKwkgICAgd2hpbGUgKCptbF9nZXRfY3Vyc29yKCkgIT0gTlVMCisJCSAgICAmJiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPCBiZC50ZXh0Y29sICsgYmQudGV4dGxlbikpCisJCSsrY3Vyd2luLT53X2N1cnNvci5jb2w7CisJICAgIGlmIChiZC5pc19zaG9ydCAmJiAhYmQuaXNfTUFYKQorCSAgICB7CisJCS8qIEZpcnN0IGxpbmUgd2FzIHRvbyBzaG9ydCwgbWFrZSBpdCBsb25nZXIgYW5kIGFkanVzdCB0aGUKKwkJICogdmFsdWVzIGluICJiZCIuICovCisJCWlmICh1X3NhdmVfY3Vyc29yKCkgPT0gRkFJTCkKKwkJICAgIHJldHVybjsKKwkJZm9yIChpID0gMDsgaSA8IGJkLmVuZHNwYWNlczsgKytpKQorCQkgICAgaW5zX2NoYXIoJyAnKTsKKwkJYmQudGV4dGxlbiArPSBiZC5lbmRzcGFjZXM7CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgY3Vyd2luLT53X2N1cnNvciA9IG9hcC0+ZW5kOworCisJICAgIC8qIFdvcmtzIGp1c3QgbGlrZSBhbiAnaSduc2VydCBvbiB0aGUgbmV4dCBjaGFyYWN0ZXIuICovCisJICAgIGlmICghbGluZWVtcHR5KGN1cndpbi0+d19jdXJzb3IubG51bSkKKwkJICAgICYmIG9hcC0+c3RhcnRfdmNvbCAhPSBvYXAtPmVuZF92Y29sKQorCQlpbmNfY3Vyc29yKCk7CisJfQorICAgIH0KKworICAgIGVkaXQoTlVMLCBGQUxTRSwgKGxpbmVucl9UKWNvdW50MSk7CisKKyAgICAvKiBpZiB1c2VyIGhhcyBtb3ZlZCBvZmYgdGhpcyBsaW5lLCB3ZSBkb24ndCBrbm93IHdoYXQgdG8gZG8sIHNvIGRvCisgICAgICogbm90aGluZyAqLworICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gIT0gb2FwLT5zdGFydC5sbnVtKQorCXJldHVybjsKKworICAgIGlmIChvYXAtPmJsb2NrX21vZGUpCisgICAgeworCXN0cnVjdCBibG9ja19kZWYJYmQyOworCisJLyoKKwkgKiBTcGFjZXMgYW5kIHRhYnMgaW4gdGhlIGluZGVudCBtYXkgaGF2ZSBjaGFuZ2VkIHRvIG90aGVyIHNwYWNlcyBhbmQKKwkgKiB0YWJzLiAgR2V0IHRoZSBzdGFydGluZyBjb2x1bW4gYWdhaW4gYW5kIGNvcnJlY3QgdGhlIGxlbmdodC4KKwkgKiBEb24ndCBkbyB0aGlzIHdoZW4gIiQiIHVzZWQsIGVuZC1vZi1saW5lIHdpbGwgaGF2ZSBjaGFuZ2VkLgorCSAqLworCWJsb2NrX3ByZXAob2FwLCAmYmQyLCBvYXAtPnN0YXJ0LmxudW0sIFRSVUUpOworCWlmICghYmQuaXNfTUFYIHx8IGJkMi50ZXh0bGVuIDwgYmQudGV4dGxlbikKKwl7CisJICAgIGlmIChvYXAtPm9wX3R5cGUgPT0gT1BfQVBQRU5EKQorCSAgICB7CisJCXByZV90ZXh0bGVuICs9IGJkMi50ZXh0bGVuIC0gYmQudGV4dGxlbjsKKwkJaWYgKGJkMi5lbmRzcGFjZXMpCisJCSAgICAtLWJkMi50ZXh0bGVuOworCSAgICB9CisJICAgIGJkLnRleHRjb2wgPSBiZDIudGV4dGNvbDsKKwkgICAgYmQudGV4dGxlbiA9IGJkMi50ZXh0bGVuOworCX0KKworCS8qCisJICogU3Vic2VxdWVudCBjYWxscyB0byBtbF9nZXQoKSBmbHVzaCB0aGUgZmlyc3RsaW5lIGRhdGEgLSB0YWtlIGEKKwkgKiBjb3B5IG9mIHRoZSByZXF1aXJlZCBzdHJpbmcuCisJICovCisJZmlyc3RsaW5lID0gbWxfZ2V0KG9hcC0+c3RhcnQubG51bSkgKyBiZC50ZXh0Y29sOworCWlmIChvYXAtPm9wX3R5cGUgPT0gT1BfQVBQRU5EKQorCSAgICBmaXJzdGxpbmUgKz0gYmQudGV4dGxlbjsKKwlpZiAoKGluc19sZW4gPSAobG9uZylTVFJMRU4oZmlyc3RsaW5lKSAtIHByZV90ZXh0bGVuKSA+IDApCisJeworCSAgICBpbnNfdGV4dCA9IHZpbV9zdHJuc2F2ZShmaXJzdGxpbmUsIChpbnQpaW5zX2xlbik7CisJICAgIGlmIChpbnNfdGV4dCAhPSBOVUxMKQorCSAgICB7CisJCS8qIGJsb2NrIGhhbmRsZWQgaGVyZSAqLworCQlpZiAodV9zYXZlKG9hcC0+c3RhcnQubG51bSwKKwkJCQkJIChsaW5lbnJfVCkob2FwLT5lbmQubG51bSArIDEpKSA9PSBPSykKKwkJICAgIGJsb2NrX2luc2VydChvYXAsIGluc190ZXh0LCAob2FwLT5vcF90eXBlID09IE9QX0lOU0VSVCksCisJCQkJCQkJCQkgJmJkKTsKKworCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IG9hcC0+c3RhcnQuY29sOworCQljaGVja19jdXJzb3IoKTsKKwkJdmltX2ZyZWUoaW5zX3RleHQpOworCSAgICB9CisJfQorICAgIH0KK30KKyNlbmRpZgorCisvKgorICogb3BfY2hhbmdlIC0gaGFuZGxlIGEgY2hhbmdlIG9wZXJhdGlvbgorICoKKyAqIHJldHVybiBUUlVFIGlmIGVkaXQoKSByZXR1cm5zIGJlY2F1c2Ugb2YgYSBDVFJMLU8gY29tbWFuZAorICovCisgICAgaW50CitvcF9jaGFuZ2Uob2FwKQorICAgIG9wYXJnX1QJKm9hcDsKK3sKKyAgICBjb2xucl9UCQlsOworICAgIGludAkJCXJldHZhbDsKKyNpZmRlZiBGRUFUX1ZJU1VBTEVYVFJBCisgICAgbG9uZwkJb2Zmc2V0OworICAgIGxpbmVucl9UCQlsaW5lbnI7CisgICAgbG9uZwkJaW5zX2xlbiwgcHJlX3RleHRsZW4gPSAwOworICAgIGNoYXJfdQkJKmZpcnN0bGluZTsKKyAgICBjaGFyX3UJCSppbnNfdGV4dCwgKm5ld3AsICpvbGRwOworICAgIHN0cnVjdCBibG9ja19kZWYJYmQ7CisjZW5kaWYKKworICAgIGwgPSBvYXAtPnN0YXJ0LmNvbDsKKyAgICBpZiAob2FwLT5tb3Rpb25fdHlwZSA9PSBNTElORSkKKyAgICB7CisJbCA9IDA7CisjaWZkZWYgRkVBVF9TTUFSVElOREVOVAorCWlmICghcF9wYXN0ZSAmJiBjdXJidWYtPmJfcF9zaQorIyBpZmRlZiBGRUFUX0NJTkRFTlQKKwkJJiYgIWN1cmJ1Zi0+Yl9wX2NpbgorIyBlbmRpZgorCQkpCisJICAgIGNhbl9zaSA9IFRSVUU7CS8qIEl0J3MgbGlrZSBvcGVuaW5nIGEgbmV3IGxpbmUsIGRvIHNpICovCisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBGaXJzdCBkZWxldGUgdGhlIHRleHQgaW4gdGhlIHJlZ2lvbi4gIEluIGFuIGVtcHR5IGJ1ZmZlciBvbmx5IG5lZWQgdG8KKyAgICAgKiBzYXZlIGZvciB1bmRvICovCisgICAgaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZKQorICAgIHsKKwlpZiAodV9zYXZlX2N1cnNvcigpID09IEZBSUwpCisJICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZWxzZSBpZiAob3BfZGVsZXRlKG9hcCkgPT0gRkFJTCkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoKGwgPiBjdXJ3aW4tPndfY3Vyc29yLmNvbCkgJiYgIWxpbmVlbXB0eShjdXJ3aW4tPndfY3Vyc29yLmxudW0pCisJCQkJCQkJICYmICF2aXJ0dWFsX29wKQorCWluY19jdXJzb3IoKTsKKworI2lmZGVmIEZFQVRfVklTVUFMRVhUUkEKKyAgICAvKiBjaGVjayBmb3Igc3RpbGwgb24gc2FtZSBsaW5lICg8Q1I+IGluIGluc2VydGVkIHRleHQgbWVhbmluZ2xlc3MpICovCisgICAgLyogc2tpcCBibGFuayBsaW5lcyB0b28gKi8KKyAgICBpZiAob2FwLT5ibG9ja19tb2RlKQorICAgIHsKKyMgaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCS8qIEFkZCBzcGFjZXMgYmVmb3JlIGdldHRpbmcgdGhlIGN1cnJlbnQgbGluZSBsZW5ndGguICovCisJaWYgKHZpcnR1YWxfb3AgJiYgKGN1cndpbi0+d19jdXJzb3IuY29sYWRkID4gMAorCQkJCQkJICAgIHx8IGdjaGFyX2N1cnNvcigpID09IE5VTCkpCisJICAgIGNvbGFkdmFuY2VfZm9yY2UoZ2V0dmlzY29sKCkpOworIyBlbmRpZgorCXByZV90ZXh0bGVuID0gKGxvbmcpU1RSTEVOKG1sX2dldChvYXAtPnN0YXJ0LmxudW0pKTsKKwliZC50ZXh0Y29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTElTUCkgfHwgZGVmaW5lZChGRUFUX0NJTkRFTlQpCisgICAgaWYgKG9hcC0+bW90aW9uX3R5cGUgPT0gTUxJTkUpCisJZml4X2luZGVudCgpOworI2VuZGlmCisKKyAgICByZXR2YWwgPSBlZGl0KE5VTCwgRkFMU0UsIChsaW5lbnJfVCkxKTsKKworI2lmZGVmIEZFQVRfVklTVUFMRVhUUkEKKyAgICAvKgorICAgICAqIEluIFZpc3VhbCBibG9jayBtb2RlLCBoYW5kbGUgY29weWluZyB0aGUgbmV4dCB0ZXh0IHRvIGFsbCBsaW5lcyBvZiB0aGUKKyAgICAgKiBibG9jay4KKyAgICAgKi8KKyAgICBpZiAob2FwLT5ibG9ja19tb2RlICYmIG9hcC0+c3RhcnQubG51bSAhPSBvYXAtPmVuZC5sbnVtKQorICAgIHsKKwlmaXJzdGxpbmUgPSBtbF9nZXQob2FwLT5zdGFydC5sbnVtKTsKKwkvKgorCSAqIFN1YnNlcXVlbnQgY2FsbHMgdG8gbWxfZ2V0KCkgZmx1c2ggdGhlIGZpcnN0bGluZSBkYXRhIC0gdGFrZSBhCisJICogY29weSBvZiB0aGUgcmVxdWlyZWQgYml0LgorCSAqLworCWlmICgoaW5zX2xlbiA9IChsb25nKVNUUkxFTihmaXJzdGxpbmUpIC0gcHJlX3RleHRsZW4pID4gMCkKKwl7CisJICAgIGlmICgoaW5zX3RleHQgPSBhbGxvY19jaGVjaygodW5zaWduZWQpKGluc19sZW4gKyAxKSkpICE9IE5VTEwpCisJICAgIHsKKwkJU1RSTkNQWShpbnNfdGV4dCwgZmlyc3RsaW5lICsgYmQudGV4dGNvbCwgaW5zX2xlbik7CisJCWluc190ZXh0W2luc19sZW5dID0gTlVMOworCQlmb3IgKGxpbmVuciA9IG9hcC0+c3RhcnQubG51bSArIDE7IGxpbmVuciA8PSBvYXAtPmVuZC5sbnVtOworCQkJCQkJCQkgICAgIGxpbmVucisrKQorCQl7CisJCSAgICBibG9ja19wcmVwKG9hcCwgJmJkLCBsaW5lbnIsIFRSVUUpOworCQkgICAgaWYgKCFiZC5pc19zaG9ydCB8fCB2aXJ0dWFsX29wKQorCQkgICAgeworIyBpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCQlwb3NfVCB2cG9zOworCisJCQkvKiBJZiB0aGUgYmxvY2sgc3RhcnRzIGluIHZpcnR1YWwgc3BhY2UsIGNvdW50IHRoZQorCQkJICogaW5pdGlhbCBjb2xhZGQgb2Zmc2V0IGFzIHBhcnQgb2YgInN0YXJ0c3BhY2VzIiAqLworCQkJaWYgKGJkLmlzX3Nob3J0KQorCQkJeworCQkJICAgIGxpbmVucl9UIGxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisKKwkJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsaW5lbnI7CisJCQkgICAgKHZvaWQpZ2V0dnBvcygmdnBvcywgb2FwLT5zdGFydF92Y29sKTsKKwkJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtOworCQkJfQorCQkJZWxzZQorCQkJICAgIHZwb3MuY29sYWRkID0gMDsKKyMgZW5kaWYKKwkJCW9sZHAgPSBtbF9nZXQobGluZW5yKTsKKwkJCW5ld3AgPSBhbGxvY19jaGVjaygodW5zaWduZWQpKFNUUkxFTihvbGRwKQorIyBpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCQkJCQkJKyB2cG9zLmNvbGFkZAorIyBlbmRpZgorCQkJCQkJCSAgICAgICsgaW5zX2xlbiArIDEpKTsKKwkJCWlmIChuZXdwID09IE5VTEwpCisJCQkgICAgY29udGludWU7CisJCQkvKiBjb3B5IHVwIHRvIGJsb2NrIHN0YXJ0ICovCisJCQltY2hfbWVtbW92ZShuZXdwLCBvbGRwLCAoc2l6ZV90KWJkLnRleHRjb2wpOworCQkJb2Zmc2V0ID0gYmQudGV4dGNvbDsKKyMgaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCQkJY29weV9zcGFjZXMobmV3cCArIG9mZnNldCwgKHNpemVfdCl2cG9zLmNvbGFkZCk7CisJCQlvZmZzZXQgKz0gdnBvcy5jb2xhZGQ7CisjIGVuZGlmCisJCQltY2hfbWVtbW92ZShuZXdwICsgb2Zmc2V0LCBpbnNfdGV4dCwgKHNpemVfdClpbnNfbGVuKTsKKwkJCW9mZnNldCArPSBpbnNfbGVuOworCQkJb2xkcCArPSBiZC50ZXh0Y29sOworCQkJbWNoX21lbW1vdmUobmV3cCArIG9mZnNldCwgb2xkcCwgU1RSTEVOKG9sZHApICsgMSk7CisJCQltbF9yZXBsYWNlKGxpbmVuciwgbmV3cCwgRkFMU0UpOworCQkgICAgfQorCQl9CisJCWNoZWNrX2N1cnNvcigpOworCisJCWNoYW5nZWRfbGluZXMob2FwLT5zdGFydC5sbnVtICsgMSwgMCwgb2FwLT5lbmQubG51bSArIDEsIDBMKTsKKwkgICAgfQorCSAgICB2aW1fZnJlZShpbnNfdGV4dCk7CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIHNldCBhbGwgdGhlIHlhbmsgcmVnaXN0ZXJzIHRvIGVtcHR5IChjYWxsZWQgZnJvbSBtYWluKCkpCisgKi8KKyAgICB2b2lkCitpbml0X3lhbmsoKQoreworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fUkVHSVNURVJTOyArK2kpCisJeV9yZWdzW2ldLnlfYXJyYXkgPSBOVUxMOworfQorCisvKgorICogRnJlZSAibiIgbGluZXMgZnJvbSB0aGUgY3VycmVudCB5YW5rIHJlZ2lzdGVyLgorICogQ2FsbGVkIGZvciBub3JtYWwgZnJlZWluZyBhbmQgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmcmVlX3lhbmsobikKKyAgICBsb25nCW47Cit7CisgICAgaWYgKHlfY3VycmVudC0+eV9hcnJheSAhPSBOVUxMKQorICAgIHsKKwlsb25nCSAgICBpOworCisJZm9yIChpID0gbjsgLS1pID49IDA7ICkKKwl7CisjaWZkZWYgQU1JR0EJICAgIC8qIG9ubHkgZm9yIHZlcnkgc2xvdyBtYWNoaW5lcyAqLworCSAgICBpZiAoKGkgJiAxMDIzKSA9PSAxMDIzKSAgLyogdGhpcyBtYXkgdGFrZSBhIHdoaWxlICovCisJICAgIHsKKwkJLyoKKwkJICogVGhpcyBtZXNzYWdlIHNob3VsZCBuZXZlciBjYXVzZSBhIGhpdC1yZXR1cm4gbWVzc2FnZS4KKwkJICogT3ZlcndyaXRlIHRoaXMgbWVzc2FnZSB3aXRoIGFueSBuZXh0IG1lc3NhZ2UuCisJCSAqLworCQkrK25vX3dhaXRfcmV0dXJuOworCQlzbXNnKChjaGFyX3UgKilfKCJmcmVlaW5nICVsZCBsaW5lcyIpLCBpICsgMSk7CisJCS0tbm9fd2FpdF9yZXR1cm47CisJCW1zZ19kaWRvdXQgPSBGQUxTRTsKKwkJbXNnX2NvbCA9IDA7CisJICAgIH0KKyNlbmRpZgorCSAgICB2aW1fZnJlZSh5X2N1cnJlbnQtPnlfYXJyYXlbaV0pOworCX0KKwl2aW1fZnJlZSh5X2N1cnJlbnQtPnlfYXJyYXkpOworCXlfY3VycmVudC0+eV9hcnJheSA9IE5VTEw7CisjaWZkZWYgQU1JR0EKKwlpZiAobiA+PSAxMDAwKQorCSAgICBNU0coIiIpOworI2VuZGlmCisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK2ZyZWVfeWFua19hbGwoKQoreworICAgIGZyZWVfeWFuayh5X2N1cnJlbnQtPnlfc2l6ZSk7Cit9CisKKy8qCisgKiBZYW5rIHRoZSB0ZXh0IGJldHdlZW4gIm9hcC0+c3RhcnQiIGFuZCAib2FwLT5lbmQiIGludG8gYSB5YW5rIHJlZ2lzdGVyLgorICogSWYgd2UgYXJlIHRvIGFwcGVuZCAodXBwZXJjYXNlIHJlZ2lzdGVyKSwgd2UgZmlyc3QgeWFuayBpbnRvIGEgbmV3IHlhbmsKKyAqIHJlZ2lzdGVyIGFuZCB0aGVuIGNvbmNhdGVuYXRlIHRoZSBvbGQgYW5kIHRoZSBuZXcgb25lIChzbyB3ZSBrZWVwIHRoZSBvbGQKKyAqIG9uZSBpbiBjYXNlIG9mIG91dC1vZi1tZW1vcnkpLgorICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAorb3BfeWFuayhvYXAsIGRlbGV0aW5nLCBtZXNzKQorICAgIG9wYXJnX1QgICAqb2FwOworICAgIGludAkgICAgZGVsZXRpbmc7CisgICAgaW50CSAgICBtZXNzOworeworICAgIGxvbmcJCXlfaWR4OwkJLyogaW5kZXggaW4geV9hcnJheVtdICovCisgICAgc3RydWN0IHlhbmtyZWcJKmN1cnI7CQkvKiBjb3B5IG9mIHlfY3VycmVudCAqLworICAgIHN0cnVjdCB5YW5rcmVnCW5ld3JlZzsJCS8qIG5ldyB5YW5rIHJlZ2lzdGVyIHdoZW4gYXBwZW5kaW5nICovCisgICAgY2hhcl91CQkqKm5ld19wdHI7CisgICAgbGluZW5yX1QJCWxudW07CQkvKiBjdXJyZW50IGxpbmUgbnVtYmVyICovCisgICAgbG9uZwkJajsKKyAgICBpbnQJCQl5YW5rdHlwZSA9IG9hcC0+bW90aW9uX3R5cGU7CisgICAgbG9uZwkJeWFua2xpbmVzID0gb2FwLT5saW5lX2NvdW50OworICAgIGxpbmVucl9UCQl5YW5rZW5kbG51bSA9IG9hcC0+ZW5kLmxudW07CisgICAgY2hhcl91CQkqcDsKKyAgICBjaGFyX3UJCSpwbmV3OworICAgIHN0cnVjdCBibG9ja19kZWYJYmQ7CisKKwkJCQkgICAgLyogY2hlY2sgZm9yIHJlYWQtb25seSByZWdpc3RlciAqLworICAgIGlmIChvYXAtPnJlZ25hbWUgIT0gMCAmJiAhdmFsaWRfeWFua19yZWcob2FwLT5yZWduYW1lLCBUUlVFKSkKKyAgICB7CisJYmVlcF9mbHVzaCgpOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICBpZiAob2FwLT5yZWduYW1lID09ICdfJykJICAgIC8qIGJsYWNrIGhvbGU6IG5vdGhpbmcgdG8gZG8gKi8KKwlyZXR1cm4gT0s7CisKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIGlmICghY2xpcF9zdGFyLmF2YWlsYWJsZSAmJiBvYXAtPnJlZ25hbWUgPT0gJyonKQorCW9hcC0+cmVnbmFtZSA9IDA7CisgICAgZWxzZSBpZiAoIWNsaXBfcGx1cy5hdmFpbGFibGUgJiYgb2FwLT5yZWduYW1lID09ICcrJykKKwlvYXAtPnJlZ25hbWUgPSAwOworI2VuZGlmCisKKyAgICBpZiAoIWRlbGV0aW5nKQkJICAgIC8qIG9wX2RlbGV0ZSgpIGFscmVhZHkgc2V0IHlfY3VycmVudCAqLworCWdldF95YW5rX3JlZ2lzdGVyKG9hcC0+cmVnbmFtZSwgVFJVRSk7CisKKyAgICBjdXJyID0geV9jdXJyZW50OworCQkJCSAgICAvKiBhcHBlbmQgdG8gZXhpc3RpbmcgY29udGVudHMgKi8KKyAgICBpZiAoeV9hcHBlbmQgJiYgeV9jdXJyZW50LT55X2FycmF5ICE9IE5VTEwpCisJeV9jdXJyZW50ID0gJm5ld3JlZzsKKyAgICBlbHNlCisJZnJlZV95YW5rX2FsbCgpOwkgICAgLyogZnJlZSBwcmV2aW91c2x5IHlhbmtlZCBsaW5lcyAqLworCisvKgorICogSWYgdGhlIGN1cnNvciB3YXMgaW4gY29sdW1uIDEgYmVmb3JlIGFuZCBhZnRlciB0aGUgbW92ZW1lbnQsIGFuZCB0aGUKKyAqIG9wZXJhdG9yIGlzIG5vdCBpbmNsdXNpdmUsIHRoZSB5YW5rIGlzIGFsd2F5cyBsaW5ld2lzZS4KKyAqLworICAgIGlmICggICAgICAgb2FwLT5tb3Rpb25fdHlwZSA9PSBNQ0hBUgorCSAgICAmJiBvYXAtPnN0YXJ0LmNvbCA9PSAwCisJICAgICYmICFvYXAtPmluY2x1c2l2ZQorI2lmZGVmIEZFQVRfVklTVUFMCisJICAgICYmICghb2FwLT5pc19WSXN1YWwgfHwgKnBfc2VsID09ICdvJykKKyNlbmRpZgorCSAgICAmJiBvYXAtPmVuZC5jb2wgPT0gMAorCSAgICAmJiB5YW5rbGluZXMgPiAxKQorICAgIHsKKwl5YW5rdHlwZSA9IE1MSU5FOworCS0teWFua2VuZGxudW07CisJLS15YW5rbGluZXM7CisgICAgfQorCisgICAgeV9jdXJyZW50LT55X3NpemUgPSB5YW5rbGluZXM7CisgICAgeV9jdXJyZW50LT55X3R5cGUgPSB5YW5rdHlwZTsgICAvKiBzZXQgdGhlIHlhbmsgcmVnaXN0ZXIgdHlwZSAqLworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgeV9jdXJyZW50LT55X3dpZHRoID0gMDsKKyNlbmRpZgorICAgIHlfY3VycmVudC0+eV9hcnJheSA9IChjaGFyX3UgKiopbGFsbG9jX2NsZWFyKChsb25nX3UpKHNpemVvZihjaGFyX3UgKikgKgorCQkJCQkJCSAgICB5YW5rbGluZXMpLCBUUlVFKTsKKworICAgIGlmICh5X2N1cnJlbnQtPnlfYXJyYXkgPT0gTlVMTCkKKyAgICB7CisJeV9jdXJyZW50ID0gY3VycjsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICB5X2lkeCA9IDA7CisgICAgbG51bSA9IG9hcC0+c3RhcnQubG51bTsKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKG9hcC0+YmxvY2tfbW9kZSkKKyAgICB7CisJLyogVmlzdWFsIGJsb2NrIG1vZGUgKi8KKwl5X2N1cnJlbnQtPnlfdHlwZSA9IE1CTE9DSzsJICAgIC8qIHNldCB0aGUgeWFuayByZWdpc3RlciB0eXBlICovCisJeV9jdXJyZW50LT55X3dpZHRoID0gb2FwLT5lbmRfdmNvbCAtIG9hcC0+c3RhcnRfdmNvbDsKKworCWlmIChjdXJ3aW4tPndfY3Vyc3dhbnQgPT0gTUFYQ09MICYmIHlfY3VycmVudC0+eV93aWR0aCA+IDApCisJICAgIHlfY3VycmVudC0+eV93aWR0aC0tOworICAgIH0KKyNlbmRpZgorCisgICAgZm9yICggOyBsbnVtIDw9IHlhbmtlbmRsbnVtOyBsbnVtKyssIHlfaWR4KyspCisgICAgeworCXN3aXRjaCAoeV9jdXJyZW50LT55X3R5cGUpCisJeworI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIGNhc2UgTUJMT0NLOgorCQlibG9ja19wcmVwKG9hcCwgJmJkLCBsbnVtLCBGQUxTRSk7CisJCWlmICh5YW5rX2NvcHlfbGluZSgmYmQsIHlfaWR4KSA9PSBGQUlMKQorCQkgICAgZ290byBmYWlsOworCQlicmVhazsKKyNlbmRpZgorCisJICAgIGNhc2UgTUxJTkU6CisJCWlmICgoeV9jdXJyZW50LT55X2FycmF5W3lfaWR4XSA9CisJCQkgICAgdmltX3N0cnNhdmUobWxfZ2V0KGxudW0pKSkgPT0gTlVMTCkKKwkJICAgIGdvdG8gZmFpbDsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBNQ0hBUjoKKwkJeworCQkgICAgY29sbnJfVCBzdGFydGNvbCA9IDAsIGVuZGNvbCA9IE1BWENPTDsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCSAgICBpbnQgaXNfb25lQ2hhciA9IEZBTFNFOworCQkgICAgY29sbnJfVCBjcywgY2U7CisjZW5kaWYKKwkJICAgIHAgPSBtbF9nZXQobG51bSk7CisJCSAgICBiZC5zdGFydHNwYWNlcyA9IDA7CisJCSAgICBiZC5lbmRzcGFjZXMgPSAwOworCisJCSAgICBpZiAobG51bSA9PSBvYXAtPnN0YXJ0LmxudW0pCisJCSAgICB7CisJCQlzdGFydGNvbCA9IG9hcC0+c3RhcnQuY29sOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJCWlmICh2aXJ0dWFsX29wKQorCQkJeworCQkJICAgIGdldHZjb2woY3Vyd2luLCAmb2FwLT5zdGFydCwgJmNzLCBOVUxMLCAmY2UpOworCQkJICAgIGlmIChjZSAhPSBjcyAmJiBvYXAtPnN0YXJ0LmNvbGFkZCA+IDApCisJCQkgICAgeworCQkJCS8qIFBhcnQgb2YgYSB0YWIgc2VsZWN0ZWQgLS0gYnV0IGRvbid0CisJCQkJICogZG91YmxlLWNvdW50IGl0LiAqLworCQkJCWJkLnN0YXJ0c3BhY2VzID0gKGNlIC0gY3MgKyAxKQorCQkJCQkJCSAgLSBvYXAtPnN0YXJ0LmNvbGFkZDsKKwkJCQlzdGFydGNvbCsrOworCQkJICAgIH0KKwkJCX0KKyNlbmRpZgorCQkgICAgfQorCisJCSAgICBpZiAobG51bSA9PSBvYXAtPmVuZC5sbnVtKQorCQkgICAgeworCQkJZW5kY29sID0gb2FwLT5lbmQuY29sOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJCWlmICh2aXJ0dWFsX29wKQorCQkJeworCQkJICAgIGdldHZjb2woY3Vyd2luLCAmb2FwLT5lbmQsICZjcywgTlVMTCwgJmNlKTsKKwkJCSAgICBpZiAocFtlbmRjb2xdID09IE5VTCB8fCAoY3MgKyBvYXAtPmVuZC5jb2xhZGQgPCBjZQorIyBpZmRlZiBGRUFUX01CWVRFCisJCQkJCS8qIERvbid0IGFkZCBzcGFjZSBmb3IgZG91YmxlLXdpZGUKKwkJCQkJICogY2hhcjsgZW5kY29sIHdpbGwgYmUgb24gbGFzdCBieXRlCisJCQkJCSAqIG9mIG11bHRpLWJ5dGUgY2hhci4gKi8KKwkJCQkJJiYgKCptYl9oZWFkX29mZikocCwgcCArIGVuZGNvbCkgPT0gMAorIyBlbmRpZgorCQkJCQkpKQorCQkJICAgIHsKKwkJCQlpZiAob2FwLT5zdGFydC5sbnVtID09IG9hcC0+ZW5kLmxudW0KKwkJCQkJICAgICYmIG9hcC0+c3RhcnQuY29sID09IG9hcC0+ZW5kLmNvbCkKKwkJCQl7CisJCQkJICAgIC8qIFNwZWNpYWwgY2FzZTogaW5zaWRlIGEgc2luZ2xlIGNoYXIgKi8KKwkJCQkgICAgaXNfb25lQ2hhciA9IFRSVUU7CisJCQkJICAgIGJkLnN0YXJ0c3BhY2VzID0gb2FwLT5lbmQuY29sYWRkCisJCQkJCSAtIG9hcC0+c3RhcnQuY29sYWRkICsgb2FwLT5pbmNsdXNpdmU7CisJCQkJICAgIGVuZGNvbCA9IHN0YXJ0Y29sOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCSAgICBiZC5lbmRzcGFjZXMgPSBvYXAtPmVuZC5jb2xhZGQKKwkJCQkJCQkgICAgICsgb2FwLT5pbmNsdXNpdmU7CisJCQkJICAgIGVuZGNvbCAtPSBvYXAtPmluY2x1c2l2ZTsKKwkJCQl9CisJCQkgICAgfQorCQkJfQorI2VuZGlmCisJCSAgICB9CisJCSAgICBpZiAoc3RhcnRjb2wgPiBlbmRjb2wKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCQkgICAgfHwgaXNfb25lQ2hhcgorI2VuZGlmCisJCQkgICAgKQorCQkJYmQudGV4dGxlbiA9IDA7CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlpZiAoZW5kY29sID09IE1BWENPTCkKKwkJCSAgICBlbmRjb2wgPSBTVFJMRU4ocCk7CisJCQliZC50ZXh0bGVuID0gZW5kY29sIC0gc3RhcnRjb2wgKyBvYXAtPmluY2x1c2l2ZTsKKwkJICAgIH0KKwkJICAgIGJkLnRleHRzdGFydCA9IHAgKyBzdGFydGNvbDsKKwkJICAgIGlmICh5YW5rX2NvcHlfbGluZSgmYmQsIHlfaWR4KSA9PSBGQUlMKQorCQkJZ290byBmYWlsOworCQkgICAgYnJlYWs7CisJCX0KKwkJLyogTk9UUkVBQ0hFRCAqLworCX0KKyAgICB9CisKKyAgICBpZiAoY3VyciAhPSB5X2N1cnJlbnQpCS8qIGFwcGVuZCB0aGUgbmV3IGJsb2NrIHRvIHRoZSBvbGQgYmxvY2sgKi8KKyAgICB7CisJbmV3X3B0ciA9IChjaGFyX3UgKiopbGFsbG9jKChsb25nX3UpKHNpemVvZihjaGFyX3UgKikgKgorCQkJCSAgIChjdXJyLT55X3NpemUgKyB5X2N1cnJlbnQtPnlfc2l6ZSkpLCBUUlVFKTsKKwlpZiAobmV3X3B0ciA9PSBOVUxMKQorCSAgICBnb3RvIGZhaWw7CisJZm9yIChqID0gMDsgaiA8IGN1cnItPnlfc2l6ZTsgKytqKQorCSAgICBuZXdfcHRyW2pdID0gY3Vyci0+eV9hcnJheVtqXTsKKwl2aW1fZnJlZShjdXJyLT55X2FycmF5KTsKKwljdXJyLT55X2FycmF5ID0gbmV3X3B0cjsKKworCWlmICh5YW5rdHlwZSA9PSBNTElORSkJLyogTUxJTkUgb3ZlcnJpZGVzIE1DSEFSIGFuZCBNQkxPQ0sgKi8KKwkgICAgY3Vyci0+eV90eXBlID0gTUxJTkU7CisKKwkvKiBjb25jYXRlbmF0ZSB0aGUgbGFzdCBsaW5lIG9mIHRoZSBvbGQgYmxvY2sgd2l0aCB0aGUgZmlyc3QgbGluZSBvZgorCSAqIHRoZSBuZXcgYmxvY2sgKi8KKwlpZiAoY3Vyci0+eV90eXBlID09IE1DSEFSKQorCXsKKwkgICAgcG5ldyA9IGxhbGxvYygobG9uZ191KShTVFJMRU4oY3Vyci0+eV9hcnJheVtjdXJyLT55X3NpemUgLSAxXSkKKwkJCSAgICAgICsgU1RSTEVOKHlfY3VycmVudC0+eV9hcnJheVswXSkgKyAxKSwgVFJVRSk7CisJICAgIGlmIChwbmV3ID09IE5VTEwpCisJICAgIHsKKwkJeV9pZHggPSB5X2N1cnJlbnQtPnlfc2l6ZSAtIDE7CisJCWdvdG8gZmFpbDsKKwkgICAgfQorCSAgICBTVFJDUFkocG5ldywgY3Vyci0+eV9hcnJheVstLWpdKTsKKwkgICAgU1RSQ0FUKHBuZXcsIHlfY3VycmVudC0+eV9hcnJheVswXSk7CisJICAgIHZpbV9mcmVlKGN1cnItPnlfYXJyYXlbal0pOworCSAgICB2aW1fZnJlZSh5X2N1cnJlbnQtPnlfYXJyYXlbMF0pOworCSAgICBjdXJyLT55X2FycmF5W2orK10gPSBwbmV3OworCSAgICB5X2lkeCA9IDE7CisJfQorCWVsc2UKKwkgICAgeV9pZHggPSAwOworCXdoaWxlICh5X2lkeCA8IHlfY3VycmVudC0+eV9zaXplKQorCSAgICBjdXJyLT55X2FycmF5W2orK10gPSB5X2N1cnJlbnQtPnlfYXJyYXlbeV9pZHgrK107CisJY3Vyci0+eV9zaXplID0gajsKKwl2aW1fZnJlZSh5X2N1cnJlbnQtPnlfYXJyYXkpOworCXlfY3VycmVudCA9IGN1cnI7CisgICAgfQorICAgIGlmIChtZXNzKQkJCS8qIERpc3BsYXkgbWVzc2FnZSBhYm91dCB5YW5rPyAqLworICAgIHsKKwlpZiAoeWFua3R5cGUgPT0gTUNIQVIKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkmJiAhb2FwLT5ibG9ja19tb2RlCisjZW5kaWYKKwkJJiYgeWFua2xpbmVzID09IDEpCisJICAgIHlhbmtsaW5lcyA9IDA7CisJLyogU29tZSB2ZXJzaW9ucyBvZiBWaSB1c2UgIj49IiBoZXJlLCBzb21lIGRvbid0Li4uICAqLworCWlmICh5YW5rbGluZXMgPiBwX3JlcG9ydCkKKwl7CisJICAgIC8qIHJlZGlzcGxheSBub3csIHNvIG1lc3NhZ2UgaXMgbm90IGRlbGV0ZWQgKi8KKwkgICAgdXBkYXRlX3RvcGxpbmVfcmVkcmF3KCk7CisJICAgIGlmICh5YW5rbGluZXMgPT0gMSkKKwkJTVNHKF8oIjEgbGluZSB5YW5rZWQiKSk7CisJICAgIGVsc2UKKwkJc21zZygoY2hhcl91ICopXygiJWxkIGxpbmVzIHlhbmtlZCIpLCB5YW5rbGluZXMpOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCAiJ1siIGFuZCAiJ10iIG1hcmtzLgorICAgICAqLworICAgIGN1cmJ1Zi0+Yl9vcF9zdGFydCA9IG9hcC0+c3RhcnQ7CisgICAgY3VyYnVmLT5iX29wX2VuZCA9IG9hcC0+ZW5kOworCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKyAgICAvKgorICAgICAqIElmIHdlIHdlcmUgeWFua2luZyB0byB0aGUgJyonIHJlZ2lzdGVyLCBzZW5kIHJlc3VsdCB0byBjbGlwYm9hcmQuCisgICAgICogSWYgbm8gcmVnaXN0ZXIgd2FzIHNwZWNpZmllZCwgYW5kICJ1bm5hbWVkIiBpbiAnY2xpcGJvYXJkJywgbWFrZSBhIGNvcHkKKyAgICAgKiB0byB0aGUgJyonIHJlZ2lzdGVyLgorICAgICAqLworICAgIGlmIChjbGlwX3N0YXIuYXZhaWxhYmxlCisJICAgICYmIChjdXJyID09ICYoeV9yZWdzW1NUQVJfUkVHSVNURVJdKQorCQl8fCAoIWRlbGV0aW5nICYmIG9hcC0+cmVnbmFtZSA9PSAwICYmIGNsaXBfdW5uYW1lZCkpKQorICAgIHsKKwlpZiAoY3VyciAhPSAmKHlfcmVnc1tTVEFSX1JFR0lTVEVSXSkpCisJICAgIC8qIENvcHkgdGhlIHRleHQgZnJvbSByZWdpc3RlciAwIHRvIHRoZSBjbGlwYm9hcmQgcmVnaXN0ZXIuICovCisJICAgIGNvcHlfeWFua19yZWcoJih5X3JlZ3NbU1RBUl9SRUdJU1RFUl0pKTsKKworCWNsaXBfb3duX3NlbGVjdGlvbigmY2xpcF9zdGFyKTsKKwljbGlwX2dlbl9zZXRfc2VsZWN0aW9uKCZjbGlwX3N0YXIpOworICAgIH0KKworIyBpZmRlZiBGRUFUX1gxMQorICAgIC8qCisgICAgICogSWYgd2Ugd2VyZSB5YW5raW5nIHRvIHRoZSAnKycgcmVnaXN0ZXIsIHNlbmQgcmVzdWx0IHRvIHNlbGVjdGlvbi4KKyAgICAgKiBBbHNvIGNvcHkgdG8gdGhlICcqJyByZWdpc3RlciwgaW4gY2FzZSBhdXRvLXNlbGVjdCBpcyBvZmYuCisgICAgICovCisgICAgZWxzZSBpZiAoY2xpcF9wbHVzLmF2YWlsYWJsZSAmJiBjdXJyID09ICYoeV9yZWdzW1BMVVNfUkVHSVNURVJdKSkKKyAgICB7CisJLyogTm8gbmVlZCB0byBjb3B5IHRvICogcmVnaXN0ZXIgdXBvbiAndW5uYW1lZCcgbm93IC0gc2VlIGJlbG93ICovCisJY2xpcF9vd25fc2VsZWN0aW9uKCZjbGlwX3BsdXMpOworCWNsaXBfZ2VuX3NldF9zZWxlY3Rpb24oJmNsaXBfcGx1cyk7CisJaWYgKCFjbGlwX2lzYXV0b3NlbCgpKQorCXsKKwkgICAgY29weV95YW5rX3JlZygmKHlfcmVnc1tTVEFSX1JFR0lTVEVSXSkpOworCSAgICBjbGlwX293bl9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7CisJICAgIGNsaXBfZ2VuX3NldF9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7CisJfQorICAgIH0KKyMgZW5kaWYKKyNlbmRpZgorCisgICAgcmV0dXJuIE9LOworCitmYWlsOgkJLyogZnJlZSB0aGUgYWxsb2NhdGVkIGxpbmVzICovCisgICAgZnJlZV95YW5rKHlfaWR4ICsgMSk7CisgICAgeV9jdXJyZW50ID0gY3VycjsKKyAgICByZXR1cm4gRkFJTDsKK30KKworICAgIHN0YXRpYyBpbnQKK3lhbmtfY29weV9saW5lKGJkLCB5X2lkeCkKKyAgICBzdHJ1Y3QgYmxvY2tfZGVmCSpiZDsKKyAgICBsb25nCQl5X2lkeDsKK3sKKyAgICBjaGFyX3UJKnBuZXc7CisKKyAgICBpZiAoKHBuZXcgPSBhbGxvYyhiZC0+c3RhcnRzcGFjZXMgKyBiZC0+ZW5kc3BhY2VzICsgYmQtPnRleHRsZW4gKyAxKSkKKwkJCQkJCQkJICAgICAgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKyAgICB5X2N1cnJlbnQtPnlfYXJyYXlbeV9pZHhdID0gcG5ldzsKKyAgICBjb3B5X3NwYWNlcyhwbmV3LCAoc2l6ZV90KWJkLT5zdGFydHNwYWNlcyk7CisgICAgcG5ldyArPSBiZC0+c3RhcnRzcGFjZXM7CisgICAgbWNoX21lbW1vdmUocG5ldywgYmQtPnRleHRzdGFydCwgKHNpemVfdCliZC0+dGV4dGxlbik7CisgICAgcG5ldyArPSBiZC0+dGV4dGxlbjsKKyAgICBjb3B5X3NwYWNlcyhwbmV3LCAoc2l6ZV90KWJkLT5lbmRzcGFjZXMpOworICAgIHBuZXcgKz0gYmQtPmVuZHNwYWNlczsKKyAgICAqcG5ldyA9IE5VTDsKKyAgICByZXR1cm4gT0s7Cit9CisKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorLyoKKyAqIE1ha2UgYSBjb3B5IG9mIHRoZSB5X2N1cnJlbnQgcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgInJlZyIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY29weV95YW5rX3JlZyhyZWcpCisgICAgc3RydWN0IHlhbmtyZWcgKnJlZzsKK3sKKyAgICBzdHJ1Y3QgeWFua3JlZwkqY3VyciA9IHlfY3VycmVudDsKKyAgICBsb25nCQlqOworCisgICAgeV9jdXJyZW50ID0gcmVnOworICAgIGZyZWVfeWFua19hbGwoKTsKKyAgICAqeV9jdXJyZW50ID0gKmN1cnI7CisgICAgeV9jdXJyZW50LT55X2FycmF5ID0gKGNoYXJfdSAqKilsYWxsb2NfY2xlYXIoCisJCQkobG9uZ191KShzaXplb2YoY2hhcl91ICopICogeV9jdXJyZW50LT55X3NpemUpLCBUUlVFKTsKKyAgICBpZiAoeV9jdXJyZW50LT55X2FycmF5ID09IE5VTEwpCisJeV9jdXJyZW50LT55X3NpemUgPSAwOworICAgIGVsc2UKKwlmb3IgKGogPSAwOyBqIDwgeV9jdXJyZW50LT55X3NpemU7ICsraikKKwkgICAgaWYgKCh5X2N1cnJlbnQtPnlfYXJyYXlbal0gPSB2aW1fc3Ryc2F2ZShjdXJyLT55X2FycmF5W2pdKSkgPT0gTlVMTCkKKwkgICAgeworCQlmcmVlX3lhbmsoaik7CisJCXlfY3VycmVudC0+eV9zaXplID0gMDsKKwkJYnJlYWs7CisJICAgIH0KKyAgICB5X2N1cnJlbnQgPSBjdXJyOworfQorI2VuZGlmCisKKy8qCisgKiBwdXQgY29udGVudHMgb2YgcmVnaXN0ZXIgInJlZ25hbWUiIGludG8gdGhlIHRleHQKKyAqIGZsYWdzOiBQVVRfRklYSU5ERU5UCW1ha2UgaW5kZW50IGxvb2sgbmljZQorICoJICBQVVRfQ1VSU0VORAlsZWF2ZSBjdXJzb3IgYWZ0ZXIgZW5kIG9mIG5ldyB0ZXh0CisgKgkgIFBVVF9MSU5FCWZvcmNlIGxpbmV3aXNlIHB1dCAoIjpwdXQiKQorICovCisgICAgdm9pZAorZG9fcHV0KHJlZ25hbWUsIGRpciwgY291bnQsIGZsYWdzKQorICAgIGludAkJcmVnbmFtZTsKKyAgICBpbnQJCWRpcjsJCS8qIEJBQ0tXQVJEIGZvciAnUCcsIEZPUldBUkQgZm9yICdwJyAqLworICAgIGxvbmcJY291bnQ7CisgICAgaW50CQlmbGFnczsKK3sKKyAgICBjaGFyX3UJKnB0cjsKKyAgICBjaGFyX3UJKm5ld3AsICpvbGRwOworICAgIGludAkJeWFua2xlbjsKKyAgICBpbnQJCXRvdGxlbiA9IDA7CQkvKiBpbml0IGZvciBnY2MgKi8KKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGNvbG5yX1QJY29sOworICAgIGxvbmcJaTsJCQkvKiBpbmRleCBpbiB5X2FycmF5W10gKi8KKyAgICBpbnQJCXlfdHlwZTsKKyAgICBsb25nCXlfc2l6ZTsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGludAkJb2xkbGVuOworICAgIGxvbmcJeV93aWR0aCA9IDA7CisgICAgY29sbnJfVAl2Y29sOworICAgIGludAkJZGVsY291bnQ7CisgICAgaW50CQlpbmNyID0gMDsKKyAgICBsb25nCWo7CisgICAgc3RydWN0IGJsb2NrX2RlZiBiZDsKKyNlbmRpZgorICAgIGNoYXJfdQkqKnlfYXJyYXkgPSBOVUxMOworICAgIGxvbmcJbnJfbGluZXMgPSAwOworICAgIHBvc19UCW5ld19jdXJzb3I7CisgICAgaW50CQlpbmRlbnQ7CisgICAgaW50CQlvcmlnX2luZGVudCA9IDA7CS8qIGluaXQgZm9yIGdjYyAqLworICAgIGludAkJaW5kZW50X2RpZmYgPSAwOwkvKiBpbml0IGZvciBnY2MgKi8KKyAgICBpbnQJCWZpcnN0X2luZGVudCA9IFRSVUU7CisgICAgaW50CQlsZW5kaWZmID0gMDsKKyAgICBwb3NfVAlvbGRfcG9zOworICAgIGNoYXJfdQkqaW5zZXJ0X3N0cmluZyA9IE5VTEw7CisgICAgaW50CQlhbGxvY2F0ZWQgPSBGQUxTRTsKKyAgICBsb25nCWNudDsKKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgLyogQWRqdXN0IHJlZ2lzdGVyIG5hbWUgZm9yICJ1bm5hbWVkIiBpbiAnY2xpcGJvYXJkJy4gKi8KKyAgICBhZGp1c3RfY2xpcF9yZWcoJnJlZ25hbWUpOworICAgICh2b2lkKW1heV9nZXRfc2VsZWN0aW9uKHJlZ25hbWUpOworI2VuZGlmCisKKyAgICBpZiAoZmxhZ3MgJiBQVVRfRklYSU5ERU5UKQorCW9yaWdfaW5kZW50ID0gZ2V0X2luZGVudCgpOworCisgICAgY3VyYnVmLT5iX29wX3N0YXJ0ID0gY3Vyd2luLT53X2N1cnNvcjsJLyogZGVmYXVsdCBmb3IgJ1sgbWFyayAqLworICAgIGN1cmJ1Zi0+Yl9vcF9lbmQgPSBjdXJ3aW4tPndfY3Vyc29yOwkvKiBkZWZhdWx0IGZvciAnXSBtYXJrICovCisKKyAgICAvKgorICAgICAqIFVzaW5nIGluc2VydGVkIHRleHQgd29ya3MgZGlmZmVyZW50bHksIGJlY2F1c2UgdGhlIHJlZ2lzdGVyIGluY2x1ZGVzCisgICAgICogc3BlY2lhbCBjaGFyYWN0ZXJzIChuZXdsaW5lcywgZXRjLikuCisgICAgICovCisgICAgaWYgKHJlZ25hbWUgPT0gJy4nKQorICAgIHsKKwkodm9pZClzdHVmZl9pbnNlcnRlZCgoZGlyID09IEZPUldBUkQgPyAoY291bnQgPT0gLTEgPyAnbycgOiAnYScpIDoKKwkJCQkgICAgKGNvdW50ID09IC0xID8gJ08nIDogJ2knKSksIGNvdW50LCBGQUxTRSk7CisJLyogUHV0dGluZyB0aGUgdGV4dCBpcyBkb25lIGxhdGVyLCBzbyBjYW4ndCByZWFsbHkgbW92ZSB0aGUgY3Vyc29yIHRvCisJICogdGhlIG5leHQgY2hhcmFjdGVyLiAgVXNlICJsIiB0byBzaW11bGF0ZSBpdC4gKi8KKwlpZiAoKGZsYWdzICYgUFVUX0NVUlNFTkQpICYmIGdjaGFyX2N1cnNvcigpICE9IE5VTCkKKwkgICAgc3R1ZmZjaGFyUmVhZGJ1ZmYoJ2wnKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3Igc3BlY2lhbCByZWdpc3RlcnMgJyUnIChmaWxlIG5hbWUpLCAnIycgKGFsdGVybmF0ZSBmaWxlIG5hbWUpIGFuZAorICAgICAqICc6JyAobGFzdCBjb21tYW5kIGxpbmUpLCBldGMuIHdlIGhhdmUgdG8gY3JlYXRlIGEgZmFrZSB5YW5rIHJlZ2lzdGVyLgorICAgICAqLworICAgIGlmIChnZXRfc3BlY19yZWcocmVnbmFtZSwgJmluc2VydF9zdHJpbmcsICZhbGxvY2F0ZWQsIFRSVUUpKQorICAgIHsKKwlpZiAoaW5zZXJ0X3N0cmluZyA9PSBOVUxMKQorCSAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGluc2VydF9zdHJpbmcgIT0gTlVMTCkKKyAgICB7CisJeV90eXBlID0gTUNIQVI7CisjaWZkZWYgRkVBVF9FVkFMCisJaWYgKHJlZ25hbWUgPT0gJz0nKQorCXsKKwkgICAgLyogRm9yIHRoZSA9IHJlZ2lzdGVyIHdlIG5lZWQgdG8gc3BsaXQgdGhlIHN0cmluZyBhdCBOTAorCSAgICAgKiBjaGFyYWN0ZXJzLiAqLworCSAgICAvKiBMb29wIHR3aWNlOiBjb3VudCB0aGUgbnVtYmVyIG9mIGxpbmVzIGFuZCBzYXZlIHRoZW0uICovCisJICAgIGZvciAoOzspCisJICAgIHsKKwkJeV9zaXplID0gMDsKKwkJcHRyID0gaW5zZXJ0X3N0cmluZzsKKwkJd2hpbGUgKHB0ciAhPSBOVUxMKQorCQl7CisJCSAgICBpZiAoeV9hcnJheSAhPSBOVUxMKQorCQkJeV9hcnJheVt5X3NpemVdID0gcHRyOworCQkgICAgKyt5X3NpemU7CisJCSAgICBwdHIgPSB2aW1fc3RyY2hyKHB0ciwgJ1xuJyk7CisJCSAgICBpZiAocHRyICE9IE5VTEwpCisJCSAgICB7CisJCQlpZiAoeV9hcnJheSAhPSBOVUxMKQorCQkJICAgICpwdHIgPSBOVUw7CisJCQkrK3B0cjsKKwkJCS8qIEEgdHJhaWxpbmcgJ1xuJyBtYWtlcyB0aGUgc3RyaW5nIGxpbmV3aXNlICovCisJCQlpZiAoKnB0ciA9PSBOVUwpCisJCQl7CisJCQkgICAgeV90eXBlID0gTUxJTkU7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkJaWYgKHlfYXJyYXkgIT0gTlVMTCkKKwkJICAgIGJyZWFrOworCQl5X2FycmF5ID0gKGNoYXJfdSAqKilhbGxvYygodW5zaWduZWQpCisJCQkJCQkgKHlfc2l6ZSAqIHNpemVvZihjaGFyX3UgKikpKTsKKwkJaWYgKHlfYXJyYXkgPT0gTlVMTCkKKwkJICAgIGdvdG8gZW5kOworCSAgICB9CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgeV9zaXplID0gMTsJCS8qIHVzZSBmYWtlIG9uZS1saW5lIHlhbmsgcmVnaXN0ZXIgKi8KKwkgICAgeV9hcnJheSA9ICZpbnNlcnRfc3RyaW5nOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlnZXRfeWFua19yZWdpc3RlcihyZWduYW1lLCBGQUxTRSk7CisKKwl5X3R5cGUgPSB5X2N1cnJlbnQtPnlfdHlwZTsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCXlfd2lkdGggPSB5X2N1cnJlbnQtPnlfd2lkdGg7CisjZW5kaWYKKwl5X3NpemUgPSB5X2N1cnJlbnQtPnlfc2l6ZTsKKwl5X2FycmF5ID0geV9jdXJyZW50LT55X2FycmF5OworICAgIH0KKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKHlfdHlwZSA9PSBNTElORSkKKyAgICB7CisJaWYgKGZsYWdzICYgUFVUX0xJTkVfU1BMSVQpCisJeworCSAgICAvKiAicCIgb3IgIlAiIGluIFZpc3VhbCBtb2RlOiBzcGxpdCB0aGUgbGluZXMgdG8gcHV0IHRoZSB0ZXh0IGluCisJICAgICAqIGJldHdlZW4uICovCisJICAgIGlmICh1X3NhdmVfY3Vyc29yKCkgPT0gRkFJTCkKKwkJZ290byBlbmQ7CisJICAgIHB0ciA9IHZpbV9zdHJzYXZlKG1sX2dldF9jdXJzb3IoKSk7CisJICAgIGlmIChwdHIgPT0gTlVMTCkKKwkJZ290byBlbmQ7CisJICAgIG1sX2FwcGVuZChjdXJ3aW4tPndfY3Vyc29yLmxudW0sIHB0ciwgKGNvbG5yX1QpMCwgRkFMU0UpOworCSAgICB2aW1fZnJlZShwdHIpOworCisJICAgIHB0ciA9IHZpbV9zdHJuc2F2ZShtbF9nZXRfY3VybGluZSgpLCBjdXJ3aW4tPndfY3Vyc29yLmNvbCk7CisJICAgIGlmIChwdHIgPT0gTlVMTCkKKwkJZ290byBlbmQ7CisJICAgIG1sX3JlcGxhY2UoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBwdHIsIEZBTFNFKTsKKwkgICAgKytucl9saW5lczsKKwkgICAgZGlyID0gRk9SV0FSRDsKKwl9CisJaWYgKGZsYWdzICYgUFVUX0xJTkVfRk9SV0FSRCkKKwl7CisJICAgIC8qIE11c3QgYmUgInAiIGZvciBhIFZpc3VhbCBibG9jaywgcHV0IGxpbmVzIGJlbG93IHRoZSBibG9jay4gKi8KKwkgICAgY3Vyd2luLT53X2N1cnNvciA9IGN1cmJ1Zi0+Yl92aXN1YWxfZW5kOworCSAgICBkaXIgPSBGT1JXQVJEOworCX0KKwljdXJidWYtPmJfb3Bfc3RhcnQgPSBjdXJ3aW4tPndfY3Vyc29yOwkvKiBkZWZhdWx0IGZvciAnWyBtYXJrICovCisJY3VyYnVmLT5iX29wX2VuZCA9IGN1cndpbi0+d19jdXJzb3I7CS8qIGRlZmF1bHQgZm9yICddIG1hcmsgKi8KKyAgICB9CisjZW5kaWYKKworICAgIGlmIChmbGFncyAmIFBVVF9MSU5FKQkvKiA6cHV0IGNvbW1hbmQgb3IgInAiIGluIFZpc3VhbCBsaW5lIG1vZGUuICovCisJeV90eXBlID0gTUxJTkU7CisKKyAgICBpZiAoeV9zaXplID09IDAgfHwgeV9hcnJheSA9PSBOVUxMKQorICAgIHsKKwlFTVNHMihfKCJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIiksCisJCSAgcmVnbmFtZSA9PSAwID8gKGNoYXJfdSAqKSJcIiIgOiB0cmFuc2NoYXIocmVnbmFtZSkpOworCWdvdG8gZW5kOworICAgIH0KKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKHlfdHlwZSA9PSBNQkxPQ0spCisgICAgeworCWxudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW0gKyB5X3NpemUgKyAxOworCWlmIChsbnVtID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJICAgIGxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCArIDE7CisJaWYgKHVfc2F2ZShjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSAxLCBsbnVtKSA9PSBGQUlMKQorCSAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJaWYgKHlfdHlwZSA9PSBNTElORSkKKyAgICB7CisJbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkvKiBDb3JyZWN0IGxpbmUgbnVtYmVyIGZvciBjbG9zZWQgZm9sZC4gIERvbid0IG1vdmUgdGhlIGN1cnNvciB5ZXQsCisJICogdV9zYXZlKCkgdXNlcyBpdC4gKi8KKwlpZiAoZGlyID09IEJBQ0tXQVJEKQorCSAgICAodm9pZCloYXNGb2xkaW5nKGxudW0sICZsbnVtLCBOVUxMKTsKKwllbHNlCisJICAgICh2b2lkKWhhc0ZvbGRpbmcobG51bSwgTlVMTCwgJmxudW0pOworI2VuZGlmCisJaWYgKGRpciA9PSBGT1JXQVJEKQorCSAgICArK2xudW07CisJaWYgKHVfc2F2ZShsbnVtIC0gMSwgbG51bSkgPT0gRkFJTCkKKwkgICAgZ290byBlbmQ7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJaWYgKGRpciA9PSBGT1JXQVJEKQorCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBsbnVtIC0gMTsKKwllbHNlCisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisJY3VyYnVmLT5iX29wX3N0YXJ0ID0gY3Vyd2luLT53X2N1cnNvcjsJLyogZm9yIG1hcmtfYWRqdXN0KCkgKi8KKyNlbmRpZgorICAgIH0KKyAgICBlbHNlIGlmICh1X3NhdmVfY3Vyc29yKCkgPT0gRkFJTCkKKwlnb3RvIGVuZDsKKworICAgIHlhbmtsZW4gPSAoaW50KVNUUkxFTih5X2FycmF5WzBdKTsKKworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICBpZiAodmVfZmxhZ3MgPT0gVkVfQUxMICYmIHlfdHlwZSA9PSBNQ0hBUikKKyAgICB7CisJaWYgKGdjaGFyX2N1cnNvcigpID09IFRBQikKKwl7CisJICAgIC8qIERvbid0IG5lZWQgdG8gaW5zZXJ0IHNwYWNlcyB3aGVuICJwIiBvbiB0aGUgbGFzdCBwb3NpdGlvbiBvZiBhCisJICAgICAqIHRhYiBvciAiUCIgb24gdGhlIGZpcnN0IHBvc2l0aW9uLiAqLworCSAgICBpZiAoZGlyID09IEZPUldBUkQKKwkJICAgID8gKGludCljdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA8IGN1cmJ1Zi0+Yl9wX3RzIC0gMQorCQkJCQkJOiBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA+IDApCisJCWNvbGFkdmFuY2VfZm9yY2UoZ2V0dmlzY29sKCkpOworCSAgICBlbHNlCisJCWN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKwl9CisJZWxzZSBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPiAwIHx8IGdjaGFyX2N1cnNvcigpID09IE5VTCkKKwkgICAgY29sYWR2YW5jZV9mb3JjZShnZXR2aXNjb2woKSArIChkaXIgPT0gRk9SV0FSRCkpOworICAgIH0KKyNlbmRpZgorCisgICAgbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICBjb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgLyoKKyAgICAgKiBCbG9jayBtb2RlCisgICAgICovCisgICAgaWYgKHlfdHlwZSA9PSBNQkxPQ0spCisgICAgeworCWNoYXIJYyA9IGdjaGFyX2N1cnNvcigpOworCWNvbG5yX1QJZW5kY29sMiA9IDA7CisKKwlpZiAoZGlyID09IEZPUldBUkQgJiYgYyAhPSBOVUwpCisJeworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkgICAgaWYgKHZlX2ZsYWdzID09IFZFX0FMTCkKKwkJZ2V0dmNvbChjdXJ3aW4sICZjdXJ3aW4tPndfY3Vyc29yLCAmY29sLCBOVUxMLCAmZW5kY29sMik7CisJICAgIGVsc2UKKyNlbmRpZgorCQlnZXR2Y29sKGN1cndpbiwgJmN1cndpbi0+d19jdXJzb3IsIE5VTEwsIE5VTEwsICZjb2wpOworCisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQkvKiBtb3ZlIHRvIHN0YXJ0IG9mIG5leHQgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgKi8KKwkJY3Vyd2luLT53X2N1cnNvci5jb2wgKz0gKCptYl9wdHIybGVuX2NoZWNrKShtbF9nZXRfY3Vyc29yKCkpOworCSAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJICAgIGlmIChjICE9IFRBQiB8fCB2ZV9mbGFncyAhPSBWRV9BTEwpCisjZW5kaWYKKwkJKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwkgICAgKytjb2w7CisJfQorCWVsc2UKKwkgICAgZ2V0dmNvbChjdXJ3aW4sICZjdXJ3aW4tPndfY3Vyc29yLCAmY29sLCBOVUxMLCAmZW5kY29sMik7CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJY29sICs9IGN1cndpbi0+d19jdXJzb3IuY29sYWRkOworCWlmICh2ZV9mbGFncyA9PSBWRV9BTEwgJiYgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPiAwKQorCXsKKwkgICAgaWYgKGRpciA9PSBGT1JXQVJEICYmIGMgPT0gTlVMKQorCQkrK2NvbDsKKwkgICAgaWYgKGRpciAhPSBGT1JXQVJEICYmIGMgIT0gTlVMKQorCQkrK2N1cndpbi0+d19jdXJzb3IuY29sOworCSAgICBpZiAoYyA9PSBUQUIpCisJICAgIHsKKwkJaWYgKGRpciA9PSBCQUNLV0FSRCAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkJICAgIGN1cndpbi0+d19jdXJzb3IuY29sLS07CisJCWlmIChkaXIgPT0gRk9SV0FSRCAmJiBjb2wgLSAxID09IGVuZGNvbDIpCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCsrOworCSAgICB9CisJfQorCWN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorCWZvciAoaSA9IDA7IGkgPCB5X3NpemU7ICsraSkKKwl7CisJICAgIGludCBzcGFjZXM7CisJICAgIGNoYXIgc2hvcnRsaW5lOworCisJICAgIGJkLnN0YXJ0c3BhY2VzID0gMDsKKwkgICAgYmQuZW5kc3BhY2VzID0gMDsKKwkgICAgYmQudGV4dGNvbCA9IDA7CisJICAgIHZjb2wgPSAwOworCSAgICBkZWxjb3VudCA9IDA7CisKKwkgICAgLyogYWRkIGEgbmV3IGxpbmUgKi8KKwkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSAgICB7CisJCWlmIChtbF9hcHBlbmQoY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQsIChjaGFyX3UgKikiIiwKKwkJCQkJCSAgIChjb2xucl9UKTEsIEZBTFNFKSA9PSBGQUlMKQorCQkgICAgYnJlYWs7CisJCSsrbnJfbGluZXM7CisJICAgIH0KKwkgICAgLyogZ2V0IHRoZSBvbGQgbGluZSBhbmQgYWR2YW5jZSB0byB0aGUgcG9zaXRpb24gdG8gaW5zZXJ0IGF0ICovCisJICAgIG9sZHAgPSBtbF9nZXRfY3VybGluZSgpOworCSAgICBvbGRsZW4gPSAoaW50KVNUUkxFTihvbGRwKTsKKwkgICAgZm9yIChwdHIgPSBvbGRwOyB2Y29sIDwgY29sICYmICpwdHI7ICkKKwkgICAgeworCQkvKiBDb3VudCBhIHRhYiBmb3Igd2hhdCBpdCdzIHdvcnRoIChpZiBsaXN0IG1vZGUgbm90IG9uKSAqLworCQlpbmNyID0gbGJyX2NoYXJ0YWJzaXplX2FkdigmcHRyLCAoY29sbnJfVCl2Y29sKTsKKwkJdmNvbCArPSBpbmNyOworCSAgICB9CisJICAgIGJkLnRleHRjb2wgPSAoY29sbnJfVCkocHRyIC0gb2xkcCk7CisKKwkgICAgc2hvcnRsaW5lID0gKHZjb2wgPCBjb2wpIHx8ICh2Y29sID09IGNvbCAmJiAhKnB0cikgOworCisJICAgIGlmICh2Y29sIDwgY29sKSAvKiBsaW5lIHRvbyBzaG9ydCwgcGFkZCB3aXRoIHNwYWNlcyAqLworCQliZC5zdGFydHNwYWNlcyA9IGNvbCAtIHZjb2w7CisJICAgIGVsc2UgaWYgKHZjb2wgPiBjb2wpCisJICAgIHsKKwkJYmQuZW5kc3BhY2VzID0gdmNvbCAtIGNvbDsKKwkJYmQuc3RhcnRzcGFjZXMgPSBpbmNyIC0gYmQuZW5kc3BhY2VzOworCQktLWJkLnRleHRjb2w7CisJCWRlbGNvdW50ID0gMTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWlmIChoYXNfbWJ5dGUpCisJCSAgICBiZC50ZXh0Y29sIC09ICgqbWJfaGVhZF9vZmYpKG9sZHAsIG9sZHAgKyBiZC50ZXh0Y29sKTsKKyNlbmRpZgorCQlpZiAob2xkcFtiZC50ZXh0Y29sXSAhPSBUQUIpCisJCXsKKwkJICAgIC8qIE9ubHkgYSBUYWIgY2FuIGJlIHNwbGl0IGludG8gc3BhY2VzLiAgT3RoZXIKKwkJICAgICAqIGNoYXJhY3RlcnMgd2lsbCBoYXZlIHRvIGJlIG1vdmVkIHRvIGFmdGVyIHRoZQorCQkgICAgICogYmxvY2ssIGNhdXNpbmcgbWlzYWxpZ25tZW50LiAqLworCQkgICAgZGVsY291bnQgPSAwOworCQkgICAgYmQuZW5kc3BhY2VzID0gMDsKKwkJfQorCSAgICB9CisKKwkgICAgeWFua2xlbiA9IChpbnQpU1RSTEVOKHlfYXJyYXlbaV0pOworCisJICAgIC8qIGNhbGN1bGF0ZSBudW1iZXIgb2Ygc3BhY2VzIHJlcXVpcmVkIHRvIGZpbGwgcmlnaHQgc2lkZSBvZiBibG9jayovCisJICAgIHNwYWNlcyA9IHlfd2lkdGggKyAxOworCSAgICBmb3IgKGogPSAwOyBqIDwgeWFua2xlbjsgaisrKQorCQlzcGFjZXMgLT0gbGJyX2NoYXJ0YWJzaXplKCZ5X2FycmF5W2ldW2pdLCAwKTsKKwkgICAgaWYgKHNwYWNlcyA8IDApCisJCXNwYWNlcyA9IDA7CisKKwkgICAgLyogaW5zZXJ0IHRoZSBuZXcgdGV4dCAqLworCSAgICB0b3RsZW4gPSBjb3VudCAqICh5YW5rbGVuICsgc3BhY2VzKSArIGJkLnN0YXJ0c3BhY2VzICsgYmQuZW5kc3BhY2VzOworCSAgICBuZXdwID0gYWxsb2NfY2hlY2soKHVuc2lnbmVkKXRvdGxlbiArIG9sZGxlbiArIDEpOworCSAgICBpZiAobmV3cCA9PSBOVUxMKQorCQlicmVhazsKKwkgICAgLyogY29weSBwYXJ0IHVwIHRvIGN1cnNvciB0byBuZXcgbGluZSAqLworCSAgICBwdHIgPSBuZXdwOworCSAgICBtY2hfbWVtbW92ZShwdHIsIG9sZHAsIChzaXplX3QpYmQudGV4dGNvbCk7CisJICAgIHB0ciArPSBiZC50ZXh0Y29sOworCSAgICAvKiBtYXkgaW5zZXJ0IHNvbWUgc3BhY2VzIGJlZm9yZSB0aGUgbmV3IHRleHQgKi8KKwkgICAgY29weV9zcGFjZXMocHRyLCAoc2l6ZV90KWJkLnN0YXJ0c3BhY2VzKTsKKwkgICAgcHRyICs9IGJkLnN0YXJ0c3BhY2VzOworCSAgICAvKiBpbnNlcnQgdGhlIG5ldyB0ZXh0ICovCisJICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgKytqKQorCSAgICB7CisJCW1jaF9tZW1tb3ZlKHB0ciwgeV9hcnJheVtpXSwgKHNpemVfdCl5YW5rbGVuKTsKKwkJcHRyICs9IHlhbmtsZW47CisKKwkJLyogaW5zZXJ0IGJsb2NrJ3MgdHJhaWxpbmcgc3BhY2VzIG9ubHkgaWYgdGhlcmUncyB0ZXh0IGJlaGluZCAqLworCQlpZiAoKGogPCBjb3VudCAtIDEgfHwgIXNob3J0bGluZSkgJiYgc3BhY2VzKQorCQl7CisJCSAgICBjb3B5X3NwYWNlcyhwdHIsIChzaXplX3Qpc3BhY2VzKTsKKwkJICAgIHB0ciArPSBzcGFjZXM7CisJCX0KKwkgICAgfQorCSAgICAvKiBtYXkgaW5zZXJ0IHNvbWUgc3BhY2VzIGFmdGVyIHRoZSBuZXcgdGV4dCAqLworCSAgICBjb3B5X3NwYWNlcyhwdHIsIChzaXplX3QpYmQuZW5kc3BhY2VzKTsKKwkgICAgcHRyICs9IGJkLmVuZHNwYWNlczsKKwkgICAgLyogbW92ZSB0aGUgdGV4dCBhZnRlciB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuICovCisJICAgIG1jaF9tZW1tb3ZlKHB0ciwgb2xkcCArIGJkLnRleHRjb2wgKyBkZWxjb3VudCwKKwkJCQkoc2l6ZV90KShvbGRsZW4gLSBiZC50ZXh0Y29sIC0gZGVsY291bnQgKyAxKSk7CisJICAgIG1sX3JlcGxhY2UoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBuZXdwLCBGQUxTRSk7CisKKwkgICAgKytjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJICAgIGlmIChpID09IDApCisJCWN1cndpbi0+d19jdXJzb3IuY29sICs9IGJkLnN0YXJ0c3BhY2VzOworCX0KKworCWNoYW5nZWRfbGluZXMobG51bSwgMCwgY3Vyd2luLT53X2N1cnNvci5sbnVtLCBucl9saW5lcyk7CisKKwkvKiBTZXQgJ1sgbWFyay4gKi8KKwljdXJidWYtPmJfb3Bfc3RhcnQgPSBjdXJ3aW4tPndfY3Vyc29yOworCWN1cmJ1Zi0+Yl9vcF9zdGFydC5sbnVtID0gbG51bTsKKworCS8qIGFkanVzdCAnXSBtYXJrICovCisJY3VyYnVmLT5iX29wX2VuZC5sbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtIC0gMTsKKwljdXJidWYtPmJfb3BfZW5kLmNvbCA9IGJkLnRleHRjb2wgKyB0b3RsZW4gLSAxOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwljdXJidWYtPmJfb3BfZW5kLmNvbGFkZCA9IDA7CisjZW5kaWYKKwlpZiAoZmxhZ3MgJiBQVVRfQ1VSU0VORCkKKwl7CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSBjdXJidWYtPmJfb3BfZW5kOworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCsrOworCX0KKwllbHNlCisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwkvKgorCSAqIENoYXJhY3RlciBvciBMaW5lIG1vZGUKKwkgKi8KKwlpZiAoeV90eXBlID09IE1DSEFSKQorCXsKKwkgICAgLyogaWYgdHlwZSBpcyBNQ0hBUiwgRk9SV0FSRCBpcyB0aGUgc2FtZSBhcyBCQUNLV0FSRCBvbiB0aGUgbmV4dAorCSAgICAgKiBjaGFyICovCisJICAgIGlmIChkaXIgPT0gRk9SV0FSRCAmJiBnY2hhcl9jdXJzb3IoKSAhPSBOVUwpCisJICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWlmIChoYXNfbWJ5dGUpCisJCXsKKwkJICAgIGludCBieXRlbGVuID0gKCptYl9wdHIybGVuX2NoZWNrKShtbF9nZXRfY3Vyc29yKCkpOworCisJCSAgICAvKiBwdXQgaXQgb24gdGhlIG5leHQgb2YgdGhlIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiAqLworCQkgICAgY29sICs9IGJ5dGVsZW47CisJCSAgICBpZiAoeWFua2xlbikKKwkJICAgIHsKKwkJCWN1cndpbi0+d19jdXJzb3IuY29sICs9IGJ5dGVsZW47CisJCQljdXJidWYtPmJfb3BfZW5kLmNvbCArPSBieXRlbGVuOworCQkgICAgfQorCQl9CisJCWVsc2UKKyNlbmRpZgorCQl7CisJCSAgICArK2NvbDsKKwkJICAgIGlmICh5YW5rbGVuKQorCQkgICAgeworCQkJKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwkJCSsrY3VyYnVmLT5iX29wX2VuZC5jb2w7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBuZXdfY3Vyc29yID0gY3Vyd2luLT53X2N1cnNvcjsKKwkgICAgY3VyYnVmLT5iX29wX3N0YXJ0ID0gY3Vyd2luLT53X2N1cnNvcjsKKwl9CisJLyoKKwkgKiBMaW5lIG1vZGU6IEJBQ0tXQVJEIGlzIHRoZSBzYW1lIGFzIEZPUldBUkQgb24gdGhlIHByZXZpb3VzIGxpbmUKKwkgKi8KKwllbHNlIGlmIChkaXIgPT0gQkFDS1dBUkQpCisJICAgIC0tbG51bTsKKworCS8qCisJICogc2ltcGxlIGNhc2U6IGluc2VydCBpbnRvIGN1cnJlbnQgbGluZQorCSAqLworCWlmICh5X3R5cGUgPT0gTUNIQVIgJiYgeV9zaXplID09IDEpCisJeworCSAgICB0b3RsZW4gPSBjb3VudCAqIHlhbmtsZW47CisJICAgIGlmICh0b3RsZW4pCisJICAgIHsKKwkJb2xkcCA9IG1sX2dldChsbnVtKTsKKwkJbmV3cCA9IGFsbG9jX2NoZWNrKCh1bnNpZ25lZCkoU1RSTEVOKG9sZHApICsgdG90bGVuICsgMSkpOworCQlpZiAobmV3cCA9PSBOVUxMKQorCQkgICAgZ290byBlbmQ7CQkvKiBhbGxvYygpIHdpbGwgZ2l2ZSBlcnJvciBtZXNzYWdlICovCisJCW1jaF9tZW1tb3ZlKG5ld3AsIG9sZHAsIChzaXplX3QpY29sKTsKKwkJcHRyID0gbmV3cCArIGNvbDsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJCXsKKwkJICAgIG1jaF9tZW1tb3ZlKHB0ciwgeV9hcnJheVswXSwgKHNpemVfdCl5YW5rbGVuKTsKKwkJICAgIHB0ciArPSB5YW5rbGVuOworCQl9CisJCW1jaF9tZW1tb3ZlKHB0ciwgb2xkcCArIGNvbCwgU1RSTEVOKG9sZHAgKyBjb2wpICsgMSk7CisJCW1sX3JlcGxhY2UobG51bSwgbmV3cCwgRkFMU0UpOworCQkvKiBQdXQgY3Vyc29yIG9uIGxhc3QgcHV0dGVkIGNoYXIuICovCisJCWN1cndpbi0+d19jdXJzb3IuY29sICs9IChjb2xucl9UKSh0b3RsZW4gLSAxKTsKKwkgICAgfQorCSAgICBjdXJidWYtPmJfb3BfZW5kID0gY3Vyd2luLT53X2N1cnNvcjsKKwkgICAgLyogRm9yICJDVFJMLU8gcCIgaW4gSW5zZXJ0IG1vZGUsIHB1dCBjdXJzb3IgYWZ0ZXIgbGFzdCBjaGFyICovCisJICAgIGlmICh0b3RsZW4gJiYgKHJlc3RhcnRfZWRpdCAhPSAwIHx8IChmbGFncyAmIFBVVF9DVVJTRU5EKSkpCisJCSsrY3Vyd2luLT53X2N1cnNvci5jb2w7CisJICAgIGNoYW5nZWRfYnl0ZXMobG51bSwgY29sKTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogSW5zZXJ0IGF0IGxlYXN0IG9uZSBsaW5lLiAgV2hlbiB5X3R5cGUgaXMgTUNIQVIsIGJyZWFrIHRoZSBmaXJzdAorCSAgICAgKiBsaW5lIGluIHR3by4KKwkgICAgICovCisJICAgIGZvciAoY250ID0gMTsgY250IDw9IGNvdW50OyArK2NudCkKKwkgICAgeworCQlpID0gMDsKKwkJaWYgKHlfdHlwZSA9PSBNQ0hBUikKKwkJeworCQkgICAgLyoKKwkJICAgICAqIFNwbGl0IHRoZSBjdXJyZW50IGxpbmUgaW4gdHdvIGF0IHRoZSBpbnNlcnQgcG9zaXRpb24uCisJCSAgICAgKiBGaXJzdCBpbnNlcnQgeV9hcnJheVtzaXplIC0gMV0gaW4gZnJvbnQgb2Ygc2Vjb25kIGxpbmUuCisJCSAgICAgKiBUaGVuIGFwcGVuZCB5X2FycmF5WzBdIHRvIGZpcnN0IGxpbmUuCisJCSAgICAgKi8KKwkJICAgIGxudW0gPSBuZXdfY3Vyc29yLmxudW07CisJCSAgICBwdHIgPSBtbF9nZXQobG51bSkgKyBjb2w7CisJCSAgICB0b3RsZW4gPSAoaW50KVNUUkxFTih5X2FycmF5W3lfc2l6ZSAtIDFdKTsKKwkJICAgIG5ld3AgPSBhbGxvY19jaGVjaygodW5zaWduZWQpKFNUUkxFTihwdHIpICsgdG90bGVuICsgMSkpOworCQkgICAgaWYgKG5ld3AgPT0gTlVMTCkKKwkJCWdvdG8gZXJyb3I7CisJCSAgICBTVFJDUFkobmV3cCwgeV9hcnJheVt5X3NpemUgLSAxXSk7CisJCSAgICBTVFJDQVQobmV3cCwgcHRyKTsKKwkJICAgIC8qIGluc2VydCBzZWNvbmQgbGluZSAqLworCQkgICAgbWxfYXBwZW5kKGxudW0sIG5ld3AsIChjb2xucl9UKTAsIEZBTFNFKTsKKwkJICAgIHZpbV9mcmVlKG5ld3ApOworCisJCSAgICBvbGRwID0gbWxfZ2V0KGxudW0pOworCQkgICAgbmV3cCA9IGFsbG9jX2NoZWNrKCh1bnNpZ25lZCkoY29sICsgeWFua2xlbiArIDEpKTsKKwkJICAgIGlmIChuZXdwID09IE5VTEwpCisJCQlnb3RvIGVycm9yOworCQkJCQkgICAgLyogY29weSBmaXJzdCBwYXJ0IG9mIGxpbmUgKi8KKwkJICAgIG1jaF9tZW1tb3ZlKG5ld3AsIG9sZHAsIChzaXplX3QpY29sKTsKKwkJCQkJICAgIC8qIGFwcGVuZCB0byBmaXJzdCBsaW5lICovCisJCSAgICBtY2hfbWVtbW92ZShuZXdwICsgY29sLCB5X2FycmF5WzBdLCAoc2l6ZV90KSh5YW5rbGVuICsgMSkpOworCQkgICAgbWxfcmVwbGFjZShsbnVtLCBuZXdwLCBGQUxTRSk7CisKKwkJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisJCSAgICBpID0gMTsKKwkJfQorCisJCWZvciAoOyBpIDwgeV9zaXplOyArK2kpCisJCXsKKwkJICAgIGlmICgoeV90eXBlICE9IE1DSEFSIHx8IGkgPCB5X3NpemUgLSAxKQorCQkJICAgICYmIG1sX2FwcGVuZChsbnVtLCB5X2FycmF5W2ldLCAoY29sbnJfVCkwLCBGQUxTRSkKKwkJCQkJCQkJICAgICAgPT0gRkFJTCkKKwkJCSAgICBnb3RvIGVycm9yOworCQkgICAgbG51bSsrOworCQkgICAgKytucl9saW5lczsKKwkJICAgIGlmIChmbGFncyAmIFBVVF9GSVhJTkRFTlQpCisJCSAgICB7CisJCQlvbGRfcG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKwkJCWN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisJCQlwdHIgPSBtbF9nZXQobG51bSk7CisJCQlpZiAoY250ID09IGNvdW50ICYmIGkgPT0geV9zaXplIC0gMSkKKwkJCSAgICBsZW5kaWZmID0gKGludClTVFJMRU4ocHRyKTsKKyNpZiBkZWZpbmVkKEZFQVRfU01BUlRJTkRFTlQpIHx8IGRlZmluZWQoRkVBVF9DSU5ERU5UKQorCQkJaWYgKCpwdHIgPT0gJyMnICYmIHByZXByb2NzX2xlZnQoKSkKKwkJCSAgICBpbmRlbnQgPSAwOyAgICAgLyogTGVhdmUgIyBsaW5lcyBhdCBzdGFydCAqLworCQkJZWxzZQorI2VuZGlmCisJCQkgICAgIGlmICgqcHRyID09IE5VTCkKKwkJCSAgICBpbmRlbnQgPSAwOyAgICAgLyogSWdub3JlIGVtcHR5IGxpbmVzICovCisJCQllbHNlIGlmIChmaXJzdF9pbmRlbnQpCisJCQl7CisJCQkgICAgaW5kZW50X2RpZmYgPSBvcmlnX2luZGVudCAtIGdldF9pbmRlbnQoKTsKKwkJCSAgICBpbmRlbnQgPSBvcmlnX2luZGVudDsKKwkJCSAgICBmaXJzdF9pbmRlbnQgPSBGQUxTRTsKKwkJCX0KKwkJCWVsc2UgaWYgKChpbmRlbnQgPSBnZXRfaW5kZW50KCkgKyBpbmRlbnRfZGlmZikgPCAwKQorCQkJICAgIGluZGVudCA9IDA7CisJCQkodm9pZClzZXRfaW5kZW50KGluZGVudCwgMCk7CisJCQljdXJ3aW4tPndfY3Vyc29yID0gb2xkX3BvczsKKwkJCS8qIHJlbWVtYmVyIGhvdyBtYW55IGNoYXJzIHdlcmUgcmVtb3ZlZCAqLworCQkJaWYgKGNudCA9PSBjb3VudCAmJiBpID09IHlfc2l6ZSAtIDEpCisJCQkgICAgbGVuZGlmZiAtPSAoaW50KVNUUkxFTihtbF9nZXQobG51bSkpOworCQkgICAgfQorCQl9CisJICAgIH0KKworZXJyb3I6CisJICAgIC8qIEFkanVzdCBtYXJrcy4gKi8KKwkgICAgaWYgKHlfdHlwZSA9PSBNTElORSkKKwkgICAgeworCQljdXJidWYtPmJfb3Bfc3RhcnQuY29sID0gMDsKKwkJaWYgKGRpciA9PSBGT1JXQVJEKQorCQkgICAgY3VyYnVmLT5iX29wX3N0YXJ0LmxudW0rKzsKKwkgICAgfQorCSAgICBtYXJrX2FkanVzdChjdXJidWYtPmJfb3Bfc3RhcnQubG51bSArICh5X3R5cGUgPT0gTUNIQVIpLAorCQkJCQkgICAgIChsaW5lbnJfVClNQVhMTlVNLCBucl9saW5lcywgMEwpOworCisJICAgIC8qIG5vdGUgY2hhbmdlZCB0ZXh0IGZvciBkaXNwbGF5aW5nIGFuZCBmb2xkaW5nICovCisJICAgIGlmICh5X3R5cGUgPT0gTUNIQVIpCisJCWNoYW5nZWRfbGluZXMoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBjb2wsCisJCQkJCSBjdXJ3aW4tPndfY3Vyc29yLmxudW0gKyAxLCBucl9saW5lcyk7CisJICAgIGVsc2UKKwkJY2hhbmdlZF9saW5lcyhjdXJidWYtPmJfb3Bfc3RhcnQubG51bSwgMCwKKwkJCQkJICAgY3VyYnVmLT5iX29wX3N0YXJ0LmxudW0sIG5yX2xpbmVzKTsKKworCSAgICAvKiBwdXQgJ10gbWFyayBhdCBsYXN0IGluc2VydGVkIGNoYXJhY3RlciAqLworCSAgICBjdXJidWYtPmJfb3BfZW5kLmxudW0gPSBsbnVtOworCSAgICAvKiBjb3JyZWN0IGxlbmd0aCBmb3IgY2hhbmdlIGluIGluZGVudCAqLworCSAgICBjb2wgPSAoY29sbnJfVClTVFJMRU4oeV9hcnJheVt5X3NpemUgLSAxXSkgLSBsZW5kaWZmOworCSAgICBpZiAoY29sID4gMSkKKwkJY3VyYnVmLT5iX29wX2VuZC5jb2wgPSBjb2wgLSAxOworCSAgICBlbHNlCisJCWN1cmJ1Zi0+Yl9vcF9lbmQuY29sID0gMDsKKworCSAgICBpZiAoZmxhZ3MgJiBQVVRfQ1VSU0VORCkKKwkgICAgeworCQkvKiBwdXQgY3Vyc29yIGFmdGVyIGluc2VydGVkIHRleHQgKi8KKwkJaWYgKHlfdHlwZSA9PSBNTElORSkKKwkJeworCQkgICAgaWYgKGxudW0gPj0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwkJICAgIGVsc2UKKwkJCWN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW0gKyAxOworCQkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbG51bTsKKwkJICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gY29sOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAoeV90eXBlID09IE1MSU5FKQorCSAgICB7CisJCS8qIHB1dCBjdXJzb3Igb25maXJzdCBub24tYmxhbmsgaW4gZmlyc3QgaW5zZXJ0ZWQgbGluZSAqLworCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisJCWlmIChkaXIgPT0gRk9SV0FSRCkKKwkJICAgICsrY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQliZWdpbmxpbmUoQkxfV0hJVEUgfCBCTF9GSVgpOworCSAgICB9CisJICAgIGVsc2UJLyogcHV0IGN1cnNvciBvbiBmaXJzdCBpbnNlcnRlZCBjaGFyYWN0ZXIgKi8KKwkJY3Vyd2luLT53X2N1cnNvciA9IG5ld19jdXJzb3I7CisJfQorICAgIH0KKworICAgIG1zZ21vcmUobnJfbGluZXMpOworICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCitlbmQ6CisgICAgaWYgKGFsbG9jYXRlZCkKKyAgICB7CisJdmltX2ZyZWUoaW5zZXJ0X3N0cmluZyk7CisJaWYgKHJlZ25hbWUgPT0gJz0nKQorCSAgICB2aW1fZnJlZSh5X2FycmF5KTsKKyAgICB9CisgICAgaWYgKGdjaGFyX2N1cnNvcigpID09IE5VTAorCSAgICAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbCA+IDAKKwkgICAgJiYgIShyZXN0YXJ0X2VkaXQgfHwgKFN0YXRlICYgSU5TRVJUKSkpCisgICAgeworCS0tY3Vyd2luLT53X2N1cnNvci5jb2w7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCWlmICh2ZV9mbGFncyA9PSBWRV9BTEwpCisJICAgICsrY3Vyd2luLT53X2N1cnNvci5jb2xhZGQ7CisjZW5kaWYKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfU01BUlRJTkRFTlQpIHx8IGRlZmluZWQoRkVBVF9DSU5ERU5UKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiBUUlVFIGlmIGxpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHNob3VsZCBiZSBsZWZ0IGFsaWduZWQuCisgKi8KKyAgICBpbnQKK3ByZXByb2NzX2xlZnQoKQoreworICAgIHJldHVybgorIyBpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisjICBpZmRlZiBGRUFUX0NJTkRFTlQKKwkoY3VyYnVmLT5iX3Bfc2kgJiYgIWN1cmJ1Zi0+Yl9wX2NpbikgfHwKKyMgIGVsc2UKKwljdXJidWYtPmJfcF9zaQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9DSU5ERU5UCisJKGN1cmJ1Zi0+Yl9wX2NpbiAmJiBpbl9jaW5rZXlzKCcjJywgJyAnLCBUUlVFKSkKKyMgZW5kaWYKKwk7Cit9CisjZW5kaWYKKworLyogUmV0dXJuIHRoZSBjaGFyYWN0ZXIgbmFtZSBvZiB0aGUgcmVnaXN0ZXIgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyICovCisgICAgaW50CitnZXRfcmVnaXN0ZXJfbmFtZShudW0pCisgICAgaW50IG51bTsKK3sKKyAgICBpZiAobnVtID09IC0xKQorCXJldHVybiAnIic7CisgICAgZWxzZSBpZiAobnVtIDwgMTApCisJcmV0dXJuIG51bSArICcwJzsKKyAgICBlbHNlIGlmIChudW0gPT0gREVMRVRJT05fUkVHSVNURVIpCisJcmV0dXJuICctJzsKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIGVsc2UgaWYgKG51bSA9PSBTVEFSX1JFR0lTVEVSKQorCXJldHVybiAnKic7CisgICAgZWxzZSBpZiAobnVtID09IFBMVVNfUkVHSVNURVIpCisJcmV0dXJuICcrJzsKKyNlbmRpZgorICAgIGVsc2UKKyAgICB7CisjaWZkZWYgRUJDRElDCisJaW50IGk7CisKKwkvKiBFQkNESUMgaXMgcmVhbGx5IGJyYWluZGVhZCAuLi4gKi8KKwlpID0gJ2EnICsgKG51bSAtIDEwKTsKKwlpZiAoaSA+ICdpJykKKwkgICAgaSArPSA3OworCWlmIChpID4gJ3InKQorCSAgICBpICs9IDg7CisJcmV0dXJuIGk7CisjZWxzZQorCXJldHVybiBudW0gKyAnYScgLSAxMDsKKyNlbmRpZgorICAgIH0KK30KKworLyoKKyAqICI6ZGlzIiBhbmQgIjpyZWdpc3RlcnMiOiBEaXNwbGF5IHRoZSBjb250ZW50cyBvZiB0aGUgeWFuayByZWdpc3RlcnMuCisgKi8KKyAgICB2b2lkCitleF9kaXNwbGF5KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaW50CQkJaSwgbjsKKyAgICBsb25nCQlqOworICAgIGNoYXJfdQkJKnA7CisgICAgc3RydWN0IHlhbmtyZWcJKnliOworICAgIGludAkJCW5hbWU7CisgICAgaW50CQkJYXR0cjsKKyAgICBjaGFyX3UJCSphcmcgPSBlYXAtPmFyZzsKKworICAgIGlmIChhcmcgIT0gTlVMTCAmJiAqYXJnID09IE5VTCkKKwlhcmcgPSBOVUxMOworICAgIGF0dHIgPSBobF9hdHRyKEhMRl84KTsKKworICAgIC8qIEhpZ2hsaWdodCB0aXRsZSAqLworICAgIE1TR19QVVRTX1RJVExFKF8oIlxuLS0tIFJlZ2lzdGVycyAtLS0iKSk7CisgICAgZm9yIChpID0gLTE7IGkgPCBOVU1fUkVHSVNURVJTICYmICFnb3RfaW50OyArK2kpCisgICAgeworCW5hbWUgPSBnZXRfcmVnaXN0ZXJfbmFtZShpKTsKKwlpZiAoYXJnICE9IE5VTEwgJiYgdmltX3N0cmNocihhcmcsIG5hbWUpID09IE5VTEwpCisJICAgIGNvbnRpbnVlOwkgICAgLyogZGlkIG5vdCBhc2sgZm9yIHRoaXMgcmVnaXN0ZXIgKi8KKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisJLyogQWRqdXN0IHJlZ2lzdGVyIG5hbWUgZm9yICJ1bm5hbWVkIiBpbiAnY2xpcGJvYXJkJy4KKwkgKiBXaGVuIGl0J3MgYSBjbGlwYm9hcmQgcmVnaXN0ZXIsIGZpbGwgaXQgd2l0aCB0aGUgY3VycmVudCBjb250ZW50cworCSAqIG9mIHRoZSBjbGlwYm9hcmQuICAqLworCWFkanVzdF9jbGlwX3JlZygmbmFtZSk7CisJKHZvaWQpbWF5X2dldF9zZWxlY3Rpb24obmFtZSk7CisjZW5kaWYKKworCWlmIChpID09IC0xKQorCXsKKwkgICAgaWYgKHlfcHJldmlvdXMgIT0gTlVMTCkKKwkJeWIgPSB5X3ByZXZpb3VzOworCSAgICBlbHNlCisJCXliID0gJih5X3JlZ3NbMF0pOworCX0KKwllbHNlCisJICAgIHliID0gJih5X3JlZ3NbaV0pOworCWlmICh5Yi0+eV9hcnJheSAhPSBOVUxMKQorCXsKKwkgICAgbXNnX3B1dGNoYXIoJ1xuJyk7CisJICAgIG1zZ19wdXRjaGFyKCciJyk7CisJICAgIG1zZ19wdXRjaGFyKG5hbWUpOworCSAgICBNU0dfUFVUUygiICAgIik7CisKKwkgICAgbiA9IChpbnQpQ29sdW1ucyAtIDY7CisJICAgIGZvciAoaiA9IDA7IGogPCB5Yi0+eV9zaXplICYmIG4gPiAxOyArK2opCisJICAgIHsKKwkJaWYgKGopCisJCXsKKwkJICAgIE1TR19QVVRTX0FUVFIoIl5KIiwgYXR0cik7CisJCSAgICBuIC09IDI7CisJCX0KKwkJZm9yIChwID0geWItPnlfYXJyYXlbal07ICpwICYmIChuIC09IHB0cjJjZWxscyhwKSkgPj0gMDsgKytwKQorCQl7CisJCSAgICBtc2dfb3V0dHJhbnNfbGVuKHAsIDEpOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIGlmIChoYXNfbWJ5dGUpCisJCQlwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkgLSAxOworI2VuZGlmCisJCX0KKwkgICAgfQorCSAgICBpZiAobiA+IDEgJiYgeWItPnlfdHlwZSA9PSBNTElORSkKKwkJTVNHX1BVVFNfQVRUUigiXkoiLCBhdHRyKTsKKwkgICAgb3V0X2ZsdXNoKCk7CQkgICAgLyogc2hvdyBvbmUgbGluZSBhdCBhIHRpbWUgKi8KKwl9CisJdWlfYnJlYWtjaGVjaygpOworICAgIH0KKworICAgIC8qCisgICAgICogZGlzcGxheSBsYXN0IGluc2VydGVkIHRleHQKKyAgICAgKi8KKyAgICBpZiAoKHAgPSBnZXRfbGFzdF9pbnNlcnQoKSkgIT0gTlVMTAorCQkgJiYgKGFyZyA9PSBOVUxMIHx8IHZpbV9zdHJjaHIoYXJnLCAnLicpICE9IE5VTEwpICYmICFnb3RfaW50KQorICAgIHsKKwlNU0dfUFVUUygiXG5cIi4gICAiKTsKKwlkaXNfbXNnKHAsIFRSVUUpOworICAgIH0KKworICAgIC8qCisgICAgICogZGlzcGxheSBsYXN0IGNvbW1hbmQgbGluZQorICAgICAqLworICAgIGlmIChsYXN0X2NtZGxpbmUgIT0gTlVMTCAmJiAoYXJnID09IE5VTEwgfHwgdmltX3N0cmNocihhcmcsICc6JykgIT0gTlVMTCkKKwkJCQkJCQkJICAmJiAhZ290X2ludCkKKyAgICB7CisJTVNHX1BVVFMoIlxuXCI6ICAgIik7CisJZGlzX21zZyhsYXN0X2NtZGxpbmUsIEZBTFNFKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGRpc3BsYXkgY3VycmVudCBmaWxlIG5hbWUKKyAgICAgKi8KKyAgICBpZiAoY3VyYnVmLT5iX2ZuYW1lICE9IE5VTEwKKwkgICAgJiYgKGFyZyA9PSBOVUxMIHx8IHZpbV9zdHJjaHIoYXJnLCAnJScpICE9IE5VTEwpICYmICFnb3RfaW50KQorICAgIHsKKwlNU0dfUFVUUygiXG5cIiUgICAiKTsKKwlkaXNfbXNnKGN1cmJ1Zi0+Yl9mbmFtZSwgRkFMU0UpOworICAgIH0KKworICAgIC8qCisgICAgICogZGlzcGxheSBhbHRlcm5hdGUgZmlsZSBuYW1lCisgICAgICovCisgICAgaWYgKChhcmcgPT0gTlVMTCB8fCB2aW1fc3RyY2hyKGFyZywgJyUnKSAhPSBOVUxMKSAmJiAhZ290X2ludCkKKyAgICB7CisJY2hhcl91CSAgICAqZm5hbWU7CisJbGluZW5yX1QgICAgZHVtbXk7CisKKwlpZiAoYnVmbGlzdF9uYW1lX25yKDAsICZmbmFtZSwgJmR1bW15KSAhPSBGQUlMKQorCXsKKwkgICAgTVNHX1BVVFMoIlxuXCIjICAgIik7CisJICAgIGRpc19tc2coZm5hbWUsIEZBTFNFKTsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBkaXNwbGF5IGxhc3Qgc2VhcmNoIHBhdHRlcm4KKyAgICAgKi8KKyAgICBpZiAobGFzdF9zZWFyY2hfcGF0KCkgIT0gTlVMTAorCQkgJiYgKGFyZyA9PSBOVUxMIHx8IHZpbV9zdHJjaHIoYXJnLCAnLycpICE9IE5VTEwpICYmICFnb3RfaW50KQorICAgIHsKKwlNU0dfUFVUUygiXG5cIi8gICAiKTsKKwlkaXNfbXNnKGxhc3Rfc2VhcmNoX3BhdCgpLCBGQUxTRSk7CisgICAgfQorCisjaWZkZWYgRkVBVF9FVkFMCisgICAgLyoKKyAgICAgKiBkaXNwbGF5IGxhc3QgdXNlZCBleHByZXNzaW9uCisgICAgICovCisgICAgaWYgKGV4cHJfbGluZSAhPSBOVUxMICYmIChhcmcgPT0gTlVMTCB8fCB2aW1fc3RyY2hyKGFyZywgJz0nKSAhPSBOVUxMKQorCQkJCQkJCQkgICYmICFnb3RfaW50KQorICAgIHsKKwlNU0dfUFVUUygiXG5cIj0gICAiKTsKKwlkaXNfbXNnKGV4cHJfbGluZSwgRkFMU0UpOworICAgIH0KKyNlbmRpZgorfQorCisvKgorICogZGlzcGxheSBhIHN0cmluZyBmb3IgZG9fZGlzKCkKKyAqIHRydW5jYXRlIGF0IGVuZCBvZiBzY3JlZW4gbGluZQorICovCisgICAgc3RhdGljIHZvaWQKK2Rpc19tc2cocCwgc2tpcF9lc2MpCisgICAgY2hhcl91CSpwOworICAgIGludAkJc2tpcF9lc2M7CSAgICAvKiBpZiBUUlVFLCBpZ25vcmUgdHJhaWxpbmcgRVNDICovCit7CisgICAgaW50CQluOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCWw7CisjZW5kaWYKKworICAgIG4gPSAoaW50KUNvbHVtbnMgLSA2OworICAgIHdoaWxlICgqcCAhPSBOVUwKKwkgICAgJiYgISgqcCA9PSBFU0MgJiYgc2tpcF9lc2MgJiYgKihwICsgMSkgPT0gTlVMKQorCSAgICAmJiAobiAtPSBwdHIyY2VsbHMocCkpID49IDApCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlICYmIChsID0gKCptYl9wdHIybGVuX2NoZWNrKShwKSkgPiAxKQorCXsKKwkgICAgbXNnX291dHRyYW5zX2xlbihwLCBsKTsKKwkgICAgcCArPSBsOworCX0KKwllbHNlCisjZW5kaWYKKwkgICAgbXNnX291dHRyYW5zX2xlbihwKyssIDEpOworICAgIH0KKyAgICB1aV9icmVha2NoZWNrKCk7Cit9CisKKy8qCisgKiBqb2luICdjb3VudCcgbGluZXMgKG1pbmltYWwgMiksIGluY2x1ZGluZyB1X3NhdmUoKQorICovCisgICAgdm9pZAorZG9fZG9fam9pbihjb3VudCwgaW5zZXJ0X3NwYWNlKQorICAgIGxvbmcgICAgY291bnQ7CisgICAgaW50CSAgICBpbnNlcnRfc3BhY2U7Cit7CisgICAgaWYgKHVfc2F2ZSgobGluZW5yX1QpKGN1cndpbi0+d19jdXJzb3IubG51bSAtIDEpLAorCQkgICAgKGxpbmVucl9UKShjdXJ3aW4tPndfY3Vyc29yLmxudW0gKyBjb3VudCkpID09IEZBSUwpCisJcmV0dXJuOworCisgICAgd2hpbGUgKC0tY291bnQgPiAwKQorICAgIHsKKwlsaW5lX2JyZWFrY2hlY2soKTsKKwlpZiAoZ290X2ludCB8fCBkb19qb2luKGluc2VydF9zcGFjZSkgPT0gRkFJTCkKKwl7CisJICAgIGJlZXBfZmx1c2goKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworI2lmIDAKKyAgICAvKgorICAgICAqIE5lZWQgdG8gdXBkYXRlIHRoZSBzY3JlZW4gaWYgdGhlIGxpbmUgd2hlcmUgdGhlIGN1cnNvciBpcyBiZWNhbWUgdG9vCisgICAgICogbG9uZyB0byBmaXQgb24gdGhlIHNjcmVlbi4KKyAgICAgKi8KKyAgICB1cGRhdGVfdG9wbGluZV9yZWRyYXcoKTsKKyNlbmRpZgorfQorCisvKgorICogSm9pbiB0d28gbGluZXMgYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4KKyAqICJyZWRyYXciIGlzIFRSVUUgd2hlbiB0aGUgc2NyZWVuIHNob3VsZCBiZSB1cGRhdGVkLgorICogQ2FsbGVyIG11c3QgaGF2ZSBzZXR1cCBmb3IgdW5kby4KKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb2h0ZXJ3aXNlCisgKi8KKyAgICBpbnQKK2RvX2pvaW4oaW5zZXJ0X3NwYWNlKQorICAgIGludAkJaW5zZXJ0X3NwYWNlOworeworICAgIGNoYXJfdQkqY3VycjsKKyAgICBjaGFyX3UJKm5leHQsICpuZXh0X3N0YXJ0OworICAgIGNoYXJfdQkqbmV3cDsKKyAgICBpbnQJCWVuZGN1cnIxLCBlbmRjdXJyMjsKKyAgICBpbnQJCWN1cnJzaXplOwkvKiBzaXplIG9mIHRoZSBjdXJyZW50IGxpbmUgKi8KKyAgICBpbnQJCW5leHRzaXplOwkvKiBzaXplIG9mIHRoZSBuZXh0IGxpbmUgKi8KKyAgICBpbnQJCXNwYWNlczsJCS8qIG51bWJlciBvZiBzcGFjZXMgdG8gaW5zZXJ0ICovCisgICAgbGluZW5yX1QJdDsKKworICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPT0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJcmV0dXJuIEZBSUw7CQkvKiBjYW4ndCBqb2luIG9uIGxhc3QgbGluZSAqLworCisgICAgY3VyciA9IG1sX2dldF9jdXJsaW5lKCk7CisgICAgY3VycnNpemUgPSAoaW50KVNUUkxFTihjdXJyKTsKKyAgICBlbmRjdXJyMSA9IGVuZGN1cnIyID0gTlVMOworICAgIGlmIChpbnNlcnRfc3BhY2UgJiYgY3VycnNpemUgPiAwKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIG5leHQgPSBjdXJyICsgY3VycnNpemUgLSAxOworCSAgICBuZXh0IC09ICgqbWJfaGVhZF9vZmYpKGN1cnIsIG5leHQpOworCSAgICBlbmRjdXJyMSA9ICgqbWJfcHRyMmNoYXIpKG5leHQpOworCSAgICBpZiAobmV4dCA+IGN1cnIpCisJICAgIHsKKwkJLS1uZXh0OworCQluZXh0IC09ICgqbWJfaGVhZF9vZmYpKGN1cnIsIG5leHQpOworCQllbmRjdXJyMiA9ICgqbWJfcHRyMmNoYXIpKG5leHQpOworCSAgICB9CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgZW5kY3VycjEgPSAqKGN1cnIgKyBjdXJyc2l6ZSAtIDEpOworCSAgICBpZiAoY3VycnNpemUgPiAxKQorCQllbmRjdXJyMiA9ICooY3VyciArIGN1cnJzaXplIC0gMik7CisJfQorICAgIH0KKworICAgIG5leHQgPSBuZXh0X3N0YXJ0ID0gbWxfZ2V0KChsaW5lbnJfVCkoY3Vyd2luLT53X2N1cnNvci5sbnVtICsgMSkpOworICAgIHNwYWNlcyA9IDA7CisgICAgaWYgKGluc2VydF9zcGFjZSkKKyAgICB7CisJbmV4dCA9IHNraXB3aGl0ZShuZXh0KTsKKwlpZiAoKm5leHQgIT0gJyknICYmIGN1cnJzaXplICE9IDAgJiYgZW5kY3VycjEgIT0gVEFCCisjaWZkZWYgRkVBVF9NQllURQorCQkmJiAoIWhhc19mb3JtYXRfb3B0aW9uKEZPX01CWVRFX0pPSU4pCisJCQl8fCAobWJfcHRyMmNoYXIobmV4dCkgPCAweDEwMCAmJiBlbmRjdXJyMSA8IDB4MTAwKSkKKwkJJiYgKCFoYXNfZm9ybWF0X29wdGlvbihGT19NQllURV9KT0lOMikKKwkJCXx8IG1iX3B0cjJjaGFyKG5leHQpIDwgMHgxMDAgfHwgZW5kY3VycjEgPCAweDEwMCkKKyNlbmRpZgorCQkpCisJeworCSAgICAvKiBkb24ndCBhZGQgYSBzcGFjZSBpZiB0aGUgbGluZSBpcyBlbmRpbmcgaW4gYSBzcGFjZSAqLworCSAgICBpZiAoZW5kY3VycjEgPT0gJyAnKQorCQllbmRjdXJyMSA9IGVuZGN1cnIyOworCSAgICBlbHNlCisJCSsrc3BhY2VzOworCSAgICAvKiBleHRyYSBzcGFjZSB3aGVuICdqb2luc3BhY2VzJyBzZXQgYW5kIGxpbmUgZW5kcyBpbiAnLicgKi8KKwkgICAgaWYgKCAgICAgICBwX2pzCisJCSAgICAmJiAoZW5kY3VycjEgPT0gJy4nCisJCQl8fCAodmltX3N0cmNocihwX2NwbywgQ1BPX0pPSU5TUCkgPT0gTlVMTAorCQkJICAgICYmIChlbmRjdXJyMSA9PSAnPycgfHwgZW5kY3VycjEgPT0gJyEnKSkpKQorCQkrK3NwYWNlczsKKwl9CisgICAgfQorICAgIG5leHRzaXplID0gKGludClTVFJMRU4obmV4dCk7CisKKyAgICBuZXdwID0gYWxsb2NfY2hlY2soKHVuc2lnbmVkKShjdXJyc2l6ZSArIG5leHRzaXplICsgc3BhY2VzICsgMSkpOworICAgIGlmIChuZXdwID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICAvKgorICAgICAqIEluc2VydCB0aGUgbmV4dCBsaW5lIGZpcnN0LCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSB0aGF0IHBvaW50ZXIuCisgICAgICogQ3VyciBoYXMgdG8gYmUgb2J0YWluZWQgYWdhaW4sIGJlY2F1c2UgZ2V0dGluZyBuZXh0IHdpbGwgaGF2ZQorICAgICAqIGludmFsaWRhdGVkIGl0LgorICAgICAqLworICAgIG1jaF9tZW1tb3ZlKG5ld3AgKyBjdXJyc2l6ZSArIHNwYWNlcywgbmV4dCwgKHNpemVfdCkobmV4dHNpemUgKyAxKSk7CisKKyAgICBjdXJyID0gbWxfZ2V0X2N1cmxpbmUoKTsKKyAgICBtY2hfbWVtbW92ZShuZXdwLCBjdXJyLCAoc2l6ZV90KWN1cnJzaXplKTsKKworICAgIGNvcHlfc3BhY2VzKG5ld3AgKyBjdXJyc2l6ZSwgKHNpemVfdClzcGFjZXMpOworCisgICAgbWxfcmVwbGFjZShjdXJ3aW4tPndfY3Vyc29yLmxudW0sIG5ld3AsIEZBTFNFKTsKKworICAgIC8qIE9ubHkgcmVwb3J0IHRoZSBjaGFuZ2UgaW4gdGhlIGZpcnN0IGxpbmUgaGVyZSwgZGVsX2xpbmVzKCkgd2lsbCByZXBvcnQKKyAgICAgKiB0aGUgZGVsZXRlZCBsaW5lLiAqLworICAgIGNoYW5nZWRfbGluZXMoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBjdXJyc2l6ZSwKKwkJCQkJICAgICAgIGN1cndpbi0+d19jdXJzb3IubG51bSArIDEsIDBMKTsKKworICAgIC8qCisgICAgICogRGVsZXRlIHRoZSBmb2xsb3dpbmcgbGluZS4gVG8gZG8gdGhpcyB3ZSBtb3ZlIHRoZSBjdXJzb3IgdGhlcmUKKyAgICAgKiBicmllZmx5LCBhbmQgdGhlbiBtb3ZlIGl0IGJhY2suIEFmdGVyIGRlbF9saW5lcygpIHRoZSBjdXJzb3IgbWF5CisgICAgICogaGF2ZSBtb3ZlZCB1cCAobGFzdCBsaW5lIGRlbGV0ZWQpLCBzbyB0aGUgY3VycmVudCBsbnVtIGlzIGtlcHQgaW4gdC4KKyAgICAgKgorICAgICAqIE1vdmUgbWFya3MgZnJvbSB0aGUgZGVsZXRlZCBsaW5lIHRvIHRoZSBqb2luZWQgbGluZSwgYWRqdXN0aW5nIHRoZQorICAgICAqIGNvbHVtbi4gIFRoaXMgaXMgbm90IFZpIGNvbXBhdGlibGUsIGJ1dCBWaSBkZWxldGVzIHRoZSBtYXJrcywgdGh1cyB0aGF0CisgICAgICogc2hvdWxkIG5vdCByZWFsbHkgYmUgYSBwcm9ibGVtLgorICAgICAqLworICAgIHQgPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisgICAgbWFya19jb2xfYWRqdXN0KHQgKyAxLCAoY29sbnJfVCkwLCAobGluZW5yX1QpLTEsCisJCQkgICAgIChsb25nKShjdXJyc2l6ZSArIHNwYWNlcyAtIChuZXh0IC0gbmV4dF9zdGFydCkpKTsKKyAgICArK2N1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICBkZWxfbGluZXMoMUwsIEZBTFNFKTsKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSB0OworCisgICAgLyoKKyAgICAgKiBnbyB0byBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGpvaW5lZCBsaW5lCisgICAgICovCisgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSBjdXJyc2l6ZTsKKyAgICBjaGVja19jdXJzb3JfY29sKCk7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorICAgIGN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCisgICAgcmV0dXJuIE9LOworfQorCisjaWZkZWYgRkVBVF9DT01NRU5UUworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSB0d28gY29tbWVudCBsZWFkZXJzIGdpdmVuIGFyZSB0aGUgc2FtZS4gICJsbnVtIiBpcworICogdGhlIGZpcnN0IGxpbmUuICBXaGl0ZS1zcGFjZSBpcyBpZ25vcmVkLiAgTm90ZSB0aGF0IHRoZSB3aG9sZSBvZgorICogJ2xlYWRlcjEnIG11c3QgbWF0Y2ggJ2xlYWRlcjJfbGVuJyBjaGFyYWN0ZXJzIGZyb20gJ2xlYWRlcjInIC0tIHdlYmIKKyAqLworICAgIHN0YXRpYyBpbnQKK3NhbWVfbGVhZGVyKGxudW0sIGxlYWRlcjFfbGVuLCBsZWFkZXIxX2ZsYWdzLCBsZWFkZXIyX2xlbiwgbGVhZGVyMl9mbGFncykKKyAgICBsaW5lbnJfVCBsbnVtOworICAgIGludAkgICAgbGVhZGVyMV9sZW47CisgICAgY2hhcl91ICAqbGVhZGVyMV9mbGFnczsKKyAgICBpbnQJICAgIGxlYWRlcjJfbGVuOworICAgIGNoYXJfdSAgKmxlYWRlcjJfZmxhZ3M7Cit7CisgICAgaW50CSAgICBpZHgxID0gMCwgaWR4MiA9IDA7CisgICAgY2hhcl91ICAqcDsKKyAgICBjaGFyX3UgICpsaW5lMTsKKyAgICBjaGFyX3UgICpsaW5lMjsKKworICAgIGlmIChsZWFkZXIxX2xlbiA9PSAwKQorCXJldHVybiAobGVhZGVyMl9sZW4gPT0gMCk7CisKKyAgICAvKgorICAgICAqIElmIGZpcnN0IGxlYWRlciBoYXMgJ2YnIGZsYWcsIHRoZSBsaW5lcyBjYW4gYmUgam9pbmVkIG9ubHkgaWYgdGhlCisgICAgICogc2Vjb25kIGxpbmUgZG9lcyBub3QgaGF2ZSBhIGxlYWRlci4KKyAgICAgKiBJZiBmaXJzdCBsZWFkZXIgaGFzICdlJyBmbGFnLCB0aGUgbGluZXMgY2FuIG5ldmVyIGJlIGpvaW5lZC4KKyAgICAgKiBJZiBmaXN0IGxlYWRlciBoYXMgJ3MnIGZsYWcsIHRoZSBsaW5lcyBjYW4gb25seSBiZSBqb2luZWQgaWYgdGhlcmUgaXMKKyAgICAgKiBzb21lIHRleHQgYWZ0ZXIgaXQgYW5kIHRoZSBzZWNvbmQgbGluZSBoYXMgdGhlICdtJyBmbGFnLgorICAgICAqLworICAgIGlmIChsZWFkZXIxX2ZsYWdzICE9IE5VTEwpCisgICAgeworCWZvciAocCA9IGxlYWRlcjFfZmxhZ3M7ICpwICYmICpwICE9ICc6JzsgKytwKQorCXsKKwkgICAgaWYgKCpwID09IENPTV9GSVJTVCkKKwkJcmV0dXJuIChsZWFkZXIyX2xlbiA9PSAwKTsKKwkgICAgaWYgKCpwID09IENPTV9FTkQpCisJCXJldHVybiBGQUxTRTsKKwkgICAgaWYgKCpwID09IENPTV9TVEFSVCkKKwkgICAgeworCQlpZiAoKihtbF9nZXQobG51bSkgKyBsZWFkZXIxX2xlbikgPT0gTlVMKQorCQkgICAgcmV0dXJuIEZBTFNFOworCQlpZiAobGVhZGVyMl9mbGFncyA9PSBOVUxMIHx8IGxlYWRlcjJfbGVuID09IDApCisJCSAgICByZXR1cm4gRkFMU0U7CisJCWZvciAocCA9IGxlYWRlcjJfZmxhZ3M7ICpwICYmICpwICE9ICc6JzsgKytwKQorCQkgICAgaWYgKCpwID09IENPTV9NSURETEUpCisJCQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIEZBTFNFOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogR2V0IGN1cnJlbnQgbGluZSBhbmQgbmV4dCBsaW5lLCBjb21wYXJlIHRoZSBsZWFkZXJzLgorICAgICAqIFRoZSBmaXJzdCBsaW5lIGhhcyB0byBiZSBzYXZlZCwgb25seSBvbmUgbGluZSBjYW4gYmUgbG9ja2VkIGF0IGEgdGltZS4KKyAgICAgKi8KKyAgICBsaW5lMSA9IHZpbV9zdHJzYXZlKG1sX2dldChsbnVtKSk7CisgICAgaWYgKGxpbmUxICE9IE5VTEwpCisgICAgeworCWZvciAoaWR4MSA9IDA7IHZpbV9pc3doaXRlKGxpbmUxW2lkeDFdKTsgKytpZHgxKQorCSAgICA7CisJbGluZTIgPSBtbF9nZXQobG51bSArIDEpOworCWZvciAoaWR4MiA9IDA7IGlkeDIgPCBsZWFkZXIyX2xlbjsgKytpZHgyKQorCXsKKwkgICAgaWYgKCF2aW1faXN3aGl0ZShsaW5lMltpZHgyXSkpCisJICAgIHsKKwkJaWYgKGxpbmUxW2lkeDErK10gIT0gbGluZTJbaWR4Ml0pCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBlbHNlCisJCXdoaWxlICh2aW1faXN3aGl0ZShsaW5lMVtpZHgxXSkpCisJCSAgICArK2lkeDE7CisJfQorCXZpbV9mcmVlKGxpbmUxKTsKKyAgICB9CisgICAgcmV0dXJuIChpZHgyID09IGxlYWRlcjJfbGVuICYmIGlkeDEgPT0gbGVhZGVyMV9sZW4pOworfQorI2VuZGlmCisKKy8qCisgKiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9ybWF0IG9wZXJhdG9yICdncScKKyAqLworICAgIHZvaWQKK29wX2Zvcm1hdChvYXAsIGtlZXBfY3Vyc29yKQorICAgIG9wYXJnX1QJKm9hcDsKKyAgICBpbnQJCWtlZXBfY3Vyc29yOwkJLyoga2VlcCBjdXJzb3Igb24gc2FtZSB0ZXh0IGNoYXIgKi8KK3sKKyAgICBsb25nCW9sZF9saW5lX2NvdW50ID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisKKyAgICAvKiBQbGFjZSB0aGUgY3Vyc29yIHdoZXJlIHRoZSAiZ3EiIG9yICJndyIgY29tbWFuZCB3YXMgZ2l2ZW4sIHNvIHRoYXQgInUiCisgICAgICogY2FuIHB1dCBpdCBiYWNrIHRoZXJlLiAqLworICAgIGN1cndpbi0+d19jdXJzb3IgPSBvYXAtPmN1cnNvcl9zdGFydDsKKworICAgIGlmICh1X3NhdmUoKGxpbmVucl9UKShvYXAtPnN0YXJ0LmxudW0gLSAxKSwKKwkJCQkgICAgICAgKGxpbmVucl9UKShvYXAtPmVuZC5sbnVtICsgMSkpID09IEZBSUwpCisJcmV0dXJuOworICAgIGN1cndpbi0+d19jdXJzb3IgPSBvYXAtPnN0YXJ0OworCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAob2FwLT5pc19WSXN1YWwpCisJLyogV2hlbiB0aGVyZSBpcyBubyBjaGFuZ2U6IG5lZWQgdG8gcmVtb3ZlIHRoZSBWaXN1YWwgc2VsZWN0aW9uICovCisJcmVkcmF3X2N1cmJ1Zl9sYXRlcihJTlZFUlRFRCk7CisjZW5kaWYKKworICAgIC8qIFNldCAnWyBtYXJrIGF0IHRoZSBzdGFydCBvZiB0aGUgZm9ybWF0dGVkIGFyZWEgKi8KKyAgICBjdXJidWYtPmJfb3Bfc3RhcnQgPSBvYXAtPnN0YXJ0OworCisgICAgLyogRm9yICJndyIgcmVtZW1iZXIgdGhlIGN1cnNvciBwb3NpdGlvbiBhbmQgcHV0IGl0IGJhY2sgYmVsb3cgKGFkanVzdGVkCisgICAgICogZm9yIGpvaW5lZCBhbmQgc3BsaXQgbGluZXMpLiAqLworICAgIGlmIChrZWVwX2N1cnNvcikKKwlzYXZlZF9jdXJzb3IgPSBvYXAtPmN1cnNvcl9zdGFydDsKKworICAgIGZvcm1hdF9saW5lcyhvYXAtPmxpbmVfY291bnQpOworCisgICAgLyoKKyAgICAgKiBMZWF2ZSB0aGUgY3Vyc29yIGF0IHRoZSBmaXJzdCBub24tYmxhbmsgb2YgdGhlIGxhc3QgZm9ybWF0dGVkIGxpbmUuCisgICAgICogSWYgdGhlIGN1cnNvciB3YXMgbW92ZWQgb25lIGxpbmUgYmFjayAoZS5nLiB3aXRoICJRfSIpIGdvIHRvIHRoZSBuZXh0CisgICAgICogbGluZSwgc28gIi4iIHdpbGwgZG8gdGhlIG5leHQgbGluZXMuCisgICAgICovCisgICAgaWYgKG9hcC0+ZW5kX2FkanVzdGVkICYmIGN1cndpbi0+d19jdXJzb3IubG51bSA8IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSsrY3Vyd2luLT53X2N1cnNvci5sbnVtOworICAgIGJlZ2lubGluZShCTF9XSElURSB8IEJMX0ZJWCk7CisgICAgb2xkX2xpbmVfY291bnQgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCAtIG9sZF9saW5lX2NvdW50OworICAgIG1zZ21vcmUob2xkX2xpbmVfY291bnQpOworCisgICAgLyogcHV0ICddIG1hcmsgb24gdGhlIGVuZCBvZiB0aGUgZm9ybWF0dGVkIGFyZWEgKi8KKyAgICBjdXJidWYtPmJfb3BfZW5kID0gY3Vyd2luLT53X2N1cnNvcjsKKworICAgIGlmIChrZWVwX2N1cnNvcikKKyAgICB7CisJY3Vyd2luLT53X2N1cnNvciA9IHNhdmVkX2N1cnNvcjsKKwlzYXZlZF9jdXJzb3IubG51bSA9IDA7CisgICAgfQorCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAob2FwLT5pc19WSXN1YWwpCisgICAgeworCXdpbl9UCSp3cDsKKworCUZPUl9BTExfV0lORE9XUyh3cCkKKwl7CisJICAgIGlmICh3cC0+d19vbGRfY3Vyc29yX2xudW0gIT0gMCkKKwkgICAgeworCQkvKiBXaGVuIGxpbmVzIGhhdmUgYmVlbiBpbnNlcnRlZCBvciBkZWxldGVkLCBhZGp1c3QgdGhlIGVuZCBvZgorCQkgKiB0aGUgVmlzdWFsIGFyZWEgdG8gYmUgcmVkcmF3bi4gKi8KKwkJaWYgKHdwLT53X29sZF9jdXJzb3JfbG51bSA+IHdwLT53X29sZF92aXN1YWxfbG51bSkKKwkJICAgIHdwLT53X29sZF9jdXJzb3JfbG51bSArPSBvbGRfbGluZV9jb3VudDsKKwkJZWxzZQorCQkgICAgd3AtPndfb2xkX3Zpc3VhbF9sbnVtICs9IG9sZF9saW5lX2NvdW50OworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorfQorCisvKgorICogRm9ybWF0ICJsaW5lX2NvdW50IiBsaW5lcywgc3RhcnRpbmcgYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4KKyAqIFdoZW4gImxpbmVfY291bnQiIGlzIG5lZ2F0aXZlLCBmb3JtYXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLgorICogTGluZXMgYWZ0ZXIgdGhlIGN1cnNvciBsaW5lIGFyZSBzYXZlZCBmb3IgdW5kbywgY2FsbGVyIG11c3QgaGF2ZSBzYXZlZCB0aGUKKyAqIGZpcnN0IGxpbmUuCisgKi8KKyAgICB2b2lkCitmb3JtYXRfbGluZXMobGluZV9jb3VudCkKKyAgICBsaW5lbnJfVAlsaW5lX2NvdW50OworeworICAgIGludAkJbWF4X2xlbjsKKyAgICBpbnQJCWlzX25vdF9wYXI7CQkvKiBjdXJyZW50IGxpbmUgbm90IHBhcnQgb2YgcGFyYWcuICovCisgICAgaW50CQluZXh0X2lzX25vdF9wYXI7CS8qIG5leHQgbGluZSBub3QgcGFydCBvZiBwYXJhZ3JhcGggKi8KKyAgICBpbnQJCWlzX2VuZF9wYXI7CQkvKiBhdCBlbmQgb2YgcGFyYWdyYXBoICovCisgICAgaW50CQlwcmV2X2lzX2VuZF9wYXIgPSBGQUxTRTsvKiBwcmV2LiBsaW5lIG5vdCBwYXJ0IG9mIHBhcmFnLiAqLworICAgIGludAkJbmV4dF9pc19zdGFydF9wYXIgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisgICAgaW50CQlsZWFkZXJfbGVuID0gMDsJCS8qIGxlYWRlciBsZW4gb2YgY3VycmVudCBsaW5lICovCisgICAgaW50CQluZXh0X2xlYWRlcl9sZW47CS8qIGxlYWRlciBsZW4gb2YgbmV4dCBsaW5lICovCisgICAgY2hhcl91CSpsZWFkZXJfZmxhZ3MgPSBOVUxMOwkvKiBmbGFncyBmb3IgbGVhZGVyIG9mIGN1cnJlbnQgbGluZSAqLworICAgIGNoYXJfdQkqbmV4dF9sZWFkZXJfZmxhZ3M7CS8qIGZsYWdzIGZvciBsZWFkZXIgb2YgbmV4dCBsaW5lICovCisgICAgaW50CQlkb19jb21tZW50czsJCS8qIGZvcm1hdCBjb21tZW50cyAqLworI2VuZGlmCisgICAgaW50CQlhZHZhbmNlID0gVFJVRTsKKyAgICBpbnQJCXNlY29uZF9pbmRlbnQgPSAtMTsKKyAgICBpbnQJCWRvX3NlY29uZF9pbmRlbnQ7CisgICAgaW50CQlkb19udW1iZXJfaW5kZW50OworICAgIGludAkJZG9fdHJhaWxfd2hpdGU7CisgICAgaW50CQlmaXJzdF9wYXJfbGluZSA9IFRSVUU7CisgICAgaW50CQlzbWRfc2F2ZTsKKyAgICBsb25nCWNvdW50OworICAgIGludAkJbmVlZF9zZXRfaW5kZW50ID0gVFJVRTsJLyogc2V0IGluZGVudCBvZiBuZXh0IHBhcmFncmFwaCAqLworICAgIGludAkJZm9yY2VfZm9ybWF0ID0gRkFMU0U7CisgICAgaW50CQlvbGRfU3RhdGUgPSBTdGF0ZTsKKworICAgIC8qIGxlbmd0aCBvZiBhIGxpbmUgdG8gZm9yY2UgZm9ybWF0dGluZzogMyAqICd0dycgKi8KKyAgICBtYXhfbGVuID0gY29tcF90ZXh0d2lkdGgoVFJVRSkgKiAzOworCisgICAgLyogY2hlY2sgZm9yICdxJywgJzInIGFuZCAnMScgaW4gJ2Zvcm1hdG9wdGlvbnMnICovCisjaWZkZWYgRkVBVF9DT01NRU5UUworICAgIGRvX2NvbW1lbnRzID0gaGFzX2Zvcm1hdF9vcHRpb24oRk9fUV9DT01TKTsKKyNlbmRpZgorICAgIGRvX3NlY29uZF9pbmRlbnQgPSBoYXNfZm9ybWF0X29wdGlvbihGT19RX1NFQ09ORCk7CisgICAgZG9fbnVtYmVyX2luZGVudCA9IGhhc19mb3JtYXRfb3B0aW9uKEZPX1FfTlVNQkVSKTsKKyAgICBkb190cmFpbF93aGl0ZSA9IGhhc19mb3JtYXRfb3B0aW9uKEZPX1dISVRFX1BBUik7CisKKyAgICAvKgorICAgICAqIEdldCBpbmZvIGFib3V0IHRoZSBwcmV2aW91cyBhbmQgY3VycmVudCBsaW5lLgorICAgICAqLworICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gPiAxKQorCWlzX25vdF9wYXIgPSBmbXRfY2hlY2tfcGFyKGN1cndpbi0+d19jdXJzb3IubG51bSAtIDEKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisJCQkJLCAmbGVhZGVyX2xlbiwgJmxlYWRlcl9mbGFncywgZG9fY29tbWVudHMKKyNlbmRpZgorCQkJCSk7CisgICAgZWxzZQorCWlzX25vdF9wYXIgPSBUUlVFOworICAgIG5leHRfaXNfbm90X3BhciA9IGZtdF9jaGVja19wYXIoY3Vyd2luLT53X2N1cnNvci5sbnVtCisjaWZkZWYgRkVBVF9DT01NRU5UUworCQkJICAgLCAmbmV4dF9sZWFkZXJfbGVuLCAmbmV4dF9sZWFkZXJfZmxhZ3MsIGRvX2NvbW1lbnRzCisjZW5kaWYKKwkJCQkpOworICAgIGlzX2VuZF9wYXIgPSAoaXNfbm90X3BhciB8fCBuZXh0X2lzX25vdF9wYXIpOworICAgIGlmICghaXNfZW5kX3BhciAmJiBkb190cmFpbF93aGl0ZSkKKwlpc19lbmRfcGFyID0gIWVuZHNfaW5fd2hpdGUoY3Vyd2luLT53X2N1cnNvci5sbnVtIC0gMSk7CisKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0tLTsKKyAgICBmb3IgKGNvdW50ID0gbGluZV9jb3VudDsgY291bnQgIT0gMCAmJiAhZ290X2ludDsgLS1jb3VudCkKKyAgICB7CisJLyoKKwkgKiBBZHZhbmNlIHRvIG5leHQgcGFyYWdyYXBoLgorCSAqLworCWlmIChhZHZhbmNlKQorCXsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtKys7CisJICAgIHByZXZfaXNfZW5kX3BhciA9IGlzX2VuZF9wYXI7CisJICAgIGlzX25vdF9wYXIgPSBuZXh0X2lzX25vdF9wYXI7CisjaWZkZWYgRkVBVF9DT01NRU5UUworCSAgICBsZWFkZXJfbGVuID0gbmV4dF9sZWFkZXJfbGVuOworCSAgICBsZWFkZXJfZmxhZ3MgPSBuZXh0X2xlYWRlcl9mbGFnczsKKyNlbmRpZgorCX0KKworCS8qCisJICogVGhlIGxhc3QgbGluZSB0byBiZSBmb3JtYXR0ZWQuCisJICovCisJaWYgKGNvdW50ID09IDEgfHwgY3Vyd2luLT53X2N1cnNvci5sbnVtID09IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXsKKwkgICAgbmV4dF9pc19ub3RfcGFyID0gVFJVRTsKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisJICAgIG5leHRfbGVhZGVyX2xlbiA9IDA7CisJICAgIG5leHRfbGVhZGVyX2ZsYWdzID0gTlVMTDsKKyNlbmRpZgorCX0KKwllbHNlCisJeworCSAgICBuZXh0X2lzX25vdF9wYXIgPSBmbXRfY2hlY2tfcGFyKGN1cndpbi0+d19jdXJzb3IubG51bSArIDEKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisJCQkgICAsICZuZXh0X2xlYWRlcl9sZW4sICZuZXh0X2xlYWRlcl9mbGFncywgZG9fY29tbWVudHMKKyNlbmRpZgorCQkJCQkpOworCSAgICBpZiAoZG9fbnVtYmVyX2luZGVudCkKKwkJbmV4dF9pc19zdGFydF9wYXIgPQorCQkJICAgKGdldF9udW1iZXJfaW5kZW50KGN1cndpbi0+d19jdXJzb3IubG51bSArIDEpID4gMCk7CisJfQorCWFkdmFuY2UgPSBUUlVFOworCWlzX2VuZF9wYXIgPSAoaXNfbm90X3BhciB8fCBuZXh0X2lzX25vdF9wYXIgfHwgbmV4dF9pc19zdGFydF9wYXIpOworCWlmICghaXNfZW5kX3BhciAmJiBkb190cmFpbF93aGl0ZSkKKwkgICAgaXNfZW5kX3BhciA9ICFlbmRzX2luX3doaXRlKGN1cndpbi0+d19jdXJzb3IubG51bSk7CisKKwkvKgorCSAqIFNraXAgbGluZXMgdGhhdCBhcmUgbm90IGluIGEgcGFyYWdyYXBoLgorCSAqLworCWlmIChpc19ub3RfcGFyKQorCXsKKwkgICAgaWYgKGxpbmVfY291bnQgPCAwKQorCQlicmVhazsKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogRm9yIHRoZSBmaXJzdCBsaW5lIG9mIGEgcGFyYWdyYXBoLCBjaGVjayBpbmRlbnQgb2Ygc2Vjb25kIGxpbmUuCisJICAgICAqIERvbid0IGRvIHRoaXMgZm9yIGNvbW1lbnRzIGFuZCBlbXB0eSBsaW5lcy4KKwkgICAgICovCisJICAgIGlmIChmaXJzdF9wYXJfbGluZQorCQkgICAgJiYgKGRvX3NlY29uZF9pbmRlbnQgfHwgZG9fbnVtYmVyX2luZGVudCkKKwkJICAgICYmIHByZXZfaXNfZW5kX3BhcgorCQkgICAgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtIDwgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisJCSAgICAmJiBsZWFkZXJfbGVuID09IDAKKwkJICAgICYmIG5leHRfbGVhZGVyX2xlbiA9PSAwCisjZW5kaWYKKwkJICAgICkKKwkgICAgeworCQlpZiAoZG9fc2Vjb25kX2luZGVudAorCQkJJiYgIWxpbmVlbXB0eShjdXJ3aW4tPndfY3Vyc29yLmxudW0gKyAxKSkKKwkJICAgIHNlY29uZF9pbmRlbnQgPSBnZXRfaW5kZW50X2xudW0oY3Vyd2luLT53X2N1cnNvci5sbnVtICsgMSk7CisJCWVsc2UgaWYgKGRvX251bWJlcl9pbmRlbnQpCisJCSAgICBzZWNvbmRfaW5kZW50ID0gZ2V0X251bWJlcl9pbmRlbnQoY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIFdoZW4gdGhlIGNvbW1lbnQgbGVhZGVyIGNoYW5nZXMsIGl0J3MgdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLgorCSAgICAgKi8KKwkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA+PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudAorI2lmZGVmIEZFQVRfQ09NTUVOVFMKKwkJICAgIHx8ICFzYW1lX2xlYWRlcihjdXJ3aW4tPndfY3Vyc29yLmxudW0sCisJCQkJCWxlYWRlcl9sZW4sIGxlYWRlcl9mbGFncywKKwkJCQkJICBuZXh0X2xlYWRlcl9sZW4sIG5leHRfbGVhZGVyX2ZsYWdzKQorI2VuZGlmCisJCSAgICApCisJCWlzX2VuZF9wYXIgPSBUUlVFOworCisJICAgIC8qCisJICAgICAqIElmIHdlIGhhdmUgZ290IHRvIHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGgsIG9yIHRoZSBsaW5lIGlzCisJICAgICAqIGdldHRpbmcgbG9uZywgZm9ybWF0IGl0LgorCSAgICAgKi8KKwkgICAgaWYgKGlzX2VuZF9wYXIgfHwgZm9yY2VfZm9ybWF0KQorCSAgICB7CisJCWlmIChuZWVkX3NldF9pbmRlbnQpCisJCSAgICAvKiByZXBsYWNlIGluZGVudCBpbiBmaXJzdCBsaW5lIHdpdGggbWluaW1hbCBudW1iZXIgb2YKKwkJICAgICAqIHRhYnMgYW5kIHNwYWNlcywgYWNjb3JkaW5nIHRvIGN1cnJlbnQgb3B0aW9ucyAqLworCQkgICAgKHZvaWQpc2V0X2luZGVudChnZXRfaW5kZW50KCksIFNJTl9DSEFOR0VEKTsKKworCQkvKiBwdXQgY3Vyc29yIG9uIGxhc3Qgbm9uLXNwYWNlICovCisJCVN0YXRlID0gTk9STUFMOwkvKiBkb24ndCBnbyBwYXN0IGVuZC1vZi1saW5lICovCisJCWNvbGFkdmFuY2UoKGNvbG5yX1QpTUFYQ09MKTsKKwkJd2hpbGUgKGN1cndpbi0+d19jdXJzb3IuY29sICYmIHZpbV9pc3NwYWNlKGdjaGFyX2N1cnNvcigpKSkKKwkJICAgIGRlY19jdXJzb3IoKTsKKworCQkvKiBkbyB0aGUgZm9ybWF0dGluZywgd2l0aG91dCAnc2hvd21vZGUnICovCisJCVN0YXRlID0gSU5TRVJUOwkvKiBmb3Igb3Blbl9saW5lKCkgKi8KKwkJc21kX3NhdmUgPSBwX3NtZDsKKwkJcF9zbWQgPSBGQUxTRTsKKwkJaW5zZXJ0Y2hhcihOVUwsIElOU0NIQVJfRk9STUFUCisjaWZkZWYgRkVBVF9DT01NRU5UUworCQkJKyAoZG9fY29tbWVudHMgPyBJTlNDSEFSX0RPX0NPTSA6IDApCisjZW5kaWYKKwkJCSwgc2Vjb25kX2luZGVudCk7CisJCVN0YXRlID0gb2xkX1N0YXRlOworCQlwX3NtZCA9IHNtZF9zYXZlOworCQlzZWNvbmRfaW5kZW50ID0gLTE7CisJCS8qIGF0IGVuZCBvZiBwYXIuOiBuZWVkIHRvIHNldCBpbmRlbnQgb2YgbmV4dCBwYXIuICovCisJCW5lZWRfc2V0X2luZGVudCA9IGlzX2VuZF9wYXI7CisJCWlmIChpc19lbmRfcGFyKQorCQl7CisJCSAgICAvKiBXaGVuIGNhbGxlZCB3aXRoIGEgbmVnYXRpdmUgbGluZSBjb3VudCwgYnJlYWsgYXQgdGhlCisJCSAgICAgKiBlbmQgb2YgdGhlIHBhcmFncmFwaC4gKi8KKwkJICAgIGlmIChsaW5lX2NvdW50IDwgMCkKKwkJCWJyZWFrOworCQkgICAgZmlyc3RfcGFyX2xpbmUgPSBUUlVFOworCQl9CisJCWZvcmNlX2Zvcm1hdCA9IEZBTFNFOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogV2hlbiBzdGlsbCBpbiBzYW1lIHBhcmFncmFwaCwgam9pbiB0aGUgbGluZXMgdG9nZXRoZXIuICBCdXQKKwkgICAgICogZmlyc3QgZGVsZXRlIHRoZSBjb21tZW50IGxlYWRlciBmcm9tIHRoZSBzZWNvbmQgbGluZS4KKwkgICAgICovCisJICAgIGlmICghaXNfZW5kX3BhcikKKwkgICAgeworCQlhZHZhbmNlID0gRkFMU0U7CisJCWN1cndpbi0+d19jdXJzb3IubG51bSsrOworCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisJCWlmIChsaW5lX2NvdW50IDwgMCAmJiB1X3NhdmVfY3Vyc29yKCkgPT0gRkFJTCkKKwkJCWJyZWFrOworI2lmZGVmIEZFQVRfQ09NTUVOVFMKKwkJKHZvaWQpZGVsX2J5dGVzKChsb25nKW5leHRfbGVhZGVyX2xlbiwgRkFMU0UpOworCQlpZiAobmV4dF9sZWFkZXJfbGVuID4gMCkKKwkJICAgIG1hcmtfY29sX2FkanVzdChjdXJ3aW4tPndfY3Vyc29yLmxudW0sIChjb2xucl9UKTAsIDBMLAorCQkJCQkJICAgICAgKGxvbmcpLW5leHRfbGVhZGVyX2xlbik7CisjZW5kaWYKKwkJY3Vyd2luLT53X2N1cnNvci5sbnVtLS07CisJCWlmIChkb19qb2luKFRSVUUpID09IEZBSUwpCisJCXsKKwkJICAgIGJlZXBfZmx1c2goKTsKKwkJICAgIGJyZWFrOworCQl9CisJCWZpcnN0X3Bhcl9saW5lID0gRkFMU0U7CisJCS8qIElmIHRoZSBsaW5lIGlzIGdldHRpbmcgbG9uZywgZm9ybWF0IGl0IG5leHQgdGltZSAqLworCQlpZiAoU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpID4gKHNpemVfdCltYXhfbGVuKQorCQkgICAgZm9yY2VfZm9ybWF0ID0gVFJVRTsKKwkJZWxzZQorCQkgICAgZm9yY2VfZm9ybWF0ID0gRkFMU0U7CisJICAgIH0KKwl9CisJbGluZV9icmVha2NoZWNrKCk7CisgICAgfQorfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgbGluZSAibG51bSIgZW5kcyBpbiBhIHdoaXRlIGNoYXJhY3Rlci4KKyAqLworICAgIHN0YXRpYyBpbnQKK2VuZHNfaW5fd2hpdGUobG51bSkKKyAgICBsaW5lbnJfVAlsbnVtOworeworICAgIGNoYXJfdQkqcyA9IG1sX2dldChsbnVtKTsKKyAgICBzaXplX3QJbDsKKworICAgIGlmICgqcyA9PSBOVUwpCisJcmV0dXJuIEZBTFNFOworICAgIC8qIERvbid0IHVzZSBTVFJMRU4oKSBpbnNpZGUgdmltX2lzd2hpdGUoKSwgU0FTL0MgY29tcGxhaW5zOiAibWFjcm8KKyAgICAgKiBpbnZvY2F0aW9uIG1heSBjYWxsIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIi4gKi8KKyAgICBsID0gU1RSTEVOKHMpIC0gMTsKKyAgICByZXR1cm4gdmltX2lzd2hpdGUoc1tsXSk7Cit9CisKKy8qCisgKiBCbGFuayBsaW5lcywgYW5kIGxpbmVzIGNvbnRhaW5pbmcgb25seSB0aGUgY29tbWVudCBsZWFkZXIsIGFyZSBsZWZ0CisgKiB1bnRvdWNoZWQgYnkgdGhlIGZvcm1hdHRpbmcuICBUaGUgZnVuY3Rpb24gcmV0dXJucyBUUlVFIGluIHRoaXMKKyAqIGNhc2UuICBJdCBhbHNvIHJldHVybnMgVFJVRSB3aGVuIGEgbGluZSBzdGFydHMgd2l0aCB0aGUgZW5kIG9mIGEgY29tbWVudAorICogKCdlJyBpbiBjb21tZW50IGZsYWdzKSwgc28gdGhhdCB0aGlzIGxpbmUgaXMgc2tpcHBlZCwgYW5kIG5vdCBqb2luZWQgdG8gdGhlCisgKiBwcmV2aW91cyBsaW5lLiAgQSBuZXcgcGFyYWdyYXBoIHN0YXJ0cyBhZnRlciBhIGJsYW5rIGxpbmUsIG9yIHdoZW4gdGhlCisgKiBjb21tZW50IGxlYWRlciBjaGFuZ2VzIC0tIHdlYmIuCisgKi8KKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisgICAgc3RhdGljIGludAorZm10X2NoZWNrX3BhcihsbnVtLCBsZWFkZXJfbGVuLCBsZWFkZXJfZmxhZ3MsIGRvX2NvbW1lbnRzKQorICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQkqbGVhZGVyX2xlbjsKKyAgICBjaGFyX3UJKipsZWFkZXJfZmxhZ3M7CisgICAgaW50CQlkb19jb21tZW50czsKK3sKKyAgICBjaGFyX3UJKmZsYWdzID0gTlVMTDsJICAgIC8qIGluaXQgZm9yIEdDQyAqLworICAgIGNoYXJfdQkqcHRyOworCisgICAgcHRyID0gbWxfZ2V0KGxudW0pOworICAgIGlmIChkb19jb21tZW50cykKKwkqbGVhZGVyX2xlbiA9IGdldF9sZWFkZXJfbGVuKHB0ciwgbGVhZGVyX2ZsYWdzLCBGQUxTRSk7CisgICAgZWxzZQorCSpsZWFkZXJfbGVuID0gMDsKKworICAgIGlmICgqbGVhZGVyX2xlbiA+IDApCisgICAgeworCS8qCisJICogU2VhcmNoIGZvciAnZScgZmxhZyBpbiBjb21tZW50IGxlYWRlciBmbGFncy4KKwkgKi8KKwlmbGFncyA9ICpsZWFkZXJfZmxhZ3M7CisJd2hpbGUgKCpmbGFncyAmJiAqZmxhZ3MgIT0gJzonICYmICpmbGFncyAhPSBDT01fRU5EKQorCSAgICArK2ZsYWdzOworICAgIH0KKworICAgIHJldHVybiAoKnNraXB3aGl0ZShwdHIgKyAqbGVhZGVyX2xlbikgPT0gTlVMCisJICAgIHx8ICgqbGVhZGVyX2xlbiA+IDAgJiYgKmZsYWdzID09IENPTV9FTkQpCisJICAgIHx8IHN0YXJ0UFMobG51bSwgTlVMLCBGQUxTRSkpOworfQorI2Vsc2UKKyAgICBzdGF0aWMgaW50CitmbXRfY2hlY2tfcGFyKGxudW0pCisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICByZXR1cm4gKCpza2lwd2hpdGUobWxfZ2V0KGxudW0pKSA9PSBOVUwgfHwgc3RhcnRQUyhsbnVtLCBOVUwsIEZBTFNFKSk7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybiBUUlVFIHdoZW4gYSBwYXJhZ3JhcGggc3RhcnRzIGluIGxpbmUgImxudW0iLiAgUmV0dXJuIEZBTFNFIHdoZW4gdGhlCisgKiBwcmV2aW91cyBsaW5lIGlzIGluIHRoZSBzYW1lIHBhcmFncmFwaC4gIFVzZWQgZm9yIGF1dG8tZm9ybWF0dGluZy4KKyAqLworICAgIGludAorcGFyYWdyYXBoX3N0YXJ0KGxudW0pCisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBjaGFyX3UJKnA7CisjaWZkZWYgRkVBVF9DT01NRU5UUworICAgIGludAkJbGVhZGVyX2xlbiA9IDA7CQkvKiBsZWFkZXIgbGVuIG9mIGN1cnJlbnQgbGluZSAqLworICAgIGNoYXJfdQkqbGVhZGVyX2ZsYWdzID0gTlVMTDsJLyogZmxhZ3MgZm9yIGxlYWRlciBvZiBjdXJyZW50IGxpbmUgKi8KKyAgICBpbnQJCW5leHRfbGVhZGVyX2xlbjsJLyogbGVhZGVyIGxlbiBvZiBuZXh0IGxpbmUgKi8KKyAgICBjaGFyX3UJKm5leHRfbGVhZGVyX2ZsYWdzOwkvKiBmbGFncyBmb3IgbGVhZGVyIG9mIG5leHQgbGluZSAqLworICAgIGludAkJZG9fY29tbWVudHM7CQkvKiBmb3JtYXQgY29tbWVudHMgKi8KKyNlbmRpZgorCisgICAgaWYgKGxudW0gPD0gMSkKKwlyZXR1cm4gVFJVRTsJCS8qIHN0YXJ0IG9mIHRoZSBmaWxlICovCisKKyAgICBwID0gbWxfZ2V0KGxudW0gLSAxKTsKKyAgICBpZiAoKnAgPT0gTlVMKQorCXJldHVybiBUUlVFOwkJLyogYWZ0ZXIgZW1wdHkgbGluZSAqLworCisjaWZkZWYgRkVBVF9DT01NRU5UUworICAgIGRvX2NvbW1lbnRzID0gaGFzX2Zvcm1hdF9vcHRpb24oRk9fUV9DT01TKTsKKyNlbmRpZgorICAgIGlmIChmbXRfY2hlY2tfcGFyKGxudW0gLSAxCisjaWZkZWYgRkVBVF9DT01NRU5UUworCQkJCSwgJmxlYWRlcl9sZW4sICZsZWFkZXJfZmxhZ3MsIGRvX2NvbW1lbnRzCisjZW5kaWYKKwkJKSkKKwlyZXR1cm4gVFJVRTsJCS8qIGFmdGVyIG5vbi1wYXJhZ3JhcGggbGluZSAqLworCisgICAgaWYgKGZtdF9jaGVja19wYXIobG51bQorI2lmZGVmIEZFQVRfQ09NTUVOVFMKKwkJCSAgICwgJm5leHRfbGVhZGVyX2xlbiwgJm5leHRfbGVhZGVyX2ZsYWdzLCBkb19jb21tZW50cworI2VuZGlmCisJCSkpCisJcmV0dXJuIFRSVUU7CQkvKiAibG51bSIgaXMgbm90IGEgcGFyYWdyYXBoIGxpbmUgKi8KKworICAgIGlmIChoYXNfZm9ybWF0X29wdGlvbihGT19XSElURV9QQVIpICYmICFlbmRzX2luX3doaXRlKGxudW0gLSAxKSkKKwlyZXR1cm4gVFJVRTsJCS8qIG1pc3NpbmcgdHJhaWxpbmcgc3BhY2UgaW4gcHJldmlvdXMgbGluZS4gKi8KKworICAgIGlmIChoYXNfZm9ybWF0X29wdGlvbihGT19RX05VTUJFUikgJiYgKGdldF9udW1iZXJfaW5kZW50KGxudW0pID4gMCkpCisJcmV0dXJuIFRSVUU7CQkvKiBudW1iZXJlZCBpdGVtIHN0YXJ0cyBpbiAibG51bSIuICovCisKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisgICAgaWYgKCFzYW1lX2xlYWRlcihsbnVtIC0gMSwgbGVhZGVyX2xlbiwgbGVhZGVyX2ZsYWdzLAorCQkJCQkgIG5leHRfbGVhZGVyX2xlbiwgbmV4dF9sZWFkZXJfZmxhZ3MpKQorCXJldHVybiBUUlVFOwkJLyogY2hhbmdlIG9mIGNvbW1lbnQgbGVhZGVyLiAqLworI2VuZGlmCisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorLyoKKyAqIHByZXBhcmUgYSBmZXcgdGhpbmdzIGZvciBibG9jayBtb2RlIHlhbmsvZGVsZXRlL3RpbGRlCisgKgorICogZm9yIGRlbGV0ZToKKyAqIC0gdGV4dGxlbiBpbmNsdWRlcyB0aGUgZmlyc3QvbGFzdCBjaGFyIHRvIGJlIChwYXJ0bHkpIGRlbGV0ZWQKKyAqIC0gc3RhcnQvZW5kc3BhY2VzIGlzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGF0IGFyZSB0YWtlbiBieSB0aGUKKyAqICAgZmlyc3QvbGFzdCBkZWxldGVkIGNoYXIgbWludXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoYXQgaGF2ZSB0byBiZQorICogICBkZWxldGVkLiAgZm9yIHlhbmsgYW5kIHRpbGRlOgorICogLSB0ZXh0bGVuIGluY2x1ZGVzIHRoZSBmaXJzdC9sYXN0IGNoYXIgdG8gYmUgd2hvbGx5IHlhbmtlZAorICogLSBzdGFydC9lbmRzcGFjZXMgaXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBmaXJzdC9sYXN0IHlhbmtlZCBjaGFyCisgKiAgIHRoYXQgYXJlIHRvIGJlIHlhbmtlZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitibG9ja19wcmVwKG9hcCwgYmRwLCBsbnVtLCBpc19kZWwpCisgICAgb3BhcmdfVAkJKm9hcDsKKyAgICBzdHJ1Y3QgYmxvY2tfZGVmCSpiZHA7CisgICAgbGluZW5yX1QJCWxudW07CisgICAgaW50CQkJaXNfZGVsOworeworICAgIGludAkJaW5jciA9IDA7CisgICAgY2hhcl91CSpwZW5kOworICAgIGNoYXJfdQkqcHN0YXJ0OworICAgIGNoYXJfdQkqbGluZTsKKyAgICBjaGFyX3UJKnByZXZfcHN0YXJ0OworICAgIGNoYXJfdQkqcHJldl9wZW5kOworCisgICAgYmRwLT5zdGFydHNwYWNlcyA9IDA7CisgICAgYmRwLT5lbmRzcGFjZXMgPSAwOworICAgIGJkcC0+dGV4dGxlbiA9IDA7CisgICAgYmRwLT5zdGFydF92Y29sID0gMDsKKyAgICBiZHAtPmVuZF92Y29sID0gMDsKKyNpZmRlZiBGRUFUX1ZJU1VBTEVYVFJBCisgICAgYmRwLT5pc19zaG9ydCA9IEZBTFNFOworICAgIGJkcC0+aXNfb25lQ2hhciA9IEZBTFNFOworICAgIGJkcC0+cHJlX3doaXRlc3AgPSAwOworICAgIGJkcC0+cHJlX3doaXRlc3BfYyA9IDA7CisgICAgYmRwLT5lbmRfY2hhcl92Y29scyA9IDA7CisjZW5kaWYKKyAgICBiZHAtPnN0YXJ0X2NoYXJfdmNvbHMgPSAwOworCisgICAgbGluZSA9IG1sX2dldChsbnVtKTsKKyAgICBwc3RhcnQgPSBsaW5lOworICAgIHByZXZfcHN0YXJ0ID0gbGluZTsKKyAgICB3aGlsZSAoYmRwLT5zdGFydF92Y29sIDwgb2FwLT5zdGFydF92Y29sICYmICpwc3RhcnQpCisgICAgeworCS8qIENvdW50IGEgdGFiIGZvciB3aGF0IGl0J3Mgd29ydGggKGlmIGxpc3QgbW9kZSBub3Qgb24pICovCisJaW5jciA9IGxicl9jaGFydGFic2l6ZShwc3RhcnQsIChjb2xucl9UKWJkcC0+c3RhcnRfdmNvbCk7CisJYmRwLT5zdGFydF92Y29sICs9IGluY3I7CisjaWZkZWYgRkVBVF9WSVNVQUxFWFRSQQorCWlmICh2aW1faXN3aGl0ZSgqcHN0YXJ0KSkKKwl7CisJICAgIGJkcC0+cHJlX3doaXRlc3AgKz0gaW5jcjsKKwkgICAgYmRwLT5wcmVfd2hpdGVzcF9jKys7CisJfQorCWVsc2UKKwl7CisJICAgIGJkcC0+cHJlX3doaXRlc3AgPSAwOworCSAgICBiZHAtPnByZV93aGl0ZXNwX2MgPSAwOworCX0KKyNlbmRpZgorCXByZXZfcHN0YXJ0ID0gcHN0YXJ0OworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCSAgICBwc3RhcnQgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwc3RhcnQpOworCWVsc2UKKyNlbmRpZgorCSAgICArK3BzdGFydDsKKyAgICB9CisgICAgYmRwLT5zdGFydF9jaGFyX3Zjb2xzID0gaW5jcjsKKyAgICBpZiAoYmRwLT5zdGFydF92Y29sIDwgb2FwLT5zdGFydF92Y29sKQkvKiBsaW5lIHRvbyBzaG9ydCAqLworICAgIHsKKwliZHAtPmVuZF92Y29sID0gYmRwLT5zdGFydF92Y29sOworI2lmZGVmIEZFQVRfVklTVUFMRVhUUkEKKwliZHAtPmlzX3Nob3J0ID0gVFJVRTsKKyNlbmRpZgorCWlmICghaXNfZGVsIHx8IG9hcC0+b3BfdHlwZSA9PSBPUF9BUFBFTkQpCisJICAgIGJkcC0+ZW5kc3BhY2VzID0gb2FwLT5lbmRfdmNvbCAtIG9hcC0+c3RhcnRfdmNvbCArIDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogbm90aWNlOiB0aGlzIGNvbnZlcnRzIHBhcnRseSBzZWxlY3RlZCBNdWx0aWJ5dGUgY2hhcmFjdGVycyB0bworCSAqIHNwYWNlcywgdG9vLiAqLworCWJkcC0+c3RhcnRzcGFjZXMgPSBiZHAtPnN0YXJ0X3Zjb2wgLSBvYXAtPnN0YXJ0X3Zjb2w7CisJaWYgKGlzX2RlbCAmJiBiZHAtPnN0YXJ0c3BhY2VzKQorCSAgICBiZHAtPnN0YXJ0c3BhY2VzID0gYmRwLT5zdGFydF9jaGFyX3Zjb2xzIC0gYmRwLT5zdGFydHNwYWNlczsKKwlwZW5kID0gcHN0YXJ0OworCWJkcC0+ZW5kX3Zjb2wgPSBiZHAtPnN0YXJ0X3Zjb2w7CisJaWYgKGJkcC0+ZW5kX3Zjb2wgPiBvYXAtPmVuZF92Y29sKQkvKiBpdCdzIGFsbCBpbiBvbmUgY2hhcmFjdGVyICovCisJeworI2lmZGVmIEZFQVRfVklTVUFMRVhUUkEKKwkgICAgYmRwLT5pc19vbmVDaGFyID0gVFJVRTsKKyNlbmRpZgorCSAgICBpZiAob2FwLT5vcF90eXBlID09IE9QX0lOU0VSVCkKKwkJYmRwLT5lbmRzcGFjZXMgPSBiZHAtPnN0YXJ0X2NoYXJfdmNvbHMgLSBiZHAtPnN0YXJ0c3BhY2VzOworCSAgICBlbHNlIGlmIChvYXAtPm9wX3R5cGUgPT0gT1BfQVBQRU5EKQorCSAgICB7CisJCWJkcC0+c3RhcnRzcGFjZXMgKz0gb2FwLT5lbmRfdmNvbCAtIG9hcC0+c3RhcnRfdmNvbCArIDE7CisJCWJkcC0+ZW5kc3BhY2VzID0gYmRwLT5zdGFydF9jaGFyX3Zjb2xzIC0gYmRwLT5zdGFydHNwYWNlczsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJYmRwLT5zdGFydHNwYWNlcyA9IG9hcC0+ZW5kX3Zjb2wgLSBvYXAtPnN0YXJ0X3Zjb2wgKyAxOworCQlpZiAoaXNfZGVsICYmIG9hcC0+b3BfdHlwZSAhPSBPUF9MU0hJRlQpCisJCXsKKwkJICAgIC8qIGp1c3QgcHV0dGluZyB0aGUgc3VtIG9mIHRob3NlIHR3byBpbnRvCisJCSAgICAgKiBiZHAtPnN0YXJ0c3BhY2VzIGRvZXNuJ3Qgd29yayBmb3IgVmlzdWFsIHJlcGxhY2UsCisJCSAgICAgKiBzbyB3ZSBoYXZlIHRvIHNwbGl0IHRoZSB0YWIgaW4gdHdvICovCisJCSAgICBiZHAtPnN0YXJ0c3BhY2VzID0gYmRwLT5zdGFydF9jaGFyX3Zjb2xzCisJCQkJCS0gKGJkcC0+c3RhcnRfdmNvbCAtIG9hcC0+c3RhcnRfdmNvbCk7CisJCSAgICBiZHAtPmVuZHNwYWNlcyA9IGJkcC0+ZW5kX3Zjb2wgLSBvYXAtPmVuZF92Y29sIC0gMTsKKwkJfQorCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIHByZXZfcGVuZCA9IHBlbmQ7CisJICAgIHdoaWxlIChiZHAtPmVuZF92Y29sIDw9IG9hcC0+ZW5kX3Zjb2wgJiYgKnBlbmQgIT0gTlVMKQorCSAgICB7CisJCS8qIENvdW50IGEgdGFiIGZvciB3aGF0IGl0J3Mgd29ydGggKGlmIGxpc3QgbW9kZSBub3Qgb24pICovCisJCXByZXZfcGVuZCA9IHBlbmQ7CisJCWluY3IgPSBsYnJfY2hhcnRhYnNpemVfYWR2KCZwZW5kLCAoY29sbnJfVCliZHAtPmVuZF92Y29sKTsKKwkJYmRwLT5lbmRfdmNvbCArPSBpbmNyOworCSAgICB9CisJICAgIGlmIChiZHAtPmVuZF92Y29sIDw9IG9hcC0+ZW5kX3Zjb2wKKwkJICAgICYmICghaXNfZGVsCisJCQl8fCBvYXAtPm9wX3R5cGUgPT0gT1BfQVBQRU5ECisJCQl8fCBvYXAtPm9wX3R5cGUgPT0gT1BfUkVQTEFDRSkpIC8qIGxpbmUgdG9vIHNob3J0ICovCisJICAgIHsKKyNpZmRlZiBGRUFUX1ZJU1VBTEVYVFJBCisJCWJkcC0+aXNfc2hvcnQgPSBUUlVFOworI2VuZGlmCisJCS8qIEFsdGVybmF0aXZlOiBpbmNsdWRlIHNwYWNlcyB0byBmaWxsIHVwIHRoZSBibG9jay4KKwkJICogRGlzYWR2YW50YWdlOiBjYW4gbGVhZCB0byB0cmFpbGluZyBzcGFjZXMgd2hlbiB0aGUgbGluZSBpcworCQkgKiBzaG9ydCB3aGVyZSB0aGUgdGV4dCBpcyBwdXQgKi8KKwkJLyogaWYgKCFpc19kZWwgfHwgb2FwLT5vcF90eXBlID09IE9QX0FQUEVORCkgKi8KKwkJaWYgKG9hcC0+b3BfdHlwZSA9PSBPUF9BUFBFTkQgfHwgdmlydHVhbF9vcCkKKwkJICAgIGJkcC0+ZW5kc3BhY2VzID0gb2FwLT5lbmRfdmNvbCAtIGJkcC0+ZW5kX3Zjb2wKKwkJCQkJKyBvYXAtPmluY2x1c2l2ZTsKKwkJZWxzZQorCQkgICAgYmRwLT5lbmRzcGFjZXMgPSAwOyAvKiByZXBsYWNlIGRvZXNuJ3QgYWRkIGNoYXJhY3RlcnMgKi8KKwkgICAgfQorCSAgICBlbHNlIGlmIChiZHAtPmVuZF92Y29sID4gb2FwLT5lbmRfdmNvbCkKKwkgICAgeworCQliZHAtPmVuZHNwYWNlcyA9IGJkcC0+ZW5kX3Zjb2wgLSBvYXAtPmVuZF92Y29sIC0gMTsKKwkJaWYgKCFpc19kZWwgJiYgYmRwLT5lbmRzcGFjZXMpCisJCXsKKwkJICAgIGJkcC0+ZW5kc3BhY2VzID0gaW5jciAtIGJkcC0+ZW5kc3BhY2VzOworCQkgICAgaWYgKHBlbmQgIT0gcHN0YXJ0KQorCQkJcGVuZCA9IHByZXZfcGVuZDsKKwkJfQorCSAgICB9CisJfQorI2lmZGVmIEZFQVRfVklTVUFMRVhUUkEKKwliZHAtPmVuZF9jaGFyX3Zjb2xzID0gaW5jcjsKKyNlbmRpZgorCWlmIChpc19kZWwgJiYgYmRwLT5zdGFydHNwYWNlcykKKwkgICAgcHN0YXJ0ID0gcHJldl9wc3RhcnQ7CisJYmRwLT50ZXh0bGVuID0gKGludCkocGVuZCAtIHBzdGFydCk7CisgICAgfQorICAgIGJkcC0+dGV4dGNvbCA9IChjb2xucl9UKSAocHN0YXJ0IC0gbGluZSk7CisgICAgYmRwLT50ZXh0c3RhcnQgPSBwc3RhcnQ7Cit9CisjZW5kaWYgLyogRkVBVF9WSVNVQUwgKi8KKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCitzdGF0aWMgdm9pZCByZXZlcnNlX2xpbmUgX19BUkdTKChjaGFyX3UgKnMpKTsKKworICAgIHN0YXRpYyB2b2lkCityZXZlcnNlX2xpbmUocykKKyAgICBjaGFyX3UgKnM7Cit7CisgICAgaW50CSAgICBpLCBqOworICAgIGNoYXJfdSAgYzsKKworICAgIGlmICgoaSA9IChpbnQpU1RSTEVOKHMpIC0gMSkgPD0gMCkKKwlyZXR1cm47CisKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGkgLSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrLCBpLS0pCisgICAgeworCWMgPSBzW2ldOyBzW2ldID0gc1tqXTsgc1tqXSA9IGM7CisgICAgfQorfQorCisjIGRlZmluZSBSTEFERFNVQkZJWChwdHIpIGlmIChjdXJ3aW4tPndfcF9ybCkgcmV2ZXJzZV9saW5lKHB0cik7CisjZWxzZQorIyBkZWZpbmUgUkxBRERTVUJGSVgocHRyKQorI2VuZGlmCisKKy8qCisgKiBhZGQgb3Igc3VidHJhY3QgJ1ByZW51bTEnIGZyb20gYSBudW1iZXIgaW4gYSBsaW5lCisgKiAnY29tbWFuZCcgaXMgQ1RSTC1BIGZvciBhZGQsIENUUkwtWCBmb3Igc3VidHJhY3QKKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK2RvX2FkZHN1Yihjb21tYW5kLCBQcmVudW0xKQorICAgIGludAkJY29tbWFuZDsKKyAgICBsaW5lbnJfVAlQcmVudW0xOworeworICAgIGludAkJY29sOworICAgIGNoYXJfdQkqYnVmMTsKKyAgICBjaGFyX3UJYnVmMltOVU1CVUZMRU5dOworICAgIGludAkJaGV4OwkJLyogJ1gnIG9yICd4JzogaGV4OyAnMCc6IG9jdGFsICovCisgICAgc3RhdGljIGludAloZXh1cHBlciA9IEZBTFNFOwkvKiAweEFCQyAqLworICAgIGxvbmdfdQluOworICAgIGxvbmdfdQlvbGRuOworICAgIGNoYXJfdQkqcHRyOworICAgIGludAkJYzsKKyAgICBpbnQJCWxlbmd0aCA9IDA7CQkvKiBjaGFyYWN0ZXIgbGVuZ3RoIG9mIHRoZSBudW1iZXIgKi8KKyAgICBpbnQJCXRvZGVsOworICAgIGludAkJZG9oZXg7CisgICAgaW50CQlkb29jdDsKKyAgICBpbnQJCWRvYWxwOworICAgIGludAkJZmlyc3RkaWdpdDsKKyAgICBpbnQJCW5lZ2F0aXZlOworICAgIGludAkJc3VidHJhY3Q7CisKKyAgICBkb2hleCA9ICh2aW1fc3RyY2hyKGN1cmJ1Zi0+Yl9wX25mLCAneCcpICE9IE5VTEwpOwkvKiAiaGVYIiAqLworICAgIGRvb2N0ID0gKHZpbV9zdHJjaHIoY3VyYnVmLT5iX3BfbmYsICdvJykgIT0gTlVMTCk7CS8qICJPY3RhbCIgKi8KKyAgICBkb2FscCA9ICh2aW1fc3RyY2hyKGN1cmJ1Zi0+Yl9wX25mLCAncCcpICE9IE5VTEwpOwkvKiAiYWxQaGEiICovCisKKyAgICBwdHIgPSBtbF9nZXRfY3VybGluZSgpOworICAgIFJMQUREU1VCRklYKHB0cik7CisKKyAgICAvKgorICAgICAqIEZpcnN0IGNoZWNrIGlmIHdlIGFyZSBvbiBhIGhleGFkZWNpbWFsIG51bWJlciwgYWZ0ZXIgdGhlICIweCIuCisgICAgICovCisgICAgY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisgICAgaWYgKGRvaGV4KQorCXdoaWxlIChjb2wgPiAwICYmIHZpbV9pc3hkaWdpdChwdHJbY29sXSkpCisJICAgIC0tY29sOworICAgIGlmICggICAgICAgZG9oZXgKKwkgICAgJiYgY29sID4gMAorCSAgICAmJiAocHRyW2NvbF0gPT0gJ1gnCisJCXx8IHB0cltjb2xdID09ICd4JykKKwkgICAgJiYgcHRyW2NvbCAtIDFdID09ICcwJworCSAgICAmJiB2aW1faXN4ZGlnaXQocHRyW2NvbCArIDFdKSkKKyAgICB7CisJLyoKKwkgKiBGb3VuZCBoZXhhZGVjaW1hbCBudW1iZXIsIG1vdmUgdG8gaXRzIHN0YXJ0LgorCSAqLworCS0tY29sOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qCisJICogU2VhcmNoIGZvcndhcmQgYW5kIHRoZW4gYmFja3dhcmQgdG8gZmluZCB0aGUgc3RhcnQgb2YgbnVtYmVyLgorCSAqLworCWNvbCA9IGN1cndpbi0+d19jdXJzb3IuY29sOworCisJd2hpbGUgKHB0cltjb2xdICE9IE5VTAorCQkmJiAhdmltX2lzZGlnaXQocHRyW2NvbF0pCisJCSYmICEoZG9hbHAgJiYgQVNDSUlfSVNBTFBIQShwdHJbY29sXSkpKQorCSAgICArK2NvbDsKKworCXdoaWxlIChjb2wgPiAwCisJCSYmIHZpbV9pc2RpZ2l0KHB0cltjb2wgLSAxXSkKKwkJJiYgIShkb2FscCAmJiBBU0NJSV9JU0FMUEhBKHB0cltjb2xdKSkpCisJICAgIC0tY29sOworICAgIH0KKworICAgIC8qIHRydW5jYXRlIHRvIG1heCBsZW5ndGggb2YgYSBudW1iZXIgKi8KKyAgICBpZiAobGVuZ3RoID49IE5VTUJVRkxFTiAtIDEpCisJbGVuZ3RoID0gTlVNQlVGTEVOIC0gMjsKKworICAgIC8qCisgICAgICogSWYgYSBudW1iZXIgd2FzIGZvdW5kLCBhbmQgc2F2aW5nIGZvciB1bmRvIHdvcmtzLCByZXBsYWNlIHRoZSBudW1iZXIuCisgICAgICovCisgICAgZmlyc3RkaWdpdCA9IHB0cltjb2xdOworICAgIFJMQUREU1VCRklYKHB0cik7CisgICAgaWYgKCghVklNX0lTRElHSVQoZmlyc3RkaWdpdCkgJiYgIShkb2FscCAmJiBBU0NJSV9JU0FMUEhBKGZpcnN0ZGlnaXQpKSkKKwkgICAgfHwgdV9zYXZlX2N1cnNvcigpICE9IE9LKQorICAgIHsKKwliZWVwX2ZsdXNoKCk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgLyogZ2V0IHB0ciBhZ2FpbiwgYmVjYXVzZSB1X3NhdmUoKSBtYXkgaGF2ZSBjaGFuZ2VkIGl0ICovCisgICAgcHRyID0gbWxfZ2V0X2N1cmxpbmUoKTsKKyAgICBSTEFERFNVQkZJWChwdHIpOworCisgICAgaWYgKGRvYWxwICYmIEFTQ0lJX0lTQUxQSEEoZmlyc3RkaWdpdCkpCisgICAgeworCS8qIGRlY3JlbWVudCBvciBpbmNyZW1lbnQgYWxwaGFiZXRpYyBjaGFyYWN0ZXIgKi8KKwlpZiAoY29tbWFuZCA9PSBDdHJsX1gpCisJeworCSAgICBpZiAoQ2hhck9yZChmaXJzdGRpZ2l0KSA8IFByZW51bTEpCisJICAgIHsKKwkJaWYgKGlzdXBwZXIoZmlyc3RkaWdpdCkpCisJCSAgICBmaXJzdGRpZ2l0ID0gJ0EnOworCQllbHNlCisJCSAgICBmaXJzdGRpZ2l0ID0gJ2EnOworCSAgICB9CisJICAgIGVsc2UKKyNpZmRlZiBFQkNESUMKKwkJZmlyc3RkaWdpdCA9IEVCQ0RJQ19DSEFSX0FERChmaXJzdGRpZ2l0LCAtUHJlbnVtMSk7CisjZWxzZQorCQlmaXJzdGRpZ2l0IC09IFByZW51bTE7CisjZW5kaWYKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKDI2IC0gQ2hhck9yZChmaXJzdGRpZ2l0KSAtIDEgPCBQcmVudW0xKQorCSAgICB7CisJCWlmIChpc3VwcGVyKGZpcnN0ZGlnaXQpKQorCQkgICAgZmlyc3RkaWdpdCA9ICdaJzsKKwkJZWxzZQorCQkgICAgZmlyc3RkaWdpdCA9ICd6JzsKKwkgICAgfQorCSAgICBlbHNlCisjaWZkZWYgRUJDRElDCisJCWZpcnN0ZGlnaXQgPSBFQkNESUNfQ0hBUl9BREQoZmlyc3RkaWdpdCwgUHJlbnVtMSk7CisjZWxzZQorCQlmaXJzdGRpZ2l0ICs9IFByZW51bTE7CisjZW5kaWYKKwl9CisJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBjb2w7CisJKHZvaWQpZGVsX2NoYXIoRkFMU0UpOworCWluc19jaGFyKGZpcnN0ZGlnaXQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCW5lZ2F0aXZlID0gRkFMU0U7CisJaWYgKGNvbCA+IDAgJiYgcHRyW2NvbCAtIDFdID09ICctJykJICAgIC8qIG5lZ2F0aXZlIG51bWJlciAqLworCXsKKwkgICAgLS1jb2w7CisJICAgIG5lZ2F0aXZlID0gVFJVRTsKKwl9CisKKwkvKiBnZXQgdGhlIG51bWJlciB2YWx1ZSAodW5zaWduZWQpICovCisJdmltX3N0cjJucihwdHIgKyBjb2wsICZoZXgsICZsZW5ndGgsIGRvb2N0LCBkb2hleCwgTlVMTCwgJm4pOworCisJLyogaWdub3JlIGxlYWRpbmcgJy0nIGZvciBoZXggYW5kIG9jdGFsIG51bWJlcnMgKi8KKwlpZiAoaGV4ICYmIG5lZ2F0aXZlKQorCXsKKwkgICAgKytjb2w7CisJICAgIC0tbGVuZ3RoOworCSAgICBuZWdhdGl2ZSA9IEZBTFNFOworCX0KKworCS8qIGFkZCBvciBzdWJ0cmFjdCAqLworCXN1YnRyYWN0ID0gRkFMU0U7CisJaWYgKGNvbW1hbmQgPT0gQ3RybF9YKQorCSAgICBzdWJ0cmFjdCBePSBUUlVFOworCWlmIChuZWdhdGl2ZSkKKwkgICAgc3VidHJhY3QgXj0gVFJVRTsKKworCW9sZG4gPSBuOworCWlmIChzdWJ0cmFjdCkKKwkgICAgbiAtPSAodW5zaWduZWQgbG9uZylQcmVudW0xOworCWVsc2UKKwkgICAgbiArPSAodW5zaWduZWQgbG9uZylQcmVudW0xOworCisJLyogaGFuZGxlIHdyYXBhcm91bmQgZm9yIGRlY2ltYWwgbnVtYmVycyAqLworCWlmICghaGV4KQorCXsKKwkgICAgaWYgKHN1YnRyYWN0KQorCSAgICB7CisJCWlmIChuID4gb2xkbikKKwkJeworCQkgICAgbiA9IDEgKyAobiBeICh1bnNpZ25lZCBsb25nKS0xKTsKKwkJICAgIG5lZ2F0aXZlIF49IFRSVUU7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIC8qIGFkZCAqLworCSAgICB7CisJCWlmIChuIDwgb2xkbikKKwkJeworCQkgICAgbiA9IChuIF4gKHVuc2lnbmVkIGxvbmcpLTEpOworCQkgICAgbmVnYXRpdmUgXj0gVFJVRTsKKwkJfQorCSAgICB9CisJICAgIGlmIChuID09IDApCisJCW5lZ2F0aXZlID0gRkFMU0U7CisJfQorCisJLyoKKwkgKiBEZWxldGUgdGhlIG9sZCBudW1iZXIuCisJICovCisJY3Vyd2luLT53X2N1cnNvci5jb2wgPSBjb2w7CisJdG9kZWwgPSBsZW5ndGg7CisJYyA9IGdjaGFyX2N1cnNvcigpOworCS8qCisJICogRG9uJ3QgaW5jbHVkZSB0aGUgJy0nIGluIHRoZSBsZW5ndGgsIG9ubHkgdGhlIGxlbmd0aCBvZiB0aGUgcGFydAorCSAqIGFmdGVyIGl0IGlzIGtlcHQgdGhlIHNhbWUuCisJICovCisJaWYgKGMgPT0gJy0nKQorCSAgICAtLWxlbmd0aDsKKwl3aGlsZSAodG9kZWwtLSA+IDApCisJeworCSAgICBpZiAoYyA8IDB4MTAwICYmIGlzYWxwaGEoYykpCisJICAgIHsKKwkJaWYgKGlzdXBwZXIoYykpCisJCSAgICBoZXh1cHBlciA9IFRSVUU7CisJCWVsc2UKKwkJICAgIGhleHVwcGVyID0gRkFMU0U7CisJICAgIH0KKwkgICAgLyogZGVsX2NoYXIoKSB3aWxsIG1hcmsgbGluZSBuZWVkaW5nIGRpc3BsYXlpbmcgKi8KKwkgICAgKHZvaWQpZGVsX2NoYXIoRkFMU0UpOworCSAgICBjID0gZ2NoYXJfY3Vyc29yKCk7CisJfQorCisJLyoKKwkgKiBQcmVwYXJlIHRoZSBsZWFkaW5nIGNoYXJhY3RlcnMgaW4gYnVmMVtdLgorCSAqIFdoZW4gdGhlcmUgYXJlIG1hbnkgbGVhZGluZyB6ZXJvcyBpdCBjb3VsZCBiZSB2ZXJ5IGxvbmcuICBBbGxvY2F0ZQorCSAqIGEgYml0IHRvbyBtdWNoLgorCSAqLworCWJ1ZjEgPSBhbGxvYygodW5zaWduZWQpbGVuZ3RoICsgTlVNQlVGTEVOKTsKKwlpZiAoYnVmMSA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFJTDsKKwlwdHIgPSBidWYxOworCWlmIChuZWdhdGl2ZSkKKwl7CisJICAgICpwdHIrKyA9ICctJzsKKwl9CisJaWYgKGhleCkKKwl7CisJICAgICpwdHIrKyA9ICcwJzsKKwkgICAgLS1sZW5ndGg7CisJfQorCWlmIChoZXggPT0gJ3gnIHx8IGhleCA9PSAnWCcpCisJeworCSAgICAqcHRyKysgPSBoZXg7CisJICAgIC0tbGVuZ3RoOworCX0KKworCS8qCisJICogUHV0IHRoZSBudW1iZXIgY2hhcmFjdGVycyBpbiBidWYyW10uCisJICovCisJaWYgKGhleCA9PSAwKQorCSAgICBzcHJpbnRmKChjaGFyICopYnVmMiwgIiVsdSIsIG4pOworCWVsc2UgaWYgKGhleCA9PSAnMCcpCisJICAgIHNwcmludGYoKGNoYXIgKilidWYyLCAiJWxvIiwgbik7CisJZWxzZSBpZiAoaGV4ICYmIGhleHVwcGVyKQorCSAgICBzcHJpbnRmKChjaGFyICopYnVmMiwgIiVsWCIsIG4pOworCWVsc2UKKwkgICAgc3ByaW50ZigoY2hhciAqKWJ1ZjIsICIlbHgiLCBuKTsKKwlsZW5ndGggLT0gKGludClTVFJMRU4oYnVmMik7CisKKwkvKgorCSAqIGFkanVzdCBudW1iZXIgb2YgemVyb3MgdG8gdGhlIG5ldyBudW1iZXIgb2YgZGlnaXRzLCBzbyB0aGUKKwkgKiB0b3RhbCBsZW5ndGggb2YgdGhlIG51bWJlciByZW1haW5zIHRoZSBzYW1lCisJICovCisJaWYgKGZpcnN0ZGlnaXQgPT0gJzAnKQorCSAgICB3aGlsZSAobGVuZ3RoLS0gPiAwKQorCQkqcHRyKysgPSAnMCc7CisJKnB0ciA9IE5VTDsKKwlTVFJDQVQoYnVmMSwgYnVmMik7CisJaW5zX3N0cihidWYxKTsJCS8qIGluc2VydCB0aGUgbmV3IG51bWJlciAqLworCXZpbV9mcmVlKGJ1ZjEpOworICAgIH0KKyAgICAtLWN1cndpbi0+d19jdXJzb3IuY29sOworICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgcHRyID0gbWxfZ2V0X2J1ZihjdXJidWYsIGN1cndpbi0+d19jdXJzb3IubG51bSwgVFJVRSk7CisgICAgUkxBRERTVUJGSVgocHRyKTsKKyNlbmRpZgorICAgIHJldHVybiBPSzsKK30KKworI2lmZGVmIEZFQVRfVklNSU5GTworICAgIGludAorcmVhZF92aW1pbmZvX3JlZ2lzdGVyKHZpcnAsIGZvcmNlKQorICAgIHZpcl9UCSp2aXJwOworICAgIGludAkJZm9yY2U7Cit7CisgICAgaW50CQllb2Y7CisgICAgaW50CQlkb19pdCA9IFRSVUU7CisgICAgaW50CQlzaXplOworICAgIGludAkJbGltaXQ7CisgICAgaW50CQlpOworICAgIGludAkJc2V0X3ByZXYgPSBGQUxTRTsKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBjaGFyX3UJKiphcnJheSA9IE5VTEw7CisKKyAgICAvKiBXZSBvbmx5IGdldCBoZXJlIChob3BlZnVsbHkpIGlmIGxpbmVbMF0gPT0gJyInICovCisgICAgc3RyID0gdmlycC0+dmlyX2xpbmUgKyAxOworICAgIGlmICgqc3RyID09ICciJykKKyAgICB7CisJc2V0X3ByZXYgPSBUUlVFOworCXN0cisrOworICAgIH0KKyAgICBpZiAoIUFTQ0lJX0lTQUxOVU0oKnN0cikgJiYgKnN0ciAhPSAnLScpCisgICAgeworCWlmICh2aW1pbmZvX2Vycm9yKCJFNTc3OiAiLCBfKCJJbGxlZ2FsIHJlZ2lzdGVyIG5hbWUiKSwgdmlycC0+dmlyX2xpbmUpKQorCSAgICByZXR1cm4gVFJVRTsJLyogdG9vIG1hbnkgZXJyb3JzLCBwcmV0ZW5kIGVuZC1vZi1maWxlICovCisJZG9faXQgPSBGQUxTRTsKKyAgICB9CisgICAgZ2V0X3lhbmtfcmVnaXN0ZXIoKnN0cisrLCBGQUxTRSk7CisgICAgaWYgKCFmb3JjZSAmJiB5X2N1cnJlbnQtPnlfYXJyYXkgIT0gTlVMTCkKKwlkb19pdCA9IEZBTFNFOworICAgIHNpemUgPSAwOworICAgIGxpbWl0ID0gMTAwOwkvKiBPcHRpbWl6ZWQgZm9yIHJlZ2lzdGVycyBjb250YWluaW5nIDw9IDEwMCBsaW5lcyAqLworICAgIGlmIChkb19pdCkKKyAgICB7CisJaWYgKHNldF9wcmV2KQorCSAgICB5X3ByZXZpb3VzID0geV9jdXJyZW50OworCXZpbV9mcmVlKHlfY3VycmVudC0+eV9hcnJheSk7CisJYXJyYXkgPSB5X2N1cnJlbnQtPnlfYXJyYXkgPQorCQkgICAgICAgKGNoYXJfdSAqKilhbGxvYygodW5zaWduZWQpKGxpbWl0ICogc2l6ZW9mKGNoYXJfdSAqKSkpOworCXN0ciA9IHNraXB3aGl0ZShzdHIpOworCWlmIChTVFJOQ01QKHN0ciwgIkNIQVIiLCA0KSA9PSAwKQorCSAgICB5X2N1cnJlbnQtPnlfdHlwZSA9IE1DSEFSOworI2lmZGVmIEZFQVRfVklTVUFMCisJZWxzZSBpZiAoU1RSTkNNUChzdHIsICJCTE9DSyIsIDUpID09IDApCisJICAgIHlfY3VycmVudC0+eV90eXBlID0gTUJMT0NLOworI2VuZGlmCisJZWxzZQorCSAgICB5X2N1cnJlbnQtPnlfdHlwZSA9IE1MSU5FOworCS8qIGdldCB0aGUgYmxvY2sgd2lkdGg7IGlmIGl0J3MgbWlzc2luZyB3ZSBnZXQgYSB6ZXJvLCB3aGljaCBpcyBPSyAqLworCXN0ciA9IHNraXB3aGl0ZShza2lwdG93aGl0ZShzdHIpKTsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCXlfY3VycmVudC0+eV93aWR0aCA9IGdldGRpZ2l0cygmc3RyKTsKKyNlbHNlCisJKHZvaWQpZ2V0ZGlnaXRzKCZzdHIpOworI2VuZGlmCisgICAgfQorCisgICAgd2hpbGUgKCEoZW9mID0gdmltaW5mb19yZWFkbGluZSh2aXJwKSkKKwkJICAgICYmICh2aXJwLT52aXJfbGluZVswXSA9PSBUQUIgfHwgdmlycC0+dmlyX2xpbmVbMF0gPT0gJzwnKSkKKyAgICB7CisJaWYgKGRvX2l0KQorCXsKKwkgICAgaWYgKHNpemUgPj0gbGltaXQpCisJICAgIHsKKwkJeV9jdXJyZW50LT55X2FycmF5ID0gKGNoYXJfdSAqKikKKwkJCSAgICAgIGFsbG9jKCh1bnNpZ25lZCkobGltaXQgKiAyICogc2l6ZW9mKGNoYXJfdSAqKSkpOworCQlmb3IgKGkgPSAwOyBpIDwgbGltaXQ7IGkrKykKKwkJICAgIHlfY3VycmVudC0+eV9hcnJheVtpXSA9IGFycmF5W2ldOworCQl2aW1fZnJlZShhcnJheSk7CisJCWxpbWl0ICo9IDI7CisJCWFycmF5ID0geV9jdXJyZW50LT55X2FycmF5OworCSAgICB9CisJICAgIHN0ciA9IHZpbWluZm9fcmVhZHN0cmluZyh2aXJwLCAxLCBUUlVFKTsKKwkgICAgaWYgKHN0ciAhPSBOVUxMKQorCQlhcnJheVtzaXplKytdID0gc3RyOworCSAgICBlbHNlCisJCWRvX2l0ID0gRkFMU0U7CisJfQorICAgIH0KKyAgICBpZiAoZG9faXQpCisgICAgeworCWlmIChzaXplID09IDApCisJeworCSAgICB2aW1fZnJlZShhcnJheSk7CisJICAgIHlfY3VycmVudC0+eV9hcnJheSA9IE5VTEw7CisJfQorCWVsc2UgaWYgKHNpemUgPCBsaW1pdCkKKwl7CisJICAgIHlfY3VycmVudC0+eV9hcnJheSA9CisJCQkoY2hhcl91ICoqKWFsbG9jKCh1bnNpZ25lZCkoc2l6ZSAqIHNpemVvZihjaGFyX3UgKikpKTsKKwkgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJeV9jdXJyZW50LT55X2FycmF5W2ldID0gYXJyYXlbaV07CisJICAgIHZpbV9mcmVlKGFycmF5KTsKKwl9CisJeV9jdXJyZW50LT55X3NpemUgPSBzaXplOworICAgIH0KKyAgICByZXR1cm4gZW9mOworfQorCisgICAgdm9pZAord3JpdGVfdmltaW5mb19yZWdpc3RlcnMoZnApCisgICAgRklMRSAgICAqZnA7Cit7CisgICAgaW50CSAgICBpLCBqOworICAgIGNoYXJfdSAgKnR5cGU7CisgICAgY2hhcl91ICBjOworICAgIGludAkgICAgbnVtX2xpbmVzOworICAgIGludAkgICAgbWF4X251bV9saW5lczsKKyAgICBpbnQJICAgIG1heF9rYnl0ZTsKKyAgICBsb25nICAgIGxlbjsKKworICAgIGZwcmludGYoZnAsIF8oIlxuIyBSZWdpc3RlcnM6XG4iKSk7CisKKyAgICAvKiBHZXQgJzwnIHZhbHVlLCB1c2Ugb2xkICciJyB2YWx1ZSBpZiAnPCcgaXMgbm90IGZvdW5kLiAqLworICAgIG1heF9udW1fbGluZXMgPSBnZXRfdmltaW5mb19wYXJhbWV0ZXIoJzwnKTsKKyAgICBpZiAobWF4X251bV9saW5lcyA8IDApCisJbWF4X251bV9saW5lcyA9IGdldF92aW1pbmZvX3BhcmFtZXRlcignIicpOworICAgIGlmIChtYXhfbnVtX2xpbmVzID09IDApCisJcmV0dXJuOworICAgIG1heF9rYnl0ZSA9IGdldF92aW1pbmZvX3BhcmFtZXRlcigncycpOworICAgIGlmIChtYXhfa2J5dGUgPT0gMCkKKwlyZXR1cm47CisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9SRUdJU1RFUlM7IGkrKykKKyAgICB7CisJaWYgKHlfcmVnc1tpXS55X2FycmF5ID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisJLyogU2tpcCAnKicvJysnIHJlZ2lzdGVyLCB3ZSBkb24ndCB3YW50IHRoZW0gYmFjayBuZXh0IHRpbWUgKi8KKwlpZiAoaSA9PSBTVEFSX1JFR0lTVEVSIHx8IGkgPT0gUExVU19SRUdJU1RFUikKKwkgICAgY29udGludWU7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0RORAorCS8qIE5laXRoZXIgZG8gd2Ugd2FudCB0aGUgJ34nIHJlZ2lzdGVyICovCisJaWYgKGkgPT0gVElMREVfUkVHSVNURVIpCisJICAgIGNvbnRpbnVlOworI2VuZGlmCisJbnVtX2xpbmVzID0geV9yZWdzW2ldLnlfc2l6ZTsKKwlpZiAobWF4X2tieXRlID4gMCkKKwl7CisJICAgIC8qIFNraXAgcmVnaXN0ZXIgaWYgdGhlcmUgaXMgbW9yZSB0ZXh0IHRoYW4gdGhlIG1heGltdW0gc2l6ZS4gKi8KKwkgICAgbGVuID0gMDsKKwkgICAgZm9yIChqID0gMDsgaiA8IG51bV9saW5lczsgaisrKQorCQlsZW4gKz0gU1RSTEVOKHlfcmVnc1tpXS55X2FycmF5W2pdKSArIDFMOworCSAgICBpZiAobGVuID4gKGxvbmcpbWF4X2tieXRlICogMTAyNEwpCisJCWNvbnRpbnVlOworCX0KKworCXN3aXRjaCAoeV9yZWdzW2ldLnlfdHlwZSkKKwl7CisJICAgIGNhc2UgTUxJTkU6CisJCXR5cGUgPSAoY2hhcl91ICopIkxJTkUiOworCQlicmVhazsKKwkgICAgY2FzZSBNQ0hBUjoKKwkJdHlwZSA9IChjaGFyX3UgKikiQ0hBUiI7CisJCWJyZWFrOworI2lmZGVmIEZFQVRfVklTVUFMCisJICAgIGNhc2UgTUJMT0NLOgorCQl0eXBlID0gKGNoYXJfdSAqKSJCTE9DSyI7CisJCWJyZWFrOworI2VuZGlmCisJICAgIGRlZmF1bHQ6CisJCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIkU1NzQ6IFVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIpLAorCQkgICAgeV9yZWdzW2ldLnlfdHlwZSk7CisJCWVtc2coSU9idWZmKTsKKwkJdHlwZSA9IChjaGFyX3UgKikiTElORSI7CisJCWJyZWFrOworCX0KKwlpZiAoeV9wcmV2aW91cyA9PSAmeV9yZWdzW2ldKQorCSAgICBmcHJpbnRmKGZwLCAiXCIiKTsKKwljID0gZ2V0X3JlZ2lzdGVyX25hbWUoaSk7CisJZnByaW50ZihmcCwgIlwiJWNcdCVzXHQlZFxuIiwgYywgdHlwZSwKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQkgICAgKGludCl5X3JlZ3NbaV0ueV93aWR0aAorI2Vsc2UKKwkJICAgIDAKKyNlbmRpZgorCQkgICAgKTsKKworCS8qIElmIG1heF9udW1fbGluZXMgPCAwLCB0aGVuIHdlIHNhdmUgQUxMIHRoZSBsaW5lcyBpbiB0aGUgcmVnaXN0ZXIgKi8KKwlpZiAobWF4X251bV9saW5lcyA+IDAgJiYgbnVtX2xpbmVzID4gbWF4X251bV9saW5lcykKKwkgICAgbnVtX2xpbmVzID0gbWF4X251bV9saW5lczsKKwlmb3IgKGogPSAwOyBqIDwgbnVtX2xpbmVzOyBqKyspCisJeworCSAgICBwdXRjKCdcdCcsIGZwKTsKKwkgICAgdmltaW5mb193cml0ZXN0cmluZyhmcCwgeV9yZWdzW2ldLnlfYXJyYXlbal0pOworCX0KKyAgICB9Cit9CisjZW5kaWYgLyogRkVBVF9WSU1JTkZPICovCisKKyNpZiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFNFTEVDVElPTiAvIFBSSU1BUlkgKCcqJykKKyAqCisgKiBUZXh0IHNlbGVjdGlvbiBzdHVmZiB0aGF0IHVzZXMgdGhlIEdVSSBzZWxlY3Rpb24gcmVnaXN0ZXIgJyonLiAgV2hlbiB1c2luZyBhCisgKiBHVUkgdGhpcyBtYXkgYmUgdGV4dCBmcm9tIGFub3RoZXIgd2luZG93LCBvdGhlcndpc2UgaXQgaXMgdGhlIGxhc3QgdGV4dCB3ZQorICogaGFkIGhpZ2hsaWdodGVkIHdpdGggVklzdWFsIG1vZGUuICBXaXRoIG1vdXNlIHN1cHBvcnQsIGNsaWNraW5nIHRoZSBtaWRkbGUKKyAqIGJ1dHRvbiBwZXJmb3JtcyB0aGUgcGFzdGUsIG90aGVyd2lzZSB5b3Ugd2lsbCBuZWVkIHRvIGRvIDwiKnA+LiAiCisgKiBJZiBub3QgdW5kZXIgWCwgaXQgaXMgc3lub255bW91cyB3aXRoIHRoZSBjbGlwYm9hcmQgcmVnaXN0ZXIgJysnLgorICoKKyAqIFggQ0xJUEJPQVJEICgnKycpCisgKgorICogVGV4dCBzZWxlY3Rpb24gc3R1ZmYgdGhhdCB1c2VzIHRoZSBHVUkgY2xpcGJvYXJkIHJlZ2lzdGVyICcrJy4KKyAqIFVuZGVyIFgsIHRoaXMgbWF0Y2hlcyB0aGUgc3RhbmRhcmQgY3V0L3Bhc3RlIGJ1ZmZlciBDTElQQk9BUkQgc2VsZWN0aW9uLgorICogSXQgd2lsbCBiZSB1c2VkIGZvciB1bm5hbWVkIGN1dC9wYXN0aW5nIGlzICdjbGlwYm9hcmQnIGNvbnRhaW5zICJ1bm5hbWVkIiwKKyAqIG90aGVyd2lzZSB5b3Ugd2lsbCBuZWVkIHRvIGRvIDwiK3A+LiAiCisgKiBJZiBub3QgdW5kZXIgWCwgaXQgaXMgc3lub255bW91cyB3aXRoIHRoZSBzZWxlY3Rpb24gcmVnaXN0ZXIgJyonLgorICovCisKKy8qCisgKiBSb3V0aW5lIHRvIGV4cG9ydCBhbnkgZmluYWwgWCBzZWxlY3Rpb24gd2UgaGFkIHRvIHRoZSBlbnZpcm9ubWVudAorICogc28gdGhhdCB0aGUgdGV4dCBpcyBzdGlsbCBhdmFpbGFibGUgYWZ0ZXIgdmltIGhhcyBleGl0ZWQuIFggc2VsZWN0aW9ucworICogb25seSBleGlzdCB3aGlsZSB0aGUgb3duaW5nIGFwcGxpY2F0aW9uIGV4aXN0cywgc28gd2Ugd3JpdGUgdG8gdGhlCisgKiBwZXJtYW5lbnQgKHdoaWxlIFggcnVucykgc3RvcmUgQ1VUX0JVRkZFUjAuCisgKiBEdW1wIHRoZSBDTElQQk9BUkQgc2VsZWN0aW9uIGlmIHdlIG93biBpdCAoaXQncyBsb2dpY2FsbHkgdGhlIG1vcmUKKyAqICdwZXJtYW5lbnQnIG9mIHRoZSB0d28pLCBvdGhlcndpc2UgdGhlIFBSSU1BUlkgb25lLgorICogRm9yIG5vdywgdXNlIGEgaGFyZC1jb2RlZCBzYW5pdHkgbGltaXQgb2YgMU1iIG9mIGRhdGEuCisgKi8KKyNpZiBkZWZpbmVkKEZFQVRfWDExKSAmJiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKQorICAgIHZvaWQKK3gxMV9leHBvcnRfZmluYWxfc2VsZWN0aW9uKCkKK3sKKyAgICBEaXNwbGF5CSpkcHk7CisgICAgY2hhcl91CSpzdHIgPSBOVUxMOworICAgIGxvbmdfdQlsZW4gPSAwOworICAgIGludAkJbW90aW9uX3R5cGUgPSAtMTsKKworIyBpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlKQorCWRweSA9IFhfRElTUExBWTsKKyAgICBlbHNlCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfWENMSVBCT0FSRAorCWRweSA9IHh0ZXJtX2RweTsKKyMgZWxzZQorCXJldHVybjsKKyMgZW5kaWYKKworICAgIC8qIEdldCBzZWxlY3Rpb24gdG8gZXhwb3J0ICovCisgICAgaWYgKGNsaXBfcGx1cy5vd25lZCkKKwltb3Rpb25fdHlwZSA9IGNsaXBfY29udmVydF9zZWxlY3Rpb24oJnN0ciwgJmxlbiwgJmNsaXBfcGx1cyk7CisgICAgZWxzZSBpZiAoY2xpcF9zdGFyLm93bmVkKQorCW1vdGlvbl90eXBlID0gY2xpcF9jb252ZXJ0X3NlbGVjdGlvbigmc3RyLCAmbGVuLCAmY2xpcF9zdGFyKTsKKworICAgIC8qIENoZWNrIGl0J3MgT0sgKi8KKyAgICBpZiAoZHB5ICE9IE5VTEwgJiYgc3RyICE9IE5VTEwgJiYgbW90aW9uX3R5cGUgPj0gMAorCQkJCQkgICAgICAgJiYgbGVuIDwgMTAyNCoxMDI0ICYmIGxlbiA+IDApCisgICAgeworCVhTdG9yZUJ1ZmZlcihkcHksIChjaGFyICopc3RyLCAoaW50KWxlbiwgMCk7CisJWEZsdXNoKGRweSk7CisgICAgfQorCisgICAgdmltX2ZyZWUoc3RyKTsKK30KKyNlbmRpZgorCisgICAgdm9pZAorY2xpcF9mcmVlX3NlbGVjdGlvbihjYmQpCisgICAgVmltQ2xpcGJvYXJkCSpjYmQ7Cit7CisgICAgc3RydWN0IHlhbmtyZWcgKnlfcHRyID0geV9jdXJyZW50OworCisgICAgaWYgKGNiZCA9PSAmY2xpcF9wbHVzKQorCXlfY3VycmVudCA9ICZ5X3JlZ3NbUExVU19SRUdJU1RFUl07CisgICAgZWxzZQorCXlfY3VycmVudCA9ICZ5X3JlZ3NbU1RBUl9SRUdJU1RFUl07CisgICAgZnJlZV95YW5rX2FsbCgpOworICAgIHlfY3VycmVudC0+eV9zaXplID0gMDsKKyAgICB5X2N1cnJlbnQgPSB5X3B0cjsKK30KKworLyoKKyAqIEdldCB0aGUgc2VsZWN0ZWQgdGV4dCBhbmQgcHV0IGl0IGluIHRoZSBndWkgc2VsZWN0aW9uIHJlZ2lzdGVyICcqJyBvciAnKycuCisgKi8KKyAgICB2b2lkCitjbGlwX2dldF9zZWxlY3Rpb24oY2JkKQorICAgIFZpbUNsaXBib2FyZAkqY2JkOworeworICAgIHN0cnVjdCB5YW5rcmVnICpvbGRfeV9wcmV2aW91cywgKm9sZF95X2N1cnJlbnQ7CisgICAgcG9zX1QJb2xkX2N1cnNvcjsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIHBvc19UCW9sZF92aXN1YWw7CisgICAgaW50CQlvbGRfdmlzdWFsX21vZGU7CisjZW5kaWYKKyAgICBjb2xucl9UCW9sZF9jdXJzd2FudDsKKyAgICBpbnQJCW9sZF9zZXRfY3Vyc3dhbnQ7CisgICAgcG9zX1QJb2xkX29wX3N0YXJ0LCBvbGRfb3BfZW5kOworICAgIG9wYXJnX1QJb2E7CisgICAgY21kYXJnX1QJY2E7CisKKyAgICBpZiAoY2JkLT5vd25lZCkKKyAgICB7CisJaWYgKChjYmQgPT0gJmNsaXBfcGx1cyAmJiB5X3JlZ3NbUExVU19SRUdJU1RFUl0ueV9hcnJheSAhPSBOVUxMKQorCQl8fCAoY2JkID09ICZjbGlwX3N0YXIgJiYgeV9yZWdzW1NUQVJfUkVHSVNURVJdLnlfYXJyYXkgIT0gTlVMTCkpCisJICAgIHJldHVybjsKKworCS8qIEdldCB0aGUgdGV4dCBiZXR3ZWVuIGNsaXBfc3Rhci5zdGFydCAmIGNsaXBfc3Rhci5lbmQgKi8KKwlvbGRfeV9wcmV2aW91cyA9IHlfcHJldmlvdXM7CisJb2xkX3lfY3VycmVudCA9IHlfY3VycmVudDsKKwlvbGRfY3Vyc29yID0gY3Vyd2luLT53X2N1cnNvcjsKKwlvbGRfY3Vyc3dhbnQgPSBjdXJ3aW4tPndfY3Vyc3dhbnQ7CisJb2xkX3NldF9jdXJzd2FudCA9IGN1cndpbi0+d19zZXRfY3Vyc3dhbnQ7CisJb2xkX29wX3N0YXJ0ID0gY3VyYnVmLT5iX29wX3N0YXJ0OworCW9sZF9vcF9lbmQgPSBjdXJidWYtPmJfb3BfZW5kOworI2lmZGVmIEZFQVRfVklTVUFMCisJb2xkX3Zpc3VhbCA9IFZJc3VhbDsKKwlvbGRfdmlzdWFsX21vZGUgPSBWSXN1YWxfbW9kZTsKKyNlbmRpZgorCWNsZWFyX29wYXJnKCZvYSk7CisJb2EucmVnbmFtZSA9IChjYmQgPT0gJmNsaXBfcGx1cyA/ICcrJyA6ICcqJyk7CisJb2Eub3BfdHlwZSA9IE9QX1lBTks7CisJdmltX21lbXNldCgmY2EsIDAsIHNpemVvZihjYSkpOworCWNhLm9hcCA9ICZvYTsKKwljYS5jbWRjaGFyID0gJ3knOworCWNhLmNvdW50MSA9IDE7CisJY2EucmV0dmFsID0gQ0FfTk9fQURKX09QX0VORDsKKwlkb19wZW5kaW5nX29wZXJhdG9yKCZjYSwgMCwgVFJVRSk7CisJeV9wcmV2aW91cyA9IG9sZF95X3ByZXZpb3VzOworCXlfY3VycmVudCA9IG9sZF95X2N1cnJlbnQ7CisJY3Vyd2luLT53X2N1cnNvciA9IG9sZF9jdXJzb3I7CisJY3Vyd2luLT53X2N1cnN3YW50ID0gb2xkX2N1cnN3YW50OworCWN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBvbGRfc2V0X2N1cnN3YW50OworCWN1cmJ1Zi0+Yl9vcF9zdGFydCA9IG9sZF9vcF9zdGFydDsKKwljdXJidWYtPmJfb3BfZW5kID0gb2xkX29wX2VuZDsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCVZJc3VhbCA9IG9sZF92aXN1YWw7CisJVklzdWFsX21vZGUgPSBvbGRfdmlzdWFsX21vZGU7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwljbGlwX2ZyZWVfc2VsZWN0aW9uKGNiZCk7CisKKwkvKiBUcnkgdG8gZ2V0IHNlbGVjdGVkIHRleHQgZnJvbSBhbm90aGVyIHdpbmRvdyAqLworCWNsaXBfZ2VuX3JlcXVlc3Rfc2VsZWN0aW9uKGNiZCk7CisgICAgfQorfQorCisvKiBDb252ZXJ0IGZyb20gdGhlIEdVSSBzZWxlY3Rpb24gc3RyaW5nIGludG8gdGhlICcqJy8nKycgcmVnaXN0ZXIgKi8KKyAgICB2b2lkCitjbGlwX3lhbmtfc2VsZWN0aW9uKHR5cGUsIHN0ciwgbGVuLCBjYmQpCisgICAgaW50CQl0eXBlOworICAgIGNoYXJfdQkqc3RyOworICAgIGxvbmcJbGVuOworICAgIFZpbUNsaXBib2FyZCAqY2JkOworeworICAgIHN0cnVjdCB5YW5rcmVnICp5X3B0cjsKKworICAgIGlmIChjYmQgPT0gJmNsaXBfcGx1cykKKwl5X3B0ciA9ICZ5X3JlZ3NbUExVU19SRUdJU1RFUl07CisgICAgZWxzZQorCXlfcHRyID0gJnlfcmVnc1tTVEFSX1JFR0lTVEVSXTsKKworICAgIGNsaXBfZnJlZV9zZWxlY3Rpb24oY2JkKTsKKworICAgIHN0cl90b19yZWcoeV9wdHIsIHR5cGUsIHN0ciwgbGVuLCAwTCk7Cit9CisKKy8qCisgKiBDb252ZXJ0IHRoZSAnKicvJysnIHJlZ2lzdGVyIGludG8gYSBHVUkgc2VsZWN0aW9uIHN0cmluZyByZXR1cm5lZCBpbiAqc3RyCisgKiB3aXRoIGxlbmd0aCAqbGVuLgorICogUmV0dXJucyB0aGUgbW90aW9uIHR5cGUsIG9yIC0xIGZvciBmYWlsdXJlLgorICovCisgICAgaW50CitjbGlwX2NvbnZlcnRfc2VsZWN0aW9uKHN0ciwgbGVuLCBjYmQpCisgICAgY2hhcl91CSoqc3RyOworICAgIGxvbmdfdQkqbGVuOworICAgIFZpbUNsaXBib2FyZCAqY2JkOworeworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWxudW07CisgICAgaW50CQlpLCBqOworICAgIGludF91CWVvbHNpemU7CisgICAgc3RydWN0IHlhbmtyZWcgKnlfcHRyOworCisgICAgaWYgKGNiZCA9PSAmY2xpcF9wbHVzKQorCXlfcHRyID0gJnlfcmVnc1tQTFVTX1JFR0lTVEVSXTsKKyAgICBlbHNlCisJeV9wdHIgPSAmeV9yZWdzW1NUQVJfUkVHSVNURVJdOworCisjaWZkZWYgVVNFX0NSTkwKKyAgICBlb2xzaXplID0gMjsKKyNlbHNlCisgICAgZW9sc2l6ZSA9IDE7CisjZW5kaWYKKworICAgICpzdHIgPSBOVUxMOworICAgICpsZW4gPSAwOworICAgIGlmICh5X3B0ci0+eV9hcnJheSA9PSBOVUxMKQorCXJldHVybiAtMTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB5X3B0ci0+eV9zaXplOyBpKyspCisJKmxlbiArPSAobG9uZ191KVNUUkxFTih5X3B0ci0+eV9hcnJheVtpXSkgKyBlb2xzaXplOworCisgICAgLyoKKyAgICAgKiBEb24ndCB3YW50IG5ld2xpbmUgY2hhcmFjdGVyIGF0IGVuZCBvZiBsYXN0IGxpbmUgaWYgd2UncmUgaW4gTUNIQVIgbW9kZS4KKyAgICAgKi8KKyAgICBpZiAoeV9wdHItPnlfdHlwZSA9PSBNQ0hBUiAmJiAqbGVuID49IGVvbHNpemUpCisJKmxlbiAtPSBlb2xzaXplOworCisgICAgcCA9ICpzdHIgPSBsYWxsb2MoKmxlbiArIDEsIFRSVUUpOwkvKiBhZGQgb25lIHRvIGF2b2lkIHplcm8gKi8KKyAgICBpZiAocCA9PSBOVUxMKQorCXJldHVybiAtMTsKKyAgICBsbnVtID0gMDsKKyAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IChpbnQpKmxlbjsgaSsrLCBqKyspCisgICAgeworCWlmICh5X3B0ci0+eV9hcnJheVtsbnVtXVtqXSA9PSAnXG4nKQorCSAgICBwW2ldID0gTlVMOworCWVsc2UgaWYgKHlfcHRyLT55X2FycmF5W2xudW1dW2pdID09IE5VTCkKKwl7CisjaWZkZWYgVVNFX0NSTkwKKwkgICAgcFtpKytdID0gJ1xyJzsKKyNlbmRpZgorI2lmZGVmIFVTRV9DUgorCSAgICBwW2ldID0gJ1xyJzsKKyNlbHNlCisJICAgIHBbaV0gPSAnXG4nOworI2VuZGlmCisJICAgIGxudW0rKzsKKwkgICAgaiA9IC0xOworCX0KKwllbHNlCisJICAgIHBbaV0gPSB5X3B0ci0+eV9hcnJheVtsbnVtXVtqXTsKKyAgICB9CisgICAgcmV0dXJuIHlfcHRyLT55X3R5cGU7Cit9CisKKworIyBpZiBkZWZpbmVkKEZFQVRfVklTVUFMKSB8fCBkZWZpbmVkKEZFQVRfRVZBTCkKKy8qCisgKiBJZiB3ZSBoYXZlIHdyaXR0ZW4gdG8gYSBjbGlwYm9hcmQgcmVnaXN0ZXIsIHNlbmQgdGhlIHRleHQgdG8gdGhlIGNsaXBib2FyZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCittYXlfc2V0X3NlbGVjdGlvbigpCit7CisgICAgaWYgKHlfY3VycmVudCA9PSAmKHlfcmVnc1tTVEFSX1JFR0lTVEVSXSkgJiYgY2xpcF9zdGFyLmF2YWlsYWJsZSkKKyAgICB7CisJY2xpcF9vd25fc2VsZWN0aW9uKCZjbGlwX3N0YXIpOworCWNsaXBfZ2VuX3NldF9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7CisgICAgfQorICAgIGVsc2UgaWYgKHlfY3VycmVudCA9PSAmKHlfcmVnc1tQTFVTX1JFR0lTVEVSXSkgJiYgY2xpcF9wbHVzLmF2YWlsYWJsZSkKKyAgICB7CisJY2xpcF9vd25fc2VsZWN0aW9uKCZjbGlwX3BsdXMpOworCWNsaXBfZ2VuX3NldF9zZWxlY3Rpb24oJmNsaXBfcGx1cyk7CisgICAgfQorfQorIyBlbmRpZgorCisjZW5kaWYgLyogRkVBVF9DTElQQk9BUkQgfHwgUFJPVE8gKi8KKworCisjaWYgZGVmaW5lZChGRUFUX0RORCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXBsYWNlIHRoZSBjb250ZW50cyBvZiB0aGUgJ34nIHJlZ2lzdGVyIHdpdGggc3RyLgorICovCisgICAgdm9pZAorZG5kX3lhbmtfZHJhZ19kYXRhKHN0ciwgbGVuKQorICAgIGNoYXJfdQkqc3RyOworICAgIGxvbmcJbGVuOworeworICAgIHN0cnVjdCB5YW5rcmVnICpjdXJyOworCisgICAgY3VyciA9IHlfY3VycmVudDsKKyAgICB5X2N1cnJlbnQgPSAmeV9yZWdzW1RJTERFX1JFR0lTVEVSXTsKKyAgICBmcmVlX3lhbmtfYWxsKCk7CisgICAgc3RyX3RvX3JlZyh5X2N1cnJlbnQsIE1DSEFSLCBzdHIsIGxlbiwgMEwpOworICAgIHlfY3VycmVudCA9IGN1cnI7Cit9CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmV0dXJuIHRoZSB0eXBlIG9mIGEgcmVnaXN0ZXIuCisgKiBVc2VkIGZvciBnZXRyZWd0eXBlKCkKKyAqIFJldHVybnMgTUFVVE8gZm9yIGVycm9yLgorICovCisgICAgY2hhcl91CitnZXRfcmVnX3R5cGUocmVnbmFtZSwgcmVnbGVuKQorICAgIGludAkgICAgcmVnbmFtZTsKKyAgICBsb25nICAgICpyZWdsZW47Cit7CisgICAgc3dpdGNoIChyZWduYW1lKQorICAgIHsKKwljYXNlICclJzoJCS8qIGZpbGUgbmFtZSAqLworCWNhc2UgJyMnOgkJLyogYWx0ZXJuYXRlIGZpbGUgbmFtZSAqLworCWNhc2UgJz0nOgkJLyogZXhwcmVzc2lvbiAqLworCWNhc2UgJzonOgkJLyogbGFzdCBjb21tYW5kIGxpbmUgKi8KKwljYXNlICcvJzoJCS8qIGxhc3Qgc2VhcmNoLXBhdHRlcm4gKi8KKwljYXNlICcuJzoJCS8qIGxhc3QgaW5zZXJ0ZWQgdGV4dCAqLworI2lmZGVmIEZFQVRfU0VBUkNIUEFUSAorCWNhc2UgQ3RybF9GOgkJLyogRmlsZW5hbWUgdW5kZXIgY3Vyc29yICovCisJY2FzZSBDdHJsX1A6CQkvKiBQYXRoIHVuZGVyIGN1cnNvciwgZXhwYW5kIHZpYSAicGF0aCIgKi8KKyNlbmRpZgorCWNhc2UgQ3RybF9XOgkJLyogd29yZCB1bmRlciBjdXJzb3IgKi8KKwljYXNlIEN0cmxfQToJCS8qIFdPUkQgKG1uZW1vbmljIEFsbCkgdW5kZXIgY3Vyc29yICovCisJY2FzZSAnXyc6CQkvKiBibGFjayBob2xlOiBhbHdheXMgZW1wdHkgKi8KKwkgICAgcmV0dXJuIE1DSEFSOworICAgIH0KKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgcmVnbmFtZSA9IG1heV9nZXRfc2VsZWN0aW9uKHJlZ25hbWUpOworI2VuZGlmCisKKyAgICAvKiBTaG91bGQgd2UgY2hlY2sgZm9yIGEgdmFsaWQgbmFtZT8gKi8KKyAgICBnZXRfeWFua19yZWdpc3RlcihyZWduYW1lLCBGQUxTRSk7CisKKyAgICBpZiAoeV9jdXJyZW50LT55X2FycmF5ICE9IE5VTEwpCisgICAgeworI2lmZGVmIEZFQVRfVklTVUFMCisJaWYgKHJlZ2xlbiAhPSBOVUxMICYmIHlfY3VycmVudC0+eV90eXBlID09IE1CTE9DSykKKwkgICAgKnJlZ2xlbiA9IHlfY3VycmVudC0+eV93aWR0aDsKKyNlbmRpZgorCXJldHVybiB5X2N1cnJlbnQtPnlfdHlwZTsKKyAgICB9CisgICAgcmV0dXJuIE1BVVRPOworfQorCisvKgorICogUmV0dXJuIHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIGFzIGEgc2luZ2xlIGFsbG9jYXRlZCBzdHJpbmcuCisgKiBVc2VkIGZvciAiQHIiIGluIGV4cHJlc3Npb25zIGFuZCBmb3IgZ2V0cmVnKCkuCisgKiBSZXR1cm5zIE5VTEwgZm9yIGVycm9yLgorICovCisgICAgY2hhcl91ICoKK2dldF9yZWdfY29udGVudHMocmVnbmFtZSwgYWxsb3dleHByKQorICAgIGludAkJcmVnbmFtZTsKKyAgICBpbnQJCWFsbG93ZXhwcjsJLyogYWxsb3cgIj0iIHJlZ2lzdGVyLiAqLworeworICAgIGxvbmcJaTsKKyAgICBjaGFyX3UJKnJldHZhbDsKKyAgICBpbnQJCWFsbG9jYXRlZDsKKyAgICBsb25nCWxlbjsKKworICAgIC8qIERvbid0IGFsbG93IHVzaW5nIGFuIGV4cHJlc3Npb24gcmVnaXN0ZXIgaW5zaWRlIGFuIGV4cHJlc3Npb24gKi8KKyAgICBpZiAocmVnbmFtZSA9PSAnPScpCisgICAgeworCWlmIChhbGxvd2V4cHIpCisJICAgIHJldHVybiBnZXRfZXhwcl9saW5lKCk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHJlZ25hbWUgPT0gJ0AnKQkgICAgLyogIkBAIiBpcyB1c2VkIGZvciB1bm5hbWVkIHJlZ2lzdGVyICovCisJcmVnbmFtZSA9ICciJzsKKworICAgIC8qIGNoZWNrIGZvciB2YWxpZCByZWduYW1lICovCisgICAgaWYgKHJlZ25hbWUgIT0gTlVMICYmICF2YWxpZF95YW5rX3JlZyhyZWduYW1lLCBGQUxTRSkpCisJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIHJlZ25hbWUgPSBtYXlfZ2V0X3NlbGVjdGlvbihyZWduYW1lKTsKKyNlbmRpZgorCisgICAgaWYgKGdldF9zcGVjX3JlZyhyZWduYW1lLCAmcmV0dmFsLCAmYWxsb2NhdGVkLCBGQUxTRSkpCisgICAgeworCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisJaWYgKCFhbGxvY2F0ZWQpCisJICAgIHJldHZhbCA9IHZpbV9zdHJzYXZlKHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKKyAgICB9CisKKyAgICBnZXRfeWFua19yZWdpc3RlcihyZWduYW1lLCBGQUxTRSk7CisgICAgaWYgKHlfY3VycmVudC0+eV9hcnJheSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgLyoKKyAgICAgKiBDb21wdXRlIGxlbmd0aCBvZiByZXN1bHRpbmcgc3RyaW5nLgorICAgICAqLworICAgIGxlbiA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IHlfY3VycmVudC0+eV9zaXplOyArK2kpCisgICAgeworCWxlbiArPSAobG9uZylTVFJMRU4oeV9jdXJyZW50LT55X2FycmF5W2ldKTsKKwkvKgorCSAqIEluc2VydCBhIG5ld2xpbmUgYmV0d2VlbiBsaW5lcyBhbmQgYWZ0ZXIgbGFzdCBsaW5lIGlmCisJICogeV90eXBlIGlzIE1MSU5FLgorCSAqLworCWlmICh5X2N1cnJlbnQtPnlfdHlwZSA9PSBNTElORSB8fCBpIDwgeV9jdXJyZW50LT55X3NpemUgLSAxKQorCSAgICArK2xlbjsKKyAgICB9CisKKyAgICByZXR2YWwgPSBsYWxsb2MobGVuICsgMSwgVFJVRSk7CisKKyAgICAvKgorICAgICAqIENvcHkgdGhlIGxpbmVzIG9mIHRoZSB5YW5rIHJlZ2lzdGVyIGludG8gdGhlIHN0cmluZy4KKyAgICAgKi8KKyAgICBpZiAocmV0dmFsICE9IE5VTEwpCisgICAgeworCWxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IHlfY3VycmVudC0+eV9zaXplOyArK2kpCisJeworCSAgICBTVFJDUFkocmV0dmFsICsgbGVuLCB5X2N1cnJlbnQtPnlfYXJyYXlbaV0pOworCSAgICBsZW4gKz0gKGxvbmcpU1RSTEVOKHJldHZhbCArIGxlbik7CisKKwkgICAgLyoKKwkgICAgICogSW5zZXJ0IGEgTkwgYmV0d2VlbiBsaW5lcyBhbmQgYWZ0ZXIgdGhlIGxhc3QgbGluZSBpZiB5X3R5cGUgaXMKKwkgICAgICogTUxJTkUuCisJICAgICAqLworCSAgICBpZiAoeV9jdXJyZW50LT55X3R5cGUgPT0gTUxJTkUgfHwgaSA8IHlfY3VycmVudC0+eV9zaXplIC0gMSkKKwkJcmV0dmFsW2xlbisrXSA9ICdcbic7CisJfQorCXJldHZhbFtsZW5dID0gTlVMOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBTdG9yZSBzdHJpbmcgInN0ciIgaW4gcmVnaXN0ZXIgIm5hbWUiLgorICogIm1heGxlbiIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHVzZSwgLTEgZm9yIGFsbCBieXRlcy4KKyAqIElmICJtdXN0X2FwcGVuZCIgaXMgVFJVRSwgYWx3YXlzIGFwcGVuZCB0byB0aGUgcmVnaXN0ZXIuICBPdGhlcndpc2UgYXBwZW5kCisgKiBpZiAibmFtZSIgaXMgYW4gdXBwZXJjYXNlIGxldHRlci4KKyAqIE5vdGU6ICJtYXhsZW4iIGFuZCAibXVzdF9hcHBlbmQiIGRvbid0IHdvcmsgZm9yIHRoZSAiLyIgcmVnaXN0ZXIuCisgKiBDYXJlZnVsOiAnc3RyJyBpcyBtb2RpZmllZCwgeW91IG1heSBoYXZlIHRvIHVzZSBhIGNvcHkhCisgKiBJZiAic3RyIiBlbmRzIGluICdcbicgb3IgJ1xyJywgdXNlIGxpbmV3aXNlLCBvdGhlcndpc2UgdXNlIGNoYXJhY3Rlcndpc2UuCisgKi8KKyAgICB2b2lkCit3cml0ZV9yZWdfY29udGVudHMobmFtZSwgc3RyLCBtYXhsZW4sIG11c3RfYXBwZW5kKQorICAgIGludAkJbmFtZTsKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBpbnQJCW1heGxlbjsKKyAgICBpbnQJCW11c3RfYXBwZW5kOworeworICAgIHdyaXRlX3JlZ19jb250ZW50c19leChuYW1lLCBzdHIsIG1heGxlbiwgbXVzdF9hcHBlbmQsIE1BVVRPLCAwTCk7Cit9CisKKyAgICB2b2lkCit3cml0ZV9yZWdfY29udGVudHNfZXgobmFtZSwgc3RyLCBtYXhsZW4sIG11c3RfYXBwZW5kLCB5YW5rX3R5cGUsIGJsb2NrX2xlbikKKyAgICBpbnQJCW5hbWU7CisgICAgY2hhcl91CSpzdHI7CisgICAgaW50CQltYXhsZW47CisgICAgaW50CQltdXN0X2FwcGVuZDsKKyAgICBpbnQJCXlhbmtfdHlwZTsKKyAgICBsb25nCWJsb2NrX2xlbjsKK3sKKyAgICBzdHJ1Y3QgeWFua3JlZyAgKm9sZF95X3ByZXZpb3VzLCAqb2xkX3lfY3VycmVudDsKKyAgICBsb25nCSAgICBsZW47CisKKyAgICAvKiBTcGVjaWFsIGNhc2U6ICcvJyBzZWFyY2ggcGF0dGVybiAqLworICAgIGlmIChuYW1lID09ICcvJykKKyAgICB7CisJc2V0X2xhc3Rfc2VhcmNoX3BhdChzdHIsIFJFX1NFQVJDSCwgVFJVRSwgVFJVRSk7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsaWRfeWFua19yZWcobmFtZSwgVFJVRSkpCSAgICAvKiBjaGVjayBmb3IgdmFsaWQgcmVnIG5hbWUgKi8KKyAgICB7CisJRU1TRzIoXygiRTM1NDogSW52YWxpZCByZWdpc3RlciBuYW1lOiAnJXMnIiksIHRyYW5zY2hhcihuYW1lKSk7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmIChuYW1lID09ICdfJykJICAgIC8qIGJsYWNrIGhvbGU6IG5vdGhpbmcgdG8gZG8gKi8KKwlyZXR1cm47CisKKyAgICAvKiBEb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgY3VycmVudCAodW5uYW1lZCkgcmVnaXN0ZXIgKi8KKyAgICBvbGRfeV9wcmV2aW91cyA9IHlfcHJldmlvdXM7CisgICAgb2xkX3lfY3VycmVudCA9IHlfY3VycmVudDsKKworICAgIGdldF95YW5rX3JlZ2lzdGVyKG5hbWUsIFRSVUUpOworICAgIGlmICgheV9hcHBlbmQgJiYgIW11c3RfYXBwZW5kKQorCWZyZWVfeWFua19hbGwoKTsKKyAgICBpZiAobWF4bGVuID49IDApCisJbGVuID0gbWF4bGVuOworICAgIGVsc2UKKwlsZW4gPSAobG9uZylTVFJMRU4oc3RyKTsKKyNpZm5kZWYgRkVBVF9WSVNVQUwKKyAgICAvKiBKdXN0IGluIGNhc2UgLSBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIE1CTE9DSyAqLworICAgIGlmICh5YW5rX3R5cGUgPT0gTUJMT0NLKQorCXlhbmtfdHlwZSA9IE1BVVRPOworI2VuZGlmCisgICAgaWYgKHlhbmtfdHlwZSA9PSBNQVVUTykKKwl5YW5rX3R5cGUgPSAoKGxlbiA+IDAgJiYgKHN0cltsZW4gLSAxXSA9PSAnXG4nIHx8IHN0cltsZW4gLSAxXSA9PSAnXHInKSkKKwkJCQkJCQkgICAgID8gTUxJTkUgOiBNQ0hBUik7CisgICAgc3RyX3RvX3JlZyh5X2N1cnJlbnQsIHlhbmtfdHlwZSwgc3RyLCBsZW4sIGJsb2NrX2xlbik7CisKKyMgaWZkZWYgRkVBVF9DTElQQk9BUkQKKyAgICAvKiBTZW5kIHRleHQgb2YgY2xpcGJvYXJkIHJlZ2lzdGVyIHRvIHRoZSBjbGlwYm9hcmQuICovCisgICAgbWF5X3NldF9zZWxlY3Rpb24oKTsKKyMgZW5kaWYKKworICAgIC8qICc6bGV0IEAiID0gInZhbCInIHNob3VsZCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlICIiIHJlZ2lzdGVyICovCisgICAgaWYgKG5hbWUgIT0gJyInKQorCXlfcHJldmlvdXMgPSBvbGRfeV9wcmV2aW91czsKKyAgICB5X2N1cnJlbnQgPSBvbGRfeV9jdXJyZW50OworfQorI2VuZGlmCS8qIEZFQVRfRVZBTCAqLworCisjaWYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkgfHwgZGVmaW5lZChGRUFUX0VWQUwpCisvKgorICogUHV0IGEgc3RyaW5nIGludG8gYSByZWdpc3Rlci4gIFdoZW4gdGhlIHJlZ2lzdGVyIGlzIG5vdCBlbXB0eSwgdGhlIHN0cmluZworICogaXMgYXBwZW5kZWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3RyX3RvX3JlZyh5X3B0ciwgdHlwZSwgc3RyLCBsZW4sIGJsb2NrbGVuKQorICAgIHN0cnVjdCB5YW5rcmVnCSp5X3B0cjsJCS8qIHBvaW50ZXIgdG8geWFuayByZWdpc3RlciAqLworICAgIGludAkJCXR5cGU7CQkvKiBNQ0hBUiwgTUxJTkUgb3IgTUJMT0NLICovCisgICAgY2hhcl91CQkqc3RyOwkJLyogc3RyaW5nIHRvIHB1dCBpbiByZWdpc3RlciAqLworICAgIGxvbmcJCWxlbjsJCS8qIGxlbmd0aCBvZiBzdHJpbmcgKi8KKyAgICBsb25nCQlibG9ja2xlbjsJLyogd2lkdGggb2YgVmlzdWFsIGJsb2NrICovCit7CisgICAgaW50CQlsbnVtOworICAgIGxvbmcJc3RhcnQ7CisgICAgbG9uZwlpOworICAgIGludAkJZXh0cmE7CisgICAgaW50CQluZXdsaW5lczsJCS8qIG51bWJlciBvZiBsaW5lcyBhZGRlZCAqLworICAgIGludAkJZXh0cmFsaW5lID0gMDsJCS8qIGV4dHJhIGxpbmUgYXQgdGhlIGVuZCAqLworICAgIGludAkJYXBwZW5kID0gRkFMU0U7CQkvKiBhcHBlbmQgdG8gbGFzdCBsaW5lIGluIHJlZ2lzdGVyICovCisgICAgY2hhcl91CSpzOworICAgIGNoYXJfdQkqKnBwOworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgbG9uZwltYXhsZW47CisjZW5kaWYKKworICAgIGlmICh5X3B0ci0+eV9hcnJheSA9PSBOVUxMKQkJLyogTlVMTCBtZWFucyBlbXRweSByZWdpc3RlciAqLworCXlfcHRyLT55X3NpemUgPSAwOworCisgICAgLyoKKyAgICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGxpbmVzIHdpdGhpbiB0aGUgc3RyaW5nCisgICAgICovCisgICAgbmV3bGluZXMgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwlpZiAoc3RyW2ldID09ICdcbicpCisJICAgICsrbmV3bGluZXM7CisgICAgaWYgKHR5cGUgPT0gTUNIQVIgfHwgbGVuID09IDAgfHwgc3RyW2xlbiAtIDFdICE9ICdcbicpCisgICAgeworCWV4dHJhbGluZSA9IDE7CisJKytuZXdsaW5lczsJLyogY291bnQgZXh0cmEgbmV3bGluZSBhdCB0aGUgZW5kICovCisgICAgfQorICAgIGlmICh5X3B0ci0+eV9zaXplID4gMCAmJiB5X3B0ci0+eV90eXBlID09IE1DSEFSKQorICAgIHsKKwlhcHBlbmQgPSBUUlVFOworCS0tbmV3bGluZXM7CS8qIHVuY291bnQgbmV3bGluZSB3aGVuIGFwcGVuZGluZyBmaXJzdCBsaW5lICovCisgICAgfQorCisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBhbiBhcnJheSB0byBob2xkIHRoZSBwb2ludGVycyB0byB0aGUgbmV3IHJlZ2lzdGVyIGxpbmVzLgorICAgICAqIElmIHRoZSByZWdpc3RlciB3YXMgbm90IGVtcHR5LCBtb3ZlIHRoZSBleGlzdGluZyBsaW5lcyB0byB0aGUgbmV3IGFycmF5LgorICAgICAqLworICAgIHBwID0gKGNoYXJfdSAqKilsYWxsb2NfY2xlYXIoKHlfcHRyLT55X3NpemUgKyBuZXdsaW5lcykKKwkJCQkJCSAgICAqIHNpemVvZihjaGFyX3UgKiksIFRSVUUpOworICAgIGlmIChwcCA9PSBOVUxMKQkvKiBvdXQgb2YgbWVtb3J5ICovCisJcmV0dXJuOworICAgIGZvciAobG51bSA9IDA7IGxudW0gPCB5X3B0ci0+eV9zaXplOyArK2xudW0pCisJcHBbbG51bV0gPSB5X3B0ci0+eV9hcnJheVtsbnVtXTsKKyAgICB2aW1fZnJlZSh5X3B0ci0+eV9hcnJheSk7CisgICAgeV9wdHItPnlfYXJyYXkgPSBwcDsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIG1heGxlbiA9IDA7CisjZW5kaWYKKworICAgIC8qCisgICAgICogRmluZCB0aGUgZW5kIG9mIGVhY2ggbGluZSBhbmQgc2F2ZSBpdCBpbnRvIHRoZSBhcnJheS4KKyAgICAgKi8KKyAgICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBsZW4gKyBleHRyYWxpbmU7IHN0YXJ0ICs9IGkgKyAxKQorICAgIHsKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGxlbjsgKytpKQkvKiBmaW5kIHRoZSBlbmQgb2YgdGhlIGxpbmUgKi8KKwkgICAgaWYgKHN0cltpXSA9PSAnXG4nKQorCQlicmVhazsKKwlpIC09IHN0YXJ0OwkJCS8qIGkgaXMgbm93IGxlbmd0aCBvZiBsaW5lICovCisjaWZkZWYgRkVBVF9WSVNVQUwKKwlpZiAoaSA+IG1heGxlbikKKwkgICAgbWF4bGVuID0gaTsKKyNlbmRpZgorCWlmIChhcHBlbmQpCisJeworCSAgICAtLWxudW07CisJICAgIGV4dHJhID0gKGludClTVFJMRU4oeV9wdHItPnlfYXJyYXlbbG51bV0pOworCX0KKwllbHNlCisJICAgIGV4dHJhID0gMDsKKwlzID0gYWxsb2MoKHVuc2lnbmVkKShpICsgZXh0cmEgKyAxKSk7CisJaWYgKHMgPT0gTlVMTCkKKwkgICAgYnJlYWs7CisJaWYgKGV4dHJhKQorCSAgICBtY2hfbWVtbW92ZShzLCB5X3B0ci0+eV9hcnJheVtsbnVtXSwgKHNpemVfdClleHRyYSk7CisJaWYgKGFwcGVuZCkKKwkgICAgdmltX2ZyZWUoeV9wdHItPnlfYXJyYXlbbG51bV0pOworCWlmIChpKQorCSAgICBtY2hfbWVtbW92ZShzICsgZXh0cmEsIHN0ciArIHN0YXJ0LCAoc2l6ZV90KWkpOworCWV4dHJhICs9IGk7CisJc1tleHRyYV0gPSBOVUw7CisJeV9wdHItPnlfYXJyYXlbbG51bSsrXSA9IHM7CisJd2hpbGUgKC0tZXh0cmEgPj0gMCkKKwl7CisJICAgIGlmICgqcyA9PSBOVUwpCisJCSpzID0gJ1xuJzsJICAgIC8qIHJlcGxhY2UgTlVMIHdpdGggbmV3bGluZSAqLworCSAgICArK3M7CisJfQorCWFwcGVuZCA9IEZBTFNFOwkJICAgIC8qIG9ubHkgZmlyc3QgbGluZSBpcyBhcHBlbmRlZCAqLworICAgIH0KKyAgICB5X3B0ci0+eV90eXBlID0gdHlwZTsKKyAgICB5X3B0ci0+eV9zaXplID0gbG51bTsKKyMgaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAodHlwZSA9PSBNQkxPQ0spCisJeV9wdHItPnlfd2lkdGggPSAoYmxvY2tsZW4gPCAwID8gbWF4bGVuIC0gMSA6IGJsb2NrbGVuKTsKKyAgICBlbHNlCisJeV9wdHItPnlfd2lkdGggPSAwOworIyBlbmRpZgorfQorI2VuZGlmIC8qIEZFQVRfQ0xJUEJPQVJEIHx8IEZFQVRfRVZBTCB8fCBQUk9UTyAqLworCisgICAgdm9pZAorY2xlYXJfb3Bhcmcob2FwKQorICAgIG9wYXJnX1QJKm9hcDsKK3sKKyAgICB2aW1fbWVtc2V0KG9hcCwgMCwgc2l6ZW9mKG9wYXJnX1QpKTsKK30KKworc3RhdGljIGxvbmcJbGluZV9jb3VudF9pbmZvIF9fQVJHUygoY2hhcl91ICpsaW5lLCBsb25nICp3YywgbG9uZyBsaW1pdCwgaW50IGVvbF9zaXplKSk7CisKKy8qCisgKiAgQ291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFuZCAid29yZHMiIGluIGEgbGluZS4KKyAqCisgKiAgIldvcmRzIiBhcmUgY291bnRlZCBieSBsb29raW5nIGZvciBib3VuZGFyaWVzIGJldHdlZW4gbm9uLXNwYWNlIGFuZAorICogIHNwYWNlIGNoYXJhY3RlcnMuICAoaXQgc2VlbXMgdG8gcHJvZHVjZSByZXN1bHRzIHRoYXQgbWF0Y2ggJ3djJy4pCisgKgorICogIFJldHVybiB2YWx1ZSBpcyBjaGFyYWN0ZXIgY291bnQ7IHdvcmQgY291bnQgZm9yIHRoZSBsaW5lIGlzIEFEREVECisgKiAgdG8gIip3YyIuCisgKgorICogIFRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgZXhhbWluZSB0aGUgZmlyc3QgImxpbWl0IiBjaGFyYWN0ZXJzIGluIHRoZQorICogIGxpbmUsIHN0b3BwaW5nIGlmIGl0IGVuY291bnRlcnMgYW4gZW5kLW9mLWxpbmUgKE5VTCBieXRlKS4gIEluIHRoYXQKKyAqICBjYXNlLCBlb2xfc2l6ZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjaGFyYWN0ZXIgY291bnQgdG8gYWNjb3VudCBmb3IKKyAqICB0aGUgc2l6ZSBvZiB0aGUgRU9MIGNoYXJhY3Rlci4KKyAqLworICAgIHN0YXRpYyBsb25nCitsaW5lX2NvdW50X2luZm8obGluZSwgd2MsIGxpbWl0LCBlb2xfc2l6ZSkKKyAgICBjaGFyX3UJKmxpbmU7CisgICAgbG9uZwkqd2M7CisgICAgbG9uZwlsaW1pdDsKKyAgICBpbnQJCWVvbF9zaXplOworeworICAgIGxvbmcJaSwgd29yZHMgPSAwOworICAgIGludAkJaXNfd29yZCA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBsaW5lW2ldICYmIGkgPCBsaW1pdDsgaSsrKQorICAgIHsKKwlpZiAoaXNfd29yZCkKKwl7CisJICAgIGlmICh2aW1faXNzcGFjZShsaW5lW2ldKSkKKwkgICAgeworCQl3b3JkcysrOworCQlpc193b3JkID0gMDsKKwkgICAgfQorCX0KKwllbHNlIGlmICghdmltX2lzc3BhY2UobGluZVtpXSkpCisJICAgIGlzX3dvcmQgPSAxOworICAgIH0KKworICAgIGlmIChpc193b3JkKQorCXdvcmRzKys7CisgICAgKndjICs9IHdvcmRzOworCisgICAgLyogQWRkIGVvbF9zaXplIGlmIHRoZSBlbmQgb2YgbGluZSB3YXMgcmVhY2hlZCBiZWZvcmUgaGl0dGluZyBsaW1pdC4gKi8KKyAgICBpZiAoIWxpbmVbaV0gJiYgaSA8IGxpbWl0KQorCWkgKz0gZW9sX3NpemU7CisgICAgcmV0dXJuIGk7Cit9CisKKy8qCisgKiBHaXZlIHNvbWUgaW5mbyBhYm91dCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnNvciAoZm9yICJnIENUUkwtRyIpLgorICogSW4gVmlzdWFsIG1vZGUsIGdpdmUgc29tZSBpbmZvIGFib3V0IHRoZSBzZWxlY3RlZCByZWdpb24uICAoSW4gdGhpcyBjYXNlLAorICogdGhlICpfY291bnRfY3Vyc29yIHZhcmlhYmxlcyBzdG9yZSBydW5uaW5nIHRvdGFscyBmb3IgdGhlIHNlbGVjdGlvbi4pCisgKi8KKyAgICB2b2lkCitjdXJzb3JfcG9zX2luZm8oKQoreworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJYnVmMVsyMF07CisgICAgY2hhcl91CWJ1ZjJbMjBdOworICAgIGxpbmVucl9UCWxudW07CisgICAgbG9uZwljaGFyX2NvdW50ID0gMDsKKyAgICBsb25nCWNoYXJfY291bnRfY3Vyc29yID0gMDsKKyAgICBpbnQJCWVvbF9zaXplOworICAgIGxvbmcJbGFzdF9jaGVjayA9IDEwMDAwMEw7CisgICAgbG9uZwl3b3JkX2NvdW50ID0gMDsKKyAgICBsb25nCXdvcmRfY291bnRfY3Vyc29yID0gMDsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGxvbmcJbGluZV9jb3VudF9zZWxlY3RlZCA9IDA7CisgICAgcG9zX1QJbWluX3BvcywgbWF4X3BvczsKKyAgICBvcGFyZ19UCW9wYXJnOworICAgIHN0cnVjdCBibG9ja19kZWYJYmQ7CisjZW5kaWYKKworICAgIC8qCisgICAgICogQ29tcHV0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlIGluIGNoYXJhY3RlcnMuCisgICAgICovCisgICAgaWYgKGN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZKQorICAgIHsKKwlNU0coXyhub19saW5lc19tc2cpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoZ2V0X2ZpbGVmb3JtYXQoY3VyYnVmKSA9PSBFT0xfRE9TKQorCSAgICBlb2xfc2l6ZSA9IDI7CisJZWxzZQorCSAgICBlb2xfc2l6ZSA9IDE7CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCWlmIChWSXN1YWxfYWN0aXZlKQorCXsKKwkgICAgaWYgKGx0KFZJc3VhbCwgY3Vyd2luLT53X2N1cnNvcikpCisJICAgIHsKKwkJbWluX3BvcyA9IFZJc3VhbDsKKwkJbWF4X3BvcyA9IGN1cndpbi0+d19jdXJzb3I7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCW1pbl9wb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworCQltYXhfcG9zID0gVklzdWFsOworCSAgICB9CisJICAgIGlmICgqcF9zZWwgPT0gJ2UnICYmIG1heF9wb3MuY29sID4gMCkKKwkJLS1tYXhfcG9zLmNvbDsKKworCSAgICBpZiAoVklzdWFsX21vZGUgPT0gQ3RybF9WKQorCSAgICB7CisJCW9wYXJnLmlzX1ZJc3VhbCA9IDE7CisJCW9wYXJnLmJsb2NrX21vZGUgPSBUUlVFOworCQlvcGFyZy5vcF90eXBlID0gT1BfTk9QOworCQlnZXR2Y29scyhjdXJ3aW4sICZtaW5fcG9zLCAmbWF4X3BvcywKKwkJCSZvcGFyZy5zdGFydF92Y29sLCAmb3BhcmcuZW5kX3Zjb2wpOworCQkvKiBTd2FwIHRoZSBzdGFydCwgZW5kIHZjb2wgaWYgbmVlZGVkICovCisJCWlmIChvcGFyZy5lbmRfdmNvbCA8IG9wYXJnLnN0YXJ0X3Zjb2wpCisJCXsKKwkJICAgIG9wYXJnLmVuZF92Y29sICs9IG9wYXJnLnN0YXJ0X3Zjb2w7CisJCSAgICBvcGFyZy5zdGFydF92Y29sID0gb3BhcmcuZW5kX3Zjb2wgLSBvcGFyZy5zdGFydF92Y29sOworCQkgICAgb3BhcmcuZW5kX3Zjb2wgLT0gb3Bhcmcuc3RhcnRfdmNvbDsKKwkJfQorCSAgICB9CisJICAgIGxpbmVfY291bnRfc2VsZWN0ZWQgPSBtYXhfcG9zLmxudW0gLSBtaW5fcG9zLmxudW0gKyAxOworCX0KKyNlbmRpZgorCisJZm9yIChsbnVtID0gMTsgbG51bSA8PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsgKytsbnVtKQorCXsKKwkgICAgLyogQ2hlY2sgZm9yIGEgQ1RSTC1DIGV2ZXJ5IDEwMDAwMCBjaGFyYWN0ZXJzLiAqLworCSAgICBpZiAoY2hhcl9jb3VudCA+IGxhc3RfY2hlY2spCisJICAgIHsKKwkJdWlfYnJlYWtjaGVjaygpOworCQlpZiAoZ290X2ludCkKKwkJICAgIHJldHVybjsKKwkJbGFzdF9jaGVjayA9IGNoYXJfY291bnQgKyAxMDAwMDBMOworCSAgICB9CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCSAgICAvKiBEbyBleHRyYSBwcm9jZXNzaW5nIGZvciBWSXN1YWwgbW9kZS4gKi8KKwkgICAgaWYgKFZJc3VhbF9hY3RpdmUKKwkJICAgICYmIGxudW0gPj0gbWluX3Bvcy5sbnVtICYmIGxudW0gPD0gbWF4X3Bvcy5sbnVtKQorCSAgICB7CisJCXN3aXRjaCAoVklzdWFsX21vZGUpCisJCXsKKwkJICAgIGNhc2UgQ3RybF9WOgorIyBpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCQl2aXJ0dWFsX29wID0gdmlydHVhbF9hY3RpdmUoKTsKKyMgZW5kaWYKKwkJCWJsb2NrX3ByZXAoJm9wYXJnLCAmYmQsIGxudW0sIDApOworIyBpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCQl2aXJ0dWFsX29wID0gTUFZQkU7CisjIGVuZGlmCisJCQljaGFyX2NvdW50X2N1cnNvciArPSBsaW5lX2NvdW50X2luZm8oYmQudGV4dHN0YXJ0LAorCQkJCSZ3b3JkX2NvdW50X2N1cnNvciwgKGxvbmcpYmQudGV4dGxlbiwgZW9sX3NpemUpOworCQkJYnJlYWs7CisJCSAgICBjYXNlICdWJzoKKwkJCWNoYXJfY291bnRfY3Vyc29yICs9IGxpbmVfY291bnRfaW5mbyhtbF9nZXQobG51bSksCisJCQkJJndvcmRfY291bnRfY3Vyc29yLCAobG9uZylNQVhDT0wsIGVvbF9zaXplKTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAndic6CisJCQl7CisJCQkgICAgY29sbnJfVCBzdGFydF9jb2wgPSAobG51bSA9PSBtaW5fcG9zLmxudW0pCisJCQkJCQkJICAgPyBtaW5fcG9zLmNvbCA6IDA7CisJCQkgICAgY29sbnJfVCBlbmRfY29sID0gKGxudW0gPT0gbWF4X3Bvcy5sbnVtKQorCQkJCSAgICAgID8gbWF4X3Bvcy5jb2wgLSBzdGFydF9jb2wgKyAxIDogTUFYQ09MOworCisJCQkgICAgY2hhcl9jb3VudF9jdXJzb3IgKz0KKwkJCQlsaW5lX2NvdW50X2luZm8obWxfZ2V0KGxudW0pICsgc3RhcnRfY29sLAorCQkJCSAmd29yZF9jb3VudF9jdXJzb3IsIChsb25nKWVuZF9jb2wsIGVvbF9zaXplKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkJLyogSW4gbm9uLXZpc3VhbCBtb2RlLCBjaGVjayBmb3IgdGhlIGxpbmUgdGhlIGN1cnNvciBpcyBvbiAqLworCQlpZiAobG51bSA9PSBjdXJ3aW4tPndfY3Vyc29yLmxudW0pCisJCXsKKwkJICAgIHdvcmRfY291bnRfY3Vyc29yICs9IHdvcmRfY291bnQ7CisJCSAgICBjaGFyX2NvdW50X2N1cnNvciA9IGNoYXJfY291bnQgKworCQkJbGluZV9jb3VudF9pbmZvKG1sX2dldChsbnVtKSwgJndvcmRfY291bnRfY3Vyc29yLAorCQkJCSAgKGxvbmcpKGN1cndpbi0+d19jdXJzb3IuY29sICsgMSksIGVvbF9zaXplKTsKKwkJfQorCSAgICB9CisJICAgIC8qIEFkZCB0byB0aGUgcnVubmluZyB0b3RhbHMgKi8KKwkgICAgY2hhcl9jb3VudCArPSBsaW5lX2NvdW50X2luZm8obWxfZ2V0KGxudW0pLCAmd29yZF9jb3VudCwKKwkJCQkJCSAgICAgIChsb25nKU1BWENPTCwgZW9sX3NpemUpOworCX0KKworCS8qIENvcnJlY3Rpb24gZm9yIHdoZW4gbGFzdCBsaW5lIGRvZXNuJ3QgaGF2ZSBhbiBFT0wuICovCisJaWYgKCFjdXJidWYtPmJfcF9lb2wgJiYgY3VyYnVmLT5iX3BfYmluKQorCSAgICBjaGFyX2NvdW50IC09IGVvbF9zaXplOworCisjaWZkZWYgRkVBVF9WSVNVQUwKKwlpZiAoVklzdWFsX2FjdGl2ZSkKKwl7CisJICAgIGlmIChWSXN1YWxfbW9kZSA9PSBDdHJsX1YpCisJICAgIHsKKwkJZ2V0dmNvbHMoY3Vyd2luLCAmbWluX3BvcywgJm1heF9wb3MsICZtaW5fcG9zLmNvbCwKKwkJCSZtYXhfcG9zLmNvbCk7CisJCXNwcmludGYoKGNoYXIgKilidWYxLCBfKCIlbGQgQ29sczsgIiksCisJCQkobG9uZykob3BhcmcuZW5kX3Zjb2wgLSBvcGFyZy5zdGFydF92Y29sICsgMSkpOworCSAgICB9CisJICAgIGVsc2UKKwkJYnVmMVswXSA9IE5VTDsKKworCSAgICBzcHJpbnRmKChjaGFyICopSU9idWZmLAorCSAgICBfKCJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiKSwKKwkJCWJ1ZjEsIGxpbmVfY291bnRfc2VsZWN0ZWQsCisJCQkobG9uZyljdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCwKKwkJCXdvcmRfY291bnRfY3Vyc29yLCB3b3JkX2NvdW50LAorCQkJY2hhcl9jb3VudF9jdXJzb3IsIGNoYXJfY291bnQpOworCX0KKwllbHNlCisjZW5kaWYKKwl7CisJICAgIHAgPSBtbF9nZXRfY3VybGluZSgpOworCSAgICB2YWxpZGF0ZV92aXJ0Y29sKCk7CisJICAgIGNvbF9wcmludChidWYxLCAoaW50KWN1cndpbi0+d19jdXJzb3IuY29sICsgMSwKKwkJICAgIChpbnQpY3Vyd2luLT53X3ZpcnRjb2wgKyAxKTsKKwkgICAgY29sX3ByaW50KGJ1ZjIsIChpbnQpU1RSTEVOKHApLCBsaW5ldGFic2l6ZShwKSk7CisKKwkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwKKwkJXygiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQnl0ZSAlbGQgb2YgJWxkIiksCisJCSAgICAoY2hhciAqKWJ1ZjEsIChjaGFyICopYnVmMiwKKwkJICAgIChsb25nKWN1cndpbi0+d19jdXJzb3IubG51bSwKKwkJICAgIChsb25nKWN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LAorCQkgICAgd29yZF9jb3VudF9jdXJzb3IsIHdvcmRfY291bnQsCisJCSAgICBjaGFyX2NvdW50X2N1cnNvciwgY2hhcl9jb3VudCk7CisJfQorCisjaWZkZWYgRkVBVF9NQllURQorCWNoYXJfY291bnQgPSBib21iX3NpemUoKTsKKwlpZiAoY2hhcl9jb3VudCA+IDApCisJICAgIHNwcmludGYoKGNoYXIgKilJT2J1ZmYgKyBTVFJMRU4oSU9idWZmKSwgXygiKCslbGQgZm9yIEJPTSkiKSwKKwkJCQkJCQkJICBjaGFyX2NvdW50KTsKKyNlbmRpZgorCS8qIERvbid0IHNob3J0ZW4gdGhpcyBtZXNzYWdlLCB0aGUgdXNlciBhc2tlZCBmb3IgaXQuICovCisJcCA9IHBfc2htOworCXBfc2htID0gKGNoYXJfdSAqKSIiOworCW1zZyhJT2J1ZmYpOworCXBfc2htID0gcDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvb3B0aW9uLmMgYi9zcmMvb3B0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3MDA1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcHRpb24uYwpAQCAtMCwwICsxLDkzODMgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIENvZGUgdG8gaGFuZGxlIHVzZXItc2V0dGFibGUgb3B0aW9ucy4gVGhpcyBpcyBhbGwgcHJldHR5IG11Y2ggdGFibGUtCisgKiBkcml2ZW4uIENoZWNrbGlzdCBmb3IgYWRkaW5nIGEgbmV3IG9wdGlvbjoKKyAqIC0gUHV0IGl0IGluIHRoZSBvcHRpb25zIGFycmF5IGJlbG93IChjb3B5IGFuIGV4aXN0aW5nIGVudHJ5KS4KKyAqIC0gRm9yIGEgZ2xvYmFsIG9wdGlvbjogQWRkIGEgdmFyaWFibGUgZm9yIGl0IGluIG9wdGlvbi5oLgorICogLSBGb3IgYSBidWZmZXIgb3Igd2luZG93IGxvY2FsIG9wdGlvbjoKKyAqICAgLSBBZGQgYSBQVl9YWCBlbnRyeSB0byB0aGUgZW51bSBiZWxvdy4KKyAqICAgLSBBZGQgYSB2YXJpYWJsZSB0byB0aGUgd2luZG93IG9yIGJ1ZmZlciBzdHJ1Y3QgaW4gc3RydWN0cy5oLgorICogICAtIEZvciBhIHdpbmRvdyBvcHRpb24sIGFkZCBzb21lIGNvZGUgdG8gY29weV93aW5vcHQoKS4KKyAqICAgLSBGb3IgYSBidWZmZXIgb3B0aW9uLCBhZGQgc29tZSBjb2RlIHRvIGJ1Zl9jb3B5X29wdGlvbnMoKS4KKyAqICAgLSBGb3IgYSBidWZmZXIgc3RyaW5nIG9wdGlvbiwgYWRkIGNvZGUgdG8gY2hlY2tfYnVmX29wdGlvbnMoKS4KKyAqIC0gSWYgaXQncyBhIG51bWVyaWMgb3B0aW9uLCBhZGQgYW55IG5lY2Vzc2FyeSBib3VuZHMgY2hlY2tzIHRvIGRvX3NldCgpLgorICogLSBJZiBpdCdzIGEgbGlzdCBvZiBmbGFncywgYWRkIHNvbWUgY29kZSBpbiBkb19zZXQoKSwgc2VhcmNoIGZvciBXV19BTEwuCisgKiAtIFdoZW4gYWRkaW5nIGFuIG9wdGlvbiB3aXRoIGV4cGFuc2lvbiAoUF9FWFBBTkQpLCBidXQgd2l0aCBhIGRpZmZlcmVudAorICogICBkZWZhdWx0IGZvciBWaSBhbmQgVmltIChubyBQX1ZJX0RFRiksIGFkZCBzb21lIGNvZGUgYXQgVklNRVhQLgorICogLSBBZGQgZG9jdW1lbnRhdGlvbiEgIE9uZSBsaW5lIGluIGRvYy9oZWxwLnR4dCwgZnVsbCBkZXNjcmlwdGlvbiBpbgorICogICBvcHRpb25zLnR4dCwgYW5kIGFueSBvdGhlciByZWxhdGVkIHBsYWNlcy4KKyAqIC0gQWRkIGFuIGVudHJ5IGluIHJ1bnRpbWUvb3B0d2luLnZpbS4KKyAqIFdoZW4gbWFraW5nIGNoYW5nZXM6CisgKiAtIEFkanVzdCB0aGUgaGVscCBmb3IgdGhlIG9wdGlvbiBpbiBkb2Mvb3B0aW9uLnR4dC4KKyAqIC0gV2hlbiBhbiBlbnRyeSBoYXMgdGhlIFBfVklNIGZsYWcsIG9yIGlzIGxhY2tpbmcgdGhlIFBfVklfREVGIGZsYWcsIGFkZCBhCisgKiAgIGNvbW1lbnQgYXQgdGhlIGhlbHAgZm9yIHRoZSAnY29tcGF0aWJsZScgb3B0aW9uLgorICovCisKKyNkZWZpbmUgSU5fT1BUSU9OX0MKKyNpbmNsdWRlICJ2aW0uaCIKKworLyoKKyAqIFRoZSBvcHRpb25zIHRoYXQgYXJlIGxvY2FsIHRvIGEgd2luZG93IG9yIGJ1ZmZlciBoYXZlICJpbmRpciIgc2V0IHRvIG9uZSBvZgorICogdGhlc2UgdmFsdWVzLiAgU3BlY2lhbCB2YWx1ZXM6CisgKiBQVl9OT05FOiBnbG9iYWwgb3B0aW9uLgorICogUFZfQk9USCBpcyBhZGRlZDogZ2xvYmFsIG9wdGlvbiB3aGljaCBhbHNvIGhhcyBhIGxvY2FsIHZhbHVlLgorICovCisjZGVmaW5lIFBWX0JPVEggMHgxMDAwCisjZGVmaW5lIE9QVF9CT1RIKHgpIChpZG9wdF9UKShQVl9CT1RIICsgKGludCkoeCkpCisKK3R5cGVkZWYgZW51bQoreworICAgIFBWX05PTkUgPSAwCisgICAgLCBQVl9BSQorICAgICwgUFZfQVIKKyAgICAsIFBWX0FSQUIKKyAgICAsIFBWX0JICisgICAgLCBQVl9CSU4KKyAgICAsIFBWX0JMCisgICAgLCBQVl9CT01CCisgICAgLCBQVl9CVAorICAgICwgUFZfQ0kKKyAgICAsIFBWX0NJTgorICAgICwgUFZfQ0lOSworICAgICwgUFZfQ0lOTworICAgICwgUFZfQ0lOVworICAgICwgUFZfQ01TCisgICAgLCBQVl9DT00KKyAgICAsIFBWX0NQVAorICAgICwgUFZfREVGCisgICAgLCBQVl9ESUNUCisgICAgLCBQVl9ESUZGCisgICAgLCBQVl9FRk0KKyAgICAsIFBWX0VPTAorICAgICwgUFZfRVAKKyAgICAsIFBWX0VUCisgICAgLCBQVl9GREMKKyAgICAsIFBWX0ZERQorICAgICwgUFZfRkRJCisgICAgLCBQVl9GREwKKyAgICAsIFBWX0ZETQorICAgICwgUFZfRkROCisgICAgLCBQVl9GRFQKKyAgICAsIFBWX0ZFTgorICAgICwgUFZfRkVOQworICAgICwgUFZfRkYKKyAgICAsIFBWX0ZNTAorICAgICwgUFZfRk1SCisgICAgLCBQVl9GTworICAgICwgUFZfRlQKKyAgICAsIFBWX0dQCisgICAgLCBQVl9JTUkKKyAgICAsIFBWX0lNUworICAgICwgUFZfSU5DCisgICAgLCBQVl9JTkRFCisgICAgLCBQVl9JTkRLCisgICAgLCBQVl9JTkVYCisgICAgLCBQVl9JTkYKKyAgICAsIFBWX0lTSworICAgICwgUFZfS0VZCisgICAgLCBQVl9LTUFQCisgICAgLCBQVl9LUAorICAgICwgUFZfTEJSCisgICAgLCBQVl9MSVNQCisgICAgLCBQVl9MSVNUCisgICAgLCBQVl9NQQorICAgICwgUFZfTUwKKyAgICAsIFBWX01PRAorICAgICwgUFZfTVAKKyAgICAsIFBWX01QUworICAgICwgUFZfTkYKKyAgICAsIFBWX05VCisgICAgLCBQVl9PRlQKKyAgICAsIFBWX1BBVEgKKyAgICAsIFBWX1BJCisgICAgLCBQVl9QVlcKKyAgICAsIFBWX1JMCisgICAgLCBQVl9STEMKKyAgICAsIFBWX1JPCisgICAgLCBQVl9TQ0JJTkQKKyAgICAsIFBWX1NDUk9MTAorICAgICwgUFZfU0kKKyAgICAsIFBWX1NOCisgICAgLCBQVl9TVFMKKyAgICAsIFBWX1NVQQorICAgICwgUFZfU1cKKyAgICAsIFBWX1NXRgorICAgICwgUFZfU1lOCisgICAgLCBQVl9UQUdTCisgICAgLCBQVl9UUworICAgICwgUFZfVFNSCisgICAgLCBQVl9UVworICAgICwgUFZfVFgKKyAgICAsIFBWX1dGSAorICAgICwgUFZfV00KKyAgICAsIFBWX1dSQVAKK30gaWRvcHRfVDsKKworLyoKKyAqIE9wdGlvbnMgbG9jYWwgdG8gYSB3aW5kb3cgaGF2ZSBhIHZhbHVlIGxvY2FsIHRvIGEgYnVmZmVyIGFuZCBnbG9iYWwgdG8gYWxsCisgKiBidWZmZXJzLiAgSW5kaWNhdGUgdGhpcyBieSBzZXR0aW5nICJ2YXIiIHRvIFZBUl9XSU4uCisgKi8KKyNkZWZpbmUgVkFSX1dJTiAoKGNoYXJfdSAqKS0xKQorCisvKgorICogVGhlc2UgdGhlIGdsb2JhbCB2YWx1ZXMgZm9yIG9wdGlvbnMgd2hpY2ggYXJlIGFsc28gbG9jYWwgdG8gYSBidWZmZXIuCisgKiBPbmx5IHRvIGJlIHVzZWQgaW4gb3B0aW9uLmMhCisgKi8KK3N0YXRpYyBpbnQJcF9haTsKK3N0YXRpYyBpbnQJcF9iaW47CisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIGludAlwX2JvbWI7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpCitzdGF0aWMgY2hhcl91CSpwX2JoOworc3RhdGljIGNoYXJfdQkqcF9idDsKKyNlbmRpZgorc3RhdGljIGludAlwX2JsOworc3RhdGljIGludAlwX2NpOworI2lmZGVmIEZFQVRfQ0lOREVOVAorc3RhdGljIGludAlwX2NpbjsKK3N0YXRpYyBjaGFyX3UJKnBfY2luazsKK3N0YXRpYyBjaGFyX3UJKnBfY2lubzsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9TTUFSVElOREVOVCkgfHwgZGVmaW5lZChGRUFUX0NJTkRFTlQpCitzdGF0aWMgY2hhcl91CSpwX2Npbnc7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCitzdGF0aWMgY2hhcl91CSpwX2NvbTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworc3RhdGljIGNoYXJfdQkqcF9jbXM7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKK3N0YXRpYyBjaGFyX3UJKnBfY3B0OworI2VuZGlmCitzdGF0aWMgaW50CXBfZW9sOworc3RhdGljIGludAlwX2V0OworI2lmZGVmIEZFQVRfTUJZVEUKK3N0YXRpYyBjaGFyX3UJKnBfZmVuYzsKKyNlbmRpZgorc3RhdGljIGNoYXJfdQkqcF9mZjsKK3N0YXRpYyBjaGFyX3UJKnBfZm87CisjaWZkZWYgRkVBVF9BVVRPQ01ECitzdGF0aWMgY2hhcl91CSpwX2Z0OworI2VuZGlmCitzdGF0aWMgbG9uZwlwX2ltaW5zZXJ0Oworc3RhdGljIGxvbmcJcF9pbXNlYXJjaDsKKyNpZiBkZWZpbmVkKEZFQVRfRklORF9JRCkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCitzdGF0aWMgY2hhcl91CSpwX2luZXg7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfQ0lOREVOVCkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCitzdGF0aWMgY2hhcl91CSpwX2luZGU7CitzdGF0aWMgY2hhcl91CSpwX2luZGs7CisjZW5kaWYKK3N0YXRpYyBpbnQJcF9pbmY7CitzdGF0aWMgY2hhcl91CSpwX2lzazsKKyNpZmRlZiBGRUFUX0NSWVBUCitzdGF0aWMgY2hhcl91CSpwX2tleTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfTElTUAorc3RhdGljIGludAlwX2xpc3A7CisjZW5kaWYKK3N0YXRpYyBpbnQJcF9tbDsKK3N0YXRpYyBpbnQJcF9tYTsKK3N0YXRpYyBpbnQJcF9tb2Q7CitzdGF0aWMgY2hhcl91CSpwX21wczsKK3N0YXRpYyBjaGFyX3UJKnBfbmY7CisjaWZkZWYgRkVBVF9PU0ZJTEVUWVBFCitzdGF0aWMgY2hhcl91CSpwX29mdDsKKyNlbmRpZgorc3RhdGljIGludAlwX3BpOworc3RhdGljIGludAlwX3JvOworI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKK3N0YXRpYyBpbnQJcF9zaTsKKyNlbmRpZgorI2lmbmRlZiBTSE9SVF9GTkFNRQorc3RhdGljIGludAlwX3NuOworI2VuZGlmCitzdGF0aWMgbG9uZwlwX3N0czsKKyNpZiBkZWZpbmVkKEZFQVRfU0VBUkNIUEFUSCkKK3N0YXRpYyBjaGFyX3UJKnBfc3VhOworI2VuZGlmCitzdGF0aWMgbG9uZwlwX3N3Oworc3RhdGljIGludAlwX3N3ZjsKKyNpZmRlZiBGRUFUX1NZTl9ITAorc3RhdGljIGNoYXJfdQkqcF9zeW47CisjZW5kaWYKK3N0YXRpYyBsb25nCXBfdHM7CitzdGF0aWMgbG9uZwlwX3R3Oworc3RhdGljIGludAlwX3R4Oworc3RhdGljIGxvbmcJcF93bTsKKyNpZmRlZiBGRUFUX0tFWU1BUAorc3RhdGljIGNoYXJfdQkqcF9rZXltYXA7CisjZW5kaWYKKworLyogU2F2ZWQgdmFsdWVzIGZvciB3aGVuICdiaW4nIGlzIHNldC4gKi8KK3N0YXRpYyBpbnQJcF9ldF9ub2JpbjsKK3N0YXRpYyBpbnQJcF9tbF9ub2JpbjsKK3N0YXRpYyBsb25nCXBfdHdfbm9iaW47CitzdGF0aWMgbG9uZwlwX3dtX25vYmluOworCisvKiBTYXZlZCB2YWx1ZXMgZm9yIHdoZW4gJ3Bhc3RlJyBpcyBzZXQgKi8KK3N0YXRpYyBsb25nCXBfdHdfbm9wYXN0ZTsKK3N0YXRpYyBsb25nCXBfd21fbm9wYXN0ZTsKK3N0YXRpYyBsb25nCXBfc3RzX25vcGFzdGU7CitzdGF0aWMgaW50CXBfYWlfbm9wYXN0ZTsKKworc3RydWN0IHZpbW9wdGlvbgoreworICAgIGNoYXIJKmZ1bGxuYW1lOwkvKiBmdWxsIG9wdGlvbiBuYW1lICovCisgICAgY2hhcgkqc2hvcnRuYW1lOwkvKiBwZXJtaXNzaWJsZSBhYmJyZXZpYXRpb24gKi8KKyAgICBsb25nX3UJZmxhZ3M7CQkvKiBzZWUgYmVsb3cgKi8KKyAgICBjaGFyX3UJKnZhcjsJCS8qIGdsb2JhbCBvcHRpb246IHBvaW50ZXIgdG8gdmFyaWFibGU7CisJCQkJICogd2luZG93LWxvY2FsIG9wdGlvbjogVkFSX1dJTjsKKwkJCQkgKiBidWZmZXItbG9jYWwgb3B0aW9uOiBnbG9iYWwgdmFsdWUgKi8KKyAgICBpZG9wdF9UCWluZGlyOwkJLyogZ2xvYmFsIG9wdGlvbjogUFZfTk9ORTsKKwkJCQkgKiBsb2NhbCBvcHRpb246IGluZGlyZWN0IG9wdGlvbiBpbmRleCAqLworICAgIGNoYXJfdQkqZGVmX3ZhbFsyXTsJLyogZGVmYXVsdCB2YWx1ZXMgZm9yIHZhcmlhYmxlICh2aSBhbmQgdmltKSAqLworI2lmZGVmIEZFQVRfRVZBTAorICAgIHNjaWRfVAlzY3JpcHRJRDsJLyogc2NyaXB0IGluIHdoaWNoIHRoZSBvcHRpb24gd2FzIGxhc3Qgc2V0ICovCisjZW5kaWYKK307CisKKyNkZWZpbmUgVklfREVGQVVMVCAgMAkgICAgLyogZGVmX3ZhbFtWSV9ERUZBVUxUXSBpcyBWaSBkZWZhdWx0IHZhbHVlICovCisjZGVmaW5lIFZJTV9ERUZBVUxUIDEJICAgIC8qIGRlZl92YWxbVklNX0RFRkFVTFRdIGlzIFZpbSBkZWZhdWx0IHZhbHVlICovCisKKy8qCisgKiBGbGFncworICovCisjZGVmaW5lIFBfQk9PTAkJMHgwMQkvKiB0aGUgb3B0aW9uIGlzIGJvb2xlYW4gKi8KKyNkZWZpbmUgUF9OVU0JCTB4MDIJLyogdGhlIG9wdGlvbiBpcyBudW1lcmljICovCisjZGVmaW5lIFBfU1RSSU5HCTB4MDQJLyogdGhlIG9wdGlvbiBpcyBhIHN0cmluZyAqLworI2RlZmluZSBQX0FMTE9DRUQJMHgwOAkvKiB0aGUgc3RyaW5nIG9wdGlvbiBpcyBpbiBhbGxvY2F0ZWQgbWVtb3J5LAorCQkJCSAgICBtdXN0IHVzZSB2aW1fZnJlZSgpIHdoZW4gYXNzaWduaW5nIG5ldworCQkJCSAgICB2YWx1ZS4gTm90IHNldCBpZiBkZWZhdWx0IGlzIHRoZSBzYW1lLiAqLworI2RlZmluZSBQX0VYUEFORAkweDEwCS8qIGVudmlyb25tZW50IGV4cGFuc2lvbi4gIE5PVEU6IFBfRVhQQU5EIGNhbgorCQkJCSAgIG5ldmVyIGJlIHVzZWQgZm9yIGxvY2FsIG9yIGhpZGRlbiBvcHRpb25zISAqLworI2RlZmluZSBQX05PREVGQVVMVAkweDQwCS8qIGRvbid0IHNldCB0byBkZWZhdWx0IHZhbHVlICovCisjZGVmaW5lIFBfREVGX0FMTE9DRUQJMHg4MAkvKiBkZWZhdWx0IHZhbHVlIGlzIGluIGFsbG9jYXRlZCBtZW1vcnksIG11c3QKKwkJCQkgICAgdXNlIHZpbV9mcmVlKCkgd2hlbiBhc3NpZ25pbmcgbmV3IHZhbHVlICovCisjZGVmaW5lIFBfV0FTX1NFVAkweDEwMAkvKiBvcHRpb24gaGFzIGJlZW4gc2V0L3Jlc2V0ICovCisjZGVmaW5lIFBfTk9fTUtSQwkweDIwMAkvKiBkb24ndCBpbmNsdWRlIGluIDpta3ZpbXJjIG91dHB1dCAqLworI2RlZmluZSBQX1ZJX0RFRgkweDQwMAkvKiBVc2UgVmkgZGVmYXVsdCBmb3IgVmltICovCisjZGVmaW5lIFBfVklNCQkweDgwMAkvKiBWaW0gb3B0aW9uLCByZXNldCB3aGVuICdjcCcgc2V0ICovCisKKwkJCQkvKiB3aGVuIG9wdGlvbiBjaGFuZ2VkLCB3aGF0IHRvIGRpc3BsYXk6ICovCisjZGVmaW5lIFBfUlNUQVQJCTB4MTAwMAkvKiByZWRyYXcgc3RhdHVzIGxpbmVzICovCisjZGVmaW5lIFBfUldJTgkJMHgyMDAwCS8qIHJlZHJhdyBjdXJyZW50IHdpbmRvdyAqLworI2RlZmluZSBQX1JCVUYJCTB4NDAwMAkvKiByZWRyYXcgY3VycmVudCBidWZmZXIgKi8KKyNkZWZpbmUgUF9SQUxMCQkweDYwMDAJLyogcmVkcmF3IGFsbCB3aW5kb3dzICovCisjZGVmaW5lIFBfUkNMUgkJMHg3MDAwCS8qIGNsZWFyIGFuZCByZWRyYXcgYWxsICovCisKKyNkZWZpbmUgUF9DT01NQQkJMHg4MDAwCS8qIGNvbW1hIHNlcGFyYXRlZCBsaXN0ICovCisjZGVmaW5lIFBfTk9EVVAJCTB4MTAwMDBMLyogZG9uJ3QgYWxsb3cgZHVwbGljYXRlIHN0cmluZ3MgKi8KKyNkZWZpbmUgUF9GTEFHTElTVAkweDIwMDAwTC8qIGxpc3Qgb2Ygc2luZ2xlLWNoYXIgZmxhZ3MgKi8KKworI2RlZmluZSBQX1NFQ1VSRQkweDQwMDAwTC8qIGNhbm5vdCBjaGFuZ2UgaW4gbW9kZWxpbmUgb3Igc2VjdXJlIG1vZGUgKi8KKyNkZWZpbmUgUF9HRVRURVhUCTB4ODAwMDBMLyogZXhwYW5kIGRlZmF1bHQgdmFsdWUgd2l0aCBfKCkgKi8KKyNkZWZpbmUgUF9OT0dMT0IgICAgICAgMHgxMDAwMDBMLyogZG8gbm90IHVzZSBsb2NhbCB2YWx1ZSBmb3IgZ2xvYmFsIHZpbXJjICovCisKKy8qCisgKiBvcHRpb25zW10gaXMgaW5pdGlhbGl6ZWQgaGVyZS4KKyAqIFRoZSBvcmRlciBvZiB0aGUgb3B0aW9ucyBNVVNUIGJlIGFscGhhYmV0aWMgZm9yICI6c2V0IGFsbCIgYW5kIGZpbmRvcHRpb24oKS4KKyAqIEFsbCBvcHRpb24gbmFtZXMgTVVTVCBzdGFydCB3aXRoIGEgbG93ZXJjYXNlIGxldHRlciAoZm9yIGZpbmRvcHRpb24oKSkuCisgKiBFeGNlcHRpb246ICJ0XyIgb3B0aW9ucyBhcmUgYXQgdGhlIGVuZC4KKyAqIFRoZSBvcHRpb25zIHdpdGggYSBOVUxMIHZhcmlhYmxlIGFyZSAnaGlkZGVuJzogYSBzZXQgY29tbWFuZCBmb3IgdGhlbSBpcworICogaWdub3JlZCBhbmQgdGhleSBhcmUgbm90IHByaW50ZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgdmltb3B0aW9uCisjaWZkZWYgRkVBVF9HVUlfVzE2CisJX2ZhcgorI2VuZGlmCisJb3B0aW9uc1tdID0KK3sKKyAgICB7ImFsZXBoIiwJICAgICJhbCIsICAgUF9OVU18UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJCSAgICAoY2hhcl91ICopJnBfYWxlcGgsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeworI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTjMyNjQpIHx8IGRlZmluZWQoT1MyKSkgJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKQorCQkJICAgIChjaGFyX3UgKikxMjhMLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopMjI0TCwKKyNlbmRpZgorCQkJCQkgICAgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJhbnRpYWxpYXMiLCAgICJhbnRpIiwgUF9CT09MfFBfVklfREVGfFBfVklNfFBfUkNMUiwKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKE1BQ09TX1gpCisJCQkgICAgKGNoYXJfdSAqKSZwX2FudGlhbGlhcywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopRkFMU0V9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKilGQUxTRX0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJhcmFiaWMiLAkgICAgImFyYWIiLCBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisjaWZkZWYgRkVBVF9BUkFCSUMKKwkJCSAgICAoY2hhcl91ICopVkFSX1dJTiwgUFZfQVJBQiwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImFyYWJpY3NoYXBlIiwgImFyc2hhcGUiLCBQX0JPT0x8UF9WSV9ERUZ8UF9WSU18UF9SQ0xSLAorI2lmZGVmIEZFQVRfQVJBQklDCisJCQkgICAgKGNoYXJfdSAqKSZwX2Fyc2hhcGUsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilUUlVFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImFsbG93cmV2aW5zIiwgImFyaSIsICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJCSAgICAoY2hhcl91ICopJnBfYXJpLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiYWx0a2V5bWFwIiwgICAiYWttIiwgIFBfQk9PTHxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX0ZLTUFQCisJCQkgICAgKGNoYXJfdSAqKSZwX2FsdGtleW1hcCwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImFtYml3aWR0aCIsICAiYW1idyIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX1JDTFIsCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKQorCQkJICAgIChjaGFyX3UgKikmcF9hbWJ3LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopInNpbmdsZSIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyNpZiBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykgfHwgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkKKyAgICB7ImF1dG9jaGRpciIsICAiYWNkIiwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX2FjZCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyNlbmRpZgorICAgIHsiYXV0b2luZGVudCIsICAiYWkiLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfYWksIFBWX0FJLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiYXV0b3ByaW50IiwgICAiYXAiLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImF1dG9yZWFkIiwgICAgImFyIiwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX2FyLCBPUFRfQk9USChQVl9BUiksCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJhdXRvd3JpdGUiLCAgICJhdyIsICAgUF9CT09MfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9hdywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImF1dG93cml0ZWFsbCIsImF3YSIsICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX2F3YSwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImJhY2tncm91bmQiLCAgImJnIiwgICBQX1NUUklOR3xQX1ZJX0RFRnxQX1JDTFIsCisJCQkgICAgKGNoYXJfdSAqKSZwX2JnLCBQVl9OT05FLAorCQkJICAgIHsKKyNpZiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoV0lOMzI2NCkpICYmICFkZWZpbmVkKEZFQVRfR1VJKQorCQkJICAgIChjaGFyX3UgKikiZGFyayIsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKikibGlnaHQiLAorI2VuZGlmCisJCQkJCSAgICAoY2hhcl91ICopMEx9fSwKKyAgICB7ImJhY2tzcGFjZSIsICAgImJzIiwgICBQX1NUUklOR3xQX1ZJX0RFRnxQX1ZJTXxQX0NPTU1BfFBfTk9EVVAsCisJCQkgICAgKGNoYXJfdSAqKSZwX2JzLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsiYmFja3VwIiwJICAgICJiayIsICAgUF9CT09MfFBfVklfREVGfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF9iaywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImJhY2t1cGNvcHkiLCAgImJrYyIsICBQX1NUUklOR3xQX1ZJTXxQX0NPTU1BfFBfTk9EVVAsCisJCQkgICAgKGNoYXJfdSAqKSZwX2JrYywgUFZfTk9ORSwKKyNpZmRlZiBVTklYCisJCQkgICAgeyhjaGFyX3UgKikieWVzIiwgKGNoYXJfdSAqKSJhdXRvIn0KKyNlbHNlCisJCQkgICAgeyhjaGFyX3UgKikiYXV0byIsIChjaGFyX3UgKikiYXV0byJ9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiYmFja3VwZGlyIiwgICAiYmRpciIsIFBfU1RSSU5HfFBfRVhQQU5EfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUHxQX1NFQ1VSRSwKKwkJCSAgICAoY2hhcl91ICopJnBfYmRpciwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKURGTFRfQkRJUiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJiYWNrdXBleHQiLCAgICJiZXgiLCAgUF9TVFJJTkd8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX2JleCwgUFZfTk9ORSwKKwkJCSAgICB7CisjaWZkZWYgVk1TCisJCQkgICAgKGNoYXJfdSAqKSJfIiwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKSJ+IiwKKyNlbmRpZgorCQkJCQkgICAgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJiYWNrdXBza2lwIiwgICJic2siLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9DT01NQSwKKyNpZmRlZiBGRUFUX1dJTERJR04KKwkJCSAgICAoY2hhcl91ICopJnBfYnNrLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyNpZmRlZiBGRUFUX0JFVkFMCisgICAgeyJiYWxsb29uZGVsYXkiLCJiZGxheSIsUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX2JkbGF5LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopNjAwTCwgKGNoYXJfdSAqKTBMfX0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfQkVWQUwpICYmIChkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKSBcCisJfHwgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpKQorICAgIHsiYmFsbG9vbmV2YWwiLCAiYmV2YWwiLFBfQk9PTHxQX1ZJX0RFRnxQX05PX01LUkMsCisJCQkgICAgKGNoYXJfdSAqKSZwX2JldmFsLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91KilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisjZW5kaWYKKyAgICB7ImJlYXV0aWZ5IiwgICAgImJmIiwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJiaW5hcnkiLAkgICAgImJpbiIsICBQX0JPT0x8UF9WSV9ERUZ8UF9SU1RBVCwKKwkJCSAgICAoY2hhcl91ICopJnBfYmluLCBQVl9CSU4sCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJiaW9za2V5IiwJICAgICJiaW9zayIsUF9CT09MfFBfVklfREVGLAorI2lmZGVmIE1TRE9TCisJCQkgICAgKGNoYXJfdSAqKSZwX2Jpb3NrLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopVFJVRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJib21iIiwJICAgIE5VTEwsICAgUF9CT09MfFBfTk9fTUtSQ3xQX1ZJX0RFRnxQX1JTVEFULAorI2lmZGVmIEZFQVRfTUJZVEUKKwkJCSAgICAoY2hhcl91ICopJnBfYm9tYiwgUFZfQk9NQiwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImJyZWFrYXQiLAkgICAgImJyayIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX1JBTEx8UF9GTEFHTElTVCwKKyNpZmRlZiBGRUFUX0xJTkVCUkVBSworCQkJICAgIChjaGFyX3UgKikmcF9icmVha2F0LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiBcdCFAKi0rOzosLi8/IiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiYnJvd3NlZGlyIiwgICAiYnNkaXIiLFBfU1RSSU5HfFBfVklfREVGLAorI2lmZGVmIEZFQVRfQlJPV1NFCisJCQkgICAgKGNoYXJfdSAqKSZwX2JzZGlyLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopImxhc3QiLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJidWZoaWRkZW4iLCAgICJiaCIsICAgUF9TVFJJTkd8UF9BTExPQ0VEfFBfVklfREVGfFBfTk9HTE9CLAorI2lmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKwkJCSAgICAoY2hhcl91ICopJnBfYmgsIFBWX0JILAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImJ1Zmxpc3RlZCIsICAgImJsIiwgICBQX0JPT0x8UF9WSV9ERUZ8UF9OT0dMT0IsCisJCQkgICAgKGNoYXJfdSAqKSZwX2JsLCBQVl9CTCwKKwkJCSAgICB7KGNoYXJfdSAqKTFMLCAoY2hhcl91ICopMEx9CisJCQkgICAgfSwKKyAgICB7ImJ1ZnR5cGUiLAkgICAgImJ0IiwgICBQX1NUUklOR3xQX0FMTE9DRUR8UF9WSV9ERUZ8UF9OT0dMT0IsCisjaWYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCQkJICAgIChjaGFyX3UgKikmcF9idCwgUFZfQlQsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiY2FzZW1hcCIsCSAgICAiY21wIiwgICBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisJCQkgICAgKGNoYXJfdSAqKSZwX2NtcCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSJpbnRlcm5hbCxrZWVwYXNjaWkiLCAoY2hhcl91ICopMEx9CisJCQkgICAgfSwKKyAgICB7ImNkcGF0aCIsCSAgICAiY2QiLCAgIFBfU1RSSU5HfFBfRVhQQU5EfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX1NFQVJDSFBBVEgKKwkJCSAgICAoY2hhcl91ICopJnBfY2RwYXRoLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiwsIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiY2VkaXQiLAkgICAgTlVMTCwgICBQX1NUUklORywKKyNpZmRlZiBGRUFUX0NNRFdJTgorCQkJICAgIChjaGFyX3UgKikmcF9jZWRpdCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopQ1RSTF9GX1NUUn0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImNoYXJjb252ZXJ0IiwgICJjY3YiLCBQX1NUUklOR3xQX1ZJX0RFRnxQX1NFQ1VSRSwKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCQkJICAgIChjaGFyX3UgKikmcF9jY3YsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiY2luZGVudCIsCSAgICAiY2luIiwgIFBfQk9PTHxQX1ZJX0RFRnxQX1ZJTSwKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKwkJCSAgICAoY2hhcl91ICopJnBfY2luLCBQVl9DSU4sCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJjaW5rZXlzIiwJICAgICJjaW5rIiwgUF9TVFJJTkd8UF9BTExPQ0VEfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKwkJCSAgICAoY2hhcl91ICopJnBfY2luaywgUFZfQ0lOSywKKwkJCSAgICB7KGNoYXJfdSAqKSIweywwfSwwKSw6LDAjLCFeRixvLE8sZSIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImNpbm9wdGlvbnMiLCAgImNpbm8iLCBQX1NUUklOR3xQX0FMTE9DRUR8UF9WSV9ERUZ8UF9DT01NQXxQX05PRFVQLAorI2lmZGVmIEZFQVRfQ0lOREVOVAorCQkJICAgIChjaGFyX3UgKikmcF9jaW5vLCBQVl9DSU5PLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsiY2lud29yZHMiLCAgICAiY2ludyIsIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisjaWYgZGVmaW5lZChGRUFUX1NNQVJUSU5ERU5UKSB8fCBkZWZpbmVkKEZFQVRfQ0lOREVOVCkKKwkJCSAgICAoY2hhcl91ICopJnBfY2ludywgUFZfQ0lOVywKKwkJCSAgICB7KGNoYXJfdSAqKSJpZixlbHNlLHdoaWxlLGRvLGZvcixzd2l0Y2giLAorCQkJCShjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImNsaXBib2FyZCIsICAgImNiIiwgICBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKwkJCSAgICAoY2hhcl91ICopJnBfY2IsIFBWX05PTkUsCisjIGlmZGVmIEZFQVRfWENMSVBCT0FSRAorCQkJICAgIHsoY2hhcl91ICopImF1dG9zZWxlY3QsZXhjbHVkZTpjb25zXFx8bGludXgiLAorCQkJCQkJCSAgICAgICAoY2hhcl91ICopMEx9CisjIGVsc2UKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9CisjIGVuZGlmCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJjbWRoZWlnaHQiLCAgICJjaCIsICAgUF9OVU18UF9WSV9ERUZ8UF9SQUxMLAorCQkJICAgIChjaGFyX3UgKikmcF9jaCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTFMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImNtZHdpbmhlaWdodCIsICJjd2giLCBQX05VTXxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX0NNRFdJTgorCQkJICAgIChjaGFyX3UgKikmcF9jd2gsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKik3TCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJjb2x1bW5zIiwJICAgICJjbyIsICAgUF9OVU18UF9OT0RFRkFVTFR8UF9OT19NS1JDfFBfVklfREVGfFBfUkNMUiwKKwkJCSAgICAoY2hhcl91ICopJkNvbHVtbnMsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKik4MEwsIChjaGFyX3UgKikwTH19LAorICAgIHsiY29tbWVudHMiLCAgICAiY29tIiwgIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisjaWZkZWYgRkVBVF9DT01NRU5UUworCQkJICAgIChjaGFyX3UgKikmcF9jb20sIFBWX0NPTSwKKwkJCSAgICB7KGNoYXJfdSAqKSJzMTovKixtYjoqLGV4OiovLDovLyxiOiMsOiUsOlhDT01NLG46PixmYjotIiwKKwkJCQkoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJjb21tZW50c3RyaW5nIiwgImNtcyIsIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkJCSAgICAoY2hhcl91ICopJnBfY21zLCBQVl9DTVMsCisJCQkgICAgeyhjaGFyX3UgKikiLyolcyovIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiY29tcGF0aWJsZSIsICAiY3AiLCAgIFBfQk9PTHxQX1JBTEwsCisJCQkgICAgKGNoYXJfdSAqKSZwX2NwLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopVFJVRSwgKGNoYXJfdSAqKUZBTFNFfX0sCisgICAgeyJjb21wbGV0ZSIsICAgICJjcHQiLCAgUF9TVFJJTkd8UF9BTExPQ0VEfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkJCSAgICAoY2hhcl91ICopJnBfY3B0LCBQVl9DUFQsCisJCQkgICAgeyhjaGFyX3UgKikiLix3LGIsdSx0LGkiLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJjb25maXJtIiwgICAgICJjZiIsICAgUF9CT09MfFBfVklfREVGLAorI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKwkJCSAgICAoY2hhcl91ICopJnBfY29uZmlybSwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImNvbnNrZXkiLAkgICAgImNvbnNrIixQX0JPT0x8UF9WSV9ERUYsCisjaWZkZWYgTVNET1MKKwkJCSAgICAoY2hhcl91ICopJnBfY29uc2ssIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJjb3B5aW5kZW50IiwgICJjaSIsICAgUF9CT09MfFBfVklfREVGfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF9jaSwgUFZfQ0ksCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJjcG9wdGlvbnMiLCAgICJjcG8iLCAgUF9TVFJJTkd8UF9WSU18UF9SQUxMfFBfRkxBR0xJU1QsCisJCQkgICAgKGNoYXJfdSAqKSZwX2NwbywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUNQT19BTEwsIChjaGFyX3UgKilDUE9fREVGQVVMVH19LAorICAgIHsiY3Njb3BlcGF0aGNvbXAiLCAiY3NwYyIsIFBfTlVNfFBfVklfREVGfFBfVklNLAorI2lmZGVmIEZFQVRfQ1NDT1BFCisJCQkgICAgKGNoYXJfdSAqKSZwX2NzcGMsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJjc2NvcGVwcmciLCAgICJjc3ByZyIsIFBfU1RSSU5HfFBfRVhQQU5EfFBfVklfREVGfFBfU0VDVVJFLAorI2lmZGVmIEZFQVRfQ1NDT1BFCisJCQkgICAgKGNoYXJfdSAqKSZwX2NzcHJnLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopImNzY29wZSIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImNzY29wZXF1aWNrZml4IiwgImNzcWYiLCBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisjaWYgZGVmaW5lZChGRUFUX0NTQ09QRSkgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCQkJICAgIChjaGFyX3UgKikmcF9jc3FmLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImNzY29wZXRhZyIsICAgImNzdCIsICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisjaWZkZWYgRkVBVF9DU0NPUEUKKwkJCSAgICAoY2hhcl91ICopJnBfY3N0LCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsiY3Njb3BldGFnb3JkZXIiLCAiY3N0byIsIFBfTlVNfFBfVklfREVGfFBfVklNLAorI2lmZGVmIEZFQVRfQ1NDT1BFCisJCQkgICAgKGNoYXJfdSAqKSZwX2NzdG8sIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJjc2NvcGV2ZXJib3NlIiwgImNzdmVyYiIsIFBfQk9PTHxQX1ZJX0RFRnxQX1ZJTSwKKyNpZmRlZiBGRUFUX0NTQ09QRQorCQkJICAgIChjaGFyX3UgKikmcF9jc3ZlcmJvc2UsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJkZWJ1ZyIsCSAgICBOVUxMLCAgIFBfU1RSSU5HfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9kZWJ1ZywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImRlZmluZSIsCSAgICAiZGVmIiwgIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX0ZJTkRfSUQKKwkJCSAgICAoY2hhcl91ICopJnBfZGVmLCBPUFRfQk9USChQVl9ERUYpLAorCQkJICAgIHsoY2hhcl91ICopIl5cXHMjXFxzKmRlZmluZSIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilOVUxMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiZGVsY29tYmluZSIsICJkZWNvIiwgIFBfQk9PTHxQX1ZJX0RFRnxQX1ZJTSwKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgKGNoYXJfdSAqKSZwX2RlY28sIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfQorCQkJICAgIH0sCisgICAgeyJkaWN0aW9uYXJ5IiwgICJkaWN0IiwgUF9TVFJJTkd8UF9FWFBBTkR8UF9WSV9ERUZ8UF9DT01NQXxQX05PRFVQLAorI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCQkJICAgIChjaGFyX3UgKikmcF9kaWN0LCBPUFRfQk9USChQVl9ESUNUKSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImRpZmYiLAkgICAgTlVMTCwgICBQX0JPT0x8UF9WSV9ERUZ8UF9SV0lOfFBfTk9HTE9CLAorI2lmZGVmIEZFQVRfRElGRgorCQkJICAgIChjaGFyX3UgKilWQVJfV0lOLCBQVl9ESUZGLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiZGlmZmV4cHIiLCAgICAiZGV4IiwgIFBfU1RSSU5HfFBfVklfREVGfFBfU0VDVVJFLAorI2lmIGRlZmluZWQoRkVBVF9ESUZGKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwkJCSAgICAoY2hhcl91ICopJnBfZGV4LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImRpZmZvcHQiLAkgICAgImRpcCIsICBQX1NUUklOR3xQX0FMTE9DRUR8UF9WSV9ERUZ8UF9SV0lOfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX0RJRkYKKwkJCSAgICAoY2hhcl91ICopJnBfZGlwLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopImZpbGxlciIsIChjaGFyX3UgKilOVUxMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopTlVMTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJkaWdyYXBoIiwJICAgICJkZyIsICAgUF9CT09MfFBfVklfREVGfFBfVklNLAorI2lmZGVmIEZFQVRfRElHUkFQSFMKKwkJCSAgICAoY2hhcl91ICopJnBfZGcsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJkaXJlY3RvcnkiLCAgICJkaXIiLCAgUF9TVFJJTkd8UF9FWFBBTkR8UF9WSV9ERUZ8UF9DT01NQXxQX05PRFVQfFBfU0VDVVJFLAorCQkJICAgIChjaGFyX3UgKikmcF9kaXIsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilERkxUX0RJUiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJkaXNwbGF5IiwJICAgICJkeSIsICAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9DT01NQXxQX1JBTEx8UF9OT0RVUCwKKwkJCSAgICAoY2hhcl91ICopJnBfZHksIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJlYWRpcmVjdGlvbiIsICJlYWQiLCAgUF9TVFJJTkd8UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkJCSAgICAoY2hhcl91ICopJnBfZWFkLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopImJvdGgiLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopTlVMTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImVkY29tcGF0aWJsZSIsImVkIiwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX2VkLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiZW5jb2RpbmciLCAgICAiZW5jIiwgIFBfU1RSSU5HfFBfVklfREVGfFBfUkNMUiwKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgKGNoYXJfdSAqKSZwX2VuYywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUVOQ19ERkxULCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJlbmRvZmxpbmUiLCAgICJlb2wiLCAgUF9CT09MfFBfTk9fTUtSQ3xQX1ZJX0RFRnxQX1JTVEFULAorCQkJICAgIChjaGFyX3UgKikmcF9lb2wsIFBWX0VPTCwKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsiZXF1YWxhbHdheXMiLCAiZWEiLCAgIFBfQk9PTHxQX1ZJX0RFRnxQX1JBTEwsCisJCQkgICAgKGNoYXJfdSAqKSZwX2VhLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopVFJVRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJlcXVhbHByZyIsICAgICJlcCIsICAgUF9TVFJJTkd8UF9FWFBBTkR8UF9WSV9ERUZ8UF9TRUNVUkUsCisJCQkgICAgKGNoYXJfdSAqKSZwX2VwLCBPUFRfQk9USChQVl9FUCksCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJlcnJvcmJlbGxzIiwgICJlYiIsICAgUF9CT09MfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9lYiwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImVycm9yZmlsZSIsICAgImVmIiwgICBQX1NUUklOR3xQX0VYUEFORHxQX1ZJX0RFRnxQX1NFQ1VSRSwKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJCQkgICAgKGNoYXJfdSAqKSZwX2VmLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopREZMVF9FUlJPUkZJTEUsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilOVUxMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiZXJyb3Jmb3JtYXQiLCAiZWZtIiwgIFBfU1RSSU5HfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJCQkgICAgKGNoYXJfdSAqKSZwX2VmbSwgT1BUX0JPVEgoUFZfRUZNKSwKKwkJCSAgICB7KGNoYXJfdSAqKURGTFRfRUZNLCAoY2hhcl91ICopMEx9LAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJlc2NrZXlzIiwJICAgICJlayIsICAgUF9CT09MfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF9laywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopVFJVRX19LAorICAgIHsiZXZlbnRpZ25vcmUiLCAiZWkiLCAgIFBfU1RSSU5HfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkJCSAgICAoY2hhcl91ICopJnBfZWksIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJleHBhbmR0YWIiLCAgICJldCIsICAgUF9CT09MfFBfVklfREVGfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF9ldCwgUFZfRVQsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJleHJjIiwJICAgICJleCIsICAgUF9CT09MfFBfVklfREVGfFBfU0VDVVJFLAorCQkJICAgIChjaGFyX3UgKikmcF9leHJjLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiZmlsZWVuY29kaW5nIiwiZmVuYyIsIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRnxQX1JTVEFUfFBfUkJVRnxQX05PX01LUkMsCisjaWZkZWYgRkVBVF9NQllURQorCQkJICAgIChjaGFyX3UgKikmcF9mZW5jLCBQVl9GRU5DLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImZpbGVlbmNvZGluZ3MiLCJmZW5jcyIsIFBfU1RSSU5HfFBfVklfREVGfFBfQ09NTUEsCisjaWZkZWYgRkVBVF9NQllURQorCQkJICAgIChjaGFyX3UgKikmcF9mZW5jcywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSJ1Y3MtYm9tIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiZmlsZWZvcm1hdCIsICAiZmYiLCAgIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRnxQX1JTVEFUfFBfTk9fTUtSQywKKwkJCSAgICAoY2hhcl91ICopJnBfZmYsIFBWX0ZGLAorCQkJICAgIHsoY2hhcl91ICopREZMVF9GRiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJmaWxlZm9ybWF0cyIsICJmZnMiLCAgUF9TVFJJTkd8UF9WSU18UF9DT01NQXxQX05PRFVQLAorCQkJICAgIChjaGFyX3UgKikmcF9mZnMsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilERkxUX0ZGU19WSSwgKGNoYXJfdSAqKURGTFRfRkZTX1ZJTX19LAorICAgIHsiZmlsZXR5cGUiLCAgICAiZnQiLCAgIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRnxQX05PR0xPQiwKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkJCSAgICAoY2hhcl91ICopJnBfZnQsIFBWX0ZULAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImZpbGxjaGFycyIsICAgImZjcyIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX1JBTEx8UF9DT01NQXxQX05PRFVQLAorI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKEZFQVRfRk9MRElORykKKwkJCSAgICAoY2hhcl91ICopJnBfZmNzLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopInZlcnQ6fCxmb2xkOi0iLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJma21hcCIsCSAgICAiZmsiLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX0ZLTUFQCisJCQkgICAgKGNoYXJfdSAqKSZwX2ZrbWFwLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiZmxhc2giLAkgICAgImZsIiwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgeyJmb2xkY2xvc2UiLCAgICJmY2wiLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9DT01NQXxQX05PRFVQfFBfUldJTiwKKwkJCSAgICAoY2hhcl91ICopJnBfZmNsLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsiZm9sZGNvbHVtbiIsICAiZmRjIiwgIFBfTlVNfFBfVklfREVGfFBfUldJTiwKKwkJCSAgICAoY2hhcl91ICopVkFSX1dJTiwgUFZfRkRDLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiZm9sZGVuYWJsZSIsICAiZmVuIiwgIFBfQk9PTHxQX1ZJX0RFRnxQX1JXSU4sCisJCQkgICAgKGNoYXJfdSAqKVZBUl9XSU4sIFBWX0ZFTiwKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsiZm9sZGV4cHIiLCAgICAiZmRlIiwgIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJTXxQX1ZJX0RFRnxQX1JXSU4sCisjIGlmZGVmIEZFQVRfRVZBTAorCQkJICAgIChjaGFyX3UgKilWQVJfV0lOLCBQVl9GREUsCisJCQkgICAgeyhjaGFyX3UgKikiMCIsIChjaGFyX3UgKilOVUxMfQorIyBlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilOVUxMLCAoY2hhcl91ICopMEx9CisjIGVuZGlmCisJCQkgICAgfSwKKyAgICB7ImZvbGRpZ25vcmUiLCAgImZkaSIsICBQX1NUUklOR3xQX0FMTE9DRUR8UF9WSU18UF9WSV9ERUZ8UF9SV0lOLAorCQkJICAgIChjaGFyX3UgKilWQVJfV0lOLCBQVl9GREksCisJCQkgICAgeyhjaGFyX3UgKikiIyIsIChjaGFyX3UgKilOVUxMfX0sCisgICAgeyJmb2xkbGV2ZWwiLCAgICJmZGwiLCAgUF9OVU18UF9WSV9ERUZ8UF9SV0lOLAorCQkJICAgIChjaGFyX3UgKilWQVJfV0lOLCBQVl9GREwsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJmb2xkbGV2ZWxzdGFydCIsImZkbHMiLCBQX05VTXxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfZmRscywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKS0xTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJmb2xkbWFya2VyIiwgICJmbXIiLCAgUF9TVFJJTkd8UF9BTExPQ0VEfFBfVklNfFBfVklfREVGfAorCQkJCQkJICAgICAgIFBfUldJTnxQX0NPTU1BfFBfTk9EVVAsCisJCQkgICAgKGNoYXJfdSAqKVZBUl9XSU4sIFBWX0ZNUiwKKwkJCSAgICB7KGNoYXJfdSAqKSJ7e3ssfX19IiwgKGNoYXJfdSAqKU5VTEx9fSwKKyAgICB7ImZvbGRtZXRob2QiLCAgImZkbSIsICBQX1NUUklOR3xQX0FMTE9DRUR8UF9WSU18UF9WSV9ERUZ8UF9SV0lOLAorCQkJICAgIChjaGFyX3UgKilWQVJfV0lOLCBQVl9GRE0sCisJCQkgICAgeyhjaGFyX3UgKikibWFudWFsIiwgKGNoYXJfdSAqKU5VTEx9fSwKKyAgICB7ImZvbGRtaW5saW5lcyIsImZtbCIsICBQX05VTXxQX1ZJX0RFRnxQX1JXSU4sCisJCQkgICAgKGNoYXJfdSAqKVZBUl9XSU4sIFBWX0ZNTCwKKwkJCSAgICB7KGNoYXJfdSAqKTFMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImZvbGRuZXN0bWF4IiwgImZkbiIsICBQX05VTXxQX1ZJX0RFRnxQX1JXSU4sCisJCQkgICAgKGNoYXJfdSAqKVZBUl9XSU4sIFBWX0ZETiwKKwkJCSAgICB7KGNoYXJfdSAqKTIwTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJmb2xkb3BlbiIsICAgICJmZG8iLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9DT01NQXxQX05PRFVQLAorCQkJICAgIChjaGFyX3UgKikmcF9mZG8sIFBWX05PTkUsCisJCSB7KGNoYXJfdSAqKSJibG9jayxob3IsbWFyayxwZXJjZW50LHF1aWNrZml4LHNlYXJjaCx0YWcsdW5kbyIsCisJCQkJCQkJICAgICAgIChjaGFyX3UgKikwTH19LAorICAgIHsiZm9sZHRleHQiLCAgICAiZmR0IiwgIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJTXxQX1ZJX0RFRnxQX1JXSU4sCisjIGlmZGVmIEZFQVRfRVZBTAorCQkJICAgIChjaGFyX3UgKilWQVJfV0lOLCBQVl9GRFQsCisJCQkgICAgeyhjaGFyX3UgKikiZm9sZHRleHQoKSIsIChjaGFyX3UgKilOVUxMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisjZW5kaWYKKyAgICB7ImZvcm1hdG9wdGlvbnMiLCJmbyIsICBQX1NUUklOR3xQX0FMTE9DRUR8UF9WSU18UF9GTEFHTElTVCwKKwkJCSAgICAoY2hhcl91ICopJnBfZm8sIFBWX0ZPLAorCQkJICAgIHsoY2hhcl91ICopREZMVF9GT19WSSwgKGNoYXJfdSAqKURGTFRfRk9fVklNfX0sCisgICAgeyJmb3JtYXRwcmciLCAgICJmcCIsICAgUF9TVFJJTkd8UF9FWFBBTkR8UF9WSV9ERUZ8UF9TRUNVUkUsCisJCQkgICAgKGNoYXJfdSAqKSZwX2ZwLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsiZ2RlZmF1bHQiLCAgICAiZ2QiLCAgIFBfQk9PTHxQX1ZJX0RFRnxQX1ZJTSwKKwkJCSAgICAoY2hhcl91ICopJnBfZ2QsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJncmFwaGljIiwJICAgICJnciIsICAgUF9CT09MfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiZ3JlcGZvcm1hdCIsICAiZ2ZtIiwgIFBfU1RSSU5HfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJCQkgICAgKGNoYXJfdSAqKSZwX2dlZm0sIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilERkxUX0dSRVBGT1JNQVQsIChjaGFyX3UgKikwTH0sCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopTlVMTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImdyZXBwcmciLAkgICAgImdwIiwgICBQX1NUUklOR3xQX0VYUEFORHxQX1ZJX0RFRnxQX1NFQ1VSRSwKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJCQkgICAgKGNoYXJfdSAqKSZwX2dwLCBPUFRfQk9USChQVl9HUCksCisJCQkgICAgeworIyBpZmRlZiBXSU4zMjY0CisJCQkgICAgLyogbWF5IGJlIGNoYW5nZWQgdG8gImdyZXAgLW4iIGluIG9zX3dpbjMyLmMgKi8KKwkJCSAgICAoY2hhcl91ICopImZpbmRzdHIgL24iLAorIyBlbHNlCisjICBpZmRlZiBVTklYCisJCQkgICAgLyogQWRkIGFuIGV4dHJhIGZpbGUgbmFtZSBzbyB0aGF0IGdyZXAgd2lsbCBhbHdheXMKKwkJCSAgICAgKiBpbnNlcnQgYSBmaWxlIG5hbWUgaW4gdGhlIG1hdGNoIGxpbmUuICovCisJCQkgICAgKGNoYXJfdSAqKSJncmVwIC1uICQqIC9kZXYvbnVsbCIsCisjICBlbHNlCisjICAgaWZkZWYgVk1TCisJCQkgICAgKGNoYXJfdSAqKSJTRUFSQ0gvTlVNQkVSUyAiLAorIyAgIGVsc2UKKwkJCSAgICAoY2hhcl91ICopImdyZXAgLW4gIiwKKyNlbmRpZgorI2VuZGlmCisjIGVuZGlmCisJCQkgICAgKGNoYXJfdSAqKTBMfSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilOVUxMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiZ3VpY3Vyc29yIiwgICAgImdjciIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisjaWZkZWYgQ1VSU09SX1NIQVBFCisJCQkgICAgKGNoYXJfdSAqKSZwX2d1aWN1cnNvciwgUFZfTk9ORSwKKwkJCSAgICB7CisjIGlmZGVmIEZFQVRfR1VJCisJCQkJKGNoYXJfdSAqKSJuLXYtYzpibG9jay1DdXJzb3IvbEN1cnNvcix2ZTp2ZXIzNS1DdXJzb3Isbzpob3I1MC1DdXJzb3IsaS1jaTp2ZXIyNS1DdXJzb3IvbEN1cnNvcixyLWNyOmhvcjIwLUN1cnNvci9sQ3Vyc29yLHNtOmJsb2NrLUN1cnNvci1ibGlua3dhaXQxNzUtYmxpbmtvZmYxNTAtYmxpbmtvbjE3NSIsCisjIGVsc2UJLyogTVNET1Mgb3IgV2luMzIgY29uc29sZSAqLworCQkJCShjaGFyX3UgKikibi12LWM6YmxvY2ssbzpob3I1MCxpLWNpOmhvcjE1LHItY3I6aG9yMzAsc206YmxvY2siLAorIyBlbmRpZgorCQkJCSAgICAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopTlVMTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkJICAgIH0sCisgICAgeyJndWlmb250IiwJICAgICJnZm4iLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9SQ0xSfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX0dVSQorCQkJICAgIChjaGFyX3UgKikmcF9ndWlmb250LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilOVUxMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCQkgICAgfSwKKyAgICB7Imd1aWZvbnRzZXQiLCAgImdmcyIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX1JDTFJ8UF9DT01NQSwKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKEZFQVRfWEZPTlRTRVQpCisJCQkgICAgKGNoYXJfdSAqKSZwX2d1aWZvbnRzZXQsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJCSAgICB9LAorICAgIHsiZ3VpZm9udHdpZGUiLCAiZ2Z3IiwgIFBfU1RSSU5HfFBfVklfREVGfFBfUkNMUnxQX0NPTU1BfFBfTk9EVVAsCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgJiYgZGVmaW5lZChGRUFUX01CWVRFKQorCQkJICAgIChjaGFyX3UgKikmcF9ndWlmb250d2lkZSwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopTlVMTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkJICAgIH0sCisgICAgeyJndWloZWFkcm9vbSIsICJnaHIiLCAgUF9OVU18UF9WSV9ERUYsCisjaWYgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfWDExKQorCQkJICAgIChjaGFyX3UgKikmcF9naHIsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKik1MEwsIChjaGFyX3UgKikwTH19LAorICAgIHsiZ3Vpb3B0aW9ucyIsICAiZ28iLCAgIFBfU1RSSU5HfFBfVklfREVGfFBfUkFMTHxQX0ZMQUdMSVNULAorI2lmIGRlZmluZWQoRkVBVF9HVUkpCisJCQkgICAgKGNoYXJfdSAqKSZwX2dvLCBQVl9OT05FLAorIyBpZiBkZWZpbmVkKFVOSVgpICYmICFkZWZpbmVkKE1BQ09TKQorCQkJICAgIHsoY2hhcl91ICopImFnaW1yTHRUIiwgKGNoYXJfdSAqKTBMfQorIyBlbHNlCisJCQkgICAgeyhjaGFyX3UgKikiZ21yTHRUIiwgKGNoYXJfdSAqKTBMfQorIyBlbmRpZgorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJCSAgICB9LAorICAgIHsiZ3VpcHR5IiwJICAgIE5VTEwsICAgUF9CT09MfFBfVklfREVGLAorI2lmIGRlZmluZWQoRkVBVF9HVUkpCisJCQkgICAgKGNoYXJfdSAqKSZwX2d1aXB0eSwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsiaGFyZHRhYnMiLCAgICAiaHQiLCAgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsiaGVscGZpbGUiLCAgICAiaGYiLCAgIFBfU1RSSU5HfFBfRVhQQU5EfFBfVklfREVGfFBfU0VDVVJFLAorCQkJICAgIChjaGFyX3UgKikmcF9oZiwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKURGTFRfSEVMUEZJTEUsIChjaGFyX3UgKikwTH19LAorICAgIHsiaGVscGhlaWdodCIsICAiaGgiLCAgIFBfTlVNfFBfVklfREVGLAorI2lmZGVmIEZFQVRfV0lORE9XUworCQkJICAgIChjaGFyX3UgKikmcF9oaCwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKTIwTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJoZWxwbGFuZyIsICAgICJobGciLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9DT01NQSwKKyNpZmRlZiBGRUFUX01VTFRJX0xBTkcKKwkJCSAgICAoY2hhcl91ICopJnBfaGxnLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisgICAgfSwKKyAgICB7ImhpZGRlbiIsCSAgICAiaGlkIiwgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfaGlkLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiaGlnaGxpZ2h0IiwgICAiaGwiLCAgIFBfU1RSSU5HfFBfVklfREVGfFBfUkNMUnxQX0NPTU1BfFBfTk9EVVAsCisJCQkgICAgKGNoYXJfdSAqKSZwX2hsLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIjg6U3BlY2lhbEtleSxAOk5vblRleHQsZDpEaXJlY3RvcnksZTpFcnJvck1zZyxpOkluY1NlYXJjaCxsOlNlYXJjaCxtOk1vcmVNc2csTTpNb2RlTXNnLG46TGluZU5yLHI6UXVlc3Rpb24sczpTdGF0dXNMaW5lLFM6U3RhdHVzTGluZU5DLGM6VmVydFNwbGl0LHQ6VGl0bGUsdjpWaXN1YWwsVjpWaXN1YWxOT1MsdzpXYXJuaW5nTXNnLFc6V2lsZE1lbnUsZjpGb2xkZWQsRjpGb2xkQ29sdW1uLEE6RGlmZkFkZCxDOkRpZmZDaGFuZ2UsRDpEaWZmRGVsZXRlLFQ6RGlmZlRleHQsPjpTaWduQ29sdW1uIiwKKwkJCQkoY2hhcl91ICopMEx9fSwKKyAgICB7Imhpc3RvcnkiLAkgICAgImhpIiwgICBQX05VTXxQX1ZJTSwKKwkJCSAgICAoY2hhcl91ICopJnBfaGksIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTIwTH19LAorICAgIHsiaGttYXAiLAkgICAgImhrIiwgICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJCSAgICAoY2hhcl91ICopJnBfaGttYXAsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJoa21hcHAiLAkgICAgImhrcCIsICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJCSAgICAoY2hhcl91ICopJnBfaGttYXBwLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiaGxzZWFyY2giLCAgICAiaGxzIiwgIFBfQk9PTHxQX1ZJX0RFRnxQX1ZJTXxQX1JBTEwsCisJCQkgICAgKGNoYXJfdSAqKSZwX2hscywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Imljb24iLAkgICAgTlVMTCwgICBQX0JPT0x8UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9USVRMRQorCQkJICAgIChjaGFyX3UgKikmcF9pY29uLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiaWNvbnN0cmluZyIsICBOVUxMLCAgIFBfU1RSSU5HfFBfVklfREVGLAorI2lmZGVmIEZFQVRfVElUTEUKKwkJCSAgICAoY2hhcl91ICopJnBfaWNvbnN0cmluZywgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Imlnbm9yZWNhc2UiLCAgImljIiwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX2ljLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiaW1hY3RpdmF0ZWtleSIsImltYWsiLFBfU1RSSU5HfFBfVklfREVGLAorI2lmIGRlZmluZWQoRkVBVF9YSU0pICYmIGRlZmluZWQoRkVBVF9HVUlfR1RLKQorCQkJICAgIChjaGFyX3UgKikmcF9pbWFrLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsiaW1jbWRsaW5lIiwgICAiaW1jIiwgIFBfQk9PTHxQX1ZJX0RFRiwKKyNpZmRlZiBVU0VfSU1fQ09OVFJPTAorCQkJICAgIChjaGFyX3UgKikmcF9pbWNtZGxpbmUsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJpbWRpc2FibGUiLCAgICJpbWQiLCAgUF9CT09MfFBfVklfREVGLAorI2lmZGVmIFVTRV9JTV9DT05UUk9MCisJCQkgICAgKGNoYXJfdSAqKSZwX2ltZGlzYWJsZSwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKyNpZmRlZiBfX3NnaQorCQkJICAgIHsoY2hhcl91ICopVFJVRSwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiaW1pbnNlcnQiLCAgICAiaW1pIiwgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9pbWluc2VydCwgUFZfSU1JLAorI2lmZGVmIEJfSU1PREVfSU0KKwkJCSAgICB7KGNoYXJfdSAqKUJfSU1PREVfSU0sIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgeyhjaGFyX3UgKilCX0lNT0RFX05PTkUsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJpbXNlYXJjaCIsICAgICJpbXMiLCAgUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX2ltc2VhcmNoLCBQVl9JTVMsCisjaWZkZWYgQl9JTU9ERV9JTQorCQkJICAgIHsoY2hhcl91ICopQl9JTU9ERV9JTSwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICB7KGNoYXJfdSAqKUJfSU1PREVfTk9ORSwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImluY2x1ZGUiLAkgICAgImluYyIsICBQX1NUUklOR3xQX0FMTE9DRUR8UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9GSU5EX0lECisJCQkgICAgKGNoYXJfdSAqKSZwX2luYywgT1BUX0JPVEgoUFZfSU5DKSwKKwkJCSAgICB7KGNoYXJfdSAqKSJeXFxzKiNcXHMqaW5jbHVkZSIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImluY2x1ZGVleHByIiwgImluZXgiLCBQX1NUUklOR3xQX0FMTE9DRUR8UF9WSV9ERUYsCisjaWYgZGVmaW5lZChGRUFUX0ZJTkRfSUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCQkJICAgIChjaGFyX3UgKikmcF9pbmV4LCBQVl9JTkVYLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7ImluY3NlYXJjaCIsICAgImlzIiwgICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisJCQkgICAgKGNoYXJfdSAqKSZwX2lzLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsiaW5kZW50ZXhwciIsICJpbmRlIiwgIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRnxQX1ZJTSwKKyNpZiBkZWZpbmVkKEZFQVRfQ0lOREVOVCkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCisJCQkgICAgKGNoYXJfdSAqKSZwX2luZGUsIFBWX0lOREUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiaW5kZW50a2V5cyIsICJpbmRrIiwgIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisjaWYgZGVmaW5lZChGRUFUX0NJTkRFTlQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCQkJICAgIChjaGFyX3UgKikmcF9pbmRrLCBQVl9JTkRLLAorCQkJICAgIHsoY2hhcl91ICopIjB7LDB9LDosMCMsIV5GLG8sTyxlIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsiaW5mZXJjYXNlIiwgICAiaW5mIiwgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfaW5mLCBQVl9JTkYsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJpbnNlcnRtb2RlIiwgICJpbSIsICAgUF9CT09MfFBfVklfREVGfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF9pbSwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImlzZm5hbWUiLAkgICAgImlzZiIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisJCQkgICAgKGNoYXJfdSAqKSZwX2lzZiwgUFZfTk9ORSwKKwkJCSAgICB7CisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJCQkJLyogRXhjbHVkZWQgYXJlOiAmIGFuZCBeIGFyZSBzcGVjaWFsIGluIGNtZC5leGUKKwkJCQkgKiAoIGFuZCApIGFyZSB1c2VkIGluIHRleHQgc2VwYXJhdGluZyBmbmFtZXMgKi8KKwkJCSAgICAoY2hhcl91ICopIkAsNDgtNTcsLyxcXCwuLC0sXywrLCwsIywkLCUseyx9LFssXSw6LEAtQCwhLH4sPSIsCisjZWxzZQorIyBpZmRlZiBBTUlHQQorCQkJICAgIChjaGFyX3UgKikiQCw0OC01NywvLC4sLSxfLCssLCwkLDoiLAorIyBlbHNlCisjICBpZmRlZiBWTVMKKwkJCSAgICAoY2hhcl91ICopIkAsNDgtNTcsLywuLC0sXywrLCwsIywkLCUsPCw+LFssXSw6LDssfiIsCisjICBlbHNlIC8qIFVOSVggZXQgYWwuICovCisjICAgaWZkZWYgRUJDRElDCisJCQkgICAgKGNoYXJfdSAqKSJALDI0MC0yNDksLywuLC0sXywrLCwsIywkLCUsfiw9IiwKKyMgICBlbHNlCisJCQkgICAgKGNoYXJfdSAqKSJALDQ4LTU3LC8sLiwtLF8sKywsLCMsJCwlLH4sPSIsCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKwkJCQkoY2hhcl91ICopMEx9fSwKKyAgICB7ImlzaWRlbnQiLAkgICAgImlzaSIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisJCQkgICAgKGNoYXJfdSAqKSZwX2lzaSwgUFZfTk9ORSwKKwkJCSAgICB7CisjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChNU1dJTikgfHwgZGVmaW5lZChPUzIpCisJCQkgICAgKGNoYXJfdSAqKSJALDQ4LTU3LF8sMTI4LTE2NywyMjQtMjM1IiwKKyNlbHNlCisjIGlmZGVmIEVCQ0RJQworCQkJICAgIC8qIFRPRE86IEVCQ0RJQyBDaGVjayB0aGlzISBAID09IGlzYWxwaGEoKSovCisJCQkgICAgKGNoYXJfdSAqKSJALDI0MC0yNDksXyw2Ni03Myw4MS04OSw5OC0xMDUsIgorCQkJCSAgICAiMTEyLTEyMCwxMjgsMTQwLTE0MiwxNTYsMTU4LDE3MiwiCisJCQkJICAgICIxNzQsMTg2LDE5MSwyMDMtMjA3LDIxOS0yMjUsMjM1LTIzOSwiCisJCQkJICAgICIyNTEtMjU0IiwKKyMgZWxzZQorCQkJICAgIChjaGFyX3UgKikiQCw0OC01NyxfLDE5Mi0yNTUiLAorIyBlbmRpZgorI2VuZGlmCisJCQkJKGNoYXJfdSAqKTBMfX0sCisgICAgeyJpc2tleXdvcmQiLCAgICJpc2siLCAgUF9TVFJJTkd8UF9BTExPQ0VEfFBfVklNfFBfQ09NTUF8UF9OT0RVUCwKKwkJCSAgICAoY2hhcl91ICopJnBfaXNrLCBQVl9JU0ssCisJCQkgICAgeworI2lmZGVmIEVCQ0RJQworCQkJICAgICAoY2hhcl91ICopIkAsMjQwLTI0OSxfIiwKKwkJCSAgICAgLyogVE9ETzogRUJDRElDIENoZWNrIHRoaXMhIEAgPT0gaXNhbHBoYSgpKi8KKwkJCSAgICAgKGNoYXJfdSAqKSJALDI0MC0yNDksXyw2Ni03Myw4MS04OSw5OC0xMDUsIgorCQkJCSAgICAiMTEyLTEyMCwxMjgsMTQwLTE0MiwxNTYsMTU4LDE3MiwiCisJCQkJICAgICIxNzQsMTg2LDE5MSwyMDMtMjA3LDIxOS0yMjUsMjM1LTIzOSwiCisJCQkJICAgICIyNTEtMjU0IiwKKyNlbHNlCisJCQkJKGNoYXJfdSAqKSJALDQ4LTU3LF8iLAorIyBpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKE9TMikKKwkJCQkoY2hhcl91ICopIkAsNDgtNTcsXywxMjgtMTY3LDIyNC0yMzUiCisjIGVsc2UKKwkJCQkoY2hhcl91ICopIkAsNDgtNTcsXywxOTItMjU1IgorIyBlbmRpZgorI2VuZGlmCisJCQkJfX0sCisgICAgeyJpc3ByaW50IiwJICAgICJpc3AiLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9SQUxMfFBfQ09NTUF8UF9OT0RVUCwKKwkJCSAgICAoY2hhcl91ICopJnBfaXNwLCBQVl9OT05FLAorCQkJICAgIHsKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChNQUNPUykgXAorCQl8fCBkZWZpbmVkKFZNUykKKwkJCSAgICAoY2hhcl91ICopIkAsfi0yNTUiLAorI2Vsc2UKKyMgaWZkZWYgRUJDRElDCisJCQkgICAgLyogYWxsIGNoYXJzIGFib3ZlIDYzIGFyZSBwcmludGFibGUgKi8KKwkJCSAgICAoY2hhcl91ICopIjYzLTI1NSIsCisjIGVsc2UKKwkJCSAgICAoY2hhcl91ICopIkAsMTYxLTI1NSIsCisjIGVuZGlmCisjZW5kaWYKKwkJCQkoY2hhcl91ICopMEx9fSwKKyAgICB7ImpvaW5zcGFjZXMiLCAgImpzIiwgICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisJCQkgICAgKGNoYXJfdSAqKSZwX2pzLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopVFJVRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJrZXkiLAkgICAgTlVMTCwgICBQX1NUUklOR3xQX0FMTE9DRUR8UF9WSV9ERUZ8UF9OT19NS1JDLAorI2lmZGVmIEZFQVRfQ1JZUFQKKwkJCSAgICAoY2hhcl91ICopJnBfa2V5LCBQVl9LRVksCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsia2V5bWFwIiwJICAgICJrbXAiLCAgUF9TVFJJTkd8UF9BTExPQ0VEfFBfVklfREVGfFBfUkJVRnxQX1JTVEFULAorI2lmZGVmIEZFQVRfS0VZTUFQCisJCQkgICAgKGNoYXJfdSAqKSZwX2tleW1hcCwgUFZfS01BUCwKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCX0sCisgICAgeyJrZXltb2RlbCIsICAgICJrbSIsICAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9DT01NQXxQX05PRFVQLAorI2lmZGVmIEZFQVRfVklTVUFMCisJCQkgICAgKGNoYXJfdSAqKSZwX2ttLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsia2V5d29yZHByZyIsICAia3AiLCAgIFBfU1RSSU5HfFBfRVhQQU5EfFBfVklfREVGfFBfU0VDVVJFLAorCQkJICAgIChjaGFyX3UgKikmcF9rcCwgT1BUX0JPVEgoUFZfS1ApLAorCQkJICAgIHsKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKQorCQkJICAgIChjaGFyX3UgKikiOmhlbHAiLAorI2Vsc2UKKyNpZmRlZiBWTVMKKwkJCSAgICAoY2hhcl91ICopImhlbHAiLAorI2Vsc2UKKyMgaWYgZGVmaW5lZChPUzIpCisJCQkgICAgKGNoYXJfdSAqKSJ2aWV3IC8iLAorIyBlbHNlCisjICBpZmRlZiBVU0VNQU5fUworCQkJICAgIChjaGFyX3UgKikibWFuIC1zIiwKKyMgIGVsc2UKKwkJCSAgICAoY2hhcl91ICopIm1hbiIsCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisjZW5kaWYKKwkJCQkoY2hhcl91ICopMEx9fSwKKyAgICB7ImxhbmdtYXAiLCAgICAgImxtYXAiLCBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisjaWZkZWYgRkVBVF9MQU5HTUFQCisJCQkgICAgKGNoYXJfdSAqKSZwX2xhbmdtYXAsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwJLyogdW5tYXRjaGVkIH0gKi8KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilOVUxMLAorI2VuZGlmCisJCQkJKGNoYXJfdSAqKTBMfX0sCisgICAgeyJsYW5nbWVudSIsICAgICJsbSIsICAgUF9TVFJJTkd8UF9WSV9ERUYsCisjaWYgZGVmaW5lZChGRUFUX01FTlUpICYmIGRlZmluZWQoRkVBVF9NVUxUSV9MQU5HKQorCQkJICAgIChjaGFyX3UgKikmcF9sbSwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Imxhc3RzdGF0dXMiLCAgImxzIiwgICBQX05VTXxQX1ZJX0RFRnxQX1JBTEwsCisjaWZkZWYgRkVBVF9XSU5ET1dTCisJCQkgICAgKGNoYXJfdSAqKSZwX2xzLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopMUwsIChjaGFyX3UgKikwTH19LAorICAgIHsibGF6eXJlZHJhdyIsICAibHoiLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfbHosIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJsaW5lYnJlYWsiLCAgICJsYnIiLCAgUF9CT09MfFBfVklfREVGfFBfUldJTiwKKyNpZmRlZiBGRUFUX0xJTkVCUkVBSworCQkJICAgIChjaGFyX3UgKilWQVJfV0lOLCBQVl9MQlIsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJsaW5lcyIsCSAgICBOVUxMLCAgIFBfTlVNfFBfTk9ERUZBVUxUfFBfTk9fTUtSQ3xQX1ZJX0RFRnxQX1JDTFIsCisJCQkgICAgKGNoYXJfdSAqKSZSb3dzLCBQVl9OT05FLAorCQkJICAgIHsKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTjMyNjQpIHx8IGRlZmluZWQoT1MyKQorCQkJICAgIChjaGFyX3UgKikyNUwsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKikyNEwsCisjZW5kaWYKKwkJCQkJICAgIChjaGFyX3UgKikwTH19LAorICAgIHsibGluZXNwYWNlIiwgICAibHNwIiwgIFBfTlVNfFBfVklfREVGfFBfUkNMUiwKKyNpZmRlZiBGRUFUX0dVSQorCQkJICAgIChjaGFyX3UgKikmcF9saW5lc3BhY2UsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisjaWZkZWYgRkVBVF9HVUlfVzMyCisJCQkgICAgeyhjaGFyX3UgKikxTCwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsibGlzcCIsCSAgICBOVUxMLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX0xJU1AKKwkJCSAgICAoY2hhcl91ICopJnBfbGlzcCwgUFZfTElTUCwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Imxpc3B3b3JkcyIsICAgImx3IiwgICBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisjaWZkZWYgRkVBVF9MSVNQCisJCQkgICAgKGNoYXJfdSAqKSZwX2xpc3B3b3JkcywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUxJU1BXT1JEX1ZBTFVFLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJsaXN0IiwJICAgIE5VTEwsICAgUF9CT09MfFBfVklfREVGfFBfUldJTiwKKwkJCSAgICAoY2hhcl91ICopVkFSX1dJTiwgUFZfTElTVCwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Imxpc3RjaGFycyIsICAgImxjcyIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX1JBTEx8UF9DT01NQXxQX05PRFVQLAorCQkJICAgIChjaGFyX3UgKikmcF9sY3MsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiZW9sOiQiLCAoY2hhcl91ICopMEx9fSwKKyAgICB7ImxvYWRwbHVnaW5zIiwgImxwbCIsICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX2xwbCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsibWFnaWMiLAkgICAgTlVMTCwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX21hZ2ljLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopVFJVRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJtYWtlZWYiLAkgICAgIm1lZiIsICAgUF9TVFJJTkd8UF9FWFBBTkR8UF9WSV9ERUZ8UF9TRUNVUkUsCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCQkJICAgIChjaGFyX3UgKikmcF9tZWYsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJtYWtlcHJnIiwJICAgICJtcCIsICAgUF9TVFJJTkd8UF9FWFBBTkR8UF9WSV9ERUZ8UF9TRUNVUkUsCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCQkJICAgIChjaGFyX3UgKikmcF9tcCwgT1BUX0JPVEgoUFZfTVApLAorIyBpZmRlZiBWTVMKKwkJCSAgICB7KGNoYXJfdSAqKSJNTVMiLCAoY2hhcl91ICopMEx9CisjIGVsc2UKKwkJCSAgICB7KGNoYXJfdSAqKSJtYWtlIiwgKGNoYXJfdSAqKTBMfQorIyBlbmRpZgorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJtYXRjaHBhaXJzIiwgICJtcHMiLCAgUF9TVFJJTkd8UF9BTExPQ0VEfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKwkJCSAgICAoY2hhcl91ICopJnBfbXBzLCBQVl9NUFMsCisJCQkgICAgeyhjaGFyX3UgKikiKDopLHs6fSxbOl0iLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Im1hdGNodGltZSIsICAgIm1hdCIsICBQX05VTXxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfbWF0LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopNUwsIChjaGFyX3UgKikwTH19LAorICAgIHsibWF4ZnVuY2RlcHRoIiwgIm1mZCIsIFBfTlVNfFBfVklfREVGLAorI2lmZGVmIEZFQVRfRVZBTAorCQkJICAgIChjaGFyX3UgKikmcF9tZmQsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKikxMDBMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Im1heG1hcGRlcHRoIiwgIm1tZCIsICBQX05VTXxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfbW1kLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMTAwMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsibWF4bWVtIiwJICAgICJtbSIsICAgUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX21tLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopREZMVF9NQVhNRU0sIChjaGFyX3UgKikwTH19LAorICAgIHsibWF4bWVtdG90IiwgICAibW10IiwgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9tbXQsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilERkxUX01BWE1FTVRPVCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJtZW51aXRlbXMiLCAgICJtaXMiLCAgUF9OVU18UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9NRU5VCisJCQkgICAgKGNoYXJfdSAqKSZwX21pcywgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKTI1TCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJtZXNnIiwJICAgIE5VTEwsICAgUF9CT09MfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsibW9kZWxpbmUiLCAgICAibWwiLCAgIFBfQk9PTHxQX1ZJTSwKKwkJCSAgICAoY2hhcl91ICopJnBfbWwsIFBWX01MLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKilUUlVFfX0sCisgICAgeyJtb2RlbGluZXMiLCAgICJtbHMiLCAgUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX21scywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTVMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Im1vZGlmaWFibGUiLCAgIm1hIiwgICBQX0JPT0x8UF9WSV9ERUZ8UF9OT0dMT0IsCisJCQkgICAgKGNoYXJfdSAqKSZwX21hLCBQVl9NQSwKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsibW9kaWZpZWQiLCAgICAibW9kIiwgIFBfQk9PTHxQX05PX01LUkN8UF9WSV9ERUZ8UF9SU1RBVCwKKwkJCSAgICAoY2hhcl91ICopJnBfbW9kLCBQVl9NT0QsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJtb3JlIiwJICAgIE5VTEwsICAgUF9CT09MfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF9tb3JlLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKilUUlVFfX0sCisgICAgeyJtb3VzZSIsCSAgICBOVUxMLCAgIFBfU1RSSU5HfFBfVklfREVGfFBfRkxBR0xJU1QsCisJCQkgICAgKGNoYXJfdSAqKSZwX21vdXNlLCBQVl9OT05FLAorCQkJICAgIHsKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTjMyNjQpCisJCQkJKGNoYXJfdSAqKSJhIiwKKyNlbHNlCisJCQkJKGNoYXJfdSAqKSIiLAorI2VuZGlmCisJCQkJKGNoYXJfdSAqKTBMfX0sCisgICAgeyJtb3VzZWZvY3VzIiwgICAibW91c2VmIiwgUF9CT09MfFBfVklfREVGLAorI2lmZGVmIEZFQVRfR1VJCisJCQkgICAgKGNoYXJfdSAqKSZwX21vdXNlZiwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Im1vdXNlaGlkZSIsICAgIm1oIiwgICBQX0JPT0x8UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9HVUkKKwkJCSAgICAoY2hhcl91ICopJnBfbWgsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilUUlVFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Im1vdXNlbW9kZWwiLCAgIm1vdXNlbSIsIFBfU1RSSU5HfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9tb3VzZW0sIFBWX05PTkUsCisJCQkgICAgeworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pCisJCQkJKGNoYXJfdSAqKSJwb3B1cCIsCisjZWxzZQorIyBpZiBkZWZpbmVkKE1BQ09TKQorCQkJCShjaGFyX3UgKikicG9wdXBfc2V0cG9zIiwKKyMgZWxzZQorCQkJCShjaGFyX3UgKikiZXh0ZW5kIiwKKyMgZW5kaWYKKyNlbmRpZgorCQkJCShjaGFyX3UgKikwTH19LAorICAgIHsibW91c2VzaGFwZSIsICAibW91c2VzIiwgIFBfU1RSSU5HfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX01PVVNFU0hBUEUKKwkJCSAgICAoY2hhcl91ICopJnBfbW91c2VzaGFwZSwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSJpLXI6YmVhbSxzOnVwZG93bixzZDp1ZHNpemluZyx2czpsZWZ0cmlnaHQsdmQ6bHJzaXppbmcsbTpubyxtbDp1cC1hcnJvdyx2OnJpZ2h0dXAtYXJyb3ciLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopTlVMTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7Im1vdXNldGltZSIsICAgIm1vdXNldCIsCVBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9tb3VzZXQsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKik1MDBMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Im5vdmljZSIsCSAgICBOVUxMLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Im5yZm9ybWF0cyIsICAgIm5mIiwgICBQX1NUUklOR3xQX0FMTE9DRUR8UF9WSV9ERUZ8UF9DT01NQXxQX05PRFVQLAorCQkJICAgIChjaGFyX3UgKikmcF9uZiwgUFZfTkYsCisJCQkgICAgeyhjaGFyX3UgKikib2N0YWwsaGV4IiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJudW1iZXIiLAkgICAgIm51IiwgICBQX0JPT0x8UF9WSV9ERUZ8UF9SV0lOLAorCQkJICAgIChjaGFyX3UgKilWQVJfV0lOLCBQVl9OVSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Im9wZW4iLAkgICAgTlVMTCwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJvcHRpbWl6ZSIsICAgICJvcHQiLCAgUF9CT09MfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsib3NmaWxldHlwZSIsICAib2Z0IiwgIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX09TRklMRVRZUEUKKwkJCSAgICAoY2hhcl91ICopJnBfb2Z0LCBQVl9PRlQsCisJCQkgICAgeyhjaGFyX3UgKilERkxUX09GVCwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsicGFyYWdyYXBocyIsICAicGFyYSIsIFBfU1RSSU5HfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9wYXJhLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIklQTFBQUFFQUCBMSXBwbHBpcGJwIiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJwYXN0ZSIsCSAgICBOVUxMLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfcGFzdGUsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJwYXN0ZXRvZ2dsZSIsICJwdCIsICAgUF9TVFJJTkd8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3B0LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsicGF0Y2hleHByIiwgICAicGV4IiwgIFBfU1RSSU5HfFBfVklfREVGfFBfU0VDVVJFLAorI2lmIGRlZmluZWQoRkVBVF9ESUZGKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwkJCSAgICAoY2hhcl91ICopJnBfcGV4LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7InBhdGNobW9kZSIsICAgInBtIiwgICBQX1NUUklOR3xQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfcG0sIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJwYXRoIiwJICAgICJwYSIsICAgUF9TVFJJTkd8UF9FWFBBTkR8UF9WSV9ERUZ8UF9DT01NQXxQX05PRFVQLAorCQkJICAgIChjaGFyX3UgKikmcF9wYXRoLCBPUFRfQk9USChQVl9QQVRIKSwKKwkJCSAgICB7CisjaWYgZGVmaW5lZCBBTUlHQSB8fCBkZWZpbmVkIE1TRE9TIHx8IGRlZmluZWQgTVNXSU4KKwkJCSAgICAoY2hhcl91ICopIi4sLCIsCisjZWxzZQorIyBpZiBkZWZpbmVkKF9fRU1YX18pCisJCQkgICAgKGNoYXJfdSAqKSIuLC9lbXgvaW5jbHVkZSwsIiwKKyMgZWxzZSAvKiBVbml4LCBwcm9iYWJseSAqLworCQkJICAgIChjaGFyX3UgKikiLiwvdXNyL2luY2x1ZGUsLCIsCisjIGVuZGlmCisjZW5kaWYKKwkJCQkoY2hhcl91ICopMEx9fSwKKyAgICB7InByZXNlcnZlaW5kZW50IiwgInBpIiwgUF9CT09MfFBfVklfREVGfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF9waSwgUFZfUEksCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJwcmV2aWV3aGVpZ2h0IiwgInB2aCIsUF9OVU18UF9WSV9ERUYsCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKwkJCSAgICAoY2hhcl91ICopJnBfcHZoLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopMTJMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InByZXZpZXd3aW5kb3ciLCAicHZ3IiwgUF9CT09MfFBfVklfREVGfFBfUlNUQVR8UF9OT0dMT0IsCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKwkJCSAgICAoY2hhcl91ICopVkFSX1dJTiwgUFZfUFZXLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsicHJpbnRkZXZpY2UiLCAicGRldiIsIFBfU1RSSU5HfFBfVklfREVGLAorI2lmZGVmIEZFQVRfUFJJTlRFUgorCQkJICAgIChjaGFyX3UgKikmcF9wZGV2LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilOVUxMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsicHJpbnRlbmNvZGluZyIsICJwZW5jIiwgUF9TVFJJTkd8UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9QT1NUU0NSSVBUCisJCQkgICAgKGNoYXJfdSAqKSZwX3BlbmMsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJwcmludGV4cHIiLCAicGV4cHIiLCAgUF9TVFJJTkd8UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9QT1NUU0NSSVBUCisJCQkgICAgKGNoYXJfdSAqKSZwX3BleHByLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilOVUxMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsicHJpbnRmb250IiwgInBmbiIsICAgIFBfU1RSSU5HfFBfVklfREVGLAorI2lmZGVmIEZFQVRfUFJJTlRFUgorCQkJICAgIChjaGFyX3UgKikmcF9wZm4sIFBWX05PTkUsCisJCQkgICAgeworIyBpZmRlZiBNU1dJTgorCQkJCShjaGFyX3UgKikiQ291cmllcl9OZXc6aDEwIiwKKyMgZWxzZQorCQkJCShjaGFyX3UgKikiY291cmllciIsCisjIGVuZGlmCisJCQkJKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJwcmludGhlYWRlciIsICJwaGVhZGVyIiwgIFBfU1RSSU5HfFBfVklfREVGfFBfR0VUVEVYVCwKKyNpZmRlZiBGRUFUX1BSSU5URVIKKwkJCSAgICAoY2hhcl91ICopJnBfaGVhZGVyLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopTl8oIiU8JWYlaCVtJT1QYWdlICVOIiksIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilOVUxMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsicHJpbnRvcHRpb25zIiwgInBvcHQiLCBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisjaWZkZWYgRkVBVF9QUklOVEVSCisJCQkgICAgKGNoYXJfdSAqKSZwX3BvcHQsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJwcm9tcHQiLAkgICAgTlVMTCwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJyZWFkb25seSIsICAgICJybyIsICAgUF9CT09MfFBfVklfREVGfFBfUlNUQVR8UF9OT0dMT0IsCisJCQkgICAgKGNoYXJfdSAqKSZwX3JvLCBQVl9STywKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InJlZHJhdyIsCSAgICBOVUxMLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InJlbWFwIiwJICAgIE5VTEwsICAgUF9CT09MfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9yZW1hcCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsicmVwb3J0IiwJICAgIE5VTEwsICAgUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3JlcG9ydCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTJMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InJlc3RvcmVzY3JlZW4iLCAicnMiLCBQX0JPT0x8UF9WSV9ERUYsCisjaWZkZWYgV0lOMzI2NAorCQkJICAgIChjaGFyX3UgKikmcF9ycywgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsicmV2aW5zIiwJICAgICJyaSIsICAgUF9CT09MfFBfVklfREVGfFBfVklNLAorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCQkgICAgKGNoYXJfdSAqKSZwX3JpLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsicmlnaHRsZWZ0IiwgICAicmwiLCAgIFBfQk9PTHxQX1ZJX0RFRnxQX1JXSU4sCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJCSAgICAoY2hhcl91ICopVkFSX1dJTiwgUFZfUkwsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJyaWdodGxlZnRjbWQiLCAicmxjIiwgUF9TVFJJTkd8UF9BTExPQ0VEfFBfVklfREVGfFBfUldJTiwKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkJICAgIChjaGFyX3UgKilWQVJfV0lOLCBQVl9STEMsCisJCQkgICAgeyhjaGFyX3UgKikic2VhcmNoIiwgKGNoYXJfdSAqKU5VTEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopTlVMTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7InJ1bGVyIiwJICAgICJydSIsICAgUF9CT09MfFBfVklfREVGfFBfVklNfFBfUlNUQVQsCisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwkJCSAgICAoY2hhcl91ICopJnBfcnUsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJydWxlcmZvcm1hdCIsICJydWYiLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9BTExPQ0VEfFBfUlNUQVQsCisjaWZkZWYgRkVBVF9TVExfT1BUCisJCQkgICAgKGNoYXJfdSAqKSZwX3J1ZiwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InJ1bnRpbWVwYXRoIiwgInJ0cCIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX0VYUEFORHxQX0NPTU1BfFBfTk9EVVB8UF9TRUNVUkUsCisJCQkgICAgKGNoYXJfdSAqKSZwX3J0cCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKURGTFRfUlVOVElNRVBBVEgsIChjaGFyX3UgKikwTH19LAorICAgIHsic2Nyb2xsIiwJICAgICJzY3IiLCAgUF9OVU18UF9OT19NS1JDfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKilWQVJfV0lOLCBQVl9TQ1JPTEwsCisJCQkgICAgeyhjaGFyX3UgKikxMkwsIChjaGFyX3UgKikwTH19LAorICAgIHsic2Nyb2xsYmluZCIsICAic2NiIiwgIFBfQk9PTHxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX1NDUk9MTEJJTkQKKwkJCSAgICAoY2hhcl91ICopVkFSX1dJTiwgUFZfU0NCSU5ELAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsic2Nyb2xsanVtcCIsICAic2oiLCAgIFBfTlVNfFBfVklfREVGfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF9zaiwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTFMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InNjcm9sbG9mZiIsICAgInNvIiwgICBQX05VTXxQX1ZJX0RFRnxQX1ZJTXxQX1JBTEwsCisJCQkgICAgKGNoYXJfdSAqKSZwX3NvLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsic2Nyb2xsb3B0IiwgICAic2JvIiwgIFBfU1RSSU5HfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX1NDUk9MTEJJTkQKKwkJCSAgICAoY2hhcl91ICopJnBfc2JvLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopInZlcixqdW1wIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsic2VjdGlvbnMiLCAgICAic2VjdCIsIFBfU1RSSU5HfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9zZWN0aW9ucywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSJTSE5ISCBIVW5oc2giLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InNlY3VyZSIsCSAgICBOVUxMLCAgIFBfQk9PTHxQX1ZJX0RFRnxQX1NFQ1VSRSwKKwkJCSAgICAoY2hhcl91ICopJnBfc2VjdXJlLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsic2VsZWN0aW9uIiwgICAic2VsIiwgIFBfU1RSSU5HfFBfVklfREVGLAorI2lmZGVmIEZFQVRfVklTVUFMCisJCQkgICAgKGNoYXJfdSAqKSZwX3NlbCwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKSJpbmNsdXNpdmUiLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InNlbGVjdG1vZGUiLCAgInNsbSIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJCSAgICAoY2hhcl91ICopJnBfc2xtLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsic2Vzc2lvbm9wdGlvbnMiLCAic3NvcCIsIFBfU1RSSU5HfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX1NFU1NJT04KKwkJCSAgICAoY2hhcl91ICopJnBfc3NvcCwgUFZfTk9ORSwKKwkJIHsoY2hhcl91ICopImJsYW5rLGJ1ZmZlcnMsY3VyZGlyLGZvbGRzLGhlbHAsb3B0aW9ucyx3aW5zaXplIiwKKwkJCQkJCQkgICAgICAgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsic2hlbGwiLAkgICAgInNoIiwgICBQX1NUUklOR3xQX0VYUEFORHxQX1ZJX0RFRnxQX1NFQ1VSRSwKKwkJCSAgICAoY2hhcl91ICopJnBfc2gsIFBWX05PTkUsCisJCQkgICAgeworI2lmZGVmIFZNUworCQkJICAgIChjaGFyX3UgKikiLSIsCisjZWxzZQorIyBpZiBkZWZpbmVkKE1TRE9TKQorCQkJICAgIChjaGFyX3UgKikiY29tbWFuZCIsCisjIGVsc2UKKyMgIGlmIGRlZmluZWQoV0lOMTYpCisJCQkgICAgKGNoYXJfdSAqKSJjb21tYW5kLmNvbSIsCisjICBlbHNlCisjICAgaWYgZGVmaW5lZChXSU4zMjY0KQorCQkJICAgIChjaGFyX3UgKikiIiwJLyogc2V0IGluIHNldF9pbml0XzEoKSAqLworIyAgIGVsc2UKKyMgICAgaWYgZGVmaW5lZChPUzIpCisJCQkgICAgKGNoYXJfdSAqKSJjbWQuZXhlIiwKKyMgICAgZWxzZQorIyAgICAgaWYgZGVmaW5lZChBUkNISUUpCisJCQkgICAgKGNoYXJfdSAqKSJnb3MiLAorIyAgICAgZWxzZQorCQkJICAgIChjaGFyX3UgKikic2giLAorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiBWTVMgKi8KKwkJCQkoY2hhcl91ICopMEx9fSwKKyAgICB7InNoZWxsY21kZmxhZyIsInNoY2YiLCBQX1NUUklOR3xQX1ZJX0RFRnxQX1NFQ1VSRSwKKwkJCSAgICAoY2hhcl91ICopJnBfc2hjZiwgUFZfTk9ORSwKKwkJCSAgICB7CisjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChNU1dJTikKKwkJCSAgICAoY2hhcl91ICopIi9jIiwKKyNlbHNlCisjIGlmIGRlZmluZWQoT1MyKQorCQkJICAgIChjaGFyX3UgKikiL2MiLAorIyBlbHNlCisJCQkgICAgKGNoYXJfdSAqKSItYyIsCisjIGVuZGlmCisjZW5kaWYKKwkJCQkoY2hhcl91ICopMEx9fSwKKyAgICB7InNoZWxscGlwZSIsICAgInNwIiwgICBQX1NUUklOR3xQX1ZJX0RFRnxQX1NFQ1VSRSwKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJCQkgICAgKGNoYXJfdSAqKSZwX3NwLCBQVl9OT05FLAorCQkJICAgIHsKKyNpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoT1MyKQorIyBpZmRlZiBBUkNISUUKKwkJCSAgICAoY2hhcl91ICopIjI+IiwKKyMgZWxzZQorCQkJICAgIChjaGFyX3UgKikifCB0ZWUiLAorIyBlbmRpZgorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopIj4iLAorI2VuZGlmCisJCQkJKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKyAgICB9LAorICAgIHsic2hlbGxxdW90ZSIsICAic2hxIiwgIFBfU1RSSU5HfFBfVklfREVGfFBfU0VDVVJFLAorCQkJICAgIChjaGFyX3UgKikmcF9zaHEsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJzaGVsbHJlZGlyIiwgICJzcnIiLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9TRUNVUkUsCisJCQkgICAgKGNoYXJfdSAqKSZwX3NyciwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSI+IiwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJzaGVsbHNsYXNoIiwgICJzc2wiLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKwkJCSAgICAoY2hhcl91ICopJnBfc3NsLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsic2hlbGx0eXBlIiwgICAic3QiLCAgIFBfTlVNfFBfVklfREVGLAorI2lmZGVmIEFNSUdBCisJCQkgICAgKGNoYXJfdSAqKSZwX3N0LCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsic2hlbGx4cXVvdGUiLCAic3hxIiwgIFBfU1RSSU5HfFBfVklfREVGfFBfU0VDVVJFLAorCQkJICAgIChjaGFyX3UgKikmcF9zeHEsIFBWX05PTkUsCisJCQkgICAgeworI2lmIGRlZmluZWQoVU5JWCkgJiYgZGVmaW5lZChVU0VfU1lTVEVNKSAmJiAhZGVmaW5lZChfX0VNWF9fKQorCQkJICAgIChjaGFyX3UgKikiXCIiLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopIiIsCisjZW5kaWYKKwkJCQkoY2hhcl91ICopMEx9fSwKKyAgICB7InNoaWZ0cm91bmQiLCAgInNyIiwgICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisJCQkgICAgKGNoYXJfdSAqKSZwX3NyLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsic2hpZnR3aWR0aCIsICAic3ciLCAgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9zdywgUFZfU1csCisJCQkgICAgeyhjaGFyX3UgKik4TCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJzaG9ydG1lc3MiLCAgICJzaG0iLCAgUF9TVFJJTkd8UF9WSU18UF9GTEFHTElTVCwKKwkJCSAgICAoY2hhcl91ICopJnBfc2htLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikiZmlsbnh0VG9PIn19LAorICAgIHsic2hvcnRuYW1lIiwgICAic24iLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKyNpZmRlZiBTSE9SVF9GTkFNRQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopJnBfc24sIFBWX1NOLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJzaG93YnJlYWsiLCAgICJzYnIiLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9SQUxMLAorI2lmZGVmIEZFQVRfTElORUJSRUFLCisJCQkgICAgKGNoYXJfdSAqKSZwX3NiciwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InNob3djbWQiLAkgICAgInNjIiwgICBQX0JPT0x8UF9WSU0sCisjaWZkZWYgRkVBVF9DTURMX0lORk8KKwkJCSAgICAoY2hhcl91ICopJnBfc2MsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwKKyNpZmRlZiBVTklYCisJCQkJKGNoYXJfdSAqKUZBTFNFCisjZWxzZQorCQkJCShjaGFyX3UgKilUUlVFCisjZW5kaWYKKwkJCQl9fSwKKyAgICB7InNob3dmdWxsdGFnIiwgInNmdCIsICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3NmdCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InNob3dtYXRjaCIsICAgInNtIiwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3NtLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsic2hvd21vZGUiLCAgICAic21kIiwgIFBfQk9PTHxQX1ZJTSwKKwkJCSAgICAoY2hhcl91ICopJnBfc21kLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKilUUlVFfX0sCisgICAgeyJzaWRlc2Nyb2xsIiwgICJzcyIsICAgUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3NzLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsic2lkZXNjcm9sbG9mZiIsICJzaXNvIiwgUF9OVU18UF9WSV9ERUZ8UF9WSU18UF9SQlVGLAorCQkJICAgIChjaGFyX3UgKikmcF9zaXNvLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsic2xvd29wZW4iLCAgICAic2xvdyIsIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InNtYXJ0Y2FzZSIsICAgInNjcyIsICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisJCQkgICAgKGNoYXJfdSAqKSZwX3NjcywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InNtYXJ0aW5kZW50IiwgInNpIiwgICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisjaWZkZWYgRkVBVF9TTUFSVElOREVOVAorCQkJICAgIChjaGFyX3UgKikmcF9zaSwgUFZfU0ksCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJzbWFydHRhYiIsICAgICJzdGEiLCAgUF9CT09MfFBfVklfREVGfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF9zdGEsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJzb2Z0dGFic3RvcCIsICJzdHMiLCAgUF9OVU18UF9WSV9ERUZ8UF9WSU0sCisJCQkgICAgKGNoYXJfdSAqKSZwX3N0cywgUFZfU1RTLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsic291cmNlYW55IiwgICBOVUxMLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InNwbGl0YmVsb3ciLCAgInNiIiwgICBQX0JPT0x8UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9XSU5ET1dTCisJCQkgICAgKGNoYXJfdSAqKSZwX3NiLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsic3BsaXRyaWdodCIsICAic3ByIiwgIFBfQk9PTHxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQkJICAgIChjaGFyX3UgKikmcF9zcHIsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJzdGFydG9mbGluZSIsICJzb2wiLCAgUF9CT09MfFBfVklfREVGfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF9zb2wsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilUUlVFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InN0YXR1c2xpbmUiICAsInN0bCIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX0FMTE9DRUR8UF9SU1RBVCwKKyNpZmRlZiBGRUFUX1NUTF9PUFQKKwkJCSAgICAoY2hhcl91ICopJnBfc3RsLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsic3VmZml4ZXMiLCAgICAic3UiLCAgIFBfU1RSSU5HfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKwkJCSAgICAoY2hhcl91ICopJnBfc3UsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiLmJhayx+LC5vLC5oLC5pbmZvLC5zd3AsLm9iaiIsCisJCQkJKGNoYXJfdSAqKTBMfX0sCisgICAgeyJzdWZmaXhlc2FkZCIsICJzdWEiLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9BTExPQ0VEfFBfQ09NTUF8UF9OT0RVUCwKKyNpZiBkZWZpbmVkKEZFQVRfU0VBUkNIUEFUSCkKKwkJCSAgICAoY2hhcl91ICopJnBfc3VhLCBQVl9TVUEsCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsic3dhcGZpbGUiLCAgICAic3dmIiwgIFBfQk9PTHxQX1ZJX0RFRnxQX1JTVEFULAorCQkJICAgIChjaGFyX3UgKikmcF9zd2YsIFBWX1NXRiwKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsic3dhcHN5bmMiLCAgICAic3dzIiwgIFBfU1RSSU5HfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF9zd3MsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiZnN5bmMiLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InN3aXRjaGJ1ZiIsICAgInN3YiIsICBQX1NUUklOR3xQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisJCQkgICAgKGNoYXJfdSAqKSZwX3N3YiwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InN5bnRheCIsCSAgICAic3luIiwgIFBfU1RSSU5HfFBfQUxMT0NFRHxQX1ZJX0RFRnxQX05PR0xPQiwKKyNpZmRlZiBGRUFUX1NZTl9ITAorCQkJICAgIChjaGFyX3UgKikmcF9zeW4sIFBWX1NZTiwKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJ0YWJzdG9wIiwJICAgICJ0cyIsICAgUF9OVU18UF9WSV9ERUZ8UF9SQlVGLAorCQkJICAgIChjaGFyX3UgKikmcF90cywgUFZfVFMsCisJCQkgICAgeyhjaGFyX3UgKik4TCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ0YWdic2VhcmNoIiwgICJ0YnMiLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfdGJzLCBQVl9OT05FLAorI2lmZGVmIFZNUwkvKiBiaW5hcnkgc2VhcmNoaW5nIGRvZXNuJ3QgYXBwZWFyIHRvIHdvcmsgb24gVk1TICovCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJ0YWdsZW5ndGgiLCAgICJ0bCIsICAgUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3RsLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsidGFncmVsYXRpdmUiLCAidHIiLCAgIFBfQk9PTHxQX1ZJTSwKKwkJCSAgICAoY2hhcl91ICopJnBfdHIsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKVRSVUV9fSwKKyAgICB7InRhZ3MiLAkgICAgInRhZyIsICBQX1NUUklOR3xQX0VYUEFORHxQX1ZJX0RFRnxQX0NPTU1BfFBfTk9EVVAsCisJCQkgICAgKGNoYXJfdSAqKSZwX3RhZ3MsIE9QVF9CT1RIKFBWX1RBR1MpLAorCQkJICAgIHsKKyNpZiBkZWZpbmVkKEZFQVRfRU1BQ1NfVEFHUykgJiYgIWRlZmluZWQoQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRSkKKwkJCSAgICAoY2hhcl91ICopIi4vdGFncywuL1RBR1MsdGFncyxUQUdTIiwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKSIuL3RhZ3MsdGFncyIsCisjZW5kaWYKKwkJCQkoY2hhcl91ICopMEx9fSwKKyAgICB7InRhZ3N0YWNrIiwgICAgInRnc3QiLCBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3Rnc3QsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilUUlVFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InRlcm0iLAkgICAgTlVMTCwgICBQX1NUUklOR3xQX0VYUEFORHxQX05PREVGQVVMVHxQX05PX01LUkN8UF9WSV9ERUZ8UF9SQUxMLAorCQkJICAgIChjaGFyX3UgKikmVF9OQU1FLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsidGVybWJpZGkiLCAidGJpZGkiLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX0FSQUJJQworCQkJICAgIChjaGFyX3UgKikmcF90YmlkaSwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InRlcm1lbmNvZGluZyIsICJ0ZW5jIiwgUF9TVFJJTkd8UF9WSV9ERUZ8UF9SQ0xSLAorI2lmZGVmIEZFQVRfTUJZVEUKKwkJCSAgICAoY2hhcl91ICopJnBfdGVuYywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJ0ZXJzZSIsCSAgICBOVUxMLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfdGVyc2UsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ0ZXh0YXV0byIsICAgICJ0YSIsICAgUF9CT09MfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF90YSwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKURGTFRfVEVYVEFVVE8sIChjaGFyX3UgKilUUlVFfX0sCisgICAgeyJ0ZXh0bW9kZSIsICAgICJ0eCIsICAgUF9CT09MfFBfVklfREVGfFBfTk9fTUtSQywKKwkJCSAgICAoY2hhcl91ICopJnBfdHgsIFBWX1RYLAorCQkJICAgIHsKKyNpZmRlZiBVU0VfQ1JOTAorCQkJICAgIChjaGFyX3UgKilUUlVFLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopRkFMU0UsCisjZW5kaWYKKwkJCQkoY2hhcl91ICopMEx9fSwKKyAgICB7InRleHR3aWR0aCIsICAgInR3IiwgICBQX05VTXxQX1ZJX0RFRnxQX1ZJTSwKKwkJCSAgICAoY2hhcl91ICopJnBfdHcsIFBWX1RXLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsidGhlc2F1cnVzIiwgICAidHNyIiwgIFBfU1RSSU5HfFBfRVhQQU5EfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkJCSAgICAoY2hhcl91ICopJnBfdHNyLCBPUFRfQk9USChQVl9UU1IpLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsidGlsZGVvcCIsCSAgICAidG9wIiwgIFBfQk9PTHxQX1ZJX0RFRnxQX1ZJTSwKKwkJCSAgICAoY2hhcl91ICopJnBfdG8sIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ0aW1lb3V0IiwJICAgICJ0byIsICAgUF9CT09MfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF90aW1lb3V0LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopVFJVRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ0aW1lb3V0bGVuIiwgICJ0bSIsICAgUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3RtLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMTAwMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsidGl0bGUiLAkgICAgTlVMTCwgICBQX0JPT0x8UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9USVRMRQorCQkJICAgIChjaGFyX3UgKikmcF90aXRsZSwgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InRpdGxlbGVuIiwgICAgTlVMTCwgICBQX05VTXxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX1RJVExFCisJCQkgICAgKGNoYXJfdSAqKSZwX3RpdGxlbGVuLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopODVMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InRpdGxlb2xkIiwgICAgTlVMTCwgICBQX1NUUklOR3xQX1ZJX0RFRnxQX0dFVFRFWFQsCisjaWZkZWYgRkVBVF9USVRMRQorCQkJICAgIChjaGFyX3UgKikmcF90aXRsZW9sZCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5fKCJUaGFua3MgZm9yIGZseWluZyBWaW0iKSwKKwkJCQkJCQkgICAgICAgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICB9LAorICAgIHsidGl0bGVzdHJpbmciLCBOVUxMLCAgIFBfU1RSSU5HfFBfVklfREVGLAorI2lmZGVmIEZFQVRfVElUTEUKKwkJCSAgICAoY2hhcl91ICopJnBfdGl0bGVzdHJpbmcsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfX0sCisjaWYgZGVmaW5lZChGRUFUX1RPT0xCQVIpICYmICFkZWZpbmVkKEZFQVRfR1VJX1czMikKKyAgICB7InRvb2xiYXIiLCAgICAgInRiIiwgICBQX1NUUklOR3xQX0NPTU1BfFBfVklfREVGfFBfTk9EVVAsCisJCQkgICAgKGNoYXJfdSAqKSZwX3Rvb2xiYXIsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiaWNvbnMsdG9vbHRpcHMiLCAoY2hhcl91ICopMEx9fSwKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0dUSykgJiYgZGVmaW5lZChIQVZFX0dUSzIpCisgICAgeyJ0b29sYmFyaWNvbnNpemUiLAkidGJpcyIsIFBfU1RSSU5HfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF90YmlzLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopInNtYWxsIiwgKGNoYXJfdSAqKTBMfX0sCisjZW5kaWYKKyAgICB7InR0aW1lb3V0IiwgICAgTlVMTCwgICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisJCQkgICAgKGNoYXJfdSAqKSZwX3R0aW1lb3V0LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAorICAgIHsidHRpbWVvdXRsZW4iLCAidHRtIiwgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF90dG0sIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKiktMUwsIChjaGFyX3UgKikwTH19LAorICAgIHsidHR5YnVpbHRpbiIsICAidGJpIiwgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfdGJpLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopVFJVRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ0dHlmYXN0IiwJICAgICJ0ZiIsICAgUF9CT09MfFBfTk9fTUtSQ3xQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfdGYsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ0dHltb3VzZSIsICAgICJ0dHltIiwgUF9TVFJJTkd8UF9OT0RFRkFVTFR8UF9OT19NS1JDfFBfVklfREVGLAorI2lmIGRlZmluZWQoRkVBVF9NT1VTRSkgJiYgKGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpKQorCQkJICAgIChjaGFyX3UgKikmcF90dHltLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsidHR5c2Nyb2xsIiwgICAidHNsIiwgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF90dHlzY3JvbGwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKik5OTlMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InR0eXR5cGUiLAkgICAgInR0eSIsICBQX1NUUklOR3xQX0VYUEFORHxQX05PREVGQVVMVHxQX05PX01LUkN8UF9WSV9ERUZ8UF9SQUxMLAorCQkJICAgIChjaGFyX3UgKikmVF9OQU1FLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsidW5kb2xldmVscyIsICAidWwiLCAgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF91bCwgUFZfTk9ORSwKKwkJCSAgICB7CisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFdJTjMyNjQpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFZNUykKKwkJCSAgICAoY2hhcl91ICopMTAwMEwsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKikxMDBMLAorI2VuZGlmCisJCQkJKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ1cGRhdGVjb3VudCIsICJ1YyIsICAgUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3VjLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMjAwTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ1cGRhdGV0aW1lIiwgICJ1dCIsICAgUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3V0LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopNDAwMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsidmVyYm9zZSIsCSAgICAidmJzIiwgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF92ZXJib3NlLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsidmlld2RpciIsICAgICAidmRpciIsIFBfU1RSSU5HfFBfRVhQQU5EfFBfVklfREVGfFBfU0VDVVJFLAorI2lmZGVmIEZFQVRfU0VTU0lPTgorCQkJICAgIChjaGFyX3UgKikmcF92ZGlyLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopREZMVF9WRElSLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJ2aWV3b3B0aW9ucyIsICJ2b3AiLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9DT01NQXxQX05PRFVQLAorI2lmZGVmIEZFQVRfU0VTU0lPTgorCQkJICAgIChjaGFyX3UgKikmcF92b3AsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiZm9sZHMsb3B0aW9ucyxjdXJzb3IiLCAoY2hhcl91ICopMEx9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJ2aW1pbmZvIiwJICAgICJ2aSIsICAgUF9TVFJJTkd8UF9DT01NQXxQX05PRFVQfFBfU0VDVVJFLAorI2lmZGVmIEZFQVRfVklNSU5GTworCQkJICAgIChjaGFyX3UgKikmcF92aW1pbmZvLCBQVl9OT05FLAorI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoT1MyKQorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikiJzIwLDw1MCxzMTAsaCxyQTosckI6In0KKyNlbHNlCisjIGlmZGVmIEFNSUdBCisJCQkgICAgeyhjaGFyX3UgKikiIiwKKwkJCQkgKGNoYXJfdSAqKSInMjAsPDUwLHMxMCxoLHJkZjA6LHJkZjE6LHJkZjI6In0KKyMgZWxzZQorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikiJzIwLDw1MCxzMTAsaCJ9CisjIGVuZGlmCisjZW5kaWYKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisJCQkgICAgfSwKKyAgICB7InZpcnR1YWxlZGl0IiwgInZlIiwgICBQX1NUUklOR3xQX0NPTU1BfFBfTk9EVVB8UF9WSV9ERUZ8UF9WSU0sCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCQkJICAgIChjaGFyX3UgKikmcF92ZSwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSIiLCAoY2hhcl91ICopIiJ9CisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJ2aXN1YWxiZWxsIiwgICJ2YiIsICAgUF9CT09MfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF92YiwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7InczMDAiLAkgICAgTlVMTCwgICBQX05VTXxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7IncxMjAwIiwJICAgIE5VTEwsICAgUF9OVU18UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ3OTYwMCIsCSAgICBOVUxMLCAgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsid2FybiIsCSAgICBOVUxMLCAgIFBfQk9PTHxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfd2FybiwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsid2VpcmRpbnZlcnQiLCAid2l2IiwgIFBfQk9PTHxQX1ZJX0RFRnxQX1JDTFIsCisJCQkgICAgKGNoYXJfdSAqKSZwX3dpdiwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7IndoaWNod3JhcCIsICAgInd3IiwgICBQX1NUUklOR3xQX1ZJTXxQX0NPTU1BfFBfRkxBR0xJU1QsCisJCQkgICAgKGNoYXJfdSAqKSZwX3d3LCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikiYixzIn19LAorICAgIHsid2lsZGNoYXIiLCAgICAid2MiLCAgIFBfTlVNfFBfVklNLAorCQkJICAgIChjaGFyX3UgKikmcF93YywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKShsb25nKUN0cmxfRSwgKGNoYXJfdSAqKShsb25nKVRBQn19LAorICAgIHsid2lsZGNoYXJtIiwgICAid2NtIiwgICBQX05VTXxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopJnBfd2NtLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH19LAorICAgIHsid2lsZGlnbm9yZSIsICAid2lnIiwgIFBfU1RSSU5HfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKKyNpZmRlZiBGRUFUX1dJTERJR04KKwkJCSAgICAoY2hhcl91ICopJnBfd2lnLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorICAgIHsid2lsZG1lbnUiLCAgICAid21udSIsIFBfQk9PTHxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX1dJTERNRU5VCisJCQkgICAgKGNoYXJfdSAqKSZwX3dtbnUsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ3aWxkbW9kZSIsICAgICJ3aW0iLCAgUF9TVFJJTkd8UF9WSV9ERUZ8UF9DT01NQXxQX05PRFVQLAorCQkJICAgIChjaGFyX3UgKikmcF93aW0sIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiZnVsbCIsIChjaGFyX3UgKikwTH19LAorICAgIHsid2luYWx0a2V5cyIsICAid2FrIiwgIFBfU1RSSU5HfFBfVklfREVGLAorI2lmZGVmIEZFQVRfV0FLCisJCQkgICAgKGNoYXJfdSAqKSZwX3dhaywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSJtZW51IiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKU5VTEwsIChjaGFyX3UgKikwTH0KKyNlbmRpZgorCQkJICAgIH0sCisgICAgeyJ3aW5kb3ciLAkgICAgIndpIiwgICBQX05VTXxQX1ZJX0RFRiwKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9fSwKKyAgICB7IndpbmhlaWdodCIsICAgIndoIiwgICBQX05VTXxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkJCSAgICAoY2hhcl91ICopJnBfd2gsIFBWX05PTkUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKikxTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ3aW5maXhoZWlnaHQiLCAid2ZoIiwgUF9CT09MfFBfVklfREVGfFBfUlNUQVQsCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpCisJCQkgICAgKGNoYXJfdSAqKVZBUl9XSU4sIFBWX1dGSCwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7Indpbm1pbmhlaWdodCIsICJ3bWgiLCBQX05VTXxQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkJCSAgICAoY2hhcl91ICopJnBfd21oLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopMUwsIChjaGFyX3UgKikwTH19LAorICAgIHsid2lubWlud2lkdGgiLCAid213IiwgUF9OVU18UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkJCSAgICAoY2hhcl91ICopJnBfd213LCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopMUwsIChjaGFyX3UgKikwTH19LAorICAgIHsid2lud2lkdGgiLCAgICJ3aXciLCAgIFBfTlVNfFBfVklfREVGLAorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJCQkgICAgKGNoYXJfdSAqKSZwX3dpdywgUFZfTk9ORSwKKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisjZW5kaWYKKwkJCSAgICB7KGNoYXJfdSAqKTIwTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ3cmFwIiwJICAgIE5VTEwsICAgUF9CT09MfFBfVklfREVGfFBfUldJTiwKKwkJCSAgICAoY2hhcl91ICopVkFSX1dJTiwgUFZfV1JBUCwKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsid3JhcG1hcmdpbiIsICAid20iLCAgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF93bSwgUFZfV00sCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ3cmFwc2NhbiIsICAgICJ3cyIsICAgUF9CT09MfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF93cywgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKVRSVUUsIChjaGFyX3UgKikwTH19LAorICAgIHsid3JpdGUiLAkgICAgTlVMTCwgICBQX0JPT0x8UF9WSV9ERUYsCisJCQkgICAgKGNoYXJfdSAqKSZwX3dyaXRlLCBQVl9OT05FLAorCQkJICAgIHsoY2hhcl91ICopVFJVRSwgKGNoYXJfdSAqKTBMfX0sCisgICAgeyJ3cml0ZWFueSIsICAgICJ3YSIsICAgUF9CT09MfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF93YSwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKUZBTFNFLCAoY2hhcl91ICopMEx9fSwKKyAgICB7IndyaXRlYmFja3VwIiwgIndiIiwgICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisJCQkgICAgKGNoYXJfdSAqKSZwX3diLCBQVl9OT05FLAorCQkJICAgIHsKKyNpZmRlZiBGRUFUX1dSSVRFQkFDS1VQCisJCQkgICAgKGNoYXJfdSAqKVRSVUUsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilGQUxTRSwKKyNlbmRpZgorCQkJCShjaGFyX3UgKikwTH19LAorICAgIHsid3JpdGVkZWxheSIsICAid2QiLCAgIFBfTlVNfFBfVklfREVGLAorCQkJICAgIChjaGFyX3UgKikmcF93ZCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9fSwKKworLyogdGVybWluYWwgb3V0cHV0IGNvZGVzICovCisjZGVmaW5lIHBfdGVybShzc3MsIHZ2dikgICB7c3NzLCBOVUxMLCBQX1NUUklOR3xQX1ZJX0RFRnxQX1JBTEwsIFwKKwkJCSAgICAoY2hhcl91ICopJnZ2diwgUFZfTk9ORSwgXAorCQkJICAgIHsoY2hhcl91ICopIiIsIChjaGFyX3UgKikwTH19LAorCisgICAgcF90ZXJtKCJ0X0FCIiwgVF9DQUIpCisgICAgcF90ZXJtKCJ0X0FGIiwgVF9DQUYpCisgICAgcF90ZXJtKCJ0X0FMIiwgVF9DQUwpCisgICAgcF90ZXJtKCJ0X2FsIiwgVF9BTCkKKyAgICBwX3Rlcm0oInRfYmMiLCBUX0JDKQorICAgIHBfdGVybSgidF9jZCIsIFRfQ0QpCisgICAgcF90ZXJtKCJ0X2NlIiwgVF9DRSkKKyAgICBwX3Rlcm0oInRfY2wiLCBUX0NMKQorICAgIHBfdGVybSgidF9jbSIsIFRfQ00pCisgICAgcF90ZXJtKCJ0X0NvIiwgVF9DQ08pCisgICAgcF90ZXJtKCJ0X0NTIiwgVF9DQ1MpCisgICAgcF90ZXJtKCJ0X2NzIiwgVF9DUykKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIHBfdGVybSgidF9DViIsIFRfQ1NWKQorI2VuZGlmCisgICAgcF90ZXJtKCJ0X3V0IiwgVF9VVCkKKyAgICBwX3Rlcm0oInRfZGEiLCBUX0RBKQorICAgIHBfdGVybSgidF9kYiIsIFRfREIpCisgICAgcF90ZXJtKCJ0X0RMIiwgVF9DREwpCisgICAgcF90ZXJtKCJ0X2RsIiwgVF9ETCkKKyAgICBwX3Rlcm0oInRfZnMiLCBUX0ZTKQorICAgIHBfdGVybSgidF9JRSIsIFRfQ0lFKQorICAgIHBfdGVybSgidF9JUyIsIFRfQ0lTKQorICAgIHBfdGVybSgidF9rZSIsIFRfS0UpCisgICAgcF90ZXJtKCJ0X2tzIiwgVF9LUykKKyAgICBwX3Rlcm0oInRfbGUiLCBUX0xFKQorICAgIHBfdGVybSgidF9tYiIsIFRfTUIpCisgICAgcF90ZXJtKCJ0X21kIiwgVF9NRCkKKyAgICBwX3Rlcm0oInRfbWUiLCBUX01FKQorICAgIHBfdGVybSgidF9tciIsIFRfTVIpCisgICAgcF90ZXJtKCJ0X21zIiwgVF9NUykKKyAgICBwX3Rlcm0oInRfbmQiLCBUX05EKQorICAgIHBfdGVybSgidF9vcCIsIFRfT1ApCisgICAgcF90ZXJtKCJ0X1JJIiwgVF9DUkkpCisgICAgcF90ZXJtKCJ0X1JWIiwgVF9DUlYpCisgICAgcF90ZXJtKCJ0X1NiIiwgVF9DU0IpCisgICAgcF90ZXJtKCJ0X1NmIiwgVF9DU0YpCisgICAgcF90ZXJtKCJ0X3NlIiwgVF9TRSkKKyAgICBwX3Rlcm0oInRfc28iLCBUX1NPKQorICAgIHBfdGVybSgidF9zciIsIFRfU1IpCisgICAgcF90ZXJtKCJ0X3RzIiwgVF9UUykKKyAgICBwX3Rlcm0oInRfdGUiLCBUX1RFKQorICAgIHBfdGVybSgidF90aSIsIFRfVEkpCisgICAgcF90ZXJtKCJ0X3VlIiwgVF9VRSkKKyAgICBwX3Rlcm0oInRfdXMiLCBUX1VTKQorICAgIHBfdGVybSgidF92YiIsIFRfVkIpCisgICAgcF90ZXJtKCJ0X3ZlIiwgVF9WRSkKKyAgICBwX3Rlcm0oInRfdmkiLCBUX1ZJKQorICAgIHBfdGVybSgidF92cyIsIFRfVlMpCisgICAgcF90ZXJtKCJ0X1dQIiwgVF9DV1ApCisgICAgcF90ZXJtKCJ0X1dTIiwgVF9DV1MpCisgICAgcF90ZXJtKCJ0X3hzIiwgVF9YUykKKyAgICBwX3Rlcm0oInRfWkgiLCBUX0NaSCkKKyAgICBwX3Rlcm0oInRfWlIiLCBUX0NaUikKKworLyogdGVybWluYWwga2V5IGNvZGVzIGFyZSBub3QgaW4gaGVyZSAqLworCisgICAge05VTEwsIE5VTEwsIDAsIE5VTEwsIFBWX05PTkUsIHtOVUxMLCBOVUxMfX0JLyogZW5kIG1hcmtlciAqLworfTsKKworI2RlZmluZSBQQVJBTV9DT1VOVCAoc2l6ZW9mKG9wdGlvbnMpIC8gc2l6ZW9mKHN0cnVjdCB2aW1vcHRpb24pKQorCisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIGNoYXIgKihwX2FtYndfdmFsdWVzW10pID0geyJzaW5nbGUiLCAiZG91YmxlIiwgTlVMTH07CisjZW5kaWYKK3N0YXRpYyBjaGFyICoocF9iZ192YWx1ZXNbXSkgPSB7ImxpZ2h0IiwgImRhcmsiLCBOVUxMfTsKK3N0YXRpYyBjaGFyICoocF9uZl92YWx1ZXNbXSkgPSB7Im9jdGFsIiwgImhleCIsICJhbHBoYSIsIE5VTEx9Oworc3RhdGljIGNoYXIgKihwX2ZmX3ZhbHVlc1tdKSA9IHtGRl9VTklYLCBGRl9ET1MsIEZGX01BQywgTlVMTH07CisjaWZkZWYgRkVBVF9XQUsKK3N0YXRpYyBjaGFyICoocF93YWtfdmFsdWVzW10pID0geyJ5ZXMiLCAibWVudSIsICJubyIsIE5VTEx9OworI2VuZGlmCitzdGF0aWMgY2hhciAqKHBfbW91c2VtX3ZhbHVlc1tdKSA9IHsiZXh0ZW5kIiwgInBvcHVwIiwgInBvcHVwX3NldHBvcyIsICJtYWMiLCBOVUxMfTsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorc3RhdGljIGNoYXIgKihwX3NlbF92YWx1ZXNbXSkgPSB7ImluY2x1c2l2ZSIsICJleGNsdXNpdmUiLCAib2xkIiwgTlVMTH07CitzdGF0aWMgY2hhciAqKHBfc2xtX3ZhbHVlc1tdKSA9IHsibW91c2UiLCAia2V5IiwgImNtZCIsIE5VTEx9OworI2VuZGlmCisjaWZkZWYgRkVBVF9WSVNVQUwKK3N0YXRpYyBjaGFyICoocF9rbV92YWx1ZXNbXSkgPSB7InN0YXJ0c2VsIiwgInN0b3BzZWwiLCBOVUxMfTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQlJPV1NFCitzdGF0aWMgY2hhciAqKHBfYnNkaXJfdmFsdWVzW10pID0geyJjdXJyZW50IiwgImxhc3QiLCAiYnVmZmVyIiwgTlVMTH07CisjZW5kaWYKKyNpZmRlZiBGRUFUX1NDUk9MTEJJTkQKK3N0YXRpYyBjaGFyICoocF9zY2JvcHRfdmFsdWVzW10pID0geyJ2ZXIiLCAiaG9yIiwgImp1bXAiLCBOVUxMfTsKKyNlbmRpZgorc3RhdGljIGNoYXIgKihwX3N3Yl92YWx1ZXNbXSkgPSB7InVzZW9wZW4iLCAic3BsaXQiLCBOVUxMfTsKK3N0YXRpYyBjaGFyICoocF9kZWJ1Z192YWx1ZXNbXSkgPSB7Im1zZyIsIE5VTEx9OworI2lmZGVmIEZFQVRfVkVSVFNQTElUCitzdGF0aWMgY2hhciAqKHBfZWFkX3ZhbHVlc1tdKSA9IHsiYm90aCIsICJ2ZXIiLCAiaG9yIiwgTlVMTH07CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpCitzdGF0aWMgY2hhciAqKHBfYnVmdHlwZV92YWx1ZXNbXSkgPSB7Im5vZmlsZSIsICJub3dyaXRlIiwgInF1aWNrZml4IiwgImhlbHAiLCBOVUxMfTsKK3N0YXRpYyBjaGFyICoocF9idWZoaWRkZW5fdmFsdWVzW10pID0geyJoaWRlIiwgInVubG9hZCIsICJkZWxldGUiLCAid2lwZSIsIE5VTEx9OworI2VuZGlmCitzdGF0aWMgY2hhciAqKHBfYnNfdmFsdWVzW10pID0geyJpbmRlbnQiLCAiZW9sIiwgInN0YXJ0IiwgTlVMTH07CisjaWZkZWYgRkVBVF9GT0xESU5HCitzdGF0aWMgY2hhciAqKHBfZmRtX3ZhbHVlc1tdKSA9IHsibWFudWFsIiwgImV4cHIiLCAibWFya2VyIiwgImluZGVudCIsICJzeW50YXgiLAorI2lmZGVmIEZFQVRfRElGRgorCQkJCSJkaWZmIiwKKyNlbmRpZgorCQkJCU5VTEx9Oworc3RhdGljIGNoYXIgKihwX2ZjbF92YWx1ZXNbXSkgPSB7ImFsbCIsIE5VTEx9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNldF9vcHRpb25fZGVmYXVsdCBfX0FSR1MoKGludCwgaW50IG9wdF9mbGFncywgaW50IGNvbXBhdGlibGUpKTsKK3N0YXRpYyB2b2lkIHNldF9vcHRpb25zX2RlZmF1bHQgX19BUkdTKChpbnQgb3B0X2ZsYWdzKSk7CitzdGF0aWMgY2hhcl91ICppbGxlZ2FsX2NoYXIgX19BUkdTKChjaGFyX3UgKiwgaW50KSk7CitzdGF0aWMgaW50IHN0cmluZ190b19rZXkgX19BUkdTKChjaGFyX3UgKmFyZykpOworI2lmZGVmIEZFQVRfQ01EV0lOCitzdGF0aWMgY2hhcl91ICpjaGVja19jZWRpdCBfX0FSR1MoKHZvaWQpKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfVElUTEUKK3N0YXRpYyB2b2lkIGRpZF9zZXRfdGl0bGUgX19BUkdTKChpbnQgaWNvbikpOworI2VuZGlmCitzdGF0aWMgY2hhcl91ICpvcHRpb25fZXhwYW5kIF9fQVJHUygoaW50IG9wdF9pZHgsIGNoYXJfdSAqdmFsKSk7CitzdGF0aWMgdm9pZCBkaWRzZXRfb3B0aW9ucyBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGNoZWNrX3N0cmluZ19vcHRpb24gX19BUkdTKChjaGFyX3UgKipwcCkpOworc3RhdGljIHZvaWQgc2V0X3N0cmluZ19vcHRpb25fZ2xvYmFsIF9fQVJHUygoaW50IG9wdF9pZHgsIGNoYXJfdSAqKnZhcnApKTsKK3N0YXRpYyB2b2lkIHNldF9zdHJpbmdfb3B0aW9uIF9fQVJHUygoaW50IG9wdF9pZHgsIGNoYXJfdSAqdmFsdWUsIGludCBvcHRfZmxhZ3MpKTsKK3N0YXRpYyBjaGFyX3UgKmRpZF9zZXRfc3RyaW5nX29wdGlvbiBfX0FSR1MoKGludCBvcHRfaWR4LCBjaGFyX3UgKip2YXJwLCBpbnQgbmV3X3ZhbHVlX2FsbG9jZWQsIGNoYXJfdSAqb2xkdmFsLCBjaGFyX3UgKmVycmJ1ZiwgaW50IG9wdF9mbGFncykpOworc3RhdGljIGNoYXJfdSAqc2V0X2NoYXJzX29wdGlvbiBfX0FSR1MoKGNoYXJfdSAqKnZhcnApKTsKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorc3RhdGljIGNoYXJfdSAqY2hlY2tfY2xpcGJvYXJkX29wdGlvbiBfX0FSR1MoKHZvaWQpKTsKKyNlbmRpZgorc3RhdGljIGNoYXJfdSAqc2V0X2Jvb2xfb3B0aW9uIF9fQVJHUygoaW50IG9wdF9pZHgsIGNoYXJfdSAqdmFycCwgaW50IHZhbHVlLCBpbnQgb3B0X2ZsYWdzKSk7CitzdGF0aWMgY2hhcl91ICpzZXRfbnVtX29wdGlvbiBfX0FSR1MoKGludCBvcHRfaWR4LCBjaGFyX3UgKnZhcnAsIGxvbmcgdmFsdWUsIGNoYXJfdSAqZXJyYnVmLCBpbnQgb3B0X2ZsYWdzKSk7CitzdGF0aWMgdm9pZCBjaGVja19yZWRyYXcgX19BUkdTKChsb25nX3UgZmxhZ3MpKTsKK3N0YXRpYyBpbnQgZmluZG9wdGlvbiBfX0FSR1MoKGNoYXJfdSAqKSk7CitzdGF0aWMgaW50IGZpbmRfa2V5X29wdGlvbiBfX0FSR1MoKGNoYXJfdSAqKSk7CitzdGF0aWMgdm9pZCBzaG93b3B0aW9ucyBfX0FSR1MoKGludCBhbGwsIGludCBvcHRfZmxhZ3MpKTsKK3N0YXRpYyBpbnQgb3B0dmFsX2RlZmF1bHQgX19BUkdTKChzdHJ1Y3Qgdmltb3B0aW9uICosIGNoYXJfdSAqdmFycCkpOworc3RhdGljIHZvaWQgc2hvd29uZW9wdCBfX0FSR1MoKHN0cnVjdCB2aW1vcHRpb24gKiwgaW50IG9wdF9mbGFncykpOworc3RhdGljIGludCBwdXRfc2V0c3RyaW5nIF9fQVJHUygoRklMRSAqZmQsIGNoYXIgKmNtZCwgY2hhciAqbmFtZSwgY2hhcl91ICoqdmFsdWVwLCBpbnQgZXhwYW5kKSk7CitzdGF0aWMgaW50IHB1dF9zZXRudW0gX19BUkdTKChGSUxFICpmZCwgY2hhciAqY21kLCBjaGFyICpuYW1lLCBsb25nICp2YWx1ZXApKTsKK3N0YXRpYyBpbnQgcHV0X3NldGJvb2wgX19BUkdTKChGSUxFICpmZCwgY2hhciAqY21kLCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpKTsKK3N0YXRpYyBpbnQgIGlzdGVybW9wdGlvbiBfX0FSR1MoKHN0cnVjdCB2aW1vcHRpb24gKikpOworc3RhdGljIGNoYXJfdSAqZ2V0X3ZhcnBfc2NvcGUgX19BUkdTKChzdHJ1Y3Qgdmltb3B0aW9uICpwLCBpbnQgb3B0X2ZsYWdzKSk7CitzdGF0aWMgY2hhcl91ICpnZXRfdmFycCBfX0FSR1MoKHN0cnVjdCB2aW1vcHRpb24gKikpOworc3RhdGljIHZvaWQgb3B0aW9uX3ZhbHVlMnN0cmluZyBfX0FSR1MoKHN0cnVjdCB2aW1vcHRpb24gKiwgaW50IG9wdF9mbGFncykpOworc3RhdGljIGludCB3Y191c2Vfa2V5bmFtZSBfX0FSR1MoKGNoYXJfdSAqdmFycCwgbG9uZyAqd2NwKSk7CisjaWZkZWYgRkVBVF9MQU5HTUFQCitzdGF0aWMgdm9pZCBsYW5nbWFwX2luaXQgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBsYW5nbWFwX3NldCBfX0FSR1MoKHZvaWQpKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgcGFzdGVfb3B0aW9uX2NoYW5nZWQgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBjb21wYXRpYmxlX3NldCBfX0FSR1MoKHZvaWQpKTsKKyNpZmRlZiBGRUFUX0xJTkVCUkVBSworc3RhdGljIHZvaWQgZmlsbF9icmVha2F0X2ZsYWdzIF9fQVJHUygodm9pZCkpOworI2VuZGlmCitzdGF0aWMgaW50IG9wdF9zdHJpbmdzX2ZsYWdzIF9fQVJHUygoY2hhcl91ICp2YWwsIGNoYXIgKip2YWx1ZXMsIHVuc2lnbmVkICpmbGFncCwgaW50IGxpc3QpKTsKK3N0YXRpYyBpbnQgY2hlY2tfb3B0X3N0cmluZ3MgX19BUkdTKChjaGFyX3UgKnZhbCwgY2hhciAqKnZhbHVlcywgaW50KSk7CitzdGF0aWMgaW50IGNoZWNrX29wdF93aW0gX19BUkdTKCh2b2lkKSk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBvcHRpb25zLCBmaXJzdCBwYXJ0LgorICoKKyAqIENhbGxlZCBvbmx5IG9uY2UgZnJvbSBtYWluKCksIGp1c3QgYWZ0ZXIgY3JlYXRpbmcgdGhlIGZpcnN0IGJ1ZmZlci4KKyAqLworICAgIHZvaWQKK3NldF9pbml0XzEoKQoreworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCW9wdF9pZHg7CisgICAgbG9uZwluOworCisjaWZkZWYgRkVBVF9MQU5HTUFQCisgICAgbGFuZ21hcF9pbml0KCk7CisjZW5kaWYKKworICAgIC8qIEJlIFZpIGNvbXBhdGlibGUgYnkgZGVmYXVsdCAqLworICAgIHBfY3AgPSBUUlVFOworCisgICAgLyoKKyAgICAgKiBGaW5kIGRlZmF1bHQgdmFsdWUgZm9yICdzaGVsbCcgb3B0aW9uLgorICAgICAqLworICAgIGlmICgocCA9IG1jaF9nZXRlbnYoKGNoYXJfdSAqKSJTSEVMTCIpKSAhPSBOVUxMCisjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChNU1dJTikgfHwgZGVmaW5lZChPUzIpCisjIGlmZGVmIF9fRU1YX18KKwkgICAgfHwgKHAgPSBtY2hfZ2V0ZW52KChjaGFyX3UgKikiRU1YU0hFTEwiKSkgIT0gTlVMTAorIyBlbmRpZgorCSAgICB8fCAocCA9IG1jaF9nZXRlbnYoKGNoYXJfdSAqKSJDT01TUEVDIikpICE9IE5VTEwKKyMgaWZkZWYgV0lOMzI2NAorCSAgICB8fCAocCA9IGRlZmF1bHRfc2hlbGwoKSkgIT0gTlVMTAorIyBlbmRpZgorI2VuZGlmCisgICAgICAgKQorCXNldF9zdHJpbmdfZGVmYXVsdCgic2giLCBwKTsKKworI2lmZGVmIEZFQVRfV0lMRElHTgorICAgIC8qCisgICAgICogU2V0IHRoZSBkZWZhdWx0IGZvciAnYmFja3Vwc2tpcCcgdG8gaW5jbHVkZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yCisgICAgICogdGVtcCBmaWxlcy4KKyAgICAgKi8KKyAgICB7CisjIGlmZGVmIFVOSVgKKwlzdGF0aWMgY2hhcgkqKG5hbWVzWzRdKSA9IHsiIiwgIlRNUERJUiIsICJURU1QIiwgIlRNUCJ9OworIyBlbHNlCisJc3RhdGljIGNoYXIJKihuYW1lc1szXSkgPSB7IlRNUERJUiIsICJURU1QIiwgIlRNUCJ9OworIyBlbmRpZgorCWludAlsZW47CisJZ2FycmF5X1QgZ2E7CisKKwlnYV9pbml0MigmZ2EsIDEsIDEwMCk7CisJZm9yIChuID0gMDsgbiA8IChsb25nKShzaXplb2YobmFtZXMpIC8gc2l6ZW9mKGNoYXIgKikpOyArK24pCisJeworIyBpZmRlZiBVTklYCisJICAgIGlmICgqbmFtZXNbbl0gPT0gTlVMKQorCQlwID0gKGNoYXJfdSAqKSIvdG1wIjsKKwkgICAgZWxzZQorIyBlbmRpZgorCQlwID0gbWNoX2dldGVudigoY2hhcl91ICopbmFtZXNbbl0pOworCSAgICBpZiAocCAhPSBOVUxMICYmICpwICE9IE5VTCkKKwkgICAgeworCQkvKiBGaXJzdCB0aW1lIGNvdW50IHRoZSBOVUwsIG90aGVyd2lzZSBjb3VudCB0aGUgJywnLiAqLworCQlsZW4gPSBTVFJMRU4ocCkgKyAzOworCQlpZiAoZ2FfZ3JvdygmZ2EsIGxlbikgPT0gT0spCisJCXsKKwkJICAgIGlmIChnYS5nYV9sZW4gPiAwKQorCQkJU1RSQ0FUKGdhLmdhX2RhdGEsICIsIik7CisJCSAgICBTVFJDQVQoZ2EuZ2FfZGF0YSwgcCk7CisJCSAgICBhZGRfcGF0aHNlcChnYS5nYV9kYXRhKTsKKwkJICAgIFNUUkNBVChnYS5nYV9kYXRhLCAiKiIpOworCQkgICAgZ2EuZ2Ffcm9vbSAtPSBsZW47CisJCSAgICBnYS5nYV9sZW4gKz0gbGVuOworCQl9CisJICAgIH0KKwl9CisJaWYgKGdhLmdhX2RhdGEgIT0gTlVMTCkKKwl7CisJICAgIHNldF9zdHJpbmdfZGVmYXVsdCgiYnNrIiwgZ2EuZ2FfZGF0YSk7CisJICAgIHZpbV9mcmVlKGdhLmdhX2RhdGEpOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogJ21heG1lbXRvdCcgYW5kICdtYXhtZW0nIG1heSBoYXZlIHRvIGJlIGFkanVzdGVkIGZvciBhdmFpbGFibGUgbWVtb3J5CisgICAgICovCisgICAgb3B0X2lkeCA9IGZpbmRvcHRpb24oKGNoYXJfdSAqKSJtYXhtZW10b3QiKTsKKyNpZiAhZGVmaW5lZChIQVZFX0FWQUlMX01FTSkgJiYgIWRlZmluZWQoSEFWRV9UT1RBTF9NRU0pCisgICAgaWYgKG9wdGlvbnNbb3B0X2lkeF0uZGVmX3ZhbFtWSV9ERUZBVUxUXSA9PSAoY2hhcl91ICopMEwpCisjZW5kaWYKKyAgICB7CisjaWZkZWYgSEFWRV9BVkFJTF9NRU0KKwkvKiBVc2UgYW1vdW50IG9mIG1lbW9yeSBhdmFpbGFibGUgYXQgdGhpcyBtb21lbnQuICovCisJbiA9IChtY2hfYXZhaWxfbWVtKEZBTFNFKSA+PiAxMSk7CisjZWxzZQorIyBpZmRlZiBIQVZFX1RPVEFMX01FTQorCS8qIFVzZSBhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZSB0byBWaW0uICovCisJbiA9IChtY2hfdG90YWxfbWVtKEZBTFNFKSA+PiAxMSk7CisjIGVsc2UKKwluID0gKDB4N2ZmZmZmZmYgPj4gMTEpOworIyBlbmRpZgorI2VuZGlmCisJb3B0aW9uc1tvcHRfaWR4XS5kZWZfdmFsW1ZJX0RFRkFVTFRdID0gKGNoYXJfdSAqKW47CisJb3B0X2lkeCA9IGZpbmRvcHRpb24oKGNoYXJfdSAqKSJtYXhtZW0iKTsKKyNpZiAhZGVmaW5lZChIQVZFX0FWQUlMX01FTSkgJiYgIWRlZmluZWQoSEFWRV9UT1RBTF9NRU0pCisJaWYgKChsb25nKW9wdGlvbnNbb3B0X2lkeF0uZGVmX3ZhbFtWSV9ERUZBVUxUXSA+IG4KKwkJCSAgfHwgKGxvbmcpb3B0aW9uc1tvcHRfaWR4XS5kZWZfdmFsW1ZJX0RFRkFVTFRdID09IDBMKQorI2VuZGlmCisJICAgIG9wdGlvbnNbb3B0X2lkeF0uZGVmX3ZhbFtWSV9ERUZBVUxUXSA9IChjaGFyX3UgKiluOworICAgIH0KKworI2lmZGVmIEZFQVRfR1VJX1czMgorICAgIC8qIGZvcmNlICdzaG9ydG5hbWUnIGZvciBXaW4zMnMgKi8KKyAgICBpZiAoZ3VpX2lzX3dpbjMycygpKQorCW9wdGlvbnNbZmluZG9wdGlvbigoY2hhcl91ICopInNob3J0bmFtZSIpXS5kZWZfdmFsW1ZJX0RFRkFVTFRdID0KKwkJCQkJCQkgICAgICAgKGNoYXJfdSAqKVRSVUU7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfU0VBUkNIUEFUSAorICAgIHsKKwljaGFyX3UJKmNkcGF0aDsKKwljaGFyX3UJKmJ1ZjsKKwlpbnQJaTsKKwlpbnQJajsKKworCS8qIEluaXRpYWxpemUgdGhlICdjZHBhdGgnIG9wdGlvbidzIGRlZmF1bHQgdmFsdWUuICovCisJY2RwYXRoID0gbWNoX2dldGVudigoY2hhcl91ICopIkNEUEFUSCIpOworCWlmIChjZHBhdGggIT0gTlVMTCkKKwl7CisJICAgIGJ1ZiA9IGFsbG9jKCh1bnNpZ25lZCkoKFNUUkxFTihjZHBhdGgpIDw8IDEpICsgMikpOworCSAgICBpZiAoYnVmICE9IE5VTEwpCisJICAgIHsKKwkJYnVmWzBdID0gJywnOwkgICAgLyogc3RhcnQgd2l0aCAiLCIsIGN1cnJlbnQgZGlyIGZpcnN0ICovCisJCWogPSAxOworCQlmb3IgKGkgPSAwOyBjZHBhdGhbaV0gIT0gTlVMOyArK2kpCisJCXsKKwkJICAgIGlmICh2aW1faXNwYXRobGlzdHNlcChjZHBhdGhbaV0pKQorCQkJYnVmW2orK10gPSAnLCc7CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlpZiAoY2RwYXRoW2ldID09ICcgJyB8fCBjZHBhdGhbaV0gPT0gJywnKQorCQkJICAgIGJ1ZltqKytdID0gJ1xcJzsKKwkJCWJ1ZltqKytdID0gY2RwYXRoW2ldOworCQkgICAgfQorCQl9CisJCWJ1ZltqXSA9IE5VTDsKKwkJb3B0X2lkeCA9IGZpbmRvcHRpb24oKGNoYXJfdSAqKSJjZHBhdGgiKTsKKwkJb3B0aW9uc1tvcHRfaWR4XS5kZWZfdmFsW1ZJX0RFRkFVTFRdID0gYnVmOworCQlvcHRpb25zW29wdF9pZHhdLmZsYWdzIHw9IFBfREVGX0FMTE9DRUQ7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfUE9TVFNDUklQVCkgJiYgKGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFZNUykgfHwgZGVmaW5lZChFQkNESUMpIHx8IGRlZmluZWQoTUFDKSB8fCBkZWZpbmVkKGhwdXgpKQorICAgIC8qIFNldCBwcmludCBlbmNvZGluZyBvbiBwbGF0Zm9ybXMgdGhhdCBkb24ndCBkZWZhdWx0IHRvIGxhdGluMSAqLworICAgIHNldF9zdHJpbmdfZGVmYXVsdCgicGVuYyIsCisjIGlmIGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoT1MyKQorCQkgICAgICAgKGNoYXJfdSAqKSJjcDEyNTIiCisjIGVsc2UKKyMgIGlmZGVmIFZNUworCQkgICAgICAgKGNoYXJfdSAqKSJkZWMtbWNzIgorIyAgZWxzZQorIyAgIGlmZGVmIEVCQ0RJQworCQkgICAgICAgKGNoYXJfdSAqKSJlYmNkaWMtdWsiCisjICAgZWxzZQorIyAgICBpZmRlZiBNQUMKKwkJICAgICAgIChjaGFyX3UgKikibWFjLXJvbWFuIgorIyAgICBlbHNlIC8qIEhQVVggKi8KKwkJICAgICAgIChjaGFyX3UgKikiaHAtcm9tYW44IgorIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorCQkgICAgICAgKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9QT1NUU0NSSVBUCisgICAgLyogJ3ByaW50ZXhwcicgbXVzdCBiZSBhbGxvY2F0ZWQgdG8gYmUgYWJsZSB0byBldmFsdWF0ZSBpdC4gKi8KKyAgICBzZXRfc3RyaW5nX2RlZmF1bHQoInBleHByIiwKKyMgaWZkZWYgTVNXSU4KKwkgICAgKGNoYXJfdSAqKSJzeXN0ZW0oJ2NvcHknIC4gJyAnIC4gdjpmbmFtZV9pbiAuICcgXCInIC4gJnByaW50ZGV2aWNlIC4gJ1wiJykgLiBkZWxldGUodjpmbmFtZV9pbikiCisjIGVsc2UKKyMgIGlmZGVmIFZNUworCSAgICAoY2hhcl91ICopInN5c3RlbSgncHJpbnQvZGVsZXRlJyAuICgmcHJpbnRkZXZpY2UgPT0gJycgPyAnJyA6ICcgL3F1ZXVlPScgLiAmcHJpbnRkZXZpY2UpIC4gJyAnIC4gdjpmbmFtZV9pbikiCisKKyMgIGVsc2UKKwkgICAgKGNoYXJfdSAqKSJzeXN0ZW0oJ2xwcicgLiAoJnByaW50ZGV2aWNlID09ICcnID8gJycgOiAnIC1QJyAuICZwcmludGRldmljZSkgLiAnICcgLiB2OmZuYW1lX2luKSAuIGRlbGV0ZSh2OmZuYW1lX2luKSArIHY6c2hlbGxfZXJyb3IiCisjICBlbmRpZgorIyBlbmRpZgorCSAgICApOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFNldCBhbGwgdGhlIG9wdGlvbnMgKGV4Y2VwdCB0aGUgdGVybWluYWwgb3B0aW9ucykgdG8gdGhlaXIgZGVmYXVsdAorICAgICAqIHZhbHVlLiAgQWxzbyBzZXQgdGhlIGdsb2JhbCB2YWx1ZSBmb3IgbG9jYWwgb3B0aW9ucy4KKyAgICAgKi8KKyAgICBzZXRfb3B0aW9uc19kZWZhdWx0KDApOworCisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZm91bmRfcmV2ZXJzZV9hcmcpCisJc2V0X29wdGlvbl92YWx1ZSgoY2hhcl91ICopImJnIiwgMEwsIChjaGFyX3UgKikiZGFyayIsIDApOworI2VuZGlmCisKKyAgICBjdXJidWYtPmJfcF9pbml0aWFsaXplZCA9IFRSVUU7CisgICAgY3VyYnVmLT5iX3BfYXIgPSAtMTsJLyogbm8gbG9jYWwgJ2F1dG9yZWFkJyB2YWx1ZSAqLworICAgIGNoZWNrX2J1Zl9vcHRpb25zKGN1cmJ1Zik7CisgICAgY2hlY2tfd2luX29wdGlvbnMoY3Vyd2luKTsKKyAgICBjaGVja19vcHRpb25zKCk7CisKKyAgICAvKiBNdXN0IGJlIGJlZm9yZSBvcHRpb25fZXhwYW5kKCksIGJlY2F1c2UgdGhhdCBvbmUgbmVlZHMgdmltX2lzSURjKCkgKi8KKyAgICBkaWRzZXRfb3B0aW9ucygpOworCisjaWZkZWYgRkVBVF9MSU5FQlJFQUsKKyAgICAvKgorICAgICAqIGluaXRpYWxpemUgdGhlIHRhYmxlIGZvciAnYnJlYWthdCcuCisgICAgICovCisgICAgZmlsbF9icmVha2F0X2ZsYWdzKCk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogRXhwYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdGhpbmdzIGxpa2UgIn4iIGZvciB0aGUgZGVmYXVsdHMuCisgICAgICogSWYgb3B0aW9uX2V4cGFuZCgpIHJldHVybnMgbm9uLU5VTEwgdGhlIHZhcmlhYmxlIGlzIGV4cGFuZGVkLiAgVGhpcyBjYW4KKyAgICAgKiBvbmx5IGhhcHBlbiBmb3Igbm9uLWluZGlyZWN0IG9wdGlvbnMuCisgICAgICogQWxzbyBzZXQgdGhlIGRlZmF1bHQgdG8gdGhlIGV4cGFuZGVkIHZhbHVlLCBzbyAiOnNldCIgZG9lcyBub3QgbGlzdAorICAgICAqIHRoZW0uCisgICAgICogRG9uJ3Qgc2V0IHRoZSBQX0FMTE9DRUQgZmxhZywgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGZyZWUgdGhlCisgICAgICogZGVmYXVsdC4KKyAgICAgKi8KKyAgICBmb3IgKG9wdF9pZHggPSAwOyAhaXN0ZXJtb3B0aW9uKCZvcHRpb25zW29wdF9pZHhdKTsgb3B0X2lkeCsrKQorICAgIHsKKwlpZiAoKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiBQX0dFVFRFWFQpCisJCQkJCSAgICAgICYmIG9wdGlvbnNbb3B0X2lkeF0udmFyICE9IE5VTEwpCisJICAgIHAgPSAoY2hhcl91ICopXygqKGNoYXIgKiopb3B0aW9uc1tvcHRfaWR4XS52YXIpOworCWVsc2UKKwkgICAgcCA9IG9wdGlvbl9leHBhbmQob3B0X2lkeCwgTlVMTCk7CisJaWYgKHAgIT0gTlVMTCAmJiAocCA9IHZpbV9zdHJzYXZlKHApKSAhPSBOVUxMKQorCXsKKwkgICAgKihjaGFyX3UgKiopb3B0aW9uc1tvcHRfaWR4XS52YXIgPSBwOworCSAgICAvKiBWSU1FWFAKKwkgICAgICogRGVmYXVsdHMgZm9yIGFsbCBleHBhbmRlZCBvcHRpb25zIGFyZSBjdXJyZW50bHkgdGhlIHNhbWUgZm9yIFZpCisJICAgICAqIGFuZCBWaW0uICBXaGVuIHRoaXMgY2hhbmdlcywgYWRkIHNvbWUgY29kZSBoZXJlISAgQWxzbyBuZWVkIHRvCisJICAgICAqIHNwbGl0IFBfREVGX0FMTE9DRUQgaW4gdHdvLgorCSAgICAgKi8KKwkgICAgaWYgKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiBQX0RFRl9BTExPQ0VEKQorCQl2aW1fZnJlZShvcHRpb25zW29wdF9pZHhdLmRlZl92YWxbVklfREVGQVVMVF0pOworCSAgICBvcHRpb25zW29wdF9pZHhdLmRlZl92YWxbVklfREVGQVVMVF0gPSBwOworCSAgICBvcHRpb25zW29wdF9pZHhdLmZsYWdzIHw9IFBfREVGX0FMTE9DRUQ7CisJfQorICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgdGhlIGhpZ2hsaWdodF9hdHRyW10gdGFibGUuICovCisgICAgaGlnaGxpZ2h0X2NoYW5nZWQoKTsKKworICAgIHNhdmVfZmlsZV9mZihjdXJidWYpOwkvKiBCdWZmZXIgaXMgdW5jaGFuZ2VkICovCisKKyAgICAvKiBQYXJzZSBkZWZhdWx0IGZvciAnd2lsZG1vZGUnICAqLworICAgIGNoZWNrX29wdF93aW0oKTsKKworI2lmIGRlZmluZWQoRkVBVF9BUkFCSUMpCisgICAgLyogRGV0ZWN0IHVzZSBvZiBtbHRlcm0uCisgICAgICogTWx0ZXJtIGlzIGEgdGVybWluYWwgZW11bGF0b3IgYWtpbiB0byB4dGVybSB0aGF0IGhhcyBzb21lIHNwZWNpYWwKKyAgICAgKiBhYmlsaXRpZXMgKGJpZGkgbmFtZWx5KS4KKyAgICAgKiBOT1RFOiBtbHRlcm0ncyBhdXRob3IgaXMgYmVpbmcgYXNrZWQgdG8gJ3NldCcgYSB2YXJpYWJsZQorICAgICAqICAgICAgIGluc3RlYWQgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgZHVlIHRvIGluaGVyaXRhbmNlLgorICAgICAqLworICAgIGlmIChtY2hfZ2V0ZW52KChjaGFyX3UgKikiTUxURVJNIikgIT0gTlVMTCkKKwlzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikidGJpZGkiLCAxTCwgTlVMTCwgMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKEZFQVRfRk9MRElORykKKyAgICAvKiBQYXJzZSBkZWZhdWx0IGZvciAnZmlsbGNoYXJzJy4gKi8KKyAgICAodm9pZClzZXRfY2hhcnNfb3B0aW9uKCZwX2Zjcyk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgLyogUGFyc2UgZGVmYXVsdCBmb3IgJ2NsaXBib2FyZCcgKi8KKyAgICAodm9pZCljaGVja19jbGlwYm9hcmRfb3B0aW9uKCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTUJZVEUKKyMgaWYgZGVmaW5lZChXSU4zMjY0KSAmJiBkZWZpbmVkKEZFQVRfR0VUVEVYVCkKKyAgICAvKgorICAgICAqIElmICRMQU5HIGlzbid0IHNldCwgdHJ5IHRvIGdldCBhIGdvb2QgdmFsdWUgZm9yIGl0LiAgVGhpcyBtYWtlcyB0aGUKKyAgICAgKiByaWdodCBsYW5ndWFnZSBiZSB1c2VkIGF1dG9tYXRpY2FsbHkuICBEb24ndCBkbyB0aGlzIGZvciBFbmdsaXNoLgorICAgICAqLworICAgIGlmIChtY2hfZ2V0ZW52KChjaGFyX3UgKikiTEFORyIpID09IE5VTEwpCisgICAgeworCWNoYXIJYnVmWzIwXTsKKworCS8qIENvdWxkIHVzZSBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FLCBidXQgaXQncyBub3QgaW4gV2luOTUuCisJICogTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSBnaXZlcyB1cyB0aHJlZSBsZXR0ZXJzLCBsaWtlICJlbnUiLCB3ZSB1c2UKKwkgKiBvbmx5IHRoZSBmaXJzdCB0d28uICovCisJbiA9IEdldExvY2FsZUluZm8oTE9DQUxFX1VTRVJfREVGQVVMVCwgTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwKKwkJCQkJCQkgICAgIChMUFRTVFIpYnVmLCAyMCk7CisJaWYgKG4gPj0gMiAmJiBTVFJOSUNNUChidWYsICJlbiIsIDIpICE9IDApCisJeworCSAgICAvKiBUaGVyZSBhcmUgYSBmZXcgZXhjZXB0aW9ucyAocHJvYmFibHkgbW9yZSkgKi8KKwkgICAgaWYgKFNUUk5JQ01QKGJ1ZiwgImNodCIsIDMpID09IDAgfHwgU1RSTklDTVAoYnVmLCAiemh0IiwgMykgPT0gMCkKKwkJU1RSQ1BZKGJ1ZiwgInpoX1RXIik7CisJICAgIGVsc2UgaWYgKFNUUk5JQ01QKGJ1ZiwgImNocyIsIDMpID09IDAKKwkJCQkJICAgICAgfHwgU1RSTklDTVAoYnVmLCAiemhjIiwgMykgPT0gMCkKKwkJU1RSQ1BZKGJ1ZiwgInpoX0NOIik7CisJICAgIGVsc2UgaWYgKFNUUk5JQ01QKGJ1ZiwgImpwIiwgMikgPT0gMCkKKwkJU1RSQ1BZKGJ1ZiwgImphIik7CisJICAgIGVsc2UKKwkJYnVmWzJdID0gTlVMOwkJLyogdHJ1bmNhdGUgdG8gdHdvLWxldHRlciBjb2RlICovCisJICAgIHZpbV9zZXRlbnYoIkxBTkciLCBidWYpOworCX0KKyAgICB9CisjIGVuZGlmCisKKyAgICAvKiBlbmNfbG9jYWxlKCkgd2lsbCB0cnkgdG8gZmluZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLiAqLworICAgIHAgPSBlbmNfbG9jYWxlKCk7CisgICAgaWYgKHAgIT0gTlVMTCkKKyAgICB7CisJY2hhcl91ICpzYXZlX2VuYzsKKworCS8qIFRyeSBzZXR0aW5nICdlbmNvZGluZycgYW5kIGNoZWNrIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZC4KKwkgKiBJZiBub3QsIGdvIGJhY2sgdG8gdGhlIGRlZmF1bHQgImxhdGluMSIuICovCisJc2F2ZV9lbmMgPSBwX2VuYzsKKwlwX2VuYyA9IHA7CisJaWYgKG1iX2luaXQoKSA9PSBOVUxMKQorCXsKKwkgICAgb3B0X2lkeCA9IGZpbmRvcHRpb24oKGNoYXJfdSAqKSJlbmNvZGluZyIpOworCSAgICBvcHRpb25zW29wdF9pZHhdLmRlZl92YWxbVklfREVGQVVMVF0gPSBwX2VuYzsKKwkgICAgb3B0aW9uc1tvcHRfaWR4XS5mbGFncyB8PSBQX0RFRl9BTExPQ0VEOworCisjIGlmIGRlZmluZWQoV0lOMzI2NCkgJiYgIWRlZmluZWQoRkVBVF9HVUkpCisJICAgIC8qIFdpbjMyIGNvbnNvbGU6IFdoZW4gR2V0QUNQKCkgcmV0dXJucyBhIGRpZmZlcmVudCB2YWx1ZSBmcm9tCisJICAgICAqIEdldENvbnNvbGVDUCgpIHNldCAndGVybWVuY29kaW5nJy4gKi8KKwkgICAgaWYgKEdldEFDUCgpICE9IEdldENvbnNvbGVDUCgpKQorCSAgICB7CisJCWNoYXIJYnVmWzUwXTsKKworCQlzcHJpbnRmKGJ1ZiwgImNwJWxkIiwgKGxvbmcpR2V0Q29uc29sZUNQKCkpOworCQlwX3RlbmMgPSB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopYnVmKTsKKwkJaWYgKHBfdGVuYyAhPSBOVUxMKQorCQl7CisJCSAgICBvcHRfaWR4ID0gZmluZG9wdGlvbigoY2hhcl91ICopInRlcm1lbmNvZGluZyIpOworCQkgICAgb3B0aW9uc1tvcHRfaWR4XS5kZWZfdmFsW1ZJX0RFRkFVTFRdID0gcF90ZW5jOworCQkgICAgb3B0aW9uc1tvcHRfaWR4XS5mbGFncyB8PSBQX0RFRl9BTExPQ0VEOworCQkgICAgY29udmVydF9zZXR1cCgmaW5wdXRfY29udiwgcF90ZW5jLCBwX2VuYyk7CisJCSAgICBjb252ZXJ0X3NldHVwKCZvdXRwdXRfY29udiwgcF9lbmMsIHBfdGVuYyk7CisJCX0KKwkJZWxzZQorCQkgICAgcF90ZW5jID0gZW1wdHlfb3B0aW9uOworCSAgICB9CisjIGVuZGlmCisJfQorCWVsc2UKKwl7CisJICAgIHZpbV9mcmVlKHBfZW5jKTsKKwkgICAgcF9lbmMgPSBzYXZlX2VuYzsKKwl9CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX01VTFRJX0xBTkcKKyAgICAvKiBTZXQgdGhlIGRlZmF1bHQgZm9yICdoZWxwbGFuZycuICovCisgICAgc2V0X2hlbHBsYW5nX2RlZmF1bHQoZ2V0X21lc3NfbGFuZygpKTsKKyNlbmRpZgorfQorCisvKgorICogU2V0IGFuIG9wdGlvbiB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKyAqIFRoaXMgZG9lcyBub3QgdGFrZSBjYXJlIG9mIHNpZGUgZWZmZWN0cyEKKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfb3B0aW9uX2RlZmF1bHQob3B0X2lkeCwgb3B0X2ZsYWdzLCBjb21wYXRpYmxlKQorICAgIGludAkJb3B0X2lkeDsKKyAgICBpbnQJCW9wdF9mbGFnczsJLyogT1BUX0ZSRUUsIE9QVF9MT0NBTCBhbmQvb3IgT1BUX0dMT0JBTCAqLworICAgIGludAkJY29tcGF0aWJsZTsJLyogdXNlIFZpIGRlZmF1bHQgdmFsdWUgKi8KK3sKKyAgICBjaGFyX3UJKnZhcnA7CQkvKiBwb2ludGVyIHRvIHZhcmlhYmxlIGZvciBjdXJyZW50IG9wdGlvbiAqLworICAgIGludAkJZHZpOwkJLyogaW5kZXggaW4gZGVmX3ZhbFtdICovCisgICAgbG9uZ191CWZsYWdzOworICAgIGludAkJYm90aCA9IChvcHRfZmxhZ3MgJiAoT1BUX0xPQ0FMIHwgT1BUX0dMT0JBTCkpID09IDA7CisKKyAgICB2YXJwID0gZ2V0X3ZhcnBfc2NvcGUoJihvcHRpb25zW29wdF9pZHhdKSwgYm90aCA/IE9QVF9MT0NBTCA6IG9wdF9mbGFncyk7CisgICAgZmxhZ3MgPSBvcHRpb25zW29wdF9pZHhdLmZsYWdzOworICAgIGlmICh2YXJwICE9IE5VTEwpCSAgICAvKiBub3RoaW5nIHRvIGRvIGZvciBoaWRkZW4gb3B0aW9uICovCisgICAgeworCWR2aSA9ICgoZmxhZ3MgJiBQX1ZJX0RFRikgfHwgY29tcGF0aWJsZSkgPyBWSV9ERUZBVUxUIDogVklNX0RFRkFVTFQ7CisJaWYgKGZsYWdzICYgUF9TVFJJTkcpCisJeworCSAgICAvKiBVc2Ugc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0KCkgZm9yIGxvY2FsIG9wdGlvbnMgdG8gaGFuZGxlCisJICAgICAqIGZyZWVpbmcgYW5kIGFsbG9jYXRpbmcgdGhlIHZhbHVlLiAqLworCSAgICBpZiAob3B0aW9uc1tvcHRfaWR4XS5pbmRpciAhPSBQVl9OT05FKQorCQlzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QoTlVMTCwgb3B0X2lkeCwKKwkJCQkgICAgb3B0aW9uc1tvcHRfaWR4XS5kZWZfdmFsW2R2aV0sIG9wdF9mbGFncyk7CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoKG9wdF9mbGFncyAmIE9QVF9GUkVFKSAmJiAoZmxhZ3MgJiBQX0FMTE9DRUQpKQorCQkgICAgZnJlZV9zdHJpbmdfb3B0aW9uKCooY2hhcl91ICoqKSh2YXJwKSk7CisJCSooY2hhcl91ICoqKXZhcnAgPSBvcHRpb25zW29wdF9pZHhdLmRlZl92YWxbZHZpXTsKKwkJb3B0aW9uc1tvcHRfaWR4XS5mbGFncyAmPSB+UF9BTExPQ0VEOworCSAgICB9CisJfQorCWVsc2UgaWYgKGZsYWdzICYgUF9OVU0pCisJeworCSAgICBpZiAodmFycCA9PSAoY2hhcl91ICopUFZfU0NST0xMKQorCQl3aW5fY29tcF9zY3JvbGwoY3Vyd2luKTsKKwkgICAgZWxzZQorCSAgICB7CisJCSoobG9uZyAqKXZhcnAgPSAobG9uZylvcHRpb25zW29wdF9pZHhdLmRlZl92YWxbZHZpXTsKKwkJLyogTWF5IGFsc28gc2V0IGdsb2JhbCB2YWx1ZSBmb3IgbG9jYWwgb3B0aW9uLiAqLworCQlpZiAoYm90aCkKKwkJICAgICoobG9uZyAqKWdldF92YXJwX3Njb3BlKCYob3B0aW9uc1tvcHRfaWR4XSksIE9QVF9HTE9CQUwpID0KKwkJCQkJCQkJKihsb25nICopdmFycDsKKwkgICAgfQorCX0KKwllbHNlCS8qIFBfQk9PTCAqLworCXsKKwkgICAgLyogdGhlIGNhc3QgdG8gbG9uZyBpcyByZXF1aXJlZCBmb3IgTWFueCBDICovCisJICAgICooaW50ICopdmFycCA9IChpbnQpKGxvbmcpb3B0aW9uc1tvcHRfaWR4XS5kZWZfdmFsW2R2aV07CisJICAgIC8qIE1heSBhbHNvIHNldCBnbG9iYWwgdmFsdWUgZm9yIGxvY2FsIG9wdGlvbi4gKi8KKwkgICAgaWYgKGJvdGgpCisJCSooaW50ICopZ2V0X3ZhcnBfc2NvcGUoJihvcHRpb25zW29wdF9pZHhdKSwgT1BUX0dMT0JBTCkgPQorCQkJCQkJCQkqKGludCAqKXZhcnA7CisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfRVZBTAorICAgIC8qIFJlbWVtYmVyIHdoZXJlIHRoZSBvcHRpb24gd2FzIHNldC4gKi8KKyAgICBvcHRpb25zW29wdF9pZHhdLnNjcmlwdElEID0gY3VycmVudF9TSUQ7CisjZW5kaWYKK30KKworLyoKKyAqIFNldCBhbGwgb3B0aW9ucyAoZXhjZXB0IHRlcm1pbmFsIG9wdGlvbnMpIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc2V0X29wdGlvbnNfZGVmYXVsdChvcHRfZmxhZ3MpCisgICAgaW50CQlvcHRfZmxhZ3M7CS8qIE9QVF9GUkVFLCBPUFRfTE9DQUwgYW5kL29yIE9QVF9HTE9CQUwgKi8KK3sKKyAgICBpbnQJCWk7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgd2luX1QJKndwOworI2VuZGlmCisKKyAgICBmb3IgKGkgPSAwOyAhaXN0ZXJtb3B0aW9uKCZvcHRpb25zW2ldKTsgaSsrKQorCWlmICghKG9wdGlvbnNbaV0uZmxhZ3MgJiBQX05PREVGQVVMVCkpCisJICAgIHNldF9vcHRpb25fZGVmYXVsdChpLCBvcHRfZmxhZ3MsIHBfY3ApOworCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgLyogVGhlICdzY3JvbGwnIG9wdGlvbiBtdXN0IGJlIGNvbXB1dGVkIGZvciBhbGwgd2luZG93cy4gKi8KKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwl3aW5fY29tcF9zY3JvbGwod3ApOworI2Vsc2UKKwl3aW5fY29tcF9zY3JvbGwoY3Vyd2luKTsKKyNlbmRpZgorfQorCisvKgorICogU2V0IHRoZSBWaS1kZWZhdWx0IHZhbHVlIG9mIGEgc3RyaW5nIG9wdGlvbi4KKyAqIFVzZWQgZm9yICdzaCcsICdiYWNrdXBza2lwJyBhbmQgJ3Rlcm0nLgorICovCisgICAgdm9pZAorc2V0X3N0cmluZ19kZWZhdWx0KG5hbWUsIHZhbCkKKyAgICBjaGFyCSpuYW1lOworICAgIGNoYXJfdQkqdmFsOworeworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCW9wdF9pZHg7CisKKyAgICBwID0gdmltX3N0cnNhdmUodmFsKTsKKyAgICBpZiAocCAhPSBOVUxMKQkJLyogd2UgZG9uJ3Qgd2FudCBhIE5VTEwgKi8KKyAgICB7CisJb3B0X2lkeCA9IGZpbmRvcHRpb24oKGNoYXJfdSAqKW5hbWUpOworCWlmIChvcHRpb25zW29wdF9pZHhdLmZsYWdzICYgUF9ERUZfQUxMT0NFRCkKKwkgICAgdmltX2ZyZWUob3B0aW9uc1tvcHRfaWR4XS5kZWZfdmFsW1ZJX0RFRkFVTFRdKTsKKwlvcHRpb25zW29wdF9pZHhdLmRlZl92YWxbVklfREVGQVVMVF0gPSBwOworCW9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgfD0gUF9ERUZfQUxMT0NFRDsKKyAgICB9Cit9CisKKy8qCisgKiBTZXQgdGhlIFZpLWRlZmF1bHQgdmFsdWUgb2YgYSBudW1iZXIgb3B0aW9uLgorICogVXNlZCBmb3IgJ2xpbmVzJyBhbmQgJ2NvbHVtbnMnLgorICovCisgICAgdm9pZAorc2V0X251bWJlcl9kZWZhdWx0KG5hbWUsIHZhbCkKKyAgICBjaGFyCSpuYW1lOworICAgIGxvbmcJdmFsOworeworICAgIG9wdGlvbnNbZmluZG9wdGlvbigoY2hhcl91ICopbmFtZSldLmRlZl92YWxbVklfREVGQVVMVF0gPSAoY2hhcl91ICopdmFsOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgb3B0aW9ucywgcGFydCB0d286IEFmdGVyIGdldHRpbmcgUm93cyBhbmQgQ29sdW1ucyBhbmQKKyAqIHNldHRpbmcgJ3Rlcm0nLgorICovCisgICAgdm9pZAorc2V0X2luaXRfMigpCit7CisgICAgLyoKKyAgICAgKiAnc2Nyb2xsJyBkZWZhdWx0cyB0byBoYWxmIHRoZSB3aW5kb3cgaGVpZ2h0LiBOb3RlIHRoYXQgdGhpcyBkZWZhdWx0IGlzCisgICAgICogd3Jvbmcgd2hlbiB0aGUgd2luZG93IGhlaWdodCBjaGFuZ2VzLgorICAgICAqLworICAgIG9wdGlvbnNbZmluZG9wdGlvbigoY2hhcl91ICopInNjcm9sbCIpXS5kZWZfdmFsW1ZJX0RFRkFVTFRdCisJCQkJCSAgICAgID0gKGNoYXJfdSAqKSgobG9uZ191KVJvd3MgPj4gMSk7CisgICAgY29tcF9jb2woKTsKKworI2lmICEoKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTjMyNjQpKSAmJiAhZGVmaW5lZChGRUFUX0dVSSkpCisgICAgeworCWludAlpZHg0OworCisJLyoKKwkgKiBJZiAnYmFja2dyb3VuZCcgd2Fzbid0IHNldCBieSB0aGUgdXNlciwgdHJ5IGd1ZXNzaW5nIHRoZSB2YWx1ZSwKKwkgKiBkZXBlbmRpbmcgb24gdGhlIHRlcm1pbmFsIG5hbWUuICBPbmx5IG5lZWQgdG8gY2hlY2sgZm9yIHRlcm1pbmFscworCSAqIHdpdGggYSBkYXJrIGJhY2tncm91bmQsIHRoYXQgY2FuIGhhbmRsZSBjb2xvci4gIE9ubHkgImxpbnV4IgorCSAqIGNvbnNvbGUgYXQgdGhlIG1vbWVudC4KKwkgKi8KKwlpZHg0ID0gZmluZG9wdGlvbigoY2hhcl91ICopImJnIik7CisJaWYgKCEob3B0aW9uc1tpZHg0XS5mbGFncyAmIFBfV0FTX1NFVCkgJiYgU1RSQ01QKFRfTkFNRSwgImxpbnV4IikgPT0gMCkKKwl7CisJICAgIHNldF9zdHJpbmdfb3B0aW9uX2RpcmVjdChOVUxMLCBpZHg0LCAoY2hhcl91ICopImRhcmsiLCBPUFRfRlJFRSk7CisJICAgIC8qIGRvbid0IG1hcmsgaXQgYXMgc2V0LCB3aGVuIHN0YXJ0aW5nIHRoZSBHVUkgaXQgbWF5IGJlIGNoYW5nZWQKKwkgICAgICogYWdhaW4gKi8KKwkgICAgb3B0aW9uc1tpZHg0XS5mbGFncyAmPSB+UF9XQVNfU0VUOworCX0KKyAgICB9CisjZW5kaWYKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIG9wdGlvbnMsIHBhcnQgdGhyZWU6IEFmdGVyIHJlYWRpbmcgdGhlIC52aW1yYworICovCisgICAgdm9pZAorc2V0X2luaXRfMygpCit7CisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU4zMjY0KQorLyoKKyAqIFNldCAnc2hlbGxwaXBlJyBhbmQgJ3NoZWxscmVkaXInLCBkZXBlbmRpbmcgb24gdGhlICdzaGVsbCcgb3B0aW9uLgorICogVGhpcyBpcyBkb25lIGFmdGVyIG90aGVyIGluaXRpYWxpemF0aW9ucywgd2hlcmUgJ3NoZWxsJyBtaWdodCBoYXZlIGJlZW4KKyAqIHNldCwgYnV0IG9ubHkgaWYgdGhleSBoYXZlIG5vdCBiZWVuIHNldCBiZWZvcmUuCisgKi8KKyAgICBjaGFyX3UgICpwOworICAgIGludAkgICAgaWR4X3NycjsKKyAgICBpbnQJICAgIGRvX3NycjsKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisgICAgaW50CSAgICBpZHhfc3A7CisgICAgaW50CSAgICBkb19zcDsKKyNlbmRpZgorCisgICAgaWR4X3NyciA9IGZpbmRvcHRpb24oKGNoYXJfdSAqKSJzcnIiKTsKKyAgICBkb19zcnIgPSAhKG9wdGlvbnNbaWR4X3Nycl0uZmxhZ3MgJiBQX1dBU19TRVQpOworI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKyAgICBpZHhfc3AgPSBmaW5kb3B0aW9uKChjaGFyX3UgKikic3AiKTsKKyAgICBkb19zcCA9ICEob3B0aW9uc1tpZHhfc3BdLmZsYWdzICYgUF9XQVNfU0VUKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBJc29sYXRlIHRoZSBuYW1lIG9mIHRoZSBzaGVsbDoKKyAgICAgKiAtIFNraXAgYmV5b25kIGFueSBwYXRoLiAgRS5nLiwgIi91c3IvYmluL2NzaCAtZiIgLT4gImNzaCAtZiIuCisgICAgICogLSBSZW1vdmUgYW55IGFyZ3VtZW50LiAgRS5nLiwgImNzaCAtZiIgLT4gImNzaCIuCisgICAgICovCisgICAgcCA9IGdldHRhaWwocF9zaCk7CisgICAgcCA9IHZpbV9zdHJuc2F2ZShwLCAoaW50KShza2lwdG93aGl0ZShwKSAtIHApKTsKKyAgICBpZiAocCAhPSBOVUxMKQorICAgIHsKKwkvKgorCSAqIERlZmF1bHQgZm9yIHBfc3AgaXMgInwgdGVlIiwgZm9yIHBfc3JyIGlzICI+Ii4KKwkgKiBGb3Iga25vd24gc2hlbGxzIGl0IGlzIGNoYW5nZWQgaGVyZSB0byBpbmNsdWRlIHN0ZGVyci4KKwkgKi8KKwlpZiAoCSAgIGZuYW1lY21wKHAsICJjc2giKSA9PSAwCisJCXx8IGZuYW1lY21wKHAsICJ0Y3NoIikgPT0gMAorIyBpZiBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU4zMjY0KQkvKiBhbHNvIGNoZWNrIHdpdGggLmV4ZSBleHRlbnNpb24gKi8KKwkJfHwgZm5hbWVjbXAocCwgImNzaC5leGUiKSA9PSAwCisJCXx8IGZuYW1lY21wKHAsICJ0Y3NoLmV4ZSIpID09IDAKKyMgZW5kaWYKKwkgICApCisJeworI2lmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKwkgICAgaWYgKGRvX3NwKQorCSAgICB7CisjIGlmZGVmIFdJTjMyNjQKKwkJcF9zcCA9IChjaGFyX3UgKikiPiYiOworIyBlbHNlCisJCXBfc3AgPSAoY2hhcl91ICopInwmIHRlZSI7CisjIGVuZGlmCisJCW9wdGlvbnNbaWR4X3NwXS5kZWZfdmFsW1ZJX0RFRkFVTFRdID0gcF9zcDsKKwkgICAgfQorI2VuZGlmCisJICAgIGlmIChkb19zcnIpCisJICAgIHsKKwkJcF9zcnIgPSAoY2hhcl91ICopIj4mIjsKKwkJb3B0aW9uc1tpZHhfc3JyXS5kZWZfdmFsW1ZJX0RFRkFVTFRdID0gcF9zcnI7CisJICAgIH0KKwl9CisJZWxzZQorIyBpZm5kZWYgT1MyCS8qIEFsd2F5cyB1c2UgYm91cm5lIHNoZWxsIHN0eWxlIHJlZGlyZWN0aW9uIGlmIHdlIHJlYWNoIHRoaXMgKi8KKwkgICAgaWYgKCAgICAgICBmbmFtZWNtcChwLCAic2giKSA9PSAwCisJCSAgICB8fCBmbmFtZWNtcChwLCAia3NoIikgPT0gMAorCQkgICAgfHwgZm5hbWVjbXAocCwgInpzaCIpID09IDAKKwkJICAgIHx8IGZuYW1lY21wKHAsICJiYXNoIikgPT0gMAorIyAgaWZkZWYgV0lOMzI2NAorCQkgICAgfHwgZm5hbWVjbXAocCwgImNtZCIpID09IDAKKwkJICAgIHx8IGZuYW1lY21wKHAsICJzaC5leGUiKSA9PSAwCisJCSAgICB8fCBmbmFtZWNtcChwLCAia3NoLmV4ZSIpID09IDAKKwkJICAgIHx8IGZuYW1lY21wKHAsICJ6c2guZXhlIikgPT0gMAorCQkgICAgfHwgZm5hbWVjbXAocCwgImJhc2guZXhlIikgPT0gMAorCQkgICAgfHwgZm5hbWVjbXAocCwgImNtZC5leGUiKSA9PSAwCisjICBlbmRpZgorCQkgICAgKQorIyBlbmRpZgorCSAgICB7CisjaWYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCQlpZiAoZG9fc3ApCisJCXsKKyMgaWZkZWYgV0lOMzI2NAorCQkgICAgcF9zcCA9IChjaGFyX3UgKikiPiVzIDI+JjEiOworIyBlbHNlCisJCSAgICBwX3NwID0gKGNoYXJfdSAqKSIyPiYxfCB0ZWUiOworIyBlbmRpZgorCQkgICAgb3B0aW9uc1tpZHhfc3BdLmRlZl92YWxbVklfREVGQVVMVF0gPSBwX3NwOworCQl9CisjZW5kaWYKKwkJaWYgKGRvX3NycikKKwkJeworCQkgICAgcF9zcnIgPSAoY2hhcl91ICopIj4lcyAyPiYxIjsKKwkJICAgIG9wdGlvbnNbaWR4X3Nycl0uZGVmX3ZhbFtWSV9ERUZBVUxUXSA9IHBfc3JyOworCQl9CisJICAgIH0KKwl2aW1fZnJlZShwKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lOMzI2NCkgfHwgZGVmaW5lZChPUzIpCisgICAgLyoKKyAgICAgKiBTZXQgJ3NoZWxsY21kZmxhZyBhbmQgJ3NoZWxscXVvdGUnIGRlcGVuZGluZyBvbiB0aGUgJ3NoZWxsJyBvcHRpb24uCisgICAgICogVGhpcyBpcyBkb25lIGFmdGVyIG90aGVyIGluaXRpYWxpemF0aW9ucywgd2hlcmUgJ3NoZWxsJyBtaWdodCBoYXZlIGJlZW4KKyAgICAgKiBzZXQsIGJ1dCBvbmx5IGlmIHRoZXkgaGF2ZSBub3QgYmVlbiBzZXQgYmVmb3JlLiAgRGVmYXVsdCBmb3IgcF9zaGNmIGlzCisgICAgICogIi9jIiwgZm9yIHBfc2hxIGlzICIiLiAgRm9yICJzaCIgbGlrZSAgc2hlbGxzIGl0IGlzIGNoYW5nZWQgaGVyZSB0bworICAgICAqICItYyIgYW5kICJcIiIsIGJ1dCBub3QgZm9yIERKR1BQLCBiZWNhdXNlIGl0IHN0YXJ0cyB0aGUgc2hlbGwgd2l0aG91dAorICAgICAqIGNvbW1hbmQuY29tLiAgQW5kIGZvciBXaW4zMiB3ZSBuZWVkIHRvIHNldCBwX3N4cSBpbnN0ZWFkLgorICAgICAqLworICAgIGlmIChzdHJzdHIoKGNoYXIgKilwX3NoLCAic2giKSAhPSBOVUxMKQorICAgIHsKKwlpbnQJaWR4MzsKKworCWlkeDMgPSBmaW5kb3B0aW9uKChjaGFyX3UgKikic2hjZiIpOworCWlmICghKG9wdGlvbnNbaWR4M10uZmxhZ3MgJiBQX1dBU19TRVQpKQorCXsKKwkgICAgcF9zaGNmID0gKGNoYXJfdSAqKSItYyI7CisJICAgIG9wdGlvbnNbaWR4M10uZGVmX3ZhbFtWSV9ERUZBVUxUXSA9IHBfc2hjZjsKKwl9CisKKyMgaWZuZGVmIERKR1BQCisjICBpZmRlZiBXSU4zMjY0CisJLyogU29tZWhvdyBXaW4zMiByZXF1aXJlcyB0aGUgcXVvdGVzIGFyb3VuZCB0aGUgcmVkaXJlY3Rpb24gdG9vICovCisJaWR4MyA9IGZpbmRvcHRpb24oKGNoYXJfdSAqKSJzeHEiKTsKKwlpZiAoIShvcHRpb25zW2lkeDNdLmZsYWdzICYgUF9XQVNfU0VUKSkKKwl7CisJICAgIHBfc3hxID0gKGNoYXJfdSAqKSJcIiI7CisJICAgIG9wdGlvbnNbaWR4M10uZGVmX3ZhbFtWSV9ERUZBVUxUXSA9IHBfc3hxOworCX0KKyMgIGVsc2UKKwlpZHgzID0gZmluZG9wdGlvbigoY2hhcl91ICopInNocSIpOworCWlmICghKG9wdGlvbnNbaWR4M10uZmxhZ3MgJiBQX1dBU19TRVQpKQorCXsKKwkgICAgcF9zaHEgPSAoY2hhcl91ICopIlwiIjsKKwkgICAgb3B0aW9uc1tpZHgzXS5kZWZfdmFsW1ZJX0RFRkFVTFRdID0gcF9zaHE7CisJfQorIyAgZW5kaWYKKyMgZW5kaWYKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVElUTEUKKyAgICBzZXRfdGl0bGVfZGVmYXVsdHMoKTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChGRUFUX01VTFRJX0xBTkcpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogV2hlbiAnaGVscGxhbmcnIGlzIHN0aWxsIGF0IGl0cyBkZWZhdWx0IHZhbHVlLCBzZXQgaXQgdG8gImxhbmciLgorICogT25seSB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgb2YgImxhbmciIGFyZSB1c2VkLgorICovCisgICAgdm9pZAorc2V0X2hlbHBsYW5nX2RlZmF1bHQobGFuZykKKyAgICBjaGFyX3UJKmxhbmc7Cit7CisgICAgaW50CQlpZHg7CisKKyAgICBpZiAobGFuZyA9PSBOVUxMIHx8IFNUUkxFTihsYW5nKSA8IDIpCS8qIHNhZmV0eSBjaGVjayAqLworCXJldHVybjsKKyAgICBpZHggPSBmaW5kb3B0aW9uKChjaGFyX3UgKikiaGxnIik7CisgICAgaWYgKCEob3B0aW9uc1tpZHhdLmZsYWdzICYgUF9XQVNfU0VUKSkKKyAgICB7CisJaWYgKG9wdGlvbnNbaWR4XS5mbGFncyAmIFBfQUxMT0NFRCkKKwkgICAgZnJlZV9zdHJpbmdfb3B0aW9uKHBfaGxnKTsKKwlwX2hsZyA9IHZpbV9zdHJzYXZlKGxhbmcpOworCWlmIChwX2hsZyA9PSBOVUxMKQorCSAgICBwX2hsZyA9IGVtcHR5X29wdGlvbjsKKwllbHNlCisJICAgIHBfaGxnWzJdID0gTlVMOworCW9wdGlvbnNbaWR4XS5mbGFncyB8PSBQX0FMTE9DRUQ7CisgICAgfQorfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSQorc3RhdGljIGNoYXJfdSAqZ3VpX2JnX2RlZmF1bHQgX19BUkdTKCh2b2lkKSk7CisKKyAgICBzdGF0aWMgY2hhcl91ICoKK2d1aV9iZ19kZWZhdWx0KCkKK3sKKyAgICBpZiAoZ3VpX2dldF9saWdodG5lc3MoZ3VpLmJhY2tfcGl4ZWwpIDwgMTI3KQorCXJldHVybiAoY2hhcl91ICopImRhcmsiOworICAgIHJldHVybiAoY2hhcl91ICopImxpZ2h0IjsKK30KKworLyoKKyAqIE9wdGlvbiBpbml0aWFsaXphdGlvbnMgdGhhdCBjYW4gb25seSBiZSBkb25lIGFmdGVyIG9wZW5pbmcgdGhlIEdVSSB3aW5kb3cuCisgKi8KKyAgICB2b2lkCitpbml0X2d1aV9vcHRpb25zKCkKK3sKKyAgICAvKiBTZXQgdGhlICdiYWNrZ3JvdW5kJyBvcHRpb24gYWNjb3JkaW5nIHRvIHRoZSBsaWdodG5lc3Mgb2YgdGhlCisgICAgICogYmFja2dyb3VuZCBjb2xvciwgdW5sZXNzIHRoZSB1c2VyIGhhcyBzZXQgaXQgYWxyZWFkeS4gKi8KKyAgICBpZiAoIW9wdGlvbl93YXNfc2V0KChjaGFyX3UgKikiYmciKSAmJiBTVFJDTVAocF9iZywgZ3VpX2JnX2RlZmF1bHQoKSkgIT0gMCkKKyAgICB7CisJc2V0X29wdGlvbl92YWx1ZSgoY2hhcl91ICopImJnIiwgMEwsIGd1aV9iZ19kZWZhdWx0KCksIDApOworCWhpZ2hsaWdodF9jaGFuZ2VkKCk7CisgICAgfQorfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1RJVExFCisvKgorICogJ3RpdGxlJyBhbmQgJ2ljb24nIG9ubHkgZGVmYXVsdCB0byB0cnVlIGlmIHRoZXkgaGF2ZSBub3QgYmVlbiBzZXQgb3IgcmVzZXQKKyAqIGluIC52aW1yYyBhbmQgd2UgY2FuIHJlYWQgdGhlIG9sZCB2YWx1ZS4KKyAqIFdoZW4gJ3RpdGxlJyBhbmQgJ2ljb24nIGhhdmUgYmVlbiByZXNldCBpbiAudmltcmMsIHdlIHdvbid0IGV2ZW4gY2hlY2sgaWYKKyAqIHRoZXkgY2FuIGJlIHJlc2V0LiAgVGhpcyByZWR1Y2VzIHN0YXJ0dXAgdGltZSB3aGVuIHVzaW5nIFggb24gYSByZW1vdGUKKyAqIG1hY2hpbmUuCisgKi8KKyAgICB2b2lkCitzZXRfdGl0bGVfZGVmYXVsdHMoKQoreworICAgIGludAkgICAgaWR4MTsKKyAgICBsb25nICAgIHZhbDsKKworICAgIC8qCisgICAgICogSWYgR1VJIGlzIChnb2luZyB0byBiZSkgdXNlZCwgd2UgY2FuIGFsd2F5cyBzZXQgdGhlIHdpbmRvdyB0aXRsZSBhbmQKKyAgICAgKiBpY29uIG5hbWUuICBTYXZlcyBhIGJpdCBvZiB0aW1lLCBiZWNhdXNlIHRoZSBYMTEgZGlzcGxheSBzZXJ2ZXIgZG9lcworICAgICAqIG5vdCBuZWVkIHRvIGJlIGNvbnRhY3RlZC4KKyAgICAgKi8KKyAgICBpZHgxID0gZmluZG9wdGlvbigoY2hhcl91ICopInRpdGxlIik7CisgICAgaWYgKCEob3B0aW9uc1tpZHgxXS5mbGFncyAmIFBfV0FTX1NFVCkpCisgICAgeworI2lmZGVmIEZFQVRfR1VJCisJaWYgKGd1aS5zdGFydGluZyB8fCBndWkuaW5fdXNlKQorCSAgICB2YWwgPSBUUlVFOworCWVsc2UKKyNlbmRpZgorCSAgICB2YWwgPSBtY2hfY2FuX3Jlc3RvcmVfdGl0bGUoKTsKKwlvcHRpb25zW2lkeDFdLmRlZl92YWxbVklfREVGQVVMVF0gPSAoY2hhcl91ICopdmFsOworCXBfdGl0bGUgPSB2YWw7CisgICAgfQorICAgIGlkeDEgPSBmaW5kb3B0aW9uKChjaGFyX3UgKikiaWNvbiIpOworICAgIGlmICghKG9wdGlvbnNbaWR4MV0uZmxhZ3MgJiBQX1dBU19TRVQpKQorICAgIHsKKyNpZmRlZiBGRUFUX0dVSQorCWlmIChndWkuc3RhcnRpbmcgfHwgZ3VpLmluX3VzZSkKKwkgICAgdmFsID0gVFJVRTsKKwllbHNlCisjZW5kaWYKKwkgICAgdmFsID0gbWNoX2Nhbl9yZXN0b3JlX2ljb24oKTsKKwlvcHRpb25zW2lkeDFdLmRlZl92YWxbVklfREVGQVVMVF0gPSAoY2hhcl91ICopdmFsOworCXBfaWNvbiA9IHZhbDsKKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqIFBhcnNlICdhcmcnIGZvciBvcHRpb24gc2V0dGluZ3MuCisgKgorICogJ2FyZycgbWF5IGJlIElPYnVmZiwgYnV0IG9ubHkgd2hlbiBubyBlcnJvcnMgY2FuIGJlIHByZXNlbnQgYW5kIG9wdGlvbgorICogZG9lcyBub3QgbmVlZCB0byBiZSBleHBhbmRlZCB3aXRoIG9wdGlvbl9leHBhbmQoKS4KKyAqICJvcHRfZmxhZ3MiOgorICogMCBmb3IgIjpzZXQiCisgKiBPUFRfR0xPQkFMIGZvciAiOnNldGdsb2JhbCIKKyAqIE9QVF9MT0NBTCBmb3IgIjpzZXRsb2NhbCIgYW5kIGEgbW9kZWxpbmUKKyAqIE9QVF9NT0RFTElORSBmb3IgYSBtb2RlbGluZQorICoKKyAqIHJldHVybnMgRkFJTCBpZiBhbiBlcnJvciBpcyBkZXRlY3RlZCwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK2RvX3NldChhcmcsIG9wdF9mbGFncykKKyAgICBjaGFyX3UJKmFyZzsJCS8qIG9wdGlvbiBzdHJpbmcgKG1heSBiZSB3cml0dGVuIHRvISkgKi8KKyAgICBpbnQJCW9wdF9mbGFnczsKK3sKKyAgICBpbnQJCW9wdF9pZHg7CisgICAgY2hhcl91CSplcnJtc2c7CisgICAgY2hhcl91CWVycmJ1Zls4MF07CisgICAgY2hhcl91CSpzdGFydGFyZzsKKyAgICBpbnQJCXByZWZpeDsJLyogMTogbm90aGluZywgMDogIm5vIiwgMjogImludiIgaW4gZnJvbnQgb2YgbmFtZSAqLworICAgIGludAkJbmV4dGNoYXI7CSAgICAvKiBuZXh0IG5vbi13aGl0ZSBjaGFyIGFmdGVyIG9wdGlvbiBuYW1lICovCisgICAgaW50CQlhZnRlcmNoYXI7CSAgICAvKiBjaGFyYWN0ZXIganVzdCBhZnRlciBvcHRpb24gbmFtZSAqLworICAgIGludAkJbGVuOworICAgIGludAkJaTsKKyAgICBsb25nCXZhbHVlOworICAgIGludAkJa2V5OworICAgIGxvbmdfdQlmbGFnczsJCSAgICAvKiBmbGFncyBmb3IgY3VycmVudCBvcHRpb24gKi8KKyAgICBjaGFyX3UJKnZhcnAgPSBOVUxMOwkgICAgLyogcG9pbnRlciB0byB2YXJpYWJsZSBmb3IgY3VycmVudCBvcHRpb24gKi8KKyAgICBpbnQJCWRpZF9zaG93ID0gRkFMU0U7ICAgLyogYWxyZWFkeSBzaG93ZWQgb25lIHZhbHVlICovCisgICAgaW50CQlhZGRpbmc7CQkgICAgLyogIm9wdCs9YXJnIiAqLworICAgIGludAkJcHJlcGVuZGluZzsJICAgIC8qICJvcHRePWFyZyIgKi8KKyAgICBpbnQJCXJlbW92aW5nOwkgICAgLyogIm9wdC09YXJnIiAqLworICAgIGludAkJY3BfdmFsID0gMDsKKyAgICBjaGFyX3UJa2V5X25hbWVbMl07CisKKyAgICBpZiAoKmFyZyA9PSBOVUwpCisgICAgeworCXNob3dvcHRpb25zKDAsIG9wdF9mbGFncyk7CisJcmV0dXJuIE9LOworICAgIH0KKworICAgIHdoaWxlICgqYXJnICE9IE5VTCkJCS8qIGxvb3AgdG8gcHJvY2VzcyBhbGwgb3B0aW9ucyAqLworICAgIHsKKwllcnJtc2cgPSBOVUxMOworCXN0YXJ0YXJnID0gYXJnOwkJLyogcmVtZW1iZXIgZm9yIGVycm9yIG1lc3NhZ2UgKi8KKworCWlmIChTVFJOQ01QKGFyZywgImFsbCIsIDMpID09IDAgJiYgIWlzYWxwaGEoYXJnWzNdKSkKKwl7CisJICAgIC8qCisJICAgICAqICI6c2V0IGFsbCIgIHNob3cgYWxsIG9wdGlvbnMuCisJICAgICAqICI6c2V0IGFsbCYiIHNldCBhbGwgb3B0aW9ucyB0byB0aGVpciBkZWZhdWx0IHZhbHVlLgorCSAgICAgKi8KKwkgICAgYXJnICs9IDM7CisJICAgIGlmICgqYXJnID09ICcmJykKKwkgICAgeworCQkrK2FyZzsKKwkJLyogT25seSBmb3IgOnNldCBjb21tYW5kIHNldCBnbG9iYWwgdmFsdWUgb2YgbG9jYWwgb3B0aW9ucy4gKi8KKwkJc2V0X29wdGlvbnNfZGVmYXVsdChPUFRfRlJFRSB8IG9wdF9mbGFncyk7CisJICAgIH0KKwkgICAgZWxzZQorCQlzaG93b3B0aW9ucygxLCBvcHRfZmxhZ3MpOworCX0KKwllbHNlIGlmIChTVFJOQ01QKGFyZywgInRlcm1jYXAiLCA3KSA9PSAwKQorCXsKKwkgICAgc2hvd29wdGlvbnMoMiwgb3B0X2ZsYWdzKTsKKwkgICAgc2hvd190ZXJtY29kZXMoKTsKKwkgICAgYXJnICs9IDc7CisJfQorCWVsc2UKKwl7CisJICAgIHByZWZpeCA9IDE7CisJICAgIGlmIChTVFJOQ01QKGFyZywgIm5vIiwgMikgPT0gMCkKKwkgICAgeworCQlwcmVmaXggPSAwOworCQlhcmcgKz0gMjsKKwkgICAgfQorCSAgICBlbHNlIGlmIChTVFJOQ01QKGFyZywgImludiIsIDMpID09IDApCisJICAgIHsKKwkJcHJlZml4ID0gMjsKKwkJYXJnICs9IDM7CisJICAgIH0KKworCSAgICAvKiBmaW5kIGVuZCBvZiBuYW1lICovCisJICAgIGtleSA9IDA7CisJICAgIGlmICgqYXJnID09ICc8JykKKwkgICAgeworCQluZXh0Y2hhciA9IDA7CisJCW9wdF9pZHggPSAtMTsKKwkJLyogbG9vayBvdXQgZm9yIDx0Xz47PiAqLworCQlpZiAoYXJnWzFdID09ICd0JyAmJiBhcmdbMl0gPT0gJ18nICYmIGFyZ1szXSAmJiBhcmdbNF0pCisJCSAgICBsZW4gPSA1OworCQllbHNlCisJCXsKKwkJICAgIGxlbiA9IDE7CisJCSAgICB3aGlsZSAoYXJnW2xlbl0gIT0gTlVMICYmIGFyZ1tsZW5dICE9ICc+JykKKwkJCSsrbGVuOworCQl9CisJCWlmIChhcmdbbGVuXSAhPSAnPicpCisJCXsKKwkJICAgIGVycm1zZyA9IGVfaW52YXJnOworCQkgICAgZ290byBza2lwOworCQl9CisJCWFyZ1tsZW5dID0gTlVMOwkJCSAgICAvKiBwdXQgTlVMIGFmdGVyIG5hbWUgKi8KKwkJaWYgKGFyZ1sxXSA9PSAndCcgJiYgYXJnWzJdID09ICdfJykgLyogY291bGQgYmUgdGVybSBjb2RlICovCisJCSAgICBvcHRfaWR4ID0gZmluZG9wdGlvbihhcmcgKyAxKTsKKwkJYXJnW2xlbisrXSA9ICc+JzsJCSAgICAvKiByZXN0b3JlICc+JyAqLworCQlpZiAob3B0X2lkeCA9PSAtMSkKKwkJICAgIGtleSA9IGZpbmRfa2V5X29wdGlvbihhcmcgKyAxKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJbGVuID0gMDsKKwkJLyoKKwkJICogVGhlIHR3byBjaGFyYWN0ZXJzIGFmdGVyICJ0XyIgbWF5IG5vdCBiZSBhbHBoYW51bWVyaWMuCisJCSAqLworCQlpZiAoYXJnWzBdID09ICd0JyAmJiBhcmdbMV0gPT0gJ18nICYmIGFyZ1syXSAmJiBhcmdbM10pCisJCSAgICBsZW4gPSA0OworCQllbHNlCisJCSAgICB3aGlsZSAoQVNDSUlfSVNBTE5VTShhcmdbbGVuXSkgfHwgYXJnW2xlbl0gPT0gJ18nKQorCQkJKytsZW47CisJCW5leHRjaGFyID0gYXJnW2xlbl07CisJCWFyZ1tsZW5dID0gTlVMOwkJCSAgICAvKiBwdXQgTlVMIGFmdGVyIG5hbWUgKi8KKwkJb3B0X2lkeCA9IGZpbmRvcHRpb24oYXJnKTsKKwkJYXJnW2xlbl0gPSBuZXh0Y2hhcjsJCSAgICAvKiByZXN0b3JlIG5leHRjaGFyICovCisJCWlmIChvcHRfaWR4ID09IC0xKQorCQkgICAga2V5ID0gZmluZF9rZXlfb3B0aW9uKGFyZyk7CisJICAgIH0KKworCSAgICAvKiByZW1lbWJlciBjaGFyYWN0ZXIgYWZ0ZXIgb3B0aW9uIG5hbWUgKi8KKwkgICAgYWZ0ZXJjaGFyID0gYXJnW2xlbl07CisKKwkgICAgLyogc2tpcCB3aGl0ZSBzcGFjZSwgYWxsb3cgIjpzZXQgYWkgID8iICovCisJICAgIHdoaWxlICh2aW1faXN3aGl0ZShhcmdbbGVuXSkpCisJCSsrbGVuOworCisJICAgIGFkZGluZyA9IEZBTFNFOworCSAgICBwcmVwZW5kaW5nID0gRkFMU0U7CisJICAgIHJlbW92aW5nID0gRkFMU0U7CisJICAgIGlmIChhcmdbbGVuXSAhPSBOVUwgJiYgYXJnW2xlbiArIDFdID09ICc9JykKKwkgICAgeworCQlpZiAoYXJnW2xlbl0gPT0gJysnKQorCQl7CisJCSAgICBhZGRpbmcgPSBUUlVFOwkJLyogIis9IiAqLworCQkgICAgKytsZW47CisJCX0KKwkJZWxzZSBpZiAoYXJnW2xlbl0gPT0gJ14nKQorCQl7CisJCSAgICBwcmVwZW5kaW5nID0gVFJVRTsJCS8qICJePSIgKi8KKwkJICAgICsrbGVuOworCQl9CisJCWVsc2UgaWYgKGFyZ1tsZW5dID09ICctJykKKwkJeworCQkgICAgcmVtb3ZpbmcgPSBUUlVFOwkJLyogIi09IiAqLworCQkgICAgKytsZW47CisJCX0KKwkgICAgfQorCSAgICBuZXh0Y2hhciA9IGFyZ1tsZW5dOworCisJICAgIGlmIChvcHRfaWR4ID09IC0xICYmIGtleSA9PSAwKQkvKiBmb3VuZCBhIG1pc21hdGNoOiBza2lwICovCisJICAgIHsKKwkJZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTE4OiBVbmtub3duIG9wdGlvbiIpOworCQlnb3RvIHNraXA7CisJICAgIH0KKworCSAgICBpZiAob3B0X2lkeCA+PSAwKQorCSAgICB7CisJCWlmIChvcHRpb25zW29wdF9pZHhdLnZhciA9PSBOVUxMKSAgIC8qIGhpZGRlbiBvcHRpb246IHNraXAgKi8KKwkJeworCQkgICAgLyogT25seSBnaXZlIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiByZXF1ZXN0aW5nIHRoZSB2YWx1ZSBvZgorCQkgICAgICogYSBoaWRkZW4gb3B0aW9uLCBpZ25vcmUgc2V0dGluZyBpdC4gKi8KKwkJICAgIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiPTohJjwiLCBuZXh0Y2hhcikgPT0gTlVMTAorCQkJICAgICYmICghKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiBQX0JPT0wpCisJCQkJfHwgbmV4dGNoYXIgPT0gJz8nKSkKKwkJCWVycm1zZyA9IChjaGFyX3UgKilOXygiRTUxOTogT3B0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKKwkJICAgIGdvdG8gc2tpcDsKKwkJfQorCisJCWZsYWdzID0gb3B0aW9uc1tvcHRfaWR4XS5mbGFnczsKKwkJdmFycCA9IGdldF92YXJwX3Njb3BlKCYob3B0aW9uc1tvcHRfaWR4XSksIG9wdF9mbGFncyk7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWZsYWdzID0gUF9TVFJJTkc7CisJCWlmIChrZXkgPCAwKQorCQl7CisJCSAgICBrZXlfbmFtZVswXSA9IEtFWTJURVJNQ0FQMChrZXkpOworCQkgICAga2V5X25hbWVbMV0gPSBLRVkyVEVSTUNBUDEoa2V5KTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGtleV9uYW1lWzBdID0gS1NfS0VZOworCQkgICAga2V5X25hbWVbMV0gPSAoa2V5ICYgMHhmZik7CisJCX0KKwkgICAgfQorCisJICAgIC8qIERpc2FsbG93IGNoYW5naW5nIHNvbWUgb3B0aW9ucyBmcm9tIG1vZGVsaW5lcyAqLworCSAgICBpZiAoKG9wdF9mbGFncyAmIE9QVF9NT0RFTElORSkgJiYgKGZsYWdzICYgUF9TRUNVUkUpKQorCSAgICB7CisJCWVycm1zZyA9IChjaGFyX3UgKilfKCJFNTIwOiBOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIik7CisJCWdvdG8gc2tpcDsKKwkgICAgfQorCisjaWZkZWYgSEFWRV9TQU5EQk9YCisJICAgIC8qIERpc2FsbG93IGNoYW5naW5nIHNvbWUgb3B0aW9ucyBpbiB0aGUgc2FuZGJveCAqLworCSAgICBpZiAoc2FuZGJveCA+IDAgJiYgKGZsYWdzICYgUF9TRUNVUkUpKQorCSAgICB7CisJCWVycm1zZyA9IChjaGFyX3UgKilfKGVfc2FuZGJveCk7CisJCWdvdG8gc2tpcDsKKwkgICAgfQorI2VuZGlmCisKKwkgICAgaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSI/PTohJjwiLCBuZXh0Y2hhcikgIT0gTlVMTCkKKwkgICAgeworCQlhcmcgKz0gbGVuOworCQljcF92YWwgPSBwX2NwOworCQlpZiAobmV4dGNoYXIgPT0gJyYnICYmIGFyZ1sxXSA9PSAndicgJiYgYXJnWzJdID09ICdpJykKKwkJeworCQkgICAgaWYgKGFyZ1szXSA9PSAnbScpCS8qICJvcHQmdmltIjogc2V0IHRvIFZpbSBkZWZhdWx0ICovCisJCSAgICB7CisJCQljcF92YWwgPSBGQUxTRTsKKwkJCWFyZyArPSAzOworCQkgICAgfQorCQkgICAgZWxzZQkJLyogIm9wdCZ2aSI6IHNldCB0byBWaSBkZWZhdWx0ICovCisJCSAgICB7CisJCQljcF92YWwgPSBUUlVFOworCQkJYXJnICs9IDI7CisJCSAgICB9CisJCX0KKwkJaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSI/ISY8IiwgbmV4dGNoYXIpICE9IE5VTEwKKwkJCSYmIGFyZ1sxXSAhPSBOVUwgJiYgIXZpbV9pc3doaXRlKGFyZ1sxXSkpCisJCXsKKwkJICAgIGVycm1zZyA9IGVfdHJhaWxpbmc7CisJCSAgICBnb3RvIHNraXA7CisJCX0KKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIGFsbG93ICc9JyBhbmQgJzonIGFzIE1TRE9TIGNvbW1hbmQuY29tIGFsbG93cyBvbmx5IG9uZQorCSAgICAgKiAnPScgY2hhcmFjdGVyIHBlciAic2V0IiBjb21tYW5kIGxpbmUuIGdycnIuIChqdykKKwkgICAgICovCisJICAgIGlmIChuZXh0Y2hhciA9PSAnPycKKwkJICAgIHx8IChwcmVmaXggPT0gMQorCQkJJiYgdmltX3N0cmNocigoY2hhcl91ICopIj06JjwiLCBuZXh0Y2hhcikgPT0gTlVMTAorCQkJJiYgIShmbGFncyAmIFBfQk9PTCkpKQorCSAgICB7CisJCS8qCisJCSAqIHByaW50IHZhbHVlCisJCSAqLworCQlpZiAoZGlkX3Nob3cpCisJCSAgICBtc2dfcHV0Y2hhcignXG4nKTsJICAgIC8qIGN1cnNvciBiZWxvdyBsYXN0IG9uZSAqLworCQllbHNlCisJCXsKKwkJICAgIGdvdG9jbWRsaW5lKFRSVUUpOwkgICAgLyogY3Vyc29yIGF0IHN0YXR1cyBsaW5lICovCisJCSAgICBkaWRfc2hvdyA9IFRSVUU7CSAgICAvKiByZW1lbWJlciB0aGF0IHdlIGRpZCBhIGxpbmUgKi8KKwkJfQorCQlpZiAob3B0X2lkeCA+PSAwKQorCQl7CisJCSAgICBzaG93b25lb3B0KCZvcHRpb25zW29wdF9pZHhdLCBvcHRfZmxhZ3MpOworI2lmZGVmIEZFQVRfRVZBTAorCQkgICAgaWYgKHBfdmVyYm9zZSA+IDApCisJCSAgICB7CisJCQlpZiAob3B0aW9uc1tvcHRfaWR4XS5zY3JpcHRJRCAhPSAwKQorCQkJeworCQkJICAgIE1TR19QVVRTKF8oIlxuXHRMYXN0IHNldCBmcm9tICIpKTsKKwkJCSAgICBNU0dfUFVUUyhnZXRfc2NyaXB0bmFtZShvcHRpb25zW29wdF9pZHhdLnNjcmlwdElEKSk7CisJCQl9CisJCSAgICB9CisjZW5kaWYKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGNoYXJfdQkgICAgKnA7CisKKwkJICAgIHAgPSBmaW5kX3Rlcm1jb2RlKGtleV9uYW1lKTsKKwkJICAgIGlmIChwID09IE5VTEwpCisJCSAgICB7CisJCQllcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1MTg6IFVua25vd24gb3B0aW9uIik7CisJCQlnb3RvIHNraXA7CisJCSAgICB9CisJCSAgICBlbHNlCisJCQkodm9pZClzaG93X29uZV90ZXJtY29kZShrZXlfbmFtZSwgcCwgVFJVRSk7CisJCX0KKwkJaWYgKG5leHRjaGFyICE9ICc/JworCQkJJiYgbmV4dGNoYXIgIT0gTlVMICYmICF2aW1faXN3aGl0ZShhZnRlcmNoYXIpKQorCQkgICAgZXJybXNnID0gZV90cmFpbGluZzsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKGZsYWdzICYgUF9CT09MKQkJICAgIC8qIGJvb2xlYW4gKi8KKwkJeworCQkgICAgaWYgKG5leHRjaGFyID09ICc9JyB8fCBuZXh0Y2hhciA9PSAnOicpCisJCSAgICB7CisJCQllcnJtc2cgPSBlX2ludmFyZzsKKwkJCWdvdG8gc2tpcDsKKwkJICAgIH0KKworCQkgICAgLyoKKwkJICAgICAqICI6c2V0IG9wdCEiOiBpbnZlcnQKKwkJICAgICAqICI6c2V0IG9wdCYiOiByZXNldCB0byBkZWZhdWx0IHZhbHVlCisJCSAgICAgKiAiOnNldCBvcHQ8IjogcmVzZXQgdG8gZ2xvYmFsIHZhbHVlCisJCSAgICAgKi8KKwkJICAgIGlmIChuZXh0Y2hhciA9PSAnIScpCisJCQl2YWx1ZSA9ICooaW50ICopKHZhcnApIF4gMTsKKwkJICAgIGVsc2UgaWYgKG5leHRjaGFyID09ICcmJykKKwkJCXZhbHVlID0gKGludCkobG9uZylvcHRpb25zW29wdF9pZHhdLmRlZl92YWxbCisJCQkJCQkoKGZsYWdzICYgUF9WSV9ERUYpIHx8IGNwX3ZhbCkKKwkJCQkJCSA/ICBWSV9ERUZBVUxUIDogVklNX0RFRkFVTFRdOworCQkgICAgZWxzZSBpZiAobmV4dGNoYXIgPT0gJzwnKQorCQkgICAgeworCQkJLyogRm9yICdhdXRvcmVhZCcgLTEgbWVhbnMgdG8gdXNlIGdsb2JhbCB2YWx1ZS4gKi8KKwkJCWlmICgoaW50ICopdmFycCA9PSAmY3VyYnVmLT5iX3BfYXIKKwkJCQkJCSAgICAmJiBvcHRfZmxhZ3MgPT0gT1BUX0xPQ0FMKQorCQkJICAgIHZhbHVlID0gLTE7CisJCQllbHNlCisJCQkgICAgdmFsdWUgPSAqKGludCAqKWdldF92YXJwX3Njb3BlKCYob3B0aW9uc1tvcHRfaWR4XSksCisJCQkJCQkJCSAgT1BUX0dMT0JBTCk7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQkvKgorCQkJICogIjpzZXQgaW52b3B0IjogaW52ZXJ0CisJCQkgKiAiOnNldCBvcHQiIG9yICI6c2V0IG5vb3B0Ijogc2V0IG9yIHJlc2V0CisJCQkgKi8KKwkJCWlmIChuZXh0Y2hhciAhPSBOVUwgJiYgIXZpbV9pc3doaXRlKGFmdGVyY2hhcikpCisJCQl7CisJCQkgICAgZXJybXNnID0gZV90cmFpbGluZzsKKwkJCSAgICBnb3RvIHNraXA7CisJCQl9CisJCQlpZiAocHJlZml4ID09IDIpCS8qIGludiAqLworCQkJICAgIHZhbHVlID0gKihpbnQgKikodmFycCkgXiAxOworCQkJZWxzZQorCQkJICAgIHZhbHVlID0gcHJlZml4OworCQkgICAgfQorCisJCSAgICBlcnJtc2cgPSBzZXRfYm9vbF9vcHRpb24ob3B0X2lkeCwgdmFycCwgKGludCl2YWx1ZSwKKwkJCQkJCQkJICAgb3B0X2ZsYWdzKTsKKwkJfQorCQllbHNlCQkJCSAgICAvKiBudW1lcmljIG9yIHN0cmluZyAqLworCQl7CisJCSAgICBpZiAodmltX3N0cmNocigoY2hhcl91ICopIj06JjwiLCBuZXh0Y2hhcikgPT0gTlVMTAorCQkJCQkJCSAgICAgICB8fCBwcmVmaXggIT0gMSkKKwkJICAgIHsKKwkJCWVycm1zZyA9IGVfaW52YXJnOworCQkJZ290byBza2lwOworCQkgICAgfQorCisJCSAgICBpZiAoZmxhZ3MgJiBQX05VTSkJCSAgICAvKiBudW1lcmljICovCisJCSAgICB7CisJCQkvKgorCQkJICogRGlmZmVyZW50IHdheXMgdG8gc2V0IGEgbnVtYmVyIG9wdGlvbjoKKwkJCSAqICYJICAgIHNldCB0byBkZWZhdWx0IHZhbHVlCisJCQkgKiA8CSAgICBzZXQgdG8gZ2xvYmFsIHZhbHVlCisJCQkgKiA8eHg+CSAgICBhY2NlcHQgc3BlY2lhbCBrZXkgY29kZXMgZm9yICd3aWxkY2hhcicKKwkJCSAqIGMJICAgIGFjY2VwdCBhbnkgbm9uLWRpZ2l0IGZvciAnd2lsZGNoYXInCisJCQkgKiBbLV0wLTkgICBzZXQgbnVtYmVyCisJCQkgKiBvdGhlciAgICBlcnJvcgorCQkJICovCisJCQkrK2FyZzsKKwkJCWlmIChuZXh0Y2hhciA9PSAnJicpCisJCQkgICAgdmFsdWUgPSAobG9uZylvcHRpb25zW29wdF9pZHhdLmRlZl92YWxbCisJCQkJCQkoKGZsYWdzICYgUF9WSV9ERUYpIHx8IGNwX3ZhbCkKKwkJCQkJCSA/ICBWSV9ERUZBVUxUIDogVklNX0RFRkFVTFRdOworCQkJZWxzZSBpZiAobmV4dGNoYXIgPT0gJzwnKQorCQkJICAgIHZhbHVlID0gKihsb25nICopZ2V0X3ZhcnBfc2NvcGUoJihvcHRpb25zW29wdF9pZHhdKSwKKwkJCQkJCQkJICBPUFRfR0xPQkFMKTsKKwkJCWVsc2UgaWYgKCgobG9uZyAqKXZhcnAgPT0gJnBfd2MKKwkJCQkgICAgfHwgKGxvbmcgKil2YXJwID09ICZwX3djbSkKKwkJCQkmJiAoKmFyZyA9PSAnPCcKKwkJCQkgICAgfHwgKmFyZyA9PSAnXicKKwkJCQkgICAgfHwgKCghYXJnWzFdIHx8IHZpbV9pc3doaXRlKGFyZ1sxXSkpCisJCQkJCSYmICFWSU1fSVNESUdJVCgqYXJnKSkpKQorCQkJeworCQkJICAgIHZhbHVlID0gc3RyaW5nX3RvX2tleShhcmcpOworCQkJICAgIGlmICh2YWx1ZSA9PSAwICYmIChsb25nICopdmFycCAhPSAmcF93Y20pCisJCQkgICAgeworCQkJCWVycm1zZyA9IGVfaW52YXJnOworCQkJCWdvdG8gc2tpcDsKKwkJCSAgICB9CisJCQl9CisJCQkJLyogYWxsb3cgbmVnYXRpdmUgbnVtYmVycyAoZm9yICd1bmRvbGV2ZWxzJykgKi8KKwkJCWVsc2UgaWYgKCphcmcgPT0gJy0nIHx8IFZJTV9JU0RJR0lUKCphcmcpKQorCQkJeworCQkJICAgIGkgPSAwOworCQkJICAgIGlmICgqYXJnID09ICctJykKKwkJCQlpID0gMTsKKyNpZmRlZiBIQVZFX1NUUlRPTAorCQkJICAgIHZhbHVlID0gc3RydG9sKChjaGFyICopYXJnLCBOVUxMLCAwKTsKKwkJCSAgICBpZiAoYXJnW2ldID09ICcwJyAmJiBUT0xPV0VSX0FTQyhhcmdbaSArIDFdKSA9PSAneCcpCisJCQkJaSArPSAyOworI2Vsc2UKKwkJCSAgICB2YWx1ZSA9IGF0b2woKGNoYXIgKilhcmcpOworI2VuZGlmCisJCQkgICAgd2hpbGUgKFZJTV9JU0RJR0lUKGFyZ1tpXSkpCisJCQkJKytpOworCQkJICAgIGlmIChhcmdbaV0gIT0gTlVMICYmICF2aW1faXN3aGl0ZShhcmdbaV0pKQorCQkJICAgIHsKKwkJCQllcnJtc2cgPSBlX2ludmFyZzsKKwkJCQlnb3RvIHNraXA7CisJCQkgICAgfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJICAgIGVycm1zZyA9IChjaGFyX3UgKilOXygiRTUyMTogTnVtYmVyIHJlcXVpcmVkIGFmdGVyID0iKTsKKwkJCSAgICBnb3RvIHNraXA7CisJCQl9CisKKwkJCWlmIChhZGRpbmcpCisJCQkgICAgdmFsdWUgPSAqKGxvbmcgKil2YXJwICsgdmFsdWU7CisJCQlpZiAocHJlcGVuZGluZykKKwkJCSAgICB2YWx1ZSA9ICoobG9uZyAqKXZhcnAgKiB2YWx1ZTsKKwkJCWlmIChyZW1vdmluZykKKwkJCSAgICB2YWx1ZSA9ICoobG9uZyAqKXZhcnAgLSB2YWx1ZTsKKwkJCWVycm1zZyA9IHNldF9udW1fb3B0aW9uKG9wdF9pZHgsIHZhcnAsIHZhbHVlLAorCQkJCQkJCSAgIGVycmJ1Ziwgb3B0X2ZsYWdzKTsKKwkJICAgIH0KKwkJICAgIGVsc2UgaWYgKG9wdF9pZHggPj0gMCkJCSAgICAvKiBzdHJpbmcgKi8KKwkJICAgIHsKKwkJCWNoYXJfdQkgICAgKnNhdmVfYXJnID0gTlVMTDsKKwkJCWNoYXJfdQkgICAgKnMgPSBOVUxMOworCQkJY2hhcl91CSAgICAqb2xkdmFsOwkvKiBwcmV2aW91cyB2YWx1ZSBpZiAqdmFycCAqLworCQkJY2hhcl91CSAgICAqbmV3dmFsOworCQkJY2hhcl91CSAgICAqb3JpZ3ZhbDsKKwkJCXVuc2lnbmVkICAgIG5ld2xlbjsKKwkJCWludAkgICAgY29tbWE7CisJCQlpbnQJICAgIGJzOworCQkJaW50CSAgICBuZXdfdmFsdWVfYWxsb2NlZDsJLyogbmV3IHN0cmluZyBvcHRpb24KKwkJCQkJCQkgICB3YXMgYWxsb2NhdGVkICovCisKKwkJCS8qIFdoZW4gdXNpbmcgIjpzZXQgb3B0PXZhbCIgZm9yIGEgZ2xvYmFsIG9wdGlvbgorCQkJICogd2l0aCBhIGxvY2FsIHZhbHVlIHRoZSBsb2NhbCB2YWx1ZSB3aWxsIGJlCisJCQkgKiByZXNldCwgdXNlIHRoZSBnbG9iYWwgdmFsdWUgaGVyZS4gKi8KKwkJCWlmICgob3B0X2ZsYWdzICYgKE9QVF9MT0NBTCB8IE9QVF9HTE9CQUwpKSA9PSAwCisJCQkJJiYgKGludClvcHRpb25zW29wdF9pZHhdLmluZGlyID49IFBWX0JPVEgpCisJCQkgICAgdmFycCA9IG9wdGlvbnNbb3B0X2lkeF0udmFyOworCisJCQkvKiBUaGUgb2xkIHZhbHVlIGlzIGtlcHQgdW50aWwgd2UgYXJlIHN1cmUgdGhhdCB0aGUKKwkJCSAqIG5ldyB2YWx1ZSBpcyB2YWxpZC4gKi8KKwkJCW9sZHZhbCA9ICooY2hhcl91ICoqKXZhcnA7CisJCQlpZiAobmV4dGNoYXIgPT0gJyYnKQkvKiBzZXQgdG8gZGVmYXVsdCB2YWwgKi8KKwkJCXsKKwkJCSAgICBuZXd2YWwgPSBvcHRpb25zW29wdF9pZHhdLmRlZl92YWxbCisJCQkJCQkoKGZsYWdzICYgUF9WSV9ERUYpIHx8IGNwX3ZhbCkKKwkJCQkJCSA/ICBWSV9ERUZBVUxUIDogVklNX0RFRkFVTFRdOworCQkJICAgIGlmICgoY2hhcl91ICoqKXZhcnAgPT0gJnBfYmcpCisJCQkgICAgeworCQkJCS8qIGd1ZXNzIHRoZSB2YWx1ZSBvZiAnYmFja2dyb3VuZCcgKi8KKyNpZmRlZiBGRUFUX0dVSQorCQkJCWlmIChndWkuaW5fdXNlKQorCQkJCSAgICBuZXd2YWwgPSBndWlfYmdfZGVmYXVsdCgpOworCQkJCWVsc2UKKyNlbmRpZgorCQkJCSAgICBpZiAoU1RSQ01QKFRfTkFNRSwgImxpbnV4IikgPT0gMCkKKwkJCQkJbmV3dmFsID0gKGNoYXJfdSAqKSJkYXJrIjsKKwkJCSAgICB9CisKKwkJCSAgICAvKiBleHBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB+IChzaW5jZSB0aGUKKwkJCSAgICAgKiBkZWZhdWx0IHZhbHVlIHdhcyBhbHJlYWR5IGV4cGFuZGVkLCBvbmx5CisJCQkgICAgICogcmVxdWlyZWQgd2hlbiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3YXMgc2V0CisJCQkgICAgICogbGF0ZXIgKi8KKwkJCSAgICBpZiAobmV3dmFsID09IE5VTEwpCisJCQkJbmV3dmFsID0gZW1wdHlfb3B0aW9uOworCQkJICAgIGVsc2UKKwkJCSAgICB7CisJCQkJcyA9IG9wdGlvbl9leHBhbmQob3B0X2lkeCwgbmV3dmFsKTsKKwkJCQlpZiAocyA9PSBOVUxMKQorCQkJCSAgICBzID0gbmV3dmFsOworCQkJCW5ld3ZhbCA9IHZpbV9zdHJzYXZlKHMpOworCQkJICAgIH0KKwkJCSAgICBuZXdfdmFsdWVfYWxsb2NlZCA9IFRSVUU7CisJCQl9CisJCQllbHNlIGlmIChuZXh0Y2hhciA9PSAnPCcpCS8qIHNldCB0byBnbG9iYWwgdmFsICovCisJCQl7CisJCQkgICAgbmV3dmFsID0gdmltX3N0cnNhdmUoKihjaGFyX3UgKiopZ2V0X3ZhcnBfc2NvcGUoCisJCQkJCSAgICAgJihvcHRpb25zW29wdF9pZHhdKSwgT1BUX0dMT0JBTCkpOworCQkJICAgIG5ld192YWx1ZV9hbGxvY2VkID0gVFJVRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCSAgICArK2FyZzsJLyoganVtcCB0byBhZnRlciB0aGUgJz0nIG9yICc6JyAqLworCisJCQkgICAgLyoKKwkJCSAgICAgKiBTZXQgJ2tleXdvcmRwcmcnIHRvICI6aGVscCIgaWYgYW4gZW1wdHkKKwkJCSAgICAgKiB2YWx1ZSB3YXMgcGFzc2VkIHRvIDpzZXQgYnkgdGhlIHVzZXIuCisJCQkgICAgICogTWlzdXNlIGVycmJ1ZltdIGZvciB0aGUgcmVzdWx0aW5nIHN0cmluZy4KKwkJCSAgICAgKi8KKwkJCSAgICBpZiAodmFycCA9PSAoY2hhcl91ICopJnBfa3AKKwkJCQkJICAgICAgJiYgKCphcmcgPT0gTlVMIHx8ICphcmcgPT0gJyAnKSkKKwkJCSAgICB7CisJCQkJU1RSQ1BZKGVycmJ1ZiwgIjpoZWxwIik7CisJCQkJc2F2ZV9hcmcgPSBhcmc7CisJCQkJYXJnID0gZXJyYnVmOworCQkJICAgIH0KKwkJCSAgICAvKgorCQkJICAgICAqIENvbnZlcnQgJ3doaWNod3JhcCcgbnVtYmVyIHRvIHN0cmluZywgZm9yCisJCQkgICAgICogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBWaW0gMy4wLgorCQkJICAgICAqIE1pc3VzZSBlcnJidWZbXSBmb3IgdGhlIHJlc3VsdGluZyBzdHJpbmcuCisJCQkgICAgICovCisJCQkgICAgZWxzZSBpZiAodmFycCA9PSAoY2hhcl91ICopJnBfd3cKKwkJCQkJCQkgJiYgVklNX0lTRElHSVQoKmFyZykpCisJCQkgICAgeworCQkJCSplcnJidWYgPSBOVUw7CisJCQkJaSA9IGdldGRpZ2l0cygmYXJnKTsKKwkJCQlpZiAoaSAmIDEpCisJCQkJICAgIFNUUkNBVChlcnJidWYsICJiLCIpOworCQkJCWlmIChpICYgMikKKwkJCQkgICAgU1RSQ0FUKGVycmJ1ZiwgInMsIik7CisJCQkJaWYgKGkgJiA0KQorCQkJCSAgICBTVFJDQVQoZXJyYnVmLCAiaCxsLCIpOworCQkJCWlmIChpICYgOCkKKwkJCQkgICAgU1RSQ0FUKGVycmJ1ZiwgIjwsPiwiKTsKKwkJCQlpZiAoaSAmIDE2KQorCQkJCSAgICBTVFJDQVQoZXJyYnVmLCAiWyxdLCIpOworCQkJCWlmICgqZXJyYnVmICE9IE5VTCkJLyogcmVtb3ZlIHRyYWlsaW5nICwgKi8KKwkJCQkgICAgZXJyYnVmW1NUUkxFTihlcnJidWYpIC0gMV0gPSBOVUw7CisJCQkJc2F2ZV9hcmcgPSBhcmc7CisJCQkJYXJnID0gZXJyYnVmOworCQkJICAgIH0KKwkJCSAgICAvKgorCQkJICAgICAqIFJlbW92ZSAnPicgYmVmb3JlICdkaXInIGFuZCAnYmRpcicsIGZvcgorCQkJICAgICAqIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbiAzLjAKKwkJCSAgICAgKi8KKwkJCSAgICBlbHNlIGlmICggICphcmcgPT0gJz4nCisJCQkJICAgICYmICh2YXJwID09IChjaGFyX3UgKikmcF9kaXIKKwkJCQkJICAgIHx8IHZhcnAgPT0gKGNoYXJfdSAqKSZwX2JkaXIpKQorCQkJICAgIHsKKwkJCQkrK2FyZzsKKwkJCSAgICB9CisKKwkJCSAgICAvKiBXaGVuIHNldHRpbmcgdGhlIGxvY2FsIHZhbHVlIG9mIGEgZ2xvYmFsCisJCQkgICAgICogb3B0aW9uLCB0aGUgb2xkIHZhbHVlIG1heSBiZSB0aGUgZ2xvYmFsIHZhbHVlLiAqLworCQkJICAgIGlmICgoaW50KW9wdGlvbnNbb3B0X2lkeF0uaW5kaXIgPj0gUFZfQk9USAorCQkJCQkJICAgJiYgKG9wdF9mbGFncyAmIE9QVF9MT0NBTCkpCisJCQkJb3JpZ3ZhbCA9ICooY2hhcl91ICoqKWdldF92YXJwKAorCQkJCQkJCSAgICZvcHRpb25zW29wdF9pZHhdKTsKKwkJCSAgICBlbHNlCisJCQkJb3JpZ3ZhbCA9IG9sZHZhbDsKKworCQkJICAgIC8qCisJCQkgICAgICogQ29weSB0aGUgbmV3IHN0cmluZyBpbnRvIGFsbG9jYXRlZCBtZW1vcnkuCisJCQkgICAgICogQ2FuJ3QgdXNlIHNldF9zdHJpbmdfb3B0aW9uX2RpcmVjdCgpLCBiZWNhdXNlCisJCQkgICAgICogd2UgbmVlZCB0byByZW1vdmUgdGhlIGJhY2tzbGFzaGVzLgorCQkJICAgICAqLworCQkJICAgIC8qIGdldCBhIGJpdCB0b28gbXVjaCAqLworCQkJICAgIG5ld2xlbiA9ICh1bnNpZ25lZClTVFJMRU4oYXJnKSArIDE7CisJCQkgICAgaWYgKGFkZGluZyB8fCBwcmVwZW5kaW5nIHx8IHJlbW92aW5nKQorCQkJCW5ld2xlbiArPSAodW5zaWduZWQpU1RSTEVOKG9yaWd2YWwpICsgMTsKKwkJCSAgICBuZXd2YWwgPSBhbGxvYyhuZXdsZW4pOworCQkJICAgIGlmIChuZXd2YWwgPT0gTlVMTCkgIC8qIG91dCBvZiBtZW0sIGRvbid0IGNoYW5nZSAqLworCQkJCWJyZWFrOworCQkJICAgIHMgPSBuZXd2YWw7CisKKwkJCSAgICAvKgorCQkJICAgICAqIENvcHkgdGhlIHN0cmluZywgc2tpcCBvdmVyIGVzY2FwZWQgY2hhcnMuCisJCQkgICAgICogRm9yIE1TLURPUyBhbmQgV0lOMzIgYmFja3NsYXNoZXMgYmVmb3JlIG5vcm1hbAorCQkJICAgICAqIGZpbGUgbmFtZSBjaGFyYWN0ZXJzIGFyZSBub3QgcmVtb3ZlZCwgYW5kIGtlZXAKKwkJCSAgICAgKiBiYWNrc2xhc2ggYXQgc3RhcnQsIGZvciAiXFxtYWNoaW5lXHBhdGgiLCBidXQKKwkJCSAgICAgKiBkbyByZW1vdmUgaXQgZm9yICJcXFxcbWFjaGluZVxccGF0aCIuCisJCQkgICAgICogVGhlIHJldmVyc2UgaXMgZm91bmQgaW4gRXhwYW5kT2xkU2V0dGluZygpLgorCQkJICAgICAqLworCQkJICAgIHdoaWxlICgqYXJnICYmICF2aW1faXN3aGl0ZSgqYXJnKSkKKwkJCSAgICB7CisJCQkJaWYgKCphcmcgPT0gJ1xcJyAmJiBhcmdbMV0gIT0gTlVMCisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJCQkJCSYmICEoKGZsYWdzICYgUF9FWFBBTkQpCisJCQkJCQkmJiB2aW1faXNmaWxlYyhhcmdbMV0pCisJCQkJCQkmJiAoYXJnWzFdICE9ICdcXCcKKwkJCQkJCSAgICB8fCAocyA9PSBuZXd2YWwKKwkJCQkJCQkmJiBhcmdbMl0gIT0gJ1xcJykpKQorI2VuZGlmCisJCQkJCQkJCSAgICApCisJCQkJICAgICsrYXJnOwkvKiByZW1vdmUgYmFja3NsYXNoICovCisjaWZkZWYgRkVBVF9NQllURQorCQkJCWlmIChoYXNfbWJ5dGUKKwkJCQkJJiYgKGkgPSAoKm1iX3B0cjJsZW5fY2hlY2spKGFyZykpID4gMSkKKwkJCQl7CisJCQkJICAgIC8qIGNvcHkgbXVsdGlieXRlIGNoYXIgKi8KKwkJCQkgICAgbWNoX21lbW1vdmUocywgYXJnLCAoc2l6ZV90KWkpOworCQkJCSAgICBhcmcgKz0gaTsKKwkJCQkgICAgcyArPSBpOworCQkJCX0KKwkJCQllbHNlCisjZW5kaWYKKwkJCQkgICAgKnMrKyA9ICphcmcrKzsKKwkJCSAgICB9CisJCQkgICAgKnMgPSBOVUw7CisKKwkJCSAgICAvKgorCQkJICAgICAqIEV4cGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIH4uCisJCQkgICAgICogRG9uJ3QgZG8gaXQgd2hlbiBhZGRpbmcgd2l0aG91dCBpbnNlcnRpbmcgYQorCQkJICAgICAqIGNvbW1hLgorCQkJICAgICAqLworCQkJICAgIGlmICghKGFkZGluZyB8fCBwcmVwZW5kaW5nIHx8IHJlbW92aW5nKQorCQkJCQkJCSB8fCAoZmxhZ3MgJiBQX0NPTU1BKSkKKwkJCSAgICB7CisJCQkJcyA9IG9wdGlvbl9leHBhbmQob3B0X2lkeCwgbmV3dmFsKTsKKwkJCQlpZiAocyAhPSBOVUxMKQorCQkJCXsKKwkJCQkgICAgdmltX2ZyZWUobmV3dmFsKTsKKwkJCQkgICAgbmV3bGVuID0gKHVuc2lnbmVkKVNUUkxFTihzKSArIDE7CisJCQkJICAgIGlmIChhZGRpbmcgfHwgcHJlcGVuZGluZyB8fCByZW1vdmluZykKKwkJCQkJbmV3bGVuICs9ICh1bnNpZ25lZClTVFJMRU4ob3JpZ3ZhbCkgKyAxOworCQkJCSAgICBuZXd2YWwgPSBhbGxvYyhuZXdsZW4pOworCQkJCSAgICBpZiAobmV3dmFsID09IE5VTEwpCisJCQkJCWJyZWFrOworCQkJCSAgICBTVFJDUFkobmV3dmFsLCBzKTsKKwkJCQl9CisJCQkgICAgfQorCisJCQkgICAgLyogbG9jYXRlIG5ld3ZhbFtdIGluIG9yaWd2YWxbXSB3aGVuIHJlbW92aW5nIGl0CisJCQkgICAgICogYW5kIHdoZW4gYWRkaW5nIHRvIGF2b2lkIGR1cGxpY2F0ZXMgKi8KKwkJCSAgICBpID0gMDsJLyogaW5pdCBmb3IgR0NDICovCisJCQkgICAgaWYgKHJlbW92aW5nIHx8IChmbGFncyAmIFBfTk9EVVApKQorCQkJICAgIHsKKwkJCQlpID0gKGludClTVFJMRU4obmV3dmFsKTsKKwkJCQlicyA9IDA7CisJCQkJZm9yIChzID0gb3JpZ3ZhbDsgKnM7ICsrcykKKwkJCQl7CisJCQkJICAgIGlmICgoIShmbGFncyAmIFBfQ09NTUEpCisJCQkJCQl8fCBzID09IG9yaWd2YWwKKwkJCQkJCXx8IChzWy0xXSA9PSAnLCcgJiYgIShicyAmIDEpKSkKKwkJCQkJICAgICYmIFNUUk5DTVAocywgbmV3dmFsLCBpKSA9PSAwCisJCQkJCSAgICAmJiAoIShmbGFncyAmIFBfQ09NTUEpCisJCQkJCQl8fCBzW2ldID09ICcsJworCQkJCQkJfHwgc1tpXSA9PSBOVUwpKQorCQkJCQlicmVhazsKKwkJCQkgICAgLyogQ291bnQgYmFja3NwYWNlcy4gIE9ubHkgYSBjb21tYSB3aXRoIGFuCisJCQkJICAgICAqIGV2ZW4gbnVtYmVyIG9mIGJhY2tzcGFjZXMgYmVmb3JlIGl0IGlzCisJCQkJICAgICAqIHJlY29nbml6ZWQgYXMgYSBzZXBhcmF0b3IgKi8KKwkJCQkgICAgaWYgKHMgPiBvcmlndmFsICYmIHNbLTFdID09ICdcXCcpCisJCQkJCSsrYnM7CisJCQkJICAgIGVsc2UKKwkJCQkJYnMgPSAwOworCQkJCX0KKworCQkJCS8qIGRvIG5vdCBhZGQgaWYgYWxyZWFkeSB0aGVyZSAqLworCQkJCWlmICgoYWRkaW5nIHx8IHByZXBlbmRpbmcpICYmICpzKQorCQkJCXsKKwkJCQkgICAgcHJlcGVuZGluZyA9IEZBTFNFOworCQkJCSAgICBhZGRpbmcgPSBGQUxTRTsKKwkJCQkgICAgU1RSQ1BZKG5ld3ZhbCwgb3JpZ3ZhbCk7CisJCQkJfQorCQkJICAgIH0KKworCQkJICAgIC8qIGNvbmNhdGVuYXRlIHRoZSB0d28gc3RyaW5nczsgYWRkIGEgJywnIGlmCisJCQkgICAgICogbmVlZGVkICovCisJCQkgICAgaWYgKGFkZGluZyB8fCBwcmVwZW5kaW5nKQorCQkJICAgIHsKKwkJCQljb21tYSA9ICgoZmxhZ3MgJiBQX0NPTU1BKSAmJiAqb3JpZ3ZhbCAhPSBOVUwKKwkJCQkJCQkgICAmJiAqbmV3dmFsICE9IE5VTCk7CisJCQkJaWYgKGFkZGluZykKKwkJCQl7CisJCQkJICAgIGkgPSAoaW50KVNUUkxFTihvcmlndmFsKTsKKwkJCQkgICAgbWNoX21lbW1vdmUobmV3dmFsICsgaSArIGNvbW1hLCBuZXd2YWwsCisJCQkJCQkJICBTVFJMRU4obmV3dmFsKSArIDEpOworCQkJCSAgICBtY2hfbWVtbW92ZShuZXd2YWwsIG9yaWd2YWwsIChzaXplX3QpaSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJICAgIGkgPSAoaW50KVNUUkxFTihuZXd2YWwpOworCQkJCSAgICBtY2hfbWVtbW92ZShuZXd2YWwgKyBpICsgY29tbWEsIG9yaWd2YWwsCisJCQkJCQkJICBTVFJMRU4ob3JpZ3ZhbCkgKyAxKTsKKwkJCQl9CisJCQkJaWYgKGNvbW1hKQorCQkJCSAgICBuZXd2YWxbaV0gPSAnLCc7CisJCQkgICAgfQorCisJCQkgICAgLyogUmVtb3ZlIG5ld3ZhbFtdIGZyb20gb3JpZ3ZhbFtdLiAoTm90ZTogImkiIGhhcworCQkJICAgICAqIGJlZW4gc2V0IGFib3ZlIGFuZCBpcyB1c2VkIGhlcmUpLiAqLworCQkJICAgIGlmIChyZW1vdmluZykKKwkJCSAgICB7CisJCQkJU1RSQ1BZKG5ld3ZhbCwgb3JpZ3ZhbCk7CisJCQkJaWYgKCpzKQorCQkJCXsKKwkJCQkgICAgLyogbWF5IG5lZWQgdG8gcmVtb3ZlIGEgY29tbWEgKi8KKwkJCQkgICAgaWYgKGZsYWdzICYgUF9DT01NQSkKKwkJCQkgICAgeworCQkJCQlpZiAocyA9PSBvcmlndmFsKQorCQkJCQl7CisJCQkJCSAgICAvKiBpbmNsdWRlIGNvbW1hIGFmdGVyIHN0cmluZyAqLworCQkJCQkgICAgaWYgKHNbaV0gPT0gJywnKQorCQkJCQkJKytpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkgICAgLyogaW5jbHVkZSBjb21tYSBiZWZvcmUgc3RyaW5nICovCisJCQkJCSAgICAtLXM7CisJCQkJCSAgICArK2k7CisJCQkJCX0KKwkJCQkgICAgfQorCQkJCSAgICBtY2hfbWVtbW92ZShuZXd2YWwgKyAocyAtIG9yaWd2YWwpLCBzICsgaSwKKwkJCQkJCQkgICBTVFJMRU4ocyArIGkpICsgMSk7CisJCQkJfQorCQkJICAgIH0KKworCQkJICAgIGlmIChmbGFncyAmIFBfRkxBR0xJU1QpCisJCQkgICAgeworCQkJCS8qIFJlbW92ZSBmbGFncyB0aGF0IGFwcGVhciB0d2ljZS4gKi8KKwkJCQlmb3IgKHMgPSBuZXd2YWw7ICpzOyArK3MpCisJCQkJICAgIGlmICgoIShmbGFncyAmIFBfQ09NTUEpIHx8ICpzICE9ICcsJykKKwkJCQkJICAgICYmIHZpbV9zdHJjaHIocyArIDEsICpzKSAhPSBOVUxMKQorCQkJCSAgICB7CisJCQkJCVNUUkNQWShzLCBzICsgMSk7CisJCQkJCS0tczsKKwkJCQkgICAgfQorCQkJICAgIH0KKworCQkJICAgIGlmIChzYXZlX2FyZyAhPSBOVUxMKSAgIC8qIG51bWJlciBmb3IgJ3doaWNod3JhcCcgKi8KKwkJCQlhcmcgPSBzYXZlX2FyZzsKKwkJCSAgICBuZXdfdmFsdWVfYWxsb2NlZCA9IFRSVUU7CisJCQl9CisKKwkJCS8qIFNldCB0aGUgbmV3IHZhbHVlLiAqLworCQkJKihjaGFyX3UgKiopKHZhcnApID0gbmV3dmFsOworCisJCQkvKiBIYW5kbGUgc2lkZSBlZmZlY3RzLCBhbmQgc2V0IHRoZSBnbG9iYWwgdmFsdWUgZm9yCisJCQkgKiAiOnNldCIgb24gbG9jYWwgb3B0aW9ucy4gKi8KKwkJCWVycm1zZyA9IGRpZF9zZXRfc3RyaW5nX29wdGlvbihvcHRfaWR4LCAoY2hhcl91ICoqKXZhcnAsCisJCQkJbmV3X3ZhbHVlX2FsbG9jZWQsIG9sZHZhbCwgZXJyYnVmLCBvcHRfZmxhZ3MpOworCisJCQkvKiBJZiBlcnJvciBkZXRlY3RlZCwgcHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UuICovCisJCQlpZiAoZXJybXNnICE9IE5VTEwpCisJCQkgICAgZ290byBza2lwOworCQkgICAgfQorCQkgICAgZWxzZQkgICAgLyoga2V5IGNvZGUgb3B0aW9uICovCisJCSAgICB7CisJCQljaGFyX3UJICAgICpwOworCisJCQlpZiAobmV4dGNoYXIgPT0gJyYnKQorCQkJeworCQkJICAgIGlmIChhZGRfdGVybWNhcF9lbnRyeShrZXlfbmFtZSwgVFJVRSkgPT0gRkFJTCkKKwkJCQllcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1MjI6IE5vdCBmb3VuZCBpbiB0ZXJtY2FwIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkgICAgKythcmc7IC8qIGp1bXAgdG8gYWZ0ZXIgdGhlICc9JyBvciAnOicgKi8KKwkJCSAgICBmb3IgKHAgPSBhcmc7ICpwICYmICF2aW1faXN3aGl0ZSgqcCk7ICsrcCkKKwkJCQlpZiAoKnAgPT0gJ1xcJyAmJiBwWzFdICE9IE5VTCkKKwkJCQkgICAgKytwOworCQkJICAgIG5leHRjaGFyID0gKnA7CisJCQkgICAgKnAgPSBOVUw7CisJCQkgICAgYWRkX3Rlcm1jb2RlKGtleV9uYW1lLCBhcmcsIEZBTFNFKTsKKwkJCSAgICAqcCA9IG5leHRjaGFyOworCQkJfQorCQkJaWYgKGZ1bGxfc2NyZWVuKQorCQkJICAgIHR0ZXN0KEZBTFNFKTsKKwkJCXJlZHJhd19hbGxfbGF0ZXIoQ0xFQVIpOworCQkgICAgfQorCQl9CisJCWlmIChvcHRfaWR4ID49IDApCisJCSAgICBvcHRpb25zW29wdF9pZHhdLmZsYWdzIHw9IFBfV0FTX1NFVDsKKwkgICAgfQorCitza2lwOgorCSAgICAvKgorCSAgICAgKiBBZHZhbmNlIHRvIG5leHQgYXJndW1lbnQuCisJICAgICAqIC0gc2tpcCB1bnRpbCBhIGJsYW5rIGZvdW5kLCB0YWtpbmcgY2FyZSBvZiBiYWNrc2xhc2hlcworCSAgICAgKiAtIHNraXAgYmxhbmtzCisJICAgICAqIC0gc2tpcCBvbmUgIj12YWwiIGFyZ3VtZW50IChmb3IgaGlkZGVuIG9wdGlvbnMgIjpzZXQgZ2ZuID14eCIpCisJICAgICAqLworCSAgICBmb3IgKGkgPSAwOyBpIDwgMiA7ICsraSkKKwkgICAgeworCQl3aGlsZSAoKmFyZyAhPSBOVUwgJiYgIXZpbV9pc3doaXRlKCphcmcpKQorCQkgICAgaWYgKCphcmcrKyA9PSAnXFwnICYmICphcmcgIT0gTlVMKQorCQkJKythcmc7CisJCWFyZyA9IHNraXB3aGl0ZShhcmcpOworCQlpZiAoKmFyZyAhPSAnPScpCisJCSAgICBicmVhazsKKwkgICAgfQorCX0KKworCWlmIChlcnJtc2cgIT0gTlVMTCkKKwl7CisJICAgIFNUUk5DUFkoSU9idWZmLCBfKGVycm1zZyksIElPU0laRSAtIDEpOworCSAgICBJT2J1ZmZbSU9TSVpFIC0gMV0gPSBOVUw7CisJICAgIGkgPSBTVFJMRU4oSU9idWZmKSArIDI7CisJICAgIGlmIChpICsgKGFyZyAtIHN0YXJ0YXJnKSA8IElPU0laRSkKKwkgICAgeworCQkvKiBhcHBlbmQgdGhlIGFyZ3VtZW50IHdpdGggdGhlIGVycm9yICovCisJCVNUUkNBVChJT2J1ZmYsICI6ICIpOworCQltY2hfbWVtbW92ZShJT2J1ZmYgKyBpLCBzdGFydGFyZywgKGFyZyAtIHN0YXJ0YXJnKSk7CisJCUlPYnVmZltpICsgKGFyZyAtIHN0YXJ0YXJnKV0gPSBOVUw7CisJICAgIH0KKwkgICAgLyogbWFrZSBzdXJlIGFsbCBjaGFyYWN0ZXJzIGFyZSBwcmludGFibGUgKi8KKwkgICAgdHJhbnNfY2hhcmFjdGVycyhJT2J1ZmYsIElPU0laRSk7CisKKwkgICAgKytub193YWl0X3JldHVybjsJLyogd2FpdF9yZXR1cm4gZG9uZSBsYXRlciAqLworCSAgICBlbXNnKElPYnVmZik7CS8qIHNob3cgZXJyb3IgaGlnaGxpZ2h0ZWQgKi8KKwkgICAgLS1ub193YWl0X3JldHVybjsKKworCSAgICByZXR1cm4gRkFJTDsKKwl9CisKKwlhcmcgPSBza2lwd2hpdGUoYXJnKTsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICBzdGF0aWMgY2hhcl91ICoKK2lsbGVnYWxfY2hhcihlcnJidWYsIGMpCisgICAgY2hhcl91CSplcnJidWY7CisgICAgaW50CQljOworeworICAgIGlmIChlcnJidWYgPT0gTlVMTCkKKwlyZXR1cm4gKGNoYXJfdSAqKSIiOworICAgIHNwcmludGYoKGNoYXIgKillcnJidWYsIF8oIkU1Mzk6IElsbGVnYWwgY2hhcmFjdGVyIDwlcz4iKSwKKwkgICAgKGNoYXIgKil0cmFuc2NoYXIoYykpOworICAgIHJldHVybiBlcnJidWY7Cit9CisKKy8qCisgKiBDb252ZXJ0IGEga2V5IG5hbWUgb3Igc3RyaW5nIGludG8gYSBrZXkgdmFsdWUuCisgKiBVc2VkIGZvciAnd2lsZGNoYXInIGFuZCAnY2VkaXQnIG9wdGlvbnMuCisgKi8KKyAgICBzdGF0aWMgaW50CitzdHJpbmdfdG9fa2V5KGFyZykKKyAgICBjaGFyX3UJKmFyZzsKK3sKKyAgICBpZiAoKmFyZyA9PSAnPCcpCisJcmV0dXJuIGZpbmRfa2V5X29wdGlvbihhcmcgKyAxKTsKKyAgICBpZiAoKmFyZyA9PSAnXicpCisJcmV0dXJuIEN0cmxfY2hyKGFyZ1sxXSk7CisgICAgcmV0dXJuICphcmc7Cit9CisKKyNpZmRlZiBGRUFUX0NNRFdJTgorLyoKKyAqIENoZWNrIHZhbHVlIG9mICdjZWRpdCcgYW5kIHNldCBjZWRpdF9rZXkuCisgKiBSZXR1cm5zIE5VTEwgaWYgdmFsdWUgaXMgT0ssIGVycm9yIG1lc3NhZ2Ugb3RoZXJ3aXNlLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitjaGVja19jZWRpdCgpCit7CisgICAgaW50IG47CisKKyAgICBpZiAoKnBfY2VkaXQgPT0gTlVMKQorCWNlZGl0X2tleSA9IC0xOworICAgIGVsc2UKKyAgICB7CisJbiA9IHN0cmluZ190b19rZXkocF9jZWRpdCk7CisJaWYgKHZpbV9pc3ByaW50YyhuKSkKKwkgICAgcmV0dXJuIGVfaW52YXJnOworCWNlZGl0X2tleSA9IG47CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1RJVExFCisvKgorICogV2hlbiBjaGFuZ2luZyAndGl0bGUnLCAndGl0bGVzdHJpbmcnLCAnaWNvbicgb3IgJ2ljb25zdHJpbmcnLCBjYWxsCisgKiBtYWtldGl0bGUoKSB0byBjcmVhdGUgYW5kIGRpc3BsYXkgaXQuCisgKiBXaGVuIHN3aXRjaGluZyB0aGUgdGl0bGUgb3IgaWNvbiBvZmYsIGNhbGwgbWNoX3Jlc3RvcmVfdGl0bGUoKSB0byBnZXQKKyAqIHRoZSBvbGQgdmFsdWUgYmFjay4KKyAqLworICAgIHN0YXRpYyB2b2lkCitkaWRfc2V0X3RpdGxlKGljb24pCisgICAgaW50CSAgICBpY29uOwkgICAgLyogRGlkIHNldCBpY29uIGluc3RlYWQgb2YgdGl0bGUgKi8KK3sKKyAgICBpZiAoc3RhcnRpbmcgIT0gTk9fU0NSRUVOCisjaWZkZWYgRkVBVF9HVUkKKwkgICAgJiYgIWd1aS5zdGFydGluZworI2VuZGlmCisJCQkJKQorICAgIHsKKwltYWtldGl0bGUoKTsKKwlpZiAoaWNvbikKKwl7CisJICAgIGlmICghcF9pY29uKQorCQltY2hfcmVzdG9yZV90aXRsZSgyKTsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKCFwX3RpdGxlKQorCQltY2hfcmVzdG9yZV90aXRsZSgxKTsKKwl9CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBzZXRfb3B0aW9uc19iaW4gLSAgY2FsbGVkIHdoZW4gJ2JpbicgY2hhbmdlcyB2YWx1ZS4KKyAqLworICAgIHZvaWQKK3NldF9vcHRpb25zX2JpbihvbGR2YWwsIG5ld3ZhbCwgb3B0X2ZsYWdzKQorICAgIGludAkJb2xkdmFsOworICAgIGludAkJbmV3dmFsOworICAgIGludAkJb3B0X2ZsYWdzOwkvKiBPUFRfTE9DQUwgYW5kL29yIE9QVF9HTE9CQUwgKi8KK3sKKyAgICAvKgorICAgICAqIFRoZSBvcHRpb24gdmFsdWVzIHRoYXQgYXJlIGNoYW5nZWQgd2hlbiAnYmluJyBjaGFuZ2VzIGFyZQorICAgICAqIGNvcGllZCB3aGVuICdiaW4gaXMgc2V0IGFuZCByZXN0b3JlZCB3aGVuICdiaW4nIGlzIHJlc2V0LgorICAgICAqLworICAgIGlmIChuZXd2YWwpCisgICAgeworCWlmICghb2xkdmFsKQkJLyogc3dpdGNoZWQgb24gKi8KKwl7CisJICAgIGlmICghKG9wdF9mbGFncyAmIE9QVF9HTE9CQUwpKQorCSAgICB7CisJCWN1cmJ1Zi0+Yl9wX3R3X25vYmluID0gY3VyYnVmLT5iX3BfdHc7CisJCWN1cmJ1Zi0+Yl9wX3dtX25vYmluID0gY3VyYnVmLT5iX3Bfd207CisJCWN1cmJ1Zi0+Yl9wX21sX25vYmluID0gY3VyYnVmLT5iX3BfbWw7CisJCWN1cmJ1Zi0+Yl9wX2V0X25vYmluID0gY3VyYnVmLT5iX3BfZXQ7CisJICAgIH0KKwkgICAgaWYgKCEob3B0X2ZsYWdzICYgT1BUX0xPQ0FMKSkKKwkgICAgeworCQlwX3R3X25vYmluID0gcF90dzsKKwkJcF93bV9ub2JpbiA9IHBfd207CisJCXBfbWxfbm9iaW4gPSBwX21sOworCQlwX2V0X25vYmluID0gcF9ldDsKKwkgICAgfQorCX0KKworCWlmICghKG9wdF9mbGFncyAmIE9QVF9HTE9CQUwpKQorCXsKKwkgICAgY3VyYnVmLT5iX3BfdHcgPSAwOwkvKiBubyBhdXRvbWF0aWMgbGluZSB3cmFwICovCisJICAgIGN1cmJ1Zi0+Yl9wX3dtID0gMDsJLyogbm8gYXV0b21hdGljIGxpbmUgd3JhcCAqLworCSAgICBjdXJidWYtPmJfcF9tbCA9IDA7CS8qIG5vIG1vZGVsaW5lcyAqLworCSAgICBjdXJidWYtPmJfcF9ldCA9IDA7CS8qIG5vIGV4cGFuZHRhYiAqLworCX0KKwlpZiAoIShvcHRfZmxhZ3MgJiBPUFRfTE9DQUwpKQorCXsKKwkgICAgcF90dyA9IDA7CisJICAgIHBfd20gPSAwOworCSAgICBwX21sID0gRkFMU0U7CisJICAgIHBfZXQgPSBGQUxTRTsKKwkgICAgcF9iaW4gPSBUUlVFOwkvKiBuZWVkZWQgd2hlbiBjYWxsZWQgZm9yIHRoZSAiLWIiIGFyZ3VtZW50ICovCisJfQorICAgIH0KKyAgICBlbHNlIGlmIChvbGR2YWwpCQkvKiBzd2l0Y2hlZCBvZmYgKi8KKyAgICB7CisJaWYgKCEob3B0X2ZsYWdzICYgT1BUX0dMT0JBTCkpCisJeworCSAgICBjdXJidWYtPmJfcF90dyA9IGN1cmJ1Zi0+Yl9wX3R3X25vYmluOworCSAgICBjdXJidWYtPmJfcF93bSA9IGN1cmJ1Zi0+Yl9wX3dtX25vYmluOworCSAgICBjdXJidWYtPmJfcF9tbCA9IGN1cmJ1Zi0+Yl9wX21sX25vYmluOworCSAgICBjdXJidWYtPmJfcF9ldCA9IGN1cmJ1Zi0+Yl9wX2V0X25vYmluOworCX0KKwlpZiAoIShvcHRfZmxhZ3MgJiBPUFRfTE9DQUwpKQorCXsKKwkgICAgcF90dyA9IHBfdHdfbm9iaW47CisJICAgIHBfd20gPSBwX3dtX25vYmluOworCSAgICBwX21sID0gcF9tbF9ub2JpbjsKKwkgICAgcF9ldCA9IHBfZXRfbm9iaW47CisJfQorICAgIH0KK30KKworI2lmZGVmIEZFQVRfVklNSU5GTworLyoKKyAqIEZpbmQgdGhlIHBhcmFtZXRlciByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gY2hhcmFjdGVyIChlZyAnLCA6LCAiLCBvciAvKSwKKyAqIGFuZCByZXR1cm4gaXRzIGFzc29jaWF0ZWQgdmFsdWUgaW4gdGhlICd2aW1pbmZvJyBzdHJpbmcuCisgKiBPbmx5IHdvcmtzIGZvciBudW1iZXIgcGFyYW1ldGVycywgbm90IGZvciAncicgb3IgJ24nLgorICogSWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcsIHJldHVybiAtMS4KKyAqLworICAgIGludAorZ2V0X3ZpbWluZm9fcGFyYW1ldGVyKHR5cGUpCisgICAgaW50CSAgICB0eXBlOworeworICAgIGNoYXJfdSAgKnA7CisKKyAgICBwID0gZmluZF92aW1pbmZvX3BhcmFtZXRlcih0eXBlKTsKKyAgICBpZiAocCAhPSBOVUxMICYmIFZJTV9JU0RJR0lUKCpwKSkKKwlyZXR1cm4gYXRvaSgoY2hhciAqKXApOworICAgIHJldHVybiAtMTsKK30KKworLyoKKyAqIEZpbmQgdGhlIHBhcmFtZXRlciByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gY2hhcmFjdGVyIChlZyAnJycsICc6JywgJyInLCBvcgorICogJy8nKSBpbiB0aGUgJ3ZpbWluZm8nIG9wdGlvbiBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nIGFmdGVyIGl0LgorICogUmV0dXJuIE5VTEwgaWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcuCisgKi8KKyAgICBjaGFyX3UgKgorZmluZF92aW1pbmZvX3BhcmFtZXRlcih0eXBlKQorICAgIGludAkgICAgdHlwZTsKK3sKKyAgICBjaGFyX3UgICpwOworCisgICAgZm9yIChwID0gcF92aW1pbmZvOyAqcDsgKytwKQorICAgIHsKKwlpZiAoKnAgPT0gdHlwZSkKKwkgICAgcmV0dXJuIHAgKyAxOworCWlmICgqcCA9PSAnbicpCQkgICAgLyogJ24nIGlzIGFsd2F5cyB0aGUgbGFzdCBvbmUgKi8KKwkgICAgYnJlYWs7CisJcCA9IHZpbV9zdHJjaHIocCwgJywnKTsJICAgIC8qIHNraXAgdW50aWwgbmV4dCAnLCcgKi8KKwlpZiAocCA9PSBOVUxMKQkJICAgIC8qIGhpdCB0aGUgZW5kIHdpdGhvdXQgZmluZGluZyBwYXJhbWV0ZXIgKi8KKwkgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorI2VuZGlmCisKKy8qCisgKiBFeHBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBzb21lIHN0cmluZyBvcHRpb25zLgorICogVGhlc2Ugc3RyaW5nIG9wdGlvbnMgY2Fubm90IGJlIGluZGlyZWN0IQorICogSWYgInZhbCIgaXMgTlVMTCBleHBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG9wdGlvbi4KKyAqIFJldHVybiBwb2ludGVyIHRvIE5hbWVCdWZmLCBvciBOVUxMIHdoZW4gbm90IGV4cGFuZGVkLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitvcHRpb25fZXhwYW5kKG9wdF9pZHgsIHZhbCkKKyAgICBpbnQJCW9wdF9pZHg7CisgICAgY2hhcl91CSp2YWw7Cit7CisgICAgLyogaWYgb3B0aW9uIGRvZXNuJ3QgbmVlZCBleHBhbnNpb24gbm90aGluZyB0byBkbyAqLworICAgIGlmICghKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiBQX0VYUEFORCkgfHwgb3B0aW9uc1tvcHRfaWR4XS52YXIgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIC8qIElmIHZhbCBpcyBsb25nZXIgdGhhbiBNQVhQQVRITCBubyBtZWFuaW5nZnVsIGV4cGFuc2lvbiBjYW4gYmUgZG9uZSwKKyAgICAgKiBleHBhbmRfZW52KCkgd291bGQgdHJ1bmNhdGUgdGhlIHN0cmluZy4gKi8KKyAgICBpZiAodmFsICE9IE5VTEwgJiYgU1RSTEVOKHZhbCkgPiBNQVhQQVRITCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmICh2YWwgPT0gTlVMTCkKKwl2YWwgPSAqKGNoYXJfdSAqKilvcHRpb25zW29wdF9pZHhdLnZhcjsKKworICAgIC8qCisgICAgICogRXhwYW5kaW5nIHRoaXMgd2l0aCBOYW1lQnVmZiwgZXhwYW5kX2VudigpIG11c3Qgbm90IGJlIHBhc3NlZCBJT2J1ZmYuCisgICAgICogRXNjYXBlIHNwYWNlcyB3aGVuIGV4cGFuZGluZyAndGFncycsIHRoZXkgYXJlIHVzZWQgdG8gc2VwYXJhdGUgZmlsZQorICAgICAqIG5hbWVzLgorICAgICAqLworICAgIGV4cGFuZF9lbnZfZXNjKHZhbCwgTmFtZUJ1ZmYsIE1BWFBBVEhMLAorCQkJCSAgKGNoYXJfdSAqKilvcHRpb25zW29wdF9pZHhdLnZhciA9PSAmcF90YWdzKTsKKyAgICBpZiAoU1RSQ01QKE5hbWVCdWZmLCB2YWwpID09IDApICAgLyogdGhleSBhcmUgdGhlIHNhbWUgKi8KKwlyZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBOYW1lQnVmZjsKK30KKworLyoKKyAqIEFmdGVyIHNldHRpbmcgdmFyaW91cyBvcHRpb24gdmFsdWVzOiByZWNvbXB1dGUgdmFyaWFibGVzIHRoYXQgZGVwZW5kIG9uCisgKiBvcHRpb24gdmFsdWVzLgorICovCisgICAgc3RhdGljIHZvaWQKK2RpZHNldF9vcHRpb25zKCkKK3sKKyAgICAvKiBpbml0aWFsaXplIHRoZSB0YWJsZSBmb3IgJ2lza2V5d29yZCcgZXQuYWwuICovCisgICAgKHZvaWQpaW5pdF9jaGFydGFiKCk7CisKKyAgICAodm9pZClvcHRfc3RyaW5nc19mbGFncyhwX2NtcCwgcF9jbXBfdmFsdWVzLCAmY21wX2ZsYWdzLCBUUlVFKTsKKyAgICAodm9pZClvcHRfc3RyaW5nc19mbGFncyhwX2JrYywgcF9ia2NfdmFsdWVzLCAmYmtjX2ZsYWdzLCBUUlVFKTsKKyNpZmRlZiBGRUFUX1NFU1NJT04KKyAgICAodm9pZClvcHRfc3RyaW5nc19mbGFncyhwX3Nzb3AsIHBfc3NvcF92YWx1ZXMsICZzc29wX2ZsYWdzLCBUUlVFKTsKKyAgICAodm9pZClvcHRfc3RyaW5nc19mbGFncyhwX3ZvcCwgcF9zc29wX3ZhbHVlcywgJnZvcF9mbGFncywgVFJVRSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICAodm9pZClvcHRfc3RyaW5nc19mbGFncyhwX2ZkbywgcF9mZG9fdmFsdWVzLCAmZmRvX2ZsYWdzLCBUUlVFKTsKKyNlbmRpZgorICAgICh2b2lkKW9wdF9zdHJpbmdzX2ZsYWdzKHBfZHksIHBfZHlfdmFsdWVzLCAmZHlfZmxhZ3MsIFRSVUUpOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICAodm9pZClvcHRfc3RyaW5nc19mbGFncyhwX3ZlLCBwX3ZlX3ZhbHVlcywgJnZlX2ZsYWdzLCBUUlVFKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9NT1VTRSkgJiYgKGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpKQorICAgICh2b2lkKW9wdF9zdHJpbmdzX2ZsYWdzKHBfdHR5bSwgcF90dHltX3ZhbHVlcywgJnR0eW1fZmxhZ3MsIEZBTFNFKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpCisgICAgKHZvaWQpb3B0X3N0cmluZ3NfZmxhZ3MocF90b29sYmFyLCBwX3Rvb2xiYXJfdmFsdWVzLCAmdG9vbGJhcl9mbGFncywgVFJVRSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfVE9PTEJBUikgJiYgZGVmaW5lZChGRUFUX0dVSV9HVEspICYmIGRlZmluZWQoSEFWRV9HVEsyKQorICAgICh2b2lkKW9wdF9zdHJpbmdzX2ZsYWdzKHBfdGJpcywgcF90YmlzX3ZhbHVlcywgJnRiaXNfZmxhZ3MsIEZBTFNFKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ01EV0lOCisgICAgLyogc2V0IGNlZGl0X2tleSAqLworICAgICh2b2lkKWNoZWNrX2NlZGl0KCk7CisjZW5kaWYKK30KKworLyoKKyAqIENoZWNrIGZvciBzdHJpbmcgb3B0aW9ucyB0aGF0IGFyZSBOVUxMIChub3JtYWxseSBvbmx5IHRlcm1jYXAgb3B0aW9ucykuCisgKi8KKyAgICB2b2lkCitjaGVja19vcHRpb25zKCkKK3sKKyAgICBpbnQJCW9wdF9pZHg7CisKKyAgICBmb3IgKG9wdF9pZHggPSAwOyBvcHRpb25zW29wdF9pZHhdLmZ1bGxuYW1lICE9IE5VTEw7IG9wdF9pZHgrKykKKwlpZiAoKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiBQX1NUUklORykgJiYgb3B0aW9uc1tvcHRfaWR4XS52YXIgIT0gTlVMTCkKKwkgICAgY2hlY2tfc3RyaW5nX29wdGlvbigoY2hhcl91ICoqKWdldF92YXJwKCYob3B0aW9uc1tvcHRfaWR4XSkpKTsKK30KKworLyoKKyAqIENoZWNrIHN0cmluZyBvcHRpb25zIGluIGEgYnVmZmVyIGZvciBOVUxMIHZhbHVlLgorICovCisgICAgdm9pZAorY2hlY2tfYnVmX29wdGlvbnMoYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisjaWYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2JoKTsKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9idCk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfZmVuYyk7CisjZW5kaWYKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9mZik7CisjaWZkZWYgRkVBVF9GSU5EX0lECisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfZGVmKTsKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9pbmMpOworIyBpZmRlZiBGRUFUX0VWQUwKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9pbmV4KTsKKyMgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9DSU5ERU5UKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9pbmRlKTsKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9pbmRrKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ1JZUFQKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9rZXkpOworI2VuZGlmCisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3Bfa3ApOworICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX21wcyk7CisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfZm8pOworICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2lzayk7CisjaWZkZWYgRkVBVF9DT01NRU5UUworICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2NvbSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9jbXMpOworI2VuZGlmCisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfbmYpOworI2lmZGVmIEZFQVRfU1lOX0hMCisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3Bfc3luKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU0VBUkNIUEFUSAorICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX3N1YSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9jaW5rKTsKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9jaW5vKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2Z0KTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfT1NGSUxFVFlQRQorICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX29mdCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfU01BUlRJTkRFTlQpIHx8IGRlZmluZWQoRkVBVF9DSU5ERU5UKQorICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2NpbncpOworI2VuZGlmCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfY3B0KTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfS0VZTUFQCisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3Bfa2V5bWFwKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9ncCk7CisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfbXApOworICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2VmbSk7CisjZW5kaWYKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZidWYtPmJfcF9lcCk7CisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfcGF0aCk7CisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfdGFncyk7CisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfZGljdCk7CisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmYnVmLT5iX3BfdHNyKTsKKyNlbmRpZgorfQorCisvKgorICogRnJlZSB0aGUgc3RyaW5nIGFsbG9jYXRlZCBmb3IgYW4gb3B0aW9uLgorICogQ2hlY2tzIGZvciB0aGUgc3RyaW5nIGJlaW5nIGVtcHR5X29wdGlvbi4gVGhpcyBtYXkgaGFwcGVuIGlmIHdlJ3JlIG91dCBvZgorICogbWVtb3J5LCB2aW1fc3Ryc2F2ZSgpIHJldHVybmVkIE5VTEwsIHdoaWNoIHdhcyByZXBsYWNlZCBieSBlbXB0eV9vcHRpb24gYnkKKyAqIGNoZWNrX29wdGlvbnMoKS4KKyAqIERvZXMgTk9UIGNoZWNrIGZvciBQX0FMTE9DRUQgZmxhZyEKKyAqLworICAgIHZvaWQKK2ZyZWVfc3RyaW5nX29wdGlvbihwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBpZiAocCAhPSBlbXB0eV9vcHRpb24pCisJdmltX2ZyZWUocCk7Cit9CisKKyAgICB2b2lkCitjbGVhcl9zdHJpbmdfb3B0aW9uKHBwKQorICAgIGNoYXJfdQkqKnBwOworeworICAgIGlmICgqcHAgIT0gZW1wdHlfb3B0aW9uKQorCXZpbV9mcmVlKCpwcCk7CisgICAgKnBwID0gZW1wdHlfb3B0aW9uOworfQorCisgICAgc3RhdGljIHZvaWQKK2NoZWNrX3N0cmluZ19vcHRpb24ocHApCisgICAgY2hhcl91CSoqcHA7Cit7CisgICAgaWYgKCpwcCA9PSBOVUxMKQorCSpwcCA9IGVtcHR5X29wdGlvbjsKK30KKworLyoKKyAqIE1hcmsgYSB0ZXJtaW5hbCBvcHRpb24gYXMgYWxsb2NhdGVkLCBmb3VuZCBieSBhIHBvaW50ZXIgaW50byB0ZXJtX3N0cmluZ3NbXS4KKyAqLworICAgIHZvaWQKK3NldF90ZXJtX29wdGlvbl9hbGxvY2VkKHApCisgICAgY2hhcl91ICoqcDsKK3sKKyAgICBpbnQJCW9wdF9pZHg7CisKKyAgICBmb3IgKG9wdF9pZHggPSAxOyBvcHRpb25zW29wdF9pZHhdLmZ1bGxuYW1lICE9IE5VTEw7IG9wdF9pZHgrKykKKwlpZiAob3B0aW9uc1tvcHRfaWR4XS52YXIgPT0gKGNoYXJfdSAqKXApCisJeworCSAgICBvcHRpb25zW29wdF9pZHhdLmZsYWdzIHw9IFBfQUxMT0NFRDsKKwkgICAgcmV0dXJuOworCX0KKyAgICByZXR1cm47IC8qIGNhbm5vdCBoYXBwZW46IGRpZG4ndCBmaW5kIGl0ISAqLworfQorCisvKgorICogU2V0IGEgc3RyaW5nIG9wdGlvbiB0byBhIG5ldyB2YWx1ZSAod2l0aG91dCBjaGVja2luZyB0aGUgZWZmZWN0KS4KKyAqIFRoZSBzdHJpbmcgaXMgY29waWVkIGludG8gYWxsb2NhdGVkIG1lbW9yeS4KKyAqIGlmICgib3B0X2lkeCIgPT0gLTEpICJuYW1lIiBpcyB1c2VkLCBvdGhlcndpc2UgIm9wdF9pZHgiIGlzIHVzZWQuCisgKi8KKyAgICB2b2lkCitzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QobmFtZSwgb3B0X2lkeCwgdmFsLCBvcHRfZmxhZ3MpCisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJb3B0X2lkeDsKKyAgICBjaGFyX3UJKnZhbDsKKyAgICBpbnQJCW9wdF9mbGFnczsJLyogT1BUX0ZSRUUsIE9QVF9MT0NBTCBhbmQvb3IgT1BUX0dMT0JBTCAqLworeworICAgIGNoYXJfdQkqczsKKyAgICBjaGFyX3UJKip2YXJwOworICAgIGludAkJYm90aCA9IChvcHRfZmxhZ3MgJiAoT1BUX0xPQ0FMIHwgT1BUX0dMT0JBTCkpID09IDA7CisKKyAgICBpZiAob3B0X2lkeCA9PSAtMSkJCS8qIHVzZSBuYW1lICovCisgICAgeworCW9wdF9pZHggPSBmaW5kb3B0aW9uKG5hbWUpOworCWlmIChvcHRfaWR4ID09IC0xKQkvKiBub3QgZm91bmQgKHNob3VsZCBub3QgaGFwcGVuKSAqLworCSAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG9wdGlvbnNbb3B0X2lkeF0udmFyID09IE5VTEwpCS8qIGNhbid0IHNldCBoaWRkZW4gb3B0aW9uICovCisJcmV0dXJuOworCisgICAgcyA9IHZpbV9zdHJzYXZlKHZhbCk7CisgICAgaWYgKHMgIT0gTlVMTCkKKyAgICB7CisJdmFycCA9IChjaGFyX3UgKiopZ2V0X3ZhcnBfc2NvcGUoJihvcHRpb25zW29wdF9pZHhdKSwKKwkJCQkJICAgICAgIGJvdGggPyBPUFRfTE9DQUwgOiBvcHRfZmxhZ3MpOworCWlmICgob3B0X2ZsYWdzICYgT1BUX0ZSRUUpICYmIChvcHRpb25zW29wdF9pZHhdLmZsYWdzICYgUF9BTExPQ0VEKSkKKwkgICAgZnJlZV9zdHJpbmdfb3B0aW9uKCp2YXJwKTsKKwkqdmFycCA9IHM7CisKKwkvKiBGb3IgYnVmZmVyL3dpbmRvdyBsb2NhbCBvcHRpb24gbWF5IGFsc28gc2V0IHRoZSBnbG9iYWwgdmFsdWUuICovCisJaWYgKGJvdGgpCisJICAgIHNldF9zdHJpbmdfb3B0aW9uX2dsb2JhbChvcHRfaWR4LCB2YXJwKTsKKworCW9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgfD0gUF9BTExPQ0VEOworCisJLyogV2hlbiBzZXR0aW5nIGJvdGggdmFsdWVzIG9mIGEgZ2xvYmFsIG9wdGlvbiB3aXRoIGEgbG9jYWwgdmFsdWUsCisJICogbWFrZSB0aGUgbG9jYWwgdmFsdWUgZW1wdHksIHNvIHRoYXQgdGhlIGdsb2JhbCB2YWx1ZSBpcyB1c2VkLiAqLworCWlmICgoaW50KW9wdGlvbnNbb3B0X2lkeF0uaW5kaXIgPj0gUFZfQk9USCAmJiBib3RoKQorCXsKKwkgICAgZnJlZV9zdHJpbmdfb3B0aW9uKCp2YXJwKTsKKwkgICAgKnZhcnAgPSBlbXB0eV9vcHRpb247CisJfQorICAgIH0KK30KKworLyoKKyAqIFNldCBnbG9iYWwgdmFsdWUgZm9yIHN0cmluZyBvcHRpb24gd2hlbiBpdCdzIGEgbG9jYWwgb3B0aW9uLgorICovCisgICAgc3RhdGljIHZvaWQKK3NldF9zdHJpbmdfb3B0aW9uX2dsb2JhbChvcHRfaWR4LCB2YXJwKQorICAgIGludAkJb3B0X2lkeDsJLyogb3B0aW9uIGluZGV4ICovCisgICAgY2hhcl91CSoqdmFycDsJCS8qIHBvaW50ZXIgdG8gb3B0aW9uIHZhcmlhYmxlICovCit7CisgICAgY2hhcl91CSoqcCwgKnM7CisKKyAgICAvKiB0aGUgZ2xvYmFsIHZhbHVlIGlzIGFsd2F5cyBhbGxvY2F0ZWQgKi8KKyAgICBpZiAob3B0aW9uc1tvcHRfaWR4XS52YXIgPT0gVkFSX1dJTikKKwlwID0gKGNoYXJfdSAqKilHTE9CQUxfV08odmFycCk7CisgICAgZWxzZQorCXAgPSAoY2hhcl91ICoqKW9wdGlvbnNbb3B0X2lkeF0udmFyOworICAgIGlmIChvcHRpb25zW29wdF9pZHhdLmluZGlyICE9IFBWX05PTkUKKwkgICAgJiYgcCAhPSB2YXJwCisJICAgICYmIChzID0gdmltX3N0cnNhdmUoKnZhcnApKSAhPSBOVUxMKQorICAgIHsKKwlmcmVlX3N0cmluZ19vcHRpb24oKnApOworCSpwID0gczsKKyAgICB9Cit9CisKKy8qCisgKiBTZXQgYSBzdHJpbmcgb3B0aW9uIHRvIGEgbmV3IHZhbHVlLCBhbmQgaGFuZGxlIHRoZSBlZmZlY3RzLgorICovCisgICAgc3RhdGljIHZvaWQKK3NldF9zdHJpbmdfb3B0aW9uKG9wdF9pZHgsIHZhbHVlLCBvcHRfZmxhZ3MpCisgICAgaW50CQlvcHRfaWR4OworICAgIGNoYXJfdQkqdmFsdWU7CisgICAgaW50CQlvcHRfZmxhZ3M7CS8qIE9QVF9MT0NBTCBhbmQvb3IgT1BUX0dMT0JBTCAqLworeworICAgIGNoYXJfdQkqczsKKyAgICBjaGFyX3UJKip2YXJwOworICAgIGNoYXJfdQkqb2xkdmFsOworCisgICAgaWYgKG9wdGlvbnNbb3B0X2lkeF0udmFyID09IE5VTEwpCS8qIGRvbid0IHNldCBoaWRkZW4gb3B0aW9uICovCisJcmV0dXJuOworCisgICAgcyA9IHZpbV9zdHJzYXZlKHZhbHVlKTsKKyAgICBpZiAocyAhPSBOVUxMKQorICAgIHsKKwl2YXJwID0gKGNoYXJfdSAqKilnZXRfdmFycF9zY29wZSgmKG9wdGlvbnNbb3B0X2lkeF0pLAorCQkob3B0X2ZsYWdzICYgKE9QVF9MT0NBTCB8IE9QVF9HTE9CQUwpKSA9PSAwCisJCSAgICA/ICgoaW50KW9wdGlvbnNbb3B0X2lkeF0uaW5kaXIgPj0gUFZfQk9USAorCQkJPyBPUFRfR0xPQkFMIDogT1BUX0xPQ0FMKQorCQkgICAgOiBvcHRfZmxhZ3MpOworCW9sZHZhbCA9ICp2YXJwOworCSp2YXJwID0gczsKKwlvcHRpb25zW29wdF9pZHhdLmZsYWdzIHw9IFBfV0FTX1NFVDsKKwkodm9pZClkaWRfc2V0X3N0cmluZ19vcHRpb24ob3B0X2lkeCwgdmFycCwgVFJVRSwgb2xkdmFsLCBOVUxMLAorCQkJCQkJCQkgICBvcHRfZmxhZ3MpOworICAgIH0KK30KKworLyoKKyAqIEhhbmRsZSBzdHJpbmcgb3B0aW9ucyB0aGF0IG5lZWQgc29tZSBhY3Rpb24gdG8gcGVyZm9ybSB3aGVuIGNoYW5nZWQuCisgKiBSZXR1cm5zIE5VTEwgZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGFuIGVycm9yLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitkaWRfc2V0X3N0cmluZ19vcHRpb24ob3B0X2lkeCwgdmFycCwgbmV3X3ZhbHVlX2FsbG9jZWQsIG9sZHZhbCwgZXJyYnVmLAorCQkJCQkJCQkgICAgb3B0X2ZsYWdzKQorICAgIGludAkJb3B0X2lkeDsJCS8qIGluZGV4IGluIG9wdGlvbnNbXSB0YWJsZSAqLworICAgIGNoYXJfdQkqKnZhcnA7CQkJLyogcG9pbnRlciB0byB0aGUgb3B0aW9uIHZhcmlhYmxlICovCisgICAgaW50CQluZXdfdmFsdWVfYWxsb2NlZDsJLyogbmV3IHZhbHVlIHdhcyBhbGxvY2F0ZWQgKi8KKyAgICBjaGFyX3UJKm9sZHZhbDsJCS8qIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBvcHRpb24gKi8KKyAgICBjaGFyX3UJKmVycmJ1ZjsJCS8qIGJ1ZmZlciBmb3IgZXJyb3JzLCBvciBOVUxMICovCisgICAgaW50CQlvcHRfZmxhZ3M7CQkvKiBPUFRfTE9DQUwgYW5kL29yIE9QVF9HTE9CQUwgKi8KK3sKKyAgICBjaGFyX3UJKmVycm1zZyA9IE5VTEw7CisgICAgY2hhcl91CSpzLCAqcDsKKyAgICBpbnQJCWRpZF9jaGFydGFiID0gRkFMU0U7CisgICAgY2hhcl91CSoqZ3ZhcnA7CisKKyAgICAvKiBHZXQgdGhlIGdsb2JhbCBvcHRpb24gdG8gY29tcGFyZSB3aXRoLCBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSB0byBjaGVjaworICAgICAqIHR3byB2YWx1ZXMgZm9yIGFsbCBsb2NhbCBvcHRpb25zLiAqLworICAgIGd2YXJwID0gKGNoYXJfdSAqKilnZXRfdmFycF9zY29wZSgmKG9wdGlvbnNbb3B0X2lkeF0pLCBPUFRfR0xPQkFMKTsKKworICAgIC8qIERpc2FsbG93IGNoYW5naW5nIHNvbWUgb3B0aW9ucyBmcm9tIHNlY3VyZSBtb2RlICovCisgICAgaWYgKChzZWN1cmUKKyNpZmRlZiBIQVZFX1NBTkRCT1gKKwkJfHwgc2FuZGJveCAhPSAwCisjZW5kaWYKKwkJKSAmJiAob3B0aW9uc1tvcHRfaWR4XS5mbGFncyAmIFBfU0VDVVJFKSkKKyAgICB7CisJZXJybXNnID0gZV9zZWN1cmU7CisgICAgfQorCisgICAgLyogJ3Rlcm0nICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmVF9OQU1FKQorICAgIHsKKwlpZiAoVF9OQU1FWzBdID09IE5VTCkKKwkgICAgZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTI5OiBDYW5ub3Qgc2V0ICd0ZXJtJyB0byBlbXB0eSBzdHJpbmciKTsKKyNpZmRlZiBGRUFUX0dVSQorCWlmIChndWkuaW5fdXNlKQorCSAgICBlcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1MzA6IENhbm5vdCBjaGFuZ2UgdGVybSBpbiBHVUkiKTsKKwllbHNlIGlmICh0ZXJtX2lzX2d1aShUX05BTUUpKQorCSAgICBlcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1MzE6IFVzZSBcIjpndWlcIiB0byBzdGFydCB0aGUgR1VJIik7CisjZW5kaWYKKwllbHNlIGlmIChzZXRfdGVybW5hbWUoVF9OQU1FKSA9PSBGQUlMKQorCSAgICBlcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1MjI6IE5vdCBmb3VuZCBpbiB0ZXJtY2FwIik7CisJZWxzZQorCSAgICAvKiBTY3JlZW4gY29sb3JzIG1heSBoYXZlIGNoYW5nZWQuICovCisJICAgIHJlZHJhd19sYXRlcl9jbGVhcigpOworICAgIH0KKworICAgIC8qICdiYWNrdXBjb3B5JyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfYmtjKQorICAgIHsKKwlpZiAob3B0X3N0cmluZ3NfZmxhZ3MocF9ia2MsIHBfYmtjX3ZhbHVlcywgJmJrY19mbGFncywgVFJVRSkgIT0gT0spCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworCWlmICgoKGJrY19mbGFncyAmIEJLQ19BVVRPKSAhPSAwKQorCQkrICgoYmtjX2ZsYWdzICYgQktDX1lFUykgIT0gMCkKKwkJKyAoKGJrY19mbGFncyAmIEJLQ19OTykgIT0gMCkgIT0gMSkKKwl7CisJICAgIC8qIE11c3QgaGF2ZSBleGFjdGx5IG9uZSBvZiAiYXV0byIsICJ5ZXMiICBhbmQgIm5vIi4gKi8KKwkgICAgKHZvaWQpb3B0X3N0cmluZ3NfZmxhZ3Mob2xkdmFsLCBwX2JrY192YWx1ZXMsICZia2NfZmxhZ3MsIFRSVUUpOworCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKwl9CisgICAgfQorCisgICAgLyogJ2JhY2t1cGV4dCcgYW5kICdwYXRjaG1vZGUnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9iZXggfHwgdmFycCA9PSAmcF9wbSkKKyAgICB7CisJaWYgKFNUUkNNUCgqcF9iZXggPT0gJy4nID8gcF9iZXggKyAxIDogcF9iZXgsCisJCSAgICAgKnBfcG0gPT0gJy4nID8gcF9wbSArIDEgOiBwX3BtKSA9PSAwKQorCSAgICBlcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1ODk6ICdiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICdpc2lkZW50JywgJ2lza2V5d29yZCcsICdpc3ByaW50IG9yICdpc2ZuYW1lJyBvcHRpb246IHJlZmlsbCBjaGFydGFiW10KKyAgICAgKiBJZiB0aGUgbmV3IG9wdGlvbiBpcyBpbnZhbGlkLCB1c2Ugb2xkIHZhbHVlLiAgJ2xpc3AnIG9wdGlvbjogcmVmaWxsCisgICAgICogY2hhcnRhYltdIGZvciAnLScgY2hhcgorICAgICAqLworICAgIGVsc2UgaWYgKCAgdmFycCA9PSAmcF9pc2kKKwkgICAgfHwgdmFycCA9PSAmKGN1cmJ1Zi0+Yl9wX2lzaykKKwkgICAgfHwgdmFycCA9PSAmcF9pc3AKKwkgICAgfHwgdmFycCA9PSAmcF9pc2YpCisgICAgeworCWlmIChpbml0X2NoYXJ0YWIoKSA9PSBGQUlMKQorCXsKKwkgICAgZGlkX2NoYXJ0YWIgPSBUUlVFOwkgICAgLyogbmVlZCB0byByZXN0b3JlIGl0IGJlbG93ICovCisJICAgIGVycm1zZyA9IGVfaW52YXJnOwkgICAgLyogZXJyb3IgaW4gdmFsdWUgKi8KKwl9CisgICAgfQorCisgICAgLyogJ2hlbHBmaWxlJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfaGYpCisgICAgeworCS8qIE1heSBjb21wdXRlIG5ldyB2YWx1ZXMgZm9yICRWSU0gYW5kICRWSU1SVU5USU1FICovCisJaWYgKGRpZHNldF92aW0pCisJeworCSAgICB2aW1fc2V0ZW52KChjaGFyX3UgKikiVklNIiwgKGNoYXJfdSAqKSIiKTsKKwkgICAgZGlkc2V0X3ZpbSA9IEZBTFNFOworCX0KKwlpZiAoZGlkc2V0X3ZpbXJ1bnRpbWUpCisJeworCSAgICB2aW1fc2V0ZW52KChjaGFyX3UgKikiVklNUlVOVElNRSIsIChjaGFyX3UgKikiIik7CisJICAgIGRpZHNldF92aW1ydW50aW1lID0gRkFMU0U7CisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfTVVMVElfTEFORworICAgIC8qICdoZWxwbGFuZycgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX2hsZykKKyAgICB7CisJLyogQ2hlY2sgZm9yICIiLCAiYWIiLCAiYWIsY2QiLCBldGMuICovCisJZm9yIChzID0gcF9obGc7ICpzICE9IE5VTDsgcyArPSAzKQorCXsKKwkgICAgaWYgKHNbMV0gPT0gTlVMIHx8ICgoc1syXSAhPSAnLCcgfHwgc1szXSA9PSBOVUwpICYmIHNbMl0gIT0gTlVMKSkKKwkgICAgeworCQllcnJtc2cgPSBlX2ludmFyZzsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKHNbMl0gPT0gTlVMKQorCQlicmVhazsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKiAnaGlnaGxpZ2h0JyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfaGwpCisgICAgeworCWlmIChoaWdobGlnaHRfY2hhbmdlZCgpID09IEZBSUwpCisJICAgIGVycm1zZyA9IGVfaW52YXJnOwkvKiBpbnZhbGlkIGZsYWdzICovCisgICAgfQorCisgICAgLyogJ25yZm9ybWF0cycgKi8KKyAgICBlbHNlIGlmIChndmFycCA9PSAmcF9uZikKKyAgICB7CisJaWYgKGNoZWNrX29wdF9zdHJpbmdzKCp2YXJwLCBwX25mX3ZhbHVlcywgVFJVRSkgIT0gT0spCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworICAgIH0KKworI2lmZGVmIEZFQVRfU0VTU0lPTgorICAgIC8qICdzZXNzaW9ub3B0aW9ucycgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX3Nzb3ApCisgICAgeworCWlmIChvcHRfc3RyaW5nc19mbGFncyhwX3Nzb3AsIHBfc3NvcF92YWx1ZXMsICZzc29wX2ZsYWdzLCBUUlVFKSAhPSBPSykKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisJaWYgKChzc29wX2ZsYWdzICYgU1NPUF9DVVJESVIpICYmIChzc29wX2ZsYWdzICYgU1NPUF9TRVNESVIpKQorCXsKKwkgICAgLyogRG9uJ3QgYWxsb3cgYm90aCAic2VzZGlyIiBhbmQgImN1cmRpciIuICovCisJICAgICh2b2lkKW9wdF9zdHJpbmdzX2ZsYWdzKG9sZHZhbCwgcF9zc29wX3ZhbHVlcywgJnNzb3BfZmxhZ3MsIFRSVUUpOworCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKwl9CisgICAgfQorICAgIC8qICd2aWV3b3B0aW9ucycgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX3ZvcCkKKyAgICB7CisJaWYgKG9wdF9zdHJpbmdzX2ZsYWdzKHBfdm9wLCBwX3Nzb3BfdmFsdWVzLCAmdm9wX2ZsYWdzLCBUUlVFKSAhPSBPSykKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiAnc2Nyb2xsb3B0JyAqLworI2lmZGVmIEZFQVRfU0NST0xMQklORAorICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfc2JvKQorICAgIHsKKwlpZiAoY2hlY2tfb3B0X3N0cmluZ3MocF9zYm8sIHBfc2Nib3B0X3ZhbHVlcywgVFJVRSkgIT0gT0spCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworICAgIH0KKyNlbmRpZgorCisgICAgLyogJ2FtYml3aWR0aCcgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9hbWJ3KQorICAgIHsKKwlpZiAoY2hlY2tfb3B0X3N0cmluZ3MocF9hbWJ3LCBwX2FtYndfdmFsdWVzLCBGQUxTRSkgIT0gT0spCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworICAgIH0KKyNlbmRpZgorCisgICAgLyogJ2JhY2tncm91bmQnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9iZykKKyAgICB7CisJaWYgKGNoZWNrX29wdF9zdHJpbmdzKHBfYmcsIHBfYmdfdmFsdWVzLCBGQUxTRSkgPT0gT0spCisJeworI2lmZGVmIEZFQVRfRVZBTAorCSAgICBpbnQgZGFyayA9ICgqcF9iZyA9PSAnZCcpOworI2VuZGlmCisKKwkgICAgaW5pdF9oaWdobGlnaHQoRkFMU0UsIEZBTFNFKTsKKworI2lmZGVmIEZFQVRfRVZBTAorCSAgICBpZiAoZGFyayAhPSAoKnBfYmcgPT0gJ2QnKQorCQkJICAmJiBnZXRfdmFyX3ZhbHVlKChjaGFyX3UgKikiZzpjb2xvcnNfbmFtZSIpICE9IE5VTEwpCisJICAgIHsKKwkJLyogVGhlIGNvbG9yIHNjaGVtZSBtdXN0IGhhdmUgc2V0ICdiYWNrZ3JvdW5kJyBiYWNrIHRvIGFub3RoZXIKKwkJICogdmFsdWUsIHRoYXQncyBub3Qgd2hhdCB3ZSB3YW50IGhlcmUuICBEaXNhYmxlIHRoZSBjb2xvcgorCQkgKiBzY2hlbWUgYW5kIHNldCB0aGUgY29sb3JzIGFnYWluLiAqLworCQlkb191bmxldCgoY2hhcl91ICopImc6Y29sb3JzX25hbWUiKTsKKwkJZnJlZV9zdHJpbmdfb3B0aW9uKHBfYmcpOworCQlwX2JnID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKShkYXJrID8gImRhcmsiIDogImxpZ2h0IikpOworCQljaGVja19zdHJpbmdfb3B0aW9uKCZwX2JnKTsKKwkJaW5pdF9oaWdobGlnaHQoRkFMU0UsIEZBTFNFKTsKKwkgICAgfQorI2VuZGlmCisJfQorCWVsc2UKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisgICAgfQorCisgICAgLyogJ3dpbGRtb2RlJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfd2ltKQorICAgIHsKKwlpZiAoY2hlY2tfb3B0X3dpbSgpID09IEZBSUwpCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworICAgIH0KKworI2lmZGVmIEZFQVRfV0FLCisgICAgLyogJ3dpbmFsdGtleXMnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF93YWspCisgICAgeworCWlmICgqcF93YWsgPT0gTlVMCisJCXx8IGNoZWNrX29wdF9zdHJpbmdzKHBfd2FrLCBwX3dha192YWx1ZXMsIEZBTFNFKSAhPSBPSykKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisjIGlmZGVmIEZFQVRfTUVOVQorIyAgaWZkZWYgRkVBVF9HVUlfTU9USUYKKwllbHNlIGlmIChndWkuaW5fdXNlKQorCSAgICBndWlfbW90aWZfc2V0X21uZW1vbmljcyhwX3dha1swXSA9PSAneScgfHwgcF93YWtbMF0gPT0gJ20nKTsKKyMgIGVsc2UKKyMgICBpZmRlZiBGRUFUX0dVSV9HVEsKKwllbHNlIGlmIChndWkuaW5fdXNlKQorCSAgICBndWlfZ3RrX3NldF9tbmVtb25pY3MocF93YWtbMF0gPT0gJ3knIHx8IHBfd2FrWzBdID09ICdtJyk7CisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICAvKiAnZXZlbnRpZ25vcmUnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9laSkKKyAgICB7CisJaWYgKGNoZWNrX2VpKCkgPT0gRkFJTCkKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyogJ2VuY29kaW5nJyBhbmQgJ2ZpbGVlbmNvZGluZycgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX2VuYyB8fCBndmFycCA9PSAmcF9mZW5jIHx8IHZhcnAgPT0gJnBfdGVuYykKKyAgICB7CisJaWYgKGd2YXJwID09ICZwX2ZlbmMpCisJeworCSAgICBpZiAoIWN1cmJ1Zi0+Yl9wX21hKQorCQllcnJtc2cgPSBlX21vZGlmaWFibGU7CisJICAgIGVsc2UgaWYgKHZpbV9zdHJjaHIoKnZhcnAsICcsJykgIT0gTlVMTCkKKwkJLyogTm8gY29tbWEgYWxsb3dlZCBpbiAnZmlsZWVuY29kaW5nJzsgY2F0Y2hlcyBjb25mdXNpbmcgaXQKKwkJICogd2l0aCAnZmlsZWVuY29kaW5ncycuICovCisJCWVycm1zZyA9IGVfaW52YXJnOworIyBpZmRlZiBGRUFUX1RJVExFCisJICAgIGVsc2UKKwkJLyogTWF5IHNob3cgYSAiKyIgaW4gdGhlIHRpdGxlIG5vdy4gKi8KKwkJbmVlZF9tYWtldGl0bGUgPSBUUlVFOworIyBlbmRpZgorCX0KKwlpZiAoZXJybXNnID09IE5VTEwpCisJeworCSAgICAvKiBjYW5vbml6ZSB0aGUgdmFsdWUsIHNvIHRoYXQgU1RSQ01QKCkgY2FuIGJlIHVzZWQgb24gaXQgKi8KKwkgICAgcCA9IGVuY19jYW5vbml6ZSgqdmFycCk7CisJICAgIGlmIChwICE9IE5VTEwpCisJICAgIHsKKwkJdmltX2ZyZWUoKnZhcnApOworCQkqdmFycCA9IHA7CisJICAgIH0KKwkgICAgaWYgKHZhcnAgPT0gJnBfZW5jKQorCSAgICB7CisJCWVycm1zZyA9IG1iX2luaXQoKTsKKyMgaWZkZWYgRkVBVF9USVRMRQorCQluZWVkX21ha2V0aXRsZSA9IFRSVUU7CisjIGVuZGlmCisJICAgIH0KKwl9CisKKyMgaWYgZGVmaW5lZChGRUFUX0dVSV9HVEspICYmIGRlZmluZWQoSEFWRV9HVEsyKQorCWlmIChlcnJtc2cgPT0gTlVMTCAmJiB2YXJwID09ICZwX3RlbmMgJiYgZ3VpLmluX3VzZSkKKwl7CisJICAgIC8qIEdUSysgMiB1c2VzIG9ubHkgYSBzaW5nbGUgZW5jb2RpbmcsIGFuZCB0aGF0IGlzIFVURi04LiAqLworCSAgICBpZiAoU1RSQ01QKHBfdGVuYywgInV0Zi04IikgIT0gMCkKKwkJZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNjE3OiBDYW5ub3QgYmUgY2hhbmdlZCBpbiB0aGUgR1RLKyAyIEdVSSIpOworCX0KKyMgZW5kaWYKKworCWlmIChlcnJtc2cgPT0gTlVMTCkKKwl7CisjIGlmZGVmIEZFQVRfS0VZTUFQCisJICAgIC8qIFdoZW4gJ2tleW1hcCcgaXMgdXNlZCBhbmQgJ2VuY29kaW5nJyBjaGFuZ2VzLCByZWxvYWQgdGhlIGtleW1hcAorCSAgICAgKiAod2l0aCBhbm90aGVyIGVuY29kaW5nKS4gKi8KKwkgICAgaWYgKHZhcnAgPT0gJnBfZW5jICYmICpjdXJidWYtPmJfcF9rZXltYXAgIT0gTlVMKQorCQkodm9pZClrZXltYXBfaW5pdCgpOworIyBlbmRpZgorCisJICAgIC8qIFdoZW4gJ3Rlcm1lbmNvZGluZycgaXMgbm90IGVtcHR5IGFuZCAnZW5jb2RpbmcnIGNoYW5nZXMgb3Igd2hlbgorCSAgICAgKiAndGVybWVuY29kaW5nJyBjaGFuZ2VzLCBuZWVkIHRvIHNldHVwIGZvciBrZXlib2FyZCBpbnB1dCBhbmQKKwkgICAgICogZGlzcGxheSBvdXRwdXQgY29udmVyc2lvbi4gKi8KKwkgICAgaWYgKCgodmFycCA9PSAmcF9lbmMgJiYgKnBfdGVuYyAhPSBOVUwpIHx8IHZhcnAgPT0gJnBfdGVuYykpCisJICAgIHsKKwkJY29udmVydF9zZXR1cCgmaW5wdXRfY29udiwgcF90ZW5jLCBwX2VuYyk7CisJCWNvbnZlcnRfc2V0dXAoJm91dHB1dF9jb252LCBwX2VuYywgcF90ZW5jKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9QT1NUU0NSSVBUKQorICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfcGVuYykKKyAgICB7CisJLyogQ2Fub25pemUgcHJpbnRlbmNvZGluZyBpZiBWSU0gc3RhbmRhcmQgb25lICovCisJcCA9IGVuY19jYW5vbml6ZShwX3BlbmMpOworCWlmIChwICE9IE5VTEwpCisJeworCSAgICB2aW1fZnJlZShwX3BlbmMpOworCSAgICBwX3BlbmMgPSBwOworCX0KKwllbHNlCisJeworCSAgICAvKiBFbnN1cmUgbG93ZXIgY2FzZSBhbmQgJy0nIGZvciAnXycgKi8KKwkgICAgZm9yIChzID0gcF9wZW5jOyAqcyAhPSBOVUw7IHMrKykKKwkgICAgeworCQlpZiAoKnMgPT0gJ18nKQorCQkgICAgKnMgPSAnLSc7CisJCWVsc2UKKwkJICAgICpzID0gVE9MT1dFUl9BU0MoKnMpOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1hJTSkgJiYgZGVmaW5lZChGRUFUX0dVSV9HVEspCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9pbWFrKQorICAgIHsKKwlpZiAoZ3VpLmluX3VzZSAmJiAhaW1feGltX2lzdmFsaWRfaW1hY3RpdmF0ZSgpKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfS0VZTUFQCisgICAgZWxzZSBpZiAodmFycCA9PSAmY3VyYnVmLT5iX3Bfa2V5bWFwKQorICAgIHsKKwkvKiBsb2FkIG9yIHVubG9hZCBrZXkgbWFwcGluZyB0YWJsZXMgKi8KKwllcnJtc2cgPSBrZXltYXBfaW5pdCgpOworCisJLyogV2hlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkIGEgbmV3IGtleW1hcCBzd2l0Y2ggb24gdXNpbmcgaXQuICovCisJaWYgKCpjdXJidWYtPmJfcF9rZXltYXAgIT0gTlVMICYmIGVycm1zZyA9PSBOVUxMKQorCXsKKwkgICAgY3VyYnVmLT5iX3BfaW1pbnNlcnQgPSBCX0lNT0RFX0xNQVA7CisJICAgIGlmIChjdXJidWYtPmJfcF9pbXNlYXJjaCAhPSBCX0lNT0RFX1VTRV9JTlNFUlQpCisJCWN1cmJ1Zi0+Yl9wX2ltc2VhcmNoID0gQl9JTU9ERV9MTUFQOworCSAgICBzZXRfaW1pbnNlcnRfZ2xvYmFsKCk7CisJICAgIHNldF9pbXNlYXJjaF9nbG9iYWwoKTsKKyMgaWZkZWYgRkVBVF9XSU5ET1dTCisJICAgIHN0YXR1c19yZWRyYXdfY3VyYnVmKCk7CisjIGVuZGlmCisJfQorICAgIH0KKyNlbmRpZgorCisgICAgLyogJ2ZpbGVmb3JtYXQnICovCisgICAgZWxzZSBpZiAoZ3ZhcnAgPT0gJnBfZmYpCisgICAgeworCWlmICghY3VyYnVmLT5iX3BfbWEgJiYgIShvcHRfZmxhZ3MgJiBPUFRfR0xPQkFMKSkKKwkgICAgZXJybXNnID0gZV9tb2RpZmlhYmxlOworCWVsc2UgaWYgKGNoZWNrX29wdF9zdHJpbmdzKCp2YXJwLCBwX2ZmX3ZhbHVlcywgRkFMU0UpICE9IE9LKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKwllbHNlCisJeworCSAgICAvKiBtYXkgYWxzbyBjaGFuZ2UgJ3RleHRtb2RlJyAqLworCSAgICBpZiAoZ2V0X2ZpbGVmb3JtYXQoY3VyYnVmKSA9PSBFT0xfRE9TKQorCQljdXJidWYtPmJfcF90eCA9IFRSVUU7CisJICAgIGVsc2UKKwkJY3VyYnVmLT5iX3BfdHggPSBGQUxTRTsKKyNpZmRlZiBGRUFUX1RJVExFCisJICAgIG5lZWRfbWFrZXRpdGxlID0gVFJVRTsKKyNlbmRpZgorCX0KKyAgICB9CisKKyAgICAvKiAnZmlsZWZvcm1hdHMnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9mZnMpCisgICAgeworCWlmIChjaGVja19vcHRfc3RyaW5ncyhwX2ZmcywgcF9mZl92YWx1ZXMsIFRSVUUpICE9IE9LKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKwllbHNlCisJeworCSAgICAvKiBhbHNvIGNoYW5nZSAndGV4dGF1dG8nICovCisJICAgIGlmICgqcF9mZnMgPT0gTlVMKQorCQlwX3RhID0gRkFMU0U7CisJICAgIGVsc2UKKwkJcF90YSA9IFRSVUU7CisJfQorICAgIH0KKworI2lmIGRlZmluZWQoRkVBVF9DUllQVCkgJiYgZGVmaW5lZChGRUFUX0NNREhJU1QpCisgICAgLyogJ2NyeXB0a2V5JyAqLworICAgIGVsc2UgaWYgKGd2YXJwID09ICZwX2tleSkKKyAgICB7CisJLyogTWFrZSBzdXJlIHRoZSAiOnNldCIgY29tbWFuZCBkb2Vzbid0IHNob3cgdGhlIG5ldyB2YWx1ZSBpbiB0aGUKKwkgKiBoaXN0b3J5LiAqLworCXJlbW92ZV9rZXlfZnJvbV9oaXN0b3J5KCk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiAnbWF0Y2hwYWlycycgKi8KKyAgICBlbHNlIGlmIChndmFycCA9PSAmcF9tcHMpCisgICAgeworCS8qIENoZWNrIGZvciAieDp5LHg6eSIgKi8KKwlmb3IgKHAgPSAqdmFycDsgKnAgIT0gTlVMOyBwICs9IDQpCisJeworCSAgICBpZiAocFsxXSAhPSAnOicgfHwgcFsyXSA9PSBOVUwgfHwgKHBbM10gIT0gTlVMICYmIHBbM10gIT0gJywnKSkKKwkgICAgeworCQllcnJtc2cgPSBlX2ludmFyZzsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKHBbM10gPT0gTlVMKQorCQlicmVhazsKKwl9CisgICAgfQorCisjaWZkZWYgRkVBVF9DT01NRU5UUworICAgIC8qICdjb21tZW50cycgKi8KKyAgICBlbHNlIGlmIChndmFycCA9PSAmcF9jb20pCisgICAgeworCWZvciAocyA9ICp2YXJwOyAqczsgKQorCXsKKwkgICAgd2hpbGUgKCpzICYmICpzICE9ICc6JykKKwkgICAgeworCQlpZiAodmltX3N0cmNocigoY2hhcl91ICopQ09NX0FMTCwgKnMpID09IE5VTEwKKwkJCQkJICAgICAmJiAhVklNX0lTRElHSVQoKnMpICYmICpzICE9ICctJykKKwkJeworCQkgICAgZXJybXNnID0gaWxsZWdhbF9jaGFyKGVycmJ1ZiwgKnMpOworCQkgICAgYnJlYWs7CisJCX0KKwkJKytzOworCSAgICB9CisJICAgIGlmICgqcysrID09IE5VTCkKKwkJZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTI0OiBNaXNzaW5nIGNvbG9uIik7CisJICAgIGVsc2UgaWYgKCpzID09ICcsJyB8fCAqcyA9PSBOVUwpCisJCWVycm1zZyA9IChjaGFyX3UgKilOXygiRTUyNTogWmVybyBsZW5ndGggc3RyaW5nIik7CisJICAgIGlmIChlcnJtc2cgIT0gTlVMTCkKKwkJYnJlYWs7CisJICAgIHdoaWxlICgqcyAmJiAqcyAhPSAnLCcpCisJICAgIHsKKwkJaWYgKCpzID09ICdcXCcgJiYgc1sxXSAhPSBOVUwpCisJCSAgICArK3M7CisJCSsrczsKKwkgICAgfQorCSAgICBzID0gc2tpcF90b19vcHRpb25fcGFydChzKTsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKiAnbGlzdGNoYXJzJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfbGNzKQorICAgIHsKKwllcnJtc2cgPSBzZXRfY2hhcnNfb3B0aW9uKHZhcnApOworICAgIH0KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKEZFQVRfRk9MRElORykKKyAgICAvKiAnZmlsbGNoYXJzJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfZmNzKQorICAgIHsKKwllcnJtc2cgPSBzZXRfY2hhcnNfb3B0aW9uKHZhcnApOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9DTURXSU4KKyAgICAvKiAnY2VkaXQnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9jZWRpdCkKKyAgICB7CisJZXJybXNnID0gY2hlY2tfY2VkaXQoKTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVklNSU5GTworICAgIC8qICd2aW1pbmZvJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfdmltaW5mbykKKyAgICB7CisJZm9yIChzID0gcF92aW1pbmZvOyAqczspCisJeworCSAgICAvKiBDaGVjayBpdCdzIGEgdmFsaWQgY2hhcmFjdGVyICovCisJICAgIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiIVwiJScvOjxAY2ZobnJzIiwgKnMpID09IE5VTEwpCisJICAgIHsKKwkJZXJybXNnID0gaWxsZWdhbF9jaGFyKGVycmJ1ZiwgKnMpOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoKnMgPT0gJ24nKQkvKiBuYW1lIGlzIGFsd2F5cyBsYXN0IG9uZSAqLworCSAgICB7CisJCWJyZWFrOworCSAgICB9CisJICAgIGVsc2UgaWYgKCpzID09ICdyJykgLyogc2tpcCB1bnRpbCBuZXh0ICcsJyAqLworCSAgICB7CisJCXdoaWxlICgqKytzICYmICpzICE9ICcsJykKKwkJICAgIDsKKwkgICAgfQorCSAgICBlbHNlIGlmICgqcyA9PSAnJScgfHwgKnMgPT0gJyEnIHx8ICpzID09ICdoJyB8fCAqcyA9PSAnYycpCisJCSsrczsJCS8qIG5vIGV4dHJhIGNoYXJzICovCisJICAgIGVsc2UJCS8qIG11c3QgaGF2ZSBhIG51bWJlciAqLworCSAgICB7CisJCXdoaWxlICh2aW1faXNkaWdpdCgqKytzKSkKKwkJICAgIDsKKworCQlpZiAoIVZJTV9JU0RJR0lUKCoocyAtIDEpKSkKKwkJeworCQkgICAgaWYgKGVycmJ1ZiAhPSBOVUxMKQorCQkgICAgeworCQkJc3ByaW50ZigoY2hhciAqKWVycmJ1ZiwgXygiRTUyNjogTWlzc2luZyBudW1iZXIgYWZ0ZXIgPCVzPiIpLAorCQkJCQkJICAgIHRyYW5zY2hhcl9ieXRlKCoocyAtIDEpKSk7CisJCQllcnJtc2cgPSBlcnJidWY7CisJCSAgICB9CisJCSAgICBlbHNlCisJCQllcnJtc2cgPSAoY2hhcl91ICopIiI7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIGlmICgqcyA9PSAnLCcpCisJCSsrczsKKwkgICAgZWxzZSBpZiAoKnMpCisJICAgIHsKKwkJaWYgKGVycmJ1ZiAhPSBOVUxMKQorCQkgICAgZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTI3OiBNaXNzaW5nIGNvbW1hIik7CisJCWVsc2UKKwkJICAgIGVycm1zZyA9IChjaGFyX3UgKikiIjsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJaWYgKCpwX3ZpbWluZm8gJiYgZXJybXNnID09IE5VTEwgJiYgZ2V0X3ZpbWluZm9fcGFyYW1ldGVyKCdcJycpIDwgMCkKKwkgICAgZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIik7CisgICAgfQorI2VuZGlmIC8qIEZFQVRfVklNSU5GTyAqLworCisgICAgLyogdGVybWluYWwgb3B0aW9ucyAqLworICAgIGVsc2UgaWYgKGlzdGVybW9wdGlvbigmb3B0aW9uc1tvcHRfaWR4XSkgJiYgZnVsbF9zY3JlZW4pCisgICAgeworCS8qICI6c2V0IHRfQ289MCIgYW5kICI6c2V0IHRfQ289MSIgZG8gIjpzZXQgdF9Dbz0iICovCisJaWYgKHZhcnAgPT0gJlRfQ0NPKQorCXsKKwkgICAgdF9jb2xvcnMgPSBhdG9pKChjaGFyICopVF9DQ08pOworCSAgICBpZiAodF9jb2xvcnMgPD0gMSkKKwkgICAgeworCQlpZiAobmV3X3ZhbHVlX2FsbG9jZWQpCisJCSAgICB2aW1fZnJlZShUX0NDTyk7CisJCVRfQ0NPID0gZW1wdHlfb3B0aW9uOworCSAgICB9CisJICAgIC8qIFdlIG5vdyBoYXZlIGEgZGlmZmVyZW50IGNvbG9yIHNldHVwLCBpbml0aWFsaXplIGl0IGFnYWluLiAqLworCSAgICBpbml0X2hpZ2hsaWdodChUUlVFLCBGQUxTRSk7CisJfQorCXR0ZXN0KEZBTFNFKTsKKwlpZiAodmFycCA9PSAmVF9NRSkKKwl7CisJICAgIG91dF9zdHIoVF9NRSk7CisJICAgIHJlZHJhd19sYXRlcihDTEVBUik7CisjaWYgZGVmaW5lZChNU0RPUykgfHwgKGRlZmluZWQoV0lOMzI2NCkgJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKSkKKwkgICAgLyogU2luY2UgdF9tZSBoYXMgYmVlbiBzZXQsIHRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdXNlcgorCSAgICAgKiB3YW50cyB0byB1c2UgdGhpcyBhcyBkZWZhdWx0IGNvbG9ycy4gIE5lZWQgdG8gcmVzZXQgZGVmYXVsdAorCSAgICAgKiBiYWNrZ3JvdW5kL2ZvcmVncm91bmQgY29sb3JzLiAqLworCSAgICBtY2hfc2V0X25vcm1hbF9jb2xvcnMoKTsKKyNlbmRpZgorCX0KKyAgICB9CisKKyNpZmRlZiBGRUFUX0xJTkVCUkVBSworICAgIC8qICdzaG93YnJlYWsnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9zYnIpCisgICAgeworCWZvciAocyA9IHBfc2JyOyAqczsgKQorCXsKKwkgICAgaWYgKHB0cjJjZWxscyhzKSAhPSAxKQorCQllcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1OTU6IGNvbnRhaW5zIHVucHJpbnRhYmxlIG9yIHdpZGUgY2hhcmFjdGVyIik7CisjIGlmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJcyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHMpOworCSAgICBlbHNlCisjIGVuZGlmCisJCSsrczsKKwl9CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSQorICAgIC8qICdndWlmb250JyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfZ3VpZm9udCkKKyAgICB7CisJaWYgKGd1aS5pbl91c2UpCisJeworCSAgICBwID0gcF9ndWlmb250OworIyBpZmRlZiBGRUFUX0dVSV9HVEsKKwkgICAgLyoKKwkgICAgICogUHV0IHVwIGEgZm9udCBkaWFsb2cgYW5kIGxldCB0aGUgdXNlciBzZWxlY3QgYSBuZXcgdmFsdWUuCisJICAgICAqIElmIHRoaXMgaXMgY2FuY2VsbGVkIGdvIGJhY2sgdG8gdGhlIG9sZCB2YWx1ZSBidXQgZG9uJ3QKKwkgICAgICogZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLgorCSAgICAgKi8KKwkgICAgaWYgKFNUUkNNUChwLCAiKiIpID09IDApCisJICAgIHsKKwkJcCA9IGd1aV9tY2hfZm9udF9kaWFsb2cob2xkdmFsKTsKKworCQlpZiAobmV3X3ZhbHVlX2FsbG9jZWQpCisJCSAgICBmcmVlX3N0cmluZ19vcHRpb24ocF9ndWlmb250KTsKKworCQlwX2d1aWZvbnQgPSAocCAhPSBOVUxMKSA/IHAgOiB2aW1fc3Ryc2F2ZShvbGR2YWwpOworCQluZXdfdmFsdWVfYWxsb2NlZCA9IFRSVUU7CisJICAgIH0KKyMgZW5kaWYKKwkgICAgaWYgKHAgIT0gTlVMTCAmJiBndWlfaW5pdF9mb250KHBfZ3VpZm9udCwgRkFMU0UpICE9IE9LKQorCSAgICB7CisjIGlmIGRlZmluZWQoRkVBVF9HVUlfTVNXSU4pIHx8IGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKQorCQlpZiAoU1RSQ01QKHBfZ3VpZm9udCwgIioiKSA9PSAwKQorCQl7CisJCSAgICAvKiBEaWFsb2cgd2FzIGNhbmNlbGxlZDogS2VlcCB0aGUgb2xkIHZhbHVlIHdpdGhvdXQgZ2l2aW5nCisJCSAgICAgKiBhbiBlcnJvciBtZXNzYWdlLiAqLworCQkgICAgaWYgKG5ld192YWx1ZV9hbGxvY2VkKQorCQkJZnJlZV9zdHJpbmdfb3B0aW9uKHBfZ3VpZm9udCk7CisJCSAgICBwX2d1aWZvbnQgPSB2aW1fc3Ryc2F2ZShvbGR2YWwpOworCQkgICAgbmV3X3ZhbHVlX2FsbG9jZWQgPSBUUlVFOworCQl9CisJCWVsc2UKKyMgZW5kaWYKKwkJICAgIGVycm1zZyA9IChjaGFyX3UgKilOXygiRTU5NjogSW52YWxpZCBmb250KHMpIik7CisJICAgIH0KKwl9CisgICAgfQorIyBpZmRlZiBGRUFUX1hGT05UU0VUCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9ndWlmb250c2V0KQorICAgIHsKKwlpZiAoU1RSQ01QKHBfZ3VpZm9udHNldCwgIioiKSA9PSAwKQorCSAgICBlcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1OTc6IGNhbid0IHNlbGVjdCBmb250c2V0Iik7CisJZWxzZSBpZiAoZ3VpLmluX3VzZSAmJiBndWlfaW5pdF9mb250KHBfZ3VpZm9udHNldCwgVFJVRSkgIT0gT0spCisJICAgIGVycm1zZyA9IChjaGFyX3UgKilOXygiRTU5ODogSW52YWxpZCBmb250c2V0Iik7CisgICAgfQorIyBlbmRpZgorIyBpZmRlZiBGRUFUX01CWVRFCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9ndWlmb250d2lkZSkKKyAgICB7CisJaWYgKFNUUkNNUChwX2d1aWZvbnR3aWRlLCAiKiIpID09IDApCisJICAgIGVycm1zZyA9IChjaGFyX3UgKilOXygiRTUzMzogY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIpOworCWVsc2UgaWYgKGd1aV9nZXRfd2lkZV9mb250KCkgPT0gRkFJTCkKKwkgICAgZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTM0OiBJbnZhbGlkIHdpZGUgZm9udCIpOworICAgIH0KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ1VSU09SX1NIQVBFCisgICAgLyogJ2d1aWN1cnNvcicgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX2d1aWN1cnNvcikKKwllcnJtc2cgPSBwYXJzZV9zaGFwZV9vcHQoU0hBUEVfQ1VSU09SKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NT1VTRVNIQVBFCisgICAgLyogJ21vdXNlc2hhcGUnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9tb3VzZXNoYXBlKQorICAgIHsKKwllcnJtc2cgPSBwYXJzZV9zaGFwZV9vcHQoU0hBUEVfTU9VU0UpOworCXVwZGF0ZV9tb3VzZXNoYXBlKC0xKTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfUFJJTlRFUgorICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfcG9wdCkKKwllcnJtc2cgPSBwYXJzZV9saXN0X29wdGlvbnMocF9wb3B0LCBwcmludGVyX29wdHMsIE9QVF9QUklOVF9OVU1fT1BUSU9OUyk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTEFOR01BUAorICAgIC8qICdsYW5nbWFwJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfbGFuZ21hcCkKKwlsYW5nbWFwX3NldCgpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0xJTkVCUkVBSworICAgIC8qICdicmVha2F0JyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfYnJlYWthdCkKKwlmaWxsX2JyZWFrYXRfZmxhZ3MoKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9USVRMRQorICAgIC8qICd0aXRsZXN0cmluZycgYW5kICdpY29uc3RyaW5nJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfdGl0bGVzdHJpbmcgfHwgdmFycCA9PSAmcF9pY29uc3RyaW5nKQorICAgIHsKKyMgaWZkZWYgRkVBVF9TVExfT1BUCisJaW50CWZsYWd2YWwgPSAodmFycCA9PSAmcF90aXRsZXN0cmluZykgPyBTVExfSU5fVElUTEUgOiBTVExfSU5fSUNPTjsKKworCS8qIE5VTEwgPT4gc3RhdHVzbGluZSBzeW50YXggKi8KKwlpZiAodmltX3N0cmNocigqdmFycCwgJyUnKSAmJiBjaGVja19zdGxfb3B0aW9uKCp2YXJwKSA9PSBOVUxMKQorCSAgICBzdGxfc3ludGF4IHw9IGZsYWd2YWw7CisJZWxzZQorCSAgICBzdGxfc3ludGF4ICY9IH5mbGFndmFsOworIyBlbmRpZgorCWRpZF9zZXRfdGl0bGUodmFycCA9PSAmcF9pY29uc3RyaW5nKTsKKworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUkKKyAgICAvKiAnZ3Vpb3B0aW9ucycgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX2dvKQorCWd1aV9pbml0X3doaWNoX2NvbXBvbmVudHMob2xkdmFsKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX01PVVNFX1RUWSkgJiYgKGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpKQorICAgIC8qICd0dHltb3VzZScgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX3R0eW0pCisgICAgeworCWlmIChvcHRfc3RyaW5nc19mbGFncyhwX3R0eW0sIHBfdHR5bV92YWx1ZXMsICZ0dHltX2ZsYWdzLCBGQUxTRSkgIT0gT0spCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworCWVsc2UKKwkgICAgY2hlY2tfbW91c2VfdGVybWNvZGUoKTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgLyogJ3NlbGVjdGlvbicgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX3NlbCkKKyAgICB7CisJaWYgKCpwX3NlbCA9PSBOVUwKKwkJfHwgY2hlY2tfb3B0X3N0cmluZ3MocF9zZWwsIHBfc2VsX3ZhbHVlcywgRkFMU0UpICE9IE9LKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKyAgICB9CisKKyAgICAvKiAnc2VsZWN0bW9kZScgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX3NsbSkKKyAgICB7CisJaWYgKGNoZWNrX29wdF9zdHJpbmdzKHBfc2xtLCBwX3NsbV92YWx1ZXMsIFRSVUUpICE9IE9LKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfQlJPV1NFCisgICAgLyogJ2Jyb3dzZWRpcicgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX2JzZGlyKQorICAgIHsKKwlpZiAoY2hlY2tfb3B0X3N0cmluZ3MocF9ic2RpciwgcF9ic2Rpcl92YWx1ZXMsIEZBTFNFKSAhPSBPSworCQkmJiAhbWNoX2lzZGlyKHBfYnNkaXIpKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgLyogJ2tleW1vZGVsJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfa20pCisgICAgeworCWlmIChjaGVja19vcHRfc3RyaW5ncyhwX2ttLCBwX2ttX3ZhbHVlcywgVFJVRSkgIT0gT0spCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworCWVsc2UKKwl7CisJICAgIGttX3N0b3BzZWwgPSAodmltX3N0cmNocihwX2ttLCAnbycpICE9IE5VTEwpOworCSAgICBrbV9zdGFydHNlbCA9ICh2aW1fc3RyY2hyKHBfa20sICdhJykgIT0gTlVMTCk7CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgLyogJ21vdXNlbW9kZWwnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9tb3VzZW0pCisgICAgeworCWlmIChjaGVja19vcHRfc3RyaW5ncyhwX21vdXNlbSwgcF9tb3VzZW1fdmFsdWVzLCBGQUxTRSkgIT0gT0spCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworI2lmIGRlZmluZWQoRkVBVF9HVUlfTU9USUYpICYmIGRlZmluZWQoRkVBVF9NRU5VKSAmJiAoWG1WZXJzaW9uIDw9IDEwMDIpCisJZWxzZSBpZiAoKnBfbW91c2VtICE9ICpvbGR2YWwpCisJICAgIC8qIENoYW5nZWQgZnJvbSAiZXh0ZW5kIiB0byAicG9wdXAiIG9yICJwb3B1cF9zZXRwb3MiIG9yIHZ2OiBuZWVkCisJICAgICAqIHRvIGNyZWF0ZSBvciBkZWxldGUgdGhlIHBvcHVwIG1lbnVzLiAqLworCSAgICBndWlfbW90aWZfdXBkYXRlX21vdXNlbW9kZWwocm9vdF9tZW51KTsKKyNlbmRpZgorICAgIH0KKworICAgIC8qICdzd2l0Y2hidWYnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9zd2IpCisgICAgeworCWlmIChjaGVja19vcHRfc3RyaW5ncyhwX3N3YiwgcF9zd2JfdmFsdWVzLCBUUlVFKSAhPSBPSykKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisgICAgfQorCisgICAgLyogJ2RlYnVnJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfZGVidWcpCisgICAgeworCWlmIChjaGVja19vcHRfc3RyaW5ncyhwX2RlYnVnLCBwX2RlYnVnX3ZhbHVlcywgRkFMU0UpICE9IE9LKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKyAgICB9CisKKyAgICAvKiAnZGlzcGxheScgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX2R5KQorICAgIHsKKwlpZiAob3B0X3N0cmluZ3NfZmxhZ3MocF9keSwgcF9keV92YWx1ZXMsICZkeV9mbGFncywgVFJVRSkgIT0gT0spCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworCWVsc2UKKwkgICAgKHZvaWQpaW5pdF9jaGFydGFiKCk7CisKKyAgICB9CisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIC8qICdlYWRpcmVjdGlvbicgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX2VhZCkKKyAgICB7CisJaWYgKGNoZWNrX29wdF9zdHJpbmdzKHBfZWFkLCBwX2VhZF92YWx1ZXMsIEZBTFNFKSAhPSBPSykKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIC8qICdjbGlwYm9hcmQnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9jYikKKwllcnJtc2cgPSBjaGVja19jbGlwYm9hcmRfb3B0aW9uKCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfQVVUT0NNRAorIyBpZmRlZiBGRUFUX1NZTl9ITAorICAgIC8qIFdoZW4gJ3N5bnRheCcgaXMgc2V0LCBsb2FkIHRoZSBzeW50YXggb2YgdGhhdCBuYW1lICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmKGN1cmJ1Zi0+Yl9wX3N5bikpCisgICAgeworCWFwcGx5X2F1dG9jbWRzKEVWRU5UX1NZTlRBWCwgY3VyYnVmLT5iX3Bfc3luLAorCQkJCQkgICAgIGN1cmJ1Zi0+Yl9mbmFtZSwgVFJVRSwgY3VyYnVmKTsKKyAgICB9CisjIGVuZGlmCisKKyAgICAvKiBXaGVuICdmaWxldHlwZScgaXMgc2V0LCB0cmlnZ2VyIHRoZSBGaWxlVHlwZSBhdXRvY29tbWFuZHMgb2YgdGhhdCBuYW1lICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmKGN1cmJ1Zi0+Yl9wX2Z0KSkKKyAgICB7CisJZGlkX2ZpbGV0eXBlID0gVFJVRTsKKwlhcHBseV9hdXRvY21kcyhFVkVOVF9GSUxFVFlQRSwgY3VyYnVmLT5iX3BfZnQsCisJCQkJCSAgICAgY3VyYnVmLT5iX2ZuYW1lLCBUUlVFLCBjdXJidWYpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorICAgIC8qIFdoZW4gJ2J1ZmhpZGRlbicgaXMgc2V0LCBjaGVjayBmb3IgdmFsaWQgdmFsdWUuICovCisgICAgZWxzZSBpZiAoZ3ZhcnAgPT0gJnBfYmgpCisgICAgeworCWlmIChjaGVja19vcHRfc3RyaW5ncyhjdXJidWYtPmJfcF9iaCwgcF9idWZoaWRkZW5fdmFsdWVzLCBGQUxTRSkgIT0gT0spCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworICAgIH0KKworICAgIC8qIFdoZW4gJ2J1ZnR5cGUnIGlzIHNldCwgY2hlY2sgZm9yIHZhbGlkIHZhbHVlLiAqLworICAgIGVsc2UgaWYgKGd2YXJwID09ICZwX2J0KQorICAgIHsKKwlpZiAoY2hlY2tfb3B0X3N0cmluZ3MoY3VyYnVmLT5iX3BfYnQsIHBfYnVmdHlwZV92YWx1ZXMsIEZBTFNFKSAhPSBPSykKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisJZWxzZQorCXsKKyMgaWZkZWYgRkVBVF9XSU5ET1dTCisJICAgIGlmIChjdXJ3aW4tPndfc3RhdHVzX2hlaWdodCkKKwkgICAgeworCQljdXJ3aW4tPndfcmVkcl9zdGF0dXMgPSBUUlVFOworCQlyZWRyYXdfbGF0ZXIoVkFMSUQpOworCSAgICB9CisjIGVuZGlmCisJICAgIGN1cmJ1Zi0+Yl9oZWxwID0gKGN1cmJ1Zi0+Yl9wX2J0WzBdID09ICdoJyk7CisJfQorICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TVExfT1BUCisgICAgLyogJ3N0YXR1c2xpbmUnIG9yICdydWxlcmZvcm1hdCcgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX3N0bCB8fCB2YXJwID09ICZwX3J1ZikKKyAgICB7CisJaW50IHdpZDsKKworCWlmICh2YXJwID09ICZwX3J1ZikJLyogcmVzZXQgcnVfd2lkIGZpcnN0ICovCisJICAgIHJ1X3dpZCA9IDA7CisJcyA9ICp2YXJwOworCWlmICh2YXJwID09ICZwX3J1ZiAmJiAqcyA9PSAnJScpCisJeworCSAgICAvKiBzZXQgcnVfd2lkIGlmICdydWYnIHN0YXJ0cyB3aXRoICIlOTkoIiAqLworCSAgICBpZiAoKisrcyA9PSAnLScpCS8qIGlnbm9yZSBhICctJyAqLworCQlzKys7CisJICAgIHdpZCA9IGdldGRpZ2l0cygmcyk7CisJICAgIGlmICh3aWQgJiYgKnMgPT0gJygnICYmIChlcnJtc2cgPSBjaGVja19zdGxfb3B0aW9uKHBfcnVmKSkgPT0gTlVMTCkKKwkJcnVfd2lkID0gd2lkOworCSAgICBlbHNlCisJCWVycm1zZyA9IGNoZWNrX3N0bF9vcHRpb24ocF9ydWYpOworCX0KKwllbHNlCisJICAgIGVycm1zZyA9IGNoZWNrX3N0bF9vcHRpb24ocyk7CisJaWYgKHZhcnAgPT0gJihwX3J1ZikgJiYgZXJybXNnID09IE5VTEwpCisJICAgIGNvbXBfY29sKCk7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKyAgICAvKiBjaGVjayBpZiBpdCBpcyBhIHZhbGlkIHZhbHVlIGZvciAnY29tcGxldGUnIC0tIEFjZXZlZG8gKi8KKyAgICBlbHNlIGlmIChndmFycCA9PSAmcF9jcHQpCisgICAgeworCWZvciAocyA9ICp2YXJwOyAqczspCisJeworCSAgICB3aGlsZSgqcyA9PSAnLCcgfHwgKnMgPT0gJyAnKQorCQlzKys7CisJICAgIGlmICghKnMpCisJCWJyZWFrOworCSAgICBpZiAodmltX3N0cmNocigoY2hhcl91ICopIi53YnVrc2lkXXRVIiwgKnMpID09IE5VTEwpCisJICAgIHsKKwkJZXJybXNnID0gaWxsZWdhbF9jaGFyKGVycmJ1ZiwgKnMpOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoKisrcyAhPSBOVUwgJiYgKnMgIT0gJywnICYmICpzICE9ICcgJykKKwkgICAgeworCQlpZiAoc1stMV0gPT0gJ2snIHx8IHNbLTFdID09ICdzJykKKwkJeworCQkgICAgLyogc2tpcCBvcHRpb25hbCBmaWxlbmFtZSBhZnRlciAnaycgYW5kICdzJyAqLworCQkgICAgd2hpbGUgKCpzICYmICpzICE9ICcsJyAmJiAqcyAhPSAnICcpCisJCSAgICB7CisJCQlpZiAoKnMgPT0gJ1xcJykKKwkJCSAgICArK3M7CisJCQkrK3M7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBpZiAoZXJyYnVmICE9IE5VTEwpCisJCSAgICB7CisJCQlzcHJpbnRmKChjaGFyICopZXJyYnVmLAorCQkJCSAgICAgXygiRTUzNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgPCVjPiIpLAorCQkJCSAgICAgKi0tcyk7CisJCQllcnJtc2cgPSBlcnJidWY7CisJCSAgICB9CisJCSAgICBlbHNlCisJCQllcnJtc2cgPSAoY2hhcl91ICopIiI7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBGRUFUX0lOU19FWFBBTkQgKi8KKworCisjaWYgZGVmaW5lZChGRUFUX1RPT0xCQVIpICYmICFkZWZpbmVkKEZFQVRfR1VJX1czMikKKyAgICBlbHNlIGlmICh2YXJwID09ICZwX3Rvb2xiYXIpCisgICAgeworCWlmIChvcHRfc3RyaW5nc19mbGFncyhwX3Rvb2xiYXIsIHBfdG9vbGJhcl92YWx1ZXMsCisJCQkgICAgICAmdG9vbGJhcl9mbGFncywgVFJVRSkgIT0gT0spCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworCWVsc2UKKwl7CisJICAgIG91dF9mbHVzaCgpOworCSAgICBndWlfbWNoX3Nob3dfdG9vbGJhcigodG9vbGJhcl9mbGFncyAmCisJCQkJICAoVE9PTEJBUl9URVhUIHwgVE9PTEJBUl9JQ09OUykpICE9IDApOworCX0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0dUSykgJiYgZGVmaW5lZChIQVZFX0dUSzIpCisgICAgLyogJ3Rvb2xiYXJpY29uc2l6ZSc6IEdUSysgMiBvbmx5ICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF90YmlzKQorICAgIHsKKwlpZiAob3B0X3N0cmluZ3NfZmxhZ3MocF90YmlzLCBwX3RiaXNfdmFsdWVzLCAmdGJpc19mbGFncywgRkFMU0UpICE9IE9LKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKwllbHNlCisJeworCSAgICBvdXRfZmx1c2goKTsKKwkgICAgZ3VpX21jaF9zaG93X3Rvb2xiYXIoKHRvb2xiYXJfZmxhZ3MgJgorCQkJCSAgKFRPT0xCQVJfVEVYVCB8IFRPT0xCQVJfSUNPTlMpKSAhPSAwKTsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKiAncGFzdGV0b2dnbGUnOiB0cmFuc2xhdGUga2V5IGNvZGVzIGxpa2UgaW4gYSBtYXBwaW5nICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9wdCkKKyAgICB7CisJaWYgKCpwX3B0KQorCXsKKwkgICAgKHZvaWQpcmVwbGFjZV90ZXJtY29kZXMocF9wdCwgJnAsIFRSVUUsIFRSVUUpOworCSAgICBpZiAocCAhPSBOVUxMKQorCSAgICB7CisJCWlmIChuZXdfdmFsdWVfYWxsb2NlZCkKKwkJICAgIGZyZWVfc3RyaW5nX29wdGlvbihwX3B0KTsKKwkJcF9wdCA9IHA7CisJCW5ld192YWx1ZV9hbGxvY2VkID0gVFJVRTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiAnYmFja3NwYWNlJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfYnMpCisgICAgeworCWlmIChWSU1fSVNESUdJVCgqcF9icykpCisJeworCSAgICBpZiAoKnBfYnMgPicyJyB8fCBwX2JzWzFdICE9IE5VTCkKKwkJZXJybXNnID0gZV9pbnZhcmc7CisJfQorCWVsc2UgaWYgKGNoZWNrX29wdF9zdHJpbmdzKHBfYnMsIHBfYnNfdmFsdWVzLCBUUlVFKSAhPSBPSykKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisgICAgfQorCisgICAgLyogJ2Nhc2VtYXAnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9jbXApCisgICAgeworCWlmIChvcHRfc3RyaW5nc19mbGFncyhwX2NtcCwgcF9jbXBfdmFsdWVzLCAmY21wX2ZsYWdzLCBUUlVFKSAhPSBPSykKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisgICAgfQorCisjaWZkZWYgRkVBVF9ESUZGCisgICAgLyogJ2RpZmZvcHQnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF9kaXApCisgICAgeworCWlmIChkaWZmb3B0X2NoYW5nZWQoKSA9PSBGQUlMKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfRk9MRElORworICAgIC8qICdmb2xkbWV0aG9kJyAqLworICAgIGVsc2UgaWYgKGd2YXJwID09ICZjdXJ3aW4tPndfYWxsYnVmX29wdC53b19mZG0pCisgICAgeworCWlmIChjaGVja19vcHRfc3RyaW5ncygqdmFycCwgcF9mZG1fdmFsdWVzLCBGQUxTRSkgIT0gT0sKKwkJfHwgKmN1cndpbi0+d19wX2ZkbSA9PSBOVUwpCisJICAgIGVycm1zZyA9IGVfaW52YXJnOworCWVsc2UKKwkgICAgZm9sZFVwZGF0ZUFsbChjdXJ3aW4pOworICAgIH0KKyMgaWZkZWYgRkVBVF9FVkFMCisgICAgLyogJ2ZvbGRleHByJyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJmN1cndpbi0+d19wX2ZkZSkKKyAgICB7CisJaWYgKGZvbGRtZXRob2RJc0V4cHIoY3Vyd2luKSkKKwkgICAgZm9sZFVwZGF0ZUFsbChjdXJ3aW4pOworICAgIH0KKyMgZW5kaWYKKyAgICAvKiAnZm9sZG1hcmtlcicgKi8KKyAgICBlbHNlIGlmIChndmFycCA9PSAmY3Vyd2luLT53X2FsbGJ1Zl9vcHQud29fZm1yKQorICAgIHsKKwlwID0gdmltX3N0cmNocigqdmFycCwgJywnKTsKKwlpZiAocCA9PSBOVUxMKQorCSAgICBlcnJtc2cgPSAoY2hhcl91ICopTl8oIkU1MzY6IGNvbW1hIHJlcXVpcmVkIik7CisJZWxzZSBpZiAocCA9PSAqdmFycCB8fCBwWzFdID09IE5VTCkKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisJZWxzZSBpZiAoZm9sZG1ldGhvZElzTWFya2VyKGN1cndpbikpCisJICAgIGZvbGRVcGRhdGVBbGwoY3Vyd2luKTsKKyAgICB9CisgICAgLyogJ2NvbW1lbnRzdHJpbmcnICovCisgICAgZWxzZSBpZiAoZ3ZhcnAgPT0gJnBfY21zKQorICAgIHsKKwlpZiAoKip2YXJwICE9IE5VTCAmJiBzdHJzdHIoKGNoYXIgKikqdmFycCwgIiVzIikgPT0gTlVMTCkKKwkgICAgZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTM3OiAnY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIik7CisgICAgfQorICAgIC8qICdmb2xkb3BlbicgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX2ZkbykKKyAgICB7CisJaWYgKG9wdF9zdHJpbmdzX2ZsYWdzKHBfZmRvLCBwX2Zkb192YWx1ZXMsICZmZG9fZmxhZ3MsIFRSVUUpICE9IE9LKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKyAgICB9CisgICAgLyogJ2ZvbGRjbG9zZScgKi8KKyAgICBlbHNlIGlmICh2YXJwID09ICZwX2ZjbCkKKyAgICB7CisJaWYgKGNoZWNrX29wdF9zdHJpbmdzKHBfZmNsLCBwX2ZjbF92YWx1ZXMsIFRSVUUpICE9IE9LKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICAvKiAndmlydHVhbGVkaXQnICovCisgICAgZWxzZSBpZiAodmFycCA9PSAmcF92ZSkKKyAgICB7CisJaWYgKG9wdF9zdHJpbmdzX2ZsYWdzKHBfdmUsIHBfdmVfdmFsdWVzLCAmdmVfZmxhZ3MsIFRSVUUpICE9IE9LKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKwllbHNlIGlmIChTVFJDTVAocF92ZSwgb2xkdmFsKSAhPSAwKQorCXsKKwkgICAgLyogUmVjb21wdXRlIGN1cnNvciBwb3NpdGlvbiBpbiBjYXNlIHRoZSBuZXcgJ3ZlJyBzZXR0aW5nCisJICAgICAqIGNoYW5nZXMgc29tZXRoaW5nLiAqLworCSAgICB2YWxpZGF0ZV92aXJ0Y29sKCk7CisJICAgIGNvbGFkdmFuY2UoY3Vyd2luLT53X3ZpcnRjb2wpOworCX0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9DU0NPUEUpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKyAgICBlbHNlIGlmICh2YXJwID09ICZwX2NzcWYpCisgICAgeworCWlmIChwX2NzcWYgIT0gTlVMTCkKKwl7CisJICAgIHAgPSBwX2NzcWY7CisJICAgIHdoaWxlICgqcCAhPSBOVUwpCisJICAgIHsKKwkJaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKUNTUUZfQ01EUywgKnApID09IE5VTEwKKwkJCXx8IHBbMV0gPT0gTlVMCisJCQl8fCB2aW1fc3RyY2hyKChjaGFyX3UgKilDU1FGX0ZMQUdTLCBwWzFdKSA9PSBOVUxMCisJCQl8fCAocFsyXSAhPSBOVUwgJiYgcFsyXSAhPSAnLCcpKQorCQl7CisJCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKwkJICAgIGJyZWFrOworCQl9CisJCWVsc2UgaWYgKHBbMl0gPT0gTlVMKQorCQkgICAgYnJlYWs7CisJCWVsc2UKKwkJICAgIHAgKz0gMzsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qIE9wdGlvbnMgdGhhdCBhcmUgYSBsaXN0IG9mIGZsYWdzLiAqLworICAgIGVsc2UKKyAgICB7CisJcCA9IE5VTEw7CisJaWYgKHZhcnAgPT0gJnBfd3cpCisJICAgIHAgPSAoY2hhcl91ICopV1dfQUxMOworCWlmICh2YXJwID09ICZwX3NobSkKKwkgICAgcCA9IChjaGFyX3UgKilTSE1fQUxMOworCWVsc2UgaWYgKHZhcnAgPT0gJihwX2NwbykpCisJICAgIHAgPSAoY2hhcl91ICopQ1BPX0FMTDsKKwllbHNlIGlmICh2YXJwID09ICYoY3VyYnVmLT5iX3BfZm8pKQorCSAgICBwID0gKGNoYXJfdSAqKUZPX0FMTDsKKwllbHNlIGlmICh2YXJwID09ICZwX21vdXNlKQorCXsKKyNpZmRlZiBGRUFUX01PVVNFCisJICAgIHAgPSAoY2hhcl91ICopTU9VU0VfQUxMOworI2Vsc2UKKwkgICAgaWYgKCpwX21vdXNlICE9IE5VTCkKKwkJZXJybXNnID0gKGNoYXJfdSAqKU5fKCJFNTM4OiBObyBtb3VzZSBzdXBwb3J0Iik7CisjZW5kaWYKKwl9CisjaWYgZGVmaW5lZChGRUFUX0dVSSkKKwllbHNlIGlmICh2YXJwID09ICZwX2dvKQorCSAgICBwID0gKGNoYXJfdSAqKUdPX0FMTDsKKyNlbmRpZgorCWlmIChwICE9IE5VTEwpCisJeworCSAgICBmb3IgKHMgPSAqdmFycDsgKnM7ICsrcykKKwkJaWYgKHZpbV9zdHJjaHIocCwgKnMpID09IE5VTEwpCisJCXsKKwkJICAgIGVycm1zZyA9IGlsbGVnYWxfY2hhcihlcnJidWYsICpzKTsKKwkJICAgIGJyZWFrOworCQl9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSWYgZXJyb3IgZGV0ZWN0ZWQsIHJlc3RvcmUgdGhlIHByZXZpb3VzIHZhbHVlLgorICAgICAqLworICAgIGlmIChlcnJtc2cgIT0gTlVMTCkKKyAgICB7CisJaWYgKG5ld192YWx1ZV9hbGxvY2VkKQorCSAgICBmcmVlX3N0cmluZ19vcHRpb24oKnZhcnApOworCSp2YXJwID0gb2xkdmFsOworCS8qCisJICogV2hlbiByZXNldHRpbmcgc29tZSB2YWx1ZXMsIG5lZWQgdG8gYWN0IG9uIGl0LgorCSAqLworCWlmIChkaWRfY2hhcnRhYikKKwkgICAgKHZvaWQpaW5pdF9jaGFydGFiKCk7CisJaWYgKHZhcnAgPT0gJnBfaGwpCisJICAgICh2b2lkKWhpZ2hsaWdodF9jaGFuZ2VkKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWZkZWYgRkVBVF9FVkFMCisJLyogUmVtZW1iZXIgd2hlcmUgdGhlIG9wdGlvbiB3YXMgc2V0LiAqLworCW9wdGlvbnNbb3B0X2lkeF0uc2NyaXB0SUQgPSBjdXJyZW50X1NJRDsKKyNlbmRpZgorCS8qCisJICogRnJlZSBzdHJpbmcgb3B0aW9ucyB0aGF0IGFyZSBpbiBhbGxvY2F0ZWQgbWVtb3J5LgorCSAqLworCWlmIChvcHRpb25zW29wdF9pZHhdLmZsYWdzICYgUF9BTExPQ0VEKQorCSAgICBmcmVlX3N0cmluZ19vcHRpb24ob2xkdmFsKTsKKwlpZiAobmV3X3ZhbHVlX2FsbG9jZWQpCisJICAgIG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgfD0gUF9BTExPQ0VEOworCWVsc2UKKwkgICAgb3B0aW9uc1tvcHRfaWR4XS5mbGFncyAmPSB+UF9BTExPQ0VEOworCisJaWYgKChvcHRfZmxhZ3MgJiAoT1BUX0xPQ0FMIHwgT1BUX0dMT0JBTCkpID09IDAKKwkJJiYgKGludClvcHRpb25zW29wdF9pZHhdLmluZGlyID49IFBWX0JPVEgpCisJeworCSAgICAvKiBnbG9iYWwgb3B0aW9uIHdpdGggbG9jYWwgdmFsdWUgc2V0IHRvIHVzZSBnbG9iYWwgdmFsdWU7IGZyZWUKKwkgICAgICogdGhlIGxvY2FsIHZhbHVlIGFuZCBtYWtlIGl0IGVtcHR5ICovCisJICAgIHAgPSBnZXRfdmFycF9zY29wZSgmKG9wdGlvbnNbb3B0X2lkeF0pLCBPUFRfTE9DQUwpOworCSAgICBmcmVlX3N0cmluZ19vcHRpb24oKihjaGFyX3UgKiopcCk7CisJICAgICooY2hhcl91ICoqKXAgPSBlbXB0eV9vcHRpb247CisJfQorCisJLyogTWF5IHNldCBnbG9iYWwgdmFsdWUgZm9yIGxvY2FsIG9wdGlvbi4gKi8KKwllbHNlIGlmICghKG9wdF9mbGFncyAmIE9QVF9MT0NBTCkgJiYgb3B0X2ZsYWdzICE9IE9QVF9HTE9CQUwpCisJICAgIHNldF9zdHJpbmdfb3B0aW9uX2dsb2JhbChvcHRfaWR4LCB2YXJwKTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgaWYgKHZhcnAgPT0gJnBfbW91c2UpCisgICAgeworIyBpZmRlZiBGRUFUX01PVVNFX1RUWQorCWlmICgqcF9tb3VzZSA9PSBOVUwpCisJICAgIG1jaF9zZXRtb3VzZShGQUxTRSk7ICAgIC8qIHN3aXRjaCBtb3VzZSBvZmYgKi8KKwllbHNlCisjIGVuZGlmCisJICAgIHNldG1vdXNlKCk7CQkgICAgLyogaW4gY2FzZSAnbW91c2UnIGNoYW5nZWQgKi8KKyAgICB9CisjZW5kaWYKKworICAgIGlmIChjdXJ3aW4tPndfY3Vyc3dhbnQgIT0gTUFYQ09MKQorCWN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOyAgLyogaW4gY2FzZSAnc2hvd2JyZWFrJyBjaGFuZ2VkICovCisgICAgY2hlY2tfcmVkcmF3KG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MpOworCisgICAgcmV0dXJuIGVycm1zZzsKK30KKworLyoKKyAqIEhhbmRsZSBzZXR0aW5nICdsaXN0Y2hhcnMnIG9yICdmaWxsY2hhcnMnLgorICogUmV0dXJucyBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIGl0J3MgT0suCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3NldF9jaGFyc19vcHRpb24odmFycCkKKyAgICBjaGFyX3UJKip2YXJwOworeworICAgIGludAkJcm91bmQsIGksIGxlbiwgZW50cmllczsKKyAgICBjaGFyX3UJKnAsICpzOworICAgIGludAkJYzEsIGMyID0gMDsKKyAgICBzdHJ1Y3QgY2hhcnN0YWIKKyAgICB7CisJaW50CSpjcDsKKwljaGFyCSpuYW1lOworICAgIH07CisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoRkVBVF9GT0xESU5HKQorICAgIHN0YXRpYyBzdHJ1Y3QgY2hhcnN0YWIgZmlsbHRhYltdID0KKyAgICB7CisJeyZmaWxsX3N0bCwJInN0bCJ9LAorCXsmZmlsbF9zdGxuYywJInN0bG5jIn0sCisJeyZmaWxsX3ZlcnQsCSJ2ZXJ0In0sCisJeyZmaWxsX2ZvbGQsCSJmb2xkIn0sCisJeyZmaWxsX2RpZmYsCSJkaWZmIn0sCisgICAgfTsKKyNlbmRpZgorICAgIHN0YXRpYyBzdHJ1Y3QgY2hhcnN0YWIgbGNzdGFiW10gPQorICAgIHsKKwl7Jmxjc19lb2wsCSJlb2wifSwKKwl7Jmxjc19leHQsCSJleHRlbmRzIn0sCisJeyZsY3NfcHJlYywJInByZWNlZGVzIn0sCisJeyZsY3NfdGFiMiwJInRhYiJ9LAorCXsmbGNzX3RyYWlsLAkidHJhaWwifSwKKyAgICB9OworICAgIHN0cnVjdCBjaGFyc3RhYiAqdGFiOworCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoRkVBVF9GT0xESU5HKQorICAgIGlmICh2YXJwID09ICZwX2xjcykKKyNlbmRpZgorICAgIHsKKwl0YWIgPSBsY3N0YWI7CisJZW50cmllcyA9IHNpemVvZihsY3N0YWIpIC8gc2l6ZW9mKHN0cnVjdCBjaGFyc3RhYik7CisgICAgfQorI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKEZFQVRfRk9MRElORykKKyAgICBlbHNlCisgICAgeworCXRhYiA9IGZpbGx0YWI7CisJZW50cmllcyA9IHNpemVvZihmaWxsdGFiKSAvIHNpemVvZihzdHJ1Y3QgY2hhcnN0YWIpOworICAgIH0KKyNlbmRpZgorCisgICAgLyogZmlyc3Qgcm91bmQ6IGNoZWNrIGZvciB2YWxpZCB2YWx1ZSwgc2Vjb25kIHJvdW5kOiBhc3NpZ24gdmFsdWVzICovCisgICAgZm9yIChyb3VuZCA9IDA7IHJvdW5kIDw9IDE7ICsrcm91bmQpCisgICAgeworCWlmIChyb3VuZCkKKwl7CisJICAgIC8qIEFmdGVyIGNoZWNraW5nIHRoYXQgdGhlIHZhbHVlIGlzIHZhbGlkOiBzZXQgZGVmYXVsdHM6IHNwYWNlIGZvcgorCSAgICAgKiAnZmlsbGNoYXJzJywgTlVMIGZvciAnbGlzdGNoYXJzJyAqLworCSAgICBmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgKytpKQorCQkqKHRhYltpXS5jcCkgPSAodmFycCA9PSAmcF9sY3MgPyBOVUwgOiAnICcpOworCSAgICBpZiAodmFycCA9PSAmcF9sY3MpCisJCWxjc190YWIxID0gTlVMOworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKEZFQVRfRk9MRElORykKKwkgICAgZWxzZQorCQlmaWxsX2RpZmYgPSAnLSc7CisjZW5kaWYKKwl9CisJcCA9ICp2YXJwOworCXdoaWxlICgqcCkKKwl7CisJICAgIGZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyArK2kpCisJICAgIHsKKwkJbGVuID0gKGludClTVFJMRU4odGFiW2ldLm5hbWUpOworCQlpZiAoU1RSTkNNUChwLCB0YWJbaV0ubmFtZSwgbGVuKSA9PSAwCisJCQkmJiBwW2xlbl0gPT0gJzonCisJCQkmJiBwW2xlbiArIDFdICE9IE5VTCkKKwkJeworCQkgICAgcyA9IHAgKyBsZW4gKyAxOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIGMxID0gbWJfcHRyMmNoYXJfYWR2KCZzKTsKKyNlbHNlCisJCSAgICBjMSA9ICpzKys7CisjZW5kaWYKKwkJICAgIGlmICh0YWJbaV0uY3AgPT0gJmxjc190YWIyKQorCQkgICAgeworCQkJaWYgKCpzID09IE5VTCkKKwkJCSAgICBjb250aW51ZTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQljMiA9IG1iX3B0cjJjaGFyX2Fkdigmcyk7CisjZWxzZQorCQkJYzIgPSAqcysrOworI2VuZGlmCisJCSAgICB9CisJCSAgICBpZiAoKnMgPT0gJywnIHx8ICpzID09IE5VTCkKKwkJICAgIHsKKwkJCWlmIChyb3VuZCkKKwkJCXsKKwkJCSAgICBpZiAodGFiW2ldLmNwID09ICZsY3NfdGFiMikKKwkJCSAgICB7CisJCQkJbGNzX3RhYjEgPSBjMTsKKwkJCQlsY3NfdGFiMiA9IGMyOworCQkJICAgIH0KKwkJCSAgICBlbHNlCisJCQkJKih0YWJbaV0uY3ApID0gYzE7CisKKwkJCX0KKwkJCXAgPSBzOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQorCisJICAgIGlmIChpID09IGVudHJpZXMpCisJCXJldHVybiBlX2ludmFyZzsKKwkgICAgaWYgKCpwID09ICcsJykKKwkJKytwOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsJLyogbm8gZXJyb3IgKi8KK30KKworI2lmZGVmIEZFQVRfU1RMX09QVAorLyoKKyAqIENoZWNrIHZhbGlkaXR5IG9mIG9wdGlvbnMgd2l0aCB0aGUgJ3N0YXR1c2xpbmUnIGZvcm1hdC4KKyAqIFJldHVybiBlcnJvciBtZXNzYWdlIG9yIE5VTEwuCisgKi8KKyAgICBjaGFyX3UgKgorY2hlY2tfc3RsX29wdGlvbihzKQorICAgIGNoYXJfdQkqczsKK3sKKyAgICBpbnQJCWl0ZW1jbnQgPSAwOworICAgIGludAkJZ3JvdXBkZXB0aCA9IDA7CisgICAgc3RhdGljIGNoYXJfdSAgIGVycmJ1Zls4MF07CisKKyAgICB3aGlsZSAoKnMgJiYgaXRlbWNudCA8IFNUTF9NQVhfSVRFTSkKKyAgICB7CisJLyogQ2hlY2sgZm9yIHZhbGlkIGtleXMgYWZ0ZXIgJSBzZXF1ZW5jZXMgKi8KKwl3aGlsZSAoKnMgJiYgKnMgIT0gJyUnKQorCSAgICBzKys7CisJaWYgKCEqcykKKwkgICAgYnJlYWs7CisJcysrOworCWlmICgqcyAhPSAnJScgJiYgKnMgIT0gJyknKQorCSAgICArK2l0ZW1jbnQ7CisJaWYgKCpzID09ICclJyB8fCAqcyA9PSBTVExfVFJVTkNNQVJLIHx8ICpzID09IFNUTF9NSURETEVNQVJLKQorCXsKKwkgICAgcysrOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKCpzID09ICcpJykKKwl7CisJICAgIHMrKzsKKwkgICAgaWYgKC0tZ3JvdXBkZXB0aCA8IDApCisJCWJyZWFrOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKCpzID09ICctJykKKwkgICAgcysrOworCXdoaWxlIChWSU1fSVNESUdJVCgqcykpCisJICAgIHMrKzsKKwlpZiAoKnMgPT0gU1RMX0hJR0hMSUdIVCkKKwkgICAgY29udGludWU7CisJaWYgKCpzID09ICcuJykKKwl7CisJICAgIHMrKzsKKwkgICAgd2hpbGUgKCpzICYmIFZJTV9JU0RJR0lUKCpzKSkKKwkJcysrOworCX0KKwlpZiAoKnMgPT0gJygnKQorCXsKKwkgICAgZ3JvdXBkZXB0aCsrOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKHZpbV9zdHJjaHIoU1RMX0FMTCwgKnMpID09IE5VTEwpCisJeworCSAgICByZXR1cm4gaWxsZWdhbF9jaGFyKGVycmJ1ZiwgKnMpOworCX0KKwlpZiAoKnMgPT0gJ3snKQorCXsKKwkgICAgcysrOworCSAgICB3aGlsZSAoKnMgIT0gJ30nICYmICpzKQorCQlzKys7CisJICAgIGlmICgqcyAhPSAnfScpCisJCXJldHVybiAoY2hhcl91ICopTl8oIkU1NDA6IFVuY2xvc2VkIGV4cHJlc3Npb24gc2VxdWVuY2UiKTsKKwl9CisgICAgfQorICAgIGlmIChpdGVtY250ID49IFNUTF9NQVhfSVRFTSkKKwlyZXR1cm4gKGNoYXJfdSAqKU5fKCJFNTQxOiB0b28gbWFueSBpdGVtcyIpOworICAgIGlmIChncm91cGRlcHRoICE9IDApCisJcmV0dXJuIChjaGFyX3UgKilOXygiRTU0MjogdW5iYWxhbmNlZCBncm91cHMiKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKy8qCisgKiBFeHRyYWN0IHRoZSBpdGVtcyBpbiB0aGUgJ2NsaXBib2FyZCcgb3B0aW9uIGFuZCBzZXQgZ2xvYmFsIHZhbHVlcy4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorY2hlY2tfY2xpcGJvYXJkX29wdGlvbigpCit7CisgICAgaW50CQluZXdfdW5uYW1lZCA9IEZBTFNFOworICAgIGludAkJbmV3X2F1dG9zZWxlY3QgPSBGQUxTRTsKKyAgICBpbnQJCW5ld19hdXRvc2VsZWN0bWwgPSBGQUxTRTsKKyAgICByZWdwcm9nX1QJKm5ld19leGNsdWRlX3Byb2cgPSBOVUxMOworICAgIGNoYXJfdQkqZXJybXNnID0gTlVMTDsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBmb3IgKHAgPSBwX2NiOyAqcCAhPSBOVUw7ICkKKyAgICB7CisJaWYgKFNUUk5DTVAocCwgInVubmFtZWQiLCA3KSA9PSAwICYmIChwWzddID09ICcsJyB8fCBwWzddID09IE5VTCkpCisJeworCSAgICBuZXdfdW5uYW1lZCA9IFRSVUU7CisJICAgIHAgKz0gNzsKKwl9CisJZWxzZSBpZiAoU1RSTkNNUChwLCAiYXV0b3NlbGVjdCIsIDEwKSA9PSAwCisJCQkJCSYmIChwWzEwXSA9PSAnLCcgfHwgcFsxMF0gPT0gTlVMKSkKKwl7CisJICAgIG5ld19hdXRvc2VsZWN0ID0gVFJVRTsKKwkgICAgcCArPSAxMDsKKwl9CisJZWxzZSBpZiAoU1RSTkNNUChwLCAiYXV0b3NlbGVjdG1sIiwgMTIpID09IDAKKwkJCQkJJiYgKHBbMTJdID09ICcsJyB8fCBwWzEyXSA9PSBOVUwpKQorCXsKKwkgICAgbmV3X2F1dG9zZWxlY3RtbCA9IFRSVUU7CisJICAgIHAgKz0gMTI7CisJfQorCWVsc2UgaWYgKFNUUk5DTVAocCwgImV4Y2x1ZGU6IiwgOCkgPT0gMCAmJiBuZXdfZXhjbHVkZV9wcm9nID09IE5VTEwpCisJeworCSAgICBwICs9IDg7CisJICAgIG5ld19leGNsdWRlX3Byb2cgPSB2aW1fcmVnY29tcChwLCBSRV9NQUdJQyk7CisJICAgIGlmIChuZXdfZXhjbHVkZV9wcm9nID09IE5VTEwpCisJCWVycm1zZyA9IGVfaW52YXJnOworCSAgICBicmVhazsKKwl9CisJZWxzZQorCXsKKwkgICAgZXJybXNnID0gZV9pbnZhcmc7CisJICAgIGJyZWFrOworCX0KKwlpZiAoKnAgPT0gJywnKQorCSAgICArK3A7CisgICAgfQorICAgIGlmIChlcnJtc2cgPT0gTlVMTCkKKyAgICB7CisJY2xpcF91bm5hbWVkID0gbmV3X3VubmFtZWQ7CisJY2xpcF9hdXRvc2VsZWN0ID0gbmV3X2F1dG9zZWxlY3Q7CisJY2xpcF9hdXRvc2VsZWN0bWwgPSBuZXdfYXV0b3NlbGVjdG1sOworCXZpbV9mcmVlKGNsaXBfZXhjbHVkZV9wcm9nKTsKKwljbGlwX2V4Y2x1ZGVfcHJvZyA9IG5ld19leGNsdWRlX3Byb2c7CisgICAgfQorICAgIGVsc2UKKwl2aW1fZnJlZShuZXdfZXhjbHVkZV9wcm9nKTsKKworICAgIHJldHVybiBlcnJtc2c7Cit9CisjZW5kaWYKKworLyoKKyAqIFNldCB0aGUgdmFsdWUgb2YgYSBib29sZWFuIG9wdGlvbiwgYW5kIHRha2UgY2FyZSBvZiBzaWRlIGVmZmVjdHMuCisgKiBSZXR1cm5zIE5VTEwgZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGFuIGVycm9yLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitzZXRfYm9vbF9vcHRpb24ob3B0X2lkeCwgdmFycCwgdmFsdWUsIG9wdF9mbGFncykKKyAgICBpbnQJCW9wdF9pZHg7CQkvKiBpbmRleCBpbiBvcHRpb25zW10gdGFibGUgKi8KKyAgICBjaGFyX3UJKnZhcnA7CQkJLyogcG9pbnRlciB0byB0aGUgb3B0aW9uIHZhcmlhYmxlICovCisgICAgaW50CQl2YWx1ZTsJCQkvKiBuZXcgdmFsdWUgKi8KKyAgICBpbnQJCW9wdF9mbGFnczsJCS8qIE9QVF9MT0NBTCBhbmQvb3IgT1BUX0dMT0JBTCAqLworeworICAgIGludAkJb2xkX3ZhbHVlID0gKihpbnQgKil2YXJwOworCisjaWZkZWYgRkVBVF9HVUkKKyAgICBuZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworI2VuZGlmCisKKyAgICAvKiBEaXNhbGxvdyBjaGFuZ2luZyBzb21lIG9wdGlvbnMgZnJvbSBzZWN1cmUgbW9kZSAqLworICAgIGlmICgoc2VjdXJlCisjaWZkZWYgSEFWRV9TQU5EQk9YCisJCXx8IHNhbmRib3ggIT0gMAorI2VuZGlmCisJCSkgJiYgKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiBQX1NFQ1VSRSkpCisJcmV0dXJuIGVfc2VjdXJlOworCisgICAgKihpbnQgKil2YXJwID0gdmFsdWU7CSAgICAvKiBzZXQgdGhlIG5ldyB2YWx1ZSAqLworI2lmZGVmIEZFQVRfRVZBTAorICAgIC8qIFJlbWVtYmVyIHdoZXJlIHRoZSBvcHRpb24gd2FzIHNldC4gKi8KKyAgICBvcHRpb25zW29wdF9pZHhdLnNjcmlwdElEID0gY3VycmVudF9TSUQ7CisjZW5kaWYKKworICAgIC8qIE1heSBzZXQgZ2xvYmFsIHZhbHVlIGZvciBsb2NhbCBvcHRpb24uICovCisgICAgaWYgKChvcHRfZmxhZ3MgJiAoT1BUX0xPQ0FMIHwgT1BUX0dMT0JBTCkpID09IDApCisJKihpbnQgKilnZXRfdmFycF9zY29wZSgmKG9wdGlvbnNbb3B0X2lkeF0pLCBPUFRfR0xPQkFMKSA9IHZhbHVlOworCisgICAgLyoKKyAgICAgKiBIYW5kbGUgc2lkZSBlZmZlY3RzIG9mIGNoYW5naW5nIGEgYm9vbCBvcHRpb24uCisgICAgICovCisKKyAgICAvKiAnY29tcGF0aWJsZScgKi8KKyAgICBpZiAoKGludCAqKXZhcnAgPT0gJnBfY3ApCisgICAgeworCWNvbXBhdGlibGVfc2V0KCk7CisgICAgfQorCisgICAgLyogd2hlbiAncmVhZG9ubHknIGlzIHJlc2V0IGdsb2JhbGx5LCBhbHNvIHJlc2V0IHJlYWRvbmx5bW9kZSAqLworICAgIGVsc2UgaWYgKChpbnQgKil2YXJwID09ICZjdXJidWYtPmJfcF9ybykKKyAgICB7CisJaWYgKCFjdXJidWYtPmJfcF9ybyAmJiAob3B0X2ZsYWdzICYgT1BUX0xPQ0FMKSA9PSAwKQorCSAgICByZWFkb25seW1vZGUgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX1RJVExFCisJbmVlZF9tYWtldGl0bGUgPSBUUlVFOworI2VuZGlmCisgICAgfQorCisjaWZkZWYgRkVBVF9USVRMRQorICAgIC8qIHdoZW4gJ21vZGlmaWFibGUnIGlzIGNoYW5nZWQsIHJlZHJhdyB0aGUgd2luZG93IHRpdGxlICovCisgICAgZWxzZSBpZiAoKGludCAqKXZhcnAgPT0gJmN1cmJ1Zi0+Yl9wX21hKQorCW5lZWRfbWFrZXRpdGxlID0gVFJVRTsKKyAgICAvKiB3aGVuICdlbmRvZmxpbmUnIGlzIGNoYW5nZWQsIHJlZHJhdyB0aGUgd2luZG93IHRpdGxlICovCisgICAgZWxzZSBpZiAoKGludCAqKXZhcnAgPT0gJmN1cmJ1Zi0+Yl9wX2VvbCkKKwluZWVkX21ha2V0aXRsZSA9IFRSVUU7CisjZW5kaWYKKworICAgIC8qIHdoZW4gJ2JpbicgaXMgc2V0IGFsc28gc2V0IHNvbWUgb3RoZXIgb3B0aW9ucyAqLworICAgIGVsc2UgaWYgKChpbnQgKil2YXJwID09ICZjdXJidWYtPmJfcF9iaW4pCisgICAgeworCXNldF9vcHRpb25zX2JpbihvbGRfdmFsdWUsIGN1cmJ1Zi0+Yl9wX2Jpbiwgb3B0X2ZsYWdzKTsKKyNpZmRlZiBGRUFUX1RJVExFCisJbmVlZF9tYWtldGl0bGUgPSBUUlVFOworI2VuZGlmCisgICAgfQorCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgLyogd2hlbiAnYnVmbGlzdGVkJyBjaGFuZ2VzLCB0cmlnZ2VyIGF1dG9jb21tYW5kcyAqLworICAgIGVsc2UgaWYgKChpbnQgKil2YXJwID09ICZjdXJidWYtPmJfcF9ibCAmJiBvbGRfdmFsdWUgIT0gY3VyYnVmLT5iX3BfYmwpCisgICAgeworCWFwcGx5X2F1dG9jbWRzKGN1cmJ1Zi0+Yl9wX2JsID8gRVZFTlRfQlVGQUREIDogRVZFTlRfQlVGREVMRVRFLAorCQkJCQkJICAgIE5VTEwsIE5VTEwsIFRSVUUsIGN1cmJ1Zik7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiB3aGVuICdzd2YnIGlzIHNldCwgY3JlYXRlIHN3YXBmaWxlLCB3aGVuIHJlc2V0IHJlbW92ZSBzd2FwZmlsZSAqLworICAgIGVsc2UgaWYgKChpbnQgKil2YXJwID09ICZjdXJidWYtPmJfcF9zd2YpCisgICAgeworCWlmIChjdXJidWYtPmJfcF9zd2YgJiYgcF91YykKKwkgICAgbWxfb3Blbl9maWxlKGN1cmJ1Zik7CQkvKiBjcmVhdGUgdGhlIHN3YXAgZmlsZSAqLworCWVsc2UKKwkgICAgbWZfY2xvc2VfZmlsZShjdXJidWYsIFRSVUUpOwkvKiByZW1vdmUgdGhlIHN3YXAgZmlsZSAqLworICAgIH0KKworICAgIC8qIHdoZW4gJ3RlcnNlJyBpcyBzZXQgY2hhbmdlICdzaG9ydG1lc3MnICovCisgICAgZWxzZSBpZiAoKGludCAqKXZhcnAgPT0gJnBfdGVyc2UpCisgICAgeworCWNoYXJfdQkqcDsKKworCXAgPSB2aW1fc3RyY2hyKHBfc2htLCBTSE1fU0VBUkNIKTsKKworCS8qIGluc2VydCAncycgaW4gcF9zaG0gKi8KKwlpZiAocF90ZXJzZSAmJiBwID09IE5VTEwpCisJeworCSAgICBTVFJDUFkoSU9idWZmLCBwX3NobSk7CisJICAgIFNUUkNBVChJT2J1ZmYsICJzIik7CisJICAgIHNldF9zdHJpbmdfb3B0aW9uX2RpcmVjdCgoY2hhcl91ICopInNobSIsIC0xLCBJT2J1ZmYsIE9QVF9GUkVFKTsKKwl9CisJLyogcmVtb3ZlICdzJyBmcm9tIHBfc2htICovCisJZWxzZSBpZiAoIXBfdGVyc2UgJiYgcCAhPSBOVUxMKQorCSAgICBtY2hfbWVtbW92ZShwLCBwICsgMSwgU1RSTEVOKHApKTsKKyAgICB9CisKKyAgICAvKiB3aGVuICdwYXN0ZScgaXMgc2V0IG9yIHJlc2V0IGFsc28gY2hhbmdlIG90aGVyIG9wdGlvbnMgKi8KKyAgICBlbHNlIGlmICgoaW50ICopdmFycCA9PSAmcF9wYXN0ZSkKKyAgICB7CisJcGFzdGVfb3B0aW9uX2NoYW5nZWQoKTsKKyAgICB9CisKKyAgICAvKiB3aGVuICdpbnNlcnRtb2RlJyBpcyBzZXQgZnJvbSBhbiBhdXRvY29tbWFuZCBuZWVkIHRvIGRvIHdvcmsgaGVyZSAqLworICAgIGVsc2UgaWYgKChpbnQgKil2YXJwID09ICZwX2ltKQorICAgIHsKKwlpZiAocF9pbSkKKwl7CisJICAgIGlmICgoU3RhdGUgJiBJTlNFUlQpID09IDApCisJCW5lZWRfc3RhcnRfaW5zZXJ0bW9kZSA9IFRSVUU7CisJICAgIHN0b3BfaW5zZXJ0X21vZGUgPSBGQUxTRTsKKwl9CisJZWxzZQorCXsKKwkgICAgbmVlZF9zdGFydF9pbnNlcnRtb2RlID0gRkFMU0U7CisJICAgIHN0b3BfaW5zZXJ0X21vZGUgPSBUUlVFOworCSAgICBpZiAocF9zbWQgJiYgcmVzdGFydF9lZGl0ICE9IDApCisJCWNsZWFyX2NtZGxpbmUgPSBUUlVFOwkvKiByZW1vdmUgIihpbnNlcnQpIiAqLworCSAgICByZXN0YXJ0X2VkaXQgPSAwOworCX0KKyAgICB9CisKKyAgICAvKiB3aGVuICdpZ25vcmVjYXNlJyBpcyBzZXQgb3IgcmVzZXQgYW5kICdobHNlYXJjaCcgaXMgc2V0LCByZWRyYXcgKi8KKyAgICBlbHNlIGlmICgoaW50ICopdmFycCA9PSAmcF9pYyAmJiBwX2hscykKKyAgICB7CisJcmVkcmF3X2FsbF9sYXRlcihOT1RfVkFMSUQpOworICAgIH0KKworI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisgICAgLyogd2hlbiAnaGxzZWFyY2gnIGlzIHNldCBvciByZXNldDogcmVzZXQgbm9faGxzZWFyY2ggKi8KKyAgICBlbHNlIGlmICgoaW50ICopdmFycCA9PSAmcF9obHMpCisgICAgeworCW5vX2hsc2VhcmNoID0gRkFMU0U7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1NDUk9MTEJJTkQKKyAgICAvKiB3aGVuICdzY3JvbGxiaW5kJyBpcyBzZXQ6IHNuYXBzaG90IHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIGF2b2lkIGEganVtcAorICAgICAqIGF0IHRoZSBlbmQgb2Ygbm9ybWFsX2NtZCgpICovCisgICAgZWxzZSBpZiAoKGludCAqKXZhcnAgPT0gJmN1cndpbi0+d19wX3NjYikKKyAgICB7CisJaWYgKGN1cndpbi0+d19wX3NjYikKKwkgICAgZG9fY2hlY2tfc2Nyb2xsYmluZChGQUxTRSk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorICAgIC8qIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSB3aW5kb3cgd2l0aCAncHJldmlld3dpbmRvdycgc2V0LiAqLworICAgIGVsc2UgaWYgKChpbnQgKil2YXJwID09ICZjdXJ3aW4tPndfcF9wdncpCisgICAgeworCWlmIChjdXJ3aW4tPndfcF9wdncpCisJeworCSAgICB3aW5fVAkqd2luOworCisJICAgIGZvciAod2luID0gZmlyc3R3aW47IHdpbiAhPSBOVUxMOyB3aW4gPSB3aW4tPndfbmV4dCkKKwkJaWYgKHdpbi0+d19wX3B2dyAmJiB3aW4gIT0gY3Vyd2luKQorCQl7CisJCSAgICBjdXJ3aW4tPndfcF9wdncgPSBGQUxTRTsKKwkJICAgIHJldHVybiAoY2hhcl91ICopTl8oIkU1OTA6IEEgcHJldmlldyB3aW5kb3cgYWxyZWFkeSBleGlzdHMiKTsKKwkJfQorCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qIHdoZW4gJ3RleHRtb2RlJyBpcyBzZXQgb3IgcmVzZXQgYWxzbyBjaGFuZ2UgJ2ZpbGVmb3JtYXQnICovCisgICAgZWxzZSBpZiAoKGludCAqKXZhcnAgPT0gJmN1cmJ1Zi0+Yl9wX3R4KQorICAgIHsKKwlzZXRfZmlsZWZvcm1hdChjdXJidWYtPmJfcF90eCA/IEVPTF9ET1MgOiBFT0xfVU5JWCwgb3B0X2ZsYWdzKTsKKyAgICB9CisKKyAgICAvKiB3aGVuICd0ZXh0YXV0bycgaXMgc2V0IG9yIHJlc2V0IGFsc28gY2hhbmdlICdmaWxlZm9ybWF0cycgKi8KKyAgICBlbHNlIGlmICgoaW50ICopdmFycCA9PSAmcF90YSkKKyAgICB7CisJc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0KChjaGFyX3UgKikiZmZzIiwgLTEsCisJCQkJIHBfdGEgPyAoY2hhcl91ICopREZMVF9GRlNfVklNIDogKGNoYXJfdSAqKSIiLAorCQkJCQkJCU9QVF9GUkVFIHwgb3B0X2ZsYWdzKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdoZW4gJ2xpc3AnIG9wdGlvbiBjaGFuZ2VzIGluY2x1ZGUvZXhjbHVkZSAnLScgaW4KKyAgICAgKiBrZXl3b3JkIGNoYXJhY3RlcnMuCisgICAgICovCisjaWZkZWYgRkVBVF9MSVNQCisgICAgZWxzZSBpZiAodmFycCA9PSAoY2hhcl91ICopJihjdXJidWYtPmJfcF9saXNwKSkKKyAgICB7CisJKHZvaWQpYnVmX2luaXRfY2hhcnRhYihjdXJidWYsIEZBTFNFKTsJICAgIC8qIGlnbm9yZSBlcnJvcnMgKi8KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVElUTEUKKyAgICAvKiB3aGVuICd0aXRsZScgY2hhbmdlZCwgbWF5IG5lZWQgdG8gY2hhbmdlIHRoZSB0aXRsZTsgc2FtZSBmb3IgJ2ljb24nICovCisgICAgZWxzZSBpZiAoKGludCAqKXZhcnAgPT0gJnBfdGl0bGUpCisgICAgeworCWRpZF9zZXRfdGl0bGUoRkFMU0UpOworICAgIH0KKworICAgIGVsc2UgaWYgKChpbnQgKil2YXJwID09ICZwX2ljb24pCisgICAgeworCWRpZF9zZXRfdGl0bGUoVFJVRSk7CisgICAgfQorI2VuZGlmCisKKyAgICBlbHNlIGlmICgoaW50ICopdmFycCA9PSAmY3VyYnVmLT5iX2NoYW5nZWQpCisgICAgeworCWlmICghdmFsdWUpCisJICAgIHNhdmVfZmlsZV9mZihjdXJidWYpOwkvKiBCdWZmZXIgaXMgdW5jaGFuZ2VkICovCisjaWZkZWYgRkVBVF9USVRMRQorCW5lZWRfbWFrZXRpdGxlID0gVFJVRTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQVVUT0NNRAorCW1vZGlmaWVkX3dhc19zZXQgPSB2YWx1ZTsKKyNlbmRpZgorICAgIH0KKworI2lmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorICAgIGVsc2UgaWYgKChpbnQgKil2YXJwID09ICZwX3NzbCkKKyAgICB7CisJaWYgKHBfc3NsKQorCXsKKwkgICAgcHNlcGMgPSAnLyc7CisJICAgIHBzZXBjTiA9ICdcXCc7CisJICAgIHBzZXBzWzBdID0gJy8nOworCSAgICBwc2Vwc05bMF0gPSAnXFwnOworCX0KKwllbHNlCisJeworCSAgICBwc2VwYyA9ICdcXCc7CisJICAgIHBzZXBjTiA9ICcvJzsKKwkgICAgcHNlcHNbMF0gPSAnXFwnOworCSAgICBwc2Vwc05bMF0gPSAnLyc7CisJfQorCisJLyogbmVlZCB0byBhZGp1c3QgdGhlIGZpbGUgbmFtZSBhcmd1bWVudHMgYW5kIGJ1ZmZlciBuYW1lcy4gKi8KKwlidWZsaXN0X3NsYXNoX2FkanVzdCgpOworCWFsaXN0X3NsYXNoX2FkanVzdCgpOworIyBpZmRlZiBGRUFUX0VWQUwKKwlzY3JpcHRuYW1lc19zbGFzaF9hZGp1c3QoKTsKKyMgZW5kaWYKKyAgICB9CisjZW5kaWYKKworICAgIC8qIElmICd3cmFwJyBpcyBzZXQsIHNldCB3X2xlZnRjb2wgdG8gemVyby4gKi8KKyAgICBlbHNlIGlmICgoaW50ICopdmFycCA9PSAmY3Vyd2luLT53X3Bfd3JhcCkKKyAgICB7CisJaWYgKGN1cndpbi0+d19wX3dyYXApCisJICAgIGN1cndpbi0+d19sZWZ0Y29sID0gMDsKKyAgICB9CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBlbHNlIGlmICgoaW50ICopdmFycCA9PSAmcF9lYSkKKyAgICB7CisJaWYgKHBfZWEgJiYgIW9sZF92YWx1ZSkKKwkgICAgd2luX2VxdWFsKGN1cndpbiwgRkFMU0UsIDApOworICAgIH0KKyNlbmRpZgorCisgICAgZWxzZSBpZiAoKGludCAqKXZhcnAgPT0gJnBfd2l2KQorICAgIHsKKwkvKgorCSAqIFdoZW4gJ3dlaXJkaW52ZXJ0JyBjaGFuZ2VkLCBzZXQvcmVzZXQgJ3RfeHMnLgorCSAqIFRoZW4gc2V0ICd3ZWlyZGludmVydCcgYWNjb3JkaW5nIHRvIHZhbHVlIG9mICd0X3hzJy4KKwkgKi8KKwlpZiAocF93aXYgJiYgIW9sZF92YWx1ZSkKKwkgICAgVF9YUyA9IChjaGFyX3UgKikieSI7CisJZWxzZSBpZiAoIXBfd2l2ICYmIG9sZF92YWx1ZSkKKwkgICAgVF9YUyA9IGVtcHR5X29wdGlvbjsKKwlwX3dpdiA9ICgqVF9YUyAhPSBOVUwpOworICAgIH0KKworI2lmIGRlZmluZWQoRkVBVF9CRVZBTCkgJiYgKGRlZmluZWQoRkVBVF9TVU5fV09SS1NIT1ApIFwKKwl8fCBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykpCisgICAgZWxzZSBpZiAoKGludCAqKXZhcnAgPT0gJnBfYmV2YWwpCisgICAgeworCWV4dGVybiBCYWxsb29uRXZhbAkqYmFsbG9vbkV2YWw7CisKKwlpZiAocF9iZXZhbCA9PSBUUlVFKQorCSAgICBndWlfbWNoX2VuYWJsZV9iZXZhbF9hcmVhKGJhbGxvb25FdmFsKTsKKwllbHNlCisJICAgIGd1aV9tY2hfZGlzYWJsZV9iZXZhbF9hcmVhKGJhbGxvb25FdmFsKTsKKyAgICB9CisKKyAgICBlbHNlIGlmICgoaW50ICopdmFycCA9PSAmcF9hY2QpCisgICAgeworCWlmIChwX2FjZCAmJiBjdXJidWYtPmJfZmZuYW1lICE9IE5VTEwKKwkJCQkgICAgICYmIHZpbV9jaGRpcmZpbGUoY3VyYnVmLT5iX2ZmbmFtZSkgPT0gT0spCisJICAgIHNob3J0ZW5fZm5hbWVzKFRSVUUpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9ESUZGCisgICAgLyogJ2RpZmYnICovCisgICAgZWxzZSBpZiAoKGludCAqKXZhcnAgPT0gJmN1cndpbi0+d19wX2RpZmYpCisgICAgeworCXdpbl9UCSp3cDsKKworCWlmICghY3Vyd2luLT53X3BfZGlmZikKKwl7CisJICAgIC8qIFdoZW4gdGhlcmUgaXMgbm8gd2luZG93IHNob3dpbmcgYSBkaWZmIGZvciB0aGlzIGJ1ZmZlciwgcmVtb3ZlCisJICAgICAqIGl0IGZyb20gdGhlIGRpZmZzLiAqLworCSAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwkJaWYgKHdwLT53X2J1ZmZlciA9PSBjdXJ3aW4tPndfYnVmZmVyICYmIHdwLT53X3BfZGlmZikKKwkJICAgIGJyZWFrOworCSAgICBpZiAod3AgPT0gTlVMTCkKKwkJZGlmZl9idWZfZGVsZXRlKGN1cndpbi0+d19idWZmZXIpOworCX0KKwllbHNlCisJICAgIGRpZmZfYnVmX2FkZChjdXJ3aW4tPndfYnVmZmVyKTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwlpZiAoZm9sZG1ldGhvZElzRGlmZihjdXJ3aW4pKQorCSAgICBmb2xkVXBkYXRlQWxsKGN1cndpbik7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFVTRV9JTV9DT05UUk9MCisgICAgLyogJ2ltZGlzYWJsZScgKi8KKyAgICBlbHNlIGlmICgoaW50ICopdmFycCA9PSAmcF9pbWRpc2FibGUpCisgICAgeworCS8qIE9ubHkgZGUtYWN0aXZhdGUgaXQgaGVyZSwgaXQgd2lsbCBiZSBlbmFibGVkIHdoZW4gY2hhbmdpbmcgbW9kZS4gKi8KKwlpZiAocF9pbWRpc2FibGUpCisJICAgIGltX3NldF9hY3RpdmUoRkFMU0UpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9GS01BUAorICAgIGVsc2UgaWYgKChpbnQgKil2YXJwID09ICZwX2FsdGtleW1hcCkKKyAgICB7CisJaWYgKG9sZF92YWx1ZSAhPSBwX2FsdGtleW1hcCkKKwl7CisJICAgIGlmICghcF9hbHRrZXltYXApCisJICAgIHsKKwkJcF9oa21hcCA9IHBfZmttYXA7CisJCXBfZmttYXAgPSAwOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlwX2ZrbWFwID0gcF9oa21hcDsKKwkJcF9oa21hcCA9IDA7CisJICAgIH0KKwkgICAgKHZvaWQpaW5pdF9jaGFydGFiKCk7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSW4gY2FzZSBzb21lIHNlY29uZCBsYW5ndWFnZSBrZXltYXBwaW5nIG9wdGlvbnMgaGF2ZSBjaGFuZ2VkLCBjaGVjaworICAgICAqIGFuZCBjb3JyZWN0IHRoZSBzZXR0aW5nIGluIGEgY29uc2lzdGVudCB3YXkuCisgICAgICovCisKKyAgICAvKgorICAgICAqIElmIGhrbWFwIG9yIGZrbWFwIGFyZSBzZXQsIHJlc2V0IEFyYWJpYyBrZXltYXBwaW5nLgorICAgICAqLworICAgIGlmICgocF9oa21hcCB8fCBwX2ZrbWFwKSAmJiBwX2FsdGtleW1hcCkKKyAgICB7CisJcF9hbHRrZXltYXAgPSBwX2ZrbWFwOworIyBpZmRlZiBGRUFUX0FSQUJJQworCWN1cndpbi0+d19wX2FyYWIgPSBGQUxTRTsKKyMgZW5kaWYKKwkodm9pZClpbml0X2NoYXJ0YWIoKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIGhrbWFwIHNldCwgcmVzZXQgRmFyc2kga2V5bWFwcGluZy4KKyAgICAgKi8KKyAgICBpZiAocF9oa21hcCAmJiBwX2FsdGtleW1hcCkKKyAgICB7CisJcF9hbHRrZXltYXAgPSAwOworCXBfZmttYXAgPSAwOworIyBpZmRlZiBGRUFUX0FSQUJJQworCWN1cndpbi0+d19wX2FyYWIgPSBGQUxTRTsKKyMgZW5kaWYKKwkodm9pZClpbml0X2NoYXJ0YWIoKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIGZrbWFwIHNldCwgcmVzZXQgSGVicmV3IGtleW1hcHBpbmcuCisgICAgICovCisgICAgaWYgKHBfZmttYXAgJiYgIXBfYWx0a2V5bWFwKQorICAgIHsKKwlwX2FsdGtleW1hcCA9IDE7CisJcF9oa21hcCA9IDA7CisjIGlmZGVmIEZFQVRfQVJBQklDCisJY3Vyd2luLT53X3BfYXJhYiA9IEZBTFNFOworIyBlbmRpZgorCSh2b2lkKWluaXRfY2hhcnRhYigpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9BUkFCSUMKKyAgICBpZiAoKGludCAqKXZhcnAgPT0gJmN1cndpbi0+d19wX2FyYWIpCisgICAgeworCWlmIChjdXJ3aW4tPndfcF9hcmFiKQorCXsKKwkgICAgLyoKKwkgICAgICogJ2FyYWJpYycgaXMgc2V0LCBoYW5kbGUgdmFyaW91cyBzdWItc2V0dGluZ3MuCisJICAgICAqLworCSAgICBpZiAoIXBfdGJpZGkpCisJICAgIHsKKwkJLyogc2V0IHJpZ2h0bGVmdCBtb2RlICovCisJCWlmICghY3Vyd2luLT53X3BfcmwpCisJCXsKKwkJICAgIGN1cndpbi0+d19wX3JsID0gVFJVRTsKKwkJICAgIGNoYW5nZWRfd2luZG93X3NldHRpbmcoKTsKKwkJfQorCisJCS8qIEVuYWJsZSBBcmFiaWMgc2hhcGluZyAobWFqb3IgcGFydCBvZiB3aGF0IEFyYWJpYyByZXF1aXJlcykgKi8KKwkJaWYgKCFwX2Fyc2hhcGUpCisJCXsKKwkJICAgIHBfYXJzaGFwZSA9IFRSVUU7CisJCSAgICByZWRyYXdfbGF0ZXJfY2xlYXIoKTsKKwkJfQorCSAgICB9CisKKwkgICAgLyogQXJhYmljIHJlcXVpcmVzIGEgdXRmLTggZW5jb2RpbmcsIGluZm9ybSB0aGUgdXNlciBpZiBpdHMgbm90CisJICAgICAqIHNldC4gKi8KKwkgICAgaWYgKFNUUkNNUChwX2VuYywgInV0Zi04IikgIT0gMCkKKwkJTVNHX0FUVFIoXygiVzE3OiBBcmFiaWMgcmVxdWlyZXMgVVRGLTgsIGRvICc6c2V0IGVuY29kaW5nPXV0Zi04JyIpLAorCQkJaGxfYXR0cihITEZfVykpOworCisjIGlmZGVmIEZFQVRfTUJZVEUKKwkgICAgLyogc2V0ICdkZWxjb21iaW5lJyAqLworCSAgICBwX2RlY28gPSBUUlVFOworIyBlbmRpZgorCisjIGlmZGVmIEZFQVRfS0VZTUFQCisJICAgIC8qIEZvcmNlLXNldCB0aGUgbmVjZXNzYXJ5IGtleW1hcCBmb3IgYXJhYmljICovCisJICAgIHNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJrZXltYXAiLCAwTCwgKGNoYXJfdSAqKSJhcmFiaWMiLAorCQkJCQkJCQkgICBPUFRfTE9DQUwpOworIyBlbmRpZgorIyBpZmRlZiBGRUFUX0ZLTUFQCisJICAgIHBfYWx0a2V5bWFwID0gMDsKKwkgICAgcF9oa21hcCA9IDA7CisJICAgIHBfZmttYXAgPSAwOworCSAgICAodm9pZClpbml0X2NoYXJ0YWIoKTsKKyMgZW5kaWYKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogJ2FyYWJpYycgaXMgcmVzZXQsIGhhbmRsZSB2YXJpb3VzIHN1Yi1zZXR0aW5ncy4KKwkgICAgICovCisJICAgIGlmICghcF90YmlkaSkKKwkgICAgeworCQkvKiByZXNldCByaWdodGxlZnQgbW9kZSAqLworCQlpZiAoY3Vyd2luLT53X3BfcmwpCisJCXsKKwkJICAgIGN1cndpbi0+d19wX3JsID0gRkFMU0U7CisJCSAgICBjaGFuZ2VkX3dpbmRvd19zZXR0aW5nKCk7CisJCX0KKworCQkvKiAnYXJhYmljc2hhcGUnIGlzbid0IHJlc2V0LCBpdCBpcyBhIGdsb2JhbCBvcHRpb24gYW5kCisJCSAqIGFub3RoZXIgd2luZG93IG1heSBzdGlsbCBuZWVkIGl0ICJvbiIuICovCisJICAgIH0KKworCSAgICAvKiAnZGVsY29tYmluZScgaXNuJ3QgcmVzZXQsIGl0IGlzIGEgZ2xvYmFsIG9wdGlvbiBhbmQgYW5vdGhlcgorCSAgICAgKiB3aW5kb3cgbWF5IHN0aWxsIHdhbnQgaXQgIm9uIi4gKi8KKworIyBpZmRlZiBGRUFUX0tFWU1BUAorCSAgICAvKiBSZXZlcnQgdG8gdGhlIGRlZmF1bHQga2V5bWFwICovCisJICAgIGN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0ID0gQl9JTU9ERV9OT05FOworCSAgICBjdXJidWYtPmJfcF9pbXNlYXJjaCA9IEJfSU1PREVfVVNFX0lOU0VSVDsKKyMgZW5kaWYKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIEVuZCBvZiBoYW5kbGluZyBzaWRlIGVmZmVjdHMgZm9yIGJvb2wgb3B0aW9ucy4KKyAgICAgKi8KKworICAgIG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgfD0gUF9XQVNfU0VUOworCisgICAgY29tcF9jb2woKTsJCQkgICAgLyogaW4gY2FzZSAncnVsZXInIG9yICdzaG93Y21kJyBjaGFuZ2VkICovCisgICAgaWYgKGN1cndpbi0+d19jdXJzd2FudCAhPSBNQVhDT0wpCisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7ICAvKiBpbiBjYXNlICdsaXN0JyBjaGFuZ2VkICovCisgICAgY2hlY2tfcmVkcmF3KG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MpOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBTZXQgdGhlIHZhbHVlIG9mIGEgbnVtYmVyIG9wdGlvbiwgYW5kIHRha2UgY2FyZSBvZiBzaWRlIGVmZmVjdHMuCisgKiBSZXR1cm5zIE5VTEwgZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGFuIGVycm9yLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitzZXRfbnVtX29wdGlvbihvcHRfaWR4LCB2YXJwLCB2YWx1ZSwgZXJyYnVmLCBvcHRfZmxhZ3MpCisgICAgaW50CQlvcHRfaWR4OwkJLyogaW5kZXggaW4gb3B0aW9uc1tdIHRhYmxlICovCisgICAgY2hhcl91CSp2YXJwOwkJCS8qIHBvaW50ZXIgdG8gdGhlIG9wdGlvbiB2YXJpYWJsZSAqLworICAgIGxvbmcJdmFsdWU7CQkJLyogbmV3IHZhbHVlICovCisgICAgY2hhcl91CSplcnJidWY7CQkvKiBidWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzICovCisgICAgaW50CQlvcHRfZmxhZ3M7CQkvKiBPUFRfTE9DQUwsIE9QVF9HTE9CQUwgYW5kCisJCQkJCSAgIE9QVF9NT0RFTElORSAqLworeworICAgIGNoYXJfdQkqZXJybXNnID0gTlVMTDsKKyAgICBsb25nCW9sZF92YWx1ZSA9ICoobG9uZyAqKXZhcnA7CisgICAgbG9uZwlvbGRfUm93cyA9IFJvd3M7CS8qIHJlbWVtYmVyIG9sZCBSb3dzICovCisgICAgbG9uZwlvbGRfQ29sdW1ucyA9IENvbHVtbnM7CS8qIHJlbWVtYmVyIG9sZCBDb2x1bW5zICovCisgICAgbG9uZwkqcHAgPSAobG9uZyAqKXZhcnA7CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIG5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKworICAgICpwcCA9IHZhbHVlOworI2lmZGVmIEZFQVRfRVZBTAorICAgIC8qIFJlbWVtYmVyIHdoZXJlIHRoZSBvcHRpb24gd2FzIHNldC4gKi8KKyAgICBvcHRpb25zW29wdF9pZHhdLnNjcmlwdElEID0gY3VycmVudF9TSUQ7CisjZW5kaWYKKworICAgIGlmIChjdXJidWYtPmJfcF9zdyA8PSAwKQorICAgIHsKKwllcnJtc2cgPSBlX3Bvc2l0aXZlOworCWN1cmJ1Zi0+Yl9wX3N3ID0gY3VyYnVmLT5iX3BfdHM7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOdW1iZXIgb3B0aW9ucyB0aGF0IG5lZWQgc29tZSBhY3Rpb24gd2hlbiBjaGFuZ2VkCisgICAgICovCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgaWYgKHBwID09ICZwX3doIHx8IHBwID09ICZwX2hoKQorICAgIHsKKwlpZiAocF93aCA8IDEpCisJeworCSAgICBlcnJtc2cgPSBlX3Bvc2l0aXZlOworCSAgICBwX3doID0gMTsKKwl9CisJaWYgKHBfd21oID4gcF93aCkKKwl7CisJICAgIGVycm1zZyA9IGVfd2luaGVpZ2h0OworCSAgICBwX3doID0gcF93bWg7CisJfQorCWlmIChwX2hoIDwgMCkKKwl7CisJICAgIGVycm1zZyA9IGVfcG9zaXRpdmU7CisJICAgIHBfaGggPSAwOworCX0KKworCS8qIENoYW5nZSB3aW5kb3cgaGVpZ2h0IE5PVyAqLworCWlmIChsYXN0d2luICE9IGZpcnN0d2luKQorCXsKKwkgICAgaWYgKHBwID09ICZwX3doICYmIGN1cndpbi0+d19oZWlnaHQgPCBwX3doKQorCQl3aW5fc2V0aGVpZ2h0KChpbnQpcF93aCk7CisJICAgIGlmIChwcCA9PSAmcF9oaCAmJiBjdXJidWYtPmJfaGVscCAmJiBjdXJ3aW4tPndfaGVpZ2h0IDwgcF9oaCkKKwkJd2luX3NldGhlaWdodCgoaW50KXBfaGgpOworCX0KKyAgICB9CisKKyAgICAvKiAnd2lubWluaGVpZ2h0JyAqLworICAgIGVsc2UgaWYgKHBwID09ICZwX3dtaCkKKyAgICB7CisJaWYgKHBfd21oIDwgMCkKKwl7CisJICAgIGVycm1zZyA9IGVfcG9zaXRpdmU7CisJICAgIHBfd21oID0gMDsKKwl9CisJaWYgKHBfd21oID4gcF93aCkKKwl7CisJICAgIGVycm1zZyA9IGVfd2luaGVpZ2h0OworCSAgICBwX3dtaCA9IHBfd2g7CisJfQorCXdpbl9zZXRtaW5oZWlnaHQoKTsKKyAgICB9CisKKyMgaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBpZiAocHAgPT0gJnBfd2l3KQorICAgIHsKKwlpZiAocF93aXcgPCAxKQorCXsKKwkgICAgZXJybXNnID0gZV9wb3NpdGl2ZTsKKwkgICAgcF93aXcgPSAxOworCX0KKwlpZiAocF93bXcgPiBwX3dpdykKKwl7CisJICAgIGVycm1zZyA9IGVfd2lud2lkdGg7CisJICAgIHBfd2l3ID0gcF93bXc7CisJfQorCisJLyogQ2hhbmdlIHdpbmRvdyB3aWR0aCBOT1cgKi8KKwlpZiAobGFzdHdpbiAhPSBmaXJzdHdpbiAmJiBjdXJ3aW4tPndfd2lkdGggPCBwX3dpdykKKwkgICAgd2luX3NldHdpZHRoKChpbnQpcF93aXcpOworICAgIH0KKworICAgIC8qICd3aW5taW53aWR0aCcgKi8KKyAgICBlbHNlIGlmIChwcCA9PSAmcF93bXcpCisgICAgeworCWlmIChwX3dtdyA8IDApCisJeworCSAgICBlcnJtc2cgPSBlX3Bvc2l0aXZlOworCSAgICBwX3dtdyA9IDA7CisJfQorCWlmIChwX3dtdyA+IHBfd2l3KQorCXsKKwkgICAgZXJybXNnID0gZV93aW53aWR0aDsKKwkgICAgcF93bXcgPSBwX3dpdzsKKwl9CisJd2luX3NldG1pbmhlaWdodCgpOworICAgIH0KKyMgZW5kaWYKKworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICAvKiAocmUpc2V0IGxhc3Qgd2luZG93IHN0YXR1cyBsaW5lICovCisgICAgZWxzZSBpZiAocHAgPT0gJnBfbHMpCisgICAgeworCWxhc3Rfc3RhdHVzKEZBTFNFKTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJCisgICAgZWxzZSBpZiAocHAgPT0gJnBfbGluZXNwYWNlKQorICAgIHsKKwlpZiAoZ3VpLmluX3VzZSAmJiBndWlfbWNoX2FkanVzdF9jaGFyc2l6ZSgpID09IE9LKQorCSAgICBndWlfc2V0X3NoZWxsc2l6ZShGQUxTRSwgRkFMU0UpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgLyogJ2ZvbGRsZXZlbCcgKi8KKyAgICBlbHNlIGlmIChwcCA9PSAmY3Vyd2luLT53X3BfZmRsKQorICAgIHsKKwlpZiAoY3Vyd2luLT53X3BfZmRsIDwgMCkKKwkgICAgY3Vyd2luLT53X3BfZmRsID0gMDsKKwluZXdGb2xkTGV2ZWwoKTsKKyAgICB9CisKKyAgICAvKiAnZm9sZG1pbmxldmVsJyAqLworICAgIGVsc2UgaWYgKHBwID09ICZjdXJ3aW4tPndfcF9mbWwpCisgICAgeworCWZvbGRVcGRhdGVBbGwoY3Vyd2luKTsKKyAgICB9CisKKyAgICAvKiAnZm9sZG5lc3RtYXgnICovCisgICAgZWxzZSBpZiAocHAgPT0gJmN1cndpbi0+d19wX2ZkbikKKyAgICB7CisJaWYgKGZvbGRtZXRob2RJc1N5bnRheChjdXJ3aW4pIHx8IGZvbGRtZXRob2RJc0luZGVudChjdXJ3aW4pKQorCSAgICBmb2xkVXBkYXRlQWxsKGN1cndpbik7CisgICAgfQorCisgICAgLyogJ2ZvbGRjb2x1bW4nICovCisgICAgZWxzZSBpZiAocHAgPT0gJmN1cndpbi0+d19wX2ZkYykKKyAgICB7CisJaWYgKGN1cndpbi0+d19wX2ZkYyA8IDApCisJeworCSAgICBlcnJtc2cgPSBlX3Bvc2l0aXZlOworCSAgICBjdXJ3aW4tPndfcF9mZGMgPSAwOworCX0KKwllbHNlIGlmIChjdXJ3aW4tPndfcF9mZGMgPiAxMikKKwl7CisJICAgIGVycm1zZyA9IGVfaW52YXJnOworCSAgICBjdXJ3aW4tPndfcF9mZGMgPSAxMjsKKwl9CisgICAgfQorCisgICAgLyogJ3NoaWZ0d2lkdGgnIG9yICd0YWJzdG9wJyAqLworICAgIGVsc2UgaWYgKHBwID09ICZjdXJidWYtPmJfcF9zdyB8fCBwcCA9PSAmY3VyYnVmLT5iX3BfdHMpCisgICAgeworCWlmIChmb2xkbWV0aG9kSXNJbmRlbnQoY3Vyd2luKSkKKwkgICAgZm9sZFVwZGF0ZUFsbChjdXJ3aW4pOworICAgIH0KKyNlbmRpZiAvKiBGRUFUX0ZPTERJTkcgKi8KKworICAgIGVsc2UgaWYgKHBwID09ICZjdXJidWYtPmJfcF9pbWluc2VydCkKKyAgICB7CisJaWYgKGN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0IDwgMCB8fCBjdXJidWYtPmJfcF9pbWluc2VydCA+IEJfSU1PREVfTEFTVCkKKwl7CisJICAgIGVycm1zZyA9IGVfaW52YXJnOworCSAgICBjdXJidWYtPmJfcF9pbWluc2VydCA9IEJfSU1PREVfTk9ORTsKKwl9CisJcF9pbWluc2VydCA9IGN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0OworCWlmICh0ZXJtY2FwX2FjdGl2ZSkJLyogZG9uJ3QgZG8gdGhpcyBpbiB0aGUgYWx0ZXJuYXRlIHNjcmVlbiAqLworCSAgICBzaG93bW9kZSgpOworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfS0VZTUFQKQorCS8qIFNob3cvdW5zaG93IHZhbHVlIG9mICdrZXltYXAnIGluIHN0YXR1cyBsaW5lcy4gKi8KKwlzdGF0dXNfcmVkcmF3X2N1cmJ1ZigpOworI2VuZGlmCisgICAgfQorCisgICAgZWxzZSBpZiAocHAgPT0gJmN1cmJ1Zi0+Yl9wX2ltc2VhcmNoKQorICAgIHsKKwlpZiAoY3VyYnVmLT5iX3BfaW1zZWFyY2ggPCAtMSB8fCBjdXJidWYtPmJfcF9pbXNlYXJjaCA+IEJfSU1PREVfTEFTVCkKKwl7CisJICAgIGVycm1zZyA9IGVfaW52YXJnOworCSAgICBjdXJidWYtPmJfcF9pbXNlYXJjaCA9IEJfSU1PREVfTk9ORTsKKwl9CisJcF9pbXNlYXJjaCA9IGN1cmJ1Zi0+Yl9wX2ltc2VhcmNoOworICAgIH0KKworI2lmZGVmIEZFQVRfVElUTEUKKyAgICAvKiBpZiAndGl0bGVsZW4nIGhhcyBjaGFuZ2VkLCByZWRyYXcgdGhlIHRpdGxlICovCisgICAgZWxzZSBpZiAocHAgPT0gJnBfdGl0bGVsZW4pCisgICAgeworCWlmIChwX3RpdGxlbGVuIDwgMCkKKwl7CisJICAgIGVycm1zZyA9IGVfcG9zaXRpdmU7CisJICAgIHBfdGl0bGVsZW4gPSA4NTsKKwl9CisJaWYgKHN0YXJ0aW5nICE9IE5PX1NDUkVFTiAmJiBvbGRfdmFsdWUgIT0gcF90aXRsZWxlbikKKwkgICAgbmVlZF9tYWtldGl0bGUgPSBUUlVFOworICAgIH0KKyNlbmRpZgorCisgICAgLyogaWYgcF9jaCBjaGFuZ2VkIHZhbHVlLCBjaGFuZ2UgdGhlIGNvbW1hbmQgbGluZSBoZWlnaHQgKi8KKyAgICBlbHNlIGlmIChwcCA9PSAmcF9jaCkKKyAgICB7CisJaWYgKHBfY2ggPCAxKQorCXsKKwkgICAgZXJybXNnID0gZV9wb3NpdGl2ZTsKKwkgICAgcF9jaCA9IDE7CisJfQorCisJLyogT25seSBjb21wdXRlIHRoZSBuZXcgd2luZG93IGxheW91dCB3aGVuIHN0YXJ0dXAgaGFzIGJlZW4KKwkgKiBjb21wbGV0ZWQuIE90aGVyd2lzZSB0aGUgZnJhbWUgc2l6ZXMgbWF5IGJlIHdyb25nLiAqLworCWlmIChwX2NoICE9IG9sZF92YWx1ZSAmJiBmdWxsX3NjcmVlbgorI2lmZGVmIEZFQVRfR1VJCisJCSYmICFndWkuc3RhcnRpbmcKKyNlbmRpZgorCSAgICkKKwkgICAgY29tbWFuZF9oZWlnaHQob2xkX3ZhbHVlKTsKKyAgICB9CisKKyAgICAvKiB3aGVuICd1cGRhdGVjb3VudCcgY2hhbmdlcyBmcm9tIHplcm8gdG8gbm9uLXplcm8sIG9wZW4gc3dhcCBmaWxlcyAqLworICAgIGVsc2UgaWYgKHBwID09ICZwX3VjKQorICAgIHsKKwlpZiAocF91YyA8IDApCisJeworCSAgICBlcnJtc2cgPSBlX3Bvc2l0aXZlOworCSAgICBwX3VjID0gMTAwOworCX0KKwlpZiAocF91YyAmJiAhb2xkX3ZhbHVlKQorCSAgICBtbF9vcGVuX2ZpbGVzKCk7CisgICAgfQorCisgICAgLyogc3luYyB1bmRvIGJlZm9yZSAndW5kb2xldmVscycgY2hhbmdlcyAqLworICAgIGVsc2UgaWYgKHBwID09ICZwX3VsKQorICAgIHsKKwkvKiB1c2UgdGhlIG9sZCB2YWx1ZSwgb3RoZXJ3aXNlIHVfc3luYygpIG1heSBub3Qgd29yayBwcm9wZXJseSAqLworCXBfdWwgPSBvbGRfdmFsdWU7CisJdV9zeW5jKCk7CisJcF91bCA9IHZhbHVlOworICAgIH0KKworICAgIC8qCisgICAgICogQ2hlY2sgdGhlIGJvdW5kcyBmb3IgbnVtZXJpYyBvcHRpb25zIGhlcmUKKyAgICAgKi8KKyAgICBpZiAoUm93cyA8IG1pbl9yb3dzKCkgJiYgZnVsbF9zY3JlZW4pCisgICAgeworCWlmIChlcnJidWYgIT0gTlVMTCkKKwl7CisJICAgIHNwcmludGYoKGNoYXIgKillcnJidWYsIF8oIkU1OTM6IE5lZWQgYXQgbGVhc3QgJWQgbGluZXMiKSwKKwkJCQkJCQkJICBtaW5fcm93cygpKTsKKwkgICAgZXJybXNnID0gZXJyYnVmOworCX0KKwlSb3dzID0gbWluX3Jvd3MoKTsKKyAgICB9CisgICAgaWYgKENvbHVtbnMgPCBNSU5fQ09MVU1OUyAmJiBmdWxsX3NjcmVlbikKKyAgICB7CisJaWYgKGVycmJ1ZiAhPSBOVUxMKQorCXsKKwkgICAgc3ByaW50ZigoY2hhciAqKWVycmJ1ZiwgXygiRTU5NDogTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIiksCisJCQkJCQkJCSBNSU5fQ09MVU1OUyk7CisJICAgIGVycm1zZyA9IGVycmJ1ZjsKKwl9CisJQ29sdW1ucyA9IE1JTl9DT0xVTU5TOworICAgIH0KKworI2lmZGVmIERKR1BQCisgICAgLyogYXZvaWQgYSBjcmFzaCBieSBjaGVja2luZyBmb3IgYSB0b28gbGFyZ2UgdmFsdWUgb2YgJ2NvbHVtbnMnICovCisgICAgaWYgKG9sZF9Db2x1bW5zICE9IENvbHVtbnMgJiYgZnVsbF9zY3JlZW4gJiYgdGVybV9jb25zb2xlKQorCW1jaF9jaGVja19jb2x1bW5zKCk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgdGhlIHNjcmVlbiAoc2hlbGwpIGhlaWdodCBoYXMgYmVlbiBjaGFuZ2VkLCBhc3N1bWUgaXQgaXMgdGhlCisgICAgICogcGh5c2ljYWwgc2NyZWVuaGVpZ2h0LgorICAgICAqLworICAgIGlmIChvbGRfUm93cyAhPSBSb3dzIHx8IG9sZF9Db2x1bW5zICE9IENvbHVtbnMpCisgICAgeworCS8qIENoYW5naW5nIHRoZSBzY3JlZW4gc2l6ZSBpcyBub3QgYWxsb3dlZCB3aGlsZSB1cGRhdGluZyB0aGUgc2NyZWVuLiAqLworCWlmICh1cGRhdGluZ19zY3JlZW4pCisJICAgICpwcCA9IG9sZF92YWx1ZTsKKwllbHNlIGlmIChmdWxsX3NjcmVlbgorI2lmZGVmIEZFQVRfR1VJCisJCSYmICFndWkuc3RhcnRpbmcKKyNlbmRpZgorCSAgICApCisJICAgIHNldF9zaGVsbHNpemUoKGludClDb2x1bW5zLCAoaW50KVJvd3MsIFRSVUUpOworCWVsc2UKKwl7CisJICAgIC8qIFBvc3Rwb25lIHRoZSByZXNpemluZzsgY2hlY2sgdGhlIHNpemUgYW5kIGNtZGxpbmUgcG9zaXRpb24gZm9yCisJICAgICAqIG1lc3NhZ2VzLiAqLworCSAgICBjaGVja19zaGVsbHNpemUoKTsKKwkgICAgaWYgKGNtZGxpbmVfcm93ID4gUm93cyAtIHBfY2ggJiYgUm93cyA+IHBfY2gpCisJCWNtZGxpbmVfcm93ID0gUm93cyAtIHBfY2g7CisJfQorICAgIH0KKworICAgIGlmIChjdXJidWYtPmJfcF9zdHMgPCAwKQorICAgIHsKKwllcnJtc2cgPSBlX3Bvc2l0aXZlOworCWN1cmJ1Zi0+Yl9wX3N0cyA9IDA7CisgICAgfQorICAgIGlmIChjdXJidWYtPmJfcF90cyA8PSAwKQorICAgIHsKKwllcnJtc2cgPSBlX3Bvc2l0aXZlOworCWN1cmJ1Zi0+Yl9wX3RzID0gODsKKyAgICB9CisgICAgaWYgKGN1cmJ1Zi0+Yl9wX3R3IDwgMCkKKyAgICB7CisJZXJybXNnID0gZV9wb3NpdGl2ZTsKKwljdXJidWYtPmJfcF90dyA9IDA7CisgICAgfQorICAgIGlmIChwX3RtIDwgMCkKKyAgICB7CisJZXJybXNnID0gZV9wb3NpdGl2ZTsKKwlwX3RtID0gMDsKKyAgICB9CisgICAgaWYgKChjdXJ3aW4tPndfcF9zY3IgPD0gMAorCQl8fCAoY3Vyd2luLT53X3Bfc2NyID4gY3Vyd2luLT53X2hlaWdodAorCQkgICAgJiYgY3Vyd2luLT53X2hlaWdodCA+IDApKQorCSAgICAmJiBmdWxsX3NjcmVlbikKKyAgICB7CisJaWYgKHBwID09ICYoY3Vyd2luLT53X3Bfc2NyKSkKKwl7CisJICAgIGlmIChjdXJ3aW4tPndfcF9zY3IgIT0gMCkKKwkJZXJybXNnID0gZV9zY3JvbGw7CisJICAgIHdpbl9jb21wX3Njcm9sbChjdXJ3aW4pOworCX0KKwkvKiBJZiAnc2Nyb2xsJyBiZWNhbWUgaW52YWxpZCBiZWNhdXNlIG9mIGEgc2lkZSBlZmZlY3Qgc2lsZW50bHkgYWRqdXN0CisJICogaXQuICovCisJZWxzZSBpZiAoY3Vyd2luLT53X3Bfc2NyIDw9IDApCisJICAgIGN1cndpbi0+d19wX3NjciA9IDE7CisJZWxzZSAvKiBjdXJ3aW4tPndfcF9zY3IgPiBjdXJ3aW4tPndfaGVpZ2h0ICovCisJICAgIGN1cndpbi0+d19wX3NjciA9IGN1cndpbi0+d19oZWlnaHQ7CisgICAgfQorICAgIGlmIChwX3JlcG9ydCA8IDApCisgICAgeworCWVycm1zZyA9IGVfcG9zaXRpdmU7CisJcF9yZXBvcnQgPSAxOworICAgIH0KKyAgICBpZiAoKHBfc2ogPCAwIHx8IHBfc2ogPj0gUm93cykgJiYgZnVsbF9zY3JlZW4pCisgICAgeworCWlmIChSb3dzICE9IG9sZF9Sb3dzKQkvKiBSb3dzIGNoYW5nZWQsIGp1c3QgYWRqdXN0IHBfc2ogKi8KKwkgICAgcF9zaiA9IFJvd3MgLyAyOworCWVsc2UKKwl7CisJICAgIGVycm1zZyA9IGVfc2Nyb2xsOworCSAgICBwX3NqID0gMTsKKwl9CisgICAgfQorICAgIGlmIChwX3NvIDwgMCAmJiBmdWxsX3NjcmVlbikKKyAgICB7CisJZXJybXNnID0gZV9zY3JvbGw7CisJcF9zbyA9IDA7CisgICAgfQorICAgIGlmIChwX3Npc28gPCAwICYmIGZ1bGxfc2NyZWVuKQorICAgIHsKKwllcnJtc2cgPSBlX3Bvc2l0aXZlOworCXBfc2lzbyA9IDA7CisgICAgfQorI2lmZGVmIEZFQVRfQ01EV0lOCisgICAgaWYgKHBfY3doIDwgMSkKKyAgICB7CisJZXJybXNnID0gZV9wb3NpdGl2ZTsKKwlwX2N3aCA9IDE7CisgICAgfQorI2VuZGlmCisgICAgaWYgKHBfdXQgPCAwKQorICAgIHsKKwllcnJtc2cgPSBlX3Bvc2l0aXZlOworCXBfdXQgPSAyMDAwOworICAgIH0KKyAgICBpZiAocF9zcyA8IDApCisgICAgeworCWVycm1zZyA9IGVfcG9zaXRpdmU7CisJcF9zcyA9IDA7CisgICAgfQorCisgICAgLyogTWF5IHNldCBnbG9iYWwgdmFsdWUgZm9yIGxvY2FsIG9wdGlvbi4gKi8KKyAgICBpZiAoKG9wdF9mbGFncyAmIChPUFRfTE9DQUwgfCBPUFRfR0xPQkFMKSkgPT0gMCkKKwkqKGxvbmcgKilnZXRfdmFycF9zY29wZSgmKG9wdGlvbnNbb3B0X2lkeF0pLCBPUFRfR0xPQkFMKSA9ICpwcDsKKworICAgIG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgfD0gUF9XQVNfU0VUOworCisgICAgY29tcF9jb2woKTsJCQkgICAgLyogaW4gY2FzZSAnY29sdW1ucycgb3IgJ2xzJyBjaGFuZ2VkICovCisgICAgaWYgKGN1cndpbi0+d19jdXJzd2FudCAhPSBNQVhDT0wpCisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7ICAvKiBpbiBjYXNlICd0YWJzdG9wJyBjaGFuZ2VkICovCisgICAgY2hlY2tfcmVkcmF3KG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MpOworCisgICAgcmV0dXJuIGVycm1zZzsKK30KKworLyoKKyAqIENhbGxlZCBhZnRlciBhbiBvcHRpb24gY2hhbmdlZDogY2hlY2sgaWYgc29tZXRoaW5nIG5lZWRzIHRvIGJlIHJlZHJhd24uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2hlY2tfcmVkcmF3KGZsYWdzKQorICAgIGxvbmdfdQlmbGFnczsKK3sKKyAgICAvKiBDYXJlZnVsOiBQX1JDTFIgYW5kIFBfUkFMTCBhcmUgYSBjb21iaW5hdGlvbiBvZiBvdGhlciBQXyBmbGFncyAqLworICAgIGludAkJY2xlYXIgPSAoZmxhZ3MgJiBQX1JDTFIpID09IFBfUkNMUjsKKyAgICBpbnQJCWFsbCA9ICgoZmxhZ3MgJiBQX1JBTEwpID09IFBfUkFMTCB8fCBjbGVhcik7CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBpZiAoKGZsYWdzICYgUF9SU1RBVCkgfHwgYWxsKQkvKiBtYXJrIGFsbCBzdGF0dXMgbGluZXMgZGlydHkgKi8KKwlzdGF0dXNfcmVkcmF3X2FsbCgpOworI2VuZGlmCisKKyAgICBpZiAoKGZsYWdzICYgUF9SQlVGKSB8fCAoZmxhZ3MgJiBQX1JXSU4pIHx8IGFsbCkKKwljaGFuZ2VkX3dpbmRvd19zZXR0aW5nKCk7CisgICAgaWYgKGZsYWdzICYgUF9SQlVGKQorCXJlZHJhd19jdXJidWZfbGF0ZXIoTk9UX1ZBTElEKTsKKyAgICBpZiAoY2xlYXIpCisJcmVkcmF3X2FsbF9sYXRlcihDTEVBUik7CisgICAgZWxzZSBpZiAoYWxsKQorCXJlZHJhd19hbGxfbGF0ZXIoTk9UX1ZBTElEKTsKK30KKworLyoKKyAqIEZpbmQgaW5kZXggZm9yIG9wdGlvbiAnYXJnJy4KKyAqIFJldHVybiAtMSBpZiBub3QgZm91bmQuCisgKi8KKyAgICBzdGF0aWMgaW50CitmaW5kb3B0aW9uKGFyZykKKyAgICBjaGFyX3UgKmFyZzsKK3sKKyAgICBpbnQJCSAgICBvcHRfaWR4OworICAgIGNoYXIJICAgICpzLCAqcDsKKyAgICBzdGF0aWMgc2hvcnQgICAgcXVpY2tfdGFiWzI3XSA9IHswLCAwfTsJLyogcXVpY2sgYWNjZXNzIHRhYmxlICovCisgICAgaW50CQkgICAgaXNfdGVybV9vcHQ7CisKKyAgICAvKgorICAgICAqIEZvciBmaXJzdCBjYWxsOiBJbml0aWFsaXplIHRoZSBxdWljay1hY2Nlc3MgdGFibGUuCisgICAgICogSXQgY29udGFpbnMgdGhlIGluZGV4IGZvciB0aGUgZmlyc3Qgb3B0aW9uIHRoYXQgc3RhcnRzIHdpdGggYSBjZXJ0YWluCisgICAgICogbGV0dGVyLiAgVGhlcmUgYXJlIDI2IGxldHRlcnMsIHBsdXMgdGhlIGZpcnN0ICJ0XyIgb3B0aW9uLgorICAgICAqLworICAgIGlmIChxdWlja190YWJbMV0gPT0gMCkKKyAgICB7CisJcCA9IG9wdGlvbnNbMF0uZnVsbG5hbWU7CisJZm9yIChvcHRfaWR4ID0gMTsgKHMgPSBvcHRpb25zW29wdF9pZHhdLmZ1bGxuYW1lKSAhPSBOVUxMOyBvcHRfaWR4KyspCisJeworCSAgICBpZiAoc1swXSAhPSBwWzBdKQorCSAgICB7CisJCWlmIChzWzBdID09ICd0JyAmJiBzWzFdID09ICdfJykKKwkJICAgIHF1aWNrX3RhYlsyNl0gPSBvcHRfaWR4OworCQllbHNlCisJCSAgICBxdWlja190YWJbQ2hhck9yZExvdyhzWzBdKV0gPSBvcHRfaWR4OworCSAgICB9CisJICAgIHAgPSBzOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBuYW1lIHN0YXJ0aW5nIHdpdGggYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCisgICAgICovCisjaWZkZWYgRUJDRElDCisgICAgaWYgKCFpc2xvd2VyKGFyZ1swXSkpCisjZWxzZQorICAgIGlmIChhcmdbMF0gPCAnYScgfHwgYXJnWzBdID4gJ3onKQorI2VuZGlmCisJcmV0dXJuIC0xOworCisgICAgaXNfdGVybV9vcHQgPSAoYXJnWzBdID09ICd0JyAmJiBhcmdbMV0gPT0gJ18nKTsKKyAgICBpZiAoaXNfdGVybV9vcHQpCisJb3B0X2lkeCA9IHF1aWNrX3RhYlsyNl07CisgICAgZWxzZQorCW9wdF9pZHggPSBxdWlja190YWJbQ2hhck9yZExvdyhhcmdbMF0pXTsKKyAgICBmb3IgKCA7IChzID0gb3B0aW9uc1tvcHRfaWR4XS5mdWxsbmFtZSkgIT0gTlVMTDsgb3B0X2lkeCsrKQorICAgIHsKKwlpZiAoU1RSQ01QKGFyZywgcykgPT0gMCkJCSAgICAvKiBtYXRjaCBmdWxsIG5hbWUgKi8KKwkgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChzID09IE5VTEwgJiYgIWlzX3Rlcm1fb3B0KQorICAgIHsKKwlvcHRfaWR4ID0gcXVpY2tfdGFiW0NoYXJPcmRMb3coYXJnWzBdKV07CisJZm9yICggOyBvcHRpb25zW29wdF9pZHhdLmZ1bGxuYW1lICE9IE5VTEw7IG9wdF9pZHgrKykKKwl7CisJICAgIHMgPSBvcHRpb25zW29wdF9pZHhdLnNob3J0bmFtZTsKKwkgICAgaWYgKHMgIT0gTlVMTCAmJiBTVFJDTVAoYXJnLCBzKSA9PSAwKSAgIC8qIG1hdGNoIHNob3J0IG5hbWUgKi8KKwkJYnJlYWs7CisJICAgIHMgPSBOVUxMOworCX0KKyAgICB9CisgICAgaWYgKHMgPT0gTlVMTCkKKwlvcHRfaWR4ID0gLTE7CisgICAgcmV0dXJuIG9wdF9pZHg7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChGRUFUX1RDTCkKKy8qCisgKiBHZXQgdGhlIHZhbHVlIGZvciBhbiBvcHRpb24uCisgKgorICogUmV0dXJuczoKKyAqIE51bWJlciBvciBUb2dnbGUgb3B0aW9uOiAxLCAqbnVtdmFsIGdldHMgdmFsdWUuCisgKgkgICAgIFN0cmluZyBvcHRpb246IDAsICpzdHJpbmd2YWwgZ2V0cyBhbGxvY2F0ZWQgc3RyaW5nLgorICogSGlkZGVuIE51bWJlciBvciBUb2dnbGUgb3B0aW9uOiAtMS4KKyAqCSAgICAgaGlkZGVuIFN0cmluZyBvcHRpb246IC0yLgorICoJCSAgIHVua25vd24gb3B0aW9uOiAtMy4KKyAqLworICAgIGludAorZ2V0X29wdGlvbl92YWx1ZShuYW1lLCBudW12YWwsIHN0cmluZ3ZhbCwgb3B0X2ZsYWdzKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBsb25nCSpudW12YWw7CisgICAgY2hhcl91CSoqc3RyaW5ndmFsOwkgICAgLyogTlVMTCB3aGVuIG9ubHkgY2hlY2tpbmcgZXhpc3RhbmNlICovCisgICAgaW50CQlvcHRfZmxhZ3M7Cit7CisgICAgaW50CQlvcHRfaWR4OworICAgIGNoYXJfdQkqdmFycDsKKworICAgIG9wdF9pZHggPSBmaW5kb3B0aW9uKG5hbWUpOworICAgIGlmIChvcHRfaWR4IDwgMCkJCSAgICAvKiB1bmtub3duIG9wdGlvbiAqLworCXJldHVybiAtMzsKKworICAgIHZhcnAgPSBnZXRfdmFycF9zY29wZSgmKG9wdGlvbnNbb3B0X2lkeF0pLCBvcHRfZmxhZ3MpOworCisgICAgaWYgKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiBQX1NUUklORykKKyAgICB7CisJaWYgKHZhcnAgPT0gTlVMTCkJCSAgICAvKiBoaWRkZW4gb3B0aW9uICovCisJICAgIHJldHVybiAtMjsKKwlpZiAoc3RyaW5ndmFsICE9IE5VTEwpCisJeworI2lmZGVmIEZFQVRfQ1JZUFQKKwkgICAgLyogbmV2ZXIgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY3J5cHQga2V5ICovCisJICAgIGlmICgoY2hhcl91ICoqKXZhcnAgPT0gJmN1cmJ1Zi0+Yl9wX2tleSkKKwkJKnN0cmluZ3ZhbCA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKikiKioqKioiKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCSpzdHJpbmd2YWwgPSB2aW1fc3Ryc2F2ZSgqKGNoYXJfdSAqKikodmFycCkpOworCX0KKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAodmFycCA9PSBOVUxMKQkJICAgIC8qIGhpZGRlbiBvcHRpb24gKi8KKwlyZXR1cm4gLTE7CisgICAgaWYgKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiBQX05VTSkKKwkqbnVtdmFsID0gKihsb25nICopdmFycDsKKyAgICBlbHNlCisgICAgeworCS8qIFNwZWNpYWwgY2FzZTogJ21vZGlmaWVkJyBpcyBiX2NoYW5nZWQsIGJ1dCB3ZSBhbHNvIHdhbnQgdG8gY29uc2lkZXIKKwkgKiBpdCBzZXQgd2hlbiAnZmYnIG9yICdmZW5jJyBjaGFuZ2VkLiAqLworCWlmICgoaW50ICopdmFycCA9PSAmY3VyYnVmLT5iX2NoYW5nZWQpCisJICAgICpudW12YWwgPSBjdXJidWZJc0NoYW5nZWQoKTsKKwllbHNlCisJICAgICpudW12YWwgPSAqKGludCAqKXZhcnA7CisgICAgfQorICAgIHJldHVybiAxOworfQorI2VuZGlmCisKKy8qCisgKiBTZXQgdGhlIHZhbHVlIG9mIG9wdGlvbiAibmFtZSIuCisgKiBVc2UgInN0cmluZyIgZm9yIHN0cmluZyBvcHRpb25zLCB1c2UgIm51bWJlciIgZm9yIG90aGVyIG9wdGlvbnMuCisgKi8KKyAgICB2b2lkCitzZXRfb3B0aW9uX3ZhbHVlKG5hbWUsIG51bWJlciwgc3RyaW5nLCBvcHRfZmxhZ3MpCisgICAgY2hhcl91CSpuYW1lOworICAgIGxvbmcJbnVtYmVyOworICAgIGNoYXJfdQkqc3RyaW5nOworICAgIGludAkJb3B0X2ZsYWdzOwkvKiBPUFRfTE9DQUwgb3IgMCAoYm90aCkgKi8KK3sKKyAgICBpbnQJCW9wdF9pZHg7CisgICAgY2hhcl91CSp2YXJwOworICAgIGludAkJZmxhZ3M7CisKKyAgICBvcHRfaWR4ID0gZmluZG9wdGlvbihuYW1lKTsKKyAgICBpZiAob3B0X2lkeCA9PSAtMSkKKwlFTVNHMihfKCJFMzU1OiBVbmtub3duIG9wdGlvbjogJXMiKSwgbmFtZSk7CisgICAgZWxzZQorICAgIHsKKwlmbGFncyA9IG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3M7CisjaWZkZWYgSEFWRV9TQU5EQk9YCisJLyogRGlzYWxsb3cgY2hhbmdpbmcgc29tZSBvcHRpb25zIGluIHRoZSBzYW5kYm94ICovCisJaWYgKHNhbmRib3ggPiAwICYmIChmbGFncyAmIFBfU0VDVVJFKSkKKwkgICAgRU1TRyhfKGVfc2FuZGJveCkpOworCWVsc2UKKyNlbmRpZgorCSAgaWYgKGZsYWdzICYgUF9TVFJJTkcpCisJICAgIHNldF9zdHJpbmdfb3B0aW9uKG9wdF9pZHgsIHN0cmluZywgb3B0X2ZsYWdzKTsKKwllbHNlCisJeworCSAgICB2YXJwID0gZ2V0X3ZhcnAoJm9wdGlvbnNbb3B0X2lkeF0pOworCSAgICBpZiAodmFycCAhPSBOVUxMKQkvKiBoaWRkZW4gb3B0aW9uIGlzIG5vdCBjaGFuZ2VkICovCisJICAgIHsKKwkJaWYgKGZsYWdzICYgUF9OVU0pCisJCSAgICAodm9pZClzZXRfbnVtX29wdGlvbihvcHRfaWR4LCB2YXJwLCBudW1iZXIsIE5VTEwsIG9wdF9mbGFncyk7CisJCWVsc2UKKwkJICAgICh2b2lkKXNldF9ib29sX29wdGlvbihvcHRfaWR4LCB2YXJwLCAoaW50KW51bWJlciwgb3B0X2ZsYWdzKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8qCisgKiBHZXQgdGhlIHRlcm1pbmFsIGNvZGUgZm9yIGEgdGVybWluYWwgb3B0aW9uLgorICogUmV0dXJucyBOVUxMIHdoZW4gbm90IGZvdW5kLgorICovCisgICAgY2hhcl91ICoKK2dldF90ZXJtX2NvZGUodG5hbWUpCisgICAgY2hhcl91CSp0bmFtZTsKK3sKKyAgICBpbnQJICAgIG9wdF9pZHg7CisgICAgY2hhcl91ICAqdmFycDsKKworICAgIGlmICh0bmFtZVswXSAhPSAndCcgfHwgdG5hbWVbMV0gIT0gJ18nIHx8CisJICAgIHRuYW1lWzJdID09IE5VTCB8fCB0bmFtZVszXSA9PSBOVUwpCisJcmV0dXJuIE5VTEw7CisgICAgaWYgKChvcHRfaWR4ID0gZmluZG9wdGlvbih0bmFtZSkpID49IDApCisgICAgeworCXZhcnAgPSBnZXRfdmFycCgmKG9wdGlvbnNbb3B0X2lkeF0pKTsKKwlpZiAodmFycCAhPSBOVUxMKQorCSAgICB2YXJwID0gKihjaGFyX3UgKiopKHZhcnApOworCXJldHVybiB2YXJwOworICAgIH0KKyAgICByZXR1cm4gZmluZF90ZXJtY29kZSh0bmFtZSArIDIpOworfQorCisgICAgY2hhcl91ICoKK2dldF9oaWdobGlnaHRfZGVmYXVsdCgpCit7CisgICAgaW50IGk7CisKKyAgICBpID0gZmluZG9wdGlvbigoY2hhcl91ICopImhsIik7CisgICAgaWYgKGkgPj0gMCkKKwlyZXR1cm4gb3B0aW9uc1tpXS5kZWZfdmFsW1ZJX0RFRkFVTFRdOworICAgIHJldHVybiAoY2hhcl91ICopTlVMTDsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhIHN0cmluZyBsaWtlICJ0X3h4IiwgIjx0X3h4PiIgb3IgIjxTLVRhYj4iIHRvIGEga2V5IG51bWJlci4KKyAqLworICAgIHN0YXRpYyBpbnQKK2ZpbmRfa2V5X29wdGlvbihhcmcpCisgICAgY2hhcl91ICphcmc7Cit7CisgICAgaW50CQlrZXk7CisgICAgaW50CQltb2RpZmllcnM7CisKKyAgICAvKgorICAgICAqIERvbid0IHVzZSBnZXRfc3BlY2lhbF9rZXlfY29kZSgpIGZvciB0X3h4LCB3ZSBkb24ndCB3YW50IGl0IHRvIGNhbGwKKyAgICAgKiBhZGRfdGVybWNhcF9lbnRyeSgpLgorICAgICAqLworICAgIGlmIChhcmdbMF0gPT0gJ3QnICYmIGFyZ1sxXSA9PSAnXycgJiYgYXJnWzJdICYmIGFyZ1szXSkKKwlrZXkgPSBURVJNQ0FQMktFWShhcmdbMl0sIGFyZ1szXSk7CisgICAgZWxzZQorICAgIHsKKwktLWFyZzsJCQkgICAgLyogcHV0IGFyZyBhdCB0aGUgJzwnICovCisJbW9kaWZpZXJzID0gMDsKKwlrZXkgPSBmaW5kX3NwZWNpYWxfa2V5KCZhcmcsICZtb2RpZmllcnMsIFRSVUUpOworCWlmIChtb2RpZmllcnMpCQkgICAgLyogY2FuJ3QgaGFuZGxlIG1vZGlmaWVycyBoZXJlICovCisJICAgIGtleSA9IDA7CisgICAgfQorICAgIHJldHVybiBrZXk7Cit9CisKKy8qCisgKiBpZiAnYWxsJyA9PSAwOiBzaG93IGNoYW5nZWQgb3B0aW9ucworICogaWYgJ2FsbCcgPT0gMTogc2hvdyBhbGwgbm9ybWFsIG9wdGlvbnMKKyAqIGlmICdhbGwnID09IDI6IHNob3cgYWxsIHRlcm1pbmFsIG9wdGlvbnMKKyAqLworICAgIHN0YXRpYyB2b2lkCitzaG93b3B0aW9ucyhhbGwsIG9wdF9mbGFncykKKyAgICBpbnQJCWFsbDsKKyAgICBpbnQJCW9wdF9mbGFnczsJLyogT1BUX0xPQ0FMIGFuZC9vciBPUFRfR0xPQkFMICovCit7CisgICAgc3RydWN0IHZpbW9wdGlvbgkqcDsKKyAgICBpbnQJCQljb2w7CisgICAgaW50CQkJaXN0ZXJtOworICAgIGNoYXJfdQkJKnZhcnA7CisgICAgc3RydWN0IHZpbW9wdGlvbgkqKml0ZW1zOworICAgIGludAkJCWl0ZW1fY291bnQ7CisgICAgaW50CQkJcnVuOworICAgIGludAkJCXJvdywgcm93czsKKyAgICBpbnQJCQljb2xzOworICAgIGludAkJCWk7CisgICAgaW50CQkJbGVuOworCisjZGVmaW5lIElOQyAyMAorI2RlZmluZSBHQVAgMworCisgICAgaXRlbXMgPSAoc3RydWN0IHZpbW9wdGlvbiAqKilhbGxvYygodW5zaWduZWQpKHNpemVvZihzdHJ1Y3Qgdmltb3B0aW9uICopICoKKwkJCQkJCQkJUEFSQU1fQ09VTlQpKTsKKyAgICBpZiAoaXRlbXMgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICAvKiBIaWdobGlnaHQgdGl0bGUgKi8KKyAgICBpZiAoYWxsID09IDIpCisJTVNHX1BVVFNfVElUTEUoXygiXG4tLS0gVGVybWluYWwgY29kZXMgLS0tIikpOworICAgIGVsc2UgaWYgKG9wdF9mbGFncyAmIE9QVF9HTE9CQUwpCisJTVNHX1BVVFNfVElUTEUoXygiXG4tLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIikpOworICAgIGVsc2UgaWYgKG9wdF9mbGFncyAmIE9QVF9MT0NBTCkKKwlNU0dfUFVUU19USVRMRShfKCJcbi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIpKTsKKyAgICBlbHNlCisJTVNHX1BVVFNfVElUTEUoXygiXG4tLS0gT3B0aW9ucyAtLS0iKSk7CisKKyAgICAvKgorICAgICAqIGRvIHRoZSBsb29wIHR3byB0aW1lczoKKyAgICAgKiAxLiBkaXNwbGF5IHRoZSBzaG9ydCBpdGVtcworICAgICAqIDIuIGRpc3BsYXkgdGhlIGxvbmcgaXRlbXMgKG9ubHkgc3RyaW5ncyBhbmQgbnVtYmVycykKKyAgICAgKi8KKyAgICBmb3IgKHJ1biA9IDE7IHJ1biA8PSAyICYmICFnb3RfaW50OyArK3J1bikKKyAgICB7CisJLyoKKwkgKiBjb2xsZWN0IHRoZSBpdGVtcyBpbiBpdGVtc1tdCisJICovCisJaXRlbV9jb3VudCA9IDA7CisJZm9yIChwID0gJm9wdGlvbnNbMF07IHAtPmZ1bGxuYW1lICE9IE5VTEw7IHArKykKKwl7CisJICAgIHZhcnAgPSBOVUxMOworCSAgICBpc3Rlcm0gPSBpc3Rlcm1vcHRpb24ocCk7CisJICAgIGlmIChvcHRfZmxhZ3MgIT0gMCkKKwkgICAgeworCQlpZiAocC0+aW5kaXIgIT0gUFZfTk9ORSAmJiAhaXN0ZXJtKQorCQkgICAgdmFycCA9IGdldF92YXJwX3Njb3BlKHAsIG9wdF9mbGFncyk7CisJICAgIH0KKwkgICAgZWxzZQorCQl2YXJwID0gZ2V0X3ZhcnAocCk7CisJICAgIGlmICh2YXJwICE9IE5VTEwKKwkJICAgICYmICgoYWxsID09IDIgJiYgaXN0ZXJtKQorCQkJfHwgKGFsbCA9PSAxICYmICFpc3Rlcm0pCisJCQl8fCAoYWxsID09IDAgJiYgIW9wdHZhbF9kZWZhdWx0KHAsIHZhcnApKSkpCisJICAgIHsKKwkJaWYgKHAtPmZsYWdzICYgUF9CT09MKQorCQkgICAgbGVuID0gMTsJCS8qIGEgdG9nZ2xlIG9wdGlvbiBmaXRzIGFsd2F5cyAqLworCQllbHNlCisJCXsKKwkJICAgIG9wdGlvbl92YWx1ZTJzdHJpbmcocCwgb3B0X2ZsYWdzKTsKKwkJICAgIGxlbiA9IChpbnQpU1RSTEVOKHAtPmZ1bGxuYW1lKSArIHZpbV9zdHJzaXplKE5hbWVCdWZmKSArIDE7CisJCX0KKwkJaWYgKChsZW4gPD0gSU5DIC0gR0FQICYmIHJ1biA9PSAxKSB8fAorCQkJCQkJKGxlbiA+IElOQyAtIEdBUCAmJiBydW4gPT0gMikpCisJCSAgICBpdGVtc1tpdGVtX2NvdW50KytdID0gcDsKKwkgICAgfQorCX0KKworCS8qCisJICogZGlzcGxheSB0aGUgaXRlbXMKKwkgKi8KKwlpZiAocnVuID09IDEpCisJeworCSAgICBjb2xzID0gKENvbHVtbnMgKyBHQVAgLSAzKSAvIElOQzsKKwkgICAgaWYgKGNvbHMgPT0gMCkKKwkJY29scyA9IDE7CisJICAgIHJvd3MgPSAoaXRlbV9jb3VudCArIGNvbHMgLSAxKSAvIGNvbHM7CisJfQorCWVsc2UJLyogcnVuID09IDIgKi8KKwkgICAgcm93cyA9IGl0ZW1fY291bnQ7CisJZm9yIChyb3cgPSAwOyByb3cgPCByb3dzICYmICFnb3RfaW50OyArK3JvdykKKwl7CisJICAgIG1zZ19wdXRjaGFyKCdcbicpOwkJCS8qIGdvIHRvIG5leHQgbGluZSAqLworCSAgICBpZiAoZ290X2ludCkJCQkvKiAncScgdHlwZWQgaW4gbW9yZSAqLworCQlicmVhazsKKwkgICAgY29sID0gMDsKKwkgICAgZm9yIChpID0gcm93OyBpIDwgaXRlbV9jb3VudDsgaSArPSByb3dzKQorCSAgICB7CisJCW1zZ19jb2wgPSBjb2w7CQkJLyogbWFrZSBjb2x1bW5zICovCisJCXNob3dvbmVvcHQoaXRlbXNbaV0sIG9wdF9mbGFncyk7CisJCWNvbCArPSBJTkM7CisJICAgIH0KKwkgICAgb3V0X2ZsdXNoKCk7CisJICAgIHVpX2JyZWFrY2hlY2soKTsKKwl9CisgICAgfQorICAgIHZpbV9mcmVlKGl0ZW1zKTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIG9wdGlvbiAicCIgaGFzIGl0cyBkZWZhdWx0IHZhbHVlLgorICovCisgICAgc3RhdGljIGludAorb3B0dmFsX2RlZmF1bHQocCwgdmFycCkKKyAgICBzdHJ1Y3Qgdmltb3B0aW9uCSpwOworICAgIGNoYXJfdQkJKnZhcnA7Cit7CisgICAgaW50CQlkdmk7CisKKyAgICBpZiAodmFycCA9PSBOVUxMKQorCXJldHVybiBUUlVFOwkgICAgLyogaGlkZGVuIG9wdGlvbiBpcyBhbHdheXMgYXQgZGVmYXVsdCAqLworICAgIGR2aSA9ICgocC0+ZmxhZ3MgJiBQX1ZJX0RFRikgfHwgcF9jcCkgPyBWSV9ERUZBVUxUIDogVklNX0RFRkFVTFQ7CisgICAgaWYgKHAtPmZsYWdzICYgUF9OVU0pCisJcmV0dXJuICgqKGxvbmcgKil2YXJwID09IChsb25nKXAtPmRlZl92YWxbZHZpXSk7CisgICAgaWYgKHAtPmZsYWdzICYgUF9CT09MKQorCQkJLyogdGhlIGNhc3QgdG8gbG9uZyBpcyByZXF1aXJlZCBmb3IgTWFueCBDICovCisJcmV0dXJuICgqKGludCAqKXZhcnAgPT0gKGludCkobG9uZylwLT5kZWZfdmFsW2R2aV0pOworICAgIC8qIFBfU1RSSU5HICovCisgICAgcmV0dXJuIChTVFJDTVAoKihjaGFyX3UgKiopdmFycCwgcC0+ZGVmX3ZhbFtkdmldKSA9PSAwKTsKK30KKworLyoKKyAqIHNob3dvbmVvcHQ6IHNob3cgdGhlIHZhbHVlIG9mIG9uZSBvcHRpb24KKyAqIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGEgaGlkZGVuIG9wdGlvbiEKKyAqLworICAgIHN0YXRpYyB2b2lkCitzaG93b25lb3B0KHAsIG9wdF9mbGFncykKKyAgICBzdHJ1Y3Qgdmltb3B0aW9uCSpwOworICAgIGludAkJCW9wdF9mbGFnczsJLyogT1BUX0xPQ0FMIG9yIE9QVF9HTE9CQUwgKi8KK3sKKyAgICBjaGFyX3UJCSp2YXJwOworCisgICAgdmFycCA9IGdldF92YXJwX3Njb3BlKHAsIG9wdF9mbGFncyk7CisKKyAgICAvKiBmb3IgJ21vZGlmaWVkJyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgaWYgJ2ZmJyBvciAnZmVuYycgY2hhbmdlZC4gKi8KKyAgICBpZiAoKHAtPmZsYWdzICYgUF9CT09MKSAmJiAoKGludCAqKXZhcnAgPT0gJmN1cmJ1Zi0+Yl9jaGFuZ2VkCisJCQkJCT8gIWN1cmJ1ZklzQ2hhbmdlZCgpIDogISooaW50ICopdmFycCkpCisJTVNHX1BVVFMoIm5vIik7CisgICAgZWxzZSBpZiAoKHAtPmZsYWdzICYgUF9CT09MKSAmJiAqKGludCAqKXZhcnAgPCAwKQorCU1TR19QVVRTKCItLSIpOworICAgIGVsc2UKKwlNU0dfUFVUUygiICAiKTsKKyAgICBNU0dfUFVUUyhwLT5mdWxsbmFtZSk7CisgICAgaWYgKCEocC0+ZmxhZ3MgJiBQX0JPT0wpKQorICAgIHsKKwltc2dfcHV0Y2hhcignPScpOworCS8qIHB1dCB2YWx1ZSBzdHJpbmcgaW4gTmFtZUJ1ZmYgKi8KKwlvcHRpb25fdmFsdWUyc3RyaW5nKHAsIG9wdF9mbGFncyk7CisJbXNnX291dHRyYW5zKE5hbWVCdWZmKTsKKyAgICB9Cit9CisKKy8qCisgKiBXcml0ZSBtb2RpZmllZCBvcHRpb25zIGFzICI6c2V0IiBjb21tYW5kcyB0byBhIGZpbGUuCisgKgorICogVGhlcmUgYXJlIHRocmVlIHZhbHVlcyBmb3IgIm9wdF9mbGFncyI6CisgKiBPUFRfR0xPQkFMOgkJICAgV3JpdGUgZ2xvYmFsIG9wdGlvbiB2YWx1ZXMgYW5kIGZyZXNoIHZhbHVlcyBvZgorICoJCQkgICBidWZmZXItbG9jYWwgb3B0aW9ucyAodXNlZCBmb3Igc3RhcnQgb2YgYSBzZXNzaW9uCisgKgkJCSAgIGZpbGUpLgorICogT1BUX0dMT0JBTCArIE9QVF9MT0NBTDogSWRlbSwgYWRkIGZyZXNoIHZhbHVlcyBvZiB3aW5kb3ctbG9jYWwgb3B0aW9ucyBmb3IKKyAqCQkJICAgY3Vyd2luICh1c2VkIGZvciBhIHZpbXJjIGZpbGUpLgorICogT1BUX0xPQ0FMOgkJICAgV3JpdGUgYnVmZmVyLWxvY2FsIG9wdGlvbiB2YWx1ZXMgZm9yIGN1cmJ1ZiwgZnJlc2gKKyAqCQkJICAgYW5kIGxvY2FsIHZhbHVlcyBmb3Igd2luZG93LWxvY2FsIG9wdGlvbnMgb2YKKyAqCQkJICAgY3Vyd2luLiAgTG9jYWwgdmFsdWVzIGFyZSBhbHNvIHdyaXR0ZW4gd2hlbiBhdCB0aGUKKyAqCQkJICAgZGVmYXVsdCB2YWx1ZSwgYmVjYXVzZSBhIG1vZGVsaW5lIG9yIGF1dG9jb21tYW5kCisgKgkJCSAgIG1heSBoYXZlIHNldCB0aGVtIHdoZW4gZG9pbmcgIjplZGl0IGZpbGUiIGFuZCB0aGUKKyAqCQkJICAgdXNlciBoYXMgc2V0IHRoZW0gYmFjayBhdCB0aGUgZGVmYXVsdCBvciBmcmVzaAorICoJCQkgICB2YWx1ZS4KKyAqCQkJICAgV2hlbiAibG9jYWxfb25seSIgaXMgVFJVRSwgZG9uJ3Qgd3JpdGUgZnJlc2gKKyAqCQkJICAgdmFsdWVzLCBvbmx5IGxvY2FsIHZhbHVlcyAoZm9yICI6bWt2aWV3IikuCisgKiAoZnJlc2ggdmFsdWUgPSB2YWx1ZSB1c2VkIGZvciBhIG5ldyBidWZmZXIgb3Igd2luZG93IGZvciBhIGxvY2FsIG9wdGlvbikuCisgKgorICogUmV0dXJuIEZBSUwgb24gZXJyb3IsIE9LIG90aGVyd2lzZS4KKyAqLworICAgIGludAorbWFrZXNldChmZCwgb3B0X2ZsYWdzLCBsb2NhbF9vbmx5KQorICAgIEZJTEUJKmZkOworICAgIGludAkJb3B0X2ZsYWdzOworICAgIGludAkJbG9jYWxfb25seTsKK3sKKyAgICBzdHJ1Y3Qgdmltb3B0aW9uCSpwOworICAgIGNoYXJfdQkJKnZhcnA7CQkJLyogY3VycmVudGx5IHVzZWQgdmFsdWUgKi8KKyAgICBjaGFyX3UJCSp2YXJwX2ZyZXNoOwkJLyogbG9jYWwgdmFsdWUgKi8KKyAgICBjaGFyX3UJCSp2YXJwX2xvY2FsID0gTlVMTDsJLyogZnJlc2ggdmFsdWUgKi8KKyAgICBjaGFyCQkqY21kOworICAgIGludAkJCXJvdW5kOworCisgICAgLyoKKyAgICAgKiBUaGUgb3B0aW9ucyB0aGF0IGRvbid0IGhhdmUgYSBkZWZhdWx0ICh0ZXJtaW5hbCBuYW1lLCBjb2x1bW5zLCBsaW5lcykKKyAgICAgKiBhcmUgbmV2ZXIgd3JpdHRlbi4gIFRlcm1pbmFsIG9wdGlvbnMgYXJlIGFsc28gbm90IHdyaXR0ZW4uCisgICAgICovCisgICAgZm9yIChwID0gJm9wdGlvbnNbMF07ICFpc3Rlcm1vcHRpb24ocCk7IHArKykKKwlpZiAoIShwLT5mbGFncyAmIFBfTk9fTUtSQykgJiYgIWlzdGVybW9wdGlvbihwKSkKKwl7CisJICAgIC8qIHNraXAgZ2xvYmFsIG9wdGlvbiB3aGVuIG9ubHkgZG9pbmcgbG9jYWxzICovCisJICAgIGlmIChwLT5pbmRpciA9PSBQVl9OT05FICYmICEob3B0X2ZsYWdzICYgT1BUX0dMT0JBTCkpCisJCWNvbnRpbnVlOworCisJICAgIC8qIERvIG5vdCBzdG9yZSBvcHRpb25zIGxpa2UgJ2J1ZmhpZGRlbicgYW5kICdzeW50YXgnIGluIGEgdmltcmMKKwkgICAgICogZmlsZSwgdGhleSBhcmUgYWx3YXlzIGJ1ZmZlci1zcGVjaWZpYy4gKi8KKwkgICAgaWYgKChvcHRfZmxhZ3MgJiBPUFRfR0xPQkFMKSAmJiAocC0+ZmxhZ3MgJiBQX05PR0xPQikpCisJCWNvbnRpbnVlOworCisJICAgIC8qIEdsb2JhbCB2YWx1ZXMgYXJlIG9ubHkgd3JpdHRlbiB3aGVuIG5vdCBhdCB0aGUgZGVmYXVsdCB2YWx1ZS4gKi8KKwkgICAgdmFycCA9IGdldF92YXJwX3Njb3BlKHAsIG9wdF9mbGFncyk7CisJICAgIGlmICgob3B0X2ZsYWdzICYgT1BUX0dMT0JBTCkgJiYgb3B0dmFsX2RlZmF1bHQocCwgdmFycCkpCisJCWNvbnRpbnVlOworCisJICAgIHJvdW5kID0gMjsKKwkgICAgaWYgKHAtPmluZGlyICE9IFBWX05PTkUpCisJICAgIHsKKwkJaWYgKHAtPnZhciA9PSBWQVJfV0lOKQorCQl7CisJCSAgICAvKiBza2lwIHdpbmRvdy1sb2NhbCBvcHRpb24gd2hlbiBvbmx5IGRvaW5nIGdsb2JhbHMgKi8KKwkJICAgIGlmICghKG9wdF9mbGFncyAmIE9QVF9MT0NBTCkpCisJCQljb250aW51ZTsKKwkJICAgIC8qIFdoZW4gZnJlc2ggdmFsdWUgb2Ygd2luZG93LWxvY2FsIG9wdGlvbiBpcyBub3QgYXQgdGhlCisJCSAgICAgKiBkZWZhdWx0LCBuZWVkIHRvIHdyaXRlIGl0IHRvby4gKi8KKwkJICAgIGlmICghKG9wdF9mbGFncyAmIE9QVF9HTE9CQUwpICYmICFsb2NhbF9vbmx5KQorCQkgICAgeworCQkJdmFycF9mcmVzaCA9IGdldF92YXJwX3Njb3BlKHAsIE9QVF9HTE9CQUwpOworCQkJaWYgKCFvcHR2YWxfZGVmYXVsdChwLCB2YXJwX2ZyZXNoKSkKKwkJCXsKKwkJCSAgICByb3VuZCA9IDE7CisJCQkgICAgdmFycF9sb2NhbCA9IHZhcnA7CisJCQkgICAgdmFycCA9IHZhcnBfZnJlc2g7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCisJICAgIC8qIFJvdW5kIDE6IGZyZXNoIHZhbHVlIGZvciB3aW5kb3ctbG9jYWwgb3B0aW9ucy4KKwkgICAgICogUm91bmQgMjogb3RoZXIgdmFsdWVzICovCisJICAgIGZvciAoIDsgcm91bmQgPD0gMjsgdmFycCA9IHZhcnBfbG9jYWwsICsrcm91bmQpCisJICAgIHsKKwkJaWYgKHJvdW5kID09IDEgfHwgKG9wdF9mbGFncyAmIE9QVF9HTE9CQUwpKQorCQkgICAgY21kID0gInNldCI7CisJCWVsc2UKKwkJICAgIGNtZCA9ICJzZXRsb2NhbCI7CisKKwkJaWYgKHAtPmZsYWdzICYgUF9CT09MKQorCQl7CisJCSAgICBpZiAocHV0X3NldGJvb2woZmQsIGNtZCwgcC0+ZnVsbG5hbWUsICooaW50ICopdmFycCkgPT0gRkFJTCkKKwkJCXJldHVybiBGQUlMOworCQl9CisJCWVsc2UgaWYgKHAtPmZsYWdzICYgUF9OVU0pCisJCXsKKwkJICAgIGlmIChwdXRfc2V0bnVtKGZkLCBjbWQsIHAtPmZ1bGxuYW1lLCAobG9uZyAqKXZhcnApID09IEZBSUwpCisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQllbHNlICAgIC8qIFBfU1RSSU5HICovCisJCXsKKwkJICAgIC8qIERvbid0IHNldCAnc3ludGF4JyBhbmQgJ2ZpbGV0eXBlJyBhZ2FpbiBpZiB0aGUgdmFsdWUgaXMKKwkJICAgICAqIGFscmVhZHkgcmlnaHQsIGF2b2lkcyByZWxvYWRpbmcgdGhlIHN5bnRheCBmaWxlLiAqLworCQkgICAgaWYgKHAtPmluZGlyID09IFBWX1NZTiB8fCBwLT5pbmRpciA9PSBQVl9GVCkKKwkJICAgIHsKKwkJCWlmIChmcHJpbnRmKGZkLCAiaWYgJiVzICE9ICclcyciLCBwLT5mdWxsbmFtZSwKKwkJCQkJCSAgICAgICAqKGNoYXJfdSAqKikodmFycCkpIDwgMAorCQkJCXx8IHB1dF9lb2woZmQpIDwgMCkKKwkJCSAgICByZXR1cm4gRkFJTDsKKwkJICAgIH0KKwkJICAgIGlmIChwdXRfc2V0c3RyaW5nKGZkLCBjbWQsIHAtPmZ1bGxuYW1lLCAoY2hhcl91ICoqKXZhcnAsCisJCQkJCSAgKHAtPmZsYWdzICYgUF9FWFBBTkQpICE9IDApID09IEZBSUwpCisJCQlyZXR1cm4gRkFJTDsKKwkJICAgIGlmIChwLT5pbmRpciA9PSBQVl9TWU4gfHwgcC0+aW5kaXIgPT0gUFZfRlQpCisJCSAgICB7CisJCQlpZiAocHV0X2xpbmUoZmQsICJlbmRpZiIpID09IEZBSUwpCisJCQkgICAgcmV0dXJuIEZBSUw7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICByZXR1cm4gT0s7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRk9MRElORykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBHZW5lcmF0ZSBzZXQgY29tbWFuZHMgZm9yIHRoZSBsb2NhbCBmb2xkIG9wdGlvbnMgb25seS4gIFVzZWQgd2hlbgorICogJ3Nlc3Npb25vcHRpb25zJyBvciAndmlld29wdGlvbnMnIGNvbnRhaW5zICJmb2xkcyIgYnV0IG5vdCAib3B0aW9ucyIuCisgKi8KKyAgICBpbnQKK21ha2Vmb2xkc2V0KGZkKQorICAgIEZJTEUJKmZkOworeworICAgIGlmIChwdXRfc2V0c3RyaW5nKGZkLCAic2V0bG9jYWwiLCAiZmRtIiwgJmN1cndpbi0+d19wX2ZkbSwgRkFMU0UpID09IEZBSUwKKyMgaWZkZWYgRkVBVF9FVkFMCisJICAgIHx8IHB1dF9zZXRzdHJpbmcoZmQsICJzZXRsb2NhbCIsICJmZGUiLCAmY3Vyd2luLT53X3BfZmRlLCBGQUxTRSkKKwkJCQkJCQkJICAgICAgID09IEZBSUwKKyMgZW5kaWYKKwkgICAgfHwgcHV0X3NldHN0cmluZyhmZCwgInNldGxvY2FsIiwgImZtciIsICZjdXJ3aW4tPndfcF9mbXIsIEZBTFNFKQorCQkJCQkJCQkgICAgICAgPT0gRkFJTAorCSAgICB8fCBwdXRfc2V0c3RyaW5nKGZkLCAic2V0bG9jYWwiLCAiZmRpIiwgJmN1cndpbi0+d19wX2ZkaSwgRkFMU0UpCisJCQkJCQkJCSAgICAgICA9PSBGQUlMCisJICAgIHx8IHB1dF9zZXRudW0oZmQsICJzZXRsb2NhbCIsICJmZGwiLCAmY3Vyd2luLT53X3BfZmRsKSA9PSBGQUlMCisJICAgIHx8IHB1dF9zZXRudW0oZmQsICJzZXRsb2NhbCIsICJmbWwiLCAmY3Vyd2luLT53X3BfZm1sKSA9PSBGQUlMCisJICAgIHx8IHB1dF9zZXRudW0oZmQsICJzZXRsb2NhbCIsICJmZG4iLCAmY3Vyd2luLT53X3BfZmRuKSA9PSBGQUlMCisJICAgIHx8IHB1dF9zZXRib29sKGZkLCAic2V0bG9jYWwiLCAiZmVuIiwgY3Vyd2luLT53X3BfZmVuKSA9PSBGQUlMCisJICAgICkKKwlyZXR1cm4gRkFJTDsKKworICAgIHJldHVybiBPSzsKK30KKyNlbmRpZgorCisgICAgc3RhdGljIGludAorcHV0X3NldHN0cmluZyhmZCwgY21kLCBuYW1lLCB2YWx1ZXAsIGV4cGFuZCkKKyAgICBGSUxFCSpmZDsKKyAgICBjaGFyCSpjbWQ7CisgICAgY2hhcgkqbmFtZTsKKyAgICBjaGFyX3UJKip2YWx1ZXA7CisgICAgaW50CQlleHBhbmQ7Cit7CisgICAgY2hhcl91CSpzOworICAgIGNoYXJfdQlidWZbTUFYUEFUSExdOworCisgICAgaWYgKGZwcmludGYoZmQsICIlcyAlcz0iLCBjbWQsIG5hbWUpIDwgMCkKKwlyZXR1cm4gRkFJTDsKKyAgICBpZiAoKnZhbHVlcCAhPSBOVUxMKQorICAgIHsKKwkvKiBPdXRwdXQgJ3Bhc3RldG9nZ2xlJyBhcyBrZXkgbmFtZXMuICBGb3Igb3RoZXIKKwkgKiBvcHRpb25zIHNvbWUgY2hhcmFjdGVycyBoYXZlIHRvIGJlIGVzY2FwZWQgd2l0aAorCSAqIENUUkwtViBvciBiYWNrc2xhc2ggKi8KKwlpZiAodmFsdWVwID09ICZwX3B0KQorCXsKKwkgICAgcyA9ICp2YWx1ZXA7CisJICAgIHdoaWxlICgqcyAhPSBOVUwpCisJCWlmIChmcHV0cygoY2hhciAqKXN0cjJzcGVjaWFsKCZzLCBGQUxTRSksIGZkKSA8IDApCisJCSAgICByZXR1cm4gRkFJTDsKKwl9CisJZWxzZSBpZiAoZXhwYW5kKQorCXsKKwkgICAgaG9tZV9yZXBsYWNlKE5VTEwsICp2YWx1ZXAsIGJ1ZiwgTUFYUEFUSEwsIEZBTFNFKTsKKwkgICAgaWYgKHB1dF9lc2NzdHIoZmQsIGJ1ZiwgMikgPT0gRkFJTCkKKwkJcmV0dXJuIEZBSUw7CisJfQorCWVsc2UgaWYgKHB1dF9lc2NzdHIoZmQsICp2YWx1ZXAsIDIpID09IEZBSUwpCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKyAgICBpZiAocHV0X2VvbChmZCkgPCAwKQorCXJldHVybiBGQUlMOworICAgIHJldHVybiBPSzsKK30KKworICAgIHN0YXRpYyBpbnQKK3B1dF9zZXRudW0oZmQsIGNtZCwgbmFtZSwgdmFsdWVwKQorICAgIEZJTEUJKmZkOworICAgIGNoYXIJKmNtZDsKKyAgICBjaGFyCSpuYW1lOworICAgIGxvbmcJKnZhbHVlcDsKK3sKKyAgICBsb25nCXdjOworCisgICAgaWYgKGZwcmludGYoZmQsICIlcyAlcz0iLCBjbWQsIG5hbWUpIDwgMCkKKwlyZXR1cm4gRkFJTDsKKyAgICBpZiAod2NfdXNlX2tleW5hbWUoKGNoYXJfdSAqKXZhbHVlcCwgJndjKSkKKyAgICB7CisJLyogcHJpbnQgJ3dpbGRjaGFyJyBhbmQgJ3dpbGRjaGFybScgYXMgYSBrZXkgbmFtZSAqLworCWlmIChmcHV0cygoY2hhciAqKWdldF9zcGVjaWFsX2tleV9uYW1lKChpbnQpd2MsIDApLCBmZCkgPCAwKQorCSAgICByZXR1cm4gRkFJTDsKKyAgICB9CisgICAgZWxzZSBpZiAoZnByaW50ZihmZCwgIiVsZCIsICp2YWx1ZXApIDwgMCkKKwlyZXR1cm4gRkFJTDsKKyAgICBpZiAocHV0X2VvbChmZCkgPCAwKQorCXJldHVybiBGQUlMOworICAgIHJldHVybiBPSzsKK30KKworICAgIHN0YXRpYyBpbnQKK3B1dF9zZXRib29sKGZkLCBjbWQsIG5hbWUsIHZhbHVlKQorICAgIEZJTEUJKmZkOworICAgIGNoYXIJKmNtZDsKKyAgICBjaGFyCSpuYW1lOworICAgIGludAkJdmFsdWU7Cit7CisgICAgaWYgKGZwcmludGYoZmQsICIlcyAlcyVzIiwgY21kLCB2YWx1ZSA/ICIiIDogIm5vIiwgbmFtZSkgPCAwCisJICAgIHx8IHB1dF9lb2woZmQpIDwgMCkKKwlyZXR1cm4gRkFJTDsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBDbGVhciBhbGwgdGhlIHRlcm1pbmFsIG9wdGlvbnMuCisgKiBJZiB0aGUgb3B0aW9uIGhhcyBiZWVuIGFsbG9jYXRlZCwgZnJlZSB0aGUgbWVtb3J5LgorICogVGVybWluYWwgb3B0aW9ucyBhcmUgbmV2ZXIgaGlkZGVuIG9yIGluZGlyZWN0LgorICovCisgICAgdm9pZAorY2xlYXJfdGVybW9wdGlvbnMoKQoreworICAgIHN0cnVjdCB2aW1vcHRpb24gICAqcDsKKworICAgIC8qCisgICAgICogUmVzZXQgYSBmZXcgdGhpbmdzIGJlZm9yZSBjbGVhcmluZyB0aGUgb2xkIG9wdGlvbnMuIFRoaXMgbWF5IGNhdXNlCisgICAgICogb3V0cHV0dGluZyBhIGZldyB0aGluZ3MgdGhhdCB0aGUgdGVybWluYWwgZG9lc24ndCB1bmRlcnN0YW5kLCBidXQgdGhlCisgICAgICogc2NyZWVuIHdpbGwgYmUgY2xlYXJlZCBsYXRlciwgc28gdGhpcyBpcyBPSy4KKyAgICAgKi8KKyNpZmRlZiBGRUFUX01PVVNFX1RUWQorICAgIG1jaF9zZXRtb3VzZShGQUxTRSk7CSAgICAvKiBzd2l0Y2ggbW91c2Ugb2ZmICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX1RJVExFCisgICAgbWNoX3Jlc3RvcmVfdGl0bGUoMyk7CSAgICAvKiByZXN0b3JlIHdpbmRvdyB0aXRsZXMgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9YQ0xJUEJPQVJEKSAmJiBkZWZpbmVkKEZFQVRfR1VJKQorICAgIC8qIFdoZW4gc3RhcnRpbmcgdGhlIEdVSSBjbG9zZSB0aGUgZGlzcGxheSBvcGVuZWQgZm9yIHRoZSBjbGlwYm9hcmQuCisgICAgICogQWZ0ZXIgcmVzdG9yaW5nIHRoZSB0aXRsZSwgYmVjYXVzZSB0aGF0IHdpbGwgbmVlZCB0aGUgZGlzcGxheS4gKi8KKyAgICBpZiAoZ3VpLnN0YXJ0aW5nKQorCWNsZWFyX3h0ZXJtX2NsaXAoKTsKKyNlbmRpZgorI2lmZGVmIFdJTjMyNjQKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHRoaXMgaXMgYWxsb3dlZCBub3cuCisgICAgICovCisgICAgaWYgKGNhbl9lbmRfdGVybWNhcF9tb2RlKEZBTFNFKSA9PSBUUlVFKQorI2VuZGlmCisJc3RvcHRlcm1jYXAoKTsJCQkvKiBzdG9wIHRlcm1jYXAgbW9kZSAqLworCisgICAgZm9yIChwID0gJm9wdGlvbnNbMF07IHAtPmZ1bGxuYW1lICE9IE5VTEw7IHArKykKKwlpZiAoaXN0ZXJtb3B0aW9uKHApKQorCXsKKwkgICAgaWYgKHAtPmZsYWdzICYgUF9BTExPQ0VEKQorCQlmcmVlX3N0cmluZ19vcHRpb24oKihjaGFyX3UgKiopKHAtPnZhcikpOworCSAgICBpZiAocC0+ZmxhZ3MgJiBQX0RFRl9BTExPQ0VEKQorCQlmcmVlX3N0cmluZ19vcHRpb24ocC0+ZGVmX3ZhbFtWSV9ERUZBVUxUXSk7CisJICAgICooY2hhcl91ICoqKShwLT52YXIpID0gZW1wdHlfb3B0aW9uOworCSAgICBwLT5kZWZfdmFsW1ZJX0RFRkFVTFRdID0gZW1wdHlfb3B0aW9uOworCSAgICBwLT5mbGFncyAmPSB+KFBfQUxMT0NFRHxQX0RFRl9BTExPQ0VEKTsKKwl9CisgICAgY2xlYXJfdGVybWNvZGVzKCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIHRlcm1pbmFsIG9wdGlvbiBkZWZhdWx0cyB0byB0aGUgY3VycmVudCB2YWx1ZS4KKyAqIFVzZWQgYWZ0ZXIgc2V0dGluZyB0aGUgdGVybWluYWwgbmFtZS4KKyAqLworICAgIHZvaWQKK3NldF90ZXJtX2RlZmF1bHRzKCkKK3sKKyAgICBzdHJ1Y3Qgdmltb3B0aW9uICAgKnA7CisKKyAgICBmb3IgKHAgPSAmb3B0aW9uc1swXTsgcC0+ZnVsbG5hbWUgIT0gTlVMTDsgcCsrKQorICAgIHsKKwlpZiAoaXN0ZXJtb3B0aW9uKHApICYmIHAtPmRlZl92YWxbVklfREVGQVVMVF0gIT0gKihjaGFyX3UgKiopKHAtPnZhcikpCisJeworCSAgICBpZiAocC0+ZmxhZ3MgJiBQX0RFRl9BTExPQ0VEKQorCSAgICB7CisJCWZyZWVfc3RyaW5nX29wdGlvbihwLT5kZWZfdmFsW1ZJX0RFRkFVTFRdKTsKKwkJcC0+ZmxhZ3MgJj0gflBfREVGX0FMTE9DRUQ7CisJICAgIH0KKwkgICAgcC0+ZGVmX3ZhbFtWSV9ERUZBVUxUXSA9ICooY2hhcl91ICoqKShwLT52YXIpOworCSAgICBpZiAocC0+ZmxhZ3MgJiBQX0FMTE9DRUQpCisJICAgIHsKKwkJcC0+ZmxhZ3MgfD0gUF9ERUZfQUxMT0NFRDsKKwkJcC0+ZmxhZ3MgJj0gflBfQUxMT0NFRDsJIC8qIGRvbid0IGZyZWUgdGhlIHZhbHVlIG5vdyAqLworCSAgICB9CisJfQorICAgIH0KK30KKworLyoKKyAqIHJldHVybiBUUlVFIGlmICdwJyBzdGFydHMgd2l0aCAndF8nCisgKi8KKyAgICBzdGF0aWMgaW50Citpc3Rlcm1vcHRpb24ocCkKKyAgICBzdHJ1Y3Qgdmltb3B0aW9uICpwOworeworICAgIHJldHVybiAocC0+ZnVsbG5hbWVbMF0gPT0gJ3QnICYmIHAtPmZ1bGxuYW1lWzFdID09ICdfJyk7Cit9CisKKy8qCisgKiBDb21wdXRlIGNvbHVtbnMgZm9yIHJ1bGVyIGFuZCBzaG93biBjb21tYW5kLiAnc2NfY29sJyBpcyBhbHNvIHVzZWQgdG8KKyAqIGRlY2lkZSB3aGF0IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIG1lc3NhZ2Ugb24gdGhlIHN0YXR1cyBsaW5lIGNhbiBiZS4KKyAqIElmIHRoZXJlIGlzIGEgc3RhdHVzIGxpbmUgZm9yIHRoZSBsYXN0IHdpbmRvdywgJ3NjX2NvbCcgaXMgaW5kZXBlbmRlbnQKKyAqIG9mICdydV9jb2wnLgorICovCisKKyNkZWZpbmUgQ09MX1JVTEVSIDE3CSAgICAvKiBjb2x1bW5zIG5lZWRlZCBieSBzdGFuZGFyZCBydWxlciAqLworCisgICAgdm9pZAorY29tcF9jb2woKQoreworI2lmIGRlZmluZWQoRkVBVF9DTURMX0lORk8pICYmIGRlZmluZWQoRkVBVF9XSU5ET1dTKQorICAgIGludCBsYXN0X2hhc19zdGF0dXMgPSAocF9scyA9PSAyIHx8IChwX2xzID09IDEgJiYgZmlyc3R3aW4gIT0gbGFzdHdpbikpOworCisgICAgc2NfY29sID0gMDsKKyAgICBydV9jb2wgPSAwOworICAgIGlmIChwX3J1KQorICAgIHsKKyNpZmRlZiBGRUFUX1NUTF9PUFQKKwlydV9jb2wgPSAocnVfd2lkID8gcnVfd2lkIDogQ09MX1JVTEVSKSArIDE7CisjZWxzZQorCXJ1X2NvbCA9IENPTF9SVUxFUiArIDE7CisjZW5kaWYKKwkvKiBubyBsYXN0IHN0YXR1cyBsaW5lLCBhZGp1c3Qgc2NfY29sICovCisJaWYgKCFsYXN0X2hhc19zdGF0dXMpCisJICAgIHNjX2NvbCA9IHJ1X2NvbDsKKyAgICB9CisgICAgaWYgKHBfc2MpCisgICAgeworCXNjX2NvbCArPSBTSE9XQ01EX0NPTFM7CisJaWYgKCFwX3J1IHx8IGxhc3RfaGFzX3N0YXR1cykJICAgIC8qIG5vIG5lZWQgZm9yIHNlcGFyYXRpbmcgc3BhY2UgKi8KKwkgICAgKytzY19jb2w7CisgICAgfQorICAgIHNjX2NvbCA9IENvbHVtbnMgLSBzY19jb2w7CisgICAgcnVfY29sID0gQ29sdW1ucyAtIHJ1X2NvbDsKKyAgICBpZiAoc2NfY29sIDw9IDApCQkvKiBzY3JlZW4gdG9vIG5hcnJvdywgd2lsbCBiZWNvbWUgYSBtZXNzICovCisJc2NfY29sID0gMTsKKyAgICBpZiAocnVfY29sIDw9IDApCisJcnVfY29sID0gMTsKKyNlbHNlCisgICAgc2NfY29sID0gQ29sdW1uczsKKyAgICBydV9jb2wgPSBDb2x1bW5zOworI2VuZGlmCit9CisKKy8qCisgKiBHZXQgcG9pbnRlciB0byBvcHRpb24gdmFyaWFibGUsIGRlcGVuZGluZyBvbiBsb2NhbCBvciBnbG9iYWwgc2NvcGUuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2dldF92YXJwX3Njb3BlKHAsIG9wdF9mbGFncykKKyAgICBzdHJ1Y3Qgdmltb3B0aW9uCSpwOworICAgIGludAkJCW9wdF9mbGFnczsKK3sKKyAgICBpZiAoKG9wdF9mbGFncyAmIE9QVF9HTE9CQUwpICYmIHAtPmluZGlyICE9IFBWX05PTkUpCisgICAgeworCWlmIChwLT52YXIgPT0gVkFSX1dJTikKKwkgICAgcmV0dXJuIChjaGFyX3UgKilHTE9CQUxfV08oZ2V0X3ZhcnAocCkpOworCXJldHVybiBwLT52YXI7CisgICAgfQorICAgIGlmICgob3B0X2ZsYWdzICYgT1BUX0xPQ0FMKSAmJiAoaW50KXAtPmluZGlyID49IFBWX0JPVEgpCisgICAgeworCXN3aXRjaCAoKGludClwLT5pbmRpcikKKwl7CisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCSAgICBjYXNlIE9QVF9CT1RIKFBWX0dQKTogICByZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfZ3ApOworCSAgICBjYXNlIE9QVF9CT1RIKFBWX01QKTogICByZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfbXApOworCSAgICBjYXNlIE9QVF9CT1RIKFBWX0VGTSk6ICByZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfZWZtKTsKKyNlbmRpZgorCSAgICBjYXNlIE9QVF9CT1RIKFBWX0VQKTogICByZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfZXApOworCSAgICBjYXNlIE9QVF9CT1RIKFBWX0tQKTogICByZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3Bfa3ApOworCSAgICBjYXNlIE9QVF9CT1RIKFBWX1BBVEgpOiByZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfcGF0aCk7CisJICAgIGNhc2UgT1BUX0JPVEgoUFZfQVIpOiAgIHJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9hcik7CisJICAgIGNhc2UgT1BUX0JPVEgoUFZfVEFHUyk6IHJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF90YWdzKTsKKyNpZmRlZiBGRUFUX0ZJTkRfSUQKKwkgICAgY2FzZSBPUFRfQk9USChQVl9ERUYpOiAgcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2RlZik7CisJICAgIGNhc2UgT1BUX0JPVEgoUFZfSU5DKTogIHJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9pbmMpOworI2VuZGlmCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJICAgIGNhc2UgT1BUX0JPVEgoUFZfRElDVCk6IHJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9kaWN0KTsKKwkgICAgY2FzZSBPUFRfQk9USChQVl9UU1IpOiAgcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX3Rzcik7CisjZW5kaWYKKwl9CisJcmV0dXJuIE5VTEw7IC8qICJjYW5ub3QgaGFwcGVuIiAqLworICAgIH0KKyAgICByZXR1cm4gZ2V0X3ZhcnAocCk7Cit9CisKKy8qCisgKiBHZXQgcG9pbnRlciB0byBvcHRpb24gdmFyaWFibGUuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2dldF92YXJwKHApCisgICAgc3RydWN0IHZpbW9wdGlvbgkqcDsKK3sKKyAgICAvKiBoaWRkZW4gb3B0aW9uLCBhbHdheXMgcmV0dXJuIE5VTEwgKi8KKyAgICBpZiAocC0+dmFyID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICBzd2l0Y2ggKChpbnQpcC0+aW5kaXIpCisgICAgeworCWNhc2UgUFZfTk9ORToJcmV0dXJuIHAtPnZhcjsKKworCS8qIGdsb2JhbCBvcHRpb24gd2l0aCBsb2NhbCB2YWx1ZTogdXNlIGxvY2FsIHZhbHVlIGlmIGl0J3MgYmVlbiBzZXQgKi8KKwljYXNlIE9QVF9CT1RIKFBWX0VQKToJcmV0dXJuICpjdXJidWYtPmJfcF9lcCAhPSBOVUwKKwkJCQkgICAgPyAoY2hhcl91ICopJmN1cmJ1Zi0+Yl9wX2VwIDogcC0+dmFyOworCWNhc2UgT1BUX0JPVEgoUFZfS1ApOglyZXR1cm4gKmN1cmJ1Zi0+Yl9wX2twICE9IE5VTAorCQkJCSAgICA/IChjaGFyX3UgKikmY3VyYnVmLT5iX3Bfa3AgOiBwLT52YXI7CisJY2FzZSBPUFRfQk9USChQVl9QQVRIKToJcmV0dXJuICpjdXJidWYtPmJfcF9wYXRoICE9IE5VTAorCQkJCSAgICA/IChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX3BhdGgpIDogcC0+dmFyOworCWNhc2UgT1BUX0JPVEgoUFZfQVIpOglyZXR1cm4gY3VyYnVmLT5iX3BfYXIgPj0gMAorCQkJCSAgICA/IChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2FyKSA6IHAtPnZhcjsKKwljYXNlIE9QVF9CT1RIKFBWX1RBR1MpOglyZXR1cm4gKmN1cmJ1Zi0+Yl9wX3RhZ3MgIT0gTlVMCisJCQkJICAgID8gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfdGFncykgOiBwLT52YXI7CisjaWZkZWYgRkVBVF9GSU5EX0lECisJY2FzZSBPUFRfQk9USChQVl9ERUYpOglyZXR1cm4gKmN1cmJ1Zi0+Yl9wX2RlZiAhPSBOVUwKKwkJCQkgICAgPyAoY2hhcl91ICopJihjdXJidWYtPmJfcF9kZWYpIDogcC0+dmFyOworCWNhc2UgT1BUX0JPVEgoUFZfSU5DKToJcmV0dXJuICpjdXJidWYtPmJfcF9pbmMgIT0gTlVMCisJCQkJICAgID8gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfaW5jKSA6IHAtPnZhcjsKKyNlbmRpZgorI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCWNhc2UgT1BUX0JPVEgoUFZfRElDVCk6CXJldHVybiAqY3VyYnVmLT5iX3BfZGljdCAhPSBOVUwKKwkJCQkgICAgPyAoY2hhcl91ICopJihjdXJidWYtPmJfcF9kaWN0KSA6IHAtPnZhcjsKKwljYXNlIE9QVF9CT1RIKFBWX1RTUik6CXJldHVybiAqY3VyYnVmLT5iX3BfdHNyICE9IE5VTAorCQkJCSAgICA/IChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX3RzcikgOiBwLT52YXI7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJY2FzZSBPUFRfQk9USChQVl9HUCk6CXJldHVybiAqY3VyYnVmLT5iX3BfZ3AgIT0gTlVMCisJCQkJICAgID8gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfZ3ApIDogcC0+dmFyOworCWNhc2UgT1BUX0JPVEgoUFZfTVApOglyZXR1cm4gKmN1cmJ1Zi0+Yl9wX21wICE9IE5VTAorCQkJCSAgICA/IChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX21wKSA6IHAtPnZhcjsKKwljYXNlIE9QVF9CT1RIKFBWX0VGTSk6CXJldHVybiAqY3VyYnVmLT5iX3BfZWZtICE9IE5VTAorCQkJCSAgICA/IChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2VmbSkgOiBwLT52YXI7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfQVJBQklDCisJY2FzZSBQVl9BUkFCOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3BfYXJhYik7CisjZW5kaWYKKwljYXNlIFBWX0xJU1Q6CXJldHVybiAoY2hhcl91ICopJihjdXJ3aW4tPndfcF9saXN0KTsKKyNpZmRlZiBGRUFUX0RJRkYKKwljYXNlIFBWX0RJRkY6CXJldHVybiAoY2hhcl91ICopJihjdXJ3aW4tPndfcF9kaWZmKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworCWNhc2UgUFZfRkRDOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3BfZmRjKTsKKwljYXNlIFBWX0ZFTjoJcmV0dXJuIChjaGFyX3UgKikmKGN1cndpbi0+d19wX2Zlbik7CisJY2FzZSBQVl9GREk6CXJldHVybiAoY2hhcl91ICopJihjdXJ3aW4tPndfcF9mZGkpOworCWNhc2UgUFZfRkRMOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3BfZmRsKTsKKwljYXNlIFBWX0ZETToJcmV0dXJuIChjaGFyX3UgKikmKGN1cndpbi0+d19wX2ZkbSk7CisJY2FzZSBQVl9GTUw6CXJldHVybiAoY2hhcl91ICopJihjdXJ3aW4tPndfcF9mbWwpOworCWNhc2UgUFZfRkROOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3BfZmRuKTsKKyMgaWZkZWYgRkVBVF9FVkFMCisJY2FzZSBQVl9GREU6CXJldHVybiAoY2hhcl91ICopJihjdXJ3aW4tPndfcF9mZGUpOworCWNhc2UgUFZfRkRUOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3BfZmR0KTsKKyMgZW5kaWYKKwljYXNlIFBWX0ZNUjoJcmV0dXJuIChjaGFyX3UgKikmKGN1cndpbi0+d19wX2Ztcik7CisjZW5kaWYKKwljYXNlIFBWX05VOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3BfbnUpOworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKQorCWNhc2UgUFZfV0ZIOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3Bfd2ZoKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpCisJY2FzZSBQVl9QVlc6CXJldHVybiAoY2hhcl91ICopJihjdXJ3aW4tPndfcF9wdncpOworI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwljYXNlIFBWX1JMOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3BfcmwpOworCWNhc2UgUFZfUkxDOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3BfcmxjKTsKKyNlbmRpZgorCWNhc2UgUFZfU0NST0xMOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3Bfc2NyKTsKKwljYXNlIFBWX1dSQVA6CXJldHVybiAoY2hhcl91ICopJihjdXJ3aW4tPndfcF93cmFwKTsKKyNpZmRlZiBGRUFUX0xJTkVCUkVBSworCWNhc2UgUFZfTEJSOglyZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3BfbGJyKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU0NST0xMQklORAorCWNhc2UgUFZfU0NCSU5EOiByZXR1cm4gKGNoYXJfdSAqKSYoY3Vyd2luLT53X3Bfc2NiKTsKKyNlbmRpZgorCisJY2FzZSBQVl9BSToJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2FpKTsKKwljYXNlIFBWX0JJTjoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2Jpbik7CisjaWZkZWYgRkVBVF9NQllURQorCWNhc2UgUFZfQk9NQjoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2JvbWIpOworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCWNhc2UgUFZfQkg6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9iaCk7CisJY2FzZSBQVl9CVDoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2J0KTsKKyNlbmRpZgorCWNhc2UgUFZfQkw6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9ibCk7CisJY2FzZSBQVl9DSToJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2NpKTsKKyNpZmRlZiBGRUFUX0NJTkRFTlQKKwljYXNlIFBWX0NJTjoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2Npbik7CisJY2FzZSBQVl9DSU5LOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfY2luayk7CisJY2FzZSBQVl9DSU5POglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfY2lubyk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfU01BUlRJTkRFTlQpIHx8IGRlZmluZWQoRkVBVF9DSU5ERU5UKQorCWNhc2UgUFZfQ0lOVzoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2NpbncpOworI2VuZGlmCisjaWZkZWYgRkVBVF9DT01NRU5UUworCWNhc2UgUFZfQ09NOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfY29tKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworCWNhc2UgUFZfQ01TOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfY21zKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCWNhc2UgUFZfQ1BUOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfY3B0KTsKKyNlbmRpZgorCWNhc2UgUFZfRU9MOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfZW9sKTsKKwljYXNlIFBWX0VUOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfZXQpOworI2lmZGVmIEZFQVRfTUJZVEUKKwljYXNlIFBWX0ZFTkM6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9mZW5jKTsKKyNlbmRpZgorCWNhc2UgUFZfRkY6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9mZik7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJY2FzZSBQVl9GVDoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX2Z0KTsKKyNlbmRpZgorCWNhc2UgUFZfRk86CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9mbyk7CisJY2FzZSBQVl9JTUk6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9pbWluc2VydCk7CisJY2FzZSBQVl9JTVM6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9pbXNlYXJjaCk7CisJY2FzZSBQVl9JTkY6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9pbmYpOworCWNhc2UgUFZfSVNLOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfaXNrKTsKKyNpZmRlZiBGRUFUX0ZJTkRfSUQKKyMgaWZkZWYgRkVBVF9FVkFMCisJY2FzZSBQVl9JTkVYOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfaW5leCk7CisjIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfQ0lOREVOVCkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCisJY2FzZSBQVl9JTkRFOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfaW5kZSk7CisJY2FzZSBQVl9JTkRLOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfaW5kayk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0NSWVBUCisJY2FzZSBQVl9LRVk6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9rZXkpOworI2VuZGlmCisjaWZkZWYgRkVBVF9MSVNQCisJY2FzZSBQVl9MSVNQOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfbGlzcCk7CisjZW5kaWYKKwljYXNlIFBWX01MOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfbWwpOworCWNhc2UgUFZfTVBTOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfbXBzKTsKKwljYXNlIFBWX01BOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfbWEpOworCWNhc2UgUFZfTU9EOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX2NoYW5nZWQpOworCWNhc2UgUFZfTkY6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9uZik7CisjaWZkZWYgRkVBVF9PU0ZJTEVUWVBFCisJY2FzZSBQVl9PRlQ6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9vZnQpOworI2VuZGlmCisJY2FzZSBQVl9QSToJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX3BpKTsKKwljYXNlIFBWX1JPOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3Bfcm8pOworI2lmZGVmIEZFQVRfU01BUlRJTkRFTlQKKwljYXNlIFBWX1NJOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3Bfc2kpOworI2VuZGlmCisjaWZuZGVmIFNIT1JUX0ZOQU1FCisJY2FzZSBQVl9TTjoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX3NuKTsKKyNlbmRpZgorCWNhc2UgUFZfU1RTOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3Bfc3RzKTsKKyNpZmRlZiBGRUFUX1NFQVJDSFBBVEgKKwljYXNlIFBWX1NVQToJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX3N1YSk7CisjZW5kaWYKKwljYXNlIFBWX1NXRjoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX3N3Zik7CisjaWZkZWYgRkVBVF9TWU5fSEwKKwljYXNlIFBWX1NZTjoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX3N5bik7CisjZW5kaWYKKwljYXNlIFBWX1NXOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3Bfc3cpOworCWNhc2UgUFZfVFM6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF90cyk7CisJY2FzZSBQVl9UVzoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX3R3KTsKKwljYXNlIFBWX1RYOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfdHgpOworCWNhc2UgUFZfV006CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF93bSk7CisjaWZkZWYgRkVBVF9LRVlNQVAKKwljYXNlIFBWX0tNQVA6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9rZXltYXApOworI2VuZGlmCisJZGVmYXVsdDoJRU1TRyhfKCJFMzU2OiBnZXRfdmFycCBFUlJPUiIpKTsKKyAgICB9CisgICAgLyogYWx3YXlzIHJldHVybiBhIHZhbGlkIHBvaW50ZXIgdG8gYXZvaWQgYSBjcmFzaCEgKi8KKyAgICByZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3Bfd20pOworfQorCisvKgorICogR2V0IHRoZSB2YWx1ZSBvZiAnZXF1YWxwcmcnLCBlaXRoZXIgdGhlIGJ1ZmZlci1sb2NhbCBvbmUgb3IgdGhlIGdsb2JhbCBvbmUuCisgKi8KKyAgICBjaGFyX3UgKgorZ2V0X2VxdWFscHJnKCkKK3sKKyAgICBpZiAoKmN1cmJ1Zi0+Yl9wX2VwID09IE5VTCkKKwlyZXR1cm4gcF9lcDsKKyAgICByZXR1cm4gY3VyYnVmLT5iX3BfZXA7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDb3B5IG9wdGlvbnMgZnJvbSBvbmUgd2luZG93IHRvIGFub3RoZXIuCisgKiBVc2VkIHdoZW4gc3BsaXR0aW5nIGEgd2luZG93LgorICovCisgICAgdm9pZAord2luX2NvcHlfb3B0aW9ucyh3cF9mcm9tLCB3cF90bykKKyAgICB3aW5fVAkqd3BfZnJvbTsKKyAgICB3aW5fVAkqd3BfdG87Cit7CisgICAgY29weV93aW5vcHQoJndwX2Zyb20tPndfb25lYnVmX29wdCwgJndwX3RvLT53X29uZWJ1Zl9vcHQpOworICAgIGNvcHlfd2lub3B0KCZ3cF9mcm9tLT53X2FsbGJ1Zl9vcHQsICZ3cF90by0+d19hbGxidWZfb3B0KTsKKyMgaWZkZWYgRkVBVF9SSUdIVExFRlQKKyMgIGlmZGVmIEZFQVRfRktNQVAKKyAgICAvKiBJcyB0aGlzIHJpZ2h0PyAqLworICAgIHdwX3RvLT53X2ZhcnNpID0gd3BfZnJvbS0+d19mYXJzaTsKKyMgIGVuZGlmCisjIGVuZGlmCit9CisjZW5kaWYKKworLyoKKyAqIENvcHkgdGhlIG9wdGlvbnMgZnJvbSBvbmUgd2lub3B0X1QgdG8gYW5vdGhlci4KKyAqIERvZXNuJ3QgZnJlZSB0aGUgb2xkIG9wdGlvbiB2YWx1ZXMgaW4gInRvIiwgdXNlIGNsZWFyX3dpbm9wdCgpIGZvciB0aGF0LgorICogVGhlICdzY3JvbGwnIG9wdGlvbiBpcyBub3QgY29waWVkLCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gdGhlIHdpbmRvdyBoZWlnaHQuCisgKiBUaGUgJ3ByZXZpZXd3aW5kb3cnIG9wdGlvbiBpcyByZXNldCwgdGhlcmUgY2FuIGJlIG9ubHkgb25lIHByZXZpZXcgd2luZG93LgorICovCisgICAgdm9pZAorY29weV93aW5vcHQoZnJvbSwgdG8pCisgICAgd2lub3B0X1QJKmZyb207CisgICAgd2lub3B0X1QJKnRvOworeworI2lmZGVmIEZFQVRfQVJBQklDCisgICAgdG8tPndvX2FyYWIgPSBmcm9tLT53b19hcmFiOworI2VuZGlmCisgICAgdG8tPndvX2xpc3QgPSBmcm9tLT53b19saXN0OworICAgIHRvLT53b19udSA9IGZyb20tPndvX251OworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgdG8tPndvX3JsICA9IGZyb20tPndvX3JsOworICAgIHRvLT53b19ybGMgPSB2aW1fc3Ryc2F2ZShmcm9tLT53b19ybGMpOworI2VuZGlmCisgICAgdG8tPndvX3dyYXAgPSBmcm9tLT53b193cmFwOworI2lmZGVmIEZFQVRfTElORUJSRUFLCisgICAgdG8tPndvX2xiciA9IGZyb20tPndvX2xicjsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU0NST0xMQklORAorICAgIHRvLT53b19zY2IgPSBmcm9tLT53b19zY2I7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICB0by0+d29fZGlmZiA9IGZyb20tPndvX2RpZmY7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICB0by0+d29fZmRjID0gZnJvbS0+d29fZmRjOworICAgIHRvLT53b19mZW4gPSBmcm9tLT53b19mZW47CisgICAgdG8tPndvX2ZkaSA9IHZpbV9zdHJzYXZlKGZyb20tPndvX2ZkaSk7CisgICAgdG8tPndvX2ZtbCA9IGZyb20tPndvX2ZtbDsKKyAgICB0by0+d29fZmRsID0gZnJvbS0+d29fZmRsOworICAgIHRvLT53b19mZG0gPSB2aW1fc3Ryc2F2ZShmcm9tLT53b19mZG0pOworICAgIHRvLT53b19mZG4gPSBmcm9tLT53b19mZG47CisjIGlmZGVmIEZFQVRfRVZBTAorICAgIHRvLT53b19mZGUgPSB2aW1fc3Ryc2F2ZShmcm9tLT53b19mZGUpOworICAgIHRvLT53b19mZHQgPSB2aW1fc3Ryc2F2ZShmcm9tLT53b19mZHQpOworIyBlbmRpZgorICAgIHRvLT53b19mbXIgPSB2aW1fc3Ryc2F2ZShmcm9tLT53b19mbXIpOworI2VuZGlmCisgICAgY2hlY2tfd2lub3B0KHRvKTsJCS8qIGRvbid0IHdhbnQgTlVMTCBwb2ludGVycyAqLworfQorCisvKgorICogQ2hlY2sgc3RyaW5nIG9wdGlvbnMgaW4gYSB3aW5kb3cgZm9yIGEgTlVMTCB2YWx1ZS4KKyAqLworICAgIHZvaWQKK2NoZWNrX3dpbl9vcHRpb25zKHdpbikKKyAgICB3aW5fVAkqd2luOworeworICAgIGNoZWNrX3dpbm9wdCgmd2luLT53X29uZWJ1Zl9vcHQpOworICAgIGNoZWNrX3dpbm9wdCgmd2luLT53X2FsbGJ1Zl9vcHQpOworfQorCisvKgorICogQ2hlY2sgZm9yIE5VTEwgcG9pbnRlcnMgaW4gYSB3aW5vcHRfVCBhbmQgcmVwbGFjZSB0aGVtIHdpdGggZW1wdHlfb3B0aW9uLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitjaGVja193aW5vcHQod29wKQorICAgIHdpbm9wdF9UCSp3b3A7Cit7CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmd29wLT53b19mZGkpOworICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJndvcC0+d29fZmRtKTsKKyMgaWZkZWYgRkVBVF9FVkFMCisgICAgY2hlY2tfc3RyaW5nX29wdGlvbigmd29wLT53b19mZGUpOworICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJndvcC0+d29fZmR0KTsKKyMgZW5kaWYKKyAgICBjaGVja19zdHJpbmdfb3B0aW9uKCZ3b3AtPndvX2Ztcik7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorICAgIGNoZWNrX3N0cmluZ19vcHRpb24oJndvcC0+d29fcmxjKTsKKyNlbmRpZgorfQorCisvKgorICogRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpbnNpZGUgYSB3aW5vcHRfVC4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorY2xlYXJfd2lub3B0KHdvcCkKKyAgICB3aW5vcHRfVAkqd29wOworeworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJndvcC0+d29fZmRpKTsKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZ3b3AtPndvX2ZkbSk7CisjIGlmZGVmIEZFQVRfRVZBTAorICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJndvcC0+d29fZmRlKTsKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZ3b3AtPndvX2ZkdCk7CisjIGVuZGlmCisgICAgY2xlYXJfc3RyaW5nX29wdGlvbigmd29wLT53b19mbXIpOworI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKyAgICBjbGVhcl9zdHJpbmdfb3B0aW9uKCZ3b3AtPndvX3JsYyk7CisjZW5kaWYKK30KKworLyoKKyAqIENvcHkgZ2xvYmFsIG9wdGlvbiB2YWx1ZXMgdG8gbG9jYWwgb3B0aW9ucyBmb3Igb25lIGJ1ZmZlci4KKyAqIFVzZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBidWZmZXIgYW5kIHNvbWV0aW1lcyB3aGVuIGVudGVyaW5nIGEgYnVmZmVyLgorICogZmxhZ3M6CisgKiBCQ09fRU5URVIJV2Ugd2lsbCBlbnRlciB0aGUgYnVmIGJ1ZmZlci4KKyAqIEJDT19BTFdBWVMJQWx3YXlzIGNvcHkgdGhlIG9wdGlvbnMsIGJ1dCBvbmx5IHNldCBiX3BfaW5pdGlhbGl6ZWQgd2hlbgorICoJCWFwcHJvcHJpYXRlLgorICogQkNPX05PSEVMUAlEb24ndCBjb3B5IHRoZSB2YWx1ZXMgdG8gYSBoZWxwIGJ1ZmZlci4KKyAqLworICAgIHZvaWQKK2J1Zl9jb3B5X29wdGlvbnMoYnVmLCBmbGFncykKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJZmxhZ3M7Cit7CisgICAgaW50CQlzaG91bGRfY29weSA9IFRSVUU7CisgICAgY2hhcl91CSpzYXZlX3BfaXNrID0gTlVMTDsJICAgIC8qIGluaXQgZm9yIEdDQyAqLworICAgIGludAkJZG9udF9kb19oZWxwOworICAgIGludAkJZGlkX2lzayA9IEZBTFNFOworCisgICAgLyoKKyAgICAgKiBEb24ndCBkbyBhbnl0aGluZyBvZiB0aGUgYnVmZmVyIGlzIGludmFsaWQuCisgICAgICovCisgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8ICFidWZfdmFsaWQoYnVmKSkKKwlyZXR1cm47CisKKyAgICAvKgorICAgICAqIFNraXAgdGhpcyB3aGVuIHRoZSBvcHRpb24gZGVmYXVsdHMgaGF2ZSBub3QgYmVlbiBzZXQgeWV0LiAgSGFwcGVucyB3aGVuCisgICAgICogbWFpbigpIGFsbG9jYXRlcyB0aGUgZmlyc3QgYnVmZmVyLgorICAgICAqLworICAgIGlmIChwX2NwbyAhPSBOVUxMKQorICAgIHsKKwkvKgorCSAqIEFsd2F5cyBjb3B5IHdoZW4gZW50ZXJpbmcgYW5kICdjcG8nIGNvbnRhaW5zICdTJy4KKwkgKiBEb24ndCBjb3B5IHdoZW4gYWxyZWFkeSBpbml0aWFsaXplZC4KKwkgKiBEb24ndCBjb3B5IHdoZW4gJ2NwbycgY29udGFpbnMgJ3MnIGFuZCBub3QgZW50ZXJpbmcuCisJICogJ1MnCUJDT19FTlRFUiAgaW5pdGlhbGl6ZWQJJ3MnICBzaG91bGRfY29weQorCSAqIHllcwkgIHllcwkgICAgICAgWAkgWAlUUlVFCisJICogeWVzCSAgbm8JICAgICAgeWVzCSBYCUZBTFNFCisJICogbm8JICAgWAkgICAgICB5ZXMJIFgJRkFMU0UKKwkgKiAgWAkgIG5vCSAgICAgIG5vCXllcwlGQUxTRQorCSAqICBYCSAgbm8JICAgICAgbm8Jbm8JVFJVRQorCSAqIG5vCSAgeWVzCSAgICAgIG5vCSBYCVRSVUUKKwkgKi8KKwlpZiAoKHZpbV9zdHJjaHIocF9jcG8sIENQT19CVUZPUFRHTE9CKSA9PSBOVUxMIHx8ICEoZmxhZ3MgJiBCQ09fRU5URVIpKQorCQkmJiAoYnVmLT5iX3BfaW5pdGlhbGl6ZWQKKwkJICAgIHx8ICghKGZsYWdzICYgQkNPX0VOVEVSKQorCQkJJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0JVRk9QVCkgIT0gTlVMTCkpKQorCSAgICBzaG91bGRfY29weSA9IEZBTFNFOworCisJaWYgKHNob3VsZF9jb3B5IHx8IChmbGFncyAmIEJDT19BTFdBWVMpKQorCXsKKwkgICAgLyogRG9uJ3QgY29weSB0aGUgb3B0aW9ucyBzcGVjaWZpYyB0byBhIGhlbHAgYnVmZmVyIHdoZW4KKwkgICAgICogQkNPX05PSEVMUCBpcyBnaXZlbiBvciB0aGUgb3B0aW9ucyB3ZXJlIGluaXRpYWxpemVkIGFscmVhZHkKKwkgICAgICogKGp1bXBpbmcgYmFjayB0byBhIGhlbHAgZmlsZSB3aXRoIENUUkwtVCBvciBDVFJMLU8pICovCisJICAgIGRvbnRfZG9faGVscCA9ICgoZmxhZ3MgJiBCQ09fTk9IRUxQKSAmJiBidWYtPmJfaGVscCkKKwkJCQkJCSAgICAgICB8fCBidWYtPmJfcF9pbml0aWFsaXplZDsKKwkgICAgaWYgKGRvbnRfZG9faGVscCkJCS8qIGRvbid0IGZyZWUgYl9wX2lzayAqLworCSAgICB7CisJCXNhdmVfcF9pc2sgPSBidWYtPmJfcF9pc2s7CisJCWJ1Zi0+Yl9wX2lzayA9IE5VTEw7CisJICAgIH0KKwkgICAgLyoKKwkgICAgICogQWx3YXlzIGZyZWUgdGhlIGFsbG9jYXRlZCBzdHJpbmdzLgorCSAgICAgKiBJZiBub3QgYWxyZWFkeSBpbml0aWFsaXplZCwgc2V0ICdyZWFkb25seScgYW5kIGNvcHkgJ2ZpbGVmb3JtYXQnLgorCSAgICAgKi8KKwkgICAgaWYgKCFidWYtPmJfcF9pbml0aWFsaXplZCkKKwkgICAgeworCQlmcmVlX2J1Zl9vcHRpb25zKGJ1ZiwgVFJVRSk7CisJCWJ1Zi0+Yl9wX3JvID0gRkFMU0U7CQkvKiBkb24ndCBjb3B5IHJlYWRvbmx5ICovCisJCWJ1Zi0+Yl9wX3R4ID0gcF90eDsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWJ1Zi0+Yl9wX2ZlbmMgPSB2aW1fc3Ryc2F2ZShwX2ZlbmMpOworI2VuZGlmCisJCWJ1Zi0+Yl9wX2ZmID0gdmltX3N0cnNhdmUocF9mZik7CisjaWYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCQlidWYtPmJfcF9iaCA9IGVtcHR5X29wdGlvbjsKKwkJYnVmLT5iX3BfYnQgPSBlbXB0eV9vcHRpb247CisjZW5kaWYKKwkgICAgfQorCSAgICBlbHNlCisJCWZyZWVfYnVmX29wdGlvbnMoYnVmLCBGQUxTRSk7CisKKwkgICAgYnVmLT5iX3BfYWkgPSBwX2FpOworCSAgICBidWYtPmJfcF9haV9ub3Bhc3RlID0gcF9haV9ub3Bhc3RlOworCSAgICBidWYtPmJfcF9zdyA9IHBfc3c7CisJICAgIGJ1Zi0+Yl9wX3R3ID0gcF90dzsKKwkgICAgYnVmLT5iX3BfdHdfbm9wYXN0ZSA9IHBfdHdfbm9wYXN0ZTsKKwkgICAgYnVmLT5iX3BfdHdfbm9iaW4gPSBwX3R3X25vYmluOworCSAgICBidWYtPmJfcF93bSA9IHBfd207CisJICAgIGJ1Zi0+Yl9wX3dtX25vcGFzdGUgPSBwX3dtX25vcGFzdGU7CisJICAgIGJ1Zi0+Yl9wX3dtX25vYmluID0gcF93bV9ub2JpbjsKKwkgICAgYnVmLT5iX3BfYmluID0gcF9iaW47CisJICAgIGJ1Zi0+Yl9wX2V0ID0gcF9ldDsKKwkgICAgYnVmLT5iX3BfZXRfbm9iaW4gPSBwX2V0X25vYmluOworCSAgICBidWYtPmJfcF9tbCA9IHBfbWw7CisJICAgIGJ1Zi0+Yl9wX21sX25vYmluID0gcF9tbF9ub2JpbjsKKwkgICAgYnVmLT5iX3BfaW5mID0gcF9pbmY7CisJICAgIGJ1Zi0+Yl9wX3N3ZiA9IHBfc3dmOworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCSAgICBidWYtPmJfcF9jcHQgPSB2aW1fc3Ryc2F2ZShwX2NwdCk7CisjZW5kaWYKKwkgICAgYnVmLT5iX3Bfc3RzID0gcF9zdHM7CisJICAgIGJ1Zi0+Yl9wX3N0c19ub3Bhc3RlID0gcF9zdHNfbm9wYXN0ZTsKKyNpZm5kZWYgU0hPUlRfRk5BTUUKKwkgICAgYnVmLT5iX3Bfc24gPSBwX3NuOworI2VuZGlmCisjaWZkZWYgRkVBVF9DT01NRU5UUworCSAgICBidWYtPmJfcF9jb20gPSB2aW1fc3Ryc2F2ZShwX2NvbSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgYnVmLT5iX3BfY21zID0gdmltX3N0cnNhdmUocF9jbXMpOworI2VuZGlmCisJICAgIGJ1Zi0+Yl9wX2ZvID0gdmltX3N0cnNhdmUocF9mbyk7CisJICAgIGJ1Zi0+Yl9wX25mID0gdmltX3N0cnNhdmUocF9uZik7CisJICAgIGJ1Zi0+Yl9wX21wcyA9IHZpbV9zdHJzYXZlKHBfbXBzKTsKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisJICAgIGJ1Zi0+Yl9wX3NpID0gcF9zaTsKKyNlbmRpZgorCSAgICBidWYtPmJfcF9jaSA9IHBfY2k7CisjaWZkZWYgRkVBVF9DSU5ERU5UCisJICAgIGJ1Zi0+Yl9wX2NpbiA9IHBfY2luOworCSAgICBidWYtPmJfcF9jaW5rID0gdmltX3N0cnNhdmUocF9jaW5rKTsKKwkgICAgYnVmLT5iX3BfY2lubyA9IHZpbV9zdHJzYXZlKHBfY2lubyk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgLyogRG9uJ3QgY29weSAnZmlsZXR5cGUnLCBpdCBtdXN0IGJlIGRldGVjdGVkICovCisJICAgIGJ1Zi0+Yl9wX2Z0ID0gZW1wdHlfb3B0aW9uOworI2VuZGlmCisjaWZkZWYgRkVBVF9PU0ZJTEVUWVBFCisJICAgIGJ1Zi0+Yl9wX29mdCA9IHZpbV9zdHJzYXZlKHBfb2Z0KTsKKyNlbmRpZgorCSAgICBidWYtPmJfcF9waSA9IHBfcGk7CisjaWYgZGVmaW5lZChGRUFUX1NNQVJUSU5ERU5UKSB8fCBkZWZpbmVkKEZFQVRfQ0lOREVOVCkKKwkgICAgYnVmLT5iX3BfY2ludyA9IHZpbV9zdHJzYXZlKHBfY2ludyk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0xJU1AKKwkgICAgYnVmLT5iX3BfbGlzcCA9IHBfbGlzcDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU1lOX0hMCisJICAgIC8qIERvbid0IGNvcHkgJ3N5bnRheCcsIGl0IG11c3QgYmUgc2V0ICovCisJICAgIGJ1Zi0+Yl9wX3N5biA9IGVtcHR5X29wdGlvbjsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9DSU5ERU5UKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwkgICAgYnVmLT5iX3BfaW5kZSA9IHZpbV9zdHJzYXZlKHBfaW5kZSk7CisJICAgIGJ1Zi0+Yl9wX2luZGsgPSB2aW1fc3Ryc2F2ZShwX2luZGspOworI2VuZGlmCisjaWZkZWYgRkVBVF9DUllQVAorCSAgICBidWYtPmJfcF9rZXkgPSB2aW1fc3Ryc2F2ZShwX2tleSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1NFQVJDSFBBVEgKKwkgICAgYnVmLT5iX3Bfc3VhID0gdmltX3N0cnNhdmUocF9zdWEpOworI2VuZGlmCisjaWZkZWYgRkVBVF9LRVlNQVAKKwkgICAgYnVmLT5iX3Bfa2V5bWFwID0gdmltX3N0cnNhdmUocF9rZXltYXApOworCSAgICBidWYtPmJfa21hcF9zdGF0ZSB8PSBLRVlNQVBfSU5JVDsKKyNlbmRpZgorCSAgICAvKiBUaGlzIGlzbid0IHJlYWxseSBhbiBvcHRpb24sIGJ1dCBjb3B5aW5nIHRoZSBsYW5nbWFwIGFuZCBJTUUKKwkgICAgICogc3RhdGUgZnJvbSB0aGUgY3VycmVudCBidWZmZXIgaXMgYmV0dGVyIHRoYW4gcmVzZXR0aW5nIGl0LiAqLworCSAgICBidWYtPmJfcF9pbWluc2VydCA9IHBfaW1pbnNlcnQ7CisJICAgIGJ1Zi0+Yl9wX2ltc2VhcmNoID0gcF9pbXNlYXJjaDsKKworCSAgICAvKiBvcHRpb25zIHRoYXQgYXJlIG5vcm1hbGx5IGdsb2JhbCBidXQgYWxzbyBoYXZlIGEgbG9jYWwgdmFsdWUKKwkgICAgICogYXJlIG5vdCBjb3BpZWQsIHN0YXJ0IHVzaW5nIHRoZSBnbG9iYWwgdmFsdWUgKi8KKwkgICAgYnVmLT5iX3BfYXIgPSAtMTsKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJICAgIGJ1Zi0+Yl9wX2dwID0gZW1wdHlfb3B0aW9uOworCSAgICBidWYtPmJfcF9tcCA9IGVtcHR5X29wdGlvbjsKKwkgICAgYnVmLT5iX3BfZWZtID0gZW1wdHlfb3B0aW9uOworI2VuZGlmCisJICAgIGJ1Zi0+Yl9wX2VwID0gZW1wdHlfb3B0aW9uOworCSAgICBidWYtPmJfcF9rcCA9IGVtcHR5X29wdGlvbjsKKwkgICAgYnVmLT5iX3BfcGF0aCA9IGVtcHR5X29wdGlvbjsKKwkgICAgYnVmLT5iX3BfdGFncyA9IGVtcHR5X29wdGlvbjsKKyNpZmRlZiBGRUFUX0ZJTkRfSUQKKwkgICAgYnVmLT5iX3BfZGVmID0gZW1wdHlfb3B0aW9uOworCSAgICBidWYtPmJfcF9pbmMgPSBlbXB0eV9vcHRpb247CisjIGlmZGVmIEZFQVRfRVZBTAorCSAgICBidWYtPmJfcF9pbmV4ID0gdmltX3N0cnNhdmUocF9pbmV4KTsKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCSAgICBidWYtPmJfcF9kaWN0ID0gZW1wdHlfb3B0aW9uOworCSAgICBidWYtPmJfcF90c3IgPSBlbXB0eV9vcHRpb247CisjZW5kaWYKKworCSAgICAvKgorCSAgICAgKiBEb24ndCBjb3B5IHRoZSBvcHRpb25zIHNldCBieSBleF9oZWxwKCksIHVzZSB0aGUgc2F2ZWQgdmFsdWVzLAorCSAgICAgKiB3aGVuIGdvaW5nIGZyb20gYSBoZWxwIGJ1ZmZlciB0byBhIG5vbi1oZWxwIGJ1ZmZlci4KKwkgICAgICogRG9uJ3QgdG91Y2ggdGhlc2UgYXQgYWxsIHdoZW4gQkNPX05PSEVMUCBpcyB1c2VkIGFuZCBnb2luZyBmcm9tCisJICAgICAqIG9yIHRvIGEgaGVscCBidWZmZXIuCisJICAgICAqLworCSAgICBpZiAoZG9udF9kb19oZWxwKQorCQlidWYtPmJfcF9pc2sgPSBzYXZlX3BfaXNrOworCSAgICBlbHNlCisJICAgIHsKKwkJYnVmLT5iX3BfaXNrID0gdmltX3N0cnNhdmUocF9pc2spOworCQlkaWRfaXNrID0gVFJVRTsKKwkJYnVmLT5iX3BfdHMgPSBwX3RzOworCQlidWYtPmJfaGVscCA9IEZBTFNFOworI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKwkJaWYgKGJ1Zi0+Yl9wX2J0WzBdID09ICdoJykKKwkJICAgIGNsZWFyX3N0cmluZ19vcHRpb24oJmJ1Zi0+Yl9wX2J0KTsKKyNlbmRpZgorCQlidWYtPmJfcF9tYSA9IHBfbWE7CisJICAgIH0KKwl9CisKKwkvKgorCSAqIFdoZW4gdGhlIG9wdGlvbnMgc2hvdWxkIGJlIGNvcGllZCAoaWdub3JpbmcgQkNPX0FMV0FZUyksIHNldCB0aGUKKwkgKiBmbGFnIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIG9wdGlvbnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLgorCSAqLworCWlmIChzaG91bGRfY29weSkKKwkgICAgYnVmLT5iX3BfaW5pdGlhbGl6ZWQgPSBUUlVFOworICAgIH0KKworICAgIGNoZWNrX2J1Zl9vcHRpb25zKGJ1Zik7CSAgICAvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBOVUxMcyAqLworICAgIGlmIChkaWRfaXNrKQorCSh2b2lkKWJ1Zl9pbml0X2NoYXJ0YWIoYnVmLCBGQUxTRSk7Cit9CisKKy8qCisgKiBSZXNldCB0aGUgJ21vZGlmaWFibGUnIG9wdGlvbiBhbmQgaXRzIGRlZmF1bHQgdmFsdWUuCisgKi8KKyAgICB2b2lkCityZXNldF9tb2RpZmlhYmxlKCkKK3sKKyAgICBpbnQJCW9wdF9pZHg7CisKKyAgICBjdXJidWYtPmJfcF9tYSA9IEZBTFNFOworICAgIHBfbWEgPSBGQUxTRTsKKyAgICBvcHRfaWR4ID0gZmluZG9wdGlvbigoY2hhcl91ICopIm1hIik7CisgICAgb3B0aW9uc1tvcHRfaWR4XS5kZWZfdmFsW1ZJX0RFRkFVTFRdID0gRkFMU0U7Cit9CisKKy8qCisgKiBTZXQgdGhlIGdsb2JhbCB2YWx1ZSBmb3IgJ2ltaW5zZXJ0JyB0byB0aGUgbG9jYWwgdmFsdWUuCisgKi8KKyAgICB2b2lkCitzZXRfaW1pbnNlcnRfZ2xvYmFsKCkKK3sKKyAgICBwX2ltaW5zZXJ0ID0gY3VyYnVmLT5iX3BfaW1pbnNlcnQ7Cit9CisKKy8qCisgKiBTZXQgdGhlIGdsb2JhbCB2YWx1ZSBmb3IgJ2ltc2VhcmNoJyB0byB0aGUgbG9jYWwgdmFsdWUuCisgKi8KKyAgICB2b2lkCitzZXRfaW1zZWFyY2hfZ2xvYmFsKCkKK3sKKyAgICBwX2ltc2VhcmNoID0gY3VyYnVmLT5iX3BfaW1zZWFyY2g7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBpbnQgZXhwYW5kX29wdGlvbl9pZHggPSAtMTsKK3N0YXRpYyBjaGFyX3UgZXhwYW5kX29wdGlvbl9uYW1lWzVdID0geyd0JywgJ18nLCBOVUwsIE5VTCwgTlVMfTsKK3N0YXRpYyBpbnQgZXhwYW5kX29wdGlvbl9mbGFncyA9IDA7CisKKyAgICB2b2lkCitzZXRfY29udGV4dF9pbl9zZXRfY21kKHhwLCBhcmcsIG9wdF9mbGFncykKKyAgICBleHBhbmRfVAkqeHA7CisgICAgY2hhcl91CSphcmc7CisgICAgaW50CQlvcHRfZmxhZ3M7CS8qIE9QVF9HTE9CQUwgYW5kL29yIE9QVF9MT0NBTCAqLworeworICAgIGludAkJbmV4dGNoYXI7CisgICAgbG9uZ191CWZsYWdzID0gMDsJLyogaW5pdCBmb3IgR0NDICovCisgICAgaW50CQlvcHRfaWR4ID0gMDsJLyogaW5pdCBmb3IgR0NDICovCisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWlzX3Rlcm1fb3B0aW9uID0gRkFMU0U7CisgICAgaW50CQlrZXk7CisKKyAgICBleHBhbmRfb3B0aW9uX2ZsYWdzID0gb3B0X2ZsYWdzOworCisgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfU0VUVElOR1M7CisgICAgaWYgKCphcmcgPT0gTlVMKQorICAgIHsKKwl4cC0+eHBfcGF0dGVybiA9IGFyZzsKKwlyZXR1cm47CisgICAgfQorICAgIHAgPSBhcmcgKyBTVFJMRU4oYXJnKSAtIDE7CisgICAgaWYgKCpwID09ICcgJyAmJiAqKHAgLSAxKSAhPSAnXFwnKQorICAgIHsKKwl4cC0+eHBfcGF0dGVybiA9IHAgKyAxOworCXJldHVybjsKKyAgICB9CisgICAgd2hpbGUgKHAgPiBhcmcpCisgICAgeworCXMgPSBwOworCS8qIGNvdW50IG51bWJlciBvZiBiYWNrc2xhc2hlcyBiZWZvcmUgJyAnIG9yICcsJyAqLworCWlmICgqcCA9PSAnICcgfHwgKnAgPT0gJywnKQorCXsKKwkgICAgd2hpbGUgKHMgPiBhcmcgJiYgKihzIC0gMSkgPT0gJ1xcJykKKwkJLS1zOworCX0KKwkvKiBicmVhayBhdCBhIHNwYWNlIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgYmFja3NsYXNoZXMgKi8KKwlpZiAoKnAgPT0gJyAnICYmICgocCAtIHMpICYgMSkgPT0gMCkKKwl7CisJICAgICsrcDsKKwkgICAgYnJlYWs7CisJfQorCS0tcDsKKyAgICB9CisgICAgaWYgKFNUUk5DTVAocCwgIm5vIiwgMikgPT0gMCkKKyAgICB7CisJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfQk9PTF9TRVRUSU5HUzsKKwlwICs9IDI7CisgICAgfQorICAgIGlmIChTVFJOQ01QKHAsICJpbnYiLCAzKSA9PSAwKQorICAgIHsKKwl4cC0+eHBfY29udGV4dCA9IEVYUEFORF9CT09MX1NFVFRJTkdTOworCXAgKz0gMzsKKyAgICB9CisgICAgeHAtPnhwX3BhdHRlcm4gPSBhcmcgPSBwOworICAgIGlmICgqYXJnID09ICc8JykKKyAgICB7CisJd2hpbGUgKCpwICE9ICc+JykKKwkgICAgaWYgKCpwKysgPT0gTlVMKQkgICAgLyogZXhwYW5kIHRlcm1pbmFsIG9wdGlvbiBuYW1lICovCisJCXJldHVybjsKKwlrZXkgPSBnZXRfc3BlY2lhbF9rZXlfY29kZShhcmcgKyAxKTsKKwlpZiAoa2V5ID09IDApCQkgICAgLyogdW5rbm93biBuYW1lICovCisJeworCSAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9OT1RISU5HOworCSAgICByZXR1cm47CisJfQorCW5leHRjaGFyID0gKisrcDsKKwlpc190ZXJtX29wdGlvbiA9IFRSVUU7CisJZXhwYW5kX29wdGlvbl9uYW1lWzJdID0gS0VZMlRFUk1DQVAwKGtleSk7CisJZXhwYW5kX29wdGlvbl9uYW1lWzNdID0gS0VZMlRFUk1DQVAxKGtleSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKHBbMF0gPT0gJ3QnICYmIHBbMV0gPT0gJ18nKQorCXsKKwkgICAgcCArPSAyOworCSAgICBpZiAoKnAgIT0gTlVMKQorCQkrK3A7CisJICAgIGlmICgqcCA9PSBOVUwpCisJCXJldHVybjsJCS8qIGV4cGFuZCBvcHRpb24gbmFtZSAqLworCSAgICBuZXh0Y2hhciA9ICorK3A7CisJICAgIGlzX3Rlcm1fb3B0aW9uID0gVFJVRTsKKwkgICAgZXhwYW5kX29wdGlvbl9uYW1lWzJdID0gcFstMl07CisJICAgIGV4cGFuZF9vcHRpb25fbmFtZVszXSA9IHBbLTFdOworCX0KKwllbHNlCisJeworCQkvKiBBbGxvdyAqIHdpbGRjYXJkICovCisJICAgIHdoaWxlIChBU0NJSV9JU0FMTlVNKCpwKSB8fCAqcCA9PSAnXycgfHwgKnAgPT0gJyonKQorCQlwKys7CisJICAgIGlmICgqcCA9PSBOVUwpCisJCXJldHVybjsKKwkgICAgbmV4dGNoYXIgPSAqcDsKKwkgICAgKnAgPSBOVUw7CisJICAgIG9wdF9pZHggPSBmaW5kb3B0aW9uKGFyZyk7CisJICAgICpwID0gbmV4dGNoYXI7CisJICAgIGlmIChvcHRfaWR4ID09IC0xIHx8IG9wdGlvbnNbb3B0X2lkeF0udmFyID09IE5VTEwpCisJICAgIHsKKwkJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKwkJcmV0dXJuOworCSAgICB9CisJICAgIGZsYWdzID0gb3B0aW9uc1tvcHRfaWR4XS5mbGFnczsKKwkgICAgaWYgKGZsYWdzICYgUF9CT09MKQorCSAgICB7CisJCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX05PVEhJTkc7CisJCXJldHVybjsKKwkgICAgfQorCX0KKyAgICB9CisgICAgLyogaGFuZGxlICItPSIgYW5kICIrPSIgKi8KKyAgICBpZiAoKG5leHRjaGFyID09ICctJyB8fCBuZXh0Y2hhciA9PSAnKycgfHwgbmV4dGNoYXIgPT0gJ14nKSAmJiBwWzFdID09ICc9JykKKyAgICB7CisJKytwOworCW5leHRjaGFyID0gJz0nOworICAgIH0KKyAgICBpZiAoKG5leHRjaGFyICE9ICc9JyAmJiBuZXh0Y2hhciAhPSAnOicpCisJCQkJICAgIHx8IHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9CT09MX1NFVFRJTkdTKQorICAgIHsKKwl4cC0+eHBfY29udGV4dCA9IEVYUEFORF9VTlNVQ0NFU1NGVUw7CisJcmV0dXJuOworICAgIH0KKyAgICBpZiAoeHAtPnhwX2NvbnRleHQgIT0gRVhQQU5EX0JPT0xfU0VUVElOR1MgJiYgcFsxXSA9PSBOVUwpCisgICAgeworCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX09MRF9TRVRUSU5HOworCWlmIChpc190ZXJtX29wdGlvbikKKwkgICAgZXhwYW5kX29wdGlvbl9pZHggPSAtMTsKKwllbHNlCisJICAgIGV4cGFuZF9vcHRpb25faWR4ID0gb3B0X2lkeDsKKwl4cC0+eHBfcGF0dGVybiA9IHAgKyAxOworCXJldHVybjsKKyAgICB9CisgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKyAgICBpZiAoaXNfdGVybV9vcHRpb24gfHwgKGZsYWdzICYgUF9OVU0pKQorCXJldHVybjsKKworICAgIHhwLT54cF9wYXR0ZXJuID0gcCArIDE7CisKKyAgICBpZiAoZmxhZ3MgJiBQX0VYUEFORCkKKyAgICB7CisJcCA9IG9wdGlvbnNbb3B0X2lkeF0udmFyOworCWlmIChwID09IChjaGFyX3UgKikmcF9iZGlyCisJCXx8IHAgPT0gKGNoYXJfdSAqKSZwX2RpcgorCQl8fCBwID09IChjaGFyX3UgKikmcF9wYXRoCisJCXx8IHAgPT0gKGNoYXJfdSAqKSZwX3J0cAorI2lmZGVmIEZFQVRfU0VBUkNIUEFUSAorCQl8fCBwID09IChjaGFyX3UgKikmcF9jZHBhdGgKKyNlbmRpZgorI2lmZGVmIEZFQVRfU0VTU0lPTgorCQl8fCBwID09IChjaGFyX3UgKikmcF92ZGlyCisjZW5kaWYKKwkJKQorCXsKKwkgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfRElSRUNUT1JJRVM7CisJICAgIGlmIChwID09IChjaGFyX3UgKikmcF9wYXRoCisjaWZkZWYgRkVBVF9TRUFSQ0hQQVRICisJCSAgICB8fCBwID09IChjaGFyX3UgKikmcF9jZHBhdGgKKyNlbmRpZgorCQkgICApCisJCXhwLT54cF9iYWNrc2xhc2ggPSBYUF9CU19USFJFRTsKKwkgICAgZWxzZQorCQl4cC0+eHBfYmFja3NsYXNoID0gWFBfQlNfT05FOworCX0KKwllbHNlCisJeworCSAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9GSUxFUzsKKwkgICAgLyogZm9yICd0YWdzJyBuZWVkIHRocmVlIGJhY2tzbGFzaGVzIGZvciBhIHNwYWNlICovCisJICAgIGlmIChwID09IChjaGFyX3UgKikmcF90YWdzKQorCQl4cC0+eHBfYmFja3NsYXNoID0gWFBfQlNfVEhSRUU7CisJICAgIGVsc2UKKwkJeHAtPnhwX2JhY2tzbGFzaCA9IFhQX0JTX09ORTsKKwl9CisgICAgfQorCisgICAgLyogRm9yIGFuIG9wdGlvbiB0aGF0IGlzIGEgbGlzdCBvZiBmaWxlIG5hbWVzLCBmaW5kIHRoZSBzdGFydCBvZiB0aGUKKyAgICAgKiBsYXN0IGZpbGUgbmFtZS4gKi8KKyAgICBmb3IgKHAgPSBhcmcgKyBTVFJMRU4oYXJnKSAtIDE7IHAgPiB4cC0+eHBfcGF0dGVybjsgLS1wKQorICAgIHsKKwkvKiBjb3VudCBudW1iZXIgb2YgYmFja3NsYXNoZXMgYmVmb3JlICcgJyBvciAnLCcgKi8KKwlpZiAoKnAgPT0gJyAnIHx8ICpwID09ICcsJykKKwl7CisJICAgIHMgPSBwOworCSAgICB3aGlsZSAocyA+IHhwLT54cF9wYXR0ZXJuICYmICoocyAtIDEpID09ICdcXCcpCisJCS0tczsKKwkgICAgaWYgKCgqcCA9PSAnICcgJiYgKHhwLT54cF9iYWNrc2xhc2ggPT0gWFBfQlNfVEhSRUUgJiYgKHAgLSBzKSA8IDMpKQorCQkgICAgfHwgKCpwID09ICcsJyAmJiAoZmxhZ3MgJiBQX0NPTU1BKSAmJiAoKHAgLSBzKSAmIDEpID09IDApKQorCSAgICB7CisJCXhwLT54cF9wYXR0ZXJuID0gcCArIDE7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVybjsKK30KKworICAgIGludAorRXhwYW5kU2V0dGluZ3MoeHAsIHJlZ21hdGNoLCBudW1fZmlsZSwgZmlsZSkKKyAgICBleHBhbmRfVAkqeHA7CisgICAgcmVnbWF0Y2hfVAkqcmVnbWF0Y2g7CisgICAgaW50CQkqbnVtX2ZpbGU7CisgICAgY2hhcl91CSoqKmZpbGU7Cit7CisgICAgaW50CQludW1fbm9ybWFsID0gMDsJICAgIC8qIE5yIG9mIG1hdGNoaW5nIG5vbi10ZXJtLWNvZGUgc2V0dGluZ3MgKi8KKyAgICBpbnQJCW51bV90ZXJtID0gMDsJICAgIC8qIE5yIG9mIG1hdGNoaW5nIHRlcm1pbmFsIGNvZGUgc2V0dGluZ3MgKi8KKyAgICBpbnQJCW9wdF9pZHg7CisgICAgaW50CQltYXRjaDsKKyAgICBpbnQJCWNvdW50ID0gMDsKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBpbnQJCWxvb3A7CisgICAgaW50CQlpc190ZXJtX29wdDsKKyAgICBjaGFyX3UJbmFtZV9idWZbTUFYX0tFWV9OQU1FX0xFTl07CisgICAgc3RhdGljIGNoYXIgKihuYW1lc1tdKSA9IHsiYWxsIiwgInRlcm1jYXAifTsKKyAgICBpbnQJCWljID0gcmVnbWF0Y2gtPnJtX2ljOwkvKiByZW1lbWJlciB0aGUgaWdub3JlLWNhc2UgZmxhZyAqLworCisgICAgLyogZG8gdGhpcyBsb29wIHR3aWNlOgorICAgICAqIGxvb3AgPT0gMDogY291bnQgdGhlIG51bWJlciBvZiBtYXRjaGluZyBvcHRpb25zCisgICAgICogbG9vcCA9PSAxOiBjb3B5IHRoZSBtYXRjaGluZyBvcHRpb25zIGludG8gYWxsb2NhdGVkIG1lbW9yeQorICAgICAqLworICAgIGZvciAobG9vcCA9IDA7IGxvb3AgPD0gMTsgKytsb29wKQorICAgIHsKKwlyZWdtYXRjaC0+cm1faWMgPSBpYzsKKwlpZiAoeHAtPnhwX2NvbnRleHQgIT0gRVhQQU5EX0JPT0xfU0VUVElOR1MpCisJeworCSAgICBmb3IgKG1hdGNoID0gMDsgbWF0Y2ggPCBzaXplb2YobmFtZXMpIC8gc2l6ZW9mKGNoYXIgKik7ICsrbWF0Y2gpCisJCWlmICh2aW1fcmVnZXhlYyhyZWdtYXRjaCwgKGNoYXJfdSAqKW5hbWVzW21hdGNoXSwgKGNvbG5yX1QpMCkpCisJCXsKKwkJICAgIGlmIChsb29wID09IDApCisJCQludW1fbm9ybWFsKys7CisJCSAgICBlbHNlCisJCQkoKmZpbGUpW2NvdW50KytdID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKW5hbWVzW21hdGNoXSk7CisJCX0KKwl9CisJZm9yIChvcHRfaWR4ID0gMDsgKHN0ciA9IChjaGFyX3UgKilvcHRpb25zW29wdF9pZHhdLmZ1bGxuYW1lKSAhPSBOVUxMOworCQkJCQkJCQkgICAgb3B0X2lkeCsrKQorCXsKKwkgICAgaWYgKG9wdGlvbnNbb3B0X2lkeF0udmFyID09IE5VTEwpCisJCWNvbnRpbnVlOworCSAgICBpZiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0JPT0xfU0VUVElOR1MKKwkgICAgICAmJiAhKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiBQX0JPT0wpKQorCQljb250aW51ZTsKKwkgICAgaXNfdGVybV9vcHQgPSBpc3Rlcm1vcHRpb24oJm9wdGlvbnNbb3B0X2lkeF0pOworCSAgICBpZiAoaXNfdGVybV9vcHQgJiYgbnVtX25vcm1hbCA+IDApCisJCWNvbnRpbnVlOworCSAgICBtYXRjaCA9IEZBTFNFOworCSAgICBpZiAodmltX3JlZ2V4ZWMocmVnbWF0Y2gsIHN0ciwgKGNvbG5yX1QpMCkKKwkJICAgIHx8IChvcHRpb25zW29wdF9pZHhdLnNob3J0bmFtZSAhPSBOVUxMCisJCQkmJiB2aW1fcmVnZXhlYyhyZWdtYXRjaCwKKwkJCSAgIChjaGFyX3UgKilvcHRpb25zW29wdF9pZHhdLnNob3J0bmFtZSwgKGNvbG5yX1QpMCkpKQorCQltYXRjaCA9IFRSVUU7CisJICAgIGVsc2UgaWYgKGlzX3Rlcm1fb3B0KQorCSAgICB7CisJCW5hbWVfYnVmWzBdID0gJzwnOworCQluYW1lX2J1ZlsxXSA9ICd0JzsKKwkJbmFtZV9idWZbMl0gPSAnXyc7CisJCW5hbWVfYnVmWzNdID0gc3RyWzJdOworCQluYW1lX2J1Zls0XSA9IHN0clszXTsKKwkJbmFtZV9idWZbNV0gPSAnPic7CisJCW5hbWVfYnVmWzZdID0gTlVMOworCQlpZiAodmltX3JlZ2V4ZWMocmVnbWF0Y2gsIG5hbWVfYnVmLCAoY29sbnJfVCkwKSkKKwkJeworCQkgICAgbWF0Y2ggPSBUUlVFOworCQkgICAgc3RyID0gbmFtZV9idWY7CisJCX0KKwkgICAgfQorCSAgICBpZiAobWF0Y2gpCisJICAgIHsKKwkJaWYgKGxvb3AgPT0gMCkKKwkJeworCQkgICAgaWYgKGlzX3Rlcm1fb3B0KQorCQkJbnVtX3Rlcm0rKzsKKwkJICAgIGVsc2UKKwkJCW51bV9ub3JtYWwrKzsKKwkJfQorCQllbHNlCisJCSAgICAoKmZpbGUpW2NvdW50KytdID0gdmltX3N0cnNhdmUoc3RyKTsKKwkgICAgfQorCX0KKwkvKgorCSAqIENoZWNrIHRlcm1pbmFsIGtleSBjb2RlcywgdGhlc2UgYXJlIG5vdCBpbiB0aGUgb3B0aW9uIHRhYmxlCisJICovCisJaWYgKHhwLT54cF9jb250ZXh0ICE9IEVYUEFORF9CT09MX1NFVFRJTkdTICAmJiBudW1fbm9ybWFsID09IDApCisJeworCSAgICBmb3IgKG9wdF9pZHggPSAwOyAoc3RyID0gZ2V0X3Rlcm1jb2RlKG9wdF9pZHgpKSAhPSBOVUxMOyBvcHRfaWR4KyspCisJICAgIHsKKwkJaWYgKCFpc3ByaW50KHN0clswXSkgfHwgIWlzcHJpbnQoc3RyWzFdKSkKKwkJICAgIGNvbnRpbnVlOworCisJCW5hbWVfYnVmWzBdID0gJ3QnOworCQluYW1lX2J1ZlsxXSA9ICdfJzsKKwkJbmFtZV9idWZbMl0gPSBzdHJbMF07CisJCW5hbWVfYnVmWzNdID0gc3RyWzFdOworCQluYW1lX2J1Zls0XSA9IE5VTDsKKworCQltYXRjaCA9IEZBTFNFOworCQlpZiAodmltX3JlZ2V4ZWMocmVnbWF0Y2gsIG5hbWVfYnVmLCAoY29sbnJfVCkwKSkKKwkJICAgIG1hdGNoID0gVFJVRTsKKwkJZWxzZQorCQl7CisJCSAgICBuYW1lX2J1ZlswXSA9ICc8JzsKKwkJICAgIG5hbWVfYnVmWzFdID0gJ3QnOworCQkgICAgbmFtZV9idWZbMl0gPSAnXyc7CisJCSAgICBuYW1lX2J1ZlszXSA9IHN0clswXTsKKwkJICAgIG5hbWVfYnVmWzRdID0gc3RyWzFdOworCQkgICAgbmFtZV9idWZbNV0gPSAnPic7CisJCSAgICBuYW1lX2J1Zls2XSA9IE5VTDsKKworCQkgICAgaWYgKHZpbV9yZWdleGVjKHJlZ21hdGNoLCBuYW1lX2J1ZiwgKGNvbG5yX1QpMCkpCisJCQltYXRjaCA9IFRSVUU7CisJCX0KKwkJaWYgKG1hdGNoKQorCQl7CisJCSAgICBpZiAobG9vcCA9PSAwKQorCQkJbnVtX3Rlcm0rKzsKKwkJICAgIGVsc2UKKwkJCSgqZmlsZSlbY291bnQrK10gPSB2aW1fc3Ryc2F2ZShuYW1lX2J1Zik7CisJCX0KKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIENoZWNrIHNwZWNpYWwga2V5IG5hbWVzLgorCSAgICAgKi8KKwkgICAgcmVnbWF0Y2gtPnJtX2ljID0gVFJVRTsJCS8qIGlnbm9yZSBjYXNlIGhlcmUgKi8KKwkgICAgZm9yIChvcHRfaWR4ID0gMDsgKHN0ciA9IGdldF9rZXlfbmFtZShvcHRfaWR4KSkgIT0gTlVMTDsgb3B0X2lkeCsrKQorCSAgICB7CisJCW5hbWVfYnVmWzBdID0gJzwnOworCQlTVFJDUFkobmFtZV9idWYgKyAxLCBzdHIpOworCQlTVFJDQVQobmFtZV9idWYsICI+Iik7CisKKwkJaWYgKHZpbV9yZWdleGVjKHJlZ21hdGNoLCBuYW1lX2J1ZiwgKGNvbG5yX1QpMCkpCisJCXsKKwkJICAgIGlmIChsb29wID09IDApCisJCQludW1fdGVybSsrOworCQkgICAgZWxzZQorCQkJKCpmaWxlKVtjb3VudCsrXSA9IHZpbV9zdHJzYXZlKG5hbWVfYnVmKTsKKwkJfQorCSAgICB9CisJfQorCWlmIChsb29wID09IDApCisJeworCSAgICBpZiAobnVtX25vcm1hbCA+IDApCisJCSpudW1fZmlsZSA9IG51bV9ub3JtYWw7CisJICAgIGVsc2UgaWYgKG51bV90ZXJtID4gMCkKKwkJKm51bV9maWxlID0gbnVtX3Rlcm07CisJICAgIGVsc2UKKwkJcmV0dXJuIE9LOworCSAgICAqZmlsZSA9IChjaGFyX3UgKiopYWxsb2MoKHVuc2lnbmVkKSgqbnVtX2ZpbGUgKiBzaXplb2YoY2hhcl91ICopKSk7CisJICAgIGlmICgqZmlsZSA9PSBOVUxMKQorCSAgICB7CisJCSpmaWxlID0gKGNoYXJfdSAqKikiIjsKKwkJcmV0dXJuIEZBSUw7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworICAgIGludAorRXhwYW5kT2xkU2V0dGluZyhudW1fZmlsZSwgZmlsZSkKKyAgICBpbnQJICAgICpudW1fZmlsZTsKKyAgICBjaGFyX3UgICoqKmZpbGU7Cit7CisgICAgY2hhcl91ICAqdmFyID0gTlVMTDsJLyogaW5pdCBmb3IgR0NDICovCisgICAgY2hhcl91ICAqYnVmOworCisgICAgKm51bV9maWxlID0gMDsKKyAgICAqZmlsZSA9IChjaGFyX3UgKiopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihjaGFyX3UgKikpOworICAgIGlmICgqZmlsZSA9PSBOVUxMKQorCXJldHVybiBGQUlMOworCisgICAgLyoKKyAgICAgKiBGb3IgYSB0ZXJtaW5hbCBrZXkgY29kZSBleHBhbmRfb3B0aW9uX2lkeCBpcyA8IDAuCisgICAgICovCisgICAgaWYgKGV4cGFuZF9vcHRpb25faWR4IDwgMCkKKyAgICB7CisJdmFyID0gZmluZF90ZXJtY29kZShleHBhbmRfb3B0aW9uX25hbWUgKyAyKTsKKwlpZiAodmFyID09IE5VTEwpCisJICAgIGV4cGFuZF9vcHRpb25faWR4ID0gZmluZG9wdGlvbihleHBhbmRfb3B0aW9uX25hbWUpOworICAgIH0KKworICAgIGlmIChleHBhbmRfb3B0aW9uX2lkeCA+PSAwKQorICAgIHsKKwkvKiBwdXQgc3RyaW5nIG9mIG9wdGlvbiB2YWx1ZSBpbiBOYW1lQnVmZiAqLworCW9wdGlvbl92YWx1ZTJzdHJpbmcoJm9wdGlvbnNbZXhwYW5kX29wdGlvbl9pZHhdLCBleHBhbmRfb3B0aW9uX2ZsYWdzKTsKKwl2YXIgPSBOYW1lQnVmZjsKKyAgICB9CisgICAgZWxzZSBpZiAodmFyID09IE5VTEwpCisJdmFyID0gKGNoYXJfdSAqKSIiOworCisgICAgLyogQSBiYWNrc2xhc2ggaXMgcmVxdWlyZWQgYmVmb3JlIHNvbWUgY2hhcmFjdGVycy4gIFRoaXMgaXMgdGhlIHJldmVyc2Ugb2YKKyAgICAgKiB3aGF0IGhhcHBlbnMgaW4gZG9fc2V0KCkuICovCisgICAgYnVmID0gdmltX3N0cnNhdmVfZXNjYXBlZCh2YXIsIGVzY2FwZV9jaGFycyk7CisKKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgeworCXZpbV9mcmVlKCpmaWxlKTsKKwkqZmlsZSA9IE5VTEw7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisgICAgLyogRm9yIE1TLVdpbmRvd3MgZXQgYWwuIHdlIGRvbid0IGRvdWJsZSBiYWNrc2xhc2hlcyBhdCB0aGUgc3RhcnQgYW5kCisgICAgICogYmVmb3JlIGEgZmlsZSBuYW1lIGNoYXJhY3Rlci4gKi8KKyAgICBmb3IgKHZhciA9IGJ1ZjsgKnZhciAhPSBOVUw7ICkKKyAgICB7CisJaWYgKHZhclswXSA9PSAnXFwnICYmIHZhclsxXSA9PSAnXFwnCisJCSYmIGV4cGFuZF9vcHRpb25faWR4ID49IDAKKwkJJiYgKG9wdGlvbnNbZXhwYW5kX29wdGlvbl9pZHhdLmZsYWdzICYgUF9FWFBBTkQpCisJCSYmIHZpbV9pc2ZpbGVjKHZhclsyXSkKKwkJJiYgKHZhclsyXSAhPSAnXFwnIHx8ICh2YXIgPT0gYnVmICYmIHZhcls0XSAhPSAnXFwnKSkpCisJICAgIG1jaF9tZW1tb3ZlKHZhciwgdmFyICsgMSwgU1RSTEVOKHZhcikpOworI2lmZGVmIEZFQVRfTUJZVEUKKwllbHNlIGlmIChoYXNfbWJ5dGUpCisJICAgIHZhciArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHZhcikgLSAxOworI2VuZGlmCisJKyt2YXI7CisgICAgfQorI2VuZGlmCisKKyAgICAqZmlsZVswXSA9IGJ1ZjsKKyAgICAqbnVtX2ZpbGUgPSAxOworICAgIHJldHVybiBPSzsKK30KKyNlbmRpZgorCisvKgorICogR2V0IHRoZSB2YWx1ZSBmb3IgdGhlIG51bWVyaWMgb3Igc3RyaW5nIG9wdGlvbiAqb3BwIGluIGEgbmljZSBmb3JtYXQgaW50bworICogTmFtZUJ1ZmZbXS4gIE11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGEgaGlkZGVuIG9wdGlvbiEKKyAqLworICAgIHN0YXRpYyB2b2lkCitvcHRpb25fdmFsdWUyc3RyaW5nKG9wcCwgb3B0X2ZsYWdzKQorICAgIHN0cnVjdCB2aW1vcHRpb24JKm9wcDsKKyAgICBpbnQJCQlvcHRfZmxhZ3M7CS8qIE9QVF9HTE9CQUwgYW5kL29yIE9QVF9MT0NBTCAqLworeworICAgIGNoYXJfdQkqdmFycDsKKworICAgIHZhcnAgPSBnZXRfdmFycF9zY29wZShvcHAsIG9wdF9mbGFncyk7CisKKyAgICBpZiAob3BwLT5mbGFncyAmIFBfTlVNKQorICAgIHsKKwlsb25nIHdjID0gMDsKKworCWlmICh3Y191c2Vfa2V5bmFtZSh2YXJwLCAmd2MpKQorCSAgICBTVFJDUFkoTmFtZUJ1ZmYsIGdldF9zcGVjaWFsX2tleV9uYW1lKChpbnQpd2MsIDApKTsKKwllbHNlIGlmICh3YyAhPSAwKQorCSAgICBTVFJDUFkoTmFtZUJ1ZmYsIHRyYW5zY2hhcigoaW50KXdjKSk7CisJZWxzZQorCSAgICBzcHJpbnRmKChjaGFyICopTmFtZUJ1ZmYsICIlbGQiLCAqKGxvbmcgKil2YXJwKTsKKyAgICB9CisgICAgZWxzZSAgICAvKiBQX1NUUklORyAqLworICAgIHsKKwl2YXJwID0gKihjaGFyX3UgKiopKHZhcnApOworCWlmICh2YXJwID09IE5VTEwpCQkgICAgLyoganVzdCBpbiBjYXNlICovCisJICAgIE5hbWVCdWZmWzBdID0gTlVMOworI2lmZGVmIEZFQVRfQ1JZUFQKKwkvKiBkb24ndCBzaG93IHRoZSBhY3R1YWwgdmFsdWUgb2YgJ2tleScsIG9ubHkgdGhhdCBpdCdzIHNldCAqLworCWlmIChvcHAtPnZhciA9PSAoY2hhcl91ICopJnBfa2V5ICYmICp2YXJwKQorCSAgICBTVFJDUFkoTmFtZUJ1ZmYsICIqKioqKiIpOworI2VuZGlmCisJZWxzZSBpZiAob3BwLT5mbGFncyAmIFBfRVhQQU5EKQorCSAgICBob21lX3JlcGxhY2UoTlVMTCwgdmFycCwgTmFtZUJ1ZmYsIE1BWFBBVEhMLCBGQUxTRSk7CisJLyogVHJhbnNsYXRlICdwYXN0ZXRvZ2dsZScgaW50byBzcGVjaWFsIGtleSBuYW1lcyAqLworCWVsc2UgaWYgKChjaGFyX3UgKiopb3BwLT52YXIgPT0gJnBfcHQpCisJICAgIHN0cjJzcGVjaWFsYnVmKHBfcHQsIE5hbWVCdWZmLCBNQVhQQVRITCk7CisJZWxzZQorCSAgICBTVFJOQ1BZKE5hbWVCdWZmLCB2YXJwLCBNQVhQQVRITCk7CisgICAgfQorfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgInZhcnAiIHBvaW50cyB0byAnd2lsZGNoYXInIG9yICd3aWxkY2hhcm0nIGFuZCBpdCBjYW4gYmUKKyAqIHByaW50ZWQgYXMgYSBrZXluYW1lLgorICogIip3Y3AiIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbiBpZiBpdCdzICd3aWxkY2hhcicgb3IgJ3dpbGRjaGFybScuCisgKi8KKyAgICBzdGF0aWMgaW50Cit3Y191c2Vfa2V5bmFtZSh2YXJwLCB3Y3ApCisgICAgY2hhcl91CSp2YXJwOworICAgIGxvbmcJKndjcDsKK3sKKyAgICBpZiAoKChsb25nICopdmFycCA9PSAmcF93YykgfHwgKChsb25nICopdmFycCA9PSAmcF93Y20pKQorICAgIHsKKwkqd2NwID0gKihsb25nICopdmFycDsKKwlpZiAoSVNfU1BFQ0lBTCgqd2NwKSB8fCBmaW5kX3NwZWNpYWxfa2V5X2luX3RhYmxlKChpbnQpKndjcCkgPj0gMCkKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworI2lmZGVmIEZFQVRfTEFOR01BUAorLyoKKyAqIEFueSBjaGFyYWN0ZXIgaGFzIGFuIGVxdWl2YWxlbnQgY2hhcmFjdGVyLiAgVGhpcyBpcyB1c2VkIGZvciBrZXlib2FyZHMgdGhhdAorICogaGF2ZSBhIHNwZWNpYWwgbGFuZ3VhZ2UgbW9kZSB0aGF0IHNlbmRzIGNoYXJhY3RlcnMgYWJvdmUgMTI4IChhbHRob3VnaAorICogb3RoZXIgY2hhcmFjdGVycyBjYW4gYmUgdHJhbnNsYXRlZCB0b28pLgorICovCisKKy8qCisgKiBjaGFyX3UgbGFuZ21hcF9tYXBjaGFyWzI1Nl07CisgKiBOb3JtYWxseSBtYXBzIGVhY2ggb2YgdGhlIDEyOCB1cHBlciBjaGFycyB0byBhbiA8MTI4IGFzY2lpIGNoYXI7IHVzZWQgdG8KKyAqICJ0cmFuc2xhdGUiIG5hdGl2ZSBsYW5nIGNoYXJzIGluIG5vcm1hbCBtb2RlIG9yIHNvbWUgY2FzZXMgb2YKKyAqIGluc2VydCBtb2RlIHdpdGhvdXQgaGF2aW5nIHRvIHRlZGlvdXNseSBzd2l0Y2ggbGFuZyBtb2RlIGJhY2smZm9ydGguCisgKi8KKworICAgIHN0YXRpYyB2b2lkCitsYW5nbWFwX2luaXQoKQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQkJLyogd2UgaW5pdCB3aXRoIGEtb25lLXRvIG9uZSBtYXAgKi8KKwlsYW5nbWFwX21hcGNoYXJbaV0gPSBpOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gbGFuZ21hcCBvcHRpb24gaXMgc2V0OyB0aGUgbGFuZ3VhZ2UgbWFwIGNhbiBiZQorICogY2hhbmdlZCBhdCBhbnkgdGltZSEKKyAqLworICAgIHN0YXRpYyB2b2lkCitsYW5nbWFwX3NldCgpCit7CisgICAgY2hhcl91ICAqcDsKKyAgICBjaGFyX3UgICpwMjsKKyAgICBpbnQJICAgIGZyb20sIHRvOworCisgICAgbGFuZ21hcF9pbml0KCk7CQkJICAgIC8qIGJhY2sgdG8gb25lLXRvLW9uZSBtYXAgZmlyc3QgKi8KKworICAgIGZvciAocCA9IHBfbGFuZ21hcDsgcFswXSAhPSBOVUw7ICkKKyAgICB7CisJZm9yIChwMiA9IHA7IHAyWzBdICE9IE5VTCAmJiBwMlswXSAhPSAnLCcgJiYgcDJbMF0gIT0gJzsnOyArK3AyKQorCXsKKwkgICAgaWYgKHAyWzBdID09ICdcXCcgJiYgcDJbMV0gIT0gTlVMKQorCQkrK3AyOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgcDIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwMikgLSAxOworI2VuZGlmCisJfQorCWlmIChwMlswXSA9PSAnOycpCisJICAgICsrcDI7CSAgICAvKiBhYmNkO0FCQ0QgZm9ybSwgcDIgcG9pbnRzIHRvIEEgKi8KKwllbHNlCisJICAgIHAyID0gTlVMTDsJICAgIC8qIGFBYkJjQ2REIGZvcm0sIHAyIGlzIE5VTEwgKi8KKwl3aGlsZSAocFswXSkKKwl7CisJICAgIGlmIChwWzBdID09ICdcXCcgJiYgcFsxXSAhPSBOVUwpCisJCSsrcDsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGZyb20gPSAoKm1iX3B0cjJjaGFyKShwKTsKKyNlbHNlCisJICAgIGZyb20gPSBwWzBdOworI2VuZGlmCisJICAgIGlmIChwMiA9PSBOVUxMKQorCSAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCQlwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7CisjZWxzZQorCQkrK3A7CisjZW5kaWYKKwkJaWYgKHBbMF0gPT0gJ1xcJykKKwkJICAgICsrcDsKKyNpZmRlZiBGRUFUX01CWVRFCisJCXRvID0gKCptYl9wdHIyY2hhcikocCk7CisjZWxzZQorCQl0byA9IHBbMF07CisjZW5kaWYKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKHAyWzBdID09ICdcXCcpCisJCSAgICArK3AyOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJdG8gPSAoKm1iX3B0cjJjaGFyKShwMik7CisjZWxzZQorCQl0byA9IHAyWzBdOworI2VuZGlmCisJICAgIH0KKwkgICAgaWYgKHRvID09IE5VTCkKKwkgICAgeworCQlFTVNHMihfKCJFMzU3OiAnbGFuZ21hcCc6IE1hdGNoaW5nIGNoYXJhY3RlciBtaXNzaW5nIGZvciAlcyIpLAorCQkJCQkJCSAgICAgdHJhbnNjaGFyKGZyb20pKTsKKwkJcmV0dXJuOworCSAgICB9CisJICAgIGxhbmdtYXBfbWFwY2hhcltmcm9tICYgMjU1XSA9IHRvOworCisJICAgIC8qIEFkdmFuY2UgdG8gbmV4dCBwYWlyICovCisjaWZkZWYgRkVBVF9NQllURQorCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7CisjZWxzZQorCSAgICArK3A7CisjZW5kaWYKKwkgICAgaWYgKHAyID09IE5VTEwpCisJICAgIHsKKwkJaWYgKHBbMF0gPT0gJywnKQorCQl7CisJCSAgICArK3A7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwkJcDIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwMik7CisjZWxzZQorCQkrK3AyOworI2VuZGlmCisJCWlmICgqcCA9PSAnOycpCisJCXsKKwkJICAgIHAgPSBwMjsKKwkJICAgIGlmIChwWzBdICE9IE5VTCkKKwkJICAgIHsKKwkJCWlmIChwWzBdICE9ICcsJykKKwkJCXsKKwkJCSAgICBFTVNHMihfKCJFMzU4OiAnbGFuZ21hcCc6IEV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgc2VtaWNvbG9uOiAlcyIpLCBwKTsKKwkJCSAgICByZXR1cm47CisJCQl9CisJCQkrK3A7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKyNlbmRpZgorCisvKgorICogUmV0dXJuIFRSVUUgaWYgZm9ybWF0IG9wdGlvbiAneCcgaXMgaW4gZWZmZWN0LgorICogVGFrZSBjYXJlIG9mIG5vIGZvcm1hdHRpbmcgd2hlbiAncGFzdGUnIGlzIHNldC4KKyAqLworICAgIGludAoraGFzX2Zvcm1hdF9vcHRpb24oeCkKKyAgICBpbnQJCXg7Cit7CisgICAgaWYgKHBfcGFzdGUpCisJcmV0dXJuIEZBTFNFOworICAgIHJldHVybiAodmltX3N0cmNocihjdXJidWYtPmJfcF9mbywgeCkgIT0gTlVMTCk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAieCIgaXMgcHJlc2VudCBpbiAnc2hvcnRtZXNzJyBvcHRpb24sIG9yCisgKiAnc2hvcnRtZXNzJyBjb250YWlucyAnYScgYW5kICJ4IiBpcyBwcmVzZW50IGluIFNITV9BLgorICovCisgICAgaW50CitzaG9ydG1lc3MoeCkKKyAgICBpbnQJICAgIHg7Cit7CisgICAgcmV0dXJuICggICB2aW1fc3RyY2hyKHBfc2htLCB4KSAhPSBOVUxMCisJICAgIHx8ICh2aW1fc3RyY2hyKHBfc2htLCAnYScpICE9IE5VTEwKKwkJJiYgdmltX3N0cmNocigoY2hhcl91ICopU0hNX0EsIHgpICE9IE5VTEwpKTsKK30KKworLyoKKyAqIHBhc3RlX29wdGlvbl9jaGFuZ2VkKCkgLSBDYWxsZWQgYWZ0ZXIgcF9wYXN0ZSB3YXMgc2V0IG9yIHJlc2V0LgorICovCisgICAgc3RhdGljIHZvaWQKK3Bhc3RlX29wdGlvbl9jaGFuZ2VkKCkKK3sKKyAgICBzdGF0aWMgaW50CW9sZF9wX3Bhc3RlID0gRkFMU0U7CisgICAgc3RhdGljIGludAlzYXZlX3NtID0gMDsKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworICAgIHN0YXRpYyBpbnQJc2F2ZV9ydSA9IDA7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorICAgIHN0YXRpYyBpbnQJc2F2ZV9yaSA9IDA7CisgICAgc3RhdGljIGludAlzYXZlX2hrbWFwID0gMDsKKyNlbmRpZgorICAgIGJ1Zl9UCSpidWY7CisKKyAgICBpZiAocF9wYXN0ZSkKKyAgICB7CisJLyoKKwkgKiBQYXN0ZSBzd2l0Y2hlZCBmcm9tIG9mZiB0byBvbi4KKwkgKiBTYXZlIHRoZSBjdXJyZW50IHZhbHVlcywgc28gdGhleSBjYW4gYmUgcmVzdG9yZWQgbGF0ZXIuCisJICovCisJaWYgKCFvbGRfcF9wYXN0ZSkKKwl7CisJICAgIC8qIHNhdmUgb3B0aW9ucyBmb3IgZWFjaCBidWZmZXIgKi8KKwkgICAgZm9yIChidWYgPSBmaXJzdGJ1ZjsgYnVmICE9IE5VTEw7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorCSAgICB7CisJCWJ1Zi0+Yl9wX3R3X25vcGFzdGUgPSBidWYtPmJfcF90dzsKKwkJYnVmLT5iX3Bfd21fbm9wYXN0ZSA9IGJ1Zi0+Yl9wX3dtOworCQlidWYtPmJfcF9zdHNfbm9wYXN0ZSA9IGJ1Zi0+Yl9wX3N0czsKKwkJYnVmLT5iX3BfYWlfbm9wYXN0ZSA9IGJ1Zi0+Yl9wX2FpOworCSAgICB9CisKKwkgICAgLyogc2F2ZSBnbG9iYWwgb3B0aW9ucyAqLworCSAgICBzYXZlX3NtID0gcF9zbTsKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworCSAgICBzYXZlX3J1ID0gcF9ydTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJICAgIHNhdmVfcmkgPSBwX3JpOworCSAgICBzYXZlX2hrbWFwID0gcF9oa21hcDsKKyNlbmRpZgorCSAgICAvKiBzYXZlIGdsb2JhbCB2YWx1ZXMgZm9yIGxvY2FsIGJ1ZmZlciBvcHRpb25zICovCisJICAgIHBfdHdfbm9wYXN0ZSA9IHBfdHc7CisJICAgIHBfd21fbm9wYXN0ZSA9IHBfd207CisJICAgIHBfc3RzX25vcGFzdGUgPSBwX3N0czsKKwkgICAgcF9haV9ub3Bhc3RlID0gcF9haTsKKwl9CisKKwkvKgorCSAqIEFsd2F5cyBzZXQgdGhlIG9wdGlvbiB2YWx1ZXMsIGFsc28gd2hlbiAncGFzdGUnIGlzIHNldCB3aGVuIGl0IGlzCisJICogYWxyZWFkeSBvbi4KKwkgKi8KKwkvKiBzZXQgb3B0aW9ucyBmb3IgZWFjaCBidWZmZXIgKi8KKwlmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTDsgYnVmID0gYnVmLT5iX25leHQpCisJeworCSAgICBidWYtPmJfcF90dyA9IDA7CSAgICAvKiB0ZXh0d2lkdGggaXMgMCAqLworCSAgICBidWYtPmJfcF93bSA9IDA7CSAgICAvKiB3cmFwbWFyZ2luIGlzIDAgKi8KKwkgICAgYnVmLT5iX3Bfc3RzID0gMDsJICAgIC8qIHNvZnR0YWJzdG9wIGlzIDAgKi8KKwkgICAgYnVmLT5iX3BfYWkgPSAwOwkgICAgLyogbm8gYXV0by1pbmRlbnQgKi8KKwl9CisKKwkvKiBzZXQgZ2xvYmFsIG9wdGlvbnMgKi8KKwlwX3NtID0gMDsJCSAgICAvKiBubyBzaG93bWF0Y2ggKi8KKyNpZmRlZiBGRUFUX0NNRExfSU5GTworIyBpZmRlZiBGRUFUX1dJTkRPV1MKKwlpZiAocF9ydSkKKwkgICAgc3RhdHVzX3JlZHJhd19hbGwoKTsgICAgLyogcmVkcmF3IHRvIHJlbW92ZSB0aGUgcnVsZXIgKi8KKyMgZW5kaWYKKwlwX3J1ID0gMDsJCSAgICAvKiBubyBydWxlciAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwlwX3JpID0gMDsJCSAgICAvKiBubyByZXZlcnNlIGluc2VydCAqLworCXBfaGttYXAgPSAwOwkJICAgIC8qIG5vIEhlYnJldyBrZXlib2FyZCAqLworI2VuZGlmCisJLyogc2V0IGdsb2JhbCB2YWx1ZXMgZm9yIGxvY2FsIGJ1ZmZlciBvcHRpb25zICovCisJcF90dyA9IDA7CisJcF93bSA9IDA7CisJcF9zdHMgPSAwOworCXBfYWkgPSAwOworICAgIH0KKworICAgIC8qCisgICAgICogUGFzdGUgc3dpdGNoZWQgZnJvbSBvbiB0byBvZmY6IFJlc3RvcmUgc2F2ZWQgdmFsdWVzLgorICAgICAqLworICAgIGVsc2UgaWYgKG9sZF9wX3Bhc3RlKQorICAgIHsKKwkvKiByZXN0b3JlIG9wdGlvbnMgZm9yIGVhY2ggYnVmZmVyICovCisJZm9yIChidWYgPSBmaXJzdGJ1ZjsgYnVmICE9IE5VTEw7IGJ1ZiA9IGJ1Zi0+Yl9uZXh0KQorCXsKKwkgICAgYnVmLT5iX3BfdHcgPSBidWYtPmJfcF90d19ub3Bhc3RlOworCSAgICBidWYtPmJfcF93bSA9IGJ1Zi0+Yl9wX3dtX25vcGFzdGU7CisJICAgIGJ1Zi0+Yl9wX3N0cyA9IGJ1Zi0+Yl9wX3N0c19ub3Bhc3RlOworCSAgICBidWYtPmJfcF9haSA9IGJ1Zi0+Yl9wX2FpX25vcGFzdGU7CisJfQorCisJLyogcmVzdG9yZSBnbG9iYWwgb3B0aW9ucyAqLworCXBfc20gPSBzYXZlX3NtOworI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisjIGlmZGVmIEZFQVRfV0lORE9XUworCWlmIChwX3J1ICE9IHNhdmVfcnUpCisJICAgIHN0YXR1c19yZWRyYXdfYWxsKCk7ICAgIC8qIHJlZHJhdyB0byBkcmF3IHRoZSBydWxlciAqLworIyBlbmRpZgorCXBfcnUgPSBzYXZlX3J1OworI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwlwX3JpID0gc2F2ZV9yaTsKKwlwX2hrbWFwID0gc2F2ZV9oa21hcDsKKyNlbmRpZgorCS8qIHNldCBnbG9iYWwgdmFsdWVzIGZvciBsb2NhbCBidWZmZXIgb3B0aW9ucyAqLworCXBfdHcgPSBwX3R3X25vcGFzdGU7CisJcF93bSA9IHBfd21fbm9wYXN0ZTsKKwlwX3N0cyA9IHBfc3RzX25vcGFzdGU7CisJcF9haSA9IHBfYWlfbm9wYXN0ZTsKKyAgICB9CisKKyAgICBvbGRfcF9wYXN0ZSA9IHBfcGFzdGU7Cit9CisKKy8qCisgKiB2aW1yY19mb3VuZCgpIC0gQ2FsbGVkIHdoZW4gYSAiLnZpbXJjIiBvciAiVklNSU5JVCIgaGFzIGJlZW4gZm91bmQuCisgKgorICogUmVzZXQgJ2NvbXBhdGlibGUnIGFuZCBzZXQgdGhlIHZhbHVlcyBmb3Igb3B0aW9ucyB0aGF0IGRpZG4ndCBnZXQgc2V0IHlldAorICogdG8gdGhlIFZpbSBkZWZhdWx0cy4KKyAqIERvbid0IGRvIHRoaXMgaWYgdGhlICdjb21wYXRpYmxlJyBvcHRpb24gaGFzIGJlZW4gc2V0IG9yIHJlc2V0IGJlZm9yZS4KKyAqLworICAgIHZvaWQKK3ZpbXJjX2ZvdW5kKCkKK3sKKyAgICBpbnQJICAgIG9wdF9pZHg7CisKKyAgICBpZiAoIW9wdGlvbl93YXNfc2V0KChjaGFyX3UgKikiY3AiKSkKKyAgICB7CisJcF9jcCA9IEZBTFNFOworCWZvciAob3B0X2lkeCA9IDA7ICFpc3Rlcm1vcHRpb24oJm9wdGlvbnNbb3B0X2lkeF0pOyBvcHRfaWR4KyspCisJICAgIGlmICghKG9wdGlvbnNbb3B0X2lkeF0uZmxhZ3MgJiAoUF9XQVNfU0VUfFBfVklfREVGKSkpCisJCXNldF9vcHRpb25fZGVmYXVsdChvcHRfaWR4LCBPUFRfRlJFRSwgRkFMU0UpOworCWRpZHNldF9vcHRpb25zKCk7CisgICAgfQorfQorCisvKgorICogU2V0ICdjb21wYXRpYmxlJyBvbiBvciBvZmYuICBDYWxsZWQgZm9yICItQyIgYW5kICItTiIgY29tbWFuZCBsaW5lIGFyZy4KKyAqLworICAgIHZvaWQKK2NoYW5nZV9jb21wYXRpYmxlKG9uKQorICAgIGludAkgICAgb247Cit7CisgICAgaWYgKHBfY3AgIT0gb24pCisgICAgeworCXBfY3AgPSBvbjsKKwljb21wYXRpYmxlX3NldCgpOworICAgIH0KKyAgICBvcHRpb25zW2ZpbmRvcHRpb24oKGNoYXJfdSAqKSJjcCIpXS5mbGFncyB8PSBQX1dBU19TRVQ7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSB3aGVuIG9wdGlvbiAibmFtZSIgaGFzIGJlZW4gc2V0LgorICovCisgICAgaW50CitvcHRpb25fd2FzX3NldChuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBpbnQgaWR4OworCisgICAgaWR4ID0gZmluZG9wdGlvbihuYW1lKTsKKyAgICBpZiAoaWR4IDwgMCkJLyogdW5rbm93biBvcHRpb24gKi8KKwlyZXR1cm4gRkFMU0U7CisgICAgaWYgKG9wdGlvbnNbaWR4XS5mbGFncyAmIFBfV0FTX1NFVCkKKwlyZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBjb21wYXRpYmxlX3NldCgpIC0gQ2FsbGVkIHdoZW4gJ2NvbXBhdGlibGUnIGhhcyBiZWVuIHNldCBvciB1bnNldC4KKyAqCisgKiBXaGVuICdjb21wYXRpYmxlJyBzZXQ6IFNldCBhbGwgcmVsZXZhbnQgb3B0aW9ucyAodGhvc2UgdGhhdCBoYXZlIHRoZSBQX1ZJTSkKKyAqIGZsYWcpIHRvIGEgVmkgY29tcGF0aWJsZSB2YWx1ZS4KKyAqIFdoZW4gJ2NvbXBhdGlibGUnIGlzIHVuc2V0OiBTZXQgYWxsIG9wdGlvbnMgdGhhdCBoYXZlIGEgZGlmZmVyZW50IGRlZmF1bHQKKyAqIGZvciBWaW0gKHdpdGhvdXQgdGhlIFBfVklfREVGIGZsYWcpIHRvIHRoYXQgZGVmYXVsdC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjb21wYXRpYmxlX3NldCgpCit7CisgICAgaW50CSAgICBvcHRfaWR4OworCisgICAgZm9yIChvcHRfaWR4ID0gMDsgIWlzdGVybW9wdGlvbigmb3B0aW9uc1tvcHRfaWR4XSk7IG9wdF9pZHgrKykKKwlpZiAoCSAgICgob3B0aW9uc1tvcHRfaWR4XS5mbGFncyAmIFBfVklNKSAmJiBwX2NwKQorCQl8fCAoIShvcHRpb25zW29wdF9pZHhdLmZsYWdzICYgUF9WSV9ERUYpICYmICFwX2NwKSkKKwkgICAgc2V0X29wdGlvbl9kZWZhdWx0KG9wdF9pZHgsIE9QVF9GUkVFLCBwX2NwKTsKKyAgICBkaWRzZXRfb3B0aW9ucygpOworfQorCisjaWZkZWYgRkVBVF9MSU5FQlJFQUsKKworIyBpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgKF9fQk9STEFORENfXyA8IDB4NTAwKQorICAgLyogQm9ybGFuZCBDKysgc2NyZXdzIHVwIGxvb3Agb3B0aW1pc2F0aW9uIGhlcmUgKG5lZ3JpKSAqLworIyAgcHJhZ21hIG9wdGlvbiAtTy1sCisjIGVuZGlmCisKKy8qCisgKiBmaWxsX2JyZWFrYXRfZmxhZ3MoKSAtLSBjYWxsZWQgd2hlbiAnYnJlYWthdCcgY2hhbmdlcyB2YWx1ZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmaWxsX2JyZWFrYXRfZmxhZ3MoKQoreworICAgIGNoYXJfdQkqYzsKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJYnJlYWthdF9mbGFnc1tpXSA9IEZBTFNFOworCisgICAgaWYgKHBfYnJlYWthdCAhPSBOVUxMKQorCWZvciAoYyA9IHBfYnJlYWthdDsgKmM7IGMrKykKKwkgICAgYnJlYWthdF9mbGFnc1sqY10gPSBUUlVFOworfQorCisjIGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoX19CT1JMQU5EQ19fIDwgMHg1MDApCisjICBwcmFnbWEgb3B0aW9uIC1PLmwKKyMgZW5kaWYKKworI2VuZGlmCisKKy8qCisgKiBDaGVjayBhbiBvcHRpb24gdGhhdCBjYW4gYmUgYSByYW5nZSBvZiBzdHJpbmcgdmFsdWVzLgorICoKKyAqIFJldHVybiBPSyBmb3IgY29ycmVjdCB2YWx1ZSwgRkFJTCBvdGhlcndpc2UuCisgKiBFbXB0eSBpcyBhbHdheXMgT0suCisgKi8KKyAgICBzdGF0aWMgaW50CitjaGVja19vcHRfc3RyaW5ncyh2YWwsIHZhbHVlcywgbGlzdCkKKyAgICBjaGFyX3UJKnZhbDsKKyAgICBjaGFyCSoqdmFsdWVzOworICAgIGludAkJbGlzdDsJICAgIC8qIHdoZW4gVFJVRTogYWNjZXB0IGEgbGlzdCBvZiB2YWx1ZXMgKi8KK3sKKyAgICByZXR1cm4gb3B0X3N0cmluZ3NfZmxhZ3ModmFsLCB2YWx1ZXMsIE5VTEwsIGxpc3QpOworfQorCisvKgorICogSGFuZGxlIGFuIG9wdGlvbiB0aGF0IGNhbiBiZSBhIHJhbmdlIG9mIHN0cmluZyB2YWx1ZXMuCisgKiBTZXQgYSBmbGFnIGluICIqZmxhZ3AiIGZvciBlYWNoIHN0cmluZyBwcmVzZW50LgorICoKKyAqIFJldHVybiBPSyBmb3IgY29ycmVjdCB2YWx1ZSwgRkFJTCBvdGhlcndpc2UuCisgKiBFbXB0eSBpcyBhbHdheXMgT0suCisgKi8KKyAgICBzdGF0aWMgaW50CitvcHRfc3RyaW5nc19mbGFncyh2YWwsIHZhbHVlcywgZmxhZ3AsIGxpc3QpCisgICAgY2hhcl91CSp2YWw7CQkvKiBuZXcgdmFsdWUgKi8KKyAgICBjaGFyCSoqdmFsdWVzOwkvKiBhcnJheSBvZiB2YWxpZCBzdHJpbmcgdmFsdWVzICovCisgICAgdW5zaWduZWQJKmZsYWdwOworICAgIGludAkJbGlzdDsJCS8qIHdoZW4gVFJVRTogYWNjZXB0IGEgbGlzdCBvZiB2YWx1ZXMgKi8KK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQlsZW47CisgICAgdW5zaWduZWQJbmV3X2ZsYWdzID0gMDsKKworICAgIHdoaWxlICgqdmFsKQorICAgIHsKKwlmb3IgKGkgPSAwOyA7ICsraSkKKwl7CisJICAgIGlmICh2YWx1ZXNbaV0gPT0gTlVMTCkJLyogdmFsIG5vdCBmb3VuZCBpbiB2YWx1ZXNbXSAqLworCQlyZXR1cm4gRkFJTDsKKworCSAgICBsZW4gPSAoaW50KVNUUkxFTih2YWx1ZXNbaV0pOworCSAgICBpZiAoU1RSTkNNUCh2YWx1ZXNbaV0sIHZhbCwgbGVuKSA9PSAwCisJCSAgICAmJiAoKGxpc3QgJiYgdmFsW2xlbl0gPT0gJywnKSB8fCB2YWxbbGVuXSA9PSBOVUwpKQorCSAgICB7CisJCXZhbCArPSBsZW4gKyAodmFsW2xlbl0gPT0gJywnKTsKKwkJbmV3X2ZsYWdzIHw9ICgxIDw8IGkpOworCQlicmVhazsJCS8qIGNoZWNrIG5leHQgaXRlbSBpbiB2YWwgbGlzdCAqLworCSAgICB9CisJfQorICAgIH0KKyAgICBpZiAoZmxhZ3AgIT0gTlVMTCkKKwkqZmxhZ3AgPSBuZXdfZmxhZ3M7CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBSZWFkIHRoZSAnd2lsZG1vZGUnIG9wdGlvbiwgZmlsbCB3aW1fZmxhZ3NbXS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NoZWNrX29wdF93aW0oKQoreworICAgIGNoYXJfdQluZXdfd2ltX2ZsYWdzWzRdOworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWk7CisgICAgaW50CQlpZHggPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwluZXdfd2ltX2ZsYWdzW2ldID0gMDsKKworICAgIGZvciAocCA9IHBfd2ltOyAqcDsgKytwKQorICAgIHsKKwlmb3IgKGkgPSAwOyBBU0NJSV9JU0FMUEhBKHBbaV0pOyArK2kpCisJICAgIDsKKwlpZiAocFtpXSAhPSBOVUwgJiYgcFtpXSAhPSAnLCcgJiYgcFtpXSAhPSAnOicpCisJICAgIHJldHVybiBGQUlMOworCWlmIChpID09IDcgJiYgU1RSTkNNUChwLCAibG9uZ2VzdCIsIDcpID09IDApCisJICAgIG5ld193aW1fZmxhZ3NbaWR4XSB8PSBXSU1fTE9OR0VTVDsKKwllbHNlIGlmIChpID09IDQgJiYgU1RSTkNNUChwLCAiZnVsbCIsIDQpID09IDApCisJICAgIG5ld193aW1fZmxhZ3NbaWR4XSB8PSBXSU1fRlVMTDsKKwllbHNlIGlmIChpID09IDQgJiYgU1RSTkNNUChwLCAibGlzdCIsIDQpID09IDApCisJICAgIG5ld193aW1fZmxhZ3NbaWR4XSB8PSBXSU1fTElTVDsKKwllbHNlCisJICAgIHJldHVybiBGQUlMOworCXAgKz0gaTsKKwlpZiAoKnAgPT0gTlVMKQorCSAgICBicmVhazsKKwlpZiAoKnAgPT0gJywnKQorCXsKKwkgICAgaWYgKGlkeCA9PSAzKQorCQlyZXR1cm4gRkFJTDsKKwkgICAgKytpZHg7CisJfQorICAgIH0KKworICAgIC8qIGZpbGwgcmVtYWluaW5nIGVudHJpZXMgd2l0aCBsYXN0IGZsYWcgKi8KKyAgICB3aGlsZSAoaWR4IDwgMykKKyAgICB7CisJbmV3X3dpbV9mbGFnc1tpZHggKyAxXSA9IG5ld193aW1fZmxhZ3NbaWR4XTsKKwkrK2lkeDsKKyAgICB9CisKKyAgICAvKiBvbmx5IHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycywgd2ltX2ZsYWdzW10gaXMgY2hhbmdlZCAqLworICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJd2ltX2ZsYWdzW2ldID0gbmV3X3dpbV9mbGFnc1tpXTsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBDaGVjayBpZiBiYWNrc3BhY2luZyBvdmVyIHNvbWV0aGluZyBpcyBhbGxvd2VkLgorICovCisgICAgaW50CitjYW5fYnMod2hhdCkKKyAgICBpbnQJCXdoYXQ7CSAgICAvKiBCU19JTkRFTlQsIEJTX0VPTCBvciBCU19TVEFSVCAqLworeworICAgIHN3aXRjaCAoKnBfYnMpCisgICAgeworCWNhc2UgJzInOglyZXR1cm4gVFJVRTsKKwljYXNlICcxJzoJcmV0dXJuICh3aGF0ICE9IEJTX1NUQVJUKTsKKwljYXNlICcwJzoJcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gdmltX3N0cmNocihwX2JzLCB3aGF0KSAhPSBOVUxMOworfQorCisvKgorICogU2F2ZSB0aGUgY3VycmVudCB2YWx1ZXMgb2YgJ2ZpbGVmb3JtYXQnIGFuZCAnZmlsZWVuY29kaW5nJywgc28gdGhhdCB3ZSBrbm93CisgKiB0aGUgZmlsZSBtdXN0IGJlIGNvbnNpZGVyZWQgY2hhbmdlZCB3aGVuIHRoZSB2YWx1ZSBpcyBkaWZmZXJlbnQuCisgKi8KKyAgICB2b2lkCitzYXZlX2ZpbGVfZmYoYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgYnVmLT5iX3N0YXJ0X2ZmYyA9ICpidWYtPmJfcF9mZjsKKyAgICBidWYtPmJfc3RhcnRfZW9sID0gYnVmLT5iX3BfZW9sOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKiBPbmx5IHVzZSBmcmVlL2FsbG9jIHdoZW4gbmVjZXNzYXJ5LCB0aGV5IHRha2UgdGltZS4gKi8KKyAgICBpZiAoYnVmLT5iX3N0YXJ0X2ZlbmMgPT0gTlVMTAorCQkJICAgICB8fCBTVFJDTVAoYnVmLT5iX3N0YXJ0X2ZlbmMsIGJ1Zi0+Yl9wX2ZlbmMpICE9IDApCisgICAgeworCXZpbV9mcmVlKGJ1Zi0+Yl9zdGFydF9mZW5jKTsKKwlidWYtPmJfc3RhcnRfZmVuYyA9IHZpbV9zdHJzYXZlKGJ1Zi0+Yl9wX2ZlbmMpOworICAgIH0KKyNlbmRpZgorfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgJ2ZpbGVmb3JtYXQnIGFuZC9vciAnZmlsZWVuY29kaW5nJyBoYXMgYSBkaWZmZXJlbnQgdmFsdWUKKyAqIGZyb20gd2hlbiBlZGl0aW5nIHN0YXJ0ZWQgKHNhdmVfZmlsZV9mZigpIGNhbGxlZCkuCisgKiBBbHNvIHdoZW4gJ2VuZG9mbGluZScgd2FzIGNoYW5nZWQgYW5kICdiaW5hcnknIGlzIHNldC4KKyAqIERvbid0IGNvbnNpZGVyIGEgbmV3LCBlbXB0eSBidWZmZXIgdG8gYmUgY2hhbmdlZC4KKyAqLworICAgIGludAorZmlsZV9mZl9kaWZmZXJzKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIGlmICgoYnVmLT5iX2ZsYWdzICYgQkZfTkVXKQorCSAgICAmJiBidWYtPmJfbWwubWxfbGluZV9jb3VudCA9PSAxCisJICAgICYmICptbF9nZXRfYnVmKGJ1ZiwgKGxpbmVucl9UKTEsIEZBTFNFKSA9PSBOVUwpCisJcmV0dXJuIEZBTFNFOworICAgIGlmIChidWYtPmJfc3RhcnRfZmZjICE9ICpidWYtPmJfcF9mZikKKwlyZXR1cm4gVFJVRTsKKyAgICBpZiAoYnVmLT5iX3BfYmluICYmIGJ1Zi0+Yl9zdGFydF9lb2wgIT0gYnVmLT5iX3BfZW9sKQorCXJldHVybiBUUlVFOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoYnVmLT5iX3N0YXJ0X2ZlbmMgPT0gTlVMTCkKKwlyZXR1cm4gKCpidWYtPmJfcF9mZW5jICE9IE5VTCk7CisgICAgcmV0dXJuIChTVFJDTVAoYnVmLT5iX3N0YXJ0X2ZlbmMsIGJ1Zi0+Yl9wX2ZlbmMpICE9IDApOworI2Vsc2UKKyAgICByZXR1cm4gRkFMU0U7CisjZW5kaWYKK30KKworLyoKKyAqIHJldHVybiBPSyBpZiAicCIgaXMgYSB2YWxpZCBmaWxlZm9ybWF0IG5hbWUsIEZBSUwgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitjaGVja19mZl92YWx1ZShwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICByZXR1cm4gY2hlY2tfb3B0X3N0cmluZ3MocCwgcF9mZl92YWx1ZXMsIEZBTFNFKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9vcHRpb24uaCBiL3NyYy9vcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzk4NWU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL29wdGlvbi5oCkBAIC0wLDAgKzEsODAyIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisvKgorICogb3B0aW9uLmg6IGRlZmluaXRpb24gb2YgZ2xvYmFsIHZhcmlhYmxlcyBmb3Igc2V0dGFibGUgb3B0aW9ucworICovCisKKyNpZm5kZWYgRVhURVJOCisjIGRlZmluZSBFWFRFUk4gZXh0ZXJuCisjIGRlZmluZSBJTklUKHgpCisjZWxzZQorIyBpZm5kZWYgSU5JVAorIyAgZGVmaW5lIElOSVQoeCkgeAorIyBlbmRpZgorI2VuZGlmCisKKy8qIGRlZmF1bHQgdmFsdWVzIGZvciBwX2VmbSAnZXJyb3Jmb3JtYXQnICovCisjaWZkZWYgQU1JR0EKKyMgZGVmaW5lIERGTFRfRUZNCSIlZj4lbDolYzoldDolbjolbSwlZjolbDogJXQlKlxcRCVuOiAlbSwlZiAlbCAldCUqXFxEJW46ICVtLCUqW15cIl1cIiVmXCIlKlxcRCVsOiAlbSwlZjolbDolbSIKKyNlbHNlCisjIGlmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lOMzI2NCkKKyMgIGRlZmluZSBERkxUX0VGTQkiJWYoJWwpIDogJXQlKlxcRCVuOiAlbSwlKlteXCJdXCIlZlwiJSpcXEQlbDogJW0sJWYoJWwpIDogJW0sJSpbXiBdICVmICVsOiAlbSwlZjolbDolbSIKKyMgZWxzZQorIyAgaWYgZGVmaW5lZChfX0VNWF9fKQkvKiBwdXQgbW9zdCBjb21tb24gaGVyZSAoaS5lLiBnY2MgZm9ybWF0KSBhdCBmcm9udCAqLworIyAgIGRlZmluZSBERkxUX0VGTQkiJWY6JWw6JW0sJSpbXlwiXVwiJWZcIiUqXFxEJWw6ICVtLFwiJWZcIiUqXFxEJWw6ICVtLCVmKCVsOiVjKSA6ICVtIgorIyAgZWxzZQorIyAgIGlmIGRlZmluZWQoX19RTlhfXykKKyMgICAgZGVmaW5lIERGTFRfRUZNCSIlZiglbCk6JSpbXldFXSV0JSpcXEQlbjolbSIKKyMgICBlbHNlCisjICAgIGlmZGVmIFZNUworIyAgICAgZGVmaW5lIERGTFRfRUZNCSIlQSVwXiwlQyUlQ0MtJXQtJW0sJUNhdCBsaW5lIG51bWJlciAlbCBpbiBmaWxlICVmIgorIyAgICBlbHNlIC8qIFVuaXgsIHByb2JhYmx5ICovCisjICAgICBpZmRlZiBFQkNESUMKKyNkZWZpbmUgREZMVF9FRk0JIiUqW14gXSAlKlteIF0gJWY6JWwlKlsgXSVtLCUqW15cIl1cIiVmXCIlKlxcRCVsOiAlbSxcIiVmXCIlKlxcRCVsOiAlbSwlZjolbDolbSxcIiVmXCJcXCwgbGluZSAlbCUqXFxEJWMlKlteIF0gJW0sJUQlKlxcYVslKlxcZF06IEVudGVyaW5nIGRpcmVjdG9yeSBgJWYnLCVYJSpcXGFbJSpcXGRdOiBMZWF2aW5nIGRpcmVjdG9yeSBgJWYnLCVETWFraW5nICUqXFxhIGluICVmIgorIyAgICAgZWxzZQorI2RlZmluZSBERkxUX0VGTQkiJSpbXlwiXVwiJWZcIiUqXFxEJWw6ICVtLFwiJWZcIiUqXFxEJWw6ICVtLCUtRyVmOiVsOiAoRWFjaCB1bmRlY2xhcmVkIGlkZW50aWZpZXIgaXMgcmVwb3J0ZWQgb25seSBvbmNlLCUtRyVmOiVsOiBmb3IgZWFjaCBmdW5jdGlvbiBpdCBhcHBlYXJzIGluLiksJWY6JWw6JW0sXCIlZlwiXFwsIGxpbmUgJWwlKlxcRCVjJSpbXiBdICVtLCVEJSpcXGFbJSpcXGRdOiBFbnRlcmluZyBkaXJlY3RvcnkgYCVmJywlWCUqXFxhWyUqXFxkXTogTGVhdmluZyBkaXJlY3RvcnkgYCVmJywlRE1ha2luZyAlKlxcYSBpbiAlZiIKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBERkxUX0dSRVBGT1JNQVQJIiVmOiVsOiVtLCVmOiVsJW0sJWYgICVsJW0iCisKKy8qIGRlZmF1bHQgdmFsdWVzIGZvciBiX3BfZmYgJ2ZpbGVmb3JtYXQnIGFuZCBwX2ZmcyAnZmlsZWZvcm1hdHMnICovCisjZGVmaW5lIEZGX0RPUwkJImRvcyIKKyNkZWZpbmUgRkZfTUFDCQkibWFjIgorI2RlZmluZSBGRl9VTklYCQkidW5peCIKKworI2lmZGVmIFVTRV9DUk5MCisjIGRlZmluZSBERkxUX0ZGCSJkb3MiCisjIGRlZmluZSBERkxUX0ZGU19WSU0JImRvcyx1bml4IgorIyBkZWZpbmUgREZMVF9GRlNfVkkJImRvcyx1bml4IgkvKiBhbHNvIGF1dG9kZXRlY3QgaW4gY29tcGF0aWJsZSBtb2RlICovCisjIGRlZmluZSBERkxUX1RFWFRBVVRPCVRSVUUKKyNlbHNlCisjIGlmZGVmIFVTRV9DUgorIyAgZGVmaW5lIERGTFRfRkYJIm1hYyIKKyMgIGRlZmluZSBERkxUX0ZGU19WSU0JIm1hYyx1bml4LGRvcyIKKyMgIGRlZmluZSBERkxUX0ZGU19WSQkibWFjLHVuaXgsZG9zIgorIyAgZGVmaW5lIERGTFRfVEVYVEFVVE8JVFJVRQorIyBlbHNlCisjICBkZWZpbmUgREZMVF9GRgkidW5peCIKKyMgIGRlZmluZSBERkxUX0ZGU19WSU0JInVuaXgsZG9zIgorIyAgaWZkZWYgX19DWUdXSU5fXworIyAgIGRlZmluZSBERkxUX0ZGU19WSQkidW5peCxkb3MiCS8qIEN5Z3dpbiBhbHdheXMgbmVlZHMgZmlsZSBkZXRlY3Rpb24gKi8KKyMgICBkZWZpbmUgREZMVF9URVhUQVVUTyBUUlVFCisjICBlbHNlCisjICAgZGVmaW5lIERGTFRfRkZTX1ZJCSIiCisjICAgZGVmaW5lIERGTFRfVEVYVEFVVE8gRkFMU0UKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworCisjaWZkZWYgRkVBVF9NQllURQorLyogUG9zc2libGUgdmFsdWVzIGZvciAnZW5jb2RpbmcnICovCisjIGRlZmluZSBFTkNfVUNTQk9NCSJ1Y3MtYm9tIgkvKiBjaGVjayBmb3IgQk9NIGF0IHN0YXJ0IG9mIGZpbGUgKi8KKworLyogZGVmYXVsdCB2YWx1ZSBmb3IgJ2VuY29kaW5nJyAqLworIyBkZWZpbmUgRU5DX0RGTFQJImxhdGluMSIKKyNlbmRpZgorCisvKiBlbmQtb2YtbGluZSBzdHlsZSAqLworI2RlZmluZSBFT0xfVU5LTk9XTgktMQkvKiBub3QgZGVmaW5lZCB5ZXQgKi8KKyNkZWZpbmUgRU9MX1VOSVgJMAkvKiBOTCAqLworI2RlZmluZSBFT0xfRE9TCQkxCS8qIENSIE5MICovCisjZGVmaW5lIEVPTF9NQUMJCTIJLyogQ1IgKi8KKworLyogRm9ybWF0dGluZyBvcHRpb25zIGZvciBwX2ZvICdmb3JtYXRvcHRpb25zJyAqLworI2RlZmluZSBGT19XUkFQCQkndCcKKyNkZWZpbmUgRk9fV1JBUF9DT01TCSdjJworI2RlZmluZSBGT19SRVRfQ09NUwkncicKKyNkZWZpbmUgRk9fT1BFTl9DT01TCSdvJworI2RlZmluZSBGT19RX0NPTVMJJ3EnCisjZGVmaW5lIEZPX1FfTlVNQkVSCSduJworI2RlZmluZSBGT19RX1NFQ09ORAknMicKKyNkZWZpbmUgRk9fSU5TX1ZJCSd2JworI2RlZmluZSBGT19JTlNfTE9ORwknbCcKKyNkZWZpbmUgRk9fSU5TX0JMQU5LCSdiJworI2RlZmluZSBGT19NQllURV9CUkVBSwknbScJLyogYnJlYWsgYmVmb3JlL2FmdGVyIG11bHRpLWJ5dGUgY2hhciAqLworI2RlZmluZSBGT19NQllURV9KT0lOCSdNJwkvKiBubyBzcGFjZSBiZWZvcmUvYWZ0ZXIgbXVsdGktYnl0ZSBjaGFyICovCisjZGVmaW5lIEZPX01CWVRFX0pPSU4yCSdCJwkvKiBubyBzcGFjZSBiZXR3ZWVuIG11bHRpLWJ5dGUgY2hhcnMgKi8KKyNkZWZpbmUgRk9fT05FX0xFVFRFUgknMScKKyNkZWZpbmUgRk9fV0hJVEVfUEFSCSd3JwkvKiB0cmFpbGluZyB3aGl0ZSBzcGFjZSBjb250aW51ZXMgcGFyYWdyLiAqLworI2RlZmluZSBGT19BVVRPCQknYScJLyogYXV0b21hdGljIGZvcm1hdHRpbmcgKi8KKworI2RlZmluZSBERkxUX0ZPX1ZJCSJ2dCIKKyNkZWZpbmUgREZMVF9GT19WSU0JInRjcSIKKyNkZWZpbmUgRk9fQUxMCQkidGNyb3EydmxiMW1NQm4sYXciCS8qIGZvciBkb19zZXQoKSAqLworCisvKiBjaGFyYWN0ZXJzIGZvciB0aGUgcF9jcG8gb3B0aW9uOiAqLworI2RlZmluZSBDUE9fQUxUUkVBRAknYScJLyogIjpyZWFkIiBzZXRzIGFsdGVybmF0ZSBmaWxlIG5hbWUgKi8KKyNkZWZpbmUgQ1BPX0FMVFdSSVRFCSdBJwkvKiAiOndyaXRlIiBzZXRzIGFsdGVybmF0ZSBmaWxlIG5hbWUgKi8KKyNkZWZpbmUgQ1BPX0JBUgkJJ2InCS8qICJcfCIgZW5kcyBhIG1hcHBpbmcgKi8KKyNkZWZpbmUgQ1BPX0JTTEFTSAknQicJLyogYmFja3NsYXNoIGluIG1hcHBpbmcgaXMgbm90IHNwZWNpYWwgKi8KKyNkZWZpbmUgQ1BPX1NFQVJDSAknYycKKyNkZWZpbmUgQ1BPX0NPTkNBVAknQycJLyogRG9uJ3QgY29uY2F0ZW5hdGUgc291cmNlZCBsaW5lcyAqLworI2RlZmluZSBDUE9fRE9UVEFHCSdkJwkvKiAiLi90YWdzIiBpbiAndGFncycgaXMgaW4gY3VycmVudCBkaXIgKi8KKyNkZWZpbmUgQ1BPX0RJR1JBUEgJJ0QnCS8qIE5vIGRpZ3JhcGggYWZ0ZXIgInIiLCAiZiIsIGV0Yy4gKi8KKyNkZWZpbmUgQ1BPX0VYRUNCVUYJJ2UnCisjZGVmaW5lIENQT19FTVBUWVJFR0lPTgknRScJLyogb3BlcmF0aW5nIG9uIGVtcHR5IHJlZ2lvbiBpcyBhbiBlcnJvciAqLworI2RlZmluZSBDUE9fRk5BTUVSCSdmJwkvKiBzZXQgZmlsZSBuYW1lIGZvciAiOnIgZmlsZSIgKi8KKyNkZWZpbmUgQ1BPX0ZOQU1FVwknRicJLyogc2V0IGZpbGUgbmFtZSBmb3IgIjp3IGZpbGUiICovCisjZGVmaW5lIENQT19HT1RPMQknZycJLyogZ290byBsaW5lIDEgZm9yICI6ZWRpdCIgKi8KKyNkZWZpbmUgQ1BPX0lOVE1PRAknaScJLyogaW50ZXJydXB0IGEgcmVhZCBtYWtlcyBidWZmZXIgbW9kaWZpZWQgKi8KKyNkZWZpbmUgQ1BPX0pPSU5TUAknaicJLyogb25seSB1c2UgdHdvIHNwYWNlcyBmb3Igam9pbiBhZnRlciAnLicgKi8KKyNkZWZpbmUgQ1BPX0VORE9GU0VOVAknSicJLyogbmVlZCB0d28gc3BhY2VzIHRvIGRldGVjdCBlbmQgb2Ygc2VudGVuY2UgKi8KKyNkZWZpbmUgQ1BPX0tFWUNPREUJJ2snCS8qIGRvbid0IHJlY29nbml6ZSByYXcga2V5IGNvZGUgaW4gbWFwcGluZ3MgKi8KKyNkZWZpbmUgQ1BPX0tPRkZTRVQJJ0snCS8qIGRvbid0IHdhaXQgZm9yIGtleSBjb2RlIGluIG1hcHBpbmdzICovCisjZGVmaW5lIENQT19MSVRFUkFMCSdsJwkvKiB0YWtlIGNoYXIgYWZ0ZXIgYmFja3NsYXNoIGluIFtdIGxpdGVyYWwgKi8KKyNkZWZpbmUgQ1BPX0xJU1RXTQknTCcJLyogJ2xpc3QnIGNoYW5nZXMgd3JhcG1hcmdpbiAqLworI2RlZmluZSBDUE9fU0hPV01BVENICSdtJworI2RlZmluZSBDUE9fTUFUQ0hCU0wJJ00nCS8qICIlIiBpZ25vcmVzIHVzZSBvZiBiYWNrc2xhc2hlcyAqLworI2RlZmluZSBDUE9fTlVNQ09MCSduJwkvKiAnbnVtYmVyJyBjb2x1bW4gYWxzbyB1c2VkIGZvciB0ZXh0ICovCisjZGVmaW5lIENQT19MSU5FT0ZGCSdvJworI2RlZmluZSBDUE9fT1ZFUk5FVwknTycJLyogc2lsZW50bHkgb3ZlcndyaXRlIG5ldyBmaWxlICovCisjZGVmaW5lIENQT19MSVNQCSdwJwkvKiAnbGlzcCcgaW5kZW50aW5nICovCisjZGVmaW5lIENQT19SRURPCSdyJworI2RlZmluZSBDUE9fUkVNTUFSSwknUicJLyogcmVtb3ZlIG1hcmtzIHdoZW4gZmlsdGVyaW5nICovCisjZGVmaW5lIENQT19CVUZPUFQJJ3MnCisjZGVmaW5lIENQT19CVUZPUFRHTE9CCSdTJworI2RlZmluZSBDUE9fVEFHUEFUCSd0JworI2RlZmluZSBDUE9fVU5ETwkndScJLyogInUiIHVuZG9lcyBpdHNlbGYgKi8KKyNkZWZpbmUgQ1BPX0JBQ0tTUEFDRQkndicJLyogInYiIGtlZXAgZGVsZXRlZCB0ZXh0ICovCisjZGVmaW5lIENQT19DVwkJJ3cnCS8qICJjdyIgb25seSBjaGFuZ2VzIG9uZSBibGFuayAqLworI2RlZmluZSBDUE9fRldSSVRFCSdXJwkvKiAidyEiIGRvZXNuJ3Qgb3ZlcndyaXRlIHJlYWRvbmx5IGZpbGVzICovCisjZGVmaW5lIENQT19FU0MJCSd4JworI2RlZmluZSBDUE9fWUFOSwkneScKKyNkZWZpbmUgQ1BPX0RPTExBUgknJCcKKyNkZWZpbmUgQ1BPX0ZJTFRFUgknIScKKyNkZWZpbmUgQ1BPX01BVENICSclJworI2RlZmluZSBDUE9fU1RBUgknKicJLyogIjoqIiBtZWFucyAiOkAiICovCisjZGVmaW5lIENQT19TUEVDSQknPCcJLyogZG9uJ3QgcmVjb2duaXplIDw+IGluIG1hcHBpbmdzICovCisjZGVmaW5lIENQT19ERUZBVUxUCSJhQUJjZUZzIgorI2RlZmluZSBDUE9fQUxMCQkiYUFiQmNDZERlRWZGZ2lqSmtLbExtTW5vT3ByUnNTdHV2d1d4eSQhJSo8IgorCisvKiBjaGFyYWN0ZXJzIGZvciBwX3d3IG9wdGlvbjogKi8KKyNkZWZpbmUgV1dfQUxMCQkiYnNobDw+W10sfiIKKworLyogY2hhcmFjdGVycyBmb3IgcF9tb3VzZSBvcHRpb246ICovCisjZGVmaW5lIE1PVVNFX05PUk1BTAknbicJCS8qIHVzZSBtb3VzZSBpbiBOb3JtYWwgbW9kZSAqLworI2RlZmluZSBNT1VTRV9WSVNVQUwJJ3YnCQkvKiB1c2UgbW91c2UgaW4gVmlzdWFsL1NlbGVjdCBtb2RlICovCisjZGVmaW5lIE1PVVNFX0lOU0VSVAknaScJCS8qIHVzZSBtb3VzZSBpbiBJbnNlcnQgbW9kZSAqLworI2RlZmluZSBNT1VTRV9DT01NQU5ECSdjJwkJLyogdXNlIG1vdXNlIGluIENvbW1hbmQtbGluZSBtb2RlICovCisjZGVmaW5lIE1PVVNFX0hFTFAJJ2gnCQkvKiB1c2UgbW91c2UgaW4gaGVscCBidWZmZXJzICovCisjZGVmaW5lIE1PVVNFX1JFVFVSTgkncicJCS8qIHVzZSBtb3VzZSBmb3IgaGl0LXJldHVybiBtZXNzYWdlICovCisjZGVmaW5lIE1PVVNFX0EJCSJudmljaCIJCS8qIHVzZWQgZm9yICdhJyBmbGFnICovCisjZGVmaW5lIE1PVVNFX0FMTAkiYW52aWNociIJLyogYWxsIHBvc3NpYmxlIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgTU9VU0VfTk9ORQknICcJCS8qIGRvbid0IHVzZSBWaXN1YWwgc2VsZWN0aW9uICovCisjZGVmaW5lIE1PVVNFX05PTkVGCSd4JwkJLyogZm9yY2VkIG1vZGVsZXNzIHNlbGVjdGlvbiAqLworCisvKiBjaGFyYWN0ZXJzIGZvciBwX3NobSBvcHRpb246ICovCisjZGVmaW5lIFNITV9STwkJJ3InCQkvKiByZWFkb25seSAqLworI2RlZmluZSBTSE1fTU9ECQknbScJCS8qIG1vZGlmaWVkICovCisjZGVmaW5lIFNITV9GSUxFCSdmJwkJLyogKGZpbGUgMSBvZiAyKSAqLworI2RlZmluZSBTSE1fTEFTVAknaScJCS8qIGxhc3QgbGluZSBpbmNvbXBsZXRlICovCisjZGVmaW5lIFNITV9URVhUCSd4JwkJLyogdHggaW5zdGVhZCBvZiB0ZXh0bW9kZSAqLworI2RlZmluZSBTSE1fTElORVMJJ2wnCQkvKiAiTCIgaW5zdGVhZCBvZiAibGluZXMiICovCisjZGVmaW5lIFNITV9ORVcJCSduJwkJLyogIltOZXddIiBpbnN0ZWFkIG9mICJbTmV3IGZpbGVdIiAqLworI2RlZmluZSBTSE1fV1JJCQkndycJCS8qICJbd10iIGluc3RlYWQgb2YgIndyaXR0ZW4iICovCisjZGVmaW5lIFNITV9BCQkicm1maXhsbnciCS8qIHJlcHJlc2VudGVkIGJ5ICdhJyBmbGFnICovCisjZGVmaW5lIFNITV9XUklURQknVycJCS8qIGRvbid0IHVzZSAid3JpdHRlbiIgYXQgYWxsICovCisjZGVmaW5lIFNITV9UUlVOQwkndCcJCS8qIHRydW5jdGF0ZSBmaWxlIG1lc3NhZ2VzICovCisjZGVmaW5lIFNITV9UUlVOQ0FMTAknVCcJCS8qIHRydW5jdGF0ZSBhbGwgbWVzc2FnZXMgKi8KKyNkZWZpbmUgU0hNX09WRVIJJ28nCQkvKiBvdmVyd3JpdGUgZmlsZSBtZXNzYWdlcyAqLworI2RlZmluZSBTSE1fT1ZFUkFMTAknTycJCS8qIG92ZXJ3cml0ZSBtb3JlIG1lc3NhZ2VzICovCisjZGVmaW5lIFNITV9TRUFSQ0gJJ3MnCQkvKiBubyBzZWFyY2ggaGl0IGJvdHRvbSBtZXNzYWdlcyAqLworI2RlZmluZSBTSE1fQVRURU5USU9OCSdBJwkJLyogbm8gQVRURU5USU9OIG1lc3NhZ2VzICovCisjZGVmaW5lIFNITV9JTlRSTwknSScJCS8qIGludHJvIG1lc3NhZ2VzICovCisjZGVmaW5lIFNITV9BTEwJCSJybWZpeGxud2FXdFRvT3NBSSIgLyogYWxsIHBvc3NpYmxlIGZsYWdzIGZvciAnc2htJyAqLworCisvKiBjaGFyYWN0ZXJzIGZvciBwX2dvOiAqLworI2RlZmluZSBHT19BU0VMCQknYScJCS8qIGF1dG9zZWxlY3QgKi8KKyNkZWZpbmUgR09fQVNFTE1MCSdBJwkJLyogYXV0b3NlbGVjdCBtb2RlbGVzcyBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgR09fQk9UCQknYicJCS8qIHVzZSBib3R0b20gc2Nyb2xsYmFyICovCisjZGVmaW5lIEdPX0NPTkRJQUxPRwknYycJCS8qIHVzZSBjb25zb2xlIGRpYWxvZyAqLworI2RlZmluZSBHT19GT1JHCQknZicJCS8qIHN0YXJ0IEdVSSBpbiBmb3JlZ3JvdW5kICovCisjZGVmaW5lIEdPX0dSRVkJCSdnJwkJLyogdXNlIGdyZXkgbWVudSBpdGVtcyAqLworI2RlZmluZSBHT19IT1JTQ1JPTEwJJ2gnCQkvKiBmbGV4aWJsZSBob3Jpem9udGFsIHNjcm9sbGluZyAqLworI2RlZmluZSBHT19JQ09OCQknaScJCS8qIHVzZSBWaW0gaWNvbiAqLworI2RlZmluZSBHT19MRUZUCQknbCcJCS8qIHVzZSBsZWZ0IHNjcm9sbGJhciAqLworI2RlZmluZSBHT19WTEVGVAknTCcJCS8qIGxlZnQgc2Nyb2xsYmFyIHdpdGggdmVydCBzcGxpdCAqLworI2RlZmluZSBHT19NRU5VUwknbScJCS8qIHVzZSBtZW51IGJhciAqLworI2RlZmluZSBHT19OT1NZU01FTlUJJ00nCQkvKiBkb24ndCBzb3VyY2Ugc3lzdGVtIG1lbnUgKi8KKyNkZWZpbmUgR09fUE9JTlRFUgkncCcJCS8qIHBvaW50ZXIgZW50ZXIvbGVhdmUgY2FsbGJhY2tzICovCisjZGVmaW5lIEdPX1JJR0hUCSdyJwkJLyogdXNlIHJpZ2h0IHNjcm9sbGJhciAqLworI2RlZmluZSBHT19WUklHSFQJJ1InCQkvKiByaWdodCBzY3JvbGxiYXIgd2l0aCB2ZXJ0IHNwbGl0ICovCisjZGVmaW5lIEdPX1RFQVJPRkYJJ3QnCQkvKiBhZGQgdGVhci1vZmYgbWVudSBpdGVtcyAqLworI2RlZmluZSBHT19UT09MQkFSCSdUJwkJLyogYWRkIHRvb2xiYXIgKi8KKyNkZWZpbmUgR09fRk9PVEVSCSdGJwkJLyogYWRkIGZvb3RlciAqLworI2RlZmluZSBHT19WRVJUSUNBTAkndicJCS8qIGFycmFuZ2UgZGlhbG9nIGJ1dHRvbnMgdmVydGljYWxseSAqLworI2RlZmluZSBHT19BTEwJCSJhQWJjZkZnaGlsbU1wcnRUdiIgLyogYWxsIHBvc3NpYmxlIGZsYWdzIGZvciAnZ28nICovCisKKy8qIGZsYWdzIGZvciAnY29tbWVudHMnIG9wdGlvbiAqLworI2RlZmluZSBDT01fTkVTVAknbicJCS8qIGNvbW1lbnRzIHN0cmluZ3MgbmVzdCAqLworI2RlZmluZSBDT01fQkxBTksJJ2InCQkvKiBuZWVkcyBibGFuayBhZnRlciBzdHJpbmcgKi8KKyNkZWZpbmUgQ09NX1NUQVJUCSdzJwkJLyogc3RhcnQgb2YgY29tbWVudCAqLworI2RlZmluZSBDT01fTUlERExFCSdtJwkJLyogbWlkZGxlIG9mIGNvbW1lbnQgKi8KKyNkZWZpbmUgQ09NX0VORAkJJ2UnCQkvKiBlbmQgb2YgY29tbWVudCAqLworI2RlZmluZSBDT01fQVVUT19FTkQJJ3gnCQkvKiBsYXN0IGNoYXIgb2YgZW5kIGNsb3NlcyBjb21tZW50ICovCisjZGVmaW5lIENPTV9GSVJTVAknZicJCS8qIGZpcnN0IGxpbmUgY29tbWVudCBvbmx5ICovCisjZGVmaW5lIENPTV9MRUZUCSdsJwkJLyogbGVmdCBhZGp1c3RlZCAqLworI2RlZmluZSBDT01fUklHSFQJJ3InCQkvKiByaWdodCBhZGp1c3RlZCAqLworI2RlZmluZSBDT01fTk9CQUNLCSdPJwkJLyogZG9uJ3QgdXNlIGZvciAiTyIgY29tbWFuZCAqLworI2RlZmluZSBDT01fQUxMCQkibmJzbWV4ZmxyTyIJLyogYWxsIGZsYWdzIGZvciAnY29tbWVudHMnIG9wdGlvbiAqLworI2RlZmluZSBDT01fTUFYX0xFTgk1MAkJLyogbWF4aW11bSBsZW5ndGggb2YgYSBwYXJ0ICovCisKKy8qIGZsYWdzIGZvciAnc3RhdHVzbGluZScgb3B0aW9uICovCisjZGVmaW5lIFNUTF9GSUxFUEFUSAknZicJCS8qIHBhdGggb2YgZmlsZSBpbiBidWZmZXIgKi8KKyNkZWZpbmUgU1RMX0ZVTExQQVRICSdGJwkJLyogZnVsbCBwYXRoIG9mIGZpbGUgaW4gYnVmZmVyICovCisjZGVmaW5lIFNUTF9GSUxFTkFNRQkndCcJCS8qIGxhc3QgcGFydCAodGFpbCkgb2YgZmlsZSBwYXRoICovCisjZGVmaW5lIFNUTF9DT0xVTU4JJ2MnCQkvKiBjb2x1bW4gb2cgY3Vyc29yKi8KKyNkZWZpbmUgU1RMX1ZJUlRDT0wJJ3YnCQkvKiB2aXJ0dWFsIGNvbHVtbiAqLworI2RlZmluZSBTVExfVklSVENPTF9BTFQJJ1YnCQkvKiAtIHdpdGggJ2lmIGRpZmZlcmVudCcgZGlzcGxheSAqLworI2RlZmluZSBTVExfTElORQknbCcJCS8qIGxpbmUgbnVtYmVyIG9mIGN1cnNvciAqLworI2RlZmluZSBTVExfTlVNTElORVMJJ0wnCQkvKiBudW1iZXIgb2YgbGluZXMgaW4gYnVmZmVyICovCisjZGVmaW5lIFNUTF9CVUZOTwknbicJCS8qIGN1cnJlbnQgYnVmZmVyIG51bWJlciAqLworI2RlZmluZSBTVExfS0VZTUFQCSdrJwkJLyogJ2tleW1hcCcgd2hlbiBhY3RpdmUgKi8KKyNkZWZpbmUgU1RMX09GRlNFVAknbycJCS8qIG9mZnNldCBvZiBjaGFyYWN0ZXIgdW5kZXIgY3Vyc29yKi8KKyNkZWZpbmUgU1RMX09GRlNFVF9YCSdPJwkJLyogLSBpbiBoZXhhZGVjaW1hbCAqLworI2RlZmluZSBTVExfQllURVZBTAknYicJCS8qIGJ5dGUgdmFsdWUgb2YgY2hhcmFjdGVyICovCisjZGVmaW5lIFNUTF9CWVRFVkFMX1gJJ0InCQkvKiAtIGluIGhleGFkZWNpbWFsICovCisjZGVmaW5lIFNUTF9ST0ZMQUcJJ3InCQkvKiByZWFkb25seSBmbGFnICovCisjZGVmaW5lIFNUTF9ST0ZMQUdfQUxUCSdSJwkJLyogLSBvdGhlciBkaXNwbGF5ICovCisjZGVmaW5lIFNUTF9IRUxQRkxBRwknaCcJCS8qIHdpbmRvdyBpcyBzaG93aW5nIGEgaGVscCBmaWxlICovCisjZGVmaW5lIFNUTF9IRUxQRkxBR19BTFQgJ0gnCQkvKiAtIG90aGVyIGRpc3BsYXkgKi8KKyNkZWZpbmUgU1RMX0ZJTEVUWVBFCSd5JwkJLyogJ2ZpbGV0eXBlJyAqLworI2RlZmluZSBTVExfRklMRVRZUEVfQUxUICdZJwkJLyogLSBvdGhlciBkaXNwbGF5ICovCisjZGVmaW5lIFNUTF9QUkVWSUVXRkxBRwkndycJCS8qIHdpbmRvdyBpcyBzaG93aW5nIHRoZSBwcmV2aWV3IGJ1ZiAqLworI2RlZmluZSBTVExfUFJFVklFV0ZMQUdfQUxUICdXJwkJLyogLSBvdGhlciBkaXNwbGF5ICovCisjZGVmaW5lIFNUTF9NT0RJRklFRAknbScJCS8qIG1vZGlmaWVkIGZsYWcgKi8KKyNkZWZpbmUgU1RMX01PRElGSUVEX0FMVCAnTScJCS8qIC0gb3RoZXIgZGlzcGxheSAqLworI2RlZmluZSBTVExfUEVSQ0VOVEFHRQkncCcJCS8qIHBlcmNlbnRhZ2UgdGhyb3VnaCBmaWxlICovCisjZGVmaW5lIFNUTF9BTFRQRVJDRU5UCSdQJwkJLyogcGVyY2VudGFnZSBhcyBUT1AgQk9UIEFMTCBvciBOTiUgKi8KKyNkZWZpbmUgU1RMX0FSR0xJU1RTVEFUCSdhJwkJLyogYXJndW1lbnQgbGlzdCBzdGF0dXMgYXMgKHggb2YgeSkgKi8KKyNkZWZpbmUgU1RMX1BBR0VOVU0JJ04nCQkvKiBwYWdlIG51bWJlciAod2hlbiBwcmludGluZykqLworI2RlZmluZSBTVExfVklNX0VYUFIJJ3snCQkvKiBzdGFydCBvZiBleHByZXNzaW9uIHRvIHN1YnN0aXR1dGUgKi8KKyNkZWZpbmUgU1RMX01JRERMRU1BUksJJz0nCQkvKiBzZXBhcmF0aW9uIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQgKi8KKyNkZWZpbmUgU1RMX1RSVU5DTUFSSwknPCcJCS8qIHRydW5jYXRpb24gbWFyayBpZiBsaW5lIGlzIHRvbyBsb25nKi8KKyNkZWZpbmUgU1RMX0hJR0hMSUdIVAknKicJCS8qIGhpZ2hsaWdodCBmcm9tIChVc2VyKTEuLjkgb3IgMCAqLworI2RlZmluZSBTVExfQUxMCQkoKGNoYXJfdSAqKSAiZkZ0Y3ZWbExrbm9PYkJyUmhIbVl5V3dNcFBhTnsiKQorCisvKiBmbGFncyB1c2VkIGZvciBwYXJzZWQgJ3dpbGRtb2RlJyAqLworI2RlZmluZSBXSU1fRlVMTAkxCisjZGVmaW5lIFdJTV9MT05HRVNUCTIKKyNkZWZpbmUgV0lNX0xJU1QJNAorCisvKiBhcmd1bWVudHMgZm9yIGNhbl9icygpICovCisjZGVmaW5lIEJTX0lOREVOVAknaScJLyogIkluZGVudCIgKi8KKyNkZWZpbmUgQlNfRU9MCQknbycJLyogImVPbCIgKi8KKyNkZWZpbmUgQlNfU1RBUlQJJ3MnCS8qICJTdGFydCIgKi8KKworI2RlZmluZSBMSVNQV09SRF9WQUxVRQkiZGVmdW4sZGVmaW5lLGRlZm1hY3JvLHNldCEsbGFtYmRhLGlmLGNhc2UsbGV0LGZsZXQsbGV0KixsZXRyZWMsZG8sZG8qLGRlZmluZS1zeW50YXgsbGV0LXN5bnRheCxsZXRyZWMtc3ludGF4LGRlc3RydWN0dXJpbmctYmluZCxkZWZwYWNrYWdlLGRlZnBhcmFtZXRlcixkZWZzdHJ1Y3QsZGVmdHlwZSxkZWZ2YXIsZG8tYWxsLXN5bWJvbHMsZG8tZXh0ZXJuYWwtc3ltYm9scyxkby1zeW1ib2xzLGRvbGlzdCxkb3RpbWVzLGVjYXNlLGV0eXBlY2FzZSxldmFsLXdoZW4sbGFiZWxzLG1hY3JvbGV0LG11bHRpcGxlLXZhbHVlLWJpbmQsbXVsdGlwbGUtdmFsdWUtY2FsbCxtdWx0aXBsZS12YWx1ZS1wcm9nMSxtdWx0aXBsZS12YWx1ZS1zZXRxLHByb2cxLHByb2d2LHR5cGVjYXNlLHVubGVzcyx1bndpbmQtcHJvdGVjdCx3aGVuLHdpdGgtaW5wdXQtZnJvbS1zdHJpbmcsd2l0aC1vcGVuLWZpbGUsd2l0aC1vcGVuLXN0cmVhbSx3aXRoLW91dHB1dC10by1zdHJpbmcsd2l0aC1wYWNrYWdlLWl0ZXJhdG9yLGRlZmluZS1jb25kaXRpb24saGFuZGxlci1iaW5kLGhhbmRsZXItY2FzZSxyZXN0YXJ0LWJpbmQscmVzdGFydC1jYXNlLHdpdGgtc2ltcGxlLXJlc3RhcnQsc3RvcmUtdmFsdWUsdXNlLXZhbHVlLG11ZmZsZS13YXJuaW5nLGFib3J0LGNvbnRpbnVlLHdpdGgtc2xvdHMsd2l0aC1zbG90cyosd2l0aC1hY2Nlc3NvcnMsd2l0aC1hY2Nlc3NvcnMqLGRlZmNsYXNzLGRlZm1ldGhvZCxwcmludC11bnJlYWRhYmxlLW9iamVjdCIKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIGFjdHVhbCB2YXJpYWJhYmxlcyBmb3IgdGhlIG9wdGlvbnMKKyAqLworCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKK0VYVEVSTiBsb25nCXBfYWxlcGg7CS8qICdhbGVwaCcgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9ORVRCRUFOU19JTlRHKSB8fCBkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKQorRVhURVJOIGludAlwX2FjZDsJCS8qICdhdXRvY2hkaXInICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX01CWVRFCitFWFRFUk4gY2hhcl91CSpwX2FtYnc7CS8qICdhbWJpd2lkdGgnICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKE1BQ09TX1gpCitFWFRFUk4gaW50CSpwX2FudGlhbGlhczsJLyogJ2FudGlhbGlhcycgKi8KKyNlbmRpZgorRVhURVJOIGludAlwX2FyOwkJLyogJ2F1dG9yZWFkJyAqLworRVhURVJOIGludAlwX2F3OwkJLyogJ2F1dG93cml0ZScgKi8KK0VYVEVSTiBpbnQJcF9hd2E7CQkvKiAnYXV0b3dyaXRlYWxsJyAqLworRVhURVJOIGNoYXJfdQkqcF9iczsJCS8qICdiYWNrc3BhY2UnICovCitFWFRFUk4gY2hhcl91CSpwX2JnOwkJLyogJ2JhY2tncm91bmQnICovCitFWFRFUk4gaW50CXBfYms7CQkvKiAnYmFja3VwJyAqLworRVhURVJOIGNoYXJfdQkqcF9ia2M7CQkvKiAnYmFja3VwY29weScgKi8KK0VYVEVSTiB1bnNpZ25lZAlia2NfZmxhZ3M7CisjaWZkZWYgSU5fT1BUSU9OX0MKK3N0YXRpYyBjaGFyICoocF9ia2NfdmFsdWVzW10pID0geyJ5ZXMiLCAiYXV0byIsICJubyIsICJicmVha3N5bWxpbmsiLCAiYnJlYWtoYXJkbGluayIsIE5VTEx9OworI2VuZGlmCisjIGRlZmluZSBCS0NfWUVTCQkweDAwMQorIyBkZWZpbmUgQktDX0FVVE8JCTB4MDAyCisjIGRlZmluZSBCS0NfTk8JCQkweDAwNAorIyBkZWZpbmUgQktDX0JSRUFLU1lNTElOSwkweDAwOAorIyBkZWZpbmUgQktDX0JSRUFLSEFSRExJTksJMHgwMTAKK0VYVEVSTiBjaGFyX3UJKnBfYmRpcjsJLyogJ2JhY2t1cGRpcicgKi8KK0VYVEVSTiBjaGFyX3UJKnBfYmV4OwkJLyogJ2JhY2t1cGV4dCcgKi8KKyNpZmRlZiBGRUFUX1dJTERJR04KK0VYVEVSTiBjaGFyX3UJKnBfYnNrOwkJLyogJ2JhY2t1cHNraXAnICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0JFVkFMCitFWFRFUk4gbG9uZwlwX2JkbGF5OwkvKiAnYmFsbG9vbmRlbGF5JyAqLworIyBpZiBkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKSB8fCBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykKK0VYVEVSTiBpbnQJcF9iZXZhbDsJLyogJ2JhbGxvb25ldmFsJyAqLworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgRkVBVF9CUk9XU0UKK0VYVEVSTiBjaGFyX3UJKnBfYnNkaXI7CS8qICdicm93c2VkaXInICovCisjZW5kaWYKKyNpZmRlZiBNU0RPUworRVhURVJOIGludAlwX2Jpb3NrOwkvKiAnYmlvc2tleScgKi8KK0VYVEVSTiBpbnQJcF9jb25zazsJLyogJ2NvbnNrZXknICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0xJTkVCUkVBSworRVhURVJOIGNoYXJfdQkqcF9icmVha2F0OwkvKiAnYnJlYWthdCcgKi8KKyNlbmRpZgorRVhURVJOIGNoYXJfdQkqcF9jbXA7CQkvKiAnY2FzZW1hcCcgKi8KK0VYVEVSTiB1bnNpZ25lZAljbXBfZmxhZ3M7CisjaWZkZWYgSU5fT1BUSU9OX0MKK3N0YXRpYyBjaGFyICoocF9jbXBfdmFsdWVzW10pID0geyJpbnRlcm5hbCIsICJrZWVwYXNjaWkiLCBOVUxMfTsKKyNlbmRpZgorI2RlZmluZSBDTVBfSU5URVJOQUwJCTB4MDAxCisjZGVmaW5lIENNUF9LRUVQQVNDSUkJCTB4MDAyCisjaWZkZWYgRkVBVF9NQllURQorRVhURVJOIGNoYXJfdQkqcF9lbmM7CQkvKiAnZW5jb2RpbmcnICovCitFWFRFUk4gaW50CXBfZGVjbzsJCS8qICdkZWxjb21iaW5lJyAqLworIyBpZmRlZiBGRUFUX0VWQUwKK0VYVEVSTiBjaGFyX3UJKnBfY2N2OwkJLyogJ2NoYXJjb252ZXJ0JyAqLworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgRkVBVF9DTURXSU4KK0VYVEVSTiBjaGFyX3UJKnBfY2VkaXQ7CS8qICdjZWRpdCcgKi8KK0VYVEVSTiBsb25nCXBfY3doOwkJLyogJ2NtZHdpbmhlaWdodCcgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfQ0xJUEJPQVJECitFWFRFUk4gY2hhcl91CSpwX2NiOwkJLyogJ2NsaXBib2FyZCcgKi8KK0VYVEVSTiBpbnQJY2xpcF91bm5hbWVkIElOSVQoPSBGQUxTRSk7CitFWFRFUk4gaW50CWNsaXBfYXV0b3NlbGVjdCBJTklUKD0gRkFMU0UpOworRVhURVJOIGludAljbGlwX2F1dG9zZWxlY3RtbCBJTklUKD0gRkFMU0UpOworRVhURVJOIHJlZ3Byb2dfVCAqY2xpcF9leGNsdWRlX3Byb2cgSU5JVCg9IE5VTEwpOworI2VuZGlmCitFWFRFUk4gbG9uZwlwX2NoOwkJLyogJ2NtZGhlaWdodCcgKi8KKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCitFWFRFUk4gaW50CXBfY29uZmlybTsJLyogJ2NvbmZpcm0nICovCisjZW5kaWYKK0VYVEVSTiBpbnQJcF9jcDsJCS8qICdjb21wYXRpYmxlJyAqLworRVhURVJOIGNoYXJfdQkqcF9jcG87CQkvKiAnY3BvcHRpb25zJyAqLworI2lmZGVmIEZFQVRfQ1NDT1BFCitFWFRFUk4gY2hhcl91CSpwX2NzcHJnOwkvKiAnY3Njb3BlcHJnJyAqLworIyBpZmRlZiBGRUFUX1FVSUNLRklYCitFWFRFUk4gY2hhcl91CSpwX2NzcWY7CS8qICdjc2NvcGVxdWlja2ZpeCcgKi8KKyMgIGRlZmluZQlDU1FGX0NNRFMgICAic2dkY3RlZmkiCisjICBkZWZpbmUJQ1NRRl9GTEFHUyAgIistMCIKKyMgZW5kaWYKK0VYVEVSTiBpbnQJcF9jc3Q7CQkvKiAnY3Njb3BldGFnJyAqLworRVhURVJOIGxvbmcJcF9jc3RvOwkJLyogJ2NzY29wZXRhZ29yZGVyJyAqLworRVhURVJOIGxvbmcJcF9jc3BjOwkJLyogJ2NzY29wZXBhdGhjb21wJyAqLworRVhURVJOIGludAlwX2NzdmVyYm9zZTsJLyogJ2NzY29wZXZlcmJvc2UnICovCisjZW5kaWYKK0VYVEVSTiBjaGFyX3UJKnBfZGVidWc7CS8qICdkZWJ1ZycgKi8KKyNpZmRlZiBGRUFUX0ZJTkRfSUQKK0VYVEVSTiBjaGFyX3UJKnBfZGVmOwkJLyogJ2RlZmluZScgKi8KK0VYVEVSTiBjaGFyX3UJKnBfaW5jOworI2VuZGlmCisjaWZkZWYgRkVBVF9ESUZGCitFWFRFUk4gY2hhcl91CSpwX2RpcDsJCS8qICdkaWZmb3B0JyAqLworIyBpZmRlZiBGRUFUX0VWQUwKK0VYVEVSTiBjaGFyX3UJKnBfZGV4OwkJLyogJ2RpZmZleHByJyAqLworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECitFWFRFUk4gY2hhcl91CSpwX2RpY3Q7CS8qICdkaWN0aW9uYXJ5JyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9ESUdSQVBIUworRVhURVJOIGludAlwX2RnOwkJLyogJ2RpZ3JhcGgnICovCisjZW5kaWYKK0VYVEVSTiBjaGFyX3UJKnBfZGlyOwkJLyogJ2RpcmVjdG9yeScgKi8KK0VYVEVSTiBjaGFyX3UJKnBfZHk7CQkvKiAnZGlzcGxheScgKi8KK0VYVEVSTiB1bnNpZ25lZAlkeV9mbGFnczsKKyNpZmRlZiBJTl9PUFRJT05fQworc3RhdGljIGNoYXIgKihwX2R5X3ZhbHVlc1tdKSA9IHsibGFzdGxpbmUiLCAidWhleCIsIE5VTEx9OworI2VuZGlmCisjZGVmaW5lIERZX0xBU1RMSU5FCQkweDAwMQorI2RlZmluZSBEWV9VSEVYCQkJMHgwMDIKK0VYVEVSTiBpbnQJcF9lZDsJCS8qICdlZGNvbXBhdGlibGUnICovCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKK0VYVEVSTiBjaGFyX3UJKnBfZWFkOwkJLyogJ2VhZGlyZWN0aW9uJyAqLworI2VuZGlmCitFWFRFUk4gaW50CXBfZWE7CQkvKiAnZXF1YWxhbHdheXMnICovCitFWFRFUk4gY2hhcl91CSpwX2VwOwkJLyogJ2VxdWFscHJnJyAqLworRVhURVJOIGludAlwX2ViOwkJLyogJ2Vycm9yYmVsbHMnICovCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorRVhURVJOIGNoYXJfdQkqcF9lZjsJCS8qICdlcnJvcmZpbGUnICovCitFWFRFUk4gY2hhcl91CSpwX2VmbTsJCS8qICdlcnJvcmZvcm1hdCcgKi8KK0VYVEVSTiBjaGFyX3UJKnBfZ2VmbTsJLyogJ2dyZXBmb3JtYXQnICovCitFWFRFUk4gY2hhcl91CSpwX2dwOwkJLyogJ2dyZXBwcmcnICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0FVVE9DTUQKK0VYVEVSTiBjaGFyX3UJKnBfZWk7CQkvKiAnZXZlbnRpZ25vcmUnICovCisjZW5kaWYKK0VYVEVSTiBpbnQJcF9lazsJCS8qICdlc2NrZXlzJyAqLworRVhURVJOIGludAlwX2V4cmM7CQkvKiAnZXhyYycgKi8KKyNpZmRlZiBGRUFUX01CWVRFCitFWFRFUk4gY2hhcl91CSpwX2ZlbmNzOwkvKiAnZmlsZWVuY29kaW5ncycgKi8KKyNlbmRpZgorRVhURVJOIGNoYXJfdQkqcF9mZnM7CQkvKiAnZmlsZWZvcm1hdHMnICovCisjaWZkZWYgRkVBVF9GT0xESU5HCitFWFRFUk4gY2hhcl91CSpwX2ZjbDsJCS8qICdmb2xkY2xvc2UnICovCitFWFRFUk4gbG9uZwlwX2ZkbHM7CQkvKiAnZm9sZGxldmVsc3RhcnQnICovCitFWFRFUk4gY2hhcl91CSpwX2ZkbzsJCS8qICdmb2xkb3BlbicgKi8KK0VYVEVSTiB1bnNpZ25lZAlmZG9fZmxhZ3M7CisjIGlmZGVmIElOX09QVElPTl9DCitzdGF0aWMgY2hhciAqKHBfZmRvX3ZhbHVlc1tdKSA9IHsiYWxsIiwgImJsb2NrIiwgImhvciIsICJtYXJrIiwgInBlcmNlbnQiLAorCQkJCSAicXVpY2tmaXgiLCAic2VhcmNoIiwgInRhZyIsICJpbnNlcnQiLAorCQkJCSAidW5kbyIsICJqdW1wIiwgTlVMTH07CisjIGVuZGlmCisjIGRlZmluZSBGRE9fQUxMCQkweDAwMQorIyBkZWZpbmUgRkRPX0JMT0NLCQkweDAwMgorIyBkZWZpbmUgRkRPX0hPUgkJMHgwMDQKKyMgZGVmaW5lIEZET19NQVJLCQkweDAwOAorIyBkZWZpbmUgRkRPX1BFUkNFTlQJCTB4MDEwCisjIGRlZmluZSBGRE9fUVVJQ0tGSVgJCTB4MDIwCisjIGRlZmluZSBGRE9fU0VBUkNICQkweDA0MAorIyBkZWZpbmUgRkRPX1RBRwkJMHgwODAKKyMgZGVmaW5lIEZET19JTlNFUlQJCTB4MTAwCisjIGRlZmluZSBGRE9fVU5ETwkJMHgyMDAKKyMgZGVmaW5lIEZET19KVU1QCQkweDQwMAorI2VuZGlmCitFWFRFUk4gY2hhcl91CSpwX2ZwOwkJLyogJ2Zvcm1hdHByZycgKi8KK0VYVEVSTiBpbnQJcF9nZDsJCS8qICdnZGVmYXVsdCcgKi8KKyNpZmRlZiBGRUFUX1BSSU5URVIKK0VYVEVSTiBjaGFyX3UJKnBfcGRldjsJLyogJ3ByaW50ZGV2aWNlJyAqLworIyBpZmRlZiBGRUFUX1BPU1RTQ1JJUFQKK0VYVEVSTiBjaGFyX3UJKnBfcGVuYzsJLyogJ3ByaW50ZW5jb2RpbmcnICovCitFWFRFUk4gY2hhcl91CSpwX3BleHByOwkvKiAncHJpbnRleHByJyAqLworIyBlbmRpZgorRVhURVJOIGNoYXJfdQkqcF9wZm47CQkvKiAncHJpbnRmb250JyAqLworRVhURVJOIGNoYXJfdQkqcF9wb3B0OwkvKiAncHJpbnRvcHRpb25zJyAqLworRVhURVJOIGNoYXJfdQkqcF9oZWFkZXI7CS8qICdwcmludGhlYWRlcicgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJCitFWFRFUk4gY2hhcl91CSpwX2d1aWZvbnQ7CS8qICdndWlmb250JyAqLworIyBpZmRlZiBGRUFUX1hGT05UU0VUCitFWFRFUk4gY2hhcl91CSpwX2d1aWZvbnRzZXQ7CS8qICdndWlmb250c2V0JyAqLworIyBlbmRpZgorIyBpZmRlZiBGRUFUX01CWVRFCitFWFRFUk4gY2hhcl91CSpwX2d1aWZvbnR3aWRlOwkvKiAnZ3VpZm9udHdpZGUnICovCisjIGVuZGlmCitFWFRFUk4gaW50CXBfZ3VpcHR5OwkvKiAnZ3VpcHR5JyAqLworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfWDExKQorRVhURVJOIGxvbmcJcF9naHI7CQkvKiAnZ3VpaGVhZHJvb20nICovCisjZW5kaWYKKyNpZmRlZiBDVVJTT1JfU0hBUEUKK0VYVEVSTiBjaGFyX3UJKnBfZ3VpY3Vyc29yOwkvKiAnZ3VpY3Vyc29yJyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9NT1VTRVNIQVBFCitFWFRFUk4gY2hhcl91CSpwX21vdXNlc2hhcGU7CS8qICdtb3VzZXNoYXBlJyAqLworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0dVSSkKK0VYVEVSTiBjaGFyX3UJKnBfZ287CQkvKiAnZ3Vpb3B0aW9ucycgKi8KKyNlbmRpZgorRVhURVJOIGNoYXJfdQkqcF9oZjsJCS8qICdoZWxwZmlsZScgKi8KKyNpZmRlZiBGRUFUX1dJTkRPV1MKK0VYVEVSTiBsb25nCXBfaGg7CQkvKiAnaGVscGhlaWdodCcgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfTVVMVElfTEFORworRVhURVJOIGNoYXJfdQkqcF9obGc7CQkvKiAnaGVscGxhbmcnICovCisjZW5kaWYKK0VYVEVSTiBpbnQJcF9oaWQ7CQkvKiAnaGlkZGVuJyAqLworLyogVXNlIFBfSElEIHRvIGNoZWNrIGlmIGEgYnVmZmVyIGlzIHRvIGJlIGhpZGRlbiB3aGVuIGl0IGlzIG5vIGxvbmdlcgorICogdmlzaWJsZSBpbiBhIHdpbmRvdy4gKi8KKyNpZm5kZWYgRkVBVF9RVUlDS0ZJWAorIyBkZWZpbmUgUF9ISUQoZHVtbXkpIChwX2hpZCB8fCBjbWRtb2QuaGlkZSkKKyNlbHNlCisjIGRlZmluZSBQX0hJRChidWYpIChidWZfaGlkZShidWYpKQorI2VuZGlmCitFWFRFUk4gY2hhcl91CSpwX2hsOwkJLyogJ2hpZ2hsaWdodCcgKi8KK0VYVEVSTiBpbnQJcF9obHM7CQkvKiAnaGxzZWFyY2gnICovCitFWFRFUk4gbG9uZwlwX2hpOwkJLyogJ2hpc3RvcnknICovCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKK0VYVEVSTiBpbnQJcF9oa21hcDsJLyogJ2hrbWFwJyAqLworRVhURVJOIGludAlwX2hrbWFwcDsJLyogJ2hrbWFwcCcgKi8KKyMgaWZkZWYgRkVBVF9GS01BUAorRVhURVJOIGludAlwX2ZrbWFwOwkvKiAnZmttYXAnICovCitFWFRFUk4gaW50CXBfYWx0a2V5bWFwOwkvKiAnYWx0a2V5bWFwJyAqLworIyBlbmRpZgorIyBpZmRlZiBGRUFUX0FSQUJJQworRVhURVJOIGludAlwX2Fyc2hhcGU7CS8qICdhcmFiaWNzaGFwZScgKi8KKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEZFQVRfVElUTEUKK0VYVEVSTiBpbnQJcF9pY29uOwkJLyogJ2ljb24nICovCitFWFRFUk4gY2hhcl91CSpwX2ljb25zdHJpbmc7CS8qICdpY29uc3RyaW5nJyAqLworI2VuZGlmCitFWFRFUk4gaW50CXBfaWM7CQkvKiAnaWdub3JlY2FzZScgKi8KKyNpZiBkZWZpbmVkKEZFQVRfWElNKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0dUSykKK0VYVEVSTiBjaGFyX3UJKnBfaW1hazsJLyogJ2ltYWN0aXZhdGVrZXknICovCisjZW5kaWYKKyNpZmRlZiBVU0VfSU1fQ09OVFJPTAorRVhURVJOIGludAlwX2ltY21kbGluZTsJLyogJ2ltY21kbGluZScgKi8KK0VYVEVSTiBpbnQJcF9pbWRpc2FibGU7CS8qICdpbWRpc2FibGUnICovCisjZW5kaWYKK0VYVEVSTiBpbnQJcF9pczsJCS8qICdpbmNzZWFyY2gnICovCitFWFRFUk4gaW50CXBfaW07CQkvKiAnaW5zZXJ0bW9kZScgKi8KK0VYVEVSTiBjaGFyX3UJKnBfaXNmOwkJLyogJ2lzZm5hbWUnICovCitFWFRFUk4gY2hhcl91CSpwX2lzaTsJCS8qICdpc2lkZW50JyAqLworRVhURVJOIGNoYXJfdQkqcF9pc3A7CQkvKiAnaXNwcmludCcgKi8KK0VYVEVSTiBpbnQJcF9qczsJCS8qICdqb2luc3BhY2VzJyAqLworRVhURVJOIGNoYXJfdQkqcF9rcDsJCS8qICdrZXl3b3JkcHJnJyAqLworI2lmZGVmIEZFQVRfVklTVUFMCitFWFRFUk4gY2hhcl91CSpwX2ttOwkJLyogJ2tleW1vZGVsJyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9MQU5HTUFQCitFWFRFUk4gY2hhcl91CSpwX2xhbmdtYXA7CS8qICdsYW5nbWFwJyovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfTUVOVSkgJiYgZGVmaW5lZChGRUFUX01VTFRJX0xBTkcpCitFWFRFUk4gY2hhcl91CSpwX2xtOwkJLyogJ2xhbmdtZW51JyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUkKK0VYVEVSTiBsb25nCXBfbGluZXNwYWNlOwkvKiAnbGluZXNwYWNlJyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9MSVNQCitFWFRFUk4gY2hhcl91CSpwX2xpc3B3b3JkczsJLyogJ2xpc3B3b3JkcycgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfV0lORE9XUworRVhURVJOIGxvbmcJcF9sczsJCS8qICdsYXN0c3RhdHVzJyAqLworI2VuZGlmCitFWFRFUk4gY2hhcl91CSpwX2xjczsJCS8qICdsaXN0Y2hhcnMnICovCisKK0VYVEVSTiBpbnQJcF9sejsJCS8qICdsYXp5cmVkcmF3JyAqLworRVhURVJOIGludAlwX2xwbDsJCS8qICdsb2FkcGx1Z2lucycgKi8KK0VYVEVSTiBpbnQJcF9tYWdpYzsJLyogJ21hZ2ljJyAqLworI2lmZGVmIEZFQVRfUVVJQ0tGSVgKK0VYVEVSTiBjaGFyX3UJKnBfbWVmOwkJLyogJ21ha2VlZicgKi8KK0VYVEVSTiBjaGFyX3UJKnBfbXA7CQkvKiAnbWFrZXByZycgKi8KKyNlbmRpZgorRVhURVJOIGxvbmcJcF9tYXQ7CQkvKiAnbWF0Y2h0aW1lJyAqLworI2lmZGVmIEZFQVRfRVZBTAorRVhURVJOIGxvbmcJcF9tZmQ7CQkvKiAnbWF4ZnVuY2RlcHRoJyAqLworI2VuZGlmCitFWFRFUk4gbG9uZwlwX21tZDsJCS8qICdtYXhtYXBkZXB0aCcgKi8KK0VYVEVSTiBsb25nCXBfbW07CQkvKiAnbWF4bWVtJyAqLworRVhURVJOIGxvbmcJcF9tbXQ7CQkvKiAnbWF4bWVtdG90JyAqLworI2lmZGVmIEZFQVRfTUVOVQorRVhURVJOIGxvbmcJcF9taXM7CQkvKiAnbWVudWl0ZW1zJyAqLworI2VuZGlmCitFWFRFUk4gbG9uZwlwX21sczsJCS8qICdtb2RlbGluZXMnICovCitFWFRFUk4gY2hhcl91CSpwX21vdXNlOwkvKiAnbW91c2UnICovCisjaWZkZWYgRkVBVF9HVUkKK0VYVEVSTiBpbnQJcF9tb3VzZWY7CS8qICdtb3VzZWZvY3VzJyAqLworRVhURVJOIGludAlwX21oOwkJLyogJ21vdXNlaGlkZScgKi8KKyNlbmRpZgorRVhURVJOIGNoYXJfdQkqcF9tb3VzZW07CS8qICdtb3VzZW1vZGVsJyAqLworRVhURVJOIGxvbmcJcF9tb3VzZXQ7CS8qICdtb3VzZXRpbWUnICovCitFWFRFUk4gaW50CXBfbW9yZTsJCS8qICdtb3JlJyAqLworRVhURVJOIGNoYXJfdQkqcF9wYXJhOwkvKiAncGFyYWdyYXBocycgKi8KK0VYVEVSTiBpbnQJcF9wYXN0ZTsJLyogJ3Bhc3RlJyAqLworRVhURVJOIGNoYXJfdQkqcF9wdDsJCS8qICdwYXN0ZXRvZ2dsZScgKi8KKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgJiYgZGVmaW5lZChGRUFUX0RJRkYpCitFWFRFUk4gY2hhcl91CSpwX3BleDsJCS8qICdwYXRjaGV4cHInICovCisjZW5kaWYKK0VYVEVSTiBjaGFyX3UJKnBfcG07CQkvKiAncGF0Y2htb2RlJyAqLworRVhURVJOIGNoYXJfdQkqcF9wYXRoOwkvKiAncGF0aCcgKi8KKyNpZmRlZiBGRUFUX1NFQVJDSFBBVEgKK0VYVEVSTiBjaGFyX3UJKnBfY2RwYXRoOwkvKiAnY2RwYXRoJyAqLworI2VuZGlmCitFWFRFUk4gaW50CXBfcmVtYXA7CS8qICdyZW1hcCcgKi8KK0VYVEVSTiBsb25nCXBfcmVwb3J0OwkvKiAncmVwb3J0JyAqLworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpCitFWFRFUk4gbG9uZwlwX3B2aDsJCS8qICdwcmV2aWV3aGVpZ2h0JyAqLworI2VuZGlmCisjaWZkZWYgV0lOMzI2NAorRVhURVJOIGludAlwX3JzOwkJLyogJ3Jlc3RvcmVzY3JlZW4nICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorRVhURVJOIGludAlwX2FyaTsJCS8qICdhbGxvd3JldmlucycgKi8KK0VYVEVSTiBpbnQJcF9yaTsJCS8qICdyZXZpbnMnICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworRVhURVJOIGludAlwX3J1OwkJLyogJ3J1bGVyJyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9TVExfT1BUCitFWFRFUk4gY2hhcl91CSpwX3J1ZjsJCS8qICdydWxlcmZvcm1hdCcgKi8KKyNlbmRpZgorRVhURVJOIGNoYXJfdQkqcF9ydHA7CQkvKiAncnVudGltZXBhdGgnICovCitFWFRFUk4gbG9uZwlwX3NqOwkJLyogJ3Njcm9sbGp1bXAnICovCitFWFRFUk4gbG9uZwlwX3NvOwkJLyogJ3Njcm9sbG9mZicgKi8KKyNpZmRlZiBGRUFUX1NDUk9MTEJJTkQKK0VYVEVSTiBjaGFyX3UJKnBfc2JvOwkJLyogJ3Njcm9sbG9wdCcgKi8KKyNlbmRpZgorRVhURVJOIGNoYXJfdQkqcF9zZWN0aW9uczsJLyogJ3NlY3Rpb25zJyAqLworRVhURVJOIGludAlwX3NlY3VyZTsJLyogJ3NlY3VyZScgKi8KKyNpZmRlZiBGRUFUX1ZJU1VBTAorRVhURVJOIGNoYXJfdQkqcF9zZWw7CQkvKiAnc2VsZWN0aW9uJyAqLworRVhURVJOIGNoYXJfdQkqcF9zbG07CQkvKiAnc2VsZWN0bW9kZScgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfU0VTU0lPTgorRVhURVJOIGNoYXJfdQkqcF9zc29wOwkvKiAnc2Vzc2lvbm9wdGlvbnMnICovCitFWFRFUk4gdW5zaWduZWQJc3NvcF9mbGFnczsKKyMgaWZkZWYgSU5fT1BUSU9OX0MKKy8qIEFsc28gdXNlZCBmb3IgJ3ZpZXdvcHRpb25zJyEgKi8KK3N0YXRpYyBjaGFyICoocF9zc29wX3ZhbHVlc1tdKSA9IHsiYnVmZmVycyIsICJ3aW5wb3MiLCAicmVzaXplIiwgIndpbnNpemUiLAorICAgICJsb2NhbG9wdGlvbnMiLCAib3B0aW9ucyIsICJoZWxwIiwgImJsYW5rIiwgImdsb2JhbHMiLCAic2xhc2giLCAidW5peCIsCisgICAgInNlc2RpciIsICJjdXJkaXIiLCAiZm9sZHMiLCAiY3Vyc29yIiwgTlVMTH07CisjIGVuZGlmCisjIGRlZmluZSBTU09QX0JVRkZFUlMJCTB4MDAxCisjIGRlZmluZSBTU09QX1dJTlBPUwkJMHgwMDIKKyMgZGVmaW5lIFNTT1BfUkVTSVpFCQkweDAwNAorIyBkZWZpbmUgU1NPUF9XSU5TSVpFCQkweDAwOAorIyBkZWZpbmUgU1NPUF9MT0NBTE9QVElPTlMJMHgwMTAKKyMgZGVmaW5lIFNTT1BfT1BUSU9OUwkJMHgwMjAKKyMgZGVmaW5lIFNTT1BfSEVMUAkJMHgwNDAKKyMgZGVmaW5lIFNTT1BfQkxBTksJCTB4MDgwCisjIGRlZmluZSBTU09QX0dMT0JBTFMJCTB4MTAwCisjIGRlZmluZSBTU09QX1NMQVNICQkweDIwMAorIyBkZWZpbmUgU1NPUF9VTklYCQkweDQwMAorIyBkZWZpbmUgU1NPUF9TRVNESVIJCTB4ODAwCisjIGRlZmluZSBTU09QX0NVUkRJUgkJMHgxMDAwCisjIGRlZmluZSBTU09QX0ZPTERTCQkweDIwMDAKKyMgZGVmaW5lIFNTT1BfQ1VSU09SCQkweDQwMDAKKyNlbmRpZgorRVhURVJOIGNoYXJfdQkqcF9zaDsJCS8qICdzaGVsbCcgKi8KK0VYVEVSTiBjaGFyX3UJKnBfc2hjZjsJLyogJ3NoZWxsY21kZmxhZycgKi8KKyNpZmRlZiBGRUFUX1FVSUNLRklYCitFWFRFUk4gY2hhcl91CSpwX3NwOwkJLyogJ3NoZWxscGlwZScgKi8KKyNlbmRpZgorRVhURVJOIGNoYXJfdQkqcF9zaHE7CQkvKiAnc2hlbGxxdW90ZScgKi8KK0VYVEVSTiBjaGFyX3UJKnBfc3hxOwkJLyogJ3NoZWxseHF1b3RlJyAqLworRVhURVJOIGNoYXJfdQkqcF9zcnI7CQkvKiAnc2hlbGxyZWRpcicgKi8KKyNpZmRlZiBBTUlHQQorRVhURVJOIGxvbmcJcF9zdDsJCS8qICdzaGVsbHR5cGUnICovCisjZW5kaWYKKyNpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKK0VYVEVSTiBpbnQJcF9zc2w7CQkvKiAnc2hlbGxzbGFzaCcgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfU1RMX09QVAorRVhURVJOIGNoYXJfdQkqcF9zdGw7CQkvKiAnc3RhdHVzbGluZScgKi8KKyNlbmRpZgorRVhURVJOIGludAlwX3NyOwkJLyogJ3NoaWZ0cm91bmQnICovCitFWFRFUk4gY2hhcl91CSpwX3NobTsJCS8qICdzaG9ydG1lc3MnICovCisjaWZkZWYgRkVBVF9MSU5FQlJFQUsKK0VYVEVSTiBjaGFyX3UJKnBfc2JyOwkJLyogJ3Nob3dicmVhaycgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfQ01ETF9JTkZPCitFWFRFUk4gaW50CXBfc2M7CQkvKiAnc2hvd2NtZCcgKi8KKyNlbmRpZgorRVhURVJOIGludAlwX3NmdDsJCS8qICdzaG93ZnVsbHRhZycgKi8KK0VYVEVSTiBpbnQJcF9zbTsJCS8qICdzaG93bWF0Y2gnICovCitFWFRFUk4gaW50CXBfc21kOwkJLyogJ3Nob3dtb2RlJyAqLworRVhURVJOIGxvbmcJcF9zczsJCS8qICdzaWRlc2Nyb2xsJyAqLworRVhURVJOIGxvbmcJcF9zaXNvOwkJLyogJ3NpZGVzY3JvbGxvZmYnICovCitFWFRFUk4gaW50CXBfc2NzOwkJLyogJ3NtYXJ0Y2FzZScgKi8KK0VYVEVSTiBpbnQJcF9zdGE7CQkvKiAnc21hcnR0YWInICovCisjaWZkZWYgRkVBVF9XSU5ET1dTCitFWFRFUk4gaW50CXBfc2I7CQkvKiAnc3BsaXRiZWxvdycgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfVkVSVFNQTElUCitFWFRFUk4gaW50CXBfc3ByOwkJLyogJ3NwbGl0cmlnaHQnICovCisjZW5kaWYKK0VYVEVSTiBpbnQJcF9zb2w7CQkvKiAnc3RhcnRvZmxpbmUnICovCitFWFRFUk4gY2hhcl91CSpwX3N1OwkJLyogJ3N1ZmZpeGVzJyAqLworRVhURVJOIGNoYXJfdQkqcF9zd3M7CQkvKiAnc3dhcHN5bmMnICovCitFWFRFUk4gY2hhcl91CSpwX3N3YjsJCS8qICdzd2l0Y2hidWYnICovCitFWFRFUk4gaW50CXBfdGJzOwkJLyogJ3RhZ2JzZWFyY2gnICovCitFWFRFUk4gbG9uZwlwX3RsOwkJLyogJ3RhZ2xlbmd0aCcgKi8KK0VYVEVSTiBpbnQJcF90cjsJCS8qICd0YWdyZWxhdGl2ZScgKi8KK0VYVEVSTiBjaGFyX3UJKnBfdGFnczsJLyogJ3RhZ3MnICovCitFWFRFUk4gaW50CXBfdGdzdDsJCS8qICd0YWdzdGFjaycgKi8KKyNpZmRlZiBGRUFUX0FSQUJJQworRVhURVJOIGludAlwX3RiaWRpOwkvKiAndGVybWJpZGknICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX01CWVRFCitFWFRFUk4gY2hhcl91CSpwX3RlbmM7CS8qICd0ZXJtZW5jb2RpbmcnICovCisjZW5kaWYKK0VYVEVSTiBpbnQJcF90ZXJzZTsJLyogJ3RlcnNlJyAqLworRVhURVJOIGludAlwX3RhOwkJLyogJ3RleHRhdXRvJyAqLworRVhURVJOIGludAlwX3RvOwkJLyogJ3RpbGRlb3AnICovCitFWFRFUk4gaW50CXBfdGltZW91dDsJLyogJ3RpbWVvdXQnICovCitFWFRFUk4gbG9uZwlwX3RtOwkJLyogJ3RpbWVvdXRsZW4nICovCisjaWZkZWYgRkVBVF9USVRMRQorRVhURVJOIGludAlwX3RpdGxlOwkvKiAndGl0bGUnICovCitFWFRFUk4gbG9uZwlwX3RpdGxlbGVuOwkvKiAndGl0bGVsZW4nICovCitFWFRFUk4gY2hhcl91CSpwX3RpdGxlb2xkOwkvKiAndGl0bGVvbGQnICovCitFWFRFUk4gY2hhcl91CSpwX3RpdGxlc3RyaW5nOwkvKiAndGl0bGVzdHJpbmcnICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKK0VYVEVSTiBjaGFyX3UJKnBfdHNyOwkJLyogJ3RoZXNhdXJ1cycgKi8KKyNlbmRpZgorRVhURVJOIGludAlwX3R0aW1lb3V0OwkvKiAndHRpbWVvdXQnICovCitFWFRFUk4gbG9uZwlwX3R0bTsJCS8qICd0dGltZW91dGxlbicgKi8KK0VYVEVSTiBpbnQJcF90Ymk7CQkvKiAndHR5YnVpbHRpbicgKi8KK0VYVEVSTiBpbnQJcF90ZjsJCS8qICd0dHlmYXN0JyAqLworI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpCitFWFRFUk4gY2hhcl91CSpwX3Rvb2xiYXI7CS8qICd0b29sYmFyJyAqLworRVhURVJOIHVuc2lnbmVkIHRvb2xiYXJfZmxhZ3M7CisjIGlmZGVmIElOX09QVElPTl9DCitzdGF0aWMgY2hhciAqKHBfdG9vbGJhcl92YWx1ZXNbXSkgPSB7InRleHQiLCAiaWNvbnMiLCAidG9vbHRpcHMiLCAiaG9yaXoiLCBOVUxMfTsKKyMgZW5kaWYKKyMgZGVmaW5lIFRPT0xCQVJfVEVYVAkJMHgwMQorIyBkZWZpbmUgVE9PTEJBUl9JQ09OUwkJMHgwMgorIyBkZWZpbmUgVE9PTEJBUl9UT09MVElQUwkweDA0CisjIGRlZmluZSBUT09MQkFSX0hPUklaCQkweDA4CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfVE9PTEJBUikgJiYgZGVmaW5lZChGRUFUX0dVSV9HVEspICYmIGRlZmluZWQoSEFWRV9HVEsyKQorRVhURVJOIGNoYXJfdQkqcF90YmlzOwkvKiAndG9vbGJhcmljb25zaXplJyAqLworRVhURVJOIHVuc2lnbmVkIHRiaXNfZmxhZ3M7CisjIGlmZGVmIElOX09QVElPTl9DCitzdGF0aWMgY2hhciAqKHBfdGJpc192YWx1ZXNbXSkgPSB7InRpbnkiLCAic21hbGwiLCAibWVkaXVtIiwgImxhcmdlIiwgTlVMTH07CisjIGVuZGlmCisjIGRlZmluZSBUQklTX1RJTlkJCTB4MDEKKyMgZGVmaW5lIFRCSVNfU01BTEwJCTB4MDIKKyMgZGVmaW5lIFRCSVNfTUVESVVNCQkweDA0CisjIGRlZmluZSBUQklTX0xBUkdFCQkweDA4CisjZW5kaWYKK0VYVEVSTiBsb25nCXBfdHR5c2Nyb2xsOwkvKiAndHR5c2Nyb2xsJyAqLworI2lmIGRlZmluZWQoRkVBVF9NT1VTRSkgJiYgKGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpKQorRVhURVJOIGNoYXJfdQkqcF90dHltOwkvKiAndHR5bW91c2UnICovCitFWFRFUk4gdW5zaWduZWQgdHR5bV9mbGFnczsKKyMgaWZkZWYgSU5fT1BUSU9OX0MKK3N0YXRpYyBjaGFyICoocF90dHltX3ZhbHVlc1tdKSA9IHsieHRlcm0iLCAieHRlcm0yIiwgImRlYyIsICJuZXR0ZXJtIiwgImpzYnRlcm0iLCAicHRlcm0iLCBOVUxMfTsKKyMgZW5kaWYKKyMgZGVmaW5lIFRUWU1fWFRFUk0JCTB4MDEKKyMgZGVmaW5lIFRUWU1fWFRFUk0yCQkweDAyCisjIGRlZmluZSBUVFlNX0RFQwkJMHgwNAorIyBkZWZpbmUgVFRZTV9ORVRURVJNCQkweDA4CisjIGRlZmluZSBUVFlNX0pTQlRFUk0JCTB4MTAKKyMgZGVmaW5lIFRUWU1fUFRFUk0JCTB4MjAKKyNlbmRpZgorRVhURVJOIGxvbmcJcF91bDsJCS8qICd1bmRvbGV2ZWxzJyAqLworRVhURVJOIGxvbmcJcF91YzsJCS8qICd1cGRhdGVjb3VudCcgKi8KK0VYVEVSTiBsb25nCXBfdXQ7CQkvKiAndXBkYXRldGltZScgKi8KKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChGRUFUX0ZPTERJTkcpCitFWFRFUk4gY2hhcl91CSpwX2ZjczsJCS8qICdmaWxsY2hhcicgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfVklNSU5GTworRVhURVJOIGNoYXJfdQkqcF92aW1pbmZvOwkvKiAndmltaW5mbycgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfU0VTU0lPTgorRVhURVJOIGNoYXJfdQkqcF92ZGlyOwkvKiAndmlld2RpcicgKi8KK0VYVEVSTiBjaGFyX3UJKnBfdm9wOwkJLyogJ3ZpZXdvcHRpb25zJyAqLworRVhURVJOIHVuc2lnbmVkCXZvcF9mbGFnczsJLyogdXNlcyBTU09QXyBmbGFncyAqLworI2VuZGlmCitFWFRFUk4gaW50CXBfdmI7CQkvKiAndmlzdWFsYmVsbCcgKi8KKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCitFWFRFUk4gY2hhcl91CSpwX3ZlOwkJLyogJ3ZpcnR1YWxlZGl0JyAqLworRVhURVJOIHVuc2lnbmVkIHZlX2ZsYWdzOworIyBpZmRlZiBJTl9PUFRJT05fQworc3RhdGljIGNoYXIgKihwX3ZlX3ZhbHVlc1tdKSA9IHsiYmxvY2siLCAiaW5zZXJ0IiwgImFsbCIsIE5VTEx9OworIyBlbmRpZgorIyBkZWZpbmUgVkVfQkxPQ0sJNQkvKiBpbmNsdWRlcyAiYWxsIiAqLworIyBkZWZpbmUgVkVfSU5TRVJUCTYJLyogaW5jbHVkZXMgImFsbCIgKi8KKyMgZGVmaW5lIFZFX0FMTAkJNAorI2VuZGlmCitFWFRFUk4gbG9uZwlwX3ZlcmJvc2U7CS8qICd2ZXJib3NlJyAqLworRVhURVJOIGludAlwX3dhcm47CQkvKiAnd2FybicgKi8KKyNpZiBkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSB8fCBkZWZpbmVkKEZFQVRfR1VJX01PVElGKSB8fCBkZWZpbmVkKExJTlQpIFwKKwl8fCBkZWZpbmVkIChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKQorI2RlZmluZSBGRUFUX1dBSworRVhURVJOIGNoYXJfdQkqcF93YWs7CQkvKiAnd2luYWx0a2V5cycgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfV0lMRElHTgorRVhURVJOIGNoYXJfdQkqcF93aWc7CQkvKiAnd2lsZGlnbm9yZScgKi8KKyNlbmRpZgorRVhURVJOIGludAlwX3dpdjsJCS8qICd3ZWlyZGludmVydCcgKi8KK0VYVEVSTiBjaGFyX3UJKnBfd3c7CQkvKiAnd2hpY2h3cmFwJyAqLworRVhURVJOIGxvbmcJcF93YzsJCS8qICd3aWxkY2hhcicgKi8KK0VYVEVSTiBsb25nCXBfd2NtOwkJLyogJ3dpbGRjaGFybScgKi8KK0VYVEVSTiBjaGFyX3UJKnBfd2ltOwkJLyogJ3dpbGRtb2RlJyAqLworI2lmZGVmIEZFQVRfV0lMRE1FTlUKK0VYVEVSTiBpbnQJcF93bW51OwkJLyogJ3dpbGRtZW51JyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9XSU5ET1dTCitFWFRFUk4gbG9uZwlwX3doOwkJLyogJ3dpbmhlaWdodCcgKi8KK0VYVEVSTiBsb25nCXBfd21oOwkJLyogJ3dpbm1pbmhlaWdodCcgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfVkVSVFNQTElUCitFWFRFUk4gbG9uZwlwX3dtdzsJCS8qICd3aW5taW53aWR0aCcgKi8KK0VYVEVSTiBsb25nCXBfd2l3OwkJLyogJ3dpbndpZHRoJyAqLworI2VuZGlmCitFWFRFUk4gaW50CXBfd3M7CQkvKiAnd3JhcHNjYW4nICovCitFWFRFUk4gaW50CXBfd3JpdGU7CS8qICd3cml0ZScgKi8KK0VYVEVSTiBpbnQJcF93YTsJCS8qICd3cml0ZWFueScgKi8KK0VYVEVSTiBpbnQJcF93YjsJCS8qICd3cml0ZWJhY2t1cCcgKi8KK0VYVEVSTiBsb25nCXBfd2Q7CQkvKiAnd3JpdGVkZWxheScgKi8KZGlmZiAtLWdpdCBhL3NyYy9vc19hbWlnYS5jIGIvc3JjL29zX2FtaWdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2MmNjYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc19hbWlnYS5jCkBAIC0wLDAgKzEsMTYxOSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogb3NfYW1pZ2EuYworICoKKyAqIEFtaWdhIHN5c3RlbS1kZXBlbmRlbnQgcm91dGluZXMuCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisjaWZkZWYgV2luZG93CisjIHVuZGVmIFdpbmRvdwkvKiBBbWlnYSBoYXMgaXRzIG93biBXaW5kb3cgZGVmaW5pdGlvbiAqLworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjdW5kZWYgVFJVRQkJLyogd2lsbCBiZSByZWRlZmluZWQgYnkgZXhlYy90eXBlcy5oICovCisjdW5kZWYgRkFMU0UKKworI2lmbmRlZiBMQVRUSUNFCisjIGluY2x1ZGUgPGV4ZWMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8ZXhlYy9leGVjLmg+CisjIGluY2x1ZGUgPGxpYnJhcmllcy9kb3MuaD4KKyMgaW5jbHVkZSA8bGlicmFyaWVzL2Rvc2V4dGVucy5oPgorIyBpbmNsdWRlIDxpbnR1aXRpb24vaW50dWl0aW9uLmg+CisjZWxzZQorIyBpbmNsdWRlIDxwcm90by9kb3MuaD4KKyMgaW5jbHVkZSA8bGlicmFyaWVzL2Rvc2V4dGVucy5oPgorIyBpbmNsdWRlIDxwcm90by9pbnR1aXRpb24uaD4KKyMgaW5jbHVkZSA8cHJvdG8vZXhlYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxleGVjL21lbW9yeS5oPgorCisjaW5jbHVkZSA8ZG9zL2Rvc3RhZ3MuaD4JICAgIC8qIGZvciAyLjAgZnVuY3Rpb25zICovCisjaW5jbHVkZSA8ZG9zL2Rvc2FzbC5oPgorCisjaWYgZGVmaW5lZChMQVRUSUNFKSAmJiAhZGVmaW5lZChTQVNDKSAmJiBkZWZpbmVkKEZFQVRfQVJQKQorIyBpbmNsdWRlIDxsaWJyYXJpZXMvYXJwX3ByYWdtYXMuaD4KKyNlbmRpZgorCisvKgorICogQXQgdGhpcyBwb2ludCBUUlVFIGFuZCBGQUxTRSBhcmUgZGVmaW5lZCBhcyAxTCBhbmQgMEwsIGJ1dCB3ZSB3YW50IDEgYW5kIDAuCisgKi8KKyN1bmRlZglUUlVFCisjZGVmaW5lIFRSVUUgKDEpCisjdW5kZWYJRkFMU0UKKyNkZWZpbmUgRkFMU0UgKDApCisKKyNpZiAhZGVmaW5lZChBWlRFQ19DKSAmJiAhZGVmaW5lZChfX0FST1NfXykKK3N0YXRpYyBsb25nIGRvc19wYWNrZXQgX19BUkdTKChzdHJ1Y3QgTXNnUG9ydCAqLCBsb25nLCBsb25nKSk7CisjZW5kaWYKK3N0YXRpYyBpbnQgbG9jazJuYW1lIF9fQVJHUygoQlBUUiBsb2NrLCBjaGFyX3UgKmJ1ZiwgbG9uZyAgIGxlbikpOworc3RhdGljIHZvaWQgb3V0X251bSBfX0FSR1MoKGxvbmcgbikpOworc3RhdGljIHN0cnVjdCBGaWxlSW5mb0Jsb2NrICpnZXRfZmliIF9fQVJHUygoY2hhcl91ICopKTsKK3N0YXRpYyBpbnQgc29ydGNtcCBfX0FSR1MoKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpKTsKKworc3RhdGljIEJQVFIJCXJhd19pbiA9IChCUFRSKU5VTEw7CitzdGF0aWMgQlBUUgkJcmF3X291dCA9IChCUFRSKU5VTEw7CitzdGF0aWMgaW50CQljbG9zZV93aW4gPSBGQUxTRTsgIC8qIHNldCBpZiBWaW0gb3BlbmVkIHRoZSB3aW5kb3cgKi8KKworc3RydWN0IEludHVpdGlvbkJhc2UJKkludHVpdGlvbkJhc2UgPSBOVUxMOworI2lmZGVmIEZFQVRfQVJQCitzdHJ1Y3QgQXJwQmFzZQkJKkFycEJhc2UgPSBOVUxMOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgV2luZG93CSp3Yl93aW5kb3c7CitzdGF0aWMgY2hhcl91CQkqb2xkd2luZG93dGl0bGUgPSBOVUxMOworCisjaWZkZWYgRkVBVF9BUlAKK2ludAkJCWRvczIgPSBGQUxTRTsJICAgIC8qIEFtaWdhIERPUyAyLjB4IG9yIGhpZ2hlciAqLworI2VuZGlmCitpbnQJCQlzaXplX3NldCA9IEZBTFNFOyAgIC8qIHNldCB0byBUUlVFIGlmIHdpbmRvdyBzaXplIHdhcyBzZXQgKi8KKworICAgIHZvaWQKK3dpbl9yZXNpemVfb24oKQoreworICAgIE9VVF9TVFJfTkYoIlwwMzNbMTJ7Iik7Cit9CisKKyAgICB2b2lkCit3aW5fcmVzaXplX29mZigpCit7CisgICAgT1VUX1NUUl9ORigiXDAzM1sxMn0iKTsKK30KKworICAgIHZvaWQKK21jaF93cml0ZShwLCBsZW4pCisgICAgY2hhcl91CSpwOworICAgIGludAkJbGVuOworeworICAgIFdyaXRlKHJhd19vdXQsIChjaGFyICopcCwgKGxvbmcpbGVuKTsKK30KKworLyoKKyAqIG1jaF9pbmNoYXIoKTogbG93IGxldmVsIGlucHV0IGZ1bmNpb24uCisgKiBHZXQgYSBjaGFyYWN0ZXJzIGZyb20gdGhlIGtleWJvYXJkLgorICogSWYgdGltZSA9PSAwIGRvIG5vdCB3YWl0IGZvciBjaGFyYWN0ZXJzLgorICogSWYgdGltZSA9PSBuIHdhaXQgYSBzaG9ydCB0aW1lIGZvciBjaGFyYWN0ZXJzLgorICogSWYgdGltZSA9PSAtMSB3YWl0IGZvcmV2ZXIgZm9yIGNoYXJhY3RlcnMuCisgKgorICogUmV0dXJuIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQuCisgKi8KKyAgICBpbnQKK21jaF9pbmNoYXIoYnVmLCBtYXhsZW4sIHRpbWUsIHRiX2NoYW5nZV9jbnQpCisgICAgY2hhcl91ICAqYnVmOworICAgIGludAkgICAgbWF4bGVuOworICAgIGxvbmcgICAgdGltZTsJCS8qIG1pbGxpIHNlY29uZHMgKi8KKyAgICBpbnQJICAgIHRiX2NoYW5nZV9jbnQ7Cit7CisgICAgaW50CSAgICBsZW47CisgICAgbG9uZyAgICB1dGltZTsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBzdGF0aWMgaW50CW9uY2VfYWxyZWFkeSA9IDA7CisjZW5kaWYKKworICAgIGlmICh0aW1lID49IDApCisgICAgeworCWlmICh0aW1lID09IDApCisJICAgIHV0aW1lID0gMTAwTDsJICAgIC8qIHRpbWUgPSAwIGNhdXNlcyBwcm9ibGVtcyBpbiBET1MgMS4yICovCisJZWxzZQorCSAgICB1dGltZSA9IHRpbWUgKiAxMDAwTDsgICAvKiBjb252ZXJ0IGZyb20gbWlsbGkgdG8gbWljcm8gc2VjcyAqLworCWlmIChXYWl0Rm9yQ2hhcihyYXdfaW4sIHV0aW1lKSA9PSAwKQkvKiBubyBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisJeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCSAgICBvbmNlX2FscmVhZHkgPSAwOworI2VuZGlmCisJICAgIHJldHVybiAwOworCX0KKyAgICB9CisgICAgZWxzZSAgICAvKiB0aW1lID09IC0xICovCisgICAgeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCWlmIChvbmNlX2FscmVhZHkgPT0gMikKKwkgICAgdXBkYXRlc2NyaXB0KDApOworCWVsc2UgaWYgKG9uY2VfYWxyZWFkeSA9PSAxKQorCXsKKwkgICAgc2V0Y3Vyc29yKCk7CisJICAgIG9uY2VfYWxyZWFkeSA9IDI7CisJICAgIHJldHVybiAwOworCX0KKwllbHNlCisjZW5kaWYKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgd2l0aGluIDIgc2Vjb25kcyAoZGVmYXVsdCkKKwkgKiB3cml0ZSB0aGUgYXV0b3NjcmlwdCBmaWxlIHRvIGRpc2sKKwkgKi8KKwkgICAgaWYgKFdhaXRGb3JDaGFyKHJhd19pbiwgcF91dCAqIDEwMDBMKSA9PSAwKQorCXsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgaWYgKGhhc19jdXJzb3Job2xkKCkgJiYgZ2V0X3JlYWxfc3RhdGUoKSA9PSBOT1JNQUxfQlVTWSkKKwkgICAgeworCQlhcHBseV9hdXRvY21kcyhFVkVOVF9DVVJTT1JIT0xELCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKKwkJdXBkYXRlX3NjcmVlbihWQUxJRCk7CisJCW9uY2VfYWxyZWFkeSA9IDE7CisJCXJldHVybiAwOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCQl1cGRhdGVzY3JpcHQoMCk7CisJfQorICAgIH0KKworICAgIGZvciAoOzspCSAgICAvKiByZXBlYXQgdW50aWwgd2UgZ290IGEgY2hhcmFjdGVyICovCisgICAgeworIyAgaWZkZWYgRkVBVF9NQllURQorCWxlbiA9IFJlYWQocmF3X2luLCAoY2hhciAqKWJ1ZiwgKGxvbmcpbWF4bGVuIC8gaW5wdXRfY29udi52Y19mYWN0b3IpOworIyAgZWxzZQorCWxlbiA9IFJlYWQocmF3X2luLCAoY2hhciAqKWJ1ZiwgKGxvbmcpbWF4bGVuKTsKKyMgIGVuZGlmCisJaWYgKGxlbiA+IDApCisJeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCSAgICBvbmNlX2FscmVhZHkgPSAwOworI2VuZGlmCisjaWZkZWYgRkVBVF9NQllURQorCSAgICAvKiBDb252ZXJ0IGZyb20gJ3Rlcm1lbmNvZGluZycgdG8gJ2VuY29kaW5nJy4gKi8KKwkgICAgaWYgKGlucHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJCWxlbiA9IGNvbnZlcnRfaW5wdXQoYnVmLCBsZW4sIG1heGxlbik7CisjZW5kaWYKKwkgICAgcmV0dXJuIGxlbjsKKwl9CisgICAgfQorfQorCisvKgorICogcmV0dXJuIG5vbi16ZXJvIGlmIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZQorICovCisgICAgaW50CittY2hfY2hhcl9hdmFpbCgpCit7CisgICAgcmV0dXJuIChXYWl0Rm9yQ2hhcihyYXdfaW4sIDEwMEwpICE9IDApOworfQorCisvKgorICogUmV0dXJuIGFtb3VudCBvZiBtZW1vcnkgc3RpbGwgYXZhaWxhYmxlLgorICovCisgICAgbG9uZ191CittY2hfYXZhaWxfbWVtKHNwZWNpYWwpCisgICAgaW50CSAgICBzcGVjaWFsOworeworICAgIHJldHVybiAobG9uZ191KUF2YWlsTWVtKHNwZWNpYWwgPyAobG9uZylNRU1GX0NISVAgOiAobG9uZylNRU1GX0FOWSk7Cit9CisKKyAgICB2b2lkCittY2hfZGVsYXkobXNlYywgaWdub3JlaW5wdXQpCisgICAgbG9uZyAgICBtc2VjOworICAgIGludAkgICAgaWdub3JlaW5wdXQ7Cit7CisjaWZuZGVmIExBVFRJQ0UJCS8qIFNBUyBkZWNsYXJlcyB2b2lkIERlbGF5KFVOTE9ORykgKi8KKyAgICB2b2lkCSAgICBEZWxheSBfX0FSR1MoKGxvbmcpKTsKKyNlbmRpZgorCisgICAgaWYgKG1zZWMgPiAwKQorICAgIHsKKwlpZiAoaWdub3JlaW5wdXQpCisJICAgIERlbGF5KG1zZWMgLyAyMEwpOwkgICAgLyogRGVsYXkgd29ya3Mgd2l0aCAyMCBtc2VjIGludGVydmFscyAqLworCWVsc2UKKwkgICAgV2FpdEZvckNoYXIocmF3X2luLCBtc2VjICogMTAwMEwpOworICAgIH0KK30KKworLyoKKyAqIFdlIGhhdmUgbm8gam9iIGNvbnRyb2wsIGZha2UgaXQgYnkgc3RhcnRpbmcgYSBuZXcgc2hlbGwuCisgKi8KKyAgICB2b2lkCittY2hfc3VzcGVuZCgpCit7CisgICAgc3VzcGVuZF9zaGVsbCgpOworfQorCisjaWZuZGVmIERPU19MSUJSQVJZCisjIGRlZmluZSBET1NfTElCUkFSWQkoKFVCWVRFICopImRvcy5saWJyYXJ5IikKKyNlbmRpZgorCisgICAgdm9pZAorbWNoX2luaXQoKQoreworICAgIHN0YXRpYyBjaGFyCSAgICBpbnRsaWJuYW1lW10gPSAiaW50dWl0aW9uLmxpYnJhcnkiOworCisjaWZkZWYgQVpURUNfQworICAgIEVuYWJsZV9BYm9ydCA9IDA7CQkvKiBkaXNhbGxvdyB2aW0gdG8gYmUgYWJvcnRlZCAqLworI2VuZGlmCisgICAgQ29sdW1ucyA9IDgwOworICAgIFJvd3MgPSAyNDsKKworICAgIC8qCisgICAgICogU2V0IGlucHV0IGFuZCBvdXRwdXQgY2hhbm5lbHMsIHVubGVzcyB3ZSBoYXZlIG9wZW5lZCBvdXIgb3duIHdpbmRvdworICAgICAqLworICAgIGlmIChyYXdfaW4gPT0gKEJQVFIpTlVMTCkKKyAgICB7CisJcmF3X2luID0gSW5wdXQoKTsKKwlyYXdfb3V0ID0gT3V0cHV0KCk7CisJLyoKKwkgKiBJZiBJbnB1dCgpIGlzIG5vdCBpbnRlcmFjdGl2ZSwgdGhlbiBPdXRwdXQoKSB3aWxsIGJlIChiZWNhdXNlIG9mCisJICogY2hlY2sgaW4gbWNoX2NoZWNrX3dpbigpKS4gIFVzZWQgZm9yICJWaW0gLSIuCisJICogQWxzbyBjaGVjayB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgZm9yICJWaW0gLWggfCBtb3JlIi4KKwkgKi8KKwlpZiAoIUlzSW50ZXJhY3RpdmUocmF3X2luKSkKKwkgICAgcmF3X2luID0gcmF3X291dDsKKwllbHNlIGlmICghSXNJbnRlcmFjdGl2ZShyYXdfb3V0KSkKKwkgICAgcmF3X291dCA9IHJhd19pbjsKKyAgICB9CisKKyAgICBvdXRfZmx1c2goKTsKKworICAgIHdiX3dpbmRvdyA9IE5VTEw7CisgICAgaWYgKChJbnR1aXRpb25CYXNlID0gKHN0cnVjdCBJbnR1aXRpb25CYXNlICopCisJCQkJT3BlbkxpYnJhcnkoKFVCWVRFICopaW50bGlibmFtZSwgMEwpKSA9PSBOVUxMKQorICAgIHsKKwltY2hfZXJybXNnKF8oImNhbm5vdCBvcGVuICIpKTsKKwltY2hfZXJybXNnKGludGxpYm5hbWUpOworCW1jaF9lcnJtc2coIiE/XG4iKTsKKwltY2hfZXhpdCgzKTsKKyAgICB9Cit9CisKKyNpbmNsdWRlIDx3b3JrYmVuY2gvc3RhcnR1cC5oPgorCisvKgorICogQ2hlY2tfd2luIGNoZWNrcyB3aGV0aGVyIHdlIGhhdmUgYW4gaW50ZXJhY3RpdmUgd2luZG93LgorICogSWYgbm90LCBhIG5ldyB3aW5kb3cgaXMgb3BlbmVkIHdpdGggdGhlIG5ld2NsaSBjb21tYW5kLgorICogSWYgd2Ugd291bGQgb3BlbiBhIHdpbmRvdyBvdXJzZWx2ZXMsIHRoZSA6c2ggYW5kIDohIGNvbW1hbmRzIHdvdWxkIG5vdAorICogd29yayBwcm9wZXJseSAoV2h5PyBwcm9iYWJseSBiZWNhdXNlIHdlIGFyZSB0aGVuIHJ1bm5pbmcgaW4gYSBiYWNrZ3JvdW5kCisgKiBDTEkpLiBUaGlzIGFsc28gaXMgdGhlIGJlc3Qgd2F5IHRvIGFzc3VyZSBwcm9wZXIgd29ya2luZyBpbiBhIG5leHQKKyAqIFdvcmtiZW5jaCByZWxlYXNlLgorICoKKyAqIEZvciB0aGUgLWYgb3B0aW9uIChmb3JlZ3JvdW5kIG1vZGUpIHdlIG9wZW4gb3VyIG93biB3aW5kb3cgYW5kIGRpc2FibGUgOnNoLgorICogT3RoZXJ3aXNlIHRoZSBjYWxsaW5nIHByb2dyYW0gd291bGQgbmV2ZXIga25vdyB3aGVuIGVkaXRpbmcgaXMgZmluaXNoZWQuCisgKi8KKyNkZWZpbmUgQlVGMlNJWkUgMzIwCSAgICAvKiBsZW5ndGggb2YgYnVmZmVyIGZvciBhcmd1bWVudCB3aXRoIGNvbXBsZXRlIHBhdGggKi8KKworICAgIGludAorbWNoX2NoZWNrX3dpbihhcmdjLCBhcmd2KQorICAgIGludCBhcmdjOworICAgIGNoYXIgKiphcmd2OworeworICAgIGludAkJICAgIGk7CisgICAgQlBUUgkgICAgbmlsZmgsIGZoOworICAgIGNoYXJfdQkgICAgYnVmMVsyMF07CisgICAgY2hhcl91CSAgICBidWYyW0JVRjJTSVpFXTsKKyAgICBzdGF0aWMgY2hhcl91ICAgKihjb25zdHJpbmdzWzNdKSA9IHsoY2hhcl91ICopImNvbjowLzAvNjYyLzIxMC8iLAorCQkJCQkoY2hhcl91ICopImNvbjowLzAvNjQwLzIwMC8iLAorCQkJCQkoY2hhcl91ICopImNvbjowLzAvMzIwLzIwMC8ifTsKKyAgICBzdGF0aWMgY2hhcl91ICAgKndpbmVyciA9IChjaGFyX3UgKilOXygiVklNOiBDYW4ndCBvcGVuIHdpbmRvdyFcbiIpOworICAgIHN0cnVjdCBXQkFyZyAgICAqYXJncDsKKyAgICBpbnQJCSAgICBhYzsKKyAgICBjaGFyCSAgICAqYXY7CisgICAgY2hhcl91CSAgICAqZGV2aWNlID0gTlVMTDsKKyAgICBpbnQJCSAgICBleGl0dmFsID0gNDsKKyAgICBzdHJ1Y3QgTGlicmFyeSAgKkRvc0Jhc2U7CisgICAgaW50CQkgICAgdXNld2luID0gRkFMU0U7CisKKy8qCisgKiBjaGVjayBpZiB3ZSBhcmUgcnVubmluZyB1bmRlciBET1MgMi4weCBvciBoaWdoZXIKKyAqLworICAgIERvc0Jhc2UgPSBPcGVuTGlicmFyeShET1NfTElCUkFSWSwgMzdMKTsKKyAgICBpZiAoRG9zQmFzZSAhPSBOVUxMKQorICAgIC8qIGlmICgoKHN0cnVjdCBMaWJyYXJ5ICopRE9TQmFzZSktPmxpYl9WZXJzaW9uID49IDM3KSAqLworICAgIHsKKwlDbG9zZUxpYnJhcnkoRG9zQmFzZSk7CisjaWZkZWYgRkVBVF9BUlAKKwlkb3MyID0gVFJVRTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCSAgICAvKiB3aXRob3V0IGFycCBmdW5jdGlvbnMgd2UgTkVFRCAyLjAgKi8KKyAgICB7CisjaWZuZGVmIEZFQVRfQVJQCisJbWNoX2Vycm1zZyhfKCJOZWVkIEFtaWdhZG9zIHZlcnNpb24gMi4wNCBvciBsYXRlclxuIikpOworCWV4aXQoMyk7CisjZWxzZQorCQkgICAgLyogbmVlZCBhcnAgZnVuY3Rpb25zIGZvciBkb3MgMS54ICovCisJaWYgKCEoQXJwQmFzZSA9IChzdHJ1Y3QgQXJwQmFzZSAqKSBPcGVuTGlicmFyeSgoVUJZVEUgKilBcnBOYW1lLCBBcnBWZXJzaW9uKSkpCisJeworCSAgICBmcHJpbnRmKHN0ZGVyciwgXygiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIiksIEFycE5hbWUsIEFycFZlcnNpb24pOworCSAgICBleGl0KDMpOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIC8qCisgICAgICogc2NhbiBhcmd2W10gZm9yIHRoZSAiLWYiIGFuZCAiLWQiIGFyZ3VtZW50cworICAgICAqLworICAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyArK2kpCisJaWYgKGFyZ3ZbaV1bMF0gPT0gJy0nKQorCXsKKwkgICAgc3dpdGNoIChhcmd2W2ldWzFdKQorCSAgICB7CisJICAgIGNhc2UgJ2YnOgorCQl1c2V3aW4gPSBUUlVFOworCQlicmVhazsKKworCSAgICBjYXNlICdkJzoKKwkJaWYgKGkgPCBhcmdjIC0gMQorI2lmZGVmIEZFQVRfRElGRgorCQkJLyogcmVxdWlyZSB1c2luZyAiLWRldiIsICItZCIgbWVhbnMgZGlmZiBtb2RlICovCisJCQkmJiBhcmd2W2ldWzJdID09ICdlJyAmJiBhcmd2W2ldWzNdID09ICd2JworI2VuZGlmCisJCSAgICkKKwkJICAgIGRldmljZSA9IChjaGFyX3UgKilhcmd2W2kgKyAxXTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKy8qCisgKiBJZiB3ZSB3ZXJlIG5vdCBzdGFydGVkIGZyb20gd29ya2JlbmNoLCBkbyBub3QgaGF2ZSBhICItZCIgb3IgIi1kZXYiCisgKiBhcmd1bWVudCBhbmQgd2UgaGF2ZSBiZWVuIHN0YXJ0ZWQgd2l0aCBhbiBpbnRlcmFjdGl2ZSB3aW5kb3csIHVzZSB0aGF0CisgKiB3aW5kb3cuCisgKi8KKyAgICBpZiAoYXJnYyAhPSAwCisJICAgICYmIGRldmljZSA9PSBOVUxMCisJICAgICYmIChJc0ludGVyYWN0aXZlKElucHV0KCkpIHx8IElzSW50ZXJhY3RpdmUoT3V0cHV0KCkpKSkKKwlyZXR1cm4gT0s7CisKKy8qCisgKiBXaGVuIGdpdmVuIHRoZSAiLWYiIGFyZ3VtZW50LCB3ZSBvcGVuIG91ciBvd24gd2luZG93LiBXZSBjYW4ndCB1c2UgdGhlCisgKiBuZXdjbGkgdHJpY2sgYmVsb3csIGJlY2F1c2UgdGhlIGNhbGxpbmcgcHJvZ3JhbSAobWFpbCwgcm4sIGV0Yy4pIHdvdWxkIG5vdAorICoga25vdyB3aGVuIHdlIGFyZSBmaW5pc2hlZC4KKyAqLworICAgIGlmICh1c2V3aW4pCisgICAgeworCS8qCisJICogVHJ5IHRvIG9wZW4gYSB3aW5kb3cuIEZpcnN0IHRyeSB0aGUgc3BlY2lmaWVkIGRldmljZS4KKwkgKiBUaGVuIHRyeSBhIDI0IGxpbmUgODAgY29sdW1uIHdpbmRvdy4KKwkgKiBJZiB0aGF0IGZhaWxzLCB0cnkgdHdvIHNtYWxsZXIgb25lcy4KKwkgKi8KKwlmb3IgKGkgPSAtMTsgaSA8IDM7ICsraSkKKwl7CisJICAgIGlmIChpID49IDApCisJCWRldmljZSA9IGNvbnN0cmluZ3NbaV07CisJICAgIGlmIChkZXZpY2UgIT0gTlVMTCAmJiAocmF3X2luID0gT3BlbigoVUJZVEUgKilkZXZpY2UsCisJCQkJCSAgIChsb25nKU1PREVfTkVXRklMRSkpICE9IChCUFRSKU5VTEwpCisJCWJyZWFrOworCX0KKwlpZiAocmF3X2luID09IChCUFRSKU5VTEwpCS8qIGFsbCB0aHJlZSBmYWlsZWQgKi8KKwl7CisJICAgIG1jaF9lcnJtc2coXyh3aW5lcnIpKTsKKwkgICAgZ290byBleGl0OworCX0KKwlyYXdfb3V0ID0gcmF3X2luOworCWNsb3NlX3dpbiA9IFRSVUU7CisJcmV0dXJuIE9LOworICAgIH0KKworICAgIGlmICgobmlsZmggPSBPcGVuKChVQllURSAqKSJOSUw6IiwgKGxvbmcpTU9ERV9ORVdGSUxFKSkgPT0gKEJQVFIpTlVMTCkKKyAgICB7CisJbWNoX2Vycm1zZyhfKCJDYW5ub3Qgb3BlbiBOSUw6XG4iKSk7CisJZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogTWFrZSBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgdGVtcCBmaWxlICh3aGljaCB3ZSB3aWxsIG5vdCBkZWxldGUhKS4KKyAgICAgKiBVc2UgYSBwb2ludGVyIG9uIHRoZSBzdGFjayAobm9ib2R5IGVsc2Ugd2lsbCBiZSB1c2luZyBpdCkuCisgICAgICovCisgICAgc3ByaW50ZigoY2hhciAqKWJ1ZjEsICJ0Om5jJWxkIiwgKGxvbmcpYnVmMSk7CisgICAgaWYgKChmaCA9IE9wZW4oKFVCWVRFICopYnVmMSwgKGxvbmcpTU9ERV9ORVdGSUxFKSkgPT0gKEJQVFIpTlVMTCkKKyAgICB7CisJbWNoX2Vycm1zZyhfKCJDYW5ub3QgY3JlYXRlICIpKTsKKwltY2hfZXJybXNnKChjaGFyICopYnVmMSk7CisJbWNoX2Vycm1zZygiXG4iKTsKKwlnb3RvIGV4aXQ7CisgICAgfQorICAgIC8qCisgICAgICogV3JpdGUgdGhlIGNvbW1hbmQgaW50byB0aGUgZmlsZSwgcHV0IHF1b3RlcyBhcm91bmQgdGhlIGFyZ3VtZW50cyB0aGF0CisgICAgICogaGF2ZSBhIHNwYWNlIGluIHRoZW0uCisgICAgICovCisgICAgaWYgKGFyZ2MgPT0gMCkJLyogcnVuIGZyb20gd29ya2JlbmNoICovCisJYWMgPSAoKHN0cnVjdCBXQlN0YXJ0dXAgKilhcmd2KS0+c21fTnVtQXJnczsKKyAgICBlbHNlCisJYWMgPSBhcmdjOworICAgIGZvciAoaSA9IDA7IGkgPCBhYzsgKytpKQorICAgIHsKKwlpZiAoYXJnYyA9PSAwKQorCXsKKwkgICAgKmJ1ZjIgPSBOVUw7CisJICAgIGFyZ3AgPSAmKCgoc3RydWN0IFdCU3RhcnR1cCAqKWFyZ3YpLT5zbV9BcmdMaXN0W2ldKTsKKwkgICAgaWYgKGFyZ3AtPndhX0xvY2spCisJCSh2b2lkKWxvY2sybmFtZShhcmdwLT53YV9Mb2NrLCBidWYyLCAobG9uZykoQlVGMlNJWkUgLSAxKSk7CisjaWZkZWYgRkVBVF9BUlAKKwkgICAgaWYgKGRvczIpCSAgICAvKiB1c2UgMi4wIGZ1bmN0aW9uICovCisjZW5kaWYKKwkJQWRkUGFydCgoVUJZVEUgKilidWYyLCAoVUJZVEUgKilhcmdwLT53YV9OYW1lLCAobG9uZykoQlVGMlNJWkUgLSAxKSk7CisjaWZkZWYgRkVBVF9BUlAKKwkgICAgZWxzZQkgICAgLyogdXNlIGFycCBmdW5jdGlvbiAqLworCQlUYWNrT24oKGNoYXIgKilidWYyLCBhcmdwLT53YV9OYW1lKTsKKyNlbmRpZgorCSAgICBhdiA9IChjaGFyICopYnVmMjsKKwl9CisJZWxzZQorCSAgICBhdiA9IGFyZ3ZbaV07CisKKwkvKiBza2lwICctZCcgb3IgIi1kZXYiIG9wdGlvbiAqLworCWlmIChhdlswXSA9PSAnLScgJiYgYXZbMV0gPT0gJ2QnCisjaWZkZWYgRkVBVF9ESUZGCisJCSYmIGF2WzJdID09ICdlJyAmJiBhdlszXSA9PSAndicKKyNlbmRpZgorCQkpCisJeworCSAgICArK2k7CisJICAgIGNvbnRpbnVlOworCX0KKwlpZiAodmltX3N0cmNocigoY2hhcl91ICopYXYsICcgJykpCisJICAgIFdyaXRlKGZoLCAiXCIiLCAxTCk7CisJV3JpdGUoZmgsIGF2LCAobG9uZylzdHJsZW4oYXYpKTsKKwlpZiAodmltX3N0cmNocigoY2hhcl91ICopYXYsICcgJykpCisJICAgIFdyaXRlKGZoLCAiXCIiLCAxTCk7CisJV3JpdGUoZmgsICIgIiwgMUwpOworICAgIH0KKyAgICBXcml0ZShmaCwgIlxuZW5kY2xpXG4iLCA4TCk7CisgICAgQ2xvc2UoZmgpOworCisvKgorICogVHJ5IHRvIG9wZW4gYSBuZXcgY2xpIGluIGEgd2luZG93LiBJZiAiLWQiIG9yICItZGV2IiBhcmd1bWVudCB3YXMgZ2l2ZW4gdHJ5CisgKiB0byBvcGVuIHRoZSBzcGVjaWZpZWQgZGV2aWNlLiBUaGVuIHRyeSBhIDI0IGxpbmUgODAgY29sdW1uIHdpbmRvdy4gIElmIHRoYXQKKyAqIGZhaWxzLCB0cnkgdHdvIHNtYWxsZXIgb25lcy4KKyAqLworICAgIGZvciAoaSA9IC0xOyBpIDwgMzsgKytpKQorICAgIHsKKwlpZiAoaSA+PSAwKQorCSAgICBkZXZpY2UgPSBjb25zdHJpbmdzW2ldOworCWVsc2UgaWYgKGRldmljZSA9PSBOVUxMKQorCSAgICBjb250aW51ZTsKKwlzcHJpbnRmKChjaGFyICopYnVmMiwgIm5ld2NsaSA8bmlsOiA+bmlsOiAlcyBmcm9tICVzIiwgKGNoYXIgKilkZXZpY2UsIChjaGFyICopYnVmMSk7CisjaWZkZWYgRkVBVF9BUlAKKwlpZiAoZG9zMikKKwl7CisjZW5kaWYKKwkgICAgaWYgKCFTeXN0ZW1UYWdzKChVQllURSAqKWJ1ZjIsIFNZU19Vc2VyU2hlbGwsIFRSVUUsIFRBR19ET05FKSkKKwkJYnJlYWs7CisjaWZkZWYgRkVBVF9BUlAKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKEV4ZWN1dGUoKFVCWVRFICopYnVmMiwgbmlsZmgsIG5pbGZoKSkKKwkJYnJlYWs7CisJfQorI2VuZGlmCisgICAgfQorICAgIGlmIChpID09IDMpCSAgICAvKiBhbGwgdGhyZWUgZmFpbGVkICovCisgICAgeworCURlbGV0ZUZpbGUoKFVCWVRFICopYnVmMSk7CisJbWNoX2Vycm1zZyhfKHdpbmVycikpOworCWdvdG8gZXhpdDsKKyAgICB9CisgICAgZXhpdHZhbCA9IDA7ICAgIC8qIFRoZSBFeGVjdXRlIHN1Y2NlZWRlZDogZXhpdCB0aGlzIHByb2dyYW0gKi8KKworZXhpdDoKKyNpZmRlZiBGRUFUX0FSUAorICAgIGlmIChBcnBCYXNlKQorCUNsb3NlTGlicmFyeSgoc3RydWN0IExpYnJhcnkgKikgQXJwQmFzZSk7CisjZW5kaWYKKyAgICBleGl0KGV4aXR2YWwpOworICAgIC8qIE5PVFJFQUNIRUQgKi8KKyAgICByZXR1cm4gRkFJTDsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBpbnB1dCBjb21lcyBmcm9tIGEgdGVybWluYWwsIEZBTFNFIG90aGVyd2lzZS4KKyAqIFdlIGZha2UgdGhlcmUgaXMgYSB3aW5kb3csIGJlY2F1c2Ugd2UgY2FuIGFsd2F5cyBvcGVuIG9uZSEKKyAqLworICAgIGludAorbWNoX2lucHV0X2lzYXR0eSgpCit7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBmbmFtZV9jYXNlKCk6IFNldCB0aGUgY2FzZSBvZiB0aGUgZmlsZSBuYW1lLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4KKyAqCQkgVGhpcyB3aWxsIGNhdXNlIHRoZSBmaWxlIG5hbWUgdG8gcmVtYWluIGV4YWN0bHkgdGhlIHNhbWUuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK2ZuYW1lX2Nhc2UobmFtZSwgbGVuKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBpbnQJCWxlbjsJCS8qIGJ1ZmZlciBzaXplLCBpZ25vcmVkIGhlcmUgKi8KK3sKKyAgICBzdHJ1Y3QgRmlsZUluZm9CbG9jayAgICAqZmliOworICAgIHNpemVfdAkJICAgIGZsZW47CisKKyAgICBmaWIgPSBnZXRfZmliKG5hbWUpOworICAgIGlmIChmaWIgIT0gTlVMTCkKKyAgICB7CisJZmxlbiA9IFNUUkxFTihuYW1lKTsKKwlpZiAoZmxlbiA9PSBzdHJsZW4oZmliLT5maWJfRmlsZU5hbWUpKQkvKiBzYWZldHkgY2hlY2sgKi8KKwkgICAgbWNoX21lbW1vdmUobmFtZSwgZmliLT5maWJfRmlsZU5hbWUsIGZsZW4pOworCXZpbV9mcmVlKGZpYik7CisgICAgfQorfQorCisvKgorICogR2V0IHRoZSBGaWxlSW5mb0Jsb2NrIGZvciBmaWxlICJmbmFtZSIKKyAqIFRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUgaGFzIHRvIGJlIGZyZWUoKWQuCisgKiBSZXR1cm5zIE5VTEwgb24gZXJyb3IuCisgKi8KKyAgICBzdGF0aWMgc3RydWN0IEZpbGVJbmZvQmxvY2sgKgorZ2V0X2ZpYihmbmFtZSkKKyAgICBjaGFyX3UgKmZuYW1lOworeworICAgIEJQVFIJCSAgICBmbG9jazsKKyAgICBzdHJ1Y3QgRmlsZUluZm9CbG9jayAgICAqZmliOworCisgICAgaWYgKGZuYW1lID09IE5VTEwpCSAgICAvKiBzYWZldHkgY2hlY2sgKi8KKwlyZXR1cm4gTlVMTDsKKyAgICBmaWIgPSAoc3RydWN0IEZpbGVJbmZvQmxvY2sgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBGaWxlSW5mb0Jsb2NrKSk7CisgICAgaWYgKGZpYiAhPSBOVUxMKQorICAgIHsKKwlmbG9jayA9IExvY2soKFVCWVRFICopZm5hbWUsIChsb25nKUFDQ0VTU19SRUFEKTsKKwlpZiAoZmxvY2sgPT0gKEJQVFIpTlVMTCB8fCAhRXhhbWluZShmbG9jaywgZmliKSkKKwl7CisJICAgIHZpbV9mcmVlKGZpYik7ICAvKiBpbiBjYXNlIG9mIGFuIGVycm9yIHRoZSBtZW1vcnkgaXMgZnJlZWQgaGVyZSAqLworCSAgICBmaWIgPSBOVUxMOworCX0KKwlpZiAoZmxvY2spCisJICAgIFVuTG9jayhmbG9jayk7CisgICAgfQorICAgIHJldHVybiBmaWI7Cit9CisKKyNpZmRlZiBGRUFUX1RJVExFCisvKgorICogc2V0IHRoZSB0aXRsZSBvZiBvdXIgd2luZG93CisgKiBpY29uIG5hbWUgaXMgbm90IHNldAorICovCisgICAgdm9pZAorbWNoX3NldHRpdGxlKHRpdGxlLCBpY29uKQorICAgIGNoYXJfdSAgKnRpdGxlOworICAgIGNoYXJfdSAgKmljb247Cit7CisgICAgaWYgKHdiX3dpbmRvdyAhPSBOVUxMICYmIHRpdGxlICE9IE5VTEwpCisJU2V0V2luZG93VGl0bGVzKHdiX3dpbmRvdywgKFVCWVRFICopdGl0bGUsIChVQllURSAqKS0xTCk7Cit9CisKKy8qCisgKiBSZXN0b3JlIHRoZSB3aW5kb3cvaWNvbiB0aXRsZS4KKyAqIHdoaWNoIGlzIG9uZSBvZjoKKyAqICAxICBKdXN0IHJlc3RvcmUgdGl0bGUKKyAqICAyICBKdXN0IHJlc3RvcmUgaWNvbiAod2hpY2ggd2UgZG9uJ3QgaGF2ZSkKKyAqICAzICBSZXN0b3JlIHRpdGxlIGFuZCBpY29uICh3aGljaCB3ZSBkb24ndCBoYXZlKQorICovCisgICAgdm9pZAorbWNoX3Jlc3RvcmVfdGl0bGUod2hpY2gpCisgICAgaW50IHdoaWNoOworeworICAgIGlmICh3aGljaCAmIDEpCisJbWNoX3NldHRpdGxlKG9sZHdpbmRvd3RpdGxlLCBOVUxMKTsKK30KKworICAgIGludAorbWNoX2Nhbl9yZXN0b3JlX3RpdGxlKCkKK3sKKyAgICByZXR1cm4gKHdiX3dpbmRvdyAhPSBOVUxMKTsKK30KKworICAgIGludAorbWNoX2Nhbl9yZXN0b3JlX2ljb24oKQoreworICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgorCisvKgorICogSW5zZXJ0IHVzZXIgbmFtZSBpbiBzW2xlbl0uCisgKi8KKyAgICBpbnQKK21jaF9nZXRfdXNlcl9uYW1lKHMsIGxlbikKKyAgICBjaGFyX3UgICpzOworICAgIGludAkgICAgbGVuOworeworICAgICpzID0gTlVMOworICAgIHJldHVybiBGQUlMOworfQorCisvKgorICogSW5zZXJ0IGhvc3QgbmFtZSBpcyBzW2xlbl0uCisgKi8KKyAgICB2b2lkCittY2hfZ2V0X2hvc3RfbmFtZShzLCBsZW4pCisgICAgY2hhcl91ICAqczsKKyAgICBpbnQJICAgIGxlbjsKK3sKKyAgICBTVFJOQ1BZKHMsICJBbWlnYSIsIGxlbik7Cit9CisKKy8qCisgKiByZXR1cm4gcHJvY2VzcyBJRAorICovCisgICAgbG9uZworbWNoX2dldF9waWQoKQoreworICAgIHJldHVybiAobG9uZykwOworfQorCisvKgorICogR2V0IG5hbWUgb2YgY3VycmVudCBkaXJlY3RvcnkgaW50byBidWZmZXIgJ2J1Zicgb2YgbGVuZ3RoICdsZW4nIGJ5dGVzLgorICogUmV0dXJuIE9LIGZvciBzdWNjZXNzLCBGQUlMIGZvciBmYWlsdXJlLgorICovCisgICAgaW50CittY2hfZGlybmFtZShidWYsIGxlbikKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCWxlbjsKK3sKKyAgICByZXR1cm4gbWNoX0Z1bGxOYW1lKChjaGFyX3UgKikiIiwgYnVmLCBsZW4sIEZBTFNFKTsKK30KKworLyoKKyAqIGdldCBhYnNvbHV0ZSBmaWxlIG5hbWUgaW50byBidWZmZXIgJ2J1Zicgb2YgbGVuZ3RoICdsZW4nIGJ5dGVzCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CittY2hfRnVsbE5hbWUoZm5hbWUsIGJ1ZiwgbGVuLCBmb3JjZSkKKyAgICBjaGFyX3UJKmZuYW1lLCAqYnVmOworICAgIGludAkJbGVuOworICAgIGludAkJZm9yY2U7Cit7CisgICAgQlBUUglsOworICAgIGludAkJcmV0dmFsID0gRkFJTDsKKyAgICBpbnQJCWk7CisKKyAgICAvKiBMb2NrIHRoZSBmaWxlLiAgSWYgaXQgZXhpc3RzLCB3ZSBjYW4gZ2V0IHRoZSBleGFjdCBuYW1lLiAqLworICAgIGlmICgobCA9IExvY2soKFVCWVRFICopZm5hbWUsIChsb25nKUFDQ0VTU19SRUFEKSkgIT0gKEJQVFIpMCkKKyAgICB7CisJcmV0dmFsID0gbG9jazJuYW1lKGwsIGJ1ZiwgKGxvbmcpbGVuIC0gMSk7CisJVW5Mb2NrKGwpOworICAgIH0KKyAgICBlbHNlIGlmIChmb3JjZSB8fCAhbWNoX2lzRnVsbE5hbWUoZm5hbWUpKQkgICAgLyogbm90IGEgZnVsbCBwYXRoIHlldCAqLworICAgIHsKKwkvKgorCSAqIElmIHRoZSBmaWxlIGNhbm5vdCBiZSBsb2NrZWQgKGRvZXNuJ3QgZXhpc3QpLCB0cnkgdG8gbG9jayB0aGUKKwkgKiBjdXJyZW50IGRpcmVjdG9yeSBhbmQgY29uY2F0ZW5hdGUgdGhlIGZpbGUgbmFtZS4KKwkgKi8KKwlpZiAoKGwgPSBMb2NrKChVQllURSAqKSIiLCAobG9uZylBQ0NFU1NfUkVBRCkpICE9IChCUFRSKU5VTEwpCisJeworCSAgICByZXR2YWwgPSBsb2NrMm5hbWUobCwgYnVmLCAobG9uZylsZW4pOworCSAgICBVbkxvY2sobCk7CisJICAgIGlmIChyZXR2YWwgPT0gT0spCisJICAgIHsKKwkJaSA9IFNUUkxFTihidWYpOworCQkvKiBDb25jYXRlbmF0ZSB0aGUgZm5hbWUgdG8gdGhlIGRpcmVjdG9yeS4gIERvbid0IGFkZCBhIHNsYXNoCisJCSAqIGlmIGZuYW1lIGlzIGVtcHR5LCBidXQgZG8gY2hhbmdlICIiIHRvICIvIi4gKi8KKwkJaWYgKGkgPT0gMCB8fCAqZm5hbWUgIT0gTlVMKQorCQl7CisJCSAgICBpZiAoaSA8IGxlbiAtIDEgJiYgKGkgPT0gMCB8fCBidWZbaSAtIDFdICE9ICc6JykpCisJCQlidWZbaSsrXSA9ICcvJzsKKwkJICAgIFNUUk5DUFkoYnVmICsgaSwgZm5hbWUsIGxlbiAtIGkpOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmICgqYnVmID09IDAgfHwgKmJ1ZiA9PSAnOicpCisJcmV0dmFsID0gRkFJTDsJLyogc29tZXRoaW5nIGZhaWxlZDsgdXNlIHRoZSBmaWxlIG5hbWUgKi8KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgImZuYW1lIiBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICovCisgICAgaW50CittY2hfaXNGdWxsTmFtZShmbmFtZSkKKyAgICBjaGFyX3UJKmZuYW1lOworeworICAgIHJldHVybiAodmltX3N0cmNocihmbmFtZSwgJzonKSAhPSBOVUxMICYmICpmbmFtZSAhPSAnOicpOworfQorCisvKgorICogR2V0IHRoZSBmdWxsIGZpbGUgbmFtZSBmcm9tIGEgbG9jay4gVXNlIDIuMCBmdW5jdGlvbiBpZiBwb3NzaWJsZSwgYmVjYXVzZQorICogdGhlIGFycCBmdW5jdGlvbiBoYXMgbW9yZSByZXN0cmljdGlvbnMgb24gdGhlIHBhdGggbGVuZ3RoLgorICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIHN0YXRpYyBpbnQKK2xvY2sybmFtZShsb2NrLCBidWYsIGxlbikKKyAgICBCUFRSICAgIGxvY2s7CisgICAgY2hhcl91ICAqYnVmOworICAgIGxvbmcgICAgbGVuOworeworI2lmZGVmIEZFQVRfQVJQCisgICAgaWYgKGRvczIpCQkgICAgLyogdXNlIDIuMCBmdW5jdGlvbiAqLworI2VuZGlmCisJcmV0dXJuICgoaW50KU5hbWVGcm9tTG9jayhsb2NrLCAoVUJZVEUgKilidWYsIGxlbikgPyBPSyA6IEZBSUwpOworI2lmZGVmIEZFQVRfQVJQCisgICAgZWxzZQkJLyogdXNlIGFycCBmdW5jdGlvbiAqLworCXJldHVybiAoKGludClQYXRoTmFtZShsb2NrLCAoY2hhciAqKWJ1ZiwgKGxvbmcpKGxlbi8zMikpID8gT0sgOiBGQUlMKTsKKyNlbmRpZgorfQorCisvKgorICogZ2V0IGZpbGUgcGVybWlzc2lvbnMgZm9yICduYW1lJworICogUmV0dXJucyAtMSB3aGVuIGl0IGRvZXNuJ3QgZXhpc3QuCisgKi8KKyAgICBsb25nCittY2hfZ2V0cGVybShuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBzdHJ1Y3QgRmlsZUluZm9CbG9jayAgICAqZmliOworICAgIGxvbmcJCSAgICByZXR2YWwgPSAtMTsKKworICAgIGZpYiA9IGdldF9maWIobmFtZSk7CisgICAgaWYgKGZpYiAhPSBOVUxMKQorICAgIHsKKwlyZXR2YWwgPSBmaWItPmZpYl9Qcm90ZWN0aW9uOworCXZpbV9mcmVlKGZpYik7CisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBzZXQgZmlsZSBwZXJtaXNzaW9uIGZvciAnbmFtZScgdG8gJ3Blcm0nCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CittY2hfc2V0cGVybShuYW1lLCBwZXJtKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBsb25nCXBlcm07Cit7CisgICAgcGVybSAmPSB+RklCRl9BUkNISVZFOwkJLyogcmVzZXQgYXJjaGl2ZWQgYml0ICovCisgICAgcmV0dXJuIChTZXRQcm90ZWN0aW9uKChVQllURSAqKW5hbWUsIChsb25nKXBlcm0pID8gT0sgOiBGQUlMKTsKK30KKworLyoKKyAqIFNldCBoaWRkZW4gZmxhZyBmb3IgIm5hbWUiLgorICovCisgICAgdm9pZAorbWNoX2hpZGUobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgLyogY2FuJ3QgaGlkZSBhIGZpbGUgKi8KK30KKworLyoKKyAqIHJldHVybiBGQUxTRSBpZiAibmFtZSIgaXMgbm90IGEgZGlyZWN0b3J5CisgKiByZXR1cm4gVFJVRSBpZiAibmFtZSIgaXMgYSBkaXJlY3RvcnkuCisgKiByZXR1cm4gRkFMU0UgZm9yIGVycm9yLgorICovCisgICAgaW50CittY2hfaXNkaXIobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgc3RydWN0IEZpbGVJbmZvQmxvY2sgICAgKmZpYjsKKyAgICBpbnQJCQkgICAgcmV0dmFsID0gRkFMU0U7CisKKyAgICBmaWIgPSBnZXRfZmliKG5hbWUpOworICAgIGlmIChmaWIgIT0gTlVMTCkKKyAgICB7CisJcmV0dmFsID0gKChmaWItPmZpYl9EaXJFbnRyeVR5cGUgPj0gMCkgPyBUUlVFIDogRkFMU0UpOworCXZpbV9mcmVlKGZpYik7CisgICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBDcmVhdGUgZGlyZWN0b3J5ICJuYW1lIi4KKyAqLworICAgIHZvaWQKK21jaF9ta2RpcihuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBCUFRSCWxvY2s7CisKKyAgICBsb2NrID0gQ3JlYXRlRGlyKG5hbWUpOworICAgIGlmIChsb2NrICE9IE5VTEwpCisJVW5Mb2NrKGxvY2spOworfQorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmV0dXJuIDEgaWYgIm5hbWUiIGNhbiBiZSBleGVjdXRlZCwgMCBpZiBub3QuCisgKiBSZXR1cm4gLTEgaWYgdW5rbm93bi4KKyAqLworICAgIGludAorbWNoX2Nhbl9leGUobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgLyogVE9ETyAqLworICAgIHJldHVybiAtMTsKK30KKyNlbmRpZgorCisvKgorICogQ2hlY2sgd2hhdCAibmFtZSIgaXM6CisgKiBOT0RFX05PUk1BTDogZmlsZSBvciBkaXJlY3RvcnkgKG9yIGRvZXNuJ3QgZXhpc3QpCisgKiBOT0RFX1dSSVRBQkxFOiB3cml0YWJsZSBkZXZpY2UsIHNvY2tldCwgZmlmbywgZXRjLgorICogTk9ERV9PVEhFUjogbm9uLXdyaXRhYmxlIHRoaW5ncworICovCisgICAgaW50CittY2hfbm9kZXR5cGUobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgLyogVE9ETyAqLworICAgIHJldHVybiBOT0RFX05PUk1BTDsKK30KKworICAgIHZvaWQKK21jaF9lYXJseV9pbml0KCkKK3sKK30KKworLyoKKyAqIENhcmVmdWw6IG1jaF9leGl0KCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgbWNoX2luaXQoKSEKKyAqLworICAgIHZvaWQKK21jaF9leGl0KHIpCisgICAgaW50CQkgICAgcjsKK3sKKyAgICBpZiAocmF3X2luKQkJCSAgICAvKiBwdXQgdGVybWluYWwgaW4gJ25vcm1hbCcgbW9kZSAqLworICAgIHsKKwlzZXR0bW9kZShUTU9ERV9DT09LKTsKKwlzdG9wdGVybWNhcCgpOworICAgIH0KKyAgICBvdXRfY2hhcignXG4nKTsKKyAgICBpZiAocmF3X291dCkKKyAgICB7CisJaWYgKHRlcm1fY29uc29sZSkKKwl7CisJICAgIHdpbl9yZXNpemVfb2ZmKCk7CSAgICAvKiB3aW5kb3cgcmVzaXplIGV2ZW50cyBkZS1hY3RpdmF0ZWQgKi8KKwkgICAgaWYgKHNpemVfc2V0KQorCQlPVVRfU1RSKCJcMjMzdFwyMzN1Iik7CS8qIHJlc2V0IHdpbmRvdyBzaXplIChDU0kgdCBDU0kgdSkgKi8KKwl9CisJb3V0X2ZsdXNoKCk7CisgICAgfQorCisjaWZkZWYgRkVBVF9USVRMRQorICAgIG1jaF9yZXN0b3JlX3RpdGxlKDMpOwkgICAgLyogcmVzdG9yZSB3aW5kb3cgdGl0bGUgKi8KKyNlbmRpZgorCisgICAgbWxfY2xvc2VfYWxsKFRSVUUpOwkJICAgIC8qIHJlbW92ZSBhbGwgbWVtZmlsZXMgKi8KKworI2lmZGVmIEZFQVRfQVJQCisgICAgaWYgKEFycEJhc2UpCisJQ2xvc2VMaWJyYXJ5KChzdHJ1Y3QgTGlicmFyeSAqKSBBcnBCYXNlKTsKKyNlbmRpZgorICAgIGlmIChjbG9zZV93aW4pCisJQ2xvc2UocmF3X2luKTsKKyAgICBpZiAocikKKwlwcmludGYoXygiVmltIGV4aXRpbmcgd2l0aCAlZFxuIiksIHIpOyAvKiBzb21laG93IHRoaXMgbWFrZXMgOmNxIHdvcmshPyAqLworICAgIGV4aXQocik7Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgcm91dGluZSBmb3Igc2V0dGluZyBhIGdpdmVuIHN0cmVhbSB0byByYXcgb3IgY29va2VkIG1vZGUgb24gdGhlCisgKiBBbWlnYSAuIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGFyZSB1c2luZyBMYXR0aWNlIEMgdG8gcHJvZHVjZSBwcm9ncmFtcworICogdGhhdCB3YW50IHRvIHJlYWQgc2luZ2xlIGNoYXJhY3RlcnMgd2l0aCB0aGUgImdldGNoKCkiIG9yICJmZ2V0YyIgY2FsbC4KKyAqCisgKiBXcml0dGVuIDogMTgtSnVuLTg3IEJ5IENodWNrIE1jTWFuaXMuCisgKi8KKworI2RlZmluZSBNUCh4eCkJKChzdHJ1Y3QgTXNnUG9ydCAqKSgoc3RydWN0IEZpbGVIYW5kbGUgKikgKEJBRERSKHh4KSkpLT5maF9UeXBlKQorCisvKgorICogRnVuY3Rpb24gbWNoX3NldHRtb2RlKCkgLSBDb252ZXJ0IHRoZSBzcGVjaWZpZWQgZmlsZSBwb2ludGVyIHRvICdyYXcnIG9yCisgKiAnY29va2VkJyBtb2RlLiBUaGlzIG9ubHkgd29ya3Mgb24gVFRZJ3MuCisgKgorICogUmF3OiBrZWVwcyBET1MgZnJvbSB0cmFuc2xhdGluZyBrZXlzIGZvciB5b3UsIGFsc28gKEJJRyBXSU4pIGl0IG1lYW5zCisgKglnZXRjaCgpIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IHJhdGhlciB0aGFuIHdhaXQgZm9yIGEgcmV0dXJuLiBZb3UKKyAqCWxvc2UgZWRpdGluZyBmZWF0dXJlcyB0aG91Z2guCisgKgorICogQ29va2VkOiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRlc2lnbmF0ZSBmaWxlIHBvaW50ZXIgdG8gaXQncyBub3JtYWwsCisgKgl3YWl0IGZvciBhIDxDUj4gbW9kZS4gVGhpcyBpcyBleGFjdGx5IGxpa2UgcmF3KCkgZXhjZXB0IHRoYXQKKyAqCWl0IHNlbmRzIGEgMCB0byB0aGUgY29uc29sZSB0byBtYWtlIGl0IGJhY2sgaW50byBhIENPTjogZnJvbSBhIFJBVzoKKyAqLworICAgIHZvaWQKK21jaF9zZXR0bW9kZSh0bW9kZSkKKyAgICBpbnQJCXRtb2RlOworeworI2lmZGVmIF9fQVJPU19fCisgICAgaWYgKCFTZXRNb2RlKHJhd19pbiwgdG1vZGUgPT0gVE1PREVfUkFXID8gMSA6IDApKQorI2Vsc2UKKyAgICBpZiAoZG9zX3BhY2tldChNUChyYXdfaW4pLCAobG9uZylBQ1RJT05fU0NSRUVOX01PREUsCisJCQkJCSAgdG1vZGUgPT0gVE1PREVfUkFXID8gLTFMIDogMEwpID09IDApCisjZW5kaWYKKwltY2hfZXJybXNnKF8oImNhbm5vdCBjaGFuZ2UgY29uc29sZSBtb2RlID8hXG4iKSk7Cit9CisKKy8qCisgKiBzZXQgc2NyZWVuIG1vZGUsIGFsd2F5cyBmYWlscy4KKyAqLworICAgIGludAorbWNoX3NjcmVlbm1vZGUoYXJnKQorICAgIGNoYXJfdQkqYXJnOworeworICAgIEVNU0coXyhlX3NjcmVlbm1vZGUpKTsKKyAgICByZXR1cm4gRkFJTDsKK30KKworLyoKKyAqIENvZGUgZm9yIHRoaXMgcm91dGluZSBjYW1lIGZyb20gdGhlIGZvbGxvd2luZyA6CisgKgorICogQ29uUGFja2V0cy5jIC0gIEMuIFNjaGVwcG5lciwgQS4gRmlua2VsLCBQLiBMaW5kc2F5CUNCTQorICogICBET1MgcGFja2V0IGV4YW1wbGUKKyAqICAgUmVxdWlyZXMgMS4yCisgKgorICogRm91bmQgb24gRmlzaCBEaXNrIDU2LgorICoKKyAqIEhlYXZlbHkgbW9kaWZpZWQgYnkgbW9vbC4KKyAqLworCisjaW5jbHVkZSA8ZGV2aWNlcy9jb251bml0Lmg+CisKKy8qCisgKiB0cnkgdG8gZ2V0IHRoZSByZWFsIHdpbmRvdyBzaXplCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK21jaF9nZXRfc2hlbGxzaXplKCkKK3sKKyAgICBzdHJ1Y3QgQ29uVW5pdCAgKmNvblVuaXQ7CisgICAgY2hhcgkgICAgaWRfYVtzaXplb2Yoc3RydWN0IEluZm9EYXRhKSArIDNdOworICAgIHN0cnVjdCBJbmZvRGF0YSAqaWQ7CisKKyAgICBpZiAoIXRlcm1fY29uc29sZSkJLyogbm90IGFuIGFtaWdhIHdpbmRvdyAqLworCXJldHVybiBGQUlMOworCisgICAgLyogaW5zdXJlIGxvbmd3b3JkIGFsaWdubWVudCAqLworICAgIGlkID0gKHN0cnVjdCBJbmZvRGF0YSAqKSgoKGxvbmcpaWRfYSArIDNMKSAmIH4zTCk7CisKKyAgICAvKgorICAgICAqIFNob3VsZCBtYWtlIGNvbnNvbGUgYXdhcmUgb2YgcmVhbCB3aW5kb3cgc2l6ZSwgbm90IHRoZSBvbmUgd2Ugc2V0LgorICAgICAqIFVuZm9ydHVuYXRlbHksIHVuZGVyIERPUyAyLjB4IHRoaXMgcmVkcmF3cyB0aGUgd2luZG93IGFuZCBpdAorICAgICAqIGlzIHJhcmVseSBuZWVkZWQsIHNvIHdlIHNraXAgaXQgbm93LCB1bmxlc3Mgd2UgY2hhbmdlZCB0aGUgc2l6ZS4KKyAgICAgKi8KKyAgICBpZiAoc2l6ZV9zZXQpCisJT1VUX1NUUigiXDIzM3RcMjMzdSIpOwkvKiBDU0kgdCBDU0kgdSAqLworICAgIG91dF9mbHVzaCgpOworCisjaWZkZWYgX19BUk9TX18KKyAgICBpZiAoIUluZm8ocmF3X291dCwgaWQpCisJCSB8fCAod2Jfd2luZG93ID0gKHN0cnVjdCBXaW5kb3cgKikgaWQtPmlkX1ZvbHVtZU5vZGUpID09IE5VTEwpCisjZWxzZQorICAgIGlmIChkb3NfcGFja2V0KE1QKHJhd19vdXQpLCAobG9uZylBQ1RJT05fRElTS19JTkZPLCAoKFVMT05HKSBpZCkgPj4gMikgPT0gMAorCSAgICB8fCAod2Jfd2luZG93ID0gKHN0cnVjdCBXaW5kb3cgKilpZC0+aWRfVm9sdW1lTm9kZSkgPT0gTlVMTCkKKyNlbmRpZgorICAgIHsKKwkvKiBpdCdzIG5vdCBhbiBhbWlnYSB3aW5kb3csIG1heWJlIGF1eCBkZXZpY2UgKi8KKwkvKiB0ZXJtaW5hbCB0eXBlIHNob3VsZCBiZSBzZXQgKi8KKwl0ZXJtX2NvbnNvbGUgPSBGQUxTRTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisgICAgaWYgKG9sZHdpbmRvd3RpdGxlID09IE5VTEwpCisJb2xkd2luZG93dGl0bGUgPSAoY2hhcl91ICopd2Jfd2luZG93LT5UaXRsZTsKKyAgICBpZiAoaWQtPmlkX0luVXNlID09IChCUFRSKU5VTEwpCisgICAgeworCW1jaF9lcnJtc2coXygibWNoX2dldF9zaGVsbHNpemU6IG5vdCBhIGNvbnNvbGU/P1xuIikpOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICBjb25Vbml0ID0gKHN0cnVjdCBDb25Vbml0ICopICgoc3RydWN0IElPU3RkUmVxICopIGlkLT5pZF9JblVzZSktPmlvX1VuaXQ7CisKKyAgICAvKiBnZXQgd2luZG93IHNpemUgKi8KKyAgICBSb3dzID0gY29uVW5pdC0+Y3VfWU1heCArIDE7CisgICAgQ29sdW1ucyA9IGNvblVuaXQtPmN1X1hNYXggKyAxOworICAgIGlmIChSb3dzIDwgMCB8fCBSb3dzID4gMjAwKQkgICAgLyogY2Fubm90IGJlIGFuIGFtaWdhIHdpbmRvdyAqLworICAgIHsKKwlDb2x1bW5zID0gODA7CisJUm93cyA9IDI0OworCXRlcm1fY29uc29sZSA9IEZBTFNFOworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFRyeSB0byBzZXQgdGhlIHJlYWwgd2luZG93IHNpemUgdG8gUm93cyBhbmQgQ29sdW1ucy4KKyAqLworICAgIHZvaWQKK21jaF9zZXRfc2hlbGxzaXplKCkKK3sKKyAgICBpZiAodGVybV9jb25zb2xlKQorICAgIHsKKwlzaXplX3NldCA9IFRSVUU7CisJb3V0X2NoYXIoQ1NJKTsKKwlvdXRfbnVtKChsb25nKVJvd3MpOworCW91dF9jaGFyKCd0Jyk7CisJb3V0X2NoYXIoQ1NJKTsKKwlvdXRfbnVtKChsb25nKUNvbHVtbnMpOworCW91dF9jaGFyKCd1Jyk7CisJb3V0X2ZsdXNoKCk7CisgICAgfQorfQorCisvKgorICogUm93cyBhbmQvb3IgQ29sdW1ucyBoYXMgY2hhbmdlZC4KKyAqLworICAgIHZvaWQKK21jaF9uZXdfc2hlbGxzaXplKCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvLiAqLworfQorCisvKgorICogb3V0X251bSAtIG91dHB1dCBhIChiaWcpIG51bWJlciBmYXN0CisgKi8KKyAgICBzdGF0aWMgdm9pZAorb3V0X251bShuKQorICAgIGxvbmcJbjsKK3sKKyAgICBPVVRfU1RSX05GKHRsdG9hKCh1bnNpZ25lZCBsb25nKW4pKTsKK30KKworI2lmICFkZWZpbmVkKEFaVEVDX0MpICYmICFkZWZpbmVkKF9fQVJPU19fKQorLyoKKyAqIFNlbmRwYWNrZXQuYworICoKKyAqIEFuIGludmFsdWFibGUgYWRkaXRpb24gdG8geW91ciBBbWlnYS5saWIgZmlsZS4gVGhpcyBjb2RlIHNlbmRzIGEgcGFja2V0IHRvCisgKiB0aGUgZ2l2ZW4gbWVzc2FnZSBwb3J0LiBUaGlzIG1ha2VzIHdvcmtpbmcgYXJvdW5kIERPUyBsb3RzIGVhc2llci4KKyAqCisgKiBOb3RlLCBJIGRpZG4ndCB3cml0ZSB0aGlzLCB0aG9zZSB3b25kZXJmdWwgZm9sa3MgYXQgQ0JNIGRpZC4gSSBkbyBzdWdnZXN0CisgKiBob3dldmVyIHRoYXQgeW91IG1heSB3aXNoIHRvIGFkZCBpdCB0byBBbWlnYS5MaWIsIHRvIGRvIHNvLCBjb21waWxlIGl0IGFuZAorICogc2F5ICdvbWwgbGliOmFtaWdhLmxpYiAtciBzZW5kcGFja2V0Lm8nCisgKi8KKworLyogI2luY2x1ZGUgPHByb3RvL2V4ZWMuaD4gKi8KKy8qICNpbmNsdWRlIDxwcm90by9kb3MuaD4gKi8KKyNpbmNsdWRlIDxleGVjL21lbW9yeS5oPgorCisvKgorICogRnVuY3Rpb24gLSBkb3NfcGFja2V0IHdyaXR0ZW4gYnkgUGhpbCBMaW5kc2F5LCBDYXJvbHluIFNjaGVwcG5lciwgYW5kIEFuZHkKKyAqIEZpbmtlbC4gVGhpcyBmdW5jdGlvbiB3aWxsIHNlbmQgYSBwYWNrZXQgb2YgdGhlIGdpdmVuIHR5cGUgdG8gdGhlIE1lc3NhZ2UKKyAqIFBvcnQgc3VwcGxpZWQuCisgKi8KKworICAgIHN0YXRpYyBsb25nCitkb3NfcGFja2V0KHBpZCwgYWN0aW9uLCBhcmcpCisgICAgc3RydWN0IE1zZ1BvcnQgKnBpZDsgICAgLyogcHJvY2VzcyBpbmRlbnRpZmllciAuLi4gKGhhbmRsZXJzIG1lc3NhZ2UgcG9ydCkgKi8KKyAgICBsb25nCSAgICBhY3Rpb24sIC8qIHBhY2tldCB0eXBlIC4uLiAod2hhdCB5b3Ugd2FudCBoYW5kbGVyIHRvIGRvKSAgICovCisJCSAgICBhcmc7ICAgIC8qIHNpbmdsZSBhcmd1bWVudCAqLworeworIyBpZmRlZiBGRUFUX0FSUAorICAgIHN0cnVjdCBNc2dQb3J0CSAgICAqcmVwbHlwb3J0OworICAgIHN0cnVjdCBTdGFuZGFyZFBhY2tldCAgICpwYWNrZXQ7CisgICAgbG9uZwkJICAgIHJlczE7CisKKyAgICBpZiAoZG9zMikKKyMgZW5kaWYKKwlyZXR1cm4gRG9Qa3QocGlkLCBhY3Rpb24sIGFyZywgMEwsIDBMLCAwTCwgMEwpOwkvKiB1c2UgMi4wIGZ1bmN0aW9uICovCisjIGlmZGVmIEZFQVRfQVJQCisKKyAgICByZXBseXBvcnQgPSAoc3RydWN0IE1zZ1BvcnQgKikgQ3JlYXRlUG9ydChOVUxMLCAwKTsJLyogdXNlIGFycCBmdW5jdGlvbiAqLworICAgIGlmICghcmVwbHlwb3J0KQorCXJldHVybiAoMCk7CisKKyAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYSBwYWNrZXQsIG1ha2UgaXQgcHVibGljIGFuZCBjbGVhciBpdCAqLworICAgIHBhY2tldCA9IChzdHJ1Y3QgU3RhbmRhcmRQYWNrZXQgKikKKwlBbGxvY01lbSgobG9uZykgc2l6ZW9mKHN0cnVjdCBTdGFuZGFyZFBhY2tldCksIE1FTUZfUFVCTElDIHwgTUVNRl9DTEVBUik7CisgICAgaWYgKCFwYWNrZXQpIHsKKwlEZWxldGVQb3J0KHJlcGx5cG9ydCk7CisJcmV0dXJuICgwKTsKKyAgICB9CisgICAgcGFja2V0LT5zcF9Nc2cubW5fTm9kZS5sbl9OYW1lID0gKGNoYXIgKikgJihwYWNrZXQtPnNwX1BrdCk7CisgICAgcGFja2V0LT5zcF9Qa3QuZHBfTGluayA9ICYocGFja2V0LT5zcF9Nc2cpOworICAgIHBhY2tldC0+c3BfUGt0LmRwX1BvcnQgPSByZXBseXBvcnQ7CisgICAgcGFja2V0LT5zcF9Qa3QuZHBfVHlwZSA9IGFjdGlvbjsKKyAgICBwYWNrZXQtPnNwX1BrdC5kcF9BcmcxID0gYXJnOworCisgICAgUHV0TXNnKHBpZCwgKHN0cnVjdCBNZXNzYWdlICopcGFja2V0KTsJLyogc2VuZCBwYWNrZXQgKi8KKworICAgIFdhaXRQb3J0KHJlcGx5cG9ydCk7CisgICAgR2V0TXNnKHJlcGx5cG9ydCk7CisKKyAgICByZXMxID0gcGFja2V0LT5zcF9Qa3QuZHBfUmVzMTsKKworICAgIEZyZWVNZW0ocGFja2V0LCAobG9uZykgc2l6ZW9mKHN0cnVjdCBTdGFuZGFyZFBhY2tldCkpOworICAgIERlbGV0ZVBvcnQocmVwbHlwb3J0KTsKKworICAgIHJldHVybiAocmVzMSk7CisjIGVuZGlmCit9CisjZW5kaWYgLyogIWRlZmluZWQoQVpURUNfQykgJiYgIWRlZmluZWQoX19BUk9TX18pICovCisKKy8qCisgKiBDYWxsIHNoZWxsLgorICogUmV0dXJuIGVycm9yIG51bWJlciBmb3IgZmFpbHVyZSwgMCBvdGhlcndpc2UKKyAqLworICAgIGludAorbWNoX2NhbGxfc2hlbGwoY21kLCBvcHRpb25zKQorICAgIGNoYXJfdQkqY21kOworICAgIGludAkJb3B0aW9uczsJLyogU0hFTExfKiwgc2VlIHZpbS5oICovCit7CisgICAgQlBUUglteWRpcjsKKyAgICBpbnQJCXg7CisgICAgaW50CQl0bW9kZSA9IGN1cl90bW9kZTsKKyNpZmRlZiBBWlRFQ19DCisgICAgaW50CQl1c2VfZXhlY3V0ZTsKKyAgICBjaGFyX3UJKnNoZWxsY21kID0gTlVMTDsKKyAgICBjaGFyX3UJKnNoZWxsYXJnOworI2VuZGlmCisgICAgaW50CQlyZXR2YWwgPSAwOworCisgICAgaWYgKGNsb3NlX3dpbikKKyAgICB7CisJLyogaWYgVmltIG9wZW5lZCBhIHdpbmRvdzogRXhlY3V0aW5nIGEgc2hlbGwgbWF5IGNhdXNlIGNyYXNoZXMgKi8KKwlFTVNHKF8oIkUzNjA6IENhbm5vdCBleGVjdXRlIHNoZWxsIHdpdGggLWYgb3B0aW9uIikpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAodGVybV9jb25zb2xlKQorCXdpbl9yZXNpemVfb2ZmKCk7CSAgICAvKiB3aW5kb3cgcmVzaXplIGV2ZW50cyBkZS1hY3RpdmF0ZWQgKi8KKyAgICBvdXRfZmx1c2goKTsKKworICAgIGlmIChvcHRpb25zICYgU0hFTExfQ09PS0VEKQorCXNldHRtb2RlKFRNT0RFX0NPT0spOwkgICAgLyogc2V0IHRvIG5vcm1hbCBtb2RlICovCisgICAgbXlkaXIgPSBMb2NrKChVQllURSAqKSIiLCAobG9uZylBQ0NFU1NfUkVBRCk7ICAgLyogcmVtZW1iZXIgY3VycmVudCBkaXIgKi8KKworI2lmICFkZWZpbmVkKEFaVEVDX0MpCQkgICAgLyogbm90IHRlc3RlZCB2ZXJ5IG11Y2ggKi8KKyAgICBpZiAoY21kID09IE5VTEwpCisgICAgeworIyBpZmRlZiBGRUFUX0FSUAorCWlmIChkb3MyKQorIyBlbmRpZgorCSAgICB4ID0gU3lzdGVtVGFncyhwX3NoLCBTWVNfVXNlclNoZWxsLCBUUlVFLCBUQUdfRE9ORSk7CisjIGlmZGVmIEZFQVRfQVJQCisJZWxzZQorCSAgICB4ID0gRXhlY3V0ZShwX3NoLCByYXdfaW4sIHJhd19vdXQpOworIyBlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworIyBpZmRlZiBGRUFUX0FSUAorCWlmIChkb3MyKQorIyBlbmRpZgorCSAgICB4ID0gU3lzdGVtVGFncygoY2hhciAqKWNtZCwgU1lTX1VzZXJTaGVsbCwgVFJVRSwgVEFHX0RPTkUpOworIyBpZmRlZiBGRUFUX0FSUAorCWVsc2UKKwkgICAgeCA9IEV4ZWN1dGUoKGNoYXIgKiljbWQsIDBMLCByYXdfb3V0KTsKKyMgZW5kaWYKKyAgICB9CisjIGlmZGVmIEZFQVRfQVJQCisgICAgaWYgKChkb3MyICYmIHggPCAwKSB8fCAoIWRvczIgJiYgIXgpKQorIyBlbHNlCisgICAgaWYgKHggPCAwKQorIyBlbmRpZgorICAgIHsKKwlNU0dfUFVUUyhfKCJDYW5ub3QgZXhlY3V0ZSAiKSk7CisJaWYgKGNtZCA9PSBOVUxMKQorCXsKKwkgICAgTVNHX1BVVFMoXygic2hlbGwgIikpOworCSAgICBtc2dfb3V0dHJhbnMocF9zaCk7CisJfQorCWVsc2UKKwkgICAgbXNnX291dHRyYW5zKGNtZCk7CisJbXNnX3B1dGNoYXIoJ1xuJyk7CisJcmV0dmFsID0gLTE7CisgICAgfQorIyBpZmRlZiBGRUFUX0FSUAorICAgIGVsc2UgaWYgKCFkb3MyIHx8IHgpCisjIGVsc2UKKyAgICBlbHNlIGlmICh4KQorIyBlbmRpZgorICAgIHsKKwlpZiAoKHggPSBJb0VycigpKSAhPSAwKQorCXsKKwkgICAgaWYgKCEob3B0aW9ucyAmIFNIRUxMX1NJTEVOVCkpCisJICAgIHsKKwkJbXNnX3B1dGNoYXIoJ1xuJyk7CisJCW1zZ19vdXRudW0oKGxvbmcpeCk7CisJCU1TR19QVVRTKF8oIiByZXR1cm5lZFxuIikpOworCSAgICB9CisJICAgIHJldHZhbCA9IHg7CisJfQorICAgIH0KKyNlbHNlCS8qIGVsc2UgcGFydCBpcyBmb3IgQVpURUNfQyAqLworICAgIGlmIChwX3N0ID49IDQgfHwgKHBfc3QgPj0gMiAmJiAhKG9wdGlvbnMgJiBTSEVMTF9GSUxURVIpKSkKKwl1c2VfZXhlY3V0ZSA9IDE7CisgICAgZWxzZQorCXVzZV9leGVjdXRlID0gMDsKKyAgICBpZiAoIXVzZV9leGVjdXRlKQorICAgIHsKKwkvKgorCSAqIHNlcGFyYXRlIHNoZWxsIG5hbWUgZnJvbSBhcmd1bWVudAorCSAqLworCXNoZWxsY21kID0gdmltX3N0cnNhdmUocF9zaCk7CisJaWYgKHNoZWxsY21kID09IE5VTEwpCSAgICAvKiBvdXQgb2YgbWVtb3J5LCB1c2UgRXhlY3V0ZSAqLworCSAgICB1c2VfZXhlY3V0ZSA9IDE7CisJZWxzZQorCXsKKwkgICAgc2hlbGxhcmcgPSBza2lwdG93aGl0ZShzaGVsbGNtZCk7CS8qIGZpbmQgc3RhcnQgb2YgYXJndW1lbnRzICovCisJICAgIGlmICgqc2hlbGxhcmcgIT0gTlVMKQorCSAgICB7CisJCSpzaGVsbGFyZysrID0gTlVMOworCQlzaGVsbGFyZyA9IHNraXB3aGl0ZShzaGVsbGFyZyk7CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIChjbWQgPT0gTlVMTCkKKyAgICB7CisJaWYgKHVzZV9leGVjdXRlKQorCXsKKyMgaWZkZWYgRkVBVF9BUlAKKwkgICAgaWYgKGRvczIpCisjIGVuZGlmCisJCXggPSBTeXN0ZW1UYWdzKChVQllURSAqKXBfc2gsIFNZU19Vc2VyU2hlbGwsIFRSVUUsIFRBR19ET05FKTsKKyMgaWZkZWYgRkVBVF9BUlAKKwkgICAgZWxzZQorCQl4ID0gIUV4ZWN1dGUoKFVCWVRFICopcF9zaCwgcmF3X2luLCByYXdfb3V0KTsKKyMgZW5kaWYKKwl9CisJZWxzZQorCSAgICB4ID0gZmV4ZWNsKChjaGFyICopc2hlbGxjbWQsIChjaGFyICopc2hlbGxjbWQsIChjaGFyICopc2hlbGxhcmcsIE5VTEwpOworICAgIH0KKyAgICBlbHNlIGlmICh1c2VfZXhlY3V0ZSkKKyAgICB7CisjIGlmZGVmIEZFQVRfQVJQCisJaWYgKGRvczIpCisjIGVuZGlmCisJICAgIHggPSBTeXN0ZW1UYWdzKChVQllURSAqKWNtZCwgU1lTX1VzZXJTaGVsbCwgVFJVRSwgVEFHX0RPTkUpOworIyBpZmRlZiBGRUFUX0FSUAorCWVsc2UKKwkgICAgeCA9ICFFeGVjdXRlKChVQllURSAqKWNtZCwgMEwsIHJhd19vdXQpOworIyBlbmRpZgorICAgIH0KKyAgICBlbHNlIGlmIChwX3N0ICYgMSkKKwl4ID0gZmV4ZWNsKChjaGFyICopc2hlbGxjbWQsIChjaGFyICopc2hlbGxjbWQsIChjaGFyICopc2hlbGxhcmcsCisJCQkJCQkJICAgKGNoYXIgKiljbWQsIE5VTEwpOworICAgIGVsc2UKKwl4ID0gZmV4ZWNsKChjaGFyICopc2hlbGxjbWQsIChjaGFyICopc2hlbGxjbWQsIChjaGFyICopc2hlbGxhcmcsCisJCQkJCSAgIChjaGFyICopcF9zaGNmLCAoY2hhciAqKWNtZCwgTlVMTCk7CisjIGlmZGVmIEZFQVRfQVJQCisgICAgaWYgKChkb3MyICYmIHggPCAwKSB8fCAoIWRvczIgJiYgeCkpCisjIGVsc2UKKyAgICBpZiAoeCA8IDApCisjIGVuZGlmCisgICAgeworCU1TR19QVVRTKF8oIkNhbm5vdCBleGVjdXRlICIpKTsKKwlpZiAodXNlX2V4ZWN1dGUpCisJeworCSAgICBpZiAoY21kID09IE5VTEwpCisJCW1zZ19vdXR0cmFucyhwX3NoKTsKKwkgICAgZWxzZQorCQltc2dfb3V0dHJhbnMoY21kKTsKKwl9CisJZWxzZQorCXsKKwkgICAgTVNHX1BVVFMoXygic2hlbGwgIikpOworCSAgICBtc2dfb3V0dHJhbnMoc2hlbGxjbWQpOworCX0KKwltc2dfcHV0Y2hhcignXG4nKTsKKwlyZXR2YWwgPSAtMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAodXNlX2V4ZWN1dGUpCisJeworIyBpZmRlZiBGRUFUX0FSUAorCSAgICBpZiAoIWRvczIgfHwgeCkKKyMgZWxzZQorCSAgICBpZiAoeCkKKyMgZW5kaWYKKwkJeCA9IElvRXJyKCk7CisJfQorCWVsc2UKKwkgICAgeCA9IHdhaXQoKTsKKwlpZiAoeCkKKwl7CisJICAgIGlmICghKG9wdGlvbnMgJiBTSEVMTF9TSUxFTlQpICYmICFlbXNnX3NpbGVudCkKKwkgICAgeworCQltc2dfcHV0Y2hhcignXG4nKTsKKwkJbXNnX291dG51bSgobG9uZyl4KTsKKwkJTVNHX1BVVFMoXygiIHJldHVybmVkXG4iKSk7CisJICAgIH0KKwkgICAgcmV0dmFsID0geDsKKwl9CisgICAgfQorICAgIHZpbV9mcmVlKHNoZWxsY21kKTsKKyNlbmRpZgkvKiBBWlRFQ19DICovCisKKyAgICBpZiAoKG15ZGlyID0gQ3VycmVudERpcihteWRpcikpICE9IDApIC8qIG1ha2Ugc3VyZSB3ZSBzdGF5IGluIHRoZSBzYW1lIGRpcmVjdG9yeSAqLworCVVuTG9jayhteWRpcik7CisgICAgaWYgKHRtb2RlID09IFRNT0RFX1JBVykKKwlzZXR0bW9kZShUTU9ERV9SQVcpOwkJLyogc2V0IHRvIHJhdyBtb2RlICovCisjaWZkZWYgRkVBVF9USVRMRQorICAgIHJlc2V0dGl0bGUoKTsKKyNlbmRpZgorICAgIGlmICh0ZXJtX2NvbnNvbGUpCisJd2luX3Jlc2l6ZV9vbigpOwkJLyogd2luZG93IHJlc2l6ZSBldmVudHMgYWN0aXZhdGVkICovCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIGNoZWNrIGZvciBhbiAiaW50ZXJydXB0IHNpZ25hbCIKKyAqIFdlIG9ubHkgcmVhY3QgdG8gYSBDVFJMLUMsIGJ1dCBhbHNvIGNsZWFyIHRoZSBvdGhlciBicmVhayBzaWduYWxzIHRvIGF2b2lkCisgKiB0cm91YmxlIHdpdGggbGF0dGljZS1jIHByb2dyYW1zLgorICovCisgICAgdm9pZAorbWNoX2JyZWFrY2hlY2soKQoreworICAgaWYgKFNldFNpZ25hbCgwTCwgKGxvbmcpKFNJR0JSRUFLRl9DVFJMX0N8U0lHQlJFQUtGX0NUUkxfRHxTSUdCUkVBS0ZfQ1RSTF9FfFNJR0JSRUFLRl9DVFJMX0YpKSAmIFNJR0JSRUFLRl9DVFJMX0MpCisJZ290X2ludCA9IFRSVUU7Cit9CisKKy8qIHRoaXMgcm91dGluZSBjYXVzZXMgbWFueCB0byB1c2UgdGhpcyBDaGtfQWJvcnQoKSByYXRoZXIgdGhhbiBpdCdzIG93biAqLworLyogb3RoZXJ3aXNlIGl0IHJlc2V0cyBvdXIgXkMgd2hlbiBkb2luZyBhbnkgSS9PIChldmVuIHdoZW4gRW5hYmxlX0Fib3J0ICovCisvKiBpcyB6ZXJvKS4gIFNpbmNlIHdlIHdhbnQgdG8gY2hlY2sgZm9yIG91ciBvd24gXkMncwkJCSAqLworCisjaWZkZWYgX0RDQworI2RlZmluZSBDaGtfQWJvcnQgY2hrYWJvcnQKKyNlbmRpZgorCisjaWZkZWYgTEFUVElDRQordm9pZCBfX3JlZ2FyZ3MgX19jaGthYm9ydCh2b2lkKTsKKwordm9pZCBfX3JlZ2FyZ3MgX19jaGthYm9ydCh2b2lkKQore30KKworI2Vsc2UKKyAgICBsb25nCitDaGtfQWJvcnQodm9pZCkKK3sKKyAgICByZXR1cm4oMEwpOworfQorI2VuZGlmCisKKy8qCisgKiBtY2hfZXhwYW5kcGF0aCgpIC0gdGhpcyBjb2RlIGRvZXMgd2lsZC1jYXJkIHBhdHRlcm4gbWF0Y2hpbmcgdXNpbmcgdGhlIGFycAorICoJCSAgICAgIHJvdXRpbmVzLgorICoKKyAqICJwYXQiIGhhcyBiYWNrc2xhc2hlcyBiZWZvcmUgY2hhcnMgdGhhdCBhcmUgbm90IHRvIGJlIGV4cGFuZGVkLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgZm91bmQuCisgKgorICogVGhpcyBpcyBiYXNlZCBvbiBXaWxkRGVtbzIuYyAoZm91bmQgaW4gYXJwMS4xIGRpc3RyaWJ1dGlvbikuCisgKiBUaGF0IGNvZGUncyBjb3B5cmlnaHQgZm9sbG93czoKKyAqCUNvcHlyaWdodCAoYykgMTk4NywgU2NvdHQgQmFsbGFudHluZQorICoJVXNlIGFuZCBhYnVzZSBhcyB5b3UgcGxlYXNlLgorICovCisKKyNkZWZpbmUgQU5DSE9SX0JVRl9TSVpFICg1MTIpCisjZGVmaW5lIEFOQ0hPUl9TSVpFIChzaXplb2Yoc3RydWN0IEFuY2hvclBhdGgpICsgQU5DSE9SX0JVRl9TSVpFKQorCisgICAgaW50CittY2hfZXhwYW5kcGF0aChnYXAsIHBhdCwgZmxhZ3MpCisgICAgZ2FycmF5X1QJKmdhcDsKKyAgICBjaGFyX3UJKnBhdDsKKyAgICBpbnQJCWZsYWdzOwkJLyogRVdfKiBmbGFncyAqLworeworICAgIHN0cnVjdCBBbmNob3JQYXRoCSpBbmNob3I7CisgICAgTE9ORwkJUmVzdWx0OworICAgIGNoYXJfdQkJKnN0YXJidWYsICpzcCwgKmRwOworICAgIGludAkJCXN0YXJ0X2xlbjsKKyAgICBpbnQJCQltYXRjaGVzOworCisgICAgc3RhcnRfbGVuID0gZ2FwLT5nYV9sZW47CisKKyAgICAvKiBHZXQgb3VyIEFuY2hvckJhc2UgKi8KKyAgICBBbmNob3IgPSAoc3RydWN0IEFuY2hvclBhdGggKilhbGxvY19jbGVhcigodW5zaWduZWQpQU5DSE9SX1NJWkUpOworICAgIGlmIChBbmNob3IgPT0gTlVMTCkKKwlyZXR1cm4gMDsKKworICAgIEFuY2hvci0+YXBfU3RybGVuID0gQU5DSE9SX0JVRl9TSVpFOyAgLyogYXBfTGVuZ3RoIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSAqLworI2lmZGVmIEFQRl9ET0RPVAorICAgIEFuY2hvci0+YXBfRmxhZ3MgPSBBUEZfRE9ET1QgfCBBUEZfRE9XSUxEOwkvKiBhbGxvdyAnLicgZm9yIGN1cnJlbnQgZGlyICovCisjZWxzZQorICAgIEFuY2hvci0+YXBfRmxhZ3MgPSBBUEZfRG9Eb3QgfCBBUEZfRG9XaWxkOwkvKiBhbGxvdyAnLicgZm9yIGN1cnJlbnQgZGlyICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfQVJQCisgICAgaWYgKGRvczIpCisgICAgeworI2VuZGlmCisJLyogaGFjayB0byByZXBsYWNlICcqJyBieSAnIz8nICovCisJc3RhcmJ1ZiA9IGFsbG9jKCh1bnNpZ25lZCkoMiAqIFNUUkxFTihwYXQpICsgMSkpOworCWlmIChzdGFyYnVmID09IE5VTEwpCisJICAgIGdvdG8gUmV0dXJuOworCWZvciAoc3AgPSBwYXQsIGRwID0gc3RhcmJ1ZjsgKnNwOyArK3NwKQorCXsKKwkgICAgaWYgKCpzcCA9PSAnKicpCisJICAgIHsKKwkJKmRwKysgPSAnIyc7CisJCSpkcCsrID0gJz8nOworCSAgICB9CisJICAgIGVsc2UKKwkJKmRwKysgPSAqc3A7CisJfQorCSpkcCA9IE5VTDsKKwlSZXN1bHQgPSBNYXRjaEZpcnN0KChVQllURSAqKXN0YXJidWYsIEFuY2hvcik7CisJdmltX2ZyZWUoc3RhcmJ1Zik7CisjaWZkZWYgRkVBVF9BUlAKKyAgICB9CisgICAgZWxzZQorCVJlc3VsdCA9IEZpbmRGaXJzdCgoY2hhciAqKXBhdCwgQW5jaG9yKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBMb29wIHRvIGdldCBhbGwgbWF0Y2hlcy4KKyAgICAgKi8KKyAgICB3aGlsZSAoUmVzdWx0ID09IDApCisgICAgeworCWFkZGZpbGUoZ2FwLCAoY2hhcl91ICopQW5jaG9yLT5hcF9CdWYsIGZsYWdzKTsKKyNpZmRlZiBGRUFUX0FSUAorCWlmIChkb3MyKQorI2VuZGlmCisJICAgIFJlc3VsdCA9IE1hdGNoTmV4dChBbmNob3IpOworI2lmZGVmIEZFQVRfQVJQCisJZWxzZQorCSAgICBSZXN1bHQgPSBGaW5kTmV4dChBbmNob3IpOworI2VuZGlmCisgICAgfQorICAgIG1hdGNoZXMgPSBnYXAtPmdhX2xlbiAtIHN0YXJ0X2xlbjsKKworICAgIGlmIChSZXN1bHQgPT0gRVJST1JfQlVGRkVSX09WRVJGTE9XKQorCUVNU0coXygiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iKSk7CisgICAgZWxzZSBpZiAobWF0Y2hlcyA9PSAwICYmIFJlc3VsdCAhPSBFUlJPUl9PQkpFQ1RfTk9UX0ZPVU5ECisJCQkgICYmIFJlc3VsdCAhPSBFUlJPUl9ERVZJQ0VfTk9UX01PVU5URUQKKwkJCSAgJiYgUmVzdWx0ICE9IEVSUk9SX05PX01PUkVfRU5UUklFUykKKwlFTVNHKF8oIkkvTyBFUlJPUiIpKTsKKworICAgIC8qCisgICAgICogU29ydCB0aGUgZmlsZXMgZm9yIHRoaXMgcGF0dGVybi4KKyAgICAgKi8KKyAgICBpZiAobWF0Y2hlcykKKwlxc29ydCgodm9pZCAqKSgoKGNoYXJfdSAqKilnYXAtPmdhX2RhdGEpICsgc3RhcnRfbGVuKSwKKwkJCQkgIChzaXplX3QpbWF0Y2hlcywgc2l6ZW9mKGNoYXJfdSAqKSwgc29ydGNtcCk7CisKKyAgICAvKiBGcmVlIHRoZSB3aWxkY2FyZCBzdHVmZiAqLworI2lmZGVmIEZFQVRfQVJQCisgICAgaWYgKGRvczIpCisjZW5kaWYKKwlNYXRjaEVuZChBbmNob3IpOworI2lmZGVmIEZFQVRfQVJQCisgICAgZWxzZQorCUZyZWVBbmNob3JDaGFpbihBbmNob3IpOworI2VuZGlmCisKK1JldHVybjoKKyAgICB2aW1fZnJlZShBbmNob3IpOworCisgICAgcmV0dXJuIG1hdGNoZXM7Cit9CisKKyAgICBzdGF0aWMgaW50Citzb3J0Y21wKGEsIGIpCisgICAgY29uc3Qgdm9pZCAqYSwgKmI7Cit7CisgICAgY2hhciAqcyA9ICooY2hhciAqKilhOworICAgIGNoYXIgKnQgPSAqKGNoYXIgKiopYjsKKworICAgIHJldHVybiBwYXRoY21wKHMsIHQpOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgInAiIGhhcyB3aWxkY2FyZHMgdGhhdCBjYW4gYmUgZXhwYW5kZWQgYnkgbWNoX2V4cGFuZHBhdGgoKS4KKyAqLworICAgIGludAorbWNoX2hhc19leHBfd2lsZGNhcmQocCkKKyAgICBjaGFyX3UgKnA7Cit7CisgICAgZm9yICggOyAqcDsgKytwKQorICAgIHsKKwlpZiAoKnAgPT0gJ1xcJyAmJiBwWzFdICE9IE5VTCkKKwkgICAgKytwOworCWVsc2UgaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSIqP1soIyIsICpwKSAhPSBOVUxMKQorCSAgICByZXR1cm4gVFJVRTsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyAgICBpbnQKK21jaF9oYXNfd2lsZGNhcmQocCkKKyAgICBjaGFyX3UgKnA7Cit7CisgICAgZm9yICggOyAqcDsgKytwKQorICAgIHsKKwlpZiAoKnAgPT0gJ1xcJyAmJiBwWzFdICE9IE5VTCkKKwkgICAgKytwOworCWVsc2UKKwkgICAgaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKQorIyAgaWZkZWYgVklNX0JBQ0tUSUNLCisJCQkJICAgICIqP1soIyRgIgorIyAgZWxzZQorCQkJCSAgICAiKj9bKCMkIgorIyAgZW5kaWYKKwkJCQkJCSwgKnApICE9IE5VTEwKKwkJICAgIHx8ICgqcCA9PSAnficgJiYgcFsxXSAhPSBOVUwpKQorCQlyZXR1cm4gVFJVRTsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBXaXRoIEFtaWdhRE9TIDIuMCBzdXBwb3J0IGZvciByZWFkaW5nIGxvY2FsIGVudmlyb25tZW50IHZhcmlhYmxlcworICoKKyAqIFR3byBidWZmZXJzIGFyZSBhbGxvY2F0ZWQ6CisgKiAtIEEgYmlnIG9uZSB0byBkbyB0aGUgZXhwYW5zaW9uIGludG8uICBJdCBpcyBmcmVlZCBiZWZvcmUgcmV0dXJuaW5nLgorICogLSBBIHNtYWxsIG9uZSB0byBob2xkIHRoZSByZXR1cm4gdmFsdWUuICBJdCBpcyBrZXB0IHVudGlsIHRoZSBuZXh0IGNhbGwuCisgKi8KKyAgICBjaGFyX3UgKgorbWNoX2dldGVudih2YXIpCisgICAgY2hhcl91ICp2YXI7Cit7CisgICAgaW50CQkgICAgbGVuOworICAgIFVCWVRFCSAgICAqYnVmOwkJLyogYnVmZmVyIHRvIGV4cGFuZCBpbiAqLworICAgIGNoYXJfdQkgICAgKnJldHZhbDsJCS8qIHJldHVybiB2YWx1ZSAqLworICAgIHN0YXRpYyBjaGFyX3UgICAqYWxsb2NlZCA9IE5VTEw7CS8qIGFsbG9jYXRlZCBtZW1vcnkgKi8KKworI2lmZGVmIEZFQVRfQVJQCisgICAgaWYgKCFkb3MyKQorCXJldHZhbCA9IChjaGFyX3UgKilnZXRlbnYoKGNoYXIgKil2YXIpOworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwl2aW1fZnJlZShhbGxvY2VkKTsKKwlhbGxvY2VkID0gTlVMTDsKKwlyZXR2YWwgPSBOVUxMOworCisJYnVmID0gYWxsb2MoSU9TSVpFKTsKKwlpZiAoYnVmID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCisJbGVuID0gR2V0VmFyKChVQllURSAqKXZhciwgYnVmLCAobG9uZykoSU9TSVpFIC0gMSksIChsb25nKTApOworCWlmIChsZW4gPj0gMCkKKwl7CisJICAgIHJldHZhbCA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKilidWYpOworCSAgICBhbGxvY2VkID0gcmV0dmFsOworCX0KKworCXZpbV9mcmVlKGJ1Zik7CisgICAgfQorCisgICAgLyogaWYgJFZJTSBpcyBub3QgZGVmaW5lZCwgdXNlICJ2aW06IiBpbnN0ZWFkICovCisgICAgaWYgKHJldHZhbCA9PSBOVUxMICYmIFNUUkNNUCh2YXIsICJWSU0iKSA9PSAwKQorCXJldHZhbCA9IChjaGFyX3UgKikidmltOiI7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogQW1pZ2EgdmVyc2lvbiBvZiBzZXRlbnYoKSB3aXRoIEFtaWdhRE9TIDIuMCBzdXBwb3J0LgorICovCisvKiBBUkdTVVNFRCAqLworICAgIGludAorbWNoX3NldGVudih2YXIsIHZhbHVlLCB4KQorICAgIGNoYXIgKnZhcjsKKyAgICBjaGFyICp2YWx1ZTsKKyAgICBpbnQJIHg7Cit7CisjaWZkZWYgRkVBVF9BUlAKKyAgICBpZiAoIWRvczIpCisJcmV0dXJuIHNldGVudih2YXIsIHZhbHVlKTsKKyNlbmRpZgorCisgICAgaWYgKFNldFZhcigoVUJZVEUgKil2YXIsIChVQllURSAqKXZhbHVlLCAoTE9ORyktMSwgKFVMT05HKUdWRl9MT0NBTF9PTkxZKSkKKwlyZXR1cm4gMDsgICAvKiBzdWNjZXNzICovCisgICAgcmV0dXJuIC0xOwkgICAgLyogZmFpbHVyZSAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL29zX2FtaWdhLmggYi9zcmMvb3NfYW1pZ2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmU0ZDFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX2FtaWdhLmgKQEAgLTAsMCArMSwyMDEgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKy8qCisgKiBBbWlnYSBNYWNoaW5lLWRlcGVuZGVudCB0aGluZ3MKKyAqLworCisjZGVmaW5lIENBU0VfSU5TRU5TSVRJVkVfRklMRU5BTUUgICAvKiBpZ25vcmUgY2FzZSB3aGVuIGNvbXBhcmluZyBmaWxlIG5hbWVzICovCisjZGVmaW5lIFNQQUNFX0lOX0ZJTEVOQU1FCisjZGVmaW5lIFVTRV9GTkFNRV9DQVNFCQkgICAgLyogYWRqdXN0IGNhc2Ugb2YgZmlsZSBuYW1lcyAqLworI2RlZmluZSBVU0VfVEVSTV9DT05TT0xFCisjZGVmaW5lIEhBVkVfQVZBSUxfTUVNCisKKyNpZm5kZWYgSEFWRV9DT05GSUdfSAorIyBpZmRlZiBBWlRFQ19DCisjICBkZWZpbmUgSEFWRV9TVEFUX0gKKyMgZW5kaWYKKyMgZGVmaW5lIEhBVkVfU1RETElCX0gKKyMgZGVmaW5lIEhBVkVfU1RSSU5HX0gKKyMgZGVmaW5lIEhBVkVfRkNOVExfSAorIyBkZWZpbmUgSEFWRV9TVFJDU1BOCisjIGRlZmluZSBIQVZFX1NUUklDTVAKKyMgZGVmaW5lIEhBVkVfU1RSTklDTVAKKyMgZGVmaW5lIEhBVkVfU1RSRlRJTUUJICAgIC8qIGd1ZXNzZWQgKi8KKyMgZGVmaW5lIEhBVkVfU0VURU5WCisjIGRlZmluZSBIQVZFX01FTVNFVAorIyBkZWZpbmUgSEFWRV9RU09SVAorIyBpZiBkZWZpbmVkKF9fREFURV9fKSAmJiBkZWZpbmVkKF9fVElNRV9fKQorIyAgZGVmaW5lIEhBVkVfREFURV9USU1FCisjIGVuZGlmCisKKyNkZWZpbmUgREZMVF9FUlJPUkZJTEUJCSJBenRlY0MuRXJyIgorI2RlZmluZSBERkxUX1JVTlRJTUVQQVRIICJob21lOnZpbWZpbGVzLCRWSU0vdmltZmlsZXMsJFZJTVJVTlRJTUUsJFZJTS92aW1maWxlcy9hZnRlcixob21lOnZpbWZpbGVzL2FmdGVyIgorCisjZGVmaW5lIEJBU0VOQU1FTEVOCTI2CS8qIEFtaWdhICovCisKKyNkZWZpbmUgVEVNUE5BTUUJInQ6dj9YWFhYWFgiCisjZGVmaW5lIFRFTVBOQU1FTEVOCTEyCisKKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxleGVjL3R5cGVzLmg+CisjaW5jbHVkZSA8bGlicmFyaWVzL2Rvcy5oPgorI2luY2x1ZGUgPGxpYnJhcmllcy9kb3NleHRlbnMuaD4KKworLyogQ3VycmVudGx5LCBhbGwgQW1pZ2EgY29tcGlsZXJzIGV4Y2VwdCBBWlRFQyBDIGhhdmUgdGhlc2UuLi4gKi8KKyNpZm5kZWYgQVpURUNfQworIyBpbmNsdWRlIDxwcm90by9leGVjLmg+CisjIGluY2x1ZGUgPHByb3RvL2Rvcy5oPgorIyBpbmNsdWRlIDxwcm90by9pbnR1aXRpb24uaD4KKyNlbmRpZgorCisjZGVmaW5lIEZOQU1FX0lMTEVHQUwgIjsqP2AjJSIgLyogaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGEgZmlsZSBuYW1lICovCisKKy8qCisgKiBNYW54IGRvZXNuJ3QgaGF2ZSBvZmZfdCwgZGVmaW5lIGl0IGhlcmUuCisgKi8KKyNpZmRlZiBBWlRFQ19DCit0eXBlZGVmIGxvbmcgb2ZmX3Q7CisjZW5kaWYKKworI2lmZGVmIExBVFRJQ0UKKyMgZGVmaW5lIFVTRV9UTVBOQU0JLyogdXNlIHRtcG5hbSgpIGluc3RlYWQgb2YgbWt0ZW1wKCkgKi8KKyNlbmRpZgorCisjaWZkZWYgX19HTlVDX18KKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworLyoKKyAqIGFycGJhc2UuaCBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSBmdW5jdGlvbnMuaAorICovCisjaWZkZWYgRkVBVF9BUlAKKyMgaW5jbHVkZSA8bGlicmFyaWVzL2FycGJhc2UuaD4KKyNlbmRpZgorCisvKgorICogVGhpcyB3b24ndCBiZSBuZWVkZWQgaWYgeW91IGhhdmUgYSB2ZXJzaW9uIG9mIExhdHRpY2UgNC4wMSB3aXRob3V0IGJyb2tlbgorICogYnJlYWsgc2lnbmFsIGhhbmRsaW5nLgorICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKy8qCisgKiBOYW1lcyBmb3IgdGhlIEVYUkMsIEhFTFAgYW5kIHRlbXBvcmFyeSBmaWxlcy4KKyAqIFNvbWUgb2YgdGhlc2UgbWF5IGhhdmUgYmVlbiBkZWZpbmVkIGluIHRoZSBtYWtlZmlsZS4KKyAqLworI2lmbmRlZiBTWVNfVklNUkNfRklMRQorIyBkZWZpbmUgU1lTX1ZJTVJDX0ZJTEUgIiRWSU0vdmltcmMiCisjZW5kaWYKKyNpZm5kZWYgU1lTX0dWSU1SQ19GSUxFCisjIGRlZmluZSBTWVNfR1ZJTVJDX0ZJTEUgIiRWSU0vZ3ZpbXJjIgorI2VuZGlmCisjaWZuZGVmIFNZU19NRU5VX0ZJTEUKKyMgZGVmaW5lIFNZU19NRU5VX0ZJTEUJIiRWSU1SVU5USU1FL21lbnUudmltIgorI2VuZGlmCisjaWZuZGVmIERGTFRfSEVMUEZJTEUKKyMgZGVmaW5lIERGTFRfSEVMUEZJTEUJIiRWSU1SVU5USU1FL2RvYy9oZWxwLnR4dCIKKyNlbmRpZgorI2lmbmRlZiBGSUxFVFlQRV9GSUxFCisjIGRlZmluZSBGSUxFVFlQRV9GSUxFCSJmaWxldHlwZS52aW0iCisjZW5kaWYKKyNpZm5kZWYgRlRQTFVHSU5fRklMRQorIyBkZWZpbmUgRlRQTFVHSU5fRklMRQkiZnRwbHVnaW4udmltIgorI2VuZGlmCisjaWZuZGVmIElOREVOVF9GSUxFCisjIGRlZmluZSBJTkRFTlRfRklMRQkiaW5kZW50LnZpbSIKKyNlbmRpZgorI2lmbmRlZiBGVE9GRl9GSUxFCisjIGRlZmluZSBGVE9GRl9GSUxFCSJmdG9mZi52aW0iCisjZW5kaWYKKyNpZm5kZWYgRlRQTFVHT0ZfRklMRQorIyBkZWZpbmUgRlRQTFVHT0ZfRklMRQkiZnRwbHVnb2YudmltIgorI2VuZGlmCisjaWZuZGVmIElORE9GRl9GSUxFCisjIGRlZmluZSBJTkRPRkZfRklMRQkiaW5kb2ZmLnZpbSIKKyNlbmRpZgorI2lmbmRlZiBTWU5UQVhfRk5BTUUKKyMgZGVmaW5lIFNZTlRBWF9GTkFNRQkiJFZJTVJVTlRJTUUvc3ludGF4LyVzLnZpbSIKKyNlbmRpZgorCisjaWZuZGVmIFVTUl9FWFJDX0ZJTEUKKyMgZGVmaW5lIFVTUl9FWFJDX0ZJTEUJInM6LmV4cmMiCisjZW5kaWYKKyNpZm5kZWYgVVNSX0VYUkNfRklMRTIKKyMgZGVmaW5lIFVTUl9FWFJDX0ZJTEUyCSJob21lOi5leHJjIgorI2VuZGlmCisKKyNpZm5kZWYgVVNSX1ZJTVJDX0ZJTEUKKyMgZGVmaW5lIFVTUl9WSU1SQ19GSUxFCSJzOi52aW1yYyIKKyNlbmRpZgorI2lmbmRlZiBVU1JfVklNUkNfRklMRTIKKyMgZGVmaW5lIFVTUl9WSU1SQ19GSUxFMiAiaG9tZToudmltcmMiCisjZW5kaWYKKyNpZm5kZWYgVVNSX1ZJTVJDX0ZJTEUzCisjIGRlZmluZSBVU1JfVklNUkNfRklMRTMgIiRWSU0vLnZpbXJjIgorI2VuZGlmCisjaWZuZGVmIEVWSU1fRklMRQorIyBkZWZpbmUgRVZJTV9GSUxFCSIkVklNUlVOVElNRS9ldmltLnZpbSIKKyNlbmRpZgorCisjaWZuZGVmIFVTUl9HVklNUkNfRklMRQorIyBkZWZpbmUgVVNSX0dWSU1SQ19GSUxFICJzOi5ndmltcmMiCisjZW5kaWYKKyNpZm5kZWYgVVNSX0dWSU1SQ19GSUxFMgorIyBkZWZpbmUgVVNSX0dWSU1SQ19GSUxFMiAiaG9tZTouZ3ZpbXJjIgorI2VuZGlmCisjaWZuZGVmIFVTUl9HVklNUkNfRklMRTMKKyMgZGVmaW5lIFVTUl9HVklNUkNfRklMRTMgIiRWSU0vLmd2aW1yYyIKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9WSU1JTkZPCisjaWZuZGVmIFZJTUlORk9fRklMRQorIyBkZWZpbmUgVklNSU5GT19GSUxFCSJzOi52aW1pbmZvIgorI2VuZGlmCisjZW5kaWYgLyogRkVBVF9WSU1JTkZPICovCisKKyNpZm5kZWYgRVhSQ19GSUxFCisjIGRlZmluZSBFWFJDX0ZJTEUJIi5leHJjIgorI2VuZGlmCisKKyNpZm5kZWYgVklNUkNfRklMRQorIyBkZWZpbmUgVklNUkNfRklMRQkiLnZpbXJjIgorI2VuZGlmCisKKyNpZm5kZWYgR1ZJTVJDX0ZJTEUKKyMgZGVmaW5lIEdWSU1SQ19GSUxFCSIuZ3ZpbXJjIgorI2VuZGlmCisKKyNpZm5kZWYgREZMVF9CRElSCisjIGRlZmluZSBERkxUX0JESVIJIi4sdDoiCQkvKiBkZWZhdWx0IGZvciAnYmFja3VwZGlyJyAqLworI2VuZGlmCisKKyNpZm5kZWYgREZMVF9ESVIKKyMgZGVmaW5lIERGTFRfRElSCSIuLHQ6IgkJLyogZGVmYXVsdCBmb3IgJ2RpcmVjdG9yeScgKi8KKyNlbmRpZgorCisjaWZuZGVmIERGTFRfVkRJUgorIyBkZWZpbmUgREZMVF9WRElSCSIkVklNL3ZpbWZpbGVzL3ZpZXciCS8qIGRlZmF1bHQgZm9yICd2aWV3ZGlyJyAqLworI2VuZGlmCisKKyNpZm5kZWYgREZMVF9NQVhNRU0KKyMgZGVmaW5lIERGTFRfTUFYTUVNCTI1NgkJLyogdXNlIHVwIHRvIDI1NktieXRlIGZvciBidWZmZXIgKi8KKyNlbmRpZgorI2lmbmRlZiBERkxUX01BWE1FTVRPVAorIyBkZWZpbmUgREZMVF9NQVhNRU1UT1QJMAkJLyogZGVjaWRlIGluIHNldF9pbml0ICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoU0FTQykKK2ludCBzZXRlbnYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworI2VuZGlmCisKKyNkZWZpbmUgbWNoX3JlbW92ZSh4KSByZW1vdmUoKGNoYXIgKikoeCkpCisjZGVmaW5lIG1jaF9yZW5hbWUoc3JjLCBkc3QpIHJlbmFtZShzcmMsIGRzdCkKKyNkZWZpbmUgbWNoX2NoZGlyKHMpIGNoZGlyKHMpCisjZGVmaW5lIHZpbV9ta2Rpcih4LCB5KSBtY2hfbWtkaXIoeCkKZGlmZiAtLWdpdCBhL3NyYy9vc19iZW9zLmMgYi9zcmMvb3NfYmVvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTJjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3NfYmVvcy5jCkBAIC0wLDAgKzEsMjA2IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJIEJlQm94IHBvcnQgQ29weXJpZ2h0IDE5OTcgYnkgT2xhZiBTZWliZXJ0LgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworLyoKKyAqIG9zX2Jlb3MuYyAgQWRkaXRpb25hbCBzdHVmZiBmb3IgQmVPUyAocmVzdCBpcyBpbiBvc191bml4LmMpCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPGtlcm5lbC9PUy5oPgorI2luY2x1ZGUgInZpbS5oIgorCisjaWYgVVNFX1RIUkVBRF9GT1JfSU5QVVRfV0lUSF9USU1FT1VUCisKKyNpZmRlZiBQUk9UTwkgICAgLyogbWFraW5nIHByb3RvdHlwZXMgb24gVW5peCAqLworI2RlZmluZSBzZW1faWQgaW50CisjZGVmaW5lIHRocmVhZF9pZCBpbnQKKyNlbmRpZgorCitjaGFyX3UgY2hhcmJ1ZjsKK3NpZ25lZCBjaGFyIGNoYXJjb3VudDsKK3NlbV9pZCBjaGFyYWN0ZXJfcHJlc2VudDsKK3NlbV9pZCBjaGFyYWN0ZXJfd2FudGVkOwordGhyZWFkX2lkIHJlYWRfdGhyZWFkX2lkOworCisjZGVmaW5lIFRSWV9BQk9SVAkwCS8qIFRoaXMgY29kZSBkb2VzIG5vdCB3b3JrIHNvIHR1cm4gaXQgb2ZmLiAqLworCisjaWYgVFJZX0FCT1JUCisgICAgc3RhdGljIHZvaWQKK21vc3RseV9pZ25vcmUoaW50IHNpZykKK3sKK30KKyNlbmRpZgorCisgICAgc3RhdGljIGxvbmcKK3JlYWRfdGhyZWFkKHZvaWQgKmR1bW15KQoreworICAgIHNpZ25hbChTSUdJTlQsIFNJR19JR04pOworICAgIHNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKKyNpZiBUUllfQUJPUlQKKyAgICBzaWduYWwoU0lHVVNSMSwgbW9zdGx5X2lnbm9yZSk7CisjZW5kaWYKKworICAgIGZvciAoOzspIHsKKwlpZiAoYWNxdWlyZV9zZW0oY2hhcmFjdGVyX3dhbnRlZCkgIT0gQl9OT19FUlJPUikKKwkgICAgYnJlYWs7CisJY2hhcmNvdW50ID0gcmVhZChyZWFkX2NtZF9mZCwgJmNoYXJidWYsIDEpOworCXJlbGVhc2Vfc2VtKGNoYXJhY3Rlcl9wcmVzZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworICAgIHZvaWQKK2Jlb3NfY2xlYW51cF9yZWFkX3RocmVhZCh2b2lkKQoreworICAgIGlmIChjaGFyYWN0ZXJfcHJlc2VudCA+IDApCisJZGVsZXRlX3NlbShjaGFyYWN0ZXJfcHJlc2VudCk7CisgICAgY2hhcmFjdGVyX3ByZXNlbnQgPSAwOworICAgIGlmIChyZWFkX3RocmVhZF9pZCA+IDApCisJa2lsbF90aHJlYWQocmVhZF90aHJlYWRfaWQpOworICAgIHJlYWRfdGhyZWFkX2lkID0gMDsKK30KKworI2VuZGlmCisKKy8qCisgKiBzZWxlY3QoKSBlbXVsYXRpb24uIEhvcGVmdWxseSwgaW4gRFI5IHRoZXJlIHdpbGwgYmUgc29tZXRoaW5nCisgKiB1c2VmdWwgc3VwcGxpZWQgYnkgdGhlIHN5c3RlbS4gLi4uIEFsYXMsIG5vdC4gTm90IGluIEFBUFIsIG5vcgorICogaW4gUFIgb3IgZXZlbiBQUjIuLi4gUjMgdGhlbiBtYXliZT8gSSBkb24ndCB0aGluayBzbyEKKyAqLworCisgICAgaW50CitiZW9zX3NlbGVjdChpbnQgbmJpdHMsCisgICAgICAgc3RydWN0IGZkX3NldCAqcmJpdHMsCisgICAgICAgc3RydWN0IGZkX3NldCAqd2JpdHMsCisgICAgICAgc3RydWN0IGZkX3NldCAqZWJpdHMsCisgICAgICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQpCit7CisgICAgYmlndGltZV90IHRtbzsKKworICAgIGlmIChuYml0cyA9PSAwKSB7CisJLyogc2VsZWN0IGlzIHB1cmVseSBiZWluZyB1c2VkIGZvciBkZWxheSAqLworCXNub296ZSh0aW1lb3V0LT50dl9zZWMgKiAxZTYgKyB0aW1lb3V0LT50dl91c2VjKTsKKwlyZXR1cm4gMDsKKyAgICB9CisjaWYgMAorICAgIC8qCisgICAgICogVGhpcyBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgZWl0aGVyLiBSZWFkcyBoZXJlIGFyZSBub3Qgc3VwcG9zZWQgdG8KKyAgICAgKiBibG9jayBpbmRlZmluaXRlbHksIHlldCB0aGV5IGRvLiBUaGlzIGlzIG1vc3QgYW5ub3lpbmcuCisgICAgICovCisgICAgaWYgKEZEX0lTU0VUKDAsIHJiaXRzKSkgeworCWNoYXIgY2J1ZlsxXTsKKwlpbnQgY291bnQ7CisJc3RydWN0IHRlcm1pb3MgdG9sZDsKKwlzdHJ1Y3QgdGVybWlvcyB0bmV3OworCXRjZ2V0YXR0cigwLCAmdG9sZCk7CisJdG5ldyA9IHRvbGQ7CisJdG5ldy5jX2xmbGFnICY9IH5JQ0FOT047CisJdG5ldy5jX2NjW1ZNSU5dID0gMDsKKwl0bmV3LmNfY2NbVlRJTUVdID0gdGltZW91dC0+dHZfc2VjICogMTAgKyB0aW1lb3V0LT50dl91c2VjIC8gMTAwMDAwOworCXRjc2V0YXR0cigwLCBUQ1NBTk9XLCAmdG5ldyk7CisKKwljb3VudCA9IHJlYWQoMCwgJmNidWYsIHNpemVvZihjYnVmKSk7CisJdGNzZXRhdHRyKDAsIFRDU0FOT1csICZ0b2xkKTsKKwlpZiAoY291bnQgPiAwKSB7CisJICAgIGFkZF90b19pbnB1dF9idWYoJmNidWZbMF0sIGNvdW50KTsKKwkgICAgcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworICAgIH0KKyNlbmRpZgorI2lmIFVTRV9USFJFQURfRk9SX0lOUFVUX1dJVEhfVElNRU9VVAorICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlIG9wZXJhdGlvbiBpcyByZWFsbHkgb24gc3RkaW4uLi4KKyAgICAgKi8KKyAgICBpZiAoRkRfSVNTRVQocmVhZF9jbWRfZmQsIHJiaXRzKSkKKyAgICB7CisJaW50IGFjcXVpcmVkOworCisJLyoKKwkgKiBJcyB0aGlzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2g/CisJICogVGhlbiBzdGFydCB1cCB0aGUgdGhyZWFkIGFuZCBpbml0aWFsaXNlIHRoZSBzZW1hcGhvcmVzLgorCSAqLworCWlmIChjaGFyYWN0ZXJfcHJlc2VudCA9PSAwKSB7CisJICAgIGNoYXJhY3Rlcl9wcmVzZW50ID0gY3JlYXRlX3NlbSgwLCAidmltIGNoYXJhY3Rlcl9wcmVzZW50Iik7CisJICAgIGNoYXJhY3Rlcl93YW50ZWQgPSBjcmVhdGVfc2VtKDEsICJ2aW0gY2hhcmFjdGVyX3dhbnRlZCIpOworCSAgICByZWFkX3RocmVhZF9pZCA9IHNwYXduX3RocmVhZChyZWFkX3RocmVhZCwgInZpbSBhc3luYyByZWFkIiwKKwkJICAgIEJfTk9STUFMX1BSSU9SSVRZLCBOVUxMKTsKKwkgICAgYXRleGl0KGJlb3NfY2xlYW51cF9yZWFkX3RocmVhZCk7CisJICAgIHJlc3VtZV90aHJlYWQocmVhZF90aHJlYWRfaWQpOworCX0KKworCS8qIHRpbWVvdXQgPT0gTlVMTCBtZWFucyAiaW5kZWZpbml0ZWx5IiAqLworCWlmICh0aW1lb3V0KSB7CisJICAgIHRtbyA9IHRpbWVvdXQtPnR2X3NlYyAqIDFlNiArIHRpbWVvdXQtPnR2X3VzZWM7CisJICAgIC8qIDAgbWVhbnMgImRvbid0IHdhaXQsIHdoaWNoIGlzIGltcG9zc2libGUgdG8gZG8gZXhhY3RseS4gKi8KKwkgICAgaWYgKHRtbyA9PSAwKQorCQl0bW8gPSAxLjA7CisJfQorI2lmIFRSWV9BQk9SVAorCXJlbGVhc2Vfc2VtKGNoYXJhY3Rlcl93YW50ZWQpOworI2VuZGlmCisJaWYgKHRpbWVvdXQpCisJICAgIGFjcXVpcmVkID0gYWNxdWlyZV9zZW1fZXRjKGNoYXJhY3Rlcl9wcmVzZW50LCAxLCBCX1RJTUVPVVQsIHRtbyk7CisJZWxzZQorCSAgICBhY3F1aXJlZCA9IGFjcXVpcmVfc2VtKGNoYXJhY3Rlcl9wcmVzZW50KTsKKwlpZiAoYWNxdWlyZWQgPT0gQl9OT19FUlJPUikgeworCSAgICBpZiAoY2hhcmNvdW50ID4gMCkgeworCQlhZGRfdG9faW5wdXRfYnVmKCZjaGFyYnVmLCAxKTsKKyNpZiAhVFJZX0FCT1JUCisJCXJlbGVhc2Vfc2VtKGNoYXJhY3Rlcl93YW50ZWQpOworI2VuZGlmCisKKwkJcmV0dXJuIDE7CisJICAgIH0gZWxzZSB7CisjaWYgIVRSWV9BQk9SVAorCQlyZWxlYXNlX3NlbShjaGFyYWN0ZXJfd2FudGVkKTsKKyNlbmRpZgorCisJCXJldHVybiAwOworCSAgICB9CisJfQorI2lmIFRSWV9BQk9SVAorCWVsc2UgeworCSAgICAvKgorCSAgICAgKiBUaW1lb3V0IG9jY3VycmVkLiBCcmVhayB0aGUgcmVhZCgpIGNhbGwgYnkgc2VuZGluZworCSAgICAgKiBhIHNpZ25hbC4gUHJvYmxlbTogaXQgbWF5IGJlIGp1c3QgcmVhZCgpaW5nIGl0IG5vdy4KKwkgICAgICogVGhlcmVmb3JlIHdlIHN0aWxsIGhhdmUgdG8gZmluaXNoIHRoZSBoYW5kc2hha2Ugd2l0aAorCSAgICAgKiB0aGUgdGhyZWFkIGFuZCBtYXliZSByZW1lbWJlciB0aGUgY2hhcmFjdGVyLgorCSAgICAgKi8KKwkgICAga2lsbChyZWFkX3RocmVhZF9pZCwgU0lHVVNSMSk7CisJICAgIC8qCisJICAgICAqCUlmIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQsIGRvbid0IGhhbmcgbm93LgorCSAgICAgKiAoV2Ugd2lsbCBtb3N0IGxpa2VseSBoYW5nIGxhdGVyIGFueXdheS4uLikKKwkgICAgICovCisJICAgIGlmIChhY3F1aXJlZCA9PSBCX1RJTUVEX09VVCkKKwkJYWNxdWlyZV9zZW0oY2hhcmFjdGVyX3ByZXNlbnQpOworCSAgICBpZiAoY2hhcmNvdW50ID4gMCkgeworCQlhZGRfdG9faW5wdXRfYnVmKCZjaGFyYnVmLCAxKTsKKwkJcmV0dXJuIDE7CisJICAgIH0KKwkgICAgcmV0dXJuIDA7CisJfQorI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyNpZiBGRUFUX0dVSV9CRU9TCisgICAgLyoKKyAgICAgKiBJZiBub3QgcmVhZGluZyBmcm9tIHRlcm1pbmFsLCBwcmV0ZW5kIHRoZXJlIGlzIGlucHV0LgorICAgICAqIFRoaXMgbWFrZXMgdGhlIHB0eSByZWFkaW5nIChmb3IgdGhlIEdVSSkgIndvcmsiIGZvcgorICAgICAqIDohbHMgYnV0IG5vdCBmb3IgOnIgIWxzIC4uLiB3ZWlyZC4KKyAgICAgKi8KKyAgICBpZiAoZ3VpLmluX3VzZSAmJiBTdGF0ZSA9PSBFWFRFUk5DTUQpCisJcmV0dXJuIDE7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL29zX2Jlb3MuaCBiL3NyYy9vc19iZW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwODM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc19iZW9zLmgKQEAgLTAsMCArMSwyNSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoJCSBCZUJveCBwb3J0IGJ5IE9sYWYgU2VpYmVydAorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworLyoKKyAqIG9zX2Jlb3MuaAorICovCisKKyN1bmRlZiBVU0VfU1lTVEVNCisjZGVmaW5lIFVTRV9USFJFQURfRk9SX0lOUFVUX1dJVEhfVElNRU9VVAkxCisjZGVmaW5lIFVTRV9URVJNX0NPTlNPTEUKKworI2RlZmluZSBIQVZFX0RST1BfRklMRQorCisjdW5kZWYJQkVPU19EUjgKKyNkZWZpbmUJQkVPU19QUl9PUl9CRVRURVIKKworLyogc2VsZWN0IGVtdWxhdGlvbiAqLworCisjaW5jbHVkZSA8bmV0L3NvY2tldC5oPgkJLyogZm9yIHR5cGVkZWZzIGFuZCAjZGVmaW5lcyBvbmx5ICovCmRpZmYgLS1naXQgYS9zcmMvb3NfYmVvcy5yc3JjIGIvc3JjL29zX2Jlb3MucnNyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjQ0M2NkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX2Jlb3MucnNyYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvb3NfZG9zLmggYi9zcmMvb3NfZG9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzY2RlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc19kb3MuaApAQCAtMCwwICsxLDEyNSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworLyoKKyAqIENvbW1vbiBNUy1ET1MgYW5kIFdpbjMyIChXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDk1KSBkZWZpbmVzLgorICoKKyAqIE5hbWVzIGZvciB0aGUgRVhSQywgSEVMUCBhbmQgdGVtcG9yYXJ5IGZpbGVzLgorICogU29tZSBvZiB0aGVzZSBtYXkgaGF2ZSBiZWVuIGRlZmluZWQgaW4gdGhlIG1ha2VmaWxlIG9yIGZlYXR1cmUuaC4KKyAqLworCisjaWZuZGVmIFNZU19WSU1SQ19GSUxFCisjIGRlZmluZSBTWVNfVklNUkNfRklMRQkJIiRWSU1cXHZpbXJjIgorI2VuZGlmCisjaWZuZGVmIFVTUl9WSU1SQ19GSUxFCisjIGRlZmluZSBVU1JfVklNUkNfRklMRQkJIiRIT01FXFxfdmltcmMiCisjZW5kaWYKKyNpZm5kZWYgVVNSX1ZJTVJDX0ZJTEUyCisjIGRlZmluZSBVU1JfVklNUkNfRklMRTIJIiRWSU1cXF92aW1yYyIKKyNlbmRpZgorI2lmbmRlZiBFVklNX0ZJTEUKKyMgZGVmaW5lIEVWSU1fRklMRQkJIiRWSU1SVU5USU1FXFxldmltLnZpbSIKKyNlbmRpZgorCisjaWZuZGVmIFVTUl9FWFJDX0ZJTEUKKyMgZGVmaW5lIFVTUl9FWFJDX0ZJTEUJCSIkSE9NRVxcX2V4cmMiCisjZW5kaWYKKyNpZm5kZWYgVVNSX0VYUkNfRklMRTIKKyMgZGVmaW5lIFVTUl9FWFJDX0ZJTEUyCQkiJFZJTVxcX2V4cmMiCisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJCisjIGlmbmRlZiBTWVNfR1ZJTVJDX0ZJTEUKKyMgIGRlZmluZSBTWVNfR1ZJTVJDX0ZJTEUJIiRWSU1cXGd2aW1yYyIKKyMgZW5kaWYKKyMgaWZuZGVmIFVTUl9HVklNUkNfRklMRQorIyAgZGVmaW5lIFVTUl9HVklNUkNfRklMRQkiJEhPTUVcXF9ndmltcmMiCisjIGVuZGlmCisjIGlmbmRlZiBVU1JfR1ZJTVJDX0ZJTEUyCisjICBkZWZpbmUgVVNSX0dWSU1SQ19GSUxFMgkiJFZJTVxcX2d2aW1yYyIKKyMgZW5kaWYKKyMgaWZuZGVmIFNZU19NRU5VX0ZJTEUKKyMgIGRlZmluZSBTWVNfTUVOVV9GSUxFCQkiJFZJTVJVTlRJTUVcXG1lbnUudmltIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU1lTX09QVFdJTl9GSUxFCisjIGRlZmluZSBTWVNfT1BUV0lOX0ZJTEUJIiRWSU1SVU5USU1FXFxvcHR3aW4udmltIgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1ZJTUlORk8KKyMgaWZuZGVmIFZJTUlORk9fRklMRQorIyAgZGVmaW5lIFZJTUlORk9fRklMRQkJIiRIT01FXFxfdmltaW5mbyIKKyMgZW5kaWYKKyMgaWZuZGVmIFZJTUlORk9fRklMRTIKKyMgIGRlZmluZSBWSU1JTkZPX0ZJTEUyCQkiJFZJTVxcX3ZpbWluZm8iCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBWSU1SQ19GSUxFCisjIGRlZmluZSBWSU1SQ19GSUxFCSJfdmltcmMiCisjZW5kaWYKKworI2lmbmRlZiBFWFJDX0ZJTEUKKyMgZGVmaW5lIEVYUkNfRklMRQkiX2V4cmMiCisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJCisjIGlmbmRlZiBHVklNUkNfRklMRQorIyAgZGVmaW5lIEdWSU1SQ19GSUxFCSJfZ3ZpbXJjIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgREZMVF9IRUxQRklMRQorIyBkZWZpbmUgREZMVF9IRUxQRklMRQkiJFZJTVJVTlRJTUVcXGRvY1xcaGVscC50eHQiCisjZW5kaWYKKworI2lmbmRlZiBGSUxFVFlQRV9GSUxFCisjIGRlZmluZSBGSUxFVFlQRV9GSUxFCSJmaWxldHlwZS52aW0iCisjZW5kaWYKKyNpZm5kZWYgRlRQTFVHSU5fRklMRQorIyBkZWZpbmUgRlRQTFVHSU5fRklMRQkiZnRwbHVnaW4udmltIgorI2VuZGlmCisjaWZuZGVmIElOREVOVF9GSUxFCisjIGRlZmluZSBJTkRFTlRfRklMRQkiaW5kZW50LnZpbSIKKyNlbmRpZgorI2lmbmRlZiBGVE9GRl9GSUxFCisjIGRlZmluZSBGVE9GRl9GSUxFCSJmdG9mZi52aW0iCisjZW5kaWYKKyNpZm5kZWYgRlRQTFVHT0ZfRklMRQorIyBkZWZpbmUgRlRQTFVHT0ZfRklMRQkiZnRwbHVnb2YudmltIgorI2VuZGlmCisjaWZuZGVmIElORE9GRl9GSUxFCisjIGRlZmluZSBJTkRPRkZfRklMRQkiaW5kb2ZmLnZpbSIKKyNlbmRpZgorCisjaWZuZGVmIFNZTlRBWF9GTkFNRQorIyBkZWZpbmUgU1lOVEFYX0ZOQU1FCSIkVklNUlVOVElNRVxcc3ludGF4XFwlcy52aW0iCisjZW5kaWYKKworI2lmbmRlZiBERkxUX0JESVIKKyMgZGVmaW5lIERGTFRfQkRJUgkiLixjOlxcdG1wLGM6XFx0ZW1wIgkvKiBkZWZhdWx0IGZvciAnYmFja3VwZGlyJyAqLworI2VuZGlmCisKKyNpZm5kZWYgREZMVF9WRElSCisjIGRlZmluZSBERkxUX1ZESVIJIiRWSU0vdmltZmlsZXMvdmlldyIJLyogZGVmYXVsdCBmb3IgJ3ZpZXdkaXInICovCisjZW5kaWYKKworI2lmbmRlZiBERkxUX0RJUgorIyBkZWZpbmUgREZMVF9ESVIJIi4sYzpcXHRtcCxjOlxcdGVtcCIJLyogZGVmYXVsdCBmb3IgJ2RpcmVjdG9yeScgKi8KKyNlbmRpZgorCisjZGVmaW5lIERGTFRfRVJST1JGSUxFCQkiZXJyb3JzLmVyciIKKyNkZWZpbmUgREZMVF9SVU5USU1FUEFUSAkiJEhPTUUvdmltZmlsZXMsJFZJTS92aW1maWxlcywkVklNUlVOVElNRSwkVklNL3ZpbWZpbGVzL2FmdGVyLCRIT01FL3ZpbWZpbGVzL2FmdGVyIgorCisjZGVmaW5lIENBU0VfSU5TRU5TSVRJVkVfRklMRU5BTUUgICAvKiBpZ25vcmUgY2FzZSB3aGVuIGNvbXBhcmluZyBmaWxlIG5hbWVzICovCisjZGVmaW5lIFNQQUNFX0lOX0ZJTEVOQU1FCisjZGVmaW5lIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorI2RlZmluZSBVU0VfQ1JOTAkJLyogbGluZXMgZW5kIGluIENSLU5MIGluc3RlYWQgb2YgTkwgKi8KKyNkZWZpbmUgSEFWRV9EVVAJCS8qIGhhdmUgZHVwKCkgKi8KKyNkZWZpbmUgSEFWRV9TVF9NT0RFCQkvKiBoYXZlIHN0YXQuc3RfbW9kZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zX21hYy5idWlsZCBiL3NyYy9vc19tYWMuYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0YzAzNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc19tYWMuYnVpbGQKQEAgLTAsMCArMSw5MSBAQAorc2V0IDY4a1RhcmdldCAiNjhrIgorc2V0IHBwY1RhcmdldCAicHBjIgorc2V0IGNhcmJvblRhcmdldCAiY2FyYm9uIgorc2V0IHZpbVRhcmdldHMgImBnZXRsaXN0aXRlbSAtbSAiIFNlbGVjdCB0aGUgdmltIHRhcmdldCBwbGF0Zm9ybSIgLWMgLXEgIns2OGtUYXJnZXR9IiAie3BwY1RhcmdldH0iICJ7Y2FyYm9uVGFyZ2V0fSJgIgoraWYgISJ7dmltVGFyZ2V0c30iCisgICBlY2hvICJObyBNYWtlZmlsZSBjcmVhdGVkIgorICAgZXhpdCAwCitlbmQKKyMKK3NldCBnZW5lcmFsU291cmNlcyAiYnVmZmVyLmMgY2hhcnNldC5jIGRpZmYuYyBkaWdyYXBoLmMgZWRpdC5jIGV2YWwuYyBleF9jbWRzLmMgZXhfY21kczIuYyBleF9kb2NtZC5jIGV4X2V2YWwuYyBleF9nZXRsbi5jIGZpbGVpby5jIGZvbGQuYyBnZXRjaGFyLmMgZ3VpLmMgZ3VpX21hYy5jIGlmX2NzY29wZS5jIG1haW4uYyBtYXJrLmMgbWVtZmlsZS5jIG1lbWxpbmUuYyBtZW51LmMgbWVzc2FnZS5jIG1pc2MxLmMgbWlzYzIuYyBtb3ZlLmMgbWJ5dGUuYyBub3JtYWwuYyBvcHMuYyBvcHRpb24uYyBvc19tYWMuYyBwdHkuYyBxdWlja2ZpeC5jIHJlZ2V4cC5jIHNjcmVlbi5jIHNlYXJjaC5jIHRhZy5jIHRlcm0uYyB0ZXJtbGliLmMgdWkuYyB1bmRvLmMgdmVyc2lvbi5jIHdpbmRvdy5jIgorc2V0IGdlbmVyYWxPcHRzICItYXBwIC1jICdWSU0hJyAtdCAnQVBQTCcgLWkgOnByb3RvIgorc2V0IGdlbmVyYWxDT3B0cyAiLXcgMiwzNSAtZW51bSBpbnQiCitzZXQgZ2VuZXJhbExPcHRzICItbWYgLWQiCitzZXQgZ2VuZXJhbExpYnMgIiIKKyMKKyMKK3NldCA2OGtTb3VyY2VzICIiCitzZXQgNjhrT3B0cyAiLW1vZGVsIGZhciIKK3NldCA2OGtDT3B0cyAiIgorc2V0IDY4a0xPcHRzICIiCitzZXQgNjhrTGlicyAiIgorIworc2V0IHBwY1NvdXJjZXMgInN5bnRheC5jIgorc2V0IHBwY09wdHMgIi1wb3dlcnBjIgorc2V0IHBwY0NPcHRzICIiCitzZXQgcHBjTE9wdHMgIntTaGFyZWRMaWJyYXJpZXN9QXBwZWFyYW5jZUxpYiIKK3NldCBwcGNMaWJzICJ7U2hhcmVkTGlicmFyaWVzfUNvbnRleHR1YWxNZW51IgorIworc2V0IGNhcmJvblNvdXJjZXMgIiIKK3NldCBjYXJib25PcHRzICItY2FyYm9uIgorc2V0IGNhcmJvbkNPcHRzICItZCBUQVJHRVRfQVBJX01BQ19DQVJCT04iCitzZXQgY2FyYm9uTE9wdHMgIiIKK3NldCBjYXJib25MaWJzICJ7U2hhcmVkTGlicmFyaWVzfUNhcmJvbkxpYiIKKyMKK2ZvciB2VGFyZ2V0IGluIHt2aW1UYXJnZXRzfQorICAgc2V0IHZTb3VyY2VzICJ7Z2VuZXJhbFNvdXJjZXN9IgorICAgc2V0IHZMaWJzICJ7Z2VuZXJhbExpYnN9IgorICAgc2V0IHZPcHRzICJ7Z2VuZXJhbE9wdHN9IgorICAgc2V0IHZDT3B0cyAie2dlbmVyYWxDT3B0c30iCisgICBzZXQgdkxPcHRzICJ7Z2VuZXJhbExPcHRzfSIKKyAgIHNldCBwcGMgIiIKKyAgIGlmICJ7dlRhcmdldH0iID09ICJ7NjhrVGFyZ2V0fSIKKyAgICAgIHNldCB2U291cmNlcyAie3ZTb3VyY2VzfSB7NjhrU291cmNlc30iCisgICAgICBzZXQgdk9wdHMgInt2T3B0c30gezY4a09wdHN9IgorICAgICAgc2V0IHZMaWJzICJ7dkxpYnN9IHs2OGtMaWJzfSIKKyAgICAgIGlmICAiezY4a0NPcHRzfSIKKyAgICAgICAgIHNldCB2Q09wdHMgInt2Q09wdHN9IHs2OGtDT3B0c30iCisgICAgICBlbmQKKyAgICAgIGlmICAiezY4a0xPcHRzfSIKKyAgICAgICAgIHNldCB2TE9wdHMgInt2TE9wdHN9IHs2OGtMT3B0c30iCisgICAgICBlbmQKKyAgIGVsc2UKKyAgICAgIHNldCBwcGMgInBwYyIKKyAgICAgIHNldCB2U291cmNlcyAie3ZTb3VyY2VzfSB7cHBjU291cmNlc30iCisgICAgICBzZXQgdk9wdHMgInt2T3B0c30ge3BwY09wdHN9IgorICAgICAgc2V0IHZMaWJzICJ7dkxpYnN9IHtwcGNMaWJzfSIKKyAgICAgIGlmICAie3BwY0NPcHRzfSIKKyAgICAgICAgIHNldCB2Q09wdHMgInt2Q09wdHN9IHtwcGNDT3B0c30iCisgICAgICBlbmQKKyAgICAgIGlmICAie3BwY0xPcHRzfSIKKyAgICAgICAgIHNldCB2TE9wdHMgInt2TE9wdHN9IHtwcGNMT3B0c30iCisgICAgICBlbmQKKyAgICAgIGlmICJ7dlRhcmdldH0iID09ICJ7Y2FyYm9uVGFyZ2V0fSIKKyAgICAgICAgIHNldCB2U291cmNlcyAie3ZTb3VyY2VzfSB7Y2FyYm9uU291cmNlc30iCisgICAgICAgICBzZXQgdkxpYnMgInt2TGlic30ge2NhcmJvbkxpYnN9IgorICAgICAgICAgc2V0IHZPcHRzICJ7dk9wdHN9IHtjYXJib25PcHRzfSIKKyAgICAgICAgIGlmICAie2NhcmJvbkNPcHRzfSIKKyAgICAgICAgICAgIHNldCB2Q09wdHMgInt2Q09wdHN9IHtjYXJib25DT3B0c30iCisgICAgICAgICBlbmQKKyAgICAgICAgIGlmICAie2NhcmJvbkxPcHRzfSIKKyAgICAgICAgICAgIHNldCB2TE9wdHMgInt2TE9wdHN9IHtjYXJib25MT3B0c30iCisgICAgICAgICBlbmQKKyAgICAgIGVuZAorICAgZW5kCisgICBzZXQgdk9EaXIgOm9iai17dlRhcmdldH06CisgICBpZiAhImBleGlzdHMgLWQge3ZPZGlyfWAiCisgICAgICBuZXdGb2xkZXIge3ZPRGlyfQorICAgZW5kCisgICBzZXQgdkFwcCB2aW0te3ZUYXJnZXR9CisgICBpZiAie3ZDT3B0c30iCisgICAgICBzZXQgdk9wdHMgInt2T3B0c30gLXtwcGN9Q09wdGlvbnMgJ3t2Q09wdHN9JyIKKyAgIGVuZAorICAgaWYgInt2TE9wdHN9IgorICAgICAgc2V0IHZPcHRzICJ7dk9wdHN9IC17cHBjfUxpbmtPcHRpb25zICd7dkxPcHRzfSciCisgICBlbmQKKyAgIHNldCB2T3B0cyAie3ZPcHRzfSAtb2JqZGlyIHt2T0Rpcn0iCisgICBjcmVhdGVtYWtlIHt2QXBwfSB7dk9wdHN9IHt2U291cmNlc30ge3ZMaWJzfQorICAgaWYgIXtTdGF0dXN9CisgICAgICBlY2hvICJNYWtlZmlsZSBmb3Ige3ZBcHB9IHN1Y2Nlc3NmdWxseSBjcmVhdGVkIgorICAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3NyYy9vc19tYWMuYyBiL3NyYy9vc19tYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjZhNzZjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX21hYy5jCkBAIC0wLDAgKzEsMTQ1MSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAkJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIG9zX21hYy5jIC0tIGNvZGUgZm9yIHRoZSBNYWNPUworICoKKyAqIFRoaXMgZmlsZSBpcyBtYWlubHkgYmFzZWQgb24gb3NfdW5peC5jLgorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmIGRlZmluZWQoX19NUkNfXykgfHwgZGVmaW5lZChfX1NDX18pIC8qIGZvciBBcHBsZSBNUFcgQ29tcGlsZXJzICovCisKKyNpbmNsdWRlICJTdGFuZGFyZEZpbGUuaCIKKworLyoKKyAqIEltcGxlbWVudHMgdGhlIGNvcnJlc3BvbmRpbmcgdW5peCBmdW5jdGlvbgorICovCisgICAgaW50CitzdGF0KAorICAgIGNoYXIgKnAsCisgICAgc3RydWN0IHN0YXQgKnBfc3QpCit7CisgICAgLyoKKyAgICAgICBUT0RPOiBVc2UgZnVuY3Rpb25zIHdoaWNoIGZpbGwgdGhlIEZpbGVQYXJhbSBzdHJ1Y3QgKEZpbGVzLmgpCisJICAgICBhbmQgY29weSB0aGVzZSBjb250ZW50cyB0byBvdXIgc2VsZi1kZWZpbmVkIHN0YXQgc3RydWN0CisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIGNoYW5nZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICovCisgICAgaW50CittY2hfY2hkaXIoY2hhciAqcF9uYW1lKQoreworI2lmIGRlZmluZWQoX19NUkNfXykgfHwgZGVmaW5lZChfX1NDX18pIC8qIGZvciBBcHBsZSBNUFcgQ29tcGlsZXJzICovCisgICAgLyogVE9ETyAqLworICAgIHJldHVybiBGQUlMOworI2Vsc2UKKyAgICByZXR1cm4gY2hkaXIocF9uYW1lKTsKKyNlbmRpZgorfQorCisKKy8qCisgKiBSZWN1cnNpdmVseSBidWlsZCB1cCBhIGxpc3Qgb2YgZmlsZXMgaW4gImdhcCIgbWF0Y2hpbmcgdGhlIGZpcnN0IHdpbGRjYXJkCisgKiBpbiBgcGF0aCcuICBDYWxsZWQgYnkgbWNoX2V4cGFuZHBhdGgoKS4KKyAqICJwYXRoIiBoYXMgYmFja3NsYXNoZXMgYmVmb3JlIGNoYXJzIHRoYXQgYXJlIG5vdCB0byBiZSBleHBhbmRlZC4KKyAqLworICAgIGludAorbWFjX2V4cGFuZHBhdGgoCisgICAgZ2FycmF5X1QJKmdhcCwKKyAgICBjaGFyX3UJKnBhdGgsCisgICAgaW50CQlmbGFncywJCS8qIEVXXyogZmxhZ3MgKi8KKyAgICBzaG9ydAlzdGFydF9hdCwKKyAgICBzaG9ydAlhc19mdWxsKQoreworICAgIC8qCisgICAgICogVE9ETzoKKyAgICAgKgkJK0dldCBWb2x1bWVzICh3aGVuIGxvb2tpbmcgZm9yIGZpbGVzIGluIGN1cnJlbnQgZGlyKQorICAgICAqCQkrTWFrZSBpdCB3b3JrIHdoZW4gd29ya2luZyBkaXIgbm90IG9uIHNlbGVjdCB2b2x1bWUKKyAgICAgKgkJK0NsZWFudXAKKyAgICAgKi8KKyAgICBzaG9ydAlpbmRleCA9IDE7CisgICAgT1NFcnIJZ0VycjsKKyAgICBjaGFyX3UJZGlybmFtZVsyNTZdOworICAgIGNoYXJfdQljZmlsZW5hbWVbMjU2XTsKKyAgICBsb25nCWRpcklEOworICAgIGNoYXJfdQkqbmV3X25hbWU7CisgICAgQ0luZm9QQlJlYwlnTXlDUEI7CisgICAgSFBhcmFtQmxvY2tSZWMgZ015SFBCbG9jazsKKyAgICBGU1NwZWMJdXNlZERpcjsKKworICAgIGNoYXJfdQkqYnVmOworICAgIGNoYXJfdQkqcCwgKnMsICplLCBkYW55OworICAgIGludAkJc3RhcnRfbGVuLCBjOworICAgIGNoYXJfdQkqcGF0OworICAgIHJlZ21hdGNoX1QJcmVnbWF0Y2g7CisKKyAgICBzdGFydF9sZW4gPSBnYXAtPmdhX2xlbjsKKyAgICBidWYgPSBhbGxvYyhTVFJMRU4ocGF0aCkgKyBCQVNFTkFNRUxFTiArIDUpOy8qIG1ha2Ugcm9vbSBmb3IgZmlsZSBuYW1lICovCisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCXJldHVybiAwOworCisvKgorICogRmluZCB0aGUgZmlyc3QgcGFydCBpbiB0aGUgcGF0aCBuYW1lIHRoYXQgY29udGFpbnMgYSB3aWxkY2FyZC4KKyAqIENvcHkgaXQgaW50byBidWYsIGluY2x1ZGluZyB0aGUgcHJlY2VkaW5nIGNoYXJhY3RlcnMuCisgKi8KKyAgICBwID0gYnVmOworICAgIHMgPSBidWY7CisgICAgZSA9IE5VTEw7CisjaWYgMQorICAgIFNUUk5DUFkoYnVmLCBwYXRoLCBzdGFydF9hdCk7CisgICAgcCArPSBzdGFydF9hdDsKKyAgICBwYXRoICs9IHN0YXJ0X2F0OworI2VuZGlmCisKKyAgICB3aGlsZSAoKnBhdGgpCisgICAgeworCWlmICgqcGF0aCA9PSAnOicpCisJeworCSAgICBpZiAoZSkKKwkJYnJlYWs7CisJICAgIGVsc2UKKwkJcyA9IHAgKyAxOworCX0KKwkvKiBzaG91bGQgdXNlICBXSUxDQVJETElTVCBidXQgd2hhdCBhYm91dCBgICovCisJLyoJICAgIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiKj9be34kIiwgKnBhdGgpICE9IE5VTEwpKi8KKwllbHNlIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKilXSUxEQ0hBUl9MSVNULCAqcGF0aCkgIT0gTlVMTCkKKwkgICAgZSA9IHA7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBpbnQgbGVuID0gKCptYl9wdHIybGVuX2NoZWNrKShwYXRoKTsKKworCSAgICBTVFJOQ1BZKHAsIHBhdGgsIGxlbik7CisJICAgIHAgKz0gbGVuOworCSAgICBwYXRoICs9IGxlbjsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgICpwKysgPSAqcGF0aCsrOworICAgIH0KKyAgICBlID0gcDsKKworICAgIC8qIG5vdyB3ZSBoYXZlIG9uZSB3aWxkY2FyZCBjb21wb25lbnQgYmV0d2VlbiBzIGFuZCBlICovCisgICAgKmUgPSBOVUw7CisKKyNpZiAxCisgICAgZGFueSA9ICpzOworICAgICpzID0gTlVMOworICAgIGJhY2tzbGFzaF9oYWx2ZShidWYpOworICAgICpzID0gZGFueTsKKyNlbmRpZgorCisgICAgLyogY29udmVydCB0aGUgZmlsZSBwYXR0ZXJuIHRvIGEgcmVnZXhwIHBhdHRlcm4gKi8KKyAgICBwYXQgPSBmaWxlX3BhdF90b19yZWdfcGF0KHMsIGUsIE5VTEwsIEZBTFNFKTsKKyAgICBpZiAocGF0ID09IE5VTEwpCisgICAgeworCXZpbV9mcmVlKGJ1Zik7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogY29tcGlsZSB0aGUgcmVnZXhwIGludG8gYSBwcm9ncmFtICovCisgICAgcmVnbWF0Y2gucm1faWMgPSBGQUxTRTsJCQkvKiBEb24ndCBldmVyIGlnbm9yZSBjYXNlICovCisgICAgcmVnbWF0Y2gucmVncHJvZyA9IHZpbV9yZWdjb21wKHBhdCwgUkVfTUFHSUMpOworICAgIHZpbV9mcmVlKHBhdCk7CisKKyAgICBpZiAocmVnbWF0Y2gucmVncHJvZyA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShidWYpOworCXJldHVybiAwOworICAgIH0KKworICAgIC8qIG9wZW4gdGhlIGRpcmVjdG9yeSBmb3Igc2Nhbm5pbmcgKi8KKyAgICBjID0gKnM7CisgICAgKnMgPSBOVUw7CisKKyAgICBpZiAoKmJ1ZiA9PSBOVUwpCisgICAgeworCWFzX2Z1bGwgPSBUUlVFOworI2lmIDAKKwkodm9pZCkgbWNoX2Rpcm5hbWUgKCZkaXJuYW1lWzFdLCAyNTQpOworCWRpcm5hbWVbMF0gPSBTVFJMRU4oJmRpcm5hbWVbMV0pOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisJaWYgKCpidWYgPT0gJzonKSAgLyogcmVsYXRpdmUgcGF0aCAqLworCXsKKwkgICAgKHZvaWQpbWNoX2Rpcm5hbWUoJmRpcm5hbWVbMV0sIDI1NCk7CisJICAgIG5ld19uYW1lID0gY29uY2F0X2ZuYW1lcygmZGlybmFtZVsxXSwgYnVmKzEsIFRSVUUpOworCSAgICBTVFJDUFkoJmRpcm5hbWVbMV0sIG5ld19uYW1lKTsKKwkgICAgZGlybmFtZVswXSA9IFNUUkxFTihuZXdfbmFtZSk7CisJICAgIHZpbV9mcmVlKG5ld19uYW1lKTsKKwl9CisJZWxzZQorCXsKKwkgICAgU1RSQ1BZKCZkaXJuYW1lWzFdLCBidWYpOworCSAgICBiYWNrc2xhc2hfaGFsdmUoJmRpcm5hbWVbMV0pOworCSAgICBkaXJuYW1lWzBdID0gU1RSTEVOKGJ1Zik7CisJfQorICAgIH0KKyAgICAqcyA9IGM7CisKKyAgICBGU01ha2VGU1NwZWMgKDAsIDAsIGRpcm5hbWUsICZ1c2VkRGlyKTsKKworICAgIGdNeUNQQi5kaXJJbmZvLmlvTmFtZVB0ciAgICA9IGRpcm5hbWU7CisgICAgZ015Q1BCLmRpckluZm8uaW9WUmVmTnVtICAgID0gdXNlZERpci52UmVmTnVtOworICAgIGdNeUNQQi5kaXJJbmZvLmlvRkRpckluZGV4ICA9IDA7CisgICAgZ015Q1BCLmRpckluZm8uaW9EckRpcklEICAgID0gMDsKKworICAgIGdFcnIgPSBQQkdldENhdEluZm8oJmdNeUNQQiwgZmFsc2UpOworCisgICAgZ015Q1BCLmRpckluZm8uaW9Db21wbGV0aW9uID0gTlVMTDsKKyAgICBkaXJJRCA9IGdNeUNQQi5kaXJJbmZvLmlvRHJEaXJJRDsKKyAgICBkbworICAgIHsKKwlnTXlDUEIuaEZpbGVJbmZvLmlvRkRpckluZGV4ID0gaW5kZXg7CisJZ015Q1BCLmhGaWxlSW5mby5pb0RpcklEICAgICA9IGRpcklEOworCisJZ0VyciA9IFBCR2V0Q2F0SW5mbygmZ015Q1BCLGZhbHNlKTsKKworCWlmIChnRXJyID09IG5vRXJyKQorCXsKKwkgICAgU1RSTkNQWSAoY2ZpbGVuYW1lLCAmZGlybmFtZVsxXSwgZGlybmFtZVswXSk7CisJICAgIGNmaWxlbmFtZVtkaXJuYW1lWzBdXSA9IDA7CisJICAgIGlmICh2aW1fcmVnZXhlYygmcmVnbWF0Y2gsIGNmaWxlbmFtZSwgKGNvbG5yX1QpMCkpCisJICAgIHsKKwkJaWYgKHNbLTFdICE9ICc6JykKKwkJeworCQkgICAgLyogVE9ETzogbmVlZCB0byBjb3B5IHdpdGggY2xlYW5lZCBuYW1lICovCisJCSAgICBTVFJDUFkocysxLCBjZmlsZW5hbWUpOworCQkgICAgc1swXSA9ICc6JzsKKwkJfQorCQllbHNlCisJCXsgICAvKiBUT0RPOiBuZWVkIHRvIGNvcHkgd2l0aCBjbGVlYW5lZCBuYW1lICovCisJCSAgICBTVFJDUFkocywgY2ZpbGVuYW1lKTsKKwkJfQorCQlzdGFydF9hdCA9IFNUUkxFTihidWYpOworCQlTVFJDQVQoYnVmLCBwYXRoKTsKKwkJaWYgKG1jaF9oYXNfZXhwX3dpbGRjYXJkKHBhdGgpKQkvKiBoYW5kbGUgbW9yZSB3aWxkY2FyZHMgKi8KKwkJICAgICh2b2lkKW1hY19leHBhbmRwYXRoKGdhcCwgYnVmLCBmbGFncywgc3RhcnRfYXQsIEZBTFNFKTsKKwkJZWxzZQorCQl7CisjaWZkZWYgRE9OVF9BRERfUEFUSFNFUF9UT19ESVIKKwkJICAgIGlmICgoZ015Q1BCLmhGaWxlSW5mby5pb0ZsQXR0cmliICYgaW9EaXJNYXNrKSAhPTAgKQorCQkJU1RSQ0FUKGJ1ZiwgUEFUSFNFUFNUUik7CisjZW5kaWYKKwkJICAgIGFkZGZpbGUoZ2FwLCBidWYsIGZsYWdzKTsKKwkJfQorCSAgICB9CisJICAgIGlmICgoZ015Q1BCLmhGaWxlSW5mby5pb0ZsQXR0cmliICYgaW9EaXJNYXNrKSAhPTAgKQorCSAgICB7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJICAgIH0KKwl9CisJaW5kZXgrKzsKKyAgICB9CisgICAgd2hpbGUgKGdFcnIgPT0gbm9FcnIpOworCisgICAgaWYgKGFzX2Z1bGwpCisgICAgeworCWluZGV4ID0gMTsKKwlkbworCXsKKwkgICAgZ015SFBCbG9jay52b2x1bWVQYXJhbS5pb05hbWVQdHIgPSAoY2hhcl91ICopIGRpcm5hbWU7CisJICAgIGdNeUhQQmxvY2sudm9sdW1lUGFyYW0uaW9WUmVmTnVtID0wOworCSAgICBnTXlIUEJsb2NrLnZvbHVtZVBhcmFtLmlvVm9sSW5kZXggPSBpbmRleDsKKworCSAgICBnRXJyID0gUEJIR2V0VkluZm8gKCZnTXlIUEJsb2NrLGZhbHNlKTsKKwkgICAgaWYgKGdFcnIgPT0gbm9FcnIpCisJICAgIHsKKwkJU1RSTkNQWSAoY2ZpbGVuYW1lLCAmZGlybmFtZVsxXSwgZGlybmFtZVswXSk7CisJCWNmaWxlbmFtZVtkaXJuYW1lWzBdXSA9IDA7CisJCWlmICh2aW1fcmVnZXhlYygmcmVnbWF0Y2gsIGNmaWxlbmFtZSwgKGNvbG5yX1QpMCkpCisJCXsKKwkJICAgIFNUUkNQWShzLCBjZmlsZW5hbWUpOworCQkgICAgU1RSQ0FUKGJ1ZiwgcGF0aCk7CisJCSAgICBpZiAobWNoX2hhc19leHBfd2lsZGNhcmQocGF0aCkpIC8qIGhhbmRsZSBtb3JlIHdpbGRjYXJkcyAqLworCQkJKHZvaWQpbWFjX2V4cGFuZHBhdGgoZ2FwLCBzLCBmbGFncywgMCwgRkFMU0UpOworCQkgICAgZWxzZQorCQkgICAgeworI2lmZGVmIERPTlRfQUREX1BBVEhTRVBfVE9fRElSCisvKgkJCWlmICgoZ015Q1BCLmhGaWxlSW5mby5pb0ZsQXR0cmliICYgaW9EaXJNYXNrKSAhPTAgKQorKi8JCQkgICAgU1RSQ0FUKGJ1ZiwgUEFUSFNFUFNUUik7CisjZW5kaWYKKwkJCWFkZGZpbGUoZ2FwLCBzLCBmbGFncyk7CisJCSAgICB9CisjaWYgMAorCQkgICAgU1RSQ0FUKGNmaWxlbmFtZSwgUEFUSFNFUFNUUik7CisJCSAgICBhZGRmaWxlIChnYXAsIGNmaWxlbmFtZSwgZmxhZ3MpOworI2VuZGlmCisJCX0KKwkgICAgfQorCSAgICBpbmRleCsrOworCX0KKwl3aGlsZSAoZ0VyciA9PSBub0Vycik7CisgICAgfQorCisgICAgdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7CisKKyAgICByZXR1cm4gZ2FwLT5nYV9sZW4gLSBzdGFydF9sZW47Cit9CisKKworI2lmZGVmIFVTRV9VTklYRklMRU5BTUUKKyAgICBzdGF0aWMgaW50Citwc3RyY21wKGEsIGIpCisgICAgY29uc3Qgdm9pZCAqYSwgKmI7Cit7CisgICAgcmV0dXJuIChwYXRoY21wKCooY2hhciAqKilhLCAqKGNoYXIgKiopYikpOworfQorCisgICAgc3RhdGljIGludAordW5peF9leHBhbmRwYXRoKGdhcCwgcGF0aCwgd2lsZG9mZiwgZmxhZ3MpCisgICAgZ2FycmF5X1QJKmdhcDsKKyAgICBjaGFyX3UJKnBhdGg7CisgICAgaW50CQl3aWxkb2ZmOworICAgIGludAkJZmxhZ3M7CQkvKiBFV18qIGZsYWdzICovCit7CisgICAgY2hhcl91CSpidWY7CisgICAgY2hhcl91CSpwYXRoX2VuZDsKKyAgICBjaGFyX3UJKnAsICpzLCAqZTsKKyAgICBpbnQJCXN0YXJ0X2xlbiwgYzsKKyAgICBjaGFyX3UJKnBhdDsKKyAgICBESVIJCSpkaXJwOworICAgIHJlZ21hdGNoX1QJcmVnbWF0Y2g7CisgICAgc3RydWN0IGRpcmVudCAqZHA7CisgICAgaW50CQlzdGFydHNfd2l0aF9kb3Q7CisgICAgaW50CQltYXRjaGVzOworICAgIGludAkJbGVuOworCisgICAgc3RhcnRfbGVuID0gZ2FwLT5nYV9sZW47CisgICAgYnVmID0gYWxsb2MoU1RSTEVOKHBhdGgpICsgQkFTRU5BTUVMRU4gKyA1KTsvKiBtYWtlIHJvb20gZm9yIGZpbGUgbmFtZSAqLworICAgIGlmIChidWYgPT0gTlVMTCkKKwlyZXR1cm4gMDsKKworLyoKKyAqIEZpbmQgdGhlIGZpcnN0IHBhcnQgaW4gdGhlIHBhdGggbmFtZSB0aGF0IGNvbnRhaW5zIGEgd2lsZGNhcmQuCisgKiBDb3B5IGl0IGludG8gYnVmLCBpbmNsdWRpbmcgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXJzLgorICovCisgICAgcCA9IGJ1ZjsKKyAgICBzID0gYnVmOworICAgIGUgPSBOVUxMOworICAgIHBhdGhfZW5kID0gcGF0aDsKKyAgICB3aGlsZSAoKnBhdGhfZW5kKQorICAgIHsKKwkvKiBNYXkgaWdub3JlIGEgd2lsZGNhcmQgdGhhdCBoYXMgYSBiYWNrc2xhc2ggYmVmb3JlIGl0ICovCisJaWYgKHBhdGhfZW5kID49IHBhdGggKyB3aWxkb2ZmICYmIHJlbV9iYWNrc2xhc2gocGF0aF9lbmQpKQorCSAgICAqcCsrID0gKnBhdGhfZW5kKys7CisJZWxzZSBpZiAoKnBhdGhfZW5kID09ICcvJykKKwl7CisJICAgIGlmIChlICE9IE5VTEwpCisJCWJyZWFrOworCSAgICBlbHNlCisJCXMgPSBwICsgMTsKKwl9CisJZWxzZSBpZiAodmltX3N0cmNocigoY2hhcl91ICopIio/W3t+JCIsICpwYXRoX2VuZCkgIT0gTlVMTCkKKwkgICAgZSA9IHA7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBsZW4gPSAoKm1iX3B0cjJsZW5fY2hlY2spKHBhdGhfZW5kKTsKKwkgICAgU1RSTkNQWShwLCBwYXRoX2VuZCwgbGVuKTsKKwkgICAgcCArPSBsZW47CisJICAgIHBhdGhfZW5kICs9IGxlbjsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgICpwKysgPSAqcGF0aF9lbmQrKzsKKyAgICB9CisgICAgZSA9IHA7CisgICAgKmUgPSBOVUw7CisKKyAgICAvKiBub3cgd2UgaGF2ZSBvbmUgd2lsZGNhcmQgY29tcG9uZW50IGJldHdlZW4gcyBhbmQgZSAqLworICAgIC8qIFJlbW92ZSBiYWNrc2xhc2hlcyBiZXR3ZWVuICJ3aWxkb2ZmIiBhbmQgdGhlIHN0YXJ0IG9mIHRoZSB3aWxkY2FyZAorICAgICAqIGNvbXBvbmVudC4gKi8KKyAgICBmb3IgKHAgPSBidWYgKyB3aWxkb2ZmOyBwIDwgczsgKytwKQorCWlmIChyZW1fYmFja3NsYXNoKHApKQorCXsKKwkgICAgU1RSQ1BZKHAsIHAgKyAxKTsKKwkgICAgLS1lOworCSAgICAtLXM7CisJfQorCisgICAgLyogY29udmVydCB0aGUgZmlsZSBwYXR0ZXJuIHRvIGEgcmVnZXhwIHBhdHRlcm4gKi8KKyAgICBzdGFydHNfd2l0aF9kb3QgPSAoKnMgPT0gJy4nKTsKKyAgICBwYXQgPSBmaWxlX3BhdF90b19yZWdfcGF0KHMsIGUsIE5VTEwsIEZBTFNFKTsKKyAgICBpZiAocGF0ID09IE5VTEwpCisgICAgeworCXZpbV9mcmVlKGJ1Zik7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogY29tcGlsZSB0aGUgcmVnZXhwIGludG8gYSBwcm9ncmFtICovCisjaWZkZWYgTUFDT1NfWAorICAgIC8qIFdlIHdhbnQgdG8gYmVoYXZlIGxpa2UgVGVybWluYWwuYXBwICovCisgICAgcmVnbWF0Y2gucm1faWMgPSBUUlVFOworI2Vsc2UKKyAgICByZWdtYXRjaC5ybV9pYyA9IEZBTFNFOwkJLyogRG9uJ3QgZXZlciBpZ25vcmUgY2FzZSAqLworI2VuZGlmCisgICAgcmVnbWF0Y2gucmVncHJvZyA9IHZpbV9yZWdjb21wKHBhdCwgUkVfTUFHSUMpOworICAgIHZpbV9mcmVlKHBhdCk7CisKKyAgICBpZiAocmVnbWF0Y2gucmVncHJvZyA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShidWYpOworCXJldHVybiAwOworICAgIH0KKworICAgIC8qIG9wZW4gdGhlIGRpcmVjdG9yeSBmb3Igc2Nhbm5pbmcgKi8KKyAgICBjID0gKnM7CisgICAgKnMgPSBOVUw7CisgICAgZGlycCA9IG9wZW5kaXIoKmJ1ZiA9PSBOVUwgPyAiLiIgOiAoY2hhciAqKWJ1Zik7CisgICAgKnMgPSBjOworCisgICAgLyogRmluZCBhbGwgbWF0Y2hpbmcgZW50cmllcyAqLworICAgIGlmIChkaXJwICE9IE5VTEwpCisgICAgeworCWZvciAoOzspCisJeworCSAgICBkcCA9IHJlYWRkaXIoZGlycCk7CisJICAgIGlmIChkcCA9PSBOVUxMKQorCQlicmVhazsKKwkgICAgaWYgKChkcC0+ZF9uYW1lWzBdICE9ICcuJyB8fCBzdGFydHNfd2l0aF9kb3QpCisJCSAgICAmJiB2aW1fcmVnZXhlYygmcmVnbWF0Y2gsIChjaGFyX3UgKilkcC0+ZF9uYW1lLCAoY29sbnJfVCkwKSkKKwkgICAgeworCQlTVFJDUFkocywgZHAtPmRfbmFtZSk7CisJCWxlbiA9IFNUUkxFTihidWYpOworCQlTVFJDUFkoYnVmICsgbGVuLCBwYXRoX2VuZCk7CisJCWlmIChtY2hfaGFzX2V4cF93aWxkY2FyZChwYXRoX2VuZCkpIC8qIGhhbmRsZSBtb3JlIHdpbGRjYXJkcyAqLworCQl7CisJCSAgICAvKiBuZWVkIHRvIGV4cGFuZCBhbm90aGVyIGNvbXBvbmVudCBvZiB0aGUgcGF0aCAqLworCQkgICAgLyogcmVtb3ZlIGJhY2tzbGFzaGVzIGZvciB0aGUgcmVtYWluaW5nIGNvbXBvbmVudHMgb25seSAqLworCQkgICAgKHZvaWQpdW5peF9leHBhbmRwYXRoKGdhcCwgYnVmLCBsZW4gKyAxLCBmbGFncyk7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICAvKiBubyBtb3JlIHdpbGRjYXJkcywgY2hlY2sgaWYgdGhlcmUgaXMgYSBtYXRjaCAqLworCQkgICAgLyogcmVtb3ZlIGJhY2tzbGFzaGVzIGZvciB0aGUgcmVtYWluaW5nIGNvbXBvbmVudHMgb25seSAqLworCQkgICAgaWYgKCpwYXRoX2VuZCkKKwkJCWJhY2tzbGFzaF9oYWx2ZShidWYgKyBsZW4gKyAxKTsKKwkJICAgIGlmIChtY2hfZ2V0cGVybShidWYpID49IDApCS8qIGFkZCBleGlzdGluZyBmaWxlICovCisJCQlhZGRmaWxlKGdhcCwgYnVmLCBmbGFncyk7CisJCX0KKwkgICAgfQorCX0KKworCWNsb3NlZGlyKGRpcnApOworICAgIH0KKworICAgIHZpbV9mcmVlKGJ1Zik7CisgICAgdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7CisKKyAgICBtYXRjaGVzID0gZ2FwLT5nYV9sZW4gLSBzdGFydF9sZW47CisgICAgaWYgKG1hdGNoZXMpCisJcXNvcnQoKChjaGFyX3UgKiopZ2FwLT5nYV9kYXRhKSArIHN0YXJ0X2xlbiwgbWF0Y2hlcywKKwkJCQkJCSAgIHNpemVvZihjaGFyX3UgKiksIHBzdHJjbXApOworICAgIHJldHVybiBtYXRjaGVzOworfQorI2VuZGlmCisKKy8qCisgKiBSZWN1cnNpdmVseSBidWlsZCB1cCBhIGxpc3Qgb2YgZmlsZXMgaW4gImdhcCIgbWF0Y2hpbmcgdGhlIGZpcnN0IHdpbGRjYXJkCisgKiBpbiBgcGF0aCcuICBDYWxsZWQgYnkgZXhwYW5kX3dpbGRjYXJkcygpLgorICogInBhdCIgaGFzIGJhY2tzbGFzaGVzIGJlZm9yZSBjaGFycyB0aGF0IGFyZSBub3QgdG8gYmUgZXhwYW5kZWQuCisgKi8KKyAgICBpbnQKK21jaF9leHBhbmRwYXRoKAorICAgIGdhcnJheV9UCSpnYXAsCisgICAgY2hhcl91CSpwYXRoLAorICAgIGludAkJZmxhZ3MpCQkvKiBFV18qIGZsYWdzICovCit7CisjaWZkZWYgVVNFX1VOSVhGSUxFTkFNRQorICAgIHJldHVybiB1bml4X2V4cGFuZHBhdGgoZ2FwLCBwYXRoLCAwLCBmbGFncyk7CisjZWxzZQorICAgIGNoYXJfdSBmaXJzdCA9ICpwYXRoOworICAgIHNob3J0ICBzY2FuX3ZvbHVtZTsKKworICAgIHNsYXNoX25fY29sb25fYWRqdXN0KHBhdGgpOworCisgICAgc2Nhbl92b2x1bWUgPSAoZmlyc3QgIT0gKnBhdGgpOworCisgICAgcmV0dXJuIG1hY19leHBhbmRwYXRoKGdhcCwgcGF0aCwgZmxhZ3MsIDAsIHNjYW5fdm9sdW1lKTsKKyNlbmRpZgorfQorCisgICAgdm9pZAorZm5hbWVfY2FzZShuYW1lLCBsZW4pCisgICAgY2hhcl91CSpuYW1lOworICAgIGludAkJbGVuOwkgICAgLyogYnVmZmVyIHNpemUsIGlnbm9yZWQgaGVyZSAqLworeworICAgIC8qCisgICAgICogVE9ETzogZ2V0IHRoZSByZWFsIGNhc2luZyBmb3IgdGhlIGZpbGUKKyAgICAgKiAgICAgICBtYWtlIGl0IGNhbGxlZAorICAgICAqICAgICAgIHdpdGggVVNFX0ZOQU1FX0NBU0UgJiBVU0VfTE9OR19GTkFNRQorICAgICAqCQkgICAgQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRQorICAgICAqICAgICAgIHdpdGhpbiBzZXRmbmFtZSwgZml4X2ZuYW1lLCBkb19lY21kCisgICAgICovCisjaWZkZWYgVVNFX1VOSVhGSUxFTkFNRQorICAgIE9TU3RhdHVzCXN0YXR1czsKKyAgICBGU1JlZglyZWZGaWxlOworICAgIFVJbnQzMglwYXRoU2l6ZSA9IFNUUkxFTihuYW1lKSArIDE7CisgICAgY2hhcl91CSpwYXRoOworICAgIEJvb2xlYW4JaXNEaXJlY3Rvcnk7CisKKyAgICBwYXRoID0gYWxsb2MocGF0aFNpemUpOworICAgIGlmIChwYXRoID09IE5VTEwpCisJcmV0dXJuOworCisgICAgc3RhdHVzID0gRlNQYXRoTWFrZVJlZigoVUludDggKiluYW1lLCAmcmVmRmlsZSwgJmlzRGlyZWN0b3J5KTsKKyAgICBpZiAoc3RhdHVzKQorCXJldHVybjsKKworICAgIHN0YXR1cyA9IEZTUmVmTWFrZVBhdGgoJnJlZkZpbGUsIChVSW50OCAqKXBhdGgsIHBhdGhTaXplKTsKKyAgICBpZiAoc3RhdHVzKQorCXJldHVybjsKKworICAgIC8qIFBhcmFub2lkOiBVcGRhdGUgdGhlIG5hbWUgaWYgb25seSB0aGUgY2FzaW5nIGRpZmZlci4qLworICAgIGlmIChTVFJJQ01QKG5hbWUsIHBhdGgpID09IDApCisJU1RSQ1BZKG5hbWUsIHBhdGgpOworI2VuZGlmCit9CitzdGF0aWMgY2hhcl91CSpvbGR0aXRsZSA9IChjaGFyX3UgKikgImdWaW0iOworCisvKgorICogY2hlY2sgZm9yIGFuICJpbnRlcnJ1cHQgc2lnbmFsIjogQ1RSTC1icmVhayBvciBDVFJMLUMKKyAqLworICAgIHZvaWQKK21jaF9icmVha2NoZWNrKCkKK3sKKyAgICAvKgorICAgICAqIFRPRE86IFNjYW4gZXZlbnQgZm9yIGEgQ1RSTC1DIG9yIENPTU1BTkQtLiBhbmQgZG86IGdvdF9pbnQ9VFJVRTsKKyAgICAgKiAgICAgICBvciBvbmx5IGdvIHByb2NjZXNzIGV2ZW50PworICAgICAqICAgICAgIG9yIGRvIG5vdGhpbmcKKyAgICAgKi8KKyAgICBFdmVudFJlY29yZCB0aGVFdmVudDsKKworICAgIGlmIChFdmVudEF2YWlsIChrZXlEb3duTWFzaywgJnRoZUV2ZW50KSkKKwlpZiAoKHRoZUV2ZW50Lm1lc3NhZ2UgJiBjaGFyQ29kZU1hc2spID09IEN0cmxfQyAmJiBjdHJsX2NfaW50ZXJydXB0cykKKwkgICAgZ290X2ludCA9IFRSVUU7CisjaWYgMAorICAgIHNob3J0CWkgPSAwOworICAgIEJvb2xlYW4gICAgIGZvdW5kID0gZmFsc2U7CisgICAgRXZlbnRSZWNvcmQgdGhlRXZlbnQ7CisKKyAgICB3aGlsZSAoKGkgPCAxMCkgJiYgKCFmb3VuZCkpCisgICAgeworCWZvdW5kID0gRXZlbnRBdmFpbCAoa2V5RG93bk1hc2ssICZ0aGVFdmVudCk7CisJaWYgKGZvdW5kKQorCXsKKwkgIGlmICgodGhlRXZlbnQubW9kaWZpZXJzICYgY29udHJvbEtleSkgIT0gMCkKKwkgICAgZm91bmQgPSBmYWxzZTsKKwkgIGlmICgodGhlRXZlbnQud2hhdCA9PSBrZXlEb3duKSkKKwkgICAgZm91bmQgPSBmYWxzZTsKKwkgIGlmICgodGhlRXZlbnQubWVzc2FnZSAmIGNoYXJDb2RlTWFzaykgPT0gQ3RybF9DKQorCSAgICB7CisJCWZvdW5kID0gZmFsc2U7CisJCWdvdF9pbnQgPSBUUlVFOworCSAgICB9CisJfQorCWkrKzsKKyAgICB9CisjZW5kaWYKKworfQorCisvKgorICogUmV0dXJuIGFtb3VudCBvZiBtZW1vcnkgY3VycmVudGx5IGF2YWlsYWJsZS4KKyAqLworICAgIGxvbmdfdQorbWNoX2F2YWlsX21lbShzcGVjaWFsKQorICAgIGludCAgICAgc3BlY2lhbDsKK3sKKyAgICAvKgorICAgICAqIFRPRE86IFVzZSBNYXhCbG9jaywgRnJlZU1lTSwgUHVyZ2VTcGFjZSwgTWF4QmxvY2tTeXMgRkFRLTI2NgorICAgICAqICAgICAgIGZpZ3VyZSBvdXQgd2hhdCB0aGUgc3BlY2lhbCBpcyBmb3IKKyAgICAgKgorICAgICAqIEZyZWVNZW0gIC0+ICAgcmV0dXJucyBhbGwgYXZhaWwgbWVtb3J5IGlzIGFwcGxpY2F0aW9uIGhlYXAKKyAgICAgKiBNYXhCbG9jayAtPiAgIHJldHVybnMgdGhlIGJpZ2dlc3QgY29udGlnZW91cyBibG9jayBpbiBhcHBsaWNhdGlvbiBoZWFwCisgICAgICogUHVyZ2VTcGFjZSAtPgorICAgICAqLworICAgIHJldHVybiBNYXhCbG9jaygpOworfQorCisgICAgdm9pZAorbWNoX2RlbGF5KG1zZWMsIGlnbm9yZWlucHV0KQorICAgIGxvbmcJbXNlYzsKKyAgICBpbnQJCWlnbm9yZWlucHV0OworeworI2lmIChkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fTVdFUktTX18gPj0gMHgyMDAwKSBcCisJfHwgZGVmaW5lZChfX01SQ19fKSB8fCBkZWZpbmVkKF9fU0NfXykKKyAgICB1bnNpZ25lZAorI2VuZGlmCisgICAgbG9uZyAgIGZpbmFsVGljazsKKworICAgIGlmIChpZ25vcmVpbnB1dCkKKwlEZWxheSAoNjAqbXNlYy8xMDAwLCAmZmluYWxUaWNrKTsKKyAgICBlbHNlCisJLyogZXZlbiB0aG91Z3RoIHdlIHNob3VsZCBjYWxsIGd1aSBzdHVmZiBmcm9tIGhlcmUKKwkgICBpdCB0aGUgc2ltcGxlc3Qgd2F5IHRvIGJlIHNhZmUgKi8KKwlndWlfbWNoX3dhaXRfZm9yX2NoYXJzKG1zZWMpOworfQorCisgICAgdm9pZAorbWNoX2luaXQoKQoreworICAgIC8qCisgICAgICogIFRPRE86IFZlcmlmeSBpZiBuZWVkZWQsIG9yIG92ZXJyaWRlIGxhdGVyLgorICAgICAqLworICAgIENvbHVtbnMgPSA4MDsKKyAgICBSb3dzID0gMjQ7Cit9CisKKy8qCisgKiBDaGVja193aW4gY2hlY2tzIHdoZXRoZXIgd2UgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBzdGRvdXQuCisgKi8KKyAgICBpbnQKK21jaF9jaGVja193aW4oYXJnYywgYXJndikKKyAgICBpbnQJCWFyZ2M7CisgICAgY2hhcgkqKmFyZ3Y7Cit7CisgICAgLyoKKyAgICAgKiBUT0RPOiBNYXliZSB0byBiZSByZW1vdmUgdGhyb3VnaCBOT19DT05TT0xFCisgICAgICovCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgdGhlIGlucHV0IGNvbWVzIGZyb20gYSB0ZXJtaW5hbCwgRkFMU0Ugb3RoZXJ3aXNlLgorICovCisgICAgaW50CittY2hfaW5wdXRfaXNhdHR5KCkKK3sKKyAgICAvKgorICAgICAqIFRPRE86IE1heWJlIHRvIGJlIHJlbW92ZSB0aHJvdWdoIE5PX0NPTlNPTEUKKyAgICAgKi8KKyAgICByZXR1cm4gT0s7Cit9CisKKyNpZmRlZiBGRUFUX1RJVExFCisvKgorICogU2V0IHRoZSB3aW5kb3cgdGl0bGUgYW5kIGljb24uCisgKiAoVGhlIGljb24gaXMgbm90IHRha2VuIGNhcmUgb2YpLgorICovCisgICAgdm9pZAorbWNoX3NldHRpdGxlKHRpdGxlLCBpY29uKQorICAgIGNoYXJfdSAqdGl0bGU7CisgICAgY2hhcl91ICppY29uOworeworICAgIGd1aV9tY2hfc2V0dGl0bGUodGl0bGUsIGljb24pOworfQorCisvKgorICogUmVzdG9yZSB0aGUgd2luZG93L2ljb24gdGl0bGUuCisgKiB3aGljaCBpcyBvbmUgb2Y6CisgKgkxICBKdXN0IHJlc3RvcmUgdGl0bGUKKyAqICAgICAgMiAgSnVzdCByZXN0b3JlIGljb24KKyAqCTMgIFJlc3RvcmUgdGl0bGUgYW5kIGljb24KKyAqIGJ1dCBkb24ndCBjYXJlIGFib3V0IHRoZSBpY29uLgorICovCisgICAgdm9pZAorbWNoX3Jlc3RvcmVfdGl0bGUod2hpY2gpCisgICAgaW50IHdoaWNoOworeworICAgIG1jaF9zZXR0aXRsZSgod2hpY2ggJiAxKSA/IG9sZHRpdGxlIDogTlVMTCwgTlVMTCk7Cit9CisjZW5kaWYKKworLyoKKyAqIEluc2VydCB1c2VyIG5hbWUgaW4gc1tsZW5dLgorICogUmV0dXJuIE9LIGlmIGEgbmFtZSBmb3VuZC4KKyAqLworICAgIGludAorbWNoX2dldF91c2VyX25hbWUocywgbGVuKQorICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWxlbjsKK3sKKyNpZiAhKGRlZmluZWQoX19NUkNfXykgfHwgZGVmaW5lZChfX1NDX18pKSAvKiBObyBzb2x1dGlvbiB5ZXQgKi8KKyAgICAvKgorICAgICAqIFRPRE86IGNsZWFuIHVwIGFuZCB0cnkgZ2V0bG9naW4gKCkKKyAgICAgKi8KKyNpZiBkZWZpbmVkKEhBVkVfUFdEX0gpICYmIGRlZmluZWQoSEFWRV9HRVRQV1VJRCkKKyAgICBzdHJ1Y3QgcGFzc3dkCSpwdzsKKyNlbmRpZgorICAgIHVpZF90CQl1aWQ7CisKKyAgICB1aWQgPSBnZXR1aWQoKTsKKyNpZiBkZWZpbmVkKEhBVkVfUFdEX0gpICYmIGRlZmluZWQoSEFWRV9HRVRQV1VJRCkKKyAgICBpZiAoKHB3ID0gZ2V0cHd1aWQodWlkKSkgIT0gTlVMTAorCSAgICAmJiBwdy0+cHdfbmFtZSAhPSBOVUxMICYmICoocHctPnB3X25hbWUpICE9IE5VTCkKKyAgICB7CisJU1RSTkNQWShzLCBwdy0+cHdfbmFtZSwgbGVuKTsKKwlyZXR1cm4gT0s7CisgICAgfQorI2VuZGlmCisgICAgc3ByaW50ZigoY2hhciAqKXMsICIlZCIsIChpbnQpdWlkKTsJCS8qIGFzc3VtZXMgcyBpcyBsb25nIGVub3VnaCAqLworI2VuZGlmCisgICAgcmV0dXJuIEZBSUw7CQkJCS8qIGEgbnVtYmVyIGlzIG5vdCBhIG5hbWUgKi8KK30KKworLyoKKyAqIENvcHkgaG9zdCBuYW1lIGludG8gc1tsZW5dLgorICovCisgICAgdm9pZAorbWNoX2dldF9ob3N0X25hbWUocywgbGVuKQorICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWxlbjsKK3sKKyNpZiBkZWZpbmVkKF9fTVJDX18pIHx8IGRlZmluZWQoX19TQ19fKSB8fCBkZWZpbmVkKF9fQVBQTEVfQ0NfXykKKyAgICBTVFJOQ1BZKHMsICJNYWMiLCBsZW4pOyAvKiBUT0RPOiB1c2UgR2VzdGFsdCBpbmZvcm1hdGlvbiAqLworI2Vsc2UKKyAgICBzdHJ1Y3QgdXRzbmFtZSB2dXRzbmFtZTsKKworICAgIGlmICh1bmFtZSgmdnV0c25hbWUpIDwgMCkKKwkqcyA9IE5VTDsKKyAgICBlbHNlCisJU1RSTkNQWShzLCB2dXRzbmFtZS5ub2RlbmFtZSwgbGVuKTsKKyNlbmRpZgorICAgIHNbbGVuIC0gMV0gPSBOVUw7CS8qIG1ha2Ugc3VyZSBpdCdzIHRlcm1pbmF0ZWQgKi8KK30KKworLyoKKyAqIHJldHVybiBwcm9jZXNzIElECisgKi8KKyAgICBsb25nCittY2hfZ2V0X3BpZCgpCit7CisgICAgcmV0dXJuIChsb25nKWdldHBpZCgpOworfQorCisvKgorICogR2V0IG5hbWUgb2YgY3VycmVudCBkaXJlY3RvcnkgaW50byBidWZmZXIgJ2J1Zicgb2YgbGVuZ3RoICdsZW4nIGJ5dGVzLgorICogUmV0dXJuIE9LIGZvciBzdWNjZXNzLCBGQUlMIGZvciBmYWlsdXJlLgorICovCisgICAgaW50CittY2hfZGlybmFtZShidWYsIGxlbikKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCWxlbjsKK3sKKyNpZiBkZWZpbmVkKF9fTVJDX18pIHx8IGRlZmluZWQoX19TQ19fKQorICAgIHJldHVybiBGQUlMOyAvKiBObyBzb2x1dGlvbiB5ZXQgKi8KKyNlbHNlCisgICAgLyogVGhlIGxhc3QgOiBpcyBhbHJlYWR5IHB1dCBieSBnZXRjd2QgKi8KKyAgICBpZiAoZ2V0Y3dkKChjaGFyICopYnVmLCBsZW4pID09IE5VTEwpCisJeworCSAgICBTVFJDUFkoYnVmLCBzdHJlcnJvcihlcnJubykpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisjIGlmbmRlZiBVU0VfVU5JWEZJTEVOQU1FCisgICAgZWxzZSBpZiAoKmJ1ZiAhPSBOVUwgJiYgYnVmW1NUUkxFTihidWYpIC0gMV0gPT0gJzonKQorCWJ1ZltTVFJMRU4oYnVmKSAtIDFdID0gTlVMOwkvKiByZW1vdmUgdHJhaWxpbmcgJzonICovCisjIGVuZGlmCisgICAgcmV0dXJuIE9LOworI2VuZGlmCit9CisKKyAgICB2b2lkCitzbGFzaF90b19jb2xvbihwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBmb3IgKCA7ICpwOyArK3ApCisJaWYgKCpwID09ICcvJykKKwkgICAgKnAgPSAnOic7Cit9CisKKyAgICBjaGFyX3UgKgorc2xhc2hfdG9fY29sb25fc2F2ZSAocCkKKyAgICBjaGFyX3UgICpwOworeworICAgIGNoYXJfdQkqcmVzOworCisgICAgcmVzID0gdmltX3N0cnNhdmUocCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorCXJldHVybiBwOworICAgIHNsYXNoX3RvX2NvbG9uKHJlcyk7CisgICAgcmV0dXJuIHJlczsKK30KKworICAgIHZvaWQKK3NsYXNoX25fY29sb25fYWRqdXN0IChidWYpCisgICAgY2hhcl91ICpidWY7Cit7CisgICAgLyoKKyAgICAgKiBUT0RPOiBNYWtlIGl0IGZhc3RlcgorICAgICAqLworI2lmbmRlZiBVU0VfVU5JWEZJTEVOQU1FCisgICAgY2hhcl91ICB0ZW1wW01BWFBBVEhMXTsKKyAgICBjaGFyX3UgICpmaXJzdF9jb2xvbiA9IHZpbV9zdHJjaHIoYnVmLCAnOicpOworICAgIGNoYXJfdSAgKmZpcnN0X3NsYXNoID0gdmltX3N0cmNocihidWYsICcvJyk7CisgICAgaW50ICAgICBmdWxsID0gVFJVRTsKKyAgICBjaGFyX3UgICpzY2FubmluZzsKKyAgICBjaGFyX3UgICpmaWxsaW5nOworICAgIGNoYXJfdSAgbGFzdF9jb3BpZWQgPSBOVUw7CisKKyAgICBpZiAoKmJ1ZiA9PSBOVUwpCisJcmV0dXJuIDsKKworICAgIGlmICgoZmlyc3RfY29sb24gPT0gTlVMTCkgJiYgKGZpcnN0X3NsYXNoID09IE5VTEwpKQorCWZ1bGwgPSBGQUxTRTsKKyAgICBpZiAoKGZpcnN0X3NsYXNoID09IE5VTEwpICYmIChmaXJzdF9jb2xvbiAhPSBOVUxMKSkKKwlmdWxsID0gVFJVRTsKKyAgICBpZiAoKGZpcnN0X2NvbG9uID09IE5VTEwpICYmIChmaXJzdF9zbGFzaCAhPSBOVUxMKSkKKwlmdWxsID0JRkFMU0U7CisgICAgaWYgKChmaXJzdF9zbGFzaCA8IGZpcnN0X2NvbG9uKSAmJiAoZmlyc3Rfc2xhc2ggIT0gTlVMTCkpCisJZnVsbCA9IEZBTFNFOworICAgIGlmICgoZmlyc3RfY29sb24gPCBmaXJzdF9zbGFzaCkgJiYgKGZpcnN0X2NvbG9uICE9IE5VTEwpKQorCWZ1bGwgPSBUUlVFOworICAgIGlmIChmaXJzdF9zbGFzaCA9PSBidWYpCisJZnVsbCA9IFRSVUU7CisgICAgaWYgKGZpcnN0X2NvbG9uID09IGJ1ZikKKwlmdWxsID0gRkFMU0U7CisKKyAgICBzY2FubmluZyA9IGJ1ZjsKKyAgICBmaWxsaW5nICA9IHRlbXA7CisKKyAgICB3aGlsZSAoKnNjYW5uaW5nICE9IE5VTCkKKyAgICB7CisJaWYgKCpzY2FubmluZyA9PSAnLycpCisJeworCSAgICBpZiAoKHNjYW5uaW5nWzFdICE9ICcvJykgJiYgKHNjYW5uaW5nWy0xXSAhPSAnOicpKQorCSAgICB7CisJCSpmaWxsaW5nKysgPSAnOic7CisJCXNjYW5uaW5nKys7CisJICAgIH0KKwkgICAgZWxzZQorCQlzY2FubmluZysrOworCX0KKwllbHNlIGlmICgqc2Nhbm5pbmcgPT0gJy4nKQorCXsKKwkgICAgaWYgKChzY2FubmluZ1sxXSA9PSBOVUwpIHx8IHNjYW5uaW5nWzFdID09ICcvJykKKwkgICAgeworCQlpZiAoc2Nhbm5pbmdbMV0gPT0gTlVMKQorCQkgICAgc2Nhbm5pbmcgKz0gMTsKKwkJZWxzZQorCQkgICAgc2Nhbm5pbmcgKz0gMjsKKwkgICAgfQorCSAgICBlbHNlIGlmIChzY2FubmluZ1sxXSA9PSAnLicpCisJICAgIHsKKwkJaWYgKChzY2FubmluZ1syXSA9PSBOVUwpIHx8IHNjYW5uaW5nWzJdID09ICcvJykKKwkJeworCQkgICAgKmZpbGxpbmcrKyA9ICc6JzsKKwkJICAgIGlmIChzY2FubmluZ1syXSA9PSBOVUwpCisJCQlzY2FubmluZyArPTI7CisJCSAgICBlbHNlCisJCQlzY2FubmluZyArPSAzOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgKmZpbGxpbmcrKyA9ICpzY2FubmluZysrOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCSpmaWxsaW5nKysgPSAqc2Nhbm5pbmcrKzsKKwkgICAgfQorCisJfQorCWVsc2UKKwl7CisJICAgICpmaWxsaW5nKysgPSAqc2Nhbm5pbmcrKzsKKwl9CisKKyAgICB9CisKKyAgICAqZmlsbGluZyA9IDA7CisgICAgZmlsbGluZyA9IHRlbXA7CisKKyAgICBpZiAoIWZ1bGwpCisgICAgeworCWlmIChidWZbMF0gIT0gJzonKQorCXsKKwkgICAgYnVmWzBdID0gJzonOworCSAgICBidWZbMV0gPSBOVUw7CisJfQorCWVsc2UKKwkgICAgYnVmWzBdID0gTlVMOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWJ1ZlswXSA9IE5VTDsKKwlpZiAoZmlsbGluZ1swXSA9PSAnOicpCisJICAgIGZpbGxpbmcrKzsKKyAgICB9CisKKyAgICBTVFJDQVQgKGJ1ZiwgZmlsbGluZyk7CisjZW5kaWYKK30KKworLyoKKyAqIEdldCBhYnNvbHV0ZSBmaWxlbmFtZSBpbnRvIGJ1ZmZlciAnYnVmJyBvZiBsZW5ndGggJ2xlbicgYnl0ZXMuCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIGZvciBzdWNjZXNzCisgKi8KKyAgICBpbnQKK21jaF9GdWxsTmFtZShmbmFtZSwgYnVmLCBsZW4sIGZvcmNlKQorICAgIGNoYXJfdSAgKmZuYW1lLCAqYnVmOworICAgIGludCAgICAgbGVuOworICAgIGludCAgICAgZm9yY2U7CSAgICAvKiBhbHNvIGV4cGFuZCB3aGVuIGFscmVhZHkgYWJzb2x1dGUgcGF0aCBuYW1lICovCit7CisgICAgLyoKKyAgICAgKiBUT0RPOiBGaW5kIHdoYXQgVE9ETworICAgICAqLworICAgIGludAkJbDsKKyAgICBjaGFyX3UJb2xkZGlyW01BWFBBVEhMXTsKKyAgICBjaGFyX3UJbmV3ZGlyW01BWFBBVEhMXTsKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CWM7CisgICAgaW50CQlyZXR2YWwgPSBPSzsKKworICAgIGlmIChmb3JjZSB8fCAhbWNoX2lzRnVsbE5hbWUoZm5hbWUpKQorICAgIHsKKwkvKgorCSAqIEZvcmNlZCBvciBub3QgYW4gYWJzb2x1dGUgcGF0aC4KKwkgKiBJZiB0aGUgZmlsZSBuYW1lIGhhcyBhIHBhdGgsIGNoYW5nZSB0byB0aGF0IGRpcmVjdG9yeSBmb3IgYSBtb21lbnQsCisJICogYW5kIHRoZW4gZG8gdGhlIGdldHdkKCkgKGFuZCBnZXQgYmFjayB0byB3aGVyZSB3ZSB3ZXJlKS4KKwkgKiBUaGlzIHdpbGwgZ2V0IHRoZSBjb3JyZWN0IHBhdGggbmFtZSB3aXRoICIuLi8iIHRoaW5ncy4KKwkgKi8KKwlpZiAoKHAgPSB2aW1fc3RycmNocihmbmFtZSwgJzonKSkgIT0gTlVMTCkKKwl7CisJICAgIHArKzsKKwkgICAgaWYgKG1jaF9kaXJuYW1lKG9sZGRpciwgTUFYUEFUSEwpID09IEZBSUwpCisJICAgIHsKKwkJcCA9IE5VTEw7CQkvKiBjYW4ndCBnZXQgY3VycmVudCBkaXI6IGRvbid0IGNoZGlyICovCisJCXJldHZhbCA9IEZBSUw7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWMgPSAqcDsKKwkJKnAgPSBOVUw7CisJCWlmIChtY2hfY2hkaXIoKGNoYXIgKilmbmFtZSkpCisJCSAgICByZXR2YWwgPSBGQUlMOworCQllbHNlCisJCSAgICBmbmFtZSA9IHA7IC8qICsgMTsqLworCQkqcCA9IGM7CisJICAgIH0KKwl9CisJaWYgKG1jaF9kaXJuYW1lKGJ1ZiwgbGVuKSA9PSBGQUlMKQorCXsKKwkgICAgcmV0dmFsID0gRkFJTDsKKwkgICAgKm5ld2RpciA9IE5VTDsKKwl9CisJbCA9IFNUUkxFTihidWYpOworCWlmIChTVFJDTVAoZm5hbWUsICIuIikgIT0gMCkKKwl7CisjaWZkZWYgVVNFX1VOSVhGSUxFTkFNRQorCSAgICBpZiAobCA+IDAgJiYgYnVmW2wgLSAxXSAhPSAnLycgJiYgKmZuYW1lICE9IE5VTCkKKwkJU1RSQ0FUKGJ1ZiwgIi8iKTsKKyNlbHNlCisJICAgIGlmIChsID4gMCAmJiBidWZbbCAtIDFdICE9ICc6JyAmJiAqZm5hbWUgIT0gTlVMKQorCQlTVFJDQVQoYnVmLCAiOiIpOworI2VuZGlmCisJfQorCWlmIChwICE9IE5VTEwpCisJICAgIG1jaF9jaGRpcigoY2hhciAqKW9sZGRpcik7CisJaWYgKFNUUkNNUChmbmFtZSwgIi4iKSAhPSAwKQorCSAgICBTVFJDQVQoYnVmLCBmbmFtZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJU1RSTkNQWShidWYsIGZuYW1lLCBsZW4pOworCWJ1ZltsZW4gLSAxXSA9IE5VTDsKKwlzbGFzaF9uX2NvbG9uX2FkanVzdChidWYpOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAiZm5hbWUiIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgKi8KKwlpbnQKK21jaF9pc0Z1bGxOYW1lKGZuYW1lKQorCWNoYXJfdQkJKmZuYW1lOworeworI2lmZGVmIFVTRV9VTklYRklMRU5BTUUKKyAgICByZXR1cm4gKChmbmFtZVswXSA9PSAnLycpIHx8IChmbmFtZVswXSA9PSAnficpKTsKKyNlbHNlCisgICAgLyoKKyAgICAgKiBUT0RPOiBNYWtlIHN1cmUgZm5hbWUgaXMgYWx3YXlzIG9mIG1hYyBzdGlsbAorICAgICAqICAgICAgIGkuZTogcGFzc2VkIHRocm91Z2h0IHNsYXNoX25fY29sb25fYWRqdXN0CisgICAgICovCisJY2hhcl91CSpmaXJzdF9jb2xvbiA9IHZpbV9zdHJjaHIoZm5hbWUsICc6Jyk7CisJY2hhcl91CSpmaXJzdF9zbGFzaCA9IHZpbV9zdHJjaHIoZm5hbWUsICcvJyk7CisKKwlpZiAoZmlyc3RfY29sb24gPT0gZm5hbWUpCisJICByZXR1cm4gRkFMU0U7CisJaWYgKGZpcnN0X3NsYXNoID09IGZuYW1lKQorCSAgcmV0dXJuIFRSVUU7CisJaWYgKChmaXJzdF9jb2xvbiA8IGZpcnN0X3NsYXNoKSAmJiAoZmlyc3RfY29sb24gIT0gTlVMTCkpCisJICByZXR1cm4gVFJVRTsKKwlpZiAoKGZpcnN0X3NsYXNoIDwgZmlyc3RfY29sb24pICYmIChmaXJzdF9zbGFzaCAhPSBOVUxMKSkKKwkgIHJldHVybiBGQUxTRTsKKwlpZiAoKGZpcnN0X2NvbG9uID09IE5VTEwpICYmIChmaXJzdF9zbGFzaCAhPSBOVUxMKSkKKwkgIHJldHVybiBGQUxTRTsKKwlpZiAoKGZpcnN0X3NsYXNoID09IE5VTEwpICYmIChmaXJzdF9jb2xvbiAhPSBOVUxMKSkKKwkgIHJldHVybiBUUlVFOworCWlmICgoZmlyc3RfY29sb24gPT0gTlVMTCkgJiYgKGZpcnN0X3NsYXNoID09IE5VTEwpKQorCSAgcmV0dXJuIEZBTFNFOworCXJldHVybiBUUlVFOworI2VuZGlmCit9CisKKy8qCisgKiBSZXBsYWNlIGFsbCBzbGFzaGVzIGJ5IGNvbG9ucy4KKyAqLworICAgIHZvaWQKK3NsYXNoX2FkanVzdChwKQorICAgIGNoYXJfdSAgKnA7Cit7CisjaWZuZGVmIFVTRV9VTklYRklMRU5BTUUKKyAgICAvKgorICAgICAqIFRPRE86IGtlZXAgZXNjYXBlZCAnLycKKyAgICAgKi8KKworICAgIHdoaWxlICgqcCkKKyAgICB7CisJaWYgKCpwID09ICcvJykKKwkgICAgKnAgPSAnOic7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKTsKKwllbHNlCisjZW5kaWYKKwkgICAgKytwOworICAgIH0KKyNlbmRpZgorfQorCisvKgorICogR2V0IGZpbGUgcGVybWlzc2lvbnMgZm9yICduYW1lJy4KKyAqIFJldHVybnMgLTEgd2hlbiBpdCBkb2Vzbid0IGV4aXN0LgorICovCisgICAgbG9uZworbWNoX2dldHBlcm0obmFtZSkKKyAgICBjaGFyX3UgKm5hbWU7Cit7CisgICAgLyoKKyAgICAgKiBUT0RPOiBNYXliZSB1c2UgQXBwbGVTaGFyZSBpbmZvPz8KKyAgICAgKiAgICAgICBVc2UgbG9ja2VkIGZvciBub24gd3JpdGFibGUKKyAgICAgKi8KKworICAgIHN0cnVjdCBzdGF0IHN0YXRiOworCisgICAgaWYgKHN0YXQoKGNoYXIgKiluYW1lLCAmc3RhdGIpKQorCXJldHVybiAtMTsKKyAgICByZXR1cm4gc3RhdGIuc3RfbW9kZTsKK30KKworLyoKKyAqIHNldCBmaWxlIHBlcm1pc3Npb24gZm9yICduYW1lJyB0byAncGVybScKKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK21jaF9zZXRwZXJtKG5hbWUsIHBlcm0pCisgICAgY2hhcl91CSpuYW1lOworICAgIGxvbmcJcGVybTsKK3sKKyAgICAvKgorICAgICAqIFRPRE86IE1heWJlIHVzZSBBcHBsZVNoYXJlIGluZm8/PworICAgICAqICAgICAgIFVzZSBsb2NrZWQgZm9yIG5vbiB3cml0YWJsZQorICAgICAqLworICAgIHJldHVybiAoT0spOworfQorCisvKgorICogU2V0IGhpZGRlbiBmbGFnIGZvciAibmFtZSIuCisgKi8KKyAgICB2b2lkCittY2hfaGlkZShuYW1lKQorICAgIGNoYXJfdSAgKm5hbWU7Cit7CisgICAgLyoKKyAgICAgKiBUT0RPOiBIaWRlIHRoZSBmaWxlIHRocm91Z2h0IEZpbGVNYW5hZ2VyIEZBUSA4LTM0CisgICAgICoKKyAgICAgKiAgKm5hbWUgaXMgbWFjIHN0eWxlIHN0YXJ0IHdpdGggOiBmb3IgcmVsYXRpdmUKKyAgICAgKi8KK30KKworCisvKgorICogcmV0dXJuIFRSVUUgaWYgIm5hbWUiIGlzIGEgZGlyZWN0b3J5CisgKiByZXR1cm4gRkFMU0UgaWYgIm5hbWUiIGlzIG5vdCBhIGRpcmVjdG9yeQorICogcmV0dXJuIEZBTFNFIGZvciBlcnJvcgorICovCisgICAgaW50CittY2hfaXNkaXIobmFtZSkKKyAgICBjaGFyX3UgICpuYW1lOworeworICAgIC8qCisgICAgICogVE9ETzogRmluZCBvdXQgYnkgRmlsZU1hbmFnZXIgY2FsbHMgLi4uCisgICAgICovCisgICAgc3RydWN0IHN0YXQgc3RhdGI7CisKKyNpZiBkZWZpbmVkKFRBUkdFVF9BUElfTUFDX0NBUkJPTikgJiYgVEFSR0VUX0FQSV9NQUNfQ0FSQk9OCisgICAgLyogRm9yIHNvbWUgcmVhc29uIHRoZSBuYW1lIGlzIHNvbWV0aW1lcyBlbXB0eSwKKyAgICAgKiAoc3VjaCBhcyBmb3IgYSBub3QgeWV0IG5hbWVkIGZpbGUpLiBBbiBlbXB0eQorICAgICAqIGZpbGVuYW1lIGlzIGludGVycHJldGVkIGJ5IHRoZSBNYWNPUyB2ZXJzaW9uCisgICAgICogb2Ygc3RhdCAoYXQgbGVhc3QgdW5kZXIgQ29kZXdhcnJpb3IpIGFzIHRoZQorICAgICAqIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAqLworICAgIC8qIEFLIDIwMDIwNDEzCisgICAgICogVGhpcyBpcyByZXF1aXJlZCBmb3IgQ2FyYm9uIGJ1dCBicmVha3MgdGhlCisgICAgICogZXhwbG9yZXIgcGx1Z2luIGluIENsYXNzaWMKKyAgICAgKi8KKyAgICBpZiAobmFtZVswXSA9PSBOVUxMKQorCXJldHVybiBGQUxTRTsKKyNlbmRpZgorCisgICAgaWYgKHN0YXQoKGNoYXIgKiluYW1lLCAmc3RhdGIpKQorCXJldHVybiBGQUxTRTsKKyNpZiBkZWZpbmVkKF9fTVJDX18pIHx8IGRlZmluZWQoX19TQ19fKQorICAgIHJldHVybiBGQUxTRTsgICAvKiBkZWZpbml0ZWx5IFRPRE8gKi8KKyNlbHNlCisgICAgcmV0dXJuICgoc3RhdGIuc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUiA/IFRSVUUgOiBGQUxTRSk7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiAxIGlmICJuYW1lIiBjYW4gYmUgZXhlY3V0ZWQsIDAgaWYgbm90LgorICogUmV0dXJuIC0xIGlmIHVua25vd24uCisgKi8KKyAgICBpbnQKK21jaF9jYW5fZXhlKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIC8qIFRPRE8gKi8KKyAgICByZXR1cm4gLTE7Cit9CisjZW5kaWYKKworLyoKKyAqIENoZWNrIHdoYXQgIm5hbWUiIGlzOgorICogTk9ERV9OT1JNQUw6IGZpbGUgb3IgZGlyZWN0b3J5IChvciBkb2Vzbid0IGV4aXN0KQorICogTk9ERV9XUklUQUJMRTogd3JpdGFibGUgZGV2aWNlLCBzb2NrZXQsIGZpZm8sIGV0Yy4KKyAqIE5PREVfT1RIRVI6IG5vbi13cml0YWJsZSB0aGluZ3MKKyAqLworICAgIGludAorbWNoX25vZGV0eXBlKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIC8qIFRPRE8gKi8KKyAgICByZXR1cm4gTk9ERV9OT1JNQUw7Cit9CisKKyAgICB2b2lkCittY2hfZWFybHlfaW5pdCgpCit7Cit9CisKKyAgICB2b2lkCittY2hfZXhpdChyKQorICAgIGludCAgICAgcjsKK3sKKyAgICBkaXNwbGF5X2Vycm9ycygpOworCisgICAgbWxfY2xvc2VfYWxsKFRSVUUpOwkJLyogcmVtb3ZlIGFsbCBtZW1maWxlcyAqLworICAgIGV4aXQocik7Cit9CisKKworICAgIHZvaWQKK21jaF9zZXR0bW9kZSh0bW9kZSkKKyAgICBpbnQgICAgIHRtb2RlOworeworICAgIC8qCisgICAgICogVE9ETzogcmVtb3ZlIHRoZSBuZWVkcyBvZiBpdC4KKyAgICAgKi8KK30KKworI2lmZGVmIEZFQVRfTU9VU0UKKy8qCisgKiBzZXQgbW91c2UgY2xpY2tzIG9uIG9yIG9mZiAob25seSB3b3JrcyBmb3IgeHRlcm1zKQorICovCisgICAgdm9pZAorbWNoX3NldG1vdXNlKG9uKQorICAgIGludCAgICAgb247Cit7CisgICAgLyoKKyAgICAgKiBUT0RPOiByZW1vdmUgdGhlIG5lZWRzIG9mIGl0LgorICAgICAqLworfQorI2VuZGlmCisKKy8qCisgKiBzZXQgc2NyZWVuIG1vZGUsIGFsd2F5cyBmYWlscy4KKyAqLworICAgIGludAorbWNoX3NjcmVlbm1vZGUoYXJnKQorICAgIGNoYXJfdQkgKmFyZzsKK3sKKyAgICBFTVNHKF8oZV9zY3JlZW5tb2RlKSk7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKyAgICBpbnQKK21jaF9jYWxsX3NoZWxsKGNtZCwgb3B0aW9ucykKKyAgICBjaGFyX3UJKmNtZDsKKyAgICBpbnQJCW9wdGlvbnM7CS8qIFNIRUxMXyosIHNlZSB2aW0uaCAqLworeworICAgIC8qCisgICAgICogVE9ETzogZmluZCBhIHNoZWxsIG9yIHBzZXVkby1zaGVsbCB0byBjYWxsCisgICAgICogICAgICAgZm9yIHNvbWUgc2ltcGxlIHVzZWZ1bCBjb21tYW5kCisgICAgICovCisKKyAgICByZXR1cm4gKC0xKTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmICJwIiBjb250YWlucyBhIHdpbGRjYXJkIHRoYXQgY2FuIGJlIGV4cGFuZGVkIGJ5CisgKiBtY2hfZXhwYW5kcGF0aCgpLgorICovCisgICAgaW50CittY2hfaGFzX2V4cF93aWxkY2FyZChwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgeworCWlmICgqcCA9PSAnXFwnICYmIHBbMV0gIT0gTlVMKQorCSAgICArK3A7CisJZWxzZSBpZiAodmltX3N0cmNocigoY2hhcl91ICopV0lMRENIQVJfTElTVCwgKnApICE9IE5VTEwpCisJICAgIHJldHVybiBUUlVFOworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkgLSAxOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworICAgIGludAorbWNoX2hhc193aWxkY2FyZChwKQorICAgIGNoYXJfdQkqcDsKK3sKKyNpZmRlZiBVU0VfVU5JWEZJTEVOQU1FCisgICAgaWYgKCpwID09ICd+JyAmJiBwWzFdICE9IE5VTCkKKwlyZXR1cm4gVFJVRTsKKyNlbmRpZgorICAgIHJldHVybiBtY2hfaGFzX2V4cF93aWxkY2FyZChwKTsKK30KKworCisvKgorICogVGhpcyBwcm9jZWR1cmUgZHVwbGljYXRlIGEgZmlsZSwgaXQgaXMgdXNlZCBpbiBvcmRlciB0byBrZWVwCisgKiB0aGUgZm9vdHByaW50IG9mIHRoZSBwcmV2aW91cyBmaWxlLCB3aGVuIHNvbWUgaW5mbyBjYW4gYmUgZWFzaWx5CisgKiByZXN0b3JlZCB3aXRoIHNldF9wZXJtKCkuCisgKgorICogUmV0dXJuIC0xIGZvciBmYWlsdXJlLCAwIGZvciBzdWNjZXNzLgorICovCisgICAgaW50CittY2hfY29weV9maWxlKGZyb20sIHRvKQorICAgIGNoYXJfdSAqZnJvbTsKKyAgICBjaGFyX3UgKnRvOworeworICAgIGNoYXJfdSAgZnJvbV9zdHJbMjU2XTsKKyAgICBjaGFyX3UgIHRvX3N0clsyNTZdOworICAgIGNoYXJfdSAgdG9fbmFtZVsyNTZdOworCisgICAgSFBhcmFtQmxvY2tSZWMgcGFyYW1CbG9jazsKKyAgICBjaGFyX3UgICpjaGFyX3B0cjsKKyAgICBpbnQJICAgIGxlbjsKKworICAgIC8qCisgICAgICogQ29udmVydCBDIHN0cmluZyB0byBQYXNjYWwgc3RyaW5nCisgICAgICovCisgICAgIGNoYXJfcHRyID0gZnJvbTsKKyAgICAgbGVuID0gMTsKKyAgICAgZm9yICg7ICgqY2hhcl9wdHIgIT0gMCkgJiYgKGxlbiA8IDI1NSk7IGxlbisrLCBjaGFyX3B0cisrKQorCWZyb21fc3RyW2xlbl0gPSAqY2hhcl9wdHI7CisgICAgIGZyb21fc3RyWzBdID0gbGVuLTE7CisKKyAgICAgY2hhcl9wdHIgPSB0bzsKKyAgICAgbGVuID0gMTsKKyAgICAgZm9yICg7ICgqY2hhcl9wdHIgIT0gMCkgJiYgKGxlbiA8IDI1NSk7IGxlbisrLCBjaGFyX3B0cisrKQorCXRvX3N0cltsZW5dID0gKmNoYXJfcHRyOworICAgICB0b19zdHJbMF0gPSBsZW4tMTsKKworICAgIHBhcmFtQmxvY2suY29weVBhcmFtLmlvQ29tcGxldGlvbiA9IE5VTEw7CisgICAgcGFyYW1CbG9jay5jb3B5UGFyYW0uaW9OYW1lUHRyICAgID0gZnJvbV9zdHI7CisgLyogcGFyYW1CbG9jay5jb3B5UGFyYW0uaW9WUmVmbnVtICAgID0gIG92ZXJpZGVkIGJ5IGlvRmlsZW5hbWU7ICovCisgLyogcGFyYW1CbG9jay5jb3B5UGFyYW0uaW9EaXJJICAgICAgID0gIG92ZXJpZGVkIGJ5IGlvRmlsZW5hbWU7ICovCisKKyAgICBwYXJhbUJsb2NrLmNvcHlQYXJhbS5pb05ld05hbWUgICAgPSB0b19zdHI7CisgICAgcGFyYW1CbG9jay5jb3B5UGFyYW0uaW9Db3B5TmFtZSAgID0gdG9fbmFtZTsgICAgIC8qIE5JTCAqLworIC8qIHBhcmFtQmxvY2suY29weVBhcmFtLmlvRHN0VlJlZk51bSA9IG92ZXJpZGVkIGJ5IGlvTmV3TmFtZTsgICAqLworIC8qIHBhcmFtQmxvY2suY29weVBhcmFtLmlvTmV3RGlySUQgICA9IG92ZXJpZGVkIGJ5IGlvTmV3TmFtZTsgICAqLworCisKKworICAgIC8qCisgICAgICogRmlyc3QgZGVsZXRlIHRoZSAidG8iIGZpbGUsIHRoaXMgaXMgcmVxdWlyZWQgb24gc29tZSBzeXN0ZW1zIHRvIG1ha2UKKyAgICAgKiB0aGUgcmVuYW1lKCkgd29yaywgb24gb3RoZXIgc3lzdGVtcyBpdCBtYWtlcyBzdXJlIHRoYXQgd2UgZG9uJ3QgaGF2ZQorICAgICAqIHR3byBmaWxlcyB3aGVuIHRoZSByZW5hbWUoKSBmYWlscy4KKyAgICAgKi8KKyAgICBtY2hfcmVtb3ZlKHRvKTsKKworICAgIC8qCisgICAgICogRmlyc3QgdHJ5IGEgbm9ybWFsIHJlbmFtZSwgcmV0dXJuIGlmIGl0IHdvcmtzLgorICAgICAqLworICAgICh2b2lkKSBQQkhDb3B5RmlsZSgmcGFyYW1CbG9jaywgZmFsc2UpOworICAgIHJldHVybiAwOworCit9CisKKworICAgIGludAorbWNoX2NvcHlfZmlsZV9hdHRyaWJ1dGUoZnJvbSwgdG8pCisgICAgY2hhcl91ICpmcm9tOworICAgIGNoYXJfdSAqdG87Cit7CisgICAgRlNTcGVjICBmckZTU3BlYzsKKyAgICBGU1NwZWMgIHRvRlNTcGVjOworICAgIEZJbmZvICAgZm5kckluZm87CisgICAgIFN0cjI1NQluYW1lOworICAgICBSZXNUeXBlCXR5cGU7CisgICAgIFJlc1R5cGUJc2luazsKKyAgICAgSGFuZGxlCXJlc291cmNlOworICAgICBzaG9ydAlpZHhUeXBlczsKKyAgICAgc2hvcnQgICAgbmJUeXBlczsKKyAgICAgc2hvcnQJaWR4UmVzb3VyY2VzOworICAgICBzaG9ydAluYlJlc291cmNlczsKKyAgICAgc2hvcnQJSUQ7CisgICAgc2hvcnQgZnJSRmlkOworICAgIHNob3J0IHRvUkZpZDsKKyAgICBzaG9ydCBhdHRyc19vcmlnOworICAgIHNob3J0IGF0dHJzX2NvcHk7CisgICAgc2hvcnQgdGVtcDsKKworICAgIC8qIFRPRE86IEhhbmRsZSBlcnJvciAqLworICAgICh2b2lkKSBHZXRGU1NwZWNGcm9tUGF0aCAoZnJvbSwgJmZyRlNTcGVjKTsKKyAgICAodm9pZCkgR2V0RlNTcGVjRnJvbVBhdGggKHRvICAsICZ0b0ZTU3BlYyk7CisKKyAgICAvKiBDb3B5IHJlc291cmNlIGZvcmsgKi8KKyAgICB0ZW1wID0gMDsKKworI2lmIDEKKyAgICAgZnJSRmlkID0gRlNwT3BlblJlc0ZpbGUgKCZmckZTU3BlYywgZnNDdXJQZXJtKTsKKworICAgICBpZiAoZnJSRmlkICE9IC0xKQorICAgICB7CisJIEZTcENyZWF0ZVJlc0ZpbGUoJnRvRlNTcGVjLCAnVEVYVCcsIFVOS05PV05fQ1JFQVRPUiwgMCk7CisJIHRvUkZpZCA9IEZTcE9wZW5SZXNGaWxlICgmdG9GU1NwZWMsIGZzUmRXclBlcm0pOworCisJIFVzZVJlc0ZpbGUgKGZyUkZpZCk7CisKKwkgbmJUeXBlcyA9IENvdW50MVR5cGVzKCk7CisKKwkgZm9yIChpZHhUeXBlcyA9IDE7IGlkeFR5cGVzIDw9IG5iVHlwZXM7IGlkeFR5cGVzKyspCisJIHsKKwkgICBHZXQxSW5kVHlwZSAoJnR5cGUsIGlkeFR5cGVzKTsKKwkgICBuYlJlc291cmNlcyA9IENvdW50MVJlc291cmNlcyh0eXBlKTsKKworCSAgIGZvciAoaWR4UmVzb3VyY2VzID0gMTsgaWR4UmVzb3VyY2VzIDw9IG5iUmVzb3VyY2VzOyBpZHhSZXNvdXJjZXMrKykKKwkgICB7CisJICAgICBhdHRyc19vcmlnID0gMDsgLyogaW4gY2FzZSBHZXRSZXMgZmFpbHMgKi8KKwkgICAgIGF0dHJzX2NvcHkgPSAwOyAvKiBpbiBjYXNlIEdldFJlcyBmYWlscyAqLworCSAgICAgcmVzb3VyY2UgPSBHZXQxSW5kUmVzb3VyY2UodHlwZSwgaWR4UmVzb3VyY2VzKTsKKwkgICAgIEdldFJlc0luZm8gKHJlc291cmNlLCAmSUQsICZzaW5rLCBuYW1lKTsKKwkgICAgIEhMb2NrIChyZXNvdXJjZSk7CisJICAgICBhdHRyc19vcmlnID0gR2V0UmVzQXR0cnMgKHJlc291cmNlKTsKKwkgICAgIERldGFjaFJlc291cmNlIChyZXNvdXJjZSk7CisKKworCSAgICAgVXNlUmVzRmlsZSAodG9SRmlkKTsKKwkgICAgIEFkZFJlc291cmNlIChyZXNvdXJjZSwgdHlwZSwgSUQsIG5hbWUpOworCSAgICAgYXR0cnNfY29weSA9IEdldFJlc0F0dHJzIChyZXNvdXJjZSk7CisJICAgICBhdHRyc19jb3B5ID0gKGF0dHJzX2NvcHkgJiAweDIpIHwgKGF0dHJzX29yaWcgJiAweEZEKTsKKwkgICAgIFNldFJlc0F0dHJzIChyZXNvdXJjZSwgYXR0cnNfY29weSk7CisJICAgICBXcml0ZVJlc291cmNlIChyZXNvdXJjZSk7CisJICAgICBVcGRhdGVSZXNGaWxlICh0b1JGaWQpOworCisJICAgICB0ZW1wID0gR2V0UmVzQXR0cnMgKHJlc291cmNlKTsKKworCSAgICAgLypTZXRSZXNBdHRycyAocmVzb3VyY2UsIDApOyovCisJICAgICBIVW5sb2NrKHJlc291cmNlKTsKKwkgICAgIFJlbGVhc2VSZXNvdXJjZSAocmVzb3VyY2UpOworCSAgICAgVXNlUmVzRmlsZSAoZnJSRmlkKTsKKwkgICAgIH0KKwkgfQorCUNsb3NlUmVzRmlsZSAodG9SRmlkKTsKKwlDbG9zZVJlc0ZpbGUgKGZyUkZpZCk7CisgICAgfQorI2VuZGlmCisgICAgLyogQ29weSBGaW5kZXIgSW5mbyAqLworICAgICh2b2lkKSBGU3BHZXRGSW5mbyAoJmZyRlNTcGVjLCAmZm5kckluZm8pOworICAgICh2b2lkKSBGU3BTZXRGSW5mbyAoJnRvRlNTcGVjLCAmZm5kckluZm8pOworCisgICAgcmV0dXJuICh0ZW1wID09IGF0dHJzX2NvcHkpOworfQorCisgICAgaW50CittY2hfaGFzX3Jlc291cmNlX2ZvcmsgKGZpbGUpCisgICAgY2hhcl91ICpmaWxlOworeworICAgIEZTU3BlYyAgZmlsZUZTU3BlYzsKKyAgICBzaG9ydCBmaWxlUkZpZDsKKworICAgIC8qIFRPRE86IEhhbmRsZSBlcnJvciAqLworICAgICh2b2lkKSBHZXRGU1NwZWNGcm9tUGF0aCAoZmlsZSwgJmZpbGVGU1NwZWMpOworICAgIGZpbGVSRmlkID0gRlNwT3BlblJlc0ZpbGUgKCZmaWxlRlNTcGVjLCBmc0N1clBlcm0pOworICAgIGlmIChmaWxlUkZpZCAhPSAtMSkKKwlDbG9zZVJlc0ZpbGUgKGZpbGVSRmlkKTsKKworICAgIHJldHVybiAoZmlsZVJGaWQgIT0gLTEpOworfQorCisgICAgaW50CittY2hfZ2V0X3NoZWxsc2l6ZSh2b2lkKQoreworICAgIC8qIG5ldmVyIHVzZWQgKi8KKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICB2b2lkCittY2hfc2V0X3NoZWxsc2l6ZSh2b2lkKQoreworICAgIC8qIG5ldmVyIHVzZWQgKi8KK30KKworLyoKKyAqIFJvd3MgYW5kL29yIENvbHVtbnMgaGFzIGNoYW5nZWQuCisgKi8KKyAgICB2b2lkCittY2hfbmV3X3NoZWxsc2l6ZSh2b2lkKQoreworICAgIC8qIG5ldmVyIHVzZWQgKi8KK30KKworLyoKKyAqIFRob3NlIGZ1bmN0aW9uIHdlcmUgc2V0IGFzICNkZWZpbmUgYmVmb3JlLCBidXQgaW4gb3JkZXIKKyAqIHRvIGFsbG93IGFuIGVhc2llciB1cyBvZiBvc191bml4LmMgZm9yIHRoZSBNYWNPUyBYIHBvcnQsCisgKiB0aGV5IGFyZSBjaGFuZ2UgdG8gcHJvY2VkdXJlLiBUaGVjIG9tcGlsZSB3aG91bGQgb3B0aW1pemUKKyAqIHRoZW0gb3V0LgorICovCisKKyAgICBpbnQKK21jaF9jYW5fcmVzdG9yZV90aXRsZSgpCit7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyAgICBpbnQKK21jaF9jYW5fcmVzdG9yZV9pY29uKCkKK3sKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAqIElmIHRoZSBtYWNoaW5lIGhhcyBqb2IgY29udHJvbCwgdXNlIGl0IHRvIHN1c3BlbmQgdGhlIHByb2dyYW0sCisgKiBvdGhlcndpc2UgZmFrZSBpdCBieSBzdGFydGluZyBhIG5ldyBzaGVsbC4KKyAqLworICAgIHZvaWQKK21jaF9zdXNwZW5kKCkKK3sKKyAgICAvKiBUT0RPOiBnZXQgY2FsbGUgaW4gI2lmbmRlZiBOT19DT05TT0xFICovCisgICAgZ3VpX21jaF9pY29uaWZ5KCk7Cit9OworCmRpZmYgLS1naXQgYS9zcmMvb3NfbWFjLmggYi9zcmMvb3NfbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5MTc2OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc19tYWMuaApAQCAtMCwwICsxLDQxMSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworLyogQmVmb3JlIEluY2x1ZGluZyB0aGUgTWFjT1Mgc3BlY2lmaWMgZmlsZXMsCisgKiBsZXRzIHNldCB0aGUgT1BBUVVFX1RPT0xCT1hfU1RSVUNUUyB0byAwIHNvIHdlCisgKiBjYW4gYWNjZXNzIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgorICogKFVudGlsIGZ1bGx5IENhcmJvbiBjb21wbGlhbnQpCisgKiBUT0RPOiBDYW4gd2UgcmVtb3ZlIHRoaXM/IChEYW55KQorICovCisjaWYgMAorIyBkZWZpbmUgT1BBUVVFX1RPT0xCT1hfU1RSVUNUUyAwCisjZW5kaWYKKworLyoKKyAqIE1hY2ludG9zaCBtYWNoaW5lLWRlcGVuZGVudCB0aGluZ3MuCisgKi8KKyNpbmNsdWRlIDxRdWlja0RyYXcuaD4KKyNpbmNsdWRlIDxUb29sVXRpbHMuaD4KKyNpbmNsdWRlIDxMb3dNZW0uaD4KKyNpbmNsdWRlIDxTY3JhcC5oPgorI2luY2x1ZGUgPFNvdW5kLmg+CisjaW5jbHVkZSA8VGV4dFV0aWxzLmg+CisjaW5jbHVkZSA8TWVtb3J5Lmg+CisjaW5jbHVkZSA8T1NVdGlscy5oPgorI2luY2x1ZGUgPEZpbGVzLmg+CisjaWZkZWYgRkVBVF9NQllURQorIyBpbmNsdWRlIDxTY3JpcHQuaD4KKyNlbmRpZgorCisvKgorICogVW5peCBpbnRlcmZhY2UKKyAqLworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgLyogZm9yIENvZGVXYXJyaW9yICovCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBpbmNsdWRlIDx1dHNuYW1lLmg+CisjIGluY2x1ZGUgPHVuaXguaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9DQ19fKSAvKiBmb3IgUHJvamVjdCBCdWlsZGVyIGFuZCAuLi4gKi8KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKy8qIEdldCBzdGF0Lmggb3Igc29tZXRoaW5nIHNpbWlsYXIuIENvbW1lbnQ6IEhvdyBjb21lIHNvbWUgT1MgZ2V0IGluIGluIHZpbS5oICovCisjaWYgZGVmaW5lZChfX01XRVJLU19fKQorIyBpbmNsdWRlIDxzdGF0Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfQ0NfXykKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoX19NUkNfXykgfHwgZGVmaW5lZChfX1NDX18pIC8qIGZvciBBcHBsZSBNUFcgQ29tcGlsZXJzICovCisvKiBUaGVyZSdzIG5vIHN0YXQuaCBmb3IgTVBXPyAqLworIyBpZmRlZiBwb3dlcmMKKyMgIHByYWdtYSBvcHRpb25zIGFsaWduPXBvd2VyCisjIGVuZGlmCisgIHN0cnVjdCBzdGF0CisgIHsKKyAgICBVSW50MzIgc3RfbXRpbWU7CisgICAgVUludDMyIHN0X21vZGU7CisgICAgVUludDMyIHN0X3NpemU7CisgIH07CisjIGlmZGVmIHBvd2VyYworIyAgcHJhZ21hIG9wdGlvbnMgYWxpZ249cmVzZXQKKyMgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9DQ19fKSAvKiAmJiBkZWZpbmVkKEhBVkVfQ1VSU0UpICovCisvKiBUaGUgY3Vyc2VzLmggZnJvbSBNYWNPUyBYIHByb3ZpZGVzIGJ5IGRlZmF1bHQgc29tZSBCQUNLV0FSRCBjb21wYXRpYmlsdHkKKyAqIGRlZmluaXRpb24gd2hpY2ggY2FuIGNhdXNlIHVzIHByb2JsZW0gbGF0ZXIgb24uIFNvIHdlIHVuZGVmaW5lIGEgZmV3IG9mIHRoZW0uICovCisjIGluY2x1ZGUgPGN1cnNlcy5oPgorIyB1bmRlZiByZWcKKyMgdW5kZWYgb3NwZWVkCisvKiBPSyBkZWZpbmVkIHRvIDAgaW4gTWFjT1MgWCAxMC4yIGN1cnNlcyEgIFJlbW92ZSBpdCwgd2UgZGVmaW5lIGl0IHRvIGJlIDEuICovCisjIHVuZGVmIE9LCisjZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIE1BQ09TX1gKKyMgaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKworLyoKKyAqIEluY29tcGF0aWJpbGl0eSBjaGVja3MKKyAqLworCisvKiBHb3QgcHJvYmxlbSB0cnlpbmcgdG8gdXNlIHNoYXJlZCBsaWJyYXJ5IGluIDY4ayAqLworI2lmICFkZWZpbmVkKF9fUE9XRVJQQ19fKSAmJiBkZWZpbmVkKEZFQVRfUFlUSE9OKQorIyB1bmRlZiBGRUFUX1BZVEhPTgorIyB3YXJuaW5nIEF1dG8tZGlzYWJsaW5nIFB5dGhvbi4gTm90IHlldCBzdXBwb3J0ZWQgaW4gNjhrLgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1BPV0VSUENfXykgJiYgIWRlZmluZWQoX19wcGNfXykKKyMgaWYgIV9fb3B0aW9uKGVudW1zYWx3YXlzaW50KQorIyAgZXJyb3IgIllvdSBtdXN0IGNvbXBpbGUgd2l0aCBlbnVtcyBhbHdheXMgaW50ISIKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiAhZGVmaW5lZChfX2ZvdXJieXRlaW50c19fKQorIyAgZXJyb3IgIllvdSBtdXN0IGNvbXBpbGUgdGhlIHByb2plY3Qgd2l0aCA0LWJ5dGUgaW50cyIKKy8qIE1QVyBpbnRzIGFyZSBhbHdheXMgNCBieXRlIGxvbmcgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogTWFjT1Mgc3BlY2lmaWMgI2RlZmluZQorICovCisKKy8qIFRoaXMgd2lsbCBnbyBhd2F5IHdoZW4gQ01EX0tFWSBmdWxseSB0ZXN0ZWQgKi8KKyNkZWZpbmUgVVNFX0NNRF9LRVkKKy8qIE9uIE1hY09TIFggdXNlIHRoZSAvIG5vdCB0aGUgOiAqLworLyogVE9ETzogU2hvdWxkIGZpbGUgc3VjaCBhcyB+Ly52aW1yYyByZXNpZGUgaW5zdGVhZCBpbgorICogICAgICAgfi9MaWJyYXJ5L1ZpbSBvciB+L0xpYnJhcnkvUHJlZmVyZW5jZXMvb3JnLnZpbS52aW0vID8gKERhbnkpCisgKi8KKy8qIFdoZW4gY29tcGlsZWQgdW5kZXIgTWFjT1MgWCAoaW5jbHVkaW5nIENBUkJPTiB2ZXJzaW9uKQorICogd2UgdXNlIHRoZSBVbml4IEZpbGUgcGF0aCBzdHlsZSAqLworI2lmIGRlZmluZWQoVEFSR0VUX0FQSV9NQUNfT1NYKSAmJiBUQVJHRVRfQVBJX01BQ19PU1gKKyMgdW5kZWYgQ09MT05fQVNfUEFUSFNFUAorIyBkZWZpbmUgVVNFX1VOSVhGSUxFTkFNRQorI2Vsc2UKKyMgZGVmaW5lIENPTE9OX0FTX1BBVEhTRVAKKyMgZGVmaW5lIERPTlRfQUREX1BBVEhTRVBfVE9fRElSCisjZW5kaWYKKworCisvKgorICogR2VuZXJpYyBWaW0gI2RlZmluZQorICovCisKKyNkZWZpbmUgRkVBVF9TT1VSQ0VfRkZTCisjZGVmaW5lIEZFQVRfU09VUkNFX0ZGX01BQworCisjZGVmaW5lIFVTRV9FWEVfTkFNRQkJICAgIC8qIHRvIGZpbmQgICRWSU0gKi8KKyNkZWZpbmUgQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRSAgIC8qIGlnbm9yZSBjYXNlIHdoZW4gY29tcGFyaW5nIGZpbGUgbmFtZXMgKi8KKyNkZWZpbmUgU1BBQ0VfSU5fRklMRU5BTUUKKyNkZWZpbmUgQlJFQUtDSEVDS19TS0lQCSAgIDMyCSAgICAvKiBjYWxsIG1jaF9icmVha2NoZWNrKCkgZWFjaCB0aW1lLCBpdCdzCisJCQkJICAgICAgIHF1aXRlIGZhc3QuIERpZCBJIGZvcmdvdCB0byB1cGRhdGUgdGhlIGNvbW1lbnQgKi8KKworCisjdW5kZWYgIFVTRV9GTkFNRV9DQVNFCSAgICAvKiBTbyB0aGF0IDplIG9zX01hYy5jLCA6dywgc2F2ZSBiYWNrIHRoZSBmaWxlIGFzIG9zX21hYy5jICovCisjZGVmaW5lIEJJTkFSWV9GSUxFX0lPCisjZGVmaW5lIEVPTF9ERUZBVUxUIEVPTF9NQUMKKyNpZm5kZWYgTUFDT1NfWF9VTklYCSAgICAvKiBJIGhvcGUgdGhhdCBzd2l0Y2hpbmcgdGhlc2UgdHdvIGxpbmVzICovCisjIGRlZmluZSBVU0VfQ1IJCSAgICAvKiBkb2VzIHdoYXQgSSB3YW50IC0tIEJORiAqLworIyBkZWZpbmUgTk9fQ09OU09MRQkJLyogZG9uJ3QgaW5jbHVkZSBjb25zb2xlIG1vZGUgKi8KKyNlbmRpZgorI2RlZmluZSBIQVZFX0FWQUlMX01FTQorCisjaWZuZGVmIEhBVkVfQ09ORklHX0gKKy8qICNkZWZpbmUgU1lOQ19EVVBfQ0xPU0UJICAgc3luYygpIGEgZmlsZSB3aXRoIGR1cCgpIGFuZCBjbG9zZSgpICovCisjIGRlZmluZSBIQVZFX1NUUklOR19ICisjIGRlZmluZSBIQVZFX1NUUkNTUE4KKyMgZGVmaW5lIEhBVkVfTUVNU0VUCisjIGRlZmluZSBVU0VfVE1QTkFNCQkvKiB1c2UgdG1wbmFtKCkgaW5zdGVhZCBvZiBta3RlbXAoKSAqLworIyBkZWZpbmUgSEFWRV9GQ05UTF9ICisjIGRlZmluZSBIQVZFX1FTT1JUCisjIGRlZmluZSBIQVZFX1NUX01PREUJCS8qIGhhdmUgc3RhdC5zdF9tb2RlICovCisKKyMgaWYgZGVmaW5lZChfX0RBVEVfXykgJiYgZGVmaW5lZChfX1RJTUVfXykKKyMgIGRlZmluZSBIQVZFX0RBVEVfVElNRQorIyBlbmRpZgorIyBkZWZpbmUgSEFWRV9TVFJGVElNRQorI2VuZGlmCisKKworLyoKKyAqIE5hbWVzIGZvciB0aGUgRVhSQywgSEVMUCBhbmQgdGVtcG9yYXJ5IGZpbGVzLgorICogU29tZSBvZiB0aGVzZSBtYXkgaGF2ZSBiZWVuIGRlZmluZWQgaW4gdGhlIG1ha2VmaWxlLgorICovCisKKyNpZm5kZWYgU1lTX1ZJTVJDX0ZJTEUKKyMgaWZkZWYgQ09MT05fQVNfUEFUSFNFUAorIyAgZGVmaW5lIFNZU19WSU1SQ19GSUxFICIkVklNOnZpbXJjIgorIyBlbHNlCisjICBkZWZpbmUgU1lTX1ZJTVJDX0ZJTEUgIiRWSU0vdmltcmMiCisjIGVuZGlmCisjZW5kaWYKKyNpZm5kZWYgU1lTX0dWSU1SQ19GSUxFCisjIGlmZGVmIENPTE9OX0FTX1BBVEhTRVAKKyMgIGRlZmluZSBTWVNfR1ZJTVJDX0ZJTEUgIiRWSU06Z3ZpbXJjIgorIyBlbHNlCisjICBkZWZpbmUgU1lTX0dWSU1SQ19GSUxFICIkVklNL2d2aW1yYyIKKyMgZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBTWVNfTUVOVV9GSUxFCisjIGlmZGVmIENPTE9OX0FTX1BBVEhTRVAKKyMgIGRlZmluZSBTWVNfTUVOVV9GSUxFCSIkVklNUlVOVElNRTptZW51LnZpbSIKKyMgZWxzZQorIyAgZGVmaW5lIFNZU19NRU5VX0ZJTEUJIiRWSU1SVU5USU1FL21lbnUudmltIgorIyBlbmRpZgorI2VuZGlmCisjaWZuZGVmIFNZU19PUFRXSU5fRklMRQorIyBpZmRlZiBDT0xPTl9BU19QQVRIU0VQCisjICBkZWZpbmUgU1lTX09QVFdJTl9GSUxFICIkVklNUlVOVElNRTpvcHR3aW4udmltIgorIyBlbHNlCisjICBkZWZpbmUgU1lTX09QVFdJTl9GSUxFICIkVklNUlVOVElNRS9vcHR3aW4udmltIgorIyBlbmRpZgorI2VuZGlmCisjaWZuZGVmIEVWSU1fRklMRQorIyBpZmRlZiBDT0xPTl9BU19QQVRIU0VQCisjICBkZWZpbmUgRVZJTV9GSUxFCSIkVklNUlVOVElNRTpldmltLnZpbSIKKyMgZWxzZQorIyAgZGVmaW5lIEVWSU1fRklMRQkiJFZJTVJVTlRJTUUvZXZpbS52aW0iCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJCisjIGlmbmRlZiBVU1JfR1ZJTVJDX0ZJTEUKKyMgIGlmZGVmIENPTE9OX0FTX1BBVEhTRVAKKyMgICBkZWZpbmUgVVNSX0dWSU1SQ19GSUxFICIkVklNOi5ndmltcmMiCisjICBlbHNlCisjICAgZGVmaW5lIFVTUl9HVklNUkNfRklMRSAifi8uZ3ZpbXJjIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIEdWSU1SQ19GSUxFCisjICBkZWZpbmUgR1ZJTVJDX0ZJTEUJIl9ndmltcmMiCisjIGVuZGlmCisjZW5kaWYKKyNpZm5kZWYgVVNSX1ZJTVJDX0ZJTEUKKyMgaWZkZWYgQ09MT05fQVNfUEFUSFNFUAorIyAgZGVmaW5lIFVTUl9WSU1SQ19GSUxFCSIkVklNOi52aW1yYyIKKyMgZWxzZQorIyAgZGVmaW5lIFVTUl9WSU1SQ19GSUxFCSJ+Ly52aW1yYyIKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFVTUl9FWFJDX0ZJTEUKKyMgaWZkZWYgQ09MT05fQVNfUEFUSFNFUAorIyAgZGVmaW5lIFVTUl9FWFJDX0ZJTEUJIiRWSU06LmV4cmMiCisjIGVsc2UKKyMgIGRlZmluZSBVU1JfRVhSQ19GSUxFCSJ+Ly5leHJjIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgVklNUkNfRklMRQorIyBkZWZpbmUgVklNUkNfRklMRQkiX3ZpbXJjIgorI2VuZGlmCisKKyNpZm5kZWYgRVhSQ19GSUxFCisjIGRlZmluZSBFWFJDX0ZJTEUJIl9leHJjIgorI2VuZGlmCisKKyNpZm5kZWYgREZMVF9IRUxQRklMRQorIyBpZmRlZiBDT0xPTl9BU19QQVRIU0VQCisjICBkZWZpbmUgREZMVF9IRUxQRklMRQkiJFZJTVJVTlRJTUU6ZG9jOmhlbHAudHh0IgorIyBlbHNlCisjICBkZWZpbmUgREZMVF9IRUxQRklMRQkiJFZJTVJVTlRJTUUvZG9jL2hlbHAudHh0IgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRklMRVRZUEVfRklMRQorIyBkZWZpbmUgRklMRVRZUEVfRklMRQkiZmlsZXR5cGUudmltIgorI2VuZGlmCisjaWZuZGVmIEZUUExVR0lOX0ZJTEUKKyMgZGVmaW5lIEZUUExVR0lOX0ZJTEUJImZ0cGx1Z2luLnZpbSIKKyNlbmRpZgorI2lmbmRlZiBJTkRFTlRfRklMRQorIyBkZWZpbmUgSU5ERU5UX0ZJTEUJImluZGVudC52aW0iCisjZW5kaWYKKyNpZm5kZWYgRlRPRkZfRklMRQorIyBkZWZpbmUgRlRPRkZfRklMRQkiZnRvZmYudmltIgorI2VuZGlmCisjaWZuZGVmIEZUUExVR09GX0ZJTEUKKyMgZGVmaW5lIEZUUExVR09GX0ZJTEUJImZ0cGx1Z29mLnZpbSIKKyNlbmRpZgorI2lmbmRlZiBJTkRPRkZfRklMRQorIyBkZWZpbmUgSU5ET0ZGX0ZJTEUJImluZG9mZi52aW0iCisjZW5kaWYKKworI2lmbmRlZiBTWU5UQVhfRk5BTUUKKyMgaWZkZWYgQ09MT05fQVNfUEFUSFNFUAorIyAgZGVmaW5lIFNZTlRBWF9GTkFNRQkiJFZJTVJVTlRJTUU6c3ludGF4OiVzLnZpbSIKKyMgZWxzZQorIyAgZGVmaW5lIFNZTlRBWF9GTkFNRQkiJFZJTVJVTlRJTUUvc3ludGF4LyVzLnZpbSIKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9WSU1JTkZPCisjIGlmbmRlZiBWSU1JTkZPX0ZJTEUKKyMgIGlmZGVmIENPTE9OX0FTX1BBVEhTRVAKKyMgICBkZWZpbmUgVklNSU5GT19GSUxFCSIkVklNOnZpbWluZm8iCisjICBlbHNlCisjICAgZGVmaW5lIFZJTUlORk9fRklMRQkifi8udmltaW5mbyIKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogRkVBVF9WSU1JTkZPICovCisKKyNpZm5kZWYgREZMVF9CRElSCisjIGRlZmluZSBERkxUX0JESVIJIi4iCS8qIGRlZmF1bHQgZm9yICdiYWNrdXBkaXInICovCisjZW5kaWYKKworI2lmbmRlZiBERkxUX0RJUgorIyBkZWZpbmUgREZMVF9ESVIJIi4iCS8qIGRlZmF1bHQgZm9yICdkaXJlY3RvcnknICovCisjZW5kaWYKKworI2lmbmRlZiBERkxUX1ZESVIKKyMgaWZkZWYgQ09MT05fQVNfUEFUSFNFUAorIyAgZGVmaW5lIERGTFRfVkRJUgkiJFZJTTp2aW1maWxlczp2aWV3IgkvKiBkZWZhdWx0IGZvciAndmlld2RpcicgKi8KKyMgZWxzZQorIyAgZGVmaW5lIERGTFRfVkRJUgkiJFZJTS92aW1maWxlcy92aWV3IgkvKiBkZWZhdWx0IGZvciAndmlld2RpcicgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIERGTFRfRVJST1JGSUxFCQkiZXJyb3JzLmVyciIKKyNpZmRlZiBDT0xPTl9BU19QQVRIU0VQCisjIGRlZmluZSBERkxUX1JVTlRJTUVQQVRICSIkVklNOnZpbWZpbGVzLCRWSU1SVU5USU1FLCRWSU06dmltZmlsZXM6YWZ0ZXIiCisjZWxzZQorIyBkZWZpbmUgREZMVF9SVU5USU1FUEFUSAkifi8udmltLCRWSU0vdmltZmlsZXMsJFZJTVJVTlRJTUUsJFZJTS92aW1maWxlcy9hZnRlcix+Ly52aW0vYWZ0ZXIiCisjZW5kaWYKKworLyoKKyAqIE1hY2ludG9zaCBoYXMgcGxlbnR5IG9mIG1lbW9yeSwgdXNlIGxhcmdlIGJ1ZmZlcnMKKyAqLworI2RlZmluZSBDTURCVUZGU0laRSAxMDI0CS8qIHNpemUgb2YgdGhlIGNvbW1hbmQgcHJvY2Vzc2luZyBidWZmZXIgKi8KKworI2lmIGRlZmluZWQoTUFDT1NfWF9VTklYKQorIyBkZWZpbmUgTUFYUEFUSEwJMTAyNAorIyBkZWZpbmUgQkFTRU5BTUVMRU4JKE1BWE5BTUxFTiAtIDUpCS8qIGxlbmd0aCBvZiBiYXNlIG9mIGZpbGVuYW1lICovCisjZWxzZQorIyBkZWZpbmUgTUFYUEFUSEwJMjU2CQkvKiBMaW1pdGVkIGJ5IHRoZSBQYXNjYWwgU3RyaW5ncyAqLworIyBkZWZpbmUgQkFTRU5BTUVMRU4JKDMyLTUtMSkJLyogbGVuZ3RoIG9mIGJhc2Ugb2YgZmlsZW5hbWUgKi8KKyNlbmRpZgorCisjaWZuZGVmIERGTFRfTUFYTUVNCisjIGRlZmluZSBERkxUX01BWE1FTQk1MTIJLyogdXNlIHVwIHRvICA1MTIgS2J5dGUgZm9yIGJ1ZmZlciAqLworI2VuZGlmCisKKyNpZm5kZWYgREZMVF9NQVhNRU1UT1QKKyMgZGVmaW5lIERGTFRfTUFYTUVNVE9UCTIwNDgJLyogdXNlIHVwIHRvIDIwNDggS2J5dGUgZm9yIFZpbSAqLworI2VuZGlmCisKKyNkZWZpbmUgV0lMRENIQVJfTElTVCAiKj9be2AkIgorCisvKioqKioqKioqKioqKiovCisjZGVmaW5lIG1jaF9yZW5hbWUoc3JjLCBkc3QpIHJlbmFtZShzcmMsIGRzdCkKKyNkZWZpbmUgbWNoX3JlbW92ZSh4KSB1bmxpbmsoKGNoYXIgKikoeCkpCisjaWZuZGVmIG1jaF9nZXRlbnYKKyMgaWYgZGVmaW5lZChfX01SQ19fKSB8fCBkZWZpbmVkKF9fU0NfXykKKyMgIGRlZmluZSBtY2hfZ2V0ZW52KG5hbWUpICAoKGNoYXJfdSAqKWdldGVudigoY2hhciAqKShuYW1lKSkpCisjICBkZWZpbmUgbWNoX3NldGVudihuYW1lLCB2YWwsIHgpIHNldGVudigobmFtZSksICh2YWwpKQorIyBlbGlmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyAgZGVmaW5lIG1jaF9nZXRlbnYobmFtZSkgICgoY2hhcl91ICopZ2V0ZW52KChjaGFyICopKG5hbWUpKSkKKy8qIyBkZWZpbmUgbWNoX3NldGVudihuYW1lLCB2YWwsIHgpIHNldGVudigobmFtZSksICh2YWwpKSAqLyAvKiBPYnNvbGV0ZWQgYnkgRGFueSBvbiBPY3QgMzAsIDIwMDEgKi8KKyMgIGRlZmluZSBtY2hfc2V0ZW52KG5hbWUsIHZhbCwgeCkgc2V0ZW52KG5hbWUsIHZhbCwgeCkKKyMgZWxzZQorICAvKiB2aW1fZ2V0ZW52KCkgaXMgaW4gcHR5LmMgKi8KKyMgIGRlZmluZSBVU0VfVklNUFRZX0dFVEVOVgorIyAgZGVmaW5lIG1jaF9nZXRlbnYoeCkgdmltcHR5X2dldGVudih4KQorIyAgZGVmaW5lIG1jaF9zZXRlbnYobmFtZSwgdmFsLCB4KSBzZXRlbnYobmFtZSwgdmFsLCB4KQorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9DT05GSUdfSAorIyBpZmRlZiBfX0FQUExFX0NDX18KKy8qIEFzc3VtaW5nIGNvbXBpbGluZyBmb3IgTWFjT1MgWCAqLworLyogVHJ5aW5nIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBwcmViaW5kaW5nICovCisjICBkZWZpbmUgSEFWRV9UR0VURU5UCisjICBkZWZpbmUgT1NQRUVEX0VYVEVSTgorIyAgZGVmaW5lIFVQX0JDX1BDX0VYVEVSTgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFNvbWUgInByZXAgd29yayIgZGVmaW5pdGlvbiB0byBiZSBhYmxlIHRvIGNvbXBpbGUgdGhlIE1hY09TIFgKKyAqIHZlcnNpb24gd2l0aCBvc191bml4LnggaW5zdGVhZCBvZiBvc19tYWMuYy4gQmFzZWQgb24gdGhlIHJlc3VsdAorICogb2YgLi9jb25maWd1cmUgZm9yIGNvbnNvbGUgTWFjT1MgWC4KKyAqLworCisjaWZkZWYgTUFDT1NfWF9VTklYCisjIGRlZmluZSBTSUdQUk9UT0FSRwkoaW50KQorIyBkZWZpbmUgU0lHREVGQVJHKHMpCShzKSBpbnQgczsKKyMgZGVmaW5lIFNJR0RVTU1ZQVJHCTAKKyMgdW5kZWYgIEhBVkVfQVZBSUxfTUVNCisjIGlmbmRlZiBIQVZFX0NPTkZJR19ICisjICBkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCisjICBkZWZpbmUgU0lHUkVUVVJOICByZXR1cm4KKy8qIyBkZWZpbmUgVVNFX1NZU1RFTSAqLyAgLyogT3V0cHV0IHNoaXAgZG8gZGVidWdnZXIgOigsIGJ1dCBvdCBjb21waWxlICovCisjICBkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDEgLyogQXR0ZW1wdCAqLworIyAgZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEKKyMgIGRlZmluZSBTWVNfU0VMRUNUX1dJVEhfU1lTX1RJTUUgMQorIyAgZGVmaW5lIEhBVkVfU0VMRUNUIDEKKyMgIGRlZmluZSBIQVZFX1NZU19TRUxFQ1RfSCAxCisjICBkZWZpbmUgSEFWRV9QVVRFTlYKKyMgIGRlZmluZSBIQVZFX1NFVEVOVgorIyAgZGVmaW5lIEhBVkVfUkVOQU1FCisjIGVuZGlmCisjIGRlZmluZSBtY2hfY2hkaXIocykgY2hkaXIocykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQUNPU19YKSAmJiAhZGVmaW5lZChIQVZFX0NPTkZJR19IKQorIyBkZWZpbmUgSEFWRV9QVVRFTlYKKyNlbmRpZgorCisvKiBBIE1hYyBjb25zdGFudCBjYXVzaW5nIGJpZyBwcm9ibGVtIHRvIHN5bnRheCBoaWdobGlnaHRpbmcgKi8KKyNkZWZpbmUgVU5LTk9XTl9DUkVBVE9SICdcP1w/XD9cPycKKworLyoKKyAqIGZvciBkZWJ1Z2dpbmcKKyAqLworI2lmZGVmIE1BQ09TX1gKKyMgaWZkZWYgX0RFQlVHCisjICBkZWZpbmUgVFJBQ0UJCQlUcmFjZQorICAgdm9pZCBUcmFjZShjaGFyICpmbXQsIC4uLik7CisjIGVsc2UKKyMgIGRlZmluZSBUUkFDRQkJCTEgPyAodm9pZCkwIDogcHJpbnRmCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIE1BQ09TX0NMQVNTSUMKKyMgIGRlZmluZSBUUkFDRQkJCTEgPyAoaW50KTAgOiBwcmludGYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29zX21hYy5yc3IuaHF4IGIvc3JjL29zX21hYy5yc3IuaHF4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTk5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3NfbWFjLnJzci5ocXgKQEAgLTAsMCArMSw2NTkgQEAKKyhUaGlzIGZpbGUgbXVzdCBiZSBjb252ZXJ0ZWQgd2l0aCBCaW5IZXggNC4wKQorCis6JCdHZUQ5cFlCQC1aRlIwYkJgIjU4ZSokOFAwJjQhJSEhISEhISEhIUhVVWslYCEhISEhIiEhISFHSlghISg4CissISEhJVJgISEkRWQsRWgwSUdjLWJDJ2FYLFEtIyEhISE5JTlCOSUwQTU4OCIhMnJyI2hDVEU5IjMzYmpiRmgqCitNRkxlJUVmWWVFQDlaRyc5UEVMIiVCQTRQRVI4ISEoKmNGUTA1OGQ5JSEzbHJycnJyISEhISEhISEhISEhISEhCishISEhISEhISFYM04xYSEhISEhISEhJSctISEhISEhISEhISE0ISEhISRFZCxFaDBJR2MtYkNBS1AsUS0jISEhCishOSU5QjklMEE1ODgiITJycnJybSEhISEhJE5OISEhISEkaGkhISUpISEhISEhISEhISEhISEsI2A4MURgWCYkCitRISEhISEhISEhISEhISEhISEhISEhISEhISEhISEnNlkhISUhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhMyEhISEhI2FANThkSyEhISEhOEM1NDhCISFKISEhKSEhITMjIiEhKSFKTlAkNkwtISFKISEhKSkhITMjCiskISEpISEhISEhIUciOCYiLSEhISEhISEhImU0JkAmMyEhMyEhISEhKCtMU1UrSiEjISEhISFKISEhMnJycnJyCitycnJycnJybSEhISEhISEkbSQhYC0kIWAtJCFgMm0hISEhISEhbS0kIWAtRSFgLSQhY3BtISEhISEhMmAtJCFgCistJCFgLSQhcjBtISEhISEkYGFYJCdhWENKQi0kMiQwbSEhISEhciFCLSJKQiciSkItJHJycm0hISEhMiQhQickCisnYVhFJ2AtJCFjWyEhISEkbSQnYVgiSkInIkpgLSQhbGAhISEhbS0kJ2AtRSdhWEUhYC0kMW0hISEhMmAtJCFgCistJCFgLSQhYC0kWyEhISEkYGAtJCFgLSQhYC0kIWAtbGAhISEhciFgLSQhYC0kIWAtJCFgMW0hISEhMiQhYC0kCishYC0kIWAtJCFjWyEhISEkbSQhYC0kIWAtJCFgLSQhbGAhISEhbS0kIWAtJCFgLSQhYC0kMW0hISEhMmAtQ0pCCistJCFgLSQhYC0kWyEhISEkYGFYQ0pgLSQhYC0kIWAtbGAhISEhciFgLSQhYC0kIWAtJCFgMW0hISEhMiQhYC0kCishYC0kIWAtJCFjWyEhISEkbSQhYC0kIWAtJCFgLSQhbGAhISEhbS0kIWAtJCFgLSQhYC0kMW0hISEhMmAtJCFgCistJCFgLSQhYC0kWyEhISEkYGAtJCFgLSQhYC0kIWAtbGAhISEhciFgLSQhYC0kIWAtJCFgMW0hISEhMiQhQ1hFCishYC0kIWAtJCFjWyEhISEkbSJKQ1gkIWAtJCFgLSQhbGAhISEhbS0kIWAtJCFgLSQhYC0kMW0hISEhMmAtJCFgCistJCFgLSQhYC0kWyEhISEkYGAtJCFgLSQhYC0kIWAtbGAhISEhciFgLSQhYC0kIWAtJCFgMW0hISEhMmxabFpsCitabFpsWmxabFpsWyEhISEkcnJycnJycnJycnJycnJycmAhISEhIUokcnJycnJycnJycnJycnJycnJycnJgbSEhCishISEhISEhISEhISEhISEhIW0yISEhISEhISEhISEhISEhISEhITIkYCEhISEhISEhISEhISEhISEhISRgbSEhCishISEhISEhITJycnJgISEhIW0yISFDSkIhISEhIW1KKSMkYCEhITIkYCJKQ0ohISEhJGIhSikjJGAhISRgbSEhCishISEhISEyKTJtSikjJGAhIW0yISEhISEhISEkcnJHbUopIyRgITIkYCEhISEhIXJyIVtycnJybSMkcnJybSEhCishISEhISRiIVttIyFKKSMkZkVyISEhISEhJEdoYiFKKSMhSikjcFFyYCEhISEhISEwaGIhSikjIUopMkNbbSEhCishISEhISEwaHIhSikjIUosZkVyISFDSkIhISEhMGhJcnJycm1KcFFyYCJKQ0ohISEhITBoR2hHaEdyckNbbSEhCishISEhISEhISFoR2hHaEdoSXJyISEhISEhISEhISEhISEhIWhHaEkkYCEhISEhISEhISEhISEhISEhISRgbSEhCishISEhISEhISEhISEnQ1FDSm0yISEhISEhISEhISEhISEiUUNRQjIkYCEhISEhISEnISEhISEhQ1FDUSRgbSEhCishISEhISEhISEhISEnQ1FDSm0yISdCJyEhQidCIUNKQiEiUUNRQjIkYCJRIkohJyEnISciSkIhQ1FDUSRgbSEhCishIkpCISJKIkpCJyEnQ1FDSm0yISEhIUInISFCIUInIkoiUUNRQjIkYCJRISciSiEnISciSkIhQ1FDUSRgbSFDCitKISchISJRIkpCJyEnQ1FDSm0yISEhISEhISEhISEhISEiUUNRQjIkYCEhISEhISEhISEhISEhISEhISRgcnJyCitycnJycnJycnJycnJycnJycm0hISEhSiEhJHJycnJycnJycnJycnJycnJyISEhMiEhISEhISEhISEhISEhISEhCisyISFtIWMtYy1jLWMtYy1jLWMtYy1jWyEyJC1sWmxabFpsWmxabFpsWmwtbGAkYGNacnJycnJycnJycnJycnEkCisxbSFtLWxyTDJNcnJycnJycnJycmBjWyEyJDFxMkwycnJycnJycnJycm0tbGAkYGNbcnJycnJycnJycnJycnIkCisxbSFtLWxycnJycnJycnJycnJycmBjWyEyJDFycnJycnJycnJycnJycm0tbGAkYGNbcnJycnJycnJycnJycnIkCisxbSFtLWxyTDJNcnJycnJycnJycmBjWyEyJDFxMkwycnJycnJycnJycm0tbGAkYGNbcnJycnJycnJycnJycnIkCisxbSFtLWxycnJycnJycnJyaUwpTWBjWyEyJDFycnJycmlycnJycSlMKW0tbGAkYGNbcnJycnJycnJyckwpTDIkCisxbSFtLWxpcTJxMk1pTWlyaUwpTWBjWyEyJDFyck1yTWlxMk1pcSlMKW0tbGAkYGNbcmlxMnEyTWlxMkwpTDIkCisxbSFtLWxpcSlyck1pcTJNaUwpTWBjWyEyJDFycnJycnJycnJycnJycm0tbGAkYGNacnJycnJycnJycnJycmAkCisxbSFtLWAhISEhISEhISEhISEhIS1jWyEyJC1jLWMtYy1jLWMtYy1jLWMxbGAhMmxabFpsWmxabFpsWmxabFpsCitbISEhMmMxYzFjMWMxYzFjMWMxYzFtISEhcm1sWGxYbFhsWGxYbFhsWGxbbSEkcmMxYzFjMWMxYzFjMWMxYzFjCisxbTJybWxYbFhsWGxYbFhsWGxYbFhsW3JycnJycnJycnJycnJycnJycnJycnIkcnJycnJycnJycnJycnJycnJyCitybSEhISFKISEhISRycnJycnJycnJycnJybSEhISEhISFyIWAtJCFgLSQhYC0kMm0hISEhISEyJCFgLSQhYC0kCishYC0kcW0hISEhISRtJCFgLSQhYC0kIWAtckhtISEhISFtLSQhYC0kIWAtJCFgMmNIbSEhISEyYC0kIWAtJCFgCistJCFjcnJybSFycnJycnJycnJycnJybSQhYC0kMiRtYy1jLWMtYy1jLWMtY20kIWAtJHJjR2hHaEdoR2hHaEdoCitHbG0kIWAtcm1oWmxabFpsWmxabFpsSG0tJCFgMnIwbHJycnJycnJxKU1taFtkLSQhY3JjSE1pcTJMMk1yTClyCiswbG1kLSQhcm1oU3EyTWlxMk1pTDJjSHJGYC0kMnIwaylyaXEyTWlxKU1taFtjM2AtJHJjSHJycnJycnJycnJyCiswbHBjIWAtcm1oW3JycnJycnJycnJjSHIwJCFgMnIwbGlNaXJycnJycnJtaFtoLSQhY3JjSE1pTXJycnJycnJyCiswbG1kLSQhcm1oW3JycnJycnJycnJjSHJGYC0kMnIwbHJycnJycnJycnJtaFtjM2AtJHJjSHEpcTJycnJycnJyCiswbHBjIWAtcm1oU3EpcnJycnJycnJjSHIwJCFgMnIwbHJycnJycnJycnJtaFtoLSQhY3JjSGMtYy1jLWMtYy1jCiswbG1kLSQhcm1oR2hHaEdoR2hHaEdoSHJGYC0kMiRxbFpsWmxabFpsWmxabHBjM2AtJGAkcnJycnJycnJycnJyCityaDAkIWAtbSEhISRwY0ZoMGNGaDBjRmQtJCFgMiEhISFyMGNGaDBjRmgwYzNgLSQhY2AhISEyYC0kIWAtJCFgCistJCFgLSQhbSEhISRgYC0kIWAtJCFgLSQhYC0kMiEhISFycnJycnJycnJycnJycnJycmAhISIhISEhISEhcnJyCitycnJycnJycnJycnJycnJycnJycnJycm0hISEhISEhISEhISEhISEkcnBJQWVwSUFlcElBZXBJQWVwSUFlcElBCitlcnJtISEhISEhISEhISEhISEycmVwSUFlcElBZXBIY2VwSUFlcElBZXBJQXJxW20hISEhISEhISEhISEhcnJBCitlcElBZXBJQWVwSUFlcElBZXBJQWVwSXJocVttISEhISEhISEhISEkcnBJQVhwSUFlbDJBWHBIY1hwSGNlcElBCitlcnJBaHFbbSEhISEhISEhISEycmVwSGNlcElBWHBIY2VsMkFYcEhjZXBJQXJycnJycnJtISEhISEhISEhcnJBCitlcEhjZWwyQWVsMkFYcEhjZWwyQWVwSUFlcElBbHJgISEhISEhISEkcnBJQWVsMkFYcElBWHBIY2VsMkFYcElBCitlcElBZXBJW3IhISEhISEhISEycmVwSUFlbDJBZXBIY2VsMkFYcEhjZXBJQWVwSUFlcXJtISEhISEhISEhcnJBCitlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcElBbHJgISEhISEhISEkcnBJQWVwSUFlcElBZXBJQWVwSUFlcElBCitlcElBZXBJW3IhISEhISEhISEycmVwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcXJtISEhISEhISEhcnJBCitlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcElBbHJgISEhISEhISEkcnBJQWVwSUFlcElBZXBJQWVwSUFlcElBCitlcElBZXBJW3IhISEhISEhISEycmVwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcXJtISEhISEhISEhcnJBCitlcEhjWHBIY2VwSUFlcElBZXBJQWVwSUFlcElBbHJgISEhISEhISEkcnBJQVhwSGNYcElBZXBJQWVwSUFlcElBCitlcElBZXBJW3IhISEhISEhISEycmVwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcXJtISEhISEhISEhcnJBCitlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcElBbHJgISEhISEhISEkcnBJQWVwSUFlcElBZXBJQWVwSUFlcElBCitlcElBZXBJW3IhISEhISEhISEycmVwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcXJtISEhISEhISEhcnJBCitlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcElBbHJgISEhISEhISEkcnBJQWVwSUFlcElBZXBJQWVwSUFlcElBCitlcElBZXBJW3IhISEhISEhISEycmVwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcXJtISEhISEhISEhcnJBCitlcEhjWHBIY2VwSUFlcElBZXBJQWVwSUFlcElBbHJgISEhISEhISEkcnBJQVhwSGNYcElBZXBJQWVwSUFlcElBCitlcElBZXBJW3IhISEhISEhISEycmVwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcXJtISEhISEhISEhcnJBCitlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcElBbHJgISEhISEhISEkcnBJQWVwSUFlcElBZXBJQWVwSUFlcElBCitlcElBZXBJW3IhISEhISEhISEycmVwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcXJtISEhISEhISEhcnJbCitscXJbbHFyW2xxcltscXJbbHFyW2xxcltscXJbbHJgISEhISEhISEkcnJycnJycnJycnJycnJycnJycnJycnJyCitycnJycnJycnIhISEhISEhJSEycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm0hcmRLCispNSVLKTUlSyk1JUspNSVLKTUlSyk1JUspNSVLKTUlSyk1JUspcmAkcjUlSyk1JUspNSVLKTUlSyk1JUspNSVLCispNSVLKTUlSyk1JUspNSVNciEycCk1JUspNSVLKTUlSyk1JUspNSVLKTUlSyk1JUspNSVLKTUlSyk1Mm0hcmRLCispNSVLKTUlSyk1JUspNSVLKTUlTXJycnJycnJwKTUlSyk1JUspcmAkcjUlSylsMWEpbCVLKTUlSyk1JUspcmBKCispIyFKKSMycCk1JUspNSVNciEycCk1MWEpbDFhKTUlSyk1JUspNTJtKSMhSikjIUopIzJwKTUlSyk1Mm0hcmRLCispNSVLKTUlSyk1JUspNSVNciMhTXJyYEopIyFKKSMycCk1JUspcmAkcjUlSyk1JUspNSVLKTUlSyk1MnJycmhwCitycmBKKSMhSikjMnApNSVNciEycCk1JUspNSVLKTUlSylycnJyIyFNcnJycnJycnJycmBKKSMycnJycnJycmRLCispNSVLKTUlSyk1JUspNTJtKSMhTXJyYEopIyFKKSMhSikjMnJYbDJycjUlSyk1JUspNSVLKTUocHJJcm0pIyFKCispIyFKKSMhSikjIUopcnFjWHJycCk1JUspNSVLKTUlSyk1JUtySXJtKSMhSikjIUopIyFKKSMhTXJsMWNycmRLCispNSVLKTUlSyk1JUspNSVLcklycnIjIUopIyFKKSMhSikjMnJYbDJycjUlSylsMWEpbCVLKTUlSyk1JUtySWhyCitycnJycnJycnJyYEopcnFjWHJycCk1MWEpbDFhKTUlSyk1JUspNSVLcklocHJJaHBySWhwcnJycnJsMWNycmRLCispNSVLKTUlSyk1JUspNSVLKTUlSylJaHBySWhwcklocHJJaHJycnJycjUlSyk1JUspNSVLKTUlSyk1JUspNSVLCispNSVLKTUlSylJaHBySWhyciEycCk1JUspNSVLKTUlSyk1JUspNSVLKTUlSyk1JUspNSVLKTUlSyk1Mm0hcmRLCispNSVLKTUlSyk1JUspNSVLKTUlSyk1JUspNSVNWGwxY1hsMWEpcmAkcjUlSyk1JUspNSVLKTUlSyk1JUspNSVLCispNSVLKTUxY1hsMWNYbCVNciEycCk1JUspNSVLKTUlSyk1JU1YNSVLKTUlSyk1JUspbDFjWGwxY1g1Mm0hcmRLCispNSVLKTUlSyk1JUspNSVLKTUlSyk1JUspNSVNWGwxY1hsMWEpcmAkcjUlTVhsJU1YNSVLKWwlTVhsJUspbDFhCispbCVLKTUxY1hsMWNYbCVNciEycCk1MWNYNTFhKTUlTVg1JU1YNSVNWDUxYSlsJUspbDFjWGwxY1g1Mm0hcmRLCispNSVLKTUxYSlsJUspNTFhKTUxYSlsJU1YNSVNWGwxY1hsMWEpcmAkcjUlSyk1JUspbCVNWDUlSylsJUspbCVNCitYNTFhKTUxY1hsMWNYbCVNciEycCk1MWNYNSVNWDUxYSk1JU1YNSVNWDUxYSlsJUspbDFjWGwxY1g1Mm0hcmRLCispbDFhKTUlTVg1JUspNTFjWDUxYSlsJU1YNSVNWGwxY1hsMWEpcmAkcjUlSyk1JUspNSVLKTUlSyk1JUspNSVLCispNSVLKTUxY1hsMWNYbCVNciEycCk1JUspNSVLKTUlSyk1JUspNSVLKTUlSyk1JUspNSVLKTUlSyk1Mm0hcnJyCitycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycmAhISEhMyEhISEhcnJycnJycnJycnJycnJyCitycnJycnJycnJycnJycnJycnJybSEhISEhITJyZXBJQWVwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcEltCishISEkcnBJQWlxMk1pcTJNaXEyTWlxMk1pcTJNaXEyTWlxMk1pcTJNaXIybSEhMnJlcTJNbXIyY21yMmNtcjJjCittcjJjbXIyY21yMmNtcjJjbXEyTW1yYCEhcnJBaXIyY3JycnJycnJycnJycnJycnJycnJycnJycnJycmNlcTJjCityISEkcnBJTW1ycnJNaXJyTXJycnJycnJycnJycnJycnJycnJycnJBaXIybSEhMnJlcTJjcmlyck1pcnJycnJyCitycnJycnJycnJycnJycnJycnBJTW1yYCEhcnJBaXIycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJlcTJjCityISEkcnBJTW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJBaXIybSEhMnJlcTJjcnJycnJycnJycnJyCitycnJycnJycnJycnJycnJycnBJTW1yYCEhcnJBaXIycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJlcTJjCityISEkcnBJTW1ycnJNaXJyTXJycnJycnJycnJycnJycnJycnJycnJBaXIybSEhMnJlcTJjcmlyck1pcnJycnJyCitycnJycnJycnJycnJycnJycnBJTW1yYCEhcnJBaXIycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJlcTJjCityISEkcnBJTW1ycnJycnJycnJycnJycnJycnJycnJxMk1pcTJNcnJBaXIybSEhMnJlcTJjcnJycnJycnJycnEyCitycnJycnJycnJpcTJNaXEycnBJTW1yYCEhcnJBaXIycnJycnJycnJycnJycnJycnJycnJyTWlxMk1pcnJlcTJjCityISEkcnBJTW1ycTJyaXJycmlyck1ycTJNcnEycnJxMk1pcTJNcnJBaXIybSEhMnJlcTJjcnJyck1ycnJNcnEyCityaXJyTXJxMnJpcTJNaXEycnBJTW1yYCEhcnJBaXIycnJycTJyaXJycmlyck1ycTJyaXJyTWlxMk1pcnJlcTJjCityISEkcnBJTW1ycTJyaXEycnJyck1ycTJyaXJyTXJxMk1pcTJNcnJBaXIybSEhMnJlcTJjcnJycnJycnJycnJyCitycnJycnJycnJycnJycnJycnBJTW1yYCEhcnJBaXIyY3JycnJycnJycnJycnJycnJycnJycnJycnJyckFlcTJjCityISEkcnBJTWlwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcElNaXIybSEhMnJlcTJNaXEyTWlxMk1pcTJNCitpcTJNaXEyTWlxMk1pcTJNaXEyY21yYCEhITJybXIyY21yMmNtcjJjbXIyY21yMmNtcjJjbXIyY21yMmNtcjJtCishISEhISEycmhwcltocHJbaHByW2hwcltocHJbaHByW2hwcltocHJbciEhISEhISRycnJJbHFySWxxcklscXJJCitscXJJbHFySWxxcklscXJJbHFycnIhISEhcnJyaHByW2hwcltocHJbaHByW2hwcltocHJbaHByW2hwcltocHJbCityITJycnJySWxxcklscXJJbHFySWxxcklscXJJbHFySWxxcklscXJJbHFycnJycnJycnJycnJycnJycnJycnJyCitycnJycnJycnJycnJycnJycnJycnJycm0hcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJyCityISEhISIhISEhISEhISEkcnJycnJycnJycnJycnJycnJycnJycnJycnJybSEhISEhISEhISEhISEhMnJmcFtFCitmcFtFZnBbRWZwW0VmcFtFZnBbRWZycm0hISEhISEhISEhISEhcnJFZnBbRWZwW0VmcFtFZnBbRWZwW0VmcFtFCitycjJtISEhISEhISEhISEkcnBbRWZwW0VmcFtFZnBbRWZwW0VmcFtFZnBbcmpyMm0hISEhISEhISEhMnJmcFtFCitmcFtFZnBbRWZwW0VmcFtFZnBbRWZyck1qcjJtISEhISEhISEhcnJFZnBbRWZwW0VmcFtFZnBbRWZwW0VmcFtFCitycnJycnJybSEhMnJycnJycnJycnJycnJycnJycnJycnJycnJycFtFZnBbRWZwW0VmcmAkcitiWFYrYlhWK2JYCitWK2JYVitiWFYrYlhWK2JbcnBbRWZwW0VmcFtFcnJiW2pxSVJqcUlSanFJUmpxSVJqcUlSanFJUmpxSWNycFtFCitmcFtFZnBbcnIrclJtcjJjbXIyY21yMmNtcjJjbXIyY21yMmNqcjJyZnBbRWZwW0VmcnJtVnFJY3JycnJycnJyCitycnJycnJyck1pcTJyK3JSbXJyTWZwW0VmcFtFcnJiW2pyMTJyaXJyTXJxMk1ycTJycnEyTWlybVZxSWNycTJNCitmcFtFZnBbcnIrclJtaXJyTXJxMnJpcnJNcnEycmlxMk1yYltqcjJyaXEyRWZwW0VmcnJtVnFJY01pcnJyaXJyCitNcnEycmlyck1pcTJyK3JSbXJyTWlwW0VmcFtFcnJiW2pyMnJycnJycnJycnJycnJycnJycnJybVZxSWNycTJNCitmcFtFZnBbcnIrclJtcnJycnJycnJycnJycnJycnJycnJyYltqcjJyaXEyRWZwW0VmcnJtVnFJY3JpcTJyaXJyCitycnJycnJycnJycnJyK3JSbXJyTWlwW0VmcFtFcnJiW2pyMTJyaXEycnJycnJycnJycnJycnJybVZxSWNycTJNCitmcFtFZnBbcnIrclJtcnJycnJycnJycnJycnJycnJycnJyYltqcjJyaXEyRWZwW0VmcnJtVnFJY3JycnJycnJyCitycnJycnJycnJycnJyK3JSbXJyTWlwW0VmcFtFcnJiW2pyMnJNaXJyTXJycnJycnJycnJycnJybVZxSWNycTJNCitmcFtFZnBbcnIrclJtaXJyTWlycnJycnJycnJycnJycnJyYltqcjJyaXEyRWZwW0VmcnJtVnFJY3JycnJycnJyCitycnJycnJycnJycnJyK3JSbXJyTWlwW0VmcFtFcnJiW2pyI1hWK2JYVitiWFYrYlhWK2JYVitiWFZxSWNycTJNCitmcFtFZnBbcnIrclJqcUlSanFJUmpxSVJqcUlSanFJUmpxSVJqcjJyaXEyRWZwW0VmcmAkcnIyY21yMmNtcjJjCittcjJjbXIyY21yMmNtcjJjcnEyTWlwW0VmcFtFciEhJHJycnJycnJycnJycnJycnJycnJycnJycnJyck1pcTJNCitmcFtFZnBbbSEhISEhISEkcnEyTWlxMk1pcTJNaXEyTWlxMk1pcTJNaXBbRWZwW0VmcmAhISEhISEhMnJpcTJNCitpcTJNaXEyTWlxMk1pcTJNaXEyRWZwW0VmcFtFciEhISEhISEhcnJFZnBbRWZwW0VmcFtFZnBbRWZwW0VmcFtFCitmcFtFZnBbbSEhISEhISEkcnBbRWZwW0VmcFtFZnBbRWZwW0VmcFtFZnBbRWZwW0VmcmAhISEhISEhMnJycnJyCitycnJycnJycnJycnJycnJycnJycnJycnJycnJyciEhISIhMnJycnJrISEhISNKISEhIVMhISEhKyEhKGkjTTMjCisiIVRCIiEpKyEhUSIjSiExMyEjKyEoMm1JSiE0SiRpISMhIXEhITMhMkohJCEkaWQhMm1xQCEhIXJKISEhJGkhCishISErISEhISNKISEicVMhISFJVSEiIShrSiEhInFUU1hkSVVEKitSa0o4NVRxUyYlVUlVQzQrUmtRKURUcVMhCishIUlVISEhISNycnJycltycnJybHJycnJxcnJycnJbcnJycmxycnJycXJycnJyW3JycnJscnJycnFycnJycltyCitycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJyW3JycnJscnJycnFycnJycltyCitycnJscnJycnFycnJycltycnJybHJycnJxcnJycnJbcnJycmxycnJycXJycnJyW3JycnJscnJycnEhISEiISFyCitycmAhKSEhJyEjITMiMyFKISE1ISomRCUzIzQ5NHEhTFA4IUopVDkhKSMlOTMjIUohISFKKSEhISkjISEhIyFKCishISFKKSEhISkjISEhIyFNMyEhSipCISEpIyEhISMhSiEhIUopISEhKSMhISEjIUohISFKKSEhISkjISEhIyFNCiszISFKKkIhISkjISEhIyFKISEhSikhISEpIyEhISMhSiEhIUoycnJyaSRycnIhIXJycmkhMnJyciEkcnJyaSFyCitycnIhMnJycmkkcnJycSFycnJySjJycnJpJHJycnEhcnJyckoycnJyaSRycnJxIXJycnJKMnJycmkkcnJycSFyCitycnJKMnJycmkkcnJycSFycnJySjJycnJpJHJycnEhcnJyckoycnJyaSRycnJxIXJycnJKMnJycmkkcnJycSFyCitycnJKMnJycmkkcnJycSFycnJySiEhISUhKHJycnEjISEhITQhISEhIzRycnJpTkohISIqKSEhITU1RCEhJU5WCishISIqKSEhITU1ISEhJU5KISEiKipTISE1NVghISVOSiEhIiopISFJNTUhMyhkTkohInAqK1BESTU1KjlBZE5MCitQOXAqK2E5STU1ISEhJU5KISEiKihycnJMMyEhISFNISEhIWBJcnJyaTBZWVlbJzU1NTVFWVlZWVtycnJycmhyCitycnJpSXJycmkycnJycihycnJyanJycnJxSXJycnJScnJycmpycnJycUlycnJyUnJycnJqcnJycnFJcnJyclJyCitycnJqcnJycnFJcnJyclJycnJyanJycnJxSXJycnJScnJycmpycnJycUlycnJyUnJycnJqcnJycnFJcnJyclJyCitycnJqcnJycnEycnJyciJycnJySnJycnJtSXJycnJbcnJycnJycnJycklycnJySiEhITMhJHJyckohSiEhLSEpCishISNKIyEhIU4hSiEhKUopISEkbXJycmAiMyEhIyFDcnJxMydKISE4IlMhJFAhRFVkajMnVVVaOCJWK1ZQIUQhCishIjMnSiEhOCJUUyEmIURYISIzJ0ohITgiUyEhJiFERCEiMydWISE4IlMhISYhRCEhIjMnSXJyTiIzISEjITZyCityciElIyEhISIhSiEhITMpISEhJSMhISEiIXJycnJgMnJycSEkcnJyYCFycnJxITJycnJgJHJycnEhcnJycmNyCitycnJwcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJyCitycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnBycnJycjJycnJyYDJycnJtJHJycnIhcnJycmAyCitycnJtJHJycnIhISEhMzJyckohJzghREoiSiEnISFDMyJVISchIUIjIkohJ1VYQlVqVCtRISFJcnJycnJycnJyCitycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm0hISEiIUlyIiEnJVM4OSJqISFOISM1Sio4IU4hCisjMyEqOUJQOWI5QSoqOE4hI0lyanJtKHJpSXJhcnJScnFJcmpyclJycUlyanJyUnJxSXJqcnJScnFJcmpyckohCishISUicnJTISJSclFQIkRTJlMhQFVbRFVwVCtmSiJDcmpKISZyck05QERVWXJyaHJxcnJycnJycnJycnJycnJyCitycnJycnJycnJycnJycmhycTJyanJyaHJyISEhITMicmklIWAzI1JyckohUUliRCFUVFVRVitEIVRTI1FJYkIhCisqSXIlMyE0cnIockpJciJycUlycnJycnJycnJycnJycnJycnJycnJycnJycHJyYXJyKHJtISEhIyFycnJycnJyCitycnJybWMtYy1jLWMtY3JjMmNtYy1jLWMycjJjbWMtYy1jLXJtYy1jLWMtYy1jcmMtYy1jLWMtYzJyLXIyYy1jCistYy1ybXIyYy1jLWMtY3JjLWMtYy1jLWMyci1jLWMyYy1jLXJtYy1jLWMtYy1jcmNtcjJjbXJtYzJyLWNtcjJjCityci1ybXItci1yMmNtY3JjLWMtYy1jLWMycnJycnJycnJycm0hISEjISRycnJycnJyISEhMiQhYC0kIXJgISFyCishQickIWNtbSEkYEInJCFgMnJyITJgLSQhYC0kMW0hbS0kIWAtJCFsYCRtIkpCLSQhY1shMiJKQi0kIWAxbSFyCishYC0kIWAtbGAkYGAtJCFgLSRbITJhWEUnYVEkMW0hbSciSkInQ0psYCRtIkphWENRY1shMiQhYC0kIWAxbSFyCitabFpsWmxabGAkcnJycnJycnJyISEhISMhJHJycnJycnJyciRtYy1jLWMtYy1jcmNabFpsWmxabFtyMXEyTXJyCitycjFybWsyTXJycnJtbHJjW3JycnJycmNbcjFNaXEyTClyMXJtazJNaXEpTW1scmNbTXJNaXEyY1tyMXJycnJyCitycjFybWwtYy1jLWMtbHJsWmxabFpsWmxbJHJycnJycnJyciEhclhsMWNYbDFtIXJYbDFjWGwxY3IkcnJycnJyCitycnJtISEhIyEhIXJycnJycm0hISEkYGAtJCFjciEhITJgLSQhYDJoYCRycnJycnJycnJybWMtYy1jLWNgY3JjCitHaEdoR2hbYDJyMHJycnJySG0tcm1ockwyTXBsbSRyY0lNaU1yaFskMnIwcnJycnJIciFybWhycnJycGxgY3JjCitHaEdoR2hbYDJyMWxabFpsWm0tbTJycnJycnJtLSRgITJgLSQhYC0kMiEhcnJycnJycnJtISEhJSFycnJycnJyCitycnJycnJycnJycnJycnJtVStMU1UrTFNVK0xTVStMU1UrW3JyK0xWcitbbVUrTFNVK0xTVStMVnJyYlZyK1ttCitVK0xTVStMU1UrTFNVcnJtVStMU1UrTFNVK0xTVStMU1UrW3JyK0xTVStMU1UrTFNVK0xTVStMVnJyYlNVcmJWCityK0xTVStMU1UrTFNVcnJtVXJiVnIrTFNVK0xTVStMU1UrW3JyK0xTVStMU1UrTFNVK0xTVStMVnJyYlNVK0xTCitVK0xWcitMU1UrTFNVcnJtVStMU1UrTFNVK0xTVStMU1UrW3JyK1ttVXJiVnIrW21VcnJtVStMVnJyYlNVK1ttCitVcmJWcitbcnJyYlNVcnJtVXJiU1VyYlNVcmJWcitbbVUrW3JyK0xTVStMU1UrTFNVK0xTVStMVnJycnJycnJyCitycnJycnJycnJycnJycmAhISEzISFycnJycnJycnJycnJycm0hISEhISEycmVwSUFlcElBZXBJQXJyYCEhISEkCitycElBWHBIY2VwSUFlcnJJciEhISFyckFYcEhjZXBJQWVwSXJycnJtISEycmVwSUFlcElBZXBJQWVwSVtyISEkCitycElBZXBJQWVwSUFlcElBbHJgISFyckFlbDJBWHBJQWVwSUFlcXJtISEycmVsMkFYcElBZXBJQWVwSVtyISEkCitycElBZXBJQWVwSUFlcElBbHJgISFyckFlcElBZXBJQWVwSUFlcXJtISEycmVsMkFYcEhjZWwxY2VwSVtyISEkCitycEhjZWwyQVhwSGNYbDJBbHJgISFyckFlbDJBZWwyQVhsMWNlcXJtISEycmVwSUFlcElBZXBJQWVwSVtyISEkCitycXJbbHFyW2xxcltscXJbbHJgISFycnJycnJycnJycnJycnJycnJtISEhISIhISRycnJycnJycnJycnJycnJyCitycmAkcnBbRWZwW0VmcFtFZnBbRWZwW0VycnJFbHFyW2xxcltscXJbbHFyW2xycnJmcXJyTXJxMnJycnJycnJyCitmcXJycnBbW01ycTJycnJycnJycnJwW1tycnJFbHJycnJycnJycnJycnJyRWxycnJmcXEycmlyck1ycTJNaXJyCitmcXJycnBbW01ycTJyaXJyTWlxMnJwW1tycnJFbHJxMnJycTJyaXJyTXJyRWxycnJmcXJycnJycnJycnJycnJyCitmcXJycnBbW2ZwW0VmcFtFZnBbRWZwW1tycnJbbHFyW2xxcltscXJbbHFyW2xyYCRycnJycnJycnJycnJycnJyCitycmAhISEycmxwW1tmcXJFbHBbW2Zxcm0hITJybHBbW2ZxckVscFtbZnFyRXJyYCRycnJycnJycnJycnJycnJyCitycnJtISEhJSEhISEhcnJycnJycnJycnJycmAhISEhISEhMm1WK2JYVitiWFYrcnJyISEhISEhJHIrYlhWK2JYCitWK2JbcnFybSEhMnJycnJycnJycnJycnJycnJycnJybVYrYlhWK2JYVitiWFYrcm1WK3JycityVmtxW1ZrcVtWCitrcVtjcitiW3JyYltrcnJycnJycnJyclZtcmJYVnJybVZxW3JyaXEycmlycmtyMm1WK3JycityVnJpcnJNaXJyCitycVtjcitiW3JyYltrcnJycnJycnJyclZtcmJYVnJybVZxW3JycnJycnJycmtyMm1WK3JycityVmtxW1ZrcVtWCitrcVtjcitiW3JyYlttcjJjbXIyY21yMmNtcmJYVnJgJHJycnJycnJycnJycnJyYlhWK3JtISEhJHIrYlhWK2JYCitWK2JYVitiW3IhISEhcnJycnJycnJycnJycnJycnJgISEhIlNDOVFQWSkkOFotYmBKKSVlS0JkcDYpKCpQRSc5CitLRmY4Si1KISEhIWAhKyEhUyE0MyJTYCMhOTk4ISEhIUwhISUhISEhISEtTiIpMyRHITlYJSFOcCwhISEhISEhCis4ISMzIVlgJkNMISpILSEhISEhLHJyYCEhISJCISEhISEhISEhRTMhRCEpJSE5ITMnM1I5ZEcncFohISEhJUohCishISEhISEhITAhIkYhLDMhaFMhKSFKISEhISJgISEhISEhISEhJDMiMSEnQiJDU0osOGg0S0cnUE0pJjRQSCgzCishISEhISYzIVMhI0oiJSEnUiEhISIhISUhISEhISEhIyEhISEhISI4ITQzIi0hJ1MhR2AhJiEzISIhISEhISEhCishSjMhISEhITkhKjghSiElUCExYCEiMyUhITMhISEhISEhKSkhISEhISYzIVohI0IhRDMiZCEhOCIhISUhISEhCishISEjJCEhISEhIjghMTMhbSEtQiJaMyEhITMhIiEhISEhISEhSyEhISEhJSEhISchISEhIzMhIUlyRHJpKSEyCiszIiMhIm0hKTMhckonIyFybSNKSihxIjMpJHIhUyMhSUo4IUoyYCshKSJpJmAnIW0icSNKJyFyYUIkIVtxWiEhCitBcmxKKSxycEIhJnJxKyEkcnIiSiIyckopITZyYCMhMnJxIUonKUwzKSFjISMjImpjMCFKWkNRMylJUUNOIyxjCistYiE2LTYtMyRLci1pISEyISEhISJKISEhIUIhISEhMiEhInJybHJKcnJycm0ycnJycktycnJyaTJycnJxJHJyCityciFycnJySjJycnJgJHJycmkhcnJyciFJcnJyaTJycnJyKHJycnJscnJycnJycnJycmhycnJyaXJycnJtKHJyCitycSFycnJyITJycnJpJHJycnIhcnJycmkycnJybSRycnJyIXJycnJgMnJycmkibXJyciExKG1jSiEhbSEhISEnCishISEhISFKISEhISEhISEhISRyISEhISEhISEhISEhISEhISEhITJMMiEhISEhISEhISEhMnJycnJycnEqUTIkCitycnJycm0hISFtISEhISEhIXFDUTIhISEhISFtISEyJC1jLWMtYy1xQ1JgYy1jLWMtbSEhMmMtYy1jLWNJUUNSCittYy1jLWNJISEhMmgtYy1jR3FDUUNScGMtYzBoYCEhJGBjLWMtaGpRQ1FJJC1jLWhJISEhIW0tYy1jMHFDUUNtCishYy1jR20hISEhMiQtYy1jSVFDUmAkLWMwaGAhISEhJGBjLWMtaGpRSSEtYy1oSSEhISEhIW0tYy1jMHFDbSFjCistY0dwWyEhISEkciQtYy1jSVJgJC1jMGhqUFshISEyTWBjLWMtaHIhLWMtaElRQ1BbISFxKm0tYy1jMG0hYy1jCitHcUNRQ1BbJGlRSSQtYy1jMyQtYzBoalFDUUNQW3EqUmBjLWMtZC1jLWhJUUNRQ1FDRWBxKm0tYy1jMGMtY0dxCitDUUNRQ1BbISFxMiQtYy1jLWMycmpRQ1FDUUBtISEhcmBjLWMtYy1yLXFDUUNRQ0VgISEhIW0tYy1jLWMyYzJRCitDUUNQWyEhISEhMiQtYy1jLWhycUlyanJycnIhISEhJGBjLWMtY0ljLXItY21jMmMyISEhIW0tYy1jMGhyYzJyCistYy1jLWMyISEhMiQtYy1oSXItcnJjJ0Utcm1tISEhJGBjLWNHcUljMnItRW1jcmMyISEhIW0tYzBoalJtY3JjCisyci1ybWNgISEhMiQtaElxSWMyci1ybWNyYzIhISEhITJjR20hcm1jMmMyci1ybWMyISEhISEycmAhIXJycFttCishcmAkcm0hISEhISEhISEhIXBRbSEhISEhISEhISEhISEhISEhISFyYCEhISEhISEhISEhISElIXFbJSgjMy0tCitLYUwxLSk0YEwyUSFyaTJqS0kjKCspTiVSOTVwOSdQOCJVTXFtSXJqcnJjcnEycmBycihycXJycnJyUnJtMnJpCitycmNycjJybUVyYCdVISEhIUohJHJyck1gcnJtISRgISEkam0hITIhMmMtYzBybWMtaGAkbWMwcUkkLWhgITJjCistaHIkLWhgISFyLWNJJC1ociEhTW1jMCQtaGpSYExJYy0kLWhqUUNyanItYy1yalFDQiFybWMtcjJyam0hITJjCistY3JyLXIyISFyLWNtY21jLWNgJG1jSXIyY21yMiEyY0lSbXIyY21tISRyJG1jbXIyY2AhISEhcmBtMiRgISEhCislISEhISEhJHJycnJycnJycnJycnJycnJycnJycnJycnIhISEhISEhISEhISEhISEhITJyZXBJQWVwSUFlcElBCitlcElBZXBJQWVwSXJyISEhISEhISEhISEhISEhIXJyQWVwSUFlcElBZXBJQWVwSUFlcElBZXJiW3IhISEhISEhCishISEhISEhJHJwSUFlcElBZXBJQWVwSUFlcElBZXBJQXIrYltyISEhISEhISEhISEhITJyZXBJQWVwSUFlcElBCitlcElBZXBJQWVwSW1WK2JbciEhISEhISEhISEhIXJyQWVwSUFlcElBZXBJQWVwSUFlcElBZXJiWFYrYltyISEhCishISEhISEhJHJwSUFlcElBZXBJQWVwSUFlcElBZXBJQXJycnJycnJyciEhISEhISEhITJyZXBJQWVwSUFlcElBCitlcElBZXBJQWVwSUFlcElBZXBJbSEhISEhISEhIXJyQWVwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcmAhCishISEhISEhJHJwSUFlcnJycnBJcnJyckFycnJyZXJycmVycnJlcElBciEhISEhISEhITJyZXBJQWVwSUFlcElBCitlcElBZXBJQWVwSUFlcElBZXBJbSEhISEhISEhIXJyQWVwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcmAhCishISEhISEhJHJwSUFlcnJycnBJcnJycnJlcnJycnJyQXJycnJlcElBciEhISEhISEhITJyZXBJQWVwSUFlcElBCitlcElBZXBJQWVwSUFlcElBZXBJbSEhISEhITJycnJycnJwSXJlcnJycnJyQWVwSUFlcElBZXBJQWVwSUFlcmAhCishISEkciEhISEhISRycEltISEhISFyckFlcnJBcnJycmVycnJlcElBciEhISEhMm1WcHJGVnByUnJyYltocGJbCitrcnJBZXBJQWVwSUFlcElBZXBJbSEhISEhITJyaCtySWpyckFyITJGVnFbcmVwSUFlcElBZXBJQWVwSUFlcmAhCishISEhIXJiW2hwclZycmAkaCtyVnJwSUFlcElBZXBJQWVwSUFlcElBciEhISEhISRycHJJaHFJbSFwYltrcnJyCitlcElBZXBJQWVwSUFlcElBZXBJbSEhISEhITJtVnBiW2shI1tocVtyZXBJQWVwSUFlcElBZXBJQWVwSUFlcmAhCishISEhIXJyRlZwYCRocHJScnBJQWVwSUFlcElBZXBJQWVwSUFlcElBciEhISEhISRycHJGVnBiW3JyckFlcElBCitlcElBZXBJQWVwSUFlcElBZXBJbSEhISEhITJtVnByRlZyYltycnJyZXJyQWVwSUFlcElBZXBJQWVwSUFlcmAhCishISEhIXJyRlZwcklycnJtVnBybVZyckFlcElBZXBJQWVwSUFlcElBciEhISEhISRyK3JJaHJyRlZyckZWcHJGCitWcnJBZXBJQWVwSUFlcElBZXBJbSEhISEhITJyaCtyVnJycklycHJtVnJySXJwSUFlcElBZXBJQWVwSUFlcmAhCishISEhIXJiW2tyYCRyK3JtVnJySXIrcnJlcElBZXBJQWVwSUFlcElBciEhISEhISEhcnJyZXJiW2hycklyK3JyCitocnJBZXBJQWVwSUFlcElBZXBJbSEhISEhISEhIXJyQWVycnJlcnJBcnBJcmVwSUFlcElBZXBJQWVwSUFlcmAhCishISEhISEhJHJwSUFlcElBZXBJQWVwSUFlcElBZXBJQWVwSUFlcElBciEhISEhISEhITJycnJycnJycnJycnJyCitycnJycnJycnJycnJycnJycnJybSEhISEhISElISRycnEhIUohIWAhKSEhKyEjISEjMyFKISFMISkhISkzIyEhCiskcSFKISEhSikhISEpIzFsWUwhSiEhIUopISEhKSMxcGxMIUohISFKcVshISkzOCpHTCUkJCEhSks0SiEpKWlgCishIyMlRiEhSkwtISEpKSMhISMjJCEhIUpLRyEhKSlGUyEjIyoiISFKUjkzISksOTghIyJUOSEhSipVSiEpIyEhCishIyFycnJySjJycmkhJHJyciEhcnJyaSEycnJyISRycnJpIXJycnIhMnJycmkkcnJycSFycnJySjJycnJpJHJyCitycSFycnJySjJycnJpJHJycnEkcnJycktycnJyaUlycnJxJHJycnJKcnJycmkycnJycSRycnJySnJycnJpMnJyCitycSRycnJySnJycnJpMnJycnEkcnJyckpycnJyaShycnJxIXJycnJKMnJycmkkcnJycSEhISFKISEhMnJycnJyCitycnJycnJyISEhISEhISEkbSQhYC0kIWAtJCFjciEhISEhISEhbS0kIWAtJCFgLSQhcjIhISEhISEhMmAtJCFgCistJCFgLSQyYzIhISEhISEkYGAtJCFgLSQhYC0kbWMyISEhISEhciFgLSQhYC0kIWAtci1jMiEhISEhMiQhYC0kCishYC0kIWAycnJyciEhISEkbSQhYC0kIWAtJCFgLSQhY2AhISEhbS0kIWAtJCFgLSQhYC0kIW0hISEhMmAtcnJjCitycjJybXJgcm0kMiEhISEkYGAtJCFgLSQhYC0kIWAtJGAhISEhciFgLSQhYC0kIWAtJCFgLW0hISEhMiQhcnIkCitycm1ycm0ycmBgMiEhISEkbSQhYC0kIWAtJCFgLSQhY2AhISRycnIkYHJyciFgLSQhYC0kIW0hITIhISEyJGAhCishciFtMnJgcm0kMiEhJG1jLWNJci1jMHIhYC0kIWAtJGAhISRtYzBtMiQtaG0kIWAtJCFgLW0hISFyLWNJbS1jCitJYC0kIWAtJCFgMiEhITJjLWhgYzByYGAtJCFgLSQhY2AhISRtYzAkLWhtJCFgLSQhYC0kIW0hISFyLWAtY0lgCistJCFgLSQhYC0kMiEhITJjLWMyciFgLSQhYC0kIWAtJGAhISRtYy1yMnJgbS0kIWAtJCFgLW0hISFyLWMycm1jCittbS0kIWAtJCFgMiEhITJjLXItci1jLW0tJCFgLSQhY2AhISRtY0lyMmNtcjJgLSQhYC0kIW0hISFyMG0yY21yCisyY2BgLSQhYC0kMiEhISFyYHItcjJjbXIhYC0kIWAtJGAhISEhciFybXIyY20kIWAtJCFgLW0hISEhMiQhYC0kCishYC0kIWAtJCFgMiEhISEkcnJycnJycnJycnJycnJycmAhISEhISkhIXJycnJycm0hISEkYCEhISEkciEhITIhCishISEhMmNgISFtISEhISFycm0hJGAhISEhISEkYCEyITIkciRyITIhIW0hISEhISEhbSEkciEybTIkYCRgJG1jCityYzIhISEyITJjMnItbTJtIW0hci1yLW0hISEkYCRtci1tIW0yITIhMmMtbSEhISEhbSFyLW0hISEhISRgJG1tCishISEhISEyISFycnJycnJycm0hISEhJSFybSMhQikiM0ooTCEjKkUpSiFNMDU2KSotWE5OIzhQKiUhTkojOCEpCityck1yYDJySnJyJHJxMnJpcnJNcnEycmpyclJycUlyanJyUnJxSXJqcnJNcnEhISElISEhISEhISEhISEhISEhCishISEhISEycnIhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISRyWkVSciEhISEhISEhISEhCishISEhISEhISEhISRycnJycnJycnJycnJycmxSUGpWUnIhMnJycnJycnJycnJyYCEhISEhIXJgISEhISEhISEhCishISEhIXJxQVFqRVJyISEhISEhISEhISEhcmAhISEhJHIhI1tocGJbaCtySWgrckZWcnFBUWpJbSErckloK3JGCitWcHJGVnJgISEhISRycHJGVnBySWgrckloK3JWcmpaQVFqSXJocGJbaHBySWgrclZyISEhISEhJHJxSUloK3JJCitoK3JWa3JxQVFqSEVRaklyanByRlZwYltrcUltISEhISEhMm0hK3JJaCtySWhxSXJQalpBUWpIQXIhMkZWcHJGCitWcVtSciEhISEhISEhcmAkaCtySWhwYltrcnFFUGpaQVFyYCEhcHJGVnByVmpyYCEhISEhISEhJHIhMklocGJbCitocHJScmpIRVBqW20hISNbaCtySWtxSW0hISEhISEhISEhMm0hK3JJaHBiW2hxW3JQakhFciEhJGhwYltocVtSCityISEhISEhISEhISEhcmAkaHByRlZwcklqcnFBUXJgISErckZWcHJWanJxcnIhISEhISEhISEycnIhI1toK3JJCitoK3JWcmpbbSEhMklocHJJanFbclBqWnJyISEhISEhJHJaSW0hcGJbaHBySWhxSXJyISEkaCtyRlZxSVZyalpBCitRakhyciEhISFybFJQcmAkaHBiW2grcklrcmAhIStySWhwclZqcnFBUGpaQVFqSHJyITJxampIRXIhI1tocGJbCitocHJOISEySWhwYltrcUlyUWpIRVBqWkFRakhycnJsUlFqSW0hcGJbaHByRlZxSiFWcGJbaHFbUnJqSEVQalpBCitRakhFUW0ybSFybFJRcmAhVnBySWgrcklqcHJGVnByVmpycUFRakhFUGpaQVFqSHJyISEhIXJsUnIhMkloK3JJCitocHJGVnBySXJycnJQalpBUWpIRVBqWkFbcmAhISEhISFycm0hcGJbaHBiW2grcklocnJGVnJxRVBqWkFRakhFCitQbHJtISEhISEhISEhcmAkaHBiW2hwYltocGJbcitySXJqSEVQalpBUWpIcnIhISEhISEhISEhJHIhI1tocGJbCitocHJGVnFbcnJycUFycnJyUHJycnJycnJyISEhISEhISEhMm0hcGJbaHBiW2hwclZyK3JGVnJiW2hwcm1WcGJbCityK3JJciEhISEhISEhcmAkaHByRlZwcklqcUlycnBySXJyckZWcHJGVnBySWhwYltyISEhISEhJHIhI1tocHJGCitWcVtWcnJiW2hycnJyK3JJYGxyRlZycm1WcmAhISEhISEhMm0hcGJbaCtyVmpycUFycGJbcnJiW2htMnJoK3JyCitycHJJciEhISEhISEhcmAkaHBiW2txW3JQaltyaHBycnJwcklycmJbaHJybVZwcm0hISEhISEhJHIhI1tocVtSCitycnFFcnBiW3JyckZWcnJtVnBycnIrcklyISEhISEhISEhISRycHJSa3JgISFycm1WcHJJcitySXJycklocnJyCitoK3JJciEhISEhISEhISEkcnJybSEhISEhcnJycnJxcnJyYCEhcnJtISEycnJyYCEhISEhISEhISEhISEhISEhCishISEhIXJxcmByYCEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhcnJtISEhISEhISEhISEhCishISEhISEhISEhITMhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhcnJycnJycmUhISRycnJyciEhISEhISEhISEhCishISEhISEhISEhISEhITJtISEhISEhMm0hcmAhISEhJHIhISEhISEhISEhISEhISEhISEhISEhISFyYltocGJbCitocUlycitySWgrclZyISEhISEhISEhISEhISEhISEhISEhISEhcnJGVnByUnJwSW0hcGJba3JgISEhISEhISEhCishISEhISEhISEhISEhISEkcitySWhxW3JyITJGVnFbbSEhISEhISEhISEhISEhISEhISEhISEhISEhMnJocHJJCitqcmAkaCtyVnIhISEhISEhISEhISEhISEhISEhISEhISEhISEhcmJbaCtyUyErcklrcmAhISEhISEhISEhISEhCishISEhISEhISEhISEhISEkcnBiW2ghMklocUltISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhMnJocGJbCitoK3JJcnAzJHIhMm0hITJtIXJgISEhISEhITJtISEhISEhISEhcmJbaHBiW2hyYCEhITJycnJycnJycnJycnJyCitycnJycnJgISEhISEhISEkcnBiW2hwcm0hISEhISEhISEhISEhITJtISEhISEhISEhISEhISEhISEhMm1WcHJJCityISEkcnJgISFycnJycnJyZSEhJHJycnJyISEhISEhISEhISEhcnJGVnJgISEhMm0hITJtISEhISEhMm0hISEhCishISEkciEhISEhISEhISEkcitybSEhISEhcnJtISEhISEhISEhISEhISEySWgrclZyISEhISEhISEhISRyISEhCishISEkciEhISFycnJyISEkcnJgISFwYltrcmAhISEhISEhISEhISEhISEhISEhMm0hITJtISEhJHJyYCEhcmAhCitWcVttISEhISEhISEhISEhISEhISEhISEhcnJtISEybSFyYCRyISEkciEyVnIhISEhISEhISEhISEhISEhISEhCishISEkciEhISFyYCRycmAhIXJgISFyYCEhISEhISEhISEhISEhISEhISEhISEhMnJycmAkciEybSEhMm0hITJtCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEybSEhISRyISEkcnAzISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISFyYCEhcmAhISEhISEhMnJyISEkcnJgISEhISEhISEhISEhISEhISEhISEkciEybSEhISEhISEkCitycHJJcnJySWhyYCEhISEhISEhISEhISEhISEhISEhJHIhISEhISEhISEycmhwcnJycHJJciEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISFycklocnJJaHJgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEkCitycHJyaHBybSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEycmhwcklyISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISFycklocmAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEkCitycHJtISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhJHIhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhITMhISEycnJycnJyWkltIXJycnJyYCEhITJtCishISEhISEyclByYCEhISEkciEhJHIrckloK3JJanJybVZwckZWcVttISEycmgrcklqcnFBciEyRlZxW20hISEkCityK3JJaHFbcnIhMkZWcVttISEhISFycklocHJSciEyRlZxW3JyISEhIVpJbVZwYltrISNbaHFbclBqW20hWkhBCitycGJbaCEySWhxSXJQalpBUHJyclFyckloK3JGVnJyclBqWkFRbGAhIXJybVZwckZWcmJbcnJyclFyYCEhISEkCitycGJbaHBycnJyYltocmJbciEhISFyYltocHJyaCtycmgrckloK3JtISEycmgrclZycnJJcnBybVZycklyISEkCityK3JWcmpJbVZyYltycHJtVnJgISEhMnJyITJtVnBycmhyYltycHJtISEhISEhISEhcnJtIXJgJHIhMm0hISEhCisiISEhIXJycnJycnJycnJycnJgISEhISEhITJyZXBJQWVwSUFlcElyciEhISEhISRycElBZXBJQWVwSUFyK3JtCishISEhIXJyQWVwSUFlcElBZXJycnJyYCEhITJyZXBJQWVwSUFlcElBZXBJbSEhISRycElBcnBJcnJwSXJycElBCityISEhIXJyQWVwSUFlcElBZXBJQWVyYCEhITJycnBJQXJyckFycElyZXBJbSEhMnJocHJycnBySXJwSUFlcElBCityISEkcnBySXJycklocnJBcnJyQWVyYCEhcnJJaHJySWhyckFlcElBZXBJbSEhMnJocnJJaHJyQWVyckFycElBCityISEkcnBySWhyckFlcElBZXBJQWVyYCEhcnJJaHJyQWVwSUFlcElBZXBJbSEhMnJocnJBZXBJQWVwSUFlcElBCityISEhIXJycnJycnJycnJycnJycnJyYCEhISElIyEhUyEhISEhISIzIkBKIVMhRWAlIiVDVEVRMyEhISEhISQhCisiQDMiJSFFWCUiZSpQRidhS0JmOU0hISEhISEiMCE5UyFCMydtIiFqNUNBIlhCQDBQKSNCSjRRUFpDISEhISEhCishRDMmRCEoZCJbITMsOFE5YEUnJk1DNSIiRSdiUSEhISEhISJoISYpIUwzI20iM1kqQ2ZqW0ZROEozZiZjQ0FGCishISEhISEoSiFhISMrITVpJiJQKlBDZjlpRiEhISEhISFNYCI1ISslIVshOCw0QGpkREEqUCkmR1tGUTQlISEhCishISEhOCEmOCEwSiVsJSFQJkMnUGQpJjRQSCg1bSEhISEhISIjISY4IUMhJWwlIVAmQydQZCkmNFBIKDREISEhCishISEhNiEjZCEpYCI1TCE5J0RAak4xVUIhISEhISElMyEmSiI4ISYrKSMmKlBGJ2FLQmY4ayEhISEmMyImISMpCishbSEoWSEhMyIhISUhISEhISEhIyYhISEhITFKISEhISEhMUohIUohIiMlR0tGUUNUQ0BhTiEhISEhISEhISEhCishISEhISEhISEhISEhISwlMShbRyM0ISEhISEhW2ZKYTNIQTRTRWZpSi01aWUsTSUhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEjckVYQFQxKUoiCitoISZCInFKJyRycnJycmAhISEhISEhISEhISEhISEhISEhISEhISEhOFQ4YUtFUUdlQkBHUEZicDZCaCpURig0CitURVFGISEzISUhISFbZkohIyEjVChCQSpRREA5WEMkVVA2JyZaQ2g5S0NmOWMsZTBNRlFQYEcnUFpDY1QzSEE0CitTRWZpSi01aWUsTShycmAhISEhISElJjQmQCY0ZEcoS2QhK0pgLTZKYSEhISEhISkhISEhISEhISEhISEhISEhCishISEhISEhJHJycnJybSEhISEhISEhISEhISEhIW0hISEhMm0hISEhISEhISEhISEhITIkciEhJGBtISEhISEhCishISEhISEhJFhycSEhcnJtISEhISEhISEhISEhIWNgcmAhISEyISEhISEhISEhISEhITFycnJKISEkcSEhISEhCishISEhISEhJGAhMm0hISFySiEhISEhISEhISEhMnJKbHJtISEyaSEhISEhISEhISEhIS0hISEhISEkMSEhISEhCishISEhISEhJGAtYCFgITJycmAhISEhISEhISEhIW0xLSEtYCRxJHIhISEhISEhISEhITIhMS1jLWBycnIhISEhCishISEhISEhJGAhISFjITJpMm0hISEhISEhISEhIW0hISEtISRxJHIhISEhISEhISEhITJycnJtcm1ycnIhISEhCishISEhISEhISEkWmxabFhjLSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhJSEhISEhISRySiEhIUotISEhLCNKISEjYG0hISFAIiEhCishMkpCISEjLSchISJNS0ohISEhKSEhI2IyISEhWGNCISEqcW0hISMkMEohIUpNQiEhMmZtISEhSWAhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhITJxISEhJHJgISEhcnEhISEycmAhISRybSEhIXJySiEhMnJpISEocnEhISFyckohCishMnJxISEkcnJKISFycmkhITJycSEhJHJySiEhcnJpISEicm0hISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhMyRycm0hCishSiEiISEpISEzISMhISUhIUohIiEhKSEhMyEjISElISFKISIhISkhITMhIyEhJSEhSiEiISEpISEzISMhISUhCishSiEiISEpISEzISMhISUhIUohIiEhMnJyYCEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhITJycmAhJHJybSEhcnJyISEycnJgISRycm0hCishcnJyISEycnJgISRycm0hIXJyciEhMnJyYCEkcnJtISFycnIhITJycmAhJHJybSEhcnJyISEycnJgISRycm0hCishcnJyISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISMhMnJycnJycnJycnJyYCEhISEhISEhJGAhISEhISEhISEhbSEhISEhISEhCishbSEhISEhISEhISEyISEhISEhISEhMiEhISEhISEhISEkYCEhISEhISEhJGAhISEhISEhISEhbSEhISEhISEhCishbSEhISEhISEhISEyISEhISEhISEhMiEhISEhISEhISEkYCEhISEhISEhJGAhISEhISEhISEhbSEhISEhISEhCishbSEhISEhISEhISEyISEhISEhISEhMiEhISEhISEhISEkYCEhISEhISEhJGAhISEhISEhISEhbSEhISEhISEhCishbSEhISEhISEhISEyISEhISEhISEhMiEhISEhISEhISEkYCEhISEhISEhJGAhISEhISEhISEhbSEhISEhISEhCishbSEhISEhISEhISEyISEhISEhISEhMiEhISEhISEhISEkYCEhISEhISEhJGAhISEhISEhISEhbSEhISEhISEhCishcnJycnJycnJycnJyISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhIyEhISEhISEhISEhISEhISEhISEhISEhISErISEhISNKISEhISEhISEhISEhISFTa3JycmsxWyEhISEhCishISEhISEhI00ta2MtU2MxWiEhISEhISEhISEhISNNLWtiTS1rckohISEhISEhISEhISFxTS1rLWNTMmkhISEhCishISEhISEhITJiTS1jMVgkcSEhISEhISEhISEhISRtYk0tY2MhckohISEhISEhISEhISFyKy1jLWNgMmkhISEhCishISEhISEhITJTYzFNLWskcSEhISEhISEhISEhISNNLWtiTS1rckohISEhISEhISEhISstY1YtYk0ta2khISEhCishISEhISEhISsxWGMtYk0tayEhISEhISEhISEhISRrYy1jLWJNVkohISEhISEhISEhISFtISEhISFiW2khISEhCishISEhISEhITJycnJycnJycSEhISEhISEhISEhISEhJFpsWmxabEohISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIiEhISEhISEpIyEhCishKHJpISEkaXEhISFJSUohIShyUyEhIkliISEhNmlKISEmcikhISJyayEhIUlJSiEhMk1pISEiYEkhISFCJEohCishJSFCISEicnEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISFKKSEhIUlySiEhMnJtISEicnIhISFJcmAhCishKHJtISEicnIhISFJcmAhIShybSEhInJyISEhcnJgISEocm0hISJyciEhIUlyYCEhKHJtISEhMnIhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEpISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEycnJyCitycnIhISEhISEhISEhISEhISRgISEhISRxISEhISEhISEhISEhISFtMnJycnJycnJyISEhISEhISEhISEyISEkCitgISEhISRgISEhISEhISEhISRgcnJtMnJycmBySiEhISEhISEhISFtISEyISEhISEyaSEhISEhISEhISEyJHJyCitgcnJyciRxISEhISEhISEhISRgISFtISEhISFySiEhISEhISEhISFtMm0yJHJycm0yaSEhISEhISEhISEyISEkCitgISEhISRxISEhISEhISEhISRycnJtMm0hISFySiEhISEhISEhISEkWmxbISEhISEyaSEhISEhISEhISEhISEkCitycnJycnJxISEhISEhISEhISEhISEhMWxabFpsSiEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISElCishISEhISEhISEhISJyaSEhITMkISEhJnJyISEiIyEzISFBW2YhISUpIkohIkhyQiEhM0onISEmVnBKISIjIUIhCishSVgnISEkaSJKISEkcmkhISEycSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEockohISJybSEhCishSXJtISEocnIhISJycmkhIUlycSEhKHJySiEicnJpISFJcnEhIShyckohInJyaSEhMnJxISEhMnJKISEhcmkhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhITMhJ3EhISEjMzMhISFKIyEhISokMyEhIltYISEicnJKISFgSC0hCishQihNISEwYWlgISNGSC0hIVIoTSEhLSJpYCEiSkgtISEycnIhISJycmAhISFIISEhIShKISEhIWkhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhRWkhISEyciEhISRyaSEhIXJyISEhJ3FgISEocnEhISRycmAhInJybSEhcnJyISEycnJgISRycm0hCishcnJyISEocnJgISFycm0hIShyciEhISJpISEhIUghISEhJEohISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIyEhISEkciRycnIhCishISEhISEhISEhISEhITIhMiEhITIhISEhISEhISEhISEhISRgISEhISEyISEhISEhISEhISEhISFtIW0hITJtCisyISEhISEhISEhISEhISFyYHJycjNyYCEhISEhISEhISEhISVGYEZycmBGcjMhISEhISEhISEhIUclNCVJcnAlCis0cjMhISEhISEhISEiZDQlNChycjQlSWQhISEhISEhISEoNGNGJTRycmQ0KHAhISEhISEhISEiJUdyNCVJcnAlCis0cjMhISEhISEhISQ0KDBgNChycjQlSWQhISEhISEhISFoYSU0JTRycmQ0KHAhISEhISEhISEhaGElNCVJcnAlCis0cjMhISEhISEhISEhaHJycnJycklycmQhISEhISEhISEhIWhHaEdycmhHaEchISEhISEhISEhISEhISEycnAhCishISEhISEhISEhISEhISEhISRycjMhISEhISEhISEhISEhISEhISEkR2QhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISElISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhJHJycnJycnJycnJybSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhITJtCishISEhISEhISFycm0hISEhISEhISEhISEhISEhISEhISEhISEhISEhIXJgJHJyYCEhISEkciEybSEhISEhISEhCishISEhISEhISEhISEhISEhISEhJGorcnJycTMhISEycnJycm0hISEhISEhISEhISEhISEhISEhISEhISEhISNbCityITJyciEhISEhISEhcmAhISEhISEhISEhISEhISEhISEhISEhISEhIXFJcnJycnJqISEhISEhJHJxMyEhISEhCishISEhISEhISEhISEhISEhISEhJHIhISEhcnJtISEhISEhMnJqISEhISEhISEhISEhISEhISEhISEhISEhcnJyCitqITJScnJybSEhISEhcnJOISEhISEhISEhISEhISEhISEhISEhISEhIStgISEhISEhISEhISEhIVZxMyEhISEhCishISEhISEhISEhISEhISEhISEhJHIhME1CISEkQiEhISFycnJycmJYISEhISEhISEhISEhISEhISEhISEhITJtCishcUdKISEwTUIhISRyciEkcnJgISEhISEhISEhISEhISEhISEhISEhIXJgISFxR01CZjBNQiEycnJycm1WISEhCishISEhISEhISEhISEhISEhISEhJHIhISEhISEkQmYhISFycmAhcnJtISEhISEhISEhISEhISEhISEhISEhITJtCishISEhISEwSiEhISRyciEkcnJgISEhISEhISEhISEhISEhISEhISEhIXJycnJycnJyK3JycitycnJycm1WISEhCishISEhISEhISEhISEhISEhISEhISEhISRqcUlSanFJUmorYlhWK2AhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEzCishcnJycnJycnJycnJycnJycnJycnJycnJyISEhISEhISEhISEhISEhISEhJHIhISEhISEhISEhISEhISEhISEhCishITJtISEhISEhISEhISEhISEhISEhMm0hISEhISEhISEhISEhISEhISEhISFyYCEhISEhISEhISEhISEhISEhCishcmAhISEhISEhISEhISEhISEhISEhISRyISEhISEhISEhISEhISEhISEhJHIhISEhISEhISEhISEhISEhISEhCishITJtISEhISEhISEhISEhISEhISEhMm0hISEhISEhISEhISEhISEhISEhISFyYCEhISEhISEhISEhISEhISEhCishcmAhISEhISEhISEhISEhISEhISEhISRyISEhISEhISEhISEhISEhISEhJHIhISEhISEhISEhISEhISEhISEhCishITJtISEhISEhISEhISEhISEhISEhMm0hISEhISEhISEhISEhISEhISEhISFyYCEhISEhISEhISEhISEhISEhCishcmAhISEhISEhISEhISEhISEhISEhISRyISEhISEhISEhISEhISEhISEhJHIhISEhISEhISEhISEhISEhISEhCishITJtISEhISEhISEhISEhISEhISEhMm0hISEhISEhISEhISEhISEhISEhISFyYCEhISEhISEhISEhISEhISEhCishcmAhISEhISEhISEhISEhISEhISEhISRyISEhISEhISEhISEhISEhISEhJHIhISEhISEhISEhISEhISEhISEhCishITJtISEhISEhISEhISEhISEhISEhMm0hISEhISEhISEhISEhISEhISEhISFyYCEhISEhISEhISEhISEhISEhCishcmAhISEhISEhISEhISEhISEhISEhISRyISEhISEhISEhISEhISEhISEhJHIhISEhISEhISEhISEhISEhISEhCishITJtISEhISEhISEhISEhISEhISEhMnJycnJycnJycnJycnJycnJycnJycnJyYCEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhIiEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISRGISEhISEhISEhMGAhISEhISEhISEhISEhISEhISEhISEhISEhISEhIWgjMkVycnJycnJyCitFKXBjciEhISEhISEhISEhISEhISEhISEhISEhISEwWE0pYjJFK2JYVmZiLU0pcFtqISEhISEhISEhISEhISEhCishISEhISEhISEhMGBNKWIyRitwYE0pYjJGcnJOISEhISEhISEhISEhISEhISEhISEhISEhIXJwYE0pYjJGKWItCitNaCEkcnEzISEhISEhISEhISEhISEhISEhISEhISEhJHIrcGBNKWItTSlwYFYhMnJqISEhISEhISEhISEhISEhCishISEhISEhISEhMm1WK3BgTSliMkUrYlghcnJOISEhISEhISEhISEhISEhISEhISEhISEhIXJiW0YpYi1NKWIyCitFK2AkcnEzISEhISEhISEhISEhISEhISEhISEhISEhJHJmYi1NKXBgTSliMkYhMnJqISEhISEhISEhISEhISEhCishISEhISEhISEhMFhNKWIyRitwYE0pYjJGcnJOISEhISEhISEhISEhISEhISEhISEhISEkRiliLU1mYlhWK3BYCitNKWIyRXEzISEhISEhISEhISEhISEhISEhISEhISEhJEYpcGBWK2JYVitwYE0pYjJGISEhISEhISEhISEhISEhCishISEhISEhISEhMnJGK2JYVitiWFYrcGBNZnJOISEhISEhISEhISEhISEhISEhISEhISEhIXJgISEhISEhISEhCishK3BbcnEzISEhISEhISEhISEhISEhISEhISEhISEhJHJycnJycnJycnJycnJycnJqISEhISEhISEhISEhISEhCishISEhISEhISEhISEhITJSanFJUmpxSVJqcUlOISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhJSEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhcnJycnJycnJycnJycmAhISEhISEhISEhISEhISEhISEhISEhISEhISEhJHIhISEhISEhCishISEkcnEzISEhISEhISEhISEhISEhISEhISEhISEhISEhMm0hcnJycnJycnJycnJycnJycnJgISEhISEhISEhCishISEhISEhISEhISEhcmAhISEhJHIhISEhISEhISEhJHIhISEhISEhISEhISEhISEhISEhISEhJHIhMnJycnJtCishcnJycnJycnIhMnJqISEhISEhISEhISEhISEhISEhISEhMm0hISEhIXJgISEhISEhISEhIXJyTiEhISEhISEhCishISEhISEhISEhISEhcmAkcnJycnIhMnJycnJycnJgJHJxMyEhISEhISEhISEhISEhISEhISEhJHIhISEhITJtCishISEhISEhISEhMnJqISEhISEhISEhISEhISEhISEhISEhMm0hcnJtIXJgJHJycnJycnJtIXJyTiEhISEhISEhCishISEhISEhISEhISEhcmAhISEhJHIhISEhISEhISEhJHJxMyEhISEhISEhISEhISEhISEhISEhJHJycnJycnJtCishcnJtISEhISEhMnJqISEhISEhISEhISEhISEhISEhISEhISRqcUlSanJgISEhISEhISEhIXJyTiEhISEhISEhCishISEhISEhISEhISEhISEhISEhJHJycnJycnJycnJycnJxMyEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishcUlSanFJUmpxSVJqISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEzISEhISEhISRycmAkcnJycnJyYCEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishcmAhIXJgISEhISEhcmAhISEhISEhISEhISEhISEhISEhISEhISEhISEhJHIhISEhISEhISEhISFyYCEhISEhCishISEhISEhISEhISEhISEhISEhISEhMm0hITJtISEhISFycm0hcmAhISEhISEhISEhISEhISEhISEhISEhISEhCishITJyciEycnJycnJqITJyciEhISEhISEhISEhISEhISEhISEhISEhISEhJSIrYlgiK3JycnJiWCIrcnFJISEhCishISEhISEhISEhISEhISEhISEhISJxMzgmIjM4JnJycnJxMzgmIklyaiEhISEhISEhISEhISEhISEhISEhIUlOCismIjM4JiIzQXJycnJqIjM4JnJyTiEhISEhISEhISEhISEhISEhISEoaiI1W2orYDgmIklycnJyTiYiM0FycTMhCishISEhISEhISEhISEhISEhISEzOCZxSXJqIjM4JnJycnJxMzgmIklyaiEhISEhISEhISEhISEhISEhISRqIjM4CitWcTVYJiIzQXJycnJqIjM4JnJyTiEhISEhISEhISEhISEhISEhITJSciIzOCYiMzgmIklycnJyTiYiM0FycTMhCishISEhISEhISEhISEhISEhISEyUnIiMzgmIjM4JnJycnJxMzgmIklyaiEhISEhISEhISEhISEhISEhISEhITJSCitycnJycnJycnJycnJqcnJycnJyTiEhISEhISEhISEhISEhISEhISEhISEyUmpxSVJqcUlycnJyUmpxSVJqcTMhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhIXJycnJxMyEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhJHJycnJqISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEkanFJTiEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISFKISEhISEhISEhISEhISEhISEhISEhCishISEhMiEhITJpISEhISEhISEhISEhISEhJHEhISRxISEhISEhISEhISEhISEhISRgITJpISEhISEhISEhISEhCishISEhIXJKJHEhISEhISEhISEhISEhISEhISFtMmkhISEhISEhISEhISEhISEhISEybHEhISEhISEhISEhISEhCishISEhISEyaSEhISEhISEhISEhISEhISEhISFycmkhISEhISEhISEhISEhISEhIWxxITJpISEhISEhISEhISEhCishISEkcnJKJHJtISEhISEhISEhISEhISEybFtpIXJKbSEhISEhISEhISEhISEkYCRxITJpMmkhISEhISEhISEhCishISFtIXJKJHEkcSEhISEhISEhISEhISEhcnFpISRyaSEhISEhISEhISEhISEhMWkhISFsSiEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhITMhISEhISEiIiEhISEzMyEhISMpISEhIUwhISEhJiEhISEiMyEhCishISkhISEhKCEhISEjKSEhISRNSiEhIilOISEhNSohISElTDMhISFgQiEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISElJyEhISJLSiEhISlgISEhJC0hISEhQCEhISEoSiEhISFgISEhIUghISEhRmAhISEyMSEhCishKGNgISEibXEhISFJMkohISRhYCEhIWBCISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIiEhISEhISEhISEhCishITJxISEhIyJKISEhSkIhISFpJyEhITEiSiEicmNCISFJcWYhIShyS0ohInJgQiEhIWknISEhMSJKISEhS2khCishISpxISEhJHJKISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISFyaSEhITJxISEhJHJKISEkcmkhCishIXJxISEocnJKISJycmkhIUlycSEhKHJySiEhJHJpISEhcnEhISEkckohISFyaSEhITJxISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEpISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishcnJycnJyISEhISEhISEhISEhISEhMiEhISFyYCEhISEhISEhISEhISEhJGAhISEybSEhISEhISEhISEhISEkCitybSEhISRyISEhISEhISEhISEhISFtciEhISFyYCEhISEhISEhISFycnJyLXIhMm0ybSEhISEhISEhISEyLWMtCitjLXIkciRyISEhISEhISEhISRjLWMtYzJgISFyYCEhISEhISEhISFycnJyLXIhISEybSEhISEhISEhISEhISEkCitjbSEhISRyISEhISEhISEhISEhISFyciEhISFyYCEhISEhISEhISEhISEhJGAhIXJybSEhISEhISEhISEhISEhCishbSFycnJyISEhISEhISEhISEhISEhMnJycnJyYCEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEpCishISEhISEhISEhISEhISEhISEhISEhIXJycnJyciEhISEhISEhISEhISEhITIhISEhJHIhISEhISEhISEhISEhCishJGAhISEhcjIhISEhISEhISEhISEhIW0hISEhMnJyISEhISEhISEhISEhITIhISEhISEkYCEhISEhISEhISEhCishJGAhISEhcnJtISEhISEhISEhISEhIW0hISEkbWMtbSEhISEhISEhISEhITIhISEyYCFjLW0hISEhISEhISEhCishJGAhISRtJC1jMiEhISEhISEhISEhIW0hISFyLWMtY2AhISEhISEhISEhITIhISEyYy0kLW0hISEhISEhISEhCishJGAhISEyYy1jbSEhISEhISEhISEhIW0hISEhMnJyY3IhISEhISEhISEhITIhISEhISEkYHJyISEhISEhISEhCishJHJycnJycnJtIXJgISEhISEhISEhISEhaEdoR2hHZCEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISUhISEhISEociEhISIhQiEhCishMyYhISElImkhISIhIyEhITMoSiEhJSMlISEiIiFKISEzMykhISUlIyEhIiIhSiEhMykzISElImwhISIhI2khCishSXJRISEhVVMhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISFJbSEhIShySiEhInJtISEhSXJKISEocmkhISJycSEhCishSXJgISEocnEhISJyckohIUlyaSEhKHJxISEicnJKISFJcm0hIShybEohInJxQiEhJHJgISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEiISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhcmAhCishISEhIXJyTiEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEkcnEzISEhISRycTMhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhJHIhISEhcnJOISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhITJyCitqISEkcnEzISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEybSFyck4hISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISFyclJycTMhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishcnJOISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEycnJyck4hISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEyUnJxMyEhcnJOISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISRycnJyCitqISEkcnJybSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhcnJSanJyTiEhMnJqITJtISEhISEhISEhISEhCishISEhISEhISEhISEhISEkciEhJHJxMyEhcnJOIXJyTiEhISEhISEhISEhISEhISEhISEhISEhISEhMm0hITJyCitqISEkcnEzJHJxMyEhISEhISEhISEhISEhISEhISEhISEhISEhITJycnFJTiEhISRycnJOISEhISEhISEhISEhCishISEhISEhISEhISEhISEhIXFJTiEhISEhITJSaiEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISElISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEycnJycnJycnJycnJgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhcmAhISEhISEhMnJyISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEkciEhISEhISEhcnJtISEhISEhISEhISEhISEhISEhISEhISEhCishISEkcnJybSEhISEhISEkcnJgISEhISEhISEhISEhISEhISEhISEhISEhISEhMnJCcmAhISEhISEhMnJyISEhCishISEhISEhISEhISEhISEhISEycnJycnJycnBNQnJgISFycm0hcnJtISEhISEhISEhISEhISEhISEhISEhcnBNCitCZjBNQmYwTUJyYCRycmAkcnJgISEhISEhISEhISEhISEhISEhISEkcmYwTUJmME1CZjBNciEhISEhMnJyISEhCishISEhISEhISEhISEhISEhISEycnJycnJycnBNQnJgISEhISEhcnJtISEhISEhISEhISEhISEhISEhISEhISEhCishISEkcmYybSEhISEhISEkcnJgISEhISEhISEhISEhISEhISEhISEhISEhISEhMnJycmAhISEhISEhMnJyISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEkciEhISEhMnJycnJtISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEybSEhMnJycnJycnJgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhcnJycnJycnJycnJyISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEzCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISFycnJycnJycnJycnIhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISRyISEhISEhISEhMnJyISEhISEhISEhISEhISEhISEhISEhISEhISEhCishITJtISEhISEhISEhcmJbciEhISEhISEhISEhISEhISEhISEhISEhISEhISFyYCEhISEhISEhJHJycnJyISEhCishISEhISEhISEhISEhISEhISEhISEhISRyISEhISEhISEhISEhITJtISEhISEhISEhISEhISEhISEhISEhISEhCishITJtISEhISEhISEhcnJycnJgISEhISEhISEhISEhISEhISEhISEhISEhISFyYCEhISEhISEybVZwckZWcmAhCishISEhISEhISEhISEhISEhISEhISEhISRyISEhISEhJHIrYCEhcHJGVnJgISEhISEhISEhISEhISEhISEhISEhCishITJtISEhISEhMnJoITJGVnBySXIhISEhISEhISEhISEhISEhISEhISEhISFyYCEhISEhIXJySWgrckloK3JtCishISEhISEhISEhISEhISEhISEhISEhISRyISEhISEhJHJwYltoISNbaHJgISEhISEhISEhISEhISEhISEhISEhCishITJtISEhISEhISRycHJJaHBybVYhISEhISEhISEhISEhISEhISEhISEhISFyYCEhISEhISEhJHJycnJyK3JyCityISEhISEhISEhISEhISEhISEhISEhISRyISEhISEhISEhISEhITJtIXJycnIhISEhISEhISEhISEhISEhISEhCishITJycnJycnJycnJycnJycnJgISFycm0hISEhISEhISEhISEhISEhISEhISEhISEhcVtSa3FJVmpxW1JrcTMhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISEhISEhISEhISEhISEhISEhISEhITMhISEoQiwhISJlI2AhISIqbSw2NVBOIjJpISEhIUYiJlMhJDgqCisxNCVgISEhImI0UComNEohIyEoalRCZmBkISFkIVNRUE1FJEohJEomKzU4MDEpYCEwIUlqVEJoLU0hITgjVFFQCitNRmMzISIzLFpEQDBjMSEhJiFjQ0A1OGRLISEhJElOJi04UDMhISExKzQlUDg2ISEmIWpDJTYlcCghITgkaFEmCitYREEtISEhM1E0ZUBoNTMhISIkKSFKMnJyISEhISEhISEhISEhSjJyciEhISEtISEhISEhIUpJcnIhISEhMWAhCishISEhIUpbcnIhISEhNEohISEhISVESXJyISEhITgzISEhISElRDJyciEhISM5MyEhISEhIUoycnIhISElQDMhCishISEhIUpJcnIhISEnQTMhISEhISFKW3JyISEhUGghISEhISEhSnJyciEhIVlYISEhISEhIUtJcnIhISFtVWAhCishISEhIUtbcnIhISIhWWAhISEhISFLcnJyISEiI1pgISEhISEhTDJyciEhIiZgYCEhISEhIUxJcnIhISIqY2BZCiswKmYzIUxbcnIhISJJamBZMCpaSiFMcnJyISEiTW1gWTApcTMhTTJyciEhIlBwYFkwKmNgJURJcnIhISEpQjNZCiswKnEhJUQycnIhISEtQzNZMCptISFKMnJyISEhM0QzWTAqbWAhSklyciEhIThFM1kwKmxKIUpbcnIhISFgSSFZCiswKm1KIUpycnIhISFTVSFZMCptMyFLMnJyISEhZEohWTAqbGAhS0lyciEhIixkYFkwKSQhIUtKIWQhISIyZWBZCiswKmwhIUtgIVYhISI2ZmBZMCprYCFMISFwISEiQWhgWTAqa0ohTElyciEhIkVpYFkwKmszIUxbcnIhISJTcmBZCiswKFpKIUxycnIhISJZIWBZMCpkYCFNMnJyISEiYSJgWTAoWjMlRDJyciEhIUJGM1kwI1pKJURJcnIhISFDRzNZCiswKyFKIUoycnIhISFESDNZMCsiMyFKSXJyISEhRUkzWTArJGAhSltyciEhIU5mIVkwKyFgIUpycnIhISFYViFZCiswKyIhIUtJcnIhISFxVmAhISEhISFLW3JyISEhclhgWTArNEohS3JyciEhIiVbYFkwKyJKIUwycnIhISIoYWBZCiswKyEzIUxJcnIhISIpYmBZMCpoSiFMW3JyISEiS2tgWTAqWiEhTHJyciEhIkxsYFkwKXIzIU0ycnIhISJScWBZCiswKiNgJUQycnIhISFGSjNZMCsjMyVESXJyISEhRmEzWTArI2AhSjJyciEhIUcjM1kwKyczIUpJcnIhISFHNjNZCiswKyMhIUpbcnIhISFSaSFZLStYMyFKcnJyISEhYDEhWTArJCElRDJyciEhIUdOM1kwKVgzJURJcnIhISFIJjNZCiswKFBgIUoycnIhISFIUTNZMCohMyFKSXJyISEhSSgzWTAqYDMhSltyciEhIVMqIVkwKFFgIUpycnIhISFbWSFZCiswKFAhJUQycnIhISFJUzNZMClQYCVESXJyISEhSlQzWTApUCEhSjJyciEhIUtVM1kwKVEhIUpJcnIhISFMVjNZCiswKGkhIUpbcnIhISFpSyFZMClQMyFKcnJyISEhakwhWTApUTMhISEhISEhIU1YMyEhISEhIUoycnIhISFNY2AhCishISEhIUoycnIhISFNaGAhISEhISFKSXJyISEhTiIzISEhISEhSltyciEhIU4jYCEhISEhIUpycnIhISFOKjMhCishISEhIUsycnIhISFOMWAhISEhISFLSXJyISEha00hISEhISEhSjJyciEhIU5AYCEhISEhIUozITIhISFORyEhCishISEhIUpKITghISFOTTMhISEhISFKYCFGISEhTlRKISEhISEhSyEhSyEhIU5bYCEhISEhIUszIVEhISFsTkohCishISEhIWpJcnIhISFsVWAhISEhIVMhSXJyISEhbVBgISEhISExNmhHWkNBKUpGUTljRWg5YkJmOCU2QCZURUpHCisjR0E0ZEVmamMiJVBNRWZpJTknOWlHITQnREBqTiMoNExBZjBYRWgwUCMoNExBZipYQkBqViJoNExBZjBbRihSCitWTCE6CisKZGlmZiAtLWdpdCBhL3NyYy9vc19tYWMuc2l0LmhxeCBiL3NyYy9vc19tYWMuc2l0LmhxeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDA4OGIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX21hYy5zaXQuaHF4CkBAIC0wLDAgKzEsNDM5IEBACisoVGhpcyBmaWxlIG11c3QgYmUgY29udmVydGVkIHdpdGggQmluSGV4IDQuMCkKKzokaENURTVkZSxNQlpFQDBgLFIwVEchIjY1OTNlOGRQOCkzIzMiJidCISohJVpISzZHKDlRQ05QZCkjS00rNiUKK2oxNkZZLTZOajEjIiJFJyZOQydQWikmMGpGaDRQRUEtWCklUFpCYmlYKSdLZEcoIWssYnBoTiEtWkJAYUtDJzQKK1RFUjBqRmJqTUVmZFs4aDRlQ1FDKkcjbTAjS1MhIjQhISEmJ0IhKiEkRkohIiEqISRGUHJmJERAUDhROWNDQSoKK2ZDQDVQVDMjUE4hMyIhISFsISEjYHEzRCZZK3JTVDMjMyQzW1FEMyEkaEZkISEmJCghKiElJGAiZkRAZFkwNWkKK2YsUWVNRiEhIUdqSzA2OSJiM2VHKjQzJTEhI0ohaiEjMyNTISFOIUcjYEc1UUg0JiVwUmEtSyVFNFVrWlRhUVUKKyItK1g2KSYsSyRAWW0qaEdDKTloW0Q5VClaRUhTZWVIZSUkbHI0OFQ5cCROcCZQYkFxVSpwI0MhIStwQnFDMiQKKysoMzFtamIoZCJjcDZJVGJJYlUiUHFORiMlWmk5JGNBWDYhJ0FOISEmJlY0REMkaVQlU1NUTEMhIWNbWVFsOUQKK1FwNU1SS0FHKTUzNUZWcW1OIU40bElbJShBWixCIkQpTVhUISE2SiEmZDZGa1ttJW1UU1MsJTBjJnFLYGBgNE4KK2JwQU5qM0oxJ1JpYExINWlGaWhgY2ZxVTlyNlBIRDEobDBWVCJkYihhM2ZKNktqU0ZKMU0mIlNEMyEwMy1rYmQKKyw1cWFWTkZsNWNoSCdCaG0xQyZJYkVUSCFmLVpEOGlYKXBaQ21NZDNYQyYmMmw5RzMwJSNBY1EoRyllIVFVWlUKK3BpcDJGR2VBamxNOSxNZlosYEBAbGRjUVVERTknWHBVWU1UUlMwZkkqZDUzJEliNVZVZk1GQitHYzg4KUgyJE0KK05bQFkoKEAwTEQ4SltNM2FpJzEoYUlMaUorbENlQGFNRnFBJCpOSSlYNE1HJ0syKmswRkZmOSFtJSVHSmIrYDUKKycnTSMsWk5EZCU1aGtJU0JMIipycSxjSWAiLEBJbGpFUSpkKThSbDFKK0FiY0BlbWo2UWY2SllOQEAtamBwK0cKK1hOISNaWU0sSmgtUWpJKCksZCVQKlhEYjJJZjUhUGInIiMjSzk4ampoNmJkaFgqMidyVlVAWkVCNGZOYVVVa2gKKyVkMlFaTFUnYUVQJCYtQ0RBNFlgYSQyaFIyaVVpJTItMyFKMDVUYkJlIjFxW3BCaEJRWE4xciJLMDRIMlJSIksKKzRpa3IqSjhrOVswYVpJOWs0KyciImw4IiZtOVY2VWU5UVNVcnJyY2ZTTC1lSytYKiRCQ21MVGw4cWE4ZGxkRGoKKyFJbHIybGVyTkNjYSRgVWYoJCxUTjByMkNUJEdOVVNLRGxSUzFgIjQlS2pxRiNrQVtCbVozITAiQ0lWMiVQWmEKK2FNLVpyW2sqbClEUFJUQyxLcFhKRlZwNlZrcWoxM2FRYGxMUSNGcSxoWUYxMls2IyFETGZOVkJRWVFjQCgwJmAKK3JscjkmJVVibXArWCgmUEUtYjFWK1VgMkJoTUlgViJoWiFOIzkoUDYsSTZibGEtUWgsI1gtYTRtIUpiTUomIycKKydQVE1ITiEjUGxYa1pCJDBFUylMKFtgWWVVazNIRzktKSEtSEtWWUMsRW0xQkIlailkYDhtLWksKjEwVSpOVGEKK0woNnFNSWBmQlgjVjJESWthJ2xgcjJMIzImOTU2YSJVQlhIVmJHJiVkWCVHKkFHM0pFLTNaYlQlZkZGK2tJYFYKK1BgTFBgKVRqYmAoUyZLI1MsMyphK2wwQEwlOFkhVHFMNSdmYmhyUWpsQiJLR0RGZlBAUSszIStoY0UhcFJbTXAKKy1pJ3ImSU41LVlOR1siRStbUCNORm0qISFyLWpEVElCW0EpQWBxJVQhU0lyKjBVNCgyNkxHVVEsTk5RVW1HOTMKK2QkRk5aQygrQkspYGxSJickJ2ZEI05SJ1RWJkY1JWBFSCJYZUVQUUhjWmxqW2JxaW1RSywyMWwqKkI2M0VmQCwKK1opVTBkbFEsVmBKK0JCKScmK2I1RGlqTjQ5I0xFSSFhMzRoSiZTaltgQVAjcGAmRDAmcmpUZmhHSWZGU1trMCEKK1tbZDAoRjUsZVBjIWtjLWhSMVAhZEtgaCE1UElqWnIiRXFYOSNkSnBVNCgyVmJTYzhlZTg2MSsrMyEjU3JjWSMKK21hM1hmYkFxLGJyNHFrMVtHOWZkaCpoaSRxJFAzaWBRNFtyREJlJThqVkNqU2tpYUdYUiZtYUBqcCZZM2xiVUkKKzkoa0MmSUBlSCQtYjEsJkNVWkZEWWlaMXJERy1NYjJlayhLMUZkcCItKDVAUSY4JEoiIiYiSCIxVjJxRkQ0RDkKKzFpWzNTS0FrQTMtSiVkTmBVWEJTSilQOVFtUlImR2lGck44TUpkUUFqYioyJ3BVcmUwQUdjbTVybVU5NiUka3IKK2s2IWk2SEtmVTUmOGZJaFA4LCciKkBwbElmJyJGUVMycic4ZHFIWWZZWVo0ZjRlLFFbaEtScmVZVic2JDBCJEYKK0BgS2xZaUhGTVZiQVNTY0pNJmVITFpgcGk2YFhYIWFpYVswYkEsM3BGJClmKi1KM0YoWEpVMUlyJVAkayonIVEKK21jSTU2bFJII1MrMkcjZkIycSpBI1tsNkMyRFA5cVU2aSM4KFoyYipASkA5JlkianEnYmlDYFA4KllhJSMtRkIKKywia0ZhSlIiclA1JltocGZEZUlmVWpiME0zMSNROURKUihFOFokJ1toalZVKyMoTVIiOWNZKCQiSDZtSmZocmAKKyFZK2BBcENWIydpKkkoaSxhZlRwNmsjUjktNjNaVmUlSi0nR1AqTGIiYiczaTJONCNFMUArR01gQVhZUiJjYFAKKyonK0o4YHFUREcqISE5UyswVTFVJUAzOUVCJiMtZVNjaTRYYzMwbSJGSlpMWlZpMlkhKWNCSyQnYkBFIjJqQEIKKykqaGZiY2xyJiczJSYxKUAkNGw2Um1INCNgIkBaMWFWKSJmbThxWjklJTAqOUAhUGBLaydTbGMjLDBUciswJ1UKK0VpLXImMSlpLStIOCZIcU1yOU0zKTNbKWNKTSJxUWU2KlJbWlBmJzlJUUxFWStsYkVMSFUqNURII1tOJEwoVjgKK2glUCI2QGUicSlLTCJFWlVWTCEzK1YiJilZK2IiUko0SEVJW2RiQ2ksJWohIVZoIi1iJkpNS1ZBYllhIUxrIjYKK2I1NUlEVjhqInFhNSNCMkUsTCVINlplaG1tSWZBQjRRSyFVWEVNQmUtRmQycEZtMiEncWNxQmQ4Mm1wNlgxKTYKK0hFSVFoSUdYIyRCOWkxOWBpKyRDJylULHJpNCVhVGhhSzNaIjYnIWZNMDlOKyFiS1YiMjYrJyFIKmpMMUZiJWYKK1NWaTRjIywmaXFZOCZSVmQ2K1MiSyQkIWZZYGkzKEZYa2xLUlQ2LHJLOCVHKmEqISFkVjRYIkkxRGpJKSJTalAKKzVJUjFZMlRobWxOY2w4TkdUUDAyQScnKWAtIU1sSUUicXEjQFVQKSxwIiJTKGMsI2RhZVIjRGEnJVJAY001bEUKK2otKDNxLCVhU3JjOGYjQGxOaVYzSEBYbSNWUEpNUlRYUFlDNSsjUmUxNSlISCorQ1pbK1MhZTMsRCllTVQjRlgKK0JAaDhmWm1CTEFNJyk2YTBrSSpqS0FURkhmQWNSZDU5Yzk0NUUocSs1bDRUJUdNSTRoISE5LGoyTG0kcktjSlYKKydIM2NIRlpsLWtNaU1LVlNGRktrMyEjVGppNTVqJFIjYChxUDgzLUkialFGYGZRSzFCJzJFKUVaZXBIQyZYKUwKKy1yU1NUW0hZUzQsTnJEcSdJS2QwIjRTIkEka0VgQTBraiptQGZsa0YlQUJKOC05WkZIOTNkVSxJKGspUmRtQzEKKzEqImxgMUVkJmYhVmljKERgciQ0KUNma2FKbFtHQm1kIyVpWiEsYzBRSyMkTTNmYCgmOXA5JDlZKyotYiRsTFYKKy00UERtMWQkMTM2Ki1sWDY4TVhGbE1Ta0NsJ1pOZUdEQ0UpVGRiVSMnI1s0cmRyMmgxQEAnJnIzU0RxUVNQaCcKKzUnazFFTDM5azNxKDImZXJUcUFUKyI5bWFQMmtBSWk1RHEmZThWcVlCSmpbRlZgLCcmRkglYGtDbE1BJioxaDEKK1NTJDJZYFQsWiVLWSZEWVRrRDRSJVJoJjJjWSFMKkc1K1sjNFs4KkMlQixwSUNqSUNyMXFWNFpjRmpbOVMkMFQKK1JgTkwzIStITkNaK3JFbGEoI2I0aSgnNEgmSidCS1knUFVlISZicXBmJVlqVFBNcTJKUSlbTks0K1NLS0FHLFEKK05ZNDRTSVpYSy1aUCFBTDZUMmhRaHFEOWlVW1REOUhpKmxDMklhazFxcjlIaSVpRjByamlHK05bVUVSMlFMbUEKK2I5a0VOYzNpYioyRSZjLCNxWjk1K1EiNCE0bGtiNE5iYWhTJyxAIkphTiEkW2Q2IkJAMkMmVlRbaDFGRExpcmkKK2MtYyRASklgSVRGcS1wMUNJYEdsbDZCMCgwLCFEaCMyQzVZKVBsJy1pWlBjMzhgaDgxalVhaFJkNmxYKFhgVmIKKzknQzAtVSRlQVEtWVZDWHAyKjJyTHA5MUBDa1tSU3IjaEtlR1RCKyZgUyE2bCFrKyE5RyJpUGlQMCMlNTI1MSoKKzhQTDJmTk1DcFtyaWVtVmVLMChtJllUISEhUVFGa2ZsIXJbQGBwMiVMKlpaaFUiQCFZTSctJGo1SCdEQ04jKGoKK1MxKjgxbVhaYWYqLC1tVWUqQCoyKzJRJ2FpK2pKQ1ttQEMqZSlBImxAamFIIWZFIVtVTFptZUxwKGhAVEJpaSEKK2xrYkcrMnBqVEBpWlhjQjVJMEtMMEBlJXJsUklRWWVSTilATVBoQkxGSmZjRXJRJE1iamknQEZbIlJpUlspJWUKKyJwNS1VSE0kUEEwIjhQImVIVCpVcElbU01pKyxCRlskRVpSWGJVIkAiZikxVkVjYUFVLFViVEstQSlsZiwmWWYKKyhEQVJQOEBIZltwVjNAbGxNcSFmTWI1aTFoRGotNClJRjE1Uy1jYikiY0EjRGknYDRwWDJLOCFpUFtyclFQZWwKK2lANDIkNWZQKypHJCRkUyFwNUApR1E0JUxLQ3BOYDVTOWxpZi0hYygjJjVwMGlJW0ZOVUpGaTYlWSZUQExEJmAKK1tRVkszNGloLEo1WmE1Y1lCbGxbI2NQR0ArMklyLUQmKU5UISFVcVs4NVJLYExrITNhImFDI1NEbVojQFFbTXIKK2JUYmIiWyFRMGYtMXJrQklwTCVDLVtlVUZQWCEnJ0QrRiwqWVYkcGhBJmJNMTVYKDZoRCJUQlNTMlBWRVtoJSUKK2pjRlRQYzVrMHE1QTktWGA2UWZaYklrImgrTUgiNiZRWypDciZDSGtCa1pZNEdNSmM2KkpQI1FmRmJyQixmTW0KKzVgUWtAMkwsYmhUNiQlYyNxJnE2NElAYENJR1pLUkswJUcpViJTOW05KzYmYUlsJjZSQ0ltYDNjZTEwMihWQk0KKyJEI0Epa2ppZmQkImRtRmpKRmJUVmtgWlhiIzVsOWhHMVpGVkdWVltgJChaMDkiRzhYQjVwNTNFI1hAaltSJW0KK0lIJS1MM1UnbCVQTVpoQVhBbWtbR0xgY0tUJSkyJGRTaTRbUUZTZVlHKSNocDRMTitmYCJWOSFrW2tVVGlDJTgKK01gUGFrLU1IOSxyKTQ2ZChMQCEjIVYpTkBZUWFYJzRWSjRBZjRrZUslVSlJQzRVVUQsaU5HcSEnMGNAOFFwMFoKK0A4IVBkK0U0IlYwYjBrQ0RDJyhWSmZmVTQnJUJUMmpbUCYpQEpCbVpqLVQ5a2M0LEpwY0gtYkFMQWhSNFE2YGYKKyIzSGkjcFAjS21gNlZHWU1KMEBjQ0tSQiwkSSpUJjRaJFYlQXBwUCIsVDRITVNJMlMmREg4TTlQNSUqcUoncjAKK0pLUlpacjRBMEpYJS1CJ2FFNVhKQ3JlS0AqY3ApWWpkRVlSTiczTGlGR05YciFQWEtpa1ZNJTBHSEdVTSExR2oKK1RqYCxaJVlBS1RbQVolYS1JbHFrYkdGISdtIzJWNCtJTmhOLEIsOGojJVhSRGVya1tKKUtVOSJlYlApVFFiWCMKK1IjJDhrcFEkQShWYFUrIydbclVWcjhlRmlFQzhETFNwKXFNTmRLJChaU2BlKDUyJkZrSVItIyxhaEwxRjRJYGsKK2wiLTlNSVMrTFNyVWZRZVlJRypKQyErMUA0NiRBSGNWUHJQayNsQ1FFZCVpMSsqKGZUVW00VUUtYGhjTSckYkAKKyNRRFtbYmIzMlBTOGAtZC1AWGo2ZFpJODhyZStCallhMmhELWVAI0ErTSZlakNTQVglJkZhMm1xIVlTakFAIUUKKylLMGtra2U5UWVRTmxrcktNcCQxU0NLciQsJnBqMiFxNDBgajgoISVEKDElQVVxKypRTFM1TFslYyxgKlNbRWoKK1hmYlFqSSM1QyRCcUtbckZsJTQzK1VVU1gtQkwmOUtZcCJIVmZaUmUqWFJhcSJHKjQ0ZmU4RDlsIyVIYnAsTCoKK1BDMyQxWEJHaERLU202IjFDLGlpRmJVUTMhJSNgWThEODNZcXJMMVYzK0NUIStGIThYVWZrYCMhRzBBRmtOUGUKKyVFTU1yODRAW0cwUWwyQzkyRyssLTRZLTM2MjgrIk5LVFJIZGhkIydpSHJUZW1tRWhJZGIoRylsUEFjUE4kQC0KKyhocnBBY2BhLCtOM20oViMzISw0SyxgSDBkUDZxNjExW1hCZSJyJWhYNSkwWydDZCJgOHJscVhBQ0ksS1E1U04KKyNbWm1EMkAxSiQnYlhrRUMmUXIlTTgrS1giVDgnRThyMDNUMkpoYS1KUTVWQyczMlJOcmVmVmI5R2UjJ3BmW2IKK0ozIVFDcjkySFJyJTRHYURQQFhgJ0csQ2lxKU5MJWo2VCwyVlZHImUpTEJLTDVobFAka0VyRShANCtSJ0NjNGwKK0kzKUtNRDYzSVREZVRoU0oiSGlaMVhQJTUtNFhRQGJAS2JSVGtZWFU1ckFHSXFWUkxmJ0IyakksR1VWKDBpNDkKK1EwLVBKazE2JyRGaTBWRTNiIllNLCdqYCFANlBaLFEhRElsQW1FMEsocDUycltTUENSbChqJ1NNNm0nMEUkWjEKK0VkJE0lU2JHYzZNaG0oTCdhKlRyRTNRMUVoaWplMydhaCxNI1NmYnBxVUJTK2BaTHEpRiNTNGFYYCpqQiNsIisKK1BwbVNqIlslM2I1JlEtVkZlMHI4U1pVVlk0RChpcjlrUXFxWEhLMSZtJXAnVkk2R2ptZG1rLTBUJ2I0QmksJUEKK1RmaltKWUlUQnJTRSlGJCdgbXFJQCoxKiohJyNOanJBaEArVVlpW2JhclMqMGg5SFlkbUtjYWpOWSQrcWVYREkKK2ImMmEwKTNNW0RRJE0oaUkjLWNaIkdSYVZkWkQ5cFNDYmJMOXIxKiEhbGEhVjlJKzBySzJLYCkhcSs0KnFqVEsKKydTSEJVMjZyaDRsLGRDWURJYGJSTS1xYC0oVlIySUNCLFNZVDBmK0ZLIUwpUkBAUGNZS1InJWlwQSY0YVAyKFMKK040IUNlSXFwWEUjI1hSakRtakxWcVpUNjgrViNaTEhsIkxaMUA2TCZUVio1VllFQnBHay1MR2AlMSpmYWVxIWoKKyxqWWpwcXJkcis1W1lRMTQqWSZRS1M2a0NIWDUoW1kiWFhHKGpMM2lVQENRMyElKlMkJFoiKTFjZkcxOW1mRzAKKzhbWGpCQEdlLCYickckRFooKyFbbFFOQzMtKzJKZTZYSGRyWUpOISFsYTY2MCNVYTVpM2MnIjRUQzNSTiw4aDUKK0tKUWNLYWEkOEE4VUNrMyVpbFQhIShjKmI1JEFMQiJKRGtmQEBZVmNCYCVscShKaEArR2ItTEkxa0lSUmRTI1QKK20iImZkWHBGajRJaGZlNSVgI1Faa2NxKWYrTiQ0QlkxJEwqYSNtJEtxOTVQTGI5UyVqVmkwNC0oUHIqTGNoYWMKK3BwRiVZbDArZmFVOEJRVSRbZkFqUS0tNUQmUjVpaVpKJmtYMiNYKEgnYFVhJG02WlBMZSIlMVVCaVpBSHBkLVIKK0sxJFIpWShpWlUiZCJNUEknWkNTNlQsYlBqSzAnTiEkYGNORmkwYmBjMDkzZE1YJ0YqRypra0khWzZQQ1VMMjEKK0FRKUtwI1RqVUgsZTRlU0tbQFAnVmQoYzNNNixTcGFxcFZFJ2gqMSVaVlRyUjMqSjhTKSRDKmVlUVNjKlBZZSoKK0MsMjVWNFhhUFJoIURxNCMmLUtCNiojQFlLQyxOKEdwUWkpWDZGKlpUNVstRWhIWUFFSihYOUhDNU1IcjkkQUIKK1kiRU1IcXEiKzlyTjA0SidFbEZHLUtZRSwmcSswNkdoJDJJaCsrJEojLVE0JElrZHFDKVMrITVhRzUqLTFkZnAKK2pVa2RJQjMsQUtJM0RUJEUqWVkyISUicGhjOVFTa2QhVG1FYk1lVFI4KUFsNWZYSTBFcVY1ZkM1W1AhKEpMWSMKKzhAUkdrRiI2cnFiSFRNWFJMKSk4OGNUODRMRktmK2BTRFBrLTM2JzY1QmBhZjNbUEQqUFtFRyZbSDQnVFonVlAKKyZxQik1KW0hciRiSklUS0RTZkFKJUBRR1IhIlgwRVUsck0xUiI5bTlZTkxpNDUpZmhRMmhqOFQhIVUnOCknUU4KK2tMUy1IYE5aJSVYYCdIJWhFJUkxODNJOGtqRVtpZGRIU2ZtMXFZOGRKaUZiJyczJyVJayFmNHFbNDZmI2gkbVkKK3FmWmRjJCFDOWhGSUkyRHJBK2ByRVBgM2ltSVg4ITNrbSIkRVViU0ImVFsxWCRSTjFCWGAjQ2osYDApIkkyOSoKKyhpU1QlNDA2ZFItKEU2ISwiNUFRRjhLTlhFKlhtRWJESEpJYiY2U2xtM3EtaWNJKDRONFlrTGUkZSZAck04STEKKy0iRmxhJWxrSCpgLS1wQmAzIThYYDhwSidKZidbR2ZDQzkzSWhVQWhCTCdYWDZJVFohWlNKaVtHaCU5OGZBOUYKK1taJDJWazJpRVtGQVEkVFQnQilraHJORzBiOGJsYGtLbDkiTSYyMidbLTEkbEAmbUU1ZEYnNjMjLUwzSUBaYFoKK0NBKjkwWGAhYllUTlgycDVDJyYmcUM4KjlmUEkzK0JjW2ZYR3BtJnIhWSolbCtyQTIzKiZEMUxlWVZCTnFUa2UKK3FQTCtQQzEiJUwqYy1OS0oocllVcFZIWkgsQW1iY1RbVVskKkJMai0iYSFTQEBjSGghJm0mYiNFK1lFKUo1RWsKK0srYUVSTFZJKDNBNERgR2NMazUsaTInLTJRQUotQSZxRkhDSUApcTNYUENAKk0tcGQkYVtkY2RhSzNpYCZjVSoKK2FBLWBwJ0k0MFlQa0VkTCVtQDVjZCpWOFJlNFpxIkJTJlFQTnBDSGNKNWIrJlEkckZyVjlrUiNyTGZZQWhpWykKK0JaZDZwZlNqUSdTcDhVRUBMciJqTClDbUQrWC02QVMsUERRIllsYSolTSdEQ0ttRmwrUSk4R1JtJmMpRmEoYWEKKyZyRlFMNjZFSTErIktkOShHR0k4RkJQcSElIUVMNGFoayRsZVlOOS02VihtVFE2IWs5amlAVEk0WiViSGUlR1MKK1InaDUmI1Y5RzFpZitYVjhOKC1MZjNObUtLSDA4ZXJhKThJQkZla1NtYCQ0IUthS2tbSidtNSZka2twWSYqTmkKK04wYilNZFJbNSEoJVVLLGBUbFJMUyYtQUVrcVVBZTFJKSszIzJgVi1oNktjQis2ciYkLGAwbVVoW0ZJVkI2QyUKK0tNOTFjZEJQQjFjYXFZaHJsYVVyRWpValJFMyFHTWlhTDQwMEtsIVQ0JGVBRUcnK1ZUM1EqYGUhKmlYWTlYUloKK2E5NCk5VGpbcVJlVkhwcC1qKkoxMloxWDVgUVkmVmgzR0txIXJOYGA0QCxEUkhKQHBwWi1CQDJHKTlhZG1LU3IKKyZUcUsxbVUnYUBaZDJAck4kNktxLC0pRllbWi1NUURwRVg4WlJMMyxBa0wzLWomYzYjIURQUGJGU0smWEMqNmAKK21EIUxoLURxREAxaiVHQ0olRCc2TDhjSmJOISIoOEdIKitlUzRmKyRNNjJhJUlacWZyKUxrNGNDQWwwWGRqJW0KK2JtMVppYElWbCJZVDkqakxDMlk4Yys2R1tKRmJJRTNEJUtJcXBWQ2UyM1ZhM2pBWGxrWVpCNkZwISFHI0ByaykKK2VrRDgkSWNbMjVmMmspcmJALDQwQURtcDZNRWQpSVBpazBmWEwyZmAqUTZqLGJtUVo4Q1k5MGZEVjIrKlhHYzEKK1Y0JlBVUVRja1BQJ2JrRDgxY1BNOUEyNCJObEdOKkJqa00kMiMhRVRyISZbRXFZY1JSJUJKLWhxcWIkbHI4TDIKKyRYS1RVTUQzNUhCbDhOOVgmKmJJNiFGUzAmYylZKyUlTm1OM2JHKWVBMzBkWVA2VCxCYDFQVkVqViMyZDNpYDMKKzhbZTA0RHI5YXFjVTIlakNpIzMiJjZVJkQmUFRLKExNSWkoY01VUG0pYVIxUCc2bFJGW00scmVLME5ERzlgLCEKK2kyZTJQMmhlNCdDWjgnMixWKmMoSThhZStHLEdpRFMrTXBFSCdwVEM5Q2IqQXI0TmgwcDlJKEYqa05mNDNUUkgKK0tpVUdbSiFkTi1lIy1kS1opUnBYaWBbIWNJI2lgImQ4NTY5YDZMY1tlTFJUIzZwQzFNSDVqJG0mayRGaylkYWsKKzRtZi1GciRrNUxtM1lpI3JlUHJARyVbWDNEImFCOWJkY1lZQjlNbFhoKmViTDI5I0khVmUyS0JBJkpWaTZUJ2UKK2E0aDNCay0sLVpbYzVJVlRZKWFWMDUtcSNyRixmWFVaW0g0UFpmIXE0R2siKWptRiQ1SWMkTEBbLSxjYFAjNVQKK2FoVGZLWVAtMihYNDVBcDImZkAmZic1Q2hoKElBMUVjRVRWNkZwZDViODVNMixjM0dHcEsjci1hKHJicUtLU0UKKyNCNGMrMzAkNFhxTEByUW1HTFErJWVFSzZsLSZFLVppK0dwRWVkZGFUVUkoTUtAMVgqMTNxLFUyLXJZR2FES3EKK0RMRllgR1VgWlE0Jm0xNWJZaUBQWUQmUS0jNGRtRUsoJUhkWFMhNiEhU2VMNCpAbVslK0hqaEFMITE0SmxjSTkKK20yaFU1ViUnUS1yLWVHYGMlI2lTRHAxcEBFRCElZU5ZMXFrJEMwa1ExSzAkaUQhZmsmQCwkW0JyWytINStVUnEKK3BKVjFSLEVaKTFGRmVFZWJmQiQqTCdMZmtULE5BaHE0OEhwUENyciFJLUlkNGByOGloISxGKU1sIiYrMytUJWMKKyZETllZR0ttI1UwaEdCJDg5ZidWU2NIVUNFIiYxM2orcTNIQFJrSVk5QUJQYmUiMyNTUClpZlIjInI1SmVTSjkKK0dRaFIiNGsmcikrIUM1MkdUSkkwNSwyaWtEVkNAUzYmTTZhIzlLIlVyQCNtM0tgQClacFVkQihWTTM4WltMTCgKK2MzU2hQMGoxIjBAQlY0YFAjMlJqIXJbJUBlJmwiMy1EaSE5SmFSYGtNWmhgY0Q1SjJZREJlRmIrRnErJS1mTkkKKyVhRFRwVjEiMVhgM1prIVEtZmhsOU5NZWIzLUBRYmNSJjliM2VjQ2U4bURFOXAkclptTVtsIklQbEJJNjQsYWsKK2k0LWByTSVpYVtGK3FISTFHOFVSM0ZqJ0lMMklaMEREaDhWYCZwbGQqRGJFMjFGVnJhaFpGIlkxYiloWW01VVoKK0hWQkVtQjMlMzVsNGtSKGorMUIiQExGOCVyTWZVclBBUTZZa1glW0k4QU4nSWZVYlIqWEcnaDZEIVQ5ImpRcEIKK0M1S0taREQ0Y2AyMilMbExlW3FDZTJqZjlxbS0qKCIwKzBxQkRTNEVsKjFHKDlbJVEtLWRbKiJmJ0BVTmMpNXAKK0AqSFlaQ0pBWUNWNWJCRlUsRSElM0tCI0E1bFBYSE5RJSxQaCxHUVVGImhUVWUtSXAjam1ZcCNjSkMjNlpVaVUKK1FIKkhLMmQiSGZVJ2xyM01AaSYmIWY4JTArVCdgVCxALEsxZGhsZisyKStHMWFOYlRZKyIqKypqQEcoSFNRaDgKKyVIIjhDWTAzI1A5NmU2Q2BSTkRWUmlmUCxUMW0lZXAkSEkxSlMhJTZLS0NCM0AhWCpTTmhLLVNmKmBBIiY0S0YKK04pOSNVbU0taE0yLXJTYUJQTSU4KkImKnJjcElFUyJZJmU0WixAcmQ1Ylg2MjklRyE2QlJoNklIYUwncUEzTCUKK0FOU0hYUmltSChjKlZoWCtxYTYmLGU4NlkyREFAY0YxaEMhWywsIiIwWClyRGJNMUFDQUMwNCNDOVpORkJqYzIKK1NTTSUwJk5ZVipAZDRSVihCZlhDS1smclZhU2pFKFg4RSRaKyZpTDg4UDVyNjMoMEcoWERpRXFmRkRDalVTW0wKK3FERTlRLEIkSFkpWyEzUmIzISQ4RWNqYTUqUTQ5MjNTIydYRFJpOHBHJ200ZkJKKHFFJ0NqazZKNiJxNSxBSTQKK2JhYCs0VjBMYFpRZEtQbFRRKWJDRzVoa1hQRE1CckZFJGEwUE5lTSEyNSRsMUhYKyFCSzRiTWJRUkokJUklYysKK0xyNXFSKiVQalk5UU5NTllkZUhjTmpbckwoIjhTciQnRGVaKGtqKUgqQ0VhMlllU0YpcCpURjNValtTWy01JzUKK0lKSEEpcDRLZUNkMUVNME5wJFEwK1hLaVJHYHIsaFVNQ2szVkA1ZWVJJTYmNUc1Szk4ZFkkTWhyMCMjLEM2TSwKK21mSjBGZWZWLWkkUloiIyNHOWlGNVlxJ0FSaVQxIzArKSUzaFBDYiwqRUUjODNCVFpZUGBSbCRSYWk1K2stSyEKK2tRLWVTIXEjcDkpMzgwRyFqNkpkTCxHamQiJHBYR1Aqa2hhS1o4aDkxWSdMZnEiNkZyWGFyOSZgNThTRFAwKTYKKydwSitUJk5IKm0rWyNTSmZObFBAaWU2bEwzYiMxJyRJKVlyTFUzTEtqJFZxSyhgOENwTjJRQCVTVUE2YS1bJikKK00pamUjJVI4VWY1WXImR0FhRzZGQS0iYCJMYFZiYEtAZmVqMVNlY2xlMCY5JUk5NWllTFZRYihiMStNSiVHNk0KKyE2ZDFjMENmTDYsNTZiTDFgRCpSR0s1UEc2W05IJmZUS2hrcEpyMzgtNFk1RFFyQVVbY2xCcDlDYiwncXJVQFEKK2xtLW1qMUhCQ2tOIzUsIzBgWWZjJGtMNDBYcGNIZFtEQEkqNiZUVVhZKDhDOFMsVDYhYSxULUMsU20zY0RYaDQKK00zTWpVQCYnRzhqZWphOFhLMFVKOSwtYVlBS0BhcmhQUFg0WnFbWXFHTmkjRkkqJWU0WnBjRzgmcFRCajlEOUgKKyo5VEwzISE4OTZVUTMhLUVQUjEraVg2QSElLGlxImhmLDhjUGpQSitOJThrYFAkWkVFcE01KllkNCltR1VELCsKKytrSEI4LStBLVVjY2twQzhaTlkzVkMtaCROaSlrbGVoQkhFYDEickVIMUktSShxTEZLNlVDOExINVAzVDUwLG0KKzFJNGpGZUwsOUcpRE0nZG1OJyQrSVsraCFKTTNBJnI2NTAxOWEiQSFYRiptUnFaTXFqNGVQJFBrcCtoJXByY0YKK2JkK1oxUkZYTiE4UnAqRUBwcmlGcklDKytGbCpRImBJRlZyWzBwWUsqOENYRmlaWEtHTWVrTUkyOEhES2JgUloKKyliWkBjVGtNTUpSQmYpa20wVVlBVUNbKWsoQnI2S1QpYWFRJ0BNMjUlKVRoUmsjSScjK2ZtZSRSY1VAcmgjTVUKK1AySkVwS2tyQGNmQzA4MTBROWRoRDApUVpiJlAtQyNmIjFmKENHTkolLDhjTVlNazJCYTRwIXJMW0BETCQjVWMKKzNCa3BBMS0mbWktQWpIcSw1QWgxbC1wM1otSjU1RlMhRTZQSWJqUlI2JlA2QyNaQCZIaWFMQygmJChIcls0RkwKK0g1WmFpWmFLQ0dVLSIzM2ElLFllaE5rJiQoWDM5cXFVa2AhciJVQmI2UjUpVTlISURYbUchKGBbWlRIYHFRZWIKKy0saSshNCYpVSFOYFtxUlNCSlAtMEAqLGEiZTNxWFJhOE0oJyRYIWZbTCNIQSslQVJJLFFYJFJjRUhQKCRCM0YKK2FAcXJJKGQiNjFLaVFhMUYpazhHbTE0J1JFK05ha2hEY0NKTCprZVMqK0FkalU2OGRATmEjM0EnU1olNUFRZHAKK0xwJiphQm1JW1phRDAwWFllUExwIydGKGYrWFpkKCklMiQxWlVsJVMnbExtRikxJVInTTZNTiEkKWNyMEk0JEoKK0ghQWwkSThrKkxqJkFmKkFITVRFSThrQ1ohR2o4LVFlcEJiMWYlNVQmSHJgKCgzWU1HKyxZYkotLCZTM1ppMyUKK0U5cmA2VDBUTlFALCpBWHBZRGBSMlJIWzhxKGtjVlE1KjJxcWsnbC1BQkllZUs0aCdAWVszI0syaFk1QUw2KXAKK0BqYyFISilLVDhYTSEoWlJDVjgnRCZJNVUjI1tOMlRBJiE2WiZKZSpZKlViMEAxMUxHVSFVMClQcUpFLXFpSE0KKzQ1YyJTcEdtWiJyTHA1UXBwRUlLOWhpIkxgayFVVlQlJ1pZaEgwRTYxZlkqKytBa0BNYnBLMDIxYlRNWCo1UkMKK0dkJmxKQ001aFFaSGEyNmhQLEQiLUYiKCMtJ0FgRTIiWmhpRlJiSGgiJzVaKGgiYG1rJTExQywmRWVGciU5KzkKK05mJU4yYm1WK0FENjkyUkEtSyk2NisyMixiMShTQUZlTiMlKydxZihLW2pwQTBjK1NiU2ZDKW1JMEpMTDlZYywKK0doSEFoJUJTYFUyMShFJENSQnJNa2ltWDZQVjVsSlpxUkBNSktxRmtwSGw2RFI0JmRpRU1taFRLLUhBTSlmUycKKyRAKTVJKUZQWVBBK2hKaDNmbERNMGNrMGFoKEUsUU1ZME1VM0w4cWhZK1InMyEjRUxQYE0tY1g5bCc2ZUkzUWUKK2hTMVQ0YVBaJGFyWHIiSjBJbSdIZFQnNiUpNEJKZSUkSnBYamI4YVZQakFyWiFgSlA4JExhTjhRISRYSSpmKyoKKzBSRjE5YyROZkVoQUo5JzgoKiZscGhgKFszTENGY3BKRVFGOElGLTNbU0ZCMltlJCgkbGJiQ0EtMWMmMilLSFoKK3Ama1lTViNTNVVLRUAqWzkrKCUoaSNpVmlyKDFEQVYyLE5qWDBNMXI4KlgoYkArRio4LCtANCctUSVyRUYzM0YKK3A4TktKZitIJTAzVmpJUUdQZiZROCprVSJbUXBDQHA4ZHBDaClxZm1abFMmIUIxQUJKNEdgKUgrbUNaU2FEKzYKK2A1VE1bMXAyU0trUVIscE1AYmlkbWA4WEM1JCZqQiRHWkUjIlA5bGpiJTJbZDVLIURBZVs0SWEqLHAjJWVkUDUKK01JR0ttVVAmLWBJVWMkJStxckMoa2M1VCFlaGRpLU1wWyViQFpwcGYwW0VIKCRZRm1tTUNDKyJHaWZIOHAqQWoKK1Y4MVtJR2Q1UCg5ZXIoIVQobFlFOUVKRjVAaWsqNltWcEVWMUJsWkIhZSVlUms1REFSWE1oLEpyVktSSUo0aVEKK1BbWStBQ0tyNU4hISwhJEVKJ2BWMVElTkwsLWFMK1RjNTlkUyMtJTkwQmsjOW00YlBbRktiQzVSbGVxJy1iZVkKK05yVGA2JVJVKFspYElqNEcoR2tUYUclIlhFUVptZUtOUSpySWprQ2RqbUBSQ3IlLSIrSEsoU0g5WkRhMCZILXIKK0NMNlRwIylMNComZkpscGEnJCEqcSFoWE5iUWpbMzNQOGZQKS1QJSlkJihKVixSJ0JTaickMypmVU5EZCMhMVkKK0drKGonIXBNTStlckI5a3BIZUFVcEtEZWBWVSFIUnElcm1QUkw2UStlRCpWaSkxSlFwckUlYmJEKitEWVNKRkkKK0UhQWZRMyVISEtaUCUxJ3FWRkhKWCZsKmpBUWAjR1tbTWVgKyZZcCxkZjVGTlNKLVExaGhKbGhHZiZLMUxjYTIKK1pwcFQyKTFWJCNpM1pDNGlYYVVoSS1FR1RVKy1yTiEkaXBsazBlLGJscTM4IUhwTTNhUFg2LFEqMEhTNWImbCYKKy0mKXArMiIqTnIsYiklaVNOW1AxclZZYSpgJls4JGJbYEtwJCk5VFEiI1FjcFNVNFJVKGI4JlNCcCFqNCgrRmQKK1BAWSNjUjRqNUNMbUc1cWRBUk1lRWVLMktpNFRHJEZra0otYCJEOC1BLEpjKmssckwnKUFgSyJSckAtaW1gW3AKK0ArakMrMjBJViMrYi1MNWtKMTRBbSE5bUNtQGtOK2FILFhVaWxUWlhpJlZxYDNYSE1jMyFDYVZVWkVxamQnYyoKKzhhTllNcTUtaWUtNVA4bSQ2J0tjJ3BhMClsJFprSGtSS1FpUlpFWEZGMSdARjZaaSZBSSFAYyU0ZFBLQGpCYmAKKyJJQitFYDJbMipKY1hUKWZqSiJOS2siYiolQUNGMiJUNlg1J0RIWWJaIUNCcUcyZEkjYmAmIiVQMDhoaGVmMTQKK0AzWmtNViRyTjllKkprVloiVEpMZCVQTGxmVTAyQGohIUs2YiEyWSRgKGBhUGszUCMrcVpGJGA1aGhwUGgpQiQKK0cmJjI0RiZwUytsQTRWREE1QFoiZVFKOTBRKiEhJFRJQVMmRjRWSlVVYERmZGs0IUhoUyc1S1ZTQWIrViJZNGsKK1hhKzNAZTNLRkRsQTNOZVVjbSkhUWZlNEdTJjIsUzVOQSFJNTJYU2ptZCZoaUBVKCcmNiljVEUrJFg4NS1WK0gKKzJBKmNxa0EnQEpSYGxiaVAqK1AxUzkwQ3FxVVJROWlgWlFgNDA1YUpaNTkmTjFOR1NJUyJwWiEtVEk0KzMhKEwKKydKYGhScVUtIichJzA1YjFoaWBDbEYzW0lNaWZiYlFQTiI1YCMxI0dGJyVmJiJaQUloQ1gtZWAoWXJmbWsyay0KK2BIWXBSWi1INVhjaUNBI3BFU2RYLVFSNSFTSCNaKGJyMlZMVFlHJjUtW0ctSWoxIjk2RVBRZCNyM1hyYHJWJmIKK2wjK0lyJEtDMStISGJMJjNrcVY5MFIiQkYlaWpkIkphOUw0USFYKmJDSysmWWE0MmghNklrUGRZW0ZZMVIhUmoKKzgsYkQoM3JhYyUsVEJpJmhJLWxLaWMrbG05MzMpOTZBbEJpVTMhJEhmKkQrJHJQW3BSWyVWaSZVYCw4SllVM0oKK0M5QWEjaTEtYkVJQmNFJ2EiMlZSY0YqR3A1WmtFJGhHIlNrQU5lRGUtKmlSIStbUzJsRHEhSlAyYExgQ3JoVUEKK3AxbCZCUiMwNTQ0MCltbWxBJCtxInElKSUsRklAcGEiNUJWIWRCJllJJmhlVjJNYEcwUDhZI2ZMNXBtIU1DRjUKK2xqaVZAWjEtIlUqISFwckAsaSxDbDRJQmJMIltUY2hFRzBSNDQlUCE1RShpOUZxUWByVmk5MTlJJzUyQCk4YiIKK2NSUnBaZTZkWGU1J0IzamxKYCxNOUo1TDZBOWxxTGNxMyEncFFta1NCTWMpayRYYmZoOS1OZmwpKy1FKjIxSzAKK21bVVlWLFsxJVY5YSxYcWZqaWFmaFZJQiRoYWJgcUwxbGNWNTEoTCE0Q1o4cjFxaWFKcDBQck0tZUExWzBoWkgKKyopRDJSVloqOUBlNCNINkpRVTlNNGhEViwhUk1SRDBaJFFscShlUSNaZDgmWFJaTXJtYjZHTWktUE0zaWNHVTkKK1BQcCJNaihQIypsUidkM0FMcWxRLEdHRywwQFVrUyohISFSKFkoailQMFZLYyJQJUlhY20xM0ciJiokazMhLEQKK2NQamlkWGxBTkNwNTZCR1lpTktYZjlRM1FIbDJOVGlOTkJMJEhWR01kImgraSpsIllBJVZTQENBLDhbUyMzZFgKK05yOWFrbFZVaDBhSDVpOTJTKjJyWGloKjM4Yk5IM2A1KGtpVTMhKmZEMklbSTVoREFDcWREW1pBailNYlY5bHIKK1EsJCJpY2EoWVhWajBRLUlaaSFgQ0FOUi0rZEJkcVtwLFtyJ05bbGorZUREUiwjQmlsVTBiKWBAayFiKVkyLSIKK0IiYFFbNUlmWkEiR3FrKCdyYHJNNkM4cGBgZm0lOU1VKyxMI2FhYklhTFg2akRGUEBpKkpscmVMNEEwQzBGYGsKK0UlRlArJGZLLEFHLTlDZTZbUjkycDkqa2tIKFMmckQkVjVSQ0dacU5saUImIlAsVEtLSEtaQkg2cmoqUDYnSkgKK2twMU4yYTRQZVttY1JrTiMqKkwxJXJLcCdDaSo4KzMoK0syRTVOTiRZUTYmLEpBOVtSKklaOSEoJ0BsVTZgRWUKK0tgQEpRUWRbQkMkS2xkZFJBOUMtYUhBbUYtZXFoazRlRUsyMEMrOVM2SltgRSZLNVskKU1ESWoxTUI2NCIpcCUKK0xQSzBZLCRsNDQsVk0zNFBlNCE0WC1tVG02KjkoRlMlSmtASydlQUokYyUrZC0rYkUwK2BkaVklaWUpMCYkQEEKKzZRaUw4ZFEiW2ZBVCtNTC1La1ItMTNsZmk4bFpmQ2UsUHAoaiUoZCI0aSEpJ2JDQ0ZkKFUtJypTOSFxMmpKQGgKK0EsJUJVOUFMMyEhK0JpcEZbIkRpJENrYkpgKCMkKUhSWnJjJDEkJkYzI0pqJStFR2VmMChmOVsiOCpMSHEpZFMKKyNMKCcyMUYwa05IKSRSOVorVXEtODBrJnJjUFMmQWREKi0lcTMhJ3ElclE2M2ErZCEhJnFIRG1DaDhNQjVhKSoKK1RmNVpUMCEnUSRZaUdBK3JBTjVmWy1hVDFJYUo0JWthaiY5U2oyaTU1ajVUaUVORFRmKzBjJUVFU2paUmM5SGIKK0VqZWFQQyxQR2IxYTBYMGEkRVBATWhaTmJAbWVqYCFbTWA1UkxkYzRjNWlpI2xrRlAqSS1ETSkzUClqQEwnLVEKK2ttVjEpQDFIJyc1OUxkSTNJQmMsWiFEMGgkZlpbWDJgaDNMKHBUUzBrbCkyR2YwKlJWNDNGSmIwSiRMS3FVUDkKK041JmVbbVlJUTVIVWppNGhrIShNR2goRmJOISNAcENRKSFQQUZKSVVYKU0qMi1tVWUjQkxBNTMqNWUnbHFjUikKK2MwJConMyEnRi1MciRWSFpmMGNiUGYtcVojYUs0ZlMza1FxVmhAVSMjaSEhR1ltcmxbS1VQNWQwaCZJQy0rcE4KK2FJUUhQQ2ElK2IoQzg4SmkpQUZsakZSVlRDIydNNVAxYEsmKWpLVSksOSIpTGFKbVhNQUdyQWpQZkVQSSgnJFkKK2thOWFJSyZaKlVMQWtNYU5MKGBkMTJtVSY2M2tqZConRylSIVlRQ0BKRklBUFlMJ1IzKWpQOGhVNEFkaHJQWEEKK0xaWkIkJ0VaVW0haGUyMUQjZW1ociZEYGRbTGw4WEtZbSNRRWtoWWVIM1hVTDhQOVVpaGlwcmBJOSI5IzVCU0wKKytVNkRSOUckRWAwK2BTcS1lR20iQGhbW1tyTDROLCwtTi1jQUxjUWYqZFVUKW1MM2Q1RiE5SmZAYiVwLC0hImMKKzklbCRNNmpqUyNjcEpCcio5YmE0SUpJK0JlJmsicFRtQHFkWlorKiEhNS0nLE05WkwjRkdkUnA1QCVmVTVlNDIKKyhOISRWcDFONVBgMChqcmBHJDEwOGg5VmhTR1RmQEUiMDFTVkZJWHA5MzVWVCNpQnFlTWJaKWNrWExjYmhlJ1EKK0Zba1YpcXFLUVApR0JpK2QsJmMlVTY5aVZAUilJQSVHMDlQQzEscVZBZTVycDlGWVAwZSlAWm1rTVA2NCJMNTIKK1ZlYDZARVBTWyszbUgwOUFMWVpZY0dFJUJDUUAyNDRWW3JJJSIlJVEjWUsnUUw4RCJjYyRFcEZkTFprQSY0SGkKK3JLM2VabU02JyFgUGw2Tk0lNGRIOCMmbEdJcCQqSFtZLSEtYEVkMiomQVFGanI5JkpJMVRZR0BHTFFwNTJUVlAKKzNGYmwmLE1QQk1CRkE4QDJLLEFEbDhVJTA4QShVIyxJUlhhTmNmVCZRIlMiVCxocjIraEdQOWtMLVpycjBCSCwKKzJyRzFOLWJAS0FhLSNgS0IoVTVWZDkrYU1iZWhAQiYwZkYsMVMlU0wmU0dxaFQ4OFVmRSxWVkpWTjFrWSw2TE0KK2hlUCVTRjJFSyRiazQmKDFJSWoyTUMqW2MrSDFYUlYjI0BUKSVYRkJHVGxkIUdSaTJaKmNqZCtVKVYiIyslZHAKK1IrKCJEYVNRJTVTQklgTmk4YiRqTE1sZUVESjFiSyNtVFZSQksoamJBJEZoNEMpNCtWUyIicCRKJVgnRWsha1IKK0NEaEE0JywkUiZiNmpkUCFCKnFjWVgqaEhZW2pZWTk1bGBAcEchLUNASSxgcGlabSY2YyktVFFhSVkjWmhNK0wKK1tZREw2VWNmNCpLWioqITYqW1MiLSJGRzJpRmZBMHI0MEJgJmlLIWtBbDlMWTRWUmInQk1kaGYiUSZwUipMcmYKK1BwSnJWIUFaWGBFNWhGIXIiRENEIiMzcGY0JGZwTSstJkwnaCRLW1VAcSQjKGVYNSMlLHJsJmotSyFiW20ocSkKKzloJjMqQ3FiNkZWRHFAVGosQ3A5KVFZZkJITilTZWIwSWpLW1MlTXJjMGgyaTY4YzQycjlQQjFCTCxETXBFaygKK2xNYSNQcHJRZVNSTjkiUC04JW1iSjE2IkohbSc5M3BSJ0U2YiYmKXAtSCRGWlYtcSFJQWZsNUtRSXBTNmxSLEcKK0xLMWppNUlENURpJUdOWVBqRFZgRiVaaltibSlxIyUoVEdKU0gtUjJBcFpYaTRSUihTW0drQWU2R3FOYGROZEcKK2NwR1hRIklDI00kSHJRM1BGQ1ZSUyEoQUZAUlNIYCdCRVlgZSpRYlpgNVEkNXBaIUVtUFUxJTVEYCtTckBMK0wKK01lU1pJY2FSIygyR1NEJSQkTGU2KmlHcXJMVlBAW0hiQ0lyLFhQZSZaVWtAaGZxY2JxWjBTK0AjTmRLTDgyajUKKyJYOGRKUCZlcmAxMGlQJk4nUmpDMC1OTk5SYiI5KERwIktiJUNUKCJNTVNSVmZRRGVyVUVpYW0zUmUoaEsjISQKKyVOISFBQmZDbUJqMkdaKHFBaDAzSy1CMXAmIVRJaSRRKCJQcilTKCgscXBxZGMtVmBrQmwwTGRJQmE1cTMhMjkKK0RDJEpwU2xUSEdgYDVIYTg5cUVmK2pYTmpgKG0lMkNiZSkyUjhqZnFYTkhNNE00a0VZU2NDI0tFQTNhKzAhR1AKK1FaUlVHWEJbSkNFIWEhWmNMcGVgSTBHW1FxUGlHMHBGW1RDISE5ZlRVJFZRUDlSZWhZU2hSI00kUlViUDlNNS0KK2JJUlkyNVtAJjVtOE0raWJHaU5QcDBOMjEocWAxa1FQaiFDaTAqWUtBVHBBTWlBZEBaWyZRWCQxLVI5UkxCKXAKK1ZtUWo1SUkjcWgoUmssREFGciVOUElJLG0sJ0ZwITQwSUdoUGFNIWEtaWZIW21ORiJha1ItMCYraSZkKFUqY0EKK2pRYicrSzJLWSVJUVglcUdyRVhYYFNxTkksNnFqYTNxUjFDMidTOGBjSGE1VjMyQEEpJCxZITljaSFYa2hMTkQKK1MkWnFMR01hSXJjcTJSTkArLXJrSFEwMiskNStGYEM4TS1aa0ZDSkMjcnInTDZDcEQwRFJEMVZhKlooJDlrI1kKK0A5KyYoRyFMJTFqbWtlQEpCSHBIJDZrVHJlVGtrMmQzZVIwYTVQKENLQmwhW2BDVSsnYWFoKiM5TGFpWmNZaDQKKzUiWGVbTUIqcCRAU2VTaEtGWyhyI1pyM0pxQjRNbFFYJ2pKUnFIYScqJ2lVJEQmLEBJWmQibTUwYWNyRFtyTjMKK0tOISEkIkxLbGtiUiI5Q0dKLCxxRylyWkpRMkMqNXJOLDRJMmxkVFhpKmMrSTQkWyxOYHJHckBjNjhqVEFmTk4KK2NMTWY2RE5ZYjJHaUthLVkza1RKTSYpLG1lQCInUUVDa2FWVHJiTGBZKUQoYEI0cmwhMGBgR0U1bUZWMmZtZFYKK3JiKyFoUUxOamJYVGpbNWU0MEVhKCEkZnFNJ0koOGBYQipGLCNbS0NFUkxFLFpHOUlmZDZbI0w5R04hIlUtKmQKKzhFTlUybTVbUGM2NSdrU1VsR1tMITlQJkxQUycqKDUlMkZaWjZIUDNCYEdYYGRQa1VtNmpUa2kwKVRxWChqcSwKK20rWGAtNiUkQCJDOWByYDVYMkcoUFVOQCliaEMhI0crKURIMVJMIXBsVGBNZmxqOGNYKydwVUM0I0lVNFpmaGEKKzNyUkchUyhHSmVUZCEyLFUjRyI0ViMyaDJwW2lOSGstaUQwQjAjcE1KZEAyWDIkZlRyZSJaSUFZSVImcEhUbWkKKyE2JipQWyMwZWEzRDQqUltCNCpZY2VwUiUkVEpiYChQJVlCOStDTltwQEFbRmtYJXFAYFsiQmQwI0QrUnIrJygKKytENlVxVkVKVTAha0AhZWFrQmooYzVlOCVULXA1VGZlLEdqYUgsbChiK1srYmJocU5kNUtNKHBCaFNjOVhjaVUKKyVHUEFaJENSYSYkbEY2J0FsRDRLamZwS1pkJjRbM1YkMTFKSUFQKlBRaTYqLXI4TUxoJSFoSlNaYkhqSCxMKG0KK0xxKzlSVklVYiUxZCVJUloqNVgncCdSJ2FsaCgjLSVSUzVwM2RbKC1IMVVOUVlZVWlINDlrWG1jcjZOcUooamMKK3AyKDM5JVIwS1AiWWtrNVlSVGYnIWtxcURTRmomWWNaJ21jYUljWlZWJlFVQlIsKDZtIipsIlRxWWsnYiJRZSgKK001Y1MjUnFQbCclIyVoclEoRDRERlMjMFpianIkOGxkS1YzLSIwRlFHRzRYWEhIZjkkNWVbTSMyVlFacUlDNkcKK0cxJmpGM0VCNVNIa0FFWio2LWpiakEqWUJFY0ZlR2hmclRpNGMoaUZpbGFEazlZI1JDLClHYkFVMEZSSEJAW2oKK2lZJFI0TDVwREZIJ1RZbExJU0oyNiIoSDMhJUhYcjJbRixlaWkzaShARFUtMCxoJCJjLGRSYylAbWomOC1QVjMKK2IhNlksciMnOFQhZShkUGRTbCltcUszOFEyaSQoWUJlNmlrRk5pNiJycEtwUHJmK2NMMUQpVDJCViVwNU0tNTkKKygjYE5IaCQ2R3FEcVlHY2RtKklQaWg1bC1RaktVa2VLbThNWVgrIlVgVTNDbGlCQDlDaDRWMGtsWydZVGtqJUwKK2xASjRjU3AyYjNDQ1pwYmpiUypQaWkzNCJCTmYrWVJbWksrYGhIJCwrJDFZZUsrIzVxWHBZVkljYWNHLCJRSjMKK0YncVNyTDNqciowK0QlQmRMWyZENksmY2MjQUtkWjgmJFYpYSJCSEwtVDhyY0tLR3FVUjgnTkJjU0haMkwpJzQKK1trS20iKUBJJEBJI1lpVXFhQ0xhQidiTGwzME1KTGVlVlVCMDViRWNxbTFEWmVYMTApISdbNVhJUkNCK1tgNDYKK1omZUxtZipYZFRIKVRmJSRrVTYkIUMpJjRQMUIlcTREamtgWVAoWXElYzRFIkhGcWgoJHEsVFJlUFthZkJmKjgKK0txJjRRajEsJWRhJDMyOGlQSHJZY1QtbDQ1Rk5mR2QpKk4hJCpMNUZDUWFpMVtYK1RJYCRMTmssMzZsYikpaFMKK2MhajlYKm0tLEExWlRWZFhBK3JAZWVKNEhOISJOLVhoZicqTmthJFElVUBkRiFrK1o4MCdTaGIlRkRoSEgoUCsKK0VWRCIhLGREOCI5I2lCayQmIUtTSktqYjFma2IxRHJrWk1lailHcjhxWis0bCczQWAhK3BrMTZKWk0hUGRsS3IKK0okY1U1ITZkWWJsVSZMS2tCVEtFaDZiM0hkQVpyQlsyM2ZAaXFtQTVVRmomLG0tOTFTaSkzOSxtcmVwYDQ1JGQKK0U4VFItSjFTIlRBamtEWmJSaEtAJ2JLLGVaQDVSQTgwQFFBQ2FTaFZEJGFKQFoiZGRMInFHZTZyU1tDISEpM0MKKzBVRS0tJjhqZDROLWwlUTglciQxRlFyaDNSM1JIIkVqTnEqLFpjSltkR0ZJMWFVYlVpKylOSWIjJTBAZWEpLTAKK1oxRmg5TlFocTFrKzRDJTlNaGFNZENhbGZxNjlGbSMjJ1pVR2BWQU1kS0sxbEwqKistNFpGcSsqOSEjaEEnbSkKKyZJLENTYEtYLUAqJmwsWkYsaXJkOHFUaTlpcGxaZUJFMiklaGpkUmxocCpMJ1g2NCQqJiw2QUppYWohIUNOQUcKK0dlM1FJIyFlOCpOVlYmLW1qYHJkJiUqVEw0bTFCQ2AwcUhFKiRFWGNiUGBVUElOJXAqTVYoZSgzRUcwWzMiZTAKKzNCJUksVGpEWDFiZSJiYUQ4RzIwRUIzMEVqViZiQlFVQllEKzE4ZUVIcCFAQzUnKDQoQyEhQ0g1ZHFJOVtbViIKK0gkNkVbWyhGJm1lMEpZKXJVbCVrMjZlQCFhVWsxWkJAJEBIQSpZQGIsKUZMI05mVixSWyxxU0lYODIlaHA1LUQKK2VSMVRsWSg4YSdDbWllZUIzckJQY0tBJllRRFAockFMYlNxYXE1MSlINlQxWFBwYlJWMmhGIjA4ZEZHNEE4cEcKK0BAMDNJTStyWWpQYUMqTCFQJltkYCJOakQpVjRoMitZa3BALE4xcDE2KUhHcSktJDJAJ1FxY1tUVSRVJ21qIVUKKyJJWmFCMFkjWyFgZXBVajhxK1lDaTMkJk1DQmRiaCRHK1QsWSgkLEBRKjlRRiRHNUoiRkdMMlptLUo2QFlEZWEKKydgSiYrIUBIOE5sbSdmMUlQaTExMUpwViFJIVhoOEVWImM1cisrWSlBImBrWyNqOVlCY2ZBJnFKYktNMEwmJCIKK05FNTRUcSZJNFUsLCwnYXBSWWExKU00QWxiY0VDbDlNKkVBIURLNXJyTXJZYTFkaydBaVM5RnJYNStVZGltIjYKKyxLVVJUQVErLGE5QilWQyxiTXBrZEZtRC0oNjglMGZLa2ZQUllhTCM0KkgzKGVVMmphUiInbGU5Jy1INmZwSyYKK0FIJXBLRjMrYjNwaGMkVVEycUdbSykjZUhbIiFYI0QwKDJQZCFbJUZyRSVSKWxkTUtGI0ZIM0IkTVM1VFlFVloKKyckTjRESUg1UnI4VEtZVkY0OUVRQ01WMmxoLVhrNjhWVEBqSFokKUQzISpTKGZrKjRgVEJbbGxiUkMlOTkoWG0KK0NFITA4NDNtMVphWCZDK21ZOCwmMipLJmJjUDJgVmpVNjNxYmFBSWo1cE5QJWg5KWJEaUdYSkZgMUZlU2pRUygKK2AqVTJBTkI0LUxOLSEpJE1SOSdMaCJAQnFSJUBhZiFtUmtlIilCUVoya1kpSDBRImJiQ2pKTlJyTickMGhUZiEKKzVQcispJDg0LCtVQkg2aWhyNDVER1AyJWRGZkEtJWFGQUxrKzZUVUMhZklgI1JQRjYoImlybVZqMygrLUA1cCYKK1ZCQDBqcHFDaDk5WlNtZWZFS1pHKFk5SWUyIjlSRVpbRixBaiEkQ2pbciZAWWxRRHBTMmEpTUtBNWFlS0RSJ0YKKyUqaVRjTCNqYVI5OXBLTUFbKVYoQDIpMyJsQlVpQWs2RENySiIsaFIwZXJGKU4hIXFgJklwK2MmNTFsKCooQjEKK0twLDFDTkJqJSZoRGZZRUglR2Y2ZUFQMkU0QFZwRGsnbGJFKFtSLEBhTTMqVjBWVlhlclVKSmYsSGxDM1EhJSkKK0NQZXFKYFFDYygwMWxOSjUzITFqWypOcmEqNUFbY2BScmJqLUosREpFUDVBIjNWIiorRSlqZWZlZG0rcEJbREMKKzBoUWM2cSpFcGYmZTZNU0NAa1FNOWxIW0cwJSY4IzVFbHFbUUdTIUA5ZCs0J1NIMTRbK1E2YTQmTDIoSjNNYzAKKzVxMihSJlJmWUlBRWoqKi1wWElNRCxZKlIrK0daWWhAcFtZKWAtKCImYypbQ0pVRllNSWtjbSdyVFNOWiI0NGwKK2BCKCZGZU4mQUVWTTI5KWpLRmlyaDVFU3FSQ0oxaGwqNE5SaUJZNC0nUytHWiFYQzFSImNrNjhwISg5ZEFONGIKKyI5a0oxTWllSCcrTTZAIWlwRShrYVRCMUNjJXJIWTgzNHBFbWMxJy1aZVpAUykoMTRkRWgscWpYOEdMI0MzJTYKKyUwZGpZcmZsMmBYQFlDSFE5YmMyalpjSCxMcGxgaFUkTmtBZSgsaDA4NUlOOVFKYS1VJlgxQXBpMk0tMzlHS1IKK0lVQmZJbW1MKkYoQ0thQkZRI04iQTBMcmFNS1hmK1ExY0QkTURjNk5aJiJGSVJBRmBFZkBNUEJZWWZENmBiKzkKK1FFS0IzOEExWExSaFVbZUFWIlQsK0ozVUYqZDFKRFtSYFBQZVsqKFpELUhDI0hEWiotJyFmVXEscSZFQihSKVQKK1FoOVFHQEErZiNmIktgZVJFR2EjZUcxJjhMKjJNI1FbMyRUUGUoWEwoMGhtYihDTkFwKktQMU5AMltSMVpCW2EKK0dMVidgZktYa0ooZltSVSIiOCRsYlBoNEZhYVkwRlFHalFFWWQrNSZKVERtQGxwYDRGRiVbI3IoSSwiWylCWkUKK0dsI05OM1YzQGFsImRiQkthaylwRzZwTSlGWjNjamkoMnBaQnIqakAiJSpITWI0K0ElWU4zUWlFU0ZhQTI5LWUKKyE5TlsnaUNgRSMwI3FDJjhqMFVtMVVEUGo2MVI5TjlkRmBkYWQrUk1TKSdLYjJtViYqJEAocSwoWTVCTi0pKVEKK2lQTVopNCtEcSdWOSFQMFFlaUMhIUssYkNiTUxJKiJlZSkqKVY0cEhjQWgwKkg4SXExIlhsamlCNFZKYyY1OCYKKyplWStDWzZgbEVoMFQqVjArTHA1KVNtYGorZU5SZjNYJEtUTUcrTEZkaEhlLUlLIkdCaEpqTmZYYTlsSChBcGsKK2IkYDJHRTNrYVpVLFJFYSllVDBSay1UISFMQydZYGJYRjRSVm1ITE1CTFstSGBiIjBKKGlEck42TFQiRWk4IVQKK0kxSVZaJ2w5S1VIalFERFNwRSNmTjNBQTVEMkUlVilaKScnWFEtKHFMSVYzSlAhaTNKMGYxVlEjbGwpUSshJEIKKzgwRihMbTAsRmkscitAUCJlVDQ5WjY0QSIybFtAZlhCJFVSSDgmIylZMTQkJFNMZDIlLElVIzJbNTVlTDhUJDQKKzgzJFFsRzVGRStTclNJW1NbOVByVClQOWtoLEJRKiMmUkFLMDM1JDAqWnIxJUByJm0xOUpFa0FIU2QqbFFmTXIKK2BVKGQoMDZMJURWRUUpNjFiaWlkMDZNQipwcCUhOWpjI0UqUzQxWVFDOUFAKUppVStQbSNTZiFQNWZpJDBWMUQKKy1GK1hiSGlJTDU5ZEBHOE0zVE4hNStENTJgNSEnSjFWZUcmYkVAYWxGbUYpa21BMmVNbDM2YDREUUMtW2wwKmAKKyljSURoUmpsKCVRYUwsLGxYVlswKkopMmtRJSFTTiEhcVMoaDhqRlNJa3FhJDFFJSNFZFsqZDYqa0gzR1ZmW1oKK1pmJE5bUSMqYUNwaXEiTlAoUVhhOHFpLEpqTCErZTBgTS1iaCowRUoyMWJQRTgxMytxUlJELEZiMyEpWWBDJkEKKzRbJ1lMNERFcGRMJzRVWSMpSElbIWhmJ0NKImQhbGxxNnA5WjMhLCFDS3BGNVNLSGQzcFBmRiInVW1kNiFoKCYKKyY4bXFYVSlyQ1kzajZMOWpjaVlQVFNISSQyWzYnRzgnRyMrRkJHQEViK1UsWjBtQWJQIyEqVSxtKCpLOSNWOCcKKzRpJ1BOTSJJcUNoMlMxSmEsJiZjUkE4NlZbRCVaSSkzJVAkLWpBZCpRa1tJSUJrWTMkNSIpVllZKGJrQUAsOCkKK1pmRDYyZmw0QiQnOTIkJUFmbTRYRk5RKSNaU1A0NihZIVAqOFtxVEUlLVE5RWZmMGtJKWInK2YyLVRpakctMCUKK1liYEJxWlMyYG1tNi02YytGRDFjZWhFNWsoJ0wrUDVCMUk1JUIzVTYxQkVVIThEOFZHMjY4ZEBaI2FtLSlpcFoKK0pSZCtjRElwbGRoVEtjK2tEOSYtMEBBYVEwWmlwQSdtWWBxWysxTFspJjkoYytGRmBHcDYrKUYzVlAkY1BZMEoKKzNgYitgJSVmbGxoUCxiRSRJOCZmaCYhMy1oU0RiaEhaKzZgUGNZJjEhcigqKXBmY21aLTlbLVlCMkI1aUBkIUgKK1glZURrJFVVUVYqaGlkaihESWZHZFRNTXFabClTWCEscjVZbWBHJDQpMVhpZGEmaitwRSoqVCs4bCFCKTlZYCIKK20jYFNHQjhNJU5aLDRDUTRqWilMQCtAK2tVMy0nbEljU2tLI0YxZHJgWjhiRydoVmtkaFFpLVlkMEpaUXJNOEUKKyVHbStRS1BbcU4zUyNOISJlIUhba05NM1FARC1KSlBqajRQKzYlIkI0MCRbViJkUnE0TVI4KlZoTlkiMFE0ZEUKK2ItcWNVS2ZKSSFTJ2smZHAsYUZYJUprSlMnaGhUYlItYCpSR2RYZGBrMEQhNEoyZDFZMURgaCRHI0xmOVAmYGoKK2hIaSZxYTUkWGNrKGhOISNEKURpYXEzcVglJjk2QmJhS1YkJzU2Q2hhcFJjLGZrcGAhJkQ5QUA0anBhSkZCZCMKK2NGWlQyKlJNInFUWkppaCciYHFqUzBwbHAsJzAtR0MxMyErcGJlaEFSMFVVIlArZipIY0s0IydZREJVaSEsTUgKK0FhNVhgJ2JtKEBlMk0nNVlmKTAiQ0NrYFkqIU4jIkM5NnBmcTgjYUFjJk1sanJjW21rMVsyZE0mQGZjYEolQSUKKyQiVCdyRlZCOEBaUWxOISJhJ2w5NkpTMVBDTlUmQGI2aEMySSlKSFEqaiIiMXBRRCcxUkpLWENkNSRkNEdNQ04KK1sjYzI4VlBNQHJtRCVLQyEhWywmMyQtaytoZShYY05RTXBOI05YW2YpWiImRixaYDUoallyTClyKVhpa0txIzYKK1UoMjg2J2RHY0AkYSFNZi1Za2IoMjIoYkcpLGIxRzlAcmg5aGxyYCNZK2gwQEFIUFYtNkhSSUNUNlZwaVZDZGIKK1laNjlpOVtwYlRbSjJoNWxCcCFbclNHUzFHZilDJ0MlMXBaakBAW0BkbDY1QHBqUSwwMFBFIkUxTSlCRFkmKVEKK0thbDViK2xJcSpZZStAYVNIWWFgWyVlWmIxIixsJ2hZRkZjUFJKVWFZQUUiTmNjSVAiRyNJNmBgMitWWUEkWzkKKydjLWBBcWxgSFFVbWI1QDQlQ0AxR3EjVVs0IlYpRVMqVSwlSVgmTCIhQS1rSmInNXErSGFUKShKYiVSWmVycHIKKzROWENHZkxiUistMltAQ2UtImUtcEY0IkRaUkJSJUE0Wy1bQTY2QmUkNVYoZkomRHJrNSUqVWlYbGVhaXJbJWYKK1FLaUwlKmA2M0kyak0sWiU2TkFNcklRYVVWI1RSbSIiIUhTRkJrVEo5QiRqI2UpZWJDSE42YmBMOFZNKSRaKUwKK01jY1UwbSdFKy1saVMnJjVSLVZgYWJHaUdxQEcrTHEtcSImJDRManFOKCM5MU5DYEEqW2ZIOHBHQGIoRFRMKk4KKzBJWCFWZFZqK2Y2NUtWRSEzI1IkcmxDRywoVFhKaSxHTlsoW05yJmJQbS01JypSRm0zamgmalhGLXEiKSsyIkcKKyNYTDRFS05xMSMpUyQkWGQzLVJoRkcxOFo1Ik0yMmpxQDklNjBDSSRsZUUhUUthQkBWZkAxYGlIW2BDU0taZGIKK2hxWVtaWTA5WlBbNFJGWzNQNlJOQVBBJmpGR2BsNklLaUNjYEtQamlrNFVYQ1ElIWElLGRMYWpYTEgwWExDVFgKK0klOWAxI2tZREpHIlNDRShJa0hyZUUjSyM5ZFhgSiVbSUwmWzhBYis0LFJwJ2lVUEk5USVVYHJoNmpUNUpDTEYKK3FkSGtKLCg2KCFpRmBIKGBqWUQ5YE5aNThIY0AjYWlNQ0QxMEBsLGBQZGk4WWIoKGZlImVgcTRSM0U2RUMsQlQKK2xFaG0hOVIkaS0rJlhRY2FtbDNQW2pIWyY2JUZmaSpDaSRkQDFAJDk1cWpRaE5iJFlkUElkayYlYXIzRmtOS2MKKzBsNSRhTEBgJDNwY3AjR0haTWAnJktjcjgoWHA4QVljM0hCQUosNVFqQyhkLU1JcmU5RmVoalVCSSxgZig5QS0KKy02cVpkQFhQYUlHKnFsKiEhKlU1IjRoOERIWmtoNVAoOVE0bGYiIyVWLGJWS1pTRGZRLCVjWDkzMWByNlZrTkIKKzRBRSwmWFREYFZkKE5rViFWOUJFLUNSVkopI2lNMiFSOUxgcEJHRC1QUXBJVlJYNlBMVGBTbEwkK2ZUSydwNkYKK0ljR0QncUBIJSpjMkVicTFHM2giITJxVWAmYFVCRXFTM0k0bVlAbCFQJ0BNK2Q2NWwpR2UqLGBgIyVsSkBgbXIKK0hxKjZlQVs5bGBZcjByLUFpa0FQRUwmNikhR1ZoRipOSTJVYVZIRWEpWVgybUNJRypiUDhNTXIjWUctWEhLSVIKKyplcCkoNFAtImtqQWxUVm1AJShBKlUtVmxJM20iZCMjOTYhIUxOaDgzVFVOSyRKaC1hMk44LWRmWVQoJmNWOWgKKyRHLGpgay1YbVgwNnFATXImKGtWJGQiLTUxIS1UKk4sVlNRWC1JSTMkNFRDQUxoJllrVmxFVFBmYTRwZCpiRDIKK0YycSRMJ0EtMVltVnJCQmpmcjlLbCJsMGBmRFNxKCohIURmYGpHcSQtRVlHS000QyphcC0payNZWk1tI2BNWVQKK0swJVRbSVZKSiFiYyVxcWBrWylKcltISyNjUW1gUU1gKEoia0FGbSoiY0tyQHJpYltLKy0pIlM4bFhqW2lrNTAKK0lEbTBpIVU4NiI0SFpMKHFqYWgyMEM5QTJiUVFpQVljRkgtS1JoWmZOITBMazA0LWpYMjFObSdUSFpQcURxQioKKy01WUhRKStTIygsRXEjZVVlIkBANlJacUNxY2YlSlBrZHIlQWwjbEVZSmxtS01SbGhWJ1kyVEZgSDZmYTkoYzAKK1ZxJUE2ckhJaDRhRGJkcVVHM0RRLSpMSUdjcWFyRzRmW1RFKixyUloqLUsxaSZpS0VwMEcpZVpyUDVjJzBMUiIKK1NVSVFVVTAsREQ1OCZmNnJmNVAtSEYhTEwyMkJLQkRJKWlxWDArKDFYIikpVllKWEBwZWROTCJpTCFMVCIlaDAKKzlyKGkpMVNAWlUiaiY5JFgzQCZlZEoiTWkxJypsbEJJZmVESyojYGpRQVlRYEVUISE2YVFVK1EmayFHW05ESUUKKzIhMTZYZTQybCMnYHBhK1ZoIiYiaU5RW1tAcispKGNSciYyI1RhaWVULDkhKmxEQVVmVVNIJmRKcDlZISM0VmMKK1FMJ1pUUUlmVSlYSVQpWkFJIllSLFgqQkxSNDFVUGNEbFYoa1pCYTgpM0ozMGslRjFpLUw5SylpUitWYygsJigKK3BWLEpSMTJyUWZmcmNFSGNKJSRmSyhjKCVsbUBkIWZYWChxZGQqMUBoaUZUci01cVNhZiRlUzFqbCljaSMlSmMKK2olQEFyU3JCTnBaK2g2JydEZTRFUStVZiUlRmQkZmxLa0dUVUhaOCUhSWFWTHJqISFlJlkwYCxqLSFTWTVlYCQKK1NSQmNFRCQnRiFwMXBBSTZQSGZqMUZLRiNtYyJiIkhiUyQhK0BYaidOOTRkOVtOMjhmSVVGYGhONmJpcCk5KVEKKyw4KFYoITlJSStOK0RaMXJpVEwraFsqNFFrSCpyRmVyIipHKCJtcEBMbDNFTksnaCxQKFpwRCZwaU0pNU44YkUKK0UlbCJbWikkYmJlcUMlUzFMJkNQSUdQSWRDIWxUYGVxWComLSUhM1tpTE0rI3I4QGhqM1s4VEMzSCshKklIZjMKK2RyLGokRUByRlZOQVFGYWVkYFUkRyROJWxTJklQRDMsVGNKRFMtOFVxbDBwcCpjWThyJWYzISg2ZWMxLFYsQEsKK2ZWTTZEaVtbLS0mTmAxKWZONDZmcWhgQXJBKzJARFVOZUlyQyJHNSZpLDlTIy0pVSdUYCgsYGFScUhQVjE4UyEKK2tRNUhjTWhxQ0YpRCU4MlpEKmxJQHJKQ2omOTVpQE5RRk1bbGE1cmJjaCxwZEcxUzJQYWsjbXBhM2MxKVlQNEQKK2tqJGk4QlNgVTBhOWIxY2pMW3JyWEQqVVYhMChwWlNWLVNFMig0JGFKISQjRmMjTUlTTUkwVFRJZEFrODlCWUYKKyEtRiNEWjRCTihgUzBZa1VpK0ZQQSYmQGVJNWJJTCNtRlppOCtBakxGWChDIiM1ZUwhbU00IyxwKFJhREBDa0kKKyQkJkMmYmZQNkY0NlJpQk0kJSMxY1hASWI4MVBwKC0mLE5mYjhaa005VCYsYytAI2okZSthYlFWaiIzWSxGWmsKKyo4UFZIRDNWaEFIYHBCLFMlZWxrYzlMVGohNCZbUGNhY3I5OU1BSWMsSjNTQihUTWVHJkdrcFZANGE0Si1TLCoKK1FMNGZCZiooM1NaNUpxVmVQUjlCckVZWVlUZVgsSXFKQERbSDRNI01sVSpyRERhLWpZNE0sWEQxTEEqU0dWKSwKK2NRW0lsYWwrOTEkI2FSS3JVJ1JRWUo1Yk0mSyQnWkdVTFhJcDZZYHJZTiEiTWpLTVslQUEqKUhlUUFbNmJGSVYKK1VGNikwVmFES2QqaXBTaU1hYzgoJ2lhIm1iWihxY2VGMGhwM2FYZmNLQGswTmRLYE5WKWVqJVUmYiMpTGJELSkKKzNyKCNWTEtWSGw0ImU4bUNjOGFCK0tHR0AtWGpQMkVDS0AqTCJDISgpaUllRC1YUVpJIihtKCQha2ErRVZiVGAKK2wrW2gmOSNpS1FsYDMrUjktK2poYnIwVkUoYlZLZnJFUlYkM2pONjIpcjJLTThFQSsoYEQoaWZZYS0nYk1IcCgKK3IjNSYyYWFtNFZWWGZYU2kqRUI0ZDFwWCRCJkohWS0tKkIsYjYjQTYnJlhwRHIpYmZAUEhCSygsVFIocCYtISQKK0E1YGNMMVQ1QDJQLEM4ZGJBQEYmKWBCYmkoYCM1NUdTJmwjbGFhIiVAVlIqa0Rjak5YQClpSiEncGFyNSFNQFEKK0xlUlpqJypqNikkVGVmS1lkVCQnMiJMWmJJVUY2TSgtIVtGcWtkazhkNiRFNlJFZmBiWE1rJiNkWzZaYEJRISEKK1opK0RqYktFaC0iW0otIzJUSCtGaExDMTg0aUdMWCxoMiZFRy1KKkJlR1JyYVFQY0socFE4VmppSkhQMyZZTicKKzMhJkNHMHFiW3FxR2JOcStsU04rSVhLUy0jZWEiLChEOCxDZGQpJihaQzQxQlolLEVgMGBTQ0UoYjRkKm1SKEMKK0xrcGQmLCctcDlBRCM2Yk1UaEdVKSZHOFJbWSEkaEkmZDUibFNUMydxIlImOWInYUFZWiMhQDVSIWJrbExMamoKKyFsY3FgUlo0cGFgW0ssI2xgMGNYJjBjRUgqRCFJSkArNm0la0o2cnFrVEpYR0hqcGRkaFBxWUROU045M1goYSYKK1MsYio1TjlgTERDbSVCUXBKTScpLEVKIUpkJmMyViwkJUxQbFRZUGMqLEVNJiFBIlIqWUxBK0hOZFNmIjUoYVsKK0cjWlIsKGEmRFstMEdIVktyWSxJbFhLOHJmbDQrNERGVUckYFJJY0ZoaGtRJDBkMyRHQVIka1RhI3BgKTFicjMKK0piQkJsJCFoMCpqQFJqcCchJ1FTWGYzQFJDImInWlVDLEAhRFNNK1ByNE1qQVgtNFpQajJka0stZSYkTFpLYGQKK2hpIzZDQzBUTFFhJ2hBYnJGRk5KUlowa2ttUkhkM2lhRk4hITNIViImYTZZWzNSMEdCRVsqYCYpcE5USVhTISMKK2xWaEA2RUU5bClkK1AjMiRZK2swUTFESjRaRTE4IUcqVlVqISE5IUNHJiohIWwnbE1MMjYsMWVqRGtgJUlwUDUKK0hIWlEkIkIyaShlajZoYFJBU2JTK0NrUiwqNDhBa20tKltxMGhAbFhZWjhmVUJsJDQtbGtHIWROWyYkI1tGJEoKK2NpcVZHMkBoMDlCLGViTnIlMW1JMEJLZUlVIllESSxmVmA1WVkiI2RANkBbUSUzZTRKYDgjMUAjK2pyUihgSWwKK2IoSWRFKklwSmglRGAhcSxUViRTbEtrUGAtZUtEMyhAMGJoWidsMFJhOTkxbDJESSdhaDRjWGZWNmQmRCVgSXAKK00lJWI0WTRKVmopZCloK0JxKDBwTGJIZnFAaytFNVBWTFFyNkVOOVRxTWFVZU5OaXBhNVpmTERQZXAraWwmbGUKKzM0OEMoWllIUy1WQzRSaSssJFtSW0MzR0xxWWltYFJYZmZEYVQ5KzYrRWklVSlrYkZrUUBSVTBqM2YxKWJsaDMKKyUhYDNYQUxwRCZgOUgpM2NbJkRacitmcGJlLGUhTUAhWjJrSHAhMlA5NEpaMyEjVVVpKnEiZjk4cC1TQ2InaWgKKyJramskViYqZWtNRyRbVE1kJFRIQDRyUyVQWGJSMiNKRTI0IkApZllyTVhQTTBWbCQmTSNNWkhkNlkhZitVKUgKK2tZaylYWUhCMjVpTTNCamhhZmRJM2RKZVZDOGRoVEZESCYpKUdqTjgoJCRqQExYSDZbajgrMm0mY2MsbUMxKyUKK1RMaWtFcmVqVVVjKzlWY0BBaUQkSShsSTJJUygibTAkJUxbcSQmcGZqRUhAVVVMIk5EKjZUVWZGYCxBTSdMY2EKK2BMOUdmJFhDaEkzUXJAW2AoUVQqak40VGpNOGI5USZqLCVIKVsjRXJgcDQ2JSdrW1krMjFTJVlNZGEtKSFUNCYKK2lGKGwxR2pTJnJJVm1laDgtRmBSKmQzZWkwTihATDY2TSQkMjBAWUAwaixtaFtKZCdHUCQnRyglKCZWKTJRZSEKK0JbODBFKE5WcEc2bWBASiZlRnAiLEZTaDEkWCMsTCphU2xWbDE4MSRmcixBKTFUMVNBYmFSZUUlSkZrYm1LcDQKK004R2kwK0VLJkFCSWg1STklYCYhJVZBQzZpQixWUUZmNFhlUSJkOXFwcDM0a21KQVRMSWlYZTJWTjRFUGUwJmMKK1poKVAoJFs0cGZBSSxDWGRjOVlhSDFibURSTFgxYzFYQlNhITRZJ0FkQi0kSTNhKSUpbE0qbURkUyUhRmxtaDkKK04rS1klbUFlW2RFbDFoR1hFaWYmRVI4TlAycFJYIltiQUcnS1trRUwjIWprclMrYmI0NEpkbFhrazRqbGtCSWYKKysoZWFKRjZpSkoyUVIlKVhlU1lGJUkoWCEtNiU2ZmplaHBwY0JFNVQzKjlaZSNkJUFURjBDK1QhIVImRTlERmYKK0RjKSlkSjJoamtZQS0tZjUxTGpjUEInLWEtWmtsWCsqWE1LUkFCVDJgUkNLJWMhISNkKjBqUCNmU3FFWUpDTSsKK01kQzZsWlBQRFkwNTZAazlYKUpSM1IzRCokZi1sUEZWNiEzYiw2WUBFU0BoNk45Tik0J1FAQjVMYyZUKkJxYicKK0FicCtiWUAqJStTRiMtJWAhTlMlcidiMiclISJaVjYzaCVgYDBVTigoJEEpSFJWZWQoQSFxTWZSKGBqcHBLMzEKK2YrWEcyOC0pM05mcUFYMydZM1IoMGNTWERxWGVYR2VJLDEqTkhGZGQjQVplcEUyUUtEI1kwIUBqMyonQ1pQJ1IKK01jWnFCKzQlJGAzUCNAJ3JIIWZURlEmUEEwZmRQR2giSmNhLElxMCRoam0yMWwtK0pMWjFUKjVjVVJSJEZOISMKK2AkQUhZSkVgOW0mSzMxIVlAcGthUFNiVkkqUFBhJy1ATTJZSmImMWM5MihjOUZUJ0QpTCpkcCVsWiYiWjMhJykKKzhWMFRUNFVSUUUkNmhMTmFZODQnOSNxSnBgTSFTbDFbRjVwMzA1IjEtKDlQKiZSQDYqMkVUU1ltamFQRzQoNTUKKylQUFNlYEsqJEplJEtmZUw5aUtONlFCSElMW1EyJXJwamFETSFIVCY0bDBsNSUtUWhUNmJHNDVBJ1FQIidWMUAKKzRxUlhTKiNGSyNqS3FHJTBSQVYxKShAMnJrLHFxcmgoZGUtIllZJVNoKWRGTVRUZlVaKUVkcUVIbEciayJSalAKK3JrUFtDJUBqKDQiaXEzaCxBVXJyYTFaay1LcGNJK2lgUidTSWZYMTBWTkozR0BtJEZkWWAwW2M0JVAlbE1aTnEKK0QzSDhMKk4hSSkrWWJAWUAxKlhGaCFDKk4kM0o5azRtcWktUCojbEkpWE1sRGpUU0BmNTM2ZGRDJDZQNSxUbVsKK1BGIlhQKWtUYzE0WjRoYSczISpKNWhRVGwmYyM1ZEZaSDU1Ui0zUGRTaVBQaDZKRSRYRWxCaFlRNEhKRUY2VDIKK0VLVWsmTSZoMUQxMyYnUGlsUExyQ1ppTDhGMiEwJVNYbFBQcEkjYiFAQkVTSiFAWC0hJ21aTmpKMCU1ZVkoUjUKKyJEZUlaYWgxLChFOUEzQExrQEpjIWUnTGsiOWFMLUQnNFUzKWUrJyNhSzJsSDlsQE1qaWpiK1VLImFyQCtwcmEKKzkoIVZFLElQQFZIcUQtJ2lAVSMiVExDbUNsWk1jOUtbNmxTVnI1aklWRlJDLFJjOWFDZkI2LDkyTSY2ZmtQZEMKK1I2Q05ISlgkJUckKEFEODBwViJkSE5ObSlhKG1mLUJVJSxEQCszWWJwTkRMVSNLaERjUEpIUFMhUktUUVtGaHIKK2E5KTBJMVIrckg4aGo4SihYLUw5RFhoSEwrKVZiWCIyI3JaLTM0KGUnK1FIQyI2ODlCJkxjOCFrYWloa1pjciQKK01mWXI4aGxQRyZkTkA5YylYZUNgQjFgYSoqWFpORiVaYG1DaSxsQkRYcEwmRnBLMUtGKFVaWkZtKCU0K205WEYKK0ZqWXBmVVs2Uk4hJCRbVigyRis2a0dkIWFLaDNrVk1BIjZhJGNAJGwnLTJaSjNmMSltMkBFMDhtJDJySylUNWEKK0YnMWtHUEZxMSFBcmtIRE0xRmJUWDIsKkplQDJmaG0pLGQyRXBgayJqU1FDJVVRJGpEaiYxK0lGYyo5UjA1JFEKKyRwUnJGLCU1TGVmLSVANENxQjJwKFNxTGBoclVhKkpBJHIsJGpbIkJqTG05I1tQRktmR3JoUUpsQipCUGROZiMKK2tbUFlFVkNDWUw0NEtjZCpFbUROTlJpWCtAYjRNbEIzcVIsUklVTVk1RVpKaUM0aWBpKHAjQCZpYC0sISUkYkoKK0BJKWxlSkxGIihgaGxbYyU1QVNYNUlgJUdqckcoazMzK2ZEaVJmQEMmLGVrLShmbDRxZkhNK0oyQ1NxYzNASDQKKzNrWSJEIkRRUCgqTGUsRFY1WSgtMCEtLCslbWNKVClsSCNQZUQ1NSZaJ1Zja0BhVUxqIitDVERZOEE5RSZgMiUKK0tSRnFmWmInMFA2MzRBMEohYkspISEhOgpkaWZmIC0tZ2l0IGEvc3JjL29zX21hY29zeC5jIGIvc3JjL29zX21hY29zeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MWViN2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3NfbWFjb3N4LmMKQEAgLTAsMCArMSw2MTIgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBvc19tYWNvc3guYyAtLSBlbGVjdGlvbiBvZiBvc19tYWMuYyBvciBvc191bml4LmMKKyAqCisgKi8KKworI2lmZGVmIE1BQ09TX1hfVU5JWAorIyBpZmRlZiBIQVZFX0NPTkZJR19ICSAgICAvKiBVc2luZyBNYWtlZmlsZS4gKi8KKyMgIGluY2x1ZGUgInZpbS5oIgorIyBlbHNlCisjICBpbmNsdWRlICJvc191bml4LmMiCSAgICAvKiBVc2luZyBQcm9qZWN0IEJ1aWxkZXIgKi8KKyMgZW5kaWYKKyNlbHNlCisjIGluY2x1ZGUgIm9zX21hYy5jIgorIyBpbmNsdWRlIDxUZXh0RW5jb2RpbmdDb252ZXJ0ZXIuaD4KKyNlbmRpZgorCisjaWZkZWYgX0RFQlVHCisgICAgdm9pZAorVHJhY2UoY2hhciogZm10LCAuLi4pCit7CisgICAgY2hhciBidWZbMjA0OF07CisgICAgdmFfbGlzdCBhcmdzOworCisgICAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgICAvKiB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcmdzKTsqLworICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBidWYpOworICAgIHZhX2VuZChhcmdzKTsKK30KKyNlbmRpZgorCisjaWZkZWYgTUFDT1NfWF9JQ09OVkVNVQorLyoKKyAqIExpYmljb252IGVtdWxhdGlvbiBsYXllcgorICovCisKK3N0cnVjdCBfaWNvbnZfdAoreworICAgIFRFQ09iamVjdFJlZiB0ZWM7CisgICAgVEVDT2JqZWN0UmVmIHRlY1JldmVyc2U7CisgICAgVEVDU25pZmZlck9iamVjdFJlZiBzbmlmZjsKKyAgICBUZXh0RW5jb2RpbmcgZnJvbTsKKyAgICBUZXh0RW5jb2RpbmcgdG87Cit9OworLyogdHlwZWRlZiBzdHJ1Y3QgX2ljb252X3QgKmljb252X3Q7ICovCisKKworc3RhdGljIGludCBsYXN0X2Vycm5vID0gMDsKKworLyoKKyAqIEdldCBUZXh0RW5jb2RpbmcgZnJvbSBpY29udidzIGVuY29kaW5nIG5hbWUKKyAqLworICAgIHN0YXRpYyBUZXh0RW5jb2RpbmcKK2dldF90ZXh0ZW5jb2RpbmcoY29uc3QgY2hhciogZW5jb2RlbmFtZSkKK3sKKyAgICBzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyKiBuYW1lOworCVRleHRFbmNvZGluZyBlbmNvZGU7CisgICAgfSBlbmNvZGV0YWJsZVtdID0geworCS8qIElTTy04ODU5IGVuY29kaW5ncyBmYW1pbHkgKi8KKwl7ImxhdGluMSIsIGtUZXh0RW5jb2RpbmdJU09MYXRpbjF9LAorCXsibGF0aW4yIiwga1RleHRFbmNvZGluZ0lTT0xhdGluMn0sCisJeyJsYXRpbjMiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW4zfSwKKwl7ImxhdGluNCIsIGtUZXh0RW5jb2RpbmdJU09MYXRpbjR9LAorCXsibGF0aW41Iiwga1RleHRFbmNvZGluZ0lTT0xhdGluNX0sCisJeyJsYXRpbjYiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW42fSwKKwl7ImxhdGluNyIsIGtUZXh0RW5jb2RpbmdJU09MYXRpbjd9LAorCXsibGF0aW44Iiwga1RleHRFbmNvZGluZ0lTT0xhdGluOH0sCisJeyJsYXRpbjkiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW45fSwKKwl7Imlzby04ODU5LTEiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW4xfSwKKwl7Imlzby04ODU5LTIiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW4yfSwKKwl7Imlzby04ODU5LTMiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW4zfSwKKwl7Imlzby04ODU5LTQiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW40fSwKKwl7Imlzby04ODU5LTUiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW5DeXJpbGxpY30sCisJeyJpc28tODg1OS02Iiwga1RleHRFbmNvZGluZ0lTT0xhdGluQXJhYmljfSwKKwl7Imlzby04ODU5LTciLCBrVGV4dEVuY29kaW5nSVNPTGF0aW5HcmVla30sCisJeyJpc28tODg1OS04Iiwga1RleHRFbmNvZGluZ0lTT0xhdGluSGVicmV3fSwKKwl7Imlzby04ODU5LTkiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW41fSwKKwl7Imlzby04ODU5LTEwIiwga1RleHRFbmNvZGluZ0lTT0xhdGluNn0sCisKKwkvKiBVbmljb2RlIGVuY29kaW5ncy4gKi8KKwkvKiBUT0RPOiBBZGQgb3RoZXIgdHlwZSBvZiB1bmljb2RlICovCisJeyJ1Y3MtMiIsIGtUZXh0RW5jb2RpbmdNYWNVbmljb2RlfSwKKworCS8qIEphcGFuZXNlIGVuY29kaW5nIGFsaWFzZXMgKi8KKwl7ImNwOTMyIiwga1RleHRFbmNvZGluZ1NoaWZ0SklTfSwKKwl7InNoaWZ0LWppcyIsIGtUZXh0RW5jb2RpbmdTaGlmdEpJU30sCisJeyJldWMtanAiLCBrVGV4dEVuY29kaW5nRVVDX0pQfSwKKwl7Imlzby0yMDIyLWpwIiwga1RleHRFbmNvZGluZ0lTT18yMDIyX0pQfSwKKwl7Imlzby0yMDIyLWpwLTEiLCBrVGV4dEVuY29kaW5nSVNPXzIwMjJfSlBfMX0sCisJeyJpc28tMjAyMi1qcC0yIiwga1RleHRFbmNvZGluZ0lTT18yMDIyX0pQXzJ9LAorCXsiaXNvLTIwMjItanAtMyIsIGtUZXh0RW5jb2RpbmdJU09fMjAyMl9KUF8zfSwKKworCS8qIE90aGVyIGFsaWFzZXMuIFRoZXNlIGFsaWFzZXMgaW4gdGhpcyBibG9jayBhcmUganVzdCBndWVzc2VkLiAqLworCS8qIFRPRE86IE11c3QgYmUgdmVyaWZpZWQuICovCisJeyJnYjIzMTIiLCBrVGV4dEVuY29kaW5nR0JfMjMxMl84MH0sCisJeyJjcDkzNiIsIGtUZXh0RW5jb2RpbmdNYWNDaGluZXNlU2ltcH0sCisJeyJldWMtY24iLCBrVGV4dEVuY29kaW5nRVVDX0NOfSwKKwl7ImNwOTUwIiwga1RleHRFbmNvZGluZ01hY0NoaW5lc2VUcmFkfSwKKwl7ImV1Yy10dyIsIGtUZXh0RW5jb2RpbmdFVUNfVFd9LAorCXsiY3A5NDkiLCBrVGV4dEVuY29kaW5nTWFjS29yZWFufSwKKwl7ImV1Yy1rciIsIGtUZXh0RW5jb2RpbmdFVUNfS1J9LAorCisJLyoKKwkgKiBBbGwgZW5jb2RpbmdzIHN1cHBvcnRlZCBieSBNYWNpbnRvc2guICBZb3UgY2FuIGZpbmQgdGhlc2UgdmFsdWVzCisJICogaW4gYSBmaWxlOgorCSAqICAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvCisJICogICAgRnJhbWV3b3Jrcy9DYXJib25Db3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL0hlYWRlcnMvVGV4dENvbW1vbi5oCisJICovCisJeyJNYWNSb21hbiIsIGtUZXh0RW5jb2RpbmdNYWNSb21hbn0sCisJeyJNYWNKYXBhbmVzZSIsIGtUZXh0RW5jb2RpbmdNYWNKYXBhbmVzZX0sCisJeyJNYWNDaGluZXNlVHJhZCIsIGtUZXh0RW5jb2RpbmdNYWNDaGluZXNlVHJhZH0sCisJeyJNYWNLb3JlYW4iLCBrVGV4dEVuY29kaW5nTWFjS29yZWFufSwKKwl7Ik1hY0FyYWJpYyIsIGtUZXh0RW5jb2RpbmdNYWNBcmFiaWN9LAorCXsiTWFjSGVicmV3Iiwga1RleHRFbmNvZGluZ01hY0hlYnJld30sCisJeyJNYWNHcmVlayIsIGtUZXh0RW5jb2RpbmdNYWNHcmVla30sCisJeyJNYWNDeXJpbGxpYyIsIGtUZXh0RW5jb2RpbmdNYWNDeXJpbGxpY30sCisJeyJNYWNEZXZhbmFnYXJpIiwga1RleHRFbmNvZGluZ01hY0RldmFuYWdhcml9LAorCXsiTWFjR3VybXVraGkiLCBrVGV4dEVuY29kaW5nTWFjR3VybXVraGl9LAorCXsiTWFjR3VqYXJhdGkiLCBrVGV4dEVuY29kaW5nTWFjR3VqYXJhdGl9LAorCXsiTWFjT3JpeWEiLCBrVGV4dEVuY29kaW5nTWFjT3JpeWF9LAorCXsiTWFjQmVuZ2FsaSIsIGtUZXh0RW5jb2RpbmdNYWNCZW5nYWxpfSwKKwl7Ik1hY1RhbWlsIiwga1RleHRFbmNvZGluZ01hY1RhbWlsfSwKKwl7Ik1hY1RlbHVndSIsIGtUZXh0RW5jb2RpbmdNYWNUZWx1Z3V9LAorCXsiTWFjS2FubmFkYSIsIGtUZXh0RW5jb2RpbmdNYWNLYW5uYWRhfSwKKwl7Ik1hY01hbGF5YWxhbSIsIGtUZXh0RW5jb2RpbmdNYWNNYWxheWFsYW19LAorCXsiTWFjU2luaGFsZXNlIiwga1RleHRFbmNvZGluZ01hY1NpbmhhbGVzZX0sCisJeyJNYWNCdXJtZXNlIiwga1RleHRFbmNvZGluZ01hY0J1cm1lc2V9LAorCXsiTWFjS2htZXIiLCBrVGV4dEVuY29kaW5nTWFjS2htZXJ9LAorCXsiTWFjVGhhaSIsIGtUZXh0RW5jb2RpbmdNYWNUaGFpfSwKKwl7Ik1hY0xhb3RpYW4iLCBrVGV4dEVuY29kaW5nTWFjTGFvdGlhbn0sCisJeyJNYWNHZW9yZ2lhbiIsIGtUZXh0RW5jb2RpbmdNYWNHZW9yZ2lhbn0sCisJeyJNYWNBcm1lbmlhbiIsIGtUZXh0RW5jb2RpbmdNYWNBcm1lbmlhbn0sCisJeyJNYWNDaGluZXNlU2ltcCIsIGtUZXh0RW5jb2RpbmdNYWNDaGluZXNlU2ltcH0sCisJeyJNYWNUaWJldGFuIiwga1RleHRFbmNvZGluZ01hY1RpYmV0YW59LAorCXsiTWFjTW9uZ29saWFuIiwga1RleHRFbmNvZGluZ01hY01vbmdvbGlhbn0sCisJeyJNYWNFdGhpb3BpYyIsIGtUZXh0RW5jb2RpbmdNYWNFdGhpb3BpY30sCisJeyJNYWNDZW50cmFsRXVyUm9tYW4iLCBrVGV4dEVuY29kaW5nTWFjQ2VudHJhbEV1clJvbWFufSwKKwl7Ik1hY1ZpZXRuYW1lc2UiLCBrVGV4dEVuY29kaW5nTWFjVmlldG5hbWVzZX0sCisJeyJNYWNFeHRBcmFiaWMiLCBrVGV4dEVuY29kaW5nTWFjRXh0QXJhYmljfSwKKwl7Ik1hY1N5bWJvbCIsIGtUZXh0RW5jb2RpbmdNYWNTeW1ib2x9LAorCXsiTWFjRGluZ2JhdHMiLCBrVGV4dEVuY29kaW5nTWFjRGluZ2JhdHN9LAorCXsiTWFjVHVya2lzaCIsIGtUZXh0RW5jb2RpbmdNYWNUdXJraXNofSwKKwl7Ik1hY0Nyb2F0aWFuIiwga1RleHRFbmNvZGluZ01hY0Nyb2F0aWFufSwKKwl7Ik1hY0ljZWxhbmRpYyIsIGtUZXh0RW5jb2RpbmdNYWNJY2VsYW5kaWN9LAorCXsiTWFjUm9tYW5pYW4iLCBrVGV4dEVuY29kaW5nTWFjUm9tYW5pYW59LAorCXsiTWFjQ2VsdGljIiwga1RleHRFbmNvZGluZ01hY0NlbHRpY30sCisJeyJNYWNHYWVsaWMiLCBrVGV4dEVuY29kaW5nTWFjR2FlbGljfSwKKwl7Ik1hY0tleWJvYXJkR2x5cGhzIiwga1RleHRFbmNvZGluZ01hY0tleWJvYXJkR2x5cGhzfSwKKwl7Ik1hY1RyYWRDaGluZXNlIiwga1RleHRFbmNvZGluZ01hY1RyYWRDaGluZXNlfSwKKwl7Ik1hY1JTeW1ib2wiLCBrVGV4dEVuY29kaW5nTWFjUlN5bWJvbH0sCisJeyJNYWNTaW1wQ2hpbmVzZSIsIGtUZXh0RW5jb2RpbmdNYWNTaW1wQ2hpbmVzZX0sCisJeyJNYWNHZWV6Iiwga1RleHRFbmNvZGluZ01hY0dlZXp9LAorCXsiTWFjRWFzdEV1clJvbWFuIiwga1RleHRFbmNvZGluZ01hY0Vhc3RFdXJSb21hbn0sCisJeyJNYWNVbmludGVycCIsIGtUZXh0RW5jb2RpbmdNYWNVbmludGVycH0sCisJeyJNYWNVbmljb2RlIiwga1RleHRFbmNvZGluZ01hY1VuaWNvZGV9LAorCXsiTWFjRmFyc2kiLCBrVGV4dEVuY29kaW5nTWFjRmFyc2l9LAorCXsiTWFjVWtyYWluaWFuIiwga1RleHRFbmNvZGluZ01hY1VrcmFpbmlhbn0sCisJeyJNYWNJbnVpdCIsIGtUZXh0RW5jb2RpbmdNYWNJbnVpdH0sCisJeyJNYWNWVDEwMCIsIGtUZXh0RW5jb2RpbmdNYWNWVDEwMH0sCisJeyJNYWNIRlMiLCBrVGV4dEVuY29kaW5nTWFjSEZTfSwKKwl7IlVuaWNvZGVEZWZhdWx0Iiwga1RleHRFbmNvZGluZ1VuaWNvZGVEZWZhdWx0fSwKKwl7IlVuaWNvZGVWMV8xIiwga1RleHRFbmNvZGluZ1VuaWNvZGVWMV8xfSwKKwl7IklTTzEwNjQ2XzE5OTMiLCBrVGV4dEVuY29kaW5nSVNPMTA2NDZfMTk5M30sCisJeyJVbmljb2RlVjJfMCIsIGtUZXh0RW5jb2RpbmdVbmljb2RlVjJfMH0sCisJeyJVbmljb2RlVjJfMSIsIGtUZXh0RW5jb2RpbmdVbmljb2RlVjJfMX0sCisJeyJVbmljb2RlVjNfMCIsIGtUZXh0RW5jb2RpbmdVbmljb2RlVjNfMH0sCisJeyJVbmljb2RlVjNfMSIsIGtUZXh0RW5jb2RpbmdVbmljb2RlVjNfMX0sCisJeyJVbmljb2RlVjNfMiIsIGtUZXh0RW5jb2RpbmdVbmljb2RlVjNfMn0sCisJeyJJU09MYXRpbjEiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW4xfSwKKwl7IklTT0xhdGluMiIsIGtUZXh0RW5jb2RpbmdJU09MYXRpbjJ9LAorCXsiSVNPTGF0aW4zIiwga1RleHRFbmNvZGluZ0lTT0xhdGluM30sCisJeyJJU09MYXRpbjQiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW40fSwKKwl7IklTT0xhdGluQ3lyaWxsaWMiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW5DeXJpbGxpY30sCisJeyJJU09MYXRpbkFyYWJpYyIsIGtUZXh0RW5jb2RpbmdJU09MYXRpbkFyYWJpY30sCisJeyJJU09MYXRpbkdyZWVrIiwga1RleHRFbmNvZGluZ0lTT0xhdGluR3JlZWt9LAorCXsiSVNPTGF0aW5IZWJyZXciLCBrVGV4dEVuY29kaW5nSVNPTGF0aW5IZWJyZXd9LAorCXsiSVNPTGF0aW41Iiwga1RleHRFbmNvZGluZ0lTT0xhdGluNX0sCisJeyJJU09MYXRpbjYiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW42fSwKKwl7IklTT0xhdGluNyIsIGtUZXh0RW5jb2RpbmdJU09MYXRpbjd9LAorCXsiSVNPTGF0aW44Iiwga1RleHRFbmNvZGluZ0lTT0xhdGluOH0sCisJeyJJU09MYXRpbjkiLCBrVGV4dEVuY29kaW5nSVNPTGF0aW45fSwKKwl7IkRPU0xhdGluVVMiLCBrVGV4dEVuY29kaW5nRE9TTGF0aW5VU30sCisJeyJET1NHcmVlayIsIGtUZXh0RW5jb2RpbmdET1NHcmVla30sCisJeyJET1NCYWx0aWNSaW0iLCBrVGV4dEVuY29kaW5nRE9TQmFsdGljUmltfSwKKwl7IkRPU0xhdGluMSIsIGtUZXh0RW5jb2RpbmdET1NMYXRpbjF9LAorCXsiRE9TR3JlZWsxIiwga1RleHRFbmNvZGluZ0RPU0dyZWVrMX0sCisJeyJET1NMYXRpbjIiLCBrVGV4dEVuY29kaW5nRE9TTGF0aW4yfSwKKwl7IkRPU0N5cmlsbGljIiwga1RleHRFbmNvZGluZ0RPU0N5cmlsbGljfSwKKwl7IkRPU1R1cmtpc2giLCBrVGV4dEVuY29kaW5nRE9TVHVya2lzaH0sCisJeyJET1NQb3J0dWd1ZXNlIiwga1RleHRFbmNvZGluZ0RPU1BvcnR1Z3Vlc2V9LAorCXsiRE9TSWNlbGFuZGljIiwga1RleHRFbmNvZGluZ0RPU0ljZWxhbmRpY30sCisJeyJET1NIZWJyZXciLCBrVGV4dEVuY29kaW5nRE9TSGVicmV3fSwKKwl7IkRPU0NhbmFkaWFuRnJlbmNoIiwga1RleHRFbmNvZGluZ0RPU0NhbmFkaWFuRnJlbmNofSwKKwl7IkRPU0FyYWJpYyIsIGtUZXh0RW5jb2RpbmdET1NBcmFiaWN9LAorCXsiRE9TTm9yZGljIiwga1RleHRFbmNvZGluZ0RPU05vcmRpY30sCisJeyJET1NSdXNzaWFuIiwga1RleHRFbmNvZGluZ0RPU1J1c3NpYW59LAorCXsiRE9TR3JlZWsyIiwga1RleHRFbmNvZGluZ0RPU0dyZWVrMn0sCisJeyJET1NUaGFpIiwga1RleHRFbmNvZGluZ0RPU1RoYWl9LAorCXsiRE9TSmFwYW5lc2UiLCBrVGV4dEVuY29kaW5nRE9TSmFwYW5lc2V9LAorCXsiRE9TQ2hpbmVzZVNpbXBsaWYiLCBrVGV4dEVuY29kaW5nRE9TQ2hpbmVzZVNpbXBsaWZ9LAorCXsiRE9TS29yZWFuIiwga1RleHRFbmNvZGluZ0RPU0tvcmVhbn0sCisJeyJET1NDaGluZXNlVHJhZCIsIGtUZXh0RW5jb2RpbmdET1NDaGluZXNlVHJhZH0sCisJeyJXaW5kb3dzTGF0aW4xIiwga1RleHRFbmNvZGluZ1dpbmRvd3NMYXRpbjF9LAorCXsiV2luZG93c0FOU0kiLCBrVGV4dEVuY29kaW5nV2luZG93c0FOU0l9LAorCXsiV2luZG93c0xhdGluMiIsIGtUZXh0RW5jb2RpbmdXaW5kb3dzTGF0aW4yfSwKKwl7IldpbmRvd3NDeXJpbGxpYyIsIGtUZXh0RW5jb2RpbmdXaW5kb3dzQ3lyaWxsaWN9LAorCXsiV2luZG93c0dyZWVrIiwga1RleHRFbmNvZGluZ1dpbmRvd3NHcmVla30sCisJeyJXaW5kb3dzTGF0aW41Iiwga1RleHRFbmNvZGluZ1dpbmRvd3NMYXRpbjV9LAorCXsiV2luZG93c0hlYnJldyIsIGtUZXh0RW5jb2RpbmdXaW5kb3dzSGVicmV3fSwKKwl7IldpbmRvd3NBcmFiaWMiLCBrVGV4dEVuY29kaW5nV2luZG93c0FyYWJpY30sCisJeyJXaW5kb3dzQmFsdGljUmltIiwga1RleHRFbmNvZGluZ1dpbmRvd3NCYWx0aWNSaW19LAorCXsiV2luZG93c1ZpZXRuYW1lc2UiLCBrVGV4dEVuY29kaW5nV2luZG93c1ZpZXRuYW1lc2V9LAorCXsiV2luZG93c0tvcmVhbkpvaGFiIiwga1RleHRFbmNvZGluZ1dpbmRvd3NLb3JlYW5Kb2hhYn0sCisJeyJVU19BU0NJSSIsIGtUZXh0RW5jb2RpbmdVU19BU0NJSX0sCisJeyJKSVNfWDAyMDFfNzYiLCBrVGV4dEVuY29kaW5nSklTX1gwMjAxXzc2fSwKKwl7IkpJU19YMDIwOF84MyIsIGtUZXh0RW5jb2RpbmdKSVNfWDAyMDhfODN9LAorCXsiSklTX1gwMjA4XzkwIiwga1RleHRFbmNvZGluZ0pJU19YMDIwOF85MH0sCisJeyJKSVNfWDAyMTJfOTAiLCBrVGV4dEVuY29kaW5nSklTX1gwMjEyXzkwfSwKKwl7IkpJU19DNjIyNl83OCIsIGtUZXh0RW5jb2RpbmdKSVNfQzYyMjZfNzh9LAorCXsiU2hpZnRKSVNfWDAyMTNfMDAiLCBrVGV4dEVuY29kaW5nU2hpZnRKSVNfWDAyMTNfMDB9LAorCXsiR0JfMjMxMl84MCIsIGtUZXh0RW5jb2RpbmdHQl8yMzEyXzgwfSwKKwl7IkdCS185NSIsIGtUZXh0RW5jb2RpbmdHQktfOTV9LAorCXsiR0JfMTgwMzBfMjAwMCIsIGtUZXh0RW5jb2RpbmdHQl8xODAzMF8yMDAwfSwKKwl7IktTQ181NjAxXzg3Iiwga1RleHRFbmNvZGluZ0tTQ181NjAxXzg3fSwKKwl7IktTQ181NjAxXzkyX0pvaGFiIiwga1RleHRFbmNvZGluZ0tTQ181NjAxXzkyX0pvaGFifSwKKwl7IkNOU18xMTY0M185Ml9QMSIsIGtUZXh0RW5jb2RpbmdDTlNfMTE2NDNfOTJfUDF9LAorCXsiQ05TXzExNjQzXzkyX1AyIiwga1RleHRFbmNvZGluZ0NOU18xMTY0M185Ml9QMn0sCisJeyJDTlNfMTE2NDNfOTJfUDMiLCBrVGV4dEVuY29kaW5nQ05TXzExNjQzXzkyX1AzfSwKKwl7IklTT18yMDIyX0pQIiwga1RleHRFbmNvZGluZ0lTT18yMDIyX0pQfSwKKwl7IklTT18yMDIyX0pQXzIiLCBrVGV4dEVuY29kaW5nSVNPXzIwMjJfSlBfMn0sCisJeyJJU09fMjAyMl9KUF8xIiwga1RleHRFbmNvZGluZ0lTT18yMDIyX0pQXzF9LAorCXsiSVNPXzIwMjJfSlBfMyIsIGtUZXh0RW5jb2RpbmdJU09fMjAyMl9KUF8zfSwKKwl7IklTT18yMDIyX0NOIiwga1RleHRFbmNvZGluZ0lTT18yMDIyX0NOfSwKKwl7IklTT18yMDIyX0NOX0VYVCIsIGtUZXh0RW5jb2RpbmdJU09fMjAyMl9DTl9FWFR9LAorCXsiSVNPXzIwMjJfS1IiLCBrVGV4dEVuY29kaW5nSVNPXzIwMjJfS1J9LAorCXsiRVVDX0pQIiwga1RleHRFbmNvZGluZ0VVQ19KUH0sCisJeyJFVUNfQ04iLCBrVGV4dEVuY29kaW5nRVVDX0NOfSwKKwl7IkVVQ19UVyIsIGtUZXh0RW5jb2RpbmdFVUNfVFd9LAorCXsiRVVDX0tSIiwga1RleHRFbmNvZGluZ0VVQ19LUn0sCisJeyJTaGlmdEpJUyIsIGtUZXh0RW5jb2RpbmdTaGlmdEpJU30sCisJeyJLT0k4X1IiLCBrVGV4dEVuY29kaW5nS09JOF9SfSwKKwl7IkJpZzUiLCBrVGV4dEVuY29kaW5nQmlnNX0sCisJeyJNYWNSb21hbkxhdGluMSIsIGtUZXh0RW5jb2RpbmdNYWNSb21hbkxhdGluMX0sCisJeyJIWl9HQl8yMzEyIiwga1RleHRFbmNvZGluZ0haX0dCXzIzMTJ9LAorCXsiQmlnNV9IS1NDU18xOTk5Iiwga1RleHRFbmNvZGluZ0JpZzVfSEtTQ1NfMTk5OX0sCisJeyJOZXh0U3RlcExhdGluIiwga1RleHRFbmNvZGluZ05leHRTdGVwTGF0aW59LAorCXsiRUJDRElDX1VTIiwga1RleHRFbmNvZGluZ0VCQ0RJQ19VU30sCisJeyJFQkNESUNfQ1AwMzciLCBrVGV4dEVuY29kaW5nRUJDRElDX0NQMDM3fSwKKwl7Ik11bHRpUnVuIiwga1RleHRFbmNvZGluZ011bHRpUnVufSwKKworCS8qIFRlcm1pbmF0b3IgKi8KKwl7TlVMTCwgLTF9LAorICAgIH07CisgICAgaW50IGk7CisKKyAgICBpID0gMDsKKyAgICBmb3IgKGkgPSAwOyBlbmNvZGV0YWJsZVtpXS5uYW1lICE9IE5VTEw7ICsraSkKKyAgICB7CisJaWYgKFNUUklDTVAoZW5jb2RlbmFtZSwgZW5jb2RldGFibGVbaV0ubmFtZSkgPT0gMCkKKwkgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBlbmNvZGV0YWJsZVtpXS5lbmNvZGU7Cit9CisKKy8qCisgKiBpY29udiBpbnRlcmZhY2VzCisgKi8KKworICAgIGljb252X3QKK2ljb252X29wZW4oY29uc3QgY2hhciogdG9jb2RlLCBjb25zdCBjaGFyKiBmcm9tY29kZSkKK3sKKyAgICBUZXh0RW5jb2RpbmcgdG9FbmMsIGZyb21FbmM7CisgICAgaWNvbnZfdCBjZCA9IE5VTEw7CisgICAgT1NTdGF0dXMgc3Q7CisKKyAgICAvKiBWZXJpZnkgdG8vZnJvbSBlbmNvZGluZyBuYW1lICovCisgICAgdG9FbmMgPSBnZXRfdGV4dGVuY29kaW5nKHRvY29kZSk7CisgICAgZnJvbUVuYyA9IGdldF90ZXh0ZW5jb2RpbmcoZnJvbWNvZGUpOworICAgIGlmICh0b0VuYyA8IDAgfHwgZnJvbUVuYyA8IDApCisJZ290byBJQ09OVl9PUEVOX0VSUjsKKworICAgIC8qIEFsbG9jYXRlIG1lbW9yeSB0byBvYmplY3QgKi8KKyAgICBjZCA9IChpY29udl90KWFsbG9jKHNpemVvZihzdHJ1Y3QgX2ljb252X3QpKTsKKyAgICBpZiAoIWNkKQorCWdvdG8gSUNPTlZfT1BFTl9FUlI7CisgICAgbWVtc2V0KGNkLCAwLCBzaXplb2Yoc3RydWN0IF9pY29udl90KSk7CisKKyAgICAvKiBDcmVhdGUgY29udmVydGVyICovCisgICAgaWYgKGZyb21FbmMgIT0gdG9FbmMpCisgICAgeworCVRSQUNFKCIqKiogZnJvbUVuYz0lZCB0b0VuYz0lZFxuIiwgKGludClmcm9tRW5jLCAoaW50KXRvRW5jKTsKKwlzdCA9IFRFQ0NyZWF0ZUNvbnZlcnRlcigmY2QtPnRlYywgZnJvbUVuYywgdG9FbmMpOworCWlmIChzdCAhPSAwKQorCXsKKwkgICAgVFJBQ0UoIioqKiBURUNDcmVhdGVDb252ZXJ0ZXIoKT0lZFxuIiwgKGludClzdCk7CisJICAgIGdvdG8gSUNPTlZfT1BFTl9FUlI7CisJfQorCS8qIENyZWF0ZSByZXZlcnNlIGNvbnZlcnRlciAqLworCXN0ID0gVEVDQ3JlYXRlQ29udmVydGVyKCZjZC0+dGVjUmV2ZXJzZSwgdG9FbmMsIGZyb21FbmMpOworCWlmIChzdCAhPSAwKQorCXsKKwkgICAgVFJBQ0UoIioqKiBURUNDcmVhdGVDb252ZXJ0ZXIoKT0lZCAocmV2ZXJzZSlcbiIsIChpbnQpc3QpOworCSAgICBnb3RvIElDT05WX09QRU5fRVJSOworCX0KKwkvKiBDcmVhdGUgU25pZmZlciAqLworCXN0ID0gVEVDQ3JlYXRlU25pZmZlcigmY2QtPnNuaWZmLCAmZnJvbUVuYywgMSk7CisJaWYgKHN0ICE9IDApCisJeworCSAgICBUUkFDRSgiKioqIFRFQ0NyZWF0ZVNuaWZmZXIoKT0lZFxuIiwgKGludClzdCk7CisJICAgIGdvdG8gSUNPTlZfT1BFTl9FUlI7CisJfQorICAgIH0KKworICAgIGNkLT5mcm9tID0gZnJvbUVuYzsKKyAgICBjZC0+dG8gPSB0b0VuYzsKKyAgICBsYXN0X2Vycm5vID0gMDsKKyAgICByZXR1cm4gY2Q7CisKK0lDT05WX09QRU5fRVJSOgorICAgIGlmIChjZCkKKwlpY29udl9jbG9zZShjZCk7CisgICAgbGFzdF9lcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gKGljb252X3QpLTE7Cit9CisKKy8qCisgKiBVc2VkIHdoZW4gdGhlcmUgYXJlIHNhbWUgdmFsdWUgaW4gJ2Zyb20gZW5jb2RpbmcnIGFuZCAndG8gZW5jb2RpbmcnLgorICogVEVDIGRvZXNuJ3Qgc3VwcG9ydCBjb252ZXJzaW9uIGJldHdlZW4gc2FtZSBlbmNvZGluZ3MsIGFuZAorICogVEVDQ3JlYXRlQ29udmVydGVyKCkgZmFpbGVkLgorICovCisgICAgc3RhdGljIHNpemVfdAorbnVsbF9jb252KGljb252X3QgY2QsIGNvbnN0IGNoYXIqKiBpbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwKKwljaGFyKiogb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCkKK3sKKyAgICBjb25zdCBjaGFyKiBidWZfaW4gPSBpbmJ1ZiAmJiAqaW5idWYgPyAqaW5idWYgOiBOVUxMOworICAgIGNoYXIqIGJ1Zl9vdXQgPSBvdXRidWYgJiYgKm91dGJ1ZiA/ICpvdXRidWYgOiBOVUxMOworCisgICAgaWYgKGJ1Zl9pbikKKyAgICB7CisJaW50IGluX2xlbiA9IGluYnl0ZXNsZWZ0ID8gKmluYnl0ZXNsZWZ0IDogMDsKKwlpbnQgb3V0X2xlbiA9IG91dGJ5dGVzbGVmdCA/ICpvdXRieXRlc2xlZnQgOiAwOworCisJaWYgKCFidWZfb3V0IHx8IG91dF9sZW4gPD0gMCkKKwl7CisJICAgIGxhc3RfZXJybm8gPSBFMkJJRzsKKwkgICAgcmV0dXJuIC0xOworCX0KKwllbHNlIGlmIChpbl9sZW4gPiAwKQorCXsKKwkgICAgaW50IGxlbiA9IGluX2xlbiA8IG91dF9sZW4gPyBpbl9sZW4gOiBvdXRfbGVuOworCisJICAgIG1lbWNweSAoYnVmX291dCwgYnVmX2luLCBsZW4pOworCSAgICAqaW5idWYgKz0gbGVuOworCSAgICAqb3V0YnVmICs9IGxlbjsKKwkgICAgKmluYnl0ZXNsZWZ0IC09IGxlbjsKKwkgICAgKm91dGJ5dGVzbGVmdCAtPSBsZW47CisJICAgIGlmICgqb3V0Ynl0ZXNsZWZ0IDw9IDApCisJICAgIHsKKwkJbGFzdF9lcnJubyA9IEUyQklHOworCQlyZXR1cm4gLTE7CisJICAgIH0KKwl9CisgICAgfQorICAgIGxhc3RfZXJybm8gPSAwOworICAgIHJldHVybiAwOworfQorCisgICAgc2l6ZV90CitpY29udihpY29udl90IGNkLCBjb25zdCBjaGFyKiogaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsCisJY2hhcioqIG91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpCit7CisgICAgQ29uc3RUZXh0UHRyIGJ1Zl9pbjsKKyAgICBUZXh0UHRyIGJ1Zl9vdXQ7CisgICAgQnl0ZUNvdW50IG91dF9sZW4sIG91dF90cnVlOworICAgIEJ5dGVDb3VudCBpbl9sZW4sIGluX3RydWU7CisgICAgT1NTdGF0dXMgc3Q7CisKKyAgICBpZiAoIWNkKQorICAgIHsKKwlsYXN0X2Vycm5vID0gRU5PRU5UOyAvKiBUT0RPOiBBbm90aGVyIGVycm9yIGNvZGUgc2hvdWxkIGJlIHNldCAqLworCXJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKGNkLT5mcm9tID09IGNkLT50bykKKwlyZXR1cm4gbnVsbF9jb252KGNkLCBpbmJ1ZiwgaW5ieXRlc2xlZnQsIG91dGJ1Ziwgb3V0Ynl0ZXNsZWZ0KSA7CisKKyAgICBidWZfaW4gPSAoVGV4dFB0cikgaW5idWYgOworICAgIGJ1Zl9vdXQgPSAoVGV4dFB0cikgb3V0YnVmIDsKKyAgICBvdXRfbGVuID0gb3V0X3RydWUgPSAtMTsKKyAgICBpbl9sZW4gPSBpbl90cnVlID0gLTE7CisKKyAgICBpZiAoYnVmX2luICYmIGJ1Zl9vdXQpCisgICAgeworCUl0ZW1Db3VudCBlcnJvciwgZmVhdHVyZTsKKworCS8qIE5vcm1hbCBjb252ZXJ0IG1vZGUgKi8KKwlpZiAoIWluYnl0ZXNsZWZ0IHx8ICFvdXRieXRlc2xlZnQpCisJeworCSAgICBsYXN0X2Vycm5vID0gRUZBVUxUOworCSAgICByZXR1cm4gLTE7CisJfQorCWluX2xlbiA9ICppbmJ5dGVzbGVmdDsKKwlvdXRfbGVuID0gKm91dGJ5dGVzbGVmdDsKKworCS8qIENoZWNrIHN0cmVhbSBpcyBmb3JtIGluIGV4cGVjdGVkIGVuY29kaW5nIG9yIG5vdCAqLworCXN0ID0gVEVDU25pZmZUZXh0RW5jb2RpbmcoY2QtPnNuaWZmLCAoVGV4dFB0cilidWZfaW4sIGluX2xlbiwKKwkJJmNkLT5mcm9tLCAxLCAmZXJyb3IsIDEsICZmZWF0dXJlLCAxKTsKKwlUUkFDRSgiVEVDU25pZmZUZXh0RW5jb2RpbmcoKT0lZCBlcnJvcj0lZCBmZWF0dXJlPSVkXG4iLAorCQkoaW50KXN0LCAoaW50KWVycm9yLCAoaW50KWZlYXR1cmUpOworCWlmICgoZXJyb3IgIT0gMCB8fCBmZWF0dXJlID09IDApCisJCSYmICEoZXJyb3IgPT0gMHhmZmZmZmZmZiAmJiBmZWF0dXJlID09IDB4ZmZmZmZmZmYpKQorCSAgICAvKiBOb3QgZXhwZWN0ZWQgZW5jb2RpbmcgKi8KKwkgICAgc3QgPSBrVEVDVW5tYXBwYWJsZUVsZW1lbnRFcnI7CisJZWxzZQorCXsKKwkgICAgLyogRG8gY29udmVydCAqLworCSAgICBzdCA9IFRFQ0NvbnZlcnRUZXh0KGNkLT50ZWMsCisJCSAgICBidWZfaW4sIGluX2xlbiwgJmluX3RydWUsCisJCSAgICBidWZfb3V0LCBvdXRfbGVuLCAmb3V0X3RydWUpOworCSAgICAvKiBWZXJpZnkgY29udmVydGVkIHRleHQuICBDb21wYXJlIG9yaWdpbmFsIHRleHQgd2l0aCByZXZlcnNlCisJICAgICAqIGNvbnZlcnRlZCB0ZXh0LiAgSWYgbm90IG1hdGNoLCB0aGVyZSBpcyBzb21lIHByb2JsZW0gb24KKwkgICAgICogY29udmVydGluZy4gKi8KKwkgICAgaWYgKHN0ID09IDAgJiYgaW5fdHJ1ZSA+IDApCisJICAgIHsKKwkJQnl0ZUNvdW50IHJldl9pbiwgcmV2X291dDsKKwkJVGV4dFB0ciBidWZfcmV2ID0gKFRleHRQdHIpYWxsb2MoaW5fdHJ1ZSk7CisKKwkJaWYgKGJ1Zl9yZXYpCisJCXsKKwkJICAgIHN0ID0gVEVDQ29udmVydFRleHQoY2QtPnRlY1JldmVyc2UsCisJCQkgICAgYnVmX291dCwgb3V0X3RydWUsICZyZXZfaW4sCisJCQkgICAgYnVmX3JldiwgaW5fdHJ1ZSwgJnJldl9vdXQpOworCQkgICAgaWYgKHN0ICE9IDAgfHwgcmV2X2luICE9IG91dF90cnVlIHx8IHJldl9vdXQgIT0gaW5fdHJ1ZQorCQkJICAgIHx8IG1lbWNtcChidWZfcmV2LCBidWZfaW4sIHJldl9vdXQpICE9IDApCisJCSAgICB7CisjaWZkZWYgSUNPTlZPU1hfREVCVUcKKwkJCWZwcmludGYoc3RkZXJyLCAiICByZXZlcnNlIGNvbnZlcnNpb24gZmFpbGVkLlxuIik7CisjZW5kaWYKKwkJCXN0ID0ga1RFQ1VubWFwcGFibGVFbGVtZW50RXJyOworCQkgICAgfQorCQkgICAgdmltX2ZyZWUoYnVmX3Jldik7CisJCX0KKwkJZWxzZQorCQkgICAgc3QgPSBrVEVDVW5tYXBwYWJsZUVsZW1lbnRFcnI7CisJICAgIH0KKwl9CisgICAgfQorICAgIGVsc2UgaWYgKCFidWZfaW4gJiYgYnVmX291dCkKKyAgICB7CisJLyogRmx1c2ggYWxsIGJ1ZmZlcmVkIHN0cmluZ3MgdG8gYnVmZmVyLCBhbmQgcmVzZXQgc3RhdHVzICovCisJaWYgKCFvdXRieXRlc2xlZnQpCisJeworCSAgICBsYXN0X2Vycm5vID0gRUZBVUxUOworCSAgICByZXR1cm4gLTE7CisJfQorCW91dF9sZW4gPSAqb3V0Ynl0ZXNsZWZ0OworCXN0ID0gVEVDRmx1c2hUZXh0KGNkLT50ZWMsCisJCWJ1Zl9vdXQsIG91dF9sZW4sICZvdXRfdHJ1ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKCFidWZfaW4gJiYgIWJ1Zl9vdXQpCisgICAgeworCS8qIFJlc2V0IGNkJ3Mgc3RhdHVzIGFuZCBjYW5jZWwgYnVmZmVyZWQgc3RyaW5ncyAqLworCXVuc2lnbmVkIGNoYXIgdG1wX291dFsyNTZdOworCisJYnVmX291dCA9IHRtcF9vdXQ7CisJb3V0X2xlbiA9IHNpemVvZih0bXBfb3V0KTsKKwlzdCA9IFRFQ0ZsdXNoVGV4dChjZC0+dGVjLAorCQlidWZfb3V0LCBvdXRfbGVuLCAmb3V0X3RydWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWxhc3RfZXJybm8gPSBFRkFVTFQ7CisJcmV0dXJuIC0xOworICAgIH0KKyAgICBUUkFDRSgic3Q9JWQsIGJ1Zl9pbj0lcCwgaW5fbGVuPSVkLCBpbl90cnVlPSVkXG4iCisJICAgICIgIGJ1Zl9vdXQ9JXAsIG91dF9sZW49JWQsIG91dF90cnVlPSVkXG4iLCAoaW50KXN0LAorCSAgICBidWZfaW4sIChpbnQpaW5fbGVuLCAoaW50KWluX3RydWUsCisJICAgIGJ1Zl9vdXQsIChpbnQpb3V0X2xlbiwgKGludClvdXRfdHJ1ZSk7CisKKyAgICBzd2l0Y2ggKHN0KQorICAgIHsKKwljYXNlIDA6CisJICAgIC8qIE5vIGVycm9yICovCisJICAgIGlmIChpbmJ5dGVzbGVmdCkKKwkJKmluYnl0ZXNsZWZ0IC09IGluX3RydWU7CisJICAgIGlmIChvdXRieXRlc2xlZnQpCisJCSpvdXRieXRlc2xlZnQgLT0gb3V0X3RydWU7CisJICAgIGlmIChpbmJ1ZiAmJiAqaW5idWYpCisJCSppbmJ1ZiArPSBpbl90cnVlOworCSAgICBpZiAob3V0YnVmICYmICpvdXRidWYpCisJCSpvdXRidWYgKz0gb3V0X3RydWU7CisJICAgIGxhc3RfZXJybm8gPSAwOworCSAgICByZXR1cm4gMDsgLyogTm8gZXJyb3IgKi8KKwljYXNlIGtURUNVbm1hcHBhYmxlRWxlbWVudEVycjoKKwkgICAgbGFzdF9lcnJubyA9IEVJTFNFUTsKKwljYXNlIGtURUNJbmNvbXBsZXRlRWxlbWVudEVycjoKKwkgICAgbGFzdF9lcnJubyA9IEVJTlZBTDsKKwljYXNlIGtURUNPdXRwdXRCdWZmZXJGdWxsU3RhdHVzOgorCSAgICBsYXN0X2Vycm5vID0gRTJCSUc7CisJICAgIHJldHVybiAtMTsKKwlkZWZhdWx0OgorCSAgICBUUkFDRSgiaWNvbnYoJXAsICVwLCAlcCwgJXAsICVwKSBmYWlsZWQuICglZClcbiIsCisJCSAgICBjZCwgaW5idWYsIGluYnl0ZXNsZWZ0LCBvdXRidWYsIG91dGJ5dGVzbGVmdCwgKGludClzdCk7CisJICAgIGxhc3RfZXJybm8gPSBFRkFVTFQ7CisJICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKKyAgICBpbnQKK2ljb252X2Nsb3NlKGljb252X3QgY2QpCit7CisgICAgaWYgKGNkKQorICAgIHsKKwkvKiBGcmVlIGFsbCBlbGVtZW50cyBvZiBpY29udl90ICovCisJaWYgKGNkLT50ZWMpCisJICAgIFRFQ0Rpc3Bvc2VDb252ZXJ0ZXIoY2QtPnRlYyk7CisJaWYgKGNkLT50ZWNSZXZlcnNlKQorCSAgICBURUNEaXNwb3NlQ29udmVydGVyKGNkLT50ZWNSZXZlcnNlKTsKKwlpZiAoY2QtPnNuaWZmKQorCSAgICBURUNEaXNwb3NlU25pZmZlcihjZC0+c25pZmYpOworCXZpbV9mcmVlKGNkKTsKKwlsYXN0X2Vycm5vID0gMDsKKwlyZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlsYXN0X2Vycm5vID0gRUlOVkFMOworCXJldHVybiAtMTsKKyAgICB9Cit9CisKKyAgICBpbnQqCitpY29udl9lcnJubygpCit7CisgICAgcmV0dXJuICZsYXN0X2Vycm5vOworfQorI2VuZGlmIC8qIE1BQ09TX1hfSUNPTlZFTVUgKi8KKworI2lmZGVmIFVTRV9NQ0hfR0VUVEVYVAorCisjZGVmaW5lIEdFVFRFWFRfQlVGTlVNCQk2NAorI2RlZmluZSBHRVRURVhUX0JVRlNJWkUJCTI1NgorCisgICAgY2hhcioKK21jaF9nZXR0ZXh0KGNvbnN0IGNoYXIqIG1zZ2lkKQoreworICAgIHN0YXRpYyBjaGFyCQlidWZbR0VUVEVYVF9CVUZOVU1dW0dFVFRFWFRfQlVGU0laRV07CisgICAgc3RhdGljIGludAkJYnVmbnVtID0gMDsKKyAgICBjb25zdCBjaGFyCQkqbXNnID0gTlVMTDsKKyAgICBDRlN0cmluZ1JlZgkJc3Rya2V5ID0gTlVMTCwgc3RybXNnID0gTlVMTDsKKyAgICBDRlN0cmluZ0VuY29kaW5nCWVuYzsKKworICAgIGlmICghbXNnaWQpCisJZ290byBNQ0hfR0VUVEVYVF9GSU5JU0g7CisgICAgZW5jID0gQ0ZTdHJpbmdHZXRTeXN0ZW1FbmNvZGluZygpOworICAgIFRSQUNFKCJtY2hfZ2V0dGV4dCglcylcbiIsIG1zZ2lkKTsKKworICAgIHN0cmtleSA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwgbXNnaWQsIGVuYyk7CisgICAgaWYgKCFzdHJrZXkpCisgICAgeworCVRSQUNFKCIgIENhbid0IGNyZWF0ZSBhIENGU3RyaW5nIGZvciBtc2dpZC5cbiIpOworCWdvdG8gTUNIX0dFVFRFWFRfRklOSVNIOworICAgIH0KKworICAgIHN0cm1zZyA9IENGQ29weUxvY2FsaXplZFN0cmluZyhzdHJrZXksIE5VTEwpOworICAgIGlmICghc3RybXNnKQorICAgIHsKKwlUUkFDRSgiICBObyBsb2NhbGl6ZWQgc3RyaW5ncyBmb3IgbXNnaWQuXG4iKTsKKwlnb3RvIE1DSF9HRVRURVhUX0ZJTklTSDsKKyAgICB9CisKKyAgICBtc2cgPSBDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RybXNnLCBlbmMpOworICAgIGlmICghbXNnKQorICAgIHsKKwkvKiBUaGlzIGlzIGFzIGJhY2t1cCB3aGVuIENGU3RyaW5nR2V0Q1N0cmluZ1B0ciB3YXMgZmFpbGVkICovCisJQ0ZTdHJpbmdHZXRDU3RyaW5nKHN0cm1zZywgYnVmW2J1Zm51bV0sIEdFVFRFWFRfQlVGU0laRSwgZW5jKTsKKwltc2cgPSBidWZbYnVmbnVtXTsKKwlpZiAoKytidWZudW0gPj0gR0VUVEVYVF9CVUZOVU0pCisJICAgIGJ1Zm51bSA9IDA7CisgICAgfQorICAgIFRSQUNFKCIgIExvY2FsaXplZCB0bzogJXNcbiIsIG1zZyk7CisKK01DSF9HRVRURVhUX0ZJTklTSDoKKyAgICBpZiAoc3Rya2V5KQorCUNGUmVsZWFzZShzdHJrZXkpOworICAgIGlmIChzdHJtc2cpCisJQ0ZSZWxlYXNlKHN0cm1zZyk7CisgICAgcmV0dXJuIChjaGFyKikobXNnID8gbXNnIDogbXNnaWQpOworfQorCisgICAgY2hhcioKK21jaF9iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyKiBkb21haW4sIGNvbnN0IGNoYXIqIGRpcm5hbWUpCit7CisgICAgVFJBQ0UoIm1jaF9iaW5kdGV4dGRvbWFpbiglcywgJXMpXG4iLCBkb21haW4sIGRpcm5hbWUpOworICAgIHJldHVybiAoY2hhciopZGlybmFtZTsKK30KKworICAgIGNoYXIqCittY2hfdGV4dGRvbWFpbihjb25zdCBjaGFyKiBkb21haW4pCit7CisgICAgVFJBQ0UoIm1jaF90ZXh0ZG9tYWluKCVzKVxuIiwgZG9tYWluKTsKKyAgICByZXR1cm4gKGNoYXIqKWRvbWFpbjsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29zX21pbnQuaCBiL3NyYy9vc19taW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0MTliMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc19taW50LmgKQEAgLTAsMCArMSwxMyBAQAorLyogdmltOnRzPTggc3RzPTQ6c3c9NAorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisvKgorICogQXRhcmkgTWlOVCBNYWNoaW5lLWRlcGVuZGVudCB0aGluZ3MuCisgKi8KKworI2RlZmluZSBCSU5BUllfRklMRV9JTwpkaWZmIC0tZ2l0IGEvc3JjL29zX21zZG9zLmMgYi9zcmMvb3NfbXNkb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDhiMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX21zZG9zLmMKQEAgLTAsMCArMSwzMTE0IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBvc19tc2Rvcy5jCisgKgorICogTVNET1Mgc3lzdGVtLWRlcGVuZGVudCByb3V0aW5lcy4KKyAqIEEgY2hlYXAgcGxhc3RpYyBpbWl0YXRpb24gb2YgdGhlIGFtaWdhIGRlcGVuZGVudCBjb2RlLgorICogQSBsb3QgaW4gdGhpcyBmaWxlIHdhcyBtYWRlIGJ5IEp1ZXJnZW4gV2VpZ2VydCAoancpLgorICoKKyAqIERKR1BQIGNoYW5nZXMgYnkgR2VydCB2YW4gQW50d2VycGVuCisgKiBGYXN0ZXIgdGV4dCBzY3JlZW5zIGJ5IEpvaG4gTGFuZ2UgKGpsYW5nZUB6aWxrZXIubmV0KQorICogV2luZG93cyBjbGlwYm9hcmQgZnVuY3Rpb25hbGl0eSBhZGRlZCBieSBEYXZpZCBLb3RjaGFuIChkaykKKyAqCisgKiBTb21lIGZ1bmN0aW9ucyBhcmUgYWxzbyB1c2VkIGZvciBXaW4xNiAoTVMtV2luZG93cyAzLjEpLgorICovCisKKyNpbmNsdWRlIDxpby5oPgorI2luY2x1ZGUgInZpbS5oIgorCisjaW5jbHVkZSA8Y29uaW8uaD4KKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisvKgorICogTVMtRE9TIG9ubHkgY29kZSwgbm90IHVzZWQgZm9yIFdpbjE2LgorICovCisjaWZuZGVmIFdJTjE2CisKKworI2luY2x1ZGUgPGJpb3MuaD4KKyNpZmRlZiBESkdQUAorIyBpbmNsdWRlIDxkcG1pLmg+CisjIGluY2x1ZGUgPHNpZ25hbC5oPgorIyBpbmNsdWRlIDxzeXMvbW92ZWRhdGEuaD4KKyMgaW5jbHVkZSA8Y3J0MC5oPgorIyBpZmRlZiBGRUFUX0NMSVBCT0FSRAorIyAgaW5jbHVkZSA8c3lzL3NlZ21lbnRzLmg+CisjIGVuZGlmCisjZWxzZQorIyBpbmNsdWRlIDxhbGxvYy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKERKR1BQKSB8fCBkZWZpbmVkKFBST1RPKQorIyBkZWZpbmUgX2NkZWNsCSAgICAvKiBESkdQUCBkb2Vzbid0IGhhdmUgdGhpcyAqLworI2VuZGlmCisKK3N0YXRpYyBpbnQgY2Jya19wcmVzc2VkID0gRkFMU0U7ICAgIC8qIHNldCBieSBjdHJsLWJyZWFrIGludGVycnVwdCAqLworc3RhdGljIGludCBjdHJsY19wcmVzc2VkID0gRkFMU0U7ICAgLyogc2V0IHdoZW4gY3RybC1DIG9yIGN0cmwtYnJlYWsgZGV0ZWN0ZWQgKi8KK3N0YXRpYyBpbnQgZGVsYXllZF9yZWRyYXcgPSBGQUxTRTsgIC8qIHNldCB3aGVuIGN0cmwtQyBkZXRlY3RlZCAqLworCitzdGF0aWMgaW50IGJpb3NrZXlfcmVhZCA9IF9OS0VZQlJEX1JFQUQ7ICAgLyogYmlvc2tleSgpIGFyZ3VtZW50OiByZWFkIGtleSAqLworc3RhdGljIGludCBiaW9za2V5X3JlYWR5ID0gX05LRVlCUkRfUkVBRFk7IC8qIGJpb3NrZXkoKSBhcmd1bWVudDoga2V5IHJlYWR5PyAqLworCisjaWZkZWYgRkVBVF9NT1VTRQorc3RhdGljIGludCBtb3VzZV9hdmFpbCA9IEZBTFNFOwkJLyogbW91c2UgcHJlc2VudCAqLworc3RhdGljIGludCBtb3VzZV9hY3RpdmU7CQkvKiBtb3VzZSBlbmFibGVkICovCitzdGF0aWMgaW50IG1vdXNlX2hpZGRlbjsJCS8qIG1vdXNlIG5vdCBzaG93biAqLworc3RhdGljIGludCBtb3VzZV9jbGljayA9IC0xOwkJLyogbW91c2Ugc3RhdHVzICovCitzdGF0aWMgaW50IG1vdXNlX2xhc3RfY2xpY2sgPSAtMTsJLyogcHJldmlvdXMgc3RhdHVzIGF0IGNsaWNrICovCitzdGF0aWMgaW50IG1vdXNlX3ggPSAtMTsJCS8qIG1vdXNlIHggY29vZGluYXRlICovCitzdGF0aWMgaW50IG1vdXNlX3kgPSAtMTsJCS8qIG1vdXNlIHkgY29vZGluYXRlICovCitzdGF0aWMgbG9uZyBtb3VzZV9jbGlja190aW1lID0gMDsJLyogYmlvc3RpbWUoKSBvZiBsYXN0IGNsaWNrICovCitzdGF0aWMgaW50IG1vdXNlX2NsaWNrX2NvdW50ID0gMDsJLyogY291bnQgZm9yIG11bHRpLWNsaWNrcyAqLworc3RhdGljIGludCBtb3VzZV9jbGlja194ID0gMDsJCS8qIHggb2YgcHJldmlvdXMgbW91c2UgY2xpY2sgKi8KK3N0YXRpYyBpbnQgbW91c2VfY2xpY2tfeSA9IDA7CQkvKiB5IG9mIHByZXZpb3VzIG1vdXNlIGNsaWNrICovCitzdGF0aWMgbGluZW5yX1QgbW91c2VfdG9wbGluZSA9IDA7CS8qIHdfdG9wbGluZSBhdCBwcmV2aW91cyBtb3VzZSBjbGljayAqLworI2lmZGVmIEZFQVRfRElGRgorc3RhdGljIGludCBtb3VzZV90b3BmaWxsID0gMDsJCS8qIHdfdG9wZmlsbCBhdCBwcmV2aW91cyBtb3VzZSBjbGljayAqLworI2VuZGlmCitzdGF0aWMgaW50IG1vdXNlX3hfZGl2ID0gODsJCS8qIGNvbHVtbiA9IHggY29vcmQgLyBtb3VzZV94X2RpdiAqLworc3RhdGljIGludCBtb3VzZV95X2RpdiA9IDg7CQkvKiBsaW5lICAgPSB5IGNvb3JkIC8gbW91c2VfeV9kaXYgKi8KKyNlbmRpZgorCisjZGVmaW5lIEJJT1NUSUNLICAgIDU1CQkJLyogYmlvc3RpbWUoKSBpbmNyZWFzZXMgb25lIHRpY2sgYWJvdXQKKwkJCQkJICAgZXZlcnkgNTUgbXNlYyAqLworCitzdGF0aWMgaW50IG9yaWdfYXR0ciA9IDB4MDcwMDsJCS8qIHZpZGVvIGF0dHJpYnV0ZXMgd2hlbiBzdGFydGluZyAqLworCitzdGF0aWMgaW50IFNfaUxlZnQgPSAwOwkJCS8qIFNjcm9sbCB3aW5kb3c7IHRoZXNlIGFyZSAxIG9mZnNldCAqLworc3RhdGljIGludCBTX2lUb3AgPSAwOworc3RhdGljIGludCBTX2lSaWdodCA9IDA7CitzdGF0aWMgaW50IFNfaUJvdHRvbSA9IDA7CisKKy8qCisgKiBOZWVkIHRvIHJlbWVtYmVyIHRoZSB2YWx1ZXMsIGJlY2F1c2Ugd2Ugc2V0IGhvcml6b250YWwgYW5kIHZlcnRpY2FsCisgKiBlZGdlcyBzZXBhcmF0ZWx5LgorICovCisgICAgc3RhdGljIHZvaWQKK215d2luZG93KGludCBpTGVmdCwgaW50IGlUb3AsIGludCBpUmlnaHQsIGludCBpQm90dG9tKQoreworICAgIFNfaUxlZnQgPSBpTGVmdDsKKyAgICBTX2lUb3AgPSBpVG9wOworICAgIFNfaVJpZ2h0ID0gaVJpZ2h0OworICAgIFNfaUJvdHRvbSA9IGlCb3R0b207CisgICAgd2luZG93KGlMZWZ0LCBpVG9wLCBpUmlnaHQsIGlCb3R0b20pOworfQorCisjaWZkZWYgREpHUFAKKy8qCisgKiBGb3IgREpHUFAsIHVzZSBvdXIgb3duIGZ1bmN0aW9ucyBmb3IgZmFzdCB0ZXh0IHNjcmVlbnMuICBKTUwgMS8xOC85OAorICovCisKK3Vuc2lnbmVkIGxvbmcJU191bFNjcmVlbkJhc2UgPSAweGI4MDAwOwordW5zaWduZWQgc2hvcnQJU191aUF0dHJpYnV0ZSA9IDA7CitpbnQJCVNfaUN1cnJlbnRSb3cgPSAwOwkvKiBUaGVzZSBhcmUgMCBvZmZzZXQgKi8KK2ludAkJU19pQ3VycmVudENvbHVtbiA9IDA7CitzaG9ydAkJU19zZWxWaWRlbzsJLyogU2VsZWN0b3IgZm9yIERKR1BQIGRpcmVjdCB2aWRlbyB0cmFuc2ZlcnMgKi8KKworLyoKKyAqIFVzZSBidXJzdCB3cml0ZXMgdG8gaW1wcm92ZSBtY2hfd3JpdGUgc3BlZWQgLSBWSk4gMDEvMTAvOTkKKyAqLwordW5zaWduZWQgc2hvcnQJU19saW5lYnVmZmVyWzgwMDBdOyAvKiA8Vk4+IGVub3VnaCBmb3IgMTYweDUwICovCit1bnNpZ25lZCBzaG9ydAlTX2JsYW5rYnVmZmVyWzI1Nl07IC8qIDxWTj4gbWF4IGxlbmd0aCBvZiBjb25zb2xlIGxpbmUgKi8KK3Vuc2lnbmVkIHNob3J0CSpTX2xpbmVidWZmZXJwb3MgPSBTX2xpbmVidWZmZXI7CitpbnQJCVNfaUJ1ZmZlclJvdzsKK2ludAkJU19pQnVmZmVyQ29sdW1uOworCisgICAgc3RhdGljIHZvaWQKK215Zmx1c2godm9pZCkKK3sKKyAgICBpZiAoU19saW5lYnVmZmVycG9zICE9IFNfbGluZWJ1ZmZlcikKKyAgICB7CisJX2Rvc21lbXB1dHcoU19saW5lYnVmZmVyLCAoU19saW5lYnVmZmVycG9zIC0gU19saW5lYnVmZmVyKSwKKwkJU191bFNjcmVlbkJhc2UKKwkJICAgICAgKyBTX2lCdWZmZXJSb3cgKiAoQ29sdW1ucyA8PCAxKSArIChTX2lCdWZmZXJDb2x1bW4gPDwgMSkpOworCVNfbGluZWJ1ZmZlcnBvcyA9IFNfbGluZWJ1ZmZlcjsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorbXlnb3RveHkoaW50IHgsIGludCB5KQoreworICAgIFNfaUN1cnJlbnRSb3cgPSB5IC0gMTsKKyAgICBTX2lDdXJyZW50Q29sdW1uID0geCAtIDE7Cit9CisKKy8qCisgKiBTZXQgdGhlIHN5c3RlbSBjdXJzb3IgdG8gb3VyIGN1cnNvciBwb3NpdGlvbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfc3lzX2N1cnNvcih2b2lkKQoreworICAgIGlmICh0ZXJtX2NvbnNvbGUgJiYgZnVsbF9zY3JlZW4pCisgICAgeworCW15Zmx1c2goKTsKKwlnb3RveHkoU19pQ3VycmVudENvbHVtbiArIDEsIFNfaUN1cnJlbnRSb3cgKyAxKTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorc2V0YmxhbmtidWZmZXIodW5zaWduZWQgc2hvcnQgdWlWYWx1ZSkKK3sKKyAgICBpbnQJCQkJaTsKKyAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQJb2xkdWlWYWx1ZSA9IDA7CisKKyAgICBpZiAob2xkdWlWYWx1ZSAhPSB1aVZhbHVlKQorICAgIHsKKwkvKiBMb2FkIGJsYW5rIGxpbmUgYnVmZmVyIHdpdGggc3BhY2VzICovCisJZm9yIChpID0gMDsgaSA8IENvbHVtbnM7ICsraSkKKwkgICAgU19ibGFua2J1ZmZlcltpXSA9IHVpVmFsdWU7CisJb2xkdWlWYWx1ZSA9IHVpVmFsdWU7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK215Y2xyZW9sKHZvaWQpCit7CisgICAgLyogQ2xlYXIgdG8gZW5kIG9mIGxpbmUgKi8KKyAgICBzZXRibGFua2J1ZmZlcihTX3VpQXR0cmlidXRlIHwgJyAnKTsKKyAgICBfZG9zbWVtcHV0dyhTX2JsYW5rYnVmZmVyLCBTX2lSaWdodCAtIFNfaUN1cnJlbnRDb2x1bW4sIFNfdWxTY3JlZW5CYXNlCisJCQkgKyAoU19pQ3VycmVudFJvdykgKiAoQ29sdW1ucyA8PCAxKQorCQkJICsgKFNfaUN1cnJlbnRDb2x1bW4gPDwgMSkpOworfQorCisgICAgc3RhdGljIHZvaWQKK215Y2xyc2NyKHZvaWQpCit7CisgICAgLyogQ2xlYXIgd2hvbGUgc2NyZWVuICovCisgICAgc2hvcnQJaUNvbHVtbjsKKyAgICBpbnQJCWVuZHBvaW50ID0gKFJvd3MgKiBDb2x1bW5zKSA8PCAxOworCisgICAgc2V0YmxhbmtidWZmZXIoU191aUF0dHJpYnV0ZSB8ICcgJyk7CisKKyAgICBmb3IgKGlDb2x1bW4gPSAwOyBpQ29sdW1uIDwgZW5kcG9pbnQ7IGlDb2x1bW4gKz0gKENvbHVtbnMgPDwgMSkpCisJX2Rvc21lbXB1dHcoU19ibGFua2J1ZmZlciwgQ29sdW1ucywgU191bFNjcmVlbkJhc2UgKyBpQ29sdW1uKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitteWRlbGxpbmUodm9pZCkKK3sKKyAgICBzaG9ydCBpUm93LCBpQ29sdW1uOworCisgICAgaUNvbHVtbiA9IChTX2lMZWZ0IC0gMSkgPDwgMTsKKworICAgIC8qIENvcHkgdGhlIGxpbmVzIHVuZGVybmVhdGggKi8KKyAgICBmb3IgKGlSb3cgPSBTX2lDdXJyZW50Um93OyBpUm93IDwgU19pQm90dG9tIC0gMTsgaVJvdysrKQorCW1vdmVkYXRhKFNfc2VsVmlkZW8sICgoKGlSb3cgKyAxKSAqIENvbHVtbnMpIDw8IDEpICsgaUNvbHVtbiwKKwkJU19zZWxWaWRlbywgKChpUm93ICogQ29sdW1ucykgPDwgMSkgKyBpQ29sdW1uLAorCQkoU19pUmlnaHQgLSBTX2lMZWZ0ICsgMSkgPDwgMSk7CisKKyAgICAvKiBDbGVhciB0aGUgbmV3IHJvdyAqLworICAgIHNldGJsYW5rYnVmZmVyKFNfdWlBdHRyaWJ1dGUgfCAnICcpOworCisgICAgX2Rvc21lbXB1dHcoU19ibGFua2J1ZmZlciwgKFNfaVJpZ2h0IC0gU19pTGVmdCkgKyAxLCBTX3VsU2NyZWVuQmFzZQorCQkJICsgKFNfaUJvdHRvbSAtIDEpICogKENvbHVtbnMgPDwgMSkgKyBpQ29sdW1uKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitteWluc2xpbmUodm9pZCkKK3sKKyAgICBzaG9ydCBpUm93LCBpQ29sdW1uOworCisgICAgaUNvbHVtbiA9IChTX2lMZWZ0IC0gMSkgPDwgMTsKKworICAgIC8qIENvcHkgdGhlIGxpbmVzIHVuZGVybmVhdGggKi8KKyAgICBmb3IgKGlSb3cgPSBTX2lCb3R0b20gLSAxOyBpUm93ID49IFNfaVRvcDsgaVJvdy0tKQorCW1vdmVkYXRhKFNfc2VsVmlkZW8sICgoKGlSb3cgLSAxKSAqIENvbHVtbnMpIDw8IDEpICsgaUNvbHVtbiwKKwkJU19zZWxWaWRlbywgKChpUm93ICogQ29sdW1ucykgPDwgMSkgKyBpQ29sdW1uLAorCQkoU19pUmlnaHQgLSBTX2lMZWZ0ICsgMSkgPDwgMSk7CisKKyAgICAvKiBDbGVhciB0aGUgbmV3IHJvdyAqLworICAgIHNldGJsYW5rYnVmZmVyKFNfdWlBdHRyaWJ1dGUgfCAnICcpOworCisgICAgX2Rvc21lbXB1dHcoU19ibGFua2J1ZmZlciwgKFNfaVJpZ2h0IC0gU19pTGVmdCkgKyAxLCBTX3VsU2NyZWVuQmFzZQorCQkJICsgKFNfaVRvcCAtIDEpICogKENvbHVtbnMgPDwgMSkgKyBpQ29sdW1uKTsKK30KKworLyoKKyAqIFNjcm9sbCB0aGUgc2NyZWVuIG9uZSBsaW5lIHVwLCBjbGVhciB0aGUgbGFzdCBsaW5lLgorICovCisgICAgc3RhdGljIHZvaWQKK215c2Nyb2xsKHZvaWQpCit7CisgICAgc2hvcnQJCWlSb3csIGlDb2x1bW47CisKKyAgICBpQ29sdW1uID0gKFNfaUxlZnQgLSAxKSA8PCAxOworCisgICAgLyogQ29weSB0aGUgc2NyZWVuICovCisgICAgZm9yIChpUm93ID0gU19pVG9wOyBpUm93IDwgU19pQm90dG9tOyBpUm93KyspCisJbW92ZWRhdGEoU19zZWxWaWRlbywgKChpUm93ICogQ29sdW1ucykgPDwgMSkgKyBpQ29sdW1uLAorCQlTX3NlbFZpZGVvLCAoKChpUm93IC0gMSkgKiBDb2x1bW5zKSA8PCAxKSArIGlDb2x1bW4sCisJCShTX2lSaWdodCAtIFNfaUxlZnQgKyAxKSA8PCAxKTsKKworICAgIC8qIENsZWFyIHRoZSBib3R0b20gcm93ICovCisgICAgc2V0YmxhbmtidWZmZXIoU191aUF0dHJpYnV0ZSB8ICcgJyk7CisKKyAgICBfZG9zbWVtcHV0dyhTX2JsYW5rYnVmZmVyLCAoU19pUmlnaHQgLSBTX2lMZWZ0KSArIDEsIFNfdWxTY3JlZW5CYXNlCisJCQkgKyAoU19pQm90dG9tIC0gMSkgKiAoQ29sdW1ucyA8PCAxKSArIGlDb2x1bW4pOworfQorCisgICAgc3RhdGljIGludAorbXlwdXRjaChpbnQgaUNoYXIpCit7CisgICAgdW5zaWduZWQgc2hvcnQgdWlWYWx1ZTsKKworICAgIGlmIChpQ2hhciA9PSAnXG4nKQorICAgIHsKKwlteWZsdXNoKCk7CisJaWYgKFNfaUN1cnJlbnRSb3cgPj0gU19pQm90dG9tIC0gU19pVG9wKQorCSAgICBteXNjcm9sbCgpOworCWVsc2UKKwl7CisJICAgIFNfaUN1cnJlbnRDb2x1bW4gPSBTX2lMZWZ0IC0gMTsKKwkgICAgU19pQ3VycmVudFJvdysrOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAoaUNoYXIgPT0gJ1xyJykKKyAgICB7CisJbXlmbHVzaCgpOworCVNfaUN1cnJlbnRDb2x1bW4gPSBTX2lMZWZ0IC0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAoaUNoYXIgPT0gJ1xiJykKKyAgICB7CisJbXlmbHVzaCgpOworCWlmIChTX2lDdXJyZW50Q29sdW1uID49IFNfaUxlZnQpCisJICAgIFNfaUN1cnJlbnRDb2x1bW4tLTsKKyAgICB9CisgICAgZWxzZSBpZiAoaUNoYXIgPT0gNykKKyAgICB7CisJc291bmQoNDQwKTsJLyogc2hvcnQgYmVlcCAqLworCWRlbGF5KDIwMCk7CisJbm9zb3VuZCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXVpVmFsdWUgPSBTX3VpQXR0cmlidXRlIHwgKHVuc2lnbmVkIGNoYXIpaUNoYXI7CisKKwkvKgorCSAqIE5vcm1hbCBjaGFyIC0gYXJlIHdlIHN0YXJ0aW5nIHRvIGJ1ZmZlcj8KKwkgKi8KKwlpZiAoU19saW5lYnVmZmVycG9zID09IFNfbGluZWJ1ZmZlcikKKwl7CisJICAgIFNfaUJ1ZmZlckNvbHVtbiA9IFNfaUN1cnJlbnRDb2x1bW47CisJICAgIFNfaUJ1ZmZlclJvdyA9IFNfaUN1cnJlbnRSb3c7CisJfQorCisJKlNfbGluZWJ1ZmZlcnBvcysrID0gdWlWYWx1ZTsKKworCVNfaUN1cnJlbnRDb2x1bW4rKzsKKwlpZiAoU19pQ3VycmVudENvbHVtbiA+PSBTX2lSaWdodCAmJiBTX2lDdXJyZW50Um93ID49IFNfaUJvdHRvbSAtIFNfaVRvcCkKKwl7CisJICAgIG15Zmx1c2goKTsKKwkgICAgbXlzY3JvbGwoKTsKKwkgICAgU19pQ3VycmVudENvbHVtbiA9IFNfaUxlZnQgLSAxOworCSAgICBTX2lDdXJyZW50Um93Kys7CisJfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCisgICAgc3RhdGljIHZvaWQKK215dGV4dGluaXQoc3RydWN0IHRleHRfaW5mbyAqcFRleHRpbmZvKQoreworICAgIFNfc2VsVmlkZW8gPSBfX2RwbWlfc2VnbWVudF90b19kZXNjcmlwdG9yKFNfdWxTY3JlZW5CYXNlID4+IDQpOworICAgIFNfdWlBdHRyaWJ1dGUgPSBwVGV4dGluZm8tPm5vcm1hdHRyIDw8IDg7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZ2V0X3NjcmVlbmJhc2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgdW5pb24gUkVHUwkgICAgcmVnczsKKworICAgIC8qIG9sZCBIZXJjdWxlcyBncmFmaWMgY2FyZCBoYXMgZGlmZmVyZW50IGJhc2UgYWRkcmVzcyAoTWFjZXdpY3opICovCisgICAgcmVncy5oLmFoID0gMHgwZjsKKyAgICAodm9pZClpbnQ4NigweDEwLCAmcmVncywgJnJlZ3MpOwkvKiBpbnQgMTAgMGYgKi8KKyAgICBpZiAocmVncy5oLmFsID09IDB4MDcpCQkvKiB2aWRlbyBtb2RlIDcgLS0gaGVyY3VsZXMgbW9ubyAqLworCVNfdWxTY3JlZW5CYXNlID0gMHhiMDAwMDsKKyAgICBlbHNlCisJU191bFNjcmVlbkJhc2UgPSAweGI4MDAwOworfQorCisgICAgc3RhdGljIHZvaWQKK215dGV4dGF0dHIoaW50IGlBdHRyaWJ1dGUpCit7CisgICAgU191aUF0dHJpYnV0ZSA9ICh1bnNpZ25lZCBzaG9ydClpQXR0cmlidXRlIDw8IDg7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorbXlub3JtdmlkZW8odm9pZCkKK3sKKyAgICBteXRleHRhdHRyKG9yaWdfYXR0cik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorbXl0ZXh0Y29sb3IoaW50IGlUZXh0Q29sb3IpCit7CisgICAgU191aUF0dHJpYnV0ZSA9ICh1bnNpZ25lZCBzaG9ydCkoKFNfdWlBdHRyaWJ1dGUgJiAweGYwMDApCisJCQkJCSAgIHwgKHVuc2lnbmVkIHNob3J0KWlUZXh0Q29sb3IgPDwgOCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorbXl0ZXh0YmFja2dyb3VuZChpbnQgaUJrZ0NvbG9yKQoreworICAgIFNfdWlBdHRyaWJ1dGUgPSAodW5zaWduZWQgc2hvcnQpKChTX3VpQXR0cmlidXRlICYgMHgwZjAwKQorCQkJCQkgfCAodW5zaWduZWQgc2hvcnQpKGlCa2dDb2xvciA8PCAxMikpOworfQorLyoKKyAqIEdldGRpZ2l0czogR2V0IGEgbnVtYmVyIGZyb20gYSBzdHJpbmcgYW5kIHNraXAgb3ZlciBpdC4KKyAqIE5vdGU6IHRoZSBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gYSBjaGFyX3UgcG9pbnRlciEKKyAqLworCisgICAgc3RhdGljIGxvbmcKK215Z2V0ZGlnaXRzKHBwKQorICAgIGNoYXJfdSAqKnBwOworeworICAgIGNoYXJfdQkqcDsKKyAgICBsb25nCXJldHZhbCA9IDA7CisKKyAgICBwID0gKnBwOworICAgIGlmICgqcCA9PSAnLScpCQkvKiBza2lwIG5lZ2F0aXZlIHNpZ24gKi8KKwkrK3A7CisgICAgd2hpbGUgKFZJTV9JU0RJR0lUKCpwKSkKKyAgICB7CisJcmV0dmFsID0gKHJldHZhbCAqIDEwKSArICgqcCAtICcwJyk7CisJKytwOworICAgIH0KKyAgICBpZiAoKipwcCA9PSAnLScpCQkvKiBwcm9jZXNzIG5lZ2F0aXZlIHNpZ24gKi8KKwlyZXR2YWwgPSAtcmV0dmFsOworCisgICAgKnBwID0gcDsKKyAgICByZXR1cm4gcmV0dmFsOworfQorI2Vsc2UKKyMgZGVmaW5lIG15Z290b3h5IGdvdG94eQorIyBkZWZpbmUgbXlwdXRjaCBwdXRjaAorIyBkZWZpbmUgbXlzY3JvbGwgc2Nyb2xsCisjIGRlZmluZSBteW5vcm12aWRlbyBub3JtdmlkZW8KKyMgZGVmaW5lIG15dGV4dGF0dHIgdGV4dGF0dHIKKyMgZGVmaW5lIG15dGV4dGNvbG9yIHRleHRjb2xvcgorIyBkZWZpbmUgbXl0ZXh0YmFja2dyb3VuZCB0ZXh0YmFja2dyb3VuZAorIyBkZWZpbmUgbXlnZXRkaWdpdHMgZ2V0ZGlnaXRzCisjIGRlZmluZSBteWNscmVvbCBjbHJlb2wKKyMgZGVmaW5lIG15Y2xyc2NyIGNscnNjcgorIyBkZWZpbmUgbXlpbnNsaW5lIGluc2xpbmUKKyMgZGVmaW5lIG15ZGVsbGluZSBkZWxsaW5lCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdAoreworICAgIGNoYXJfdQlzY2FuY29kZTsKKyAgICBjaGFyX3UJbWV0YWtleTsKK30gYWx0a2V5X3RhYmxlW10gPQoreworICAgIHsweDFlLCAweGUxfSwgLyogYSAqLworICAgIHsweDMwLCAweGUyfSwgLyogYiAqLworICAgIHsweDJlLCAweGUzfSwgLyogYyAqLworICAgIHsweDIwLCAweGU0fSwgLyogZCAqLworICAgIHsweDEyLCAweGU1fSwgLyogZSAqLworICAgIHsweDIxLCAweGU2fSwgLyogZiAqLworICAgIHsweDIyLCAweGU3fSwgLyogZyAqLworICAgIHsweDIzLCAweGU4fSwgLyogaCAqLworICAgIHsweDE3LCAweGU5fSwgLyogaSAqLworICAgIHsweDI0LCAweGVhfSwgLyogaiAqLworICAgIHsweDI1LCAweGVifSwgLyogayAqLworICAgIHsweDI2LCAweGVjfSwgLyogbCAqLworICAgIHsweDMyLCAweGVkfSwgLyogbSAqLworICAgIHsweDMxLCAweGVlfSwgLyogbiAqLworICAgIHsweDE4LCAweGVmfSwgLyogbyAqLworICAgIHsweDE5LCAweGYwfSwgLyogcCAqLworICAgIHsweDEwLCAweGYxfSwgLyogcSAqLworICAgIHsweDEzLCAweGYyfSwgLyogciAqLworICAgIHsweDFmLCAweGYzfSwgLyogcyAqLworICAgIHsweDE0LCAweGY0fSwgLyogdCAqLworICAgIHsweDE2LCAweGY1fSwgLyogdSAqLworICAgIHsweDJmLCAweGY2fSwgLyogdiAqLworICAgIHsweDExLCAweGY3fSwgLyogdyAqLworICAgIHsweDJkLCAweGY4fSwgLyogeCAqLworICAgIHsweDE1LCAweGY5fSwgLyogeSAqLworICAgIHsweDJjLCAweGZhfSwgLyogeiAqLworICAgIHsweDc4LCAweGIxfSwgLyogMSAqLworICAgIHsweDc5LCAweGIyfSwgLyogMiAqLworICAgIHsweDdhLCAweGIzfSwgLyogMyAqLworICAgIHsweDdiLCAweGI0fSwgLyogNCAqLworICAgIHsweDdjLCAweGI1fSwgLyogNSAqLworICAgIHsweDdkLCAweGI2fSwgLyogNiAqLworICAgIHsweDdlLCAweGI3fSwgLyogNyAqLworICAgIHsweDdmLCAweGI4fSwgLyogOCAqLworICAgIHsweDgwLCAweGI5fSwgLyogOSAqLworICAgIHsweDgxLCAweGIwfSwgLyogMCAqLworfTsKKworLyoKKyAqIFRyYW5zbGF0ZSBleHRlbmRlZCBrZXljb2RlcyBpbnRvIG1ldGEtY2hhcnMgd2hlcmUgYXBwbGljYWJsZQorICovCisgICAgc3RhdGljIGludAordHJhbnNsYXRlX2FsdGtleXMoaW50IHJhd2tleSkKK3sKKyAgICBpbnQgaSwgYzsKKworICAgIGlmICgocmF3a2V5ICYgMHhmZikgPT0gMCkKKyAgICB7CisJYyA9IChyYXdrZXkgPj4gOCk7CisJZm9yIChpID0gc2l6ZW9mKGFsdGtleV90YWJsZSkgLyBzaXplb2YoYWx0a2V5X3RhYmxlWzBdKTsgLS1pID49IDA7ICkKKwl7CisJICAgIGlmIChjID09IGFsdGtleV90YWJsZVtpXS5zY2FuY29kZSkKKwkJcmV0dXJuIChpbnQpYWx0a2V5X3RhYmxlW2ldLm1ldGFrZXk7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmF3a2V5OworfQorCisvKgorICogU2V0IG5vcm1hbCBmZy9iZyBjb2xvciwgYmFzZWQgb24gVF9NRS4gIENhbGxlZCB3aGVtIHRfbWUgaGFzIGJlZW4gc2V0LgorICovCisgICAgdm9pZAorbWNoX3NldF9ub3JtYWxfY29sb3JzKCkKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQluOworCisgICAgY3Rlcm1fbm9ybWFsX2ZnX2NvbG9yID0gKG9yaWdfYXR0ciAmIDB4ZikgKyAxOworICAgIGN0ZXJtX25vcm1hbF9iZ19jb2xvciA9ICgob3JpZ19hdHRyID4+IDQpICYgMHhmKSArIDE7CisgICAgaWYgKFRfTUVbMF0gPT0gRVNDICYmIFRfTUVbMV0gPT0gJ3wnKQorICAgIHsKKwlwID0gVF9NRSArIDI7CisJbiA9IGdldGRpZ2l0cygmcCk7CisJaWYgKCpwID09ICdtJyAmJiBuID4gMCkKKwl7CisJICAgIGN0ZXJtX25vcm1hbF9mZ19jb2xvciA9IChuICYgMHhmKSArIDE7CisJICAgIGN0ZXJtX25vcm1hbF9iZ19jb2xvciA9ICgobiA+PiA0KSAmIDB4ZikgKyAxOworCX0KKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKE1DSF9DVVJTT1JfU0hBUEUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogU2F2ZS9yZXN0b3JlIHRoZSBzaGFwZSBvZiB0aGUgY3Vyc29yLgorICogY2FsbCB3aXRoIEZBTFNFIHRvIHNhdmUsIFRSVUUgdG8gcmVzdG9yZQorICovCisgICAgc3RhdGljIHZvaWQKK21jaF9yZXN0b3JlX2N1cnNvcl9zaGFwZShpbnQgcmVzdG9yZSkKK3sKKyAgICBzdGF0aWMgdW5pb24gUkVHUwkgICAgcmVnczsKKyAgICBzdGF0aWMgaW50CQkgICAgc2F2ZWQgPSBGQUxTRTsKKworICAgIGlmIChyZXN0b3JlKQorICAgIHsKKwlpZiAoc2F2ZWQpCisJICAgIHJlZ3MuaC5haCA9IDB4MDE7CSAgICAvKlNldCBDdXJzb3IqLworCWVsc2UKKwkgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXJlZ3MuaC5haCA9IDB4MDM7CSAgICAvKkdldCBDdXJzb3IqLworCXJlZ3MuaC5iaCA9IDB4MDA7CSAgICAvKlBhZ2UgKi8KKwlzYXZlZCA9IFRSVUU7CisgICAgfQorCisgICAgKHZvaWQpaW50ODYoMHgxMCwgJnJlZ3MsICZyZWdzKTsKK30KKworLyoKKyAqIFNldCB0aGUgc2hhcGUgb2YgdGhlIGN1cnNvci4KKyAqICd0aGlja25lc3MnIGNhbiBiZSBmcm9tIDAgKHRoaW4pIHRvIDcgKGJsb2NrKQorICovCisgICAgc3RhdGljIHZvaWQKK21jaF9zZXRfY3Vyc29yX3NoYXBlKGludCB0aGlja25lc3MpCit7CisgICAgdW5pb24gUkVHUwkgICAgcmVnczsKKworICAgIHJlZ3MuaC5jaCA9IDcgLSB0aGlja25lc3M7CSAgICAvKlN0YXJ0aW5nIExpbmUqLworICAgIHJlZ3MuaC5jbCA9IDc7CQkgICAgLypFbmRpbmcgTGluZSovCisgICAgcmVncy5oLmFoID0gMHgwMTsJCSAgICAvKlNldCBDdXJzb3IqLworICAgICh2b2lkKWludDg2KDB4MTAsICZyZWdzLCAmcmVncyk7Cit9CisKKyAgICB2b2lkCittY2hfdXBkYXRlX2N1cnNvcih2b2lkKQoreworICAgIGludAkJaWR4OworICAgIGludAkJdGhpY2tuZXNzOworCisgICAgLyoKKyAgICAgKiBIb3cgdGhlIGN1cnNvciBpcyBkcmF3biBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IG1vZGUuCisgICAgICovCisgICAgaWR4ID0gZ2V0X3NoYXBlX2lkeChGQUxTRSk7CisKKyAgICBpZiAoc2hhcGVfdGFibGVbaWR4XS5zaGFwZSA9PSBTSEFQRV9CTE9DSykKKwl0aGlja25lc3MgPSA3OworICAgIGVsc2UKKwl0aGlja25lc3MgPSAoNyAqIHNoYXBlX3RhYmxlW2lkeF0ucGVyY2VudGFnZSArIDkwKSAvIDEwMDsKKyAgICBtY2hfc2V0X2N1cnNvcl9zaGFwZSh0aGlja25lc3MpOworfQorI2VuZGlmCisKKy8qCisgKiBSZXR1cm4gYW1vdW50IG9mIG1lbW9yeSBjdXJyZW50bHkgYXZhaWxhYmxlLgorICovCisgICAgbG9uZ191CittY2hfYXZhaWxfbWVtKGludCBzcGVjaWFsKQoreworI2lmZGVmIERKR1BQCisgICAgcmV0dXJuIF9nbzMyX2RwbWlfcmVtYWluaW5nX3ZpcnR1YWxfbWVtb3J5KCk7CisjZWxzZQorICAgIHJldHVybiBjb3JlbGVmdCgpOworI2VuZGlmCit9CisKKyNpZmRlZiBGRUFUX01PVVNFCisKKy8qCisgKiBTZXQgYXJlYSB3aGVyZSBtb3VzZSBjYW4gYmUgbW92ZWQgdG86IFRoZSB3aG9sZSBzY3JlZW4uCisgKiBSb3dzIGFuZCBDb2x1bW5zIG11c3QgYmUgdmFsaWQgd2hlbiBjYWxsaW5nIQorICovCisgICAgc3RhdGljIHZvaWQKK21vdXNlX2FyZWEodm9pZCkKK3sKKyAgICB1bmlvbiBSRUdTCSAgICByZWdzOworCisgICAgaWYgKG1vdXNlX2F2YWlsKQorICAgIHsKKwlyZWdzLnguY3ggPSAwOwkvKiBtb3VzZSB2aXNpYmxlIGJldHdlZW4gY3ggYW5kIGR4ICovCisJcmVncy54LmR4ID0gQ29sdW1ucyAqIG1vdXNlX3hfZGl2IC0gMTsKKwlyZWdzLnguYXggPSA3OworCSh2b2lkKWludDg2KDB4MzMsICZyZWdzLCAmcmVncyk7CisKKwlyZWdzLnguY3ggPSAwOwkvKiBtb3VzZSB2aXNpYmxlIGJldHdlZW4gY3ggYW5kIGR4ICovCisJcmVncy54LmR4ID0gUm93cyAqIG1vdXNlX3lfZGl2IC0gMTsKKwlyZWdzLnguYXggPSA4OworCSh2b2lkKWludDg2KDB4MzMsICZyZWdzLCAmcmVncyk7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK3Nob3dfbW91c2UoaW50IG9uKQoreworICAgIHN0YXRpYyBpbnQJICAgIHdhc19vbiA9IEZBTFNFOworICAgIHVuaW9uIFJFR1MJICAgIHJlZ3M7CisKKyAgICBpZiAobW91c2VfYXZhaWwpCisgICAgeworCWlmICghbW91c2VfYWN0aXZlIHx8IG1vdXNlX2hpZGRlbikKKwkgICAgb24gPSBGQUxTRTsKKwkvKgorCSAqIENhcmVmdWw6IEVhY2ggc3dpdGNoIG9uIG11c3QgYmUgY29tcGVuc2F0ZWQgYnkgZXhhY3RseSBvbmUgc3dpdGNoCisJICogb2ZmCisJICovCisJaWYgKChvbiAmJiAhd2FzX29uKSB8fCAoIW9uICYmIHdhc19vbikpCisJeworCSAgICB3YXNfb24gPSBvbjsKKwkgICAgcmVncy54LmF4ID0gb24gPyAxIDogMjsKKwkgICAgaW50ODYoMHgzMywgJnJlZ3MsICZyZWdzKTsJLyogc2hvdyBtb3VzZSAqLworCSAgICBpZiAob24pCisJCW1vdXNlX2FyZWEoKTsKKwl9CisgICAgfQorfQorCisjZW5kaWYKKworLyoKKyAqIFZlcnNpb24gb2Yga2JoaXQoKSBhbmQgZ2V0Y2goKSB0aGF0IHVzZSBkaXJlY3QgY29uc29sZSBJL08uCisgKiBUaGlzIGF2b2lkcyB0cm91YmxlIHdpdGggQ1RSTC1QIGFuZCB0aGUgbGlrZSwgYW5kIHNob3VsZCB3b3JrIG92ZXIgYSB0ZWxuZXQKKyAqIGNvbm5lY3Rpb24gKGl0IHdvcmtzIGZvciBYdmkpLgorICovCisKK3N0YXRpYyBpbnQgY29uc19rZXkgPSAtMTsKKworLyoKKyAqIFRyeSB0byBnZXQgb25lIGNoYXJhY3RlciBkaXJlY3RseSBmcm9tIHRoZSBjb25zb2xlLgorICogSWYgdGhlcmUgaXMgYSBrZXksIGl0IGlzIHN0b3JlZCBpbiBjb25zX2tleS4KKyAqIE9ubHkgY2FsbCB3aGVuIGNvbnNfa2V5IGlzIC0xIQorICovCisgICAgc3RhdGljIHZvaWQKK2NvbnNfZ2V0a2V5KHZvaWQpCit7CisgICAgdW5pb24gUkVHUyByZWdzOworCisgICAgLyogY2FsbCBET1MgZnVuY3Rpb24gNjogRGlyZWN0IGNvbnNvbGUgSS9PICovCisgICAgcmVncy5oLmFoID0gMHgwNjsKKyAgICByZWdzLmguZGwgPSAweGZmOworICAgICh2b2lkKWludGRvcygmcmVncywgJnJlZ3MpOworICAgIGlmICgocmVncy54LmZsYWdzICYgMHg0MCkgPT0gMCkJLyogemVybyBmbGFnIG5vdCBzZXQ/ICovCisJY29uc19rZXkgPSAocmVncy5oLmFsICYgMHhmZik7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUuCisgKi8KKyAgICBzdGF0aWMgaW50Citjb25zX2tiaGl0KHZvaWQpCit7CisgICAgaWYgKGNvbnNfa2V5IDwgMCkKKwljb25zX2dldGtleSgpOworICAgIHJldHVybiAoY29uc19rZXkgPj0gMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29uc29sZS4KKyAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHZpbV9rYmhpdCgpIHJldHVybnMgVFJVRS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NvbnNfZ2V0Y2godm9pZCkKK3sKKyAgICBpbnQJICAgIGMgPSAtMTsKKworICAgIGlmIChjb25zX2tleSA8IDApCisJY29uc19nZXRrZXkoKTsKKyAgICBjID0gY29uc19rZXk7CisgICAgY29uc19rZXkgPSAtMTsKKyAgICByZXR1cm4gYzsKK30KKworCisjaWZkZWYgREpHUFAKKy8qCisgKiBESkdQUCBwcm92aWRlcyBhIGtiaGl0KCkgZnVuY3Rpb24gdGhhdCBnb2VzIHRvIHRoZSBCSU9TIGluc3RlYWQgb2YgRE9TLgorICogVGhpcyBkb2Vzbid0IHdvcmsgZm9yIHRlcm1pbmFscyBjb25uZWN0ZWQgdG8gYSBzZXJpYWwgcG9ydC4KKyAqIFJlZGVmaW5lIGtiaGl0KCkgaGVyZSB0byBtYWtlIGl0IHdvcmsuCisgKi8KKyAgICBzdGF0aWMgaW50Cit2aW1fa2JoaXQodm9pZCkKK3sKKyAgICB1bmlvbiBSRUdTIHJlZ3M7CisKKyAgICByZWdzLmguYWggPSAweDBiOworICAgICh2b2lkKWludGRvcygmcmVncywgJnJlZ3MpOworICAgIHJldHVybiByZWdzLmguYWw7Cit9CisKKyNpZmRlZiBrYmhpdAorIyB1bmRlZiBrYmhpdAkgICAgLyogbWlnaHQgaGF2ZSBiZWVuIGRlZmluZWQgaW4gY29uaW8uaCAqLworI2VuZGlmCisjZGVmaW5lIGtiaGl0KCkJdmltX2tiaGl0KCkKKworI2VuZGlmCisKKy8qCisgKiBTaW11bGF0ZSBXYWl0Rm9yQ2hhcigpIGJ5IHNsb3dseSBwb2xsaW5nIHdpdGggYmlvc2tleSgxKSBvciBrYmhpdCgpLgorICoKKyAqIElmIFZpbSBzaG91bGQgd29yayBvdmVyIHRoZSBzZXJpYWwgbGluZSBhZnRlciBhICdjdHR5IGNvbTEnIHdlIG11c3QgdXNlCisgKiBrYmhpdCgpIGFuZCBnZXRjaCgpLiAoancpCisgKiBVc3VhbGx5IGtiaGl0KCkgaXMgbm90IHVzZWQsIGJlY2F1c2UgdGhlbiBDVFJMLUMgYW5kIENUUkwtUAorICogd2lsbCBiZSBjYXRjaGVkIGJ5IERPUyAobW9vbCkuCisgKgorICogcmV0dXJuIFRSVUUgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlLCBGQUxTRSBvdGhlcndpc2UKKyAqLworCisjZGVmaW5lIEZPUkVWRVIgMTk5OTk5OTk5OUwKKworICAgIHN0YXRpYyAgaW50CitXYWl0Rm9yQ2hhcihsb25nIG1zZWMpCit7CisgICAgdW5pb24gUkVHUwlyZWdzOworICAgIGxvbmcJc3RhcnR0aW1lID0gMDsKKyAgICBpbnQJCXgsIHk7CisKKyAgICBpZiAobXNlYyAhPSAwKQorCXN0YXJ0dGltZSA9IGJpb3N0aW1lKDAsIDBMKTsKKworICAgIGZvciAoOzspCisgICAgeworI2lmZGVmIEZFQVRfTU9VU0UKKwlsb25nCQljbGlja3RpbWU7CisJc3RhdGljIGludAlvbGRfc3RhdHVzID0gMDsKKworCWlmIChtb3VzZV9hdmFpbCAmJiBtb3VzZV9hY3RpdmUgJiYgbW91c2VfY2xpY2sgPCAwKQorCXsKKwkgICAgcmVncy54LmF4ID0gMzsKKwkgICAgaW50ODYoMHgzMywgJnJlZ3MsICZyZWdzKTsJICAgIC8qIGNoZWNrIG1vdXNlIHN0YXR1cyAqLworCQkvKiBvbmx5IHJlY29nbml6ZSBidXR0b24tZG93biBhbmQgYnV0dG9uLXVwIGV2ZW50ICovCisJICAgIHggPSByZWdzLnguY3ggLyBtb3VzZV94X2RpdjsKKwkgICAgeSA9IHJlZ3MueC5keCAvIG1vdXNlX3lfZGl2OworCSAgICBpZiAoKG9sZF9zdGF0dXMgPT0gMCkgIT0gKHJlZ3MueC5ieCA9PSAwKSkKKwkgICAgeworCQlpZiAob2xkX3N0YXR1cykJLyogYnV0dG9uIHVwICovCisJCSAgICBtb3VzZV9jbGljayA9IE1PVVNFX1JFTEVBU0U7CisJCWVsc2UJCQkvKiBidXR0b24gZG93biAqLworCQl7CisJCSAgICAvKgorCQkgICAgICogVHJhbnNsYXRlIE1TRE9TIG1vdXNlIGV2ZW50cyB0byBWaW0gbW91c2UgZXZlbnRzLgorCQkgICAgICogVE9ETzogc2hvdWxkIGhhbmRsZSBtaWRkbGUgbW91c2UgYnV0dG9uLCBieSBwcmVzc2luZworCQkgICAgICogbGVmdCBhbmQgcmlnaHQgYXQgdGhlIHNhbWUgdGltZS4KKwkJICAgICAqLworCQkgICAgaWYgKHJlZ3MueC5ieCAmIE1TRE9TX01PVVNFX0xFRlQpCisJCQltb3VzZV9jbGljayA9IE1PVVNFX0xFRlQ7CisJCSAgICBlbHNlIGlmIChyZWdzLnguYnggJiBNU0RPU19NT1VTRV9SSUdIVCkKKwkJCW1vdXNlX2NsaWNrID0gTU9VU0VfUklHSFQ7CisJCSAgICBlbHNlIGlmIChyZWdzLnguYnggJiBNU0RPU19NT1VTRV9NSURETEUpCisJCQltb3VzZV9jbGljayA9IE1PVVNFX01JRERMRTsKKworCQkgICAgLyoKKwkJICAgICAqIEZpbmQgb3V0IGlmIHRoaXMgaXMgYSBtdWx0aS1jbGljaworCQkgICAgICovCisJCSAgICBjbGlja3RpbWUgPSBiaW9zdGltZSgwLCAwTCk7CisJCSAgICBpZiAobW91c2VfY2xpY2tfeCA9PSB4ICYmIG1vdXNlX2NsaWNrX3kgPT0geQorCQkJICAgICYmIG1vdXNlX3RvcGxpbmUgPT0gY3Vyd2luLT53X3RvcGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkJCSAgICAmJiBtb3VzZV90b3BmaWxsID09IGN1cndpbi0+d190b3BmaWxsCisjZW5kaWYKKwkJCSAgICAmJiBtb3VzZV9jbGlja19jb3VudCAhPSA0CisJCQkgICAgJiYgbW91c2VfY2xpY2sgPT0gbW91c2VfbGFzdF9jbGljaworCQkJICAgICYmIGNsaWNrdGltZSA8IG1vdXNlX2NsaWNrX3RpbWUKKwkJCQkJCQkrIHBfbW91c2V0IC8gQklPU1RJQ0spCisJCQkrK21vdXNlX2NsaWNrX2NvdW50OworCQkgICAgZWxzZQorCQkJbW91c2VfY2xpY2tfY291bnQgPSAxOworCQkgICAgbW91c2VfY2xpY2tfdGltZSA9IGNsaWNrdGltZTsKKwkJICAgIG1vdXNlX2xhc3RfY2xpY2sgPSBtb3VzZV9jbGljazsKKwkJICAgIG1vdXNlX2NsaWNrX3ggPSB4OworCQkgICAgbW91c2VfY2xpY2tfeSA9IHk7CisJCSAgICBtb3VzZV90b3BsaW5lID0gY3Vyd2luLT53X3RvcGxpbmU7CisjaWZkZWYgRkVBVF9ESUZGCisJCSAgICBtb3VzZV90b3BmaWxsID0gY3Vyd2luLT53X3RvcGZpbGw7CisjZW5kaWYKKwkJICAgIFNFVF9OVU1fTU9VU0VfQ0xJQ0tTKG1vdXNlX2NsaWNrLCBtb3VzZV9jbGlja19jb3VudCk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIGlmIChvbGRfc3RhdHVzICYmICh4ICE9IG1vdXNlX3ggfHwgeSAhPSBtb3VzZV95KSkKKwkJbW91c2VfY2xpY2sgPSBNT1VTRV9EUkFHOworCSAgICBvbGRfc3RhdHVzID0gcmVncy54LmJ4OworCSAgICBpZiAobW91c2VfaGlkZGVuICYmIG1vdXNlX3ggPj0gMCAmJiAobW91c2VfeCAhPSB4IHx8IG1vdXNlX3kgIT0geSkpCisJICAgIHsKKwkJbW91c2VfaGlkZGVuID0gRkFMU0U7CisJCXNob3dfbW91c2UoVFJVRSk7CisJICAgIH0KKwkgICAgbW91c2VfeCA9IHg7CisJICAgIG1vdXNlX3kgPSB5OworCX0KKyNlbmRpZgorCisJaWYgKChwX2NvbnNrID8gY29uc19rYmhpdCgpCisJCQkJIDogcF9iaW9zayA/IGJpb3NrZXkoYmlvc2tleV9yZWFkeSkgOiBrYmhpdCgpKQorCQl8fCBjYnJrX3ByZXNzZWQKKyNpZmRlZiBGRUFUX01PVVNFCisJCQkJCQkgICAgfHwgbW91c2VfY2xpY2sgPj0gMAorI2VuZGlmCisJCSkKKwkgICAgcmV0dXJuIFRSVUU7CisJLyoKKwkgKiBVc2UgYmlvc3RpbWUoKSB0byB3YWl0IHVudGlsIG91ciB0aW1lIGlzIGRvbmUuCisJICogV2UgYnVzeS13YWl0IGhlcmUuICBVbmZvcnR1bmF0ZWx5LCBkZWxheSgpIGFuZCB1c2xlZXAoKSBoYXZlIGJlZW4KKwkgKiByZXBvcnRlZCB0byBnaXZlIHByb2JsZW1zIHdpdGggdGhlIG9yaWdpbmFsIFdpbmRvd3MgOTUuICBUaGlzIGlzCisJICogZml4ZWQgaW4gc2VydmljZSBwYWNrIDEsIGJ1dCBub3QgZXZlcnlib2R5IGluc3RhbGxlZCB0aGF0LgorCSAqIFRoZSBESkdQUCBpbXBsZW1lbnRhdGlvbiBvZiB1c2xlZXAoKSB1c2VzIGEgYnVzeS13YWl0IGxvb3AgdG9vLgorCSAqLworCWlmIChtc2VjID09IDAgfHwgKG1zZWMgIT0gRk9SRVZFUgorCQkJICAgICYmIGJpb3N0aW1lKDAsIDBMKSA+IHN0YXJ0dGltZSArIG1zZWMgLyBCSU9TVElDSykpCisJICAgIGJyZWFrOworCisjaWZkZWYgREpHUFAKKwkvKiBZaWVsZCB0aGUgQ1BVIHRvIHRoZSBuZXh0IHByb2Nlc3MuICovCisJX19kcG1pX3lpZWxkKCk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogZG9uJ3QgZG8gYW55dGhpbmcgZm9yIGFib3V0ICJtc2VjIiBtc2VjCisgKi8KKyAgICB2b2lkCittY2hfZGVsYXkoCisgICAgbG9uZwltc2VjLAorICAgIGludAkJaWdub3JlaW5wdXQpCit7CisgICAgbG9uZwlzdGFydHRpbWU7CisKKyAgICBpZiAoaWdub3JlaW5wdXQpCisgICAgeworCS8qCisJICogV2UgYnVzeS13YWl0IGhlcmUuICBVbmZvcnR1bmF0ZWx5LCBkZWxheSgpIGFuZCB1c2xlZXAoKSBoYXZlIGJlZW4KKwkgKiByZXBvcnRlZCB0byBnaXZlIHByb2JsZW1zIHdpdGggdGhlIG9yaWdpbmFsIFdpbmRvd3MgOTUuICBUaGlzIGlzCisJICogZml4ZWQgaW4gc2VydmljZSBwYWNrIDEsIGJ1dCBub3QgZXZlcnlib2R5IGluc3RhbGxlZCB0aGF0LgorCSAqLworCXN0YXJ0dGltZSA9IGJpb3N0aW1lKDAsIDBMKTsKKwl3aGlsZSAoYmlvc3RpbWUoMCwgMEwpIDwgc3RhcnR0aW1lICsgbXNlYyAvIEJJT1NUSUNLKQorCSAgICA7CisgICAgfQorICAgIGVsc2UKKwlXYWl0Rm9yQ2hhcihtc2VjKTsKK30KKworLyoKKyAqIG1jaF93cml0ZSgpOiB3cml0ZSB0aGUgb3V0cHV0IGJ1ZmZlciB0byB0aGUgc2NyZWVuCisgKi8KKyAgICB2b2lkCittY2hfd3JpdGUoCisgICAgY2hhcl91CSpzLAorICAgIGludAkJbGVuKQoreworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCXJvdywgY29sOworCisgICAgaWYgKHRlcm1fY29uc29sZSAmJiBmdWxsX3NjcmVlbikKKwl3aGlsZSAobGVuLS0pCisJeworCSAgICAvKiB0cmFuc2xhdGUgRVNDIHwgc2VxdWVuY2VzIGludG8gYmlvcyBjYWxscyAqLworCSAgICBpZiAocF93ZCkJICAgIC8qIHRlc3Rpbmc6IHdhaXQgYSBiaXQgZm9yIGVhY2ggY2hhciAqLworCQlXYWl0Rm9yQ2hhcihwX3dkKTsKKworCSAgICBpZiAoc1swXSA9PSAnXG4nKQorI2lmZGVmIERKR1BQCisJICAgIHsKKwkJbXlmbHVzaCgpOworCQlTX2lDdXJyZW50Q29sdW1uID0gU19pTGVmdCAtIDE7CisJICAgIH0KKyNlbHNlCisJCW15cHV0Y2goJ1xyJyk7CisjZW5kaWYKKwkgICAgZWxzZSBpZiAoc1swXSA9PSBFU0MgJiYgbGVuID4gMSAmJiBzWzFdID09ICd8JykKKwkgICAgeworCQlzd2l0Y2ggKHNbMl0pCisJCXsKKyNpZmRlZiBESkdQUAorCQljYXNlICdCJzogICBTY3JlZW5WaXN1YWxCZWxsKCk7CisJCQkgICAgZ290byBnb3QzOworI2VuZGlmCisJCWNhc2UgJ0onOgorI2lmZGVmIERKR1BQCisJCQkgICAgbXlmbHVzaCgpOworI2VuZGlmCisJCQkgICAgbXljbHJzY3IoKTsKKwkJCSAgICBnb3RvIGdvdDM7CisKKwkJY2FzZSAnSyc6CisjaWZkZWYgREpHUFAKKwkJCSAgICBteWZsdXNoKCk7CisjZW5kaWYKKwkJCSAgICBteWNscmVvbCgpOworCQkJICAgIGdvdG8gZ290MzsKKworCQljYXNlICdMJzoKKyNpZmRlZiBESkdQUAorCQkJICAgIG15Zmx1c2goKTsKKyNlbmRpZgorCQkJICAgIG15aW5zbGluZSgpOworCQkJICAgIGdvdG8gZ290MzsKKworCQljYXNlICdNJzoKKyNpZmRlZiBESkdQUAorCQkJICAgIG15Zmx1c2goKTsKKyNlbmRpZgorCQkJICAgIG15ZGVsbGluZSgpOworZ290MzoJCQkgICAgcyArPSAzOworCQkJICAgIGxlbiAtPSAyOworCQkJICAgIGNvbnRpbnVlOworCisJCWNhc2UgJzAnOgorCQljYXNlICcxJzoKKwkJY2FzZSAnMic6CisJCWNhc2UgJzMnOgorCQljYXNlICc0JzoKKwkJY2FzZSAnNSc6CisJCWNhc2UgJzYnOgorCQljYXNlICc3JzoKKwkJY2FzZSAnOCc6CisJCWNhc2UgJzknOiAgIHAgPSBzICsgMjsKKwkJCSAgICByb3cgPSBteWdldGRpZ2l0cygmcCk7ICAgIC8qIG5vIGNoZWNrIGZvciBsZW5ndGghICovCisJCQkgICAgaWYgKHAgPiBzICsgbGVuKQorCQkJCWJyZWFrOworCQkJICAgIGlmICgqcCA9PSAnOycpCisJCQkgICAgeworCQkJCSsrcDsKKwkJCQljb2wgPSBteWdldGRpZ2l0cygmcCk7IC8qIG5vIGNoZWNrIGZvciBsZW5ndGghICovCisJCQkJaWYgKHAgPiBzICsgbGVuKQorCQkJCSAgICBicmVhazsKKwkJCQlpZiAoKnAgPT0gJ0gnIHx8ICpwID09ICdyJyB8fCAqcCA9PSAnVicpCisJCQkJeworI2lmZGVmIERKR1BQCisJCQkJICAgIG15Zmx1c2goKTsKKyNlbmRpZgorCQkJCSAgICBpZiAoKnAgPT0gJ0gnKSAgLyogc2V0IGN1cnNvciBwb3NpdGlvbiAqLworCQkJCQlteWdvdG94eShjb2wsIHJvdyk7CisJCQkJICAgIGVsc2UgaWYgKCpwID09ICdWJykKKwkJCQkJbXl3aW5kb3cocm93LCBTX2lUb3AsIGNvbCwgU19pQm90dG9tKTsKKwkJCQkgICAgZWxzZQkgICAgLyogc2V0IHNjcm9sbCByZWdpb24gICovCisJCQkJCW15d2luZG93KFNfaUxlZnQsIHJvdywgU19pUmlnaHQsIGNvbCk7CisJCQkJICAgIGxlbiAtPSBwIC0gczsKKwkJCQkgICAgcyA9IHAgKyAxOworCQkJCSAgICBjb250aW51ZTsKKwkJCQl9CisJCQkgICAgfQorCQkJICAgIGVsc2UgaWYgKCpwID09ICdtJyB8fCAqcCA9PSAnZicgfHwgKnAgPT0gJ2InKQorCQkJICAgIHsKKwkJCQlpZiAoKnAgPT0gJ20nKQkgICAgLyogc2V0IGNvbG9yICovCisJCQkJeworCQkJCSAgICBpZiAocm93ID09IDApCisJCQkJCW15bm9ybXZpZGVvKCk7LyogcmVzZXQgY29sb3IgKi8KKwkJCQkgICAgZWxzZQorCQkJCQlteXRleHRhdHRyKHJvdyk7CisJCQkJfQorCQkJCWVsc2UgaWYgKCpwID09ICdmJykgLyogc2V0IGZvcmVncm91bmQgY29sb3IgKi8KKwkJCQkgICAgbXl0ZXh0Y29sb3Iocm93KTsKKwkJCQllbHNlCQkgICAgLyogc2V0IGJhY2tncm91bmQgY29sb3IgKi8KKwkJCQkgICAgbXl0ZXh0YmFja2dyb3VuZChyb3cpOworCisJCQkJbGVuIC09IHAgLSBzOworCQkJCXMgPSBwICsgMTsKKwkJCQljb250aW51ZTsKKwkJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBteXB1dGNoKCpzKyspOworCX0KKyAgICBlbHNlCisgICAgeworCXdyaXRlKDEsIHMsICh1bnNpZ25lZClsZW4pOworICAgIH0KK30KKworLyoKKyAqIG1jaF9pbmNoYXIoKTogbG93IGxldmVsIGlucHV0IGZ1bmNpb24uCisgKiBHZXQgYSBjaGFyYWN0ZXJzIGZyb20gdGhlIGtleWJvYXJkLgorICogSWYgdGltZSA9PSAwIGRvIG5vdCB3YWl0IGZvciBjaGFyYWN0ZXJzLgorICogSWYgdGltZSA9PSBuIHdhaXQgYSBzaG9ydCB0aW1lIGZvciBjaGFyYWN0ZXJzLgorICogSWYgdGltZSA9PSAtMSB3YWl0IGZvcmV2ZXIgZm9yIGNoYXJhY3RlcnMuCisgKgorICogcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBvYnRhaW5lZAorICovCisgICAgaW50CittY2hfaW5jaGFyKAorICAgIGNoYXJfdQkqYnVmLAorICAgIGludAkJbWF4bGVuLAorICAgIGxvbmcJdGltZSwKKyAgICBpbnQJCXRiX2NoYW5nZV9jbnQpCit7CisgICAgaW50CQlsZW4gPSAwOworICAgIGludAkJYzsKKyAgICBpbnQJCXRtcF9jOworICAgIHN0YXRpYyBpbnQJbmV4dGNoYXIgPSAwOwkgICAgLyogbWF5IGtlZXAgY2hhcmFjdGVyIHdoZW4gbWF4bGVuID09IDEgKi8KKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBzdGF0aWMgaW50CW9uY2VfYWxyZWFkeSA9IDA7CisjZW5kaWYKKworICAgIC8qCisgICAgICogaWYgd2UgZ290IGEgY3RybC1DIHdoZW4gd2Ugd2VyZSBidXN5LCB0aGVyZSB3aWxsIGJlIGEgIl5DIiBzb21ld2hlcmUKKyAgICAgKiBvbiB0aGUgc2NlZW4sIHNvIHdlIG5lZWQgdG8gcmVkaXNwbGF5IGl0LgorICAgICAqLworICAgIGlmIChkZWxheWVkX3JlZHJhdykKKyAgICB7CisJZGVsYXllZF9yZWRyYXcgPSBGQUxTRTsKKwl1cGRhdGVfc2NyZWVuKENMRUFSKTsKKwlzZXRjdXJzb3IoKTsKKwlvdXRfZmx1c2goKTsKKyAgICB9CisKKyAgICAvKiByZXR1cm4gcmVtYWluaW5nIGNoYXJhY3RlciBmcm9tIGxhc3QgY2FsbCAqLworICAgIGlmIChuZXh0Y2hhcikKKyAgICB7CisJKmJ1ZiA9IG5leHRjaGFyOworCW5leHRjaGFyID0gMDsKKwlyZXR1cm4gMTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgaWYgKHRpbWUgIT0gMCkKKwlzaG93X21vdXNlKFRSVUUpOworI2VuZGlmCisjaWZkZWYgREpHUFAKKyAgICBzZXRfc3lzX2N1cnNvcigpOworI2VuZGlmCisgICAgaWYgKHRpbWUgPj0gMCkKKyAgICB7CisJaWYgKFdhaXRGb3JDaGFyKHRpbWUpID09IDApCS8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKwl7CisjaWZkZWYgRkVBVF9NT1VTRQorCSAgICBzaG93X21vdXNlKEZBTFNFKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQVVUT0NNRAorCSAgICBvbmNlX2FscmVhZHkgPSAwOworI2VuZGlmCisJICAgIHJldHVybiAwOworCX0KKyAgICB9CisgICAgZWxzZSAgICAvKiB0aW1lID09IC0xICovCisgICAgeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCWlmIChvbmNlX2FscmVhZHkgPT0gMikKKwkgICAgdXBkYXRlc2NyaXB0KDApOworCWVsc2UgaWYgKG9uY2VfYWxyZWFkeSA9PSAxKQorCXsKKwkgICAgc2V0Y3Vyc29yKCk7CisJICAgIG9uY2VfYWxyZWFkeSA9IDI7CisJICAgIHJldHVybiAwOworCX0KKwllbHNlCisjZW5kaWYKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgd2l0aGluIDIgc2Vjb25kcyAoZGVmYXVsdCkKKwkgKiB3cml0ZSB0aGUgYXV0b3NjcmlwdCBmaWxlIHRvIGRpc2sKKwkgKi8KKwkgICAgaWYgKFdhaXRGb3JDaGFyKHBfdXQpID09IDApCisJeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCSAgICBpZiAoaGFzX2N1cnNvcmhvbGQoKSAmJiBnZXRfcmVhbF9zdGF0ZSgpID09IE5PUk1BTF9CVVNZKQorCSAgICB7CisJCWFwcGx5X2F1dG9jbWRzKEVWRU5UX0NVUlNPUkhPTEQsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYpOworCQl1cGRhdGVfc2NyZWVuKFZBTElEKTsKKwkJb25jZV9hbHJlYWR5ID0gMTsKKwkJcmV0dXJuIDA7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJCXVwZGF0ZXNjcmlwdCgwKTsKKwl9CisgICAgfQorICAgIFdhaXRGb3JDaGFyKEZPUkVWRVIpOwkvKiB3YWl0IGZvciBrZXkgb3IgbW91c2UgY2xpY2sgKi8KKworLyoKKyAqIFRyeSB0byByZWFkIGFzIG1hbnkgY2hhcmFjdGVycyBhcyB0aGVyZSBhcmUsIHVudGlsIHRoZSBidWZmZXIgaXMgZnVsbC4KKyAqLworICAgIC8qCisgICAgICogd2Ugd2lsbCBnZXQgYXQgbGVhc3Qgb25lIGtleS4gR2V0IG1vcmUgaWYgdGhleSBhcmUgYXZhaWxhYmxlCisgICAgICogQWZ0ZXIgYSBjdHJsLWJyZWFrIHdlIGhhdmUgdG8gcmVhZCBhIDAgKCEpIGZyb20gdGhlIGJ1ZmZlci4KKyAgICAgKiBiaW9za2V5KDEpIHdpbGwgcmV0dXJuIDAgaWYgbm8ga2V5IGlzIGF2YWlsYWJsZSBhbmQgd2hlbiBhCisgICAgICogY3RybC1icmVhayB3YXMgdHlwZWQuIFdoZW4gY3RybC1icmVhayBpcyBoaXQsIHRoaXMgZG9lcyBub3QgYWx3YXlzCisgICAgICogaW1wbGllcyBhIGtleSBoaXQuCisgICAgICovCisgICAgY2Jya19wcmVzc2VkID0gRkFMU0U7CisjaWZkZWYgRkVBVF9NT1VTRQorICAgIGlmIChtb3VzZV9jbGljayA+PSAwICYmIG1heGxlbiA+PSA1KQorICAgIHsKKwlsZW4gPSA1OworCSpidWYrKyA9IEVTQyArIDEyODsKKwkqYnVmKysgPSAnTSc7CisJKmJ1ZisrID0gbW91c2VfY2xpY2s7CisJKmJ1ZisrID0gbW91c2VfeCArICchJzsKKwkqYnVmKysgPSBtb3VzZV95ICsgJyEnOworCW1vdXNlX2NsaWNrID0gLTE7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyNpZmRlZiBGRUFUX01PVVNFCisJbW91c2VfaGlkZGVuID0gVFJVRTsKKyNlbmRpZgorCWlmIChwX2Jpb3NrICYmICFwX2NvbnNrKQorCXsKKwkgICAgd2hpbGUgKChsZW4gPT0gMCB8fCBiaW9za2V5KGJpb3NrZXlfcmVhZHkpKSAmJiBsZW4gPCBtYXhsZW4pCisJICAgIHsKKwkJYyA9IHRyYW5zbGF0ZV9hbHRrZXlzKGJpb3NrZXkoYmlvc2tleV9yZWFkKSk7IC8qIGdldCB0aGUga2V5ICovCisJCS8qCisJCSAqIHRyYW5zbGF0ZSBhIGZldyB0aGluZ3MgZm9yIGluY2hhcigpOgorCQkgKiAweDAwMDAgPT0gQ1RSTC1icmVhawkJLT4gMwkoQ1RSTC1DKQorCQkgKiAweDAzMDAgPT0gQ1RSTC1ACQktPiBOVUwKKwkJICogMHhubjAwID09IGV4dGVuZGVkIGtleSBjb2RlCS0+IEtfTlVMLCBubgorCQkgKiAweG5uZTAgPT0gZW5oYW5jZWQga2V5Ym9hcmQJLT4gS19OVUwsIG5uCisJCSAqIEtfTlVMCQkJLT4gS19OVUwsIDMKKwkJICovCisJCWlmIChjID09IDApCisJCSAgICBjID0gMzsKKwkJZWxzZSBpZiAoYyA9PSAweDAzMDApCisJCSAgICBjID0gTlVMOworCQllbHNlIGlmICgoYyAmIDB4ZmYpID09IDAKKwkJCXx8IGMgPT0gS19OVUwKKwkJCXx8IGMgPT0gMHg0ZTJiCisJCQl8fCBjID09IDB4NGEyZAorCQkJfHwgYyA9PSAweDM3MmEKKwkJCXx8ICgoYyAmIDB4ZmYpID09IDB4ZTAgJiYgYyAhPSAweGUwKSkKKwkJeworCQkgICAgaWYgKGMgPT0gS19OVUwpCisJCQljID0gMzsKKwkJICAgIGVsc2UKKwkJCWMgPj49IDg7CisJCSAgICAqYnVmKysgPSBLX05VTDsKKwkJICAgICsrbGVuOworCQl9CisKKwkJaWYgKGxlbiA8IG1heGxlbikKKwkJeworCQkgICAgKmJ1ZisrID0gYzsKKwkJICAgIGxlbisrOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIC8qIENvbnZlcnQgZnJvbSAndGVybWVuY29kaW5nJyB0byAnZW5jb2RpbmcnLiBPbmx5CisJCSAgICAgKiB0cmFuc2xhdGUgbm9ybWFsIGNoYXJhY3RlcnMsIG5vdCBrZXkgY29kZXMuICovCisJCSAgICBpZiAoaW5wdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORQorCQkJCQkgICAgJiYgKGxlbiA9PSAxIHx8IGJ1ZlstMl0gIT0gS19OVUwpKQorCQkJbGVuICs9IGNvbnZlcnRfaW5wdXQoYnVmIC0gMSwgMSwgbWF4bGVuIC0gbGVuICsgMSkgLSAxOworI2VuZGlmCisJCX0KKwkJZWxzZQorCQkgICAgbmV4dGNoYXIgPSBjOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIHdoaWxlICgobGVuID09IDAgfHwgKHBfY29uc2sgPyBjb25zX2tiaGl0KCkgOiBrYmhpdCgpKSkKKwkJICAgICYmIGxlbiA8IG1heGxlbikKKwkgICAgeworCQlzd2l0Y2ggKGMgPSAocF9jb25zayA/IGNvbnNfZ2V0Y2goKSA6IGdldGNoKCkpKQorCQl7CisJCSAgICBjYXNlIDA6CisJCQkvKiBOVUwgbWVhbnMgdGhhdCB0aGVyZSBpcyBhbm90aGVyIGNoYXJhY3Rlci4KKwkJCSAqIEdldCBpdCBpbW1lZGlhdGVseSwgYmVjYXVzZSBrYmhpdCgpIGRvZXNuJ3QgYWx3YXlzCisJCQkgKiByZXR1cm4gVFJVRSBmb3IgdGhlIHNlY29uZCBjaGFyYWN0ZXIuCisJCQkgKi8KKwkJCWlmIChwX2NvbnNrKQorCQkJICAgIGMgPSBjb25zX2dldGNoKCk7CisJCQllbHNlCisJCQkgICAgYyA9IGdldGNoKCk7CisJCQl0bXBfYyA9IHRyYW5zbGF0ZV9hbHRrZXlzKGMgPDwgOCk7CisJCQlpZiAodG1wX2MgPT0gKGMgPDwgOCkpCisJCQl7CisJCQkgICAgKmJ1ZisrID0gS19OVUw7CisJCQkgICAgKytsZW47CisJCQl9CisJCQllbHNlCisJCQkgICAgYyA9IHRtcF9jOworCQkJYnJlYWs7CisJCSAgICBjYXNlIEtfTlVMOgorCQkJKmJ1ZisrID0gS19OVUw7CisJCQkrK2xlbjsKKwkJCWMgPSAzOworCQkJYnJlYWs7CisJCSAgICBjYXNlIDM6CisJCQljYnJrX3ByZXNzZWQgPSBUUlVFOworCQkJLypGQUxMVEhST1VHSCovCisJCSAgICBkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJaWYgKGxlbiA8IG1heGxlbikKKwkJeworCQkgICAgKmJ1ZisrID0gYzsKKwkJICAgICsrbGVuOworCQl9CisJCWVsc2UKKwkJICAgIG5leHRjaGFyID0gYzsKKwkgICAgfQorCX0KKyAgICB9CisjaWZkZWYgRkVBVF9NT1VTRQorICAgIHNob3dfbW91c2UoRkFMU0UpOworI2VuZGlmCisKKyAgICBiZWVwX2NvdW50ID0gMDsJICAgIC8qIG1heSBiZWVwIGFnYWluIG5vdyB0aGF0IHdlIGdvdCBzb21lIGNoYXJzICovCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgb25jZV9hbHJlYWR5ID0gMDsKKyNlbmRpZgorICAgIHJldHVybiBsZW47Cit9CisKKy8qCisgKiByZXR1cm4gbm9uLXplcm8gaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlCisgKi8KKyAgICBpbnQKK21jaF9jaGFyX2F2YWlsKHZvaWQpCit7CisgICAgcmV0dXJuIFdhaXRGb3JDaGFyKDBMKTsKK30KKworI2lmZGVmIERKR1BQCisjIGRlZmluZSBJTlRfQVJHICAgIGludAorI2Vsc2UKKyMgZGVmaW5lIElOVF9BUkcKKyNlbmRpZgorCisvKgorICogZnVuY3Rpb24gZm9yIGN0cmwtYnJlYWsgaW50ZXJydXB0CisgKi8KKyAgICBzdGF0aWMgdm9pZCBpbnRlcnJ1cHQKKyNpZmRlZiBESkdQUAorY2F0Y2hfY2JyayhpbnQgYSkKKyNlbHNlCitjYXRjaF9jYnJrKHZvaWQpCisjZW5kaWYKK3sKKyAgICBjYnJrX3ByZXNzZWQgPSBUUlVFOworICAgIGN0cmxjX3ByZXNzZWQgPSBUUlVFOworfQorCisjaWZuZGVmIERKR1BQCisvKgorICogY3RybC1icmVhayBoYW5kbGVyIGZvciBET1MuIE5ldmVyIGNhbGxlZCB3aGVuIGEgY3RybC1icmVhayBpcyB0eXBlZCwgYmVjYXVzZQorICogd2UgY2F0Y2ggaW50ZXJydXB0IDFiLiBJZiB5b3UgdHlwZSBjdHJsLUMgd2hpbGUgVmltIGlzIHdhaXRpbmcgZm9yIGEKKyAqIGNoYXJhY3RlciB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQuIFdoZW4gYSBjdHJsLUMgaXMgdHlwZWQgd2hpbGUgVmltIGlzCisgKiBidXN5IHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZC4gQnkgdGhhdCB0aW1lIGEgXkMgaGFzIGJlZW4gZGlzcGxheWVkIG9uCisgKiB0aGUgc2NyZWVuLCBzbyB3ZSBoYXZlIHRvIHJlZGlzcGxheSB0aGUgc2NyZWVuLiBXZSBjYW4ndCBkbyB0aGF0IGhlcmUsCisgKiBiZWNhdXNlIHdlIG1heSBiZSBjYWxsZWQgYnkgRE9TLiBUaGUgcmVkcmF3IGlzIGluIG1jaF9pbmNoYXIoKS4KKyAqLworICAgIHN0YXRpYyBpbnQgX2NkZWNsCitjYnJrX2hhbmRsZXIodm9pZCkKK3sKKyAgICBkZWxheWVkX3JlZHJhdyA9IFRSVUU7CisgICAgcmV0dXJuIDE7CQkgICAgLyogcmVzdW1lIG9wZXJhdGlvbiBhZnRlciBjdHJsLWJyZWFrICovCit9CisKKy8qCisgKiBmdW5jdGlvbiBmb3IgY3JpdGljYWwgZXJyb3IgaW50ZXJydXB0CisgKiBGb3IgRE9TIDEgYW5kIDIgcmV0dXJuIDAgKElnbm9yZSkuCisgKiBGb3IgRE9TIDMgYW5kIGxhdGVyIHJldHVybiAzIChGYWlsKQorICovCisgICAgc3RhdGljIHZvaWQgaW50ZXJydXB0CitjYXRjaF9jaW50KGJwLCBkaSwgc2ksIGRzLCBlcywgZHgsIGN4LCBieCwgYXgpCisgICAgdW5zaWduZWQgYnAsIGRpLCBzaSwgZHMsIGVzLCBkeCwgY3gsIGJ4LCBheDsKK3sKKyAgICBheCA9IChheCAmIDB4ZmYwMCk7CSAgICAvKiBzZXQgQUwgdG8gMCAqLworICAgIGlmIChfb3NtYWpvciA+PSAzKQorCWF4IHw9IDM7CSAgICAvKiBzZXQgQUwgdG8gMyAqLworfQorI2VuZGlmCisKKy8qCisgKiBTZXQgdGhlIGludGVycnVwdCB2ZWN0b3JzIGZvciB1c2Ugd2l0aCBWaW0gb24gb3Igb2ZmLgorICogb24gPT0gVFJVRSBtZWFucyBhcyB1c2VkIHdpdGhpbiBWaW0KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfaW50ZXJydXB0cyhpbnQgb24pCit7CisgICAgc3RhdGljIGludCBzYXZlZF9jYnJrOworI2lmbmRlZiBESkdQUAorICAgIHN0YXRpYyB2b2lkIGludGVycnVwdCAoKm9sZF9jaW50KSgpOworI2VuZGlmCisgICAgc3RhdGljIHZvaWQgaW50ZXJydXB0ICgqb2xkX2NicmspKElOVF9BUkcpOworCisgICAgaWYgKG9uKQorICAgIHsKKwlzYXZlZF9jYnJrID0gZ2V0Y2JyaygpOwkJLyogc2F2ZSBvbGQgY3RybC1icmVhayBzZXR0aW5nICovCisJc2V0Y2JyaygwKTsJCQkvKiBkbyBub3QgY2hlY2sgZm9yIGN0cmwtYnJlYWsgKi8KKyNpZmRlZiBESkdQUAorCW9sZF9jYnJrID0gc2lnbmFsKFNJR0lOVCwgY2F0Y2hfY2Jyayk7CS8qIGNyaXRpY2FsIGVycm9yIGludGVycnVwdCAqLworI2Vsc2UKKwlvbGRfY2ludCA9IGdldHZlY3QoMHgyNCk7CS8qIHNhdmUgb2xkIGNyaXRpY2FsIGVycm9yIGludGVycnVwdCAqLworCXNldHZlY3QoMHgyNCwgY2F0Y2hfY2ludCk7CS8qIGluc3RhbGwgb3VyIGNyaXRpY2FsIGVycm9yIGludGVycnVwdCAqLworCW9sZF9jYnJrID0gZ2V0dmVjdCgweDFCKTsJLyogc2F2ZSBvbGQgY3RybC1icmVhayBpbnRlcnJ1cHQgKi8KKwlzZXR2ZWN0KDB4MUIsIGNhdGNoX2NicmspOwkvKiBpbnN0YWxsIG91ciBjdHJsLWJyZWFrIGludGVycnVwdCAqLworCWN0cmxicmsoY2Jya19oYW5kbGVyKTsJCS8qIHZpbSdzIGN0cmwtYnJlYWsgaGFuZGxlciAqLworI2VuZGlmCisJaWYgKHRlcm1fY29uc29sZSkKKwkgICAgb3V0X3N0cihUX01FKTsJCS8qIHNldCBjb2xvcnMgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlzZXRjYnJrKHNhdmVkX2NicmspOwkJLyogcmVzdG9yZSBjdHJsLWJyZWFrIHNldHRpbmcgKi8KKyNpZmRlZiBESkdQUAorCXNpZ25hbChTSUdJTlQsb2xkX2NicmspOwkvKiBjcml0aWNhbCBlcnJvciBpbnRlcnJ1cHQgKi8KKyNlbHNlCisJc2V0dmVjdCgweDI0LCBvbGRfY2ludCk7CS8qIHJlc3RvcmUgY3JpdGljYWwgZXJyb3IgaW50ZXJydXB0ICovCisJc2V0dmVjdCgweDFCLCBvbGRfY2Jyayk7CS8qIHJlc3RvcmUgY3RybC1icmVhayBpbnRlcnJ1cHQgKi8KKyNlbmRpZgorCS8qIHJlc3RvcmUgY3RybC1icmVhayBoYW5kbGVyLCBob3cgPz8/ICovCisJaWYgKHRlcm1fY29uc29sZSkKKwkgICAgbXlub3JtdmlkZW8oKTsJCS8qIHJlc3RvcmUgc2NyZWVuIGNvbG9ycyAqLworICAgIH0KK30KKworLyoKKyAqIFdlIGhhdmUgbm8gam9iIGNvbnRyb2wsIGZha2UgaXQgYnkgc3RhcnRpbmcgYSBuZXcgc2hlbGwuCisgKi8KKyAgICB2b2lkCittY2hfc3VzcGVuZCh2b2lkKQoreworICAgIHN1c3BlbmRfc2hlbGwoKTsKK30KKworZXh0ZXJuIGludCBfZm1vZGU7CisKKy8qCisgKiBQcmVwYXJlIHdpbmRvdyBmb3IgdXNlIGJ5IFZpbS4KKyAqLworICAgIHZvaWQKK21jaF9pbml0KHZvaWQpCit7CisgICAgdW5pb24gUkVHUyByZWdzOworCisjaWYgZGVmaW5lZChESkdQUCkgJiYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkKKyAgICBfX2RwbWlfcmVncyAgZHBtaV9yZWdzOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEdldCB0aGUgdmlkZW8gYXR0cmlidXRlcyBhdCB0aGUgY3Vyc29yLiAgVGhlc2Ugd2lsbCBiZSB1c2VkIGFzIHRoZQorICAgICAqIGRlZmF1bHQgYXR0cmlidXRlcy4KKyAgICAgKi8KKyAgICByZWdzLmguYWggPSAweDA4OworICAgIHJlZ3MuaC5iaCA9IDB4MDA7CQkvKiB2aWRlbyBwYWdlIDAgKi8KKyAgICBpbnQ4NigweDEwLCAmcmVncywgJnJlZ3MpOworICAgIG9yaWdfYXR0ciA9IHJlZ3MuaC5haDsKKyAgICBteW5vcm12aWRlbygpOworICAgIGlmIChjdGVybV9ub3JtYWxfZmdfY29sb3IgPT0gMCkKKwljdGVybV9ub3JtYWxfZmdfY29sb3IgPSAob3JpZ19hdHRyICYgMHhmKSArIDE7CisgICAgaWYgKGN0ZXJtX25vcm1hbF9iZ19jb2xvciA9PSAwKQorCWN0ZXJtX25vcm1hbF9iZ19jb2xvciA9ICgob3JpZ19hdHRyID4+IDQpICYgMHhmKSArIDE7CisKKyAgICB0ZXJtX2NvbnNvbGUgPSBUUlVFOyAgICAvKiBhc3N1bWUgdXNpbmcgdGhlIGNvbnNvbGUgZm9yIHRoZSB0aGluZ3MgaGVyZSAqLworICAgIF9mbW9kZSA9IE9fQklOQVJZOwkgICAgLyogd2UgZG8gb3VyIG93biBDUi1MRiB0cmFuc2xhdGlvbiAqLworICAgIG91dF9mbHVzaCgpOworICAgIHNldF9pbnRlcnJ1cHRzKFRSVUUpOyAgIC8qIGNhdGNoIGludGVycnVwdHMgKi8KKworI2lmZGVmIERKR1BQCisgICAgLyoKKyAgICAgKiBVc2UgTG9uZyBGaWxlIE5hbWVzIGJ5IGRlZmF1bHQsIGlmICRMRk4gbm90IHNldC4KKyAgICAgKi8KKyAgICBpZiAoZ2V0ZW52KCJMRk4iKSA9PSBOVUxMKQorCXB1dGVudigiTEZOPXkiKTsKKworICAgIGdldF9zY3JlZW5iYXNlKCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTU9VU0UKKy8qIGZpbmQgb3V0IGlmIGEgTVMgY29tcGF0aWJsZSBtb3VzZSBpcyBhdmFpbGFibGUgKi8KKyAgICByZWdzLnguYXggPSAwOworICAgICh2b2lkKWludDg2KDB4MzMsICZyZWdzLCAmcmVncyk7CisgICAgbW91c2VfYXZhaWwgPSByZWdzLnguYXg7CisgICAgLyogYmVzdCBndWVzcyBmb3IgbW91c2UgY29vcmRpbmF0ZSBjb21wdXRhdGlvbnMgKi8KKyAgICBtY2hfZ2V0X3NoZWxsc2l6ZSgpOworICAgIGlmIChDb2x1bW5zIDw9IDQwKQorCW1vdXNlX3hfZGl2ID0gMTY7CisgICAgaWYgKFJvd3MgPT0gMzApCisJbW91c2VfeV9kaXYgPSAxNjsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBUcnkgc3dpdGNoaW5nIHRvIDE2IGNvbG9ycyBmb3IgYmFja2dyb3VuZCwgaW5zdGVhZCBvZiA4IGNvbG9ycyBhbmQKKyAgICAgKiBibGlua2luZy4gIERvZXMgdGhpcyBhbHdheXMgd29yaz8gIENhbiB0aGUgb2xkIHZhbHVlIGJlIHJlc3RvcmVkPworICAgICAqLworICAgIHJlZ3MueC5heCA9IDB4MTAwMzsKKyAgICByZWdzLmguYmwgPSAweDAwOworICAgIHJlZ3MuaC5iaCA9IDB4MDA7CisgICAgaW50ODYoMHgxMCwgJnJlZ3MsICZyZWdzKTsKKworICAgIC8qCisgICAgICogVGVzdCBpZiB3ZSBoYXZlIGFuIGVuaGFuY2VkIEFUIGtleWJvYXJkLiAgV3JpdGUgMHhGRkZGIHRvIHRoZSBrZXlib2FyZAorICAgICAqIGJ1ZmZlciBhbmQgdHJ5IHRvIHJlYWQgaXQgYmFjay4gIElmIHdlIGNhbid0IGluIDE2IHRyaWVzLCBpdCdzIGFuIG9sZAorICAgICAqIHR5cGUgWFQga2V5Ym9hcmQuCisgICAgICovCisgICAgcmVncy5oLmFoID0gMHgwNTsKKyAgICByZWdzLnguY3ggPSAweGZmZmY7CisgICAgaW50ODYoMHgxNiwgJnJlZ3MsICZyZWdzKTsKKyAgICBpZiAocmVncy5oLmFsICE9IDEpCS8qIHNraXAgdGhpcyB3aGVuIGtleWJvYXJkIGJ1ZmZlciBpcyBmdWxsICovCisgICAgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDE2OyArK2kpCisJeworCSAgICByZWdzLmguYWggPSAweDEwOworCSAgICBpbnQ4NigweDE2LCAmcmVncywgJnJlZ3MpOworCSAgICBpZiAocmVncy54LmF4ID09IDB4ZmZmZikKKwkJYnJlYWs7CisJfQorCWlmIChpID09IDE2KQkvKiAweGZmZmYgbm90IHJlYWQsIG11c3QgYmUgb2xkIGtleWJvYXJkICovCisJeworCSAgICBiaW9za2V5X3JlYWQgPSAwOworCSAgICBiaW9za2V5X3JlYWR5ID0gMTsKKwl9CisgICAgfQorCisjaWZkZWYgTUNIX0NVUlNPUl9TSEFQRQorICAgIC8qIFNhdmUgdGhlIG9sZCBjdXJzb3Igc2hhcGUgKi8KKyAgICBtY2hfcmVzdG9yZV9jdXJzb3Jfc2hhcGUoRkFMU0UpOworICAgIC8qIEluaXRpYWxpc2UgdGhlIGN1cnNvciBzaGFwZSAqLworICAgIG1jaF91cGRhdGVfY3Vyc29yKCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoREpHUFApICYmIGRlZmluZWQoRkVBVF9DTElQQk9BUkQpCisgICAgLyoKKyAgICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIFdpbmRvd3MgY2xpcGJvYXJkIGlzIGF2YWlsYWJsZSwgaWUuIGFyZSB3ZQorICAgICAqIHJ1bm5pbmcgZnJvbSBhIERPUyBzZXNzaW9uIHdpdGhpbiBXaW5kb3dzLiAgT2J2aW91c2x5LCB0aGUgV2luZG93cworICAgICAqIGNsaXBib2FyZCB3aWxsIG5vdCBiZSBhdmFpbGFibGUgaWYgd2UncmUgcnVubmluZyB1bmRlciBwdXJlIERPUy4KKyAgICAgKgorICAgICAqIGludCAweDJmLCBBWCA9IDB4MTcwMCBpZGVudGlmaWVzIHRoZSBXaW5kb3dzIHZlcnNpb24gd2UncmUgcnVubmluZworICAgICAqIHVuZGVyLiAgVXBvbiByZXR1cm4gZnJvbSB0aGUgaW50ZXJydXB0LCBpZiBBWCBpcyB1bmNoYW5nZWQsIHdlJ3JlCisgICAgICogcnVubmluZyB1bmRlciBwdXJlIERPUyBhbmQgbm8gV2luZG93cyBjbGlwYm9hcmQgaXMgYXZhaWxhYmxlLgorICAgICAqCisgICAgICogUmVtYXJrOiBjb3VsZCB1c2UgaW50ODYoKSBoZXJlIGJ1dCBfX2RwbWlfaW50KCkgaXMgcmVjb21tZW5kZWQgaW4KKyAgICAgKiB0aGUgREpHUFAgZG9jcywgc2luY2UgaW50ODYoKSBkb2Vzbid0IGNvdmVyIGFsbCBhdmFpbGFibGUgaW50ZXJydXB0cy4KKyAgICAgKi8KKyAgICBkcG1pX3JlZ3MueC5heCA9IDB4MTcwMDsKKyAgICBpZiAoX19kcG1pX2ludCgweDJmLCAmZHBtaV9yZWdzKSA9PSAtMSkKKwkvKiByZWFsLW1vZGUgaW50ZXJydXB0IGZhaWxlZD8gKi8KKwlkcG1pX3JlZ3MueC5heCA9IDB4MTcwMDsJLyogZm9yY2UgZmFpbHVyZSAqLworCisgICAgaWYgKGRwbWlfcmVncy54LmF4ID09IDB4MTcwMCkJLyogbm8gY2hhbmdlIGluIEFYPyAqLworCWNsaXBfaW5pdChGQUxTRSk7CQkvKiBubyBjbGlwYm9hcmQgYXZhaWxhYmxlLCB0b28gYmFkICovCisgICAgZWxzZQkJCQkvKiBlbHNlLCBydW5uaW5nIHVuZGVyIFdpbmRvd3MsIE9LICovCisJY2xpcF9pbml0KFRSVUUpOwkJLyogY2xpcGJvYXJkIGlzIGF2YWlsYWJsZSAqLworI2VuZGlmCit9CisKKyAgICBpbnQKK21jaF9jaGVja193aW4oCisgICAgaW50CQlhcmdjLAorICAgIGNoYXIJKiphcmd2KQoreworICAgIC8qIHN0b3JlIGFyZ3ZbMF0sIG1heSBiZSB1c2VkIGZvciAkVklNICovCisgICAgaWYgKCphcmd2WzBdICE9IE5VTCkKKwlleGVfbmFtZSA9IEZ1bGxOYW1lX3NhdmUoKGNoYXJfdSAqKWFyZ3ZbMF0sIEZBTFNFKTsKKworICAgIC8qCisgICAgICogVHJ5IHRoZSBET1Mgc2VhcmNoIHBhdGguICBUaGUgZXhlY3V0YWJsZSBtYXkgaW4KKyAgICAgKiBmYWN0IGJlIGNhbGxlZCBkaWZmZXJlbnRseSwgc28gdHJ5IHRoaXMgbGFzdC4KKyAgICAgKi8KKyAgICBpZiAoZXhlX25hbWUgPT0gTlVMTCB8fCAqZXhlX25hbWUgPT0gTlVMKQorCWV4ZV9uYW1lID0gc2VhcmNocGF0aCgidmltLmV4ZSIpOworCisgICAgaWYgKGlzYXR0eSgxKSkKKwlyZXR1cm4gT0s7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgaW5wdXQgY29tZXMgZnJvbSBhIHRlcm1pbmFsLCBGQUxTRSBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK21jaF9pbnB1dF9pc2F0dHkodm9pZCkKK3sKKyAgICBpZiAoaXNhdHR5KHJlYWRfY21kX2ZkKSkKKwlyZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZiBkZWZpbmVkKFVTRV9GTkFNRV9DQVNFKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIGZuYW1lX2Nhc2UoKTogU2V0IHRoZSBjYXNlIG9mIHRoZSBmaWxlIG5hbWUsIGlmIGl0IGFscmVhZHkgZXhpc3RzLgorICogVE9ETzogc2hvdWxkIGV4cGFuZCBzaG9ydCB0byBsb25nIGZpbGUgbmFtZXMuICBOZWVkIHRvIHVzZSBET1MgaW50ZXJydXB0cywKKyAqIHNlZSBESkdQUCBzb3VyY2VzIGxpYmMvZG9zL2Rpci9maW5kZmlycy5jLgorICovCisgICAgdm9pZAorZm5hbWVfY2FzZShjaGFyX3UgKm5hbWUsIGludCBsZW4pCit7CisgICAgY2hhcl91CSAgICAqdGFpbDsKKyAgICBzdHJ1Y3QgZmZibGsgICAgZmI7CisKKyAgICBzbGFzaF9hZGp1c3QobmFtZSk7CisgICAgaWYgKGZpbmRmaXJzdChuYW1lLCAmZmIsIDApID09IDApCisgICAgeworCXRhaWwgPSBnZXR0YWlsKG5hbWUpOworCWlmIChsZW4gPT0gMCA/IFNUUkxFTih0YWlsKSA9PSBTVFJMRU4oZmIuZmZfbmFtZSkKKwkJOiAodGFpbCAtIG5hbWUpICsgU1RSTEVOKGZiLmZmX25hbWUpIDwgbGVuKQorCSAgICBTVFJDUFkodGFpbCwgZmIuZmZfbmFtZSk7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiByZXR1cm4gcHJvY2VzcyBJRAorICovCisgICAgbG9uZworbWNoX2dldF9waWQodm9pZCkKK3sKKyAgICByZXR1cm4gKGxvbmcpMDsKK30KKworLyoKKyAqIENoYW5nZSBkZWZhdWx0IGRyaXZlIChqdXN0IGxpa2UgX2NoZHJpdmUgb2YgQm9ybGFuZCBDIDMuMSkKKyAqLworICAgIHN0YXRpYyBpbnQKK2NoYW5nZV9kcml2ZShpbnQgZHJpdmUpCit7CisgICAgdW5pb24gUkVHUyByZWdzOworCisgICAgcmVncy5oLmFoID0gMHgwZTsKKyAgICByZWdzLmguZGwgPSBkcml2ZSAtIDE7CisgICAgaW50ZG9zKCZyZWdzLCAmcmVncyk7ICAgLyogc2V0IGRlZmF1bHQgZHJpdmUgKi8KKyAgICByZWdzLmguYWggPSAweDE5OworICAgIGludGRvcygmcmVncywgJnJlZ3MpOyAgIC8qIGdldCBkZWZhdWx0IGRyaXZlICovCisgICAgaWYgKHJlZ3MuaC5hbCA9PSBkcml2ZSAtIDEpCisJcmV0dXJuIDA7CisgICAgcmV0dXJuIC0xOworfQorCisvKgorICogR2V0IGFic29sdXRlIGZpbGUgbmFtZSBpbnRvIGJ1ZmZlciAnYnVmJyBvZiBsZW5ndGggJ2xlbicgYnl0ZXMuCisgKiBBbGwgc2xhc2hlcyBhcmUgcmVwbGFjZWQgd2l0aCBiYWNrc2xhc2hlcywgdG8gYXZvaWQgdHJvdWJsZSB3aGVuIGNvbXBhcmluZworICogZmlsZSBuYW1lcy4gIFdoZW4gJ3NoZWxsc2xhc2gnIHNldCBkbyBpdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK21jaF9GdWxsTmFtZSgKKyAgICBjaGFyX3UJKmZuYW1lLAorICAgIGNoYXJfdQkqYnVmLAorICAgIGludAkJbGVuLAorICAgIGludAkJZm9yY2UpCit7CisgICAgaWYgKCFmb3JjZSAmJiBtY2hfaXNGdWxsTmFtZShmbmFtZSkpCS8qIGFscmVhZHkgZXhwYW5kZWQgKi8KKyAgICB7CisJU1RSTkNQWShidWYsIGZuYW1lLCBsZW4pOworCWJ1ZltsZW4gLSAxXSA9IE5VTDsKKwlzbGFzaF9hZGp1c3QoYnVmKTsKKwlyZXR1cm4gT0s7CisgICAgfQorCisjaWZkZWYgX19CT1JMQU5EQ19fCQkvKiBPbmx5IEJvcmxhbmQgQysrIGhhcyB0aGlzICovCisgICAgaWYgKF9mdWxscGF0aCgoY2hhciAqKWJ1ZiwgKGNoYXIgKilmbmFtZSwgbGVuIC0gMSkgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKyAgICByZXR1cm4gT0s7CisjZWxzZQkJCS8qIGFsbW9zdCB0aGUgc2FtZSBhcyBtY2hfRnVsbE5hbWUoKSBpbiBvc191bml4LmMgKi8KKyAgICB7CisjIGlmIDEKKwljaGFyX3UJZnVsbHBhdGhbTUFYUEFUSExdOworCisJaWYgKCFfdHJ1ZW5hbWUoZm5hbWUsIGZ1bGxwYXRoKSkKKwkgICAgcmV0dXJuIEZBSUw7CisJc2xhc2hfYWRqdXN0KGZ1bGxwYXRoKTsJICAgIC8qIE9ubHkgbmVlZGVkIHdoZW4gJ3NoZWxsc2xhc2gnIHNldCAqLworCVNUUk5DUFkoYnVmLCBmdWxscGF0aCwgbGVuKTsKKwlidWZbbGVuIC0gMV0gPSBOVUw7CisJcmV0dXJuIE9LOworCisjIGVsc2UgIC8qIE9sZCBjb2RlLCB0byBiZSBkZWxldGVkLi4uICovCisJaW50CWw7CisJY2hhcl91CW9sZGRpcltNQVhQQVRITF07CisJY2hhcl91CSpwLCAqcTsKKwlpbnQJYzsKKwlpbnQJcmV0dmFsID0gT0s7CisKKwkqYnVmID0gMDsKKwkvKgorCSAqIGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGZvciBhIG1vbWVudCwKKwkgKiBhbmQgdGhlbiBkbyB0aGUgZ2V0d2QoKSAoYW5kIGdldCBiYWNrIHRvIHdoZXJlIHdlIHdlcmUpLgorCSAqIFRoaXMgd2lsbCBnZXQgdGhlIGNvcnJlY3QgcGF0aCBuYW1lIHdpdGggIi4uLyIgdGhpbmdzLgorCSAqLworCXAgPSB2aW1fc3RycmNocihmbmFtZSwgJy8nKTsKKwlxID0gdmltX3N0cnJjaHIoZm5hbWUsICdcXCcpOworCWlmIChxICE9IE5VTEwgJiYgKHAgPT0gTlVMTCB8fCBxID4gcCkpCisJICAgIHAgPSBxOworCXEgPSB2aW1fc3RycmNocihmbmFtZSwgJzonKTsKKwlpZiAocSAhPSBOVUxMICYmIChwID09IE5VTEwgfHwgcSA+IHApKQorCSAgICBwID0gcTsKKwlpZiAocCAhPSBOVUxMKQorCXsKKwkgICAgaWYgKGdldGN3ZChvbGRkaXIsIE1BWFBBVEhMKSA9PSBOVUxMKQorCSAgICB7CisJCXAgPSBOVUxMOwkvKiBjYW4ndCBnZXQgY3VycmVudCBkaXI6IGRvbid0IGNoZGlyICovCisJCXJldHZhbCA9IEZBSUw7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlmIChwID09IGZuYW1lKQkJCS8qIC9mbmFtZQkgICAgKi8KKwkJICAgIHEgPSBwICsgMTsJCQkvKiAtPiAvCQkgICAgKi8KKwkJZWxzZSBpZiAocSArIDEgPT0gcCkJCS8qIC4uLiBjOlxmb28JICAgICovCisJCSAgICBxID0gcCArIDE7CQkJLyogLT4gYzpcCSAgICAqLworCQllbHNlCQkJCS8qIGJ1dCBjOlxmb29cYmFyICAgKi8KKwkJICAgIHEgPSBwOwkJCS8qIC0+IGM6XGZvbwkgICAgKi8KKworCQljID0gKnE7CQkJLyogdHJ1bmNhdGUgYXQgc3RhcnQgb2YgZm5hbWUgKi8KKwkJKnEgPSBOVUw7CisjIGlmZGVmIERKR1BQCisJCVNUUkNQWShidWYsIGZuYW1lKTsKKwkJc2xhc2hfYWRqdXN0KGJ1Zik7CS8qIG5lZWRlZCB3aGVuIGZuYW1lIHN0YXJ0cyB3aXRoIFwgKi8KKwkJaWYgKG1jaF9jaGRpcihidWYpKQkvKiBjaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSAqLworIyBlbHNlCisJCWlmIChtY2hfY2hkaXIoZm5hbWUpKQkvKiBjaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSAqLworIyBlbmRpZgorCQkgICAgcmV0dmFsID0gRkFJTDsKKwkJZWxzZQorCQl7CisJCSAgICBmbmFtZSA9IHE7CisJCSAgICBpZiAoYyA9PSBwc2VwYykJICAgIC8qIGlmIHdlIGN1dCB0aGUgbmFtZSBhdCBhICovCisJCQlmbmFtZSsrOwkgICAgLyogJ1wnLCBkb24ndCBhZGQgaXQgYWdhaW4gKi8KKwkJfQorCQkqcSA9IGM7CisJICAgIH0KKwl9CisJaWYgKGdldGN3ZChidWYsIGxlbikgPT0gTlVMTCkKKwl7CisJICAgIHJldHZhbCA9IEZBSUw7CisJICAgICpidWYgPSBOVUw7CisJfQorIyAgaWZkZWYgVVNFX0ZOQU1FX0NBU0UKKwllbHNlCisJeworCSAgICBjaGFyX3UJKmhlYWQ7CisJICAgIGNoYXJfdQkqdGFpbDsKKwkgICAgc3RydWN0IGZmYmxrIGZiOworCSAgICBpbnQJCWM7CisJICAgIGludAkJYWRkZWQ7CisKKwkgICAgLyogQXBwYXJlbnRseSAibG9uZ25hfjEiIGlzbid0IGV4cGFuZGVkIGJ5IGdldGN3ZCgpLCBhdCBsZWFzdCBub3QKKwkgICAgICogZm9yIERKR1BQLiAgRXhwYW5kIGl0IGhlcmUuICBIYXZlIHRvIGRvIGVhY2ggZGlybmFtZQorCSAgICAgKiBzZXBhcmF0ZWx5LiAqLworCSAgICBzbGFzaF9hZGp1c3QoYnVmKTsKKwkgICAgaGVhZCA9IGJ1ZjsKKwkgICAgaWYgKGlzYWxwaGEoKmhlYWQpICYmIGhlYWRbMV0gPT0gJzonKQorCQloZWFkICs9IDI7CS8qIHNraXAgImM6IiAqLworCSAgICB3aGlsZSAoKmhlYWQgIT0gTlVMKQorCSAgICB7CisJCS8qIEFkdmFuY2UgImhlYWQiIHRvIHRoZSBzdGFydCBvZiBhIGRpcm5hbWUgYW5kICJ0YWlsIiB0byBqdXN0CisJCSAqIGFmdGVyIGl0LiAqLworCQl3aGlsZSAoKmhlYWQgPT0gJy8nIHx8ICpoZWFkID09ICdcXCcpCisJCSAgICArK2hlYWQ7CisJCWZvciAodGFpbCA9IGhlYWQ7ICp0YWlsICE9IE5VTDsgKyt0YWlsKQorCQkgICAgaWYgKCp0YWlsID09ICcvJyB8fCAqdGFpbCA9PSAnXFwnKQorCQkJYnJlYWs7CisJCWMgPSAqdGFpbDsKKwkJKnRhaWwgPSBOVUw7CisKKwkJaWYgKGZpbmRmaXJzdChidWYsICZmYiwgRkFfRElSRUMpID09IDApCisJCXsKKwkJICAgIGFkZGVkID0gU1RSTEVOKGZiLmZmX25hbWUpOworCQkgICAgaWYgKChoZWFkIC0gYnVmKSArIGFkZGVkICsgU1RSTEVOKHRhaWwgKyAxKSArIDIgPCBsZW4pCisJCSAgICB7CisJCQlhZGRlZCAtPSAodGFpbCAtIGhlYWQpOworCQkJaWYgKGFkZGVkICE9IDApCisJCQkgICAgbWNoX21lbW1vdmUodGFpbCArIDEgKyBhZGRlZCwgdGFpbCArIDEsCisJCQkJCQkJU1RSTEVOKHRhaWwgKyAxKSArIDEpOworCQkJU1RSQ1BZKGhlYWQsIGZiLmZmX25hbWUpOworCQkJdGFpbCArPSBhZGRlZDsKKwkJICAgIH0KKwkJfQorCQkqdGFpbCA9IGM7CisJCWhlYWQgPSB0YWlsOworCSAgICB9CisJfQorIyAgZW5kaWYKKwlpZiAocCAhPSBOVUxMKQorCSAgICBtY2hfY2hkaXIob2xkZGlyKTsKKwkvKgorCSAqIENvbmNhdGVuYXRlIHRoZSBmaWxlIG5hbWUgdG8gdGhlIHBhdGguCisJICovCisJaWYgKCpmbmFtZSAhPSBOVUwpCisJeworCSAgICBsID0gU1RSTEVOKGJ1Zik7CisJICAgIGlmIChsID4gMCAmJiBidWZbbCAtIDFdICE9ICcvJyAmJiBidWZbbCAtIDFdICE9ICdcXCcpCisJCXN0cmNhdChidWYsIHBzZXBzKTsKKwkgICAgc3RyY2F0KGJ1ZiwgZm5hbWUpOworCX0KKwlyZXR1cm4gcmV0dmFsOworIyBlbmRpZgorICAgIH0KKyNlbmRpZgorfQorCisvKgorICogUmVwbGFjZSBhbGwgc2xhc2hlcyBieSBiYWNrc2xhc2hlcy4KKyAqIFRoaXMgdXNlZCB0byBiZSB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgYnV0IE1TLURPUyBzb21ldGltZXMgaGFzIHByb2JsZW1zCisgKiB3aXRoIHNsYXNoZXMgKGUuZy4gaW4gYSBjb21tYW5kIG5hbWUpLiAgV2UgY2FuJ3QgaGF2ZSBtaXhlZCBzbGFzaGVzIGFuZAorICogYmFja3NsYXNoZXMsIGJlY2F1c2UgY29tcGFyaW5nIGZpbGUgbmFtZXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuICBUaGUKKyAqIGNvbW1hbmRzIHRoYXQgdXNlIGEgZmlsZSBuYW1lIHNob3VsZCB0cnkgdG8gYXZvaWQgdGhlIG5lZWQgdG8gdHlwZSBhCisgKiBiYWNrc2xhc2ggdHdpY2UuCisgKiBXaGVuICdzaGVsbHNsYXNoJyBzZXQgZG8gaXQgdGhlIG90aGVyIHdheSBhcm91bmQuCisgKi8KKyAgICB2b2lkCitzbGFzaF9hZGp1c3QoY2hhcl91ICpwKQoreworI2lmZGVmIE9MRF9ESkdQUCAgICAvKiB0aGlzIHNlZW1zIHRvIGhhdmUgYmVlbiBmaXhlZCBpbiBESkdQUCAyLjAxICovCisgICAgLyogREpHUFAgY2FuJ3QgaGFuZGxlIGEgZmlsZSBuYW1lIHRoYXQgc3RhcnRzIHdpdGggYSBiYWNrc2xhc2gsIGFuZCB3aGVuIGl0CisgICAgICogc3RhcnRzIHdpdGggYSBzbGFzaCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja3NsYXNoZXMgKi8KKyAgICBpZiAoKnAgPT0gJ1xcJyB8fCAqcCA9PSAnLycpCisJd2hpbGUgKCpwKQorCXsKKwkgICAgaWYgKCpwID09ICdcXCcpCisJCSpwID0gJy8nOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOworCSAgICBlbHNlCisjZW5kaWYKKwkJKytwOworCX0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB3aGlsZSAoKnApCisgICAgeworCWlmICgqcCA9PSBwc2VwY04pCisJICAgICpwID0gcHNlcGM7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKTsKKwllbHNlCisjZW5kaWYKKwkgICAgKytwOworICAgIH0KK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmICJmbmFtZSIgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAqLworICAgIGludAorbWNoX2lzRnVsbE5hbWUoY2hhcl91ICpmbmFtZSkKK3sKKyAgICAvKiBBIG5hbWUgbGlrZSAiZDovZm9vIiBhbmQgIi8vc2VydmVyL3NoYXJlIiBpcyBhYnNvbHV0ZSAqLworICAgIHJldHVybiAoZm5hbWVbMF0gIT0gTlVMICYmIGZuYW1lWzFdID09ICc6JworCQkJCSAgICAgJiYgKGZuYW1lWzJdID09ICcvJyB8fCBmbmFtZVsyXSA9PSAnXFwnKSkKKwl8fCAoZm5hbWVbMF0gPT0gZm5hbWVbMV0gJiYgKGZuYW1lWzBdID09ICcvJyB8fCBmbmFtZVswXSA9PSAnXFwnKSk7Cit9CisKKworICAgIHZvaWQKK21jaF9lYXJseV9pbml0KHZvaWQpCit7Cit9CisKKy8qCisgKiBDYXJlZnVsOiBtY2hfZXhpdCgpIG1heSBiZSBjYWxsZWQgYmVmb3JlIG1jaF9pbml0KCkhCisgKi8KKyAgICB2b2lkCittY2hfZXhpdChpbnQgcikKK3sKKyAgICBzZXR0bW9kZShUTU9ERV9DT09LKTsKKyAgICBzdG9wdGVybWNhcCgpOworICAgIHNldF9pbnRlcnJ1cHRzKEZBTFNFKTsJICAgIC8qIHJlc3RvcmUgaW50ZXJydXB0cyAqLworI2lmZGVmIERKR1BQCisgICAgc2V0X3N5c19jdXJzb3IoKTsKKyNlbmRpZgorICAgIC8qIFNvbWVob3cgb3V0cHV0dGluZyBDUi1OTCBjYXVzZXMgdGhlIG9yaWdpbmFsIGNvbG9ycyB0byBiZSByZXN0b3JlZCAqLworICAgIG91dF9jaGFyKCdccicpOworICAgIG91dF9jaGFyKCdcbicpOworICAgIG91dF9mbHVzaCgpOworICAgIG1sX2Nsb3NlX2FsbChUUlVFKTsJCSAgICAvKiByZW1vdmUgYWxsIG1lbWZpbGVzICovCisjaWZkZWYgTUNIX0NVUlNPUl9TSEFQRQorICAgIG1jaF9yZXN0b3JlX2N1cnNvcl9zaGFwZShUUlVFKTsKKyNlbmRpZgorICAgIGV4aXQocik7Cit9CisKKy8qCisgKiBzZXQgdGhlIHR0eSBpbiAocmF3KSA/ICJyYXciIDogImNvb2tlZCIgbW9kZQorICogRG9lcyBub3QgY2hhbmdlIHRoZSB0dHksIGFzIGJpb3NrZXkoKSBhbmQga2JoaXQoKSB3b3JrIHJhdyBhbGwgdGhlIHRpbWUuCisgKi8KKyAgICB2b2lkCittY2hfc2V0dG1vZGUoaW50IHRtb2RlKQoreworfQorCisjaWZkZWYgRkVBVF9NT1VTRQorICAgIHZvaWQKK21jaF9zZXRtb3VzZShpbnQgb24pCit7CisgICAgbW91c2VfYWN0aXZlID0gb247CisgICAgbW91c2VfaGlkZGVuID0gVFJVRTsJLyogZG9udCBzaG93IGl0IHVudGlsIG1vdmVkICovCit9CisjZW5kaWYKKworLyoKKyAqIHNldCBzY3JlZW4gbW9kZQorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CittY2hfc2NyZWVubW9kZShjaGFyX3UgKmFyZykKK3sKKyAgICBpbnQJCSAgICBtb2RlOworICAgIGludAkJICAgIGk7CisgICAgc3RhdGljIGNoYXIJICAgKihuYW1lc1tdKSA9IHsiQlc0MCIsICJDNDAiLCAiQlc4MCIsICJDODAiLCAiTU9OTyIsICJDNDM1MCJ9OworICAgIHN0YXRpYyBpbnQJICAgIG1vZGVzW10gICA9IHsgQlc0MCwJICBDNDAsCSBCVzgwLAkgQzgwLAlNT05PLAlDNDM1MH07CisKKyAgICBtb2RlID0gLTE7CisgICAgaWYgKFZJTV9JU0RJR0lUKCphcmcpKQkJICAgIC8qIG1vZGUgbnVtYmVyIGdpdmVuICovCisJbW9kZSA9IGF0b2koKGNoYXIgKilhcmcpOworICAgIGVsc2UKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihuYW1lcykgLyBzaXplb2YoY2hhcl91ICopOyArK2kpCisJICAgIGlmIChzdHJpY21wKG5hbWVzW2ldLCAoY2hhciAqKWFyZykgPT0gMCkKKwkgICAgeworCQltb2RlID0gbW9kZXNbaV07CisJCWJyZWFrOworCSAgICB9CisgICAgfQorICAgIGlmIChtb2RlID09IC0xKQorICAgIHsKKwlFTVNHKCJFMzYyOiBVbnN1cHBvcnRlZCBzY3JlZW4gbW9kZSIpOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICB0ZXh0bW9kZShtb2RlKTsJCSAgICAvKiB1c2UgQm9ybGFuZCBmdW5jdGlvbiAqLworI2lmZGVmIERKR1BQCisgICAgLyogYmFzZSBhZGRyZXNzIG1heSBoYXZlIGNoYW5nZWQgKi8KKyAgICBnZXRfc2NyZWVuYmFzZSgpOworI2VuZGlmCisKKyAgICAvKiBTY3JlZW4gY29sb3JzIG1heSBoYXZlIGNoYW5nZWQuICovCisgICAgb3V0X3N0cihUX01FKTsKKworI2lmZGVmIEZFQVRfTU9VU0UKKyAgICBpZiAobW9kZSA8PSAxIHx8IG1vZGUgPT0gNCB8fCBtb2RlID09IDUgfHwgbW9kZSA9PSAxMyB8fCBtb2RlID09IDB4MTMpCisJbW91c2VfeF9kaXYgPSAxNjsKKyAgICBlbHNlCisJbW91c2VfeF9kaXYgPSA4OworICAgIGlmIChtb2RlID09IDB4MTEgfHwgbW9kZSA9PSAweDEyKQorCW1vdXNlX3lfZGl2ID0gMTY7CisgICAgZWxzZSBpZiAobW9kZSA9PSAweDEwKQorCW1vdXNlX3lfZGl2ID0gMTQ7CisgICAgZWxzZQorCW1vdXNlX3lfZGl2ID0gODsKKyAgICBzaGVsbF9yZXNpemVkKCk7CisjZW5kaWYKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCBieSBUdXJiby1DL0JvcmxhbmQtQyB0byBzdG9yZSB2aWRlbyBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIERKR1BQCitleHRlcm4gc3RydWN0IHRleHRfaW5mbyBfdmlkZW87CisjZW5kaWYKKworLyoKKyAqIHRyeSB0byBnZXQgdGhlIHJlYWwgd2luZG93IHNpemUKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAorbWNoX2dldF9zaGVsbHNpemUodm9pZCkKK3sKKyAgICBzdHJ1Y3QgdGV4dF9pbmZvIHRleHRpbmZvOworCisgICAgLyoKKyAgICAgKiBUaGUgc2NyZWVud2lkdGggaXMgcmV0dXJuZWQgYnkgdGhlIEJJT1MgT0suCisgICAgICogVGhlIHNjcmVlbmhlaWdodCBpcyBpbiBhIGxvY2F0aW9uIGluIHRoZSBiaW9zIFJBTSwgaWYgdGhlIGRpc3BsYXkgaXMKKyAgICAgKiBFR0Egb3IgVkdBLgorICAgICAqLworICAgIGlmICghdGVybV9jb25zb2xlKQorCXJldHVybiBGQUlMOworICAgIGdldHRleHRpbmZvKCZ0ZXh0aW5mbyk7CisgICAgQ29sdW1ucyA9IHRleHRpbmZvLnNjcmVlbndpZHRoOworICAgIFJvd3MgPSB0ZXh0aW5mby5zY3JlZW5oZWlnaHQ7CisjaWZuZGVmIERKR1BQCisgICAgaWYgKHRleHRpbmZvLmN1cnJtb2RlID4gMTApCisJUm93cyA9ICooY2hhciBmYXIgKilNS19GUCgweDQwLCAweDg0KSArIDE7CisjZW5kaWYKKworICAgIGlmIChDb2x1bW5zIDwgTUlOX0NPTFVNTlMgfHwgUm93cyA8IE1JTl9MSU5FUykKKyAgICB7CisJLyogdGhlc2UgdmFsdWVzIGFyZSBvdmVyd3JpdHRlbiBieSB0ZXJtY2FwIHNpemUgb3IgZGVmYXVsdCAqLworCUNvbHVtbnMgPSA4MDsKKwlSb3dzID0gMjU7CisJcmV0dXJuIEZBSUw7CisgICAgfQorI2lmZGVmIERKR1BQCisgICAgbXl0ZXh0aW5pdCgmdGV4dGluZm8pOyAgIC8qIEFkZGVkIGJ5IEpNTCwgMS8xNS85OCAqLworI2VuZGlmCisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBTZXQgdGhlIGFjdGl2ZSB3aW5kb3cgZm9yIGRlbGxpbmUvaW5zbGluZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfd2luZG93KHZvaWQpCit7CisgICAgaWYgKHRlcm1fY29uc29sZSkKKyAgICB7CisjaWZuZGVmIERKR1BQCisJX3ZpZGVvLnNjcmVlbmhlaWdodCA9IFJvd3M7CisjZW5kaWYKKwlteXdpbmRvdygxLCAxLCBDb2x1bW5zLCBSb3dzKTsKKyAgICB9CisgICAgc2NyZWVuX3N0YXJ0KCk7Cit9CisKKyAgICB2b2lkCittY2hfc2V0X3NoZWxsc2l6ZSh2b2lkKQoreworICAgIC8qIFNob3VsZCB0cnkgdG8gc2V0IHRoZSB3aW5kb3cgc2l6ZSB0byBSb3dzIGFuZCBDb2x1bW5zLgorICAgICAqIE1heSBpbnZvbHZlIHN3aXRjaGluZyBkaXNwbGF5IG1vZGUuLi4uCisgICAgICogV2UgYXNzdW1lIHRoZSB1c2VyIGtub3dzIHRoZSBzaXplIGFuZCBqdXN0IHVzZSBpdC4gKi8KK30KKworLyoKKyAqIFJvd3MgYW5kL29yIENvbHVtbnMgaGFzIGNoYW5nZWQuCisgKi8KKyAgICB2b2lkCittY2hfbmV3X3NoZWxsc2l6ZSgpCit7CisjaWZkZWYgRkVBVF9NT1VTRQorICAgIC8qIGJlc3QgZ3Vlc3MgZm9yIG1vdXNlIGNvb3JkaW5hdGUgY29tcHV0YXRpb25zICovCisgICAgaWYgKENvbHVtbnMgPD0gNDApCisJbW91c2VfeF9kaXYgPSAxNjsKKyAgICBpZiAoUm93cyA9PSAzMCkKKwltb3VzZV95X2RpdiA9IDE2OworI2VuZGlmCisgICAgc2V0X3dpbmRvdygpOworI2lmZGVmIEZFQVRfTU9VU0UKKyAgICBtb3VzZV9hcmVhKCk7CS8qIHNldCBhcmVhIHdoZXJlIG1vdXNlIGNhbiBnbyAqLworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKERKR1BQKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENoZWNrIHRoZSBudW1iZXIgb2YgQ29sdW1ucyB3aXRoIGEgQklPUyBjYWxsLiAgVGhpcyBhdm9pZHMgYSBjcmFzaCBvZiB0aGUKKyAqIERPUyBjb25zb2xlIHdoZW4gJ2NvbHVtbnMnIGlzIHNldCB0byBhIHRvbyBsYXJnZSB2YWx1ZS4KKyAqLworICAgIHZvaWQKK21jaF9jaGVja19jb2x1bW5zKCkKK3sKKyAgICBzdGF0aWMgdW5pb24gUkVHUwlyZWdzOworCisgICAgcmVncy5oLmFoID0gMHgwZjsKKyAgICAodm9pZClpbnQ4NigweDEwLCAmcmVncywgJnJlZ3MpOworICAgIGlmICgodW5zaWduZWQpQ29sdW1ucyA+ICh1bnNpZ25lZClyZWdzLmguYWgpCisJQ29sdW1ucyA9ICh1bnNpZ25lZClyZWdzLmguYWg7Cit9CisjZW5kaWYKKworLyoKKyAqIGNhbGwgc2hlbGwsIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqIG9wdGlvbnM6IFNIRUxMXyosIHNlZSB2aW0uaC4KKyAqLworICAgIGludAorbWNoX2NhbGxfc2hlbGwoCisgICAgY2hhcl91CSpjbWQsCisgICAgaW50CQlvcHRpb25zKQoreworICAgIGludAkJeDsKKyAgICBpbnQJCXRtb2RlID0gY3VyX3Rtb2RlOworI2lmbmRlZiBESkdQUAorICAgIGNoYXJfdQkqbmV3Y21kOworI2VuZGlmCisKKyAgICBvdXRfZmx1c2goKTsKKyNpZmRlZiBESkdQUAorICAgIHNldF9zeXNfY3Vyc29yKCk7CisjZW5kaWYKKworICAgIGlmIChvcHRpb25zICYgU0hFTExfQ09PS0VEKQorCXNldHRtb2RlKFRNT0RFX0NPT0spOwkvKiBzZXQgdG8gbm9ybWFsIG1vZGUgKi8KKyAgICBzZXRfaW50ZXJydXB0cyhGQUxTRSk7CS8qIHJlc3RvcmUgaW50ZXJydXB0cyAqLworCisjaWZkZWYgREpHUFAKKyAgICAvKiBpZ25vcmUgc2lnbmFscyB3aGlsZSBleHRlcm5hbCBjb21tYW5kIGlzIHJ1bm5pbmcgKi8KKyAgICBzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKyAgICBzaWduYWwoU0lHSFVQLCBTSUdfSUdOKTsKKyAgICBzaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7CisgICAgc2lnbmFsKFNJR1RFUk0sIFNJR19JR04pOworI2VuZGlmCisgICAgaWYgKGNtZCA9PSBOVUxMKQorCXggPSBzeXN0ZW0oKGNoYXIgKilwX3NoKTsKKyAgICBlbHNlCisgICAgeworI2lmZGVmIERKR1BQCisJLyoKKwkgKiBVc2UgJ3NoZWxsJyBmb3Igc3lzdGVtKCkuCisJICovCisJc2V0ZW52KCJTSEVMTCIsIChjaGFyICopcF9zaCwgMSk7CisJeCA9IHN5c3RlbShjbWQpOworI2Vsc2UKKwkvKiB3ZSB1c2UgImNvbW1hbmQiIHRvIHN0YXJ0IHRoZSBzaGVsbCwgc2xvdyBidXQgZWFzeSAqLworCW5ld2NtZCA9IGFsbG9jKFNUUkxFTihwX3NoKSArIFNUUkxFTihwX3NoY2YpICsgU1RSTEVOKGNtZCkgKyAzKTsKKwlpZiAobmV3Y21kID09IE5VTEwpCisJICAgIHggPSAtMTsKKwllbHNlCisJeworCSAgICBzcHJpbnRmKChjaGFyICopbmV3Y21kLCAiJXMgJXMgJXMiLCBwX3NoLCBwX3NoY2YsIGNtZCk7CisJICAgIHggPSBzeXN0ZW0oKGNoYXIgKiluZXdjbWQpOworCSAgICB2aW1fZnJlZShuZXdjbWQpOworCX0KKyNlbmRpZgorICAgIH0KKyNpZmRlZiBESkdQUAorICAgIHNpZ25hbChTSUdJTlQsIFNJR19ERkwpOworICAgIHNpZ25hbChTSUdIVVAsIFNJR19ERkwpOworICAgIHNpZ25hbChTSUdRVUlULCBTSUdfREZMKTsKKyAgICBzaWduYWwoU0lHVEVSTSwgU0lHX0RGTCk7CisjZW5kaWYKKyAgICBpZiAodG1vZGUgPT0gVE1PREVfUkFXKQorCXNldHRtb2RlKFRNT0RFX1JBVyk7CS8qIHNldCB0byByYXcgbW9kZSAqLworICAgIHNldF9pbnRlcnJ1cHRzKFRSVUUpOwkvKiBjYXRjaCBpbnRlcnJ1cHRzICovCisKKyAgICBpZiAoeCAmJiAhKG9wdGlvbnMgJiBTSEVMTF9TSUxFTlQpICYmICFlbXNnX3NpbGVudCkKKyAgICB7CisJTVNHX1BVVFMoIlxuc2hlbGwgcmV0dXJuZWQgIik7CisJbXNnX291dG51bSgobG9uZyl4KTsKKwltc2dfcHV0Y2hhcignXG4nKTsKKyAgICB9CisKKyAgICByZXR1cm4geDsKK30KKworLyoKKyAqIGNoZWNrIGZvciBhbiAiaW50ZXJydXB0IHNpZ25hbCI6IENUUkwtYnJlYWsgb3IgQ1RSTC1DCisgKi8KKyAgICB2b2lkCittY2hfYnJlYWtjaGVjayh2b2lkKQoreworICAgIGlmIChjdHJsY19wcmVzc2VkKQorICAgIHsKKwljdHJsY19wcmVzc2VkID0gRkFMU0U7CisJZ290X2ludCA9IFRSVUU7CisgICAgfQorfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgInAiIGNvbnRhaW4gYSB3aWxkY2FyZCB0aGF0IGNhbiBiZSBleHBhbmRlZCBieQorICogZG9zX2V4cGFuZHBhdGgoKS4KKyAqLworICAgIGludAorbWNoX2hhc19leHBfd2lsZGNhcmQoY2hhcl91ICpwKQoreworICAgIGZvciAoIDsgKnA7ICsrcCkKKyAgICB7CisJaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSI/KlsiLCAqcCkgIT0gTlVMTAorCQl8fCAoKnAgPT0gJ34nICYmIHBbMV0gIT0gTlVMKSkKKwkgICAgcmV0dXJuIFRSVUU7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgInAiIGNvbnRhaW4gYSB3aWxkY2FyZCBvciBhICJ+MSIga2luZCBvZiB0aGluZyAoY291bGQgYmUgYQorICogc2hvcnRlbmVkIGZpbGUgbmFtZSkuCisgKi8KKyAgICBpbnQKK21jaF9oYXNfd2lsZGNhcmQoY2hhcl91ICpwKQoreworICAgIGZvciAoIDsgKnA7ICsrcCkKKyAgICB7CisJaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKQorIyAgaWZkZWYgVklNX0JBQ0tUSUNLCisJCQkJICAgICI/KiRbYCIKKyMgIGVsc2UKKwkJCQkgICAgIj8qJFsiCisjICBlbmRpZgorCQkJCQkJLCAqcCkgIT0gTlVMTAorCQl8fCAoKnAgPT0gJ34nICYmIHBbMV0gIT0gTlVMKSkKKwkgICAgcmV0dXJuIFRSVUU7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogQ2hhbmdlIGRpcmVjdG9yeSB0byAicGF0aCIuCisgKiBUaGUgbm9ybWFsIGNoZGlyKCkgZG9lcyBub3QgY2hhbmdlIHRoZSBkZWZhdWx0IGRyaXZlLiAgVGhpcyBvbmUgZG9lcy4KKyAqIFJldHVybiAwIGZvciBzdWNjZXNzLCAtMSBmb3IgZmFpbHVyZS4KKyAqLworICAgIGludAorbWNoX2NoZGlyKGNoYXIgKnBhdGgpCit7CisgICAgaWYgKHBhdGhbMF0gPT0gTlVMKQkJICAgIC8qIGp1c3QgY2hlY2tpbmcuLi4gKi8KKwlyZXR1cm4gMDsKKyAgICBpZiAocGF0aFsxXSA9PSAnOicpCQkgICAgLyogaGFzIGEgZHJpdmUgbmFtZSAqLworICAgIHsKKwlpZiAoY2hhbmdlX2RyaXZlKFRPTE9XRVJfQVNDKHBhdGhbMF0pIC0gJ2EnICsgMSkpCisJICAgIHJldHVybiAtMTsJCSAgICAvKiBpbnZhbGlkIGRyaXZlIG5hbWUgKi8KKwlwYXRoICs9IDI7CisgICAgfQorICAgIGlmICgqcGF0aCA9PSBOVUwpCQkgICAgLyogZHJpdmUgbmFtZSBvbmx5ICovCisJcmV0dXJuIDA7CisgICAgcmV0dXJuIGNoZGlyKHBhdGgpOwkJICAgIC8qIGxldCB0aGUgbm9ybWFsIGNoZGlyKCkgZG8gdGhlIHJlc3QgKi8KK30KKworI2lmZGVmIERKR1BQCisvKgorICogbWNoX3JlbmFtZSgpIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiByZW5hbWUgKGFrYSBNb3ZlRmlsZSkgaW4KKyAqIFdpbmRvd3MgOTU6IHJlbmFtZSgiZm9vLmJhciIsICJmb28uYmFyfiIpIHdpbGwgZ2VuZXJhdGUgYQorICogZmlsZSB3aG9zZSBzaG9ydCBmaWxlIG5hbWUgaXMgIkZPTy5CQVIiIChpdHMgbG9uZyBmaWxlIG5hbWUgd2lsbAorICogYmUgY29ycmVjdDogImZvby5iYXJ+IikuICBCZWNhdXNlIGEgZmlsZSBjYW4gYmUgYWNjZXNzZWQgYnkKKyAqIGVpdGhlciBpdHMgU0ZOIG9yIGl0cyBMRk4sICJmb28uYmFyIiBoYXMgZWZmZWN0aXZlbHkgYmVlbgorICogcmVuYW1lZCB0byAiZm9vLmJhciIsIHdoaWNoIGlzIG5vdCBhdCBhbGwgd2hhdCB3YXMgd2FudGVkLiAgVGhpcworICogc2VlbXMgdG8gaGFwcGVuIG9ubHkgd2hlbiByZW5hbWluZyBmaWxlcyB3aXRoIHRocmVlLWNoYXJhY3RlcgorICogZXh0ZW5zaW9ucyBieSBhcHBlbmRpbmcgYSBzdWZmaXggdGhhdCBkb2VzIG5vdCBpbmNsdWRlICIuIi4KKyAqIFdpbmRvd3MgTlQgZ2V0cyBpdCByaWdodCwgaG93ZXZlciwgd2l0aCBhbiBTRk4gb2YgIkZPT34xLkJBUiIuCisgKiBUaGlzIHdvcmtzIGxpa2UgbWNoX3JlbmFtZSBpbiBvc193aW4zMi5jLCBidXQgaXMgYSBiaXQgc2ltcGxlci4KKyAqCisgKiBMaWtlIHJlbmFtZSgpLCByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLCBub24temVybyB1cG9uIGZhaWx1cmUuCisgKiBTaG91bGQgcHJvYmFibHkgc2V0IGVycm5vIGFwcHJvcHJpYXRlbHkgd2hlbiBlcnJvcnMgb2NjdXIuCisgKi8KKworICAgIGludAorbWNoX3JlbmFtZShjb25zdCBjaGFyICpPbGRGaWxlLCBjb25zdCBjaGFyICpOZXdGaWxlKQoreworICAgIGNoYXJfdSAgKlRlbXBGaWxlOworICAgIGludAkgICAgcmV0dmFsOworICAgIGludAkgICAgZmQ7CisKKyAgICAvKiByZW5hbWUoKSB3b3JrcyBjb3JyZWN0bHkgd2l0aG91dCBsb25nIGZpbGUgbmFtZXMsIHNvIHVzZSB0aGF0ICovCisgICAgaWYgKCFfVVNFX0xGTikKKwlyZXR1cm4gcmVuYW1lKE9sZEZpbGUsIE5ld0ZpbGUpOworCisgICAgaWYgKChUZW1wRmlsZSA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKE9sZEZpbGUpICsgMTMpKSkgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisKKyAgICBTVFJDUFkoVGVtcEZpbGUsIE9sZEZpbGUpOworICAgIFNUUkNQWShnZXR0YWlsKFRlbXBGaWxlKSwgImF4bHF3cWh5LmJhfiIpOworICAgIGlmIChyZW5hbWUoT2xkRmlsZSwgVGVtcEZpbGUpKQorCXJldHZhbCA9IC0xOworICAgIGVsc2UKKyAgICB7CisJLyogbm93IGNyZWF0ZSBhbiBlbXB0eSBmaWxlIGNhbGxlZCBPbGRGaWxlOyB0aGlzIHByZXZlbnRzCisJICogdGhlIG9wZXJhdGluZyBzeXN0ZW0gdXNpbmcgT2xkRmlsZSBhcyBhbiBhbGlhcyAoU0ZOKQorCSAqIGlmIHdlJ3JlIHJlbmFtaW5nIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwKKwkgKiB3ZSdyZSBlZGl0aW5nIGEgZmlsZSBjYWxsZWQgZmlsZW5hbWUuYXNjLnR4dCBieSBpdHMgU0ZOLAorCSAqIGZpbGVuYX4xLnR4dC4gIElmIHdlIHJlbmFtZSBmaWxlbmF+MS50eHQgdG8gZmlsZW5hfjEudHh0fgorCSAqIChpLmUuLCB3ZSdyZSBtYWtpbmcgYSBiYWNrdXAgd2hpbGUgd3JpdGluZyBpdCksIHRoZSBTRk4KKwkgKiBmb3IgZmlsZW5hfjEudHh0fiB3aWxsIGJlIGZpbGVuYX4xLnR4dCwgYnkgZGVmYXVsdCwgd2hpY2gKKwkgKiB3aWxsIGNhdXNlIGFsbCBzb3J0cyBvZiBwcm9ibGVtcyBsYXRlciBpbiBidWZfd3JpdGUuICBTbywgd2UKKwkgKiBjcmVhdGUgYW4gZW1wdHkgZmlsZSBjYWxsZWQgZmlsZW5hfjEudHh0IGFuZCB0aGUgc3lzdGVtIHdpbGwgaGF2ZQorCSAqIHRvIGZpbmQgc29tZSBvdGhlciBTRk4gZm9yIGZpbGVuYX4xLnR4dH4sIHN1Y2ggYXMgZmlsZW5hfjIudHh0CisJICovCisJaWYgKChmZCA9IG9wZW4oT2xkRmlsZSwgT19SRFdSfE9fQ1JFQVR8T19FWENMLCAwNDQ0KSkgPCAwKQorCSAgICByZXR1cm4gLTE7CisJcmV0dmFsID0gcmVuYW1lKFRlbXBGaWxlLCBOZXdGaWxlKTsKKwljbG9zZShmZCk7CisJbWNoX3JlbW92ZSgoY2hhcl91ICopT2xkRmlsZSk7CisKKwkvKiBJZiByZW5hbWluZyB0byBOZXdGaWxlIGZhaWxlZCwgcmVuYW1lIFRlbXBGaWxlIGJhY2sgdG8gT2xkRmlsZSwgc28KKwkgKiB0aGF0IGl0IGxvb2tzIGxpa2Ugbm90aGluZyBoYXBwZW5lZC4gKi8KKwlpZiAocmV0dmFsKQorCSAgICByZW5hbWUoVGVtcEZpbGUsIE9sZEZpbGUpOworICAgIH0KKyAgICB2aW1fZnJlZShUZW1wRmlsZSk7CisKKyAgICByZXR1cm4gcmV0dmFsOyAgLyogc3VjY2VzcyAqLworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKERKR1BQKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIHNldGxvY2FsZSgpIGZvciBESkdQUCB3aXRoIE1TLURPUyBjb2RlcGFnZSBzdXBwb3J0CisgKiBBdXRob3I6IEN5cmlsIFNsb2JpbiA8c2xvYmluQGZlLm1zay5ydT4KKyAqCisgKiBTY2FsZWQgZG93biBhIGxvdCBmb3IgdXNlIGJ5IFZpbTogT25seSBzdXBwb3J0IHNldGxvY2FsZShMQ19BTEwsICIiKS4KKyAqLworCisjdW5kZWYgc2V0bG9jYWxlCisKKyNpbmNsdWRlIDxnbzMyLmg+CisjaW5jbHVkZSA8aW5saW5lcy9jdHlwZS5oYT4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworI2RlZmluZSBVUENBU0UgKF9fZGpfSVNBTE5VTSB8IF9fZGpfSVNBTFBIQSB8IF9fZGpfSVNHUkFQSCB8IF9fZGpfSVNQUklOVCB8IF9fZGpfSVNVUFBFUikKKyNkZWZpbmUgTE9DQVNFIChfX2RqX0lTQUxOVU0gfCBfX2RqX0lTQUxQSEEgfCBfX2RqX0lTR1JBUEggfCBfX2RqX0lTUFJJTlQgfCBfX2RqX0lTTE9XRVIpCisKKyAgICBjaGFyICoKK2RqZ3BwX3NldGxvY2FsZSh2b2lkKQoreworICAgIF9fZHBtaV9yZWdzIHJlZ3M7CisgICAgc3RydWN0IHsgY2hhciBpZDsgdW5zaWduZWQgc2hvcnQgb2ZmLCBzZWc7IH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGluZm87CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMHg4Ml0sIGxvd2VyLCB1cHBlcjsKKyAgICBpbnQgaTsKKworICAgIHJlZ3MueC5heCA9IDB4NjUwMjsKKyAgICByZWdzLnguYnggPSAweGZmZmY7CisgICAgcmVncy54LmR4ID0gMHhmZmZmOworICAgIHJlZ3MueC5jeCA9IDU7CisgICAgcmVncy54LmVzID0gX190YiA+PiA0OworICAgIHJlZ3MueC5kaSA9IF9fdGIgJiAweGY7CisKKyAgICBfX2RwbWlfaW50KDB4MjEsICZyZWdzKTsKKworICAgIGlmIChyZWdzLnguZmxhZ3MgJiAxKQorCXJldHVybiBOVUxMOworCisgICAgZG9zbWVtZ2V0KF9fdGIsIDUsICZpbmZvKTsKKyAgICBkb3NtZW1nZXQoKGluZm8uc2VnIDw8IDQpICsgaW5mby5vZmYsIDB4ODIsIGJ1ZmZlcik7CisKKyAgICBpZiAoKihzaG9ydCAqKWJ1ZmZlciAhPSAweDgwKQorCXJldHVybiBOVUxMOworCisgICAgLyogRml4IHByb2JsZW0gb2YgdW5kZXJzY29yZXMgYmVpbmcgcmVwbGFjZWQgd2l0aCB5LXVtbGF1dC4gKExldmluKSAqLworICAgIGlmIChidWZmZXJbMjZdID09IDB4NWYpCisJYnVmZmVyWzI2XSA9IDB4OTg7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMHg4MDsgaSsrKQorICAgIHsKKwlsb3dlciA9IGkgKyAweDgwOworCXVwcGVyID0gKGJ1ZmZlcisyKVtpXTsKKwlpZiAobG93ZXIgIT0gdXBwZXIpCisJeworCSAgICBfX2RqX2N0eXBlX2ZsYWdzW2xvd2VyKzFdID0gTE9DQVNFOworCSAgICBfX2RqX2N0eXBlX3RvdXBwZXJbbG93ZXIrMV0gPSB1cHBlcjsKKwkgICAgaWYgKF9fZGpfY3R5cGVfZmxhZ3NbdXBwZXIrMV0gPT0gMCkKKwkJX19kal9jdHlwZV9mbGFnc1t1cHBlcisxXSA9IFVQQ0FTRTsKKwkgICAgaWYgKF9fZGpfY3R5cGVfdG9sb3dlclt1cHBlcisxXSA9PSB1cHBlcikKKwkJX19kal9jdHlwZV90b2xvd2VyW3VwcGVyKzFdID0gbG93ZXI7CisJfQorICAgIH0KKworICAgIHJldHVybiAiQyI7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogQ2xpcGJvYXJkIHN0dWZmLCBmb3IgY3V0dGluZyBhbmQgcGFzdGluZyB0ZXh0IHRvIG90aGVyIHdpbmRvd3MuCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgRE9TL1dpbmRvd3MgY2xpcGJvYXJkIGRhdGEgdHJhbnNmZXIKKyAqIGJ5IERhdmlkIEtvdGNoYW4gKGRrb3RjaGFuQHN5bXBhdGljby5jYSkKKyAqLworCisjZGVmaW5lIENGX1RFWFQJICAgIDB4MDEgICAgLyogV2luZG93cyBjbGlwYm9hcmQgZm9ybWF0OiBXaW5kb3dzIChBTlNJKSB0ZXh0ICovCisjZGVmaW5lIENGX09FTVRFWFQgIDB4MDcgICAgLyogV2luZG93cyBjbGlwYm9hcmQgZm9ybWF0OiBPRU0gKERPUykgdGV4dCAqLworI2RlZmluZSBDRl9WSU1DTElQICAweDA0ICAgIC8qIHRyaWNrOiBTWUxLIGNsaXBib2FyZCBmb3JtYXQgZm9yIFZpbUNsaXBib2FyZCAqLworCitzdGF0aWMgaW50IFdpbjE2T3BlbkNsaXBib2FyZCh2b2lkKTsKK3N0YXRpYyBpbnQgV2luMTZDbG9zZUNsaXBib2FyZCh2b2lkKTsKK3N0YXRpYyBpbnQgV2luMTZFbXB0eUNsaXBib2FyZCh2b2lkKTsKK3N0YXRpYyBjaGFyX3UgKldpbjE2R2V0Q2xpcGJvYXJkRGF0YShpbnQgY2xpcF9kYXRhX2Zvcm1hdCk7CitzdGF0aWMgaW50IFdpbjE2U2V0Q2xpcGJvYXJkRGF0YShpbnQgY2xpcF9kYXRhX2Zvcm1hdCwgY2hhcl91ICpjbGlwX2RhdGEsIGludCBjbGlwX2RhdGFfc2l6ZSwgaW50IGNsaXBfZGF0YV90eXBlKTsKKworLyoKKyAqIE1ha2UgdmltIHRoZSBvd25lciBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uICBSZXR1cm4gT0sgdXBvbiBzdWNjZXNzLgorICovCisgICAgaW50CitjbGlwX21jaF9vd25fc2VsZWN0aW9uKFZpbUNsaXBib2FyZCAqY2JkKQoreworICAgIC8qCisgICAgICogTmV2ZXIgYWN0dWFsbHkgb3duIHRoZSBjbGlwYm9hcmQuICBJZiBhbm90aGVyIGFwcGxpY2F0aW9uIHNldHMgdGhlCisgICAgICogY2xpcGJvYXJkLCB3ZSBkb24ndCB3YW50IHRvIHRoaW5rIHRoYXQgd2Ugc3RpbGwgb3duIGl0LgorICAgICAqLworICAgIHJldHVybiBGQUlMOworfQorCisvKgorICogTWFrZSB2aW0gTk9UIHRoZSBvd25lciBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uCisgKi8KKyAgICB2b2lkCitjbGlwX21jaF9sb3NlX3NlbGVjdGlvbihWaW1DbGlwYm9hcmQgKmNiZCkKK3sKKyAgICAvKiBOb3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSAqLworfQorCisvKgorICogUmVhZCB0aGUgV2luZG93cyBjbGlwYm9hcmQgdGV4dCBhbmQgcHV0IGl0IGluIFZpbSdzIGNsaXBib2FyZCByZWdpc3Rlci4KKyAqLworICAgIHZvaWQKK2NsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uKFZpbUNsaXBib2FyZCAqY2JkKQoreworICAgIGludAkJdHlwZSA9IE1DSEFSOworICAgIGNoYXJfdQkqcEFsbG9jYXRlZCA9IE5VTEw7CisgICAgY2hhcl91CSpwQ2xpcFRleHQgPSBOVUxMOworICAgIGludAkJY2xpcF9kYXRhX2Zvcm1hdCA9IDA7CisKKyAgICBpZiAoV2luMTZPcGVuQ2xpcGJvYXJkKCkpCisgICAgeworCS8qIENoZWNrIGZvciBWaW0ncyBvd24gY2xpcGJvYXJkIGZvcm1hdCBmaXJzdC4gIFRoZSBDRl9WSU1DTElQIGZvcm1hdAorCSAqIGlzIGp1c3Qgb3JkaW5hcnkgdGV4dCAobGlrZSBDRl9URVhUKSBleGNlcHQgcHJlcGVuZGVkIGJ5IHRoZQorCSAqIHNlbGVjdGlvbiB0eXBlIChhcyBhIHNpbmdsZSBjaGFyYWN0ZXIpLiAgTm90ZSB0aGF0IHVuZGVyIERPUyB3ZQorCSAqIGFjdHVhbGx5IGNhbm5vdCBkZWZpbmUgYSBjdXN0b20gQ0ZfVklNQ0xJUCBjbGlwYm9hcmQgZm9ybWF0OyB3ZQorCSAqIHVzZSBpbnN0ZWFkIG9uZSBvZiB0aGUgZXhpc3RpbmcgV2luZG93cy1kZWZpbmVkIGZvcm1hdHMsIHVzdWFsbHkKKwkgKiAiRElGIiBvciAiU1lMSyIuICBTZWUgV2luMTZHZXRDbGlwYm9hcmREYXRhKCkgZm9yIGRldGFpbHMuCisJICoKKwkgKiBOb3RlIHRoYXQgV2luMTZHZXRDbGlwYm9hcmREYXRhKCkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CisJICogYmxvY2sgaXQgYWxsb2NhdGVkLiAgVGhpcyBpcyBub3QgbmVjZXNzYXJ5IHRoZSBzdGFydCBvZiB0aGUKKwkgKiBjbGlwYm9hcmQgdGV4dCBkYXRhOiB0aGVyZSBtYXkgYmUgb3RoZXIgYnl0ZXMgYWhlYWQgb2YgdGhlCisJICogdGV4dCAocGFydGljdWxhcmx5IGZvciBDRl9WSU1DTElQKSB3aGljaCBhcmUgdXNlZCBmb3IgZGF0YQorCSAqIG1hbmFnZW1lbnQuICBTbyBwQ2xpcFRleHQgaXMgbm90IG5lY2Vzc2FyaWx5ID09IHBBbGxvY2F0ZWQuCisJICovCisKKwlpZiAoKHBBbGxvY2F0ZWQgPSBXaW4xNkdldENsaXBib2FyZERhdGEoQ0ZfVklNQ0xJUCkpICE9IE5VTEwpCisJeworCSAgICBjbGlwX2RhdGFfZm9ybWF0ID0gQ0ZfVklNQ0xJUDsKKwkgICAgcENsaXBUZXh0ID0gcEFsbG9jYXRlZDsKKworCSAgICBzd2l0Y2ggKCpwQ2xpcFRleHQrKykJLyogYWZ0ZXIgKyssIHBDbGlwVGV4dCBwb2ludHMgdG8gdGV4dCAqLworCSAgICB7CisJCWRlZmF1bHQ6CisJCWNhc2UgJ0wnOgl0eXBlID0gTUxJTkU7CWJyZWFrOworCQljYXNlICdDJzoJdHlwZSA9IE1DSEFSOwlicmVhazsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQljYXNlICdCJzoJdHlwZSA9IE1CTE9DSzsJYnJlYWs7CisjZW5kaWYKKwkgICAgfQorCX0KKworCS8qIE90aGVyd2lzZSwgY2hlY2sgZm9yIHRoZSBub3JtYWwgV2luZG93cyB0ZXh0IGZvcm1hdHMuICBUaGVyZSBhcmUKKwkgKiB0d28gb2YgdGhlc2U6IENGX1RFWFQgKGNvbW1vbikgYW5kIENGX09FTVRFWFQgKHVzZWQgZm9yIERPUworCSAqIGNvbXBhdGliaWxpdHkpLiAgRXhwZXJpbWVudHMgc2hvdyB0aGF0LCB1bmRlciB0aGUgRE9TL1dpbmRvd3MKKwkgKiBjbGlwYm9hcmQgaW50ZXJmYWNlLCB3cml0aW5nIENGX1RFWFQgZGF0YSB0byB0aGUgY2xpcGJvYXJkCisJICogYXV0b21hdGljYWxseSBjcmVhdGVzIGEgQ0ZfT0VNVEVYVCBmb3JtYXQgYXMgd2VsbC4KKwkgKi8KKworCWVsc2UgaWYgKChwQWxsb2NhdGVkID0gV2luMTZHZXRDbGlwYm9hcmREYXRhKENGX1RFWFQpKSAhPSBOVUxMKQorCXsKKwkgICAgY2xpcF9kYXRhX2Zvcm1hdCA9IENGX1RFWFQ7CisJICAgIHBDbGlwVGV4dCA9IHBBbGxvY2F0ZWQ7CisJICAgIHR5cGUgPSAodmltX3N0cmNocigoY2hhciopcENsaXBUZXh0LCAnXHInKSAhPSBOVUxMKSA/IE1MSU5FIDogTUNIQVI7CisJfQorCisJZWxzZSBpZiAoKHBBbGxvY2F0ZWQgPSBXaW4xNkdldENsaXBib2FyZERhdGEoQ0ZfT0VNVEVYVCkpICE9IE5VTEwpCisJeworCSAgICBjbGlwX2RhdGFfZm9ybWF0ID0gQ0ZfT0VNVEVYVDsKKwkgICAgcENsaXBUZXh0ID0gcEFsbG9jYXRlZDsKKwkgICAgdHlwZSA9ICh2aW1fc3RyY2hyKChjaGFyKilwQ2xpcFRleHQsICdccicpICE9IE5VTEwpID8gTUxJTkUgOiBNQ0hBUjsKKwl9CisKKwkvKiBEaWQgd2UgZ2V0IGFueXRoaW5nPyAqLworCisJaWYgKHBDbGlwVGV4dCAhPSBOVUxMKQorCXsKKwkgICAgY2hhcl91ICpwRGVzdDsKKwkgICAgY2hhcl91ICpwU3RhcnQ7CisJICAgIGNoYXJfdSAqcEVuZDsKKworCSAgICBsb25nX3UgY2xpcF9kYXRhX3NpemUgPSAwOworCisJICAgIC8qIFRoZSBXaW5kb3dzIGNsaXBib2FyZCBub3JtYWxseSBzdG9yZXMgaXRzIHRleHQgbGluZXMgdGVybWluYXRlZAorCSAgICAgKiBieSA8Q1I+PE5MPi4gIEJ1dCBWaW0gdXNlcyBvbmx5IDxOTD4sIHNvIHRyYW5zbGF0ZSB0aGUgPENSPjxOTD4KKwkgICAgICogaW50byA8Tkw+LiAgQWxzbywgd2F0Y2ggZm9yIHBvc3NpYmxlIG51bGwgYnl0ZXMgYXQgdGhlIGVuZCBvZgorCSAgICAgKiBwQ2xpcFRleHQuICBUaGVzZSBhcmUgcGFkZGluZyBhZGRlZCBieSAiZ2V0X2NsaXBib2FyZF9kYXRhIgorCSAgICAgKiAoaW50IDB4MmYsIEFYPSAweDE3MDUpIGluIG9yZGVyIHRvIHJvdW5kIHRoZSBkYXRhIHNpemUgdXAgdG8gdGhlCisJICAgICAqIG5leHQgbXVsdGlwbGUgb2YgMzIgYnl0ZXMuICBTZWUgV2luMTZHZXRDbGlwYm9hcmREYXRhKCkgZm9yCisJICAgICAqIGRldGFpbHMuCisJICAgICAqLworCisJICAgIHBEZXN0ID0gc3Ryc3RyKCBwQ2xpcFRleHQsICJcclxuIiApOyAgICAvKiBmaW5kIGZpcnN0IDxDUj48Tkw+ICovCisKKwkgICAgaWYgKHBEZXN0ICE9IE5VTEwpCQkJLyogZm91bmQgb25lPyAqLworCSAgICB7CisJCXBTdGFydCA9IHBEZXN0ICsgMTsJCS8qIHBvaW50cyB0byA8Tkw+IGFmdGVyIDxDUj4gKi8KKwkJcEVuZCA9IHN0cnN0ciggcFN0YXJ0LCAiXHJcbiIgKTsvKiBmaW5kIG5leHQgPENSPjxOTD4gKi8KKworCQl3aGlsZSAocEVuZCAhPSBOVUxMKQkJLyogZm91bmQgb25lPyAqLworCQl7CisJCSAgICBtZW1tb3ZlKHBEZXN0LCBwU3RhcnQsIChsb25nKShwRW5kIC0gcFN0YXJ0KSk7CisJCQkJCQkJLyogZXhjbHVkZSA8Q1I+ICovCisJCSAgICBwRGVzdCArPSAobG9uZykocEVuZCAtIHBTdGFydCk7CS8qIG5ldyBkZXN0aW5hdGlvbiAqLworCQkgICAgcFN0YXJ0ID0gcEVuZCArIDE7CQkJLyogbmV3IHN0YXJ0aW5nIHBvaW50ICovCisJCSAgICBwRW5kID0gc3Ryc3RyKHBTdGFydCwgIlxyXG4iKTsJLyogZmluZCBuZXh0IDxDUj48Tkw+ICovCisJCX0KKworCQkvKiBGZWxsIG91dCBvZiB3aGlsZSgpIGxvb3A6IG5vIG1vcmUgPENSPjxOTD4gcGFpcnMuICBKdXN0IGNvcHkKKwkJICogdGhlIHJlc3Qgb2YgdGhlIGRhdGEsIHVwIHRvIHRoZSBmaXJzdCBudWxsIGJ5dGUuICAqLworCQlwRW5kID0gc3RyY2hyKHBTdGFydCwgJ1wwJyk7CQkvKiBmaW5kIGZpcnN0IG51bGwgKi8KKworCQltZW1tb3ZlKHBEZXN0LCBwU3RhcnQsIChsb25nKShwRW5kIC0gcFN0YXJ0KSk7IC8qIGV4Y2x1ZGUgbnVsICovCisJCXBEZXN0ICs9IChsb25nKShwRW5kIC0gcFN0YXJ0KTsKKwkJKnBEZXN0ID0gJ1wwJzsJCQkJICAgIC8qIHRlcm1pbmF0ZSAqLworCisJCS8qIE5vdyB0aGF0IGFsbCA8Q1I+PE5MPiBwYWlycyBoYXZlIGJlZW4gImNvbXByZXNzZWQiIGludG8ganVzdAorCQkgKiA8Tkw+J3MsIGRldGVybWluZSB0aGUgdHJ1ZSB0ZXh0IGxlbmd0aC4gICovCisJCWNsaXBfZGF0YV9zaXplID0gKGxvbmdfdSkocERlc3QgLSBwQ2xpcFRleHQpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBubyA8Q1I+PE5MPiBwYWlycyBhdCBhbGwgKi8KKwkJLyogU2luY2UgdGhlIGRhdGEgbWF5IGhhdmUgYmVlbiBwYWRkZWQgd2l0aCB0cmFpbGluZyBudWxscywKKwkJICogZGV0ZXJtaW5lIHRoZSB0cnVlIHN0cmluZyBsZW5ndGguICovCisJCWNsaXBfZGF0YV9zaXplID0gU1RSTEVOKHBDbGlwVGV4dCk7CS8qIHRydWUgZGF0YSBsZW5ndGggKi8KKwkgICAgfQorCisJICAgIC8qIENvcHkgdGhlIGNsZWFuZWQtdXAgZGF0YSBvdmVyIHRvIFZpbSdzIGNsaXBib2FyZCAiKiIgcmVnaXN0ZXIuICovCisJICAgIGNsaXBfeWFua19zZWxlY3Rpb24odHlwZSwgcENsaXBUZXh0LCBjbGlwX2RhdGFfc2l6ZSwgY2JkKTsKKworCSAgICAvKiBGcmVlIHRoZSBtZW1vcnkgdGhhdCBXaW4xNkdldENsaXBib2FyZERhdGEoKSBhbGxvY2F0ZWQuICovCisJICAgIHZpbV9mcmVlKHBBbGxvY2F0ZWQpOworCX0KKworCVdpbjE2Q2xvc2VDbGlwYm9hcmQoKTsKKworICAgIH0gIC8vIGVuZCBpZiAoV2luMTZPcGVuQ2xpcGJvYXJkKCkpCit9CisKKy8qCisgKiBTZW5kIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgVmltIHRleHQgdG8gdGhlIFdpbmRvd3MgY2xpcGJvYXJkLgorICovCisgICAgdm9pZAorY2xpcF9tY2hfc2V0X3NlbGVjdGlvbiggVmltQ2xpcGJvYXJkICpjYmQgKQoreworICAgIGNoYXJfdQkqcENsaXBEYXRhID0gTlVMTDsKKyAgICBsb25nX3UJY2xpcF9kYXRhX3NpemU7CisgICAgaW50CQljbGlwX2RhdGFfdHlwZTsKKworICAgIC8qIElmIHRoZSAnKicgcmVnaXN0ZXIgaXNuJ3QgYWxyZWFkeSBmaWxsZWQgaW4sIGZpbGwgaXQgaW4gbm93LiAqLworICAgIGNiZC0+b3duZWQgPSBUUlVFOworICAgIGNsaXBfZ2V0X3NlbGVjdGlvbihjYmQpOworICAgIGNiZC0+b3duZWQgPSBGQUxTRTsKKworICAgIC8qCisgICAgICogY2xpcF9jb252ZXJ0X3NlbGVjdGlvbigpIHJldHVybnMgYSBwb2ludGVyIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcKKyAgICAgKiB0aGUgdGV4dCB0byBzZW5kIHRvIHRoZSBXaW5kb3dzIGNsaXBib2FyZCwgdG9nZXRoZXIgd2l0aCBhIGNvdW50CisgICAgICogb2YgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIChieXRlcykgaW4gdGhlIGJ1ZmZlci4gIFRoZSBmdW5jdGlvbidzCisgICAgICogcmV0dXJuIHZhbHVlIGlzIHRoZSAndHlwZScgb2Ygc2VsZWN0aW9uOiBNTElORSwgTUNIQVIsIG9yIE1CTE9DSzsKKyAgICAgKiBvciAtMSBmb3IgZmFpbHVyZS4KKyAgICAgKi8KKyAgICBjbGlwX2RhdGFfdHlwZSA9IGNsaXBfY29udmVydF9zZWxlY3Rpb24oJnBDbGlwRGF0YSwgJmNsaXBfZGF0YV9zaXplLCBjYmQpOworCisgICAgaWYgKGNsaXBfZGF0YV90eXBlIDwgMCkJICAgIC8qIGNvdWxkIG5vdCBjb252ZXJ0PyAqLworCXJldHVybjsJCQkgICAgLyogZWFybHkgZXhpdCAqLworCisgICAgaWYgKFdpbjE2T3BlbkNsaXBib2FyZCgpKQorICAgIHsKKwlpZiAoV2luMTZFbXB0eUNsaXBib2FyZCgpKQorCXsKKwkgICAgaW50IHNlbnRPSzsKKworCSAgICBzZW50T0sgPSBXaW4xNlNldENsaXBib2FyZERhdGEoQ0ZfVEVYVCwgcENsaXBEYXRhLAorCQkJCQkgICAgICBjbGlwX2RhdGFfc2l6ZSwgY2xpcF9kYXRhX3R5cGUpOworCSAgICBzZW50T0sgPSBXaW4xNlNldENsaXBib2FyZERhdGEoQ0ZfVklNQ0xJUCwKKwkJCSBwQ2xpcERhdGEsIGNsaXBfZGF0YV9zaXplLCBjbGlwX2RhdGFfdHlwZSkgJiYgc2VudE9LOworCisJICAgIGlmICghc2VudE9LKQorCSAgICB7CisJCS8qIG9uZSBvciBib3RoIG9mIFdpbjE2U2V0Q2xpcGJvYXJkRGF0YSgpIGZhaWxlZC4gKi8KKwkJLyogVGVjaG5pY2FsbHkgd2UgZG9uJ3Qga25vdyB3aHkgV2luMTZTZXRDbGlwYm9hcmREYXRhKCkKKwkJICogZmFpbGVkLCBidXQgYWxtb3N0IGFsd2F5cyBpdCB3aWxsIGJlIGJlY2F1c2UgdGhlcmUgd2Fzbid0CisJCSAqIGVub3VnaCBET1MgbWVtb3J5IHRvIGJ1ZmVyIHRoZSBkYXRhLCBzbyByZXBvcnQgdGhhdCBhcyB0aGUKKwkJICogcHJvYmxlbS4KKwkJICoKKwkJICogV2UgcmVwb3J0IHRoZSBlcnJvciBoZXJlIChpbnN0ZWFkIG9mIGluCisJCSAqIFdpbjE2U2V0Q2xpcGJvYXJkRGF0YSgpKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGVycm9yCisJCSAqIHJlcG9ydGVkIHR3aWNlLgorCQkgKi8KKwkJRU1TRygiRTQ1MDogU2VsZWN0aW9uIHRvbyBsYXJnZSwgY2Fubm90IGFsbG9jYXRlIERPUyBidWZmZXIiKTsKKwkgICAgfQorCX0KKworCVdpbjE2Q2xvc2VDbGlwYm9hcmQoKTsKKyAgICB9CisKKyAgICAvKiByZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgY2xpcF9jb252ZXJ0X3NlbGVjdGlvbigpICovCisgICAgdmltX2ZyZWUocENsaXBEYXRhKTsKKworICAgIHJldHVybjsKK30KKworLyoKKyAqIFdpbjE2T3BlbkNsaXBib2FyZDogb3BlbiB0aGUgV2luZG93cyBjbGlwYm9hcmQuICBUaGUgY2xpcGJvYXJkIG11c3QgYmUgb3BlbgorICogYmVmb3JlIGl0IGNhbiBiZSBjb21tdW5pY2F0ZWQgd2l0aCBhdCBhbGwuICBSZXR1cm4gVFJVRSBvbiBzdWNjZXNzLAorICogRkFMU0Ugb24gZmFpbHVyZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK1dpbjE2T3BlbkNsaXBib2FyZCh2b2lkKQoreworICAgIF9fZHBtaV9yZWdzICBkcG1pX3JlZ3M7CisKKyAgICBsb25nICAgIHN0YXJ0X3RpbWU7CisgICAgaW50CSAgICB0aWNrX2NvdW50OworCisgICAgLyogaW50IDAyeGYsIEFYID0gMHgxNzAxIGF0dGVtcHRzIHRvIG9wZW4gdGhlIFdpbmRvd3MgY2xpcGJvYXJkLiAgVXBvbgorICAgICAqIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQsIGlmIEFYIGlzIG5vbi16ZXJvLCB0aGUgY2xpcGJvYXJkIHdhcworICAgICAqIHN1Y2Nlc3NmdWxseSBvcGVuZWQuICBJZiBBWCBpcyB6ZXJvLCB0aGUgY2xpcGJvYXJkIGNvdWxkIG5vdCBiZSBvcGVuZWQKKyAgICAgKiBiZWNhdXNlIGl0IGlzIGN1cnJlbnRseSBpbiB1c2UgYnkgYW5vdGhlciBwcm9jZXNzLgorICAgICAqCisgICAgICogUmVtYXJrOiBvdGhlciBET1MgcHJvZ3JhbXMgSSAoZGspIGhhdmUgd3JpdHRlbiB0aGF0IHVzZSB0aGUgV2luZG93cworICAgICAqIGNsaXBib2FyZCBzb21ldGltZXMgZW5jb3VudGVyIHRoZSBwcm9ibGVtIHRoYXQgdGhlIGNsaXBib2FyZCBjYW5ub3QKKyAgICAgKiBiZSBvcGVuZWQgZXZlbiB0aG91Z2ggaXQgaXMgZGVtb25zdHJhYmx5IG5vdCBpbiB1c2UgYnkgYW55IG90aGVyCisgICAgICogcHJvY2Vzcy4gIEluIGFsbCBjYXNlcywgcmVwZWF0ZWQgYXR0ZW1wdHMgdG8gb3BlbiB0aGUgY2xpcGJvYXJkCisgICAgICogZXZlbnR1YWxseSBzdWNjZWVkLCBidXQgdGhlIGluaXRpYWwgYXR0ZW1wdCBvY2Nhc2lvbmFsbHkgZmFpbHMuCisgICAgICoKKyAgICAgKiBUaGUgcHJvYmxlbSBpcyBpbnRlcm1pdHRlbnQgYW5kIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBET1MgYmVpbmcKKyAgICAgKiAiYnVzeSIgYXQgY2VydGFpbiB1bnByZWRpY3RhYmxlIHRpbWVzLiAgRE9TIG1haW50YWlucyB0d28gaW50ZXJuYWwKKyAgICAgKiBmbGFncyB0aGF0IGluZGljYXRlIHdoZXRoZXIgaXQncyBidXN5OiBJbkRPUyBhbmQgQ3JpdEVyci4gIFRoZQorICAgICAqIGxvY2F0aW9uIG9mIEluRE9TIGNhbiBiZSBmb3VuZCBieSBjYWxsaW5nIGludCAweDIxLCBBSCA9IDB4MzQuICBUaGUKKyAgICAgKiBsb2NhdGlvbiBvZiBDcml0RXJyIGNhbiBiZSBmb3VuZCBieSBjYWxsaW5nIGludCAweDIxLCBBWCA9IDB4NWQwNi4KKyAgICAgKiBJZiBlaXRoZXIgb2YgdGhlc2UgZmxhZ3MgaXMgc2V0LCBET1MgaXMgImJ1c3kiIGFuZCBjYW5ub3QgYmUKKyAgICAgKiBpbnRlcnJ1cHRlZC4gIFNlZSAiVW5kb2N1bWVudGVkIERPUyIgYnkgU2NodWxtYW4gZXQgYWwgZm9yIGRldGFpbHMuCisgICAgICoKKyAgICAgKiBIb3dldmVyIGhlcmUgSSB0YWtlIHRoZSBlYXNpZXIgYXBwcm9hY2ggdGhhdCBpZiB0aGUgZmlyc3QgY2FsbCB0byBvcGVuCisgICAgICogdGhlIGNsaXBib2FyZCBkb2VzIG5vdCBzdWNjZWVkLCBqdXN0IHRyeSBhZ2Fpbi4gIEluIGZhY3QsIHRyeSBvbmNlIHBlcgorICAgICAqIGJpb3N0aW1lKCkgY2xvY2sgdGljaywgdXAgdG8gMTggdGltZXMgKGFib3V0IG9uZSBzZWNvbmQpLgorICAgICAqLworCisgICAgdGlja19jb3VudCA9IDA7CisKKyAgICBkcG1pX3JlZ3MueC5heCA9IDB4MTcwMTsJLyogb3BlbiBXaW5kb3dzIGNsaXBib2FyZCAqLworICAgIGlmIChfX2RwbWlfaW50KDB4MmYsICZkcG1pX3JlZ3MpID09IC0xKQorICAgIHsKKwkvKiByZWFsLW1vZGUgaW50ZXJydXB0IGZhaWxlZD8gKi8KKwlyZXR1cm4gRkFMU0U7CQkvKiBGQUxTRSAtLT4gY2xpcGJvYXJkIG5vdCBvcGVuICovCisgICAgfQorCisgICAgLyogd2FpdCB1cCB0byBvbmUgc2Vjb25kICovCisgICAgd2hpbGUgKGRwbWlfcmVncy54LmF4ID09IDAgJiYgdGlja19jb3VudCsrIDwgMTgpCisgICAgeworCS8qIFdhaXQgb25lIGNsb2NrIHRpY2sgKDE4LjIgdGlja3Mvc2VjID0gNTUgbXNlYyBwZXIgdGljaykuCisJICoKKwkgKiBXZSBidXN5LXdhaXQgaGVyZS4gIFVuZm9ydHVuYXRlbHksIGRlbGF5KCkgYW5kIHVzbGVlcCgpIGhhdmUgYmVlbgorCSAqIHJlcG9ydGVkIHRvIGdpdmUgcHJvYmxlbXMgd2l0aCB0aGUgb3JpZ2luYWwgV2luZG93cyA5NS4gIFRoaXMgaXMKKwkgKiBmaXhlZCBpbiBzZXJ2aWNlIHBhY2sgMSwgYnV0IG5vdCBldmVyeWJvZHkgaW5zdGFsbGVkIHRoYXQuCisJICovCisJc3RhcnRfdGltZSA9IGJpb3N0aW1lKDAsIDBMKTsKKwl3aGlsZSAoYmlvc3RpbWUoMCwgMEwpID09IHN0YXJ0X3RpbWUpCisJICAgIDsKKworCWRwbWlfcmVncy54LmF4ID0gMHgxNzAxOyAgICAvKiBvcGVuIFdpbmRvd3MgY2xpcGJvYXJkICovCisJaWYgKF9fZHBtaV9pbnQoMHgyZiwgJmRwbWlfcmVncykgPT0gLTEpCisJeworCSAgICAvKiByZWFsLW1vZGUgaW50ZXJydXB0IGZhaWxlZD8gKi8KKwkgICAgcmV0dXJuIEZBTFNFOwkJLyogRkFMU0UgLS0+IGNsaXBib2FyZCBub3Qgb3BlbiAqLworCX0KKyAgICB9CisKKyAgICAvKiBDb3VsZG4ndCBvcGVuIHRoZSBjbGlwYm9hcmQsIGV2ZW4gYWZ0ZXIgMTggYXR0ZW1wdHM/ICovCisKKyAgICBpZiAodGlja19jb3VudCA+PSAxOCAmJiBkcG1pX3JlZ3MueC5heCA9PSAwKQorCXJldHVybiBGQUxTRTsJCS8qIEZBTFNFIC0tPiBjbGlwYm9hcmQgbm90IG9wZW4gKi8KKworICAgIHJldHVybiBUUlVFOwkvKiBUUlVFIC0tPiBjbGlwYm9hcmQgb3BlbmVkIHN1Y2Nlc3NmdWxseSwgT0sgKi8KK30KKworLyoKKyAqIFdpbjE2Q2xvc2VDbGlwYm9hcmQ6IGNsb3NlIHRoZSBXaW5kb3dzIGNsaXBib2FyZC4gIFJldHVybiBUUlVFIG9uCisgKiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlLiAgVGhpcyBmdW5jdGlvbiBjYW4gYWx3YXlzIGJlIGNhbGxlZCwKKyAqIHdoZXRoZXIgdGhlIGNsaXBib2FyZCBpcyBvcGVuIG9yIG5vdC4KKyAqLworICAgIHN0YXRpYyBpbnQKK1dpbjE2Q2xvc2VDbGlwYm9hcmQodm9pZCkKK3sKKyAgICBfX2RwbWlfcmVncyAgZHBtaV9yZWdzOworCisgICAgLyogQ2xvc2UgdGhlIGNsaXBib2FyZC4gIFRoaXMgaW50ZXJydXB0IGNhbiBhbHdheXMgYmUgY2FsbGVkLCBldmVuCisgICAgICogaWYgdGhlIGNsaXBib2FyZCBpcyBhbHJlYWR5IGNsb3NlZC4KKyAgICAgKi8KKworICAgIGRwbWlfcmVncy54LmF4ID0gMHgxNzA4OwkgICAgLyogY2xvc2UgdGhlIGNsaXBib2FyZCAqLworICAgIGlmIChfX2RwbWlfaW50KDB4MmYsICZkcG1pX3JlZ3MpID09IC0xKQorICAgIHsKKwkvKiByZWFsLW1vZGUgaW50ZXJydXB0IGZhaWxlZD8gKi8KKwlyZXR1cm4gRkFMU0U7CQkvKiBGQUxTRSAtLT4gY2xpcGJvYXJkIGNvdWxkIG5vdCBiZSBjbG9zZWQgKi8KKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsJLyogVFJVRSAtLT4gY2xpcGJvYXJkIGNsb3NlZCBzdWNjZXNzZnVsbHksIE9LICovCit9CisKKy8qCisgKiBXaW4xNkVtcHR5Q2xpcGJvYXJkOiBlbXB0eSB0aGUgKHByZXZpb3VzbHkgb3BlbmVkKSBXaW5kb3dzIGNsaXBib2FyZC4KKyAqIFJldHVybiBUUlVFIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUuCisgKi8KKyAgICBzdGF0aWMgaW50CitXaW4xNkVtcHR5Q2xpcGJvYXJkKHZvaWQpCit7CisgICAgX19kcG1pX3JlZ3MgIGRwbWlfcmVnczsKKworICAgIC8qIGludCAwMnhmLCBBWCA9IDB4MTcwMiBhdHRlbXB0cyB0byBlbXB0eSB0aGUgV2luZG93cyBjbGlwYm9hcmQuICBVcG9uCisgICAgICogcmV0dXJuIGZyb20gdGhlIGludGVycnVwdCwgaWYgQVggPT0gMCwgdGhlIGNsaXBib2FyZCBjb3VsZCBub3QgYmUKKyAgICAgKiBlbXB0aWVkIChmb3Igc29tZSByZWFzb24pLgorICAgICAqLworICAgIGRwbWlfcmVncy54LmF4ID0gMHgxNzAyOyAgICAvKiAgZW1wdHkgdGhlIFdpbmRvd3MgY2xpcGJvYXJkICovCisgICAgaWYgKF9fZHBtaV9pbnQoMHgyZiwgJmRwbWlfcmVncykgPT0gLTEpCisgICAgeworCS8qIHJlYWwtbW9kZSBpbnRlcnJ1cHQgZmFpbGVkPyAqLworCXJldHVybiBGQUxTRTsJCS8qIEZBTFNFIC0tPiBjbGlwYm9hcmQgY291bGQgbm90IGJlIGVtcHRpZWQgKi8KKyAgICB9CisKKyAgICAvKiBEaWQgd2Ugc3VjY2VlZCBpbiBjbGVhcmluZyB0aGUgY2xpcGJvYXJkPyAqLworICAgIGlmIChkcG1pX3JlZ3MueC5heCA9PSAwKQorCXJldHVybiBGQUxTRTsJCS8qIEZBTFNFIC0tPiBjbGlwYm9hcmQgY291bGQgbm90IGJlIGVtcHRpZWQgKi8KKworICAgIHJldHVybiBUUlVFOwkJLyogVFJVRSAtLT4gY2xpcGJvYXJkIHdhcyBlbXB0aWVkLCBPSyAqLworfQorCisvKgorICogRnJlZURPU01lbW9yeTogYSBoZWxwZXIgZnVuY3Rpb24gdG8gZnJlZSBtZW1vcnkgcHJldmlvdXNseQorICogYWxsb2NhdGVkIGJ5IGEgY2FsbCB0byBfX2RwbWlfYWxsb2NhdGVfZG9zX21lbW9yeSgpLgorICovCisgICAgc3RhdGljIHZvaWQKK0ZyZWVET1NNZW1vcnkoaW50IHByb3RlY3RlZF9tb2RlX3NlbGVjdG9yKQoreworICAgIC8qIEZyZWUgdGhlIERPUyBidWZmZXIgYW5kIHJlbGVhc2UgdGhlIERQTUkgcHJvdC1tb2RlIHNlbGVjdG9yLgorICAgICAqCisgICAgICogSXQncyBpbXBvcnRhbnQgdGhhdCBET1MgbWVtb3J5IGJlIHByb3Blcmx5IHJlbGVhc2VkIGJlY2F1c2UKKyAgICAgKiB0aGVyZSdzIG9ubHkgYSBsaW1pdGVkIGFtb3VudCBvZiBpdC4gIFRoZXJlZm9yZSwgaWYgdGhlIGNhbGwKKyAgICAgKiB0byBfX2RwbWlfZnJlZV9kb3NfbWVtb3J5KCkgZmFpbHMsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZQorICAgICAqIHVuY29uZGl0aW9uYWxseS4KKyAgICAgKi8KKyAgICBpZiAoX19kcG1pX2ZyZWVfZG9zX21lbW9yeShwcm90ZWN0ZWRfbW9kZV9zZWxlY3RvcikgPT0gLTEpCisJRU1TRygiRTQ1MTogY291bGQgbm90IGZyZWUgRE9TIG1lbW9yeSBidWZmZXIgKERKR1BQKSIpOworfQorCisvKgorICogV2luMTZHZXRDbGlwYm9hcmREYXRhOiBxdWVyeSB0aGUgV2luZG93cyBjbGlwYm9hcmQgYXMgdG8gd2hldGhlciBkYXRhCisgKiBpcyBhdmFpbGFibGUgaW4gYSBwYXJ0aWN1bGFyIGNsaXBib2FyZCBmb3JtYXQuICBJZiBkYXRhIGlzCisgKiBhdmFpbGFibGUsIGFsbG9jYXRlIGEgYnVmZmVyIGZvciBpdCBhbmQgcmVhZCB0aGUgZGF0YSBmcm9tIHRoZQorICogY2xpcGJvYXJkIGludG8gdGhlIGJ1ZmZlci4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4gIElmCisgKiBubyBkYXRhIGlzIGF2YWlsYWJsZSBpbiB0aGUgcmVxdWVzdGVkIGZvcm1hdCwgcmV0dXJuIE5VTEwuCisgKgorICogVGhpcyByb3V0aW5lIGFsbG9jYXRlcyBtZW1vcnkgdG8gaG9sZCB0aGUgcmV0cmlldmVkIGNsaXBib2FyZAorICogZGF0YS4gIEl0J3MgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhpcyBtZW1vcnkKKyAqIG9uY2UgaXQncyBmaW5pc2hlZCB1c2luZyBpdC4gIFRoZSBtZW1vcnkgc2hvdWxkIGJlIGZyZWVkIGJ5CisgKiBjYWxsaW5nIHZpbV9mcmVlKCkuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK1dpbjE2R2V0Q2xpcGJvYXJkRGF0YShpbnQgY2xpcF9kYXRhX2Zvcm1hdCkKK3sKKyAgICBfX2RwbWlfcmVncyAgZHBtaV9yZWdzOworCisgICAgaW50CQlyZWFsX21vZGVfc2VnbWVudF9hZGRyZXNzOworICAgIGludAkJcHJvdGVjdGVkX21vZGVfc2VsZWN0b3I7CisKKyAgICBjaGFyX3UJKmNsaXBfZGF0YV9idWZmZXI7CisgICAgbG9uZ191CWNsaXBfZGF0YV9zaXplOworCisgICAgLyogV2Ugb25seSBoYW5kbGUgY2xpcGJvYXJkIGZvcm1hdHMgd2UgcmVjb2duaXplLCBvdGhlcnMgYXJlIGlnbm9yZWQuCisgICAgICoKKyAgICAgKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgYSBjdXN0b20gY2xpcGJvYXJkIGZvcm1hdCBmb3IgVmltQ2xpcGJvYXJkCisgICAgICogZGF0YSB1bmRlciBET1MsIHNvIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBXaW5kb3dzIGZvcm1hdHMgaGFkIHRvIGJlCisgICAgICogdXNlZCBmb3IgQ0ZfVklNQ0xJUC4gIFR3byBvYnNjdXJlIGZvcm1hdHMsIHBvcHVsYXIgd2hlbiBXaW5kb3dzIDMuMAorICAgICAqIGNhbWUgb3V0IGJ1dCBubyBsb25nZXIgaW4gbXVjaCB1c2UgdG9kYXksIGFyZSB0aGUgRElGIGFuZCBTWUxLIGZvcm1hdHMuCisgICAgICogRElGIGlzIHRoZSBEYXRhIEludGVyY2hhbmdlIEZvcm1hdCwgU1lMSyBpcyB0aGUgU3ltYm9saWMgTGluayBmb3JtYXQuCisgICAgICogVGhleSBhcmUgYm90aCB0ZXh0IGZvcm1hdHMgYW5kIGVpdGhlciBvbmUgY2FuIGJlIGhpamFja2VkIGZvciB1c2UgYXMKKyAgICAgKiAidGhlIFZpbUNsaXBib2FyZCBmb3JtYXQiLiAgT2YgY291cnNlLCB0aGlzIGNvbmZsaWN0cyB3aXRoIGFueW9uZSB3aG8KKyAgICAgKiBzdGlsbCAqaXMqIHVzaW5nIERJRiBvciBTWUxLIGRhdGEgZm9ybWF0cywgYnV0IHRoYXQgd2lsbCBiZSB2ZXJ5IGZldworICAgICAqIHBlb3BsZS4KKyAgICAgKgorICAgICAqIEkgKGRrKSBjaG9zZSBTWUxLIGFzIHRoZSBtb3JlIG9ic2N1cmUgZm9ybWF0IGJlY2F1c2UgaXQgd2FzIHVzZWQKKyAgICAgKiBtb3N0bHkgZm9yIE1pY3Jvc29mdCBNdWx0aXBsYW4gKHRoZSBwcmUtY3Vyc29yIHRvIEV4Y2VsKSBhbmQgaXQncyBub3QKKyAgICAgKiBsaWtlbHkgTXVsdGlwbGFuIGlzIHVzZWQgYW55d2hlcmUgbXVjaCBhbnltb3JlLiAgTWluZCB5b3UsIEV4Y2VsIGNhbgorICAgICAqIHN0aWxsIGV4cG9ydCB0byBib3RoIERJRiBhbmQgU1lMSyBmb3JtYXRzLgorICAgICAqLworCisgICAgc3dpdGNoIChjbGlwX2RhdGFfZm9ybWF0KQorICAgIHsKKyAgICBjYXNlIENGX1ZJTUNMSVA6CQkgICAgLyogVmltJ3Mgb3duIHNwZWNpYWwgY2xpcGJvYXJkIGZvcm1hdCAqLworICAgIGNhc2UgQ0ZfVEVYVDoJCSAgICAvKiBXaW5kb3dzIHRleHQgKi8KKyAgICBjYXNlIENGX09FTVRFWFQ6CQkgICAgLyogRE9TIChPRU0pIHRleHQgKi8KKworCS8qIGludCAwMnhmLCBBWCA9IDB4MTcwNCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSBjdXJyZW50bHkKKwkgKiBvbiB0aGUgV2luZG93cyBjbGlwYm9hcmQsIGZvciB0aGUgc3BlY2lmaWVkIGZvcm1hdC4gIFVwb24gcmV0dXJuCisJICogZnJvbSB0aGUgaW50ZXJydXB0LCBEWDpBWCA9IHRoZSBudW1iZXIgb2YgYnl0ZXMsIHJvdW5kZWQgdXAgdG8gdGhlCisJICogbmVhcmVzdCBtdWx0aXBsZSBvZiAzMi4KKwkgKi8KKworCWRwbWlfcmVncy54LmF4ID0gMHgxNzA0OyAgICAvKiBnZXQgc2l6ZSBvZiBjbGlwYmQgZGF0YSAqLworCWRwbWlfcmVncy54LmR4ID0gY2xpcF9kYXRhX2Zvcm1hdDsKKwlpZiAoX19kcG1pX2ludCgweDJmLCAmZHBtaV9yZWdzKSA9PSAtMSkKKwl7CisJICAgIC8qIHJlYWwtbW9kZSBpbnRlcnJ1cHQgZmFpbGVkPyAqLworCSAgICByZXR1cm4gTlVMTDsJCQkJICAgIC8qIGVhcmx5IGV4aXQgKi8KKwl9CisKKwkvKiBEaWQgd2UgZ2V0IGFueXRoaW5nPyAgSWYgbm90LCB0aGlzIGlzIG5vdCBhbiBlcnJvci4gKi8KKwlpZiAoZHBtaV9yZWdzLnguZHggPT0gMCAmJiBkcG1pX3JlZ3MueC5heCA9PSAwKQorCXsKKwkgICAgLyogbm8gQ0ZfVklNQ0xJUCBkYXRhPyAqLworCSAgICByZXR1cm4gTlVMTDsJCQkJICAgIC8qIGVhcmx5IGV4aXQgKi8KKwl9CisKKwkvKiBUaGVyZSBpcyBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgcmVxdWVzdGVkIGNsaXBib2FyZCBmb3JtYXQuCisJICoKKwkgKiBDYWxjdWxhdGUgZGF0YSBzaXplLiAgUmVtZW1iZXIgdGhpcyBpcyByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0CisJICogbXVsdGlwbGUgb2YgMzIsIHNvIGNsaXBfZGF0YV9zaXplIGlzIGFjdHVhbGx5IGFuIHVwcGVyIGxpbWl0LgorCSAqIFRoZSBleHRyYSBieXRlcywgaWYgYW55LCBhcmUgc2V0IHRvIG51bGwgKDB4MDApIHdoZW4gdGhlIGRhdGEgaXMKKwkgKiByZWFkIGZyb20gdGhlIGNsaXBib2FyZC4gIChMYXRlcjopIGFjdHVhbGx5IEknbSBubyBsb25nZXIgc3VyZQorCSAqIHRoaXMgaXMgc3RyaWN0bHkgdHJ1ZTogdGhlIGVuZC1vZi1kYXRhIGlzIG1hcmtlZCBieSBhIG51bGwsIGJ1dAorCSAqIHRoZSBleHRyYSBieXRlcyBhcHBlYXIgdG8gc29tZXRpbWVzIGJlIG51bGwsIHNvbWV0aW1lcyBub3QuCisJICogVGhleSBtYXkganVzdCBiZSBnYXJiYWdlLgorCSAqLworCWNsaXBfZGF0YV9zaXplID0gZHBtaV9yZWdzLnguYXggKyAoZHBtaV9yZWdzLnguZHggPDwgMTYpOworCisJLyogQWxsb2NhdGUgbWVtb3J5IHRvIHJldHJpZXZlIHRoZSBkYXRhLiAgVGhlIGJ1ZmZlciBoYXMgdG8gbGllIGluIHRoZQorCSAqIERPUyBtZW1vcnkgcmVnaW9uIChpbiB0aGUgZmlyc3QgMSBNQnl0ZSBvZiBhZGRyZXNzIHNwYWNlKSBiZWNhdXNlCisJICogdGhlIFdpbmRvd3MgY2xpcGJvYXJkIGludGVyZmFjZSBleHBlY3RzIGEgMTYtYml0IHNlZ21lbnQ6b2Zmc2V0CisJICogcG9pbnRlciB0byBhIGJ1ZmZlciBhZGRyZXNzIHdpdGhpbiB0aGUgRE9TIHJlZ2lvbi4gIE11c3QgdGhlcmVmb3JlCisJICogdXNlIF9fZHBtaV9hbGxvY2F0ZV9kb3NfbWVtb3J5KCkgaW5zdGVhZCBvZiBsYWxsb2MoKSBvciBhbGxvYygpLgorCSAqLworCXJlYWxfbW9kZV9zZWdtZW50X2FkZHJlc3MgPSBfX2RwbWlfYWxsb2NhdGVfZG9zX21lbW9yeSgKKwkJKGNsaXBfZGF0YV9zaXplICsgMTUpID4+IDQsCS8qIGJ1ZmZlciBzaXplLCBpbiAxNi1ieXRlIHBhcmFncmFwaHMgKi8KKwkJJnByb3RlY3RlZF9tb2RlX3NlbGVjdG9yKTsJLyogcHJvdC1tb2RlIHNlbGVjdG9yIGZvciB0aGUgYWRkcmVzcyAqLworCisJaWYgKHJlYWxfbW9kZV9zZWdtZW50X2FkZHJlc3MgPT0gLTEpCisJeworCSAgICAvKiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuICovCisKKwkgICAgLyogVGVjaG5pY2FsbHkgd2UgZG9uJ3Qga25vdyB3aHkgdGhlIGFsbG9jYXRpb24gZmFpbGVkLCBidXQKKwkgICAgICogYWxtb3N0IGFsd2F5cyBpdCB3aWxsIGJlIGJlY2F1c2UgdGhlcmUgd2Fzbid0IGVub3VnaCBET1MKKwkgICAgICogbWVtb3J5IHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QsIHNvIHJlcG9ydCB0aGF0IGFzIHRoZSBwcm9ibGVtLgorCSAgICAgKiBPbiBteSBzeXN0ZW0sIERKR1BQIGlzIGFibGUgdG8gc2F0aXNmeSBhIERPUyBhbGxvY2F0aW9uIHJlcXVlc3QKKwkgICAgICogdXAgdG8gYWJvdXQgNjAwSyBpbiBzaXplLiAgVGhpcyBkZXBlbmRzIG9uIHlvdXIgSElNRU0uU1lTIGFuZAorCSAgICAgKiBFTU0zODYuRVhFIHNldHRpbmdzIGhvd2V2ZXIuCisJICAgICAqLworCSAgICBFTVNHKCJFNDUyOiBDbGlwYm9hcmQgZGF0YSB0b28gbGFyZ2UsIGNhbm5vdCBhbGxvY2F0ZSBET1MgYnVmZmVyIik7CisJICAgIHJldHVybiBOVUxMOwkJCQkgICAgLyogZWFybHkgZXhpdCAqLworCX0KKworCS8qIENvcHkgZGF0YSBmcm9tIHRoZSBjbGlwYm9hcmQgaW50byB0aGUgYnVmZmVyLiAgRXhwZXJpbWVudHMgc2hvdyB0aGF0CisJICogdGhlIFdpbmRvd3MgY2xpcGJvYXJkIGlzIHNtYXJ0IGVub3VnaCB0byBoYW5kbGUgZGF0YSB0cmFuc2ZlcnMKKwkgKiBsYXJnZXIgdGhhbiA2NEsgcHJvcGVybHksIGV2ZW4gdGhvdWdoIHRoZSBidWZmZXIgYWRkcmVzcyBpcyBhIDE2LWJpdAorCSAqIHNlZ21lbnQ6b2Zmc2V0ICh3aGljaCB3b3VsZCBub3JtYWxseSBsaW1pdCB0aGUgYmxvY2sgc2l6ZSB0byA2NEsKKwkgKiB1bmxlc3MgRVMgZ2V0cyBpbmNyZW1lbnRlZCkuCisJICovCisJZHBtaV9yZWdzLnguYXggPSAweDE3MDU7CS8qIGdldCBjbGlwYm9hcmQgZGF0YSAqLworCWRwbWlfcmVncy54LmR4ID0gY2xpcF9kYXRhX2Zvcm1hdDsJCS8qIENGX1ZJTUNMSVAgKi8KKwlkcG1pX3JlZ3MueC5lcyA9IHJlYWxfbW9kZV9zZWdtZW50X2FkZHJlc3M7CS8qIGJ1ZmZlciBhZDogc2VnbWVudCAqLworCWRwbWlfcmVncy54LmJ4ID0gMDsJCQkJLyogYnVmZmVyIGFkOiBvZmZzZXQgKi8KKwlpZiAoX19kcG1pX2ludCggMHgyZiwgJmRwbWlfcmVncykgPT0gLTEpCisJeworCSAgICAvKiByZWFsLW1vZGUgaW50ZXJydXB0IGZhaWxlZD8gKi8KKwkgICAgRU1TRygiRTQ1MzogY291bGQgbm90IGNvcHkgY2xpcGJvYXJkIGRhdGEgdG8gRE9TIGJ1ZmZlciIpOworCSAgICBGcmVlRE9TTWVtb3J5KHByb3RlY3RlZF9tb2RlX3NlbGVjdG9yKTsJLyogY2xlYW4gdXAgRE9TIG1lbSAqLworCSAgICByZXR1cm4gTlVMTDsJCQkJLyogZWFybHkgZXhpdCAqLworCX0KKworCS8qIENsaXBib2FyZCBkYXRhIGlzIG5vdyBpbiBET1MgbWVtb3J5IGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieQorCSAqIEVTOkJYLiAgQ29weSB0aGlzIGludG8gb3JkaW5hcnkgbWVtb3J5IHRoYXQgVmltIGNhbiBhY2Nlc3MgKGllLgorCSAqIHByb3QtbW9kZSBtZW1vcnkpLiAgQWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUgdG8gZW5zdXJlIHRoZSB0ZXh0CisJICogaXMgdGVybWluYXRlZCBwcm9wZXJseSAoaW4gY2FzZSBpdCB3YXMgc29tZWhvdyBjb3JydXB0ZWQpLgorCSAqLworCWNsaXBfZGF0YV9idWZmZXIgPSAoY2hhcl91ICopbGFsbG9jKGNsaXBfZGF0YV9zaXplICsgMSwgVFJVRSk7CisKKwlpZiAoY2xpcF9kYXRhX2J1ZmZlciA9PSBOVUxMKQorCXsKKwkgICAgLyogYWxsb2NhdGlvbiBmYWlsZWQ/ICovCisJICAgIEVNU0coIkU0NTQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSBjbGlwYm9hcmQgbWVtb3J5IGJ1ZmZlciIpOworCSAgICBGcmVlRE9TTWVtb3J5KHByb3RlY3RlZF9tb2RlX3NlbGVjdG9yKTsJLyogY2xlYW4gdXAgRE9TIG1lbSAqLworCSAgICByZXR1cm4gTlVMTDsJCQkJLyogZWFybHkgZXhpdCAqLworCX0KKworCSooY2xpcF9kYXRhX2J1ZmZlciArIGNsaXBfZGF0YV9zaXplKSA9ICdcMCc7CS8qIGVuc3VyZSB0ZXJtaW5hdGVkICovCisKKwkvKiBDb3B5IHRoZSBkYXRhIGZyb20gRE9TIG1lbW9yeSB0byBWaW0tYWNjZXNzaWJsZSBtZW1vcnkuICovCisJbW92ZWRhdGEoCQkJCS8qIERKR1BQIHZlcnNpb24gb2YgbWVtY3B5KCkgKi8KKwkJcHJvdGVjdGVkX21vZGVfc2VsZWN0b3IsIDAsIC8qIHNvdXJjZTogRE9TIGFkICh2aWEgc2VsZWN0b3IpICovCisJCV9teV9kcygpLCAodW5zaWduZWQpY2xpcF9kYXRhX2J1ZmZlciwKKwkJCQkJCS8qIHRhcmdldDogbm9ybWFsIG1lbSBhZGRyZXNzICovCisJCWNsaXBfZGF0YV9zaXplKTsJCS8qIGhvdyBtYW55IGJ5dGVzICovCisKKwkvKiBGcmVlIHRoZSBET1MgYnVmZmVyIGFuZCByZWxlYXNlIHRoZSBEUE1JIHByb3QtbW9kZSBzZWxlY3Rvci4gKi8KKwlGcmVlRE9TTWVtb3J5KHByb3RlY3RlZF9tb2RlX3NlbGVjdG9yKTsJIC8qIGNsZWFuIHVwIERPUyBtZW1vcnkgKi8KKworCXJldHVybiBjbGlwX2RhdGFfYnVmZmVyOyAgICAvKiByZXR1cm4gcG9pbnRlciB0byBhbGxvY2F0ZWQgYnVmZmVyICovCisKKyAgICBkZWZhdWx0OgkJLyogdW5rbm93biBjbGlwYm9hcmQgZm9ybWF0ICovCisJcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisvKgorICogV2luMTZTZXRDbGlwYm9hcmREYXRhOiBzZW5kICdjbGlwX2RhdGFfc2l6ZScgYnl0ZXMgb2YgZGF0YSBmcm9tIHRoZSBidWZmZXIKKyAqIHBvaW50ZWQgdG8gYnkgJ2NsaXBfZGF0YScsIHRvIHRoZSBXaW5kb3dzIGNsaXBib2FyZC4gIFRoZSBkYXRhIGlzCisgKiByZWdpc3RlcmVkIHdpdGggdGhlIGNsaXBib2FyZCBhcyBiZWluZyBpbiB0aGUgJ2NsaXBfZGF0YV9mb3JtYXQnCisgKiBmb3JtYXQuCisgKi8KKyAgICBzdGF0aWMgaW50CitXaW4xNlNldENsaXBib2FyZERhdGEoCisJaW50CWNsaXBfZGF0YV9mb3JtYXQsCisJY2hhcl91CSpjbGlwX2RhdGEsCisJaW50CWNsaXBfZGF0YV9zaXplLAorCWludAljbGlwX2RhdGFfdHlwZSkKK3sKKyAgICBfX2RwbWlfcmVncyAgZHBtaV9yZWdzOworCisgICAgaW50CQlyZWFsX21vZGVfc2VnbWVudF9hZGRyZXNzOworICAgIGludAkJcHJvdGVjdGVkX21vZGVfc2VsZWN0b3I7CisgICAgbG9uZ191CXByb3RlY3RlZF9tb2RlX29mZnNldCA9IDBMOworICAgIGludAkJdG90YWxfc2l6ZSA9IGNsaXBfZGF0YV9zaXplOworCisgICAgY2hhcl91CSpjbGlwX3NlbF90eXBlOworCisgICAgLyogSWYgd2UncmUgdXNpbmcgdGhlIENGX1ZJTUNMSVAgY3VzdG9tIGZvcm1hdCwgYWxsb2NhdGUgYW4gZXh0cmEKKyAgICAgKiBieXRlIGZvciBjbGlwX3NlbF90eXBlLCB3aGljaCBpcyBhIGNoYXJhY3RlciBpbmRpY2F0aW5nIHRoZSB0eXBlCisgICAgICogb2YgdGV4dCBzZWxlY3Rpb246IE1MSU5FLCBNQ0hBUiwgb3IgTUJMT0NLLgorICAgICAqLworICAgIGlmIChjbGlwX2RhdGFfZm9ybWF0ID09IENGX1ZJTUNMSVApCisJdG90YWxfc2l6ZSsrOwkJCS8qIGV4dHJhIGJ5dGUgZm9yIG1hcmtlciAqLworCisgICAgLyogRGF0YSBjYW5ub3QgYmUgc2VudCBkaXJlY3RseSBmcm9tIGEgVmltIHN0cmluZyAocENsaXBEYXRhKSB0bworICAgICAqIHRoZSBXaW5kb3dzIGNsaXBib2FyZCwgYmVjYXVzZSB0aGUgV2luZG93cyBjbGlwYm9hcmQgaW50ZXJmYWNlCisgICAgICogZXhwZWN0cyBhIDE2LWJpdCAoRE9TKSBzZWdtZW50Om9mZnNldCBhZGRyZXNzIGZvciB0aGUgc291cmNlCisgICAgICogYnVmZmVyLiAgVGhlcmVmb3JlIHdlIG11c3QgY3JlYXRlIGEgInRyYW5zZmVyIGJ1ZmZlciIgaW4gdGhlIERPUworICAgICAqIG1lbW9yeSByZWdpb24gKGluIHRoZSBmaXJzdCAxIE1CeXRlIG9mIGFkZHJlc3Mgc3BhY2UpIGFuZCBjb3B5CisgICAgICogdGhlIFZpbSBzdHJpbmcgaW50byB0aGF0LiAgRnJvbSB0aGVyZSwgdGhlIGRhdGEgY2FuIHRoZW4gYmUgc2VudAorICAgICAqIHRvIHRoZSBXaW5kb3dzIGNsaXBib2FyZC4KKyAgICAgKgorICAgICAqIFRvIGFsbG9jYXRlIERPUyBtZW1vcnksIHdlIG11c3QgdXNlIF9fZHBtaV9hbGxvY2F0ZV9kb3NfbWVtb3J5KCkKKyAgICAgKiBpbnN0ZWFkIG9mIGxhbGxvYygpIG9yIGFsbG9jKCkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgaXQgd2lsbAorICAgICAqIGFsbW9zdCBpbnZhcmlhYmx5IGJlIGJlY2F1c2UgdGhlcmUgaXMgbm90IGVub3VnaCBET1MgbWVtb3J5CisgICAgICogYXZhaWxhYmxlIHRvIGFjY29tbW9kYXRlIHRoZSBzaXplIG9mIGNsaXBfZGF0YS4gIFRoZXJlIGlzIG5vdGhpbmcKKyAgICAgKiB3ZSBjYW4gZG8gYWJvdXQgdGhpcywgd2Ugc2ltcGx5IGhhdmUgdG8gZmFpbC4KKyAgICAgKi8KKyAgICByZWFsX21vZGVfc2VnbWVudF9hZGRyZXNzID0gX19kcG1pX2FsbG9jYXRlX2Rvc19tZW1vcnkoCisJICAgICh0b3RhbF9zaXplICsgMTUpID4+IDQsCS8qIGJ1ZmZlciBzaXplLCBpbiAxNi1ieXRlIHBhcmFncmFwaHMgKi8KKwkgICAgJnByb3RlY3RlZF9tb2RlX3NlbGVjdG9yKTsJLyogcHJvdC1tb2RlIHNlbGVjdG9yIGZvciB0aGUgYWRkcmVzcyAqLworCisgICAgaWYgKHJlYWxfbW9kZV9zZWdtZW50X2FkZHJlc3MgPT0gLTEpCisgICAgeworCS8qIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gKi8KKwkvKiBUZWNobmljYWxseSB3ZSBkb24ndCBrbm93IHdoeSB0aGUgYWxsb2NhdGlvbiBmYWlsZWQsIGJ1dAorCSAqIGFsbW9zdCBhbHdheXMgaXQgd2lsbCBiZSBiZWNhdXNlIHRoZXJlIHdhc24ndCBlbm91Z2ggRE9TCisJICogbWVtb3J5IHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QuICBPbiBteSBzeXN0ZW0sIERKR1BQIGlzIGFibGUKKwkgKiB0byBzYXRpc2Z5IGEgRE9TIGFsbG9jYXRpb24gcmVxdWVzdCB1cCB0byBhYm91dCA2MDBLIGluIHNpemUuCisJICogVGhpcyBkZXBlbmRzIGhvd2V2ZXIgb24gSElNRU0uU1lTIGFuZCBFTU0zODYuRVhFIHNldHRpbmdzLgorCSAqLworCXJldHVybiBGQUxTRTsJCQkJLyogZWFybHkgZXhpdCAqLworICAgIH0KKworICAgIC8qIENvcHkgZGF0YSBmcm9tIFZpbSdzIGJ1ZmZlciAoY2xpcF9kYXRhKSBpbnRvIHRoZSBET1MgdHJhbnNmZXIgYnVmZmVyLgorICAgICAqIFRoaXMgY2FuIGJlIGxhcmdlciB0aGFuIDY0SzsgbW92ZWRhdGEoKSB0YWtlcyBjYXJlIG9mIGNyb3NzaW5nIGFueQorICAgICAqIDE2LWJpdCBzZWdtZW50IGJvdW5kYXJpZXMuCisgICAgICoKKyAgICAgKiBJZiB3ZSdyZSB1c2luZyBWaW0ncyBjdXN0b20gY2xpcGJvYXJkIGZvcm1hdCwgd2UgbXVzdCBjb3B5IG9uZSBleHRyYQorICAgICAqIGJ5dGUgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2Ygc2VsZWN0aW9uOiBsaW5lLCBjaGFyYWN0ZXIsIG9yIGJsb2NrLgorICAgICAqLworICAgIGlmIChjbGlwX2RhdGFfZm9ybWF0ID09IENGX1ZJTUNMSVApCisgICAgeworCXN3aXRjaCAoY2xpcF9kYXRhX3R5cGUpCisJeworCSAgICBkZWZhdWx0OgorCSAgICBjYXNlIE1MSU5FOgkgICAgY2xpcF9zZWxfdHlwZSA9ICJMIjsJYnJlYWs7CisJICAgIGNhc2UgTUNIQVI6CSAgICBjbGlwX3NlbF90eXBlID0gIkMiOwlicmVhazsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCSAgICBjYXNlIE1CTE9DSzogICAgY2xpcF9zZWxfdHlwZSA9ICJCIjsJYnJlYWs7CisjZW5kaWYKKwl9CisKKwltb3ZlZGF0YSgKKwkJX215X2RzKCksICh1bnNpZ25lZCljbGlwX3NlbF90eXBlLAorCQkJCQkgICAgLyogc291cmNlOiBub3JtYWwgbWVtb3J5IGFkZHJlc3MgKi8KKwkJcHJvdGVjdGVkX21vZGVfc2VsZWN0b3IsIDAsIC8qIHRhcmdldDogRE9TIGFkICh2aWEgc2VsZWN0b3IpICovCisJCTEpOwkJCSAgICAvKiBob3cgbWFueSBieXRlcyB0byBjb3B5ICovCisKKwlwcm90ZWN0ZWRfbW9kZV9vZmZzZXQgKz0gU1RSTEVOKGNsaXBfc2VsX3R5cGUpOwkvKiBhbGxvdyBmb3IgbWFya2VyICovCisgICAgfQorCisgICAgbW92ZWRhdGEoCisJX215X2RzKCksICh1bnNpZ25lZCljbGlwX2RhdGEsCS8qIHNvdXJjZTogbm9ybWFsIG1lbW9yeSBhZGRyZXNzICovCisJcHJvdGVjdGVkX21vZGVfc2VsZWN0b3IsCS8qIHRhcmdldDogRE9TIGFkZHJlc3MgKHZpYSBzZWxlY3RvcikgKi8KKwlwcm90ZWN0ZWRfbW9kZV9vZmZzZXQsCQkvKiBub24temVybywgaWYgdXNpbmcgY2xpcF9zZWxfdHlwZSAqLworCWNsaXBfZGF0YV9zaXplKTsJCS8qIGhvdyBtYW55IGJ5dGVzIHRvIGNvcHkgKi8KKworICAgIC8qIFNlbmQgZGF0YSBmcm9tIHRoZSBET1MgdHJhbnNmZXIgYnVmZmVyIHRvIHRoZSBXaW5kb3dzIGNsaXBib2FyZC4KKyAgICAgKiBpbnQgMDJ4ZiwgQVggPSAweDE3MDMgc2VuZHMgU0k6Q1ggYnl0ZXMgb2YgZGF0YSBmcm9tIHRoZSBidWZmZXIKKyAgICAgKiBhdCBFUzpCWCwgdG8gdGhlIGNsaXBib2FyZC4KKyAgICAgKi8KKyAgICBkcG1pX3JlZ3MueC5heCA9IDB4MTcwMzsJCQkvKiBzZW5kIGNsaXBib2FyZCBkYXRhICovCisgICAgZHBtaV9yZWdzLnguZHggPSBjbGlwX2RhdGFfZm9ybWF0OwkJLyogZmxhZzogZm9ybWF0IG9mIHRoZSBkYXRhICovCisgICAgZHBtaV9yZWdzLnguc2kgPSAoKHRvdGFsX3NpemUgPj4gMTYpCisJICAgICYgMHgwMDAwZmZmZkwpOwkJCS8qIGhpIHdvcmQgb2YgZGF0YSBzaXplICovCisgICAgZHBtaV9yZWdzLnguY3ggPSAodG90YWxfc2l6ZSAmIDB4MDAwMGZmZmZMKTsKKwkJCQkJCS8qIGxvIHdvcmQgb2YgZGF0YSBzaXplICovCisgICAgZHBtaV9yZWdzLnguZXMgPSByZWFsX21vZGVfc2VnbWVudF9hZGRyZXNzOwkvKiBidWZmZXIgYWRkcmVzczogc2VnbWVudCAqLworICAgIGRwbWlfcmVncy54LmJ4ID0gMDsJCQkJLyogYnVmZmVyIGFkZHJlc3M6IG9mZnNldCAqLworICAgIGlmIChfX2RwbWlfaW50KDB4MmYsICZkcG1pX3JlZ3MpID09IC0xKQorICAgIHsKKwkvKiByZWFsLW1vZGUgaW50ZXJydXB0IGZhaWxlZC4gKi8KKwlGcmVlRE9TTWVtb3J5KHByb3RlY3RlZF9tb2RlX3NlbGVjdG9yKTsgICAvKiBjbGVhbiB1cCBET1MgbWVtb3J5ICovCisJcmV0dXJuIEZBTFNFOwkJCQkgIC8qIGVhcmx5IGV4aXQgKi8KKyAgICB9CisKKyAgICAvKiBGcmVlIHRoZSBET1MgYnVmZmVyIGFuZCByZWxlYXNlIHRoZSBEUE1JIHByb3QtbW9kZSBzZWxlY3Rvci4gKi8KKyAgICBGcmVlRE9TTWVtb3J5KHByb3RlY3RlZF9tb2RlX3NlbGVjdG9yKTsJICAvKiBjbGVhbiB1cCBET1MgbWVtb3J5ICovCisKKyAgICByZXR1cm4gVFJVRTsJLyogVFJVRSAtLT4gZGF0YSBzdWNjZXNzZnVsbHkgc2VudCB0byBjbGlwYm9hcmQgKi8KK30KKworI2VuZGlmCS8qIEZFQVRfQ0xJUEJPQVJEICovCisjZW5kaWYgLyogREpHUFAgKi8KKworLyoKKyAqIEVuZCBvZiBNUy1ET1Mgb25seSBjb2RlCisgKi8KKyNlbmRpZiAvKiBXSU4xNiAqLworCisvKiBjb21tb24gTVMtRE9TIGFuZCBXaW4xNiBjb2RlIGZvbGxvd3MgKi8KKworICAgIHN0YXRpYyBpbnQKK3ZpbV9jaG1vZChjaGFyX3UgKm5hbWUpCit7CisgICAgY2hhcl91CSpwOworICAgIGludAkJZjsKKyAgICBpbnQJCWMgPSAwOworCisgICAgLyogY2htb2QoKSBjYW4ndCBoYW5kbGUgYSBmaWxlIG5hbWUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLCByZW1vdmUgaXQuCisgICAgICogQnV0IGRvbid0IHJlbW92ZSBpdCBmb3IgIi8iIG9yICJjOi8iLiAqLworICAgIHAgPSBuYW1lICsgU1RSTEVOKG5hbWUpOworICAgIGlmIChwID4gbmFtZSkKKwktLXA7CisgICAgaWYgKHAgPiBuYW1lICYmICgqcCA9PSAnXFwnIHx8ICpwID09ICcvJykgJiYgcFstMV0gIT0gJzonKQorICAgIHsKKwljID0gKnA7CQkJCS8qIHJlbW92ZSB0cmFpbGluZyAoYmFjaylzbGFzaCAqLworCSpwID0gTlVMOworICAgIH0KKyAgICBlbHNlCisJcCA9IE5VTEw7CisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIChfX0JPUkxBTkRDX18gPiAweDQxMCkKKyAgICAvKiB0aGlzIGFsc28gc2V0cyB0aGUgYXJjaGl2ZSBiaXQsIHN1cHBvcnRlZCBieSBCb3JsYW5kIEMgNC4wIGFuZCBsYXRlciwKKyAgICAgKiB3aGVyZSBfX0JPUkxBTkRDX18gaXMgMHg0NTAgKDMuMSBpcyAweDQxMCkgKi8KKyAgICBmID0gX3J0bF9jaG1vZCgoY2hhciAqKW5hbWUsIDAsIDApOworI2Vsc2UKKyAgICBmID0gX2NobW9kKChjaGFyICopbmFtZSwgMCwgMCk7CisjZW5kaWYKKyAgICBpZiAocCAhPSBOVUxMKQorCSpwID0gYzsJCQkJLyogcHV0IGJhY2sgKGJhY2spc2xhc2ggKi8KKyAgICByZXR1cm4gZjsKK30KKworLyoKKyAqIGdldCBmaWxlIHBlcm1pc3Npb25zIGZvciAnbmFtZScKKyAqIFJldHVybnMgLTEgZm9yIGVycm9yLgorICogUmV0dXJucyBGQV9hdHRyaWJ1dGVzIGRlZmluZWQgaW4gZG9zLmgKKyAqLworICAgIGxvbmcKK21jaF9nZXRwZXJtKGNoYXJfdSAqbmFtZSkKK3sKKyAgICByZXR1cm4gKGxvbmcpdmltX2NobW9kKG5hbWUpOwkvKiBnZXQgZmlsZSBtb2RlICovCit9CisKKy8qCisgKiBzZXQgZmlsZSBwZXJtaXNzaW9uIGZvciAnbmFtZScgdG8gJ3Blcm0nCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CittY2hfc2V0cGVybSgKKyAgICBjaGFyX3UJKm5hbWUsCisgICAgbG9uZwlwZXJtKQoreworICAgIHBlcm0gfD0gRkFfQVJDSDsJICAgIC8qIGZpbGUgaGFzIGNoYW5nZWQsIHNldCBhcmNoaXZlIGJpdCAqLworI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoX19CT1JMQU5EQ19fID4gMHg0MTApCisgICAgcmV0dXJuIChfcnRsX2NobW9kKChjaGFyICopbmFtZSwgMSwgKGludClwZXJtKSA9PSAtMSA/IEZBSUwgOiBPSyk7CisjZWxzZQorICAgIHJldHVybiAoX2NobW9kKChjaGFyICopbmFtZSwgMSwgKGludClwZXJtKSA9PSAtMSA/IEZBSUwgOiBPSyk7CisjZW5kaWYKK30KKworLyoKKyAqIFNldCBoaWRkZW4gZmxhZyBmb3IgIm5hbWUiLgorICovCisgICAgdm9pZAorbWNoX2hpZGUoY2hhcl91ICpuYW1lKQoreworICAgIC8qIERPUyA2LjIgc2hhcmUuZXhlIGNhdXNlcyAic2VlayBlcnJvciBvbiBmaWxlIHdyaXRlIiBlcnJvcnMgd2hlbiBtYWtpbmcKKyAgICAgKiB0aGUgc3dhcCBmaWxlIGhpZGRlbi4gIFRodXMgZG9uJ3QgZG8gaXQuICovCit9CisKKy8qCisgKiByZXR1cm4gVFJVRSBpZiAibmFtZSIgaXMgYSBkaXJlY3RvcnkKKyAqIHJldHVybiBGQUxTRSBpZiAibmFtZSIgaXMgbm90IGEgZGlyZWN0b3J5CisgKiByZXR1cm4gRkFMU0UgZm9yIGVycm9yCisgKgorICogYmV3YXJlIG9mIGEgdHJhaWxpbmcgKGJhY2spc2xhc2gKKyAqLworICAgIGludAorbWNoX2lzZGlyKGNoYXJfdSAqbmFtZSkKK3sKKyAgICBpbnQJCWY7CisKKyAgICBmID0gdmltX2NobW9kKG5hbWUpOworICAgIGlmIChmID09IC0xKQorCXJldHVybiBGQUxTRTsJCSAgICAvKiBmaWxlIGRvZXMgbm90IGV4aXN0IGF0IGFsbCAqLworICAgIGlmICgoZiAmIEZBX0RJUkVDKSA9PSAwKQorCXJldHVybiBGQUxTRTsJCSAgICAvKiBub3QgYSBkaXJlY3RvcnkgKi8KKyAgICByZXR1cm4gVFJVRTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiAxIGlmICJuYW1lIiBjYW4gYmUgZXhlY3V0ZWQsIDAgaWYgbm90LgorICogUmV0dXJuIC0xIGlmIHVua25vd24uCisgKi8KKyAgICBpbnQKK21jaF9jYW5fZXhlKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIHJldHVybiAoc2VhcmNocGF0aChuYW1lKSAhPSBOVUxMKTsKK30KKyNlbmRpZgorCisvKgorICogQ2hlY2sgd2hhdCAibmFtZSIgaXM6CisgKiBOT0RFX05PUk1BTDogZmlsZSBvciBkaXJlY3RvcnkgKG9yIGRvZXNuJ3QgZXhpc3QpCisgKiBOT0RFX1dSSVRBQkxFOiB3cml0YWJsZSBkZXZpY2UsIHNvY2tldCwgZmlmbywgZXRjLgorICogTk9ERV9PVEhFUjogbm9uLXdyaXRhYmxlIHRoaW5ncworICovCisgICAgaW50CittY2hfbm9kZXR5cGUoY2hhcl91ICpuYW1lKQoreworICAgIGlmIChTVFJJQ01QKG5hbWUsICJBVVgiKSA9PSAwCisJICAgIHx8IFNUUklDTVAobmFtZSwgIkNPTiIpID09IDAKKwkgICAgfHwgU1RSSUNNUChuYW1lLCAiQ0xPQ0skIikgPT0gMAorCSAgICB8fCBTVFJJQ01QKG5hbWUsICJOVUwiKSA9PSAwCisJICAgIHx8IFNUUklDTVAobmFtZSwgIlBSTiIpID09IDAKKwkgICAgfHwgKChTVFJOSUNNUChuYW1lLCAiQ09NIiwgMykgPT0gMAorCQkgICAgfHwgU1RSTklDTVAobmFtZSwgIkxQVCIsIDMpID09IDApCisJCSYmIFZJTV9JU0RJR0lUKG5hbWVbM10pCisJCSYmIG5hbWVbNF0gPT0gTlVMKSkKKwlyZXR1cm4gTk9ERV9XUklUQUJMRTsKKyAgICAvKiBUT0RPOiBOT0RFX09USEVSPyAqLworICAgIHJldHVybiBOT0RFX05PUk1BTDsKK30KKworLyoKKyAqIEdldCBuYW1lIG9mIGN1cnJlbnQgZGlyZWN0b3J5IGludG8gYnVmZmVyICdidWYnIG9mIGxlbmd0aCAnbGVuJyBieXRlcy4KKyAqIFJldHVybiBPSyBmb3Igc3VjY2VzcywgRkFJTCBmb3IgZmFpbHVyZS4KKyAqLworICAgIGludAorbWNoX2Rpcm5hbWUoCisgICAgY2hhcl91CSpidWYsCisgICAgaW50CQlsZW4pCit7CisjaWZkZWYgREpHUFAKKyAgICBpZiAoZ2V0Y3dkKChjaGFyICopYnVmLCBsZW4pID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisgICAgLyogdHVybiB0aGUgJy8ncyByZXR1cm5lZCBieSBESkdQUCBpbnRvICdcJ3MgKi8KKyAgICBzbGFzaF9hZGp1c3QoYnVmKTsKKyAgICByZXR1cm4gT0s7CisjZWxzZQorICAgIHJldHVybiAoZ2V0Y3dkKChjaGFyICopYnVmLCBsZW4pICE9IE5VTEwgPyBPSyA6IEZBSUwpOworI2VuZGlmCit9CisKKy8qCisgKiB0aGlzIHZlcnNpb24gb2YgcmVtb3ZlIGlzIG5vdCBzY2FyZWQgYnkgYSByZWFkb25seSAoYmFja3VwKSBmaWxlCisgKgorICogcmV0dXJucyAtMSBvbiBlcnJvciwgMCBvdGhlcndpc2UgKGp1c3QgbGlrZSByZW1vdmUoKSkKKyAqLworICAgIGludAorbWNoX3JlbW92ZShjaGFyX3UgKm5hbWUpCit7CisgICAgKHZvaWQpbWNoX3NldHBlcm0obmFtZSwgMCk7ICAgIC8qIGRlZmF1bHQgcGVybWlzc2lvbnMgKi8KKyAgICByZXR1cm4gdW5saW5rKChjaGFyICopbmFtZSk7Cit9CisKKy8qCisgKiBTcGVjaWFsIHZlcnNpb24gb2YgZ2V0ZW52KCk6IFVzZSB1cHBlcmNhc2UgbmFtZS4KKyAqLworICAgIGNoYXJfdSAqCittY2hfZ2V0ZW52KGNoYXJfdSAqbmFtZSkKK3sKKyAgICBpbnQJCWk7CisjZGVmaW5lIE1BWEVOVkxFTiA1MAorICAgIGNoYXJfdQl2YXJfY29weVtNQVhFTlZMRU4gKyAxXTsKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSpyZXM7CisKKyAgICAvKgorICAgICAqIFRha2UgYSBjb3B5IG9mIHRoZSBhcmd1bWVudCwgYW5kIGZvcmNlIGl0IHRvIHVwcGVyIGNhc2UgYmVmb3JlIHBhc3NpbmcKKyAgICAgKiB0byBnZXRlbnYoKS4gIE9uIERPUyBzeXN0ZW1zLCBnZXRlbnYoKSBkb2Vzbid0IGxpa2UgbG93ZXItY2FzZSBhcmd1bWVudAorICAgICAqICh1bmxpa2UgV2luMzIgZXQgYWwuKSAgSWYgdGhlIG5hbWUgaXMgdG9vIGxvbmcgdG8gZml0IGluIHZhcl9jb3B5W10KKyAgICAgKiBhbGxvY2F0ZSBtZW1vcnkuCisgICAgICovCisgICAgaWYgKChpID0gU1RSTEVOKG5hbWUpKSA+IE1BWEVOVkxFTikKKwlwID0gYWxsb2MoaSArIDEpOworICAgIGVsc2UKKwlwID0gdmFyX2NvcHk7CisgICAgaWYgKHAgPT0gTlVMTCkKKwlwID0gbmFtZTsgICAvKiBvdXQgb2YgbWVtb3J5LCBmYWxsIGJhY2sgdG8gdW5tb2RpZmllZCBuYW1lICovCisgICAgZWxzZQorICAgIHsKKwlmb3IgKGkgPSAwOyBuYW1lW2ldICE9IE5VTDsgKytpKQorCSAgICBwW2ldID0gdG91cHBlcihuYW1lW2ldKTsKKwlwW2ldID0gTlVMOworICAgIH0KKworICAgIHJlcyA9IChjaGFyX3UgKilnZXRlbnYoKGNoYXIgKilwKTsKKworICAgIGlmIChwICE9IHZhcl9jb3B5ICYmIHAgIT0gbmFtZSkKKwl2aW1fZnJlZShwKTsKKworICAgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBJbnNlcnQgdXNlciBuYW1lIGluIHNbbGVuXS4KKyAqLworICAgIGludAorbWNoX2dldF91c2VyX25hbWUoCisgICAgY2hhcl91CSpzLAorICAgIGludAkJbGVuKQoreworICAgICpzID0gTlVMOworICAgIHJldHVybiBGQUlMOworfQorCisvKgorICogSW5zZXJ0IGhvc3QgbmFtZSBpcyBzW2xlbl0uCisgKi8KKyAgICB2b2lkCittY2hfZ2V0X2hvc3RfbmFtZSgKKyAgICBjaGFyX3UJKnMsCisgICAgaW50CQlsZW4pCit7CisjaWZkZWYgREpHUFAKKyAgICBTVFJOQ1BZKHMsICJQQyAoMzIgYml0cyBWaW0pIiwgbGVuKTsKKyNlbHNlCisgICAgU1RSTkNQWShzLCAiUEMgKDE2IGJpdHMgVmltKSIsIGxlbik7CisjZW5kaWYKKyAgICBzW2xlbiAtIDFdID0gTlVMOwkvKiBtYWtlIHN1cmUgaXQncyB0ZXJtaW5hdGVkICovCit9CmRpZmYgLS1naXQgYS9zcmMvb3NfbXNkb3MuaCBiL3NyYy9vc19tc2Rvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NmIyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3NfbXNkb3MuaApAQCAtMCwwICsxLDEwNiBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworLyoKKyAqIE1TRE9TIE1hY2hpbmUtZGVwZW5kZW50IHRoaW5ncy4KKyAqLworCisjaW5jbHVkZSAib3NfZG9zLmgiCQkvKiBjb21tb24gTVMtRE9TIGFuZCBXaW4zMiBzdHVmZiAqLworCisjZGVmaW5lIEJJTkFSWV9GSUxFX0lPCisjZGVmaW5lIFVTRV9FWEVfTkFNRQkJLyogdXNlIGFyZ3ZbMF0gZm9yICRWSU0gKi8KKyNkZWZpbmUgTk9fQ09PS0VEX0lOUFVUCQkvKiBtY2hfaW5jaGFyKCkgZG9lc24ndCByZXR1cm4gd2hvbGUgbGluZXMgKi8KKyNkZWZpbmUgU1lOQ19EVVBfQ0xPU0UJCS8qIHN5bmMoKSBhIGZpbGUgd2l0aCBkdXAoKSBhbmQgY2xvc2UoKSAqLworI2RlZmluZSBVU0VfVEVSTV9DT05TT0xFCisjaWZkZWYgREpHUFAKKyMgaW5jbHVkZSA8ZmNudGwuaD4JCS8qIGRlZmluZXMgX1VTRV9MRk4gKi8KKyMgZGVmaW5lIFVTRV9MT05HX0ZOQU1FIF9VU0VfTEZOICAgIC8qIGRlY2lkZSBhdCBydW4gdGltZSAqLworIyBkZWZpbmUgVVNFX0ZOQU1FX0NBU0UKKyMgZGVmaW5lIEhBVkVfUFVURU5WCisjZWxzZQorIyBkZWZpbmUgU0hPUlRfRk5BTUUJCS8qIGFsd2F5cyA4LjMgZmlsZSBuYW1lICovCisjZW5kaWYKKyNkZWZpbmUgSEFWRV9TVERMSUJfSAorI2RlZmluZSBIQVZFX1NUUklOR19ICisjZGVmaW5lIEhBVkVfRkNOVExfSAorI2RlZmluZSBIQVZFX1NUUkNTUE4KKyNkZWZpbmUgSEFWRV9TVFJJQ01QCisjZGVmaW5lIEhBVkVfU1RSRlRJTUUJCS8qIGd1ZXNzZWQgKi8KKyNkZWZpbmUgSEFWRV9TVFJOSUNNUAorI2RlZmluZSBIQVZFX01FTVNFVAorI2RlZmluZSBIQVZFX1FTT1JUCisjZGVmaW5lIEhBVkVfU1RfTU9ERQkJLyogaGF2ZSBzdGF0LnN0X21vZGUgKi8KKyNpZiBkZWZpbmVkKF9fREFURV9fKSAmJiBkZWZpbmVkKF9fVElNRV9fKQorIyBkZWZpbmUgSEFWRV9EQVRFX1RJTUUKKyNlbmRpZgorI2RlZmluZSBCUkVBS0NIRUNLX1NLSVAJICAgIDEJLyogY2FsbCBtY2hfYnJlYWtjaGVjaygpIGVhY2ggdGltZSwgaXQncyBmYXN0ICovCisjZGVmaW5lIEhBVkVfQVZBSUxfTUVNCisKKy8qCisgKiBCb3JsYW5kIEMrKyAzLjEgZG9lc24ndCBoYXZlIF9SVExFTlRSWUYKKyAqLworI2lmZGVmIF9fQk9STEFORENfXworIyBpZiBfX0JPUkxBTkRDX18gPCAweDQ1MAorIyAgZGVmaW5lIF9SVExFTlRSWUYKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIEZOQU1FX0lMTEVHQUwgIlwiKj8+PHwiIC8qIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBhIGZpbGUgbmFtZSAqLworCisjaW5jbHVkZSA8ZG9zLmg+CisjaW5jbHVkZSA8ZGlyLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaWZkZWYgREpHUFAKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjIGRlZmluZSBIQVZFX0xPQ0FMRV9ICisjIGRlZmluZSBzZXRsb2NhbGUoYywgcCkgICAgZGpncHBfc2V0bG9jYWxlKCkKKyNlbmRpZgorCisjaWZuZGVmIERKR1BQCit0eXBlZGVmIGxvbmcgb2ZmX3Q7CisjZW5kaWYKKworLyoKKyAqIFRyeSBzZXZlcmFsIGRpcmVjdG9yaWVzIHRvIHB1dCB0aGUgdGVtcCBmaWxlcy4KKyAqLworI2RlZmluZSBURU1QRElSTkFNRVMJIiRUTVAiLCAiJFRFTVAiLCAiYzpcXFRNUCIsICJjOlxcVEVNUCIsICIiCisjZGVmaW5lIFRFTVBOQU1FTEVOCTEyOAorCisjaWZuZGVmIERGTFRfTUFYTUVNCisjIGRlZmluZSBERkxUX01BWE1FTQkyNTYJCS8qIHVzZSB1cCB0byAyNTZLYnl0ZSBmb3IgYnVmZmVyICovCisjZW5kaWYKKyNpZm5kZWYgREZMVF9NQVhNRU1UT1QKKyMgZGVmaW5lIERGTFRfTUFYTUVNVE9UCTAJCS8qIGRlY2lkZSBpbiBzZXRfaW5pdCAqLworI2VuZGlmCisKKyNpZmRlZiBESkdQUAorIyBkZWZpbmUgQkFTRU5BTUVMRU4gIChfVVNFX0xGTj8yNTA6OCkJLyogbGVuZ3RoIG9mIGJhc2Ugb2YgZmlsZSBuYW1lICovCisjZWxzZQorIyBkZWZpbmUgQkFTRU5BTUVMRU4JICAgIDgJCS8qIGxlbmd0aCBvZiBiYXNlIG9mIGZpbGUgbmFtZSAqLworI2VuZGlmCisKKy8qIGNvZGVzIGZvciBtc2RvcyBtb3VzZSBldmVudCAqLworI2RlZmluZSBNU0RPU19NT1VTRV9MRUZUCTB4MDEKKyNkZWZpbmUgTVNET1NfTU9VU0VfUklHSFQJMHgwMgorI2RlZmluZSBNU0RPU19NT1VTRV9NSURETEUJMHgwNAorCisjaWZkZWYgREpHUFAKK2ludCBtY2hfcmVuYW1lKGNvbnN0IGNoYXIgKk9sZEZpbGUsIGNvbnN0IGNoYXIgKk5ld0ZpbGUpOworI2Vsc2UKKyMgZGVmaW5lIG1jaF9yZW5hbWUoc3JjLCBkc3QpIHJlbmFtZShzcmMsIGRzdCkKKyNlbmRpZgorCisjaWZkZWYgREpHUFAKKyMgZGVmaW5lIHZpbV9ta2Rpcih4LCB5KSBta2RpcigoY2hhciAqKSh4KSwgeSkKKyNlbHNlCisjIGRlZmluZSB2aW1fbWtkaXIoeCwgeSkgbWtkaXIoKGNoYXIgKikoeCkpCisjZW5kaWYKKyNkZWZpbmUgbWNoX3JtZGlyKHgpIHJtZGlyKChjaGFyICopKHgpKQorCisjZGVmaW5lIG1jaF9zZXRlbnYobmFtZSwgdmFsLCB4KSBzZXRlbnYobmFtZSwgdmFsLCB4KQpkaWZmIC0tZ2l0IGEvc3JjL29zX21zd2luLmMgYi9zcmMvb3NfbXN3aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzgwM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX21zd2luLmMKQEAgLTAsMCArMSwzMjQ1IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBvc19tc3dpbi5jCisgKgorICogUm91dGluZXMgY29tbW9uIHRvIGJvdGggV2luMTYgYW5kIFdpbjMyLgorICovCisKKyNpZmRlZiBXSU4xNgorIyBpZmRlZiBfX0JPUkxBTkRDX18KKyMgIHByYWdtYSB3YXJuIC1wYXIKKyMgIHByYWdtYSB3YXJuIC11Y3AKKyMgIHByYWdtYSB3YXJuIC11c2UKKyMgIHByYWdtYSB3YXJuIC1hdXMKKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8aW8uaD4KKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmZGVmIEhBVkVfRkNOVExfSAorIyBpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisjaWZkZWYgV0lOMTYKKyMgZGVmaW5lIFNIT1JUX0ZOQU1FCQkvKiBhbHdheXMgOC4zIGZpbGUgbmFtZSAqLworIyBpbmNsdWRlIDxkb3MuaD4KKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHByb2Nlc3MuaD4KKworI3VuZGVmIGNoZGlyCisjaWZkZWYgX19HTlVDX18KKyMgaWZuZGVmIF9fTUlOR1czMl9fCisjICBpbmNsdWRlIDxkaXJlbnQuaD4KKyMgZW5kaWYKKyNlbHNlCisjIGluY2x1ZGUgPGRpcmVjdC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfVElUTEUpICYmICFkZWZpbmVkKEZFQVRfR1VJX1czMikKKyMgaW5jbHVkZSA8c2hlbGxhcGkuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1BSSU5URVIpICYmICFkZWZpbmVkKEZFQVRfUE9TVFNDUklQVCkKKyMgaW5jbHVkZSA8ZGxncy5oPgorIyBpZmRlZiBXSU4zMjY0CisjICBpbmNsdWRlIDx3aW5zcG9vbC5oPgorIyBlbHNlCisjICBpbmNsdWRlIDxwcmludC5oPgorIyBlbmRpZgorIyBpbmNsdWRlIDxjb21tZGxnLmg+CisjZW5kaWYKKworI2lmZGVmIF9fTUlOR1czMl9fCisjIGlmbmRlZiBGUk9NX0xFRlRfMVNUX0JVVFRPTl9QUkVTU0VECisjICBkZWZpbmUgRlJPTV9MRUZUXzFTVF9CVVRUT05fUFJFU1NFRCAgICAweDAwMDEKKyMgZW5kaWYKKyMgaWZuZGVmIFJJR0hUTU9TVF9CVVRUT05fUFJFU1NFRAorIyAgZGVmaW5lIFJJR0hUTU9TVF9CVVRUT05fUFJFU1NFRAkgIDB4MDAwMgorIyBlbmRpZgorIyBpZm5kZWYgRlJPTV9MRUZUXzJORF9CVVRUT05fUFJFU1NFRAorIyAgZGVmaW5lIEZST01fTEVGVF8yTkRfQlVUVE9OX1BSRVNTRUQgICAgMHgwMDA0CisjIGVuZGlmCisjIGlmbmRlZiBGUk9NX0xFRlRfM1JEX0JVVFRPTl9QUkVTU0VECisjICBkZWZpbmUgRlJPTV9MRUZUXzNSRF9CVVRUT05fUFJFU1NFRCAgICAweDAwMDgKKyMgZW5kaWYKKyMgaWZuZGVmIEZST01fTEVGVF80VEhfQlVUVE9OX1BSRVNTRUQKKyMgIGRlZmluZSBGUk9NX0xFRlRfNFRIX0JVVFRPTl9QUkVTU0VEICAgIDB4MDAxMAorIyBlbmRpZgorCisvKgorICogRXZlbnRGbGFncworICovCisjIGlmbmRlZiBNT1VTRV9NT1ZFRAorIyAgZGVmaW5lIE1PVVNFX01PVkVEICAgMHgwMDAxCisjIGVuZGlmCisjIGlmbmRlZiBET1VCTEVfQ0xJQ0sKKyMgIGRlZmluZSBET1VCTEVfQ0xJQ0sgIDB4MDAwMgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBXaGVuIGdlbmVyYXRpbmcgcHJvdG90eXBlcyBmb3IgV2luMzIgb24gVW5peCwgdGhlc2UgbGluZXMgbWFrZSB0aGUgc3ludGF4CisgKiBlcnJvcnMgZGlzYXBwZWFyLiAgVGhleSBkbyBub3QgbmVlZCB0byBiZSBjb3JyZWN0LgorICovCisjaWZkZWYgUFJPVE8KKyNkZWZpbmUgV0lOQVBJCisjZGVmaW5lIFdJTkJBU0VBUEkKK3R5cGVkZWYgaW50IEJPT0w7Cit0eXBlZGVmIGludCBDQUxMQkFDSzsKK3R5cGVkZWYgaW50IENPTE9SUkVGOwordHlwZWRlZiBpbnQgQ09OU09MRV9DVVJTT1JfSU5GTzsKK3R5cGVkZWYgaW50IENPT1JEOwordHlwZWRlZiBpbnQgRFdPUkQ7Cit0eXBlZGVmIGludCBFTlVNTE9HRk9OVDsKK3R5cGVkZWYgaW50IEhBTkRMRTsKK3R5cGVkZWYgaW50IEhEQzsKK3R5cGVkZWYgaW50IEhGT05UOwordHlwZWRlZiBpbnQgSElDT047Cit0eXBlZGVmIGludCBIV05EOwordHlwZWRlZiBpbnQgSU5QVVRfUkVDT1JEOwordHlwZWRlZiBpbnQgS0VZX0VWRU5UX1JFQ09SRDsKK3R5cGVkZWYgaW50IExPR0ZPTlQ7Cit0eXBlZGVmIGludCBMUEFSQU07Cit0eXBlZGVmIGludCBMUEJPT0w7Cit0eXBlZGVmIGludCBMUENTVFI7Cit0eXBlZGVmIGludCBMUENXU1RSOwordHlwZWRlZiBpbnQgTFBTVFI7Cit0eXBlZGVmIGludCBMUFRTVFI7Cit0eXBlZGVmIGludCBMUFdTVFI7Cit0eXBlZGVmIGludCBMUkVTVUxUOwordHlwZWRlZiBpbnQgTU9VU0VfRVZFTlRfUkVDT1JEOwordHlwZWRlZiBpbnQgTkVXVEVYVE1FVFJJQzsKK3R5cGVkZWYgaW50IFBBQ0w7Cit0eXBlZGVmIGludCBQUklOVERMRzsKK3R5cGVkZWYgaW50IFBTRUNVUklUWV9ERVNDUklQVE9SOwordHlwZWRlZiBpbnQgUFNJRDsKK3R5cGVkZWYgaW50IFNFQ1VSSVRZX0lORk9STUFUSU9OOwordHlwZWRlZiBpbnQgU0hPUlQ7Cit0eXBlZGVmIGludCBTTUFMTF9SRUNUOwordHlwZWRlZiBpbnQgVEVYVE1FVFJJQzsKK3R5cGVkZWYgaW50IFVJTlQ7Cit0eXBlZGVmIGludCBXQ0hBUjsKK3R5cGVkZWYgaW50IFdPUkQ7Cit0eXBlZGVmIGludCBXUEFSQU07Cit0eXBlZGVmIHZvaWQgVk9JRDsKKyNlbmRpZgorCisvKiBSZWNvcmQgYWxsIG91dHB1dCBhbmQgYWxsIGtleWJvYXJkICYgbW91c2UgaW5wdXQgKi8KKy8qICNkZWZpbmUgTUNIX1dSSVRFX0RVTVAgKi8KKworI2lmZGVmIE1DSF9XUklURV9EVU1QCitGSUxFKiBmZER1bXAgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBXSU4zMjY0CitleHRlcm4gRFdPUkQgZ19QbGF0Zm9ybUlkOworI2VuZGlmCisKKyNpZm5kZWYgRkVBVF9HVUlfTVNXSU4KK2V4dGVybiBjaGFyIGdfc3pPcmlnVGl0bGVbXTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUkKK2V4dGVybiBIV05EIHNfaHduZDsKKyNlbHNlCisjIGlmIChkZWZpbmVkKEZFQVRfUFJJTlRFUikgJiYgIWRlZmluZWQoRkVBVF9QT1NUU0NSSVBUKSkgXAorCXx8IGRlZmluZWQoRkVBVF9DTElFTlRTRVJWRVIpIFwKKwl8fCAoZGVmaW5lZChGRUFUX0VWQUwpICYmICFkZWZpbmVkKEZFQVRfR1VJKSkKKyMgIGRlZmluZSBIQVZFX0dFVENPTlNPTEVIV05ECitzdGF0aWMgSFdORCBzX2h3bmQgPSAwOwkgICAgLyogY29uc29sZSB3aW5kb3cgaGFuZGxlLCBzZXQgYnkgR2V0Q29uc29sZUh3bmQoKSAqLworIyBlbmRpZgorI2VuZGlmCisKK2V4dGVybiBpbnQgV1NJbml0aWFsaXplZDsKKworLyogRG9uJ3QgZ2VuZXJhdGUgcHJvdG90eXBlcyBoZXJlLCBiZWNhdXNlIHNvbWUgc3lzdGVtcyBkbyBoYXZlIHRoZXNlCisgKiBmdW5jdGlvbnMuICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoUFJPVE8pCisjIGlmbmRlZiBfX01JTkdXMzJfXworaW50IF9zdHJpY29sbChjaGFyICphLCBjaGFyICpiKQoreworICAgIC8vIHRoZSBBTlNJLWlzaCBjb3JyZWN0IHdheSBpcyB0byB1c2Ugc3RyeGZybSgpOgorICAgIGNoYXIgYV9idWZmWzUxMl0sIGJfYnVmZls1MTJdOyAgLy8gZmlsZSBuYW1lcywgc28gdGhpcyBpcyBlbm91Z2ggb24gV2luMzIKKyAgICBzdHJ4ZnJtKGFfYnVmZiwgYSwgNTEyKTsKKyAgICBzdHJ4ZnJtKGJfYnVmZiwgYiwgNTEyKTsKKyAgICByZXR1cm4gc3RyY29sbChhX2J1ZmYsIGJfYnVmZik7Cit9CisKK2NoYXIgKiBfZnVsbHBhdGgoY2hhciAqYnVmLCBjaGFyICpmbmFtZSwgaW50IGxlbikKK3sKKyAgICBMUFRTVFIgdG9zczsKKworICAgIHJldHVybiAoY2hhciAqKUdldEZ1bGxQYXRoTmFtZShmbmFtZSwgbGVuLCBidWYsICZ0b3NzKTsKK30KKyMgZW5kaWYKKworaW50IF9jaGRyaXZlKGludCBkcml2ZSkKK3sKKyAgICBjaGFyIHRlbXAgWzNdID0gIi06IjsKKyAgICB0ZW1wWzBdID0gZHJpdmUgKyAnQScgLSAxOworICAgIHJldHVybiAhU2V0Q3VycmVudERpcmVjdG9yeSh0ZW1wKTsKK30KKyNlbHNlCisjIGlmZGVmIF9fQk9STEFORENfXworLyogYmVpbmcgYSBtb3JlIEFOU0kgY29tcGxpYW50IGNvbXBpbGVyLCBCb3JsYW5kQyBkb2Vzbid0IGRlZmluZSBfc3RyaWNvbGw6CisgKiBidXQgaXQgZG9lcyBpbiBCQyA1LjAyISAqLworIyAgaWYgX19CT1JMQU5EQ19fIDwgMHg1MDIKK2ludCBfc3RyaWNvbGwoY2hhciAqYSwgY2hhciAqYikKK3sKKyMgICBpZiAxCisgICAgLy8gdGhpcyBpcyBmYXN0IGJ1dCBub3QgY29ycmVjdDoKKyAgICByZXR1cm4gc3RyaWNtcChhLCBiKTsKKyMgICBlbHNlCisgICAgLy8gdGhlIEFOU0ktaXNoIGNvcnJlY3Qgd2F5IGlzIHRvIHVzZSBzdHJ4ZnJtKCk6CisgICAgY2hhciBhX2J1ZmZbNTEyXSwgYl9idWZmWzUxMl07ICAvLyBmaWxlIG5hbWVzLCBzbyB0aGlzIGlzIGVub3VnaCBvbiBXaW4zMgorICAgIHN0cnhmcm0oYV9idWZmLCBhLCA1MTIpOworICAgIHN0cnhmcm0oYl9idWZmLCBiLCA1MTIpOworICAgIHJldHVybiBzdHJjb2xsKGFfYnVmZiwgYl9idWZmKTsKKyMgICBlbmRpZgorfQorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEdVSSB2ZXJzaW9uIG9mIG1jaF9leGl0KCkuCisgKiBTaHV0IGRvd24gYW5kIGV4aXQgd2l0aCBzdGF0dXMgYHInCisgKiBDYXJlZnVsOiBtY2hfZXhpdCgpIG1heSBiZSBjYWxsZWQgYmVmb3JlIG1jaF9pbml0KCkhCisgKi8KKyAgICB2b2lkCittY2hfZXhpdChpbnQgcikKK3sKKyAgICBkaXNwbGF5X2Vycm9ycygpOworCisgICAgbWxfY2xvc2VfYWxsKFRSVUUpOwkJLyogcmVtb3ZlIGFsbCBtZW1maWxlcyAqLworCisjIGlmZGVmIEZFQVRfT0xFCisgICAgVW5pbml0T0xFKCk7CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIGlmIChXU0luaXRpYWxpemVkKQorICAgIHsKKwlXU0luaXRpYWxpemVkID0gRkFMU0U7CisJV1NBQ2xlYW51cCgpOworICAgIH0KKyMgZW5kaWYKKyNpZmRlZiBEWU5BTUlDX0dFVFRFWFQKKyAgICBkeW5fbGliaW50bF9lbmQoKTsKKyNlbmRpZgorCisgICAgaWYgKGd1aS5pbl91c2UpCisJZ3VpX2V4aXQocik7CisgICAgZXhpdChyKTsKK30KKworI2VuZGlmIC8qIEZFQVRfR1VJX01TV0lOICovCisKKworLyoKKyAqIEluaXQgdGhlIHRhYmxlcyBmb3IgdG91cHBlcigpIGFuZCB0b2xvd2VyKCkuCisgKi8KKyAgICB2b2lkCittY2hfZWFybHlfaW5pdCh2b2lkKQoreworICAgIGludAkJaTsKKworI2lmZGVmIFdJTjMyNjQKKyAgICBQbGF0Zm9ybUlkKCk7CisjZW5kaWYKKworICAgIC8qIEluaXQgdGhlIHRhYmxlcyBmb3IgdG91cHBlcigpIGFuZCB0b2xvd2VyKCkgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpCisJdG91cHBlcl90YWJbaV0gPSB0b2xvd2VyX3RhYltpXSA9IGk7CisjaWZkZWYgV0lOMzI2NAorICAgIENoYXJVcHBlckJ1ZmYodG91cHBlcl90YWIsIDI1Nik7CisgICAgQ2hhckxvd2VyQnVmZih0b2xvd2VyX3RhYiwgMjU2KTsKKyNlbHNlCisgICAgQW5zaVVwcGVyQnVmZih0b3VwcGVyX3RhYiwgMjU2KTsKKyAgICBBbnNpTG93ZXJCdWZmKHRvbG93ZXJfdGFiLCAyNTYpOworI2VuZGlmCit9CisKKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBpbnB1dCBjb21lcyBmcm9tIGEgdGVybWluYWwsIEZBTFNFIG90aGVyd2lzZS4KKyAqLworICAgIGludAorbWNoX2lucHV0X2lzYXR0eSgpCit7CisjaWZkZWYgRkVBVF9HVUlfTVNXSU4KKyAgICByZXR1cm4gT0s7CSAgICAvKiBHVUkgYWx3YXlzIGhhcyBhIHR0eSAqLworI2Vsc2UKKyAgICBpZiAoaXNhdHR5KHJlYWRfY21kX2ZkKSkKKwlyZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gRkFMU0U7CisjZW5kaWYKK30KKworI2lmZGVmIEZFQVRfVElUTEUKKy8qCisgKiBtY2hfc2V0dGl0bGUoKTogc2V0IHRpdGxlYmFyIG9mIG91ciB3aW5kb3cKKyAqLworICAgIHZvaWQKK21jaF9zZXR0aXRsZSgKKyAgICBjaGFyX3UgKnRpdGxlLAorICAgIGNoYXJfdSAqaWNvbikKK3sKKyMgaWZkZWYgRkVBVF9HVUlfTVNXSU4KKyAgICBndWlfbWNoX3NldHRpdGxlKHRpdGxlLCBpY29uKTsKKyMgZWxzZQorICAgIGlmICh0aXRsZSAhPSBOVUxMKQorCVNldENvbnNvbGVUaXRsZSh0aXRsZSk7CisjIGVuZGlmCit9CisKKworLyoKKyAqIFJlc3RvcmUgdGhlIHdpbmRvdy9pY29uIHRpdGxlLgorICogd2hpY2ggaXMgb25lIG9mOgorICogIDE6IEp1c3QgcmVzdG9yZSB0aXRsZQorICogIDI6IEp1c3QgcmVzdG9yZSBpY29uICh3aGljaCB3ZSBkb24ndCBoYXZlKQorICogIDM6IFJlc3RvcmUgdGl0bGUgYW5kIGljb24gKHdoaWNoIHdlIGRvbid0IGhhdmUpCisgKi8KKyAgICB2b2lkCittY2hfcmVzdG9yZV90aXRsZSgKKyAgICBpbnQgd2hpY2gpCit7CisjaWZuZGVmIEZFQVRfR1VJX01TV0lOCisgICAgbWNoX3NldHRpdGxlKCh3aGljaCAmIDEpID8gZ19zek9yaWdUaXRsZSA6IE5VTEwsIE5VTEwpOworI2VuZGlmCit9CisKKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHdlIGNhbiByZXN0b3JlIHRoZSB0aXRsZSAod2UgY2FuKQorICovCisgICAgaW50CittY2hfY2FuX3Jlc3RvcmVfdGl0bGUoKQoreworICAgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB3ZSBjYW4gcmVzdG9yZSB0aGUgaWNvbiB0aXRsZSAod2UgY2FuJ3QpCisgKi8KKyAgICBpbnQKK21jaF9jYW5fcmVzdG9yZV9pY29uKCkKK3sKKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZW5kaWYgLyogRkVBVF9USVRMRSAqLworCisKKy8qCisgKiBHZXQgYWJzb2x1dGUgZmlsZSBuYW1lIGludG8gYnVmZmVyICdidWYnIG9mIGxlbmd0aCAnbGVuJyBieXRlcywKKyAqIHR1cm5pbmcgYWxsICcvJ3MgaW50byAnXFwncyBhbmQgZ2V0dGluZyB0aGUgY29ycmVjdCBjYXNlIG9mIGVhY2gKKyAqIGNvbXBvbmVudCBvZiB0aGUgZmlsZSBuYW1lLiAgQXBwZW5kIGEgYmFja3NsYXNoIHRvIGEgZGlyZWN0b3J5IG5hbWUuCisgKiBXaGVuICdzaGVsbHNsYXNoJyBzZXQgZG8gaXQgdGhlIG90aGVyIHdheSBhcm91bmQuCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIGludAorbWNoX0Z1bGxOYW1lKAorICAgIGNoYXJfdQkqZm5hbWUsCisgICAgY2hhcl91CSpidWYsCisgICAgaW50CQlsZW4sCisgICAgaW50CQlmb3JjZSkKK3sKKyAgICBpbnQJCW5SZXN1bHQgPSBGQUlMOworCisjaWZkZWYgX19CT1JMQU5EQ19fCisgICAgaWYgKCpmbmFtZSA9PSBOVUwpIC8qIEJvcmxhbmQgYmVoYXZlcyBiYWRseSBoZXJlIC0gbWFrZSBpdCBjb25zaXN0ZW50ICovCisJblJlc3VsdCA9IG1jaF9kaXJuYW1lKGJ1ZiwgbGVuKTsKKyAgICBlbHNlCisjZW5kaWYKKwlpZiAoX2Z1bGxwYXRoKGJ1ZiwgZm5hbWUsIGxlbiAtIDEpID09IE5VTEwpCisgICAgeworCVNUUk5DUFkoYnVmLCBmbmFtZSwgbGVuKTsgICAvKiBmYWlsZWQsIHVzZSB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lICovCisJYnVmW2xlbiAtIDFdID0gTlVMOworI2lmbmRlZiBVU0VfRk5BTUVfQ0FTRQorCXNsYXNoX2FkanVzdChidWYpOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKwluUmVzdWx0ID0gT0s7CisKKyNpZmRlZiBVU0VfRk5BTUVfQ0FTRQorICAgIGZuYW1lX2Nhc2UoYnVmLCBsZW4pOworI2VuZGlmCisKKyAgICByZXR1cm4gblJlc3VsdDsKK30KKworCisvKgorICogUmV0dXJuIFRSVUUgaWYgImZuYW1lIiBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICovCisgICAgaW50CittY2hfaXNGdWxsTmFtZShjaGFyX3UgKmZuYW1lKQoreworICAgIGNoYXIgc3pOYW1lW19NQVhfUEFUSCArIDFdOworCisgICAgLyogQSBuYW1lIGxpa2UgImQ6L2ZvbyIgYW5kICIvL3NlcnZlci9zaGFyZSIgaXMgYWJzb2x1dGUgKi8KKyAgICBpZiAoKGZuYW1lWzBdICYmIGZuYW1lWzFdID09ICc6JyAmJiAoZm5hbWVbMl0gPT0gJy8nIHx8IGZuYW1lWzJdID09ICdcXCcpKQorCSAgICB8fCAoZm5hbWVbMF0gPT0gZm5hbWVbMV0gJiYgKGZuYW1lWzBdID09ICcvJyB8fCBmbmFtZVswXSA9PSAnXFwnKSkpCisJcmV0dXJuIFRSVUU7CisKKyAgICAvKiBBIG5hbWUgdGhhdCBjYW4ndCBiZSBtYWRlIGFic29sdXRlIHByb2JhYmx5IGlzbid0IGFic29sdXRlLiAqLworICAgIGlmIChtY2hfRnVsbE5hbWUoZm5hbWUsIHN6TmFtZSwgX01BWF9QQVRILCBGQUxTRSkgPT0gRkFJTCkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gcGF0aGNtcChmbmFtZSwgc3pOYW1lKSA9PSAwOworfQorCisvKgorICogUmVwbGFjZSBhbGwgc2xhc2hlcyBieSBiYWNrc2xhc2hlcy4KKyAqIFRoaXMgdXNlZCB0byBiZSB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgYnV0IE1TLURPUyBzb21ldGltZXMgaGFzIHByb2JsZW1zCisgKiB3aXRoIHNsYXNoZXMgKGUuZy4gaW4gYSBjb21tYW5kIG5hbWUpLiAgV2UgY2FuJ3QgaGF2ZSBtaXhlZCBzbGFzaGVzIGFuZAorICogYmFja3NsYXNoZXMsIGJlY2F1c2UgY29tcGFyaW5nIGZpbGUgbmFtZXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuICBUaGUKKyAqIGNvbW1hbmRzIHRoYXQgdXNlIGEgZmlsZSBuYW1lIHNob3VsZCB0cnkgdG8gYXZvaWQgdGhlIG5lZWQgdG8gdHlwZSBhCisgKiBiYWNrc2xhc2ggdHdpY2UuCisgKiBXaGVuICdzaGVsbHNsYXNoJyBzZXQgZG8gaXQgdGhlIG90aGVyIHdheSBhcm91bmQuCisgKi8KKyAgICB2b2lkCitzbGFzaF9hZGp1c3QocCkKKyAgICBjaGFyX3UgICpwOworeworICAgIGlmIChwICE9IE5VTEwpCisJd2hpbGUgKCpwKQorCXsKKwkgICAgaWYgKCpwID09IHBzZXBjTikKKwkJKnAgPSBwc2VwYzsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCXAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCSsrcDsKKwl9Cit9CisKKworLyoKKyAqIHN0YXQoKSBjYW4ndCBoYW5kbGUgYSB0cmFpbGluZyAnLycgb3IgJ1wnLCByZW1vdmUgaXQgZmlyc3QuCisgKi8KKyAgICBpbnQKK3ZpbV9zdGF0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdHApCit7CisgICAgY2hhcglidWZbX01BWF9QQVRIICsgMV07CisgICAgY2hhcgkqcDsKKworICAgIFNUUk5DUFkoYnVmLCBuYW1lLCBfTUFYX1BBVEgpOworICAgIGJ1ZltfTUFYX1BBVEhdID0gTlVMOworICAgIHAgPSBidWYgKyBzdHJsZW4oYnVmKTsKKyAgICBpZiAocCA+IGJ1ZikKKwktLXA7CisgICAgaWYgKHAgPiBidWYgJiYgKCpwID09ICdcXCcgfHwgKnAgPT0gJy8nKSAmJiBwWy0xXSAhPSAnOicpCisJKnAgPSBOVUw7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChlbmNfY29kZXBhZ2UgPj0gMCAmJiAoaW50KUdldEFDUCgpICE9IGVuY19jb2RlcGFnZQorIyBpZmRlZiBfX0JPUkxBTkRDX18KKwkgICAgLyogV2lkZSBmdW5jdGlvbnMgb2YgQm9ybGFuZCBDIDUuNSBkbyBub3Qgd29yayBvbiBXaW5kb3dzIDk4LiAqLworCSAgICAmJiBnX1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UCisjIGVuZGlmCisgICAgICAgKQorICAgIHsKKwlXQ0hBUgkqd3AgPSBlbmNfdG9fdWNzMihidWYsIE5VTEwpOworCWludAluOworCisJaWYgKHdwICE9IE5VTEwpCisJeworCSAgICBuID0gX3dzdGF0KHdwLCAoc3RydWN0IF9zdGF0ICopc3RwKTsKKwkgICAgdmltX2ZyZWUod3ApOworCSAgICBpZiAobiA+PSAwKQorCQlyZXR1cm4gbjsKKwkgICAgLyogUmV0cnkgd2l0aCBub24td2lkZSBmdW5jdGlvbiAoZm9yIFdpbmRvd3MgOTgpLiBDYW4ndCB1c2UKKwkgICAgICogR2V0TGFzdEVycm9yKCkgaGVyZSBhbmQgaXQncyB1bmNsZWFyIHdoYXQgZXJybm8gZ2V0cyBzZXQgdG8gaWYKKwkgICAgICogdGhlIF93c3RhdCgpIGZhaWxzIGZvciBtaXNzaW5nIHdpZGUgZnVuY3Rpb25zLiAqLworCX0KKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gc3RhdChidWYsIHN0cCk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK21jaF9zZXR0bW9kZShpbnQgdG1vZGUpCit7CisgICAgLyogbm90aGluZyB0byBkbyAqLworfQorCisgICAgaW50CittY2hfZ2V0X3NoZWxsc2l6ZSh2b2lkKQoreworICAgIC8qIG5ldmVyIHVzZWQgKi8KKyAgICByZXR1cm4gT0s7Cit9CisKKyAgICB2b2lkCittY2hfc2V0X3NoZWxsc2l6ZSh2b2lkKQoreworICAgIC8qIG5ldmVyIHVzZWQgKi8KK30KKworLyoKKyAqIFJvd3MgYW5kL29yIENvbHVtbnMgaGFzIGNoYW5nZWQuCisgKi8KKyAgICB2b2lkCittY2hfbmV3X3NoZWxsc2l6ZSh2b2lkKQoreworICAgIC8qIG5ldmVyIHVzZWQgKi8KK30KKworI2VuZGlmCisKKy8qCisgKiBXZSBoYXZlIG5vIGpvYiBjb250cm9sLCBzbyBmYWtlIGl0IGJ5IHN0YXJ0aW5nIGEgbmV3IHNoZWxsLgorICovCisgICAgdm9pZAorbWNoX3N1c3BlbmQoKQoreworICAgIHN1c3BlbmRfc2hlbGwoKTsKK30KKworI2lmIGRlZmluZWQoVVNFX01DSF9FUlJNU0cpIHx8IGRlZmluZWQoUFJPVE8pCisKKyNpZmRlZiBkaXNwbGF5X2Vycm9ycworIyB1bmRlZiBkaXNwbGF5X2Vycm9ycworI2VuZGlmCisKKy8qCisgKiBEaXNwbGF5IHRoZSBzYXZlZCBlcnJvciBtZXNzYWdlKHMpLgorICovCisgICAgdm9pZAorZGlzcGxheV9lcnJvcnMoKQoreworICAgIGNoYXIgKnA7CisKKyAgICBpZiAoZXJyb3JfZ2EuZ2FfZGF0YSAhPSBOVUxMKQorICAgIHsKKwkvKiBhdm9pZCBwdXR0aW5nIHVwIGEgbWVzc2FnZSBib3ggd2l0aCBibGFua3Mgb25seSAqLworCWZvciAocCA9IChjaGFyICopZXJyb3JfZ2EuZ2FfZGF0YTsgKnA7ICsrcCkKKwkgICAgaWYgKCFpc3NwYWNlKCpwKSkKKwkgICAgeworCQkvKiBUcnVuY2F0ZSBhIHZlcnkgbG9uZyBtZXNzYWdlLCBpdCB3aWxsIGdvIG9mZi1zY3JlZW4uICovCisJCWlmIChTVFJMRU4ocCkgPiAyMDAwKQorCQl7CisJCSAgICBjaGFyX3UJKnMgPSBwICsgMjAwMCAtIDE0OworCisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCXMgLT0gKCptYl9oZWFkX29mZikocCwgcyk7CisjZW5kaWYKKwkJICAgIFNUUkNQWShzLCBfKCIuLi4odHJ1bmNhdGVkKSIpKTsKKwkJfQorI2lmZGVmIFdJTjMyNjQKKwkJTWVzc2FnZUJveChOVUxMLCBwLCAiVmltIiwgTUJfVEFTS01PREFMfE1CX1NFVEZPUkVHUk9VTkQpOworI2Vsc2UKKwkJTWVzc2FnZUJveChOVUxMLCBwLCAiVmltIiwgTUJfVEFTS01PREFMKTsKKyNlbmRpZgorCQlicmVhazsKKwkgICAgfQorCWdhX2NsZWFyKCZlcnJvcl9nYSk7CisgICAgfQorfQorI2VuZGlmCisKKworLyoKKyAqIFJldHVybiBUUlVFIGlmICJwIiBjb250YWluIGEgd2lsZGNhcmQgdGhhdCBjYW4gYmUgZXhwYW5kZWQgYnkKKyAqIGRvc19leHBhbmRwYXRoKCkuCisgKi8KKyAgICBpbnQKK21jaF9oYXNfZXhwX3dpbGRjYXJkKGNoYXJfdSAqcCkKK3sKKyAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgeworCWlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiPypbIiwgKnApICE9IE5VTEwKKwkJfHwgKCpwID09ICd+JyAmJiBwWzFdICE9IE5VTCkpCisJICAgIHJldHVybiBUUlVFOworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkgLSAxOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmICJwIiBjb250YWluIGEgd2lsZGNhcmQgb3IgYSAifjEiIGtpbmQgb2YgdGhpbmcgKGNvdWxkIGJlIGEKKyAqIHNob3J0ZW5lZCBmaWxlIG5hbWUpLgorICovCisgICAgaW50CittY2hfaGFzX3dpbGRjYXJkKGNoYXJfdSAqcCkKK3sKKyAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgeworCWlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikKKyMgIGlmZGVmIFZJTV9CQUNLVElDSworCQkJCSAgICAiPyokW2AiCisjICBlbHNlCisJCQkJICAgICI/KiRbIgorIyAgZW5kaWYKKwkJCQkJCSwgKnApICE9IE5VTEwKKwkJfHwgKCpwID09ICd+JyAmJiBwWzFdICE9IE5VTCkpCisJICAgIHJldHVybiBUUlVFOworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCSAgICBwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkgLSAxOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworCisvKgorICogVGhlIG5vcm1hbCBfY2hkaXIoKSBkb2VzIG5vdCBjaGFuZ2UgdGhlIGRlZmF1bHQgZHJpdmUuICBUaGlzIG9uZSBkb2VzLgorICogUmV0dXJuaW5nIDAgaW1wbGllcyBzdWNjZXNzOyAtMSBpbXBsaWVzIGZhaWx1cmUuCisgKi8KKyAgICBpbnQKK21jaF9jaGRpcihjaGFyICpwYXRoKQoreworICAgIGlmIChwYXRoWzBdID09IE5VTCkJCS8qIGp1c3QgY2hlY2tpbmcuLi4gKi8KKwlyZXR1cm4gLTE7CisKKyAgICBpZiAoaXNhbHBoYShwYXRoWzBdKSAmJiBwYXRoWzFdID09ICc6JykJLyogaGFzIGEgZHJpdmUgbmFtZSAqLworICAgIHsKKwkvKiBJZiB3ZSBjYW4gY2hhbmdlIHRvIHRoZSBkcml2ZSwgc2tpcCB0aGF0IHBhcnQgb2YgdGhlIHBhdGguICBJZiB3ZQorCSAqIGNhbid0IHRoZW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG1heSBiZSBpbnZhbGlkLCB0cnkgdXNpbmcgY2hkaXIoKQorCSAqIHdpdGggdGhlIHdob2xlIHBhdGguICovCisJaWYgKF9jaGRyaXZlKFRPTE9XRVJfQVNDKHBhdGhbMF0pIC0gJ2EnICsgMSkgPT0gMCkKKwkgICAgcGF0aCArPSAyOworICAgIH0KKworICAgIGlmICgqcGF0aCA9PSBOVUwpCQkvKiBkcml2ZSBuYW1lIG9ubHkgKi8KKwlyZXR1cm4gMDsKKworICAgIHJldHVybiBjaGRpcihwYXRoKTsJICAgICAgIC8qIGxldCB0aGUgbm9ybWFsIGNoZGlyKCkgZG8gdGhlIHJlc3QgKi8KK30KKworCisvKgorICogU3dpdGNoaW5nIG9mZiB0ZXJtY2FwIG1vZGUgaXMgb25seSBhbGxvd2VkIHdoZW4gQ29sdW1ucyBpcyA4MCwgb3RoZXJ3aXNlIGEKKyAqIGNyYXNoIG1heSByZXN1bHQuICBJdCdzIGFsd2F5cyBhbGxvd2VkIG9uIE5UIG9yIHdoZW4gcnVubmluZyB0aGUgR1VJLgorICovCisgICAgaW50CitjYW5fZW5kX3Rlcm1jYXBfbW9kZSgKKyAgICBpbnQgZ2l2ZV9tc2cpCit7CisjaWZkZWYgRkVBVF9HVUlfTVNXSU4KKyAgICByZXR1cm4gVFJVRTsJLyogR1VJIHN0YXJ0cyBhIG5ldyBjb25zb2xlIGFueXdheSAqLworI2Vsc2UKKyAgICBpZiAoZ19QbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVCB8fCBDb2x1bW5zID09IDgwKQorCXJldHVybiBUUlVFOworICAgIGlmIChnaXZlX21zZykKKwltc2coXygiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiKSk7CisgICAgcmV0dXJuIEZBTFNFOworI2VuZGlmCit9CisKKyNpZmRlZiBGRUFUX0dVSV9NU1dJTgorLyoKKyAqIHJldHVybiBub24temVybyBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUKKyAqLworICAgIGludAorbWNoX2NoYXJfYXZhaWwoKQoreworICAgIC8qIG5ldmVyIHVzZWQgKi8KKyAgICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZgorCisKKy8qCisgKiBzZXQgc2NyZWVuIG1vZGUsIGFsd2F5cyBmYWlscy4KKyAqLworICAgIGludAorbWNoX3NjcmVlbm1vZGUoCisgICAgY2hhcl91ICphcmcpCit7CisgICAgRU1TRyhfKGVfc2NyZWVubW9kZSkpOworICAgIHJldHVybiBGQUlMOworfQorCisKKyNpZiBkZWZpbmVkKEZFQVRfTElCQ0FMTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDYWxsIGEgRExMIHJvdXRpbmUgd2hpY2ggdGFrZXMgZWl0aGVyIGEgc3RyaW5nIG9yIGludCBwYXJhbQorICogYW5kIHJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZy4KKyAqIFJldHVybiBPSyBpZiBpdCB3b3JrZWQsIEZBSUwgaWYgbm90LgorICovCisjIGlmZGVmIFdJTjMyNjQKK3R5cGVkZWYgTFBUU1RSICgqTVlTVFJQUk9DU1RSKShMUFRTVFIpOwordHlwZWRlZiBMUFRTVFIgKCpNWUlOVFBST0NTVFIpKGludCk7Cit0eXBlZGVmIGludCAoKk1ZU1RSUFJPQ0lOVCkoTFBUU1RSKTsKK3R5cGVkZWYgaW50ICgqTVlJTlRQUk9DSU5UKShpbnQpOworIyBlbHNlCit0eXBlZGVmIExQU1RSICgqTVlTVFJQUk9DU1RSKShMUFNUUik7Cit0eXBlZGVmIExQU1RSICgqTVlJTlRQUk9DU1RSKShpbnQpOwordHlwZWRlZiBpbnQgKCpNWVNUUlBST0NJTlQpKExQU1RSKTsKK3R5cGVkZWYgaW50ICgqTVlJTlRQUk9DSU5UKShpbnQpOworIyBlbmRpZgorCisjIGlmbmRlZiBXSU4xNgorLyoKKyAqIENoZWNrIGlmIGEgcG9pbnRlciBwb2ludHMgdG8gYSB2YWxpZCBOVUwgdGVybWluYXRlZCBzdHJpbmcuCisgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBpbmNsdWRpbmcgdGVybWluYXRpbmcgTlVMLgorICogUmV0dXJucyAwIGZvciBhbiBpbnZhbGlkIHBvaW50ZXIsIDEgZm9yIGFuIGVtcHR5IHN0cmluZy4KKyAqLworICAgIHN0YXRpYyBzaXplX3QKK2NoZWNrX3N0cl9sZW4oY2hhcl91ICpzdHIpCit7CisgICAgU1lTVEVNX0lORk8JCQlzaTsKKyAgICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04JbWJpOworICAgIHNpemVfdAkJCWxlbmd0aCA9IDA7CisgICAgc2l6ZV90CQkJaTsKKyAgICBjb25zdCBjaGFyCQkJKnA7CisKKyAgICAvKiBnZXQgcGFnZSBzaXplICovCisgICAgR2V0U3lzdGVtSW5mbygmc2kpOworCisgICAgLyogZ2V0IG1lbW9yeSBpbmZvcm1hdGlvbiAqLworICAgIGlmIChWaXJ0dWFsUXVlcnkoc3RyLCAmbWJpLCBzaXplb2YobWJpKSkpCisgICAgeworCS8qIHByZSBjYXN0IHRoZXNlICh0eXBpbmcgc2F2ZXJzKSAqLworCURXT1JEIGR3U3RyID0gKERXT1JEKXN0cjsKKwlEV09SRCBkd0Jhc2VBZGRyZXNzID0gKERXT1JEKW1iaS5CYXNlQWRkcmVzczsKKworCS8qIGdldCBzdGFydCBhZGRyZXNzIG9mIHBhZ2UgdGhhdCBzdHIgaXMgb24gKi8KKwlEV09SRCBzdHJQYWdlID0gZHdTdHIgLSAoZHdTdHIgLSBkd0Jhc2VBZGRyZXNzKSAlIHNpLmR3UGFnZVNpemU7CisKKwkvKiBnZXQgbGVuZ3RoIGZyb20gc3RyIHRvIGVuZCBvZiBwYWdlICovCisJRFdPUkQgcGFnZUxlbmd0aCA9IHNpLmR3UGFnZVNpemUgLSAoZHdTdHIgLSBzdHJQYWdlKTsKKworCWZvciAocCA9IHN0cjsgIUlzQmFkUmVhZFB0cihwLCBwYWdlTGVuZ3RoKTsKKwkJCQkgIHAgKz0gcGFnZUxlbmd0aCwgcGFnZUxlbmd0aCA9IHNpLmR3UGFnZVNpemUpCisJICAgIGZvciAoaSA9IDA7IGkgPCBwYWdlTGVuZ3RoOyArK2ksICsrbGVuZ3RoKQorCQlpZiAocFtpXSA9PSBOVUwpCisJCSAgICByZXR1cm4gbGVuZ3RoICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKyMgZW5kaWYKKworICAgIGludAorbWNoX2xpYmNhbGwoCisgICAgY2hhcl91CSpsaWJuYW1lLAorICAgIGNoYXJfdQkqZnVuY25hbWUsCisgICAgY2hhcl91CSphcmdzdHJpbmcsCS8qIE5VTEwgd2hlbiB1c2luZyBhIGFyZ2ludCAqLworICAgIGludAkJYXJnaW50LAorICAgIGNoYXJfdQkqKnN0cmluZ19yZXN1bHQsLyogTlVMTCB3aGVuIHVzaW5nIG51bWJlcl9yZXN1bHQgKi8KKyAgICBpbnQJCSpudW1iZXJfcmVzdWx0KQoreworICAgIEhJTlNUQU5DRQkJaGluc3RMaWI7CisgICAgTVlTVFJQUk9DU1RSCVByb2NBZGQ7CisgICAgTVlJTlRQUk9DU1RSCVByb2NBZGRJOworICAgIGNoYXJfdQkJKnJldHZhbF9zdHIgPSBOVUxMOworICAgIGludAkJCXJldHZhbF9pbnQgPSAwOworICAgIHNpemVfdAkJbGVuOworCisgICAgQk9PTCBmUnVuVGltZUxpbmtTdWNjZXNzID0gRkFMU0U7CisKKyAgICAvLyBHZXQgYSBoYW5kbGUgdG8gdGhlIERMTCBtb2R1bGUuCisgICAgaGluc3RMaWIgPSBMb2FkTGlicmFyeShsaWJuYW1lKTsKKworICAgIC8vIElmIHRoZSBoYW5kbGUgaXMgdmFsaWQsIHRyeSB0byBnZXQgdGhlIGZ1bmN0aW9uIGFkZHJlc3MuCisgICAgaWYgKGhpbnN0TGliICE9IE5VTEwpCisgICAgeworI2lmZGVmIEhBVkVfVFJZX0VYQ0VQVAorCV9fdHJ5CisJeworI2VuZGlmCisJaWYgKGFyZ3N0cmluZyAhPSBOVUxMKQorCXsKKwkgICAgLyogQ2FsbCB3aXRoIHN0cmluZyBhcmd1bWVudCAqLworCSAgICBQcm9jQWRkID0gKE1ZU1RSUFJPQ1NUUikgR2V0UHJvY0FkZHJlc3MoaGluc3RMaWIsIGZ1bmNuYW1lKTsKKwkgICAgaWYgKChmUnVuVGltZUxpbmtTdWNjZXNzID0gKFByb2NBZGQgIT0gTlVMTCkpICE9IDApCisJICAgIHsKKwkJaWYgKHN0cmluZ19yZXN1bHQgPT0gTlVMTCkKKwkJICAgIHJldHZhbF9pbnQgPSAoKE1ZU1RSUFJPQ0lOVClQcm9jQWRkKShhcmdzdHJpbmcpOworCQllbHNlCisJCSAgICByZXR2YWxfc3RyID0gKFByb2NBZGQpKGFyZ3N0cmluZyk7CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgLyogQ2FsbCB3aXRoIG51bWJlciBhcmd1bWVudCAqLworCSAgICBQcm9jQWRkSSA9IChNWUlOVFBST0NTVFIpIEdldFByb2NBZGRyZXNzKGhpbnN0TGliLCBmdW5jbmFtZSk7CisJICAgIGlmICgoZlJ1blRpbWVMaW5rU3VjY2VzcyA9IChQcm9jQWRkSSAhPSBOVUxMKSkgIT0gMCkKKwkgICAgeworCQlpZiAoc3RyaW5nX3Jlc3VsdCA9PSBOVUxMKQorCQkgICAgcmV0dmFsX2ludCA9ICgoTVlJTlRQUk9DSU5UKVByb2NBZGRJKShhcmdpbnQpOworCQllbHNlCisJCSAgICByZXR2YWxfc3RyID0gKFByb2NBZGRJKShhcmdpbnQpOworCSAgICB9CisJfQorCisJLy8gU2F2ZSB0aGUgc3RyaW5nIGJlZm9yZSB3ZSBmcmVlIHRoZSBsaWJyYXJ5LgorCS8vIEFzc3VtZSB0aGF0IGEgIjEiIHJlc3VsdCBpcyBhbiBpbGxlZ2FsIHBvaW50ZXIuCisJaWYgKHN0cmluZ19yZXN1bHQgPT0gTlVMTCkKKwkgICAgKm51bWJlcl9yZXN1bHQgPSByZXR2YWxfaW50OworCWVsc2UgaWYgKHJldHZhbF9zdHIgIT0gTlVMTAorIyBpZmRlZiBXSU4xNgorCQkmJiByZXR2YWxfc3RyICE9IChjaGFyX3UgKikxCisJCSYmIHJldHZhbF9zdHIgIT0gKGNoYXJfdSAqKS0xCisJCSYmICFJc0JhZFN0cmluZ1B0cihyZXR2YWxfc3RyLCBJTlRfTUFYKQorCQkmJiAobGVuID0gc3RybGVuKHJldHZhbF9zdHIpICsgMSkgPiAwCisjIGVsc2UKKwkJJiYgKGxlbiA9IGNoZWNrX3N0cl9sZW4ocmV0dmFsX3N0cikpID4gMAorIyBlbmRpZgorCQkpCisJeworCSAgICAqc3RyaW5nX3Jlc3VsdCA9IGxhbGxvYygobG9uZ191KWxlbiwgVFJVRSk7CisJICAgIGlmICgqc3RyaW5nX3Jlc3VsdCAhPSBOVUxMKQorCQltY2hfbWVtbW92ZSgqc3RyaW5nX3Jlc3VsdCwgcmV0dmFsX3N0ciwgbGVuKTsKKwl9CisKKyNpZmRlZiBIQVZFX1RSWV9FWENFUFQKKwl9CisJX19leGNlcHQoRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUikKKwl7CisJICAgIGlmIChHZXRFeGNlcHRpb25Db2RlKCkgPT0gRVhDRVBUSU9OX1NUQUNLX09WRVJGTE9XKQorCQlSRVNFVFNUS09GTFcoKTsKKwkgICAgZlJ1blRpbWVMaW5rU3VjY2VzcyA9IDA7CisJfQorI2VuZGlmCisKKwkvLyBGcmVlIHRoZSBETEwgbW9kdWxlLgorCSh2b2lkKUZyZWVMaWJyYXJ5KGhpbnN0TGliKTsKKyAgICB9CisKKyAgICBpZiAoIWZSdW5UaW1lTGlua1N1Y2Nlc3MpCisgICAgeworCUVNU0cyKF8oZV9saWJjYWxsKSwgZnVuY25hbWUpOworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENvbnZlcnQgYW4gVVRGLTggc3RyaW5nIHRvIFVDUy0yLgorICogImluc3RyW2lubGVuXSIgaXMgdGhlIGlucHV0LiAgImlubGVuIiBpcyBpbiBieXRlcy4KKyAqIFdoZW4gIm91dHN0ciIgaXMgTlVMTCBvbmx5IHJldHVybiB0aGUgbnVtYmVyIG9mIFVDUy0yIHdvcmRzIHByb2R1Y2VkLgorICogT3RoZXJ3aXNlICJvdXRzdHIiIG11c3QgYmUgYSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIFVDUy0yIHdvcmRzIHByb2R1Y2VkLgorICovCisgICAgaW50Cit1dGY4X3RvX3VjczIoY2hhcl91ICppbnN0ciwgaW50IGlubGVuLCBzaG9ydF91ICpvdXRzdHIsIGludCAqdW5jb252bGVucCkKK3sKKyAgICBpbnQJCW91dGxlbiA9IDA7CisgICAgY2hhcl91CSpwID0gaW5zdHI7CisgICAgaW50CQl0b2RvID0gaW5sZW47CisgICAgaW50CQlsOworCisgICAgd2hpbGUgKHRvZG8gPiAwKQorICAgIHsKKwkvKiBPbmx5IGNvbnZlcnQgaWYgd2UgaGF2ZSBhIGNvbXBsZXRlIHNlcXVlbmNlLiAqLworCWwgPSB1dGZfcHRyMmxlbl9jaGVja19sZW4ocCwgdG9kbyk7CisJaWYgKGwgPiB0b2RvKQorCXsKKwkgICAgLyogUmV0dXJuIGxlbmd0aCBvZiBpbmNvbXBsZXRlIHNlcXVlbmNlLiAqLworCSAgICBpZiAodW5jb252bGVucCAhPSBOVUxMKQorCQkqdW5jb252bGVucCA9IHRvZG87CisJICAgIGJyZWFrOworCX0KKworCWlmIChvdXRzdHIgIT0gTlVMTCkKKwkgICAgKm91dHN0cisrID0gdXRmX3B0cjJjaGFyKHApOworCSsrb3V0bGVuOworCXAgKz0gbDsKKwl0b2RvIC09IGw7CisgICAgfQorCisgICAgcmV0dXJuIG91dGxlbjsKK30KKworLyoKKyAqIENvbnZlcnQgYW4gVUNTLTIgc3RyaW5nIHRvIFVURi04LgorICogVGhlIGlucHV0IGlzICJpbnN0cltpbmxlbl0iIHdpdGggImlubGVuIiBpbiBudW1iZXIgb2YgdWNzLTIgd29yZHMuCisgKiBXaGVuICJvdXRzdHIiIGlzIE5VTEwgb25seSByZXR1cm4gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcy4KKyAqIE90aGVyd2lzZSAib3V0c3RyIiBtdXN0IGJlIGEgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZS4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHByb2R1Y2VkLgorICovCisgICAgaW50Cit1Y3MyX3RvX3V0Zjgoc2hvcnRfdSAqaW5zdHIsIGludCBpbmxlbiwgY2hhcl91ICpvdXRzdHIpCit7CisgICAgaW50CQlvdXRsZW4gPSAwOworICAgIGludAkJdG9kbyA9IGlubGVuOworICAgIHNob3J0X3UJKnAgPSBpbnN0cjsKKyAgICBpbnQJCWw7CisKKyAgICB3aGlsZSAodG9kbyA+IDApCisgICAgeworCWlmIChvdXRzdHIgIT0gTlVMTCkKKwl7CisJICAgIGwgPSB1dGZfY2hhcjJieXRlcygqcCwgb3V0c3RyKTsKKwkgICAgb3V0c3RyICs9IGw7CisJfQorCWVsc2UKKwkgICAgbCA9IHV0Zl9jaGFyMmxlbigqcCk7CisJKytwOworCW91dGxlbiArPSBsOworCS0tdG9kbzsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0bGVuOworfQorCisvKgorICogQ2FsbCBNdWx0aUJ5dGVUb1dpZGVDaGFyKCkgYW5kIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlc3VsdC4KKyAqIFJldHVybnMgdGhlIHJlc3VsdCBpbiAiKm91dFsqb3V0bGVuXSIgd2l0aCBhbiBleHRyYSB6ZXJvIGFwcGVuZGVkLgorICogIm91dGxlbiIgaXMgaW4gd29yZHMuCisgKi8KKyAgICB2b2lkCitNdWx0aUJ5dGVUb1dpZGVDaGFyX2FsbG9jKFVJTlQgY3AsIERXT1JEIGZsYWdzLAorCUxQQ1NUUiBpbiwgaW50IGlubGVuLAorCUxQV1NUUiAqb3V0LCBpbnQgKm91dGxlbikKK3sKKyAgICAqb3V0bGVuID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjcCwgZmxhZ3MsIGluLCBpbmxlbiwgMCwgMCk7CisgICAgLyogQWRkIG9uZSBvbmUgd29yZCB0byBhdm9pZCBhIHplcm8tbGVuZ3RoIGFsbG9jKCkuICovCisgICAgKm91dCA9IChMUFdTVFIpYWxsb2Moc2l6ZW9mKFdDSEFSKSAqICgqb3V0bGVuICsgMSkpOworICAgIGlmICgqb3V0ICE9IE5VTEwpCisgICAgeworCU11bHRpQnl0ZVRvV2lkZUNoYXIoY3AsIGZsYWdzLCBpbiwgaW5sZW4sICpvdXQsICpvdXRsZW4pOworCSgqb3V0KVsqb3V0bGVuXSA9IDA7CisgICAgfQorfQorCisvKgorICogQ2FsbCBXaWRlQ2hhclRvTXVsdGlCeXRlKCkgYW5kIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlc3VsdC4KKyAqIFJldHVybnMgdGhlIHJlc3VsdCBpbiAiKm91dFsqb3V0bGVuXSIgd2l0aCBhbiBleHRyYSBOVUwgYXBwZW5kZWQuCisgKi8KKyAgICB2b2lkCitXaWRlQ2hhclRvTXVsdGlCeXRlX2FsbG9jKFVJTlQgY3AsIERXT1JEIGZsYWdzLAorCUxQQ1dTVFIgaW4sIGludCBpbmxlbiwKKwlMUFNUUiAqb3V0LCBpbnQgKm91dGxlbiwKKwlMUENTVFIgZGVmLCBMUEJPT0wgdXNlZGRlZikKK3sKKyAgICAqb3V0bGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShjcCwgZmxhZ3MsIGluLCBpbmxlbiwgTlVMTCwgMCwgZGVmLCB1c2VkZGVmKTsKKyAgICAvKiBBZGQgb25lIG9uZSBieXRlIHRvIGF2b2lkIGEgemVyby1sZW5ndGggYWxsb2MoKS4gKi8KKyAgICAqb3V0ID0gYWxsb2MoKHVuc2lnbmVkKSpvdXRsZW4gKyAxKTsKKyAgICBpZiAoKm91dCAhPSBOVUxMKQorICAgIHsKKwlXaWRlQ2hhclRvTXVsdGlCeXRlKGNwLCBmbGFncywgaW4sIGlubGVuLCAqb3V0LCAqb3V0bGVuLCBkZWYsIHVzZWRkZWYpOworCSgqb3V0KVsqb3V0bGVuXSA9IDA7CisgICAgfQorfQorCisjZW5kaWYgLyogRkVBVF9NQllURSAqLworCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKy8qCisgKiBDbGlwYm9hcmQgc3R1ZmYsIGZvciBjdXR0aW5nIGFuZCBwYXN0aW5nIHRleHQgdG8gb3RoZXIgd2luZG93cy4KKyAqLworCisvKiBUeXBlIHVzZWQgZm9yIHRoZSBjbGlwYm9hcmQgdHlwZSBvZiBWaW0ncyBkYXRhLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQgdHlwZTsJCS8qIE1DSEFSLCBNQkxPQ0sgb3IgTUxJTkUgKi8KKyAgICBpbnQgdHh0bGVuOwkJLyogbGVuZ3RoIG9mIENGX1RFWFQgaW4gYnl0ZXMgKi8KKyAgICBpbnQgdWNzbGVuOwkJLyogbGVuZ3RoIG9mIENGX1VOSUNPREVURVhUIGluIHdvcmRzICovCisgICAgaW50IHJhd2xlbjsJCS8qIGxlbmd0aCBvZiBjbGlwX3N0YXIuZm9ybWF0X3JhdywgaW5jbHVkaW5nIGVuY29kaW5nLAorCQkJICAgZXhjbHVkaW5nIHRlcm1pbmF0aW5nIE5VTCAqLworfSBWaW1DbGlwVHlwZV90OworCisvKgorICogTWFrZSB2aW0gdGhlIG93bmVyIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIFJldHVybiBPSyB1cG9uIHN1Y2Nlc3MuCisgKi8KKyAgICBpbnQKK2NsaXBfbWNoX293bl9zZWxlY3Rpb24oVmltQ2xpcGJvYXJkICpjYmQpCit7CisgICAgLyoKKyAgICAgKiBOZXZlciBhY3R1YWxseSBvd24gdGhlIGNsaXBib2FyZC4gIElmIGFub3RoZXIgYXBwbGljYXRpb24gc2V0cyB0aGUKKyAgICAgKiBjbGlwYm9hcmQsIHdlIGRvbid0IHdhbnQgdG8gdGhpbmsgdGhhdCB3ZSBzdGlsbCBvd24gaXQuCisgICAgICovCisgICAgcmV0dXJuIEZBSUw7Cit9CisKKy8qCisgKiBNYWtlIHZpbSBOT1QgdGhlIG93bmVyIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KKyAqLworICAgIHZvaWQKK2NsaXBfbWNoX2xvc2Vfc2VsZWN0aW9uKFZpbUNsaXBib2FyZCAqY2JkKQoreworICAgIC8qIE5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZSBoZXJlICovCit9CisKKy8qCisgKiBDb3B5ICJzdHJbKnNpemVdIiBpbnRvIGFsbG9jYXRlZCBtZW1vcnksIGNoYW5naW5nIENSLU5MIHRvIE5MLgorICogUmV0dXJuIHRoZSBhbGxvY2F0ZWQgcmVzdWx0IGFuZCB0aGUgc2l6ZSBpbiAiKnNpemUiLgorICogUmV0dXJucyBOVUxMIHdoZW4gb3V0IG9mIG1lbW9yeS4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorY3JubF90b19ubChjb25zdCBjaGFyX3UgKnN0ciwgaW50ICpzaXplKQoreworICAgIGludAkJcG9zID0gMDsKKyAgICBpbnQJCXN0cl9sZW4gPSAqc2l6ZTsKKyAgICBjaGFyX3UJKnJldDsKKyAgICBjaGFyX3UJKnJldHA7CisKKyAgICAvKiBBdm9pZCBhbGxvY2F0aW5nIHplcm8gYnl0ZXMsIGl0IGdlbmVyYXRlcyBhbiBlcnJvciBtZXNzYWdlLiAqLworICAgIHJldCA9IGxhbGxvYygobG9uZ191KShzdHJfbGVuID09IDAgPyAxIDogc3RyX2xlbiksIFRSVUUpOworICAgIGlmIChyZXQgIT0gTlVMTCkKKyAgICB7CisJcmV0cCA9IHJldDsKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IHN0cl9sZW47ICsrcG9zKQorCXsKKwkgICAgaWYgKHN0cltwb3NdID09ICdccicgJiYgc3RyW3BvcyArIDFdID09ICdcbicpCisJICAgIHsKKwkJKytwb3M7CisJCS0tKCpzaXplKTsKKwkgICAgfQorCSAgICAqcmV0cCsrID0gc3RyW3Bvc107CisJfQorICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogTm90ZTogdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBvbmx5IGd1YXJhbnRlZWQgdG8gd29yayB3aGVuIHVzaW5nCisgKiB2YWxpZCBNUy1XaW5kb3dzIGNvZGVwYWdlcyBvciB3aGVuIGljb252KCkgaXMgYXZhaWxhYmxlLgorICovCisKKy8qCisgKiBDb252ZXJ0ICJzdHIiIGZyb20gJ2VuY29kaW5nJyB0byBVQ1MtMi4KKyAqIElucHV0IGluICJzdHIiIHdpdGggbGVuZ3RoICIqbGVucCIuICBXaGVuICJsZW5wIiBpcyBOVUxMLCB1c2Ugc3RybGVuKCkuCisgKiBPdXRwdXQgaXMgcmV0dXJuZWQgYXMgYW4gYWxsb2NhdGVkIHN0cmluZy4gICIqbGVucCIgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YKKyAqIHRoZSByZXN1bHQuICBBIHRyYWlsaW5nIE5VTCBpcyBhbHdheXMgYWRkZWQuCisgKiBSZXR1cm5zIE5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LgorICovCisgICAgc2hvcnRfdSAqCitlbmNfdG9fdWNzMihjaGFyX3UgKnN0ciwgaW50ICpsZW5wKQoreworICAgIHZpbWNvbnZfVAljb252OworICAgIFdDSEFSCSpyZXQ7CisgICAgY2hhcl91CSphbGxvY2J1ZiA9IE5VTEw7CisgICAgaW50CQlsZW5fbG9jOworICAgIGludAkJbGVuZ3RoOworCisgICAgaWYgKGxlbnAgPT0gTlVMTCkKKyAgICB7CisJbGVuX2xvYyA9IFNUUkxFTihzdHIpICsgMTsKKwlsZW5wID0gJmxlbl9sb2M7CisgICAgfQorCisgICAgaWYgKGVuY19jb2RlcGFnZSA+IDApCisgICAgeworCS8qIFdlIGNhbiBkbyBhbnkgQ1AjIyMgLT4gVUNTLTIgaW4gb25lIHBhc3MsIGFuZCB3ZSBjYW4gZG8gaXQKKwkgKiB3aXRob3V0IGljb252KCkgKGNvbnZlcnRfKiBtYXkgbmVlZCBpY29udikuICovCisJTXVsdGlCeXRlVG9XaWRlQ2hhcl9hbGxvYyhlbmNfY29kZXBhZ2UsIDAsIHN0ciwgKmxlbnAsICZyZXQsICZsZW5ndGgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIFVzZSAibGF0aW4xIiBieSBkZWZhdWx0LCB3ZSBtaWdodCBiZSBjYWxsZWQgYmVmb3JlIHdlIGhhdmUgcF9lbmMKKwkgKiBzZXQgdXAuICBDb252ZXJ0IHRvIHV0Zi04IGZpcnN0LCB3b3JrcyBiZXR0ZXIgd2l0aCBpY29udigpLiAgRG9lcworCSAqIG5vdGhpbmcgaWYgJ2VuY29kaW5nJyBpcyAidXRmLTgiLiAqLworCWNvbnYudmNfdHlwZSA9IENPTlZfTk9ORTsKKwlpZiAoY29udmVydF9zZXR1cCgmY29udiwgcF9lbmMgPyBwX2VuYyA6IChjaGFyX3UgKikibGF0aW4xIiwKKwkJCQkJCSAgIChjaGFyX3UgKikidXRmLTgiKSA9PSBGQUlMKQorCSAgICByZXR1cm4gTlVMTDsKKwlpZiAoY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwl7CisJICAgIHN0ciA9IGFsbG9jYnVmID0gc3RyaW5nX2NvbnZlcnQoJmNvbnYsIHN0ciwgbGVucCk7CisJICAgIGlmIChzdHIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJfQorCWNvbnZlcnRfc2V0dXAoJmNvbnYsIE5VTEwsIE5VTEwpOworCisJbGVuZ3RoID0gdXRmOF90b191Y3MyKHN0ciwgKmxlbnAsIE5VTEwsIE5VTEwpOworCXJldCA9IChXQ0hBUiAqKWFsbG9jKCh1bnNpZ25lZCkoKGxlbmd0aCArIDEpICogc2l6ZW9mKFdDSEFSKSkpOworCWlmIChyZXQgIT0gTlVMTCkKKwl7CisJICAgIHV0ZjhfdG9fdWNzMihzdHIsICpsZW5wLCAoc2hvcnRfdSAqKXJldCwgTlVMTCk7CisJICAgIHJldFtsZW5ndGhdID0gMDsKKwl9CisKKwl2aW1fZnJlZShhbGxvY2J1Zik7CisgICAgfQorCisgICAgKmxlbnAgPSBsZW5ndGg7CisgICAgcmV0dXJuIChzaG9ydF91ICopcmV0OworfQorCisvKgorICogQ29udmVydCBhbiBVQ1MtMiBzdHJpbmcgdG8gJ2VuY29kaW5nJy4KKyAqIElucHV0IGluICJzdHIiIHdpdGggbGVuZ3RoIChjb3VudGVkIGluIHdpZGUgY2hhcmFjdGVycykgIipsZW5wIi4gIFdoZW4KKyAqICJsZW5wIiBpcyBOVUxMLCB1c2Ugd2NzbGVuKCkuCisgKiBPdXRwdXQgaXMgcmV0dXJuZWQgYXMgYW4gYWxsb2NhdGVkIHN0cmluZy4gIElmICIqbGVucCIgaXMgbm90IE5VTEwgaXQgaXMKKyAqIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQuCisgKiBSZXR1cm5zIE5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LgorICovCisgICAgY2hhcl91ICoKK3VjczJfdG9fZW5jKHNob3J0X3UgKnN0ciwgaW50ICpsZW5wKQoreworICAgIHZpbWNvbnZfVAljb252OworICAgIGNoYXJfdQkqdXRmOF9zdHIgPSBOVUxMLCAqZW5jX3N0ciA9IE5VTEw7CisgICAgaW50CQlsZW5fbG9jOworCisgICAgaWYgKGxlbnAgPT0gTlVMTCkKKyAgICB7CisJbGVuX2xvYyA9IHdjc2xlbihzdHIpICsgMTsKKwlsZW5wID0gJmxlbl9sb2M7CisgICAgfQorCisgICAgaWYgKGVuY19jb2RlcGFnZSA+IDApCisgICAgeworCS8qIFdlIGNhbiBkbyBhbnkgVUNTLTIgLT4gQ1AjIyMgaW4gb25lIHBhc3MuICovCisJaW50IGxlbmd0aDsKKworCVdpZGVDaGFyVG9NdWx0aUJ5dGVfYWxsb2MoZW5jX2NvZGVwYWdlLCAwLCBzdHIsICpsZW5wLAorCQkJCQkgICAgKExQU1RSICopJmVuY19zdHIsICZsZW5ndGgsIDAsIDApOworCSpsZW5wID0gbGVuZ3RoOworCXJldHVybiBlbmNfc3RyOworICAgIH0KKworICAgIC8qIEF2b2lkIGFsbG9jYXRpbmcgemVybyBieXRlcywgaXQgZ2VuZXJhdGVzIGFuIGVycm9yIG1lc3NhZ2UuICovCisgICAgdXRmOF9zdHIgPSBhbGxvYyh1Y3MyX3RvX3V0Zjgoc3RyLCAqbGVucCA9PSAwID8gMSA6ICpsZW5wLCBOVUxMKSk7CisgICAgaWYgKHV0Zjhfc3RyICE9IE5VTEwpCisgICAgeworCSpsZW5wID0gdWNzMl90b191dGY4KHN0ciwgKmxlbnAsIHV0Zjhfc3RyKTsKKworCS8qIFdlIG1pZ2h0IGJlIGNhbGxlZCBiZWZvcmUgd2UgaGF2ZSBwX2VuYyBzZXQgdXAuICovCisJY29udi52Y190eXBlID0gQ09OVl9OT05FOworCWNvbnZlcnRfc2V0dXAoJmNvbnYsIChjaGFyX3UgKikidXRmLTgiLAorCQkJCQkgICAgcF9lbmM/IHBfZW5jOiAoY2hhcl91ICopImxhdGluMSIpOworCWlmIChjb252LnZjX3R5cGUgPT0gQ09OVl9OT05FKQorCXsKKwkgICAgLyogcF9lbmMgaXMgdXRmLTgsIHNvIHdlJ3JlIGRvbmUuICovCisJICAgIGVuY19zdHIgPSB1dGY4X3N0cjsKKwl9CisJZWxzZQorCXsKKwkgICAgZW5jX3N0ciA9IHN0cmluZ19jb252ZXJ0KCZjb252LCB1dGY4X3N0ciwgbGVucCk7CisJICAgIHZpbV9mcmVlKHV0Zjhfc3RyKTsKKwl9CisKKwljb252ZXJ0X3NldHVwKCZjb252LCBOVUxMLCBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gZW5jX3N0cjsKK30KKyNlbmRpZiAvKiBGRUFUX01CWVRFICovCisKKy8qCisgKiBHZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGFuZCBwdXQgaXQgaW4gdGhlIGNsaXBib2FyZCByZWdpc3Rlci4KKyAqCisgKiBOT1RFOiBNdXN0IHVzZSBHbG9iYWxMb2NrL1VubG9jayBoZXJlIHRvIGVuc3VyZSBXaW4zMnMgY29tcGF0aWJpbGl0eS4KKyAqIE9uIE5UL1c5NSB0aGUgY2xpcGJvYXJkIGRhdGEgaXMgYSBmaXhlZCBnbG9iYWwgbWVtb3J5IG9iamVjdCBhbmQKKyAqIHNvIGl0cyBoYW5kbGUgPSBpdHMgcG9pbnRlci4KKyAqIE9uIFdpbjMycywgaG93ZXZlciwgY28tb3BlcmF0aW9uIHdpdGggdGhlIFdpbjE2IHN5c3RlbSBtZWFucyB0aGF0CisgKiB0aGUgY2xpcGJvYXJkIGRhdGEgaXMgbW92ZWFibGUgYW5kIGl0cyBoYW5kbGUgaXMgbm90IGEgcG9pbnRlciBhdCBhbGwsCisgKiBzbyB3ZSBjYW4ndCBqdXN0IGNhc3QgdGhlIHJldHVybiB2YWx1ZSBvZiBHZXRDbGlwYm9hcmREYXRhIHRvIChjaGFyX3UqKS4KKyAqIDxWTj4KKyAqLworICAgIHZvaWQKK2NsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uKFZpbUNsaXBib2FyZCAqY2JkKQoreworICAgIFZpbUNsaXBUeXBlX3QJbWV0YWRhdGEgPSB7IC0xLCAtMSwgLTEsIC0xIH07CisgICAgSEdMT0JBTAkJaE1lbSA9IE5VTEw7CisgICAgY2hhcl91CQkqc3RyID0gTlVMTDsKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpICYmIGRlZmluZWQoV0lOMzI2NCkKKyAgICBjaGFyX3UJCSp0b19mcmVlID0gTlVMTDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBIR0xPQkFMCQlyYXdoID0gTlVMTDsKKyNlbmRpZgorICAgIGNoYXJfdQkJKmhNZW1TdHIgPSBOVUxMOworICAgIGludAkJCXN0cl9zaXplID0gMDsKKyAgICBpbnQJCQltYXhsZW47CisgICAgc2l6ZV90CQluOworCisgICAgLyoKKyAgICAgKiBEb24ndCBwYXNzIEdldEFjdGl2ZVdpbmRvdygpIGFzIGFuIGFyZ3VtZW50IHRvIE9wZW5DbGlwYm9hcmQoKSBiZWNhdXNlCisgICAgICogdGhlbiB3ZSBjYW4ndCBwYXN0ZSBiYWNrIGludG8gdGhlIHNhbWUgd2luZG93IGZvciBzb21lIHJlYXNvbiAtIHdlYmIuCisgICAgICovCisgICAgaWYgKCFPcGVuQ2xpcGJvYXJkKE5VTEwpKQorCXJldHVybjsKKworICAgIC8qIENoZWNrIGZvciB2aW0ncyBvd24gY2xpcGJvYXJkIGZvcm1hdCBmaXJzdC4gIFRoaXMgb25seSBnZXRzIHRoZSB0eXBlIG9mCisgICAgICogdGhlIGRhdGEsIHN0aWxsIG5lZWQgdG8gdXNlIENGX1VOSUNPREVURVhUIG9yIENGX1RFWFQgZm9yIHRoZSB0ZXh0LiAqLworICAgIGlmIChJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZShjYmQtPmZvcm1hdCkpCisgICAgeworCVZpbUNsaXBUeXBlX3QJKm1ldGFfcDsKKwlIR0xPQkFMCQltZXRhX2g7CisKKwkvKiBXZSBoYXZlIG1ldGFkYXRhIG9uIHRoZSBjbGlwYm9hcmQ7IHRyeSB0byBnZXQgaXQuICovCisJaWYgKChtZXRhX2ggPSBHZXRDbGlwYm9hcmREYXRhKGNiZC0+Zm9ybWF0KSkgIT0gTlVMTAorCQkmJiAobWV0YV9wID0gKFZpbUNsaXBUeXBlX3QgKilHbG9iYWxMb2NrKG1ldGFfaCkpICE9IE5VTEwpCisJeworCSAgICAvKiBUaGUgc2l6ZSBvZiAiVmltQ2xpcFR5cGVfdCIgY2hhbmdlZCwgInJhd2xlbiIgd2FzIGFkZGVkIGxhdGVyLgorCSAgICAgKiBPbmx5IGNvcHkgd2hhdCBpcyBhdmFpbGFibGUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqLworCSAgICBuID0gc2l6ZW9mKFZpbUNsaXBUeXBlX3QpOworCSAgICBpZiAoR2xvYmFsU2l6ZShtZXRhX2gpIDwgbikKKwkJbiA9IEdsb2JhbFNpemUobWV0YV9oKTsKKwkgICAgbWVtY3B5KCZtZXRhZGF0YSwgbWV0YV9wLCBuKTsKKwkgICAgR2xvYmFsVW5sb2NrKG1ldGFfaCk7CisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKiBDaGVjayBmb3IgVmltJ3MgcmF3IGNsaXBib2FyZCBmb3JtYXQgZmlyc3QuICBUaGlzIGlzIHVzZWQgd2l0aG91dAorICAgICAqIGNvbnZlcnNpb24sIGJ1dCBvbmx5IGlmICdlbmNvZGluZycgbWF0Y2hlcy4gKi8KKyAgICBpZiAoSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUoY2JkLT5mb3JtYXRfcmF3KQorCQkJCSAgICAgICYmIG1ldGFkYXRhLnJhd2xlbiA+IChpbnQpU1RSTEVOKHBfZW5jKSkKKyAgICB7CisJLyogV2UgaGF2ZSByYXcgZGF0YSBvbiB0aGUgY2xpcGJvYXJkOyB0cnkgdG8gZ2V0IGl0LiAqLworCWlmICgocmF3aCA9IEdldENsaXBib2FyZERhdGEoY2JkLT5mb3JtYXRfcmF3KSkgIT0gTlVMTCkKKwl7CisJICAgIGNoYXJfdQkqcmF3cDsKKworCSAgICByYXdwID0gKGNoYXJfdSAqKUdsb2JhbExvY2socmF3aCk7CisJICAgIGlmIChyYXdwICE9IE5VTEwgJiYgU1RSQ01QKHBfZW5jLCByYXdwKSA9PSAwKQorCSAgICB7CisJCW4gPSBTVFJMRU4ocF9lbmMpICsgMTsKKwkJc3RyID0gcmF3cCArIG47CisJCXN0cl9zaXplID0gbWV0YWRhdGEucmF3bGVuIC0gbjsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJR2xvYmFsVW5sb2NrKHJhd2gpOworCQlyYXdoID0gTlVMTDsKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiBkZWZpbmVkKFdJTjMyNjQpCisgICAgLyogVHJ5IHRvIGdldCB0aGUgY2xpcGJvYXJkIGluIFVuaWNvZGUgaWYgaXQncyBub3QgYW4gZW1wdHkgc3RyaW5nLiAqLworICAgIGlmIChJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZShDRl9VTklDT0RFVEVYVCkgJiYgbWV0YWRhdGEudWNzbGVuICE9IDApCisgICAgeworCUhHTE9CQUwgaE1lbVc7CisKKwlpZiAoKGhNZW1XID0gR2V0Q2xpcGJvYXJkRGF0YShDRl9VTklDT0RFVEVYVCkpICE9IE5VTEwpCisJeworCSAgICBXQ0hBUiAqaE1lbVdzdHIgPSAoV0NIQVIgKilHbG9iYWxMb2NrKGhNZW1XKTsKKworCSAgICAvKiBVc2UgdGhlIGxlbmd0aCBvZiBvdXIgbWV0YWRhdGEgaWYgcG9zc2libGUsIGJ1dCBsaW1pdCBpdCB0byB0aGUKKwkgICAgICogR2xvYmFsU2l6ZSgpIGZvciBzYWZldHkuICovCisJICAgIG1heGxlbiA9IEdsb2JhbFNpemUoaE1lbVcpIC8gc2l6ZW9mKFdDSEFSKTsKKwkgICAgaWYgKG1ldGFkYXRhLnVjc2xlbiA+PSAwKQorCSAgICB7CisJCWlmIChtZXRhZGF0YS51Y3NsZW4gPiBtYXhsZW4pCisJCSAgICBzdHJfc2l6ZSA9IG1heGxlbjsKKwkJZWxzZQorCQkgICAgc3RyX3NpemUgPSBtZXRhZGF0YS51Y3NsZW47CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWZvciAoc3RyX3NpemUgPSAwOyBzdHJfc2l6ZSA8IG1heGxlbjsgKytzdHJfc2l6ZSkKKwkJICAgIGlmIChoTWVtV3N0cltzdHJfc2l6ZV0gPT0gTlVMKQorCQkJYnJlYWs7CisJICAgIH0KKwkgICAgdG9fZnJlZSA9IHN0ciA9IHVjczJfdG9fZW5jKChzaG9ydF91ICopaE1lbVdzdHIsICZzdHJfc2l6ZSk7CisJICAgIEdsb2JhbFVubG9jayhoTWVtVyk7CisJfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAvKiBHZXQgdGhlIGNsaXBib2FyZCBpbiB0aGUgQWN0aXZlIGNvZGVwYWdlLiAqLworICAgIGlmIChJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZShDRl9URVhUKSkKKyAgICB7CisJaWYgKChoTWVtID0gR2V0Q2xpcGJvYXJkRGF0YShDRl9URVhUKSkgIT0gTlVMTCkKKwl7CisJICAgIHN0ciA9IGhNZW1TdHIgPSAoY2hhcl91ICopR2xvYmFsTG9jayhoTWVtKTsKKworCSAgICAvKiBUaGUgbGVuZ3RoIGlzIGVpdGhlciB3aGF0IG91ciBtZXRhZGF0YSBzYXlzIG9yIHRoZSBzdHJsZW4oKS4KKwkgICAgICogQnV0IGxpbWl0IGl0IHRvIHRoZSBHbG9iYWxTaXplKCkgZm9yIHNhZmV0eS4gKi8KKwkgICAgbWF4bGVuID0gR2xvYmFsU2l6ZShoTWVtKTsKKwkgICAgaWYgKG1ldGFkYXRhLnR4dGxlbiA+PSAwKQorCSAgICB7CisJCWlmIChtZXRhZGF0YS50eHRsZW4gPiBtYXhsZW4pCisJCSAgICBzdHJfc2l6ZSA9IG1heGxlbjsKKwkJZWxzZQorCQkgICAgc3RyX3NpemUgPSBtZXRhZGF0YS50eHRsZW47CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWZvciAoc3RyX3NpemUgPSAwOyBzdHJfc2l6ZSA8IG1heGxlbjsgKytzdHJfc2l6ZSkKKwkJICAgIGlmIChzdHJbc3RyX3NpemVdID09IE5VTCkKKwkJCWJyZWFrOworCSAgICB9CisKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpICYmIGRlZmluZWQoV0lOMzI2NCkKKwkgICAgLyogVGhlIHRleHQgaXMgaW4gdGhlIGFjdGl2ZSBjb2RlcGFnZS4gIENvbnZlcnQgdG8gJ2VuY29kaW5nJywKKwkgICAgICogZ29pbmcgdGhyb3VnaCBVQ1MtMi4gKi8KKwkgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcl9hbGxvYyhHZXRBQ1AoKSwgMCwgc3RyLCBzdHJfc2l6ZSwKKwkJCQkJCSAoTFBXU1RSICopJnRvX2ZyZWUsICZtYXhsZW4pOworCSAgICBpZiAodG9fZnJlZSAhPSBOVUxMKQorCSAgICB7CisJCXN0cl9zaXplID0gbWF4bGVuOworCQlzdHIgPSB1Y3MyX3RvX2VuYygoc2hvcnRfdSAqKXRvX2ZyZWUsICZzdHJfc2l6ZSk7CisJCWlmIChzdHIgIT0gTlVMTCkKKwkJeworCQkgICAgdmltX2ZyZWUodG9fZnJlZSk7CisJCSAgICB0b19mcmVlID0gc3RyOworCQl9CisJICAgIH0KKyNlbmRpZgorCX0KKyAgICB9CisjaWZkZWYgRkVBVF9NQllURQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHN0ciAhPSBOVUxMICYmICpzdHIgIT0gTlVMKQorICAgIHsKKwljaGFyX3UgKnRlbXBfY2xpcGJvYXJkOworCisJLyogSWYgdGhlIHR5cGUgaXMgbm90IGtub3duIGd1ZXNzIGl0LiAqLworCWlmIChtZXRhZGF0YS50eXBlID09IC0xKQorCSAgICBtZXRhZGF0YS50eXBlID0gKHZpbV9zdHJjaHIoc3RyLCAnXG4nKSA9PSBOVUxMKSA/IE1DSEFSIDogTUxJTkU7CisKKwkvKiBUcmFuc2xhdGUgPENSPjxOTD4gaW50byA8Tkw+LiAqLworCXRlbXBfY2xpcGJvYXJkID0gY3JubF90b19ubChzdHIsICZzdHJfc2l6ZSk7CisJaWYgKHRlbXBfY2xpcGJvYXJkICE9IE5VTEwpCisJeworCSAgICBjbGlwX3lhbmtfc2VsZWN0aW9uKG1ldGFkYXRhLnR5cGUsIHRlbXBfY2xpcGJvYXJkLCBzdHJfc2l6ZSwgY2JkKTsKKwkgICAgdmltX2ZyZWUodGVtcF9jbGlwYm9hcmQpOworCX0KKyAgICB9CisKKyAgICAvKiB1bmxvY2sgdGhlIGdsb2JhbCBvYmplY3QgKi8KKyAgICBpZiAoaE1lbSAhPSBOVUxMKQorCUdsb2JhbFVubG9jayhoTWVtKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKHJhd2ggIT0gTlVMTCkKKwlHbG9iYWxVbmxvY2socmF3aCk7CisjZW5kaWYKKyAgICBDbG9zZUNsaXBib2FyZCgpOworI2lmIGRlZmluZWQoRkVBVF9NQllURSkgJiYgZGVmaW5lZChXSU4zMjY0KQorICAgIHZpbV9mcmVlKHRvX2ZyZWUpOworI2VuZGlmCit9CisKKy8qCisgKiBTZW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB0byB0aGUgY2xpcGJvYXJkLgorICovCisgICAgdm9pZAorY2xpcF9tY2hfc2V0X3NlbGVjdGlvbihWaW1DbGlwYm9hcmQgKmNiZCkKK3sKKyAgICBjaGFyX3UJCSpzdHIgPSBOVUxMOworICAgIFZpbUNsaXBUeXBlX3QJbWV0YWRhdGE7CisgICAgbG9uZ191CQl0eHRsZW47CisgICAgSEdMT0JBTAkJaE1lbVJhdyA9IE5VTEw7CisgICAgSEdMT0JBTAkJaE1lbSA9IE5VTEw7CisgICAgSEdMT0JBTAkJaE1lbVZpbSA9IE5VTEw7CisjIGlmIGRlZmluZWQoRkVBVF9NQllURSkgJiYgZGVmaW5lZChXSU4zMjY0KQorICAgIEhHTE9CQUwJCWhNZW1XID0gTlVMTDsKKyMgZW5kaWYKKworICAgIC8qIElmIHRoZSAnKicgcmVnaXN0ZXIgaXNuJ3QgYWxyZWFkeSBmaWxsZWQgaW4sIGZpbGwgaXQgaW4gbm93ICovCisgICAgY2JkLT5vd25lZCA9IFRSVUU7CisgICAgY2xpcF9nZXRfc2VsZWN0aW9uKGNiZCk7CisgICAgY2JkLT5vd25lZCA9IEZBTFNFOworCisgICAgLyogR2V0IHRoZSB0ZXh0IHRvIGJlIHB1dCBvbiB0aGUgY2xpcGJvYXJkLCB3aXRoIENSLUxGLiAqLworICAgIG1ldGFkYXRhLnR5cGUgPSBjbGlwX2NvbnZlcnRfc2VsZWN0aW9uKCZzdHIsICZ0eHRsZW4sIGNiZCk7CisgICAgaWYgKG1ldGFkYXRhLnR5cGUgPCAwKQorCXJldHVybjsKKyAgICBtZXRhZGF0YS50eHRsZW4gPSAoaW50KXR4dGxlbjsKKyAgICBtZXRhZGF0YS51Y3NsZW4gPSAwOworICAgIG1ldGFkYXRhLnJhd2xlbiA9IDA7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyogQWx3YXlzIHNldCB0aGUgcmF3IGJ5dGVzOiAnZW5jb2RpbmcnLCBOVUwgYW5kIHRoZSB0ZXh0LiAgVGhpcyBpcyB1c2VkCisgICAgICogd2hlbiBjb3B5L3Bhc3RlIGZyb20vdG8gVmltIHdpdGggdGhlIHNhbWUgJ2VuY29kaW5nJywgc28gdGhhdCBpbGxlZ2FsCisgICAgICogYnl0ZXMgY2FuIGFsc28gYmUgY29waWVkIGFuZCBubyBjb252ZXJzaW9uIGlzIG5lZWRlZC4gKi8KKyAgICB7CisJTFBTVFIgbHBzek1lbVJhdzsKKworCW1ldGFkYXRhLnJhd2xlbiA9IHR4dGxlbiArIFNUUkxFTihwX2VuYykgKyAxOworCWhNZW1SYXcgPSAoTFBTVFIpR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSB8IEdNRU1fRERFU0hBUkUsCisJCQkJCQkJIG1ldGFkYXRhLnJhd2xlbiArIDEpOworCWxwc3pNZW1SYXcgPSAoTFBTVFIpR2xvYmFsTG9jayhoTWVtUmF3KTsKKwlpZiAobHBzek1lbVJhdyAhPSBOVUxMKQorCXsKKwkgICAgU1RSQ1BZKGxwc3pNZW1SYXcsIHBfZW5jKTsKKwkgICAgbWVtY3B5KGxwc3pNZW1SYXcgKyBTVFJMRU4ocF9lbmMpICsgMSwgc3RyLCB0eHRsZW4gKyAxKTsKKwkgICAgR2xvYmFsVW5sb2NrKGhNZW1SYXcpOworCX0KKwllbHNlCisJICAgIG1ldGFkYXRhLnJhd2xlbiA9IDA7CisgICAgfQorI2VuZGlmCisKKyMgaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiBkZWZpbmVkKFdJTjMyNjQpCisgICAgeworCVdDSEFSCQkqb3V0OworCWludAkJbGVuID0gbWV0YWRhdGEudHh0bGVuOworCisJLyogQ29udmVydCB0aGUgdGV4dCB0byBVQ1MtMi4gVGhpcyBpcyBwdXQgb24gdGhlIGNsaXBib2FyZCBhcworCSAqIENGX1VOSUNPREVURVhULiAqLworCW91dCA9IChXQ0hBUiAqKWVuY190b191Y3MyKHN0ciwgJmxlbik7CisJaWYgKG91dCAhPSBOVUxMKQorCXsKKwkgICAgV0NIQVIgKmxwc3pNZW1XOworCisJICAgIC8qIENvbnZlcnQgdGhlIHRleHQgZm9yIENGX1RFWFQgdG8gQWN0aXZlIGNvZGVwYWdlLiBPdGhlcndpc2UgaXQncworCSAgICAgKiBwX2VuYywgd2hpY2ggaGFzIG5vIHJlbGF0aW9uIHRvIHRoZSBBY3RpdmUgY29kZXBhZ2UuICovCisJICAgIG1ldGFkYXRhLnR4dGxlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoR2V0QUNQKCksIDAsIG91dCwgbGVuLAorCQkJCQkJCSAgICAgICBOVUxMLCAwLCAwLCAwKTsKKwkgICAgdmltX2ZyZWUoc3RyKTsKKwkgICAgc3RyID0gKGNoYXJfdSAqKWFsbG9jKCh1bnNpZ25lZCkobWV0YWRhdGEudHh0bGVuID09IDAgPyAxCisJCQkJCQkJICA6IG1ldGFkYXRhLnR4dGxlbikpOworCSAgICBpZiAoc3RyID09IE5VTEwpCisJICAgIHsKKwkJdmltX2ZyZWUob3V0KTsKKwkJcmV0dXJuOwkJLyogb3V0IG9mIG1lbW9yeSAqLworCSAgICB9CisJICAgIFdpZGVDaGFyVG9NdWx0aUJ5dGUoR2V0QUNQKCksIDAsIG91dCwgbGVuLAorCQkJCQkJICBzdHIsIG1ldGFkYXRhLnR4dGxlbiwgMCwgMCk7CisKKwkgICAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgVUNTLTIgdGV4dCwgYWRkIG9uZSBOVUwgd29yZCB0bworCSAgICAgKiB0ZXJtaW5hdGUgdGhlIHN0cmluZy4gKi8KKwkgICAgaE1lbVcgPSAoTFBTVFIpR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSB8IEdNRU1fRERFU0hBUkUsCisJCQkJCQkgICAobGVuICsgMSkgKiBzaXplb2YoV0NIQVIpKTsKKwkgICAgbHBzek1lbVcgPSAoV0NIQVIgKilHbG9iYWxMb2NrKGhNZW1XKTsKKwkgICAgaWYgKGxwc3pNZW1XICE9IE5VTEwpCisJICAgIHsKKwkJbWVtY3B5KGxwc3pNZW1XLCBvdXQsIGxlbiAqIHNpemVvZihXQ0hBUikpOworCQlscHN6TWVtV1tsZW5dID0gTlVMOworCQlHbG9iYWxVbmxvY2soaE1lbVcpOworCSAgICB9CisJICAgIHZpbV9mcmVlKG91dCk7CisJICAgIG1ldGFkYXRhLnVjc2xlbiA9IGxlbjsKKwl9CisgICAgfQorIyBlbmRpZgorCisgICAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdGV4dCwgYWRkIG9uZSBOVUwgYnl0ZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmluZy4KKyAgICAgKi8KKyAgICBoTWVtID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSB8IEdNRU1fRERFU0hBUkUsIG1ldGFkYXRhLnR4dGxlbiArIDEpOworICAgIHsKKwlMUFNUUiBscHN6TWVtID0gKExQU1RSKUdsb2JhbExvY2soaE1lbSk7CisKKwlpZiAobHBzek1lbSkKKwl7CisJICAgIFNUUk5DUFkobHBzek1lbSwgc3RyLCBtZXRhZGF0YS50eHRsZW4pOworCSAgICBscHN6TWVtW21ldGFkYXRhLnR4dGxlbl0gPSBOVUw7CisJICAgIEdsb2JhbFVubG9jayhoTWVtKTsKKwl9CisgICAgfQorCisgICAgLyogU2V0IHVwIG1ldGFkYXRhOiAqLworICAgIHsKKwlWaW1DbGlwVHlwZV90ICpscHN6TWVtVmltID0gTlVMTDsKKworCWhNZW1WaW0gPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFfEdNRU1fRERFU0hBUkUsCisJCQkJCQkgICAgICAgc2l6ZW9mKFZpbUNsaXBUeXBlX3QpKTsKKwlscHN6TWVtVmltID0gKFZpbUNsaXBUeXBlX3QgKilHbG9iYWxMb2NrKGhNZW1WaW0pOworCW1lbWNweShscHN6TWVtVmltLCAmbWV0YWRhdGEsIHNpemVvZihtZXRhZGF0YSkpOworCUdsb2JhbFVubG9jayhoTWVtVmltKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE9wZW4gdGhlIGNsaXBib2FyZCwgY2xlYXIgaXQgYW5kIHB1dCBvdXIgdGV4dCBvbiBpdC4KKyAgICAgKiBBbHdheXMgc2V0IG91ciBWaW0gZm9ybWF0LiAgUHV0IFVuaWNvZGUgYW5kIHBsYWluIHRleHQgb24gaXQuCisgICAgICoKKyAgICAgKiBEb24ndCBwYXNzIEdldEFjdGl2ZVdpbmRvdygpIGFzIGFuIGFyZ3VtZW50IHRvIE9wZW5DbGlwYm9hcmQoKQorICAgICAqIGJlY2F1c2UgdGhlbiB3ZSBjYW4ndCBwYXN0ZSBiYWNrIGludG8gdGhlIHNhbWUgd2luZG93IGZvciBzb21lCisgICAgICogcmVhc29uIC0gd2ViYi4KKyAgICAgKi8KKyAgICBpZiAoT3BlbkNsaXBib2FyZChOVUxMKSkKKyAgICB7CisJaWYgKEVtcHR5Q2xpcGJvYXJkKCkpCisJeworCSAgICBTZXRDbGlwYm9hcmREYXRhKGNiZC0+Zm9ybWF0LCBoTWVtVmltKTsKKwkgICAgaE1lbVZpbSA9IDA7CisjIGlmIGRlZmluZWQoRkVBVF9NQllURSkgJiYgZGVmaW5lZChXSU4zMjY0KQorCSAgICBpZiAoaE1lbVcgIT0gTlVMTCkKKwkgICAgeworCQlpZiAoU2V0Q2xpcGJvYXJkRGF0YShDRl9VTklDT0RFVEVYVCwgaE1lbVcpICE9IE5VTEwpCisJCSAgICBoTWVtVyA9IE5VTEw7CisJICAgIH0KKyMgZW5kaWYKKwkgICAgLyogQWx3YXlzIHVzZSBDRl9URVhULiAgT24gV2luOTggTm90ZXBhZCB3b24ndCBvYnRhaW4gdGhlCisJICAgICAqIENGX1VOSUNPREVURVhUIHRleHQsIG9ubHkgQ0ZfVEVYVC4gKi8KKwkgICAgU2V0Q2xpcGJvYXJkRGF0YShDRl9URVhULCBoTWVtKTsKKwkgICAgaE1lbSA9IDA7CisJfQorCUNsb3NlQ2xpcGJvYXJkKCk7CisgICAgfQorCisgICAgdmltX2ZyZWUoc3RyKTsKKyAgICAvKiBGcmVlIGFueSBhbGxvY2F0aW9ucyB3ZSBkaWRuJ3QgZ2l2ZSB0byB0aGUgY2xpcGJvYXJkOiAqLworICAgIGlmIChoTWVtUmF3KQorCUdsb2JhbEZyZWUoaE1lbVJhdyk7CisgICAgaWYgKGhNZW0pCisJR2xvYmFsRnJlZShoTWVtKTsKKyMgaWYgZGVmaW5lZChGRUFUX01CWVRFKSAmJiBkZWZpbmVkKFdJTjMyNjQpCisgICAgaWYgKGhNZW1XKQorCUdsb2JhbEZyZWUoaE1lbVcpOworIyBlbmRpZgorICAgIGlmIChoTWVtVmltKQorCUdsb2JhbEZyZWUoaE1lbVZpbSk7Cit9CisKKyNlbmRpZiAvKiBGRUFUX0NMSVBCT0FSRCAqLworCisKKy8qCisgKiBEZWJ1Z2dpbmcgaGVscGVyOiBleHBvc2UgdGhlIE1DSF9XUklURV9EVU1QIHN0dWZmIHRvIG90aGVyIG1vZHVsZXMKKyAqLworICAgIHZvaWQKK0R1bXBQdXRTKAorICAgIGNvbnN0IGNoYXIgKnBzeikKK3sKKyMgaWZkZWYgTUNIX1dSSVRFX0RVTVAKKyAgICBpZiAoZmREdW1wKQorICAgIHsKKwlmcHV0cyhwc3osIGZkRHVtcCk7CisJaWYgKHBzeltzdHJsZW4ocHN6KSAtIDFdICE9ICdcbicpCisJICAgIGZwdXRjKCdcbicsIGZkRHVtcCk7CisJZmZsdXNoKGZkRHVtcCk7CisgICAgfQorIyBlbmRpZgorfQorCisjaWZkZWYgX0RFQlVHCisKK3ZvaWQgX19jZGVjbAorVHJhY2UoCisgICAgY2hhciAqcHN6Rm9ybWF0LAorICAgIC4uLikKK3sKKyAgICBDSEFSIHN6QnVmZlsyMDQ4XTsKKyAgICB2YV9saXN0IGFyZ3M7CisKKyAgICB2YV9zdGFydChhcmdzLCBwc3pGb3JtYXQpOworICAgIHZzcHJpbnRmKHN6QnVmZiwgcHN6Rm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICBPdXRwdXREZWJ1Z1N0cmluZyhzekJ1ZmYpOworfQorCisjZW5kaWYgLy9fREVCVUcKKworI2lmZGVmIEhBVkVfR0VUQ09OU09MRUhXTkQKKyMgaWYgZGVmaW5lZChGRUFUX1RJVExFKSAmJiBkZWZpbmVkKFdJTjMyNjQpCitleHRlcm4gSFdORCBnX2hXbmQ7CS8qIFRoaXMgaXMgaW4gb3Nfd2luMzIuYy4gKi8KKyMgZW5kaWYKKworLyoKKyAqIFNob3dpbmcgdGhlIHByaW50ZXIgZGlhbG9nIGlzIHRyaWNreSBzaW5jZSB3ZSBoYXZlIG5vIEdVSQorICogd2luZG93IHRvIHBhcmVudCBpdC4gVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgbmVlZGVkIHRvCisgKiBnZXQgdGhlIHdpbmRvdyBwYXJlbnRpbmcgYW5kIFotb3JkZXIgdG8gd29yayBwcm9wZXJseS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitHZXRDb25zb2xlSHduZCh2b2lkKQoreworIyBkZWZpbmUgTVlfQlVGU0laRSAxMDI0IC8vIEJ1ZmZlciBzaXplIGZvciBjb25zb2xlIHdpbmRvdyB0aXRsZXMuCisKKyAgICBjaGFyIHBzek5ld1dpbmRvd1RpdGxlW01ZX0JVRlNJWkVdOyAvLyBDb250YWlucyBmYWJyaWNhdGVkIFdpbmRvd1RpdGxlLgorICAgIGNoYXIgcHN6T2xkV2luZG93VGl0bGVbTVlfQlVGU0laRV07IC8vIENvbnRhaW5zIG9yaWdpbmFsIFdpbmRvd1RpdGxlLgorCisgICAgLyogU2tpcCBpZiBpdCdzIGFscmVhZHkgc2V0LiAqLworICAgIGlmIChzX2h3bmQgIT0gMCkKKwlyZXR1cm47CisKKyMgaWYgZGVmaW5lZChGRUFUX1RJVExFKSAmJiBkZWZpbmVkKFdJTjMyNjQpCisgICAgLyogV2luZG93IGhhbmRsZSBtYXkgaGF2ZSBiZWVuIGZvdW5kIGJ5IGluaXQgY29kZSAoV2luZG93cyBOVCBvbmx5KSAqLworICAgIGlmIChnX2hXbmQgIT0gMCkKKyAgICB7CisJc19od25kID0gZ19oV25kOworCXJldHVybjsKKyAgICB9CisjIGVuZGlmCisKKyAgICBHZXRDb25zb2xlVGl0bGUocHN6T2xkV2luZG93VGl0bGUsIE1ZX0JVRlNJWkUpOworCisgICAgd3NwcmludGYocHN6TmV3V2luZG93VGl0bGUsICIlcy8lZC8lZCIsCisJICAgIHBzek9sZFdpbmRvd1RpdGxlLAorCSAgICBHZXRUaWNrQ291bnQoKSwKKwkgICAgR2V0Q3VycmVudFByb2Nlc3NJZCgpKTsKKyAgICBTZXRDb25zb2xlVGl0bGUocHN6TmV3V2luZG93VGl0bGUpOworICAgIFNsZWVwKDQwKTsKKyAgICBzX2h3bmQgPSBGaW5kV2luZG93KE5VTEwsIHBzek5ld1dpbmRvd1RpdGxlKTsKKworICAgIFNldENvbnNvbGVUaXRsZShwc3pPbGRXaW5kb3dUaXRsZSk7Cit9CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZFQVRfUFJJTlRFUikgJiYgIWRlZmluZWQoRkVBVF9QT1NUU0NSSVBUKSkgfHwgZGVmaW5lZChQUk9UTykKKworIyBpZmRlZiBXSU4xNgorIyAgZGVmaW5lIFRFWFQoYSkgYQorIyBlbmRpZgorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogV2luMzIgcHJpbnRlciBzdHVmZgorICovCisKK3N0YXRpYyBIRk9OVAkJcHJ0X2ZvbnRfaGFuZGxlc1syXVsyXVsyXTsKK3N0YXRpYyBQUklOVERMRwkJcHJ0X2RsZzsKK3N0YXRpYyBjb25zdCBpbnQJYm9sZGZhY2VbMl0gPSB7RldfUkVHVUxBUiwgRldfQk9MRH07CitzdGF0aWMgVEVYVE1FVFJJQwlwcnRfdG07CitzdGF0aWMgaW50CQlwcnRfbGluZV9oZWlnaHQ7CitzdGF0aWMgaW50CQlwcnRfbnVtYmVyX3dpZHRoOworc3RhdGljIGludAkJcHJ0X2xlZnRfbWFyZ2luOworc3RhdGljIGludAkJcHJ0X3JpZ2h0X21hcmdpbjsKK3N0YXRpYyBpbnQJCXBydF90b3BfbWFyZ2luOworc3RhdGljIGNoYXJfdQkJc3pBcHBOYW1lW10gPSBURVhUKCJWSU0iKTsKK3N0YXRpYyBIV05ECQloRGxnUHJpbnQ7CitzdGF0aWMgaW50CQkqYlVzZXJBYm9ydCA9IE5VTEw7CitzdGF0aWMgY2hhcl91CQkqcHJ0X25hbWUgPSBOVUxMOworCisvKiBEZWZpbmVzIHdoaWNoIGFyZSBhbHNvIGluIHZpbS5yYy4gKi8KKyNkZWZpbmUgSURDX0JPWDEJCTQwMAorI2RlZmluZSBJRENfUFJJTlRURVhUMQkJNDAxCisjZGVmaW5lIElEQ19QUklOVFRFWFQyCQk0MDIKKyNkZWZpbmUgSURDX1BST0dSRVNTCQk0MDMKKworLyoKKyAqIENvbnZlcnQgQkdSIHRvIFJHQiBmb3IgV2luZG93cyBHREkgY2FsbHMKKyAqLworICAgIHN0YXRpYyBDT0xPUlJFRgorc3dhcF9tZShDT0xPUlJFRiBjb2xvcnJlZikKK3sKKyAgICBpbnQgIHRlbXA7CisgICAgY2hhciAqcHRyID0gKGNoYXIgKikmY29sb3JyZWY7CisKKyAgICB0ZW1wID0gKihwdHIpOworICAgICoocHRyICkgPSAqKHB0ciArIDIpOworICAgICoocHRyICsgMikgPSB0ZW1wOworICAgIHJldHVybiBjb2xvcnJlZjsKK30KKworICAgIHN0YXRpYyBCT09MIENBTExCQUNLCitQcmludERsZ1Byb2MoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisjaWZkZWYgRkVBVF9HRVRURVhUCisgICAgTk9OQ0xJRU5UTUVUUklDUyBubTsKKyAgICBzdGF0aWMgSEZPTlQgaGZvbnQ7CisjZW5kaWYKKworICAgIHN3aXRjaCAobWVzc2FnZSkKKyAgICB7CisJY2FzZSBXTV9JTklURElBTE9HOgorI2lmZGVmIEZFQVRfR0VUVEVYVAorCSAgICBubS5jYlNpemUgPSBzaXplb2YoTk9OQ0xJRU5UTUVUUklDUyk7CisJICAgIGlmIChTeXN0ZW1QYXJhbWV0ZXJzSW5mbygKKwkJCVNQSV9HRVROT05DTElFTlRNRVRSSUNTLAorCQkJc2l6ZW9mKE5PTkNMSUVOVE1FVFJJQ1MpLAorCQkJJm5tLAorCQkJMCkpCisJICAgIHsKKwkJY2hhciBidWZmW01BWF9QQVRIXTsKKwkJaW50IGk7CisKKwkJLyogVHJhbnNsYXRlIHRoZSBkaWFsb2cgdGV4dHMgKi8KKwkJaGZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QoJm5tLmxmTWVzc2FnZUZvbnQpOworCQlmb3IgKGkgPSBJRENfUFJJTlRURVhUMTsgaSA8PSBJRENfUFJPR1JFU1M7IGkrKykKKwkJeworCQkgICAgU2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsIGksIFdNX1NFVEZPTlQsIChXUEFSQU0paGZvbnQsIDEpOworCQkgICAgaWYgKEdldERsZ0l0ZW1UZXh0KGhEbGcsaSwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKSkKKwkJCVNldERsZ0l0ZW1UZXh0KGhEbGcsaSwgXyhidWZmKSk7CisJCX0KKwkJU2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsIElEQ0FOQ0VMLAorCQkJCQkJV01fU0VURk9OVCwgKFdQQVJBTSloZm9udCwgMSk7CisJCWlmIChHZXREbGdJdGVtVGV4dChoRGxnLElEQ0FOQ0VMLCBidWZmLCBzaXplb2YoYnVmZikpKQorCQkgICAgU2V0RGxnSXRlbVRleHQoaERsZyxJRENBTkNFTCwgXyhidWZmKSk7CisJICAgIH0KKyNlbmRpZgorCSAgICBTZXRXaW5kb3dUZXh0KGhEbGcsIHN6QXBwTmFtZSk7CisJICAgIGlmIChwcnRfbmFtZSAhPSBOVUxMKQorCSAgICB7CisJCVNldERsZ0l0ZW1UZXh0KGhEbGcsIElEQ19QUklOVFRFWFQyLCAoTFBTVFIpcHJ0X25hbWUpOworCQl2aW1fZnJlZShwcnRfbmFtZSk7CisJCXBydF9uYW1lID0gTlVMTDsKKwkgICAgfQorCSAgICBFbmFibGVNZW51SXRlbShHZXRTeXN0ZW1NZW51KGhEbGcsIEZBTFNFKSwgU0NfQ0xPU0UsIE1GX0dSQVlFRCk7CisjaWZuZGVmIEZFQVRfR1VJCisJICAgIEJyaW5nV2luZG93VG9Ub3Aoc19od25kKTsKKyNlbmRpZgorCSAgICByZXR1cm4gVFJVRTsKKworCWNhc2UgV01fQ09NTUFORDoKKwkgICAgKmJVc2VyQWJvcnQgPSBUUlVFOworCSAgICBFbmFibGVXaW5kb3coR2V0UGFyZW50KGhEbGcpLCBUUlVFKTsKKwkgICAgRGVzdHJveVdpbmRvdyhoRGxnKTsKKwkgICAgaERsZ1ByaW50ID0gTlVMTDsKKyNpZmRlZiBGRUFUX0dFVFRFWFQKKwkgICAgRGVsZXRlT2JqZWN0KGhmb250KTsKKyNlbmRpZgorCSAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisgICAgc3RhdGljIEJPT0wgQ0FMTEJBQ0sKK0Fib3J0UHJvYyhIREMgaGRjUHJuLCBpbnQgaUNvZGUpCit7CisgICAgTVNHIG1zZzsKKworICAgIHdoaWxlICghKmJVc2VyQWJvcnQgJiYgUGVla01lc3NhZ2UoJm1zZywgTlVMTCwgMCwgMCwgUE1fUkVNT1ZFKSkKKyAgICB7CisJaWYgKCFoRGxnUHJpbnQgfHwgIUlzRGlhbG9nTWVzc2FnZShoRGxnUHJpbnQsICZtc2cpKQorCXsKKwkgICAgVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKwkgICAgRGlzcGF0Y2hNZXNzYWdlKCZtc2cpOworCX0KKyAgICB9CisgICAgcmV0dXJuICEqYlVzZXJBYm9ydDsKK30KKworI2lmbmRlZiBGRUFUX0dVSQorCisgICAgc3RhdGljIFVJTlQgQ0FMTEJBQ0sKK1ByaW50SG9va1Byb2MoCisJSFdORCBoRGxnLAkvLyBoYW5kbGUgdG8gZGlhbG9nIGJveAorCVVJTlQgdWlNc2csCS8vIG1lc3NhZ2UgaWRlbnRpZmllcgorCVdQQVJBTSB3UGFyYW0sCS8vIG1lc3NhZ2UgcGFyYW1ldGVyCisJTFBBUkFNIGxQYXJhbQkvLyBtZXNzYWdlIHBhcmFtZXRlcgorCSkKK3sKKyAgICBIV05ECWh3bmRPd25lcjsKKyAgICBSRUNUCXJjLCByY0RsZywgcmNPd25lcjsKKyAgICBQUklOVERMRwkqcFBEOworCisgICAgaWYgKHVpTXNnID09IFdNX0lOSVRESUFMT0cpCisgICAgeworCS8vIEdldCB0aGUgb3duZXIgd2luZG93IGFuZCBkaWFsb2cgYm94IHJlY3RhbmdsZXMuCisJaWYgKChod25kT3duZXIgPSBHZXRQYXJlbnQoaERsZykpID09IE5VTEwpCisJICAgIGh3bmRPd25lciA9IEdldERlc2t0b3BXaW5kb3coKTsKKworCUdldFdpbmRvd1JlY3QoaHduZE93bmVyLCAmcmNPd25lcik7CisJR2V0V2luZG93UmVjdChoRGxnLCAmcmNEbGcpOworCUNvcHlSZWN0KCZyYywgJnJjT3duZXIpOworCisJLy8gT2Zmc2V0IHRoZSBvd25lciBhbmQgZGlhbG9nIGJveCByZWN0YW5nbGVzIHNvIHRoYXQKKwkvLyByaWdodCBhbmQgYm90dG9tIHZhbHVlcyByZXByZXNlbnQgdGhlIHdpZHRoIGFuZAorCS8vIGhlaWdodCwgYW5kIHRoZW4gb2Zmc2V0IHRoZSBvd25lciBhZ2FpbiB0byBkaXNjYXJkCisJLy8gc3BhY2UgdGFrZW4gdXAgYnkgdGhlIGRpYWxvZyBib3guCisKKwlPZmZzZXRSZWN0KCZyY0RsZywgLXJjRGxnLmxlZnQsIC1yY0RsZy50b3ApOworCU9mZnNldFJlY3QoJnJjLCAtcmMubGVmdCwgLXJjLnRvcCk7CisJT2Zmc2V0UmVjdCgmcmMsIC1yY0RsZy5yaWdodCwgLXJjRGxnLmJvdHRvbSk7CisKKwkvLyBUaGUgbmV3IHBvc2l0aW9uIGlzIHRoZSBzdW0gb2YgaGFsZiB0aGUgcmVtYWluaW5nCisJLy8gc3BhY2UgYW5kIHRoZSBvd25lcidzIG9yaWdpbmFsIHBvc2l0aW9uLgorCisJU2V0V2luZG93UG9zKGhEbGcsCisJCUhXTkRfVE9QLAorCQlyY093bmVyLmxlZnQgKyAocmMucmlnaHQgLyAyKSwKKwkJcmNPd25lci50b3AgKyAocmMuYm90dG9tIC8gMiksCisJCTAsIDAsCQkvLyBpZ25vcmVzIHNpemUgYXJndW1lbnRzCisJCVNXUF9OT1NJWkUpOworCisJLyogIHRhY2tsZSB0aGUgcHJpbnRkbGcgY29waWVzY3RybCBwcm9ibGVtICovCisJcFBEID0gKFBSSU5URExHICopbFBhcmFtOworCXBQRC0+bkNvcGllcyA9IChXT1JEKXBQRC0+bEN1c3REYXRhOworCVNldERsZ0l0ZW1JbnQoIGhEbGcsIGVkdDMsIHBQRC0+bkNvcGllcywgRkFMU0UgKTsKKwkvKiAgQnJpbmcgdGhlIHdpbmRvdyB0byB0b3AgKi8KKwlCcmluZ1dpbmRvd1RvVG9wKEdldFBhcmVudChoRGxnKSk7CisJU2V0Rm9yZWdyb3VuZFdpbmRvdyhoRGxnKTsKKyAgICB9CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZW5kaWYKKworICAgIHZvaWQKK21jaF9wcmludF9jbGVhbnVwKHZvaWQpCit7CisgICAgaW50IHBpZkl0YWxpYzsKKyAgICBpbnQgcGlmQm9sZDsKKyAgICBpbnQgcGlmVW5kZXJsaW5lOworCisgICAgZm9yIChwaWZCb2xkID0gMDsgcGlmQm9sZCA8PSAxOyBwaWZCb2xkKyspCisJZm9yIChwaWZJdGFsaWMgPSAwOyBwaWZJdGFsaWMgPD0gMTsgcGlmSXRhbGljKyspCisJICAgIGZvciAocGlmVW5kZXJsaW5lID0gMDsgcGlmVW5kZXJsaW5lIDw9IDE7IHBpZlVuZGVybGluZSsrKQorCQlEZWxldGVPYmplY3QocHJ0X2ZvbnRfaGFuZGxlc1twaWZCb2xkXVtwaWZJdGFsaWNdW3BpZlVuZGVybGluZV0pOworCisgICAgaWYgKHBydF9kbGcuaERDICE9IE5VTEwpCisJRGVsZXRlREMocHJ0X2RsZy5oREMpOworICAgIGlmICghKmJVc2VyQWJvcnQpCisJU2VuZE1lc3NhZ2UoaERsZ1ByaW50LCBXTV9DT01NQU5ELCAwLCAwKTsKK30KKworICAgIHN0YXRpYyBpbnQKK3RvX2RldmljZV91bml0cyhpbnQgaWR4LCBpbnQgZHBpLCBpbnQgcGh5c3NpemUsIGludCBvZmZzZXQsIGludCBkZWZfbnVtYmVyKQoreworICAgIGludAkJcmV0ID0gMDsKKyAgICBpbnQJCXU7CisgICAgaW50CQlucjsKKworICAgIHUgPSBwcnRfZ2V0X3VuaXQoaWR4KTsKKyAgICBpZiAodSA9PSBQUlRfVU5JVF9OT05FKQorICAgIHsKKwl1ID0gUFJUX1VOSVRfUEVSQzsKKwluciA9IGRlZl9udW1iZXI7CisgICAgfQorICAgIGVsc2UKKwluciA9IHByaW50ZXJfb3B0c1tpZHhdLm51bWJlcjsKKworICAgIHN3aXRjaCAodSkKKyAgICB7CisJY2FzZSBQUlRfVU5JVF9QRVJDOgorCSAgICByZXQgPSAocGh5c3NpemUgKiBucikgLyAxMDA7CisJICAgIGJyZWFrOworCWNhc2UgUFJUX1VOSVRfSU5DSDoKKwkgICAgcmV0ID0gKG5yICogZHBpKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQUlRfVU5JVF9NTToKKwkgICAgcmV0ID0gKG5yICogMTAgKiBkcGkpIC8gMjU0OworCSAgICBicmVhazsKKwljYXNlIFBSVF9VTklUX1BPSU5UOgorCSAgICByZXQgPSAobnIgKiAxMCAqIGRwaSkgLyA3MjA7CisJICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChyZXQgPCBvZmZzZXQpCisJcmV0dXJuIDA7CisgICAgZWxzZQorCXJldHVybiByZXQgLSBvZmZzZXQ7Cit9CisKKyAgICBzdGF0aWMgaW50CitwcnRfZ2V0X2NwbCh2b2lkKQoreworICAgIGludAkJaHI7CisgICAgaW50CQlwaHl3OworICAgIGludAkJZHZvZmY7CisgICAgaW50CQlyZXZfb2Zmc2V0OworICAgIGludAkJZHBpOworI2lmZGVmIFdJTjE2CisgICAgUE9JTlQJcGFnZXNpemU7CisjZW5kaWYKKworICAgIEdldFRleHRNZXRyaWNzKHBydF9kbGcuaERDLCAmcHJ0X3RtKTsKKyAgICBwcnRfbGluZV9oZWlnaHQgPSBwcnRfdG0udG1IZWlnaHQgKyBwcnRfdG0udG1FeHRlcm5hbExlYWRpbmc7CisKKyAgICBocgkgICAgPSBHZXREZXZpY2VDYXBzKHBydF9kbGcuaERDLCBIT1JaUkVTKTsKKyNpZmRlZiBXSU4xNgorICAgIEVzY2FwZShwcnRfZGxnLmhEQywgR0VUUEhZU1BBR0VTSVpFLCBOVUxMLCBOVUxMLCAmcGFnZXNpemUpOworICAgIHBoeXcgICAgPSBwYWdlc2l6ZS54OworICAgIEVzY2FwZShwcnRfZGxnLmhEQywgR0VUUFJJTlRJTkdPRkZTRVQsIE5VTEwsIE5VTEwsICZwYWdlc2l6ZSk7CisgICAgZHZvZmYgICA9IHBhZ2VzaXplLng7CisjZWxzZQorICAgIHBoeXcgICAgPSBHZXREZXZpY2VDYXBzKHBydF9kbGcuaERDLCBQSFlTSUNBTFdJRFRIKTsKKyAgICBkdm9mZiAgID0gR2V0RGV2aWNlQ2FwcyhwcnRfZGxnLmhEQywgUEhZU0lDQUxPRkZTRVRYKTsKKyNlbmRpZgorICAgIGRwaQkgICAgPSBHZXREZXZpY2VDYXBzKHBydF9kbGcuaERDLCBMT0dQSVhFTFNYKTsKKworICAgIHJldl9vZmZzZXQgPSBwaHl3IC0gKGR2b2ZmICsgaHIpOworCisgICAgcHJ0X2xlZnRfbWFyZ2luID0gdG9fZGV2aWNlX3VuaXRzKE9QVF9QUklOVF9MRUZULCBkcGksIHBoeXcsIGR2b2ZmLCAxMCk7CisgICAgaWYgKHBydF91c2VfbnVtYmVyKCkpCisgICAgeworCXBydF9udW1iZXJfd2lkdGggPSBQUklOVF9OVU1CRVJfV0lEVEggKiBwcnRfdG0udG1BdmVDaGFyV2lkdGg7CisJcHJ0X2xlZnRfbWFyZ2luICs9IHBydF9udW1iZXJfd2lkdGg7CisgICAgfQorICAgIGVsc2UKKwlwcnRfbnVtYmVyX3dpZHRoID0gMDsKKworICAgIHBydF9yaWdodF9tYXJnaW4gPSBociAtIHRvX2RldmljZV91bml0cyhPUFRfUFJJTlRfUklHSFQsIGRwaSwgcGh5dywKKwkJCQkJCQkgICAgICAgcmV2X29mZnNldCwgNSk7CisKKyAgICByZXR1cm4gKHBydF9yaWdodF9tYXJnaW4gLSBwcnRfbGVmdF9tYXJnaW4pIC8gcHJ0X3RtLnRtQXZlQ2hhcldpZHRoOworfQorCisgICAgc3RhdGljIGludAorcHJ0X2dldF9scHAodm9pZCkKK3sKKyAgICBpbnQgdnI7CisgICAgaW50IHBoeXc7CisgICAgaW50IGR2b2ZmOworICAgIGludCByZXZfb2Zmc2V0OworICAgIGludAlib3R0b21fbWFyZ2luOworICAgIGludAlkcGk7CisjaWZkZWYgV0lOMTYKKyAgICBQT0lOVCBwYWdlc2l6ZTsKKyNlbmRpZgorCisgICAgdnIJICAgID0gR2V0RGV2aWNlQ2FwcyhwcnRfZGxnLmhEQywgVkVSVFJFUyk7CisjaWZkZWYgV0lOMTYKKyAgICBFc2NhcGUocHJ0X2RsZy5oREMsIEdFVFBIWVNQQUdFU0laRSwgTlVMTCwgTlVMTCwgJnBhZ2VzaXplKTsKKyAgICBwaHl3ICAgID0gcGFnZXNpemUueTsKKyAgICBFc2NhcGUocHJ0X2RsZy5oREMsIEdFVFBSSU5USU5HT0ZGU0VULCBOVUxMLCBOVUxMLCAmcGFnZXNpemUpOworICAgIGR2b2ZmICAgPSBwYWdlc2l6ZS55OworI2Vsc2UKKyAgICBwaHl3ICAgID0gR2V0RGV2aWNlQ2FwcyhwcnRfZGxnLmhEQywgUEhZU0lDQUxIRUlHSFQpOworICAgIGR2b2ZmICAgPSBHZXREZXZpY2VDYXBzKHBydF9kbGcuaERDLCBQSFlTSUNBTE9GRlNFVFkpOworI2VuZGlmCisgICAgZHBpCSAgICA9IEdldERldmljZUNhcHMocHJ0X2RsZy5oREMsIExPR1BJWEVMU1kpOworCisgICAgcmV2X29mZnNldCA9IHBoeXcgLSAoZHZvZmYgKyB2cik7CisKKyAgICBwcnRfdG9wX21hcmdpbiA9IHRvX2RldmljZV91bml0cyhPUFRfUFJJTlRfVE9QLCBkcGksIHBoeXcsIGR2b2ZmLCA1KTsKKworICAgIC8qIGFkanVzdCB0b3AgbWFyZ2luIGlmIHRoZXJlIGlzIGEgaGVhZGVyICovCisgICAgcHJ0X3RvcF9tYXJnaW4gKz0gcHJ0X2xpbmVfaGVpZ2h0ICogcHJ0X2hlYWRlcl9oZWlnaHQoKTsKKworICAgIGJvdHRvbV9tYXJnaW4gPSB2ciAtIHRvX2RldmljZV91bml0cyhPUFRfUFJJTlRfQk9ULCBkcGksIHBoeXcsCisJCQkJCQkJICAgICAgIHJldl9vZmZzZXQsIDUpOworCisgICAgcmV0dXJuIChib3R0b21fbWFyZ2luIC0gcHJ0X3RvcF9tYXJnaW4pIC8gcHJ0X2xpbmVfaGVpZ2h0OworfQorCisgICAgaW50CittY2hfcHJpbnRfaW5pdChwcnRfc2V0dGluZ3NfVCAqcHNldHRpbmdzLCBjaGFyX3UgKmpvYm5hbWUsIGludCBmb3JjZWl0KQoreworICAgIHN0YXRpYyBIR0xPQkFMCXN0b3JlZF9kbSA9IE5VTEw7CisgICAgc3RhdGljIEhHTE9CQUwJc3RvcmVkX2Rldm4gPSBOVUxMOworICAgIHN0YXRpYyBpbnQJCXN0b3JlZF9uQ29waWVzID0gMTsKKyAgICBzdGF0aWMgaW50CQlzdG9yZWRfbkZsYWdzID0gMDsKKworICAgIExPR0ZPTlQJCWZMb2dGb250OworICAgIGludAkJCXBpZkl0YWxpYzsKKyAgICBpbnQJCQlwaWZCb2xkOworICAgIGludAkJCXBpZlVuZGVybGluZTsKKworICAgIERFVk1PREUJCSptZW07CisgICAgREVWTkFNRVMJCSpkZXZuYW1lOworICAgIGludAkJCWk7CisKKyAgICBiVXNlckFib3J0ID0gJihwc2V0dGluZ3MtPnVzZXJfYWJvcnQpOworICAgIG1lbXNldCgmcHJ0X2RsZywgMCwgc2l6ZW9mKFBSSU5URExHKSk7CisgICAgcHJ0X2RsZy5sU3RydWN0U2l6ZSA9IHNpemVvZihQUklOVERMRyk7CisjaWZuZGVmIEZFQVRfR1VJCisgICAgR2V0Q29uc29sZUh3bmQoKTsJICAgIC8qIGdldCB2YWx1ZSBvZiBzX2h3bmQgKi8KKyNlbmRpZgorICAgIHBydF9kbGcuaHduZE93bmVyID0gc19od25kOworICAgIHBydF9kbGcuRmxhZ3MgPSBQRF9OT1BBR0VOVU1TIHwgUERfTk9TRUxFQ1RJT04gfCBQRF9SRVRVUk5EQzsKKyAgICBpZiAoIWZvcmNlaXQpCisgICAgeworCXBydF9kbGcuaERldk1vZGUgPSBzdG9yZWRfZG07CisJcHJ0X2RsZy5oRGV2TmFtZXMgPSBzdG9yZWRfZGV2bjsKKwlwcnRfZGxnLmxDdXN0RGF0YSA9IHN0b3JlZF9uQ29waWVzOyAvLyB3b3JrIGFyb3VuZCBidWcgaW4gcHJpbnQgZGlhbG9nCisjaWZuZGVmIEZFQVRfR1VJCisJLyoKKwkgKiBVc2UgaG9vayB0byBwcmV2ZW50IGNvbnNvbGUgd2luZG93IGJlaW5nIHNlbnQgdG8gYmFjaworCSAqLworCXBydF9kbGcubHBmblByaW50SG9vayA9IFByaW50SG9va1Byb2M7CisJcHJ0X2RsZy5GbGFncyB8PSBQRF9FTkFCTEVQUklOVEhPT0s7CisjZW5kaWYKKwlwcnRfZGxnLkZsYWdzIHw9IHN0b3JlZF9uRmxhZ3M7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiBiYW5nIHByZXNlbnQsIHJldHVybiBkZWZhdWx0IHByaW50ZXIgc2V0dXAgd2l0aCBubyBkaWFsb2cKKyAgICAgKiBuZXZlciBzaG93IGRpYWxvZyBpZiB3ZSBhcmUgcnVubmluZyBvdmVyIHRlbG5ldAorICAgICAqLworICAgIGlmIChmb3JjZWl0CisjaWZuZGVmIEZFQVRfR1VJCisJICAgIHx8ICF0ZXJtX2NvbnNvbGUKKyNlbmRpZgorCSAgICApCisgICAgeworCXBydF9kbGcuRmxhZ3MgfD0gUERfUkVUVVJOREVGQVVMVDsKKyNpZmRlZiBXSU4zMjY0CisJLyoKKwkgKiBNU0ROIHN1Z2dlc3RzIHNldHRpbmcgdGhlIGZpcnN0IHBhcmFtZXRlciB0byBXSU5TUE9PTCBmb3IKKwkgKiBOVCwgYnV0IE5VTEwgYXBwZWFycyB0byB3b3JrIGp1c3QgYXMgd2VsbC4KKwkgKi8KKwlpZiAoKnBfcGRldiAhPSBOVUwpCisJICAgIHBydF9kbGcuaERDID0gQ3JlYXRlREMoTlVMTCwgcF9wZGV2LCBOVUxMLCBOVUxMKTsKKwllbHNlCisjZW5kaWYKKwl7CisJICAgIHBydF9kbGcuRmxhZ3MgfD0gUERfUkVUVVJOREVGQVVMVDsKKwkgICAgaWYgKFByaW50RGxnKCZwcnRfZGxnKSA9PSAwKQorCQlnb3RvIGluaXRfZmFpbF9kbGc7CisJfQorICAgIH0KKyAgICBlbHNlIGlmIChQcmludERsZygmcHJ0X2RsZykgPT0gMCkKKwlnb3RvIGluaXRfZmFpbF9kbGc7CisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIGtlZXAgdGhlIHByZXZpb3VzIGRyaXZlciBjb250ZXh0CisJICovCisJc3RvcmVkX2RtID0gcHJ0X2RsZy5oRGV2TW9kZTsKKwlzdG9yZWRfZGV2biA9IHBydF9kbGcuaERldk5hbWVzOworCXN0b3JlZF9uRmxhZ3MgPSBwcnRfZGxnLkZsYWdzOworCXN0b3JlZF9uQ29waWVzID0gcHJ0X2RsZy5uQ29waWVzOworICAgIH0KKworICAgIGlmIChwcnRfZGxnLmhEQyA9PSBOVUxMKQorICAgIHsKKwlFTVNHKF8oIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIpKTsKKwltY2hfcHJpbnRfY2xlYW51cCgpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICAvKiBOb3QgYWxsIHByaW50ZXIgZHJpdmVycyByZXBvcnQgdGhlIHN1cHBvcnQgb2YgY29sb3IgKG9yIGdyZXkpIGluIHRoZQorICAgICAqIHNhbWUgd2F5LiAgTGV0J3Mgc2V0IGhhc19jb2xvciBpZiB0aGVyZSBhcHBlYXJzIHRvIGJlIHNvbWUgd2F5IHRvIHByaW50CisgICAgICogbW9yZSB0aGFuIEImVy4gKi8KKyAgICBpID0gR2V0RGV2aWNlQ2FwcyhwcnRfZGxnLmhEQywgTlVNQ09MT1JTKTsKKyAgICBwc2V0dGluZ3MtPmhhc19jb2xvciA9IChHZXREZXZpY2VDYXBzKHBydF9kbGcuaERDLCBCSVRTUElYRUwpID4gMQorCQkJCSAgIHx8IEdldERldmljZUNhcHMocHJ0X2RsZy5oREMsIFBMQU5FUykgPiAxCisJCQkJICAgfHwgaSA+IDIgfHwgaSA9PSAtMSk7CisKKyAgICAvKiBFbnN1cmUgYWxsIGZvbnQgc3R5bGVzIGFyZSBiYXNlbGluZSBhbGlnbmVkICovCisgICAgU2V0VGV4dEFsaWduKHBydF9kbGcuaERDLCBUQV9CQVNFTElORXxUQV9MRUZUKTsKKworICAgIC8qCisgICAgICogT24gc29tZSB3aW5kb3dzIHN5c3RlbXMgdGhlIG5Db3BpZXMgcGFyYW1ldGVyIGlzIG5vdAorICAgICAqIHBhc3NlZCBiYWNrIGNvcnJlY3RseS4gSXQgbXVzdCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUKKyAgICAgKiBoRGV2TW9kZSBzdHJ1Y3QuCisgICAgICovCisgICAgbWVtID0gKERFVk1PREUgKilHbG9iYWxMb2NrKHBydF9kbGcuaERldk1vZGUpOworICAgIGlmIChtZW0gIT0gTlVMTCkKKyAgICB7CisjaWZkZWYgV0lOMzI2NAorCWlmIChtZW0tPmRtQ29waWVzICE9IDEpCisJICAgIHN0b3JlZF9uQ29waWVzID0gbWVtLT5kbUNvcGllczsKKyNlbmRpZgorCWlmICgobWVtLT5kbUZpZWxkcyAmIERNX0RVUExFWCkgJiYgKG1lbS0+ZG1EdXBsZXggJiB+RE1EVVBfU0lNUExFWCkpCisJICAgIHBzZXR0aW5ncy0+ZHVwbGV4ID0gVFJVRTsKKwlpZiAoKG1lbS0+ZG1GaWVsZHMgJiBETV9DT0xPUikgJiYgKG1lbS0+ZG1Db2xvciAmIERNQ09MT1JfQ09MT1IpKQorCSAgICBwc2V0dGluZ3MtPmhhc19jb2xvciA9IFRSVUU7CisgICAgfQorICAgIEdsb2JhbFVubG9jayhwcnRfZGxnLmhEZXZNb2RlKTsKKworICAgIGRldm5hbWUgPSAoREVWTkFNRVMgKilHbG9iYWxMb2NrKHBydF9kbGcuaERldk5hbWVzKTsKKyAgICBpZiAoZGV2bmFtZSAhPSAwKQorICAgIHsKKwljaGFyX3UJKnByaW50ZXJfbmFtZSA9IChjaGFyX3UgKilkZXZuYW1lICsgZGV2bmFtZS0+d0RldmljZU9mZnNldDsKKwljaGFyX3UJKnBvcnRfbmFtZSA9IChjaGFyX3UgKilkZXZuYW1lICtkZXZuYW1lLT53T3V0cHV0T2Zmc2V0OworCWNoYXJfdQkqdGV4dCA9IF8oInRvICVzIG9uICVzIik7CisKKwlwcnRfbmFtZSA9IGFsbG9jKFNUUkxFTihwcmludGVyX25hbWUpICsgU1RSTEVOKHBvcnRfbmFtZSkKKwkJCQkJCQkgICAgICArIFNUUkxFTih0ZXh0KSk7CisJaWYgKHBydF9uYW1lICE9IE5VTEwpCisJICAgIHdzcHJpbnRmKHBydF9uYW1lLCB0ZXh0LCBwcmludGVyX25hbWUsIHBvcnRfbmFtZSk7CisgICAgfQorICAgIEdsb2JhbFVubG9jayhwcnRfZGxnLmhEZXZOYW1lcyk7CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpc2UgdGhlIGZvbnQgYWNjb3JkaW5nIHRvICdwcmludGZvbnQnCisgICAgICovCisgICAgbWVtc2V0KCZmTG9nRm9udCwgMCwgc2l6ZW9mKGZMb2dGb250KSk7CisgICAgaWYgKCFnZXRfbG9nZm9udCgmZkxvZ0ZvbnQsIHBfcGZuLCBwcnRfZGxnLmhEQykpCisgICAgeworCUVNU0cyKF8oIkU2MTM6IFVua25vd24gcHJpbnRlciBmb250OiAlcyIpLCBwX3Bmbik7CisJbWNoX3ByaW50X2NsZWFudXAoKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgZm9yIChwaWZCb2xkID0gMDsgcGlmQm9sZCA8PSAxOyBwaWZCb2xkKyspCisJZm9yIChwaWZJdGFsaWMgPSAwOyBwaWZJdGFsaWMgPD0gMTsgcGlmSXRhbGljKyspCisJICAgIGZvciAocGlmVW5kZXJsaW5lID0gMDsgcGlmVW5kZXJsaW5lIDw9IDE7IHBpZlVuZGVybGluZSsrKQorCSAgICB7CisJCWZMb2dGb250LmxmV2VpZ2h0ID0gIGJvbGRmYWNlW3BpZkJvbGRdOworCQlmTG9nRm9udC5sZkl0YWxpYyA9IHBpZkl0YWxpYzsKKwkJZkxvZ0ZvbnQubGZVbmRlcmxpbmUgPSBwaWZVbmRlcmxpbmU7CisJCXBydF9mb250X2hhbmRsZXNbcGlmQm9sZF1bcGlmSXRhbGljXVtwaWZVbmRlcmxpbmVdCisJCQkJCSAgICAgID0gQ3JlYXRlRm9udEluZGlyZWN0KCZmTG9nRm9udCk7CisJICAgIH0KKworICAgIFNldEJrTW9kZShwcnRfZGxnLmhEQywgT1BBUVVFKTsKKyAgICBTZWxlY3RPYmplY3QocHJ0X2RsZy5oREMsIHBydF9mb250X2hhbmRsZXNbMF1bMF1bMF0pOworCisgICAgLyoKKyAgICAgKiBGaWxsIGluIHRoZSBzZXR0aW5ncyBzdHJ1Y3QKKyAgICAgKi8KKyAgICBwc2V0dGluZ3MtPmNoYXJzX3Blcl9saW5lID0gcHJ0X2dldF9jcGwoKTsKKyAgICBwc2V0dGluZ3MtPmxpbmVzX3Blcl9wYWdlID0gcHJ0X2dldF9scHAoKTsKKyAgICBwc2V0dGluZ3MtPm5fY29sbGF0ZWRfY29waWVzID0gKHBydF9kbGcuRmxhZ3MgJiBQRF9DT0xMQVRFKQorCQkJCQkJCT8gcHJ0X2RsZy5uQ29waWVzIDogMTsKKyAgICBwc2V0dGluZ3MtPm5fdW5jb2xsYXRlZF9jb3BpZXMgPSAocHJ0X2RsZy5GbGFncyAmIFBEX0NPTExBVEUpCisJCQkJCQkJPyAxIDogcHJ0X2RsZy5uQ29waWVzOworCisgICAgaWYgKHBzZXR0aW5ncy0+bl9jb2xsYXRlZF9jb3BpZXMgPT0gMCkKKwlwc2V0dGluZ3MtPm5fY29sbGF0ZWRfY29waWVzID0gMTsKKworICAgIGlmIChwc2V0dGluZ3MtPm5fdW5jb2xsYXRlZF9jb3BpZXMgPT0gMCkKKwlwc2V0dGluZ3MtPm5fdW5jb2xsYXRlZF9jb3BpZXMgPSAxOworCisgICAgcHNldHRpbmdzLT5qb2JuYW1lID0gam9ibmFtZTsKKworICAgIHJldHVybiBUUlVFOworCitpbml0X2ZhaWxfZGxnOgorICAgIHsKKwlEV09SRCBlcnIgPSBDb21tRGxnRXh0ZW5kZWRFcnJvcigpOworCisJaWYgKGVycikKKwl7CisjaWZkZWYgV0lOMTYKKwkgICAgY2hhciBidWZbMjBdOworCisJICAgIHNwcmludGYoYnVmLCAiJWxkIiwgZXJyKTsKKwkgICAgRU1TRzIoXygiRTIzODogUHJpbnQgZXJyb3I6ICVzIiksIGJ1Zik7CisjZWxzZQorCSAgICBjaGFyX3UgKmJ1ZjsKKworCSAgICAvKiBJIHN1c3BlY3QgRm9ybWF0TWVzc2FnZSgpIGRvZXNuJ3Qgd29yayBmb3IgdmFsdWVzIHJldHVybmVkIGJ5CisJICAgICAqIENvbW1EbGdFeHRlbmRlZEVycm9yKCkuICBXaGF0IGRvZXM/ICovCisJICAgIEZvcm1hdE1lc3NhZ2UoRk9STUFUX01FU1NBR0VfQUxMT0NBVEVfQlVGRkVSIHwKKwkJCSAgRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0gfAorCQkJICBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUywKKwkJCSAgTlVMTCwgZXJyLCAwLCAoTFBUU1RSKSgmYnVmKSwgMCwgTlVMTCk7CisJICAgIEVNU0cyKF8oIkUyMzg6IFByaW50IGVycm9yOiAlcyIpLAorCQkJCSAgYnVmID09IE5VTEwgPyAoY2hhcl91ICopXygiVW5rbm93biIpIDogYnVmKTsKKwkgICAgTG9jYWxGcmVlKChMUFZPSUQpKGJ1ZikpOworI2VuZGlmCisJfQorCWVsc2UKKwkgICAgbXNnX2Nscl9lb3MoKTsgLyogTWF5YmUgY2FuY2VsZWQgKi8KKworCW1jaF9wcmludF9jbGVhbnVwKCk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KK30KKworCisgICAgaW50CittY2hfcHJpbnRfYmVnaW4ocHJ0X3NldHRpbmdzX1QgKnBzZXR0aW5ncykKK3sKKyAgICBpbnQJCQlyZXQ7CisgICAgc3RhdGljIERPQ0lORk8JZGk7CisgICAgY2hhcgkJc3pCdWZmZXJbMzAwXTsKKworICAgIGhEbGdQcmludCA9IENyZWF0ZURpYWxvZyhHZXRNb2R1bGVIYW5kbGUoTlVMTCksIFRFWFQoIlByaW50RGxnQm94IiksCisJCQkJCSAgICAgcHJ0X2RsZy5od25kT3duZXIsIFByaW50RGxnUHJvYyk7CisjaWZkZWYgV0lOMTYKKyAgICBFc2NhcGUocHJ0X2RsZy5oREMsIFNFVEFCT1JUUFJPQywgMCwgKExQU1RSKUFib3J0UHJvYywgTlVMTCk7CisjZWxzZQorICAgIFNldEFib3J0UHJvYyhwcnRfZGxnLmhEQywgQWJvcnRQcm9jKTsKKyNlbmRpZgorICAgIHdzcHJpbnRmKHN6QnVmZmVyLCBfKCJQcmludGluZyAnJXMnIiksIGdldHRhaWwocHNldHRpbmdzLT5qb2JuYW1lKSk7CisgICAgU2V0RGxnSXRlbVRleHQoaERsZ1ByaW50LCBJRENfUFJJTlRURVhUMSwgKExQU1RSKXN6QnVmZmVyKTsKKworICAgIG1lbXNldCgmZGksIDAsIHNpemVvZihET0NJTkZPKSk7CisgICAgZGkuY2JTaXplID0gc2l6ZW9mKERPQ0lORk8pOworICAgIGRpLmxwc3pEb2NOYW1lID0gcHNldHRpbmdzLT5qb2JuYW1lOworICAgIHJldCA9IFN0YXJ0RG9jKHBydF9kbGcuaERDLCAmZGkpOworCisjaWZkZWYgRkVBVF9HVUkKKyAgICAvKiBHaXZlIGZvY3VzIGJhY2sgdG8gbWFpbiB3aW5kb3cgKHdoZW4gdXNpbmcgTURJKS4gKi8KKyAgICBTZXRGb2N1cyhzX2h3bmQpOworI2VuZGlmCisKKyAgICByZXR1cm4gKHJldCA+IDApOworfQorCisgICAgdm9pZAorbWNoX3ByaW50X2VuZChwcnRfc2V0dGluZ3NfVCAqcHNldHRpbmdzKQoreworICAgIEVuZERvYyhwcnRfZGxnLmhEQyk7CisgICAgaWYgKCEqYlVzZXJBYm9ydCkKKwlTZW5kTWVzc2FnZShoRGxnUHJpbnQsIFdNX0NPTU1BTkQsIDAsIDApOworfQorCisgICAgaW50CittY2hfcHJpbnRfZW5kX3BhZ2Uodm9pZCkKK3sKKyAgICByZXR1cm4gKEVuZFBhZ2UocHJ0X2RsZy5oREMpID4gMCk7Cit9CisKKyAgICBpbnQKK21jaF9wcmludF9iZWdpbl9wYWdlKGNoYXJfdSAqbXNnKQoreworICAgIGlmIChtc2cgIT0gTlVMTCkKKwlTZXREbGdJdGVtVGV4dChoRGxnUHJpbnQsIElEQ19QUk9HUkVTUywgKExQU1RSKW1zZyk7CisgICAgcmV0dXJuIChTdGFydFBhZ2UocHJ0X2RsZy5oREMpID4gMCk7Cit9CisKKyAgICBpbnQKK21jaF9wcmludF9ibGFua19wYWdlKHZvaWQpCit7CisgICAgcmV0dXJuIChtY2hfcHJpbnRfYmVnaW5fcGFnZShOVUxMKSA/IChtY2hfcHJpbnRfZW5kX3BhZ2UoKSkgOiBGQUxTRSk7Cit9CisKK3N0YXRpYyBpbnQgcHJ0X3Bvc194ID0gMDsKK3N0YXRpYyBpbnQgcHJ0X3Bvc195ID0gMDsKKworICAgIHZvaWQKK21jaF9wcmludF9zdGFydF9saW5lKG1hcmdpbiwgcGFnZV9saW5lKQorICAgIGludAkJbWFyZ2luOworICAgIGludAkJcGFnZV9saW5lOworeworICAgIGlmIChtYXJnaW4pCisJcHJ0X3Bvc194ID0gLXBydF9udW1iZXJfd2lkdGg7CisgICAgZWxzZQorCXBydF9wb3NfeCA9IDA7CisgICAgcHJ0X3Bvc195ID0gcGFnZV9saW5lICogcHJ0X2xpbmVfaGVpZ2h0CisJCQkJICsgcHJ0X3RtLnRtQXNjZW50ICsgcHJ0X3RtLnRtRXh0ZXJuYWxMZWFkaW5nOworfQorCisgICAgaW50CittY2hfcHJpbnRfdGV4dF9vdXQoY2hhcl91ICpwLCBpbnQgbGVuKQoreworI2lmZGVmIEZFQVRfUFJPUE9SVElPTkFMX0ZPTlRTCisgICAgU0laRQlzejsKKyNlbmRpZgorCisgICAgVGV4dE91dChwcnRfZGxnLmhEQywgcHJ0X3Bvc194ICsgcHJ0X2xlZnRfbWFyZ2luLAorCQkJCQkgIHBydF9wb3NfeSArIHBydF90b3BfbWFyZ2luLCBwLCBsZW4pOworI2lmbmRlZiBGRUFUX1BST1BPUlRJT05BTF9GT05UUworICAgIHBydF9wb3NfeCArPSBsZW4gKiBwcnRfdG0udG1BdmVDaGFyV2lkdGg7CisgICAgcmV0dXJuIChwcnRfcG9zX3ggKyBwcnRfbGVmdF9tYXJnaW4gKyBwcnRfdG0udG1BdmVDaGFyV2lkdGgKKwkJCQkgICAgICsgcHJ0X3RtLnRtT3ZlcmhhbmcgPiBwcnRfcmlnaHRfbWFyZ2luKTsKKyNlbHNlCisjIGlmZGVmIFdJTjE2CisgICAgR2V0VGV4dEV4dGVudFBvaW50KHBydF9kbGcuaERDLCBwLCBsZW4sICZzeik7CisjIGVsc2UKKyAgICBHZXRUZXh0RXh0ZW50UG9pbnQzMihwcnRfZGxnLmhEQywgcCwgbGVuLCAmc3opOworIyBlbmRpZgorICAgIHBydF9wb3NfeCArPSAoc3ouY3ggLSBwcnRfdG0udG1PdmVyaGFuZyk7CisgICAgLyogVGhpcyBpcyB3cm9uZyB3aGVuIHByaW50aW5nIHNwYWNlcyBmb3IgYSBUQUIuICovCisgICAgaWYgKHBbbGVuXSA9PSBOVUwpCisJcmV0dXJuIEZBTFNFOworIyBpZmRlZiBXSU4xNgorICAgIEdldFRleHRFeHRlbnRQb2ludChwcnRfZGxnLmhEQywgcCArIGxlbiwgMSwgJnN6KTsKKyMgZWxzZQorICAgIEdldFRleHRFeHRlbnRQb2ludDMyKHBydF9kbGcuaERDLCBwICsgbGVuLCAxLCAmc3opOworIyBlbmRpZgorICAgIHJldHVybiAocHJ0X3Bvc194ICsgcHJ0X2xlZnRfbWFyZ2luICsgc3ouY3ggPiBwcnRfcmlnaHRfbWFyZ2luKTsKKyNlbmRpZgorfQorCisgICAgdm9pZAorbWNoX3ByaW50X3NldF9mb250KGludCBpQm9sZCwgaW50IGlJdGFsaWMsIGludCBpVW5kZXJsaW5lKQoreworICAgIFNlbGVjdE9iamVjdChwcnRfZGxnLmhEQywgcHJ0X2ZvbnRfaGFuZGxlc1tpQm9sZF1baUl0YWxpY11baVVuZGVybGluZV0pOworfQorCisgICAgdm9pZAorbWNoX3ByaW50X3NldF9iZyh1bnNpZ25lZCBsb25nIGJnY29sKQoreworICAgIFNldEJrQ29sb3IocHJ0X2RsZy5oREMsIEdldE5lYXJlc3RDb2xvcihwcnRfZGxnLmhEQywgc3dhcF9tZShiZ2NvbCkpKTsKKyAgICAvKgorICAgICAqIFdpdGggYSB3aGl0ZSBiYWNrZ3JvdW5kIHdlIGNhbiBkcmF3IGNoYXJhY3RlcnMgdHJhbnNwYXJlbnQsIHdoaWNoIGlzCisgICAgICogZ29vZCBmb3IgaXRhbGljIGNoYXJhY3RlcnMgdGhhdCBvdmVybGFwIHRvIHRoZSBuZXh0IGNoYXIgY2VsbC4KKyAgICAgKi8KKyAgICBpZiAoYmdjb2wgPT0gMHhmZmZmZmZVTCkKKwlTZXRCa01vZGUocHJ0X2RsZy5oREMsIFRSQU5TUEFSRU5UKTsKKyAgICBlbHNlCisJU2V0QmtNb2RlKHBydF9kbGcuaERDLCBPUEFRVUUpOworfQorCisgICAgdm9pZAorbWNoX3ByaW50X3NldF9mZyh1bnNpZ25lZCBsb25nIGZnY29sKQoreworICAgIFNldFRleHRDb2xvcihwcnRfZGxnLmhEQywgR2V0TmVhcmVzdENvbG9yKHBydF9kbGcuaERDLCBzd2FwX21lKGZnY29sKSkpOworfQorCisjZW5kaWYgLypGRUFUX1BSSU5URVIgJiYgIUZFQVRfUE9TVFNDUklQVCovCisKKyNpZiBkZWZpbmVkKEZFQVRfU0hPUlRDVVQpIHx8IGRlZmluZWQoUFJPVE8pCisjIGluY2x1ZGUgPHNobG9iai5oPgorCisvKgorICogV2hlbiAiZm5hbWUiIGlzIHRoZSBuYW1lIG9mIGEgc2hvcnRjdXQgKCoubG5rKSByZXNvbHZlIHRoZSBmaWxlIGl0IHBvaW50cworICogdG8gYW5kIHJldHVybiB0aGF0IG5hbWUgaW4gYWxsb2NhdGVkIG1lbW9yeS4KKyAqIE90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLgorICovCisgICAgY2hhcl91ICoKK21jaF9yZXNvbHZlX3Nob3J0Y3V0KGNoYXJfdSAqZm5hbWUpCit7CisgICAgSFJFU1VMVAkJaHI7CisgICAgSVNoZWxsTGluawkJKnBzbCA9IE5VTEw7CisgICAgSVBlcnNpc3RGaWxlCSpwcGYgPSBOVUxMOworICAgIE9MRUNIQVIJCXdzeltNQVhfUEFUSF07CisgICAgV0lOMzJfRklORF9EQVRBCWZmZDsgLy8gd2UgZ2V0IHRob3NlIGZyZWUgb2YgY2hhcmdlCisgICAgVENIQVIJCWJ1ZltNQVhfUEFUSF07IC8vIGNvdWxkIGhhdmUgc2ltcGx5IHJldXNlZCAnd3N6Jy4uLgorICAgIGNoYXJfdQkJKnJmbmFtZSA9IE5VTEw7CisgICAgaW50CQkJbGVuOworCisgICAgLyogQ2hlY2sgaWYgdGhlIGZpbGUgbmFtZSBlbmRzIGluICIubG5rIi4gQXZvaWQgY2FsbGluZworICAgICAqIENvQ3JlYXRlSW5zdGFuY2UoKSwgaXQncyBxdWl0ZSBzbG93LiAqLworICAgIGlmIChmbmFtZSA9PSBOVUxMKQorCXJldHVybiByZm5hbWU7CisgICAgbGVuID0gU1RSTEVOKGZuYW1lKTsKKyAgICBpZiAobGVuIDw9IDQgfHwgU1RSTklDTVAoZm5hbWUgKyBsZW4gLSA0LCAiLmxuayIsIDQpICE9IDApCisJcmV0dXJuIHJmbmFtZTsKKworICAgIENvSW5pdGlhbGl6ZShOVUxMKTsKKworICAgIC8vIGNyZWF0ZSBhIGxpbmsgbWFuYWdlciBvYmplY3QgYW5kIHJlcXVlc3QgaXRzIGludGVyZmFjZQorICAgIGhyID0gQ29DcmVhdGVJbnN0YW5jZSgKKwkgICAgJkNMU0lEX1NoZWxsTGluaywgTlVMTCwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsCisJICAgICZJSURfSVNoZWxsTGluaywgKHZvaWQqKikmcHNsKTsKKyAgICBpZiAoaHIgIT0gU19PSykKKwlnb3RvIHNob3J0Y3V0X2Vycm9yOworCisgICAgLy8gR2V0IGEgcG9pbnRlciB0byB0aGUgSVBlcnNpc3RGaWxlIGludGVyZmFjZS4KKyAgICBociA9IHBzbC0+bHBWdGJsLT5RdWVyeUludGVyZmFjZSgKKwkgICAgcHNsLCAmSUlEX0lQZXJzaXN0RmlsZSwgKHZvaWQqKikmcHBmKTsKKyAgICBpZiAoaHIgIT0gU19PSykKKwlnb3RvIHNob3J0Y3V0X2Vycm9yOworCisgICAgLy8gZnVsbCBwYXRoIHN0cmluZyBtdXN0IGJlIGluIFVuaWNvZGUuCisgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsIDAsIGZuYW1lLCAtMSwgd3N6LCBNQVhfUEFUSCk7CisKKyAgICAvLyAibG9hZCIgdGhlIG5hbWUgYW5kIHJlc292ZSB0aGUgbGluaworICAgIGhyID0gcHBmLT5scFZ0YmwtPkxvYWQocHBmLCB3c3osIFNUR01fUkVBRCk7CisgICAgaWYgKGhyICE9IFNfT0spCisJZ290byBzaG9ydGN1dF9lcnJvcjsKKyNpZiAwICAvLyBUaGlzIG1ha2VzIFZpbSB3YWl0IGEgbG9uZyB0aW1lIGlmIHRoZSB0YXJnZXQgZG9lc24ndCBleGlzdC4KKyAgICBociA9IHBzbC0+bHBWdGJsLT5SZXNvbHZlKHBzbCwgTlVMTCwgU0xSX05PX1VJKTsKKyAgICBpZiAoaHIgIT0gU19PSykKKwlnb3RvIHNob3J0Y3V0X2Vycm9yOworI2VuZGlmCisKKyAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlIGxpbmsgdGFyZ2V0LgorICAgIFplcm9NZW1vcnkoYnVmLCBNQVhfUEFUSCk7CisgICAgaHIgPSBwc2wtPmxwVnRibC0+R2V0UGF0aChwc2wsIGJ1ZiwgTUFYX1BBVEgsICZmZmQsIDApOworICAgIGlmIChociA9PSBTX09LICYmIGJ1ZlswXSAhPSBOVUwpCisJcmZuYW1lID0gdmltX3N0cnNhdmUoYnVmKTsKKworc2hvcnRjdXRfZXJyb3I6CisgICAgLy8gUmVsZWFzZSBhbGwgaW50ZXJmYWNlIHBvaW50ZXJzIChib3RoIGJlbG9uZyB0byB0aGUgc2FtZSBvYmplY3QpCisgICAgaWYgKHBwZiAhPSBOVUxMKQorCXBwZi0+bHBWdGJsLT5SZWxlYXNlKHBwZik7CisgICAgaWYgKHBzbCAhPSBOVUxMKQorCXBzbC0+bHBWdGJsLT5SZWxlYXNlKHBzbCk7CisKKyAgICBDb1VuaW5pdGlhbGl6ZSgpOworICAgIHJldHVybiByZm5hbWU7Cit9CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZFQVRfRVZBTCkgJiYgIWRlZmluZWQoRkVBVF9HVUkpKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEJyaW5nIG91cnNlbHZlcyB0byB0aGUgZm9yZWdyb3VuZC4gIERvZXMgd29yayBpZiB0aGUgT1MgZG9lc24ndCBhbGxvdyBpdC4KKyAqLworICAgIHZvaWQKK3dpbjMyX3NldF9mb3JlZ3JvdW5kKCkKK3sKKyMgaWZuZGVmIEZFQVRfR1VJCisgICAgR2V0Q29uc29sZUh3bmQoKTsJICAgIC8qIGdldCB2YWx1ZSBvZiBzX2h3bmQgKi8KKyMgZW5kaWYKKyAgICBpZiAoc19od25kICE9IDApCisJU2V0Rm9yZWdyb3VuZFdpbmRvdyhzX2h3bmQpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfQ0xJRU5UU0VSVkVSKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENsaWVudC1zZXJ2ZXIgY29kZSBmb3IgVmltCisgKgorICogT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBhdWwgTW9vcmUKKyAqLworCisvKiBJbiBvcmRlciB0byBoYW5kbGUgaW50ZXItcHJvY2VzcyBtZXNzYWdlcywgd2UgbmVlZCB0byBoYXZlIGEgd2luZG93LiBCdXQKKyAqIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhlIG1haW4gR1VJIHdpbmRvdyBpcworICogY3JlYXRlZCAoYW5kIG1heSBhbHNvIGJlIGNhbGxlZCBpbiB0aGUgY29uc29sZSB2ZXJzaW9uLCB3aGVyZSB0aGVyZSBpcyBubworICogR1VJIHdpbmRvdyBhdCBhbGwpLgorICoKKyAqIFNvIHdlIGNyZWF0ZSBhIGhpZGRlbiB3aW5kb3csIGFuZCBhcnJhbmdlIHRvIGRlc3Ryb3kgaXQgb24gZXhpdC4KKyAqLworSFdORCBtZXNzYWdlX3dpbmRvdyA9IDA7CSAgICAvKiB3aW5kb3cgdGhhdCdzIGhhbmRsaW5nIG1lc3NzYWdlcyAqLworCisjZGVmaW5lIFZJTV9DTEFTU05BTUUgICAgICAiVklNX01FU1NBR0VTIgorI2RlZmluZSBWSU1fQ0xBU1NOQU1FX0xFTiAgKHNpemVvZihWSU1fQ0xBU1NOQU1FKSAtIDEpCisKKy8qIENvbW11bmljYXRpb24gaXMgdmlhIFdNX0NPUFlEQVRBIG1lc3NhZ2VzLiBUaGUgbWVzc2FnZSB0eXBlIGlzIHNlbmQgaW4KKyAqIHRoZSBkd0RhdGEgcGFyYW1ldGVyLiBUeXBlcyBhcmUgZGVmaW5lZCBoZXJlLiAqLworI2RlZmluZSBDT1BZREFUQV9LRVlTCQkwCisjZGVmaW5lIENPUFlEQVRBX1JFUExZCQkxCisjZGVmaW5lIENPUFlEQVRBX0VYUFIJCTEwCisjZGVmaW5lIENPUFlEQVRBX1JFU1VMVAkJMTEKKyNkZWZpbmUgQ09QWURBVEFfRVJST1JfUkVTVUxUCTEyCisKKy8qIFRoaXMgaXMgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhIHNlcnZlciBIV05EIGFuZCBpdHMgbmFtZS4gKi8KK3N0cnVjdCBzZXJ2ZXJfaWQKK3sKKyAgICBIV05EIGh3bmQ7CisgICAgY2hhcl91ICpuYW1lOworfTsKKworLyoKKyAqIENsZWFuIHVwIG9uIGV4aXQuIFRoaXMgZGVzdHJveXMgdGhlIGhpZGRlbiBtZXNzYWdlIHdpbmRvdy4KKyAqLworICAgIHN0YXRpYyB2b2lkCisjaWZkZWYgX19CT1JMQU5EQ19fCisgICAgX1JUTEVOVFJZRgorI2VuZGlmCitDbGVhblVwTWVzc2FnaW5nKHZvaWQpCit7CisgICAgaWYgKG1lc3NhZ2Vfd2luZG93ICE9IDApCisgICAgeworCURlc3Ryb3lXaW5kb3cobWVzc2FnZV93aW5kb3cpOworCW1lc3NhZ2Vfd2luZG93ID0gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgc2F2ZV9yZXBseShIV05EIHNlcnZlciwgY2hhcl91ICpyZXBseSwgaW50IGV4cHIpOworCisvKnMKKyAqIFRoZSB3aW5kb3cgcHJvY2VkdXJlIGZvciB0aGUgaGlkZGVuIG1lc3NhZ2Ugd2luZG93LgorICogSXQgaGFuZGxlcyBjYWxsYmFjayBtZXNzYWdlcyBhbmQgbm90aWZpY2F0aW9ucyBmcm9tIHNlcnZlcnMuCisgKiBJbiBvcmRlciB0byBwcm9jZXNzIHRoZXNlIG1lc3NhZ2VzLCBpdCBpcyBuZWNlc3NhcnkgdG8gcnVuIGEKKyAqIG1lc3NhZ2UgbG9vcC4gQ29kZSB3aGljaCBtYXkgcnVuIGJlZm9yZSB0aGUgbWFpbiBtZXNzYWdlIGxvb3AKKyAqIGlzIHN0YXJ0ZWQgKGluIHRoZSBHVUkpIGlzIGNhcmVmdWwgdG8gcHVtcCBtZXNzYWdlcyB3aGVuIGl0IG5lZWRzCisgKiB0by4gRmVhdHVyZXMgd2hpY2ggcmVxdWlyZSBtZXNzYWdlIGRlbGl2ZXJ5IGR1cmluZyBub3JtYWwgdXNlIHdpbGwKKyAqIG5vdCB3b3JrIGluIHRoZSBjb25zb2xlIHZlcnNpb24gLSB0aGlzIGJhc2ljYWxseSBtZWFucyB0aG9zZQorICogZmVhdHVyZXMgd2hpY2ggYWxsb3cgVmltIHRvIGFjdCBhcyBhIHNlcnZlciwgcmF0aGVyIHRoYW4gYSBjbGllbnQuCisgKi8KKyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSworTWVzc2FnaW5nX1duZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBpZiAobXNnID09IFdNX0NPUFlEQVRBKQorICAgIHsKKwkvKiBUaGlzIGlzIGEgbWVzc2FnZSBmcm9tIGFub3RoZXIgVmltLiBUaGUgZHdEYXRhIG1lbWJlciBvZiB0aGUKKwkgKiBDT1BZREFUQVNUUlVDVCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIG1lc3NhZ2U6CisJICogICBDT1BZREFUQV9LRVlTOgorCSAqCUEga2V5IHNlcXVlbmNlLiBXZSBhcmUgYSBzZXJ2ZXIsIGFuZCBhIGNsaWVudCB3YW50cyB0aGVzZSBrZXlzCisJICoJYWRkaW5nIHRvIHRoZSBpbnB1dCBxdWV1ZS4KKwkgKiAgIENPUFlEQVRBX1JFUExZOgorCSAqCUEgcmVwbHkuIFdlIGFyZSBhIGNsaWVudCwgYW5kIGEgc2VydmVyIGhhcyBzZW50IHRoaXMgbWVzc2FnZQorCSAqCWluIHJlc3BvbnNlIHRvIGEgcmVxdWVzdC4gIChzZXJ2ZXIyY2xpZW50KCkpCisJICogICBDT1BZREFUQV9FWFBSOgorCSAqCUFuIGV4cHJlc3Npb24uIFdlIGFyZSBhIHNlcnZlciwgYW5kIGEgY2xpZW50IHdhbnRzIHVzIHRvCisJICoJZXZhbHVhdGUgdGhpcyBleHByZXNzaW9uLgorCSAqICAgQ09QWURBVEFfUkVTVUxUOgorCSAqCUEgcmVwbHkuIFdlIGFyZSBhIGNsaWVudCwgYW5kIGEgc2VydmVyIGhhcyBzZW50IHRoaXMgbWVzc2FnZQorCSAqCWluIHJlc3BvbnNlIHRvIGEgQ09QWURBVEFfRVhQUi4KKwkgKiAgIENPUFlEQVRBX0VSUk9SX1JFU1VMVDoKKwkgKglBIHJlcGx5LiBXZSBhcmUgYSBjbGllbnQsIGFuZCBhIHNlcnZlciBoYXMgc2VudCB0aGlzIG1lc3NhZ2UKKwkgKglpbiByZXNwb25zZSB0byBhIENPUFlEQVRBX0VYUFIgdGhhdCBmYWlsZWQgdG8gZXZhbHVhdGUuCisJICovCisJQ09QWURBVEFTVFJVQ1QJKmRhdGEgPSAoQ09QWURBVEFTVFJVQ1QqKWxQYXJhbTsKKwlIV05ECQlzZW5kZXIgPSAoSFdORCl3UGFyYW07CisJQ09QWURBVEFTVFJVQ1QJcmVwbHk7CisJY2hhcl91CQkqcmVzOworCWNoYXJfdQkJd2luc3RyWzMwXTsKKwlpbnQJCXJldHZhbDsKKworCXN3aXRjaCAoZGF0YS0+ZHdEYXRhKQorCXsKKwljYXNlIENPUFlEQVRBX0tFWVM6CisJICAgIC8qIFJlbWVtYmVyIHdobyBzZW50IHRoaXMsIGZvciA8Y2xpZW50PiAqLworCSAgICBjbGllbnRXaW5kb3cgPSBzZW5kZXI7CisKKwkgICAgLyogQWRkIHRoZSByZWNlaXZlZCBrZXlzIHRvIHRoZSBpbnB1dCBidWZmZXIuICBUaGUgbG9vcCB3YWl0aW5nCisJICAgICAqIGZvciB0aGUgdXNlciB0byBkbyBzb21ldGhpbmcgc2hvdWxkIGNoZWNrIHRoZSBpbnB1dCBidWZmZXIuICovCisJICAgIHNlcnZlcl90b19pbnB1dF9idWYoKGNoYXJfdSAqKShkYXRhLT5scERhdGEpKTsKKworIyBpZmRlZiBGRUFUX0dVSQorCSAgICAvKiBXYWtlIHVwIHRoZSBtYWluIEdVSSBsb29wLiAqLworCSAgICBpZiAoc19od25kICE9IDApCisJCVBvc3RNZXNzYWdlKHNfaHduZCwgV01fTlVMTCwgMCwgMCk7CisjIGVuZGlmCisJICAgIHJldHVybiAxOworCisJY2FzZSBDT1BZREFUQV9FWFBSOgorCSAgICAvKiBSZW1lbWJlciB3aG8gc2VudCB0aGlzLCBmb3IgPGNsaWVudD4gKi8KKwkgICAgY2xpZW50V2luZG93ID0gc2VuZGVyOworCisJICAgIHJlcyA9IGV2YWxfY2xpZW50X2V4cHJfdG9fc3RyaW5nKGRhdGEtPmxwRGF0YSk7CisJICAgIGlmIChyZXMgPT0gTlVMTCkKKwkgICAgeworCQlyZXMgPSB2aW1fc3Ryc2F2ZShfKGVfaW52ZXhwcm1zZykpOworCQlyZXBseS5kd0RhdGEgPSBDT1BZREFUQV9FUlJPUl9SRVNVTFQ7CisJICAgIH0KKwkgICAgZWxzZQorCQlyZXBseS5kd0RhdGEgPSBDT1BZREFUQV9SRVNVTFQ7CisJICAgIHJlcGx5LmxwRGF0YSA9IHJlczsKKwkgICAgcmVwbHkuY2JEYXRhID0gU1RSTEVOKHJlcykgKyAxOworCisJICAgIHJldHZhbCA9IFNlbmRNZXNzYWdlKHNlbmRlciwgV01fQ09QWURBVEEsIChXUEFSQU0pbWVzc2FnZV93aW5kb3csCisJCQkJCQkJICAgIChMUEFSQU0pKCZyZXBseSkpOworCSAgICB2aW1fZnJlZShyZXMpOworCSAgICByZXR1cm4gcmV0dmFsOworCisJY2FzZSBDT1BZREFUQV9SRVBMWToKKwljYXNlIENPUFlEQVRBX1JFU1VMVDoKKwljYXNlIENPUFlEQVRBX0VSUk9SX1JFU1VMVDoKKwkgICAgaWYgKGRhdGEtPmxwRGF0YSAhPSBOVUxMKQorCSAgICB7CisJCXNhdmVfcmVwbHkoc2VuZGVyLCBkYXRhLT5scERhdGEsCisJCQkgICAoZGF0YS0+ZHdEYXRhID09IENPUFlEQVRBX1JFUExZID8gIDAgOgorCQkJICAgKGRhdGEtPmR3RGF0YSA9PSBDT1BZREFUQV9SRVNVTFQgPyAxIDoKKwkJCQkJCQkgICAgICAyKSkpOworI2lmZGVmIEZFQVRfQVVUT0NNRAorCQlpZiAoZGF0YS0+ZHdEYXRhID09IENPUFlEQVRBX1JFUExZKQorCQl7CisJCSAgICBzcHJpbnRmKChjaGFyICopd2luc3RyLCAiMHgleCIsICh1bnNpZ25lZClzZW5kZXIpOworCQkgICAgYXBwbHlfYXV0b2NtZHMoRVZFTlRfUkVNT1RFUkVQTFksIHdpbnN0ciwgZGF0YS0+bHBEYXRhLAorCQkJCQkJCQlUUlVFLCBjdXJidWYpOworCQl9CisjZW5kaWYKKwkgICAgfQorCSAgICByZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgICBlbHNlIGlmIChtc2cgPT0gV01fQUNUSVZBVEUgJiYgd1BhcmFtID09IFdBX0FDVElWRSkKKyAgICB7CisJLyogV2hlbiB0aGUgbWVzc2FnZSB3aW5kb3cgaXMgYWN0aXZhdGVkIChicm91Z2h0IHRvIHRoZSBmb3JlZ3JvdW5kKSwKKwkgKiB0aGlzIGFjdHVhbGx5IGFwcGxpZXMgdG8gdGhlIHRleHQgd2luZG93LiAqLworI2lmbmRlZiBGRUFUX0dVSQorCUdldENvbnNvbGVId25kKCk7CSAgICAvKiBnZXQgdmFsdWUgb2Ygc19od25kICovCisjZW5kaWYKKwlpZiAoc19od25kICE9IDApCisJeworCSAgICBTZXRGb3JlZ3JvdW5kV2luZG93KHNfaHduZCk7CisJICAgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gRGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKK30KKworLyoKKyAqIEluaXRpYWxpc2UgdGhlIG1lc3NhZ2UgaGFuZGxpbmcgcHJvY2Vzcy4gIFRoaXMgaW52b2x2ZXMgY3JlYXRpbmcgYSB3aW5kb3cKKyAqIHRvIGhhbmRsZSBtZXNzYWdlcyAtIHRoZSB3aW5kb3cgd2lsbCBub3QgYmUgdmlzaWJsZS4KKyAqLworICAgIHZvaWQKK3NlcnZlckluaXRNZXNzYWdpbmcodm9pZCkKK3sKKyAgICBXTkRDTEFTUyB3bmRjbGFzczsKKyAgICBISU5TVEFOQ0Ugc19oaW5zdDsKKworICAgIC8qIENsZWFuIHVwIG9uIGV4aXQgKi8KKyAgICBhdGV4aXQoQ2xlYW5VcE1lc3NhZ2luZyk7CisKKyAgICAvKiBSZWdpc3RlciBhIHdpbmRvdyBjbGFzcyAtIHdlIG9ubHkgcmVhbGx5IGNhcmUKKyAgICAgKiBhYm91dCB0aGUgd2luZG93IHByb2NlZHVyZQorICAgICAqLworICAgIHNfaGluc3QgPSAoSElOU1RBTkNFKUdldE1vZHVsZUhhbmRsZSgwKTsKKyAgICB3bmRjbGFzcy5zdHlsZSA9IDA7CisgICAgd25kY2xhc3MubHBmblduZFByb2MgPSBNZXNzYWdpbmdfV25kUHJvYzsKKyAgICB3bmRjbGFzcy5jYkNsc0V4dHJhID0gMDsKKyAgICB3bmRjbGFzcy5jYlduZEV4dHJhID0gMDsKKyAgICB3bmRjbGFzcy5oSW5zdGFuY2UgPSBzX2hpbnN0OworICAgIHduZGNsYXNzLmhJY29uID0gTlVMTDsKKyAgICB3bmRjbGFzcy5oQ3Vyc29yID0gTlVMTDsKKyAgICB3bmRjbGFzcy5oYnJCYWNrZ3JvdW5kID0gTlVMTDsKKyAgICB3bmRjbGFzcy5scHN6TWVudU5hbWUgPSBOVUxMOworICAgIHduZGNsYXNzLmxwc3pDbGFzc05hbWUgPSBWSU1fQ0xBU1NOQU1FOworICAgIFJlZ2lzdGVyQ2xhc3MoJnduZGNsYXNzKTsKKworICAgIC8qIENyZWF0ZSB0aGUgbWVzc2FnZSB3aW5kb3cuIEl0IHdpbGwgYmUgaGlkZGVuLCBzbyB0aGUgZGV0YWlscyBkb24ndAorICAgICAqIG1hdHRlci4gIERvbid0IHVzZSBXU19PVkVSTEFQUEVEV0lORE9XLCBpdCB3aWxsIG1ha2UgYSBzaG9ydGN1dCByZW1vdmUKKyAgICAgKiBmb2N1cyBmcm9tIGd2aW0uICovCisgICAgbWVzc2FnZV93aW5kb3cgPSBDcmVhdGVXaW5kb3coVklNX0NMQVNTTkFNRSwgIiIsCisJCQkgV1NfUE9QVVBXSU5ET1cgfCBXU19DQVBUSU9OLAorCQkJIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsCisJCQkgMTAwLCAxMDAsIE5VTEwsIE5VTEwsCisJCQkgc19oaW5zdCwgTlVMTCk7Cit9CisKKy8qCisgKiBHZXQgdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cgImh3bmQiLCB3aGljaCBpcyB0aGUgVmltIHNlcnZlciBuYW1lLCBpbgorICogIm5hbWVbbmFtZWxlbl0iIGFuZCByZXR1cm4gdGhlIGxlbmd0aC4KKyAqIFJldHVybnMgemVybyBpZiB3aW5kb3cgImh3bmQiIGlzIG5vdCBhIFZpbSBzZXJ2ZXIuCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRWaW1TZXJ2ZXJOYW1lKEhXTkQgaHduZCwgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisgICAgaW50CQlsZW47CisgICAgY2hhcglidWZmZXJbVklNX0NMQVNTTkFNRV9MRU4gKyAxXTsKKworICAgIC8qIElnbm9yZSB3aW5kb3dzIHdoaWNoIGFyZW4ndCBWaW0gbWVzc2FnZSB3aW5kb3dzICovCisgICAgbGVuID0gR2V0Q2xhc3NOYW1lKGh3bmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgIGlmIChsZW4gIT0gVklNX0NMQVNTTkFNRV9MRU4gfHwgU1RSQ01QKGJ1ZmZlciwgVklNX0NMQVNTTkFNRSkgIT0gMCkKKwlyZXR1cm4gMDsKKworICAgIC8qIEdldCB0aGUgdGl0bGUgb2YgdGhlIHdpbmRvdyAqLworICAgIHJldHVybiBHZXRXaW5kb3dUZXh0KGh3bmQsIG5hbWUsIG5hbWVsZW4pOworfQorCisgICAgc3RhdGljIEJPT0wgQ0FMTEJBQ0sKK2VudW1XaW5kb3dzR2V0U2VydmVyKEhXTkQgaHduZCwgTFBBUkFNIGxwYXJhbSkKK3sKKyAgICBzdHJ1Y3QJc2VydmVyX2lkICppZCA9IChzdHJ1Y3Qgc2VydmVyX2lkICopbHBhcmFtOworICAgIGNoYXIJc2VydmVyW01BWF9QQVRIXTsKKworICAgIC8qIEdldCB0aGUgdGl0bGUgb2YgdGhlIHdpbmRvdyAqLworICAgIGlmIChnZXRWaW1TZXJ2ZXJOYW1lKGh3bmQsIHNlcnZlciwgc2l6ZW9mKHNlcnZlcikpID09IDApCisJcmV0dXJuIFRSVUU7CisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBzZXJ2ZXIgd2UncmUgbG9va2luZyBmb3IsIHJldHVybiBpdHMgSFdORCAqLworICAgIGlmIChTVFJJQ01QKHNlcnZlciwgaWQtPm5hbWUpID09IDApCisgICAgeworCWlkLT5od25kID0gaHduZDsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLyogT3RoZXJ3aXNlLCBrZWVwIGxvb2tpbmcgKi8KKyAgICByZXR1cm4gVFJVRTsKK30KKworICAgIHN0YXRpYyBCT09MIENBTExCQUNLCitlbnVtV2luZG93c0dldE5hbWVzKEhXTkQgaHduZCwgTFBBUkFNIGxwYXJhbSkKK3sKKyAgICBnYXJyYXlfVAkqZ2EgPSAoZ2FycmF5X1QgKilscGFyYW07CisgICAgY2hhcglzZXJ2ZXJbTUFYX1BBVEhdOworCisgICAgLyogR2V0IHRoZSB0aXRsZSBvZiB0aGUgd2luZG93ICovCisgICAgaWYgKGdldFZpbVNlcnZlck5hbWUoaHduZCwgc2VydmVyLCBzaXplb2Yoc2VydmVyKSkgPT0gMCkKKwlyZXR1cm4gVFJVRTsKKworICAgIC8qIEFkZCB0aGUgbmFtZSB0byB0aGUgbGlzdCAqLworICAgIGdhX2NvbmNhdChnYSwgc2VydmVyKTsKKyAgICBnYV9jb25jYXQoZ2EsICJcbiIpOworICAgIHJldHVybiBUUlVFOworfQorCisgICAgc3RhdGljIEhXTkQKK2ZpbmRTZXJ2ZXIoY2hhcl91ICpuYW1lKQoreworICAgIHN0cnVjdCBzZXJ2ZXJfaWQgaWQ7CisKKyAgICBpZC5uYW1lID0gbmFtZTsKKyAgICBpZC5od25kID0gMDsKKworICAgIEVudW1XaW5kb3dzKGVudW1XaW5kb3dzR2V0U2VydmVyLCAoTFBBUkFNKSgmaWQpKTsKKworICAgIHJldHVybiBpZC5od25kOworfQorCisgICAgdm9pZAorc2VydmVyU2V0TmFtZShjaGFyX3UgKm5hbWUpCit7CisgICAgY2hhcl91CSpva19uYW1lOworICAgIEhXTkQJaHduZCA9IDA7CisgICAgaW50CQlpID0gMDsKKyAgICBjaGFyX3UJKnA7CisKKyAgICAvKiBMZWF2ZSBlbm91Z2ggc3BhY2UgZm9yIGEgOS1kaWdpdCBzdWZmaXggdG8gZW5zdXJlIHVuaXF1ZW5lc3MhICovCisgICAgb2tfbmFtZSA9IGFsbG9jKFNUUkxFTihuYW1lKSArIDEwKTsKKworICAgIFNUUkNQWShva19uYW1lLCBuYW1lKTsKKyAgICBwID0gb2tfbmFtZSArIFNUUkxFTihuYW1lKTsKKworICAgIGZvciAoOzspCisgICAgeworCS8qIFRoaXMgaXMgaW5lZmZpY2llbnQgLSB3ZSdyZSBkb2luZyBhbiBFbnVtV2luZG93cyBsb29wIGZvciBlYWNoCisJICogcG9zc2libGUgbmFtZS4gSXQgd291bGQgYmUgYmV0dGVyIHRvIGdyYWIgYWxsIG5hbWVzIGluIG9uZSBnbywKKwkgKiBhbmQgc2NhbiB0aGUgbGlzdCBlYWNoIHRpbWUuLi4KKwkgKi8KKwlod25kID0gZmluZFNlcnZlcihva19uYW1lKTsKKwlpZiAoaHduZCA9PSAwKQorCSAgICBicmVhazsKKworCSsraTsKKwlpZiAoaSA+PSAxMDAwKQorCSAgICBicmVhazsKKworCXNwcmludGYoKGNoYXIgKilwLCAiJWQiLCBpKTsKKyAgICB9CisKKyAgICBpZiAoaHduZCAhPSAwKQorCXZpbV9mcmVlKG9rX25hbWUpOworICAgIGVsc2UKKyAgICB7CisJLyogUmVtZW1iZXIgdGhlIG5hbWUgKi8KKwlzZXJ2ZXJOYW1lID0gb2tfbmFtZTsKKyNpZmRlZiBGRUFUX1RJVExFCisJbmVlZF9tYWtldGl0bGUgPSBUUlVFOwkvKiB1cGRhdGUgVmltIHdpbmRvdyB0aXRsZSBsYXRlciAqLworI2VuZGlmCisKKwkvKiBVcGRhdGUgdGhlIG1lc3NhZ2Ugd2luZG93IHRpdGxlICovCisJU2V0V2luZG93VGV4dChtZXNzYWdlX3dpbmRvdywgb2tfbmFtZSk7CisKKyNpZmRlZiBGRUFUX0VWQUwKKwkvKiBTZXQgdGhlIHNlcnZlcm5hbWUgdmFyaWFibGUgKi8KKwlzZXRfdmltX3Zhcl9zdHJpbmcoVlZfU0VORF9TRVJWRVIsIHNlcnZlck5hbWUsIC0xKTsKKyNlbmRpZgorICAgIH0KK30KKworICAgIGNoYXJfdSAqCitzZXJ2ZXJHZXRWaW1OYW1lcyh2b2lkKQoreworICAgIGdhcnJheV9UIGdhOworCisgICAgZ2FfaW5pdDIoJmdhLCAxLCAxMDApOworCisgICAgRW51bVdpbmRvd3MoZW51bVdpbmRvd3NHZXROYW1lcywgKExQQVJBTSkoJmdhKSk7CisKKyAgICByZXR1cm4gZ2EuZ2FfZGF0YTsKK30KKworICAgIGludAorc2VydmVyU2VuZFJlcGx5KG5hbWUsIHJlcGx5KQorICAgIGNoYXJfdQkqbmFtZTsJCS8qIFdoZXJlIHRvIHNlbmQuICovCisgICAgY2hhcl91CSpyZXBseTsJCS8qIFdoYXQgdG8gc2VuZC4gKi8KK3sKKyAgICBIV05ECXRhcmdldDsKKyAgICBDT1BZREFUQVNUUlVDVCBkYXRhOworICAgIGludAkJbiA9IDA7CisKKyAgICAvKiBUaGUgIm5hbWUiIGFyZ3VtZW50IGlzIGEgbWFnaWMgY29va2llIG9idGFpbmVkIGZyb20gZXhwYW5kKCI8Y2xpZW50PiIpLgorICAgICAqIEl0IHNob3VsZCBiZSBvZiB0aGUgZm9ybSAweFhYWFhYIC0gaS5lLiBhIEMgaGV4IGxpdGVyYWwsIHdoaWNoIGlzIHRoZQorICAgICAqIHZhbHVlIG9mIHRoZSBjbGllbnQncyBtZXNzYWdlIHdpbmRvdyBIV05ELgorICAgICAqLworICAgIHNzY2FuZigoY2hhciAqKW5hbWUsICIleCIsICZuKTsKKyAgICBpZiAobiA9PSAwKQorCXJldHVybiAtMTsKKworICAgIHRhcmdldCA9IChIV05EKW47CisgICAgaWYgKCFJc1dpbmRvdyh0YXJnZXQpKQorCXJldHVybiAtMTsKKworICAgIGRhdGEuZHdEYXRhID0gQ09QWURBVEFfUkVQTFk7CisgICAgZGF0YS5jYkRhdGEgPSBTVFJMRU4ocmVwbHkpICsgMTsKKyAgICBkYXRhLmxwRGF0YSA9IHJlcGx5OworCisgICAgaWYgKFNlbmRNZXNzYWdlKHRhcmdldCwgV01fQ09QWURBVEEsIChXUEFSQU0pbWVzc2FnZV93aW5kb3csCisJCQkJCQkJICAgICAoTFBBUkFNKSgmZGF0YSkpKQorCXJldHVybiAwOworCisgICAgcmV0dXJuIC0xOworfQorCisgICAgaW50CitzZXJ2ZXJTZW5kVG9WaW0obmFtZSwgY21kLCByZXN1bHQsIHB0YXJnZXQsIGFzRXhwciwgc2lsZW50KQorICAgIGNoYXJfdQkgKm5hbWU7CQkJLyogV2hlcmUgdG8gc2VuZC4gKi8KKyAgICBjaGFyX3UJICpjbWQ7CQkJLyogV2hhdCB0byBzZW5kLiAqLworICAgIGNoYXJfdQkgKipyZXN1bHQ7CQkvKiBSZXN1bHQgb2YgZXZhbCdlZCBleHByZXNzaW9uICovCisgICAgdm9pZAkgKnB0YXJnZXQ7CQkvKiBIV05EIG9mIHNlcnZlciAqLworICAgIGludAkJIGFzRXhwcjsJCS8qIEV4cHJlc3Npb24gb3Iga2V5cz8gKi8KKyAgICBpbnQJCSBzaWxlbnQ7CQkvKiBkb24ndCBjb21wbGFpbiBhYm91dCBubyBzZXJ2ZXIgKi8KK3sKKyAgICBIV05ECXRhcmdldCA9IGZpbmRTZXJ2ZXIobmFtZSk7CisgICAgQ09QWURBVEFTVFJVQ1QgZGF0YTsKKyAgICBjaGFyX3UJKnJldHZhbCA9IE5VTEw7CisgICAgaW50CQlyZXRjb2RlID0gMDsKKworICAgIGlmICh0YXJnZXQgPT0gMCkKKyAgICB7CisJaWYgKCFzaWxlbnQpCisJICAgIEVNU0cyKF8oZV9ub3NlcnZlciksIG5hbWUpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAocHRhcmdldCkKKwkqKEhXTkQgKilwdGFyZ2V0ID0gdGFyZ2V0OworCisgICAgZGF0YS5kd0RhdGEgPSBhc0V4cHIgPyBDT1BZREFUQV9FWFBSIDogQ09QWURBVEFfS0VZUzsKKyAgICBkYXRhLmNiRGF0YSA9IFNUUkxFTihjbWQpICsgMTsKKyAgICBkYXRhLmxwRGF0YSA9IGNtZDsKKworICAgIGlmIChTZW5kTWVzc2FnZSh0YXJnZXQsIFdNX0NPUFlEQVRBLCAoV1BBUkFNKW1lc3NhZ2Vfd2luZG93LAorCQkJCQkJCShMUEFSQU0pKCZkYXRhKSkgPT0gMCkKKwlyZXR1cm4gLTE7CisKKyAgICBpZiAoYXNFeHByKQorCXJldHZhbCA9IHNlcnZlckdldFJlcGx5KHRhcmdldCwgJnJldGNvZGUsIFRSVUUsIFRSVUUpOworCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorCXZpbV9mcmVlKHJldHZhbCk7CisgICAgZWxzZQorCSpyZXN1bHQgPSByZXR2YWw7IC8qIENhbGxlciBhc3N1bWVzIHJlc3BvbnNpYmlsaXR5IGZvciBmcmVlaW5nICovCisKKyAgICByZXR1cm4gcmV0Y29kZTsKK30KKworLyoKKyAqIEJyaW5nIHRoZSBzZXJ2ZXIgdG8gdGhlIGZvcmVncm91bmQuCisgKi8KKyAgICB2b2lkCitzZXJ2ZXJGb3JlZ3JvdW5kKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIEhXTkQJdGFyZ2V0ID0gZmluZFNlcnZlcihuYW1lKTsKKworICAgIGlmICh0YXJnZXQgIT0gMCkKKwlTZXRGb3JlZ3JvdW5kV2luZG93KHRhcmdldCk7Cit9CisKKy8qIFJlcGxpZXMgZnJvbSBzZXJ2ZXIgbmVlZCB0byBiZSBzdG9yZWQgdW50aWwgdGhlIGNsaWVudCBwaWNrcyB0aGVtIHVwIHZpYQorICogcmVtb3RlX3JlYWQoKS4gU28gd2UgbWFpbnRhaW4gYSBsaXN0IG9mIHNlcnZlci1pZC9yZXBseSBwYWlycy4KKyAqIE5vdGUgdGhhdCB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSByZXBsaWVzIGZyb20gb25lIHNlcnZlciBwZW5kaW5nIGlmIHRoZQorICogY2xpZW50IGlzIHNsb3cgcGlja2luZyB0aGVtIHVwLgorICogV2UganVzdCBzdG9yZSB0aGUgcmVwbGllcyBpbiBhIHNpbXBsZSBsaXN0LiBXaGVuIHdlIHJlbW92ZSBhbiBlbnRyeSwgd2UKKyAqIG1vdmUgbGlzdCBlbnRyaWVzIGRvd24gdG8gZmlsbCB0aGUgZ2FwLgorICogVGhlIHNlcnZlciBJRCBpcyBzaW1wbHkgdGhlIEhXTkQuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgSFdORAlzZXJ2ZXI7CQkvKiBzZXJ2ZXIgd2luZG93ICovCisgICAgY2hhcl91CSpyZXBseTsJCS8qIHJlcGx5IHN0cmluZyAqLworICAgIGludAkJZXhwcl9yZXN1bHQ7CS8qIDAgZm9yIFJFUExZLCAxIGZvciBSRVNVTFQgMiBmb3IgZXJyb3IgKi8KK30KK3JlcGx5X1Q7CisKK3N0YXRpYyBnYXJyYXlfVCByZXBseV9saXN0ID0gezAsIDAsIHNpemVvZihyZXBseV9UKSwgNSwgMH07CisKKyNkZWZpbmUgUkVQTFlfSVRFTShpKSAoKHJlcGx5X1QgKikocmVwbHlfbGlzdC5nYV9kYXRhKSArIChpKSkKKyNkZWZpbmUgUkVQTFlfQ09VTlQgKHJlcGx5X2xpc3QuZ2FfbGVuKQorI2RlZmluZSBSRVBMWV9ST09NIChyZXBseV9saXN0LmdhX3Jvb20pCisKKy8qIEZsYWcgd2hpY2ggaXMgdXNlZCB0byB3YWl0IGZvciBhIHJlcGx5ICovCitzdGF0aWMgaW50IHJlcGx5X3JlY2VpdmVkID0gMDsKKworICAgIHN0YXRpYyBpbnQKK3NhdmVfcmVwbHkoSFdORCBzZXJ2ZXIsIGNoYXJfdSAqcmVwbHksIGludCBleHByKQoreworICAgIHJlcGx5X1QgKnJlcDsKKworICAgIGlmIChnYV9ncm93KCZyZXBseV9saXN0LCAxKSA9PSBGQUlMKQorCXJldHVybiBGQUlMOworCisgICAgcmVwID0gUkVQTFlfSVRFTShSRVBMWV9DT1VOVCk7CisgICAgcmVwLT5zZXJ2ZXIgPSBzZXJ2ZXI7CisgICAgcmVwLT5yZXBseSA9IHZpbV9zdHJzYXZlKHJlcGx5KTsKKyAgICByZXAtPmV4cHJfcmVzdWx0ID0gZXhwcjsKKyAgICBpZiAocmVwLT5yZXBseSA9PSBOVUxMKQorCXJldHVybiBGQUlMOworCisgICAgKytSRVBMWV9DT1VOVDsKKyAgICAtLVJFUExZX1JPT007CisgICAgcmVwbHlfcmVjZWl2ZWQgPSAxOworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIEdldCBhIHJlcGx5IGZyb20gc2VydmVyICJzZXJ2ZXIiLgorICogV2hlbiAiZXhwcl9yZXMiIGlzIG5vbiBOVUxMLCBnZXQgdGhlIHJlc3VsdCBvZiBhbiBleHByZXNzaW9uLCBvdGhlcndpc2UgYQorICogc2VydmVyMmNsaWVudCgpIG1lc3NhZ2UuCisgKiBXaGVuIG5vbiBOVUxMLCBwb2ludCB0byByZXR1cm4gY29kZS4gMCA9PiBPSywgLTEgPT4gRVJST1IKKyAqIElmICJyZW1vdmUiIGlzIFRSVUUsIGNvbnN1bWUgdGhlIG1lc3NhZ2UsIHRoZSBjYWxsZXIgbXVzdCBmcmVlIGl0IHRoZW4uCisgKiBpZiAid2FpdCIgaXMgVFJVRSBibG9jayB1bnRpbCBhIG1lc3NhZ2UgYXJyaXZlcyAob3IgdGhlIHNlcnZlciBleGl0cykuCisgKi8KKyAgICBjaGFyX3UgKgorc2VydmVyR2V0UmVwbHkoSFdORCBzZXJ2ZXIsIGludCAqZXhwcl9yZXMsIGludCByZW1vdmUsIGludCB3YWl0KQoreworICAgIGludAkJaTsKKyAgICBjaGFyX3UJKnJlcGx5OworICAgIHJlcGx5X1QJKnJlcDsKKworICAgIC8qIFdoZW4gd2FpdGluZywgbG9vcCB1bnRpbCB0aGUgbWVzc2FnZSB3YWl0aW5nIGZvciBpcyByZWNlaXZlZC4gKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwkvKiBSZXNldCB0aGlzIGhlcmUsIGluIGNhc2UgYSBtZXNzYWdlIGFycml2ZXMgd2hpbGUgd2UgYXJlIGdvaW5nCisJICogdGhyb3VnaCB0aGUgYWxyZWFkeSByZWNlaXZlZCBtZXNzYWdlcy4gKi8KKwlyZXBseV9yZWNlaXZlZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgUkVQTFlfQ09VTlQ7ICsraSkKKwl7CisJICAgIHJlcCA9IFJFUExZX0lURU0oaSk7CisJICAgIGlmIChyZXAtPnNlcnZlciA9PSBzZXJ2ZXIKKwkJICAgICYmICgocmVwLT5leHByX3Jlc3VsdCAhPSAwKSA9PSAoZXhwcl9yZXMgIT0gTlVMTCkpKQorCSAgICB7CisJCS8qIFNhdmUgdGhlIHZhbHVlcyB3ZSd2ZSBmb3VuZCBmb3IgbGF0ZXIgKi8KKwkJcmVwbHkgPSByZXAtPnJlcGx5OworCQlpZiAoZXhwcl9yZXMgIT0gTlVMTCkKKwkJICAgICpleHByX3JlcyA9IHJlcC0+ZXhwcl9yZXN1bHQgPT0gMSA/IDAgOiAtMTsKKworCQlpZiAocmVtb3ZlKQorCQl7CisJCSAgICAvKiBNb3ZlIHRoZSByZXN0IG9mIHRoZSBsaXN0IGRvd24gdG8gZmlsbCB0aGUgZ2FwICovCisJCSAgICBtY2hfbWVtbW92ZShyZXAsIHJlcCArIDEsCisJCQkJICAgICAoUkVQTFlfQ09VTlQgLSBpIC0gMSkgKiBzaXplb2YocmVwbHlfVCkpOworCQkgICAgLS1SRVBMWV9DT1VOVDsKKwkJICAgICsrUkVQTFlfUk9PTTsKKwkJfQorCisJCS8qIFJldHVybiB0aGUgcmVwbHkgdG8gdGhlIGNhbGxlciwgd2hvIHRha2VzIG9uIHJlc3BvbnNpYmlsaXR5CisJCSAqIGZvciBmcmVlaW5nIGl0IGlmICJyZW1vdmUiIGlzIFRSVUUuICovCisJCXJldHVybiByZXBseTsKKwkgICAgfQorCX0KKworCS8qIElmIHdlIGdvdCBoZXJlLCB3ZSBkaWRuJ3QgZmluZCBhIHJlcGx5LiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhlCisJICogIndhaXQiIHBhcmFtZXRlciBpc24ndCBzZXQuICAqLworCWlmICghd2FpdCkKKwkgICAgYnJlYWs7CisKKwkvKiBXZSBuZWVkIHRvIHdhaXQgZm9yIGEgcmVwbHkuIEVudGVyIGEgbWVzc2FnZSBsb29wIHVudGlsIHRoZQorCSAqICJyZXBseV9yZWNlaXZlZCIgZmxhZyBnZXRzIHNldC4gKi8KKworCS8qIExvb3AgdW50aWwgd2UgcmVjZWl2ZSBhIHJlcGx5ICovCisJd2hpbGUgKHJlcGx5X3JlY2VpdmVkID09IDApCisJeworCSAgICAvKiBXYWl0IGZvciBhIFNlbmRNZXNzYWdlKCkgY2FsbCB0byB1cy4gIFRoaXMgY291bGQgYmUgdGhlIHJlcGx5CisJICAgICAqIHdlIGFyZSB3YWl0aW5nIGZvci4gIFVzZSBhIHRpbWVvdXQgb2YgYSBzZWNvbmQsIHRvIGNhdGNoIHRoZQorCSAgICAgKiBzaXR1YXRpb24gdGhhdCB0aGUgc2VydmVyIGRpZWQgdW5leHBlY3RlZGx5LiAqLworCSAgICBNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKDAsIE5VTEwsIFRSVUUsIDEwMDAsIFFTX0FMTElOUFVUKTsKKworCSAgICAvKiBJZiB0aGUgc2VydmVyIGhhcyBkaWVkLCBnaXZlIHVwICovCisJICAgIGlmICghSXNXaW5kb3coc2VydmVyKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkgICAgc2VydmVyUHJvY2Vzc1BlbmRpbmdNZXNzYWdlcygpOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFByb2Nlc3MgYW55IG1lc3NhZ2VzIGluIHRoZSBXaW5kb3dzIG1lc3NhZ2UgcXVldWUuCisgKi8KKyAgICB2b2lkCitzZXJ2ZXJQcm9jZXNzUGVuZGluZ01lc3NhZ2VzKHZvaWQpCit7CisgICAgTVNHIG1zZzsKKworICAgIHdoaWxlIChQZWVrTWVzc2FnZSgmbXNnLCBOVUxMLCAwLCAwLCBQTV9SRU1PVkUpKQorICAgIHsKKwlUcmFuc2xhdGVNZXNzYWdlKCZtc2cpOworCURpc3BhdGNoTWVzc2FnZSgmbXNnKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBGRUFUX0NMSUVOVFNFUlZFUiAqLworCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgKGRlZmluZWQoRkVBVF9QUklOVEVSKSAmJiAhZGVmaW5lZChGRUFUX1BPU1RTQ1JJUFQpKSBcCisJfHwgZGVmaW5lZChQUk9UTykKKworc3RydWN0IGNoYXJzZXRfcGFpcgoreworICAgIGNoYXIJKm5hbWU7CisgICAgQllURQljaGFyc2V0OworfTsKKworc3RhdGljIHN0cnVjdCBjaGFyc2V0X3BhaXIKK2NoYXJzZXRfcGFpcnNbXSA9Cit7CisgICAgeyJBTlNJIiwJCUFOU0lfQ0hBUlNFVH0sCisgICAgeyJDSElORVNFQklHNSIsCUNISU5FU0VCSUc1X0NIQVJTRVR9LAorICAgIHsiREVGQVVMVCIsCQlERUZBVUxUX0NIQVJTRVR9LAorICAgIHsiSEFOR0VVTCIsCQlIQU5HRVVMX0NIQVJTRVR9LAorICAgIHsiT0VNIiwJCU9FTV9DSEFSU0VUfSwKKyAgICB7IlNISUZUSklTIiwJU0hJRlRKSVNfQ0hBUlNFVH0sCisgICAgeyJTWU1CT0wiLAkJU1lNQk9MX0NIQVJTRVR9LAorI2lmZGVmIFdJTjMyNjQKKyAgICB7IkFSQUJJQyIsCQlBUkFCSUNfQ0hBUlNFVH0sCisgICAgeyJCQUxUSUMiLAkJQkFMVElDX0NIQVJTRVR9LAorICAgIHsiRUFTVEVVUk9QRSIsCUVBU1RFVVJPUEVfQ0hBUlNFVH0sCisgICAgeyJHQjIzMTIiLAkJR0IyMzEyX0NIQVJTRVR9LAorICAgIHsiR1JFRUsiLAkJR1JFRUtfQ0hBUlNFVH0sCisgICAgeyJIRUJSRVciLAkJSEVCUkVXX0NIQVJTRVR9LAorICAgIHsiSk9IQUIiLAkJSk9IQUJfQ0hBUlNFVH0sCisgICAgeyJNQUMiLAkJTUFDX0NIQVJTRVR9LAorICAgIHsiUlVTU0lBTiIsCQlSVVNTSUFOX0NIQVJTRVR9LAorICAgIHsiVEhBSSIsCQlUSEFJX0NIQVJTRVR9LAorICAgIHsiVFVSS0lTSCIsCQlUVVJLSVNIX0NIQVJTRVR9LAorIyBpZiAoIWRlZmluZWQoX01TQ19WRVIpIHx8IChfTVNDX1ZFUiA+IDEwMTApKSBcCisJJiYgKCFkZWZpbmVkKF9fQk9STEFORENfXykgfHwgKF9fQk9STEFORENfXyA+IDB4MDUwMCkpCisgICAgeyJWSUVUTkFNRVNFIiwJVklFVE5BTUVTRV9DSEFSU0VUfSwKKyMgZW5kaWYKKyNlbmRpZgorICAgIHtOVUxMLAkJMH0KK307CisKKy8qCisgKiBDb252ZXJ0IGEgY2hhcnNldCBJRCB0byBhIG5hbWUuCisgKiBSZXR1cm4gTlVMTCB3aGVuIG5vdCByZWNvZ25pemVkLgorICovCisgICAgY2hhciAqCitjaGFyc2V0X2lkMm5hbWUoaW50IGlkKQoreworICAgIHN0cnVjdCBjaGFyc2V0X3BhaXIgKmNwOworCisgICAgZm9yIChjcCA9IGNoYXJzZXRfcGFpcnM7IGNwLT5uYW1lICE9IE5VTEw7ICsrY3ApCisJaWYgKChCWVRFKWlkID09IGNwLT5jaGFyc2V0KQorCSAgICBicmVhazsKKyAgICByZXR1cm4gY3AtPm5hbWU7Cit9CisKK3N0YXRpYyBjb25zdCBMT0dGT05UIHNfbGZEZWZhdWx0ID0KK3sKKyAgICAtMTIsIDAsIDAsIDAsIEZXX05PUk1BTCwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgREVGQVVMVF9DSEFSU0VULAorICAgIE9VVF9ERUZBVUxUX1BSRUNJUywgQ0xJUF9ERUZBVUxUX1BSRUNJUywKKyAgICBQUk9PRl9RVUFMSVRZLCBGSVhFRF9QSVRDSCB8IEZGX0RPTlRDQVJFLAorICAgICJGaXhlZHN5cyIJLyogc2VlIF9SZWFkVmltSW5pICovCit9OworCisvKiBJbml0aWFsaXNlIHRoZSAiY3VycmVudCBoZWlnaHQiIHRvIC0xMiAoc2FtZSBhcyBzX2xmRGVmYXVsdCkganVzdAorICogaW4gY2FzZSB0aGUgdXNlciBzcGVjaWZpZXMgYSBmb250IGluICJndWlmb250IiB3aXRoIG5vIHNpemUgYmVmb3JlIGEgZm9udAorICogd2l0aCBhbiBleHBsaWNpdCBzaXplIGhhcyBiZWVuIHNldC4gVGhpcyBkZWZhdWx0cyB0aGUgc2l6ZSB0byB0aGlzIHZhbHVlCisgKiAoLTEyIGVxdWF0ZXMgdG8gcm91Z2hseSA5cHQpLgorICovCitpbnQgY3VycmVudF9mb250X2hlaWdodCA9IC0xMjsJCS8qIGFsc28gdXNlZCBpbiBndWlfdzQ4LmMgKi8KKworLyogQ29udmVydCBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBwb2ludCBzaXplIGludG8gcGl4ZWxzLiBUaGUgc3RyaW5nIHNob3VsZAorICogYmUgYSBwb3NpdGl2ZSBkZWNpbWFsIG51bWJlciwgd2l0aCBhbiBvcHRpb25hbCBkZWNpbWFsIHBvaW50IChlZywgIjEyIiwgb3IKKyAqICIxMC41IikuIFRoZSBwaXhlbCB2YWx1ZSBpcyByZXR1cm5lZCwgYW5kIGEgcG9pbnRlciB0byB0aGUgbmV4dCB1bmNvbnZlcnRlZAorICogY2hhcmFjdGVyIGlzIHN0b3JlZCBpbiAqZW5kLiBUaGUgZmxhZyAidmVydGljYWwiIHNheXMgd2hldGhlciB0aGlzCisgKiBjYWxjdWxhdGlvbiBpcyBmb3IgYSB2ZXJ0aWNhbCAoaGVpZ2h0KSBzaXplIG9yIGEgaG9yaXpvbnRhbCAod2lkdGgpIG9uZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK3BvaW50c190b19waXhlbHMoY2hhcl91ICpzdHIsIGNoYXJfdSAqKmVuZCwgaW50IHZlcnRpY2FsLCBpbnQgcHByaW50ZXJfZGMpCit7CisgICAgaW50CQlwaXhlbHM7CisgICAgaW50CQlwb2ludHMgPSAwOworICAgIGludAkJZGl2aXNvciA9IDA7CisgICAgSFdORAlod25kID0gKEhXTkQpMDsKKyAgICBIREMJCWhkYzsKKyAgICBIREMJCXByaW50ZXJfZGMgPSAoSERDKXBwcmludGVyX2RjOworCisgICAgd2hpbGUgKCpzdHIgIT0gTlVMKQorICAgIHsKKwlpZiAoKnN0ciA9PSAnLicgJiYgZGl2aXNvciA9PSAwKQorCXsKKwkgICAgLyogU3RhcnQga2VlcGluZyBhIGRpdmlzb3IsIGZvciBsYXRlciAqLworCSAgICBkaXZpc29yID0gMTsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKCFWSU1fSVNESUdJVCgqc3RyKSkKKwkJYnJlYWs7CisKKwkgICAgcG9pbnRzICo9IDEwOworCSAgICBwb2ludHMgKz0gKnN0ciAtICcwJzsKKwkgICAgZGl2aXNvciAqPSAxMDsKKwl9CisJKytzdHI7CisgICAgfQorCisgICAgaWYgKGRpdmlzb3IgPT0gMCkKKwlkaXZpc29yID0gMTsKKworICAgIGlmIChwcmludGVyX2RjID09IE5VTEwpCisgICAgeworCWh3bmQgPSBHZXREZXNrdG9wV2luZG93KCk7CisJaGRjID0gR2V0V2luZG93REMoaHduZCk7CisgICAgfQorICAgIGVsc2UKKwloZGMgPSBwcmludGVyX2RjOworCisgICAgcGl4ZWxzID0gTXVsRGl2KHBvaW50cywKKwkJICAgIEdldERldmljZUNhcHMoaGRjLCB2ZXJ0aWNhbCA/IExPR1BJWEVMU1kgOiBMT0dQSVhFTFNYKSwKKwkJICAgIDcyICogZGl2aXNvcik7CisKKyAgICBpZiAocHJpbnRlcl9kYyA9PSBOVUxMKQorCVJlbGVhc2VEQyhod25kLCBoZGMpOworCisgICAgKmVuZCA9IHN0cjsKKyAgICByZXR1cm4gcGl4ZWxzOworfQorCisgICAgc3RhdGljIGludCBDQUxMQkFDSworZm9udF9lbnVtcHJvYygKKyAgICBFTlVNTE9HRk9OVAkgICAgKmVsZiwKKyAgICBORVdURVhUTUVUUklDICAgKm50bSwKKyAgICBpbnQJCSAgICB0eXBlLAorICAgIExQQVJBTQkgICAgbHBhcmFtKQoreworICAgIC8qIFJldHVybiB2YWx1ZToKKyAgICAgKgkgIDAgPSB0ZXJtaW5hdGUgbm93IChtb25vc3BhY2UgJiBBTlNJKQorICAgICAqCSAgMSA9IGNvbnRpbnVlLCBzdGlsbCBubyBsdWNrLi4uCisgICAgICoJICAyID0gY29udGludWUsIGJ1dCB3ZSBoYXZlIGFuIGFjY2VwdGFibGUgTE9HRk9OVAorICAgICAqCSAgICAgIChtb25vc3BhY2UsIG5vdCBBTlNJKQorICAgICAqIFdlIHVzZSB0aGVzZSB2YWx1ZXMsIGFzIEVudW1Gb250RmFtaWxpZXMgcmV0dXJucyAxIGlmIHRoZQorICAgICAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZC4gU28sIHdlIGNoZWNrIHRoZSByZXR1cm4gYXMKKyAgICAgKiAwID0gcGVyZmVjdCwgMiA9IE9LLCAxID0gbm8gZ29vZC4uLgorICAgICAqIEl0J3Mgbm90IHByZXR0eSwgYnV0IGl0IHdvcmtzIQorICAgICAqLworCisgICAgTE9HRk9OVCAqbGYgPSAoTE9HRk9OVCAqKShscGFyYW0pOworCisjaWZuZGVmIEZFQVRfUFJPUE9SVElPTkFMX0ZPTlRTCisgICAgLyogSWdub3JlIG5vbi1tb25vc3BhY2UgZm9udHMgd2l0aG91dCBmdXJ0aGVyIGFkbyAqLworICAgIGlmICgobnRtLT50bVBpdGNoQW5kRmFtaWx5ICYgMSkgIT0gMCkKKwlyZXR1cm4gMTsKKyNlbmRpZgorCisgICAgLyogUmVtZW1iZXIgdGhpcyBMT0dGT05UIGFzIGEgInBvc3NpYmxlIiAqLworICAgICpsZiA9IGVsZi0+ZWxmTG9nRm9udDsKKworICAgIC8qIFRlcm1pbmF0ZSB0aGUgc2NhbiBhcyBzb29uIGFzIHdlIGZpbmQgYW4gQU5TSSBmb250ICovCisgICAgaWYgKGxmLT5sZkNoYXJTZXQgPT0gQU5TSV9DSEFSU0VUCisJICAgIHx8IGxmLT5sZkNoYXJTZXQgPT0gT0VNX0NIQVJTRVQKKwkgICAgfHwgbGYtPmxmQ2hhclNldCA9PSBERUZBVUxUX0NIQVJTRVQpCisJcmV0dXJuIDA7CisKKyAgICAvKiBDb250aW51ZSB0aGUgc2NhbiAtIHdlIGhhdmUgYSBub24tQU5TSSBmb250ICovCisgICAgcmV0dXJuIDI7Cit9CisKKyAgICBzdGF0aWMgaW50Citpbml0X2xvZ2ZvbnQoTE9HRk9OVCAqbGYpCit7CisgICAgaW50CQluOworICAgIEhXTkQJaHduZCA9IEdldERlc2t0b3BXaW5kb3coKTsKKyAgICBIREMJCWhkYyA9IEdldFdpbmRvd0RDKGh3bmQpOworCisgICAgbiA9IEVudW1Gb250RmFtaWxpZXMoaGRjLAorCQkJIChMUENTVFIpbGYtPmxmRmFjZU5hbWUsCisJCQkgKEZPTlRFTlVNUFJPQylmb250X2VudW1wcm9jLAorCQkJIChMUEFSQU0pbGYpOworCisgICAgUmVsZWFzZURDKGh3bmQsIGhkYyk7CisKKyAgICAvKiBJZiB3ZSBjb3VsZG4ndCBmaW5kIGEgdXNlYWJsZSBmb250LCByZXR1cm4gZmFpbHVyZSAqLworICAgIGlmIChuID09IDEpCisJcmV0dXJuIEZBSUw7CisKKyAgICAvKiBUaWR5IHVwIHRoZSByZXN0IG9mIHRoZSBMT0dGT05UIHN0cnVjdHVyZS4gV2Ugc2V0IHRvIGEgYmFzaWMKKyAgICAgKiBmb250IC0gZ2V0X2xvZ2ZvbnQoKSBzZXRzIGJvbGQsIGl0YWxpYywgZXRjIGJhc2VkIG9uIHRoZSB1c2VyJ3MKKyAgICAgKiBpbnB1dC4KKyAgICAgKi8KKyAgICBsZi0+bGZIZWlnaHQgPSBjdXJyZW50X2ZvbnRfaGVpZ2h0OworICAgIGxmLT5sZldpZHRoID0gMDsKKyAgICBsZi0+bGZJdGFsaWMgPSBGQUxTRTsKKyAgICBsZi0+bGZVbmRlcmxpbmUgPSBGQUxTRTsKKyAgICBsZi0+bGZTdHJpa2VPdXQgPSBGQUxTRTsKKyAgICBsZi0+bGZXZWlnaHQgPSBGV19OT1JNQUw7CisKKyAgICAvKiBSZXR1cm4gc3VjY2VzcyAqLworICAgIHJldHVybiBPSzsKK30KKworICAgIGludAorZ2V0X2xvZ2ZvbnQoCisgICAgTE9HRk9OVCAqbGYsCisgICAgY2hhcl91ICAqbmFtZSwKKyAgICBIREMgcHJpbnRlcl9kYykKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpOworICAgIHN0YXRpYyBMT0dGT05UICpsYXN0bGYgPSBOVUxMOworCisgICAgKmxmID0gc19sZkRlZmF1bHQ7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkKKwlyZXR1cm4gMTsKKworICAgIGlmIChTVFJDTVAobmFtZSwgIioiKSA9PSAwKQorICAgIHsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX1czMikKKwlDSE9PU0VGT05UCWNmOworCS8qIGlmIG5hbWUgaXMgIioiLCBicmluZyB1cCBzdGQgZm9udCBkaWFsb2c6ICovCisJbWVtc2V0KCZjZiwgMCwgc2l6ZW9mKGNmKSk7CisJY2YubFN0cnVjdFNpemUgPSBzaXplb2YoY2YpOworCWNmLmh3bmRPd25lciA9IHNfaHduZDsKKwljZi5GbGFncyA9IENGX1NDUkVFTkZPTlRTIHwgQ0ZfRklYRURQSVRDSE9OTFkgfCBDRl9JTklUVE9MT0dGT05UU1RSVUNUOworCWlmIChsYXN0bGYgIT0gTlVMTCkKKwkgICAgKmxmID0gKmxhc3RsZjsKKwljZi5scExvZ0ZvbnQgPSBsZjsKKwljZi5uRm9udFR5cGUgPSAwIDsgLy9SRUdVTEFSX0ZPTlRUWVBFOworCWlmIChDaG9vc2VGb250KCZjZikpCisJICAgIGdvdG8gdGhlZW5kOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorICAgIH0KKworICAgIC8qCisgICAgICogU3BsaXQgbmFtZSB1cCwgaXQgY291bGQgYmUgPG5hbWU+Omg8aGVpZ2h0Pjp3PHdpZHRoPiBldGMuCisgICAgICovCisgICAgZm9yIChwID0gbmFtZTsgKnAgJiYgKnAgIT0gJzonOyBwKyspCisgICAgeworCWlmIChwIC0gbmFtZSArIDEgPiBMRl9GQUNFU0laRSkKKwkgICAgcmV0dXJuIDA7CQkJLyogTmFtZSB0b28gbG9uZyAqLworCWxmLT5sZkZhY2VOYW1lW3AgLSBuYW1lXSA9ICpwOworICAgIH0KKyAgICBpZiAocCAhPSBuYW1lKQorCWxmLT5sZkZhY2VOYW1lW3AgLSBuYW1lXSA9IE5VTDsKKworICAgIC8qIEZpcnN0IHNldCBkZWZhdWx0cyAqLworICAgIGxmLT5sZkhlaWdodCA9IC0xMjsKKyAgICBsZi0+bGZXaWR0aCA9IDA7CisgICAgbGYtPmxmV2VpZ2h0ID0gRldfTk9STUFMOworICAgIGxmLT5sZkl0YWxpYyA9IEZBTFNFOworICAgIGxmLT5sZlVuZGVybGluZSA9IEZBTFNFOworICAgIGxmLT5sZlN0cmlrZU91dCA9IEZBTFNFOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgZm9udCBjYW4ndCBiZSBmb3VuZCwgdHJ5IHJlcGxhY2luZyAnXycgYnkgJyAnLgorICAgICAqLworICAgIGlmIChpbml0X2xvZ2ZvbnQobGYpID09IEZBSUwpCisgICAgeworCWludAlkaWRfcmVwbGFjZSA9IEZBTFNFOworCisJZm9yIChpID0gMDsgbGYtPmxmRmFjZU5hbWVbaV07ICsraSkKKwkgICAgaWYgKGxmLT5sZkZhY2VOYW1lW2ldID09ICdfJykKKwkgICAgeworCQlsZi0+bGZGYWNlTmFtZVtpXSA9ICcgJzsKKwkJZGlkX3JlcGxhY2UgPSBUUlVFOworCSAgICB9CisJaWYgKCFkaWRfcmVwbGFjZSB8fCBpbml0X2xvZ2ZvbnQobGYpID09IEZBSUwpCisJICAgIHJldHVybiAwOworICAgIH0KKworICAgIHdoaWxlICgqcCA9PSAnOicpCisJcCsrOworCisgICAgLyogU2V0IHRoZSB2YWx1ZXMgZm91bmQgYWZ0ZXIgJzonICovCisgICAgd2hpbGUgKCpwKQorICAgIHsKKwlzd2l0Y2ggKCpwKyspCisJeworCSAgICBjYXNlICdoJzoKKwkJbGYtPmxmSGVpZ2h0ID0gLSBwb2ludHNfdG9fcGl4ZWxzKHAsICZwLCBUUlVFLCAoaW50KXByaW50ZXJfZGMpOworCQlicmVhazsKKwkgICAgY2FzZSAndyc6CisJCWxmLT5sZldpZHRoID0gcG9pbnRzX3RvX3BpeGVscyhwLCAmcCwgRkFMU0UsIChpbnQpcHJpbnRlcl9kYyk7CisJCWJyZWFrOworCSAgICBjYXNlICdiJzoKKyNpZm5kZWYgTVNXSU4xNl9GQVNUVEVYVAorCQlsZi0+bGZXZWlnaHQgPSBGV19CT0xEOworI2VuZGlmCisJCWJyZWFrOworCSAgICBjYXNlICdpJzoKKyNpZm5kZWYgTVNXSU4xNl9GQVNUVEVYVAorCQlsZi0+bGZJdGFsaWMgPSBUUlVFOworI2VuZGlmCisJCWJyZWFrOworCSAgICBjYXNlICd1JzoKKwkJbGYtPmxmVW5kZXJsaW5lID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3MnOgorCQlsZi0+bGZTdHJpa2VPdXQgPSBUUlVFOworCQlicmVhazsKKwkgICAgY2FzZSAnYyc6CisJCXsKKwkJICAgIHN0cnVjdCBjaGFyc2V0X3BhaXIgKmNwOworCisJCSAgICBmb3IgKGNwID0gY2hhcnNldF9wYWlyczsgY3AtPm5hbWUgIT0gTlVMTDsgKytjcCkKKwkJCWlmIChTVFJOQ01QKHAsIGNwLT5uYW1lLCBzdHJsZW4oY3AtPm5hbWUpKSA9PSAwKQorCQkJeworCQkJICAgIGxmLT5sZkNoYXJTZXQgPSBjcC0+Y2hhcnNldDsKKwkJCSAgICBwICs9IHN0cmxlbihjcC0+bmFtZSk7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICBpZiAoY3AtPm5hbWUgPT0gTlVMTCkKKwkJICAgIHsKKwkJCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIkUyNDQ6IElsbGVnYWwgY2hhcnNldCBuYW1lIFwiJXNcIiBpbiBmb250IG5hbWUgXCIlc1wiIiksIHAsIG5hbWUpOworCQkJRU1TRyhJT2J1ZmYpOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCSAgICBkZWZhdWx0OgorCQlzcHJpbnRmKChjaGFyICopSU9idWZmLAorCQkJXygiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIpLAorCQkJcFstMV0sIG5hbWUpOworCQlFTVNHKElPYnVmZik7CisJCWJyZWFrOworCX0KKwl3aGlsZSAoKnAgPT0gJzonKQorCSAgICBwKys7CisgICAgfQorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpCit0aGVlbmQ6CisjZW5kaWYKKyAgICAvKiByb246IGluaXQgbGFzdGxmICovCisgICAgaWYgKHByaW50ZXJfZGMgPT0gTlVMTCkKKyAgICB7CisJdmltX2ZyZWUobGFzdGxmKTsKKwlsYXN0bGYgPSAoTE9HRk9OVCAqKWFsbG9jKHNpemVvZihMT0dGT05UKSk7CisJaWYgKGxhc3RsZiAhPSBOVUxMKQorCSAgICBtY2hfbWVtbW92ZShsYXN0bGYsIGxmLCBzaXplb2YoTE9HRk9OVCkpOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCisjZW5kaWYgLyogZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChGRUFUX1BSSU5URVIpICovCmRpZmYgLS1naXQgYS9zcmMvb3Nfb3MyX2NmZy5oIGIvc3JjL29zX29zMl9jZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNiNGJiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX29zMl9jZmcuaApAQCAtMCwwICsxLDI1MSBAQAorLyogb3Nfb3MyX2NmZy5oICovCisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OiAqLworCisjZGVmaW5lIENBU0VfSU5TRU5TSVRJVkVfRklMRU5BTUUgICAvKiBpZ25vcmUgY2FzZSB3aGVuIGNvbXBhcmluZyBmaWxlIG5hbWVzICovCisjZGVmaW5lIFNQQUNFX0lOX0ZJTEVOQU1FCisjZGVmaW5lIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorI2RlZmluZSBCSU5BUllfRklMRV9JTworI2RlZmluZSBVU0VfQ1JOTAkJLyogbGluZXMgZW5kIGluIENSLU5MIGluc3RlYWQgb2YgTkwgKi8KKyNkZWZpbmUgTk9fRVhQQU5EUEFUSAkJLyogYWx3YXlzIGNhbGwgbWNoX2V4cGFuZF93aWxkY2FyZHMgKi8KKyNkZWZpbmUgVVNFX0VYRV9OQU1FCQkvKiB1c2UgYXJndlswXSBmb3IgJFZJTSAqLworI2RlZmluZSBVU0VfVEVSTV9DT05TT0xFCisjZGVmaW5lIEhBVkVfRFVQCQkvKiBoYXZlIGR1cCgpICovCisKKyNkZWZpbmUgRk5BTUVfSUxMRUdBTCAiXCIqPz48fCIgLyogaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGEgZmlsZSBuYW1lICovCisKKy8qCisgKiBUaGUgcmVzdCBpcyBtYW51YWxseSBnZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuaW4gYnkgUGF1bCBTbG9vdG1hbi4KKyAqLworCisvKiBEZWZpbmUgdW5sZXNzIG5vIFggc3VwcG9ydCBmb3VuZCAqLworI3VuZGVmIEhBVkVfWDExCisKKy8qIERlZmluZSB3aGVuIHRlcm1pbmZvIHN1cHBvcnQgZm91bmQgKi8KKyN1bmRlZiBURVJNSU5GTworCisvKiBEZWZpbmUgd2hlbiB0ZXJtY2FwLmggY29udGFpbnMgb3NwZWVkICovCisjZGVmaW5lIEhBVkVfT1NQRUVECTEKKworI2RlZmluZSBIQVZFX1NUUklDTVAKKyNkZWZpbmUgSEFWRV9TVFJOSUNNUAorCisvKiBEZWZpbmUgd2hlbiBvc3BlZWQgY2FuIGJlIGV4dGVybiAqLworI2RlZmluZSBPU1BFRURfRVhURVJOCisKKy8qIERlZmluZSB3aGVuIHRlcm1jYXAuaCBjb250YWlucyBVUCwgQkMgYW5kIFBDICovCisjZGVmaW5lIEhBVkVfVVBfQkNfUEMJMQorCisvKiBEZWZpbmUgd2hlbiBVUCwgQkMgYW5kIFBDIGNhbiBiZSBleHRlcm4gKi8KKyNkZWZpbmUgVVBfQkNfUENfRVhURVJOCisKKy8qIERlZmluZSB3aGVuIHRlcm1jYXAuaCBkZWZpbmVzIG91dGZ1bnR5cGUgKi8KKyN1bmRlZiBIQVZFX09VVEZVTlRZUEUKKworLyogRGVmaW5lIHdoZW4gX19EQVRFX18gIiAiIF9fVElNRV9fIGNhbiBiZSB1c2VkICovCisjZGVmaW5lIEhBVkVfREFURV9USU1FCTEKKworI3VuZGVmIFVOSVgJLyogZGVmaW5lIGFsd2F5cyBieSBjdXJyZW50IGNvbmZpZ3VyZSBzY3JpcHQgKi8KKworLyogRGVmaW5lZCB0byB0aGUgc2l6ZSBvZiBhbiBpbnQgKi8KKyNkZWZpbmUgU0laRU9GX0lOVCA0CisKKy8qCisgKiBJZiB3ZSBjYW5ub3QgdHJ1c3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgbGlicmFyaWVzLCB3ZSB1c2Ugb3VyCisgKiBvd24gc2FmZSBidXQgcHJvYmFibHkgc2xvd2VyIG1jaF9tZW1tb3ZlKCkuCisgKi8KKyNkZWZpbmUgVVNFQkNPUFkJMQorI3VuZGVmIFVTRU1FTU1PVkUKKyN1bmRlZiBVU0VNRU1DUFkKKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIHRoZSBrZXl3b3JkIGRvZXMgbm90IHdvcmsuICAqLworI3VuZGVmIGNvbnN0CisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAgKi8KKyN1bmRlZiBtb2RlX3QKKworLyogRGVmaW5lIHRvIGBsb25nJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAgKi8KKyN1bmRlZiBvZmZfdAorCisvKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICAqLworI3VuZGVmIHBpZF90CisKKy8qIERlZmluZSB0byBgdW5zaWduZWQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICAqLworI3VuZGVmIHNpemVfdAorCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gICovCisjdW5kZWYgdWlkX3QKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICAqLworI3VuZGVmIGdpZF90CisKKy8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gICovCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRQkxCisKKy8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8c3lzL3NlbGVjdC5oPi4gICovCisjZGVmaW5lIFNZU19TRUxFQ1RfV0lUSF9TWVNfVElNRQkxCisKKy8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkuCSovCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorCisvKiBEZWZpbmUgYXMgdGhlIGNvbW1hbmQgYXQgdGhlIGVuZCBvZiBzaWduYWwgaGFuZGxlcnMgKCIiIG9yICJyZXR1cm4gMDsiKS4gICovCisjZGVmaW5lIFNJR1JFVFVSTgorCisvKiBEZWZpbmUgaWYgdG91dXBlci90b2xvd2VyIG9ubHkgd29yayBvbiBsb3dlci91cGVyY2FzZSBjaGFyYWN0ZXJzICovCisjdW5kZWYgQlJPS0VOX1RPVVBQRVIKKworLyogRGVmaW5lIGlmIHRnZXRzdHIoKSBoYXMgYSBzZWNvbmQgYXJndW1lbnQgdGhhdCBpcyAoY2hhciAqKSAqLworI3VuZGVmIFRHRVRTVFJfQ0hBUl9QCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2lnc2V0KCkgZnVuY3Rpb24uICAqLworI3VuZGVmIEhBVkVfU0lHU0VUCisKKy8qIERlZmluZSBpZiB0aGUgZ2V0Y3dkKCkgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkLgkqLworI3VuZGVmIEJBRF9HRVRDV0QKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRjd2QoKSBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfR0VUQ1dECTEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXR3ZCgpIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9HRVRXRAkxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2VsZWN0KCkgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX1NFTEVDVAkxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyY3NwbigpIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TVFJDU1BOCTEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJ0b2woKSBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU1RSVE9MCTEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0Z2V0ZW50KCkgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX1RHRVRFTlQJMQorCisjZGVmaW5lIEhBVkVfU1RSRlRJTUUJICAgIC8qIGd1ZXNzZWQgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBtZW1zZXQoKSBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfTUVNU0VUCTEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJlcnJvcigpIGZ1bmN0aW9uLgkqLworI2RlZmluZSBIQVZFX1NUUkVSUk9SCTEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJjYXNlY21wKCkgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZmNob3duKCkgZnVuY3Rpb24uICAqLworI3VuZGVmIEhBVkVfRkNIT1dOCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmVuYW1lKCkgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVOQU1FCTEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmc3luYygpIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRlNZTkMgICAvKiBleGlzdHMsIGJ1dCBhcHBhcmVudGx5IEJhZCBUaGluZ3MgaGFwcGVuIHdoZW4gdXNlZCAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZjaGRpcigpIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRkNIRElSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0ZW52KCkgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRFTlYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwdXRlbnYoKSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QVVRFTlYJMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHRpbWVvZmRheSgpIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUVElNRU9GREFZCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cHd1aWQoKSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBXVUlECisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cHduYW0oKSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBXTkFNCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcXNvcnQoKSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9RU09SVCAgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxkaXJlbnQuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX0RJUkVOVF9ICTEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL25kaXIuaD4gaGVhZGVyIGZpbGUuICAqLworI3VuZGVmIEhBVkVfU1lTX05ESVJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvZGlyLmg+IGhlYWRlciBmaWxlLiAgKi8KKyN1bmRlZiBIQVZFX1NZU19ESVJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZGlyLmg+IGhlYWRlciBmaWxlLiAgKi8KKyN1bmRlZiBIQVZFX05ESVJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgPHN5cy93YWl0Lmg+IHRoYXQgaXMgUE9TSVguMSBjb21wYXRpYmxlLgkqLworI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgYSA8c3lzL3dhaXQuaD4gdGhhdCBpcyBub3QgUE9TSVguMSBjb21wYXRpYmxlLiAqLworI3VuZGVmIEhBVkVfVU5JT05fV0FJVAorCisvKiBUaGlzIGlzIGN1cnJlbnRseSB1bnVzZWQgaW4gdmltOiAqLworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworLyogI3VuZGVmIFNURENfSEVBREVSUyAqLworCisvKiBpbnN0ZWFkLCB3ZSBjaGVjayBhIGZldyBTVERDIHRoaW5ncyBvdXJzZWx2ZXMgKi8KKyNkZWZpbmUgSEFWRV9TVERMSUJfSAkxCisjdW5kZWYgSEFWRV9TVFJJTkdfSAkvKiBPbiBFTVggaXQgaXMgYmV0dGVyIHRvIHVzZSBzdHJpbmdzLmggKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gICovCisjdW5kZWYgSEFWRV9TWVNfU0VMRUNUX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0c25hbWUuaD4gaGVhZGVyIGZpbGUuCSovCisjZGVmaW5lIEhBVkVfU1lTX1VUU05BTUVfSAkxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1jYXAuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1RFUk1DQVBfSAkxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9GQ05UTF9ICTEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2d0dHkuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1NHVFRZX0gJMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW9jdGwuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1NZU19JT0NUTF9ICTEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvLmg+IGhlYWRlciBmaWxlLiAgKi8KKyN1bmRlZiBIQVZFX1RFUk1JT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0gJMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJvcHRzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RST1BUU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0VSUk5PX0gJMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR1NfSAkxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zeXN0ZW1pbmZvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NZU1RFTUlORk9fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTE9DQUxFX0gJMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RyZWFtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NUUkVBTV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wdGVtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1BURU1fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1RFUk1JT1NfSAkxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGxpYmMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSUJDX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXRmcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TVEFURlNfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QT0xMX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8cHdkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUFdEX0gKZGlmZiAtLWdpdCBhL3NyYy9vc19xbnguYyBiL3NyYy9vc19xbnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDQwNjFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX3FueC5jCkBAIC0wLDAgKzEsMTYyIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogUU5YIHBvcnQgYnkgSnVsaWFuIEtpbnJhaWQKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKy8qCisgKiBvc19xbnguYworICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworCisjaWYgZGVmaW5lZChGRUFUX0dVSV9QSE9UT04pCitpbnQgaXNfcGhvdG9uX2F2YWlsYWJsZTsKKyNlbmRpZgorCit2b2lkIHFueF9pbml0KCkKK3sKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX1BIT1RPTikKKyAgICBQaENoYW5uZWxQYXJtc190IHBhcm1zOworCisgICAgbWVtc2V0KCAmcGFybXMsIDAsIHNpemVvZiggcGFybXMgKSApOworICAgIHBhcm1zLmZsYWdzID0gUGhfRFlOQU1JQ19CVUZGRVI7CisKKyAgICBpc19waG90b25fYXZhaWxhYmxlID0gKFBoQXR0YWNoKCBOVUxMLCAmcGFybXMgKSAhPSBOVUxMKSA/IFRSVUUgOiBGQUxTRTsKKyNlbmRpZgorfQorCisjaWYgKGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKSAmJiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKSkgfHwgZGVmaW5lZChQUk9UTykKKworI2RlZmluZSBDTElQX1RZUEVfVklNICJWSU1UWVBFIgorI2RlZmluZSBDTElQX1RZUEVfVEVYVCAiVEVYVCIKKworLyogVHVybiBvbiB0aGUgY2xpcGJvYXJkIGZvciBhIGNvbnNvbGUgdmltIHdoZW4gcGhvdG9uIGlzIHJ1bm5pbmcgKi8KK3ZvaWQgcW54X2NsaXBfaW5pdCgpCit7CisgICAgaWYoIGlzX3Bob3Rvbl9hdmFpbGFibGUgPT0gVFJVRSAmJiAhZ3VpLmluX3VzZSkKKwljbGlwX2luaXQoIFRSVUUgKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ2xpcGJvYXJkICovCisKKy8qIE5vIHN1cHBvcnQgZm9yIG93bmluZyB0aGUgY2xpcGJvYXJkICovCitpbnQKK2NsaXBfbWNoX293bl9zZWxlY3Rpb24oIFZpbUNsaXBib2FyZCAqY2JkICkKK3sKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQKK2NsaXBfbWNoX2xvc2Vfc2VsZWN0aW9uKCBWaW1DbGlwYm9hcmQgKmNiZCApCit7Cit9CisKK3ZvaWQKK2NsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uKCBWaW1DbGlwYm9hcmQgKmNiZCApCit7CisgICAgaW50CQkgICAgdHlwZSA9IE1MSU5FLCBjbGlwX2xlbmd0aCA9IDAsIGlzX3R5cGVfc2V0ID0gRkFMU0U7CisgICAgdm9pZAkgICAgKmNiZGF0YTsKKyAgICBQaENsaXBIZWFkZXIgICAgKmNsaXBfaGVhZGVyOworICAgIGNoYXJfdQkgICAgKmNsaXBfdGV4dCA9IE5VTEw7CisKKyAgICBjYmRhdGEgPSBQaENsaXBib2FyZFBhc3RlU3RhcnQoIFBoSW5wdXRHcm91cCggTlVMTCApKTsKKyAgICBpZiggY2JkYXRhICE9IE5VTEwgKQorICAgIHsKKwkvKiBMb29rIGZvciB0aGUgdmltIHNwZWNpZmljIGNsaXAgZmlyc3QgKi8KKwljbGlwX2hlYWRlciA9IFBoQ2xpcGJvYXJkUGFzdGVUeXBlKCBjYmRhdGEsIENMSVBfVFlQRV9WSU0gKTsKKwlpZiggY2xpcF9oZWFkZXIgIT0gTlVMTCAmJiBjbGlwX2hlYWRlci0+ZGF0YSAhPSBOVUxMICkKKwl7CisJICAgIHN3aXRjaCggKihjaGFyICopIGNsaXBfaGVhZGVyLT5kYXRhICkKKwkgICAgeworCQlkZWZhdWx0OiAvKiBmYWxsdGhyb3VnaCB0byBsaW5lIHR5cGUgKi8KKwkJY2FzZSAnTCc6IHR5cGUgPSBNTElORTsgYnJlYWs7CisJCWNhc2UgJ0MnOiB0eXBlID0gTUNIQVI7IGJyZWFrOworI2lmZGVmIEZFQVRfVklTVUFMCisJCWNhc2UgJ0InOiB0eXBlID0gTUJMT0NLOyBicmVhazsKKyNlbmRpZgorCSAgICB9CisJICAgIGlzX3R5cGVfc2V0ID0gVFJVRTsKKwl9CisKKwkvKiBUcnkgZm9yIGp1c3Qgbm9ybWFsIHRleHQgKi8KKwljbGlwX2hlYWRlciA9IFBoQ2xpcGJvYXJkUGFzdGVUeXBlKCBjYmRhdGEsIENMSVBfVFlQRV9URVhUICk7CisJaWYoIGNsaXBfaGVhZGVyICE9IE5VTEwgKQorCXsKKwkgICAgY2xpcF90ZXh0ID0gY2xpcF9oZWFkZXItPmRhdGE7CisJICAgIGNsaXBfbGVuZ3RoICA9IGNsaXBfaGVhZGVyLT5sZW5ndGggLSAxOworCisJICAgIGlmKCBjbGlwX3RleHQgIT0gTlVMTCAmJiBpc190eXBlX3NldCA9PSBGQUxTRSApCisJCXR5cGUgPSAoc3RyY2hyKCBjbGlwX3RleHQsICdccicgKSAhPSBOVUxMKSA/IE1MSU5FIDogTUNIQVI7CisJfQorCisJaWYoIChjbGlwX3RleHQgIT0gTlVMTCkgJiYgKGNsaXBfbGVuZ3RoID4gMCkgKQorCXsKKwkgICAgY2xpcF95YW5rX3NlbGVjdGlvbiggdHlwZSwgY2xpcF90ZXh0LCBjbGlwX2xlbmd0aCwgY2JkICk7CisJfQorCisJUGhDbGlwYm9hcmRQYXN0ZUZpbmlzaCggY2JkYXRhICk7CisgICAgfQorfQorCit2b2lkCitjbGlwX21jaF9zZXRfc2VsZWN0aW9uKCBWaW1DbGlwYm9hcmQgKmNiZCApCit7CisgICAgaW50IHR5cGU7CisgICAgbG9uZ191ICBsZW47CisgICAgY2hhcl91ICp0ZXh0X2NsaXAsIHZpbV9jbGlwWzJdLCAqc3RyID0gTlVMTDsKKyAgICBQaENsaXBIZWFkZXIgY2xpcF9oZWFkZXJbMl07CisKKyAgICAvKiBQcmV2ZW50IHJlY3Vyc2lvbiBmcm9tIGNsaXBfZ2V0X3NlbGVjdGlvbigpICovCisgICAgaWYoIGNiZC0+b3duZWQgPT0gVFJVRSApCisJcmV0dXJuOworCisgICAgY2JkLT5vd25lZCA9IFRSVUU7CisgICAgY2xpcF9nZXRfc2VsZWN0aW9uKCBjYmQgKTsKKyAgICBjYmQtPm93bmVkID0gRkFMU0U7CisKKyAgICB0eXBlID0gY2xpcF9jb252ZXJ0X3NlbGVjdGlvbiggJnN0ciwgJmxlbiwgY2JkICk7CisgICAgaWYoIHR5cGUgPj0gMCApCisgICAgeworCXRleHRfY2xpcCA9IGxhbGxvYyggbGVuICsgMSwgVFJVRSApOyAvKiBOb3JtYWwgdGV4dCAqLworCisJaWYoIHRleHRfY2xpcCAmJiB2aW1fY2xpcCApCisJeworCSAgICBtZW1zZXQoIGNsaXBfaGVhZGVyLCAwLCBzaXplb2YoIGNsaXBfaGVhZGVyICkgKTsKKworCSAgICBTVFJOQ1BZKCBjbGlwX2hlYWRlclswXS50eXBlLCBDTElQX1RZUEVfVklNLCA4ICk7CisJICAgIGNsaXBfaGVhZGVyWzBdLmxlbmd0aCA9IHNpemVvZiggdmltX2NsaXAgKTsKKwkgICAgY2xpcF9oZWFkZXJbMF0uZGF0YSAgID0gdmltX2NsaXA7CisKKwkgICAgU1RSTkNQWSggY2xpcF9oZWFkZXJbMV0udHlwZSwgQ0xJUF9UWVBFX1RFWFQsIDggKTsKKwkgICAgY2xpcF9oZWFkZXJbMV0ubGVuZ3RoID0gbGVuICsgMTsKKwkgICAgY2xpcF9oZWFkZXJbMV0uZGF0YSAgID0gdGV4dF9jbGlwOworCisJICAgIHN3aXRjaCggdHlwZSApCisJICAgIHsKKwkJZGVmYXVsdDogLyogZmFsbHRocm91Z2ggdG8gTUxJTkUgKi8KKwkJY2FzZSBNTElORToJKnZpbV9jbGlwID0gJ0wnOyBicmVhazsKKwkJY2FzZSBNQ0hBUjoJKnZpbV9jbGlwID0gJ0MnOyBicmVhazsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQljYXNlIE1CTE9DSzoJKnZpbV9jbGlwID0gJ0InOyBicmVhazsKKyNlbmRpZgorCSAgICB9CisKKwkgICAgU1RSTkNQWSggdGV4dF9jbGlwLCBzdHIsIGxlbiApOworCSAgICB0ZXh0X2NsaXBbIGxlbiBdID0gTlVMOworCisJICAgIHZpbV9jbGlwWyAxIF0gPSBOVUw7CisKKwkgICAgUGhDbGlwYm9hcmRDb3B5KCBQaElucHV0R3JvdXAoIE5VTEwgKSwgMiwgY2xpcF9oZWFkZXIpOworCX0KKwl2aW1fZnJlZSggdGV4dF9jbGlwICk7CisgICAgfQorICAgIHZpbV9mcmVlKCBzdHIgKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29zX3FueC5oIGIvc3JjL29zX3FueC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZGM2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3NfcW54LmgKQEAgLTAsMCArMSwxOSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworI2lmZGVmIF9fUU5YTlRPX18KKyMgaW5jbHVkZSA8c3lzL3Byb2NtZ3IuaD4KKyNlbmRpZgorCisjZGVmaW5lCVVTRV9UTVBOQU0KKworI2RlZmluZSBQT1NJWAkgICAgLyogVXNlZCBieSBwdHkuYyAqLworCisjaWYgZGVmaW5lZChGRUFUX0dVSV9QSE9UT04pCitleHRlcm4gaW50IGlzX3Bob3Rvbl9hdmFpbGFibGU7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9vc19yaXNjb3MuYyBiL3NyYy9vc19yaXNjb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWNkYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX3Jpc2Nvcy5jCkBAIC0wLDAgKzEsMTI4OCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKy8qCisgKiBvc19yaXNjb3MuYworICoKKyAqIFRob21hcyBMZW9uYXJkIDx0YWwxOTdAZWNzLnNvdG9uLmFjLnVrPgorICovCisKK2NvbnN0IGNoYXIgKl9fZHluYW1pY19kYV9uYW1lID0gIlZpbSBoZWFwIjsgLyogRW5hYmxlIGFuZCBuYW1lIG91ciBkeW5hbWljIGFyZWEgKi8KK2ludCByb19saW5lX21vZGUgPSBUUlVFOyAgLyogRm9yIEV4IG1vZGUgd2UgbXVjaCBlY2hvIGNoYXJzIHRvIHRoZSBzY3JlZW4gb3Vyc2VsdmVzICovCitpbnQgd2luZG93ZWQ7CQkvKiBGbGFnIC0gYXJlIHdlIHJ1bm5pbmcgaW5zaWRlIGEgdGV4dCB3aW5kb3c/ICovCitpbnQgV2luTGVmdCwgV2luVG9wOwkvKiBXZSBtaWdodCBiZSBzdGFydGVkIGluc2lkZSBhIHRleHQgd2luZG93ICovCitpbnQgU2Nyb2xsVG9wOwkJLyogTWFrZSBjdXJzb3IgbW92ZW1lbnRzIHJlbGF0aXZlIHRvIFNjcm9sbFRvcC4gKi8KKworaW50IG9sZF9lc2NhcGVfc3RhdGUgPSAtMTsKK2ludCBvbGRfY3Vyc29yX3N0YXRlID0gLTE7CisKKyNkZWZpbmUgcmdiKHIsZyxiKSAoKGI8PDI0KSArIChnPDwxNikgKyAocjw8OCkpCisjZGVmaW5lIE5PUk1BTF9GRyAweDAwMDAwMDAwCisjZGVmaW5lIE5PUk1BTF9CRyAweGZmZmZmZmZmCisKKy8qIENvbnZlcnQgYSBET1MgY29sb3VyIG51bWJlciB0byBhbiBSR0IgcGFsZXR0ZSBlbnRyeS4KKyAqIE1hcHBpbmdzIGZyb20gWDExIHJnYi90eHQgZmlsZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK21hcF9jb2xvdXIoZG9zKQorICAgIGludCBkb3M7CQkvKiBTdGFuZGFyZCBET1MgY29sb3VyIG51bWJlci4gKi8KK3sKKyAgICBzd2l0Y2ggKGRvcykKKyAgICB7CisJY2FzZSAwOiByZXR1cm4gMDsJCQkvKiBCbGFjayAqLworCWNhc2UgMTogcmV0dXJuIHJnYigwLDAsMTM5KTsJCS8qIERhcmtCbHVlICovCisJY2FzZSAyOiByZXR1cm4gcmdiKDAsMTAwLDApOwkJLyogRGFya0dyZWVuICovCisJY2FzZSAzOiByZXR1cm4gcmdiKDAsMTM5LDEzOSk7CQkvKiBEYXJrQ3lhbiAqLworCWNhc2UgNDogcmV0dXJuIHJnYigxMzksMCwwKTsJCS8qIERhcmtSZWQgKi8KKwljYXNlIDU6IHJldHVybiByZ2IoMTM5LDAsMTM5KTsJCS8qIERhcmtNYWdlbnRhICovCisJY2FzZSA2OiByZXR1cm4gcmdiKDE2NSw0Miw0Mik7CQkvKiBCcm93biwgRGFya1llbGxvdyAqLworCWNhc2UgNzogcmV0dXJuIHJnYigyMTEsMjExLDIxMSk7CS8qIExpZ2h0R3JheSwgTGlnaHRHcmV5LCBHcmF5LCBHcmV5ICovCisJY2FzZSA4OiByZXR1cm4gcmdiKDE2OSwxNjksMTY5KTsJLyogRGFya0dyYXksIERhcmtHcmV5ICovCisJY2FzZSA5OiByZXR1cm4gcmdiKDE3MywyMTYsMjMwKTsJLyogQmx1ZSwgTGlnaHRCbHVlICovCisJY2FzZSAxMDogcmV0dXJuIHJnYigxNDQsMjM4LDE0NCk7CS8qIEdyZWVuLCBMaWdodEdyZWVuICovCisJY2FzZSAxMTogcmV0dXJuIHJnYigyMjQsMjU1LDI1NSk7CS8qIEN5YW4sIExpZ2h0Q3lhbiAqLworCWNhc2UgMTI6IHJldHVybiByZ2IoMjU1LDAsMCk7CQkvKiBSZWQsIExpZ2h0UmVkICovCisJY2FzZSAxMzogcmV0dXJuIHJnYigyNTUsMCwyNTUpOwkJLyogTWFnZW50YSwgTGlnaHRNYWdlbnRhICovCisJY2FzZSAxNDogcmV0dXJuIHJnYigyNTUsMjU1LDApOwkJLyogWWVsbG93LCBMaWdodFllbGxvdyAqLworCWNhc2UgMTU6IHJldHVybiByZ2IoMjU1LDI1NSwyNTUpOwkvKiBXaGl0ZSAqLworICAgIH0KKyAgICByZXR1cm4gcmdiKDEwMCwxMDAsMTAwKTsKK30KKworICAgIHN0YXRpYyB2b2lkCit0ZXh0X2ZnKGZnKQorICAgIGludCBmZzsJCS8qIEZvcmVnb3VuZCBjb2xvdXIgaW4gdGhlIGZvcm0gJkJCR0dSUjAwICovCit7CisgICAgeHN3aShDb2xvdXJUcmFuc19TZXRUZXh0Q29sb3VyLCBmZywgMCwgMCwgMCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAordGV4dF9iZyhiZykKKyAgICBpbnQJCWJnOwkvKiBCYWNrZ291bmQgY29sb3VyIGluIHRoZSBmb3JtICZCQkdHUlIwMCAqLworeworICAgIHhzd2koQ29sb3VyVHJhbnNfU2V0VGV4dENvbG91ciwgYmcsIDAsIDAsIDEgPDwgNyk7Cit9CisKKyNkZWZpbmUgT1VUX05PUk1BTCAwCisjZGVmaW5lIE9VVF9OVU1CRVIgMQkJLyogUmVhZGluZyBpbiBhIG51bWJlciAqLworCisgICAgdm9pZAorbWNoX3dyaXRlKHMsIGxlbikKKyAgICBjaGFyX3UgICpzOworICAgIGludAkgICAgbGVuOworeworICAgIHN0YXRpYyBpbnQgbW9kZSA9IE9VVF9OT1JNQUw7CisgICAgc3RhdGljIGludCB4LCB5OwkJCS8qIEZvciByZWFkaW5nIG51bWJlcnMgaW4uICovCisKKyAgICBpZiAoIXRlcm1fY29uc29sZSkKKyAgICB7CisJLyogTWF5YmUgd2UgYXJlIHJ1bm5pbmcgVmltIHJlbW90ZWx5IC0gZG9uJ3QgaW50ZXJwcmV0IGNoYXJzICovCisJd2hpbGUgKGxlbi0tKQorCXsKKwkgICAgY2hhcl91IGMgPSAqcysrOworCSAgICBzd2koT1NfV3JpdGVDLCBjKTsKKwkgICAgLyogV2UgbWlnaHQgbmVlZCB0byBzZW5kIGEgQ1IgdG9vLiBUaGlzIHNob3VsZG4ndAorCSAgICAgKiBodXJ0IGlmIHdlIGRvbid0IG5lZWQgaXQsIHNob3VsZCBpdD8KKwkgICAgICovCisJICAgIGlmIChjID09IDEwKQorCQlzd2koT1NfV3JpdGVJICsgMTMpOworCX0KKwlyZXR1cm47CisgICAgfQorCisgICAgd2hpbGUgKGxlbi0tKQorICAgIHsKKwljaGFyX3UgYyA9ICpzKys7CisJc3dpdGNoIChtb2RlKQorCXsKKwkgICAgY2FzZSBPVVRfTlVNQkVSOgorCQlpZiAoYyA8ICcwJyB8fCBjID4gJzknKQorCQl7CisJCSAgICBtb2RlID0gT1VUX05PUk1BTDsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIHggPSAoeCAqIDEwKSArIGMgLSAnMCc7CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICAvKiBub3RlOiBubyBicmVhayBoZXJlISAqLworCisJICAgIGNhc2UgT1VUX05PUk1BTDoKKwkJc3dpdGNoIChjKQorCQl7CisJCSAgICBjYXNlIDE6CisJCQkvKiBOdW1iZXIgKGluIGRlY2ltYWwpIGZvbGxvd3MuICovCisJCQltb2RlID0gT1VUX05VTUJFUjsKKwkJCXkgPSB4OworCQkJeCA9IDA7CisJCQlicmVhazsKKwkJICAgIGNhc2UgMjoKKwkJCS8qIFBvc2l0aW9uIGN1cnNvci4gKi8KKwkJCXN3aShPU19Xcml0ZUkgKyAzMSk7CisJCQlzd2koT1NfV3JpdGVDLCB4KTsKKwkJCXN3aShPU19Xcml0ZUMsIHkgLSBTY3JvbGxUb3ApOworCQkJYnJlYWs7CisJCSAgICBjYXNlIDM6CisJCQkvKiBTZXQgc2Nyb2xsIHJlZ2lvbi4gKi8KKwkJCWlmICh4ID09IFJvd3MgLTEgJiYgeSA9PSAwICYmICF3aW5kb3dlZCkKKwkJCXsKKwkJCSAgICAvKiBXaG9sZSBzY3JlZW4gLSByZW1vdmUgdGV4dCB3aW5kb3cuCisJCQkgICAgICogVGhpcyBpcyBNVUNIIGZhc3Rlci4KKwkJCSAgICAgKi8KKwkJCSAgICBzd2koT1NfV3JpdGVJICsgMjYpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJICAgIC8qIENyZWF0ZSBhIHRleHQgd2luZG93LiAqLworCQkJICAgIHN3aShPU19Xcml0ZUkgKyAyOCk7CisJCQkgICAgc3dpKE9TX1dyaXRlQywgV2luTGVmdCk7CisJCQkgICAgc3dpKE9TX1dyaXRlQywgV2luVG9wICsgeCk7CisJCQkgICAgc3dpKE9TX1dyaXRlQywgV2luTGVmdCArIENvbHVtbnMgLSAxKTsKKwkJCSAgICBzd2koT1NfV3JpdGVDLCBXaW5Ub3AgKyB5KTsKKwkJCX0KKwkJCVNjcm9sbFRvcCA9IHk7CisJCQlicmVhazsKKwkJICAgIGNhc2UgNDoKKwkJCS8qIE5vcm1hbCBtb2RlLiAqLworCQkJdGV4dF9mZyhOT1JNQUxfRkcpOworCQkJdGV4dF9iZyhOT1JNQUxfQkcpOworCQkJYnJlYWs7CisJCSAgICBjYXNlIDU6CisJCQkvKiBSZXZlcnNlIG1vZGUuICovCisJCQl0ZXh0X2ZnKE5PUk1BTF9CRyk7CisJCQl0ZXh0X2JnKE5PUk1BTF9GRyk7CisJCQlicmVhazsKKwkJICAgIGNhc2UgMTA6CisJCQlzd2koT1NfTmV3TGluZSk7CisJCQlicmVhazsKKwkJICAgIGNhc2UgMTQ6CisJCQkvKiBDdXJzb3IgaW52aXNpYmxlLiAqLworCQkJc3dpKE9TX1dyaXRlTiwKKwkJCSAgICAgIlwwMjdcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAiLAorCQkJICAgICAxMCk7CisJCQlicmVhazsKKwkJICAgIGNhc2UgMTU6CisJCQkvKiBDdXJzb3IgdmlzaWJsZS4gKi8KKwkJCXN3aShPU19Xcml0ZU4sCisJCQkgICAgICJcMDI3XDAwMVwwMDJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIiwKKwkJCSAgICAgMTApOworCQkJYnJlYWs7CisJCSAgICBjYXNlIDE2OgorCQkJLyogQ3Vyc29yIHZlcnkgdmlzaWJsZSAoZmxhc2gpICovCisJCQlzd2koT1NfV3JpdGVOLAorCQkJICAgICAiXDAyN1wwMDFcMDAzXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCIsCisJCQkgICAgIDEwKTsKKwkJICAgIGNhc2UgMTc6CisJCQkvKiBTZXQgZm9yZWdyb3VuZCBjb2xvdXIuICovCisJCQl0ZXh0X2ZnKG1hcF9jb2xvdXIoeCkpOworCQkJYnJlYWs7CisJCSAgICBjYXNlIDE4OgorCQkJLyogU2V0IGJhY2tncm91bmQgY29sb3VyLiAqLworCQkJdGV4dF9iZyhtYXBfY29sb3VyKHgpKTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAxOToKKwkJCS8qIFNjcm9sbCB0ZXh0IGRvd24uICovCisJCQlzd2koT1NfV3JpdGVOLAorCQkJICAgICAiXDAyN1wwMDdcMDAwXDAwMlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCIsCisJCQkgICAgIDEwKTsKKwkJCWJyZWFrOworCQkgICAgZGVmYXVsdDoKKwkJCXN3aShPU19Xcml0ZUMsIGMpOworCQl9CisJCWNvbnRpbnVlOworCisJICAgIGRlZmF1bHQ6CisJCXByaW50ZigiW291dHB1dCBlcnJvcl0iKTsKKwkJbW9kZSA9IE9VVF9OT1JNQUw7CisJfQorICAgIH0KK30KKworLyoKKyAqIG1jaF9pbmNoYXIoKTogbG93IGxldmVsIGlucHV0IGZ1bmNpb24uCisgKiBHZXQgYSBjaGFyYWN0ZXJzIGZyb20gdGhlIGtleWJvYXJkLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBhdmFpbGFibGUuCisgKiBJZiB3dGltZSA9PSAwIGRvIG5vdCB3YWl0IGZvciBjaGFyYWN0ZXJzLgorICogSWYgd3RpbWUgPT0gbiB3YWl0IG4gbXNlY3MgZm9yIGNoYXJhY3RlcnMuCisgKiBJZiB3dGltZSA9PSAtMSB3YWl0IGZvcmV2ZXIgZm9yIGNoYXJhY3RlcnMuCisgKgorICogVE9ETzogY2FsbCBjb252ZXJ0X2lucHV0KCkgZm9yICdmaWxlZW5jb2RpbmcnIHRvICdlbmNvZGluZycgY29udmVyc2lvbi4KKyAqLworICAgIGludAorbWNoX2luY2hhcihidWYsIG1heGxlbiwgd3RpbWUsIHRiX2NoYW5nZV9jbnQpCisgICAgY2hhcl91ICAqYnVmOworICAgIGludAkgICAgbWF4bGVuOworICAgIGxvbmcgICAgd3RpbWU7CisgICAgaW50CSAgICB0Yl9jaGFuZ2VfY250OworeworICAgIGludCBnb3Q9MDsKKyAgICB1bnNpZ25lZCBpbnQgc3RhcnRfdGltZSA9IGNsb2NrKCk7CisKKyAgICBpZiAocm9fbGluZV9tb2RlKQorICAgIHsKKwkvKiBXZSdyZSBwcm9iYWJseSBpbiBFeCBtb2RlIC0gZ2V0IHdob2xlIGxpbmVzIGF0IGEgdGltZS4gKi8KKworCXN0YXRpYyBjaGFyX3UJbGluZV9idWZmZXJbMjU2XTsKKwlzdGF0aWMgaW50CXJlbWFpbmluZ19jaGFycyA9IDA7CisJc3RhdGljIGludAlidWZfcG9zID0gMDsKKworCS8qIERvIHdlIG5lZWQgdG8gZmV0Y2ggYW5vdGhlciBsaW5lPyAqLworCWlmIChyZW1haW5pbmdfY2hhcnMgPT0gMCkKKwl7CisJICAgIGludAkJb2xkX2VzY19zdGF0ZTsKKwkgICAgc3dpKE9TX0J5dGUsIDIwMCwgMSwgMHhmZSk7CisJICAgIG9sZF9lc2Nfc3RhdGUgPSByMTsKKworCSAgICBidWZfcG9zID0gMDsKKwkgICAgaWYgKHhzd2koT1NfUmVhZExpbmUsIGxpbmVfYnVmZmVyLCAyNTUsIDAsIDI1NSkgJiAoY19mbGFnIHwgdl9mbGFnKSkKKwkgICAgeworCQlnb3RfaW50ID0gVFJVRTsJICAgIC8qIEVTQyBwcmVzc2VkICovCisJCXIxID0gMDsKKwkgICAgfQorCSAgICBsaW5lX2J1ZmZlcltyMV0gPSAxMzsKKwkgICAgcmVtYWluaW5nX2NoYXJzID0gcjEgKyAxOwkvKiBDb3VudCBDUiBhcyBwYXJ0IG9mIGlucHV0ICovCisKKwkgICAgc3dpKE9TX0J5dGUsIDIwMCwgb2xkX2VzY19zdGF0ZSwgMCk7CisJfQorCisJLyogQ2FuIHdlIHNlbmQgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlciBiYWNrIGluIG9uZSBnbz8gKi8KKwlpZiAocmVtYWluaW5nX2NoYXJzIDw9IG1heGxlbikKKwl7CisJICAgIGludAkgICAgZ290ID0gcmVtYWluaW5nX2NoYXJzOworCisJICAgIG1lbWNweShidWYsIGxpbmVfYnVmZmVyICsgYnVmX3BvcywgZ290KTsKKwkgICAgcmVtYWluaW5nX2NoYXJzID0gMDsKKwkgICAgcmV0dXJuICBnb3Q7CisJfQorCisJLyogU2VuZCBhcyBtdWNoIGFzIHdlIGNhbiAqLworCW1lbWNweShidWYsIGxpbmVfYnVmZmVyICsgYnVmX3BvcywgbWF4bGVuKTsKKwlidWZfcG9zICs9IG1heGxlbjsKKwlyZW1haW5pbmdfY2hhcnMgLT0gbWF4bGVuOworCisJcmV0dXJuIG1heGxlbjsKKyAgICB9CisKKyAgICBpZiAoIXRlcm1fY29uc29sZSkKKyAgICB7CisJLyogVXNlIE9TX1JlYWRDIGZvciBhbGwgaW5wdXQuCisJICogQXZvaWRzIHByb2JsZW1zIHdpdGggcmVtb3RlIGFjY2VzcyBnZXR0aW5nIGludGVyZmVyZW5jZSBmcm9tCisJICogdGhlIGtleWJvYXJkLgorCSAqLworCWlmICh3dGltZSA9PSAwKQorCSAgICByZXR1cm4gMDsJICAgIC8qIElnbm9yZSBxdWljayBrZXkgY2hlY2tzICovCisKKwlpZiAoeHN3aShPU19SZWFkQykgJiBjX2ZsYWcpCisJeworCSAgICBnb3RfaW50ID0gVFJVRTsJLyogRVNDIHByZXNzZWQgLSBjYW4gdGhpcyBoYXBwZW4/ICovCisJICAgIHN3aShPU19CeXRlLCAxMjQpOwkvKiBDbGVhciBFc2NhcGUgc3RhdGUgKi8KKwkgICAgcjAgPSAweDFiOwkJLyogSXQgKm1pZ2h0KiBub3QgaGF2ZSBiZWVuIEVzY2FwZSEgKi8KKwl9CisJYnVmWzBdID0gcjA7CisJcmV0dXJuIDE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBPSywgaGVyZSdzIHRoZSBwbGFuOgorICAgICAqCisgICAgICogMSkgV2FpdCB1bnRpbCB3dGltZSBleHBpcmVzIG9yIHdlIGdldCBhIGtleQorICAgICAqIDIpIEdldCBrZXlzIHVudGlsIHRoZSBrZXlib2FyZCBidWZmZXIgaXMgZW1wdHkgb3IgYnVmIGlzIGZ1bGwKKyAgICAgKi8KKworICAgIHdoaWxlICh4c3dpKE9TX0J5dGUsMTQ1LDApICYgY19mbGFnKQorICAgIHsKKwkvKiBOb3RoaW5nIGF0IGFsbCBpbiB0aGUga2V5Ym9hcmQgYnVmZmVyLgorCSAqIEhhcyBvdXIgdGltZSBleHBpcmVkIHlldD8KKwkgKi8KKwlpZiAoICh3dGltZSAhPSAtMSkgJiYgKGNsb2NrKCkgLSBzdGFydF90aW1lKSA+PSB3dGltZSApCisJICAgIHJldHVybiAwOwkJLyogTm90aGluZyByZWFkIC0gZ2l2aW5nIHVwICovCisgICAgfQorCisgICAgLyogV2UndmUgZ290IG9uZSBjaGFyIChpbiByMikgLSBhcmUgdGhlcmUgYW55IG1vcmU/ICovCisKKyAgICB3aGlsZSAoZ290IDwgbWF4bGVuKQorICAgIHsKKwlidWZbZ290KytdID0gcjI7CisKKwlpZiAoeHN3aShPU19CeXRlLDE0NSwwKSAmIGNfZmxhZykKKwkgICAgcmV0dXJuIGdvdDsJCS8qIEtleWJvYXJkIGJ1ZmZlciBlbXB0eSAqLworICAgIH0KKyAgICByZXR1cm4gZ290OwkJCS8qIGJ1ZiBpcyBmdWxsICovCit9CisKKy8qCisgKiByZXR1cm4gbm9uLXplcm8gaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlCisgKi8KKyAgICBpbnQKK21jaF9jaGFyX2F2YWlsKCkKK3sKKyAgICBpZiAoIXRlcm1fY29uc29sZSkKKwlyZXR1cm4gMDsJICAgIC8qIENhbid0IHRlbGwgKi8KKyAgICBpZiAoeHN3aShPU19CeXRlLCAxNTIsIDApICYgY19mbGFnKQorCXJldHVybiAwOworICAgIHJldHVybiAxOworfQorCisvKiBGaW5kIG91dCBob3cgbXVjaCBmcmVlIG1lbW9yeSB3ZSBoYXZlLgorICogSSBkb24ndCBrbm93IGhvdyB0byB3b3JrIHRoaXMgb3V0IGV4YWN0bHkgYnV0LCBzaW5jZSB3ZSBjYW4gY2xhaW0KKyAqIG1vcmUgbWVtb3J5IGZyb20gdGhlIE9TLCBsZXQncyBqdXN0IHJlcG9ydCB0aGUgZnJlZSBwb29sIHNpemUuCisgKiBEeW5hbWljIGFyZWEgNiBkb2Vzbid0IGV4aXN0IHByZSAzLjYgYWNjb3JkaW5nIHRvIFN0cm9uZ0hlbHAsIHNvCisgKiB3ZSdsbCB1c2UgV2ltcF9TbG90U2l6ZS4gSWYgdGhhdCBmYWlscyAob3V0c2lkZSB0aGUgZGVza3RvcD8pCisgKiB0aGVuIGp1c3QgcmV0dXJuIGEgYmlnIG51bWJlciBhbmQgaG9wZS4KKyAqLworICAgIGxvbmdfdQorbWNoX2F2YWlsX21lbShzcGVjaWFsKQorICAgIGludCBzcGVjaWFsOworeworICAgIGlmICh4c3dpKFdpbXBfU2xvdFNpemUsIC0xLCAtMSkgJiB2X2ZsYWcpCisJcmV0dXJuIDB4N2ZmZmZmZmY7CisgICAgcmV0dXJuIHIyOworfQorCisgICAgdm9pZAorbWNoX2RlbGF5KG1zZWMsIGlnbm9yZWlucHV0KQorICAgIGxvbmcJbXNlYzsKKyAgICBpbnQJCWlnbm9yZWlucHV0OworeworICAgIGludAkJc3RhcnRfdGltZSwgdGltZV9ub3c7CisgICAgaW50CQljc2VjID0gbXNlYyAvIDEwOworCisgICAgc3dpKE9TX1JlYWRNb25vdG9uaWNUaW1lKTsKKyAgICBzdGFydF90aW1lID0gcjA7CisKKyAgICBmb3IgKDs7KQorICAgIHsKKwlzd2koT1NfUmVhZE1vbm90b25pY1RpbWUpOworCXRpbWVfbm93ID0gcjA7CisJaWYgKHRpbWVfbm93IC0gc3RhcnRfdGltZSA+IGNzZWMpCisJICAgIHJldHVybjsKKyNpZmRlZiBGRUFUX0dVSQorCS8qIEluIHRoZSBHVUksIGFsbG93IG90aGVyIHByb2dyYW1zIHRvIHJ1biB3aGlsZSB3YWl0aW5nLiAqLworCWlmIChndWkuaW5fdXNlKQorCSAgICBndWlfbWNoX3dhaXRfZm9yX2NoYXJzKHN0YXJ0X3RpbWUgKyBjc2VjKTsKKyNlbmRpZgorICAgIH0KK30KKworLyoKKyAqIElmIHRoZSBtYWNoaW5lIGhhcyBqb2IgY29udHJvbCwgdXNlIGl0IHRvIHN1c3BlbmQgdGhlIHByb2dyYW0sCisgKiBvdGhlcndpc2UgZmFrZSBpdCBieSBzdGFydGluZyBhIG5ldyBzaGVsbC4KKyAqLworICAgIHZvaWQKK21jaF9zdXNwZW5kKCkKK3sKKyAgICBzdXNwZW5kX3NoZWxsKCk7Cit9CisKKyAgICB2b2lkCittY2hfaW5pdCgpCit7CisgICAgLyoKKyAgICAgKiBSZWFkIHdpbmRvdyBzaXplIGZpcnN0LiBDYWxscyB0byBtY2hfZ2V0X3NoZWxsc2l6ZSgpIHdpbGwKKyAgICAgKiBzaW1wbHkgcmV0dXJuIHRoZXNlIHZhbHVlcyBpbiBmdXR1cmUgc28gdGhhdCBzZXR0aW5nIHRoZQorICAgICAqIHRleHQgd2luZG93ICh1c2VkIGZvciBzY3JvbGxpbmcpIHdvbid0IGdpdmUgc3RyYW5nZSByZXN1bHRzLgorICAgICAqLworCisgICAgaW50IGJ1Zls3XSA9IHsxMzIsIDEzNSwgMjU2LCAyNTcsIDEsIDIsIC0xfTsKKworICAgIC8qIENvbW1hbmQgd2luZG93cyBhcmUgbm8gbG9uZ2VyIGZvcmNlZCBvcGVuLCBzaW5jZSBpZiB3ZSBhcmUKKyAgICAgKiBpbiB0aGUgZGVza3RvcCB0aGVuIHdlJ2xsIHVzZSB0aGUgR1VJIHZlcnNpb24uCisgICAgICogT3BlbmluZyBhIGNvbW1hbmQgd2luZG93IGhlcmUgbWVzc2VzIHVwIHRoZSBHVUkgdmVyc2lvbiBzdGFydHVwCisgICAgICovCisjaWZuZGVmIEZFQVRfR1VJCisgICAgc3dpKE9TX1dyaXRlSSk7CisjZW5kaWYKKyAgICBzd2koT1NfUmVhZFZkdVZhcmlhYmxlcywgYnVmLCBidWYpOworICAgIFdpbkxlZnQgPSBidWZbMF07CisgICAgV2luVG9wICA9IGJ1ZlsxXTsKKyAgICBDb2x1bW5zID0gYnVmWzJdOworICAgIFJvd3MgICAgPSBidWZbM10gKyAxOwkvKiBTZWVtcyB0byBiZSBvbmUgb2ZmIChWZHVWYXJzIHdyb25nPykgKi8KKyAgICBTY3JvbGxUb3AgPSAwOworCisgICAgLyogQXJlIHdlIHJ1bm5pbmcgaW4gYSB0ZXh0d2luZG93PyAqLworICAgIGlmIChSb3dzID09IGJ1Zls1XSArIDEgJiYgQ29sdW1ucyA9PSBidWZbNF0gKyAxKQorCXdpbmRvd2VkID0gMDsKKyAgICBlbHNlCisJd2luZG93ZWQgPSAxOworCisgICAgLyogQ2hvb3NlIGEgbmljZSBjb2xvdXIgc2NoZW1lLiAqLworICAgIHRleHRfZmcoTk9STUFMX0ZHKTsKKyAgICB0ZXh0X2JnKE5PUk1BTF9CRyk7Cit9CisKKy8qCisgKiBDaGVja193aW4gY2hlY2tzIHdoZXRoZXIgd2UgaGF2ZSBhbiBpbnRlcmFjdGl2ZSBzdGRvdXQuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgaW50CittY2hfY2hlY2tfd2luKGFyZ2MsIGFyZ3YpCisgICAgaW50CSAgICBhcmdjOworICAgIGNoYXIgICAgKiphcmd2OworeworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBpbnB1dCBjb21lcyBmcm9tIGEgdGVybWluYWwsIEZBTFNFIG90aGVyd2lzZS4KKyAqLworICAgIGludAorbWNoX2lucHV0X2lzYXR0eSgpCit7CisgICAgaWYgKHhzd2koT1NfQ2hhbmdlUmVkaXJlY3Rpb24sIC0xLCAtMSkgJiB2X2ZsYWcpCisJcmV0dXJuIFRSVUU7CQkvKiBFcnJvciAtIFRSVUUgaXMgcHJvYmFibHkgY29ycmVjdCB0aG91Z2ggKi8KKyAgICBpZiAocjAgPT0gMCkKKwlyZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZmRlZiBGRUFUX1RJVExFCisgICAgaW50CittY2hfY2FuX3Jlc3RvcmVfdGl0bGUoKQoreworICAgIHJldHVybiBGQUxTRTsKK30KKworICAgIGludAorbWNoX2Nhbl9yZXN0b3JlX2ljb24oKQoreworICAgIHJldHVybiBGQUxTRTsKK30KKworCisvKgorICogU2V0IHRoZSB3aW5kb3cgdGl0bGUgYW5kIGljb24uCisgKi8KKyAgICB2b2lkCittY2hfc2V0dGl0bGUodGl0bGUsIGljb24pCisgICAgY2hhcl91ICp0aXRsZTsKKyAgICBjaGFyX3UgKmljb247Cit7CisgICAgaWYgKHRpdGxlID09IE5VTEwpCisJdGl0bGUgPSAoY2hhcl91ICopICI8dW50aXRsZWQ+IjsKKyNpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlICYmIHN0cmNtcCh0aXRsZSwgZ3VpLndpbmRvd190aXRsZSkpCisgICAgeworCWludCBsZW5ndGg7CisJbGVuZ3RoID0gc3RybGVuKHRpdGxlKTsKKwlpZiAobGVuZ3RoID49IGd1aS53aW5kb3dfdGl0bGVfc2l6ZSkKKwkgICAgbGVuZ3RoID0gZ3VpLndpbmRvd190aXRsZV9zaXplIC0gMTsKKwlzdHJuY3B5KGd1aS53aW5kb3dfdGl0bGUsIHRpdGxlLCBsZW5ndGgpOworCWd1aS53aW5kb3dfdGl0bGVbbGVuZ3RoXSA9IDA7CisJcm9fcmVkcmF3X3RpdGxlKGd1aS53aW5kb3dfaGFuZGxlKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm47Cit9CisKKy8qCisgKiBSZXN0b3JlIHRoZSB3aW5kb3cvaWNvbiB0aXRsZS4KKyAqICJ3aGljaCIgaXMgb25lIG9mOgorICogIDEgIG9ubHkgcmVzdG9yZSB0aXRsZQorICogIDIgIG9ubHkgcmVzdG9yZSBpY29uCisgKiAgMyAgcmVzdG9yZSB0aXRsZSBhbmQgaWNvbgorICovCisgICAgdm9pZAorbWNoX3Jlc3RvcmVfdGl0bGUod2hpY2gpCisgICAgaW50IHdoaWNoOworeworICAgIHJldHVybjsKK30KKyNlbmRpZgorCisvKgorICogSW5zZXJ0IHVzZXIgbmFtZSBpbiBzW2xlbl0uCisgKiBSZXR1cm4gT0sgaWYgYSBuYW1lIGZvdW5kLgorICovCisgICAgaW50CittY2hfZ2V0X3VzZXJfbmFtZShzLCBsZW4pCisgICAgY2hhcl91ICAqczsKKyAgICBpbnQJICAgIGxlbjsKK3sKKyAgICAvKiBSSVNDIE9TIGRvZXNuJ3Qgc3VwcG9ydCB1c2VyIG5hbWVzLiAqLworICAgICpzID0gTlVMOworICAgIHJldHVybiBGQUlMOworfQorCisvKgorICogSW5zZXJ0IGhvc3QgbmFtZSBpbiBzW2xlbl0uCisgKi8KKworICAgIHZvaWQKK21jaF9nZXRfaG9zdF9uYW1lKHMsIGxlbikKKyAgICBjaGFyX3UgICpzOworICAgIGludAkgICAgbGVuOworeworICAgIGlmICh4c3dpKE9TX1JlYWRWYXJWYWwsICJNYWNoaW5lJE5hbWUiLCBzLCBsZW4sIDAsIDMpICYgdl9mbGFnKQorICAgIHsKKwkvKiBWYXJpYWJsZSBkb2VzIG5vdCBleGlzdCAobm9ybWFsIG9wZXJhdGlvbikgKi8KKwlTVFJOQ1BZKHMsICIodW5rbm93bikiLCBsZW4pOworICAgIH0KK30KKworLyoKKyAqIHJldHVybiBwcm9jZXNzIElECisgKi8KKyAgICBsb25nCittY2hfZ2V0X3BpZCgpCit7CisgICAgaWYgKHhzd2koV2ltcF9SZWFkU3lzSW5mbywgNSkgJiB2X2ZsYWcpCisJcmV0dXJuIDA7CisgICAgcmV0dXJuIHIwOworfQorCisvKgorICogR2V0IG5hbWUgb2YgY3VycmVudCBkaXJlY3RvcnkgaW50byBidWZmZXIgJ2J1Zicgb2YgbGVuZ3RoICdsZW4nIGJ5dGVzLgorICogUmV0dXJuIE9LIGZvciBzdWNjZXNzLCBGQUlMIGZvciBmYWlsdXJlLgorICovCisgICAgaW50CittY2hfZGlybmFtZShidWYsIGxlbikKKyAgICBjaGFyX3UgICpidWY7CisgICAgaW50CSAgICBsZW47Cit7CisgICAgaWYgKHhzd2koT1NfRlNDb250cm9sLCAzNywgIkAiLCBidWYsIDAsIDAsIGxlbikgJiB2X2ZsYWcpCisJcmV0dXJuIEZBSUw7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogR2V0IGFic29sdXRlIGZpbGUgbmFtZSBpbnRvIGJ1ZmZlciAnYnVmJyBvZiBsZW5ndGggJ2xlbicgYnl0ZXMuCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIGZvciBzdWNjZXNzCisgKi8KKyAgICBpbnQKK21jaF9GdWxsTmFtZShmbmFtZSwgYnVmLCBsZW4sIGZvcmNlKQorICAgIGNoYXJfdSAqZm5hbWUsICpidWY7CisgICAgaW50IGxlbjsKKyAgICBpbnQJZm9yY2U7CQkvKiBBbHNvIGV4cGFuZCB3aGVuIGFscmVhZHkgYWJzb2x1dGUgcGF0aCBuYW1lLgorCQkJICogTm90IHVzZWQgdW5kZXIgUklTQyBPUy4KKwkJCSAqLworeworICAgIGlmICh4c3dpKE9TX0ZTQ29udHJvbCwgMzcsIGZuYW1lLCBidWYsIDAsIDAsIGxlbikgJiB2X2ZsYWcpCisJcmV0dXJuIEZBSUw7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgImZuYW1lIiBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICovCisgICAgaW50CittY2hfaXNGdWxsTmFtZShmbmFtZSkKKyAgICBjaGFyX3UJKmZuYW1lOworeworICAgIGlmIChzdHJzdHIoZm5hbWUsICI6OiIpICYmIHN0cnN0cihmbmFtZSwiLiQuIikpCisJcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogR2V0IGZpbGUgcGVybWlzc2lvbnMgZm9yICduYW1lJy4KKyAqIFJldHVybnMgLTEgd2hlbiBpdCBkb2Vzbid0IGV4aXN0LgorICovCisgICAgbG9uZworbWNoX2dldHBlcm0obmFtZSkKKyAgICBjaGFyX3UgKm5hbWU7Cit7CisgICAgc3RydWN0IHN0YXQgc3RhdGI7CisKKyAgICBpZiAoc3RhdCgoY2hhciAqKW5hbWUsICZzdGF0YikpCisJcmV0dXJuIC0xOworICAgIHJldHVybiBzdGF0Yi5zdF9tb2RlOworfQorCisvKgorICogc2V0IGZpbGUgcGVybWlzc2lvbiBmb3IgJ25hbWUnIHRvICdwZXJtJworICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAorbWNoX3NldHBlcm0obmFtZSwgcGVybSkKKyAgICBjaGFyX3UgICpuYW1lOworICAgIGxvbmcgICAgcGVybTsKK3sKKyAgICByZXR1cm4gKGNobW9kKChjaGFyICopbmFtZSwgKG1vZGVfdClwZXJtKSA9PSAwID8gT0sgOiBGQUlMKTsKK30KKworLyoKKyAqIFNldCBoaWRkZW4gZmxhZyBmb3IgIm5hbWUiLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIHZvaWQKK21jaF9oaWRlKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIC8qIGNhbid0IGhpZGUgYSBmaWxlICovCit9CisKKy8qCisgKiByZXR1cm4gVFJVRSBpZiAibmFtZSIgaXMgYSBkaXJlY3RvcnkKKyAqIHJldHVybiBGQUxTRSBpZiAibmFtZSIgaXMgbm90IGEgZGlyZWN0b3J5CisgKiByZXR1cm4gRkFMU0UgZm9yIGVycm9yCisgKi8KKyAgICBpbnQKK21jaF9pc2RpcihuYW1lKQorICAgIGNoYXJfdSAqbmFtZTsKK3sKKyAgICBpZiAoeHN3aShPU19GaWxlLCAxNywgbmFtZSkgJiB2X2ZsYWcpCisJcmV0dXJuIEZBTFNFOworICAgIGlmIChyMCA9PSAyIHx8IHIwID09IDMpCisJcmV0dXJuIFRSVUU7CQkvKiBDb3VudCBpbWFnZSBmaWxlcyBhcyBkaXJlY3Rvcmllcy4gKi8KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXR1cm4gMSBpZiAibmFtZSIgY2FuIGJlIGV4ZWN1dGVkLCAwIGlmIG5vdC4KKyAqIFJldHVybiAtMSBpZiB1bmtub3duLiBSZXF1aXJlcyB3aGljaCB0byB3b3JrLgorICovCisgICAgaW50CittY2hfY2FuX2V4ZShuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlyZXR2YWw7CisKKyAgICBidWYgPSBhbGxvYygodW5zaWduZWQpU1RSTEVOKG5hbWUpICsgNyk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCXJldHVybiAtMTsKKyAgICBzcHJpbnRmKChjaGFyICopYnVmLCAid2hpY2ggJXMiLCBuYW1lKTsKKyAgICBwID0gZ2V0X2NtZF9vdXRwdXQoYnVmLCBTSEVMTF9TSUxFTlQpOworICAgIHZpbV9mcmVlKGJ1Zik7CisgICAgaWYgKHAgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisgICAgLyogcmVzdWx0IGNhbiBiZTogIm5hbWU6IENvbW1hbmQgbm90IGZvdW5kIiAqLworICAgIHJldHZhbCA9ICgqcCAhPSBOVUwgJiYgc3Ryc3RyKChjaGFyICopcCwgIm5vdCBmb3VuZCIpID09IE5VTEwpOworICAgIHZpbV9mcmVlKHApOworICAgIHJldHVybiByZXR2YWw7Cit9CisjZW5kaWYKKworLyoKKyAqIENoZWNrIHdoYXQgIm5hbWUiIGlzOgorICogTk9ERV9OT1JNQUw6IGZpbGUgb3IgZGlyZWN0b3J5IChvciBkb2Vzbid0IGV4aXN0KQorICogTk9ERV9XUklUQUJMRTogd3JpdGFibGUgZGV2aWNlLCBzb2NrZXQsIGZpZm8sIGV0Yy4KKyAqIE5PREVfT1RIRVI6IG5vbi13cml0YWJsZSB0aGluZ3MKKyAqLworICAgIGludAorbWNoX25vZGV0eXBlKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIC8qIFRPRE8gKi8KKyAgICByZXR1cm4gTk9ERV9OT1JNQUw7Cit9CisKKyAgICB2b2lkCittY2hfZWFybHlfaW5pdCgpCit7CisgICAgLyogVHVybiBvZmYgYWxsIHRoZSBob3JyaWJsZSBmaWxlbmFtZSBtdW5naW5nIGluIFVuaXhMaWIuICovCisgICAgX19yaXNjb3NpZnlfY29udHJvbCA9IF9fUklTQ09TSUZZX05PX1BST0NFU1M7Cit9CisKKyAgICB2b2lkCittY2hfZXhpdChyKQorICAgIGludCByOworeworICAgIHNldHRtb2RlKFRNT0RFX0NPT0spOworICAgIGV4aXRpbmcgPSBUUlVFOworICAgIG91dF9mbHVzaCgpOworICAgIG1sX2Nsb3NlX2FsbChUUlVFKTsJCS8qIHJlbW92ZSBhbGwgbWVtZmlsZXMgKi8KKworI2lmZGVmIEZFQVRfR1VJCisgICAgaWYgKGd1aS5pbl91c2UpCisJZ3VpX2V4aXQocik7CisjZW5kaWYKKyAgICBzd2koT1NfTmV3TGluZSk7CisgICAgaWYgKG9sZF9lc2NhcGVfc3RhdGUgIT0gLTEpCisJc3dpKE9TX0J5dGUsIDIyOSwgb2xkX2VzY2FwZV9zdGF0ZSwgMCk7CisgICAgaWYgKG9sZF9jdXJzb3Jfc3RhdGUgIT0gLTEpCisJc3dpKE9TX0J5dGUsIDQsIG9sZF9jdXJzb3Jfc3RhdGUpOworICAgIGV4aXQocik7Cit9CisKKyAgICB2b2lkCittY2hfc2V0dG1vZGUodG1vZGUpCisgICAgaW50CQl0bW9kZTsJICAgIC8qIFRNT0RFX1JBVyBvciBUTU9ERV9DT09LICovCit7CisgICAgaWYgKHRtb2RlID09IFRNT0RFX0NPT0spCisgICAgeworCXJvX2xpbmVfbW9kZSA9IFRSVUU7CisJcmV0dXJuOworICAgIH0KKworICAgIHJvX2xpbmVfbW9kZSA9IEZBTFNFOworCisgICAgaWYgKHRlcm1fY29uc29sZSkKKyAgICB7CisJLyogQmxvY2sgY3Vyc29yLiAqLworCXN3aShPU19Xcml0ZU4sCisJCSJcMDI3XDAwMFwwMTJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIiwKKwkJMTApOworCisJLyogRGlzYWJsZSB0aGUgc3RhbmRhcmQgY3Vyc29yIGtleSBhY3Rpb25zLiAqLworCXN3aShPU19CeXRlLCA0LCAxKTsKKwlpZiAob2xkX2N1cnNvcl9zdGF0ZSA9PSAtMSkKKwkgICAgb2xkX2N1cnNvcl9zdGF0ZSA9IHIxOworICAgIH0KKworICAgIC8qIFN0b3AgRXNjYXBlIGZyb20gcXVpdHRpbmcgVmltISAqLworICAgIHN3aShPU19CeXRlLCAyMjksIDEsIDApOworICAgIGlmIChvbGRfZXNjYXBlX3N0YXRlID09IC0xKQorCW9sZF9lc2NhcGVfc3RhdGUgPSByMTsKK30KKworLyoKKyAqIHNldCBtb3VzZSBjbGlja3Mgb24gb3Igb2ZmIChvbmx5IHdvcmtzIGZvciB4dGVybXMpCisgKi8KKyAgICB2b2lkCittY2hfc2V0bW91c2Uob24pCisgICAgaW50CSAgICBvbjsKK3sKK30KKworLyoKKyAqIHNldCBzY3JlZW4gbW9kZSwgYWx3YXlzIGZhaWxzLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIGludAorbWNoX3NjcmVlbm1vZGUoYXJnKQorICAgIGNoYXJfdSAgICphcmc7Cit7CisgICAgRU1TRyhfKGVfc2NyZW5tb2RlKSk7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKy8qCisgKiBUcnkgdG8gZ2V0IHRoZSBjdXJyZW50IHdpbmRvdyBzaXplLgorICogUmV0dXJuIE9LIHdoZW4gc2l6ZSBjb3VsZCBiZSBkZXRlcm1pbmVkLCBGQUlMIG90aGVyd2lzZS4KKyAqIFNpbXBseSByZXR1cm4gcmVzdWx0cyBzdG9yZWQgYnkgbWNoX2luaXQoKSBpZiB3ZSBhcmUgdGhlCisgKiBtYWNoaW5lJ3MgY29uc29sZS4gSWYgbm90LCB3ZSBkb24ndCBrbm93IGhvdyBiaWcgdGhlIHNjcmVlbiBpcy4KKyAqLworICAgIGludAorbWNoX2dldF9zaGVsbHNpemUoKQoreworICAgIC8qIGlmIHNpemUgY2hhbmdlZDogc2NyZWVuYWxsb2Mgd2lsbCBhbGxvY2F0ZSBuZXcgc2NyZWVuIGJ1ZmZlcnMgKi8KKyAgICByZXR1cm4gdGVybV9jb25zb2xlID8gT0sgOiBGQUlMOworfQorCisvKgorICogQ2FuJ3QgY2hhbmdlIHRoZSBzaXplLgorICogQXNzdW1lIHRoZSB1c2VyIGtub3dzIHdoYXQgaGUncyBkb2luZyBhbmQgdXNlIHRoZSBuZXcgdmFsdWVzLgorICovCisgICAgdm9pZAorbWNoX3NldF9zaGVsbHNpemUoKQoreworICAgIC8qIEFzc3VtZSB0aGUgdXNlciBrbm93cyB3aGF0IGhlJ3MgZG9pbmcgYW5kIHVzZSB0aGUgbmV3IHZhbHVlcy4gKi8KK30KKworLyoKKyAqIFJvd3MgYW5kL29yIENvbHVtbnMgaGFzIGNoYW5nZWQuCisgKi8KKyAgICB2b2lkCittY2hfbmV3X3NoZWxsc2l6ZSgpCit7CisgICAgLyogTm90aGluZyB0byBkby4gKi8KK30KKworICAgIGludAorbWNoX2NhbGxfc2hlbGwoY21kLCBvcHRpb25zKQorICAgIGNoYXJfdQkqY21kOworICAgIGludAkJb3B0aW9uczsJLyogU0hFTExfKiwgc2VlIHZpbS5oICovCit7CisgICAgaW50CQlyZXR2YWw7CisgICAgaW50CQl0bW9kZSA9IGN1cl90bW9kZTsKKworICAgIGlmIChjbWQgPT0gTlVMTCkKKwljbWQgPSAoY2hhcl91ICopICJHT1MiOworCisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSkKKwlyZXR1cm4gZ3VpX21jaF9jYWxsX3NoZWxsKGNtZCwgb3B0aW9ucyk7CisjZW5kaWYKKyAgICBpZiAob3B0aW9ucyAmIFNIRUxMX0NPT0tFRCkKKwlzZXR0bW9kZShUTU9ERV9DT09LKTsJCS8qIHNldCB0byBub3JtYWwgbW9kZSAqLworICAgIE1TR19QVVRTKCJcbiIpOworCisgICAvKiBJIGRvbid0IGV2ZW4gd2FudCB0byB0aGluayBhYm91dCB3aGF0IFVuaXhMaWIgbXVzdAorICAgICogYmUgZG9pbmcgdG8gYWxsb3cgdGhpcyB0byB3b3JrLi4uCisgICAgKi8KKyAgICByZXR2YWwgPSBzeXN0ZW0oY21kKTsKKyAgICBpZiAocmV0dmFsICYmICEob3B0aW9ucyAmIFNIRUxMX1NJTEVOVCkpCisJRU1TRyhzdHJlcnJvcihFT1BTWVMpKTsJCS8qIERvZXNuJ3Qgc2VlbSB0byBzZXQgZXJybm8/ICovCisKKyAgICBzd2koT1NfQnl0ZSwgMjI5LCAxLCAwKTsJCS8qIFJlLWRpc2FibGUgZXNjYXBlICovCisgICAgaWYgKHRtb2RlID09IFRNT0RFX1JBVykKKwlzZXR0bW9kZShUTU9ERV9SQVcpOwkJLyogc2V0IHRvIHJhdyBtb2RlICovCisgICAgcmV0dXJuIHJldHZhbCA/IEZBSUwgOiBPSzsKK30KKworLyoKKyAqIENoZWNrIGZvciBFc2NhcGUgYmVpbmcgcHJlc3NlZCByaWdodCBub3cuCisgKiBbIGRpZmZlcmVudCBpZiAhdGVybV9jb25zb2xlPyBdCisgKi8KKyAgICB2b2lkCittY2hfYnJlYWtjaGVjaygpCit7CisgICAgaWYgKHhzd2koT1NfQnl0ZSwgMTIxLCAweGYwKSAmIHZfZmxhZykKKwlyZXR1cm47CisgICAgaWYgKHIxID09IDB4ZmYpCisgICAgeworCWdvdF9pbnQgPSBUUlVFOworCXN3aShPU19CeXRlLCAxNSwgMSk7CS8qIEZsdXNoIGlucHV0IGJ1ZmZlciAqLworICAgIH0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IGV4cGFuZCBvbmUgcGF0aCBjb21wb25lbnQgaW50byBhbGwgbWF0Y2hpbmcgZmlsZXMgYW5kL29yCisgKiBkaXJlY3Rvcmllcy4KKyAqICJwYXRoIiBoYXMgYmFja3NsYXNoZXMgYmVmb3JlIGNoYXJzIHRoYXQgYXJlIG5vdCB0byBiZSBleHBhbmRlZC4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgZm91bmQuCisgKi8KKyAgICBpbnQKK21jaF9leHBhbmRwYXRoKGdhcCwgcGF0aCwgZmxhZ3MpCisgICAgZ2FycmF5X1QJKmdhcDsJLyogR3JvdyBhcnJheSBmb3IgcmVzdWx0cy4gKi8KKyAgICBjaGFyX3UJKnBhdGg7CisgICAgaW50CQlmbGFnczsJLyogRVdfKiBmbGFncyAqLworeworICAgIGludAkJZ290OwkvKiBOdW1iZXIgb2YgbWF0Y2hlcy4gKi8KKyAgICBjaGFyX3UJKnBhdHRlcm47CisKKyAgIC8qIFBsYW46CisgICAgKgorICAgICogMSkgR2V0IGZpcnN0IHBhcnQgb2YgcGF0aCAtIG5vIHdpbGRjYXJkcworICAgICogMikgR2V0IG5leHQgcGF0aCBlbGVtZW50ICh3aWxkY2FyZGVkKQorICAgICogMykgR2V0IHJlc3Qgb2YgcGF0aAorICAgICoKKyAgICAqIElmICgzKSBpcyBub3RoaW5nIHRoZW4gb25seSB0aGUgbGVhZiBpcyB3aWxkY2FyZGVkIC0gYWRkIHRvIGdhcAorICAgICogT3RoZXJ3aXNlIGNhbGwgcmVjdXJzaXZlbHkgZm9yIGVhY2ggcGF0aCBpbiAoMiksIHBhc3NpbmcgKDMpCisgICAgKgorICAgICogVGhpcyBpcyBqdXN0IHRoZSBoZWFkZXIgZnVuY3Rpb24uCisgICAgKi8KKworICAgIC8qIFdlIG11c3QgYmUgYWJsZSB0byBtb2RpZml5IHBhdGgsIHNvIG1ha2UgYSBjb3B5ICovCisgICAgcGF0dGVybiA9IHZpbV9zdHJzYXZlKHBhdGgpOworICAgIGlmIChwYXR0ZXJuID09IE5VTEwpCisJcmV0dXJuIDA7CisgICAgZ290ID0gZXhwYW5kX3NlY3Rpb24oZ2FwLCAoY2hhcl91ICopIiIsIHBhdHRlcm4sIGZsYWdzKTsKKyAgICB2aW1fZnJlZShwYXR0ZXJuKTsKKyAgICByZXR1cm4gZ290OworfQorCisvKgorICogZXhwYW5kX3NlY3Rpb24oZ2FwLCAiJC5EaXIxLkRpcjIiLCAiQUJCQSoubXlsZWFmIyMiKQorICoKKyAqIGNhbGxzIGV4cGFuZF9zZWN0aW9uKGdhcCwgIiQuRGlyMS5EaXIyLkFCQkFfR29sZCIsICJteWxlYWYjIyIpCisgKiAgIGFuZCBleHBhbmRfc2VjdGlvbihnYXAsICIkLkRpcjEuRGlyMi5BQkJBX0xpdmUiLCAibXlsZWFmIyMiKQorICoKKyAqIElmIHJlc3QgaXMganVzdCBhIGxlYWYgdGhlbiBhbGwgbWF0Y2hlcyBhcmUgYWRkZWQgdG8gZ2FwLgorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGl0ZW1zIGFkZGVkIHRvIGdhcC4KKyAqLworICAgIGludAorZXhwYW5kX3NlY3Rpb24oZ2FwLCByb290LCByZXN0LCBmbGFncykKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGNoYXJfdQkqcm9vdDsJLyogTm9uLXdpbGRjYXJkZWQgcGF0aCB0byBzZWFyY2ggKi8KKyAgICBjaGFyX3UJKnJlc3Q7CS8qIFdpbGRjYXJkZWQgcmVtYWluZGVyIG9mIHBhdGggKi8KKyAgICBpbnQJCWZsYWdzOwkvKiBBZGQgZGlycy9maWxlcy9taXNzaW5nIG9iamVjdHMuICovCit7CisgICAgc3RhdGljIGNoYXJfdSBidWZbTUFYUEFUSExdOwkvKiBUZW1wb3JhcnkgYnVmZmVyLiAqLworICAgIGNoYXJfdSBkaXJbTUFYUEFUSExdOworICAgIGludCBzdGFydF9lbGVtZW50ID0gLTE7CQkvKiBTdGFydCBvZiB3aWxkY2FyZGVkIGVsZW1lbnQgKi8KKyAgICBjaGFyX3UgYzsKKyAgICBpbnQgaTsKKyAgICBpbnQgZ290LCBkaXJfcG9zOworICAgIGludCBidWZsZW47CQkJLyogQ2hhcnMgdXNlZCBpbiBidWZbXSAqLworICAgIGludCBjb2xvbiA9IDA7CQkvKiBEaXIgZW5kcyBpbiAnOicgKi8KKworICAgIGJ1ZmxlbiA9IHN0cmxlbihyb290KTsKKyAgICBTVFJOQ1BZKGJ1Ziwgcm9vdCwgYnVmbGVuKTsJLyogQ29weSByb290IGludG8gYnVmZmVyLiAqLworCisgICAvKgorICAgICogRmluZCBlbmQgb2Ygbm9ud2lsZGNhcmRlZCBzZWN0aW9uLgorICAgICogQ291bnQgJzonIGFzIGEgcGF0aCBzZXAgc2luY2UgVmltOkJ1ZyogaXMgYSB2YWxpZCBwYXRobmFtZS4KKyAgICAqLworCisgICAgZm9yIChpID0gMDsgYyA9IHJlc3RbaV07IGkrKykKKyAgICB7CisJaWYgKGMgPT0gUEFUSFNFUCkKKwl7CisJICAgIHN0YXJ0X2VsZW1lbnQgPSBpOworCSAgICBjb2xvbiA9IDA7CisJfQorCWlmIChjID09ICc6JykKKwl7CisJICAgIHN0YXJ0X2VsZW1lbnQgPSBpICsgMTsKKwkgICAgY29sb24gPSAxOworCX0KKwlpZiAoYyA9PSAnIycgfHwgYyA9PSAnKicpCisJICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoYyA9PSAwKQorCXN0YXJ0X2VsZW1lbnQgPSBpOworCisgICAvKgorICAgICogc3RhcnRfZWxlbWVudCArPiB0ZXJtaW5hdG9yIGZvciBub24td2lsZGNhcmRlZCBzZWN0aW9uLgorICAgICogVHJhbnNmZXIgdGhpcyBiaXQgaW50byBidWYuCisgICAgKi8KKyAgICBpZiAoYnVmbGVuICsgc3RhcnRfZWxlbWVudCArIDQgPj0gTUFYUEFUSEwpCisgICAgICAgcmV0dXJuIDA7CQkJLyogQnVmZmVyIGZ1bGwgKi8KKyAgICBpZiAoc3RhcnRfZWxlbWVudCA+PSAwKQorICAgIHsKKwlpZiAoKnJvb3QgJiYgIWNvbG9uKQorCSAgICBidWZbYnVmbGVuKytdID0gUEFUSFNFUDsKKwlzdHJuY3B5KGJ1ZiArIGJ1ZmxlbiwgcmVzdCwgc3RhcnRfZWxlbWVudCk7CisJYnVmbGVuICs9IHN0YXJ0X2VsZW1lbnQ7CisgICAgfQorICAgIGJ1ZltidWZsZW5dID0gMDsKKworICAgLyoKKyAgICAqIERpZCB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2l0aG91dCBoaXR0aW5nIGFueSB3aWxkY2FyZHM/CisgICAgKi8KKyAgICBpZiAoYyA9PSAwKQorICAgIHsKKwkvKiBZZXMgLSBhZGQgY29tYmluZWQgcGF0aCB0byBncm93IGFycmF5IGFuZCByZXR1cm4uICovCisJYWRkZmlsZShnYXAsIGJ1ZiwgZmxhZ3MpOworCXJldHVybiAxOworICAgIH0KKworICAgIGlmIChzdGFydF9lbGVtZW50IDwgMCB8fCAhY29sb24pCisJc3RhcnRfZWxlbWVudCsrOworICAgIHJlc3QgKz0gc3RhcnRfZWxlbWVudDsKKworICAgLyoKKyAgICAqIHJlc3QgZG9lcyBjb250YWluIHdpbGRjYXJkcyBpZiB3ZSBnZXQgaGVyZS4KKyAgICAqCisgICAgKiBOb3cgOiBoYXZlIHdlIHJlYWNoZWQgdGhlIGxlYWYgbmFtZXMgcGFydCB5ZXQ/CisgICAgKiBJZiBzbywgYWRkIGFsbCBtYXRjaGVzIChmaWxlcyBhbmQgZGlycykgdG8gZ2FwLgorICAgICogSWYgbm90LCBnZXQgbmV4dCBwYXRoIGVsZW1lbnQgYW5kIHNjYW4gYWxsIG1hdGNoaW5nIGRpcmVjdG9yaWVzLgorICAgICovCisKKyAgICBzdGFydF9lbGVtZW50ID0gLTE7CisgICAgZm9yIChpID0gMDsgcmVzdFtpXTsgaSsrKQorICAgIHsKKwlpZiAocmVzdFtpXSA9PSAnLicpCisJeworCSAgICBzdGFydF9lbGVtZW50ID0gaTsKKwkgICAgcmVzdFtpXSA9IDA7CQkvKiBCcmVhayBzdHJpbmcgaGVyZS4gKi8KKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIC8qIElmIHN0YXJ0X2VsZW1lbnQgaXMgLTEgdGhlbiB3ZSBhcmUgbWF0Y2hpbmcgbGVhZiBuYW1lcyAqLworCisgICAgcjMgPSAwOwkJCS8qIE51bWJlciBvZiBvYmpzIHJlYWQuICovCisgICAgZGlyX3BvcyA9IDA7CQkvKiBQb3NpdGlvbiB0aHJvdWdoIGRpcmVjdG9yeS4gKi8KKyAgICBnb3QgPSAwOwkJCS8qIEZpbGVzIGFkZGVkIHNvIGZhci4gKi8KKyAgICB3aGlsZSAoZGlyX3BvcyAhPSAtMSkKKyAgICB7CisJYnVmW2J1Zmxlbl0gPSAwOworCWlmICh4c3dpKE9TX0dCUEIsIDksCisJCWJ1ZiwJCQkJLyogRGlyZWN0b3J5IHRvIHNjYW4uICovCisJCWJ1ZiArIGJ1ZmxlbiArICgxIC0gY29sb24pLAkvKiBCdWZmZXIgZm9yIHJlc3VsdC4gKi8KKwkJMSwJCQkvKiBOdW1iZXIgb2Ygb2JqZWN0cyB0byByZWFkLiAqLworCQlkaXJfcG9zLAkJLyogU2VhcmNoIHBvc2l0aW9uLiAqLworCQlNQVhQQVRITCAtIDIgLSBidWZsZW4sCS8qIFNpemUgb2YgcmVzdWx0IGJ1ZmZlci4gKi8KKwkJcmVzdCkJCQkvKiBXaWxkY2FyZGVkIGxlYWZuYW1lLiAqLworCQkJJiB2X2ZsYWcpCisJeworCSAgICBFTVNHKHIwICsgNCk7CisJICAgIHI0ID0gLTE7CisJfQorCWRpcl9wb3MgPSByNDsJCS8qIHI0IGNvcnJ1cHRlZCBieSBhZGRmaWxlKCkgKi8KKwlpZiAocjMgPiAwKQorCXsKKwkgICAgY2hhcl91ICpwYXRoID0gYnVmOworCSAgICBpZiAoYnVmbGVuID09IDApCisJCXBhdGgrKzsJCQkvKiBEb24ndCBkbyAnLkZpbGUnICovCisJICAgIGVsc2UgaWYgKCFjb2xvbikKKwkJYnVmW2J1Zmxlbl0gPSAnLic7CQkvKiBKb2luIHBhdGggYW5kIGxlYWYgKi8KKworCSAgIC8qIFBhdGggLT4gZnVsbCBwYXRoIG9mIG9iamVjdCBmb3VuZCAqLworCSAgICBpZiAoc3RhcnRfZWxlbWVudCA9PSAtMSkKKwkgICAgeworCQlhZGRmaWxlKGdhcCwgcGF0aCwgZmxhZ3MpOworCQlnb3QrKzsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkgICAgICAgLyogU2NhbiBpbnRvIHN1YmRpcmVjdG9yaWVzIGFuZCBpbWFnZXM7IGlnbm9yZSBmaWxlcyAqLworCQlzd2koT1NfRmlsZSwgMTcsIHBhdGgpOworCQlpZiAocjAgPT0gMiB8fCByMCA9PSAzKQorCQkgICAgZ290ICs9IGV4cGFuZF9zZWN0aW9uKGdhcCwKKwkJCQkJCXBhdGgsCisJCQkJCQlyZXN0ICsgc3RhcnRfZWxlbWVudCArIDEsCisJCQkJCQlmbGFncyk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogUmVzdG9yZSB0aGUgZG90IGlmIHdlIHJlbW92ZWQgaXQuICovCisgICAgaWYgKHN0YXJ0X2VsZW1lbnQgPj0gMCkKKwlyZXN0W3N0YXJ0X2VsZW1lbnRdID0gJy4nOworICAgIHJldHVybiBnb3Q7Cit9CisKKy8qCisgKiBtY2hfZXhwYW5kX3dpbGRjYXJkcygpIC0gdGhpcyBjb2RlIGRvZXMgd2lsZC1jYXJkIHBhdHRlcm4gbWF0Y2hpbmcgdXNpbmcKKyAqIHRoZSBzaGVsbC4gSXQgaXNuJ3QgdXNlZCB1bmRlciBSSVNDIE9TLgorICoKKyAqIHJldHVybiBPSyBmb3Igc3VjY2VzcywgRkFJTCBmb3IgZXJyb3IgKHlvdSBtYXkgbG9zZSBzb21lIG1lbW9yeSkgYW5kIHB1dAorICogYW4gZXJyb3IgbWVzc2FnZSBpbiAqZmlsZS4KKyAqCisgKiBudW1fcGF0IGlzIG51bWJlciBvZiBpbnB1dCBwYXR0ZXJucworICogcGF0IGlzIGFycmF5IG9mIHBvaW50ZXJzIHRvIGlucHV0IHBhdHRlcm5zCisgKiBudW1fZmlsZSBpcyBwb2ludGVyIHRvIG51bWJlciBvZiBtYXRjaGVkIGZpbGUgbmFtZXMKKyAqIGZpbGUgaXMgcG9pbnRlciB0byBhcnJheSBvZiBwb2ludGVycyB0byBtYXRjaGVkIGZpbGUgbmFtZXMKKyAqLworICAgIGludAorbWNoX2V4cGFuZF93aWxkY2FyZHMobnVtX3BhdCwgcGF0LCBudW1fZmlsZSwgZmlsZSwgZmxhZ3MpCisgICAgaW50CQkgICAgbnVtX3BhdDsKKyAgICBjaGFyX3UJICAqKnBhdDsKKyAgICBpbnQJCSAgICpudW1fZmlsZTsKKyAgICBjaGFyX3UJICoqKmZpbGU7CisgICAgaW50CQkgICAgZmxhZ3M7CQkvKiBFV18qIGZsYWdzICovCit7CisgICAgLyogVGhpcyBkb2Vzbid0IGdldCBjYWxsZWQgdW5sZXNzIFNQRUNJQUxfV0lMRENIQVIgaXMgZGVmaW5lZC4gKi8KKyAgICByZXR1cm4gRkFJTDsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmICJwIiBjb250YWlucyB3aWxkY2FyZHMgd2hpY2ggY2FuIGJlIGV4cGFuZGVkIGJ5CisgKiBtY2hfZXhwYW5kcGF0aCgpLgorICovCisgICAgaW50CittY2hfaGFzX2V4cF93aWxkY2FyZChwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBpZiAodmltX3N0cnBicmsoKGNoYXJfdSAqKSIqIyIsIHApKQorCXJldHVybiBUUlVFOworICAgIHJldHVybiBGQUxTRTsKK30KKworLyogUmV0dXJuIFRSVUUgaWYgInAiIGNvbnRhaW5zIHdpbGRjYXJkcy4gKi8KKyAgICBpbnQKK21jaF9oYXNfd2lsZGNhcmQocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgaWYgKHZpbV9zdHJwYnJrKChjaGFyX3UgKikiKiNgIiwgcCkpCisJcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIEZBTFNFOworfQorCisgICAgaW50CQkJLyogc2VlIFVuaXggdW5saW5rKDIpICovCittY2hfcmVtb3ZlKGZpbGUpCisgICAgY2hhcl91ICpmaWxlOwkvKiBOYW1lIG9mIGZpbGUgdG8gZGVsZXRlLiAqLworeworICAgIGlmICh4c3dpKE9TX0ZTQ29udHJvbCwgMjcsIGZpbGUsIDAsIDApICYgdl9mbGFnKQorCXJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworLyogVHJ5IHRvIG1ha2UgZXhpc3Rpbmcgc2NyaXB0cyB3b3JrIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3IHN0cmluZyAoZnJlZWQgYnkgY2FsbGVyKSwgb3IgTlVMTAorICoKKyAqIFR3byBtYWluIGNhc2VzOgorICogLSBBYnNvbHV0ZSA6ICRWSU0vc3ludGF4L2hlbHAudmltCisgKiAtIFJlbGF0aXZlIDogQWRmczo6NC4kLiFWaW0uUmVzb3VyY2VzLlN5bnRheC9oZWxwLnZpbQorICovCisgICAgY2hhcl91ICoKK21jaF9tdW5nZV9mbmFtZShmbmFtZSkKKyAgICBjaGFyX3UgKmZuYW1lOworeworICAgIGNoYXJfdSBjOworICAgIGludCBsZW47CisgICAgY2hhcl91ICpyZXR2YWw7CisKKyAgICByZXR2YWwgPSBmbmFtZSA9IHZpbV9zdHJzYXZlKGZuYW1lKTsKKyAgICBpZiAoZm5hbWUgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmIChzdHJuY21wKGZuYW1lLCAiJFZJTS8iLCA1KSA9PSAwKQorICAgIHsKKwlzdHJuY3B5KGZuYW1lLCAiVmltOiIsIDQpOworCWZvciAoZm5hbWUgKz0gNTsgYyA9ICpmbmFtZTsgZm5hbWUrKykKKwl7CisJICAgIGlmIChjID09ICcuJykKKwkJYnJlYWs7CisJICAgIGlmIChjID09ICcvJykKKwkJZm5hbWVbLTFdID0gJy4nOworCSAgICBlbHNlCisJCWZuYW1lWy0xXSA9IGM7CisJfQorCWZuYW1lWy0xXSA9ICdcMCc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaWxlIGV4aXN0cyB3aXRob3V0IG1vZGlmaWNhdGlvbi4gKi8KKwlpZiAoeHN3aShPU19GaWxlLCAxNywgZm5hbWUpICYgdl9mbGFnKQorCSAgICByMCA9PSAwOwkJLyogSW52YWxpZCBmaWxlbmFtZT8gKi8KKwlpZiAocjApCisJICAgIHJldHVybiByZXR2YWw7CisKKwlsZW4gPSBzdHJsZW4oZm5hbWUpOworCWlmIChzdHJjbXAoZm5hbWUgKyBsZW4gLSA0LCAiLnZpbSIpID09IDApCisJeworCSAgICBmbmFtZVtsZW4gLSA0XSA9ICdcMCc7CisJICAgIGZvciAoOyBjID0gKmZuYW1lOyBmbmFtZSsrKQorCSAgICB7CisJCWlmIChjID09ICcvJykKKwkJICAgICpmbmFtZSA9ICcuJzsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyogUXVpY2tGaXggcmVhZHMgbXVuZ2VkIG5hbWVzIGZyb20gdGhlIGVycm9yIGZpbGUuCisgKiBDb3JyZWN0IHRoZW0uCisgKi8KKyAgICBpbnQKK3JvX2J1Zmxpc3RfYWRkKG9sZF9uYW1lKQorICAgIGNoYXJfdSAgKm9sZF9uYW1lOwkvKiBOYW1lIG9mIGZpbGUgZm91bmQgYnkgcXVpY2tmaXggKi8KK3sKKyAgICBjaGFyX3UgICpmbmFtZTsKKyAgICBjaGFyX3UgICpsZWFmOwkvKiBQb2ludGVyIHRvIHN0YXJ0IG9mIGxlYWYgaW4gb2xkX25hbWUgKi8KKyAgICBjaGFyX3UgICpwdHI7CisgICAgY2hhcl91ICBjOworICAgIGludAkgICAgcmV0dmFsOworCisgICAgaWYgKG9sZF9uYW1lID09IE5VTEwpCisJcmV0dXJuIGJ1Zmxpc3RfYWRkKE5VTEwsIDApOworCisgICAgLyogQ29weSB0aGUgbmFtZSBzbyB3ZSBjYW4gbWVzcyBhcm91bmQgd2l0aCBpdC4gKi8KKyAgICBmbmFtZSA9IHZpbV9zdHJzYXZlKG9sZF9uYW1lKTsKKyAgICBpZiAoZm5hbWUgPT0gTlVMTCkKKwkvKiBPdXQgb2YgbWVtb3J5IC0gY2FuJ3QgbW9kaWZ5IG5hbWUgKi8KKwlyZXR1cm4gYnVmbGlzdF9hZGQob2xkX25hbWUsIDApOworCisgICAgLyogQ2hhbmdlIGBkaXIvbWFpbi5jJyBpbnRvIGBkaXIuYy5tYWluJyAqLworICAgIGxlYWYgPSBmbmFtZTsKKyAgICBmb3IgKHB0ciA9IGZuYW1lOyBjID0gKnB0cjsgcHRyKyspCisgICAgeworCWlmIChjID09ICcvJykKKwl7CisJICAgIGxlYWYgPSBwdHIgKyAxOworCSAgICAqcHRyID0gJy4nOworCX0KKwllbHNlIGlmIChjID09ICcuJykKKwkgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChjID09ICcuJykKKyAgICB7CisJLyogQ2hhbmdlIGBtYWluLmMnIGludG8gYGMubWFpbicKKwkgKgkgIHwgICAgfAorCSAqICAgICAgbGVhZiAgcHRyCisJICovCisJcHRyICs9IG9sZF9uYW1lIC0gZm5hbWU7CisJKnB0ciA9ICdcMCc7CisJc3ByaW50ZihsZWFmLAorCQkiJXMuJXMiLAorCQlwdHIgKyAxLAorCQlsZWFmIC0gZm5hbWUgKyBvbGRfbmFtZSk7CisgICAgfQorCisgICAgcmV0dmFsID0gYnVmbGlzdF9hZGQoZm5hbWUsIDApOworICAgIGZyZWUoZm5hbWUpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIENoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgKiBTdHJpcCB0cmFpbGluZyBkb3RzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVzZSB3aXRoIGZpbGVuYW1lIGNvbXBsZXRpb24uCisgKiBSZXR1cm4gMCBmb3Igc3VjY2VzcywgLTEgZm9yIGZhaWx1cmUuCisgKi8KKyAgICBpbnQKK21jaF9jaGRpcihkaXIpCisgICAgY2hhcl91ICAqZGlyOworeworICAgIGludAkgICAgbGVuZ3RoOworICAgIGludAkgICAgcmV0dmFsOworICAgIGNoYXJfdSAgKm5ld19kaXI7CisKKyAgICBsZW5ndGggPSBzdHJsZW4oZGlyKTsKKyAgICBpZiAoZGlyW2xlbmd0aCAtIDFdICE9ICcuJykKKwlyZXR1cm4gY2hkaXIoZGlyKTsJICAgIC8qIE5vIHRyYWlsaW5nIGRvdHMgLSBub3RoaW5nIHRvIGRvLiAqLworICAgIG5ld19kaXIgPSB2aW1fc3Ryc2F2ZShkaXIpOworICAgIGlmIChuZXdfZGlyID09IE5VTEwpCisJcmV0dXJuIGNoZGlyKGRpcik7CSAgICAvKiBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkuICovCisKKyAgICB3aGlsZSAobmV3X2RpclstLWxlbmd0aF0gPT0gJy4nKQorCW5ld19kaXJbbGVuZ3RoXSA9ICdcMCc7CisKKyAgICByZXR2YWwgPSBjaGRpcihuZXdfZGlyKTsKKyAgICB2aW1fZnJlZShuZXdfZGlyKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKiBFeGFtaW5lIHRoZSBuYW1lZCBmaWxlLCBhbmQgc2V0IHRoZSAnb3NmaWxldHlwZScgb3B0aW9uCisgKiAoaW4gY3VyYnVmKSB0byB0aGUgZmlsZSdzIHR5cGUuCisgKi8KKyAgICB2b2lkCittY2hfcmVhZF9maWxldHlwZShmaWxlKQorICAgIGNoYXJfdSAgKmZpbGU7Cit7CisgICAgaW50CSAgICB0eXBlOworICAgIGNoYXJfdSAgdHlwZV9zdHJpbmdbOV07CisgICAgaW50CSAgICBpOworCisgICAgaWYgKHhzd2koT1NfRmlsZSwgMjMsIGZpbGUpICYgdl9mbGFnKQorCXR5cGUgPSAweGZmZjsJCS8qIERlZmF1bHQgdG8gVGV4dCAqLworICAgIGVsc2UKKwl0eXBlID0gcjY7CisKKyAgICAvKiBUeXBlIGlzIHRoZSBudW1lcmljYWwgdmFsdWUgLSBzZWUgaWYgd2UgaGF2ZSBhIHRleHR1YWwgZXF1aXZhbGVudCAqLworICAgIHN3aShPU19GU0NvbnRyb2wsIDE4LCAwLCB0eXBlKTsKKyAgICAoKGludCAqKSB0eXBlX3N0cmluZylbMF0gPSByMjsKKyAgICAoKGludCAqKSB0eXBlX3N0cmluZylbMV0gPSByMzsKKyAgICB0eXBlX3N0cmluZ1s4XSA9IDA7CisgICAgZm9yIChpID0gMDsgdHlwZV9zdHJpbmdbaV0gPiAnICc7IGkrKykKKwk7CisgICAgdHlwZV9zdHJpbmdbaV0gPSAwOworCisgICAgc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0KCJvc2ZpbGV0eXBlIiwgLTEsIHR5cGVfc3RyaW5nLCBPUFRfRlJFRSk7CisgICAgcmV0dXJuOworfQorCisgICAgdm9pZAorbWNoX3NldF9maWxldHlwZShmaWxlLCB0eXBlKQorICAgIGNoYXJfdSAgKmZpbGU7CisgICAgY2hhcl91ICAqdHlwZTsKK3sKKyAgICBpZiAoeHN3aShPU19GU0NvbnRyb2wsIDMxLCB0eXBlKSAmIHZfZmxhZykKKyAgICB7CisJRU1TRyhfKCJFMzY2OiBJbnZhbGlkICdvc2ZpbGV0eXBlJyBvcHRpb24gLSB1c2luZyBUZXh0IikpOworCXIyID0gMHhmZmY7CisgICAgfQorCisgICAgc3dpKE9TX0ZpbGUsIDE4LCBmaWxlLCByMik7Cit9CisKKy8qIFJldHVybiBUUlVFIGlmIHRoZSBmaWxlJ3MgdHlwZSBtYXRjaGVzICd0eXBlJworICogUklTQyBPUyB0eXBlcyBhbHdheXMgc3RhcnQgd2l0aCAnJicKKyAqLworICAgIGludAorbWNoX2NoZWNrX2ZpbGV0eXBlKGZuYW1lLCB0eXBlKQorICAgIGNoYXJfdSAgKmZuYW1lOworICAgIGNoYXJfdSAgKnR5cGU7Cit7CisgICAgaW50CSAgICB2YWx1ZTsKKyAgICBjaGFyICAgICplbmQ7CisKKyAgICBpZiAoKnR5cGUgIT0gJyYnKQorCXJldHVybiBGQUxTRTsKKworICAgIHZhbHVlID0gc3RydG9sKHR5cGUgKyAxLCAmZW5kLCAxNik7CisgICAgaWYgKCplbmQpCisJcmV0dXJuIEZBTFNFOwkJLyogSW52YWxpZCB0eXBlIChyZXBvcnQgZXJyb3I/KSAqLworCisgICAgaWYgKHhzd2koT1NfRmlsZSwgMjMsIGZuYW1lKSAmIHZfZmxhZykKKwlyZXR1cm4gRkFMU0U7CQkvKiBJbnZhbGlkIGZpbGVuYW1lPyAqLworCisgICAgcmV0dXJuIChyMCAmJiByNiA9PSB2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvb3NfcmlzY29zLmggYi9zcmMvb3NfcmlzY29zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1MDFkNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc19yaXNjb3MuaApAQCAtMCwwICsxLDE2OSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXhsaWIvbG9jYWwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNkZWZpbmUgQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRQorI2RlZmluZSBGRUFUX01PRElGWV9GTkFNRQorI2RlZmluZSBGRUFUX09TRklMRVRZUEUKKyNkZWZpbmUgREZMVF9PRlQJIlRleHQiCisjZGVmaW5lIFVTRV9URVJNX0NPTlNPTEUKKyNkZWZpbmUgSEFWRV9BVkFJTF9NRU0KKworLyogTG9uZ2VyIGZpbGVuYW1lcyBub3cgYWNjZXNzaWJsZSB0byBhbGwgKi8KKyNpZm5kZWYgQkFTRU5BTUVMRU4KKyMgZGVmaW5lIEJBU0VOQU1FTEVOIDY0IC8qIFNhbWUgbGVuZ3RoIGFzIHVuemlwICovCisjZW5kaWYKKworI2lmbmRlZiBURU1OQU1FCisjIGRlZmluZSBURU1QTkFNRQkiPFdpbXAkU2NyYXBEaXI+LnY/WFhYWFhYIgorIyBkZWZpbmUgVEVNUE5BTUVMRU4JMjUKKyNlbmRpZgorCisjaWZuZGVmIERGTFRfSEVMUEZJTEUKKyMgZGVmaW5lIERGTFRfSEVMUEZJTEUgIlZpbTpkb2MuaGVscCIKKyNlbmRpZgorCisjaWZuZGVmIERGTFRfQkRJUgorIyBkZWZpbmUgREZMVF9CRElSCSIuLDxXaW1wJFNjcmFwRGlyPi4iCS8qIGRlZmF1bHQgZm9yICdiYWNrdXBkaXInICovCisjZW5kaWYKKworLyogUGF0aHMgdG8gdHJ5IHB1dHRpbmcgc3dhcCBmaWxlIGluLiAqLworI2lmbmRlZiBERkxUX0RJUgorIyBkZWZpbmUgREZMVF9ESVIJIjxXaW1wJFNjcmFwRGlyPi4sLiIJLyogZGVmYXVsdCBmb3IgJ2RpcmVjdG9yeScgKi8KKyNlbmRpZgorCisjaWZuZGVmIERGTFRfVkRJUgorIyBkZWZpbmUgREZMVF9WRElSCSJDaG9pY2VzOlZpbS52aWV3IgkvKiBkZWZhdWx0IGZvciAndmlld2RpcicgKi8KKyNlbmRpZgorCisjaWZuZGVmIFRFUk1DQVBGSUxFCisjIGRlZmluZSBURVJNQ0FQRklMRQkiVmltOlRlcm1DYXAiCisjZW5kaWYKKyNkZWZpbmUgSEFWRV9UR0VURU5UCisKKyNpZm5kZWYgU1lOVEFYX0ZOQU1FCisjIGRlZmluZSBTWU5UQVhfRk5BTUUJIlZpbTpTeW50YXguJXMiCisjZW5kaWYKKworI2lmbmRlZiBFVklNX0ZJTEUKKyMgZGVmaW5lIEVWSU1fRklMRQkiVmltOkV2aW0iCisjZW5kaWYKKworI2RlZmluZSBGRUFUX1ZJTUlORk8KKworI2lmbmRlZiBWSU1JTkZPX0ZJTEUKKyMgZGVmaW5lIFZJTUlORk9fRklMRQkiPENob2ljZXMkV3JpdGU+LlZpbS5WaW1JbmZvIgorI2VuZGlmCisjaWZuZGVmIFZJTUlORk9fRklMRTIKKyMgZGVmaW5lIFZJTUlORk9fRklMRTIJIkNob2ljZXM6VmltLlZpbUluZm8iCisjZW5kaWYKKworI2lmbmRlZiBWSU1SQ19GSUxFCisjIGRlZmluZSBWSU1SQ19GSUxFCSIvdmltcmMiCisjZW5kaWYKKyNpZm5kZWYgRVhSQ19GSUxFCisjIGRlZmluZSBFWFJDX0ZJTEUJIi9leHJjIgorI2VuZGlmCisjaWZuZGVmIEdWSU1SQ19GSUxFCisjIGRlZmluZSBHVklNUkNfRklMRQkiL2d2aW1yYyIKKyNlbmRpZgorI2lmbmRlZiBWSUVXX0ZJTEUKKyMgZGVmaW5lIFZJRVdfRklMRQkiL1ZpZXciCisjZW5kaWYKKyNpZm5kZWYgVVNSX1ZJTVJDX0ZJTEUKKyMgZGVmaW5lIFVTUl9WSU1SQ19GSUxFCSJWaW06RXZpbSIKKyNlbmRpZgorI2lmbmRlZiBTRVNTSU9OX0ZJTEUKKyMgZGVmaW5lIFNFU1NJT05fRklMRQkiL1Nlc3Npb24udmltIgorI2VuZGlmCisjaWZuZGVmIFVTUl9WSU1SQ19GSUxFCisjIGRlZmluZSBVU1JfVklNUkNfRklMRQkiQ2hvaWNlczpWaW0uVmltUkMiCisjZW5kaWYKKyNpZm5kZWYgVVNSX0dWSU1SQ19GSUxFCisjIGRlZmluZSBVU1JfR1ZJTVJDX0ZJTEUgICAgIkNob2ljZXM6VmltLkdWaW1SQyIKKyNlbmRpZgorI2lmbmRlZiBVU1JfRVhSQ19GSUxFCisjIGRlZmluZSBVU1JfRVhSQ19GSUxFICAgICJDaG9pY2VzOlZpbS5FeFJDIgorI2VuZGlmCisjaWZuZGVmIFNZU19WSU1SQ19GSUxFCisjIGRlZmluZSBTWVNfVklNUkNfRklMRQkgICAgIlZpbTpWaW1SQyIKKyNlbmRpZgorI2lmbmRlZiBTWVNfR1ZJTVJDX0ZJTEUKKyMgZGVmaW5lIFNZU19HVklNUkNfRklMRSAgICAiVmltOkdWaW1SQyIKKyNlbmRpZgorI2lmbmRlZiBTWVNfTUVOVV9GSUxFCisjIGRlZmluZSBTWVNfTUVOVV9GSUxFCSAgICAiVmltOk1lbnUiCisjZW5kaWYKKyNpZm5kZWYgU1lTX09QVFdJTl9GSUxFCisjIGRlZmluZSBTWVNfT1BUV0lOX0ZJTEUgICAgIlZpbTpPcHR3aW4iCisjZW5kaWYKKyNpZm5kZWYgRklMRVRZUEVfRklMRQorIyBkZWZpbmUgRklMRVRZUEVfRklMRQkgICAgIlZpbTpGaWxldHlwZSIKKyNlbmRpZgorI2lmbmRlZiBGVFBMVUdJTl9GSUxFCisjIGRlZmluZSBGVFBMVUdJTl9GSUxFCSAgICAiVmltOkZ0cGx1Z2luL3ZpbSIKKyNlbmRpZgorI2lmbmRlZiBJTkRFTlRfRklMRQorIyBkZWZpbmUgSU5ERU5UX0ZJTEUJICAgICJWaW06SW5kZW50L3ZpbSIKKyNlbmRpZgorI2lmbmRlZiBGVE9GRl9GSUxFCisjIGRlZmluZSBGVE9GRl9GSUxFCSAgICAiVmltOkZ0b2ZmIgorI2VuZGlmCisjaWZuZGVmIEZUUExVR09GX0ZJTEUKKyMgZGVmaW5lIEZUUExVR09GX0ZJTEUJICAgICJWaW06RnRwbHVnb2YiCisjZW5kaWYKKyNpZm5kZWYgSU5ET0ZGX0ZJTEUKKyMgZGVmaW5lIElORE9GRl9GSUxFCSAgICAiVmltOkluZG9mZiIKKyNlbmRpZgorCisjZGVmaW5lIERGTFRfRVJST1JGSUxFCQkiZXJyb3JzL3ZpbSIKKyNkZWZpbmUgREZMVF9SVU5USU1FUEFUSAkiQ2hvaWNlczpWaW0sVmltOixDaG9pY2VzOlZpbS5hZnRlciIKKworLyoKKyAqIFJJU0MgUENzIGhhdmUgcGxlbnR5IG9mIG1lbW9yeSwgdXNlIGxhcmdlIGJ1ZmZlcnMKKyAqLworI2RlZmluZSBDTURCVUZGU0laRSAxMDI0CS8qIHNpemUgb2YgdGhlIGNvbW1hbmQgcHJvY2Vzc2luZyBidWZmZXIgKi8KKyNkZWZpbmUgTUFYUEFUSEwgICAgMjU2CQkvKiBwYXRocyBhcmUgYWx3YXlzIHF1aXRlIHNob3J0IHRob3VnaCAqLworCisjaWZuZGVmIERGTFRfTUFYTUVNCisjIGRlZmluZSBERkxUX01BWE1FTQkoNSoxMDI0KSAgICAvKiB1c2UgdXAgdG8gNSBNYnl0ZSBmb3IgYSBidWZmZXIgKi8KKyNlbmRpZgorCisjaWZuZGVmIERGTFRfTUFYTUVNVE9UCisjIGRlZmluZSBERkxUX01BWE1FTVRPVAkoMTAqMTAyNCkgICAgLyogdXNlIHVwIHRvIDEwIE1ieXRlIGZvciBWaW0gKi8KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TSUdTRVQKKyMgZGVmaW5lIHNpZ25hbCBzaWdzZXQKKyNlbmRpZgorCisjZGVmaW5lIG5fZmxhZyAoMTw8MzEpCisjZGVmaW5lIHpfZmxhZyAoMTw8MzApCisjZGVmaW5lIGNfZmxhZyAoMTw8MjkpCisjZGVmaW5lIHZfZmxhZyAoMTw8MjgpCisKKy8qIFRoZXNlIHRha2UgcjAtcjcgYXMgaW5wdXRzLCByZXR1cm5zIHIwLXI3IGluIGdsb2JhbCB2YXJpYWJsZXMuICovCit2b2lkIHN3aShpbnQgc3dpbnVtLCAuLi4pOyAgICAgIC8qIEhhbmRsZXMgZXJyb3JzIGl0c2VsZiAqLworaW50IHhzd2koaW50IHN3aW51bSwgLi4uKTsgICAgICAvKiBSZXR1cm5zIGVycm9ycyB1c2luZyB2IGZsYWcgKi8KK2V4dGVybiBpbnQgcjAsIHIxLCByMiwgcjMsIHI0LCByNSwgcjYsIHI3OyAgLyogRm9yIHJldHVybiB2YWx1ZXMgKi8KKworI2luY2x1ZGUgPGtlcm5lbC5oPgorI2luY2x1ZGUgPHN3aXMuaD4KKworI2RlZmluZSBtY2hfbWVtbW92ZSh0bywgZnJvbSwgbGVuKSBtZW1tb3ZlKChjaGFyICopKHRvKSwgKGNoYXIgKikoZnJvbSksIGxlbikKKyNkZWZpbmUgbWNoX3JlbmFtZShzcmMsIGRzdCkgcmVuYW1lKHNyYywgZHN0KQorI2RlZmluZSBtY2hfZ2V0ZW52KHgpIChjaGFyX3UgKilnZXRlbnYoKGNoYXIgKil4KQorI2RlZmluZSBtY2hfc2V0ZW52KG5hbWUsIHZhbCwgeCkgc2V0ZW52KG5hbWUsIHZhbCwgeCkKZGlmZiAtLWdpdCBhL3NyYy9vc191bml4LmMgYi9zcmMvb3NfdW5peC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OWQ4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3NfdW5peC5jCkBAIC0wLDAgKzEsNjE4OSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoJICAgICAgT1MvMiBwb3J0IGJ5IFBhdWwgU2xvb3RtYW4KKyAqCSAgICAgIFZNUyBtZXJnZSBieSBab2x0YW4gQXJwYWRmZnkKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIG9zX3VuaXguYyAtLSBjb2RlIGZvciBhbGwgZmxhdm9ycyBvZiBVbml4IChCU0QsIFNZU1YsIFNWUjQsIFBPU0lYLCAuLi4pCisgKgkgICAgIEFsc28gZm9yIE9TLzIsIHVzaW5nIHRoZSBleGNlbGxlbnQgRU1YIHBhY2thZ2UhISEKKyAqCSAgICAgQWxzbyBmb3IgQmVPUyBhbmQgQXRhcmkgTWlOVC4KKyAqCisgKiBBIGxvdCBvZiB0aGlzIGZpbGUgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBKdWVyZ2VuIFdlaWdlcnQgYW5kIGxhdGVyCisgKiBjaGFuZ2VkIGJleW9uZCByZWNvZ25pdGlvbi4KKyAqLworCisvKgorICogU29tZSBzeXN0ZW1zIGhhdmUgYSBwcm90b3R5cGUgZm9yIHNlbGVjdCgpIHRoYXQgaGFzIChpbnQgKikgaW5zdGVhZCBvZgorICogKGZkX3NldCAqKSwgd2hpY2ggaXMgd3JvbmcuIFRoaXMgZGVmaW5lIHJlbW92ZXMgdGhhdCBwcm90b3R5cGUuIFdlIGRlZmluZQorICogb3VyIG93biBwcm90b3R5cGUgYmVsb3cuCisgKiBEb24ndCB1c2UgaXQgZm9yIHRoZSBNYWMsIGl0IGNhdXNlcyBhIHdhcm5pbmcgZm9yIHByZWNvbXBpbGVkIGhlYWRlcnMuCisgKiBUT0RPOiB1c2UgYSBjb25maWd1cmUgY2hlY2sgZm9yIHByZWNvbXBpbGVkIGhlYWRlcnM/CisgKi8KKyNpZm5kZWYgX19BUFBMRV9fCisjIGRlZmluZSBzZWxlY3Qgc2VsZWN0X2RlY2xhcmVkX3dyb25nCisjZW5kaWYKKworI2luY2x1ZGUgInZpbS5oIgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjIGluY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm9zX3VuaXh4LmgiCSAgICAvKiB1bml4IGluY2x1ZGVzIGZvciBvc191bml4LmMgb25seSAqLworCisjaWZkZWYgVVNFX1hTTVAKKyMgaW5jbHVkZSA8WDExL1NNL1NNbGliLmg+CisjZW5kaWYKKworLyoKKyAqIFVzZSB0aGlzIHByb3RvdHlwZSBmb3Igc2VsZWN0LCBzb21lIGluY2x1ZGUgZmlsZXMgaGF2ZSBhIHdyb25nIHByb3RvdHlwZQorICovCisjdW5kZWYgc2VsZWN0CisjaWZkZWYgX19CRU9TX18KKyMgZGVmaW5lIHNlbGVjdAliZW9zX3NlbGVjdAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VMRUNUKQorZXh0ZXJuIGludCAgIHNlbGVjdCBfX0FSR1MoKGludCwgZmRfc2V0ICosIGZkX3NldCAqLCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKikpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX01PVVNFX0dQTQorIyBpbmNsdWRlIDxncG0uaD4KKy8qIDxsaW51eC9rZXlib2FyZC5oPiBjb250YWlucyBkZWZpbmVzIGNvbmZsaWN0aW5nIHdpdGggImtleW1hcC5oIiwKKyAqIEkganVzdCBjb3BpZWQgcmVsZXZhbnQgZGVmaW5lcyBoZXJlLiBBIGNsZWFuZXIgc29sdXRpb24gd291bGQgYmUgdG8gcHV0IGdwbQorICogY29kZSBpbnRvIHNlcGFyYXRlIGZpbGUgYW5kIGluY2x1ZGUgdGhlcmUgbGludXgva2V5Ym9hcmQuaAorICovCisvKiAjaW5jbHVkZSA8bGludXgva2V5Ym9hcmQuaD4gKi8KKyMgZGVmaW5lIEtHX1NISUZUCTAKKyMgZGVmaW5lIEtHX0NUUkwJMgorIyBkZWZpbmUgS0dfQUxUCQkzCisjIGRlZmluZSBLR19BTFRHUgkxCisjIGRlZmluZSBLR19TSElGVEwJNAorIyBkZWZpbmUgS0dfU0hJRlRSCTUKKyMgZGVmaW5lIEtHX0NUUkxMCTYKKyMgZGVmaW5lIEtHX0NUUkxSCTcKKyMgZGVmaW5lIEtHX0NBUFNTSElGVAk4CisKK3N0YXRpYyB2b2lkIGdwbV9jbG9zZSBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQgZ3BtX29wZW4gX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50IG1jaF9ncG1fcHJvY2VzcyBfX0FSR1MoKHZvaWQpKTsKKyNlbmRpZgorCisvKgorICogZW5kIG9mIGF1dG9jb25mIHNlY3Rpb24uIFRvIGJlIGV4dGVuZGVkLi4uCisgKi8KKworLyogQXJlIHRoZSBmb2xsb3dpbmcgI2lmZGVmcyBzdGlsbCByZXF1aXJlZD8gQW5kIHdoeT8gSXMgdGhhdCBmb3IgWDExPyAqLworCisjaWYgZGVmaW5lZChFU0lYKSB8fCBkZWZpbmVkKE1fVU5JWCkgJiYgIWRlZmluZWQoU0NPKQorIyBpZmRlZiBTSUdXSU5DSAorIyAgdW5kZWYgU0lHV0lOQ0gKKyMgZW5kaWYKKyMgaWZkZWYgVElPQ0dXSU5TWgorIyAgdW5kZWYgVElPQ0dXSU5TWgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNJR1dJTkRPVykgJiYgIWRlZmluZWQoU0lHV0lOQ0gpCS8qIGhwdXggOS4wMSBoYXMgaXQgKi8KKyMgZGVmaW5lIFNJR1dJTkNIIFNJR1dJTkRPVworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1gxMQorIyBpbmNsdWRlIDxYMTEvWGxpYi5oPgorIyBpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyMgaW5jbHVkZSA8WDExL1hhdG9tLmg+CisjIGlmZGVmIEZFQVRfWENMSVBCT0FSRAorIyAgaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorIyAgaW5jbHVkZSA8WDExL1NoZWxsLmg+CisjICBpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorc3RhdGljIFdpZGdldAl4dGVybV9TaGVsbCA9IChXaWRnZXQpMDsKK3N0YXRpYyB2b2lkIHh0ZXJtX3VwZGF0ZSBfX0FSR1MoKHZvaWQpKTsKKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkKEZFQVRfWENMSVBCT0FSRCkgfHwgZGVmaW5lZChGRUFUX1RJVExFKQorV2luZG93CSAgICB4MTFfd2luZG93ID0gMDsKKyMgZW5kaWYKK0Rpc3BsYXkJICAgICp4MTFfZGlzcGxheSA9IE5VTEw7CisKKyMgaWZkZWYgRkVBVF9USVRMRQorc3RhdGljIGludCAgZ2V0X3gxMV93aW5kaXMgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBzZXRfeDExX3RpdGxlIF9fQVJHUygoY2hhcl91ICopKTsKK3N0YXRpYyB2b2lkIHNldF94MTFfaWNvbiBfX0FSR1MoKGNoYXJfdSAqKSk7CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEZFQVRfVElUTEUKK3N0YXRpYyBpbnQgZ2V0X3gxMV90aXRsZSBfX0FSR1MoKGludCkpOworc3RhdGljIGludCBnZXRfeDExX2ljb24gX19BUkdTKChpbnQpKTsKKworc3RhdGljIGNoYXJfdQkqb2xkdGl0bGUgPSBOVUxMOworc3RhdGljIGludAlkaWRfc2V0X3RpdGxlID0gRkFMU0U7CitzdGF0aWMgY2hhcl91CSpvbGRpY29uID0gTlVMTDsKK3N0YXRpYyBpbnQJZGlkX3NldF9pY29uID0gRkFMU0U7CisjZW5kaWYKKworc3RhdGljIHZvaWQgbWF5X2NvcmVfZHVtcCBfX0FSR1MoKHZvaWQpKTsKKworc3RhdGljIGludCAgV2FpdEZvckNoYXIgX19BUkdTKChsb25nKSk7CisjaWYgZGVmaW5lZChfX0JFT1NfXykKK2ludCAgUmVhbFdhaXRGb3JDaGFyIF9fQVJHUygoaW50LCBsb25nLCBpbnQgKikpOworI2Vsc2UKK3N0YXRpYyBpbnQgIFJlYWxXYWl0Rm9yQ2hhciBfX0FSR1MoKGludCwgbG9uZywgaW50ICopKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9YQ0xJUEJPQVJECitzdGF0aWMgaW50IGRvX3h0ZXJtX3RyYWNlIF9fQVJHUygodm9pZCkpOworI2RlZmluZSBYVF9UUkFDRV9ERUxBWQk1MAkvKiBkZWxheSBmb3IgeHRlcm0gdHJhY2luZyAqLworI2VuZGlmCisKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZXNpemUgX19BUkdTKCh2b2lkKSk7CisKKyNpZiBkZWZpbmVkKFNJR1dJTkNIKQorc3RhdGljIFJFVFNJR1RZUEUgc2lnX3dpbmNoIF9fQVJHUyhTSUdQUk9UT0FSRyk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFNJR0lOVCkKK3N0YXRpYyBSRVRTSUdUWVBFIGNhdGNoX3NpZ2ludCBfX0FSR1MoU0lHUFJPVE9BUkcpOworI2VuZGlmCisjaWYgZGVmaW5lZChTSUdQV1IpCitzdGF0aWMgUkVUU0lHVFlQRSBjYXRjaF9zaWdwd3IgX19BUkdTKFNJR1BST1RPQVJHKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoU0lHQUxSTSkgJiYgZGVmaW5lZChGRUFUX1gxMSkgXAorCSYmIGRlZmluZWQoRkVBVF9USVRMRSkgJiYgIWRlZmluZWQoRkVBVF9HVUlfR1RLKQorIyBkZWZpbmUgU0VUX1NJR19BTEFSTQorc3RhdGljIFJFVFNJR1RZUEUgc2lnX2FsYXJtIF9fQVJHUyhTSUdQUk9UT0FSRyk7CitzdGF0aWMgaW50IHNpZ19hbGFybV9jYWxsZWQ7CisjZW5kaWYKK3N0YXRpYyBSRVRTSUdUWVBFIGRlYXRodHJhcCBfX0FSR1MoU0lHUFJPVE9BUkcpOworCitzdGF0aWMgdm9pZCBzZXRfc2lnbmFscyBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGNhdGNoX3NpZ25hbHMgX19BUkdTKChSRVRTSUdUWVBFICgqZnVuY19kZWFkbHkpKCksIFJFVFNJR1RZUEUgKCpmdW5jX290aGVyKSgpKSk7CisjaWZuZGVmIF9fRU1YX18KK3N0YXRpYyBpbnQgIGhhdmVfd2lsZGNhcmQgX19BUkdTKChpbnQsIGNoYXJfdSAqKikpOworc3RhdGljIGludCAgaGF2ZV9kb2xsYXJzIF9fQVJHUygoaW50LCBjaGFyX3UgKiopKTsKKyNlbmRpZgorCisjaWZuZGVmIE5PX0VYUEFORFBBVEgKK3N0YXRpYyBpbnQJcHN0cmNtcCBfX0FSR1MoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CitzdGF0aWMgaW50CXVuaXhfZXhwYW5kcGF0aCBfX0FSR1MoKGdhcnJheV9UICpnYXAsIGNoYXJfdSAqcGF0aCwgaW50IHdpbGRvZmYsIGludCBmbGFncykpOworI2VuZGlmCisKKyNpZm5kZWYgX19FTVhfXworc3RhdGljIGludCBzYXZlX3BhdHRlcm5zIF9fQVJHUygoaW50IG51bV9wYXQsIGNoYXJfdSAqKnBhdCwgaW50ICpudW1fZmlsZSwgY2hhcl91ICoqKmZpbGUpKTsKKyNlbmRpZgorCisjaWZuZGVmIFNJR19FUlIKKyMgZGVmaW5lIFNJR19FUlIJKChSRVRTSUdUWVBFICgqKSgpKS0xKQorI2VuZGlmCisKK3N0YXRpYyBpbnQJZG9fcmVzaXplID0gRkFMU0U7CisjaWZuZGVmIF9fRU1YX18KK3N0YXRpYyBjaGFyX3UJKmV4dHJhX3NoZWxsX2FyZyA9IE5VTEw7CitzdGF0aWMgaW50CXNob3dfc2hlbGxfbWVzcyA9IFRSVUU7CisjZW5kaWYKK3N0YXRpYyBpbnQJZGVhZGx5X3NpZ25hbCA9IDA7CSAgICAvKiBUaGUgc2lnbmFsIHdlIGNhdWdodCAqLworCitzdGF0aWMgaW50IGN1cnJfdG1vZGUgPSBUTU9ERV9DT09LOwkvKiBjb250YWlucyBjdXJyZW50IHRlcm1pbmFsIG1vZGUgKi8KKworI2lmZGVmIFVTRV9YU01QCit0eXBlZGVmIHN0cnVjdAoreworICAgIFNtY0Nvbm4gc21jY29ubjsJICAgIC8qIFRoZSBTTSBjb25uZWN0aW9uIElEICovCisgICAgSWNlQ29ubiBpY2Vjb25uOwkgICAgLyogVGhlIElDRSBjb25uZWN0aW9uIElEICovCisgICAgQm9vbCBzYXZlX3lvdXJzZWxmOyAgICAgLyogSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHNhdmVfeW91cnNlbGYgKi8KKyAgICBCb29sIHNodXRkb3duOwkgICAgLyogSWYgd2UncmUgaW4gc2h1dGRvd24gbW9kZSAqLworfSB4c21wX2NvbmZpZ19UOworCitzdGF0aWMgeHNtcF9jb25maWdfVCB4c21wOworI2VuZGlmCisKKyNpZmRlZiBTWVNfU0lHTElTVF9ERUNMQVJFRAorLyoKKyAqIEkgaGF2ZSBzZWVuCisgKiAgZXh0ZXJuIGNoYXIgKl9zeXNfc2lnbGlzdFtOU0lHXTsKKyAqIG9uIElyaXgsIExpbnV4LCBOZXRCU0QgYW5kIFNvbGFyaXMuIEl0IGNvbnRhaW5zIGEgbmljZSBsaXN0IG9mIHN0cmluZ3MKKyAqIHRoYXQgZGVzY3JpYmUgdGhlIHNpZ25hbHMuIFRoYXQgaXMgbmVhcmx5IHdoYXQgd2Ugd2FudCBoZXJlLiAgQnV0CisgKiBhdXRvY29uZiBkb2VzIG9ubHkgY2hlY2sgZm9yIHN5c19zaWdsaXN0ICh3aXRob3V0IHRoZSB1bmRlcnNjb3JlKSwgSQorICogZG8gbm90IHdhbnQgdG8gY2hhbmdlIGV2ZXJ5dGhpbmcgdG9kYXkuLi4uIGp3LgorICogVGhpcyBpcyB3aHkgQUNfREVDTF9TWVNfU0lHTElTVCBpcyBjb21tZW50ZWQgb3V0IGluIGNvbmZpZ3VyZS5pbgorICovCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBzaWduYWxpbmZvCit7CisgICAgaW50CSAgICBzaWc7CS8qIFNpZ25hbCBudW1iZXIsIGVnLiBTSUdTRUdWIGV0YyAqLworICAgIGNoYXIgICAgKm5hbWU7CS8qIFNpZ25hbCBuYW1lIChub3QgY2hhcl91ISkuICovCisgICAgY2hhciAgICBkZWFkbHk7CS8qIENhdGNoIGFzIGEgZGVhZGx5IHNpZ25hbD8gKi8KK30gc2lnbmFsX2luZm9bXSA9Cit7CisjaWZkZWYgU0lHSFVQCisgICAge1NJR0hVUCwJICAgICJIVVAiLAlUUlVFfSwKKyNlbmRpZgorI2lmZGVmIFNJR1FVSVQKKyAgICB7U0lHUVVJVCwJICAgICJRVUlUIiwJVFJVRX0sCisjZW5kaWYKKyNpZmRlZiBTSUdJTEwKKyAgICB7U0lHSUxMLAkgICAgIklMTCIsCVRSVUV9LAorI2VuZGlmCisjaWZkZWYgU0lHVFJBUAorICAgIHtTSUdUUkFQLAkgICAgIlRSQVAiLAlUUlVFfSwKKyNlbmRpZgorI2lmZGVmIFNJR0FCUlQKKyAgICB7U0lHQUJSVCwJICAgICJBQlJUIiwJVFJVRX0sCisjZW5kaWYKKyNpZmRlZiBTSUdFTVQKKyAgICB7U0lHRU1ULAkgICAgIkVNVCIsCVRSVUV9LAorI2VuZGlmCisjaWZkZWYgU0lHRlBFCisgICAge1NJR0ZQRSwJICAgICJGUEUiLAlUUlVFfSwKKyNlbmRpZgorI2lmZGVmIFNJR0JVUworICAgIHtTSUdCVVMsCSAgICAiQlVTIiwJVFJVRX0sCisjZW5kaWYKKyNpZmRlZiBTSUdTRUdWCisgICAge1NJR1NFR1YsCSAgICAiU0VHViIsCVRSVUV9LAorI2VuZGlmCisjaWZkZWYgU0lHU1lTCisgICAge1NJR1NZUywJICAgICJTWVMiLAlUUlVFfSwKKyNlbmRpZgorI2lmZGVmIFNJR0FMUk0KKyAgICB7U0lHQUxSTSwJICAgICJBTFJNIiwJRkFMU0V9LAkvKiBQZXJsJ3MgYWxhcm0oKSBjYW4gdHJpZ2dlciBpdCAqLworI2VuZGlmCisjaWZkZWYgU0lHVEVSTQorICAgIHtTSUdURVJNLAkgICAgIlRFUk0iLAlUUlVFfSwKKyNlbmRpZgorI2lmZGVmIFNJR1ZUQUxSTQorICAgIHtTSUdWVEFMUk0sCSAgICAiVlRBTFJNIiwJVFJVRX0sCisjZW5kaWYKKyNpZmRlZiBTSUdQUk9GCisgICAge1NJR1BST0YsCSAgICAiUFJPRiIsCVRSVUV9LAorI2VuZGlmCisjaWZkZWYgU0lHWENQVQorICAgIHtTSUdYQ1BVLAkgICAgIlhDUFUiLAlUUlVFfSwKKyNlbmRpZgorI2lmZGVmIFNJR1hGU1oKKyAgICB7U0lHWEZTWiwJICAgICJYRlNaIiwJVFJVRX0sCisjZW5kaWYKKyNpZmRlZiBTSUdVU1IxCisgICAge1NJR1VTUjEsCSAgICAiVVNSMSIsCVRSVUV9LAorI2VuZGlmCisjaWZkZWYgU0lHVVNSMgorICAgIHtTSUdVU1IyLAkgICAgIlVTUjIiLAlUUlVFfSwKKyNlbmRpZgorI2lmZGVmIFNJR0lOVAorICAgIHtTSUdJTlQsCSAgICAiSU5UIiwJRkFMU0V9LAorI2VuZGlmCisjaWZkZWYgU0lHV0lOQ0gKKyAgICB7U0lHV0lOQ0gsCSAgICAiV0lOQ0giLAlGQUxTRX0sCisjZW5kaWYKKyNpZmRlZiBTSUdUU1RQCisgICAge1NJR1RTVFAsCSAgICAiVFNUUCIsCUZBTFNFfSwKKyNlbmRpZgorI2lmZGVmIFNJR1BJUEUKKyAgICB7U0lHUElQRSwJICAgICJQSVBFIiwJRkFMU0V9LAorI2VuZGlmCisgICAgey0xLAkgICAgIlVua25vd24hIiwgRkFMU0V9Cit9OworCisgICAgdm9pZAorbWNoX3dyaXRlKHMsIGxlbikKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQlsZW47Cit7CisgICAgd3JpdGUoMSwgKGNoYXIgKilzLCBsZW4pOworICAgIGlmIChwX3dkKQkJLyogVW5peCBpcyB0b28gZmFzdCwgc2xvdyBkb3duIGEgYml0IG1vcmUgKi8KKwlSZWFsV2FpdEZvckNoYXIocmVhZF9jbWRfZmQsIHBfd2QsIE5VTEwpOworfQorCisvKgorICogbWNoX2luY2hhcigpOiBsb3cgbGV2ZWwgaW5wdXQgZnVuY2lvbi4KKyAqIEdldCBhIGNoYXJhY3RlcnMgZnJvbSB0aGUga2V5Ym9hcmQuCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF2YWlsYWJsZS4KKyAqIElmIHd0aW1lID09IDAgZG8gbm90IHdhaXQgZm9yIGNoYXJhY3RlcnMuCisgKiBJZiB3dGltZSA9PSBuIHdhaXQgYSBzaG9ydCB0aW1lIGZvciBjaGFyYWN0ZXJzLgorICogSWYgd3RpbWUgPT0gLTEgd2FpdCBmb3JldmVyIGZvciBjaGFyYWN0ZXJzLgorICovCisgICAgaW50CittY2hfaW5jaGFyKGJ1ZiwgbWF4bGVuLCB3dGltZSwgdGJfY2hhbmdlX2NudCkKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCW1heGxlbjsKKyAgICBsb25nCXd0aW1lOwkgICAgLyogZG9uJ3QgdXNlICJ0aW1lIiwgTUlQUyBjYW5ub3QgaGFuZGxlIGl0ICovCisgICAgaW50CQl0Yl9jaGFuZ2VfY250OworeworICAgIGludAkJbGVuOworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIHN0YXRpYyBpbnQJb25jZV9hbHJlYWR5ID0gMDsKKyNlbmRpZgorCisgICAgLyogQ2hlY2sgaWYgd2luZG93IGNoYW5nZWQgc2l6ZSB3aGlsZSB3ZSB3ZXJlIGJ1c3ksIHBlcmhhcHMgdGhlICI6c2V0CisgICAgICogY29sdW1ucz05OSIgY29tbWFuZCB3YXMgdXNlZC4gKi8KKyAgICB3aGlsZSAoZG9fcmVzaXplKQorCWhhbmRsZV9yZXNpemUoKTsKKworICAgIGlmICh3dGltZSA+PSAwKQorICAgIHsKKwl3aGlsZSAoV2FpdEZvckNoYXIod3RpbWUpID09IDApCQkvKiBubyBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisJeworCSAgICBpZiAoIWRvX3Jlc2l6ZSkJLyogcmV0dXJuIGlmIG5vdCBpbnRlcnJ1cHRlZCBieSByZXNpemUgKi8KKwkgICAgeworI2lmZGVmIEZFQVRfQVVUT0NNRAorCQlvbmNlX2FscmVhZHkgPSAwOworI2VuZGlmCisJCXJldHVybiAwOworCSAgICB9CisJICAgIGhhbmRsZV9yZXNpemUoKTsKKwl9CisgICAgfQorICAgIGVsc2UJLyogd3RpbWUgPT0gLTEgKi8KKyAgICB7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJaWYgKG9uY2VfYWxyZWFkeSA9PSAyKQorCSAgICB1cGRhdGVzY3JpcHQoMCk7CisJZWxzZSBpZiAob25jZV9hbHJlYWR5ID09IDEpCisJeworCSAgICBzZXRjdXJzb3IoKTsKKwkgICAgb25jZV9hbHJlYWR5ID0gMjsKKwkgICAgcmV0dXJuIDA7CisJfQorCWVsc2UKKyNlbmRpZgorCS8qCisJICogSWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSB3aXRoaW4gJ3VwZGF0ZXRpbWUnIHNlY29uZHMKKwkgKiBmbHVzaCBhbGwgdGhlIHN3YXAgZmlsZXMgdG8gZGlzaworCSAqIEFsc28gZG9uZSB3aGVuIGludGVycnVwdGVkIGJ5IFNJR1dJTkNILgorCSAqLworCWlmIChXYWl0Rm9yQ2hhcihwX3V0KSA9PSAwKQorCXsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgaWYgKGhhc19jdXJzb3Job2xkKCkgJiYgZ2V0X3JlYWxfc3RhdGUoKSA9PSBOT1JNQUxfQlVTWSkKKwkgICAgeworCQlhcHBseV9hdXRvY21kcyhFVkVOVF9DVVJTT1JIT0xELCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKKwkJdXBkYXRlX3NjcmVlbihWQUxJRCk7CisJCW9uY2VfYWxyZWFkeSA9IDE7CisJCXJldHVybiAwOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCQl1cGRhdGVzY3JpcHQoMCk7CisJfQorICAgIH0KKworICAgIGZvciAoOzspCS8qIHJlcGVhdCB1bnRpbCB3ZSBnb3QgYSBjaGFyYWN0ZXIgKi8KKyAgICB7CisJd2hpbGUgKGRvX3Jlc2l6ZSkgICAgLyogd2luZG93IGNoYW5nZWQgc2l6ZSAqLworCSAgICBoYW5kbGVfcmVzaXplKCk7CisJLyoKKwkgKiB3ZSB3YW50IHRvIGJlIGludGVycnVwdGVkIGJ5IHRoZSB3aW5jaCBzaWduYWwKKwkgKi8KKwlXYWl0Rm9yQ2hhcigtMUwpOworCWlmIChkb19yZXNpemUpCSAgICAvKiBpbnRlcnJ1cHRlZCBieSBTSUdXSU5DSCBzaWduYWwgKi8KKwkgICAgY29udGludWU7CisKKwkvKiBJZiBpbnB1dCB3YXMgcHV0IGRpcmVjdGx5IGluIHR5cGVhaGVhZCBidWZmZXIgYmFpbCBvdXQgaGVyZS4gKi8KKwlpZiAodHlwZWJ1Zl9jaGFuZ2VkKHRiX2NoYW5nZV9jbnQpKQorCSAgICByZXR1cm4gMDsKKworCS8qCisJICogRm9yIHNvbWUgdGVybWluYWxzIHdlIG9ubHkgZ2V0IG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lLgorCSAqIFdlIHdhbnQgdGhlIGdldCBhbGwgYXZhaWxhYmxlIGNoYXJhY3RlcnMsIHNvIHdlIGNvdWxkIGtlZXAgb24KKwkgKiB0cnlpbmcgdW50aWwgbm9uZSBpcyBhdmFpbGFibGUKKwkgKiBGb3Igc29tZSBvdGhlciB0ZXJtaW5hbHMgdGhpcyBpcyBxdWl0ZSBzbG93LCB0aGF0J3Mgd2h5IHdlIGRvbid0IGRvCisJICogaXQuCisJICovCisJbGVuID0gcmVhZF9mcm9tX2lucHV0X2J1ZihidWYsIChsb25nKW1heGxlbik7CisJaWYgKGxlbiA+IDApCisJeworI2lmZGVmIE9TMgorCSAgICBpbnQgaTsKKworCSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChidWZbaV0gPT0gMCkKKwkJICAgIGJ1ZltpXSA9IEtfTlVMOworI2VuZGlmCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJICAgIG9uY2VfYWxyZWFkeSA9IDA7CisjZW5kaWYKKwkgICAgcmV0dXJuIGxlbjsKKwl9CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK2hhbmRsZV9yZXNpemUoKQoreworICAgIGRvX3Jlc2l6ZSA9IEZBTFNFOworICAgIHNoZWxsX3Jlc2l6ZWQoKTsKK30KKworLyoKKyAqIHJldHVybiBub24temVybyBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUKKyAqLworICAgIGludAorbWNoX2NoYXJfYXZhaWwoKQoreworICAgIHJldHVybiBXYWl0Rm9yQ2hhcigwTCk7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfVE9UQUxfTUVNKSB8fCBkZWZpbmVkKFBST1RPKQorIyBpZmRlZiBIQVZFX1NZU19SRVNPVVJDRV9ICisjICBpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChIQVZFX1NZU19TWVNDVExfSCkgJiYgZGVmaW5lZChIQVZFX1NZU0NUTCkKKyMgIGluY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChIQVZFX1NZU19TWVNJTkZPX0gpICYmIGRlZmluZWQoSEFWRV9TWVNJTkZPKQorIyAgaW5jbHVkZSA8c3lzL3N5c2luZm8uaD4KKyMgZW5kaWYKKworLyoKKyAqIFJldHVybiB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZS4gIERvZXNuJ3QgY2hhbmdlIHdoZW4gbWVtb3J5IGhhcworICogYmVlbiBhbGxvY2F0ZWQuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgbG9uZ191CittY2hfdG90YWxfbWVtKHNwZWNpYWwpCisgICAgaW50IHNwZWNpYWw7Cit7CisjIGlmZGVmIF9fRU1YX18KKyAgICByZXR1cm4gdWxpbWl0KDMsIDBMKTsgICAvKiBhbHdheXMgMzJNQj8gKi8KKyMgZWxzZQorICAgIGxvbmdfdQltZW0gPSAwOworCisjICBpZmRlZiBIQVZFX1NZU0NUTAorICAgIGludAkJbWliWzJdLCBwaHlzbWVtOworICAgIHNpemVfdAlsZW47CisKKyAgICAvKiBCU0Qgd2F5IG9mIGdldHRpbmcgdGhlIGFtb3VudCBvZiBSQU0gYXZhaWxhYmxlLiAqLworICAgIG1pYlswXSA9IENUTF9IVzsKKyAgICBtaWJbMV0gPSBIV19VU0VSTUVNOworICAgIGxlbiA9IHNpemVvZihwaHlzbWVtKTsKKyAgICBpZiAoc3lzY3RsKG1pYiwgMiwgJnBoeXNtZW0sICZsZW4sIE5VTEwsIDApID09IDApCisJbWVtID0gKGxvbmdfdSlwaHlzbWVtOworIyAgZW5kaWYKKworIyAgaWYgZGVmaW5lZChIQVZFX1NZU19TWVNJTkZPX0gpICYmIGRlZmluZWQoSEFWRV9TWVNJTkZPKQorICAgIGlmIChtZW0gPT0gMCkKKyAgICB7CisJc3RydWN0IHN5c2luZm8gc2luZm87CisKKwkvKiBMaW51eCB3YXkgb2YgZ2V0dGluZyBhbW91bnQgb2YgUkFNIGF2YWlsYWJsZSAqLworCWlmIChzeXNpbmZvKCZzaW5mbykgPT0gMCkKKwkgICAgbWVtID0gc2luZm8udG90YWxyYW07CisgICAgfQorIyAgZW5kaWYKKworIyAgaWZkZWYgSEFWRV9TWVNDT05GCisgICAgaWYgKG1lbSA9PSAwKQorICAgIHsKKwlsb25nCSAgICBwYWdlc2l6ZSwgcGFnZWNvdW50OworCisJLyogU29sYXJpcyB3YXkgb2YgZ2V0dGluZyBhbW91bnQgb2YgUkFNIGF2YWlsYWJsZSAqLworCXBhZ2VzaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworCXBhZ2Vjb3VudCA9IHN5c2NvbmYoX1NDX1BIWVNfUEFHRVMpOworCWlmIChwYWdlc2l6ZSA+IDAgJiYgcGFnZWNvdW50ID4gMCkKKwkgICAgbWVtID0gKGxvbmdfdSlwYWdlc2l6ZSAqIHBhZ2Vjb3VudDsKKyAgICB9CisjICBlbmRpZgorCisgICAgLyogUmV0dXJuIHRoZSBtaW5pbXVtIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgYW5kIHRoZSB1c2VyIGxpbWl0LCBiZWNhdXNlCisgICAgICogdXNpbmcgbW9yZSB0aGFuIHRoZSB1c2VyIGxpbWl0IG1heSBjYXVzZSBWaW0gdG8gYmUgdGVybWluYXRlZC4gKi8KKyMgIGlmIGRlZmluZWQoSEFWRV9TWVNfUkVTT1VSQ0VfSCkgJiYgZGVmaW5lZChIQVZFX0dFVFJMSU1JVCkKKyAgICB7CisJc3RydWN0IHJsaW1pdAlybHA7CisKKwlpZiAoZ2V0cmxpbWl0KFJMSU1JVF9EQVRBLCAmcmxwKSA9PSAwCisJCSYmIHJscC5ybGltX2N1ciA8ICgocmxpbV90KTEgPDwgKHNpemVvZihsb25nX3UpICogOCAtIDEpKQorIyAgIGlmZGVmIFJMSU1fSU5GSU5JVFkKKwkJJiYgcmxwLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkKKyMgICBlbmRpZgorCQkmJiAobG9uZ191KXJscC5ybGltX2N1ciA8IG1lbQorCSAgICkKKwkgICAgcmV0dXJuIChsb25nX3UpcmxwLnJsaW1fY3VyOworICAgIH0KKyMgIGVuZGlmCisKKyAgICBpZiAobWVtID4gMCkKKwlyZXR1cm4gbWVtOworICAgIHJldHVybiAobG9uZ191KTB4N2ZmZmZmZmY7CisjIGVuZGlmCit9CisjZW5kaWYKKworICAgIHZvaWQKK21jaF9kZWxheShtc2VjLCBpZ25vcmVpbnB1dCkKKyAgICBsb25nCW1zZWM7CisgICAgaW50CQlpZ25vcmVpbnB1dDsKK3sKKyAgICBpbnQJCW9sZF90bW9kZTsKKworICAgIGlmIChpZ25vcmVpbnB1dCkKKyAgICB7CisJLyogR28gdG8gY29va2VkIG1vZGUgd2l0aG91dCBlY2hvLCB0byBhbGxvdyBTSUdJTlQgaW50ZXJydXB0aW5nIHVzCisJICogaGVyZSAqLworCW9sZF90bW9kZSA9IGN1cnJfdG1vZGU7CisJaWYgKGN1cnJfdG1vZGUgPT0gVE1PREVfUkFXKQorCSAgICBzZXR0bW9kZShUTU9ERV9TTEVFUCk7CisKKwkvKgorCSAqIEV2ZXJ5Ym9keSBzbGVlcHMgaW4gYSBkaWZmZXJlbnQgd2F5Li4uCisJICogUHJlZmVyIG5hbm9zbGVlcCgpLCBzb21lIHZlcnNpb25zIG9mIHVzbGVlcCgpIGNhbiBvbmx5IHNsZWVwIHVwIHRvCisJICogb25lIHNlY29uZC4KKwkgKi8KKyNpZmRlZiBIQVZFX05BTk9TTEVFUAorCXsKKwkgICAgc3RydWN0IHRpbWVzcGVjIHRzOworCisJICAgIHRzLnR2X3NlYyA9IG1zZWMgLyAxMDAwOworCSAgICB0cy50dl9uc2VjID0gKG1zZWMgJSAxMDAwKSAqIDEwMDAwMDA7CisJICAgICh2b2lkKW5hbm9zbGVlcCgmdHMsIE5VTEwpOworCX0KKyNlbHNlCisjIGlmZGVmIEhBVkVfVVNMRUVQCisJd2hpbGUgKG1zZWMgPj0gMTAwMCkKKwl7CisJICAgIHVzbGVlcCgodW5zaWduZWQgaW50KSg5OTkgKiAxMDAwKSk7CisJICAgIG1zZWMgLT0gOTk5OworCX0KKwl1c2xlZXAoKHVuc2lnbmVkIGludCkobXNlYyAqIDEwMDApKTsKKyMgZWxzZQorIyAgaWZuZGVmIEhBVkVfU0VMRUNUCisJcG9sbChOVUxMLCAwLCAoaW50KW1zZWMpOworIyAgZWxzZQorIyAgIGlmZGVmIF9fRU1YX18KKwlfc2xlZXAyKG1zZWMpOworIyAgIGVsc2UKKwl7CisJICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisJICAgIHR2LnR2X3NlYyA9IG1zZWMgLyAxMDAwOworCSAgICB0di50dl91c2VjID0gKG1zZWMgJSAxMDAwKSAqIDEwMDA7CisJICAgIC8qCisJICAgICAqIE5PVEU6IFNvbGFyaXMgMi42IGhhcyBhIGJ1ZyB0aGF0IG1ha2VzIHNlbGVjdCgpIGhhbmcgaGVyZS4gIEdldAorCSAgICAgKiBhIHBhdGNoIGZyb20gU3VuIHRvIGZpeCB0aGlzLiAgUmVwb3J0ZWQgYnkgR3VubmFyIFBlZGVyc2VuLgorCSAgICAgKi8KKwkgICAgc2VsZWN0KDAsIE5VTEwsIE5VTEwsIE5VTEwsICZ0dik7CisJfQorIyAgIGVuZGlmIC8qIF9fRU1YX18gKi8KKyMgIGVuZGlmIC8qIEhBVkVfU0VMRUNUICovCisjIGVuZGlmIC8qIEhBVkVfTkFOT1NMRUVQICovCisjZW5kaWYgLyogSEFWRV9VU0xFRVAgKi8KKworCXNldHRtb2RlKG9sZF90bW9kZSk7CisgICAgfQorICAgIGVsc2UKKwlXYWl0Rm9yQ2hhcihtc2VjKTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9HRVRSTElNSVQpIFwKKwl8fCAoIWRlZmluZWQoSEFWRV9TSUdBTFRTVEFDSykgJiYgZGVmaW5lZChIQVZFX1NJR1NUQUNLKSkKKyMgZGVmaW5lIEhBVkVfQ0hFQ0tfU1RBQ0tfR1JPV1RICisvKgorICogU3VwcG9ydCBmb3IgY2hlY2tpbmcgZm9yIGFuIGFsbW9zdC1vdXQtb2Ytc3RhY2stc3BhY2Ugc2l0dWF0aW9uLgorICovCisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGFuIGl0ZW0gb24gdGhlIHN0YWNrLiAgVXNlZCB0byBmaW5kIG91dCBpZiB0aGUgc3RhY2sKKyAqIGdyb3dzIHVwIG9yIGRvd24uCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX3N0YWNrX2dyb3d0aCBfX0FSR1MoKGNoYXIgKnApKTsKK3N0YXRpYyBpbnQgc3RhY2tfZ3Jvd3NfZG93bndhcmRzOworCisvKgorICogRmluZCBvdXQgaWYgdGhlIHN0YWNrIGdyb3dzIHVwd2FyZHMgb3IgZG93bndhcmRzLgorICogInAiIHBvaW50cyB0byBhIHZhcmlhYmxlIG9uIHRoZSBzdGFjayBvZiB0aGUgY2FsbGVyLgorICovCisgICAgc3RhdGljIHZvaWQKK2NoZWNrX3N0YWNrX2dyb3d0aChwKQorICAgIGNoYXIJKnA7Cit7CisgICAgaW50CQlpOworCisgICAgc3RhY2tfZ3Jvd3NfZG93bndhcmRzID0gKHAgPiAoY2hhciAqKSZpKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0dFVFJMSU1JVCkgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBjaGFyICpzdGFja19saW1pdCA9IE5VTEw7CisKKyNpZiBkZWZpbmVkKF9USFJFQURfU0FGRSkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfTlBfSCkKKyMgaW5jbHVkZSA8cHRocmVhZC5oPgorIyBpbmNsdWRlIDxwdGhyZWFkX25wLmg+CisjZW5kaWYKKworLyoKKyAqIEZpbmQgb3V0IHVudGlsIGhvdyB2YXIgdGhlIHN0YWNrIGNhbiBncm93IHdpdGhvdXQgZ2V0dGluZyBpbnRvIHRyb3VibGUuCisgKiBDYWxsZWQgd2hlbiBzdGFydGluZyB1cCBhbmQgd2hlbiBzd2l0Y2hpbmcgdG8gdGhlIHNpZ25hbCBzdGFjayBpbgorICogZGVhdGh0cmFwKCkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ2V0X3N0YWNrX2xpbWl0KCkKK3sKKyAgICBzdHJ1Y3QgcmxpbWl0CXJscDsKKyAgICBpbnQJCQlpOworICAgIGxvbmcJCWxpbTsKKworICAgIC8qIFNldCB0aGUgc3RhY2sgbGltaXQgdG8gMTUvMTYgb2YgdGhlIGFsbG93YWJsZSBzaXplLiAgU2tpcCB0aGlzIHdoZW4gdGhlCisgICAgICogbGltaXQgZG9lc24ndCBmaXQgaW4gYSBsb25nIChybGltX2N1ciBtaWdodCBiZSAibG9uZyBsb25nIikuICovCisgICAgaWYgKGdldHJsaW1pdChSTElNSVRfU1RBQ0ssICZybHApID09IDAKKwkgICAgJiYgcmxwLnJsaW1fY3VyIDwgKChybGltX3QpMSA8PCAoc2l6ZW9mKGxvbmdfdSkgKiA4IC0gMSkpCisjICBpZmRlZiBSTElNX0lORklOSVRZCisJICAgICYmIHJscC5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZCisjICBlbmRpZgorICAgICAgICkKKyAgICB7CisJbGltID0gKGxvbmcpcmxwLnJsaW1fY3VyOworI2lmIGRlZmluZWQoX1RIUkVBRF9TQUZFKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9OUF9IKQorCXsKKwkgICAgcHRocmVhZF9hdHRyX3QgIGF0dHI7CisJICAgIHNpemVfdAkgICAgc2l6ZTsKKworCSAgICAvKiBPbiBGcmVlQlNEIHRoZSBpbml0aWFsIHRocmVhZCBhbHdheXMgaGFzIGEgZml4ZWQgc3RhY2sgc2l6ZSwgbm8KKwkgICAgICogbWF0dGVyIHdoYXQgdGhlIGxpbWl0cyBhcmUgc2V0IHRvLiAgTm9ybWFsbHkgaXQncyAxIE1ieXRlLiAqLworCSAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CisJICAgIGlmIChwdGhyZWFkX2F0dHJfZ2V0X25wKHB0aHJlYWRfc2VsZigpLCAmYXR0cikgPT0gMCkKKwkgICAgeworCQlwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKCZhdHRyLCAmc2l6ZSk7CisJCWlmIChsaW0gPiAobG9uZylzaXplKQorCQkgICAgbGltID0gKGxvbmcpc2l6ZTsKKwkgICAgfQorCSAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cik7CisJfQorI2VuZGlmCisJaWYgKHN0YWNrX2dyb3dzX2Rvd253YXJkcykKKwl7CisJICAgIHN0YWNrX2xpbWl0ID0gKGNoYXIgKikoKGxvbmcpJmkgLSAobGltIC8gMTZMICogMTVMKSk7CisJICAgIGlmIChzdGFja19saW1pdCA+PSAoY2hhciAqKSZpKQorCQkvKiBvdmVyZmxvdywgc2V0IHRvIDEvMTYgb2YgY3VycmVudCBzdGFjayBwb3NpdGlvbiAqLworCQlzdGFja19saW1pdCA9IChjaGFyICopKChsb25nKSZpIC8gMTZMKTsKKwl9CisJZWxzZQorCXsKKwkgICAgc3RhY2tfbGltaXQgPSAoY2hhciAqKSgobG9uZykmaSArIChsaW0gLyAxNkwgKiAxNUwpKTsKKwkgICAgaWYgKHN0YWNrX2xpbWl0IDw9IChjaGFyICopJmkpCisJCXN0YWNrX2xpbWl0ID0gTlVMTDsJLyogb3ZlcmZsb3cgKi8KKwl9CisgICAgfQorfQorCisvKgorICogUmV0dXJuIEZBSUwgd2hlbiBydW5uaW5nIG91dCBvZiBzdGFjayBzcGFjZS4KKyAqICJwIiBtdXN0IHBvaW50IHRvIGFueSB2YXJpYWJsZSBsb2NhbCB0byB0aGUgY2FsbGVyIHRoYXQncyBvbiB0aGUgc3RhY2suCisgKi8KKyAgICBpbnQKK21jaF9zdGFja2NoZWNrKHApCisgICAgY2hhcgkqcDsKK3sKKyAgICBpZiAoc3RhY2tfbGltaXQgIT0gTlVMTCkKKyAgICB7CisJaWYgKHN0YWNrX2dyb3dzX2Rvd253YXJkcykKKwl7CisJICAgIGlmIChwIDwgc3RhY2tfbGltaXQpCisJCXJldHVybiBGQUlMOworCX0KKwllbHNlIGlmIChwID4gc3RhY2tfbGltaXQpCisJICAgIHJldHVybiBGQUlMOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TSUdBTFRTVEFDSykgfHwgZGVmaW5lZChIQVZFX1NJR1NUQUNLKQorLyoKKyAqIFN1cHBvcnQgZm9yIHVzaW5nIHRoZSBzaWduYWwgc3RhY2suCisgKiBUaGlzIGhlbHBzIHdoZW4gd2UgcnVuIG91dCBvZiBzdGFjayBzcGFjZSwgd2hpY2ggY2F1c2VzIGEgU0lHU0VHVi4gIFRoZQorICogc2lnbmFsIGhhbmRsZXIgdGhlbiBtdXN0IHJ1biBvbiBhbm90aGVyIHN0YWNrLCBzaW5jZSB0aGUgbm9ybWFsIHN0YWNrIGlzCisgKiBjb21wbGV0ZWx5IGZ1bGwuCisgKi8KKworI2lmbmRlZiBTSUdTVEtTWgorIyBkZWZpbmUgU0lHU1RLU1ogODAwMCAgICAvKiBqdXN0IGEgZ3Vlc3Mgb2YgaG93IG11Y2ggc3RhY2sgaXMgbmVlZGVkLi4uICovCisjZW5kaWYKKworIyBpZmRlZiBIQVZFX1NJR0FMVFNUQUNLCitzdGF0aWMgc3RhY2tfdCBzaWdzdGs7CQkJLyogZm9yIHNpZ2FsdHN0YWNrKCkgKi8KKyMgZWxzZQorc3RhdGljIHN0cnVjdCBzaWdzdGFjayBzaWdzdGs7CQkvKiBmb3Igc2lnc3RhY2soKSAqLworIyBlbmRpZgorCitzdGF0aWMgdm9pZCBpbml0X3NpZ25hbF9zdGFjayBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBjaGFyICpzaWduYWxfc3RhY2s7CisKKyAgICBzdGF0aWMgdm9pZAoraW5pdF9zaWduYWxfc3RhY2soKQoreworICAgIGlmIChzaWduYWxfc3RhY2sgIT0gTlVMTCkKKyAgICB7CisjIGlmZGVmIEhBVkVfU0lHQUxUU1RBQ0sKKyMgIGlmZGVmIF9fQVBQTEVfXworCS8qIG1pc3NpbmcgcHJvdG90eXBlLiAgQWRkaW5nIGl0IHRvIG9zZGVmPy5oLmluIGRvZXNuJ3Qgd29yaywgYmVjYXVzZQorCSAqICJzdHJ1Y3Qgc2lnYWx0c3RhY2siIG5lZWRzIHRvIGJlIGRlY2xhcmVkLiAqLworCWV4dGVybiBpbnQgc2lnYWx0c3RhY2sgX19BUkdTKChjb25zdCBzdHJ1Y3Qgc2lnYWx0c3RhY2sgKnNzLCBzdHJ1Y3Qgc2lnYWx0c3RhY2sgKm9zcykpOworIyAgZW5kaWYKKworIyAgaWZkZWYgSEFWRV9TU19CQVNFCisJc2lnc3RrLnNzX2Jhc2UgPSBzaWduYWxfc3RhY2s7CisjICBlbHNlCisJc2lnc3RrLnNzX3NwID0gc2lnbmFsX3N0YWNrOworIyAgZW5kaWYKKwlzaWdzdGsuc3Nfc2l6ZSA9IFNJR1NUS1NaOworCXNpZ3N0ay5zc19mbGFncyA9IDA7CisJKHZvaWQpc2lnYWx0c3RhY2soJnNpZ3N0aywgTlVMTCk7CisjIGVsc2UKKwlzaWdzdGsuc3Nfc3AgPSBzaWduYWxfc3RhY2s7CisJaWYgKHN0YWNrX2dyb3dzX2Rvd253YXJkcykKKwkgICAgc2lnc3RrLnNzX3NwICs9IFNJR1NUS1NaIC0gMTsKKwlzaWdzdGsuc3Nfb25zdGFjayA9IDA7CisJKHZvaWQpc2lnc3RhY2soJnNpZ3N0aywgTlVMTCk7CisjIGVuZGlmCisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBXZSBuZWVkIGNvcnJlY3QgcG90YXRvdHlwZXMgZm9yIGEgc2lnbmFsIGZ1bmN0aW9uLCBvdGhlcndpc2UgbWVhbiBjb21waWxlcnMKKyAqIHdpbGwgYmFyZiB3aGVuIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gc2lnbmFsKCkgaXMgYGB3cm9uZycnLgorICogTGV0IG1lIHRyeSBpdCB3aXRoIGEgZmV3IHRyaWNreSBkZWZpbmVzIGZyb20gbXkgb3duIG9zZGVmLmgJKGp3KS4KKyAqLworI2lmIGRlZmluZWQoU0lHV0lOQ0gpCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyBSRVRTSUdUWVBFCitzaWdfd2luY2ggU0lHREVGQVJHKHNpZ2FyZykKK3sKKyAgICAvKiB0aGlzIGlzIG5vdCByZXF1aXJlZCBvbiBhbGwgc3lzdGVtcywgYnV0IGl0IGRvZXNuJ3QgaHVydCBhbnlib2R5ICovCisgICAgc2lnbmFsKFNJR1dJTkNILCAoUkVUU0lHVFlQRSAoKikoKSlzaWdfd2luY2gpOworICAgIGRvX3Jlc2l6ZSA9IFRSVUU7CisgICAgU0lHUkVUVVJOOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNJR0lOVCkKKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIFJFVFNJR1RZUEUKK2NhdGNoX3NpZ2ludCBTSUdERUZBUkcoc2lnYXJnKQoreworICAgIC8qIHRoaXMgaXMgbm90IHJlcXVpcmVkIG9uIGFsbCBzeXN0ZW1zLCBidXQgaXQgZG9lc24ndCBodXJ0IGFueWJvZHkgKi8KKyAgICBzaWduYWwoU0lHSU5ULCAoUkVUU0lHVFlQRSAoKikoKSljYXRjaF9zaWdpbnQpOworICAgIGdvdF9pbnQgPSBUUlVFOworICAgIFNJR1JFVFVSTjsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTSUdQV1IpCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyBSRVRTSUdUWVBFCitjYXRjaF9zaWdwd3IgU0lHREVGQVJHKHNpZ2FyZykKK3sKKyAgICAvKgorICAgICAqIEknbSBub3Qgc3VyZSB3ZSBnZXQgdGhlIFNJR1BXUiBzaWduYWwgd2hlbiB0aGUgc3lzdGVtIGlzIHJlYWxseSBnb2luZworICAgICAqIGRvd24gb3Igd2hlbiB0aGUgYmF0dGVyaWVzIGFyZSBhbG1vc3QgZW1wdHkuICBKdXN0IHByZXNlcnZlIHRoZSBzd2FwCisgICAgICogZmlsZXMgYW5kIGRvbid0IGV4aXQsIHRoYXQgY2FuJ3QgZG8gYW55IGhhcm0uCisgICAgICovCisgICAgbWxfc3luY19hbGwoRkFMU0UsIEZBTFNFKTsKKyAgICBTSUdSRVRVUk47Cit9CisjZW5kaWYKKworI2lmZGVmIFNFVF9TSUdfQUxBUk0KKy8qCisgKiBzaWduYWwgZnVuY3Rpb24gZm9yIGFsYXJtKCkuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIFJFVFNJR1RZUEUKK3NpZ19hbGFybSBTSUdERUZBUkcoc2lnYXJnKQoreworICAgIC8qIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGp1c3QgdG8gYnJlYWsgYSBzeXN0ZW0gY2FsbCAqLworICAgIHNpZ19hbGFybV9jYWxsZWQgPSBUUlVFOworICAgIFNJR1JFVFVSTjsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NFVEpNUF9IKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEEgc2ltcGxpc3RpYyB2ZXJzaW9uIG9mIHNldGptcCgpIHRoYXQgb25seSBhbGxvd3Mgb25lIGxldmVsIG9mIHVzaW5nLgorICogRG9uJ3QgY2FsbCB0d2ljZSBiZWZvcmUgY2FsbGluZyBtY2hfZW5kam1wKCkhLgorICogVXNhZ2U6CisgKgltY2hfc3RhcnRqbXAoKTsKKyAqCWlmIChTRVRKTVAobGNfanVtcF9lbnYpICE9IDApCisgKgl7CisgKgkgICAgbWNoX2RpZGptcCgpOworICoJICAgIEVNU0coImNyYXNoISIpOworICoJfQorICoJZWxzZQorICoJeworICoJICAgIGRvX3RoZV93b3JrOworICoJICAgIG1jaF9lbmRqbXAoKTsKKyAqCX0KKyAqIE5vdGU6IENhbid0IG1vdmUgU0VUSk1QKCkgaGVyZSwgYmVjYXVzZSBhIGZ1bmN0aW9uIGNhbGxpbmcgc2V0am1wKCkgbXVzdAorICogbm90IHJldHVybiBiZWZvcmUgdGhlIHNhdmVkIGVudmlyb25tZW50IGlzIHVzZWQuCisgKiBSZXR1cm5zIE9LIGZvciBub3JtYWwgcmV0dXJuLCBGQUlMIHdoZW4gdGhlIHByb3RlY3RlZCBjb2RlIGNhdXNlZCBhCisgKiBwcm9ibGVtIGFuZCBMT05HSk1QKCkgd2FzIHVzZWQuCisgKi8KKyAgICB2b2lkCittY2hfc3RhcnRqbXAoKQoreworI2lmZGVmIFNJR0hBU0FSRworICAgIGxjX3NpZ25hbCA9IDA7CisjZW5kaWYKKyAgICBsY19hY3RpdmUgPSBUUlVFOworfQorCisgICAgdm9pZAorbWNoX2VuZGptcCgpCit7CisgICAgbGNfYWN0aXZlID0gRkFMU0U7Cit9CisKKyAgICB2b2lkCittY2hfZGlkam1wKCkKK3sKKyMgaWYgZGVmaW5lZChIQVZFX1NJR0FMVFNUQUNLKSB8fCBkZWZpbmVkKEhBVkVfU0lHU1RBQ0spCisgICAgLyogT24gRnJlZUJTRCB0aGUgc2lnbmFsIHN0YWNrIGhhcyB0byBiZSByZXNldCBhZnRlciB1c2luZyBzaWdsb25nam1wKCksCisgICAgICogb3RoZXJ3aXNlIGNhdGNoaW5nIHRoZSBzaWduYWwgb25seSB3b3JrcyBvbmNlLiAqLworICAgIGluaXRfc2lnbmFsX3N0YWNrKCk7CisjIGVuZGlmCit9CisjZW5kaWYKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBkZWFkbHkgc2lnbmFscy4KKyAqIEl0IHRyaWVzIHRvIHByZXNlcnZlIGFueSBzd2FwIGZpbGUgYW5kIGV4aXQgcHJvcGVybHkuCisgKiAocGFydGx5IGZyb20gRWx2aXMpLgorICovCisgICAgc3RhdGljIFJFVFNJR1RZUEUKK2RlYXRodHJhcCBTSUdERUZBUkcoc2lnYXJnKQoreworICAgIHN0YXRpYyBpbnQJZW50ZXJlZCA9IDA7CSAgICAvKiBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIGdvdCBoZXJlLgorCQkJCSAgICAgICBOb3RlOiB3aGVuIG1lbW9yeSBoYXMgYmVlbiBjb3JydXB0ZWQKKwkJCQkgICAgICAgdGhpcyBtYXkgZ2V0IGFuIGFyYml0cmFyeSB2YWx1ZSEgKi8KKyNpZmRlZiBTSUdIQVNBUkcKKyAgICBpbnQJCWk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TRVRKTVBfSCkKKyAgICAvKgorICAgICAqIENhdGNoIGEgY3Jhc2ggaW4gcHJvdGVjdGVkIGNvZGUuCisgICAgICogUmVzdG9yZXMgdGhlIGVudmlyb25tZW50IHNhdmVkIGluIGxjX2p1bXBfZW52LCB3aGljaCBsb29rcyBsaWtlCisgICAgICogU0VUSk1QKCkgcmV0dXJucyAxLgorICAgICAqLworICAgIGlmIChsY19hY3RpdmUpCisgICAgeworIyBpZiBkZWZpbmVkKFNJR0hBU0FSRykKKwlsY19zaWduYWwgPSBzaWdhcmc7CisjIGVuZGlmCisJbGNfYWN0aXZlID0gRkFMU0U7CS8qIGRvbid0IGp1bXAgYWdhaW4gKi8KKwlMT05HSk1QKGxjX2p1bXBfZW52LCAxKTsKKwkvKiBOT1RSRUFDSEVEICovCisgICAgfQorI2VuZGlmCisKKyAgICAvKiBSZW1lbWJlciBob3cgb2Z0ZW4gd2UgaGF2ZSBiZWVuIGNhbGxlZC4gKi8KKyAgICArK2VudGVyZWQ7CisKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICAvKiBTZXQgdGhlIHY6ZHlpbmcgdmFyaWFibGUuICovCisgICAgc2V0X3ZpbV92YXJfbnIoVlZfRFlJTkcsIChsb25nKWVudGVyZWQpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0dFVFJMSU1JVAorICAgIC8qIFNpbmNlIHdlIGFyZSBub3cgdXNpbmcgdGhlIHNpZ25hbCBzdGFjaywgbmVlZCB0byByZXNldCB0aGUgc3RhY2sKKyAgICAgKiBsaW1pdC4gIE90aGVyd2lzZSB1c2luZyBhIHJlZ2V4cCB3aWxsIGZhaWwuICovCisgICAgZ2V0X3N0YWNrX2xpbWl0KCk7CisjZW5kaWYKKworI2lmZGVmIFNJR0hBU0FSRworICAgIC8qIHRyeSB0byBmaW5kIHRoZSBuYW1lIG9mIHRoaXMgc2lnbmFsICovCisgICAgZm9yIChpID0gMDsgc2lnbmFsX2luZm9baV0uc2lnICE9IC0xOyBpKyspCisJaWYgKHNpZ2FyZyA9PSBzaWduYWxfaW5mb1tpXS5zaWcpCisJICAgIGJyZWFrOworICAgIGRlYWRseV9zaWduYWwgPSBzaWdhcmc7CisjZW5kaWYKKworICAgIGZ1bGxfc2NyZWVuID0gRkFMU0U7CS8qIGRvbid0IHdyaXRlIG1lc3NhZ2UgdG8gdGhlIEdVSSwgaXQgbWlnaHQgYmUKKwkJCQkgKiBwYXJ0IG9mIHRoZSBwcm9ibGVtLi4uICovCisgICAgLyoKKyAgICAgKiBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBhZnRlciBlbnRlcmluZyBoZXJlLCB3ZSBtYXkgZ2V0IGhlcmUgYWdhaW4uCisgICAgICogV2hlbiB0aGlzIGhhcHBlbnMsIGdpdmUgYSBtZXNzYWdlIGFuZCB0cnkgdG8gZXhpdCBuaWNlbHkgKHJlc2V0dGluZyB0aGUKKyAgICAgKiB0ZXJtaW5hbCBtb2RlLCBldGMuKQorICAgICAqIFdoZW4gdGhpcyBoYXBwZW5zIHR3aWNlLCBqdXN0IGV4aXQsIGRvbid0IGV2ZW4gdHJ5IHRvIGdpdmUgYSBtZXNzYWdlLAorICAgICAqIHN0YWNrIG1heSBiZSBjb3JydXB0IG9yIHNvbWV0aGluZyB3ZWlyZC4KKyAgICAgKiBXaGVuIHRoaXMgc3RpbGwgaGFwcGVucyBhZ2FpbiAob3IgbWVtb3J5IHdhcyBjb3JydXB0ZWQgaW4gc3VjaCBhIHdheQorICAgICAqIHRoYXQgImVudGVyZWQiIHdhcyBjbG9iYmVyZWQpIHVzZSBfZXhpdCgpLCBkb24ndCB0cnkgZnJlZWluZyByZXNvdXJjZXMuCisgICAgICovCisgICAgaWYgKGVudGVyZWQgPj0gMykKKyAgICB7CisJcmVzZXRfc2lnbmFscygpOwkvKiBkb24ndCBjYXRjaCBhbnkgc2lnbmFscyBhbnltb3JlICovCisJbWF5X2NvcmVfZHVtcCgpOworCWlmIChlbnRlcmVkID49IDQpCisJICAgIF9leGl0KDgpOworCWV4aXQoNyk7CisgICAgfQorICAgIGlmIChlbnRlcmVkID09IDIpCisgICAgeworCU9VVF9TVFIoXygiVmltOiBEb3VibGUgc2lnbmFsLCBleGl0aW5nXG4iKSk7CisJb3V0X2ZsdXNoKCk7CisJZ2V0b3V0KDEpOworICAgIH0KKworI2lmZGVmIFNJR0hBU0FSRworICAgIHNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWwgJXNcbiIpLAorCQkJCQkJCSBzaWduYWxfaW5mb1tpXS5uYW1lKTsKKyNlbHNlCisgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIikpOworI2VuZGlmCisgICAgcHJlc2VydmVfZXhpdCgpOwkJICAgIC8qIHByZXNlcnZlIGZpbGVzIGFuZCBleGl0ICovCisKKyAgICBTSUdSRVRVUk47Cit9CisKKyNpZmRlZiBfUkVFTlRSQU5UCisvKgorICogT24gU29sYXJpcyB3aXRoIG11bHRpLXRocmVhZGluZywgc3VzcGVuZGluZyBtaWdodCBub3Qgd29yayBpbW1lZGlhdGVseS4KKyAqIENhdGNoIHRoZSBTSUdDT05UIHNpZ25hbCwgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGFuIGluZGljYXRpb24gd2hldGhlciB0aGUKKyAqIHN1c3BlbmRpbmcgaGFzIGJlZW4gZG9uZSBvciBub3QuCisgKi8KK3N0YXRpYyBpbnQgc2lnY29udF9yZWNlaXZlZDsKK3N0YXRpYyBSRVRTSUdUWVBFIHNpZ2NvbnRfaGFuZGxlciBfX0FSR1MoU0lHUFJPVE9BUkcpOworCisvKgorICogc2lnbmFsIGhhbmRsZXIgZm9yIFNJR0NPTlQKKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgUkVUU0lHVFlQRQorc2lnY29udF9oYW5kbGVyIFNJR0RFRkFSRyhzaWdhcmcpCit7CisgICAgc2lnY29udF9yZWNlaXZlZCA9IFRSVUU7CisgICAgU0lHUkVUVVJOOworfQorI2VuZGlmCisKKy8qCisgKiBJZiB0aGUgbWFjaGluZSBoYXMgam9iIGNvbnRyb2wsIHVzZSBpdCB0byBzdXNwZW5kIHRoZSBwcm9ncmFtLAorICogb3RoZXJ3aXNlIGZha2UgaXQgYnkgc3RhcnRpbmcgYSBuZXcgc2hlbGwuCisgKi8KKyAgICB2b2lkCittY2hfc3VzcGVuZCgpCit7CisgICAgLyogQmVPUyBkb2VzIGhhdmUgU0lHVFNUUCwgYnV0IGl0IGRvZXNuJ3Qgd29yay4gKi8KKyNpZiBkZWZpbmVkKFNJR1RTVFApICYmICFkZWZpbmVkKF9fQkVPU19fKQorICAgIG91dF9mbHVzaCgpOwkgICAgLyogbmVlZGVkIHRvIG1ha2UgY3Vyc29yIHZpc2libGUgb24gc29tZSBzeXN0ZW1zICovCisgICAgc2V0dG1vZGUoVE1PREVfQ09PSyk7CisgICAgb3V0X2ZsdXNoKCk7CSAgICAvKiBuZWVkZWQgdG8gZGlzYWJsZSBtb3VzZSBvbiBzb21lIHN5c3RlbXMgKi8KKworIyBpZiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKSAmJiBkZWZpbmVkKEZFQVRfWDExKQorICAgIC8qIFNpbmNlIHdlIGFyZSBnb2luZyB0byBzbGVlcCwgd2UgY2FuJ3QgcmVzcG9uZCB0byByZXF1ZXN0cyBmb3IgdGhlIFgKKyAgICAgKiBzZWxlY3Rpb25zLiAgTG9zZSB0aGVtLCBvdGhlcndpc2Ugb3RoZXIgYXBwbGljYXRpb25zIHdpbGwgaGFuZy4gIEJ1dAorICAgICAqIGZpcnN0IGNvcHkgdGhlIHRleHQgdG8gY3V0IGJ1ZmZlciAwLiAqLworICAgIGlmIChjbGlwX3N0YXIub3duZWQgfHwgY2xpcF9wbHVzLm93bmVkKQorICAgIHsKKwl4MTFfZXhwb3J0X2ZpbmFsX3NlbGVjdGlvbigpOworCWlmIChjbGlwX3N0YXIub3duZWQpCisJICAgIGNsaXBfbG9zZV9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7CisJaWYgKGNsaXBfcGx1cy5vd25lZCkKKwkgICAgY2xpcF9sb3NlX3NlbGVjdGlvbigmY2xpcF9wbHVzKTsKKwlpZiAoeDExX2Rpc3BsYXkgIT0gTlVMTCkKKwkgICAgWEZsdXNoKHgxMV9kaXNwbGF5KTsKKyAgICB9CisjIGVuZGlmCisKKyMgaWZkZWYgX1JFRU5UUkFOVAorICAgIHNpZ2NvbnRfcmVjZWl2ZWQgPSBGQUxTRTsKKyMgZW5kaWYKKyAgICBraWxsKDAsIFNJR1RTVFApOwkgICAgLyogc2VuZCBvdXJzZWx2ZXMgYSBTVE9QIHNpZ25hbCAqLworIyBpZmRlZiBfUkVFTlRSQU5UCisgICAgLyogV2hlbiB3ZSBkaWRuJ3Qgc3VzcGVuZCBpbW1lZGlhdGVseSBpbiB0aGUga2lsbCgpLCBkbyBpdCBub3cuICBIYXBwZW5zCisgICAgICogb24gbXVsdGktdGhyZWFkZWQgU29sYXJpcy4gKi8KKyAgICBpZiAoIXNpZ2NvbnRfcmVjZWl2ZWQpCisJcGF1c2UoKTsKKyMgZW5kaWYKKworIyBpZmRlZiBGRUFUX1RJVExFCisgICAgLyoKKyAgICAgKiBTZXQgb2xkdGl0bGUgdG8gTlVMTCwgc28gdGhlIGN1cnJlbnQgdGl0bGUgaXMgb2J0YWluZWQgYWdhaW4uCisgICAgICovCisgICAgdmltX2ZyZWUob2xkdGl0bGUpOworICAgIG9sZHRpdGxlID0gTlVMTDsKKyMgZW5kaWYKKyAgICBzZXR0bW9kZShUTU9ERV9SQVcpOworICAgIG5lZWRfY2hlY2tfdGltZXN0YW1wcyA9IFRSVUU7CisgICAgZGlkX2NoZWNrX3RpbWVzdGFtcHMgPSBGQUxTRTsKKyNlbHNlCisgICAgc3VzcGVuZF9zaGVsbCgpOworI2VuZGlmCit9CisKKyAgICB2b2lkCittY2hfaW5pdCgpCit7CisgICAgQ29sdW1ucyA9IDgwOworICAgIFJvd3MgPSAyNDsKKworICAgIG91dF9mbHVzaCgpOworICAgIHNldF9zaWduYWxzKCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorc2V0X3NpZ25hbHMoKQoreworI2lmIGRlZmluZWQoU0lHV0lOQ0gpCisgICAgLyoKKyAgICAgKiBXSU5ET1cgQ0hBTkdFIHNpZ25hbCBpcyBoYW5kbGVkIHdpdGggc2lnX3dpbmNoKCkuCisgICAgICovCisgICAgc2lnbmFsKFNJR1dJTkNILCAoUkVUU0lHVFlQRSAoKikoKSlzaWdfd2luY2gpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFdlIHdhbnQgdGhlIFNUT1Agc2lnbmFsIHRvIHdvcmssIHRvIG1ha2UgbWNoX3N1c3BlbmQoKSB3b3JrLgorICAgICAqIEZvciAicnZpbSIgdGhlIFNUT1Agc2lnbmFsIGlzIGlnbm9yZWQuCisgICAgICovCisjaWZkZWYgU0lHVFNUUAorICAgIHNpZ25hbChTSUdUU1RQLCByZXN0cmljdGVkID8gU0lHX0lHTiA6IFNJR19ERkwpOworI2VuZGlmCisjaWZkZWYgX1JFRU5UUkFOVAorICAgIHNpZ25hbChTSUdDT05ULCBzaWdjb250X2hhbmRsZXIpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFdlIHdhbnQgdG8gaWdub3JlIGJyZWFraW5nIG9mIFBJUEVzLgorICAgICAqLworI2lmZGVmIFNJR1BJUEUKKyAgICBzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CisjZW5kaWYKKworICAgIC8qCisgICAgICogV2Ugd2FudCB0byBjYXRjaCBDVFJMLUMgKG9ubHkgd29ya3Mgd2hpbGUgaW4gQ29va2VkIG1vZGUpLgorICAgICAqLworI2lmZGVmIFNJR0lOVAorICAgIHNpZ25hbChTSUdJTlQsIChSRVRTSUdUWVBFICgqKSgpKWNhdGNoX3NpZ2ludCk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWdub3JlIGFsYXJtIHNpZ25hbHMgKFBlcmwncyBhbGFybSgpIGdlbmVyYXRlcyBpdCkuCisgICAgICovCisjaWZkZWYgU0lHQUxSTQorICAgIHNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBDYXRjaCBTSUdQV1IgKHBvd2VyIGZhaWx1cmU/KSB0byBwcmVzZXJ2ZSB0aGUgc3dhcCBmaWxlcywgc28gdGhhdCBubworICAgICAqIHdvcmsgd2lsbCBiZSBsb3N0LgorICAgICAqLworI2lmZGVmIFNJR1BXUgorICAgIHNpZ25hbChTSUdQV1IsIChSRVRTSUdUWVBFICgqKSgpKWNhdGNoX3NpZ3B3cik7CisjZW5kaWYKKworICAgIC8qCisgICAgICogQXJyYW5nZSBmb3Igb3RoZXIgc2lnbmFscyB0byBncmFjZWZ1bGx5IHNodXRkb3duIFZpbS4KKyAgICAgKi8KKyAgICBjYXRjaF9zaWduYWxzKGRlYXRodHJhcCwgU0lHX0VSUik7CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKFNJR0hVUCkKKyAgICAvKgorICAgICAqIFdoZW4gdGhlIEdVSSBpcyBydW5uaW5nLCBpZ25vcmUgdGhlIGhhbmd1cCBzaWduYWwuCisgICAgICovCisgICAgaWYgKGd1aS5pbl91c2UpCisJc2lnbmFsKFNJR0hVUCwgU0lHX0lHTik7CisjZW5kaWYKK30KKworICAgIHZvaWQKK3Jlc2V0X3NpZ25hbHMoKQoreworICAgIGNhdGNoX3NpZ25hbHMoU0lHX0RGTCwgU0lHX0RGTCk7CisjaWZkZWYgX1JFRU5UUkFOVAorICAgIC8qIFNJR0NPTlQgaXNuJ3QgaW4gdGhlIGxpc3QsIGJlY2F1c2UgaXRzIGRlZmF1bHQgYWN0aW9uIGlzIGlnbm9yZSAqLworICAgIHNpZ25hbChTSUdDT05ULCBTSUdfREZMKTsKKyNlbmRpZgorfQorCisgICAgc3RhdGljIHZvaWQKK2NhdGNoX3NpZ25hbHMoZnVuY19kZWFkbHksIGZ1bmNfb3RoZXIpCisgICAgUkVUU0lHVFlQRSAoKmZ1bmNfZGVhZGx5KSgpOworICAgIFJFVFNJR1RZUEUgKCpmdW5jX290aGVyKSgpOworeworICAgIGludAkgICAgaTsKKworICAgIGZvciAoaSA9IDA7IHNpZ25hbF9pbmZvW2ldLnNpZyAhPSAtMTsgaSsrKQorCWlmIChzaWduYWxfaW5mb1tpXS5kZWFkbHkpCisJeworI2lmIGRlZmluZWQoSEFWRV9TSUdBTFRTVEFDSykgJiYgZGVmaW5lZChIQVZFX1NJR0FDVElPTikKKwkgICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKKworCSAgICAvKiBTZXR1cCB0byB1c2UgdGhlIGFsdGVybmF0ZSBzdGFjayBmb3IgdGhlIHNpZ25hbCBmdW5jdGlvbi4gKi8KKwkgICAgc2Euc2FfaGFuZGxlciA9IGZ1bmNfZGVhZGx5OworCSAgICBzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CisjIGlmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9SRUVOVFJBTlQpCisJICAgIC8qIE9uIExpbnV4LCB3aXRoIGdsaWJjIGNvbXBpbGVkIGZvciBrZXJuZWwgMi4yLCB0aGVyZSBpcyBhIGJ1ZyBpbgorCSAgICAgKiB0aHJlYWQgaGFuZGxpbmcgaW4gY29tYmluYXRpb24gd2l0aCB1c2luZyB0aGUgYWx0ZXJuYXRlIHN0YWNrOgorCSAgICAgKiBwdGhyZWFkIGxpYnJhcnkgZnVuY3Rpb25zIHRyeSB0byB1c2UgdGhlIHN0YWNrIHBvaW50ZXIgdG8KKwkgICAgICogaWRlbnRpZnkgdGhlIGN1cnJlbnQgdGhyZWFkLCBjYXVzaW5nIGEgU0VHViBzaWduYWwsIHdoaWNoCisJICAgICAqIHJlY3Vyc2l2ZWx5IGNhbGxzIGRlYXRodHJhcCgpIGFuZCBoYW5ncy4gKi8KKwkgICAgc2Euc2FfZmxhZ3MgPSAwOworIyBlbHNlCisJICAgIHNhLnNhX2ZsYWdzID0gU0FfT05TVEFDSzsKKyMgZW5kaWYKKwkgICAgc2lnYWN0aW9uKHNpZ25hbF9pbmZvW2ldLnNpZywgJnNhLCBOVUxMKTsKKyNlbHNlCisjIGlmIGRlZmluZWQoSEFWRV9TSUdBTFRTVEFDSykgJiYgZGVmaW5lZChIQVZFX1NJR1ZFQykKKwkgICAgc3RydWN0IHNpZ3ZlYyBzdjsKKworCSAgICAvKiBTZXR1cCB0byB1c2UgdGhlIGFsdGVybmF0ZSBzdGFjayBmb3IgdGhlIHNpZ25hbCBmdW5jdGlvbi4gKi8KKwkgICAgc3Yuc3ZfaGFuZGxlciA9IGZ1bmNfZGVhZGx5OworCSAgICBzdi5zdl9tYXNrID0gMDsKKwkgICAgc3Yuc3ZfZmxhZ3MgPSBTVl9PTlNUQUNLOworCSAgICBzaWd2ZWMoc2lnbmFsX2luZm9baV0uc2lnLCAmc3YsIE5VTEwpOworIyBlbHNlCisJICAgIHNpZ25hbChzaWduYWxfaW5mb1tpXS5zaWcsIGZ1bmNfZGVhZGx5KTsKKyMgZW5kaWYKKyNlbmRpZgorCX0KKwllbHNlIGlmIChmdW5jX290aGVyICE9IFNJR19FUlIpCisJICAgIHNpZ25hbChzaWduYWxfaW5mb1tpXS5zaWcsIGZ1bmNfb3RoZXIpOworfQorCisvKgorICogQ2hlY2tfd2luIGNoZWNrcyB3aGV0aGVyIHdlIGhhdmUgYW4gaW50ZXJhY3RpdmUgc3Rkb3V0LgorICovCisvKiBBUkdTVVNFRCAqLworICAgIGludAorbWNoX2NoZWNrX3dpbihhcmdjLCBhcmd2KQorICAgIGludAkgICAgYXJnYzsKKyAgICBjaGFyICAgICoqYXJndjsKK3sKKyNpZmRlZiBPUzIKKyAgICAvKgorICAgICAqIFN0b3JlIGFyZ3ZbMF0sIG1heSBiZSB1c2VkIGZvciAkVklNLiAgT25seSB1c2UgaXQgaWYgaXQgaXMgYW4gYWJzb2x1dGUKKyAgICAgKiBuYW1lLCBtb3N0bHkgaXQncyBqdXN0ICJ2aW0iIGFuZCBmb3VuZCBpbiB0aGUgcGF0aCwgd2hpY2ggaXMgdW51c2FibGUuCisgICAgICovCisgICAgaWYgKG1jaF9pc0Z1bGxOYW1lKGFyZ3ZbMF0pKQorCWV4ZV9uYW1lID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKWFyZ3ZbMF0pOworI2VuZGlmCisgICAgaWYgKGlzYXR0eSgxKSkKKwlyZXR1cm4gT0s7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgaW5wdXQgY29tZXMgZnJvbSBhIHRlcm1pbmFsLCBGQUxTRSBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK21jaF9pbnB1dF9pc2F0dHkoKQoreworICAgIGlmIChpc2F0dHkocmVhZF9jbWRfZmQpKQorCXJldHVybiBUUlVFOworICAgIHJldHVybiBGQUxTRTsKK30KKworI2lmZGVmIEZFQVRfWDExCisKKyMgaWYgZGVmaW5lZChIQVZFX0dFVFRJTUVPRkRBWSkgJiYgZGVmaW5lZChIQVZFX1NZU19USU1FX0gpIFwKKwkmJiAoZGVmaW5lZChGRUFUX1hDTElQQk9BUkQpIHx8IGRlZmluZWQoRkVBVF9USVRMRSkpCisKK3N0YXRpYyB2b2lkIHhvcGVuX21lc3NhZ2UgX19BUkdTKChzdHJ1Y3QgdGltZXZhbCAqdHZwKSk7CisKKy8qCisgKiBHaXZlIGEgbWVzc2FnZSBhYm91dCB0aGUgZWxhcHNlZCB0aW1lIGZvciBvcGVuaW5nIHRoZSBYIHdpbmRvdy4KKyAqLworICAgIHN0YXRpYyB2b2lkCit4b3Blbl9tZXNzYWdlKHR2cCkKKyAgICBzdHJ1Y3QgdGltZXZhbCAqdHZwOwkvKiBtdXN0IGNvbnRhaW4gc3RhcnQgdGltZSAqLworeworICAgIHN0cnVjdCB0aW1ldmFsICBlbmRfdHY7CisKKyAgICAvKiBDb21wdXRlIGVsYXBzZWQgdGltZS4gKi8KKyAgICBnZXR0aW1lb2ZkYXkoJmVuZF90diwgTlVMTCk7CisgICAgc21zZygoY2hhcl91ICopXygiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRvb2sgJWxkIG1zZWMiKSwKKwkgICAgKGVuZF90di50dl9zZWMgLSB0dnAtPnR2X3NlYykgKiAxMDAwTAorCSAgICArIChlbmRfdHYudHZfdXNlYyAtIHR2cC0+dHZfdXNlYykgLyAxMDAwTCk7Cit9CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9YMTEpICYmIChkZWZpbmVkKEZFQVRfVElUTEUpIHx8IGRlZmluZWQoRkVBVF9YQ0xJUEJPQVJEKSkKKy8qCisgKiBBIGZldyBmdW5jdGlvbnMgc2hhcmVkIGJ5IFgxMSB0aXRsZSBhbmQgY2xpcGJvYXJkIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgeF9lcnJvcl9oYW5kbGVyIF9fQVJHUygoRGlzcGxheSAqZHB5LCBYRXJyb3JFdmVudCAqZXJyb3JfZXZlbnQpKTsKK3N0YXRpYyBpbnQgeF9lcnJvcl9jaGVjayBfX0FSR1MoKERpc3BsYXkgKmRweSwgWEVycm9yRXZlbnQgKmVycm9yX2V2ZW50KSk7CitzdGF0aWMgaW50IHhfY29ubmVjdF90b19zZXJ2ZXIgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50IHRlc3RfeDExX3dpbmRvdyBfX0FSR1MoKERpc3BsYXkgKmRweSkpOworCitzdGF0aWMgaW50CWdvdF94X2Vycm9yID0gRkFMU0U7CisKKy8qCisgKiBYIEVycm9yIGhhbmRsZXIsIG90aGVyd2lzZSBYIGp1c3QgZXhpdHMhICAodmVyeSBydWRlKSAtLSB3ZWJiCisgKi8KKyAgICBzdGF0aWMgaW50Cit4X2Vycm9yX2hhbmRsZXIoZHB5LCBlcnJvcl9ldmVudCkKKyAgICBEaXNwbGF5CSpkcHk7CisgICAgWEVycm9yRXZlbnQJKmVycm9yX2V2ZW50OworeworICAgIFhHZXRFcnJvclRleHQoZHB5LCBlcnJvcl9ldmVudC0+ZXJyb3JfY29kZSwgKGNoYXIgKilJT2J1ZmYsIElPU0laRSk7CisgICAgU1RSQ0FUKElPYnVmZiwgXygiXG5WaW06IEdvdCBYIGVycm9yXG4iKSk7CisKKyAgICAvKiBXZSBjYW5ub3QgcHJpbnQgYSBtZXNzYWdlIGFuZCBjb250aW51ZSwgYmVjYXVzZSBubyBYIGNhbGxzIGFyZSBhbGxvd2VkCisgICAgICogaGVyZSAoY2F1c2VzIG15IHN5c3RlbSB0byBoYW5nKS4gIFNpbGVudGx5IGNvbnRpbnVpbmcgbWlnaHQgYmUgYW4KKyAgICAgKiBhbHRlcm5hdGl2ZS4uLiAqLworICAgIHByZXNlcnZlX2V4aXQoKTsJCSAgICAvKiBwcmVzZXJ2ZSBmaWxlcyBhbmQgZXhpdCAqLworCisgICAgcmV0dXJuIDA7CQkvKiBOT1RSRUFDSEVEICovCit9CisKKy8qCisgKiBBbm90aGVyIFggRXJyb3IgaGFuZGxlciwganVzdCB1c2VkIHRvIGNoZWNrIGZvciBlcnJvcnMuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIGludAoreF9lcnJvcl9jaGVjayhkcHksIGVycm9yX2V2ZW50KQorICAgIERpc3BsYXkgKmRweTsKKyAgICBYRXJyb3JFdmVudAkqZXJyb3JfZXZlbnQ7Cit7CisgICAgZ290X3hfZXJyb3IgPSBUUlVFOworICAgIHJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChGRUFUX1gxMSkgJiYgZGVmaW5lZChGRUFUX1hDTElQQk9BUkQpCisjIGlmIGRlZmluZWQoSEFWRV9TRVRKTVBfSCkKKy8qCisgKiBBbiBYIElPIEVycm9yIGhhbmRsZXIsIHVzZWQgdG8gY2F0Y2ggZXJyb3Igd2hpbGUgb3BlbmluZyB0aGUgZGlzcGxheS4KKyAqLworc3RhdGljIGludCB4X0lPZXJyb3JfY2hlY2sgX19BUkdTKChEaXNwbGF5ICpkcHkpKTsKKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgaW50Cit4X0lPZXJyb3JfY2hlY2soZHB5KQorICAgIERpc3BsYXkgKmRweTsKK3sKKyAgICAvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgcmV0dXJuLCBpdCBjYXVzZXMgZXhpdCgpLiAgTG9uZ2p1bXAgaW5zdGVhZC4gKi8KKyAgICBMT05HSk1QKGxjX2p1bXBfZW52LCAxKTsKKyAgICAvKk5PVFJFQUNIRUQqLworICAgIHJldHVybiAwOworfQorIyBlbmRpZgorCisvKgorICogQW4gWCBJTyBFcnJvciBoYW5kbGVyLCB1c2VkIHRvIGNhdGNoIHRlcm1pbmFsIGVycm9ycy4KKyAqLworc3RhdGljIGludCB4X0lPZXJyb3JfaGFuZGxlciBfX0FSR1MoKERpc3BsYXkgKmRweSkpOworCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyBpbnQKK3hfSU9lcnJvcl9oYW5kbGVyKGRweSkKKyAgICBEaXNwbGF5ICpkcHk7Cit7CisgICAgeHRlcm1fZHB5ID0gTlVMTDsKKyAgICB4MTFfd2luZG93ID0gMDsKKyAgICB4MTFfZGlzcGxheSA9IE5VTEw7CisgICAgeHRlcm1fU2hlbGwgPSAoV2lkZ2V0KTA7CisKKyAgICAvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgcmV0dXJuLCBpdCBjYXVzZXMgZXhpdCgpLiAgTG9uZ2p1bXAgaW5zdGVhZC4gKi8KKyAgICBMT05HSk1QKHhfanVtcF9lbnYsIDEpOworICAgIC8qTk9UUkVBQ0hFRCovCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybiBUUlVFIHdoZW4gY29ubmVjdGlvbiB0byB0aGUgWCBzZXJ2ZXIgaXMgZGVzaXJlZC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3hfY29ubmVjdF90b19zZXJ2ZXIoKQoreworICAgIHJlZ21hdGNoX1QJcmVnbWF0Y2g7CisKKyNpZiBkZWZpbmVkKEZFQVRfQ0xJRU5UU0VSVkVSKQorICAgIGlmICh4X2ZvcmNlX2Nvbm5lY3QpCisJcmV0dXJuIFRSVUU7CisjZW5kaWYKKyAgICBpZiAoeF9ub19jb25uZWN0KQorCXJldHVybiBGQUxTRTsKKworICAgIC8qIENoZWNrIGZvciBhIG1hdGNoIHdpdGggImV4Y2x1ZGU6IiBmcm9tICdjbGlwYm9hcmQnLiAqLworICAgIGlmIChjbGlwX2V4Y2x1ZGVfcHJvZyAhPSBOVUxMKQorICAgIHsKKwlyZWdtYXRjaC5ybV9pYyA9IEZBTFNFOwkJLyogRG9uJ3QgaWdub3JlIGNhc2UgKi8KKwlyZWdtYXRjaC5yZWdwcm9nID0gY2xpcF9leGNsdWRlX3Byb2c7CisJaWYgKHZpbV9yZWdleGVjKCZyZWdtYXRjaCwgVF9OQU1FLCAoY29sbnJfVCkwKSkKKwkgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAqIFRlc3QgaWYgImRweSIgYW5kIHgxMV93aW5kb3cgYXJlIHZhbGlkIGJ5IGdldHRpbmcgdGhlIHdpbmRvdyB0aXRsZS4KKyAqIEkgZG9uJ3QgYWN0dWFsbHkgd2FudCBpdCB5ZXQsIHNvIHRoZXJlIG1heSBiZSBhIHNpbXBsZXIgY2FsbCB0byB1c2UsIGJ1dAorICogdGhpcyB3aWxsIGNhdXNlIHRoZSBlcnJvciBoYW5kbGVyIHhfZXJyb3JfY2hlY2soKSB0byBiZSBjYWxsZWQgaWYgYW55dGhpbmcKKyAqIGlzIHdyb25nLCBzdWNoIGFzIHRoZSB3aW5kb3cgcG9pbnRlciBiZWluZyBpbnZhbGlkIChhcyBjYW4gaGFwcGVuIHdoZW4gdGhlCisgKiB1c2VyIGNoYW5nZXMgaGlzIERJU1BMQVksIGJ1dCBub3QgaGlzIFdJTkRPV0lEKSAtLSB3ZWJiCisgKi8KKyAgICBzdGF0aWMgaW50Cit0ZXN0X3gxMV93aW5kb3coZHB5KQorICAgIERpc3BsYXkJKmRweTsKK3sKKyAgICBpbnQJCQkoKm9sZF9oYW5kbGVyKSgpOworICAgIFhUZXh0UHJvcGVydHkJdGV4dF9wcm9wOworCisgICAgb2xkX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKHhfZXJyb3JfY2hlY2spOworICAgIGdvdF94X2Vycm9yID0gRkFMU0U7CisgICAgaWYgKFhHZXRXTU5hbWUoZHB5LCB4MTFfd2luZG93LCAmdGV4dF9wcm9wKSkKKwlYRnJlZSgodm9pZCAqKXRleHRfcHJvcC52YWx1ZSk7CisgICAgWFN5bmMoZHB5LCBGYWxzZSk7CisgICAgKHZvaWQpWFNldEVycm9ySGFuZGxlcihvbGRfaGFuZGxlcik7CisKKyAgICBpZiAocF92ZXJib3NlID4gMCAmJiBnb3RfeF9lcnJvcikKKwlNU0coXygiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIpKTsKKworICAgIHJldHVybiAoZ290X3hfZXJyb3IgPyBGQUlMIDogT0spOworfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1RJVExFCisKKyNpZmRlZiBGRUFUX1gxMQorCitzdGF0aWMgaW50IGdldF94MTFfdGhpbmcgX19BUkdTKChpbnQgZ2V0X3RpdGxlLCBpbnQgdGVzdF9vbmx5KSk7CisKKy8qCisgKiB0cnkgdG8gZ2V0IHgxMSB3aW5kb3cgYW5kIGRpc3BsYXkKKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfeDExX3dpbmRpcygpCit7CisgICAgY2hhcgkgICAgKndpbmlkOworICAgIHN0YXRpYyBpbnQJICAgIHJlc3VsdCA9IC0xOworI2RlZmluZSBYRF9OT05FCSAwCS8qIHgxMV9kaXNwbGF5IG5vdCBzZXQgaGVyZSAqLworI2RlZmluZSBYRF9IRVJFCSAxCS8qIHgxMV9kaXNwbGF5IG9wZW5lZCBoZXJlICovCisjZGVmaW5lIFhEX0dVSQkgMgkvKiB4MTFfZGlzcGxheSB1c2VkIGZyb20gZ3VpLmRweSAqLworI2RlZmluZSBYRF9YVEVSTSAzCS8qIHgxMV9kaXNwbGF5IHVzZWQgZnJvbSB4dGVybV9kcHkgKi8KKyAgICBzdGF0aWMgaW50CSAgICB4MTFfZGlzcGxheV9mcm9tID0gWERfTk9ORTsKKyAgICBzdGF0aWMgaW50CSAgICBkaWRfc2V0X2Vycm9yX2hhbmRsZXIgPSBGQUxTRTsKKworICAgIGlmICghZGlkX3NldF9lcnJvcl9oYW5kbGVyKQorICAgIHsKKwkvKiBYIGp1c3QgZXhpdHMgaWYgaXQgZmluZHMgYW4gZXJyb3Igb3RoZXJ3aXNlISAqLworCSh2b2lkKVhTZXRFcnJvckhhbmRsZXIoeF9lcnJvcl9oYW5kbGVyKTsKKwlkaWRfc2V0X2Vycm9yX2hhbmRsZXIgPSBUUlVFOworICAgIH0KKworI2lmIGRlZmluZWQoRkVBVF9HVUlfWDExKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykKKyAgICBpZiAoZ3VpLmluX3VzZSkKKyAgICB7CisJLyoKKwkgKiBJZiB0aGUgWDExIGRpc3BsYXkgd2FzIG9wZW5lZCBoZXJlIGJlZm9yZSwgZm9yIHRoZSB3aW5kb3cgd2hlcmUgVmltCisJICogd2FzIHN0YXJ0ZWQsIGNsb3NlIHRoYXQgb25lIG5vdyB0byBhdm9pZCBhIG1lbW9yeSBsZWFrLgorCSAqLworCWlmICh4MTFfZGlzcGxheV9mcm9tID09IFhEX0hFUkUgJiYgeDExX2Rpc3BsYXkgIT0gTlVMTCkKKwl7CisJICAgIFhDbG9zZURpc3BsYXkoeDExX2Rpc3BsYXkpOworCSAgICB4MTFfZGlzcGxheV9mcm9tID0gWERfTk9ORTsKKwl9CisJaWYgKGd1aV9nZXRfeDExX3dpbmRpcygmeDExX3dpbmRvdywgJngxMV9kaXNwbGF5KSA9PSBPSykKKwl7CisJICAgIHgxMV9kaXNwbGF5X2Zyb20gPSBYRF9HVUk7CisJICAgIHJldHVybiBPSzsKKwl9CisJeDExX2Rpc3BsYXkgPSBOVUxMOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICBlbHNlIGlmICh4MTFfZGlzcGxheV9mcm9tID09IFhEX0dVSSkKKyAgICB7CisJLyogR1VJIG11c3QgaGF2ZSBzdG9wcGVkIHNvbWVob3csIGNsZWFyIHgxMV9kaXNwbGF5ICovCisJeDExX3dpbmRvdyA9IDA7CisJeDExX2Rpc3BsYXkgPSBOVUxMOworCXgxMV9kaXNwbGF5X2Zyb20gPSBYRF9OT05FOworICAgIH0KKyNlbmRpZgorCisgICAgLyogV2hlbiBzdGFydGVkIHdpdGggdGhlICItWCIgYXJndW1lbnQsIGRvbid0IHRyeSBjb25uZWN0aW5nLiAqLworICAgIGlmICgheF9jb25uZWN0X3RvX3NlcnZlcigpKQorCXJldHVybiBGQUlMOworCisgICAgLyoKKyAgICAgKiBJZiBXSU5ET1dJRCBub3Qgc2V0LCBzaG91bGQgdHJ5IGFub3RoZXIgbWV0aG9kIHRvIGZpbmQgb3V0CisgICAgICogd2hhdCB0aGUgY3VycmVudCB3aW5kb3cgbnVtYmVyIGlzLiBUaGUgb25seSBjb2RlIEkga25vdyBmb3IKKyAgICAgKiB0aGlzIGlzIHZlcnkgY29tcGxpY2F0ZWQuCisgICAgICogV2UgYXNzdW1lIHRoYXQgemVybyBpcyBpbnZhbGlkIGZvciBXSU5ET1dJRC4KKyAgICAgKi8KKyAgICBpZiAoeDExX3dpbmRvdyA9PSAwICYmICh3aW5pZCA9IGdldGVudigiV0lORE9XSUQiKSkgIT0gTlVMTCkKKwl4MTFfd2luZG93ID0gKFdpbmRvdylhdG9sKHdpbmlkKTsKKworI2lmZGVmIEZFQVRfWENMSVBCT0FSRAorICAgIGlmICh4dGVybV9kcHkgIT0gTlVMTCAmJiB4MTFfd2luZG93ICE9IDApCisgICAgeworCS8qIENoZWNrZWQgaXQgYWxyZWFkeS4gKi8KKwlpZiAoeDExX2Rpc3BsYXlfZnJvbSA9PSBYRF9YVEVSTSkKKwkgICAgcmV0dXJuIE9LOworCisJLyoKKwkgKiBJZiB0aGUgWDExIGRpc3BsYXkgd2FzIG9wZW5lZCBoZXJlIGJlZm9yZSwgZm9yIHRoZSB3aW5kb3cgd2hlcmUgVmltCisJICogd2FzIHN0YXJ0ZWQsIGNsb3NlIHRoYXQgb25lIG5vdyB0byBhdm9pZCBhIG1lbW9yeSBsZWFrLgorCSAqLworCWlmICh4MTFfZGlzcGxheV9mcm9tID09IFhEX0hFUkUgJiYgeDExX2Rpc3BsYXkgIT0gTlVMTCkKKwkgICAgWENsb3NlRGlzcGxheSh4MTFfZGlzcGxheSk7CisJeDExX2Rpc3BsYXkgPSB4dGVybV9kcHk7CisJeDExX2Rpc3BsYXlfZnJvbSA9IFhEX1hURVJNOworCWlmICh0ZXN0X3gxMV93aW5kb3coeDExX2Rpc3BsYXkpID09IEZBSUwpCisJeworCSAgICAvKiBwcm9iYWJseSBiYWQgJFdJTkRPV0lEICovCisJICAgIHgxMV93aW5kb3cgPSAwOworCSAgICB4MTFfZGlzcGxheSA9IE5VTEw7CisJICAgIHgxMV9kaXNwbGF5X2Zyb20gPSBYRF9OT05FOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisJcmV0dXJuIE9LOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHgxMV93aW5kb3cgPT0gMCB8fCB4MTFfZGlzcGxheSA9PSBOVUxMKQorCXJlc3VsdCA9IC0xOworCisgICAgaWYgKHJlc3VsdCAhPSAtMSkJICAgIC8qIEhhdmUgYWxyZWFkeSBiZWVuIGhlcmUgYW5kIHNldCB0aGlzICovCisJcmV0dXJuIHJlc3VsdDsJICAgIC8qIERvbid0IGRvIGFsbCB0aGVzZSBYIGNhbGxzIGFnYWluICovCisKKyAgICBpZiAoeDExX3dpbmRvdyAhPSAwICYmIHgxMV9kaXNwbGF5ID09IE5VTEwpCisgICAgeworI2lmZGVmIFNFVF9TSUdfQUxBUk0KKwlSRVRTSUdUWVBFICgqc2lnX3NhdmUpKCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfR0VUVElNRU9GREFZKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1RJTUVfSCkKKwlzdHJ1Y3QgdGltZXZhbCAgc3RhcnRfdHY7CisKKwlpZiAocF92ZXJib3NlID4gMCkKKwkgICAgZ2V0dGltZW9mZGF5KCZzdGFydF90diwgTlVMTCk7CisjZW5kaWYKKworI2lmZGVmIFNFVF9TSUdfQUxBUk0KKwkvKgorCSAqIE9wZW5pbmcgdGhlIERpc3BsYXkgbWF5IGhhbmcgaWYgdGhlIERJU1BMQVkgc2V0dGluZyBpcyB3cm9uZywgb3IKKwkgKiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGlzIGJhZC4gIFNldCBhbiBhbGFybSB0aW1lciB0byBnZXQgb3V0LgorCSAqLworCXNpZ19hbGFybV9jYWxsZWQgPSBGQUxTRTsKKwlzaWdfc2F2ZSA9IChSRVRTSUdUWVBFICgqKSgpKXNpZ25hbChTSUdBTFJNLAorCQkJCQkJIChSRVRTSUdUWVBFICgqKSgpKXNpZ19hbGFybSk7CisJYWxhcm0oMik7CisjZW5kaWYKKwl4MTFfZGlzcGxheSA9IFhPcGVuRGlzcGxheShOVUxMKTsKKworI2lmZGVmIFNFVF9TSUdfQUxBUk0KKwlhbGFybSgwKTsKKwlzaWduYWwoU0lHQUxSTSwgKFJFVFNJR1RZUEUgKCopKCkpc2lnX3NhdmUpOworCWlmIChwX3ZlcmJvc2UgPiAwICYmIHNpZ19hbGFybV9jYWxsZWQpCisJICAgIE1TRyhfKCJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IikpOworI2VuZGlmCisJaWYgKHgxMV9kaXNwbGF5ICE9IE5VTEwpCisJeworIyBpZiBkZWZpbmVkKEhBVkVfR0VUVElNRU9GREFZKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1RJTUVfSCkKKwkgICAgaWYgKHBfdmVyYm9zZSA+IDApCisJCXhvcGVuX21lc3NhZ2UoJnN0YXJ0X3R2KTsKKyMgZW5kaWYKKwkgICAgaWYgKHRlc3RfeDExX3dpbmRvdyh4MTFfZGlzcGxheSkgPT0gRkFJTCkKKwkgICAgeworCQkvKiBNYXliZSB3aW5kb3cgaWQgaXMgYmFkICovCisJCXgxMV93aW5kb3cgPSAwOworCQlYQ2xvc2VEaXNwbGF5KHgxMV9kaXNwbGF5KTsKKwkJeDExX2Rpc3BsYXkgPSBOVUxMOworCSAgICB9CisJICAgIGVsc2UKKwkJeDExX2Rpc3BsYXlfZnJvbSA9IFhEX0hFUkU7CisJfQorICAgIH0KKyAgICBpZiAoeDExX3dpbmRvdyA9PSAwIHx8IHgxMV9kaXNwbGF5ID09IE5VTEwpCisJcmV0dXJuIChyZXN1bHQgPSBGQUlMKTsKKyAgICByZXR1cm4gKHJlc3VsdCA9IE9LKTsKK30KKworLyoKKyAqIERldGVybWluZSBvcmlnaW5hbCB4MTEgV2luZG93IFRpdGxlCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfeDExX3RpdGxlKHRlc3Rfb25seSkKKyAgICBpbnQJCXRlc3Rfb25seTsKK3sKKyAgICBpbnQJCXJldHZhbDsKKworICAgIHJldHZhbCA9IGdldF94MTFfdGhpbmcoVFJVRSwgdGVzdF9vbmx5KTsKKworICAgIC8qIGNvdWxkIG5vdCBnZXQgb2xkIHRpdGxlOiBvbGR0aXRsZSA9PSBOVUxMICovCisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogRGV0ZXJtaW5lIG9yaWdpbmFsIHgxMSBXaW5kb3cgaWNvbgorICovCisgICAgc3RhdGljIGludAorZ2V0X3gxMV9pY29uKHRlc3Rfb25seSkKKyAgICBpbnQJCXRlc3Rfb25seTsKK3sKKyAgICBpbnQJCXJldHZhbCA9IEZBTFNFOworCisgICAgcmV0dmFsID0gZ2V0X3gxMV90aGluZyhGQUxTRSwgdGVzdF9vbmx5KTsKKworICAgIC8qIGNvdWxkIG5vdCBnZXQgb2xkIGljb24sIHVzZSB0ZXJtaW5hbCBuYW1lICovCisgICAgaWYgKG9sZGljb24gPT0gTlVMTCAmJiAhdGVzdF9vbmx5KQorICAgIHsKKwlpZiAoU1RSTkNNUChUX05BTUUsICJidWlsdGluXyIsIDgpID09IDApCisJICAgIG9sZGljb24gPSBUX05BTUUgKyA4OworCWVsc2UKKwkgICAgb2xkaWNvbiA9IFRfTkFNRTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisgICAgc3RhdGljIGludAorZ2V0X3gxMV90aGluZyhnZXRfdGl0bGUsIHRlc3Rfb25seSkKKyAgICBpbnQJCWdldF90aXRsZTsJLyogZ2V0IHRpdGxlIHN0cmluZyAqLworICAgIGludAkJdGVzdF9vbmx5OworeworICAgIFhUZXh0UHJvcGVydHkJdGV4dF9wcm9wOworICAgIGludAkJCXJldHZhbCA9IEZBTFNFOworICAgIFN0YXR1cwkJc3RhdHVzOworCisgICAgaWYgKGdldF94MTFfd2luZGlzKCkgPT0gT0spCisgICAgeworCS8qIEdldCB3aW5kb3cvaWNvbiBuYW1lIGlmIGFueSAqLworCWlmIChnZXRfdGl0bGUpCisJICAgIHN0YXR1cyA9IFhHZXRXTU5hbWUoeDExX2Rpc3BsYXksIHgxMV93aW5kb3csICZ0ZXh0X3Byb3ApOworCWVsc2UKKwkgICAgc3RhdHVzID0gWEdldFdNSWNvbk5hbWUoeDExX2Rpc3BsYXksIHgxMV93aW5kb3csICZ0ZXh0X3Byb3ApOworCisJLyoKKwkgKiBJZiB0ZXJtaW5hbCBpcyB4dGVybSwgdGhlbiB4MTFfd2luZG93IG1heSBiZSBhIGNoaWxkIHdpbmRvdyBvZiB0aGUKKwkgKiBvdXRlciB4dGVybSB3aW5kb3cgdGhhdCBhY3R1YWxseSBjb250YWlucyB0aGUgd2luZG93L2ljb24gbmFtZSwgc28KKwkgKiBrZWVwIHRyYXZlcnNpbmcgdXAgdGhlIHRyZWUgdW50aWwgYSB3aW5kb3cgd2l0aCBhIHRpdGxlL2ljb24gaXMKKwkgKiBmb3VuZC4KKwkgKi8KKwkvKiBQcmV2aW91c2x5IHRoaXMgd2FzIG9ubHkgZG9uZSBmb3IgeHRlcm0gYW5kIGFsaWtlcy4gIEkgZG9uJ3Qgc2VlIGEKKwkgKiByZWFzb24gd2h5IGl0IHdvdWxkIGZhaWwgZm9yIG90aGVyIHRlcm1pbmFsIGVtdWxhdG9ycy4KKwkgKiBpZiAodGVybV9pc194dGVybSkgKi8KKwl7CisJICAgIFdpbmRvdwkgICAgcm9vdDsKKwkgICAgV2luZG93CSAgICBwYXJlbnQ7CisJICAgIFdpbmRvdwkgICAgd2luID0geDExX3dpbmRvdzsKKwkgICAgV2luZG93CSAgICpjaGlsZHJlbjsKKwkgICAgdW5zaWduZWQgaW50ICAgIG51bV9jaGlsZHJlbjsKKworCSAgICB3aGlsZSAoIXN0YXR1cyB8fCB0ZXh0X3Byb3AudmFsdWUgPT0gTlVMTCkKKwkgICAgeworCQlpZiAoIVhRdWVyeVRyZWUoeDExX2Rpc3BsYXksIHdpbiwgJnJvb3QsICZwYXJlbnQsICZjaGlsZHJlbiwKKwkJCQkJCQkgICAgICAgJm51bV9jaGlsZHJlbikpCisJCSAgICBicmVhazsKKwkJaWYgKGNoaWxkcmVuKQorCQkgICAgWEZyZWUoKHZvaWQgKiljaGlsZHJlbik7CisJCWlmIChwYXJlbnQgPT0gcm9vdCB8fCBwYXJlbnQgPT0gMCkKKwkJICAgIGJyZWFrOworCisJCXdpbiA9IHBhcmVudDsKKwkJaWYgKGdldF90aXRsZSkKKwkJICAgIHN0YXR1cyA9IFhHZXRXTU5hbWUoeDExX2Rpc3BsYXksIHdpbiwgJnRleHRfcHJvcCk7CisJCWVsc2UKKwkJICAgIHN0YXR1cyA9IFhHZXRXTUljb25OYW1lKHgxMV9kaXNwbGF5LCB3aW4sICZ0ZXh0X3Byb3ApOworCSAgICB9CisJfQorCWlmIChzdGF0dXMgJiYgdGV4dF9wcm9wLnZhbHVlICE9IE5VTEwpCisJeworCSAgICByZXR2YWwgPSBUUlVFOworCSAgICBpZiAoIXRlc3Rfb25seSkKKwkgICAgeworI2lmZGVmIEZFQVRfWEZPTlRTRVQKKwkJaWYgKHRleHRfcHJvcC5lbmNvZGluZyA9PSBYQV9TVFJJTkcpCisJCXsKKyNlbmRpZgorCQkgICAgaWYgKGdldF90aXRsZSkKKwkJCW9sZHRpdGxlID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKXRleHRfcHJvcC52YWx1ZSk7CisJCSAgICBlbHNlCisJCQlvbGRpY29uID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKXRleHRfcHJvcC52YWx1ZSk7CisjaWZkZWYgRkVBVF9YRk9OVFNFVAorCQl9CisJCWVsc2UKKwkJeworCQkgICAgY2hhciAgICAqKmNsOworCQkgICAgU3RhdHVzICB0cmFuc2Zvcm1fc3RhdHVzOworCQkgICAgaW50CSAgICBuID0gMDsKKworCQkgICAgdHJhbnNmb3JtX3N0YXR1cyA9IFhtYlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoeDExX2Rpc3BsYXksCisJCQkJCQkJCSAmdGV4dF9wcm9wLAorCQkJCQkJCQkgJmNsLCAmbik7CisJCSAgICBpZiAodHJhbnNmb3JtX3N0YXR1cyA+PSBTdWNjZXNzICYmIG4gPiAwICYmIGNsWzBdKQorCQkgICAgeworCQkJaWYgKGdldF90aXRsZSkKKwkJCSAgICBvbGR0aXRsZSA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKikgY2xbMF0pOworCQkJZWxzZQorCQkJICAgIG9sZGljb24gPSB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopIGNsWzBdKTsKKwkJCVhGcmVlU3RyaW5nTGlzdChjbCk7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlpZiAoZ2V0X3RpdGxlKQorCQkJICAgIG9sZHRpdGxlID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKXRleHRfcHJvcC52YWx1ZSk7CisJCQllbHNlCisJCQkgICAgb2xkaWNvbiA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKil0ZXh0X3Byb3AudmFsdWUpOworCQkgICAgfQorCQl9CisjZW5kaWYKKwkgICAgfQorCSAgICBYRnJlZSgodm9pZCAqKXRleHRfcHJvcC52YWx1ZSk7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKiBBcmUgWHV0ZjggZnVuY3Rpb25zIGF2YWlsYWJsZT8gIEF2b2lkIGVycm9yIGZyb20gb2xkIGNvbXBpbGVycy4gKi8KKyNpZiBkZWZpbmVkKFhfSEFWRV9VVEY4X1NUUklORykgJiYgZGVmaW5lZChGRUFUX01CWVRFKQorIyBpZiBYX0hBVkVfVVRGOF9TVFJJTkcKKyMgIGRlZmluZSBVU0VfVVRGOF9TVFJJTkcKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogU2V0IHgxMSBXaW5kb3cgVGl0bGUKKyAqCisgKiBnZXRfeDExX3dpbmRpcygpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGFuZCBoYXZlIHJldHVybmVkIE9LCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc2V0X3gxMV90aXRsZSh0aXRsZSkKKyAgICBjaGFyX3UJKnRpdGxlOworeworCS8qIFhtYlNldFdNUHJvcGVydGllcygpIGFuZCBYdXRmOFNldFdNUHJvcGVydGllcygpIHNob3VsZCB1c2UgYSBTVFJJTkcKKwkgKiB3aGVuIHBvc3NpYmxlLCBDT01QT1VORF9URVhUIG90aGVyd2lzZS4gIENPTVBPVU5EX1RFWFQgaXNuJ3QKKwkgKiBzdXBwb3J0ZWQgZXZlcnl3aGVyZSBhbmQgU1RSSU5HIGRvZXNuJ3Qgd29yayBmb3IgbXVsdGktYnl0ZSB0aXRsZXMuCisJICovCisjaWZkZWYgVVNFX1VURjhfU1RSSU5HCisgICAgaWYgKGVuY191dGY4KQorCVh1dGY4U2V0V01Qcm9wZXJ0aWVzKHgxMV9kaXNwbGF5LCB4MTFfd2luZG93LCAoY29uc3QgY2hhciAqKXRpdGxlLAorCQkJCQkgICAgIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyNpZiBYdFNwZWNpZmljYXRpb25SZWxlYXNlID49IDQKKyMgaWZkZWYgRkVBVF9YRk9OVFNFVAorCVhtYlNldFdNUHJvcGVydGllcyh4MTFfZGlzcGxheSwgeDExX3dpbmRvdywgKGNvbnN0IGNoYXIgKil0aXRsZSwKKwkJCQkJICAgICBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyMgZWxzZQorCVhUZXh0UHJvcGVydHkJdGV4dF9wcm9wOworCisJLyogZGlyZWN0bHkgZnJvbSBleGFtcGxlIDMtMTggImJhc2ljd2luIiBvZiBYbGliIFByb2dyYW1taW5nIE1hbnVhbCAqLworCSh2b2lkKVhTdHJpbmdMaXN0VG9UZXh0UHJvcGVydHkoKGNoYXIgKiopJnRpdGxlLCAxLCAmdGV4dF9wcm9wKTsKKwlYU2V0V01Qcm9wZXJ0aWVzKHgxMV9kaXNwbGF5LCB4MTFfd2luZG93LCAmdGV4dF9wcm9wLAorCQkJCQkgICAgIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwpOworIyBlbmRpZgorI2Vsc2UKKwlYU3RvcmVOYW1lKHgxMV9kaXNwbGF5LCB4MTFfd2luZG93LCAoY2hhciAqKXRpdGxlKTsKKyNlbmRpZgorICAgIH0KKyAgICBYRmx1c2goeDExX2Rpc3BsYXkpOworfQorCisvKgorICogU2V0IHgxMSBXaW5kb3cgaWNvbgorICoKKyAqIGdldF94MTFfd2luZGlzKCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgYW5kIGhhdmUgcmV0dXJuZWQgT0sKKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfeDExX2ljb24oaWNvbikKKyAgICBjaGFyX3UJKmljb247Cit7CisgICAgLyogU2VlIGFib3ZlIGZvciBjb21tZW50cyBhYm91dCB1c2luZyBYKlNldFdNUHJvcGVydGllcygpLiAqLworI2lmZGVmIFVTRV9VVEY4X1NUUklORworICAgIGlmIChlbmNfdXRmOCkKKwlYdXRmOFNldFdNUHJvcGVydGllcyh4MTFfZGlzcGxheSwgeDExX3dpbmRvdywgTlVMTCwgKGNvbnN0IGNoYXIgKilpY29uLAorCQkJCQkJICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgZWxzZQorI2VuZGlmCisgICAgeworI2lmIFh0U3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNAorIyBpZmRlZiBGRUFUX1hGT05UU0VUCisJWG1iU2V0V01Qcm9wZXJ0aWVzKHgxMV9kaXNwbGF5LCB4MTFfd2luZG93LCBOVUxMLCAoY29uc3QgY2hhciAqKWljb24sCisJCQkJCQkgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyMgZWxzZQorCVhUZXh0UHJvcGVydHkJdGV4dF9wcm9wOworCisJKHZvaWQpWFN0cmluZ0xpc3RUb1RleHRQcm9wZXJ0eSgoY2hhciAqKikmaWNvbiwgMSwgJnRleHRfcHJvcCk7CisJWFNldFdNUHJvcGVydGllcyh4MTFfZGlzcGxheSwgeDExX3dpbmRvdywgTlVMTCwgJnRleHRfcHJvcCwKKwkJCQkJCSAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwpOworIyBlbmRpZgorI2Vsc2UKKwlYU2V0SWNvbk5hbWUoeDExX2Rpc3BsYXksIHgxMV93aW5kb3csIChjaGFyICopaWNvbik7CisjZW5kaWYKKyAgICB9CisgICAgWEZsdXNoKHgxMV9kaXNwbGF5KTsKK30KKworI2Vsc2UgIC8qIEZFQVRfWDExICovCisKKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyBpbnQKK2dldF94MTFfdGl0bGUodGVzdF9vbmx5KQorICAgIGludAkgICAgdGVzdF9vbmx5OworeworICAgIHJldHVybiBGQUxTRTsKK30KKworICAgIHN0YXRpYyBpbnQKK2dldF94MTFfaWNvbih0ZXN0X29ubHkpCisgICAgaW50CSAgICB0ZXN0X29ubHk7Cit7CisgICAgaWYgKCF0ZXN0X29ubHkpCisgICAgeworCWlmIChTVFJOQ01QKFRfTkFNRSwgImJ1aWx0aW5fIiwgOCkgPT0gMCkKKwkgICAgb2xkaWNvbiA9IFRfTkFNRSArIDg7CisJZWxzZQorCSAgICBvbGRpY29uID0gVF9OQU1FOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNlbmRpZiAvKiBGRUFUX1gxMSAqLworCisgICAgaW50CittY2hfY2FuX3Jlc3RvcmVfdGl0bGUoKQoreworICAgIHJldHVybiBnZXRfeDExX3RpdGxlKFRSVUUpOworfQorCisgICAgaW50CittY2hfY2FuX3Jlc3RvcmVfaWNvbigpCit7CisgICAgcmV0dXJuIGdldF94MTFfaWNvbihUUlVFKTsKK30KKworLyoKKyAqIFNldCB0aGUgd2luZG93IHRpdGxlIGFuZCBpY29uLgorICovCisgICAgdm9pZAorbWNoX3NldHRpdGxlKHRpdGxlLCBpY29uKQorICAgIGNoYXJfdSAqdGl0bGU7CisgICAgY2hhcl91ICppY29uOworeworICAgIGludAkJdHlwZSA9IDA7CisgICAgc3RhdGljIGludAlyZWN1cnNpdmUgPSAwOworCisgICAgaWYgKFRfTkFNRSA9PSBOVUxMKQkgICAgLyogbm8gdGVybWluYWwgbmFtZSAoeWV0KSAqLworCXJldHVybjsKKyAgICBpZiAodGl0bGUgPT0gTlVMTCAmJiBpY29uID09IE5VTEwpCSAgICAvKiBub3RoaW5nIHRvIGRvICovCisJcmV0dXJuOworCisgICAgLyogV2hlbiBvbmUgb2YgdGhlIFgxMSBmdW5jdGlvbnMgY2F1c2VzIGEgZGVhZGx5IHNpZ25hbCwgd2UgZ2V0IGhlcmUgYWdhaW4KKyAgICAgKiByZWN1cnNpdmVseS4gIEF2b2lkIGhhbmdpbmcgdGhlbiAoc29tZXRoaW5nIGlzIHByb2JhYmx5IGxvY2tlZCkuICovCisgICAgaWYgKHJlY3Vyc2l2ZSkKKwlyZXR1cm47CisgICAgKytyZWN1cnNpdmU7CisKKyAgICAvKgorICAgICAqIGlmIHRoZSB3aW5kb3cgSUQgYW5kIHRoZSBkaXNwbGF5IGlzIGtub3duLCB3ZSBtYXkgdXNlIFgxMSBjYWxscworICAgICAqLworI2lmZGVmIEZFQVRfWDExCisgICAgaWYgKGdldF94MTFfd2luZGlzKCkgPT0gT0spCisJdHlwZSA9IDE7CisjZWxzZQorIyBpZiBkZWZpbmVkKEZFQVRfR1VJX1BIT1RPTikgfHwgZGVmaW5lZChGRUFUX0dVSV9NQUMpIHx8IGRlZmluZWQoRkVBVF9HVUlfR1RLKQorICAgIGlmIChndWkuaW5fdXNlKQorCXR5cGUgPSAxOworIyBlbmRpZgorIyBpZmRlZiBGRUFUX0dVSV9CRU9TCisgICAgLyogVE9ETzogSWYgdGhpcyBtZWFucyAoZ3VpLmluX3VzZSkgd2h5IG5vdCBtZXJnZSB3aXRoIGFib3ZlPyAoRGFueSkgKi8KKyAgICAvKiB3ZSBhbHdheXMgaGF2ZSBhICd3aW5kb3cnICovCisgICAgdHlwZSA9IDE7CisjIGVuZGlmCisjZW5kaWYKKworICAgIC8qCisgICAgICogTm90ZTogaWYgInRfVFMiIGlzIHNldCwgdGl0bGUgaXMgc2V0IHdpdGggZXNjYXBlIHNlcXVlbmNlIHJhdGhlcgorICAgICAqCSAgICAgdGhhbiB4MTEgY2FsbHMsIGJlY2F1c2UgdGhlIHgxMSBjYWxscyBkb24ndCBhbHdheXMgd29yaworICAgICAqLworCisgICAgaWYgKCh0eXBlIHx8ICpUX1RTICE9IE5VTCkgJiYgdGl0bGUgIT0gTlVMTCkKKyAgICB7CisJaWYgKG9sZHRpdGxlID09IE5VTEwKKyNpZmRlZiBGRUFUX0dVSQorCQkmJiAhZ3VpLmluX3VzZQorI2VuZGlmCisJCSkJCS8qIGZpcnN0IGNhbGwgYnV0IG5vdCBpbiBHVUksIHNhdmUgdGl0bGUgKi8KKwkgICAgKHZvaWQpZ2V0X3gxMV90aXRsZShGQUxTRSk7CisKKwlpZiAoKlRfVFMgIT0gTlVMKQkJLyogaXQncyBPSyBpZiB0X2ZzIGlzIGVtcHR5ICovCisJICAgIHRlcm1fc2V0dGl0bGUodGl0bGUpOworI2lmZGVmIEZFQVRfWDExCisJZWxzZQorIyBpZmRlZiBGRUFUX0dVSV9HVEsKKwlpZiAoIWd1aS5pbl91c2UpCQkvKiBkb24ndCBkbyB0aGlzIGlmIEdUSysgaXMgcnVubmluZyAqLworIyBlbmRpZgorCSAgICBzZXRfeDExX3RpdGxlKHRpdGxlKTsJCS8qIHgxMSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoRkVBVF9HVUlfQkVPUykgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKSB8fCBkZWZpbmVkKEZFQVRfR1VJX01BQykKKwllbHNlCisJICAgIGd1aV9tY2hfc2V0dGl0bGUodGl0bGUsIGljb24pOworI2VuZGlmCisJZGlkX3NldF90aXRsZSA9IFRSVUU7CisgICAgfQorCisgICAgaWYgKCh0eXBlIHx8ICpUX0NJUyAhPSBOVUwpICYmIGljb24gIT0gTlVMTCkKKyAgICB7CisJaWYgKG9sZGljb24gPT0gTlVMTAorI2lmZGVmIEZFQVRfR1VJCisJCSYmICFndWkuaW5fdXNlCisjZW5kaWYKKwkJKQkJLyogZmlyc3QgY2FsbCwgc2F2ZSBpY29uICovCisJICAgIGdldF94MTFfaWNvbihGQUxTRSk7CisKKwlpZiAoKlRfQ0lTICE9IE5VTCkKKwl7CisJICAgIG91dF9zdHIoVF9DSVMpOwkJCS8qIHNldCBpY29uIHN0YXJ0ICovCisJICAgIG91dF9zdHJfbmYoaWNvbik7CisJICAgIG91dF9zdHIoVF9DSUUpOwkJCS8qIHNldCBpY29uIGVuZCAqLworCSAgICBvdXRfZmx1c2goKTsKKwl9CisjaWZkZWYgRkVBVF9YMTEKKwllbHNlCisjIGlmZGVmIEZFQVRfR1VJX0dUSworCWlmICghZ3VpLmluX3VzZSkJCS8qIGRvbid0IGRvIHRoaXMgaWYgR1RLKyBpcyBydW5uaW5nICovCisjIGVuZGlmCisJICAgIHNldF94MTFfaWNvbihpY29uKTsJCQkvKiB4MTEgKi8KKyNlbmRpZgorCWRpZF9zZXRfaWNvbiA9IFRSVUU7CisgICAgfQorICAgIC0tcmVjdXJzaXZlOworfQorCisvKgorICogUmVzdG9yZSB0aGUgd2luZG93L2ljb24gdGl0bGUuCisgKiAid2hpY2giIGlzIG9uZSBvZjoKKyAqICAxICBvbmx5IHJlc3RvcmUgdGl0bGUKKyAqICAyICBvbmx5IHJlc3RvcmUgaWNvbgorICogIDMgIHJlc3RvcmUgdGl0bGUgYW5kIGljb24KKyAqLworICAgIHZvaWQKK21jaF9yZXN0b3JlX3RpdGxlKHdoaWNoKQorICAgIGludCB3aGljaDsKK3sKKyAgICAvKiBvbmx5IHJlc3RvcmUgdGhlIHRpdGxlIG9yIGljb24gd2hlbiBpdCBoYXMgYmVlbiBzZXQgKi8KKyAgICBtY2hfc2V0dGl0bGUoKCh3aGljaCAmIDEpICYmIGRpZF9zZXRfdGl0bGUpID8KKwkJCShvbGR0aXRsZSA/IG9sZHRpdGxlIDogcF90aXRsZW9sZCkgOiBOVUxMLAorCQkJICAgICAgKCh3aGljaCAmIDIpICYmIGRpZF9zZXRfaWNvbikgPyBvbGRpY29uIDogTlVMTCk7Cit9CisKKyNlbmRpZiAvKiBGRUFUX1RJVExFICovCisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAibmFtZSIgbG9va3MgbGlrZSBzb21lIHh0ZXJtIG5hbWUuCisgKi8KKyAgICBpbnQKK3ZpbV9pc194dGVybShuYW1lKQorICAgIGNoYXJfdSAqbmFtZTsKK3sKKyAgICBpZiAobmFtZSA9PSBOVUxMKQorCXJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gKFNUUk5JQ01QKG5hbWUsICJ4dGVybSIsIDUpID09IDAKKwkJfHwgU1RSTklDTVAobmFtZSwgIm54dGVybSIsIDYpID09IDAKKwkJfHwgU1RSTklDTVAobmFtZSwgImt0ZXJtIiwgNSkgPT0gMAorCQl8fCBTVFJOSUNNUChuYW1lLCAicnh2dCIsIDQpID09IDAKKwkJfHwgU1RSQ01QKG5hbWUsICJidWlsdGluX3h0ZXJtIikgPT0gMCk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTU9VU0VfVFRZKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiBub24temVybyB3aGVuIHVzaW5nIGFuIHh0ZXJtIG1vdXNlLCBhY2NvcmRpbmcgdG8gJ3R0eW1vdXNlJy4KKyAqIFJldHVybiAxIGZvciAieHRlcm0iLgorICogUmV0dXJuIDIgZm9yICJ4dGVybTIiLgorICovCisgICAgaW50Cit1c2VfeHRlcm1fbW91c2UoKQoreworICAgIGlmICh0dHltX2ZsYWdzID09IFRUWU1fWFRFUk0yKQorCXJldHVybiAyOworICAgIGlmICh0dHltX2ZsYWdzID09IFRUWU1fWFRFUk0pCisJcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworICAgIGludAordmltX2lzX2lyaXMobmFtZSkKKyAgICBjaGFyX3UgICpuYW1lOworeworICAgIGlmIChuYW1lID09IE5VTEwpCisJcmV0dXJuIEZBTFNFOworICAgIHJldHVybiAoU1RSTklDTVAobmFtZSwgImlyaXMtYW5zaSIsIDkpID09IDAKKwkgICAgfHwgU1RSQ01QKG5hbWUsICJidWlsdGluX2lyaXMtYW5zaSIpID09IDApOworfQorCisgICAgaW50Cit2aW1faXNfdnQzMDAobmFtZSkKKyAgICBjaGFyX3UgICpuYW1lOworeworICAgIGlmIChuYW1lID09IE5VTEwpCisJcmV0dXJuIEZBTFNFOwkgICAgICAgLyogYWN0dWFsbHkgYWxsIEFOU0kgY29tcC4gdGVybWluYWxzIHNob3VsZCBiZSBoZXJlICAqLworICAgIHJldHVybiAoU1RSTklDTVAobmFtZSwgInZ0MyIsIDMpID09IDAgICAgIC8qIGl0IHdpbGwgY292ZXIgYWxsIGZyb20gVlQxMDAtVlQzMDAgKi8KKwkgICAgfHwgU1RSTklDTVAobmFtZSwgInZ0MiIsIDMpID09IDAgIC8qIFRPRE86IGZyb20gVlQzNDAgY2FuIGhhbmxlIGNvbG9ycyAgKi8KKwkgICAgfHwgU1RSTklDTVAobmFtZSwgInZ0MSIsIDMpID09IDAKKwkgICAgfHwgU1RSQ01QKG5hbWUsICJidWlsdGluX3Z0MzIwIikgPT0gMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAibmFtZSIgaXMgYSB0ZXJtaW5hbCBmb3Igd2hpY2ggJ3R0eWZhc3QnIHNob3VsZCBiZSBzZXQuCisgKiBUaGlzIHNob3VsZCBpbmNsdWRlIGFsbCB3aW5kb3dlZCB0ZXJtaW5hbCBlbXVsYXRvcnMuCisgKi8KKyAgICBpbnQKK3ZpbV9pc19mYXN0dGVybShuYW1lKQorICAgIGNoYXJfdSAgKm5hbWU7Cit7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkKKwlyZXR1cm4gRkFMU0U7CisgICAgaWYgKHZpbV9pc194dGVybShuYW1lKSB8fCB2aW1faXNfdnQzMDAobmFtZSkgfHwgdmltX2lzX2lyaXMobmFtZSkpCisJcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuICggICBTVFJOSUNNUChuYW1lLCAiaHB0ZXJtIiwgNikgPT0gMAorCSAgICB8fCBTVFJOSUNNUChuYW1lLCAic3VuLWNtZCIsIDcpID09IDAKKwkgICAgfHwgU1RSTklDTVAobmFtZSwgInNjcmVlbiIsIDYpID09IDAKKwkgICAgfHwgU1RSTklDTVAobmFtZSwgImR0dGVybSIsIDYpID09IDApOworfQorCisvKgorICogSW5zZXJ0IHVzZXIgbmFtZSBpbiBzW2xlbl0uCisgKiBSZXR1cm4gT0sgaWYgYSBuYW1lIGZvdW5kLgorICovCisgICAgaW50CittY2hfZ2V0X3VzZXJfbmFtZShzLCBsZW4pCisgICAgY2hhcl91ICAqczsKKyAgICBpbnQJICAgIGxlbjsKK3sKKyNpZmRlZiBWTVMKKyAgICBTVFJOQ1BZKChjaGFyICopcywgY3VzZXJpZChOVUxMKSwgbGVuKTsKKyAgICByZXR1cm4gT0s7CisjZWxzZQorICAgIHJldHVybiBtY2hfZ2V0X3VuYW1lKGdldHVpZCgpLCBzLCBsZW4pOworI2VuZGlmCit9CisKKy8qCisgKiBJbnNlcnQgdXNlciBuYW1lIGZvciAidWlkIiBpbiBzW2xlbl0uCisgKiBSZXR1cm4gT0sgaWYgYSBuYW1lIGZvdW5kLgorICovCisgICAgaW50CittY2hfZ2V0X3VuYW1lKHVpZCwgcywgbGVuKQorICAgIHVpZF90CXVpZDsKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQlsZW47Cit7CisjaWYgZGVmaW5lZChIQVZFX1BXRF9IKSAmJiBkZWZpbmVkKEhBVkVfR0VUUFdVSUQpCisgICAgc3RydWN0IHBhc3N3ZCAgICpwdzsKKworICAgIGlmICgocHcgPSBnZXRwd3VpZCh1aWQpKSAhPSBOVUxMCisJICAgICYmIHB3LT5wd19uYW1lICE9IE5VTEwgJiYgKihwdy0+cHdfbmFtZSkgIT0gTlVMKQorICAgIHsKKwlTVFJOQ1BZKHMsIHB3LT5wd19uYW1lLCBsZW4pOworCXJldHVybiBPSzsKKyAgICB9CisjZW5kaWYKKyAgICBzcHJpbnRmKChjaGFyICopcywgIiVkIiwgKGludCl1aWQpOwkgICAgLyogYXNzdW1lcyBzIGlzIGxvbmcgZW5vdWdoICovCisgICAgcmV0dXJuIEZBSUw7CQkJICAgIC8qIGEgbnVtYmVyIGlzIG5vdCBhIG5hbWUgKi8KK30KKworLyoKKyAqIEluc2VydCBob3N0IG5hbWUgaXMgc1tsZW5dLgorICovCisKKyNpZmRlZiBIQVZFX1NZU19VVFNOQU1FX0gKKyAgICB2b2lkCittY2hfZ2V0X2hvc3RfbmFtZShzLCBsZW4pCisgICAgY2hhcl91ICAqczsKKyAgICBpbnQJICAgIGxlbjsKK3sKKyAgICBzdHJ1Y3QgdXRzbmFtZSB2dXRzbmFtZTsKKworICAgIGlmICh1bmFtZSgmdnV0c25hbWUpIDwgMCkKKwkqcyA9IE5VTDsKKyAgICBlbHNlCisJU1RSTkNQWShzLCB2dXRzbmFtZS5ub2RlbmFtZSwgbGVuKTsKKyAgICBzW2xlbiAtIDFdID0gTlVMOwkvKiBtYWtlIHN1cmUgaXQncyB0ZXJtaW5hdGVkICovCit9CisjZWxzZSAvKiBIQVZFX1NZU19VVFNOQU1FX0ggKi8KKworIyBpZmRlZiBIQVZFX1NZU19TWVNURU1JTkZPX0gKKyMgIGRlZmluZSBnZXRob3N0bmFtZShuYW0sIGxlbikgc3lzaW5mbyhTSV9IT1NUTkFNRSwgbmFtLCBsZW4pCisjIGVuZGlmCisKKyAgICB2b2lkCittY2hfZ2V0X2hvc3RfbmFtZShzLCBsZW4pCisgICAgY2hhcl91ICAqczsKKyAgICBpbnQJICAgIGxlbjsKK3sKKyMgaWZkZWYgVkFYQworICAgIHZheGMkZ2V0aG9zdG5hbWUoKGNoYXIgKilzLCBsZW4pOworIyBlbHNlCisgICAgZ2V0aG9zdG5hbWUoKGNoYXIgKilzLCBsZW4pOworIyBlbmRpZgorICAgIHNbbGVuIC0gMV0gPSBOVUw7CS8qIG1ha2Ugc3VyZSBpdCdzIHRlcm1pbmF0ZWQgKi8KK30KKyNlbmRpZiAvKiBIQVZFX1NZU19VVFNOQU1FX0ggKi8KKworLyoKKyAqIHJldHVybiBwcm9jZXNzIElECisgKi8KKyAgICBsb25nCittY2hfZ2V0X3BpZCgpCit7CisgICAgcmV0dXJuIChsb25nKWdldHBpZCgpOworfQorCisjaWYgIWRlZmluZWQoSEFWRV9TVFJFUlJPUikgJiYgZGVmaW5lZChVU0VfR0VUQ1dEKQorc3RhdGljIGNoYXIgKnN0cmVycm9yIF9fQVJHUygoaW50KSk7CisKKyAgICBzdGF0aWMgY2hhciAqCitzdHJlcnJvcihlcnIpCisgICAgaW50IGVycjsKK3sKKyAgICBleHRlcm4gaW50CSAgICBzeXNfbmVycjsKKyAgICBleHRlcm4gY2hhcgkgICAgKnN5c19lcnJsaXN0W107CisgICAgc3RhdGljIGNoYXIJICAgIGVyWzIwXTsKKworICAgIGlmIChlcnIgPiAwICYmIGVyciA8IHN5c19uZXJyKQorCXJldHVybiAoc3lzX2Vycmxpc3RbZXJyXSk7CisgICAgc3ByaW50ZihlciwgIkVycm9yICVkIiwgZXJyKTsKKyAgICByZXR1cm4gZXI7Cit9CisjZW5kaWYKKworLyoKKyAqIEdldCBuYW1lIG9mIGN1cnJlbnQgZGlyZWN0b3J5IGludG8gYnVmZmVyICdidWYnIG9mIGxlbmd0aCAnbGVuJyBieXRlcy4KKyAqIFJldHVybiBPSyBmb3Igc3VjY2VzcywgRkFJTCBmb3IgZmFpbHVyZS4KKyAqLworICAgIGludAorbWNoX2Rpcm5hbWUoYnVmLCBsZW4pCisgICAgY2hhcl91ICAqYnVmOworICAgIGludAkgICAgbGVuOworeworI2lmIGRlZmluZWQoVVNFX0dFVENXRCkKKyAgICBpZiAoZ2V0Y3dkKChjaGFyICopYnVmLCBsZW4pID09IE5VTEwpCisgICAgeworCVNUUkNQWShidWYsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorICAgIHJldHVybiBPSzsKKyNlbHNlCisgICAgcmV0dXJuIChnZXR3ZCgoY2hhciAqKWJ1ZikgIT0gTlVMTCA/IE9LIDogRkFJTCk7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJlcGxhY2UgYWxsIHNsYXNoZXMgYnkgYmFja3NsYXNoZXMuCisgKiBXaGVuICdzaGVsbHNsYXNoJyBzZXQgZG8gaXQgdGhlIG90aGVyIHdheSBhcm91bmQuCisgKi8KKyAgICB2b2lkCitzbGFzaF9hZGp1c3QocCkKKyAgICBjaGFyX3UgICpwOworeworICAgIHdoaWxlICgqcCkKKyAgICB7CisJaWYgKCpwID09IHBzZXBjTikKKwkgICAgKnAgPSBwc2VwYzsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOworCWVsc2UKKyNlbmRpZgorCSAgICArK3A7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBHZXQgYWJzb2x1dGUgZmlsZSBuYW1lIGludG8gYnVmZmVyICdidWYnIG9mIGxlbmd0aCAnbGVuJyBieXRlcy4KKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgZm9yIHN1Y2Nlc3MKKyAqLworICAgIGludAorbWNoX0Z1bGxOYW1lKGZuYW1lLCBidWYsIGxlbiwgZm9yY2UpCisgICAgY2hhcl91CSpmbmFtZSwgKmJ1ZjsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWZvcmNlOwkJLyogYWxzbyBleHBhbmQgd2hlbiBhbHJlYWR5IGFic29sdXRlIHBhdGggKi8KK3sKKyAgICBpbnQJCWw7CisjaWZkZWYgT1MyCisgICAgaW50CQlvbmx5X2RyaXZlOwkvKiBmaWxlIG5hbWUgaXMgb25seSBhIGRyaXZlIGxldHRlciAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9GQ0hESVIKKyAgICBpbnQJCWZkID0gLTE7CisgICAgc3RhdGljIGludAlkb250X2ZjaGRpciA9IEZBTFNFOwkvKiBUUlVFIHdoZW4gZmNoZGlyKCkgZG9lc24ndCB3b3JrICovCisjZW5kaWYKKyAgICBjaGFyX3UJb2xkZGlyW01BWFBBVEhMXTsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlyZXR2YWwgPSBPSzsKKworI2lmZGVmIFZNUworICAgIGZuYW1lID0gdm1zX2ZpeGZpbGVuYW1lKGZuYW1lKTsKKyNlbmRpZgorCisgICAgLyogZXhwYW5kIGl0IGlmIGZvcmNlZCBvciBub3QgYW4gYWJzb2x1dGUgcGF0aCAqLworICAgIGlmIChmb3JjZSB8fCAhbWNoX2lzRnVsbE5hbWUoZm5hbWUpKQorICAgIHsKKwkvKgorCSAqIElmIHRoZSBmaWxlIG5hbWUgaGFzIGEgcGF0aCwgY2hhbmdlIHRvIHRoYXQgZGlyZWN0b3J5IGZvciBhIG1vbWVudCwKKwkgKiBhbmQgdGhlbiBkbyB0aGUgZ2V0d2QoKSAoYW5kIGdldCBiYWNrIHRvIHdoZXJlIHdlIHdlcmUpLgorCSAqIFRoaXMgd2lsbCBnZXQgdGhlIGNvcnJlY3QgcGF0aCBuYW1lIHdpdGggIi4uLyIgdGhpbmdzLgorCSAqLworI2lmZGVmIE9TMgorCW9ubHlfZHJpdmUgPSAwOworCWlmICgoKHAgPSB2aW1fc3RycmNocihmbmFtZSwgJy8nKSkgIT0gTlVMTCkKKwkJfHwgKChwID0gdmltX3N0cnJjaHIoZm5hbWUsICdcXCcpKSAhPSBOVUxMKQorCQl8fCAoKChwID0gdmltX3N0cmNocihmbmFtZSwgICc6JykpICE9IE5VTEwpICYmICsrb25seV9kcml2ZSkpCisjZWxzZQorCWlmICgocCA9IHZpbV9zdHJyY2hyKGZuYW1lLCAnLycpKSAhPSBOVUxMKQorI2VuZGlmCisJeworI2lmZGVmIEhBVkVfRkNIRElSCisJICAgIC8qCisJICAgICAqIFVzZSBmY2hkaXIoKSBpZiBwb3NzaWJsZSwgaXQncyBzYWlkIHRvIGJlIGZhc3RlciBhbmQgbW9yZQorCSAgICAgKiByZWxpYWJsZS4gIEJ1dCBvbiBTdW5PUyA0IGl0IG1pZ2h0IG5vdCB3b3JrLiAgQ2hlY2sgdGhpcyBieQorCSAgICAgKiBkb2luZyBhIGZjaGRpcigpIHJpZ2h0IG5vdy4KKwkgICAgICovCisJICAgIGlmICghZG9udF9mY2hkaXIpCisJICAgIHsKKwkJZmQgPSBvcGVuKCIuIiwgT19SRE9OTFkgfCBPX0VYVFJBLCAwKTsKKwkJaWYgKGZkID49IDAgJiYgZmNoZGlyKGZkKSA8IDApCisJCXsKKwkJICAgIGNsb3NlKGZkKTsKKwkJICAgIGZkID0gLTE7CisJCSAgICBkb250X2ZjaGRpciA9IFRSVUU7CSAgICAvKiBkb24ndCB0cnkgYWdhaW4gKi8KKwkJfQorCSAgICB9CisjZW5kaWYKKworCSAgICAvKiBPbmx5IGNoYW5nZSBkaXJlY3Rvcnkgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBjYW4gcmV0dXJuIHRvIHdoZXJlCisJICAgICAqIHdlIGFyZSBub3cuICBBZnRlciBkb2luZyAic3UiIGNoZGlyKCIuIikgbWlnaHQgbm90IHdvcmsuICovCisJICAgIGlmICgKKyNpZmRlZiBIQVZFX0ZDSERJUgorCQlmZCA8IDAgJiYKKyNlbmRpZgorCQkJKG1jaF9kaXJuYW1lKG9sZGRpciwgTUFYUEFUSEwpID09IEZBSUwKKwkJCQkJICAgfHwgbWNoX2NoZGlyKChjaGFyICopb2xkZGlyKSAhPSAwKSkKKwkgICAgeworCQlwID0gTlVMTDsJLyogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyOiBkb24ndCBjaGRpciAqLworCQlyZXR2YWwgPSBGQUlMOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworI2lmZGVmIE9TMgorCQkvKgorCQkgKiBjb21wZW5zYXRlIGZvciBjYXNlIHdoZXJlICc6JyBmcm9tICJEOiIgd2FzIHRoZSBvbmx5CisJCSAqIHBhdGggc2VwYXJhdG9yIGRldGVjdGVkIGluIHRoZSBmaWxlIG5hbWU7IHRoZSBfbmV4dF8KKwkJICogY2hhcmFjdGVyIGhhcyB0byBiZSByZW1vdmVkLCBhbmQgdGhlbiByZXN0b3JlZCBsYXRlci4KKwkJICovCisJCWlmIChvbmx5X2RyaXZlKQorCQkgICAgcCsrOworI2VuZGlmCisJCS8qIFRoZSBkaXJlY3RvcnkgaXMgY29waWVkIGludG8gYnVmW10sIHRvIGJlIGFibGUgdG8gcmVtb3ZlCisJCSAqIHRoZSBmaWxlIG5hbWUgd2l0aG91dCBjaGFuZ2luZyBpdCAoY291bGQgYmUgYSBzdHJpbmcgaW4KKwkJICogcmVhZC1vbmx5IG1lbW9yeSkgKi8KKwkJaWYgKHAgLSBmbmFtZSA+PSBsZW4pCisJCSAgICByZXR2YWwgPSBGQUlMOworCQllbHNlCisJCXsKKwkJICAgIFNUUk5DUFkoYnVmLCBmbmFtZSwgcCAtIGZuYW1lKTsKKwkJICAgIGJ1ZltwIC0gZm5hbWVdID0gTlVMOworCQkgICAgaWYgKG1jaF9jaGRpcigoY2hhciAqKWJ1ZikpCisJCQlyZXR2YWwgPSBGQUlMOworCQkgICAgZWxzZQorCQkJZm5hbWUgPSBwICsgMTsKKwkJICAgICpidWYgPSBOVUw7CisJCX0KKyNpZmRlZiBPUzIKKwkJaWYgKG9ubHlfZHJpdmUpCisJCXsKKwkJICAgIHAtLTsKKwkJICAgIGlmIChyZXR2YWwgIT0gRkFJTCkKKwkJCWZuYW1lLS07CisJCX0KKyNlbmRpZgorCSAgICB9CisJfQorCWlmIChtY2hfZGlybmFtZShidWYsIGxlbikgPT0gRkFJTCkKKwl7CisJICAgIHJldHZhbCA9IEZBSUw7CisJICAgICpidWYgPSBOVUw7CisJfQorCWlmIChwICE9IE5VTEwpCisJeworI2lmZGVmIEhBVkVfRkNIRElSCisJICAgIGlmIChmZCA+PSAwKQorCSAgICB7CisJCWwgPSBmY2hkaXIoZmQpOworCQljbG9zZShmZCk7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJCWwgPSBtY2hfY2hkaXIoKGNoYXIgKilvbGRkaXIpOworCSAgICBpZiAobCAhPSAwKQorCQlFTVNHKF8oZV9wcmV2X2RpcikpOworCX0KKworCWwgPSBTVFJMRU4oYnVmKTsKKwlpZiAobCA+PSBsZW4pCisJICAgIHJldHZhbCA9IEZBSUw7CisjaWZuZGVmIFZNUworCWVsc2UKKwl7CisJICAgIGlmIChsID4gMCAmJiBidWZbbCAtIDFdICE9ICcvJyAmJiAqZm5hbWUgIT0gTlVMCisJCQkJCQkgICAmJiBTVFJDTVAoZm5hbWUsICIuIikgIT0gMCkKKwkJU1RSQ0FUKGJ1ZiwgIi8iKTsKKwl9CisjZW5kaWYKKyAgICB9CisgICAgLyogQ2F0Y2ggZmlsZSBuYW1lcyB3aGljaCBhcmUgdG9vIGxvbmcuICovCisgICAgaWYgKHJldHZhbCA9PSBGQUlMIHx8IFNUUkxFTihidWYpICsgU1RSTEVOKGZuYW1lKSA+PSBsZW4pCisJcmV0dXJuIEZBSUw7CisKKyAgICAvKiBEbyBub3QgYXBwZW5kICIuIiwgIi9kaXIvLiIgaXMgZXF1YWwgdG8gIi9kaXIiLiAqLworICAgIGlmIChTVFJDTVAoZm5hbWUsICIuIikgIT0gMCkKKwlTVFJDQVQoYnVmLCBmbmFtZSk7CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiAiZm5hbWUiIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgKi8KKyAgICBpbnQKK21jaF9pc0Z1bGxOYW1lKGZuYW1lKQorICAgIGNoYXJfdQkqZm5hbWU7Cit7CisjaWZkZWYgX19FTVhfXworICAgIHJldHVybiBfZm5pc2FicyhmbmFtZSk7CisjZWxzZQorIyBpZmRlZiBWTVMKKyAgICByZXR1cm4gKCBmbmFtZVswXSA9PSAnLycJICAgICAgIHx8IGZuYW1lWzBdID09ICcuJwkgICAgfHwKKwkgICAgIHN0cmNocigoY2hhciAqKWZuYW1lLCc6JykgfHwgc3RyY2hyKChjaGFyICopZm5hbWUsJyInKSB8fAorCSAgICAoc3RyY2hyKChjaGFyICopZm5hbWUsJ1snKSAmJiBzdHJjaHIoKGNoYXIgKilmbmFtZSwnXScpKXx8CisJICAgIChzdHJjaHIoKGNoYXIgKilmbmFtZSwnPCcpICYmIHN0cmNocigoY2hhciAqKWZuYW1lLCc+JykpICAgKTsKKyMgZWxzZQorICAgIHJldHVybiAoKmZuYW1lID09ICcvJyB8fCAqZm5hbWUgPT0gJ34nKTsKKyMgZW5kaWYKKyNlbmRpZgorfQorCisvKgorICogR2V0IGZpbGUgcGVybWlzc2lvbnMgZm9yICduYW1lJy4KKyAqIFJldHVybnMgLTEgd2hlbiBpdCBkb2Vzbid0IGV4aXN0LgorICovCisgICAgbG9uZworbWNoX2dldHBlcm0obmFtZSkKKyAgICBjaGFyX3UgKm5hbWU7Cit7CisgICAgc3RydWN0IHN0YXQgc3RhdGI7CisKKyAgICAvKiBLZWVwIHRoZSAjaWZkZWYgb3V0c2lkZSBvZiBzdGF0KCksIGl0IG1heSBiZSBhIG1hY3JvLiAqLworI2lmZGVmIFZNUworICAgIGlmIChzdGF0KChjaGFyICopdm1zX2ZpeGZpbGVuYW1lKG5hbWUpLCAmc3RhdGIpKQorI2Vsc2UKKyAgICBpZiAoc3RhdCgoY2hhciAqKW5hbWUsICZzdGF0YikpCisjZW5kaWYKKwlyZXR1cm4gLTE7CisgICAgcmV0dXJuIHN0YXRiLnN0X21vZGU7Cit9CisKKy8qCisgKiBzZXQgZmlsZSBwZXJtaXNzaW9uIGZvciAnbmFtZScgdG8gJ3Blcm0nCisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50CittY2hfc2V0cGVybShuYW1lLCBwZXJtKQorICAgIGNoYXJfdSAgKm5hbWU7CisgICAgbG9uZyAgICBwZXJtOworeworICAgIHJldHVybiAoY2htb2QoKGNoYXIgKikKKyNpZmRlZiBWTVMKKwkJICAgIHZtc19maXhmaWxlbmFtZShuYW1lKSwKKyNlbHNlCisJCSAgICBuYW1lLAorI2VuZGlmCisJCSAgICAobW9kZV90KXBlcm0pID09IDAgPyBPSyA6IEZBSUwpOworfQorCisjaWYgZGVmaW5lZChIQVZFX0FDTCkgfHwgZGVmaW5lZChQUk9UTykKKyMgaWZkZWYgSEFWRV9TWVNfQUNMX0gKKyMgIGluY2x1ZGUgPHN5cy9hY2wuaD4KKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9TWVNfQUNDRVNTX0gKKyMgIGluY2x1ZGUgPHN5cy9hY2Nlc3MuaD4KKyMgZW5kaWYKKworIyBpZmRlZiBIQVZFX1NPTEFSSVNfQUNMCit0eXBlZGVmIHN0cnVjdCB2aW1fYWNsX3NvbGFyaXNfVCB7CisgICAgaW50IGFjbF9jbnQ7CisgICAgYWNsZW50X3QgKmFjbF9lbnRyeTsKK30gdmltX2FjbF9zb2xhcmlzX1Q7CisjIGVuZGlmCisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBBQ0wgb2YgZmlsZSAiZm5hbWUiIGluIGFsbG9jYXRlZCBtZW1vcnkuCisgKiBSZXR1cm4gTlVMTCBpZiB0aGUgQUNMIGlzIG5vdCBhdmFpbGFibGUgZm9yIHdoYXRldmVyIHJlYXNvbi4KKyAqLworICAgIHZpbV9hY2xfVAorbWNoX2dldF9hY2woZm5hbWUpCisgICAgY2hhcl91CSpmbmFtZTsKK3sKKyAgICB2aW1fYWNsX1QJcmV0ID0gTlVMTDsKKyNpZmRlZiBIQVZFX1BPU0lYX0FDTAorICAgIHJldCA9ICh2aW1fYWNsX1QpYWNsX2dldF9maWxlKChjaGFyICopZm5hbWUsIEFDTF9UWVBFX0FDQ0VTUyk7CisjZWxzZQorI2lmZGVmIEhBVkVfU09MQVJJU19BQ0wKKyAgICB2aW1fYWNsX3NvbGFyaXNfVCAgICphY2xlbnQ7CisKKyAgICBhY2xlbnQgPSBtYWxsb2Moc2l6ZW9mKHZpbV9hY2xfc29sYXJpc19UKSk7CisgICAgaWYgKChhY2xlbnQtPmFjbF9jbnQgPSBhY2woKGNoYXIgKilmbmFtZSwgR0VUQUNMQ05ULCAwLCBOVUxMKSkgPCAwKQorICAgIHsKKwlmcmVlKGFjbGVudCk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGFjbGVudC0+YWNsX2VudHJ5ID0gbWFsbG9jKGFjbGVudC0+YWNsX2NudCAqIHNpemVvZihhY2xlbnRfdCkpOworICAgIGlmIChhY2woKGNoYXIgKilmbmFtZSwgR0VUQUNMLCBhY2xlbnQtPmFjbF9jbnQsIGFjbGVudC0+YWNsX2VudHJ5KSA8IDApCisgICAgeworCWZyZWUoYWNsZW50LT5hY2xfZW50cnkpOworCWZyZWUoYWNsZW50KTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0ID0gKHZpbV9hY2xfVClhY2xlbnQ7CisjZWxzZQorI2lmIGRlZmluZWQoSEFWRV9BSVhfQUNMKQorICAgIGludAkJYWNsc2l6ZTsKKyAgICBzdHJ1Y3QgYWNsICphY2xlbnQ7CisKKyAgICBhY2xzaXplID0gc2l6ZW9mKHN0cnVjdCBhY2wpOworICAgIGFjbGVudCA9IG1hbGxvYyhhY2xzaXplKTsKKyAgICBpZiAoc3RhdGFjbCgoY2hhciAqKWZuYW1lLCBTVFhfTk9STUFMLCBhY2xlbnQsIGFjbHNpemUpIDwgMCkKKyAgICB7CisJaWYgKGVycm5vID09IEVOT1NQQykKKwl7CisJICAgIGFjbHNpemUgPSBhY2xlbnQtPmFjbF9sZW47CisJICAgIGFjbGVudCA9IHJlYWxsb2MoYWNsZW50LCBhY2xzaXplKTsKKwkgICAgaWYgKHN0YXRhY2woKGNoYXIgKilmbmFtZSwgU1RYX05PUk1BTCwgYWNsZW50LCBhY2xzaXplKSA8IDApCisJICAgIHsKKwkJZnJlZShhY2xlbnQpOworCQlyZXR1cm4gTlVMTDsKKwkgICAgfQorCX0KKwllbHNlCisJeworCSAgICBmcmVlKGFjbGVudCk7CisJICAgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisgICAgcmV0ID0gKHZpbV9hY2xfVClhY2xlbnQ7CisjZW5kaWYgLyogSEFWRV9BSVhfQUNMICovCisjZW5kaWYgLyogSEFWRV9TT0xBUklTX0FDTCAqLworI2VuZGlmIC8qIEhBVkVfUE9TSVhfQUNMICovCisgICAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNldCB0aGUgQUNMIG9mIGZpbGUgImZuYW1lIiB0byAiYWNsIiAodW5sZXNzIGl0J3MgTlVMTCkuCisgKi8KKyAgICB2b2lkCittY2hfc2V0X2FjbChmbmFtZSwgYWNsZW50KQorICAgIGNoYXJfdQkqZm5hbWU7CisgICAgdmltX2FjbF9UCWFjbGVudDsKK3sKKyAgICBpZiAoYWNsZW50ID09IE5VTEwpCisJcmV0dXJuOworI2lmZGVmIEhBVkVfUE9TSVhfQUNMCisgICAgYWNsX3NldF9maWxlKChjaGFyICopZm5hbWUsIEFDTF9UWVBFX0FDQ0VTUywgKGFjbF90KWFjbGVudCk7CisjZWxzZQorI2lmZGVmIEhBVkVfU09MQVJJU19BQ0wKKyAgICBhY2woKGNoYXIgKilmbmFtZSwgU0VUQUNMLCAoKHZpbV9hY2xfc29sYXJpc19UICopYWNsZW50KS0+YWNsX2NudCwKKwkgICAgKCh2aW1fYWNsX3NvbGFyaXNfVCAqKWFjbGVudCktPmFjbF9lbnRyeSk7CisjZWxzZQorI2lmZGVmIEhBVkVfQUlYX0FDTAorICAgIGNoYWNsKChjaGFyICopZm5hbWUsIGFjbGVudCwgKChzdHJ1Y3QgYWNsICopYWNsZW50KS0+YWNsX2xlbik7CisjZW5kaWYgLyogSEFWRV9BSVhfQUNMICovCisjZW5kaWYgLyogSEFWRV9TT0xBUklTX0FDTCAqLworI2VuZGlmIC8qIEhBVkVfUE9TSVhfQUNMICovCit9CisKKyAgICB2b2lkCittY2hfZnJlZV9hY2woYWNsZW50KQorICAgIHZpbV9hY2xfVAlhY2xlbnQ7Cit7CisgICAgaWYgKGFjbGVudCA9PSBOVUxMKQorCXJldHVybjsKKyNpZmRlZiBIQVZFX1BPU0lYX0FDTAorICAgIGFjbF9mcmVlKChhY2xfdClhY2xlbnQpOworI2Vsc2UKKyNpZmRlZiBIQVZFX1NPTEFSSVNfQUNMCisgICAgZnJlZSgoKHZpbV9hY2xfc29sYXJpc19UICopYWNsZW50KS0+YWNsX2VudHJ5KTsKKyAgICBmcmVlKGFjbGVudCk7CisjZWxzZQorI2lmZGVmIEhBVkVfQUlYX0FDTAorICAgIGZyZWUoYWNsZW50KTsKKyNlbmRpZiAvKiBIQVZFX0FJWF9BQ0wgKi8KKyNlbmRpZiAvKiBIQVZFX1NPTEFSSVNfQUNMICovCisjZW5kaWYgLyogSEFWRV9QT1NJWF9BQ0wgKi8KK30KKyNlbmRpZgorCisvKgorICogU2V0IGhpZGRlbiBmbGFnIGZvciAibmFtZSIuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgdm9pZAorbWNoX2hpZGUobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgLyogY2FuJ3QgaGlkZSBhIGZpbGUgKi8KK30KKworLyoKKyAqIHJldHVybiBUUlVFIGlmICJuYW1lIiBpcyBhIGRpcmVjdG9yeQorICogcmV0dXJuIEZBTFNFIGlmICJuYW1lIiBpcyBub3QgYSBkaXJlY3RvcnkKKyAqIHJldHVybiBGQUxTRSBmb3IgZXJyb3IKKyAqLworICAgIGludAorbWNoX2lzZGlyKG5hbWUpCisgICAgY2hhcl91ICpuYW1lOworeworICAgIHN0cnVjdCBzdGF0IHN0YXRiOworCisgICAgaWYgKCpuYW1lID09IE5VTCkJICAgIC8qIFNvbWUgc3RhdCgpcyBkb24ndCBmbGFnICIiIGFzIGFuIGVycm9yLiAqLworCXJldHVybiBGQUxTRTsKKyAgICBpZiAoc3RhdCgoY2hhciAqKW5hbWUsICZzdGF0YikpCisJcmV0dXJuIEZBTFNFOworI2lmZGVmIF9QT1NJWF9TT1VSQ0UKKyAgICByZXR1cm4gKFNfSVNESVIoc3RhdGIuc3RfbW9kZSkgPyBUUlVFIDogRkFMU0UpOworI2Vsc2UKKyAgICByZXR1cm4gKChzdGF0Yi5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGRElSID8gVFJVRSA6IEZBTFNFKTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisKK3N0YXRpYyBpbnQgZXhlY3V0YWJsZV9maWxlIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CisKKy8qCisgKiBSZXR1cm4gMSBpZiAibmFtZSIgaXMgYW4gZXhlY3V0YWJsZSBmaWxlLCAwIGlmIG5vdCBvciBpdCBkb2Vzbid0IGV4aXN0LgorICovCisgICAgc3RhdGljIGludAorZXhlY3V0YWJsZV9maWxlKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIHN0cnVjdCBzdGF0CXN0OworCisgICAgaWYgKHN0YXQoKGNoYXIgKiluYW1lLCAmc3QpKQorCXJldHVybiAwOworICAgIHJldHVybiBTX0lTUkVHKHN0LnN0X21vZGUpICYmIG1jaF9hY2Nlc3MoKGNoYXIgKiluYW1lLCBYX09LKSA9PSAwOworfQorCisvKgorICogUmV0dXJuIDEgaWYgIm5hbWUiIGNhbiBiZSBmb3VuZCBpbiAkUEFUSCBhbmQgZXhlY3V0ZWQsIDAgaWYgbm90LgorICogUmV0dXJuIC0xIGlmIHVua25vd24uCisgKi8KKyAgICBpbnQKK21jaF9jYW5fZXhlKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIGNoYXJfdQkqYnVmOworICAgIGNoYXJfdQkqcCwgKmU7CisgICAgaW50CQlyZXR2YWw7CisKKyAgICAvKiBJZiBpdCdzIGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggZG9uJ3QgbmVlZCB0byB1c2UgJFBBVEguICovCisgICAgaWYgKG1jaF9pc0Z1bGxOYW1lKG5hbWUpIHx8IChuYW1lWzBdID09ICcuJyAmJiAobmFtZVsxXSA9PSAnLycKKwkJCQkgICAgICB8fCAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnLycpKSkpCisJcmV0dXJuIGV4ZWN1dGFibGVfZmlsZShuYW1lKTsKKworICAgIHAgPSAoY2hhcl91ICopZ2V0ZW52KCJQQVRIIik7CisgICAgaWYgKHAgPT0gTlVMTCB8fCAqcCA9PSBOVUwpCisJcmV0dXJuIC0xOworICAgIGJ1ZiA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKG5hbWUpICsgU1RSTEVOKHApICsgMikpOworICAgIGlmIChidWYgPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisKKyAgICAvKgorICAgICAqIFdhbGsgdGhyb3VnaCBhbGwgZW50cmllcyBpbiAkUEFUSCB0byBjaGVjayBpZiAibmFtZSIgZXhpc3RzIHRoZXJlIGFuZAorICAgICAqIGlzIGFuIGV4ZWN1dGFibGUgZmlsZS4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwllID0gKGNoYXJfdSAqKXN0cmNocigoY2hhciAqKXAsICc6Jyk7CisJaWYgKGUgPT0gTlVMTCkKKwkgICAgZSA9IHAgKyBTVFJMRU4ocCk7CisJaWYgKGUgLSBwIDw9IDEpCQkvKiBlbXB0eSBlbnRyeSBtZWFucyBjdXJyZW50IGRpciAqLworCSAgICBTVFJDUFkoYnVmLCAiLi8iKTsKKwllbHNlCisJeworCSAgICBTVFJOQ1BZKGJ1ZiwgcCwgZSAtIHApOworCSAgICBidWZbZSAtIHBdID0gTlVMOworCSAgICBhZGRfcGF0aHNlcChidWYpOworCX0KKwlTVFJDQVQoYnVmLCBuYW1lKTsKKwlyZXR2YWwgPSBleGVjdXRhYmxlX2ZpbGUoYnVmKTsKKwlpZiAocmV0dmFsID09IDEpCisJICAgIGJyZWFrOworCisJaWYgKCplICE9ICc6JykKKwkgICAgYnJlYWs7CisJcCA9IGUgKyAxOworICAgIH0KKworICAgIHZpbV9mcmVlKGJ1Zik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKyNlbmRpZgorCisvKgorICogQ2hlY2sgd2hhdCAibmFtZSIgaXM6CisgKiBOT0RFX05PUk1BTDogZmlsZSBvciBkaXJlY3RvcnkgKG9yIGRvZXNuJ3QgZXhpc3QpCisgKiBOT0RFX1dSSVRBQkxFOiB3cml0YWJsZSBkZXZpY2UsIHNvY2tldCwgZmlmbywgZXRjLgorICogTk9ERV9PVEhFUjogbm9uLXdyaXRhYmxlIHRoaW5ncworICovCisgICAgaW50CittY2hfbm9kZXR5cGUobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgc3RydWN0IHN0YXQJc3Q7CisKKyAgICBpZiAoc3RhdCgoY2hhciAqKW5hbWUsICZzdCkpCisJcmV0dXJuIE5PREVfTk9STUFMOworICAgIGlmIChTX0lTUkVHKHN0LnN0X21vZGUpIHx8IFNfSVNESVIoc3Quc3RfbW9kZSkpCisJcmV0dXJuIE5PREVfTk9STUFMOworI2lmbmRlZiBPUzIKKyAgICBpZiAoU19JU0JMSyhzdC5zdF9tb2RlKSkJLyogYmxvY2sgZGV2aWNlIGlzbid0IHdyaXRhYmxlICovCisJcmV0dXJuIE5PREVfT1RIRVI7CisjZW5kaWYKKyAgICAvKiBFdmVyeXRoaW5nIGVsc2UgaXMgd3JpdGFibGU/ICovCisgICAgcmV0dXJuIE5PREVfV1JJVEFCTEU7Cit9CisKKyAgICB2b2lkCittY2hfZWFybHlfaW5pdCgpCit7CisjaWZkZWYgSEFWRV9DSEVDS19TVEFDS19HUk9XVEgKKyAgICBpbnQJCQlpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0NIRUNLX1NUQUNLX0dST1dUSAorICAgIGNoZWNrX3N0YWNrX2dyb3d0aCgoY2hhciAqKSZpKTsKKworIyBpZmRlZiBIQVZFX0dFVFJMSU1JVAorICAgIGdldF9zdGFja19saW1pdCgpOworIyBlbmRpZgorCisjZW5kaWYKKworICAgIC8qCisgICAgICogU2V0dXAgYW4gYWx0ZXJuYXRpdmUgc3RhY2sgZm9yIHNpZ25hbHMuICBIZWxwcyB0byBjYXRjaCBzaWduYWxzIHdoZW4KKyAgICAgKiBydW5uaW5nIG91dCBvZiBzdGFjayBzcGFjZS4KKyAgICAgKiBVc2Ugb2Ygc2lnYWx0c3RhY2soKSBpcyBwcmVmZXJyZWQsIGl0J3MgbW9yZSBwb3J0YWJsZS4KKyAgICAgKiBJZ25vcmUgYW55IGVycm9ycy4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKEhBVkVfU0lHQUxUU1RBQ0spIHx8IGRlZmluZWQoSEFWRV9TSUdTVEFDSykKKyAgICBzaWduYWxfc3RhY2sgPSBtYWxsb2MoU0lHU1RLU1opOworICAgIGluaXRfc2lnbmFsX3N0YWNrKCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZXhpdF9zY3JvbGwgX19BUkdTKCh2b2lkKSk7CisKKy8qCisgKiBPdXRwdXQgYSBuZXdsaW5lIHdoZW4gZXhpdGluZy4KKyAqIE1ha2Ugc3VyZSB0aGUgbmV3bGluZSBnb2VzIHRvIHRoZSBzYW1lIHN0cmVhbSBhcyB0aGUgdGV4dC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitleGl0X3Njcm9sbCgpCit7CisgICAgaWYgKG5ld2xpbmVfb25fZXhpdCB8fCBtc2dfZGlkb3V0KQorICAgIHsKKwlpZiAobXNnX3VzZV9wcmludGYoKSkKKwl7CisJICAgIGlmIChpbmZvX21lc3NhZ2UpCisJCW1jaF9tc2coIlxuIik7CisJICAgIGVsc2UKKwkJbWNoX2Vycm1zZygiXHJcbiIpOworCX0KKwllbHNlCisJICAgIG91dF9jaGFyKCdcbicpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXJlc3RvcmVfY3Rlcm1fY29sb3JzKCk7CQkvKiBnZXQgb3JpZ2luYWwgY29sb3JzIGJhY2sgKi8KKwltc2dfY2xyX2Vvc19mb3JjZSgpOwkJLyogY2xlYXIgdGhlIHJlc3Qgb2YgdGhlIGRpc3BsYXkgKi8KKwl3aW5kZ290bygoaW50KVJvd3MgLSAxLCAwKTsJLyogbWF5IGhhdmUgbW92ZWQgdGhlIGN1cnNvciAqLworICAgIH0KK30KKworICAgIHZvaWQKK21jaF9leGl0KHIpCisgICAgaW50IHI7Cit7CisgICAgZXhpdGluZyA9IFRSVUU7CisKKyNpZiBkZWZpbmVkKEZFQVRfWDExKSAmJiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKQorICAgIHgxMV9leHBvcnRfZmluYWxfc2VsZWN0aW9uKCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJCisgICAgaWYgKCFndWkuaW5fdXNlKQorI2VuZGlmCisgICAgeworCXNldHRtb2RlKFRNT0RFX0NPT0spOworI2lmZGVmIEZFQVRfVElUTEUKKwltY2hfcmVzdG9yZV90aXRsZSgzKTsJLyogcmVzdG9yZSB4dGVybSB0aXRsZSBhbmQgaWNvbiBuYW1lICovCisjZW5kaWYKKwkvKgorCSAqIFdoZW4gdF90aSBpcyBub3QgZW1wdHkgYnV0IGl0IGRvZXNuJ3QgY2F1c2Ugc3dhcHBpbmcgdGVybWluYWwKKwkgKiBwYWdlcywgbmVlZCB0byBvdXRwdXQgYSBuZXdsaW5lIHdoZW4gbXNnX2RpZG91dCBpcyBzZXQuICBCdXQgd2hlbgorCSAqIHRfdGkgZG9lcyBzd2FwIHBhZ2VzIGl0IHNob3VsZCBub3QgZ28gdG8gdGhlIHNoZWxsIHBhZ2UuICBEbyB0aGlzCisJICogYmVmb3JlIHN0b3B0ZXJtY2FwKCkuCisJICovCisJaWYgKHN3YXBwaW5nX3NjcmVlbigpICYmICFuZXdsaW5lX29uX2V4aXQpCisJICAgIGV4aXRfc2Nyb2xsKCk7CisKKwkvKiBTdG9wIHRlcm1jYXA6IE1heSBuZWVkIHRvIGNoZWNrIGZvciBUX0NSViByZXNwb25zZSwgd2hpY2gKKwkgKiByZXF1aXJlcyBSQVcgbW9kZS4gKi8KKwlzdG9wdGVybWNhcCgpOworCisJLyoKKwkgKiBBIG5ld2xpbmUgaXMgb25seSByZXF1aXJlZCBhZnRlciBhIG1lc3NhZ2UgaW4gdGhlIGFsdGVybmF0ZSBzY3JlZW4uCisJICogVGhpcyBpcyBzZXQgdG8gVFJVRSBieSB3YWl0X3JldHVybigpLgorCSAqLworCWlmICghc3dhcHBpbmdfc2NyZWVuKCkgfHwgbmV3bGluZV9vbl9leGl0KQorCSAgICBleGl0X3Njcm9sbCgpOworCisJLyogQ3Vyc29yIG1heSBoYXZlIGJlZW4gc3dpdGNoZWQgb2ZmIHdpdGhvdXQgY2FsbGluZyBzdGFydHRlcm1jYXAoKQorCSAqIHdoZW4gZG9pbmcgInZpbSAtdSB2aW1yYyIgYW5kIHZpbXJjIGNvbnRhaW5zICI6cSIuICovCisJaWYgKGZ1bGxfc2NyZWVuKQorCSAgICBjdXJzb3Jfb24oKTsKKyAgICB9CisgICAgb3V0X2ZsdXNoKCk7CisgICAgbWxfY2xvc2VfYWxsKFRSVUUpOwkJLyogcmVtb3ZlIGFsbCBtZW1maWxlcyAqLworICAgIG1heV9jb3JlX2R1bXAoKTsKKyNpZmRlZiBGRUFUX0dVSQorIyBpZm5kZWYgRkVBVF9HVUlfQkVPUwkJLyogQmVPUyBhbHdheXMgaGFzIEdVSSAqLworICAgIGlmIChndWkuaW5fdXNlKQorIyBlbmRpZgorCWd1aV9leGl0KHIpOworI2VuZGlmCisjaWZkZWYgX19RTlhfXworICAgIC8qIEEgY29yZSBkdW1wIHdvbid0IGJlIGNyZWF0ZWQgaWYgdGhlIHNpZ25hbCBoYW5kbGVyCisgICAgICogZG9lc24ndCByZXR1cm4sIHNvIHdlIGNhbid0IGNhbGwgZXhpdCgpICovCisgICAgaWYgKGRlYWRseV9zaWduYWwgIT0gMCkKKwlyZXR1cm47CisjZW5kaWYKKworICAgIGV4aXQocik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorbWF5X2NvcmVfZHVtcCgpCit7CisgICAgaWYgKGRlYWRseV9zaWduYWwgIT0gMCkKKyAgICB7CisJc2lnbmFsKGRlYWRseV9zaWduYWwsIFNJR19ERkwpOworCWtpbGwoZ2V0cGlkKCksIGRlYWRseV9zaWduYWwpOwkvKiBEaWUgdXNpbmcgdGhlIHNpZ25hbCB3ZSBjYXVnaHQgKi8KKyAgICB9Cit9CisKKyNpZm5kZWYgVk1TCisKKyAgICB2b2lkCittY2hfc2V0dG1vZGUodG1vZGUpCisgICAgaW50CQl0bW9kZTsKK3sKKyAgICBzdGF0aWMgaW50IGZpcnN0ID0gVFJVRTsKKworICAgIC8qIFdoeSBpcyBOZVhUIGV4Y2x1ZGVkIGhlcmUgKGFuZCBub3QgaW4gb3NfdW5peHguaCk/ICovCisjaWYgZGVmaW5lZChFQ0hPRSkgJiYgZGVmaW5lZChJQ0FOT04pICYmIChkZWZpbmVkKEhBVkVfVEVSTUlPX0gpIHx8IGRlZmluZWQoSEFWRV9URVJNSU9TX0gpKSAmJiAhZGVmaW5lZChfX05lWFRfXykKKyAgICAvKgorICAgICAqIGZvciAibmV3IiB0dHkgc3lzdGVtcworICAgICAqLworIyBpZmRlZiBIQVZFX1RFUk1JT1NfSAorICAgIHN0YXRpYyBzdHJ1Y3QgdGVybWlvcyB0b2xkOworCSAgIHN0cnVjdCB0ZXJtaW9zIHRuZXc7CisjIGVsc2UKKyAgICBzdGF0aWMgc3RydWN0IHRlcm1pbyB0b2xkOworCSAgIHN0cnVjdCB0ZXJtaW8gdG5ldzsKKyMgZW5kaWYKKworICAgIGlmIChmaXJzdCkKKyAgICB7CisJZmlyc3QgPSBGQUxTRTsKKyMgaWYgZGVmaW5lZChIQVZFX1RFUk1JT1NfSCkKKwl0Y2dldGF0dHIocmVhZF9jbWRfZmQsICZ0b2xkKTsKKyMgZWxzZQorCWlvY3RsKHJlYWRfY21kX2ZkLCBUQ0dFVEEsICZ0b2xkKTsKKyMgZW5kaWYKKyAgICB9CisKKyAgICB0bmV3ID0gdG9sZDsKKyAgICBpZiAodG1vZGUgPT0gVE1PREVfUkFXKQorICAgIHsKKwkvKgorCSAqIH5JQ1JOTCBlbmFibGVzIHR5cGluZyBeVl5NCisJICovCisJdG5ldy5jX2lmbGFnICY9IH5JQ1JOTDsKKwl0bmV3LmNfbGZsYWcgJj0gfihJQ0FOT04gfCBFQ0hPIHwgSVNJRyB8IEVDSE9FCisjIGlmIGRlZmluZWQoSUVYVEVOKSAmJiAhZGVmaW5lZChfX01JTlRfXykKKwkJICAgIHwgSUVYVEVOCSAgICAvKiBJRVhURU4gZW5hYmxlcyB0eXBpbmcgXlYgb24gU09MQVJJUyAqLworCQkJCSAgICAvKiBidXQgaXQgYnJlYWtzIGZ1bmN0aW9uIGtleXMgb24gTUlOVCAqLworIyBlbmRpZgorCQkJCSk7CisjIGlmZGVmIE9OTENSCSAgICAvKiBkb24ndCBtYXAgTkwgLT4gQ1IgTkwsIHdlIGRvIGl0IG91cnNlbHZlcyAqLworCXRuZXcuY19vZmxhZyAmPSB+T05MQ1I7CisjIGVuZGlmCisJdG5ldy5jX2NjW1ZNSU5dID0gMTsJCS8qIHJldHVybiBhZnRlciAxIGNoYXIgKi8KKwl0bmV3LmNfY2NbVlRJTUVdID0gMDsJCS8qIGRvbid0IHdhaXQgKi8KKyAgICB9CisgICAgZWxzZSBpZiAodG1vZGUgPT0gVE1PREVfU0xFRVApCisJdG5ldy5jX2xmbGFnICY9IH4oRUNITyk7CisKKyMgaWYgZGVmaW5lZChIQVZFX1RFUk1JT1NfSCkKKyAgICB7CisJaW50CW4gPSAxMDsKKworCS8qIEEgc2lnbmFsIG1heSBjYXVzZSB0Y3NldGF0dHIoKSB0byBmYWlsIChlLmcuLCBTSUdDT05UKS4gIFJldHJ5IGEKKwkgKiBmZXcgdGltZXMuICovCisJd2hpbGUgKHRjc2V0YXR0cihyZWFkX2NtZF9mZCwgVENTQU5PVywgJnRuZXcpID09IC0xCisJCQkJCQkgICAmJiBlcnJubyA9PSBFSU5UUiAmJiBuID4gMCkKKwkgICAgLS1uOworICAgIH0KKyMgZWxzZQorICAgIGlvY3RsKHJlYWRfY21kX2ZkLCBUQ1NFVEEsICZ0bmV3KTsKKyMgZW5kaWYKKworI2Vsc2UKKworICAgIC8qCisgICAgICogZm9yICJvbGQiIHR0eSBzeXN0ZW1zCisgICAgICovCisjIGlmbmRlZiBUSU9DU0VUTgorIyAgZGVmaW5lIFRJT0NTRVROIFRJT0NTRVRQCS8qIGZvciBocHV4IDkuMCAqLworIyBlbmRpZgorICAgIHN0YXRpYyBzdHJ1Y3Qgc2d0dHliIHR0eWJvbGQ7CisJICAgc3RydWN0IHNndHR5YiB0dHlibmV3OworCisgICAgaWYgKGZpcnN0KQorICAgIHsKKwlmaXJzdCA9IEZBTFNFOworCWlvY3RsKHJlYWRfY21kX2ZkLCBUSU9DR0VUUCwgJnR0eWJvbGQpOworICAgIH0KKworICAgIHR0eWJuZXcgPSB0dHlib2xkOworICAgIGlmICh0bW9kZSA9PSBUTU9ERV9SQVcpCisgICAgeworCXR0eWJuZXcuc2dfZmxhZ3MgJj0gfihDUk1PRCB8IEVDSE8pOworCXR0eWJuZXcuc2dfZmxhZ3MgfD0gUkFXOworICAgIH0KKyAgICBlbHNlIGlmICh0bW9kZSA9PSBUTU9ERV9TTEVFUCkKKwl0dHlibmV3LnNnX2ZsYWdzICY9IH4oRUNITyk7CisgICAgaW9jdGwocmVhZF9jbWRfZmQsIFRJT0NTRVROLCAmdHR5Ym5ldyk7CisjZW5kaWYKKyAgICBjdXJyX3Rtb2RlID0gdG1vZGU7Cit9CisKKy8qCisgKiBUcnkgdG8gZ2V0IHRoZSBjb2RlIGZvciAidF9rYiIgZnJvbSB0aGUgc3R0eSBzZXR0aW5nCisgKgorICogRXZlbiBpZiB0ZXJtY2FwIGNsYWltcyBhIGJhY2tzcGFjZSBrZXksIHRoZSB1c2VyJ3Mgc2V0dGluZyAqc2hvdWxkKgorICogcHJldmFpbC4gIHN0dHkga25vd3MgbW9yZSBhYm91dCByZWFsaXR5IHRoYW4gdGVybWNhcCBkb2VzLCBhbmQgaWYKKyAqIHNvbWVib2R5J3MgdXN1YWwgZXJhc2Uga2V5IGlzIERFTCAod2hpY2gsIGZvciBtb3N0IEJTRCB1c2VycywgaXQgd2lsbAorICogYmUpLCB0aGV5J3JlIGdvaW5nIHRvIGdldCByZWFsbHkgYW5ub3llZCBpZiB0aGVpciBlcmFzZSBrZXkgc3RhcnRzCisgKiBkb2luZyBmb3J3YXJkIGRlbGV0ZXMgZm9yIG5vIHJlYXNvbi4gKEVyaWMgRmlzY2hlcikKKyAqLworICAgIHZvaWQKK2dldF9zdHR5KCkKK3sKKyAgICBjaGFyX3UgIGJ1ZlsyXTsKKyAgICBjaGFyX3UgICpwOworCisgICAgLyogV2h5IGlzIE5lWFQgZXhjbHVkZWQgaGVyZSAoYW5kIG5vdCBpbiBvc191bml4eC5oKT8gKi8KKyNpZiBkZWZpbmVkKEVDSE9FKSAmJiBkZWZpbmVkKElDQU5PTikgJiYgKGRlZmluZWQoSEFWRV9URVJNSU9fSCkgfHwgZGVmaW5lZChIQVZFX1RFUk1JT1NfSCkpICYmICFkZWZpbmVkKF9fTmVYVF9fKQorICAgIC8qIGZvciAibmV3IiB0dHkgc3lzdGVtcyAqLworIyBpZmRlZiBIQVZFX1RFUk1JT1NfSAorICAgIHN0cnVjdCB0ZXJtaW9zIGtleXM7CisjIGVsc2UKKyAgICBzdHJ1Y3QgdGVybWlvIGtleXM7CisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZChIQVZFX1RFUk1JT1NfSCkKKyAgICBpZiAodGNnZXRhdHRyKHJlYWRfY21kX2ZkLCAma2V5cykgIT0gLTEpCisjIGVsc2UKKyAgICBpZiAoaW9jdGwocmVhZF9jbWRfZmQsIFRDR0VUQSwgJmtleXMpICE9IC0xKQorIyBlbmRpZgorICAgIHsKKwlidWZbMF0gPSBrZXlzLmNfY2NbVkVSQVNFXTsKKwlpbnRyX2NoYXIgPSBrZXlzLmNfY2NbVklOVFJdOworI2Vsc2UKKyAgICAvKiBmb3IgIm9sZCIgdHR5IHN5c3RlbXMgKi8KKyAgICBzdHJ1Y3Qgc2d0dHliIGtleXM7CisKKyAgICBpZiAoaW9jdGwocmVhZF9jbWRfZmQsIFRJT0NHRVRQLCAma2V5cykgIT0gLTEpCisgICAgeworCWJ1ZlswXSA9IGtleXMuc2dfZXJhc2U7CisJaW50cl9jaGFyID0ga2V5cy5zZ19raWxsOworI2VuZGlmCisJYnVmWzFdID0gTlVMOworCWFkZF90ZXJtY29kZSgoY2hhcl91ICopImtiIiwgYnVmLCBGQUxTRSk7CisKKwkvKgorCSAqIElmIDxCUz4gYW5kIDxERUw+IGFyZSBub3cgdGhlIHNhbWUsIHJlZGVmaW5lIDxERUw+LgorCSAqLworCXAgPSBmaW5kX3Rlcm1jb2RlKChjaGFyX3UgKikia0QiKTsKKwlpZiAocCAhPSBOVUxMICYmIHBbMF0gPT0gYnVmWzBdICYmIHBbMV0gPT0gYnVmWzFdKQorCSAgICBkb19maXhkZWwoTlVMTCk7CisgICAgfQorI2lmIDAKKyAgICB9CSAgICAvKiB0byBrZWVwIGNpbmRlbnQgaGFwcHkgKi8KKyNlbmRpZgorfQorCisjZW5kaWYgLyogVk1TICAqLworCisjaWYgZGVmaW5lZChGRUFUX01PVVNFX1RUWSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBTZXQgbW91c2UgY2xpY2tzIG9uIG9yIG9mZi4KKyAqLworICAgIHZvaWQKK21jaF9zZXRtb3VzZShvbikKKyAgICBpbnQJCW9uOworeworICAgIHN0YXRpYyBpbnQJaXNvbiA9IEZBTFNFOworICAgIGludAkJeHRlcm1fbW91c2VfdmVyczsKKworICAgIGlmIChvbiA9PSBpc29uKQkvKiByZXR1cm4gcXVpY2tseSBpZiBub3RoaW5nIHRvIGRvICovCisJcmV0dXJuOworCisgICAgeHRlcm1fbW91c2VfdmVycyA9IHVzZV94dGVybV9tb3VzZSgpOworICAgIGlmICh4dGVybV9tb3VzZV92ZXJzID4gMCkKKyAgICB7CisJaWYgKG9uKQkvKiBlbmFibGUgbW91c2UgZXZlbnRzLCB1c2UgbW91c2UgdHJhY2tpbmcgaWYgYXZhaWxhYmxlICovCisJICAgIG91dF9zdHJfbmYoKGNoYXJfdSAqKQorCQkgICAgICAgKHh0ZXJtX21vdXNlX3ZlcnMgPiAxCisJCQk/IElGX0VCKCJcMDMzWz8xMDAyaCIsIEVTQ19TVFIgIls/MTAwMmgiKQorCQkJOiBJRl9FQigiXDAzM1s/MTAwMGgiLCBFU0NfU1RSICJbPzEwMDBoIikpKTsKKwllbHNlCS8qIGRpc2FibGUgbW91c2UgZXZlbnRzLCBjb3VsZCBwcm9iYWJseSBhbHdheXMgc2VuZCB0aGUgc2FtZSAqLworCSAgICBvdXRfc3RyX25mKChjaGFyX3UgKikKKwkJICAgICAgICh4dGVybV9tb3VzZV92ZXJzID4gMQorCQkJPyBJRl9FQigiXDAzM1s/MTAwMmwiLCBFU0NfU1RSICJbPzEwMDJsIikKKwkJCTogSUZfRUIoIlwwMzNbPzEwMDBsIiwgRVNDX1NUUiAiWz8xMDAwbCIpKSk7CisJaXNvbiA9IG9uOworICAgIH0KKworIyBpZmRlZiBGRUFUX01PVVNFX0RFQworICAgIGVsc2UgaWYgKHR0eW1fZmxhZ3MgPT0gVFRZTV9ERUMpCisgICAgeworCWlmIChvbikJLyogZW5hYmxlIG1vdXNlIGV2ZW50cyAqLworCSAgICBvdXRfc3RyX25mKChjaGFyX3UgKikiXDAzM1sxOzInelwwMzNbMTszJ3siKTsKKwllbHNlCS8qIGRpc2FibGUgbW91c2UgZXZlbnRzICovCisJICAgIG91dF9zdHJfbmYoKGNoYXJfdSAqKSJcMDMzWyd6Iik7CisJaXNvbiA9IG9uOworICAgIH0KKyMgZW5kaWYKKworIyBpZmRlZiBGRUFUX01PVVNFX0dQTQorICAgIGVsc2UKKyAgICB7CisJaWYgKG9uKQorCXsKKwkgICAgaWYgKGdwbV9vcGVuKCkpCisJCWlzb24gPSBUUlVFOworCX0KKwllbHNlCisJeworCSAgICBncG1fY2xvc2UoKTsKKwkgICAgaXNvbiA9IEZBTFNFOworCX0KKyAgICB9CisjIGVuZGlmCisKKyMgaWZkZWYgRkVBVF9NT1VTRV9KU0IKKyAgICBlbHNlCisgICAgeworCWlmIChvbikKKwl7CisJICAgIC8qIEQgLSBFbmFibGUgTW91c2UgdXAvZG93biBtZXNzYWdlcworCSAgICAgKiBMIC0gRW5hYmxlIExlZnQgQnV0dG9uIFJlcG9ydGluZworCSAgICAgKiBNIC0gRW5hYmxlIE1pZGRsZSBCdXR0b24gUmVwb3J0aW5nCisJICAgICAqIFIgLSBFbmFibGUgUmlnaHQgQnV0dG9uIFJlcG9ydGluZworCSAgICAgKiBLIC0gRW5hYmxlIFNISUZUIGFuZCBDVFJMIGtleSBSZXBvcnRpbmcKKwkgICAgICogKyAtIEVuYWJsZSBBZHZhbmNlZCBtZXNzYWdpbmcgb2YgbW91c2UgbW92ZXMgYW5kIHVwL2Rvd24gbWVzc2FnZXMKKwkgICAgICogUSAtIFF1aWV0IE5vIEFjaworCSAgICAgKiAjIC0gTnVtZXJpYyB2YWx1ZSBvZiBtb3VzZSBwb2ludGVyIHJlcXVpcmVkCisJICAgICAqCSAgMCA9IE11bHRpdmlldyAyMDAwIGN1cnNvciwgdXNlZCBhcyBzdGFuZGFyZAorCSAgICAgKgkgIDEgPSBXaW5kb3dzIEFycm93CisJICAgICAqCSAgMiA9IFdpbmRvd3MgSSBCZWFtCisJICAgICAqCSAgMyA9IFdpbmRvd3MgSG91ciBHbGFzcworCSAgICAgKgkgIDQgPSBXaW5kb3dzIENyb3NzIEhhaXIKKwkgICAgICoJICA1ID0gV2luZG93cyBVUCBBcnJvdworCSAgICAgKi8KKyNpZmRlZiBKU0JURVJNX01PVVNFX05PTkFEVkFOQ0VEIC8qIERpc2FibGVzIGZ1bGwgZmVlZGJhY2sgb2YgcG9pbnRlciBtb3ZlbWVudHMgKi8KKwkgICAgb3V0X3N0cl9uZigoY2hhcl91ICopSUZfRUIoIlwwMzNbMH5ad0xNUksxUVwwMzNcXCIsCisJCQkJCSBFU0NfU1RSICJbMH5ad0xNUksxUSIgRVNDX1NUUiAiXFwiKSk7CisjZWxzZQorCSAgICBvdXRfc3RyX25mKChjaGFyX3UgKilJRl9FQigiXDAzM1swflp3TE1SSysxUVwwMzNcXCIsCisJCQkJCUVTQ19TVFIgIlswflp3TE1SSysxUSIgRVNDX1NUUiAiXFwiKSk7CisjZW5kaWYKKwkgICAgaXNvbiA9IFRSVUU7CisJfQorCWVsc2UKKwl7CisJICAgIG91dF9zdHJfbmYoKGNoYXJfdSAqKUlGX0VCKCJcMDMzWzB+WndRXDAzM1xcIiwKKwkJCQkJICAgICAgRVNDX1NUUiAiWzB+WndRIiBFU0NfU1RSICJcXCIpKTsKKwkgICAgaXNvbiA9IEZBTFNFOworCX0KKyAgICB9CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTU9VU0VfUFRFUk0KKyAgICBlbHNlCisgICAgeworCS8qIDEgPSBidXR0b24gcHJlc3MsIDYgPSByZWxlYXNlLCA3ID0gZHJhZywgMWguLi45bCA9IHJpZ2h0IGJ1dHRvbiAqLworCWlmIChvbikKKwkgICAgb3V0X3N0cl9uZigiXDAzM1s+MWhcMDMzWz42aFwwMzNbPjdoXDAzM1s+MWhcMDMzWz45bCIpOworCWVsc2UKKwkgICAgb3V0X3N0cl9uZigiXDAzM1s+MWxcMDMzWz42bFwwMzNbPjdsXDAzM1s+MWxcMDMzWz45aCIpOworCWlzb24gPSBvbjsKKyAgICB9CisjIGVuZGlmCit9CisKKy8qCisgKiBTZXQgdGhlIG1vdXNlIHRlcm1jb2RlLCBkZXBlbmRpbmcgb24gdGhlICd0ZXJtJyBhbmQgJ3R0eW1vdXNlJyBvcHRpb25zLgorICovCisgICAgdm9pZAorY2hlY2tfbW91c2VfdGVybWNvZGUoKQoreworIyBpZmRlZiBGRUFUX01PVVNFX1hURVJNCisgICAgaWYgKHVzZV94dGVybV9tb3VzZSgpCisjICBpZmRlZiBGRUFUX0dVSQorCSAgICAmJiAhZ3VpLmluX3VzZQorIyAgZW5kaWYKKwkgICAgKQorICAgIHsKKwlzZXRfbW91c2VfdGVybWNvZGUoS1NfTU9VU0UsIChjaGFyX3UgKikodGVybV9pc184Yml0KFRfTkFNRSkKKwkJICA/IElGX0VCKCJcMjMzTSIsIENTSV9TVFIgIk0iKSA6IElGX0VCKCJcMDMzW00iLCBFU0NfU1RSICJbTSIpKSk7CisJaWYgKCpwX21vdXNlICE9IE5VTCkKKwl7CisJICAgIC8qIGZvcmNlIG1vdXNlIG9mZiBhbmQgbWF5YmUgb24gdG8gc2VuZCBwb3NzaWJseSBuZXcgbW91c2UKKwkgICAgICogYWN0aXZhdGlvbiBzZXF1ZW5jZSB0byB0aGUgeHRlcm0sIHdpdGgob3V0KSBkcmFnIHRyYWNpbmcuICovCisJICAgIG1jaF9zZXRtb3VzZShGQUxTRSk7CisJICAgIHNldG1vdXNlKCk7CisJfQorICAgIH0KKyAgICBlbHNlCisJZGVsX21vdXNlX3Rlcm1jb2RlKEtTX01PVVNFKTsKKyMgZW5kaWYKKworIyBpZmRlZiBGRUFUX01PVVNFX0dQTQorICAgIGlmICghdXNlX3h0ZXJtX21vdXNlKCkKKyMgIGlmZGVmIEZFQVRfR1VJCisJICAgICYmICFndWkuaW5fdXNlCisjICBlbmRpZgorCSAgICApCisJc2V0X21vdXNlX3Rlcm1jb2RlKEtTX01PVVNFLCAoY2hhcl91ICopSUZfRUIoIlwwMzNNRyIsIEVTQ19TVFIgIk1HIikpOworIyBlbmRpZgorCisjIGlmZGVmIEZFQVRfTU9VU0VfSlNCCisgICAgLyogY29uZmxpY3RzIHdpdGggeHRlcm0gbW91c2U6ICJcMDMzWyIgYW5kICJcMDMzW00iID8/PyAqLworICAgIGlmICghdXNlX3h0ZXJtX21vdXNlKCkKKyMgIGlmZGVmIEZFQVRfR1VJCisJICAgICYmICFndWkuaW5fdXNlCisjICBlbmRpZgorCSAgICApCisJc2V0X21vdXNlX3Rlcm1jb2RlKEtTX0pTQlRFUk1fTU9VU0UsCisJCQkgICAgICAgKGNoYXJfdSAqKUlGX0VCKCJcMDMzWzB+enciLCBFU0NfU1RSICJbMH56dyIpKTsKKyAgICBlbHNlCisJZGVsX21vdXNlX3Rlcm1jb2RlKEtTX0pTQlRFUk1fTU9VU0UpOworIyBlbmRpZgorCisjIGlmZGVmIEZFQVRfTU9VU0VfTkVUCisgICAgLyogVGhlcmUgaXMgbm8gY29uZmxpY3QsIGJ1dCBvbmUgbWF5IHR5cGUgRVNDIH0gZnJvbSBJbnNlcnQgbW9kZS4gIERvbid0CisgICAgICogZGVmaW5lIGl0IGluIHRoZSBHVUkgb3Igd2hlbiB1c2luZyBhbiB4dGVybS4gKi8KKyAgICBpZiAoIXVzZV94dGVybV9tb3VzZSgpCisjICBpZmRlZiBGRUFUX0dVSQorCSAgICAmJiAhZ3VpLmluX3VzZQorIyAgZW5kaWYKKwkgICAgKQorCXNldF9tb3VzZV90ZXJtY29kZShLU19ORVRURVJNX01PVVNFLAorCQkJCSAgICAgICAoY2hhcl91ICopSUZfRUIoIlwwMzN9IiwgRVNDX1NUUiAifSIpKTsKKyAgICBlbHNlCisJZGVsX21vdXNlX3Rlcm1jb2RlKEtTX05FVFRFUk1fTU9VU0UpOworIyBlbmRpZgorCisjIGlmZGVmIEZFQVRfTU9VU0VfREVDCisgICAgLyogY29uZmxpY3RzIHdpdGggeHRlcm0gbW91c2U6ICJcMDMzWyIgYW5kICJcMDMzW00iICovCisgICAgaWYgKCF1c2VfeHRlcm1fbW91c2UoKQorIyAgaWZkZWYgRkVBVF9HVUkKKwkgICAgJiYgIWd1aS5pbl91c2UKKyMgIGVuZGlmCisJICAgICkKKwlzZXRfbW91c2VfdGVybWNvZGUoS1NfREVDX01PVVNFLAorCQkJCSAgICAgICAoY2hhcl91ICopSUZfRUIoIlwwMzNbIiwgRVNDX1NUUiAiWyIpKTsKKyAgICBlbHNlCisJZGVsX21vdXNlX3Rlcm1jb2RlKEtTX0RFQ19NT1VTRSk7CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTU9VU0VfUFRFUk0KKyAgICAvKiBzYW1lIGFzIHRoZSBkZWMgbW91c2UgKi8KKyAgICBpZiAoIXVzZV94dGVybV9tb3VzZSgpCisjICBpZmRlZiBGRUFUX0dVSQorCSAgICAmJiAhZ3VpLmluX3VzZQorIyAgZW5kaWYKKwkgICAgKQorCXNldF9tb3VzZV90ZXJtY29kZShLU19QVEVSTV9NT1VTRSwKKwkJCQkgICAgICAoY2hhcl91ICopIElGX0VCKCJcMDMzWyIsIEVTQ19TVFIgIlsiKSk7CisgICAgZWxzZQorCWRlbF9tb3VzZV90ZXJtY29kZShLU19QVEVSTV9NT1VTRSk7CisjIGVuZGlmCit9CisjZW5kaWYKKworLyoKKyAqIHNldCBzY3JlZW4gbW9kZSwgYWx3YXlzIGZhaWxzLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIGludAorbWNoX3NjcmVlbm1vZGUoYXJnKQorICAgIGNoYXJfdSAgICphcmc7Cit7CisgICAgRU1TRyhfKGVfc2NyZWVubW9kZSkpOworICAgIHJldHVybiBGQUlMOworfQorCisjaWZuZGVmIFZNUworCisvKgorICogVHJ5IHRvIGdldCB0aGUgY3VycmVudCB3aW5kb3cgc2l6ZToKKyAqIDEuIHdpdGggYW4gaW9jdGwoKSwgbW9zdCBhY2N1cmF0ZSBtZXRob2QKKyAqIDIuIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBMSU5FUyBhbmQgQ09MVU1OUworICogMy4gZnJvbSB0aGUgdGVybWNhcAorICogNC4ga2VlcCB1c2luZyB0aGUgb2xkIHZhbHVlcworICogUmV0dXJuIE9LIHdoZW4gc2l6ZSBjb3VsZCBiZSBkZXRlcm1pbmVkLCBGQUlMIG90aGVyd2lzZS4KKyAqLworICAgIGludAorbWNoX2dldF9zaGVsbHNpemUoKQoreworICAgIGxvbmcJcm93cyA9IDA7CisgICAgbG9uZwljb2x1bW5zID0gMDsKKyAgICBjaGFyX3UJKnA7CisKKyAgICAvKgorICAgICAqIEZvciBPUy8yIHVzZSBfc2Nyc2l6ZSgpLgorICAgICAqLworIyBpZmRlZiBfX0VNWF9fCisgICAgeworCWludCBzWzJdOworCisJX3NjcnNpemUocyk7CisJY29sdW1ucyA9IHNbMF07CisJcm93cyA9IHNbMV07CisgICAgfQorIyBlbmRpZgorCisgICAgLyoKKyAgICAgKiAxLiB0cnkgdXNpbmcgYW4gaW9jdGwuIEl0IGlzIHRoZSBtb3N0IGFjY3VyYXRlIG1ldGhvZC4KKyAgICAgKgorICAgICAqIFRyeSB1c2luZyBUSU9DR1dJTlNaIGZpcnN0LCBzb21lIHN5c3RlbXMgdGhhdCBoYXZlIGl0IGFsc28gZGVmaW5lCisgICAgICogVElPQ0dTSVpFIGJ1dCBkb24ndCBoYXZlIGEgc3RydWN0IHR0eXNpemUuCisgICAgICovCisjIGlmZGVmIFRJT0NHV0lOU1oKKyAgICB7CisJc3RydWN0IHdpbnNpemUJd3M7CisJaW50IGZkID0gMTsKKworCS8qIFdoZW4gc3Rkb3V0IGlzIG5vdCBhIHR0eSwgdXNlIHN0ZGluIGZvciB0aGUgaW9jdGwoKS4gKi8KKwlpZiAoIWlzYXR0eShmZCkgJiYgaXNhdHR5KHJlYWRfY21kX2ZkKSkKKwkgICAgZmQgPSByZWFkX2NtZF9mZDsKKwlpZiAoaW9jdGwoZmQsIFRJT0NHV0lOU1osICZ3cykgPT0gMCkKKwl7CisJICAgIGNvbHVtbnMgPSB3cy53c19jb2w7CisJICAgIHJvd3MgPSB3cy53c19yb3c7CisJfQorICAgIH0KKyMgZWxzZSAvKiBUSU9DR1dJTlNaICovCisjICBpZmRlZiBUSU9DR1NJWkUKKyAgICB7CisJc3RydWN0IHR0eXNpemUJdHM7CisJaW50IGZkID0gMTsKKworCS8qIFdoZW4gc3Rkb3V0IGlzIG5vdCBhIHR0eSwgdXNlIHN0ZGluIGZvciB0aGUgaW9jdGwoKS4gKi8KKwlpZiAoIWlzYXR0eShmZCkgJiYgaXNhdHR5KHJlYWRfY21kX2ZkKSkKKwkgICAgZmQgPSByZWFkX2NtZF9mZDsKKwlpZiAoaW9jdGwoZmQsIFRJT0NHU0laRSwgJnRzKSA9PSAwKQorCXsKKwkgICAgY29sdW1ucyA9IHRzLnRzX2NvbHM7CisJICAgIHJvd3MgPSB0cy50c19saW5lczsKKwl9CisgICAgfQorIyAgZW5kaWYgLyogVElPQ0dTSVpFICovCisjIGVuZGlmIC8qIFRJT0NHV0lOU1ogKi8KKworICAgIC8qCisgICAgICogMi4gZ2V0IHNpemUgZnJvbSBlbnZpcm9ubWVudAorICAgICAqLworICAgIGlmIChjb2x1bW5zID09IDAgfHwgcm93cyA9PSAwKQorICAgIHsKKwlpZiAoKHAgPSAoY2hhcl91ICopZ2V0ZW52KCJMSU5FUyIpKSkKKwkgICAgcm93cyA9IGF0b2koKGNoYXIgKilwKTsKKwlpZiAoKHAgPSAoY2hhcl91ICopZ2V0ZW52KCJDT0xVTU5TIikpKQorCSAgICBjb2x1bW5zID0gYXRvaSgoY2hhciAqKXApOworICAgIH0KKworI2lmZGVmIEhBVkVfVEdFVEVOVAorICAgIC8qCisgICAgICogMy4gdHJ5IHJlYWRpbmcgImNvIiBhbmQgImxpIiBlbnRyaWVzIGZyb20gdGVybWNhcAorICAgICAqLworICAgIGlmIChjb2x1bW5zID09IDAgfHwgcm93cyA9PSAwKQorCWdldGxpbmVjb2woJmNvbHVtbnMsICZyb3dzKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiA0LiBJZiBldmVyeXRoaW5nIGZhaWxzLCB1c2UgdGhlIG9sZCB2YWx1ZXMKKyAgICAgKi8KKyAgICBpZiAoY29sdW1ucyA8PSAwIHx8IHJvd3MgPD0gMCkKKwlyZXR1cm4gRkFJTDsKKworICAgIFJvd3MgPSByb3dzOworICAgIENvbHVtbnMgPSBjb2x1bW5zOworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFRyeSB0byBzZXQgdGhlIHdpbmRvdyBzaXplIHRvIFJvd3MgYW5kIENvbHVtbnMuCisgKi8KKyAgICB2b2lkCittY2hfc2V0X3NoZWxsc2l6ZSgpCit7CisgICAgaWYgKCpUX0NXUykKKyAgICB7CisJLyoKKwkgKiBOT1RFOiBpZiB5b3UgZ2V0IGFuIGVycm9yIGhlcmUgdGhhdCB0ZXJtX3NldF93aW5zaXplKCkgaXMKKwkgKiB1bmRlZmluZWQsIGNoZWNrIHRoZSBvdXRwdXQgb2YgY29uZmlndXJlLiAgSXQgY291bGQgcHJvYmFibHkgbm90CisJICogZmluZCBhIG5jdXJzZXMsIHRlcm1jYXAgb3IgdGVybWxpYiBsaWJyYXJ5LgorCSAqLworCXRlcm1fc2V0X3dpbnNpemUoKGludClSb3dzLCAoaW50KUNvbHVtbnMpOworCW91dF9mbHVzaCgpOworCXNjcmVlbl9zdGFydCgpOwkJCS8qIGRvbid0IGtub3cgd2hlcmUgY3Vyc29yIGlzIG5vdyAqLworICAgIH0KK30KKworI2VuZGlmIC8qIFZNUyAqLworCisvKgorICogUm93cyBhbmQvb3IgQ29sdW1ucyBoYXMgY2hhbmdlZC4KKyAqLworICAgIHZvaWQKK21jaF9uZXdfc2hlbGxzaXplKCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvLiAqLworfQorCisgICAgaW50CittY2hfY2FsbF9zaGVsbChjbWQsIG9wdGlvbnMpCisgICAgY2hhcl91CSpjbWQ7CisgICAgaW50CQlvcHRpb25zOwkvKiBTSEVMTF8qLCBzZWUgdmltLmggKi8KK3sKKyNpZmRlZiBWTVMKKyAgICBjaGFyCSppZm4gPSBOVUxMOworICAgIGNoYXIJKm9mbiA9IE5VTEw7CisjZW5kaWYKKyAgICBpbnQJCXRtb2RlID0gY3VyX3Rtb2RlOworI2lmZGVmIFVTRV9TWVNURU0JLyogdXNlIHN5c3RlbSgpIHRvIHN0YXJ0IHRoZSBzaGVsbDogc2ltcGxlIGJ1dCBzbG93ICovCisgICAgaW50CSAgICB4OworIyBpZm5kZWYgX19FTVhfXworICAgIGNoYXJfdSAgKm5ld2NtZDsgICAvKiBvbmx5IG5lZWRlZCBmb3IgdW5peCAqLworIyBlbHNlCisgICAgLyoKKyAgICAgKiBTZXQgdGhlIHByZWZlcnJlZCBzaGVsbCBpbiB0aGUgRU1YU0hFTEwgZW52aXJvbm1lbnQgdmFyaWFibGUgKGJ1dAorICAgICAqIG9ubHkgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gd2hhdCBpcyBhbHJlYWR5IGluIHRoZSBlbnZpcm9ubWVudCkuCisgICAgICogRW14IHRoZW4gdGFrZXMgY2FyZSBvZiB3aGV0aGVyIHRvIHVzZSAiL2MiIG9yICItYyIgaW4gYW4KKyAgICAgKiBpbnRlbGxpZ2VudCB3YXkuIFNpbXBseSBwYXNzIHRoZSB3aG9sZSB0aGluZyB0byBlbXgncyBzeXN0ZW0oKSBjYWxsLgorICAgICAqIEVteCBhbHNvIHN0YXJ0cyBhbiBpbnRlcmFjdGl2ZSBzaGVsbCBpZiBzeXN0ZW0oKSBpcyBwYXNzZWQgYW4gZW1wdHkKKyAgICAgKiBzdHJpbmcuCisgICAgICovCisgICAgY2hhcl91ICpwLCAqb2xkOworCisgICAgaWYgKCgob2xkID0gKGNoYXJfdSAqKWdldGVudigiRU1YU0hFTEwiKSkgPT0gTlVMTCkgfHwgU1RSQ01QKG9sZCwgcF9zaCkpCisgICAgeworCS8qIHNob3VsZCBjaGVjayBIQVZFX1NFVEVOViwgYnV0IEkga25vdyB3ZSBkb24ndCBoYXZlIGl0LiAqLworCXAgPSBhbGxvYygxMCArIHN0cmxlbihwX3NoKSk7CisJaWYgKHApCisJeworCSAgICBzcHJpbnRmKChjaGFyICopcCwgIkVNWFNIRUxMPSVzIiwgcF9zaCk7CisJICAgIHB1dGVudigoY2hhciAqKXApOwkvKiBkb24ndCBmcmVlIHRoZSBwb2ludGVyISAqLworCX0KKyAgICB9CisjIGVuZGlmCisKKyAgICBvdXRfZmx1c2goKTsKKworICAgIGlmIChvcHRpb25zICYgU0hFTExfQ09PS0VEKQorCXNldHRtb2RlKFRNT0RFX0NPT0spOwkgICAgLyogc2V0IHRvIG5vcm1hbCBtb2RlICovCisKKyMgaWZkZWYgX19FTVhfXworICAgIGlmIChjbWQgPT0gTlVMTCkKKwl4ID0gc3lzdGVtKCIiKTsJLyogdGhpcyBzdGFydHMgYW4gaW50ZXJhY3RpdmUgc2hlbGwgaW4gZW14ICovCisgICAgZWxzZQorCXggPSBzeXN0ZW0oKGNoYXIgKiljbWQpOworICAgIC8qIHN5c3RlbSgpIHJldHVybnMgLTEgd2hlbiBlcnJvciBvY2N1cnMgaW4gc3RhcnRpbmcgc2hlbGwgKi8KKyAgICBpZiAoeCA9PSAtMSAmJiAhZW1zZ19zaWxlbnQpCisgICAgeworCU1TR19QVVRTKF8oIlxuQ2Fubm90IGV4ZWN1dGUgc2hlbGwgIikpOworCW1zZ19vdXR0cmFucyhwX3NoKTsKKwltc2dfcHV0Y2hhcignXG4nKTsKKyAgICB9CisjIGVsc2UgLyogbm90IF9fRU1YX18gKi8KKyAgICBpZiAoY21kID09IE5VTEwpCisJeCA9IHN5c3RlbSgoY2hhciAqKXBfc2gpOworICAgIGVsc2UKKyAgICB7CisjICBpZmRlZiBWTVMKKwlpZiAob2ZuID0gc3RyY2hyKChjaGFyICopY21kLCAnPicpKQorCSAgICAqb2ZuKysgPSAnXDAnOworCWlmIChpZm4gPSBzdHJjaHIoKGNoYXIgKiljbWQsICc8JykpCisJeworCSAgICBjaGFyICpwOworCisJICAgICppZm4rKyA9ICdcMCc7CisJICAgIHAgPSBzdHJjaHIoaWZuLCcgJyk7IC8qIGNob3Agb2ZmIGFueSB0cmFpbGluZyBzcGFjZXMgKi8KKwkgICAgaWYgKHApCisJCSpwID0gJ1wwJzsKKwl9CisJaWYgKG9mbikKKwkgICAgeCA9IHZtc19zeXMoKGNoYXIgKiljbWQsIG9mbiwgaWZuKTsKKwllbHNlCisJICAgIHggPSBzeXN0ZW0oKGNoYXIgKiljbWQpOworIyAgZWxzZQorCW5ld2NtZCA9IGxhbGxvYyhTVFJMRU4ocF9zaCkKKwkJKyAoZXh0cmFfc2hlbGxfYXJnID09IE5VTEwgPyAwIDogU1RSTEVOKGV4dHJhX3NoZWxsX2FyZykpCisJCSsgU1RSTEVOKHBfc2hjZikgKyBTVFJMRU4oY21kKSArIDQsIFRSVUUpOworCWlmIChuZXdjbWQgPT0gTlVMTCkKKwkgICAgeCA9IDA7CisJZWxzZQorCXsKKwkgICAgc3ByaW50ZigoY2hhciAqKW5ld2NtZCwgIiVzICVzICVzICVzIiwgcF9zaCwKKwkJICAgIGV4dHJhX3NoZWxsX2FyZyA9PSBOVUxMID8gIiIgOiAoY2hhciAqKWV4dHJhX3NoZWxsX2FyZywKKwkJICAgIChjaGFyICopcF9zaGNmLAorCQkgICAgKGNoYXIgKiljbWQpOworCSAgICB4ID0gc3lzdGVtKChjaGFyICopbmV3Y21kKTsKKwkgICAgdmltX2ZyZWUobmV3Y21kKTsKKwl9CisjICBlbmRpZgorICAgIH0KKyMgaWZkZWYgVk1TCisgICAgeCA9IHZtc19zeXNfc3RhdHVzKHgpOworIyBlbmRpZgorICAgIGlmIChlbXNnX3NpbGVudCkKKwk7CisgICAgZWxzZSBpZiAoeCA9PSAxMjcpCisJTVNHX1BVVFMoXygiXG5DYW5ub3QgZXhlY3V0ZSBzaGVsbCBzaFxuIikpOworIyBlbmRpZgkvKiBfX0VNWF9fICovCisgICAgZWxzZSBpZiAoeCAmJiAhKG9wdGlvbnMgJiBTSEVMTF9TSUxFTlQpKQorICAgIHsKKwlNU0dfUFVUUyhfKCJcbnNoZWxsIHJldHVybmVkICIpKTsKKwltc2dfb3V0bnVtKChsb25nKXgpOworCW1zZ19wdXRjaGFyKCdcbicpOworICAgIH0KKworICAgIGlmICh0bW9kZSA9PSBUTU9ERV9SQVcpCisJc2V0dG1vZGUoVE1PREVfUkFXKTsJLyogc2V0IHRvIHJhdyBtb2RlICovCisjIGlmZGVmIEZFQVRfVElUTEUKKyAgICByZXNldHRpdGxlKCk7CisjIGVuZGlmCisgICAgcmV0dXJuIHg7CisKKyNlbHNlIC8qIFVTRV9TWVNURU0gKi8JICAgIC8qIGRvbid0IHVzZSBzeXN0ZW0oKSwgdXNlIGZvcmsoKS9leGVjKCkgKi8KKworI2RlZmluZSBFWEVDX0ZBSUxFRCAxMjIJICAgIC8qIEV4aXQgY29kZSB3aGVuIHNoZWxsIGRpZG4ndCBleGVjdXRlLiAgRG9uJ3QgdXNlCisJCQkgICAgICAgMTI3LCBzb21lIHNoZWxsIHVzZSB0aGF0IGFscmVhZHkgKi8KKworICAgIGNoYXJfdQkqbmV3Y21kID0gTlVMTDsKKyAgICBwaWRfdAlwaWQ7CisgICAgcGlkX3QJd2FpdF9waWQgPSAwOworIyBpZmRlZiBIQVZFX1VOSU9OX1dBSVQKKyAgICB1bmlvbiB3YWl0CXN0YXR1czsKKyMgZWxzZQorICAgIGludAkJc3RhdHVzID0gLTE7CisjIGVuZGlmCisgICAgaW50CQlyZXR2YWwgPSAtMTsKKyAgICBjaGFyCSoqYXJndiA9IE5VTEw7CisgICAgaW50CQlhcmdjOworICAgIGludAkJaTsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpbnF1b3RlOworIyBpZmRlZiBGRUFUX0dVSQorICAgIGludAkJcHR5X21hc3Rlcl9mZCA9IC0xOwkgICAgLyogZm9yIHB0eSdzICovCisgICAgaW50CQlwdHlfc2xhdmVfZmQgPSAtMTsKKyAgICBjaGFyCSp0dHlfbmFtZTsKKyAgICBpbnQJCWZkX3Rvc2hlbGxbMl07CSAgICAvKiBmb3IgcGlwZXMgKi8KKyAgICBpbnQJCWZkX2Zyb21zaGVsbFsyXTsKKyAgICBpbnQJCXBpcGVfZXJyb3IgPSBGQUxTRTsKKyMgIGlmZGVmIEhBVkVfU0VURU5WCisgICAgY2hhcgllbnZidWZbNTBdOworIyAgZWxzZQorICAgIHN0YXRpYyBjaGFyCWVudmJ1Zl9Sb3dzWzIwXTsKKyAgICBzdGF0aWMgY2hhcgllbnZidWZfQ29sdW1uc1syMF07CisjICBlbmRpZgorIyBlbmRpZgorICAgIGludAkJZGlkX3NldHRtb2RlID0gRkFMU0U7IC8qIFRSVUUgd2hlbiBzZXR0bW9kZShUTU9ERV9SQVcpIGNhbGxlZCAqLworCisgICAgb3V0X2ZsdXNoKCk7CisgICAgaWYgKG9wdGlvbnMgJiBTSEVMTF9DT09LRUQpCisJc2V0dG1vZGUoVE1PREVfQ09PSyk7CQkvKiBzZXQgdG8gbm9ybWFsIG1vZGUgKi8KKworICAgIC8qCisgICAgICogMTogZmluZCBudW1iZXIgb2YgYXJndW1lbnRzCisgICAgICogMjogc2VwYXJhdGUgdGhlbSBhbmQgYnVpbHQgYXJndltdCisgICAgICovCisgICAgbmV3Y21kID0gdmltX3N0cnNhdmUocF9zaCk7CisgICAgaWYgKG5ld2NtZCA9PSBOVUxMKQkJLyogb3V0IG9mIG1lbW9yeSAqLworCWdvdG8gZXJyb3I7CisgICAgZm9yIChpID0gMDsgaSA8IDI7ICsraSkKKyAgICB7CisJcCA9IG5ld2NtZDsKKwlpbnF1b3RlID0gRkFMU0U7CisJYXJnYyA9IDA7CisJZm9yICg7OykKKwl7CisJICAgIGlmIChpID09IDEpCisJCWFyZ3ZbYXJnY10gPSAoY2hhciAqKXA7CisJICAgICsrYXJnYzsKKwkgICAgd2hpbGUgKCpwICYmIChpbnF1b3RlIHx8ICgqcCAhPSAnICcgJiYgKnAgIT0gVEFCKSkpCisJICAgIHsKKwkJaWYgKCpwID09ICciJykKKwkJICAgIGlucXVvdGUgPSAhaW5xdW90ZTsKKwkJKytwOworCSAgICB9CisJICAgIGlmICgqcCA9PSBOVUwpCisJCWJyZWFrOworCSAgICBpZiAoaSA9PSAxKQorCQkqcCsrID0gTlVMOworCSAgICBwID0gc2tpcHdoaXRlKHApOworCX0KKwlpZiAoaSA9PSAwKQorCXsKKwkgICAgYXJndiA9IChjaGFyICoqKWFsbG9jKCh1bnNpZ25lZCkoKGFyZ2MgKyA0KSAqIHNpemVvZihjaGFyICopKSk7CisJICAgIGlmIChhcmd2ID09IE5VTEwpCSAgICAvKiBvdXQgb2YgbWVtb3J5ICovCisJCWdvdG8gZXJyb3I7CisJfQorICAgIH0KKyAgICBpZiAoY21kICE9IE5VTEwpCisgICAgeworCWlmIChleHRyYV9zaGVsbF9hcmcgIT0gTlVMTCkKKwkgICAgYXJndlthcmdjKytdID0gKGNoYXIgKilleHRyYV9zaGVsbF9hcmc7CisJYXJndlthcmdjKytdID0gKGNoYXIgKilwX3NoY2Y7CisJYXJndlthcmdjKytdID0gKGNoYXIgKiljbWQ7CisgICAgfQorICAgIGFyZ3ZbYXJnY10gPSBOVUxMOworCisjIGlmZGVmIEZFQVRfR1VJCisgICAgLyoKKyAgICAgKiBGb3IgdGhlIEdVSTogVHJ5IHVzaW5nIGEgcHNldWRvLXR0eSB0byBnZXQgdGhlIHN0ZGluL3N0ZG91dCBvZiB0aGUKKyAgICAgKiBleGVjdXRlZCBjb21tYW5kIGludG8gdGhlIFZpbSB3aW5kb3cuICBPciB1c2UgYSBwaXBlLgorICAgICAqLworICAgIGlmIChndWkuaW5fdXNlICYmIHNob3dfc2hlbGxfbWVzcykKKyAgICB7CisJLyoKKwkgKiBUcnkgdG8gb3BlbiBhIG1hc3RlciBwdHkuCisJICogSWYgdGhpcyB3b3Jrcywgb3BlbiB0aGUgc2xhdmUgcHR5LgorCSAqIElmIHRoZSBzbGF2ZSBjYW4ndCBiZSBvcGVuZWQsIGNsb3NlIHRoZSBtYXN0ZXIgcHR5LgorCSAqLworCWlmIChwX2d1aXB0eSkKKwl7CisJICAgIHB0eV9tYXN0ZXJfZmQgPSBPcGVuUFRZKCZ0dHlfbmFtZSk7CSAgICAvKiBvcGVuIHB0eSAqLworCSAgICBpZiAocHR5X21hc3Rlcl9mZCA+PSAwICYmICgocHR5X3NsYXZlX2ZkID0KKwkJCQkgICAgb3Blbih0dHlfbmFtZSwgT19SRFdSIHwgT19FWFRSQSwgMCkpIDwgMCkpCisJICAgIHsKKwkJY2xvc2UocHR5X21hc3Rlcl9mZCk7CisJCXB0eV9tYXN0ZXJfZmQgPSAtMTsKKwkgICAgfQorCX0KKwkvKgorCSAqIElmIG5vdCBvcGVuaW5nIGEgcHR5IG9yIGl0IGRpZG4ndCB3b3JrLCB0cnkgdXNpbmcgcGlwZXMuCisJICovCisJaWYgKHB0eV9tYXN0ZXJfZmQgPCAwKQorCXsKKwkgICAgcGlwZV9lcnJvciA9IChwaXBlKGZkX3Rvc2hlbGwpIDwgMCk7CisJICAgIGlmICghcGlwZV9lcnJvcikJCQkgICAgLyogcGlwZSBjcmVhdGUgT0sgKi8KKwkgICAgeworCQlwaXBlX2Vycm9yID0gKHBpcGUoZmRfZnJvbXNoZWxsKSA8IDApOworCQlpZiAocGlwZV9lcnJvcikJCQkgICAgLyogcGlwZSBjcmVhdGUgZmFpbGVkICovCisJCXsKKwkJICAgIGNsb3NlKGZkX3Rvc2hlbGxbMF0pOworCQkgICAgY2xvc2UoZmRfdG9zaGVsbFsxXSk7CisJCX0KKwkgICAgfQorCSAgICBpZiAocGlwZV9lcnJvcikKKwkgICAgeworCQlNU0dfUFVUUyhfKCJcbkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIpKTsKKwkJb3V0X2ZsdXNoKCk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKCFwaXBlX2Vycm9yKQkJCS8qIHB0eSBvciBwaXBlIG9wZW5lZCBvciBub3QgdXNlZCAqLworIyBlbmRpZgorCisgICAgeworIyBpZmRlZiBfX0JFT1NfXworCWJlb3NfY2xlYW51cF9yZWFkX3RocmVhZCgpOworIyBlbmRpZgorCWlmICgocGlkID0gZm9yaygpKSA9PSAtMSkJLyogbWF5YmUgd2Ugc2hvdWxkIHVzZSB2Zm9yaygpICovCisJeworCSAgICBNU0dfUFVUUyhfKCJcbkNhbm5vdCBmb3JrXG4iKSk7CisjIGlmZGVmIEZFQVRfR1VJCisJICAgIGlmIChndWkuaW5fdXNlICYmIHNob3dfc2hlbGxfbWVzcykKKwkgICAgeworCQlpZiAocHR5X21hc3Rlcl9mZCA+PSAwKQkJLyogY2xvc2UgdGhlIHBzZXVkbyB0dHkgKi8KKwkJeworCQkgICAgY2xvc2UocHR5X21hc3Rlcl9mZCk7CisJCSAgICBjbG9zZShwdHlfc2xhdmVfZmQpOworCQl9CisJCWVsc2UJCQkJLyogY2xvc2UgdGhlIHBpcGVzICovCisJCXsKKwkJICAgIGNsb3NlKGZkX3Rvc2hlbGxbMF0pOworCQkgICAgY2xvc2UoZmRfdG9zaGVsbFsxXSk7CisJCSAgICBjbG9zZShmZF9mcm9tc2hlbGxbMF0pOworCQkgICAgY2xvc2UoZmRfZnJvbXNoZWxsWzFdKTsKKwkJfQorCSAgICB9CisjIGVuZGlmCisJfQorCWVsc2UgaWYgKHBpZCA9PSAwKQkvKiBjaGlsZCAqLworCXsKKwkgICAgcmVzZXRfc2lnbmFscygpOwkJLyogaGFuZGxlIHNpZ25hbHMgbm9ybWFsbHkgKi8KKworCSAgICBpZiAoIXNob3dfc2hlbGxfbWVzcyB8fCAob3B0aW9ucyAmIFNIRUxMX0VYUEFORCkpCisJICAgIHsKKwkJaW50IGZkOworCisJCS8qCisJCSAqIERvbid0IHdhbnQgdG8gc2hvdyBhbnkgbWVzc2FnZSBmcm9tIHRoZSBzaGVsbC4gIENhbid0IGp1c3QKKwkJICogY2xvc2Ugc3Rkb3V0IGFuZCBzdGRlcnIgdGhvdWdoLCBiZWNhdXNlIHNvbWUgc3lzdGVtcyB3aWxsCisJCSAqIGJyZWFrIGlmIHlvdSB0cnkgdG8gd3JpdGUgdG8gdGhlbSBhZnRlciB0aGF0LCBzbyB3ZSBtdXN0CisJCSAqIHVzZSBkdXAoKSB0byByZXBsYWNlIHRoZW0gd2l0aCBzb21ldGhpbmcgZWxzZSAtLSB3ZWJiCisJCSAqIENvbm5lY3Qgc3RkaW4gdG8gL2Rldi9udWxsIHRvbywgc28gIjpuIGBjYXRgIiBkb2Vzbid0IGhhbmcsCisJCSAqIHdhaXRpbmcgZm9yIGlucHV0LgorCQkgKi8KKwkJZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IgfCBPX0VYVFJBLCAwKTsKKwkJZmNsb3NlKHN0ZGluKTsKKwkJZmNsb3NlKHN0ZG91dCk7CisJCWZjbG9zZShzdGRlcnIpOworCisJCS8qCisJCSAqIElmIGFueSBvZiB0aGVzZSBvcGVuKCkncyBhbmQgZHVwKCkncyBmYWlsLCB3ZSBqdXN0IGNvbnRpbnVlCisJCSAqIGFueXdheS4gIEl0J3Mgbm90IGZhdGFsLCBhbmQgb24gbW9zdCBzeXN0ZW1zIGl0IHdpbGwgbWFrZQorCQkgKiBubyBkaWZmZXJlbmNlIGF0IGFsbC4gIE9uIGEgZmV3IGl0IHdpbGwgY2F1c2UgdGhlIGV4ZWN2cCgpCisJCSAqIHRvIGV4aXQgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyBldmVuIHdoZW4gdGhlIGNvbXBsZXRpb24KKwkJICogY291bGQgYmUgZG9uZSwgd2hpY2ggaXMgbm90aGluZyB0b28gc2VyaW91cy4gIElmIHRoZSBvcGVuKCkKKwkJICogb3IgZHVwKCkgZmFpbGVkIHdlJ2QganVzdCBkbyB0aGUgc2FtZSB0aGluZyBvdXJzZWx2ZXMKKwkJICogYW55d2F5IC0tIHdlYmIKKwkJICovCisJCWlmIChmZCA+PSAwKQorCQl7CisJCSAgICBkdXAoZmQpOyAvKiBUbyByZXBsYWNlIHN0ZGluICAoZmlsZSBkZXNjcmlwdG9yIDApICovCisJCSAgICBkdXAoZmQpOyAvKiBUbyByZXBsYWNlIHN0ZG91dCAoZmlsZSBkZXNjcmlwdG9yIDEpICovCisJCSAgICBkdXAoZmQpOyAvKiBUbyByZXBsYWNlIHN0ZGVyciAoZmlsZSBkZXNjcmlwdG9yIDIpICovCisKKwkJICAgIC8qIERvbid0IG5lZWQgdGhpcyBub3cgdGhhdCB3ZSd2ZSBkdXBsaWNhdGVkIGl0ICovCisJCSAgICBjbG9zZShmZCk7CisJCX0KKwkgICAgfQorIyBpZmRlZiBGRUFUX0dVSQorCSAgICBlbHNlIGlmIChndWkuaW5fdXNlKQorCSAgICB7CisKKyMgIGlmZGVmIEhBVkVfU0VUU0lECisJCSh2b2lkKXNldHNpZCgpOworIyAgZW5kaWYKKwkJLyogcHVzaCBzdHJlYW0gZGlzY2lwbGluZSBtb2R1bGVzICovCisJCWlmIChvcHRpb25zICYgU0hFTExfQ09PS0VEKQorCQkgICAgU2V0dXBTbGF2ZVBUWShwdHlfc2xhdmVfZmQpOworIyAgaWZkZWYgVElPQ1NDVFRZCisJCS8qIHRyeSB0byBiZWNvbWUgY29udHJvbGxpbmcgdHR5IChwcm9iYWJseSBkb2Vzbid0IHdvcmssCisJCSAqIHVubGVzcyBydW4gYnkgcm9vdCkgKi8KKwkJaW9jdGwocHR5X3NsYXZlX2ZkLCBUSU9DU0NUVFksIChjaGFyICopTlVMTCk7CisjICBlbmRpZgorCQkvKiBTaW11bGF0ZSB0byBoYXZlIGEgZHVtYiB0ZXJtaW5hbCAoZm9yIG5vdykgKi8KKyMgIGlmZGVmIEhBVkVfU0VURU5WCisJCXNldGVudigiVEVSTSIsICJkdW1iIiwgMSk7CisJCXNwcmludGYoKGNoYXIgKillbnZidWYsICIlbGQiLCBSb3dzKTsKKwkJc2V0ZW52KCJST1dTIiwgKGNoYXIgKillbnZidWYsIDEpOworCQlzcHJpbnRmKChjaGFyICopZW52YnVmLCAiJWxkIiwgUm93cyk7CisJCXNldGVudigiTElORVMiLCAoY2hhciAqKWVudmJ1ZiwgMSk7CisJCXNwcmludGYoKGNoYXIgKillbnZidWYsICIlbGQiLCBDb2x1bW5zKTsKKwkJc2V0ZW52KCJDT0xVTU5TIiwgKGNoYXIgKillbnZidWYsIDEpOworIyAgZWxzZQorCQkvKgorCQkgKiBQdXRlbnYgZG9lcyBub3QgY29weSB0aGUgc3RyaW5nLCBpdCBoYXMgdG8gcmVtYWluIHZhbGlkLgorCQkgKiBVc2UgYSBzdGF0aWMgYXJyYXkgdG8gYXZvaWQgbG9vc2luZyBhbGxvY2F0ZWQgbWVtb3J5LgorCQkgKi8KKwkJcHV0ZW52KCJURVJNPWR1bWIiKTsKKwkJc3ByaW50ZihlbnZidWZfUm93cywgIlJPV1M9JWxkIiwgUm93cyk7CisJCXB1dGVudihlbnZidWZfUm93cyk7CisJCXNwcmludGYoZW52YnVmX1Jvd3MsICJMSU5FUz0lbGQiLCBSb3dzKTsKKwkJcHV0ZW52KGVudmJ1Zl9Sb3dzKTsKKwkJc3ByaW50ZihlbnZidWZfQ29sdW1ucywgIkNPTFVNTlM9JWxkIiwgQ29sdW1ucyk7CisJCXB1dGVudihlbnZidWZfQ29sdW1ucyk7CisjICBlbmRpZgorCisJCWlmIChwdHlfbWFzdGVyX2ZkID49IDApCisJCXsKKwkJICAgIGNsb3NlKHB0eV9tYXN0ZXJfZmQpOyAgIC8qIGNsb3NlIG1hc3RlciBzaWRlIG9mIHB0eSAqLworCisJCSAgICAvKiBzZXQgdXAgc3RkaW4vc3Rkb3V0L3N0ZGVyciBmb3IgdGhlIGNoaWxkICovCisJCSAgICBjbG9zZSgwKTsKKwkJICAgIGR1cChwdHlfc2xhdmVfZmQpOworCQkgICAgY2xvc2UoMSk7CisJCSAgICBkdXAocHR5X3NsYXZlX2ZkKTsKKwkJICAgIGNsb3NlKDIpOworCQkgICAgZHVwKHB0eV9zbGF2ZV9mZCk7CisKKwkJICAgIGNsb3NlKHB0eV9zbGF2ZV9mZCk7ICAgIC8qIGhhcyBiZWVuIGR1cHBlZCwgY2xvc2UgaXQgbm93ICovCisJCX0KKwkJZWxzZQorCQl7CisJCSAgICAvKiBzZXQgdXAgc3RkaW4gZm9yIHRoZSBjaGlsZCAqLworCQkgICAgY2xvc2UoZmRfdG9zaGVsbFsxXSk7CisJCSAgICBjbG9zZSgwKTsKKwkJICAgIGR1cChmZF90b3NoZWxsWzBdKTsKKwkJICAgIGNsb3NlKGZkX3Rvc2hlbGxbMF0pOworCisJCSAgICAvKiBzZXQgdXAgc3Rkb3V0IGZvciB0aGUgY2hpbGQgKi8KKwkJICAgIGNsb3NlKGZkX2Zyb21zaGVsbFswXSk7CisJCSAgICBjbG9zZSgxKTsKKwkJICAgIGR1cChmZF9mcm9tc2hlbGxbMV0pOworCQkgICAgY2xvc2UoZmRfZnJvbXNoZWxsWzFdKTsKKworCQkgICAgLyogc2V0IHVwIHN0ZGVyciBmb3IgdGhlIGNoaWxkICovCisJCSAgICBjbG9zZSgyKTsKKwkJICAgIGR1cCgxKTsKKwkJfQorCSAgICB9CisjIGVuZGlmIC8qIEZFQVRfR1VJICovCisJICAgIC8qCisJICAgICAqIFRoZXJlIGlzIG5vIHR5cGUgY2FzdCBmb3IgdGhlIGFyZ3YsIGJlY2F1c2UgdGhlIHR5cGUgbWF5IGJlCisJICAgICAqIGRpZmZlcmVudCBvbiBkaWZmZXJlbnQgbWFjaGluZXMuIFRoaXMgbWF5IGNhdXNlIGEgd2FybmluZworCSAgICAgKiBtZXNzYWdlIHdpdGggc3RyaWN0IGNvbXBpbGVycywgZG9uJ3Qgd29ycnkgYWJvdXQgaXQuCisJICAgICAqIENhbGwgX2V4aXQoKSBpbnN0ZWFkIG9mIGV4aXQoKSB0byBhdm9pZCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uCisJICAgICAqIHRvIHRoZSBYIHNlcnZlciAoZXNwLiB3aXRoIEdUSywgd2hpY2ggdXNlcyBhdGV4aXQoKSkuCisJICAgICAqLworCSAgICBleGVjdnAoYXJndlswXSwgYXJndik7CisJICAgIF9leGl0KEVYRUNfRkFJTEVEKTsJICAgIC8qIGV4ZWMgZmFpbGVkLCByZXR1cm4gZmFpbHVyZSBjb2RlICovCisJfQorCWVsc2UJCQkvKiBwYXJlbnQgKi8KKwl7CisJICAgIC8qCisJICAgICAqIFdoaWxlIGNoaWxkIGlzIHJ1bm5pbmcsIGlnbm9yZSB0ZXJtaW5hdGluZyBzaWduYWxzLgorCSAgICAgKi8KKwkgICAgY2F0Y2hfc2lnbmFscyhTSUdfSUdOLCBTSUdfRVJSKTsKKworIyBpZmRlZiBGRUFUX0dVSQorCisJICAgIC8qCisJICAgICAqIEZvciB0aGUgR1VJIHdlIHJlZGlyZWN0IHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciB0byBvdXIgd2luZG93LgorCSAgICAgKi8KKwkgICAgaWYgKGd1aS5pbl91c2UgJiYgc2hvd19zaGVsbF9tZXNzKQorCSAgICB7CisjICBkZWZpbmUgQlVGTEVOIDEwMAkJLyogbGVuZ3RoIGZvciBidWZmZXIsIHBzZXVkbyB0dHkgbGltaXQgaXMgMTI4ICovCisJCWNoYXJfdQkgICAgYnVmZmVyW0JVRkxFTiArIDFdOworIyAgaWZkZWYgRkVBVF9NQllURQorCQlpbnQJICAgIGJ1ZmZlcl9vZmYgPSAwOwkvKiB2YWxpZCBieXRlcyBpbiBidWZmZXJbXSAqLworIyAgZW5kaWYKKwkJY2hhcl91CSAgICB0YV9idWZbQlVGTEVOICsgMV07CS8qIFR5cGVBSGVhZCAqLworCQlpbnQJICAgIHRhX2xlbiA9IDA7CQkvKiB2YWxpZCBieXRlcyBpbiB0YV9idWZbXSAqLworCQlpbnQJICAgIGxlbjsKKwkJaW50CSAgICBwX21vcmVfc2F2ZTsKKwkJaW50CSAgICBvbGRfU3RhdGU7CisJCWludAkgICAgYzsKKwkJaW50CSAgICB0b3NoZWxsX2ZkOworCQlpbnQJICAgIGZyb21zaGVsbF9mZDsKKworCQlpZiAocHR5X21hc3Rlcl9mZCA+PSAwKQorCQl7CisJCSAgICBjbG9zZShwdHlfc2xhdmVfZmQpOwkvKiBjbG9zZSBzbGF2ZSBzaWRlIG9mIHB0eSAqLworCQkgICAgZnJvbXNoZWxsX2ZkID0gcHR5X21hc3Rlcl9mZDsKKwkJICAgIHRvc2hlbGxfZmQgPSBkdXAocHR5X21hc3Rlcl9mZCk7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBjbG9zZShmZF90b3NoZWxsWzBdKTsKKwkJICAgIGNsb3NlKGZkX2Zyb21zaGVsbFsxXSk7CisJCSAgICB0b3NoZWxsX2ZkID0gZmRfdG9zaGVsbFsxXTsKKwkJICAgIGZyb21zaGVsbF9mZCA9IGZkX2Zyb21zaGVsbFswXTsKKwkJfQorCisJCS8qCisJCSAqIFdyaXRlIHRvIHRoZSBjaGlsZCBpZiB0aGVyZSBhcmUgdHlwZWQgY2hhcmFjdGVycy4KKwkJICogUmVhZCBmcm9tIHRoZSBjaGlsZCBpZiB0aGVyZSBhcmUgY2hhcmFjdGVycyBhdmFpbGFibGUuCisJCSAqICAgUmVwZWF0IHRoZSByZWFkaW5nIGEgZmV3IHRpbWVzIGlmIG1vcmUgY2hhcmFjdGVycyBhcmUKKwkJICogICBhdmFpbGFibGUuIE5lZWQgdG8gY2hlY2sgZm9yIHR5cGVkIGtleXMgbm93IGFuZCB0aGVuLCBidXQKKwkJICogICBub3QgdG9vIG9mdGVuIChkZWxheXMgd2hlbiBubyBjaGFycyBhcmUgYXZhaWxhYmxlKS4KKwkJICogVGhpcyBsb29wIGlzIHF1aXQgaWYgbm8gY2hhcmFjdGVycyBjYW4gYmUgcmVhZCBmcm9tIHRoZSBwdHkKKwkJICogKFdhaXRGb3JDaGFyIGRldGVjdGVkIHNwZWNpYWwgY29uZGl0aW9uKSwgb3IgdGhlcmUgYXJlIG5vCisJCSAqIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGFuZCB0aGUgY2hpbGQgaGFzIGV4aXRlZC4KKwkJICogT25seSBjaGVjayBpZiB0aGUgY2hpbGQgaGFzIGV4aXRlZCB3aGVuIHRoZXJlIGlzIG5vIG1vcmUKKwkJICogb3V0cHV0LiBUaGUgY2hpbGQgbWF5IGV4aXQgYmVmb3JlIGFsbCB0aGUgb3V0cHV0IGhhcworCQkgKiBiZWVuIHByaW50ZWQuCisJCSAqCisJCSAqIEN1cnJlbnRseSB0aGlzIGJ1c3kgbG9vcHMhCisJCSAqIFRoaXMgY2FuIHByb2JhYmx5IGRlYWQtbG9jayB3aGVuIHRoZSB3cml0ZSBibG9ja3MhCisJCSAqLworCQlwX21vcmVfc2F2ZSA9IHBfbW9yZTsKKwkJcF9tb3JlID0gRkFMU0U7CisJCW9sZF9TdGF0ZSA9IFN0YXRlOworCQlTdGF0ZSA9IEVYVEVSTkNNRDsJLyogZG9uJ3QgcmVkcmF3IGF0IHdpbmRvdyByZXNpemUgKi8KKworCQlmb3IgKDs7KQorCQl7CisJCSAgICAvKgorCQkgICAgICogQ2hlY2sgaWYga2V5cyBoYXZlIGJlZW4gdHlwZWQsIHdyaXRlIHRoZW0gdG8gdGhlIGNoaWxkCisJCSAgICAgKiBpZiB0aGVyZSBhcmUgYW55LiAgRG9uJ3QgZG8gdGhpcyBpZiB3ZSBhcmUgZXhwYW5kaW5nCisJCSAgICAgKiB3aWxkIGNhcmRzICh3b3VsZCBlYXQgdHlwZWFoZWFkKS4gIERvbid0IGdldCBleHRyYQorCQkgICAgICogY2hhcmFjdGVycyB3aGVuIHdlIGFscmVhZHkgaGF2ZSBvbmUuCisJCSAgICAgKi8KKwkJICAgIGxlbiA9IDA7CisJCSAgICBpZiAoIShvcHRpb25zICYgU0hFTExfRVhQQU5EKQorCQkJICAgICYmICh0YV9sZW4gPiAwCisJCQkJfHwgKGxlbiA9IHVpX2luY2hhcih0YV9idWYsIEJVRkxFTiwgMTBMLAorCQkJCQkJCQkgICAgIDApKSA+IDApKQorCQkgICAgeworCQkJLyoKKwkJCSAqIEZvciBwaXBlczoKKwkJCSAqIENoZWNrIGZvciBDVFJMLUM6IHNlbmQgaW50ZXJydXB0IHNpZ25hbCB0byBjaGlsZC4KKwkJCSAqIENoZWNrIGZvciBDVFJMLUQ6IEVPRiwgY2xvc2UgcGlwZSB0byBjaGlsZC4KKwkJCSAqLworCQkJaWYgKGxlbiA9PSAxICYmIChwdHlfbWFzdGVyX2ZkIDwgMCB8fCBjbWQgIT0gTlVMTCkpCisJCQl7CisjICBpZmRlZiBTSUdJTlQKKwkJCSAgICAvKgorCQkJICAgICAqIFNlbmQgU0lHSU5UIHRvIHRoZSBjaGlsZCdzIGdyb3VwIG9yIGFsbAorCQkJICAgICAqIHByb2Nlc3NlcyBpbiBvdXIgZ3JvdXAuCisJCQkgICAgICovCisJCQkgICAgaWYgKHRhX2J1Zlt0YV9sZW5dID09IEN0cmxfQworCQkJCQkgICAgICAgfHwgdGFfYnVmW3RhX2xlbl0gPT0gaW50cl9jaGFyKQorIyAgIGlmZGVmIEhBVkVfU0VUU0lECisJCQkJa2lsbCgtcGlkLCBTSUdJTlQpOworIyAgIGVsc2UKKwkJCQlraWxsKDAsIFNJR0lOVCk7CisjICAgZW5kaWYKKyMgIGVuZGlmCisJCQkgICAgaWYgKHB0eV9tYXN0ZXJfZmQgPCAwICYmIHRvc2hlbGxfZmQgPj0gMAorCQkJCQkgICAgICAgJiYgdGFfYnVmW3RhX2xlbl0gPT0gQ3RybF9EKQorCQkJICAgIHsKKwkJCQljbG9zZSh0b3NoZWxsX2ZkKTsKKwkJCQl0b3NoZWxsX2ZkID0gLTE7CisJCQkgICAgfQorCQkJfQorCisJCQkvKiByZXBsYWNlIEtfQlMgYnkgPEJTPiBhbmQgS19ERUwgYnkgPERFTD4gKi8KKwkJCWZvciAoaSA9IHRhX2xlbjsgaSA8IHRhX2xlbiArIGxlbjsgKytpKQorCQkJeworCQkJICAgIGlmICh0YV9idWZbaV0gPT0gQ1NJICYmIGxlbiAtIGkgPiAyKQorCQkJICAgIHsKKwkJCQljID0gVEVSTUNBUDJLRVkodGFfYnVmW2kgKyAxXSwgdGFfYnVmW2kgKyAyXSk7CisJCQkJaWYgKGMgPT0gS19ERUwgfHwgYyA9PSBLX0tERUwgfHwgYyA9PSBLX0JTKQorCQkJCXsKKwkJCQkgICAgbWNoX21lbW1vdmUodGFfYnVmICsgaSArIDEsIHRhX2J1ZiArIGkgKyAzLAorCQkJCQkJICAgICAgIChzaXplX3QpKGxlbiAtIGkgLSAyKSk7CisJCQkJICAgIGlmIChjID09IEtfREVMIHx8IGMgPT0gS19LREVMKQorCQkJCQl0YV9idWZbaV0gPSBERUw7CisJCQkJICAgIGVsc2UKKwkJCQkJdGFfYnVmW2ldID0gQ3RybF9IOworCQkJCSAgICBsZW4gLT0gMjsKKwkJCQl9CisJCQkgICAgfQorCQkJICAgIGVsc2UgaWYgKHRhX2J1ZltpXSA9PSAnXHInKQorCQkJCXRhX2J1ZltpXSA9ICdcbic7CisjICBpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCQlpICs9ICgqbWJfcHRyMmxlbl9jaGVjaykodGFfYnVmICsgaSkgLSAxOworIyAgZW5kaWYKKwkJCX0KKworCQkJLyoKKwkJCSAqIEZvciBwaXBlczogZWNobyB0aGUgdHlwZWQgY2hhcmFjdGVycy4KKwkJCSAqIEZvciBhIHB0eSB0aGlzIGRvZXMgbm90IHNlZW0gdG8gd29yay4KKwkJCSAqLworCQkJaWYgKHB0eV9tYXN0ZXJfZmQgPCAwKQorCQkJeworCQkJICAgIGZvciAoaSA9IHRhX2xlbjsgaSA8IHRhX2xlbiArIGxlbjsgKytpKQorCQkJICAgIHsKKwkJCQlpZiAodGFfYnVmW2ldID09ICdcbicgfHwgdGFfYnVmW2ldID09ICdcYicpCisJCQkJICAgIG1zZ19wdXRjaGFyKHRhX2J1ZltpXSk7CisjICBpZmRlZiBGRUFUX01CWVRFCisJCQkJZWxzZSBpZiAoaGFzX21ieXRlKQorCQkJCXsKKwkJCQkgICAgaW50IGwgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHRhX2J1ZiArIGkpOworCisJCQkJICAgIG1zZ19vdXR0cmFuc19sZW4odGFfYnVmICsgaSwgbCk7CisJCQkJICAgIGkgKz0gbCAtIDE7CisJCQkJfQorIyAgZW5kaWYKKwkJCQllbHNlCisJCQkJICAgIG1zZ19vdXR0cmFuc19sZW4odGFfYnVmICsgaSwgMSk7CisJCQkgICAgfQorCQkJICAgIHdpbmRnb3RvKG1zZ19yb3csIG1zZ19jb2wpOworCQkJICAgIG91dF9mbHVzaCgpOworCQkJfQorCisJCQl0YV9sZW4gKz0gbGVuOworCisJCQkvKgorCQkJICogV3JpdGUgdGhlIGNoYXJhY3RlcnMgdG8gdGhlIGNoaWxkLCB1bmxlc3MgRU9GIGhhcworCQkJICogYmVlbiB0eXBlZCBmb3IgcGlwZXMuICBXcml0ZSBvbmUgY2hhcmFjdGVyIGF0IGEKKwkJCSAqIHRpbWUsIHRvIGF2b2lkIGxvb3NpbmcgdG9vIG11Y2ggdHlwZWFoZWFkLgorCQkJICovCisJCQlpZiAodG9zaGVsbF9mZCA+PSAwKQorCQkJeworCQkJICAgIGxlbiA9IHdyaXRlKHRvc2hlbGxfZmQsIChjaGFyICopdGFfYnVmLCAoc2l6ZV90KTEpOworCQkJICAgIGlmIChsZW4gPiAwKQorCQkJICAgIHsKKwkJCQl0YV9sZW4gLT0gbGVuOworCQkJCW1jaF9tZW1tb3ZlKHRhX2J1ZiwgdGFfYnVmICsgbGVuLCB0YV9sZW4pOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKworCQkgICAgLyoKKwkJICAgICAqIENoZWNrIGlmIHRoZSBjaGlsZCBoYXMgYW55IGNoYXJhY3RlcnMgdG8gYmUgcHJpbnRlZC4KKwkJICAgICAqIFJlYWQgdGhlbSBhbmQgd3JpdGUgdGhlbSB0byBvdXIgd2luZG93LglSZXBlYXQgdGhpcyBhcworCQkgICAgICogbG9uZyBhcyB0aGVyZSBpcyBzb21ldGhpbmcgdG8gZG8sIGF2b2lkIHRoZSAxMG1zIHdhaXQKKwkJICAgICAqIGZvciBtY2hfaW5jaGFyKCksIG9yIHNlbmRpbmcgdHlwZWFoZWFkIGNoYXJhY3RlcnMgdG8KKwkJICAgICAqIHRoZSBleHRlcm5hbCBwcm9jZXNzLgorCQkgICAgICogVE9ETzogVGhpcyBzaG91bGQgaGFuZGxlIGVzY2FwZSBzZXF1ZW5jZXMsIGNvbXBhdGlibGUKKwkJICAgICAqIHRvIHNvbWUgdGVybWluYWwgKHZ0NTI/KS4KKwkJICAgICAqLworCQkgICAgd2hpbGUgKFJlYWxXYWl0Rm9yQ2hhcihmcm9tc2hlbGxfZmQsIDEwTCwgTlVMTCkpCisJCSAgICB7CisJCQlsZW4gPSByZWFkKGZyb21zaGVsbF9mZCwgKGNoYXIgKilidWZmZXIKKyMgIGlmZGVmIEZFQVRfTUJZVEUKKwkJCQkrIGJ1ZmZlcl9vZmYsIChzaXplX3QpKEJVRkxFTiAtIGJ1ZmZlcl9vZmYpCisjICBlbHNlCisJCQkJLCAoc2l6ZV90KUJVRkxFTgorIyAgZW5kaWYKKwkJCQkpOworCQkJaWYgKGxlbiA8PSAwKQkJICAgIC8qIGVuZCBvZiBmaWxlIG9yIGVycm9yICovCisJCQkgICAgZ290byBmaW5pc2hlZDsKKyMgIGlmZGVmIEZFQVRfTUJZVEUKKwkJCWxlbiArPSBidWZmZXJfb2ZmOworCQkJYnVmZmVyW2xlbl0gPSBOVUw7CisJCQlpZiAoaGFzX21ieXRlKQorCQkJeworCQkJICAgIGludAkJbDsKKworCQkJICAgIC8qIENoZWNrIGlmIHRoZSBsYXN0IGNoYXJhY3RlciBpbiBidWZmZXJbXSBpcworCQkJICAgICAqIGluY29tcGxldGUsIGtlZXAgdGhlc2UgYnl0ZXMgZm9yIHRoZSBuZXh0CisJCQkgICAgICogcm91bmQuICovCisJCQkgICAgZm9yIChwID0gYnVmZmVyOyBwIDwgYnVmZmVyICsgbGVuOyBwICs9IGwpCisJCQkgICAgeworCQkJCWlmIChlbmNfdXRmOCkJLyogZXhjbHVkZSBjb21wb3NpbmcgY2hhcnMgKi8KKwkJCQkgICAgbCA9IHV0Zl9wdHIybGVuX2NoZWNrKHApOworCQkJCWVsc2UKKwkJCQkgICAgbCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7CisJCQkJaWYgKGwgPT0gMCkKKwkJCQkgICAgbCA9IDE7ICAvKiBOVUwgYnl0ZT8gKi8KKwkJCQllbHNlIGlmIChNQl9CWVRFMkxFTigqcCkgIT0gbCkKKwkJCQkgICAgYnJlYWs7CisJCQkgICAgfQorCQkJICAgIGlmIChwID09IGJ1ZmZlcikJLyogbm8gY29tcGxldGUgY2hhcmFjdGVyICovCisJCQkgICAgeworCQkJCS8qIGF2b2lkIGdldHRpbmcgc3R1Y2sgYXQgYW4gaWxsZWdhbCBieXRlICovCisJCQkJaWYgKGxlbiA+PSAxMikKKwkJCQkgICAgKytwOworCQkJCWVsc2UKKwkJCQl7CisJCQkJICAgIGJ1ZmZlcl9vZmYgPSBsZW47CisJCQkJICAgIGNvbnRpbnVlOworCQkJCX0KKwkJCSAgICB9CisJCQkgICAgYyA9ICpwOworCQkJICAgICpwID0gTlVMOworCQkJICAgIG1zZ19wdXRzKGJ1ZmZlcik7CisJCQkgICAgaWYgKHAgPCBidWZmZXIgKyBsZW4pCisJCQkgICAgeworCQkJCSpwID0gYzsKKwkJCQlidWZmZXJfb2ZmID0gKGJ1ZmZlciArIGxlbikgLSBwOworCQkJCW1jaF9tZW1tb3ZlKGJ1ZmZlciwgcCwgYnVmZmVyX29mZik7CisJCQkJY29udGludWU7CisJCQkgICAgfQorCQkJICAgIGJ1ZmZlcl9vZmYgPSAwOworCQkJfQorCQkJZWxzZQorIyAgZW5kaWYgLyogRkVBVF9NQllURSAqLworCQkJeworCQkJICAgIGJ1ZmZlcltsZW5dID0gTlVMOworCQkJICAgIG1zZ19wdXRzKGJ1ZmZlcik7CisJCQl9CisKKwkJCXdpbmRnb3RvKG1zZ19yb3csIG1zZ19jb2wpOworCQkJY3Vyc29yX29uKCk7CisJCQlvdXRfZmx1c2goKTsKKwkJCWlmIChnb3RfaW50KQorCQkJICAgIGJyZWFrOworCQkgICAgfQorCisJCSAgICAvKgorCQkgICAgICogQ2hlY2sgaWYgdGhlIGNoaWxkIHN0aWxsIGV4aXN0cywgYmVmb3JlIGNoZWNraW5nIGZvcgorCQkgICAgICogdHlwZWQgY2hhcmFjdGVycyAob3RoZXJ3aXNlIHdlIHdvdWxkIGxvb3NlIHR5cGVhaGVhZCkuCisJCSAgICAgKi8KKyMgIGlmZGVmIF9fTmVYVF9fCisJCSAgICB3YWl0X3BpZCA9IHdhaXQ0KHBpZCwgJnN0YXR1cywgV05PSEFORywgKHN0cnVjdCBydXNhZ2UgKikgMCk7CisjICBlbHNlCisJCSAgICB3YWl0X3BpZCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCBXTk9IQU5HKTsKKyMgIGVuZGlmCisJCSAgICBpZiAoKHdhaXRfcGlkID09IChwaWRfdCktMSAmJiBlcnJubyA9PSBFQ0hJTEQpCisJCQkgICAgfHwgKHdhaXRfcGlkID09IHBpZCAmJiBXSUZFWElURUQoc3RhdHVzKSkpCisJCSAgICB7CisJCQl3YWl0X3BpZCA9IHBpZDsKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAgd2FpdF9waWQgPSAwOworCQl9CitmaW5pc2hlZDoKKwkJcF9tb3JlID0gcF9tb3JlX3NhdmU7CisKKyMgIGlmbmRlZiBNQUNPU19YX1VOSVggLyogVE9ETzogSXMgaXQgbmVlZGVkIGZvciBNQUNPU19YID8gKi8KKwkJLyoKKwkJICogR2l2ZSBhbGwgdHlwZWFoZWFkIHRoYXQgd2Fzbid0IHVzZWQgYmFjayB0byB1aV9pbmNoYXIoKS4KKwkJICovCisJCWlmICh0YV9sZW4pCisJCSAgICB1aV9pbmNoYXJfdW5kbyh0YV9idWYsIHRhX2xlbik7CisjICBlbmRpZgorCQlTdGF0ZSA9IG9sZF9TdGF0ZTsKKwkJaWYgKHRvc2hlbGxfZmQgPj0gMCkKKwkJICAgIGNsb3NlKHRvc2hlbGxfZmQpOworCQljbG9zZShmcm9tc2hlbGxfZmQpOworCSAgICB9CisjIGVuZGlmIC8qIEZFQVRfR1VJICovCisKKwkgICAgLyoKKwkgICAgICogV2FpdCB1bnRpbCBvdXIgY2hpbGQgaGFzIGV4aXRlZC4KKwkgICAgICogSWdub3JlIHdhaXQoKSByZXR1cm5pbmcgcGlkcyBvZiBvdGhlciBjaGlsZHJlbiBhbmQgcmV0dXJuaW5nCisJICAgICAqIGJlY2F1c2Ugb2Ygc29tZSBzaWduYWwgbGlrZSBTSUdXSU5DSC4KKwkgICAgICogRG9uJ3Qgd2FpdCBpZiB3YWl0X3BpZCB3YXMgYWxyZWFkeSBzZXQgYWJvdmUsIGluZGljYXRpbmcgdGhlCisJICAgICAqIGNoaWxkIGFscmVhZHkgZXhpdGVkLgorCSAgICAgKi8KKwkgICAgd2hpbGUgKHdhaXRfcGlkICE9IHBpZCkKKwkgICAgeworI2lmZGVmIF9USFJFQURfU0FGRQorCQkvKiBVZ2x5IGhhY2s6IHdoZW4gY29tcGlsZWQgd2l0aCBQeXRob24gdGhyZWFkcyBhcmUgcHJvYmFibHkKKwkJICogdXNlZCwgaW4gd2hpY2ggY2FzZSB3YWl0KCkgc29tZXRpbWVzIGhhbmdzIGZvciBubyBvYnZpb3VzCisJCSAqIHJlYXNvbi4gIFVzZSB3YWl0cGlkKCkgaW5zdGVhZCBhbmQgbG9vcCAobGlrZSB0aGUgR1VJKS4gKi8KKyMgIGlmZGVmIF9fTmVYVF9fCisJCXdhaXRfcGlkID0gd2FpdDQocGlkLCAmc3RhdHVzLCBXTk9IQU5HLCAoc3RydWN0IHJ1c2FnZSAqKTApOworIyAgZWxzZQorCQl3YWl0X3BpZCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCBXTk9IQU5HKTsKKyMgIGVuZGlmCisJCWlmICh3YWl0X3BpZCA9PSAwKQorCQl7CisJCSAgICAvKiBXYWl0IGZvciAxLzEwMCBzZWMgYmVmb3JlIHRyeWluZyBhZ2Fpbi4gKi8KKwkJICAgIG1jaF9kZWxheSgxMEwsIFRSVUUpOworCQkgICAgY29udGludWU7CisJCX0KKyNlbHNlCisJCXdhaXRfcGlkID0gd2FpdCgmc3RhdHVzKTsKKyNlbmRpZgorCQlpZiAod2FpdF9waWQgPD0gMAorIyBpZmRlZiBFQ0hJTEQKKwkJCSYmIGVycm5vID09IEVDSElMRAorIyBlbmRpZgorCQkgICApCisJCSAgICBicmVhazsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIFNldCB0byByYXcgbW9kZSByaWdodCBub3csIG90aGVyd2lzZSBhIENUUkwtQyBhZnRlcgorCSAgICAgKiBjYXRjaF9zaWduYWxzKCkgd2lsbCBraWxsIFZpbS4KKwkgICAgICovCisJICAgIGlmICh0bW9kZSA9PSBUTU9ERV9SQVcpCisJCXNldHRtb2RlKFRNT0RFX1JBVyk7CisJICAgIGRpZF9zZXR0bW9kZSA9IFRSVUU7CisJICAgIHNldF9zaWduYWxzKCk7CisKKwkgICAgaWYgKFdJRkVYSVRFRChzdGF0dXMpKQorCSAgICB7CisJCXJldHZhbCA9IFdFWElUU1RBVFVTKHN0YXR1cyk7CisJCWlmIChyZXR2YWwgJiYgIWVtc2dfc2lsZW50KQorCQl7CisJCSAgICBpZiAocmV0dmFsID09IEVYRUNfRkFJTEVEKQorCQkgICAgeworCQkJTVNHX1BVVFMoXygiXG5DYW5ub3QgZXhlY3V0ZSBzaGVsbCAiKSk7CisJCQltc2dfb3V0dHJhbnMocF9zaCk7CisJCQltc2dfcHV0Y2hhcignXG4nKTsKKwkJICAgIH0KKwkJICAgIGVsc2UgaWYgKCEob3B0aW9ucyAmIFNIRUxMX1NJTEVOVCkpCisJCSAgICB7CisJCQlNU0dfUFVUUyhfKCJcbnNoZWxsIHJldHVybmVkICIpKTsKKwkJCW1zZ19vdXRudW0oKGxvbmcpcmV0dmFsKTsKKwkJCW1zZ19wdXRjaGFyKCdcbicpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgZWxzZQorCQlNU0dfUFVUUyhfKCJcbkNvbW1hbmQgdGVybWluYXRlZFxuIikpOworCX0KKyAgICB9CisgICAgdmltX2ZyZWUoYXJndik7CisKK2Vycm9yOgorICAgIGlmICghZGlkX3NldHRtb2RlKQorCWlmICh0bW9kZSA9PSBUTU9ERV9SQVcpCisJICAgIHNldHRtb2RlKFRNT0RFX1JBVyk7CS8qIHNldCB0byByYXcgbW9kZSAqLworIyBpZmRlZiBGRUFUX1RJVExFCisgICAgcmVzZXR0aXRsZSgpOworIyBlbmRpZgorICAgIHZpbV9mcmVlKG5ld2NtZCk7CisKKyAgICByZXR1cm4gcmV0dmFsOworCisjZW5kaWYgLyogVVNFX1NZU1RFTSAqLworfQorCisvKgorICogQ2hlY2sgZm9yIENUUkwtQyB0eXBlZCBieSByZWFkaW5nIGFsbCBhdmFpbGFibGUgY2hhcmFjdGVycy4KKyAqIEluIGNvb2tlZCBtb2RlIHdlIHNob3VsZCBnZXQgU0lHSU5ULCBubyBuZWVkIHRvIGNoZWNrLgorICovCisgICAgdm9pZAorbWNoX2JyZWFrY2hlY2soKQoreworICAgIGlmIChjdXJyX3Rtb2RlID09IFRNT0RFX1JBVyAmJiBSZWFsV2FpdEZvckNoYXIocmVhZF9jbWRfZmQsIDBMLCBOVUxMKSkKKwlmaWxsX2lucHV0X2J1ZihGQUxTRSk7Cit9CisKKy8qCisgKiBXYWl0ICJtc2VjIiBtc2VjIHVudGlsIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBrZXlib2FyZCBvciBmcm9tCisgKiBpbmJ1ZltdLiBtc2VjID09IC0xIHdpbGwgYmxvY2sgZm9yZXZlci4KKyAqIFdoZW4gYSBHVUkgaXMgYmVpbmcgdXNlZCwgdGhpcyB3aWxsIG5ldmVyIGdldCBjYWxsZWQgLS0gd2ViYgorICovCisgICAgc3RhdGljIGludAorV2FpdEZvckNoYXIobXNlYykKKyAgICBsb25nCW1zZWM7Cit7CisjaWZkZWYgRkVBVF9NT1VTRV9HUE0KKyAgICBpbnQJCWdwbV9wcm9jZXNzX3dhbnRlZDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfWENMSVBCT0FSRAorICAgIGludAkJcmVzdDsKKyNlbmRpZgorICAgIGludAkJYXZhaWw7CisKKyAgICBpZiAoaW5wdXRfYXZhaWxhYmxlKCkpCSAgICAvKiBzb21ldGhpbmcgaW4gaW5idWZbXSAqLworCXJldHVybiAxOworCisjaWYgZGVmaW5lZChGRUFUX01PVVNFX0RFQykKKyAgICAvKiBNYXkgbmVlZCB0byBxdWVyeSB0aGUgbW91c2UgcG9zaXRpb24uICovCisgICAgaWYgKFdhbnRRdWVyeU1vdXNlKQorICAgIHsKKwlXYW50UXVlcnlNb3VzZSA9IDA7CisJbWNoX3dyaXRlKChjaGFyX3UgKilJRl9FQigiXDAzM1sxJ3wiLCBFU0NfU1RSICJbMSd8IiksIDUpOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBGb3IgRkVBVF9NT1VTRV9HUE0gYW5kIEZFQVRfWENMSVBCT0FSRCB3ZSBsb29wIGhlcmUgdG8gcHJvY2VzcyBtb3VzZQorICAgICAqIGV2ZW50cy4gIFRoaXMgaXMgYSBiaXQgY29tcGxpY2F0ZWQsIGJlY2F1c2UgdGhleSBtaWdodCBib3RoIGJlIGRlZmluZWQuCisgICAgICovCisjaWYgZGVmaW5lZChGRUFUX01PVVNFX0dQTSkgfHwgZGVmaW5lZChGRUFUX1hDTElQQk9BUkQpCisjIGlmZGVmIEZFQVRfWENMSVBCT0FSRAorICAgIHJlc3QgPSAwOworICAgIGlmIChkb194dGVybV90cmFjZSgpKQorCXJlc3QgPSBtc2VjOworIyBlbmRpZgorICAgIGRvCisgICAgeworIyBpZmRlZiBGRUFUX1hDTElQQk9BUkQKKwlpZiAocmVzdCAhPSAwKQorCXsKKwkgICAgbXNlYyA9IFhUX1RSQUNFX0RFTEFZOworCSAgICBpZiAocmVzdCA+PSAwICYmIHJlc3QgPCBYVF9UUkFDRV9ERUxBWSkKKwkJbXNlYyA9IHJlc3Q7CisJICAgIGlmIChyZXN0ID49IDApCisJCXJlc3QgLT0gbXNlYzsKKwl9CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTU9VU0VfR1BNCisJZ3BtX3Byb2Nlc3Nfd2FudGVkID0gMDsKKwlhdmFpbCA9IFJlYWxXYWl0Rm9yQ2hhcihyZWFkX2NtZF9mZCwgbXNlYywgJmdwbV9wcm9jZXNzX3dhbnRlZCk7CisjIGVsc2UKKwlhdmFpbCA9IFJlYWxXYWl0Rm9yQ2hhcihyZWFkX2NtZF9mZCwgbXNlYywgTlVMTCk7CisjIGVuZGlmCisJaWYgKCFhdmFpbCkKKwl7CisJICAgIGlmIChpbnB1dF9hdmFpbGFibGUoKSkKKwkJcmV0dXJuIDE7CisjIGlmZGVmIEZFQVRfWENMSVBCT0FSRAorCSAgICBpZiAocmVzdCA9PSAwIHx8ICFkb194dGVybV90cmFjZSgpKQorIyBlbmRpZgorCQlicmVhazsKKwl9CisgICAgfQorICAgIHdoaWxlIChGQUxTRQorIyBpZmRlZiBGRUFUX01PVVNFX0dQTQorCSAgIHx8IChncG1fcHJvY2Vzc193YW50ZWQgJiYgbWNoX2dwbV9wcm9jZXNzKCkgPT0gMCkKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9YQ0xJUEJPQVJECisJICAgfHwgKCFhdmFpbCAmJiByZXN0ICE9IDApCisjIGVuZGlmCisJICApOworCisjZWxzZQorICAgIGF2YWlsID0gUmVhbFdhaXRGb3JDaGFyKHJlYWRfY21kX2ZkLCBtc2VjLCBOVUxMKTsKKyNlbmRpZgorICAgIHJldHVybiBhdmFpbDsKK30KKworLyoKKyAqIFdhaXQgIm1zZWMiIG1zZWMgdW50aWwgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlIGZyb20gZmlsZSBkZXNjcmlwdG9yICJmZCIuCisgKiBUaW1lID09IC0xIHdpbGwgYmxvY2sgZm9yZXZlci4KKyAqIFdoZW4gYSBHVUkgaXMgYmVpbmcgdXNlZCwgdGhpcyB3aWxsIG5vdCBiZSB1c2VkIGZvciBpbnB1dCAtLSB3ZWJiCisgKiBSZXR1cm5zIGFsc28sIHdoZW4gYSByZXF1ZXN0IGZyb20gU25pZmYgaXMgd2FpdGluZyAtLSB0b25pLgorICogT3Igd2hlbiBhIExpbnV4IEdQTSBtb3VzZSBldmVudCBpcyB3YWl0aW5nLgorICovCisvKiBBUkdTVVNFRCAqLworI2lmIGRlZmluZWQoX19CRU9TX18pCisgICAgaW50CisjZWxzZQorICAgIHN0YXRpYyAgaW50CisjZW5kaWYKK1JlYWxXYWl0Rm9yQ2hhcihmZCwgbXNlYywgY2hlY2tfZm9yX2dwbSkKKyAgICBpbnQJCWZkOworICAgIGxvbmcJbXNlYzsKKyAgICBpbnQJCSpjaGVja19mb3JfZ3BtOworeworICAgIGludAkJcmV0OworI2lmIGRlZmluZWQoRkVBVF9YQ0xJUEJPQVJEKSB8fCBkZWZpbmVkKFVTRV9YU01QKQorICAgIHN0YXRpYyBpbnQJYnVzeSA9IEZBTFNFOworCisgICAgLyogTWF5IHJldHJ5IGdldHRpbmcgY2hhcmFjdGVycyBhZnRlciBhbiBldmVudCB3YXMgaGFuZGxlZC4gKi8KKyMgZGVmaW5lIE1BWV9MT09QCisKKyMgaWYgZGVmaW5lZChIQVZFX0dFVFRJTUVPRkRBWSkgJiYgZGVmaW5lZChIQVZFX1NZU19USU1FX0gpCisgICAgLyogUmVtZW1iZXIgYXQgd2hhdCB0aW1lIHdlIHN0YXJ0ZWQsIHNvIHRoYXQgd2Uga25vdyBob3cgbXVjaCBsb25nZXIgd2UKKyAgICAgKiBzaG91bGQgd2FpdCBhZnRlciBiZWluZyBpbnRlcnJ1cHRlZC4gKi8KKyMgIGRlZmluZSBVU0VfU1RBUlRfVFYKKyAgICBzdHJ1Y3QgdGltZXZhbCAgc3RhcnRfdHY7CisKKyAgICBpZiAobXNlYyA+IDAgJiYgKAorIyAgaWZkZWYgRkVBVF9YQ0xJUEJPQVJECisJICAgIHh0ZXJtX1NoZWxsICE9IChXaWRnZXQpMAorIyAgIGlmZGVmIFVTRV9YU01QCisJICAgIHx8CisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZmRlZiBVU0VfWFNNUAorCSAgICB4c21wX2ljZWZkICE9IC0xCisjICBlbmRpZgorCSAgICApKQorCWdldHRpbWVvZmRheSgmc3RhcnRfdHYsIE5VTEwpOworIyBlbmRpZgorCisgICAgLyogSGFuZGxlIGJlaW5nIGNhbGxlZCByZWN1cnNpdmVseS4gIFRoaXMgbWF5IGhhcHBlbiBmb3IgdGhlIHNlc3Npb24KKyAgICAgKiBtYW5hZ2VyIHN0dWZmLCBpdCBtYXkgc2F2ZSB0aGUgZmlsZSwgd2hpY2ggZG9lcyBhIGJyZWFrY2hlY2suICovCisgICAgaWYgKGJ1c3kpCisJcmV0dXJuIDA7CisjZW5kaWYKKworI2lmZGVmIE1BWV9MT09QCisgICAgd2hpbGUgKDEpCisjZW5kaWYKKyAgICB7CisjaWZkZWYgTUFZX0xPT1AKKwlpbnQJCWZpbmlzaGVkID0gVFJVRTsgLyogZGVmYXVsdCBpcyB0byAnbG9vcCcganVzdCBvbmNlICovCisjZW5kaWYKKyNpZm5kZWYgSEFWRV9TRUxFQ1QKKwlzdHJ1Y3QgcG9sbGZkICAgZmRzWzVdOworCWludAkJbmZkOworIyBpZmRlZiBGRUFUX1hDTElQQk9BUkQKKwlpbnQJCXh0ZXJtX2lkeCA9IC0xOworIyBlbmRpZgorIyBpZmRlZiBGRUFUX01PVVNFX0dQTQorCWludAkJZ3BtX2lkeCA9IC0xOworIyBlbmRpZgorIyBpZmRlZiBVU0VfWFNNUAorCWludAkJeHNtcF9pZHggPSAtMTsKKyMgZW5kaWYKKworCWZkc1swXS5mZCA9IGZkOworCWZkc1swXS5ldmVudHMgPSBQT0xMSU47CisJbmZkID0gMTsKKworIyBpZmRlZiBGRUFUX1NOSUZGCisjICBkZWZpbmUgU05JRkZfSURYIDEKKwlpZiAod2FudF9zbmlmZl9yZXF1ZXN0KQorCXsKKwkgICAgZmRzW1NOSUZGX0lEWF0uZmQgPSBmZF9mcm9tX3NuaWZmOworCSAgICBmZHNbU05JRkZfSURYXS5ldmVudHMgPSBQT0xMSU47CisJICAgIG5mZCsrOworCX0KKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9YQ0xJUEJPQVJECisJaWYgKHh0ZXJtX1NoZWxsICE9IChXaWRnZXQpMCkKKwl7CisJICAgIHh0ZXJtX2lkeCA9IG5mZDsKKwkgICAgZmRzW25mZF0uZmQgPSBDb25uZWN0aW9uTnVtYmVyKHh0ZXJtX2RweSk7CisJICAgIGZkc1tuZmRdLmV2ZW50cyA9IFBPTExJTjsKKwkgICAgbmZkKys7CisJfQorIyBlbmRpZgorIyBpZmRlZiBGRUFUX01PVVNFX0dQTQorCWlmIChjaGVja19mb3JfZ3BtICE9IE5VTEwgJiYgZ3BtX2ZsYWcgJiYgZ3BtX2ZkID49IDApCisJeworCSAgICBncG1faWR4ID0gbmZkOworCSAgICBmZHNbbmZkXS5mZCA9IGdwbV9mZDsKKwkgICAgZmRzW25mZF0uZXZlbnRzID0gUE9MTElOOworCSAgICBuZmQrKzsKKwl9CisjIGVuZGlmCisjIGlmZGVmIFVTRV9YU01QCisJaWYgKHhzbXBfaWNlZmQgIT0gLTEpCisJeworCSAgICB4c21wX2lkeCA9IG5mZDsKKwkgICAgZmRzW25mZF0uZmQgPSB4c21wX2ljZWZkOworCSAgICBmZHNbbmZkXS5ldmVudHMgPSBQT0xMSU47CisJICAgIG5mZCsrOworCX0KKyMgZW5kaWYKKworCXJldCA9IHBvbGwoZmRzLCBuZmQsIChpbnQpbXNlYyk7CisKKyMgaWZkZWYgRkVBVF9TTklGRgorCWlmIChyZXQgPCAwKQorCSAgICBzbmlmZl9kaXNjb25uZWN0KDEpOworCWVsc2UgaWYgKHdhbnRfc25pZmZfcmVxdWVzdCkKKwl7CisJICAgIGlmIChmZHNbU05JRkZfSURYXS5yZXZlbnRzICYgUE9MTEhVUCkKKwkJc25pZmZfZGlzY29ubmVjdCgxKTsKKwkgICAgaWYgKGZkc1tTTklGRl9JRFhdLnJldmVudHMgJiBQT0xMSU4pCisJCXNuaWZmX3JlcXVlc3Rfd2FpdGluZyA9IDE7CisJfQorIyBlbmRpZgorIyBpZmRlZiBGRUFUX1hDTElQQk9BUkQKKwlpZiAoeHRlcm1fU2hlbGwgIT0gKFdpZGdldCkwICYmIChmZHNbeHRlcm1faWR4XS5yZXZlbnRzICYgUE9MTElOKSkKKwl7CisJICAgIHh0ZXJtX3VwZGF0ZSgpOyAgICAgIC8qIE1heWJlIHdlIHNob3VsZCBoYW5kIG91dCBjbGlwYm9hcmQgKi8KKwkgICAgaWYgKC0tcmV0ID09IDAgJiYgIWlucHV0X2F2YWlsYWJsZSgpKQorCQkvKiBUcnkgYWdhaW4gKi8KKwkJZmluaXNoZWQgPSBGQUxTRTsKKwl9CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTU9VU0VfR1BNCisJaWYgKGdwbV9pZHggPj0gMCAmJiAoZmRzW2dwbV9pZHhdLnJldmVudHMgJiBQT0xMSU4pKQorCXsKKwkgICAgKmNoZWNrX2Zvcl9ncG0gPSAxOworCX0KKyMgZW5kaWYKKyMgaWZkZWYgVVNFX1hTTVAKKwlpZiAoeHNtcF9pZHggPj0gMCAmJiAoZmRzW3hzbXBfaWR4XS5yZXZlbnRzICYgKFBPTExJTiB8IFBPTExIVVApKSkKKwl7CisJICAgIGlmIChmZHNbeHNtcF9pZHhdLnJldmVudHMgJiBQT0xMSU4pCisJICAgIHsKKwkJYnVzeSA9IFRSVUU7CisJCXhzbXBfaGFuZGxlX3JlcXVlc3RzKCk7CisJCWJ1c3kgPSBGQUxTRTsKKwkgICAgfQorCSAgICBlbHNlIGlmIChmZHNbeHNtcF9pZHhdLnJldmVudHMgJiBQT0xMSFVQKQorCSAgICB7CisJCWlmIChwX3ZlcmJvc2UgPiAwKQorCQkgICAgTVNHKF8oIlhTTVAgbG9zdCBJQ0UgY29ubmVjdGlvbiIpKTsKKwkJeHNtcF9jbG9zZSgpOworCSAgICB9CisJICAgIGlmICgtLXJldCA9PSAwKQorCQkvKiBUcnkgYWdhaW4gKi8KKwkJZmluaXNoZWQgPSBGQUxTRTsKKwl9CisjIGVuZGlmCisKKworI2Vsc2UgLyogSEFWRV9TRUxFQ1QgKi8KKworCXN0cnVjdCB0aW1ldmFsICB0djsKKwlmZF9zZXQJCXJmZHMsIGVmZHM7CisJaW50CQltYXhmZDsKKworIyBpZmRlZiBfX0VNWF9fCisJLyogZG9uJ3QgY2hlY2sgZm9yIGluY29taW5nIGNoYXJzIGlmIG5vdCBpbiByYXcgbW9kZSwgYmVjYXVzZSBzZWxlY3QoKQorCSAqIGFsd2F5cyByZXR1cm5zIFRSVUUgdGhlbiAoaW4gc29tZSB2ZXJzaW9uIG9mIGVteC5kbGwpICovCisJaWYgKGN1cnJfdG1vZGUgIT0gVE1PREVfUkFXKQorCSAgICByZXR1cm4gMDsKKyMgZW5kaWYKKworCWlmIChtc2VjID49IDApCisJeworCSAgICB0di50dl9zZWMgPSBtc2VjIC8gMTAwMDsKKwkgICAgdHYudHZfdXNlYyA9IChtc2VjICUgMTAwMCkgKiAoMTAwMDAwMC8xMDAwKTsKKwl9CisKKwkvKgorCSAqIFNlbGVjdCBvbiByZWFkeSBmb3IgcmVhZGluZyBhbmQgZXhjZXB0aW9uYWwgY29uZGl0aW9uIChlbmQgb2YgZmlsZSkuCisJICovCisJRkRfWkVSTygmcmZkcyk7IC8qIGNhbGxzIGJ6ZXJvKCkgb24gYSBzdW4gKi8KKwlGRF9aRVJPKCZlZmRzKTsKKwlGRF9TRVQoZmQsICZyZmRzKTsKKyMgaWYgIWRlZmluZWQoX19RTlhfXykgJiYgIWRlZmluZWQoX19DWUdXSU4zMl9fKQorCS8qIEZvciBRTlggc2VsZWN0KCkgYWx3YXlzIHJldHVybnMgMSBpZiB0aGlzIGlzIHNldC4gIFdoeT8gKi8KKwlGRF9TRVQoZmQsICZlZmRzKTsKKyMgZW5kaWYKKwltYXhmZCA9IGZkOworCisjIGlmZGVmIEZFQVRfU05JRkYKKwlpZiAod2FudF9zbmlmZl9yZXF1ZXN0KQorCXsKKwkgICAgRkRfU0VUKGZkX2Zyb21fc25pZmYsICZyZmRzKTsKKwkgICAgRkRfU0VUKGZkX2Zyb21fc25pZmYsICZlZmRzKTsKKwkgICAgaWYgKG1heGZkIDwgZmRfZnJvbV9zbmlmZikKKwkJbWF4ZmQgPSBmZF9mcm9tX3NuaWZmOworCX0KKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9YQ0xJUEJPQVJECisJaWYgKHh0ZXJtX1NoZWxsICE9IChXaWRnZXQpMCkKKwl7CisJICAgIEZEX1NFVChDb25uZWN0aW9uTnVtYmVyKHh0ZXJtX2RweSksICZyZmRzKTsKKwkgICAgaWYgKG1heGZkIDwgQ29ubmVjdGlvbk51bWJlcih4dGVybV9kcHkpKQorCQltYXhmZCA9IENvbm5lY3Rpb25OdW1iZXIoeHRlcm1fZHB5KTsKKwl9CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTU9VU0VfR1BNCisJaWYgKGNoZWNrX2Zvcl9ncG0gIT0gTlVMTCAmJiBncG1fZmxhZyAmJiBncG1fZmQgPj0gMCkKKwl7CisJICAgIEZEX1NFVChncG1fZmQsICZyZmRzKTsKKwkgICAgRkRfU0VUKGdwbV9mZCwgJmVmZHMpOworCSAgICBpZiAobWF4ZmQgPCBncG1fZmQpCisJCW1heGZkID0gZ3BtX2ZkOworCX0KKyMgZW5kaWYKKyMgaWZkZWYgVVNFX1hTTVAKKwlpZiAoeHNtcF9pY2VmZCAhPSAtMSkKKwl7CisJICAgIEZEX1NFVCh4c21wX2ljZWZkLCAmcmZkcyk7CisJICAgIEZEX1NFVCh4c21wX2ljZWZkLCAmZWZkcyk7CisJICAgIGlmIChtYXhmZCA8IHhzbXBfaWNlZmQpCisJCW1heGZkID0geHNtcF9pY2VmZDsKKwl9CisjIGVuZGlmCisKKyMgaWZkZWYgT0xEX1ZNUworCS8qIE9sZCBWTVMgYXMgdjYuMiBhbmQgb2xkZXIgaGF2ZSBicm9rZW4gc2VsZWN0KCkuIEl0IHdhaXRzIG1vcmUgdGhhbgorCSAqIHJlcXVpcmVkLiBTaG91bGQgbm90IGJlIHVzZWQgKi8KKwlyZXQgPSAwOworIyBlbHNlCisJcmV0ID0gc2VsZWN0KG1heGZkICsgMSwgJnJmZHMsIE5VTEwsICZlZmRzLCAobXNlYyA+PSAwKSA/ICZ0diA6IE5VTEwpOworIyBlbmRpZgorCisjIGlmZGVmIEZFQVRfU05JRkYKKwlpZiAocmV0IDwgMCApCisJICAgIHNuaWZmX2Rpc2Nvbm5lY3QoMSk7CisJZWxzZSBpZiAocmV0ID4gMCAmJiB3YW50X3NuaWZmX3JlcXVlc3QpCisJeworCSAgICBpZiAoRkRfSVNTRVQoZmRfZnJvbV9zbmlmZiwgJmVmZHMpKQorCQlzbmlmZl9kaXNjb25uZWN0KDEpOworCSAgICBpZiAoRkRfSVNTRVQoZmRfZnJvbV9zbmlmZiwgJnJmZHMpKQorCQlzbmlmZl9yZXF1ZXN0X3dhaXRpbmcgPSAxOworCX0KKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9YQ0xJUEJPQVJECisJaWYgKHJldCA+IDAgJiYgeHRlcm1fU2hlbGwgIT0gKFdpZGdldCkwCisJCSYmIEZEX0lTU0VUKENvbm5lY3Rpb25OdW1iZXIoeHRlcm1fZHB5KSwgJnJmZHMpKQorCXsKKwkgICAgeHRlcm1fdXBkYXRlKCk7CSAgICAgIC8qIE1heWJlIHdlIHNob3VsZCBoYW5kIG91dCBjbGlwYm9hcmQgKi8KKwkgICAgLyogY29udGludWUgbG9vcGluZyB3aGVuIHdlIG9ubHkgZ290IHRoZSBYIGV2ZW50IGFuZCB0aGUgaW5wdXQKKwkgICAgICogYnVmZmVyIGlzIGVtcHR5ICovCisJICAgIGlmICgtLXJldCA9PSAwICYmICFpbnB1dF9hdmFpbGFibGUoKSkKKwkgICAgeworCQkvKiBUcnkgYWdhaW4gKi8KKwkJZmluaXNoZWQgPSBGQUxTRTsKKwkgICAgfQorCX0KKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9NT1VTRV9HUE0KKwlpZiAocmV0ID4gMCAmJiBncG1fZmxhZyAmJiBjaGVja19mb3JfZ3BtICE9IE5VTEwgJiYgZ3BtX2ZkID49IDApCisJeworCSAgICBpZiAoRkRfSVNTRVQoZ3BtX2ZkLCAmZWZkcykpCisJCWdwbV9jbG9zZSgpOworCSAgICBlbHNlIGlmIChGRF9JU1NFVChncG1fZmQsICZyZmRzKSkKKwkJKmNoZWNrX2Zvcl9ncG0gPSAxOworCX0KKyMgZW5kaWYKKyMgaWZkZWYgVVNFX1hTTVAKKwlpZiAocmV0ID4gMCAmJiB4c21wX2ljZWZkICE9IC0xKQorCXsKKwkgICAgaWYgKEZEX0lTU0VUKHhzbXBfaWNlZmQsICZlZmRzKSkKKwkgICAgeworCQlpZiAocF92ZXJib3NlID4gMCkKKwkJICAgIE1TRyhfKCJYU01QIGxvc3QgSUNFIGNvbm5lY3Rpb24iKSk7CisJCXhzbXBfY2xvc2UoKTsKKwkJaWYgKC0tcmV0ID09IDApCisJCSAgICBmaW5pc2hlZCA9IEZBTFNFOyAgIC8qIGtlZXAgZ29pbmcgaWYgZXZlbnQgd2FzIG9ubHkgb25lICovCisJICAgIH0KKwkgICAgZWxzZSBpZiAoRkRfSVNTRVQoeHNtcF9pY2VmZCwgJnJmZHMpKQorCSAgICB7CisJCWJ1c3kgPSBUUlVFOworCQl4c21wX2hhbmRsZV9yZXF1ZXN0cygpOworCQlidXN5ID0gRkFMU0U7CisJCWlmICgtLXJldCA9PSAwKQorCQkgICAgZmluaXNoZWQgPSBGQUxTRTsgICAvKiBrZWVwIGdvaW5nIGlmIGV2ZW50IHdhcyBvbmx5IG9uZSAqLworCSAgICB9CisJfQorIyBlbmRpZgorCisjZW5kaWYgLyogSEFWRV9TRUxFQ1QgKi8KKworI2lmZGVmIE1BWV9MT09QCisJaWYgKGZpbmlzaGVkIHx8IG1zZWMgPT0gMCkKKwkgICAgYnJlYWs7CisKKwkvKiBXZSdyZSBnb2luZyB0byBsb29wIGFyb3VuZCBhZ2FpbiwgZmluZCBvdXQgZm9yIGhvdyBsb25nICovCisJaWYgKG1zZWMgPiAwKQorCXsKKyMgaWZkZWYgVVNFX1NUQVJUX1RWCisJICAgIHN0cnVjdCB0aW1ldmFsICBtdHY7CisKKwkgICAgLyogQ29tcHV0ZSByZW1haW5pbmcgd2FpdCB0aW1lLiAqLworCSAgICBnZXR0aW1lb2ZkYXkoJm10diwgTlVMTCk7CisJICAgIG1zZWMgLT0gKG10di50dl9zZWMgLSBzdGFydF90di50dl9zZWMpICogMTAwMEwKKwkJCQkgICArIChtdHYudHZfdXNlYyAtIHN0YXJ0X3R2LnR2X3VzZWMpIC8gMTAwMEw7CisjIGVsc2UKKwkgICAgLyogR3Vlc3Mgd2UgZ290IGludGVycnVwdGVkIGhhbGZ3YXkuICovCisJICAgIG1zZWMgPSBtc2VjIC8gMjsKKyMgZW5kaWYKKwkgICAgaWYgKG1zZWMgPD0gMCkKKwkJYnJlYWs7CS8qIHdhaXRlZCBsb25nIGVub3VnaCAqLworCX0KKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiAocmV0ID4gMCk7Cit9CisKKyNpZm5kZWYgVk1TCisKKyNpZm5kZWYgTk9fRVhQQU5EUEFUSAorICAgIHN0YXRpYyBpbnQKK3BzdHJjbXAoYSwgYikKKyAgICBjb25zdCB2b2lkICphLCAqYjsKK3sKKyAgICByZXR1cm4gKHBhdGhjbXAoKihjaGFyICoqKWEsICooY2hhciAqKiliKSk7Cit9CisKKy8qCisgKiBSZWN1cnNpdmVseSBleHBhbmQgb25lIHBhdGggY29tcG9uZW50IGludG8gYWxsIG1hdGNoaW5nIGZpbGVzIGFuZC9vcgorICogZGlyZWN0b3JpZXMuCisgKiAicGF0aCIgaGFzIGJhY2tzbGFzaGVzIGJlZm9yZSBjaGFycyB0aGF0IGFyZSBub3QgdG8gYmUgZXhwYW5kZWQsIHN0YXJ0aW5nCisgKiBhdCAicGF0aCArIHdpbGRvZmYiLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3VuZC4KKyAqLworICAgIGludAorbWNoX2V4cGFuZHBhdGgoZ2FwLCBwYXRoLCBmbGFncykKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGNoYXJfdQkqcGF0aDsKKyAgICBpbnQJCWZsYWdzOwkJLyogRVdfKiBmbGFncyAqLworeworICAgIHJldHVybiB1bml4X2V4cGFuZHBhdGgoZ2FwLCBwYXRoLCAwLCBmbGFncyk7Cit9CisKKyAgICBzdGF0aWMgaW50Cit1bml4X2V4cGFuZHBhdGgoZ2FwLCBwYXRoLCB3aWxkb2ZmLCBmbGFncykKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGNoYXJfdQkqcGF0aDsKKyAgICBpbnQJCXdpbGRvZmY7CisgICAgaW50CQlmbGFnczsJCS8qIEVXXyogZmxhZ3MgKi8KK3sKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBjaGFyX3UJKnBhdGhfZW5kOworICAgIGNoYXJfdQkqcCwgKnMsICplOworICAgIGludAkJc3RhcnRfbGVuLCBjOworICAgIGNoYXJfdQkqcGF0OworICAgIERJUgkJKmRpcnA7CisgICAgcmVnbWF0Y2hfVAlyZWdtYXRjaDsKKyAgICBzdHJ1Y3QgZGlyZW50ICpkcDsKKyAgICBpbnQJCXN0YXJ0c193aXRoX2RvdDsKKyAgICBpbnQJCW1hdGNoZXM7CisgICAgaW50CQlsZW47CisKKyAgICBzdGFydF9sZW4gPSBnYXAtPmdhX2xlbjsKKyAgICBidWYgPSBhbGxvYyhTVFJMRU4ocGF0aCkgKyBCQVNFTkFNRUxFTiArIDUpOy8qIG1ha2Ugcm9vbSBmb3IgZmlsZSBuYW1lICovCisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCXJldHVybiAwOworCisvKgorICogRmluZCB0aGUgZmlyc3QgcGFydCBpbiB0aGUgcGF0aCBuYW1lIHRoYXQgY29udGFpbnMgYSB3aWxkY2FyZC4KKyAqIENvcHkgaXQgaW50byBidWYsIGluY2x1ZGluZyB0aGUgcHJlY2VkaW5nIGNoYXJhY3RlcnMuCisgKi8KKyAgICBwID0gYnVmOworICAgIHMgPSBidWY7CisgICAgZSA9IE5VTEw7CisgICAgcGF0aF9lbmQgPSBwYXRoOworICAgIHdoaWxlICgqcGF0aF9lbmQgIT0gTlVMKQorICAgIHsKKwkvKiBNYXkgaWdub3JlIGEgd2lsZGNhcmQgdGhhdCBoYXMgYSBiYWNrc2xhc2ggYmVmb3JlIGl0OyBpdCB3aWxsCisJICogYmUgcmVtb3ZlZCBieSByZW1fYmFja3NsYXNoKCkgb3IgZmlsZV9wYXRfdG9fcmVnX3BhdCgpIGJlbG93LiAqLworCWlmIChwYXRoX2VuZCA+PSBwYXRoICsgd2lsZG9mZiAmJiByZW1fYmFja3NsYXNoKHBhdGhfZW5kKSkKKwkgICAgKnArKyA9ICpwYXRoX2VuZCsrOworCWVsc2UgaWYgKCpwYXRoX2VuZCA9PSAnLycpCisJeworCSAgICBpZiAoZSAhPSBOVUxMKQorCQlicmVhazsKKwkgICAgcyA9IHAgKyAxOworCX0KKwllbHNlIGlmIChwYXRoX2VuZCA+PSBwYXRoICsgd2lsZG9mZgorCQkJICYmIHZpbV9zdHJjaHIoKGNoYXJfdSAqKSIqP1t7fiQiLCAqcGF0aF9lbmQpICE9IE5VTEwpCisJICAgIGUgPSBwOworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCXsKKwkgICAgbGVuID0gKCptYl9wdHIybGVuX2NoZWNrKShwYXRoX2VuZCk7CisJICAgIFNUUk5DUFkocCwgcGF0aF9lbmQsIGxlbik7CisJICAgIHAgKz0gbGVuOworCSAgICBwYXRoX2VuZCArPSBsZW47CisJfQorCWVsc2UKKyNlbmRpZgorCSAgICAqcCsrID0gKnBhdGhfZW5kKys7CisgICAgfQorICAgIGUgPSBwOworICAgICplID0gTlVMOworCisgICAgLyogbm93IHdlIGhhdmUgb25lIHdpbGRjYXJkIGNvbXBvbmVudCBiZXR3ZWVuIHMgYW5kIGUgKi8KKyAgICAvKiBSZW1vdmUgYmFja3NsYXNoZXMgYmV0d2VlbiAid2lsZG9mZiIgYW5kIHRoZSBzdGFydCBvZiB0aGUgd2lsZGNhcmQKKyAgICAgKiBjb21wb25lbnQuICovCisgICAgZm9yIChwID0gYnVmICsgd2lsZG9mZjsgcCA8IHM7ICsrcCkKKwlpZiAocmVtX2JhY2tzbGFzaChwKSkKKwl7CisJICAgIFNUUkNQWShwLCBwICsgMSk7CisJICAgIC0tZTsKKwkgICAgLS1zOworCX0KKworICAgIC8qIGNvbnZlcnQgdGhlIGZpbGUgcGF0dGVybiB0byBhIHJlZ2V4cCBwYXR0ZXJuICovCisgICAgc3RhcnRzX3dpdGhfZG90ID0gKCpzID09ICcuJyk7CisgICAgcGF0ID0gZmlsZV9wYXRfdG9fcmVnX3BhdChzLCBlLCBOVUxMLCBGQUxTRSk7CisgICAgaWYgKHBhdCA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShidWYpOworCXJldHVybiAwOworICAgIH0KKworICAgIC8qIGNvbXBpbGUgdGhlIHJlZ2V4cCBpbnRvIGEgcHJvZ3JhbSAqLworI2lmZGVmIE1BQ09TX1ggLyogQ2FuL1Nob3VsZCB3ZSB1c2UgQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRSBpbnN0ZWFkID8qLworICAgIHJlZ21hdGNoLnJtX2ljID0gVFJVRTsJCS8qIEJlaGF2ZSBsaWtlIFRlcm1pbmFsLmFwcCAqLworI2Vsc2UKKyAgICByZWdtYXRjaC5ybV9pYyA9IEZBTFNFOwkJLyogRG9uJ3QgZXZlciBpZ25vcmUgY2FzZSAqLworI2VuZGlmCisgICAgcmVnbWF0Y2gucmVncHJvZyA9IHZpbV9yZWdjb21wKHBhdCwgUkVfTUFHSUMpOworICAgIHZpbV9mcmVlKHBhdCk7CisKKyAgICBpZiAocmVnbWF0Y2gucmVncHJvZyA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShidWYpOworCXJldHVybiAwOworICAgIH0KKworICAgIC8qIG9wZW4gdGhlIGRpcmVjdG9yeSBmb3Igc2Nhbm5pbmcgKi8KKyAgICBjID0gKnM7CisgICAgKnMgPSBOVUw7CisgICAgZGlycCA9IG9wZW5kaXIoKmJ1ZiA9PSBOVUwgPyAiLiIgOiAoY2hhciAqKWJ1Zik7CisgICAgKnMgPSBjOworCisgICAgLyogRmluZCBhbGwgbWF0Y2hpbmcgZW50cmllcyAqLworICAgIGlmIChkaXJwICE9IE5VTEwpCisgICAgeworCWZvciAoOzspCisJeworCSAgICBkcCA9IHJlYWRkaXIoZGlycCk7CisJICAgIGlmIChkcCA9PSBOVUxMKQorCQlicmVhazsKKwkgICAgaWYgKChkcC0+ZF9uYW1lWzBdICE9ICcuJyB8fCBzdGFydHNfd2l0aF9kb3QpCisJCSAgICAmJiB2aW1fcmVnZXhlYygmcmVnbWF0Y2gsIChjaGFyX3UgKilkcC0+ZF9uYW1lLCAoY29sbnJfVCkwKSkKKwkgICAgeworCQlTVFJDUFkocywgZHAtPmRfbmFtZSk7CisJCWxlbiA9IFNUUkxFTihidWYpOworCQlTVFJDUFkoYnVmICsgbGVuLCBwYXRoX2VuZCk7CisJCWlmIChtY2hfaGFzX2V4cF93aWxkY2FyZChwYXRoX2VuZCkpIC8qIGhhbmRsZSBtb3JlIHdpbGRjYXJkcyAqLworCQl7CisJCSAgICAvKiBuZWVkIHRvIGV4cGFuZCBhbm90aGVyIGNvbXBvbmVudCBvZiB0aGUgcGF0aCAqLworCQkgICAgLyogcmVtb3ZlIGJhY2tzbGFzaGVzIGZvciB0aGUgcmVtYWluaW5nIGNvbXBvbmVudHMgb25seSAqLworCQkgICAgKHZvaWQpdW5peF9leHBhbmRwYXRoKGdhcCwgYnVmLCBsZW4gKyAxLCBmbGFncyk7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICAvKiBubyBtb3JlIHdpbGRjYXJkcywgY2hlY2sgaWYgdGhlcmUgaXMgYSBtYXRjaCAqLworCQkgICAgLyogcmVtb3ZlIGJhY2tzbGFzaGVzIGZvciB0aGUgcmVtYWluaW5nIGNvbXBvbmVudHMgb25seSAqLworCQkgICAgaWYgKCpwYXRoX2VuZCAhPSBOVUwpCisJCQliYWNrc2xhc2hfaGFsdmUoYnVmICsgbGVuICsgMSk7CisJCSAgICBpZiAobWNoX2dldHBlcm0oYnVmKSA+PSAwKQkvKiBhZGQgZXhpc3RpbmcgZmlsZSAqLworCQkJYWRkZmlsZShnYXAsIGJ1ZiwgZmxhZ3MpOworCQl9CisJICAgIH0KKwl9CisKKwljbG9zZWRpcihkaXJwKTsKKyAgICB9CisKKyAgICB2aW1fZnJlZShidWYpOworICAgIHZpbV9mcmVlKHJlZ21hdGNoLnJlZ3Byb2cpOworCisgICAgbWF0Y2hlcyA9IGdhcC0+Z2FfbGVuIC0gc3RhcnRfbGVuOworICAgIGlmIChtYXRjaGVzID4gMCkKKwlxc29ydCgoKGNoYXJfdSAqKilnYXAtPmdhX2RhdGEpICsgc3RhcnRfbGVuLCBtYXRjaGVzLAorCQkJCQkJICAgc2l6ZW9mKGNoYXJfdSAqKSwgcHN0cmNtcCk7CisgICAgcmV0dXJuIG1hdGNoZXM7Cit9CisjZW5kaWYKKworLyoKKyAqIG1jaF9leHBhbmRfd2lsZGNhcmRzKCkgLSB0aGlzIGNvZGUgZG9lcyB3aWxkLWNhcmQgcGF0dGVybiBtYXRjaGluZyB1c2luZworICogdGhlIHNoZWxsCisgKgorICogcmV0dXJuIE9LIGZvciBzdWNjZXNzLCBGQUlMIGZvciBlcnJvciAoeW91IG1heSBsb3NlIHNvbWUgbWVtb3J5KSBhbmQgcHV0CisgKiBhbiBlcnJvciBtZXNzYWdlIGluICpmaWxlLgorICoKKyAqIG51bV9wYXQgaXMgbnVtYmVyIG9mIGlucHV0IHBhdHRlcm5zCisgKiBwYXQgaXMgYXJyYXkgb2YgcG9pbnRlcnMgdG8gaW5wdXQgcGF0dGVybnMKKyAqIG51bV9maWxlIGlzIHBvaW50ZXIgdG8gbnVtYmVyIG9mIG1hdGNoZWQgZmlsZSBuYW1lcworICogZmlsZSBpcyBwb2ludGVyIHRvIGFycmF5IG9mIHBvaW50ZXJzIHRvIG1hdGNoZWQgZmlsZSBuYW1lcworICovCisKKyNpZm5kZWYgU0VFS19TRVQKKyMgZGVmaW5lIFNFRUtfU0VUIDAKKyNlbmRpZgorI2lmbmRlZiBTRUVLX0VORAorIyBkZWZpbmUgU0VFS19FTkQgMgorI2VuZGlmCisKKy8qIEFSR1NVU0VEICovCisgICAgaW50CittY2hfZXhwYW5kX3dpbGRjYXJkcyhudW1fcGF0LCBwYXQsIG51bV9maWxlLCBmaWxlLCBmbGFncykKKyAgICBpbnQJCSAgIG51bV9wYXQ7CisgICAgY2hhcl91CSAqKnBhdDsKKyAgICBpbnQJCSAgKm51bV9maWxlOworICAgIGNoYXJfdQkqKipmaWxlOworICAgIGludAkJICAgZmxhZ3M7CS8qIEVXXyogZmxhZ3MgKi8KK3sKKyAgICBpbnQJCWk7CisgICAgc2l6ZV90CWxlbjsKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlkaXI7CisjaWZkZWYgX19FTVhfXworIyBkZWZpbmUgRVhQTF9BTExPQ19JTkMJMTYKKyAgICBjaGFyX3UJKipleHBsX2ZpbGVzOworICAgIHNpemVfdAlmaWxlc19hbGxvY2VkLCBmaWxlc19mcmVlOworICAgIGNoYXJfdQkqYnVmOworICAgIGludAkJaGFzX3dpbGRjYXJkOworCisgICAgKm51bV9maWxlID0gMDsJLyogZGVmYXVsdDogbm8gZmlsZXMgZm91bmQgKi8KKyAgICBmaWxlc19hbGxvY2VkID0gRVhQTF9BTExPQ19JTkM7IC8qIGhvdyBtdWNoIHNwYWNlIGlzIGFsbG9jYXRlZCAqLworICAgIGZpbGVzX2ZyZWUgPSBFWFBMX0FMTE9DX0lOQzsgICAgLyogaG93IG11Y2ggc3BhY2UgaXMgbm90IHVzZWQgICovCisgICAgKmZpbGUgPSAoY2hhcl91ICoqKWFsbG9jKHNpemVvZihjaGFyX3UgKiopICogZmlsZXNfYWxsb2NlZCk7CisgICAgaWYgKCpmaWxlID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBmb3IgKDsgbnVtX3BhdCA+IDA7IG51bV9wYXQtLSwgcGF0KyspCisgICAgeworCWV4cGxfZmlsZXMgPSBOVUxMOworCWlmICh2aW1fc3RyY2hyKCpwYXQsICckJykgfHwgdmltX3N0cmNocigqcGF0LCAnficpKQorCSAgICAvKiBleHBhbmQgZW52aXJvbm1lbnQgdmFyIG9yIGhvbWUgZGlyICovCisJICAgIGJ1ZiA9IGV4cGFuZF9lbnZfc2F2ZSgqcGF0KTsKKwllbHNlCisJICAgIGJ1ZiA9IHZpbV9zdHJzYXZlKCpwYXQpOworCWV4cGxfZmlsZXMgPSBOVUxMOworCWhhc193aWxkY2FyZCA9IG1jaF9oYXNfZXhwX3dpbGRjYXJkKGJ1Zik7ICAvKiAoc3RpbGwpIHdpbGRjYXJkcyBpbiB0aGVyZT8gKi8KKwlpZiAoaGFzX3dpbGRjYXJkKSAgIC8qIHllcywgc28gZXhwYW5kIHRoZW0gKi8KKwkgICAgZXhwbF9maWxlcyA9IChjaGFyX3UgKiopX2ZuZXhwbG9kZShidWYpOworCisJLyoKKwkgKiByZXR1cm4gdmFsdWUgb2YgYnVmIGlmIG5vIHdpbGRjYXJkcyBsZWZ0LAorCSAqIE9SIGlmIG5vIG1hdGNoIEFORCBFV19OT1RGT1VORCBpcyBzZXQuCisJICovCisJaWYgKCghaGFzX3dpbGRjYXJkICYmICgoZmxhZ3MgJiBFV19OT1RGT1VORCkgfHwgbWNoX2dldHBlcm0oYnVmKSA+PSAwKSkKKwkJfHwgKGV4cGxfZmlsZXMgPT0gTlVMTCAmJiAoZmxhZ3MgJiBFV19OT1RGT1VORCkpKQorCXsgICAvKiBzaW1wbHkgc2F2ZSB0aGUgY3VycmVudCBjb250ZW50cyBvZiAqYnVmICovCisJICAgIGV4cGxfZmlsZXMgPSAoY2hhcl91ICoqKWFsbG9jKHNpemVvZihjaGFyX3UgKiopICogMik7CisJICAgIGlmIChleHBsX2ZpbGVzICE9IE5VTEwpCisJICAgIHsKKwkJZXhwbF9maWxlc1swXSA9IHZpbV9zdHJzYXZlKGJ1Zik7CisJCWV4cGxfZmlsZXNbMV0gPSBOVUxMOworCSAgICB9CisJfQorCXZpbV9mcmVlKGJ1Zik7CisKKwkvKgorCSAqIENvdW50IG51bWJlciBvZiBuYW1lcyByZXN1bHRpbmcgZnJvbSBleHBhbnNpb24sCisJICogQXQgdGhlIHNhbWUgdGltZSBhZGQgYSBiYWNrc2xhc2ggdG8gdGhlIGVuZCBvZiBuYW1lcyB0aGF0IGhhcHBlbiB0bworCSAqIGJlIGRpcmVjdG9yaWVzLCBhbmQgcmVwbGFjZSBzbGFzaGVzIHdpdGggYmFja3NsYXNoZXMuCisJICovCisJaWYgKGV4cGxfZmlsZXMpCisJeworCSAgICBmb3IgKGkgPSAwOyAocCA9IGV4cGxfZmlsZXNbaV0pICE9IE5VTEw7IGkrKykKKwkgICAgeworCQlkaXIgPSBtY2hfaXNkaXIocCk7CisJCS8qIElmIHdlIGRvbid0IHdhbnQgZGlycyBhbmQgdGhpcyBpcyBvbmUsIHNraXAgaXQgKi8KKwkJaWYgKChkaXIgJiYgIShmbGFncyAmIEVXX0RJUikpIHx8ICghZGlyICYmICEoZmxhZ3MgJiBFV19GSUxFKSkpCisJCSAgICBjb250aW51ZTsKKworCQlpZiAoLS1maWxlc19mcmVlID09IDApCisJCXsKKwkJICAgIC8qIG5lZWQgbW9yZSByb29tIGluIHRhYmxlIG9mIHBvaW50ZXJzICovCisJCSAgICBmaWxlc19hbGxvY2VkICs9IEVYUExfQUxMT0NfSU5DOworCQkgICAgKmZpbGUgPSAoY2hhcl91ICoqKXZpbV9yZWFsbG9jKCpmaWxlLAorCQkJCQkgICBzaXplb2YoY2hhcl91ICoqKSAqIGZpbGVzX2FsbG9jZWQpOworCQkgICAgaWYgKCpmaWxlID09IE5VTEwpCisJCSAgICB7CisJCQlFTVNHKF8oZV9vdXRvZm1lbSkpOworCQkJKm51bV9maWxlID0gMDsKKwkJCXJldHVybiBGQUlMOworCQkgICAgfQorCQkgICAgZmlsZXNfZnJlZSA9IEVYUExfQUxMT0NfSU5DOworCQl9CisJCXNsYXNoX2FkanVzdChwKTsKKwkJaWYgKGRpcikKKwkJeworCQkgICAgLyogRm9yIGEgZGlyZWN0b3J5IHdlIGFkZCBhICcvJywgdW5sZXNzIGl0J3MgYWxyZWFkeQorCQkgICAgICogdGhlcmUuICovCisJCSAgICBsZW4gPSBTVFJMRU4ocCk7CisJCSAgICBpZiAoKCgqZmlsZSlbKm51bV9maWxlXSA9IGFsbG9jKGxlbiArIDIpKSAhPSBOVUxMKQorCQkgICAgeworCQkJU1RSQ1BZKCgqZmlsZSlbKm51bV9maWxlXSwgcCk7CisJCQlpZiAoIXZpbV9pc3BhdGhzZXAoKCpmaWxlKVsqbnVtX2ZpbGVdW2xlbiAtIDFdKSkKKwkJCXsKKwkJCSAgICAoKmZpbGUpWypudW1fZmlsZV1bbGVuXSA9IHBzZXBjOworCQkJICAgICgqZmlsZSlbKm51bV9maWxlXVtsZW4gKyAxXSA9IDA7CisJCQl9CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICAoKmZpbGUpWypudW1fZmlsZV0gPSB2aW1fc3Ryc2F2ZShwKTsKKwkJfQorCisJCS8qCisJCSAqIEVycm9yIG1lc3NhZ2UgYWxyZWFkeSBnaXZlbiBieSBlaXRoZXIgYWxsb2Mgb3IgdmltX3N0cnNhdmUuCisJCSAqIFNob3VsZCByZXR1cm4gRkFJTCwgYnV0IHJldHVybmluZyBPSyB3b3JrcyBhbHNvLgorCQkgKi8KKwkJaWYgKCgqZmlsZSlbKm51bV9maWxlXSA9PSBOVUxMKQorCQkgICAgYnJlYWs7CisJCSgqbnVtX2ZpbGUpKys7CisJICAgIH0KKwkgICAgX2ZuZXhwbG9kZWZyZWUoKGNoYXIgKiopZXhwbF9maWxlcyk7CisJfQorICAgIH0KKyAgICByZXR1cm4gT0s7CisKKyNlbHNlIC8qIF9fRU1YX18gKi8KKworICAgIGludAkJajsKKyAgICBjaGFyX3UJKnRlbXBuYW1lOworICAgIGNoYXJfdQkqY29tbWFuZDsKKyAgICBGSUxFCSpmZDsKKyAgICBjaGFyX3UJKmJ1ZmZlcjsKKyNkZWZpbmUgU1RZTEVfRUNITyAgMAkgICAgLyogdXNlICJlY2hvIiB0byBleHBhbmQgKi8KKyNkZWZpbmUgU1RZTEVfR0xPQiAgMQkgICAgLyogdXNlICJnbG9iIiB0byBleHBhbmQsIGZvciBjc2ggKi8KKyNkZWZpbmUgU1RZTEVfUFJJTlQgMgkgICAgLyogdXNlICJwcmludCAtTiIgdG8gZXhwYW5kLCBmb3IgenNoICovCisjZGVmaW5lIFNUWUxFX0JUICAgIDMJICAgIC8qIGBjbWRgIGV4cGFuc2lvbiwgZXhlY3V0ZSB0aGUgcGF0dGVybiBkaXJlY3RseSAqLworICAgIGludAkJc2hlbGxfc3R5bGUgPSBTVFlMRV9FQ0hPOworICAgIGludAkJY2hlY2tfc3BhY2VzOworICAgIHN0YXRpYyBpbnQJZGlkX2ZpbmRfbnVsID0gRkFMU0U7CisgICAgaW50CQlhbXBlcnNlbnQgPSBGQUxTRTsKKworICAgICpudW1fZmlsZSA9IDA7CS8qIGRlZmF1bHQ6IG5vIGZpbGVzIGZvdW5kICovCisgICAgKmZpbGUgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBJZiB0aGVyZSBhcmUgbm8gd2lsZGNhcmRzLCBqdXN0IGNvcHkgdGhlIG5hbWVzIHRvIGFsbG9jYXRlZCBtZW1vcnkuCisgICAgICogU2F2ZXMgYSBsb3Qgb2YgdGltZSwgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIHN0YXJ0IGEgbmV3IHNoZWxsLgorICAgICAqLworICAgIGlmICghaGF2ZV93aWxkY2FyZChudW1fcGF0LCBwYXQpKQorCXJldHVybiBzYXZlX3BhdHRlcm5zKG51bV9wYXQsIHBhdCwgbnVtX2ZpbGUsIGZpbGUpOworCisgICAgLyoKKyAgICAgKiBEb24ndCBhbGxvdyB0aGUgdXNlIG9mIGJhY2t0aWNrcyBpbiBzZWN1cmUgYW5kIHJlc3RyaWN0ZWQgbW9kZS4KKyAgICAgKi8KKyAgICBpZiAoc2VjdXJlIHx8IHJlc3RyaWN0ZWQpCisJZm9yIChpID0gMDsgaSA8IG51bV9wYXQ7ICsraSkKKwkgICAgaWYgKHZpbV9zdHJjaHIocGF0W2ldLCAnYCcpICE9IE5VTEwKKwkJICAgICYmIChjaGVja19yZXN0cmljdGVkKCkgfHwgY2hlY2tfc2VjdXJlKCkpKQorCQlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogZ2V0IGEgbmFtZSBmb3IgdGhlIHRlbXAgZmlsZQorICAgICAqLworICAgIGlmICgodGVtcG5hbWUgPSB2aW1fdGVtcG5hbWUoJ28nKSkgPT0gTlVMTCkKKyAgICB7CisJRU1TRyhfKGVfbm90bXApKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIExldCB0aGUgc2hlbGwgZXhwYW5kIHRoZSBwYXR0ZXJucyBhbmQgd3JpdGUgdGhlIHJlc3VsdCBpbnRvIHRoZSB0ZW1wCisgICAgICogZmlsZS4gIGlmIGV4cGFuZGluZyBgY21kYCBleGVjdXRlIGl0IGRpcmVjdGx5LgorICAgICAqIElmIHdlIHVzZSBjc2gsIGdsb2Igd2lsbCB3b3JrIGJldHRlciB0aGFuIGVjaG8uCisgICAgICogSWYgd2UgdXNlIHpzaCwgcHJpbnQgLU4gd2lsbCB3b3JrIGJldHRlciB0aGFuIGdsb2IuCisgICAgICovCisgICAgaWYgKG51bV9wYXQgPT0gMSAmJiAqcGF0WzBdID09ICdgJworCSAgICAmJiAobGVuID0gU1RSTEVOKHBhdFswXSkpID4gMgorCSAgICAmJiAqKHBhdFswXSArIGxlbiAtIDEpID09ICdgJykKKwlzaGVsbF9zdHlsZSA9IFNUWUxFX0JUOworICAgIGVsc2UgaWYgKChsZW4gPSBTVFJMRU4ocF9zaCkpID49IDMpCisgICAgeworCWlmIChTVFJDTVAocF9zaCArIGxlbiAtIDMsICJjc2giKSA9PSAwKQorCSAgICBzaGVsbF9zdHlsZSA9IFNUWUxFX0dMT0I7CisJZWxzZSBpZiAoU1RSQ01QKHBfc2ggKyBsZW4gLSAzLCAienNoIikgPT0gMCkKKwkgICAgc2hlbGxfc3R5bGUgPSBTVFlMRV9QUklOVDsKKyAgICB9CisKKyAgICAvKiAidW5zZXQgbm9ub21hdGNoOyBwcmludCAtTiA+IiBwbHVzIHR3byBpcyAyOSAqLworICAgIGxlbiA9IFNUUkxFTih0ZW1wbmFtZSkgKyAyOTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BhdDsgKytpKQkvKiBjb3VudCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJucyAqLworCWxlbiArPSBTVFJMRU4ocGF0W2ldKSArIDM7CS8qIGFkZCBzcGFjZSBhbmQgdHdvIHF1b3RlcyAqLworICAgIGNvbW1hbmQgPSBhbGxvYyhsZW4pOworICAgIGlmIChjb21tYW5kID09IE5VTEwpCisgICAgeworCS8qIG91dCBvZiBtZW1vcnkgKi8KKwl2aW1fZnJlZSh0ZW1wbmFtZSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBCdWlsZCB0aGUgc2hlbGwgY29tbWFuZDoKKyAgICAgKiAtIFNldCAkbm9ub21hdGNoIGRlcGVuZGluZyBvbiBFV19OT1RGT1VORCAoaG9wZWZ1bGx5IHRoZSBzaGVsbAorICAgICAqCSByZWNvZ25pemVzIHRoaXMpLgorICAgICAqIC0gQWRkIHRoZSBzaGVsbCBjb21tYW5kIHRvIHByaW50IHRoZSBleHBhbmRlZCBuYW1lcy4KKyAgICAgKiAtIEFkZCB0aGUgdGVtcCBmaWxlIG5hbWUuCisgICAgICogLSBBZGQgdGhlIGZpbGUgbmFtZSBwYXR0ZXJucy4KKyAgICAgKi8KKyAgICBpZiAoc2hlbGxfc3R5bGUgPT0gU1RZTEVfQlQpCisgICAgeworCVNUUkNQWShjb21tYW5kLCBwYXRbMF0gKyAxKTsJCS8qIGV4Y2x1ZGUgZmlyc3QgYmFja3RpY2sgKi8KKwlwID0gY29tbWFuZCArIFNUUkxFTihjb21tYW5kKSAtIDE7CisJKnAgPSAnICc7CQkJCS8qIHJlbW92ZSBsYXN0IGJhY2t0aWNrICovCisJd2hpbGUgKHAgPiBjb21tYW5kICYmIHZpbV9pc3doaXRlKCpwKSkKKwkgICAgLS1wOworCWlmICgqcCA9PSAnJicpCQkJCS8qIHJlbW92ZSB0cmFpbGluZyAnJicgKi8KKwl7CisJICAgIGFtcGVyc2VudCA9IFRSVUU7CisJICAgICpwID0gJyAnOworCX0KKwlTVFJDQVQoY29tbWFuZCwgIj4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAoZmxhZ3MgJiBFV19OT1RGT1VORCkKKwkgICAgU1RSQ1BZKGNvbW1hbmQsICJzZXQgbm9ub21hdGNoOyAiKTsKKwllbHNlCisJICAgIFNUUkNQWShjb21tYW5kLCAidW5zZXQgbm9ub21hdGNoOyAiKTsKKwlpZiAoc2hlbGxfc3R5bGUgPT0gU1RZTEVfR0xPQikKKwkgICAgU1RSQ0FUKGNvbW1hbmQsICJnbG9iID4iKTsKKwllbHNlIGlmIChzaGVsbF9zdHlsZSA9PSBTVFlMRV9QUklOVCkKKwkgICAgU1RSQ0FUKGNvbW1hbmQsICJwcmludCAtTiA+Iik7CisJZWxzZQorCSAgICBTVFJDQVQoY29tbWFuZCwgImVjaG8gPiIpOworICAgIH0KKyAgICBTVFJDQVQoY29tbWFuZCwgdGVtcG5hbWUpOworICAgIGlmIChzaGVsbF9zdHlsZSAhPSBTVFlMRV9CVCkKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhdDsgKytpKQorCXsKKwkgICAgLyogV2hlbiB1c2luZyBzeXN0ZW0oKSBhbHdheXMgYWRkIGV4dHJhIHF1b3RlcywgYmVjYXVzZSB0aGUgc2hlbGwKKwkgICAgICogaXMgc3RhcnRlZCB0d2ljZS4gIE90aGVyd2lzZSBvbmx5IHB1dCBxdW90ZXMgYXJvdW5kIHNwYWNlcyBhbmQKKwkgICAgICogc2luZ2xlIHF1b3Rlcy4gKi8KKyNpZmRlZiBVU0VfU1lTVEVNCisJICAgIFNUUkNBVChjb21tYW5kLCAiIFwiIik7CisJICAgIFNUUkNBVChjb21tYW5kLCBwYXRbaV0pOworCSAgICBTVFJDQVQoY29tbWFuZCwgIlwiIik7CisjZWxzZQorCSAgICBwID0gY29tbWFuZCArIFNUUkxFTihjb21tYW5kKTsKKwkgICAgKnArKyA9ICcgJzsKKwkgICAgZm9yIChqID0gMDsgcGF0W2ldW2pdICE9IE5VTDsgKQorCQlpZiAodmltX3N0cmNocigoY2hhcl91ICopIiAnIiwgcGF0W2ldW2pdKSAhPSBOVUxMKQorCQl7CisJCSAgICAqcCsrID0gJyInOworCQkgICAgd2hpbGUgKHBhdFtpXVtqXSAhPSBOVUwKKwkJCSAgICAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikiICciLCBwYXRbaV1bal0pICE9IE5VTEwpCisJCQkqcCsrID0gcGF0W2ldW2orK107CisJCSAgICAqcCsrID0gJyInOworCQl9CisJCWVsc2UKKwkJICAgICpwKysgPSBwYXRbaV1baisrXTsKKwkgICAgKnAgPSBOVUw7CisjZW5kaWYKKwl9CisgICAgaWYgKGZsYWdzICYgRVdfU0lMRU5UKQorCXNob3dfc2hlbGxfbWVzcyA9IEZBTFNFOworICAgIGlmIChhbXBlcnNlbnQpCisJU1RSQ0FUKGNvbW1hbmQsICImIik7CQkvKiBwdXQgdGhlICcmJyBiYWNrIGFmdGVyIHRoZQorCQkJCQkgICByZWRpcmVjdGlvbiAqLworCisgICAgLyoKKyAgICAgKiBVc2luZyB6c2ggLUc6IElmIGEgcGF0dGVybiBoYXMgbm8gbWF0Y2hlcywgaXQgaXMganVzdCBkZWxldGVkIGZyb20KKyAgICAgKiB0aGUgYXJndW1lbnQgbGlzdCwgb3RoZXJ3aXNlIHpzaCBnaXZlcyBhbiBlcnJvciBtZXNzYWdlIGFuZCBkb2Vzbid0CisgICAgICogZXhwYW5kIGFueSBvdGhlciBwYXR0ZXJuLgorICAgICAqLworICAgIGlmIChzaGVsbF9zdHlsZSA9PSBTVFlMRV9QUklOVCkKKwlleHRyYV9zaGVsbF9hcmcgPSAoY2hhcl91ICopIi1HIjsgICAvKiBVc2UgenNoIE5VTExfR0xPQiBvcHRpb24gKi8KKworICAgIC8qCisgICAgICogSWYgd2UgdXNlIC1mIHRoZW4gc2hlbGwgdmFyaWFibGVzIHNldCBpbiAuY3NocmMgd29uJ3QgZ2V0IGV4cGFuZGVkLgorICAgICAqIHZpIGNhbiBkbyBpdCwgc28gd2Ugd2lsbCB0b28sIGJ1dCBpdCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB0aGVyZSBpcyBhICIkIgorICAgICAqIGluIG9uZSBvZiB0aGUgcGF0dGVybnMsIG90aGVyd2lzZSB3ZSBjYW4gc3RpbGwgdXNlIHRoZSBmYXN0IG9wdGlvbi4KKyAgICAgKi8KKyAgICBlbHNlIGlmIChzaGVsbF9zdHlsZSA9PSBTVFlMRV9HTE9CICYmICFoYXZlX2RvbGxhcnMobnVtX3BhdCwgcGF0KSkKKwlleHRyYV9zaGVsbF9hcmcgPSAoY2hhcl91ICopIi1mIjsJLyogVXNlIGNzaCBmYXN0IG9wdGlvbiAqLworCisgICAgLyoKKyAgICAgKiBleGVjdXRlIHRoZSBzaGVsbCBjb21tYW5kCisgICAgICovCisgICAgaSA9IGNhbGxfc2hlbGwoY29tbWFuZCwgU0hFTExfRVhQQU5EIHwgU0hFTExfU0lMRU5UKTsKKworICAgIC8qIFdoZW4gcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZCwgZ2l2ZSBpdCBzb21lIHRpbWUgdG8gY3JlYXRlIHRoZSB0ZW1wCisgICAgICogZmlsZSwgYnV0IGRvbid0IHdhaXQgZm9yIGl0IHRvIGZpbmlzaC4gKi8KKyAgICBpZiAoYW1wZXJzZW50KQorCW1jaF9kZWxheSgxMEwsIFRSVUUpOworCisgICAgZXh0cmFfc2hlbGxfYXJnID0gTlVMTDsJCS8qIGNsZWFudXAgKi8KKyAgICBzaG93X3NoZWxsX21lc3MgPSBUUlVFOworICAgIHZpbV9mcmVlKGNvbW1hbmQpOworCisgICAgaWYgKGkpCQkJCS8qIG1jaF9jYWxsX3NoZWxsKCkgZmFpbGVkICovCisgICAgeworCW1jaF9yZW1vdmUodGVtcG5hbWUpOworCXZpbV9mcmVlKHRlbXBuYW1lKTsKKwkvKgorCSAqIFdpdGggaW50ZXJhY3RpdmUgY29tcGxldGlvbiwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbm90IHByaW50ZWQuCisJICogSG93ZXZlciB3aXRoIFVTRV9TWVNURU0sIEkgZG9uJ3Qga25vdyBob3cgdG8gdHVybiBvZmYgZXJyb3IgbWVzc2FnZXMKKwkgKiBmcm9tIHRoZSBzaGVsbCwgc28gc2NyZWVuIG1heSBzdGlsbCBnZXQgbWVzc2VkIHVwIC0tIHdlYmIuCisJICovCisjaWZuZGVmIFVTRV9TWVNURU0KKwlpZiAoIShmbGFncyAmIEVXX1NJTEVOVCkpCisjZW5kaWYKKwl7CisJICAgIHJlZHJhd19sYXRlcl9jbGVhcigpOwkvKiBwcm9iYWJseSBtZXNzZWQgdXAgc2NyZWVuICovCisJICAgIG1zZ19wdXRjaGFyKCdcbicpOwkJLyogY2xlYXIgYm90dG9tIGxpbmUgcXVpY2tseSAqLworCSAgICBjbWRsaW5lX3JvdyA9IFJvd3MgLSAxOwkvKiBjb250aW51ZSBvbiBsYXN0IGxpbmUgKi8KKyNpZmRlZiBVU0VfU1lTVEVNCisJICAgIGlmICghKGZsYWdzICYgRVdfU0lMRU5UKSkKKyNlbmRpZgorCSAgICB7CisJCU1TRyhfKGVfd2lsZGV4cGFuZCkpOworCQltc2dfc3RhcnQoKTsJCS8qIGRvbid0IG92ZXJ3cml0ZSB0aGlzIG1lc3NhZ2UgKi8KKwkgICAgfQorCX0KKwkvKiBJZiBhIGBjbWRgIGV4cGFuc2lvbiBmYWlsZWQsIGRvbid0IGxpc3QgYGNtZGAgYXMgYSBtYXRjaCwgZXZlbiB3aGVuCisJICogRVdfTk9URk9VTkQgaXMgZ2l2ZW4gKi8KKwlpZiAoc2hlbGxfc3R5bGUgPT0gU1RZTEVfQlQpCisJICAgIHJldHVybiBGQUlMOworCWdvdG8gbm90Zm91bmQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiByZWFkIHRoZSBuYW1lcyBmcm9tIHRoZSBmaWxlIGludG8gbWVtb3J5CisgICAgICovCisgICAgZmQgPSBmb3BlbigoY2hhciAqKXRlbXBuYW1lLCBSRUFEQklOKTsKKyAgICBpZiAoZmQgPT0gTlVMTCkKKyAgICB7CisJLyogU29tZXRoaW5nIHdlbnQgd3JvbmcsIHBlcmhhcHMgYSBmaWxlIG5hbWUgd2l0aCBhIHNwZWNpYWwgY2hhci4gKi8KKwlpZiAoIShmbGFncyAmIEVXX1NJTEVOVCkpCisJeworCSAgICBNU0coXyhlX3dpbGRleHBhbmQpKTsKKwkgICAgbXNnX3N0YXJ0KCk7CQkvKiBkb24ndCBvdmVyd3JpdGUgdGhpcyBtZXNzYWdlICovCisJfQorCXZpbV9mcmVlKHRlbXBuYW1lKTsKKwlnb3RvIG5vdGZvdW5kOworICAgIH0KKyAgICBmc2VlayhmZCwgMEwsIFNFRUtfRU5EKTsKKyAgICBsZW4gPSBmdGVsbChmZCk7CQkJLyogZ2V0IHNpemUgb2YgdGVtcCBmaWxlICovCisgICAgZnNlZWsoZmQsIDBMLCBTRUVLX1NFVCk7CisgICAgYnVmZmVyID0gYWxsb2MobGVuICsgMSk7CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgIHsKKwkvKiBvdXQgb2YgbWVtb3J5ICovCisJbWNoX3JlbW92ZSh0ZW1wbmFtZSk7CisJdmltX2ZyZWUodGVtcG5hbWUpOworCWZjbG9zZShmZCk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorICAgIGkgPSBmcmVhZCgoY2hhciAqKWJ1ZmZlciwgMSwgbGVuLCBmZCk7CisgICAgZmNsb3NlKGZkKTsKKyAgICBtY2hfcmVtb3ZlKHRlbXBuYW1lKTsKKyAgICBpZiAoaSAhPSBsZW4pCisgICAgeworCS8qIHVuZXhwZWN0ZWQgcmVhZCBlcnJvciAqLworCUVNU0cyKF8oZV9ub3RyZWFkKSwgdGVtcG5hbWUpOworCXZpbV9mcmVlKHRlbXBuYW1lKTsKKwl2aW1fZnJlZShidWZmZXIpOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICB2aW1fZnJlZSh0ZW1wbmFtZSk7CisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DWUdXSU4zMl9fKQorICAgIC8qIFRyYW5zbGF0ZSA8Q1I+PE5MPiBpbnRvIDxOTD4uICBDYXV0aW9uLCBidWZmZXIgbWF5IGNvbnRhaW4gTlVMLiAqLworICAgIHAgPSBidWZmZXI7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQorCWlmICghKGJ1ZmZlcltpXSA9PSBDQVIgJiYgYnVmZmVyW2kgKyAxXSA9PSBOTCkpCisJICAgICpwKysgPSBidWZmZXJbaV07CisgICAgbGVuID0gcCAtIGJ1ZmZlcjsKKyMgZW5kaWYKKworCisgICAgLyogZmlsZSBuYW1lcyBhcmUgc2VwYXJhdGVkIHdpdGggU3BhY2UgKi8KKyAgICBpZiAoc2hlbGxfc3R5bGUgPT0gU1RZTEVfRUNITykKKyAgICB7CisJYnVmZmVyW2xlbl0gPSAnXG4nOwkJLyogbWFrZSBzdXJlIHRoZSBidWZmZXIgZW5kcyBpbiBOTCAqLworCXAgPSBidWZmZXI7CisJZm9yIChpID0gMDsgKnAgIT0gJ1xuJzsgKytpKQkvKiBjb3VudCBudW1iZXIgb2YgZW50cmllcyAqLworCXsKKwkgICAgd2hpbGUgKCpwICE9ICcgJyAmJiAqcCAhPSAnXG4nKQorCQkrK3A7CisJICAgIHAgPSBza2lwd2hpdGUocCk7CQkvKiBza2lwIHRvIG5leHQgZW50cnkgKi8KKwl9CisgICAgfQorICAgIC8qIGZpbGUgbmFtZXMgYXJlIHNlcGFyYXRlZCB3aXRoIE5MICovCisgICAgZWxzZSBpZiAoc2hlbGxfc3R5bGUgPT0gU1RZTEVfQlQpCisgICAgeworCWJ1ZmZlcltsZW5dID0gTlVMOwkJLyogbWFrZSBzdXJlIHRoZSBidWZmZXIgZW5kcyBpbiBOVUwgKi8KKwlwID0gYnVmZmVyOworCWZvciAoaSA9IDA7ICpwICE9IE5VTDsgKytpKQkvKiBjb3VudCBudW1iZXIgb2YgZW50cmllcyAqLworCXsKKwkgICAgd2hpbGUgKCpwICE9ICdcbicgJiYgKnAgIT0gTlVMKQorCQkrK3A7CisJICAgIGlmICgqcCAhPSBOVUwpCisJCSsrcDsKKwkgICAgcCA9IHNraXB3aGl0ZShwKTsJCS8qIHNraXAgbGVhZGluZyB3aGl0ZSBzcGFjZSAqLworCX0KKyAgICB9CisgICAgLyogZmlsZSBuYW1lcyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMICovCisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIFNvbWUgdmVyc2lvbnMgb2YgenNoIHVzZSBzcGFjZXMgaW5zdGVhZCBvZiBOVUxzIHRvIHNlcGFyYXRlCisJICogcmVzdWx0cy4gIE9ubHkgZG8gdGhpcyB3aGVuIHRoZXJlIGlzIG5vIE5VTCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUKKwkgKiBidWZmZXIsIG90aGVyd2lzZSB3ZSB3b3VsZCBuZXZlciBiZSBhYmxlIHRvIHVzZSBmaWxlIG5hbWVzIHdpdGgKKwkgKiBlbWJlZGRlZCBzcGFjZXMgd2hlbiB6c2ggZG9lcyB1c2UgTlVMcy4KKwkgKiBXaGVuIHdlIGZvdW5kIGEgTlVMIG9uY2UsIHdlIGtub3cgenNoIGlzIE9LLCBzZXQgZGlkX2ZpbmRfbnVsIGFuZAorCSAqIGRvbid0IGNoZWNrIGZvciBzcGFjZXMgYWdhaW4uCisJICovCisJY2hlY2tfc3BhY2VzID0gRkFMU0U7CisJaWYgKHNoZWxsX3N0eWxlID09IFNUWUxFX1BSSU5UICYmICFkaWRfZmluZF9udWwpCisJeworCSAgICAvKiBJZiB0aGVyZSBpcyBhIE5VTCwgc2V0IGRpZF9maW5kX251bCwgZWxzZSBzZXQgY2hlY2tfc3BhY2VzICovCisJICAgIGlmIChsZW4gJiYgKGludClTVFJMRU4oYnVmZmVyKSA8IGxlbiAtIDEpCisJCWRpZF9maW5kX251bCA9IFRSVUU7CisJICAgIGVsc2UKKwkJY2hlY2tfc3BhY2VzID0gVFJVRTsKKwl9CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgYnVmZmVyIGVuZHMgd2l0aCBhIE5VTC4gIEZvciBTVFlMRV9QUklOVCB0aGVyZQorCSAqIGFscmVhZHkgaXMgb25lLCBmb3IgU1RZTEVfR0xPQiBpdCBuZWVkcyB0byBiZSBhZGRlZC4KKwkgKi8KKwlpZiAobGVuICYmIGJ1ZmZlcltsZW4gLSAxXSA9PSBOVUwpCisJICAgIC0tbGVuOworCWVsc2UKKwkgICAgYnVmZmVyW2xlbl0gPSBOVUw7CisJaSA9IDA7CisJZm9yIChwID0gYnVmZmVyOyBwIDwgYnVmZmVyICsgbGVuOyArK3ApCisJICAgIGlmICgqcCA9PSBOVUwgfHwgKCpwID09ICcgJyAmJiBjaGVja19zcGFjZXMpKSAgIC8qIGNvdW50IGVudHJ5ICovCisJICAgIHsKKwkJKytpOworCQkqcCA9IE5VTDsKKwkgICAgfQorCWlmIChsZW4pCisJICAgICsraTsJCQkvKiBjb3VudCBsYXN0IGVudHJ5ICovCisgICAgfQorICAgIGlmIChpID09IDApCisgICAgeworCS8qCisJICogQ2FuIGhhcHBlbiB3aGVuIHVzaW5nIC9iaW4vc2ggYW5kIHR5cGluZyAiOmUgJE5PX1NVQ0hfVkFSXkkiLgorCSAqIC9iaW4vc2ggd2lsbCBoYXBwaWx5IGV4cGFuZCBpdCB0byBub3RoaW5nIHJhdGhlciB0aGFuIHJldHVybmluZyBhbgorCSAqIGVycm9yOyBhbmQgaGV5LCBpdCdzIGdvb2QgdG8gY2hlY2sgYW55d2F5IC0tIHdlYmIuCisJICovCisJdmltX2ZyZWUoYnVmZmVyKTsKKwlnb3RvIG5vdGZvdW5kOworICAgIH0KKyAgICAqbnVtX2ZpbGUgPSBpOworICAgICpmaWxlID0gKGNoYXJfdSAqKilhbGxvYyhzaXplb2YoY2hhcl91ICopICogaSk7CisgICAgaWYgKCpmaWxlID09IE5VTEwpCisgICAgeworCS8qIG91dCBvZiBtZW1vcnkgKi8KKwl2aW1fZnJlZShidWZmZXIpOworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIC8qCisgICAgICogSXNvbGF0ZSB0aGUgaW5kaXZpZHVhbCBmaWxlIG5hbWVzLgorICAgICAqLworICAgIHAgPSBidWZmZXI7CisgICAgZm9yIChpID0gMDsgaSA8ICpudW1fZmlsZTsgKytpKQorICAgIHsKKwkoKmZpbGUpW2ldID0gcDsKKwkvKiBTcGFjZSBvciBOTCBzZXBhcmF0ZXMgKi8KKwlpZiAoc2hlbGxfc3R5bGUgPT0gU1RZTEVfRUNITyB8fCBzaGVsbF9zdHlsZSA9PSBTVFlMRV9CVCkKKwl7CisJICAgIHdoaWxlICghKHNoZWxsX3N0eWxlID09IFNUWUxFX0VDSE8gJiYgKnAgPT0gJyAnKSAmJiAqcCAhPSAnXG4nKQorCQkrK3A7CisJICAgIGlmIChwID09IGJ1ZmZlciArIGxlbikJCS8qIGxhc3QgZW50cnkgKi8KKwkJKnAgPSBOVUw7CisJICAgIGVsc2UKKwkgICAgeworCQkqcCsrID0gTlVMOworCQlwID0gc2tpcHdoaXRlKHApOwkJLyogc2tpcCB0byBuZXh0IGVudHJ5ICovCisJICAgIH0KKwl9CisJZWxzZQkJLyogTlVMIHNlcGFyYXRlcyAqLworCXsKKwkgICAgd2hpbGUgKCpwICYmIHAgPCBidWZmZXIgKyBsZW4pCS8qIHNraXAgZW50cnkgKi8KKwkJKytwOworCSAgICArK3A7CQkJCS8qIHNraXAgTlVMICovCisJfQorICAgIH0KKworICAgIC8qCisgICAgICogTW92ZSB0aGUgZmlsZSBuYW1lcyB0byBhbGxvY2F0ZWQgbWVtb3J5LgorICAgICAqLworICAgIGZvciAoaiA9IDAsIGkgPSAwOyBpIDwgKm51bV9maWxlOyArK2kpCisgICAgeworCS8qIFJlcXVpcmUgdGhlIGZpbGVzIHRvIGV4aXN0LglIZWxwcyB3aGVuIHVzaW5nIC9iaW4vc2ggKi8KKwlpZiAoIShmbGFncyAmIEVXX05PVEZPVU5EKSAmJiBtY2hfZ2V0cGVybSgoKmZpbGUpW2ldKSA8IDApCisJICAgIGNvbnRpbnVlOworCisJLyogY2hlY2sgaWYgdGhpcyBlbnRyeSBzaG91bGQgYmUgaW5jbHVkZWQgKi8KKwlkaXIgPSAobWNoX2lzZGlyKCgqZmlsZSlbaV0pKTsKKwlpZiAoKGRpciAmJiAhKGZsYWdzICYgRVdfRElSKSkgfHwgKCFkaXIgJiYgIShmbGFncyAmIEVXX0ZJTEUpKSkKKwkgICAgY29udGludWU7CisKKwlwID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4oKCpmaWxlKVtpXSkgKyAxICsgZGlyKSk7CisJaWYgKHApCisJeworCSAgICBTVFJDUFkocCwgKCpmaWxlKVtpXSk7CisJICAgIGlmIChkaXIpCisJCVNUUkNBVChwLCAiLyIpOwkgICAgLyogYWRkICcvJyB0byBhIGRpcmVjdG9yeSBuYW1lICovCisJICAgICgqZmlsZSlbaisrXSA9IHA7CisJfQorICAgIH0KKyAgICB2aW1fZnJlZShidWZmZXIpOworICAgICpudW1fZmlsZSA9IGo7CisKKyAgICBpZiAoKm51bV9maWxlID09IDApCSAgICAvKiByZWplY3RlZCBhbGwgZW50cmllcyAqLworICAgIHsKKwl2aW1fZnJlZSgqZmlsZSk7CisJKmZpbGUgPSBOVUxMOworCWdvdG8gbm90Zm91bmQ7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworCitub3Rmb3VuZDoKKyAgICBpZiAoZmxhZ3MgJiBFV19OT1RGT1VORCkKKwlyZXR1cm4gc2F2ZV9wYXR0ZXJucyhudW1fcGF0LCBwYXQsIG51bV9maWxlLCBmaWxlKTsKKyAgICByZXR1cm4gRkFJTDsKKworI2VuZGlmIC8qIF9fRU1YX18gKi8KK30KKworI2VuZGlmIC8qIFZNUyAqLworCisjaWZuZGVmIF9fRU1YX18KKyAgICBzdGF0aWMgaW50CitzYXZlX3BhdHRlcm5zKG51bV9wYXQsIHBhdCwgbnVtX2ZpbGUsIGZpbGUpCisgICAgaW50CQludW1fcGF0OworICAgIGNoYXJfdQkqKnBhdDsKKyAgICBpbnQJCSpudW1fZmlsZTsKKyAgICBjaGFyX3UJKioqZmlsZTsKK3sKKyAgICBpbnQJCWk7CisKKyAgICAqZmlsZSA9IChjaGFyX3UgKiopYWxsb2MobnVtX3BhdCAqIHNpemVvZihjaGFyX3UgKikpOworICAgIGlmICgqZmlsZSA9PSBOVUxMKQorCXJldHVybiBGQUlMOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcGF0OyBpKyspCisJKCpmaWxlKVtpXSA9IHZpbV9zdHJzYXZlKHBhdFtpXSk7CisgICAgKm51bV9maWxlID0gbnVtX3BhdDsKKyAgICByZXR1cm4gT0s7Cit9CisjZW5kaWYKKworCisvKgorICogUmV0dXJuIFRSVUUgaWYgdGhlIHN0cmluZyAicCIgY29udGFpbnMgYSB3aWxkY2FyZCB0aGF0IG1jaF9leHBhbmRwYXRoKCkgY2FuCisgKiBleHBhbmQuCisgKi8KKyAgICBpbnQKK21jaF9oYXNfZXhwX3dpbGRjYXJkKHApCisgICAgY2hhcl91ICAqcDsKK3sKKyAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgeworI2lmbmRlZiBPUzIKKwlpZiAoKnAgPT0gJ1xcJyAmJiBwWzFdICE9IE5VTCkKKwkgICAgKytwOworCWVsc2UKKyNlbmRpZgorCSAgICBpZiAodmltX3N0cmNocigoY2hhcl91ICopCisjaWZkZWYgVk1TCisJCQkJICAgICIqPyUiCisjZWxzZQorIyBpZmRlZiBPUzIKKwkJCQkgICAgIio/IgorIyBlbHNlCisJCQkJICAgICIqP1t7JyIKKyMgZW5kaWYKKyNlbmRpZgorCQkJCQkJLCAqcCkgIT0gTlVMTCkKKwkgICAgcmV0dXJuIFRSVUU7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgdGhlIHN0cmluZyAicCIgY29udGFpbnMgYSB3aWxkY2FyZC4KKyAqIERvbid0IHJlY29nbml6ZSAnficgYXQgdGhlIGVuZCBhcyBhIHdpbGRjYXJkLgorICovCisgICAgaW50CittY2hfaGFzX3dpbGRjYXJkKHApCisgICAgY2hhcl91ICAqcDsKK3sKKyAgICBmb3IgKCA7ICpwOyArK3ApCisgICAgeworI2lmbmRlZiBPUzIKKwlpZiAoKnAgPT0gJ1xcJyAmJiBwWzFdICE9IE5VTCkKKwkgICAgKytwOworCWVsc2UKKyNlbmRpZgorCSAgICBpZiAodmltX3N0cmNocigoY2hhcl91ICopCisjaWZkZWYgVk1TCisJCQkJICAgICIqPyUkIgorI2Vsc2UKKyMgaWZkZWYgT1MyCisjICBpZmRlZiBWSU1fQkFDS1RJQ0sKKwkJCQkgICAgIio/JGAiCisjICBlbHNlCisJCQkJICAgICIqPyQiCisjICBlbmRpZgorIyBlbHNlCisJCQkJICAgICIqP1t7YCckIgorIyBlbmRpZgorI2VuZGlmCisJCQkJCQksICpwKSAhPSBOVUxMCisJCXx8ICgqcCA9PSAnficgJiYgcFsxXSAhPSBOVUwpKQorCSAgICByZXR1cm4gVFJVRTsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZm5kZWYgX19FTVhfXworICAgIHN0YXRpYyBpbnQKK2hhdmVfd2lsZGNhcmQobnVtLCBmaWxlKQorICAgIGludAkgICAgbnVtOworICAgIGNoYXJfdSAgKipmaWxlOworeworICAgIGludAkgICAgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwlpZiAobWNoX2hhc193aWxkY2FyZChmaWxlW2ldKSkKKwkgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisKKyAgICBzdGF0aWMgaW50CitoYXZlX2RvbGxhcnMobnVtLCBmaWxlKQorICAgIGludAkgICAgbnVtOworICAgIGNoYXJfdSAgKipmaWxlOworeworICAgIGludAkgICAgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwlpZiAodmltX3N0cmNocihmaWxlW2ldLCAnJCcpICE9IE5VTEwpCisJICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgkvKiBpZm5kZWYgX19FTVhfXyAqLworCisjaWZuZGVmIEhBVkVfUkVOQU1FCisvKgorICogU2NhbGVkLWRvd24gdmVyc2lvbiBvZiByZW5hbWUoKSwgd2hpY2ggaXMgbWlzc2luZyBpbiBYZW5peC4KKyAqIFRoaXMgdmVyc2lvbiBjYW4gb25seSBtb3ZlIHJlZ3VsYXIgZmlsZXMgYW5kIHdpbGwgZmFpbCBpZiB0aGUKKyAqIGRlc3RpbmF0aW9uIGV4aXN0cy4KKyAqLworICAgIGludAorbWNoX3JlbmFtZShzcmMsIGRlc3QpCisgICAgY29uc3QgY2hhciAqc3JjLCAqZGVzdDsKK3sKKyAgICBzdHJ1Y3Qgc3RhdAkgICAgc3Q7CisKKyAgICBpZiAoc3RhdChkZXN0LCAmc3QpID49IDApCSAgICAvKiBmYWlsIGlmIGRlc3RpbmF0aW9uIGV4aXN0cyAqLworCXJldHVybiAtMTsKKyAgICBpZiAobGluayhzcmMsIGRlc3QpICE9IDApCSAgICAvKiBsaW5rIGZpbGUgdG8gbmV3IG5hbWUgKi8KKwlyZXR1cm4gLTE7CisgICAgaWYgKG1jaF9yZW1vdmUoc3JjKSA9PSAwKQkgICAgLyogZGVsZXRlIGxpbmsgdG8gb2xkIG5hbWUgKi8KKwlyZXR1cm4gMDsKKyAgICByZXR1cm4gLTE7Cit9CisjZW5kaWYgLyogIUhBVkVfUkVOQU1FICovCisKKyNpZmRlZiBGRUFUX01PVVNFX0dQTQorLyoKKyAqIEluaXRpYWxpemVzIGNvbm5lY3Rpb24gd2l0aCBncG0gKGlmIGl0IGlzbid0IGFscmVhZHkgb3BlbmVkKQorICogUmV0dXJuIDEgaWYgc3VjY2VlZGVkIChvciBjb25uZWN0aW9uIGFscmVhZHkgb3BlbmVkKSwgMCBpZiBmYWlsZWQKKyAqLworICAgIHN0YXRpYyBpbnQKK2dwbV9vcGVuKCkKK3sKKyAgICBzdGF0aWMgR3BtX0Nvbm5lY3QgZ3BtX2Nvbm5lY3Q7IC8qIE11c3QgaXQgYmUga2VwdCB0aWxsIGNsb3NpbmcgPyAqLworCisgICAgaWYgKCFncG1fZmxhZykKKyAgICB7CisJZ3BtX2Nvbm5lY3QuZXZlbnRNYXNrID0gKEdQTV9VUCB8IEdQTV9EUkFHIHwgR1BNX0RPV04pOworCWdwbV9jb25uZWN0LmRlZmF1bHRNYXNrID0gfkdQTV9IQVJEOworCS8qIERlZmF1bHQgaGFuZGxpbmcgZm9yIG1vdXNlIG1vdmUqLworCWdwbV9jb25uZWN0Lm1pbk1vZCA9IDA7IC8qIEhhbmRsZSBhbnkgbW9kaWZpZXIga2V5cyAqLworCWdwbV9jb25uZWN0Lm1heE1vZCA9IDB4ZmZmZjsKKwlpZiAoR3BtX09wZW4oJmdwbV9jb25uZWN0LCAwKSA+IDApCisJeworCSAgICAvKiBncG0gbGlicmFyeSB0cmllcyB0byBoYW5kbGluZyBUU1RQIGNhdXNlcworCSAgICAgKiBwcm9ibGVtcy4gQW55d2F5cywgd2UgY2xvc2UgY29ubmVjdGlvbiB0byBHcG0gd2hlbmV2ZXIKKwkgICAgICogd2UgYXJlIGdvaW5nIHRvIHN1c3BlbmQgb3Igc3RhcnRpbmcgYW4gZXh0ZXJuYWwgcHJvY2VzcworCSAgICAgKiBzbyB3ZSBzaG91bGQnbnQgIGhhdmUgcHJvYmxlbSB3aXRoIHRoaXMKKwkgICAgICovCisJICAgIHNpZ25hbChTSUdUU1RQLCByZXN0cmljdGVkID8gU0lHX0lHTiA6IFNJR19ERkwpOworCSAgICByZXR1cm4gMTsgLyogc3VjY2VlZCAqLworCX0KKwlpZiAoZ3BtX2ZkID09IC0yKQorCSAgICBHcG1fQ2xvc2UoKTsgLyogV2UgZG9uJ3Qgd2FudCB0byB0YWxrIHRvIHh0ZXJtIHZpYSBncG0gKi8KKwlyZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDE7IC8qIGFscmVhZHkgb3BlbiAqLworfQorCisvKgorICogQ2xvc2VzIGNvbm5lY3Rpb24gdG8gZ3BtCisgKiByZXR1cm5zIG5vbi16ZXJvIGlmIGNvbm5lY3Rpb24gc3VjY2VzZnVsbHkgY2xvc2VkCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZ3BtX2Nsb3NlKCkKK3sKKyAgICBpZiAoZ3BtX2ZsYWcgJiYgZ3BtX2ZkID49IDApIC8qIGlmIE9wZW4gKi8KKwlHcG1fQ2xvc2UoKTsKK30KKworLyogUmVhZHMgZ3BtIGV2ZW50IGFuZCBhZGRzIHNwZWNpYWwga2V5cyB0byBpbnB1dCBidWYuIFJldHVybnMgbGVuZ3RoIG9mCisgKiBnZW5lcmF0ZWQga2V5IHNlcXVlbmNlLgorICogVGhpcyBmdW5jdGlvbiBpcyBtYWRlIGFmdGVyIGd1aV9zZW5kX21vdXNlX2V2ZW50CisgKi8KKyAgICBzdGF0aWMgaW50CittY2hfZ3BtX3Byb2Nlc3MoKQoreworICAgIGludAkJCWJ1dHRvbjsKKyAgICBzdGF0aWMgR3BtX0V2ZW50CWdwbV9ldmVudDsKKyAgICBjaGFyX3UJCXN0cmluZ1s2XTsKKyAgICBpbnRfdQkJdmltX21vZGlmaWVyczsKKyAgICBpbnQJCQlyb3csY29sOworICAgIHVuc2lnbmVkIGNoYXIJYnV0dG9uc19tYXNrOworICAgIHVuc2lnbmVkIGNoYXIJZ3BtX21vZGlmaWVyczsKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBvbGRfYnV0dG9ucyA9IDA7CisKKyAgICBHcG1fR2V0RXZlbnQoJmdwbV9ldmVudCk7CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIC8qIERvbid0IHB1dCBldmVudHMgaW4gdGhlIGlucHV0IHF1ZXVlIG5vdy4gKi8KKyAgICBpZiAoaG9sZF9ndWlfZXZlbnRzKQorCXJldHVybiAwOworI2VuZGlmCisKKyAgICByb3cgPSBncG1fZXZlbnQueSAtIDE7CisgICAgY29sID0gZ3BtX2V2ZW50LnggLSAxOworCisgICAgc3RyaW5nWzBdID0gRVNDOyAvKiBPdXIgdGVybWNvZGUgKi8KKyAgICBzdHJpbmdbMV0gPSAnTSc7CisgICAgc3RyaW5nWzJdID0gJ0cnOworICAgIHN3aXRjaCAoR1BNX0JBUkVfRVZFTlRTKGdwbV9ldmVudC50eXBlKSkKKyAgICB7CisJY2FzZSBHUE1fRFJBRzoKKwkgICAgc3RyaW5nWzNdID0gTU9VU0VfRFJBRzsKKwkgICAgYnJlYWs7CisJY2FzZSBHUE1fRE9XTjoKKwkgICAgYnV0dG9uc19tYXNrID0gZ3BtX2V2ZW50LmJ1dHRvbnMgJiB+b2xkX2J1dHRvbnM7CisJICAgIG9sZF9idXR0b25zID0gZ3BtX2V2ZW50LmJ1dHRvbnM7CisJICAgIHN3aXRjaCAoYnV0dG9uc19tYXNrKQorCSAgICB7CisJCWNhc2UgR1BNX0JfTEVGVDoKKwkJICAgIGJ1dHRvbiA9IE1PVVNFX0xFRlQ7CisJCSAgICBicmVhazsKKwkJY2FzZSBHUE1fQl9NSURETEU6CisJCSAgICBidXR0b24gPSBNT1VTRV9NSURETEU7CisJCSAgICBicmVhazsKKwkJY2FzZSBHUE1fQl9SSUdIVDoKKwkJICAgIGJ1dHRvbiA9IE1PVVNFX1JJR0hUOworCQkgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICByZXR1cm4gMDsKKwkJICAgIC8qRG9uJ3Qga25vdyB3aGF0IHRvIGRvLiBDYW4gbW9yZSB0aGFuIG9uZSBidXR0b24gYmUKKwkJICAgICAqIHJlcG9ydGVkIGluIG9uZSBldmVudD8gKi8KKwkgICAgfQorCSAgICBzdHJpbmdbM10gPSAoY2hhcl91KShidXR0b24gfCAweDIwKTsKKwkgICAgU0VUX05VTV9NT1VTRV9DTElDS1Moc3RyaW5nWzNdLCBncG1fZXZlbnQuY2xpY2tzICsgMSk7CisJICAgIGJyZWFrOworCWNhc2UgR1BNX1VQOgorCSAgICBzdHJpbmdbM10gPSBNT1VTRV9SRUxFQVNFOworCSAgICBvbGRfYnV0dG9ucyAmPSB+Z3BtX2V2ZW50LmJ1dHRvbnM7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHJldHVybiAwOworICAgIH0KKyAgICAvKlRoaXMgY29kZSBpcyBiYXNlZCBvbiBndWlfeDExX21vdXNlX2NiIGluIGd1aV94MTEuYyAqLworICAgIGdwbV9tb2RpZmllcnMgPSBncG1fZXZlbnQubW9kaWZpZXJzOworICAgIHZpbV9tb2RpZmllcnMgPSAweDA7CisgICAgLyogSSBpZ25vcmUgY2Fwc2xvY2sgc3RhdHMuIEFyZW4ndCB3ZSBhbGwganVzdCBoYXRlIGNhcHNsb2NrIG1peGluZyB3aXRoCisgICAgICogVmltIGNvbW1hbmRzID8gQmVzaWRlcywgZ3BtX2V2ZW50Lm1vZGlmaWVycyBpcyB1bnNpZ25lZCBjaGFyLCBhbmQKKyAgICAgKiBLX0NBUFNTSElGVCBpcyBkZWZpbmVkIDgsIHNvIGl0IHByb2JhYmx5IGlzbid0IGV2ZW4gcmVwb3J0ZWQKKyAgICAgKi8KKyAgICBpZiAoZ3BtX21vZGlmaWVycyAmICgoMSA8PCBLR19TSElGVCkgfCAoMSA8PCBLR19TSElGVFIpIHwgKDEgPDwgS0dfU0hJRlRMKSkpCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9TSElGVDsKKworICAgIGlmIChncG1fbW9kaWZpZXJzICYgKCgxIDw8IEtHX0NUUkwpIHwgKDEgPDwgS0dfQ1RSTFIpIHwgKDEgPDwgS0dfQ1RSTEwpKSkKKwl2aW1fbW9kaWZpZXJzIHw9IE1PVVNFX0NUUkw7CisgICAgaWYgKGdwbV9tb2RpZmllcnMgJiAoKDEgPDwgS0dfQUxUKSB8ICgxIDw8IEtHX0FMVEdSKSkpCisJdmltX21vZGlmaWVycyB8PSBNT1VTRV9BTFQ7CisgICAgc3RyaW5nWzNdIHw9IHZpbV9tb2RpZmllcnM7CisgICAgc3RyaW5nWzRdID0gKGNoYXJfdSkoY29sICsgJyAnICsgMSk7CisgICAgc3RyaW5nWzVdID0gKGNoYXJfdSkocm93ICsgJyAnICsgMSk7CisgICAgYWRkX3RvX2lucHV0X2J1ZihzdHJpbmcsIDYpOworICAgIHJldHVybiA2OworfQorI2VuZGlmIC8qIEZFQVRfTU9VU0VfR1BNICovCisKKyNpZiBkZWZpbmVkKEZFQVRfTElCQ0FMTCkgfHwgZGVmaW5lZChQUk9UTykKK3R5cGVkZWYgY2hhcl91ICogKCpTVFJQUk9DU1RSKV9fQVJHUygoY2hhcl91ICopKTsKK3R5cGVkZWYgY2hhcl91ICogKCpJTlRQUk9DU1RSKV9fQVJHUygoaW50KSk7Cit0eXBlZGVmIGludCAoKlNUUlBST0NJTlQpX19BUkdTKChjaGFyX3UgKikpOwordHlwZWRlZiBpbnQgKCpJTlRQUk9DSU5UKV9fQVJHUygoaW50KSk7CisKKy8qCisgKiBDYWxsIGEgRExMIHJvdXRpbmUgd2hpY2ggdGFrZXMgZWl0aGVyIGEgc3RyaW5nIG9yIGludCBwYXJhbQorICogYW5kIHJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZy4KKyAqLworICAgIGludAorbWNoX2xpYmNhbGwobGlibmFtZSwgZnVuY25hbWUsIGFyZ3N0cmluZywgYXJnaW50LCBzdHJpbmdfcmVzdWx0LCBudW1iZXJfcmVzdWx0KQorICAgIGNoYXJfdQkqbGlibmFtZTsKKyAgICBjaGFyX3UJKmZ1bmNuYW1lOworICAgIGNoYXJfdQkqYXJnc3RyaW5nOwkvKiBOVUxMIHdoZW4gdXNpbmcgYSBhcmdpbnQgKi8KKyAgICBpbnQJCWFyZ2ludDsKKyAgICBjaGFyX3UJKipzdHJpbmdfcmVzdWx0Oy8qIE5VTEwgd2hlbiB1c2luZyBudW1iZXJfcmVzdWx0ICovCisgICAgaW50CQkqbnVtYmVyX3Jlc3VsdDsKK3sKKyMgaWYgZGVmaW5lZChVU0VfRExPUEVOKQorICAgIHZvaWQJKmhpbnN0TGliOworIyBlbHNlCisgICAgc2hsX3QJaGluc3RMaWI7CisjIGVuZGlmCisgICAgU1RSUFJPQ1NUUglQcm9jQWRkOworICAgIElOVFBST0NTVFIJUHJvY0FkZEk7CisgICAgY2hhcl91CSpyZXR2YWxfc3RyID0gTlVMTDsKKyAgICBpbnQJCXJldHZhbF9pbnQgPSAwOworICAgIGludAkJc3VjY2VzcyA9IEZBTFNFOworCisgICAgLyogR2V0IGEgaGFuZGxlIHRvIHRoZSBETEwgbW9kdWxlLiAqLworIyBpZiBkZWZpbmVkKFVTRV9ETE9QRU4pCisgICAgaGluc3RMaWIgPSBkbG9wZW4oKGNoYXIgKilsaWJuYW1lLCBSVExEX0xBWlkKKyMgIGlmZGVmIFJUTERfTE9DQUwKKwkgICAgfCBSVExEX0xPQ0FMCisjICBlbmRpZgorCSAgICApOworIyBlbHNlCisgICAgaGluc3RMaWIgPSBzaGxfbG9hZCgoY29uc3QgY2hhciopbGlibmFtZSwgQklORF9JTU1FRElBVEV8QklORF9WRVJCT1NFLCAwTCk7CisjIGVuZGlmCisKKyAgICAvKiBJZiB0aGUgaGFuZGxlIGlzIHZhbGlkLCB0cnkgdG8gZ2V0IHRoZSBmdW5jdGlvbiBhZGRyZXNzLiAqLworICAgIGlmIChoaW5zdExpYiAhPSBOVUxMKQorICAgIHsKKyMgaWZkZWYgSEFWRV9TRVRKTVBfSAorCS8qCisJICogQ2F0Y2ggYSBjcmFzaCB3aGVuIGNhbGxpbmcgdGhlIGxpYnJhcnkgZnVuY3Rpb24uICBGb3IgZXhhbXBsZSB3aGVuCisJICogdXNpbmcgYSBudW1iZXIgd2hlcmUgYSBzdHJpbmcgcG9pbnRlciBpcyBleHBlY3RlZC4KKwkgKi8KKwltY2hfc3RhcnRqbXAoKTsKKwlpZiAoU0VUSk1QKGxjX2p1bXBfZW52KSAhPSAwKQorCXsKKwkgICAgc3VjY2VzcyA9IEZBTFNFOworCSAgICBtY2hfZGlkam1wKCk7CisJfQorCWVsc2UKKyMgZW5kaWYKKwl7CisJICAgIHJldHZhbF9zdHIgPSBOVUxMOworCSAgICByZXR2YWxfaW50ID0gMDsKKworCSAgICBpZiAoYXJnc3RyaW5nICE9IE5VTEwpCisJICAgIHsKKyMgaWYgZGVmaW5lZChVU0VfRExPUEVOKQorCQlQcm9jQWRkID0gKFNUUlBST0NTVFIpZGxzeW0oaGluc3RMaWIsIChjb25zdCBjaGFyICopZnVuY25hbWUpOworIyBlbHNlCisJCWlmIChzaGxfZmluZHN5bSgmaGluc3RMaWIsIChjb25zdCBjaGFyICopZnVuY25hbWUsCisJCQkJCVRZUEVfUFJPQ0VEVVJFLCAodm9pZCAqKSZQcm9jQWRkKSA8IDApCisJCSAgICBQcm9jQWRkID0gTlVMTDsKKyMgZW5kaWYKKwkJaWYgKChzdWNjZXNzID0gKFByb2NBZGQgIT0gTlVMTCkpKQorCQl7CisJCSAgICBpZiAoc3RyaW5nX3Jlc3VsdCA9PSBOVUxMKQorCQkJcmV0dmFsX2ludCA9ICgoU1RSUFJPQ0lOVClQcm9jQWRkKShhcmdzdHJpbmcpOworCQkgICAgZWxzZQorCQkJcmV0dmFsX3N0ciA9IChQcm9jQWRkKShhcmdzdHJpbmcpOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisjIGlmIGRlZmluZWQoVVNFX0RMT1BFTikKKwkJUHJvY0FkZEkgPSAoSU5UUFJPQ1NUUilkbHN5bShoaW5zdExpYiwgKGNvbnN0IGNoYXIgKilmdW5jbmFtZSk7CisjIGVsc2UKKwkJaWYgKHNobF9maW5kc3ltKCZoaW5zdExpYiwgKGNvbnN0IGNoYXIgKilmdW5jbmFtZSwKKwkJCQkgICAgICAgVFlQRV9QUk9DRURVUkUsICh2b2lkICopJlByb2NBZGRJKSA8IDApCisJCSAgICBQcm9jQWRkSSA9IE5VTEw7CisjIGVuZGlmCisJCWlmICgoc3VjY2VzcyA9IChQcm9jQWRkSSAhPSBOVUxMKSkpCisJCXsKKwkJICAgIGlmIChzdHJpbmdfcmVzdWx0ID09IE5VTEwpCisJCQlyZXR2YWxfaW50ID0gKChJTlRQUk9DSU5UKVByb2NBZGRJKShhcmdpbnQpOworCQkgICAgZWxzZQorCQkJcmV0dmFsX3N0ciA9IChQcm9jQWRkSSkoYXJnaW50KTsKKwkJfQorCSAgICB9CisKKwkgICAgLyogU2F2ZSB0aGUgc3RyaW5nIGJlZm9yZSB3ZSBmcmVlIHRoZSBsaWJyYXJ5LiAqLworCSAgICAvKiBBc3N1bWUgdGhhdCBhICIxIiBvciAiLTEiIHJlc3VsdCBpcyBhbiBpbGxlZ2FsIHBvaW50ZXIuICovCisJICAgIGlmIChzdHJpbmdfcmVzdWx0ID09IE5VTEwpCisJCSpudW1iZXJfcmVzdWx0ID0gcmV0dmFsX2ludDsKKwkgICAgZWxzZSBpZiAocmV0dmFsX3N0ciAhPSBOVUxMCisJCSAgICAmJiByZXR2YWxfc3RyICE9IChjaGFyX3UgKikxCisJCSAgICAmJiByZXR2YWxfc3RyICE9IChjaGFyX3UgKiktMSkKKwkJKnN0cmluZ19yZXN1bHQgPSB2aW1fc3Ryc2F2ZShyZXR2YWxfc3RyKTsKKwl9CisKKyMgaWZkZWYgSEFWRV9TRVRKTVBfSAorCW1jaF9lbmRqbXAoKTsKKyMgIGlmZGVmIFNJR0hBU0FSRworCWlmIChsY19zaWduYWwgIT0gMCkKKwl7CisJICAgIGludCBpOworCisJICAgIC8qIHRyeSB0byBmaW5kIHRoZSBuYW1lIG9mIHRoaXMgc2lnbmFsICovCisJICAgIGZvciAoaSA9IDA7IHNpZ25hbF9pbmZvW2ldLnNpZyAhPSAtMTsgaSsrKQorCQlpZiAobGNfc2lnbmFsID09IHNpZ25hbF9pbmZvW2ldLnNpZykKKwkJICAgIGJyZWFrOworCSAgICBFTVNHMigiRTM2ODogZ290IFNJRyVzIGluIGxpYmNhbGwoKSIsIHNpZ25hbF9pbmZvW2ldLm5hbWUpOworCX0KKyMgIGVuZGlmCisjIGVuZGlmCisKKwkvKiBGcmVlIHRoZSBETEwgbW9kdWxlLiAqLworIyBpZiBkZWZpbmVkKFVTRV9ETE9QRU4pCisJKHZvaWQpZGxjbG9zZShoaW5zdExpYik7CisjIGVsc2UKKwkodm9pZClzaGxfdW5sb2FkKGhpbnN0TGliKTsKKyMgZW5kaWYKKyAgICB9CisKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgeworCUVNU0cyKF8oZV9saWJjYWxsKSwgZnVuY25hbWUpOworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRkVBVF9YMTEpICYmIGRlZmluZWQoRkVBVF9YQ0xJUEJPQVJEKSkgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBpbnQJeHRlcm1fdHJhY2UgPSAtMTsJLyogZGVmYXVsdDogZGlzYWJsZWQgKi8KK3N0YXRpYyBpbnQJeHRlcm1fYnV0dG9uOworCisvKgorICogU2V0dXAgYSBkdW1teSB3aW5kb3cgZm9yIFggc2VsZWN0aW9ucyBpbiBhIHRlcm1pbmFsLgorICovCisgICAgdm9pZAorc2V0dXBfdGVybV9jbGlwKCkKK3sKKyAgICBpbnQJCXogPSAwOworICAgIGNoYXIJKnN0cnAgPSAiIjsKKyAgICBXaWRnZXQJQXBwU2hlbGw7CisKKyAgICBpZiAoIXhfY29ubmVjdF90b19zZXJ2ZXIoKSkKKwlyZXR1cm47CisKKyAgICBvcGVuX2FwcF9jb250ZXh0KCk7CisgICAgaWYgKGFwcF9jb250ZXh0ICE9IE5VTEwgJiYgeHRlcm1fU2hlbGwgPT0gKFdpZGdldCkwKQorICAgIHsKKwlpbnQgKCpvbGRoYW5kbGVyKSgpOworI2lmIGRlZmluZWQoSEFWRV9TRVRKTVBfSCkKKwlpbnQgKCpvbGRJT2hhbmRsZXIpKCk7CisjZW5kaWYKKyMgaWYgZGVmaW5lZChIQVZFX0dFVFRJTUVPRkRBWSkgJiYgZGVmaW5lZChIQVZFX1NZU19USU1FX0gpCisJc3RydWN0IHRpbWV2YWwgIHN0YXJ0X3R2OworCisJaWYgKHBfdmVyYm9zZSA+IDApCisJICAgIGdldHRpbWVvZmRheSgmc3RhcnRfdHYsIE5VTEwpOworIyBlbmRpZgorCisJLyogSWdub3JlIFggZXJyb3JzIHdoaWxlIG9wZW5pbmcgdGhlIGRpc3BsYXkgKi8KKwlvbGRoYW5kbGVyID0gWFNldEVycm9ySGFuZGxlcih4X2Vycm9yX2NoZWNrKTsKKworI2lmIGRlZmluZWQoSEFWRV9TRVRKTVBfSCkKKwkvKiBJZ25vcmUgWCBJTyBlcnJvcnMgd2hpbGUgb3BlbmluZyB0aGUgZGlzcGxheSAqLworCW9sZElPaGFuZGxlciA9IFhTZXRJT0Vycm9ySGFuZGxlcih4X0lPZXJyb3JfY2hlY2spOworCW1jaF9zdGFydGptcCgpOworCWlmIChTRVRKTVAobGNfanVtcF9lbnYpICE9IDApCisJeworCSAgICBtY2hfZGlkam1wKCk7CisJICAgIHh0ZXJtX2RweSA9IE5VTEw7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgeHRlcm1fZHB5ID0gWHRPcGVuRGlzcGxheShhcHBfY29udGV4dCwgeHRlcm1fZGlzcGxheSwKKwkJICAgICJ2aW1feHRlcm0iLCAiVmltX3h0ZXJtIiwgTlVMTCwgMCwgJnosICZzdHJwKTsKKyNpZiBkZWZpbmVkKEhBVkVfU0VUSk1QX0gpCisJICAgIG1jaF9lbmRqbXAoKTsKKyNlbmRpZgorCX0KKworI2lmIGRlZmluZWQoSEFWRV9TRVRKTVBfSCkKKwkvKiBOb3cgaGFuZGxlIFggSU8gZXJyb3JzIG5vcm1hbGx5LiAqLworCSh2b2lkKVhTZXRJT0Vycm9ySGFuZGxlcihvbGRJT2hhbmRsZXIpOworI2VuZGlmCisJLyogTm93IGhhbmRsZSBYIGVycm9ycyBub3JtYWxseS4gKi8KKwkodm9pZClYU2V0RXJyb3JIYW5kbGVyKG9sZGhhbmRsZXIpOworCisJaWYgKHh0ZXJtX2RweSA9PSBOVUxMKQorCXsKKwkgICAgaWYgKHBfdmVyYm9zZSA+IDApCisJCU1TRyhfKCJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIikpOworCSAgICByZXR1cm47CisJfQorCisJLyogQ2F0Y2ggdGVybWluYXRpbmcgZXJyb3Igb2YgdGhlIFggc2VydmVyIGNvbm5lY3Rpb24uICovCisJKHZvaWQpWFNldElPRXJyb3JIYW5kbGVyKHhfSU9lcnJvcl9oYW5kbGVyKTsKKworIyBpZiBkZWZpbmVkKEhBVkVfR0VUVElNRU9GREFZKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1RJTUVfSCkKKwlpZiAocF92ZXJib3NlID4gMCkKKwkgICAgeG9wZW5fbWVzc2FnZSgmc3RhcnRfdHYpOworIyBlbmRpZgorCisJLyogQ3JlYXRlIGEgU2hlbGwgdG8gbWFrZSBjb252ZXJ0ZXJzIHdvcmsuICovCisJQXBwU2hlbGwgPSBYdFZhQXBwQ3JlYXRlU2hlbGwoInZpbV94dGVybSIsICJWaW1feHRlcm0iLAorCQlhcHBsaWNhdGlvblNoZWxsV2lkZ2V0Q2xhc3MsIHh0ZXJtX2RweSwKKwkJTlVMTCk7CisJaWYgKEFwcFNoZWxsID09IChXaWRnZXQpMCkKKwkgICAgcmV0dXJuOworCXh0ZXJtX1NoZWxsID0gWHRWYUNyZWF0ZVBvcHVwU2hlbGwoIlZJTSIsCisJCXRvcExldmVsU2hlbGxXaWRnZXRDbGFzcywgQXBwU2hlbGwsCisJCVh0Tm1hcHBlZFdoZW5NYW5hZ2VkLCAwLAorCQlYdE53aWR0aCwgMSwKKwkJWHROaGVpZ2h0LCAxLAorCQlOVUxMKTsKKwlpZiAoeHRlcm1fU2hlbGwgPT0gKFdpZGdldCkwKQorCSAgICByZXR1cm47CisKKwl4MTFfc2V0dXBfYXRvbXMoeHRlcm1fZHB5KTsKKwlpZiAoeDExX2Rpc3BsYXkgPT0gTlVMTCkKKwkgICAgeDExX2Rpc3BsYXkgPSB4dGVybV9kcHk7CisKKwlYdFJlYWxpemVXaWRnZXQoeHRlcm1fU2hlbGwpOworCVhTeW5jKHh0ZXJtX2RweSwgRmFsc2UpOworCXh0ZXJtX3VwZGF0ZSgpOworICAgIH0KKyAgICBpZiAoeHRlcm1fU2hlbGwgIT0gKFdpZGdldCkwKQorICAgIHsKKwljbGlwX2luaXQoVFJVRSk7CisJaWYgKHgxMV93aW5kb3cgPT0gMCAmJiAoc3RycCA9IGdldGVudigiV0lORE9XSUQiKSkgIT0gTlVMTCkKKwkgICAgeDExX3dpbmRvdyA9IChXaW5kb3cpYXRvbChzdHJwKTsKKwkvKiBDaGVjayBpZiAkV0lORE9XSUQgaXMgdmFsaWQuICovCisJaWYgKHRlc3RfeDExX3dpbmRvdyh4dGVybV9kcHkpID09IEZBSUwpCisJICAgIHgxMV93aW5kb3cgPSAwOworCWlmICh4MTFfd2luZG93ICE9IDApCisJICAgIHh0ZXJtX3RyYWNlID0gMDsKKyAgICB9Cit9CisKKyAgICB2b2lkCitzdGFydF94dGVybV90cmFjZShidXR0b24pCisgICAgaW50IGJ1dHRvbjsKK3sKKyAgICBpZiAoeDExX3dpbmRvdyA9PSAwIHx8IHh0ZXJtX3RyYWNlIDwgMCB8fCB4dGVybV9TaGVsbCA9PSAoV2lkZ2V0KTApCisJcmV0dXJuOworICAgIHh0ZXJtX3RyYWNlID0gMTsKKyAgICB4dGVybV9idXR0b24gPSBidXR0b247CisgICAgZG9feHRlcm1fdHJhY2UoKTsKK30KKworCisgICAgdm9pZAorc3RvcF94dGVybV90cmFjZSgpCit7CisgICAgaWYgKHh0ZXJtX3RyYWNlIDwgMCkKKwlyZXR1cm47CisgICAgeHRlcm1fdHJhY2UgPSAwOworfQorCisvKgorICogUXVlcnkgdGhlIHh0ZXJtIHBvaW50ZXIgYW5kIGdlbmVyYXRlIG1vdXNlIHRlcm1jb2RlcyBpZiBuZWNlc3NhcnkKKyAqIHJldHVybiBUUlVFIGlmIGRyYWdnaW5nIGlzIGFjdGl2ZSwgZWxzZSBGQUxTRQorICovCisgICAgc3RhdGljIGludAorZG9feHRlcm1fdHJhY2UoKQoreworICAgIFdpbmRvdwkJcm9vdCwgY2hpbGQ7CisgICAgaW50CQkJcm9vdF94LCByb290X3k7CisgICAgaW50CQkJd2luX3gsIHdpbl95OworICAgIGludAkJCXJvdywgY29sOworICAgIGludF91CQltYXNrX3JldHVybjsKKyAgICBjaGFyX3UJCWJ1Zls1MF07CisgICAgY2hhcl91CQkqc3RycDsKKyAgICBsb25nCQlnb3RfaGludHM7CisgICAgc3RhdGljIGNoYXJfdQkqbW91c2VfY29kZTsKKyAgICBzdGF0aWMgY2hhcl91CW1vdXNlX25hbWVbMl0gPSB7S1NfTU9VU0UsIEtFX0ZJTExFUn07CisgICAgc3RhdGljIGludAkJcHJldl9yb3cgPSAwLCBwcmV2X2NvbCA9IDA7CisgICAgc3RhdGljIFhTaXplSGludHMJeHRlcm1faGludHM7CisKKyAgICBpZiAoeHRlcm1fdHJhY2UgPD0gMCkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoeHRlcm1fdHJhY2UgPT0gMSkKKyAgICB7CisJLyogR2V0IHRoZSBoaW50cyBqdXN0IGJlZm9yZSB0cmFja2luZyBzdGFydHMuICBUaGUgZm9udCBzaXplIG1pZ2h0CisJICogaGF2ZSBjaGFuZ2VkIHJlY2VudGx5ICovCisJWEdldFdNTm9ybWFsSGludHMoeHRlcm1fZHB5LCB4MTFfd2luZG93LCAmeHRlcm1faGludHMsICZnb3RfaGludHMpOworCWlmICghKGdvdF9oaW50cyAmIFBSZXNpemVJbmMpCisJCXx8IHh0ZXJtX2hpbnRzLndpZHRoX2luYyA8PSAxCisJCXx8IHh0ZXJtX2hpbnRzLmhlaWdodF9pbmMgPD0gMSkKKwl7CisJICAgIHh0ZXJtX3RyYWNlID0gLTE7ICAvKiBOb3QgZW5vdWdoIGRhdGEgLS0gZGlzYWJsZSB0cmFjaW5nICovCisJICAgIHJldHVybiBGQUxTRTsKKwl9CisKKwkvKiBSZWx5IG9uIHRoZSBzYW1lIG1vdXNlIGNvZGUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzICovCisJbW91c2VfY29kZSA9IGZpbmRfdGVybWNvZGUobW91c2VfbmFtZSk7CisJcHJldl9yb3cgPSBtb3VzZV9yb3c7CisJcHJldl9yb3cgPSBtb3VzZV9jb2w7CisJeHRlcm1fdHJhY2UgPSAyOworCisJLyogRmluZCB0aGUgb2Zmc2V0IG9mIHRoZSBjaGFycywgdGhlcmUgbWlnaHQgYmUgYSBzY3JvbGxiYXIgb24gdGhlCisJICogbGVmdCBvZiB0aGUgd2luZG93IGFuZC9vciBhIG1lbnUgb24gdGhlIHRvcCAoZXRlcm0gZXRjLikgKi8KKwlYUXVlcnlQb2ludGVyKHh0ZXJtX2RweSwgeDExX3dpbmRvdywgJnJvb3QsICZjaGlsZCwgJnJvb3RfeCwgJnJvb3RfeSwKKwkJICAgICAgJndpbl94LCAmd2luX3ksICZtYXNrX3JldHVybik7CisJeHRlcm1faGludHMueSA9IHdpbl95IC0gKHh0ZXJtX2hpbnRzLmhlaWdodF9pbmMgKiBtb3VzZV9yb3cpCisJCQkgICAgICAtICh4dGVybV9oaW50cy5oZWlnaHRfaW5jIC8gMik7CisJaWYgKHh0ZXJtX2hpbnRzLnkgPD0geHRlcm1faGludHMuaGVpZ2h0X2luYyAvIDIpCisJICAgIHh0ZXJtX2hpbnRzLnkgPSAyOworCXh0ZXJtX2hpbnRzLnggPSB3aW5feCAtICh4dGVybV9oaW50cy53aWR0aF9pbmMgKiBtb3VzZV9jb2wpCisJCQkgICAgICAtICh4dGVybV9oaW50cy53aWR0aF9pbmMgLyAyKTsKKwlpZiAoeHRlcm1faGludHMueCA8PSB4dGVybV9oaW50cy53aWR0aF9pbmMgLyAyKQorCSAgICB4dGVybV9oaW50cy54ID0gMjsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKG1vdXNlX2NvZGUgPT0gTlVMTCkKKyAgICB7CisJeHRlcm1fdHJhY2UgPSAwOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBYUXVlcnlQb2ludGVyKHh0ZXJtX2RweSwgeDExX3dpbmRvdywgJnJvb3QsICZjaGlsZCwgJnJvb3RfeCwgJnJvb3RfeSwKKwkJICAmd2luX3gsICZ3aW5feSwgJm1hc2tfcmV0dXJuKTsKKworICAgIHJvdyA9IGNoZWNrX3Jvdygod2luX3kgLSB4dGVybV9oaW50cy55KSAvIHh0ZXJtX2hpbnRzLmhlaWdodF9pbmMpOworICAgIGNvbCA9IGNoZWNrX2NvbCgod2luX3ggLSB4dGVybV9oaW50cy54KSAvIHh0ZXJtX2hpbnRzLndpZHRoX2luYyk7CisgICAgaWYgKHJvdyA9PSBwcmV2X3JvdyAmJiBjb2wgPT0gcHJldl9jb2wpCisJcmV0dXJuIFRSVUU7CisKKyAgICBTVFJDUFkoYnVmLCBtb3VzZV9jb2RlKTsKKyAgICBzdHJwID0gYnVmICsgU1RSTEVOKGJ1Zik7CisgICAgKnN0cnArKyA9ICh4dGVybV9idXR0b24gfCBNT1VTRV9EUkFHKSAmIH4weDIwOworICAgICpzdHJwKysgPSAoY2hhcl91KShjb2wgKyAnICcgKyAxKTsKKyAgICAqc3RycCsrID0gKGNoYXJfdSkocm93ICsgJyAnICsgMSk7CisgICAgKnN0cnAgPSAwOworICAgIGFkZF90b19pbnB1dF9idWYoYnVmLCBTVFJMRU4oYnVmKSk7CisKKyAgICBwcmV2X3JvdyA9IHJvdzsKKyAgICBwcmV2X2NvbCA9IGNvbDsKKyAgICByZXR1cm4gVFJVRTsKK30KKworIyBpZiBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIERlc3Ryb3kgdGhlIGRpc3BsYXksIHdpbmRvdyBhbmQgYXBwX2NvbnRleHQuICBSZXF1aXJlZCBmb3IgR1RLLgorICovCisgICAgdm9pZAorY2xlYXJfeHRlcm1fY2xpcCgpCit7CisgICAgaWYgKHh0ZXJtX1NoZWxsICE9IChXaWRnZXQpMCkKKyAgICB7CisJWHREZXN0cm95V2lkZ2V0KHh0ZXJtX1NoZWxsKTsKKwl4dGVybV9TaGVsbCA9IChXaWRnZXQpMDsKKyAgICB9CisgICAgaWYgKHh0ZXJtX2RweSAhPSBOVUxMKQorICAgIHsKKyNpZiAwCisJLyogTGVzc3RpZiBhbmQgU29sYXJpcyBjcmFzaCBoZXJlLCBsb3NlIHNvbWUgbWVtb3J5ICovCisJWHRDbG9zZURpc3BsYXkoeHRlcm1fZHB5KTsKKyNlbmRpZgorCWlmICh4MTFfZGlzcGxheSA9PSB4dGVybV9kcHkpCisJICAgIHgxMV9kaXNwbGF5ID0gTlVMTDsKKwl4dGVybV9kcHkgPSBOVUxMOworICAgIH0KKyNpZiAwCisgICAgaWYgKGFwcF9jb250ZXh0ICE9IChYdEFwcENvbnRleHQpTlVMTCkKKyAgICB7CisJLyogTGVzc3RpZiBhbmQgU29sYXJpcyBjcmFzaCBoZXJlLCBsb3NlIHNvbWUgbWVtb3J5ICovCisJWHREZXN0cm95QXBwbGljYXRpb25Db250ZXh0KGFwcF9jb250ZXh0KTsKKwlhcHBfY29udGV4dCA9IChYdEFwcENvbnRleHQpTlVMTDsKKyAgICB9CisjZW5kaWYKK30KKyMgZW5kaWYKKworLyoKKyAqIENhdGNoIHVwIHdpdGggYW55IHF1ZXVlZCBYIGV2ZW50cy4gIFRoaXMgbWF5IHB1dCBrZXlib2FyZCBpbnB1dCBpbnRvIHRoZQorICogaW5wdXQgYnVmZmVyLCBjYWxsIHJlc2l6ZSBjYWxsLWJhY2tzLCB0cmlnZ2VyIHRpbWVycyBldGMuICBJZiB0aGVyZSBpcworICogbm90aGluZyBpbiB0aGUgWCBldmVudCBxdWV1ZSAoJiBubyB0aW1lcnMgcGVuZGluZyksIHRoZW4gd2UgcmV0dXJuCisgKiBpbW1lZGlhdGVseS4KKyAqLworICAgIHN0YXRpYyB2b2lkCit4dGVybV91cGRhdGUoKQoreworICAgIFhFdmVudCBldmVudDsKKworICAgIHdoaWxlIChYdEFwcFBlbmRpbmcoYXBwX2NvbnRleHQpICYmICF2aW1faXNfaW5wdXRfYnVmX2Z1bGwoKSkKKyAgICB7CisJWHRBcHBOZXh0RXZlbnQoYXBwX2NvbnRleHQsICZldmVudCk7CisjaWZkZWYgRkVBVF9DTElFTlRTRVJWRVIKKwl7CisJICAgIFhQcm9wZXJ0eUV2ZW50ICplID0gKFhQcm9wZXJ0eUV2ZW50ICopJmV2ZW50OworCisJICAgIGlmIChlLT50eXBlID09IFByb3BlcnR5Tm90aWZ5ICYmIGUtPndpbmRvdyA9PSBjb21tV2luZG93CisJCSAgICYmIGUtPmF0b20gPT0gY29tbVByb3BlcnR5ICYmIGUtPnN0YXRlID09IFByb3BlcnR5TmV3VmFsdWUpCisJCXNlcnZlckV2ZW50UHJvYyh4dGVybV9kcHksICZldmVudCk7CisJfQorI2VuZGlmCisJWHREaXNwYXRjaEV2ZW50KCZldmVudCk7CisgICAgfQorfQorCisgICAgaW50CitjbGlwX3h0ZXJtX293bl9zZWxlY3Rpb24oY2JkKQorICAgIFZpbUNsaXBib2FyZCAqY2JkOworeworICAgIGlmICh4dGVybV9TaGVsbCAhPSAoV2lkZ2V0KTApCisJcmV0dXJuIGNsaXBfeDExX293bl9zZWxlY3Rpb24oeHRlcm1fU2hlbGwsIGNiZCk7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKyAgICB2b2lkCitjbGlwX3h0ZXJtX2xvc2Vfc2VsZWN0aW9uKGNiZCkKKyAgICBWaW1DbGlwYm9hcmQgKmNiZDsKK3sKKyAgICBpZiAoeHRlcm1fU2hlbGwgIT0gKFdpZGdldCkwKQorCWNsaXBfeDExX2xvc2Vfc2VsZWN0aW9uKHh0ZXJtX1NoZWxsLCBjYmQpOworfQorCisgICAgdm9pZAorY2xpcF94dGVybV9yZXF1ZXN0X3NlbGVjdGlvbihjYmQpCisgICAgVmltQ2xpcGJvYXJkICpjYmQ7Cit7CisgICAgaWYgKHh0ZXJtX1NoZWxsICE9IChXaWRnZXQpMCkKKwljbGlwX3gxMV9yZXF1ZXN0X3NlbGVjdGlvbih4dGVybV9TaGVsbCwgeHRlcm1fZHB5LCBjYmQpOworfQorCisgICAgdm9pZAorY2xpcF94dGVybV9zZXRfc2VsZWN0aW9uKGNiZCkKKyAgICBWaW1DbGlwYm9hcmQgKmNiZDsKK3sKKyAgICBjbGlwX3gxMV9zZXRfc2VsZWN0aW9uKGNiZCk7Cit9CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChVU0VfWFNNUCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDb2RlIGZvciBYIFNlc3Npb24gTWFuYWdlbWVudCBQcm90b2NvbC4KKyAqLworc3RhdGljIHZvaWQgeHNtcF9oYW5kbGVfc2F2ZV95b3Vyc2VsZiBfX0FSR1MoKFNtY0Nvbm4gc21jX2Nvbm4sIFNtUG9pbnRlciBjbGllbnRfZGF0YSwgaW50IHNhdmVfdHlwZSwgQm9vbCBzaHV0ZG93biwgaW50IGludGVyYWN0X3N0eWxlLCBCb29sIGZhc3QpKTsKK3N0YXRpYyB2b2lkIHhzbXBfZGllIF9fQVJHUygoU21jQ29ubiBzbWNfY29ubiwgU21Qb2ludGVyIGNsaWVudF9kYXRhKSk7CitzdGF0aWMgdm9pZCB4c21wX3NhdmVfY29tcGxldGUgX19BUkdTKChTbWNDb25uIHNtY19jb25uLCBTbVBvaW50ZXIgY2xpZW50X2RhdGEpKTsKK3N0YXRpYyB2b2lkIHhzbXBfc2h1dGRvd25fY2FuY2VsbGVkIF9fQVJHUygoU21jQ29ubiBzbWNfY29ubiwgU21Qb2ludGVyCWNsaWVudF9kYXRhKSk7CitzdGF0aWMgdm9pZCB4c21wX2ljZV9jb25uZWN0aW9uIF9fQVJHUygoSWNlQ29ubiBpY2VDb25uLCBJY2VQb2ludGVyIGNsaWVudERhdGEsIEJvb2wgb3BlbmluZywgSWNlUG9pbnRlciAqd2F0Y2hEYXRhKSk7CisKKworIyBpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKFVTRV9YU01QX0lOVEVSQUNUKQorc3RhdGljIHZvaWQgeHNtcF9oYW5kbGVfaW50ZXJhY3Rpb24gX19BUkdTKChTbWNDb25uIHNtY19jb25uLCBTbVBvaW50ZXIgY2xpZW50X2RhdGEpKTsKKworLyoKKyAqIFRoaXMgaXMgb3VyIGNoYW5jZSB0byBhc2sgdGhlIHVzZXIgaWYgdGhleSB3YW50IHRvIHNhdmUsCisgKiBvciBhYm9ydCB0aGUgbG9nb3V0CisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCit4c21wX2hhbmRsZV9pbnRlcmFjdGlvbihzbWNfY29ubiwgY2xpZW50X2RhdGEpCisgICAgU21jQ29ubglzbWNfY29ubjsKKyAgICBTbVBvaW50ZXIJY2xpZW50X2RhdGE7Cit7CisgICAgY21kbW9kX1QJc2F2ZV9jbWRtb2Q7CisgICAgaW50CQljYW5jZWxfc2h1dGRvd24gPSBGYWxzZTsKKworICAgIHNhdmVfY21kbW9kID0gY21kbW9kOworICAgIGNtZG1vZC5jb25maXJtID0gVFJVRTsKKyAgICBpZiAoY2hlY2tfY2hhbmdlZF9hbnkoRkFMU0UpKQorCS8qIE11c3RuJ3QgbG9nb3V0ICovCisJY2FuY2VsX3NodXRkb3duID0gVHJ1ZTsKKyAgICBjbWRtb2QgPSBzYXZlX2NtZG1vZDsKKyAgICBzZXRjdXJzb3IoKTsJCS8qIHBvc2l0aW9uIGN1cnNvciAqLworICAgIG91dF9mbHVzaCgpOworCisgICAgLyogRG9uZSBpbnRlcmFjdGlvbiAqLworICAgIFNtY0ludGVyYWN0RG9uZShzbWNfY29ubiwgY2FuY2VsX3NodXRkb3duKTsKKworICAgIC8qIEZpbmlzaCBvZmYKKyAgICAgKiBPbmx5IGVuZCBzYXZlLXlvdXJzZWxmIGhlcmUgaWYgd2UncmUgbm90IGNhbmNlbGxpbmcgc2h1dGRvd247CisgICAgICogd2UnbGwgZ2V0IGEgY2FuY2VsbGVkIGNhbGxiYWNrIGxhdGVyIGluIHdoaWNoIHdlJ2xsIGVuZCBpdC4KKyAgICAgKiBIb3BlZnVsbHkgZ2V0IGFyb3VuZCBnbGl0Y2h5IFNNcyAobGlrZSBHTk9NRS0xKQorICAgICAqLworICAgIGlmICghY2FuY2VsX3NodXRkb3duKQorICAgIHsKKwl4c21wLnNhdmVfeW91cnNlbGYgPSBGYWxzZTsKKwlTbWNTYXZlWW91cnNlbGZEb25lKHNtY19jb25uLCBUcnVlKTsKKyAgICB9Cit9CisjIGVuZGlmCisKKy8qCisgKiBDYWxsYmFjayB0aGF0IHN0YXJ0cyBzYXZlLXlvdXJzZWxmLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAoreHNtcF9oYW5kbGVfc2F2ZV95b3Vyc2VsZihzbWNfY29ubiwgY2xpZW50X2RhdGEsIHNhdmVfdHlwZSwKKwkJCQkJICAgICAgIHNodXRkb3duLCBpbnRlcmFjdF9zdHlsZSwgZmFzdCkKKyAgICBTbWNDb25uCXNtY19jb25uOworICAgIFNtUG9pbnRlcgljbGllbnRfZGF0YTsKKyAgICBpbnQJCXNhdmVfdHlwZTsKKyAgICBCb29sCXNodXRkb3duOworICAgIGludAkJaW50ZXJhY3Rfc3R5bGU7CisgICAgQm9vbAlmYXN0OworeworICAgIC8qIEhhbmRsZSBhbHJlYWR5IGJlaW5nIGluIHNhdmV5b3Vyc2VsZiAqLworICAgIGlmICh4c21wLnNhdmVfeW91cnNlbGYpCisJU21jU2F2ZVlvdXJzZWxmRG9uZShzbWNfY29ubiwgVHJ1ZSk7CisgICAgeHNtcC5zYXZlX3lvdXJzZWxmID0gVHJ1ZTsKKyAgICB4c21wLnNodXRkb3duID0gc2h1dGRvd247CisKKyAgICAvKiBGaXJzdCB1cCwgcHJlc2VydmUgYWxsIGZpbGVzICovCisgICAgb3V0X2ZsdXNoKCk7CisgICAgbWxfc3luY19hbGwoRkFMU0UsIEZBTFNFKTsJLyogcHJlc2VydmUgYWxsIHN3YXAgZmlsZXMgKi8KKworICAgIGlmIChwX3ZlcmJvc2UgPiAwKQorCU1TRyhfKCJYU01QIGhhbmRsaW5nIHNhdmUteW91cnNlbGYgcmVxdWVzdCIpKTsKKworIyBpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKFVTRV9YU01QX0lOVEVSQUNUKQorICAgIC8qIE5vdyBzZWUgaWYgd2UgY2FuIGFzayBhYm91dCB1bnNhdmVkIGZpbGVzICovCisgICAgaWYgKHNodXRkb3duICYmICFmYXN0ICYmIGd1aS5pbl91c2UpCisJLyogTmVlZCB0byBpbnRlcmFjdCB3aXRoIHVzZXIsIGJ1dCBuZWVkIFNNJ3MgcGVybWlzc2lvbiAqLworCVNtY0ludGVyYWN0UmVxdWVzdChzbWNfY29ubiwgU21EaWFsb2dFcnJvciwKKwkJCQkJeHNtcF9oYW5kbGVfaW50ZXJhY3Rpb24sIGNsaWVudF9kYXRhKTsKKyAgICBlbHNlCisjIGVuZGlmCisgICAgeworCS8qIENhbiBzdG9wIHRoZSBjeWNsZSBoZXJlICovCisJU21jU2F2ZVlvdXJzZWxmRG9uZShzbWNfY29ubiwgVHJ1ZSk7CisJeHNtcC5zYXZlX3lvdXJzZWxmID0gRmFsc2U7CisgICAgfQorfQorCisKKy8qCisgKiBDYWxsYmFjayB0byB3YXJuIHVzIG9mIGltbWluZW50IGRlYXRoLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAoreHNtcF9kaWUoc21jX2Nvbm4sIGNsaWVudF9kYXRhKQorICAgIFNtY0Nvbm4Jc21jX2Nvbm47CisgICAgU21Qb2ludGVyCWNsaWVudF9kYXRhOworeworICAgIHhzbXBfY2xvc2UoKTsKKworICAgIC8qIHF1aXQgcXVpY2tseSBsZWF2aW5nIHN3YXBmaWxlcyBmb3IgbW9kaWZpZWQgYnVmZmVycyBiZWhpbmQgKi8KKyAgICBnZXRvdXRfcHJlc2VydmVfbW9kaWZpZWQoMCk7Cit9CisKKworLyoKKyAqIENhbGxiYWNrIHRvIHRlbGwgdXMgdGhhdCBzYXZlLXlvdXJzZWxmIGhhcyBjb21wbGV0ZWQuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHN0YXRpYyB2b2lkCit4c21wX3NhdmVfY29tcGxldGUoc21jX2Nvbm4sIGNsaWVudF9kYXRhKQorICAgIFNtY0Nvbm4Jc21jX2Nvbm47CisgICAgU21Qb2ludGVyCWNsaWVudF9kYXRhOworeworICAgIHhzbXAuc2F2ZV95b3Vyc2VsZiA9IEZhbHNlOworfQorCisKKy8qCisgKiBDYWxsYmFjayB0byB0ZWxsIHVzIHRoYXQgYW4gaW5zdGlnYXRlZCBzaHV0ZG93biB3YXMgY2FuY2VsbGVkCisgKiAobWF5YmUgZXZlbiBieSB1cykKKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK3hzbXBfc2h1dGRvd25fY2FuY2VsbGVkKHNtY19jb25uLCBjbGllbnRfZGF0YSkKKyAgICBTbWNDb25uCXNtY19jb25uOworICAgIFNtUG9pbnRlcgljbGllbnRfZGF0YTsKK3sKKyAgICBpZiAoeHNtcC5zYXZlX3lvdXJzZWxmKQorCVNtY1NhdmVZb3Vyc2VsZkRvbmUoc21jX2Nvbm4sIFRydWUpOworICAgIHhzbXAuc2F2ZV95b3Vyc2VsZiA9IEZhbHNlOworICAgIHhzbXAuc2h1dGRvd24gPSBGYWxzZTsKK30KKworCisvKgorICogQ2FsbGJhY2sgdG8gdGVsbCB1cyB0aGF0IGEgbmV3IElDRSBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBzdGF0aWMgdm9pZAoreHNtcF9pY2VfY29ubmVjdGlvbihpY2VDb25uLCBjbGllbnREYXRhLCBvcGVuaW5nLCB3YXRjaERhdGEpCisgICAgSWNlQ29ubglpY2VDb25uOworICAgIEljZVBvaW50ZXIJY2xpZW50RGF0YTsKKyAgICBCb29sCW9wZW5pbmc7CisgICAgSWNlUG9pbnRlcgkqd2F0Y2hEYXRhOworeworICAgIC8qIEludGVyY2VwdCBjcmVhdGlvbiBvZiBJQ0UgY29ubmVjdGlvbiBmZCAqLworICAgIGlmIChvcGVuaW5nKQorICAgIHsKKwl4c21wX2ljZWZkID0gSWNlQ29ubmVjdGlvbk51bWJlcihpY2VDb25uKTsKKwlJY2VSZW1vdmVDb25uZWN0aW9uV2F0Y2goeHNtcF9pY2VfY29ubmVjdGlvbiwgTlVMTCk7CisgICAgfQorfQorCisKKy8qIEhhbmRsZSBhbnkgSUNFIHByb2Nlc3NpbmcgdGhhdCdzIHJlcXVpcmVkOyByZXR1cm4gRkFJTCBpZiBTTSBsb3N0ICovCisgICAgaW50Cit4c21wX2hhbmRsZV9yZXF1ZXN0cygpCit7CisgICAgQm9vbCByZXA7CisKKyAgICBpZiAoSWNlUHJvY2Vzc01lc3NhZ2VzKHhzbXAuaWNlY29ubiwgTlVMTCwgJnJlcCkKKwkJCQkJCSA9PSBJY2VQcm9jZXNzTWVzc2FnZXNJT0Vycm9yKQorICAgIHsKKwkvKiBMb3N0IElDRSAqLworCWlmIChwX3ZlcmJvc2UgPiAwKQorCSAgICBNU0coXygiWFNNUCBsb3N0IElDRSBjb25uZWN0aW9uIikpOworCXhzbXBfY2xvc2UoKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisgICAgZWxzZQorCXJldHVybiBPSzsKK30KKworc3RhdGljIGludCBkdW1teTsKKworLyogU2V0IHVwIFggU2Vzc2lvbiBNYW5hZ2VtZW50IFByb3RvY29sICovCisgICAgdm9pZAoreHNtcF9pbml0KHZvaWQpCit7CisgICAgY2hhcgkJZXJyb3JzdHJpbmdbODBdOworICAgIGNoYXIJCSpjbGllbnRpZDsKKyAgICBTbWNDYWxsYmFja3MJc21jYWxsYmFja3M7CisjaWYgMAorICAgIFNtUHJvcFZhbHVlCQlzbW5hbWU7CisgICAgU21Qcm9wCQlzbW5hbWVwcm9wOworICAgIFNtUHJvcAkJKnNtcHJvcHNbMV07CisjZW5kaWYKKworICAgIGlmIChwX3ZlcmJvc2UgPiAwKQorCU1TRyhfKCJYU01QIG9wZW5pbmcgY29ubmVjdGlvbiIpKTsKKworICAgIHhzbXAuc2F2ZV95b3Vyc2VsZiA9IHhzbXAuc2h1dGRvd24gPSBGYWxzZTsKKworICAgIC8qIFNldCB1cCBTTSBjYWxsYmFja3MgLSBtdXN0IGhhdmUgYWxsLCBldmVuIGlmIHRoZXkncmUgbm90IHVzZWQgKi8KKyAgICBzbWNhbGxiYWNrcy5zYXZlX3lvdXJzZWxmLmNhbGxiYWNrID0geHNtcF9oYW5kbGVfc2F2ZV95b3Vyc2VsZjsKKyAgICBzbWNhbGxiYWNrcy5zYXZlX3lvdXJzZWxmLmNsaWVudF9kYXRhID0gTlVMTDsKKyAgICBzbWNhbGxiYWNrcy5kaWUuY2FsbGJhY2sgPSB4c21wX2RpZTsKKyAgICBzbWNhbGxiYWNrcy5kaWUuY2xpZW50X2RhdGEgPSBOVUxMOworICAgIHNtY2FsbGJhY2tzLnNhdmVfY29tcGxldGUuY2FsbGJhY2sgPSB4c21wX3NhdmVfY29tcGxldGU7CisgICAgc21jYWxsYmFja3Muc2F2ZV9jb21wbGV0ZS5jbGllbnRfZGF0YSA9IE5VTEw7CisgICAgc21jYWxsYmFja3Muc2h1dGRvd25fY2FuY2VsbGVkLmNhbGxiYWNrID0geHNtcF9zaHV0ZG93bl9jYW5jZWxsZWQ7CisgICAgc21jYWxsYmFja3Muc2h1dGRvd25fY2FuY2VsbGVkLmNsaWVudF9kYXRhID0gTlVMTDsKKworICAgIC8qIFNldCB1cCBhIHdhdGNoIG9uIElDRSBjb25uZWN0aW9uIGNyZWF0aW9ucy4gIFRoZSAiZHVtbXkiIGFyZ3VtZW50IGlzCisgICAgICogYXBwYXJlbnRseSByZXF1aXJlZCBmb3IgRnJlZUJTRCAod2UgZ2V0IGEgQlVTIGVycm9yIHdoZW4gdXNpbmcgTlVMTCkuICovCisgICAgaWYgKEljZUFkZENvbm5lY3Rpb25XYXRjaCh4c21wX2ljZV9jb25uZWN0aW9uLCAmZHVtbXkpID09IDApCisgICAgeworCWlmIChwX3ZlcmJvc2UgPiAwKQorCSAgICBNU0coXygiWFNNUCBJQ0UgY29ubmVjdGlvbiB3YXRjaCBmYWlsZWQiKSk7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qIENyZWF0ZSBhbiBTTSBjb25uZWN0aW9uICovCisgICAgeHNtcC5zbWNjb25uID0gU21jT3BlbkNvbm5lY3Rpb24oCisJICAgIE5VTEwsCisJICAgIE5VTEwsCisJICAgIFNtUHJvdG9NYWpvciwKKwkgICAgU21Qcm90b01pbm9yLAorCSAgICBTbWNTYXZlWW91cnNlbGZQcm9jTWFzayB8IFNtY0RpZVByb2NNYXNrCisJCSAgICAgfCBTbWNTYXZlQ29tcGxldGVQcm9jTWFzayB8IFNtY1NodXRkb3duQ2FuY2VsbGVkUHJvY01hc2ssCisJICAgICZzbWNhbGxiYWNrcywKKwkgICAgTlVMTCwKKwkgICAgJmNsaWVudGlkLAorCSAgICBzaXplb2YoZXJyb3JzdHJpbmcpLAorCSAgICBlcnJvcnN0cmluZyk7CisgICAgaWYgKHhzbXAuc21jY29ubiA9PSBOVUxMKQorICAgIHsKKwljaGFyIGVycm9ycmVwb3J0WzEzMl07CisJc3ByaW50ZihlcnJvcnJlcG9ydCwgXygiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBmYWlsZWQ6ICVzIiksCisJCWVycm9yc3RyaW5nKTsKKwlpZiAocF92ZXJib3NlID4gMCkKKwkgICAgTVNHKGVycm9ycmVwb3J0KTsKKwlyZXR1cm47CisgICAgfQorICAgIHhzbXAuaWNlY29ubiA9IFNtY0dldEljZUNvbm5lY3Rpb24oeHNtcC5zbWNjb25uKTsKKworI2lmIDAKKyAgICAvKiBJRCBvdXJzZWx2ZXMgKi8KKyAgICBzbW5hbWUudmFsdWUgPSAidmltIjsKKyAgICBzbW5hbWUubGVuZ3RoID0gMzsKKyAgICBzbW5hbWVwcm9wLm5hbWUgPSAiU21Qcm9ncmFtIjsKKyAgICBzbW5hbWVwcm9wLnR5cGUgPSAiU21BUlJBWTgiOworICAgIHNtbmFtZXByb3AubnVtX3ZhbHMgPSAxOworICAgIHNtbmFtZXByb3AudmFscyA9ICZzbW5hbWU7CisKKyAgICBzbXByb3BzWzBdID0gJnNtbmFtZXByb3A7CisgICAgU21jU2V0UHJvcGVydGllcyh4c21wLnNtY2Nvbm4sIDEsIHNtcHJvcHMpOworI2VuZGlmCit9CisKKworLyogU2h1dCBkb3duIFhTTVAgY29tbXMuICovCisgICAgdm9pZAoreHNtcF9jbG9zZSgpCit7CisgICAgaWYgKHhzbXBfaWNlZmQgIT0gLTEpCisgICAgeworCVNtY0Nsb3NlQ29ubmVjdGlvbih4c21wLnNtY2Nvbm4sIDAsIE5VTEwpOworCXhzbXBfaWNlZmQgPSAtMTsKKyAgICB9Cit9CisjZW5kaWYgLyogVVNFX1hTTVAgKi8KKworCisjaWZkZWYgRUJDRElDCisvKiBUcmFuc2xhdGUgY2hhcmFjdGVyIHRvIGl0cyBDVFJMLSB2YWx1ZSAqLworY2hhciBDdHJsVGFibGVbXSA9Cit7CisvKiAwMCAtIDVFICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisvKiBeICovIDB4MUUsCisvKiAtICovIDB4MUYsCisvKiA2MSAtIDZDICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKy8qIF8gKi8gMHgxRiwKKy8qIDZFIC0gODAgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorLyogYSAqLyAweDAxLAorLyogYiAqLyAweDAyLAorLyogYyAqLyAweDAzLAorLyogZCAqLyAweDM3LAorLyogZSAqLyAweDJELAorLyogZiAqLyAweDJFLAorLyogZyAqLyAweDJGLAorLyogaCAqLyAweDE2LAorLyogaSAqLyAweDA1LAorLyogOEEgLSA5MCAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsCisvKiBqICovIDB4MTUsCisvKiBrICovIDB4MEIsCisvKiBsICovIDB4MEMsCisvKiBtICovIDB4MEQsCisvKiBuICovIDB4MEUsCisvKiBvICovIDB4MEYsCisvKiBwICovIDB4MTAsCisvKiBxICovIDB4MTEsCisvKiByICovIDB4MTIsCisvKiA5QSAtIEExICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKy8qIHMgKi8gMHgxMywKKy8qIHQgKi8gMHgzQywKKy8qIHUgKi8gMHgzRCwKKy8qIHYgKi8gMHgzMiwKKy8qIHcgKi8gMHgyNiwKKy8qIHggKi8gMHgxOCwKKy8qIHkgKi8gMHgxOSwKKy8qIHogKi8gMHgzRiwKKy8qIEFBIC0gQUMgKi8KKwkwLCAwLCAwLAorLyogWyAqLyAweDI3LAorLyogQUUgLSBCQyAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisvKiBdICovIDB4MUQsCisvKiBCRSAtIEMwICovIDAsIDAsIDAsCisvKiBBICovIDB4MDEsCisvKiBCICovIDB4MDIsCisvKiBDICovIDB4MDMsCisvKiBEICovIDB4MzcsCisvKiBFICovIDB4MkQsCisvKiBGICovIDB4MkUsCisvKiBHICovIDB4MkYsCisvKiBIICovIDB4MTYsCisvKiBJICovIDB4MDUsCisvKiBDQSAtIEQwICovIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisvKiBKICovIDB4MTUsCisvKiBLICovIDB4MEIsCisvKiBMICovIDB4MEMsCisvKiBNICovIDB4MEQsCisvKiBOICovIDB4MEUsCisvKiBPICovIDB4MEYsCisvKiBQICovIDB4MTAsCisvKiBRICovIDB4MTEsCisvKiBSICovIDB4MTIsCisvKiBEQSAtIERGICovIDAsIDAsIDAsIDAsIDAsIDAsCisvKiBcICovIDB4MUMsCisvKiBFMSAqLyAwLAorLyogUyAqLyAweDEzLAorLyogVCAqLyAweDNDLAorLyogVSAqLyAweDNELAorLyogViAqLyAweDMyLAorLyogVyAqLyAweDI2LAorLyogWCAqLyAweDE4LAorLyogWSAqLyAweDE5LAorLyogWiAqLyAweDNGLAorLyogRUEgLSBGRiovIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKK307CisKK2NoYXIgTWV0YUNoYXJUYWJsZVtdPQorey8qICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgIEEgICBCICAgQyAgIEQgICBFICAgRiAqLworICAgICAgMCwgIDAsICAwLCAgMCwnXFwnLCAwLCdGJywgIDAsJ1cnLCdNJywnTicsICAwLCAgMCwgIDAsICAwLCAgMCwKKyAgICAgIDAsICAwLCAgMCwgIDAsJ10nLCAgMCwgIDAsJ0cnLCAgMCwgIDAsJ1InLCdPJywgIDAsICAwLCAgMCwgIDAsCisgICAgJ0AnLCdBJywnQicsJ0MnLCdEJywnRScsICAwLCAgMCwnSCcsJ0knLCdKJywnSycsJ0wnLCAgMCwgIDAsICAwLAorICAgICdQJywnUScsICAwLCdTJywnVCcsJ1UnLCdWJywgIDAsJ1gnLCdZJywnWicsJ1snLCAgMCwgIDAsJ14nLCAgMAorfTsKKworCisvKiBUT0RPOiBVc2UgY2hhcmFjdGVycyBOT1QgbnVtYmVycyEhISAqLworY2hhciBDdHJsQ2hhclRhYmxlW109Cit7LyogICAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDggICA5ICAgQSAgIEIgICBDICAgRCAgIEUgICBGICovCisgICAgMTI0LDE5MywxOTQsMTk1LCAgMCwyMDEsICAwLCAgMCwgIDAsICAwLCAgMCwyMTAsMjExLDIxMiwyMTMsMjE0LAorICAgIDIxNSwyMTYsMjE3LDIyNiwgIDAsMjA5LDIwMCwgIDAsMjMxLDIzMiwgIDAsICAwLDIyNCwxODksIDk1LDEwOSwKKyAgICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwyMzAsMTczLCAgMCwgIDAsICAwLCAgMCwgIDAsMTk3LDE5OCwxOTksCisgICAgICAwLCAgMCwyMjksICAwLCAgMCwgIDAsICAwLDE5NiwgIDAsICAwLCAgMCwgIDAsMjI3LDIyOCwgIDAsMjMzLAorfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9vc191bml4LmggYi9zcmMvb3NfdW5peC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OGIyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3NfdW5peC5oCkBAIC0wLDAgKzEsNTMxIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisvKgorICogTmV4dFN0ZXAgaGFzIGEgcHJvYmxlbSB3aXRoIGNvbmZpZ3VyZSwgdW5kZWZpbmUgYSBmZXcgdGhpbmdzOgorICovCisjaWZkZWYgTmVYVAorIyBpZmRlZiBIQVZFX1VUSU1FCisjICB1bmRlZiBIQVZFX1VUSU1FCisjIGVuZGlmCisjIGlmZGVmIEhBVkVfU1lTX1VUU05BTUVfSAorIyAgdW5kZWYgSEFWRV9TWVNfVVRTTkFNRV9ICisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmZGVmIFZBWEMKKyMgaW5jbHVkZSA8dHlwZXMuaD4KKyMgaW5jbHVkZSA8c3RhdC5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1RETElCX0gKKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmZGVmIF9fRU1YX18KKyMgZGVmaW5lIEhBVkVfVE9UQUxfTUVNCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NZR1dJTjMyX18pCisjIGRlZmluZSBXSU4zMlVOSVgJLyogQ29tcGlsaW5nIGZvciBXaW4zMiB1c2luZyBVbml4IGZpbGVzLiAqLworIyBkZWZpbmUgQklOQVJZX0ZJTEVfSU8KKyNlbmRpZgorCisvKiBPbiBBSVggNC4yIHRoZXJlIGlzIGEgY29uZmxpY3RpbmcgcHJvdG90eXBlIGZvciBpb2N0bCgpIGluIHN0cm9wdHMuaCBhbmQKKyAqIHVuaXN0ZC5oLiAgVGhpcyBoYWNrIHNob3VsZCBmaXggdGhhdCAoc3VnZ2VzdGVkIGJ5IEplZmYgR2VvcmdlKS4KKyAqIEJ1dCBvbiBBSVggNC4zIGl0J3MgYWxyaWdodCAoc3VnZ2VzdGVkIGJ5IEpha2UgSGFtYnkpLiAqLworI2lmIGRlZmluZWQoRkVBVF9HVUkpICYmIGRlZmluZWQoX0FJWCkgJiYgIWRlZmluZWQoX0FJWDQzKSAmJiAhZGVmaW5lZChfTk9fUFJPVE8pCisjIGRlZmluZSBfTk9fUFJPVE8KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MSUJDX0gKKyMgaW5jbHVkZSA8bGliYy5oPgkJICAgIC8qIGZvciBOZVhUICovCisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CSAgICAvKiBkZWZpbmVzIEJTRCwgaWYgaXQncyBhIEJTRCBzeXN0ZW0gKi8KKyNlbmRpZgorCisvKgorICogU3VuIGRlZmluZXMgRklMRSBvbiBTdW5PUyA0LngueCwgU29sYXJpcyBoYXMgYSB0eXBlZGVmIGZvciBGSUxFCisgKi8KKyNpZiBkZWZpbmVkKHN1bikgJiYgIWRlZmluZWQoRklMRSkKKyMgZGVmaW5lIFNPTEFSSVMKKyNlbmRpZgorCisvKgorICogVXNpbmcgZ2V0Y3dkKCkgaXMgcHJlZmVycmVkLCBiZWNhdXNlIGl0IGNoZWNrcyBmb3IgYSBidWZmZXIgb3ZlcmZsb3cuCisgKiBEb24ndCB1c2UgZ2V0Y3dkKCkgb24gc3lzdGVtcyBkbyB1c2Ugc3lzdGVtKCJzaCAtYyBwd2QiKS4gIFRoZXJlIGlzIGFuCisgKiBhdXRvY29uZiBjaGVjayBmb3IgdGhpcy4KKyAqIFVzZSBnZXRjd2QoKSBhbnl3YXkgaWYgZ2V0d2QoKSBpc24ndCBwcmVzZW50LgorICovCisjaWYgZGVmaW5lZChIQVZFX0dFVENXRCkgJiYgIShkZWZpbmVkKEJBRF9HRVRDV0QpICYmIGRlZmluZWQoSEFWRV9HRVRXRCkpCisjIGRlZmluZSBVU0VfR0VUQ1dECisjZW5kaWYKKworI2lmbmRlZiBfX0FSR1MKKyAgICAvKiBUaGUgQUlYIFZpc3VhbEFnZSBjYyBjb21waWxlciBkZWZpbmVzIF9fRVhURU5ERURfXyBpbnN0ZWFkIG9mIF9fU1REQ19fCisgICAgICogYmVjYXVzZSBpdCBpbmNsdWRlcyBwcmUtYW5zaSBmZWF0dXJlcy4gKi8KKyMgaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0VYVEVOREVEX18pCisjICBkZWZpbmUgX19BUkdTKHgpIHgKKyMgZWxzZQorIyAgZGVmaW5lIF9fQVJHUyh4KSAoKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIGFsd2F5cyB1c2UgdW5saW5rKCkgdG8gcmVtb3ZlIGZpbGVzICovCisjaWZuZGVmIFBST1RPCisjIGlmZGVmIFZNUworIyAgZGVmaW5lIG1jaF9yZW1vdmUoeCkgZGVsZXRlKChjaGFyICopKHgpKQorIyAgZGVmaW5lIHZpbV9ta2Rpcih4LCB5KSBta2RpcigoY2hhciAqKSh4KSwgeSkKKyMgIGlmZGVmIFZBWAorIyAgZWxzZQorIyAgIGRlZmluZSBtY2hfcm1kaXIoeCkgcm1kaXIoKGNoYXIgKikoeCkpCisjICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgdmltX21rZGlyKHgsIHkpIG1rZGlyKChjaGFyICopKHgpLCB5KQorIyAgZGVmaW5lIG1jaF9ybWRpcih4KSBybWRpcigoY2hhciAqKSh4KSkKKyMgIGRlZmluZSBtY2hfcmVtb3ZlKHgpIHVubGluaygoY2hhciAqKSh4KSkKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhIHNpZ25hbCBoYW5kbGVyIGlzIGNvbmZpZ3VyZWQgaGVyZS4gKi8KKy8qIEl0IHVzZWQgdG8gYmUgYSBsb25nIGxpc3Qgb2YgYWxtb3N0IGFsbCBzeXN0ZW1zLiBBbnkgc3lzdGVtIHRoYXQgZG9lc24ndAorICogaGF2ZSBhbiBhcmd1bWVudD8/PyAqLworI2RlZmluZSBTSUdIQVNBUkcKKworLyogTGlzdCAzIGFyZyBzeXN0ZW1zIGhlcmUuIEkgZ3Vlc3MgX19zZ2ksIHBsZWFzZSB0ZXN0IGFuZCBjb3JyZWN0IG1lLiBqdy4gKi8KKyNpZiBkZWZpbmVkKF9fc2dpKSAmJiBkZWZpbmVkKEhBVkVfU0lHQ09OVEVYVCkKKyMgZGVmaW5lIFNJR0hBUzNBUkdTCisjZW5kaWYKKworI2lmZGVmIFNJR0hBU0FSRworIyBpZmRlZiBTSUdIQVMzQVJHUworIyAgZGVmaW5lIFNJR1BST1RPQVJHCShpbnQsIGludCwgc3RydWN0IHNpZ2NvbnRleHQgKikKKyMgIGRlZmluZSBTSUdERUZBUkcocykJKHMsIHNpZzIsIHNjb250KSBpbnQgcywgc2lnMjsgc3RydWN0IHNpZ2NvbnRleHQgKnNjb250OworIyAgZGVmaW5lIFNJR0RVTU1ZQVJHCTAsIDAsIChzdHJ1Y3Qgc2lnY29udGV4dCAqKTAKKyMgZWxzZQorIyAgZGVmaW5lIFNJR1BST1RPQVJHCShpbnQpCisjICBkZWZpbmUgU0lHREVGQVJHKHMpCShzKSBpbnQgczsKKyMgIGRlZmluZSBTSUdEVU1NWUFSRwkwCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgU0lHUFJPVE9BUkcgICAodm9pZCkKKyMgZGVmaW5lIFNJR0RFRkFSRyhzKSAgKCkKKyMgZGVmaW5lIFNJR0RVTU1ZQVJHCisjZW5kaWYKKworI2lmZGVmIEhBVkVfRElSRU5UX0gKKyMgaW5jbHVkZSA8ZGlyZW50Lmg+CisjIGlmbmRlZiBOQU1MRU4KKyMgIGRlZmluZSBOQU1MRU4oZGlyZW50KSBzdHJsZW4oKGRpcmVudCktPmRfbmFtZSkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBkaXJlbnQgZGlyZWN0CisjIGRlZmluZSBOQU1MRU4oZGlyZW50KSAoZGlyZW50KS0+ZF9uYW1sZW4KKyMgaWYgSEFWRV9TWVNfTkRJUl9ICisjICBpbmNsdWRlIDxzeXMvbmRpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX1NZU19ESVJfSAorIyAgaW5jbHVkZSA8c3lzL2Rpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX05ESVJfSAorIyAgaW5jbHVkZSA8bmRpci5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX1NZU19USU1FX0gpIHx8IGRlZmluZWQoVElNRV9XSVRIX1NZU19USU1FKQorIyBpbmNsdWRlIDx0aW1lLmg+CSAgICAvKiBvbiBzb21lIHN5c3RlbXMgdGltZS5oIHNob3VsZCBub3QgYmUKKwkJCSAgICAgICBpbmNsdWRlZCB0b2dldGhlciB3aXRoIHN5cy90aW1lLmggKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmIGRlZmluZWQoRElSU0laKSAmJiAhZGVmaW5lZChNQVhOQU1MRU4pCisjIGRlZmluZSBNQVhOQU1MRU4gRElSU0laCisjZW5kaWYKKworI2lmIGRlZmluZWQoVUZTX01BWE5BTUxFTikgJiYgIWRlZmluZWQoTUFYTkFNTEVOKQorIyBkZWZpbmUgTUFYTkFNTEVOIFVGU19NQVhOQU1MRU4gICAgLyogZm9yIGR5bml4L3B0eCAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE5BTUVfTUFYKSAmJiAhZGVmaW5lZChNQVhOQU1MRU4pCisjIGRlZmluZSBNQVhOQU1MRU4gTkFNRV9NQVgJICAgIC8qIGZvciBMaW51eCBiZWZvcmUgLjk5cDMgKi8KKyNlbmRpZgorCisvKgorICogTm90ZTogaWYgTUFYTkFNTEVOIGhhcyB0aGUgd3JvbmcgdmFsdWUsIHlvdSB3aWxsIGdldCBlcnJvciBtZXNzYWdlcworICoJIGZvciBub3QgYmVpbmcgYWJsZSB0byBvcGVuIHRoZSBzd2FwIGZpbGUuCisgKi8KKyNpZiAhZGVmaW5lZChNQVhOQU1MRU4pCisjIGRlZmluZSBNQVhOQU1MRU4gNTEyCQkgICAgLyogZm9yIGFsbCBvdGhlciBVbml4ICovCisjZW5kaWYKKworI2RlZmluZSBCQVNFTkFNRUxFTgkoTUFYTkFNTEVOIC0gNSkKKworI2lmZGVmIEhBVkVfRVJSTk9fSAorIyBpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BXRF9ICisjIGluY2x1ZGUgPHB3ZC5oPgorI2VuZGlmCisKKyNpZmRlZiBfX0NPSEVSRU5UX18KKyMgdW5kZWYgX19BUkdTCisjZW5kaWYKKworI2lmIChkZWZpbmVkKEhBVkVfU1lTX1JFU09VUkNFX0gpICYmIGRlZmluZWQoSEFWRV9HRVRSTElNSVQpKSBcCisJfHwgKGRlZmluZWQoSEFWRV9TWVNfU1lTSU5GT19IKSAmJiBkZWZpbmVkKEhBVkVfU1lTSU5GTykpIFwKKwl8fCBkZWZpbmVkKEhBVkVfU1lTQ1RMKSB8fCBkZWZpbmVkKEhBVkVfU1lTQ09ORikKKyMgZGVmaW5lIEhBVkVfVE9UQUxfTUVNCisjZW5kaWYKKworI2lmZGVmIFZNUworI2luY2x1ZGUgPHVuaXhpby5oPgorI2luY2x1ZGUgPHVuaXhsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxmaWxlLmg+CisjaW5jbHVkZSA8c3NkZWYuaD4KKyNpbmNsdWRlIDxkZXNjcmlwLmg+CisjaW5jbHVkZSA8bGliY2xpZGVmLmg+CisjaW5jbHVkZSA8bG5tZGVmLmg+CisjaW5jbHVkZSA8cHNsZGVmLmg+CisjaW5jbHVkZSA8cHJ2ZGVmLmg+CisjaW5jbHVkZSA8ZHZpZGVmLmg+CisjaW5jbHVkZSA8ZGNkZWYuaD4KKyNpbmNsdWRlIDxzdHNkZWYuaD4KKyNpbmNsdWRlIDxpb2RlZi5oPgorI2luY2x1ZGUgPHR0ZGVmLmg+CisjaW5jbHVkZSA8dHQyZGVmLmg+CisjaW5jbHVkZSA8anBpZGVmLmg+CisjaW5jbHVkZSA8cm1zLmg+CisjaW5jbHVkZSA8dHJtZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RhcmxldC5oPgorI2luY2x1ZGUgPHNvY2tldC5oPgorI2luY2x1ZGUgPGxpYiRyb3V0aW5lcy5oPgorCit0eXBlZGVmIHN0cnVjdCBkc2MkZGVzY3JpcHRvciAgIERFU0M7CisjZW5kaWYKKworLyoKKyAqIFVuaXggc3lzdGVtLWRlcGVuZGVudCBmaWxlIG5hbWVzCisgKi8KKyNpZm5kZWYgU1lTX1ZJTVJDX0ZJTEUKKyMgZGVmaW5lIFNZU19WSU1SQ19GSUxFICIkVklNL3ZpbXJjIgorI2VuZGlmCisjaWZuZGVmIFNZU19HVklNUkNfRklMRQorIyBkZWZpbmUgU1lTX0dWSU1SQ19GSUxFICIkVklNL2d2aW1yYyIKKyNlbmRpZgorI2lmbmRlZiBERkxUX0hFTFBGSUxFCisjIGRlZmluZSBERkxUX0hFTFBGSUxFCSIkVklNUlVOVElNRS9kb2MvaGVscC50eHQiCisjZW5kaWYKKyNpZm5kZWYgRklMRVRZUEVfRklMRQorIyBkZWZpbmUgRklMRVRZUEVfRklMRQkiZmlsZXR5cGUudmltIgorI2VuZGlmCisjaWZuZGVmIEZUUExVR0lOX0ZJTEUKKyMgZGVmaW5lIEZUUExVR0lOX0ZJTEUJImZ0cGx1Z2luLnZpbSIKKyNlbmRpZgorI2lmbmRlZiBJTkRFTlRfRklMRQorIyBkZWZpbmUgSU5ERU5UX0ZJTEUJImluZGVudC52aW0iCisjZW5kaWYKKyNpZm5kZWYgRlRPRkZfRklMRQorIyBkZWZpbmUgRlRPRkZfRklMRQkiZnRvZmYudmltIgorI2VuZGlmCisjaWZuZGVmIEZUUExVR09GX0ZJTEUKKyMgZGVmaW5lIEZUUExVR09GX0ZJTEUJImZ0cGx1Z29mLnZpbSIKKyNlbmRpZgorI2lmbmRlZiBJTkRPRkZfRklMRQorIyBkZWZpbmUgSU5ET0ZGX0ZJTEUJImluZG9mZi52aW0iCisjZW5kaWYKKyNpZm5kZWYgU1lTX01FTlVfRklMRQorIyBkZWZpbmUgU1lTX01FTlVfRklMRQkiJFZJTVJVTlRJTUUvbWVudS52aW0iCisjZW5kaWYKKworI2lmbmRlZiBVU1JfRVhSQ19GSUxFCisjIGlmZGVmIFZNUworIyAgZGVmaW5lIFVTUl9FWFJDX0ZJTEUgInN5cyRsb2dpbjouZXhyYyIKKyMgZWxzZQorIyAgZGVmaW5lIFVTUl9FWFJDX0ZJTEUgIiRIT01FLy5leHJjIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChVU1JfRVhSQ19GSUxFMikgJiYgZGVmaW5lZChPUzIpCisjIGRlZmluZSBVU1JfRVhSQ19GSUxFMiAiJFZJTS8uZXhyYyIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVTUl9FWFJDX0ZJTEUyKSAmJiBkZWZpbmVkKFZNUykKKyMgZGVmaW5lIFVTUl9FWFJDX0ZJTEUyICJzeXMkbG9naW46X2V4cmMiCisjZW5kaWYKKworI2lmbmRlZiBVU1JfVklNUkNfRklMRQorIyBpZmRlZiBWTVMKKyMgZGVmaW5lIFVTUl9WSU1SQ19GSUxFICAic3lzJGxvZ2luOi52aW1yYyIKKyMgZWxzZQorIyAgZGVmaW5lIFVTUl9WSU1SQ19GSUxFICIkSE9NRS8udmltcmMiCisjIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFVTUl9WSU1SQ19GSUxFMikgJiYgZGVmaW5lZChPUzIpCisjIGRlZmluZSBVU1JfVklNUkNfRklMRTIgIiRWSU0vLnZpbXJjIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVVNSX1ZJTVJDX0ZJTEUyKSAmJiBkZWZpbmVkKFZNUykKKyMgZGVmaW5lIFVTUl9WSU1SQ19GSUxFMiAic3lzJGxvZ2luOl92aW1yYyIKKyNlbmRpZgorCisjaWZuZGVmIFVTUl9HVklNUkNfRklMRQorIyBpZmRlZiBWTVMKKyMgIGRlZmluZSBVU1JfR1ZJTVJDX0ZJTEUgInN5cyRsb2dpbjouZ3ZpbXJjIgorIyBlbHNlCisjICBkZWZpbmUgVVNSX0dWSU1SQ19GSUxFICIkSE9NRS8uZ3ZpbXJjIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBWTVMKKyMgaWZuZGVmIFVTUl9HVklNUkNfRklMRTIKKyMgIGRlZmluZSBVU1JfR1ZJTVJDX0ZJTEUyICAic3lzJGxvZ2luOl9ndmltcmMiCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBFVklNX0ZJTEUKKyMgZGVmaW5lIEVWSU1fRklMRQkiJFZJTVJVTlRJTUUvZXZpbS52aW0iCisjZW5kaWYKKworI2lmZGVmIEZFQVRfVklNSU5GTworIyBpZm5kZWYgVklNSU5GT19GSUxFCisjICBpZmRlZiBWTVMKKyMgICBkZWZpbmUgVklNSU5GT19GSUxFICAic3lzJGxvZ2luOi52aW1pbmZvIgorIyAgZWxzZQorIyAgIGRlZmluZSBWSU1JTkZPX0ZJTEUgIiRIT01FLy52aW1pbmZvIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQoVklNSU5GT19GSUxFMikgJiYgZGVmaW5lZChPUzIpCisjICBkZWZpbmUgVklNSU5GT19GSUxFMiAiJFZJTS8udmltaW5mbyIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQoVklNSU5GT19GSUxFMikgJiYgZGVmaW5lZChWTVMpCisjICBkZWZpbmUgVklNSU5GT19GSUxFMiAic3lzJGxvZ2luOl92aW1pbmZvIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRVhSQ19GSUxFCisjIGRlZmluZSBFWFJDX0ZJTEUJIi5leHJjIgorI2VuZGlmCisKKyNpZm5kZWYgVklNUkNfRklMRQorIyBkZWZpbmUgVklNUkNfRklMRQkiLnZpbXJjIgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSQorIyBpZm5kZWYgR1ZJTVJDX0ZJTEUKKyMgIGRlZmluZSBHVklNUkNfRklMRQkiLmd2aW1yYyIKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFNZTlRBWF9GTkFNRQorIyBkZWZpbmUgU1lOVEFYX0ZOQU1FCSIkVklNUlVOVElNRS9zeW50YXgvJXMudmltIgorI2VuZGlmCisKKyNpZm5kZWYgREZMVF9CRElSCisjIGlmZGVmIE9TMgorIyAgZGVmaW5lIERGTFRfQkRJUiAgICAgIi4sYzovdG1wLH4vdG1wLH4vIgorIyBlbHNlCisjICBpZmRlZiBWTVMKKyMgICBkZWZpbmUgREZMVF9CRElSICAgICIuLyxzeXMkbG9naW46LHRtcDoiCisjICBlbHNlCisjICAgZGVmaW5lIERGTFRfQkRJUiAgICAiLix+L3RtcCx+LyIgICAgLyogZGVmYXVsdCBmb3IgJ2JhY2t1cGRpcicgKi8KKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBERkxUX0RJUgorIyBpZmRlZiBPUzIKKyMgIGRlZmluZSBERkxUX0RJUiAgICAgICIuLH4vdG1wLGM6L3RtcCwvdG1wIgorIyBlbHNlCisjICBpZmRlZiBWTVMKKyMgICBkZWZpbmUgREZMVF9ESVIgICAgICIuLyxzeXMkbG9naW46LHRtcDoiCisjICBlbHNlCisjICAgZGVmaW5lIERGTFRfRElSICAgICAiLix+L3RtcCwvdmFyL3RtcCwvdG1wIiAvKiBkZWZhdWx0IGZvciAnZGlyZWN0b3J5JyAqLworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIERGTFRfVkRJUgorIyBpZmRlZiBPUzIKKyMgIGRlZmluZSBERkxUX1ZESVIgICAgICIkVklNL3ZpbWZpbGVzL3ZpZXciCisjIGVsc2UKKyMgIGlmZGVmIFZNUworIyAgIGRlZmluZSBERkxUX1ZESVIgICAgInN5cyRsb2dpbjp2aW1maWxlcy92aWV3IgorIyAgZWxzZQorIyAgIGRlZmluZSBERkxUX1ZESVIgICAgIiRIT01FLy52aW0vdmlldyIgICAgICAgLyogZGVmYXVsdCBmb3IgJ3ZpZXdkaXInICovCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgREZMVF9FUlJPUkZJTEUJCSJlcnJvcnMuZXJyIgorCisjaWZkZWYgT1MyCisjIGRlZmluZSBERkxUX1JVTlRJTUVQQVRICSIkSE9NRS92aW1maWxlcywkVklNL3ZpbWZpbGVzLCRWSU1SVU5USU1FLCRWSU0vdmltZmlsZXMvYWZ0ZXIsJEhPTUUvdmltZmlsZXMvYWZ0ZXIiCisjZWxzZQorIyBpZmRlZiBWTVMKKyMgIGRlZmluZSBERkxUX1JVTlRJTUVQQVRIICAgICAgInN5cyRsb2dpbjp2aW1maWxlcywkVklNL3ZpbWZpbGVzLCRWSU1SVU5USU1FLCRWSU0vdmltZmlsZXMvYWZ0ZXIsc3lzJGxvZ2luOnZpbWZpbGVzL2FmdGVyIgorIyBlbHNlCisjICBpZmRlZiBSVU5USU1FX0dMT0JBTAorIyAgIGRlZmluZSBERkxUX1JVTlRJTUVQQVRICSJ+Ly52aW0sIiBSVU5USU1FX0dMT0JBTCAiLCRWSU1SVU5USU1FLCIgUlVOVElNRV9HTE9CQUwgIi9hZnRlcix+Ly52aW0vYWZ0ZXIiCisjICBlbHNlCisjICAgZGVmaW5lIERGTFRfUlVOVElNRVBBVEgJIn4vLnZpbSwkVklNL3ZpbWZpbGVzLCRWSU1SVU5USU1FLCRWSU0vdmltZmlsZXMvYWZ0ZXIsfi8udmltL2FmdGVyIgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgT1MyCisvKgorICogVHJ5IHNldmVyYWwgZGlyZWN0b3JpZXMgdG8gcHV0IHRoZSB0ZW1wIGZpbGVzLgorICovCisjIGRlZmluZSBURU1QRElSTkFNRVMJIiRUTVAiLCAiJFRFTVAiLCAiYzpcXFRNUCIsICJjOlxcVEVNUCIsICIiCisjIGRlZmluZSBURU1QTkFNRUxFTgkxMjgKKyNlbHNlCisjIGlmZGVmIFZNUworIyAgaWZuZGVmIFZBWAorIyAgIGRlZmluZSBWTVNfVEVNUE5BTSAgICAvKiB0byBmaXggZGVmYXVsdCAuTElTIGV4dGVuc2lvbiAqLworIyAgZW5kaWYKKyMgIGRlZmluZSBURU1QTkFNRSAgICAgICAiVE1QOnY/WFhYWFhYLnR4dCIKKyMgIGRlZmluZSBURU1QTkFNRUxFTiAgICAyOAorIyBlbHNlCisjICBkZWZpbmUgVEVNUERJUk5BTUVTICAiJFRNUERJUiIsICIvdG1wIiwgIi4iLCAiJEhPTUUiCisjICBkZWZpbmUgVEVNUE5BTUVMRU4gICAgMjU2CisjIGVuZGlmCisjZW5kaWYKKworLyogU3BlY2lhbCB3aWxkY2FyZHMgdGhhdCBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgdGhlIHNoZWxsICovCisjZGVmaW5lIFNQRUNJQUxfV0lMRENIQVIgICAgImAneyIKKworI2lmbmRlZiBIQVZFX09QRU5ESVIKKyMgZGVmaW5lIE5PX0VYUEFORFBBVEgKKyNlbmRpZgorCisvKgorICogVW5peCBoYXMgcGxlbnR5IG9mIG1lbW9yeSwgdXNlIGxhcmdlIGJ1ZmZlcnMKKyAqLworI2RlZmluZSBDTURCVUZGU0laRSAxMDI0CS8qIHNpemUgb2YgdGhlIGNvbW1hbmQgcHJvY2Vzc2luZyBidWZmZXIgKi8KKyNkZWZpbmUgTUFYUEFUSEwgICAgMTAyNAkvKiBVbml4IGhhcyBsb25nIHBhdGhzIGFuZCBwbGVudHkgb2YgbWVtb3J5ICovCisKKyNkZWZpbmUgQ0hFQ0tfSU5PREUJCS8qIHVzZWQgd2hlbiBjaGVja2luZyBpZiBhIHN3YXAgZmlsZSBhbHJlYWR5CisJCQkJICAgIGV4aXN0cyBmb3IgYSBmaWxlICovCisjaWZkZWYgVk1TICAvKiBVc2UgbGVzcyBtZW1vcnkgYmVjYXVzZSBvZiBvbGRlciBzeXN0ZW1zICAqLworIyBpZm5kZWYgREZMVF9NQVhNRU0KKyMgIGRlZmluZSBERkxUX01BWE1FTSAoMioxMDI0KQorIyBlbmRpZgorIyBpZm5kZWYgREZMVF9NQVhNRU1UT1QKKyMgIGRlZmluZSBERkxUX01BWE1FTVRPVCAoNSoxMDI0KQorIyBlbmRpZgorI2Vsc2UKKyMgaWZuZGVmIERGTFRfTUFYTUVNCisjICBkZWZpbmUgREZMVF9NQVhNRU0JKDUqMTAyNCkJIC8qIHVzZSB1cCB0byA1IE1ieXRlIGZvciBhIGJ1ZmZlciAqLworIyBlbmRpZgorIyBpZm5kZWYgREZMVF9NQVhNRU1UT1QKKyMgIGRlZmluZSBERkxUX01BWE1FTVRPVAkoMTAqMTAyNCkgICAgLyogdXNlIHVwIHRvIDEwIE1ieXRlIGZvciBWaW0gKi8KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBtZW1tb3ZlIGlzIG5vdCBwcmVzZW50IG9uIGFsbCBzeXN0ZW1zLCB1c2UgbWVtbW92ZSwgYmNvcHksIG1lbWNweSBvciBvdXIKKyAqIG93biB2ZXJzaW9uICovCisvKiBTb21lIHN5c3RlbXMgaGF2ZSAodm9pZCAqKSBhcmd1bWVudHMsIHNvbWUgKGNoYXIgKikuIElmIHdlIHVzZSAoY2hhciAqKSBpdAorICogd29ya3MgZm9yIGFsbCAqLworI2lmZGVmIFVTRU1FTU1PVkUKKyMgZGVmaW5lIG1jaF9tZW1tb3ZlKHRvLCBmcm9tLCBsZW4pIG1lbW1vdmUoKGNoYXIgKikodG8pLCAoY2hhciAqKShmcm9tKSwgbGVuKQorI2Vsc2UKKyMgaWZkZWYgVVNFQkNPUFkKKyMgIGRlZmluZSBtY2hfbWVtbW92ZSh0bywgZnJvbSwgbGVuKSBiY29weSgoY2hhciAqKShmcm9tKSwgKGNoYXIgKikodG8pLCBsZW4pCisjIGVsc2UKKyMgIGlmZGVmIFVTRU1FTUNQWQorIyAgIGRlZmluZSBtY2hfbWVtbW92ZSh0bywgZnJvbSwgbGVuKSBtZW1jcHkoKGNoYXIgKikodG8pLCAoY2hhciAqKShmcm9tKSwgbGVuKQorIyAgZWxzZQorIyAgIGRlZmluZSBWSU1fTUVNTU9WRQkgICAgLyogZm91bmQgaW4gbWlzYzIuYyAqLworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFBST1RPCisjIGlmZGVmIEhBVkVfUkVOQU1FCisjICBkZWZpbmUgbWNoX3JlbmFtZShzcmMsIGRzdCkgcmVuYW1lKHNyYywgZHN0KQorIyBlbHNlCitpbnQgbWNoX3JlbmFtZSBfX0FSR1MoKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCkpOworIyBlbmRpZgorIyBpZmRlZiBWTVMKKyMgIGRlZmluZSBtY2hfY2hkaXIocykgY2hkaXIodm1zX2ZpeGZpbGVuYW1lKHMpKQorIyBlbHNlCisjICBkZWZpbmUgbWNoX2NoZGlyKHMpIGNoZGlyKHMpCisjIGVuZGlmCisjIGlmbmRlZiBWTVMKKyMgIGlmZGVmIF9fTVZTX18KKyAgLyogb24gT1MzOTAgVW5peCBnZXRlbnYoKSBkb2Vzbid0IHJldHVybiBhIHBvaW50ZXIgdG8gcGVyc2lzdGFudAorICAgKiBzdG9yYWdlIC0+IHVzZSBfX2dldGVudigpICovCisjICAgZGVmaW5lIG1jaF9nZXRlbnYoeCkgKGNoYXJfdSAqKV9fZ2V0ZW52KChjaGFyICopKHgpKQorIyAgZWxzZQorIyAgIGRlZmluZSBtY2hfZ2V0ZW52KHgpIChjaGFyX3UgKilnZXRlbnYoKGNoYXIgKikoeCkpCisjICBlbmRpZgorIyAgZGVmaW5lIG1jaF9zZXRlbnYobmFtZSwgdmFsLCB4KSBzZXRlbnYobmFtZSwgdmFsLCB4KQorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTX0lTRElSKSAmJiBkZWZpbmVkKFNfSUZESVIpCisjIGRlZmluZQlTX0lTRElSKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGRElSKQorI2VuZGlmCisjaWYgIWRlZmluZWQoU19JU1JFRykgJiYgZGVmaW5lZChTX0lGUkVHKQorIyBkZWZpbmUJU19JU1JFRyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNfSVNCTEspICYmIGRlZmluZWQoU19JRkJMSykKKyMgZGVmaW5lCVNfSVNCTEsobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZCTEspCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTX0lTU09DSykgJiYgZGVmaW5lZChTX0lGU09DSykKKyMgZGVmaW5lCVNfSVNTT0NLKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGU09DSykKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNfSVNGSUZPKSAmJiBkZWZpbmVkKFNfSUZJRk8pCisjIGRlZmluZQlTX0lTRklGTyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRklGTykKKyNlbmRpZgorCisvKiBOb3RlOiBTb21lIHN5c3RlbXMgbmVlZCBib3RoIHN0cmluZy5oIGFuZCBzdHJpbmdzLmggKFNhdmFnZSkuICBIb3dldmVyLAorICogc29tZSBzeXN0ZW1zIGNhbid0IGhhbmRsZSBib3RoLCBvbmx5IHVzZSBzdHJpbmcuaCBpbiB0aGF0IGNhc2UuICovCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9TVFJJTkdTX0gpICYmICFkZWZpbmVkKE5PX1NUUklOR1NfV0lUSF9TVFJJTkdfSCkKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VUSk1QX0gpCisjIGluY2x1ZGUgPHNldGptcC5oPgorIyBpZmRlZiBIQVZFX1NJR1NFVEpNUAorIyAgZGVmaW5lIEpNUF9CVUYgc2lnam1wX2J1ZgorIyAgZGVmaW5lIFNFVEpNUCh4KSBzaWdzZXRqbXAoKHgpLCAxKQorIyAgZGVmaW5lIExPTkdKTVAgc2lnbG9uZ2ptcAorIyBlbHNlCisjICBkZWZpbmUgSk1QX0JVRiBqbXBfYnVmCisjICBkZWZpbmUgU0VUSk1QKHgpIHNldGptcCh4KQorIyAgZGVmaW5lIExPTkdKTVAgbG9uZ2ptcAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgSEFWRV9EVVAJCS8qIGhhdmUgZHVwKCkgKi8KKyNkZWZpbmUgSEFWRV9TVF9NT0RFCQkvKiBoYXZlIHN0YXQuc3RfbW9kZSAqLworCisvKiBXZSBoYXZlIHRocmVlIGtpbmRzIG9mIEFDTCBzdXBwb3J0LiAqLworI2RlZmluZSBIQVZFX0FDTCAoSEFWRV9QT1NJWF9BQ0wgfHwgSEFWRV9TT0xBUklTX0FDTCB8fCBIQVZFX0FJWF9BQ0wpCmRpZmYgLS1naXQgYS9zcmMvb3NfdW5peHguaCBiL3NyYy9vc191bml4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNGY3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3NfdW5peHguaApAQCAtMCwwICsxLDEzMCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworLyoKKyAqIG9zX3VuaXh4LmggLS0gaW5jbHVkZSBmaWxlcyB0aGF0IGFyZSBvbmx5IHVzZWQgaW4gb3NfdW5peC5jCisgKi8KKworLyoKKyAqIFN0dWZmIGZvciBzaWduYWxzCisgKi8KKyNpZiBkZWZpbmVkKEhBVkVfU0lHU0VUKSAmJiAhZGVmaW5lZChzaWduYWwpCisjIGRlZmluZSBzaWduYWwgc2lnc2V0CisjZW5kaWYKKworICAgLyogc3VuJ3Mgc3lzL2lvY3RsLmggcmVkZWZpbmVzIHN5bWJvbHMgZnJvbSB0ZXJtaW8gd29ybGQgKi8KKyNpZiBkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpICYmICFkZWZpbmVkKHN1bikKKyMgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2lmbmRlZiBVU0VfU1lTVEVNCS8qIHVzZSBmb3JrL2V4ZWMgdG8gc3RhcnQgdGhlIHNoZWxsICovCisKKyMgaWYgZGVmaW5lZChIQVZFX1NZU19XQUlUX0gpIHx8IGRlZmluZWQoSEFWRV9VTklPTl9XQUlUKQorIyAgaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkKEhBVkVfU1lTX1NFTEVDVF9IKSAmJiBcCisJKCFkZWZpbmVkKEhBVkVfU1lTX1RJTUVfSCkgfHwgZGVmaW5lZChTWVNfU0VMRUNUX1dJVEhfU1lTX1RJTUUpKQorIyAgaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorIyBlbmRpZgorCisjIGlmbmRlZiBXRVhJVFNUQVRVUworIyAgaWZkZWYgSEFWRV9VTklPTl9XQUlUCisjICAgZGVmaW5lIFdFWElUU1RBVFVTKHN0YXRfdmFsKSAoKHN0YXRfdmFsKS53X1Qud19SZXRjb2RlKQorIyAgZWxzZQorIyAgIGRlZmluZSBXRVhJVFNUQVRVUyhzdGF0X3ZhbCkgKCgoc3RhdF92YWwpID4+IDgpICYgMDM3NykKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIFdJRkVYSVRFRAorIyAgaWZkZWYgSEFWRV9VTklPTl9XQUlUCisjICAgZGVmaW5lIFdJRkVYSVRFRChzdGF0X3ZhbCkgKChzdGF0X3ZhbCkud19ULndfVGVybXNpZyA9PSAwKQorIyAgZWxzZQorIyAgIGRlZmluZSBXSUZFWElURUQoc3RhdF92YWwpICgoKHN0YXRfdmFsKSAmIDI1NSkgPT0gMCkKKyMgIGVuZGlmCisjIGVuZGlmCisKKyNlbmRpZiAvKiAhVVNFX1NZU1RFTSAqLworCisjaWZkZWYgSEFWRV9TVFJPUFRTX0gKKyNpZmRlZiBzaW5peAorI2RlZmluZSBidWZfVCBfX3N5c3RlbV9idWZfdF9fCisjZW5kaWYKKyMgaW5jbHVkZSA8c3Ryb3B0cy5oPgorI2lmZGVmIHNpbml4CisjdW5kZWYgYnVmX1QKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NUUklOR19ICisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TRUxFQ1QKKyMgaWZkZWYgSEFWRV9TWVNfUE9MTF9ICisjICBpbmNsdWRlIDxzeXMvcG9sbC5oPgorIyBlbHNlCisjICBpZmRlZiBIQVZFX1BPTExfSAorIyAgIGluY2x1ZGUgPHBvbGwuaD4KKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1NUUkVBTV9ICisjIGluY2x1ZGUgPHN5cy9zdHJlYW0uaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfVVRTTkFNRV9ICisjIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1NZU1RFTUlORk9fSAorLyoKKyAqIGZvb2xpc2ggU2luaXggPHN5cy9zeXN0ZW1pbmZvLmg+IHVzZXMgU1lTX05NTE4gYnV0IGRvZXNuJ3QgaW5jbHVkZQorICogPGxpbWl0cy5oPiwgd2hlcmUgaXQgaXMgZGVmaW5lZC4gUGVyaGFwcyBvdGhlciBzeXN0ZW1zIGhhdmUgdGhlIHNhbWUKKyAqIHByb2JsZW0/IEluY2x1ZGUgaXQgaGVyZS4gLS0gU2xvb3RtYW4KKyAqLworIyBpZiBkZWZpbmVkKEhBVkVfTElNSVRTX0gpICYmICFkZWZpbmVkKF9MSU1JVFNfSCkKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgkJLyogZm9yIFNZU19OTUxOIChTaW5peCA1LjQxIC8gVW5peCBTeXNWLjQpICovCisjIGVuZGlmCisjIGluY2x1ZGUgPHN5cy9zeXN0ZW1pbmZvLmg+CS8qIGZvciBzeXNpbmZvICovCisjZW5kaWYKKworLyoKKyAqIFdlIHVzZSB0ZXJtaW9zLmggaWYgYm90aCB0ZXJtaW9zLmggYW5kIHRlcm1pby5oIGFyZSBhdmFpbGFibGUuCisgKiBUZXJtaW9zIGlzIHN1cHBvc2VkIHRvIGJlIGEgc3VwZXJzZXQgb2YgdGVybWlvLmguICBEb24ndCBpbmNsdWRlIHRoZW0gYm90aCwKKyAqIGl0IG1heSBnaXZlIHByb2JsZW1zIG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBocHV4KS4KKyAqIEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgd2UgZG9uJ3Qgd2FudCB0ZXJtaW9zLmggZm9yIGFwb2xsby4KKyAqLworI2lmIGRlZmluZWQoSEFWRV9URVJNSU9TX0gpICYmICFkZWZpbmVkKGFwb2xsbykKKyMgIGluY2x1ZGUgPHRlcm1pb3MuaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfVEVSTUlPX0gKKyMgIGluY2x1ZGUgPHRlcm1pby5oPgorIyBlbHNlCisjICBpZmRlZiBIQVZFX1NHVFRZX0gKKyMgICBpbmNsdWRlIDxzZ3R0eS5oPgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfUFRFTV9ICisjIGluY2x1ZGUgPHN5cy9wdGVtLmg+CS8qIG11c3QgYmUgYWZ0ZXIgdGVybWlvcy5oIGZvciBTaW5peCAqLworIyBpZm5kZWYgX0lPX1BURU1fSAkvKiBGb3IgVW5peFdhcmUgdGhhdCBzaG91bGQgY2hlY2sgZm9yIF9JT19QVF9QVEVNX0ggKi8KKyMgIGRlZmluZSBfSU9fUFRFTV9ICisjIGVuZGlmCisjZW5kaWYKKworLyogc2hhcmVkIGxpYnJhcnkgYWNjZXNzICovCisjaWYgZGVmaW5lZChIQVZFX0RMRkNOX0gpICYmIGRlZmluZWQoVVNFX0RMT1BFTikKKyMgaW5jbHVkZSA8ZGxmY24uaD4KKyNlbHNlCisjIGlmIGRlZmluZWQoSEFWRV9ETF9IKSAmJiBkZWZpbmVkKEhBVkVfU0hMX0xPQUQpCisjICBpbmNsdWRlIDxkbC5oPgorIyBlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3Nfdm1zLmMgYi9zcmMvb3Nfdm1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1ZWNhNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc192bXMuYwpAQCAtMCwwICsxLDY1NyBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAkJYnkgQnJhbSBNb29sZW5hYXIKKyAqIFZNUyBwb3J0CQkJYnkgSGVuayBFbGJlcnMKKyAqIFZNUyBkZXBvcnQJCQlieSBab2x0YW4gQXJwYWRmZnkKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworI2luY2x1ZGUJInZpbS5oIgorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGNoYXIJY2xhc3M7CisgICAgY2hhcgl0eXBlOworICAgIHNob3J0CXdpZHRoOworICAgIHVuaW9uCisgICAgeworCXN0cnVjdAorCXsKKwkgICAgY2hhcglfYmFzaWNbM107CisJICAgIGNoYXIJbGVuZ3RoOworCX0JeTsKKwlpbnQJYmFzaWM7CisgICAgfQl4OworICAgIGludAkJZXh0ZW5kZWQ7Cit9CVRUX01PREU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgc2hvcnQJYnVmbGVuOworICAgIHNob3J0CWl0ZW1jb2RlOworICAgIGNoYXIJKmJ1ZmFkcnM7CisgICAgaW50CQkqcmV0bGVuOworfQlJVEVNOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIElURU0JZXF1OworICAgIGludAkJbnVsOworfQlJVE1MU1QxOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIElURU0JaW5kZXg7CisgICAgSVRFTQlzdHJpbmc7CisgICAgaW50CW51bDsKK30JSVRNTFNUMjsKKworc3RhdGljIFRUX01PREUJb3JnbW9kZTsKK3N0YXRpYyBzaG9ydAlpb2NoYW47CQkJLyogVFRZIEkvTyBjaGFubmVsICovCitzdGF0aWMgc2hvcnQJaW9zYls0XTsJCS8qIElPIHN0YXR1cyBibG9jayAqLworCitzdGF0aWMgaW50IHZtc19tYXRjaF9udW0gPSAwOworc3RhdGljIGludCB2bXNfbWF0Y2hfZnJlZSA9IDA7CitzdGF0aWMgY2hhcl91ICoqdm1zX2ZtYXRjaCA9IE5VTEw7CitzdGF0aWMgY2hhciAqRnNwZWNfUm1zOwkJICAgICAgIC8qIHJtcyBmaWxlIHNwZWMsIHBhc3NlZCBpbXBsaWNpdGx5IGJldHdlZW4gcm91dGluZXMgKi8KKworCisKK3N0YXRpYyBUVF9NT0RFCWdldF90dHkgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZAlzZXRfdHR5IF9fQVJHUygoaW50IHJvdywgaW50IGNvbCkpOworCisjZGVmaW5lIEVYUExfQUxMT0NfSU5DIDY0CisKKyNkZWZpbmUgRVFOKFMxLFMyLExOKSAoc3RybmNtcChTMSxTMixMTikgPT0gMCkKKyNkZWZpbmUgU0tJUF9GT0xMT1dJTkdfU0xBU0hFUyhTdHIpIHdoaWxlIChTdHJbMV0gPT0gJy8nKSArK1N0cgorCisKKy8qCisgKgl2dWxfZGVzYwl2dWx0IGVlbiBkZXNjcmlwdG9yIG1ldCBlZW4gc3RyaW5nIGVuIGRlIGxlbmd0ZQorICoJCQloaWVyIHZhbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCit2dWxfZGVzYyhERVNDICpkZXMsIGNoYXIgKnN0cikKK3sKKyAgICBkZXMtPmRzYyRiX2R0eXBlID0gRFNDJEtfRFRZUEVfVDsKKyAgICBkZXMtPmRzYyRiX2NsYXNzID0gRFNDJEtfQ0xBU1NfUzsKKyAgICBkZXMtPmRzYyRhX3BvaW50ZXIgPSBzdHI7CisgICAgZGVzLT5kc2Mkd19sZW5ndGggPSBzdHIgPyBzdHJsZW4oc3RyKSA6IDA7Cit9CisKKy8qCisgKgl2dWxfaXRlbQl2dWx0IGVlbiBpdGVtIG1ldCBlZW4gYWFudGFsIHdhYXJkZW4KKyAqLworICAgIHN0YXRpYyB2b2lkCit2dWxfaXRlbShJVEVNICppdG0sIHNob3J0IGxlbiwgc2hvcnQgY29kLCBjaGFyICphZHIsIGludCAqcmV0KQoreworICAgIGl0bS0+YnVmbGVuICAgPSBsZW47CisgICAgaXRtLT5pdGVtY29kZSA9IGNvZDsKKyAgICBpdG0tPmJ1ZmFkcnMgID0gYWRyOworICAgIGl0bS0+cmV0bGVuICAgPSByZXQ7Cit9CisKKyAgICB2b2lkCittY2hfc2V0dG1vZGUoaW50IHRtb2RlKQoreworICAgIGludAlzdGF0dXM7CisKKyAgICBpZiAoIHRtb2RlID09IFRNT0RFX1JBVyApCisJc2V0X3R0eSgwLCAwKTsKKyAgICBlbHNleworCXN3aXRjaCAob3JnbW9kZS53aWR0aCkKKwl7CisJICAgIGNhc2UgMTMyOglPVVRfU1RSX05GKChjaGFyX3UgKikiXDAzM1s/M2hcMDMzPiIpOwlicmVhazsKKwkgICAgY2FzZSA4MDoJT1VUX1NUUl9ORigoY2hhcl91ICopIlwwMzNbPzNsXDAzMz4iKTsJYnJlYWs7CisJICAgIGRlZmF1bHQ6CWJyZWFrOworCX0KKwlvdXRfZmx1c2goKTsKKwlzdGF0dXMgPSBzeXMkcWlvdygwLCBpb2NoYW4sIElPJF9TRVRNT0RFLCBpb3NiLCAwLCAwLAorCQkJCQkgICZvcmdtb2RlLCBzaXplb2YoVFRfTU9ERSksIDAsMCwwLDApOworCWlmIChzdGF0dXMhPVNTJF9OT1JNQUwgfHwgKGlvc2JbMF0mMHhGRkZGKSE9U1MkX05PUk1BTCkKKwkgICAgcmV0dXJuOworCSh2b2lkKXN5cyRkYXNzZ24oaW9jaGFuKTsKKwlpb2NoYW4gPSAwOworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitzZXRfdHR5KGludCByb3csIGludCBjb2wpCit7CisgICAgaW50CQkgICAgc3RhdHVzOworICAgIFRUX01PREUJICAgIG5ld21vZGU7CQkvKiBOZXcgVFRZIG1vZGUgYml0cwkJKi8KKyAgICBzdGF0aWMgc2hvcnQgICAgZmlyc3RfdGltZSA9IFRSVUU7CisKKyAgICBpZiAoZmlyc3RfdGltZSkKKyAgICB7CisJb3JnbW9kZSA9IGdldF90dHkoKTsKKwlmaXJzdF90aW1lID0gRkFMU0U7CisgICAgfQorICAgIG5ld21vZGUgPSBnZXRfdHR5KCk7CisgICAgaWYgKGNvbCkKKwluZXdtb2RlLndpZHRoCQkgPSBjb2w7CisgICAgaWYgKHJvdykKKwluZXdtb2RlLngueS5sZW5ndGggICAgICAgPSByb3c7CisgICAgbmV3bW9kZS54LmJhc2ljCQl8PSAoVFQkTV9OT0VDSE8gfCBUVCRNX0hPU1RTWU5DKTsKKyAgICBuZXdtb2RlLnguYmFzaWMJCSY9IH5UVCRNX1RUU1lOQzsKKyAgICBuZXdtb2RlLmV4dGVuZGVkCQl8PSBUVDIkTV9QQVNUSFJVOworICAgIHN0YXR1cyA9IHN5cyRxaW93KDAsIGlvY2hhbiwgSU8kX1NFVE1PREUsIGlvc2IsIDAsIDAsCisJCQkgICZuZXdtb2RlLCBzaXplb2YobmV3bW9kZSksIDAsIDAsIDAsIDApOworICAgIGlmIChzdGF0dXMhPVNTJF9OT1JNQUwgfHwgKGlvc2JbMF0mMHhGRkZGKSE9U1MkX05PUk1BTCkKKwlyZXR1cm47Cit9CisKKyAgICBzdGF0aWMgVFRfTU9ERQorZ2V0X3R0eSh2b2lkKQoreworCisgICAgc3RhdGljICRERVNDUklQVE9SKG9kc2MsIlNZUyRPVVRQVVQiKTsgICAvKiBvdXRwdXQgZGVzY3JpcHRvciAqLworCisgICAgaW50CQlzdGF0dXM7CisgICAgVFRfTU9ERQl0dF9tb2RlOworCisgICAgaWYgKCFpb2NoYW4pCisJc3RhdHVzID0gc3lzJGFzc2lnbigmb2RzYywmaW9jaGFuLDAsMCk7CisKKyAgICBzdGF0dXMgPSBzeXMkcWlvdygwLCBpb2NoYW4sIElPJF9TRU5TRU1PREUsIGlvc2IsIDAsIDAsCisJCSAgICAgICZ0dF9tb2RlLCBzaXplb2YodHRfbW9kZSksIDAsIDAsIDAsIDApOworICAgIGlmIChzdGF0dXMgIT0gU1MkX05PUk1BTCB8fCAoaW9zYlswXSAmIDB4RkZGRikgIT0gU1MkX05PUk1BTCkKKyAgICB7CisJdHRfbW9kZS53aWR0aAkJPSAwOworCXR0X21vZGUudHlwZQkJPSAwOworCXR0X21vZGUuY2xhc3MJCT0gMDsKKwl0dF9tb2RlLnguYmFzaWMJCT0gMDsKKwl0dF9tb2RlLngueS5sZW5ndGgJPSAwOworCXR0X21vZGUuZXh0ZW5kZWQJPSAwOworICAgIH0KKyAgICByZXR1cm4odHRfbW9kZSk7Cit9CisKKy8qCisgKiBHZXQgdGhlIGN1cnJlbnQgd2luZG93IHNpemUgaW4gUm93cyBhbmQgQ29sdW1ucy4KKyAqLworICAgIGludAorbWNoX2dldF9zaGVsbHNpemUodm9pZCkKK3sKKyAgICBUVF9NT0RFCXRtb2RlOworCisgICAgdG1vZGUgPSBnZXRfdHR5KCk7CQkJLyogZ2V0IHNpemUgZnJvbSBWTVMJKi8KKyAgICBDb2x1bW5zID0gdG1vZGUud2lkdGg7CisgICAgUm93cyA9IHRtb2RlLngueS5sZW5ndGg7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogVHJ5IHRvIHNldCB0aGUgd2luZG93IHNpemUgdG8gUm93cyBhbmQgbmV3X0NvbHVtbnMuCisgKi8KKyAgICB2b2lkCittY2hfc2V0X3NoZWxsc2l6ZSh2b2lkKQoreworICAgIHNldF90dHkoUm93cywgQ29sdW1ucyk7CisgICAgc3dpdGNoIChDb2x1bW5zKQorICAgIHsKKwljYXNlIDEzMjoJT1VUX1NUUl9ORigoY2hhcl91ICopIlwwMzNbPzNoXDAzMz4iKTsJYnJlYWs7CisJY2FzZSA4MDoJT1VUX1NUUl9ORigoY2hhcl91ICopIlwwMzNbPzNsXDAzMz4iKTsJYnJlYWs7CisJZGVmYXVsdDoJYnJlYWs7CisgICAgfQorICAgIG91dF9mbHVzaCgpOworICAgIHNjcmVlbl9zdGFydCgpOworfQorCisgICAgY2hhcl91ICoKK21jaF9nZXRlbnYoY2hhcl91ICpsb2duYW0pCit7CisgICAgREVTQwkJZF9maWxlX2RldiwgZF9sb2duYW0gIDsKKyAgICBzdGF0aWMgY2hhcgkJYnVmZmVyW0xOTSRDX05BTUxFTkdUSCsxXTsKKyAgICBjaGFyX3UJCSpjcCA9IE5VTEw7CisgICAgdW5zaWduZWQgbG9uZwlhdHRyaWI7CisgICAgaW50CQkJbGVuZ3RlID0gMCwgZHVtID0gMCwgaWR4ID0gMDsKKyAgICBJVE1MU1QyCQlpdG1sc3Q7CisgICAgY2hhcgkJKnNidWYgPSBOVUxMOworCisgICAgdnVsX2Rlc2MoJmRfbG9nbmFtLCAoY2hhciAqKWxvZ25hbSk7CisgICAgdnVsX2Rlc2MoJmRfZmlsZV9kZXYsICJMTk0kRklMRV9ERVYiKTsKKyAgICBhdHRyaWIgPSBMTk0kTV9DQVNFX0JMSU5EOworICAgIHZ1bF9pdGVtKCZpdG1sc3QuaW5kZXgsIHNpemVvZihpbnQpLCBMTk0kX0lOREVYLCAoY2hhciAqKSZpZHgsICZkdW0pOworICAgIHZ1bF9pdGVtKCZpdG1sc3Quc3RyaW5nLCBMTk0kQ19OQU1MRU5HVEgsIExOTSRfU1RSSU5HLCBidWZmZXIsICZsZW5ndGUpOworICAgIGl0bWxzdC5udWwJPSAwOworICAgIGlmIChzeXMkdHJubG5tKCZhdHRyaWIsICZkX2ZpbGVfZGV2LCAmZF9sb2duYW0sIE5VTEwsJml0bWxzdCkgPT0gU1MkX05PUk1BTCkKKyAgICB7CisJYnVmZmVyW2xlbmd0ZV0gPSAnXDAnOworCWlmIChjcCA9IChjaGFyX3UgKilhbGxvYygodW5zaWduZWQpKGxlbmd0ZSsxKSkpCisJICAgIHN0cmNweSgoY2hhciAqKWNwLCBidWZmZXIpOworCXJldHVybihjcCk7CisgICAgfQorICAgIGVsc2UgaWYgKChzYnVmID0gZ2V0ZW52KChjaGFyICopbG9nbmFtKSkpCisgICAgeworCWxlbmd0ZSA9IHN0cmxlbihzYnVmKSArIDE7CisJY3AgPSAoY2hhcl91ICopbWFsbG9jKChzaXplX3QpbGVuZ3RlKTsKKwlpZiAoY3ApCisJICAgIHN0cmNweSgoY2hhciAqKWNwLCBzYnVmKTsKKwlyZXR1cm4gY3A7CisgICAgfQorICAgIGVsc2UKKwlyZXR1cm4oTlVMTCk7Cit9CisKKy8qCisgKgltY2hfc2V0ZW52CVZNUyB2ZXJzaW9uIG9mIHNldGVudigpCisgKi8KKyAgICBpbnQKK21jaF9zZXRlbnYoY2hhciAqdmFyLCBjaGFyICp2YWx1ZSwgaW50IHgpCit7CisgICAgaW50CQlyZXMsIGR1bTsKKyAgICBsb25nCWF0dHJpYiA9IDBMOworICAgIGNoYXIJYWNtb2RlID0gUFNMJENfU1VQRVI7CS8qIG5lZWRzIFNZU05BTSBwcml2aWxlZ2UgKi8KKyAgICBERVNDCXRhYm5hbSwgbG9nbmFtOworICAgIElUTUxTVDEJaXRtbHN0OworCisgICAgdnVsX2Rlc2MoJnRhYm5hbSwgIkxOTSRKT0IiKTsKKyAgICB2dWxfZGVzYygmbG9nbmFtLCB2YXIpOworICAgIHZ1bF9pdGVtKCZpdG1sc3QuZXF1LCB2YWx1ZSA/IHN0cmxlbih2YWx1ZSkgOiAwLCB2YWx1ZSA/IExOTSRfU1RSSU5HIDogMCwKKwkgICAgdmFsdWUsICZkdW0pOworICAgIGl0bWxzdC5udWwJPSAwOworICAgIHJlcyA9IHN5cyRjcmVsbm0oJmF0dHJpYiwgJnRhYm5hbSwgJmxvZ25hbSwgJmFjbW9kZSwgJml0bWxzdCk7CisgICAgcmV0dXJuKChyZXMgPT0gMSkgPyAwIDogLTEpOworfQorCisgICAgaW50Cit2bXNfc3lzKGNoYXIgKmNtZCwgY2hhciAqb3V0LCBjaGFyICppbnApCit7CisgICAgREVTQwljZHNjLCBvZHNjLCBpZHNjOworICAgIGxvbmcJc3RhdHVzOworCisgICAgaWYgKGNtZCkKKwl2dWxfZGVzYygmY2RzYywgY21kKTsKKyAgICBpZiAob3V0KQorCXZ1bF9kZXNjKCZvZHNjLCBvdXQpOworICAgIGlmIChpbnApCisJdnVsX2Rlc2MoJmlkc2MsIGlucCk7CisKKyAgICBsaWIkc3Bhd24oY21kID8gJmNkc2MgOiBOVUxMLAkJLyogY29tbWFuZCBzdHJpbmcgKi8KKwkgICAgICBpbnAgPyAmaWRzYyA6IE5VTEwsCQkvKiBpbnB1dCBmaWxlICovCisJICAgICAgb3V0ID8gJm9kc2MgOiBOVUxMLAkJLyogb3V0cHV0IGZpbGUgKi8KKwkgICAgICAwLCAwLCAwLCAmc3RhdHVzLCAwLCAwLCAwLCAwLCAwLCAwKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKgorICogQ29udmVydCBWTVMgc3lzdGVtKCkgb3IgbGliJHNwYXduKCkgcmV0dXJuIGNvZGUgdG8gVW5peC1saWtlIGV4aXQgdmFsdWUuCisgKi8KKyAgICBpbnQKK3Ztc19zeXNfc3RhdHVzKGludCBzdGF0dXMpCit7CisgICAgaWYgKHN0YXR1cyAhPSBTUyRfTk9STUFMICYmIChzdGF0dXMgJiBTVFMkTV9TVUNDRVNTKSA9PSAwKQorCXJldHVybiBzdGF0dXM7CQkvKiBDb21tYW5kIGZhaWxlZC4gKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIHZtc19yZWFkKCkKKyAqIGZ1bmN0aW9uIGZvciBsb3cgbGV2ZWwgY2hhciBpbnB1dAorICoKKyAqIFJldHVybnM6IGlucHV0IGxlbmd0aAorICovCisgICAgaW50Cit2bXNfcmVhZChjaGFyICppbmJ1Ziwgc2l6ZV90IG5ieXRlcykKK3sKKyAgICBpbnQJCXN0YXR1cywgZnVuY3Rpb24sIGxlbjsKKyAgICBUVF9NT0RFCXR0X21vZGU7CisgICAgSVRFTQlpdG1sc3RbMl07CisgICAgc3RhdGljIGxvbmcgdHJtX21hc2tbOF0gPSB7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfTsKKworICAgIC8qIHdoYXRldmVyIGhhcHBlbmVkIGVhcmxpZXIgd2UgbmVlZCBhbiBpb2NoYW4gaGVyZSAqLworICAgIGlmICghaW9jaGFuKQorCXR0X21vZGUgPSBnZXRfdHR5KCk7CisKKyAgICB2dWxfaXRlbSgmaXRtbHN0WzBdLCAwLCBUUk0kX01PRElGSUVSUywKKwkgICAgKGNoYXIgKikoVFJNJE1fVE1fRVNDQVBFIHwgVFJNJE1fVE1fTk9FQ0hPIHwgVFJNJE1fVE1fTk9FRElUIHwKKwkgICAgICAgVFJNJE1fVE1fTk9GSUxUUiB8IFRSTSRNX1RNX05PUkVDQUxMIHwgVFJNJE1fVE1fVFJNTk9FQ0hPKSwgMCk7CisgICAgdnVsX2l0ZW0oJml0bWxzdFsxXSwgc2l6ZW9mKHRybV9tYXNrKSwgVFJNJF9URVJNLCAoY2hhciAqKSZ0cm1fbWFzaywgMCk7CisKKyAgICBmdW5jdGlvbiA9IChJTyRfUkVBRExCTEsgfCBJTyRNX0VYVEVORCk7CisgICAgbWVtc2V0KGluYnVmLCAwLCBuYnl0ZXMpOworCisgICAgd2hpbGUgKDEpCisgICAgeworCXN0YXR1cyA9IHN5cyRxaW93KDAsIGlvY2hhbiwgZnVuY3Rpb24sICZpb3NiLCAwLCAwLCBpbmJ1ZiwgbmJ5dGVzIC0gMSwKKwkJCQkJICAgICAgIDAsIDAsICZpdG1sc3QsIHNpemVvZihpdG1sc3QpKTsKKwlsZW4gPSBzdHJsZW4oaW5idWYpOworCWlmIChsZW4gPiAwKQorCSAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIHZtc193cHJvYygpIGlzIGNhbGxlZCBmb3IgZWFjaCBtYXRjaGluZyBmaWxlbmFtZSBieSBkZWNjJHRvX3ZtcygpLgorICogV2Ugd2FudCB0byBzYXZlIGVhY2ggbWF0Y2ggZm9yIGxhdGVyIHJldHJpZXZhbC4KKyAqCisgKiBSZXR1cm5zOiAgMSAtIGNvbnRpbnVlIGZpbmRpbmcgbWF0Y2hlcworICoJICAgICAwIC0gc3RvcCB0cnlpbmcgdG8gZmluZCBhbnkgZnVydGhlciBtYXRoY2VzCisgKi8KKyAgICBzdGF0aWMgaW50Cit2bXNfd3Byb2MoY2hhciAqbmFtZSwgaW50IHZhbCkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgbmxlbjsKKyAgICBzdGF0aWMgaW50IHZtc19tYXRjaF9hbGxvY2VkID0gMDsKKworICAgIGlmICh2YWwgIT0gREVDQyRLX0ZJTEUpIC8qIERpcmVjdG9yaWVzIGFuZCBmb3JlaW5nIG5vbiBWTVMgZmlsZXMgYXJlIG5vdCBjb3VudGluZyAgKi8KKwlyZXR1cm4gMTsKKworICAgIGlmICh2bXNfbWF0Y2hfbnVtID09IDApIHsKKwkvKiBmaXJzdCB0aW1lIHRocm91Z2gsIHNldHVwIHNvbWUgdGhpbmdzICovCisJaWYgKE5VTEwgPT0gdm1zX2ZtYXRjaCkgeworCSAgICB2bXNfZm1hdGNoID0gKGNoYXJfdSAqKilhbGxvYyhFWFBMX0FMTE9DX0lOQyAqIHNpemVvZihjaGFyICopKTsKKwkgICAgaWYgKCF2bXNfZm1hdGNoKQorCQlyZXR1cm4gMDsKKwkgICAgdm1zX21hdGNoX2FsbG9jZWQgPSBFWFBMX0FMTE9DX0lOQzsKKwkgICAgdm1zX21hdGNoX2ZyZWUgPSBFWFBMX0FMTE9DX0lOQzsKKwl9CisJZWxzZSB7CisJICAgIC8qIHJlLXVzZSBleGlzdGluZyBzcGFjZSAqLworCSAgICB2bXNfbWF0Y2hfZnJlZSA9IHZtc19tYXRjaF9hbGxvY2VkOworCX0KKyAgICB9CisKKyAgICB2bXNfcmVtb3ZlX3ZlcnNpb24obmFtZSk7CisKKyAgICAvKiBjb252ZXJ0IGZpbGVuYW1lIHRvIGxvd2VyY2FzZSAqLworICAgIG5sZW4gPSBzdHJsZW4obmFtZSk7CisgICAgZm9yIChpID0gMDsgaSA8IG5sZW47IGkrKykKKwluYW1lW2ldID0gVE9MT1dFUl9BU0MobmFtZVtpXSk7CisKKyAgICAvKiBpZiBuYW1lIGFscmVhZHkgZXhpc3RzLCBkb24ndCBhZGQgaXQgKi8KKyAgICBmb3IgKGkgPSAwOyBpPHZtc19tYXRjaF9udW07IGkrKykgeworCWlmICgwID09IFNUUkNNUCgoY2hhcl91ICopbmFtZSx2bXNfZm1hdGNoW2ldKSkKKwkgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmICgtLXZtc19tYXRjaF9mcmVlID09IDApIHsKKwkvKiBhZGQgbW9yZSBzcGFjZSB0byBzdG9yZSBtYXRjaGVzICovCisJdm1zX21hdGNoX2FsbG9jZWQgKz0gRVhQTF9BTExPQ19JTkM7CisJdm1zX2ZtYXRjaCA9IChjaGFyX3UgKiopcmVhbGxvYyh2bXNfZm1hdGNoLAorCQlzaXplb2YoY2hhciAqKikgKiB2bXNfbWF0Y2hfYWxsb2NlZCk7CisJaWYgKCF2bXNfZm1hdGNoKQorCSAgICByZXR1cm4gMDsKKwl2bXNfbWF0Y2hfZnJlZSA9IEVYUExfQUxMT0NfSU5DOworICAgIH0KKyAgICB2bXNfZm1hdGNoW3Ztc19tYXRjaF9udW1dID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKW5hbWUpOworCisgICAgKyt2bXNfbWF0Y2hfbnVtOworICAgIHJldHVybiAxOworfQorCisvKgorICoJbWNoX2V4cGFuZF93aWxkY2FyZHMJdGhpcyBjb2RlIGRvZXMgd2lsZC1jYXJkIHBhdHRlcm4KKyAqCQkJCW1hdGNoaW5nIE5PVCB1c2luZyB0aGUgc2hlbGwKKyAqCisgKglyZXR1cm4gT0sgZm9yIHN1Y2Nlc3MsIEZBSUwgZm9yIGVycm9yICh5b3UgbWF5IGxvb3NlIHNvbWUKKyAqCW1lbW9yeSkgYW5kIHB1dCBhbiBlcnJvciBtZXNzYWdlIGluICpmaWxlLgorICoKKyAqCW51bV9wYXQJICAgbnVtYmVyIG9mIGlucHV0IHBhdHRlcm5zCisgKglwYXQJICAgYXJyYXkgb2YgcG9pbnRlcnMgdG8gaW5wdXQgcGF0dGVybnMKKyAqCW51bV9maWxlICAgcG9pbnRlciB0byBudW1iZXIgb2YgbWF0Y2hlZCBmaWxlIG5hbWVzCisgKglmaWxlCSAgIHBvaW50ZXIgdG8gYXJyYXkgb2YgcG9pbnRlcnMgdG8gbWF0Y2hlZCBmaWxlIG5hbWVzCisgKgorICovCisgICAgaW50CittY2hfZXhwYW5kX3dpbGRjYXJkcyhpbnQgbnVtX3BhdCwgY2hhcl91ICoqcGF0LCBpbnQgKm51bV9maWxlLCBjaGFyX3UgKioqZmlsZSwgaW50IGZsYWdzKQoreworICAgIGludAkJaSwgaiA9IDAsIGNudCA9IDA7CisgICAgY2hhcgkqY3A7CisgICAgY2hhcl91CWJ1ZltNQVhQQVRITF07CisgICAgaW50CQlkaXI7CisgICAgaW50IGZpbGVzX2FsbG9jZWQsIGZpbGVzX2ZyZWU7CisKKyAgICAqbnVtX2ZpbGUgPSAwOwkJCS8qIGRlZmF1bHQ6IG5vIGZpbGVzIGZvdW5kCSovCisgICAgZmlsZXNfYWxsb2NlZCA9IEVYUExfQUxMT0NfSU5DOworICAgIGZpbGVzX2ZyZWUgPSBFWFBMX0FMTE9DX0lOQzsKKyAgICAqZmlsZSA9IChjaGFyX3UgKiopIGFsbG9jKHNpemVvZihjaGFyX3UgKiopICogZmlsZXNfYWxsb2NlZCk7CisgICAgaWYgKCpmaWxlID09IE5VTEwpCisgICAgeworCSpudW1fZmlsZSA9IDA7CisJcmV0dXJuIEZBSUw7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcGF0OyBpKyspCisgICAgeworCS8qIGV4cGFuZCBlbnZpcm9ubWVudCB2YXIgb3IgaG9tZSBkaXIgKi8KKwlpZiAodmltX3N0cmNocihwYXRbaV0sJyQnKSB8fCB2aW1fc3RyY2hyKHBhdFtpXSwnficpKQorCSAgICBleHBhbmRfZW52KHBhdFtpXSxidWYsTUFYUEFUSEwpOworCWVsc2UKKwkgICAgU1RSQ1BZKGJ1ZixwYXRbaV0pOworCisJdm1zX21hdGNoX251bSA9IDA7IC8qIHJlc2V0IGNvbGxlY3Rpb24gY291bnRlciAqLworCWNudCA9IGRlY2MkdG9fdm1zKGRlY2MkdHJhbnNsYXRlX3Ztcyh2bXNfZml4ZmlsZW5hbWUoYnVmKSksIHZtc193cHJvYywgMSwgMCk7CisJCQkJCQkgICAgICAvKiBhbGxvdyB3aWxkLCBubyBkaXIgKi8KKwlpZiAoY250ID4gMCkKKwkgICAgY250ID0gdm1zX21hdGNoX251bTsKKworCWlmIChjbnQgPCAxKQorCSAgICBjb250aW51ZTsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwl7CisJICAgIC8qIGZpbGVzIHNob3VsZCBleGlzdCBpZiBleHBhbmRpbmcgaW50ZXJhY3RpdmVseSAqLworCSAgICBpZiAoIShmbGFncyAmIEVXX05PVEZPVU5EKSAmJiBtY2hfZ2V0cGVybSh2bXNfZm1hdGNoW2ldKSA8IDApCisJCWNvbnRpbnVlOworCSAgICAvKiBkbyBub3QgaW5jbHVkZSBkaXJlY3RvcmllcyAqLworCSAgICBkaXIgPSAobWNoX2lzZGlyKHZtc19mbWF0Y2hbaV0pKTsKKwkgICAgaWYgKCggZGlyICYmICEoZmxhZ3MgJiBFV19ESVIpKSB8fCAoIWRpciAmJiAhKGZsYWdzICYgRVdfRklMRSkpKQorCQljb250aW51ZTsKKwkgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBwb2ludGVycyAqLworCSAgICBpZiAoLS1maWxlc19mcmVlIDwgMSkKKwkgICAgeworCQlmaWxlc19hbGxvY2VkICs9IEVYUExfQUxMT0NfSU5DOworCQkqZmlsZSA9IChjaGFyX3UgKiopcmVhbGxvYygqZmlsZSwKKwkJICAgIHNpemVvZihjaGFyX3UgKiopICogZmlsZXNfYWxsb2NlZCk7CisJCWlmICgqZmlsZSA9PSBOVUxMKQorCQl7CisJCSAgICAqZmlsZSA9IChjaGFyX3UgKiopIiI7CisJCSAgICAqbnVtX2ZpbGUgPSAwOworCQkgICAgcmV0dXJuKEZBSUwpOworCQl9CisJCWZpbGVzX2ZyZWUgPSBFWFBMX0FMTE9DX0lOQzsKKwkgICAgfQorCisJICAgICgqZmlsZSlbKm51bV9maWxlKytdID0gdm1zX2ZtYXRjaFtpXTsKKwl9CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworICAgIGludAorbWNoX2V4cGFuZHBhdGgoZ2FycmF5X1QgKmdhcCwgY2hhcl91ICpwYXRoLCBpbnQgZmxhZ3MpCit7CisgICAgaW50CQlpLGNudCA9IDA7CisgICAgY2hhcgkqY3A7CisgICAgdm1zX21hdGNoX251bSA9IDA7CisKKyAgICBjbnQgPSBkZWNjJHRvX3ZtcyhkZWNjJHRyYW5zbGF0ZV92bXModm1zX2ZpeGZpbGVuYW1lKHBhdGgpKSwgdm1zX3dwcm9jLCAxLCAwKTsKKwkJCQkJCSAgICAgIC8qIGFsbG93IHdpbGQsIG5vIGRpciAqLworICAgIGlmIChjbnQgPiAwKQorCWNudCA9IHZtc19tYXRjaF9udW07CisgICAgZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorICAgIHsKKwlpZiAobWNoX2dldHBlcm0odm1zX2ZtYXRjaFtpXSkgPj0gMCkgLyogYWRkIGV4aXN0aW5nIGZpbGUgKi8KKwkgICAgYWRkZmlsZShnYXAsIHZtc19mbWF0Y2hbaV0sIGZsYWdzKTsKKyAgICB9CisgICAgcmV0dXJuIGNudDsKK30KKworLyoKKyAqIGF0dGVtcHQgdG8gdHJhbnNsYXRlIGEgbWl4ZWQgdW5peC12bXMgZmlsZSBzcGVjaWZpY2F0aW9uIHRvIHB1cmUgdm1zCisgKi8KKyAgICBzdGF0aWMgdm9pZAordm1zX3VuaXhfbWl4ZWRfZmlsZXNwZWMoY2hhciAqaW4sIGNoYXIgKm91dCkKK3sKKyAgICBjaGFyICpsYXN0Y29sb247CisgICAgY2hhciAqZW5kX29mX2RpcjsKKyAgICBjaGFyIGNoOworICAgIGludCBsZW47CisKKyAgICAvKiBjb3B5IHZtcyBmaWxlbmFtZSBwb3J0aW9uIHVwIHRvIGxhc3QgY29sb24KKyAgICAgKiAobm9kZSBhbmQvb3IgZGlzaykKKyAgICAgKi8KKyAgICBsYXN0Y29sb24gPSBzdHJyY2hyKGluLCAnOicpOyAgIC8qIGZpbmQgbGFzdCBjb2xvbiAqLworICAgIGlmIChsYXN0Y29sb24gIT0gTlVMTCkgeworCWxlbiA9IGxhc3Rjb2xvbiAtIGluICsgMTsKKwlzdHJuY3B5KG91dCwgaW4sIGxlbik7CisJb3V0ICs9IGxlbjsKKwlpbiArPSBsZW47CisgICAgfQorCisgICAgZW5kX29mX2RpciA9IE5VTEw7CS8qIGRlZmF1bHQ6IG5vIGRpcmVjdG9yeSAqLworCisgICAgLyogc3RhcnQgb2YgZGlyZWN0b3J5IHBvcnRpb24gKi8KKyAgICBjaCA9ICppbjsKKyAgICBpZiAoKGNoID09ICdbJykgfHwgKGNoID09ICcvJykgfHwgKGNoID09ICc8JykgKSB7CS8qIHN0YXJ0IG9mIGRpcmVjdG9yeShzKSA/ICovCisJY2ggPSAnWyc7CisJU0tJUF9GT0xMT1dJTkdfU0xBU0hFUyhpbik7CisgICAgfSBlbHNlIGlmIChFUU4oaW4sICIuLi8iLCAzKSkgeyAvKiBVbml4IHBhcmVudCBkaXJlY3Rvcnk/ICovCisJKm91dCsrID0gJ1snOworCSpvdXQrKyA9ICctJzsKKwllbmRfb2ZfZGlyID0gb3V0OworCWNoID0gJy4nOworCWluICs9IDI7CisJU0tJUF9GT0xMT1dJTkdfU0xBU0hFUyhpbik7CisgICAgfSBlbHNlIHsJCSAgICAvKiBub3QgYSBzcGVjaWFsIGNoYXJhY3RlciAqLworCXdoaWxlIChFUU4oaW4sICIuLyIsIDIpKSB7CS8qIElnbm9yZSBVbml4ICJjdXJyZW50IGRpciIgKi8KKwkgICAgaW4gKz0gMjsKKwkgICAgU0tJUF9GT0xMT1dJTkdfU0xBU0hFUyhpbik7CisgICAgfQorICAgIGlmIChzdHJjaHIoaW4sICcvJykgPT0gTlVMTCkgeyAgLyogYW55IG1vcmUgVW5peCBkaXJlY3RvcmllcyA/ICovCisJc3RyY3B5KG91dCwgaW4pOwkvKiBObyAtIGdldCByZXN0IG9mIHRoZSBzcGVjICovCisJcmV0dXJuOworICAgIH0gZWxzZSB7CisJKm91dCsrID0gJ1snOwkgICAgLyogWWVzLCBkZW5vdGUgYSBWbXMgc3ViZGlyZWN0b3J5ICovCisJY2ggPSAnLic7CisJLS1pbjsKKwl9CisgICAgfQorCisgICAgLyogaWYgd2UgZ2V0IGhlcmUsIHRoZXJlIGlzIGEgZGlyZWN0b3J5IHBhcnQgb2YgdGhlIGZpbGVuYW1lICovCisKKyAgICAvKiBpbml0aWFsaXplIG91dHB1dCBmaWxlIHNwZWMgKi8KKyAgICAqb3V0KysgPSBjaDsKKyAgICArK2luOworCisgICAgd2hpbGUgKCppbiAhPSAnXDAnKSB7CisJY2ggPSAqaW47CisJaWYgKChjaCA9PSAnXScpIHx8IChjaCA9PSAnLycpIHx8IChjaCA9PSAnPicpICkgewkvKiBlbmQgb2YgKHN1YilkaXJlY3RvcnkgPyAqLworCSAgICBlbmRfb2ZfZGlyID0gb3V0OworCSAgICBjaCA9ICcuJzsKKwkgICAgU0tJUF9GT0xMT1dJTkdfU0xBU0hFUyhpbik7CisJICAgIH0KKwllbHNlIGlmIChFUU4oaW4sICIuLi8iLCAzKSkgewkvKiBVbml4IHBhcmVudCBkaXJlY3Rvcnk/ICovCisJICAgICpvdXQrKyA9ICctJzsKKwkgICAgZW5kX29mX2RpciA9IG91dDsKKwkgICAgY2ggPSAnLic7CisJICAgIGluICs9IDI7CisJICAgIFNLSVBfRk9MTE9XSU5HX1NMQVNIRVMoaW4pOworCSAgICB9CisJZWxzZSB7CisJICAgIHdoaWxlIChFUU4oaW4sICIuLyIsIDIpKSB7ICAvKiBJZ25vcmUgVW5peCAiY3VycmVudCBkaXIiICovCisJICAgIGVuZF9vZl9kaXIgPSBvdXQ7CisJICAgIGluICs9IDI7CisJICAgIFNLSVBfRk9MTE9XSU5HX1NMQVNIRVMoaW4pOworCSAgICBjaCA9ICppbjsKKwkgICAgfQorCX0KKworICAgIC8qIFBsYWNlIG5leHQgY2hhcmFjdGVyIGludG8gb3V0cHV0IGZpbGUgc3BlYyAqLworCSpvdXQrKyA9IGNoOworCSsraW47CisgICAgfQorCisgICAgKm91dCA9ICdcMCc7ICAgIC8qIFRlcm1pbmF0ZSBvdXRwdXQgZmlsZSBzcGVjICovCisKKyAgICBpZiAoZW5kX29mX2RpciAhPSBOVUxMKSAvKiBUZXJtaW5hdGUgZGlyZWN0b3J5IHBvcnRpb24gKi8KKwkqZW5kX29mX2RpciA9ICddJzsKK30KKworCisvKgorICogZm9yIGRlY2MkdG9fdm1zIGluIHZtc19maXhmaWxlbmFtZQorICovCisgICAgc3RhdGljIGludAordm1zX2ZzcGVjX3Byb2MoY2hhciAqZmlsLCBpbnQgdmFsKQoreworICAgIHN0cmNweShGc3BlY19SbXMsZmlsKTsKKyAgICByZXR1cm4oMSk7Cit9CisKKy8qCisgKiBjaGFuZ2UgdW5peCBhbmQgbWl4ZWQgZmlsZW5hbWVzIHRvIFZNUworICovCisgICAgdm9pZCAqCit2bXNfZml4ZmlsZW5hbWUodm9pZCAqaW5zdHJpbmcpCit7CisgICAgc3RhdGljIGNoYXIJCSpidWYgPSBOVUxMOworICAgIHN0YXRpYyBzaXplX3QJYnVmbGVuID0gMDsKKyAgICBzaXplX3QJCWxlbjsKKworICAgIC8qIGdldCBhIGJpZy1lbm91Z2ggYnVmZmVyICovCisgICAgbGVuID0gc3RybGVuKGluc3RyaW5nKSArIDE7CisgICAgaWYgKGxlbiA+IGJ1ZmxlbikKKyAgICB7CisJYnVmbGVuID0gbGVuICsgMTI4OworCWlmIChidWYpCisJICAgIGJ1ZiA9IChjaGFyICopcmVhbGxvYyhidWYsIGJ1Zmxlbik7CisJZWxzZQorCSAgICBidWYgPSAoY2hhciAqKWNhbGxvYyhidWZsZW4sIHNpemVvZihjaGFyKSk7CisgICAgfQorCisjaWZkZWYgREVCVUcKKyAgICAgY2hhcgkJICp0bXBidWYgPSBOVUxMOworICAgICB0bXBidWYgPSAoY2hhciAqKWNhbGxvYyhidWZsZW4sIHNpemVvZihjaGFyKSk7CisgICAgIHN0cmNweSh0bXBidWYsIGluc3RyaW5nKTsKKyNlbmRpZgorCisgICAgRnNwZWNfUm1zID0gYnVmOwkJCQkvKiBmb3IgZGVjYyR0b192bXMgKi8KKworICAgIGlmICggc3RyY2hyKGluc3RyaW5nLCcvJykgPT0gTlVMTCApCisJLyogSXQgaXMgYWxyZWFkeSBhIFZNUyBmaWxlIHNwZWMgKi8KKwlzdHJjcHkoYnVmLCBpbnN0cmluZyk7CisgICAgZWxzZSBpZiAoIHN0cmNocihpbnN0cmluZywnIicpID09IE5VTEwgKXsgICAgIC8qIHBhc3N3b3JkIGluIHRoZSBwYXRoID8gICAqLworCS8qIFNlZW1zIGl0IGlzIGEgcmVndWxhciBmaWxlLCBsZXQgZ3Vlc3MgdGhhdCBpdCBpcyBwdXJlIFVuaXggZnNwZWMgKi8KKwlpZiAoIGRlY2MkdG9fdm1zKGluc3RyaW5nLCB2bXNfZnNwZWNfcHJvYywgMCwgMCkgPD0gMCApCisJICAgIC8qIE5vLi4uIGl0IG11c3QgYmUgbWl4ZWQgKi8KKwkgICAgdm1zX3VuaXhfbWl4ZWRfZmlsZXNwZWMoaW5zdHJpbmcsIGJ1Zik7CisgICAgfQorICAgIGVsc2UKKwkvKiB3ZSBoYXZlIGEgcGFzc3dvcmQgaW4gdGhlIHBhdGggICAqLworCS8qIGRlY2MkIGZ1bmN0aW9ucyBjYW4gbm90IGhhbmRsZSAgICovCisJLyogdGhpcyBpcyBvdXIgb25seSBob3BlIHRvIHJlc29sdiAgKi8KKwl2bXNfdW5peF9taXhlZF9maWxlc3BlYyhpbnN0cmluZywgYnVmKTsKKworICAgIHJldHVybiBidWY7Cit9CisvKgorICogUmVtb3ZlIHZlcnNpb24gbnVtYmVyIGZyb20gZmlsZSBuYW1lCisgKiB3ZSBuZWVkIGl0IGluIHNvbWUgc3BlY2lhbCBjYXNlcyBhczoKKyAqIGNyZWF0aW5nIHN3YXAgZmlsZSBuYW1lIGFuZCB3cml0aW5nIG5ldyBmaWxlCisgKi8KKyAgICB2b2lkCit2bXNfcmVtb3ZlX3ZlcnNpb24odm9pZCAqIGZuYW1lKQoreworICAgIGNoYXJfdQkqY3A7CisgICAgY2hhcl91CSpmcDsKKworICAgIGlmICgoY3AgPSB2aW1fc3RyY2hyKCBmbmFtZSwgJzsnKSkgIT0gTlVMTCkgLyogcmVtb3ZlIHZlcnNpb24gKi8KKwkqY3AgPSAnXDAnOworICAgIGVsc2UgaWYgKChjcCA9IHZpbV9zdHJyY2hyKCBmbmFtZSwgJy4nKSkgIT0gTlVMTCApCisgICAgeworCWlmICAgICAgKChmcCA9IHZpbV9zdHJyY2hyKCBmbmFtZSwgJ10nKSkgIT0gTlVMTCApIHs7fQorCWVsc2UgaWYgKChmcCA9IHZpbV9zdHJyY2hyKCBmbmFtZSwgJz4nKSkgIT0gTlVMTCApIHs7fQorCWVsc2UgZnAgPSBmbmFtZTsKKworCXdoaWxlICggKmZwICE9ICdcMCcgJiYgZnAgPCBjcCApCisJICAgIGlmICggKmZwKysgPT0gJy4nICkKKwkJKmNwID0gJ1wwJzsKKyAgICB9CisgICAgcmV0dXJuIDsKK30KZGlmZiAtLWdpdCBhL3NyYy9vc192bXNfY29uZi5oIGIvc3JjL29zX3Ztc19jb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2NDYwOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc192bXNfY29uZi5oCkBAIC0wLDAgKzEsMTg1IEBACisvKiBvc192bXNfY29uZi5oLiAgUmVwbGFjZXMgYXV0by9jb25maWcuaCBmb3IgVk1TICovCisKKyNkZWZpbmUgQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRSAgIC8qIE9wZW4gVk1TIGlzIGNhc2UgaW5zZW5zaXRpdmUgKi8KKyNkZWZpbmUgU1BBQ0VfSU5fRklMRU5BTUUJICAgIC8qIFRoZXJlIGNvdWxkIGJlIHNwYWNlIGJldHdlZW4gdXNlciBhbmQgcGFzc3dkICovCisjZGVmaW5lIEZOQU1FX0lMTEVHQUwgInwqIz8lIiAgICAgICAvKiBJbGxlZ2FsIGNoYXJhY3RlcnMgaW4gYSBmaWxlIG5hbWUgKi8KKyNkZWZpbmUgQklOQVJZX0ZJTEVfSU8JCSAgICAvKiBVc2UgYmluYXJ5IGZpbGVpbyAqLworI2RlZmluZSBVU0VfR0VUQ1dECisjZGVmaW5lIFVTRV9TWVNURU0KKworLyogRGVmaW5lIHdoZW4gdGVybWluZm8gc3VwcG9ydCBmb3VuZCAqLworI3VuZGVmIFRFUk1JTkZPCisKKy8qIERlZmluZSB3aGVuIHRlcm1jYXAuaCBjb250YWlucyBvc3BlZWQgKi8KKy8qICNkZWZpbmUgSEFWRV9PU1BFRUQgKi8KKworLyogRGVmaW5lIHdoZW4gdGVybWNhcC5oIGNvbnRhaW5zIFVQLCBCQyBhbmQgUEMgKi8KKy8qICNkZWZpbmUgSEFWRV9VUF9CQ19QQyAqLworCisvKiBEZWZpbmUgd2hlbiB0ZXJtY2FwLmggZGVmaW5lcyBvdXRmdW50eXBlICovCisvKiNkZWZpbmUgSEFWRV9PVVRGVU5UWVBFICovCisKKy8qIERlZmluZSB3aGVuIF9fREFURV9fICIgIiBfX1RJTUVfXyBjYW4gYmUgdXNlZCAqLworI2RlZmluZSBIQVZFX0RBVEVfVElNRQorCisvKiBEZWZpbmVkIHRvIHRoZSBzaXplIG9mIGFuIGludCAqLworI2RlZmluZSBTSVpFT0ZfSU5UIDQKKworLyogI3VuZGVmIFVTRUJDT1BZICovCisjZGVmaW5lIFVTRU1FTU1PVkUKKy8qICN1bmRlZiBVU0VNRU1DUFkgKi8KKworLyogRGVmaW5lIHdoZW4gIm1hbiAtcyAyIiBpcyB0byBiZSB1c2VkICovCisvKiAjdW5kZWYgVVNFTUFOX1MgKi8KKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIHRoZSBrZXl3b3JkIGRvZXMgbm90IHdvcmsuICAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAgKi8KKy8qICN1bmRlZiBtb2RlX3QgKi8KKworLyogRGVmaW5lIHRvIGBsb25nJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAgKi8KKy8qICN1bmRlZiBvZmZfdCAqLworCisvKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICAqLworLyogI3VuZGVmIHBpZF90ICovCisKKy8qIERlZmluZSB0byBgdW5zaWduZWQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICAqLworLyogI3VuZGVmIHNpemVfdCAqLworCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gICovCisvKiAjdW5kZWYgdWlkX3QgKi8KKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICAqLworLyogI3VuZGVmIGdpZF90ICovCisKKy8qIERlZmluZSB0byBgbG9uZycgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gICovCisvKiAjdW5kZWYgaW5vX3QgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBuYW5vc2xlZXAoKSBmdW5jdGlvbi4gICovCisvKiAjdW5kZWYgSEFWRV9OQU5PU0xFRVAgKi8KKworLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAgKi8KKyNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FCisKKy8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8c3lzL3NlbGVjdC5oPi4gICovCisvKiAjdW5kZWYgU1lTX1NFTEVDVF9XSVRIX1NZU19USU1FICovCisKKy8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkuICAqLworI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKKworLyogRGVmaW5lIGFzIHRoZSBjb21tYW5kIGF0IHRoZSBlbmQgb2Ygc2lnbmFsIGhhbmRsZXJzICgiIiBvciAicmV0dXJuIDA7IikuICAqLworI2RlZmluZSBTSUdSRVRVUk4gcmV0dXJuCisKKy8qIERlZmluZSBpZiBzdHJ1Y3Qgc2lnY29udGV4dCBpcyBwcmVzZW50ICovCisjZGVmaW5lIEhBVkVfU0lHQ09OVEVYVAorCisvKiBEZWZpbmUgaWYgdG91cHBlci90b2xvd2VyIG9ubHkgd29yayBvbiBsb3dlci91cGVyY2FzZSBjaGFyYWN0ZXJzICovCisvKiAjZGVmaW5lIEJST0tFTl9UT1VQUEVSICovCisKKy8qIERlZmluZSBpZiB0Z2V0c3RyKCkgaGFzIGEgc2Vjb25kIGFyZ3VtZW50IHRoYXQgaXMgKGNoYXIgKikgKi8KKy8qICN1bmRlZiBUR0VUU1RSX0NIQVJfUCAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNpZ3NldCgpIGZ1bmN0aW9uLiAgKi8KKy8qICN1bmRlZiBIQVZFX1NJR1NFVCAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHBnaWQoKSBmdW5jdGlvbi4gICovCisvKiAjdW5kZWYgSEFWRV9TRVRQR0lEICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0c2lkKCkgZnVuY3Rpb24uICAqLworLyogI3VuZGVmIEhBVkVfU0VUU0lEICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2lnc2V0KCkgZnVuY3Rpb24uICAqLworLyogI3VuZGVmIEhBVkVfU0lHU0VUICovCisKKyNkZWZpbmUgVEdFVEVOVF9aRVJPX0VSUgorI2RlZmluZSBIQVZFX0dFVENXRAorI2RlZmluZSBIQVZFX1NUUkNTUE4KKyNkZWZpbmUgSEFWRV9TVFJUT0wKKyNkZWZpbmUgSEFWRV9UR0VURU5UCisjZGVmaW5lIEhBVkVfTUVNU0VUCisjZGVmaW5lIEhBVkVfTUVNQ01QCisjZGVmaW5lIEhBVkVfU1RSRVJST1IKKyNkZWZpbmUgSEFWRV9GQ0hPV04KKyNkZWZpbmUgSEFWRV9SRU5BTUUKKyNkZWZpbmUgSEFWRV9RU09SVAorI2RlZmluZSBIQVZFX0ZTWU5DCisjZGVmaW5lIEhBVkVfR0VUUFdVSUQKKyNkZWZpbmUgSEFWRV9HRVRQV05BTQorI2RlZmluZQlIQVZFX1NURExJQl9ICisjZGVmaW5lCUhBVkVfU1RSSU5HX0gKKyNkZWZpbmUJSEFWRV9FUlJOT19ICisjZGVmaW5lIEhBVkVfT1BFTkRJUgorI2RlZmluZSBIQVZFX1BVVEVOVgorI2RlZmluZSBIQVZFX1NFVEVOVgorI2RlZmluZSBIQVZFX1NFVEpNUF9ICisKKyN1bmRlZglIQVZFX0RJUkVOVF9ICisjdW5kZWYJSEFWRV9TWVNfTkRJUl9ICisjdW5kZWYJSEFWRV9TWVNfRElSX0gKKyN1bmRlZglIQVZFX05ESVJfSAorI3VuZGVmCUhBVkVfU1lTX1dBSVRfSAorI3VuZGVmCUhBVkVfVU5JT05fV0FJVAorI3VuZGVmICBIQVZFX1NZU19TRUxFQ1RfSAorI3VuZGVmICBIQVZFX1NZU19VVFNOQU1FX0gKKyN1bmRlZiAgSEFWRV9TWVNfU1lTVEVNSU5GT19ICisjdW5kZWYgIEhBVkVfVEVSTUNBUF9ICisjdW5kZWYJSEFWRV9TR1RUWV9ICisjdW5kZWYJSEFWRV9TWVNfSU9DVExfSAorI3VuZGVmCUhBVkVfVEVSTUlPX0gKKyN1bmRlZglIQVZFX1NUUk9QVFNfSAorI3VuZGVmCUhBVkVfU1lTX1NUUkVBTV9ICisjdW5kZWYJSEFWRV9TWVNfUFRFTV9ICisjdW5kZWYJSEFWRV9URVJNSU9TX0gKKyN1bmRlZglIQVZFX0xJQkNfSAorI3VuZGVmCUhBVkVfU1lTX1NUQVRGU19ICisjdW5kZWYJSEFWRV9TWVNfUE9MTF9ICisjdW5kZWYJSEFWRV9QV0RfSAorI3VuZGVmICBIQVZFX0ZDSERJUgorCisvKiBIYXJkd2FyZSBzcGVjaWZpYyAqLworI2lmZGVmICBWQVgKKyN1bmRlZiAgSEFWRV9HRVRUSU1FT0ZEQVkKKyN1bmRlZiAgSEFWRV9VU0xFRVAKKyN1bmRlZiAgSEFWRV9TVFJDQVNFQ01QCisjdW5kZWYgIEhBVkVfU1RSSU5HU19ICisjdW5kZWYJSEFWRV9TSUdTRVRKTVAKKyNlbHNlCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZCisjZGVmaW5lIEhBVkVfVVNMRUVQCisjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUAorI2RlZmluZSBIQVZFX1NUUklOR1NfSAorI2RlZmluZQlIQVZFX1NJR1NFVEpNUAorI2VuZGlmCisKKy8qIENvbXBpbGVyIHNwZWNpZmljICovCisjaWZkZWYgIFZBWEMKKyN1bmRlZiAgSEFWRV9TRUxFQ1QKKyN1bmRlZiAgSEFWRV9GQ05UTF9ICisjdW5kZWYgIEhBVkVfVU5JU1REX0gKKyN1bmRlZiAgSEFWRV9TWVNfVElNRV9ICisjdW5kZWYgIEhBVkVfTE9DQUxFX0gKKyNkZWZpbmUgQlJPS0VOX0xPQ0FMRQorI3VuZGVmICBIQVZFX0lDT05WX0gKKyN1bmRlZiAgSEFWRV9JQ09OVgorI3VuZGVmICBEWU5BTUlDX0lDT05WCisjdW5kZWYJSEFWRV9TVFJGVElNRQorI2Vsc2UKKyNkZWZpbmUgSEFWRV9TRUxFQ1QKKyNkZWZpbmUgSEFWRV9GQ05UTF9ICisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorI2RlZmluZSBIQVZFX1NZU19USU1FX0gKKyNkZWZpbmUgSEFWRV9MT0NBTEVfSAorI2RlZmluZSBCUk9LRU5fTE9DQUxFCisjdW5kZWYgIEhBVkVfSUNPTlZfSAorI3VuZGVmICBIQVZFX0lDT05WCisjdW5kZWYgIERZTkFNSUNfSUNPTlYKKyNkZWZpbmUJSEFWRV9TVFJGVElNRQorI2VuZGlmCisKKy8qIEdVSSBzdXBwb3J0IGRlZmluZXMgKi8KKyNpZmRlZiBGRUFUX0dVSV9NT1RJRgorI2RlZmluZSBIQVZFX1gxMQorI2RlZmluZSBVU0VfRk9OVFNFVAorI3VuZGVmICBYX0xPQ0FMRQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3Nfdm1zX2ZpeC5jb20gYi9zcmMvb3Nfdm1zX2ZpeC5jb20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1NWEzNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc192bXNfZml4LmNvbQpAQCAtMCwwICsxLDI3NiBAQAorJCEKKyQhIE9TX1ZNU19GSVguQ09NCiskISBDb3B5cmlnaHQgKEMpIDIwMDAsIFN0ZXBoZW4gUC4gV2FsbAorJCEKKyQhIEZpbHRlciBmaWxlcyBmb3IgIiNpZiIgbGluZSBjb250aW51YXRpb25zIHVzaW5nIGEgJ1wnIGFuZCBjb252ZXJ0CiskISB0aGVtIHRvIHVzZSBjb21tZW50cyBmb3IgdGhlIGNvbnRpbnVhdGlvbi4gIE5lY2Vzc2FyeSBmb3IgVkFYQyAtIGl0CiskISBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlICdcJy4KKyQhCiskISBZZXMsIHRoaXMgaXMgaG9ua2luJyB1Z2x5IGNvZGUsIGJ1dCBJIGRlbGliZXJhdGVseSBhdm9pZGVkCiskISAgICAgaWYgLi4uCiskISAgICAgdGhlbgorJCEJICAgLi4uLgorJCEgICAgIGVuZGlmCiskISBhbmQgY2FsbC9zdWJyb3V0aW5lL2VuZHN1YnJvdXRpbmUgY29uc3RydWN0cywgYmVjYXVzZSBJIGNhbiBzdGlsbAorJCEgcmVtZW1iZXIgd2hlbiBEQ0wgZGlkbid0IGhhdmUgdGhlbSwgYW5kIEkgd2FudGVkIHRoaXMgdG8gYmUgYXMKKyQhIHBvcnRhYmxlIGFzIHBvc3NpYmxlLCBzby4uLiAgSWYgeW91IHdhbnQgdG8gc3RydWN0dXJlIGl0IG5pY2VyIGZvcgorJCEgeW91ciBvd24gdXNlLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGRvIHNvLiAgSG93ZXZlciwgcGxlYXNlIG9ubHkKKyQhIGRpc3RyaWJ1dGUgaXQgaW4gaXQncyBvcmlnaW5hbCBmb3JtLgorJCEKKyQhIEkgd3JvdGUgaXQgaW4gRENMIGZvciBwb3J0YWJpbGl0eSBhbmQgZWFzZSBvZiB1c2UgLSBhIEMgdmVyc2lvbgorJCEgd291bGQgZGVmaW5pdGVseSBydW4gZmFzdGVyLCBidXQgdGhlbiBJJ2QgaGF2ZSB0byBkZWFsIHdpdGggY29tcGlsZXIKKyQhIGRpZmZlcmVuY2VzLCBhbmQgdXNlcnMgd291bGQgaGF2ZSB0byBkZWFsIHdpdGggY29uZmlndXJpbmcgYW5kCiskISBidWlsZGluZyBpdC4gIFdpdGggRENMLCBpdCBydW5zIG91dC1vZi10aGUtYm94LgorJCEKKyQhIE5vdGUgdGhhdCBpZiB5b3UgdXNlIHRoaXMgZnJvbSBhIFZNUyBzeXN0ZW0gdG8gbW9kaWZ5IGZpbGVzIG9uIGEKKyQhIG1vdW50ZWQgbmV0d29yayBkcml2ZSwgZiRzZWFyY2goKSBtYXkgcmV0dXJuIG9ubHkgdGhlIGZpcnN0IG1hdGNoaW5nCiskISBmaWxlIHdoZW4gaXQgdHJpZXMgdG8gcmVzb2x2ZSB3aWxkY2FyZHMuICBJIGhhdmUgYmVlbiB1bmFibGUgdG8gZmluZAorJCEgYSB3YXkgYXJvdW5kIHRoaXMuICBFaXRoZXIgY29weSB0aGUgZmlsZXMgdG8gYSBsb2NhbCBkaXNrLCBvciBzcGVjaWZ5CiskISBlYWNoIGZpbGUgaW5kaXZpZHVhbGx5IChLZWVwIGluIG1pbmQgaWYgeW91IGRvIHRoaXMgdGhhdCBWTVMgbGltaXRzCiskISB5b3UgdG8gZWlnaHQgcGFyYW1ldGVycywgc28geW91J2xsIG9ubHkgYmUgYWJsZSB0byBmaWx0ZXIgZWlnaHQgZmlsZXMKKyQhIGF0IGEgdGltZSkuCiskIQorJCEgSWRlYXMuLi4KKyQhIC0gVXNlICdzZWFyY2ggZmlsZXNwZWMgIiMiLCJpZiIsIlwiL21hdD1hbmQnIHRvIHF1aWNrbHkgZWxpbWluYXRlCiskISAgIGZpbGVzIHRoYXQgZGVmaW5pdGVseSBkb24ndCBuZWVkIGZpbHRlcmluZy4gIFRoaXMgc2hvdWxkIHNwZWVkCiskISAgIHRoaW5ncyB1cCBjb25zaWRlcmFibGUuICBSZWFkaW5nIGFuZCB3cml0aW5nIGV2ZXJ5IGxpbmUgZnJvbSBldmVyeQorJCEgICBmaWxlIHRha2VzIHF1aXRlIGEgYml0IG9mIHRpbWUuLi4KKyQhIC0gRXJyb3IgaGFuZGxpbmcgaXNuJ3QgZ3JlYXQuICBDb21lIHVwIHdpdGggc29tZXRoaW5nIGJldHRlci4uLi4KKyQhCiskISBFLW1haWwgYWRkcmVzc2VzOgorJCEgU3RldmUgV2FsbAkJaGl0Y2hlZDk3QHZlbG5ldC5jb20KKyQhIFpvbHRhbiBBcnBhZGZmeSAgICAgIGFycGFkZmZ5QHBvbGFyaG9tZS5jb20KKyQhIEpvaG4gVy4gSGFtaWxsICAgICAgIGpoYW1pbGwzQGZvcmQuY29tCiskIQorJCEgTW9kaWZpY2F0aW9uIEhpc3Rvcnk6CiskISAxM0p1bDAwIFNXYWxsCUluaXRpYWwgVmVyc2lvbgorJCEgMTRKdWwwMCBaQXJwYWRmZnkgICAgRGlzcGxheSB1c2FnZQorJCEgMDZNYXIwMSBKSGFtaWxsICAgICAgQ3RybC1NIHByb2JsZW0gZml4CiskIQorJCEgSWYgbm8gcGFyYW1ldGVycywgb3IgIi1oIiBmb3IgYSBwYXJhbWV0ZXIsIHByaW50IHVzYWdlIGFuZCBleGl0CiskCiskIGFsbCA9ICInJ3AxJycncDInJydwMycnJ3A0JycncDUnJydwNicnJ3A3JycncDgnIgorJCBpZiAoYWxsIC5uZXMuICIiKSAuYW5kLiAocDEgLm5lcy4gIi1oIikgLmFuZC4gKHAxIC5uZXMuICItSCIpIHRoZW4gZ290byBzdGFydHVwCiskCiskIHdyaXRlIHN5cyRvdXRwdXQgIk9TX1ZNU19GSVggLSBERUNDLT5WQVhDIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlIGNvbnZlcnQgc2NyaXB0IgorJCB3cml0ZSBzeXMkb3V0cHV0ICJVc2FnZTogQE9TX1ZNU19GSVggPGZpbGVuYW1lXzE+IDxmaWxlbmFtZV8yPiA8Li4uPiIKKyQgd3JpdGUgc3lzJG91dHB1dCAiICAgICAgIEBPU19WTVNfRklYIDxmaWxlbmFtZSB3aXRoIHdpbGRjYXJkPiA8Li4uPiIKKyQgd3JpdGUgc3lzJG91dHB1dCAiIgorJCB3cml0ZSBzeXMkb3V0cHV0ICJFeGFtcGxlOiBAT1NfVk1TX0ZJWCAqLmMgKi5oIFsucHJvdG9dKi5wcm8iCiskIHdyaXRlIHN5cyRvdXRwdXQgIlBsZWFzZSBub3RlLCB5b3UgY2FuIGRlZmluZSB1cCB0byA4IHBhcmFtZXRlcnMuIgorJCB3cml0ZSBzeXMkb3V0cHV0ICIiCiskIGV4aXQKKyQKKyQhIENyZWF0ZSBhbiBGREwgZmlsZSB0byBjb252ZXJ0IFZGQyBmb3JtYXQgZmlsZXMgdG8gU3RyZWFtX0xGLgorJCEgVk1TIE9QRU4vV1JJVEUgY29tbWFuZCBjcmVhdGVzIFZGQyBmaWxlcy4gIFdoZW4gVkZDIGZpbGVzIGFyZSByZWFkCiskISBvdXQgdW5kZXIgdW5peCwgdGhleSBhcHBlYXIgdG8gaGF2ZSBiaW5hcnkgZGF0YSBlbWJlZGRlZCBpbiB0aGVtLgorJCEgVG8gYmUgZnJpZW5kbHksIHdlJ2xsIGNvbnZlcnQgdGhlbSB0byBTdHJlYW1fTEYsIHdoaWNoIHJlYWRzIGp1c3QKKyQhIGZpbGUgb24gdW5peC4KKyQKKyRzdGFydHVwOgorJCBvbiBjb250cm9sX3kgdGhlbiBnb3RvIHN0b3BmZGwKKyQgb3Blbi93cml0ZSBmZGwgW11jb252ZXJ0LmZkbAorJCB3cml0ZSBmZGwgIlNZU1RFTSIKKyQgd3JpdGUgZmRsICIgU09VUkNFIFZBWC9WTVMiCiskIHdyaXRlIGZkbCAiRklMRSIKKyQgd3JpdGUgZmRsICIgT1JHQU5JWkFUSU9OIFNFUVVFTlRJQUwiCiskIHdyaXRlIGZkbCAiUkVDT1JEIgorJCB3cml0ZSBmZGwgIiBCTE9DS19TUEFOIFlFUyIKKyQgd3JpdGUgZmRsICIgQ0FSUklBR0VfQ09OVFJPTCBDQVJSSUFHRV9SRVRVUk4iCiskIHdyaXRlIGZkbCAiIEZPUk1BVCBTVFJFQU0iCiskIHdyaXRlIGZkbCAiIFNJWkUgMCIKKyQgY2xvc2UgZmRsCiskIG9uIGNvbnRyb2xfeSB0aGVuIGdvdG8gZW5kcGFyYW1sb29wCiskCiskISBTb21lIHN5bWJvbHMgZm9yIHVzZSBsYXRlciBvbi4uLgorJAorJCBzcGMgPSAiIgorJCBzcGNbMCw4XSA9IDMyCiskIHRhYiA9ICIiCiskIHRhYlswLDhdID0gOQorJAorJCEgU2NhbiBhbGwgcG9zaXRpb25hbCBhcmd1bWVudHMsIGRvIHdpbGRjYXJkIGV4cGFuc2lvbiwgYW5kIGNhbGwgdGhlCiskISBmaWx0ZXIgcm91dGluZSBvbiBlYWNoIHJlc3VsdGluZyBmaWxlbmFtZS4KKyQKKyQgY250ID0gMAorJHBhcmFtbG9vcDoKKyQgY250ID0gY250ICsgMQorJAorJCEgVk1TIG9ubHkgYWxsb3dzIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIFAxIC0gUDgsIHNvIHN0b3AgYWZ0ZXIKKyQhIHByb2Nlc3NpbmcgOCBhcmd1bWVudHMuCiskCiskIGlmIGNudCAuZXEuIDkgdGhlbiBnb3RvIGVuZHBhcmFtbG9vcAorJAorJCEgU2tpcCBhbnkgZW1wdHkgcGFyYW1ldGVyLgorJAorJCBpZiBQJ2NudCcgLmVxcy4gIiIgdGhlbiBnb3RvIHBhcmFtbG9vcAorJAorJCEgR290IGEgcGFyYW1ldGVyIC0gZG8gd2lsZGNhcmQgZXhwYW5zaW9uLgorJAorJCBhcmcgPSBmJHBhcnNlKFAnY250JykKKyQgd3JpdGUgc3lzJG91dHB1dCAiUGFyc2luZyAnJ2FyZycuLi4iCiskIGxhc3QgPSAiIgorJGZpbGVsb29wOgorJCBmaWxlID0gZiRzZWFyY2goYXJnLCAxKQorJAorJCEgZiRzZWFyY2goKSByZXR1cm5zICIiIGFmdGVyIHRoZSBsYXN0IG9mIG11bHRpcGxlIG1hdGNoZXMuCiskCiskIGlmIGZpbGUgLmVxcy4gIiIgdGhlbiBnb3RvIGVuZGZpbGVsb29wCiskCiskISBTdHJpcCB0aGUgdmVyc2lvbiBudW1iZXIuCiskCiskIGZpbGUgPSBmJHBhcnNlKGZpbGUsLCwiREVWSUNFIikgKyBmJHBhcnNlKGZpbGUsLCwiRElSRUNUT1JZIikgKyAtCisgICAgICAgICBmJHBhcnNlKGZpbGUsLCwiTkFNRSIpICsgZiRwYXJzZShmaWxlLCwsIlRZUEUiKQorJAorJCEgZiRzZWFyY2goKSByZXR1cm5zIHRoZSBzYW1lIGZpbGVuYW1lIG92ZXIgYW5kIG92ZXIgaWYgdGhlcmUgYXJlIG5vCiskISB3aWxkY2FyZHMgaW4gaXQuCiskCiskIGlmIGZpbGUgLmVxcy4gbGFzdCB0aGVuIGdvdG8gZW5kZmlsZWxvb3AKKyQgbGFzdCA9IGZpbGUKKyQKKyQhIEdvdCBhIHZhbGlkIGZpbGUgLSBmaWx0ZXIgaXQuCiskCiskIGdvc3ViIGZpbHRlcgorJAorJCEgUmVzZXQgb3VyIGVycm9yIGhhbmRsaW5nLgorJAorJCBvbiBjb250cm9sX3kgdGhlbiBnb3RvIGVuZHBhcmFtbG9vcAorJAorJCEgU2VlIGlmIHRoZXJlJ3MgYW5vdGhlciBtYXRjaGluZyBmaWxlbmFtZS4KKyQKKyQgZ290byBmaWxlbG9vcAorJGVuZGZpbGVsb29wOgorJAorJCEgQ2hlY2sgZm9yIGFub3RoZXIgcGFyYW1ldGVyLgorJAorJCBnb3RvIHBhcmFtbG9vcAorJGVuZHBhcmFtbG9vcDoKKyQKKyQhIEZpbmlzaGVkIC0gZGVsZXRlIHRoZSBGREwgZmlsZS4KKyQKKyQgZGVsZXRlIFtdY29udmVydC5mZGw7CiskCiskISBTbyBsb25nLCBhbmQgdGhhbmtzIGZvciBhbGwgdGhlIGZpc2guLi4KKyQKKyQgZXhpdAorJAorJAorJCEgVXNlciBhYm9ydGVkIHdpdGggQ29udHJvbC1ZIGR1cmluZyBjcmVhdGlvbiBvZiBGREwgZmlsZS4KKyQhIENsb3NlIHRoZSBmaWxlLCBkZWxldGUgaXQsIGFuZCBleGl0IHdpdGggYW4gZXJyb3Igc3RhdHVzLgorJAorJHN0b3BmZGw6CiskIGNsb3NlIGZkbAorJCBkZWxldGUgW11jb252ZXJ0LmZkbDsKKyQgZXhpdCAlWDEwMDAwMDAwCiskCiskCiskISBGaWx0ZXIgYSBmaWxlLgorJAorJGZpbHRlcjoKKyQgd3JpdGUgc3lzJG91dHB1dCAiRmlsdGVyaW5nICcnZmlsZScuLi4iCiskCiskISBHZXQgYSB0ZW1wb3JhcnkgZmlsZW5hbWUgZnJvbSB0aGUgc3Vicm91dGluZSBwYXJhbWV0ZXIuCiskCiskIHRtcCA9IGYkcGFyc2UoZmlsZSwsLCJERVZJQ0UiKSArIGYkcGFyc2UoZmlsZSwsLCJESVJFQ1RPUlkiKSArIC0KKyAgICAgICAgInRtcF8iICsgZiRwYXJzZShmaWxlLCwsIk5BTUUiKSArIGYkcGFyc2UoZmlsZSwsLCJUWVBFIikKKyQgb24gY29udHJvbF95IHRoZW4gZ290byBhYm9ydGVkCiskIG9wZW4gL3JlYWQgaW5wdXQgJ2ZpbGUnCiskIG9wZW4gL3dyaXRlIG91dHB1dCAndG1wJworJCBjaGFuZ2VkID0gMAorJHJlYWRsb29wOgorJCByZWFkL2VuZF9vZl9maWxlPWVuZHJlYWRsb29wL2Vycm9yPXJlYWRsb29wZXJyb3IgaW5wdXQgbGluZQorJAorJCEgR2V0IHRoZSBmaXJzdCAzIG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gdGhlIGxpbmUuCiskCiskIHN0YXJ0ID0gZiRleHRyYWN0KDAsMyxmJGVkaXQobGluZSwiQ09MTEFQU0UsTE9XRVJDQVNFIikpCiskCiskISBJZiB0aGUgbGluZSBkb2Vzbid0IHN0YXJ0IHdpdGggc29tZSBmb3JtIG9mICIjaWYiLCBqdXN0IHdyaXRlIGl0IHRvCiskISB0aGUgdGVtcCBmaWxlLgorJAorJCBpZiBzdGFydCAubmVzLiAiI2lmIiB0aGVuIGdvdG8gd3JpdGVpdAorJGNoa2Jrc2xzaDoKKyQKKyQhIFNlZSBpZiB0aGUgbGluZSBlbmRzIGluIGEgYmFja3NsYXNoLiAgSWYgbm90LCB3cml0ZSBpdCB0byB0aGUgdGVtcCBmaWxlLgorJAorJCBpZiBmJGV4dHJhY3QoZiRsZW5ndGgobGluZSktMSwxLGxpbmUpIC5uZXMuICJcIiB0aGVuIGdvdG8gd3JpdGVpdAorJAorJCEgT2ssIGdvdCBhIGxpbmUgdGhhdCBuZWVkcyB0byBiZSBtb2RpZmllZC4gIE1hcmsgdGhpcyBmaWxlIGFzIGNoYW5nZWQsCiskISB0aGVuIHJlcGxhY2UgdGhlIGJhY2tzbGFzaCBhdCB0aGUgZW5kIHdpdGggdGhlIGJlZ2lubmluZyBvZiBhIGNvbW1lbnQKKyQhICgvKiksIGFuZCB3cml0ZSBpdCB0byB0aGUgdGVtcCBmaWxlLgorJAorJCBjaGFuZ2VkID0gMQorJCBsaW5lID0gZiRleHRyYWN0KDAsZiRsZW5ndGgobGluZSktMSxsaW5lKSArICIvKiIKKyQgd3JpdGUvc3ltYm9sIG91dHB1dCBsaW5lCiskCiskISBHZXQgYW5vdGhlciBsaW5lIGZyb20gdGhlIGlucHV0LgorJAorJCByZWFkL2VuZF9vZl9maWxlPWVuZHJlYWRsb29wL2Vycm9yPXJlYWRsb29wZXJyb3IgaW5wdXQgbGluZQorJAorJCEgR3JhYiBhbGwgdGhlIGJsYW5rIHNwYWNlIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4KKyQKKyQgc3BhY2VzID0gIiIKKyRzcGFjZWxvb3A6CiskIGlmIChmJGV4dHJhY3QoMCwxLGxpbmUpIC5uZXMuIHNwYykgLmFuZC4gKGYkZXh0cmFjdCgwLDEsbGluZSkgLm5lcy4gdGFiKSAtCisgICAgICAgIHRoZW4gZ290byBlbmRzcGFjZWxvb3AKKyQgc3BhY2VzID0gc3BhY2VzICsgZiRleHRyYWN0KDAsMSxsaW5lKQorJCBsaW5lID0gZiRleHRyYWN0KDEsZiRsZW5ndGgobGluZSktMSxsaW5lKQorJCBnb3RvIHNwYWNlbG9vcAorJGVuZHNwYWNlbG9vcDoKKyQKKyQhIFN0aWNrIGFuIGVuZC1jb21tZW50ICgqLykgYWZ0ZXIgdGhlIGxlYWRpbmcgYmxhbmtzLCB0aGVuIGdvIGJhY2sgYW5kCiskISBjaGVjayBmb3IgYSB0cmFpbGluZyBiYWNrc2xhc2ggYWdhaW4sIHRvIGNhdGNoIGNvZGUgdGhhdCBjb250aW51ZXMKKyQhIGFjcm9zcyBtdWx0aXBsZSBsaW5lcy4KKyQKKyQgbGluZSA9IHNwYWNlcyArICIqLyAiICsgbGluZQorJCBnb3RvIGNoa2Jrc2xzaAorJAorJCEgV3JpdGUgdGhlIGN1cnJlbnQgbGluZSwgKHdpbGwgZWl0aGVyIGJlIGFuIHVudG91Y2hlZCBsaW5lLCBvciB0aGUKKyQhIGxhc3QgbGluZSBvZiBhIGNvbnRpbnVhdGlvbikgdG8gdGhlIHRlbXAgZmlsZSwgYW5kIGdvIGJhY2sgdG8gbG9vaworJCEgZm9yIG1vcmUgaW5wdXQuCiskIQorJHdyaXRlaXQ6CiskIHdyaXRlL3N5bWJvbCBvdXRwdXQgbGluZQorJCBnb3RvIHJlYWRsb29wCiskCiskISBIaXQgRU9GLiAgQ2xvc2UgdGhlIGlucHV0ICYgb3V0cHV0LCBhbmQgaWYgdGhlIGZpbGUgd2FzIG1hcmtlZCBhcworJCEgY2hhbmdlZCwgY29udmVydCBpdCBmcm9tIFZNUyBWRkMgZm9ybWF0LCB0byB0aGUgbW9yZSBjb21tb24gU3RyZWFtX0xGCiskISBmb3JtYXQsIHNvIGl0IGRvZXNuJ3Qgc2hvdyB1cCBmdWxsIG9mIGdhcmJhZ2UgaWYgc29tZW9uZSB0cmllcyB0bworJCEgZWRpdCBpdCBvbiBhbm90aGVyIE9TLgorJCEKKyRlbmRyZWFkbG9vcDoKKyQgY2xvc2UgaW5wdXQKKyQgY2xvc2Ugb3V0cHV0CiskIGlmIGNoYW5nZWQgLmVxLiAwIHRoZW4gZ290byBub2NvcHkKKyQgY29udmVydCAndG1wJyAnZmlsZScgL2ZkbD1bXWNvbnZlcnQuZmRsCiskbm9jb3B5OgorJCBkZWxldGUgJ3RtcCc7CiskCiskISBFeGl0IHRoaXMgc3Vicm91dGluZS4KKyQKKyQgZ290byBlbmRmdW5jCiskCiskISBHb3QgYSByZWFkIGVycm9yLiAgU2F5IHNvLCBhbmQgdHJhc2ggdGhlIHRlbXAgZmlsZS4KKyQKKyRyZWFkbG9vcGVycm9yOgorJCB3cml0ZSBzeXMkZXJyb3IgIkVycm9yIHByb2Nlc3NpbmcgZmlsZSAnJ2ZpbGUnIgorJCBnb3RvIGVycm9yZW5kCiskCiskISBHb3QgYW4gaW50ZXJydXB0LiAgU2F5IHNvLCBhbmQgdHJhc2ggdGhlIHRlbXAgZmlsZS4KKyQKKyRhYm9ydGVkOgorJCB3cml0ZSBzeXMkZXJyb3IgIkFib3J0ZWQgd2hpbGUgcHJvY2Vzc2luZyBmaWxlICcnZmlsZSciCiskCiskISBDb21tb24gY29kZSBmb3IgcmVhZCBlcnJvcnMgYW5kIGludGVycnVwdHMuCiskCiskZXJyb3JlbmQ6CiskIGNsb3NlIGlucHV0CiskIGNsb3NlIG91dHB1dAorJCBkZWxldGUgJ3RtcCc7CiskIHJldHVybiAlWDEwMDAwMDAwCiskCiskISBFbmQgb2YgZmlsdGVyIHN1YnJvdXRpbmUuCiskCiskZW5kZnVuYzoKKyQgcmV0dXJuCiskCiskISBFT0YKZGlmZiAtLWdpdCBhL3NyYy9vc192bXNfbW1zLmMgYi9zcmMvb3Nfdm1zX21tcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NTM4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3Nfdm1zX21tcy5jCkBAIC0wLDAgKzEsNzYgQEAKKyNpbmNsdWRlCTxzdGRpby5oPgorI2luY2x1ZGUJPHN0ZGxpYi5oPgorI2luY2x1ZGUJPHN0cmluZy5oPgorI2luY2x1ZGUJPHVuaXhpby5oPgorI2luY2x1ZGUJInZpbS5oIgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBGSUxFCSpmcGksICpmcG87CisgICAgY2hhcgljbWRbMTMyXSwgYnVmW0JVRlNJWl0sICphcmdwLCAqZXJyb3JfZmlsZSwgdGFyZ2V0WzEzMl0sICptbXM7CisgICAgaW50CQllcnIgPSAwLCBlcnJfbGluZSA9IDA7CisKKyAgICBtbXMgPSAibW1zIjsKKyAgICBhcmdjLS07CisgICAgYXJndisrOworICAgIHdoaWxlIChhcmdjLS0gPiAwKQorICAgIHsKKwlhcmdwID0gKmFyZ3YrKzsKKwlpZiAoKmFyZ3AgPT0gJy0nKQorCXsKKwkgICAgc3dpdGNoICgqKythcmdwKQorCSAgICB7CisJCWNhc2UgJ20nOgorCQkgICAgbW1zID0gKythcmdwOworCQkgICAgYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkgICAgaWYgKCEqKGVycm9yX2ZpbGUgPSArK2FyZ3ApKQorCQkgICAgeworCQkJZXJyb3JfZmlsZSA9ICphcmd2Kys7CisJCQlhcmdjLS07CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIGJyZWFrOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIGlmICgqdGFyZ2V0KQorCQlzdHJjYXQodGFyZ2V0LCAiICIpOworCSAgICBzdHJjYXQodGFyZ2V0LCBhcmdwKTsKKwl9CisgICAgfQorICAgIHNwcmludGYoY21kLCAiJXMvb3V0cHV0PXRtcDplcnJvcnMudmltX3RtcCAlcyIsIG1tcywgdGFyZ2V0KTsKKyAgICBzeXN0ZW0oY21kKTsKKyAgICBmcGkgPSBmb3BlbigidG1wOmVycm9ycy52aW1fdG1wIiwgInIiKTsKKyAgICBmcG8gPSBmb3BlbihlcnJvcl9maWxlLCAidyIpOworICAgIHdoaWxlIChmZ2V0cyhidWYsIEJVRlNJWiwgZnBpKSkKKyAgICB7CisJaWYgKCFtZW1jbXAoYnVmLCAiJUNDLSIsIDQpKQorCXsKKwkgICAgZXJyX2xpbmUrKzsKKwkgICAgYnVmW3N0cmxlbihidWYpLTFdID0gJ1wwJzsKKwkgICAgZXJyKys7CisJfQorCWVsc2UKKwl7CisJICAgIGlmIChlcnJfbGluZSkKKwkgICAgeworCQlpZiAoc3Ryc3RyKGJ1ZiwgXygiQXQgbGluZSIpKSkKKwkJeworCQkgICAgZXJyX2xpbmUgPSAwOworCQkgICAgZnByaW50ZihmcG8sICJAIik7CisJCX0KKwkJZWxzZQorCQkgICAgYnVmW3N0cmxlbihidWYpLTFdID0gJ1wwJzsKKwkgICAgfQorCX0KKwlmcHJpbnRmKGZwbywgIiVzIiwgYnVmKTsKKyAgICB9CisgICAgZmNsb3NlKGZwaSk7CisgICAgZmNsb3NlKGZwbyk7CisgICAgd2hpbGUgKCFkZWxldGUoInRtcDplcnJvcnMudmltX3RtcCIpKQorCS8qbm9wKi87CisgICAgZXhpdChlcnIgPyA0NCA6IDEpOworICAgIHJldHVybigwKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9vc193MzJkbGwuYyBiL3NyYy9vc193MzJkbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2ZlYzFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX3czMmRsbC5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCQlHVUkgc3VwcG9ydCBieSBSb2JlcnQgV2ViYgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworLyoKKyAqIFdpbmRvd3MgR1VJOiBtYWluIHByb2dyYW0gKERMTCkgZW50cnkgcG9pbnQ6CisgKgorICogUm9uIEFhcm9uIDxyb25haGFyb25AeWFob28uY29tPiB3cm90ZSB0aGlzIGFuZCAgdGhlIERMTCBzdXBwb3J0IGNvZGUuCisgKi8KKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorCitCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSAgaGluc3RETEwsIERXT1JECWZkd1JlYXNvbiwgTFBWT0lEICBscHZSZXNlcnZlZCkKK3sKKyAgICByZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL29zX3czMmV4ZS5jIGIvc3JjL29zX3czMmV4ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNzg3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3NfdzMyZXhlLmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCQlHVUkgc3VwcG9ydCBieSBSb2JlcnQgV2ViYgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworLyoKKyAqIFdpbmRvd3MgR1VJOiBtYWluIHByb2dyYW0gKEVYRSkgZW50cnkgcG9pbnQ6CisgKgorICogUm9uIEFhcm9uIDxyb25haGFyb25AeWFob28uY29tPiB3cm90ZSB0aGlzIGFuZCAgdGhlIERMTCBzdXBwb3J0IGNvZGUuCisgKi8KKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmZGVmIF9fTUlOR1czMl9fCisjIGlmbmRlZiBfY2RlY2wKKyMgIGRlZmluZSBfY2RlY2wKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBjcHJvdG8gZG9lc24ndCBjcmVhdGUgYSBwcm90b3R5cGUgZm9yIG1haW4oKSAqLworaW50IF9jZGVjbAorI2lmIGRlZmluZWQoRkVBVF9HVUlfVzMyKQorVmltTWFpbgorI2Vsc2UKKyAgICBtYWluCisjZW5kaWYKKwlfX0FSR1MoKGludCBhcmdjLCBjaGFyICoqYXJndikpOworaW50IChfY2RlY2wgKnBtYWluKShpbnQsIGNoYXIgKiopOworCisjaWZuZGVmIFBST1RPCisjaWZkZWYgRkVBVF9HVUkKKyNpZm5kZWYgVklNRExMCit2b2lkIF9jZGVjbCBTYXZlSW5zdChISU5TVEFOQ0UgaEluc3QpOworI2VuZGlmCit2b2lkIChfY2RlY2wgKnBTYXZlSW5zdCkoSElOU1RBTkNFKTsKKyNlbmRpZgorCisgICAgaW50IFdJTkFQSQorV2luTWFpbigKKyAgICBISU5TVEFOQ0UJaEluc3RhbmNlLAorICAgIEhJTlNUQU5DRQloUHJldkluc3QsCisgICAgTFBTVFIJbHBzekNtZExpbmUsCisgICAgaW50CQluQ21kU2hvdykKK3sKKyAgICBpbnQJCWFyZ2M7CisgICAgY2hhcgkqKmFyZ3Y7CisgICAgY2hhcgkqdG9mcmVlOworICAgIGNoYXIJcHJvZ1syNTZdOworI2lmZGVmIFZJTURMTAorICAgIGNoYXIJKnA7CisgICAgSEFORExFCWhMaWI7CisjZW5kaWYKKworICAgIC8qIFJvbjogYWRkZWQgZnVsbCBwYXRoIG5hbWUgc28gdGhhdCB0aGUgJFZJTSB2YXJpYWJsZSB3aWxsIGdldCBzZXQgdG8gb3VyCisgICAgICogc3RhcnR1cCBwYXRoIChzbyB0aGUgLnZpbXJjIGZpbGUgY2FuIGJlIGZvdW5kIHcvbyBhIFZJTSBlbnYuIHZhci4pICovCisgICAgR2V0TW9kdWxlRmlsZU5hbWUoTlVMTCwgcHJvZywgMjU1KTsKKworICAgIC8qIFNlcGFyYXRlIHRoZSBjb21tYW5kIGxpbmUgaW50byBhcmd1bWVudHMuICovCisgICAgYXJnYyA9IGdldF9jbWRfYXJncyhwcm9nLCAoY2hhciAqKWxwc3pDbWRMaW5lLCAmYXJndiwgJnRvZnJlZSk7CisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisJTWVzc2FnZUJveCgwLCBfKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjb21tYW5kIGxpbmUuIiksCisJCQkJCQkJICAgXygiVklNIEVycm9yIiksIDApOworCXJldHVybiAwOworICAgIH0KKworI2lmZGVmIERZTkFNSUNfR0VUVEVYVAorICAgIC8qIEluaXRpYWxpemUgZ2V0dGV4dCBsaWJyYXJ5ICovCisgICAgZHluX2xpYmludGxfaW5pdChOVUxMKTsKKyNlbmRpZgorCisjaWZkZWYgVklNRExMCisgICAgLy8gTG9hZExpYnJhcnkgLSBnZXQgbmFtZSBvZiBkbGwgdG8gbG9hZCBpbiBoZXJlOgorICAgIHAgPSBzdHJyY2hyKHByb2csICdcXCcpOworICAgIGlmIChwICE9IE5VTEwpCisgICAgeworIyBpZmRlZiBERUJVRworCXN0cmNweShwKzEsICJ2aW0zMmQuZGxsIik7CisjIGVsc2UKKwlzdHJjcHkocCsxLCAidmltMzIuZGxsIik7CisjIGVuZGlmCisgICAgfQorICAgIGhMaWIgPSBMb2FkTGlicmFyeShwcm9nKTsKKyAgICBpZiAoaExpYiA9PSBOVUxMKQorICAgIHsKKwlNZXNzYWdlQm94KDAsIF8oIkNvdWxkIG5vdCBsb2FkIHZpbTMyLmRsbCEiKSwgXygiVklNIEVycm9yIiksIDApOworCWdvdG8gZXJyb3V0OworICAgIH0KKyAgICAvLyBmaXggdXAgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzCisjIGlmZGVmIEZFQVRfR1VJCisgICAgcFNhdmVJbnN0ID0gR2V0UHJvY0FkZHJlc3MoaExpYiwgKExQQ1NUUikyKTsKKyMgZW5kaWYKKyAgICBwbWFpbiA9IEdldFByb2NBZGRyZXNzKGhMaWIsIChMUENTVFIpMSk7CisgICAgaWYgKHBtYWluID09IE5VTEwpCisgICAgeworCU1lc3NhZ2VCb3goMCwgXygiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIpLAorCQkJCQkJCSAgICBfKCJWSU0gRXJyb3IiKSwwKTsKKwlnb3RvIGVycm91dDsKKyAgICB9CisjZWxzZQorIyBpZmRlZiBGRUFUX0dVSQorICAgIHBTYXZlSW5zdCA9IFNhdmVJbnN0OworIyBlbmRpZgorICAgIHBtYWluID0KKyMgaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpCisgICAgLy8mJiBkZWZpbmVkKF9fTUlOR1czMl9fKQorCVZpbU1haW4KKyMgZWxzZQorCW1haW4KKyMgZW5kaWYKKwk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSQorICAgIHBTYXZlSW5zdCgKKyNpZmRlZiBfX01JTkdXMzJfXworCSAgICBHZXRNb2R1bGVIYW5kbGUoTlVMTCkKKyNlbHNlCisJICAgIGhJbnN0YW5jZQorI2VuZGlmCisJICAgICk7CisjZW5kaWYKKyAgICBwbWFpbihhcmdjLCBhcmd2KTsKKworI2lmZGVmIFZJTURMTAorICAgIEZyZWVMaWJyYXJ5KGhMaWIpOworZXJyb3V0OgorI2VuZGlmCisgICAgZnJlZShhcmd2KTsKKyAgICBmcmVlKHRvZnJlZSk7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29zX3dpbjE2LmMgYi9zcmMvb3Nfd2luMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjFjY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX3dpbjE2LmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKy8qCisgKiBvc193aW4xNi5jCisgKgorICogV2luMTYgKFdpbmRvd3MgMy4xeCkgc3lzdGVtLWRlcGVuZGVudCByb3V0aW5lcy4KKyAqIENhcnZlZCBicnV0YWxseSBmcm9tIG9zX3dpbjMyLmMgYnkgVmluY2UgTmVncmkgPHZuQGFzbG5ldC5jby51az4KKyAqLworI2lmZGVmIF9fQk9STEFORENfXworIyBwcmFnbWEgd2FybiAtcGFyCisjIHByYWdtYSB3YXJuIC11Y3AKKyMgcHJhZ21hIHdhcm4gLXVzZQorIyBwcmFnbWEgd2FybiAtYXVzCisjIHByYWdtYSB3YXJuIC1vYnMKKyNlbmRpZgorCisjaW5jbHVkZSA8aW8uaD4KKyNpbmNsdWRlICJ2aW0uaCIKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZG9zLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxwcm9jZXNzLmg+CisKKyN1bmRlZiBjaGRpcgorI2luY2x1ZGUgPGRpcmVjdC5oPgorI2luY2x1ZGUgPHNoZWxsYXBpLmg+CS8qIHJlcXVpcmVkIGZvciBGaW5kRXhlY3V0YWJsZSgpICovCisKKworLyogUmVjb3JkIGFsbCBvdXRwdXQgYW5kIGFsbCBrZXlib2FyZCAmIG1vdXNlIGlucHV0ICovCisvKiAjZGVmaW5lIE1DSF9XUklURV9EVU1QICovCisKKyNpZmRlZiBNQ0hfV1JJVEVfRFVNUAorRklMRSogZmREdW1wID0gTlVMTDsKKyNlbmRpZgorCisKKy8qCisgKiBXaGVuIGdlbmVyYXRpbmcgcHJvdG90eXBlcyBmb3IgV2luMzIgb24gVW5peCwgdGhlc2UgbGluZXMgbWFrZSB0aGUgc3ludGF4CisgKiBlcnJvcnMgZGlzYXBwZWFyLiAgVGhleSBkbyBub3QgbmVlZCB0byBiZSBjb3JyZWN0LgorICovCisjaWZkZWYgUFJPVE8KK3R5cGVkZWYgaW50IEhBTkRMRTsKK3R5cGVkZWYgaW50IFNNQUxMX1JFQ1Q7Cit0eXBlZGVmIGludCBDT09SRDsKK3R5cGVkZWYgaW50IFNIT1JUOwordHlwZWRlZiBpbnQgV09SRDsKK3R5cGVkZWYgaW50IERXT1JEOwordHlwZWRlZiBpbnQgQk9PTDsKK3R5cGVkZWYgaW50IExQU1RSOwordHlwZWRlZiBpbnQgTFBUU1RSOwordHlwZWRlZiBpbnQgS0VZX0VWRU5UX1JFQ09SRDsKK3R5cGVkZWYgaW50IE1PVVNFX0VWRU5UX1JFQ09SRDsKKyMgZGVmaW5lIFdJTkFQSQordHlwZWRlZiBpbnQgQ09OU09MRV9DVVJTT1JfSU5GTzsKK3R5cGVkZWYgY2hhciAqIExQQ1NUUjsKKyMgZGVmaW5lIFdJTkJBU0VBUEkKK3R5cGVkZWYgaW50IElOUFVUX1JFQ09SRDsKKyMgZGVmaW5lIF9jZGVjbAorI2VuZGlmCisKKyNpZmRlZiBfX0JPUkxBTkRDX18KKy8qIGJlaW5nIGEgbW9yZSBBTlNJIGNvbXBsaWFudCBjb21waWxlciwgQm9ybGFuZEMgZG9lc24ndCBkZWZpbmUgX3N0cmljb2xsOgorICogYnV0IGl0IGRvZXMgaW4gQkMgNS4wMiEgKi8KKyMgaWYgX19CT1JMQU5EQ19fIDwgMHg1MDIKK2ludCBfc3RyaWNvbGwoY2hhciAqYSwgY2hhciAqYik7CisjIGVuZGlmCisjZW5kaWYKKworLyogY3Byb3RvIGRvZXNuJ3QgY3JlYXRlIGEgcHJvdG90eXBlIGZvciBtYWluKCkgKi8KK2ludCBfY2RlY2wKK1ZpbU1haW4KK19fQVJHUygoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSk7CitpbnQgKF9jZGVjbCAqcG1haW4pKGludCwgY2hhciAqKik7CisKKyNpZm5kZWYgUFJPVE8KK3ZvaWQgX2NkZWNsIFNhdmVJbnN0KEhJTlNUQU5DRSBoSW5zdCk7Cit2b2lkIChfY2RlY2wgKnBTYXZlSW5zdCkoSElOU1RBTkNFKTsKKworaW50IFdJTkFQSQorV2luTWFpbigKKyAgICBISU5TVEFOQ0UJaEluc3RhbmNlLAorICAgIEhJTlNUQU5DRQloUHJldkluc3QsCisgICAgTFBTVFIJbHBzekNtZExpbmUsCisgICAgaW50CQluQ21kU2hvdykKK3sKKyAgICBpbnQJCWFyZ2M7CisgICAgY2hhcgkqKmFyZ3Y7CisgICAgY2hhcgkqdG9mcmVlOworICAgIGNoYXIJcHJvZ1syNTZdOworCisgICAgLyoKKyAgICAgKiBSb246IGFkZGVkIGZ1bGwgcGF0aCBuYW1lIHNvIHRoYXQgdGhlICRWSU0gdmFyaWFibGUgd2lsbCBnZXQgc2V0IHRvIG91cgorICAgICAqIHN0YXJ0dXAgcGF0aCAoc28gdGhlIC52aW1yYyBmaWxlIGNhbiBiZSBmb3VuZCB3L28gYSBWSU0gZW52LiB2YXIuKQorICAgICAqIFJlbW92ZSB0aGUgIi5leGUiIGV4dGVuc2lvbiwgYW5kIGZpbmQgdGhlIDFzdCBub24tc3BhY2UuCisgICAgICovCisgICAgR2V0TW9kdWxlRmlsZU5hbWUoaEluc3RhbmNlLCBwcm9nLCAyNTUpOworICAgIGlmICgqcHJvZyAhPSBOVUwpCisJZXhlX25hbWUgPSBGdWxsTmFtZV9zYXZlKChjaGFyX3UgKilwcm9nLCBGQUxTRSk7CisKKyAgICAvKiBTZXBhcmF0ZSB0aGUgY29tbWFuZCBsaW5lIGludG8gYXJndW1lbnRzLiAqLworICAgIGFyZ2MgPSBnZXRfY21kX2FyZ3MocHJvZywgKGNoYXIgKilscHN6Q21kTGluZSwgJmFyZ3YsICZ0b2ZyZWUpOworICAgIGlmIChhcmdjID09IDApCisgICAgeworCS8qIEVycm9yIG1lc3NhZ2U/ICovCisJcmV0dXJuIDA7CisgICAgfQorCisgICAgcFNhdmVJbnN0ID0gU2F2ZUluc3Q7CisgICAgcG1haW4gPSBWaW1NYWluOworICAgIHBTYXZlSW5zdChoSW5zdGFuY2UpOworICAgIHBtYWluKGFyZ2MsIGFyZ3YpOworCisgICAgZnJlZShhcmd2KTsKKyAgICBmcmVlKHRvZnJlZSk7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKworCisKKworI2lmZGVmIEZFQVRfTU9VU0UKKworLyoKKyAqIEZvciB0aGUgR1VJIHRoZSBtb3VzZSBoYW5kbGluZyBpcyBpbiBndWlfdzMyLmMuCisgKi8KKyAgICB2b2lkCittY2hfc2V0bW91c2UoCisgICAgaW50IG9uKQoreworfQorI2VuZGlmIC8qIEZFQVRfTU9VU0UgKi8KKworCisKKy8qCisgKiBHVUkgdmVyc2lvbiBvZiBtY2hfaW5pdCgpLgorICovCisgICAgdm9pZAorbWNoX2luaXQoKQoreworICAgIGV4dGVybiBpbnQgX2Ztb2RlOworCisKKyAgICAvKiBMZXQgY3JpdGljYWwgZXJyb3JzIHJlc3VsdCBpbiBhIGZhaWx1cmUsIG5vdCBpbiBhIGRpYWxvZyBib3guICBSZXF1aXJlZAorICAgICAqIGZvciB0aGUgdGltZXN0YW1wIHRlc3QgdG8gd29yayBvbiByZW1vdmVkIGZsb3BwaWVzLiAqLworICAgIFNldEVycm9yTW9kZShTRU1fRkFJTENSSVRJQ0FMRVJST1JTKTsKKworICAgIF9mbW9kZSA9IE9fQklOQVJZOwkJLyogd2UgZG8gb3VyIG93biBDUi1MRiB0cmFuc2xhdGlvbiAqLworCisgICAgLyogU3BlY2lmeSB3aW5kb3cgc2l6ZS4gIElzIHRoZXJlIGEgcGxhY2UgdG8gZ2V0IHRoZSBkZWZhdWx0IGZyb20/ICovCisgICAgUm93cyA9IDI1OworICAgIENvbHVtbnMgPSA4MDsKKworCisgICAgc2V0X29wdGlvbl92YWx1ZSgoY2hhcl91ICopImdyZXBwcmciLCAwLCAoY2hhcl91ICopImdyZXAgLW4iLCAwKTsKKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgY2xpcF9pbml0KFRSVUUpOworCisgICAgLyoKKyAgICAgKiBWaW0ncyBvd24gY2xpcGJvYXJkIGZvcm1hdCByZWNvZ25pc2VzIHdoZXRoZXIgdGhlIHRleHQgaXMgY2hhciwgbGluZSwKKyAgICAgKiBvciByZWN0YW5ndWxhciBibG9jay4gIE9ubHkgdXNlZnVsIGZvciBjb3B5aW5nIGJldHdlZW4gdHdvIFZpbXMuCisgICAgICogIlZpbUNsaXBib2FyZCIgd2FzIHVzZWQgZm9yIHByZXZpb3VzIHZlcnNpb25zLCB1c2luZyB0aGUgZmlyc3QKKyAgICAgKiBjaGFyYWN0ZXIgdG8gc3BlY2lmeSBNQ0hBUiwgTUxJTkUgb3IgTUJMT0NLLgorICAgICAqLworICAgIGNsaXBfc3Rhci5mb3JtYXQgPSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdCgiVmltQ2xpcGJvYXJkMiIpOworICAgIGNsaXBfc3Rhci5mb3JtYXRfcmF3ID0gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoIlZpbVJhd0J5dGVzIik7CisjZW5kaWYKK30KKworCisKKy8qCisgKiBEbyB3ZSBoYXZlIGFuIGludGVyYWN0aXZlIHdpbmRvdz8KKyAqLworICAgIGludAorbWNoX2NoZWNrX3dpbigKKyAgICBpbnQgYXJnYywKKyAgICBjaGFyICoqYXJndikKK3sKKyAgICBpbnQJCWk7CisKKyAgICByZXR1cm4gT0s7CSAgICAvKiBHVUkgYWx3YXlzIGhhcyBhIHR0eSAqLworfQorCisKKy8qCisgKiByZXR1cm4gcHJvY2VzcyBJRAorICovCisgICAgbG9uZworbWNoX2dldF9waWQoKQoreworICAgIHJldHVybiAobG9uZylHZXRDdXJyZW50VGFzaygpOworfQorCisKKy8qCisgKiBTcGVjaWFsaXNlZCB2ZXJzaW9uIG9mIHN5c3RlbSgpLgorICogVGhpcyB2ZXJzaW9uIHByb2NlZWRzIGFzIGZvbGxvd3M6CisgKiAgICAxLiBTdGFydCB0aGUgcHJvZ3JhbSB3aXRoIFdpbkV4ZWMKKyAqICAgIDIuIFdhaXQgZm9yIHRoZSBtb2R1bGUgdXNlIGNvdW50IG9mIHRoZSBwcm9ncmFtIHRvIGdvIHRvIDAKKyAqCSAoVGhpcyBpcyB0aGUgYmVzdCB3YXkgb2YgZGV0ZWN0aW5nIHRoZSBwcm9ncmFtIGhhcyBmaW5pc2hlZCkKKyAqLworCisgICAgc3RhdGljIGludAorbWNoX3N5c3RlbShjaGFyICpjbWQsIGludCBvcHRpb25zKQoreworICAgIERXT1JECQlyZXQgPSAwOworICAgIFVJTlQJCXdTaG93V2luZG93OworICAgIFVJTlQJCWhfbW9kdWxlOworICAgIE1TRwkJCW1zZzsKKyAgICBCT09MCQlhZ2FpbiA9IFRSVUU7CisKKyAgICAvKgorICAgICAqIEl0J3MgbmljZXIgdG8gcnVuIGEgZmlsdGVyIGNvbW1hbmQgaW4gYSBtaW5pbWl6ZWQgd2luZG93LCBidXQgaW4KKyAgICAgKi8KKyAgICBpZiAob3B0aW9ucyAmIFNIRUxMX0RPT1VUKQorCXdTaG93V2luZG93ID0gU1dfU0hPV01JTklNSVpFRDsKKyAgICBlbHNlCisJd1Nob3dXaW5kb3cgPSBTV19TSE9XTk9STUFMOworCisgICAgLyogTm93LCBydW4gdGhlIGNvbW1hbmQgKi8KKyAgICBoX21vZHVsZSA9IFdpbkV4ZWMoKExQQ1NUUiljbWQsIHdTaG93V2luZG93KTsKKworICAgIGlmIChoX21vZHVsZSA8IDMyKQorICAgIHsKKwkvKmVycm9yKi8KKwlyZXQgPSAtaF9tb2R1bGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gdGVybWluYXRlIGJlZm9yZSBjb250aW51aW5nICovCisJd2hpbGUgKEdldE1vZHVsZVVzYWdlKChISU5TVEFOQ0UpaF9tb2R1bGUpID4gMCAmJiBhZ2FpbiApCisJeworCSAgICB3aGlsZSggUGVla01lc3NhZ2UoICZtc2csIE5VTEwsIDAsIDAsIFBNX1JFTU9WRSApICYmIGFnYWluICkKKwkgICAgeworCQlpZihtc2cubWVzc2FnZSA9PSBXTV9RVUlUKQorCisJCXsKKwkJICAgIFBvc3RRdWl0TWVzc2FnZShtc2cud1BhcmFtKTsKKwkJICAgIGFnYWluID0gRkFMU0U7CisJCX0KKwkJVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKwkJRGlzcGF0Y2hNZXNzYWdlKCZtc2cpOworCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qCisgKiBFaXRoZXIgZXhlY3V0ZSBhIGNvbW1hbmQgYnkgY2FsbGluZyB0aGUgc2hlbGwgb3Igc3RhcnQgYSBuZXcgc2hlbGwKKyAqLworICAgIGludAorbWNoX2NhbGxfc2hlbGwoCisgICAgY2hhcl91ICpjbWQsCisgICAgaW50IG9wdGlvbnMpCSAgICAvKiBTSEVMTF8sIHNlZSB2aW0uaCAqLworeworICAgIGludAkJeDsKKyAgICBpbnQJCXRtb2RlID0gY3VyX3Rtb2RlOworCisgICAgb3V0X2ZsdXNoKCk7CisKKworI2lmZGVmIE1DSF9XUklURV9EVU1QCisgICAgaWYgKGZkRHVtcCkKKyAgICB7CisJZnByaW50ZihmZER1bXAsICJtY2hfY2FsbF9zaGVsbChcIiVzXCIsICVkKVxuIiwgY21kLCBvcHRpb25zKTsKKwlmZmx1c2goZmREdW1wKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogQ2F0Y2ggYWxsIGRlYWRseSBzaWduYWxzIHdoaWxlIHJ1bm5pbmcgdGhlIGV4dGVybmFsIGNvbW1hbmQsIGJlY2F1c2UgYQorICAgICAqIENUUkwtQywgQ3RybC1CcmVhayBvciBpbGxlZ2FsIGluc3RydWN0aW9uICBtaWdodCBvdGhlcndpc2Uga2lsbCB1cy4KKyAgICAgKi8KKyAgICBzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKyAgICBzaWduYWwoU0lHSUxMLCBTSUdfSUdOKTsKKyAgICBzaWduYWwoU0lHRlBFLCBTSUdfSUdOKTsKKyAgICBzaWduYWwoU0lHU0VHViwgU0lHX0lHTik7CisgICAgc2lnbmFsKFNJR1RFUk0sIFNJR19JR04pOworICAgIHNpZ25hbChTSUdBQlJULCBTSUdfSUdOKTsKKworICAgIGlmIChvcHRpb25zICYgU0hFTExfQ09PS0VEKQorCXNldHRtb2RlKFRNT0RFX0NPT0spOwkvKiBzZXQgdG8gbm9ybWFsIG1vZGUgKi8KKworICAgIGlmIChjbWQgPT0gTlVMTCkKKyAgICB7CisJeCA9IG1jaF9zeXN0ZW0ocF9zaCwgb3B0aW9ucyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogd2UgdXNlICJjb21tYW5kIiBvciAiY21kIiB0byBzdGFydCB0aGUgc2hlbGw7IHNsb3cgYnV0IGVhc3kgKi8KKwljaGFyX3UgKm5ld2NtZDsKKworCW5ld2NtZCA9IGxhbGxvYygKKwkJU1RSTEVOKHBfc2gpICsgU1RSTEVOKHBfc2hjZikgKyBTVFJMRU4oY21kKSArIDEwLCBUUlVFKTsKKwlpZiAobmV3Y21kICE9IE5VTEwpCisJeworCSAgICBpZiAoU1RSTklDTVAoY21kLCAic3RhcnQgIiwgNikgPT0gMCkKKwkgICAgeworCQlzcHJpbnRmKChjaGFyICopbmV3Y21kLCAiJXNcMCIsIGNtZCs2KTsKKwkJaWYgKFdpbkV4ZWMoKExQQ1NUUiluZXdjbWQsIFNXX1NIT1dOT1JNQUwpID4gMzEpCisJCSAgICB4ID0gMDsKKwkJZWxzZQorCQkgICAgeCA9IC0xOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlzcHJpbnRmKChjaGFyICopbmV3Y21kLCAiJXMlcyAlcyAlcyIsCisJCQkiIiwKKwkJCXBfc2gsCisJCQlwX3NoY2YsCisJCQljbWQpOworCQl4ID0gbWNoX3N5c3RlbSgoY2hhciAqKW5ld2NtZCwgb3B0aW9ucyk7CisJICAgIH0KKwkgICAgdmltX2ZyZWUobmV3Y21kKTsKKwl9CisgICAgfQorCisgICAgaWYgKHRtb2RlID09IFRNT0RFX1JBVykKKwlzZXR0bW9kZShUTU9ERV9SQVcpOwkvKiBzZXQgdG8gcmF3IG1vZGUgKi8KKworICAgIGlmICh4ICYmICEob3B0aW9ucyAmIFNIRUxMX1NJTEVOVCkgJiYgIWVtc2dfc2lsZW50KQorICAgIHsKKwlzbXNnKF8oInNoZWxsIHJldHVybmVkICVkIiksIHgpOworCW1zZ19wdXRjaGFyKCdcbicpOworICAgIH0KKyNpZmRlZiBGRUFUX1RJVExFCisgICAgcmVzZXR0aXRsZSgpOworI2VuZGlmCisKKyAgICBzaWduYWwoU0lHSU5ULCBTSUdfREZMKTsKKyAgICBzaWduYWwoU0lHSUxMLCBTSUdfREZMKTsKKyAgICBzaWduYWwoU0lHRlBFLCBTSUdfREZMKTsKKyAgICBzaWduYWwoU0lHU0VHViwgU0lHX0RGTCk7CisgICAgc2lnbmFsKFNJR1RFUk0sIFNJR19ERkwpOworICAgIHNpZ25hbChTSUdBQlJULCBTSUdfREZMKTsKKworCisgICAgcmV0dXJuIHg7Cit9CisKKworLyoKKyAqIERlbGF5IGZvciBoYWxmIGEgc2Vjb25kLgorICovCisgICAgdm9pZAorbWNoX2RlbGF5KAorICAgIGxvbmcgICAgbXNlYywKKyAgICBpbnQJICAgIGlnbm9yZWlucHV0KQoreworI2lmZGVmIE1VU1RfRklYCisgICAgU2xlZXAoKGludCltc2VjKTsJICAgIC8qIG5ldmVyIHdhaXQgZm9yIGlucHV0ICovCisjZW5kaWYKK30KKworCisvKgorICogY2hlY2sgZm9yIGFuICJpbnRlcnJ1cHQgc2lnbmFsIjogQ1RSTC1icmVhayBvciBDVFJMLUMKKyAqLworICAgIHZvaWQKK21jaF9icmVha2NoZWNrKCkKK3sKKyAgICAvKiBuZXZlciB1c2VkICovCit9CisKKworLyoKKyAqIEhvdyBtdWNoIG1lbW9yeSBpcyBhdmFpbGFibGU/CisgKi8KKyAgICBsb25nX3UKK21jaF9hdmFpbF9tZW0oCisgICAgaW50IHNwZWNpYWwpCit7CisgICAgcmV0dXJuIEdldEZyZWVTcGFjZSgwKTsKK30KKworCisvKgorICogTGlrZSByZW5hbWUoKSwgcmV0dXJucyAwIHVwb24gc3VjY2Vzcywgbm9uLXplcm8gdXBvbiBmYWlsdXJlLgorICogU2hvdWxkIHByb2JhYmx5IHNldCBlcnJubyBhcHByb3ByaWF0ZWx5IHdoZW4gZXJyb3JzIG9jY3VyLgorICovCisgICAgaW50CittY2hfcmVuYW1lKAorICAgIGNvbnN0IGNoYXIJKnBzek9sZEZpbGUsCisgICAgY29uc3QgY2hhcgkqcHN6TmV3RmlsZSkKK3sKKworICAgIC8qCisgICAgICogTm8gbmVlZCB0byBwbGF5IHRyaWNrcywgdGhpcyBpc24ndCBydWJiaXNoIGxpa2UgV2luZG93cyA5NSA8Zz4KKyAgICAgKi8KKyAgICByZXR1cm4gcmVuYW1lKHBzek9sZEZpbGUsIHBzek5ld0ZpbGUpOworCit9CisKKy8qCisgKiBHZXQgdGhlIGRlZmF1bHQgc2hlbGwgZm9yIHRoZSBjdXJyZW50IGhhcmR3YXJlIHBsYXRmb3JtCisgKi8KKyAgICBjaGFyKgorZGVmYXVsdF9zaGVsbCgpCit7CisgICAgY2hhciogcHN6ID0gTlVMTDsKKworICAgIHBzeiA9ICJjb21tYW5kLmNvbSI7CisKKyAgICByZXR1cm4gcHN6OworfQpkaWZmIC0tZ2l0IGEvc3JjL29zX3dpbjE2LmggYi9zcmMvb3Nfd2luMTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2I1ODkxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zX3dpbjE2LmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKy8qCisgKiBXaW4xNiAoV2luZG93cyAzLjF4KSBtYWNoaW5lLWRlcGVuZGVudCB0aGluZ3MuCisgKi8KKworI2luY2x1ZGUgIm9zX2Rvcy5oIgkJLyogY29tbW9uIE1TLURPUyBhbmQgV2luZG93cyBzdHVmZiAqLworCisjZGVmaW5lIEJJTkFSWV9GSUxFX0lPCisjZGVmaW5lIFVTRV9FWEVfTkFNRQkJLyogdXNlIGFyZ3ZbMF0gZm9yICRWSU0gKi8KKyNkZWZpbmUgTk9fQ09PS0VEX0lOUFVUCQkvKiBtY2hfaW5jaGFyKCkgZG9lc24ndCByZXR1cm4gd2hvbGUgbGluZXMgKi8KKyNkZWZpbmUgU1lOQ19EVVBfQ0xPU0UJCS8qIHN5bmMoKSBhIGZpbGUgd2l0aCBkdXAoKSBhbmQgY2xvc2UoKSAqLworI2RlZmluZSBVU0VfVEVSTV9DT05TT0xFCisjZGVmaW5lIEhBVkVfU1RSSU5HX0gKKyNkZWZpbmUgSEFWRV9TVFJDU1BOCisjZGVmaW5lIEhBVkVfU1RSSUNNUAorI2RlZmluZSBIQVZFX1NUUk5JQ01QCisjZGVmaW5lIEhBVkVfU1RSRlRJTUUJCS8qIGd1ZXNzZWQgKi8KKyNkZWZpbmUgSEFWRV9NRU1TRVQKKyNkZWZpbmUgVVNFX1RNUE5BTQkJLyogdXNlIHRtcG5hbSgpIGluc3RlYWQgb2YgbWt0ZW1wKCkgKi8KKyNkZWZpbmUgSEFWRV9MT0NBTEVfSAorI2RlZmluZSBIQVZFX0ZDTlRMX0gKKyNkZWZpbmUgSEFWRV9RU09SVAorI2RlZmluZSBIQVZFX1NUX01PREUJCS8qIGhhdmUgc3RhdC5zdF9tb2RlICovCisvLyNkZWZpbmUgVVNFX0ZOQU1FX0NBU0UJLyogYWRqdXN0IGNhc2Ugb2YgZmlsZSBuYW1lcyAqLworI2lmbmRlZiBGRUFUX0NMSVBCT0FSRAorIyBkZWZpbmUgRkVBVF9DTElQQk9BUkQJCS8qIGluY2x1ZGUgY2xpcGJvYXJkIHN1cHBvcnQgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoX19EQVRFX18pICYmIGRlZmluZWQoX19USU1FX18pCisjIGRlZmluZSBIQVZFX0RBVEVfVElNRQorI2VuZGlmCisjZGVmaW5lIEhBVkVfQVZBSUxfTUVNCisKKyNkZWZpbmUgU0hPUlRfRk5BTUUJCS8qIGFsd2F5cyA4LjMgZmlsZSBuYW1lICovCisKKyNkZWZpbmUgU01BTExfTUFMTE9DCQkvKiAxNiBiaXQgc3RvcmFnZSBhbGxvY2F0aW9uICovCisKKyNpZmRlZiBfX0JPUkxBTkRDX18KKyMgZGVmaW5lIEhBVkVfUFVURU5WCQkvKiBhdCBsZWFzdCBCY2MgNS4yIGhhcyBpdCAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSV9XMTYKKyMgZGVmaW5lIE5PX0NPTlNPTEUJCS8qIGRvbid0IGluY2x1ZGVkIGNvbnNvbGUtb25seSBjb2RlICovCisjZW5kaWYKKworLyogdG91cHBlcigpIGlzIG5vdCByZWFsbHkgYnJva2VuLCBidXQgaXQncyB2ZXJ5IHNsb3cuCVByb2JhYmx5IGJlY2F1c2Ugb2YKKyAqIHVzaW5nIHVuaWNkZSBjaGFyYWN0ZXJzIG9uIFdpbmRvd3MgTlQgKi8KKyNkZWZpbmUgQlJPS0VOX1RPVVBQRVIKKworI2RlZmluZSBGTkFNRV9JTExFR0FMICJcIio/Pjx8IiAvKiBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gYSBmaWxlIG5hbWUgKi8KKworI2lmbmRlZiBTSVpFT0ZfSU5UCisjIGRlZmluZSBTSVpFT0ZfSU5UIDIKKyNlbmRpZgorCit0eXBlZGVmIGxvbmcgb2ZmX3Q7CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZG9zLmg+CisjaW5jbHVkZSA8ZGlyLmg+CisKKyNpZm5kZWYgU1RSSUNUCisjIGRlZmluZSBTVFJJQ1QKKyNlbmRpZgorI2lmbmRlZiBDT0JKTUFDUk9TCisjIGRlZmluZSBDT0JKTUFDUk9TCS8qIEZvciBPTEU6IEVuYWJsZSAiZnJpZW5kbGllciIgYWNjZXNzIHRvIG9iamVjdHMgKi8KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLyoKKyAqICBwbGVudHkgb2YgbWVtb3J5LCB1c2UgbGFyZ2UgYnVmZmVycworICovCisjZGVmaW5lIENNREJVRkZTSVpFIDEwMjQJLyogc2l6ZSBvZiB0aGUgY29tbWFuZCBwcm9jZXNzaW5nIGJ1ZmZlciAqLworCisKKyNkZWZpbmUgQkFTRU5BTUVMRU4JKE1BWFBBVEhMLTUpCS8qIGxlbmd0aCBvZiBiYXNlIG9mIGZpbGUgbmFtZSAqLworCisjaWZuZGVmIERGTFRfTUFYTUVNCisjIGRlZmluZSBERkxUX01BWE1FTQkoMjU2KSAgICAvKiB1c2UgdXAgdG8gMjU2SyBmb3IgYSBidWZmZXIqLworI2VuZGlmCisKKyNpZm5kZWYgREZMVF9NQVhNRU1UT1QKKyMgZGVmaW5lIERGTFRfTUFYTUVNVE9UCSg1KjEwMjQpICAgIC8qIHVzZSB1cCB0byA1IE1ieXRlIGZvciBWaW0gKi8KKyNlbmRpZgorCisvKgorICogU29tZSBzaW1wbGUgZGVidWdnaW5nIG1hY3JvcyB0aGF0IGxvb2sgYW5kIGJlaGF2ZSBhIGxvdCBsaWtlIHRoZWlyCisgKiBuYW1lc2FrZXMgaW4gTUZDLgorICovCisKKyNpZmRlZiBfREVCVUcKKworIyBpZiBkZWZpbmVkKF9NU0NfVkVSKQkmJiAgKF9NU0NfVkVSID49IDEwMDApCisgICAvKiBVc2UgdGhlIG5ldyBkZWJ1Z2dpbmcgdG9vbHMgaW4gVmlzdWFsIEMrKyA0LnggKi8KKyMgIGluY2x1ZGUgPGNydGRiZy5oPgorIyAgZGVmaW5lIEFTU0VSVChmKSBfQVNTRVJUKGYpCisjIGVsc2UKKyMgIGluY2x1ZGUgPGFzc2VydC5oPgorIyAgZGVmaW5lIEFTU0VSVChmKSBhc3NlcnQoZikKKyMgZW5kaWYKKworIyBkZWZpbmUgVkVSSUZZKGYpCQlBU1NFUlQoZikKKyMgZGVmaW5lIERFQlVHX09OTFkoZikJCShmKQorIyBkZWZpbmUgVFJBQ0UJCQlUcmFjZQorIyBkZWZpbmUgVFJBQ0UwKHN6KQkJVHJhY2UoX1QoIiVzIiksIF9UKHN6KSkKKyMgZGVmaW5lIFRSQUNFMShzeiwgcDEpCQlUcmFjZShfVChzeiksIHAxKQorIyBkZWZpbmUgVFJBQ0UyKHN6LCBwMSwgcDIpCVRyYWNlKF9UKHN6KSwgcDEsIHAyKQorIyBkZWZpbmUgVFJBQ0UzKHN6LCBwMSwgcDIsIHAzKSBUcmFjZShfVChzeiksIHAxLCBwMiwgcDMpCisKKy8qIEluIGRlYnVnIHZlcnNpb24sIHdyaXRlcyB0cmFjZSBtZXNzYWdlcyB0byBkZWJ1ZyBzdHJlYW0gKi8KK3ZvaWQgX19jZGVjbAorVHJhY2UoY2hhciAqcHN6Rm9ybWF0LCAuLi4pOworCisjZWxzZSAvKiAhX0RFQlVHICovCisKKyAgLyogVGhlc2UgbWFjcm9zIHNob3VsZCBhbGwgY29tcGlsZSBhd2F5IHRvIG5vdGhpbmcgKi8KKyMgZGVmaW5lIEFTU0VSVChmKQkJKCh2b2lkKTApCisjIGRlZmluZSBWRVJJRlkoZikJCSgodm9pZClmKQorIyBkZWZpbmUgREVCVUdfT05MWShmKQkJKCh2b2lkKTApCisjIGRlZmluZSBUUkFDRQkJCTEgPyAodm9pZCkwIDogcHJpbnRmCisjIGRlZmluZSBUUkFDRTAoc3opCisjIGRlZmluZSBUUkFDRTEoc3osIHAxKQorIyBkZWZpbmUgVFJBQ0UyKHN6LCBwMSwgcDIpCisjIGRlZmluZSBUUkFDRTMoc3osIHAxLCBwMiwgcDMpCisKKyNlbmRpZiAvKiAhX0RFQlVHICovCisKKworI2RlZmluZSBBU1NFUlRfUE9JTlRFUihwLCB0eXBlKSBcCisgICAgQVNTRVJUKCgocCkgIT0gTlVMTCkgICYmICBJc1ZhbGlkQWRkcmVzcygocCksIHNpemVvZih0eXBlKSwgRkFMU0UpKQorCisjZGVmaW5lIEFTU0VSVF9OVUxMX09SX1BPSU5URVIocCwgdHlwZSkgXAorICAgIEFTU0VSVCgoKHApID09IE5VTEwpICB8fCAgSXNWYWxpZEFkZHJlc3MoKHApLCBzaXplb2YodHlwZSksIEZBTFNFKSkKKworI2RlZmluZSBtY2hfc2V0ZW52KG5hbWUsIHZhbCwgeCkgc2V0ZW52KG5hbWUsIHZhbCwgeCkKZGlmZiAtLWdpdCBhL3NyYy9vc193aW4zMi5jIGIvc3JjL29zX3dpbjMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiODk2MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc193aW4zMi5jCkBAIC0wLDAgKzEsNDc5MCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworLyoKKyAqIG9zX3dpbjMyLmMKKyAqCisgKiBVc2VkIGZvciBib3RoIHRoZSBjb25zb2xlIHZlcnNpb24gYW5kIHRoZSBXaW4zMiBHVUkuICBBIGxvdCBvZiBjb2RlIGlzIGZvcgorICogdGhlIGNvbnNvbGUgdmVyc2lvbiBvbmx5LCBzbyB0aGVyZSBpcyBhIGxvdCBvZiAiI2lmbmRlZiBGRUFUX0dVSV9XMzIiLgorICoKKyAqIFdpbjMyIChXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDk1KSBzeXN0ZW0tZGVwZW5kZW50IHJvdXRpbmVzLgorICogUG9ydGlvbnMgbGlmdGVkIGZyb20gdGhlIFdpbjMyIFNESyBzYW1wbGVzLCB0aGUgTVNET1MtZGVwZW5kZW50IGNvZGUsCisgKiBOZXRIYWNrIDMuMS4zLCBHTlUgRW1hY3MgMTkuMzAsIGFuZCBWaWxlIDUuNS4KKyAqCisgKiBHZW9yZ2UgVi4gUmVpbGx5IDxnZW9yZ2VAcmVpbGx5Lm9yZz4gd3JvdGUgbW9zdCBvZiB0aGlzLgorICogUm9nZXIgS25vYmJlIDxyb2dlcmtAd29uZGVyd2FyZS5jb20+IGRpZCB0aGUgaW5pdGlhbCBwb3J0IG9mIFZpbSAzLjAuCisgKi8KKworI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorCisjdW5kZWYgY2hkaXIKKyNpZmRlZiBfX0dOVUNfXworIyBpZm5kZWYgX19NSU5HVzMyX18KKyMgIGluY2x1ZGUgPGRpcmVudC5oPgorIyBlbmRpZgorI2Vsc2UKKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9USVRMRSkgJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKQorIyBpbmNsdWRlIDxzaGVsbGFwaS5oPgorI2VuZGlmCisKKyNpZmRlZiBfX01JTkdXMzJfXworIyBpZm5kZWYgRlJPTV9MRUZUXzFTVF9CVVRUT05fUFJFU1NFRAorIyAgZGVmaW5lIEZST01fTEVGVF8xU1RfQlVUVE9OX1BSRVNTRUQgICAgMHgwMDAxCisjIGVuZGlmCisjIGlmbmRlZiBSSUdIVE1PU1RfQlVUVE9OX1BSRVNTRUQKKyMgIGRlZmluZSBSSUdIVE1PU1RfQlVUVE9OX1BSRVNTRUQJICAweDAwMDIKKyMgZW5kaWYKKyMgaWZuZGVmIEZST01fTEVGVF8yTkRfQlVUVE9OX1BSRVNTRUQKKyMgIGRlZmluZSBGUk9NX0xFRlRfMk5EX0JVVFRPTl9QUkVTU0VEICAgIDB4MDAwNAorIyBlbmRpZgorIyBpZm5kZWYgRlJPTV9MRUZUXzNSRF9CVVRUT05fUFJFU1NFRAorIyAgZGVmaW5lIEZST01fTEVGVF8zUkRfQlVUVE9OX1BSRVNTRUQgICAgMHgwMDA4CisjIGVuZGlmCisjIGlmbmRlZiBGUk9NX0xFRlRfNFRIX0JVVFRPTl9QUkVTU0VECisjICBkZWZpbmUgRlJPTV9MRUZUXzRUSF9CVVRUT05fUFJFU1NFRCAgICAweDAwMTAKKyMgZW5kaWYKKworLyoKKyAqIEV2ZW50RmxhZ3MKKyAqLworIyBpZm5kZWYgTU9VU0VfTU9WRUQKKyMgIGRlZmluZSBNT1VTRV9NT1ZFRCAgIDB4MDAwMQorIyBlbmRpZgorIyBpZm5kZWYgRE9VQkxFX0NMSUNLCisjICBkZWZpbmUgRE9VQkxFX0NMSUNLICAweDAwMDIKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBSZWNvcmQgYWxsIG91dHB1dCBhbmQgYWxsIGtleWJvYXJkICYgbW91c2UgaW5wdXQgKi8KKy8qICNkZWZpbmUgTUNIX1dSSVRFX0RVTVAgKi8KKworI2lmZGVmIE1DSF9XUklURV9EVU1QCitGSUxFKiBmZER1bXAgPSBOVUxMOworI2VuZGlmCisKKy8qCisgKiBXaGVuIGdlbmVyYXRpbmcgcHJvdG90eXBlcyBmb3IgV2luMzIgb24gVW5peCwgdGhlc2UgbGluZXMgbWFrZSB0aGUgc3ludGF4CisgKiBlcnJvcnMgZGlzYXBwZWFyLiAgVGhleSBkbyBub3QgbmVlZCB0byBiZSBjb3JyZWN0LgorICovCisjaWZkZWYgUFJPVE8KKyNkZWZpbmUgV0lOQVBJCisjZGVmaW5lIFdJTkJBU0VBUEkKK3R5cGVkZWYgY2hhciAqIExQQ1NUUjsKK3R5cGVkZWYgaW50IEFDQ0VTU19NQVNLOwordHlwZWRlZiBpbnQgQk9PTDsKK3R5cGVkZWYgaW50IENPTE9SUkVGOwordHlwZWRlZiBpbnQgQ09OU09MRV9DVVJTT1JfSU5GTzsKK3R5cGVkZWYgaW50IENPT1JEOwordHlwZWRlZiBpbnQgRFdPUkQ7Cit0eXBlZGVmIGludCBIQU5ETEU7Cit0eXBlZGVmIGludCBIREM7Cit0eXBlZGVmIGludCBIRk9OVDsKK3R5cGVkZWYgaW50IEhJQ09OOwordHlwZWRlZiBpbnQgSElOU1RBTkNFOwordHlwZWRlZiBpbnQgSFdORDsKK3R5cGVkZWYgaW50IElOUFVUX1JFQ09SRDsKK3R5cGVkZWYgaW50IEtFWV9FVkVOVF9SRUNPUkQ7Cit0eXBlZGVmIGludCBMT0dGT05UOwordHlwZWRlZiBpbnQgTFBCT09MOwordHlwZWRlZiBpbnQgTFBDVFNUUjsKK3R5cGVkZWYgaW50IExQRFdPUkQ7Cit0eXBlZGVmIGludCBMUFNUUjsKK3R5cGVkZWYgaW50IExQVFNUUjsKK3R5cGVkZWYgaW50IExQVk9JRDsKK3R5cGVkZWYgaW50IE1PVVNFX0VWRU5UX1JFQ09SRDsKK3R5cGVkZWYgaW50IFBBQ0w7Cit0eXBlZGVmIGludCBQRFdPUkQ7Cit0eXBlZGVmIGludCBQSEFORExFOwordHlwZWRlZiBpbnQgUFJJTlRETEc7Cit0eXBlZGVmIGludCBQU0VDVVJJVFlfREVTQ1JJUFRPUjsKK3R5cGVkZWYgaW50IFBTSUQ7Cit0eXBlZGVmIGludCBTRUNVUklUWV9JTkZPUk1BVElPTjsKK3R5cGVkZWYgaW50IFNIT1JUOwordHlwZWRlZiBpbnQgU01BTExfUkVDVDsKK3R5cGVkZWYgaW50IFRFWFRNRVRSSUM7Cit0eXBlZGVmIGludCBUT0tFTl9JTkZPUk1BVElPTl9DTEFTUzsKK3R5cGVkZWYgaW50IFRSVVNURUU7Cit0eXBlZGVmIGludCBXT1JEOwordHlwZWRlZiBpbnQgV0NIQVI7Cit0eXBlZGVmIHZvaWQgVk9JRDsKKyNlbmRpZgorCisjaWZuZGVmIEZFQVRfR1VJX1czMgorLyogVW5kb2N1bWVudGVkIEFQSSBpbiBrZXJuZWwzMi5kbGwgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGRlYWQga2V5IGJ1ZyBpbgorICogY29uc29sZS1tb2RlIGFwcGxpY2F0aW9ucyBpbiBOVCA0LjAuICBJZiB5b3Ugc3dpdGNoIGtleWJvYXJkIGxheW91dHMKKyAqIGluIGEgY29uc29sZSBhcHAgdG8gYSBsYXlvdXQgdGhhdCBpbmNsdWRlcyBkZWFkIGtleXMgYW5kIHRoZW4gaGl0IGEKKyAqIGRlYWQga2V5LCBhIGNhbGwgdG8gVG9Bc2NpaSB3aWxsIHRyYXNoIHRoZSBzdGFjay4gIE15IHRoYW5rcyB0byBJYW4gSmFtZXMKKyAqIGFuZCBNaWNoYWVsIERpZXRyaWNoIGZvciBoZWxwaW5nIG1lIGZpZ3VyZSBvdXQgdGhpcyB3b3JrYXJvdW5kLgorICovCisKKy8qIFdJTkJBU0VBUEkgQk9PTCBXSU5BUEkgR2V0Q29uc29sZUtleWJvYXJkTGF5b3V0TmFtZUEoTFBTVFIpOyAqLworI2lmbmRlZiBXSU5CQVNFQVBJCisjIGRlZmluZSBXSU5CQVNFQVBJIF9fc3RkY2FsbAorI2VuZGlmCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCit0eXBlZGVmIEJPT0wgKF9fc3RkY2FsbCAqUEZOR0NLTE4pKExQU1RSKTsKKyNlbHNlCit0eXBlZGVmIFdJTkJBU0VBUEkgQk9PTCAoV0lOQVBJICpQRk5HQ0tMTikoTFBTVFIpOworI2VuZGlmCitQRk5HQ0tMTiAgICBzX3BmbkdldENvbnNvbGVLZXlib2FyZExheW91dE5hbWUgPSBOVUxMOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKKy8qIFN0cmFuZ2VseSBCb3JsYW5kIHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZS4gKi8KKyMgZGVmaW5lIHdjc2ljbXAoYSwgYikgd2NzY21waSgoYSksIChiKSkKKyNlbmRpZgorCisjaWZuZGVmIEZFQVRfR1VJX1czMgorLyogV2luMzIgQ29uc29sZSBoYW5kbGVzIGZvciBpbnB1dCBhbmQgb3V0cHV0ICovCitzdGF0aWMgSEFORExFIGdfaENvbkluICA9IElOVkFMSURfSEFORExFX1ZBTFVFOworc3RhdGljIEhBTkRMRSBnX2hDb25PdXQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKworLyogV2luMzIgU2NyZWVuIGJ1ZmZlcixjb29yZGluYXRlLGNvbnNvbGUgSS9PIGluZm9ybWF0aW9uICovCitzdGF0aWMgU01BTExfUkVDVCBnX3NyU2Nyb2xsUmVnaW9uOworc3RhdGljIENPT1JECSAgZ19jb29yZDsgIC8qIDAtYmFzZWQsIGJ1dCBleHRlcm5hbCBjb29yZHMgYXJlIDEtYmFzZWQgKi8KKworLyogVGhlIGF0dHJpYnV0ZSBvZiB0aGUgc2NyZWVuIHdoZW4gdGhlIGVkaXRvciB3YXMgc3RhcnRlZCAqLworc3RhdGljIFdPUkQgIGdfYXR0ckRlZmF1bHQgPSA3OyAgLyogbGlnaHRncmF5IHRleHQgb24gYmxhY2sgYmFja2dyb3VuZCAqLworc3RhdGljIFdPUkQgIGdfYXR0ckN1cnJlbnQ7CisKK3N0YXRpYyBpbnQgZ19mQ0Jya1ByZXNzZWQgPSBGQUxTRTsgIC8qIHNldCBieSBjdHJsLWJyZWFrIGludGVycnVwdCAqLworc3RhdGljIGludCBnX2ZDdHJsQ1ByZXNzZWQgPSBGQUxTRTsgLyogc2V0IHdoZW4gY3RybC1DIG9yIGN0cmwtYnJlYWsgZGV0ZWN0ZWQgKi8KK3N0YXRpYyBpbnQgZ19mRm9yY2VFeGl0ID0gRkFMU0U7ICAgIC8qIHNldCB3aGVuIGZvcmNlZnVsbHkgZXhpdGluZyAqLworCitzdGF0aWMgdm9pZCB0ZXJtY2FwX21vZGVfc3RhcnQodm9pZCk7CitzdGF0aWMgdm9pZCB0ZXJtY2FwX21vZGVfZW5kKHZvaWQpOworc3RhdGljIHZvaWQgY2xlYXJfY2hhcnMoQ09PUkQgY29vcmQsIERXT1JEIG4pOworc3RhdGljIHZvaWQgY2xlYXJfc2NyZWVuKHZvaWQpOworc3RhdGljIHZvaWQgY2xlYXJfdG9fZW5kX29mX2Rpc3BsYXkodm9pZCk7CitzdGF0aWMgdm9pZCBjbGVhcl90b19lbmRfb2ZfbGluZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHNjcm9sbCh1bnNpZ25lZCBjTGluZXMpOworc3RhdGljIHZvaWQgc2V0X3Njcm9sbF9yZWdpb24odW5zaWduZWQgbGVmdCwgdW5zaWduZWQgdG9wLAorCQkJICAgICAgdW5zaWduZWQgcmlnaHQsIHVuc2lnbmVkIGJvdHRvbSk7CitzdGF0aWMgdm9pZCBpbnNlcnRfbGluZXModW5zaWduZWQgY0xpbmVzKTsKK3N0YXRpYyB2b2lkIGRlbGV0ZV9saW5lcyh1bnNpZ25lZCBjTGluZXMpOworc3RhdGljIHZvaWQgZ290b3h5KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpOworc3RhdGljIHZvaWQgbm9ybXZpZGVvKHZvaWQpOworc3RhdGljIHZvaWQgdGV4dGF0dHIoV09SRCB3QXR0cik7CitzdGF0aWMgdm9pZCB0ZXh0Y29sb3IoV09SRCB3QXR0cik7CitzdGF0aWMgdm9pZCB0ZXh0YmFja2dyb3VuZChXT1JEIHdBdHRyKTsKK3N0YXRpYyB2b2lkIHN0YW5kb3V0KHZvaWQpOworc3RhdGljIHZvaWQgc3RhbmRlbmQodm9pZCk7CitzdGF0aWMgdm9pZCB2aXN1YWxfYmVsbCh2b2lkKTsKK3N0YXRpYyB2b2lkIGN1cnNvcl92aXNpYmxlKEJPT0wgZlZpc2libGUpOworc3RhdGljIEJPT0wgd3JpdGVfY2hhcnMoTFBDU1RSIHBjaEJ1ZiwgRFdPUkQgY2NoVG9Xcml0ZSk7CitzdGF0aWMgY2hhcl91IHRnZXRjaChpbnQgKnBtb2RpZmllcnMsIGNoYXJfdSAqcGNoMik7CitzdGF0aWMgdm9pZCBjcmVhdGVfY29uaW4odm9pZCk7CitzdGF0aWMgaW50IHNfY3Vyc29yX3Zpc2libGUgPSBUUlVFOworc3RhdGljIGludCBkaWRfY3JlYXRlX2NvbmluID0gRkFMU0U7CisjZWxzZQorc3RhdGljIGludCBzX2RvbnRfdXNlX3ZpbXJ1biA9IFRSVUU7CitzdGF0aWMgaW50IG5lZWRfdmltcnVuX3dhcm5pbmcgPSBGQUxTRTsKK3N0YXRpYyBjaGFyICp2aW1ydW5fcGF0aCA9ICJ2aW1ydW4gIjsKKyNlbmRpZgorCisjaWZuZGVmIEZFQVRfR1VJX1czMgorc3RhdGljIGludCBzdXBwcmVzc193aW5zaXplID0gMTsJLyogZG9uJ3QgZmlkZGxlIHdpdGggY29uc29sZSAqLworI2VuZGlmCisKKyAgICBzdGF0aWMgdm9pZAorZ2V0X2V4ZV9uYW1lKHZvaWQpCit7CisgICAgY2hhcgl0ZW1wWzI1Nl07CisKKyAgICBpZiAoZXhlX25hbWUgPT0gTlVMTCkKKyAgICB7CisJLyogc3RvcmUgdGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUsIG1heSBiZSB1c2VkIGZvciAkVklNICovCisJR2V0TW9kdWxlRmlsZU5hbWUoTlVMTCwgdGVtcCwgMjU1KTsKKwlpZiAoKnRlbXAgIT0gTlVMKQorCSAgICBleGVfbmFtZSA9IEZ1bGxOYW1lX3NhdmUoKGNoYXJfdSAqKXRlbXAsIEZBTFNFKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKERZTkFNSUNfR0VUVEVYVCkgfHwgZGVmaW5lZChQUk9UTykKKyMgaWZuZGVmIEdFVFRFWFRfRExMCisjICBkZWZpbmUgR0VUVEVYVF9ETEwgImxpYmludGwuZGxsIgorIyBlbmRpZgorLyogRHVtbXkgZnVuY2l0b25zICovCitzdGF0aWMgY2hhciogbnVsbF9saWJpbnRsX2dldHRleHQoY29uc3QgY2hhciAqKTsKK3N0YXRpYyBjaGFyKiBudWxsX2xpYmludGxfdGV4dGRvbWFpbihjb25zdCBjaGFyICopOworc3RhdGljIGNoYXIqIG51bGxfbGliaW50bF9iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKK3N0YXRpYyBISU5TVEFOQ0UgaExpYmludGxETEwgPSAwOworY2hhciogKCpkeW5fbGliaW50bF9nZXR0ZXh0KShjb25zdCBjaGFyICopID0gbnVsbF9saWJpbnRsX2dldHRleHQ7CitjaGFyKiAoKmR5bl9saWJpbnRsX3RleHRkb21haW4pKGNvbnN0IGNoYXIgKikgPSBudWxsX2xpYmludGxfdGV4dGRvbWFpbjsKK2NoYXIqICgqZHluX2xpYmludGxfYmluZHRleHRkb21haW4pKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKQorCQkJCQkJPSBudWxsX2xpYmludGxfYmluZHRleHRkb21haW47CisKKyAgICBpbnQKK2R5bl9saWJpbnRsX2luaXQoY2hhciAqbGlibmFtZSkKK3sKKyAgICBpbnQgaTsKKyAgICBzdGF0aWMgc3RydWN0CisgICAgeworCWNoYXIJICAgICpuYW1lOworCUZBUlBST0MJICAgICpwdHI7CisgICAgfSBsaWJpbnRsX2VudHJ5W10gPQorICAgIHsKKwl7ImdldHRleHQiLCAoRkFSUFJPQyopJmR5bl9saWJpbnRsX2dldHRleHR9LAorCXsidGV4dGRvbWFpbiIsIChGQVJQUk9DKikmZHluX2xpYmludGxfdGV4dGRvbWFpbn0sCisJeyJiaW5kdGV4dGRvbWFpbiIsIChGQVJQUk9DKikmZHluX2xpYmludGxfYmluZHRleHRkb21haW59LAorCXtOVUxMLCBOVUxMfQorICAgIH07CisKKyAgICAvKiBObyBuZWVkIHRvIGluaXRpYWxpemUgdHdpY2UuICovCisgICAgaWYgKGhMaWJpbnRsRExMKQorCXJldHVybiAxOworICAgIC8qIExvYWQgZ2V0dGV4dCBsaWJyYXJ5IChsaWJpbnRsLmRsbCkgKi8KKyAgICBoTGliaW50bERMTCA9IExvYWRMaWJyYXJ5KGxpYm5hbWUgIT0gTlVMTCA/IGxpYm5hbWUgOiBHRVRURVhUX0RMTCk7CisgICAgaWYgKCFoTGliaW50bERMTCkKKyAgICB7CisJY2hhcl91CSAgICBkaXJuYW1lW19NQVhfUEFUSF07CisKKwkvKiBUcnkgdXNpbmcgdGhlIHBhdGggZnJvbSBndmltLmV4ZSB0byBmaW5kIHRoZSAuZGxsIHRoZXJlLiAqLworCWdldF9leGVfbmFtZSgpOworCVNUUkNQWShkaXJuYW1lLCBleGVfbmFtZSk7CisJU1RSQ1BZKGdldHRhaWwoZGlybmFtZSksIEdFVFRFWFRfRExMKTsKKwloTGliaW50bERMTCA9IExvYWRMaWJyYXJ5KChjaGFyICopZGlybmFtZSk7CisJaWYgKCFoTGliaW50bERMTCkKKwl7CisJICAgIGlmIChwX3ZlcmJvc2UgPiAwKQorCQlFTVNHMihfKGVfbG9hZGxpYiksIEdFVFRFWFRfRExMKTsKKwkgICAgcmV0dXJuIDA7CisJfQorICAgIH0KKyAgICBmb3IgKGkgPSAwOyBsaWJpbnRsX2VudHJ5W2ldLm5hbWUgIT0gTlVMTAorCQkJCQkgJiYgbGliaW50bF9lbnRyeVtpXS5wdHIgIT0gTlVMTDsgKytpKQorICAgIHsKKwlpZiAoKCpsaWJpbnRsX2VudHJ5W2ldLnB0ciA9IChGQVJQUk9DKUdldFByb2NBZGRyZXNzKGhMaWJpbnRsRExMLAorCQkJCQkgICAgICBsaWJpbnRsX2VudHJ5W2ldLm5hbWUpKSA9PSBOVUxMKQorCXsKKwkgICAgZHluX2xpYmludGxfZW5kKCk7CisJICAgIGlmIChwX3ZlcmJvc2UgPiAwKQorCQlFTVNHMihfKGVfbG9hZGZ1bmMpLCBsaWJpbnRsX2VudHJ5W2ldLm5hbWUpOworCSAgICByZXR1cm4gMDsKKwl9CisgICAgfQorICAgIHJldHVybiAxOworfQorCisgICAgdm9pZAorZHluX2xpYmludGxfZW5kKCkKK3sKKyAgICBpZiAoaExpYmludGxETEwpCisJRnJlZUxpYnJhcnkoaExpYmludGxETEwpOworICAgIGhMaWJpbnRsRExMCQkJPSBOVUxMOworICAgIGR5bl9saWJpbnRsX2dldHRleHQJCT0gbnVsbF9saWJpbnRsX2dldHRleHQ7CisgICAgZHluX2xpYmludGxfdGV4dGRvbWFpbgk9IG51bGxfbGliaW50bF90ZXh0ZG9tYWluOworICAgIGR5bl9saWJpbnRsX2JpbmR0ZXh0ZG9tYWluCT0gbnVsbF9saWJpbnRsX2JpbmR0ZXh0ZG9tYWluOworfQorCisgICAgc3RhdGljIGNoYXIgKgorbnVsbF9saWJpbnRsX2dldHRleHQoY29uc3QgY2hhciogbXNnaWQpCit7CisgICAgcmV0dXJuIChjaGFyKiltc2dpZDsKK30KKworICAgIHN0YXRpYyBjaGFyICoKK251bGxfbGliaW50bF9iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyKiBkb21haW5uYW1lLCBjb25zdCBjaGFyKiBkaXJuYW1lKQoreworICAgIHJldHVybiBOVUxMOworfQorCisgICAgc3RhdGljIGNoYXIgKgorbnVsbF9saWJpbnRsX3RleHRkb21haW4oY29uc3QgY2hhciogZG9tYWlubmFtZSkKK3sKKyAgICByZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qIERZTkFNSUNfR0VUVEVYVCAqLworCisvKiBUaGlzIHN5bWJvbCBpcyBub3QgZGVmaW5lZCBpbiBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgU0RLIG9yIFZpc3VhbCBDKysgKi8KKworI2lmbmRlZiBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUworIyBkZWZpbmUgVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MgMQorI2VuZGlmCisKK0RXT1JEIGdfUGxhdGZvcm1JZDsKKworI2lmZGVmIEhBVkVfQUNMCisjIGluY2x1ZGUgPGFjbGFwaS5oPgorLyoKKyAqIFRoZXNlIGFyZSBuZWVkZWQgdG8gZHluYW1pY2FsbHkgbG9hZCB0aGUgQURWQVBJIERMTCwgd2hpY2ggaXMgbm90CisgKiBpbXBsZW1lbnRlZCB1bmRlciBXaW5kb3dzIDk1IChhbmQgY2F1c2VzIFZJTSB0byBjcmFzaCkKKyAqLwordHlwZWRlZiBEV09SRCAoV0lOQVBJICpQU05TRUNJTkZPKSAoTFBUU1RSLCBlbnVtIFNFX09CSkVDVF9UWVBFLAorCVNFQ1VSSVRZX0lORk9STUFUSU9OLCBQU0lELCBQU0lELCBQQUNMLCBQQUNMKTsKK3R5cGVkZWYgRFdPUkQgKFdJTkFQSSAqUEdOU0VDSU5GTykgKExQU1RSLCBlbnVtIFNFX09CSkVDVF9UWVBFLAorCVNFQ1VSSVRZX0lORk9STUFUSU9OLCBQU0lEICosIFBTSUQgKiwgUEFDTCAqLCBQQUNMICosCisJUFNFQ1VSSVRZX0RFU0NSSVBUT1IgKik7CisKK3N0YXRpYyBIQU5ETEUgYWR2YXBpX2xpYiA9IE5VTEw7CS8qIEhhbmRsZSBmb3IgQURWQVBJIGxpYnJhcnkgKi8KK3N0YXRpYyBQU05TRUNJTkZPIHBTZXROYW1lZFNlY3VyaXR5SW5mbzsKK3N0YXRpYyBQR05TRUNJTkZPIHBHZXROYW1lZFNlY3VyaXR5SW5mbzsKKyNlbmRpZgorCisvKgorICogU2V0IGdfUGxhdGZvcm1JZCB0byBWRVJfUExBVEZPUk1fV0lOMzJfTlQgKE5UKSBvcgorICogVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MgKFdpbjk1KS4KKyAqLworICAgIHZvaWQKK1BsYXRmb3JtSWQodm9pZCkKK3sKKyAgICBzdGF0aWMgaW50IGRvbmUgPSBGQUxTRTsKKworICAgIGlmICghZG9uZSkKKyAgICB7CisJT1NWRVJTSU9OSU5GTyBvdmk7CisKKwlvdmkuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihvdmkpOworCUdldFZlcnNpb25FeCgmb3ZpKTsKKworCWdfUGxhdGZvcm1JZCA9IG92aS5kd1BsYXRmb3JtSWQ7CisKKyNpZmRlZiBIQVZFX0FDTAorCS8qCisJICogTG9hZCB0aGUgQURWQVBJIHJ1bnRpbWUgaWYgd2UgYXJlIG9uIGFueXRoaW5nCisJICogb3RoZXIgdGhhbiBXaW5kb3dzIDk1CisJICovCisJaWYgKGdfUGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQpCisJeworCSAgICAvKgorCSAgICAgKiBkbyB0aGlzIGxvYWQuICBQcm9ibGVtczogRG9lc24ndCB1bmxvYWQgYXQgZW5kIG9mIHJ1biAodGhpcyBpcworCSAgICAgKiB0aGVvcmV0aWNhbGx5IG9rYXksIHNpbmNlIFdpbmRvd3Mgc2hvdWxkIHVubG9hZCBpdCB3aGVuIFZJTQorCSAgICAgKiB0ZXJtaW5hdGVzKS4gIFNob3VsZCB3ZSBiZSB1c2luZyB0aGUgJ21jaF9saWJjYWxsJyByb3V0aW5lcz8KKwkgICAgICogU2VlbXMgbGlrZSBhIGxvdCBvZiBvdmVyaGVhZCB0byBsb2FkL3VubG9hZCBBRFZBUEkzMi5ETEwgZWFjaAorCSAgICAgKiB0aW1lIHdlIHZlcmlmeSBzZWN1cml0eS4uLgorCSAgICAgKi8KKwkgICAgYWR2YXBpX2xpYiA9IExvYWRMaWJyYXJ5KCJBRFZBUEkzMi5ETEwiKTsKKwkgICAgaWYgKGFkdmFwaV9saWIgIT0gTlVMTCkKKwkgICAgeworCQlwU2V0TmFtZWRTZWN1cml0eUluZm8gPSAoUFNOU0VDSU5GTylHZXRQcm9jQWRkcmVzcyhhZHZhcGlfbGliLAorCQkJCQkJICAgICAgIlNldE5hbWVkU2VjdXJpdHlJbmZvQSIpOworCQlwR2V0TmFtZWRTZWN1cml0eUluZm8gPSAoUEdOU0VDSU5GTylHZXRQcm9jQWRkcmVzcyhhZHZhcGlfbGliLAorCQkJCQkJICAgICAgIkdldE5hbWVkU2VjdXJpdHlJbmZvQSIpOworCQlpZiAocFNldE5hbWVkU2VjdXJpdHlJbmZvID09IE5VTEwKKwkJCXx8IHBHZXROYW1lZFNlY3VyaXR5SW5mbyA9PSBOVUxMKQorCQl7CisJCSAgICAvKiBJZiB3ZSBjYW4ndCBnZXQgdGhlIGZ1bmN0aW9uIGFkZHJlc3Nlcywgc2V0IGFkdmFwaV9saWIKKwkJICAgICAqIHRvIE5VTEwgc28gdGhhdCB3ZSBkb24ndCB1c2UgdGhlbS4gKi8KKwkJICAgIEZyZWVMaWJyYXJ5KGFkdmFwaV9saWIpOworCQkgICAgYWR2YXBpX2xpYiA9IE5VTEw7CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZgorCWRvbmUgPSBUUlVFOworICAgIH0KK30KKworLyoKKyAqIFJldHVybiBUUlVFIHdoZW4gcnVubmluZyBvbiBXaW5kb3dzIDk1IChvciA5OCBvciBNRSkuCisgKiBPbmx5IHRvIGJlIHVzZWQgYWZ0ZXIgbWNoX2luaXQoKS4KKyAqLworICAgIGludAorbWNoX3dpbmRvd3M5NSh2b2lkKQoreworICAgIHJldHVybiBnX1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1M7Cit9CisKKyNpZmRlZiBGRUFUX0dVSV9XMzIKKy8qCisgKiBVc2VkIHRvIHdvcmsgYXJvdW5kIHRoZSAiY2FuJ3QgZG8gc3luY2hyb25vdXMgc3Bhd24iCisgKiBwcm9ibGVtIG9uIFdpbjMycywgd2l0aG91dCByZXNvcnRpbmcgdG8gVW5pdmVyc2FsIFRodW5rLgorICovCitzdGF0aWMgaW50IG9sZF9udW1fd2luZG93czsKK3N0YXRpYyBpbnQgbnVtX3dpbmRvd3M7CisKKyAgICBzdGF0aWMgQk9PTCBDQUxMQkFDSword2luMzJzc3luY2hfY2IoSFdORCBod25kLCBMUEFSQU0gbHBhcmFtKQoreworICAgIG51bV93aW5kb3dzKys7CisgICAgcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYKKworI2lmbmRlZiBGRUFUX0dVSV9XMzIKKworI2RlZmluZSBTSElGVCAgKFNISUZUX1BSRVNTRUQpCisjZGVmaW5lIENUUkwgICAoUklHSFRfQ1RSTF9QUkVTU0VEIHwgTEVGVF9DVFJMX1BSRVNTRUQpCisjZGVmaW5lIEFMVCAgICAoUklHSFRfQUxUX1BSRVNTRUQgIHwgTEVGVF9BTFRfUFJFU1NFRCkKKyNkZWZpbmUgQUxUX0dSIChSSUdIVF9BTFRfUFJFU1NFRCAgfCBMRUZUX0NUUkxfUFJFU1NFRCkKKworCisvKiBXaGVuIHVDaGFyLkFzY2lpQ2hhciBpcyAwLCB0aGVuIHdlIG5lZWQgdG8gbG9vayBhdCB3VmlydHVhbEtleUNvZGUuCisgKiBXZSBtYXAgZnVuY3Rpb24ga2V5cyB0byB0aGVpciBBTlNJIHRlcm1pbmFsIGVxdWl2YWxlbnRzLCBhcyBwcm9kdWNlZAorICogYnkgQU5TSS5TWVMsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE1TLURPUyB2ZXJzaW9uIG9mIFZpbS4gIEFueQorICogQU5TSSBrZXkgd2l0aCBhIHZhbHVlID49ICdcMzAwJyBpcyBub25zdGFuZGFyZCwgYnV0IHByb3ZpZGVkIGFueXdheQorICogc28gdGhhdCB0aGUgdXNlciBjYW4gaGF2ZSBhY2Nlc3MgdG8gYWxsIFNISUZULSwgQ1RSTC0sIGFuZCBBTFQtCisgKiBjb21iaW5hdGlvbnMgb2YgZnVuY3Rpb24vYXJyb3cvZXRjIGtleXMuCisgKi8KKworY29uc3Qgc3RhdGljIHN0cnVjdAoreworICAgIFdPUkQgICAgd1ZpcnRLZXk7CisgICAgQk9PTCAgICBmQW5zaUtleTsKKyAgICBpbnQJICAgIGNoQWxvbmU7CisgICAgaW50CSAgICBjaFNoaWZ0OworICAgIGludAkgICAgY2hDdHJsOworICAgIGludAkgICAgY2hBbHQ7Cit9IFZpcnRLZXlNYXBbXSA9Cit7CisKKy8qICAgIEtleQlBTlNJCWFsb25lCXNoaWZ0CWN0cmwJICAgIGFsdCAqLworICAgIHsgVktfRVNDQVBFLEZBTFNFLAlFU0MsCUVTQywJRVNDLAkgICAgRVNDLCAgICB9LAorCisgICAgeyBWS19GMSwJVFJVRSwJJzsnLAknVCcsCSdeJywJICAgICdoJywgfSwKKyAgICB7IFZLX0YyLAlUUlVFLAknPCcsCSdVJywJJ18nLAkgICAgJ2knLCB9LAorICAgIHsgVktfRjMsCVRSVUUsCSc9JywJJ1YnLAknYCcsCSAgICAnaicsIH0sCisgICAgeyBWS19GNCwJVFJVRSwJJz4nLAknVycsCSdhJywJICAgICdrJywgfSwKKyAgICB7IFZLX0Y1LAlUUlVFLAknPycsCSdYJywJJ2InLAkgICAgJ2wnLCB9LAorICAgIHsgVktfRjYsCVRSVUUsCSdAJywJJ1knLAknYycsCSAgICAnbScsIH0sCisgICAgeyBWS19GNywJVFJVRSwJJ0EnLAknWicsCSdkJywJICAgICduJywgfSwKKyAgICB7IFZLX0Y4LAlUUlVFLAknQicsCSdbJywJJ2UnLAkgICAgJ28nLCB9LAorICAgIHsgVktfRjksCVRSVUUsCSdDJywJJ1xcJywJJ2YnLAkgICAgJ3AnLCB9LAorICAgIHsgVktfRjEwLAlUUlVFLAknRCcsCSddJywJJ2cnLAkgICAgJ3EnLCB9LAorICAgIHsgVktfRjExLAlUUlVFLAknXDIwNScsCSdcMjA3JywJJ1wyMTEnLAkgICAgJ1wyMTMnLCB9LAorICAgIHsgVktfRjEyLAlUUlVFLAknXDIwNicsCSdcMjEwJywJJ1wyMTInLAkgICAgJ1wyMTQnLCB9LAorCisgICAgeyBWS19IT01FLAlUUlVFLAknRycsCSdcMzAyJywJJ3cnLAkgICAgJ1wzMDMnLCB9LAorICAgIHsgVktfVVAsCVRSVUUsCSdIJywJJ1wzMDQnLAknXDMwNScsCSAgICAnXDMwNicsIH0sCisgICAgeyBWS19QUklPUiwJVFJVRSwJJ0knLAknXDMwNycsCSdcMjA0JywJICAgICdcMzEwJywgfSwgLypQZ1VwKi8KKyAgICB7IFZLX0xFRlQsCVRSVUUsCSdLJywJJ1wzMTEnLAkncycsCSAgICAnXDMxMicsIH0sCisgICAgeyBWS19SSUdIVCwJVFJVRSwJJ00nLAknXDMxMycsCSd0JywJICAgICdcMzE0JywgfSwKKyAgICB7IFZLX0VORCwJVFJVRSwJJ08nLAknXDMxNScsCSd1JywJICAgICdcMzE2JywgfSwKKyAgICB7IFZLX0RPV04sCVRSVUUsCSdQJywJJ1wzMTcnLAknXDMyMCcsCSAgICAnXDMyMScsIH0sCisgICAgeyBWS19ORVhULAlUUlVFLAknUScsCSdcMzIyJywJJ3YnLAkgICAgJ1wzMjMnLCB9LCAvKlBnRG4qLworICAgIHsgVktfSU5TRVJULFRSVUUsCSdSJywJJ1wzMjQnLAknXDMyNScsCSAgICAnXDMyNicsIH0sCisgICAgeyBWS19ERUxFVEUsVFJVRSwJJ1MnLAknXDMyNycsCSdcMzMwJywJICAgICdcMzMxJywgfSwKKworICAgIHsgVktfU05BUFNIT1QsVFJVRSwJMCwJMCwJMCwJICAgICdyJywgfSwgLypQcnRTY3JuKi8KKworI2lmIDAKKyAgICAvKiBNb3N0IHBlb3BsZSBkb24ndCBoYXZlIEYxMy1GMjAsIGJ1dCB3aGF0IHRoZSBoZWxsLi4uICovCisgICAgeyBWS19GMTMsCVRSVUUsCSdcMzMyJywJJ1wzMzMnLAknXDMzNCcsCSAgICAnXDMzNScsIH0sCisgICAgeyBWS19GMTQsCVRSVUUsCSdcMzM2JywJJ1wzMzcnLAknXDM0MCcsCSAgICAnXDM0MScsIH0sCisgICAgeyBWS19GMTUsCVRSVUUsCSdcMzQyJywJJ1wzNDMnLAknXDM0NCcsCSAgICAnXDM0NScsIH0sCisgICAgeyBWS19GMTYsCVRSVUUsCSdcMzQ2JywJJ1wzNDcnLAknXDM1MCcsCSAgICAnXDM1MScsIH0sCisgICAgeyBWS19GMTcsCVRSVUUsCSdcMzUyJywJJ1wzNTMnLAknXDM1NCcsCSAgICAnXDM1NScsIH0sCisgICAgeyBWS19GMTgsCVRSVUUsCSdcMzU2JywJJ1wzNTcnLAknXDM2MCcsCSAgICAnXDM2MScsIH0sCisgICAgeyBWS19GMTksCVRSVUUsCSdcMzYyJywJJ1wzNjMnLAknXDM2NCcsCSAgICAnXDM2NScsIH0sCisgICAgeyBWS19GMjAsCVRSVUUsCSdcMzY2JywJJ1wzNjcnLAknXDM3MCcsCSAgICAnXDM3MScsIH0sCisjZW5kaWYKKyAgICB7IFZLX0FERCwJVFJVRSwgICAnTicsICAgICdOJywgICAgJ04nLAknTicsCX0sIC8qIGtleXAgJysnICovCisgICAgeyBWS19TVUJUUkFDVCwgVFJVRSwnSicsCSdKJywgICAgJ0onLAknSicsCX0sIC8qIGtleXAgJy0nICovCisgLyogeyBWS19ESVZJREUsICAgVFJVRSwnTicsCSdOJywgICAgJ04nLAknTicsCX0sICAgIGtleXAgJy8nICovCisgICAgeyBWS19NVUxUSVBMWSwgVFJVRSwnNycsCSc3JywgICAgJzcnLAknNycsCX0sIC8qIGtleXAgJyonICovCisKKyAgICB7IFZLX05VTVBBRDAsVFJVRSwgICdcMzMyJywJJ1wzMzMnLAknXDMzNCcsCSAgICAnXDMzNScsIH0sCisgICAgeyBWS19OVU1QQUQxLFRSVUUsICAnXDMzNicsCSdcMzM3JywJJ1wzNDAnLAkgICAgJ1wzNDEnLCB9LAorICAgIHsgVktfTlVNUEFEMixUUlVFLCAgJ1wzNDInLAknXDM0MycsCSdcMzQ0JywJICAgICdcMzQ1JywgfSwKKyAgICB7IFZLX05VTVBBRDMsVFJVRSwgICdcMzQ2JywJJ1wzNDcnLAknXDM1MCcsCSAgICAnXDM1MScsIH0sCisgICAgeyBWS19OVU1QQUQ0LFRSVUUsICAnXDM1MicsCSdcMzUzJywJJ1wzNTQnLAkgICAgJ1wzNTUnLCB9LAorICAgIHsgVktfTlVNUEFENSxUUlVFLCAgJ1wzNTYnLAknXDM1NycsCSdcMzYwJywJICAgICdcMzYxJywgfSwKKyAgICB7IFZLX05VTVBBRDYsVFJVRSwgICdcMzYyJywJJ1wzNjMnLAknXDM2NCcsCSAgICAnXDM2NScsIH0sCisgICAgeyBWS19OVU1QQUQ3LFRSVUUsICAnXDM2NicsCSdcMzY3JywJJ1wzNzAnLAkgICAgJ1wzNzEnLCB9LAorICAgIHsgVktfTlVNUEFEOCxUUlVFLCAgJ1wzNzInLAknXDM3MycsCSdcMzc0JywJICAgICdcMzc1JywgfSwKKyAgICAvKiBTb3JyeSwgb3V0IG9mIG51bWJlciBzcGFjZSEgPG5lZ3JpPiovCisgICAgeyBWS19OVU1QQUQ5LFRSVUUsICAnXDM3NicsCSdcMzc3JywJJ1wzNzcnLAkgICAgJ1wzNjcnLCB9LAorCit9OworCisKKyNpZmRlZiBfTVNDX1ZFUgorLy8gVGhlIFRvQXNjaWkgYnVnIGRlc3Ryb3lzIHNldmVyYWwgcmVnaXN0ZXJzLglOZWVkIHRvIHR1cm4gb2ZmIG9wdGltaXphdGlvbgorLy8gb3IgdGhlIEdldENvbnNvbGVLZXlib2FyZExheW91dE5hbWUgaGFjayB3aWxsIGZhaWwgaW4gbm9uLWRlYnVnIHZlcnNpb25zCisjIHByYWdtYSBvcHRpbWl6ZSgiIiwgb2ZmKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykgICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisjIGRlZmluZSBBQ2hhciBBc2NpaUNoYXIKKyNlbHNlCisjIGRlZmluZSBBQ2hhciB1Q2hhci5Bc2NpaUNoYXIKKyNlbmRpZgorCisvKiBUaGUgcmV0dXJuIGNvZGUgaW5kaWNhdGVzIGtleSBjb2RlIHNpemUuICovCisgICAgc3RhdGljIGludAorI2lmZGVmIF9fQk9STEFORENfXworICAgIF9fc3RkY2FsbAorI2VuZGlmCit3aW4zMl9rYmRfcGF0Y2hfa2V5KAorICAgIEtFWV9FVkVOVF9SRUNPUkQqIHBrZXIpCit7CisgICAgVUlOVCB1TW9kcyA9IHBrZXItPmR3Q29udHJvbEtleVN0YXRlOworICAgIHN0YXRpYyBpbnQgc19pSXNEZWFkID0gMDsKKyAgICBzdGF0aWMgV09SRCBhd0Fuc2lDb2RlWzJdOworICAgIHN0YXRpYyBCWVRFIGFiS2V5c3RhdGVbMjU2XTsKKworCisgICAgaWYgKHNfaUlzRGVhZCA9PSAyKQorICAgIHsKKwlwa2VyLT5BQ2hhciA9IChDSEFSKSBhd0Fuc2lDb2RlWzFdOworCXNfaUlzRGVhZCA9IDA7CisJcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYgKHBrZXItPkFDaGFyICE9IDApCisJcmV0dXJuIDE7CisKKyAgICBtZW1zZXQoYWJLZXlzdGF0ZSwgMCwgc2l6ZW9mIChhYktleXN0YXRlKSk7CisKKyAgICAvLyBTaG91bGQgb25seSBiZSBub24tTlVMTCBvbiBOVCA0LjAKKyAgICBpZiAoc19wZm5HZXRDb25zb2xlS2V5Ym9hcmRMYXlvdXROYW1lICE9IE5VTEwpCisgICAgeworCUNIQVIgc3pLTElEW0tMX05BTUVMRU5HVEhdOworCisJaWYgKCgqc19wZm5HZXRDb25zb2xlS2V5Ym9hcmRMYXlvdXROYW1lKShzektMSUQpKQorCSAgICAodm9pZClMb2FkS2V5Ym9hcmRMYXlvdXQoc3pLTElELCBLTEZfQUNUSVZBVEUpOworICAgIH0KKworICAgIC8qIENsZWFyIGFueSBwZW5kaW5nIGRlYWQga2V5cyAqLworICAgIFRvQXNjaWkoVktfU1BBQ0UsIE1hcFZpcnR1YWxLZXkoVktfU1BBQ0UsIDApLCBhYktleXN0YXRlLCBhd0Fuc2lDb2RlLCAwKTsKKworICAgIGlmICh1TW9kcyAmIFNISUZUX1BSRVNTRUQpCisJYWJLZXlzdGF0ZVtWS19TSElGVF0gPSAweDgwOworICAgIGlmICh1TW9kcyAmIENBUFNMT0NLX09OKQorCWFiS2V5c3RhdGVbVktfQ0FQSVRBTF0gPSAxOworCisgICAgaWYgKCh1TW9kcyAmIEFMVF9HUikgPT0gQUxUX0dSKQorICAgIHsKKwlhYktleXN0YXRlW1ZLX0NPTlRST0xdID0gYWJLZXlzdGF0ZVtWS19MQ09OVFJPTF0gPQorCSAgICBhYktleXN0YXRlW1ZLX01FTlVdID0gYWJLZXlzdGF0ZVtWS19STUVOVV0gPSAweDgwOworICAgIH0KKworICAgIHNfaUlzRGVhZCA9IFRvQXNjaWkocGtlci0+d1ZpcnR1YWxLZXlDb2RlLCBwa2VyLT53VmlydHVhbFNjYW5Db2RlLAorCQkJYWJLZXlzdGF0ZSwgYXdBbnNpQ29kZSwgMCk7CisKKyAgICBpZiAoc19pSXNEZWFkID4gMCkKKwlwa2VyLT5BQ2hhciA9IChDSEFSKSBhd0Fuc2lDb2RlWzBdOworCisgICAgcmV0dXJuIHNfaUlzRGVhZDsKK30KKworI2lmZGVmIF9NU0NfVkVSCisvKiBNVVNUIHN3aXRjaCBvcHRpbWl6YXRpb24gb24gYWdhaW4gaGVyZSwgb3RoZXJ3aXNlIGEgY2FsbCB0bworICogZGVjb2RlX2tleV9ldmVudCgpIG1heSBjcmFzaCAoZS5nLiB3aGVuIGhpdHRpbmcgY2Fwcy1sb2NrKSAqLworIyBwcmFnbWEgb3B0aW1pemUoIiIsIG9uKQorCisjIGlmIChfTVNDX1ZFUiA8IDExMDApCisvKiBNVVNUIHR1cm4gb2ZmIGdsb2JhbCBvcHRpbWlzYXRpb24gZm9yIHRoaXMgbmV4dCBmdW5jdGlvbiwgb3IKKyAqIHByZXNzaW5nIGN0cmwtbWludXMgaW4gaW5zZXJ0IG1vZGUgY3Jhc2hlcyBWaW0gd2hlbiBidWlsdCB3aXRoCisgKiBWQzQuMS4gLS0gbmVncmkuICovCisjICBwcmFnbWEgb3B0aW1pemUoImciLCBvZmYpCisjIGVuZGlmCisjZW5kaWYKKworc3RhdGljIEJPT0wgZ19mSnVzdEdvdEZvY3VzID0gRkFMU0U7CisKKy8qCisgKiBEZWNvZGUgYSBLRVlfRVZFTlQgaW50byBvbmUgb3IgdHdvIGtleXN0cm9rZXMKKyAqLworICAgIHN0YXRpYyBCT09MCitkZWNvZGVfa2V5X2V2ZW50KAorICAgIEtFWV9FVkVOVF9SRUNPUkQJKnBrZXIsCisgICAgY2hhcl91CQkqcGNoLAorICAgIGNoYXJfdQkJKnBjaDIsCisgICAgaW50CQkJKnBtb2RpZmllcnMsCisgICAgQk9PTAkJZkRvUG9zdCkKK3sKKyAgICBpbnQgaTsKKyAgICBjb25zdCBpbnQgbk1vZGlmcyA9IHBrZXItPmR3Q29udHJvbEtleVN0YXRlICYgKFNISUZUIHwgQUxUIHwgQ1RSTCk7CisKKyAgICAqcGNoID0gKnBjaDIgPSBOVUw7CisgICAgZ19mSnVzdEdvdEZvY3VzID0gRkFMU0U7CisKKyAgICAvKiBpZ25vcmUga2V5IHVwIGV2ZW50cyAqLworICAgIGlmICghcGtlci0+YktleURvd24pCisJcmV0dXJuIEZBTFNFOworCisgICAgLyogaWdub3JlIHNvbWUga2V5c3Ryb2tlcyAqLworICAgIHN3aXRjaCAocGtlci0+d1ZpcnR1YWxLZXlDb2RlKQorICAgIHsKKyAgICAvKiBtb2RpZmllcnMgKi8KKyAgICBjYXNlIFZLX1NISUZUOgorICAgIGNhc2UgVktfQ09OVFJPTDoKKyAgICBjYXNlIFZLX01FTlU6ICAgLyogQWx0IGtleSAqLworCXJldHVybiBGQUxTRTsKKworICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorCisgICAgLyogc3BlY2lhbCBjYXNlcyAqLworICAgIGlmICgobk1vZGlmcyAmIENUUkwpICE9IDAgJiYgKG5Nb2RpZnMgJiB+Q1RSTCkgPT0gMCAmJiBwa2VyLT5BQ2hhciA9PSBOVUwpCisgICAgeworCS8qIEN0cmwtNiBpcyBDdHJsLV4gKi8KKwlpZiAocGtlci0+d1ZpcnR1YWxLZXlDb2RlID09ICc2JykKKwl7CisJICAgICpwY2ggPSBDdHJsX0hBVDsKKwkgICAgcmV0dXJuIFRSVUU7CisJfQorCS8qIEN0cmwtMiBpcyBDdHJsLUAgKi8KKwllbHNlIGlmIChwa2VyLT53VmlydHVhbEtleUNvZGUgPT0gJzInKQorCXsKKwkgICAgKnBjaCA9IE5VTDsKKwkgICAgcmV0dXJuIFRSVUU7CisJfQorCS8qIEN0cmwtLSBpcyBDdHJsLV8gKi8KKwllbHNlIGlmIChwa2VyLT53VmlydHVhbEtleUNvZGUgPT0gMHhCRCkKKwl7CisJICAgICpwY2ggPSBDdHJsX187CisJICAgIHJldHVybiBUUlVFOworCX0KKyAgICB9CisKKyAgICAvKiBTaGlmdC1UQUIgKi8KKyAgICBpZiAocGtlci0+d1ZpcnR1YWxLZXlDb2RlID09IFZLX1RBQiAmJiAobk1vZGlmcyAmIFNISUZUX1BSRVNTRUQpKQorICAgIHsKKwkqcGNoID0gS19OVUw7CisJKnBjaDIgPSAnXDAxNyc7CisJcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgZm9yIChpID0gc2l6ZW9mKFZpcnRLZXlNYXApIC8gc2l6ZW9mKFZpcnRLZXlNYXBbMF0pOyAgLS1pID49IDA7ICApCisgICAgeworCWlmIChWaXJ0S2V5TWFwW2ldLndWaXJ0S2V5ID09IHBrZXItPndWaXJ0dWFsS2V5Q29kZSkKKwl7CisJICAgIGlmIChuTW9kaWZzID09IDApCisJCSpwY2ggPSBWaXJ0S2V5TWFwW2ldLmNoQWxvbmU7CisJICAgIGVsc2UgaWYgKChuTW9kaWZzICYgU0hJRlQpICE9IDAgJiYgKG5Nb2RpZnMgJiB+U0hJRlQpID09IDApCisJCSpwY2ggPSBWaXJ0S2V5TWFwW2ldLmNoU2hpZnQ7CisJICAgIGVsc2UgaWYgKChuTW9kaWZzICYgQ1RSTCkgIT0gMCAmJiAobk1vZGlmcyAmIH5DVFJMKSA9PSAwKQorCQkqcGNoID0gVmlydEtleU1hcFtpXS5jaEN0cmw7CisJICAgIGVsc2UgaWYgKChuTW9kaWZzICYgQUxUKSAhPSAwICYmIChuTW9kaWZzICYgfkFMVCkgPT0gMCkKKwkJKnBjaCA9IFZpcnRLZXlNYXBbaV0uY2hBbHQ7CisKKwkgICAgaWYgKCpwY2ggIT0gMCkKKwkgICAgeworCQlpZiAoVmlydEtleU1hcFtpXS5mQW5zaUtleSkKKwkJeworCQkgICAgKnBjaDIgPSAqcGNoOworCQkgICAgKnBjaCA9IEtfTlVMOworCQl9CisKKwkJcmV0dXJuIFRSVUU7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaSA9IHdpbjMyX2tiZF9wYXRjaF9rZXkocGtlcik7CisKKyAgICBpZiAoaSA8IDApCisJKnBjaCA9IE5VTDsKKyAgICBlbHNlCisgICAgeworCSpwY2ggPSAoaSA+IDApID8gcGtlci0+QUNoYXIgOiBOVUw7CisKKwlpZiAocG1vZGlmaWVycyAhPSBOVUxMKQorCXsKKwkgICAgLyogUGFzcyBvbiB0aGUgQUxUIGtleSBhcyBhIG1vZGlmaWVyLCBidXQgb25seSB3aGVuIG5vdCBjb21iaW5lZAorCSAgICAgKiB3aXRoIENUUkwgKHdoaWNoIGlzIEFMVEdSKS4gKi8KKwkgICAgaWYgKChuTW9kaWZzICYgQUxUKSAhPSAwICYmIChuTW9kaWZzICYgQ1RSTCkgPT0gMCkKKwkJKnBtb2RpZmllcnMgfD0gTU9EX01BU0tfQUxUOworCisJICAgIC8qIFBhc3Mgb24gU0hJRlQgb25seSBmb3Igc3BlY2lhbCBrZXlzLCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hlbgorCSAgICAgKiBpdCdzIGFscmVhZHkgaW5jbHVkZWQgd2l0aCB0aGUgY2hhcmFjdGVyLiAqLworCSAgICBpZiAoKG5Nb2RpZnMgJiBTSElGVCkgIT0gMCAmJiAqcGNoIDw9IDB4MjApCisJCSpwbW9kaWZpZXJzIHw9IE1PRF9NQVNLX1NISUZUOworCisJICAgIC8qIFBhc3Mgb24gQ1RSTCBvbmx5IGZvciBub24tc3BlY2lhbCBrZXlzLCBiZWNhdXNlIHdlIGRvbid0IGtub3cKKwkgICAgICogd2hlbiBpdCdzIGFscmVhZHkgaW5jbHVkZWQgd2l0aCB0aGUgY2hhcmFjdGVyLiAgQW5kIG5vdCB3aGVuCisJICAgICAqIGNvbWJpbmVkIHdpdGggQUxUICh3aGljaCBpcyBBTFRHUikuICovCisJICAgIGlmICgobk1vZGlmcyAmIENUUkwpICE9IDAgJiYgKG5Nb2RpZnMgJiBBTFQpID09IDAKKwkJCQkJICAgICAgICYmICpwY2ggPj0gMHgyMCAmJiAqcGNoIDwgMHg4MCkKKwkJKnBtb2RpZmllcnMgfD0gTU9EX01BU0tfQ1RSTDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuICgqcGNoICE9IE5VTCk7Cit9CisKKyNpZmRlZiBfTVNDX1ZFUgorIyBwcmFnbWEgb3B0aW1pemUoIiIsIG9uKQorI2VuZGlmCisKKyNlbmRpZiAvKiBGRUFUX0dVSV9XMzIgKi8KKworCisjaWZkZWYgRkVBVF9NT1VTRQorCisvKgorICogRm9yIHRoZSBHVUkgdGhlIG1vdXNlIGhhbmRsaW5nIGlzIGluIGd1aV93MzIuYy4KKyAqLworIyBpZmRlZiBGRUFUX0dVSV9XMzIKKyAgICB2b2lkCittY2hfc2V0bW91c2UoCisgICAgaW50IG9uKQoreworfQorIyBlbHNlCitzdGF0aWMgaW50IGdfZk1vdXNlQXZhaWwgPSBGQUxTRTsgICAvKiBtb3VzZSBwcmVzZW50ICovCitzdGF0aWMgaW50IGdfZk1vdXNlQWN0aXZlID0gRkFMU0U7ICAvKiBtb3VzZSBlbmFibGVkICovCitzdGF0aWMgaW50IGdfbk1vdXNlQ2xpY2sgPSAtMTsJICAgIC8qIG1vdXNlIHN0YXR1cyAqLworc3RhdGljIGludCBnX3hNb3VzZTsJCSAgICAvKiBtb3VzZSB4IGNvb3JkaW5hdGUgKi8KK3N0YXRpYyBpbnQgZ195TW91c2U7CQkgICAgLyogbW91c2UgeSBjb29yZGluYXRlICovCisKKy8qCisgKiBFbmFibGUgb3IgZGlzYWJsZSBtb3VzZSBpbnB1dAorICovCisgICAgdm9pZAorbWNoX3NldG1vdXNlKAorICAgIGludCBvbikKK3sKKyAgICBEV09SRCBjbW9kZWluOworCisgICAgaWYgKCFnX2ZNb3VzZUF2YWlsKQorCXJldHVybjsKKworICAgIGdfZk1vdXNlQWN0aXZlID0gb247CisgICAgR2V0Q29uc29sZU1vZGUoZ19oQ29uSW4sICZjbW9kZWluKTsKKworICAgIGlmIChnX2ZNb3VzZUFjdGl2ZSkKKwljbW9kZWluIHw9IEVOQUJMRV9NT1VTRV9JTlBVVDsKKyAgICBlbHNlCisJY21vZGVpbiAmPSB+RU5BQkxFX01PVVNFX0lOUFVUOworCisgICAgU2V0Q29uc29sZU1vZGUoZ19oQ29uSW4sIGNtb2RlaW4pOworfQorCisKKy8qCisgKiBEZWNvZGUgYSBNT1VTRV9FVkVOVC4gIElmIGl0J3MgYSB2YWxpZCBldmVudCwgcmV0dXJuIE1PVVNFX0xFRlQsCisgKiBNT1VTRV9NSURETEUsIG9yIE1PVVNFX1JJR0hUIGZvciBhIGNsaWNrOyBNT1VTRV9EUkFHIGZvciBhIG1vdXNlCisgKiBtb3ZlIHdpdGggYSBidXR0b24gaGVsZCBkb3duOyBhbmQgTU9VU0VfUkVMRUFTRSBhZnRlciBhIE1PVVNFX0RSQUcKKyAqIG9yIGEgTU9VU0VfTEVGVCwgX01JRERMRSwgb3IgX1JJR0hULiAgV2UgZW5jb2RlIHRoZSBidXR0b24gdHlwZSwKKyAqIHRoZSBudW1iZXIgb2YgY2xpY2tzLCBhbmQgdGhlIFNoaWZ0L0N0cmwvQWx0IG1vZGlmaWVycyBpbiBnX25Nb3VzZUNsaWNrLAorICogYW5kIHdlIHJldHVybiB0aGUgbW91c2UgcG9zaXRpb24gaW4gZ194TW91c2UgYW5kIGdfeU1vdXNlLgorICoKKyAqIEV2ZXJ5IE1PVVNFX0xFRlQsIF9NSURETEUsIG9yIF9SSUdIVCB3aWxsIGJlIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZQorICogTU9VU0VfRFJBR3MgYW5kIG9uZSBNT1VTRV9SRUxFQVNFLiAgTU9VU0VfUkVMRUFTRSB3aWxsIGJlIGZvbGxvd2VkIG9ubHkKKyAqIGJ5IE1PVVNFX0xFRlQsIF9NSURETEUsIG9yIF9SSUdIVC4KKyAqCisgKiBGb3IgbXVsdGlwbGUgY2xpY2tzLCB3ZSBzZW5kLCBzYXksIE1PVVNFX0xFRlQvMSBjbGljaywgTU9VU0VfUkVMRUFTRSwKKyAqIE1PVVNFX0xFRlQvMiBjbGlja3MsIE1PVVNFX1JFTEVBU0UsIE1PVVNFX0xFRlQvMyBjbGlja3MsIE1PVVNFX1JFTEVBU0UsIC4uLi4KKyAqCisgKiBXaW5kb3dzIHdpbGwgc2VuZCB1cyBNT1VTRV9NT1ZFRCBub3RpZmljYXRpb25zIHdoZW5ldmVyIHRoZSBtb3VzZQorICogbW92ZXMsIGV2ZW4gaWYgaXQgc3RheXMgd2l0aGluIHRoZSBzYW1lIGNoYXJhY3RlciBjZWxsLiAgV2UgaWdub3JlCisgKiBhbGwgTU9VU0VfTU9WRUQgbWVzc2FnZXMgaWYgdGhlIHBvc2l0aW9uIGhhc24ndCByZWFsbHkgY2hhbmdlZCwgYW5kCisgKiB3ZSBpZ25vcmUgYWxsIE1PVVNFX01PVkVEIG1lc3NhZ2VzIHdoZXJlIG5vIGJ1dHRvbiBpcyBoZWxkIGRvd24gKGkuZS4sCisgKiB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gTU9VU0VfRFJBRykuCisgKgorICogQWxsIG9mIHRoaXMgaXMgY29tcGxpY2F0ZWQgYnkgdGhlIGNvZGUgdGhhdCBmYWtlcyBNT1VTRV9NSURETEUgb24KKyAqIDItYnV0dG9uIG1vdXNlcyBieSBwcmVzc2luZyB0aGUgbGVmdCAmIHJpZ2h0IGJ1dHRvbnMgc2ltdWx0YW5lb3VzbHkuCisgKiBJbiBwcmFjdGljZSwgaXQncyBhbG1vc3QgaW1wb3NzaWJsZSB0byBjbGljayBib3RoIGF0IHRoZSBzYW1lIHRpbWUsCisgKiBzbyB3ZSBuZWVkIHRvIGRlbGF5IGEgbGl0dGxlLiAgQWxzbywgd2UgdGVuZCBub3QgdG8gZ2V0IE1PVVNFX1JFTEVBU0UKKyAqIGluIHN1Y2ggY2FzZXMsIGlmIHRoZSB1c2VyIGlzIGNsaWNraW5nIHF1aWNrbHkuCisgKi8KKyAgICBzdGF0aWMgQk9PTAorZGVjb2RlX21vdXNlX2V2ZW50KAorICAgIE1PVVNFX0VWRU5UX1JFQ09SRCogcG1lcikKK3sKKyAgICBzdGF0aWMgaW50IHNfbk9sZEJ1dHRvbiA9IC0xOworICAgIHN0YXRpYyBpbnQgc19uT2xkTW91c2VDbGljayA9IC0xOworICAgIHN0YXRpYyBpbnQgc194T2xkTW91c2UgPSAtMTsKKyAgICBzdGF0aWMgaW50IHNfeU9sZE1vdXNlID0gLTE7CisgICAgc3RhdGljIGxpbmVucl9UIHNfb2xkX3RvcGxpbmUgPSAwOworI2lmZGVmIEZFQVRfRElGRgorICAgIHN0YXRpYyBpbnQgc19vbGRfdG9wZmlsbCA9IDA7CisjZW5kaWYKKyAgICBzdGF0aWMgaW50IHNfY0NsaWNrcyA9IDE7CisgICAgc3RhdGljIEJPT0wgc19mUmVsZWFzZWQgPSBUUlVFOworICAgIHN0YXRpYyBEV09SRCBzX2R3TGFzdENsaWNrVGltZSA9IDA7CisgICAgc3RhdGljIEJPT0wgc19mTmV4dElzTWlkZGxlID0gRkFMU0U7CisKKyAgICBzdGF0aWMgRFdPUkQgY0J1dHRvbnMgPSAwOwkvKiBudW1iZXIgb2YgYnV0dG9ucyBzdXBwb3J0ZWQgKi8KKworICAgIGNvbnN0IERXT1JEIExFRlQgPSBGUk9NX0xFRlRfMVNUX0JVVFRPTl9QUkVTU0VEOworICAgIGNvbnN0IERXT1JEIE1JRERMRSA9IEZST01fTEVGVF8yTkRfQlVUVE9OX1BSRVNTRUQ7CisgICAgY29uc3QgRFdPUkQgUklHSFQgPSBSSUdIVE1PU1RfQlVUVE9OX1BSRVNTRUQ7CisgICAgY29uc3QgRFdPUkQgTEVGVF9SSUdIVCA9IExFRlQgfCBSSUdIVDsKKworICAgIGludCBuQnV0dG9uOworCisgICAgaWYgKGNCdXR0b25zID09IDAgJiYgIUdldE51bWJlck9mQ29uc29sZU1vdXNlQnV0dG9ucygmY0J1dHRvbnMpKQorCWNCdXR0b25zID0gMjsKKworICAgIGlmICghZ19mTW91c2VBdmFpbCB8fCAhZ19mTW91c2VBY3RpdmUpCisgICAgeworCWdfbk1vdXNlQ2xpY2sgPSAtMTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLyogZ2V0IGEgc3B1cmlvdXMgTU9VU0VfRVZFTlQgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVjZWl2aW5nIGZvY3VzOyBpZ25vcmUgKi8KKyAgICBpZiAoZ19mSnVzdEdvdEZvY3VzKQorICAgIHsKKwlnX2ZKdXN0R290Rm9jdXMgPSBGQUxTRTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLyogdW5wcm9jZXNzZWQgbW91c2UgY2xpY2s/ICovCisgICAgaWYgKGdfbk1vdXNlQ2xpY2sgIT0gLTEpCisJcmV0dXJuIFRSVUU7CisKKyAgICBuQnV0dG9uID0gLTE7CisgICAgZ194TW91c2UgPSBwbWVyLT5kd01vdXNlUG9zaXRpb24uWDsKKyAgICBnX3lNb3VzZSA9IHBtZXItPmR3TW91c2VQb3NpdGlvbi5ZOworCisgICAgaWYgKHBtZXItPmR3RXZlbnRGbGFncyA9PSBNT1VTRV9NT1ZFRCkKKyAgICB7CisJLyogaWdub3JlIE1PVVNFX01PVkVEIGV2ZW50cyBpZiAoeCwgeSkgaGFzbid0IGNoYW5nZWQuCShXZSBnZXQgdGhlc2UKKwkgKiBldmVudHMgZXZlbiB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBvbmx5IHdpdGhpbiBhIGNoYXIgY2VsbC4pICovCisJaWYgKHNfeE9sZE1vdXNlID09IGdfeE1vdXNlICYmIHNfeU9sZE1vdXNlID09IGdfeU1vdXNlKQorCSAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLyogSWYgbm8gYnV0dG9ucyBhcmUgcHJlc3NlZC4uLiAqLworICAgIGlmICgocG1lci0+ZHdCdXR0b25TdGF0ZSAmICgoMSA8PCBjQnV0dG9ucykgLSAxKSkgPT0gMCkKKyAgICB7CisJLyogSWYgdGhlIGxhc3QgdGhpbmcgcmV0dXJuZWQgd2FzIE1PVVNFX1JFTEVBU0UsIGlnbm9yZSB0aGlzICovCisJaWYgKHNfZlJlbGVhc2VkKQorCSAgICByZXR1cm4gRkFMU0U7CisKKwluQnV0dG9uID0gTU9VU0VfUkVMRUFTRTsKKwlzX2ZSZWxlYXNlZCA9IFRSVUU7CisgICAgfQorICAgIGVsc2UgICAgLyogb25lIG9yIG1vcmUgYnV0dG9ucyBwcmVzc2VkICovCisgICAgeworCS8qIG9uIGEgMi1idXR0b24gbW91c2UsIGhvbGQgZG93biBsZWZ0IGFuZCByaWdodCBidXR0b25zCisJICogc2ltdWx0YW5lb3VzbHkgdG8gZ2V0IE1JRERMRS4gKi8KKworCWlmIChjQnV0dG9ucyA9PSAyICYmIHNfbk9sZEJ1dHRvbiAhPSBNT1VTRV9EUkFHKQorCXsKKwkgICAgRFdPUkQgZHdMUiA9IChwbWVyLT5kd0J1dHRvblN0YXRlICYgTEVGVF9SSUdIVCk7CisKKwkgICAgLyogaWYgZWl0aGVyIGxlZnQgb3IgcmlnaHQgYnV0dG9uIG9ubHkgaXMgcHJlc3NlZCwgc2VlIGlmIHRoZQorCSAgICAgKiB0aGUgbmV4dCBtb3VzZSBldmVudCBoYXMgYm90aCBvZiB0aGVtIHByZXNzZWQgKi8KKwkgICAgaWYgKGR3TFIgPT0gTEVGVCB8fCBkd0xSID09IFJJR0hUKQorCSAgICB7CisJCWZvciAoOzspCisJCXsKKwkJICAgIC8qIHdhaXQgYSBzaG9ydCB0aW1lIGZvciBuZXh0IGlucHV0IGV2ZW50ICovCisJCSAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdChnX2hDb25JbiwgcF9tb3VzZXQgLyAzKQorCQkJCQkJCSAgICAgIT0gV0FJVF9PQkpFQ1RfMCkKKwkJCWJyZWFrOworCQkgICAgZWxzZQorCQkgICAgeworCQkJRFdPUkQgY1JlY29yZHMgPSAwOworCQkJSU5QVVRfUkVDT1JEIGlyOworCQkJTU9VU0VfRVZFTlRfUkVDT1JEKiBwbWVyMiA9ICZpci5FdmVudC5Nb3VzZUV2ZW50OworCisJCQlQZWVrQ29uc29sZUlucHV0KGdfaENvbkluLCAmaXIsIDEsICZjUmVjb3Jkcyk7CisKKwkJCWlmIChjUmVjb3JkcyA9PSAwIHx8IGlyLkV2ZW50VHlwZSAhPSBNT1VTRV9FVkVOVAorCQkJCXx8ICEocG1lcjItPmR3QnV0dG9uU3RhdGUgJiBMRUZUX1JJR0hUKSkKKwkJCSAgICBicmVhazsKKwkJCWVsc2UKKwkJCXsKKwkJCSAgICBpZiAocG1lcjItPmR3RXZlbnRGbGFncyAhPSBNT1VTRV9NT1ZFRCkKKwkJCSAgICB7CisJCQkJUmVhZENvbnNvbGVJbnB1dChnX2hDb25JbiwgJmlyLCAxLCAmY1JlY29yZHMpOworCisJCQkJcmV0dXJuIGRlY29kZV9tb3VzZV9ldmVudChwbWVyMik7CisJCQkgICAgfQorCQkJICAgIGVsc2UgaWYgKHNfeE9sZE1vdXNlID09IHBtZXIyLT5kd01vdXNlUG9zaXRpb24uWCAmJgorCQkJCSAgICAgc195T2xkTW91c2UgPT0gcG1lcjItPmR3TW91c2VQb3NpdGlvbi5ZKQorCQkJICAgIHsKKwkJCQkvKiB0aHJvdyBhd2F5IHNwdXJpb3VzIG1vdXNlIG1vdmUgKi8KKwkJCQlSZWFkQ29uc29sZUlucHV0KGdfaENvbkluLCAmaXIsIDEsICZjUmVjb3Jkcyk7CisKKwkJCQkvKiBhcmUgdGhlcmUgYW55IG1vcmUgbW91c2UgZXZlbnRzIGluIHF1ZXVlPyAqLworCQkJCVBlZWtDb25zb2xlSW5wdXQoZ19oQ29uSW4sICZpciwgMSwgJmNSZWNvcmRzKTsKKworCQkJCWlmIChjUmVjb3Jkcz09MCB8fCBpci5FdmVudFR5cGUgIT0gTU9VU0VfRVZFTlQpCisJCQkJICAgIGJyZWFrOworCQkJICAgIH0KKwkJCSAgICBlbHNlCisJCQkJYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKworCWlmIChzX2ZOZXh0SXNNaWRkbGUpCisJeworCSAgICBuQnV0dG9uID0gKHBtZXItPmR3RXZlbnRGbGFncyA9PSBNT1VTRV9NT1ZFRCkKKwkJPyBNT1VTRV9EUkFHIDogTU9VU0VfTUlERExFOworCSAgICBzX2ZOZXh0SXNNaWRkbGUgPSBGQUxTRTsKKwl9CisJZWxzZSBpZiAoY0J1dHRvbnMgPT0gMgkmJgorCSAgICAoKHBtZXItPmR3QnV0dG9uU3RhdGUgJiBMRUZUX1JJR0hUKSA9PSBMRUZUX1JJR0hUKSkKKwl7CisJICAgIG5CdXR0b24gPSBNT1VTRV9NSURETEU7CisKKwkgICAgaWYgKCEgc19mUmVsZWFzZWQgJiYgcG1lci0+ZHdFdmVudEZsYWdzICE9IE1PVVNFX01PVkVEKQorCSAgICB7CisJCXNfZk5leHRJc01pZGRsZSA9IFRSVUU7CisJCW5CdXR0b24gPSBNT1VTRV9SRUxFQVNFOworCSAgICB9CisJfQorCWVsc2UgaWYgKChwbWVyLT5kd0J1dHRvblN0YXRlICYgTEVGVCkgPT0gTEVGVCkKKwkgICAgbkJ1dHRvbiA9IE1PVVNFX0xFRlQ7CisJZWxzZSBpZiAoKHBtZXItPmR3QnV0dG9uU3RhdGUgJiBNSURETEUpID09IE1JRERMRSkKKwkgICAgbkJ1dHRvbiA9IE1PVVNFX01JRERMRTsKKwllbHNlIGlmICgocG1lci0+ZHdCdXR0b25TdGF0ZSAmIFJJR0hUKSA9PSBSSUdIVCkKKwkgICAgbkJ1dHRvbiA9IE1PVVNFX1JJR0hUOworCisJaWYgKCEgc19mUmVsZWFzZWQgJiYgISBzX2ZOZXh0SXNNaWRkbGUKKwkJJiYgbkJ1dHRvbiAhPSBzX25PbGRCdXR0b24gJiYgc19uT2xkQnV0dG9uICE9IE1PVVNFX0RSQUcpCisJICAgIHJldHVybiBGQUxTRTsKKworCXNfZlJlbGVhc2VkID0gc19mTmV4dElzTWlkZGxlOworICAgIH0KKworICAgIGlmIChwbWVyLT5kd0V2ZW50RmxhZ3MgPT0gMCB8fCBwbWVyLT5kd0V2ZW50RmxhZ3MgPT0gRE9VQkxFX0NMSUNLKQorICAgIHsKKwkvKiBidXR0b24gcHJlc3NlZCBvciByZWxlYXNlZCwgd2l0aG91dCBtb3VzZSBtb3ZpbmcgKi8KKwlpZiAobkJ1dHRvbiAhPSAtMSAmJiBuQnV0dG9uICE9IE1PVVNFX1JFTEVBU0UpCisJeworCSAgICBEV09SRCBkd0N1cnJlbnRUaW1lID0gR2V0VGlja0NvdW50KCk7CisKKwkgICAgaWYgKHNfeE9sZE1vdXNlICE9IGdfeE1vdXNlCisJCSAgICB8fCBzX3lPbGRNb3VzZSAhPSBnX3lNb3VzZQorCQkgICAgfHwgc19uT2xkQnV0dG9uICE9IG5CdXR0b24KKwkJICAgIHx8IHNfb2xkX3RvcGxpbmUgIT0gY3Vyd2luLT53X3RvcGxpbmUKKyNpZmRlZiBGRUFUX0RJRkYKKwkJICAgIHx8IHNfb2xkX3RvcGZpbGwgIT0gY3Vyd2luLT53X3RvcGZpbGwKKyNlbmRpZgorCQkgICAgfHwgKGludCkoZHdDdXJyZW50VGltZSAtIHNfZHdMYXN0Q2xpY2tUaW1lKSA+IHBfbW91c2V0KQorCSAgICB7CisJCXNfY0NsaWNrcyA9IDE7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKytzX2NDbGlja3MgPiA0KQorCSAgICB7CisJCXNfY0NsaWNrcyA9IDE7CisJICAgIH0KKworCSAgICBzX2R3TGFzdENsaWNrVGltZSA9IGR3Q3VycmVudFRpbWU7CisJfQorICAgIH0KKyAgICBlbHNlIGlmIChwbWVyLT5kd0V2ZW50RmxhZ3MgPT0gTU9VU0VfTU9WRUQpCisgICAgeworCWlmIChuQnV0dG9uICE9IC0xICYmIG5CdXR0b24gIT0gTU9VU0VfUkVMRUFTRSkKKwkgICAgbkJ1dHRvbiA9IE1PVVNFX0RSQUc7CisKKwlzX2NDbGlja3MgPSAxOworICAgIH0KKworICAgIGlmIChuQnV0dG9uID09IC0xKQorCXJldHVybiBGQUxTRTsKKworICAgIGlmIChuQnV0dG9uICE9IE1PVVNFX1JFTEVBU0UpCisJc19uT2xkQnV0dG9uID0gbkJ1dHRvbjsKKworICAgIGdfbk1vdXNlQ2xpY2sgPSBuQnV0dG9uOworCisgICAgaWYgKHBtZXItPmR3Q29udHJvbEtleVN0YXRlICYgU0hJRlRfUFJFU1NFRCkKKwlnX25Nb3VzZUNsaWNrIHw9IE1PVVNFX1NISUZUOworICAgIGlmIChwbWVyLT5kd0NvbnRyb2xLZXlTdGF0ZSAmIChSSUdIVF9DVFJMX1BSRVNTRUQgfCBMRUZUX0NUUkxfUFJFU1NFRCkpCisJZ19uTW91c2VDbGljayB8PSBNT1VTRV9DVFJMOworICAgIGlmIChwbWVyLT5kd0NvbnRyb2xLZXlTdGF0ZSAmIChSSUdIVF9BTFRfUFJFU1NFRCAgfCBMRUZUX0FMVF9QUkVTU0VEKSkKKwlnX25Nb3VzZUNsaWNrIHw9IE1PVVNFX0FMVDsKKworICAgIGlmIChuQnV0dG9uICE9IE1PVVNFX0RSQUcgJiYgbkJ1dHRvbiAhPSBNT1VTRV9SRUxFQVNFKQorCVNFVF9OVU1fTU9VU0VfQ0xJQ0tTKGdfbk1vdXNlQ2xpY2ssIHNfY0NsaWNrcyk7CisKKyAgICAvKiBvbmx5IHBhc3Mgb24gaW50ZXJlc3RpbmcgKGkuZS4sIGRpZmZlcmVudCkgbW91c2UgZXZlbnRzICovCisgICAgaWYgKHNfeE9sZE1vdXNlID09IGdfeE1vdXNlCisJICAgICYmIHNfeU9sZE1vdXNlID09IGdfeU1vdXNlCisJICAgICYmIHNfbk9sZE1vdXNlQ2xpY2sgPT0gZ19uTW91c2VDbGljaykKKyAgICB7CisJZ19uTW91c2VDbGljayA9IC0xOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzX3hPbGRNb3VzZSA9IGdfeE1vdXNlOworICAgIHNfeU9sZE1vdXNlID0gZ195TW91c2U7CisgICAgc19vbGRfdG9wbGluZSA9IGN1cndpbi0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfRElGRgorICAgIHNfb2xkX3RvcGZpbGwgPSBjdXJ3aW4tPndfdG9wZmlsbDsKKyNlbmRpZgorICAgIHNfbk9sZE1vdXNlQ2xpY2sgPSBnX25Nb3VzZUNsaWNrOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyMgZW5kaWYgLyogRkVBVF9HVUlfVzMyICovCisjZW5kaWYgLyogRkVBVF9NT1VTRSAqLworCisKKyNpZmRlZiBNQ0hfQ1VSU09SX1NIQVBFCisvKgorICogU2V0IHRoZSBzaGFwZSBvZiB0aGUgY3Vyc29yLgorICogJ3RoaWNrbmVzcycgY2FuIGJlIGZyb20gMSAodGhpbikgdG8gOTkgKGJsb2NrKQorICovCisgICAgc3RhdGljIHZvaWQKK21jaF9zZXRfY3Vyc29yX3NoYXBlKGludCB0aGlja25lc3MpCit7CisgICAgQ09OU09MRV9DVVJTT1JfSU5GTyBDb25zb2xlQ3Vyc29ySW5mbzsKKyAgICBDb25zb2xlQ3Vyc29ySW5mby5kd1NpemUgPSB0aGlja25lc3M7CisgICAgQ29uc29sZUN1cnNvckluZm8uYlZpc2libGUgPSBzX2N1cnNvcl92aXNpYmxlOworCisgICAgU2V0Q29uc29sZUN1cnNvckluZm8oZ19oQ29uT3V0LCAmQ29uc29sZUN1cnNvckluZm8pOworICAgIGlmIChzX2N1cnNvcl92aXNpYmxlKQorCVNldENvbnNvbGVDdXJzb3JQb3NpdGlvbihnX2hDb25PdXQsIGdfY29vcmQpOworfQorCisgICAgdm9pZAorbWNoX3VwZGF0ZV9jdXJzb3Iodm9pZCkKK3sKKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCXRoaWNrbmVzczsKKworICAgIC8qCisgICAgICogSG93IHRoZSBjdXJzb3IgaXMgZHJhd24gZGVwZW5kcyBvbiB0aGUgY3VycmVudCBtb2RlLgorICAgICAqLworICAgIGlkeCA9IGdldF9zaGFwZV9pZHgoRkFMU0UpOworCisgICAgaWYgKHNoYXBlX3RhYmxlW2lkeF0uc2hhcGUgPT0gU0hBUEVfQkxPQ0spCisJdGhpY2tuZXNzID0gOTk7CS8qIDEwMCBkb2Vzbid0IHdvcmsgb24gVzk1ICovCisgICAgZWxzZQorCXRoaWNrbmVzcyA9IHNoYXBlX3RhYmxlW2lkeF0ucGVyY2VudGFnZTsKKyAgICBtY2hfc2V0X2N1cnNvcl9zaGFwZSh0aGlja25lc3MpOworfQorI2VuZGlmCisKKyNpZm5kZWYgRkVBVF9HVUlfVzMyCSAgICAvKiB0aGlzIGlzbid0IHVzZWQgZm9yIHRoZSBHVUkgKi8KKy8qCisgKiBIYW5kbGUgRk9DVVNfRVZFTlQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraGFuZGxlX2ZvY3VzX2V2ZW50KElOUFVUX1JFQ09SRCBpcikKK3sKKyAgICBnX2ZKdXN0R290Rm9jdXMgPSBpci5FdmVudC5Gb2N1c0V2ZW50LmJTZXRGb2N1czsKKyAgICB1aV9mb2N1c19jaGFuZ2UoKGludClnX2ZKdXN0R290Rm9jdXMpOworfQorCisvKgorICogV2FpdCB1bnRpbCBjb25zb2xlIGlucHV0IGZyb20ga2V5Ym9hcmQgb3IgbW91c2UgaXMgYXZhaWxhYmxlLAorICogb3IgdGhlIHRpbWUgaXMgdXAuCisgKiBSZXR1cm4gVFJVRSBpZiBzb21ldGhpbmcgaXMgYXZhaWxhYmxlIEZBTFNFIGlmIG5vdC4KKyAqLworICAgIHN0YXRpYyBpbnQKK1dhaXRGb3JDaGFyKGxvbmcgbXNlYykKK3sKKyAgICBEV09SRAkgICAgZHdOb3cgPSAwLCBkd0VuZFRpbWUgPSAwOworICAgIElOUFVUX1JFQ09SRCAgICBpcjsKKyAgICBEV09SRAkgICAgY1JlY29yZHM7CisgICAgY2hhcl91CSAgICBjaCwgY2gyOworCisgICAgaWYgKG1zZWMgPiAwKQorCS8qIFdhaXQgdW50aWwgdGhlIHNwZWNpZmllZCB0aW1lIGhhcyBlbGFwc2VkLiAqLworCWR3RW5kVGltZSA9IEdldFRpY2tDb3VudCgpICsgbXNlYzsKKyAgICBlbHNlIGlmIChtc2VjIDwgMCkKKwkvKiBXYWl0IGZvcmV2ZXIuICovCisJZHdFbmRUaW1lID0gSU5GSU5JVEU7CisKKyAgICAvKiBXZSBuZWVkIHRvIGxvb3AgdW50aWwgdGhlIGVuZCBvZiB0aGUgdGltZSBwZXJpb2QsIGJlY2F1c2UKKyAgICAgKiB3ZSBtaWdodCBnZXQgbXVsdGlwbGUgdW51c2FibGUgbW91c2UgZXZlbnRzIGluIHRoYXQgdGltZS4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorCXNlcnZlclByb2Nlc3NQZW5kaW5nTWVzc2FnZXMoKTsKKyNlbmRpZgorCWlmICgwCisjaWZkZWYgRkVBVF9NT1VTRQorCQl8fCBnX25Nb3VzZUNsaWNrICE9IC0xCisjZW5kaWYKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorCQl8fCBpbnB1dF9hdmFpbGFibGUoKQorI2VuZGlmCisJICAgKQorCSAgICByZXR1cm4gVFJVRTsKKworCWlmIChtc2VjID4gMCkKKwl7CisJICAgIC8qIElmIHRoZSBzcGVjaWZpZWQgd2FpdCB0aW1lIGhhcyBwYXNzZWQsIHJldHVybi4gKi8KKwkgICAgZHdOb3cgPSBHZXRUaWNrQ291bnQoKTsKKwkgICAgaWYgKGR3Tm93ID49IGR3RW5kVGltZSkKKwkJYnJlYWs7CisJfQorCWlmIChtc2VjICE9IDApCisJeworI2lmZGVmIEZFQVRfQ0xJRU5UU0VSVkVSCisJICAgIC8qIFdhaXQgZm9yIGVpdGhlciBhbiBldmVudCBvbiB0aGUgY29uc29sZSBpbnB1dCBvciBhIG1lc3NhZ2UgaW4KKwkgICAgICogdGhlIGNsaWVudC1zZXJ2ZXIgd2luZG93LiAqLworCSAgICBpZiAoTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0cygxLCAmZ19oQ29uSW4sIEZBTFNFLAorCQkJICBkd0VuZFRpbWUgLSBkd05vdywgUVNfU0VORE1FU1NBR0UpICE9IFdBSVRfT0JKRUNUXzApCisjZWxzZQorCSAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdChnX2hDb25JbiwgZHdFbmRUaW1lIC0gZHdOb3cpCisJCQkJCQkJICAgICAhPSBXQUlUX09CSkVDVF8wKQorI2VuZGlmCisJCSAgICBjb250aW51ZTsKKwl9CisKKwljUmVjb3JkcyA9IDA7CisJUGVla0NvbnNvbGVJbnB1dChnX2hDb25JbiwgJmlyLCAxLCAmY1JlY29yZHMpOworCisjaWZkZWYgRkVBVF9NQllURV9JTUUKKwlpZiAoU3RhdGUgJiBDTURMSU5FICYmIG1zZ19yb3cgPT0gUm93cyAtIDEpCisJeworCSAgICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBjc2JpOworCisJICAgIGlmIChHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhnX2hDb25PdXQsICZjc2JpKSkKKwkgICAgeworCQlpZiAoY3NiaS5kd0N1cnNvclBvc2l0aW9uLlkgIT0gbXNnX3JvdykKKwkJeworCQkgICAgLyogVGhlIHNjcmVlbiBpcyBub3cgbWVzc2VkIHVwLCBtdXN0IHJlZHJhdyB0aGUKKwkJICAgICAqIGNvbW1hbmQgbGluZSBhbmQgbGF0ZXIgYWxsIHRoZSB3aW5kb3dzLiAqLworCQkgICAgcmVkcmF3X2FsbF9sYXRlcihDTEVBUik7CisJCSAgICBjbWRsaW5lX3JvdyAtPSAobXNnX3JvdyAtIGNzYmkuZHdDdXJzb3JQb3NpdGlvbi5ZKTsKKwkJICAgIHJlZHJhd2NtZCgpOworCQl9CisJICAgIH0KKwl9CisjZW5kaWYKKworCWlmIChjUmVjb3JkcyA+IDApCisJeworCSAgICBpZiAoaXIuRXZlbnRUeXBlID09IEtFWV9FVkVOVCAmJiBpci5FdmVudC5LZXlFdmVudC5iS2V5RG93bikKKwkgICAgeworI2lmZGVmIEZFQVRfTUJZVEVfSU1FCisJCS8qIFdpbmRvd3MgSU1FIHNlbmRzIHR3byAnXG4ncyB3aXRoIG9ubHkgb25lICdFTlRFUicuICBGaXJzdDoKKwkJICogd1ZpcnR1YWxLZXlDb2RlID09IDEzLiBzZWNvbmQ6IHdWaXJ0dWFsS2V5Q29kZSA9PSAwICovCisJCWlmIChpci5FdmVudC5LZXlFdmVudC51Q2hhci5Vbmljb2RlQ2hhciA9PSAwCisJCQkmJiBpci5FdmVudC5LZXlFdmVudC53VmlydHVhbEtleUNvZGUgPT0gMTMpCisJCXsKKwkJICAgIFJlYWRDb25zb2xlSW5wdXQoZ19oQ29uSW4sICZpciwgMSwgJmNSZWNvcmRzKTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisjZW5kaWYKKwkJaWYgKGRlY29kZV9rZXlfZXZlbnQoJmlyLkV2ZW50LktleUV2ZW50LCAmY2gsICZjaDIsCisJCQkJCQkJCSBOVUxMLCBGQUxTRSkpCisJCSAgICByZXR1cm4gVFJVRTsKKwkgICAgfQorCisJICAgIFJlYWRDb25zb2xlSW5wdXQoZ19oQ29uSW4sICZpciwgMSwgJmNSZWNvcmRzKTsKKworCSAgICBpZiAoaXIuRXZlbnRUeXBlID09IEZPQ1VTX0VWRU5UKQorCQloYW5kbGVfZm9jdXNfZXZlbnQoaXIpOworCSAgICBlbHNlIGlmIChpci5FdmVudFR5cGUgPT0gV0lORE9XX0JVRkZFUl9TSVpFX0VWRU5UKQorCQlzaGVsbF9yZXNpemVkKCk7CisjaWZkZWYgRkVBVF9NT1VTRQorCSAgICBlbHNlIGlmIChpci5FdmVudFR5cGUgPT0gTU9VU0VfRVZFTlQKKwkJICAgICYmIGRlY29kZV9tb3VzZV9ldmVudCgmaXIuRXZlbnQuTW91c2VFdmVudCkpCisJCXJldHVybiBUUlVFOworI2VuZGlmCisJfQorCWVsc2UgaWYgKG1zZWMgPT0gMCkKKwkgICAgYnJlYWs7CisgICAgfQorCisjaWZkZWYgRkVBVF9DTElFTlRTRVJWRVIKKyAgICAvKiBTb21ldGhpbmcgbWlnaHQgaGF2ZSBiZWVuIHJlY2VpdmVkIHdoaWxlIHdlIHdlcmUgd2FpdGluZy4gKi8KKyAgICBpZiAoaW5wdXRfYXZhaWxhYmxlKCkpCisJcmV0dXJuIFRSVUU7CisjZW5kaWYKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZm5kZWYgRkVBVF9HVUlfTVNXSU4KKy8qCisgKiByZXR1cm4gbm9uLXplcm8gaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlCisgKi8KKyAgICBpbnQKK21jaF9jaGFyX2F2YWlsKCkKK3sKKyAgICByZXR1cm4gV2FpdEZvckNoYXIoMEwpOworfQorI2VuZGlmCisKKy8qCisgKiBDcmVhdGUgdGhlIGNvbnNvbGUgaW5wdXQuICBVc2VkIHdoZW4gcmVhZGluZyBzdGRpbiBkb2Vzbid0IHdvcmsuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY3JlYXRlX2NvbmluKHZvaWQpCit7CisgICAgZ19oQ29uSW4gPQlDcmVhdGVGaWxlKCJDT05JTiQiLCBHRU5FUklDX1JFQUR8R0VORVJJQ19XUklURSwKKwkJCUZJTEVfU0hBUkVfUkVBRHxGSUxFX1NIQVJFX1dSSVRFLAorCQkJKExQU0VDVVJJVFlfQVRUUklCVVRFUykgTlVMTCwKKwkJCU9QRU5fRVhJU1RJTkcsIChEV09SRClOVUxMLCAoSEFORExFKU5VTEwpOworICAgIGRpZF9jcmVhdGVfY29uaW4gPSBUUlVFOworfQorCisvKgorICogR2V0IGEga2V5c3Ryb2tlIG9yIGEgbW91c2UgZXZlbnQKKyAqLworICAgIHN0YXRpYyBjaGFyX3UKK3RnZXRjaChpbnQgKnBtb2RpZmllcnMsIGNoYXJfdSAqcGNoMikKK3sKKyAgICBjaGFyX3UgY2g7CisKKyAgICBmb3IgKDs7KQorICAgIHsKKwlJTlBVVF9SRUNPUkQgaXI7CisJRFdPUkQgY1JlY29yZHMgPSAwOworCisjaWZkZWYgRkVBVF9DTElFTlRTRVJWRVIKKwkodm9pZClXYWl0Rm9yQ2hhcigtMUwpOworCWlmIChpbnB1dF9hdmFpbGFibGUoKSkKKwkgICAgcmV0dXJuIDA7CisjIGlmZGVmIEZFQVRfTU9VU0UKKwlpZiAoZ19uTW91c2VDbGljayAhPSAtMSkKKwkgICAgcmV0dXJuIDA7CisjIGVuZGlmCisjZW5kaWYKKwlpZiAoUmVhZENvbnNvbGVJbnB1dChnX2hDb25JbiwgJmlyLCAxLCAmY1JlY29yZHMpID09IDApCisJeworCSAgICBpZiAoZGlkX2NyZWF0ZV9jb25pbikKKwkJcmVhZF9lcnJvcl9leGl0KCk7CisJICAgIGNyZWF0ZV9jb25pbigpOworCSAgICBjb250aW51ZTsKKwl9CisKKwlpZiAoaXIuRXZlbnRUeXBlID09IEtFWV9FVkVOVCkKKwl7CisJICAgIGlmIChkZWNvZGVfa2V5X2V2ZW50KCZpci5FdmVudC5LZXlFdmVudCwgJmNoLCBwY2gyLAorCQkJCQkJCSAgICBwbW9kaWZpZXJzLCBUUlVFKSkKKwkJcmV0dXJuIGNoOworCX0KKwllbHNlIGlmIChpci5FdmVudFR5cGUgPT0gRk9DVVNfRVZFTlQpCisJICAgIGhhbmRsZV9mb2N1c19ldmVudChpcik7CisJZWxzZSBpZiAoaXIuRXZlbnRUeXBlID09IFdJTkRPV19CVUZGRVJfU0laRV9FVkVOVCkKKwkgICAgc2hlbGxfcmVzaXplZCgpOworI2lmZGVmIEZFQVRfTU9VU0UKKwllbHNlIGlmIChpci5FdmVudFR5cGUgPT0gTU9VU0VfRVZFTlQpCisJeworCSAgICBpZiAoZGVjb2RlX21vdXNlX2V2ZW50KCZpci5FdmVudC5Nb3VzZUV2ZW50KSkKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisgICAgfQorfQorI2VuZGlmIC8qICFGRUFUX0dVSV9XMzIgKi8KKworCisvKgorICogbWNoX2luY2hhcigpOiBsb3ctbGV2ZWwgaW5wdXQgZnVuY2lvbi4KKyAqIEdldCBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGZyb20gdGhlIGtleWJvYXJkIG9yIHRoZSBtb3VzZS4KKyAqIElmIHRpbWUgPT0gMCwgZG8gbm90IHdhaXQgZm9yIGNoYXJhY3RlcnMuCisgKiBJZiB0aW1lID09IG4sIHdhaXQgYSBzaG9ydCB0aW1lIGZvciBjaGFyYWN0ZXJzLgorICogSWYgdGltZSA9PSAtMSwgd2FpdCBmb3JldmVyIGZvciBjaGFyYWN0ZXJzLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIGJ1Zi4KKyAqLworICAgIGludAorbWNoX2luY2hhcigKKyAgICBjaGFyX3UJKmJ1ZiwKKyAgICBpbnQJCW1heGxlbiwKKyAgICBsb25nCXRpbWUsCisgICAgaW50CQl0Yl9jaGFuZ2VfY250KQoreworI2lmbmRlZiBGRUFUX0dVSV9XMzIJICAgIC8qIHRoaXMgaXNuJ3QgdXNlZCBmb3IgdGhlIEdVSSAqLworCisgICAgaW50CQlsZW47CisgICAgaW50CQljOworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIHN0YXRpYyBpbnQJb25jZV9hbHJlYWR5ID0gMDsKKyNlbmRpZgorI2RlZmluZSBUWVBFQUhFQURMRU4gMjAKKyAgICBzdGF0aWMgY2hhcl91ICAgdHlwZWFoZWFkW1RZUEVBSEVBRExFTl07CS8qIHByZXZpb3VzbHkgdHlwZWQgYnl0ZXMuICovCisgICAgc3RhdGljIGludAkgICAgdHlwZWFoZWFkbGVuID0gMDsKKworICAgIC8qIEZpcnN0IHVzZSBhbnkgdHlwZWFoZWFkIHRoYXQgd2FzIGtlcHQgYmVjYXVzZSAiYnVmIiB3YXMgdG9vIHNtYWxsLiAqLworICAgIGlmICh0eXBlYWhlYWRsZW4gPiAwKQorCWdvdG8gdGhlZW5kOworCisjaWZkZWYgRkVBVF9TTklGRgorICAgIGlmICh3YW50X3NuaWZmX3JlcXVlc3QpCisgICAgeworCWlmIChzbmlmZl9yZXF1ZXN0X3dhaXRpbmcpCisJeworCSAgICAvKiByZXR1cm4gS19TTklGRiAqLworCSAgICB0eXBlYWhlYWRbdHlwZWFoZWFkbGVuKytdID0gQ1NJOworCSAgICB0eXBlYWhlYWRbdHlwZWFoZWFkbGVuKytdID0gKGNoYXJfdSlLU19FWFRSQTsKKwkgICAgdHlwZWFoZWFkW3R5cGVhaGVhZGxlbisrXSA9IChjaGFyX3UpS0VfU05JRkY7CisJICAgIHNuaWZmX3JlcXVlc3Rfd2FpdGluZyA9IDA7CisJICAgIHdhbnRfc25pZmZfcmVxdWVzdCA9IDA7CisJICAgIGdvdG8gdGhlZW5kOworCX0KKwllbHNlIGlmICh0aW1lIDwgMCB8fCB0aW1lID4gMjUwKQorCXsKKwkgICAgLyogZG9uJ3Qgd2FpdCB0b28gbG9uZywgYSByZXF1ZXN0IG1pZ2h0IGJlIHBlbmRpbmcgKi8KKwkgICAgdGltZSA9IDI1MDsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAodGltZSA+PSAwKQorICAgIHsKKwlpZiAoIVdhaXRGb3JDaGFyKHRpbWUpKSAgICAgLyogbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworCXsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkgICAgb25jZV9hbHJlYWR5ID0gMDsKKyNlbmRpZgorCSAgICByZXR1cm4gMDsKKwl9CisgICAgfQorICAgIGVsc2UgICAgLyogdGltZSA9PSAtMSwgd2FpdCBmb3JldmVyICovCisgICAgeworCW1jaF9zZXRfd2luc2l6ZV9ub3coKTsJLyogQWxsb3cgd2luc2l6ZSBjaGFuZ2VzIGZyb20gbm93IG9uICovCisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkvKiBJZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXZhaWxhYmxlIHdpdGhpbiAyIHNlY29uZHMgKGRlZmF1bHQpLAorCSAqIHdyaXRlIHRoZSBhdXRvc2NyaXB0IGZpbGUgdG8gZGlzayAqLworCWlmIChvbmNlX2FscmVhZHkgPT0gMikKKwkgICAgdXBkYXRlc2NyaXB0KDApOworCWVsc2UgaWYgKG9uY2VfYWxyZWFkeSA9PSAxKQorCXsKKwkgICAgc2V0Y3Vyc29yKCk7CisJICAgIG9uY2VfYWxyZWFkeSA9IDI7CisJICAgIHJldHVybiAwOworCX0KKwllbHNlCisjZW5kaWYKKwkgICAgaWYgKCFXYWl0Rm9yQ2hhcihwX3V0KSkKKwl7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJICAgIGlmIChoYXNfY3Vyc29yaG9sZCgpICYmIGdldF9yZWFsX3N0YXRlKCkgPT0gTk9STUFMX0JVU1kpCisJICAgIHsKKwkJYXBwbHlfYXV0b2NtZHMoRVZFTlRfQ1VSU09SSE9MRCwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisJCXVwZGF0ZV9zY3JlZW4oVkFMSUQpOworCQlvbmNlX2FscmVhZHkgPSAxOworCQlyZXR1cm4gMDsKKwkgICAgfQorI2VuZGlmCisJICAgIHVwZGF0ZXNjcmlwdCgwKTsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUcnkgdG8gcmVhZCBhcyBtYW55IGNoYXJhY3RlcnMgYXMgdGhlcmUgYXJlLCB1bnRpbCB0aGUgYnVmZmVyIGlzIGZ1bGwuCisgICAgICovCisKKyAgICAvKiB3ZSB3aWxsIGdldCBhdCBsZWFzdCBvbmUga2V5LiBHZXQgbW9yZSBpZiB0aGV5IGFyZSBhdmFpbGFibGUuICovCisgICAgZ19mQ0Jya1ByZXNzZWQgPSBGQUxTRTsKKworI2lmZGVmIE1DSF9XUklURV9EVU1QCisgICAgaWYgKGZkRHVtcCkKKwlmcHV0YygnWycsIGZkRHVtcCk7CisjZW5kaWYKKworICAgIC8qIEtlZXAgbG9vcGluZyB1bnRpbCB0aGVyZSBpcyBzb21ldGhpbmcgaW4gdGhlIHR5cGVhaGVhZCBidWZmZXIgYW5kIG1vcmUKKyAgICAgKiB0byBnZXQgYW5kIHN0aWxsIHJvb20gaW4gdGhlIGJ1ZmZlciAodXAgdG8gdHdvIGJ5dGVzIGZvciBhIGNoYXIgYW5kCisgICAgICogdGhyZWUgYnl0ZXMgZm9yIGEgbW9kaWZpZXIpLiAqLworICAgIHdoaWxlICgodHlwZWFoZWFkbGVuID09IDAgfHwgV2FpdEZvckNoYXIoMEwpKQorCQkJCQkgICYmIHR5cGVhaGVhZGxlbiArIDUgPD0gVFlQRUFIRUFETEVOKQorICAgIHsKKwlpZiAodHlwZWJ1Zl9jaGFuZ2VkKHRiX2NoYW5nZV9jbnQpKQorCXsKKwkgICAgLyogImJ1ZiIgbWF5IGJlIGludmFsaWQgbm93IGlmIGEgY2xpZW50IHB1dCBzb21ldGhpbmcgaW4gdGhlCisJICAgICAqIHR5cGVhaGVhZCBidWZmZXIgYW5kICJidWYiIGlzIGluIHRoZSB0eXBlYWhlYWQgYnVmZmVyLiAqLworCSAgICB0eXBlYWhlYWRsZW4gPSAwOworCSAgICBicmVhazsKKwl9CisjaWZkZWYgRkVBVF9NT1VTRQorCWlmIChnX25Nb3VzZUNsaWNrICE9IC0xKQorCXsKKyMgaWZkZWYgTUNIX1dSSVRFX0RVTVAKKwkgICAgaWYgKGZkRHVtcCkKKwkJZnByaW50ZihmZER1bXAsICJ7JTAyeCBAICVkLCAlZH0iLAorCQkJZ19uTW91c2VDbGljaywgZ194TW91c2UsIGdfeU1vdXNlKTsKKyMgZW5kaWYKKwkgICAgdHlwZWFoZWFkW3R5cGVhaGVhZGxlbisrXSA9IEVTQyArIDEyODsKKwkgICAgdHlwZWFoZWFkW3R5cGVhaGVhZGxlbisrXSA9ICdNJzsKKwkgICAgdHlwZWFoZWFkW3R5cGVhaGVhZGxlbisrXSA9IGdfbk1vdXNlQ2xpY2s7CisJICAgIHR5cGVhaGVhZFt0eXBlYWhlYWRsZW4rK10gPSBnX3hNb3VzZSArICchJzsKKwkgICAgdHlwZWFoZWFkW3R5cGVhaGVhZGxlbisrXSA9IGdfeU1vdXNlICsgJyEnOworCSAgICBnX25Nb3VzZUNsaWNrID0gLTE7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgY2hhcl91CWNoMiA9IE5VTDsKKwkgICAgaW50CQltb2RpZmllcnMgPSAwOworCisJICAgIGMgPSB0Z2V0Y2goJm1vZGlmaWVycywgJmNoMik7CisKKwkgICAgaWYgKHR5cGVidWZfY2hhbmdlZCh0Yl9jaGFuZ2VfY250KSkKKwkgICAgeworCQkvKiAiYnVmIiBtYXkgYmUgaW52YWxpZCBub3cgaWYgYSBjbGllbnQgcHV0IHNvbWV0aGluZyBpbiB0aGUKKwkJICogdHlwZWFoZWFkIGJ1ZmZlciBhbmQgImJ1ZiIgaXMgaW4gdGhlIHR5cGVhaGVhZCBidWZmZXIuICovCisJCXR5cGVhaGVhZGxlbiA9IDA7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgaWYgKGMgPT0gQ3RybF9DICYmIGN0cmxfY19pbnRlcnJ1cHRzKQorCSAgICB7CisjaWYgZGVmaW5lZChGRUFUX0NMSUVOVFNFUlZFUikKKwkJdHJhc2hfaW5wdXRfYnVmKCk7CisjZW5kaWYKKwkJZ290X2ludCA9IFRSVUU7CisJICAgIH0KKworI2lmZGVmIEZFQVRfTU9VU0UKKwkgICAgaWYgKGdfbk1vdXNlQ2xpY2sgPT0gLTEpCisjZW5kaWYKKwkgICAgeworCQlpbnQJbiA9IDE7CisKKwkJLyogQSBrZXkgbWF5IGhhdmUgb25lIG9yIHR3byBieXRlcy4gKi8KKwkJdHlwZWFoZWFkW3R5cGVhaGVhZGxlbl0gPSBjOworCQlpZiAoY2gyICE9IE5VTCkKKwkJeworCQkgICAgdHlwZWFoZWFkW3R5cGVhaGVhZGxlbiArIDFdID0gY2gyOworCQkgICAgKytuOworCQl9CisjaWZkZWYgRkVBVF9NQllURQorCQkvKiBPbmx5IGNvbnZlcnQgbm9ybWFsIGNoYXJhY3RlcnMsIG5vdCBzcGVjaWFsIGtleXMuICBOZWVkIHRvCisJCSAqIGNvbnZlcnQgYmVmb3JlIGFwcGx5aW5nIEFMVCwgb3RoZXJ3aXNlIG1hcHBpbmcgPE0teD4gYnJlYWtzCisJCSAqIHdoZW4gJ3RlbmMnIGlzIHNldC4gKi8KKwkJaWYgKGlucHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUKKwkJCQkJCSYmIChjaDIgPT0gTlVMIHx8IGMgIT0gS19OVUwpKQorCQkgICAgbiA9IGNvbnZlcnRfaW5wdXQodHlwZWFoZWFkICsgdHlwZWFoZWFkbGVuLCBuLAorCQkJCQkJIFRZUEVBSEVBRExFTiAtIHR5cGVhaGVhZGxlbik7CisjZW5kaWYKKworCQkvKiBVc2UgdGhlIEFMVCBrZXkgdG8gc2V0IHRoZSA4dGggYml0IG9mIHRoZSBjaGFyYWN0ZXIKKwkJICogd2hlbiBpdCdzIG9uZSBieXRlLCB0aGUgOHRoIGJpdCBpc24ndCBzZXQgeWV0IGFuZCBub3QKKwkJICogdXNpbmcgYSBkb3VibGUtYnl0ZSBlbmNvZGluZyAod291bGQgYmVjb21lIGEgbGVhZAorCQkgKiBieXRlKS4gKi8KKwkJaWYgKChtb2RpZmllcnMgJiBNT0RfTUFTS19BTFQpCisJCQkmJiBuID09IDEKKwkJCSYmICh0eXBlYWhlYWRbdHlwZWFoZWFkbGVuXSAmIDB4ODApID09IDAKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkmJiAhZW5jX2RiY3MKKyNlbmRpZgorCQkgICApCisJCXsKKwkJICAgIHR5cGVhaGVhZFt0eXBlYWhlYWRsZW5dIHw9IDB4ODA7CisJCSAgICBtb2RpZmllcnMgJj0gfk1PRF9NQVNLX0FMVDsKKwkJfQorCisJCWlmIChtb2RpZmllcnMgIT0gMCkKKwkJeworCQkgICAgLyogUHJlcGVuZCBtb2RpZmllcnMgdG8gdGhlIGNoYXJhY3Rlci4gKi8KKwkJICAgIG1jaF9tZW1tb3ZlKHR5cGVhaGVhZCArIHR5cGVhaGVhZGxlbiArIDMsCisJCQkJCQkgdHlwZWFoZWFkICsgdHlwZWFoZWFkbGVuLCBuKTsKKwkJICAgIHR5cGVhaGVhZFt0eXBlYWhlYWRsZW4rK10gPSBLX1NQRUNJQUw7CisJCSAgICB0eXBlYWhlYWRbdHlwZWFoZWFkbGVuKytdID0gKGNoYXJfdSlLU19NT0RJRklFUjsKKwkJICAgIHR5cGVhaGVhZFt0eXBlYWhlYWRsZW4rK10gPSAgbW9kaWZpZXJzOworCQl9CisKKwkJdHlwZWFoZWFkbGVuICs9IG47CisKKyNpZmRlZiBNQ0hfV1JJVEVfRFVNUAorCQlpZiAoZmREdW1wKQorCQkgICAgZnB1dGMoYywgZmREdW1wKTsKKyNlbmRpZgorCSAgICB9CisJfQorICAgIH0KKworI2lmZGVmIE1DSF9XUklURV9EVU1QCisgICAgaWYgKGZkRHVtcCkKKyAgICB7CisJZnB1dHMoIl1cbiIsIGZkRHVtcCk7CisJZmZsdXNoKGZkRHVtcCk7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBvbmNlX2FscmVhZHkgPSAwOworI2VuZGlmCisKK3RoZWVuZDoKKyAgICAvKiBNb3ZlIHR5cGVhaGVhZCB0byAiYnVmIiwgYXMgbXVjaCBhcyBmaXRzLiAqLworICAgIGxlbiA9IDA7CisgICAgd2hpbGUgKGxlbiA8IG1heGxlbiAmJiB0eXBlYWhlYWRsZW4gPiAwKQorICAgIHsKKwlidWZbbGVuKytdID0gdHlwZWFoZWFkWzBdOworCW1jaF9tZW1tb3ZlKHR5cGVhaGVhZCwgdHlwZWFoZWFkICsgMSwgLS10eXBlYWhlYWRsZW4pOworICAgIH0KKyAgICByZXR1cm4gbGVuOworCisjZWxzZSAvKiBGRUFUX0dVSV9XMzIgKi8KKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBGRUFUX0dVSV9XMzIgKi8KK30KKworI2lmbmRlZiBfX01JTkdXMzJfXworIyBpbmNsdWRlIDxzaGVsbGFwaS5oPgkvKiByZXF1aXJlZCBmb3IgRmluZEV4ZWN1dGFibGUoKSAqLworI2VuZGlmCisKKyAgICBzdGF0aWMgaW50CitleGVjdXRhYmxlX2V4aXN0cyhjaGFyICpuYW1lKQoreworICAgIGNoYXIgbG9jYXRpb25bMiAqIF9NQVhfUEFUSCArIDJdOworICAgIGNoYXIgd2lkZW5hbWVbMiAqIF9NQVhfUEFUSF07CisKKyAgICAvKiBUaGVyZSBhcHBlYXJzIHRvIGJlIGEgYnVnIGluIEZpbmRFeGVjdXRhYmxlQSgpIG9uIFdpbmRvd3MgTlQuCisgICAgICogVXNlIEZpbmRFeGVjdXRhYmxlVygpIGluc3RlYWQuLi4gKi8KKyAgICBpZiAoZ19QbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVCkKKyAgICB7CisJTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsIDAsIChMUENUU1RSKW5hbWUsIC0xLAorCQkJCQkJIChMUFdTVFIpd2lkZW5hbWUsIF9NQVhfUEFUSCk7CisJaWYgKEZpbmRFeGVjdXRhYmxlVygoTFBDV1NUUil3aWRlbmFtZSwgKExQQ1dTVFIpIiIsCisJCQkJCSAgICAoTFBXU1RSKWxvY2F0aW9uKSA+IChISU5TVEFOQ0UpMzIpCisJICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmIChGaW5kRXhlY3V0YWJsZUEoKExQQ1RTVFIpbmFtZSwgKExQQ1RTVFIpIiIsCisJCQkJCSAgICAoTFBUU1RSKWxvY2F0aW9uKSA+IChISU5TVEFOQ0UpMzIpCisJICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZmRlZiBGRUFUX0dVSV9XMzIKKworLyoKKyAqIEdVSSB2ZXJzaW9uIG9mIG1jaF9pbml0KCkuCisgKi8KKyAgICB2b2lkCittY2hfaW5pdCgpCit7CisjaWZuZGVmIF9fTUlOR1czMl9fCisgICAgZXh0ZXJuIGludCBfZm1vZGU7CisjZW5kaWYKKworICAgIC8qIExldCBjcml0aWNhbCBlcnJvcnMgcmVzdWx0IGluIGEgZmFpbHVyZSwgbm90IGluIGEgZGlhbG9nIGJveC4gIFJlcXVpcmVkCisgICAgICogZm9yIHRoZSB0aW1lc3RhbXAgdGVzdCB0byB3b3JrIG9uIHJlbW92ZWQgZmxvcHBpZXMuICovCisgICAgU2V0RXJyb3JNb2RlKFNFTV9GQUlMQ1JJVElDQUxFUlJPUlMpOworCisgICAgX2Ztb2RlID0gT19CSU5BUlk7CQkvKiB3ZSBkbyBvdXIgb3duIENSLUxGIHRyYW5zbGF0aW9uICovCisKKyAgICAvKiBTcGVjaWZ5IHdpbmRvdyBzaXplLiAgSXMgdGhlcmUgYSBwbGFjZSB0byBnZXQgdGhlIGRlZmF1bHQgZnJvbT8gKi8KKyAgICBSb3dzID0gMjU7CisgICAgQ29sdW1ucyA9IDgwOworCisgICAgLyogTG9vayBmb3IgJ3ZpbXJ1bicgKi8KKyAgICBpZiAoIWd1aV9pc193aW4zMnMoKSkKKyAgICB7CisJY2hhcl91IHZpbXJ1bl9sb2NhdGlvbltfTUFYX1BBVEggKyA0XTsKKworCS8qIEZpcnN0IHRyeSBpbiBzYW1lIGRpcmVjdG9yeSBhcyBndmltLmV4ZSAqLworCVNUUkNQWSh2aW1ydW5fbG9jYXRpb24sIGV4ZV9uYW1lKTsKKwlTVFJDUFkoZ2V0dGFpbCh2aW1ydW5fbG9jYXRpb24pLCAidmltcnVuLmV4ZSIpOworCWlmIChtY2hfZ2V0cGVybSh2aW1ydW5fbG9jYXRpb24pID49IDApCisJeworCSAgICBpZiAoKnNraXB0b3doaXRlKHZpbXJ1bl9sb2NhdGlvbikgIT0gTlVMKQorCSAgICB7CisJCS8qIEVuY2xvc2UgcGF0aCB3aXRoIHdoaXRlIHNwYWNlIGluIGRvdWJsZSBxdW90ZXMuICovCisJCW1jaF9tZW1tb3ZlKHZpbXJ1bl9sb2NhdGlvbiArIDEsIHZpbXJ1bl9sb2NhdGlvbiwKKwkJCQkJCSBTVFJMRU4odmltcnVuX2xvY2F0aW9uKSArIDEpOworCQkqdmltcnVuX2xvY2F0aW9uID0gJyInOworCQlTVFJDUFkoZ2V0dGFpbCh2aW1ydW5fbG9jYXRpb24pLCAidmltcnVuXCIgIik7CisJICAgIH0KKwkgICAgZWxzZQorCQlTVFJDUFkoZ2V0dGFpbCh2aW1ydW5fbG9jYXRpb24pLCAidmltcnVuICIpOworCisJICAgIHZpbXJ1bl9wYXRoID0gKGNoYXIgKil2aW1fc3Ryc2F2ZSh2aW1ydW5fbG9jYXRpb24pOworCSAgICBzX2RvbnRfdXNlX3ZpbXJ1biA9IEZBTFNFOworCX0KKwllbHNlIGlmIChleGVjdXRhYmxlX2V4aXN0cygidmltcnVuLmV4ZSIpKQorCSAgICBzX2RvbnRfdXNlX3ZpbXJ1biA9IEZBTFNFOworCisJLyogRG9uJ3QgZ2l2ZSB0aGUgd2FybmluZyBmb3IgYSBtaXNzaW5nIHZpbXJ1bi5leGUgcmlnaHQgbm93LCBidXQgb25seQorCSAqIHdoZW4gdmltcnVuIHdhcyBzdXBwb3NlZCB0byBiZSB1c2VkLiAgRG9uJ3QgYm90aGVyIHBlb3BsZSB0aGF0IGRvCisJICogbm90IG5lZWQgdmltcnVuLmV4ZS4gKi8KKwlpZiAoc19kb250X3VzZV92aW1ydW4pCisJICAgIG5lZWRfdmltcnVuX3dhcm5pbmcgPSBUUlVFOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgImZpbnN0ci5leGUiIGRvZXNuJ3QgZXhpc3QsIHVzZSAiZ3JlcCAtbiIgZm9yICdncmVwcHJnJy4KKyAgICAgKiBPdGhlcndpc2UgdGhlIGRlZmF1bHQgImZpbmRzdHIgL24iIGlzIHVzZWQuCisgICAgICovCisgICAgaWYgKCFleGVjdXRhYmxlX2V4aXN0cygiZmluZHN0ci5leGUiKSkKKwlzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikiZ3JlcHByZyIsIDAsIChjaGFyX3UgKikiZ3JlcCAtbiIsIDApOworCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKyAgICBjbGlwX2luaXQoVFJVRSk7CisKKyAgICAvKgorICAgICAqIFZpbSdzIG93biBjbGlwYm9hcmQgZm9ybWF0IHJlY29nbmlzZXMgd2hldGhlciB0aGUgdGV4dCBpcyBjaGFyLCBsaW5lLCBvcgorICAgICAqIHJlY3Rhbmd1bGFyIGJsb2NrLiAgT25seSB1c2VmdWwgZm9yIGNvcHlpbmcgYmV0d2VlbiB0d28gVmltcy4KKyAgICAgKiAiVmltQ2xpcGJvYXJkIiB3YXMgdXNlZCBmb3IgcHJldmlvdXMgdmVyc2lvbnMsIHVzaW5nIHRoZSBmaXJzdAorICAgICAqIGNoYXJhY3RlciB0byBzcGVjaWZ5IE1DSEFSLCBNTElORSBvciBNQkxPQ0suCisgICAgICovCisgICAgY2xpcF9zdGFyLmZvcm1hdCA9IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0KCJWaW1DbGlwYm9hcmQyIik7CisgICAgY2xpcF9zdGFyLmZvcm1hdF9yYXcgPSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdCgiVmltUmF3Qnl0ZXMiKTsKKyNlbmRpZgorfQorCisKKyNlbHNlIC8qIEZFQVRfR1VJX1czMiAqLworCisjZGVmaW5lIFNSV0lEVEgoc3IpICgoc3IpLlJpZ2h0IC0gKHNyKS5MZWZ0ICsgMSkKKyNkZWZpbmUgU1JIRUlHSFQoc3IpICgoc3IpLkJvdHRvbSAtIChzcikuVG9wICsgMSkKKworLyoKKyAqIENsZWFyQ29uc29sZUJ1ZmZlcigpCisgKiBEZXNjcmlwdGlvbjoKKyAqICBDbGVhcnMgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgY29uc29sZSBzY3JlZW4gYnVmZmVyLCB1c2luZyB0aGUKKyAqICBzcGVjaWZpZWQgYXR0cmlidXRlLgorICogUmV0dXJuczoKKyAqICBUUlVFIG9uIHN1Y2Nlc3MKKyAqLworICAgIHN0YXRpYyBCT09MCitDbGVhckNvbnNvbGVCdWZmZXIoV09SRCB3QXR0cmlidXRlKQoreworICAgIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIGNzYmk7CisgICAgQ09PUkQgY29vcmQ7CisgICAgRFdPUkQgTnVtQ2VsbHMsIGR1bW15OworCisgICAgaWYgKCFHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhnX2hDb25PdXQsICZjc2JpKSkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICBOdW1DZWxscyA9IGNzYmkuZHdTaXplLlggKiBjc2JpLmR3U2l6ZS5ZOworICAgIGNvb3JkLlggPSAwOworICAgIGNvb3JkLlkgPSAwOworICAgIGlmICghRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXIoZ19oQ29uT3V0LCAnICcsIE51bUNlbGxzLAorCSAgICBjb29yZCwgJmR1bW15KSkKKyAgICB7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoIUZpbGxDb25zb2xlT3V0cHV0QXR0cmlidXRlKGdfaENvbk91dCwgd0F0dHJpYnV0ZSwgTnVtQ2VsbHMsCisJICAgIGNvb3JkLCAmZHVtbXkpKQorICAgIHsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBGaXRDb25zb2xlV2luZG93KCkKKyAqIERlc2NyaXB0aW9uOgorICogIENoZWNrcyBpZiB0aGUgY29uc29sZSB3aW5kb3cgd2lsbCBmaXQgd2l0aGluIGdpdmVuIGJ1ZmZlciBkaW1lbnNpb25zLgorICogIEFsc28sIGlmIHJlcXVlc3RlZCwgd2lsbCBzaHJpbmsgdGhlIHdpbmRvdyB0byBmaXQuCisgKiBSZXR1cm5zOgorICogIFRSVUUgb24gc3VjY2VzcworICovCisgICAgc3RhdGljIEJPT0wKK0ZpdENvbnNvbGVXaW5kb3coCisgICAgQ09PUkQgZHdCdWZmZXJTaXplLAorICAgIEJPT0wgV2FudEFkanVzdCkKK3sKKyAgICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBjc2JpOworICAgIENPT1JEIGR3V2luZG93U2l6ZTsKKyAgICBCT09MIE5lZWRBZGp1c3QgPSBGQUxTRTsKKworICAgIGlmIChHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhnX2hDb25PdXQsICZjc2JpKSkKKyAgICB7CisJLyoKKwkgKiBBIGJ1ZmZlciByZXNpemUgd2lsbCBmYWlsIGlmIHRoZSBjdXJyZW50IGNvbnNvbGUgd2luZG93IGRvZXMKKwkgKiBub3QgbGllIGNvbXBsZXRlbHkgd2l0aGluIHRoYXQgYnVmZmVyLiAgVG8gYXZvaWQgdGhpcywgd2UgbWlnaHQKKwkgKiBoYXZlIHRvIG1vdmUgYW5kIHBvc3NpYmx5IHNocmluayB0aGUgd2luZG93LgorCSAqLworCWlmIChjc2JpLnNyV2luZG93LlJpZ2h0ID49IGR3QnVmZmVyU2l6ZS5YKQorCXsKKwkgICAgZHdXaW5kb3dTaXplLlggPSBTUldJRFRIKGNzYmkuc3JXaW5kb3cpOworCSAgICBpZiAoZHdXaW5kb3dTaXplLlggPiBkd0J1ZmZlclNpemUuWCkKKwkJZHdXaW5kb3dTaXplLlggPSBkd0J1ZmZlclNpemUuWDsKKwkgICAgY3NiaS5zcldpbmRvdy5SaWdodCA9IGR3QnVmZmVyU2l6ZS5YIC0gMTsKKwkgICAgY3NiaS5zcldpbmRvdy5MZWZ0ID0gZHdCdWZmZXJTaXplLlggLSBkd1dpbmRvd1NpemUuWDsKKwkgICAgTmVlZEFkanVzdCA9IFRSVUU7CisJfQorCWlmIChjc2JpLnNyV2luZG93LkJvdHRvbSA+PSBkd0J1ZmZlclNpemUuWSkKKwl7CisJICAgIGR3V2luZG93U2l6ZS5ZID0gU1JIRUlHSFQoY3NiaS5zcldpbmRvdyk7CisJICAgIGlmIChkd1dpbmRvd1NpemUuWSA+IGR3QnVmZmVyU2l6ZS5ZKQorCQlkd1dpbmRvd1NpemUuWSA9IGR3QnVmZmVyU2l6ZS5ZOworCSAgICBjc2JpLnNyV2luZG93LkJvdHRvbSA9IGR3QnVmZmVyU2l6ZS5ZIC0gMTsKKwkgICAgY3NiaS5zcldpbmRvdy5Ub3AgPSBkd0J1ZmZlclNpemUuWSAtIGR3V2luZG93U2l6ZS5ZOworCSAgICBOZWVkQWRqdXN0ID0gVFJVRTsKKwl9CisJaWYgKE5lZWRBZGp1c3QgJiYgV2FudEFkanVzdCkKKwl7CisJICAgIGlmICghU2V0Q29uc29sZVdpbmRvd0luZm8oZ19oQ29uT3V0LCBUUlVFLCAmY3NiaS5zcldpbmRvdykpCisJCXJldHVybiBGQUxTRTsKKwl9CisJcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQorCit0eXBlZGVmIHN0cnVjdCBDb25zb2xlQnVmZmVyU3RydWN0Cit7CisgICAgQk9PTCBJc1ZhbGlkOworICAgIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIEluZm87CisgICAgUENIQVJfSU5GTyBCdWZmZXI7CisgICAgQ09PUkQgQnVmZmVyU2l6ZTsKK30gQ29uc29sZUJ1ZmZlcjsKKworLyoKKyAqIFNhdmVDb25zb2xlQnVmZmVyKCkKKyAqIERlc2NyaXB0aW9uOgorICogIFNhdmVzIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uc29sZSBidWZmZXIsIGluY2x1ZGluZyB0aGUKKyAqICBhY3R1YWwgYnVmZmVyIGNvbnRlbnRzLiAgVGhlIHNhdmVkIGluZm9ybWF0aW9uIGlzIHN1aXRhYmxlIGZvciBsYXRlcgorICogIHJlc3RvcmF0aW9uIGJ5IFJlc3RvcmVDb25zb2xlQnVmZmVyKCkuCisgKiBSZXR1cm5zOgorICogIFRSVUUgaWYgYWxsIGluZm9ybWF0aW9uIHdhcyBzYXZlZDsgRkFMU0Ugb3RoZXJ3aXNlCisgKiAgSWYgRkFMU0UsIHN0aWxsIHNldHMgY2ItPklzVmFsaWQgaWYgYnVmZmVyIGNoYXJhY3RlcmlzdGljcyB3ZXJlIHNhdmVkLgorICovCisgICAgc3RhdGljIEJPT0wKK1NhdmVDb25zb2xlQnVmZmVyKAorICAgIENvbnNvbGVCdWZmZXIgKmNiKQoreworICAgIERXT1JEIE51bUNlbGxzOworICAgIENPT1JEIEJ1ZmZlckNvb3JkOworICAgIFNNQUxMX1JFQ1QgUmVhZFJlZ2lvbjsKKyAgICBXT1JEIFksIFlfaW5jcjsKKworICAgIGlmIChjYiA9PSBOVUxMKQorCXJldHVybiBGQUxTRTsKKworICAgIGlmICghR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8oZ19oQ29uT3V0LCAmY2ItPkluZm8pKQorICAgIHsKKwljYi0+SXNWYWxpZCA9IEZBTFNFOworCXJldHVybiBGQUxTRTsKKyAgICB9CisgICAgY2ItPklzVmFsaWQgPSBUUlVFOworCisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBhIGJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlIGNvbnNvbGUgc2NyZWVuCisgICAgICogYnVmZmVyLiAgSWYgdGhpcyBDb25zb2xlQnVmZmVyIHN0cnVjdHVyZSBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkCisgICAgICogd2l0aCBhIGJ1ZmZlciBvZiB0aGUgY29ycmVjdCBzaXplLCB0aGVuIGp1c3QgdXNlIHRoYXQgb25lLgorICAgICAqLworICAgIGlmICghY2ItPklzVmFsaWQgfHwgY2ItPkJ1ZmZlciA9PSBOVUxMIHx8CisJICAgIGNiLT5CdWZmZXJTaXplLlggIT0gY2ItPkluZm8uZHdTaXplLlggfHwKKwkgICAgY2ItPkJ1ZmZlclNpemUuWSAhPSBjYi0+SW5mby5kd1NpemUuWSkKKyAgICB7CisJY2ItPkJ1ZmZlclNpemUuWCA9IGNiLT5JbmZvLmR3U2l6ZS5YOworCWNiLT5CdWZmZXJTaXplLlkgPSBjYi0+SW5mby5kd1NpemUuWTsKKwlOdW1DZWxscyA9IGNiLT5CdWZmZXJTaXplLlggKiBjYi0+QnVmZmVyU2l6ZS5ZOworCWlmIChjYi0+QnVmZmVyICE9IE5VTEwpCisJICAgIHZpbV9mcmVlKGNiLT5CdWZmZXIpOworCWNiLT5CdWZmZXIgPSAoUENIQVJfSU5GTylhbGxvYyhOdW1DZWxscyAqIHNpemVvZihDSEFSX0lORk8pKTsKKwlpZiAoY2ItPkJ1ZmZlciA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXZSB3aWxsIG5vdyBjb3B5IHRoZSBjb25zb2xlIHNjcmVlbiBidWZmZXIgaW50byBvdXIgYnVmZmVyLgorICAgICAqIFJlYWRDb25zb2xlT3V0cHV0KCkgc2VlbXMgdG8gYmUgbGltaXRlZCBhcyBmYXIgYXMgaG93IG11Y2ggeW91CisgICAgICogY2FuIHJlYWQgYXQgYSB0aW1lLiAgRW1waXJpY2FsbHksIHRoaXMgbnVtYmVyIHNlZW1zIHRvIGJlIGFib3V0CisgICAgICogMTIwMDAgY2VsbHMgKHJvd3MgKiBjb2x1bW5zKS4gIFN0YXJ0IGF0IHBvc2l0aW9uICgwLCAwKSBhbmQgY29weQorICAgICAqIGluIGNodW5rcyB1bnRpbCBpdCBpcyBhbGwgY29waWVkLiAgVGhlIGNodW5rcyB3aWxsIGFsbCBoYXZlIHRoZQorICAgICAqIHNhbWUgaG9yaXpvbnRhbCBjaGFyYWN0ZXJpc3RpY3MsIHNvIGluaXRpYWxpemUgdGhlbSBub3cuICBUaGUKKyAgICAgKiBoZWlnaHQgb2YgZWFjaCBjaHVuayB3aWxsIGJlICgxMjAwMCAvIHdpZHRoKS4KKyAgICAgKi8KKyAgICBCdWZmZXJDb29yZC5YID0gMDsKKyAgICBSZWFkUmVnaW9uLkxlZnQgPSAwOworICAgIFJlYWRSZWdpb24uUmlnaHQgPSBjYi0+SW5mby5kd1NpemUuWCAtIDE7CisgICAgWV9pbmNyID0gMTIwMDAgLyBjYi0+SW5mby5kd1NpemUuWDsKKyAgICBmb3IgKFkgPSAwOyBZIDwgY2ItPkJ1ZmZlclNpemUuWTsgWSArPSBZX2luY3IpCisgICAgeworCS8qCisJICogUmVhZCBpbnRvIHBvc2l0aW9uICgwLCBZKSBpbiBvdXIgYnVmZmVyLgorCSAqLworCUJ1ZmZlckNvb3JkLlkgPSBZOworCS8qCisJICogUmVhZCB0aGUgcmVnaW9uIHdob3NlIHRvcCBsZWZ0IGNvcm5lciBpcyAoMCwgWSkgYW5kIHdob3NlIGJvdHRvbQorCSAqIHJpZ2h0IGNvcm5lciBpcyAod2lkdGggLSAxLCBZICsgWV9pbmNyIC0gMSkuICBUaGlzIHNob3VsZCBkZWZpbmUKKwkgKiBhIHJlZ2lvbiBvZiBzaXplIHdpZHRoIGJ5IFlfaW5jci4gIERvbid0IHdvcnJ5IGlmIHRoaXMgcmVnaW9uIGlzCisJICogdG9vIGxhcmdlIGZvciB0aGUgcmVtYWluaW5nIGJ1ZmZlcjsgaXQgd2lsbCBiZSBjcm9wcGVkLgorCSAqLworCVJlYWRSZWdpb24uVG9wID0gWTsKKwlSZWFkUmVnaW9uLkJvdHRvbSA9IFkgKyBZX2luY3IgLSAxOworCWlmICghUmVhZENvbnNvbGVPdXRwdXQoZ19oQ29uT3V0LAkvKiBvdXRwdXQgaGFuZGxlICovCisJCWNiLT5CdWZmZXIsCQkJLyogb3VyIGJ1ZmZlciAqLworCQljYi0+QnVmZmVyU2l6ZSwJCQkvKiBkaW1lbnNpb25zIG9mIG91ciBidWZmZXIgKi8KKwkJQnVmZmVyQ29vcmQsCQkJLyogb2Zmc2V0IGluIG91ciBidWZmZXIgKi8KKwkJJlJlYWRSZWdpb24pKQkJCS8qIHJlZ2lvbiB0byBzYXZlICovCisJeworCSAgICB2aW1fZnJlZShjYi0+QnVmZmVyKTsKKwkgICAgY2ItPkJ1ZmZlciA9IE5VTEw7CisJICAgIHJldHVybiBGQUxTRTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBSZXN0b3JlQ29uc29sZUJ1ZmZlcigpCisgKiBEZXNjcmlwdGlvbjoKKyAqICBSZXN0b3JlcyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnNvbGUgYnVmZmVyLCBpbmNsdWRpbmcgdGhlCisgKiAgYWN0dWFsIGJ1ZmZlciBjb250ZW50cywgaWYgZGVzaXJlZC4gIFRoZSBpbmZvcm1hdGlvbiB0byByZXN0b3JlIGlzIGluCisgKiAgdGhlIHNhbWUgZm9ybWF0IHVzZWQgYnkgU2F2ZUNvbnNvbGVCdWZmZXIoKS4KKyAqIFJldHVybnM6CisgKiAgVFJVRSBvbiBzdWNjZXNzCisgKi8KKyAgICBzdGF0aWMgQk9PTAorUmVzdG9yZUNvbnNvbGVCdWZmZXIoCisgICAgQ29uc29sZUJ1ZmZlciAqY2IsCisgICAgQk9PTCBSZXN0b3JlU2NyZWVuKQoreworICAgIENPT1JEIEJ1ZmZlckNvb3JkOworICAgIFNNQUxMX1JFQ1QgV3JpdGVSZWdpb247CisKKyAgICBpZiAoY2IgPT0gTlVMTCB8fCAhY2ItPklzVmFsaWQpCisJcmV0dXJuIEZBTFNFOworCisgICAgLyoKKyAgICAgKiBCZWZvcmUgcmVzdG9yaW5nIHRoZSBidWZmZXIgY29udGVudHMsIGNsZWFyIHRoZSBjdXJyZW50IGJ1ZmZlciwgYW5kCisgICAgICogcmVzdG9yZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGFuZCB3aW5kb3cgaW5mb3JtYXRpb24uICBEb2luZyB0aGlzIG5vdworICAgICAqIHByZXZlbnRzIG9sZCBidWZmZXIgY29udGVudHMgZnJvbSAiZmxhc2hpbmciIG9udG8gdGhlIHNjcmVlbi4KKyAgICAgKi8KKyAgICBpZiAoUmVzdG9yZVNjcmVlbikKKwlDbGVhckNvbnNvbGVCdWZmZXIoY2ItPkluZm8ud0F0dHJpYnV0ZXMpOworCisgICAgRml0Q29uc29sZVdpbmRvdyhjYi0+SW5mby5kd1NpemUsIFRSVUUpOworICAgIGlmICghU2V0Q29uc29sZVNjcmVlbkJ1ZmZlclNpemUoZ19oQ29uT3V0LCBjYi0+SW5mby5kd1NpemUpKQorCXJldHVybiBGQUxTRTsKKyAgICBpZiAoIVNldENvbnNvbGVUZXh0QXR0cmlidXRlKGdfaENvbk91dCwgY2ItPkluZm8ud0F0dHJpYnV0ZXMpKQorCXJldHVybiBGQUxTRTsKKworICAgIGlmICghUmVzdG9yZVNjcmVlbikKKyAgICB7CisJLyoKKwkgKiBObyBuZWVkIHRvIHJlc3RvcmUgdGhlIHNjcmVlbiBidWZmZXIgY29udGVudHMsIHNvIHdlJ3JlIGRvbmUuCisJICovCisJcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgaWYgKCFTZXRDb25zb2xlQ3Vyc29yUG9zaXRpb24oZ19oQ29uT3V0LCBjYi0+SW5mby5kd0N1cnNvclBvc2l0aW9uKSkKKwlyZXR1cm4gRkFMU0U7CisgICAgaWYgKCFTZXRDb25zb2xlV2luZG93SW5mbyhnX2hDb25PdXQsIFRSVUUsICZjYi0+SW5mby5zcldpbmRvdykpCisJcmV0dXJuIEZBTFNFOworCisgICAgLyoKKyAgICAgKiBSZXN0b3JlIHRoZSBzY3JlZW4gYnVmZmVyIGNvbnRlbnRzLgorICAgICAqLworICAgIGlmIChjYi0+QnVmZmVyICE9IE5VTEwpCisgICAgeworCUJ1ZmZlckNvb3JkLlggPSAwOworCUJ1ZmZlckNvb3JkLlkgPSAwOworCVdyaXRlUmVnaW9uLkxlZnQgPSAwOworCVdyaXRlUmVnaW9uLlRvcCA9IDA7CisJV3JpdGVSZWdpb24uUmlnaHQgPSBjYi0+SW5mby5kd1NpemUuWCAtIDE7CisJV3JpdGVSZWdpb24uQm90dG9tID0gY2ItPkluZm8uZHdTaXplLlkgLSAxOworCWlmICghV3JpdGVDb25zb2xlT3V0cHV0KGdfaENvbk91dCwJLyogb3V0cHV0IGhhbmRsZSAqLworCQljYi0+QnVmZmVyLAkJCS8qIG91ciBidWZmZXIgKi8KKwkJY2ItPkJ1ZmZlclNpemUsCQkJLyogZGltZW5zaW9ucyBvZiBvdXIgYnVmZmVyICovCisJCUJ1ZmZlckNvb3JkLAkJCS8qIG9mZnNldCBpbiBvdXIgYnVmZmVyICovCisJCSZXcml0ZVJlZ2lvbikpCQkJLyogcmVnaW9uIHRvIHJlc3RvcmUgKi8KKwl7CisJICAgIHJldHVybiBGQUxTRTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZmRlZiBGRUFUX1JFU1RPUkVfT1JJR19TQ1JFRU4KK3N0YXRpYyBDb25zb2xlQnVmZmVyIGdfY2JPcmlnID0geyAwIH07CisjZW5kaWYKK3N0YXRpYyBDb25zb2xlQnVmZmVyIGdfY2JOb25UZXJtY2FwID0geyAwIH07CitzdGF0aWMgQ29uc29sZUJ1ZmZlciBnX2NiVGVybWNhcCA9IHsgMCB9OworCisjaWZkZWYgRkVBVF9USVRMRQorI2lmZGVmIF9fQk9STEFORENfXwordHlwZWRlZiBIV05EIChfX3N0ZGNhbGwgKkdFVENPTlNPTEVXSU5ET1dQUk9DKShWT0lEKTsKKyNlbHNlCit0eXBlZGVmIFdJTkJBU0VBUEkgSFdORCAoV0lOQVBJICpHRVRDT05TT0xFV0lORE9XUFJPQykoVk9JRCk7CisjZW5kaWYKK2NoYXIgZ19zek9yaWdUaXRsZVsyNTZdID0geyAwIH07CitIV05EIGdfaFduZCA9IE5VTEw7CS8qIGFsc28gdXNlZCBpbiBvc19tc3dpbi5jICovCitzdGF0aWMgSElDT04gZ19oT3JpZ0ljb25TbWFsbCA9IE5VTEw7CitzdGF0aWMgSElDT04gZ19oT3JpZ0ljb24gPSBOVUxMOworc3RhdGljIEhJQ09OIGdfaFZpbUljb24gPSBOVUxMOworc3RhdGljIEJPT0wgZ19mQ2FuQ2hhbmdlSWNvbiA9IEZBTFNFOworCisvKiBJQ09OKiBhcmUgbm90IGRlZmluZWQgaW4gVkMrKyA0LjAgKi8KKyNpZm5kZWYgSUNPTl9TTUFMTAorI2RlZmluZSBJQ09OX1NNQUxMIDAKKyNlbmRpZgorI2lmbmRlZiBJQ09OX0JJRworI2RlZmluZSBJQ09OX0JJRyAxCisjZW5kaWYKKy8qCisgKiBHZXRDb25zb2xlSWNvbigpCisgKiBEZXNjcmlwdGlvbjoKKyAqICBBdHRlbXB0cyB0byByZXRyaWV2ZSB0aGUgc21hbGwgaWNvbiBhbmQvb3IgdGhlIGJpZyBpY29uIGN1cnJlbnRseSBpbgorICogIHVzZSBieSBhIGdpdmVuIHdpbmRvdy4KKyAqIFJldHVybnM6CisgKiAgVFJVRSBvbiBzdWNjZXNzCisgKi8KKyAgICBzdGF0aWMgQk9PTAorR2V0Q29uc29sZUljb24oCisgICAgSFdORCBoV25kLAorICAgIEhJQ09OICpwaEljb25TbWFsbCwKKyAgICBISUNPTiAqcGhJY29uKQoreworICAgIGlmIChoV25kID09IE5VTEwpCisJcmV0dXJuIEZBTFNFOworCisgICAgaWYgKHBoSWNvblNtYWxsICE9IE5VTEwpCisgICAgeworCSpwaEljb25TbWFsbCA9IChISUNPTikgU2VuZE1lc3NhZ2UoaFduZCwgV01fR0VUSUNPTiwKKwkJCSAgICAoV1BBUkFNKSBJQ09OX1NNQUxMLCAoTFBBUkFNKSAwKTsKKyAgICB9CisgICAgaWYgKHBoSWNvbiAhPSBOVUxMKQorICAgIHsKKwkqcGhJY29uID0gKEhJQ09OKSBTZW5kTWVzc2FnZShoV25kLCBXTV9HRVRJQ09OLAorCQkJICAgIChXUEFSQU0pIElDT05fQklHLCAoTFBBUkFNKSAwKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBTZXRDb25zb2xlSWNvbigpCisgKiBEZXNjcmlwdGlvbjoKKyAqICBBdHRlbXB0cyB0byBjaGFuZ2UgdGhlIHNtYWxsIGljb24gYW5kL29yIHRoZSBiaWcgaWNvbiBjdXJyZW50bHkgaW4KKyAqICB1c2UgYnkgYSBnaXZlbiB3aW5kb3cuCisgKiBSZXR1cm5zOgorICogIFRSVUUgb24gc3VjY2VzcworICovCisgICAgc3RhdGljIEJPT0wKK1NldENvbnNvbGVJY29uKAorICAgIEhXTkQgaFduZCwKKyAgICBISUNPTiBoSWNvblNtYWxsLAorICAgIEhJQ09OIGhJY29uKQoreworICAgIEhJQ09OIGhQcmV2SWNvblNtYWxsOworICAgIEhJQ09OIGhQcmV2SWNvbjsKKworICAgIGlmIChoV25kID09IE5VTEwpCisJcmV0dXJuIEZBTFNFOworCisgICAgaWYgKGhJY29uU21hbGwgIT0gTlVMTCkKKyAgICB7CisJaFByZXZJY29uU21hbGwgPSAoSElDT04pIFNlbmRNZXNzYWdlKGhXbmQsIFdNX1NFVElDT04sCisJCQkgICAgKFdQQVJBTSkgSUNPTl9TTUFMTCwgKExQQVJBTSkgaEljb25TbWFsbCk7CisgICAgfQorICAgIGlmIChoSWNvbiAhPSBOVUxMKQorICAgIHsKKwloUHJldkljb24gPSAoSElDT04pIFNlbmRNZXNzYWdlKGhXbmQsIFdNX1NFVElDT04sCisJCQkgICAgKFdQQVJBTSkgSUNPTl9CSUcsIChMUEFSQU0pIGhJY29uKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBTYXZlQ29uc29sZVRpdGxlQW5kSWNvbigpCisgKiBEZXNjcmlwdGlvbjoKKyAqICBTYXZlcyB0aGUgY3VycmVudCBjb25zb2xlIHdpbmRvdyB0aXRsZSBpbiBnX3N6T3JpZ1RpdGxlLCBmb3IgbGF0ZXIKKyAqICByZXN0b3JhdGlvbi4gIEFsc28sIGF0dGVtcHRzIHRvIG9idGFpbiBhIGhhbmRsZSB0byB0aGUgY29uc29sZSB3aW5kb3csCisgKiAgYW5kIHVzZSBpdCB0byBzYXZlIHRoZSBzbWFsbCBhbmQgYmlnIGljb25zIGN1cnJlbnRseSBpbiB1c2UgYnkgdGhlCisgKiAgY29uc29sZSB3aW5kb3cuICBUaGlzIGlzIG5vdCBhbHdheXMgcG9zc2libGUgb24gc29tZSB2ZXJzaW9ucyBvZiBXaW5kb3dzOworICogIG5vciBpcyBpdCBwb3NzaWJsZSB3aGVuIHJ1bm5pbmcgVmltIHJlbW90ZWx5IHVzaW5nIFRlbG5ldCAoc2luY2UgdGhlCisgKiAgY29uc29sZSB3aW5kb3cgdGhlIHVzZXIgc2VlcyBpcyBvd25lZCBieSBhIHJlbW90ZSBwcm9jZXNzKS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitTYXZlQ29uc29sZVRpdGxlQW5kSWNvbih2b2lkKQoreworICAgIEdFVENPTlNPTEVXSU5ET1dQUk9DIEdldENvbnNvbGVXaW5kb3dQcm9jOworCisgICAgLyogU2F2ZSB0aGUgb3JpZ2luYWwgdGl0bGUuICovCisgICAgaWYgKCFHZXRDb25zb2xlVGl0bGUoZ19zek9yaWdUaXRsZSwgc2l6ZW9mKGdfc3pPcmlnVGl0bGUpKSkKKwlyZXR1cm47CisKKyAgICAvKgorICAgICAqIE9idGFpbiBhIGhhbmRsZSB0byB0aGUgY29uc29sZSB3aW5kb3cgdXNpbmcgR2V0Q29uc29sZVdpbmRvdygpIGZyb20KKyAgICAgKiBLRVJORUwzMi5ETEw7IHdlIG5lZWQgdG8gaGFuZGxlIGluIG9yZGVyIHRvIGNoYW5nZSB0aGUgd2luZG93IGljb24uCisgICAgICogVGhpcyBmdW5jdGlvbiBvbmx5IGV4aXN0cyBvbiBOVC1iYXNlZCBXaW5kb3dzLCBzdGFydGluZyB3aXRoIFdpbmRvd3MKKyAgICAgKiAyMDAwLiAgT24gb2xkZXIgb3BlcmF0aW5nIHN5c3RlbXMsIHdlIGNhbid0IGNoYW5nZSB0aGUgd2luZG93IGljb24KKyAgICAgKiBhbnl3YXkuCisgICAgICovCisgICAgaWYgKChHZXRDb25zb2xlV2luZG93UHJvYyA9IChHRVRDT05TT0xFV0lORE9XUFJPQykKKwkgICAgR2V0UHJvY0FkZHJlc3MoR2V0TW9kdWxlSGFuZGxlKCJLRVJORUwzMi5ETEwiKSwKKwkJICAgICJHZXRDb25zb2xlV2luZG93IikpICE9IE5VTEwpCisgICAgeworCWdfaFduZCA9ICgqR2V0Q29uc29sZVdpbmRvd1Byb2MpKCk7CisgICAgfQorICAgIGlmIChnX2hXbmQgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICAvKiBTYXZlIHRoZSBvcmlnaW5hbCBjb25zb2xlIHdpbmRvdyBpY29uLiAqLworICAgIEdldENvbnNvbGVJY29uKGdfaFduZCwgJmdfaE9yaWdJY29uU21hbGwsICZnX2hPcmlnSWNvbik7CisgICAgaWYgKGdfaE9yaWdJY29uU21hbGwgPT0gTlVMTCB8fCBnX2hPcmlnSWNvbiA9PSBOVUxMKQorCXJldHVybjsKKworICAgIC8qIEV4dHJhY3QgdGhlIGZpcnN0IGljb24gY29udGFpbmVkIGluIHRoZSBWaW0gZXhlY3V0YWJsZS4gKi8KKyAgICBnX2hWaW1JY29uID0gRXh0cmFjdEljb24oTlVMTCwgZXhlX25hbWUsIDApOworICAgIGlmIChnX2hWaW1JY29uICE9IE5VTEwpCisJZ19mQ2FuQ2hhbmdlSWNvbiA9IFRSVUU7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBnX2ZXaW5kSW5pdENhbGxlZCA9IEZBTFNFOworc3RhdGljIGludCBnX2ZUZXJtY2FwTW9kZSA9IEZBTFNFOworc3RhdGljIENPTlNPTEVfQ1VSU09SX0lORk8gZ19jY2k7CitzdGF0aWMgRFdPUkQgZ19jbW9kZWluID0gMDsKK3N0YXRpYyBEV09SRCBnX2Ntb2Rlb3V0ID0gMDsKKworLyoKKyAqIG5vbi1HVUkgdmVyc2lvbiBvZiBtY2hfaW5pdCgpLgorICovCisgICAgdm9pZAorbWNoX2luaXQoKQoreworI2lmbmRlZiBGRUFUX1JFU1RPUkVfT1JJR19TQ1JFRU4KKyAgICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBjc2JpOworI2VuZGlmCisjaWZuZGVmIF9fTUlOR1czMl9fCisgICAgZXh0ZXJuIGludCBfZm1vZGU7CisjZW5kaWYKKworICAgIC8qIExldCBjcml0aWNhbCBlcnJvcnMgcmVzdWx0IGluIGEgZmFpbHVyZSwgbm90IGluIGEgZGlhbG9nIGJveC4gIFJlcXVpcmVkCisgICAgICogZm9yIHRoZSB0aW1lc3RhbXAgdGVzdCB0byB3b3JrIG9uIHJlbW92ZWQgZmxvcHBpZXMuICovCisgICAgU2V0RXJyb3JNb2RlKFNFTV9GQUlMQ1JJVElDQUxFUlJPUlMpOworCisgICAgX2Ztb2RlID0gT19CSU5BUlk7CQkvKiB3ZSBkbyBvdXIgb3duIENSLUxGIHRyYW5zbGF0aW9uICovCisgICAgb3V0X2ZsdXNoKCk7CisKKyAgICAvKiBPYnRhaW4gaGFuZGxlcyBmb3IgdGhlIHN0YW5kYXJkIENvbnNvbGUgSS9PIGRldmljZXMgKi8KKyAgICBpZiAocmVhZF9jbWRfZmQgPT0gMCkKKwlnX2hDb25JbiA9ICBHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSk7CisgICAgZWxzZQorCWNyZWF0ZV9jb25pbigpOworICAgIGdfaENvbk91dCA9IEdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSk7CisKKyNpZmRlZiBGRUFUX1JFU1RPUkVfT1JJR19TQ1JFRU4KKyAgICAvKiBTYXZlIHRoZSBpbml0aWFsIGNvbnNvbGUgYnVmZmVyIGZvciBsYXRlciByZXN0b3JhdGlvbiAqLworICAgIFNhdmVDb25zb2xlQnVmZmVyKCZnX2NiT3JpZyk7CisgICAgZ19hdHRyQ3VycmVudCA9IGdfYXR0ckRlZmF1bHQgPSBnX2NiT3JpZy5JbmZvLndBdHRyaWJ1dGVzOworI2Vsc2UKKyAgICAvKiBHZXQgY3VycmVudCB0ZXh0IGF0dHJpYnV0ZXMgKi8KKyAgICBHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhnX2hDb25PdXQsICZjc2JpKTsKKyAgICBnX2F0dHJDdXJyZW50ID0gZ19hdHRyRGVmYXVsdCA9IGNzYmkud0F0dHJpYnV0ZXM7CisjZW5kaWYKKyAgICBpZiAoY3Rlcm1fbm9ybWFsX2ZnX2NvbG9yID09IDApCisJY3Rlcm1fbm9ybWFsX2ZnX2NvbG9yID0gKGdfYXR0ckN1cnJlbnQgJiAweGYpICsgMTsKKyAgICBpZiAoY3Rlcm1fbm9ybWFsX2JnX2NvbG9yID09IDApCisJY3Rlcm1fbm9ybWFsX2JnX2NvbG9yID0gKChnX2F0dHJDdXJyZW50ID4+IDQpICYgMHhmKSArIDE7CisKKyAgICAvKiBzZXQgdGVybWNhcCBjb2RlcyB0byBjdXJyZW50IHRleHQgYXR0cmlidXRlcyAqLworICAgIHVwZGF0ZV90Y2FwKGdfYXR0ckN1cnJlbnQpOworCisgICAgR2V0Q29uc29sZUN1cnNvckluZm8oZ19oQ29uT3V0LCAmZ19jY2kpOworICAgIEdldENvbnNvbGVNb2RlKGdfaENvbkluLCAgJmdfY21vZGVpbik7CisgICAgR2V0Q29uc29sZU1vZGUoZ19oQ29uT3V0LCAmZ19jbW9kZW91dCk7CisKKyNpZmRlZiBGRUFUX1RJVExFCisgICAgU2F2ZUNvbnNvbGVUaXRsZUFuZEljb24oKTsKKyAgICAvKgorICAgICAqIFNldCBib3RoIHRoZSBzbWFsbCBhbmQgYmlnIGljb25zIG9mIHRoZSBjb25zb2xlIHdpbmRvdyB0byBWaW0ncyBpY29uLgorICAgICAqIE5vdGUgdGhhdCBWaW0gcHJlc2VudGx5IG9ubHkgaGFzIG9uZSBzaXplIG9mIGljb24gKDMyeDMyKSwgYnV0IGl0CisgICAgICogYXV0b21hdGljYWxseSBnZXRzIHNjYWxlZCBkb3duIHRvIDE2eDE2IHdoZW4gc2V0dGluZyB0aGUgc21hbGwgaWNvbi4KKyAgICAgKi8KKyAgICBpZiAoZ19mQ2FuQ2hhbmdlSWNvbikKKwlTZXRDb25zb2xlSWNvbihnX2hXbmQsIGdfaFZpbUljb24sIGdfaFZpbUljb24pOworI2VuZGlmCisKKyAgICB1aV9nZXRfc2hlbGxzaXplKCk7CisKKyNpZmRlZiBNQ0hfV1JJVEVfRFVNUAorICAgIGZkRHVtcCA9IGZvcGVuKCJkdW1wIiwgInd0Iik7CisKKyAgICBpZiAoZmREdW1wKQorICAgIHsKKwl0aW1lX3QgdDsKKworCXRpbWUoJnQpOworCWZwdXRzKGN0aW1lKCZ0KSwgZmREdW1wKTsKKwlmZmx1c2goZmREdW1wKTsKKyAgICB9CisjZW5kaWYKKworICAgIGdfZldpbmRJbml0Q2FsbGVkID0gVFJVRTsKKworI2lmZGVmIEZFQVRfTU9VU0UKKyAgICBnX2ZNb3VzZUF2YWlsID0gR2V0U3lzdGVtTWV0cmljcyhTTV9NT1VTRVBSRVNFTlQpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIGNsaXBfaW5pdChUUlVFKTsKKworICAgIC8qCisgICAgICogVmltJ3Mgb3duIGNsaXBib2FyZCBmb3JtYXQgcmVjb2duaXNlcyB3aGV0aGVyIHRoZSB0ZXh0IGlzIGNoYXIsIGxpbmUsIG9yCisgICAgICogcmVjdGFuZ3VsYXIgYmxvY2suICBPbmx5IHVzZWZ1bCBmb3IgY29weWluZyBiZXR3ZWVuIHR3byBWaW1zLgorICAgICAqICJWaW1DbGlwYm9hcmQiIHdhcyB1c2VkIGZvciBwcmV2aW91cyB2ZXJzaW9ucywgdXNpbmcgdGhlIGZpcnN0CisgICAgICogY2hhcmFjdGVyIHRvIHNwZWNpZnkgTUNIQVIsIE1MSU5FIG9yIE1CTE9DSy4KKyAgICAgKi8KKyAgICBjbGlwX3N0YXIuZm9ybWF0ID0gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoIlZpbUNsaXBib2FyZDIiKTsKKyAgICBjbGlwX3N0YXIuZm9ybWF0X3JhdyA9IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0KCJWaW1SYXdCeXRlcyIpOworI2VuZGlmCisKKyAgICAvKiBUaGlzIHdpbGwgYmUgTlVMTCBvbiBhbnl0aGluZyBidXQgTlQgNC4wICovCisgICAgc19wZm5HZXRDb25zb2xlS2V5Ym9hcmRMYXlvdXROYW1lID0KKwkoUEZOR0NLTE4pIEdldFByb2NBZGRyZXNzKEdldE1vZHVsZUhhbmRsZSgia2VybmVsMzIuZGxsIiksCisJCQkJICAiR2V0Q29uc29sZUtleWJvYXJkTGF5b3V0TmFtZUEiKTsKK30KKworLyoKKyAqIG5vbi1HVUkgdmVyc2lvbiBvZiBtY2hfZXhpdCgpLgorICogU2h1dCBkb3duIGFuZCBleGl0IHdpdGggc3RhdHVzIGByJworICogQ2FyZWZ1bDogbWNoX2V4aXQoKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBtY2hfaW5pdCgpIQorICovCisgICAgdm9pZAorbWNoX2V4aXQoaW50IHIpCit7CisgICAgc3RvcHRlcm1jYXAoKTsKKworICAgIGlmIChnX2ZXaW5kSW5pdENhbGxlZCkKKwlzZXR0bW9kZShUTU9ERV9DT09LKTsKKworICAgIG1sX2Nsb3NlX2FsbChUUlVFKTsJCS8qIHJlbW92ZSBhbGwgbWVtZmlsZXMgKi8KKworICAgIGlmIChnX2ZXaW5kSW5pdENhbGxlZCkKKyAgICB7CisjaWZkZWYgRkVBVF9USVRMRQorCW1jaF9yZXN0b3JlX3RpdGxlKDMpOworCS8qCisJICogUmVzdG9yZSBib3RoIHRoZSBzbWFsbCBhbmQgYmlnIGljb25zIG9mIHRoZSBjb25zb2xlIHdpbmRvdyB0bworCSAqIHdoYXQgdGhleSB3ZXJlIGF0IHN0YXJ0dXAuICBEb24ndCBkbyB0aGlzIHdoZW4gdGhlIHdpbmRvdyBpcworCSAqIGNsb3NlZCwgVmltIHdvdWxkIGhhbmcgaGVyZS4KKwkgKi8KKwlpZiAoZ19mQ2FuQ2hhbmdlSWNvbiAmJiAhZ19mRm9yY2VFeGl0KQorCSAgICBTZXRDb25zb2xlSWNvbihnX2hXbmQsIGdfaE9yaWdJY29uU21hbGwsIGdfaE9yaWdJY29uKTsKKyNlbmRpZgorCisjaWZkZWYgTUNIX1dSSVRFX0RVTVAKKwlpZiAoZmREdW1wKQorCXsKKwkgICAgdGltZV90IHQ7CisKKwkgICAgdGltZSgmdCk7CisJICAgIGZwdXRzKGN0aW1lKCZ0KSwgZmREdW1wKTsKKwkgICAgZmNsb3NlKGZkRHVtcCk7CisJfQorCWZkRHVtcCA9IE5VTEw7CisjZW5kaWYKKyAgICB9CisKKyAgICBTZXRDb25zb2xlQ3Vyc29ySW5mbyhnX2hDb25PdXQsICZnX2NjaSk7CisgICAgU2V0Q29uc29sZU1vZGUoZ19oQ29uSW4sICBnX2Ntb2RlaW4pOworICAgIFNldENvbnNvbGVNb2RlKGdfaENvbk91dCwgZ19jbW9kZW91dCk7CisKKyNpZmRlZiBEWU5BTUlDX0dFVFRFWFQKKyAgICBkeW5fbGliaW50bF9lbmQoKTsKKyNlbmRpZgorCisgICAgZXhpdChyKTsKK30KKyNlbmRpZiAvKiAhRkVBVF9HVUlfVzMyICovCisKKworLyoKKyAqIERvIHdlIGhhdmUgYW4gaW50ZXJhY3RpdmUgd2luZG93PworICovCisgICAgaW50CittY2hfY2hlY2tfd2luKAorICAgIGludCBhcmdjLAorICAgIGNoYXIgKiphcmd2KQoreworICAgIGdldF9leGVfbmFtZSgpOworCisjaWZkZWYgRkVBVF9HVUlfVzMyCisgICAgcmV0dXJuIE9LOwkgICAgLyogR1VJIGFsd2F5cyBoYXMgYSB0dHkgKi8KKyNlbHNlCisgICAgaWYgKGlzYXR0eSgxKSkKKwlyZXR1cm4gT0s7CisgICAgcmV0dXJuIEZBSUw7CisjZW5kaWYKK30KKworCisvKgorICogZm5hbWVfY2FzZSgpOiBTZXQgdGhlIGNhc2Ugb2YgdGhlIGZpbGUgbmFtZSwgaWYgaXQgYWxyZWFkeSBleGlzdHMuCisgKiBXaGVuICJsZW4iIGlzID4gMCwgYWxzbyBleHBhbmQgc2hvcnQgdG8gbG9uZyBmaWxlbmFtZXMuCisgKi8KKyAgICB2b2lkCitmbmFtZV9jYXNlKAorICAgIGNoYXJfdQkqbmFtZSwKKyAgICBpbnQJCWxlbikKK3sKKyAgICBjaGFyCQlzelRydWVOYW1lW19NQVhfUEFUSCArIDJdOworICAgIGNoYXIJCSpwdHJ1ZSwgKnB0cnVlUHJldjsKKyAgICBjaGFyCQkqcG9yaWcsICpwb3JpZ1ByZXY7CisgICAgaW50CQkJZmxlbjsKKyAgICBXSU4zMl9GSU5EX0RBVEEJZmI7CisgICAgSEFORExFCQloRmluZDsKKyAgICBpbnQJCQljOworCisgICAgZmxlbiA9IChuYW1lICE9IE5VTEwpID8gKGludClTVFJMRU4obmFtZSkgOiAwOworICAgIGlmIChmbGVuID09IDAgfHwgZmxlbiA+IF9NQVhfUEFUSCkKKwlyZXR1cm47CisKKyAgICBzbGFzaF9hZGp1c3QobmFtZSk7CisKKyAgICAvKiBCdWlsZCB0aGUgbmV3IG5hbWUgaW4gc3pUcnVlTmFtZVtdIG9uZSBjb21wb25lbnQgYXQgYSB0aW1lLiAqLworICAgIHBvcmlnID0gbmFtZTsKKyAgICBwdHJ1ZSA9IHN6VHJ1ZU5hbWU7CisKKyAgICBpZiAoaXNhbHBoYShwb3JpZ1swXSkgJiYgcG9yaWdbMV0gPT0gJzonKQorICAgIHsKKwkvKiBjb3B5IGxlYWRpbmcgZHJpdmUgbGV0dGVyICovCisJKnB0cnVlKysgPSAqcG9yaWcrKzsKKwkqcHRydWUrKyA9ICpwb3JpZysrOworCSpwdHJ1ZSA9IE5VTDsJICAgIC8qIGluIGNhc2Ugbm90aGluZyBmb2xsb3dzICovCisgICAgfQorCisgICAgd2hpbGUgKCpwb3JpZyAhPSBOVUwpCisgICAgeworCS8qIGNvcHkgXCBjaGFyYWN0ZXJzICovCisJd2hpbGUgKCpwb3JpZyA9PSBwc2VwYykKKwkgICAgKnB0cnVlKysgPSAqcG9yaWcrKzsKKworCXB0cnVlUHJldiA9IHB0cnVlOworCXBvcmlnUHJldiA9IHBvcmlnOworCXdoaWxlICgqcG9yaWcgIT0gTlVMICYmICpwb3JpZyAhPSBwc2VwYykKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpbnQgbDsKKworCSAgICBpZiAoZW5jX2RiY3MpCisJICAgIHsKKwkJbCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocG9yaWcpOworCQl3aGlsZSAoLS1sID49IDApCisJCSAgICAqcHRydWUrKyA9ICpwb3JpZysrOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCQkqcHRydWUrKyA9ICpwb3JpZysrOworCX0KKwkqcHRydWUgPSBOVUw7CisKKwkvKiBTa2lwICIiLCAiLiIgYW5kICIuLiIuICovCisJaWYgKHB0cnVlID4gcHRydWVQcmV2CisJCSYmIChwdHJ1ZVByZXZbMF0gIT0gJy4nCisJCSAgICB8fCAocHRydWVQcmV2WzFdICE9IE5VTAorCQkJJiYgKHB0cnVlUHJldlsxXSAhPSAnLicgfHwgcHRydWVQcmV2WzJdICE9IE5VTCkpKQorCQkmJiAoaEZpbmQgPSBGaW5kRmlyc3RGaWxlKHN6VHJ1ZU5hbWUsICZmYikpCisJCQkJCQkgICAgICAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwl7CisJICAgIGMgPSAqcG9yaWc7CisJICAgICpwb3JpZyA9IE5VTDsKKworCSAgICAvKiBPbmx5IHVzZSB0aGUgbWF0Y2ggd2hlbiBpdCdzIHRoZSBzYW1lIG5hbWUgKGlnbm9yaW5nIGNhc2UpIG9yCisJICAgICAqIGV4cGFuc2lvbiBpcyBhbGxvd2VkIGFuZCB0aGVyZSBpcyBhIG1hdGNoIHdpdGggdGhlIHNob3J0IG5hbWUKKwkgICAgICogYW5kIHRoZXJlIGlzIGVub3VnaCByb29tLiAqLworCSAgICBpZiAoX3N0cmljb2xsKHBvcmlnUHJldiwgZmIuY0ZpbGVOYW1lKSA9PSAwCisJCSAgICB8fCAobGVuID4gMAorCQkJJiYgKF9zdHJpY29sbChwb3JpZ1ByZXYsIGZiLmNBbHRlcm5hdGVGaWxlTmFtZSkgPT0gMAorCQkJICAgICYmIChpbnQpKHB0cnVlUHJldiAtIHN6VHJ1ZU5hbWUpCisJCQkJCSAgICsgKGludClzdHJsZW4oZmIuY0ZpbGVOYW1lKSA8IGxlbikpKQorCSAgICB7CisJCVNUUkNQWShwdHJ1ZVByZXYsIGZiLmNGaWxlTmFtZSk7CisKKwkJLyogTG9vayBmb3IgZXhhY3QgbWF0Y2ggYW5kIHByZWZlciBpdCBpZiBmb3VuZC4gIE11c3QgYmUgYQorCQkgKiBsb25nIG5hbWUsIG90aGVyd2lzZSB0aGVyZSB3b3VsZCBiZSBvbmx5IG9uZSBtYXRjaC4gKi8KKwkJd2hpbGUgKEZpbmROZXh0RmlsZShoRmluZCwgJmZiKSkKKwkJeworCQkgICAgaWYgKCpmYi5jQWx0ZXJuYXRlRmlsZU5hbWUgIT0gTlVMCisJCQkgICAgJiYgKHN0cmNvbGwocG9yaWdQcmV2LCBmYi5jRmlsZU5hbWUpID09IDAKKwkJCQl8fCAobGVuID4gMAorCQkJCSAgICAmJiAoX3N0cmljb2xsKHBvcmlnUHJldiwKKwkJCQkJCSAgIGZiLmNBbHRlcm5hdGVGaWxlTmFtZSkgPT0gMAorCQkJCSAgICAmJiAoaW50KShwdHJ1ZVByZXYgLSBzelRydWVOYW1lKQorCQkJCQkgKyAoaW50KXN0cmxlbihmYi5jRmlsZU5hbWUpIDwgbGVuKSkpKQorCQkgICAgeworCQkJU1RSQ1BZKHB0cnVlUHJldiwgZmIuY0ZpbGVOYW1lKTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgRmluZENsb3NlKGhGaW5kKTsKKwkgICAgKnBvcmlnID0gYzsKKwkgICAgcHRydWUgPSBwdHJ1ZVByZXYgKyBzdHJsZW4ocHRydWVQcmV2KTsKKwl9CisgICAgfQorCisgICAgU1RSQ1BZKG5hbWUsIHN6VHJ1ZU5hbWUpOworfQorCisKKy8qCisgKiBJbnNlcnQgdXNlciBuYW1lIGluIHNbbGVuXS4KKyAqLworICAgIGludAorbWNoX2dldF91c2VyX25hbWUoCisgICAgY2hhcl91ICpzLAorICAgIGludCBsZW4pCit7CisgICAgY2hhciBzelVzZXJOYW1lW01BWF9DT01QVVRFUk5BTUVfTEVOR1RIICsgMV07CisgICAgRFdPUkQgY2NoID0gc2l6ZW9mIHN6VXNlck5hbWU7CisKKyAgICBpZiAoR2V0VXNlck5hbWUoc3pVc2VyTmFtZSwgJmNjaCkpCisgICAgeworCVNUUk5DUFkocywgc3pVc2VyTmFtZSwgbGVuKTsKKwlyZXR1cm4gT0s7CisgICAgfQorICAgIHNbMF0gPSBOVUw7CisgICAgcmV0dXJuIEZBSUw7Cit9CisKKworLyoKKyAqIEluc2VydCBob3N0IG5hbWUgaW4gc1tsZW5dLgorICovCisgICAgdm9pZAorbWNoX2dldF9ob3N0X25hbWUoCisgICAgY2hhcl91CSpzLAorICAgIGludAkJbGVuKQoreworICAgIERXT1JEIGNjaCA9IGxlbjsKKworICAgIGlmICghR2V0Q29tcHV0ZXJOYW1lKHMsICZjY2gpKQorICAgIHsKKwlTVFJOQ1BZKHMsICJQQyAoV2luMzIgVmltKSIsIGxlbik7CisJc1tsZW4gLSAxXSA9IE5VTDsJLyogbWFrZSBzdXJlIGl0J3MgdGVybWluYXRlZCAqLworICAgIH0KK30KKworCisvKgorICogcmV0dXJuIHByb2Nlc3MgSUQKKyAqLworICAgIGxvbmcKK21jaF9nZXRfcGlkKCkKK3sKKyAgICByZXR1cm4gKGxvbmcpR2V0Q3VycmVudFByb2Nlc3NJZCgpOworfQorCisKKy8qCisgKiBHZXQgbmFtZSBvZiBjdXJyZW50IGRpcmVjdG9yeSBpbnRvIGJ1ZmZlciAnYnVmJyBvZiBsZW5ndGggJ2xlbicgYnl0ZXMuCisgKiBSZXR1cm4gT0sgZm9yIHN1Y2Nlc3MsIEZBSUwgZm9yIGZhaWx1cmUuCisgKi8KKyAgICBpbnQKK21jaF9kaXJuYW1lKAorICAgIGNoYXJfdQkqYnVmLAorICAgIGludAkJbGVuKQoreworICAgIC8qCisgICAgICogT3JpZ2luYWxseSB0aGlzIHdhczoKKyAgICAgKiAgICByZXR1cm4gKGdldGN3ZChidWYsIGxlbikgIT0gTlVMTCA/IE9LIDogRkFJTCk7CisgICAgICogQnV0IHRoZSBXaW4zMnMga25vd24gYnVnIGxpc3Qgc2F5cyB0aGF0IGdldGN3ZCgpIGRvZXNuJ3Qgd29yaworICAgICAqIHNvIHVzZSB0aGUgV2luMzIgc3lzdGVtIGNhbGwgaW5zdGVhZC4gPE5lZ3JpPgorICAgICAqLworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoZW5jX2NvZGVwYWdlID49IDAgJiYgKGludClHZXRBQ1AoKSAhPSBlbmNfY29kZXBhZ2UpCisgICAgeworCVdDSEFSCXdidWZbX01BWF9QQVRIICsgMV07CisKKwlpZiAoR2V0Q3VycmVudERpcmVjdG9yeVcoX01BWF9QQVRILCB3YnVmKSAhPSAwKQorCXsKKwkgICAgY2hhcl91ICAqcCA9IHVjczJfdG9fZW5jKHdidWYsIE5VTEwpOworCisJICAgIGlmIChwICE9IE5VTEwpCisJICAgIHsKKwkJU1RSTkNQWShidWYsIHAsIGxlbiAtIDEpOworCQlidWZbbGVuIC0gMV0gPSBOVUw7CisJCXZpbV9mcmVlKHApOworCQlyZXR1cm4gT0s7CisJICAgIH0KKwl9CisJLyogUmV0cnkgd2l0aCBub24td2lkZSBmdW5jdGlvbiAoZm9yIFdpbmRvd3MgOTgpLiAqLworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiAoR2V0Q3VycmVudERpcmVjdG9yeShsZW4sIGJ1ZikgIT0gMCA/IE9LIDogRkFJTCk7Cit9CisKKy8qCisgKiBnZXQgZmlsZSBwZXJtaXNzaW9ucyBmb3IgYG5hbWUnCisgKiAtMSA6IGVycm9yCisgKiBlbHNlIEZJTEVfQVRUUklCVVRFXyogZGVmaW5lZCBpbiB3aW5udC5oCisgKi8KKyAgICBsb25nCittY2hfZ2V0cGVybSgKKyAgICBjaGFyX3UgKm5hbWUpCit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChlbmNfY29kZXBhZ2UgPj0gMCAmJiAoaW50KUdldEFDUCgpICE9IGVuY19jb2RlcGFnZSkKKyAgICB7CisJV0NIQVIJKnAgPSBlbmNfdG9fdWNzMihuYW1lLCBOVUxMKTsKKwlsb25nCW47CisKKwlpZiAocCAhPSBOVUxMKQorCXsKKwkgICAgbiA9IChsb25nKUdldEZpbGVBdHRyaWJ1dGVzVyhwKTsKKwkgICAgdmltX2ZyZWUocCk7CisJICAgIGlmIChuID49IDAgfHwgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpCisJCXJldHVybiBuOworCSAgICAvKiBSZXRyeSB3aXRoIG5vbi13aWRlIGZ1bmN0aW9uIChmb3IgV2luZG93cyA5OCkuICovCisJfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiAobG9uZylHZXRGaWxlQXR0cmlidXRlcygoY2hhciAqKW5hbWUpOworfQorCisKKy8qCisgKiBzZXQgZmlsZSBwZXJtaXNzaW9uIGZvciBgbmFtZScgdG8gYHBlcm0nCisgKi8KKyAgICBpbnQKK21jaF9zZXRwZXJtKAorICAgIGNoYXJfdSAqbmFtZSwKKyAgICBsb25nIHBlcm0pCit7CisgICAgcGVybSB8PSBGSUxFX0FUVFJJQlVURV9BUkNISVZFOwkvKiBmaWxlIGhhcyBjaGFuZ2VkLCBzZXQgYXJjaGl2ZSBiaXQgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGVuY19jb2RlcGFnZSA+PSAwICYmIChpbnQpR2V0QUNQKCkgIT0gZW5jX2NvZGVwYWdlKQorICAgIHsKKwlXQ0hBUgkqcCA9IGVuY190b191Y3MyKG5hbWUsIE5VTEwpOworCWxvbmcJbjsKKworCWlmIChwICE9IE5VTEwpCisJeworCSAgICBuID0gKGxvbmcpU2V0RmlsZUF0dHJpYnV0ZXNXKHAsIHBlcm0pOworCSAgICB2aW1fZnJlZShwKTsKKwkgICAgaWYgKG4gfHwgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpCisJCXJldHVybiBuID8gT0sgOiBGQUlMOworCSAgICAvKiBSZXRyeSB3aXRoIG5vbi13aWRlIGZ1bmN0aW9uIChmb3IgV2luZG93cyA5OCkuICovCisJfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBTZXRGaWxlQXR0cmlidXRlcygoY2hhciAqKW5hbWUsIHBlcm0pID8gT0sgOiBGQUlMOworfQorCisvKgorICogU2V0IGhpZGRlbiBmbGFnIGZvciAibmFtZSIuCisgKi8KKyAgICB2b2lkCittY2hfaGlkZShjaGFyX3UgKm5hbWUpCit7CisgICAgaW50CQlwZXJtOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBXQ0hBUgkqcCA9IE5VTEw7CisKKyAgICBpZiAoZW5jX2NvZGVwYWdlID49IDAgJiYgKGludClHZXRBQ1AoKSAhPSBlbmNfY29kZXBhZ2UpCisJcCA9IGVuY190b191Y3MyKG5hbWUsIE5VTEwpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKHAgIT0gTlVMTCkKKyAgICB7CisJcGVybSA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwKTsKKwlpZiAocGVybSA8IDAgJiYgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpCisJeworCSAgICAvKiBSZXRyeSB3aXRoIG5vbi13aWRlIGZ1bmN0aW9uIChmb3IgV2luZG93cyA5OCkuICovCisJICAgIHZpbV9mcmVlKHApOworCSAgICBwID0gTlVMTDsKKwl9CisgICAgfQorICAgIGlmIChwID09IE5VTEwpCisjZW5kaWYKKwlwZXJtID0gR2V0RmlsZUF0dHJpYnV0ZXMoKGNoYXIgKiluYW1lKTsKKyAgICBpZiAocGVybSA+PSAwKQorICAgIHsKKwlwZXJtIHw9IEZJTEVfQVRUUklCVVRFX0hJRERFTjsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKHAgIT0gTlVMTCkKKwl7CisJICAgIGlmIChTZXRGaWxlQXR0cmlidXRlc1cocCwgcGVybSkgPT0gMAorCQkgICAgJiYgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpCisJICAgIHsKKwkJLyogUmV0cnkgd2l0aCBub24td2lkZSBmdW5jdGlvbiAoZm9yIFdpbmRvd3MgOTgpLiAqLworCQl2aW1fZnJlZShwKTsKKwkJcCA9IE5VTEw7CisJICAgIH0KKwl9CisJaWYgKHAgPT0gTlVMTCkKKyNlbmRpZgorCSAgICBTZXRGaWxlQXR0cmlidXRlcygoY2hhciAqKW5hbWUsIHBlcm0pOworICAgIH0KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgdmltX2ZyZWUocCk7CisjZW5kaWYKK30KKworLyoKKyAqIHJldHVybiBUUlVFIGlmICJuYW1lIiBpcyBhIGRpcmVjdG9yeQorICogcmV0dXJuIEZBTFNFIGlmICJuYW1lIiBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgdXBvbiBlcnJvcgorICovCisgICAgaW50CittY2hfaXNkaXIoY2hhcl91ICpuYW1lKQoreworICAgIGludCBmID0gbWNoX2dldHBlcm0obmFtZSk7CisKKyAgICBpZiAoZiA9PSAtMSkKKwlyZXR1cm4gRkFMU0U7CQkgICAgLyogZmlsZSBkb2VzIG5vdCBleGlzdCBhdCBhbGwgKi8KKworICAgIHJldHVybiAoZiAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgIT0gMDsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGZpbGUgb3IgZGlyZWN0b3J5ICJuYW1lIiBpcyB3cml0YWJsZSAobm90IHJlYWRvbmx5KS4KKyAqIFN0cmFuZ2Ugc2VtYW50aWNzIG9mIFdpbjMyOiBhIHJlYWRvbmx5IGRpcmVjdG9yeSBpcyB3cml0YWJsZSwgYnV0IHlvdSBjYW4ndAorICogZGVsZXRlIGEgZmlsZS4gIExldCdzIHNheSB0aGlzIG1lYW5zIGl0IGlzIHdyaXRhYmxlLgorICovCisgICAgaW50CittY2hfd3JpdGFibGUoY2hhcl91ICpuYW1lKQoreworICAgIGludCBwZXJtID0gbWNoX2dldHBlcm0obmFtZSk7CisKKyAgICByZXR1cm4gKHBlcm0gIT0gLTEgJiYgKCEocGVybSAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKQorCQkJCSAgICAgICB8fCAocGVybSAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkpKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiAxIGlmICJuYW1lIiBjYW4gYmUgZXhlY3V0ZWQsIDAgaWYgbm90LgorICogUmV0dXJuIC0xIGlmIHVua25vd24uCisgKi8KKyAgICBpbnQKK21jaF9jYW5fZXhlKGNoYXJfdSAqbmFtZSkKK3sKKyAgICByZXR1cm4gZXhlY3V0YWJsZV9leGlzdHMoKGNoYXIgKiluYW1lKTsKK30KKyNlbmRpZgorCisvKgorICogQ2hlY2sgd2hhdCAibmFtZSIgaXM6CisgKiBOT0RFX05PUk1BTDogZmlsZSBvciBkaXJlY3RvcnkgKG9yIGRvZXNuJ3QgZXhpc3QpCisgKiBOT0RFX1dSSVRBQkxFOiB3cml0YWJsZSBkZXZpY2UsIHNvY2tldCwgZmlmbywgZXRjLgorICogTk9ERV9PVEhFUjogbm9uLXdyaXRhYmxlIHRoaW5ncworICovCisgICAgaW50CittY2hfbm9kZXR5cGUoY2hhcl91ICpuYW1lKQoreworICAgIEhBTkRMRQloRmlsZTsKKyAgICBpbnQJCXR5cGU7CisKKyAgICBoRmlsZSA9IENyZWF0ZUZpbGUobmFtZSwJCS8qIGZpbGUgbmFtZSAqLworCQlHRU5FUklDX1dSSVRFLAkJLyogYWNjZXNzIG1vZGUgKi8KKwkJMCwJCQkvKiBzaGFyZSBtb2RlICovCisJCU5VTEwsCQkJLyogc2VjdXJpdHkgZGVzY3JpcHRvciAqLworCQlPUEVOX0VYSVNUSU5HLAkJLyogY3JlYXRpb24gZGlzcG9zaXRpb24gKi8KKwkJMCwJCQkvKiBmaWxlIGF0dHJpYnV0ZXMgKi8KKwkJTlVMTCk7CQkJLyogaGFuZGxlIHRvIHRlbXBsYXRlIGZpbGUgKi8KKworICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwlyZXR1cm4gTk9ERV9OT1JNQUw7CisKKyAgICB0eXBlID0gR2V0RmlsZVR5cGUoaEZpbGUpOworICAgIENsb3NlSGFuZGxlKGhGaWxlKTsKKyAgICBpZiAodHlwZSA9PSBGSUxFX1RZUEVfQ0hBUikKKwlyZXR1cm4gTk9ERV9XUklUQUJMRTsKKyAgICBpZiAodHlwZSA9PSBGSUxFX1RZUEVfRElTSykKKwlyZXR1cm4gTk9ERV9OT1JNQUw7CisgICAgcmV0dXJuIE5PREVfT1RIRVI7Cit9CisKKyNpZmRlZiBIQVZFX0FDTAorc3RydWN0IG15X2FjbAoreworICAgIFBTRUNVUklUWV9ERVNDUklQVE9SICAgIHBTZWN1cml0eURlc2NyaXB0b3I7CisgICAgUFNJRAkJICAgIHBTaWRPd25lcjsKKyAgICBQU0lECQkgICAgcFNpZEdyb3VwOworICAgIFBBQ0wJCSAgICBwRGFjbDsKKyAgICBQQUNMCQkgICAgcFNhY2w7Cit9OworI2VuZGlmCisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBBQ0wgb2YgZmlsZSAiZm5hbWUiIGluIGFsbG9jYXRlZCBtZW1vcnkuCisgKiBSZXR1cm4gTlVMTCBpZiB0aGUgQUNMIGlzIG5vdCBhdmFpbGFibGUgZm9yIHdoYXRldmVyIHJlYXNvbi4KKyAqLworICAgIHZpbV9hY2xfVAorbWNoX2dldF9hY2woZm5hbWUpCisgICAgY2hhcl91CSpmbmFtZTsKK3sKKyNpZm5kZWYgSEFWRV9BQ0wKKyAgICByZXR1cm4gKHZpbV9hY2xfVClOVUxMOworI2Vsc2UKKyAgICBzdHJ1Y3QgbXlfYWNsICAgKnAgPSBOVUxMOworCisgICAgLyogVGhpcyBvbmx5IHdvcmtzIG9uIFdpbmRvd3MgTlQgYW5kIDIwMDAuICovCisgICAgaWYgKGdfUGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQgJiYgYWR2YXBpX2xpYiAhPSBOVUxMKQorICAgIHsKKwlwID0gKHN0cnVjdCBteV9hY2wgKilhbGxvY19jbGVhcigodW5zaWduZWQpc2l6ZW9mKHN0cnVjdCBteV9hY2wpKTsKKwlpZiAocCAhPSBOVUxMKQorCXsKKwkgICAgaWYgKHBHZXROYW1lZFNlY3VyaXR5SW5mbygKKwkJCShMUFRTVFIpZm5hbWUsCQkvLyBBYnN0cmFjdCBmaWxlbmFtZQorCQkJU0VfRklMRV9PQkpFQ1QsCQkvLyBGaWxlIE9iamVjdAorCQkJLy8gUmV0cmlldmUgdGhlIGVudGlyZSBzZWN1cml0eSBkZXNjcmlwdG9yLgorCQkJT1dORVJfU0VDVVJJVFlfSU5GT1JNQVRJT04gfAorCQkJR1JPVVBfU0VDVVJJVFlfSU5GT1JNQVRJT04gfAorCQkJREFDTF9TRUNVUklUWV9JTkZPUk1BVElPTiB8CisJCQlTQUNMX1NFQ1VSSVRZX0lORk9STUFUSU9OLAorCQkJJnAtPnBTaWRPd25lciwJCS8vIE93bmVyc2hpcCBpbmZvcm1hdGlvbi4KKwkJCSZwLT5wU2lkR3JvdXAsCQkvLyBHcm91cCBtZW1iZXJzaGlwLgorCQkJJnAtPnBEYWNsLAkJLy8gRGlzY3JldGlvbmFyeSBpbmZvcm1hdGlvbi4KKwkJCSZwLT5wU2FjbCwJCS8vIEZvciBhdWRpdGluZyBwdXJwb3Nlcy4KKwkJCSZwLT5wU2VjdXJpdHlEZXNjcmlwdG9yCisJCQkJICAgICkgIT0gRVJST1JfU1VDQ0VTUykKKwkgICAgeworCQltY2hfZnJlZV9hY2woKHZpbV9hY2xfVClwKTsKKwkJcCA9IE5VTEw7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgcmV0dXJuICh2aW1fYWNsX1QpcDsKKyNlbmRpZgorfQorCisvKgorICogU2V0IHRoZSBBQ0wgb2YgZmlsZSAiZm5hbWUiIHRvICJhY2wiICh1bmxlc3MgaXQncyBOVUxMKS4KKyAqIEVycm9ycyBhcmUgaWdub3JlZC4KKyAqIFRoaXMgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoICJhY2wiIGVxdWFsIHRvIHdoYXQgbWNoX2dldF9hY2woKSByZXR1cm5lZC4KKyAqLworICAgIHZvaWQKK21jaF9zZXRfYWNsKGZuYW1lLCBhY2wpCisgICAgY2hhcl91CSpmbmFtZTsKKyAgICB2aW1fYWNsX1QJYWNsOworeworI2lmZGVmIEhBVkVfQUNMCisgICAgc3RydWN0IG15X2FjbCAgICpwID0gKHN0cnVjdCBteV9hY2wgKilhY2w7CisKKyAgICBpZiAocCAhPSBOVUxMICYmIGFkdmFwaV9saWIgIT0gTlVMTCkKKwkodm9pZClwU2V0TmFtZWRTZWN1cml0eUluZm8oCisJCSAgICAoTFBUU1RSKWZuYW1lLAkJLy8gQWJzdHJhY3QgZmlsZW5hbWUKKwkJICAgIFNFX0ZJTEVfT0JKRUNULAkJLy8gRmlsZSBPYmplY3QKKwkJICAgIC8vIFJldHJpZXZlIHRoZSBlbnRpcmUgc2VjdXJpdHkgZGVzY3JpcHRvci4KKwkJICAgIE9XTkVSX1NFQ1VSSVRZX0lORk9STUFUSU9OIHwKKwkJCUdST1VQX1NFQ1VSSVRZX0lORk9STUFUSU9OIHwKKwkJCURBQ0xfU0VDVVJJVFlfSU5GT1JNQVRJT04gfAorCQkJU0FDTF9TRUNVUklUWV9JTkZPUk1BVElPTiwKKwkJICAgIHAtPnBTaWRPd25lciwJCS8vIE93bmVyc2hpcCBpbmZvcm1hdGlvbi4KKwkJICAgIHAtPnBTaWRHcm91cCwJCS8vIEdyb3VwIG1lbWJlcnNoaXAuCisJCSAgICBwLT5wRGFjbCwJCQkvLyBEaXNjcmV0aW9uYXJ5IGluZm9ybWF0aW9uLgorCQkgICAgcC0+cFNhY2wJCQkvLyBGb3IgYXVkaXRpbmcgcHVycG9zZXMuCisJCSAgICApOworI2VuZGlmCit9CisKKyAgICB2b2lkCittY2hfZnJlZV9hY2woYWNsKQorICAgIHZpbV9hY2xfVAlhY2w7Cit7CisjaWZkZWYgSEFWRV9BQ0wKKyAgICBzdHJ1Y3QgbXlfYWNsICAgKnAgPSAoc3RydWN0IG15X2FjbCAqKWFjbDsKKworICAgIGlmIChwICE9IE5VTEwpCisgICAgeworCUxvY2FsRnJlZShwLT5wU2VjdXJpdHlEZXNjcmlwdG9yKTsJLy8gRnJlZSB0aGUgbWVtb3J5IGp1c3QgaW4gY2FzZQorCXZpbV9mcmVlKHApOworICAgIH0KKyNlbmRpZgorfQorCisjaWZuZGVmIEZFQVRfR1VJX1czMgorCisvKgorICogaGFuZGxlciBmb3IgY3RybC1icmVhaywgY3RybC1jIGludGVycnVwdHMsIGFuZCBmYXRhbCBldmVudHMuCisgKi8KKyAgICBzdGF0aWMgQk9PTCBXSU5BUEkKK2hhbmRsZXJfcm91dGluZSgKKyAgICBEV09SRCBkd0N0cmxUeXBlKQoreworICAgIHN3aXRjaCAoZHdDdHJsVHlwZSkKKyAgICB7CisgICAgY2FzZSBDVFJMX0NfRVZFTlQ6CisJaWYgKGN0cmxfY19pbnRlcnJ1cHRzKQorCSAgICBnX2ZDdHJsQ1ByZXNzZWQgPSBUUlVFOworCXJldHVybiBUUlVFOworCisgICAgY2FzZSBDVFJMX0JSRUFLX0VWRU5UOgorCWdfZkNCcmtQcmVzc2VkCT0gVFJVRTsKKwlyZXR1cm4gVFJVRTsKKworICAgIC8qIGZhdGFsIGV2ZW50czogc2h1dCBkb3duIGdyYWNlZnVsbHkgKi8KKyAgICBjYXNlIENUUkxfQ0xPU0VfRVZFTlQ6CisgICAgY2FzZSBDVFJMX0xPR09GRl9FVkVOVDoKKyAgICBjYXNlIENUUkxfU0hVVERPV05fRVZFTlQ6CisJd2luZGdvdG8oKGludClSb3dzIC0gMSwgMCk7CisJZ19mRm9yY2VFeGl0ID0gVFJVRTsKKworCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIlZpbTogQ2F1Z2h0ICVzIGV2ZW50XG4iKSwKKwkJKGR3Q3RybFR5cGUgPT0gQ1RSTF9DTE9TRV9FVkVOVAorCQkgICAgID8gXygiY2xvc2UiKQorCQkgICAgIDogZHdDdHJsVHlwZSA9PSBDVFJMX0xPR09GRl9FVkVOVAorCQkJID8gXygibG9nb2ZmIikKKwkJCSA6IF8oInNodXRkb3duIikpKTsKKyNpZmRlZiBERUJVRworCU91dHB1dERlYnVnU3RyaW5nKElPYnVmZik7CisjZW5kaWYKKworCXByZXNlcnZlX2V4aXQoKTsJLyogb3V0cHV0IElPYnVmZiwgcHJlc2VydmUgZmlsZXMgYW5kIGV4aXQgKi8KKworCXJldHVybiBUUlVFOwkJLyogbm90IHJlYWNoZWQgKi8KKworICAgIGRlZmF1bHQ6CisJcmV0dXJuIEZBTFNFOworICAgIH0KK30KKworCisvKgorICogc2V0IHRoZSB0dHkgaW4gKHJhdykgPyAicmF3IiA6ICJjb29rZWQiIG1vZGUKKyAqLworICAgIHZvaWQKK21jaF9zZXR0bW9kZSgKKyAgICBpbnQgdG1vZGUpCit7CisgICAgRFdPUkQgY21vZGVpbjsKKyAgICBEV09SRCBjbW9kZW91dDsKKyAgICBCT09MIGJFbmFibGVIYW5kbGVyOworCisgICAgR2V0Q29uc29sZU1vZGUoZ19oQ29uSW4sICZjbW9kZWluKTsKKyAgICBHZXRDb25zb2xlTW9kZShnX2hDb25PdXQsICZjbW9kZW91dCk7CisgICAgaWYgKHRtb2RlID09IFRNT0RFX1JBVykKKyAgICB7CisJY21vZGVpbiAmPSB+KEVOQUJMRV9MSU5FX0lOUFVUIHwgRU5BQkxFX1BST0NFU1NFRF9JTlBVVCB8CisJCSAgICAgRU5BQkxFX0VDSE9fSU5QVVQpOworI2lmZGVmIEZFQVRfTU9VU0UKKwlpZiAoZ19mTW91c2VBY3RpdmUpCisJICAgIGNtb2RlaW4gfD0gRU5BQkxFX01PVVNFX0lOUFVUOworI2VuZGlmCisJY21vZGVvdXQgJj0gfihFTkFCTEVfUFJPQ0VTU0VEX09VVFBVVCB8IEVOQUJMRV9XUkFQX0FUX0VPTF9PVVRQVVQpOworCWJFbmFibGVIYW5kbGVyID0gVFJVRTsKKyAgICB9CisgICAgZWxzZSAvKiBjb29rZWQgKi8KKyAgICB7CisJY21vZGVpbiB8PSAoRU5BQkxFX0xJTkVfSU5QVVQgfCBFTkFCTEVfUFJPQ0VTU0VEX0lOUFVUIHwKKwkJICAgIEVOQUJMRV9FQ0hPX0lOUFVUKTsKKwljbW9kZW91dCB8PSAoRU5BQkxFX1BST0NFU1NFRF9PVVRQVVQgfCBFTkFCTEVfV1JBUF9BVF9FT0xfT1VUUFVUKTsKKwliRW5hYmxlSGFuZGxlciA9IEZBTFNFOworICAgIH0KKyAgICBTZXRDb25zb2xlTW9kZShnX2hDb25JbiwgY21vZGVpbik7CisgICAgU2V0Q29uc29sZU1vZGUoZ19oQ29uT3V0LCBjbW9kZW91dCk7CisgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyKGhhbmRsZXJfcm91dGluZSwgYkVuYWJsZUhhbmRsZXIpOworCisjaWZkZWYgTUNIX1dSSVRFX0RVTVAKKyAgICBpZiAoZmREdW1wKQorICAgIHsKKwlmcHJpbnRmKGZkRHVtcCwgIm1jaF9zZXR0bW9kZSglcywgaW4gPSAleCwgb3V0ID0gJXgpXG4iLAorCQl0bW9kZSA9PSBUTU9ERV9SQVcgPyAicmF3IiA6CisJCQkJICAgIHRtb2RlID09IFRNT0RFX0NPT0sgPyAiY29va2VkIiA6ICJub3JtYWwiLAorCQljbW9kZWluLCBjbW9kZW91dCk7CisJZmZsdXNoKGZkRHVtcCk7CisgICAgfQorI2VuZGlmCit9CisKKworLyoKKyAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgY3VycmVudCB3aW5kb3cgaW4gYFJvd3MnIGFuZCBgQ29sdW1ucycKKyAqIFJldHVybiBPSyB3aGVuIHNpemUgY291bGQgYmUgZGV0ZXJtaW5lZCwgRkFJTCBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK21jaF9nZXRfc2hlbGxzaXplKCkKK3sKKyAgICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBjc2JpOworCisgICAgaWYgKCFnX2ZUZXJtY2FwTW9kZSAmJiBnX2NiVGVybWNhcC5Jc1ZhbGlkKQorICAgIHsKKwkvKgorCSAqIEZvciBzb21lIHJlYXNvbiwgd2UgYXJlIHRyeWluZyB0byBnZXQgdGhlIHNjcmVlbiBkaW1lbnNpb25zCisJICogZXZlbiB0aG91Z2ggd2UgYXJlIG5vdCBpbiB0ZXJtY2FwIG1vZGUuICBUaGUgJ1Jvd3MnIGFuZCAnQ29sdW1ucycKKwkgKiB2YXJpYWJsZXMgYXJlIHJlYWxseSBpbnRlbmRlZCB0byBtZWFuIHRoZSBzaXplIG9mIFZpbSBzY3JlZW4KKwkgKiB3aGlsZSBpbiB0ZXJtY2FwIG1vZGUuCisJICovCisJUm93cyA9IGdfY2JUZXJtY2FwLkluZm8uZHdTaXplLlk7CisJQ29sdW1ucyA9IGdfY2JUZXJtY2FwLkluZm8uZHdTaXplLlg7CisgICAgfQorICAgIGVsc2UgaWYgKEdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvKGdfaENvbk91dCwgJmNzYmkpKQorICAgIHsKKwlSb3dzID0gY3NiaS5zcldpbmRvdy5Cb3R0b20gLSBjc2JpLnNyV2luZG93LlRvcCArIDE7CisJQ29sdW1ucyA9IGNzYmkuc3JXaW5kb3cuUmlnaHQgLSBjc2JpLnNyV2luZG93LkxlZnQgKyAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworCVJvd3MgPSAyNTsKKwlDb2x1bW5zID0gODA7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIFNldCBhIGNvbnNvbGUgd2luZG93IHRvIGB4U2l6ZScgKiBgeVNpemUnCisgKi8KKyAgICBzdGF0aWMgdm9pZAorUmVzaXplQ29uQnVmQW5kV2luZG93KAorICAgIEhBTkRMRSBoQ29uc29sZSwKKyAgICBpbnQgeFNpemUsCisgICAgaW50IHlTaXplKQoreworICAgIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIGNzYmk7CS8qIGhvbGQgY3VycmVudCBjb25zb2xlIGJ1ZmZlciBpbmZvICovCisgICAgU01BTExfUkVDVAkgICAgc3JXaW5kb3dSZWN0OwkvKiBob2xkIHRoZSBuZXcgY29uc29sZSBzaXplICovCisgICAgQ09PUkQJICAgIGNvb3JkU2NyZWVuOworCisjaWZkZWYgTUNIX1dSSVRFX0RVTVAKKyAgICBpZiAoZmREdW1wKQorICAgIHsKKwlmcHJpbnRmKGZkRHVtcCwgIlJlc2l6ZUNvbkJ1ZkFuZFdpbmRvdyglZCwgJWQpXG4iLCB4U2l6ZSwgeVNpemUpOworCWZmbHVzaChmZER1bXApOworICAgIH0KKyNlbmRpZgorCisgICAgLyogZ2V0IHRoZSBsYXJnZXN0IHNpemUgd2UgY2FuIHNpemUgdGhlIGNvbnNvbGUgd2luZG93IHRvICovCisgICAgY29vcmRTY3JlZW4gPSBHZXRMYXJnZXN0Q29uc29sZVdpbmRvd1NpemUoaENvbnNvbGUpOworCisgICAgLyogZGVmaW5lIHRoZSBuZXcgY29uc29sZSB3aW5kb3cgc2l6ZSBhbmQgc2Nyb2xsIHBvc2l0aW9uICovCisgICAgc3JXaW5kb3dSZWN0LkxlZnQgPSBzcldpbmRvd1JlY3QuVG9wID0gKFNIT1JUKSAwOworICAgIHNyV2luZG93UmVjdC5SaWdodCA9ICAoU0hPUlQpIChtaW4oeFNpemUsIGNvb3JkU2NyZWVuLlgpIC0gMSk7CisgICAgc3JXaW5kb3dSZWN0LkJvdHRvbSA9IChTSE9SVCkgKG1pbih5U2l6ZSwgY29vcmRTY3JlZW4uWSkgLSAxKTsKKworICAgIGlmIChHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhnX2hDb25PdXQsICZjc2JpKSkKKyAgICB7CisJaW50IHN4LCBzeTsKKworCXN4ID0gY3NiaS5zcldpbmRvdy5SaWdodCAtIGNzYmkuc3JXaW5kb3cuTGVmdCArIDE7CisJc3kgPSBjc2JpLnNyV2luZG93LkJvdHRvbSAtIGNzYmkuc3JXaW5kb3cuVG9wICsgMTsKKwlpZiAoc3kgPCB5U2l6ZSB8fCBzeCA8IHhTaXplKQorCXsKKwkgICAgLyoKKwkgICAgICogSW5jcmVhc2luZyBudW1iZXIgb2YgbGluZXMvY29sdW1ucywgZG8gYnVmZmVyIGZpcnN0LgorCSAgICAgKiBVc2UgdGhlIG1heGltYWwgc2l6ZSBpbiB4IGFuZCB5IGRpcmVjdGlvbi4KKwkgICAgICovCisJICAgIGlmIChzeSA8IHlTaXplKQorCQljb29yZFNjcmVlbi5ZID0geVNpemU7CisJICAgIGVsc2UKKwkJY29vcmRTY3JlZW4uWSA9IHN5OworCSAgICBpZiAoc3ggPCB4U2l6ZSkKKwkJY29vcmRTY3JlZW4uWCA9IHhTaXplOworCSAgICBlbHNlCisJCWNvb3JkU2NyZWVuLlggPSBzeDsKKwkgICAgU2V0Q29uc29sZVNjcmVlbkJ1ZmZlclNpemUoaENvbnNvbGUsIGNvb3JkU2NyZWVuKTsKKwl9CisgICAgfQorCisgICAgaWYgKCFTZXRDb25zb2xlV2luZG93SW5mbyhnX2hDb25PdXQsIFRSVUUsICZzcldpbmRvd1JlY3QpKQorICAgIHsKKyNpZmRlZiBNQ0hfV1JJVEVfRFVNUAorCWlmIChmZER1bXApCisJeworCSAgICBmcHJpbnRmKGZkRHVtcCwgIlNldENvbnNvbGVXaW5kb3dJbmZvIGZhaWxlZDogJWx4XG4iLAorCQkgICAgR2V0TGFzdEVycm9yKCkpOworCSAgICBmZmx1c2goZmREdW1wKTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBkZWZpbmUgdGhlIG5ldyBjb25zb2xlIGJ1ZmZlciBzaXplICovCisgICAgY29vcmRTY3JlZW4uWCA9IHhTaXplOworICAgIGNvb3JkU2NyZWVuLlkgPSB5U2l6ZTsKKworICAgIGlmICghU2V0Q29uc29sZVNjcmVlbkJ1ZmZlclNpemUoaENvbnNvbGUsIGNvb3JkU2NyZWVuKSkKKyAgICB7CisjaWZkZWYgTUNIX1dSSVRFX0RVTVAKKwlpZiAoZmREdW1wKQorCXsKKwkgICAgZnByaW50ZihmZER1bXAsICJTZXRDb25zb2xlU2NyZWVuQnVmZmVyU2l6ZSBmYWlsZWQ6ICVseFxuIiwKKwkJICAgIEdldExhc3RFcnJvcigpKTsKKwkgICAgZmZsdXNoKGZkRHVtcCk7CisJfQorI2VuZGlmCisgICAgfQorfQorCisKKy8qCisgKiBTZXQgdGhlIGNvbnNvbGUgd2luZG93IHRvIGBSb3dzJyAqIGBDb2x1bW5zJworICovCisgICAgdm9pZAorbWNoX3NldF9zaGVsbHNpemUoKQoreworICAgIENPT1JEIGNvb3JkU2NyZWVuOworCisgICAgLyogRG9uJ3QgY2hhbmdlIHdpbmRvdyBzaXplIHdoaWxlIHN0aWxsIHN0YXJ0aW5nIHVwICovCisgICAgaWYgKHN1cHByZXNzX3dpbnNpemUgIT0gMCkKKyAgICB7CisJc3VwcHJlc3Nfd2luc2l6ZSA9IDI7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmICh0ZXJtX2NvbnNvbGUpCisgICAgeworCWNvb3JkU2NyZWVuID0gR2V0TGFyZ2VzdENvbnNvbGVXaW5kb3dTaXplKGdfaENvbk91dCk7CisKKwkvKiBDbGFtcCBSb3dzIGFuZCBDb2x1bW5zIHRvIHJlYXNvbmFibGUgdmFsdWVzICovCisJaWYgKFJvd3MgPiBjb29yZFNjcmVlbi5ZKQorCSAgICBSb3dzID0gY29vcmRTY3JlZW4uWTsKKwlpZiAoQ29sdW1ucyA+IGNvb3JkU2NyZWVuLlgpCisJICAgIENvbHVtbnMgPSBjb29yZFNjcmVlbi5YOworCisJUmVzaXplQ29uQnVmQW5kV2luZG93KGdfaENvbk91dCwgQ29sdW1ucywgUm93cyk7CisgICAgfQorfQorCisvKgorICogUm93cyBhbmQvb3IgQ29sdW1ucyBoYXMgY2hhbmdlZC4KKyAqLworICAgIHZvaWQKK21jaF9uZXdfc2hlbGxzaXplKCkKK3sKKyAgICBzZXRfc2Nyb2xsX3JlZ2lvbigwLCAwLCBDb2x1bW5zIC0gMSwgUm93cyAtIDEpOworfQorCisKKy8qCisgKiBDYWxsZWQgd2hlbiBzdGFydGVkIHVwLCB0byBzZXQgdGhlIHdpbnNpemUgdGhhdCB3YXMgZGVsYXllZC4KKyAqLworICAgIHZvaWQKK21jaF9zZXRfd2luc2l6ZV9ub3coKQoreworICAgIGlmIChzdXBwcmVzc193aW5zaXplID09IDIpCisgICAgeworCXN1cHByZXNzX3dpbnNpemUgPSAwOworCW1jaF9zZXRfc2hlbGxzaXplKCk7CisJc2hlbGxfcmVzaXplZCgpOworICAgIH0KKyAgICBzdXBwcmVzc193aW5zaXplID0gMDsKK30KKyNlbmRpZiAvKiBGRUFUX0dVSV9XMzIgKi8KKworCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX1czMikgfHwgZGVmaW5lZChQUk9UTykKKworLyoKKyAqIFNwZWNpYWxpc2VkIHZlcnNpb24gb2Ygc3lzdGVtKCkgZm9yIFdpbjMyIEdVSSBtb2RlLgorICogVGhpcyB2ZXJzaW9uIHByb2NlZWRzIGFzIGZvbGxvd3M6CisgKiAgICAxLiBDcmVhdGUgYSBjb25zb2xlIHdpbmRvdyBmb3IgdXNlIGJ5IHRoZSBzdWJwcm9jZXNzCisgKiAgICAyLiBSdW4gdGhlIHN1YnByb2Nlc3MgKGl0IGdldHMgdGhlIGFsbG9jYXRlZCBjb25zb2xlIGJ5IGRlZmF1bHQpCisgKiAgICAzLiBXYWl0IGZvciB0aGUgc3VicHJvY2VzcyB0byB0ZXJtaW5hdGUgYW5kIGdldCBpdHMgZXhpdCBjb2RlCisgKiAgICA0LiBQcm9tcHQgdGhlIHVzZXIgdG8gcHJlc3MgYSBrZXkgdG8gY2xvc2UgdGhlIGNvbnNvbGUgd2luZG93CisgKi8KKyAgICBzdGF0aWMgaW50CittY2hfc3lzdGVtKGNoYXIgKmNtZCwgaW50IG9wdGlvbnMpCit7CisgICAgU1RBUlRVUElORk8JCXNpOworICAgIFBST0NFU1NfSU5GT1JNQVRJT04gcGk7CisgICAgRFdPUkQJCXJldCA9IDA7CisgICAgSFdORAkJaHduZCA9IEdldEZvY3VzKCk7CisKKyAgICBzaS5jYiA9IHNpemVvZihzaSk7CisgICAgc2kubHBSZXNlcnZlZCA9IE5VTEw7CisgICAgc2kubHBEZXNrdG9wID0gTlVMTDsKKyAgICBzaS5scFRpdGxlID0gTlVMTDsKKyAgICBzaS5kd0ZsYWdzID0gU1RBUlRGX1VTRVNIT1dXSU5ET1c7CisgICAgLyoKKyAgICAgKiBJdCdzIG5pY2VyIHRvIHJ1biBhIGZpbHRlciBjb21tYW5kIGluIGEgbWluaW1pemVkIHdpbmRvdywgYnV0IGluCisgICAgICogV2luZG93cyA5NSB0aGlzIG1ha2VzIHRoZSBjb21tYW5kIE1VQ0ggc2xvd2VyLiAgV2UgY2FuJ3QgZG8gaXQgdW5kZXIKKyAgICAgKiBXaW4zMnMgZWl0aGVyIGFzIGl0IHN0b3BzIHRoZSBzeW5jaHJvbm91cyBzcGF3biB3b3JrYXJvdW5kIHdvcmtpbmcuCisgICAgICovCisgICAgaWYgKChvcHRpb25zICYgU0hFTExfRE9PVVQpICYmICFtY2hfd2luZG93czk1KCkgJiYgIWd1aV9pc193aW4zMnMoKSkKKwlzaS53U2hvd1dpbmRvdyA9IFNXX1NIT1dNSU5JTUlaRUQ7CisgICAgZWxzZQorCXNpLndTaG93V2luZG93ID0gU1dfU0hPV05PUk1BTDsKKyAgICBzaS5jYlJlc2VydmVkMiA9IDA7CisgICAgc2kubHBSZXNlcnZlZDIgPSBOVUxMOworCisgICAgLyogVGhlcmUgaXMgYSBzdHJhbmdlIGVycm9yIG9uIFdpbmRvd3MgOTUgd2hlbiB1c2luZyAiYzpcXGNvbW1hbmQuY29tIi4KKyAgICAgKiBXaGVuIHRoZSAiYzpcXCIgaXMgbGVmdCBvdXQgaXQgd29ya3MgT0suLi4/ICovCisgICAgaWYgKG1jaF93aW5kb3dzOTUoKQorCSAgICAmJiAoU1RSTklDTVAoY21kLCAiYzovY29tbWFuZC5jb20iLCAxNCkgPT0gMAorCQl8fCBTVFJOSUNNUChjbWQsICJjOlxcY29tbWFuZC5jb20iLCAxNCkgPT0gMCkpCisJY21kICs9IDM7CisKKyAgICAvKiBOb3csIHJ1biB0aGUgY29tbWFuZCAqLworICAgIENyZWF0ZVByb2Nlc3MoTlVMTCwJCQkvKiBFeGVjdXRhYmxlIG5hbWUgKi8KKwkJICBjbWQsCQkJLyogQ29tbWFuZCB0byBleGVjdXRlICovCisJCSAgTlVMTCwJCQkvKiBQcm9jZXNzIHNlY3VyaXR5IGF0dHJpYnV0ZXMgKi8KKwkJICBOVUxMLAkJCS8qIFRocmVhZCBzZWN1cml0eSBhdHRyaWJ1dGVzICovCisJCSAgRkFMU0UsCQkvKiBJbmhlcml0IGhhbmRsZXMgKi8KKwkJICBDUkVBVEVfREVGQVVMVF9FUlJPUl9NT0RFIHwJLyogQ3JlYXRpb24gZmxhZ3MgKi8KKwkJCUNSRUFURV9ORVdfQ09OU09MRSwKKwkJICBOVUxMLAkJCS8qIEVudmlyb25tZW50ICovCisJCSAgTlVMTCwJCQkvKiBDdXJyZW50IGRpcmVjdG9yeSAqLworCQkgICZzaSwJCQkvKiBTdGFydHVwIGluZm9ybWF0aW9uICovCisJCSAgJnBpKTsJCQkvKiBQcm9jZXNzIGluZm9ybWF0aW9uICovCisKKworICAgIC8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIHRlcm1pbmF0ZSBiZWZvcmUgY29udGludWluZyAqLworICAgIGlmIChnX1BsYXRmb3JtSWQgIT0gVkVSX1BMQVRGT1JNX1dJTjMycykKKyAgICB7CisjaWZkZWYgRkVBVF9HVUkKKwlpbnQJICAgIGRlbGF5ID0gMTsKKworCS8qIEtlZXAgdXBkYXRpbmcgdGhlIHdpbmRvdyB3aGlsZSB3YWl0aW5nIGZvciB0aGUgc2hlbGwgdG8gZmluaXNoLiAqLworCWZvciAoOzspCisJeworCSAgICBNU0cJbXNnOworCisJICAgIGlmIChQZWVrTWVzc2FnZSgmbXNnLCAoSFdORClOVUxMLCAwLCAwLCBQTV9SRU1PVkUpKQorCSAgICB7CisJCVRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CisJCURpc3BhdGNoTWVzc2FnZSgmbXNnKTsKKwkgICAgfQorCSAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdChwaS5oUHJvY2VzcywgZGVsYXkpICE9IFdBSVRfVElNRU9VVCkKKwkJYnJlYWs7CisKKwkgICAgLyogV2Ugc3RhcnQgd2FpdGluZyBmb3IgYSB2ZXJ5IHNob3J0IHRpbWUgYW5kIHRoZW4gaW5jcmVhc2UgaXQsIHNvCisJICAgICAqIHRoYXQgd2UgcmVzcG9uZCBxdWlja2x5IHdoZW4gdGhlIHByb2Nlc3MgaXMgcXVpY2ssIGFuZCBkb24ndAorCSAgICAgKiBjb25zdW1lIHRvbyBtdWNoIG92ZXJoZWFkIHdoZW4gaXQncyBzbG93LiAqLworCSAgICBpZiAoZGVsYXkgPCA1MCkKKwkJZGVsYXkgKz0gMTA7CisJfQorI2Vsc2UKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHBpLmhQcm9jZXNzLCBJTkZJTklURSk7CisjZW5kaWYKKworCS8qIEdldCB0aGUgY29tbWFuZCBleGl0IGNvZGUgKi8KKwlHZXRFeGl0Q29kZVByb2Nlc3MocGkuaFByb2Nlc3MsICZyZXQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qCisJICogVGhpcyB1Z2x5IGNvZGUgaXMgdGhlIG9ubHkgcXVpY2sgd2F5IG9mIHBlcmZvcm1pbmcKKwkgKiBhIHN5bmNocm9ub3VzIHNwYXduIHVuZGVyIFdpbjMycy4gWXVrLgorCSAqLworCW51bV93aW5kb3dzID0gMDsKKwlFbnVtV2luZG93cyh3aW4zMnNzeW5jaF9jYiwgMCk7CisJb2xkX251bV93aW5kb3dzID0gbnVtX3dpbmRvd3M7CisJZG8KKwl7CisJICAgIFNsZWVwKDEwMDApOworCSAgICBudW1fd2luZG93cyA9IDA7CisJICAgIEVudW1XaW5kb3dzKHdpbjMyc3N5bmNoX2NiLCAwKTsKKwl9IHdoaWxlIChudW1fd2luZG93cyA9PSBvbGRfbnVtX3dpbmRvd3MpOworCXJldCA9IDA7CisgICAgfQorCisgICAgLyogQ2xvc2UgdGhlIGhhbmRsZXMgdG8gdGhlIHN1YnByb2Nlc3MsIHNvIHRoYXQgaXQgZ29lcyBhd2F5ICovCisgICAgQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7CisgICAgQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOworCisgICAgLyogVHJ5IHRvIGdldCBpbnB1dCBmb2N1cyBiYWNrLiAgRG9lc24ndCBhbHdheXMgd29yayB0aG91Z2guICovCisgICAgUG9zdE1lc3NhZ2UoaHduZCwgV01fU0VURk9DVVMsIDAsIDApOworCisgICAgcmV0dXJuIHJldDsKK30KKyNlbHNlCisKKyMgZGVmaW5lIG1jaF9zeXN0ZW0oYywgbykgc3lzdGVtKGMpCisKKyNlbmRpZgorCisvKgorICogRWl0aGVyIGV4ZWN1dGUgYSBjb21tYW5kIGJ5IGNhbGxpbmcgdGhlIHNoZWxsIG9yIHN0YXJ0IGEgbmV3IHNoZWxsCisgKi8KKyAgICBpbnQKK21jaF9jYWxsX3NoZWxsKAorICAgIGNoYXJfdSAqY21kLAorICAgIGludCBvcHRpb25zKQkvKiBTSEVMTF8qLCBzZWUgdmltLmggKi8KK3sKKyAgICBpbnQJCXggPSAwOworICAgIGludAkJdG1vZGUgPSBjdXJfdG1vZGU7CisjaWZkZWYgRkVBVF9USVRMRQorICAgIGNoYXIgc3pTaGVsbFRpdGxlWzUxMl07CisKKyAgICAvKiBDaGFuZ2UgdGhlIHRpdGxlIHRvIHJlZmxlY3QgdGhhdCB3ZSBhcmUgaW4gYSBzdWJzaGVsbC4gKi8KKyAgICBpZiAoR2V0Q29uc29sZVRpdGxlKHN6U2hlbGxUaXRsZSwgc2l6ZW9mKHN6U2hlbGxUaXRsZSkgLSA0KSA+IDApCisgICAgeworCWlmIChjbWQgPT0gTlVMTCkKKwkgICAgc3RyY2F0KHN6U2hlbGxUaXRsZSwgIiA6c2giKTsKKwllbHNlCisJeworCSAgICBzdHJjYXQoc3pTaGVsbFRpdGxlLCAiIC0gISIpOworCSAgICBpZiAoKHN0cmxlbihzelNoZWxsVGl0bGUpICsgc3RybGVuKGNtZCkgPCBzaXplb2Yoc3pTaGVsbFRpdGxlKSkpCisJCXN0cmNhdChzelNoZWxsVGl0bGUsIGNtZCk7CisJfQorCW1jaF9zZXR0aXRsZShzelNoZWxsVGl0bGUsIE5VTEwpOworICAgIH0KKyNlbmRpZgorCisgICAgb3V0X2ZsdXNoKCk7CisKKyNpZmRlZiBNQ0hfV1JJVEVfRFVNUAorICAgIGlmIChmZER1bXApCisgICAgeworCWZwcmludGYoZmREdW1wLCAibWNoX2NhbGxfc2hlbGwoXCIlc1wiLCAlZClcbiIsIGNtZCwgb3B0aW9ucyk7CisJZmZsdXNoKGZkRHVtcCk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIENhdGNoIGFsbCBkZWFkbHkgc2lnbmFscyB3aGlsZSBydW5uaW5nIHRoZSBleHRlcm5hbCBjb21tYW5kLCBiZWNhdXNlIGEKKyAgICAgKiBDVFJMLUMsIEN0cmwtQnJlYWsgb3IgaWxsZWdhbCBpbnN0cnVjdGlvbiAgbWlnaHQgb3RoZXJ3aXNlIGtpbGwgdXMuCisgICAgICovCisgICAgc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19NSU5HVzMyX18pCisgICAgc2lnbmFsKFNJR0tJTEwsIFNJR19JR04pOworI2Vsc2UKKyAgICBzaWduYWwoU0lHQlJFQUssIFNJR19JR04pOworI2VuZGlmCisgICAgc2lnbmFsKFNJR0lMTCwgU0lHX0lHTik7CisgICAgc2lnbmFsKFNJR0ZQRSwgU0lHX0lHTik7CisgICAgc2lnbmFsKFNJR1NFR1YsIFNJR19JR04pOworICAgIHNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsKKyAgICBzaWduYWwoU0lHQUJSVCwgU0lHX0lHTik7CisKKyAgICBpZiAob3B0aW9ucyAmIFNIRUxMX0NPT0tFRCkKKwlzZXR0bW9kZShUTU9ERV9DT09LKTsJLyogc2V0IHRvIG5vcm1hbCBtb2RlICovCisKKyAgICBpZiAoY21kID09IE5VTEwpCisgICAgeworCXggPSBtY2hfc3lzdGVtKHBfc2gsIG9wdGlvbnMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIHdlIHVzZSAiY29tbWFuZCIgb3IgImNtZCIgdG8gc3RhcnQgdGhlIHNoZWxsOyBzbG93IGJ1dCBlYXN5ICovCisJY2hhcl91ICpuZXdjbWQ7CisKKwluZXdjbWQgPSBsYWxsb2MoKGxvbmdfdSkgKAorI2lmZGVmIEZFQVRfR1VJX1czMgorCQlTVFJMRU4odmltcnVuX3BhdGgpICsKKyNlbmRpZgorCQlTVFJMRU4ocF9zaCkgKyBTVFJMRU4ocF9zaGNmKSArIFNUUkxFTihjbWQpICsgMTApLCBUUlVFKTsKKwlpZiAobmV3Y21kICE9IE5VTEwpCisJeworCSAgICBjaGFyX3UgKmNtZGJhc2UgPSAoKmNtZCA9PSAnIicgPyBjbWQgKyAxIDogY21kKTsKKworCSAgICBpZiAoKFNUUk5JQ01QKGNtZGJhc2UsICJzdGFydCIsIDUpID09IDApICYmIHZpbV9pc3doaXRlKGNtZGJhc2VbNV0pKQorCSAgICB7CisJCVNUQVJUVVBJTkZPCQlzaTsKKwkJUFJPQ0VTU19JTkZPUk1BVElPTglwaTsKKworCQlzaS5jYiA9IHNpemVvZihzaSk7CisJCXNpLmxwUmVzZXJ2ZWQgPSBOVUxMOworCQlzaS5scERlc2t0b3AgPSBOVUxMOworCQlzaS5scFRpdGxlID0gTlVMTDsKKwkJc2kuZHdGbGFncyA9IDA7CisJCXNpLmNiUmVzZXJ2ZWQyID0gMDsKKwkJc2kubHBSZXNlcnZlZDIgPSBOVUxMOworCisJCWNtZGJhc2UgPSBza2lwd2hpdGUoY21kYmFzZSArIDUpOworCQlpZiAoKFNUUk5JQ01QKGNtZGJhc2UsICIvbWluIiwgNCkgPT0gMCkKKwkJCSYmIHZpbV9pc3doaXRlKGNtZGJhc2VbNF0pKQorCQl7CisJCSAgICBjbWRiYXNlID0gc2tpcHdoaXRlKGNtZGJhc2UgKyA0KTsKKwkJICAgIHNpLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU0hPV1dJTkRPVzsKKwkJICAgIHNpLndTaG93V2luZG93ID0gU1dfU0hPV01JTk5PQUNUSVZFOworCQl9CisKKwkJLyogV2hlbiB0aGUgY29tbWFuZCBpcyBpbiBkb3VibGUgcXVvdGVzLCBidXQgJ3NoZWxseHF1b3RlJyBpcworCQkgKiBlbXB0eSwga2VlcCB0aGUgZG91YmxlIHF1b3RlcyBhcm91bmQgdGhlIGNvbW1hbmQuCisJCSAqIE90aGVyd2lzZSByZW1vdmUgdGhlIGRvdWJsZSBxdW90ZXMsIHRoZXkgYXJlbid0IG5lZWRlZAorCQkgKiBoZXJlLCBiZWNhdXNlIHdlIGRvbid0IHVzZSBhIHNoZWxsIHRvIHJ1biB0aGUgY29tbWFuZC4gKi8KKwkJaWYgKCpjbWQgPT0gJyInICYmICpwX3N4cSA9PSBOVUwpCisJCXsKKwkJICAgIG5ld2NtZFswXSA9ICciJzsKKwkJICAgIFNUUkNQWShuZXdjbWQgKyAxLCBjbWRiYXNlKTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIFNUUkNQWShuZXdjbWQsIGNtZGJhc2UpOworCQkgICAgaWYgKCpjbWQgPT0gJyInICYmICpuZXdjbWQgIT0gTlVMKQorCQkJbmV3Y21kW1NUUkxFTihuZXdjbWQpIC0gMV0gPSBOVUw7CisJCX0KKworCQkvKgorCQkgKiBOb3csIHN0YXJ0IHRoZSBjb21tYW5kIGFzIGEgcHJvY2Vzcywgc28gdGhhdCBpdCBkb2Vzbid0CisJCSAqIGluaGVyaXQgb3VyIGhhbmRsZXMgd2hpY2ggY2F1c2VzIHVucGxlYXNhbnQgZGFuZ2xpbmcgc3dhcAorCQkgKiBmaWxlcyBpZiB3ZSBleGl0IGJlZm9yZSB0aGUgc3Bhd25lZCBwcm9jZXNzCisJCSAqLworCQlpZiAoQ3JlYXRlUHJvY2VzcyAoTlVMTCwJLy8gRXhlY3V0YWJsZSBuYW1lCisJCQluZXdjbWQsCQkJLy8gQ29tbWFuZCB0byBleGVjdXRlCisJCQlOVUxMLAkJCS8vIFByb2Nlc3Mgc2VjdXJpdHkgYXR0cmlidXRlcworCQkJTlVMTCwJCQkvLyBUaHJlYWQgc2VjdXJpdHkgYXR0cmlidXRlcworCQkJRkFMU0UsCQkJLy8gSW5oZXJpdCBoYW5kbGVzCisJCQlDUkVBVEVfTkVXX0NPTlNPTEUsCS8vIENyZWF0aW9uIGZsYWdzCisJCQlOVUxMLAkJCS8vIEVudmlyb25tZW50CisJCQlOVUxMLAkJCS8vIEN1cnJlbnQgZGlyZWN0b3J5CisJCQkmc2ksCQkJLy8gU3RhcnR1cCBpbmZvcm1hdGlvbgorCQkJJnBpKSkJCQkvLyBQcm9jZXNzIGluZm9ybWF0aW9uCisJCSAgICB4ID0gMDsKKwkJZWxzZQorCQl7CisJCSAgICB4ID0gLTE7CisjaWZkZWYgRkVBVF9HVUlfVzMyCisJCSAgICBFTVNHKF8oIkUzNzE6IENvbW1hbmQgbm90IGZvdW5kIikpOworI2VuZGlmCisJCX0KKwkJLyogQ2xvc2UgdGhlIGhhbmRsZXMgdG8gdGhlIHN1YnByb2Nlc3MsIHNvIHRoYXQgaXQgZ29lcyBhd2F5ICovCisJCUNsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOworCQlDbG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisjaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpCisJCWlmIChuZWVkX3ZpbXJ1bl93YXJuaW5nKQorCQl7CisJCSAgICBNZXNzYWdlQm94KE5VTEwsCisJCQkgICAgXygiVklNUlVOLkVYRSBub3QgZm91bmQgaW4geW91ciAkUEFUSC5cbiIKKwkJCQkiRXh0ZXJuYWwgY29tbWFuZHMgd2lsbCBub3QgcGF1c2UgYWZ0ZXIgY29tcGxldGlvbi5cbiIKKwkJCQkiU2VlICA6aGVscCB3aW4zMi12aW1ydW4gIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpLAorCQkJICAgIF8oIlZpbSBXYXJuaW5nIiksCisJCQkgICAgTUJfSUNPTldBUk5JTkcpOworCQkgICAgbmVlZF92aW1ydW5fd2FybmluZyA9IEZBTFNFOworCQl9CisJCWlmICghc19kb250X3VzZV92aW1ydW4pCisJCSAgICAvKiBVc2UgdmltcnVuIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQuICBJdCBvcGVucyBhIGNvbnNvbGUKKwkJICAgICAqIHdpbmRvdywgd2hpY2ggY2FuIGJlIGNsb3NlZCB3aXRob3V0IGtpbGxpbmcgVmltLiAqLworCQkgICAgc3ByaW50ZigoY2hhciAqKW5ld2NtZCwgIiVzJXMlcyAlcyAlcyIsCisJCQkgICAgdmltcnVuX3BhdGgsCisJCQkgICAgKG1zZ19zaWxlbnQgIT0gMCB8fCAob3B0aW9ucyAmIFNIRUxMX0RPT1VUKSkKKwkJCQkJCQkJID8gIi1zICIgOiAiIiwKKwkJCSAgICBwX3NoLCBwX3NoY2YsIGNtZCk7CisJCWVsc2UKKyNlbmRpZgorCQkgICAgc3ByaW50ZigoY2hhciAqKW5ld2NtZCwgIiVzICVzICVzIiwgcF9zaCwgcF9zaGNmLCBjbWQpOworCQl4ID0gbWNoX3N5c3RlbSgoY2hhciAqKW5ld2NtZCwgb3B0aW9ucyk7CisJICAgIH0KKwkgICAgdmltX2ZyZWUobmV3Y21kKTsKKwl9CisgICAgfQorCisgICAgaWYgKHRtb2RlID09IFRNT0RFX1JBVykKKwlzZXR0bW9kZShUTU9ERV9SQVcpOwkvKiBzZXQgdG8gcmF3IG1vZGUgKi8KKworICAgIC8qIFByaW50IHRoZSByZXR1cm4gdmFsdWUsIHVubGVzcyAidmltcnVuIiB3YXMgdXNlZC4gKi8KKyAgICBpZiAoeCAhPSAwICYmICEob3B0aW9ucyAmIFNIRUxMX1NJTEVOVCkgJiYgIWVtc2dfc2lsZW50CisjaWYgZGVmaW5lZChGRUFUX0dVSV9XMzIpCisJCSYmICgob3B0aW9ucyAmIFNIRUxMX0RPT1VUKSB8fCBzX2RvbnRfdXNlX3ZpbXJ1bikKKyNlbmRpZgorCSAgICApCisgICAgeworCXNtc2coXygic2hlbGwgcmV0dXJuZWQgJWQiKSwgeCk7CisJbXNnX3B1dGNoYXIoJ1xuJyk7CisgICAgfQorI2lmZGVmIEZFQVRfVElUTEUKKyAgICByZXNldHRpdGxlKCk7CisjZW5kaWYKKworICAgIHNpZ25hbChTSUdJTlQsIFNJR19ERkwpOworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgIHNpZ25hbChTSUdLSUxMLCBTSUdfREZMKTsKKyNlbHNlCisgICAgc2lnbmFsKFNJR0JSRUFLLCBTSUdfREZMKTsKKyNlbmRpZgorICAgIHNpZ25hbChTSUdJTEwsIFNJR19ERkwpOworICAgIHNpZ25hbChTSUdGUEUsIFNJR19ERkwpOworICAgIHNpZ25hbChTSUdTRUdWLCBTSUdfREZMKTsKKyAgICBzaWduYWwoU0lHVEVSTSwgU0lHX0RGTCk7CisgICAgc2lnbmFsKFNJR0FCUlQsIFNJR19ERkwpOworCisgICAgcmV0dXJuIHg7Cit9CisKKworI2lmbmRlZiBGRUFUX0dVSV9XMzIKKworLyoKKyAqIFN0YXJ0IHRlcm1jYXAgbW9kZQorICovCisgICAgc3RhdGljIHZvaWQKK3Rlcm1jYXBfbW9kZV9zdGFydCh2b2lkKQoreworICAgIERXT1JEIGNtb2RlaW47CisKKyAgICBpZiAoZ19mVGVybWNhcE1vZGUpCisJcmV0dXJuOworCisgICAgU2F2ZUNvbnNvbGVCdWZmZXIoJmdfY2JOb25UZXJtY2FwKTsKKworICAgIGlmIChnX2NiVGVybWNhcC5Jc1ZhbGlkKQorICAgIHsKKwkvKgorCSAqIFdlJ3ZlIGJlZW4gaW4gdGVybWNhcCBtb2RlIGJlZm9yZS4gIFJlc3RvcmUgY2VydGFpbiBzY3JlZW4KKwkgKiBjaGFyYWN0ZXJpc3RpY3MsIGluY2x1ZGluZyB0aGUgYnVmZmVyIHNpemUgYW5kIHRoZSB3aW5kb3cKKwkgKiBzaXplLiAgU2luY2Ugd2Ugd2lsbCBiZSByZWRyYXdpbmcgdGhlIHNjcmVlbiwgd2UgZG9uJ3QgbmVlZAorCSAqIHRvIHJlc3RvcmUgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGUgYnVmZmVyLgorCSAqLworCVJlc3RvcmVDb25zb2xlQnVmZmVyKCZnX2NiVGVybWNhcCwgRkFMU0UpOworCVNldENvbnNvbGVXaW5kb3dJbmZvKGdfaENvbk91dCwgVFJVRSwgJmdfY2JUZXJtY2FwLkluZm8uc3JXaW5kb3cpOworCVJvd3MgPSBnX2NiVGVybWNhcC5JbmZvLmR3U2l6ZS5ZOworCUNvbHVtbnMgPSBnX2NiVGVybWNhcC5JbmZvLmR3U2l6ZS5YOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qCisJICogVGhpcyBpcyBvdXIgZmlyc3QgdGltZSBlbnRlcmluZyB0ZXJtY2FwIG1vZGUuICBDbGVhciB0aGUgY29uc29sZQorCSAqIHNjcmVlbiBidWZmZXIsIGFuZCByZXNpemUgdGhlIGJ1ZmZlciB0byBtYXRjaCB0aGUgY3VycmVudCB3aW5kb3cKKwkgKiBzaXplLiAgV2Ugd2lsbCB1c2UgdGhpcyBhcyB0aGUgc2l6ZSBvZiBvdXIgZWRpdGluZyBlbnZpcm9ubWVudC4KKwkgKi8KKwlDbGVhckNvbnNvbGVCdWZmZXIoZ19hdHRyQ3VycmVudCk7CisJUmVzaXplQ29uQnVmQW5kV2luZG93KGdfaENvbk91dCwgQ29sdW1ucywgUm93cyk7CisgICAgfQorCisjaWZkZWYgRkVBVF9USVRMRQorICAgIHJlc2V0dGl0bGUoKTsKKyNlbmRpZgorCisgICAgR2V0Q29uc29sZU1vZGUoZ19oQ29uSW4sICZjbW9kZWluKTsKKyNpZmRlZiBGRUFUX01PVVNFCisgICAgaWYgKGdfZk1vdXNlQWN0aXZlKQorCWNtb2RlaW4gfD0gRU5BQkxFX01PVVNFX0lOUFVUOworICAgIGVsc2UKKwljbW9kZWluICY9IH5FTkFCTEVfTU9VU0VfSU5QVVQ7CisjZW5kaWYKKyAgICBjbW9kZWluIHw9IEVOQUJMRV9XSU5ET1dfSU5QVVQ7CisgICAgU2V0Q29uc29sZU1vZGUoZ19oQ29uSW4sIGNtb2RlaW4pOworCisgICAgcmVkcmF3X2xhdGVyX2NsZWFyKCk7CisgICAgZ19mVGVybWNhcE1vZGUgPSBUUlVFOworfQorCisKKy8qCisgKiBFbmQgdGVybWNhcCBtb2RlCisgKi8KKyAgICBzdGF0aWMgdm9pZAordGVybWNhcF9tb2RlX2VuZCh2b2lkKQoreworICAgIERXT1JEIGNtb2RlaW47CisgICAgQ29uc29sZUJ1ZmZlciAqY2I7CisgICAgQ09PUkQgY29vcmQ7CisgICAgRFdPUkQgZHdEdW1teTsKKworICAgIGlmICghZ19mVGVybWNhcE1vZGUpCisJcmV0dXJuOworCisgICAgU2F2ZUNvbnNvbGVCdWZmZXIoJmdfY2JUZXJtY2FwKTsKKworICAgIEdldENvbnNvbGVNb2RlKGdfaENvbkluLCAmY21vZGVpbik7CisgICAgY21vZGVpbiAmPSB+KEVOQUJMRV9NT1VTRV9JTlBVVCB8IEVOQUJMRV9XSU5ET1dfSU5QVVQpOworICAgIFNldENvbnNvbGVNb2RlKGdfaENvbkluLCBjbW9kZWluKTsKKworI2lmZGVmIEZFQVRfUkVTVE9SRV9PUklHX1NDUkVFTgorICAgIGNiID0gZXhpdGluZyA/ICZnX2NiT3JpZyA6ICZnX2NiTm9uVGVybWNhcDsKKyNlbHNlCisgICAgY2IgPSAmZ19jYk5vblRlcm1jYXA7CisjZW5kaWYKKyAgICBSZXN0b3JlQ29uc29sZUJ1ZmZlcihjYiwgcF9ycyk7CisgICAgU2V0Q29uc29sZUN1cnNvckluZm8oZ19oQ29uT3V0LCAmZ19jY2kpOworCisgICAgaWYgKHBfcnMgfHwgZXhpdGluZykKKyAgICB7CisJLyoKKwkgKiBDbGVhciBhbnl0aGluZyB0aGF0IGhhcHBlbnMgdG8gYmUgb24gdGhlIGN1cnJlbnQgbGluZS4KKwkgKi8KKwljb29yZC5YID0gMDsKKwljb29yZC5ZID0gKFNIT1JUKSAocF9ycyA/IGNiLT5JbmZvLmR3Q3Vyc29yUG9zaXRpb24uWSA6IChSb3dzIC0gMSkpOworCUZpbGxDb25zb2xlT3V0cHV0Q2hhcmFjdGVyKGdfaENvbk91dCwgJyAnLAorCQljYi0+SW5mby5kd1NpemUuWCwgY29vcmQsICZkd0R1bW15KTsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaXMganVzdCBmb3IgYWVzdGhldGljcy4gIElmIHdlIGFyZSBleGl0aW5nIHdpdGhvdXQKKwkgKiByZXN0b3JpbmcgdGhlIHNjcmVlbiwgdGhlbiB3ZSB3YW50IHRvIGhhdmUgYSBwcm9tcHQgc3RyaW5nCisJICogYXBwZWFyIGF0IHRoZSBib3R0b20gbGluZS4gIEhvd2V2ZXIsIHRoZSBjb21tYW5kIGludGVycHJldGVyCisJICogc2VlbXMgdG8gYWx3YXlzIGFkdmFuY2UgdGhlIGN1cnNvciBvbmUgbGluZSBiZWZvcmUgZGlzcGxheWluZworCSAqIHRoZSBwcm9tcHQgc3RyaW5nLCB3aGljaCBjYXVzZXMgdGhlIHNjcmVlbiB0byBzY3JvbGwuICBUbworCSAqIGNvdW50ZXIgdGhpcywgbW92ZSB0aGUgY3Vyc29yIHVwIG9uZSBsaW5lIGJlZm9yZSBleGl0aW5nLgorCSAqLworCWlmIChleGl0aW5nICYmICFwX3JzKQorCSAgICBjb29yZC5ZLS07CisJLyoKKwkgKiBQb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBsZWZ0bW9zdCBjb2x1bW4gb2YgdGhlIGRlc2lyZWQgcm93LgorCSAqLworCVNldENvbnNvbGVDdXJzb3JQb3NpdGlvbihnX2hDb25PdXQsIGNvb3JkKTsKKyAgICB9CisKKyAgICBnX2ZUZXJtY2FwTW9kZSA9IEZBTFNFOworfQorI2VuZGlmIC8qIEZFQVRfR1VJX1czMiAqLworCisKKyNpZmRlZiBGRUFUX0dVSV9XMzIKKyAgICB2b2lkCittY2hfd3JpdGUoCisgICAgY2hhcl91ICAqcywKKyAgICBpbnQJICAgIGxlbikKK3sKKyAgICAvKiBuZXZlciB1c2VkICovCit9CisKKyNlbHNlCisKKy8qCisgKiBjbGVhciBgbicgY2hhcnMsIHN0YXJ0aW5nIGZyb20gYGNvb3JkJworICovCisgICAgc3RhdGljIHZvaWQKK2NsZWFyX2NoYXJzKAorICAgIENPT1JEIGNvb3JkLAorICAgIERXT1JEIG4pCit7CisgICAgRFdPUkQgZHdEdW1teTsKKworICAgIEZpbGxDb25zb2xlT3V0cHV0Q2hhcmFjdGVyKGdfaENvbk91dCwgJyAnLCBuLCBjb29yZCwgJmR3RHVtbXkpOworICAgIEZpbGxDb25zb2xlT3V0cHV0QXR0cmlidXRlKGdfaENvbk91dCwgZ19hdHRyQ3VycmVudCwgbiwgY29vcmQsICZkd0R1bW15KTsKK30KKworCisvKgorICogQ2xlYXIgdGhlIHNjcmVlbgorICovCisgICAgc3RhdGljIHZvaWQKK2NsZWFyX3NjcmVlbih2b2lkKQoreworICAgIGdfY29vcmQuWCA9IGdfY29vcmQuWSA9IDA7CisgICAgY2xlYXJfY2hhcnMoZ19jb29yZCwgUm93cyAqIENvbHVtbnMpOworfQorCisKKy8qCisgKiBDbGVhciB0byBlbmQgb2YgZGlzcGxheQorICovCisgICAgc3RhdGljIHZvaWQKK2NsZWFyX3RvX2VuZF9vZl9kaXNwbGF5KHZvaWQpCit7CisgICAgY2xlYXJfY2hhcnMoZ19jb29yZCwgKFJvd3MgLSBnX2Nvb3JkLlkgLSAxKQorCQkJCQkgICAqIENvbHVtbnMgKyAoQ29sdW1ucyAtIGdfY29vcmQuWCkpOworfQorCisKKy8qCisgKiBDbGVhciB0byBlbmQgb2YgbGluZQorICovCisgICAgc3RhdGljIHZvaWQKK2NsZWFyX3RvX2VuZF9vZl9saW5lKHZvaWQpCit7CisgICAgY2xlYXJfY2hhcnMoZ19jb29yZCwgQ29sdW1ucyAtIGdfY29vcmQuWCk7Cit9CisKKworLyoKKyAqIFNjcm9sbCB0aGUgc2Nyb2xsIHJlZ2lvbiB1cCBieSBgY0xpbmVzJyBsaW5lcworICovCisgICAgc3RhdGljIHZvaWQKK3Njcm9sbCgKKyAgICB1bnNpZ25lZCBjTGluZXMpCit7CisgICAgQ09PUkQgb2xkY29vcmQgPSBnX2Nvb3JkOworCisgICAgZ290b3h5KGdfc3JTY3JvbGxSZWdpb24uTGVmdCArIDEsIGdfc3JTY3JvbGxSZWdpb24uVG9wICsgMSk7CisgICAgZGVsZXRlX2xpbmVzKGNMaW5lcyk7CisKKyAgICBnX2Nvb3JkID0gb2xkY29vcmQ7Cit9CisKKworLyoKKyAqIFNldCB0aGUgc2Nyb2xsIHJlZ2lvbgorICovCisgICAgc3RhdGljIHZvaWQKK3NldF9zY3JvbGxfcmVnaW9uKAorICAgIHVuc2lnbmVkIGxlZnQsCisgICAgdW5zaWduZWQgdG9wLAorICAgIHVuc2lnbmVkIHJpZ2h0LAorICAgIHVuc2lnbmVkIGJvdHRvbSkKK3sKKyAgICBpZiAobGVmdCA+PSByaWdodAorCSAgICB8fCB0b3AgPj0gYm90dG9tCisJICAgIHx8IHJpZ2h0ID4gKHVuc2lnbmVkKSBDb2x1bW5zIC0gMQorCSAgICB8fCBib3R0b20gPiAodW5zaWduZWQpIFJvd3MgLSAxKQorCXJldHVybjsKKworICAgIGdfc3JTY3JvbGxSZWdpb24uTGVmdCA9ICAgbGVmdDsKKyAgICBnX3NyU2Nyb2xsUmVnaW9uLlRvcCA9ICAgIHRvcDsKKyAgICBnX3NyU2Nyb2xsUmVnaW9uLlJpZ2h0ID0gIHJpZ2h0OworICAgIGdfc3JTY3JvbGxSZWdpb24uQm90dG9tID0gYm90dG9tOworfQorCisKKy8qCisgKiBJbnNlcnQgYGNMaW5lcycgbGluZXMgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5zZXJ0X2xpbmVzKAorICAgIHVuc2lnbmVkIGNMaW5lcykKK3sKKyAgICBTTUFMTF9SRUNUCSAgICBzb3VyY2U7CisgICAgQ09PUkQJICAgIGRlc3Q7CisgICAgQ0hBUl9JTkZPCSAgICBmaWxsOworCisgICAgZGVzdC5YID0gMDsKKyAgICBkZXN0LlkgPSBnX2Nvb3JkLlkgKyBjTGluZXM7CisKKyAgICBzb3VyY2UuTGVmdCAgID0gMDsKKyAgICBzb3VyY2UuVG9wCSAgPSBnX2Nvb3JkLlk7CisgICAgc291cmNlLlJpZ2h0ICA9IGdfc3JTY3JvbGxSZWdpb24uUmlnaHQ7CisgICAgc291cmNlLkJvdHRvbSA9IGdfc3JTY3JvbGxSZWdpb24uQm90dG9tIC0gY0xpbmVzOworCisgICAgZmlsbC5DaGFyLkFzY2lpQ2hhciA9ICcgJzsKKyAgICBmaWxsLkF0dHJpYnV0ZXMgPSBnX2F0dHJDdXJyZW50OworCisgICAgU2Nyb2xsQ29uc29sZVNjcmVlbkJ1ZmZlcihnX2hDb25PdXQsICZzb3VyY2UsIE5VTEwsIGRlc3QsICZmaWxsKTsKKworICAgIC8qIEhlcmUgd2UgaGF2ZSB0byBkZWFsIHdpdGggYSB3aW4zMiBjb25zb2xlIGZsYWtlOiBJZiB0aGUgc2Nyb2xsCisgICAgICogcmVnaW9uIGxvb2tzIGxpa2UgYWJjIGFuZCB3ZSBzY3JvbGwgYyB0byBhIGFuZCBmaWxsIHdpdGggZCB3ZSBnZXQKKyAgICAgKiBjYmQuLi4gaWYgd2Ugc2Nyb2xsIGJsb2NrIGMgb25lIGxpbmUgYXQgYSB0aW1lIHRvIGEsIHdlIGdldCBjZGQuLi4KKyAgICAgKiB2aW0gZXhwZWN0cyBjZGQgY29uc2lzdGVudGx5Li4uIFNvIHdlIGhhdmUgdG8gZGVhbCB3aXRoIHRoYXQKKyAgICAgKiBoZXJlLi4uICh0aGlzIGFsc28gb2NjdXJzIHNjcm9sbGluZyB0aGUgc2FtZSB3YXkgaW4gdGhlIG90aGVyCisgICAgICogZGlyZWN0aW9uKS4gICovCisKKyAgICBpZiAoc291cmNlLkJvdHRvbSA8IGRlc3QuWSkKKyAgICB7CisJQ09PUkQgY29vcmQ7CisKKwljb29yZC5YID0gMDsKKwljb29yZC5ZID0gc291cmNlLkJvdHRvbTsKKwljbGVhcl9jaGFycyhjb29yZCwgQ29sdW1ucyAqIChkZXN0LlkgLSBzb3VyY2UuQm90dG9tKSk7CisgICAgfQorfQorCisKKy8qCisgKiBEZWxldGUgYGNMaW5lcycgbGluZXMgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZGVsZXRlX2xpbmVzKAorICAgIHVuc2lnbmVkIGNMaW5lcykKK3sKKyAgICBTTUFMTF9SRUNUCSAgICBzb3VyY2U7CisgICAgQ09PUkQJICAgIGRlc3Q7CisgICAgQ0hBUl9JTkZPCSAgICBmaWxsOworICAgIGludAkJICAgIG5iOworCisgICAgZGVzdC5YID0gMDsKKyAgICBkZXN0LlkgPSBnX2Nvb3JkLlk7CisKKyAgICBzb3VyY2UuTGVmdCAgID0gMDsKKyAgICBzb3VyY2UuVG9wCSAgPSBnX2Nvb3JkLlkgKyBjTGluZXM7CisgICAgc291cmNlLlJpZ2h0ICA9IGdfc3JTY3JvbGxSZWdpb24uUmlnaHQ7CisgICAgc291cmNlLkJvdHRvbSA9IGdfc3JTY3JvbGxSZWdpb24uQm90dG9tOworCisgICAgZmlsbC5DaGFyLkFzY2lpQ2hhciA9ICcgJzsKKyAgICBmaWxsLkF0dHJpYnV0ZXMgPSBnX2F0dHJDdXJyZW50OworCisgICAgU2Nyb2xsQ29uc29sZVNjcmVlbkJ1ZmZlcihnX2hDb25PdXQsICZzb3VyY2UsIE5VTEwsIGRlc3QsICZmaWxsKTsKKworICAgIC8qIEhlcmUgd2UgaGF2ZSB0byBkZWFsIHdpdGggYSB3aW4zMiBjb25zb2xlIGZsYWtlOiBJZiB0aGUgc2Nyb2xsCisgICAgICogcmVnaW9uIGxvb2tzIGxpa2UgYWJjIGFuZCB3ZSBzY3JvbGwgYyB0byBhIGFuZCBmaWxsIHdpdGggZCB3ZSBnZXQKKyAgICAgKiBjYmQuLi4gaWYgd2Ugc2Nyb2xsIGJsb2NrIGMgb25lIGxpbmUgYXQgYSB0aW1lIHRvIGEsIHdlIGdldCBjZGQuLi4KKyAgICAgKiB2aW0gZXhwZWN0cyBjZGQgY29uc2lzdGVudGx5Li4uIFNvIHdlIGhhdmUgdG8gZGVhbCB3aXRoIHRoYXQKKyAgICAgKiBoZXJlLi4uICh0aGlzIGFsc28gb2NjdXJzIHNjcm9sbGluZyB0aGUgc2FtZSB3YXkgaW4gdGhlIG90aGVyCisgICAgICogZGlyZWN0aW9uKS4gICovCisKKyAgICBuYiA9IGRlc3QuWSArIChzb3VyY2UuQm90dG9tIC0gc291cmNlLlRvcCkgKyAxOworCisgICAgaWYgKG5iIDwgc291cmNlLlRvcCkKKyAgICB7CisJQ09PUkQgY29vcmQ7CisKKwljb29yZC5YID0gMDsKKwljb29yZC5ZID0gbmI7CisJY2xlYXJfY2hhcnMoY29vcmQsIENvbHVtbnMgKiAoc291cmNlLlRvcCAtIG5iKSk7CisgICAgfQorfQorCisKKy8qCisgKiBTZXQgdGhlIGN1cnNvciBwb3NpdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2dvdG94eSgKKyAgICB1bnNpZ25lZCB4LAorICAgIHVuc2lnbmVkIHkpCit7CisgICAgaWYgKHggPCAxIHx8IHggPiAodW5zaWduZWQpQ29sdW1ucyB8fCB5IDwgMSB8fCB5ID4gKHVuc2lnbmVkKVJvd3MpCisJcmV0dXJuOworCisgICAgLyogZXh0ZXJuYWwgY3Vyc29yIGNvb3JkcyBhcmUgMS1iYXNlZDsgaW50ZXJuYWwgYXJlIDAtYmFzZWQgKi8KKyAgICBnX2Nvb3JkLlggPSB4IC0gMTsKKyAgICBnX2Nvb3JkLlkgPSB5IC0gMTsKKyAgICBTZXRDb25zb2xlQ3Vyc29yUG9zaXRpb24oZ19oQ29uT3V0LCBnX2Nvb3JkKTsKK30KKworCisvKgorICogU2V0IHRoZSBjdXJyZW50IHRleHQgYXR0cmlidXRlID0gKGZvcmVncm91bmQgfCBiYWNrZ3JvdW5kKQorICogU2VlIC4uL2RvYy9vc193aW4zMi50eHQgZm9yIHRoZSBudW1iZXJzLgorICovCisgICAgc3RhdGljIHZvaWQKK3RleHRhdHRyKAorICAgIFdPUkQgd0F0dHIpCit7CisgICAgZ19hdHRyQ3VycmVudCA9IHdBdHRyOworCisgICAgU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUoZ19oQ29uT3V0LCB3QXR0cik7Cit9CisKKworICAgIHN0YXRpYyB2b2lkCit0ZXh0Y29sb3IoCisgICAgV09SRCB3QXR0cikKK3sKKyAgICBnX2F0dHJDdXJyZW50ID0gKGdfYXR0ckN1cnJlbnQgJiAweGYwKSArIHdBdHRyOworCisgICAgU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUoZ19oQ29uT3V0LCBnX2F0dHJDdXJyZW50KTsKK30KKworCisgICAgc3RhdGljIHZvaWQKK3RleHRiYWNrZ3JvdW5kKAorICAgIFdPUkQgd0F0dHIpCit7CisgICAgZ19hdHRyQ3VycmVudCA9IChnX2F0dHJDdXJyZW50ICYgMHgwZikgKyAod0F0dHIgPDwgNCk7CisKKyAgICBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZShnX2hDb25PdXQsIGdfYXR0ckN1cnJlbnQpOworfQorCisKKy8qCisgKiByZXN0b3JlIHRoZSBkZWZhdWx0IHRleHQgYXR0cmlidXRlICh3aGF0ZXZlciB3ZSBzdGFydGVkIHdpdGgpCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbm9ybXZpZGVvKCkKK3sKKyAgICB0ZXh0YXR0cihnX2F0dHJEZWZhdWx0KTsKK30KKworCitzdGF0aWMgV09SRCBnX2F0dHJQcmVTdGFuZG91dCA9IDA7CisKKy8qCisgKiBNYWtlIHRoZSB0ZXh0IHN0YW5kb3V0LCBieSBicmlnaHRlbmluZyBpdAorICovCisgICAgc3RhdGljIHZvaWQKK3N0YW5kb3V0KHZvaWQpCit7CisgICAgZ19hdHRyUHJlU3RhbmRvdXQgPSBnX2F0dHJDdXJyZW50OworICAgIHRleHRhdHRyKChXT1JEKSAoZ19hdHRyQ3VycmVudHxGT1JFR1JPVU5EX0lOVEVOU0lUWXxCQUNLR1JPVU5EX0lOVEVOU0lUWSkpOworfQorCisKKy8qCisgKiBUdXJuIG9mZiBzdGFuZG91dCBtb2RlCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3RhbmRlbmQoKQoreworICAgIGlmIChnX2F0dHJQcmVTdGFuZG91dCkKKyAgICB7CisJdGV4dGF0dHIoZ19hdHRyUHJlU3RhbmRvdXQpOworCWdfYXR0clByZVN0YW5kb3V0ID0gMDsKKyAgICB9Cit9CisKKworLyoKKyAqIFNldCBub3JtYWwgZmcvYmcgY29sb3IsIGJhc2VkIG9uIFRfTUUuICBDYWxsZWQgd2hlbSB0X21lIGhhcyBiZWVuIHNldC4KKyAqLworICAgIHZvaWQKK21jaF9zZXRfbm9ybWFsX2NvbG9ycygpCit7CisgICAgY2hhcl91CSpwOworICAgIGludAkJbjsKKworICAgIGN0ZXJtX25vcm1hbF9mZ19jb2xvciA9IChnX2F0dHJEZWZhdWx0ICYgMHhmKSArIDE7CisgICAgY3Rlcm1fbm9ybWFsX2JnX2NvbG9yID0gKChnX2F0dHJEZWZhdWx0ID4+IDQpICYgMHhmKSArIDE7CisgICAgaWYgKFRfTUVbMF0gPT0gRVNDICYmIFRfTUVbMV0gPT0gJ3wnKQorICAgIHsKKwlwID0gVF9NRSArIDI7CisJbiA9IGdldGRpZ2l0cygmcCk7CisJaWYgKCpwID09ICdtJyAmJiBuID4gMCkKKwl7CisJICAgIGN0ZXJtX25vcm1hbF9mZ19jb2xvciA9IChuICYgMHhmKSArIDE7CisJICAgIGN0ZXJtX25vcm1hbF9iZ19jb2xvciA9ICgobiA+PiA0KSAmIDB4ZikgKyAxOworCX0KKyAgICB9Cit9CisKKworLyoKKyAqIHZpc3VhbCBiZWxsOiBmbGFzaCB0aGUgc2NyZWVuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordmlzdWFsX2JlbGwoKQoreworICAgIENPT1JEICAgY29vcmRPcmlnaW4gPSB7MCwgMH07CisgICAgV09SRCAgICBhdHRyRmxhc2ggPSB+Z19hdHRyQ3VycmVudCAmIDB4ZmY7CisKKyAgICBEV09SRCAgIGR3RHVtbXk7CisgICAgTFBXT1JEICBvbGRhdHRycyA9IChMUFdPUkQpYWxsb2MoUm93cyAqIENvbHVtbnMgKiBzaXplb2YoV09SRCkpOworCisgICAgaWYgKG9sZGF0dHJzID09IE5VTEwpCisJcmV0dXJuOworICAgIFJlYWRDb25zb2xlT3V0cHV0QXR0cmlidXRlKGdfaENvbk91dCwgb2xkYXR0cnMsIFJvd3MgKiBDb2x1bW5zLAorCQkJICAgICAgIGNvb3JkT3JpZ2luLCAmZHdEdW1teSk7CisgICAgRmlsbENvbnNvbGVPdXRwdXRBdHRyaWJ1dGUoZ19oQ29uT3V0LCBhdHRyRmxhc2gsIFJvd3MgKiBDb2x1bW5zLAorCQkJICAgICAgIGNvb3JkT3JpZ2luLCAmZHdEdW1teSk7CisKKyAgICBTbGVlcCgxNSk7CSAgICAvKiB3YWl0IGZvciAxNSBtc2VjICovCisgICAgV3JpdGVDb25zb2xlT3V0cHV0QXR0cmlidXRlKGdfaENvbk91dCwgb2xkYXR0cnMsIFJvd3MgKiBDb2x1bW5zLAorCQkJCWNvb3JkT3JpZ2luLCAmZHdEdW1teSk7CisgICAgdmltX2ZyZWUob2xkYXR0cnMpOworfQorCisKKy8qCisgKiBNYWtlIHRoZSBjdXJzb3IgdmlzaWJsZSBvciBpbnZpc2libGUKKyAqLworICAgIHN0YXRpYyB2b2lkCitjdXJzb3JfdmlzaWJsZSgKKyAgICBCT09MIGZWaXNpYmxlKQoreworICAgIHNfY3Vyc29yX3Zpc2libGUgPSBmVmlzaWJsZTsKKyNpZmRlZiBNQ0hfQ1VSU09SX1NIQVBFCisgICAgbWNoX3VwZGF0ZV9jdXJzb3IoKTsKKyNlbmRpZgorfQorCisKKy8qCisgKiB3cml0ZSBgY2NoVG9Xcml0ZScgY2hhcmFjdGVycyBpbiBgcGNoQnVmJyB0byB0aGUgc2NyZWVuCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY3R1YWxseSB3cml0dGVuIChhdCBsZWFzdCBvbmUpLgorICovCisgICAgc3RhdGljIEJPT0wKK3dyaXRlX2NoYXJzKAorICAgIExQQ1NUUiBwY2hCdWYsCisgICAgRFdPUkQgIGNjaFRvV3JpdGUpCit7CisgICAgQ09PUkQgY29vcmQgPSBnX2Nvb3JkOworICAgIERXT1JEIHdyaXR0ZW47CisKKyAgICBGaWxsQ29uc29sZU91dHB1dEF0dHJpYnV0ZShnX2hDb25PdXQsIGdfYXR0ckN1cnJlbnQsIGNjaFRvV3JpdGUsCisJCQkJY29vcmQsICZ3cml0dGVuKTsKKyAgICAvKiBXaGVuIHdyaXRpbmcgZmFpbHMgb3IgZGlkbid0IHdyaXRlIGEgc2luZ2xlIGNoYXJhY3RlciwgcHJldGVuZCBvbmUKKyAgICAgKiBjaGFyYWN0ZXIgd2FzIHdyaXR0ZW4sIG90aGVyd2lzZSB3ZSBnZXQgc3R1Y2suICovCisgICAgaWYgKFdyaXRlQ29uc29sZU91dHB1dENoYXJhY3RlcihnX2hDb25PdXQsIHBjaEJ1ZiwgY2NoVG9Xcml0ZSwKKwkJCQljb29yZCwgJndyaXR0ZW4pID09IDAKKwkgICAgfHwgd3JpdHRlbiA9PSAwKQorCXdyaXR0ZW4gPSAxOworCisgICAgZ19jb29yZC5YICs9IChTSE9SVCkgd3JpdHRlbjsKKworICAgIHdoaWxlIChnX2Nvb3JkLlggPiBnX3NyU2Nyb2xsUmVnaW9uLlJpZ2h0KQorICAgIHsKKwlnX2Nvb3JkLlggLT0gKFNIT1JUKSBDb2x1bW5zOworCWlmIChnX2Nvb3JkLlkgPCBnX3NyU2Nyb2xsUmVnaW9uLkJvdHRvbSkKKwkgICAgZ19jb29yZC5ZKys7CisgICAgfQorCisgICAgZ290b3h5KGdfY29vcmQuWCArIDEsIGdfY29vcmQuWSArIDEpOworCisgICAgcmV0dXJuIHdyaXR0ZW47Cit9CisKKworLyoKKyAqIG1jaF93cml0ZSgpOiB3cml0ZSB0aGUgb3V0cHV0IGJ1ZmZlciB0byB0aGUgc2NyZWVuLCB0cmFuc2xhdGluZyBFU0MKKyAqIHNlcXVlbmNlcyBpbnRvIGNhbGxzIHRvIGNvbnNvbGUgb3V0cHV0IHJvdXRpbmVzLgorICovCisgICAgdm9pZAorbWNoX3dyaXRlKAorICAgIGNoYXJfdSAgKnMsCisgICAgaW50CSAgICBsZW4pCit7CisgICAgc1tsZW5dID0gTlVMOworCisgICAgaWYgKCF0ZXJtX2NvbnNvbGUpCisgICAgeworCXdyaXRlKDEsIHMsICh1bnNpZ25lZClsZW4pOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiB0cmFuc2xhdGUgRVNDIHwgc2VxdWVuY2VzIGludG8gZmFrZWQgYmlvcyBjYWxscyAqLworICAgIHdoaWxlIChsZW4tLSkKKyAgICB7CisJLyogb3B0aW1pemF0aW9uOiB1c2Ugb25lIHNpbmdsZSB3cml0ZV9jaGFycyBmb3IgcnVucyBvZiB0ZXh0LAorCSAqIHJhdGhlciB0aGFuIG9uY2UgcGVyIGNoYXJhY3RlciAgSXQgYWluJ3QgY3Vyc2VzLCBidXQgaXQgaGVscHMuICovCisJRFdPUkQgIHByZWZpeCA9IHN0cmNzcG4ocywgIlxuXHJcYlxhXDAzMyIpOworCisJaWYgKHBfd2QpCisJeworCSAgICBXYWl0Rm9yQ2hhcihwX3dkKTsKKwkgICAgaWYgKHByZWZpeCAhPSAwKQorCQlwcmVmaXggPSAxOworCX0KKworCWlmIChwcmVmaXggIT0gMCkKKwl7CisJICAgIERXT1JEIG5Xcml0dGVuOworCisJICAgIG5Xcml0dGVuID0gd3JpdGVfY2hhcnMocywgcHJlZml4KTsKKyNpZmRlZiBNQ0hfV1JJVEVfRFVNUAorCSAgICBpZiAoZmREdW1wKQorCSAgICB7CisJCWZwdXRjKCc+JywgZmREdW1wKTsKKwkJZndyaXRlKHMsIHNpemVvZihjaGFyX3UpLCBuV3JpdHRlbiwgZmREdW1wKTsKKwkJZnB1dHMoIjxcbiIsIGZkRHVtcCk7CisJICAgIH0KKyNlbmRpZgorCSAgICBsZW4gLT0gKG5Xcml0dGVuIC0gMSk7CisJICAgIHMgKz0gbldyaXR0ZW47CisJfQorCWVsc2UgaWYgKHNbMF0gPT0gJ1xuJykKKwl7CisJICAgIC8qIFxuLCBuZXdsaW5lOiBnbyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUgb3Igc2Nyb2xsICovCisJICAgIGlmIChnX2Nvb3JkLlkgPT0gZ19zclNjcm9sbFJlZ2lvbi5Cb3R0b20pCisJICAgIHsKKwkJc2Nyb2xsKDEpOworCQlnb3RveHkoZ19zclNjcm9sbFJlZ2lvbi5MZWZ0ICsgMSwgZ19zclNjcm9sbFJlZ2lvbi5Cb3R0b20gKyAxKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJZ290b3h5KGdfc3JTY3JvbGxSZWdpb24uTGVmdCArIDEsIGdfY29vcmQuWSArIDIpOworCSAgICB9CisjaWZkZWYgTUNIX1dSSVRFX0RVTVAKKwkgICAgaWYgKGZkRHVtcCkKKwkJZnB1dHMoIlxcblxuIiwgZmREdW1wKTsKKyNlbmRpZgorCSAgICBzKys7CisJfQorCWVsc2UgaWYgKHNbMF0gPT0gJ1xyJykKKwl7CisJICAgIC8qIFxyLCBjYXJyaWFnZSByZXR1cm46IGdvIHRvIGJlZ2lubmluZyBvZiBsaW5lICovCisJICAgIGdvdG94eShnX3NyU2Nyb2xsUmVnaW9uLkxlZnQrMSwgZ19jb29yZC5ZICsgMSk7CisjaWZkZWYgTUNIX1dSSVRFX0RVTVAKKwkgICAgaWYgKGZkRHVtcCkKKwkJZnB1dHMoIlxcclxuIiwgZmREdW1wKTsKKyNlbmRpZgorCSAgICBzKys7CisJfQorCWVsc2UgaWYgKHNbMF0gPT0gJ1xiJykKKwl7CisJICAgIC8qIFxiLCBiYWNrc3BhY2U6IG1vdmUgY3Vyc29yIG9uZSBwb3NpdGlvbiBsZWZ0ICovCisJICAgIGlmIChnX2Nvb3JkLlggPiBnX3NyU2Nyb2xsUmVnaW9uLkxlZnQpCisJCWdfY29vcmQuWC0tOworCSAgICBlbHNlIGlmIChnX2Nvb3JkLlkgPiBnX3NyU2Nyb2xsUmVnaW9uLlRvcCkKKwkgICAgeworCQlnX2Nvb3JkLlggPSBnX3NyU2Nyb2xsUmVnaW9uLlJpZ2h0OworCQlnX2Nvb3JkLlktLTsKKwkgICAgfQorCSAgICBnb3RveHkoZ19jb29yZC5YICsgMSwgZ19jb29yZC5ZICsgMSk7CisjaWZkZWYgTUNIX1dSSVRFX0RVTVAKKwkgICAgaWYgKGZkRHVtcCkKKwkJZnB1dHMoIlxcYlxuIiwgZmREdW1wKTsKKyNlbmRpZgorCSAgICBzKys7CisJfQorCWVsc2UgaWYgKHNbMF0gPT0gJ1xhJykKKwl7CisJICAgIC8qIFxhLCBiZWxsICovCisJICAgIE1lc3NhZ2VCZWVwKDB4RkZGRkZGRkYpOworI2lmZGVmIE1DSF9XUklURV9EVU1QCisJICAgIGlmIChmZER1bXApCisJCWZwdXRzKCJcXGFcbiIsIGZkRHVtcCk7CisjZW5kaWYKKwkgICAgcysrOworCX0KKwllbHNlIGlmIChzWzBdID09IEVTQyAmJiBsZW4gPj0gMy0xICYmIHNbMV0gPT0gJ3wnKQorCXsKKyNpZmRlZiBNQ0hfV1JJVEVfRFVNUAorCSAgICBjaGFyX3UqIG9sZF9zID0gczsKKyNlbmRpZgorCSAgICBjaGFyX3UqIHA7CisJICAgIGludCBhcmcxID0gMCwgYXJnMiA9IDA7CisKKwkgICAgc3dpdGNoIChzWzJdKQorCSAgICB7CisJICAgIC8qIG9uZSBvciB0d28gbnVtZXJpYyBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSAnOycgKi8KKworCSAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJcCA9IHMgKyAyOworCQlhcmcxID0gZ2V0ZGlnaXRzKCZwKTsJICAgIC8qIG5vIGNoZWNrIGZvciBsZW5ndGghICovCisJCWlmIChwID4gcyArIGxlbikKKwkJICAgIGJyZWFrOworCisJCWlmICgqcCA9PSAnOycpCisJCXsKKwkJICAgICsrcDsKKwkJICAgIGFyZzIgPSBnZXRkaWdpdHMoJnApOyAgIC8qIG5vIGNoZWNrIGZvciBsZW5ndGghICovCisJCSAgICBpZiAocCA+IHMgKyBsZW4pCisJCQlicmVhazsKKworCQkgICAgaWYgKCpwID09ICdIJykKKwkJCWdvdG94eShhcmcyLCBhcmcxKTsKKwkJICAgIGVsc2UgaWYgKCpwID09ICdyJykKKwkJCXNldF9zY3JvbGxfcmVnaW9uKDAsIGFyZzEgLSAxLCBDb2x1bW5zIC0gMSwgYXJnMiAtIDEpOworCQl9CisJCWVsc2UgaWYgKCpwID09ICdBJykKKwkJeworCQkgICAgLyogbW92ZSBjdXJzb3IgdXAgYXJnMSBsaW5lcyBpbiBzYW1lIGNvbHVtbiAqLworCQkgICAgZ290b3h5KGdfY29vcmQuWCArIDEsCisJCQkgICBtYXgoZ19zclNjcm9sbFJlZ2lvbi5Ub3AsIGdfY29vcmQuWSAtIGFyZzEpICsgMSk7CisJCX0KKwkJZWxzZSBpZiAoKnAgPT0gJ0MnKQorCQl7CisJCSAgICAvKiBtb3ZlIGN1cnNvciByaWdodCBhcmcxIGNvbHVtbnMgaW4gc2FtZSBsaW5lICovCisJCSAgICBnb3RveHkobWluKGdfc3JTY3JvbGxSZWdpb24uUmlnaHQsIGdfY29vcmQuWCArIGFyZzEpICsgMSwKKwkJCSAgIGdfY29vcmQuWSArIDEpOworCQl9CisJCWVsc2UgaWYgKCpwID09ICdIJykKKwkJeworCQkgICAgZ290b3h5KDEsIGFyZzEpOworCQl9CisJCWVsc2UgaWYgKCpwID09ICdMJykKKwkJeworCQkgICAgaW5zZXJ0X2xpbmVzKGFyZzEpOworCQl9CisJCWVsc2UgaWYgKCpwID09ICdtJykKKwkJeworCQkgICAgaWYgKGFyZzEgPT0gMCkKKwkJCW5vcm12aWRlbygpOworCQkgICAgZWxzZQorCQkJdGV4dGF0dHIoKFdPUkQpIGFyZzEpOworCQl9CisJCWVsc2UgaWYgKCpwID09ICdmJykKKwkJeworCQkgICAgdGV4dGNvbG9yKChXT1JEKSBhcmcxKTsKKwkJfQorCQllbHNlIGlmICgqcCA9PSAnYicpCisJCXsKKwkJICAgIHRleHRiYWNrZ3JvdW5kKChXT1JEKSBhcmcxKTsKKwkJfQorCQllbHNlIGlmICgqcCA9PSAnTScpCisJCXsKKwkJICAgIGRlbGV0ZV9saW5lcyhhcmcxKTsKKwkJfQorCisJCWxlbiAtPSBwIC0gczsKKwkJcyA9IHAgKyAxOworCQlicmVhazsKKworCisJICAgIC8qIFRocmVlLWNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2VzICovCisKKwkgICAgY2FzZSAnQSc6CisJCS8qIG1vdmUgY3Vyc29yIHVwIG9uZSBsaW5lIGluIHNhbWUgY29sdW1uICovCisJCWdvdG94eShnX2Nvb3JkLlggKyAxLAorCQkgICAgICAgbWF4KGdfc3JTY3JvbGxSZWdpb24uVG9wLCBnX2Nvb3JkLlkgLSAxKSArIDEpOworCQlnb3RvIGdvdDM7CisKKwkgICAgY2FzZSAnQic6CisJCXZpc3VhbF9iZWxsKCk7CisJCWdvdG8gZ290MzsKKworCSAgICBjYXNlICdDJzoKKwkJLyogbW92ZSBjdXJzb3IgcmlnaHQgb25lIGNvbHVtbiBpbiBzYW1lIGxpbmUgKi8KKwkJZ290b3h5KG1pbihnX3NyU2Nyb2xsUmVnaW9uLlJpZ2h0LCBnX2Nvb3JkLlggKyAxKSArIDEsCisJCSAgICAgICBnX2Nvb3JkLlkgKyAxKTsKKwkJZ290byBnb3QzOworCisJICAgIGNhc2UgJ0UnOgorCQl0ZXJtY2FwX21vZGVfZW5kKCk7CisJCWdvdG8gZ290MzsKKworCSAgICBjYXNlICdGJzoKKwkJc3RhbmRvdXQoKTsKKwkJZ290byBnb3QzOworCisJICAgIGNhc2UgJ2YnOgorCQlzdGFuZGVuZCgpOworCQlnb3RvIGdvdDM7CisKKwkgICAgY2FzZSAnSCc6CisJCWdvdG94eSgxLCAxKTsKKwkJZ290byBnb3QzOworCisJICAgIGNhc2UgJ2onOgorCQljbGVhcl90b19lbmRfb2ZfZGlzcGxheSgpOworCQlnb3RvIGdvdDM7CisKKwkgICAgY2FzZSAnSic6CisJCWNsZWFyX3NjcmVlbigpOworCQlnb3RvIGdvdDM7CisKKwkgICAgY2FzZSAnSyc6CisJCWNsZWFyX3RvX2VuZF9vZl9saW5lKCk7CisJCWdvdG8gZ290MzsKKworCSAgICBjYXNlICdMJzoKKwkJaW5zZXJ0X2xpbmVzKDEpOworCQlnb3RvIGdvdDM7CisKKwkgICAgY2FzZSAnTSc6CisJCWRlbGV0ZV9saW5lcygxKTsKKwkJZ290byBnb3QzOworCisJICAgIGNhc2UgJ1MnOgorCQl0ZXJtY2FwX21vZGVfc3RhcnQoKTsKKwkJZ290byBnb3QzOworCisJICAgIGNhc2UgJ1YnOgorCQljdXJzb3JfdmlzaWJsZShUUlVFKTsKKwkJZ290byBnb3QzOworCisJICAgIGNhc2UgJ3YnOgorCQljdXJzb3JfdmlzaWJsZShGQUxTRSk7CisJCWdvdG8gZ290MzsKKworCSAgICBnb3QzOgorCQlzICs9IDM7CisJCWxlbiAtPSAyOworCSAgICB9CisKKyNpZmRlZiBNQ0hfV1JJVEVfRFVNUAorCSAgICBpZiAoZmREdW1wKQorCSAgICB7CisJCWZwdXRzKCJFU0MgfCAiLCBmZER1bXApOworCQlmd3JpdGUob2xkX3MgKyAyLCBzaXplb2YoY2hhcl91KSwgcyAtIG9sZF9zIC0gMiwgZmREdW1wKTsKKwkJZnB1dGMoJ1xuJywgZmREdW1wKTsKKwkgICAgfQorI2VuZGlmCisJfQorCWVsc2UKKwl7CisJICAgIC8qIFdyaXRlIGEgc2luZ2xlIGNoYXJhY3RlciAqLworCSAgICBEV09SRCBuV3JpdHRlbjsKKworCSAgICBuV3JpdHRlbiA9IHdyaXRlX2NoYXJzKHMsIDEpOworI2lmZGVmIE1DSF9XUklURV9EVU1QCisJICAgIGlmIChmZER1bXApCisJICAgIHsKKwkJZnB1dGMoJz4nLCBmZER1bXApOworCQlmd3JpdGUocywgc2l6ZW9mKGNoYXJfdSksIG5Xcml0dGVuLCBmZER1bXApOworCQlmcHV0cygiPFxuIiwgZmREdW1wKTsKKwkgICAgfQorI2VuZGlmCisKKwkgICAgbGVuIC09IChuV3JpdHRlbiAtIDEpOworCSAgICBzICs9IG5Xcml0dGVuOworCX0KKyAgICB9CisKKyNpZmRlZiBNQ0hfV1JJVEVfRFVNUAorICAgIGlmIChmZER1bXApCisJZmZsdXNoKGZkRHVtcCk7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIEZFQVRfR1VJX1czMiAqLworCisKKy8qCisgKiBEZWxheSBmb3IgaGFsZiBhIHNlY29uZC4KKyAqLworICAgIHZvaWQKK21jaF9kZWxheSgKKyAgICBsb25nICAgIG1zZWMsCisgICAgaW50CSAgICBpZ25vcmVpbnB1dCkKK3sKKyNpZmRlZiBGRUFUX0dVSV9XMzIKKyAgICBTbGVlcCgoaW50KW1zZWMpOwkgICAgLyogbmV2ZXIgd2FpdCBmb3IgaW5wdXQgKi8KKyNlbHNlCisgICAgaWYgKGlnbm9yZWlucHV0KQorCVNsZWVwKChpbnQpbXNlYyk7CisgICAgZWxzZQorCVdhaXRGb3JDaGFyKG1zZWMpOworI2VuZGlmCit9CisKKworLyoKKyAqIHRoaXMgdmVyc2lvbiBvZiByZW1vdmUgaXMgbm90IHNjYXJlZCBieSBhIHJlYWRvbmx5IChiYWNrdXApIGZpbGUKKyAqIFJldHVybiAwIGZvciBzdWNjZXNzLCAtMSBmb3IgZmFpbHVyZS4KKyAqLworICAgIGludAorbWNoX3JlbW92ZShjaGFyX3UgKm5hbWUpCit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIFdDSEFSCSp3biA9IE5VTEw7CisgICAgaW50CQluOworCisgICAgaWYgKGVuY19jb2RlcGFnZSA+PSAwICYmIChpbnQpR2V0QUNQKCkgIT0gZW5jX2NvZGVwYWdlKQorICAgIHsKKwl3biA9IGVuY190b191Y3MyKG5hbWUsIE5VTEwpOworCWlmICh3biAhPSBOVUxMKQorCXsKKwkgICAgU2V0RmlsZUF0dHJpYnV0ZXNXKHduLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwpOworCSAgICBuID0gRGVsZXRlRmlsZVcod24pID8gMCA6IC0xOworCSAgICB2aW1fZnJlZSh3bik7CisJICAgIGlmIChuID09IDAgfHwgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpCisJCXJldHVybiBuOworCSAgICAvKiBSZXRyeSB3aXRoIG5vbi13aWRlIGZ1bmN0aW9uIChmb3IgV2luZG93cyA5OCkuICovCisJfQorICAgIH0KKyNlbmRpZgorICAgIFNldEZpbGVBdHRyaWJ1dGVzKG5hbWUsIEZJTEVfQVRUUklCVVRFX05PUk1BTCk7CisgICAgcmV0dXJuIERlbGV0ZUZpbGUobmFtZSkgPyAwIDogLTE7Cit9CisKKworLyoKKyAqIGNoZWNrIGZvciBhbiAiaW50ZXJydXB0IHNpZ25hbCI6IENUUkwtYnJlYWsgb3IgQ1RSTC1DCisgKi8KKyAgICB2b2lkCittY2hfYnJlYWtjaGVjaygpCit7CisjaWZuZGVmIEZFQVRfR1VJX1czMgkgICAgLyogbmV2ZXIgdXNlZCAqLworICAgIGlmIChnX2ZDdHJsQ1ByZXNzZWQgfHwgZ19mQ0Jya1ByZXNzZWQpCisgICAgeworCWdfZkN0cmxDUHJlc3NlZCA9IGdfZkNCcmtQcmVzc2VkID0gRkFMU0U7CisJZ290X2ludCA9IFRSVUU7CisgICAgfQorI2VuZGlmCit9CisKKworLyoKKyAqIEhvdyBtdWNoIG1lbW9yeSBpcyBhdmFpbGFibGU/CisgKiBSZXR1cm4gc3VtIG9mIGF2YWlsYWJsZSBwaHlzaWNhbCBhbmQgcGFnZSBmaWxlIG1lbW9yeS4KKyAqLworICAgIGxvbmdfdQorbWNoX2F2YWlsX21lbSgKKyAgICBpbnQgc3BlY2lhbCkKK3sKKyAgICBNRU1PUllTVEFUVVMJbXM7CisKKyAgICBtcy5kd0xlbmd0aCA9IHNpemVvZihNRU1PUllTVEFUVVMpOworICAgIEdsb2JhbE1lbW9yeVN0YXR1cygmbXMpOworICAgIHJldHVybiAobG9uZ191KSAobXMuZHdBdmFpbFBoeXMgKyBtcy5kd0F2YWlsUGFnZUZpbGUpOworfQorCisjaWZkZWYgRkVBVF9NQllURQorLyoKKyAqIFNhbWUgY29kZSBhcyBiZWxvdywgYnV0IHdpdGggd2lkZSBmdW5jdGlvbnMgYW5kIG5vIGNvbW1lbnRzLgorICogUmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCisgICAgaW50CittY2hfd3JlbmFtZShXQ0hBUiAqd29sZCwgV0NIQVIgKnduZXcpCit7CisgICAgV0NIQVIJKnA7CisgICAgaW50CQlpOworICAgIFdDSEFSCXN6VGVtcEZpbGVbX01BWF9QQVRIICsgMV07CisgICAgV0NIQVIJc3pOZXdQYXRoW19NQVhfUEFUSCArIDFdOworICAgIEhBTkRMRQloZjsKKworICAgIGlmICghbWNoX3dpbmRvd3M5NSgpKQorICAgIHsKKwlwID0gd29sZDsKKwlmb3IgKGkgPSAwOyB3b2xkW2ldICE9IE5VTDsgKytpKQorCSAgICBpZiAoKHdvbGRbaV0gPT0gJy8nIHx8IHdvbGRbaV0gPT0gJ1xcJyB8fCB3b2xkW2ldID09ICc6JykKKwkJICAgICYmIHdvbGRbaSArIDFdICE9IDApCisJCXAgPSB3b2xkICsgaSArIDE7CisJaWYgKChpbnQpKHdvbGQgKyBpIC0gcCkgPCA4IHx8IHBbNl0gIT0gJ34nKQorCSAgICByZXR1cm4gKE1vdmVGaWxlVyh3b2xkLCB3bmV3KSA9PSAwKTsKKyAgICB9CisKKyAgICBpZiAoR2V0RnVsbFBhdGhOYW1lVyh3bmV3LCBfTUFYX1BBVEgsIHN6TmV3UGF0aCwgJnApID09IDAgfHwgcCA9PSBOVUxMKQorCXJldHVybiAtMTsKKyAgICAqcCA9IE5VTDsKKworICAgIGlmIChHZXRUZW1wRmlsZU5hbWVXKHN6TmV3UGF0aCwgTCJWSU0iLCAwLCBzelRlbXBGaWxlKSA9PSAwKQorCXJldHVybiAtMjsKKworICAgIGlmICghRGVsZXRlRmlsZVcoc3pUZW1wRmlsZSkpCisJcmV0dXJuIC0zOworCisgICAgaWYgKCFNb3ZlRmlsZVcod29sZCwgc3pUZW1wRmlsZSkpCisJcmV0dXJuIC00OworCisgICAgaWYgKChoZiA9IENyZWF0ZUZpbGVXKHdvbGQsIEdFTkVSSUNfV1JJVEUsIDAsIE5VTEwsIENSRUFURV9ORVcsCisJCSAgICBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIE5VTEwpKSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwlyZXR1cm4gLTU7CisgICAgaWYgKCFDbG9zZUhhbmRsZShoZikpCisJcmV0dXJuIC02OworCisgICAgaWYgKCFNb3ZlRmlsZVcoc3pUZW1wRmlsZSwgd25ldykpCisgICAgeworCSh2b2lkKU1vdmVGaWxlVyhzelRlbXBGaWxlLCB3b2xkKTsKKwlyZXR1cm4gLTc7CisgICAgfQorCisgICAgRGVsZXRlRmlsZVcoc3pUZW1wRmlsZSk7CisKKyAgICBpZiAoIURlbGV0ZUZpbGVXKHdvbGQpKQorCXJldHVybiAtODsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKKworLyoKKyAqIG1jaF9yZW5hbWUoKSB3b3JrcyBhcm91bmQgYSBidWcgaW4gcmVuYW1lIChha2EgTW92ZUZpbGUpIGluCisgKiBXaW5kb3dzIDk1OiByZW5hbWUoImZvby5iYXIiLCAiZm9vLmJhcn4iKSB3aWxsIGdlbmVyYXRlIGEKKyAqIGZpbGUgd2hvc2Ugc2hvcnQgZmlsZSBuYW1lIGlzICJGT08uQkFSIiAoaXRzIGxvbmcgZmlsZSBuYW1lIHdpbGwKKyAqIGJlIGNvcnJlY3Q6ICJmb28uYmFyfiIpLiAgQmVjYXVzZSBhIGZpbGUgY2FuIGJlIGFjY2Vzc2VkIGJ5CisgKiBlaXRoZXIgaXRzIFNGTiBvciBpdHMgTEZOLCAiZm9vLmJhciIgaGFzIGVmZmVjdGl2ZWx5IGJlZW4KKyAqIHJlbmFtZWQgdG8gImZvby5iYXIiLCB3aGljaCBpcyBub3QgYXQgYWxsIHdoYXQgd2FzIHdhbnRlZC4gIFRoaXMKKyAqIHNlZW1zIHRvIGhhcHBlbiBvbmx5IHdoZW4gcmVuYW1pbmcgZmlsZXMgd2l0aCB0aHJlZS1jaGFyYWN0ZXIKKyAqIGV4dGVuc2lvbnMgYnkgYXBwZW5kaW5nIGEgc3VmZml4IHRoYXQgZG9lcyBub3QgaW5jbHVkZSAiLiIuCisgKiBXaW5kb3dzIE5UIGdldHMgaXQgcmlnaHQsIGhvd2V2ZXIsIHdpdGggYW4gU0ZOIG9mICJGT09+MS5CQVIiLgorICoKKyAqIFRoZXJlIGlzIGFub3RoZXIgcHJvYmxlbSwgd2hpY2ggaXNuJ3QgcmVhbGx5IGEgYnVnIGJ1dCBpc24ndCByaWdodCBlaXRoZXI6CisgKiBXaGVuIHJlbmFtaW5nICJhYmNkZWZ+MS50eHQiIHRvICJhYmNkZWZ+MS50eHR+IiwgdGhlIHNob3J0IG5hbWUgY2FuIGJlCisgKiAiYWJjZGVmfjEudHh0IiBhZ2Fpbi4gIFRoaXMgaGFzIGJlZW4gcmVwb3J0ZWQgb24gV2luZG93cyBOVCA0LjAgd2l0aAorICogc2VydmljZSBwYWNrIDYuICBEb2Vzbid0IHNlZW0gdG8gaGFwcGVuIG9uIFdpbmRvd3MgOTguCisgKgorICogTGlrZSByZW5hbWUoKSwgcmV0dXJucyAwIHVwb24gc3VjY2Vzcywgbm9uLXplcm8gdXBvbiBmYWlsdXJlLgorICogU2hvdWxkIHByb2JhYmx5IHNldCBlcnJubyBhcHByb3ByaWF0ZWx5IHdoZW4gZXJyb3JzIG9jY3VyLgorICovCisgICAgaW50CittY2hfcmVuYW1lKAorICAgIGNvbnN0IGNoYXIJKnBzek9sZEZpbGUsCisgICAgY29uc3QgY2hhcgkqcHN6TmV3RmlsZSkKK3sKKyAgICBjaGFyCXN6VGVtcEZpbGVbX01BWF9QQVRIKzFdOworICAgIGNoYXIJc3pOZXdQYXRoW19NQVhfUEFUSCsxXTsKKyAgICBjaGFyCSpwc3pGaWxlUGFydDsKKyAgICBIQU5ETEUJaGY7CisjaWZkZWYgRkVBVF9NQllURQorICAgIFdDSEFSCSp3b2xkID0gTlVMTDsKKyAgICBXQ0hBUgkqd25ldyA9IE5VTEw7CisgICAgaW50CQlyZXR2YWwgPSAtMTsKKworICAgIGlmIChlbmNfY29kZXBhZ2UgPj0gMCAmJiAoaW50KUdldEFDUCgpICE9IGVuY19jb2RlcGFnZSkKKyAgICB7CisJd29sZCA9IGVuY190b191Y3MyKChjaGFyX3UgKilwc3pPbGRGaWxlLCBOVUxMKTsKKwl3bmV3ID0gZW5jX3RvX3VjczIoKGNoYXJfdSAqKXBzek5ld0ZpbGUsIE5VTEwpOworCWlmICh3b2xkICE9IE5VTEwgJiYgd25ldyAhPSBOVUxMKQorCSAgICByZXR2YWwgPSBtY2hfd3JlbmFtZSh3b2xkLCB3bmV3KTsKKwl2aW1fZnJlZSh3b2xkKTsKKwl2aW1fZnJlZSh3bmV3KTsKKwlpZiAocmV0dmFsID09IDAgfHwgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpCisJICAgIHJldHVybiByZXR2YWw7CisJLyogUmV0cnkgd2l0aCBub24td2lkZSBmdW5jdGlvbiAoZm9yIFdpbmRvd3MgOTgpLiAqLworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBObyBuZWVkIHRvIHBsYXkgdHJpY2tzIGlmIG5vdCBydW5uaW5nIFdpbmRvd3MgOTUsIHVubGVzcyB0aGUgZmlsZSBuYW1lCisgICAgICogY29udGFpbnMgYSAifiIgYXMgdGhlIHNldmVudGggY2hhcmFjdGVyLgorICAgICAqLworICAgIGlmICghbWNoX3dpbmRvd3M5NSgpKQorICAgIHsKKwlwc3pGaWxlUGFydCA9IChjaGFyICopZ2V0dGFpbCgoY2hhcl91ICopcHN6T2xkRmlsZSk7CisJaWYgKFNUUkxFTihwc3pGaWxlUGFydCkgPCA4IHx8IHBzekZpbGVQYXJ0WzZdICE9ICd+JykKKwkgICAgcmV0dXJuIHJlbmFtZShwc3pPbGRGaWxlLCBwc3pOZXdGaWxlKTsKKyAgICB9CisKKyAgICAvKiBHZXQgYmFzZSBwYXRoIG9mIG5ldyBmaWxlIG5hbWUuICBVbmRvY3VtZW50ZWQgZmVhdHVyZTogSWYgcHN6TmV3RmlsZSBpcworICAgICAqIGEgZGlyZWN0b3J5LCBubyBlcnJvciBpcyByZXR1cm5lZCBhbmQgcHN6RmlsZVBhcnQgd2lsbCBiZSBOVUxMLiAqLworICAgIGlmIChHZXRGdWxsUGF0aE5hbWUocHN6TmV3RmlsZSwgX01BWF9QQVRILCBzek5ld1BhdGgsICZwc3pGaWxlUGFydCkgPT0gMAorCSAgICB8fCBwc3pGaWxlUGFydCA9PSBOVUxMKQorCXJldHVybiAtMTsKKyAgICAqcHN6RmlsZVBhcnQgPSBOVUw7CisKKyAgICAvKiBHZXQgKGFuZCBjcmVhdGUpIGEgdW5pcXVlIHRlbXBvcmFyeSBmaWxlIG5hbWUgaW4gZGlyZWN0b3J5IG9mIG5ldyBmaWxlICovCisgICAgaWYgKEdldFRlbXBGaWxlTmFtZShzek5ld1BhdGgsICJWSU0iLCAwLCBzelRlbXBGaWxlKSA9PSAwKQorCXJldHVybiAtMjsKKworICAgIC8qIGJsb3cgdGhlIHRlbXAgZmlsZSBhd2F5ICovCisgICAgaWYgKCFEZWxldGVGaWxlKHN6VGVtcEZpbGUpKQorCXJldHVybiAtMzsKKworICAgIC8qIHJlbmFtZSBvbGQgZmlsZSB0byB0aGUgdGVtcCBmaWxlICovCisgICAgaWYgKCFNb3ZlRmlsZShwc3pPbGRGaWxlLCBzelRlbXBGaWxlKSkKKwlyZXR1cm4gLTQ7CisKKyAgICAvKiBub3cgY3JlYXRlIGFuIGVtcHR5IGZpbGUgY2FsbGVkIHBzek9sZEZpbGU7IHRoaXMgcHJldmVudHMgdGhlIG9wZXJhdGluZworICAgICAqIHN5c3RlbSB1c2luZyBwc3pPbGRGaWxlIGFzIGFuIGFsaWFzIChTRk4pIGlmIHdlJ3JlIHJlbmFtaW5nIHdpdGhpbiB0aGUKKyAgICAgKiBzYW1lIGRpcmVjdG9yeS4gIEZvciBleGFtcGxlLCB3ZSdyZSBlZGl0aW5nIGEgZmlsZSBjYWxsZWQKKyAgICAgKiBmaWxlbmFtZS5hc2MudHh0IGJ5IGl0cyBTRk4sIGZpbGVuYX4xLnR4dC4gIElmIHdlIHJlbmFtZSBmaWxlbmF+MS50eHQKKyAgICAgKiB0byBmaWxlbmF+MS50eHR+IChpLmUuLCB3ZSdyZSBtYWtpbmcgYSBiYWNrdXAgd2hpbGUgd3JpdGluZyBpdCksIHRoZQorICAgICAqIFNGTiBmb3IgZmlsZW5hfjEudHh0fiB3aWxsIGJlIGZpbGVuYX4xLnR4dCwgYnkgZGVmYXVsdCwgd2hpY2ggd2lsbAorICAgICAqIGNhdXNlIGFsbCBzb3J0cyBvZiBwcm9ibGVtcyBsYXRlciBpbiBidWZfd3JpdGUuICBTbywgd2UgY3JlYXRlIGFuIGVtcHR5CisgICAgICogZmlsZSBjYWxsZWQgZmlsZW5hfjEudHh0IGFuZCB0aGUgc3lzdGVtIHdpbGwgaGF2ZSB0byBmaW5kIHNvbWUgb3RoZXIKKyAgICAgKiBTRk4gZm9yIGZpbGVuYX4xLnR4dH4sIHN1Y2ggYXMgZmlsZW5hfjIudHh0CisgICAgICovCisgICAgaWYgKChoZiA9IENyZWF0ZUZpbGUocHN6T2xkRmlsZSwgR0VORVJJQ19XUklURSwgMCwgTlVMTCwgQ1JFQVRFX05FVywKKwkJICAgIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCkpID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCXJldHVybiAtNTsKKyAgICBpZiAoIUNsb3NlSGFuZGxlKGhmKSkKKwlyZXR1cm4gLTY7CisKKyAgICAvKiByZW5hbWUgdGhlIHRlbXAgZmlsZSB0byB0aGUgbmV3IGZpbGUgKi8KKyAgICBpZiAoIU1vdmVGaWxlKHN6VGVtcEZpbGUsIHBzek5ld0ZpbGUpKQorICAgIHsKKwkvKiBSZW5hbWluZyBmYWlsZWQuICBSZW5hbWUgdGhlIGZpbGUgYmFjayB0byBpdHMgb2xkIG5hbWUsIHNvIHRoYXQgaXQKKwkgKiBsb29rcyBsaWtlIG5vdGhpbmcgaGFwcGVuZWQuICovCisJKHZvaWQpTW92ZUZpbGUoc3pUZW1wRmlsZSwgcHN6T2xkRmlsZSk7CisKKwlyZXR1cm4gLTc7CisgICAgfQorCisgICAgLyogU2VlbXMgdG8gYmUgbGVmdCBhcm91bmQgb24gTm92ZWxsIGZpbGVzeXN0ZW1zICovCisgICAgRGVsZXRlRmlsZShzelRlbXBGaWxlKTsKKworICAgIC8qIGZpbmFsbHksIHJlbW92ZSB0aGUgZW1wdHkgb2xkIGZpbGUgKi8KKyAgICBpZiAoIURlbGV0ZUZpbGUocHN6T2xkRmlsZSkpCisJcmV0dXJuIC04OworCisgICAgcmV0dXJuIDA7CS8qIHN1Y2Nlc3MgKi8KK30KKworLyoKKyAqIEdldCB0aGUgZGVmYXVsdCBzaGVsbCBmb3IgdGhlIGN1cnJlbnQgaGFyZHdhcmUgcGxhdGZvcm0KKyAqLworICAgIGNoYXIgKgorZGVmYXVsdF9zaGVsbCgpCit7CisgICAgY2hhciogcHN6ID0gTlVMTDsKKworICAgIFBsYXRmb3JtSWQoKTsKKworICAgIGlmIChnX1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UKQkJLyogV2luZG93cyBOVCAqLworCXBzeiA9ICJjbWQuZXhlIjsKKyAgICBlbHNlIGlmIChnX1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpIC8qIFdpbmRvd3MgOTUgKi8KKwlwc3ogPSAiY29tbWFuZC5jb20iOworCisgICAgcmV0dXJuIHBzejsKK30KKworLyoKKyAqIG1jaF9hY2Nlc3MoKSBleHRlbmRzIGFjY2VzcygpIHRvIGRvIG1vcmUgZGV0YWlsZWQgY2hlY2sgb24gbmV0d29yayBkcml2ZXMuCisgKiBSZXR1cm5zIDAgaWYgZmlsZSAibiIgaGFzIGFjY2VzcyByaWdodHMgYWNjb3JkaW5nIHRvICJwIiwgLTEgb3RoZXJ3aXNlLgorICovCisgICAgaW50CittY2hfYWNjZXNzKGNoYXIgKm4sIGludCBwKQoreworICAgIEhBTkRMRQloRmlsZTsKKyAgICBEV09SRAlhbTsKKyAgICBpbnQJCXJldHZhbCA9IC0xOwkgICAgLyogZGVmYXVsdDogZmFpbCAqLworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBXQ0hBUgkqd24gPSBOVUxMOworCisgICAgaWYgKGVuY19jb2RlcGFnZSA+PSAwICYmIChpbnQpR2V0QUNQKCkgIT0gZW5jX2NvZGVwYWdlKQorCXduID0gZW5jX3RvX3VjczIobiwgTlVMTCk7CisjZW5kaWYKKworICAgIGlmIChtY2hfaXNkaXIobikpCisgICAgeworCWNoYXIgVGVtcE5hbWVbX01BWF9QQVRIICsgMTZdID0gIiI7CisjaWZkZWYgRkVBVF9NQllURQorCVdDSEFSIFRlbXBOYW1lV1tfTUFYX1BBVEggKyAxNl0gPSBMIiI7CisjZW5kaWYKKworCWlmIChwICYgUl9PSykKKwl7CisJICAgIC8qIFJlYWQgY2hlY2sgaXMgcGVyZm9ybWVkIGJ5IHNlZWluZyBpZiB3ZSBjYW4gZG8gYSBmaW5kIGZpbGUgb24KKwkgICAgICogdGhlIGRpcmVjdG9yeSBmb3IgYW55IGZpbGUuICovCisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAod24gIT0gTlVMTCkKKwkgICAgeworCQlpbnQJCSAgICBpOworCQlXSU4zMl9GSU5EX0RBVEFXICAgIGQ7CisKKwkJZm9yIChpID0gMDsgaSA8IF9NQVhfUEFUSCAmJiB3bltpXSAhPSAwOyArK2kpCisJCSAgICBUZW1wTmFtZVdbaV0gPSB3bltpXTsKKwkJaWYgKFRlbXBOYW1lV1tpIC0gMV0gIT0gJ1xcJyAmJiBUZW1wTmFtZVdbaSAtIDFdICE9ICcvJykKKwkJICAgIFRlbXBOYW1lV1tpKytdID0gJ1xcJzsKKwkJVGVtcE5hbWVXW2krK10gPSAnKic7CisJCVRlbXBOYW1lV1tpKytdID0gMDsKKworCQloRmlsZSA9IEZpbmRGaXJzdEZpbGVXKFRlbXBOYW1lVywgJmQpOworCQlpZiAoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXsKKwkJICAgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKKwkJCWdvdG8gZ2V0b3V0OworCisJCSAgICAvKiBSZXRyeSB3aXRoIG5vbi13aWRlIGZ1bmN0aW9uIChmb3IgV2luZG93cyA5OCkuICovCisJCSAgICB2aW1fZnJlZSh3bik7CisJCSAgICB3biA9IE5VTEw7CisJCX0KKwkJZWxzZQorCQkgICAgKHZvaWQpRmluZENsb3NlKGhGaWxlKTsKKwkgICAgfQorCSAgICBpZiAod24gPT0gTlVMTCkKKyNlbmRpZgorCSAgICB7CisJCWNoYXIJCSAgICAqcGNoOworCQlXSU4zMl9GSU5EX0RBVEEJICAgIGQ7CisKKwkJU1RSTkNQWShUZW1wTmFtZSwgbiwgX01BWF9QQVRIKTsKKwkJcGNoID0gVGVtcE5hbWUgKyBTVFJMRU4oVGVtcE5hbWUpIC0gMTsKKwkJaWYgKCpwY2ggIT0gJ1xcJyAmJiAqcGNoICE9ICcvJykKKwkJICAgICorK3BjaCA9ICdcXCc7CisJCSorK3BjaCA9ICcqJzsKKwkJKisrcGNoID0gTlVMOworCisJCWhGaWxlID0gRmluZEZpcnN0RmlsZShUZW1wTmFtZSwgJmQpOworCQlpZiAoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCSAgICBnb3RvIGdldG91dDsKKwkJKHZvaWQpRmluZENsb3NlKGhGaWxlKTsKKwkgICAgfQorCX0KKworCWlmIChwICYgV19PSykKKwl7CisJICAgIC8qIFRyeWluZyB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IHNob3VsZCBjYXRjaAorCSAgICAgKiBkaXJlY3RvcmllcyBvbiByZWFkLW9ubHkgbmV0d29yayBzaGFyZXMuICBIb3dldmVyLCBpbgorCSAgICAgKiBkaXJlY3RvcmllcyB3aG9zZSBBQ0wgYWxsb3dzIHdyaXRlcyBidXQgZGVuaWVzIGRlbGV0ZXMgd2lsbCBlbmQKKwkgICAgICogdXAga2VlcGluZyB0aGUgdGVtcG9yYXJ5IGZpbGUgOi0oLiAqLworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKHduICE9IE5VTEwpCisJICAgIHsKKwkJaWYgKCFHZXRUZW1wRmlsZU5hbWVXKHduLCBMIlZJTSIsIDAsIFRlbXBOYW1lVykpCisJCXsKKwkJICAgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKKwkJCWdvdG8gZ2V0b3V0OworCisJCSAgICAvKiBSZXRyeSB3aXRoIG5vbi13aWRlIGZ1bmN0aW9uIChmb3IgV2luZG93cyA5OCkuICovCisJCSAgICB2aW1fZnJlZSh3bik7CisJCSAgICB3biA9IE5VTEw7CisJCX0KKwkJZWxzZQorCQkgICAgRGVsZXRlRmlsZVcoVGVtcE5hbWVXKTsKKwkgICAgfQorCSAgICBpZiAod24gPT0gTlVMTCkKKyNlbmRpZgorCSAgICB7CisJCWlmICghR2V0VGVtcEZpbGVOYW1lKG4sICJWSU0iLCAwLCBUZW1wTmFtZSkpCisJCSAgICBnb3RvIGdldG91dDsKKwkJbWNoX3JlbW92ZSgoY2hhcl91ICopVGVtcE5hbWUpOworCSAgICB9CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIFRyeWluZyB0byBvcGVuIHRoZSBmaWxlIGZvciB0aGUgcmVxdWlyZWQgYWNjZXNzIGRvZXMgQUNMLCByZWFkLW9ubHkKKwkgKiBuZXR3b3JrIHNoYXJlLCBhbmQgZmlsZSBhdHRyaWJ1dGUgY2hlY2tzLiAgKi8KKwlhbSA9ICgocCAmIFdfT0spID8gR0VORVJJQ19XUklURSA6IDApCisJCXwgKChwICYgUl9PSykgPyBHRU5FUklDX1JFQUQgOiAwKTsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKHduICE9IE5VTEwpCisJeworCSAgICBoRmlsZSA9IENyZWF0ZUZpbGVXKHduLCBhbSwgMCwgTlVMTCwgT1BFTl9FWElTVElORywgMCwgTlVMTCk7CisJICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRQorCQkJICAgICAgJiYgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpCisJICAgIHsKKwkJLyogUmV0cnkgd2l0aCBub24td2lkZSBmdW5jdGlvbiAoZm9yIFdpbmRvd3MgOTgpLiAqLworCQl2aW1fZnJlZSh3bik7CisJCXduID0gTlVMTDsKKwkgICAgfQorCX0KKwlpZiAod24gPT0gTlVMTCkKKyNlbmRpZgorCSAgICBoRmlsZSA9IENyZWF0ZUZpbGUobiwgYW0sIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsIDAsIE5VTEwpOworCWlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkgICAgZ290byBnZXRvdXQ7CisJQ2xvc2VIYW5kbGUoaEZpbGUpOworICAgIH0KKworICAgIHJldHZhbCA9IDA7CSAgICAvKiBzdWNjZXNzICovCitnZXRvdXQ6CisjaWZkZWYgRkVBVF9NQllURQorICAgIHZpbV9mcmVlKHduKTsKKyNlbmRpZgorICAgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogVmVyc2lvbiBvZiBvcGVuKCkgdGhhdCBtYXkgdXNlIHVjczIgZmlsZSBuYW1lLgorICovCisgICAgaW50CittY2hfb3BlbihjaGFyICpuYW1lLCBpbnQgZmxhZ3MsIGludCBtb2RlKQoreworICAgIFdDSEFSCSp3bjsKKyAgICBpbnQJCWY7CisKKyAgICBpZiAoZW5jX2NvZGVwYWdlID49IDAgJiYgKGludClHZXRBQ1AoKSAhPSBlbmNfY29kZXBhZ2UKKyMgaWZkZWYgX19CT1JMQU5EQ19fCisJICAgIC8qIFdpZGUgZnVuY3Rpb25zIG9mIEJvcmxhbmQgQyA1LjUgZG8gbm90IHdvcmsgb24gV2luZG93cyA5OC4gKi8KKwkgICAgJiYgZ19QbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVAorIyBlbmRpZgorICAgICAgICkKKyAgICB7CisJd24gPSBlbmNfdG9fdWNzMihuYW1lLCBOVUxMKTsKKwlpZiAod24gIT0gTlVMTCkKKwl7CisJICAgIGYgPSBfd29wZW4od24sIGZsYWdzLCBtb2RlKTsKKwkgICAgdmltX2ZyZWUod24pOworCSAgICBpZiAoZiA+PSAwKQorCQlyZXR1cm4gZjsKKwkgICAgLyogUmV0cnkgd2l0aCBub24td2lkZSBmdW5jdGlvbiAoZm9yIFdpbmRvd3MgOTgpLiBDYW4ndCB1c2UKKwkgICAgICogR2V0TGFzdEVycm9yKCkgaGVyZSBhbmQgaXQncyB1bmNsZWFyIHdoYXQgZXJybm8gZ2V0cyBzZXQgdG8gaWYKKwkgICAgICogdGhlIF93b3BlbigpIGZhaWxzIGZvciBtaXNzaW5nIHdpZGUgZnVuY3Rpb25zLiAqLworCX0KKyAgICB9CisKKyAgICByZXR1cm4gb3BlbihuYW1lLCBmbGFncywgbW9kZSk7Cit9CisKKy8qCisgKiBWZXJzaW9uIG9mIGZvcGVuKCkgdGhhdCBtYXkgdXNlIHVjczIgZmlsZSBuYW1lLgorICovCisgICAgRklMRSAqCittY2hfZm9wZW4oY2hhciAqbmFtZSwgY2hhciAqbW9kZSkKK3sKKyAgICBXQ0hBUgkqd24sICp3bTsKKyAgICBGSUxFCSpmID0gTlVMTDsKKworICAgIGlmIChlbmNfY29kZXBhZ2UgPj0gMCAmJiAoaW50KUdldEFDUCgpICE9IGVuY19jb2RlcGFnZQorIyBpZmRlZiBfX0JPUkxBTkRDX18KKwkgICAgLyogV2lkZSBmdW5jdGlvbnMgb2YgQm9ybGFuZCBDIDUuNSBkbyBub3Qgd29yayBvbiBXaW5kb3dzIDk4LiAqLworCSAgICAmJiBnX1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UCisjIGVuZGlmCisgICAgICAgKQorICAgIHsKKwl3biA9IGVuY190b191Y3MyKG5hbWUsIE5VTEwpOworCXdtID0gZW5jX3RvX3VjczIobW9kZSwgTlVMTCk7CisJaWYgKHduICE9IE5VTEwgJiYgd20gIT0gTlVMTCkKKwkgICAgZiA9IF93Zm9wZW4od24sIHdtKTsKKwl2aW1fZnJlZSh3bik7CisJdmltX2ZyZWUod20pOworCWlmIChmICE9IE5VTEwpCisJICAgIHJldHVybiBmOworCS8qIFJldHJ5IHdpdGggbm9uLXdpZGUgZnVuY3Rpb24gKGZvciBXaW5kb3dzIDk4KS4gQ2FuJ3QgdXNlCisJICogR2V0TGFzdEVycm9yKCkgaGVyZSBhbmQgaXQncyB1bmNsZWFyIHdoYXQgZXJybm8gZ2V0cyBzZXQgdG8gaWYKKwkgKiB0aGUgX3dmb3BlbigpIGZhaWxzIGZvciBtaXNzaW5nIHdpZGUgZnVuY3Rpb25zLiAqLworICAgIH0KKworICAgIHJldHVybiBmb3BlbihuYW1lLCBtb2RlKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NQllURQorLyoKKyAqIFNVQiBTVFJFQU0gKGFrYSBpbmZvIHN0cmVhbSkgaGFuZGxpbmc6CisgKgorICogTlRGUyBjYW4gaGF2ZSBzdWIgc3RyZWFtcyBmb3IgZWFjaCBmaWxlLiAgTm9ybWFsIGNvbnRlbnRzIG9mIGZpbGUgaXMKKyAqIHN0b3JlZCBpbiB0aGUgbWFpbiBzdHJlYW0sIGFuZCBleHRyYSBjb250ZW50cyAoYXV0aG9yIGluZm9ybWF0aW9uIGFuZAorICogdGl0bGUgYW5kIHNvIG9uKSBjYW4gYmUgc3RvcmVkIGluIHN1YiBzdHJlYW0uICBBZnRlciBXaW5kb3dzIDIwMDAsIHVzZXIKKyAqIGNhbiBhY2Nlc3MgYW5kIHN0b3JlIHRob3NlIGluZm9ybWF0aW9ucyBpbiBzdWIgc3RyZWFtcyB2aWEgZXhwbG9yZXIncworICogcHJvcGVydHkgbWVudWl0ZW0gaW4gcmlnaHQgY2xpY2sgbWVudS4gIFRob3NlIGluZm9ybWF0aW9ucyBpbiBzdWIgc3RyZWFtcworICogd2VyZSBsb3N0IHdoZW4gY29weWluZyBvbmx5IHRoZSBtYWluIHN0cmVhbS4gIFNvIHdlIGhhdmUgdG8gY29weSBzdWIKKyAqIHN0cmVhbXMuCisgKgorICogSW5jb21wbGV0ZSBleHBsYW5hdGlvbjoKKyAqCWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9lbi11cy9kbncyay9odG1sL250ZnM1LmFzcAorICogTW9yZSB1c2VmdWwgaW5mbyBhbmQgYW4gZXhhbXBsZToKKyAqCWh0dHA6Ly93d3cuc3lzaW50ZXJuYWxzLmNvbS9udHcyay9zb3VyY2UvbWlzYy5zaHRtbCNzdHJlYW1zCisgKi8KKworLyoKKyAqIENvcHkgaW5mbyBzdHJlYW0gZGF0YSAic3Vic3RyZWFtIi4gIFJlYWQgZnJvbSB0aGUgZmlsZSB3aXRoIEJhY2t1cFJlYWQoc2gpCisgKiBhbmQgd3JpdGUgdG8gc3RyZWFtICJzdWJzdHJlYW0iIG9mIGZpbGUgInRvIi4KKyAqIEVycm9ycyBhcmUgaWdub3JlZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjb3B5X3N1YnN0cmVhbShIQU5ETEUgc2gsIHZvaWQgKmNvbnRleHQsIFdDSEFSICp0bywgV0NIQVIgKnN1YnN0cmVhbSwgbG9uZyBsZW4pCit7CisgICAgSEFORExFICBoVG87CisgICAgV0NIQVIgICAqdG9fbmFtZTsKKworICAgIHRvX25hbWUgPSBtYWxsb2MoKHdjc2xlbih0bykgKyB3Y3NsZW4oc3Vic3RyZWFtKSArIDEpICogc2l6ZW9mKFdDSEFSKSk7CisgICAgd2NzY3B5KHRvX25hbWUsIHRvKTsKKyAgICB3Y3NjYXQodG9fbmFtZSwgc3Vic3RyZWFtKTsKKworICAgIGhUbyA9IENyZWF0ZUZpbGVXKHRvX25hbWUsIEdFTkVSSUNfV1JJVEUsIDAsIE5VTEwsIE9QRU5fQUxXQVlTLAorCQkJCQkJIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCk7CisgICAgaWYgKGhUbyAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICB7CisJbG9uZwlkb25lOworCURXT1JECXRvZG87CisJRFdPUkQJcmVhZGNudCwgd3JpdHRlbjsKKwljaGFyCWJ1Zls0MDk2XTsKKworCS8qIENvcHkgYmxvY2sgb2YgYnl0ZXMgYXQgYSB0aW1lLiAgQWJvcnQgd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZy4gKi8KKwlmb3IgKGRvbmUgPSAwOyBkb25lIDwgbGVuOyBkb25lICs9IHdyaXR0ZW4pCisJeworCSAgICAvKiAoc2l6ZV90KSBjYXN0IGZvciBCb3JsYW5kIEMgNS41ICovCisJICAgIHRvZG8gPSAoc2l6ZV90KShsZW4gLSBkb25lKSA+IHNpemVvZihidWYpID8gc2l6ZW9mKGJ1ZikKKwkJCQkJCSAgICAgICA6IChzaXplX3QpKGxlbiAtIGRvbmUpOworCSAgICBpZiAoIUJhY2t1cFJlYWQoc2gsIChMUEJZVEUpYnVmLCB0b2RvLCAmcmVhZGNudCwKKwkJCQkJCSAgICAgICBGQUxTRSwgRkFMU0UsIGNvbnRleHQpCisJCSAgICB8fCByZWFkY250ICE9IHRvZG8KKwkJICAgIHx8ICFXcml0ZUZpbGUoaFRvLCBidWYsIHRvZG8sICZ3cml0dGVuLCBOVUxMKQorCQkgICAgfHwgd3JpdHRlbiAhPSB0b2RvKQorCQlicmVhazsKKwl9CisJQ2xvc2VIYW5kbGUoaFRvKTsKKyAgICB9CisKKyAgICBmcmVlKHRvX25hbWUpOworfQorCisvKgorICogQ29weSBpbmZvIHN0cmVhbXMgZnJvbSBmaWxlICJmcm9tIiB0byBmaWxlICJ0byIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY29weV9pbmZvc3RyZWFtcyhjaGFyX3UgKmZyb20sIGNoYXJfdSAqdG8pCit7CisgICAgV0NIQVIJCSpmcm9tdzsKKyAgICBXQ0hBUgkJKnRvdzsKKyAgICBIQU5ETEUJCXNoOworICAgIFdJTjMyX1NUUkVBTV9JRAlzaWQ7CisgICAgaW50CQkJaGVhZGVyc2l6ZTsKKyAgICBXQ0hBUgkJc3RyZWFtbmFtZVtfTUFYX1BBVEhdOworICAgIERXT1JECQlyZWFkY291bnQ7CisgICAgdm9pZAkJKmNvbnRleHQgPSBOVUxMOworICAgIERXT1JECQlsbywgaGk7CisgICAgaW50CQkJbGVuOworCisgICAgLyogQ29udmVydCB0aGUgZmlsZSBuYW1lcyB0byB3aWRlIGNoYXJhY3RlcnMuICovCisgICAgZnJvbXcgPSBlbmNfdG9fdWNzMihmcm9tLCBOVUxMKTsKKyAgICB0b3cgPSBlbmNfdG9fdWNzMih0bywgTlVMTCk7CisgICAgaWYgKGZyb213ICE9IE5VTEwgJiYgdG93ICE9IE5VTEwpCisgICAgeworCS8qIE9wZW4gdGhlIGZpbGUgZm9yIHJlYWRpbmcuICovCisJc2ggPSBDcmVhdGVGaWxlVyhmcm9tdywgR0VORVJJQ19SRUFELCBGSUxFX1NIQVJFX1JFQUQsIE5VTEwsCisJCQkgICAgIE9QRU5fRVhJU1RJTkcsIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxMKTsKKwlpZiAoc2ggIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJeworCSAgICAvKiBVc2UgQmFja3VwUmVhZCgpIHRvIGZpbmQgdGhlIGluZm8gc3RyZWFtcy4gIFJlcGVhdCB1bnRpbCB3ZQorCSAgICAgKiBoYXZlIGRvbmUgdGhlbSBhbGwuKi8KKwkgICAgZm9yICg7OykKKwkgICAgeworCQkvKiBHZXQgdGhlIGhlYWRlciB0byBmaW5kIHRoZSBsZW5ndGggb2YgdGhlIHN0cmVhbSBuYW1lLiAgSWYKKwkJICogdGhlICJyZWFkY291bnQiIGlzIHplcm8gd2UgaGF2ZSBkb25lIGFsbCBpbmZvIHN0cmVhbXMuICovCisJCVplcm9NZW1vcnkoJnNpZCwgc2l6ZW9mKFdJTjMyX1NUUkVBTV9JRCkpOworCQloZWFkZXJzaXplID0gKGNoYXIgKikmc2lkLmNTdHJlYW1OYW1lIC0gKGNoYXIgKikmc2lkLmR3U3RyZWFtSWQ7CisJCWlmICghQmFja3VwUmVhZChzaCwgKExQQllURSkmc2lkLCBoZWFkZXJzaXplLAorCQkJCQkgICAmcmVhZGNvdW50LCBGQUxTRSwgRkFMU0UsICZjb250ZXh0KQorCQkJfHwgcmVhZGNvdW50ID09IDApCisJCSAgICBicmVhazsKKworCQkvKiBXZSBvbmx5IGRlYWwgd2l0aCBzdHJlYW1zIHRoYXQgaGF2ZSBhIG5hbWUuICBUaGUgbm9ybWFsCisJCSAqIGZpbGUgZGF0YSBhcHBlYXJzIHRvIGJlIHdpdGhvdXQgYSBuYW1lLCBldmVuIHRob3VnaCBkb2NzCisJCSAqIHN1Z2dlc3QgaXQgaXMgY2FsbGVkICI6OiREQVRBIi4gKi8KKwkJaWYgKHNpZC5kd1N0cmVhbU5hbWVTaXplID4gMCkKKwkJeworCQkgICAgLyogUmVhZCB0aGUgc3RyZWFtIG5hbWUuICovCisJCSAgICBpZiAoIUJhY2t1cFJlYWQoc2gsIChMUEJZVEUpc3RyZWFtbmFtZSwKKwkJCQkJCQkgc2lkLmR3U3RyZWFtTmFtZVNpemUsCisJCQkJCSAgJnJlYWRjb3VudCwgRkFMU0UsIEZBTFNFLCAmY29udGV4dCkpCisJCQlicmVhazsKKworCQkgICAgLyogQ29weSBhbiBpbmZvIHN0cmVhbSB3aXRoIGEgbmFtZSAiOmFueXRoaW5nOiREQVRBIi4KKwkJICAgICAqIFNraXAgIjo6JERBVEEiLCBpdCBoYXMgbm8gc3RyZWFtIG5hbWUgKGV4YW1wbGVzIHN1Z2dlc3QKKwkJICAgICAqIGl0IG1pZ2h0IGJlIHVzZWQgZm9yIHRoZSBub3JtYWwgZmlsZSBjb250ZW50cykuCisJCSAgICAgKiBOb3RlIHRoYXQgQmFja3VwUmVhZCgpIGNvdW50cyBieXRlcywgYnV0IHRoZSBuYW1lIGlzIGluCisJCSAgICAgKiB3aWRlIGNoYXJhY3RlcnMuICovCisJCSAgICBsZW4gPSByZWFkY291bnQgLyBzaXplb2YoV0NIQVIpOworCQkgICAgc3RyZWFtbmFtZVtsZW5dID0gMDsKKwkJICAgIGlmIChsZW4gPiA3ICYmIHdjc2ljbXAoc3RyZWFtbmFtZSArIGxlbiAtIDYsCisJCQkJCQkJICAgICAgTCI6JERBVEEiKSA9PSAwKQorCQkgICAgeworCQkJc3RyZWFtbmFtZVtsZW4gLSA2XSA9IDA7CisJCQljb3B5X3N1YnN0cmVhbShzaCwgJmNvbnRleHQsIHRvdywgc3RyZWFtbmFtZSwKKwkJCQkJCSAgICAgIChsb25nKXNpZC5TaXplLkxvd1BhcnQpOworCQkgICAgfQorCQl9CisKKwkJLyogQWR2YW5jZSB0byB0aGUgbmV4dCBzdHJlYW0uICBXZSBtaWdodCB0cnkgc2Vla2luZyB0b28gZmFyLAorCQkgKiBidXQgQmFja3VwU2VlaygpIGRvZXNuJ3Qgc2tpcCBvdmVyIHN0cmVhbSBib3JkZXJzLCB0aHVzCisJCSAqIHRoYXQncyBPSy4gKi8KKwkJKHZvaWQpQmFja3VwU2VlayhzaCwgc2lkLlNpemUuTG93UGFydCwgc2lkLlNpemUuSGlnaFBhcnQsCisJCQkJCQkJICAmbG8sICZoaSwgJmNvbnRleHQpOworCSAgICB9CisKKwkgICAgLyogQ2xlYXIgdGhlIGNvbnRleHQuICovCisJICAgICh2b2lkKUJhY2t1cFJlYWQoc2gsIE5VTEwsIDAsICZyZWFkY291bnQsIFRSVUUsIEZBTFNFLCAmY29udGV4dCk7CisKKwkgICAgQ2xvc2VIYW5kbGUoc2gpOworCX0KKyAgICB9CisgICAgdmltX2ZyZWUoZnJvbXcpOworICAgIHZpbV9mcmVlKHRvdyk7Cit9CisjZW5kaWYKKworLyoKKyAqIENvcHkgZmlsZSBhdHRyaWJ1dGVzIGZyb20gZmlsZSAiZnJvbSIgdG8gZmlsZSAidG8iLgorICogRm9yIFdpbmRvd3MgTlQgYW5kIGxhdGVyIHdlIGNvcHkgaW5mbyBzdHJlYW1zLgorICogQWx3YXlzIHJldHVybnMgemVybywgZXJyb3JzIGFyZSBpZ25vcmVkLgorICovCisgICAgaW50CittY2hfY29weV9maWxlX2F0dHJpYnV0ZShjaGFyX3UgKmZyb20sIGNoYXJfdSAqdG8pCit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIEZpbGUgc3RyZWFtcyBvbmx5IHdvcmsgb24gV2luZG93cyBOVCBhbmQgbGF0ZXIuICovCisgICAgUGxhdGZvcm1JZCgpOworICAgIGlmIChnX1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UKQorCWNvcHlfaW5mb3N0cmVhbXMoZnJvbSwgdG8pOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKE1ZUkVTRVRTVEtPRkxXKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJlY3JlYXRlIGEgZGVzdHJveWVkIHN0YWNrIGd1YXJkIHBhZ2UgaW4gd2luMzIuCisgKiBXcml0dGVuIGJ5IEJlbmphbWluIFBldGVyc29uLgorICovCisKKy8qIFRoZXNlIG1hZ2ljIG51bWJlcnMgYXJlIGZyb20gdGhlIE1TIGhlYWRlciBmaWxlcyAqLworI2RlZmluZSBNSU5fU1RBQ0tfV0lOOVggMTcKKyNkZWZpbmUgTUlOX1NUQUNLX1dJTk5UIDIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgc2FtZSB0aGluZyBhcyBfcmVzZXRzdGtvZmx3KCksIHdoaWNoIGlzIG9ubHkKKyAqIGF2YWlsYWJsZSBpbiBEZXZTdHVkaW8gLm5ldCBhbmQgbGF0ZXIuCisgKiBSZXR1cm5zIDAgZm9yIGZhaWx1cmUsIDEgZm9yIHN1Y2Nlc3MuCisgKi8KKyAgICBpbnQKK215cmVzZXRzdGtvZmx3KHZvaWQpCit7CisgICAgQllURQkqcFN0YWNrUHRyOworICAgIEJZVEUJKnBHdWFyZFBhZ2U7CisgICAgQllURQkqcFN0YWNrQmFzZTsKKyAgICBCWVRFCSpwTG93ZXN0UG9zc2libGVQYWdlOworICAgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtYmk7CisgICAgU1lTVEVNX0lORk8gc2k7CisgICAgRFdPUkQJblBhZ2VTaXplOworICAgIERXT1JECWR1bW15OworCisgICAgLyogVGhpcyBjb2RlIHdpbGwgbm90IHdvcmsgb24gd2luMzJzLiAqLworICAgIFBsYXRmb3JtSWQoKTsKKyAgICBpZiAoZ19QbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMnMpCisJcmV0dXJuIDA7CisKKyAgICAvKiBXZSBuZWVkIHRvIGtub3cgdGhlIHN5c3RlbSBwYWdlIHNpemUuICovCisgICAgR2V0U3lzdGVtSW5mbygmc2kpOworICAgIG5QYWdlU2l6ZSA9IHNpLmR3UGFnZVNpemU7CisKKyAgICAvKiAuLi5hbmQgdGhlIGN1cnJlbnQgc3RhY2sgcG9pbnRlciAqLworICAgIHBTdGFja1B0ciA9IChCWVRFKilfYWxsb2NhKDEpOworCisgICAgLyogLi4uYW5kIHRoZSBiYXNlIG9mIHRoZSBzdGFjay4gKi8KKyAgICBpZiAoVmlydHVhbFF1ZXJ5KHBTdGFja1B0ciwgJm1iaSwgc2l6ZW9mIG1iaSkgPT0gMCkKKwlyZXR1cm4gMDsKKyAgICBwU3RhY2tCYXNlID0gKEJZVEUqKW1iaS5BbGxvY2F0aW9uQmFzZTsKKworICAgIC8qIC4uLmFuZCB0aGUgcGFnZSB0aGF0cyBtaW5fc3RhY2tfcmVxIHBhZ2VzIGF3YXkgZnJvbSBzdGFjayBiYXNlOyB0aGlzIGlzCisgICAgICogdGhlIGxvd2VzdCBwYWdlIHdlIGNvdWxkIHVzZS4gKi8KKyAgICBwTG93ZXN0UG9zc2libGVQYWdlID0gcFN0YWNrQmFzZSArICgoZ19QbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVCkKKwkJCSAgICAgPyBNSU5fU1RBQ0tfV0lOTlQgOiBNSU5fU1RBQ0tfV0lOOVgpICogblBhZ2VTaXplOworCisgICAgLyogT24gV2luOTUsIHdlIHdhbnQgdGhlIG5leHQgcGFnZSBkb3duIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RhY2suICovCisgICAgaWYgKGdfUGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUykKKyAgICB7CisJLyogRmluZCB0aGUgcGFnZSB0aGF0J3Mgb25seSAxIHBhZ2UgZG93biBmcm9tIHRoZSBwYWdlIHRoYXQgdGhlIHN0YWNrCisJICogcHRyIGlzIGluLiAqLworCXBHdWFyZFBhZ2UgPSAoQllURSopKChEV09SRCluUGFnZVNpemUgKiAoKChEV09SRClwU3RhY2tQdHIKKwkJCQkJCSAgICAvIChEV09SRCluUGFnZVNpemUpIC0gMSkpOworCWlmIChwR3VhcmRQYWdlIDwgcExvd2VzdFBvc3NpYmxlUGFnZSkKKwkgICAgcmV0dXJuIDA7CisKKwkvKiBBcHBseSB0aGUgbm9hY2Nlc3MgYXR0cmlidXRlIHRvIHRoZSBwYWdlIC0tIHRoZXJlJ3Mgbm8gZ3VhcmQKKwkgKiBhdHRyaWJ1dGUgaW4gd2luOTUtdHlwZSBPU2VzLiAqLworCWlmICghVmlydHVhbFByb3RlY3QocEd1YXJkUGFnZSwgblBhZ2VTaXplLCBQQUdFX05PQUNDRVNTLCAmZHVtbXkpKQorCSAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBPbiBOVCwgaG93ZXZlciwgd2Ugd2FudCB0aGUgZmlyc3QgY29tbWl0dGVkIHBhZ2UgaW4gdGhlIHN0YWNrIFN0YXJ0CisJICogYXQgdGhlIHN0YWNrIGJhc2UgYW5kIG1vdmUgZm9yd2FyZCB0aHJvdWdoIG1lbW9yeSB1bnRpbCB3ZSBmaW5kIGEKKwkgKiBjb21taXR0ZWQgYmxvY2suICovCisJQllURSAqcEJsb2NrID0gcFN0YWNrQmFzZTsKKworCXdoaWxlICgxKQorCXsKKwkgICAgaWYgKFZpcnR1YWxRdWVyeShwQmxvY2ssICZtYmksIHNpemVvZiBtYmkpID09IDApCisJCXJldHVybiAwOworCisJICAgIHBCbG9jayArPSBtYmkuUmVnaW9uU2l6ZTsKKworCSAgICBpZiAobWJpLlN0YXRlICYgTUVNX0NPTU1JVCkKKwkJYnJlYWs7CisJfQorCisJLyogbWJpIG5vdyBkZXNjcmliZXMgdGhlIGZpcnN0IGNvbW1pdHRlZCBibG9jayBpbiB0aGUgc3RhY2suICovCisJaWYgKG1iaS5Qcm90ZWN0ICYgUEFHRV9HVUFSRCkKKwkgICAgcmV0dXJuIDE7CisKKwkvKiBkZWNpZGUgd2hlcmUgdGhlIGd1YXJkIHBhZ2Ugc2hvdWxkIHN0YXJ0ICovCisJaWYgKChsb25nX3UpKG1iaS5CYXNlQWRkcmVzcykgPCAobG9uZ191KXBMb3dlc3RQb3NzaWJsZVBhZ2UpCisJICAgIHBHdWFyZFBhZ2UgPSBwTG93ZXN0UG9zc2libGVQYWdlOworCWVsc2UKKwkgICAgcEd1YXJkUGFnZSA9IChCWVRFKiltYmkuQmFzZUFkZHJlc3M7CisKKwkvKiBhbGxvY2F0ZSB0aGUgZ3VhcmQgcGFnZSAqLworCWlmICghVmlydHVhbEFsbG9jKHBHdWFyZFBhZ2UsIG5QYWdlU2l6ZSwgTUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpKQorCSAgICByZXR1cm4gMDsKKworCS8qIGFwcGx5IHRoZSBndWFyZCBhdHRyaWJ1dGUgdG8gdGhlIHBhZ2UgKi8KKwlpZiAoIVZpcnR1YWxQcm90ZWN0KHBHdWFyZFBhZ2UsIG5QYWdlU2l6ZSwgUEFHRV9SRUFEV1JJVEUgfCBQQUdFX0dVQVJELAorCQkJCQkJCQkgICAgICAmZHVtbXkpKQorCSAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3Nfd2luMzIuaCBiL3NyYy9vc193aW4zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YWFhNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3Nfd2luMzIuaApAQCAtMCwwICsxLDE5MCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworLyoKKyAqIFdpbjMyIChXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDk1KSBtYWNoaW5lLWRlcGVuZGVudCB0aGluZ3MuCisgKi8KKworI2luY2x1ZGUgIm9zX2Rvcy5oIgkJLyogY29tbW9uIE1TLURPUyBhbmQgV2luMzIgc3R1ZmYgKi8KKyNpZm5kZWYgX19DWUdXSU5fXworI2luY2x1ZGUgPGRpcmVjdC5oPgkJLyogZm9yIF9ta2RpcigpICovCisjZW5kaWYKKworI2RlZmluZSBCSU5BUllfRklMRV9JTworI2RlZmluZSBVU0VfRVhFX05BTUUJCS8qIHVzZSBhcmd2WzBdIGZvciAkVklNICovCisjZGVmaW5lIE5PX0NPT0tFRF9JTlBVVAkJLyogbWNoX2luY2hhcigpIGRvZXNuJ3QgcmV0dXJuIHdob2xlIGxpbmVzICovCisjZGVmaW5lIFNZTkNfRFVQX0NMT1NFCQkvKiBzeW5jKCkgYSBmaWxlIHdpdGggZHVwKCkgYW5kIGNsb3NlKCkgKi8KKyNkZWZpbmUgVVNFX1RFUk1fQ09OU09MRQorI2lmbmRlZiBIQVZFX1NUUklOR19ICisjIGRlZmluZSBIQVZFX1NUUklOR19ICisjZW5kaWYKKyNkZWZpbmUgSEFWRV9TVFJDU1BOCisjaWZuZGVmIF9fR05VQ19fCisjZGVmaW5lIEhBVkVfU1RSSUNNUAorI2RlZmluZSBIQVZFX1NUUk5JQ01QCisjZW5kaWYKKyNpZm5kZWYgSEFWRV9TVFJGVElNRQorIyBkZWZpbmUgSEFWRV9TVFJGVElNRQkJLyogZ3Vlc3NlZCAqLworI2VuZGlmCisjZGVmaW5lIEhBVkVfTUVNU0VUCisjaWZuZGVmIEhBVkVfTE9DQUxFX0gKKyMgZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQorI2VuZGlmCisjaWZuZGVmIEhBVkVfRkNOVExfSAorIyBkZWZpbmUgSEFWRV9GQ05UTF9ICisjZW5kaWYKKyNpZm5kZWYgSEFWRV9TVERBUkdfSAorIyBkZWZpbmUgSEFWRV9TVERBUkdfSAorI2VuZGlmCisjZGVmaW5lIEhBVkVfUVNPUlQKKyNkZWZpbmUgSEFWRV9TVF9NT0RFCQkvKiBoYXZlIHN0YXQuc3RfbW9kZSAqLworCisjZGVmaW5lIEZFQVRfU0hPUlRDVVQJCS8qIHJlc29sdmUgc2hvcnRjdXRzICovCisKKyNpZiAhZGVmaW5lZChfX01JTkdXMzJfXykgXAorCSYmICFkZWZpbmVkKF9fQ1lHV0lOX18pIFwKKwkmJiAoIWRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBfX0JPUkxBTkRDX18gPj0gMHg1NTApIFwKKwkmJiAoIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID4gMTAyMCkKKy8qCisgKiBBY2Nlc3MgQ29udHJvbCBMaXN0IChhY3R1YWxseSBzZWN1cml0eSBpbmZvKS4KKyAqIE1pbmd3IGFuZCBDeWd3aW4gZG9uJ3QgaGF2ZSB0aGUgYWNsIHN0dWZmLgorICogQm9ybGFuZCBvbmx5IGluIHZlcnNpb24gNS41IGFuZCBsYXRlci4KKyAqIE1TVkMgaW4gNS4wLCBub3QgaW4gNC4yLCBkb24ndCBrbm93IGFib3V0IDQuMy4KKyAqLworIyBkZWZpbmUgSEFWRV9BQ0wKKyNlbmRpZgorCisjZGVmaW5lIFVTRV9GTkFNRV9DQVNFCQkvKiBhZGp1c3QgY2FzZSBvZiBmaWxlIG5hbWVzICovCisjaWYgIWRlZmluZWQoRkVBVF9DTElQQk9BUkQpICYmIGRlZmluZWQoRkVBVF9WSVNVQUwpICYmIGRlZmluZWQoRkVBVF9NT1VTRSkKKyMgZGVmaW5lIEZFQVRfQ0xJUEJPQVJECQkvKiBpbmNsdWRlIGNsaXBib2FyZCBzdXBwb3J0ICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fREFURV9fKSAmJiBkZWZpbmVkKF9fVElNRV9fKQorIyBkZWZpbmUgSEFWRV9EQVRFX1RJTUUKKyNlbmRpZgorI2lmbmRlZiBGRUFUX0dVSV9XMzIJCS8qIEdVSSB3b3JrcyBkaWZmZXJlbnQgKi8KKyMgZGVmaW5lIEJSRUFLQ0hFQ0tfU0tJUCAgICAxCS8qIGNhbGwgbWNoX2JyZWFrY2hlY2soKSBlYWNoIHRpbWUsIGl0J3MgZmFzdCAqLworI2VuZGlmCisjZGVmaW5lIEhBVkVfQVZBSUxfTUVNCisKKyNkZWZpbmUgSEFWRV9QVVRFTlYJCS8qIGF0IGxlYXN0IEJjYyA1LjIgYW5kIE1TQyBoYXZlIGl0ICovCisKKyNpZmRlZiBGRUFUX0dVSV9XMzIKKyMgZGVmaW5lIE5PX0NPTlNPTEUJCS8qIGRvbid0IGluY2x1ZGVkIGNvbnNvbGUtb25seSBjb2RlICovCisjZW5kaWYKKworLyogdG91cHBlcigpIGlzIG5vdCByZWFsbHkgYnJva2VuLCBidXQgaXQncyB2ZXJ5IHNsb3cuCVByb2JhYmx5IGJlY2F1c2Ugb2YKKyAqIHVzaW5nIFVuaWNvZGUgY2hhcmFjdGVycyBvbiBXaW5kb3dzIE5UICovCisjZGVmaW5lIEJST0tFTl9UT1VQUEVSCisKKyNkZWZpbmUgRk5BTUVfSUxMRUdBTCAiXCIqPz48fCIgLyogaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGEgZmlsZSBuYW1lICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZm5kZWYgU1RSSUNUCisjIGRlZmluZSBTVFJJQ1QKKyNlbmRpZgorI2lmbmRlZiBDT0JKTUFDUk9TCisjIGRlZmluZSBDT0JKTUFDUk9TCS8qIEZvciBPTEU6IEVuYWJsZSAiZnJpZW5kbGllciIgYWNjZXNzIHRvIG9iamVjdHMgKi8KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLyoKKyAqIFdpbjMyIGhhcyBwbGVudHkgb2YgbWVtb3J5LCB1c2UgbGFyZ2UgYnVmZmVycworICovCisjZGVmaW5lIENNREJVRkZTSVpFIDEwMjQJLyogc2l6ZSBvZiB0aGUgY29tbWFuZCBwcm9jZXNzaW5nIGJ1ZmZlciAqLworCisvKiBfTUFYX1BBVEggaXMgb25seSAyNTYgKHN0ZGxpYi5oKSwgYnV0IHdlIHdhbnQgbW9yZSBmb3IgdGhlICdwYXRoJyBvcHRpb24sCisgKiB0aHVzIHVzZSBhIGxhcmdlciBudW1iZXIuICovCisjZGVmaW5lIE1BWFBBVEhMCTEwMjQKKworI2lmbmRlZiBCQVNFTkFNRUxFTgorIyBkZWZpbmUgQkFTRU5BTUVMRU4JKF9NQVhfUEFUSCAtIDUpCS8qIGxlbmd0aCBvZiBiYXNlIG9mIGZpbGUgbmFtZSAqLworI2VuZGlmCisKKyNkZWZpbmUgVEVNUE5BTUVMRU4JX01BWF9QQVRICS8qIGxlbmd0aCBvZiB0ZW1wIGZpbGUgbmFtZSBwYXRoICovCisKKyNpZm5kZWYgREZMVF9NQVhNRU0KKyMgZGVmaW5lIERGTFRfTUFYTUVNCSgyKjEwMjQpICAgIC8qIHVzZSB1cCB0byAyIE1ieXRlIGZvciBhIGJ1ZmZlciAqLworI2VuZGlmCisKKyNpZm5kZWYgREZMVF9NQVhNRU1UT1QKKyMgZGVmaW5lIERGTFRfTUFYTUVNVE9UCSg1KjEwMjQpICAgIC8qIHVzZSB1cCB0byA1IE1ieXRlIGZvciBWaW0gKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCisgICAgLyogU3VwcG9ydCBmb3IgX190cnkgLyBfX2V4Y2VwdC4gIEFsbCB2ZXJzaW9ucyBvZiBNU1ZDIGFuZCBCb3JsYW5kIEMgYXJlCisgICAgICogZXhwZWN0ZWQgdG8gaGF2ZSB0aGlzLiAgQW55IG90aGVyIGNvbXBpbGVycyB0aGF0IHN1cHBvcnQgaXQ/ICovCisjIGRlZmluZSBIQVZFX1RSWV9FWENFUFQgMQorIyBpbmNsdWRlIDxtYWxsb2MuaD4JCS8qIGZvciBfcmVzZXRzdGtvZmx3KCkgKi8KKyMgaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDEzMDApCisjICBkZWZpbmUgUkVTRVRTVEtPRkxXIF9yZXNldHN0a29mbHcKKyMgZWxzZQorIyAgZGVmaW5lIFJFU0VUU1RLT0ZMVyBteXJlc2V0c3Rrb2ZsdworIyAgZGVmaW5lIE1ZUkVTRVRTVEtPRkxXCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIFNvbWUgc2ltcGxlIGRlYnVnZ2luZyBtYWNyb3MgdGhhdCBsb29rIGFuZCBiZWhhdmUgYSBsb3QgbGlrZSB0aGVpcgorICogbmFtZXNha2VzIGluIE1GQy4KKyAqLworCisjaWZkZWYgX0RFQlVHCisKKyMgaWYgZGVmaW5lZChfTVNDX1ZFUikJJiYgIChfTVNDX1ZFUiA+PSAxMDAwKQorICAgLyogVXNlIHRoZSBuZXcgZGVidWdnaW5nIHRvb2xzIGluIFZpc3VhbCBDKysgNC54ICovCisjICBpbmNsdWRlIDxjcnRkYmcuaD4KKyMgIGRlZmluZSBBU1NFUlQoZikgX0FTU0VSVChmKQorIyBlbHNlCisjICBpbmNsdWRlIDxhc3NlcnQuaD4KKyMgIGRlZmluZSBBU1NFUlQoZikgYXNzZXJ0KGYpCisjIGVuZGlmCisKKyMgZGVmaW5lIFZFUklGWShmKQkJQVNTRVJUKGYpCisjIGRlZmluZSBERUJVR19PTkxZKGYpCQkoZikKKyMgZGVmaW5lIFRSQUNFCQkJVHJhY2UKKyMgZGVmaW5lIFRSQUNFMChzeikJCVRyYWNlKF9UKCIlcyIpLCBfVChzeikpCisjIGRlZmluZSBUUkFDRTEoc3osIHAxKQkJVHJhY2UoX1Qoc3opLCBwMSkKKyMgZGVmaW5lIFRSQUNFMihzeiwgcDEsIHAyKQlUcmFjZShfVChzeiksIHAxLCBwMikKKyMgZGVmaW5lIFRSQUNFMyhzeiwgcDEsIHAyLCBwMykgVHJhY2UoX1Qoc3opLCBwMSwgcDIsIHAzKQorIyBkZWZpbmUgVFJBQ0U0KHN6LCBwMSwgcDIsIHAzLCBwNCkgVHJhY2UoX1Qoc3opLCBwMSwgcDIsIHAzLCBwNCkKKworLyogSW4gZGVidWcgdmVyc2lvbiwgd3JpdGVzIHRyYWNlIG1lc3NhZ2VzIHRvIGRlYnVnIHN0cmVhbSAqLwordm9pZCBfX2NkZWNsCitUcmFjZShjaGFyICpwc3pGb3JtYXQsIC4uLik7CisKKyNlbHNlIC8qICFfREVCVUcgKi8KKworICAvKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGFsbCBjb21waWxlIGF3YXkgdG8gbm90aGluZyAqLworIyBkZWZpbmUgQVNTRVJUKGYpCQkoKHZvaWQpMCkKKyMgZGVmaW5lIFZFUklGWShmKQkJKCh2b2lkKWYpCisjIGRlZmluZSBERUJVR19PTkxZKGYpCQkoKHZvaWQpMCkKKyMgZGVmaW5lIFRSQUNFCQkJMSA/ICh2b2lkKTAgOiBwcmludGYKKyMgZGVmaW5lIFRSQUNFMChzeikKKyMgZGVmaW5lIFRSQUNFMShzeiwgcDEpCisjIGRlZmluZSBUUkFDRTIoc3osIHAxLCBwMikKKyMgZGVmaW5lIFRSQUNFMyhzeiwgcDEsIHAyLCBwMykKKyMgZGVmaW5lIFRSQUNFNChzeiwgcDEsIHAyLCBwMywgcDQpCisKKyNlbmRpZiAvKiAhX0RFQlVHICovCisKKworI2RlZmluZSBBU1NFUlRfUE9JTlRFUihwLCB0eXBlKSBcCisgICAgQVNTRVJUKCgocCkgIT0gTlVMTCkgICYmICBJc1ZhbGlkQWRkcmVzcygocCksIHNpemVvZih0eXBlKSwgRkFMU0UpKQorCisjZGVmaW5lIEFTU0VSVF9OVUxMX09SX1BPSU5URVIocCwgdHlwZSkgXAorICAgIEFTU0VSVCgoKHApID09IE5VTEwpICB8fCAgSXNWYWxpZEFkZHJlc3MoKHApLCBzaXplb2YodHlwZSksIEZBTFNFKSkKKworI2RlZmluZSBtY2hfc2V0ZW52KG5hbWUsIHZhbCwgeCkgc2V0ZW52KG5hbWUsIHZhbCwgeCkKKyNkZWZpbmUgbWNoX2dldGVudih4KSAoY2hhcl91ICopZ2V0ZW52KChjaGFyICopKHgpKQorI2lmZGVmIF9fQk9STEFORENfXworIyBkZWZpbmUgdmltX21rZGlyKHgsIHkpIG1rZGlyKHgpCisjZWxzZQorIyBkZWZpbmUgdmltX21rZGlyKHgsIHkpIF9ta2Rpcih4KQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3NkZWYuc2ggYi9zcmMvb3NkZWYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDdkNGYyYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc2RlZi5zaApAQCAtMCwwICsxLDk5IEBACisjISAvYmluL3NoCisjCisjIG9zZGVmLnNoIC0tIGNvcHkgb3NkZWYuaC5pbiB0byBvc2RlZi5oIHdoaWxlIHJlbW92aW5nIGRlY2xhcmF0aW9ucworIyBmb3VuZCBpbiB0aGUgc3lzdGVtIGhlYWRlciBmaWxlcy4gQ2F1dGlvbjogd2VpcmQgc2VkIG1hZ2ljIGdvaW5nIG9uIGhlcmUuCisjIFdhcm5pbmdzIGFyZSBwcmludGVkIGlmIHNlZCBkaWQgbm90IHN1cnZpdmUuCisjCisjIChDKSBNaWNoYWVsIFNjaHJvZWRlciwgSnVlcmdlbiBXZWlnZXJ0CisjCisjIG9zZGVmLmguaW4gaGFzIGJlZW4gc3BsaXQgaW50byBvc2RlZjEuaC5pbiBhbmQgb3NkZWYyLmguaW4sIGJlY2F1c2Ugc29tZQorIyBzZWQncyBjb3VsZCBub3QgaGFuZGxlIHRoZSBhbW91bnQgb2YgY29tbWFuZHMgKGlzIDUwIGNvbW1hbmRzIHRoZSBsaW1pdD8pLgorIworIyAzMS4xMC45NSBqdy4KKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBDQz1jYworZmkKK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIHNyY2Rpcj0uCitmaQorCitybSAtZiBjb3JlKiAqLmNvcmUKKworY2F0IDw8IEVPRiA+IG9zZGVmMC5jCisjaWZuZGVmIF9fQVBQTEVfXworIyBkZWZpbmUgc2VsZWN0IHNlbGVjdF9kZWNsYXJlZF93cm9uZworI2VuZGlmCisjZGVmaW5lIHRnZXRzdHIgdGdldHN0cl9kZWNsYXJlZF93cm9uZworI2luY2x1ZGUgImF1dG8vY29uZmlnLmgiCisjaW5jbHVkZSAib3NfdW5peC5oIgkvKiBicmluZyBpbiBtb3N0IGhlYWRlciBmaWxlcywgbW9yZSBmb2xsb3cgYmVsb3cgKi8KKyNpbmNsdWRlICJvc191bml4eC5oIgkvKiBicmluZyBpbiBoZWFkZXIgZmlsZXMgZm9yIG9zX3VuaXguYyAqLworCisjaWZkZWYgSEFWRV9URVJNQ0FQX0gKKyMgaW5jbHVkZSA8dGVybWNhcC5oPgkvKiBvbmx5IGZvciB0ZXJtLmMgKi8KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjIGluY2x1ZGUgPGZjbnRsLmg+CQkvKiBvbmx5IHVzZWQgaW4gYSBmZXcgZmlsZXMgKi8KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfU1RBVEZTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPHN5cy9zdGF0ZnMuaD4JLyogb25seSBmb3IgbWVtZmlsZS5jICovCisjZW5kaWYKKworI2lmZGVmIEhBVkVfWDExCisjIGluY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNlbmRpZgorRU9GCisKKyMgTWFjIHVzZXMgcHJlY29tcGlsZWQgaGVhZGVycywgYnV0IHdlIG5lZWQgcmVhbCBoZWFkZXJzIGhlcmUuCitjYXNlIGB1bmFtZWAgaW4KKyAgICBEYXJ3aW4pCSRDQyAtSS4gLUkkc3JjZGlyIC1FIC1uby1jcHAtcHJlY29tcCBvc2RlZjAuYyA+b3NkZWYwLmNjOzsKKyAgICAqKQkJJENDIC1JLiAtSSRzcmNkaXIgLUUgb3NkZWYwLmMgPm9zZGVmMC5jYzs7Citlc2FjCisKKyMgaW5zZXJ0IGEgc3BhY2UgaW4gZnJvbnQgb2YgZWFjaCBsaW5lLCBzbyB0aGF0IGEgZnVuY3Rpb24gbmFtZSBhdCB0aGUKKyMgc3RhcnQgb2YgdGhlIGxpbmUgaXMgbWF0Y2hlZCB3aXRoICJbKSosIAldXDFbIAkoXSIKK3NlZCA8IG9zZGVmMC5jYyAtZSAnL1woLi4qXCkvcy8vIFwxLycgPiBvc2RlZjAuY2NjCisKK3NlZCA8ICRzcmNkaXIvb3NkZWYxLmguaW4gLW4gLWUgJy9eZXh0ZXJuL3NALipbKSogCV1bKSogCV0qXChbYS16QS1aX11bYS16QS1aMC05X10qXCkgX19BUkdTLipAL1spKiwgCV1bKF0qXDFbKV0qWyAJKF0vaVxcXAorXFwvXFxbXmEtekEtWl9cXF1cMSBfX0FSR1NcXC9kQHAnID4gb3NkZWYxMS5zZWQKKworc2VkIDwgJHNyY2Rpci9vc2RlZjIuaC5pbiAtbiAtZSAnL15leHRlcm4vc0AuKlspKiAJXVspKiAJXSpcKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKSBfX0FSR1MuKkAvWykqLCAJXVsoXSpcMVspXSpbIAkoXS9pXFxcCitcXC9cXFteYS16QS1aX1xcXVwxIF9fQVJHU1xcL2RAcCcgPiBvc2RlZjIxLnNlZAorCitjYXQgPDwgRU9GID4gb3NkZWYyLnNlZAorMWlcXAorLyoKKzFpXFwKKyAqIG9zZGVmLmggaXMgYXV0b21hZ2ljYWxseSBjcmVhdGVkIGZyb20gb3NkZWY/LmguaW4gYnkgb3NkZWYuc2ggLS0gRE8gTk9UIEVESVQKKzFpXFwKKyAqLworRU9GCisKK2NhdCBvc2RlZjAuY2NjIHwgc2VkIC1uIC1mIG9zZGVmMTEuc2VkID4+IG9zZGVmMi5zZWQKK3NlZCAtZiBvc2RlZjIuc2VkIDwgJHNyY2Rpci9vc2RlZjEuaC5pbiA+IGF1dG8vb3NkZWYuaAorCitjYXQgb3NkZWYwLmNjYyB8IHNlZCAtbiAtZiBvc2RlZjIxLnNlZCA+IG9zZGVmMi5zZWQKK3NlZCAtZiBvc2RlZjIuc2VkIDwgJHNyY2Rpci9vc2RlZjIuaC5pbiA+PiBhdXRvL29zZGVmLmgKKworcm0gb3NkZWYwLmMgb3NkZWYwLmNjIG9zZGVmMC5jY2Mgb3NkZWYxMS5zZWQgb3NkZWYyMS5zZWQgb3NkZWYyLnNlZAorCitpZiB0ZXN0IC1mIGNvcmUqOyB0aGVuCisgIGZpbGUgY29yZSoKKyAgZWNobyAiICBTb3JyeSwgeW91ciBzZWQgaXMgYnJva2VuLiBDYWxsIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvci4iCisgIGVjaG8gIiAgTWVhbndoaWxlLCB5b3UgbWF5IHRyeSB0byBjb21waWxlIFZpbSB3aXRoIGFuIGVtcHR5IG9zZGVmLmggZmlsZS4iCisgIGVjaG8gIiAgSWYgeW91IGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHByb3RvdHlwZXMsIG1vdmUgdGhlIG5lZWRlZCIKKyAgZWNobyAiICBvbmVzIGZyb20gb3NkZWYxLmguaW4gYW5kIG9zZGVmMi5oLmluIHRvIG9zZGVmLmguIgorICBleGl0IDEKK2ZpCitjYXQgJHNyY2Rpci9vc2RlZjEuaC5pbiAkc3JjZGlyL29zZGVmMi5oLmluID5vc2RlZlguaC5pbgoraWYgZXZhbCB0ZXN0ICJgZGlmZiBhdXRvL29zZGVmLmggb3NkZWZYLmguaW4gfCB3YyAtbGAiIC1lcSA0OyB0aGVuCisgIGVjaG8gIiAgSG1tLCBzZWQgaXMgdmVyeSBwZXNzaW1pc3RpYyBhYm91dCB5b3VyIHN5c3RlbSBoZWFkZXIgZmlsZXMuIgorICBlY2hvICIgIEJ1dCBpdCBkaWQgbm90IGR1bXAgY29yZSAtLSBzdHJhbmdlISBMZXQncyBjb250aW51ZSBjYXJlZnVsbHkuLi4iCisgIGVjaG8gIiAgSWYgdGhpcyBmYWlscywgeW91IG1heSB3YW50IHRvIHJlbW92ZSBvZmZlbmRpbmcgbGluZXMgZnJvbSBvc2RlZi5oIgorICBlY2hvICIgIG9yIHRyeSB3aXRoIGFuIGVtcHR5IG9zZGVmLmggZmlsZSwgaWYgeW91ciBjb21waWxlciBjYW4gZG8gd2l0aG91dCIKKyAgZWNobyAiICBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuIgorZmkKK3JtIG9zZGVmWC5oLmluCmRpZmYgLS1naXQgYS9zcmMvb3NkZWYxLmguaW4gYi9zcmMvb3NkZWYxLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFjNzhlMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vc2RlZjEuaC5pbgpAQCAtMCwwICsxLDEzNyBAQAorLyogYXV0b2NvbmYgY2Fubm90IGZpZGRsZSBvdXQgZGVjbGFyYXRpb25zLiBVc2Ugb3VyIGhvbWVicmV3biB0b29scy4gKGp3KSAqLworLyoKKyAqIERlY2xhcmF0aW9ucyB0aGF0IG1heSBjYXVzZSBjb25mbGljdHMgYmVsb25nIGhlcmUgc28gdGhhdCBvc2RlZi5zaAorICogY2FuIGNsZWFuIG91dCB0aGUgZm9yZXN0LiBFdmVyeXRoaW5nIGVsc2UgYmVsb25ncyBpbiBvc191bml4LmgKKyAqCisgKiBIb3cgdGhpcyB3b3JrczoKKyAqIC0gVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB1bml4IHByb3RvdHlwZXMgdGhhdCBWaW0gbWlnaHQgbmVlZC4KKyAqIC0gVGhlIHNoZWxsIHNjcmlwdCBvc2RlZi5zaCBpcyBleGVjdXRlZCBhdCBjb21waWxlIHRpbWUgdG8gcmVtb3ZlIGFsbCB0aGUKKyAqICAgcHJvdG90eXBlcyB0aGF0IGFyZSBpbiBhbiBpbmNsdWRlIGZpbGUuIFRoaXMgcmVzdWx0cyBpbiBvc2RlZi5oLgorICogLSBvc2RlZi5oIGlzIGluY2x1ZGVkIGluIHZpbS5oLgorICoKKyAqIHNlZCBjYW5ub3QgYWx3YXlzIGhhbmRsZSBzbyBtYW55IGNvbW1hbmRzLCB0aGlzIGlzIGZpbGUgMSBvZiAyCisgKi8KKworZXh0ZXJuIGludAlwcmludGYgX19BUkdTKChjaGFyICosIC4uLikpOworZXh0ZXJuIGludAlmcHJpbnRmIF9fQVJHUygoRklMRSAqLCBjaGFyICosIC4uLikpOworZXh0ZXJuIGludAlzcHJpbnRmIF9fQVJHUygoY2hhciAqLCBjaGFyICosIC4uLikpOworZXh0ZXJuIGludAlzc2NhbmYgX19BUkdTKChjaGFyICosIGNoYXIgKiwgLi4uKSk7CisjaWZuZGVmIGZvcGVuCS8qIGNvdWxkIGJlIHJlZGVmaW5lZCB0byBmb3BlbjY0KCkgKi8KK2V4dGVybiBGSUxFCSpmb3BlbiBfX0FSR1MoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CisjZW5kaWYKK2V4dGVybiBpbnQJZmNsb3NlIF9fQVJHUygoRklMRSAqKSk7CitleHRlcm4gaW50CWZzZWVrIF9fQVJHUygoRklMRSAqLCBsb25nLCBpbnQpKTsKKyNpZmRlZiBIQVZFX0ZTRUVLTworZXh0ZXJuIGludAlmc2Vla28gX19BUkdTKChGSUxFICosIG9mZl90LCBpbnQpKTsKKyNlbmRpZgorZXh0ZXJuIGxvbmcJZnRlbGwgX19BUkdTKChGSUxFICopKTsKKyNpZmRlZiBIQVZFX0ZURUxMTworZXh0ZXJuIG9mZl90CWZ0ZWxsbyBfX0FSR1MoKEZJTEUgKikpOworI2VuZGlmCitleHRlcm4gdm9pZAlyZXdpbmQgX19BUkdTKChGSUxFICopKTsKK2V4dGVybiBpbnQJZnJlYWQgX19BUkdTKChjaGFyICosIGludCwgaW50LCBGSUxFICopKTsKK2V4dGVybiBpbnQJZndyaXRlIF9fQVJHUygoY2hhciAqLCBpbnQsIGludCwgRklMRSAqKSk7CitleHRlcm4gaW50CWZwdXRzIF9fQVJHUygoY2hhciAqLCBGSUxFICopKTsKKyNpZm5kZWYgZmVycm9yCS8qIGxldCBtZSBzYXkgaXQgYWdhaW46ICJtYWNyb3Mgc2hvdWxkIG5ldmVyIGhhdmUgcHJvdG90eXBlcyIgKi8KK2V4dGVybiBpbnQJZmVycm9yIF9fQVJHUygoRklMRSAqKSk7CisjZW5kaWYKK2V4dGVybiBpbnQJZmZsdXNoIF9fQVJHUygoRklMRSAqKSk7CisjaWYgZGVmaW5lZChzdW4pIHx8IGRlZmluZWQoX1NFUVVFTlRfKQorLyogdXNlZCBpbnNpZGUgb2Ygc3RkaW8gbWFjcm9zIGdldGMoKSwgcHV0cygpLCBwdXRjaGFyKCkuLi4gKi8KK2V4dGVybiBpbnQJX2Zsc2J1ZiBfX0FSR1MoKGludCwgRklMRSAqKSk7CitleHRlcm4gaW50CV9maWxidWYgX19BUkdTKChGSUxFICopKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSEFWRV9TRUxFQ1QpCitzdHJ1Y3QgcG9sbGZkOwkJCS8qIGZvciBwb2xsIF9fQVJHUyAqLworZXh0ZXJuIGludAlwb2xsIF9fQVJHUygoc3RydWN0IHBvbGxmZCAqLCBsb25nLCBpbnQpKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9NRU1TRVQKK2V4dGVybiB2b2lkCSptZW1zZXQgX19BUkdTKCh2b2lkICosIGludCwgc2l6ZV90KSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0JDTVAKK2V4dGVybiBpbnQJYmNtcCBfX0FSR1MoKHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTUVNQ01QCitleHRlcm4gaW50CW1lbWNtcCBfX0FSR1MoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSUEJSSworZXh0ZXJuIGNoYXIJKnN0cnBicmsgX19BUkdTKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworI2VuZGlmCisjaWZkZWYgVVNFQkNPUFkKK2V4dGVybiB2b2lkCWJjb3B5IF9fQVJHUygoY2hhciAqLCBjaGFyICosIGludCkpOworI2Vsc2UKKyMgaWZkZWYgVVNFTUVNQ1BZCitleHRlcm4gdm9pZAltZW1jcHkgX19BUkdTKChjaGFyICosIGNoYXIgKiwgaW50KSk7CisjIGVsc2UKKyMgIGlmZGVmIFVTRU1FTU1PVkUKK2V4dGVybiB2b2lkCW1lbW1vdmUgX19BUkdTKChjaGFyICosIGNoYXIgKiwgaW50KSk7CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisvKiB1c2VkIGluc2lkZSBvZiBGRF9aRVJPIG1hY3JvOiAqLworZXh0ZXJuIHZvaWQJYnplcm8gX19BUkdTKCh2b2lkICosIHNpemVfdCkpOworI2lmZGVmIEhBVkVfU0VUU0lECitleHRlcm4gcGlkX3QJc2V0c2lkIF9fQVJHUygodm9pZCkpOworI2VuZGlmCisjaWZkZWYgSEFWRV9TRVRQR0lECitleHRlcm4gaW50CXNldHBnaWQgX19BUkdTKChwaWRfdCwgcGlkX3QpKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSVE9MCitleHRlcm4gaW50CXN0cnRvbCBfX0FSR1MoKGNoYXIgKiwgY2hhciAqKiwgaW50KSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUkZUSU1FCitleHRlcm4gc2l6ZV90CXN0cmZ0aW1lIF9fQVJHUygoY2hhciAqLCBzaXplX3QsIGNoYXIgKiwgc3RydWN0IHRtICopKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSQ0FTRUNNUAorZXh0ZXJuIGludAlzdHJjYXNlY21wIF9fQVJHUygoY2hhciAqLCBjaGFyICopKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSTkNBU0VDTVAKK2V4dGVybiBpbnQJc3RybmNhc2VjbXAgX19BUkdTKChjaGFyICosIGNoYXIgKiwgc2l6ZV90KSk7CisjZW5kaWYKKyNpZm5kZWYgc3RyZHVwCitleHRlcm4gY2hhcgkqc3RyZHVwIF9fQVJHUygoY29uc3QgY2hhciAqKSk7CisjZW5kaWYKK2V4dGVybiBpbnQJYXRvaSBfX0FSR1MoKGNoYXIgKikpOworZXh0ZXJuIGludAlhdG9sIF9fQVJHUygoY2hhciAqKSk7CisKKyNpZm5kZWYgVVNFX1NZU1RFTQorZXh0ZXJuIGludAlmb3JrIF9fQVJHUygodm9pZCkpOworZXh0ZXJuIGludAlleGVjdnAgX19BUkdTKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiopKTsKK2V4dGVybiBpbnQJd2FpdCBfX0FSR1MoKGludCAqKSk7IC8qIHdpbGwgdGhpcyBicmVhayB0aGluZ3MgLi4uPyAqLworZXh0ZXJuIGludAl3YWl0cGlkIF9fQVJHUygocGlkX3QsIGludCAqLCBpbnQpKTsKKyNlbmRpZgorCitleHRlcm4gaW50CXRvdXBwZXIgX19BUkdTKChpbnQpKTsKK2V4dGVybiBpbnQJdG9sb3dlciBfX0FSR1MoKGludCkpOworCitleHRlcm4gUkVUU0lHVFlQRSAoKnNpZ25hbCBfX0FSR1MoKGludCwgUkVUU0lHVFlQRSAoKmZ1bmMpIFNJR1BST1RPQVJHKSkpIF9fQVJHUyhTSUdQUk9UT0FSRyk7CisjaWZkZWYgSEFWRV9TSUdTRVQKK2V4dGVybiBSRVRTSUdUWVBFICgqc2lnc2V0IF9fQVJHUygoaW50LCBSRVRTSUdUWVBFICgqZnVuYykgU0lHUFJPVE9BUkcpKSkgX19BUkdTKFNJR1BST1RPQVJHKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NFVEpNUF9IKQorIyBpZmRlZiBIQVZFX1NJR1NFVEpNUAorZXh0ZXJuIGludAlzaWdzZXRqbXAgX19BUkdTKChzaWdqbXBfYnVmLCBpbnQpKTsKK2V4dGVybiB2b2lkCXNpZ2xvbmdqbXAgX19BUkdTKChzaWdqbXBfYnVmLCBpbnQpKTsKKyMgZWxzZQorZXh0ZXJuIGludAlzZXRqbXAgX19BUkdTKChqbXBfYnVmKSk7CitleHRlcm4gdm9pZAlsb25nam1wIF9fQVJHUygoam1wX2J1ZiwgaW50KSk7CisjIGVuZGlmCisjZW5kaWYKKworZXh0ZXJuIGludAlraWxsIF9fQVJHUygoaW50LCBpbnQpKTsKKworZXh0ZXJuIGludAlhY2Nlc3MgX19BUkdTKChjaGFyICosIGludCkpOworZXh0ZXJuIGludAlmc3luYyBfX0FSR1MoKGludCkpOworZXh0ZXJuIGludAlmY2hvd24gX19BUkdTKChpbnQsIGludCwgaW50KSk7CisjaWYgZGVmaW5lZChIQVZFX0dFVENXRCkgJiYgIWRlZmluZWQoc3VuKQorZXh0ZXJuIGNoYXIJKmdldGN3ZCBfX0FSR1MoKGNoYXIgKiwgaW50KSk7CisjZWxzZQorZXh0ZXJuIGNoYXIJKmdldHdkIF9fQVJHUygoY2hhciAqKSk7CisjZW5kaWYKKyNpZm5kZWYgX19hbHBoYQkvKiBzdWdnZXN0ZWQgYnkgQ2FtcGJlbGwgKi8KK2V4dGVybiBpbnQJaW9jdGwgX19BUkdTKChpbnQsIGludCwgLi4uKSk7CisjZW5kaWYKK2V4dGVybiBpbnQJY2htb2QgX19BUkdTKChjb25zdCBjaGFyICosIG1vZGVfdCkpOwpkaWZmIC0tZ2l0IGEvc3JjL29zZGVmMi5oLmluIGIvc3JjL29zZGVmMi5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYTc4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3NkZWYyLmguaW4KQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIG9zZGVmMi5oLmluIC0gU2VlIG9zZGVmMS5oLmluIGZvciBhIGRlc2NyaXB0aW9uLgorICovCisKK2V4dGVybiBpbnQJcmVtb3ZlIF9fQVJHUygoY29uc3QgY2hhciAqKSk7CitleHRlcm4gaW50CXJlbmFtZSBfX0FSR1MoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitleHRlcm4gaW50CWZyZWUgX19BUkdTKChjaGFyICopKTsKK2V4dGVybiBjaGFyCSptYWxsb2MgX19BUkdTKCh1bnNpZ25lZCBpbnQpKTsKK2V4dGVybiBjaGFyCSpyZWFsbG9jIF9fQVJHUygoY2hhciAqLCBpbnQpKTsKK2V4dGVybiBjaGFyCSpnZXRlbnYgX19BUkdTKChjaGFyICopKTsKK2V4dGVybiBpbnQJc2V0ZW52IF9fQVJHUygoY2hhciAqLCBjaGFyICosIGludCkpOworZXh0ZXJuIGludAlwdXRlbnYgX19BUkdTKChjb25zdCBjaGFyICopKTsKKworZXh0ZXJuIGludAlnZXRob3N0bmFtZSBfX0FSR1MoKGNoYXIgKiwgaW50KSk7CitleHRlcm4gdm9pZAlwZXJyb3IgX19BUkdTKChjaGFyICopKTsKKworZXh0ZXJuIGludAlzbGVlcCBfX0FSR1MoKGludCkpOworZXh0ZXJuIGludAl1c2xlZXAgX19BUkdTKCh1bnNpZ25lZCBpbnQpKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQJYWxhcm0gX19BUkdTKCh1bnNpZ25lZCBpbnQpKTsKK2V4dGVybiBpbnQJY2hkaXIgX19BUkdTKChjaGFyICopKTsKK2V4dGVybiBpbnQJZmNoZGlyIF9fQVJHUygoaW50KSk7CisjaWZuZGVmIHN0YXQJLyogY291bGQgYmUgcmVkZWZpbmVkIHRvIHN0YXQ2NCgpICovCitleHRlcm4gaW50CXN0YXQgX19BUkdTKChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopKTsKKyNlbmRpZgorI2lmbmRlZiBsc3RhdAkvKiBjb3VsZCBiZSByZWRlZmluZWQgdG8gbHN0YXQ2NCgpICovCitleHRlcm4gaW50CWxzdGF0IF9fQVJHUygoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKSk7CisjZW5kaWYKK2V4dGVybiBpbnQJZnN0YXQgX19BUkdTKChpbnQsIHN0cnVjdCBzdGF0ICopKTsKK2V4dGVybiBpbnQJb3BlbiBfX0FSR1MoKGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pKTsKK2V4dGVybiBpbnQJY2xvc2UgX19BUkdTKChpbnQpKTsKK2V4dGVybiBpbnQJcmVhZCBfX0FSR1MoKGludCwgY2hhciAqLCBzaXplX3QpKTsKK2V4dGVybiBpbnQJd3JpdGUgX19BUkdTKChpbnQsIGNoYXIgKiwgc2l6ZV90KSk7CitleHRlcm4gaW50CXBpcGUgX19BUkdTKChpbnQgKikpOworZXh0ZXJuIG9mZl90CWxzZWVrIF9fQVJHUygoaW50LCBvZmZfdCwgaW50KSk7CitleHRlcm4gdm9pZAlzeW5jIF9fQVJHUygodm9pZCkpOworZXh0ZXJuIHVpZF90CWdldHVpZCBfX0FSR1MoKHZvaWQpKTsKK2V4dGVybiBnaWRfdAlnZXRnaWQgX19BUkdTKCh2b2lkKSk7CitleHRlcm4gdm9pZAlxc29ydCBfX0FSR1MoKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSk7CisKK2V4dGVybiBpbnQJaXNhdHR5IF9fQVJHUygoaW50KSk7CitleHRlcm4gaW50CWdldHBpZCBfX0FSR1MoKHZvaWQpKTsKK2V4dGVybiBpbnQJZHVwIF9fQVJHUygoaW50KSk7CitleHRlcm4gaW50CXVubGluayBfX0FSR1MoKGNvbnN0IGNoYXIgKikpOworZXh0ZXJuIGludAlsaW5rIF9fQVJHUygoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK2V4dGVybiBpbnQJbWtkaXIgX19BUkdTKChjb25zdCBjaGFyICosIG1vZGVfdCkpOworZXh0ZXJuIGludAlybWRpciBfX0FSR1MoKGNvbnN0IGNoYXIgKikpOworCitleHRlcm4gaW50CXRnZXRlbnQgX19BUkdTKChjaGFyICosIGNoYXIgKikpOworZXh0ZXJuIGludAl0Z2V0bnVtIF9fQVJHUygoY2hhciAqKSk7CitleHRlcm4gaW50CXRnZXRmbGFnIF9fQVJHUygoY2hhciAqKSk7CitleHRlcm4gY2hhcgkqdGdvdG8gX19BUkdTKChjaGFyICosIGludCwgaW50KSk7CitleHRlcm4gaW50CXRwdXRzIF9fQVJHUygoY2hhciAqLCBpbnQsIGludCAoKikoaW50KSkpOworCisjaWZkZWYgSEFWRV9URVJNSU9TX0gKK3N0cnVjdCB0ZXJtaW9zOwkJLyogZm9yIHRjZ2V0YXR0ciBfX0FSR1MgKi8KK2V4dGVybiBpbnQJdGNnZXRhdHRyIF9fQVJHUygoaW50LCBzdHJ1Y3QgdGVybWlvcyAqKSk7CitleHRlcm4gaW50CXRjc2V0YXR0ciBfX0FSR1MoKGludCwgaW50LCBjb25zdCBzdHJ1Y3QgdGVybWlvcyAqKSk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1NUQVRGU19ICitzdHJ1Y3Qgc3RhdGZzOwkJLyogZm9yIGZzdGF0ZnMgX19BUkdTICovCitleHRlcm4gaW50CWZzdGF0ZnMgX19BUkdTKChpbnQsIHN0cnVjdCBzdGF0ZnMgKiwgaW50LCBpbnQpKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKK3N0cnVjdCB0aW1ldmFsOwkJLyogZm9yIGdldHRpbWVvZmRheSBfX0FSR1MgKi8KK3N0cnVjdCB0aW1lem9uZTsJLyogZm9yIGdldHRpbWVvZmRheSBfX0FSR1MgKi8KK2V4dGVybiBpbnQJZ2V0dGltZW9mZGF5IF9fQVJHUygoc3RydWN0IHRpbWV2YWwgKnRwLCBzdHJ1Y3QgdGltZXpvbmUgKnR6cCkpOworZXh0ZXJuIHRpbWVfdAl0aW1lIF9fQVJHUygodGltZV90ICopKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9HRVRQV05BTQorc3RydWN0IHBhc3N3ZDsJCS8qIGZvciBnZXRwd25hbSBfX0FSR1MgKi8KK2V4dGVybiBzdHJ1Y3QgcGFzc3dkICpnZXRwd25hbSBfX0FSR1MoKGNvbnN0IGNoYXIgKikpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfVE1QTkFNCitleHRlcm4gY2hhcgkqdG1wbmFtIF9fQVJHUygoY2hhciAqKSk7CisjZWxzZQorZXh0ZXJuIGNoYXIJKm1rdGVtcCBfX0FSR1MoKGNoYXIgKikpOworI2VuZGlmCisKKyNpZmRlZiBJU0MKK2V4dGVybiBpbnQJX1htYmxlbiBfX0FSR1MoKGNoYXIgY29uc3QgKiwgc2l6ZV90KSk7CisjZWxzZQorCQkvKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBoZWFkZXIgYnV0IG1hdGNoZXMgbWJsZW4oKSAqLworZXh0ZXJuIGludAlfWG1ibGVuIF9fQVJHUygoY2hhciAqLCBzaXplX3QpKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3BhdGhkZWYuc2ggYi9zcmMvcGF0aGRlZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMmE4M2EwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BhdGhkZWYuc2gKQEAgLTAsMCArMSwxMSBAQAorIyEgL2Jpbi9zaAorIworIyBwYXRoZGVmLnNoOiBhZGp1c3QgcGF0aGRlZi5jIGZvciBhdXRvL2xpbmsuc2VkLCBpZiBpdCBleGlzdHMKKyMKK2lmIHRlc3QgLXMgYXV0by9saW5rLnNlZDsgdGhlbgorICBjcCBhdXRvL3BhdGhkZWYuYyBhdXRvL3BhdGhkZWYudG1wCisgIHNlZCAtZiBhdXRvL2xpbmsuc2VkIDxhdXRvL3BhdGhkZWYudG1wID5hdXRvL3BhdGhkZWYuYworICBybSAtZiBhdXRvL3BhdGhkZWYudG1wCitmaQorCisjIHZpbTpzZXQgc3c9MiBldDoKZGlmZiAtLWdpdCBhL3NyYy9wby9NYWtlX21pbmcubWFrIGIvc3JjL3BvL01ha2VfbWluZy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEwZWZiMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wby9NYWtlX21pbmcubWFrCkBAIC0wLDAgKzEsNjcgQEAKKyMgTWFrZWZpbGUgZm9yIHRoZSBWaW0gbWVzc2FnZSB0cmFuc2xhdGlvbnMgZm9yIG1pbmd3MzIKKyMKKyMgRWR1YXJkbyBGLiBBbWF0cmlhIDxlZmVybmExQHBsYXRlYS5wbnRpYy5tZWMuZXM+CisjCisjIFJlYWQgdGhlIFJFQURNRV9taW5nLnR4dCBmaWxlIGJlZm9yZSB1c2luZyBpdC4KKyMKKyMgVXNlIGF0IHlvdXIgb3duIHJpc2sgYnV0IHdpdGggY2FyZSwgaXQgY291bGQgZXZlbiBraWxsIHlvdXIgY2FuYXJ5LgorIworIyBQcmV2aW91cyB0byBhbGwgeW91IG11c3QgaGF2ZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTEFOR1VBR0Ugc2V0IHRvIHlvdXIKKyMgbGFuZ3VhZ2UgKHh4KSBhbmQgYWRkIGl0IHRvIHRoZSBuZXh0IHRocmVlIGxpbmVzLgorIworCitMQU5HVUFHRVMgPQlhZiBjYSBjcyBkZSBlbl9HQiBlcyBmciBpdCBqYSBrbyBubyBwbCBydSBzayBzdiB1ayB6aF9UVyBcCisJCXpoX1RXLlVURi04IHpoX0NOIHpoX0NOLlVURi04CitNT0ZJTEVTID0JYWYubW8gY2EubW8gY3MubW8gZGUubW8gZW5fR0IubW8gZXMubW8gZnIubW8gaXQubW8gamEubW8gXAorCQlrby5tbyBuby5tbyBwbC5tbyBydS5tbyBzay5tbyBzdi5tbyB1ay5tbyBcCisJCXpoX1RXLm1vIHpoX1RXLlVURi04Lm1vIHpoX0NOLm1vIHpoX0NOLlVURi04Lm1vCisKK1BBQ0tBR0UgPSB2aW0KKworIyBVbmNvbW1lbnQgb25lIG9mIHRoZSBsaW5lcyBiZWxvdyBvciBtb2RpZnkgaXQgdG8gcHV0IHRoZSBwYXRoIHRvIHlvdXIKKyMgZ2V0dGV4IGJpbmFyaWVzOyBJIHVzZSB0aGUgZmlyc3QKKyNHRVRURVhUX1BBVEggPSBDOi9nZXR0ZXh0LndpbjMyL2Jpbi8KKyNHRVRURVhUX1BBVEggPSBDOi9nZXR0ZXh0LTAuMTAuMzUtdzMyL3dpbjMyL1JlbGVhc2UvCisjR0VUVEVYVF9QQVRIID0gQzovY3lnd2luL2Jpbi8KKworTVNHRk1UID0gJChHRVRURVhUX1BBVEgpbXNnZm10CitYR0VUVEVYVCA9ICQoR0VUVEVYVF9QQVRIKXhnZXR0ZXh0CitNU0dNRVJHRSA9ICQoR0VUVEVYVF9QQVRIKW1zZ21lcmdlCisKK01WID0gbW92ZQorQ1AgPSBjb3B5CitSTSA9IGRlbAorTUtEID0gbWtkaXIKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAucG8gLm1vIC5wb3QKKy5QSE9OWTogZmlyc3RfdGltZSBhbGwgaW5zdGFsbCBjbGVhbiAkKExBTkdVQUdFUykKKworLnBvLm1vOgorCSQoTVNHRk1UKSAtbyAkQCAkPAorCithbGw6ICQoTU9GSUxFUykKKworZmlyc3RfdGltZToKKwkkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoTEFOR1VBR0UpIFwKKwkJLS1hZGQtY29tbWVudHMgLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fICQod2lsZGNhcmQgLi4vKi5jKSAuLi9pZl9wZXJsLnhzICQod2lsZGNhcmQgLi4vZ2xvYmFscy5oKQorCiskKExBTkdVQUdFUyk6CisJJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKFBBQ0tBR0UpIFwKKwkJLS1hZGQtY29tbWVudHMgLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fICQod2lsZGNhcmQgLi4vKi5jKSAuLi9pZl9wZXJsLnhzICQod2lsZGNhcmQgLi4vZ2xvYmFscy5oKQorCSQoTVYpICQoUEFDS0FHRSkucG8gJChQQUNLQUdFKS5wb3QKKwkkKENQKSAkQC5wbyAkQC5wby5vcmlnCisJJChNVikgJEAucG8gJEAucG8ub2xkCisJJChNU0dNRVJHRSkgJEAucG8ub2xkICQoUEFDS0FHRSkucG90IC1vICRALnBvCisJJChSTSkgJEAucG8ub2xkCisKK2luc3RhbGw6CisJJChNS0QpICQoVklNUlVOVElNRSlcbGFuZ1wkKExBTkdVQUdFKQorCSQoTUtEKSAkKFZJTVJVTlRJTUUpXGxhbmdcJChMQU5HVUFHRSlcTENfTUVTU0FHRVMKKwkkKENQKSAkKExBTkdVQUdFKS5tbyAkKFZJTVJVTlRJTUUpXGxhbmdcJChMQU5HVUFHRSlcTENfTUVTU0FHRVNcJChQQUNLQUdFKS5tbworCitjbGVhbjoKKwkkKFJNKSAqLm1vCisJJChSTSkgKi5wb3QKKworCmRpZmYgLS1naXQgYS9zcmMvcG8vTWFrZV9tdmMubWFrIGIvc3JjL3BvL01ha2VfbXZjLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjliNWFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL01ha2VfbXZjLm1hawpAQCAtMCwwICsxLDYyIEBACisjIE1ha2VmaWxlIGZvciB0aGUgVmltIG1lc3NhZ2UgdHJhbnNsYXRpb25zIGZvciBNU1ZDCisjIChiYXNlZCBvbiBtYWtlX21pbmcubWFrKQorIworIyBNaWtlIFdpbGxpYW1zIDxtcndAZWFuZGVtLmNvLnVrPgorIworIyBQbGVhc2UgcmVhZCBSRUFETUVfbXZjLnR4dCBiZWZvcmUgdXNpbmcgdGhpcyBmaWxlLgorIworCitMQU5HVUFHRVMgPQlhZiBjYSBjcyBkZSBlbl9HQiBlcyBmciBpdCBqYSBrbyBubyBwbCBydSBzayBzdiB1ayB6aF9UVyBcCisJCXpoX1RXLlVURi04IHpoX0NOIHpoX0NOLlVURi04CitNT0ZJTEVTID0JYWYubW8gY2EubW8gY3MubW8gZGUubW8gZW5fR0IubW8gZXMubW8gZnIubW8gaXQubW8gamEubW8gXAorCQlrby5tbyBuby5tbyBwbC5tbyBydS5tbyBzay5tbyBzdi5tbyB1ay5tbyBcCisJCXpoX1RXLm1vIHpoX1RXLlVURi04Lm1vIHpoX0NOLm1vIHpoX0NOLlVURi04Lm1vCisKK1BBQ0tBR0UgPSB2aW0KKworIyBDb3JyZWN0IHRoZSBmb2xsb3dpbmcgbGluZSBmb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgZ2V0dGV4dAorR0VUVEVYVF9QQVRIID0gSDpcZ2V0dGV4dC53aW4zMi5tc3ZjcnRcYmluCisKK01TR0ZNVCA9ICQoR0VUVEVYVF9QQVRIKVxtc2dmbXQKK1hHRVRURVhUID0gJChHRVRURVhUX1BBVEgpXHhnZXR0ZXh0CitNU0dNRVJHRSA9ICQoR0VUVEVYVF9QQVRIKVxtc2dtZXJnZQorCitNViA9IG1vdmUKK0NQID0gY29weQorUk0gPSBkZWwKK01LRCA9IG1rZGlyCitMUyA9IGRpcgorCitMU0ZMQUdTID0gL2IgL29uIC9sIC9zCisKK0lOU1RBTExESVIgPSAkKFZJTVJVTlRJTUUpXGxhbmdcJChMQU5HVUFHRSlcTENfTUVTU0FHRVMKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAucG8gLm1vIC5wb3QKKworLnBvLm1vOgorCSQoTVNHRk1UKSAtbyAkQCAkPAorCithbGw6ICQoTU9GSUxFUykKKworZmlsZXM6CisJJChMUykgJChMU0ZMQUdTKSAuLlwqLmMgLi5caWZfcGVybC54cyAuLlxnbG9iYWxzLmggPiAuXGZpbGVzCisKK2ZpcnN0X3RpbWU6IGZpbGVzCisJJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKExBTkdVQUdFKSAtLWFkZC1jb21tZW50cyAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8gLS1maWxlcy1mcm9tPS5cZmlsZXMKKworJChMQU5HVUFHRVMpOiBmaWxlcworCSQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChQQUNLQUdFKSAtLWFkZC1jb21tZW50cyAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8gLS1maWxlcy1mcm9tPS5cZmlsZXMKKwkkKE1WKSAkKFBBQ0tBR0UpLnBvICQoUEFDS0FHRSkucG90CisJJChDUCkgJEAucG8gJEAucG8ub3JpZworCSQoTVYpICRALnBvICRALnBvLm9sZAorCSQoTVNHTUVSR0UpICRALnBvLm9sZCAkKFBBQ0tBR0UpLnBvdCAtbyAkQC5wbworCSQoUk0pICRALnBvLm9sZAorCitpbnN0YWxsOgorCWlmIG5vdCBleGlzdCAkKElOU1RBTExESVIpICQoTUtEKSAkKElOU1RBTExESVIpCisJJChDUCkgJChMQU5HVUFHRSkubW8gJChJTlNUQUxMRElSKVwkKFBBQ0tBR0UpLm1vCisKK2NsZWFuOgorCSQoUk0pICoubW8KKwkkKFJNKSAqLnBvdApkaWZmIC0tZ2l0IGEvc3JjL3BvL01ha2VmaWxlIGIvc3JjL3BvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NDkxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vTWFrZWZpbGUKQEAgLTAsMCArMSwxMzUgQEAKKyMgTWFrZWZpbGUgZm9yIHRoZSBWaW0gbWVzc2FnZSB0cmFuc2xhdGlvbnMuCisKKyMgVE9ETyBtYWtlIHRoaXMgY29uZmlndXJhYmxlCisjIE5vdGU6IGphLnNqaXMsICouY3AxMjUwIGFuZCB6aF9DTi5jcDkzNiBhcmUgb25seSBmb3IgTVMtV2luZG93cywgdGhleSBhcmUKKyMgbm90IGluc3RhbGxlZCBvbiBVbml4CisKK0xBTkdVQUdFUyA9CWFmIGNhIGNzIGRlIGVuX0dCIGVzIGZyIGl0IGphIGtvIG5vIHBsIHJ1IHNrIHN2IHVrIHpoX1RXIFwKKwkJemhfVFcuVVRGLTggemhfQ04gemhfQ04uVVRGLTgKK01PRklMRVMgPQlhZi5tbyBjYS5tbyBjcy5tbyBkZS5tbyBlbl9HQi5tbyBlcy5tbyBmci5tbyBpdC5tbyBqYS5tbyBcCisJCWtvLm1vIG5vLm1vIHBsLm1vIHJ1Lm1vIHNrLm1vIHN2Lm1vIHVrLm1vIFwKKwkJemhfVFcubW8gemhfVFcuVVRGLTgubW8gemhfQ04ubW8gemhfQ04uVVRGLTgubW8KKworUEFDS0FHRSA9IHZpbQorU0hFTEwgPSAvYmluL3NoCisKKyMgVGhlIE9MRF9QT19GSUxFX0lOUFVUIGFuZCBPTERfUE9fRklMRV9PVVRQVVQgYXJlIGZvciB0aGUgbmV3IEdOVSBnZXR0ZXh0CisjIHRvb2xzIDAuMTAuMzcsIHdoaWNoIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCAucG8gZmlsZSBmb3JtYXQgdGhhdCBpcyBub3QKKyMgY29tcGF0aWJsZSB3aXRoIFNvbGFyaXMgKGFuZCBvbGQgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbnMpIHVubGVzcyB0aGVzZSBhcmUKKyMgc2V0LiAgZ2V0dGV4dCAwLjEwLjM2IHdpbGwgbm90IHdvcmshCitNU0dGTVQgPSBPTERfUE9fRklMRV9JTlBVVD15ZXMgbXNnZm10IC12CitYR0VUVEVYVCA9IE9MRF9QT19GSUxFX0lOUFVUPXllcyBPTERfUE9fRklMRV9PVVRQVVQ9eWVzIHhnZXR0ZXh0CitNU0dNRVJHRSA9IE9MRF9QT19GSUxFX0lOUFVUPXllcyBPTERfUE9fRklMRV9PVVRQVVQ9eWVzIG1zZ21lcmdlCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLnBvIC5tbyAucG90CisuUEhPTlk6IGFsbCBpbnN0YWxsIHVuaW5zdGFsbCBjaGVjayBjbGVhbiBkaXN0Y2xlYW4gJChMQU5HVUFHRVMpCisKKy5wby5tbzoKKwkkKE1TR0ZNVCkgLW8gJEAgJDwKKworYWxsOiAkKE1PRklMRVMpCisKK2luc3RhbGw6ICQoTU9GSUxFUykKKwlAJChNQUtFKSBjaGVjaworCWZvciBsYW5nIGluICQoTEFOR1VBR0VTKTsgZG8gXAorCSAgZGlyPSQoTE9DQUxFRElSKS8kJGxhbmcvOyBcCisJICBpZiB0ZXN0ICEgLXggIiQkZGlyIjsgdGhlbiBcCisJICAgIG1rZGlyICQkZGlyOyBjaG1vZCA3NTUgJCRkaXI7IFwKKwkgIGZpOyBcCisJICBkaXI9JChMT0NBTEVESVIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAorCSAgaWYgdGVzdCAhIC14ICIkJGRpciI7IHRoZW4gXAorCSAgICBta2RpciAkJGRpcjsgY2htb2QgNzU1ICQkZGlyOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtciAkJGxhbmcubW87IHRoZW4gXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRsYW5nLm1vICQkZGlyLyQoUEFDS0FHRSkubW87IFwKKwkgICAgY2htb2QgJChGSUxFTU9EKSAkJGRpci8kKFBBQ0tBR0UpLm1vOyBcCisJICBmaTsgXAorCWRvbmUKKwordW5pbnN0YWxsOgorCUAkKE1BS0UpIGNoZWNrCisJZm9yIGNhdCBpbiAkKE1PRklMRVMpOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAncy9cJChDQVRPQkpFWFQpJCQvLydgOyBcCisJICBybSAtZiAkKExPQ0FMRURJUikvJCRsYW5nL0xDX01FU1NBR0VTLyQoUEFDS0FHRSkubW87IFwKKwlkb25lCisKK2NvbnZlcnRlZDogamEuc2ppcy5tbyBjcy5jcDEyNTAubW8gcGwuY3AxMjUwLm1vIHNrLmNwMTI1MC5tbyB6aF9DTi5jcDkzNi5tbyBcCisJCXJ1LmNwMTI1MS5tbworCisjIENvbnZlcnQgamEucG8gdG8gY3JlYXRlIGphLnNqaXMucG8uICBSZXF1aXJlcyBkb3VibGluZyBiYWNrc2xhc2hlcyBpbiB0aGUKKyMgc2Vjb25kIGJ5dGUuICBEb24ndCBkZXBlbmQgb24gc2ppc2NvcnIsIGl0IHNob3VsZCBvbmx5IGJlIGNvbXBpbGVkIHdoZW4KKyMgamEuc2ppcy5wbyBpcyBvdXRkYXRlZC4KK2phLnNqaXMucG86IGphLnBvCisJQCQoTUFLRSkgc2ppc2NvcnIKKwlybSAtZiBqYS5zamlzLnBvCisJaWNvbnYgLWYgZXVjLWpwIC10IGNwOTMyIGphLnBvIHwgLi9zamlzY29yciA+IGphLnNqaXMucG8KKworc2ppc2NvcnI6IHNqaXNjb3JyLmMKKwkkKENDKSAtbyBzamlzY29yciBzamlzY29yci5jCisKKyMgQ29udmVydCBjcy5wbyB0byBjcmVhdGUgY3MuY3AxMjUwLnBvLgorY3MuY3AxMjUwLnBvOiBjcy5wbworCXJtIC1mIGNzLmNwMTI1MC5wbworCWljb252IC1mIGlzby04ODU5LTIgLXQgY3AxMjUwIGNzLnBvIHwgXAorCQlzZWQgLWUgJ3MvY2hhcnNldD1JU08tODg1OS0yL2NoYXJzZXQ9Y3AxMjUwLycgLWUgJ3MvIyBPcmlnaW5hbCB0cmFuc2xhdGlvbnMvIyBHZW5lcmF0ZWQgZnJvbSBjcy5wbywgRE8gTk9UIEVESVQvJyA+IGNzLmNwMTI1MC5wbworCisjIENvbnZlcnQgcGwucG8gdG8gY3JlYXRlIHBsLmNwMTI1MC5wby4KK3BsLmNwMTI1MC5wbzogcGwucG8KKwlybSAtZiBwbC5jcDEyNTAucG8KKwlpY29udiAtZiBpc28tODg1OS0yIC10IGNwMTI1MCBwbC5wbyB8IFwKKwkJc2VkIC1lICdzL2NoYXJzZXQ9SVNPLTg4NTktMi9jaGFyc2V0PWNwMTI1MC8nIC1lICdzLyMgT3JpZ2luYWwgdHJhbnNsYXRpb25zLyMgR2VuZXJhdGVkIGZyb20gcGwucG8sIERPIE5PVCBFRElULycgPiBwbC5jcDEyNTAucG8KKworIyBDb252ZXJ0IHNrLnBvIHRvIGNyZWF0ZSBzay5jcDEyNTAucG8uCitzay5jcDEyNTAucG86IHNrLnBvCisJcm0gLWYgc2suY3AxMjUwLnBvCisJaWNvbnYgLWYgaXNvLTg4NTktMiAtdCBjcDEyNTAgc2sucG8gfCBcCisJCXNlZCAtZSAncy9jaGFyc2V0PUlTTy04ODU5LTIvY2hhcnNldD1jcDEyNTAvJyAtZSAncy8jIE9yaWdpbmFsIHRyYW5zbGF0aW9ucy8jIEdlbmVyYXRlZCBmcm9tIHNrLnBvLCBETyBOT1QgRURJVC8nID4gc2suY3AxMjUwLnBvCisKKyMgQ29udmVydCB6aF9DTi5wbyB0byBjcmVhdGUgemhfQ04uY3A5MzYucG8uCisjIHNldCAnY2hhcnNldCcgdG8gZ2JrIHRvIGF2b2lkIHRoYXQgbXNmbXQgZ2VuZXJhdGVzIGEgd2FybmluZworemhfQ04uY3A5MzYucG86IHpoX0NOLnBvCisJcm0gLWYgemhfQ04uY3A5MzYucG8KKwlpY29udiAtZiBnYjIzMTIgLXQgY3A5MzYgemhfQ04ucG8gfCBcCisJCXNlZCAtZSAncy9jaGFyc2V0PWdiMjMxMi9jaGFyc2V0PWdiay8nIC1lICdzLyMgT3JpZ2luYWwgdHJhbnNsYXRpb25zLyMgR2VuZXJhdGVkIGZyb20gemhfQ04ucG8sIERPIE5PVCBFRElULycgPiB6aF9DTi5jcDkzNi5wbworCisjIENvbnZlcnQgcnUucG8gdG8gY3JlYXRlIHJ1LmNwMTI1MS5wby4KK3J1LmNwMTI1MS5wbzogcnUucG8KKwlybSAtZiBydS5jcDEyNTEucG8KKwlpY29udiAtZiBrb2k4LXIgLXQgY3AxMjUxIHJ1LnBvIHwgXAorCQlzZWQgLWUgJ3MvY2hhcnNldD1rb2k4LXIvY2hhcnNldD1jcDEyNTEvJyAtZSAncy8jIE9yaWdpbmFsIHRyYW5zbGF0aW9ucy8jIEdlbmVyYXRlZCBmcm9tIHJ1LnBvLCBETyBOT1QgRURJVC8nID4gcnUuY3AxMjUxLnBvCisKK2NoZWNrOgorCUBpZiB0ZXN0ICJ4IiA9ICJ4JChwcmVmaXgpIjsgdGhlbiBcCisJICBlY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiOyBcCisJICBlY2hvICIgIHBsZWFzZSB1c2UgbWFrZSBmcm9tIHRoZSBzcmMgZGlyZWN0b3J5ICAiOyBcCisJICBlY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiOyBcCisJICBleGl0IDE7IFwKKwlmaQorCitjbGVhbjoKKwlybSAtZiBjb3JlIGNvcmUuKiAqLm9sZC5wbyAqLm1vICoucG90IHNqaXNjb3JyCisKK2Rpc3RjbGVhbjogY2xlYW4KKworIworIyBOT1RFOiBJZiB5b3UgZ2V0IGFuIGVycm9yIGZvciBndmltZXh0LmNwcCBub3QgZm91bmQsIHlvdSBuZWVkIHRvIHVucGFjayB0aGUKKyMgZXh0cmEgYXJjaGl2ZS4KKyMKKyQoUEFDS0FHRSkucG90OiAuLi8qLmMgLi4vaWZfcGVybC54cyAuLi9HdmltRXh0L2d2aW1leHQuY3BwIC4uL2dsb2JhbHMuaAorCWNkIC4uOyAkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoUEFDS0FHRSkgXAorCQktLWFkZC1jb21tZW50cyAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8gXAorCQkqLmMgaWZfcGVybC54cyBHdmltRXh0L2d2aW1leHQuY3BwIGdsb2JhbHMuaAorCW12IC1mIC4uLyQoUEFDS0FHRSkucG8gJChQQUNLQUdFKS5wb3QKKworIyBEb24ndCBhZGQgYSBkZXBlbmRlbmN5IGhlcmUsIHdlIG9ubHkgd2FudCB0byB1cGRhdGUgdGhlIC5wbyBmaWxlcyBtYW51YWxseQorJChMQU5HVUFHRVMpOgorCUAkKE1BS0UpICQoUEFDS0FHRSkucG90CisJaWYgdGVzdCAhIC1mICRALnBvLm9yaWc7IHRoZW4gY3AgJEAucG8gJEAucG8ub3JpZzsgZmkKKwltdiAkQC5wbyAkQC5wby5vbGQKKwlpZiAkKE1TR01FUkdFKSAkQC5wby5vbGQgJChQQUNLQUdFKS5wb3QgLW8gJEAucG87IHRoZW4gXAorCSAgICBybSAtZiAkQC5wby5vbGQ7IFwKKwllbHNlIFwKKwkgICAgZWNobyAibXNnbWVyZ2UgZm9yICRALnBvIGZhaWxlZCEiOyBtdiAkQC5wby5vbGQgJEAucG87IFwKKwlmaQpkaWZmIC0tZ2l0IGEvc3JjL3BvL1JFQURNRS50eHQgYi9zcmMvcG8vUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDIzZWYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL1JFQURNRS50eHQKQEAgLTAsMCArMSwxMDQgQEAKK1RSQU5TTEFUSU5HIFZJTSBNRVNTQUdFUworCitJbiB0aGlzIGRpcmVjdG9yeSB5b3Ugd2lsbCBmaW5kIHh4LnBvIGZpbGVzLCB3aGVyZSAieHgiIGlzIGEgbGFuZ3VhZ2UgY29kZS4KK0VhY2ggZmlsZSBjb250YWlucyB0aGUgdHJhbnNsYXRpb24gb2YgRW5nbGlzaCBWaW0gbWVzc2FnZXMgZm9yIG9uZSBsYW5ndWFnZS4KK1RoZSBmaWxlcyBhcmUgaW4gInBvIiBmb3JtYXQsIHVzZWQgYnkgdGhlIGdldHRleHQgcGFja2FnZS4gIFBsZWFzZSByZWZlciB0bwordGhlIGdldHRleHQgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnksIHN0YXJ0aW5nIHdpdGggdmVyc2lvbiAwLjEwLjM3LCBzdXBwb3J0cyBjb252ZXJ0aW5nCittZXNzYWdlcyBmcm9tIG9uZSBlbmNvZGluZyB0byBhbm90aGVyLiAgVGhpcyByZXF1aXJlcyB0aGF0IGl0IHdhcyBjb21waWxlZAord2l0aCBIQVZFX0lDT05WLiAgVGhlIHJlc3VsdCBpcyB0aGF0IHRoZSBtZXNzYWdlcyBtYXkgYmUgaW4gYW55IGVuY29kaW5nCitzdXBwb3J0ZWQgYnkgaWNvbnYgYW5kIHdpbGwgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gdGhlIGN1cnJlbnRseSB1c2VkCitlbmNvZGluZy4KKworVGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnksIHN0YXJ0aW5nIHdpdGggdmVyc2lvbiAwLjEwLjM2LCB1c2VzIGEgbmV3IGZvcm1hdCBmb3IKK3NvbWUgZW5jb2RpbmdzLiAgVGhpcyBmb2xvd3MgdGhlIEM5OSBzdGFuZGFyZCBmb3Igc3RyaW5ncy4gIEl0IG1lYW5zIHRoYXQgd2hlbgorYSBtdWx0aS1ieXRlIGNoYXJhY3RlciBpbmNsdWRlcyB0aGUgMHg1YyBieXRlLCB0aGlzIGlzIG5vdCByZWNvZ25pemVkIGFzIGEKK2JhY2tzbGFzaC4gIFNpbmNlIHRoaXMgZm9ybWF0IGlzIGluY29tcGF0aWJsZSB3aXRoIFNvbGFyaXMsIFZpbSB1c2VzIHRoZSBvbGQKK2Zvcm1hdC4gIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBPTERfUE9fRklMRV9PVVRQVVQgYW5kIE9MRF9QT19GSUxFX0lOUFVUCitlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBXaGVuIHlvdSB1c2UgdGhlIE1ha2VmaWxlIGluIHRoaXMgZGlyZWN0b3J5IHRoYXQgd2lsbAorYmUgZG9uZSBmb3IgeW91LiAgVGhpcyBkb2VzIE5PVCB3b3JrIHdpdGggZ2V0dGV4dCAwLjEwLjM2LiAgRG9uJ3QgdXNlIGl0LCBnZXQKKzAuMTAuMzcuCisKKworT04gTVMtV0lORE9XUworCitUaGUgZGlzdHJpYnV0ZWQgZmlsZXMgYXJlIGdlbmVyYXRlZCBvbiBVbml4LCBidXQgdGhpcyBzaG91bGQgYWxzbyBiZSBwb3NzaWJsZQorb24gTVMtV2luZG93cy4gIERvd25sb2FkIHRoZSBnZXR0ZXh0IHBhY2thZ2VzLCBmb3IgZXhhbXBsZSBmcm9tOgorCisJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nZXR0ZXh0CisKK1lvdSBtaWdodCBoYXZlIHRvIGRvIHRoZSBjb21tYW5kcyBtYW51YWxseS4gIEV4YW1wbGU6CisKKyAgIGNkIGM6XHZpbVx2aW02MAorICAgbWtkaXIgcnVudGltZVxsYW5nXGphXExDX01FU1NBR0VTCisgICBtc2dmbXQgLW8gcnVudGltZVxsYW5nXGphXExDX01FU1NBR0VTXHZpbS5tbyBzcmNccG9camEucG8KKworCitXSEVOIFRIRVJFIElTIEEgTUlTVEFLRQorCitJZiB5b3UgZmluZCB0aGVyZSBpcyBhIG1pc3Rha2UgaW4gb25lIG9mIHRoZSB0cmFuc2xhdGlvbnMsIHBsZWFzZSByZXBvcnQgdGhpcwordG8gdGhlIG1haW50YWluZXIgb2YgdGhlIHRyYW5zbGF0aW9uLiAgSGlzL2hlciBFLW1haWwgYWRkcmVzcyBpcyBpbiB0aGUKK2NvbW1lbnRzIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZS4gIFlvdSBjYW4gYWxzbyBzZWUgdGhpcyB3aXRoIHRoZSAiOm1lc3NhZ2VzIgorY29tbWFuZCBpbiBWaW0gd2hlbiB0aGUgdHJhbnNsYXRpb24gaXMgYmVpbmcgdXNlZC4KKworCitDUkVBVElORyBBIE5FVyBQTyBGSUxFCisKK1dlIHdpbGwgdXNlICJ4eC5wbyIgYXMgYW4gZXhhbXBsZSBoZXJlLCByZXBsYWNlICJ4eCIgd2l0aCB0aGUgbmFtZSBvZiB5b3VyCitsYW5ndWFnZS4KKworLSBFZGl0IE1ha2VmaWxlIHRvIGFkZCB4eCB0byBMQU5HVUFHRVMgYW5kIHh4Lm1vIHRvIE1PRklMRVMuCistIENvcHkgdGhlIGhlYWRlciBvZiBhbiBleGlzdGluZyBmaWxlLCBlLmcuLCBkZS5wbywgdG8geHgucG8uICBEbyBub3QgY29weSBhbnkKKyAgb2YgdGhlIHRyYW5zbGF0ZWQgbWVzc2FnZXMsIGRlbGV0ZSBldmVyeXRoaW5nIGFmdGVyIHRoZSAibXNnc3RyIi4KKy0gVGhlIHJlbWFpbmluZyB3b3JrIGlzIGxpa2UgdXBkYXRpbmcsIHNlZSB0aGUgbmV4dCBzZWN0aW9uLgorCisKK1VQREFUSU5HIEEgUE8gRklMRQorCitJZiB5b3UgYXJlIHRoZSBtYWludGFpbmVyIG9mIGEgLnBvIGZpbGUsIHRoaXMgaXMgaG93IHlvdSB1cGRhdGUgdGhlIGZpbGUuICBXZQord2lsbCB1c2UgInh4LnBvIiBhcyBhbiBleGFtcGxlIGhlcmUsIHJlcGxhY2UgInh4IiB3aXRoIHRoZSBuYW1lIG9mIHlvdXIKK2xhbmd1YWdlLgorCisoMSkgQWRkIG5ldyBhbmQgY2hhbmdlZCBtZXNzYWdlcyBmcm9tIHRoZSBWaW0gc291cmNlczoKKworCW1ha2UgeHgKKworICAgIFRoaXMgd2lsbCBleHRyYWN0IGFsbCB0aGUgc3RyaW5ncyBmcm9tIFZpbSBhbmQgbWVyZ2UgdGhlbSBpbiB3aXRoIHRoZQorICAgIGV4aXN0aW5nIHRyYW5zbGF0aW9ucy4gIFJlcXVpcmVzIHRoZSBHTlUgZ2V0dGV4dCB1dGlsaXRpZXMuICBBbHNvIHJlcXVpcmVzCisgICAgdW5wYWNraW5nIHRoZSBleHRyYSBhcmNoaXZlLgorICAgIFlvdXIgb3JpZ2luYWwgeHgucG8gZmlsZSB3aWxsIGJlIGNvcGllZCB0byB4eC5wby5vcmlnCisKKyAgICAtLSBBZnRlciB5b3UgZG8gdGhpcywgeW91IE1VU1QgZG8gdGhlIG5leHQgdGhyZWUgc3RlcHMhIC0tCisKKygyKSBUcmFuc2xhdGUKKyAgICBTZWUgdGhlIGdldHRleHQgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gZG8gdGhpcy4gIFlvdSBjYW4gYWxzbyBmaW5kCisgICAgZXhhbXBsZXMgaW4gdGhlIG90aGVyIHBvIGZpbGVzLgorICAgIFNlYXJjaCB0aGUgcG8gZmlsZSBmb3IgaXRlbXMgdGhhdCByZXF1aXJlIHRyYW5zbGF0aW9uOgorCisJL2Z1enp5XHxebXNnc3RyICIiXChcbiJcKVxAIQorCisgICAgUmVtb3ZlIHRoZSAiIywgZnV6enkiIGxpbmUgYWZ0ZXIgYWRkaW5nIHRoZSB0cmFuc2xhdGlvbi4KKworICAgIFRoZXJlIGlzIG9uZSBzcGVjaWFsIG1lc3NhZ2U6CisJbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorICAgIFlvdSBzaG91bGQgaW5jbHVkZSB5b3VyIG5hbWUgYW5kIEUtbWFpbCBhZGRyZXNzIGluc3RlYWQsIGZvciBleGFtcGxlOgorCW1zZ3N0ciAiQmVyaWNodGVuIPxiZXJzZXR6dCBiZWk6IEpvaG4gRG9lIDxqb2huQGRvZS5vcmc+IgorCisoMykgQ2xlYW4gdXAKKyAgICBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB0aGUgdHJhbnNsYXRpb24gd29ya3Mgb24gYWxsIHN5c3RlbXMuCisgICAgQ29tbWVudC1vdXQgYWxsIG5vbi10cmFuc2xhdGVkIHN0cmluZ3MuICBUaGVyZSBhcmUgdHdvIHR5cGVzOgorICAgIC0gaXRlbXMgbWFya2VkIHdpdGggIiMsIGZ1enp5IgorICAgIC0gaXRlbXMgd2l0aCBhbiBlbXB0eSBtc2dzdHIKKyAgICBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgY2xlYW51cC52aW0gc2NyaXB0OgorCisJOnNvdXJjZSBjbGVhbnVwLnZpbQorCisgICAgQmFja2dyb3VuZDogb24gU29sYXJpcyBhbiBlbXB0eSBtc2dzdHIgcmVzdWx0cyBpbiBhbiBlbXB0eSBtZXNzYWdlOyBHTlUKKyAgICBnZXR0ZXh0IGlnbm9yZXMgZW1wdHkgc3RyaW5ncyBhbmQgaXRlbXMgbWFya2VkIHdpdGggIiMsIGZ1enp5Ii4KKworKDQpIENoZWNrOgorCisJbWFrZSB4eC5tbworCisgICAgTG9vayBvdXQgZm9yIHN5bnRheCBlcnJvcnMgYW5kIGZpeCB0aGVtLgpkaWZmIC0tZ2l0IGEvc3JjL3BvL1JFQURNRV9taW5ndy50eHQgYi9zcmMvcG8vUkVBRE1FX21pbmd3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmE5OGU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL1JFQURNRV9taW5ndy50eHQKQEAgLTAsMCArMSwxMDEgQEAKK1RSQU5TTEFUSU5HIFZJTSBNRVNTQUdFUworCitUaGlzIGZpbGUgZXhwbGFpbnMgaG93IHRvIGNyZWF0ZSBhbmQgbWFpbnRhaW4gcG8gZmlsZXMgdXNpbmcKK2dudS1nZXR0ZXh0LndpbjMyLCBhIE1JTkdXMzIgV2luZG93cyBwb3J0IG9mIGdldHRleHQgYnkgRnJhbmNvIEJlegorPGZyYW5jby5iZXpAZ214LmRlPi4gIFlvdSBjYW4gZmluZCBpdCBhdDoKKworCWh0dHA6Ly9ob21lLmEtY2l0eS5kZS9mcmFuY28uYmV6L2dldHRleHQvZ2V0dGV4dF93aW4zMl9lbi5odG1sCisKK0ZpcnN0IHJlYWQgdGhlIFJFQURNRS50eHQgZmlsZSBmb3IgdGhlIGdlbmVyYWwgcmVtYXJrcworCisKK1RoZSBmaWxlIHRoYXQgZG9lcyB0aGUgd29yayBpcyBNYWtlX21pbmcubWFrIGluIHRoZSBwbyBkaXJlY3RvcnkuIEl0IGlzIGFuCithZGFwdGF0aW9uIG9mIHRoZSBVbml4IE1ha2VmaWxlLCBidXQgaXQgZG9lcyBOT1QgdGVzdCB0aGUgcHJlc2VuY2Ugb2YgYW55IHBvLAorcG90LCBvciBtbyBmaWxlcywgc28gdXNlIGl0IGF0IHlvdXIgb3duIHJpc2sgYnV0IHdpdGggY2FyZTogaXQgY291bGQgZXZlbiBraWxsCit5b3VyIGNhbmFyeS4gSXQgaGFzIGJlZW4gdGVzdGVkIGJ5IG1lIHNldmVyYWwgdGltZXMgKGFuZCB3aXRoIGRpZmZlcmVudAorbGFuZ3VhZ2VzKSB3aXRoIHN1Y2Nlc3MuCisKK1RoZSBtYWtlIHV0aWxpdHkgbXVzdCBiZSBydW4gZnJvbSB0aGUgcG8gZGlyZWN0b3J5LgorCitGaXJzdCBvZiBhbGwgeW91IG11c3Qgc2V0IHRoZSBlbnZpcm9tZW50IHZhcmlhYmxlIExBTkdVQUdFIHRvIHh4LCB3aGVyZSB4eCBpcwordGhlIG5hbWUgb2YgeW91ciBsYW5ndWFnZS4gWW91IGNhbiBkbyBpdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgb3IgYWRkaW5nIGEKK2xpbmUgdG8geW91ciBhdXRvZXhlYy5iYXQgZmlsZTogc2V0IExBTkdVQUdFPXh4LiBZb3UgbXVzdCBhbHNvIGFkZCB5b3VyCitsYW5ndWFnZSB0byB0aGUgTWFrZV9taW5nLm1hayBmaWxlIGluIHRoZSBsaW5lcyBMQU5HVUFHRVMsIE1PRklMRVMsIEFORAorUE9GSUxFUy4KKworSWYgeW91IGRvbid0IGhhdmUgYSB4eC5wbyBmaWxlLCB5b3UgbXVzdCBjcmVhdGUgaXQgd2l0aCB0aGUgY29tbWFuZDoKKworCW1ha2UgLWYgTWFrZV9taW5nLm1hayBmaXJzdF90aW1lCisKK1RoaXMgd2lsbCBwcm9kdWNlIGEgbmV3IGJyYW5kIHh4LnBvIGZpbGUgd2l0aCBhbGwgdGhlIG1lc3NhZ2VzIGluIFZpbSByZWFkeQorZm9yIHRyYW5zbGF0aW9uLiBUaGVuIHlvdSBtdXN0IHNvdXJjZSB0aGUgY2xlYW51cC52aW0gc2NyaXB0IGZyb20gaW5zaWRlIFZpbTsKK2l0IHdpbGwgY29tbWVudCB0aGUgdW50cmFuc2xhdGVkIG1lc3NhZ2VzIChub3csIGFsbCkuIEkgcmVjb21tZW5kIHRvIHVzZQorc3ludGF4IGhpZ2hsaWdodGluZyBzbyB5b3UgY2FuIGlkZW50aWZ5IHRoZSB1bnRyYW5zbGF0ZWQgbWVzc2FnZXMgZWFzaWx5LgorWW91IGFsc28gbXVzdCByZW1vdmUgdGhlICcuLlwnIHRoYXQgcHJlcGVuZHMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlcy4KKyhJIGRvbid0IG5vIHdoeSwgYnV0IG1ha2UgaXMgdW5hYmxlIHRvIGNoYW5nZSB0aGUgZGlyZWN0b3J5IGZyb20gcG8gdG8gc3JjIGFuZAorYmFjayB0byBwbywgc28gYWxsIHRoZSB3b3JrIG11c3QgYmUgZG9uZSBmcm9tIHRoZSBwbyBkaXIsIGhlbmNlIHRoZSAnLi5cJykKKworVGhlbiB5b3UgbXVzdCBnbyBzdGVwICgyKSBiZWxvdy4KKworSWYgeW91IGFyZSB1cGRhdGluZyBhIHBvIGZpbGUgeW91IG11c3QgZm9sbG93IHRoZSBuZXh0IHN0ZXBzICh0aGV5IGFyZSBuZWFybHkKK3RoZSBzYW1lIGFzIGluIHRoZSBVbml4IGNhc2UsIG9ubHkgdGhlIGNvbW1hbmRzIGNoYW5nZSk6CisKKygxKSBBZGQgbmV3IGFuZCBjaGFuZ2VkIG1lc3NhZ2VzIGZyb20gdGhlIFZpbSBzb3VyY2VzOgorCisJbWFrZSAtZiBNYWtlX21pbmcubWFrIHh4CisKKyAgICBUaGlzIHdpbGwgZXh0cmFjdCBhbGwgdGhlIHN0cmluZ3MgZnJvbSBWaW0gYW5kIG1lcmdlIHRoZW0gaW4gd2l0aCB0aGUKKyAgICBleGlzdGluZyB0cmFuc2xhdGlvbnMuICBSZXF1aXJlcyB0aGUgR05VIGdldHRleHQgdXRpbGl0aWVzLiAgQWxzbyByZXF1aXJlcworICAgIHVucGFja2luZyB0aGUgZXh0cmEgYXJjaGl2ZS4KKyAgICBZb3VyIG9yaWdpbmFsIHh4LnBvIGZpbGUgd2lsbCBiZSBjb3BpZWQgdG8geHgucG8ub3JpZworCisgICAgLS0gQWZ0ZXIgeW91IGRvIHRoaXMsIHlvdSBNVVNUIGRvIHRoZSBuZXh0IHRocmVlIHN0ZXBzISAtLQorCisoMikgVHJhbnNsYXRlCisgICAgU2VlIHRoZSBnZXR0ZXh0IGRvY3VtZW50YXRpb24gb24gaG93IHRvIGRvIHRoaXMuICBZb3UgY2FuIGFsc28gZmluZAorICAgIGV4YW1wbGVzIGluIHRoZSBvdGhlciBwbyBmaWxlcy4KKyAgICBTZWFyY2ggdGhlIHBvIGZpbGUgZm9yIGl0ZW1zIHRoYXQgcmVxdWlyZSB0cmFuc2xhdGlvbjoKKwkvXCNcfiAgIGFuZCBhbHNvIHRoZSBmdXp6eSB0cmFuc2xhdGlvbnMsIC9cIywgZnV6enkKKyAgICBSZW1vdmUgIiN+IiBhbmQgIiMsIGZ1enp5IiBhZnRlciBhZGRpbmcgdGhlIHRyYW5zbGF0aW9uLgorCisgICAgVGhlcmUgaXMgb25lIHNwZWNpYWwgbWVzc2FnZToKKwltc2dpZCAiTWVzc2FnZXMgbWFpbnRhaW5lcjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4iCisgICAgWW91IHNob3VsZCBpbmNsdWRlIHlvdXIgbmFtZSBhbmQgRS1tYWlsIGFkZHJlc3MgaW5zdGVhZCwgZm9yIGV4YW1wbGU6CisJbXNnc3RyICJCZXJpY2h0ZW4g/GJlcnNldHp0IGJlaTogSm9obiBEb2UgPGpvaG5AZG9lLm9yZz4iCisKKygzKSBDbGVhbiB1cAorICAgIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHRoZSB0cmFuc2xhdGlvbiB3b3JrcyBvbiBhbGwgc3lzdGVtcy4KKyAgICBDb21tZW50LW91dCBhbGwgbm9uLXRyYW5zbGF0ZWQgc3RyaW5ncy4gIFRoZXJlIGFyZSB0d28gdHlwZXM6CisgICAgLSBpdGVtcyBtYXJrZWQgd2l0aCAiIywgZnV6enkiCisgICAgLSBpdGVtcyB3aXRoIGFuIGVtcHR5IG1zZ3N0cgorICAgIFlvdSBjYW4gZG8gdGhpcyB3aXRoIHRoZSBjbGVhbnVwLnZpbSBzY3JpcHQ6CisKKwk6c291cmNlIGNsZWFudXAudmltCisKKyg0KSBDaGVjazoKKworCW1ha2UgLWYgTWFrZV9taW5nLm1hayB4eC5tbworCisgICAgTG9vayBvdXQgZm9yIHN5bnRheCBlcnJvcnMgYW5kIGZpeCB0aGVtLgorCisoNSkgVGhpcyBpcyBhbiBleHRyYSBzdGVwLCA7LSkuIElmIHlvdSB3YW50IHRoZSB2aW0ubW8gZmlsZSBpbnN0YWxsZWQgaW4geW91cgorICAgIHN5c3RlbSB5b3UgbXVzdCBydW46CisKKwltYWtlIC1mIE1ha2VfbWluZy5tYWsgaW5zdGFsbAorCisgICAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUgeHhcTENfTUVTU0FHRVMgZGlyZWN0b3J5IChpZiBpdCBkb2VzIG5vdCBleGlzdCkgYW5kCisgICAgd2lsbCBjb3B5IHZpbS5wbyB0byBpdC4KKworKDYpIEFub3RoZXIgZXh0cmEgc3RlcCA7LSkpLiBUaGUgY29tbWFuZDoKKworCW1ha2UgLWYgTWFrZV9taW5nLm1hayBjbGVhbgorCisgICAgd2lsbCBkZWxldGUgdGhlIHRlbXAgZmlsZXMgY3JlYXRlZCBkdXJpbmcgdGhlIHByb2Nlc3MuCisKK1N1Z2dlc3Rpb25zIHdpbGwgYmUgd2VsY29tZWQuCisKK0VkdWFyZG8gRi4gQW1hdHJpYSA8ZWZlcm5hMUBwbGF0ZWEucG50aWMubWVjLmVzPgorCitIYXBweSBWaW1taW5nIHdpdGggTkxTISEKKwordmltOnR3PTc4OgpkaWZmIC0tZ2l0IGEvc3JjL3BvL1JFQURNRV9tdmMudHh0IGIvc3JjL3BvL1JFQURNRV9tdmMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTA3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vUkVBRE1FX212Yy50eHQKQEAgLTAsMCArMSw5NCBAQAorVFJBTlNMQVRJTkcgVklNIE1FU1NBR0VTCisKK1RoaXMgZmlsZSBleHBsYWlucyBob3cgdG8gY3JlYXRlIGFuZCBtYWludGFpbiBwbyBmaWxlcyB1c2luZworZ251LWdldHRleHQud2luMzIsIGEgV2luZG93cyBwb3J0IG9mIGdldHRleHQgYnkgRnJhbmNvIEJlegorPGZyYW5jby5iZXpAZ214LmRlPi4gIFlvdSBjYW4gZmluZCBpdCBhdDoKKworCWh0dHA6Ly9ob21lLmEtY2l0eS5kZS9mcmFuY28uYmV6L2dldHRleHQvZ2V0dGV4dF93aW4zMl9lbi5odG1sCisKK0ZpcnN0IHJlYWQgdGhlIFJFQURNRS50eHQgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSBmb3IgZ2VuZXJhbCByZW1hcmtzIG9uCit0cmFuc2xhdGluZyBWaW0gbWVzc2FnZXMuCisKKworU0VUVVAKKworU2V0IHRoZSBlbnZpcm9tZW50IHZhcmlhYmxlIExBTkdVQUdFIHRvIHRoZSBsYW5ndWFnZSBjb2RlIGZvciB0aGUgbGFuZ3VhZ2UgeW91CithcmUgdHJhbnNsYXRpbmcgVmltIG1lc3NhZ2VzIHRvLiAgTGFuZ3VhZ2RlIGNvZGVzIGFyZSB0eXBpY2FsbHkgdHdvIGNoYXJhY3RlcnMKK2FuZCB5b3UgY2FuIGZpbmQgYSBsaXN0IG9mIHRoZW0gYXQ6CisKKwlodHRwOi8vd3d3Lmdlb2NpdGllcy5jb20vY2xpY2syc3BlYWsvbGFuZ3VhZ2VzLmh0bWwKKworVGhlIExBTkdVQUdFIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBieSBhZGRpbmcKK2EgbGluZSB0byB5b3VyIGF1dG9leGVjLmJhdCBmaWxlLCBvciBieSBkZWZpbmluZyBhIHVzZXIgdmFyaWFibGUgZnJvbSB0aGUKK0FkdmFuY2VkIHRhYiBpbiB0aGUgU3lzdGVtIGNvbnRyb2wgcGFuZWwuCisKK05leHQsIGVkaXQgTWFrZV9tdmMubWFrIHNvIHRoYXQgR0VUVEVYVF9QQVRIIHBvaW50cyB0aGUgYmluYXJ5IGRpcmVjdG9yeSBvZgordGhlIGludGFsbGF0aW9uLgorCisKK0NSRUFUSU5HIEEgTkVXIFRSQU5TTEFUSU9OCisKK1doZW4gY3JlYXRpbmcgYSBuZXcgdHJhbnNsYXRpb24geW91IG11c3QgYWRkIHlvdXIgbGFuZ3VhZ2UgY29kZSB0byB0aGUKK01ha2VfbXZjLm1hayBmaWxlIGluIHRoZSBsaW5lcyBkZWZpbmluZyBMQU5HVUFHRVMgYW5kIE1PRklMRVMuICBUbyBjcmVhdGUgdGhlCitpbml0aWFsIC5wbyBmaWxlIGZvciB5b3VyIGxhbmd1YWdlIHlvdSBtdXN0IHVzZSB0aGUgY29tbWFuZDoKKworCW1ha2UgLWYgbWFrZV9tdmMubWFrIGZpcnN0X3RpbWUKKworTm90ZTogWW91IG5lZWQgdG8gYmUgaW4gdGhlIHBvIGRpcmVjdG9yeSB3aGVuIHVzaW5nIHRoaXMgbWFrZWZpbGUuCisKK09uY2UgeW91IGhhdmUgeW91ciBuZXcgLnBvIGZpbGUgbG9hZCBpdCBpbnRvIFZpbSBhbmQgc291cmNlIGNsZWFudXAudmltLCB0aGlzCit3aWxsIGNvbnZlcnQgdW50cmFuc2xhdGVkIG1lc3NhZ2VzIHRvIGNvbW1lbnRzLiAgSWYgeW91IGhhdmUgc3ludGF4CitoaWdobGlnaHRpbmcgdHVybmVkIG9uIHRoZW4gdW50cmFuc2xhdGVkIG1lc3NhZ2VzIHdpbGwgc3RhbmQgb3V0IG1vcmUgZWFzaWx5LgorCitZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gZWRpdCB0aGUgZmlsZSBuYW1lcyBpbiB0aGUgY29tbWVudHMgaW4gdGhlIC5wbyBmaWxlLgorWW91IG5lZWQgdG8gcmVtb3ZlIHRoZSBhYnNvbHV0ZSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiAod2hpY2ggaGFzIHRoZSBmb3JtCitjOlx2aW02MVxzcmNcKS4gIFlvdSBjYW4gZG8gdGhpcyBpbiBWaW0gd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgd2l0aCB0aGUKK2FwcHJvcHJpYXRlIGRpcmVjdG9yeSBzcGVjZmljYXRpb24gZm9yIHdoZXJlIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgVmltCitzb3VyY2U6CisKKwklcy9jOlxcdmltNjFcXHNyY1xcLy9nCisKKworVVBEQVRJTkcgQSBUUkFOU0xBVElPTgorCitJZiB0aGVyZSBhcmUgbmV3IG9yIGNoYW5nZWQgbWVzc2FnZXMgaW4gVmltIHRoYXQgbmVlZCB0cmFuc2xhdGluZywgdGhlbiB0aGUKK2ZpcnN0IHRoaW5nIHRvIGRvIGlzIG1lcmdlIHRoZW0gaW50byB0aGUgZXhpc3RpbmcgdHJhbnNsYXRpb25zLiAgVGhpcyBpcyBkb25lCit3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworCW5tYWtlIC1mIE1ha2VfbXZjLm1hayB4eC5wbworCit3aGVyZSB4eCBpcyB0aGUgbGFuZ2F1Z2UgY29kZSBmb3IgdGhlIGxhbmd1YWdlIG5lZWRpbmcgdHJhbnNsYXRpb25zLiAgVGhlCitvcmlnaW5hbCAucG8gZmlsZSBpcyBjb3BpZWQgdG8geHgucG8ub3JpZy4KKworCitET0lORyBUSEUgVFJBTlNMQVRJT04KKworTm93IHRoYXQgeW91IGhhdmUgYSAucG8gZmlsZSB5b3UgY2FuIGRvIHRoZSB0cmFuc2xhdGlvbnMgZm9yIGFsbCBtZXNzYWdlcyB0aGF0CituZWVkIGl0LiAgU2VlIFJFQURNRS50eHQgZm9yIHNwZWNpZmljIGluc3RydWN0aW9ucy4KKworT25jZSB5b3UgaGF2ZSBmaW5pc2hlZCB0cmFuc2xhdGluZyB0aGUgbWVzc2FnZXMgeW91IHNob3VsZCBtYWtlIHN1cmUgYWxsCitub24tdHJhbnNsYXRlZCBzdHJpbmdzIGFyZSBjb21tZW50ZWQgb3V0LiAgVGhpcyBjYW4gYmUgZG9uZSBieSBzb3VyY2luZworY2xlYW51cC52aW0gb25jZSBhZ2Fpbi4KKworCitDSEVDS0lORyBUSEUgVFJBTlNMQVRJT04KKworQ2hlY2sgdGhlIHRyYW5zbGF0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisJbm1ha2UgLWYgbWFrZV9tdmMubWFrIHh4Lm1vCisKK0NvcnJlY3QgYW55IHN5bnRheCBlcnJvcnMgcmVwb3J0ZWQuICBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGVycm9ycywgdGhlCit0cmFuc2xhdGlvbiBpcyByZWFkeSB0byBiZSBpbnN0YWxsZWQuCisKKworSU5TVEFMTElORyBUSEUgVFJBTlNMQVRJT04KKworSW5zdGFsbCB5b3VyIHRyYW5zbGF0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisJbm1ha2UgLWYgbWFrZV9tdmMubWFrIGluc3RhbGwKKworVGhpcyB3aWxsIGNyZWF0ZSB0aGUgeHhcTENfTUVTU0FHRVMgZGlyZWN0b3J5IGluIHJ1bnRpbWVcbGFuZyBpZiBpdCBkb2VzIG5vdAorYWxyZWFkeSBleGlzdC4KKworCit2aW06dHc9Nzg6CmRpZmYgLS1naXQgYS9zcmMvcG8vYWYucG8gYi9zcmMvcG8vYWYucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyODQ4MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wby9hZi5wbwpAQCAtMCwwICsxLDYyNDQgQEAKKyMgQWZyaWthYW5zIHRyYW5zbGF0aW9uIGZvciBWaW0KKyMgRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisjIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorIyBEYW5pZSBSb3V4IDxkcm91eEB0dWtzLmNvLnphPiwgMjAwMQorIyBFZGl0ZWQ6IEplYW4gSm9yZGFhbiAobmpqKSA8amVhbkB1cGZyb250c3lzdGVtcy5jby56YT4sIDEwLzAxLzIwMDEKKyMgRWRpdGVkIGJ5IERhbmllIG9uIDEwLzMxLzIwMDEKKyMKKyMgbmpqOiBTYXZlID09IFN0b29yLiBXcml0ZSA9PSBTa3J5Zi4KKyMgbmpqOiAiZGVsZXRlZCIgPT0gImdlc2tyYXAiOyAicmVtb3ZlIiA9PSAidmVyd3lkZXIiCisjIG5qajogInNvdXJjZSIgPT0gInVpdHZvZXIiLCB3YW50ICJzb3VyY2VkIiBs6mVycyB3b3JkIHVpdGdldm9lcgorIyBuamo6ICJhYm9ydCIgPT0gInN0YWFrIgorIyBjbG9zZSA9PSBzbHVpdAorIyBPbnNla2VyOgorIyBYIERpc3BsYXkgLSB2ZXJ0b29uc2tlcm0/IChuamo6IGVrIGRpbmsgZGlzIHJlZy4pCisjIG9wZW4gdmltIGluIGFub3RoZXIgR1RLIFdpZGdldCAtIGhldCB2ZXJ0YWFsIGFzIGVsZW1lbnQgKG5qajogT0ssIG1hYXIKKyMgJ24gZWxlbWVudCBpcyBhbGdlbWVuZXIgYXMgJ24gd2lkZ2V0OiBtZW5zIGtyeSBieXZvb3JiZWVsZCBIVE1MCisjIGVuIFhNTCBlbGVtZW50ZS4gTWFhciBlayBrYW4gbmllIG5vdSBhYW4gJ24gc3Blc2lmaWVrZXIgd29vcmQgZGluaworIyBuaWUuKQorIyBQcmludGluZyBhYm9ydGVkIC0gZHJ1a2tlcnkgZ2VzdGFhaz8gKG5qajogZWsgZGluayBkaXMgcmVnLikKKworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogVmltIDYuMFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDAxLTEwLTMxIDEyOjQzKzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiBXZWQgT2N0IDMxIDEzOjQxIFNBU1QgMjAwMVxuIgorIkxhc3QtVHJhbnNsYXRvcjogRGFuaWUgUm91eCA8ZHJvdXhAdHVrcy5jby56YT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBEYW5pZSBSb3V4IDxkcm91eEB0dWtzLmNvLnphPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTT184ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4LWJpdFxuIgorCisjOiBidWZmZXIuYzo5NworbXNnaWQgIkU4MjogQ2Fubm90IGFsbG9jYXRlIGFueSBidWZmZXIsIGV4aXRpbmcuLi4iCittc2dzdHIgIkU4MjogS2FuIG5pZSBidWZmZXIgdG9la2VuIG5pZSwgcHJvZ3JhbSBzbHVpdC4uLiIKKworIzogYnVmZmVyLmM6MTAwCittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4MzogS2FuIG5pZSBidWZmZXIgdG9la2VuIG5pZSwgZ2FhbiBhbmRlciBlZW4gZ2VicnVpay4uLiIKKworIzogYnVmZmVyLmM6Njk4Cittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIHVubG9hZGVkIgorbXNnc3RyICJHZWVuIGJ1ZmZlcnMgaXMgdWl0Z2VsYWFpIG5pZSIKKworIzogYnVmZmVyLmM6NzAwCittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIGRlbGV0ZWQiCittc2dzdHIgIkdlZW4gYnVmZmVycyBpcyBnZXNrcmFwIG5pZSIKKworIzogYnVmZmVyLmM6NzAyCittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAiR2VlbiBidWZmZXJzIGlzIGdlc2tyYXAgbmllIgorCisjOiBidWZmZXIuYzo3MTAKK21zZ2lkICIxIGJ1ZmZlciB1bmxvYWRlZCIKK21zZ3N0ciAiMSBidWZmZXIgdWl0Z2VsYWFpIgorCisjOiBidWZmZXIuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB1bmxvYWRlZCIKK21zZ3N0ciAiJWQgYnVmZmVycyB1aXRnZWxhYWkiCisKKyM6IGJ1ZmZlci5jOjcxNworbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIjEgYnVmZmVyIGdlc2tyYXAiCisKKyM6IGJ1ZmZlci5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIGRlbGV0ZWQiCittc2dzdHIgIiVkIGJ1ZmZlcnMgZ2Vza3JhcCIKKworIzogYnVmZmVyLmM6NzI0Cittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICIxIGJ1ZmZlciBnZXNrcmFwIgorCisjOiBidWZmZXIuYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB3aXBlZCBvdXQiCittc2dzdHIgIiVkIGJ1ZmZlcnMgZ2Vza3JhcCIKKworIzogYnVmZmVyLmM6NzgzCittc2dpZCAiRTg0OiBObyBtb2RpZmllZCBidWZmZXIgZm91bmQiCittc2dzdHIgIkU4NDogR2VlbiB2ZXJhbmRlcmRlIGJ1ZmZlciBnZXZpbmQgbmllIgorCisjLiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorIzogYnVmZmVyLmM6ODIyCittc2dpZCAiRTg1OiBUaGVyZSBpcyBubyBsaXN0ZWQgYnVmZmVyIgorbXNnc3RyICJFODU6IERhYXIgaXMgZ2VlbiBnZWx5c3RlIGJ1ZmZlciBuaWUiCisKKyM6IGJ1ZmZlci5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFODY6IENhbm5vdCBnbyB0byBidWZmZXIgJWxkIgorbXNnc3RyICJFODY6IEthbiBuaWUgbmEgYnVmZmVyICVsZCBnYWFuIG5pZSIKKworIzogYnVmZmVyLmM6ODM3Cittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6IEthbiBuaWUgdmVyYnkgbGFhc3RlIGJ1ZmZlciBnYWFuIG5pZSIKKworIzogYnVmZmVyLmM6ODM5Cittc2dpZCAiRTg4OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg4OiBLYW4gbmllIHbz83IgZWVyc3RlIGJ1ZmZlciBnYWFuIG5pZSIKKworIzogYnVmZmVyLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU4OTogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciAlbGQgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkU4OTogQnVmZmVyICVsZCBub2cgb25nZXN0b29yIHNlZGVydCB2b3JpZ2Ugd3lzaWdpbmcgKGdlYnJ1aWsgISBvbSB0ZSBkd2luZykiCisKKyM6IGJ1ZmZlci5jOjg3OQorbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiBLYW4gbmllIGxhYXN0ZSBidWZmZXIgdWl0bGFhaSBuaWUiCisKKyM6IGJ1ZmZlci5jOjEzMTQKK21zZ2lkICJXMTQ6IFdhcm5pbmc6IExpc3Qgb2YgZmlsZSBuYW1lcyBvdmVyZmxvdyIKK21zZ3N0ciAiVzE0OiBXYWFyc2t1d2luZzogTOplcmx5cyBsb29wIG9vciIKKworIzogYnVmZmVyLmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFOTI6IEJ1ZmZlciAlbGQgbm90IGZvdW5kIgorbXNnc3RyICJFOTI6IGJ1ZmZlciAlbGQga29uIG5pZSBnZXZpbmQgd29yZCBuaWUiCisKKyM6IGJ1ZmZlci5jOjE3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkzOiBNb3JlIHRoYW4gb25lIG1hdGNoIGZvciAlcyIKK21zZ3N0ciAiRTkzOiBNZWVyIGFzIGVlbiB0cmVmZmVyIHZpciAlcyIKKworIzogYnVmZmVyLmM6MTcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFOTQ6IE5vIG1hdGNoaW5nIGJ1ZmZlciBmb3IgJXMiCittc2dzdHIgIkU5NDogR2VlbiBidWZmZXIgd2F0IGJ5ICVzIHBhcyBuaWUiCisKKyM6IGJ1ZmZlci5jOjIxMDUgZXhfZG9jbWQuYzo2MDY1CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIgorbXNnc3RyICJyZetsICVsZCIKKworIzogYnVmZmVyLmM6MjE4OAorbXNnaWQgIkU5NTogQnVmZmVyIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFOTU6IEJ1ZmZlciBtZXQgaGllcmRpZSBuYWFtIGJlc3RhYW4gYWxyZWVkcyIKKworIzogYnVmZmVyLmM6MjQ4MQorbXNnaWQgIiBbTW9kaWZpZWRdIgorbXNnc3RyICIgW0dld3lzaWddIgorCisjOiBidWZmZXIuYzoyNDg2Cittc2dpZCAiW05vdCBlZGl0ZWRdIgorbXNnc3RyICJbT25nZXd5c2lnXSIKKworIzogYnVmZmVyLmM6MjQ5MQorbXNnaWQgIltOZXcgZmlsZV0iCittc2dzdHIgIltOdXdlIGzqZXJdIgorCisjOiBidWZmZXIuYzoyNDkyCittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW0xlZXNmb3V0ZV0iCisKKyM6IGJ1ZmZlci5jOjI0OTQgZmlsZWlvLmM6MTc1NAorbXNnaWQgIltyZWFkb25seV0iCittc2dzdHIgIltsZWVzIGFsbGVlbl0iCisKKyM6IGJ1ZmZlci5jOjI1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lIC0tJWQlJS0tIgorbXNnc3RyICIxIHJl62wgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIC0tJWQlJS0tIgorbXNnc3RyICIlbGQgcmXrbHMgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQgb2YgJWxkIC0tJWQlJS0tIGNvbCAiCittc2dzdHIgInJl62wgJWxkIHZhbiAlbGQgLS0lZCUlLS0ga29sb20gIgorCisjOiBidWZmZXIuYzoyNjA2Cittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJbR2VlbiBs6mVyXSIKKworIy4gbXVzdCBiZSBhIGhlbHAgYnVmZmVyCisjOiBidWZmZXIuYzoyNjQ2Cittc2dpZCAiaGVscCIKK21zZ3N0ciAiaGVscCIKKworIzogYnVmZmVyLmM6MzE1MSBzY3JlZW4uYzo0NjcxCittc2dpZCAiW2hlbHBdIgorbXNnc3RyICJbaGVscF0iCisKKyM6IGJ1ZmZlci5jOjMxODMgc2NyZWVuLmM6NDY3NworbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW1Zvb3Jza291XSIKKworIzogYnVmZmVyLmM6MzM4OQorbXNnaWQgIkFsbCIKK21zZ3N0ciAiQWxsZXMiCisKKyM6IGJ1ZmZlci5jOjMzODkKK21zZ2lkICJCb3QiCittc2dzdHIgIk9uZCIKKworIzogYnVmZmVyLmM6MzM5MQorbXNnaWQgIlRvcCIKK21zZ3N0ciAiQm8iCisKKyM6IGJ1ZmZlci5jOjQxMjcKK21zZ2lkICIiCisiXG4iCisiIyBCdWZmZXIgbGlzdDpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgQnVmZmVyIGx5czpcbiIKKworIzogYnVmZmVyLmM6NDE2MAorbXNnaWQgIltFcnJvciBMaXN0XSIKK21zZ3N0ciAiW0ZvdXRseXNdIgorCisjOiBidWZmZXIuYzo0MTczIG1lbWxpbmUuYzoxNTEzCittc2dpZCAiW05vIEZpbGVdIgorbXNnc3RyICJbR2VlbiBs6mVyXSIKKworIzogYnVmZmVyLmM6NDM5MworbXNnaWQgIiIKKyJcbiIKKyItLS0gU2lnbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFRla2VucyAtLS0iCisKKyM6IGJ1ZmZlci5jOjQ0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2lnbnMgZm9yICVzOiIKK21zZ3N0ciAiVGVrZW5zIHZpciAlczoiCisKKyM6IGJ1ZmZlci5jOjQ0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgIHJl62w9JWxkICBpZD0lZCAgbmFhbT0lcyIKKworIzogZGlmZi5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJFOTY6IENhbiBub3QgZGlmZiBtb3JlIHRoYW4gJWxkIGJ1ZmZlcnMiCittc2dzdHIgIkU5NjogS2FuIG5pZSBtZWVyIGFzICVsZCBidWZmZXJzICdkaWZmJyBuaWUiCisKKyM6IGRpZmYuYzo2NDgKK21zZ2lkICJFOTc6IENhbm5vdCBjcmVhdGUgZGlmZnMiCittc2dzdHIgIkU5NzogS2FuIG5pZSAnZGlmZnMnIHNrZXAgbmllICIKKworIzogZGlmZi5jOjc0NworbXNnaWQgIlBhdGNoIGZpbGUiCittc2dzdHIgIkxhc2xhcCBs6mVyIgorCisjOiBkaWZmLmM6OTkxCittc2dpZCAiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIKK21zZ3N0ciAiRTk4OiBLYW4gbmllICdkaWZmJyBhZnZvZXIgbGVlcyBuaWUiCisKKyM6IGRpZmYuYzoxNzA0Cittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IEh1aWRpZ2UgYnVmZmVyIGlzIG5pZSBpbiAnZGlmZicgbW9kdXMgbmllIgorCisjOiBkaWZmLmM6MTcxNgorbXNnaWQgIkUxMDA6IE5vIG90aGVyIGJ1ZmZlciBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDA6IEdlZW4gYW5kZXIgYnVmZmVyIGluICdkaWZmJyBtb2R1cyBuaWUiCisKKyM6IGRpZmYuYzoxNzI0Cittc2dpZCAiRTEwMTogTW9yZSB0aGFuIHR3byBidWZmZXJzIGluIGRpZmYgbW9kZSwgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlIgorbXNnc3RyICIiCisiRTEwMTogTWVlciBhcyB0d2VlIGJ1ZmZlcnMgaW4gJ2RpZmYnIG1vZHVzLCB3ZWV0IG5pZSB3YXR0ZXIgZWVuIG9tIHRlICIKKyJnZWJydWlrIG5pZSIKKworIzogZGlmZi5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMjogQ2FuJ3QgZmluZCBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTAyOiBLYW4gYnVmZmVyICVzIG5pZSB2aW5kIG5pZSIKKworIzogZGlmZi5jOjE3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMzogQnVmZmVyIFwiJXNcIiBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAzOiBCdWZmZXIgXCIlc1wiIGlzIG5pZSBpbiAnZGlmZicgbW9kdXMgbmllIgorCisjOiBkaWdyYXBoLmM6MjE2OAorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiAnRXNjYXBlJyBuaWUgdG9lZ2VsYWF0IGluIGRpZ3JhYWYgbmllIgorCisjOiBkaWdyYXBoLmM6MjM0MAorbXNnaWQgIktleW1hcCBmaWxlIG5vdCBmb3VuZCIKK21zZ3N0ciAiU2xldXRlbGJpbmRpbmds6mVyIG5pZSBnZXZpbmQgbmllIgorCisjOiBkaWdyYXBoLmM6MjM2NworbXNnaWQgIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTEwNTogOmxvYWRrZXltYXAgd29yZCBidWl0ZSAnbiB1aXR2b2VybOplciBnZWJydWlrIgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBTbGV1dGVsd29vcmQgdm9sdG9vaWluZyAoXk4vXlApIgorCisjLiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4KKyM6IGVkaXQuYzo0MQorbXNnaWQgIiBeWCBtb2RlICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eVi9eTi9eUCkiCittc2dzdHIgIiBeWCBtb2R1cyAoXkUvXlkvXkwvXl0vXkYvXkkvXksvXkQvXk4vXlApIgorCisjLiBTY3JvbGwgaGFzIGl0J3Mgb3duIG1zZ3MsIGluIGl0J3MgcGxhY2UgdGhlcmUgaXMgdGhlIG1zZyBmb3IgbG9jYWwKKyMuICogY3RybF94X21vZGUgPSAwIChlZyBjb250aW51ZV9zdGF0dXMgJiBDT05UX0xPQ0FMKSAgLS0gQWNldmVkbworIzogZWRpdC5jOjQ0Cittc2dpZCAiIEtleXdvcmQgTG9jYWwgY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIgU2xldXRlbHdvb3JkIExva2FsZSB2b2x0b29paW5nICheTi9eUCkiCisKKyM6IGVkaXQuYzo0NQorbXNnaWQgIiBXaG9sZSBsaW5lIGNvbXBsZXRpb24gKF5ML15OL15QKSIKK21zZ3N0ciAiIEhlbGUtcmXrbCB2b2x0b29paW5nICheTC9eTi9eUCkiCisKKyM6IGVkaXQuYzo0NgorbXNnaWQgIiBGaWxlIG5hbWUgY29tcGxldGlvbiAoXkYvXk4vXlApIgorbXNnc3RyICIgTOplcm5hYW0gdm9sdG9vaWluZyAoXkYvXk4vXlApIgorCisjOiBlZGl0LmM6NDcKK21zZ2lkICIgVGFnIGNvbXBsZXRpb24gKF5dL15OL15QKSIKK21zZ3N0ciAiIEV0aWtldHZvbHRvb2lpbmcgKF5dL15OL15QKSIKKworIzogZWRpdC5jOjQ4Cittc2dpZCAiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBHaWRzcGF0cm9vbiB2b2x0b29paW5nICheTi9eUCkiCisKKyM6IGVkaXQuYzo0OQorbXNnaWQgIiBEZWZpbml0aW9uIGNvbXBsZXRpb24gKF5EL15OL15QKSIKK21zZ3N0ciAiIERlZmluaXNpZXZvbHRvb2lpbmcgKF5EL15OL15QKSIKKworIzogZWRpdC5jOjUxCittc2dpZCAiIERpY3Rpb25hcnkgY29tcGxldGlvbiAoXksvXk4vXlApIgorbXNnc3RyICIgV29vcmRlYm9la3ZvbHRvb2lpbmcgKF5LL15OL15QKSIKKworIzogZWRpdC5jOjUyCittc2dpZCAiIFRoZXNhdXJ1cyBjb21wbGV0aW9uICheVC9eTi9eUCkiCittc2dzdHIgIiBUZXNvdXJ1c3ZvbHRvb2lpbmcgKF5UL15OL15QKSIKKworIzogZWRpdC5jOjUzCittc2dpZCAiIENvbW1hbmQtbGluZSBjb21wbGV0aW9uICheVi9eTi9eUCkiCittc2dzdHIgIiBCZXZlbHJl62x2b2x0b29paW5nICheVi9eTi9eUCkiCisKKyM6IGVkaXQuYzo1NgorbXNnaWQgIkhpdCBlbmQgb2YgcGFyYWdyYXBoIgorbXNnc3RyICJIZXQgZWluZGUgdmFuIHBhcmFncmFhZiBnZXRyZWYiCisKKyM6IGVkaXQuYzo4OTQKK21zZ2lkICIndGhlc2F1cnVzJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIid0aGVzYXVydXMnIG9wc2llIGlzIGxlZWciCisKKyM6IGVkaXQuYzoxMDcwCittc2dpZCAiJ2RpY3Rpb25hcnknIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiJ2RpY3Rpb25hcnknIG9wc2llIGlzIGxlZWciCisKKyM6IGVkaXQuYzoxOTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGRpY3Rpb25hcnk6ICVzIgorbXNnc3RyICJEZXVyc29layB3b29yZGVib2VrOiAlcyIKKworIzogZWRpdC5jOjIxODMKK21zZ2lkICIgKGluc2VydCkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoaW52b2VnKSBSb2wgKF5FL15ZKSIKKworIzogZWRpdC5jOjIxODUKK21zZ2lkICIgKHJlcGxhY2UpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKHZlcnZhbmcpIFJvbCAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIlNvZWsgdmlyOiAlcyIKKworIzogZWRpdC5jOjI1MzEKK21zZ2lkICJTY2FubmluZyB0YWdzLiIKK21zZ3N0ciAiRGV1cnNvZWsgZXRpa2V0dGUuIgorCisjOiBlZGl0LmM6MzE4OQorbXNnaWQgIiBBZGRpbmciCittc2dzdHIgIiBXb3JkIGJ5Z2V2b2VnIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjMyMzgKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIFNvZWtlbmQuLi4iCisKKyM6IGVkaXQuYzozMjk0Cittc2dpZCAiQmFjayBhdCBvcmlnaW5hbCIKK21zZ3N0ciAiVGVydWcgYnkgb29yc3Byb25rbGlrZSIKKworIzogZWRpdC5jOjMyOTkKK21zZ2lkICJXb3JkIGZyb20gb3RoZXIgbGluZSIKK21zZ3N0ciAiV29vcmQgdmFuIGFuZGVyIHJl62wiCisKKyM6IGVkaXQuYzozMzA0Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIkRpZSBlbmlnc3RlIHRyZWZmZXIiCisKKyM6IGVkaXQuYzozMzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICJ0cmVmZmVyICVkIHZhbiAlZCIKKworIzogZWRpdC5jOjMzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgInRyZWZmZXIgJWQiCisKKyM6IGV2YWwuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNjogVW5rbm93biB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA2OiBPbmJla2VuZGUgdmVyYW5kZXJsaWtlOiBcIiVzXCIiCisKKyM6IGV2YWwuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNzogTWlzc2luZyBicmFjZXM6ICVzIgorbXNnc3RyICJFMTA3OiBPbnRicmVrZW5kZSBoYWtpZXM6ICVzIgorCisjOiBldmFsLmM6MTA0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTA4OiBObyBzdWNoIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDg6IEdlZW4gdmVyYW5kZXJsaWtlOiBcIiVzXCIiCisKKyM6IGV2YWwuYzoxMjg0Cittc2dpZCAiRTEwOTogTWlzc2luZyAnOicgYWZ0ZXIgJz8nIgorbXNnc3RyICJFMTA5OiBPbnRicmVrZW5kZSAnOicgbmEgJz8nIgorCisjOiBldmFsLmM6MTg5OAorbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiBPbnRicmVrZW5kZSAnKSciCisKKyM6IGV2YWwuYzoxOTQ4Cittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6IE9udGJyZWtlbmRlICddJyIKKworIzogZXZhbC5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMjogT3B0aW9uIG5hbWUgbWlzc2luZzogJXMiCittc2dzdHIgIkUxMTI6IE9wc2llbmFhbSBvbnRicmVlazogJXMiCisKKyM6IGV2YWwuYzoyMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTM6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTExMzogT25iZWtlbmRlIG9wc2llOiAlcyIKKworIzogZXZhbC5jOjIxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IE9udGJyZWtlbmRlIGFhbmhhbGluZ3N0ZWtlbjogJXMiCisKKyM6IGV2YWwuYzoyMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTU6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE1OiBPbnRicmVrZW5kZSBhYW5oYWxpbmdzdGVrZW46ICVzIgorCisjOiBldmFsLmM6MjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE2OiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJXMiCittc2dzdHIgIkUxMTY6IE9uZ2VsZGlnZSBwYXJhbWV0ZXJzIHZpciBmdW5rc2llICVzIgorCisjOiBldmFsLmM6MjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE3OiBVbmtub3duIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExNzogT25iZWtlbmRlIGZ1bmtzaWU6ICVzIgorCisjOiBldmFsLmM6MjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODogVGUgdmVlbCBwYXJhbWV0ZXJzIHZpciBmdW5rc2llOiAlcyIKKworIzogZXZhbC5jOjI1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOTogVGUgbWluIHBhcmFtZXRlcnMgdmlyIGZ1bmtzaWU6ICVzIgorCisjOiBldmFsLmM6MjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIwOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dDogJXMiCittc2dzdHIgIkUxMjA6IDxTSUQ+IHdvcmQgYnVpdGUgc2tyaXBrb250ZWtzIGdlYnJ1aWs6ICVzIgorCisjOiBldmFsLmM6MzU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIrLSVzJTNsZCBsaW5lczogIgorbXNnc3RyICIrLSVzJTNsZCByZetsczogIgorCisjOiBldmFsLmM6NDY5MAorbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJk9LXG4iCisiJkthbnNlbGxlZXIiCisKKyM6IGV2YWwuYzo1NTEzCittc2dpZCAiRTI0MDogTm8gY29ubmVjdGlvbiB0byBWaW0gc2VydmVyIgorbXNnc3RyICJFMjQwOiBHZWVuIHZlcmJpbmRpbmcgbWV0IFZpbSBiZWRpZW5lciIKKworIzogZXZhbC5jOjU2MDMKK21zZ2lkICJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIKK21zZ3N0ciAiRTI3NzogS29uIGJlZGllbmVyLXRlcnVndm9lciBuaWUgbGVlcyBuaWUiCisKKyM6IGV2YWwuYzo1NjI4Cittc2dpZCAiRTI1ODogVW5hYmxlIHRvIHNlbmQgdG8gY2xpZW50IgorbXNnc3RyICJFMjU4OiBLYW4gbmllIG5hIGtsaetudCBzdHV1ciBuaWUiCisKKyM6IGV2YWwuYzo1NjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiBLYW4gbmllIG5hICVzIHN0dXVyIG5pZSIKKworIzogZXZhbC5jOjU3NjcKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIihPbmdlbGRpZykiCisKKyM6IGV2YWwuYzo2NzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogJXMiCittc2dzdHIgIkUxMjE6IE9uZ2VkZWZpbmllZXJkZSB2ZXJhbmRlcmxpa2U6ICVzIgorCisjOiBldmFsLmM6NzQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgdXNlICEgdG8gcmVwbGFjZSIKK21zZ3N0ciAiRTEyMjogRnVua3NpZSAlcyBiZXN0YWFuIGFscmVlZHMsIGdlYnJ1aWsgISBvbSB0ZSB2ZXJ2YW5nIgorCisjOiBldmFsLmM6NzUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiBPbmdlZGVmaW5pZWVyZGUgZnVua3NpZTogJXMiCisKKyM6IGV2YWwuYzo3NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjQ6IE1pc3NpbmcgJygnOiAlcyIKK21zZ3N0ciAiRTEyNDogT250YnJla2VuZGUgJygnOiAlcyIKKworIzogZXZhbC5jOjc1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNTogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUxMjU6IE9uZ2VsZGlnZSBwYXJhbWV0ZXI6ICVzIgorCisjOiBldmFsLmM6NzY0MQorbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiBPbnRicmVrZW5kZSAnOmVuZGZ1bmN0aW9uJyIKKworIzogZXZhbC5jOjc3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNzogQ2Fubm90IHJlZGVmaW5lIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMjc6IEthbiBmdW5rc2llICVzIG5pZSBoZXJkZWZpbmllZXIgbmllOiBEaXQgaXMgaW4gZ2VicnVpayIKKworIzogZXZhbC5jOjc3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODogRnVua3NpZW5hYW0gbW9ldCBtZXQgJ24gaG9vZmxldHRlciBiZWdpbjogJXMiCisKKyM6IGV2YWwuYzo3NzgzCittc2dpZCAiRTEyOTogRnVuY3Rpb24gbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTEyOTogRnVua3NpZW5hYW0gdmVyZWlzIgorCisjOiBldmFsLmM6Nzg3NgorbXNnaWQgImZ1bmN0aW9uICIKK21zZ3N0ciAiZnVua3NpZSAiCisKKyM6IGV2YWwuYzo3OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzA6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMzA6IE9uZ2VkZWZpbmllZXJkZSBmdW5rc2llOiAlcyIKKworIzogZXZhbC5jOjc5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMTogQ2Fubm90IGRlbGV0ZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTMxOiBLYW4gZnVua3NpZSAlcyBuaWUgdmVyd3lkZXIgbmllOiBEaXQgaXMgaW4gZ2VicnVpayIKKworIzogZXZhbC5jOjgwNDMKK21zZ2lkICJFMTMyOiBGdW5jdGlvbiBjYWxsIGRlcHRoIGlzIGhpZ2hlciB0aGFuICdtYXhmdW5jZGVwdGgnIgorbXNnc3RyICJFMTMyOiBGdW5rc2llcm9lcGRpZXB0ZSBpcyBncm90ZXIgYXMgJ21heGZ1bmNkZXB0aCciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjgwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAicm9lcCAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODExOSBleF9jbWRzMi5jOjE5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAidmVydm9sZyBpbiAlcyIKKworIzogZXZhbC5jOjgxNzMKK21zZ2lkICJFMTMzOiA6cmV0dXJuIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTEzMzogJzpyZXR1cm4nIGJ1aXRlIGZ1bmtzaWUiCisKKyM6IGV2YWwuYzo4MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyAjJWxkIgorbXNnc3RyICIlcyBsZXdlciAjJWxkIG9wIgorCisjOiBldmFsLmM6ODI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICIlcyBsZXdlciBcIiVzXCIgb3AiCisKKyM6IGV2YWwuYzo4Mzk1Cittc2dpZCAiIgorIlxuIgorIiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgZ2xvYmFsZSB2ZXJhbmRlcmxpa2VzOlxuIgorCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9rdGFhbCAlMDNvIgorCisjOiBleF9jbWRzLmM6NDI4Cittc2dpZCAiRTEzNDogTW92ZSBsaW5lcyBpbnRvIHRoZW1zZWx2ZXMiCittc2dzdHIgIkUxMzQ6IFNrdWlmIHJl62xzIGluIGh1bHNlbGYgaW4iCisKKyM6IGV4X2NtZHMuYzo0OTcKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgIjEgcmXrbCBnZXNrdWlmIgorCisjOiBleF9jbWRzLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBtb3ZlZCIKK21zZ3N0ciAiJWxkIHJl62xzIGdlc2t1aWYiCisKKyM6IGV4X2NtZHMuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICIlbGQgcmXrbHMgZmlsdHJlZXIiCisKKyM6IGV4X2NtZHMuYzo5MTgKK21zZ2lkICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMTM1OiAqRmlsdGVyKiBPdXRvYmV2ZWxlIG1hZyBuaWUgZGllIGh1aWRpZ2UgYnVmZmVyIHZlcmFuZGVyIG5pZSIKKworIzogZXhfY21kcy5jOjEwMDMKK21zZ2lkICJbTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2VdXG4iCittc2dzdHIgIltPbmdlc3Rvb3Igc2VkZXJ0IHZvcmlnZSB2ZXJhbmRlcmluZ11cbiIKKworIzogZXhfY21kcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmltaW5mbzogJXMgaW4gbGluZTogIgorbXNnc3RyICJ2aW1pbmZvOiAlcyBpbiByZetsOiAiCisKKyM6IGV4X2NtZHMuYzoxMjUzCittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIkUxMzY6IHZpbWluZm86IFRlIHZlZWwgZm91dGUsIHNsYWFuIGRpZSByZXMgdmFuIGRpZSBs6mVyIG9vciIKKworIzogZXhfY21kcy5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiJXMlcyVzIgorbXNnc3RyICJCZXNpZyBvbSB2aW1pbmZvIGzqZXIgXCIlc1wiJXMlcyVzIHRlIGxlZXMiCisKKyM6IGV4X2NtZHMuYzoxMjgzCittc2dpZCAiIGluZm8iCittc2dzdHIgIiBpbmxpZ3RpbmciCisKKyM6IGV4X2NtZHMuYzoxMjg0Cittc2dpZCAiIG1hcmtzIgorbXNnc3RyICIgbWVya2VycyIKKworIzogZXhfY21kcy5jOjEyODUKK21zZ2lkICIgRkFJTEVEIgorbXNnc3RyICIgR0VGQUFMIgorCisjOiBleF9jbWRzLmM6MTM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM3OiBWaW1pbmZvIGZpbGUgaXMgbm90IHdyaXRhYmxlOiAlcyIKK21zZ3N0ciAiRTEzNzogVmltaW5mbyBs6mVyIGlzIG5pZSBza3J5ZmJhYXIgbmllOiAlcyIKKworIzogZXhfY21kcy5jOjE1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzODogQ2FuJ3Qgd3JpdGUgdmltaW5mbyBmaWxlICVzISIKK21zZ3N0ciAiRTEzODogS2FuIG5pZSB2aW1pbmZvIGzqZXIgJXMgc3Rvb3IgbmllISIKKworIzogZXhfY21kcy5jOjE1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiIgorbXNnc3RyICJCZXNpZyBvbSB2aW1pbmZvIGzqZXIgXCIlc1wiIHRlIHN0b29yIgorCisjLiBXcml0ZSB0aGUgaW5mbzoKKyM6IGV4X2NtZHMuYzoxNjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVGhpcyB2aW1pbmZvIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBWaW0gJXMuXG4iCittc2dzdHIgIiMgSGllcmRpZSB2aW1pbmZvIGzqZXIgaXMgZ2VnZW5lcmVlciBkZXVyIFZpbSAlcy5cbiIKKworIzogZXhfY21kcy5jOjE2MTIKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIEp5IG1hZyBkaXQgd3lzaWcgYXMgankgdmVyc2lndGlnIGlzIVxuIgorIlxuIgorCisjOiBleF9jbWRzLmM6MTYxNAorbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjIFdhYXJkZSB2YW4gJ2VuY29kaW5nJyB0b2UgaGllcmRpZSBs6mVyIGdlc3Rvb3IgaXNcbiIKKworIzogZXhfY21kcy5jOjE3MTMKK21zZ2lkICJJbGxlZ2FsIHN0YXJ0aW5nIGNoYXIiCittc2dzdHIgIk9uZ2VsZGlnZSBiZWdpbmthcmFrdGVyIgorCisjOiBleF9jbWRzLmM6MjA1MyBleF9jbWRzLmM6MjI4OSBleF9jbWRzMi5jOjYwMgorbXNnaWQgIlNhdmUgQXMiCittc2dzdHIgIlN0b29yIEFzIgorCisjLiBPdmVyd3JpdGluZyBhIGZpbGUgdGhhdCBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIgaXMgbm90IGEKKyMuICogZ29vZCBpZGVhLgorIzogZXhfY21kcy5jOjIwOTYKK21zZ2lkICJFMTM5OiBGaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciIKK21zZ3N0ciAiRTEzOTogTOplciBpcyBnZWxhYWkgaW4gYW5kZXIgYnVmZmVyIgorCisjOiBleF9jbWRzLmM6MjEzMAorbXNnaWQgIldyaXRlIHBhcnRpYWwgZmlsZT8iCittc2dzdHIgIlNrcnlmIGdlZGVlbHRlbGlrZSBs6mVyPyIKKworIzogZXhfY21kcy5jOjIxMzcKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiRTE0MDogR2VicnVpayAhIG9tIGdlZGVlbHRlbGlrZSBidWZmZXIgdGUgc2tyeWYiCisKKyM6IGV4X2NtZHMuYzoyMjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAiT29yc2tyeWYgYmVzdGFhbmRlIGzqZXIgXCIlLipzXCI/IgorCisjOiBleF9jbWRzLmM6MjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQxOiBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkUxNDE6IEdlZW4gbOplcm5hYW0gdmlyIGJ1ZmZlciAlbGQgbmllIgorCisjOiBleF9jbWRzLmM6MjMzMgorbXNnaWQgIkUxNDI6IEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24iCittc2dzdHIgIkUxNDI6IEzqZXIgbmllIGdlc3Rvb3IgbmllOiBTdG9vciBpcyBhZmdlc2tha2VsIGRldXIgZGllICd3cml0ZScgb3BzaWUiCisKKyM6IGV4X2NtZHMuYzoyMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgZm9yIFwiJS4qc1wiLlxuIgorIkRvIHlvdSB3aXNoIHRvIHdyaXRlIGFueXdheT8iCittc2dzdHIgIiIKKyIncmVhZG9ubHknIG9wc2llIGlzIGFhbiB2aXIgXCIlLipzXCIuXG4iCisiV2lsIGp5IGRpdCBmb3JzZWVyPyIKKworIzogZXhfY21kcy5jOjI1MTcKK21zZ2lkICJFZGl0IEZpbGUiCittc2dzdHIgIlZlcmFuZGVyIGzqZXIiCisKKyM6IGV4X2NtZHMuYzozMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiBPdXRvYmV2ZWxlIGhldCBudXdlIGJ1ZmZlciAlcyBvbnZlcndhZ3MgZ2Vza3JhcCIKKworIzogZXhfY21kcy5jOjMxNTYKK21zZ2lkICJFMTQ0OiBub24tbnVtZXJpYyBhcmd1bWVudCB0byA6eiIKK21zZ3N0ciAiRTE0NDogbmllLW51bWVyaWVzZSBwYXJhbWV0ZXIgdmlyIDp6IgorCisjOiBleF9jbWRzLmM6MzI0MQorbXNnaWQgIkUxNDU6IFNoZWxsIGNvbW1hbmRzIG5vdCBhbGxvd2VkIGluIHJ2aW0iCittc2dzdHIgIkUxNDU6IERvcCBiZXZlbGUgbmllIHRvZWdlbGFhdCBpbiBydmltIgorCisjOiBleF9jbWRzLmM6MzM0OAorbXNnaWQgIkUxNDY6IFJlZ3VsYXIgZXhwcmVzc2lvbnMgY2FuJ3QgYmUgZGVsaW1pdGVkIGJ5IGxldHRlcnMiCittc2dzdHIgIkUxNDY6IFBhdHJvbmUga2FuIG5pZSBkZXVyIGxldHRlcnMgYWZnZWJha2VuIHdvcmQgbmllIgorCisjOiBleF9jbWRzLmM6MzY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHdpdGggJXMgKHkvbi9hL3EvbC9eRS9eWSk/IgorbXNnc3RyICJ2ZXJ2YW5nIG1ldCAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCisKKyM6IGV4X2NtZHMuYzo0MDUwCittc2dpZCAiKEludGVycnVwdGVkKSAiCittc2dzdHIgIihPbmRlcmJyZWVrKSAiCisKKyM6IGV4X2NtZHMuYzo0MDU0Cittc2dpZCAiMSBzdWJzdGl0dXRpb24iCittc2dzdHIgIjEgdmVydmFuZ2luZyIKKworIzogZXhfY21kcy5jOjQwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIHN1YnN0aXR1dGlvbnMiCittc2dzdHIgIiVsZCB2ZXJ2YW5naW5ncyIKKworIzogZXhfY21kcy5jOjQwNTkKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIgb3AgMSByZetsIgorCisjOiBleF9jbWRzLmM6NDA2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gJWxkIGxpbmVzIgorbXNnc3RyICIgb3AgJWxkIHJl62xzIgorCisjOiBleF9jbWRzLmM6NDExMgorbXNnaWQgIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE0NzogS2FuIG5pZSA6Z2xvYmFsIHJla3Vyc2llZiBkb2VuIG5pZSAiCisKKyM6IGV4X2NtZHMuYzo0MTQ3Cittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IFBhdHJvb24gb250YnJlZWsgdWl0IGdsb2JhYWwiCisKKyM6IGV4X2NtZHMuYzo0MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIlBhdHJvb24gZ2V2aW5kIGluIGVsa2UgcmXrbDogJXMiCisKKyM6IGV4X2NtZHMuYzo0Mjc3Cittc2dpZCAiIgorIlxuIgorIiMgTGFzdCBTdWJzdGl0dXRlIFN0cmluZzpcbiIKKyIkIgorbXNnc3RyICIiCisiXG4iCisiIyBWb3JpZ2UgVmVydmFuZ3N0cmluZzpcbiIKKyIkIgorCisjOiBleF9jbWRzLmM6NDM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQ5OiBTb3JyeSwgbm8gaGVscCBmb3IgJXMiCittc2dzdHIgIkUxNDk6IEphbW1lciwgZ2VlbiBodWxwIHZpciAlcyBuaWUiCisKKyM6IGV4X2NtZHMuYzo0NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAiSmFtbWVyLCBodWxwbOplciBcIiVzXCIga2FuIG5pZSBnZXZpbmQgd29yZCBuaWUiCisKKyM6IGV4X2NtZHMuYzo0ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTA6IE5vdCBhIGRpcmVjdG9yeTogJXMiCittc2dzdHIgIkUxNTA6IE5pZSAnbiBnaWRzIG5pZTogJXMiCisKKyM6IGV4X2NtZHMuYzo0ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTI6IENhbm5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTUyOiBLYW4gbmllICVzIG9vcG1hYWsgb20gdGUgc2tyeWYgbmllIgorCisjOiBleF9jbWRzLmM6NDg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE1MzogS2FuIG5pZSAlcyBvb3AgbWFhayBvbSB0ZSBsZWVzIG5pZSIKKworIzogZXhfY21kcy5jOjQ5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcyIKK21zZ3N0ciAiRTE1NDogRHVwbGlrYWF0IGV0aWtldCBcIiVzXCIgaW4gbOplciAlcyIKKworIzogZXhfY21kcy5jOjUwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiBPbmJla2VuZGUgZnVua3NpZTogJXMiCisKKyM6IGV4X2NtZHMuYzo1MDk4Cittc2dpZCAiRTE1NjogTWlzc2luZyBzaWduIG5hbWUiCittc2dzdHIgIkUxNTY6IE9udGJyZWtlbmRlIHRla2VubmFhbSIKKworIzogZXhfY21kcy5jOjUxNDQKK21zZ2lkICJFMjU1OiBUb28gbWFueSBzaWducyBkZWZpbmVkIgorbXNnc3RyICJFNzc6IFRlIHZlZWwgdGVrZW5zIGdlZGVmaW5pZWVyIgorCisjOiBleF9jbWRzLmM6NTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM5OiBJbnZhbGlkIHNpZ24gdGV4dDogJXMiCittc2dzdHIgIkUyMzk6IE9uZ2VsZGlnZSB0ZWtlbnRla3M6ICVzIgorCisjOiBleF9jbWRzLmM6NTIxMCBleF9jbWRzLmM6NTM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiBPbmJla2VuZGUgb3BzaWU6ICVzIgorCisjOiBleF9jbWRzLmM6NTI1NgorbXNnaWQgIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiCittc2dzdHIgIkUxNTk6IE9udGJyZWtlbmRlIHRla2Vubm9tbWVyIgorCisjOiBleF9jbWRzLmM6NTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU4OiBJbnZhbGlkIGJ1ZmZlciBuYW1lOiAlcyIKK21zZ3N0ciAiRTE1ODogT25nZWxkaWdlIGJ1ZmZlcm5hYW06ICVzIgorCisjOiBleF9jbWRzLmM6NTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU3OiBJbnZhbGlkIHNpZ24gSUQ6ICVsZCIKK21zZ3N0ciAiRTE1NzogT25nZWxkaWdlIHRla2VuIElEOiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1NTQ2Cittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJbR2Vza3JhcF0iCisKKyM6IGV4X2NtZHMyLmM6NzAKK21zZ2lkICJFbnRlcmluZyBEZWJ1ZyBtb2RlLiAgVHlwZSBcImNvbnRcIiB0byBsZWF2ZS4iCittc2dzdHIgIk9udGZvdXRtb2R1cyBiZWdpbiBub3UuICBUaWsgXCJjb250XCIgb20gdGUgdmVybGFhdC4iCisKKyM6IGV4X2NtZHMyLmM6NzQgZXhfZG9jbWQuYzo3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6ICVzIgorbXNnc3RyICJyZetsICVsZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY21kOiAlcyIKK21zZ3N0ciAiY21kOiAlcyIKKworIzogZXhfY21kczIuYzoyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJlYWtwb2ludCBpbiBcIiVzJXNcIiBsaW5lICVsZCIKK21zZ3N0ciAiSW5zcGVrc2llcHVudCBpbiBcIiVzJXNcIiByZetsICVsZCIKKworIzogZXhfY21kczIuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MTogQnJlYWtwb2ludCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMTYxOiBJbnNwZWtzaWVwdW50IGtvbiBuaWUgZ2V2aW5kIHdvcmQgbmllOiAlcyIKKworIzogZXhfY21kczIuYzo0MTQKK21zZ2lkICJObyBicmVha3BvaW50cyBkZWZpbmVkIgorbXNnc3RyICJHZWVuIGluc3Bla3NpZXB1bnRlIGdlZGVmaW5pZWVyIG5pZSIKKworIzogZXhfY21kczIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgIHJl62wgJWxkIgorCisjOiBleF9jbWRzMi5jOjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlIGNoYW5nZXMgdG8gXCIlLipzXCI/IgorbXNnc3RyICJTdG9vciB2ZXJhbmRlcmluZ2UgbmEgXCIlLipzXCI/IgorCisjOiBleF9jbWRzMi5jOjYyNyBleF9kb2NtZC5jOjg2MTIKK21zZ2lkICJVbnRpdGxlZCIKK21zZ3N0ciAiT25nZXRpdGVsZCIKKworIzogZXhfY21kczIuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MjogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxNjI6IEJ1ZmZlciBcIiVzXCIgaXMgbmllIGdlc2tyeWYgc2VkZXJ0IHZvcmlnZSB3eXNpZ2luZyBuaWUiCisKKyM6IGV4X2NtZHMyLmM6ODMyCittc2dpZCAiV2FybmluZzogRW50ZXJlZCBvdGhlciBidWZmZXIgdW5leHBlY3RlZGx5IChjaGVjayBhdXRvY29tbWFuZHMpIgorbXNnc3RyICJXYWFyc2t1d2luZzogQW5kZXIgYnVmZmVyIG9udmVyd2FncyBiZXRyZWUgKGt5ayBuYSBvdXRvYmV2ZWxlKSIKKworIzogZXhfY21kczIuYzoxMjA4Cittc2dpZCAiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTYzOiBEYWFyIGlzIG5ldCBlZW4gbOplciBvbSB0ZSBiZXdlcmsiCisKKyM6IGV4X2NtZHMyLmM6MTIxMAorbXNnaWQgIkUxNjQ6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiRTE2NDogS2FuIG5pZSB28/NyIGRpZSBlZXJzdGUgbOplciBnYWFuIG5pZSIKKworIzogZXhfY21kczIuYzoxMjEyCittc2dpZCAiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiCittc2dzdHIgIkUxNjU6IEthbiBuaWUgdmVyYnkgZGllIGxhYXN0ZSBs6mVyIGdhYW4gbmllIgorCisjOiBleF9jbWRzMi5jOjE2MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIgaW4gXCIlc1wiIgorbXNnc3RyICJCZXNpZyBvbSB0ZSBzb2VrIHZpciBcIiVzXCIgaW4gXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIkJlc2lnIG9tIHRlIHNvZWsgdmlyIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxNjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgImtvbiBuaWUgaW4gJ3J1bnRpbWVwYXRoJyBnZXZpbmQgd29yZCBuaWU6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxNzEyCittc2dpZCAiUnVuIE1hY3JvIgorbXNnc3RyICJWb2VyIE1ha3JvIHVpdCIKKworIzogZXhfY21kczIuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAiS2FuIG5pZSBnaWRzIHVpdHZvZXIgbmllOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAia29uIG5pZSBcIiVzXCIgdWl0dm9lciBuaWUiCisKKyM6IGV4X2NtZHMyLmM6MTg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgInJl62wgJWxkOiBrb24gbmllIFwiJXNcIiB1aXR2b2VyIG5pZSIKKworIzogZXhfY21kczIuYzoxODYzCisjLCBjLWZvcm1hdAorbXNnaWQgInNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAiYmVzaWcgb20gXCIlc1wiIHVpdCB0ZSB2b2VyIgorCisjOiBleF9jbWRzMi5jOjE4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IHNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAicmXrbCAlbGQ6IHZvZXIgbm91IFwiJXNcIiB1aXQiCisKKyM6IGV4X2NtZHMyLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzb3VyY2luZyAlcyIKK21zZ3N0ciAiJXMga2xhYXIgdWl0Z2V2b2VyIgorCisjOiBleF9jbWRzMi5jOjIyNzIKK21zZ2lkICJXMTU6IFdhcm5pbmc6IFdyb25nIGxpbmUgc2VwYXJhdG9yLCBeTSBtYXkgYmUgbWlzc2luZyIKK21zZ3N0ciAiVzE1OiBXYWFyc2t1d2luZzogVmVya2VlcmRlIHJl62xza2VpZGluZywgXk0gb250YnJlZWsgZGFsayIKKworIzogZXhfY21kczIuYzoyMzIxCittc2dpZCAiRTE2NzogOnNjcmlwdGVuY29kaW5nIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2NzogJzpzY3JpcHRlbmNvZGluZycgYnVpdGUgJ24gdWl0dm9lcmzqZXIgZ2VicnVpayIKKworIzogZXhfY21kczIuYzoyMzU0Cittc2dpZCAiRTE2ODogOmZpbmlzaCB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjg6ICc6ZmluaXNoJyBidWl0ZSAnbiB1aXR2b2VybOplciBnZWJydWlrIgorCisjOiBleF9jbWRzMi5jOjI4MjAKK21zZ2lkICJObyB0ZXh0IHRvIGJlIHByaW50ZWQiCittc2dzdHIgIkdlZW4gdGVrcyBvbSB0ZSBkcnVrIG5pZSIKKworIzogZXhfY21kczIuYzoyODk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nIHBhZ2UgJWQgKCVkJSUpIgorbXNnc3RyICJEcnVrIG5vdSBibGFkc3kgJWQgKCVkJSUpIgorCisjOiBleF9jbWRzMi5jOjI5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIENvcHkgJWQgb2YgJWQiCittc2dzdHIgIiBLb3BpZSAlZCB2YW4gJWQiCisKKyM6IGV4X2NtZHMyLmM6Mjk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGVkOiAlcyIKK21zZ3N0ciAiR2VkcnVrOiAlcyIKKworIzogZXhfY21kczIuYzoyOTY2Cittc2dpZCAiUHJpbnRpbmcgYWJvcnRlZCIKK21zZ3N0ciAiRHJ1a2tlcnkgZ2VzdGFhayIKKworIzogZXhfY21kczIuYzozMzQ0Cittc2dpZCAiRTQ1NTogRXJyb3Igd3JpdGluZyB0byBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFNDU1OiBLYW4gbmllIG5hICdQb3N0U2NyaXB0JyBhZnZvZXJs6mVyIHNrcnlmIG5pZSIKKworIzogZXhfY21kczIuYzo0MDE5Cittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiBLYW4gbmllICdQb3N0U2NyaXB0JyBhZnZvZXJs6mVyIG9vcG1hYWsgbmllIgorCisjOiBleF9jbWRzMi5jOjQwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogS2FuIG5pZSBs6mVyICVzIG9vcG1hYWsgbmllIgorCisjOiBleF9jbWRzMi5jOjQwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NzogQ2FuJ3QgcmVhZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU3OiBLYW4gbmllICdQb3N0U2NyaXB0JyBodWxwYnJvbi1s6mVyIFwiJXNcIiBsZWVzIG5pZSIKKworIzogZXhfY21kczIuYzo0MjY2Cittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICJCZXNpZyBvbSB0ZSBzdHV1ciBuYSBkcnVra2VyLi4uIgorCisjOiBleF9jbWRzMi5jOjQyNzAKK21zZ2lkICJFMzY1OiBGYWlsZWQgdG8gcHJpbnQgUG9zdFNjcmlwdCBmaWxlIgorbXNnc3RyICJFMzY1OiBLb24gbmllICdQb3N0U2NyaXB0JyBs6mVyIGRydWsgbmllIgorCisjOiBleF9jbWRzMi5jOjQyNzIKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIkRydWt0YWFrIGdlc3R1dXIuIgorCisjOiBleF9jbWRzMi5jOjQ2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCAlc2xhbmd1YWdlOiBcIiVzXCIiCittc2dzdHIgIkh1aWRpZ2UgJXN0YWFsOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTk3OiBDYW5ub3Qgc2V0IGxhbmd1YWdlIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTE5NzogS2FuIG5pZSB0YWFsIG5hIFwiJXNcIiB2ZXJhbmRlciBuaWUiCisKKyM6IGV4X2RvY21kLmM6NDkxCittc2dpZCAiRW50ZXJpbmcgRXggbW9kZS4gIFR5cGUgXCJ2aXN1YWxcIiB0byBnbyB0byBOb3JtYWwgbW9kZS4iCittc2dzdHIgIkJldHJlZSBFeCBtb2R1cy4gIFRpayBcInZpc3VhbFwiIG9tIG5hIE5vcm1hbGUgbW9kdXMgdGVydWcgdGUga2Vlci4iCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjUyNworbXNnaWQgIkF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJCeSBs6mVyZWluZGUiCisKKyM6IGV4X2RvY21kLmM6NjAyCittc2dpZCAiRTE2OTogQ29tbWFuZCB0b28gcmVjdXJzaXZlIgorbXNnc3RyICJFMTY5OiBCZXZlbCB0ZSByZWt1cnNpZWYiCisKKyM6IGV4X2RvY21kLmM6OTExCittc2dpZCAiRTE3MDogTWlzc2luZyA6ZW5kd2hpbGUiCittc2dzdHIgIkUxNzA6IE9udGJyZWtlbmRlICc6ZW5kd2hpbGUnIgorCisjOiBleF9kb2NtZC5jOjkxMworbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiBPbnRicmVrZW5kZSAnOmVuZGlmJyIKKworIzogZXhfZG9jbWQuYzo5MjMKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICJFaW5kZSB2YW4gdWl0dm9lcmzqZXIiCisKKyM6IGV4X2RvY21kLmM6OTI0Cittc2dpZCAiRW5kIG9mIGZ1bmN0aW9uIgorbXNnc3RyICJFaW5kZSB2YW4gZnVua3NpZSAiCisKKyM6IGV4X2RvY21kLmM6MTM0NAorbXNnaWQgIkFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgIkR1YmJlbHNpbm5pZ2UgZ2VicnVpayB2YW4gZ2VicnVpa2VyLWdlZGVmaW5pZWVyZGUgYmV2ZWwiCisKKyM6IGV4X2RvY21kLmM6MTM1OAorbXNnaWQgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAiTmllICduIHZlcndlcmtlcmJldmVsIG5pZSIKKworIzogZXhfZG9jbWQuYzoxNDQxCittc2dpZCAiRG9uJ3QgcGFuaWMhIgorbXNnc3RyICJCbHkga2FsbSEiCisKKyM6IGV4X2RvY21kLmM6MTQ2MAorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiIKK21zZ3N0ciAiVGVydWd3YWFyZHNlIG9tdmFuZyBnZWdlZSIKKworIzogZXhfZG9jbWQuYzoxNDY5Cittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuLCBPSyB0byBzd2FwIgorbXNnc3RyICJUZXJ1Z3dhYXJkc2Ugb212YW5nIGdlZ2VlLCBPSyBvbSB0ZSBydWlsIgorCisjOiBleF9kb2NtZC5jOjE1ODAKK21zZ2lkICJVc2UgdyBvciB3Pj4iCittc2dzdHIgIkdlYnJ1aWsgdyBvZiB3Pj4iCisKKyM6IGV4X2RvY21kLmM6MzA4NgorbXNnaWQgIkUzMTk6IFNvcnJ5LCB0aGUgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTMxOTogSmFtbWVyLCBkaWUgYmV2ZWwgaXMgbmllIGdl721wbGVtZW50ZWVyIG5pZSIKKworIzogZXhfZG9jbWQuYzozMjU2Cittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6IFNsZWdzIGVlbiBs6mVybmFhbSB0b2VnZWxhYXQiCisKKyM6IGV4X2RvY21kLmM6MzgxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBtb3JlIGZpbGVzIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIk5vZyAlZCBs6mVycyBvbSB0ZSBiZXdlcmsuICBTdG9wIGluIGVsayBnZXZhbD8iCisKKyM6IGV4X2RvY21kLmM6MzgxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiBOb2cgJWxkIGzqZXJzIG9tIHRlIGJld2VyayIKKworIzogZXhfZG9jbWQuYzozOTExCittc2dpZCAiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogdXNlICEgdG8gcmVkZWZpbmUiCittc2dzdHIgIkUxNzQ6IEJldmVsIGJlc3RhYW4gYWxyZWVkczogZ2VicnVpayAhIG9tIHRlIGhlcmRlZmluaWVlciIKKworIzogZXhfZG9jbWQuYzo0MDE2Cittc2dpZCAiIgorIlxuIgorIiAgICBOYW1lICAgICAgICBBcmdzIFJhbmdlIENvbXBsZXRlICBEZWZpbml0aW9uIgorbXNnc3RyICIiCisiXG4iCisiICAgIE5hYW0gICAgICAgIEFyZ3MgUmVla3MgS2xhYXIgICAgIERlZmluaXNpZSIKKworIzogZXhfZG9jbWQuYzo0MTA1Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICJHZWVuIGdlYnJ1aWtlci1nZWRlZmluaWVlcmRlIGJldmVsZSBnZXZpbmQgbmllIgorCisjOiBleF9kb2NtZC5jOjQxMzYKK21zZ2lkICJFMTc1OiBObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIgorbXNnc3RyICJFMTc1OiBHZWVuIGVpZW5za2FwcGUgZ2VzcGVzaWZpc2VlciBuaWUiCisKKyM6IGV4X2RvY21kLmM6NDE4OAorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3NjogT25nZWxkaWdlIGFhbnRhbCBwYXJhbWV0ZXJzIgorCisjOiBleF9kb2NtZC5jOjQyMDMKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiBUZWxsaW5nIGthbiBuaWUgdHdlZSBrZWVyIGdlc3Blc2lmaXNlZXIgd29yZCBuaWUiCisKKyM6IGV4X2RvY21kLmM6NDIxMworbXNnaWQgIkUxNzg6IEludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgY291bnQiCittc2dzdHIgIkUxNzg6IE9uZ2VsZGlnZSB2ZXJzdGVrd2FhcmRlIHZpciB0ZWxsaW5nIgorCisjOiBleF9kb2NtZC5jOjQyNDEKK21zZ2lkICJFMTc5OiBhcmd1bWVudCByZXF1aXJlZCBmb3IgY29tcGxldGUiCittc2dzdHIgIkUxNzk6IHBhcmFtZXRlciBub2RpZyB2aXIgdm9sdG9vaWluZyIKKworIzogZXhfZG9jbWQuYzo0MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiBPbmdlbGRpZ2Ugdm9sdG9vaWluZ3N3YWFyZGU6ICVzIgorCisjOiBleF9kb2NtZC5jOjQyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MTogSW52YWxpZCBhdHRyaWJ1dGU6ICVzIgorbXNnc3RyICJFMTgxOiBPbmdlbGRpZ2UgZWllbnNrYXA6ICVzIgorCisjOiBleF9kb2NtZC5jOjQzMDkKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4MjogT25nZWxkaWdlIGJldmVsbmFhbSIKKworIzogZXhfZG9jbWQuYzo0MzI0Cittc2dpZCAiRTE4MzogVXNlciBkZWZpbmVkIGNvbW1hbmRzIG11c3Qgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIgorbXNnc3RyICJFMTgzOiBHZWJydWlrZXItZ2VkZWZpbmllZXJkZSBiZXZlbGUgbW9ldCBtZXQgJ24gaG9vZmxldHRlciBiZWdpbiIKKworIzogZXhfZG9jbWQuYzo0MzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODQ6IE5vIHN1Y2ggdXNlci1kZWZpbmVkIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTg0OiBHZWVuIGdlYnJ1aWtlci1nZWRlZmluaWVlcmRlIGJldmVsIG5pZTogJXMiCisKKyM6IGV4X2RvY21kLmM6NDg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg1OiBDYW5ub3QgZmluZCBjb2xvciBzY2hlbWUgJXMiCittc2dzdHIgIkUxODU6IEthbiBuaWUga2xldXJza2VtYSAlcyB2aW5kIG5pZSIKKworIzogZXhfZG9jbWQuYzo0ODUyCittc2dpZCAiR3JlZXRpbmdzLCBWaW0gdXNlciEiCittc2dzdHIgIkdvZWllZGFnLCBWaW0gZ2VicnVpa2VyISIKKworIzogZXhfZG9jbWQuYzo1NTQ5Cittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgIkJld2VyayBs6mVyIGluIG51d2UgdmVuc3RlciIKKworIzogZXhfZG9jbWQuYzo1ODE1Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICJHZWVuIHJ1aWxs6mVyIgorCisjOiBleF9kb2NtZC5jOjU5MTkKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAiTGFzIGFhbiBieSBs6mVyIgorCisjOiBleF9kb2NtZC5jOjU5NzgKK21zZ2lkICJFMTg2OiBObyBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkUxODY6IEdlZW4gdm9yaWdlIGdpZHMgbmllIgorCisjOiBleF9kb2NtZC5jOjYwNTUKK21zZ2lkICJFMTg3OiBVbmtub3duIgorbXNnc3RyICJFMTg3OiBPbmJla2VuZCIKKworIzogZXhfZG9jbWQuYzo2MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIldpbmRvdyBwb3NpdGlvbjogWCAlZCwgWSAlZCIKK21zZ3N0ciAiVmVuc3RlcnBvc2lzaWU6IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NjE3OAorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisiRTE4ODogVmVya3J5Z2luZyB2YW4gdmVuc3RlcnBvc2lzaWUgaXMgbmllIHZpciBoaWVyZGllIHBsYXRmb3JtICIKKyJnZe9tcGxlbWVudGVlciBuaWUiCisKKyM6IGV4X2RvY21kLmM6NjQ0NAorbXNnaWQgIlNhdmUgUmVkaXJlY3Rpb24iCittc2dzdHIgIlN0b29yIEhlcnZlcnN0dXJpbmciCisKKyM6IGV4X2RvY21kLmM6NjU5MworbXNnaWQgIlNhdmUgVmlldyIKK21zZ3N0ciAiU3Rvb3IgT29yc2lnIgorCisjOiBleF9kb2NtZC5jOjY1OTQKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIlN0b29yIFNlc3NpZSIKKworIzogZXhfZG9jbWQuYzo2NTk2Cittc2dpZCAiU2F2ZSBTZXR1cCIKK21zZ3N0ciAiU3Rvb3Iga29uZmlndXJhc2llIgorCisjOiBleF9kb2NtZC5jOjY3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4OTogXCIlc1wiIGV4aXN0cyAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTg5OiBcIiVzXCIgYmVzdGFhbiAoZ2VicnVpayAhIG9tIHRlIGR3aW5nKSIKKworIzogZXhfZG9jbWQuYzo2NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTA6IENhbm5vdCBvcGVuIFwiJXNcIiBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE5MDogS2FuIFwiJXNcIiBuaWUgb29wbWFhayB2aXIgc2tyeWYgbmllIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo2Nzc0Cittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICIiCisiRTE5MTogUGFyYW1ldGVyIG1vZXQgJ24gbGV0dGVyIG9mICduIHRlcnVnL3ZvcmVudG9lIGFhbmhhbGluZ3N0ZWtlbiB3ZWVzIgorCisjOiBleF9kb2NtZC5jOjY4MDMKK21zZ2lkICJFMTkyOiBSZWN1cnNpdmUgdXNlIG9mIDpub3JtYWwgdG9vIGRlZXAiCittc2dzdHIgIkUxOTI6IFJla3Vyc2lld2UgZ2VicnVpayB2YW4gJzpub3JtYWwnIHRlIGRpZXAiCisKKyM6IGV4X2RvY21kLmM6NzE3MQorbXNnaWQgIjppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJnZW5lc3RlICc6aWYnIHRlIGRpZXAiCisKKyM6IGV4X2RvY21kLmM6NzIwNgorbXNnaWQgIjplbmRpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiJzplbmRpZicgc29uZGVyICc6aWYnIgorCisjOiBleF9kb2NtZC5jOjcyMjYKK21zZ2lkICI6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiJzplbHNlJyBzb25kZXIgJzppZiciCisKKyM6IGV4X2RvY21kLmM6NzIyOAorbXNnaWQgIjplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIic6ZWxzZWlmJyBzb25kZXIgJzppZiciCisKKyM6IGV4X2RvY21kLmM6NzI4MAorbXNnaWQgIjp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICInOndoaWxlJyB0ZSBkaWVwIGdlbmVzIgorCisjOiBleF9kb2NtZC5jOjczMjYKK21zZ2lkICI6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIic6Y29udGludWUnIHNvbmRlciAnOndoaWxlJyIKKworIzogZXhfZG9jbWQuYzo3MzUzCittc2dpZCAiOmJyZWFrIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICInOmJyZWFrJyBzb25kZXIgJzp3aGlsZSciCisKKyM6IGV4X2RvY21kLmM6NzM3NiBleF9kb2NtZC5jOjczODEKK21zZ2lkICI6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIic6ZW5kd2hpbGUnIHNvbmRlciAnOndoaWxlJyIKKworIzogZXhfZG9jbWQuYzo3NDAyCittc2dpZCAiRTE5MzogOmVuZGZ1bmN0aW9uIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTE5MzogJzplbmRmdW5jdGlvbicgbmllIGluICduIGZ1bmtzaWUgbmllIgorCisjOiBleF9kb2NtZC5jOjc1ODIKK21zZ2lkICJFMTk0OiBObyBhbHRlcm5hdGUgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yICcjJyIKK21zZ3N0ciAiRTE5NDogR2VlbiBhbHRlcm5hdGlld2UgbOplcm5hYW0gdmlyICcjJyBuaWUiCisKKyM6IGV4X2RvY21kLmM6NzYxMworbXNnaWQgIm5vIGF1dG9jb21tYW5kIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhZmlsZT5cIiIKK21zZ3N0ciAiZ2VlbiBvdXRvYmV2ZWwtbOplcm5hYW0gb20gXCI8YWZpbGU+XCIgbWVlIHRlIHZlcnZhbmcgbmllIgorCisjOiBleF9kb2NtZC5jOjc2MjEKK21zZ2lkICJubyBhdXRvY29tbWFuZCBidWZmZXIgbnVtYmVyIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFidWY+XCIiCittc2dzdHIgImdlZW4gb3V0b2JldmVsIGJ1ZmZlcm5vbW1lciBvbSBcIjxhYnVmPlwiIG1lZSB0ZSB2ZXJ2YW5nIG5pZSIKKworIzogZXhfZG9jbWQuYzo3NjMyCittc2dpZCAibm8gYXV0b2NvbW1hbmQgbWF0Y2ggbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhbWF0Y2g+XCIiCittc2dzdHIgImdlZW4gb3V0b2JldmVsIHRyZWZmZXJuYWFtIG9tIFwiPGFtYXRjaD5cIiBtZWUgdGUgdmVydmFuZyBuaWUiCisKKyM6IGV4X2RvY21kLmM6NzY0MgorbXNnaWQgIm5vIDpzb3VyY2UgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPHNmaWxlPlwiIgorbXNnc3RyICJnZWVuICc6c291cmNlJyBs6mVybmFhbSBvbSBcIjxzZmlsZT5cIiBtZWUgdGUgdmVydmFuZyBuaWUiCisKKyM6IGV4X2RvY21kLmM6NzY4MworIywgbm8tYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBmaWxlIG5hbWUgZm9yICclJyBvciAnIycsIG9ubHkgd29ya3Mgd2l0aCBcIjpwOmhcIiIKK21zZ3N0ciAiTGXrIGzqZXJuYWFtIHZpciAnJScgb2YgJyMnLCB3ZXJrIHNsZWdzIG1ldCBcIjpwOmhcIiIKKworIzogZXhfZG9jbWQuYzo3Njg1Cittc2dpZCAiRXZhbHVhdGVzIHRvIGFuIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiRXZhbHVlZXIgbmEgJ24gbGXrIHN0cmluZyIKKworIzogZXhfZG9jbWQuYzo4NTk0Cittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiBLYW4gJ3ZpbWluZm8nIGzqZXIgbmllIG9vcG1hYWsgb20gdGUgbGVlcyBuaWUiCisKKyM6IGV4X2RvY21kLmM6ODc2NworbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5NjogR2VlbiBkaWdyYXdlIGluIGhpZXJkaWUgd2Vlcmdhd2UgbmllIgorCisjOiBleF9nZXRsbi5jOjI3ODUKK21zZ2lkICJ0YWduYW1lIgorbXNnc3RyICJldGlrZXRuYWFtIgorCisjOiBleF9nZXRsbi5jOjI3ODgKK21zZ2lkICIga2luZCBmaWxlXG4iCittc2dzdHIgIiB0aXBlIGzqZXJcbiIKKworIzogZXhfZ2V0bG4uYzozOTk3Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICInaGlzdG9yeScgb3BzaWUgaXMgbnVsIgorCisjOiBleF9nZXRsbi5jOjQyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgJXMgSGlzdG9yeSAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjICVzIEdlc2tpZWRlbmlzICh2YW4gbnV1dHN0ZSBuYSBvdWRzdGUpOlxuIgorCisjOiBleF9nZXRsbi5jOjQyMzgKK21zZ2lkICJDb21tYW5kIExpbmUiCittc2dzdHIgIkJldmVscmXrbCIKKworIzogZXhfZ2V0bG4uYzo0MjM5Cittc2dpZCAiU2VhcmNoIFN0cmluZyIKK21zZ3N0ciAiU29la3N0cmluZyIKKworIzogZXhfZ2V0bG4uYzo0MjQwCittc2dpZCAiRXhwcmVzc2lvbiIKK21zZ3N0ciAiVWl0ZHJ1a2tpbmciCisKKyM6IGV4X2dldGxuLmM6NDI0MQorbXNnaWQgIklucHV0IExpbmUiCittc2dzdHIgIkludm9lciBMeW4iCisKKyM6IGV4X2dldGxuLmM6NDI3MQorbXNnaWQgIkUxOTg6IGNtZF9wY2hhciBiZXlvbmQgdGhlIGNvbW1hbmQgbGVuZ3RoIgorbXNnc3RyICJFMTk4OiAnY21kX3BjaGFyJyB2ZXJieSBkaWUgZWluZGUgdmFuIG9wZHJhZ2xlbmd0ZSIKKworIzogZXhfZ2V0bG4uYzo0NDM1Cittc2dpZCAiRTE5OTogQWN0aXZlIHdpbmRvdyBvciBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiRTE5OTogQWt0aWV3ZSB2ZW5zdGVyIG9mIGJ1ZmZlciBnZXNrcmFwIgorCisjOiBmaWxlaW8uYzozNDcKK21zZ2lkICJJbGxlZ2FsIGZpbGUgbmFtZSIKK21zZ3N0ciAiT25nZWxkaWdlIGzqZXJuYWFtIgorCisjOiBmaWxlaW8uYzozNzEgZmlsZWlvLmM6NDk1IGZpbGVpby5jOjI0OTEgZmlsZWlvLmM6MjUyOQorbXNnaWQgImlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJpcyAnbiBnaWRzIgorCisjOiBmaWxlaW8uYzozNzMKK21zZ2lkICJpcyBub3QgYSBmaWxlIgorbXNnc3RyICJpcyBuaWUgJ24gbOplciBuaWUiCisKKyM6IGZpbGVpby5jOjUxNSBmaWxlaW8uYzozNTgxCittc2dpZCAiW05ldyBGaWxlXSIKK21zZ3N0ciAiW051d2UgbOplcl0iCisKKyM6IGZpbGVpby5jOjUzMgorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIltUb2VzdGVtbWluZyBHZXdlaWVyXSIKKworIzogZmlsZWlvLmM6NjI0Cittc2dpZCAiRTIwMDogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG1hZGUgdGhlIGZpbGUgdW5yZWFkYWJsZSIKK21zZ3N0ciAiRTIwMDogJypSZWFkUHJlJyBvdXRvYmV2ZWxlIGhldCBkaWUgbOplciBvbmxlZXNiYWFyIGdlbWFhayIKKworIzogZmlsZWlvLmM6NjI2Cittc2dpZCAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTIwMTogJypSZWFkUHJlJyBvdXRvYmV2ZWxlIG1hZyBuaWUgZGllIGh1aWRpZ2UgYnVmZmVyIHZlcmFuZGVyIG5pZSIKKworIzogZmlsZWlvLmM6NjQ2Cittc2dpZCAiVmltOiBSZWFkaW5nIGZyb20gc3RkaW4uLi5cbiIKK21zZ3N0ciAiVmltOiBMZWVzIG5vdSB2YW5hZiAnc3RkaW4nLi4uXG4iCisKKyM6IGZpbGVpby5jOjY1MgorbXNnaWQgIlJlYWRpbmcgZnJvbSBzdGRpbi4uLiIKK21zZ3N0ciAiTGVlcyBub3UgdmFuYWYgc3RkaW4uLi4gIgorCisjLiBSZS1vcGVuaW5nIHRoZSBvcmlnaW5hbCBmaWxlIGZhaWxlZCEKKyM6IGZpbGVpby5jOjg3NgorbXNnaWQgIkUyMDI6IENvbnZlcnNpb24gbWFkZSBmaWxlIHVucmVhZGFibGUhIgorbXNnc3RyICJFMjAyOiBPbXNldHRpbmcgaGV0IGzqZXIgb25sZWVzYmFhciBnZW1hYWshIgorCisjOiBmaWxlaW8uYzoxNzMyCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2ZpZm8vc29ja2V0XSIKKworIzogZmlsZWlvLmM6MTczOQorbXNnaWQgIltmaWZvXSIKK21zZ3N0ciAiW2ZpZm9dIgorCisjOiBmaWxlaW8uYzoxNzQ2Cittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIltzb2NrZXRdIgorCisjOiBmaWxlaW8uYzoxNzU0Cittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW1JPXSIKKworIzogZmlsZWlvLmM6MTc2NAorbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW0NSIG9udGJyZWVrXSIKKworIzogZmlsZWlvLmM6MTc2OQorbXNnaWQgIltOTCBmb3VuZF0iCittc2dzdHIgIltOTCBnZXZpbmRdIgorCisjOiBmaWxlaW8uYzoxNzc0Cittc2dpZCAiW2xvbmcgbGluZXMgc3BsaXRdIgorbXNnc3RyICJbbGFuZyByZetscyB2ZXJkZWVsXSIKKworIzogZmlsZWlvLmM6MTc4MCBmaWxlaW8uYzozNTY1Cittc2dpZCAiW05PVCBjb252ZXJ0ZWRdIgorbXNnc3RyICJbTklFIG9tZ2VzaXQgbmllXSIKKworIzogZmlsZWlvLmM6MTc4NSBmaWxlaW8uYzozNTcwCittc2dpZCAiW2NvbnZlcnRlZF0iCittc2dzdHIgIltvbWdlc2l0XSIKKworIzogZmlsZWlvLmM6MTc5MiBmaWxlaW8uYzozNTk1Cittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJbZ2Vrb2RlZXJdIgorCisjOiBmaWxlaW8uYzoxNzk5Cittc2dpZCAiW0NPTlZFUlNJT04gRVJST1JdIgorbXNnc3RyICJbT01TRVRUSU5HU0ZPVVRdIgorCisjOiBmaWxlaW8uYzoxODA2Cittc2dpZCAiW1JFQUQgRVJST1JTXSIKK21zZ3N0ciAiW0xFRVNGT1VURV0iCisKKyM6IGZpbGVpby5jOjIwMTMKK21zZ2lkICJDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3IgY29udmVyc2lvbiIKK21zZ3N0ciAiS2FuIG5pZSB0eWRlbGlrZSBs6mVyIHZpciBvbXNldHRpbmcgdmluZCBuaWUiCisKKyM6IGZpbGVpby5jOjIwMjAKK21zZ2lkICJDb252ZXJzaW9uIHdpdGggJ2NoYXJjb252ZXJ0JyBmYWlsZWQiCittc2dzdHIgIk9tc2V0dGluZyBtZXQgJ2NoYXJjb252ZXJ0JyBoZXQgZ2VmYWFsIgorCisjOiBmaWxlaW8uYzoyMDIzCittc2dpZCAiY2FuJ3QgcmVhZCBvdXRwdXQgb2YgJ2NoYXJjb252ZXJ0JyIKK21zZ3N0ciAia2FuIGFmdm9lciB2YW4gJ2NoYXJjb252ZXJ0JyBuaWUgbGVlcyBuaWUiCisKKyM6IGZpbGVpby5jOjI0MDcKK21zZ2lkICJFMjAzOiBBdXRvY29tbWFuZHMgZGVsZXRlZCBvciB1bmxvYWRlZCBidWZmZXIgdG8gYmUgd3JpdHRlbiIKK21zZ3N0ciAiRTIwMzogT3V0b2JldmVsZSBoZXQgZGllIHNrcnlmYnVmZmVyIGdlc2tyYXAgb2YgdWl0Z2VsYWFpIgorCisjOiBmaWxlaW8uYzoyNDMwCittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IE91dG9iZXZlbCBoZXQgZXRsaWtlIHJl62xzIG9wIG9udmVyd2Fnc2Ugd3lzZSB2ZXJhbmRlciAiCisKKyM6IGZpbGVpby5jOjI0OTYgZmlsZWlvLmM6MjUxMworbXNnaWQgImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIgorbXNnc3RyICJpcyBuaWUgJ24gbOplciBvZiAnbiBza3J5ZmJhcmUgdG9lc3RlbCBuaWUiCisKKyM6IGZpbGVpby5jOjI1NTUKK21zZ2lkICJpcyByZWFkLW9ubHkgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiaXMgbGVlcy1hbGxlZW4gKGdlYnJ1aWsgISBvbSB0ZSBkd2luZykiCisKKyM6IGZpbGVpby5jOjI4NTEKK21zZ2lkICJDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJLYW4gbmllIG5hIHJ1Z3N0ZXVubOplciBza3J5ZiBuaWUgKGdlYnJ1aWsgISBvbSB0ZSBkd2luZykiCisKKyM6IGZpbGVpby5jOjI4NjMKK21zZ2lkICJDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiU2x1aXRmb3V0IHZpciBydWdzdGV1bmzqZXIgKGdlYnJ1aWsgISBvbSB0ZSBkd2luZykiCisKKyM6IGZpbGVpby5jOjI4NjUKK21zZ2lkICJDYW4ndCByZWFkIGZpbGUgZm9yIGJhY2t1cCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJLYW4gcnVnc3RldW5s6mVyIG5pZSBsZWVzIG5pZSAoZ2VicnVpayAhIG9tIHRlIGR3aW5nKSIKKworIzogZmlsZWlvLmM6Mjg4MQorbXNnaWQgIkNhbm5vdCBjcmVhdGUgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiS2FuIHJ1Z3N0ZXVubOplciBuaWUgc2tlcCBuaWUgKGdlYnJ1aWsgISBvbSB0ZSBkd2luZykiCisKKyM6IGZpbGVpby5jOjI5NzAKK21zZ2lkICJDYW4ndCBtYWtlIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkthbiBydWdzdGV1bmzqZXIgbmllIHNrZXAgbmllIChnZWJydWlrICEgb20gdGUgZHdpbmcpIgorCisjOiBmaWxlaW8uYzozMDMyCittc2dpZCAiVGhlIHJlc291cmNlIGZvcmsgd2lsbCBiZSBsb3N0ICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkRpZSBodWxwYnJvbnZ1cmsgc2FsIHZlcmxvcmUgZ2FhbiAoZ2VicnVpayAhIG9tIHRlIGR3aW5nKSIKKworIzogZmlsZWlvLmM6MzEyMQorbXNnaWQgIkUyMTQ6IENhbid0IGZpbmQgdGVtcCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjE0OiBLYW4gbmllIHR5ZGVsaWtlIGzqZXIgdmluZCB2aXIgc2tyeWYgbmllIgorCisjOiBmaWxlaW8uYzozMTM5Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKHVzZSAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIkUyMTM6IEthbiBuaWUgb21zaXQgbmllIChnZWJydWlrICEgb20gdGUgc2tyeWYgc29uZGVyIG9tc2V0dGluZykiCisKKyM6IGZpbGVpby5jOjMxNzYKK21zZ2lkICJFMTY2OiBDYW4ndCBvcGVuIGxpbmtlZCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTY2OiBLYW4gbOplciBuaWUgb29wbWFhayB2aXIgc2tyeWYgbmllIgorCisjOiBmaWxlaW8uYzozMTgwCittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiBLYW4gbOplciBuaWUgb29wbWFhayB2aXIgc2tyeWYgbmllIgorCisjOiBmaWxlaW8uYzozNDIzCittc2dpZCAiQ2xvc2UgZmFpbGVkIgorbXNnc3RyICJTbHVpdGluZyBnZWZhYWwiCisKKyM6IGZpbGVpby5jOjM0ODEKK21zZ2lkICJ3cml0ZSBlcnJvciwgY29udmVyc2lvbiBmYWlsZWQiCittc2dzdHIgInNrcnlmZm91dCwgb21zZXR0aW5nIGdlZmFhbCIKKworIzogZmlsZWlvLmM6MzQ4NworbXNnaWQgIndyaXRlIGVycm9yIChmaWxlIHN5c3RlbSBmdWxsPykiCittc2dzdHIgInNrcnlmZm91dCAobOplcnN0ZWxzZWwgdm9sPykiCisKKyM6IGZpbGVpby5jOjM1NjAKK21zZ2lkICIgQ09OVkVSU0lPTiBFUlJPUiIKK21zZ3N0ciAiIE9NU0VUVElOR1NGT1VUIgorCisjOiBmaWxlaW8uYzozNTc2Cittc2dpZCAiW0RldmljZV0iCittc2dzdHIgIltUb2VzdGVsXSIKKworIzogZmlsZWlvLmM6MzU4MQorbXNnaWQgIltOZXddIgorbXNnc3RyICJbTnV1dF0iCisKKyM6IGZpbGVpby5jOjM2MDMKK21zZ2lkICIgW2FdIgorbXNnc3RyICIgW2FdIgorCisjOiBmaWxlaW8uYzozNjAzCittc2dpZCAiIGFwcGVuZGVkIgorbXNnc3RyICIgYnlnZXZvZWciCisKKyM6IGZpbGVpby5jOjM2MDUKK21zZ2lkICIgW3ddIgorbXNnc3RyICIgW3ddIgorCisjOiBmaWxlaW8uYzozNjA1Cittc2dpZCAiIHdyaXR0ZW4iCittc2dzdHIgIiBnZXNrcnlmIgorCisjOiBmaWxlaW8uYzozNjU1Cittc2dpZCAiRTIwNTogUGF0Y2htb2RlOiBjYW4ndCBzYXZlIG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDU6IHBhdGNobW9kZToga2FuIG9vcnNwcm9ua2xpa2UgbOplciBuaWUgc3Rvb3IgbmllIgorCisjOiBmaWxlaW8uYzozNjc3Cittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBwYXRjaG1vZGU6IGthbiBsZesgb29yc3Byb25nbOplciBuaWUgJ3RvdWNoJyBuaWUiCisKKyM6IGZpbGVpby5jOjM2OTIKK21zZ2lkICJFMjA3OiBDYW4ndCBkZWxldGUgYmFja3VwIGZpbGUiCittc2dzdHIgIkUyMDc6IEthbiBydWdzdGV1bmzqZXIgbmllIHZlcnd5ZGVyIG5pZSIKKworIzogZmlsZWlvLmM6Mzc0NAorbXNnaWQgIiIKKyJcbiIKKyJXQVJOSU5HOiBPcmlnaW5hbCBmaWxlIG1heSBiZSBsb3N0IG9yIGRhbWFnZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIldBQVJTS1VXSU5HOiBPb3JzcHJvbmtsaWtlIGzqZXIgbWFnIHZlcmxvcmUgb2YgYmVza2FkaWcgd2Vlc1xuIgorCisjOiBmaWxlaW8uYzozNzQ2Cittc2dpZCAiZG9uJ3QgcXVpdCB0aGUgZWRpdG9yIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIKK21zZ3N0ciAibW9lbmllIGRpZSB2ZXJ3ZXJrZXIgdmVybGFhdCB2b29yIGRpZSBs6mVyIHN1a3Nlc3ZvbCBnZXNrcnlmIGlzIG5pZSEiCisKKyM6IGZpbGVpby5jOjM4MjYKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW2Rvc10iCisKKyM6IGZpbGVpby5jOjM4MjYKK21zZ2lkICJbZG9zIGZvcm1hdF0iCittc2dzdHIgIltkb3MgZm9ybWFhdF0iCisKKyM6IGZpbGVpby5jOjM4MzMKK21zZ2lkICJbbWFjXSIKK21zZ3N0ciAiW21hY10iCisKKyM6IGZpbGVpby5jOjM4MzMKK21zZ2lkICJbbWFjIGZvcm1hdF0iCittc2dzdHIgIlttYWMgZm9ybWFhdF0iCisKKyM6IGZpbGVpby5jOjM4NDAKK21zZ2lkICJbdW5peF0iCittc2dzdHIgIlt1bml4XSIKKworIzogZmlsZWlvLmM6Mzg0MAorbXNnaWQgIlt1bml4IGZvcm1hdF0iCittc2dzdHIgIlt1bml4IGZvcm1hYXRdIgorCisjOiBmaWxlaW8uYzozODY3Cittc2dpZCAiMSBsaW5lLCAiCittc2dzdHIgIjEgcmXrbCwgIgorCisjOiBmaWxlaW8uYzozODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcywgIgorbXNnc3RyICIlbGQgcmXrbHMsICIKKworIzogZmlsZWlvLmM6Mzg3MgorbXNnaWQgIjEgY2hhcmFjdGVyIgorbXNnc3RyICIxIGthcmFrdGVyIgorCisjOiBmaWxlaW8uYzozODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlbGQga2FyYWt0ZXJzIgorCisjOiBmaWxlaW8uYzozODg0Cittc2dpZCAiW25vZW9sXSIKK21zZ3N0ciAiW25vZW9sXSIKKworIzogZmlsZWlvLmM6Mzg4NAorbXNnaWQgIltJbmNvbXBsZXRlIGxhc3QgbGluZV0iCittc2dzdHIgIltPbnZvbHRvb2lkZSBsYWFzdGUgcmXrbF0iCisKKyMuIGRvbid0IG92ZXJ3cml0ZSBtZXNzYWdlcyBoZXJlCisjLiBtdXN0IGdpdmUgdGhpcyBwcm9tcHQKKyMuIGRvbid0IHVzZSBlbXNnKCkgaGVyZSwgZG9uJ3Qgd2FudCB0byBmbHVzaCB0aGUgYnVmZmVycworIzogZmlsZWlvLmM6MzkwMworbXNnaWQgIldBUk5JTkc6IFRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgcmVhZGluZyBpdCEhISIKK21zZ3N0ciAiV0FBUlNLVVdJTkc6IERpZSBs6mVyIGhldCB2ZXJhbmRlciBzZWRlcnQgZGl0IGdlbGVlcyBpcyEhISIKKworIzogZmlsZWlvLmM6MzkwNQorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byB3cml0ZSB0byBpdCIKK21zZ3N0ciAiV2lsIGp5IHJlZ3RpZyBzb29udG9lIHNrcnlmPyIKKworIzogZmlsZWlvLmM6NDg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogS2FuIG5pZSBza3J5ZiBuYSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjQ4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwOTogRXJyb3IgY2xvc2luZyBcIiVzXCIiCittc2dzdHIgIkUyMDk6IEthbiBcIiVzXCIgbmllIHNsdWl0IG5pZSIKKworIzogZmlsZWlvLmM6NDg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogS2FuIFwiJXNcIiBuaWUgbGVlcyBuaWUiCisKKyM6IGZpbGVpby5jOjUwMzUKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiAnRmlsZUNoYW5nZWRTaGVsbCcgb3V0b2JldmVsIGhldCBidWZmZXIgdmVyd3lkZXIiCisKKyM6IGZpbGVpby5jOjUwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMTogV2FybmluZzogRmlsZSBcIiVzXCIgbm8gbG9uZ2VyIGF2YWlsYWJsZSIKK21zZ3N0ciAiRTIxMTogV2FhcnNrdXdpbmc6IEzqZXIgXCIlc1wiIGlzIG5pZSBtZWVyIGJlc2tpa2JhYXIgbmllIgorCisjOiBmaWxlaW8uYzo1MDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiIgorIlcxMjogV2FhcnNrdXdpbmc6IEzqZXIgXCIlc1wiIGhldCB2ZXJhbmRlciBzZWRlcnQgYmV3ZXJraW5nIGJlZ2luIGhldCBlbiBkaWUgIgorImJ1ZmZlciBpbiBWaW0gaGV0IG9vayB2ZXJhbmRlciIKKworIzogZmlsZWlvLmM6NTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzExOiBXYWFyc2t1d2luZzogTOplciBcIiVzXCIgaGV0IHZlcmFuZGVyIHNlZGVydCBiZXdlcmtpbmcgYmVnaW4gaGV0IgorCisjOiBmaWxlaW8uYzo1MDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlcxNjogV2FybmluZzogTW9kZSBvZiBmaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIiIKKyJXMTY6IFdhYXJza3V3aW5nOiBNb2R1cyB2YW4gbOplciBcIiVzXCIgaGV0IHZlcmFuZGVyIHNlZGVydCBiZXdlcmtpbmcgYmVnaW4gIgorImhldCIKKworIzogZmlsZWlvLmM6NTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTM6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTM6IFdhYXJza3V3aW5nOiBM6mVyIFwiJXNcIiBpcyBnZXNrZXAgc2VkZXJ0IGJld2Vya2luZyBiZWdpbiBoZXQiCisKKyM6IGZpbGVpby5jOjUwODgKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJXYWFyc2t1d2luZyIKKworIzogZmlsZWlvLmM6NTA4OQorbXNnaWQgIiIKKyImT0tcbiIKKyImTG9hZCBGaWxlIgorbXNnc3RyICIiCisiJk9LXG4iCisiJkxhYWkgTOplciIKKworIzogZmlsZWlvLmM6NTE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIxOiBDb3VsZCBub3QgcmVsb2FkIFwiJXNcIiIKK21zZ3N0ciAiRTMyMTogS29uIG5pZSBcIiVzXCIgaGVybGFhaSBuaWUiCisKKyM6IGZpbGVpby5jOjU2NzAKK21zZ2lkICItLURlbGV0ZWQtLSIKK21zZ3N0ciAiLS1HZXNrcmFwLS0iCisKKyMuIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0CisjOiBmaWxlaW8uYzo1ODMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjc6IE5vIHN1Y2ggZ3JvdXA6IFwiJXNcIiIKK21zZ3N0ciAiRTM2NzogR2VlbiBzb2RhbmlnZSBncm9lcCBuaWU6IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciAqOiAlcyIKK21zZ3N0ciAiRTIxNTogT25nZWxkaWdlIGthcmFrdGVyIG5hICo6ICVzIgorCisjOiBmaWxlaW8uYzo1OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiBHZWVuIHNvZGFuaWdlIGdlYmV1cnRlbmlzIG5pZTogJXMiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogZmlsZWlvLmM6NjExNQorbXNnaWQgIiIKKyJcbiIKKyItLS0gQXV0by1Db21tYW5kcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gT3V0b2JldmVsZSAtLS0iCisKKyM6IGZpbGVpby5jOjYzODYKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiRTIxNzogS2FuIG5pZSBvdXRvYmV2ZWxlIHVpdHZvZXIgdmlyICdBTEwnIGdlYmV1cnRlbmlzc2UgbmllIgorCisjOiBmaWxlaW8uYzo2NDA5Cittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICJHZWVuIHBhc3NlbmRlIG91dG9iZXZlbGUgbmllIgorCisjOiBmaWxlaW8uYzo2NjgxCittc2dpZCAiRTIxODogYXV0b2NvbW1hbmQgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTIxODogb3V0b2JldmVsZSB0ZSBkaWVwIGdlbmVzIgorCisjOiBmaWxlaW8uYzo2OTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIEF1dG8gY29tbWFuZHMgZm9yIFwiJXNcIiIKK21zZ3N0ciAiJXMgb3V0b2JldmVsZSB2aXIgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAiVm9lciAlcyB1aXQiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZmlsZWlvLmM6NzA0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdXRvY29tbWFuZCAlcyIKK21zZ3N0ciAib3V0b2JldmVsICVzIgorCisjOiBmaWxlaW8uYzo3NTY2Cittc2dpZCAiRTIxOTogTWlzc2luZyB7LiIKK21zZ3N0ciAiRTIxOTogT250YnJla2VuZGUgey4iCisKKyM6IGZpbGVpby5jOjc1NjgKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiBPbnRicmVrZW5kZSB9LiIKKworIzogZm9sZC5jOjY2Cittc2dpZCAiTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAiR2VlbiB2b3UgZ2V2aW5kIG5pZSIKKworIzogZm9sZC5jOjU1NAorbXNnaWQgIkUzNTA6IENhbm5vdCBjcmVhdGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUwOiBLYW4gbmllIHZvdSBza2VwIG1ldCBodWlkaWdlICdmb2xkbWV0aG9kJyBuaWUiCisKKyM6IGZvbGQuYzo1NTYKK21zZ2lkICJFMzUxOiBDYW5ub3QgZGVsZXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MTogS2FuIG5pZSB2b3Ugc2tyYXAgbWV0IGh1aWRpZ2UgJ2ZvbGRtZXRob2QnIG5pZSIKKworIzogZm9sZC5jOjE3MDAKK21zZ2lkICJFMjIxOiAnY29tbWVudHN0cmluZycgaXMgZW1wdHkiCittc2dzdHIgIkUyMjE6ICdjb21tZW50c3RyaW5nJyBvcHNpZSBpcyBsZWVnIgorCisjOiBnZXRjaGFyLmM6MjY4Cittc2dpZCAiRTIyMjogQWRkIHRvIHJlYWQgYnVmZmVyIgorbXNnc3RyICJFMjIyOiBWb2VnIGJ5IGxlZXNidWZmZXIiCisKKyM6IGdldGNoYXIuYzoyMTE0Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6IHJla3Vyc2lld2UgYmluZGluZyIKKworIzogZ2V0Y2hhci5jOjI5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNDogZ2xvYmFsIGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjQ6IGdsb2JhbGUgYWZrb3J0aW5nIGJlc3RhYW4gYWxyZWVkcyB2aXIgJXMiCisKKyM6IGdldGNoYXIuYzoyOTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTogZ2xvYmFsZSBiaW5kaW5nIGJlc3RhYW4gYWxyZWVkcyB2aXIgJXMiCisKKyM6IGdldGNoYXIuYzozMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjY6IGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjY6IGFma29ydGluZyBiZXN0YWFuIGFscmVhZHkgdmlyICVzIgorCisjOiBnZXRjaGFyLmM6MzA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI3OiBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNzogYmluZGluZyBiZXN0YWFuIGFscmVlZHMgdmlyICVzIgorCisjOiBnZXRjaGFyLmM6MzE2MworbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAiR2VlbiBhZmtvcnRpbmcgZ2V2aW5kIG5pZSIKKworIzogZ2V0Y2hhci5jOjMxNjUKK21zZ2lkICJObyBtYXBwaW5nIGZvdW5kIgorbXNnc3RyICJHZWVuIGJpbmRpbmcgZ2V2aW5kIG5pZSIKKworIzogZ2V0Y2hhci5jOjM5OTAKK21zZ2lkICJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkUyMjg6IG1ha2VtYXA6IE9uZ2VsZGlnZSBtb2R1cyIKKworIzogZ3VpLmM6MTgxCittc2dpZCAiRTIyOTogQ2Fubm90IHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkUyMjk6IEthbiBuaWUgZGllIEdVSSBiZWdpbiBuaWUiCisKKyM6IGd1aS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogS2FuIG5pZSBsZWVzIHVpdCBcIiVzXCIgbmllIgorCisjOiBndWkuYzo0MzEKK21zZ2lkICJFMjMxOiAnZ3VpZm9udHdpZGUnIGludmFsaWQiCittc2dzdHIgIkUyMzE6ICdndWlmb250d2lkZScgb25nZWxkaWciCisKKyM6IGd1aS5jOjM5MjYKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiRm91dCIKKworIzogZ3VpLmM6MzkyNworbXNnaWQgIiZPayIKK21zZ3N0ciAiJk9rIgorCisjOiBndWlfYXRfZnMuYzoyOTAKK21zZ2lkICI8Y2Fubm90IG9wZW4+ICIKK21zZ3N0ciAiPGthbiBuaWUgb29wbWFhayBuaWU+ICIKKworIzogZ3VpX2F0X2ZzLmM6MTExNQorIywgYy1mb3JtYXQKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGZvbnQgJXMiCittc2dzdHIgIid2aW1fU2VsRmlsZSc6IGthbiBmb250ICVzIG5pZSBrcnkgbmllIgorCisjOiBndWlfYXRfZnMuYzoyNTM4Cittc2dpZCAidmltX1NlbEZpbGU6IGNhbid0IHJldHVybiB0byBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiJ3ZpbV9TZWxGaWxlJzogS2FuIG5pZSB0ZXJ1Z2tlZXIgbmEgaHVpZGlnZSBnaWRzIG5pZSIKKworIzogZ3VpX2F0X2ZzLmM6MjU1NworbXNnaWQgIlBhdGhuYW1lOiIKK21zZ3N0ciAiR2lkc25hYW06IgorCisjOiBndWlfYXRfZnMuYzoyNTYzCittc2dpZCAidmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAidmltX1NlbEZpbGU6IEthbiBuaWUgaHVpZGlnZSBnaWRzIHZlcmtyeSBuaWUiCisKKyM6IGd1aV9hdF9mcy5jOjI1NzEgZ3VpX21vdGlmLmM6MTYwNworbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIy4gJ0NhbmNlbCcgYnV0dG9uCisjOiBndWlfYXRfZnMuYzoyNTcxIGd1aV9ndGsuYzoxNjgzIGd1aV9tb3RpZi5jOjE2MDIgZ3VpX21vdGlmLmM6MjgyMworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiS2Fuc2VsbGVlciIKKworIzogZ3VpX2F0X3NiLmM6NDg2Cittc2dpZCAiU2Nyb2xsYmFyIFdpZGdldDogQ291bGQgbm90IGdldCBnZW9tZXRyeSBvZiB0aHVtYiBwaXhtYXAuIgorbXNnc3RyICJSb2xzdGFhZmVsZW1lbnQ6IEtvbiBuaWUgcGlrc2VsbWF0cmlrcy1kdWltbmFlbCBzZSBnZW9tZXRyaWUga3J5IG5pZSIKKworIzogZ3VpX2F0aGVuYS5jOjE5MjggZ3VpX21vdGlmLmM6MTg1NQorbXNnaWQgIlZpbSBkaWFsb2ciCittc2dzdHIgIlZpbSBkaWFsb29naG9ra2llIgorCisjOiBndWlfYmV2YWwuYzo2OAorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICJFMjMyOiBLYW4gbmllIEJhbGxvb25FdmFsIHNrZXAgbWV0IGJlaWRlIGJvb2Rza2FwIGVuIHRlcnVncm9lcCBuaWUiCisKKyM6IGd1aV9ndGsuYzoxMTQ0Cittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiVmltIGRpYWxvb2dob2traWUuLi4iCisKKyM6IGd1aV9ndGsuYzoxNTE5IGd1aV9tb3RpZi5jOjI3NDIKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIlZJTSAtIFNvZWsgZW4gVmVydmFuZy4uLiIKKworIzogZ3VpX2d0ay5jOjE1MjQgZ3VpX21vdGlmLmM6Mjc0NAorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiVklNIC0gU29lay4uLiIKKworIzogZ3VpX2d0ay5jOjE1NDcgZ3VpX21vdGlmLmM6Mjg2MgorbXNnaWQgIkZpbmQgd2hhdDoiCittc2dzdHIgIlNvZWsgbmE6IgorCisjOiBndWlfZ3RrLmM6MTU2NSBndWlfbW90aWYuYzoyODk0Cittc2dpZCAiUmVwbGFjZSB3aXRoOiIKK21zZ3N0ciAiVmVydmFuZyBtZXQ6IgorCisjLiBleGFjdCBtYXRjaCBvbmx5IGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE1OTcgZ3VpX21vdGlmLmM6Mjk5NgorbXNnaWQgIk1hdGNoIGV4YWN0IHdvcmQgb25seSIKK21zZ3N0ciAiVHJlZiBzbGVncyBwcmVzaWVzZSB3b29yZCIKKworIzogZ3VpX2d0ay5jOjE2MDkgZ3VpX21vdGlmLmM6Mjk2NAorbXNnaWQgIkRpcmVjdGlvbiIKK21zZ3N0ciAiUmlndGluZyIKKworIy4gJ1VwJyBhbmQgJ0Rvd24nIGJ1dHRvbnMKKyM6IGd1aV9ndGsuYzoxNjIxIGd1aV9tb3RpZi5jOjI5NzYKK21zZ2lkICJVcCIKK21zZ3N0ciAiT3AiCisKKyM6IGd1aV9ndGsuYzoxNjI1IGd1aV9tb3RpZi5jOjI5ODQKK21zZ2lkICJEb3duIgorbXNnc3RyICJBZiIKKworIy4gJ0ZpbmQgTmV4dCcgYnV0dG9uCisjOiBndWlfZ3RrLmM6MTY0NyBndWlfbW90aWYuYzoyNzY2Cittc2dpZCAiRmluZCBOZXh0IgorbXNnc3RyICJWaW5kIHZvbGdlbmRlIgorCisjLiAnUmVwbGFjZScgYnV0dG9uCisjOiBndWlfZ3RrLmM6MTY2NCBndWlfbW90aWYuYzoyNzgzCittc2dpZCAiUmVwbGFjZSIKK21zZ3N0ciAiVmVydmFuZyIKKworIy4gJ1JlcGxhY2UgQWxsJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNjczIGd1aV9tb3RpZi5jOjI3OTYKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAiVmVydmFuZyBhbGxlcyIKKworIzogZ3VpX2d0a194MTEuYzoxMDc2IGd1aV94MTEuYzoxMTk5Cittc2dpZCAiRTIzMzogY2Fubm90IG9wZW4gZGlzcGxheSIKK21zZ3N0ciAiRTIzMzoga2FuIG5pZSB2ZXJ0b29uc2tlcm0gb29wbWFhayBuaWUiCisKKyM6IGd1aV9ndGtfeDExLmM6MjQzMyBndWlfeDExLmM6MjAwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM0OiBVbmtub3duIGZvbnRzZXQ6ICVzIgorbXNnc3RyICJFMjM0OiBPbmJla2VuZGUgZm9udHN0ZWw6ICVzIgorCisjOiBndWlfZ3RrX3gxMS5jOjI0NjAKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAiRm9udGtldXNlIgorCisjOiBndWlfZ3RrX3gxMS5jOjI3MDIgZ3VpX21hYy5jOjI3ODAgZ3VpX3c0OC5jOjExOTcgZ3VpX3gxMS5jOjE4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogVW5rbm93biBmb250OiAlcyIKK21zZ3N0ciAiRTIzNTogT25iZWtlbmRlIGZvbnQ6ICVzIgorCisjOiBndWlfZ3RrX3gxMS5jOjI3MTMgZ3VpX3gxMS5jOjE4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNjogRm9udCBcIiVzXCIgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJFMjM2OiBGb250IFwiJXNcIiBpcyBuaWUgJ24gdmFzdGUtd3lkdGUgZm9udCBuaWUiCisKKyM6IGd1aV9ndGtfeDExLmM6Mjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQyOiBDb2xvciBuYW1lIG5vdCByZWNvZ25pemVkOiAlcyIKK21zZ3N0ciAiRTI0MjogS2xldXJuYWFtIGlzIG9uYmVrZW5kOiAlcyIKKworIzogZ3VpX2d0a194MTEuYzozNTE5IHVpLmM6MTkyOQorbXNnaWQgIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iCittc2dzdHIgIidDVVRfQlVGRkVSMCcgaXMgZ2VicnVpayBpbiBwbGFhcyB2YW4gbGXrIHNlbGVrc2llIgorCisjOiBndWlfbW90aWYuYzoxNjAxIGd1aV9tb3RpZi5jOjE2MDQKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRlciIKKworIzogZ3VpX21vdGlmLmM6MTYwMworbXNnaWQgIkRpcmVjdG9yaWVzIgorbXNnc3RyICJHaWRzZSIKKworIzogZ3VpX21vdGlmLmM6MTYwNQorbXNnaWQgIkhlbHAiCittc2dzdHIgIkh1bHAiCisKKyM6IGd1aV9tb3RpZi5jOjE2MDYKK21zZ2lkICJGaWxlcyIKK21zZ3N0ciAiTOplcnMiCisKKyM6IGd1aV9tb3RpZi5jOjE2MDgKK21zZ2lkICJTZWxlY3Rpb24iCittc2dzdHIgIlNlbGVrc2llIgorCisjOiBndWlfbW90aWYuYzoyODA5Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAiSGVycm9lcCIKKworIzogZ3VpX3Jpc2Nvcy5jOjk1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBDYW4ndCBsb2FkIFphcCBmb250ICclcyciCittc2dzdHIgIkUyMzU6IEthbiBuaWUgWmFwIGZvbnQgJyVzJyBsYWFpIG5pZSIKKworIzogZ3VpX3Jpc2Nvcy5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogQ2FuJ3QgdXNlIGZvbnQgJXMiCittc2dzdHIgIkUyMzU6IEthbiBuaWUgZm9udCAlcyBnZWJydWlrIG5pZSIKKworIzogZ3VpX3Jpc2Nvcy5jOjExNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MjogTWlzc2luZyBjb2xvcjogJXMiCittc2dzdHIgIkUyNDI6IE9udGJyZWtlbmRlIGtsZXVyOiAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNjkKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisiQmVzaWcgb20gZG9vZHNib29kc2thcCBhYW4ga2luZHByb3NlcyB0ZSBzdHV1ci5cbiIKKworIzogZ3VpX3czMi5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiRTI0MzogUGFyYW1ldGVyIG5pZSBiZWtlbmQ6IFwiLSVzXCI7IEdlYnJ1aWsgZGllIE9MRSB3ZWVyZ2F3ZS4iCisKKyM6IGd1aV93NDguYzoyMDY4Cittc2dpZCAiRmluZCBzdHJpbmcgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAiVmluZCBzdHJpbmcgKGdlYnJ1aWsgJ1xcXFwnIG9tICduICdcXCcgdGUgdmluZCIKKworIzogZ3VpX3c0OC5jOjIwOTMKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJWaW5kICYgdmVydmFuZyBzdHJpbmcgKGdlYnJ1aWsgJ1xcXFwnIG9tICduICdcXCcgdGUgdmluZCIKKworIzogZ3VpX3gxMS5jOjE0MTkKK21zZ2lkICJWaW0gRTQ1ODogQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0IgorbXNnc3RyICIiCisiVmltIEU0NTg6IEthbiBuaWUga2xldXJrYWFydC1pbnNrcnl3aW5nIHRvZWtlbiBuaWUsIHNvbW1pZ2Uga2xldXJlIG1hZyAiCisidmVya2VlcmQgd2VlcyIKKworIzogZ3VpX3gxMS5jOjE5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MDogRm9udHMgZm9yIHRoZSBmb2xsb3dpbmcgY2hhcnNldHMgYXJlIG1pc3NpbmcgaW4gZm9udHNldCAlczoiCittc2dzdHIgIiIKKyJFMjUwOiBGb250ZSB2aXIgZGllIHZvbGdlbmRlIGthcmFrdGVyc3RlbGxlIG9udGJyZWVrIGluIGZvbnR2ZXJzYW1lbGluZyAlczoiCisKKyM6IGd1aV94MTEuYzoyMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTI6IEZvbnRzZXQgbmFtZTogJXMiCittc2dzdHIgIkUyNTI6IEZvbnRzdGVsIG5hYW06ICVzIgorCisjOiBndWlfeDExLmM6MjAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJGb250ICclcycgaXMgbmllICduIHZhc3RlLXd5ZHRlIGZvbnQgbmllIgorCisjOiBndWlfeDExLmM6MjA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTM6IEZvbnN0ZWwgbmFhbTogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDA6ICVzXG4iCittc2dzdHIgIkZvbnQwOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1NworIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAiRm9udDE6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQlZCB3aWR0aCBpcyBub3QgdHdpY2UgdGhhdCBvZiBmb250MFxuIgorbXNnc3RyICJGb250JWQgd3lkdGUgaXMgbmllIHR3ZWUga2VlciBk7WUgdmFuIGZvbnQwIG5pZVxuIgorCisjOiBndWlfeDExLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MCB3aWR0aDogJWxkXG4iCittc2dzdHIgIkZvbnQwIHd5ZHRlOiAlbGRcbiIKKworIzogZ3VpX3gxMS5jOjIwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvbnQxIHdpZHRoOiAlbGRcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZvbnQxIHd5ZHRlOiAlbGRcbiIKKyJcbiIKKworIzogZ3VpX3gxMS5jOjIyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiBLYW4gbmllIGtsZXVyICVzIHRvZWtlbiBuaWUiCisKKyM6IGd1aV94MTEuYzozMjU2Cittc2dpZCAiRTI1NTogQ291bGRuJ3QgcmVhZCBpbiBzaWduIGRhdGEhIgorbXNnc3RyICJFMjU1OiBGb3V0IC0tIGtvbiBuaWUgdGVrZW5kYXRhIGxlZXMgbmllISIKKworIzogaGFuZ3VsaW4uYzo2MTAKK21zZ2lkICJFMjU2OiBIYW5ndWwgYXV0b21hdGEgRVJST1IiCittc2dzdHIgIkUyNTY6IEhhbmd1bCBvdXRvbWF0aXNlcmluZ3MgRk9VVCIKKworIzogaWZfY3Njb3BlLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNzW2NvcGVdICVzIgorbXNnc3RyICJHZWJydWlrOiBjc1tjb3BlXSAlcyIKKworIzogaWZfY3Njb3BlLmM6NjcKK21zZ2lkICJBZGQgYSBuZXcgZGF0YWJhc2UiCittc2dzdHIgIlZvZWcgJ24gbnV3ZSBkYXRhYmFzaXMgYnkiCisKKyM6IGlmX2NzY29wZS5jOjY5Cittc2dpZCAiUXVlcnkgZm9yIGEgcGF0dGVybiIKK21zZ3N0ciAiU29layB2aXIgJ24gcGF0cm9vbiIKKworIzogaWZfY3Njb3BlLmM6NzEKK21zZ2lkICJTaG93IHRoaXMgbWVzc2FnZSIKK21zZ3N0ciAiV3lzIGhpZXJkaWUgYm9vZHNrYXAiCisKKyM6IGlmX2NzY29wZS5jOjczCittc2dpZCAiS2lsbCBhIGNvbm5lY3Rpb24iCittc2dzdHIgIlNsdWl0ICduIHZlcmJpbmRpbmciCisKKyM6IGlmX2NzY29wZS5jOjc1Cittc2dpZCAiUmVpbml0IGFsbCBjb25uZWN0aW9ucyIKK21zZ3N0ciAiSGVyc3RlbCBhbGxlIHZlcmJpbmRpbmdzIgorCisjOiBpZl9jc2NvcGUuYzo3NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIld5cyB2ZXJiaW5kaW5ncyIKKworIzogaWZfY3Njb3BlLmM6MTA4Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICIiCisiSGllcmRpZSAnY3Njb3BlJyBiZXZlbCBvbmRlcnN0ZXVuIG5pZSBkaWUgc3BsaXRzaW5nIHZhbiBkaWUgdmVuc3RlciBuaWUuXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0MworbXNnaWQgIlVzYWdlOiBjc3RhZyA8aWRlbnQ+IgorbXNnc3RyICJHZWJydWlrOiAnY3N0YWcgPGlkZW50PiciCisKKyM6IGlmX2NzY29wZS5jOjE5OQorbXNnaWQgIkUyNTc6IGNzdGFnOiB0YWcgbm90IGZvdW5kIgorbXNnc3RyICJFMjU3OiAnY3N0YWcnOiBldGlrZXQgbmllIGdldmluZCBuaWUiCisKKyM6IGlmX2NzY29wZS5jOjQwNyBpZl9jc2NvcGUuYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdCglcykgZXJyb3I6ICVkIgorbXNnc3RyICInc3RhdCglcyknIGZvdXQ6ICVkIgorCisjOiBpZl9jc2NvcGUuYzo0NjAgaWZfY3Njb3BlLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGVkIGNzY29wZSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAiJ2NzY29wZScgZGF0YWJhc2lzICVzIGJ5Z2V2b2VnIgorCisjOiBpZl9jc2NvcGUuYzo0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgZGlyZWN0b3J5IG9yIGEgdmFsaWQgY3Njb3BlIGRhdGFiYXNlIgorbXNnc3RyICIlcyBpcyBuaWUgJ24gZ2lkcyBvZiAnbiBnZWxkaWdlICdjc2NvcGUnIGRhdGFiYXNpcyBuaWUiCisKKyM6IGlmX2NzY29wZS5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVkIgorbXNnc3RyICInY3Njb3BlJyB2ZXJiaW5kaW5nICVkIGtvbiBuaWUgZ2VsZWVzIHdvcmQgbmllIgorCisjOiBpZl9jc2NvcGUuYzo2MzMKK21zZ2lkICJ1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAib25iZWtlbmRlICdjc2NvcGUnIHNvZWt0aXBlIgorCisjOiBpZl9jc2NvcGUuYzo2ODAKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiS29uIG5pZSAnY3Njb3BlJyBweXBlIHNrZXAgbmllIgorCisjOiBpZl9jc2NvcGUuYzo3NDUKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIKK21zZ3N0ciAiJ2NzX2NyZWF0ZV9jb25uZWN0aW9uJyB1aXR2b2VyaW5nIGhldCBtaXNsdWsiCisKKyM6IGlmX2NzY29wZS5jOjc1NQorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIHRvX2ZwIGZhaWxlZCIKK21zZ3N0ciAiJ2NzX2NyZWF0ZV9jb25uZWN0aW9uJzogJ2Zkb3BlbicgdmlyICd0b19mcCcgaGV0IG1pc2x1ayIKKworIzogaWZfY3Njb3BlLmM6NzU3Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgZnJfZnAgZmFpbGVkIgorbXNnc3RyICInY3NfY3JlYXRlX2Nvbm5lY3Rpb24nOiAnZmRvcGVuJyB2aXIgJ2ZyX2ZwJyBoZXQgbWlzbHVrIgorCisjOiBpZl9jc2NvcGUuYzo3ODUKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnMiCittc2dzdHIgImdlZW4gJ2NzY29wZScgdmVyYmluZGluZ3MgbmllIgorCisjOiBpZl9jc2NvcGUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiBnZWVuIHRyZWZmZXJzIGdldmluZCB2aXIgJ2NzY29wZScgdmVyc29layAlcyB2YW4gJXMgbmllIgorCisjOiBpZl9jc2NvcGUuYzo4OTkKK21zZ2lkICJjc2NvcGUgY29tbWFuZHM6XG4iCittc2dzdHIgIidjc2NvcGUnIGJldmVsZTpcbiIKKworIzogaWZfY3Njb3BlLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUtNXM6ICUtMzBzIChVc2FnZTogJXMpXG4iCittc2dzdHIgIiUtNXM6ICUtMzBzIChHZWJydWlrOiAlcylcbiIKKworIzogaWZfY3Njb3BlLmM6OTcwCittc2dpZCAiZHVwbGljYXRlIGNzY29wZSBkYXRhYmFzZSBub3QgYWRkZWQiCittc2dzdHIgImR1cGxpa2FhdCAnY3Njb3BlJyBkYXRhYmFzaXMgbmllIGJ5Z2V2b2VnIG5pZSIKKworIzogaWZfY3Njb3BlLmM6OTgxCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY3Njb3BlIGNvbm5lY3Rpb25zIHJlYWNoZWQiCittc2dzdHIgIm1ha3NpbXVtIGFhbnRhbCAnY3Njb3BlJyB2ZXJiaW5kaW5ncyBiZXJlaWsiCisKKyM6IGlmX2NzY29wZS5jOjExMDIKK21zZ2lkICJFMjYwOiBjc2NvcGUgY29ubmVjdGlvbiBub3QgZm91bmQiCittc2dzdHIgIkUyNjA6ICdjc2NvcGUnIHZlcmJpbmRpbmcgbmllIGdldmluZCBuaWUiCisKKyM6IGlmX2NzY29wZS5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiAnY3Njb3BlJyB2ZXJiaW5kaW5nICVzIG5pZSBnZXZpbmQgbmllIgorCisjOiBpZl9jc2NvcGUuYzoxMTQxCittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gY2xvc2VkIgorbXNnc3RyICInY3Njb3BlJyB2ZXJiaW5kaW5nIGdlc2x1aXQiCisKKyM6IGlmX2NzY29wZS5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gJXMgY2xvc2VkXG4iCittc2dzdHIgIidjc2NvcGUnIHZlcmJpbmRpbmcgJXMgZ2VzbHVpdFxuIgorCisjLiBzaG91bGQgbm90IHJlYWNoIGhlcmUKKyM6IGlmX2NzY29wZS5jOjEyOTAKK21zZ2lkICJmYXRhbCBlcnJvciBpbiBjc19tYW5hZ2VfbWF0Y2hlcyIKK21zZ3N0ciAiZmF0YWxlIGZvdXQgaW4gJ2NzX21hbmFnZV9tYXRjaGVzJyIKKworIzogaWZfY3Njb3BlLmM6MTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVkIgorbXNnc3RyICJFMjYyOiAnY3Njb3BlJyB2ZXJiaW5kaW5nICVkIGtvbiBuaWUgZ2VsZWVzIHdvcmQgbmllIgorCisjIG5qajogZGFsayAndmVyYmluZGluZycgaXB2ICd2ZXJiaW5kaW5nJyBvcmFscz8KKyM6IGlmX2NzY29wZS5jOjE0NDkKK21zZ2lkICJjb3VsZG4ndCBtYWxsb2NcbiIKK21zZ3N0ciAia29uIG5pZSAnbWFsbG9jJyBuaWVcbiIKKworIzogaWZfY3Njb3BlLmM6MTQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDc2NvcGUgdGFnOiAlc1xuIgorbXNnc3RyICJDc2NvcGUgZXRpa2V0OiAlc1xuIgorCisjOiBpZl9jc2NvcGUuYzoxNDU4Cittc2dpZCAiICAgIyAgIGxpbmUiCittc2dzdHIgIiAgICMgICByZetsIgorCisjOiBpZl9jc2NvcGUuYzoxNDYwCittc2dpZCAiZmlsZW5hbWUgLyBjb250ZXh0IC8gbGluZVxuIgorbXNnc3RyICJs6mVybmFhbSAvIGtvbnRla3MgLyByZetsXG4iCisKKyM6IGlmX2NzY29wZS5jOjE3MTgKK21zZ2lkICJBbGwgY3Njb3BlIGRhdGFiYXNlcyByZXNldCIKK21zZ3N0ciAiQWxsZSAnY3Njb3BlJyBkYXRhYmFzaXNzZSBoZXJzdGVsIgorCisjOiBpZl9jc2NvcGUuYzoxNzg1Cittc2dpZCAibm8gY3Njb3BlIGNvbm5lY3Rpb25zXG4iCittc2dzdHIgImdlZW4gJ2NzY29wZScgdmVyYmluZGluZ3MgbmllXG4iCisKKyM6IGlmX2NzY29wZS5jOjE3ODkKK21zZ2lkICIgIyBwaWQgICAgZGF0YWJhc2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iCittc2dzdHIgIiAjIHBpZCAgICBkYXRhYmFzaXMgbmFhbSAgICAgICAgICAgICAgICAgICAgICBnaWRzdm9vcnZvZWdzZWxcbiIKKworIzogaWZfY3Njb3BlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMmQgJS01bGQgICUtMzRzICA8bm9uZT5cbiIKK21zZ3N0ciAiJTJkICUtNWxkICAlLTM0cyAgPGdlZW4+XG4iCisKKyM6IGlmX3B5dGhvbi5jOjM3NgorbXNnaWQgIiIKKyJFMjYzOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUHl0aG9uIGxpYnJhcnkgY291bGQgbm90IGJlICIKKyJsb2FkZWQuIgorbXNnc3RyICIiCisiRTI2MzogSmFtbWVyLCBoaWVyZGllIGJldmVsIGlzIGFmZ2Vza2FrZWwsIGRpZSBQeXRob24gYmlibGlvdGVlayBs6mVyIGtvbiAiCisibmllIGdlbGFhaSB3b3JkIG5pZS4iCisKKyM6IGlmX3B5dGhvbi5jOjU3NgorbXNnaWQgImNhbid0IGRlbGV0ZSBPdXRwdXRPYmplY3QgYXR0cmlidXRlcyIKK21zZ3N0ciAia2FuIG5pZSAnT3V0cHV0T2JqZWN0JyBlaWVuc2thcHBlIHNrcmFwIG5pZSIKKworIzogaWZfcHl0aG9uLmM6NTgzCittc2dpZCAic29mdHNwYWNlIG11c3QgYmUgYW4gaW50ZWdlciIKK21zZ3N0ciAiJ3NvZnRzcGFjZScgbW9ldCAnbiBoZWVsZ2V0YWwgd2VlcyIKKworIzogaWZfcHl0aG9uLmM6NTkxCittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUiCittc2dzdHIgIm9uZ2VsZGlnZSBlaWVuc2thcCIKKworIzogaWZfcHl0aG9uLmM6NjMwIGlmX3B5dGhvbi5jOjY0NAorbXNnaWQgIndyaXRlbGluZXMoKSByZXF1aXJlcyBsaXN0IG9mIHN0cmluZ3MiCittc2dzdHIgIid3cml0ZWxpbmVzKCknIGJlbm9kaWcgJ24gbHlzIHZhbiBzdHJpbmdlIgorCisjOiBpZl9weXRob24uYzo3NzAKK21zZ2lkICJFMjY0OiBQeXRob246IEVycm9yIGluaXRpYWxpc2luZyBJL08gb2JqZWN0cyIKK21zZ3N0ciAiRTI2NDogUHl0aG9uOiBLb24gbmllIEkvTyBvYmpla3RlIGlud3kgbmllIgorCisjIG5qajogbmV0ICduIHZvb3JzdGVsIC4uCisjOiBpZl9weXRob24uYzo5NTUgaWZfdGNsLmM6MTM5MQorbXNnaWQgImludmFsaWQgZXhwcmVzc2lvbiIKK21zZ3N0ciAib25nZWxkaWdlIHVpdGRydWtraW5nIgorCisjOiBpZl9weXRob24uYzo5NjkgaWZfdGNsLmM6MTM5NgorbXNnaWQgImV4cHJlc3Npb25zIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAidWl0ZHJ1a2tpbmdzIGFmZ2Vza2FrZWwgdHlkZW5zIGtvbXBpbGVyaW5nIgorCisjOiBpZl9weXRob24uYzo5ODIKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJwb2dpbmcgb20gbmEgJ24gZ2Vza3JhcHRlIGJ1ZmZlciB0ZSB2ZXJ3eXMiCisKKyM6IGlmX3B5dGhvbi5jOjk5NyBpZl9weXRob24uYzoxMDM4IGlmX3B5dGhvbi5jOjExMDIgaWZfdGNsLmM6MTIwMworbXNnaWQgImxpbmUgbnVtYmVyIG91dCBvZiByYW5nZSIKK21zZ3N0ciAicmXrbG5vbW1lciBidWl0ZSBvbXZhbmciCisKKyM6IGlmX3B5dGhvbi5jOjEyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IgorbXNnc3RyICI8YnVmZmVydm9vcndlcnAgKGdlc2tyYXApIGJ5ICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxMzI2IGlmX3RjbC5jOjgyNQorbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICJvbmJla2VuZGUgbWVya25hYW0iCisKKyM6IGlmX3B5dGhvbi5jOjE2MDEKK21zZ2lkICJubyBzdWNoIGJ1ZmZlciIKK21zZ3N0ciAiYnVmZmVyIGJlc3RhYW4gbmllIgorCisjOiBpZl9weXRob24uYzoxNjg5Cittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIHdpbmRvdyIKK21zZ3N0ciAicG9naW5nIG9tIG5hIGdlc2tyYXB0ZSB2ZW5zdGVyIHRlIHZlcnd5cyIKKworIzogaWZfcHl0aG9uLmM6MTczNAorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAibGVlc2FsbGVlbiBlaWVuc2thcCIKKworIzogaWZfcHl0aG9uLmM6MTc0NworbXNnaWQgImN1cnNvciBwb3NpdGlvbiBvdXRzaWRlIGJ1ZmZlciIKK21zZ3N0ciAibG9wZXJwb3Npc2llIGJ1aXRlIGJ1ZmZlciIKKworIzogaWZfcHl0aG9uLmM6MTgyNAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAoZGVsZXRlZCkgYXQgJS44bFg+IgorbXNnc3RyICI8dmVuc3RlciB2b29yd2VycCAoZ2Vza3JhcCkgYnkgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODM2CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjx2ZXJ3eWRlciB2b29yd2VycCAob25iZWtlbmQpIGJ5ICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTgzOAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93ICVkPiIKK21zZ3N0ciAiPHZlbnN0ZXIgJWQ+IgorCisjOiBpZl9weXRob24uYzoxOTE0Cittc2dpZCAibm8gc3VjaCB3aW5kb3ciCittc2dzdHIgImdlZW4gc29kYW5pZ2UgdmVuc3RlciBuaWUiCisKKyM6IGlmX3B5dGhvbi5jOjIxNDQgaWZfcHl0aG9uLmM6MjE3NSBpZl9weXRob24uYzoyMjI1IGlmX3B5dGhvbi5jOjIyODUKKyM6IGlmX3B5dGhvbi5jOjI0MDIgaWZfcHl0aG9uLmM6MjQ1NCBpZl90Y2wuYzo2NzMgaWZfdGNsLmM6NzE4IGlmX3RjbC5jOjc5MgorIzogaWZfdGNsLmM6ODYyIGlmX3RjbC5jOjE5ODcKK21zZ2lkICJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICJrYW4gbmllIGhlcndpbi1pbmxpZ3Rpbmcgc3Rvb3IgbmllIgorCisjOiBpZl9weXRob24uYzoyMTQ2IGlmX3B5dGhvbi5jOjIyMzIgaWZfcHl0aG9uLmM6MjI5NgorbXNnaWQgImNhbm5vdCBkZWxldGUgbGluZSIKK21zZ3N0ciAia2FuIHJl62wgbmllIHZlcnd5ZGVyIG5pZSIKKworIzogaWZfcHl0aG9uLmM6MjE3NyBpZl9weXRob24uYzoyMzEyIGlmX3RjbC5jOjY3OSBpZl90Y2wuYzoyMDA5Cittc2dpZCAiY2Fubm90IHJlcGxhY2UgbGluZSIKK21zZ3N0ciAia2FuIHJl62wgbmllIHZlcnZhbmcgbmllIgorCisjOiBpZl9weXRob24uYzoyMzI4IGlmX3B5dGhvbi5jOjI0MDQgaWZfcHl0aG9uLmM6MjQ2MgorbXNnaWQgImNhbm5vdCBpbnNlcnQgbGluZSIKK21zZ3N0ciAia2FuIHJl62wgbmllIGJ5dm9lZyBuaWUiCisKKyM6IGlmX3B5dGhvbi5jOjI1NjYKK21zZ2lkICJzdHJpbmcgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgInN0cmluZyBrYW4gbmllICduZXdsaW5lcycgYmV2YXQgbmllIgorCisjOiBpZl9ydWJ5LmM6Mzk0Cittc2dpZCAiIgorIkUyNjY6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBSdWJ5IGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjY2OiBKYW1tZXIsIGhpZXJkaWUgYmV2ZWwgaXMgYWZnZXNrYWtlbCwgZGllIFJ1YnkgYmlibGlvdGVla2zqZXIga29uIG5pZSAiCisiZ2VsYWFpIHdvcmQgbmllLiIKKworIzogaWZfcnVieS5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjczOiB1bmtub3duIGxvbmdqbXAgc3RhdHVzICVkIgorbXNnc3RyICJFMjczOiBPbmJla2VuZGUgJ2xvbmdqbXAnIHN0YXR1cyAlZCIKKworIzogaWZfc25pZmYuYzo2NworbXNnaWQgIlRvZ2dsZSBpbXBsZW1lbnRhdGlvbi9kZWZpbml0aW9uIgorbXNnc3RyICJTdGVsIGVuIGhlcnN0ZWwgaW1wbGltZW50YXNpZS9kZWZpbmlzaWUiCisKKyM6IGlmX3NuaWZmLmM6NjgKK21zZ2lkICJTaG93IGJhc2UgY2xhc3Mgb2YiCittc2dzdHIgIld5cyBiYXNpc2tsYXMgdmFuIgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAiV3lzIHZlcnZhbmdkZSBsaWRmdW5rc2llIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICJHYWFuIGhhYWwgdWl0IGzqZXIiCisKKyM6IGlmX3NuaWZmLmM6NzEKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIHByb2plY3QiCittc2dzdHIgIkdhYW4gaGFhbCB1aXQgcHJvamVrIgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIkdhYW4gaGFhbCB1aXQgYWxsZSBwcm9qZWt0ZSIKKworIzogaWZfc25pZmYuYzo3NAorbXNnaWQgIlJldHJpZXZlIgorbXNnc3RyICJHYWFuIGhhYWwiCisKKyM6IGlmX3NuaWZmLmM6NzUKK21zZ2lkICJTaG93IHNvdXJjZSBvZiIKK21zZ3N0ciAiV3lzIGtvZGUgdmFuIgorCisjOiBpZl9zbmlmZi5jOjc2Cittc2dpZCAiRmluZCBzeW1ib2wiCittc2dzdHIgIlZpbmQgc2ltYm9vbCIKKworIzogaWZfc25pZmYuYzo3NworbXNnaWQgIkJyb3dzZSBjbGFzcyIKK21zZ3N0ciAiS3lrIGtsYXMgZGV1ciIKKworIzogaWZfc25pZmYuYzo3OAorbXNnaWQgIlNob3cgY2xhc3MgaW4gaGllcmFyY2h5IgorbXNnc3RyICJXeXMga2xhcyBpbiBoaetyYXJnaWUiCisKKyM6IGlmX3NuaWZmLmM6NzkKK21zZ2lkICJTaG93IGNsYXNzIGluIHJlc3RyaWN0ZWQgaGllcmFyY2h5IgorbXNnc3RyICJXeXMga2xhcyBpbiBiZXBlcmt0ZSBoaetyYXJnaWUiCisKKyM6IGlmX3NuaWZmLmM6ODAKK21zZ2lkICJYcmVmIHJlZmVycyB0byIKK21zZ3N0ciAiWHJlZiB2ZXJ3eXMgbmEiCisKKyM6IGlmX3NuaWZmLmM6ODEKK21zZ2lkICJYcmVmIHJlZmVycmVkIGJ5IgorbXNnc3RyICJYcmVmIHZlcnd5cyBkZXVyIgorCisjOiBpZl9zbmlmZi5jOjgyCittc2dpZCAiWHJlZiBoYXMgYSIKK21zZ3N0ciAiWHJlZiBoZXQgJ24iCisKKyM6IGlmX3NuaWZmLmM6ODMKK21zZ2lkICJYcmVmIHVzZWQgYnkiCittc2dzdHIgIlhyZWYgZ2VicnVpayBkZXVyIgorCisjOiBpZl9zbmlmZi5jOjg0Cittc2dpZCAiU2hvdyBkb2N1IG9mIgorbXNnc3RyICJXeXMgJ2RvY3UnIHZhbiIKKworIzogaWZfc25pZmYuYzo4NQorbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgorbXNnc3RyICJHZW5lcmVlciAnZG9jdScgdmlyIgorCisjOiBpZl9zbmlmZi5jOjk3Cittc2dpZCAiIgorIkNhbm5vdCBjb25uZWN0IHRvIFNOaUZGKy4gQ2hlY2sgZW52aXJvbm1lbnQgKHNuaWZmZW1hY3MgbXVzdCBiZSBmb3VuZCBpbiAiCisiJFBBVEgpLlxuIgorbXNnc3RyICIiCisiS2FuIG5pZSAnbiB2ZXJiaW5kaW5nIG1ldCAnU05pRkYrJyBtYWFrIG5pZS4gS3lrIG9mIGRpZSBvbWdld2luZyByZWcgaXMgIgorIignc25pZmZlbWFjcycgbW9ldCBpbiAnJFBBVEgnIGdldmluZCB3b3JkKS5cbiIKKworIzogaWZfc25pZmYuYzo0MjUKK21zZ2lkICJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiRTI3NDogU25pZmY6IEZvdXQgZ2VkdXJlbmRlIGxlZXMuIFZlcmJpbmRpbmcgZ2VicmVlayIKKworIzogaWZfc25pZmYuYzo1NTMKK21zZ2lkICJTTmlGRisgaXMgY3VycmVudGx5ICIKK21zZ3N0ciAiU05pRkYrIGlzIHRhbnMiCisKKyM6IGlmX3NuaWZmLmM6NTU1Cittc2dpZCAibm90ICIKK21zZ3N0ciAibmllICIKKworIzogaWZfc25pZmYuYzo1NTYKK21zZ2lkICJjb25uZWN0ZWQiCittc2dzdHIgImdla29ubmVrdGVlciIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6IE9uYmVrZW5kZSBTTmlGRisgdmVyc29lazogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IEZvdXQgaW4ga29ubmVrdGVlciBtZXQgU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwMTAKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODogU05pRkYrIGlzIG5pZSBnZWtvbm5la3RlZXIgbmllIgorCisjOiBpZl9zbmlmZi5jOjEwMTkKK21zZ2lkICJFMjc5OiBOb3QgYSBTTmlGRisgYnVmZmVyIgorbXNnc3RyICJFMjc5OiBOaWUgJ24gU05pRkYrIGJ1ZmZlciBuaWUiCisKKyM6IGlmX3NuaWZmLmM6MTA4NAorbXNnaWQgIlNuaWZmOiBFcnJvciBkdXJpbmcgd3JpdGUuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiU25pZmY6IEZvdXQgZ2VkdXJlbmRlIHN0b29yLiBWZXJiaW5kaW5nIGdlYnJlZWsiCisKKyM6IGlmX3RjbC5jOjQwNworbXNnaWQgImludmFsaWQgYnVmZmVyIG51bWJlciIKK21zZ3N0ciAib25nZWxkaWdlIGJ1ZmZlcm5vbW1lciIKKworIzogaWZfdGNsLmM6NDUzIGlmX3RjbC5jOjkyMCBpZl90Y2wuYzoxMDk5Cittc2dpZCAibm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAibm9nIG5pZSBnZe9tcGxlbWVudGVlciBuaWUiCisKKyM6IGlmX3RjbC5jOjQ5MAorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJvbmJla2VuZGUgb3BzaWUiCisKKyMuID8/PworIzogaWZfdGNsLmM6NzYzCittc2dpZCAiY2Fubm90IHNldCBsaW5lKHMpIgorbXNnc3RyICJrYW4gbmllIHJl62wocykgc3RlbCBuaWUiCisKKyM6IGlmX3RjbC5jOjgzNAorbXNnaWQgIm1hcmsgbm90IHNldCIKK21zZ3N0ciAibWVya2VyIG5pZSBnZXN0ZWwgbmllIgorCisjOiBpZl90Y2wuYzo4NDAgaWZfdGNsLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyb3cgJWQgY29sdW1uICVkIgorbXNnc3RyICJyeSAlZCBrb2xvbSAlZCIKKworIzogaWZfdGNsLmM6ODcwCittc2dpZCAiY2Fubm90IGluc2VydC9hcHBlbmQgbGluZSIKK21zZ3N0ciAia2FuIG5pZSByZetsIGludm9lZy9hYW5sYXMgbmllIgorCisjOiBpZl90Y2wuYzoxMjU3Cittc2dpZCAidW5rbm93biBmbGFnOiAiCittc2dzdHIgIm9uYmVrZW5kZSB2bGFnOiAiCisKKyM6IGlmX3RjbC5jOjEzMjcKK21zZ2lkICJ1bmtub3duIHZpbU9wdGlvbiIKK21zZ3N0ciAib25iZWtlbmRlICd2aW1PcHRpb24nIgorCisjOiBpZl90Y2wuYzoxNDEyCittc2dpZCAia2V5Ym9hcmQgaW50ZXJydXB0IgorbXNnc3RyICJzbGV1dGVsYm9yZG9uZGVyYnJla2luZyIKKworIzogaWZfdGNsLmM6MTQxNworbXNnaWQgInZpbSBlcnJvciIKK21zZ3N0ciAidmltIGZvdXQiCisKKyM6IGlmX3RjbC5jOjE0NjAKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgImthbiBuaWUgYnVmZmVyL3ZlbnN0ZXIgYmV2ZWwgc2tlcCBuaWU6IHZvb3J3ZXJwIHdvcmQgZ2Vza3JhcCIKKworIzogaWZfdGNsLmM6MTUzNAorbXNnaWQgIiIKKyJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyBpcyBhbHJlYWR5IGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIiIKKyJrYW4gbmllIHRlcnVncm9lcGJldmVsIHJlZ2lzdHJlZXIgbmllOiBidWZmZXIvdmVuc3RlciB3b3JkIGFscmVlZHMgZ2Vza3JhcCIKKworIy4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgRmFtb3VzIGxhc3Qgd29yZD8KKyM6IGlmX3RjbC5jOjE1NTEKK21zZ2lkICIiCisiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IGNvcnJ1cHQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0uIgorIm9yZyIKK21zZ3N0ciAiIgorIkUyODA6IFRDTCBGQVRBTEUgRk9VVDogdmVyd2x5cyBrb3JydXAhPyBSYXBwb3J0ZWVyIGRpdCBhc2IuIGFhbiA8dmltLWRldkB2aW0uIgorIm9yZz4iCisKKyM6IGlmX3RjbC5jOjE1NTIKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisia2FuIHRlcnVncm9lcGJldmVsIG5pZSByZWdpc3RyZWVyIG5pZTogYnVmZmVyL3ZlbnN0ZXJ2ZXJ3eXNpbmcgbmllIGdldmluZCBuaWUiCisKKyM6IGlmX3RjbC5jOjE3MTMKK21zZ2lkICJTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgVGNsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJKYW1tZXIsIGhpZXJkaWUgYmV2ZWwgaXMgYWZnZXNrYWtlbCwgZGllIFRjbCBiaWJsaW90ZWVrIGtvbiBuaWUgZ2VsYWFpICIKKyJ3b3JkbmllLiIKKworIzogaWZfdGNsLmM6MTg3NQorbXNnaWQgIiIKKyJFMjgxOiBUQ0wgRVJST1I6IGV4aXQgY29kZSBpcyBub3QgaW50IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLm9yZyIKK21zZ3N0ciAiIgorIkUyODE6IFRDTCBGT1VUOiB2ZXJsYWF0a29kZSBpcyBuaWUgJ24gJ2ludCchPyBSYXBwb3J0ZWVyIGRpdCBhc2IuIGFhbiA8dmltLSIKKyJkZXZAdmltLm9yZz4iCisKKyM6IGlmX3RjbC5jOjE5OTUKK21zZ2lkICJjYW5ub3QgZ2V0IGxpbmUiCittc2dzdHIgImthbiBuaWUgcmXrbCBrcnkgbmllIgorCisjOiBpZl94Y21kc3J2LmM6MjA0Cittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAiS29uIG5pZSBiZXZlbGJlZGllbmVyIG5hYW0gcmVnaXN0cmVlciBuaWUiCisKKyM6IGlmX3hjbWRzcnYuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0Nzogbm8gcmVnaXN0ZXJlZCBzZXJ2ZXIgbmFtZWQgXCIlc1wiIgorbXNnc3RyICJFMjQ3OiBnZWVuIGdlcmVnaXN0cmVlcmRlIGJlZGllbmVyIGdlbmFhbWQgXCIlc1wiIgorCisjOiBpZl94Y21kc3J2LmM6NDQ2Cittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODogSGV0IGdlZmFhbCBvbSBiZXZlbCBuYSBkb2VsIHByb2dyYW0gdGUgc3R1dXIiCisKKyM6IGlmX3hjbWRzcnYuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzZXJ2ZXIgaWQgdXNlZDogJXMiCittc2dzdHIgIk9uZ2VsZGlnZSBiZWRpZW5lci1pZCBnZWJydWlrOiAlcyIKKworIzogaWZfeGNtZHNydi5jOjEwNjEKK21zZ2lkICJFMjQ5OiBjb3VsZG4ndCByZWFkIFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSIKK21zZ3N0ciAiRTI0OToga29uIG5pZSBWSU0gaW5zdGFuc2llIHJlZ2lzdGVyLWtlbm1lcmsgbGVlcyBuaWUiCisKKyM6IGlmX3hjbWRzcnYuYzoxMDcyCittc2dpZCAiRTI1MTogVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IGlzIGJhZGx5IGZvcm1lZC4gIERlbGV0ZWQhIgorbXNnc3RyICJFMjUxOiBWSU0gaW5zdGFuc2llIHJlZ2lzdGVyLWtlbm1lcmsgaXMgc3dhayBnZXZvcm0uIEdlc2tyYXAhIgorCisjOiBtYWluLmM6NTMgb3B0aW9uLmM6MzE2MiBvcHRpb24uYzozMjY5Cittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk9uYmVrZW5kZSBvcHNpZSIKKworIzogbWFpbi5jOjU1Cittc2dpZCAiVG9vIG1hbnkgZWRpdCBhcmd1bWVudHMiCittc2dzdHIgIlRlIHZlZWwgcmVkaWdlZXItcGFyYW1ldGVycyIKKworIzogbWFpbi5jOjU3Cittc2dpZCAiQXJndW1lbnQgbWlzc2luZyBhZnRlciIKK21zZ3N0ciAiUGFyYW1ldGVyIG9udGJyZWVrIG5hIgorCisjOiBtYWluLmM6NTkKK21zZ2lkICJHYXJiYWdlIGFmdGVyIG9wdGlvbiIKK21zZ3N0ciAiR2Vtb3JzIG5hIG9wc2llIgorCisjOiBtYWluLmM6NjEKK21zZ2lkICJUb28gbWFueSBcIitjb21tYW5kXCIgb3IgXCItYyBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICJUZSB2ZWVsIFwiK2NvbW1hbmRcIiBvZiBcIi1jIGNvbW1hbmRcIiBwYXJhbWV0ZXJzIgorCisjOiBtYWluLmM6NjMKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IGZvciIKK21zZ3N0ciAiT25nZWxkaWdlIHBhcmFtZXRlciB2aXIiCisKKyM6IG1haW4uYzo0MzYKK21zZ2lkICJUaGlzIFZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlIGRpZmYgZmVhdHVyZS4iCittc2dzdHIgIkhpZXJkaWUgVmltIGlzIG5pZSBnZWtvbXBpbGVlciBtZXQgJ2RpZmYnIGZ1bmtzaW9uYWxpdGVpdCBuaWUuIgorCisjOiBtYWluLmM6ODU4Cittc2dpZCAiQXR0ZW1wdCB0byBvcGVuIHNjcmlwdCBmaWxlIGFnYWluOiBcIiIKK21zZ3N0ciAiUHJvYmVlciB3ZWVyIG9tIHNrcmlwbOplciBvb3AgdGUgbWFhazogXCIiCisKKyM6IG1haW4uYzo4NjIgbWFpbi5jOjg2OSBtYWluLmM6OTEzIG1lbWxpbmUuYzozNjczIG1lbWxpbmUuYzozNjc3CisjOiB2ZXJzaW9uLmM6ODE2IHZlcnNpb24uYzo4MjEgdmVyc2lvbi5jOjgyNiB2ZXJzaW9uLmM6ODMxIHZlcnNpb24uYzo4MzYKKyM6IHZlcnNpb24uYzo4NDEgdmVyc2lvbi5jOjg0NyB2ZXJzaW9uLmM6ODUxIHZlcnNpb24uYzo4NTUgdmVyc2lvbi5jOjg2MAorIzogdmVyc2lvbi5jOjg2NyB2ZXJzaW9uLmM6ODc1IHZlcnNpb24uYzo4ODEKK21zZ2lkICJcIlxuIgorbXNnc3RyICJcIlxuIgorCisjOiBtYWluLmM6ODY3Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICJLYW4gbmllIG9vcG1hYWsgb20gdGUgbGVlcyBuaWU6IFwiIgorCisjOiBtYWluLmM6OTExCittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICJLYW4gbmllIG9vcG1hYWsgdmlyIHNrcmlwLWFmdm9lciBuaWU6IFwiIgorCisjOiBtYWluLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmaWxlcyB0byBlZGl0XG4iCittc2dzdHIgIiVkIGzqZXJzIG9tIHRlIGJld2Vya1xuIgorCisjOiBtYWluLmM6MTA5NAorbXNnaWQgIlZpbTogV2FybmluZzogT3V0cHV0IGlzIG5vdCB0byBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTogV2FhcnNrdXdpbmc6IEFmdm9lciBnYWFuIG5pZSBuYSAnbiB0ZXJtaW5hYWwgbmllXG4iCisKKyM6IG1haW4uYzoxMDk2Cittc2dpZCAiVmltOiBXYXJuaW5nOiBJbnB1dCBpcyBub3QgZnJvbSBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTogV2FhcnNrdXdpbmc6IEludm9lciBrb20gbmllIHZhbmFmICduIHRlcm1pbmFhbCBuaWVcbiIKKworIy4ganVzdCBpbiBjYXNlLi4KKyM6IG1haW4uYzoxMTcxCittc2dpZCAicHJlLXZpbXJjIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAidvPzci0ndmltcmMnIGJldmVscmXrbCIKKworIzogbWFpbi5jOjEyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IEthbiBuaWUgbGVlcyB1aXQgXCIlc1wiIG5pZSIKKworIzogbWFpbi5jOjIxNTcKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk1lZXIgaW5saWd0aW5nIG1ldDogXCJ2aW0gLWhcIlxuIgorCisjOiBtYWluLmM6MjE5MAorbXNnaWQgIltmaWxlIC4uXSAgICAgICBlZGl0IHNwZWNpZmllZCBmaWxlKHMpIgorbXNnc3RyICJbbOplciAuLl0gICAgICAgYmV3ZXJrIGzqZXIocykiCisKKyM6IG1haW4uYzoyMTkxCittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAgbGVlcyB0ZWtzIHVpdCAnc3RkaW4nIgorCisjOiBtYWluLmM6MjE5MgorbXNnaWQgIi10IHRhZyAgICAgICAgICBlZGl0IGZpbGUgd2hlcmUgdGFnIGlzIGRlZmluZWQiCittc2dzdHIgIi10IHRhZyAgICAgICAgICBiZXdlcmsgbOplciB3YWFyIGV0aWtldCBnZWRlZmluaWVlciBpcyIKKworIzogbWFpbi5jOjIxOTQKK21zZ2lkICItcSBbZXJyb3JmaWxlXSAgZWRpdCBmaWxlIHdpdGggZmlyc3QgZXJyb3IiCittc2dzdHIgIi1xIFtmb3V0bOplcl0gICBiZXdlcmsgbOplciBtZXQgZWVyc3RlIGZvdXQiCisKKyM6IG1haW4uYzoyMjAzCittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorImdlYnJ1aWs6IgorCisjOiBtYWluLmM6MjIwNgorbXNnaWQgIiB2aW0gW2FyZ3VtZW50c10gIgorbXNnc3RyICIgdmltIFtwYXJhbWV0ZXJzXSAiCisKKyM6IG1haW4uYzoyMjEwCittc2dpZCAiIgorIlxuIgorIiAgIG9yOiIKK21zZ3N0ciAiIgorIlxuIgorIiAgIG9mOiIKKworIzogbWFpbi5jOjIyMTMKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQXJndW1lbnRzOlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiUGFyYW1ldGVyczpcbiIKKworIzogbWFpbi5jOjIyMTQKK21zZ2lkICItLVx0XHRcdE9ubHkgZmlsZSBuYW1lcyBhZnRlciB0aGlzIgorbXNnc3RyICItLVx0XHRcdFNsZWdzIGzqZXJuYW1lIGhpZXJuYSIKKworIzogbWFpbi5jOjIyMTYKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHRSZWdpc3RyZWVyIGhpZXJkaWUgZ3ZpbSB2aXIgT0xFIgorCisjOiBtYWluLmM6MjIxNworbXNnaWQgIi11bnJlZ2lzdGVyXHRcdFVucmVnaXN0ZXIgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItdW5yZWdpc3Rlclx0XHRPbnJlZ2lzdHJlZXIgZ3ZpbSB2aXIgT0xFIgorCisjOiBtYWluLmM6MjIyMAorbXNnaWQgIi1nXHRcdFx0UnVuIHVzaW5nIEdVSSAobGlrZSBcImd2aW1cIikiCittc2dzdHIgIi1nXHRcdFx0Vm9lciB1aXQgbWV0IGRpZSBHVUkgKHNvb3MgXCJndmltXCIpIgorCisjOiBtYWluLmM6MjIyMQorbXNnaWQgIi1mXHRcdFx0Rm9yZWdyb3VuZDogRG9uJ3QgZm9yayB3aGVuIHN0YXJ0aW5nIEdVSSIKK21zZ3N0ciAiLWZcdFx0XHRWb29yZ3JvbmQ6IE1vZW5pZSB2dXJrIHdhbm5lZXIgR1VJIGJlZ2luIG5pZSIKKworIzogbWFpbi5jOjIyMjMKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRWaSBtb2R1cyAoc29vcyBcInZpXCIpIgorCisjOiBtYWluLmM6MjIyNAorbXNnaWQgIi1lXHRcdFx0RXggbW9kZSAobGlrZSBcImV4XCIpIgorbXNnc3RyICItZVx0XHRcdEV4IG1vZHVzIChzb29zIFwiZXhcIikiCisKKyM6IG1haW4uYzoyMjI1Cittc2dpZCAiLXNcdFx0XHRTaWxlbnQgKGJhdGNoKSBtb2RlIChvbmx5IGZvciBcImV4XCIpIgorbXNnc3RyICItc1x0XHRcdFN0aWwgKGJvbmRlbCkgbW9kdXMgKHNsZWdzIHZpciBcImV4XCIpIgorCisjOiBtYWluLmM6MjIyNworbXNnaWQgIi1kXHRcdFx0RGlmZiBtb2RlIChsaWtlIFwidmltZGlmZlwiKSIKK21zZ3N0ciAiLWRcdFx0XHREaWZmIG1vZHVzIChzb29zIFwidmltZGlmZlwiKSIKKworIzogbWFpbi5jOjIyMjkKK21zZ2lkICIteVx0XHRcdEVhc3kgbW9kZSAobGlrZSBcImV2aW1cIiwgbW9kZWxlc3MpIgorbXNnc3RyICIteVx0XHRcdEVhc3kgbW9kdXMgKHNvb3MgXCJldmltXCIsIG1vZHVzbG9vcykiCisKKyM6IG1haW4uYzoyMjMwCittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHRMZWVzYWxsZWVuIG1vZHVzIChzb29zIFwidmlld1wiKSIKKworIzogbWFpbi5jOjIyMzEKK21zZ2lkICItWlx0XHRcdFJlc3RyaWN0ZWQgbW9kZSAobGlrZSBcInJ2aW1cIikiCittc2dzdHIgIi1aXHRcdFx0QmVwZXJrdGUgbW9kdXMgKHNvb3MgXCJydmltXCIpIgorCisjOiBtYWluLmM6MjIzMgorbXNnaWQgIi1tXHRcdFx0TW9kaWZpY2F0aW9ucyAod3JpdGluZyBmaWxlcykgbm90IGFsbG93ZWQiCittc2dzdHIgIi1tXHRcdFx0VmVyYW5kZXJpbmdzIChza3J5ZiB2YW4gbOplcnMpIG5pZSB0b2VnZWxhYXQgbmllIgorCisjOiBtYWluLmM6MjIzMworbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdFZlcmFuZGVyaW5ncyBhYW4gdGVrcyBuaWUgdG9lZ2VsYWF0IG5pZSIKKworIzogbWFpbi5jOjIyMzQKK21zZ2lkICItYlx0XHRcdEJpbmFyeSBtb2RlIgorbXNnc3RyICItYlx0XHRcdEJpbupyZSBtb2R1cyIKKworIzogbWFpbi5jOjIyMzYKK21zZ2lkICItbFx0XHRcdExpc3AgbW9kZSIKK21zZ3N0ciAiLWxcdFx0XHRMaXNwIG1vZHVzIgorCisjOiBtYWluLmM6MjIzOAorbXNnaWQgIi1DXHRcdFx0Q29tcGF0aWJsZSB3aXRoIFZpOiAnY29tcGF0aWJsZSciCittc2dzdHIgIi1DXHRcdFx0VmVyc29lbmJhYXIgbWV0IFZpOiAnY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyMjM5Cittc2dpZCAiLU5cdFx0XHROb3QgZnVsbHkgVmkgY29tcGF0aWJsZTogJ25vY29tcGF0aWJsZSciCittc2dzdHIgIi1OXHRcdFx0TmllIHRlbiB2b2xsZSBWaS12ZXJzb2VuYmFhciBuaWU6ICdub2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjI0MAorbXNnaWQgIi1WW05dXHRcdFZlcmJvc2UgbGV2ZWwiCittc2dzdHIgIi1WW05dXHRcdE9tc2xhZ3RpZ2hlaWRzZ3JhYWQiCisKKyM6IG1haW4uYzoyMjQxCittc2dpZCAiLURcdFx0XHREZWJ1Z2dpbmcgbW9kZSIKK21zZ3N0ciAiLURcdFx0XHRPbnRmb3V0bW9kdXMiCisKKyM6IG1haW4uYzoyMjQyCittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHRHZWVuIHJ1aWxs6mVyLCBnZWJydWlrIHNsZWdzIGdlaGV1ZSIKKworIzogbWFpbi5jOjIyNDMKK21zZ2lkICItclx0XHRcdExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdCIKK21zZ3N0ciAiLXJcdFx0XHRMeXMgcnVpbGzqZXJzIGVuIHZlcmxhYXQgdmltIgorCisjOiBtYWluLmM6MjI0NAorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciAobWV0IGzqZXIgbmFhbSlcdEhlcndpbiBpbmVlbmdlc3RvcnRlIHNlc3NpZSIKKworIzogbWFpbi5jOjIyNDUKK21zZ2lkICItTFx0XHRcdFNhbWUgYXMgLXIiCittc2dzdHIgIi1MXHRcdFx0U2VsZmRlIGFzIC1yIgorCisjOiBtYWluLmM6MjI0NworbXNnaWQgIi1mXHRcdFx0RG9uJ3QgdXNlIG5ld2NsaSB0byBvcGVuIHdpbmRvdyIKK21zZ3N0ciAiLWZcdFx0XHRNb2V0IG5pZSAnbmV3Y2xpJyBnZWJydWlrIG9tIHZlbnN0ZXIgb29wIHRlIG1hYWsgbmllIgorCisjOiBtYWluLmM6MjI0OAorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPHRvZXN0ZWw+XHRcdEdlYnJ1aWsgPHRvZXN0ZWw+IHZpciBJL08iCisKKyM6IG1haW4uYzoyMjUxCittc2dpZCAiLUhcdFx0XHRzdGFydCBpbiBIZWJyZXcgbW9kZSIKK21zZ3N0ciAiLUhcdFx0XHRiZWdpbiBpbiBIZWJyZWV1c2UgbW9kdXMiCisKKyM6IG1haW4uYzoyMjU0Cittc2dpZCAiLUZcdFx0XHRzdGFydCBpbiBGYXJzaSBtb2RlIgorbXNnc3RyICItRlx0XHRcdGJlZ2luIGluIEZhcnNpIG1vZHVzIgorCisjOiBtYWluLmM6MjI1NgorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW5hYWw+XHRTdGVsIHRlcm1pbmFhbHRpcGUgbmEgPHRlcm1pbmFhbD4iCisKKyM6IG1haW4uYzoyMjU3Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0R2VicnVpayA8dmltcmM+IGluIHBsYWFzIHZhbiBlbmlnZSBhbmRlciAudmltcmMiCisKKyM6IG1haW4uYzoyMjU5Cittc2dpZCAiLVUgPGd2aW1yYz5cdFx0VXNlIDxndmltcmM+IGluc3RlYWQgb2YgYW55IC5ndmltcmMiCittc2dzdHIgIi1VIDxndmltcmM+XHRcdEdlYnJ1aWsgPGd2aW1yYz4gaW4gcGxhYXMgdmFuIGVuaWdlIC5ndmltcmMiCisKKyM6IG1haW4uYzoyMjYxCittc2dpZCAiLS1ub3BsdWdpblx0XHREb24ndCBsb2FkIHBsdWdpbiBzY3JpcHRzIgorbXNnc3RyICItLW5vcGx1Z2luXHRcdE1vZXQgbmllIGlucHJvcHNrcmlwdGUgbGFhaSBuaWUiCisKKyM6IG1haW4uYzoyMjYyCittc2dpZCAiLW9bTl1cdFx0T3BlbiBOIHdpbmRvd3MgKGRlZmF1bHQ6IG9uZSBmb3IgZWFjaCBmaWxlKSIKK21zZ3N0ciAiLW9bTl1cdFx0TWFhayBOIHZlbnN0ZXJzIG9vcCAodmVyc3RlazogZWVuIHZpciBlbGtlIGzqZXIpIgorCisjOiBtYWluLmM6MjI2MworbXNnaWQgIi1PW05dXHRcdGxpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdHNvb3MgLW8gbWFhciB2ZXJkZWVsIHZlcnRpa2FhbCIKKworIzogbWFpbi5jOjIyNjQKK21zZ2lkICIrXHRcdFx0U3RhcnQgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIitcdFx0XHRCZWdpbiBieSBlaW5kZSB2YW4gbOplciIKKworIzogbWFpbi5jOjIyNjUKK21zZ2lkICIrPGxudW0+XHRcdFN0YXJ0IGF0IGxpbmUgPGxudW0+IgorbXNnc3RyICIrPGxudW0+XHRcdEJlZ2luIGJ5IHJl62wgPGxudW0+IgorCisjOiBtYWluLmM6MjI2NworbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIi0tY21kIDxiZXZlbD5cdFZvZXIgPGJldmVsPiB1aXQgdm9vciBlbmlnZSAudmltcmMtbOplciBnZWxhYWkgd29yZCIKKworIzogbWFpbi5jOjIyNjkKK21zZ2lkICItYyA8Y29tbWFuZD5cdFx0RXhlY3V0ZSA8Y29tbWFuZD4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLWMgPGJldmVsPlx0XHRWb2VyIDxiZXZlbD4gdWl0IG5hIGVlcnN0ZSBs6mVyIGdlbGFhaSBpcyIKKworIzogbWFpbi5jOjIyNzAKK21zZ2lkICItUyA8c2Vzc2lvbj5cdFx0U291cmNlIGZpbGUgPHNlc3Npb24+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIiIKKyItUyA8c2Vzc2llPlx0XHRWb2VyIGJldmVsZSBpbiBs6mVyIDxzZXNzaWU+IHVpdCBuYSBlZXJzdGUgbOplciBnZWxhYWkgaXMiCisKKyM6IG1haW4uYzoyMjcxCittc2dpZCAiLXMgPHNjcmlwdGluPlx0UmVhZCBOb3JtYWwgbW9kZSBjb21tYW5kcyBmcm9tIGZpbGUgPHNjcmlwdGluPiIKK21zZ3N0ciAiLXMgPHNrcmlwaW4+XHRcdExlZXMgTm9ybWFsZS1tb2R1cyBiZXZlbGUgdmFuIGzqZXIgPHNrcmlwaW4+IgorCisjOiBtYWluLmM6MjI3MgorbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDxza3JpcHVpdD5cdExhcyBhbGxlIGdldGlrdGUgYmV2ZWxlIGFhbiBieSBs6mVyIDxza3JpcHVpdD4iCisKKyM6IG1haW4uYzoyMjczCittc2dpZCAiLVcgPHNjcmlwdG91dD5cdFdyaXRlIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItVyA8c2tyaXB1aXQ+XHRTa3J5ZiBhbGxlIGdldGlrdGUgYmV2ZWxlIG5hIGzqZXIgPHNrcmlwdWl0PiIKKworIzogbWFpbi5jOjIyNzUKK21zZ2lkICIteFx0XHRcdEVkaXQgZW5jcnlwdGVkIGZpbGVzIgorbXNnc3RyICIteFx0XHRcdEJld2VyayBnZetua3JpcHRlZXJkZSBs6mVycyIKKworIzogbWFpbi5jOjIyNzkKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdENvbm5lY3QgdmltIHRvIHRoaXMgcGFydGljdWxhciBYLXNlcnZlciIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHRLb3BwZWwgdmltIGFhbiBoaWVyZGllIFgtYmVkaWVuZXIiCisKKyM6IG1haW4uYzoyMjgxCittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHRNb2V0IG5pZSB2ZXJiaW5kaW5nIG1ldCBYLWJlZGllbmVyIG1hYWsgbmllIgorCisjOiBtYWluLmM6MjI4MworbXNnaWQgIi0tc29ja2V0aWQgPHhpZD5cdE9wZW4gVmltIGluc2lkZSBhbm90aGVyIEdUSyB3aWRnZXQiCittc2dzdHIgIi0tc29ja2V0aWQgPHhpZD5cdE1hYWsgVmltIGluICduIGFuZGVyIEdUSyBlbGVtZW50IG9vcCIKKworIzogbWFpbi5jOjIyODcKK21zZ2lkICItLXJlbW90ZSA8ZmlsZXM+XHRFZGl0IDxmaWxlcz4gaW4gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZSA8bOplcnM+XHRXeXNpZyBkaWUgPGzqZXJzPiBpbiBhIFZpbSBiZWRpZW5lciBlbiB2ZXJsYWF0IgorCisjOiBtYWluLmM6MjI4OAorbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcz4gIEFzIC0tcmVtb3RlIGJ1dCB3YWl0IGZvciBmaWxlcyB0byBoYXZlIGJlZW4gZWRpdGVkIgorbXNnc3RyICIiCisiLS1yZW1vdGUtd2FpdCA8bOplcnM+IFNvb3MgJy0tcmVtb3RlJywgbWFhciB3YWcgdmlyIGzqZXJzIG9tIGdld3lzaWd0ZSB3b3JkIgorCisjOiBtYWluLmM6MjI4OQorbXNnaWQgIi0tcmVtb3RlLXNlbmQgPGtleXM+XHRTZW5kIDxrZXlzPiB0byBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQiCittc2dzdHIgIiIKKyItLXJlbW90ZS1zZW5kIDxzbGV1dGVscz5cdFN0dXVyIDxzbGV1dGVscz4gbmEgJ24gVmltLWJlZGllbmVyIGVuIHZlcmxhYXQiCisKKyM6IG1haW4uYzoyMjkwCittc2dpZCAiLS1yZW1vdGUtZXhwciA8ZXhwcj5cdEV2YWx1YXRlIDxleHByPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIHByaW50IHJlc3VsdCIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWVlciA8ZXhwcj4gaW4gJ24gVmltLWJlZGllbmVyIGVuIGRydWsgcmVzdWx0YWF0IgorCisjOiBtYWluLmM6MjI5MQorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICItLXNlcnZlcmxpc3RcdFx0THlzIGJlc2tpa2JhcmUgVmltLWJlZGllbmVyIG5hbWUgZW4gdmVybGFhdCIKKworIzogbWFpbi5jOjIyOTIKK21zZ2lkICItLXNlcnZlcm5hbWUgPG5hbWU+XHRTZW5kIHRvL2JlY29tZSB0aGUgVmltIHNlcnZlciA8bmFtZT4iCittc2dzdHIgIi0tc2VydmVybmFtZSA8bmFhbT5cdFN0dXVyIG5hL3dvcmQgZGllIFZpbS1iZWRpZW5lciA8bmFhbT4iCisKKyM6IG1haW4uYzoyMjk1Cittc2dpZCAiLWkgPHZpbWluZm8+XHRcdFVzZSA8dmltaW5mbz4gaW5zdGVhZCBvZiAudmltaW5mbyIKK21zZ3N0ciAiLWkgPHZpbWluZm8+XHRcdEdlYnJ1aWsgPHZpbWluZm8+IGluIHBsYWFzIHZhbiAudmltaW5mbyIKKworIzogbWFpbi5jOjIyOTcKK21zZ2lkICItaFx0XHRcdHByaW50IEhlbHAgKHRoaXMgbWVzc2FnZSkgYW5kIGV4aXQiCittc2dzdHIgIi1oXHRcdFx0c2tyeWYgSHVscCAoaGllcmRpZSBib29kc2thcCkgZW4gc2x1aXQiCisKKyM6IG1haW4uYzoyMjk4Cittc2dpZCAiLS12ZXJzaW9uXHRcdHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQiCittc2dzdHIgIi0tdmVyc2lvblx0XHRza3J5ZiB3ZWVyZ2F3ZS1pbmxpZ3RpbmcgZW4gc2x1aXQiCisKKyM6IG1haW4uYzoyMzAyCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKE1vdGlmIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiUGFyYW1ldGVycyBkZXVyIGd2aW0gaGVya2VuIChNb3RpZiB3ZWVyZ2F3ZSk6XG4iCisKKyM6IG1haW4uYzoyMzA1Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEF0aGVuYSB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBhcmFtZXRlcnMgZGV1ciBndmltIGhlcmtlbiAoQXRoZW5hIHdlZXJnYXdlKTpcbiIKKworIzogbWFpbi5jOjIzMDgKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdFZvZXIgdmltIG9wIDxkaXNwbGF5PiB1aXQiCisKKyM6IG1haW4uYzoyMzA5Cittc2dpZCAiLWljb25pY1x0XHRTdGFydCB2aW0gaWNvbmlmaWVkIgorbXNnc3RyICItaWNvbmljXHRcdEJlZ2luIHZpbSBhcyBpa29vbiIKKworIzogbWFpbi5jOjIzMTEKK21zZ2lkICItbmFtZSA8bmFtZT5cdFx0VXNlIHJlc291cmNlIGFzIGlmIHZpbSB3YXMgPG5hbWU+IgorbXNnc3RyICItbmFtZSA8bmFtZT5cdFx0R2VicnVpayBodWxwYnJvbiBhc29mIHZpbSA8bmFtZT4gd2FzIgorCisjOiBtYWluLmM6MjMxMgorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgKE5vZyBuaWUgZ2XvbXBsZW1lbnRlZXIgbmllKVxuIgorCisjOiBtYWluLmM6MjMxNAorbXNnaWQgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciB0aGUgYmFja2dyb3VuZCAoYWxzbzogLWJnKSIKK21zZ3N0ciAiLWJhY2tncm91bmQgPGtsZXVyPlx0R2VicnVpayA8a2xldXI+IHZpciBkaWUgYWd0ZXJncm9uZCAob29rOiAtYmcpIgorCisjOiBtYWluLmM6MjMxNQorbXNnaWQgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZnKSIKK21zZ3N0ciAiLXZvb3Jncm9uZCA8a2xldXI+XHRHZWJydWlrIDxrbGV1cj4gdmlyIG5vcm1hbGUgdGVrcyAob29rOiAtZmcpIgorCisjOiBtYWluLmM6MjMxNiBtYWluLmM6MjMzNgorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPGZvbnQ+XHRcdEdlYnJ1aWsgPGZvbnQ+IHZpciBub3JtYWxlIHRla3MgKG9vayAtZm4pIgorCisjOiBtYWluLmM6MjMxNworbXNnaWQgIi1ib2xkZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGJvbGQgdGV4dCIKK21zZ3N0ciAirWJvbGRmb250IDxmb250Plx0IEdlYnJ1aWsgPGZvbnQ+IHZpciB2ZXRsZXR0ZXIgdGVrcyIKKworIzogbWFpbi5jOjIzMTgKK21zZ2lkICItaXRhbGljZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGl0YWxpYyB0ZXh0IgorbXNnc3RyICItaXRhbGljZm9udCA8Zm9udD5cdEdlYnJ1aWsgPGZvbnQ+IHZpciBrdXJzaWV3ZSB0ZWtzIgorCisjOiBtYWluLmM6MjMxOSBtYWluLmM6MjMzNworbXNnaWQgIi1nZW9tZXRyeSA8Z2VvbT5cdFVzZSA8Z2VvbT4gZm9yIGluaXRpYWwgZ2VvbWV0cnkgKGFsc286IC1nZW9tKSIKK21zZ3N0ciAiLWdlb21ldHJ5IDxnZW9tPlx0R2VicnVpayA8Z2VvbT4gdmlyIGFhbnZhbmtsaWtlIGdlb21ldHJpZSIKKworIzogbWFpbi5jOjIzMjAKK21zZ2lkICItYm9yZGVyd2lkdGggPHdpZHRoPlx0VXNlIGEgYm9yZGVyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1idykiCittc2dzdHIgIi1ib3JkZXJ3aWR0aCA8d3lkdGU+XHRHZWJydWlrICduIGdyZW5zd3lkdGUgdmFuIDx3eWR0ZT4gKG9vazogLWJ3KSIKKworIzogbWFpbi5jOjIzMjEKK21zZ2lkICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgVXNlIGEgc2Nyb2xsYmFyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1zdykiCittc2dzdHIgIiIKKyItc2Nyb2xsYmFyd2lkdGggPHd5ZHRlPlx0R2VicnVpayAnbiByb2xzdGFhZnd5ZHRlIHZhbiA8d3lkdGU+IChvb2s6IC1zdz4iCisKKyM6IG1haW4uYzoyMzIzCittc2dpZCAiLW1lbnVoZWlnaHQgPGhlaWdodD5cdFVzZSBhIG1lbnUgYmFyIGhlaWdodCBvZiA8aGVpZ2h0PiAoYWxzbzogLW1oKSIKK21zZ3N0ciAiIgorIi1tZW51aGVpZ2h0IDxob29ndGU+XHRHZWJydWlrIGEga2llc2x5c3N0YWFmaG9vZ3RlIHZhbiA8aG9vZ3RlPiAob29rOiAtbWgpIgorCisjOiBtYWluLmM6MjMyNSBtYWluLmM6MjMzOAorbXNnaWQgIi1yZXZlcnNlXHRcdFVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiAtcnYpIgorbXNnc3RyICItcmV2ZXJzZVx0XHRHZWJydWlrIHRydS12aWRlbyAob29rOiAtcnYpIgorCisjOiBtYWluLmM6MjMyNgorbXNnaWQgIityZXZlcnNlXHRcdERvbid0IHVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiArcnYpIgorbXNnc3RyICIrcmV2ZXJzZVx0XHRNb2V0IG5pZSB0cnUtdmlkZW8gZ2VicnVpayBuaWUgKG9vazogK3J2KSIKKworIzogbWFpbi5jOjIzMjcKK21zZ2lkICIteHJtIDxyZXNvdXJjZT5cdFNldCB0aGUgc3BlY2lmaWVkIHJlc291cmNlIgorbXNnc3RyICIteHJtIDxodWxwYnJvbj5cdFN0ZWwgZGllIGdlc3Blc2lmaXNlZXJkZSBodWxwYnJvbiIKKworIzogbWFpbi5jOjIzMzAKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoUklTQyBPUyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBhcmFtZXRlcnMgd2F0IGd2aW0gdmVyc3RhYW4gKFJJU0MgT1Mgd2Vlcmdhd2UpOlxuIgorCisjOiBtYWluLmM6MjMzMQorbXNnaWQgIi0tY29sdW1ucyA8bnVtYmVyPlx0SW5pdGlhbCB3aWR0aCBvZiB3aW5kb3cgaW4gY29sdW1ucyIKK21zZ3N0ciAiLS1jb2x1bW5zIDxhYW50YWw+XHRBYW52YW5rbGlrZSB3eWR0ZSB2YW4gdmVuc3RlciBpbiBrb2xvbW1lIgorCisjOiBtYWluLmM6MjMzMgorbXNnaWQgIi0tcm93cyA8bnVtYmVyPlx0SW5pdGlhbCBoZWlnaHQgb2Ygd2luZG93IGluIHJvd3MiCittc2dzdHIgIi0tcm93cyA8YWFudGFsPlx0QWFudmFua2xpa2UgaG9vZ3RlIHZhbiB2ZW5zdGVyIGluIHJ5ZSIKKworIzogbWFpbi5jOjIzMzUKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoR1RLKyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBhcmFtZXRlcnMgd2F0IGd2aW0gdmVyc3RhYW4gKEdUSysgd2Vlcmdhd2UpOlxuIgorCisjOiBtYWluLmM6MjMzOQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4gKGFsc286IC0tZGlzcGxheSkiCittc2dzdHIgIi1kaXNwbGF5IDxza2VybT5cdFZvZXIgdmltIG9wIDxza2VybT4gdWl0OiAob29rIC0tZGlzcGxheSkiCisKKyM6IG1haW4uYzoyMzQxCittc2dpZCAiLS1oZWxwXHRcdFNob3cgR25vbWUgYXJndW1lbnRzIgorbXNnc3RyICItLWhlbHBcdFx0V3lzIEdub21lIHBhcmFtZXRlcnMiCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyNTY2Cittc2dpZCAiIgorIlxuIgorIlNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiU3R1dXIgaGV0IGdlZmFhbC5cbiIKKworIy4gTGV0IHZpbSBzdGFydCBub3JtYWxseS4KKyM6IG1haW4uYzoyNTcxCittc2dpZCAiIgorIlxuIgorIlNlbmQgZmFpbGVkLiBUcnlpbmcgdG8gZXhlY3V0ZSBsb2NhbGx5XG4iCittc2dzdHIgIiIKKyJcbiIKKyJTdHV1ciBoZXQgZ2VmYWFsLiBQcm9iZWVyIG9tIGxva2FhbCB1aXQgdGUgdm9lclxuIgorCisjOiBtYWluLmM6MjYwNCBtYWluLmM6MjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBvZiAlZCBlZGl0ZWQiCittc2dzdHIgIiVkIHZhbiAlZCBs6mVycyBiZXdlcmsiCisKKyM6IG1haW4uYzoyNjQ4Cittc2dpZCAiU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiU3R1dXIgdmFuIHVpdGRydWtraW5nIGhldCBnZWZhYWwuXG4iCisKKyM6IG1hcmsuYzo2NjAKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIkdlZW4gbWVya2VycyBnZXN0ZWwgbmllIgorCisjOiBtYXJrLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4MzogR2VlbiBtZXJrZXJzIHBhcyBvcCBcIiVzXCIgbmllIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo2NzMKK21zZ2lkICIiCisiXG4iCisibWFyayBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisibWVyayByZetsICAga29sIGzqZXIvdGVrcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzExCittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgc3ByaW5nIHJl62wga29sIGzqZXIvdGVrcyIKKworIzogbWFyay5jOjEwNzMKK21zZ2lkICIiCisiXG4iCisiIyBGaWxlIG1hcmtzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBM6mVybWVya2VyczpcbiIKKworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMTA4Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIFNwcmluZ2x5cyAobnV1dHN0ZSBlZXJzdGUpOlxuIgorCisjOiBtYXJrLmM6MTIwMworbXNnaWQgIiIKKyJcbiIKKyIjIEhpc3Rvcnkgb2YgbWFya3Mgd2l0aGluIGZpbGVzIChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgR2Vza2llZGVuaXMgdmFuIG1lcmtlcnMgaW4gbOplcnMgKG51dXRzdGUgdG90IG91ZHN0ZSk6XG4iCisKKyM6IG1hcmsuYzoxMjg2Cittc2dpZCAiTWlzc2luZyAnPiciCittc2dzdHIgIk9udGJyZWtlbmRlICc+JyIKKworIzogbWJ5dGUuYzozOTUKK21zZ2lkICJOb3QgYSB2YWxpZCBjb2RlcGFnZSIKK21zZ3N0ciAiTmllICduIGdlbGRpZ2Uga29kZWJsYWQgbmllIgorCisjOiBtYnl0ZS5jOjMwMTQKK21zZ2lkICJFMjg0OiBDYW5ub3Qgc2V0IElDIHZhbHVlcyIKK21zZ3N0ciAiRTI4NDogS2FuIG5pZSBJQyB3YWFyZGVzIHN0ZWwgbmllIgorCisjOiBtYnl0ZS5jOjMxNjYKK21zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCittc2dzdHIgIkUyODU6IEdlZmFhbCBtZXQgZGllIHNrZXAgdmFuIGludm9lcmtvbnRla3MiCisKKyM6IG1ieXRlLmM6MzMxMworbXNnaWQgIkUyODY6IEZhaWxlZCB0byBvcGVuIGlucHV0IG1ldGhvZCIKK21zZ3N0ciAiRTI4NjogR2VmYWFsIG9tIGludm9lcm1ldG9kZSBvb3AgdGUgbWFhayIKKworIzogbWJ5dGUuYzozMzI0Cittc2dpZCAiRTI4NzogV2FybmluZzogQ291bGQgbm90IHNldCBkZXN0cm95IGNhbGxiYWNrIHRvIElNIgorbXNnc3RyICJFMjg3OiBXYWFyc2t1d2luZzogS29uIG5pZSB1aXR3aXMtdGVydWdyb2VwIG5hIElNIHN0ZWwgbmllIgorCisjOiBtYnl0ZS5jOjMzMzAKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODogaW52b2VybWV0b2RlIG9uZGVyc3RldW4gZ2VlbiBzdHlsIG5pZSIKKworIzogbWJ5dGUuYzozMzg3Cittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IGludm9lcm1ldG9kZSBvbmRlcnN0ZXVuIG5pZSBteSB2b29yLWJld2Vya2luZyB0aXBlIG5pZSIKKworIzogbWJ5dGUuYzozNDYxCittc2dpZCAiRTI5MDogb3Zlci10aGUtc3BvdCBzdHlsZSByZXF1aXJlcyBmb250c2V0IgorbXNnc3RyICJFMjkwOiBvb3ItZGllLXBsZWsgc3R5bCB2ZXJlaXMgZm9udHN0ZWwiCisKKyM6IG1ieXRlLmM6MzQ4OQorbXNnaWQgIkUyOTE6IFlvdXIgR1RLKyBpcyBvbGRlciB0aGFuIDEuMi4zLiBTdGF0dXMgYXJlYSBkaXNhYmxlZCIKK21zZ3N0ciAiRTI5MTogSm91IEdUSysgaXMgb3VlciBhcyAxLjIuMy4gU3RhdHVzYXJlYSBhZmdlc2tha2VsIgorCisjOiBtYnl0ZS5jOjM3MjYKK21zZ2lkICJFMjkyOiBJbnB1dCBNZXRob2QgU2VydmVyIGlzIG5vdCBydW5uaW5nIgorbXNnc3RyICJFMjkyOiBJbnZvZXJtZXRvZGViZWRpZW5lciB2b2VyIG5pZSB1aXQgbmllIgorCisjOiBtZW1maWxlLmM6NDczCittc2dpZCAiRTI5MzogYmxvY2sgd2FzIG5vdCBsb2NrZWQiCittc2dzdHIgIkUyOTM6IGJsb2sgd2FzIG5pZSBnZXNsdWl0IG5pZSIKKworIzogbWVtZmlsZS5jOjk3MgorbXNnaWQgIkUyOTQ6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHJlYWQiCittc2dzdHIgIkUyOTQ6IFNvZWtmb3V0IGluIGxlZXMgdmFuIHJ1aWxs6mVyIgorCisjOiBtZW1maWxlLmM6OTc3Cittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IExlZXNmb3V0IGluIHJ1aWxs6mVyIgorCisjOiBtZW1maWxlLmM6MTAyOQorbXNnaWQgIkUyOTY6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHdyaXRlIgorbXNnc3RyICJFMjk2OiBTb2VrZm91dCBpbiBza3J5ZiB2YW4gcnVpbGzqZXIiCisKKyM6IG1lbWZpbGUuYzoxMDQ3Cittc2dpZCAiRTI5NzogV3JpdGUgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk3OiBTa3J5ZmZvdXQgaW4gcnVpbGzqZXIiCisKKyM6IG1lbWZpbGUuYzoxMjQ0Cittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiBSdWlsbOplciBiZXN0YWFuIGFscmVlZHMhICgnc3ltbGluaycgcHJvYmxlZW0/KSIKKworIzogbWVtbGluZS5jOjI3NQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMD8iCittc2dzdHIgIkUyOTg6IEhldCBuaWUgYmxvayBubyAwIGdla3J5IG5pZT8iCisKKyM6IG1lbWxpbmUuYzozMTUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDE/IgorbXNnc3RyICJFMjk4OiBIZXQgbmllIGJsb2sgbm8gMSBnZWtyeSBuaWU/IgorCisjOiBtZW1saW5lLmM6MzMzCittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAyPyIKK21zZ3N0ciAiRTI5ODogSGV0IG5pZSBibG9rIG5vIDIgZ2VrcnkgbmllPyIKKworIy4gY291bGQgbm90IChyZSlvcGVuIHRoZSBzd2FwIGZpbGUsIHdoYXQgY2FuIHdlIGRvPz8/PworIzogbWVtbGluZS5jOjQ0MworbXNnaWQgIkUzMDE6IE9vcHMsIGxvc3QgdGhlIHN3YXAgZmlsZSEhISIKK21zZ3N0ciAiRTMwMTogSGllcnQsIGRpZSBydWlsbOplciBpcyB3ZWchISEiCisKKyM6IG1lbWxpbmUuYzo0NDgKK21zZ2lkICJFMzAyOiBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwMjogS29uIG5pZSBydWlsbOplciB2ZXJub2VtIG5pZSIKKworIzogbWVtbGluZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIKK21zZ3N0ciAiRTMwMzogS29uIG5pZSBydWlsbOplciBvb3BtYWFrIHZpciBcIiVzXCIgbmllLCBoZXJ3aW5uaW5nIG9ubW9vbnRsaWsiCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiAnbWxfdGltZXN0YW1wJzogSGV0IG5pZSBibG9rIDAgZ2VrcnkgbmllPz8iCisKKyM6IG1lbWxpbmUuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNTogTm8gc3dhcCBmaWxlIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiRTMwNTogR2VlbiBydWlsbOplciBnZXZpbmQgdmlyICVzIG5pZSIKKworIzogbWVtbGluZS5jOjc2NworbXNnaWQgIkVudGVyIG51bWJlciBvZiBzd2FwIGZpbGUgdG8gdXNlICgwIHRvIHF1aXQpOiAiCittc2dzdHIgIlRpayBkaWUgbm9tbWVyIHZhbiBkaWUgcnVpbGzqZXIgb20gdGUgZ2VicnVpayAoMCBvbSB0ZSBzdG9wKSIKKworIzogbWVtbGluZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA2OiBDYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiRTMwNjogS2FuICVzIG5pZSBvb3BtYWFrIG5pZSIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIkthbiBuaWUgYmxvayAwIGxlZXMgdmFuYWYgIgorCisjOiBtZW1saW5lLmM6ODM3Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIlZpbSBoZXQgZGllIHJ1aWxs6mVyIG5pZSBvcGdlZGF0ZWVyIG5pZS4gRGFsayB3YXMgbmlrcyB2ZXJhbmRlciBuaWUuIgorCisjOiBtZW1saW5lLmM6ODQ3IG1lbWxpbmUuYzo4NjQKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltLlxuIgorbXNnc3RyICIga2FuIG5pZSBnZWJydWlrIHdvcmQgbWV0IGhpZXJkaWUgd2Vlcmdhd2UgdmFuIFZpbSBuaWUuXG4iCisKKyM6IG1lbWxpbmUuYzo4NDkKK21zZ2lkICJVc2UgVmltIHZlcnNpb24gMy4wLlxuIgorbXNnc3RyICJHZWJydWlrIFZpbSB3ZWVyZ2F3ZSAzLjAuXG4iCisKKyM6IG1lbWxpbmUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNzogJXMgZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwNzogJXMgbHlrIG5pZSBzb29zICduIFZpbSBydWlsbOplciBuaWUiCisKKyM6IG1lbWxpbmUuYzo4NjgKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgb24gdGhpcyBjb21wdXRlci5cbiIKK21zZ3N0ciAiIGthbiBuaWUgZ2VicnVpayB3b3JkIG9wIGhpZXJkaWUgcmVrZW5hYXIgbmllLlxuIgorCisjOiBtZW1saW5lLmM6ODcwCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICJEaWUgbOplciBpcyBnZXNrZXAgb3AgIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyJvZiBkaWUgbOplciBpcyBiZXNrYWRpZy4iCisKKyM6IG1lbWxpbmUuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgc3dhcCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiR2VicnVpayBydWlsbOplciBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3JpZ2luYWwgZmlsZSBcIiVzXCIiCittc2dzdHIgIk9vcnNwcm9ua2xpa2UgbOplciBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MzQKK21zZ2lkICJFMzA4OiBXYXJuaW5nOiBPcmlnaW5hbCBmaWxlIG1heSBoYXZlIGJlZW4gY2hhbmdlZCIKK21zZ3N0ciAiRTMwODogV2FhcnNrdXdpbmc6IE9vcnNwcm9ua2xpa2UgbOplciBpcyBkYWxrIGdld3lzaWciCisKKyM6IG1lbWxpbmUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwOTogVW5hYmxlIHRvIHJlYWQgYmxvY2sgMSBmcm9tICVzIgorbXNnc3RyICJFMzA5OiBLYW4gbmllIGJsb2NrIDEgbGVlcyB2YW4gJXMiCisKKyM6IG1lbWxpbmUuYzo5NzkKK21zZ2lkICI/Pz9NQU5ZIExJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P0JBSUUgUkXLTFMgV0VHIgorCisjOiBtZW1saW5lLmM6OTk1Cittc2dpZCAiPz8/TElORSBDT1VOVCBXUk9ORyIKK21zZ3N0ciAiPz8/UkXLTFRFTExJTkcgRk9VVElFRiIKKworIzogbWVtbGluZS5jOjEwMDIKK21zZ2lkICI/Pz9FTVBUWSBCTE9DSyIKK21zZ3N0ciAiPz8/TEXLIEJMT0siCisKKyM6IG1lbWxpbmUuYzoxMDI4Cittc2dpZCAiPz8/TElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/UkXLTFMgV0VHIgorCisjOiBtZW1saW5lLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzEwOiBCbG9jayAxIElEIHdyb25nICglcyBub3QgYSAuc3dwIGZpbGU/KSIKK21zZ3N0ciAiRTMxMDogQmxvayAxIHNlIElEIGlzIGZvdXRpZWYgKCVzIG5pZSAnbiAuc3dwIGzqZXIgbmllPykiCisKKyM6IG1lbWxpbmUuYzoxMDY1Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/QkxPSyBXRUciCisKKyM6IG1lbWxpbmUuYzoxMDgxCittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGJlIG1lc3NlZCB1cCIKK21zZ3N0ciAiPz8/IHZhbiBoaWVyIHRvdCA/Pz9FTkQgbWFnIHJl62xzIGRldXJtZWthYXIgd2VlcyIKKworIzogbWVtbGluZS5jOjEwOTcKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiCittc2dzdHIgIj8/PyB2YW4gaGllciB0b3QgPz8/RU5EIG1hZyBkYWFyIHJl62xzIGluZ2V2b2VnL2dlc2tyYXAgd2VlcyIKKworIzogbWVtbGluZS5jOjExMTcKK21zZ2lkICI/Pz9FTkQiCittc2dzdHIgIj8/P0VORCIKKworIzogbWVtbGluZS5jOjExNDMKK21zZ2lkICJFMzExOiBSZWNvdmVyeSBJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiRTMxMTogSGVyd2lubmluZyBvbmRlcmJyZWVrIgorCisjOiBtZW1saW5lLmM6MTE0NQorbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIiIKKyJFMzEyOiBGb3V0ZSByYWFrZ2VzaWVuIGdlZHVyZW5kZSBoZXJ3aW5uaW5nOyBzb2VrIHZpciByZetscyB3YXQgYmVnaW4gbWV0ID8/PyIKKworIzogbWVtbGluZS5jOjExNDgKK21zZ2lkICJSZWNvdmVyeSBjb21wbGV0ZWQuIFlvdSBzaG91bGQgY2hlY2sgaWYgZXZlcnl0aGluZyBpcyBPSy4iCittc2dzdHIgIkhlcndpbm5pbmcgaXMga2xhYXIuIEt5ayBvZiBhbGxlcyByZWcgaXMuIgorCisjOiBtZW1saW5lLmM6MTE0OQorbXNnaWQgIiIKKyJcbiIKKyIoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWVcbiIKK21zZ3N0ciAiIgorIlxuIgorIihKeSB3aWwgZGFsayBkaWUgbOplciBzdG9vciBvbmRlciAnbiBhbmRlciBuYWFtXG4iCisKKyM6IG1lbWxpbmUuYzoxMTUwCittc2dpZCAiYW5kIHJ1biBkaWZmIHdpdGggdGhlIG9yaWdpbmFsIGZpbGUgdG8gY2hlY2sgZm9yIGNoYW5nZXMpXG4iCittc2dzdHIgImVuIGRpdCBcImRpZmZcIiB0ZWVuIGRpZSBvb3JzcHJvbmtsaWtlIGzqZXIgb20gd3lzaWdpbmdzIHRlIHNvZWspXG4iCisKKyM6IG1lbWxpbmUuYzoxMTUxCittc2dpZCAiIgorIkRlbGV0ZSB0aGUgLnN3cCBmaWxlIGFmdGVyd2FyZHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJWZXJ3eWRlciBkaWUgLnN3cC1s6mVyIG5hIGRpZSB0eWQuXG4iCisiXG4iCisKKyMuIHVzZSBtc2coKSB0byBzdGFydCB0aGUgc2Nyb2xsaW5nIHByb3Blcmx5CisjOiBtZW1saW5lLmM6MTIwNworbXNnaWQgIlN3YXAgZmlsZXMgZm91bmQ6IgorbXNnc3RyICJSdWlsbOplcnMgZ2V2aW5kOiIKKworIzogbWVtbGluZS5jOjEzODUKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAgSW4gaHVpZGlnZSBnaWRzOlxuIgorCisjOiBtZW1saW5lLmM6MTM4NworbXNnaWQgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorbXNnc3RyICIgICBXYXQgZ2VzcGVzaWZpc2VlcmRlIG5hYW0gZ2VicnVpazpcbiIKKworIzogbWVtbGluZS5jOjEzOTEKK21zZ2lkICIgICBJbiBkaXJlY3RvcnkgIgorbXNnc3RyICIgICBJbiBnaWRzICIKKworIzogbWVtbGluZS5jOjE0MDkKK21zZ2lkICIgICAgICAtLSBub25lIC0tXG4iCittc2dzdHIgIiAgICAgIC0tIGdlZW4gLS1cbiIKKworIzogbWVtbGluZS5jOjE0ODEKK21zZ2lkICIgICAgICAgICAgb3duZWQgYnk6ICIKK21zZ3N0ciAiICAgICAgICAgIGVpZW5hYXI6ICIKKworIzogbWVtbGluZS5jOjE0ODMKK21zZ2lkICIgICBkYXRlZDogIgorbXNnc3RyICIgICBnZWRhdGVlcjogIgorCisjOiBtZW1saW5lLmM6MTQ4NyBtZW1saW5lLmM6MzY4MAorbXNnaWQgIiAgICAgICAgICAgICBkYXRlZDogIgorbXNnc3RyICIgICAgICAgICAgICAgZ2VkYXRlZXI6ICIKKworIzogbWVtbGluZS5jOjE1MDMKK21zZ2lkICIgICAgICAgICBbZnJvbSBWaW0gdmVyc2lvbiAzLjBdIgorbXNnc3RyICIgICAgICAgICBbdmFuIFZpbSB3ZWVyZ2F3ZSAzLjBdIgorCisjOiBtZW1saW5lLmM6MTUwNworbXNnaWQgIiAgICAgICAgIFtkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlXSIKK21zZ3N0ciAiICAgICAgICAgW2x5ayBuaWUgc29vcyAnbiBWaW0gcnVpbGzqZXIgbmllXSIKKworIzogbWVtbGluZS5jOjE1MTEKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgICAgbOplcm5hYW06ICIKKworIzogbWVtbGluZS5jOjE1MjMKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgIG1vZGlmaWVkOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgZ2V3eXNpZzogIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIllFUyIKK21zZ3N0ciAiSkEiCisKKyM6IG1lbWxpbmUuYzoxNTI0Cittc2dpZCAibm8iCittc2dzdHIgIm5lZSIKKworIzogbWVtbGluZS5jOjE1MjgKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgdXNlciBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBnZWJydWlrZXJzbmFhbTogIgorCisjOiBtZW1saW5lLmM6MTUzNQorbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgICBnYXNoZWVybmFhbTogIgorCisjOiBtZW1saW5lLmM6MTUzNworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIGdhc2hlZXJuYWFtOiAiCisKKyM6IG1lbWxpbmUuYzoxNTQzCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgcHJvc2VzIElEOiAiCisKKyM6IG1lbWxpbmUuYzoxNTQ5Cittc2dpZCAiIChzdGlsbCBydW5uaW5nKSIKK21zZ3N0ciAiIChub2cgc3RlZWRzIGFhbiBkaWUgdWl0dm9lcikiCisKKyM6IG1lbWxpbmUuYzoxNTYxCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbbmllIGJydWlrYmFhciBtZXQgaGllcmRpZSB3ZWVyZ2F3ZSB2YW4gVmltIG5pZV0iCisKKyM6IG1lbWxpbmUuYzoxNTY0Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIG9uIHRoaXMgY29tcHV0ZXJdIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgW25pZSBicnVpa2JhYXIgb3AgaGllcmRpZSByZWtlbmFhciBuaWVdIgorCisjOiBtZW1saW5lLmM6MTU2OQorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iCittc2dzdHIgIiAgICAgICAgIFtrYW4gbmllIGdlbGVlcyB3b3JkIG5pZV0iCisKKyM6IG1lbWxpbmUuYzoxNTczCittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSBvcGVuZWRdIgorbXNnc3RyICIgICAgICAgICBba2FuIG5pZSBvb3BnZW1hYWsgd29yZCBuaWVdIgorCisjOiBtZW1saW5lLmM6MTc2MworbXNnaWQgIkUzMTM6IENhbm5vdCBwcmVzZXJ2ZSwgdGhlcmUgaXMgbm8gc3dhcCBmaWxlIgorbXNnc3RyICJFMzEzOiBLYW4gbmllIGJld2FhciBuaWUsIGRhYXIgaXMgZ2VlbiBydWlsbOplciBuaWUiCisKKyM6IG1lbWxpbmUuYzoxODE2Cittc2dpZCAiRmlsZSBwcmVzZXJ2ZWQiCittc2dzdHIgIkzqZXIgYmV3YWFyIgorCisjOiBtZW1saW5lLmM6MTgxOAorbXNnaWQgIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIKK21zZ3N0ciAiRTMxNDogS29uIG5pZSBiZXdhYXIgbmllIgorCisjOiBtZW1saW5lLmM6MTg4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE1OiBtbF9nZXQ6IGludmFsaWQgbG51bTogJWxkIgorbXNnc3RyICJFMzE1OiAnbWxfZ2V0Jzogb25nZWxkaWdlICdsbnVtJzogJWxkIgorCisjOiBtZW1saW5lLmM6MTkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE2OiBtbF9nZXQ6IGNhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzE2OiAnbWxfZ2V0Jzoga2FuIHJl62wgJWxkIG5pZSB2aW5kIG5pZSIKKworIzogbWVtbGluZS5jOjIzMDMKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDMiCittc2dzdHIgIkUzMTc6IHd5c2VyIGJsb2sgaWQgdmVya2VlcmQgMyIKKworIzogbWVtbGluZS5jOjIzODMKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgIidzdGFja19pZHgnIG1vZXQgMCB3ZWVzIgorCisjOiBtZW1saW5lLmM6MjQ0NQorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODogVGUgdmVlbCBibG9ra2Ugb3BnZWRhdGVlcj8iCisKKyM6IG1lbWxpbmUuYzoyNjAyCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiB3eXNlciBibG9rIGlkIHZlcmtlZXJkIDQiCisKKyM6IG1lbWxpbmUuYzoyNjI5Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAidmVyd3lkZXIgYmxvayAxPyIKKworIzogbWVtbGluZS5jOjI4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6IEthbiBuaWUgcmXrbCAlbGQgdmluZCBuaWUiCisKKyM6IG1lbWxpbmUuYzozMDcyCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyIKK21zZ3N0ciAiRTMxNzogd3lzZXIgYmxvayBpZCB2ZXJrZWVyZCIKKworIzogbWVtbGluZS5jOjMwODgKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgIidwZV9saW5lX2NvdW50JyBpcyBudWwiCisKKyM6IG1lbWxpbmUuYzozMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjI6IGxpbmUgbnVtYmVyIG91dCBvZiByYW5nZTogJWxkIHBhc3QgdGhlIGVuZCIKK21zZ3N0ciAiRTMyMjogcmXrbG5vbW1lciBidWl0ZSBwZXJrZTogJWxkIHZlcmJ5IGRpZSBlaW5kZSIKKworIzogbWVtbGluZS5jOjMxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMzogbGluZSBjb3VudCB3cm9uZyBpbiBibG9jayAlbGQiCittc2dzdHIgIkUzMjM6IHJl62x0ZWxsaW5nIG1hZyB2ZXJrZWVyZCB3ZWVzIGluIGJsb2sgJWxkIgorCisjOiBtZW1saW5lLmM6MzE3MAorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICJTdGFwZWwgZ3Jvb3R0ZSB2ZXJob29nIgorCisjOiBtZW1saW5lLmM6MzIxNgorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMiIKK21zZ3N0ciAiRTMxNzogd3lzZXIgYmxvayBpZCB2ZXJrZWVyZCAyIgorCisjOiBtZW1saW5lLmM6MzY3MAorbXNnaWQgIkUzMjU6IEFUVEVOVElPTiIKK21zZ3N0ciAiRTMyNTogTEVUIE9QIgorCisjOiBtZW1saW5lLmM6MzY3MQorbXNnaWQgIiIKKyJcbiIKKyJGb3VuZCBhIHN3YXAgZmlsZSBieSB0aGUgbmFtZSBcIiIKK21zZ3N0ciAiIgorIlxuIgorIkhldCAnbiBydWlsbOplciBnZXZpbmQgbWV0IGRpZSBuYWFtIFwiIgorCisjOiBtZW1saW5lLmM6MzY3NQorbXNnaWQgIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIKK21zZ3N0ciAiVHlkZW5zIG9vcG1hYWsgdmFuIGzqZXIgXCIiCisKKyM6IG1lbWxpbmUuYzozNjg0Cittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgIE5VV0VSIGFzIGRpZSBydWlsbOplciFcbiIKKworIy4gU29tZSBvZiB0aGVzZSBtZXNzYWdlcyBhcmUgbG9uZyB0byBhbGxvdyB0cmFuc2xhdGlvbiB0bworIy4gKiBvdGhlciBsYW5ndWFnZXMuCisjOiBtZW1saW5lLmM6MzY4OAorbXNnaWQgIiIKKyJcbiIKKyIoMSkgQW5vdGhlciBwcm9ncmFtIG1heSBiZSBlZGl0aW5nIHRoZSBzYW1lIGZpbGUuXG4iCisiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIGJlIGNhcmVmdWwgbm90IHRvIGVuZCB1cCB3aXRoIHR3b1xuIgorIiAgICBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGZpbGUgd2hlbiBtYWtpbmcgY2hhbmdlcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigxKSAnbiBBbmRlciBwcm9ncmFtIG1hZyBiZXNpZyB3ZWVzIG1ldCBoaWVyZGllIGzqZXIuXG4iCisiICAgIEluZGllbiB3ZWwsIHBhcyBvcCBvbSBuaWUgbWV0IHR3ZWUgdmVyc2tpbGxlbmRlIHdlZXJnYXdlc1xuIgorIiAgICB2YW4gZGllc2VsZmRlIGzqZXIgdGUgc2l0IHdhbm5lZXIgdmVyYW5kZXJpbmdlIGdlbWFhayB3b3JkIG5pZS5cbiIKKworIzogbWVtbGluZS5jOjM2ODkKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgU3RvcCwgb2YgZ2FhbiB2ZXJzaWd0aWcgdm9vcnQuXG4iCisKKyM6IG1lbWxpbmUuYzozNjkwCittc2dpZCAiIgorIlxuIgorIigyKSBBbiBlZGl0IHNlc3Npb24gZm9yIHRoaXMgZmlsZSBjcmFzaGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDIpICduIEJld2Vya2luZ3Nlc3NpZSB2YW4gaGllcmRpZSBs6mVyIGhldCBpbmVlbmdlc3RvcnQuXG4iCisKKyM6IG1lbWxpbmUuYzozNjkxCittc2dpZCAiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSBcIjpyZWNvdmVyXCIgb3IgXCJ2aW0gLXIgIgorbXNnc3RyICIgICAgSW5kaWVuIHdlbCwgZ2VicnVpayBcIjpyZWNvdmVyXCIgb2YgXCJ2aW0gLXIiCisKKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgb20gZGllIHZlcmFuZGVyaW5nZSB0ZSBoZXJ3aW4gKHNpZW4gXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKKworIzogbWVtbGluZS5jOjM2OTQKK21zZ2lkICIgICAgSWYgeW91IGRpZCB0aGlzIGFscmVhZHksIGRlbGV0ZSB0aGUgc3dhcCBmaWxlIFwiIgorbXNnc3RyICIgICAgSW5kaWVuIGp5IGRpdCBhbHJlZWRzIGdlZG9lbiBoZXQsIHZlcnd5ZGVyIGRpZSBydWlsbOplciBcIiIKKworIzogbWVtbGluZS5jOjM2OTYKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgb20gaGllcmRpZSBib29kc2thcCB0ZSB2ZXJteS5cbiIKKworIzogbWVtbGluZS5jOjM3MTAgbWVtbGluZS5jOjM3MTQKK21zZ2lkICJTd2FwIGZpbGUgXCIiCittc2dzdHIgIlJ1aWxs6mVyIFwiIgorCisjOiBtZW1saW5lLmM6MzcxMSBtZW1saW5lLmM6MzcxNworbXNnaWQgIlwiIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiXCIgYmVzdGFhbiBhbHJlZWRzISIKKworIzogbWVtbGluZS5jOjM3MjAKK21zZ2lkICJWSU0gLSBBVFRFTlRJT04iCittc2dzdHIgIlZJTSAtIExFVCBPUCIKKworIzogbWVtbGluZS5jOjM3MjIKK21zZ2lkICJTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICJSdWlsbOplciBiZXN0YWFuIGFscmVlZHMhIgorCisjOiBtZW1saW5lLmM6MzcyNgorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0IgorbXNnc3RyICIiCisiJk1hYWsgYXMgbGVlcy1hbGxlZW4gb29wXG4iCisiJkJld2VyayBpbiBlbGsgZ2V2YWxcbiIKKyImSGVyd2luXG4iCisiJlN0b3AiCisKKyM6IG1lbWxpbmUuYzozNzI4Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisiJk1hYWsgYXMgbGVlcy1hbGxlZW4gb29wXG4iCisiJkJld2VyayBpbiBlbGsgZ2V2YWxcbiIKKyImSGVyd2luXG4iCisiJlN0b3BcbiIKKyJTJmtyYXAgZGl0IgorCisjOiBtZW1saW5lLmM6Mzc4MQorbXNnaWQgIkUzMjY6IFRvbyBtYW55IHN3YXAgZmlsZXMgZm91bmQiCittc2dzdHIgIkUzMjY6IFRlIHZlZWwgcnVpbGzqZXJzIGdldmluZCIKKworIzogbWVudS5jOjY0Cittc2dpZCAiRTMyNzogUGFydCBvZiBtZW51LWl0ZW0gcGF0aCBpcyBub3Qgc3ViLW1lbnUiCittc2dzdHIgIkUzMjc6IERlZWwgdmFuIGtpZXNseXMtaXRlbSBwYWQgaXMgbmllICduIHN1Yi1raWVzbHlzIG5pZSIKKworIzogbWVudS5jOjY1Cittc2dpZCAiRTMyODogTWVudSBvbmx5IGV4aXN0cyBpbiBhbm90aGVyIG1vZGUiCittc2dzdHIgIkUzMjg6IEtpZXNseXMgYmVzdGFhbiBzbGVncyBpbiAnbiBhbmRlciBtb2R1cyIKKworIzogbWVudS5jOjY2Cittc2dpZCAiRTMyOTogTm8gbWVudSBvZiB0aGF0IG5hbWUiCittc2dzdHIgIkUzMjk6IEdlZW4ga2llc2x5cyBtZXQgZGFhcmRpZSBuYWFtIG5pZSIKKworIzogbWVudS5jOjUwMworbXNnaWQgIkUzMzA6IE1lbnUgcGF0aCBtdXN0IG5vdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzA6IEtpZXNseXNwYWQgbW9lbmllIGxlaSBuYSAnbiBzdWIta2llc2x5cyBuaWUiCisKKyM6IG1lbnUuYzo1NDIKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTogTW9lbmllIGtpZXNseXNpdGVtcyBkaXJlayBieSBraWVzbHlzc3RhYWYgdm9lZyBuaWUiCisKKyM6IG1lbnUuYzo1NDgKK21zZ2lkICJFMzMyOiBTZXBhcmF0b3IgY2Fubm90IGJlIHBhcnQgb2YgYSBtZW51IHBhdGgiCittc2dzdHIgIkUzMzI6IFZlcmRlbGVyIGthbiBuaWUgZGVlbCB3ZWVzIHZhbiBraWVzbHlzcGFkIG5pZSIKKworIy4gTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtZW51LmM6MTA2MworbXNnaWQgIiIKKyJcbiIKKyItLS0gTWVudXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEtpZXNseXN0ZSAtLS0iCisKKyM6IG1lbnUuYzoxOTg5Cittc2dpZCAiVGVhciBvZmYgdGhpcyBtZW51IgorbXNnc3RyICJTa2V1ciBkaWUga2llc2x5cyBhZiIKKworIzogbWVudS5jOjIwNTQKK21zZ2lkICJFMzMzOiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgbWVudSBpdGVtIgorbXNnc3RyICJFMzMzOiBLaWVzbHlzcGFkIG1vZXQgbGVpIG5hICduIGtpZXNseXNpdGVtIgorCisjOiBtZW51LmM6MjA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzM0OiBNZW51IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUzMzQ6IEtpZXNseXMgbmllIGdldmluZCBuaWU6ICVzIgorCisjOiBtZW51LmM6MjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzM1OiBNZW51IG5vdCBkZWZpbmVkIGZvciAlcyBtb2RlIgorbXNnc3RyICJFMzM1OiBLaWVzbHlzIG5pZSBnZWRlZmluaWVlciB2aXIgJXMgbW9kdXMgbmllIgorCisjOiBtZW51LmM6MjE4MQorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogS2llc2x5c3BhZCBtb2V0IGxlaSBuYSAnbiBzdWIta2llc2x5cyIKKworIzogbWVudS5jOjIyMDIKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IEtpZXNseXMgbmllIGdldmluZCBuaWUgLSBtYWFrIHNla2VyIG9vciBkaWUga2llc2x5cyBuYW1lIgorCisjOiBtZXNzYWdlLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVjdGVkIHdoaWxlIHByb2Nlc3NpbmcgJXM6IgorbXNnc3RyICJGb3V0IG9udGRlayB0eWRlbnMgdmVyd2Vya2luZyB2YW4gJXM6ICIKKworIzogbWVzc2FnZS5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICU0bGQ6IgorbXNnc3RyICJyZetsICU0bGQ6IgorCisjOiBtZXNzYWdlLmM6NTIzCittc2dpZCAiW3N0cmluZyB0b28gbG9uZ10iCittc2dzdHIgIltzdHJpbmcgdGUgbGFua10iCisKKyM6IG1lc3NhZ2UuYzo2NjkKK21zZ2lkICJNZXNzYWdlcyBtYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiIKK21zZ3N0ciAiQm9vZHNrYXBwZSBvbmRlcmhvdWVyczogRGFuaWUgUm91eCBlbiBKZWFuIEpvcmRhYW4gPGRyb3V4QHR1a3MuY28uemE+IgorCisjOiBtZXNzYWdlLmM6ODgxCittc2dpZCAiSW50ZXJydXB0OiAiCittc2dzdHIgIk9uZGVyYnJlZWs6ICIKKworIzogbWVzc2FnZS5jOjg4NAorbXNnaWQgIkhpdCBFTlRFUiB0byBjb250aW51ZSIKK21zZ3N0ciAiRHJ1ayBFTlRFUiBvbSB2b29ydCB0ZSBnYWFuIgorCisjOiBtZXNzYWdlLmM6ODg2Cittc2dpZCAiSGl0IEVOVEVSIG9yIHR5cGUgY29tbWFuZCB0byBjb250aW51ZSIKK21zZ3N0ciAiRHJ1ayBFTlRFUiBvZiB0aWsgJ24gYmV2ZWwgb20gdm9vcnQgdGUgZ2FhbiIKKworIzogbWVzc2FnZS5jOjE5NDAKK21zZ2lkICItLSBNb3JlIC0tIgorbXNnc3RyICItLSBNZWVyIC0tIgorCisjOiBtZXNzYWdlLmM6MTk0MworbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiByZetsLCBTUEFDRS9iOiBibGFkc3ksIGQvdTogaGFsd2UgYmxhZHN5LCBxOiBsb3MgZGl0IgorCisjOiBtZXNzYWdlLmM6MTk0NAorbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQ6IHJl62wsIFNQQUNFOiBibGFkc3ksIGQ6IGhhbHdlIGJsYWRzeSwgcTogbG9zIGRpdCIKKworIzogbWVzc2FnZS5jOjI0MTkgbWVzc2FnZS5jOjI0MzQKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAiVnJhYWciCisKKyM6IG1lc3NhZ2UuYzoyNDIxCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm8iCittc2dzdHIgIiIKKyImSmFcbiIKKyImTmVlIgorCisjOiBtZXNzYWdlLmM6MjQzNgorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZKYVxuIgorIiZOZWVcbiIKKyImS2Fuc2VsbGVlciIKKworIzogbWVzc2FnZS5jOjI0NTQKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIlNhdmUgJkFsbFxuIgorIiZEaXNjYXJkIEFsbFxuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImSmFcbiIKKyImTmVlXG4iCisiU3Rvb3IgJmFsbGVzXG4iCisiJkdvb2kgYWxsZXMgd2VnXG4iCisiJkthbnNlbGxlZXIiCisKKyM6IG1lc3NhZ2UuYzoyNDk0Cittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAiU3Rvb3IgTOplciBkaWFsb29naG9ra2llIgorCisjOiBtZXNzYWdlLmM6MjQ5NgorbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIk1hYWsgbOplciBvb3AgZGlhbG9vZ2hva2tpZSIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzoyNTQ3Cittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIkUzMzg6IEphbW1lciwgbOplcmJsYWFpZXIgbmllIGJlc2tpa2JhYXIgaW4ga29uc29sZS1tb2R1cyBuaWUiCisKKyM6IG1pc2MxLmM6MjQ0OQorbXNnaWQgIlcxMDogV2FybmluZzogQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlIgorbXNnc3RyICJXMTA6IFdhYXJza3V3aW5nOiBKeSB3eXNpZyBhYW4gJ24gbGVlc2FsbGVlbiBs6mVyIgorCisjOiBtaXNjMS5jOjI2NzgKK21zZ2lkICIxIG1vcmUgbGluZSIKK21zZ3N0ciAiMSByZetsIG1lZXIiCisKKyM6IG1pc2MxLmM6MjY4MAorbXNnaWQgIjEgbGluZSBsZXNzIgorbXNnc3RyICIxIHJl62wgbWluZGVyIgorCisjOiBtaXNjMS5jOjI2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIG1vcmUgbGluZXMiCittc2dzdHIgIiVsZCBtZWVyIHJl62xzIgorCisjOiBtaXNjMS5jOjI2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGZld2VyIGxpbmVzIgorbXNnc3RyICIlbGQgbWluZGVyIHJl62xzIgorCisjOiBtaXNjMS5jOjI2OTAKK21zZ2lkICIgKEludGVycnVwdGVkKSIKK21zZ3N0ciAiIChPbmRlcmJyZWVrKSIKKworIzogbWlzYzEuYzo2MjQ1Cittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTogYmV3YWFyIGzqZXJzLi4uXG4iCisKKyMuIGNsb3NlIGFsbCBtZW1maWxlcywgd2l0aG91dCBkZWxldGluZworIzogbWlzYzEuYzo2MjU1Cittc2dpZCAiVmltOiBGaW5pc2hlZC5cbiIKK21zZ3N0ciAiVmltOiBLbGFhci5cbiIKKworIzogbWlzYzIuYzo2NDcgbWlzYzIuYzo2NjMKK21zZ2lkICJFUlJPUjogIgorbXNnc3RyICJGT1VUOiAiCisKKyM6IG1pc2MyLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJbYnl0ZXNdIHRvdGFsIGFsbG9jLWZyZWVkICVsdS0lbHUsIGluIHVzZSAlbHUsIHBlYWsgdXNlICVsdVxuIgorbXNnc3RyICIiCisiXG4iCisiW2dyZXBlXSB0b3RhYWwgJ2FsbG9jJy12cnlnZWxhYXQgJWx1LSVsdSwgaW4gZ2VicnVpayAlbHUsIHBpZWtnZWJydWlrICVsdVxuIgorCisjOiBtaXNjMi5jOjY2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiW2NhbGxzXSB0b3RhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWwgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCittc2dzdHIgIiIKKyJbcm9lcGVdIHRvdGFhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWxlIGZyZWUoKSdzICVsdVxuIgorIlxuIgorCisjOiBtaXNjMi5jOjcyNAorbXNnaWQgIkUzNDA6IExpbmUgaXMgYmVjb21pbmcgdG9vIGxvbmciCittc2dzdHIgIkUzNDA6IFLrZWwgd29yZCB0ZSBsYW5rIgorCisjOiBtaXNjMi5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQxOiBJbnRlcm5hbCBlcnJvcjogbGFsbG9jKCVsZCwgKSIKK21zZ3N0ciAiRTM0MTogSW50ZXJuZSBmb3V0OiAnbGFsbG9jKCVsZCwgKSciCisKKyM6IG1pc2MyLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDI6IE91dCBvZiBtZW1vcnkhICAoYWxsb2NhdGluZyAlbHUgYnl0ZXMpIgorbXNnc3RyICJFMzQyOiBHZWhldWUgaXMgb3AhIChrZW4gJWx1IGdyZXBlIHRvZSkiCisKKyM6IG1pc2MyLmM6MjUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAiUm9lcCBkb3Agb20gdWl0IHRlIHZvZXI6IFwiJXNcIiIKKworIzogbWlzYzIuYzoyNzA2IG1pc2MyLmM6NTE0OCBvcHRpb24uYzo0NTg0Cittc2dpZCAiTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiT250YnJla2VuZGUgZHViYmVscHVudCIKKworIzogbWlzYzIuYzoyNzA4IG1pc2MyLmM6MjczNQorbXNnaWQgIklsbGVnYWwgbW9kZSIKK21zZ3N0ciAiT25nZWxkaWdlIG1vZHVzIgorCisjOiBtaXNjMi5jOjI3NzQKK21zZ2lkICJJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIk9uZ2VsZGlnZSBtdWlzdm9ybSIKKworIzogbWlzYzIuYzoyODE0IG1pc2MyLmM6NTE2OAorbXNnaWQgImRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJzeWZlciB2ZXJ3YWciCisKKyM6IG1pc2MyLmM6MjgxOQorbXNnaWQgIklsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAiT25nZWxkaWdlIHBlcnNlbnRhc2llIgorCisjOiBtaXNjMi5jOjMxMjMKK21zZ2lkICJFbnRlciBlbmNyeXB0aW9uIGtleTogIgorbXNnc3RyICJWb2VyIGVua3JpcHNpZS1zbGV1dGVsIGluOiAiCisKKyM6IG1pc2MyLmM6MzEyNAorbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIlZvZXIgZGllIHNsZXV0ZWwgd2VlciBpbjogIgorCisjOiBtaXNjMi5jOjMxMzQKK21zZ2lkICJLZXlzIGRvbid0IG1hdGNoISIKK21zZ3N0ciAiU2xldXRlbHMgdmVyc2tpbCEiCisKKyM6IG1pc2MyLmM6MzY0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTM0MzogSW52YWxpZCBwYXRoOiAnKipbbnVtYmVyXScgbXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIG9yIGJlICIKKyJmb2xsb3dlZCBieSAnJXMnLiIKK21zZ3N0ciAiIgorIkUzNDM6IE9uZ2VsZGlnZSBwYWQ6ICcqKltub21tZXJdJyBtb2V0IGFhbiBkaWUgZWluZGUgdmFuICduIHBhZCB3ZWVzIG9mICIKKyJnZXZvbGcgd2VlcyBkZXVyICVzJy4iCisKKyM6IG1pc2MyLmM6NDkwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ0OiBDYW4ndCBmaW5kIGRpcmVjdG9yeSBcIiVzXCIgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ0OiBLYW4gbmllIGdpZHMgXCIlc1wiIGluICdjZHBhdGgnIHZpbmQgbmllIgorCisjOiBtaXNjMi5jOjQ5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NTogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFMzQ1OiBLYW4gbOplciBcIiVzXCIgbmllIHZpbmQgaW4gcGFkIG5pZSIKKworIzogbWlzYzIuYzo0OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDY6IE5vIG1vcmUgZGlyZWN0b3J5IFwiJXNcIiBmb3VuZCBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDY6IEdlZW4gZ2lkcyBcIiVzXCIgbWVlciBnZXZpbmQgaW4gJ2NkcGF0aCcgbmllIgorCisjOiBtaXNjMi5jOjQ5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiBHZWVuIGzqZXIgXCIlc1wiIG1lZXIgZ2V2aW5kIGluIHBhZCBuaWUiCisKKyM6IG1pc2MyLmM6NTE2MAorbXNnaWQgIklsbGVnYWwgY29tcG9uZW50IgorbXNnc3RyICJPbmdlbGRpZ2Uga29tcG9uZW50IgorCisjOiBub3JtYWwuYzoyODEzCittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAiV2FhcnNrdXdpbmc6IHRlcm1pbmFhbCBrYW4gbmllIHRla3MgdWl0bGlnIG5pZSIKKworIzogbm9ybWFsLmM6MzAwOAorbXNnaWQgIkUzNDg6IE5vIHN0cmluZyB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDg6IEdlZW4gc3RyaW5nIG9uZGVyIGxvcGVyIG5pZSIKKworIzogbm9ybWFsLmM6MzAxMAorbXNnaWQgIkUzNDk6IE5vIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ5OiBHZWVuIGlkZW50aWZpc2VlcmRlciBvbmRlciBsb3BlciBuaWUiCisKKyM6IG5vcm1hbC5jOjQxNzUKK21zZ2lkICJFMzUyOiBDYW5ub3QgZXJhc2UgZm9sZHMgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MjogS2FuIG5pZSB2b3VlIHZlcnd5ZGVyIG1ldCBodWlkaWdlICdmb2xkbWV0aG9kJyBuaWUiCisKKyMgSGV0IHRlIGRvZW4gbWV0IDwgZW4gPgorIzogb3BzLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkIDEgdGltZSIKK21zZ3N0ciAiMSByZetsIDEga2VlciBnZS0lcyIKKworIzogb3BzLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIxIHJl62wgZ2UtJXMgJWQga2VlciIKKworIzogb3BzLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkIDEgdGltZSIKK21zZ3N0ciAiJWxkIHJl62xzIDEga2VlciBnZS0lcyIKKworIzogb3BzLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIlbGQgcmXrbHMgZ2UtJXMgJWQga2VlciIKKworIzogb3BzLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB0byBpbmRlbnQuLi4gIgorbXNnc3RyICIlbGQgcmXrbHMgb20gaW4gdGUga2VlcC4uLiIKKworIzogb3BzLmM6Njg4Cittc2dpZCAiMSBsaW5lIGluZGVudGVkICIKK21zZ3N0ciAiMSByZetsIGluZ2VrZWVwICIKKworIzogb3BzLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBpbmRlbnRlZCAiCittc2dzdHIgIiVsZCByZetscyBpbmdla2VlcCAiCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNTI4Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgImthbiBuaWUgcGx1ayBuaWU6IHZlcnd5ZGVyIGluIGVsayBnZXZhbCIKKworIzogb3BzLmM6MjAxOAorbXNnaWQgIjEgbGluZSB+ZWQiCittc2dzdHIgIjEgcmXrbCBnZS1+IgorCisjOiBvcHMuYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB+ZWQiCittc2dzdHIgIiVsZCByZetscyBnZS1+IgorCisjOiBvcHMuYzoyMzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZyZWVpbmcgJWxkIGxpbmVzIgorbXNnc3RyICJsYWF0ICVsZCByZetscyBnYWFuIgorCisjOiBvcHMuYzoyNjU4Cittc2dpZCAiMSBsaW5lIHlhbmtlZCIKK21zZ3N0ciAiMSByZetsIGdlcGx1ayIKKworIzogb3BzLmM6MjY2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgeWFua2VkIgorbXNnc3RyICIlbGQgcmXrbHMgZ2VwbHVrIgorCisjOiBvcHMuYzoyOTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTM6IE5vdGhpbmcgaW4gcmVnaXN0ZXIgJXMiCittc2dzdHIgIkUzNTM6IE5pa3MgaW4gcmVnaXN0ZXIgJXMgbmllIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG9wcy5jOjM0NTQKK21zZ2lkICIiCisiXG4iCisiLS0tIFJlZ2lzdGVycyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKKworIzogb3BzLmM6NDU2NQorbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAiT25nZWxkaWdlIHJlZ2lzdGVybmFhbSIKKworIzogb3BzLmM6NDY0NQorbXNnaWQgIiIKKyJcbiIKKyIjIFJlZ2lzdGVyczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorCisjOiBvcHMuYzo0NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIKK21zZ3N0ciAiT25iZWtlbmRlIHJlZ2lzdGVydGlwZSAlZCIKKworIzogb3BzLmM6NTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU0OiBJbnZhbGlkIHJlZ2lzdGVyIG5hbWU6ICclcyciCittc2dzdHIgIkUzNTQ6IE9uZ2VsZGlnZSByZWdpc3Rlcm5hYW06ICclcyciCisKKyM6IG9wcy5jOjUzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIENvbHM7ICIKK21zZ3N0ciAiJWxkIEtvbG9tbWU7ICIKKworIzogb3BzLmM6NTQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiCittc2dzdHIgIiVzJWxkIHZhbiAlbGQgcmXrbHMgZ2VraWVzOyAlbGQgdmFuICVsZCBXb29yZGU7ICVsZCB2YW4gJWxkIEdyZXBlIgorCisjIG5qajogS2FyYWt0ZXJzIGthbiBtZWVyZGVyZSBncmVwZSB3ZWVzLCBzaWVuICc6aCBtdWx0aWJ5dGUnCisjOiBvcHMuYzo1NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbCAlcyBvZiAlczsgTGluZSAlbGQgb2YgJWxkOyBXb3JkICVsZCBvZiAlbGQ7IEJ5dGUgJWxkIG9mICVsZCIKK21zZ3N0ciAiS29sICVzIHZhbiAlczsgUmXrbCAlbGQgdmFuICVsZDsgV29vcmQgJWxkIHZhbiAlbGQ7IEdyZWVwICVsZCB2YW4gJWxkIgorCisjOiBvcHMuYzo1NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCB2aXIgJ0JPTScpIgorCisjOiBvcHRpb24uYzoxOTg5Cittc2dpZCAiVGhhbmtzIGZvciBmbHlpbmcgVmltIgorbXNnc3RyICJEYW5raWUgZGF0IGp5IHZsaWVnIG1ldCBWaW0iCisKKyM6IG9wdGlvbi5jOjMxNzUKK21zZ2lkICJPcHRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiT3BzaWUgaXMgbmllIG9uZGVyc3RldW4gbmllIgorCisjOiBvcHRpb24uYzozMjAwCittc2dpZCAiTm90IGFsbG93ZWQgaW4gYSBtb2RlbGluZSIKK21zZ3N0ciAiTmllIHRvZWdlbGFhdCBpbiAnbiBtb2R1c2x5biBuaWUiCisKKyM6IG9wdGlvbi5jOjMyNTYKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0TGFhcyBnZXN0ZWwgdmFuYWYgIgorCisjOiBvcHRpb24uYzozMzk1Cittc2dpZCAiTnVtYmVyIHJlcXVpcmVkIGFmdGVyID0iCittc2dzdHIgIk5vbW1lciB2ZXJlaXMgbmEgPSIKKworIzogb3B0aW9uLmM6MzcwMiBvcHRpb24uYzo0MzA5Cittc2dpZCAiTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIk5pZSBnZXZpbmQgaW4gJ3Rlcm1jYXAnIG5pZSIKKworIzogb3B0aW9uLmM6Mzc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IgorbXNnc3RyICJPbmdlbGRpZ2Uga2FyYWt0ZXIgPCVzPiIKKworIzogb3B0aW9uLmM6NDI5NCBvcHRpb24uYzo1NDk3Cittc2dpZCAiTm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiTmllIGhpZXIgdG9lZ2VsYWF0IG5pZSIKKworIzogb3B0aW9uLmM6NDMwMQorbXNnaWQgIkNhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiS2FuIG5pZSAndGVybScgc3RlbCBuYSBsZesgc3RyaW5nIG5pZSIKKworIzogb3B0aW9uLmM6NDMwNAorbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdGVybSBpbiBHVUkiCittc2dzdHIgIkthbiBuaWUgJ3Rlcm0nIHZlcmFuZGVyIGluIEdVSSBuaWUiCisKKyM6IG9wdGlvbi5jOjQzMDYKK21zZ2lkICJVc2UgXCI6Z3VpXCIgdG8gc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiR2VicnVpayBcIjpndWlcIiBvbSBkaWUgR1VJIHRlIGJlZ2luIgorCisjOiBvcHRpb24uYzo0MzI3Cittc2dpZCAiJ2JhY2t1cGV4dCcgYW5kICdwYXRjaG1vZGUnIGFyZSBlcXVhbCIKK21zZ3N0ciAiJ2JhY2t1cGV4dCcgZW4gJ3BhdGNobW9kZScgaXMgZGllc2VsZmRlIgorCisjOiBvcHRpb24uYzo0NTg2Cittc2dpZCAiWmVybyBsZW5ndGggc3RyaW5nIgorbXNnc3RyICJOdWwtbGVuZ3RlIHN0cmluZyIKKworIzogb3B0aW9uLmM6NDY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICJPbnRicmVrZW5kZSBub21tZXIgbmEgPCVzPiIKKworIzogb3B0aW9uLmM6NDY2OAorbXNnaWQgIk1pc3NpbmcgY29tbWEiCittc2dzdHIgIk9udGJyZWtlbmRlIGtvbW1hIgorCisjOiBvcHRpb24uYzo0Njc1Cittc2dpZCAiTXVzdCBzcGVjaWZ5IGEgJyB2YWx1ZSIKK21zZ3N0ciAiTW9ldCAnbiAnIHdhYXJkZSBzcGVzaWZpc2VlciIKKworIzogb3B0aW9uLmM6NDcxNQorbXNnaWQgImNvbnRhaW5zIHVucHJpbnRhYmxlIGNoYXJhY3RlciIKK21zZ3N0ciAiYmV2YXQgJ24gb25kcnVrYmFyZSBrYXJha3RlciIKKworIzogb3B0aW9uLmM6NDcyOAorbXNnaWQgIkludmFsaWQgZm9udChzKSIKK21zZ3N0ciAiT25nZWxkaWdlIGZvbnQoZSkiCisKKyM6IG9wdGlvbi5jOjQ3MzQKK21zZ2lkICJjYW4ndCBzZWxlY3QgZm9udHNldCIKK21zZ3N0ciAia2FuIG5pZSBmb250c3RlbCBraWVzIG5pZSIKKworIzogb3B0aW9uLmM6NDczNgorbXNnaWQgIkludmFsaWQgZm9udHNldCIKK21zZ3N0ciAiT25nZWxkaWdlIGZvbnRzdGVsIgorCisjOiBvcHRpb24uYzo0NzQzCittc2dpZCAiY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAia2FuIG5pZSB3eWUgZm9udCBraWVzIG5pZSIKKworIzogb3B0aW9uLmM6NDc0NQorbXNnaWQgIkludmFsaWQgd2lkZSBmb250IgorbXNnc3RyICJPbmdlbGRpZ2Ugd3llIGZvbnQiCisKKyM6IG9wdGlvbi5jOjUwMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgPCVjPiIKK21zZ3N0ciAiT25nZWxkaWdlIGthcmFrdGVyIG5hIDwlYz4iCisKKyM6IG9wdGlvbi5jOjUwOTcKK21zZ2lkICJjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAia29tbWEgYmVub2RpZyIKKworIzogb3B0aW9uLmM6NTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICInY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIgorbXNnc3RyICInY29tbWVudHN0cmluZycgbW9ldCBsZWVnIHdlZXMgb2YgJXMgYmV2YXQiCisKKyM6IG9wdGlvbi5jOjUxNTMKK21zZ2lkICJObyBtb3VzZSBzdXBwb3J0IgorbXNnc3RyICJHZWVuIG11aXNvbmRlcnN0ZXVuaW5nIG5pZSIKKworIzogb3B0aW9uLmM6NTM5OQorbXNnaWQgIlVuY2xvc2VkIGV4cHJlc3Npb24gc2VxdWVuY2UiCittc2dzdHIgIk9udm9sdG9vaWRlIHVpdGRydWtraW5ncmVla3MiCisKKyM6IG9wdGlvbi5jOjU0MDMKK21zZ2lkICJ0b28gbWFueSBpdGVtcyIKK21zZ3N0ciAidGUgdmVlbCBpdGVtcyIKKworIzogb3B0aW9uLmM6NTQwNQorbXNnaWQgInVuYmFsYW5jZWQgZ3JvdXBzIgorbXNnc3RyICJvbmdlYmFsYW5zZWVyZGUgZ3JvZXBlIgorCisjOiBvcHRpb24uYzo1NjIwCittc2dpZCAiQSBwcmV2aWV3IHdpbmRvdyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRGFhciBiZXN0YWFuIHJlZWRzICduIHZvb3Jza291dmVuc3RlciIKKworIzogb3B0aW9uLmM6NTg4MSBvcHRpb24uYzo1OTEwCittc2dpZCAiJ3dpbmhlaWdodCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWluaGVpZ2h0JyIKK21zZ3N0ciAiJ3dpbmhlaWdodCcga2FuIG5pZSBrbGVpbmVyIGFzICd3aW5taW5oZWlnaHQnIHdlZXMgbmllIgorCisjOiBvcHRpb24uYzo1OTI2IG9wdGlvbi5jOjU5NDUKK21zZ2lkICInd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiJ3dpbndpZHRoJyBrYW4gbmllIGtsZWluZXIgYXMgJ3dpbm1pbndpZHRoJyB3ZWVzIG5pZSIKKworIzogb3B0aW9uLmM6NjA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJCZW5vZGlnIHRlbiBtaW5zdGUgJWQgcmXrbHMiCisKKyM6IG9wdGlvbi5jOjYwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIgorbXNnc3RyICJCZW5vZGlnIHRlbiBtaW5zdGUgJWQga29sb21tZSIKKworIzogb3B0aW9uLmM6NjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU1OiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUzNTU6IE9uYmVrZW5kZSBvcHNpZTogJXMiCisKKyM6IG9wdGlvbi5jOjY1MDAKK21zZ2lkICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIGNvZGVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBUZXJtaW5hYWwga29kZXMgLS0tIgorCisjOiBvcHRpb24uYzo2NTAyCittc2dpZCAiIgorIlxuIgorIi0tLSBHbG9iYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gR2xvYmFsZSBvcHNpZSB3YWFyZGVzIC0tLSIKKworIzogb3B0aW9uLmM6NjUwNAorbXNnaWQgIiIKKyJcbiIKKyItLS0gTG9jYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTG9rYWxlIG9wc2llIHdhYXJkZXMgLS0tIgorCisjOiBvcHRpb24uYzo2NTA2Cittc2dpZCAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBPcHNpZXMgLS0tIgorCisjOiBvcHRpb24uYzo3MTk2Cittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6ICdnZXRfdmFycCcgRk9VVCIKKworIzogb3B0aW9uLmM6ODExMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU3OiAnbGFuZ21hcCc6IE1hdGNoaW5nIGNoYXJhY3RlciBtaXNzaW5nIGZvciAlcyIKK21zZ3N0ciAiRTM1NzogJ2xhbmdtYXAnOiBQYXNzZW5kZSBrYXJha3RlciBvbnRicmVlayB2aXIgJXMiCisKKyM6IG9wdGlvbi5jOjgxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1ODogJ2xhbmdtYXAnOiBFeHRyYSBjaGFyYWN0ZXJzIGFmdGVyIHNlbWljb2xvbjogJXMiCittc2dzdHIgIkUzNTg6ICdsYW5nbWFwOiBFa3N0cmEga2FyYWt0ZXJzIG5hIGtvbW1hcHVudDogJXMiCisKKyM6IG9zX2FtaWdhLmM6MjczCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICJrYW4gbmllIG9vcG1hYWsgbmllICIKKworIzogb3NfYW1pZ2EuYzozMDcKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06IEthbiBuaWUgdmVuc3RlciBvb3BtYWFrIG5pZSFcbiIKKworIzogb3NfYW1pZ2EuYzozMjkKK21zZ2lkICJOZWVkIEFtaWdhZG9zIHZlcnNpb24gMi4wNCBvciBsYXRlclxuIgorbXNnc3RyICJCZW5vZGlnIEFtaWdhZG9zIHdlZXJnYXdlIDIuMDQgb2YgbGF0ZXJcbiIKKworIzogb3NfYW1pZ2EuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICJCZW5vZGlnICVzIHdlZXJnYXdlICVsZFxuIgorCisjOiBvc19hbWlnYS5jOjQwNworbXNnaWQgIkNhbm5vdCBvcGVuIE5JTDpcbiIKK21zZ3N0ciAiS2FuIG5pZSBOSUw6IG9vcG1hYWsgbmllXG4iCisKKyM6IG9zX2FtaWdhLmM6NDE4Cittc2dpZCAiQ2Fubm90IGNyZWF0ZSAiCittc2dzdHIgIkthbiBuaWUgc2tlcCBuaWU6ICIKKworIzogb3NfYW1pZ2EuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltIGV4aXRpbmcgd2l0aCAlZFxuIgorbXNnc3RyICJWaW0gc3RvcCBtZXQgJWRcbiIKKworIzogb3NfYW1pZ2EuYzo5MjgKK21zZ2lkICJjYW5ub3QgY2hhbmdlIGNvbnNvbGUgbW9kZSA/IVxuIgorbXNnc3RyICJrYW4ga29uc29sZS1tb2R1cyBuaWUgdmVyYW5kZXIgbmllID8hXG4iCisKKyM6IG9zX2FtaWdhLmM6OTM4IG9zX21hYy5jOjExNjggb3NfbXN3aW4uYzo2MTkgb3NfcmlzY29zLmM6NzI4IG9zX3VuaXguYzoyNzI2Cittc2dpZCAiRTM1OTogU2NyZWVuIG1vZGUgc2V0dGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFMzU5OiBTa2VybW1vZHVzIGluc3RlbGxpbmcgbmllIG9uZGVyc3RldW4gbmllIgorCisjOiBvc19hbWlnYS5jOjk5NAorbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAiJ21jaF9nZXRfc2hlbGxzaXplJzogbmllICduIGtvbnNvbGUgbmllPz9cbiIKKworIy4gaWYgVmltIG9wZW5lZCBhIHdpbmRvdzogRXhlY3V0aW5nIGEgc2hlbGwgbWF5IGNhdXNlIGNyYXNoZXMKKyM6IG9zX2FtaWdhLmM6MTE0MgorbXNnaWQgIkUzNjA6IENhbm5vdCBleGVjdXRlIHNoZWxsIHdpdGggLWYgb3B0aW9uIgorbXNnc3RyICJFMzYwOiBLYW4gbmllIGRvcCBtZXQgLWYgb3BzaWUgdWl0dm9lciBuaWUiCisKKyM6IG9zX2FtaWdhLmM6MTE4MyBvc19hbWlnYS5jOjEyNzMKK21zZ2lkICJDYW5ub3QgZXhlY3V0ZSAiCittc2dzdHIgIkthbiBuaWUgdWl0dm9lciBuaWUgIgorCisjOiBvc19hbWlnYS5jOjExODYgb3NfYW1pZ2EuYzoxMjgzCittc2dpZCAic2hlbGwgIgorbXNnc3RyICJkb3AgIgorCisjOiBvc19hbWlnYS5jOjEyMDYgb3NfYW1pZ2EuYzoxMzA4Cittc2dpZCAiIHJldHVybmVkXG4iCittc2dzdHIgIiB0ZXJ1Z2dla2VlclxuIgorCisjOiBvc19hbWlnYS5jOjE0NDgKK21zZ2lkICJBTkNIT1JfQlVGX1NJWkUgdG9vIHNtYWxsLiIKK21zZ3N0ciAiJ0FOQ0hPUl9CVUZfU0laRScgaXMgdGUga2xlaW4iCisKKyM6IG9zX2FtaWdhLmM6MTQ1MgorbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAiSS9PIEZPVVQiCisKKyM6IG9zX21zd2luLmM6NTAzCittc2dpZCAiLi4uKHRydW5jYXRlZCkiCittc2dzdHIgIi4uLihhZmdla2FwKSIKKworIzogb3NfbXN3aW4uYzo1OTQKK21zZ2lkICInY29sdW1ucycgaXMgbm90IDgwLCBjYW5ub3QgZXhlY3V0ZSBleHRlcm5hbCBjb21tYW5kcyIKK21zZ3N0ciAiJ2NvbHVtbnMnIGlzIG5pZSA4MCBuaWUsIGthbiBuaWUgZWtzdGVybmUgYmV2ZWxlIHVpdHZvZXIgbmllIgorCisjOiBvc19tc3dpbi5jOjcwNiBvc191bml4LmM6NDk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY0OiBMaWJyYXJ5IGNhbGwgZmFpbGVkIGZvciBcIiVzKClcIiIKK21zZ3N0ciAiRTM2NDogQmlibGlvdGVla3JvZXAgaGV0IGdlZmFhbCB2aXIgXCIlc1wiKCkiCisKKyM6IG9zX21zd2luLmM6MTM0MAorbXNnaWQgIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRTIzNzogRHJ1a2tlci1zZWxla3NpZSBoZXQgZ2VmYWFsIgorCisjOiBvc19tc3dpbi5jOjEzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG8gJXMgb24gJXMiCittc2dzdHIgIm5hICVzIG9wICVzIgorCisjOiBvc19tc3dpbi5jOjE0NDkgb3NfbXN3aW4uYzoxNDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogRHJ1a2ZvdXQ6ICVzIgorCisjOiBvc19tc3dpbi5jOjE0NjAKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJPbmJla2VuZCIKKworIzogb3NfbXN3aW4uYzoxNDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nICclcyciCittc2dzdHIgIkRydWsgbm91ICclcyciCisKKyM6IG9zX21zd2luLmM6MjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDogT25nZWxkaWdlIGthcmFrdGVyc3RlbG5hYW0gXCIlc1wiIGluIGZvbnRuYWFtIFwiJXNcIiIKKworIzogb3NfbXN3aW4uYzoyNTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDU6IElsbGVnYWwgY2hhciAnJWMnIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDU6IE9uZ2VsZGlnZSBrYXJha3RlciAnJWMnIGluIGZvbnRuYWFtIFwiJXNcIiIKKworIzogb3NfcmlzY29zLmM6MTIyNworbXNnaWQgIkUzNjY6IEludmFsaWQgJ29zZmlsZXR5cGUnIG9wdGlvbiAtIHVzaW5nIFRleHQiCittc2dzdHIgIkUzNjY6IE9uZ2VsZGlnZSAnb3NmaWxldHlwZScgb3BzaWUgLSBnYWFuIFRleHQgZ2VicnVpayIKKworIzogb3NfdW5peC5jOjgwMAorbXNnaWQgIlZpbTogRG91YmxlIHNpZ25hbCwgZXhpdGluZ1xuIgorbXNnc3RyICJWaW06IER1YmJlbCBzZWluLCBzdGFha1xuIgorCisjOiBvc191bml4LmM6ODA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWwgJXNcbiIKK21zZ3N0ciAiVmltOiBIZXQgZG9kZWxpa2Ugc2VpbiAlcyBnZXZhbmdcbiIKKworIzogb3NfdW5peC5jOjgwOQorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWxcbiIKK21zZ3N0ciAiVmltOiBIZXQgZG9kZWxpa2Ugc2VpbiBnZXZhbmdcbiIKKworIzogb3NfdW5peC5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRvb2sgJWxkIG1zZWMiCittc2dzdHIgIk9tIGRpZSBYLXZlcnRvb25za2VybSBvb3AgdGUgbWFhayBoZXQgJWxkIG1zZWsgZ2V2YXQiCisKKyM6IG9zX3VuaXguYzoxMDkwCittc2dpZCAiIgorIlxuIgorIlZpbTogR290IFggZXJyb3JcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZpbTogSGV0IFggZm91dCBvbnR2YW5nXG4iCisKKyM6IG9zX3VuaXguYzoxMTU3Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiVG9ldHNpbmcgdmFuIGRpZSBYLXZlcnRvb25za2VybSBoZXQgZ2VmYWFsIgorCisjOiBvc191bml4LmM6MTMwMQorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0aW1lZCBvdXQiCittc2dzdHIgIk9vcG1hYWsgdmFuIGRpZSBYLXZlcnRvb25za2VybSBoZXQgdWl0Z2V0ZWwiCisKKyM6IG9zX3VuaXguYzoyODk5IG9zX3VuaXguYzozNDgzCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsICIKK21zZ3N0ciAiIgorIlxuIgorIkthbiBuaWUgZG9wIHVpdHZvZXIgbmllICIKKworIzogb3NfdW5peC5jOjI5NDQKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgc2hcbiIKK21zZ3N0ciAiIgorIlxuIgorIkthbiBuaWUgZG9wICdzaCcgdWl0dm9lciBuaWVcbiIKKworIzogb3NfdW5peC5jOjI5NDggb3NfdW5peC5jOjM0ODkKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisiZG9wIGxld2VyICIKKworIzogb3NfdW5peC5jOjMwODIKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGNyZWF0ZSBwaXBlc1xuIgorbXNnc3RyICIiCisiXG4iCisiS2FuIG5pZSBweXBlIHNrZXAgbmllXG4iCisKKyM6IG9zX3VuaXguYzozMDk3Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBmb3JrXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLYW4gbmllIHZ1cmsgbmllXG4iCisKKyM6IG9zX3VuaXguYzozNDk2Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgdGVybWluYXRlZFxuIgorbXNnc3RyICIiCisiXG4iCisiQmV2ZWwgYmXraW5kaWdcbiIKKworIzogb3NfdW5peC5jOjQ5OTMKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICJPb3BtYWFrIHZhbiBkaWUgWCB2ZXJ0b29uc2tlcm0gaGV0IGdlZmFhbCIKKworIzogb3Nfdm1zX21tcy5jOjU5Cittc2dpZCAiQXQgbGluZSIKK21zZ3N0ciAiQnkgcmXrbCIKKworIzogb3NfdzMyZXhlLmM6MTY5Cittc2dpZCAiQ291bGQgbm90IGxvYWQgdmltMzIuZGxsISIKK21zZ3N0ciAiS29uIG5pZSAndmltMzIuZGxsJyBsYWFpIG5pZSEiCisKKyM6IG9zX3czMmV4ZS5jOjE2OSBvc193MzJleGUuYzoxNzkKK21zZ2lkICJWSU0gRXJyb3IiCittc2dzdHIgIlZJTSBGb3V0IgorCisjOiBvc193MzJleGUuYzoxNzkKK21zZ2lkICJDb3VsZCBub3QgZml4IHVwIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHRoZSBETEwhIgorbXNnc3RyICJLb24gbmllIGZ1bmtzaWV3eXNlcnMgbmEgZGllIERMTCBvcHN0ZWwgbmllISIKKworIzogb3Nfd2luMTYuYzo1Nzggb3Nfd2luMzIuYzozMDIxCisjLCBjLWZvcm1hdAorbXNnaWQgInNoZWxsIHJldHVybmVkICVkIgorbXNnc3RyICJkb3AgaGV0ICVkIGdlbGV3ZXIiCisKKyM6IG9zX3dpbjMyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCAlcyBldmVudFxuIgorbXNnc3RyICJWaW06IEhldCAlcyBnZWJldXJ0ZW5pcyBnZXZhbmdcbiIKKworIzogb3Nfd2luMzIuYzoyNDkxCittc2dpZCAiY2xvc2UiCittc2dzdHIgIm1hYWsgdG9lIgorCisjOiBvc193aW4zMi5jOjI0OTMKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgInRla2VuIHVpdCIKKworIzogb3Nfd2luMzIuYzoyNDk0Cittc2dpZCAic2h1dGRvd24iCittc2dzdHIgInNpdCBhZiIKKworIzogb3Nfd2luMzIuYzoyOTc1Cittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6IEJldmVsIG5pZSBnZXZpbmQgbmllIgorCisjOiBvc193aW4zMi5jOjI5ODgKK21zZ2lkICIiCisiVklNUlVOLkVYRSBub3QgZm91bmQgaW4geW91ciAkUEFUSC5cbiIKKyJFeHRlcm5hbCBjb21tYW5kcyB3aWxsIG5vdCBwYXVzZSBhZnRlciBjb21wbGV0aW9uLlxuIgorIlNlZSAgOmhlbHAgd2luMzItdmltcnVuICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyInVklNUlVOLkVYRScgbmllIGdldmluZCBpbiAnJFBBVEgnIG5pZS5cbiIKKyJFa3N0ZXJuZSBvcGRyYWd0ZSBzYWwgbmllIHdhZyBuYSB2b2x0b29paW5nIG5pZVxuIgorIlNpZW4gJzpoZWxwIHdpbjMyLXZpbXJ1bicgdmlyIG1lZXIgaW5saWd0aW5nLiIKKworIzogb3Nfd2luMzIuYzoyOTkxCittc2dpZCAiVmltIFdhcm5pbmciCittc2dzdHIgIlZpbSBXYWFyc2t1d2luZyIKKworIzogcXVpY2tmaXguYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MjogVG9vIG1hbnkgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzcyOiBUZSB2ZWVsICUlJWMgaW4gZm9ybWFhdHN0cmluZyIKKworIzogcXVpY2tmaXguYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MzogVW5leHBlY3RlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzM6IE9udmVyd2FndGUgJSUlYyBpbiBmb3JtYWF0c3RyaW5nIgorCisjOiBxdWlja2ZpeC5jOjM0OAorbXNnaWQgIkUzNzQ6IE1pc3NpbmcgXSBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc0OiBPbnRicmVrZW5kZSBdIGluIGZvcm1hYXRzdHJpbmciCisKKyM6IHF1aWNrZml4LmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogT25nZXN0ZXVuZGUgJSUlYyBpbiBmb3JtYWF0c3RyaW5nIgorCisjOiBxdWlja2ZpeC5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiCittc2dzdHIgIkUzNzY6IE9uZ2VsZGlnZSAlJSVjIGluIGZvcm1hYXRzdHJpbmd2b29ydm9lZ3NlbCIKKworIzogcXVpY2tmaXguYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6IE9uZ2VsZGlnZSAlJSVjIGluIGZvcm1hYXRzdHJpbmciCisKKyM6IHF1aWNrZml4LmM6NDE0Cittc2dpZCAiRTM3ODogJ2Vycm9yZm9ybWF0JyBjb250YWlucyBubyBwYXR0ZXJuIgorbXNnc3RyICJFMzc4OiAnZXJyb3Jmb3JtYXQnIGJldmF0IGdlZW4gcGF0cm9vbiBuaWUiCisKKyM6IHF1aWNrZml4LmM6NTIwCittc2dpZCAiRTM3OTogTWlzc2luZyBvciBlbXB0eSBkaXJlY3RvcnkgbmFtZSIKK21zZ3N0ciAiRTM3OTogT250YnJla2VuZGUgb2YgbGXrIGdpZHNuYWFtIgorCisjOiBxdWlja2ZpeC5jOjkzMQorbXNnaWQgIk5vIG1vcmUgaXRlbXMiCittc2dzdHIgIkdlZW4gaXRlbXMgbWVlciBuaWUiCisKKyM6IHF1aWNrZml4LmM6MTE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIoJWQgb2YgJWQpJXMlczogIgorbXNnc3RyICIoJWQgdmFuICVkKSVzJXM6ICIKKworIzogcXVpY2tmaXguYzoxMTU0Cittc2dpZCAiIChsaW5lIGRlbGV0ZWQpIgorbXNnc3RyICIgKHJl62wgdmVyd3lkZXIpIgorCisjOiBxdWlja2ZpeC5jOjEzNjAKK21zZ2lkICJFMzgwOiBBdCBib3R0b20gb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODA6IE9uZGVyIGFhbiAncXVpY2tmaXgnIHN0YXBlbCIKKworIzogcXVpY2tmaXguYzoxMzY5Cittc2dpZCAiRTM4MTogQXQgdG9wIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgxOiBCbyBhYW4gJ3F1aWNrZml4JyBzdGFwZWwiCisKKyM6IHF1aWNrZml4LmM6MTM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBsaXN0ICVkIG9mICVkOyAlZCBlcnJvcnMiCittc2dzdHIgImZvdXRlbHlzICVkIHZhbiAlZDsgJWQgZm91dGUiCisKKyM6IHF1aWNrZml4LmM6MTg0MgorbXNnaWQgIkUzODI6IENhbm5vdCB3cml0ZSwgJ2J1ZnR5cGUnIG9wdGlvbiBpcyBzZXQiCittc2dzdHIgIkUzODI6IEthbiBuaWUgc2tyeWYgbmllLCAnYnVmdHlwZScgb3BzaWUgaXMgYWFuIgorCisjOiByZWdleHAuYzo4MDEKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiBQYXRyb29uIHRlIGxhbmsiCisKKyM6IHJlZ2V4cC5jOjEzMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOiBOZXN0ZWQgJXMqIgorbXNnc3RyICJFNjE6IEdlbmVzdGUgJXMqIgorCisjOiByZWdleHAuYzoxMzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjogTmVzdGVkICVzJWMiCittc2dzdHIgIkU2MjogR2VuZXN0ZSAlcyVjIgorCisjOiByZWdleHAuYzoxNDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDogJXMlYyB2b2xnIG5pa3MiCisKKyM6IHJlZ2V4cC5jOjI0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ludGF4IGVycm9yIGluICVzey4uLn0iCittc2dzdHIgIlNpbnRha3Nmb3V0IGluICVzey4uLn0iCisKKyM6IHJlZ2V4cC5jOjI3MTYKK21zZ2lkICJFMzYxOiBDcmFzaCBpbnRlcmNlcHRlZDsgcmVnZXhwIHRvbyBjb21wbGV4PyIKK21zZ3N0ciAiRTM2MTogSW5lZW5zdG9ydGluZyBvbmRlcnNrZXAuIFBhdHJvb24gdGUga29tcGxla3M/IgorCisjOiByZWdleHAuYzoyODUxCittc2dpZCAiRTM2MzogcGF0dGVybiBjYXVzZWQgb3V0LW9mLXN0YWNrIGVycm9yIgorbXNnc3RyICJFMzYzOiBwYXRyb29uIGhldCBs62Utc3RhcGVsIGZvdXQgdmVyb29yc2FhayIKKworIzogcmVnZXhwLmM6MzA4NworbXNnaWQgIkV4dGVybmFsIHN1Ym1hdGNoZXM6XG4iCittc2dzdHIgIkVrc3Rlcm5lIHN1YnRyZWZmZXJzOlxuIgorCisjOiBzY3JlZW4uYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIistLSUzbGQgbGluZXMgZm9sZGVkICIKK21zZ3N0ciAiKy0tJTNsZCByZetscyBnZXZvdSAiCisKKyM6IHNjcmVlbi5jOjc0MjYKK21zZ2lkICIgVlJFUExBQ0UiCittc2dzdHIgIiBWVkVSVkFORyIKKworIzogc2NyZWVuLmM6NzQzMAorbXNnaWQgIiBSRVBMQUNFIgorbXNnc3RyICIgVkVSVkFORyIKKworIzogc2NyZWVuLmM6NzQzNQorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIgT01LRUVSIgorCisjOiBzY3JlZW4uYzo3NDM3Cittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIElOVk9FRyIKKworIzogc2NyZWVuLmM6NzQ0MAorbXNnaWQgIiAoaW5zZXJ0KSIKK21zZ3N0ciAiIChpbnZvZWcpIgorCisjOiBzY3JlZW4uYzo3NDQyCittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiICh2ZXJ2YW5nKSIKKworIzogc2NyZWVuLmM6NzQ0NAorbXNnaWQgIiAodnJlcGxhY2UpIgorbXNnc3RyICIgKHZ2ZXJ2YW5nKSIKKworIzogc2NyZWVuLmM6NzQ0NworbXNnaWQgIiBIZWJyZXciCittc2dzdHIgIiBIZWJyZWV1cyIKKworIzogc2NyZWVuLmM6NzQ1NQorbXNnaWQgIiAobGFuZykiCittc2dzdHIgIiAodGFhbCkiCisKKyM6IHNjcmVlbi5jOjc0NTgKK21zZ2lkICIgKHBhc3RlKSIKK21zZ3N0ciAiIChwbGFrKSIKKworIzogc2NyZWVuLmM6NzQ2NAorbXNnaWQgIiBTRUxFQ1QiCittc2dzdHIgIiBLSUVTIgorCisjOiBzY3JlZW4uYzo3NDY2Cittc2dpZCAiIFZJU1VBTCIKK21zZ3N0ciAiIFZJU1VFTEUiCisKKyM6IHNjcmVlbi5jOjc0NjgKK21zZ2lkICIgQkxPQ0siCittc2dzdHIgIiBCTE9LIgorCisjOiBzY3JlZW4uYzo3NDcwCittc2dpZCAiIExJTkUiCittc2dzdHIgIiBSRctMIgorCisjOiBzY3JlZW4uYzo3NDgzIHNjcmVlbi5jOjc1MzcKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgImJlc2lnIG9tIG9wIHRlIG5lZW0iCisKKyM6IHNlYXJjaC5jOjM2Cittc2dpZCAic2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIgorbXNnc3RyICJzb2VrdG9nIGhldCBCTyBnZXRyZWYsIGdhYW4gdm9vcnQgdmFuIE9OREVSIGFmIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIKK21zZ3N0ciAic29la3RvZyBoZXQgT05ERVIgZ2V0cmVmLCBnYWFuIHZvb3J0IHZhbiBCTyBhZiIKKworIzogc2VhcmNoLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IE9uZ2VsZGlnZSBzb2Vrc3RyaW5nOiAlcyIKKworIzogc2VhcmNoLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODQ6IHNlYXJjaCBoaXQgVE9QIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NDogc29la3RvZyBoZXQgQk8gZ2V0cmVmIHNvbmRlciB0cmVmZmVyIHZpcjogJXMiCisKKyM6IHNlYXJjaC5jOjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg1OiBzZWFyY2ggaGl0IEJPVFRPTSB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODU6IHNvZWt0b2cgaGV0IE9OREVSIGdldHJlZiBzb25kZXIgdHJlZmZlciB2aXI6ICVzIgorCisjOiBzZWFyY2guYzoxMTA3Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiBWZXJ3YWcgJz8nIG9mICcvJyBuYSAnOyciCisKKyM6IHNlYXJjaC5jOjM0NzYKK21zZ2lkICIgKGluY2x1ZGVzIHByZXZpb3VzbHkgbGlzdGVkIG1hdGNoKSIKK21zZ3N0ciAiIChzbHVpdCBpbiB2b3JpZ2UgZ2VseXN0ZSB0cmVmZmVyKSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNDk2Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIEluZ2VzbG90ZSBs6mVycyIKKworIzogc2VhcmNoLmM6MzQ5OAorbXNnaWQgIm5vdCBmb3VuZCAiCittc2dzdHIgIm5pZSBnZXZpbmQgbmllICIKKworIzogc2VhcmNoLmM6MzQ5OQorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgImluIHBhZCAtLS1cbiIKKworIzogc2VhcmNoLmM6MzUzOAorbXNnaWQgIiAgKEFscmVhZHkgbGlzdGVkKSIKK21zZ3N0ciAiIChBbHJlZWRzIGdlbHlzKSIKKworIzogc2VhcmNoLmM6MzU0MAorbXNnaWQgIiAgTk9UIEZPVU5EIgorbXNnc3RyICIgIE5JRSBHRVZJTkQgTklFIgorCisjOiBzZWFyY2guYzozNTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGluY2x1ZGVkIGZpbGU6ICVzIgorbXNnc3RyICJEZXVyc29layBpbmdlc2xvdGUgbOplcjogJXMiCisKKyM6IHNlYXJjaC5jOjM4MTAKK21zZ2lkICJFMzg3OiBNYXRjaCBpcyBvbiBjdXJyZW50IGxpbmUiCittc2dzdHIgIkUzODc6IFRyZWZmZXIgaXMgb3AgaHVpZGlnZSByZetsIgorCisjOiBzZWFyY2guYzozOTUwCittc2dpZCAiQWxsIGluY2x1ZGVkIGZpbGVzIHdlcmUgZm91bmQiCittc2dzdHIgIkFsbGUgaW5nZXNsb3RlIGzqZXJzIGlzIGdldmluZCIKKworIzogc2VhcmNoLmM6Mzk1MgorbXNnaWQgIk5vIGluY2x1ZGVkIGZpbGVzIgorbXNnc3RyICJHZWVuIGluZ2VzbG90ZSBs6mVycyBuaWUiCisKKyM6IHNlYXJjaC5jOjM5NjgKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IEtvbiBkZWZpbmlzaWUgbmllIHZpbmQgbmllIgorCisjOiBzZWFyY2guYzozOTcwCittc2dpZCAiRTM4OTogQ291bGRuJ3QgZmluZCBwYXR0ZXJuIgorbXNnc3RyICJFMzg5OiBLb24gcGF0cm9vbiBuaWUgdmluZCBuaWUiCisKKyM6IHN5bnRheC5jOjI5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MDogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUzOTA6IE9uZ2VsZGlnZSBwYXJhbWV0ZXI6ICVzIgorCisjOiBzeW50YXguYzozMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTE6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkxOiBHZWVuIHNvZGFuaWdlIHNpbnRha3NrbHVzdGVyIG5pZTogJXMiCisKKyM6IHN5bnRheC5jOjMzMzIKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgIkdlZW4gU2ludGFrcy1pdGVtcyBnZWRlZmluaWVlciB2aXIgaGllcmRpZSBidWZmZXIgbmllIgorCisjOiBzeW50YXguYzozMzQwCittc2dpZCAic3luY2luZyBvbiBDLXN0eWxlIGNvbW1lbnRzIgorbXNnc3RyICJzaW5jaHJvbmlzZWVyIG1ldCBDLXN0eWwga29tbWVudGFhciIKKworIzogc3ludGF4LmM6MzM0OAorbXNnaWQgIm5vIHN5bmNpbmciCittc2dzdHIgImdlZW4gc2luY2hyb25pc2VyaW5nIgorCisjOiBzeW50YXguYzozMzUxCittc2dpZCAic3luY2luZyBzdGFydHMgIgorbXNnc3RyICJzaW5jaHJvbmlzYXNpZSBiZWdpbiAiCisKKyM6IHN5bnRheC5jOjMzNTMgc3ludGF4LmM6MzQyMgorbXNnaWQgIiBsaW5lcyBiZWZvcmUgdG9wIGxpbmUiCittc2dzdHIgIiByZetscyB2b29yIGJvb25zdGUgbHluIgorCisjOiBzeW50YXguYzozMzU3Cittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggc3luYyBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gU2ludGFrcyBzeW5jIGl0ZW1zIC0tLSIKKworIzogc3ludGF4LmM6MzM2MAorbXNnaWQgIiIKKyJcbiIKKyJzeW5jaW5nIG9uIGl0ZW1zIgorbXNnc3RyICIiCisiXG4iCisic2luY2hyb25pc2VyaW5nIG1ldCBpdGVtcyIKKworIzogc3ludGF4LmM6MzM2NQorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBTaW50YWtzIGl0ZW1zIC0tLSIKKworIzogc3ludGF4LmM6MzM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MjogR2VlbiBzb2RhbmlnZSBzaW50YWtza2x1c3RlciBuaWU6ICVzIgorCisjOiBzeW50YXguYzozNDEyCittc2dpZCAibWluaW1hbCAiCittc2dzdHIgIm1pbmltYWFsICIKKworIzogc3ludGF4LmM6MzQxOQorbXNnaWQgIm1heGltYWwgIgorbXNnc3RyICJtYWtzaW1hYWwgIgorCisjOiBzeW50YXguYzo0MDQ3Cittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzkzOiAnZ3JvdXBbdF1oZXJlJyBuaWUgaGllciBhYW52YWFyIG5pZSIKKworIzogc3ludGF4LmM6NDA3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk0OiBEaWRuJ3QgZmluZCByZWdpb24gaXRlbSBmb3IgJXMiCittc2dzdHIgIkUzOTQ6IEtvbiBuaWUgb21nZXdpbmdzaXRlbSB2aW5kIHZpciAlcyBuaWUiCisKKyM6IHN5bnRheC5jOjQwOTkKK21zZ2lkICJFMzk1OiBjb250YWlucyBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NTogYmV2YXQgcGFyYW1ldGVycyBuaWUgaGllciBhYW52YWFyIG5pZSIKKworIzogc3ludGF4LmM6NDExMAorbXNnaWQgIkUzOTY6IGNvbnRhaW5lZGluIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk2OiAnY29udGFpbmVkaW4nIHBhcmFtZXRlciBuaWUgaGllciBhYW52YWFyIG5pZSIKKworIzogc3ludGF4LmM6NDE4OAorbXNnaWQgIkUzOTc6IEZpbGVuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMzk3OiBM6mVybmFhbSBiZW5vZGlnIgorCisjOiBzeW50YXguYzo0NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODogT250YnJla2VuZGUgJz0nOiAlcyIKKworIzogc3ludGF4LmM6NDY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogTmllIGdlbm9lZyBwYXJhbWV0ZXJzIG5pZTogc2ludGFrc29tZ2V3aW5nICVzIgorCisjOiBzeW50YXguYzo1MDExCittc2dpZCAiRTQwMDogTm8gY2x1c3RlciBzcGVjaWZpZWQiCittc2dzdHIgIkU0MDA6IEdlZW4ga2x1c3RlciBnZXNwZXNpZmlzZWVyIG5pZSIKKworIzogc3ludGF4LmM6NTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDAxOiBQYXR0ZXJuIGRlbGltaXRlciBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDAxOiBQYXRyb29uYmVncmVuc2VyIG5pZSBnZXZpbmQgbmllOiAlcyIKKworIzogc3ludGF4LmM6NTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDAyOiBHYXJiYWdlIGFmdGVyIHBhdHRlcm46ICVzIgorbXNnc3RyICJFNDAyOiBHZW1vcnMgbmEgcGF0cm9vbjogJXMiCisKKyM6IHN5bnRheC5jOjUyMDUKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiBzaW50YWtzIHN5bmM6IHJl62x2b29ydGdhYW5wYXRyb29uIHR3ZWUga2VlciBnZXNwZXNpZmlzZWVyIgorCisjOiBzeW50YXguYzo1MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDQ6IElsbGVnYWwgYXJndW1lbnRzOiAlcyIKK21zZ3N0ciAiRTQwNDogT25nZWxkaWdlIHBhcmFtZXRlcnM6ICVzIgorCisjOiBzeW50YXguYzo1MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDU6IE1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MDU6IE9udGJyZWtlbmRlIGdlbHlrYWFudGVrZW46ICVzIgorCisjOiBzeW50YXguYzo1MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDY6IEVtcHR5IGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQwNjogTGXrIHBhcmFtZXRlcjogJXMiCisKKyM6IHN5bnRheC5jOjUzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNzogJXMgbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTQwNzogJXMgbmllIHRvZWdlbGFhdCBoaWVyIG5pZSIKKworIzogc3ludGF4LmM6NTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA4OiAlcyBtdXN0IGJlIGZpcnN0IGluIGNvbnRhaW5zIGxpc3QiCittc2dzdHIgIkU0MDg6ICVzIG1vZXQgdvPzciBpbiAnY29udGFpbnMnIGx5cyB3ZWVzIgorCisjOiBzeW50YXguYzo1NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDk6IFVua25vd24gZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkU0MDk6IE9uYmVrZW5kZSBncm9lcG5hYW06ICVzIgorCisjOiBzeW50YXguYzo1NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTA6IEludmFsaWQgOnN5bnRheCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTQxMDogT25nZWxkaWdlIDpzeW50YXggc3ViYmV2ZWwgJXMiCisKKyM6IHN5bnRheC5jOjYwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMTogaGlnaGxpZ2h0IGdyb3VwIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MTE6IHVpdGxpZ2dyb2VwIG5pZSBnZXZpbmQgbmllOiAlcyIKKworIzogc3ludGF4LmM6NjA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEyOiBOb3QgZW5vdWdoIGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMjogVGUgbWluIHBhcmFtZXRlcnM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMzogVG9vIG1hbnkgYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEzOiBUZSB2ZWVsIHBhcmFtZXRlcnM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYwNzUKK21zZ2lkICJFNDE0OiBncm91cCBoYXMgc2V0dGluZ3MsIGhpZ2hsaWdodCBsaW5rIGlnbm9yZWQiCittc2dzdHIgIiIKKyJFNDE0OiBncm9lcCBoZXQgaW5zdGVsbGluZ3MsIHVpdGxpZ3NrYWtlbCAoJ2hpZ2hsaWdodCBsaW5rJykgZ2XvZ25vcmVlciIKKworIzogc3ludGF4LmM6NjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE1OiB1bmV4cGVjdGVkIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE1OiBvbnZlcndhZ3RlIGdlbHlrYWFudGVrZW46ICVzIgorCisjOiBzeW50YXguYzo2MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IG9udGJyZWtlbmRlIGdlbHlrYWFudGVrZW46ICVzIgorCisjOiBzeW50YXguYzo2MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTc6IG1pc3NpbmcgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDE3OiBvbnRicmVrZW5kZSBwYXJhbWV0ZXI6ICVzIgorCisjOiBzeW50YXguYzo2Mjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTg6IElsbGVnYWwgdmFsdWU6ICVzIgorbXNnc3RyICJFNDE4OiBPbmdlbGRpZ2Ugd2FhcmRlOiAlcyIKKworIzogc3ludGF4LmM6NjQxOAorbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6IEZHIGtsZXVyIG9uYmVrZW5kIgorCisjOiBzeW50YXguYzo2NDI5Cittc2dpZCAiRTQyMDogQkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQyMDogQkcga2xldXIgb25iZWtlbmQiCisKKyM6IHN5bnRheC5jOjY0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMTogQ29sb3IgbmFtZSBvciBudW1iZXIgbm90IHJlY29nbml6ZWQ6ICVzIgorbXNnc3RyICJFNDIxOiBLbGV1cm5hYW0gb2YgLW5vbW1lciBuaWUgaGVya2VuIG5pZTogJXMiCisKKyM6IHN5bnRheC5jOjY2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6IHRlcm1pbmFhbGtvZGUgdGUgbGFuazogJXMiCisKKyM6IHN5bnRheC5jOjY3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMzogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MjM6IE9uZ2VsZGlnZSBwYXJhbWV0ZXI6ICVzIgorCisjOiBzeW50YXguYzo3MjY0Cittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDogVGUgdmVlbCB2ZXJza2lsbGVuZGUgdWl0bGlnLWVpZW5za2FwcGUgaW4gZ2VicnVpayIKKworIyBuamo6ICdpbmtsZXVyJyB2aXIgJ3VpdGxpZyc/IG5ldCAnbiBpZGVlIC4uCisjOiB0YWcuYzo5MAorbXNnaWQgImF0IGJvdHRvbSBvZiB0YWcgc3RhY2siCittc2dzdHIgIm9uZGVyYWFuIGV0aWtldHN0YXBlbCIKKworIzogdGFnLmM6OTEKK21zZ2lkICJhdCB0b3Agb2YgdGFnIHN0YWNrIgorbXNnc3RyICJiby1hYW4gZXRpa2V0c3RhcGVsIgorCisjOiB0YWcuYzozOTIKK21zZ2lkICJFNDI1OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNTogS2FuIG5pZSB28/NyIGVlcnN0ZSBldGlrZXQtdHJlZmZlciBnYWFuIG5pZSIKKworIzogdGFnLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjY6IHRhZyBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDI2OiBldGlrZXQgbmllIGdldmluZCBuaWU6ICVzIgorCisjOiB0YWcuYzo1NDUKK21zZ2lkICIgICMgcHJpIGtpbmQgdGFnIgorbXNnc3RyICIgICMgcHJpIHRpcGUgZXRpa2V0IgorCisjOiB0YWcuYzo1NDgKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgImzqZXJcbiIKKworIy4KKyMuICogQXNrIHRvIHNlbGVjdCBhIHRhZyBmcm9tIHRoZSBsaXN0LgorIy4gKiBXaGVuIHVzaW5nICI6c2lsZW50IiBhc3N1bWUgdGhhdCA8Q1I+IHdhcyBlbnRlcmVkLgorIy4KKyM6IHRhZy5jOjcwNgorbXNnaWQgIkVudGVyIG5yIG9mIGNob2ljZSAoPENSPiB0byBhYm9ydCk6ICIKK21zZ3N0ciAiU2xldXRlbCBub21tZXIgdmFuIGtldXNlIGluICg8Q1I+IG9tIHRlIHN0b3ApOiAiCisKKyM6IHRhZy5jOjc0NgorbXNnaWQgIkU0Mjc6IFRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNzogRGFhciBpcyBzbGVncyBlZW4gZXRpa2V0LXRyZWZmZXIiCisKKyM6IHRhZy5jOjc0OAorbXNnaWQgIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjg6IEthbiBuaWUgdmVyYnkgbGFhc3RlIGV0aWtldC10cmVmZmVyIGdhYW4gbmllIgorCisjOiB0YWcuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkzqZXIgXCIlc1wiIGJlc3RhYW4gbmllIgorCisjLiBHaXZlIGFuIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiBtYXRjaGluZyB0YWdzCisjOiB0YWcuYzo3ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICVkIG9mICVkJXMiCittc2dzdHIgImV0aWtldCAlZCB2YW4gJWQlcyIKKworIzogdGFnLmM6NzgzCittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiBvZiBtZWVyIgorCisjOiB0YWcuYzo3ODUKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiIEdhYW4gZXRpa2V0IG1ldCBhbmRlciBrYXMgZ2VicnVpayEiCisKKyM6IHRhZy5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTQyOTogTOplciBcIiVzXCIgYmVzdGFhbiBuaWUiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6ODk3Cittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyBOQSBldGlrZXQgICAgICBWQU4gcmXrbCAgIGluIGzqZXIvdGVrcyIKKworIzogdGFnLmM6MTE0NAorbXNnaWQgIkxpbmVhciB0YWcgc2VhcmNoIgorbXNnc3RyICJMaW5p6nJlIGV0aWtldHNvZWsiCisKKyM6IHRhZy5jOjExNDYKK21zZ2lkICJCaW5hcnkgdGFnIHNlYXJjaCIKK21zZ3N0ciAiQmlu6nJlIGV0aWtldHNvZWsiCisKKyM6IHRhZy5jOjExNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIHRhZ3MgZmlsZSAlcyIKK21zZ3N0ciAiRGV1cnNvZWsgZXRpa2V0bOplciAlcyIKKworIzogdGFnLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMwOiBUYWcgZmlsZSBwYXRoIHRydW5jYXRlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRTQzMDogRXRpa2V0bOplcmdpZHMgYWZnZWthcCB2aXIgJXNcbiIKKworIzogdGFnLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogRm9ybWFhdGZvdXQgaW4gZXRpa2V0bOplciBcIiVzXCIiCisKKyM6IHRhZy5jOjE4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICJWb29yIGdyZWVwICVsZCIKKworIzogdGFnLmM6MTg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMyOiBUYWdzIGZpbGUgbm90IHNvcnRlZDogJXMiCittc2dzdHIgIkU0MzI6IEV0aWtldGzqZXIgb25nZXNvcnRlZXI6ICVzIgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MTkxMQorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzogR2VlbiBldGlrZXRs6mVyIG5pZSIKKworIzogdGFnLmM6MjU4MworbXNnaWQgIkU0MzQ6IENhbid0IGZpbmQgdGFnIHBhdHRlcm4iCittc2dzdHIgIkU0MzQ6IEthbiBuaWUgZXRpa2V0cGF0cm9vbiB2aW5kIG5pZSIKKworIzogdGFnLmM6MjU5NAorbXNnaWQgIkU0MzU6IENvdWxkbid0IGZpbmQgdGFnLCBqdXN0IGd1ZXNzaW5nISIKK21zZ3N0ciAiRTQzNTogS29uIG5pZSBldGlrZXQgdmluZCBuaWUsIGVrIHJhYWkgbWFhciEiCisKKyM6IHRlcm0uYzoxNzIzCittc2dpZCAiJyBub3Qga25vd24uIEF2YWlsYWJsZSBidWlsdGluIHRlcm1pbmFscyBhcmU6IgorbXNnc3RyICInIG9uYmVrZW5kLiBCZXNraWtiYXJlIGluZ2Vib3VkZSB0ZXJtaW5hbGUgaXM6IgorCisjOiB0ZXJtLmM6MTc0NworbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAiZ2VicnVpayB2ZXJzdGVrICciCisKKyM6IHRlcm0uYzoyMTAwCittc2dpZCAiQ2Fubm90IG9wZW4gdGVybWNhcCBmaWxlIgorbXNnc3RyICJLYW4gbmllICd0ZXJtY2FwJy1s6mVyIG9vcG1hYWsgbmllIgorCisjOiB0ZXJtLmM6MjEwMworbXNnaWQgIlRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtaW5mbyIKK21zZ3N0ciAiVGVybWluYWFsaW5za3J5d2luZyBuaWUgaW4gJ3Rlcm1pbmZvJyBnZXZpbmQgbmllIgorCisjOiB0ZXJtLmM6MjEwNQorbXNnaWQgIlRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJUZXJtaW5hYWxpbnNrcnl3aW5nIG5pZSBpbiAndGVybWNhcCcgZ2V2aW5kIG5pZSIKKworIzogdGVybS5jOjIyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzNjogTm8gXCIlc1wiIGVudHJ5IGluIHRlcm1jYXAiCittc2dzdHIgIkU0MzY6IEdlZW4gXCIlc1wiIGluc2tyeXdpbmcgaW4gdGVybWNhcCBuaWUiCisKKyM6IHRlcm0uYzoyNzM4Cittc2dpZCAiRTQzNzogdGVybWluYWwgY2FwYWJpbGl0eSBcImNtXCIgcmVxdWlyZWQiCittc2dzdHIgIkU0Mzc6IHRlcm1pbmFhbHZlcm1v6yBcImNtXCIgdmVyZWlzIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0ODc4Cittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBUZXJtaW5hYWwgc2xldXRlbHMgLS0tIgorCisjOiB1aS5jOjI0MAorbXNnaWQgIm5ldyBzaGVsbCBzdGFydGVkXG4iCittc2dzdHIgIm51d2UgZG9wIGJlZ2luXG4iCisKKyM6IHVpLmM6MTcwNQorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICJWaW06IEZvdXQgbWV0IGxlZXMgdmFuIGludm9lciwgdmVybGFhdC4uLlxuIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogdW5kby5jOjM1MQorbXNnaWQgIk5vIHVuZG8gcG9zc2libGU7IGNvbnRpbnVlIGFueXdheSIKK21zZ3N0ciAiR2VlbiBoZXJzdGVsIG1vb250bGlrOyBnYWFuIGluIGVsayBnZXZhbCB2b29ydCIKKworIzogdW5kby5jOjUwNgorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IHJl62xub21tZXJzIGZvdXRpZWYiCisKKyM6IHVuZG8uYzo2NzUKK21zZ2lkICIxIGNoYW5nZSIKK21zZ3N0ciAiMSB2ZXJhbmRlcmluZyIKKworIzogdW5kby5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhbmdlcyIKK21zZ3N0ciAiJWxkIHZlcmFuZGVyaW5nZSIKKworIzogdW5kby5jOjcyMQorbXNnaWQgIkU0Mzk6IHVuZG8gbGlzdCBjb3JydXB0IgorbXNnc3RyICJFNDM5OiBoZXJzdGVsbHlzIGtvcnJ1cCIKKworIzogdW5kby5jOjc1MQorbXNnaWQgIkU0NDA6IHVuZG8gbGluZSBtaXNzaW5nIgorbXNnc3RyICJFNDQwOiBoZXJzdGVscmXrbCBvbnRicmVlayIKKworIy4gT25seSBNUyBWQyA0LjEgYW5kIGVhcmxpZXIgY2FuIGRvIFdpbjMycworIzogdmVyc2lvbi5jOjY1NQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYvMzItYmlzIEdVSSB3ZWVyZ2F3ZSIKKworIzogdmVyc2lvbi5jOjY1NworbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzItYmlzIEdVSSB2ZXJzaW9uIgorCisjOiB2ZXJzaW9uLmM6NjYwCittc2dpZCAiIGluIFdpbjMycyBtb2RlIgorbXNnc3RyICIgaW4gV2luMzJzIG1vZHVzIgorCisjOiB2ZXJzaW9uLmM6NjYyCittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIiBtZXQgT0xFIG9uZGVyc3RldW5pbmciCisKKyM6IHZlcnNpb24uYzo2NjUKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgY29uc29sZSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMi1iaXMga29uc29sZSB3ZWVyZ2F3ZSIKKworIzogdmVyc2lvbi5jOjY2OQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2IGJpdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAxNi1iaXMgd2Vlcmdhd2UiCisKKyM6IHZlcnNpb24uYzo2NzMKK21zZ2lkICIiCisiXG4iCisiMzIgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzItYmlzIE1TLURPUyB3ZWVyZ2F3ZSIKKworIzogdmVyc2lvbi5jOjY3NQorbXNnaWQgIiIKKyJcbiIKKyIxNiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIxNi1iaXMgTVMtRE9TIHdlZXJnYXdlIgorCisjOiB2ZXJzaW9uLmM6NjgxCittc2dpZCAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB3ZWVyZ2F3ZSIKKworIzogdmVyc2lvbi5jOjY4MworbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyBYIHdlZXJnYXdlIgorCisjOiB2ZXJzaW9uLmM6Njg2Cittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyB3ZWVyZ2F3ZSIKKworIzogdmVyc2lvbi5jOjY5MQorbXNnaWQgIiIKKyJcbiIKKyJSSVNDIE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJSSVNDIE9TIHdlZXJnYXdlIgorCisjOiB2ZXJzaW9uLmM6NzAxCittc2dpZCAiIgorIlxuIgorIkluY2x1ZGVkIHBhdGNoZXM6ICIKK21zZ3N0ciAiIgorIlxuIgorIkluZ2VzbG90ZSBsYXNsYXBwaWVzOiIKKworIzogdmVyc2lvbi5jOjcyOAorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyJHZWtvbXBpbGVlciBvcCAiCisKKyM6IHZlcnNpb24uYzo3MzEKK21zZ2lkICJieSAiCittc2dzdHIgImRldXIgIgorCisjOiB2ZXJzaW9uLmM6NzQzCittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJFbm9ybWUgd2Vlcmdhd2UgIgorCisjOiB2ZXJzaW9uLmM6NzQ2Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIkdyb290IHdlZXJnYXdlICIKKworIzogdmVyc2lvbi5jOjc0OQorbXNnaWQgIiIKKyJcbiIKKyJOb3JtYWwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJOb3JtYWxlIHdlZXJnYXdlICIKKworIzogdmVyc2lvbi5jOjc1MgorbXNnaWQgIiIKKyJcbiIKKyJTbWFsbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIktsZWluIHdlZXJnYXdlICIKKworIzogdmVyc2lvbi5jOjc1NAorbXNnaWQgIiIKKyJcbiIKKyJUaW55IHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiUGllcGtsZWluIHdlZXJnYXdlICIKKworIzogdmVyc2lvbi5jOjc2MAorbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAic29uZGVyIEdVSS4iCisKKyM6IHZlcnNpb24uYzo3NjQKK21zZ2lkICJ3aXRoIEdUSy1HTk9NRSBHVUkuIgorbXNnc3RyICJtZXQgR1RLLUdOT01FIEdVSS4iCisKKyM6IHZlcnNpb24uYzo3NjYKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICJtZXQgR1RLIEdVSSIKKworIzogdmVyc2lvbi5jOjc3MAorbXNnaWQgIndpdGggWDExLU1vdGlmIEdVSS4iCittc2dzdHIgIm1ldCBYMTEtTW90aWYgR1VJLiIKKworIzogdmVyc2lvbi5jOjc3MworbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICJtZXQgWDExLUF0aGVuYSBHVUkiCisKKyM6IHZlcnNpb24uYzo3NzYKK21zZ2lkICJ3aXRoIEJlT1MgR1VJLiIKK21zZ3N0ciAibWV0IEJlT1MgR1VJIgorCisjOiB2ZXJzaW9uLmM6Nzc5Cittc2dpZCAid2l0aCBQaG90b24gR1VJLiIKK21zZ3N0ciAibWV0IFBob3RvbiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6NzgyCittc2dpZCAid2l0aCBHVUkuIgorbXNnc3RyICJtZXQgR1VJLiIKKworIzogdmVyc2lvbi5jOjc4NQorbXNnaWQgIndpdGggQ2FyYm9uIEdVSS4iCittc2dzdHIgIm1ldCBDYXJib24gR1VJLiIKKworIzogdmVyc2lvbi5jOjc4OAorbXNnaWQgIndpdGggQ29jb2EgR1VJLiIKK21zZ3N0ciAibWV0IENvY29hIEdVSS4iCisKKyM6IHZlcnNpb24uYzo3OTEKK21zZ2lkICJ3aXRoIChjbGFzc2ljKSBHVUkuIgorbXNnc3RyICJtZXQgKGtsYXNzaWVrZSkgR1VJLiIKKworIzogdmVyc2lvbi5jOjgwMgorbXNnaWQgIiAgRmVhdHVyZXMgaW5jbHVkZWQgKCspIG9yIG5vdCAoLSk6XG4iCittc2dzdHIgIiAgS2VubWVya2UgaW4tICgrKSBvZiB1aXRnZXNsdWl0ICgtKTpcbiIKKworIzogdmVyc2lvbi5jOjgxNAorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgc3RlbHNlbCB2aW1yYy1s6mVyOiBcIiIKKworIzogdmVyc2lvbi5jOjgxOQorbXNnaWQgIiAgICAgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICBnZWJydWlrZXIgdmltcmMtbOplcjogXCIiCisKKyM6IHZlcnNpb24uYzo4MjQKK21zZ2lkICIgMm5kIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAyZGUgZ2VicnVpa2VyIHZpbXJjLWzqZXIgXCIiCisKKyM6IHZlcnNpb24uYzo4MjkKK21zZ2lkICIgM3JkIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAzZGUgZ2VicnVpa2VyIHZpbXJjLWzqZXIgXCIiCisKKyM6IHZlcnNpb24uYzo4MzQKK21zZ2lkICIgICAgICB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgIGdlYnJ1aWtlciBleHJjLWzqZXI6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODM5Cittc2dpZCAiICAybmQgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgIDJkZSBnZWJydWlrZXIgZXhyYy1s6mVyOiBcIiIKKworIzogdmVyc2lvbi5jOjg0NQorbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICBzdGVsc2VsIGd2aW1yYy1s6mVyOiBcIiIKKworIzogdmVyc2lvbi5jOjg0OQorbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIGdlYnJ1aWtlciBndmltcmMtbOplcjogXCIiCisKKyM6IHZlcnNpb24uYzo4NTMKK21zZ2lkICIybmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIjJkZSBnZWJydWlrZXIgZ3ZpbXJjLWzqZXI6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODU4Cittc2dpZCAiM3JkIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIzZGUgZ2VicnVpa2VyIGd2aW1yYy1s6mVyOiBcIiIKKworIzogdmVyc2lvbi5jOjg2NQorbXNnaWQgIiAgICBzeXN0ZW0gbWVudSBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIHN0ZWxzZWwga2llc2x5cy1s6mVyOiBcIiIKKworIzogdmVyc2lvbi5jOjg3MworbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICBieXN0YW5kIHZpciAkVklNOiBcIiIKKworIzogdmVyc2lvbi5jOjg3OQorbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiIGJ5c3RhbmQgdmlyICRWSU1SVU5USU1FOiBcIiIKKworIzogdmVyc2lvbi5jOjg4MworbXNnaWQgIkNvbXBpbGF0aW9uOiAiCittc2dzdHIgIktvbXBpbGVyaW5nOiAiCisKKyM6IHZlcnNpb24uYzo4ODkKK21zZ2lkICJDb21waWxlcjogIgorbXNnc3RyICJLb21waWxlZXJkZXI6ICIKKworIzogdmVyc2lvbi5jOjg5NAorbXNnaWQgIkxpbmtpbmc6ICIKK21zZ3N0ciAiS29wcGVsaW5nOiAiCisKKyM6IHZlcnNpb24uYzo4OTkKK21zZ2lkICIgIERFQlVHIEJVSUxEIgorbXNnc3RyICIgIE9OVEZPVVRJTkdTLUtPTVBJTEVSSU5HIgorCisjOiB2ZXJzaW9uLmM6OTM0Cittc2dpZCAiVklNIC0gVmkgSU1wcm92ZWQiCittc2dzdHIgIlZJTSAtIFZpIE1ldCBza29wIgorCisjIG5qajogOikpCisjOiB2ZXJzaW9uLmM6OTM2Cittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgIldlZXJnYXdlICIKKworIzogdmVyc2lvbi5jOjkzNworbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAiZGV1ciBCcmFtIE1vb2xlbmFhciBldCBhbC4iCisKKyM6IHZlcnNpb24uYzo5MzgKK21zZ2lkICJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIgorbXNnc3RyICJWaW0gaXMgdnJ5ZWtvZGUsIGVuIHZyeWxpayB2ZXJzcHJlaWJhYXIiCisKKyM6IHZlcnNpb24uYzo5NDAKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAiSGVscCBhcm0ga2luZGVycyBpbiBVZ2FuZGEhIgorCisjOiB2ZXJzaW9uLmM6OTQxCittc2dpZCAidHlwZSAgOmhlbHAgaWNjZjxFbnRlcj4gICAgICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAidGlrICAgOmhlbHAgaWNjZjxFbnRlcj4gdmlyIG1lZXIgaW5saWd0aW5nIGhpZXJvb3IgIgorCisjOiB2ZXJzaW9uLmM6OTQzCittc2dpZCAidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIKK21zZ3N0ciAidGlrICAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgb20gcHJvZ3JhbSB2ZXJsYWF0ICAgICIKKworIzogdmVyc2lvbi5jOjk0NAorbXNnaWQgInR5cGUgIDpoZWxwPEVudGVyPiAgb3IgIDxGMT4gIGZvciBvbi1saW5lIGhlbHAiCittc2dzdHIgInRpayAgIDpoZWxwPEVudGVyPiAgb2YgIDxGMT4gIHZpciBhYW5seW4gaHVscCAgICAgICAiCisKKyM6IHZlcnNpb24uYzo5NDUKK21zZ2lkICJ0eXBlICA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICBmb3IgdmVyc2lvbiBpbmZvIgorbXNnc3RyICJ0aWsgICA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICB2aXIgd2Vlcmdhd2UtaW5saWd0aW5nIgorCisjOiB2ZXJzaW9uLmM6OTQ4Cittc2dpZCAiUnVubmluZyBpbiBWaSBjb21wYXRpYmxlIG1vZGUiCittc2dzdHIgIlZvZXIgdGFucyB1aXQgaW4gVmktdmVyc29lbmJhcmUgbW9kdXMiCisKKyM6IHZlcnNpb24uYzo5NDkKK21zZ2lkICJ0eXBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBmb3IgVmltIGRlZmF1bHRzIgorbXNnc3RyICJ0aWsgICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICB2aXIgVmltIHZlcnN0ZWt3YWFyZGVzICAgIgorCisjOiB2ZXJzaW9uLmM6OTUwCittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAidGlrICAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gdmlyIG1lZXIgaW5saWd0aW5nIGhpZXJvb3IiCisKKyM6IHZlcnNpb24uYzo5OTAKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICJXQUFSU0tVV0lORzogV2luZG93cyA5NS85OC9NRSBiZXNwZXVyIgorCisjOiB2ZXJzaW9uLmM6OTkzCittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAidGlrICAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgdmlyIG1lZXIgaW5saWd0aW5nIGhpZXJvb3IiCisKKyM6IHdpbmRvdy5jOjIwMQorbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiBEYWFyIGlzIG5pZSAnbiB2b29yc2tvdS12ZW5zdGVyIG5pZSIKKworIzogd2luZG93LmM6NTY4Cittc2dpZCAiRTQ0MjogQ2FuJ3Qgc3BsaXQgdG9wbGVmdCBhbmQgYm90cmlnaHQgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiRTQ0MjogS2FuIG5pZSBiby1saW5rcyBlbiBvbmRlci1yZWdzIHRlcnNlbGZkZXJ0eWQgdmVyZGVlbCBuaWUiCisKKyM6IHdpbmRvdy5jOjEzMjcKK21zZ2lkICJFNDQzOiBDYW5ub3Qgcm90YXRlIHdoZW4gYW5vdGhlciB3aW5kb3cgaXMgc3BsaXQiCittc2dzdHIgIkU0NDM6IEthbiBuaWUgcm90ZWVyIHRlcnd5bCAnbiBhbmRlciB2ZW5zdGVyIHZlcmRlZWwgaXMgbmllIgorCisjOiB3aW5kb3cuYzoxODEwCittc2dpZCAiRTQ0NDogQ2Fubm90IGNsb3NlIGxhc3Qgd2luZG93IgorbXNnc3RyICJFNDQ0OiBLYW4gbmllIGxhYXN0ZSB2ZW5zdGVyIHRvZW1hYWsgbmllIgorCisjOiB3aW5kb3cuYzoyNDc0Cittc2dpZCAiQWxyZWFkeSBvbmx5IG9uZSB3aW5kb3ciCittc2dzdHIgIkRhYXIgaXMgYWxyZWVkcyBzbGVncyBlZW4gdmVuc3RlciIKKworIzogd2luZG93LmM6MjUyMQorbXNnaWQgIkU0NDU6IE90aGVyIHdpbmRvdyBjb250YWlucyBjaGFuZ2VzIgorbXNnc3RyICJFNDQ1OiBEaWUgYW5kZXIgdmVuc3RlciBiZXZhdCB2ZXJhbmRlcmluZ2UiCisKKyM6IHdpbmRvdy5jOjQzNDEKK21zZ2lkICJFNDQ2OiBObyBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFNDQ2OiBHZWVuIGzqZXJuYWFtIG9uZGVyIGxvcGVyIgorCisjOiB3aW5kb3cuYzo0NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDc6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTQ0NzogS2FuIGzqZXIgXCIlc1wiIG5pZSB2aW5kIGluIHBhZCBuaWUiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NTg2Cittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICJXeXNpZyBtZXQgJm1lZXIgYXMgZWVuIFZpbSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo1OTIKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgIld5c2lnIG1ldCAnbiBlbmtlbCAmVmltIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjYwNAorbXNnaWQgIkVkaXQgd2l0aCAmVmltIgorbXNnc3RyICJXeXNpZyBtZXQgJlZpbSIKKworIy4gTm93IGNvbmNhdGVuYXRlCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjYyOAorbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICJXeXNpZyBtZXQgYmVzdGFhbmRlIFZpbSAtICYiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NzUyCittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgIld5c2lnIGRpZSBnZWtvc2UgbOplcihzKSBtZXQgVmltIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjg5MSAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjk2OQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHByb2Nlc3M6IENoZWNrIGlmIGd2aW0gaXMgaW4geW91ciBwYXRoISIKK21zZ3N0ciAiRk91dCBtZXQgZGllIHNrZXAgdmFuIHByb3NlczogS3lrIG9mIGd2aW0gaW4gam91IHBhZCBpcyEiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6ODkyIC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTA2CisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjk3MAorbXNnaWQgImd2aW1leHQuZGxsIGVycm9yIgorbXNnc3RyICInZ3ZpbWV4dC5kbGwnIGZvdXQiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTA1Cittc2dpZCAiUGF0aCBsZW5ndGggdG9vIGxvbmchIgorbXNnc3RyICJQYWQtbGVuZ3RlIHRlIGxhbmsiCisKKyM6IGdsb2JhbHMuaDo4NzgKK21zZ2lkICItLU5vIGxpbmVzIGluIGJ1ZmZlci0tIgorbXNnc3RyICItLUdlZW4gcmXrbHMgaW4gYnVmZmVyLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTAxOQorbXNnaWQgIkNvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiQmV2ZWwgZ2VrYW5zZWxsbGVlciIKKworIzogZ2xvYmFscy5oOjEwMjAKK21zZ2lkICJBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAiUGFyYW1ldGVyIGJlbm9kaWciCisKKyM6IGdsb2JhbHMuaDoxMDIxCittc2dpZCAiRTEwOiBcXCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgLywgPyBvciAmIgorbXNnc3RyICJFMTA6IFxcIG1vZXQgZ2V2b2xnIHdvcmQgZGV1ciAvLCA/IG9mICYiCisKKyM6IGdsb2JhbHMuaDoxMDIzCittc2dpZCAiRTExOiBJbnZhbGlkIGluIGNvbW1hbmQtbGluZSB3aW5kb3c7IDxDUj4gZXhlY3V0ZXMsIENUUkwtQyBxdWl0cyIKK21zZ3N0ciAiRTExOiBPbmdlbGRpZyBpbiBiZXZlbHJl62wgdmVuc3RlcjogPENSPiB2b2VyIHVpdCwgQ1RSTC1DIHN0b3AiCisKKyM6IGdsb2JhbHMuaDoxMDI1Cittc2dpZCAiRTEyOiBDb21tYW5kIG5vdCBhbGxvd2VkIGZyb20gZXhyYy92aW1yYyBpbiBjdXJyZW50IGRpciBvciB0YWcgc2VhcmNoIgorbXNnc3RyICIiCisiRTEyOiBCZXZlbCB1aXQgZXhyYy92aW1yYyBuaWUgdG9lZ2VsYWF0IGluIGh1aWRpZ2UgZ2lkcy0gb2YgZXRpa2V0c29la3RvZyBuaWUiCisKKyM6IGdsb2JhbHMuaDoxMDI2Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IEzqZXIgYmVzdGFhbiAoZ2VicnVpayAhIG9tIHRlIGR3aW5nKSIKKworIzogZ2xvYmFscy5oOjEwMjcKK21zZ2lkICJDb21tYW5kIGZhaWxlZCIKK21zZ3N0ciAiQmV2ZWwgaGV0IGdlZmFhbCIKKworIzogZ2xvYmFscy5oOjEwMjgKK21zZ2lkICJJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiSW50ZXJuZSBmb3V0IgorCisjOiBnbG9iYWxzLmg6MTAyOQorbXNnaWQgIkludGVycnVwdGVkIgorbXNnc3RyICJPbmRlcmJyZWVrIgorCisjOiBnbG9iYWxzLmg6MTAzMAorbXNnaWQgIkUxNDogSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFMTQ6IE9uZ2VsZGlnZSBhZHJlcyIKKworIzogZ2xvYmFscy5oOjEwMzEKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJPbmdlbGRpZ2UgcGFyYW1ldGVyIgorCisjOiBnbG9iYWxzLmg6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiT25nZWxkaWdlIHBhcmFtZXRlcjogJXMiCisKKyM6IGdsb2JhbHMuaDoxMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTogSW52YWxpZCBleHByZXNzaW9uOiAlcyIKK21zZ3N0ciAiRTE1OiBPbmdlbGRpZ2UgdWl0ZHJ1a2tpbmc6ICVzIgorCisjOiBnbG9iYWxzLmg6MTAzNgorbXNnaWQgIkUxNjogSW52YWxpZCByYW5nZSIKK21zZ3N0ciAiRTE2OiBPbmdlbGRpZ2Ugb212YW5nIgorCisjOiBnbG9iYWxzLmg6MTAzNworbXNnaWQgIkludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAiT25nZWxkaWdlIGJldmVsIgorCisjOiBnbG9iYWxzLmg6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCIgaXMgJ24gZ2lkcyIKKworIzogZ2xvYmFscy5oOjEwNDIKK21zZ2lkICJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIgorbXNnc3RyICJFMTg6IE9udmVyd2FndGUga2FyYWt0ZXJzIHZvb3IgJz0nIgorCisjOiBnbG9iYWxzLmg6MTA0NAorbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiBNZXJrZXIgaGV0IG9uZ2VsZGlnZSByZetsbm9tbWVyIgorCisjOiBnbG9iYWxzLmg6MTA0NQorbXNnaWQgIkUyMDogTWFyayBub3Qgc2V0IgorbXNnc3RyICJFMjA6IE1lcmtlciBuaWUgZ2VzdGVsIG5pZSIKKworIzogZ2xvYmFscy5oOjEwNDYKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTogS2FuIG5pZSB3eXNpZyBuaWUsICdtb2RpZmlhYmxlJyBpcyBhZiIKKworIzogZ2xvYmFscy5oOjEwNDcKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IFNrcmlwdGUgdGUgZGllcCBnZS1uZXMiCisKKyM6IGdsb2JhbHMuaDoxMDQ4Cittc2dpZCAiRTIzOiBObyBhbHRlcm5hdGUgZmlsZSIKK21zZ3N0ciAiRTIzOiBHZWVuIGFsdGVybmF0aWV3ZSBs6mVyIG5pZSIKKworIzogZ2xvYmFscy5oOjEwNDkKK21zZ2lkICJFMjQ6IE5vIHN1Y2ggYWJicmV2aWF0aW9uIgorbXNnc3RyICJFMjQ6IEFma29ydGluZyBiZXN0YWFuIG5pZSIKKworIzogZ2xvYmFscy5oOjEwNTAKK21zZ2lkICJObyAhIGFsbG93ZWQiCittc2dzdHIgIkdlZW4gISB0b2VnZWxhYXQgbmllIgorCisjOiBnbG9iYWxzLmg6MTA1MgorbXNnaWQgIkUyNTogR1VJIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIkUyNTogR1VJIGthbiBuaWUgZ2VicnVpayB3b3JkIG5pZTogTmllIHR5ZGVucyBrb21waWxlcmluZyBnZWtpZXMgbmllIgorCisjOiBnbG9iYWxzLmg6MTA1NQorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiIgorIkUyNjogSGVicmVldXMga2FuIG5pZSBnZWJydWlrIHdvcmQgbmllOiBOaWUgdHlkZW5zIGtvbXBpbGVyaW5nIGdla2llcyBuaWVcbiIKKworIzogZ2xvYmFscy5oOjEwNTgKK21zZ2lkICJFMjc6IEZhcnNpIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiIgorIkUyNzogRmFyc2kga2FuIG5pZSBnZWJydWlrIHdvcmQgbmllOiBOaWUgdHlkZW5zIGtvbXBpbGVyaW5nIGdla2llcyBuaWVcbiIKKworIzogZ2xvYmFscy5oOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBHZWVuIHNvZGFuaWdlIHVpdGxpZ2dyb2VwbmFhbSBuaWU6ICVzIgorCisjOiBnbG9iYWxzLmg6MTA2MworbXNnaWQgIkUyOTogTm8gaW5zZXJ0ZWQgdGV4dCB5ZXQiCittc2dzdHIgIkUyOTogTm9nIGdlZW4gaW5nZXZvZWdkZSB0ZWtzIG5pZSIKKworIzogZ2xvYmFscy5oOjEwNjQKK21zZ2lkICJFMzA6IE5vIHByZXZpb3VzIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiRTMwOiBHZWVuIHZvcmlnZSBiZXZlbHJl62wgbmllIgorCisjOiBnbG9iYWxzLmg6MTA2NQorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IEdlZW4gc28gJ24gYmluZGluZyBuaWUiCisKKyM6IGdsb2JhbHMuaDoxMDY2Cittc2dpZCAiTm8gbWF0Y2giCittc2dzdHIgIkdlZW4gdHJlZmZlciBuaWUiCisKKyM6IGdsb2JhbHMuaDoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoOiAlcyIKK21zZ3N0ciAiR2VlbiB0cmVmZmVyOiAlcyIKKworIzogZ2xvYmFscy5oOjEwNjgKK21zZ2lkICJFMzI6IE5vIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTMyOiBHZWVuIGzqZXJuYWFtIgorCisjOiBnbG9iYWxzLmg6MTA2OQorbXNnaWQgIkUzMzogTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzMzogR2VlbiB2b3JpZ2UgdmVydmFuZ2luZ3NwYXRyb29uIG5pZSIKKworIzogZ2xvYmFscy5oOjEwNzAKK21zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCittc2dzdHIgIkUzNDogR2VlbiB2b3JpZ2UgYmV2ZWwgbmllIgorCisjOiBnbG9iYWxzLmg6MTA3MQorbXNnaWQgIkUzNTogTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzU6IEdlZW4gdm9yaWdlIHBhdHJvb24gbmllIgorCisjOiBnbG9iYWxzLmg6MTA3MgorbXNnaWQgIk5vIHJhbmdlIGFsbG93ZWQiCittc2dzdHIgIkdlZW4gb212YW5nIHRvZWdlbGFhdCBuaWUiCisKKyM6IGdsb2JhbHMuaDoxMDc0Cittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjogVGUgbWluIHBsZWsiCisKKyM6IGdsb2JhbHMuaDoxMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJLYW4gbmllIGzqZXIgJXMgc2tlcCBuaWUiCisKKyM6IGdsb2JhbHMuaDoxMDc3Cittc2dpZCAiQ2FuJ3QgZ2V0IHRlbXAgZmlsZSBuYW1lIgorbXNnc3RyICJLYW4gbmllIHR5ZGVsaWtlIGzqZXJuYWFtIGtyeSBuaWUiCisKKyM6IGdsb2JhbHMuaDoxMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiS2FuIG5pZSBs6mVyICVzIG9vcG1hYWsgbmllIgorCisjOiBnbG9iYWxzLmg6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIkthbiBuaWUgbOplciAlcyBsZWVzIG5pZSIKKworIzogZ2xvYmFscy5oOjEwODAKK21zZ2lkICJFMzc6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUzNzogT25nZXNrcnlmIHNlZGVydCB2b3JpZ2UgdmVyYW5kZXJpbmcgKGdlYnJ1aWsgISBvbSB0ZSBkd2luZykiCisKKyM6IGdsb2JhbHMuaDoxMDgxCittc2dpZCAiRTM4OiBOdWxsIGFyZ3VtZW50IgorbXNnc3RyICJFMzg6IE51bCBwYXJhbWV0ZXIiCisKKyMgbmpqOiBobW0sIGhvZSBoYW50ZWVyIG1lbnMgZGllIG9uZGVyc2tlaWQgdHVzc2VuICdOdWxsJyAoYWZ3ZXNpZykgZW4KKyMgbmpqOiAnWmVybycgKGRpZSBub21tZXIpPworIzogZ2xvYmFscy5oOjEwODMKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiBOb21tZXIgdmVyd2FnIgorCisjOiBnbG9iYWxzLmg6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA6IENhbid0IG9wZW4gZXJyb3JmaWxlICVzIgorbXNnc3RyICJFNDA6IEthbiBuaWUgZm91dGzqZXIgJXMgb29wbWFhayBuaWUiCisKKyM6IGdsb2JhbHMuaDoxMDg5Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiBHZWhldWUgb3AhIgorCisjOiBnbG9iYWxzLmg6MTA5MgorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kIgorbXNnc3RyICJQYXRyb29uIG5pZSBnZXZpbmQgbmllIgorCisjOiBnbG9iYWxzLmg6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIlBhdHJvb24gbmllIGdldmluZCBuaWU6ICVzIgorCisjOiBnbG9iYWxzLmg6MTA5NQorbXNnaWQgIkFyZ3VtZW50IG11c3QgYmUgcG9zaXRpdmUiCittc2dzdHIgIlBhcmFtZXRlciBtb2V0IHBvc2l0aWVmIHdlZXMiCisKKyM6IGdsb2JhbHMuaDoxMDk3Cittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0MjogR2VlbiBGb3V0ZSIKKworIzogZ2xvYmFscy5oOjEwOTkKK21zZ2lkICJFNDM6IERhbWFnZWQgbWF0Y2ggc3RyaW5nIgorbXNnc3RyICJFNDM6IEJlc2thZGlnZSB0cmVmZmVyc3RyaW5nIgorCisjOiBnbG9iYWxzLmg6MTEwMAorbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6IEtvcnJ1cHRlIHBhdHJvb25wcm9ncmFtIgorCisjOiBnbG9iYWxzLmg6MTEwMQorbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0ICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU0NTogJ3JlYWRvbmx5JyBvcHNpZSBpcyBhYW4gKGdlYnJ1aWsgISBvbSB0ZSBkd2luZykiCisKKyM6IGdsb2JhbHMuaDoxMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjogQ2Fubm90IHNldCByZWFkLW9ubHkgdmFyaWFibGUgXCIlc1wiIgorbXNnc3RyICJFNDY6IEthbiBuaWUgbGVlcy1hbGxlZW4gdmVyYW5kZXJsaWtlIHN0ZWwgbmllIFwiJXNcIiIKKworIzogZ2xvYmFscy5oOjExMDYKK21zZ2lkICJFNDc6IEVycm9yIHdoaWxlIHJlYWRpbmcgZXJyb3JmaWxlIgorbXNnc3RyICJFNDc6IEZvdXQgdHlkZW5zIGxlZXMgdmFuICdlcnJvcmZpbGUnIgorCisjOiBnbG9iYWxzLmg6MTEwOQorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiBOaWUgdG9lZ2VsYWF0IGluIHNhbmRwdXQgbmllIgorCisjOiBnbG9iYWxzLmg6MTExMQorbXNnaWQgIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIKK21zZ3N0ciAiRTQ5OiBPbmdlbGRpZ2Ugcm9sZ3Jvb3R0ZSIKKworIzogZ2xvYmFscy5oOjExMTIKK21zZ2lkICJFOTE6ICdzaGVsbCcgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJFOTE6ICdzaGVsbCcgKGRvcCkgb3BzaWUgaXMgbGVlZyIKKworIzogZ2xvYmFscy5oOjExMTMKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiBTbHVpdGZvdXQgbWV0IHJ1aWxs6mVyIgorCisjOiBnbG9iYWxzLmg6MTExNAorbXNnaWQgIkU3MzogdGFnIHN0YWNrIGVtcHR5IgorbXNnc3RyICJFNzM6IGV0aWtldHN0YXBlbCBsZWVnIgorCisjOiBnbG9iYWxzLmg6MTExNQorbXNnaWQgIkU3NDogQ29tbWFuZCB0b28gY29tcGxleCIKK21zZ3N0ciAiRTc0OiBCZXZlbCB0ZSBrb21wbGVrcyIKKworIzogZ2xvYmFscy5oOjExMTYKK21zZ2lkICJFNzU6IE5hbWUgdG9vIGxvbmciCittc2dzdHIgIkU3NTogTmFhbSB0ZSBsYW5rIgorCisjOiBnbG9iYWxzLmg6MTExNworbXNnaWQgIkU3NjogVG9vIG1hbnkgWyIKK21zZ3N0ciAiRTc2OiBUZSB2ZWVsIFsiCisKKyM6IGdsb2JhbHMuaDoxMTE4Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IFRlIHZlZWwgbOplcm5hbWUiCisKKyM6IGdsb2JhbHMuaDoxMTE5Cittc2dpZCAiVHJhaWxpbmcgY2hhcmFjdGVycyIKK21zZ3N0ciAiT29yYm9kaWdlIGthcmFrdGVycyIKKworIzogZ2xvYmFscy5oOjExMjAKK21zZ2lkICJFNzg6IFVua25vd24gbWFyayIKK21zZ3N0ciAiRTc4OiBPbmJla2VuZGUgbWVya2VyIgorCisjOiBnbG9iYWxzLmg6MTEyMQorbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTogS2FuIG5pZSBwbGVraG91ZXJzIHVpdGJyZWkgbmllIgorCisjOiBnbG9iYWxzLmg6MTEyMgorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiBGb3V0IHR5ZGVucyBza3J5Zm9wZXJhc2llIgorCisjOiBnbG9iYWxzLmg6MTEyMworbXNnaWQgIlplcm8gY291bnQiCittc2dzdHIgIk51bCB0ZWxsaW5nIgorCisjOiBnbG9iYWxzLmg6MTEyNQorbXNnaWQgIkU4MTogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQiCittc2dzdHIgIkU4MTogR2VicnVpayB2YW4gJzxTSUQ+JyBidWl0ZSBza3JpcGtvbnRla3MiCisKKyN+IG1zZ2lkICJFMjU4OiBubyBtYXRjaGVzIGZvdW5kIGluIGNzY29wZSBjb25uZWN0aW9ucyIKKyN+IG1zZ3N0ciAiRTI1ODogZ2VlbiB0cmVmZmVycyBnZXZpbmQgaW4gJ2NzY29wZScgdmVyYmluZGluZ3MgbmllIgorCisjfiBtc2dpZCAiTm8gc2VydmVycyBmb3VuZCBmb3IgdGhpcyBkaXNwbGF5IgorI34gbXNnc3RyICJHZWVuIGJlZGllbmVycyBnZXZpbmQgdmlyIGRpZSAnZGlzcGxheScgbmllIgorCisjfiBtc2dpZCAiTWlzc2luZyBmaWxlbmFtZSIKKyN+IG1zZ3N0ciAiT250YnJla2VuZGUgbOplcm5hYW0iCisKKyN+IG1zZ2lkICJJbnZhbGlkIGxpbmUgbnVtYmVyOiAlbGQiCisjfiBtc2dzdHIgIk9uZ2VsZGlnZSByZetsbm9tbWVyOiAlbGQiCisKKyN+IG1zZ2lkICJDYW5ub3QgdXNlIDpub3JtYWwgZnJvbSBldmVudCBoYW5kbGVyIgorI34gbXNnc3RyICJLYW4gJzpub3JtYWwnIG5pZSB2YW51aXQgZ2ViZXVydGVuaXNoYW50ZWVyZGVyIGdlYnJ1aWsgbmllIgorCisjfiBtc2dpZCAiJWxkTCwgJWxkQyIKKyN+IG1zZ3N0ciAiJWxkUiwgJWxkSyIKKworI34gbXNnaWQgIlZJTSAtIEhlbHAgb24uLi4iCisjfiBtc2dzdHIgIlZJTSAtIEh1bHAgbWV0Li4iCisKKyN+IG1zZ2lkICJUb3BpYzoiCisjfiBtc2dzdHIgIk9uZGVyd2VycDoiCisKKyN+IG1zZ2lkICJFcnJvcjogRHVyaW5nIGxvYWRpbmcgZm9udHNldCAlcyIKKyN+IG1zZ3N0ciAiRm91dDogR2VkdXJlbmRlIGRpZSBsYWFpIHZhbiBmb250c3RlbCAlcyIKKworI34gbXNnaWQgImxvY2FsZSBpcyBub3Qgc2V0IGNvcnJlY3RseSIKKyN+IG1zZ3N0ciAibG9rYWFsIGlzIG5pZSBrb3JyZWsgZ2VzdGVsIG5pZSIKKworI34gbXNnaWQgIlNldCBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHlvdXIgbG9jYWxlIgorI34gbXNnc3RyICJTdGVsIGRpZSAnTEFORycgb21nZXdpbmdzdmVyYW5kZXJsaWtlIG5hIGpvdSBsb2thYWwgdG9lIgorCisjfiBtc2dpZCAiRm9yIGtvcmVhbjoiCisjfiBtc2dzdHIgIlZpciBBZnJpa2FhbnM6IgorCisjfiBtc2dpZCAiICAgY3NoOiBzZXRlbnYgTEFORyBrbyIKKyN+IG1zZ3N0ciAiICAgY3NoOiBzZXRlbnYgTEFORyBhZiIKKworI34gbXNnaWQgIiAgIHNoIDogZXhwb3J0IExBTkc9a28iCisjfiBtc2dzdHIgIiAgIHNoOiBleHBvcnQgTEFORz1hZiIKKworI34gbXNnaWQgImZvbnRzZXQgbmFtZTogJXMiCisjfiBtc2dzdHIgImZvbnRzdGVsIG5hYW06ICVzIgorCisjfiBtc2dpZCAiWW91ciBsYW5ndWFnZSBGb250IG1pc3NpbmciCisjfiBtc2dzdHIgIkpvdSB0YWFsIEZvbnQgb250YnJlZWsiCisKKyN+IG1zZ2lkICJsb2FkZWQgZm9udG5hbWU6ICVzIgorI34gbXNnc3RyICJnZWxhYWlkZSBmb250bmFhbTogJXMiCisKKyN+IG1zZ2lkICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBkZWJ1Z2dlciBzaWduIgorI34gbXNnc3RyICJLYW4gbmllIGdlaGV1ZSB0b2VrZW4gdmlyIG9udGZvdXRlcnRla2VuIG5pZSIKKworI34gbXNnaWQgImF1dG9tYXRhIEVSUk9SOiBpbnRlcm5hbCIKKyN+IG1zZ3N0ciAiYXV0b21hdGEgRk9VVDogaW50ZXJuIgorCisjfiBtc2dpZCAiY3NfYWRkX2NvbW1vbjogYWxsb2MgZmFpbCAjMSIKKyN+IG1zZ3N0ciAiJ2NzX2FkZF9jb21tb24nOiB0b2VrZW4gb25zdWtzZXN2b2wgIzEiCisKKyN+IG1zZ2lkICJjc19hZGRfY29tbW9uOiBhbGxvYyBmYWlsICMyIgorI34gbXNnc3RyICInY3NfYWRkX2NvbW1vbic6IHRvZWtlbiBvbnN1a3Nlc3ZvbCAjMiIKKworI34gbXNnaWQgImNzX2FkZF9jb21tb246IGFsbG9jIGZhaWwgIzMiCisjfiBtc2dzdHIgIidjc19hZGRfY29tbW9uJzogdG9la2VuIG9uc3Vrc2Vzdm9sICMzIgorCisjfiBtc2dpZCAiY3NfYWRkX2NvbW1vbjogYWxsb2MgZmFpbCAjNCIKKyN+IG1zZ3N0ciAiJ2NzX2FkZF9jb21tb24nOiB0b2VrZW4gb25zdWtzZXN2b2wgIzQiCisKKyN+IG1zZ2lkICJSZXRyaWV2ZSBuZXh0IHN5bWJvbCIKKyN+IG1zZ3N0ciAiS3J5IHZvbGdlbmRlIHNpbWJvb2wiCisKKyN+IG1zZ2lkICItLSBTTmlGRisgY29tbWFuZHMgLS0iCisjfiBtc2dzdHIgIi0tIFNOaUZGKyBiZXZlbGUgLS0iCisKKyN+IG1zZ2lkICJVbnJlY29nbml6ZWQgc25pZmYgcmVxdWVzdCBbJXNdIgorI34gbXNnc3RyICJPbmJla2VuZGUgc25pZmYgdmVyc29layBbJXNdIgorCisjfiBtc2dpZCAiQ2FuJ3QgY3JlYXRlIGlucHV0IGNvbnRleHQuIgorI34gbXNnc3RyICJLYW4gbmllIGludm9lcmtvbnRla3Mgc2tlcCBuaWUuIgorCisjfiBtc2dpZCAiU29ycnksIGRlbGV0aW5nIGEgbWVudSBpcyBub3QgcG9zc2libGUgaW4gdGhlIEF0aGVuYSB2ZXJzaW9uIgorI34gbXNnc3RyICIiCisjfiAiSmFtbWVyLCBpbiBkaWUgQXRoZW5hIHdlZXJnYXdlIGlzIGRpdCBvbm1vb250bGlrIG9tICduIGtpZXNseXMgdGUgc2tyYXAiCisKKyN+IG1zZ2lkICJPdXQgb2YgbWVtb3J5IgorI34gbXNnc3RyICJHZWhldWUgb3AiCisKKyN+IG1zZ2lkICJQQyAoMzIgYml0cyBWaW0pIgorI34gbXNnc3RyICJQQyAoMzIgYmlzc2UgVmltKSIKKworI34gbXNnaWQgIlBDICgxNiBiaXRzIFZpbSkiCisjfiBtc2dzdHIgIlBDICgxNiBiaXNzZSBWaW0pIgorCisjfiBtc2dpZCAiVW5zdXBwb3J0ZWQgc2NyZWVuIG1vZGUiCisjfiBtc2dzdHIgIk9uZ2VzdGV1bmRlIHNrZXJtbW9kdXMiCisKKyN+IG1zZ2lkICJkZWFkbHkgc2lnbmFsIgorI34gbXNnc3RyICJkb2RlbGlrZSBzZWluIgorCisjfiBtc2dpZCAic29tZSIKKyN+IG1zZ3N0ciAic29tbWlnZSIKKworI34gbXNnaWQgIkxpYnJhcnkgY2FsbCBmYWlsZWQiCisjfiBtc2dzdHIgIkJpYmxpb3RlZWtmdW5rc2llcm9lcCBoZXQgZ2VmYWFsIgorCisjfiBtc2dpZCAiQ2Fubm90IGNsZWFyIGFsbCBoaWdobGlnaHQgZ3JvdXBzIgorI34gbXNnc3RyICJLYW4gbmllIGFsbGUgdWl0bGlnZ3JvZXBlIGxlZWdtYWFrIG5pZSIKKworI34gbXNnaWQgIkdVSSBpcyBub3QgcnVubmluZyIKKyN+IG1zZ3N0ciAiR1VJIHZvZXIgbmllIHVpdCBuaWUiCisKKyN+IG1zZ2lkICJDb21tYW5kIHRvbyBsb25nIgorI34gbXNnc3RyICJCZXZlbCB0ZSBsYW5rIgorCisjfiBtc2dpZCAiQW1iaWd1b3VzIG1hcHBpbmciCisjfiBtc2dzdHIgIkR1YmJlbHNpbm5pZ2UgYmluZGluZyIKKworI34gbXNnaWQgIkFtYmlndW91cyBtYXBwaW5nLCBjb25mbGljdHMgd2l0aCBcIiVzXCIiCisjfiBtc2dzdHIgIkR1YmJlbHNpbm5pZ2UgYmluZGluZywgYm90cyBtZXQgXCIlc1wiIgorCisjfiBtc2dpZCAiVG9vIG1hbnkgXFx6KCIKKyN+IG1zZ3N0ciAiVGUgdmVlbCBcXHooIgorCisjfiBtc2dpZCAiVG9vIG1hbnkgXFwoIgorI34gbXNnc3RyICJUZSB2ZWVsIFxcKCIKKworI34gbXNnaWQgIlVubWF0Y2hlZCBcXHooIgorI34gbXNnc3RyICJPbnBhYXIgXFx6KCIKKworI34gbXNnaWQgIlVubWF0Y2hlZCBcXCUoIgorI34gbXNnc3RyICJPbnBhYXIgXFx6IgorCisjfiBtc2dpZCAiVW5tYXRjaGVkIFxcKCIKKyN+IG1zZ3N0ciAiT25wYWFyIFxcKCIKKworI34gbXNnaWQgIlVubWF0Y2hlZCBcXCkiCisjfiBtc2dzdHIgIk9ucGFhciBcXCkiCisKKyN+IG1zZ2lkICIqLCBcXCsgb3IgXFx7IG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCisjfiBtc2dzdHIgIiosIFxcKyBvZiBcXHsgb3BlcmFuZCBtYWcgbGVlZyB3ZWVzIgorCisjfiBtc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFxAIgorI34gbXNnc3RyICJvbmdlbGRpZ2Uga2FyYWt0ZXIgbmEgXFxAIgorCisjfiBtc2dpZCAiVG9vIG1hbnkgY29tcGxleCBcXHsuLi59cyIKKyN+IG1zZ3N0ciAiVGUgdmVlbCBrb21wbGVrc2UgXFx7Li4ufWllcyIKKworI34gbXNnaWQgIk5lc3RlZCAqLCBcXD0sIFxcKywgXFwhIG9yIFxceyIKKyN+IG1zZ3N0ciAiR2VuZXN0ZSAqLCBcXD0sIFxcKywgXFwhIG9mIFxceyIKKworI34gbXNnaWQgImludmFsaWQgdXNlIG9mIFxcXyIKKyN+IG1zZ3N0ciAib25nZWxkaWdlIGdlYnJ1aWsgdmFuIFxcXyIKKworI34gbXNnaWQgIlxcPSBmb2xsb3dzIG5vdGhpbmciCisjfiBtc2dzdHIgIlxcPSB2b2xnIG5pa3MiCisKKyN+IG1zZ2lkICJcXCsgZm9sbG93cyBub3RoaW5nIgorI34gbXNnc3RyICJcXCsgdm9sZyBuaWtzIgorCisjfiBtc2dpZCAiXFxAIGZvbGxvd3Mgbm90aGluZyIKKyN+IG1zZ3N0ciAiXFxAIHZvbGcgbmlrcyIKKworI34gbXNnaWQgIlxceyBmb2xsb3dzIG5vdGhpbmciCisjfiBtc2dzdHIgIlxceyB2b2xnIG5pa3MiCisKKyN+IG1zZ2lkICJcXCogZm9sbG93cyBub3RoaW5nIgorI34gbXNnc3RyICJcXCogdm9sZyBuaWtzIgorCisjfiBtc2dpZCAiSWxsZWdhbCBiYWNrIHJlZmVyZW5jZSIKKyN+IG1zZ3N0ciAiT25nZWxkaWdlIHRydS12ZXJ3eXNpbmciCisKKyN+IG1zZ2lkICJcXHooIG5vdCBhbGxvd2VkIGhlcmUiCisjfiBtc2dzdHIgIlxceiggbmllIGhpZXIgdG9lZ2VsYWF0IG5pZSIKKworI34gbXNnaWQgIlxcejEgZXQgYWwuIG5vdCBhbGxvd2VkIGhlcmUiCisjfiBtc2dzdHIgIlxcejEgZS5hLiBuaWUgaGllciB0b2VnZWxhYXQgbmllIgorCisjfiBtc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFx6IgorI34gbXNnc3RyICJvbmdlbGRpZ2Uga2FyYWt0ZXIgbmEgXFx6IgorCisjfiBtc2dpZCAiTWlzc2luZyBdIGFmdGVyIFxcJVsiCisjfiBtc2dzdHIgIk9udGJyZWtlbmRlIF0gbmEgXFwlWyIKKworI34gbXNnaWQgIkVtcHR5IFxcJVtdIgorI34gbXNnc3RyICJMZesgXFwlW10iCisKKyN+IG1zZ2lkICJJbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXCUiCisjfiBtc2dzdHIgIm9uZ2VsZGlnZSBrYXJha3RlciBuYSBcXCUiCisKKyN+IG1zZ2lkICJVbmV4cGVjdGVkIG1hZ2ljIGNoYXJhY3RlcjsgY2hlY2sgTUVUQS4iCisjfiBtc2dzdHIgIk9udmVyd2FndGUgdG9vcmthcmFrdGVyOyBreWsgbmEgTUVUQS4iCisKKyN+IG1zZ2lkICJ0eXBlICA6aGVscCB1Z2FuZGE8RW50ZXI+ICAgICBpZiB5b3UgbGlrZSBWaW0gIgorI34gbXNnc3RyICJ0aWsgICA6aGVscCB1Z2FuZGE8RW50ZXI+ICAgICBhcyBqeSBob3UgdmFuIFZpbSAgICAgIgorCisjfiBtc2dpZCAiICAgICBXQVJOSU5HOiBJbnRlbCBDUFUgZGV0ZWN0ZWQuICAgICIKKyN+IG1zZ3N0ciAiICAgICBXQUFSU0tVV0lORzogSW50ZWwgU1ZFIGJlc3BldXIuICAgICIKKworI34gbXNnaWQgIiBQUEMgaGFzIGEgbXVjaCBiZXR0ZXIgYXJjaGl0ZWN0dXJlLiAiCisjfiBtc2dzdHIgIiBQUEMgaGV0ICduIHZlZWwgYmV0ZXIgYXJnaXRla3R1dXIuICIKKworI34gbXNnaWQgIlNlY3VyaXR5IGVycm9yOiBuZXcgdmltaW5mbyBmaWxlIGlzIGEgc3ltYm9saWMgbGluayIKKyN+IG1zZ3N0ciAiU2VrdXJpdGVpdHNmb3V0OiBudXdlIHZpbWluZm8gbOplciBpcyBhIHNpbWJvbGllc2Ugc2tha2VsIgorCisjfiBtc2dpZCAibGluZSB+JWxkOiAlcyIKKyN+IG1zZ3N0ciAicmXrbCB+JWxkOiAlcyIKKworI34gbXNnaWQgIm1ha2VlZiBvcHRpb24gbm90IHNldCIKKyN+IG1zZ3N0ciAiJ21ha2VlZicgb3BzaWUgbmllIGFhbiBuaWUiCisKKyN+IG1zZ2lkICJTZWN1cml0eSBlcnJvcjogZmlsdGVyIG91dHB1dCBpcyBhIHN5bWJvbGljIGxpbms6ICVzIgorI34gbXNnc3RyICJTZWt1cml0ZWl0c2ZvdXQ6IGZpbHRlciBhZnZvZXIgaXMgJ24gc2ltYm9saWVzZSBza2FrZWwiCisKKyN+IG1zZ2lkICJTZWN1cml0eSBlcnJvcjogJ2NoYXJjb252ZXJ0JyBvdXRwdXQgaXMgYSBzeW1ib2xpYyBsaW5rIgorI34gbXNnc3RyICJTZWt1cml0ZWl0c2ZvdXQ6ICdjaGFyY29udmVydCcgYWZ2b2VyIGlzICduIHNpbWJvbGllc2Ugc2tha2VsIgorCisjfiBtc2dpZCAiU2VjdXJpdHkgZXJyb3I6IGZpbHRlciBpbnB1dCBpcyBhIHN5bWJvbGljIGxpbms6ICVzIgorI34gbXNnc3RyICJTZWt1cml0ZWl0c2ZvdXQ6IGZpbHRlciBpbnZvZXIgaXMgJ24gc2ltYm9saWVzZSBza2FrZWwiCisKKyN+IG1zZ2lkICJGb2xkIG11c3QgYmUgYXQgbGVhc3QgdHdvIGxpbmVzIgorI34gbXNnc3RyICInbiBWb3UgbW9ldCB0ZW4gbWluc3RlIDIgcmXrbHMgd2VlcyIKKworI34gbXNnaWQgIk5vIGZvbGQgYXQgdGhpcyBsaW5lIgorI34gbXNnc3RyICJHZWVuIHZvdSBieSBoaWVyZGllIHJl62wgbmllIgorCisjfiBtc2dpZCAiU2VjdXJpdHkgZXJyb3I6IHNoZWxsIGNvbW1hbmQgb3V0cHV0IGlzIGEgc3ltYm9saWMgbGluayIKKyN+IG1zZ3N0ciAiU2VrdXJpdGVpdHNmb3V0OiBEb3AtYmV2ZWwgYWZ2b2VyIGlzICduIHNpbWJvbGllc2Ugc2tha2VsIgorCisjfiBtc2dpZCAiV2FybmluZzogJXMgb3B0aW9uIGNoYW5nZWQgZnJvbSBtb2RlbGluZSIKKyN+IG1zZ3N0ciAiV2FhcnNrdXdpbmc6ICVzIG9wc2llIHZlcmFuZGVyIHZhbmFmIG1vZHVzbHluIgorCisjfiBtc2dpZCAiQ2hhbmdlIGRpciBkZWJ1Z2dpbmcgZW5hYmxlZC4iCisjfiBtc2dzdHIgIlZlcmFuZGVyZ2lkcyBvbnRmb3V0aW5nIGluIHN0YWF0IGdlc3RlbCIKKworI34gbXNnaWQgIk5vdCBhIHByb3BlciBmaWxlIG5hbWU6ICclcyciCisjfiBtc2dzdHIgIk5pZSAnbiBnZWxkaWdlIGzqZXJuYWFtIG5pZTogJyVzJyIKKworI34gbXNnaWQgIkZpbGUgbmFtZSAnJXMnIGlzIHZhbGlkIgorI34gbXNnc3RyICJs6mVybmFhbSAnJXMgaXMgb25nZWxkaWciCisKKyN+IG1zZ2lkICJMZWF2ZTogJXMiCisjfiBtc2dzdHIgIlZlcmxhYXQ6ICVzIgorCisjfiBtc2dpZCAiV0FSTklORzogdGFnIGNvbW1hbmQgY2hhbmdlZCBhIGJ1ZmZlciEhISIKKyN+IG1zZ3N0ciAiV0FBUlNLVVdJTkc6IGV0aWtldGJldmVsIGhldCBidWZmZXIgdmVyYW5kZXIhISEiCmRpZmYgLS1naXQgYS9zcmMvcG8vY2EucG8gYi9zcmMvcG8vY2EucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1MGVmNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wby9jYS5wbwpAQCAtMCwwICsxLDYzNDEgQEAKKyMgQ2F0YWxhbiBtZXNzYWdlcyBmb3IgdmltLgorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIEVybmVzdCBBZHJvZ3XpIDxlYWRyb2d1ZUBnbXgubmV0Pi4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHZpbSA2LjJcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwMy0xMS0wMSAyMDoxMCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNC0wMS0xOSAxMzo1NyswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBFcm5lc3QgQWRyb2d16SA8ZWFkcm9ndWVAZ214Lm5ldD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDYXRhbGFuIDxjYUBkb2Rkcy5uZXQ+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogYnVmZmVyLmM6OTcKK21zZ2lkICJFODI6IENhbm5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLCBleGl0aW5nLi4uIgorbXNnc3RyICJFODI6IE5vIHMnaGEgcG9ndXQgYXNzaWduYXIgbWVt8nJpYSBwZXIgY2FwIGJ1ZmZlciwgc29ydGludC4uLiIKKworIzogYnVmZmVyLmM6MTAwCittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4MzogTm8gcydoYSBwb2d1dCBhc3NpZ25hciBtZW3ycmlhIHBlbCBidWZmZXIsIHVzYW50LW5lIHVuIGFsdHJlLi4uIgorCisjIHVubG9hZDogVHJldSBlbCBidWZmZXIgZGUgbGEgbWVt8nJpYSBwZXLyIGVsIGRlaXhhIGEgbGEgbGxpc3RhCisjIGRlbGV0ZTogVHJldSBlbCBidWZmZXIgZGUgbGEgbWVt8nJpYSBpIGRlIGxhIGxsaXN0YSBkZSBidWZmZXJzCisjIHdpcGUgb3V0OiBFbGltaW5hIGVsIGJ1ZmZlciBhbWIgdG90ZXMgbGVzIG9wY2lvbnMsIG1hcnF1ZXMsIGV0Yy4KKyMKKyM6IGJ1ZmZlci5jOjc5NworbXNnaWQgIkU1MTU6IE5vIGJ1ZmZlcnMgd2VyZSB1bmxvYWRlZCIKK21zZ3N0ciAiRTUxNTogTm8gcydoYSBhbGxpYmVyYXQgY2FwIGJ1ZmZlciIKKworIzogYnVmZmVyLmM6Nzk5Cittc2dpZCAiRTUxNjogTm8gYnVmZmVycyB3ZXJlIGRlbGV0ZWQiCittc2dzdHIgIkU1MTY6IE5vIHMnaGEgZWxpbWluYXQgY2FwIGJ1ZmZlciIKKworIzogYnVmZmVyLmM6ODAxCittc2dpZCAiRTUxNzogTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAiRTUxNzogTm8gcydoYSBkZXN0cnXvdCBjYXAgYnVmZmVyIgorCisjOiBidWZmZXIuYzo4MDkKK21zZ2lkICIxIGJ1ZmZlciB1bmxvYWRlZCIKK21zZ3N0ciAiUydoYSBhbGxpYmVyYXQgMSBidWZmZXIiCisKKyM6IGJ1ZmZlci5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHVubG9hZGVkIgorbXNnc3RyICJTJ2hhbiBhbGxpYmVyYXQgJWQgYnVmZmVycyIKKworIzogYnVmZmVyLmM6ODE2Cittc2dpZCAiMSBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiUydoYSBlbGltaW5hdCAxIGJ1ZmZlciIKKworIzogYnVmZmVyLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgZGVsZXRlZCIKK21zZ3N0ciAiUydoYW4gZWxpbWluYXQgJWQgYnVmZmVycyIKKworIzogYnVmZmVyLmM6ODIzCittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICJTJ2hhIGRlc3Ryde90IDEgYnVmZmVyIgorCisjOiBidWZmZXIuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB3aXBlZCBvdXQiCittc2dzdHIgIlMnaGFuIGRlc3Ryde90ICVkIGJ1ZmZlcnMiCisKKyM6IGJ1ZmZlci5jOjg4NgorbXNnaWQgIkU4NDogTm8gbW9kaWZpZWQgYnVmZmVyIGZvdW5kIgorbXNnc3RyICJFODQ6IE5vIHMnaGEgdHJvYmF0IGNhcCBidWZmZXIgbW9kaWZpY2F0IgorCisjLiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorIzogYnVmZmVyLmM6OTI1Cittc2dpZCAiRTg1OiBUaGVyZSBpcyBubyBsaXN0ZWQgYnVmZmVyIgorbXNnc3RyICJFODU6IE5vIGhpIGhhIGNhcCBidWZmZXIgYSBsYSBsbGlzdGEiCisKKyM6IGJ1ZmZlci5jOjkzNworIywgYy1mb3JtYXQKK21zZ2lkICJFODY6IENhbm5vdCBnbyB0byBidWZmZXIgJWxkIgorbXNnc3RyICJFODY6IE5vIHMnaGEgcG9ndXQgYW5hciBhbCBidWZmZXIgJWxkIgorCisjOiBidWZmZXIuYzo5NDAKK21zZ2lkICJFODc6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU4NzogTm8gZXMgcG90IGFuYXIgbelzIGVubGzgIGRlIGwn+mx0aW0gYnVmZmVyIgorCisjOiBidWZmZXIuYzo5NDIKK21zZ2lkICJFODg6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgYnVmZmVyIgorbXNnc3RyICJFODg6IE5vIGVzIHBvdCBhbmFyIG3pcyBlbmxs4CBkZWwgcHJpbWVyIGJ1ZmZlciIKKworIzogYnVmZmVyLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4OTogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciAlbGQgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTg5OiBObyBzJ2hhIGRlc2F0IGVsIGJ1ZmZlciAlbGQgKGFmZWdpdSAhIHBlciBjb25maXJtYXIpIgorCisjOiBidWZmZXIuYzo5ODIKK21zZ2lkICJFOTA6IENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU5MDogTm8gZXMgcG90IGFsbGliZXJhciBsJ/psdGltIGJ1ZmZlciIKKworIzogYnVmZmVyLmM6MTUwMAorbXNnaWQgIlcxNDogV2FybmluZzogTGlzdCBvZiBmaWxlIG5hbWVzIG92ZXJmbG93IgorbXNnc3RyICJXMTQ6IEF0ZW5jafM6IFMnaGEgZGVzYm9yZGF0IGxhIGxsaXN0YSBkZSBub21zIGRlIGZpdHhlcnMiCisKKyM6IGJ1ZmZlci5jOjE2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkyOiBCdWZmZXIgJWxkIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTkyOiBObyBzJ2hhIHRyb2JhdCBlbCBidWZmZXIgJWxkIgorCisjOiBidWZmZXIuYzoxOTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5MzogSGkgaGEgbelzIGQndW5hIGNvaW5jaWTobmNpYSBwZXIgJXMiCisKKyM6IGJ1ZmZlci5jOjE5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIgorbXNnc3RyICJFOTQ6IE5vIGhpIGhhIGNhcCBjb2luY2lk6G5jaWEgcGVyICVzIgorCisjOiBidWZmZXIuYzoyMjk5IGV4X2RvY21kLmM6NjU2MAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCIKK21zZ3N0ciAibO1uaWEgJWxkIgorCisjOiBidWZmZXIuYzoyMzgyCittc2dpZCAiRTk1OiBCdWZmZXIgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU5NTogSmEgZXhpc3RlaXggdW4gYnVmZmVyIGFtYiBhcXVlc3Qgbm9tIgorCisjOiBidWZmZXIuYzoyNjc1Cittc2dpZCAiIFtNb2RpZmllZF0iCittc2dzdHIgIiBbTW9kaWZpY2F0XSIKKworIzogYnVmZmVyLmM6MjY4MAorbXNnaWQgIltOb3QgZWRpdGVkXSIKK21zZ3N0ciAiW05vIGVkaXRhdF0iCisKKyM6IGJ1ZmZlci5jOjI2ODUKK21zZ2lkICJbTmV3IGZpbGVdIgorbXNnc3RyICJbRml0eGVyIG5vdV0iCisKKyM6IGJ1ZmZlci5jOjI2ODYKK21zZ2lkICJbUmVhZCBlcnJvcnNdIgorbXNnc3RyICJbTGVjdHVyYSBlcnLybmlhXSIKKworIzogYnVmZmVyLmM6MjY4OCBmaWxlaW8uYzoxOTE4Cittc2dpZCAiW3JlYWRvbmx5XSIKK21zZ3N0ciAiW25vbelzIGxlY3R1cmFdIgorCisjOiBidWZmZXIuYzoyNzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAtLSVkJSUtLSIKK21zZ3N0ciAiMSBs7W5pYSAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6MjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgLS0lZCUlLS0iCittc2dzdHIgIiVsZCBs7W5pZXMgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQgb2YgJWxkIC0tJWQlJS0tIGNvbCAiCittc2dzdHIgImztbmlhICVsZCBkZSAlbGQgLS0lZCUlLS0gY29sICIKKworIzogYnVmZmVyLmM6MjgxMworbXNnaWQgIltObyBmaWxlXSIKK21zZ3N0ciAiW0NhcCBmaXR4ZXJdIgorCisjLiBtdXN0IGJlIGEgaGVscCBidWZmZXIKKyM6IGJ1ZmZlci5jOjI4NTMKK21zZ2lkICJoZWxwIgorbXNnc3RyICJhanVkYSIKKworIzogYnVmZmVyLmM6MzQxMiBzY3JlZW4uYzo0OTk2Cittc2dpZCAiW2hlbHBdIgorbXNnc3RyICJbYWp1ZGFdIgorCisjOiBidWZmZXIuYzozNDQ0IHNjcmVlbi5jOjUwMDIKK21zZ2lkICJbUHJldmlld10iCittc2dzdHIgIltWaXN0YSBwcuh2aWFdIgorCisjOiBidWZmZXIuYzozNzI0Cittc2dpZCAiQWxsIgorbXNnc3RyICJUb3QiCisKKyM6IGJ1ZmZlci5jOjM3MjQKK21zZ2lkICJCb3QiCittc2dzdHIgIkJhaXgiCisKKyM6IGJ1ZmZlci5jOjM3MjYKK21zZ2lkICJUb3AiCittc2dzdHIgIkRhbHQiCisKKyM6IGJ1ZmZlci5jOjQ0NzAKK21zZ2lkICIiCisiXG4iCisiIyBCdWZmZXIgbGlzdDpcbiIKK21zZ3N0ciAiXG4jIExsaXN0YSBkZSBidWZmZXJzOlxuIgorCisjOiBidWZmZXIuYzo0NTAzCittc2dpZCAiW0Vycm9yIExpc3RdIgorbXNnc3RyICJbTGxpc3RhIGQnZXJyb3JzXSIKKworIzogYnVmZmVyLmM6NDUxNiBtZW1saW5lLmM6MTUwMQorbXNnaWQgIltObyBGaWxlXSIKK21zZ3N0ciAiW0NhcCBmaXR4ZXJdIgorCisjOiBidWZmZXIuYzo0ODE5Cittc2dpZCAiIgorIlxuIgorIi0tLSBTaWducyAtLS0iCittc2dzdHIgIlxuLS0tIFNlbnlhbHMgLS0tIgorCisjOiBidWZmZXIuYzo0ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNpZ25zIGZvciAlczoiCittc2dzdHIgIlNlbnlhbHMgcGVyICVzOiIKKworIzogYnVmZmVyLmM6NDg0NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgbGluZT0lbGQgIGlkPSVkICBuYW1lPSVzIgorbXNnc3RyICIgICAgbO1uaWE9JWxkICBpZD0lZCAgbm9tPSVzIgorCisjOiBkaWZmLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NjogQ2FuIG5vdCBkaWZmIG1vcmUgdGhhbiAlbGQgYnVmZmVycyIKK21zZ3N0ciAiRTk2OiBObyBlcyBwb2RlbiBtb3N0cmFyIGRpZmVy6G5jaWVzIGFtYiBt6XMgZGUgJWxkIGJ1ZmZlcnMiCisKKyM6IGRpZmYuYzo2NTEKK21zZ2lkICJFOTc6IENhbm5vdCBjcmVhdGUgZGlmZnMiCittc2dzdHIgIkU5NzogTm8gcydoYW4gcG9ndXQgbW9zdHJhciBsZXMgZGlmZXLobmNpZXMiCisKKyMgyXMgZWwgbm9tIGQndW4gZGngbGVnLiBNZW76ICJTcGxpdCBwYXRjaGVkIGJ5Li4uIgorIzogZGlmZi5jOjc1MAorbXNnaWQgIlBhdGNoIGZpbGUiCittc2dzdHIgIkZpdHhlciBkZSBkaWZlcuhuY2llcyIKKworIzogZGlmZi5jOjEwMDEKK21zZ2lkICJFOTg6IENhbm5vdCByZWFkIGRpZmYgb3V0cHV0IgorbXNnc3RyICJFOTg6IE5vIHMnaGEgcG9ndXQgbGxlZ2lyIGxhIHNvcnRpZGEgZGUgZGlmZiIKKworIzogZGlmZi5jOjE3NDIKK21zZ2lkICJFOTk6IEN1cnJlbnQgYnVmZmVyIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkU5OTogRWwgYnVmZmVyIGFjdHVhbCBubyBlcyB0cm9iYSBlbiBtb2RlIGRpZmYiCisKKyM6IGRpZmYuYzoxNzU0Cittc2dpZCAiRTEwMDogTm8gb3RoZXIgYnVmZmVyIGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMDogTm8gaGkgaGEgY2FwIGFsdHJlIGJ1ZmZlciBlbiBtb2RlIGRpZmYiCisKKyM6IGRpZmYuYzoxNzYyCittc2dpZCAiRTEwMTogTW9yZSB0aGFuIHR3byBidWZmZXJzIGluIGRpZmYgbW9kZSwgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlIgorbXNnc3RyICJFMTAxOiBIaSBoYSBt6XMgZGUgMiBidWZmZXJzIGVuIG1vZGUgZGlmZiwgbm8gc2Ugc2FwIHF1aW4gdXNhciIKKworIzogZGlmZi5jOjE3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMjogQ2FuJ3QgZmluZCBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTAyOiBObyBzJ2hhIHRyb2JhdCBlbCBidWZmZXIgXCIlc1wiIgorCisjOiBkaWZmLmM6MTc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAzOiBCdWZmZXIgXCIlc1wiIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDM6IEVsIGJ1ZmZlciBcIiVzXCIgbm8gZXMgdHJvYmEgZW4gbW9kZSBkaWZmIgorCisjOiBkaWdyYXBoLmM6MjE3MgorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiBObyBlcyBwZXJtZXRlbiBjYXLgY3RlcnMgZCdlc2NhcGFkYSBlbiB1biBk7WdyYWYiCisKKyM6IGRpZ3JhcGguYzoyMzQ0Cittc2dpZCAiRTU0NDogS2V5bWFwIGZpbGUgbm90IGZvdW5kIgorbXNnc3RyICJFNTQ0OiBObyBzJ2hhIHRyb2JhdCBlbCBmaXR4ZXIgZGUgbWFwYSBkZSB0ZWNsZXMiCisKKyMgdHJhZHVjY2nzIGRlIKtzb3VyY2VkIGZpbGW7LiAgZWFjCisjOiBkaWdyYXBoLmM6MjM3MQorbXNnaWQgIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTEwNTogTCdvcmRyZSA6bG9hZGtleW1hcCBub23pcyBlcyBwb3QgdXNhciBlbiBmaXR4ZXJzIgorCisjIGJ1c2NhciB1biBub20sIGVuIGxsb2MgZGVsIHZlcmIgq2NvbXBsZXRhcrsuICBlYWMKKyM6IGVkaXQuYzo0MAorbXNnaWQgIiBLZXl3b3JkIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIENvbXBsZXRhciBwYXJhdWxlcyBjbGF1ICheTi9eUCkiCisKKyMuIGN0cmxfeF9tb2RlID09IDAsIF5QL15OIGNvbXBsLgorIzogZWRpdC5jOjQxCittc2dpZCAiIF5YIG1vZGUgKF5FL15ZL15ML15dL15GL15JL15LL15EL15WL15OL15QKSIKK21zZ3N0ciAiIE1vZGUgXlggKF5FL15ZL15ML15dL15GL15JL15LL15EL15WL15OL15QKSIKKworIyBidXNjYXIgdW4gbm9tLCBlbiBsbG9jIGRlbCB2ZXJiIKtjb21wbGV0YXK7LiAgZWFjCisjLiBTY3JvbGwgaGFzIGl0J3Mgb3duIG1zZ3MsIGluIGl0J3MgcGxhY2UgdGhlcmUgaXMgdGhlIG1zZyBmb3IgbG9jYWwKKyMuICogY3RybF94X21vZGUgPSAwIChlZyBjb250aW51ZV9zdGF0dXMgJiBDT05UX0xPQ0FMKSAgLS0gQWNldmVkbworIzogZWRpdC5jOjQ0Cittc2dpZCAiIEtleXdvcmQgTG9jYWwgY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIgQ29tcGxldGFyIHBhcmF1bGVzIGNsYXUgbG9jYWxzICheTi9eUCkiCisKKyMgYnVzY2FyIHVuIG5vbSwgZW4gbGxvYyBkZWwgdmVyYiCrY29tcGxldGFyuy4gIGVhYworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkwvXk4vXlApIgorbXNnc3RyICIgQ29tcGxldGFyIGztbmllcyBzZW5jZXJlcyAoXkwvXk4vXlApIgorCisjIGJ1c2NhciB1biBub20sIGVuIGxsb2MgZGVsIHZlcmIgq2NvbXBsZXRhcrsuICBlYWMKKyM6IGVkaXQuYzo0NgorbXNnaWQgIiBGaWxlIG5hbWUgY29tcGxldGlvbiAoXkYvXk4vXlApIgorbXNnc3RyICIgQ29tcGxldGFyIG5vbXMgZGUgZml0eGVyICheRi9eTi9eUCkiCisKKyMgYnVzY2FyIHVuIG5vbSwgZW4gbGxvYyBkZWwgdmVyYiCrY29tcGxldGFyuy4gIGVhYworIzogZWRpdC5jOjQ3Cittc2dpZCAiIFRhZyBjb21wbGV0aW9uICheXS9eTi9eUCkiCittc2dzdHIgIiBDb21wbGV0YXIgZXRpcXVldGVzICheXS9eTi9eUCkiCisKKyMgYnVzY2FyIHVuIG5vbSwgZW4gbGxvYyBkZWwgdmVyYiCrY29tcGxldGFyuy4gIGVhYworIzogZWRpdC5jOjQ4Cittc2dpZCAiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBDb21wbGV0YXIgdWJpY2FjaW9ucyAoXk4vXlApIgorCisjIGJ1c2NhciB1biBub20sIGVuIGxsb2MgZGVsIHZlcmIgq2NvbXBsZXRhcrsuICBlYWMKKyM6IGVkaXQuYzo0OQorbXNnaWQgIiBEZWZpbml0aW9uIGNvbXBsZXRpb24gKF5EL15OL15QKSIKK21zZ3N0ciAiIENvbXBsZXRhciBkZWZpbmljaW9ucyAoXkQvXk4vXlApIgorCisjIGJ1c2NhciB1biBub20sIGVuIGxsb2MgZGVsIHZlcmIgq2NvbXBsZXRhcrsuICBlYWMKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LL15OL15QKSIKK21zZ3N0ciAiIENvbXBsZXRhciBwYXJhdWxlcyBkZSBkaWNjaW9uYXJpICheSy9eTi9eUCkiCisKKyMgYnVzY2FyIHVuIG5vbSwgZW4gbGxvYyBkZWwgdmVyYiCrY29tcGxldGFyuy4gIGVhYworIzogZWRpdC5jOjUyCittc2dpZCAiIFRoZXNhdXJ1cyBjb21wbGV0aW9uICheVC9eTi9eUCkiCittc2dzdHIgIiBDb21wbGV0YXIgc2lu8m5pbXMgKF5UL15OL15QKSIKKworIyBidXNjYXIgdW4gbm9tLCBlbiBsbG9jIGRlbCB2ZXJiIKtjb21wbGV0YXK7LiAgZWFjCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WL15OL15QKSIKK21zZ3N0ciAiIENvbXBsZXRhciBvcmRyZXMgKF5WL15OL15QKSIKKworIzogZWRpdC5jOjU2Cittc2dpZCAiSGl0IGVuZCBvZiBwYXJhZ3JhcGgiCittc2dzdHIgIlMnaGEgYXJyaWJhdCBhbCBmaW5hbCBkZWwgcGFy4GdyYWYiCisKKyM6IGVkaXQuYzo5NTUKK21zZ2lkICIndGhlc2F1cnVzJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIkwnb3BjafMgJ3RoZXNhdXJ1cycgbm8gZXN04CBkZWZpbmlkYSIKKworIzogZWRpdC5jOjExNTkKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJMJ29wY2nzICdkaWN0aW9uYXJ5JyBubyBlc3TgIGRlZmluaWRhIgorCisjOiBlZGl0LmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAiUydlc3TgIGV4YW1pbmFudCBlbCBkaWNjaW9uYXJpOiAlcyIKKworIzogZWRpdC5jOjIzNTAKK21zZ2lkICIgKGluc2VydCkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoaW5zZXJpcikgRGVzcGxh52FyICheRS9eWSkiCisKKyM6IGVkaXQuYzoyMzUyCittc2dpZCAiIChyZXBsYWNlKSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiIChzdWJzdGl0dWlyKSBEZXNwbGHnYXIgKF5FL15ZKSIKKworIzogZWRpdC5jOjI2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmc6ICVzIgorbXNnc3RyICJFeGFtaW5hbnQ6ICVzIgorCisjOiBlZGl0LmM6MjcwMQorbXNnaWQgIlNjYW5uaW5nIHRhZ3MuIgorbXNnc3RyICJTJ2VzdGFuIGV4YW1pbmFudCBsZXMgZXRpcXVldGVzLiIKKworIzogZWRpdC5jOjMzNjMKK21zZ2lkICIgQWRkaW5nIgorbXNnc3RyICIgQWZlZ2ludCIKKworIy4gc2hvd21vZGUgbWlnaHQgcmVzZXQgdGhlIGludGVybmFsIGxpbmUgcG9pbnRlcnMsIHNvIGl0IG11c3QKKyMuICogYmUgY2FsbGVkIGJlZm9yZSBsaW5lID0gbWxfZ2V0KCksIG9yIHdoZW4gdGhpcyBhZGRyZXNzIGlzIG5vCisjLiAqIGxvbmdlciBuZWVkZWQuICAtLSBBY2V2ZWRvLgorIy4KKyM6IGVkaXQuYzozNDEyCittc2dpZCAiLS0gU2VhcmNoaW5nLi4uIgorbXNnc3RyICItLSBDZXJjYW50Li4uIgorCisjOiBlZGl0LmM6MzQ2OAorbXNnaWQgIkJhY2sgYXQgb3JpZ2luYWwiCittc2dzdHIgIk9yaWdpbmFsIgorCisjOiBlZGl0LmM6MzQ3MworbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICJQYXJhdWxhIGQndW5hIGFsdHJhIGztbmlhIgorCisjOiBlZGl0LmM6MzQ3OAorbXNnaWQgIlRoZSBvbmx5IG1hdGNoIgorbXNnc3RyICLabmljYSBjb2luY2lk6G5jaWEiCisKKyM6IGVkaXQuYzozNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICJjb2luY2lk6G5jaWEgJWQgZGUgJWQiCisKKyM6IGVkaXQuYzozNTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIgorbXNnc3RyICJjb2luY2lk6G5jaWEgJWQiCisKKyMuIFNraXAgZnVydGhlciBhcmd1bWVudHMgYnV0IGRvIGNvbnRpbnVlIHRvCisjLiAqIHNlYXJjaCBmb3IgYSB0cmFpbGluZyBjb21tYW5kLgorIzogZXZhbC5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA2OiBVbmtub3duIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDY6IExhIHZhcmlhYmxlIOlzIGRlc2NvbmVndWRhOiBcIiVzXCIiCisKKyM6IGV2YWwuYzoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDc6IE1pc3NpbmcgYnJhY2VzOiAlcyIKK21zZ3N0ciAiRTEwNzogRmFsdGVuIHBhcuhudGVzaXM6ICVzIgorCisjOiBldmFsLmM6MTM4MCBldmFsLmM6MTM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA4OiBObyBzdWNoIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDg6IE5vIGV4aXN0ZWl4IHRhbCB2YXJpYWJsZTogXCIlc1wiIgorCisjOiBldmFsLmM6MTY1MAorbXNnaWQgIkUxMDk6IE1pc3NpbmcgJzonIGFmdGVyICc/JyIKK21zZ3N0ciAiRTEwOTogRmFsdGEgdW4gJzonIGRlc3By6XMgZGUgJz8nIgorCisjOiBldmFsLmM6MjI2NgorbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiBGYWx0YSB1biAnKSciCisKKyM6IGV2YWwuYzoyMzIzCittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6IEZhbHRhIHVuICddJyIKKworIzogZXZhbC5jOjIzOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMjogT3B0aW9uIG5hbWUgbWlzc2luZzogJXMiCittc2dzdHIgIkUxMTI6IEZhbHRhIGVsIG5vbSBkZSBsJ29wY2nzOiAlcyIKKworIzogZXZhbC5jOjI0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMzogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMTEzOiBMJ29wY2nzIOlzIGRlc2NvbmVndWRhOiAlcyIKKworIzogZXZhbC5jOjI0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IEZhbHRlbiBjb21ldGVzOiAlcyIKKworIzogZXZhbC5jOjI2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNTogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTU6IEZhbHRlbiBjb21ldGVzOiAlcyIKKworIzogZXZhbC5jOjI5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNjogSW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICVzIgorbXNnc3RyICJFMTE2OiBBcmd1bWVudHMgbm8gduBsaWRzIHBlciBsYSBmdW5jafMgJXMiCisKKyM6IGV2YWwuYzoyOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiBMYSBmdW5jafMg6XMgZGVzY29uZWd1ZGE6ICVzIgorCisjOiBldmFsLmM6Mjk5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODogTWFzc2EgYXJndW1lbnRzIHBlciBsYSBmdW5jafM6ICVzIgorCisjOiBldmFsLmM6Mjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE5OiBOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE5OiBGYWx0ZW4gYXJndW1lbnRzIHBlciBsYSBmdW5jafM6ICVzIgorCisjIHRyYWR1Y2Np8yAibGxpdXJlIi4gIGVhYworIzogZXZhbC5jOjI5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMDogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQ6ICVzIgorbXNnc3RyICJFMTIwOiBIZXUgdXNhdCA8U0lEPiBlbiB1biBjb250ZXh0IG5vIHbgbGlkOiAlcyIKKworIy4KKyMuICogWWVzIHRoaXMgaXMgdWdseSwgSSBkb24ndCBwYXJ0aWN1bGFybHkgbGlrZSBpdCBlaXRoZXIuICBCdXQgZG9pbmcgaXQKKyMuICogdGhpcyB3YXkgaGFzIHRoZSBjb21wZWxsaW5nIGFkdmFudGFnZSB0aGF0IHRyYW5zbGF0aW9ucyBuZWVkIG5vdCB0bworIy4gKiBiZSB0b3VjaGVkIGF0IGFsbC4gIFNlZSBiZWxvdyB3aGF0ICdvaycgYW5kICd5bmMnIGFyZSB1c2VkIGZvci4KKyMuCisjOiBldmFsLmM6MzU4NiBndWkuYzo0MjU0IGd1aV9ndGsuYzoxOTk3Cittc2dpZCAiJk9rIgorbXNnc3RyICImRCdhY29yZCIKKworIzogZXZhbC5jOjQxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQgbO1uaWVzOiAiCisKKyM6IGV2YWwuYzo1MzQ2Cittc2dpZCAiIgorIiZPS1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImRCdhY29yZFxuIgorIiZDYW5jZWy3bGEiCisKKyM6IGV2YWwuYzo1Mzg2Cittc2dpZCAiY2FsbGVkIGlucHV0cmVzdG9yZSgpIG1vcmUgb2Z0ZW4gdGhhbiBpbnB1dHNhdmUoKSIKK21zZ3N0ciAicydoYSBjcmlkYXQgaW5wdXRyZXN0b3JlKCkgbelzIHNvdmludCBxdWUgaW5wdXRzYXZlKCkiCisKKyM6IGV2YWwuYzo2MzAxCittc2dpZCAiRTI0MDogTm8gY29ubmVjdGlvbiB0byBWaW0gc2VydmVyIgorbXNnc3RyICJFMjQwOiBObyBoaSBoYSBjb25uZXhp8yBhbWIgZWwgc2Vydmlkb3IgVmltIgorCisjOiBldmFsLmM6NjM5OAorbXNnaWQgIkUyNzc6IFVuYWJsZSB0byByZWFkIGEgc2VydmVyIHJlcGx5IgorbXNnc3RyICJFMjc3OiBObyBzJ2hhIHBvZ3V0IGxsZWdpciBsYSByZXNwb3N0YSBkZWwgc2Vydmlkb3IiCisKKyMgq3Jlc7sgPyAgZWFjCisjOiBldmFsLmM6NjQyNgorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODogTm8gcydoYSBwb2d1dCBlbnZpYXIgcmVzIGFsIGNsaWVudCIKKworIyCrcmVzuyA/ICBlYWMKKyM6IGV2YWwuYzo2NDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiBObyBzJ2hhIHBvZ3V0IGVudmlhciByZXMgYSAlcyIKKworIzogZXZhbC5jOjY1NzQKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIihObyB24GxpZCkiCisKKyM6IGV2YWwuYzo3Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogJXMiCittc2dzdHIgIkUxMjE6IExhIHZhcmlhYmxlIG5vIGVzdOAgZGVmaW5pZGE6ICVzIgorCisjOiBldmFsLmM6ODEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJFNDYxOiBFbCBub20gZGUgbGEgdmFyaWFibGUg6XMgaWy3bGVnYWw6ICVzIgorCisjOiBldmFsLmM6ODQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgYWRkICEgdG8gcmVwbGFjZSBpdCIKK21zZ3N0ciAiRTEyMjogTGEgZnVuY2nzICVzIGphIGV4aXN0ZWl4LCBhZmVnaXUgISBwZXIgc3Vic3RpdHVpci1sYSIKKworIzogZXZhbC5jOjg0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMzogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEyMzogTGEgZnVuY2nzIG5vIGVzdOAgZGVmaW5pZGE6ICVzIgorCisjOiBldmFsLmM6ODQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6IEZhbHRhIHVuICcoJzogJXMiCisKKyM6IGV2YWwuYzo4NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiBMJ2FyZ3VtZW50IOlzIGlst2xlZ2FsOiAlcyIKKworIzogZXZhbC5jOjg2MDEKK21zZ2lkICJFMTI2OiBNaXNzaW5nIDplbmRmdW5jdGlvbiIKK21zZ3N0ciAiRTEyNjogRmFsdGEgdW5hIGRlY2xhcmFjafMgOmVuZGZ1bmN0aW9uIgorCisjOiBldmFsLmM6ODY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzogTm8gcydoYSBwb2d1dCByZWRlZmluaXIgbGEgZnVuY2nzICVzOiBzJ2VzdOAgdXRpbGl0emFudCIKKworIzogZXZhbC5jOjg3NTIKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiBFcyByZXF1ZXJlaXggdW4gbm9tIGRlIGZ1bmNp8yIKKworIzogZXZhbC5jOjg4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODogRWwgbm9tIGRlIGxhIGZ1bmNp8yBoYSBkZSBjb21lbudhciBlbiBtYWr6c2N1bGE6ICVzIgorCisjOiBldmFsLmM6ODk5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTMwOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTMwOiBMYSBmdW5jafMgbm8gZXN04CBkZWZpbmlkYTogJXMiCisKKyM6IGV2YWwuYzo5MDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzE6IENhbm5vdCBkZWxldGUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEzMTogTm8gcydoYSBwb2d1dCBlbGltaW5hciBsYSBmdW5jafMgJXM6IHMnZXN04CB1dGlsaXR6YW50IgorCisjOiBldmFsLmM6OTA0OAorbXNnaWQgIkUxMzI6IEZ1bmN0aW9uIGNhbGwgZGVwdGggaXMgaGlnaGVyIHRoYW4gJ21heGZ1bmNkZXB0aCciCittc2dzdHIgIkUxMzI6IExhIHByb2Z1bmRpdGF0IGRlIGNyaWRlcyBhIGZ1bmNpb25zIOlzIHN1cGVyaW9yIGEgJ21heGZ1bmNkZXB0ZyciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjkxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAiY3JpZGFudCBhICVzIgorCisjOiBldmFsLmM6OTE2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhYm9ydGVkIgorbXNnc3RyICJzJ2hhIGF2b3J0YXQgJXMiCisKKyM6IGV2YWwuYzo5MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyAjJWxkIgorbXNnc3RyICIlcyBoYSByZXRvcm5hdCAjJWxkIgorCisjOiBldmFsLmM6OTE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICIlcyBoYSByZXRvcm5hdCBcIiVzXCIiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjkxODggZXhfY21kczIuYzoyMjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbnRpbnVpbmcgaW4gJXMiCittc2dzdHIgImNvbnRpbnVhbnQgYSAlcyIKKworIzogZXZhbC5jOjkyMTQKK21zZ2lkICJFMTMzOiA6cmV0dXJuIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTEzMzogTCdvcmRyZSA6cmV0dXJuIG5vIGVzIHRyb2JhIGRpbnMgZCd1bmEgZnVuY2nzIgorCisjOiBldmFsLmM6OTU0NQorbXNnaWQgIiIKKyJcbiIKKyIjIGdsb2JhbCB2YXJpYWJsZXM6XG4iCittc2dzdHIgIlxuIyB2YXJpYWJsZXMgZ2xvYmFsczpcbiIKKworIzogZXhfY21kczIuYzo4MworbXNnaWQgIkVudGVyaW5nIERlYnVnIG1vZGUuICBUeXBlIFwiY29udFwiIHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiTW9kZSBkZSBkZXB1cmFjafMuIEVzY3Jpdml1IFwiY29udFwiIHBlciBjb250aW51YXIuIgorCisjOiBleF9jbWRzMi5jOjg3IGV4X2RvY21kLmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiAlcyIKK21zZ3N0ciAibO1uaWEgJWxkOiAlcyIKKworIzogZXhfY21kczIuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjbWQ6ICVzIgorbXNnc3RyICJvcmRyZTogJXMiCisKKyM6IGV4X2NtZHMyLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyZWFrcG9pbnQgaW4gXCIlcyVzXCIgbGluZSAlbGQiCittc2dzdHIgIlB1bnQgZGUgcnVwdHVyYSBhIFwiJXMlc1wiIGztbmlhICVsZCIKKworIzogZXhfY21kczIuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MTogQnJlYWtwb2ludCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMTYxOiBObyBzJ2hhIHRyb2JhdCBlbCBwdW50IGRlIHJ1cHR1cmE6ICVzIgorCisjOiBleF9jbWRzMi5jOjU1NworbXNnaWQgIk5vIGJyZWFrcG9pbnRzIGRlZmluZWQiCittc2dzdHIgIk5vIHMnaGFuIGRlZmluaXQgcHVudHMgZGUgcnVwdHVyYSIKKworIzogZXhfY21kczIuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgIGztbmlhICVsZCIKKworIyBU7XRvbCBkJ3VuIGRp4GxlZyBbOmJyb3dzZSB3XS4gIGVhYworIzogZXhfY21kcy5jOjIwODIgZXhfY21kcy5jOjIzNDcgZXhfY21kczIuYzo3NTQKK21zZ2lkICJTYXZlIEFzIgorbXNnc3RyICJBbm9tZW5hIGkgZGVzYSIKKworIzogZXhfY21kczIuYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZSBjaGFuZ2VzIHRvIFwiJS4qc1wiPyIKK21zZ3N0ciAiVm9sZXUgZGVzYXIgZWxzIGNhbnZpcyBhIFwiJS4qc1wiPyIKKworIzogZXhfY21kczIuYzo3NzkgZXhfZG9jbWQuYzo4OTE3Cittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIlNlbnNlLW5vbSIKKworIzogZXhfY21kczIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MjogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxNjI6IE5vIHMnaGFuIGRlc2F0IGVscyBjYW52aXMgZW4gZWwgYnVmZmVyIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo5ODQKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIkF0ZW5jafM6IFMnaGEgY2FudmlhdCBkZSBidWZmZXIgaW5lc3BlcmFkYW1lbnQgKHJldmlzZXUgbGVzIGF1dG8tb3JkcmVzKSIKKworIzogZXhfY21kczIuYzoxMzg3Cittc2dpZCAiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTYzOiBOb23pcyBoaSBoYSB1biBmaXR4ZXIgcGVyIGVkaXRhciIKKworIzogZXhfY21kczIuYzoxMzg5Cittc2dpZCAiRTE2NDogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBmaWxlIgorbXNnc3RyICJFMTY0OiBObyBlcyBwb3QgYW5hciBt6XMgZW5sbOAgZGVsIHByaW1lciBmaXR4ZXIiCisKKyM6IGV4X2NtZHMyLmM6MTM5MQorbXNnaWQgIkUxNjU6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBmaWxlIgorbXNnc3RyICJFMTY1OiBObyBlcyBwb3QgYW5hciBt6XMgZW5sbOAgZGUgbCf6bHRpbSBmaXR4ZXIiCisKKyM6IGV4X2NtZHMyLmM6MTg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiCittc2dzdHIgIkNlcmNhbnQgXCIlc1wiIGEgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIkNlcmNhbnQgXCIlc1wiIgorCisjIKtydW50aW1lcGF0aLsuICBlYWMKKyM6IGV4X2NtZHMyLmM6MTg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorbXNnc3RyICJubyBzJ2hhIHRyb2JhdCBlbiBlbCAncnVudGltZXBhdGgnOiBcIiVzXCIiCisKKyMgVO10b2wgZCd1biBkaeBsZWcgWzpicm93c2Ugc291cmNlXS4gIGVhYworIzogZXhfY21kczIuYzoxOTE4Cittc2dpZCAiU291cmNlIFZpbSBzY3JpcHQiCittc2dzdHIgIkV4ZWN1dGEgdW4gc2NyaXB0IFZpbSIKKworIzogZXhfY21kczIuYzoyMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAiTm8gZXMgcG90IGV4ZWN1dGFyIHVuIGRpcmVjdG9yaTogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IGNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICJs7W5pYSAlbGQ6IG5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJleGVjdXRhbnQgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IHNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAibO1uaWEgJWxkOiBleGVjdXRhbnQgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc291cmNpbmcgJXMiCittc2dzdHIgImhhIGZpbmFsaXR6YXQgbCdleGVjdWNp8yBkZSAlcyIKKworIzogZXhfY21kczIuYzoyNTgwCittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIlcxNTogQXRlbmNp8zogRWwgc2VwYXJhZG9yIGRlIGztbmlhIG5vIOlzIHbgbGlkLCBwb3RzZXIgZmFsdGEgdW4gXk0iCisKKyMgq3NvdXJjZWQgZmlsZbsuICBlYWMKKyM6IGV4X2NtZHMyLmM6MjYyOQorbXNnaWQgIkUxNjc6IDpzY3JpcHRlbmNvZGluZyB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjc6IEwnb3JkcmUgOnNjcmlwdGVuY29kaW5nIG5vbelzIGVzIHBvdCB1dGlsaXR6YXIgZW4gc2NyaXB0cyIKKworIyCrc291cmNlZCBmaWxluy4gIGVhYworIzogZXhfY21kczIuYzoyNjYyCittc2dpZCAiRTE2ODogOmZpbmlzaCB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjg6IEwnb3JkcmUgOmZpbmlzaCBub23pcyBlcyBwb3QgdXRpbGl0emFyIGVuIHNjcmlwdHMiCisKKyM6IGV4X2NtZHMyLmM6MzEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJQYWdlICVkIgorbXNnc3RyICJQ4GdpbmEgJWQiCisKKyM6IGV4X2NtZHMyLmM6MzI2MQorbXNnaWQgIk5vIHRleHQgdG8gYmUgcHJpbnRlZCIKK21zZ3N0ciAiTm8gaGkgaGEgdGV4dCBwZXIgaW1wcmltaXIiCisKKyM6IGV4X2NtZHMyLmM6MzMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyBwYWdlICVkICglZCUlKSIKK21zZ3N0ciAiUydlc3TgIGltcHJpbWludCBsYSBw4GdpbmEgJWQgKCVkJSUpIgorCisjOiBleF9jbWRzMi5jOjMzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIENvcHkgJWQgb2YgJWQiCittc2dzdHIgIiBD8nBpYSAlZCBkZSAlZCIKKworIzogZXhfY21kczIuYzozNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50ZWQ6ICVzIgorbXNnc3RyICJTJ2hhIGltcHLoczogJXMiCisKKyM6IGV4X2NtZHMyLmM6MzQxMworbXNnaWQgIlByaW50aW5nIGFib3J0ZWQiCittc2dzdHIgIlMnaGEgYXZvcnRhdCBsJ2ltcHJlc3Np8yIKKworIzogZXhfY21kczIuYzozNzc4Cittc2dpZCAiRTQ1NTogRXJyb3Igd3JpdGluZyB0byBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFNDU1OiBFcnJvciBlbiBlc2NyaXVyZSBlbCBmaXR4ZXIgUG9zdFNjcmlwdCIKKworIzogZXhfY21kczIuYzo0MDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjQ6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU2MjQ6IE5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZml0eGVyIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MDYzIGV4X2NtZHMyLmM6NDY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6IE5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGZpdHhlciBkZSByZWN1cnNvcyBQb3N0U2NyaXB0IFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTg6IGZpbGUgXCIlc1wiIGlzIG5vdCBhIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIKK21zZ3N0ciAiRTYxODogRWwgZml0eGVyIFwiJXNcIiBubyDpcyB1biBmaXR4ZXIgZGUgcmVjdXJzb3MgUG9zdFNjcmlwdCIKKworIzogZXhfY21kczIuYzo0MDg2IGV4X2NtZHMyLmM6NDEwNiBleF9jbWRzMi5jOjQxMjEgZXhfY21kczIuYzo0MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTk6IGZpbGUgXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUiCittc2dzdHIgIkU2MTk6IEVsIGZpdHhlciBkZSByZWN1cnNvcyBQb3N0U2NyaXB0IFwiJXNcIiBubyBlc3TgIHN1cG9ydGF0IgorCisjOiBleF9jbWRzMi5jOjQxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyMTogXCIlc1wiIHJlc291cmNlIGZpbGUgaGFzIHdyb25nIHZlcnNpb24iCittc2dzdHIgIkU2MjE6IExhIHZlcnNp8yBkZWwgZml0eGVyIGRlIHJlY3Vyc29zIFwiJXNcIiBubyDpcyB24GxpZGEiCisKKyM6IGV4X2NtZHMyLmM6NDY0MAorbXNnaWQgIkUzMjQ6IENhbid0IG9wZW4gUG9zdFNjcmlwdCBvdXRwdXQgZmlsZSIKK21zZ3N0ciAiRTMyNDogTm8gcydoYSBwb2d1dCBvYnJpciBlbCBmaXR4ZXIgUG9zdFNjcmlwdCBnZW5lcmF0IgorCisjOiBleF9jbWRzMi5jOjQ2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogTm8gcydoYSBwb2d1dCBvYnJpciBlbCBmaXR4ZXIgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ3OTIKK21zZ2lkICJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcInByb2xvZy5wc1wiIgorbXNnc3RyICJFNDU2OiBObyBzJ2hhIHRyb2JhdCBlbCBmaXR4ZXIgZGUgcmVjdXJzb3MgUG9zdFNjcmlwdCBcInByb2xvZy5wc1wiIgorCisjOiBleF9jbWRzMi5jOjQ4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3QgZmluZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlcy5wc1wiIgorbXNnc3RyICJFNDU2OiBObyBzJ2hhIHRyb2JhdCBlbCBmaXR4ZXIgZGUgcmVjdXJzb3MgUG9zdFNjcmlwdCBcIiVzLnBzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjIwOiBVbmFibGUgdG8gY29udmVydCBmcm9tIG11bHRpLWJ5dGUgdG8gXCIlc1wiIGVuY29kaW5nIgorbXNnc3RyICJFNjIwOiBObyBzJ2hhIHBvZ3V0IGNvbnZlcnRpciBsYSBjb2RpZmljYWNp8yBtdWx0aS1vY3RldCBhIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0OTY2Cittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICJTJ2VzdOAgZW52aWFudCBhIGxhIGltcHJlc3NvcmEuLi4iCisKKyM6IGV4X2NtZHMyLmM6NDk3MAorbXNnaWQgIkUzNjU6IEZhaWxlZCB0byBwcmludCBQb3N0U2NyaXB0IGZpbGUiCittc2dzdHIgIkUzNjU6IEVycm9yIGVuIGltcHJpbWlyIGVsIGZpdHhlciBQb3N0U2NyaXB0IgorCisjOiBleF9jbWRzMi5jOjQ5NzIKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIlMnaGEgZW52aWF0IGxhIHRhc2NhIGQnaW1wcmVzc2nzLiIKKworIyBsZXMgY2FkZW5lcyBzdWJzdGl0de9kZXMgbm8gZXMgcG9kZW4gdHJhZHXvci4gIGVhYworIzogZXhfY21kczIuYzo1MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICJJZGlvbWEgYWN0dWFsICggJXMpOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTk3OiBDYW5ub3Qgc2V0IGxhbmd1YWdlIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTE5NzogTm8gcydoYSBwb2d1dCBjYW52aWFyIGwnaWRpb21hIGEgXCIlc1wiIgorCisjIEUuRzogOmFzY2lpCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iCisKKyM6IGV4X2NtZHMuYzo0MzMKK21zZ2lkICJFMTM0OiBNb3ZlIGxpbmVzIGludG8gdGhlbXNlbHZlcyIKK21zZ3N0ciAiRTEzNDogTm8gZXMgcG9kZW4gbW91cmUgbO1uaWVzIGNhcCBhIGVsbGVzIG1hdGVpeGVzIgorCisjOiBleF9jbWRzLmM6NTAyCittc2dpZCAiMSBsaW5lIG1vdmVkIgorbXNnc3RyICIxIGztbmlhIGRlc3BsYedhZGEiCisKKyM6IGV4X2NtZHMuYzo1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIG1vdmVkIgorbXNnc3RyICIlbGQgbO1uaWVzIGRlc3BsYedhZGVzIgorCisjOiBleF9jbWRzLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBmaWx0ZXJlZCIKK21zZ3N0ciAiJWxkIGztbmllcyBmaWx0cmFkZXMiCisKKyM6IGV4X2NtZHMuYzo5MzcKK21zZ2lkICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMTM1OiBMZXMgYXV0by1vcmRyZXMgKkZpbHRlciogbm8gcG9kZW4gY2FudmlhciBlbCBidWZmZXIgYWN0dWFsIgorCisjOiBleF9jbWRzLmM6MTAyMgorbXNnaWQgIltObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZV1cbiIKK21zZ3N0ciAiW05vIHMnaGFuIGRlc2F0IGVscyD6bHRpbXMgY2FudmlzXVxuIgorCisjOiBleF9jbWRzLmM6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlc3ZpbWluZm86ICVzIGluIGxpbmU6ICIKK21zZ3N0ciAiJXN2aW1pbmZvOiAlcyBhIGxhIGztbmlhOiAiCisKKyM6IGV4X2NtZHMuYzoxMjczCittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIkUxMzY6IHZpbWluZm86IEhpIGhhbiBtYXNzYSBlcnJvcnMsIHMnb21ldCBsYSByZXN0YSBkZWwgZml0eGVyIgorCisjIGxlcyB0cmVzIHNlZ/xlbnRzIHZhbiBqdW50ZXMuICBlYWMKKyM6IGV4X2NtZHMuYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAiTGxlZ2ludCBlbCBmaXR4ZXIgdmltaW5mbyBcIiVzXCIlcyVzJXMiCisKKyM6IGV4X2NtZHMuYzoxMzA5Cittc2dpZCAiIGluZm8iCittc2dzdHIgIiBwZXIgaW5mbyIKKworIzogZXhfY21kcy5jOjEzMTAKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiBwZXIgbWFycXVlcyIKKworIzogZXhfY21kcy5jOjEzMTEKK21zZ2lkICIgRkFJTEVEIgorbXNnc3RyICIgRVJST1IiCisKKyM6IGV4X2NtZHMuYzoxNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzc6IFZpbWluZm8gZmlsZSBpcyBub3Qgd3JpdGFibGU6ICVzIgorbXNnc3RyICJFMTM3OiBFbCBmaXR4ZXIgdmltaW5mbyBubyBlcyBwb3QgZXNjcml1cmU6ICVzIgorCisjOiBleF9jbWRzLmM6MTUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiBObyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIGZpdHhlciB2aW1pbmZvICVzISIKKworIzogZXhfY21kcy5jOjE1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFc2NyaXZpbnQgZWwgZml0eGVyIHZpbWluZm8gXCIlc1wiIgorCisjLiBXcml0ZSB0aGUgaW5mbzoKKyM6IGV4X2NtZHMuYzoxNjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVGhpcyB2aW1pbmZvIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBWaW0gJXMuXG4iCittc2dzdHIgIiMgQXF1ZXN0IGZpdHhlciB2aW1pbmZvIGhhIGVzdGF0IGdlbmVyYXQgcGVsIFZpbSAlcy5cbiIKKworIzogZXhfY21kcy5jOjE2MzYKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiMgRWwgcG9kZXUgZWRpdGFyLCBzaSBhbmV1IGFtYiBjb21wdGUhXG5cbiIKKworIzogZXhfY21kcy5jOjE2MzgKK21zZ2lkICIjIFZhbHVlIG9mICdlbmNvZGluZycgd2hlbiB0aGlzIGZpbGUgd2FzIHdyaXR0ZW5cbiIKK21zZ3N0ciAiIyBWYWxvciBkZSAnZW5jb2RpbmcnIGVuIGVsIG1vbWVudCBkJ2VzY3JpdXJlIGFxdWVzdCBmaXR4ZXJcbiIKKworIzogZXhfY21kcy5jOjE3MzcKK21zZ2lkICJJbGxlZ2FsIHN0YXJ0aW5nIGNoYXIiCittc2dzdHIgIkNhcuBjdGVyIGluaWNpYWwgaWy3bGVnYWwiCisKKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjEyNQorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiBFbCBmaXR4ZXIgZXN04CBjYXJyZWdhdCBlbiB1biBhbHRyZSBidWZmZXIiCisKKyM6IGV4X2NtZHMuYzoyMTU5Cittc2dpZCAiV3JpdGUgcGFydGlhbCBmaWxlPyIKK21zZ3N0ciAiVm9sZXUgZXNjcml1cmUgdW4gZml0eGVyIHBhcmNpYWw/IgorCisjOiBleF9jbWRzLmM6MjE2NgorbXNnaWQgIkUxNDA6IFVzZSAhIHRvIHdyaXRlIHBhcnRpYWwgYnVmZmVyIgorbXNnc3RyICJFMTQwOiBVc2V1ICEgcGVyIGRlc2FyIHVuYSBwYXJ0IGRlbCBidWZmZXIiCisKKyM6IGV4X2NtZHMuYzoyMjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAiVm9sZXUgc29icmVzY3JpdXJlIGVsIGZpdHhlciBleGlzdGVudCBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMuYzoyMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDE6IE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTE0MTogTm8gaGkgaGEgbm9tIGRlIGZpdHhlciBwZWwgYnVmZmVyICVsZCIKKworIzogZXhfY21kcy5jOjIzOTAKK21zZ2lkICJFMTQyOiBGaWxlIG5vdCB3cml0dGVuOiBXcml0aW5nIGlzIGRpc2FibGVkIGJ5ICd3cml0ZScgb3B0aW9uIgorbXNnc3RyICJFMTQyOiBObyBzJ2hhIGVzY3JpdCBlbCBmaXR4ZXI6IEwnb3BjafMgJ3dyaXRlJyBobyBpbXBlZGVpeCIKKworIzogZXhfY21kcy5jOjI0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIidyZWFkb25seScgb3B0aW9uIGlzIHNldCBmb3IgXCIlLipzXCIuXG4iCisiRG8geW91IHdpc2ggdG8gd3JpdGUgYW55d2F5PyIKK21zZ3N0ciAiIgorIkwnb3BjafMgJ3JlYWRvbmx5JyBlc3TgIGFjdGl2YSBwZXIgXCIlLipzXCIsXG4iCisiVm9sZXUgZXNjcml1cmUnbCBkZSB0b3RlcyBtYW5lcmVzPyIKKworIyDpcyB1biB07XRvbCBkZSBkaeBsZWcgWzpicm93c2UgZWRpdF0uICBlYWMKKyM6IGV4X2NtZHMuYzoyNTc1Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICJFZGl0YSB1biBmaXR4ZXIiCisKKyM6IGV4X2NtZHMuYzozMTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiBVbmEgYXV0by1vcmRyZSBoYSBlbGltaW5hdCBlbCBidWZmZXIgbm91ICVzIGluZXNwZXJhZGFtZW50IgorCisjOiBleF9jbWRzLmM6MzI3OQorbXNnaWQgIkUxNDQ6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIDp6IgorbXNnc3RyICJFMTQ0OiBBcmd1bWVudCBubyBudW3ocmljIHBlciA6eiIKKworIzogZXhfY21kcy5jOjMzNjQKK21zZ2lkICJFMTQ1OiBTaGVsbCBjb21tYW5kcyBub3QgYWxsb3dlZCBpbiBydmltIgorbXNnc3RyICJFMTQ1OiBMZXMgb3JkcmVzIHNoZWxsIG5vIGVzdGFuIHBlcm1lc2VzIGVuIHJ2aW0iCisKKyM6IGV4X2NtZHMuYzozNDcxCittc2dpZCAiRTE0NjogUmVndWxhciBleHByZXNzaW9ucyBjYW4ndCBiZSBkZWxpbWl0ZWQgYnkgbGV0dGVycyIKK21zZ3N0ciAiRTE0NjogTGVzIGV4cHJlc3Npb25zIHJlZ3VsYXJzIG5vIHBvZGVuIGVzdGFyIGRlbGltaXRhZGVzIHBlciBsbGV0cmVzIgorCisjIKthbWK7IG8gq3BlcrsgKyB0ZWNsZXMuICBlYWMKKyM6IGV4X2NtZHMuYzozODE3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2Ugd2l0aCAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCittc2dzdHIgInN1YnN0aXR1aXIgYW1iICVzICh5L24vYS9xL2wvXkUvXlkpPyIKKworIzogZXhfY21kcy5jOjQxODkKK21zZ2lkICIoSW50ZXJydXB0ZWQpICIKK21zZ3N0ciAiKEludGVycm9tcHV0KSAiCisKKyM6IGV4X2NtZHMuYzo0MTkzCittc2dpZCAiMSBzdWJzdGl0dXRpb24iCittc2dzdHIgIjEgc3Vic3RpdHVjafMiCisKKyM6IGV4X2NtZHMuYzo0MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICIlbGQgc3Vic3RpdHVjaW9ucyIKKworIzogZXhfY21kcy5jOjQxOTgKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIgZW4gMSBs7W5pYSIKKworIzogZXhfY21kcy5jOjQyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uICVsZCBsaW5lcyIKK21zZ3N0ciAiIGVuICVsZCBs7W5pZXMiCisKKyM6IGV4X2NtZHMuYzo0MjUxCittc2dpZCAiRTE0NzogQ2Fubm90IGRvIDpnbG9iYWwgcmVjdXJzaXZlIgorbXNnc3RyICJFMTQ3OiBObyBlcyBwb3QgZXhlY3V0YXIgdW5hIG9yZHJlIGdsb2JhbCBkZSBmb3JtYSByZWN1cnNpdmEiCisKKyM6IGV4X2NtZHMuYzo0Mjg2Cittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IExlcyBvcmRyZXMgZ2xvYmFscyByZXF1ZXJlaXhlbiB1bmEgZXhwcmVzc2nzIHJlZ3VsYXIiCisKKyM6IGV4X2NtZHMuYzo0MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIlMnaGEgdHJvYmF0IGVsIHBhdHLzIGEgY2FkYSBs7W5pYTogJXMiCisKKyM6IGV4X2NtZHMuYzo0NDE2Cittc2dpZCAiIgorIlxuIgorIiMgTGFzdCBTdWJzdGl0dXRlIFN0cmluZzpcbiIKKyIkIgorbXNnc3RyICIiCisiXG4iCisiIyDabHRpbWEgY2FkZW5hIHN1YnN0aXR172RhOlxuIgorIiQiCisKKyM6IGV4X2NtZHMuYzo0NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTogTm8gaGkgaGEgYWp1ZGEgcGVyICVzIgorCisjOiBleF9jbWRzLmM6NDU2MworIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiCittc2dzdHIgIkVsIGZpdHhlciBkJ2FqdWRhIFwiJXNcIiBubyBzJ2hhIHRyb2JhdCIKKworIzogZXhfY21kcy5jOjUwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MDogTm90IGEgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiRTE1MDogTm8g6XMgdW4gZGlyZWN0b3JpOiAlcyIKKworIzogZXhfY21kcy5jOjUwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MjogQ2Fubm90IG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNTI6IE5vIHMnaGEgcG9ndXQgb2JyaXIgJXMgYW1iIHBlcm3tcyBkJ2VzY3JpcHR1cmEiCisKKyM6IGV4X2NtZHMuYzo1MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTM6IFVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTUzOiBObyBzJ2hhIHBvZ3V0IG9icmlyICVzIGFtYiBwZXJt7XMgZGUgbGVjdHVyYSIKKworIzogZXhfY21kcy5jOjUxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcyIKK21zZ3N0ciAiRTE1NDogTCdldGlxdWV0YSBcIiVzXCIgZXN04CBkdXBsaWNhZGEgZW4gZWwgZml0eGVyICVzIgorCisjOiBleF9jbWRzLmM6NTI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYwOiBVbmtub3duIHNpZ24gY29tbWFuZDogJXMiCittc2dzdHIgIkUxNjA6IE9yZHJlIGRlIHNlbnlhbGl0emFjafMgZGVzY29uZWd1ZGE6ICVzIgorCisjOiBleF9jbWRzLmM6NTMwOAorbXNnaWQgIkUxNTY6IE1pc3Npbmcgc2lnbiBuYW1lIgorbXNnc3RyICJFMTU2OiBGYWx0YSBlbCBub20gZGVsIHNlbnlhbCIKKworIzogZXhfY21kcy5jOjUzNTQKK21zZ2lkICJFNjEyOiBUb28gbWFueSBzaWducyBkZWZpbmVkIgorbXNnc3RyICJFNjEyOiBIaSBoYW4gbWFzc2Egc2VueWFscyBkZWZpbml0cyIKKworIzogZXhfY21kcy5jOjU0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzOTogSW52YWxpZCBzaWduIHRleHQ6ICVzIgorbXNnc3RyICJFMjM5OiBFbCB0ZXh0IGRlbCBzZW55YWwgbm8g6XMgduBsaWQ6ICVzIgorCisjOiBleF9jbWRzLmM6NTQ1MiBleF9jbWRzLmM6NTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiBFbCBzZW55YWwg6XMgZGVzY29uZWd1dDogJXMiCisKKyM6IGV4X2NtZHMuYzo1NDk4Cittc2dpZCAiRTE1OTogTWlzc2luZyBzaWduIG51bWJlciIKK21zZ3N0ciAiRTE1OTogRmFsdGEgZWwgbvptZXJvIGRlbCBzZW55YWwiCisKKyM6IGV4X2NtZHMuYzo1NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTg6IEludmFsaWQgYnVmZmVyIG5hbWU6ICVzIgorbXNnc3RyICJFMTU4OiBFbCBub20gZGVsIGJ1ZmZlciBubyDpcyB24GxpZDogJXMiCisKKyM6IGV4X2NtZHMuYzo1NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiBMJ0lEIGRlbCBzZW55YWwgbm8g6XMgduBsaWRhOiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1Nzg4Cittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJbRWxpbWluYXRdIgorCisjOiBleF9kb2NtZC5jOjQ4OQorbXNnaWQgIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIgorbXNnc3RyICJNb2RlIEV4LiBFc2NyaXZpdSBcInZpc3VhbFwiIHBlciB0b3JuYXIgYWwgbW9kZSBOb3JtYWwuIgorCisjLiBtdXN0IGJlIGF0IEVPRgorIzogZXhfZG9jbWQuYzo1MjUKK21zZ2lkICJFNTAxOiBBdCBlbmQtb2YtZmlsZSIKK21zZ3N0ciAiRTUwMTogRmluYWwgZGVsIGZpdHhlciIKKworIzogZXhfZG9jbWQuYzo2MjcKK21zZ2lkICJFMTY5OiBDb21tYW5kIHRvbyByZWN1cnNpdmUiCittc2dzdHIgIkUxNjk6IEwnb3JkcmUg6XMgbWFzc2EgcmVjdXJzaXZhIgorCisjOiBleF9kb2NtZC5jOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwNTogRXhjZXB0aW9uIG5vdCBjYXVnaHQ6ICVzIgorbXNnc3RyICJFNjA1OiBObyBzJ2hhIGludGVyY2VwdGF0IGwnZXhjZXBjafM6ICVzIgorCisjOiBleF9kb2NtZC5jOjExODAKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICJGaW5hbCBkZWwgZml0eGVyIGV4ZWN1dGF0IgorCisjOiBleF9kb2NtZC5jOjExODEKK21zZ2lkICJFbmQgb2YgZnVuY3Rpb24iCittc2dzdHIgIkZpbmFsIGRlIGxhIGZ1bmNp8yIKKworIzogZXhfZG9jbWQuYzoxNjMzCittc2dpZCAiRTQ2NDogQW1iaWd1b3VzIHVzZSBvZiB1c2VyLWRlZmluZWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ2NDog2nMgYW1iaWd1IGQndW5hIG9yZHJlIGRlZmluaWRhIHBlciBsJ3VzdWFyaSIKKworIzogZXhfZG9jbWQuYzoxNjQ3Cittc2dpZCAiRTQ5MjogTm90IGFuIGVkaXRvciBjb21tYW5kIgorbXNnc3RyICJFNDkyOiBObyDpcyB1bmEgb3JkcmUgZCdlZGljafMiCisKKyM6IGV4X2RvY21kLmM6MTczNworbXNnaWQgIkU0Nzg6IERvbid0IHBhbmljISIKK21zZ3N0ciAiRTQ3ODogQ2FsbWEhIgorCisjOiBleF9kb2NtZC5jOjE3NTYKK21zZ2lkICJFNDkzOiBCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4iCittc2dzdHIgIkU0OTM6IEhldSBlc3BlY2lmaWNhdCB1biBpbnRlcnZhbCBkZWNyZWl4ZW50IgorCisjIOlzIHVuYSBwcmVndW50YS4gIGVhYworIzogZXhfZG9jbWQuYzoxNzY1Cittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuLCBPSyB0byBzd2FwIgorbXNnc3RyICJIZXUgZXNwZWNpZmljYXQgdW4gaW50ZXJ2YWwgZGVjcmVpeGVudC4gRWwgdm9sZXUgaW52ZXJ0aXIiCisKKyM6IGV4X2RvY21kLmM6MTg3NgorbXNnaWQgIkU0OTQ6IFVzZSB3IG9yIHc+PiIKK21zZ3N0ciAiRTQ5NDogVXNldSB3IG8gYukgdz4+IgorCisjOiBleF9kb2NtZC5jOjM0NjMKK21zZ2lkICJFMzE5OiBTb3JyeSwgdGhlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUzMTk6IEFxdWVzdGEgb3JkcmUgbm8gZXN04CBkaXNwb25pYmxlIGVuIGFxdWVzdGEgdmVyc2nzIgorCisjOiBleF9kb2NtZC5jOjM2NDkKK21zZ2lkICJFMTcyOiBPbmx5IG9uZSBmaWxlIG5hbWUgYWxsb3dlZCIKK21zZ3N0ciAiRTE3MjogTm9t6XMgZXN04CBwZXJt6HMgdW4gbm9tIGRlIGZpdHhlciIKKworIzogZXhfZG9jbWQuYzo0MjExCittc2dpZCAiMSBtb3JlIGZpbGUgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIKK21zZ3N0ciAiUXVlZGEgMSBmaXR4ZXIgcGVyIGVkaXRhci4gVm9sZXUgc29ydGlyIGRlIHRvdGVzIG1hbmVyZXM/IgorCisjOiBleF9kb2NtZC5jOjQyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICJRdWVkZW4gJWQgZml0eGVycyBwZXIgZWRpdGFyLiBWb2xldSBzb3J0aXIgZGUgdG90ZXMgbWFuZXJlcz8iCisKKyM6IGV4X2RvY21kLmM6NDIyMQorbXNnaWQgIkUxNzM6IDEgbW9yZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6IFF1ZWRhIDEgZml0eGVyIHBlciBlZGl0YXIiCisKKyM6IGV4X2RvY21kLmM6NDIyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiBRdWVkZW4gJWxkIGZpdHhlcnMgcGVyIGVkaXRhciIKKworIzogZXhfZG9jbWQuYzo0MzE4Cittc2dpZCAiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogYWRkICEgdG8gcmVwbGFjZSBpdCIKK21zZ3N0ciAiRTE3NDogTCdvcmRyZSBqYSBleGlzdGVpeDogYWZlZ2l1ICEgcGVyIHN1YnN0aXR1aXItbGEiCisKKyM6IGV4X2RvY21kLmM6NDQyOAorbXNnaWQgIiIKKyJcbiIKKyIgICAgTmFtZSAgICAgICAgQXJncyBSYW5nZSBDb21wbGV0ZSAgRGVmaW5pdGlvbiIKK21zZ3N0ciAiXG4gICAgTm9tICAgICAgICAgQXJncyBBYmFzdCBDb21wbGV0YXIgRGVmaW5pY2nzIgorCisjOiBleF9kb2NtZC5jOjQ1MTcKK21zZ2lkICJObyB1c2VyLWRlZmluZWQgY29tbWFuZHMgZm91bmQiCittc2dzdHIgIk5vIHMnaGFuIHRyb2JhdCBvcmRyZXMgZGVmaW5pZGVzIHBlciBsJ3VzdWFyaSIKKworIzogZXhfZG9jbWQuYzo0NTQ5Cittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTogTm8gaGV1IGVzcGVjaWZpY2F0IGNhcCBhdHJpYnV0IgorCisjOiBleF9kb2NtZC5jOjQ2MDEKK21zZ2lkICJFMTc2OiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIkUxNzY6IEVsIG5vbWJyZSBkJ2FyZ3VtZW50cyBubyDpcyB24GxpZCIKKworIzogZXhfZG9jbWQuYzo0NjE2Cittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3NzogRWwgY29tcHRhZG9yIG5vIGVzIHBvdCBlc3BlY2lmaWNhciBkb3MgY29wcyIKKworIzogZXhfZG9jbWQuYzo0NjI2Cittc2dpZCAiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIKK21zZ3N0ciAiRTE3ODogRWwgdmFsb3IgcGVyIG9taXNzafMgZGVsIGNvbXB0YWRvciBubyDpcyB24GxpZCIKKworIyCrY29tcGxldGFyuyAgZWFjCisjOiBleF9kb2NtZC5jOjQ2NTcKK21zZ2lkICJFMTc5OiBhcmd1bWVudCByZXF1aXJlZCBmb3IgY29tcGxldGUiCittc2dzdHIgIkUxNzk6IExhIGZ1bmNp8yBjb21wbGV0YXIgcmVxdWVyZWl4IHVuIGFyZ3VtZW50IgorCisjIKtjb21wbGV0YXK7ICBlYWMKKyM6IGV4X2RvY21kLmM6NDY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgwOiBJbnZhbGlkIGNvbXBsZXRlIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTE4MDogRWwgdmFsb3IgcGVyIGxhIGZ1bmNp8yBjb21wbGV0YXIgbm8g6XMgduBsaWQ6ICVzIgorCisjIKtjb21wbGV0YXK7ICBlYWMKKyM6IGV4X2RvY21kLmM6NDY5NAorbXNnaWQgIkU0Njc6IEN1c3RvbSBjb21wbGV0aW9uIHJlcXVpcmVzIGEgZnVuY3Rpb24gYXJndW1lbnQiCittc2dzdHIgIkU0Njc6IEVscyBlc3F1ZW1lcyBkZSBjb21wbGV0YXIgcmVxdWVyZWl4ZW4gdW5hIGZ1bmNp8yBjb20gYSBhcmd1bWVudCIKKworIyCrY29tcGxldGFyuyAgZWFjCisjOiBleF9kb2NtZC5jOjQ2OTkKK21zZ2lkICJFNDY4OiBDb21wbGV0aW9uIGFyZ3VtZW50IG9ubHkgYWxsb3dlZCBmb3IgY3VzdG9tIGNvbXBsZXRpb24iCittc2dzdHIgIkU0Njg6IEwnYXJndW1lbnQgZGUgY29tcGxldGFyIG5vbelzIGVzdOAgcGVybehzIGVuIGVzcXVlbWVzIHBlcnNvbmFsaXR6YXRzIgorCisjOiBleF9kb2NtZC5jOjQ3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MTogSW52YWxpZCBhdHRyaWJ1dGU6ICVzIgorbXNnc3RyICJFMTgxOiBMJ2F0cmlidXQgbm8g6XMgduBsaWQ6ICVzIgorCisjOiBleF9kb2NtZC5jOjQ3NTIKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4MjogRWwgbm9tIGRlIGwnb3JkcmUgbm8g6XMgduBsaWQiCisKKyM6IGV4X2RvY21kLmM6NDc2NworbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4MzogTGVzIG9yZHJlcyBkZWZpbmlkZXMgcGVyIGwndXN1YXJpIGhhbiBkZSBjb21lbudhciBlbiBtYWr6c2N1bGEiCisKKyM6IGV4X2RvY21kLmM6NDgzNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTg0OiBObyBzdWNoIHVzZXItZGVmaW5lZCBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE4NDogTm8gZXhpc3RlaXggdGFsIG9yZHJlIGRlZmluaWRhIHBlciBsJ3VzdWFyaTogJXMiCisKKyM6IGV4X2RvY21kLmM6NTI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg1OiBDYW5ub3QgZmluZCBjb2xvciBzY2hlbWUgJXMiCittc2dzdHIgIkUxODU6IE5vIHMnaGEgdHJvYmF0IGwnZXNxdWVtYSBkZSBjb2xvcnMgJXMiCisKKyM6IGV4X2RvY21kLmM6NTMwMgorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICJTYWx1dGFjaW9ucywgdXN1YXJpIGRlIFZpbSEiCisKKyMgVO10b2wgZCd1biBkaeBsZWcgWzpicm93c2Ugc3BsaXRdICBlYWMKKyM6IGV4X2RvY21kLmM6NjAxMworbXNnaWQgIkVkaXQgRmlsZSBpbiBuZXcgd2luZG93IgorbXNnc3RyICJFZGl0YSB1biBmaXR4ZXIgZW4gdW5hIGZpbmVzdHJhIG5vdmEiCisKKyM6IGV4X2RvY21kLmM6NjMwMAorbXNnaWQgIk5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiTm8gaGkgaGEgZml0eGVyIGQnaW50ZXJjYW52aSIKKworIyDJcyB1biB07XRvbCBkJ3VuIGRp4GxlZyBbOmJyb3dzZSByZWFkXSAgZWFjCisjOiBleF9kb2NtZC5jOjY0MDQKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAiQWZlZ2VpeCB1biBmaXR4ZXIiCisKKyM6IGV4X2RvY21kLmM6NjQ2OAorbXNnaWQgIkUxODY6IE5vIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE4NjogTm8gaGkgaGEgY2FwIGRpcmVjdG9yaSBhbnRlcmlvciIKKworIzogZXhfZG9jbWQuYzo2NTUwCittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4NzogRGVzY29uZWd1dCIKKworIzogZXhfZG9jbWQuYzo2NjM1Cittc2dpZCAiRTQ2NTogOndpbnNpemUgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiCittc2dzdHIgIkU0NjU6IEwnb3JkcmUgOndpbnNpemUgcmVxdWVyZWl4IGRvcyBhcmd1bWVudHMgbnVt6HJpY3MiCisKKyM6IGV4X2RvY21kLmM6NjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIlBvc2ljafMgZGUgbGEgZmluZXN0cmE6IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NjY5MQorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICJFMTg4OiBFbiBhcXVlc3RhIHBsYXRhZm9ybWEgbm8gZXMgcG90IG9idGVuaXIgbGEgcG9zaWNp8yBkZSBsYSBmaW5lc3RyYSIKKworIzogZXhfZG9jbWQuYzo2NzAxCittc2dpZCAiRTQ2NjogOndpbnBvcyByZXF1aXJlcyB0d28gbnVtYmVyIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTQ2NjogTCdvcmRyZSA6d2lucG9zIHJlcXVlcmVpeCBkb3MgYXJndW1lbnRzIG51behyaWNzIgorCisjIMlzIGVsIHTtdG9sIGQndW4gZGngbGVnLiAgZWFjCisjOiBleF9kb2NtZC5jOjY5ODAKK21zZ2lkICJTYXZlIFJlZGlyZWN0aW9uIgorbXNnc3RyICJEZXNhIGxhIHJlZGlyZWNjafMiCisKKyMgyXMgZWwgdO10b2wgZCd1biBkaeBsZWcuICBlYWMKKyM6IGV4X2RvY21kLmM6NzEzMQorbXNnaWQgIlNhdmUgVmlldyIKK21zZ3N0ciAiRGVzYSBsYSB2aXN0YSIKKworIyDJcyBlbCB07XRvbCBkJ3VuIGRp4GxlZy4gIGVhYworIzogZXhfZG9jbWQuYzo3MTMyCittc2dpZCAiU2F2ZSBTZXNzaW9uIgorbXNnc3RyICJEZXNhIGxhIHNlc3Np8yIKKworIyDJcyBlbCB07XRvbCBkJ3VuIGRp4GxlZy4gIGVhYworIzogZXhfZG9jbWQuYzo3MTM0Cittc2dpZCAiU2F2ZSBTZXR1cCIKK21zZ3N0ciAiRGVzYSBsYSBjb25maWd1cmFjafMiCisKKyM6IGV4X2RvY21kLmM6NzI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg5OiBcIiVzXCIgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxODk6IFwiJXNcIiBleGlzdGVpeCAoYWZlZ2l1ICEgcGVyIGNvbmZpcm1hcikiCisKKyM6IGV4X2RvY21kLmM6NzI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxOTA6IE5vIHMnaGEgcG9ndXQgb2JyaXIgXCIlc1wiIGFtYiBwZXJt7XMgZCdlc2NyaXB0dXJhIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo3MzE0Cittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICJFMTkxOiBMJ2FyZ3VtZW50IGhhIGRlIHNlciB1bmEgbGxldHJhIG8gYukgdW4gYWNjZW50IG9iZXJ0IG8gdGFuY2F0IgorCisjOiBleF9kb2NtZC5jOjczNTYKK21zZ2lkICJFMTkyOiBSZWN1cnNpdmUgdXNlIG9mIDpub3JtYWwgdG9vIGRlZXAiCittc2dzdHIgIkUxOTI6INpzIHJlY3Vyc2l1IGRlIDpub3JtYWwgbWFzc2EgcHJvZnVuZCIKKworIzogZXhfZG9jbWQuYzo3ODY5Cittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6IE5vIGhpIGhhIGNhcCBub20gZGUgZml0eGVyIGFsdGVybmF0aXUgcGVyIHN1YnN0aXR1aXIgJyMnIgorCisjOiBleF9kb2NtZC5jOjc5MDAKK21zZ2lkICJFNDk1OiBubyBhdXRvY29tbWFuZCBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWZpbGU+XCIiCittc2dzdHIgIkU0OTU6IE5vIGhpIGhhIGNhcCBub20gZGUgZml0eGVyIGQnYXV0by1vcmRyZXMgcGVyIHN1YnN0aXR1aXIgXCI8YWZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6NzkwOAorbXNnaWQgIkU0OTY6IG5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAiRTQ5NjogTm8gaGkgaGEgY2FwIG5vbWJyZSBkZSBidWZmZXIgZCdhdXRvLW9yZHJlcyBwZXIgc3Vic3RpdHVpciBcIjxhYnVmPlwiIgorCisjOiBleF9kb2NtZC5jOjc5MTkKK21zZ2lkICJFNDk3OiBubyBhdXRvY29tbWFuZCBtYXRjaCBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFtYXRjaD5cIiIKK21zZ3N0ciAiRTQ5NzogTm8gaGkgaGEgY2FwIG5vbSBkJ2F1dG8tb3JkcmUgcGVyIHN1YnN0aXR1aXIgXCI8YW1hdGNoPlwiIgorCisjOiBleF9kb2NtZC5jOjc5MjkKK21zZ2lkICJFNDk4OiBubyA6c291cmNlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxzZmlsZT5cIiIKK21zZ3N0ciAiRTQ5ODogTm8gaGkgaGEgY2FwIHNjcmlwdCBwZXIgc3Vic3RpdHVpciBcIjxzZmlsZT5cIiIKKworIzogZXhfZG9jbWQuYzo3OTcwCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIkU0OTk6IEVtcHR5IGZpbGUgbmFtZSBmb3IgJyUnIG9yICcjJywgb25seSB3b3JrcyB3aXRoIFwiOnA6aFwiIgorbXNnc3RyICJFNDk5OiBFbCBub20gZGUgZml0eGVyIHBlciAnJScgbyAnIycgZXN04CBidWl0LCBub23pcyBmdW5jaW9uYSBhbWIgXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6Nzk3MgorbXNnaWQgIkU1MDA6IEV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1MDA6IFMnZXZhbHVhIGNvbSBhIGNhZGVuYSBidWlkYSIKKworIzogZXhfZG9jbWQuYzo4ODk5Cittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiBObyBzJ2hhIHBvZ3V0IG9icmlyIGVsIGZpdHhlciB2aW1pbmZvIGFtYiBwZXJt7XMgZGUgbGVjdHVyYSIKKworIzogZXhfZG9jbWQuYzo5MDcyCittc2dpZCAiRTE5NjogTm8gZGlncmFwaHMgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMTk2OiBBcXVlc3RhIHZlcnNp8yBubyBzdXBvcnRhIGTtZ3JhZnMiCisKKyM6IGV4X2V2YWwuYzo0MjMKK21zZ2lkICJFNjA4OiBDYW5ub3QgOnRocm93IGV4Y2VwdGlvbnMgd2l0aCAnVmltJyBwcmVmaXgiCittc2dzdHIgIkU2MDg6IE5vIGVzIHBvZGVuIGdlbmVyYXIgZXhlcGNpb25zIGFtYiBlbCBwcmVmaXggJ1ZpbSciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gdGhyb3duOiAlcyIKK21zZ3N0ciAiRXhjZXBjafMgZ2VuZXJhZGE6ICVzIgorCisjOiBleF9ldmFsLmM6NTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBmaW5pc2hlZDogJXMiCittc2dzdHIgIkV4ZXBjafMgZmluYWxpdHphZGE6ICVzIgorCisjOiBleF9ldmFsLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBkaXNjYXJkZWQ6ICVzIgorbXNnc3RyICJFeGVwY2nzIGRlc2NhcnRhZGE6ICVzIgorCisjOiBleF9ldmFsLmM6NjAwIGV4X2V2YWwuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIGxpbmUgJWxkIgorbXNnc3RyICIlcywgbO1uaWEgJWxkIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV4X2V2YWwuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGNhdWdodDogJXMiCittc2dzdHIgIkV4Y2VwY2nzIGludGVyY2VwdGFkYTogJXMiCisKKyM6IGV4X2V2YWwuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbWFkZSBwZW5kaW5nIgorbXNnc3RyICIlcyBlc3TgIHBlbmRlbnQiCisKKyM6IGV4X2V2YWwuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzdW1lZCIKK21zZ3N0ciAiJXMgcydoYSBjb250aW51YXQiCisKKyM6IGV4X2V2YWwuYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzY2FyZGVkIgorbXNnc3RyICIlcyBzJ2hhIGRlc2NhcnRhdCIKKworIzogZXhfZXZhbC5jOjcyNgorbXNnaWQgIkV4Y2VwdGlvbiIKK21zZ3N0ciAiRXhlcGNp8yIKKworIzogZXhfZXZhbC5jOjczMgorbXNnaWQgIkVycm9yIGFuZCBpbnRlcnJ1cHQiCittc2dzdHIgIkVycm9yIGkgaW50ZXJydXBjafMiCisKKyM6IGV4X2V2YWwuYzo3MzQgZ3VpLmM6NDI1MworbXNnaWQgIkVycm9yIgorbXNnc3RyICJFcnJvciIKKworIy4gaWYgKHBlbmRpbmcgJiBDU1RQX0lOVEVSUlVQVCkKKyM6IGV4X2V2YWwuYzo3MzYKK21zZ2lkICJJbnRlcnJ1cHQiCittc2dzdHIgIkludGVycnVwY2nzIgorCisjOiBleF9ldmFsLmM6ODEwCittc2dpZCAiRTU3OTogOmlmIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU1Nzk6IEltYnJpY2FjafMgZGUgOmlmIG1hc3NhIHByb2Z1bmRhIgorCisjOiBleF9ldmFsLmM6ODQ3Cittc2dpZCAiRTU4MDogOmVuZGlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgwOiBEZWNsYXJhY2nzIDplbmRpZiBzZW5zZSA6aWYiCisKKyM6IGV4X2V2YWwuYzo4OTEKK21zZ2lkICJFNTgxOiA6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MTogRGVjbGFyYWNp8yA6ZWxzZSBzZW5zZSA6aWYiCisKKyM6IGV4X2V2YWwuYzo4OTQKK21zZ2lkICJFNTgyOiA6ZWxzZWlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgyOiBEZWNsYXJhY2nzIDplbHNlaWYgc2Vuc2UgOmlmIgorCisjOiBleF9ldmFsLmM6OTAxCittc2dpZCAiRTU4MzogbXVsdGlwbGUgOmVsc2UiCittc2dzdHIgIkU1ODM6IE36bHRpcGxlcyA6ZWxzZSIKKworIzogZXhfZXZhbC5jOjkwNAorbXNnaWQgIkU1ODQ6IDplbHNlaWYgYWZ0ZXIgOmVsc2UiCittc2dzdHIgIkU1ODQ6IERlY2xhcmFjafMgOmVsc2VpZiBkZXNwculzIGRlIDplbHNlIgorCisjOiBleF9ldmFsLmM6OTcxCittc2dpZCAiRTU4NTogOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU1ODU6IEltYnJpY2FjafMgZGUgOndoaWxlIG1hc3NhIHByb2Z1bmRhIgorCisjOiBleF9ldmFsLmM6MTAyNworbXNnaWQgIkU1ODY6IDpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4NjogRGVjbGFyYWNp8yA6Y29udGludWUgc2Vuc2UgOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTA2NworbXNnaWQgIkU1ODc6IDpicmVhayB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4NzogRGVjbGFyYWNp8yA6YnJlYWsgc2Vuc2UgOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTI2NgorbXNnaWQgIkU2MDE6IDp0cnkgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTYwMTogSW1icmljYWNp8yBkZSA6dHJ5IG1hc3NhIHByb2Z1bmRhIgorCisjOiBleF9ldmFsLmM6MTM0NgorbXNnaWQgIkU2MDM6IDpjYXRjaCB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDM6IERlY2xhcmFjafMgOmNhdGNoIHNlbnNlIDp0cnkiCisKKyMuIEdpdmUgdXAgZm9yIGEgIjpjYXRjaCIgYWZ0ZXIgIjpmaW5hbGx5IiBhbmQgaWdub3JlIGl0LgorIy4gKiBKdXN0IHBhcnNlLgorIzogZXhfZXZhbC5jOjEzNjgKK21zZ2lkICJFNjA0OiA6Y2F0Y2ggYWZ0ZXIgOmZpbmFsbHkiCittc2dzdHIgIkU2MDQ6IERlY2xhcmFjafMgOmNhdGNoIGRlc3By6XMgZGUgOmZpbmFsbHkiCisKKyM6IGV4X2V2YWwuYzoxNTAxCittc2dpZCAiRTYwNjogOmZpbmFsbHkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjA2OiBEZWNsYXJhY2nzIDpmaW5hbGx5IHNlbnNlIDp0cnkiCisKKyMuIEdpdmUgdXAgZm9yIGEgbXVsdGlwbGUgIjpmaW5hbGx5IiBhbmQgaWdub3JlIGl0LgorIzogZXhfZXZhbC5jOjE1MjUKK21zZ2lkICJFNjA3OiBtdWx0aXBsZSA6ZmluYWxseSIKK21zZ3N0ciAiRTYwNzogTfpsdGlwbGVzIDpmaW5hbGx5IgorCisjOiBleF9ldmFsLmM6MTYzNAorbXNnaWQgIkU2MDI6IDplbmR0cnkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAyOiBEZWNsYXJhY2nzIDplbmR0cnkgc2Vuc2UgOnRyeSIKKworIzogZXhfZXZhbC5jOjE5NjYKK21zZ2lkICJFMTkzOiA6ZW5kZnVuY3Rpb24gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTkzOiBEZWNsYXJhY2nzIDplbmRmdW5jdGlvbiBmb3JhIGQndW5hIGZ1bmNp8yIKKworIyBjb250ZXh0PyAgZWFjCisjOiBleF9nZXRsbi5jOjMxNTMKK21zZ2lkICJ0YWduYW1lIgorbXNnc3RyICJub20gZGUgbCdldGlxdWV0YSIKKworIyBjb250ZXh0PyAgZWFjCisjOiBleF9nZXRsbi5jOjMxNTYKK21zZ2lkICIga2luZCBmaWxlXG4iCittc2dzdHIgIiB0aXB1cyBkZSBmaXR4ZXJcbiIKKworIzogZXhfZ2V0bG4uYzo0NTA3Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICJsJ29wY2nzICdoaXN0b3J5JyDpcyB6ZXJvIgorCisjOiBleF9nZXRsbi5jOjQ3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgJXMgSGlzdG9yeSAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIlxuIyBIaXN0b3JpYWwgJXMgKGRlIG3pcyBhIG1lbnlzIHJlY2VudCk6XG4iCisKKyM6IGV4X2dldGxuLmM6NDc0OAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAiZCdvcmRyZXMiCisKKyM6IGV4X2dldGxuLmM6NDc0OQorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgImRlIGNhZGVuZXMgY2VyY2FkZXMiCisKKyM6IGV4X2dldGxuLmM6NDc1MAorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgImQnZXhwcmVzc2lvbnMiCisKKyM6IGV4X2dldGxuLmM6NDc1MQorbXNnaWQgIklucHV0IExpbmUiCittc2dzdHIgImRlIGztbmllcyBkJ2VudHJhZGEiCisKKyM6IGV4X2dldGxuLmM6NDc4MQorbXNnaWQgIkUxOTg6IGNtZF9wY2hhciBiZXlvbmQgdGhlIGNvbW1hbmQgbGVuZ3RoIgorbXNnc3RyICJFMTk4OiBjbWRfcGNoYXIgZm9yYSBkZSBsJ+ByZWEgZGUgbCdvcmRyZSIKKworIzogZXhfZ2V0bG4uYzo0OTU4Cittc2dpZCAiRTE5OTogQWN0aXZlIHdpbmRvdyBvciBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiRTE5OTogUydoYSBlbGltaW5hdCBsYSBmaW5lc3RyYSBvIGVsIGJ1ZmZlciBhY3RpdSIKKworIzogZmlsZWlvLmM6MzczCittc2dpZCAiSWxsZWdhbCBmaWxlIG5hbWUiCittc2dzdHIgIkVsIG5vbSBkZSBmaXR4ZXIg6XMgaWy3bGVnYWwiCisKKyM6IGZpbGVpby5jOjM5NyBmaWxlaW8uYzo1MjIgZmlsZWlvLmM6MjY5MCBmaWxlaW8uYzoyNzMxCittc2dpZCAiaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIulzIHVuIGRpcmVjdG9yaSIKKworIzogZmlsZWlvLmM6Mzk5Cittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAibm8g6XMgdW4gZml0eGVyIgorCisjOiBmaWxlaW8uYzo1NDQgZmlsZWlvLmM6Mzg0MAorbXNnaWQgIltOZXcgRmlsZV0iCittc2dzdHIgIltGaXR4ZXIgbm91XSIKKworIzogZmlsZWlvLmM6NTY2Cittc2dpZCAiW1Blcm1pc3Npb24gRGVuaWVkXSIKK21zZ3N0ciAiW1Blcm3tcyBkZW5lZ2F0XSIKKworIzogZmlsZWlvLmM6NjcwCittc2dpZCAiRTIwMDogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG1hZGUgdGhlIGZpbGUgdW5yZWFkYWJsZSIKK21zZ3N0ciAiRTIwMDogQXV0by1vcmRyZXMgKlJlYWRQcmUgaGFuIGRlaXhhdCBlbCBmaXR4ZXIgaWxsZWdpYmxlIgorCisjOiBmaWxlaW8uYzo2NzIKK21zZ2lkICJFMjAxOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMjAxOiBMZXMgYXV0by1vcmRyZXMgKlJlYWRQcmUgbm8gcG9kZW4gY2FudmlhciBlbCBidWZmZXIgYWN0dWFsIgorCisjOiBmaWxlaW8uYzo2OTMKK21zZ2lkICJWaW06IFJlYWRpbmcgZnJvbSBzdGRpbi4uLlxuIgorbXNnc3RyICJWaW06IExsZWdpbnQgbCdlbnRyYWRhIGVzdOBuZGFyZC4uLlxuIgorCisjOiBmaWxlaW8uYzo2OTkKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIkxsZWdpbnQgbCdlbnRyYWRhIGVzdOBuZGFyZC4uLiIKKworIy4gUmUtb3BlbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBmYWlsZWQhCisjOiBmaWxlaW8uYzo5NDQKK21zZ2lkICJFMjAyOiBDb252ZXJzaW9uIG1hZGUgZmlsZSB1bnJlYWRhYmxlISIKK21zZ3N0ciAiRTIwMjogTGEgY29udmVyc2nzIGhhIGRlaXhhdCBlbCBmaXR4ZXIgaWxsZWdpYmxlISIKKworIzogZmlsZWlvLmM6MTg5NgorbXNnaWQgIltmaWZvL3NvY2tldF0iCittc2dzdHIgIltmaWZvL3NvY2tldF0iCisKKyM6IGZpbGVpby5jOjE5MDMKK21zZ2lkICJbZmlmb10iCittc2dzdHIgIltmaWZvXSIKKworIzogZmlsZWlvLmM6MTkxMAorbXNnaWQgIltzb2NrZXRdIgorbXNnc3RyICJbc29ja2V0XSIKKworIyBlYWMgIG5vbelzLWxlY3R1cmEgKG5sKQorIzogZmlsZWlvLmM6MTkxOAorbXNnaWQgIltST10iCittc2dzdHIgIltOTF0iCisKKyM6IGZpbGVpby5jOjE5MjgKK21zZ2lkICJbQ1IgbWlzc2luZ10iCittc2dzdHIgIltmYWx0ZW4gY2Fy4GN0ZXJzIENSXSIKKworIyBlbnRyYSBlbiBjb25mbGljdGUgYW1iIE5MIChub23pcyBsZWN0dXJhKQorIzogZmlsZWlvLmM6MTkzMworbXNnaWQgIltOTCBmb3VuZF0iCittc2dzdHIgIltzJ2hhbiB0cm9iYXQgY2Fy4GN0ZXJzIE5MXSIKKworIzogZmlsZWlvLmM6MTkzOAorbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW2ztbmllcyBsbGFyZ3VlcyBwYXJ0aWRlc10iCisKKyM6IGZpbGVpby5jOjE5NDQgZmlsZWlvLmM6MzgyNAorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW05PIGNvbnZlcnRpdF0iCisKKyM6IGZpbGVpby5jOjE5NDkgZmlsZWlvLmM6MzgyOQorbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJbY29udmVydGl0XSIKKworIzogZmlsZWlvLmM6MTk1NiBmaWxlaW8uYzozODU0Cittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJbeGlmcmF0XSIKKworIzogZmlsZWlvLmM6MTk2MworbXNnaWQgIltDT05WRVJTSU9OIEVSUk9SXSIKK21zZ3N0ciAiW0VSUk9SIERFIENPTlZFUlNJ010iCisKKyM6IGZpbGVpby5jOjE5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiW0lMTEVHQUwgQllURSBpbiBsaW5lICVsZF0iCittc2dzdHIgIltPQ1RFVCBJTLdMRUdBTCBhIGxhIGztbmlhICVsZF0iCisKKyM6IGZpbGVpby5jOjE5NzYKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbRVJST1JTIERFIExFQ1RVUkFdIgorCisjOiBmaWxlaW8uYzoyMTkyCittc2dpZCAiQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIGNvbnZlcnNpb24iCittc2dzdHIgIk5vIHMnaGEgdHJvYmF0IGVsIGZpdHhlciB0ZW1wb3JhbCBwZXIgbGEgY29udmVyc2nzIgorCisjOiBmaWxlaW8uYzoyMTk5Cittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICJMYSBjb252ZXJzafMgYW1iICdjaGFyY29udmVydCcgaGEgZmFsbGF0IgorCisjOiBmaWxlaW8uYzoyMjAyCittc2dpZCAiY2FuJ3QgcmVhZCBvdXRwdXQgb2YgJ2NoYXJjb252ZXJ0JyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBsbGVnaXIgbGEgc29ydGlkYSBkZSAnY2hhcmNvbnZlcnQnIgorCisjOiBmaWxlaW8uYzoyNjA1Cittc2dpZCAiRTIwMzogQXV0b2NvbW1hbmRzIGRlbGV0ZWQgb3IgdW5sb2FkZWQgYnVmZmVyIHRvIGJlIHdyaXR0ZW4iCittc2dzdHIgIkUyMDM6IEF1dG8tb3JkcmVzIGhhbiBlbGltaW5hdCBvIGFsbGliZXJhdCBlbCBidWZmZXIgYSBlc2NyaXVyZSIKKworIzogZmlsZWlvLmM6MjYyOAorbXNnaWQgIkUyMDQ6IEF1dG9jb21tYW5kIGNoYW5nZWQgbnVtYmVyIG9mIGxpbmVzIGluIHVuZXhwZWN0ZWQgd2F5IgorbXNnc3RyICJFMjA0OiBVbmEgYXV0by1vcmRyZSBoYSBjYW52aWF0IGVsIG5vbWJyZSBkZSBs7W5pZXMgZGUgZm9ybWEgaW5lc3BlcmFkYSIKKworIzogZmlsZWlvLmM6MjY5NiBmaWxlaW8uYzoyNzE0Cittc2dpZCAiaXMgbm90IGEgZmlsZSBvciB3cml0YWJsZSBkZXZpY2UiCittc2dzdHIgIm5vIOlzIHVuIGZpdHhlciBvIGRpc3Bvc2l0aXUgcXVlIGVzIHB1Z3VpIGVzY3JpdXJlIgorCisjOiBmaWxlaW8uYzoyNzY2Cittc2dpZCAiaXMgcmVhZC1vbmx5IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIulzIHVuIGZpdHhlciBkZSBub23pcyBsZWN0dXJhIChhZmVnaXUgISBwZXIgY29uZmlybWFyKSIKKworIzogZmlsZWlvLmM6MzA3MgorbXNnaWQgIkU1MDY6IENhbid0IHdyaXRlIHRvIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDY6IE5vIHMnaGEgcG9ndXQgZXNjcml1cmUgbGEgY/JwaWEgZGUgc2VndXJldGF0IChhZmVnaXUgISBwZXIgY29uZmlybWFyKSIKKworIzogZmlsZWlvLmM6MzA4NAorbXNnaWQgIkU1MDc6IENsb3NlIGVycm9yIGZvciBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA3OiBFcnJvciBlbiB0YW5jYXIgZWwgZml0eGVyIGPycGlhIGRlIHNlZ3VyZXRhdCAoYWZlZ2l1ICEgcGVyIGNvbmZpcm1hcikiCisKKyM6IGZpbGVpby5jOjMwODYKK21zZ2lkICJFNTA4OiBDYW4ndCByZWFkIGZpbGUgZm9yIGJhY2t1cCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA4OiBFcnJvciBkZSBsZWN0dXJhIGVuIGZlciBsYSBj8nBpYSBkZSBzZWd1cmV0YXQgKGFmZWdpdSAhIHBlciBjb25maXJtYXIpIgorCisjOiBmaWxlaW8uYzozMTAyCittc2dpZCAiRTUwOTogQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA5OiBObyBzJ2hhIHBvZ3V0IGNyZWFyIGxhIGPycGlhIGRlIHNlZ3VyZXRhdCAoYWZlZ2l1ICEgcGVyIGNvbmZpcm1hcikiCisKKyM6IGZpbGVpby5jOjMyMDUKK21zZ2lkICJFNTEwOiBDYW4ndCBtYWtlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MTA6IE5vIHMnaGEgcG9ndXQgZmVyIGxhIGPycGlhIGRlIHNlZ3VyZXRhdCAoYWZlZ2l1ICEgcGVyIGNvbmZpcm1hcikiCisKKyMgq3Jlc291cmNlIGZvcmu7IChNYWNPUykgPworIzogZmlsZWlvLmM6MzI2NworbXNnaWQgIkU0NjA6IFRoZSByZXNvdXJjZSBmb3JrIHdvdWxkIGJlIGxvc3QgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ2MDogTGEgYmlmdXJjYWNp8yBkZSByZWN1cnNvcyBlcyBwZXJkcuAgKGFmZWdpdSAhIHBlciBjb25maXJtYXIpIgorCisjOiBmaWxlaW8uYzozMzY4Cittc2dpZCAiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTQ6IE5vIHMnaGEgdHJvYmF0IGVsIGZpdHhlciB0ZW1wb3JhbCBwZXIgZXNjcml1cmUtaGkiCisKKyM6IGZpbGVpby5jOjMzODYKK21zZ2lkICJFMjEzOiBDYW5ub3QgY29udmVydCAoYWRkICEgdG8gd3JpdGUgd2l0aG91dCBjb252ZXJzaW9uKSIKK21zZ3N0ciAiRTIxMzogTm8gcydoYSBwb2d1dCBjb252ZXJ0aXIgKGFmZWdpdSAhIHBlciBkZXNhciBzZW5zZSBjb252ZXJzafMpIgorCisjOiBmaWxlaW8uYzozNDIxCittc2dpZCAiRTE2NjogQ2FuJ3Qgb3BlbiBsaW5rZWQgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE2NjogTm8gcydoYSBwb2d1dCBvYnJpciBlbCBmaXR4ZXIgZW5sbGHnYXQgcGVyIGVzY3JpdXJlLWhpIgorCisjOiBmaWxlaW8uYzozNDI1Cittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiBObyBzJ2hhIHBvZ3V0IG9icmlyIGVsIGZpdHhlciBhbWIgcGVybe1zIGQnZXNjcmlwdHVyYSIKKworIzogZmlsZWlvLmM6MzY3NQorbXNnaWQgIkU1MTI6IENsb3NlIGZhaWxlZCIKK21zZ3N0ciAiRTUxMjogRXJyb3IgZW4gdGFuY2FyIgorCisjOiBmaWxlaW8uYzozNzQ2Cittc2dpZCAiRTUxMzogd3JpdGUgZXJyb3IsIGNvbnZlcnNpb24gZmFpbGVkIgorbXNnc3RyICJFNTEyOiBFcnJvciBkJ2VzY3JpcHR1cmEsIGhhIGZhbGxhdCBsYSBjb252ZXJzafMiCisKKyM6IGZpbGVpby5jOjM3NTIKK21zZ2lkICJFNTE0OiB3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICJFNTE0OiBFcnJvciBkJ2VzY3JpcHR1cmEgKHNpc3RlbWEgZGUgZml0eGVycyBwbGU/KSIKKworIzogZmlsZWlvLmM6MzgxOQorbXNnaWQgIiBDT05WRVJTSU9OIEVSUk9SIgorbXNnc3RyICIgRVJST1IgREUgQ09OVkVSU0nTIgorCisjOiBmaWxlaW8uYzozODM1Cittc2dpZCAiW0RldmljZV0iCittc2dzdHIgIltEaXNwb3NpdGl1XSIKKworIzogZmlsZWlvLmM6Mzg0MAorbXNnaWQgIltOZXddIgorbXNnc3RyICJbTm91XSIKKworIzogZmlsZWlvLmM6Mzg2MgorbXNnaWQgIiBbYV0iCittc2dzdHIgIiBbYV0iCisKKyM6IGZpbGVpby5jOjM4NjIKK21zZ2lkICIgYXBwZW5kZWQiCittc2dzdHIgIiBhZmVnaXRzIgorCisjOiBmaWxlaW8uYzozODY0Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiIFtlXSIKKworIzogZmlsZWlvLmM6Mzg2NAorbXNnaWQgIiB3cml0dGVuIgorbXNnc3RyICIgZXNjcml0cyIKKworIzogZmlsZWlvLmM6MzkxNworbXNnaWQgIkUyMDU6IFBhdGNobW9kZTogY2FuJ3Qgc2F2ZSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA1OiBwYXRjaG1vZGU6IG5vIHMnaGEgcG9ndXQgZGVzYXIgZWwgZml0eGVyIG9yaWdpbmFsIgorCisjOiBmaWxlaW8uYzozOTM5Cittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBwYXRjaG1vZGU6IG5vIHMnaGEgcG9ndXQgdG9jYXIgZWwgZml0eGVyIG9yaWdpbmFsIGJ1aXQiCisKKyM6IGZpbGVpby5jOjM5NTQKK21zZ2lkICJFMjA3OiBDYW4ndCBkZWxldGUgYmFja3VwIGZpbGUiCittc2dzdHIgIkUyMDc6IE5vIHMnaGEgcG9ndXQgZWxpbWluYXIgbGEgY/JwaWEgZGUgc2VndXJldGF0IgorCisjOiBmaWxlaW8uYzo0MDE4Cittc2dpZCAiIgorIlxuIgorIldBUk5JTkc6IE9yaWdpbmFsIGZpbGUgbWF5IGJlIGxvc3Qgb3IgZGFtYWdlZFxuIgorbXNnc3RyICJcbkFURU5DSdM6IEVsIGZpdHhlciBvcmlnaW5hbCBlcyBwb3QgaGF2ZXIgZmV0IG1hbGLpXG4iCisKKyM6IGZpbGVpby5jOjQwMjAKK21zZ2lkICJkb24ndCBxdWl0IHRoZSBlZGl0b3IgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorbXNnc3RyICJubyBzb3J0aXUgZGUgbCdlZGl0b3IgZmlucyBxdWUgcydoYWdpIGRlc2F0IGVsIGZpdHhlciBhbWIg6HhpdCEiCisKKyM6IGZpbGVpby5jOjQxMDkKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW2Rvc10iCisKKyM6IGZpbGVpby5jOjQxMDkKK21zZ2lkICJbZG9zIGZvcm1hdF0iCittc2dzdHIgIltmb3JtYXQgZG9zXSIKKworIzogZmlsZWlvLmM6NDExNgorbXNnaWQgIlttYWNdIgorbXNnc3RyICJbbWFjXSIKKworIzogZmlsZWlvLmM6NDExNgorbXNnaWQgIlttYWMgZm9ybWF0XSIKK21zZ3N0ciAiW2Zvcm1hdCBtYWNdIgorCisjOiBmaWxlaW8uYzo0MTIzCittc2dpZCAiW3VuaXhdIgorbXNnc3RyICJbdW5peF0iCisKKyM6IGZpbGVpby5jOjQxMjMKK21zZ2lkICJbdW5peCBmb3JtYXRdIgorbXNnc3RyICJbZm9ybWF0IHVuaXhdIgorCisjOiBmaWxlaW8uYzo0MTUwCittc2dpZCAiMSBsaW5lLCAiCittc2dzdHIgIjEgbO1uaWEsICIKKworIzogZmlsZWlvLmM6NDE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMsICIKK21zZ3N0ciAiJWxkIGztbmllcywgIgorCisjOiBmaWxlaW8uYzo0MTU1Cittc2dpZCAiMSBjaGFyYWN0ZXIiCittc2dzdHIgIjEgY2Fy4GN0ZXIiCisKKyM6IGZpbGVpby5jOjQxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYXJhY3RlcnMiCittc2dzdHIgIiVsZCBjYXLgY3RlcnMiCisKKyMgq25vIGZpbmFsIGRlIGztbmlhuyAgZWFjCisjOiBmaWxlaW8uYzo0MTY3Cittc2dpZCAiW25vZW9sXSIKK21zZ3N0ciAiW25vZmxdIgorCisjOiBmaWxlaW8uYzo0MTY3Cittc2dpZCAiW0luY29tcGxldGUgbGFzdCBsaW5lXSIKK21zZ3N0ciAiW9psdGltYSBs7W5pYSBpbmNvbXBsZXRhXSIKKworIy4gZG9uJ3Qgb3ZlcndyaXRlIG1lc3NhZ2VzIGhlcmUKKyMuIG11c3QgZ2l2ZSB0aGlzIHByb21wdAorIy4gZG9uJ3QgdXNlIGVtc2coKSBoZXJlLCBkb24ndCB3YW50IHRvIGZsdXNoIHRoZSBidWZmZXJzCisjOiBmaWxlaW8uYzo0MTg2Cittc2dpZCAiV0FSTklORzogVGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSByZWFkaW5nIGl0ISEhIgorbXNnc3RyICJBVEVOQ0nTOiBFbCBmaXR4ZXIgaGEgY2FudmlhdCBkZXMgZGUgcXVlIHMnaGEgbGxlZ2l0ISEhIgorCisjIHByZWd1bnRhIGFza195ZXNubygpICAgZWFjCisjOiBmaWxlaW8uYzo0MTg4Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0IgorbXNnc3RyICJFc3RldSBzZWd1cnMgcXVlIHZvbGV1IGVzY3JpdXJlJ2wiCisKKyM6IGZpbGVpby5jOjUyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiCittc2dzdHIgIkUyMDg6IEVycm9yIGVuIGVzY3JpdXJlIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA5OiBFcnJvciBjbG9zaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIwOTogRXJyb3IgZW4gdGFuY2FyIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogRXJyb3IgZW4gbGxlZ2lyIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTQ1OQorbXNnaWQgIkUyNDY6IEZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQgZGVsZXRlZCBidWZmZXIiCittc2dzdHIgIkUyNDY6IEwnYXV0by1vcmRyZSBGaWxlQ2hhbmdlZFNoZWxsIGhhIGVsaW1pbmF0IGVsIGJ1ZmZlciIKKworIzogZmlsZWlvLmM6NTQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBubyBsb25nZXIgYXZhaWxhYmxlIgorbXNnc3RyICJFMjExOiBBdGVuY2nzOiBFbCBmaXR4ZXIgXCIlc1wiIGhhIGRlaXhhdCBkJ2VzdGFyIGRpc3BvbmlibGUiCisKKyM6IGZpbGVpby5jOjU0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlcxMjogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgYW5kIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQgaW4gVmltIGFzICIKKyJ3ZWxsIgorbXNnc3RyICJXMTI6IEF0ZW5jafM6IFRhbnQgZWwgZml0eGVyIFwiJXNcIiBjb20gZWwgYnVmZmVyIGRlbCBWaW0gaGFuIGNhbnZpYXQiCisKKyMgbWFzc2EgbGxhcmc/ICBlYWMKKyM6IGZpbGVpby5jOjU0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMTogQXRlbmNp8zogRWwgZml0eGVyIFwiJXNcIiBoYSBjYW52aWF0IGRlcyBkZSBxdWUgcydoYSBjb21lbudhdCBhIGVkaXRhciIKKworIyBtYXNzYSBsbGFyZz8gIGVhYworIzogZmlsZWlvLmM6NTQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTY6IEF0ZW5jafM6IEVscyBwZXJtaXNvcyBkZSBcIiVzXCIgaGFuIGNhbnZpYXQgZGVzIHF1ZSBzJ2hhIGNvbWVu52F0IGEgZWRpdGFyIgorCisjIG1hc3NhIGxsYXJnPyAgZWFjCisjOiBmaWxlaW8uYzo1NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMzogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGJlZW4gY3JlYXRlZCBhZnRlciBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMzogQXRlbmNp8zogRWwgZml0eGVyIFwiJXNcIiBoYSBlc3RhdCBjcmVhdCBkZXNwculzIHF1ZSBzJ2hhIGNvbWVu52F0IGEgZWRpdGFyIgorCisjOiBmaWxlaW8uYzo1NTEyCittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAiQXRlbmNp8yIKKworIzogZmlsZWlvLmM6NTUxMworbXNnaWQgIiIKKyImT0tcbiIKKyImTG9hZCBGaWxlIgorbXNnc3RyICIiCisiJkQnYWNvcmRcbiIKKyImQ2FycmVnYSBlbCBmaXR4ZXIiCisKKyM6IGZpbGVpby5jOjU2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2MjogQ291bGQgbm90IHByZXBhcmUgZm9yIHJlbG9hZGluZyBcIiVzXCIiCittc2dzdHIgIkU0NjI6IE5vIHMnaGFuIHBvZ3V0IGZlciBsZXMgcHJlcGFyYWNpb25zIHBlciByZWxsZWdpciBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU2MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IE5vIHMnaGEgcG9ndXQgcmVsbGVnaXIgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2MjEyCittc2dpZCAiLS1EZWxldGVkLS0iCittc2dzdHIgIi0tRWxpbWluYXQtLSIKKworIy4gdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3QKKyM6IGZpbGVpby5jOjYzNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NzogTm8gc3VjaCBncm91cDogXCIlc1wiIgorbXNnc3RyICJFMzY3OiBObyBleGlzdGVpeCB0YWwgZ3J1cDogXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyICo6ICVzIgorbXNnc3RyICJFMjE1OiBDYXLgY3RlciBpbLdsZWdhbCBkZXNwculzIGRlICo6ICVzIgorCisjOiBmaWxlaW8uYzo2NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiBObyBleGlzdGVpeCB0YWwgZXNkZXZlbmltZW50OiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo2NjU3Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiXG4tLS0gQXV0by1vcmRyZXMgLS0tIgorCisjOiBmaWxlaW8uYzo2OTI4Cittc2dpZCAiRTIxNzogQ2FuJ3QgZXhlY3V0ZSBhdXRvY29tbWFuZHMgZm9yIEFMTCBldmVudHMiCittc2dzdHIgIkUyMTc6IE5vIGVzIHBvZGVuIGV4ZWN1dGFyIGF1dG8tb3JkcmVzIHBlciBUT1RTIGVscyBlc2RldmVuaW1lbnRzIgorCisjOiBmaWxlaW8uYzo2OTUxCittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICJObyBjb2luY2lkZWl4IGNhcCBhdXRvLW9yZHJlIgorCisjOiBmaWxlaW8uYzo3MjcxCittc2dpZCAiRTIxODogYXV0b2NvbW1hbmQgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTIxODogSW1icmljYWNp8yBkJ2F1dG8tb3JkcmVzIG1hc3NhIHByb2Z1bmRhIgorCisjOiBmaWxlaW8uYzo3NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIEF1dG8gY29tbWFuZHMgZm9yIFwiJXNcIiIKK21zZ3N0ciAiYXV0by1vcmRyZXMgJXMgcGVyIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NzU0NworIywgYy1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmcgJXMiCittc2dzdHIgIkV4ZWN1dGFudCAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBmaWxlaW8uYzo3NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgImF1dG9jb21tYW5kICVzIgorbXNnc3RyICJhdXRvLW9yZHJlICVzIgorCisjOiBmaWxlaW8uYzo4MTgyCittc2dpZCAiRTIxOTogTWlzc2luZyB7LiIKK21zZ3N0ciAiRTIxOTogRmFsdGEgdW4gey4iCisKKyM6IGZpbGVpby5jOjgxODQKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiBGYWx0YSB1biB9LiIKKworIzogZm9sZC5jOjY2Cittc2dpZCAiRTQ5MDogTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAiRTQ5MDogTm8gcydoYSB0cm9iYXQgY2FwIHBsZWMiCisKKyM6IGZvbGQuYzo1NTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogTm8gZXMgcG90IGNyZWFyIGNhcCBwbGVjIGFtYiBlbCAnZm9sZG1ldGhvZCcgYWN0dWFsIgorCisjOiBmb2xkLmM6NTU1Cittc2dpZCAiRTM1MTogQ2Fubm90IGRlbGV0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTE6IE5vIHBvdCBlbGltaW5hciBlbCBwbGVjIGFtYiBlbCAnZm9sZG1ldGhvZCcgYWN0dWFsIgorCisjOiBnZXRjaGFyLmM6MjQ2Cittc2dpZCAiRTIyMjogQWRkIHRvIHJlYWQgYnVmZmVyIgorbXNnc3RyICJFMjIyOiBObyBlcyBwb3QgbW9kaWZpY2FyIHVuIGJ1ZmZlciBkZSBsZWN0dXJhIgorCisjOiBnZXRjaGFyLmM6MjE1NgorbXNnaWQgIkUyMjM6IHJlY3Vyc2l2ZSBtYXBwaW5nIgorbXNnc3RyICJFMjIzOiBhc3NpZ25hY2nzIHJlY3Vyc2l2YSIKKworIzogZ2V0Y2hhci5jOjMwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNDogZ2xvYmFsIGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjQ6IGphIGV4aXN0ZWl4IHVuYSBhYnJldmlhY2nzIGdsb2JhbCBwZXIgJXMiCisKKyM6IGdldGNoYXIuYzozMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTogamEgZXhpc3RlaXggdW5hIGFzc2lnbmFjafMgZ2xvYmFsIHBlciAlcyIKKworIzogZ2V0Y2hhci5jOjMxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogamEgZXhpc3RlaXggdW5hIGFicmV2aWFjafMgcGVyICVzIgorCisjOiBnZXRjaGFyLmM6MzE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI3OiBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNzogamEgZXhpc3RlaXggdW5hIGFzc2lnbmFjafMgcGVyICVzIgorCisjOiBnZXRjaGFyLmM6MzIxOQorbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgY2FwIGFicmV2aWFjafMiCisKKyM6IGdldGNoYXIuYzozMjIxCittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgY2FwIGFzc2lnbmFjafMiCisKKyM6IGdldGNoYXIuYzo0MTExCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiBNb2RlIGlst2xlZ2FsIgorCisjOiBndWlfYXRfZnMuYzozMDAKK21zZ2lkICI8Y2Fubm90IG9wZW4+ICIKK21zZ3N0ciAiPG5vIGVzIHBvdCBvYnJpcj4gIgorCisjOiBndWlfYXRfZnMuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAiRTYxNjogdmltX1NlbEZpbGU6IG5vIHMnaGEgcG9ndXQgb2J0ZW5pciBsYSBmb250ICVzIgorCisjOiBndWlfYXRfZnMuYzoyNzgxCittc2dpZCAiRTYxNDogdmltX1NlbEZpbGU6IGNhbid0IHJldHVybiB0byBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNDogdmltX1NlbEZpbGU6IG5vIHMnaGEgcG9ndXQgdG9ybmFyIGFsIGRpcmVjdG9yaSBhY3R1YWwiCisKKyM6IGd1aV9hdF9mcy5jOjI4MDEKK21zZ2lkICJQYXRobmFtZToiCittc2dzdHIgIlViaWNhY2nzOiIKKworIzogZ3VpX2F0X2ZzLmM6MjgwNworbXNnaWQgIkU2MTU6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgIkU2MTU6IHZpbV9TZWxGaWxlOiBubyBzJ2hhIHBvZ3V0IG9idGVuaXIgZWwgZGlyZWN0b3JpIGFjdHVhbCIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfbW90aWYuYzoxNjIzCittc2dpZCAiT0siCittc2dzdHIgIkQnYWNvcmQiCisKKyM6IGd1aV9hdF9mcy5jOjI4MTUgZ3VpX2d0ay5jOjI2MzQgZ3VpX21vdGlmLmM6MTYxOCBndWlfbW90aWYuYzoyODQ5Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJDYW5jZWy3bGEiCisKKyM6IGd1aV9hdGhlbmEuYzoyMDQ3IGd1aV9tb3RpZi5jOjE4NzEKK21zZ2lkICJWaW0gZGlhbG9nIgorbXNnc3RyICJEaeBsZWcgZGVsIFZpbSIKKworIzogZ3VpX2F0X3NiLmM6NDg2Cittc2dpZCAiU2Nyb2xsYmFyIFdpZGdldDogQ291bGQgbm90IGdldCBnZW9tZXRyeSBvZiB0aHVtYiBwaXhtYXAuIgorbXNnc3RyICJCYXJyYSBkZSBkZXNwbGHnYW1lbnQ6IE5vIHMnaGEgcG9ndXQgb2J0ZW5pciBsYSBtaWRhIGRlbCBtYXBhIGRlIGJpdHMuIgorCisjOiBndWlfYmV2YWwuYzo5OAorI34gbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorI34gbXNnc3RyICIiCisKKyM6IGd1aS5jOjIxOQorbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiBObyBzJ2hhIHBvZ3V0IGluaWNpYXIgbCdpbnRlcmbtY2llIGdy4GZpY2EiCisKKyM6IGd1aS5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogTm8gcydoYSBwb2d1dCBsbGVnaXIgXCIlc1wiIgorCisjOiBndWkuYzo0NzMKK21zZ2lkICJFMjMxOiAnZ3VpZm9udHdpZGUnIGludmFsaWQiCittc2dzdHIgIkUyMzE6IEVsIHZhbG9yIGRlICdndWlmb250d2lkZScgbm8g6XMgduBsaWQiCisKKyM6IGd1aS5jOjM5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiBObyBzJ2hhIHBvZ3V0IGFzc2lnbmFyIG1lbfJyaWEgcGVsIGNvbG9yICVzIgorCisjOiBndWlfZ3RrLmM6MTU2MworbXNnaWQgIlZpbSBkaWFsb2cuLi4iCittc2dzdHIgIkRp4GxlZyBkZWwgVmltLi4uIgorCisjOiBndWlfZ3RrLmM6MTk5OCBtZXNzYWdlLmM6Mjc2NgorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZT7VxuIgorIiZOb1xuIgorIiZDYW5jZWy3bGEiCisKKyM6IGd1aV9ndGsuYzoyMTYxCittc2dpZCAiSW5wdXQgX01ldGhvZHMiCittc2dzdHIgIl9N6HRvZGVzIGQnZW50cmFkYSIKKworIzogZ3VpX2d0ay5jOjI0MjcgZ3VpX21vdGlmLmM6Mjc2OAorbXNnaWQgIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIKK21zZ3N0ciAiVklNIC0gQ2VyY2EgaSBzdWJzdGl0dWVpeC4uLiIKKworIzogZ3VpX2d0ay5jOjI0MzUgZ3VpX21vdGlmLmM6Mjc3MAorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiVklNIC0gQ2VyY2EuLi4iCisKKyM6IGd1aV9ndGsuYzoyNDY3IGd1aV9tb3RpZi5jOjI4ODgKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICJDZXJjYToiCisKKyM6IGd1aV9ndGsuYzoyNDg3IGd1aV9tb3RpZi5jOjI5MjAKK21zZ2lkICJSZXBsYWNlIHdpdGg6IgorbXNnc3RyICJTdWJzdGl0dWllaXggYW1iOiIKKworIy4gd2hvbGUgd29yZCBvbmx5IGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI1MTkgZ3VpX21vdGlmLmM6MzAzNgorbXNnaWQgIk1hdGNoIHdob2xlIHdvcmQgb25seSIKK21zZ3N0ciAiTm9t6XMgcGFyYXVsZXMgc2VuY2VyZXMiCisKKyMuIG1hdGNoIGNhc2UgYnV0dG9uCisjOiBndWlfZ3RrLmM6MjUzMiBndWlfbW90aWYuYzozMDQ4Cittc2dpZCAiTWF0Y2ggY2FzZSIKK21zZ3N0ciAiU2Vuc2libGUgYSBsZXMgbWFq+nNjdWxlcyIKKworIzogZ3VpX2d0ay5jOjI1NDQgZ3VpX21vdGlmLmM6Mjk5MAorbXNnaWQgIkRpcmVjdGlvbiIKK21zZ3N0ciAiRGlyZWNjafMiCisKKyMuICdVcCcgYW5kICdEb3duJyBidXR0b25zCisjOiBndWlfZ3RrLmM6MjU1NiBndWlfbW90aWYuYzozMDAyCittc2dpZCAiVXAiCittc2dzdHIgIkFtdW50IgorCisjOiBndWlfZ3RrLmM6MjU2MCBndWlfbW90aWYuYzozMDEwCittc2dpZCAiRG93biIKK21zZ3N0ciAiQXZhbGwiCisKKyM6IGd1aV9ndGsuYzoyNTg2IGd1aV9ndGsuYzoyNTg4IGd1aV9tb3RpZi5jOjI3OTIKK21zZ2lkICJGaW5kIE5leHQiCittc2dzdHIgIkNlcmNhIGVsIHNlZ/xlbnQiCisKKyM6IGd1aV9ndGsuYzoyNjA1IGd1aV9ndGsuYzoyNjA3IGd1aV9tb3RpZi5jOjI4MDkKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICJTdWJzdGl0dWVpeCIKKworIzogZ3VpX2d0ay5jOjI2MTggZ3VpX2d0ay5jOjI2MjAgZ3VpX21vdGlmLmM6MjgyMgorbXNnaWQgIlJlcGxhY2UgQWxsIgorbXNnc3RyICJTdWJzdGl0dWVpeC1sZXMgdG90ZXMiCisKKyM6IGd1aV9ndGtfeDExLmM6MjI4NQorbXNnaWQgIlZpbTogUmVjZWl2ZWQgXCJkaWVcIiByZXF1ZXN0IGZyb20gc2Vzc2lvbiBtYW5hZ2VyXG4iCittc2dzdHIgIlZpbTogUydoYSByZWJ1dCB1bmEgcGV0aWNp8yBcImRpZVwiIGRlbCBnZXN0b3IgZGUgc2Vzc2lvbnNcbiIKKworIzogZ3VpX2d0a194MTEuYzozNDc0Cittc2dpZCAiVmltOiBNYWluIHdpbmRvdyB1bmV4cGVjdGVkbHkgZGVzdHJveWVkXG4iCittc2dzdHIgIlZpbTogTGEgZmluZXN0cmEgcHJpbmNpcGFsIGhhIGVzdGF0IGRlc3Ryde9kYSBpbmVzcGVyYWRhbWVudFxuIgorCisjOiBndWlfZ3RrX3gxMS5jOjQwODgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAiU2VsZWNjafMgZGUgdGlwdXMgZGUgbGxldHJhIgorCisjOiBndWlfZ3RrX3gxMS5jOjU5NDQgdWkuYzoyMDA5Cittc2dpZCAiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIKK21zZ3N0ciAiUydoYSB1c2F0IENVVF9CVUZGRVIwIGVuIGxsb2MgZCd1bmEgc2VsZWNjafMgYnVpZGEiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTcgZ3VpX21vdGlmLmM6MTYyMAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJlIgorCisjOiBndWlfbW90aWYuYzoxNjE5Cittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIkRpcmVjdG9yaXMiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjEKK21zZ2lkICJIZWxwIgorbXNnc3RyICJBanVkYSIKKworIzogZ3VpX21vdGlmLmM6MTYyMgorbXNnaWQgIkZpbGVzIgorbXNnc3RyICJGaXR4ZXJzIgorCisjOiBndWlfbW90aWYuYzoxNjI0Cittc2dpZCAiU2VsZWN0aW9uIgorbXNnc3RyICJTZWxlY2Np8yIKKworIzogZ3VpX21vdGlmLmM6MjgzNQorbXNnaWQgIlVuZG8iCittc2dzdHIgIkRlc2bpcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjEwOiBDYW4ndCBsb2FkIFphcCBmb250ICclcyciCittc2dzdHIgIkU2MTA6IE5vIHMnaGEgcG9ndXQgY2FycmVnYXIgZWwgdGlwdXMgWmFwICclcyciCisKKyM6IGd1aV9yaXNjb3MuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTE6IENhbid0IHVzZSBmb250ICVzIgorbXNnc3RyICJFNjExOiBObyBlcyBwb3QgdXRpbGl0emFyIGVsIHRpcHVzICVzIgorCisjOiBndWlfcmlzY29zLmM6MzI3MAorbXNnaWQgIiIKKyJcbiIKKyJTZW5kaW5nIG1lc3NhZ2UgdG8gdGVybWluYXRlIGNoaWxkIHByb2Nlc3MuXG4iCittc2dzdHIgIlxuRW52aWFudCB1biBtaXNzYXRnZSBwZXIgZmluYWxpdHphciBlbCBwcm9j6XMgZmlsbC5cbiIKKworIzogZ3VpX3czMi5jOjc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiRTI0MzogQXJndW1lbnQgbm8gc3Vwb3J0YXQ6IFwiLSVzXCI7IFVzZXUgbGEgdmVyc2nzIE9MRS4iCisKKyM6IGd1aV93NDguYzoyMDQ4Cittc2dpZCAiRmluZCBzdHJpbmcgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAiQ2VyY2EgdW5hIGNhZGVuYSAodXNldSAnXFxcXCcgcGVyIGNlcmNhciAnXFwnKSIKKworIzogZ3VpX3c0OC5jOjIwNzMKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJDZXJjYSBpIHN1YnN0aXR1ZWl4ICh1c2V1ICdcXFxcJyBwZXIgY2VyY2FyICdcXCcpIgorCisjOiBndWlfeDExLmM6MTQ3OQorbXNnaWQgIlZpbSBFNDU4OiBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnksIHNvbWUgY29sb3JzIG1heSBiZSBpbmNvcnJlY3QiCittc2dzdHIgIlZpbSBFNDU4OiBObyBzJ2hhIHBvZ3V0IGFzc2lnbmFyIG1lbfJyaWEgcGVyIGNvbG9ycywgcG9kZW4gc2VyIGluY29ycmVjdGVzIgorCisjOiBndWlfeDExLmM6MjA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUwOiBGb250cyBmb3IgdGhlIGZvbGxvd2luZyBjaGFyc2V0cyBhcmUgbWlzc2luZyBpbiBmb250c2V0ICVzOiIKK21zZ3N0ciAiRTI1MDogRW4gZWwgY29uanVudCAlcyBmYWx0ZW4gdGlwdXMgcGVscyBzZWf8ZW50cyBqb2NzIGRlIGNhcuBjdGVyczoiCisKKyM6IGd1aV94MTEuYzoyMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTI6IEZvbnRzZXQgbmFtZTogJXMiCittc2dzdHIgIkUyNTI6IE5vbSBkZWwgY29uanVudCBkZSB0aXB1czogJXMiCisKKyM6IGd1aV94MTEuYzoyMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQgJyVzJyBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkVsIHRpcHVzICclcycgbm8g6XMgZCdhbXBsYWRhIGZpeGEiCisKKyM6IGd1aV94MTEuYzoyMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTM6IEZvbnRzZXQgbmFtZTogJXNcbiIKK21zZ3N0ciAiRTI1MzogTm9tIGRlbCBjb25qdW50IGRlIHRpcHVzOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MDogJXNcbiIKK21zZ3N0ciAiVGlwdXMwOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAiVGlwdXMxOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250JWQgd2lkdGggaXMgbm90IHR3aWNlIHRoYXQgb2YgZm9udDBcbiIKK21zZ3N0ciAiTCdhbXBsYWRhIGRlbCB0aXB1cyVkIG5vIOlzIGVsIGRvYmxlIHF1ZSBsYSBkZWwgdGlwdXMwXG4iCisKKyM6IGd1aV94MTEuYzoyMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwIHdpZHRoOiAlbGRcbiIKK21zZ3N0ciAiQW1wbGFkYSBkZWwgdGlwdXMwOiAlbGRcbiIKKworIzogZ3VpX3gxMS5jOjIxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvbnQxIHdpZHRoOiAlbGRcbiIKKyJcbiIKK21zZ3N0ciAiQW1wbGFkYSBkZWwgdGlwdXMxOiAlbGRcblxuIgorCisjOiBoYW5ndWxpbi5jOjYxMAorbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKK21zZ3N0ciAiRTI1NjogRVJST1IgZGUgbCdhdXTybWF0YSBoYW5ndWwiCisKKyM6IGlmX2NzY29wZS5jOjc3Cittc2dpZCAiQWRkIGEgbmV3IGRhdGFiYXNlIgorbXNnc3RyICJBZmVnZWl4IHVuYSBiYXNlIGRlIGRhZGVzIG5vdmEiCisKKyM6IGlmX2NzY29wZS5jOjc5Cittc2dpZCAiUXVlcnkgZm9yIGEgcGF0dGVybiIKK21zZ3N0ciAiQ29uc3VsdGEgdW4gcGF0cvMiCisKKyM6IGlmX2NzY29wZS5jOjgxCittc2dpZCAiU2hvdyB0aGlzIG1lc3NhZ2UiCittc2dzdHIgIk1vc3RyYSBhcXVlc3QgbWlzc2F0Z2UiCisKKyM6IGlmX2NzY29wZS5jOjgzCittc2dpZCAiS2lsbCBhIGNvbm5lY3Rpb24iCittc2dzdHIgIlRhbGxhIHVuYSBjb25uZXhp8yIKKworIzogaWZfY3Njb3BlLmM6ODUKK21zZ2lkICJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIgorbXNnc3RyICJSZWluaWNpYSB0b3RlcyBsZXMgY29ubmV4aW9ucyIKKworIzogaWZfY3Njb3BlLmM6ODcKK21zZ2lkICJTaG93IGNvbm5lY3Rpb25zIgorbXNnc3RyICJNb3N0cmEgbGVzIGNvbm5leGlvbnMiCisKKyM6IGlmX2NzY29wZS5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjA6IFVzYWdlOiBjc1tjb3BlXSAlcyIKK21zZ3N0ciAiRTU2MDogRm9ybWEgZCf6czogY3NbY29wZV0gJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNAorbXNnaWQgIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIKK21zZ3N0ciAiQXF1ZXN0YSBvcmRyZSBkZSBjc2NvcGUgbm8gc3Vwb3J0YSBkaXZpc2nzIGRlIGZpbmVzdHJlcy5cbiIKKworIzogaWZfY3Njb3BlLmM6MTcwCittc2dpZCAiRTU2MjogVXNhZ2U6IGNzdGFnIDxpZGVudD4iCittc2dzdHIgIkU1NjI6IEZvcm1hIGQn+nM6IGNzdGFnIDxkZXNwbD4iCisKKyM6IGlmX2NzY29wZS5jOjIyNgorbXNnaWQgIkUyNTc6IGNzdGFnOiB0YWcgbm90IGZvdW5kIgorbXNnc3RyICJFMjU3OiBjc3RhZzogTm8gcydoYSB0cm9iYXQgbCdldGlxdWV0YSIKKworIzogaWZfY3Njb3BlLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjM6IHN0YXQoJXMpIGVycm9yOiAlZCIKK21zZ3N0ciAiRTU2MzogRXJyb3IgZGUgc3RhdCglcyk6ICVkIgorCisjOiBpZl9jc2NvcGUuYzo0MTQKK21zZ2lkICJFNTYzOiBzdGF0IGVycm9yIgorbXNnc3RyICJFNTYzOiBFcnJvciBkZSBzdGF0KCkiCisKKyM6IGlmX2NzY29wZS5jOjUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY0OiAlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIkU1NjQ6ICVzIG5vIOlzIHVuIGRpcmVjdG9yaSBvIHVuYSBiYXNlIGRlIGRhZGVzIGRlIGNzY29wZSB24GxpZGEiCisKKyM6IGlmX2NzY29wZS5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRlZCBjc2NvcGUgZGF0YWJhc2UgJXMiCittc2dzdHIgIlMnaGEgYWZlZ2l0IGxhIGJhc2UgZGUgZGFkZXMgY3Njb3BlICVzIgorCisjOiBpZl9jc2NvcGUuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlbGQiCittc2dzdHIgIkUyNjI6IEVycm9yIGVuIGxsZWdpciBsYSBjb25uZXhp8yBjc2NvcGUgJWxkIgorCisjOiBpZl9jc2NvcGUuYzo2ODYKK21zZ2lkICJFNTYxOiB1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAiRTU2MTogVGlwdXMgZGUgY2VyY2EgY3Njb3BlIGRlc2NvbmVndWRhIgorCisjOiBpZl9jc2NvcGUuYzo3MjgKK21zZ2lkICJFNTY2OiBDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiRTU2NjogTm8gcydoYW4gcG9ndXQgY3JlYXIgY2Fub25hZGVzIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6NzQ1Cittc2dpZCAiRTYyMjogQ291bGQgbm90IGZvcmsgZm9yIGNzY29wZSIKK21zZ3N0ciAiRTYyMjogTm8gcydoYSBwb2d1dCBiaWZ1cmNhciBlbCBwcm9j6XMgY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo4MzkgaWZfY3Njb3BlLmM6ODg5Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb24gZXhlYyBmYWlsZWQiCittc2dzdHIgImwnZXhlY3VjafMgZGUgY3NfY3JlYXRlX2Nvbm5lY3Rpb24gaGEgZmFsbGF0IgorCisjOiBpZl9jc2NvcGUuYzo4OTAKK21zZ2lkICJFNjIzOiBDb3VsZCBub3Qgc3Bhd24gY3Njb3BlIHByb2Nlc3MiCittc2dzdHIgIkU2MjM6IE5vIHMnaGEgcG9ndXQgZ2VuZXJhciB1biBwcm9j6XMgcGVyIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6OTAzCittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIHBlciB0b19mcCBoYSBmYWxsYXQiCisKKyM6IGlmX2NzY29wZS5jOjkwNQorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIGZyX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBwZXIgZnJfZnAgaGEgZmFsbGF0IgorCisjOiBpZl9jc2NvcGUuYzo5NDMKK21zZ2lkICJFNTY3OiBubyBjc2NvcGUgY29ubmVjdGlvbnMiCittc2dzdHIgIkU1Njc6IE5vIGhpIGhhbiBjb25uZXhpb25zIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MTAxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMjU5OiBubyBtYXRjaGVzIGZvdW5kIGZvciBjc2NvcGUgcXVlcnkgJXMgb2YgJXMiCittc2dzdHIgIkUyNTk6IENhcCByZXN1bHRhdCBwZXIgbGEgY29uc3VsdGEgY3Njb3BlICVzIGRlICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Njk6IGludmFsaWQgY3Njb3BlcXVpY2tmaXggZmxhZyAlYyBmb3IgJWMiCittc2dzdHIgIkU0Njk6IEVsIHNlbnlhbCBjc2NvcGVxdWlja2ZpeCAlYyBubyDpcyB24GxpZCBwZXIgJWMiCisKKyM6IGlmX2NzY29wZS5jOjExMzEKK21zZ2lkICJjc2NvcGUgY29tbWFuZHM6XG4iCittc2dzdHIgIm9yZHJlcyBkZSBjc2NvcGU6XG4iCisKKyM6IGlmX2NzY29wZS5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS01czogJS0zMHMgKFVzYWdlOiAlcykiCittc2dzdHIgIiUtNXM6ICUtMzBzIChGb3JtYSBkJ/pzOiAlcykiCisKKyM6IGlmX2NzY29wZS5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyNTogY2Fubm90IG9wZW4gY3Njb3BlIGRhdGFiYXNlOiAlcyIKK21zZ3N0ciAiRTYyNTogTm8gcydoYSBwb2d1dCBvYnJpciBsYSBiYXNlIGRlIGRhZGVzIGNzY29wZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNTAKK21zZ2lkICJFNjI2OiBjYW5ub3QgZ2V0IGNzY29wZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRTYyNjogTm8gcydoYSBwb2d1dCBvYnRlbmlyIGwnaW5mb3JtYWNp8yBkZSBsYSBiYXNlIGRlIGRhZGVzIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MTI3NQorbXNnaWQgIkU1Njg6IGR1cGxpY2F0ZSBjc2NvcGUgZGF0YWJhc2Ugbm90IGFkZGVkIgorbXNnc3RyICJFNTY4OiBObyBzJ2hhIGFmZWdpdCB1bmEgYmFzZSBkZSBkYWRlcyBjc2NvcGUgZHVwbGljYWRhIgorCisjOiBpZl9jc2NvcGUuYzoxMjg2Cittc2dpZCAiRTU2OTogbWF4aW11bSBudW1iZXIgb2YgY3Njb3BlIGNvbm5lY3Rpb25zIHJlYWNoZWQiCittc2dzdHIgIkU1Njk6IFMnaGEgYXNzb2xpdCBlbCBt4HhpbSBub21icmUgZGUgY29ubmV4aW9ucyBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjE0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiBObyBzJ2hhIHRyb2JhdCBsYSBjb25uZXhp8yBjc2NvcGUgJXMiCisKKyM6IGlmX2NzY29wZS5jOjE0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gJXMgY2xvc2VkIgorbXNnc3RyICJzJ2hhIHRhbmNhdCBsYSBjb25uZXhp8yBjc2NvcGUgJXMiCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTU3NgorbXNnaWQgIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJFNTcwOiBFcnJvciBmYXRhbCBhIGNzX21hbmFnZV9tYXRjaGVzIgorCisjOiBpZl9jc2NvcGUuYzoxODM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzIgorbXNnc3RyICJFdGlxdWV0YSBjc2NvcGU6ICVzIgorCisjOiBpZl9jc2NvcGUuYzoxODQwCittc2dpZCAiIgorIlxuIgorIiAgICMgICBsaW5lIgorbXNnc3RyICJcbiAgICMgICBs7W5pYSIKKworIzogaWZfY3Njb3BlLmM6MTg0MgorbXNnaWQgImZpbGVuYW1lIC8gY29udGV4dCAvIGxpbmVcbiIKK21zZ3N0ciAiZml0eGVyIC8gY29udGV4dCAvIGztbmlhXG4iCisKKyM6IGlmX2NzY29wZS5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwOTogQ3Njb3BlIGVycm9yOiAlcyIKK21zZ3N0ciAiRTYwOTogRXJyb3IgZGUgY3Njb3BlOiAlcyIKKworIzogaWZfY3Njb3BlLmM6MjE1NQorbXNnaWQgIkFsbCBjc2NvcGUgZGF0YWJhc2VzIHJlc2V0IgorbXNnc3RyICJTJ2hhbiByZWluaWNpYXQgdG90ZXMgbGVzIGJhc2VzIGRlIGRhZGVzIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MjIyMworbXNnaWQgIm5vIGNzY29wZSBjb25uZWN0aW9uc1xuIgorbXNnc3RyICJubyBoaSBoYSBjb25uZXhpb25zIGNzY29wZVxuIgorCisjOiBpZl9jc2NvcGUuYzoyMjI3Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAgYmFzZSBkZSBkYWRlcyAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4IGQndWJpY2FjafNcbiIKKworIzogaWZfcHl0aG9uLmM6Mzk0Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIkUyNjM6IEFxdWVzdGEgb3JkcmUgZXN04CBkZXNoYWJpbGl0YWRhLCBubyBzJ2hhIHBvZ3V0IGNhcnJlZ2FyIFB5dGhvbi4iCisKKyM6IGlmX3B5dGhvbi5jOjU5NgorbXNnaWQgImNhbid0IGRlbGV0ZSBPdXRwdXRPYmplY3QgYXR0cmlidXRlcyIKK21zZ3N0ciAibm8gcydoYW4gcG9ndXQgZWxpbWluYXIgZWxzIGF0cmlidXRzIGRlIGwnT3V0cHV0T2JqZWN0IgorCisjOiBpZl9weXRob24uYzo2MDMKK21zZ2lkICJzb2Z0c3BhY2UgbXVzdCBiZSBhbiBpbnRlZ2VyIgorbXNnc3RyICInc29mdHNwYWNlJyBoYSBkZSBzZXIgdW4gbm9tYnJlIGVudGVyIgorCisjOiBpZl9weXRob24uYzo2MTEKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAibCdhdHJpYnV0IG5vIOlzIHbgbGlkIgorCisjOiBpZl9weXRob24uYzo2NTAgaWZfcHl0aG9uLmM6NjY0Cittc2dpZCAid3JpdGVsaW5lcygpIHJlcXVpcmVzIGxpc3Qgb2Ygc3RyaW5ncyIKK21zZ3N0ciAibGEgZnVuY2nzIHdyaXRlbGluZXMoKSByZXF1ZXJlaXggdW5hIGxsaXN0YSBkZSBjYWRlbmVzIgorCisjOiBpZl9weXRob24uYzo3OTAKK21zZ2lkICJFMjY0OiBQeXRob246IEVycm9yIGluaXRpYWxpc2luZyBJL08gb2JqZWN0cyIKK21zZ3N0ciAiRTI2NDogUHl0aG9uOiBFcnJvciBlbiBpbmljaWFsaXR6YXIgZWxzIG9iamVjdGVzIGQnRS9TIgorCisjOiBpZl9weXRob24uYzo5NzUgaWZfdGNsLmM6MTQwMgorbXNnaWQgImludmFsaWQgZXhwcmVzc2lvbiIKK21zZ3N0ciAibCdleHByZXNzafMgbm8g6XMgduBsaWRhIgorCisjOiBpZl9weXRob24uYzo5ODkgaWZfdGNsLmM6MTQwNworbXNnaWQgImV4cHJlc3Npb25zIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAibm8gcydoYSBjb21waWxhdCBzdXBvcnQgcGVyIGV4cHJlc3Npb25zIgorCisjOiBpZl9weXRob24uYzoxMDAyCittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAiaW50ZW50IGRlIHJlZmVy6G5jaWEgYSB1biBidWZmZXIgZWxpbWluYXQiCisKKyM6IGlmX3B5dGhvbi5jOjEwMTcgaWZfcHl0aG9uLmM6MTA1OCBpZl9weXRob24uYzoxMTIyIGlmX3RjbC5jOjEyMTQKK21zZ2lkICJsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UiCittc2dzdHIgIm5vbWJyZSBkZSBs7W5pYSBmb3JhIGQnYWJhc3QiCisKKyM6IGlmX3B5dGhvbi5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IgorbXNnc3RyICI8b2JqZWN0ZSBidWZmZXIgKGVsaW1pbmF0KSBhICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxMzQ4IGlmX3RjbC5jOjgzNgorbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICJub20gZGUgbWFyY2Egbm8gduBsaWQiCisKKyM6IGlmX3B5dGhvbi5jOjE2MjMKK21zZ2lkICJubyBzdWNoIGJ1ZmZlciIKK21zZ3N0ciAibm8gZXhpc3RlaXggdGFsIGJ1ZmZlciIKKworIzogaWZfcHl0aG9uLmM6MTcxMQorbXNnaWQgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCB3aW5kb3ciCittc2dzdHIgImludGVudCBkZSByZWZlcmlyLXNlIGEgdW5hIGZpbmVzdHJhIGVsaW1pbmFkYSIKKworIzogaWZfcHl0aG9uLmM6MTc1NgorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXRyaWJ1dCBkZSBub23pcyBsZWN0dXJhIgorCisjOiBpZl9weXRob24uYzoxNzY5Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICJwb3NpY2nzIGRlbCBjdXJzb3IgZm9yYSBkZWwgYnVmZmVyIgorCisjOiBpZl9weXRob24uYzoxODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0IChkZWxldGVkKSBhdCAlLjhsWD4iCittc2dzdHIgIjxvYmplY3RlIGZpbmVzdHJhIChlbGltaW5hdCkgYSAlLjhsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjE4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKHVua25vd24pIGF0ICUuOGxYPiIKK21zZ3N0ciAiPG9iamVjdGUgZmluZXN0cmEgKGRlc2NvbmVndXQpIGEgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODYwCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8ZmluZXN0cmEgJWQ+IgorCisjOiBpZl9weXRob24uYzoxOTM2Cittc2dpZCAibm8gc3VjaCB3aW5kb3ciCittc2dzdHIgIm5vIGV4aXN0ZWl4IHRhbCBmaW5lc3RyYSIKKworIzogaWZfcHl0aG9uLmM6MjE5MyBpZl9weXRob24uYzoyMjI4IGlmX3B5dGhvbi5jOjIyNzggaWZfcHl0aG9uLmM6MjM0NgorIzogaWZfcHl0aG9uLmM6MjQ2NiBpZl9weXRob24uYzoyNTE4IGlmX3RjbC5jOjY4NCBpZl90Y2wuYzo3MjkgaWZfdGNsLmM6ODAzCisjOiBpZl90Y2wuYzo4NzMgaWZfdGNsLmM6MTk5OAorbXNnaWQgImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZGVzYXIgbCdpbmZvcm1hY2nzIGRlIGRlc2ZlciIKKworIzogaWZfcHl0aG9uLmM6MjE5NSBpZl9weXRob24uYzoyMjg1IGlmX3B5dGhvbi5jOjIzNTcKK21zZ2lkICJjYW5ub3QgZGVsZXRlIGxpbmUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNib3JyYXIgbGEgbO1uaWEiCisKKyM6IGlmX3B5dGhvbi5jOjIyMzAgaWZfcHl0aG9uLmM6MjM3MyBpZl90Y2wuYzo2OTAgaWZfdGNsLmM6MjAyMAorbXNnaWQgImNhbm5vdCByZXBsYWNlIGxpbmUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgc3Vic3RpdHVpciBsYSBs7W5pYSIKKworIzogaWZfcHl0aG9uLmM6MjM4OSBpZl9weXRob24uYzoyNDY4IGlmX3B5dGhvbi5jOjI1MjYKK21zZ2lkICJjYW5ub3QgaW5zZXJ0IGxpbmUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgaW5zZXJpciBsYSBs7W5pYSIKKworIzogaWZfcHl0aG9uLmM6MjYzMAorbXNnaWQgInN0cmluZyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAibGEgY2FkZW5hIG5vIHBvdCBjb250ZW5pciBzYWx0cyBkZSBs7W5pYSIKKworIzogaWZfcnVieS5jOjM5NgorbXNnaWQgIiIKKyJFMjY2OiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUnVieSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJFMjY2OiBPcmRyZSBkZXNoYWJpbGl0YWRhLCBubyBzJ2hhIHBvZ3V0IGNhcnJlZ2FyIGxhIGJpYmxpb3RlY2EgUnVieS4iCisKKyM6IGlmX3J1YnkuYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIKK21zZ3N0ciAiRTI3MzogZXN0YXQgZGUgbG9uZ2ptcCBkZXNjb25lZ3V0ICVkIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIkNvbW11dGEgaW1wbGVtZW50YWNp8y9kZWZpbmljafMiCisKKyM6IGlmX3NuaWZmLmM6NjgKK21zZ2lkICJTaG93IGJhc2UgY2xhc3Mgb2YiCittc2dzdHIgIk1vc3RyYSBsYSBjbGFzc2UgYmFzZSBkZSIKKworIzogaWZfc25pZmYuYzo2OQorbXNnaWQgIlNob3cgb3ZlcnJpZGRlbiBtZW1iZXIgZnVuY3Rpb24iCittc2dzdHIgIk1vc3RyYSBlbCBtZW1icmUgZGUgbGEgZnVuY2nzIGludmFsaWRhdCIKKworIzogaWZfc25pZmYuYzo3MAorbXNnaWQgIlJldHJpZXZlIGZyb20gZmlsZSIKK21zZ3N0ciAiT2J0ZW5pciBkJ3VuIGZpdHhlciIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAiT2J0ZW5pciBkJ3VuIHByb2plY3RlIgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIk9idGVuaXIgZGUgdG90cyBlbHMgcHJvamVjdGVzIgorCisjOiBpZl9zbmlmZi5jOjc0Cittc2dpZCAiUmV0cmlldmUiCittc2dzdHIgIk9idGVuaXIiCisKKyM6IGlmX3NuaWZmLmM6NzUKK21zZ2lkICJTaG93IHNvdXJjZSBvZiIKK21zZ3N0ciAiTW9zdHJhIGVsIGNvZGkgZm9udCBkZSIKKworIzogaWZfc25pZmYuYzo3NgorbXNnaWQgIkZpbmQgc3ltYm9sIgorbXNnc3RyICJDZXJjYSB1biBz7W1ib2wiCisKKyM6IGlmX3NuaWZmLmM6NzcKK21zZ2lkICJCcm93c2UgY2xhc3MiCittc2dzdHIgIkV4cGxvcmEgbGVzIGNsYXNzZXMiCisKKyM6IGlmX3NuaWZmLmM6NzgKK21zZ2lkICJTaG93IGNsYXNzIGluIGhpZXJhcmNoeSIKK21zZ3N0ciAiTW9zdHJhIGxhIGplcmFycXVpYSBkZSBjbGFzc2VzIgorCisjOiBpZl9zbmlmZi5jOjc5Cittc2dpZCAiU2hvdyBjbGFzcyBpbiByZXN0cmljdGVkIGhpZXJhcmNoeSIKK21zZ3N0ciAiTW9zdHJhIGxhIGplcmFycXVpYSBkZSBjbGFzc2VzIHJlc3RyaW5naWRhIgorCisjOiBpZl9zbmlmZi5jOjgwCittc2dpZCAiWHJlZiByZWZlcnMgdG8iCittc2dzdHIgIlhyZWYgZXMgcmVmZXJlaXggYSIKKworIzogaWZfc25pZmYuYzo4MQorbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCittc2dzdHIgIlhyZWYgcmVmZXJlbmNpYWRhIHBlciIKKworIzogaWZfc25pZmYuYzo4MgorbXNnaWQgIlhyZWYgaGFzIGEiCittc2dzdHIgIlhyZWYgdOkgdW4iCisKKyM6IGlmX3NuaWZmLmM6ODMKK21zZ2lkICJYcmVmIHVzZWQgYnkiCittc2dzdHIgIlhyZWYgdXNhZGEgcGVyIgorCisjOiBpZl9zbmlmZi5jOjg0Cittc2dpZCAiU2hvdyBkb2N1IG9mIgorbXNnc3RyICJNb3N0cmEgZG9jdSBkZSIKKworIzogaWZfc25pZmYuYzo4NQorbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgorbXNnc3RyICJHZW5lcmEgZG9jdSBwZXIiCisKKyM6IGlmX3NuaWZmLmM6OTcKK21zZ2lkICIiCisiQ2Fubm90IGNvbm5lY3QgdG8gU05pRkYrLiBDaGVjayBlbnZpcm9ubWVudCAoc25pZmZlbWFjcyBtdXN0IGJlIGZvdW5kIGluICIKKyIkUEFUSCkuXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY29ubmVjdGFyIGFtYiBTTmlGRisuIFJldmlzZXUgbCdlbnRvcm4gKHNuaWZmZW1hY3MgaGEgZCdlc3RhciBlbiBlbCAkUEFUSCkuXG4iCisKKyM6IGlmX3NuaWZmLmM6NDI1Cittc2dpZCAiRTI3NDogU25pZmY6IEVycm9yIGR1cmluZyByZWFkLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIkUyNzQ6IFNuaWZmOiBFcnJvciBkZSBsZWN0dXJhLiBEZXNjb25uZWN0YXQiCisKKyM6IGlmX3NuaWZmLmM6NTUzCittc2dpZCAiU05pRkYrIGlzIGN1cnJlbnRseSAiCittc2dzdHIgIlNOaUZGKyAiCisKKyM6IGlmX3NuaWZmLmM6NTU1Cittc2dpZCAibm90ICIKK21zZ3N0ciAibm8gIgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAiZXN04CBjb25uZWN0YXQiCisKKyM6IGlmX3NuaWZmLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzU6IFVua25vd24gU05pRkYrIHJlcXVlc3Q6ICVzIgorbXNnc3RyICJFMjc1OiBQZXRpY2nzIFNOaUZGKyBkZXNjb25lZ3VkYTogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IEVycm9yIGVuIGNvbm5lY3RhciBhIFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDA5Cittc2dpZCAiRTI3ODogU05pRkYrIG5vdCBjb25uZWN0ZWQiCittc2dzdHIgIkUyNzg6IFNOaUZGKyBubyBjb25uZWN0YXQiCisKKyM6IGlmX3NuaWZmLmM6MTAxOAorbXNnaWQgIkUyNzk6IE5vdCBhIFNOaUZGKyBidWZmZXIiCittc2dzdHIgIkUyNzk6IE5vIOlzIHVuIGJ1ZmZlciBTTmlGRisiCisKKyM6IGlmX3NuaWZmLmM6MTA4MworbXNnaWQgIlNuaWZmOiBFcnJvciBkdXJpbmcgd3JpdGUuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiU25pZmY6IEVycm9yIGQnZXNjcmlwdHVyYS4gRGVzY29ubmVjdGF0IgorCisjOiBpZl90Y2wuYzo0MTgKK21zZ2lkICJpbnZhbGlkIGJ1ZmZlciBudW1iZXIiCittc2dzdHIgIm5vbWJyZSBkZSBidWZmZXIgbm8gduBsaWQiCisKKyM6IGlmX3RjbC5jOjQ2NCBpZl90Y2wuYzo5MzEgaWZfdGNsLmM6MTExMAorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIm5vIGltcGxlbWVudGF0IChlbmNhcmEpIgorCisjOiBpZl90Y2wuYzo1MDEKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAib3BjafMgZGVzY29uZWd1ZGEiCisKKyMuID8/PworIzogaWZfdGNsLmM6Nzc0Cittc2dpZCAiY2Fubm90IHNldCBsaW5lKHMpIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzdGFibGlyIGVsIG5vbWJyZSBkZSBs7W5pZXMiCisKKyM6IGlmX3RjbC5jOjg0NQorbXNnaWQgIm1hcmsgbm90IHNldCIKK21zZ3N0ciAibWFyY2Egbm8gZXN0YWJsZXJ0YSIKKworIzogaWZfdGNsLmM6ODUxIGlmX3RjbC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicm93ICVkIGNvbHVtbiAlZCIKK21zZ3N0ciAiZmlsYSAlZCBjb2x1bW5hICVkIgorCisjOiBpZl90Y2wuYzo4ODEKK21zZ2lkICJjYW5ub3QgaW5zZXJ0L2FwcGVuZCBsaW5lIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGluc2VyaXIvYWZlZ2lyIGxhIGztbmlhIgorCisjOiBpZl90Y2wuYzoxMjY4Cittc2dpZCAidW5rbm93biBmbGFnOiAiCittc2dzdHIgInNlbnlhbCBkZXNjb25lZ3V0OiAiCisKKyM6IGlmX3RjbC5jOjEzMzgKK21zZ2lkICJ1bmtub3duIHZpbU9wdGlvbiIKK21zZ3N0ciAidmltT3B0aW9uIGRlc2NvbmVndWRhIgorCisjOiBpZl90Y2wuYzoxNDIzCittc2dpZCAia2V5Ym9hcmQgaW50ZXJydXB0IgorbXNnc3RyICJpbnRlcnJ1cGNp8yBkZSB0ZWNsYXQiCisKKyM6IGlmX3RjbC5jOjE0MjgKK21zZ2lkICJ2aW0gZXJyb3IiCittc2dzdHIgImVycm9yIGRlIHZpbSIKKworIzogaWZfdGNsLmM6MTQ3MQorbXNnaWQgImNhbm5vdCBjcmVhdGUgYnVmZmVyL3dpbmRvdyBjb21tYW5kOiBvYmplY3QgaXMgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBsJ29yZHJlIGRlIGJ1ZmZlci9maW5lc3RyYTogbCdvYmplY3RlIGVzdOAgc2lndWVudCBlbGltaW5hdCIKKworIzogaWZfdGNsLmM6MTU0NQorI34gbXNnaWQgIiIKKyN+ICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyBpcyBhbHJlYWR5IGJlaW5nIGRlbGV0ZWQiCisjfiBtc2dzdHIgIiIKKworIy4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgRmFtb3VzIGxhc3Qgd29yZD8KKyM6IGlmX3RjbC5jOjE1NjIKK21zZ2lkICIiCisiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IGNvcnJ1cHQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0uIgorIm9yZyIKK21zZ3N0ciAiRTI4MDogRVJST1IgRkFUQUwgREUgVENMOiBsbGlzdGEgZGUgcmVmZXLobmNpZXMgY29ycnVwdGEhPyBDb211bmlxdWV1LWhvIGEgdmltLWRldkB2aW0ub3JnLiIKKworIzogaWZfdGNsLmM6MTU2MworI34gbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCisjfiBtc2dzdHIgIiIKKworIzogaWZfdGNsLmM6MTcyNAorbXNnaWQgIiIKKyJFNTcxOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgVGNsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIkU1NzE6IEFxdWVzdGEgb3JkcmUgZXN04CBkZXNoYWJpbGl0YWRhOiBObyBzJ2hhIHBvZ3V0IGNhcnJlZ2FyIGxhIGxsaWJyZXJpYSBUY2wuIgorCisjOiBpZl90Y2wuYzoxODg2Cittc2dpZCAiIgorIkUyODE6IFRDTCBFUlJPUjogZXhpdCBjb2RlIGlzIG5vdCBpbnQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIgorbXNnc3RyICJFMjgxOiBFUlJPUiBERSBUQ0w6IGVsIGNvZGkgZGUgcmV0b3JuIG5vIOlzIHVuIGVudGVyIT8gQ29tdW5pcXVldS1obyBhIHZpbS1kZXZAdmltLm9yZy4iCisKKyM6IGlmX3RjbC5jOjIwMDYKK21zZ2lkICJjYW5ub3QgZ2V0IGxpbmUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2J0ZW5pciBsYSBs7W5pYSIKKworIzogaWZfeGNtZHNydi5jOjIxNQorbXNnaWQgIlVuYWJsZSB0byByZWdpc3RlciBhIGNvbW1hbmQgc2VydmVyIG5hbWUiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgcmVnaXN0cmFyIHVuIG5vbSBkZSBzZXJ2aWRvciBkJ29yZHJlcyIKKworIzogaWZfeGNtZHNydi5jOjQ2NQorbXNnaWQgIkUyNDg6IEZhaWxlZCB0byBzZW5kIGNvbW1hbmQgdG8gdGhlIGRlc3RpbmF0aW9uIHByb2dyYW0iCittc2dzdHIgIkUyNDg6IE5vIHMnaGEgcG9ndXQgZW52aWFyIGwnb3JkcmUgYWwgcHJvZ3JhbWEgZGVzdGluYXRhcmkiCisKKyM6IGlmX3hjbWRzcnYuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3MzogSW52YWxpZCBzZXJ2ZXIgaWQgdXNlZDogJXMiCittc2dzdHIgIkU1NzM6IFMnaGEgdXNhdCB1bmEgSUQgZGUgc2Vydmlkb3Igbm8gduBsaWRhOiAlcyIKKworIzogaWZfeGNtZHNydi5jOjEwOTgKK21zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCittc2dzdHIgIkUyNTE6IEVsIHJlZ2lzdHJlIGRlIGwnaW5zdOBuY2lhIGRlIFZJTSBlc3TgIG1hbCBmb3JtYXQuIFMnaGEgZXNib3JyYXQhIgorCisjOiBtYWluLmM6NjAKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiTCdvcGNp8yDpcyBkZXNjb25lZ3VkYSIKKworIzogbWFpbi5jOjYyCittc2dpZCAiVG9vIG1hbnkgZWRpdCBhcmd1bWVudHMiCittc2dzdHIgIk1hc3NhIGFyZ3VtZW50cyBkJ2VkaWNp8yIKKworIzogbWFpbi5jOjY0Cittc2dpZCAiQXJndW1lbnQgbWlzc2luZyBhZnRlciIKK21zZ3N0ciAiRmFsdGEgdW4gYXJndW1lbnQgZGVzcHLpcyBkZSIKKworIzogbWFpbi5jOjY2Cittc2dpZCAiR2FyYmFnZSBhZnRlciBvcHRpb24iCittc2dzdHIgIlBvcnF1ZXJpYSBkZXNwculzIGRlIGwnb3BjafMiCisKKyM6IG1haW4uYzo2OAorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiwgXCItYyBjb21tYW5kXCIgb3IgXCItLWNtZCBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICJNYXNzYSBhcmd1bWVudHMgXCIrb3JkcmVcIiwgXCItYyBvcmRyZVwiIG8gXCItLWNtZCBvcmRyZVwiIgorCisjOiBtYWluLmM6NzAKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IGZvciIKK21zZ3N0ciAiQXJndW1lbnQgbm8gduBsaWQgcGVyIgorCisjOiBtYWluLmM6NDY5Cittc2dpZCAiVGhpcyBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSBkaWZmIGZlYXR1cmUuIgorbXNnc3RyICJBcXVlc3QgVmltIG5vIGhhIGVzdGF0IGNvbXBpbGF0IGFtYiBzdXBvcnQgcGVyIGRpZmYuIgorCisjOiBtYWluLmM6OTI4Cittc2dpZCAiQXR0ZW1wdCB0byBvcGVuIHNjcmlwdCBmaWxlIGFnYWluOiBcIiIKK21zZ3N0ciAiUmVpbnRlbnQgZCdvYnJpciBsJ3NjcmlwdDogXCIiCisKKyM6IG1haW4uYzo5MzIgbWFpbi5jOjkzOSBtYWluLmM6OTgzIG1lbWxpbmUuYzozNjgyIG1lbWxpbmUuYzozNjg2Cittc2dpZCAiXCJcbiIKK21zZ3N0ciAiXCJcbiIKKworIzogbWFpbi5jOjkzNworbXNnaWQgIkNhbm5vdCBvcGVuIGZvciByZWFkaW5nOiBcIiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciBhbWIgcGVybe1zIGRlIGxlY3R1cmE6IFwiIgorCisjOiBtYWluLmM6OTgxCittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9icmlyIHBlciBkZXNhci1oaSBsJ2V4aWRhIGRlIGwnc2NyaXB0OiBcIiIKKworIzogbWFpbi5jOjExMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmlsZXMgdG8gZWRpdFxuIgorbXNnc3RyICIlZCBmaXR4ZXJzIHBlciBlZGl0YXJcbiIKKworIzogbWFpbi5jOjEyMDUKK21zZ2lkICJWaW06IFdhcm5pbmc6IE91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IEF0ZW5jafM6IExhIHNvcnRpZGEgbm8gZXN04CBjb25uZWN0YWRhIGEgdW4gdGVybWluYWxcbiIKKworIzogbWFpbi5jOjEyMDcKK21zZ2lkICJWaW06IFdhcm5pbmc6IElucHV0IGlzIG5vdCBmcm9tIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiBBdGVuY2nzOiBMJ2VudHJhZGEgbm8gZXN04CBjb25uZWN0YWRhIGEgdW4gdGVybWluYWxcbiIKKworIy4ganVzdCBpbiBjYXNlLi4KKyM6IG1haW4uYzoxMjY5Cittc2dpZCAicHJlLXZpbXJjIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAibO1uaWEgZCdvcmRyZXMgcHJlLXZpbXJjIgorCisjOiBtYWluLmM6MTMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgyOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTI4MjogTm8gcydoYSBwb2d1dCBsbGVnaXIgXCIlc1wiIgorCisjOiBtYWluLmM6MjM0NgorbXNnaWQgIiIKKyJcbiIKKyJNb3JlIGluZm8gd2l0aDogXCJ2aW0gLWhcIlxuIgorbXNnc3RyICJcbk3pcyBpbmZvcm1hY2nzIGFtYjogXCJ2aW0gLWhcIlxuIgorCisjOiBtYWluLmM6MjM3OQorbXNnaWQgIltmaWxlIC4uXSAgICAgICBlZGl0IHNwZWNpZmllZCBmaWxlKHMpIgorbXNnc3RyICJbZml0eGVyIC4uLl0gICAgZWRpdGEgZWwocykgZml0eGVyKHMpIGVzcGVjaWZpY2F0KHMpIgorCisjOiBtYWluLmM6MjM4MAorbXNnaWQgIi0gICAgICAgICAgICAgICByZWFkIHRleHQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiLSAgICAgICAgICAgICAgIGVkaXRhIGVsIHRleHQgZGUgbCdlbnRyYWRhIGVzdOBuZGFyZCIKKworIzogbWFpbi5jOjIzODEKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCBldGlxdWV0YSAgICAgZWRpdGEgZWwgZml0eGVyIG9uIGhpIGhhIGwnZXRpcXVldGEiCisKKyM6IG1haW4uYzoyMzgzCittc2dpZCAiLXEgW2Vycm9yZmlsZV0gIGVkaXQgZmlsZSB3aXRoIGZpcnN0IGVycm9yIgorbXNnc3RyICItcSBbZnR4ZXJyb3JzXSAgZWRpdGEgZWwgZml0eGVyIG9uIGhpIGhhIGVsIHByaW1lciBlcnJvciIKKworIzogbWFpbi5jOjIzOTIKK21zZ2lkICIiCisiXG4iCisiXG4iCisidXNhZ2U6IgorbXNnc3RyICJcblxuICD6czoiCisKKyM6IG1haW4uYzoyMzk1Cittc2dpZCAiIHZpbSBbYXJndW1lbnRzXSAiCittc2dzdHIgIiB2aW0gW2FyZ3VtZW50c10gIgorCisjOiBtYWluLmM6MjM5OQorbXNnaWQgIiIKKyJcbiIKKyIgICBvcjoiCittc2dzdHIgIlxubyBi6ToiCisKKyM6IG1haW4uYzoyNDAyCittc2dpZCAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50czpcbiIKK21zZ3N0ciAiXG5cbkFyZ3VtZW50czpcbiIKKworIzogbWFpbi5jOjI0MDMKK21zZ2lkICItLVx0XHRcdE9ubHkgZmlsZSBuYW1lcyBhZnRlciB0aGlzIgorbXNnc3RyICItLVx0XHRcdERlc3By6XMgZCdhaXjyIG5vbelzIG5vbXMgZGUgZml0eGVycyIKKworIzogbWFpbi5jOjI0MDUKK21zZ2lkICItLWxpdGVyYWxcdFx0RG9uJ3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiLS1saXRlcmFsXHRcdE5vIGV4cGFuZGVpeCBwYXRyb25zIGRlIG5vbXMiCisKKyM6IG1haW4uYzoyNDA4Cittc2dpZCAiLXJlZ2lzdGVyXHRcdFJlZ2lzdGVyIHRoaXMgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItcmVnaXN0ZXJcdFx0UmVnaXN0cmEgYXF1ZXN0IGd2aW0gcGVyIE9MRSIKKworIzogbWFpbi5jOjI0MDkKK21zZ2lkICItdW5yZWdpc3Rlclx0XHRVbnJlZ2lzdGVyIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXVucmVnaXN0ZXJcdFx0RGVzcmVnaXN0cmEgYXF1ZXN0IGd2aW0gcGVyIE9MRSIKKworIzogbWFpbi5jOjI0MTIKK21zZ2lkICItZ1x0XHRcdFJ1biB1c2luZyBHVUkgKGxpa2UgXCJndmltXCIpIgorbXNnc3RyICItZ1x0XHRcdFVzYSB1bmEgaW50ZXJm7WNpZSBncuBmaWNhIChjb20gXCJndmltXCIpIgorCisjOiBtYWluLmM6MjQxMworbXNnaWQgIi1mICBvciAgLS1ub2ZvcmtcdEZvcmVncm91bmQ6IERvbid0IGZvcmsgd2hlbiBzdGFydGluZyBHVUkiCittc2dzdHIgIi1mICBvICAgLS1ub2ZvcmtcdE5vIGNyZWEgdW4gcHJvY+lzIG5vdSBwZXIgbGEgR1VJIgorCisjOiBtYWluLmM6MjQxNQorbXNnaWQgIi12XHRcdFx0VmkgbW9kZSAobGlrZSBcInZpXCIpIgorbXNnc3RyICItdlx0XHRcdE1vZGUgVmkgKGNvbSBcInZpXCIpIgorCisjOiBtYWluLmM6MjQxNgorbXNnaWQgIi1lXHRcdFx0RXggbW9kZSAobGlrZSBcImV4XCIpIgorbXNnc3RyICItZVx0XHRcdE1vZGUgRXggKGNvbSBcImV4XCIpIgorCisjOiBtYWluLmM6MjQxNworbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHRNb2RlIHNpbGVuY2nzcyAobm9t6XMgcGVyIFwiZXhcIikiCisKKyM6IG1haW4uYzoyNDE5Cittc2dpZCAiLWRcdFx0XHREaWZmIG1vZGUgKGxpa2UgXCJ2aW1kaWZmXCIpIgorbXNnc3RyICItZFx0XHRcdE1vZGUgZGlmZiAoY29tIFwidmltZGlmZlwiKSIKKworIzogbWFpbi5jOjI0MjEKK21zZ2lkICIteVx0XHRcdEVhc3kgbW9kZSAobGlrZSBcImV2aW1cIiwgbW9kZWxlc3MpIgorbXNnc3RyICIteVx0XHRcdE1vZGUgc2VuemlsbCAoY29tIFwiZXZpbVwiLCBzZW5zZSBtb2RlcykiCisKKyM6IG1haW4uYzoyNDIyCittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHRNb2RlIG5vbelzIGxlY3R1cmEgKGNvbSBcInZpZXdcIikiCisKKyM6IG1haW4uYzoyNDIzCittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdE1vZGUgcmVzdHJpbmdpdCAoY29tIFwicnZpbSkiCisKKyM6IG1haW4uYzoyNDI0Cittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHRObyBwZXJtZXQgbW9kaWZpY2FyIChlc2NyaXVyZSkgZml0eGVycyIKKworIzogbWFpbi5jOjI0MjUKK21zZ2lkICItTVx0XHRcdE1vZGlmaWNhdGlvbnMgaW4gdGV4dCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLU1cdFx0XHRObyBwZXJtZXQgbW9kaWZpY2FyIGVsIHRleHQiCisKKyM6IG1haW4uYzoyNDI2Cittc2dpZCAiLWJcdFx0XHRCaW5hcnkgbW9kZSIKK21zZ3N0ciAiLWJcdFx0XHRNb2RlIGJpbmFyaSIKKworIzogbWFpbi5jOjI0MjgKK21zZ2lkICItbFx0XHRcdExpc3AgbW9kZSIKK21zZ3N0ciAiLWxcdFx0XHRNb2RlIExpc3AiCisKKyM6IG1haW4uYzoyNDMwCittc2dpZCAiLUNcdFx0XHRDb21wYXRpYmxlIHdpdGggVmk6ICdjb21wYXRpYmxlJyIKK21zZ3N0ciAiLUNcdFx0XHRDb21wYXRpYmxlIGFtYiBWaSIKKworIzogbWFpbi5jOjI0MzEKK21zZ2lkICItTlx0XHRcdE5vdCBmdWxseSBWaSBjb21wYXRpYmxlOiAnbm9jb21wYXRpYmxlJyIKK21zZ3N0ciAiLU5cdFx0XHRObyBkZWwgdG90IGNvbXBhdGlibGUgYW1iIFZpIgorCisjOiBtYWluLmM6MjQzMgorbXNnaWQgIi1WW05dXHRcdFZlcmJvc2UgbGV2ZWwiCittc2dzdHIgIi1WW05dXHRcdE5pdmVsbCBkZSBsb3F1YWNpdGF0IgorCisjOiBtYWluLmM6MjQzMworbXNnaWQgIi1EXHRcdFx0RGVidWdnaW5nIG1vZGUiCittc2dzdHIgIi1EXHRcdFx0TW9kZSBkZSBkZXB1cmFjafMiCisKKyM6IG1haW4uYzoyNDM0Cittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHRObyB1c2EgZml0eGVycyBkJ2ludGVyY2FudmksIG5vbelzIG1lbfJyaWEiCisKKyM6IG1haW4uYzoyNDM1Cittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0TGxpc3RhIGVscyBmaXR4ZXJzIGQnaW50ZXJjYW52aSBpIHN1cnQiCisKKyM6IG1haW4uYzoyNDM2Cittc2dpZCAiLXIgKHdpdGggZmlsZSBuYW1lKVx0UmVjb3ZlciBjcmFzaGVkIHNlc3Npb24iCittc2dzdHIgIi1yIChhbWIgbm9tIGRlIGZpdHhlcikgIFJlY3VwZXJhIHVuYSBzZXNzafMgYWNjaWRlbnRhZGEiCisKKyM6IG1haW4uYzoyNDM3Cittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRcdElndWFsIHF1ZSAtciIKKworIzogbWFpbi5jOjI0MzkKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdFx0Tm8gb2JyZSB1bmEgZmluZXN0cmEgbm92YSBhbWIgbmV3Y2xpIgorCisjOiBtYWluLmM6MjQ0MAorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPGRpc3Bvc2l0aXU+XHRcdFVzYSA8ZGlzcG9zaXRpdT4gcGVyIGwnRS9TIgorCisjOiBtYWluLmM6MjQ0MworbXNnaWQgIi1BXHRcdFx0c3RhcnQgaW4gQXJhYmljIG1vZGUiCittc2dzdHIgIi1BXHRcdFx0Q29tZW7nYSBlbiBtb2RlIOByYWIiCisKKyM6IG1haW4uYzoyNDQ2Cittc2dpZCAiLUhcdFx0XHRTdGFydCBpbiBIZWJyZXcgbW9kZSIKK21zZ3N0ciAiLUhcdFx0XHRDb21lbudhIGVuIG1vZGUgaGVicmV1IgorCisjOiBtYWluLmM6MjQ0OQorbXNnaWQgIi1GXHRcdFx0U3RhcnQgaW4gRmFyc2kgbW9kZSIKK21zZ3N0ciAiLUZcdFx0XHQgQ29tZW7nYSBlbiBtb2RlIGZhcnNpIgorCisjOiBtYWluLmM6MjQ1MQorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW5hbD5cdERlZmluZWl4IGVsIHRpcHVzIGRlIHRlcm1pbmFsIgorCisjOiBtYWluLmM6MjQ1MgorbXNnaWQgIi11IDx2aW1yYz5cdFx0VXNlIDx2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLnZpbXJjIgorbXNnc3RyICItdSA8dmltcmM+XHRcdFVzYSA8dmltcmM+IGVuIGxsb2MgZGUgcXVhbHNldm9sIGFsdHJlIC52aW1yYyIKKworIzogbWFpbi5jOjI0NTQKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0VXNhIDxndmltcmM+IGVuIGxsb2MgZGUgcXVhbHNldm9sIGFsdHJlIC5ndmltcmMiCisKKyM6IG1haW4uYzoyNDU2Cittc2dpZCAiLS1ub3BsdWdpblx0XHREb24ndCBsb2FkIHBsdWdpbiBzY3JpcHRzIgorbXNnc3RyICItLW5vcGx1Z2luXHRcdE5vIGNhcnJlZ2EgY2FwIHBsdWdpbiIKKworIzogbWFpbi5jOjI0NTcKK21zZ2lkICItb1tOXVx0XHRPcGVuIE4gd2luZG93cyAoZGVmYXVsdDogb25lIGZvciBlYWNoIGZpbGUpIgorbXNnc3RyICItb1tOXVx0XHRPYnJlIE4gZmluZXN0cmVzIChwZXIgb21pc3Np8zogdW5hIHBlciBmaXR4ZXIpIgorCisjOiBtYWluLmM6MjQ1OAorbXNnaWQgIi1PW05dXHRcdExpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdENvbSAtbyBwZXLyIGFtYiBkaXZpc2lvbnMgdmVydGljYWxzIgorCisjOiBtYWluLmM6MjQ1OQorbXNnaWQgIitcdFx0XHRTdGFydCBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiK1x0XHRcdENvbWVu52EgYWwgZmluYWwgZGVsIGZpdHhlciIKKworIzogbWFpbi5jOjI0NjAKK21zZ2lkICIrPGxudW0+XHRcdFN0YXJ0IGF0IGxpbmUgPGxudW0+IgorbXNnc3RyICIrPGxu+m0+XHRcdENvbWVu52EgYSBsYSBs7W5pYSA8bG76bT4iCisKKyM6IG1haW4uYzoyNDYyCittc2dpZCAiLS1jbWQgPGNvbW1hbmQ+XHRFeGVjdXRlIDxjb21tYW5kPiBiZWZvcmUgbG9hZGluZyBhbnkgdmltcmMgZmlsZSIKK21zZ3N0ciAiLS1jbWQgPG9yZHJlPlx0RXhlY3V0YSA8b3JkcmU+IGFiYW5zIGRlIGxsZWdpciBlbHMgZml0eGVycyB2aW1yYyIKKworIzogbWFpbi5jOjI0NjQKK21zZ2lkICItYyA8Y29tbWFuZD5cdFx0RXhlY3V0ZSA8Y29tbWFuZD4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLWMgPG9yZHJlPlx0XHRFeGVjdXRhIDxvcmRyZT4gZGVzcHLpcyBkZSBjYXJyZWdhciBlbCBwcmltZXIgZml0eGVyIgorCisjOiBtYWluLmM6MjQ2NQorbXNnaWQgIi1TIDxzZXNzaW9uPlx0XHRTb3VyY2UgZmlsZSA8c2Vzc2lvbj4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLVMgPGZpdHhlcj5cdFx0RXZhbHVhIDxmaXR4ZXI+IHVuIGNvcCBjYXJyZWdhdCBlbCBwcmltZXIgZml0eGVyIgorCisjOiBtYWluLmM6MjQ2NgorbXNnaWQgIi1zIDxzY3JpcHRpbj5cdFJlYWQgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBmaWxlIDxzY3JpcHRpbj4iCittc2dzdHIgIi1zIDxzY3JpcHQ+XHRcdExsZWdlaXggb3JkcmVzIGRlbCBtb2RlIE5vcm1hbCBkZWwgZml0eGVyIDxzY3JpcHQ+IgorCisjOiBtYWluLmM6MjQ2NworbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDxzY3JpcHQ+XHRcdEFmZWdlaXggdG90ZXMgbGVzIG9yZHJlcyBleGVjdXRhZGVzIGFsIGZpdHhlciA8c2NyaXB0PiIKKworIzogbWFpbi5jOjI0NjgKK21zZ2lkICItVyA8c2NyaXB0b3V0Plx0V3JpdGUgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi1XIDxzY3JpcHQ+XHRcdEVzY3JpdSB0b3RlcyBsZXMgb3JkcmVzIGV4ZWN1dGFkZXMgYWwgZml0eGVyIDxzY3JpcHQ+IgorCisjOiBtYWluLmM6MjQ3MAorbXNnaWQgIi14XHRcdFx0RWRpdCBlbmNyeXB0ZWQgZmlsZXMiCittc2dzdHIgIi14XHRcdFx0RWRpdGEgZml0eGVycyBhbWIgeGlmcmF0IgorCisjOiBtYWluLmM6MjQ3NAorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0Q29ubmVjdCB2aW0gdG8gdGhpcyBwYXJ0aWN1bGFyIFgtc2VydmVyIgorbXNnc3RyICItZGlzcGxheSA8cGFudGFsbGE+XHRDb25uZWN0YSBlbCBWaW0gYSB1biBzZXJ2aWRvciBYIHBhcnRpY3VsYXIiCisKKyM6IG1haW4uYzoyNDc2Cittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHRObyBlcyBjb25uZWN0YSBhIGNhcCBzZXJ2aWRvciBYIgorCisjOiBtYWluLmM6MjQ3OQorbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgaWYgcG9zc2libGUiCittc2dzdHIgIi0tcmVtb3RlIDxmaXR4ZXJzPlx0RWRpdGEgPGZpdHhlcnM+IGVuIHVuIHNlcnZpZG9yIFZpbSwgc2kg6XMgcG9zc2libGUiCisKKyM6IG1haW4uYzoyNDgwCittc2dpZCAiLS1yZW1vdGUtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiLS1yZW1vdGUtc2lsZW50IDxmaXR4ZXJzPiAgSWd1YWwsIG5vIGVzIHF1ZWl4YSBzaSBubyBoaSBoYSBzZXJ2aWRvciIKKworIzogbWFpbi5jOjI0ODEKK21zZ2lkICIiCisiLS1yZW1vdGUtd2FpdCA8ZmlsZXM+ICBBcyAtLXJlbW90ZSBidXQgd2FpdCBmb3IgZmlsZXMgdG8gaGF2ZSBiZWVuIGVkaXRlZCIKK21zZ3N0ciAiLS1yZW1vdGUtd2FpdCA8Zml0eGVycz4gIENvbSAtLXJlbW90ZSwgcGVy8iBlc3BlcmEgcXVlIHMnZWRpdGluIGVscyBmaXR4ZXJzIgorCisjOiBtYWluLmM6MjQ4MgorbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0LXNpbGVudCA8ZmlsZXM+ICBTYW1lLCBkb24ndCBjb21wbGFpbiBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIiCittc2dzdHIgIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaXR4ZXJzPiAgSWd1YWwsIG5vIGVzIHF1ZWl4YSBzaSBubyBoaSBoYSBzZXJ2aWRvciIKKworIzogbWFpbi5jOjI0ODMKK21zZ2lkICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0U2VuZCA8a2V5cz4gdG8gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZS1zZW5kIDx0ZWNsZXM+ICBFbnZpYSA8dGVjbGVzPiBhIHVuIHNlcnZpZG9yIFZpbSBpIHN1cnQiCisKKyM6IG1haW4uYzoyNDg0Cittc2dpZCAiLS1yZW1vdGUtZXhwciA8ZXhwcj5cdEV2YWx1YXRlIDxleHByPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIHByaW50IHJlc3VsdCIKK21zZ3N0ciAiLS1yZW1vdGUtZXhwciA8ZXhwcj5cdEV2YXVsYSA8ZXhwcj4gZW4gdW4gc2Vydmlkb3IgVmltIGkgbW9zdHJhIGVsIHJlc3VsdGF0IgorCisjOiBtYWluLmM6MjQ4NQorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICItLXNlcnZlcmxpc3RcdFx0TGxpc3RhIGVscyBub21zIGRlbHMgc2Vydmlkb3JzIFZpbSBhY2Nlc3NpYmxlcyIKKworIzogbWFpbi5jOjI0ODYKK21zZ2lkICItLXNlcnZlcm5hbWUgPG5hbWU+XHRTZW5kIHRvL2JlY29tZSB0aGUgVmltIHNlcnZlciA8bmFtZT4iCittc2dzdHIgIi0tc2VydmVybmFtZSA8bm9tPlx0RW52aWEgYSBvIGVzIGNvbnZlcnRlaXggZW4gc2Vydmlkb3IgVmltIDxub20+IgorCisjOiBtYWluLmM6MjQ4OQorbXNnaWQgIi1pIDx2aW1pbmZvPlx0XHRVc2UgPHZpbWluZm8+IGluc3RlYWQgb2YgLnZpbWluZm8iCittc2dzdHIgIi1pIDx2aW1pbmZvPlx0XHRVc2EgPHZpbWluZm8+IGVuIGxsb2MgZGUgLnZpbWluZm8iCisKKyM6IG1haW4uYzoyNDkxCittc2dpZCAiLWggIG9yICAtLWhlbHBcdFByaW50IEhlbHAgKHRoaXMgbWVzc2FnZSkgYW5kIGV4aXQiCittc2dzdHIgIi1oICBvICAgLS1oZWxwXHRNb3N0cmEgYXF1ZXN0YSBhanVkYSBpIHN1cnQiCisKKyM6IG1haW4uYzoyNDkyCittc2dpZCAiLS12ZXJzaW9uXHRcdFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQiCittc2dzdHIgIi0tdmVyc2lvblx0XHRNb3N0cmEgaW5mb3JtYWNp8yBzb2JyZSBsYSB2ZXJzafMgaSBzdXJ0IgorCisjOiBtYWluLmM6MjQ5NgorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChNb3RpZiB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiXG5Bcmd1bWVudHMgcmVjb25lZ3V0cyBwZWwgZ3ZpbSAodmVyc2nzIE1vdGlmKTpcbiIKKworIzogbWFpbi5jOjI1MDAKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAobmVYdGF3IHZlcnNpb24pOlxuIgorbXNnc3RyICJcbkFyZ3VtZW50cyByZWNvbmVndXRzIHBlbCBndmltICh2ZXJzafMgbmVYdGF3PjpcbiIKKworIzogbWFpbi5jOjI1MDIKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoQXRoZW5hIHZlcnNpb24pOlxuIgorbXNnc3RyICJcbkFyZ3VtZW50cyByZWNvbmVndXRzIHBlbCBndmltICh2ZXJzafMgQXRoZW5hKTpcbiIKKworIzogbWFpbi5jOjI1MDYKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IgorbXNnc3RyICItZGlzcGxheSA8cGFudGFsbGE+XHRFeGVjdXRhIHZpbSBhIDxwYW50YWxsYT4iCisKKyM6IG1haW4uYzoyNTA3Cittc2dpZCAiLWljb25pY1x0XHRTdGFydCB2aW0gaWNvbmlmaWVkIgorbXNnc3RyICItaWNvbmljXHRcdENvbWVu52EgaWNvbmlmaWNhdCIKKworIzogbWFpbi5jOjI1MDkKK21zZ2lkICItbmFtZSA8bmFtZT5cdFx0VXNlIHJlc291cmNlIGFzIGlmIHZpbSB3YXMgPG5hbWU+IgorbXNnc3RyICItbmFtZSA8bm9tPlx0XHRVc2EgZWxzIHJlY3Vyc29zIGNvbSBzaSB2aW0gZvNzIDxub20+IgorCisjOiBtYWluLmM6MjUxMAorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAoTm8gaW1wbGVtZW50YXQpXG4iCisKKyM6IG1haW4uYzoyNTEyCittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8Y29sb3I+XHRVc2EgPGNvbG9yPiBwZWwgZm9ucyAodGFtYuk6IC1iZykiCisKKyM6IG1haW4uYzoyNTEzCittc2dpZCAiLWZvcmVncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIG5vcm1hbCB0ZXh0IChhbHNvOiAtZmcpIgorbXNnc3RyICItZm9yZWdyb3VuZCA8Y29sb3I+XHRVc2EgPGNvbG9yPiBwZWwgdGV4dCBub3JtYWwgKHRhbWLpOiAtZmcpIgorCisjOiBtYWluLmM6MjUxNCBtYWluLmM6MjUzNAorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPHRpcHVzPlx0VXNhIDx0aXB1cz4gcGVsIHRleHQgbm9ybWFsICh0YW1i6TogLWZuKSIKKworIzogbWFpbi5jOjI1MTUKK21zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCittc2dzdHIgIi1ib2xkZm9udCA8dGlwdXM+XHRVc2EgPHRpcHVzPiBwZWwgdGV4dCBlbiBuZWdyZXRhIgorCisjOiBtYWluLmM6MjUxNgorbXNnaWQgIi1pdGFsaWNmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgaXRhbGljIHRleHQiCittc2dzdHIgIi1pdGFsaWNmb250IDx0aXB1cz5cdFVzYSA8dGlwdXM+IHBlbCB0ZXh0IGVuIGN1cnNpdmEiCisKKyM6IG1haW4uYzoyNTE3IG1haW4uYzoyNTM1Cittc2dpZCAiLWdlb21ldHJ5IDxnZW9tPlx0VXNlIDxnZW9tPiBmb3IgaW5pdGlhbCBnZW9tZXRyeSAoYWxzbzogLWdlb20pIgorbXNnc3RyICItZ2VvbWV0cnkgPGdlb20+XHRVc2EgPGdlb20+IGNvbSBhIGdlb21ldHJpYSBpbmljaWFsICh0YW1i6TogLWdlb20pIgorCisjOiBtYWluLmM6MjUxOAorbXNnaWQgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHRVc2UgYSBib3JkZXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLWJ3KSIKK21zZ3N0ciAiLWJvcmRlcndpZHRoIDxhbXBsYWRhPlx0VXNhIHVuIG1hcmdlIGQnYW1wbGFkYSA8YW1wbGFkYT4gKHRhbWLpOiAtYncpIgorCisjOiBtYWluLmM6MjUxOQorbXNnaWQgIi1zY3JvbGxiYXJ3aWR0aCA8d2lkdGg+ICBVc2UgYSBzY3JvbGxiYXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLXN3KSIKK21zZ3N0ciAiLXNjcm9sbGJhcndpZHRoIDxhbXBsYWRhPiAgQW1wbGFkYSBkZSBsYSBiYXJyYSBkZSBkZXNwbGHnYW1lbnQgKHRhbWLpOiAtc3cpIgorCisjOiBtYWluLmM6MjUyMQorbXNnaWQgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHRVc2UgYSBtZW51IGJhciBoZWlnaHQgb2YgPGhlaWdodD4gKGFsc286IC1taCkiCittc2dzdHIgIi1tZW51aGVpZ2h0IDxhbOdhZGE+XHRBbOdhZGEgZGUgbGEgYmFycmEgZGUgbWVu+iAodGFtYuk6IC1taCkiCisKKyM6IG1haW4uYzoyNTIzIG1haW4uYzoyNTM2Cittc2dpZCAiLXJldmVyc2VcdFx0VXNlIHJldmVyc2UgdmlkZW8gKGFsc286IC1ydikiCittc2dzdHIgIi1yZXZlcnNlXHRcdFVzYSBlbCBtb2RlIGRlIHZpZGVvIGludmVycyAodGFtYuk6IC1ydikiCisKKyM6IG1haW4uYzoyNTI0Cittc2dpZCAiK3JldmVyc2VcdFx0RG9uJ3QgdXNlIHJldmVyc2UgdmlkZW8gKGFsc286ICtydikiCittc2dzdHIgIityZXZlcnNlXHRcdE5vIHVzYSBlbCBtb2RlIGRlIHZpZGVvIGludmVycyAodGFtYuk6ICtydikiCisKKyM6IG1haW4uYzoyNTI1Cittc2dpZCAiLXhybSA8cmVzb3VyY2U+XHRTZXQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSIKK21zZ3N0ciAiLXhybSA8cmVjdXJzPlx0RXN0YWJsZWl4IGVsIHJlY3VycyBlc3BlY2lmaWNhdCIKKworIzogbWFpbi5jOjI1MjgKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoUklTQyBPUyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiXG5Bcmd1bWVudHMgcmVjb25lZ3V0cyBwZWwgZ3ZpbSAodmVyc2nzIFJJU0MgT1MpOlxuIgorCisjOiBtYWluLmM6MjUyOQorbXNnaWQgIi0tY29sdW1ucyA8bnVtYmVyPlx0SW5pdGlhbCB3aWR0aCBvZiB3aW5kb3cgaW4gY29sdW1ucyIKK21zZ3N0ciAiLS1jb2x1bW5zIDxub21icmU+XHRBbXBsYWRhIGluaWNpYWwgZGUgbGEgZmluZXN0cmEgZW4gY29sdW1uZXMiCisKKyM6IG1haW4uYzoyNTMwCittc2dpZCAiLS1yb3dzIDxudW1iZXI+XHRJbml0aWFsIGhlaWdodCBvZiB3aW5kb3cgaW4gcm93cyIKK21zZ3N0ciAiLS1yb3dzIDxub21icmU+XHRBbOdhZGEgaW5pY2lhbCBkZSBsYSBmaW5lc3RyYSBlbiBmaWxlcyIKKworIzogbWFpbi5jOjI1MzMKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoR1RLKyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiXG5Bcmd1bWVudHMgcmVjb25lZ3V0cyBwZWwgZ3ZpbSAodmVyc2nzIEdUSyspOlxuIgorCisjOiBtYWluLmM6MjUzNworbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4gKGFsc286IC0tZGlzcGxheSkiCittc2dzdHIgIi1kaXNwbGF5IDxwYW50YWxsYT5cdEV4ZWN1dGEgdmltIGEgPHBhbnRhbGxhPiAodGFtYuk6IC0tZGlzcGxheSkiCisKKyM6IG1haW4uYzoyNTM5Cittc2dpZCAiLS1yb2xlIDxyb2xlPlx0U2V0IGEgdW5pcXVlIHJvbGUgdG8gaWRlbnRpZnkgdGhlIG1haW4gd2luZG93IgorbXNnc3RyICItLXJvbGUgPHJvbD5cdFx0VXNhIHVuIPpuaWMgcm9sIHBlciBpZGVudGlmaWNhciBsYSBmaW5lc3RyYSBwcmluY2lwYWwiCisKKyM6IG1haW4uYzoyNTQxCittc2dpZCAiLS1zb2NrZXRpZCA8eGlkPlx0T3BlbiBWaW0gaW5zaWRlIGFub3RoZXIgR1RLIHdpZGdldCIKK21zZ3N0ciAiLS1zb2NrZXRpZCA8eGlkPlx0T2JyZSBlbCB2aW0gZGlucyBkJ3VuYSBhbHRyYSBhcGxpY2FjafMgR1RLIgorCisjOiBtYWluLmM6MjU0MworbXNnaWQgIi0taGVscFx0XHRTaG93IEdub21lIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1oZWxwXHRcdE1vc3RyYSBlbHMgYXJndW1lbnRzIHBlciBHbm9tZSIKKworIzogbWFpbi5jOjI3NzUKK21zZ2lkICJObyBkaXNwbGF5IgorbXNnc3RyICJObyBoaSBoYSBjYXAgcGFudGFsbGEiCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyNzkwCittc2dpZCAiOiBTZW5kIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiBFcnJvciBlbiBlbnZpYXIuXG4iCisKKyMuIExldCB2aW0gc3RhcnQgbm9ybWFsbHkuCisjOiBtYWluLmM6Mjc5NgorbXNnaWQgIjogU2VuZCBmYWlsZWQuIFRyeWluZyB0byBleGVjdXRlIGxvY2FsbHlcbiIKK21zZ3N0ciAiOiBFcnJvciBlbiBlbnZpYXIuIEludGVudGFudCBsJ2V4ZWN1Y2nzIGxvY2FsXG4iCisKKyM6IG1haW4uYzoyODM0IG1haW4uYzoyODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG9mICVkIGVkaXRlZCIKK21zZ3N0ciAiZWRpdGF0ICVkIGRlICVkIgorCisjOiBtYWluLmM6Mjg3NworbXNnaWQgIk5vIGRpc3BsYXk6IFNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIk5vIGhpIGhhIGNhcCBwYW50YWxsYTogRXJyb3IgZW4gZW52aWFyIGwnZXhwcmVzc2nzLlxuIgorCisjOiBtYWluLmM6Mjg4OQorbXNnaWQgIjogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiBFcnJvciBlbiBlbnZpYXIgbCdleHByZXNzafMuXG4iCisKKyM6IG1hcmsuYzo2NTYKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIk5vIGhpIGhhIG1hcnF1ZXMgZGVmaW5pZGVzIgorCisjOiBtYXJrLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4MzogQ2FwIG1hcmNhIGNvaW5jaWRlaXggYW1iIFwiJXNcIiIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NjY5Cittc2dpZCAiIgorIlxuIgorIm1hcmsgbGluZSAgY29sIGZpbGUvdGV4dCIKK21zZ3N0ciAiXG5tYXJjYSBs7W4gIGNvbCBmaXR4ZXIvdGV4dCIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzA3Cittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIlxuIHNhbHQgIGztbiAgY29sIGZpdHhlci90ZXh0IgorCisjOiBtYXJrLmM6MTA3MgorbXNnaWQgIiIKKyJcbiIKKyIjIEZpbGUgbWFya3M6XG4iCittc2dzdHIgIlxuIyBNYXJxdWVzIGRlIGZpdHhlcjpcbiIKKworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMTA3Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIlxuIyBMbGlzdGEgZGUgc2FsdHMgKGRlIG3pcyBhIG1lbnlzIHJlY2VudCk6XG4iCisKKyM6IG1hcmsuYzoxMjAyCittc2dpZCAiIgorIlxuIgorIiMgSGlzdG9yeSBvZiBtYXJrcyB3aXRoaW4gZmlsZXMgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICJcbiMgSGlzdG9yaWFsIGRlIG1hcnF1ZXMgZW4gZml0eGVycyAoZGUgbelzIGEgbWVueXMgcmVjZW50KTpcbiIKKworIzogbWFyay5jOjEyODUKK21zZ2lkICJNaXNzaW5nICc+JyIKK21zZ3N0ciAiRmFsdGEgdW4gJz4nIgorCisjOiBtYnl0ZS5jOjQwOQorbXNnaWQgIkU1NDM6IE5vdCBhIHZhbGlkIGNvZGVwYWdlIgorbXNnc3RyICJFNTQzOiBObyDpcyB1biBjb2RpIGRlIHDgZ2luYSB24GxpZCIKKworIzogbWJ5dGUuYzo0MDgxCittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IE5vIHMnaGFuIHBvZ3V0IGVzdGFibGlyIGVscyB2YWxvcnMgZGVsIGNvbnRleHQgZCdlbnRyYWRhIgorCisjOiBtYnl0ZS5jOjQyMzMKK21zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCittc2dzdHIgIkUyODU6IEVycm9yIGVuIGNyZWFyIGVsIGNvbnRleHQgZCdlbnRyYWRhIgorCisjOiBtYnl0ZS5jOjQzODAKK21zZ2lkICJFMjg2OiBGYWlsZWQgdG8gb3BlbiBpbnB1dCBtZXRob2QiCittc2dzdHIgIkUyODY6IEVycm9yIGVuIG9icmlyIGVsIG3odG9kZSBkJ2VudHJhZGEiCisKKyM6IG1ieXRlLmM6NDM5MQorI34gbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKKyN+IG1zZ3N0ciAiIgorCisjOiBtYnl0ZS5jOjQzOTcKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODogZWwgbeh0b2RlIGQnZW50cmFkYSBubyBzdXBvcnRhIGNhcCBlc3RpbCIKKworIzogbWJ5dGUuYzo0NDU0Cittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IGVsIG3odG9kZSBkJ2VudHJhZGEgbm8gc3Vwb3J0YSBlbCB0aXB1cyBkZSBwcmVlZGljafMiCisKKyM6IG1ieXRlLmM6NDUyOAorbXNnaWQgIkUyOTA6IG92ZXItdGhlLXNwb3Qgc3R5bGUgcmVxdWlyZXMgZm9udHNldCIKK21zZ3N0ciAiRTI5MDogTCdlc3RpbCBvdmVyLXRoZS1zcG90IHJlcXVlcmVpeCB1biBjb25qdW50IGRlIHRpcHVzIgorCisjOiBtYnl0ZS5jOjQ1NjAKK21zZ2lkICJFMjkxOiBZb3VyIEdUSysgaXMgb2xkZXIgdGhhbiAxLjIuMy4gU3RhdHVzIGFyZWEgZGlzYWJsZWQiCittc2dzdHIgIkUyOTE6IExhIGxsaWJyZXJpYSBHVEsrIOlzIGFudGVyaW9yIGEgMS4yLjMuIEVzIGRlc2hhYmlsaXRhIGwn4HJlYSBkJ2VzdGF0IgorCisjOiBtYnl0ZS5jOjQ4MzkKK21zZ2lkICJFMjkyOiBJbnB1dCBNZXRob2QgU2VydmVyIGlzIG5vdCBydW5uaW5nIgorbXNnc3RyICJFMjkyOiBFbCBzZXJ2aWRvciBkZSBt6HRvZGVzIGQnZW50cmFkYSAoSU1TKSBubyBlc3TgIGZ1bmNpb25hbnQiCisKKyM6IG1lbWZpbGUuYzo0ODgKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5MzogRWwgYmxvYyBubyBlc3RhdmEgYmxvcXVlamF0IgorCisjOiBtZW1maWxlLmM6OTg5Cittc2dpZCAiRTI5NDogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgcmVhZCIKK21zZ3N0ciAiRTI5NDogRXJyb3IgZGUgcG9zaWNp8yBxdWFuIGVzIGxsZWdpYSBlbCBmaXR4ZXIgZCdpbnRlcmNhbnZpIgorCisjOiBtZW1maWxlLmM6OTk0Cittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IEVycm9yIGRlIGxlY3R1cmEgZW4gZWwgZml0eGVyIGQnaW50ZXJjYW52aSIKKworIzogbWVtZmlsZS5jOjEwNDYKK21zZ2lkICJFMjk2OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIKK21zZ3N0ciAiRTI5NjogRXJyb3IgZGUgcG9zaWNp8yBxdWFuIHMnZXNjcml2aWEgZWwgZml0eGVyIGQnaW50ZXJjYW52aSIKKworIzogbWVtZmlsZS5jOjEwNjQKK21zZ2lkICJFMjk3OiBXcml0ZSBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTc6IEVycm9yIGQnZXNjcmlwdHVyYSBlbiBlbCBmaXR4ZXIgZCdpbnRlcmNhbnZpIgorCisjOiBtZW1maWxlLmM6MTI2MQorbXNnaWQgIkUzMDA6IFN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyAoc3ltbGluayBhdHRhY2s/KSIKK21zZ3N0ciAiRTMwMDogRWwgZml0eGVyIGQnaW50ZXJjYW52aSBlbmNhcmEgZXhpc3RlaXgiCisKKyM6IG1lbWxpbmUuYzoyNzUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDA/IgorbXNnc3RyICJFMjk4OiBObyBzJ2hhIHBvZ3V0IG9idGVuaXIgZWwgYmxvYyAwPyIKKworIzogbWVtbGluZS5jOjMxNQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMT8iCittc2dzdHIgIkUyOTg6IE5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbCBibG9jIDE/IgorCisjOiBtZW1saW5lLmM6MzMzCittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAyPyIKK21zZ3N0ciAiRTI5ODogTm8gcydoYSBwb2d1dCBvYnRlbmlyIGVsIGJsb2MgMz8iCisKKyMuIGNvdWxkIG5vdCAocmUpb3BlbiB0aGUgc3dhcCBmaWxlLCB3aGF0IGNhbiB3ZSBkbz8/Pz8KKyM6IG1lbWxpbmUuYzo0NDMKK21zZ2lkICJFMzAxOiBPb3BzLCBsb3N0IHRoZSBzd2FwIGZpbGUhISEiCittc2dzdHIgIkUzMDE6IEVwISBFbCBmaXR4ZXIgZCdpbnRlcmNhbnZpIHMnaGEgcGVyZHV0ISEhIgorCisjOiBtZW1saW5lLmM6NDQ4Cittc2dpZCAiRTMwMjogQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDI6IE5vIHMnaGEgcG9ndXQgcmVhbm9tZW5hciBlbCBmaXR4ZXIgZCdpbnRlcmNhbnZpIgorCisjOiBtZW1saW5lLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDM6IFVuYWJsZSB0byBvcGVuIHN3YXAgZmlsZSBmb3IgXCIlc1wiLCByZWNvdmVyeSBpbXBvc3NpYmxlIgorbXNnc3RyICJFMzAzOiBFcnJvciBlbiBvYnJpciBlbCBmaXR4ZXIgZCdpbnRlcmNhbnZpIGRlIFwiJXNcIiwgbm8gZXMgcG9kcuAgcmVjdXBlcmFyIgorCisjOiBtZW1saW5lLmM6NjE3Cittc2dpZCAiRTMwNDogbWxfdGltZXN0YW1wOiBEaWRuJ3QgZ2V0IGJsb2NrIDA/PyIKK21zZ3N0ciAiRTMwNDogbWxfdGltZXN0YW1wOiBObyBzJ2hhIHBvZ3V0IG9idGVuaXIgZWwgYmxvYyAwPz8iCisKKyM6IG1lbWxpbmUuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNTogTm8gc3dhcCBmaWxlIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiRTMwNTogTm8gcydoYSB0cm9iYXQgZWwgZml0eGVyIGQnaW50ZXJjYW52aSBkZSAlcyIKKworIzogbWVtbGluZS5jOjc2NworbXNnaWQgIkVudGVyIG51bWJlciBvZiBzd2FwIGZpbGUgdG8gdXNlICgwIHRvIHF1aXQpOiAiCittc2dzdHIgIkVudHJldSBlbCBu+m1lcm8gZGVsIGZpdHhlciBkJ2ludGVyY2FudmkgYSB1dGlsaXR6YXIgKDAgcGVyIHNvcnRpcik6ICIKKworIzogbWVtbGluZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA2OiBDYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiRTMwNjogTm8gcydoYSBwb2d1dCBvYnJpciAlcyIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGJsb2MgMCBkZSAiCisKKyM6IG1lbWxpbmUuYzo4MzcKK21zZ2lkICIiCisiXG4iCisiTWF5YmUgbm8gY2hhbmdlcyB3ZXJlIG1hZGUgb3IgVmltIGRpZCBub3QgdXBkYXRlIHRoZSBzd2FwIGZpbGUuIgorbXNnc3RyICJcbk8gYukgbm8gcydoYW4gZmV0IGNhbnZpcywgbyBlbCBWaW0gbm8gaGEgYWN0dWFsaXR6YXQgZWwgZml0eGVyIGQnaW50ZXJjYW52aS4iCisKKyM6IG1lbWxpbmUuYzo4NDcgbWVtbGluZS5jOjg2NAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW0uXG4iCittc2dzdHIgIiBubyBlcyBwb3QgdXRpbGl0emFyIGFtYiBhcXVlc3RhIHZlcnNp8yBkZSBWaW0uXG4iCisKKyM6IG1lbWxpbmUuYzo4NDkKK21zZ2lkICJVc2UgVmltIHZlcnNpb24gMy4wLlxuIgorbXNnc3RyICJVc2V1IFZpbSB2ZXJzafMgMy4wLlxuIgorCisjOiBtZW1saW5lLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDc6ICVzIG5vIHNlbWJsYSB1biBmaXR4ZXIgZCdpbnRlcmNhbnZpIGRlIFZpbSIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIgbm8gZXMgcG90IHV0aWxpdHphciBlbiBhcXVlc3Qgb3JkaW5hZG9yLlxuIgorCisjOiBtZW1saW5lLmM6ODcwCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICJFbCBmaXR4ZXIgdmEgc2VyIGNyZWF0IGVsICIKKworIzogbWVtbGluZS5jOjg3NAorbXNnaWQgIiIKKyIsXG4iCisib3IgdGhlIGZpbGUgaGFzIGJlZW4gZGFtYWdlZC4iCittc2dzdHIgIiIKKyIsXG4iCisibyBlbCBmaXR4ZXIgZXN04CBmZXQgbWFsYukuIgorCisjOiBtZW1saW5lLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHN3YXAgZmlsZSBcIiVzXCIiCittc2dzdHIgIlMnZXN04CB1dGlsaXR6YW50IGVsIGZpdHhlciBkJ2ludGVyY2FudmkgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk9yaWdpbmFsIGZpbGUgXCIlc1wiIgorbXNnc3RyICJGaXR4ZXIgb3JpZ2luYWwgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTIyCittc2dpZCAiRTMwODogV2FybmluZzogT3JpZ2luYWwgZmlsZSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQiCittc2dzdHIgIkUzMDg6IEF0ZW5jafM6IEVsIGZpdHhlciBvcmlnaW5hbCBwb3QgaGF2ZXIgY2FudmlhdCIKKworIzogbWVtbGluZS5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6IE5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGJsb2MgMSBkZSAlcyIKKworIzogbWVtbGluZS5jOjk2NworbXNnaWQgIj8/P01BTlkgTElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/RkFMVEVOIE1PTFRFUyBMzU5JRVMiCisKKyM6IG1lbWxpbmUuYzo5ODMKK21zZ2lkICI/Pz9MSU5FIENPVU5UIFdST05HIgorbXNnc3RyICI/Pz9DT01QVEFET1IgREUgTM1OSUEgSU5DT1JSRUNURSIKKworIzogbWVtbGluZS5jOjk5MAorbXNnaWQgIj8/P0VNUFRZIEJMT0NLIgorbXNnc3RyICI/Pz9CTE9DIEJVSVQiCisKKyM6IG1lbWxpbmUuYzoxMDE2Cittc2dpZCAiPz8/TElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/RkFMVEVOIEzNTklFUyIKKworIzogbWVtbGluZS5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxMDogQmxvY2sgMSBJRCB3cm9uZyAoJXMgbm90IGEgLnN3cCBmaWxlPykiCittc2dzdHIgIkUzMTA6IEwnSUQgZGVsIGJsb2MgMSBubyDpcyBjb3JyZWN0YSAoJXMgbm8g6XMgdW4gZml0eGVyIC5zd3A/KSIKKworIzogbWVtbGluZS5jOjEwNTMKK21zZ2lkICI/Pz9CTE9DSyBNSVNTSU5HIgorbXNnc3RyICI/Pz9GQUxUQSBVTiBCTE9DIgorCisjOiBtZW1saW5lLmM6MTA2OQorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBiZSBtZXNzZWQgdXAiCittc2dzdHIgIj8/PyBEZXMgZCdhcXXtIGZpbnMgPz8/RklOQUwgbGVzIGztbmllcyBwb2RlbiBlc3RhciBlcXVpdm9jYWRlcyIKKworIzogbWVtbGluZS5jOjEwODUKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiCittc2dzdHIgIj8/PyBEZXMgZCdhcXXtIGZpbnMgPz8/RklOQUwgaGkgcG90IGhhdmVyIGztbmllcyBpbnNlcmlkZXMvZWxpbWluYWRlcyIKKworIzogbWVtbGluZS5jOjExMDUKK21zZ2lkICI/Pz9FTkQiCittc2dzdHIgIj8/P0ZJTkFMIgorCisjOiBtZW1saW5lLmM6MTEzMQorbXNnaWQgIkUzMTE6IFJlY292ZXJ5IEludGVycnVwdGVkIgorbXNnc3RyICJFMzExOiBTJ2hhIGludGVycm9tcHV0IGxhIHJlY3VwZXJhY2nzIgorCisjOiBtZW1saW5lLmM6MTEzMworbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIkUzMTI6IFMnaGFuIGRldGVjdGF0IGVycm9ycyBlbiBsYSByZWN1cGVyYWNp8zsgYnVzcXVldSBs7W5pZXMgYW1iID8/PyIKKworIzogbWVtbGluZS5jOjExMzYKK21zZ2lkICJSZWNvdmVyeSBjb21wbGV0ZWQuIFlvdSBzaG91bGQgY2hlY2sgaWYgZXZlcnl0aGluZyBpcyBPSy4iCittc2dzdHIgIlMnaGEgY29tcGxldGF0IGxhIHJlY3VwZXJhY2nzLiBIYXVyaWV1IGRlIHJldmlzYXIgcXVlIHRvdCBzaWd1aSBjb3JyZWN0ZS4iCisKKyM6IG1lbWxpbmUuYzoxMTM3Cittc2dpZCAiIgorIlxuIgorIihZb3UgbWlnaHQgd2FudCB0byB3cml0ZSBvdXQgdGhpcyBmaWxlIHVuZGVyIGFub3RoZXIgbmFtZVxuIgorbXNnc3RyICJcbihQb3RzZXIgdm9sZXUgZGVzYXIgYXF1ZXN0IGZpdHhlciBhbWIgdW4gYWx0cmUgbm9tXG4iCisKKyM6IG1lbWxpbmUuYzoxMTM4Cittc2dpZCAiYW5kIHJ1biBkaWZmIHdpdGggdGhlIG9yaWdpbmFsIGZpbGUgdG8gY2hlY2sgZm9yIGNoYW5nZXMpXG4iCittc2dzdHIgImkgZmVyIHVuIGRpZmYgYW1iIGVsIGZpdHhlciBvcmlnaW5hbCBwZXIgdmV1cmUgZWxzIGNhbnZpcylcbiIKKworIzogbWVtbGluZS5jOjExMzkKK21zZ2lkICIiCisiRGVsZXRlIHRoZSAuc3dwIGZpbGUgYWZ0ZXJ3YXJkcy5cbiIKKyJcbiIKK21zZ3N0ciAiRWxpbWluYSBlbCBmaXR4ZXIgLnN3cCB0b3Qgc2VndWl0LlxuXG4iCisKKyMuIHVzZSBtc2coKSB0byBzdGFydCB0aGUgc2Nyb2xsaW5nIHByb3Blcmx5CisjOiBtZW1saW5lLmM6MTE5NQorbXNnaWQgIlN3YXAgZmlsZXMgZm91bmQ6IgorbXNnc3RyICJGaXR4ZXJzIGQnaW50ZXJjYW52aSB0cm9iYXRzOiIKKworIzogbWVtbGluZS5jOjEzNzMKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAgRW4gZWwgZGlyZWN0b3JpIGFjdHVhbDpcbiIKKworIzogbWVtbGluZS5jOjEzNzUKK21zZ2lkICIgICBVc2luZyBzcGVjaWZpZWQgbmFtZTpcbiIKK21zZ3N0ciAiICAgVXNhbnQgZWwgbm9tIGVzcGVjaWZpY2F0OlxuIgorCisjOiBtZW1saW5lLmM6MTM3OQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIEVuIGVsIGRpcmVjdG9yaSAiCisKKyM6IG1lbWxpbmUuYzoxMzk3Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgICAtLSBjYXAgLS1cbiIKKworIzogbWVtbGluZS5jOjE0NjkKK21zZ2lkICIgICAgICAgICAgb3duZWQgYnk6ICIKK21zZ3N0ciAiICAgICAgcHJvcGlldGF0IGRlOiAiCisKKyM6IG1lbWxpbmUuYzoxNDcxCittc2dpZCAiICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgYW1iIGRhdGE6ICIKKworIzogbWVtbGluZS5jOjE0NzUgbWVtbGluZS5jOjM2ODkKK21zZ2lkICIgICAgICAgICAgICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgICAgICAgIGFtYiBkYXRhOiAiCisKKyM6IG1lbWxpbmUuYzoxNDkxCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgICAgW2RlbCBWaW0gdmVyc2nzIDMuMF0iCisKKyM6IG1lbWxpbmUuYzoxNDk1Cittc2dpZCAiICAgICAgICAgW2RvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGVdIgorbXNnc3RyICIgICAgICAgICBbbm8gc2VtYmxhIHVuIGZpdHhlciBkJ2ludGVyY2FudmkgZGUgVmltXSIKKworIzogbWVtbGluZS5jOjE0OTkKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgIG5vbSBkZWwgZml0eGVyOiAiCisKKyM6IG1lbWxpbmUuYzoxNTA1Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgICBtb2RpZmllZDogIgorbXNnc3RyICJcbiAgICAgICAgIG1vZGlmaWNhdDogIgorCisjOiBtZW1saW5lLmM6MTUwNgorbXNnaWQgIllFUyIKK21zZ3N0ciAiU80iCisKKyM6IG1lbWxpbmUuYzoxNTA2Cittc2dpZCAibm8iCittc2dzdHIgIm5vIgorCisjOiBtZW1saW5lLmM6MTUxMAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICB1c2VyIG5hbWU6ICIKK21zZ3N0ciAiXG4gICBub20gZGUgbCd1c3Vhcmk6ICIKKworIzogbWVtbGluZS5jOjE1MTcKK21zZ2lkICIgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiICAgIG3gcXVpbmE6ICIKKworIzogbWVtbGluZS5jOjE1MTkKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIlxuICAgICAgICAgICBt4HF1aW5hOiAiCisKKyM6IG1lbWxpbmUuYzoxNTI1Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorbXNnc3RyICJcbiAgICAgSUQgZGVsIHByb2PpczogIgorCisjOiBtZW1saW5lLmM6MTUzMQorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAoZW5jYXJhIGZ1bmNpb25hbnQpIgorCisjOiBtZW1saW5lLmM6MTU0MworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW1dIgorbXNnc3RyICJcbiAgICAgICAgICBbbm8gdXNhYmxlIGFtYiBhcXVlc3RhIHZlcnNp8yBkZSBWaW1dIgorCisjOiBtZW1saW5lLmM6MTU0NgorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSBvbiB0aGlzIGNvbXB1dGVyXSIKK21zZ3N0ciAiXG4gICAgICAgICAgW25vIHVzYWJsZSBlbiBhcXVlc3RhIGNvbXB1dGFkb3JhXSIKKworIzogbWVtbGluZS5jOjE1NTEKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIHJlYWRdIgorbXNnc3RyICIgICAgICAgICBbbm8gZXMgcG90IGxsZWdpcl0iCisKKyM6IG1lbWxpbmUuYzoxNTU1Cittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSBvcGVuZWRdIgorbXNnc3RyICIgICAgICAgICBbbm8gZXMgcG90IG9icmlyXSIKKworIzogbWVtbGluZS5jOjE3NDUKK21zZ2lkICJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMxMzogTm8gcydoYSBwb2d1dCBwcmVzZXJ2YXIsIG5vIGhpIGhhIGZpdHhlciBkJ2ludGVyY2FudmkiCisKKyM6IG1lbWxpbmUuYzoxNzk4Cittc2dpZCAiRmlsZSBwcmVzZXJ2ZWQiCittc2dzdHIgIlMnaGEgcHJlc2VydmF0IGVsIGZpdHhlciIKKworIzogbWVtbGluZS5jOjE4MDAKK21zZ2lkICJFMzE0OiBQcmVzZXJ2ZSBmYWlsZWQiCittc2dzdHIgIkUzMTQ6IExhIHByZXNlcnZhY2nzIGhhIGZhbGxhdCIKKworIzogbWVtbGluZS5jOjE4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNTogbWxfZ2V0OiBpbnZhbGlkIGxudW06ICVsZCIKK21zZ3N0ciAiRTMxNTogbWxfZ2V0OiBsbnVtIG5vIHbgbGlkOiAlbGQiCisKKyM6IG1lbWxpbmUuYzoxODk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTY6IG1sX2dldDogY2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMTY6IG1sX2dldDogbm8gcydoYSB0cm9iYXQgbGEgbO1uaWEgJWxkIgorCisjOiBtZW1saW5lLmM6MjI4NworbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAiRTMxNzogUHVudGVyIGEgbGEgaWQgZCd1biBibG9jIGluY29ycmVjdGUgMyIKKworIzogbWVtbGluZS5jOjIzNjcKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCBoYXVyaWEgZGUgc2VyIDAiCisKKyM6IG1lbWxpbmUuYzoyNDI5Cittc2dpZCAiRTMxODogVXBkYXRlZCB0b28gbWFueSBibG9ja3M/IgorbXNnc3RyICJFMzE4OiBTJ2hhbiBhY3R1YWxpdHphdCBtYXNzYSBibG9jcz8iCisKKyM6IG1lbWxpbmUuYzoyNjExCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiBQdW50ZXIgYSBsYSBpZCBkJ3VuIGJsb2MgaW5jb3JyZWN0ZSA0IgorCisjOiBtZW1saW5lLmM6MjYzOAorbXNnaWQgImRlbGV0ZWQgYmxvY2sgMT8iCittc2dzdHIgInMnaGEgZWxpbWluYXQgZWwgYmxvYyAxPyIKKworIzogbWVtbGluZS5jOjI4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6IE5vIHMnaGEgdHJvYmF0IGxhIGztbmlhICVsZCIKKworIzogbWVtbGluZS5jOjMwODEKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIgorbXNnc3RyICJFMzE3OiBQdW50ZXIgYSBsYSBpZCBkJ3VuIGJsb2MgaW5jb3JyZWN0ZSIKKworIzogbWVtbGluZS5jOjMwOTcKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgInBvX2xpbmVfY291bnQg6XMgemVybyIKKworIzogbWVtbGluZS5jOjMxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMjogbGluZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlbGQgcGFzdCB0aGUgZW5kIgorbXNnc3RyICJFMzIyOiBOb21icmUgZGUgbO1uaWEgZm9yYSBkJ2FiYXN0OiAlbGQgcGFzc2F0IGVsIGZpbmFsIgorCisjOiBtZW1saW5lLmM6MzEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIzOiBsaW5lIGNvdW50IHdyb25nIGluIGJsb2NrICVsZCIKK21zZ3N0ciAiRTMyMzogQ29tcHRhZG9yIGRlIGztbmlhIGluY29ycmVjdGUgYWwgYmxvYyAlbGQiCisKKyM6IG1lbWxpbmUuYzozMTc5Cittc2dpZCAiU3RhY2sgc2l6ZSBpbmNyZWFzZXMiCittc2dzdHIgIkxhIG1pZGEgZGUgbGEgcGlsYSBzJ2luY3JlbWVudGEiCisKKyM6IG1lbWxpbmUuYzozMjI1Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAyIgorbXNnc3RyICJFMzE3OiBQdW50ZXIgYSBsYSBpZCBkJ3VuIGJsb2MgaW5jb3JyZWN0ZSAyIgorCisjOiBtZW1saW5lLmM6MzY3OQorbXNnaWQgIkUzMjU6IEFUVEVOVElPTiIKK21zZ3N0ciAiRTMyNTogQVRFTkNJ0yIKKworIzogbWVtbGluZS5jOjM2ODAKK21zZ2lkICIiCisiXG4iCisiRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgXCIiCittc2dzdHIgIlxuUydoYSB0cm9iYXQgdW4gZml0eGVyIGQnaW50ZXJjYW52aSBkZSBub20gXCIiCisKKyM6IG1lbWxpbmUuYzozNjg0Cittc2dpZCAiV2hpbGUgb3BlbmluZyBmaWxlIFwiIgorbXNnc3RyICJNZW50cmUgcydvYnJpYSBlbCBmaXR4ZXIgXCIiCisKKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgIE3JUyBOT1UgcXVlIGVsIGZpdHhlciBkJ2ludGVyY2FudmkhXG4iCisKKyMuIFNvbWUgb2YgdGhlc2UgbWVzc2FnZXMgYXJlIGxvbmcgdG8gYWxsb3cgdHJhbnNsYXRpb24gdG8KKyMuICogb3RoZXIgbGFuZ3VhZ2VzLgorIzogbWVtbGluZS5jOjM2OTcKK21zZ2lkICIiCisiXG4iCisiKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLlxuIgorIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d29cbiIKKyIgICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMSkgVW4gYWx0cmUgcHJvZ3JhbWEgcG90IGVzdGFyIGVkaXRhbnQgYXF1ZXN0IG1hdGVpeCBmaXR4ZXIuXG4iCisiICAgIEVuIGFxdWVzdCBjYXMsIGFuZXUgYW1iIGNvbXB0ZSBkZSBubyBhY2FiYXIgYW1iIGR1ZXNcbiIKKyIgICAgaW5zdOBuY2llcyBkaWZlcmVudHMgZGVsIG1hdGVpeCBmaXR4ZXIgcXVhbiBmZXUgY2FudmlzLlxuIgorCisjOiBtZW1saW5lLmM6MzY5OAorbXNnaWQgIiAgICBRdWl0LCBvciBjb250aW51ZSB3aXRoIGNhdXRpb24uXG4iCittc2dzdHIgIiAgICBTb3J0aXUsIG8gY29udGludWV1IGFtYiBwcmVjYXVjafMuXG4iCisKKyM6IG1lbWxpbmUuYzozNjk5Cittc2dpZCAiIgorIlxuIgorIigyKSBBbiBlZGl0IHNlc3Npb24gZm9yIHRoaXMgZmlsZSBjcmFzaGVkLlxuIgorbXNnc3RyICJcbigyKSBFbCBWaW0gcydoYSBlc3RyZWxsYXQgbWVudHJlIHMnZWRpdGF2YSBhcXVlc3QgZml0eGVyLlxuIgorCisjOiBtZW1saW5lLmM6MzcwMAorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIEVuIGFxdWVzdCBjYXMsIHVzZXUgXCI6cmVjb3ZlclwiIG8gYukgXCJ2aW0gLXIgIgorCisjOiBtZW1saW5lLmM6MzcwMgorbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byByZWNvdmVyIHRoZSBjaGFuZ2VzIChzZWUgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIHBlciByZWN1cGVyYXIgZWxzIGNhbnZpcyAodmVnZXUgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKKworIzogbWVtbGluZS5jOjM3MDMKK21zZ2lkICIgICAgSWYgeW91IGRpZCB0aGlzIGFscmVhZHksIGRlbGV0ZSB0aGUgc3dhcCBmaWxlIFwiIgorbXNnc3RyICIgICAgU2kgamEgaG8gaGV1IGZldCwgZWxpbWluZXUgZWwgZml0eGVyIFwiIgorCisjOiBtZW1saW5lLmM6MzcwNQorbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byBhdm9pZCB0aGlzIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICBwZXIgZXZpdGFyIGFxdWVzdCBtaXNzYXRnZS5cbiIKKworIzogbWVtbGluZS5jOjM3MTkgbWVtbGluZS5jOjM3MjMKK21zZ2lkICJTd2FwIGZpbGUgXCIiCittc2dzdHIgIkVsIGZpdHhlciBkJ2ludGVyY2FudmkgXCIiCisKKyM6IG1lbWxpbmUuYzozNzIwIG1lbWxpbmUuYzozNzI2Cittc2dpZCAiXCIgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICJcIiBqYSBleGlzdGVpeCEiCisKKyM6IG1lbWxpbmUuYzozNzI5Cittc2dpZCAiVklNIC0gQVRURU5USU9OIgorbXNnc3RyICJWSU0gLSBBVEVOQ0nTIgorCisjOiBtZW1saW5lLmM6MzczMQorbXNnaWQgIlN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIkVsIGZpdHhlciBkJ2ludGVyY2FudmkgamEgZXhpc3RlaXghIgorCisjOiBtZW1saW5lLmM6MzczNQorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0IgorbXNnc3RyICIiCisiJk9icmUgZW4gbW9kZSBub23pcyBsZWN0dXJhXG4iCisiJkVkaXRhXG4iCisiJlJlY3VwZXJhXG4iCisiJlN1cnQiCisKKyM6IG1lbWxpbmUuYzozNzM3Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisiJk9icmUgZW4gbW9kZSBub23pcyBsZWN0dXJhXG4iCisiJkVkaXRhXG4iCisiJlJlY3VwZXJhXG4iCisiJlN1cnRcbiIKKyJFJmxpbWluYSdsIgorCisjOiBtZW1saW5lLmM6Mzc5MAorbXNnaWQgIkUzMjY6IFRvbyBtYW55IHN3YXAgZmlsZXMgZm91bmQiCittc2dzdHIgIkUzMjY6IFMnaGFuIHRyb2JhdCBtYXNzYSBmaXR4ZXJzIGQnaW50ZXJjYW52aSIKKworIzogbWVudS5jOjY0Cittc2dpZCAiRTMyNzogUGFydCBvZiBtZW51LWl0ZW0gcGF0aCBpcyBub3Qgc3ViLW1lbnUiCittc2dzdHIgIkUzMjc6IFBhcnQgZGUgbCd1YmljYWNp8yBkZWwgbWVu+iBubyDpcyBzdWJtZW76IgorCisjOiBtZW51LmM6NjUKK21zZ2lkICJFMzI4OiBNZW51IG9ubHkgZXhpc3RzIGluIGFub3RoZXIgbW9kZSIKK21zZ3N0ciAiRTMyODogRWwgbWVu+iBub23pcyBleGlzdGVpeCBlbiB1biBhbHRyZSBtb2RlIgorCisjOiBtZW51LmM6NjYKK21zZ2lkICJFMzI5OiBObyBtZW51IG9mIHRoYXQgbmFtZSIKK21zZ3N0ciAiRTMyOTogTm8gaGkgaGEgY2FwIG1lbvogYW1iIGFxdWVzdCBub20iCisKKyM6IG1lbnUuYzo1MDkKK21zZ2lkICJFMzMwOiBNZW51IHBhdGggbXVzdCBub3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzMwOiBMJ3ViaWNhY2nzIGRlbCBtZW76IG5vIHBvdCBwb3J0YXIgYSB1biBzdWJtZW76IgorCisjOiBtZW51LmM6NTQ4Cittc2dpZCAiRTMzMTogTXVzdCBub3QgYWRkIG1lbnUgaXRlbXMgZGlyZWN0bHkgdG8gbWVudSBiYXIiCittc2dzdHIgIkUzMzE6IE5vIGVzIHBvZGVuIGFmZWdpciDtdGVtcyBkZSBtZW76IGRpcmVjdGFtZW50IGEgbGEgYmFycmEgZGUgbWVu+iIKKworIzogbWVudS5jOjU1NAorbXNnaWQgIkUzMzI6IFNlcGFyYXRvciBjYW5ub3QgYmUgcGFydCBvZiBhIG1lbnUgcGF0aCIKK21zZ3N0ciAiRTMzMjogVW4gc2VwYXJhZG9yIG5vIHBvdCBmb3JtYXIgcGFydCBkZSBsJ3ViaWNhY2nzIGRlIG1lbvoiCisKKyMuIE5vdyB3ZSBoYXZlIGZvdW5kIHRoZSBtYXRjaGluZyBtZW51LCBhbmQgd2UgbGlzdCB0aGUgbWFwcGluZ3MKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWVudS5jOjEwNzkKK21zZ2lkICIiCisiXG4iCisiLS0tIE1lbnVzIC0tLSIKK21zZ3N0ciAiXG4tLS0gTWVu+nMgLS0tIgorCisjOiBtZW51LmM6MTk5NgorbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAiRXN0cmlwYSBhcXVlc3QgbWVu+iIKKworIzogbWVudS5jOjIwNjEKK21zZ2lkICJFMzMzOiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgbWVudSBpdGVtIgorbXNnc3RyICJFMzMzOiBMJ3ViaWNhY2nzIGRlIG1lbvogaGEgZGUgcG9ydGFyIGEgdW4g7XRlbSBkZSBtZW76IgorCisjOiBtZW51LmM6MjA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzM0OiBNZW51IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUzMzQ6IE5vIHMnaGEgdHJvYmF0IGVsIG1lbvo6ICVzIgorCisjOiBtZW51LmM6MjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzM1OiBNZW51IG5vdCBkZWZpbmVkIGZvciAlcyBtb2RlIgorbXNnc3RyICJFMzM1OiBFbCBtZW76IG5vIGVzdOAgZGVmaW5pdCBwZWwgbW9kZSAlcyIKKworIzogbWVudS5jOjIxODgKK21zZ2lkICJFMzM2OiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzY6IEwndWJpY2FjafMgZGUgbWVu+iBoYSBkZSBwb3J0YXIgYSB1biBzdWJtZW76IgorCisjOiBtZW51LmM6MjIwOQorbXNnaWQgIkUzMzc6IE1lbnUgbm90IGZvdW5kIC0gY2hlY2sgbWVudSBuYW1lcyIKK21zZ3N0ciAiRTMzNzogTm8gcydoYSB0cm9iYXQgZWwgbWVu+iAtIHJldmlzZXUgZWxzIG5vbXMgZGVscyBtZW76cyIKKworIzogbWVzc2FnZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlY3RlZCB3aGlsZSBwcm9jZXNzaW5nICVzOiIKK21zZ3N0ciAiUydoYSBkZXRlY3RhdCB1biBlcnJvciBlbiBwcm9jZXNzYXIgJXM6IgorCisjOiBtZXNzYWdlLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJTRsZDoiCittc2dzdHIgImztbmlhICU0bGQ6IgorCisjOiBtZXNzYWdlLmM6NTc1Cittc2dpZCAiW3N0cmluZyB0b28gbG9uZ10iCittc2dzdHIgIltjYWRlbmEgbWFzc2EgbGxhcmdhXSIKKworIzogbWVzc2FnZS5jOjcyMQorbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorbXNnc3RyICJUcmFkdWNjafMgZGVscyBtaXNzYXRnZXM6IEVybmVzdCBBZHJvZ3XpIDxlYWRyb2d1ZUBnbXgubmV0PiIKKworIzogbWVzc2FnZS5jOjk0NQorbXNnaWQgIkludGVycnVwdDogIgorbXNnc3RyICJJbnRlcnJ1cGNp8zogIgorCisjOiBtZXNzYWdlLmM6OTQ4Cittc2dpZCAiSGl0IEVOVEVSIHRvIGNvbnRpbnVlIgorbXNnc3RyICJQcmVtZXUgRU5UUkFSIHBlciBjb250aW51YXIiCisKKyM6IG1lc3NhZ2UuYzo5NTAKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICJQcmVtZXUgRU5UUkFSIG8gaW50cm9kde91IHVuYSBvcmRyZSBwZXIgY29udGludWFyIgorCisjOiBtZXNzYWdlLmM6MjI1MworbXNnaWQgIi0tIE1vcmUgLS0iCittc2dzdHIgIi0tIE3pcyAtLSIKKworIzogbWVzc2FnZS5jOjIyNTYKK21zZ2lkICIgKFJFVC9CUzogbGluZSwgU1BBQ0UvYjogcGFnZSwgZC91OiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKEVOVFJBUi9SRVRST0PJUzogbO1uaWEsIEVTUEFJL2I7IHDgZ2luYSwgZC91OyBtaXRqYSBw4GdpbmEsIHE6IHN1cnQpIgorCisjOiBtZXNzYWdlLmM6MjI1NworbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChFTlRSQVI6IGztbmlhLCBFU1BBSTogcOBnaW5hLCBkOiBtaXRqYSBw4GdpbmEsIHE6IHN1cnQpIgorCisjOiBtZXNzYWdlLmM6Mjc0OSBtZXNzYWdlLmM6Mjc2NAorbXNnaWQgIlF1ZXN0aW9uIgorbXNnc3RyICJQcmVndW50YSIKKworIzogbWVzc2FnZS5jOjI3NTEKK21zZ2lkICIiCisiJlllc1xuIgorIiZObyIKK21zZ3N0ciAiIgorIiZT7VxuIgorIiZObyIKKworIzogbWVzc2FnZS5jOjI3ODQKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIlNhdmUgJkFsbFxuIgorIiZEaXNjYXJkIEFsbFxuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImU+1cbiIKKyImTm9cbiIKKyJEZXNhLWhvICZ0b3RcbiIKKyImRGVzY2FydGEtaG8gdG90XG4iCisiJkNhbmNlbLdsYSIKKworIzogbWVzc2FnZS5jOjI4MjUKK21zZ2lkICJTYXZlIEZpbGUgZGlhbG9nIgorbXNnc3RyICJEaeBsZWcgZGUgZGVzYXIgZml0eGVyIgorCisjOiBtZXNzYWdlLmM6MjgyNworbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIkRp4GxlZyBkJ29icmlyIGZpdHhlciIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzoyODk4Cittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIkUzMzg6IE5vIGhpIGhhIHVuIGV4cGxvcmFkb3IgZGUgZml0eGVycyBlbiBtb2RlIGNvbnNvbGEiCisKKyM6IG1pc2MxLmM6MjY4MQorbXNnaWQgIlcxMDogV2FybmluZzogQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlIgorbXNnc3RyICJXMTA6IEF0ZW5jafM6IFMnZXN04CBjYW52aWFudCB1biBmaXR4ZXIgZGUgbm9t6XMgbGVjdHVyYSIKKworIzogbWlzYzEuYzoyOTE2Cittc2dpZCAiMSBtb3JlIGxpbmUiCittc2dzdHIgIjEgbO1uaWEgbelzIgorCisjOiBtaXNjMS5jOjI5MTgKK21zZ2lkICIxIGxpbmUgbGVzcyIKK21zZ3N0ciAiMSBs7W5pYSBtZW55cyIKKworIzogbWlzYzEuYzoyOTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgorbXNnc3RyICIlbGQgbO1uaWVzIG3pcyIKKworIzogbWlzYzEuYzoyOTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBmZXdlciBsaW5lcyIKK21zZ3N0ciAiJWxkIGztbmllcyBtZW55cyIKKworIzogbWlzYzEuYzoyOTI4Cittc2dpZCAiIChJbnRlcnJ1cHRlZCkiCittc2dzdHIgIiAoSW50ZXJyb21wdXQpIgorCisjOiBtaXNjMS5jOjY2MjAKK21zZ2lkICJWaW06IHByZXNlcnZpbmcgZmlsZXMuLi5cbiIKK21zZ3N0ciAiVmltOiBwcmVzZXJ2YW50IGVscyBmaXR4ZXJzLi4uXG4iCisKKyMuIGNsb3NlIGFsbCBtZW1maWxlcywgd2l0aG91dCBkZWxldGluZworIzogbWlzYzEuYzo2NjMwCittc2dpZCAiVmltOiBGaW5pc2hlZC5cbiIKK21zZ3N0ciAiVmltOiBGaW5hbGl0emF0LlxuIgorCisjOiBtaXNjMi5jOjY3MCBtaXNjMi5jOjY4NgorbXNnaWQgIkVSUk9SOiAiCittc2dzdHIgIkVSUk9SOiAiCisKKyM6IG1pc2MyLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJbYnl0ZXNdIHRvdGFsIGFsbG9jLWZyZWVkICVsdS0lbHUsIGluIHVzZSAlbHUsIHBlYWsgdXNlICVsdVxuIgorbXNnc3RyICJcbltvY3RldHNdIHRvdGFsIGFzc2lnbmF0LWFsbGliZXJhdCAlbHUtJWx1LCBlbiD6cyAlbHUsIG3geGltIPpzICVsdVxuIgorCisjOiBtaXNjMi5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiW2NhbGxzXSB0b3RhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWwgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCittc2dzdHIgIltjcmlkZXNdIHRvdGFsIHJlL21hbGxvYygpICVsdSwgdG90YWwgZnJlZSgpICVsdVxuXG4iCisKKyM6IG1pc2MyLmM6NzQ3Cittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDogTGEgbO1uaWEgcydlc3TgIHRvcm5hbnQgbWFzc2EgbGxhcmdhIgorCisjOiBtaXNjMi5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQxOiBJbnRlcm5hbCBlcnJvcjogbGFsbG9jKCVsZCwgKSIKK21zZ3N0ciAiRTM0MTogRXJyb3IgaW50ZXJuOiBsYWxsb2MoJWxkLCApIgorCisjOiBtaXNjMi5jOjg5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQyOiBPdXQgb2YgbWVtb3J5ISAgKGFsbG9jYXRpbmcgJWx1IGJ5dGVzKSIKK21zZ3N0ciAiRTM0MjogTWVt8nJpYSBleGhhdXJpZGEhIChhc3NpZ25hbnQgJWx1IG9jdGV0cykiCisKKyM6IG1pc2MyLmM6MjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAiUydlc3TgIGNyaWRhbnQgbCdpbnTocnByZXQgZCdvcmRyZXMgcGVyIGV4ZWN1dGFyOiBcIiVzXCIiCisKKyM6IG1pc2MyLmM6Mjc4NgorbXNnaWQgIkU1NDU6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1NDU6IEZhbHRhIHVuIGNhcuBjdGVyIFwiOlwiIgorCisjOiBtaXNjMi5jOjI3ODggbWlzYzIuYzoyODE1Cittc2dpZCAiRTU0NjogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFNTQ2OiBNb2RlIGlst2xlZ2FsIgorCisjOiBtaXNjMi5jOjI4NTQKK21zZ2lkICJFNTQ3OiBJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIkU1NDc6IExhIGZvcm1hIGRlbCBwdW50ZXIgZGVsIHJhdG9s7SDpcyBpbLdsZWdhbCIKKworIzogbWlzYzIuYzoyODk0Cittc2dpZCAiRTU0ODogZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgIkU1NDg6IFMnZXNwZXJhdmEgdW4gZO1naXQiCisKKyM6IG1pc2MyLmM6Mjg5OQorbXNnaWQgIkU1NDk6IElsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAiRTU0OTogUGVyY2VudGF0Z2UgaWy3bGVnYWwiCisKKyM6IG1pc2MyLmM6MzIwOQorbXNnaWQgIkVudGVyIGVuY3J5cHRpb24ga2V5OiAiCittc2dzdHIgIkludHJvZHXvdSBsYSBjbGF1IGRlIHhpZnJhdDogIgorCisjOiBtaXNjMi5jOjMyMTAKK21zZ2lkICJFbnRlciBzYW1lIGtleSBhZ2FpbjogIgorbXNnc3RyICJJbnRyb2R173UgbGEgbWF0ZWl4YSBjbGF1IHVuIGFsdHJlIGNvcDogIgorCisjOiBtaXNjMi5jOjMyMjAKK21zZ2lkICJLZXlzIGRvbid0IG1hdGNoISIKK21zZ3N0ciAiTGEgY2xhdXMgbm8gY29pbmNpZGVpeGVuISIKKworIzogbWlzYzIuYzozNzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICJFMzQzOiBQYXRoIG5vIHbgbGlkOiAnKipbbvptXScgaGEgZCdlc3RhciBhbCBmaW5hbCBkZWwgcGF0aCwgbyBzZWd1aXQgZGUgJyVzJyIKKworIzogbWlzYzIuYzo1MDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IE5vIHMnaGEgdHJvYmF0IGVsIGRpcmVjdG9yaSBcIiVzXCIgZW4gZWwgY2RwYXRoIgorCisjOiBtaXNjMi5jOjUwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NTogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFMzQ1OiBObyBzJ2hhIHRyb2JhdCBlbCBmaXR4ZXIgXCIlc1wiIGVuIGVsIHBhdGgiCisKKyM6IG1pc2MyLmM6NTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ2OiBObyBtb3JlIGRpcmVjdG9yeSBcIiVzXCIgZm91bmQgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ2OiBObyBzJ2hhIHRyb2JhdCBjYXAgbelzIGRpcmVjdG9yaSBcIiVzXCIgZW4gZWwgY2RwYXRoIgorCisjOiBtaXNjMi5jOjUwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiBObyBzJ2hhIHRyb2JhdCBjYXAgbelzIGZpdHhlciBcIiVzXCIgZW4gZWwgcGF0aCIKKworIzogbWlzYzIuYzo1MjkxCittc2dpZCAiRTU1MDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU1MDogRmFsdGEgdW4gY2Fy4GN0ZXIgXCI6XCIiCisKKyM6IG1pc2MyLmM6NTMwMworbXNnaWQgIkU1NTE6IElsbGVnYWwgY29tcG9uZW50IgorbXNnc3RyICJFNTUxOiBDb21wb25lbnQgaWy3bGVnYWwiCisKKyM6IG1pc2MyLmM6NTMxMQorbXNnaWQgIkU1NTI6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTUyOiBTJ2VzcGVyYXZhIHVuIGTtZ2l0IgorCisjLiBHZXQgaGVyZSB3aGVuIHRoZSBzZXJ2ZXIgY2FuJ3QgYmUgZm91bmQuCisjOiBuZXRiZWFucy5jOjI4MgorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zICMyIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNvbm5lY3RhciBhbWIgTmV0YmVhbnMgIzIiCisKKyM6IG5ldGJlYW5zLmM6MjkwCittc2dpZCAiQ2Fubm90IGNvbm5lY3QgdG8gTmV0YmVhbnMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY29ubmVjdGFyIGFtYiBOZXRiZWFucyIKKworIzogbmV0YmVhbnMuYzo1NjQKK21zZ2lkICJyZWFkIGZyb20gTmV0YmVhbnMgc29ja2V0IgorbXNnc3RyICJsZWN0dXJhIGQndW4gc29ja2V0IE5ldGJlYW5zIgorCisjOiBub3JtYWwuYzoyOTE2Cittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAiQXRlbmNp8zogZWwgdGVybWluYWwgbm8gc3Vwb3J0YSByZXNzYWx0IgorCisjOiBub3JtYWwuYzozMTMxCittc2dpZCAiRTM0ODogTm8gc3RyaW5nIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0ODogTm8gaGkgaGEgY2FwIGNhZGVuYSBzb3RhIGVsIGN1cnNvciIKKworIzogbm9ybWFsLmM6MzEzMworbXNnaWQgIkUzNDk6IE5vIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ5OiBObyBoaSBoYSBjYXAgaWRlbnRpZmljYWRvciBzb3RhIGVsIGN1cnNvciIKKworIzogbm9ybWFsLmM6NDM1MQorbXNnaWQgIkUzNTI6IENhbm5vdCBlcmFzZSBmb2xkcyB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUyOiBObyBlcyBwb2RlbiBlbGltaW5hciBwbGVjcyBhbWIgZWwgJ2ZvbGRtZXRob2QnIGFjdHVhbCIKKworIzogb3BzLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkIDEgdGltZSIKK21zZ3N0ciAiMSBs7W5pYSAlc2FkYSAxIHZlZ2FkYSIKKworIzogb3BzLmM6Mjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIxIGztbmlhICVzYWRhICVkIHZlZ2FkZXMiCisKKyM6IG9wcy5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAxIHRpbWUiCittc2dzdHIgIiVsZCBs7W5pZXMgJXNhZGVzIDEgdmVnYWRhIgorCisjOiBvcHMuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgJWQgdGltZXMiCittc2dzdHIgIiVsZCBs7W5pZXMgJXNhZGVzICVkIHZlZ2FkZXMiCisKKyM6IG9wcy5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgdG8gaW5kZW50Li4uICIKK21zZ3N0ciAiJWxkIGztbmllcyBhIHNhZ25hci4uLiAiCisKKyM6IG9wcy5jOjcxMworbXNnaWQgIjEgbGluZSBpbmRlbnRlZCAiCittc2dzdHIgIjEgbO1uaWEgc2FnbmFkYSAiCisKKyM6IG9wcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgaW5kZW50ZWQgIgorbXNnc3RyICIlbGQgbO1uaWVzIHNhZ25hZGVzICIKKworIy4gbXVzdCBkaXNwbGF5IHRoZSBwcm9tcHQKKyM6IG9wcy5jOjE2NDcKK21zZ2lkICJjYW5ub3QgeWFuazsgZGVsZXRlIGFueXdheSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjb3BpYXI7IHZvbGV1IGVsaW1pYXIgZWwgdGV4dCBkZSB0b3RlcyBtYW5lcmVzIgorCisjOiBvcHMuYzoyMTU1Cittc2dpZCAiMSBsaW5lIGNoYW5nZWQiCittc2dzdHIgIjEgbO1uaWEgY2FudmlhZGEiCisKKyM6IG9wcy5jOjIxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGNoYW5nZWQiCittc2dzdHIgIiVsZCBs7W5pZXMgY2FudmlhZGVzIgorCisjOiBvcHMuYzoyNTQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZyZWVpbmcgJWxkIGxpbmVzIgorbXNnc3RyICJhbGxpYmVyYW50ICVsZCBs7W5pZXMiCisKKyM6IG9wcy5jOjI4MjIKK21zZ2lkICIxIGxpbmUgeWFua2VkIgorbXNnc3RyICIxIGztbmlhIGNvcGlhZGEiCisKKyM6IG9wcy5jOjI4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHlhbmtlZCIKK21zZ3N0ciAiJWxkIGztbmllcyBjb3BpYWRlcyIKKworIzogb3BzLmM6MzEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiBObyBoaSBoYSByZXMgZW4gZWwgcmVnaXN0cmUgJXMiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogb3BzLmM6MzY2NgorbXNnaWQgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKK21zZ3N0ciAiXG4tLS0gUmVnaXN0cmVzIC0tLSIKKworIzogb3BzLmM6NDg3NQorbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAiRWwgbm9tIGRlIHJlZ2lzdHJlIOlzIGlst2xlZ2FsIgorCisjOiBvcHMuYzo0OTYxCittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICJcbiMgUmVnaXN0cmVzOlxuIgorCisjOiBvcHMuYzo0OTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzQ6IFVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIKK21zZ3N0ciAiRTU3NDogRWwgdGlwdXMgZGUgcmVnaXN0cmUgJWQg6XMgZGVzY29uZWd1dCIKKworIzogb3BzLmM6NTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU0OiBJbnZhbGlkIHJlZ2lzdGVyIG5hbWU6ICclcyciCittc2dzdHIgIkUzNTQ6IEVsIG5vbSBkZSByZWdpc3RyZSBubyDpcyB24GxpZDogJyVzJyIKKworIzogb3BzLmM6NTg0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgQ29sczsgIgorbXNnc3RyICIlbGQgQ29sczsgIgorCisjOiBvcHMuYzo1ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlbGVjdGVkICVzJWxkIG9mICVsZCBMaW5lczsgJWxkIG9mICVsZCBXb3JkczsgJWxkIG9mICVsZCBCeXRlcyIKK21zZ3N0ciAiJXMlbGQgZGUgJWxkIEztbmllcyBzZWxlY2Npb25hZGVzOyAlbGQgZGUgJWxkIFBhcmF1bGVzOyAlbGQgZGUgJWxkIE9jdGV0cyIKKworIzogb3BzLmM6NTg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiCittc2dzdHIgIkNvbCAlcyBkZSAlczsgTO1uaWEgJWxkIGRlICVsZDsgUGFyYXVsYSAlbGQgZGUgJWxkOyBPY3RldCAlbGQgZGUgJWxkIgorCisjOiBvcHMuYzo1ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCBwZXIgbGEgQk9NKSIKKworIzogb3B0aW9uLmM6MTYyMworbXNnaWQgIiU8JWYlaCVtJT1QYWdlICVOIgorbXNnc3RyICIlPCVmJWglbSU9UOBnaW5hICVOIgorCisjOiBvcHRpb24uYzoyMDcyCittc2dpZCAiVGhhbmtzIGZvciBmbHlpbmcgVmltIgorbXNnc3RyICJHcuBjaWVzIHBlciB1dGlsaXR6YXIgZWwgVmltIgorCisjOiBvcHRpb24uYzozMzQ0IG9wdGlvbi5jOjM0NTEKK21zZ2lkICJFNTE4OiBVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiRTUxODogTCdvcGNp8yDpcyBkZXNjb25lZ3VkYSIKKworIzogb3B0aW9uLmM6MzM1NworbXNnaWQgIkU1MTk6IE9wdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFNTE5OiBMJ29wY2nzIG5vIGVzdOAgc3Vwb3J0YWRhIgorCisjOiBvcHRpb24uYzozMzgyCittc2dpZCAiRTUyMDogTm90IGFsbG93ZWQgaW4gYSBtb2RlbGluZSIKK21zZ3N0ciAiRTUyMDogTm8gZXN04CBwZXJt6HMgZW4gdW5hIGztbmlhIGRlIG1vZGUiCisKKyM6IG9wdGlvbi5jOjM0MzgKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiXG4gICAgICAgIERlZmluaXQgcGVyIPpsdGltIGNvcCBhICIKKworIzogb3B0aW9uLmM6MzU3NworbXNnaWQgIkU1MjE6IE51bWJlciByZXF1aXJlZCBhZnRlciA9IgorbXNnc3RyICJFNTIxOiBFcyByZXF1ZXJlaXggdW4gbvptZXJvIGRlc3By6XMgZGUgPSIKKworIzogb3B0aW9uLmM6MzkwMyBvcHRpb24uYzo0NTIwCittc2dpZCAiRTUyMjogTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1MjI6IE5vIHMnaGEgdHJvYmF0IGEgbGEgYmFzZSBkZSBkYWRlcyB0ZXJtY2FwIgorCisjOiBvcHRpb24uYzozOTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1Mzk6IElsbGVnYWwgY2hhcmFjdGVyIDwlcz4iCittc2dzdHIgIkU1Mzk6IENhcuBjdGVyIGlst2xlZ2FsIDwlcz4iCisKKyM6IG9wdGlvbi5jOjQ1MTIKK21zZ2lkICJFNTI5OiBDYW5ub3Qgc2V0ICd0ZXJtJyB0byBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1Mjk6IE5vIGVzIHBvdCBkZWZpbmlyICd0ZXJtJyBjb20gYSBjYWRlbmEgYnVpZGEiCisKKyM6IG9wdGlvbi5jOjQ1MTUKK21zZ2lkICJFNTMwOiBDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICJFNTMwOiBObyBlcyBwb3QgY2FudmlhciBkZSB0ZXJtaW5hbCBlbiBtb2RlIEdVSSIKKworIzogb3B0aW9uLmM6NDUxNworbXNnaWQgIkU1MzE6IFVzZSBcIjpndWlcIiB0byBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFNTMxOiBVc2V1IFwiOmd1aVwiIHBlciBpbmluY2lhciBsJ2ludGVyZu1jaWUgZCd1c3VhcmkgZ3LgZmljYSIKKworIzogb3B0aW9uLmM6NDUzOAorbXNnaWQgIkU1ODk6ICdiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiCittc2dzdHIgIkU1ODk6IExlcyBvcGNpb25zICdiYWNrdXBleHQnIGkgJ3BhdGNobW9kZScgY29pbmNpZGVpeGVuIgorCisjOiBvcHRpb24uYzo0NzIzCittc2dpZCAiRTYxNzogQ2Fubm90IGJlIGNoYW5nZWQgaW4gdGhlIEdUSysgMiBHVUkiCittc2dzdHIgIkU2MTc6IEwnaW50ZXJm7WNpZSBHVEsrIDIgbm8gcGVybWV0IGNhbnZpYXIgbGEgY29kaWZpY2FjafMiCisKKyM6IG9wdGlvbi5jOjQ4NzkKK21zZ2lkICJFNTI0OiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTI0OiBGYWx0YSB1biBjYXLgY3RlciBcIjpcIiIKKworIzogb3B0aW9uLmM6NDg4MQorbXNnaWQgIkU1MjU6IFplcm8gbGVuZ3RoIHN0cmluZyIKK21zZ3N0ciAiRTUyNTogTGEgbGxhcmdhZGEgZGUgbGEgY2FkZW5hIOlzIHplcm8iCisKKyM6IG9wdGlvbi5jOjQ5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUyNjogTWlzc2luZyBudW1iZXIgYWZ0ZXIgPCVzPiIKK21zZ3N0ciAiRTUyNjogRmFsdGEgdW4gbvptZXJvIGRlc3By6XMgZGUgPCVzPiIKKworIzogb3B0aW9uLmM6NDk2MworbXNnaWQgIkU1Mjc6IE1pc3NpbmcgY29tbWEiCittc2dzdHIgIkU1Mjc6IEZhbHRhIHVuYSBjb21hIgorCisjOiBvcHRpb24uYzo0OTcwCittc2dpZCAiRTUyODogTXVzdCBzcGVjaWZ5IGEgJyB2YWx1ZSIKK21zZ3N0ciAiRTUyODogSGV1IGQnZXNwZWNpZmljYXIgdW4gdmFsb3IgJyIKKworIzogb3B0aW9uLmM6NTAxMQorbXNnaWQgIkU1OTU6IGNvbnRhaW5zIHVucHJpbnRhYmxlIG9yIHdpZGUgY2hhcmFjdGVyIgorbXNnc3RyICJFNTk1OiBDb2506SB1biBjYXLgY3RlciBubyBpbXByaW1pYmxlIG8gYW1wbGUiCisKKyM6IG9wdGlvbi5jOjUwNjAKK21zZ2lkICJFNTk2OiBJbnZhbGlkIGZvbnQocykiCittc2dzdHIgIkU1OTY6IEVsIHRpcHVzIGRlIGxsZXRyYSBubyDpcyB24GxpZCIKKworIzogb3B0aW9uLmM6NTA2OAorbXNnaWQgIkU1OTc6IGNhbid0IHNlbGVjdCBmb250c2V0IgorbXNnc3RyICJFNTk3OiBObyBzJ2hhIHBvZ3V0IHNlbGVjY2lvbmFyIGVsIGNvbmp1bnQgZGUgdGlwdXMiCisKKyM6IG9wdGlvbi5jOjUwNzAKK21zZ2lkICJFNTk4OiBJbnZhbGlkIGZvbnRzZXQiCittc2dzdHIgIkU1OTg6IEVsIGNvbmp1bnQgZGUgdGlwdXMgZGUgbGxldHJhIG5vIOlzIHbgbGlkIgorCisjOiBvcHRpb24uYzo1MDc3Cittc2dpZCAiRTUzMzogY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAiRTUzMzogTm8gcydoYSBwb2d1dCBzZWxlY2Npb25hciBlbCB0aXB1cyBkZSBsbGV0cmEgYW1wbGUiCisKKyM6IG9wdGlvbi5jOjUwNzkKK21zZ2lkICJFNTM0OiBJbnZhbGlkIHdpZGUgZm9udCIKK21zZ3N0ciAiRTUzNDogRWwgdGlwdXMgZGUgbGxldHJhIGFtcGxlIG5vIOlzIHbgbGlkIgorCisjOiBvcHRpb24uYzo1MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIDwlYz4iCittc2dzdHIgIkU1MzU6IENhcuBjdGVyIGlst2xlZ2FsIGRlc3By6XMgZGUgPCVjPiIKKworIzogb3B0aW9uLmM6NTQ1NAorbXNnaWQgIkU1MzY6IGNvbW1hIHJlcXVpcmVkIgorbXNnc3RyICJFNTM2OiBFcyByZXF1ZXJlaXggdW5hIGNvbWEiCisKKyM6IG9wdGlvbi5jOjU0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzNzogJ2NvbW1lbnRzdHJpbmcnIG11c3QgYmUgZW1wdHkgb3IgY29udGFpbiAlcyIKK21zZ3N0ciAiRTUzNzogTCdvcGNp8yAnY29tbWVudHN0cmluZycgaGEgZCdlc3RhciBpbmRlZmluaWRhIG8gY29udGVuaXIgJXMiCisKKyM6IG9wdGlvbi5jOjU1MzcKK21zZ2lkICJFNTM4OiBObyBtb3VzZSBzdXBwb3J0IgorbXNnc3RyICJFNTM4OiBObyBoaSBoYSBzdXBvcnQgcGVyIHJhdG9s7SIKKworIzogb3B0aW9uLmM6NTgwNQorbXNnaWQgIkU1NDA6IFVuY2xvc2VkIGV4cHJlc3Npb24gc2VxdWVuY2UiCittc2dzdHIgIkU1NDA6IExhIHNlcfzobmNpYSBkJ2V4cHJlc3Npb25zIG5vIGVzdOAgYWNhYmFkYSIKKworIzogb3B0aW9uLmM6NTgwOQorbXNnaWQgIkU1NDE6IHRvbyBtYW55IGl0ZW1zIgorbXNnc3RyICJFNTQxOiBIaSBoYW4gbWFzc2Eg7XRlbXMiCisKKyM6IG9wdGlvbi5jOjU4MTEKK21zZ2lkICJFNTQyOiB1bmJhbGFuY2VkIGdyb3VwcyIKK21zZ3N0ciAiRTU0MjogR3J1cHMgZGVzZXF1aWxpYnJhdHMiCisKKyM6IG9wdGlvbi5jOjYwMzIKK21zZ2lkICJFNTkwOiBBIHByZXZpZXcgd2luZG93IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFNTkwOiBKYSBoaSBoYSB1bmEgZmluZXN0cmEgZGUgdmlzdGEgcHLodmlhIgorCisjOiBvcHRpb24uYzo2Mjg5Cittc2dpZCAiVzE3OiBBcmFiaWMgcmVxdWlyZXMgVVRGLTgsIGRvICc6c2V0IGVuY29kaW5nPXV0Zi04JyIKK21zZ3N0ciAiVzE3OiBMJ+ByYWIgcmVxdWVyZWl4IFVURi04LCBmZXUgJzpzZXQgZW5jb2Rpbmc9dXRmLTgnIgorCisjOiBvcHRpb24uYzo2NjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTM6IE5lZWQgYXQgbGVhc3QgJWQgbGluZXMiCittc2dzdHIgIkU1OTM6IEVzIG5lY2Vzc2l0ZW4gY29tIGEgbe1uaW0gJWQgbO1uaWVzIgorCisjOiBvcHRpb24uYzo2NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTQ6IE5lZWQgYXQgbGVhc3QgJWQgY29sdW1ucyIKK21zZ3N0ciAiRTU5NDogRXMgbmVjZXNzaXRlbiBjb20gYSBt7W5pbSAlZCBjb2x1bW5lcyIKKworIzogb3B0aW9uLmM6NjkyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU1OiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUzNTU6IEwnb3BjafMg6XMgZGVzY29uZWd1ZGE6ICVzIgorCisjOiBvcHRpb24uYzo3MDI5Cittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBjb2RlcyAtLS0iCittc2dzdHIgIlxuLS0tIENvZGlzIGRlIHRlcm1pbmFsIC0tLSIKKworIzogb3B0aW9uLmM6NzAzMQorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICJcbi0tLSBWYWxvcnMgZGUgbGVzIG9wY2lvbnMgZ2xvYmFscyAtLS0iCisKKyM6IG9wdGlvbi5jOjcwMzMKK21zZ2lkICIiCisiXG4iCisiLS0tIExvY2FsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICJcbi0tLSBWYWxvcnMgZGUgbGVzIG9wY2lvbnMgbG9jYWxzIC0tLSIKKworIzogb3B0aW9uLmM6NzAzNQorbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIlxuLS0tIE9wY2lvbnMgLS0tIgorCisjOiBvcHRpb24uYzo3NzM2Cittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6IEVycm9yIGVuIGdldF92YXJwKCkiCisKKyM6IG9wdGlvbi5jOjg3MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NzogJ2xhbmdtYXAnOiBNYXRjaGluZyBjaGFyYWN0ZXIgbWlzc2luZyBmb3IgJXMiCittc2dzdHIgIkUzNTc6ICdsYW5nbWFwJzogTm8gcydoYSB0cm9iYXQgZWwgY2Fy4GN0ZXIgY29ycmVzcG9uZW50IGEgJXMiCisKKyM6IG9wdGlvbi5jOjg3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1ODogJ2xhbmdtYXAnOiBFeHRyYSBjaGFyYWN0ZXJzIGFmdGVyIHNlbWljb2xvbjogJXMiCittc2dzdHIgIkUzNTg6ICdsYW5nbWFwJzogU29icmVuIGNhcuBjdGVycyBkZXNwculzIGRlbCBwdW50IGkgY29tYTogJXMiCisKKyM6IG9zX2FtaWdhLmM6MjczCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyICIKKworIzogb3NfYW1pZ2EuYzozMDcKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06IE5vIHMnaGEgcG9ndXQgb2JyaXIgbGEgZmluZXN0cmEhXG4iCisKKyM6IG9zX2FtaWdhLmM6MzI5Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAiRXMgcmVxdWVyZWl4IEFtaWdhZG9zIHZlcnNp8yAyLjA0IG8gcG9zdGVyaW9yXG4iCisKKyM6IG9zX2FtaWdhLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgJXMgdmVyc2lvbiAlbGRcbiIKK21zZ3N0ciAiRXMgcmVxdWVyZWl4ICVzIHZlcnNp8yAlbGRcbiIKKworIzogb3NfYW1pZ2EuYzo0MDcKK21zZ2lkICJDYW5ub3Qgb3BlbiBOSUw6XG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2JyaXIgTklMOlxuIgorCisjOiBvc19hbWlnYS5jOjQxOAorbXNnaWQgIkNhbm5vdCBjcmVhdGUgIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNyZWFyICIKKworIzogb3NfYW1pZ2EuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltIGV4aXRpbmcgd2l0aCAlZFxuIgorbXNnc3RyICJWaW0gaGEgZmluYWxpdHphdCBhbWIgJWRcbiIKKworIzogb3NfYW1pZ2EuYzo5MjgKK21zZ2lkICJjYW5ub3QgY2hhbmdlIGNvbnNvbGUgbW9kZSA/IVxuIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNhbnZpYXIgZWwgbW9kZSBkZSBjb25zb2xhID8hXG4iCisKKyM6IG9zX2FtaWdhLmM6OTk0Cittc2dpZCAibWNoX2dldF9zaGVsbHNpemU6IG5vdCBhIGNvbnNvbGU/P1xuIgorbXNnc3RyICJtY2hfZ2V0X3NoZWxsc2l6ZTogbm8g6XMgdW5hIGNvbnNvbGE/P1xuIgorCisjLiBpZiBWaW0gb3BlbmVkIGEgd2luZG93OiBFeGVjdXRpbmcgYSBzaGVsbCBtYXkgY2F1c2UgY3Jhc2hlcworIzogb3NfYW1pZ2EuYzoxMTQzCittc2dpZCAiRTM2MDogQ2Fubm90IGV4ZWN1dGUgc2hlbGwgd2l0aCAtZiBvcHRpb24iCittc2dzdHIgIkUzNjA6IE5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgbCdpbnTocnByZXQgZCdvcmRyZXMgYW1iIGwnb3BjafMgLWYiCisKKyM6IG9zX2FtaWdhLmM6MTE4NCBvc19hbWlnYS5jOjEyNzQKK21zZ2lkICJDYW5ub3QgZXhlY3V0ZSAiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgIgorCisjOiBvc19hbWlnYS5jOjExODcgb3NfYW1pZ2EuYzoxMjg0Cittc2dpZCAic2hlbGwgIgorbXNnc3RyICJsJ2ludOhycHJldCBkJ29yZHJlcyAiCisKKyM6IG9zX2FtaWdhLmM6MTIwNyBvc19hbWlnYS5jOjEzMDkKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiIGhhIHJldG9ybmF0XG4iCisKKyM6IG9zX2FtaWdhLmM6MTQ1MAorbXNnaWQgIkFOQ0hPUl9CVUZfU0laRSB0b28gc21hbGwuIgorbXNnc3RyICJ1biB2YWxvciBBTkNIT1JfQlVGX1NJWkUgbWFzc2EgcGV0aXQuIgorCisjOiBvc19hbWlnYS5jOjE0NTQKK21zZ2lkICJJL08gRVJST1IiCittc2dzdHIgIkVSUk9SIGQnRS9TIgorCisjOiBvc19tc3dpbi5jOjUxNworbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICIuLi4odHJ1bmNhdCkiCisKKyM6IG9zX21zd2luLmM6NjE5Cittc2dpZCAiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIkwnb3BjafMgJ2NvbHVtbnMnIG5vIOlzIDgwLCBubyBlcyBwb2RlbiBleGVjdXRhciBvcmRyZXMgZXh0ZXJuZXMiCisKKyM6IG9zX21zd2luLmM6MTg1NAorbXNnaWQgIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRTIzNzogTGEgc2VsZWNjafMgZCdpbXByZXNzb3JhIGhhIGZhbGxhdCIKKworIyBhIElNUFJFU1NPUkEgYSBQT1JUID8KKyM6IG9zX21zd2luLmM6MTg5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0byAlcyBvbiAlcyIKK21zZ3N0ciAiYSAlcyBhICVzIgorCisjOiBvc19tc3dpbi5jOjE5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMzogVW5rbm93biBwcmludGVyIGZvbnQ6ICVzIgorbXNnc3RyICJFNjEzOiBUaXB1cyBkZSBsbGV0cmEgZCdpbXByZXNzafMgZGVzY29uZWd1dDogJXMiCisKKyM6IG9zX21zd2luLmM6MTk1OSBvc19tc3dpbi5jOjE5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzODogUHJpbnQgZXJyb3I6ICVzIgorbXNnc3RyICJFMjM4OiBFcnJvciBkJ2ltcHJlc3Np8zogJXMiCisKKyM6IG9zX21zd2luLmM6MTk3MAorbXNnaWQgIlVua25vd24iCittc2dzdHIgIkRlc2NvbmVndXQiCisKKyM6IG9zX21zd2luLmM6MTk5NworIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyAnJXMnIgorbXNnc3RyICJTJ2VzdOAgaW1wcmltaW50ICclcyciCisKKyM6IG9zX21zd2luLmM6MzA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDogQ29uanVudCBkZSBjYXLgY3RlcnMgXCIlc1wiIGlst2xlZ2FsIGVuIGVsIHRpcHVzIFwiJXNcIiIKKworIzogb3NfbXN3aW4uYzozMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDU6IElsbGVnYWwgY2hhciAnJWMnIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDU6IENhcuBjdGVyICclYycgaWy3bGVnYWwgZW4gZWwgdGlwdXMgXCIlc1wiIgorCisjOiBvc19yaXNjb3MuYzoxMjU4Cittc2dpZCAiRTM2NjogSW52YWxpZCAnb3NmaWxldHlwZScgb3B0aW9uIC0gdXNpbmcgVGV4dCIKK21zZ3N0ciAiRTM2NjogTCdvcGNp8yAnb3NmaWxldHlwZScgbm8g6XMgduBsaWRhIC0gcyd1c2EgVGV4dCIKKworIzogb3NfdW5peC5jOjg4NworbXNnaWQgIlZpbTogRG91YmxlIHNpZ25hbCwgZXhpdGluZ1xuIgorbXNnc3RyICJWaW06IFMnaGEgcmVidXQgdW4gZG9ibGUgc2VueWFsLCBzb3J0aW50XG4iCisKKyM6IG9zX3VuaXguYzo4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IFMnaGEgcmVidXQgdW4gc2VueWFsIGxldGFsICVzXG4iCisKKyM6IG9zX3VuaXguYzo4OTYKK21zZ2lkICJWaW06IENhdWdodCBkZWFkbHkgc2lnbmFsXG4iCittc2dzdHIgIlZpbTogUydoYSByZWJ1dCB1biBzZW55YWwgbGV0YWxcbiIKKworIyBkaXNwbGF5CisjOiBvc191bml4LmM6MTE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAiUydoYSB0cmlnYXQgJWxkIG1zZWcgZW4gb2JyaXIgZWwgZGlzcGxheSBYIgorCisjOiBvc191bml4LmM6MTE4NgorbXNnaWQgIiIKKyJcbiIKKyJWaW06IEdvdCBYIGVycm9yXG4iCittc2dzdHIgIlxuVmltOiBFcnJvciBkZSBYXG4iCisKKyMgZGlzcGxheQorIzogb3NfdW5peC5jOjEyOTQKK21zZ2lkICJUZXN0aW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICJIYSBmYWxsYXQgbGEgY29tcHJvdmFjafMgZGVsIGRpc3BsYXkgWCIKKworIyBkaXNwbGF5CisjOiBvc191bml4LmM6MTQzMworbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0aW1lZCBvdXQiCittc2dzdHIgIlMnaGEgZXNnb3RhdCBlbCB0ZW1wcyBtZW50cmUgZXMgdHJhY3RhdmEgZCdvYnJpciBlbCBkaXNwbGF5IFgiCisKKyM6IG9zX3VuaXguYzozMTczIG9zX3VuaXguYzozODUzCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsICIKK21zZ3N0ciAiXG5ObyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIGxhIHNoZWxsICIKKworIzogb3NfdW5peC5jOjMyMjEKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgc2hcbiIKK21zZ3N0ciAiXG5ObyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIGxhIHNoZWxsIHNoXG4iCisKKyM6IG9zX3VuaXguYzozMjI1IG9zX3VuaXguYzozODU5Cittc2dpZCAiIgorIlxuIgorInNoZWxsIHJldHVybmVkICIKK21zZ3N0ciAiXG5sYSBzaGVsbCBoYSByZXRvcm5hdCAiCisKKyM6IG9zX3VuaXguYzozMzYwCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiXG5ObyBzJ2hhbiBwb2d1dCBjcmVhciBjYW5vbmFkZXNcbiIKKworIzogb3NfdW5peC5jOjMzNzUKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGZvcmtcbiIKK21zZ3N0ciAiXG5ObyBzJ2hhIHBvZ3V0IGJpZnVyY2FyXG4iCisKKyM6IG9zX3VuaXguYzozODY2Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgdGVybWluYXRlZFxuIgorbXNnc3RyICJcbkwnb3JkcmUgaGEgZmluYWxpdHphdFxuIgorCisjOiBvc191bml4LmM6NDExOSBvc191bml4LmM6NDI0NCBvc191bml4LmM6NTkwMgorbXNnaWQgIlhTTVAgbG9zdCBJQ0UgY29ubmVjdGlvbiIKK21zZ3N0ciAiWFNNUDogcydoYSBwZXJkdXQgbGEgY29ubmV4afMgSUNFIgorCisjIGRpc3BsYXkKKyM6IG9zX3VuaXguYzo1NDg2Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiSGEgZmFsbGF0IGwnb2JlcnR1cmEgZGVsIGRpc3BsYXkgWCIKKworIzogb3NfdW5peC5jOjU4MDgKK21zZ2lkICJYU01QIGhhbmRsaW5nIHNhdmUteW91cnNlbGYgcmVxdWVzdCIKK21zZ3N0ciAiWFNNUDogcydlc3TgIGR1ZW50IGEgdGVybWUgbGEgcGV0aWNp8yBzYXZlLXlvdXJzZWxmIgorCisjOiBvc191bml4LmM6NTkyNQorbXNnaWQgIlhTTVAgb3BlbmluZyBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QOiBvYnJpbnQgbGEgY29ubmV4afMiCisKKyM6IG9zX3VuaXguYzo1OTQzCittc2dpZCAiWFNNUCBJQ0UgY29ubmVjdGlvbiB3YXRjaCBmYWlsZWQiCittc2dzdHIgIlhTTVA6IEhhIGZhbGxhdCBsJ2luc3BlY2Np8yBkZSBsYSBjb25uZXhp8yBJQ0UiCisKKyM6IG9zX3VuaXguYzo1OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlhTTVAgU21jT3BlbkNvbm5lY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiWFNNUDogSGEgZmFsbGF0IGxhIHJ1dGluYSBTbWNPcGVuQ29ubmVjdGlvbjogJXMiCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgIkEgbGEgbO1uaWEiCisKKyM6IG9zX3czMmV4ZS5jOjY1Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhc3NpZ25hciBtZW3ycmlhIHBlciBsYSBs7W5pYSBkJ29yZHJlcy4iCisKKyM6IG9zX3czMmV4ZS5jOjY2IG9zX3czMmV4ZS5jOjg5IG9zX3czMmV4ZS5jOjEwMAorbXNnaWQgIlZJTSBFcnJvciIKK21zZ3N0ciAiRXJyb3IgZGVsIFZJTSIKKworIzogb3NfdzMyZXhlLmM6ODkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNhcnJlZ2FyIHZpbTMyLmRsbCEiCisKKyM6IG9zX3czMmV4ZS5jOjk5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAiTm8gcydoYW4gcG9ndXQgcmVhc3NpZ25hciBlbHMgcHVudGVycyBkZSBmdW5jaW9ucyBhIGxhIERMTCEiCisKKyM6IG9zX3dpbjE2LmM6MzQxIG9zX3dpbjMyLmM6MzA0OQorIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAibGEgc2hlbGwgaGEgcmV0b3JuYXQgJWQiCisKKyM6IG9zX3dpbjMyLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCAlcyBldmVudFxuIgorbXNnc3RyICJWaW06IFMnaGEgcmVidXQgdW4gZXZlbnQgJXNcbiIKKworIzogb3Nfd2luMzIuYzoyNTA5Cittc2dpZCAiY2xvc2UiCittc2dzdHIgImRlIGZpbmFsaXR6YWNp8yIKKworIzogb3Nfd2luMzIuYzoyNTExCittc2dpZCAibG9nb2ZmIgorbXNnc3RyICJkZSBmaW5hbCBkZSBzZXNzafMiCisKKyM6IG9zX3dpbjMyLmM6MjUxMgorbXNnaWQgInNodXRkb3duIgorbXNnc3RyICJkJ2FwYWdhbWVudCBkZWwgc2lzdGVtYSIKKworIzogb3Nfd2luMzIuYzozMDAyCittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6IE5vIHMnaGEgdHJvYmF0IGwnb3JkcmUiCisKKyM6IG9zX3dpbjMyLmM6MzAxNQorbXNnaWQgIiIKKyJWSU1SVU4uRVhFIG5vdCBmb3VuZCBpbiB5b3VyICRQQVRILlxuIgorIkV4dGVybmFsIGNvbW1hbmRzIHdpbGwgbm90IHBhdXNlIGFmdGVyIGNvbXBsZXRpb24uXG4iCisiU2VlICA6aGVscCB3aW4zMi12aW1ydW4gIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIkVsIHByb2dyYW1hIFZJTVJVTi5FWEUgbm8gZXMgdHJvYmEgZW4gZWwgJFBBVEguXG4iCisiTGVzIG9yZHJlcyBleHRlcm5lcyBubyBmYXJhbiB1bmEgcGF1c2EgdW4gY29wIGZpbmFsaXR6YWRlcy5cbiIKKyJWZWdldSAgOmhlbHAgd2luMzItdmltcnVuICBwZXIgYSBt6XMgaW5mb3JtYWNp8y4iCisKKyM6IG9zX3dpbjMyLmM6MzAxOAorbXNnaWQgIlZpbSBXYXJuaW5nIgorbXNnc3RyICJWaW0gQXRlbmNp8yIKKworIzogcXVpY2tmaXguYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MjogVG9vIG1hbnkgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzcyOiBTb2JyZW4gJSUlYyBhIGxhIGNhZGVuYSBkZSBmb3JtYXQiCisKKyM6IHF1aWNrZml4LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzM6IFVuZXhwZWN0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzczOiAlJSVjIGluZXNwZXJhdCBhIGxhIGNhZGVuYSBkZSBmb3JtYXQiCisKKyM6IHF1aWNrZml4LmM6MzI1Cittc2dpZCAiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNjQ6IEZhbHRhIHVuIF0gYSBsYSBjYWRlbmEgZGUgZm9ybWF0IgorCisjOiBxdWlja2ZpeC5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc1OiBVbnN1cHBvcnRlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzU6ICUlJWMgbm8gc3Vwb3J0YXQgYSBsYSBjYWRlbmEgZGUgZm9ybWF0IgorCisjOiBxdWlja2ZpeC5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiCittc2dzdHIgIkUzNzY6ICUlJWMgbm8gduBsaWQgZW4gZWwgcHJlZml4IGRlIGxhIGNhZGVuYSBkZSBmb3JtYXQiCisKKyM6IHF1aWNrZml4LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzc6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc3OiAlJSVjIG5vIHbgbGlkIGEgbGEgY2FkZW5hIGRlIGZvcm1hdCIKKworIzogcXVpY2tmaXguYzozOTEKK21zZ2lkICJFMzc4OiAnZXJyb3Jmb3JtYXQnIGNvbnRhaW5zIG5vIHBhdHRlcm4iCittc2dzdHIgIkUzNzg6IEwnb3BjafMgJ2Vycm9yZm9ybWF0JyBubyBjb2506SBjYXAgcGF0cvMiCisKKyM6IHF1aWNrZml4LmM6NDk3Cittc2dpZCAiRTM3OTogTWlzc2luZyBvciBlbXB0eSBkaXJlY3RvcnkgbmFtZSIKK21zZ3N0ciAiRTM3OTogRmFsdGEgdW4gbm9tIGRlIGRpcmVjdG9yaSIKKworIzogcXVpY2tmaXguYzo5ODQKK21zZ2lkICJFNTUzOiBObyBtb3JlIGl0ZW1zIgorbXNnc3RyICJFNTUzOiBObyBoaSBoYSBt6XMg7XRlbXMiCisKKyM6IHF1aWNrZml4LmM6MTIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIoJWQgb2YgJWQpJXMlczogIgorbXNnc3RyICIoJWQgZGUgJWQpJXMlczogIgorCisjOiBxdWlja2ZpeC5jOjEyMjMKK21zZ2lkICIgKGxpbmUgZGVsZXRlZCkiCittc2dzdHIgIiAobO1uaWEgZWxpbWluYWRhKSIKKworIzogcXVpY2tmaXguYzoxNDMyCittc2dpZCAiRTM4MDogQXQgYm90dG9tIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgwOiBCYWl4IGRlIGxhIHBpbGEgcXVpY2tmaXgiCisKKyM6IHF1aWNrZml4LmM6MTQ0MQorbXNnaWQgIkUzODE6IEF0IHRvcCBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MTogRGFsdCBkZSBsYSBwaWxhIHF1aWNrZml4IgorCisjOiBxdWlja2ZpeC5jOjE0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgbGlzdCAlZCBvZiAlZDsgJWQgZXJyb3JzIgorbXNnc3RyICJsbGlzdGEgZCdlcnJvcnMgJWQgZGUgJWQ7ICVkIGVycm9ycyIKKworIzogcXVpY2tmaXguYzoxOTI3Cittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4MjogTm8gcydoYSBwb2d1dCBlc2NyaXVyZSwgbCdvcGNp8yAnYnVmdHlwZScgbm8gZXN04CBkZWZpbmlkYSIKKworIzogcmVnZXhwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjk6IGludmFsaWQgaXRlbSBpbiAlcyUlW10iCittc2dzdHIgIkUzNjk6IM10ZW0gbm8gduBsaWQgYSAlcyUlW10iCisKKyM6IHJlZ2V4cC5jOjgyNworbXNnaWQgIkUzMzk6IFBhdHRlcm4gdG9vIGxvbmciCittc2dzdHIgIkUzMzk6IEVsIHBhdHLzIOlzIG1hc3NhIGxsYXJnIgorCisjOiByZWdleHAuYzo5OTYKK21zZ2lkICJFNTA6IFRvbyBtYW55IFxceigiCittc2dzdHIgIkU1MDogU29icmVuIFxceigiCisKKyM6IHJlZ2V4cC5jOjEwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUxOiBUb28gbWFueSAlcygiCittc2dzdHIgIkU1MTogU29icmVuICVzKCIKKworIzogcmVnZXhwLmM6MTA2NAorbXNnaWQgIkU1MjogVW5tYXRjaGVkIFxceigiCittc2dzdHIgIkU1MjogXFx6KCBkZXNlcXVpbGlicmF0IgorCisjOiByZWdleHAuYzoxMDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzogVW5tYXRjaGVkICVzJSUoIgorbXNnc3RyICJFNTM6ICVzJSUoIGRlc2VxdWlsaWJyYXQiCisKKyM6IHJlZ2V4cC5jOjEwNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU0OiBVbm1hdGNoZWQgJXMoIgorbXNnc3RyICJFNTQ6ICVzKCBkZXNlcXVpbGlicmF0IgorCisjOiByZWdleHAuYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTogVW5tYXRjaGVkICVzKSIKK21zZ3N0ciAiRTU1OiAlcykgZGVzZXF1aWxpYnJhdCIKKworIzogcmVnZXhwLmM6MTI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY6ICVzKiBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTY6IEwnb3BlcmFuZCAlcyogcG9kcmlhIGVzdGFyIGJ1aXQiCisKKyM6IHJlZ2V4cC5jOjEyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3OiAlcysgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU3OiBMJ29wZXJhbmQgJXMrIHBvZHJpYSBlc3RhciBidWl0IgorCisjOiByZWdleHAuYzoxMzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTogaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXNAIgorbXNnc3RyICJFNTk6IEhpIGhhIHVuIGNhcuBjdGVyIG5vIHbgbGlkIGRlc3By6XMgZGUgJXNAIgorCisjOiByZWdleHAuYzoxMzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1ODogJXN7IG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1ODogTCdvcGVyYW5kICVzeyBwb2RyaWEgZXN0YXIgYnVpdCIKKworIzogcmVnZXhwLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA6IFRvbyBtYW55IGNvbXBsZXggJXN7Li4ufXMiCittc2dzdHIgIkU2MDogTGEgY29uc3RydWNjafMgJXN7Li4ufSDpcyBtYXNzYSBjb21wbGV4YSIKKworIzogcmVnZXhwLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE6IE5lc3RlZCAlcyoiCittc2dzdHIgIkU2MTogJXMqIGltYnJpY2F0cyIKKworIzogcmVnZXhwLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI6IE5lc3RlZCAlcyVjIgorbXNnc3RyICJFNjI6ICVzJWMgaW1icmljYXRzIgorCisjOiByZWdleHAuYzoxNDczCittc2dpZCAiRTYzOiBpbnZhbGlkIHVzZSBvZiBcXF8iCittc2dzdHIgIkU2Mzog2nMgbm8gduBsaWQgZGUgXFxfIgorCisjOiByZWdleHAuYzoxNTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU0NjogTm8gaGEgaGEgcmVzIGFiYW5zIGRlICVzJWMiCisKKyM6IHJlZ2V4cC5jOjE1NzQKK21zZ2lkICJFNjU6IElsbGVnYWwgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIkU2NTogUmVmZXLobmNpYSBpbLdsZWdhbCBhIGwnZWxlbWVudCBhbnRlcmlvciIKKworIzogcmVnZXhwLmM6MTU4NworbXNnaWQgIkU2NjogXFx6KCBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNjY6IFxceiggbm8gZXN04CBwZXJt6HMgYXF17SIKKworIzogcmVnZXhwLmM6MTYwNgorbXNnaWQgIkU2NzogXFx6MSBldCBhbC4gbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY3OiBcXHoxIGV0IGFsLiBubyBlc3RhbiBwZXJtZXNvcyBhcXXtIgorCisjOiByZWdleHAuYzoxNjE3Cittc2dpZCAiRTY4OiBJbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXHoiCittc2dzdHIgIkU2ODogSGkgaGEgdW4gY2Fy4GN0ZXIgbm8gduBsaWQgZGVzcHLpcyBkZSBcXHoiCisKKyM6IHJlZ2V4cC5jOjE2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY5OiBNaXNzaW5nIF0gYWZ0ZXIgJXMlJVsiCittc2dzdHIgIkU2OTogRmFsdGEgdW4gXSBkZXNwculzIGRlICVzJSVbIgorCisjOiByZWdleHAuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MDogRW1wdHkgJXMlJVtdIgorbXNnc3RyICJFNzA6IEVsZW1lbnQgJXMlJVtdIGJ1aXQiCisKKyM6IHJlZ2V4cC5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTcxOiBJbnZhbGlkIGNoYXJhY3RlciBhZnRlciAlcyUlIgorbXNnc3RyICJFNzE6IEhpIGhhIHVuIGNhcuBjdGVyIGluduBsaWQgZGVzcHLpcyBkZSAlcyUlIgorCisjOiByZWdleHAuYzoyNTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTQ6IFN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICJFNTU0OiBFcnJvciBkZSBzaW50YXhpIGEgJXN7Li4ufSIKKworIzogcmVnZXhwLmM6MjgwMAorbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiBQcm9ncmFtYSBpbmVzdGFibGU7IGV4cHJlc3Np8yByZWd1bGFyIG1hc3NhIGNvbXBsZXhhPyIKKworIzogcmVnZXhwLmM6Mjk0MQorbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2MzogRWwgcGF0cvMgaGEgcHJvdm9jYXQgdW4gZXJyb3IgZGUgZGVzYm9yZGFtZW50IGRlIHBpbGEiCisKKyM6IHJlZ2V4cC5jOjMxODAKK21zZ2lkICJFeHRlcm5hbCBzdWJtYXRjaGVzOlxuIgorbXNnc3RyICJTdWJjb2luY2lk6G5jaWVzIGV4dGVybmVzOlxuIgorCisjOiBzY3JlZW4uYzoyMTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIistLSUzbGQgbGluZXMgZm9sZGVkICIKK21zZ3N0ciAiKy0tJTNsZCBs7W5pZXMgcGxlZ2FkZXMgIgorCisjOiBzY3JlZW4uYzo3ODkyCittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgU1VCU1RJVFVJUlYiCisKKyM6IHNjcmVlbi5jOjc4OTYKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIFNVQlNUSVRVSVIiCisKKyMgRW4gZWwgbW9kZSBkJ2VzY3JpcHR1cmEgZGUgZHJldGEgYSBlc3F1ZXJyYQorIyBzdXJ0IGVsIG1pc3NhdGdlIKtSRVZFUlNFIElOU0VSVLsKKyM6IHNjcmVlbi5jOjc5MDEKK21zZ2lkICIgUkVWRVJTRSIKK21zZ3N0ciAiIElOVkVSUyIKKworIzogc2NyZWVuLmM6NzkwMworbXNnaWQgIiBJTlNFUlQiCittc2dzdHIgIiBJTlNFUklSIgorCisjOiBzY3JlZW4uYzo3OTA2Cittc2dpZCAiIChpbnNlcnQpIgorbXNnc3RyICIgKGluc2VyaXIpIgorCisjOiBzY3JlZW4uYzo3OTA4Cittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiIChzdWJzdGl0dWlyKSIKKworIzogc2NyZWVuLmM6NzkxMAorbXNnaWQgIiAodnJlcGxhY2UpIgorbXNnc3RyICIgKHN1YnN0aXR1aXJ2KSIKKworIzogc2NyZWVuLmM6NzkxMworbXNnaWQgIiBIZWJyZXciCittc2dzdHIgIiBIZWJyZXUiCisKKyM6IHNjcmVlbi5jOjc5MjQKK21zZ2lkICIgQXJhYmljIgorbXNnc3RyICIgwHJhYiIKKworIzogc2NyZWVuLmM6NzkyNworbXNnaWQgIiAobGFuZykiCittc2dzdHIgIiAobGFuZykiCisKKyM6IHNjcmVlbi5jOjc5MzEKK21zZ2lkICIgKHBhc3RlKSIKK21zZ3N0ciAiIChlbmdhbnhhcikiCisKKyM6IHNjcmVlbi5jOjc5MzcKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIgU0VMRUNDSU9OQVIiCisKKyM6IHNjcmVlbi5jOjc5MzkKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgVklTVUFMIgorCisjOiBzY3JlZW4uYzo3OTQxCittc2dpZCAiIEJMT0NLIgorbXNnc3RyICIgQkxPQyIKKworIzogc2NyZWVuLmM6Nzk0MworbXNnaWQgIiBMSU5FIgorbXNnc3RyICIgTM1OSUEiCisKKyM6IHNjcmVlbi5jOjc5NTYgc2NyZWVuLmM6ODAxNgorbXNnaWQgInJlY29yZGluZyIKK21zZ3N0ciAiZW5yZWdpc3RyYW50IgorCisjOiBzZWFyY2guYzozNgorbXNnaWQgInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIKK21zZ3N0ciAibGEgY2VyY2EgaGEgYXJyaWJhdCBhIERBTFQsIGVzIGNvbnRpbnVhIGEgQkFJWCIKKworIzogc2VhcmNoLmM6MzcKK21zZ2lkICJzZWFyY2ggaGl0IEJPVFRPTSwgY29udGludWluZyBhdCBUT1AiCittc2dzdHIgImxhIGNlcmNhIGhhIGFycmliYXQgYSBCQUlYLCBlcyBjb250aW51YSBhIERBTFQiCisKKyM6IHNlYXJjaC5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzgzOiBJbnZhbGlkIHNlYXJjaCBzdHJpbmc6ICVzIgorbXNnc3RyICJFMzgzOiBDYWRlbmEgZGUgY2VyY2Egbm8gduBsaWRhOiAlcyIKKworIzogc2VhcmNoLmM6ODUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODQ6IHNlYXJjaCBoaXQgVE9QIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NDogbGEgY2VyY2EgaGEgYXJyaWJhdCBhIERBTFQgc2Vuc2UgcmVzdWx0YXRzIHBlcjogJXMiCisKKyM6IHNlYXJjaC5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg1OiBzZWFyY2ggaGl0IEJPVFRPTSB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODU6IGxhIGNlcmNhIGhhIGFycmliYXQgYSBCQUlYIHNlbnNlIHJlc3VsdGF0cyBwZXI6ICVzIgorCisjOiBzZWFyY2guYzoxMjQ3Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiBTJ2VzcGVyYXZhICc/JyBvICcvJyBkZXNwculzIGRlICc7JyIKKworIzogc2VhcmNoLmM6MzY4NQorbXNnaWQgIiAoaW5jbHVkZXMgcHJldmlvdXNseSBsaXN0ZWQgbWF0Y2gpIgorbXNnc3RyICIgKGluY2xvdSByZXN1bHRhdHMgbGxpc3RhdHMgYW50ZXJpb3JtZW50KSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNzA1Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIEZpdHhlcnMgaW5jbG9zb3MgIgorCisjOiBzZWFyY2guYzozNzA3Cittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAibm8gcydoYSB0cm9iYXQiCisKKyM6IHNlYXJjaC5jOjM3MDgKK21zZ2lkICJpbiBwYXRoIC0tLVxuIgorbXNnc3RyICJlbiBlbCBwYXRoIC0tLVxuIgorCisjOiBzZWFyY2guYzozNzQ3Cittc2dpZCAiICAoQWxyZWFkeSBsaXN0ZWQpIgorbXNnc3RyICIgIChKYSBzJ2hhdmlhIGxsaXN0YXQpIgorCisjOiBzZWFyY2guYzozNzQ5Cittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiAgTk8gVFJPQkFUIgorCisjOiBzZWFyY2guYzozODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGluY2x1ZGVkIGZpbGU6ICVzIgorbXNnc3RyICJFeGFtaW5hbnQgZWwgZml0eGVyIGluY2zyczogJXMiCisKKyM6IHNlYXJjaC5jOjQwMTkKK21zZ2lkICJFMzg3OiBNYXRjaCBpcyBvbiBjdXJyZW50IGxpbmUiCittc2dzdHIgIkUzODc6IEVsIHJlc3VsdGF0IGVzIHRyb2JhIGEgbGEgbO1uaWEgYWN0dWFsIgorCisjOiBzZWFyY2guYzo0MTYyCittc2dpZCAiQWxsIGluY2x1ZGVkIGZpbGVzIHdlcmUgZm91bmQiCittc2dzdHIgIlMnaGFuIHRyb2JhdCB0b3RzIGVscyBmaXR4ZXJzIGluY2xvc29zIgorCisjOiBzZWFyY2guYzo0MTY0Cittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIk5vIGhpIGhhbiBmaXR4ZXJzIGluY2xvc29zIgorCisjOiBzZWFyY2guYzo0MTgwCittc2dpZCAiRTM4ODogQ291bGRuJ3QgZmluZCBkZWZpbml0aW9uIgorbXNnc3RyICJFMzg4OiBObyBzJ2hhIHRyb2JhdCBsYSBkZWZpbmljafMiCisKKyM6IHNlYXJjaC5jOjQxODIKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IE5vIHMnaGEgdHJvYmF0IGVsIHBhdHLzIgorCisjOiBzeW50YXguYzozMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTA6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMzkwOiBMJ2FyZ3VtZW50IOlzIGlst2xlZ2FsOiAlcyIKKworIzogc3ludGF4LmM6MzE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkxOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MTogTm8gZXhpc3RlaXggdGFsIGdydXAgZGUgc2ludGF4aTogJXMiCisKKyM6IHN5bnRheC5jOjMzNTkKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgIk5vIGhpIGhhIO10ZW1zIGRlIHNpbnRheGkgZGVmaW5pdHMgZW4gYXF1ZXN0IGJ1ZmZlciIKKworIzogc3ludGF4LmM6MzM2NworbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAicydlc3TgIHNpbmNyb25pdHphbnQgYSBwYXJ0aXIgZGUgY29tZW50YXJpcyBlc3RpbCBDIgorCisjOiBzeW50YXguYzozMzc1Cittc2dpZCAibm8gc3luY2luZyIKK21zZ3N0ciAibm8gZXMgc2luY3Jvbml0emEiCisKKyMgdmEganVudGEgYW1iIGxhIHNlZ/xlbnQKKyM6IHN5bnRheC5jOjMzNzgKK21zZ2lkICJzeW5jaW5nIHN0YXJ0cyAiCittc2dzdHIgImNvbWVu52EgbGEgc2luY3Jvbml0emFjafMiCisKKyMgdmEganVudGEgYW1iIGwnYW50ZXJpb3IKKyM6IHN5bnRheC5jOjMzODAgc3ludGF4LmM6MzQ1NQorbXNnaWQgIiBsaW5lcyBiZWZvcmUgdG9wIGxpbmUiCittc2dzdHIgIiBs7W5pZXMgYWJhbnMgZGUgbGEgbO1uaWEgc3VwZXJpb3IiCisKKyM6IHN5bnRheC5jOjMzODUKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIKK21zZ3N0ciAiXG4tLS0gzXRlbXMgZGUgc2luY3Jvbml0emFjafMgZGUgc2ludGF4aSAtLS0iCisKKyM6IHN5bnRheC5jOjMzOTAKK21zZ2lkICIiCisiXG4iCisic3luY2luZyBvbiBpdGVtcyIKK21zZ3N0ciAiXG5zJ2VzdOAgc2luY3Jvbml0emFudCBhIHBhcnRpciBkJ+10ZW1zIgorCisjOiBzeW50YXguYzozMzk2Cittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICJcbi0tLSDNdGVtcyBkZSBzaW50YXhpIC0tLSIKKworIzogc3ludGF4LmM6MzQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MjogTm8gZXhpc3RlaXggdGFsIGdydXAgZGUgc2ludGF4aTogJXMiCisKKyM6IHN5bnRheC5jOjM0NDUKK21zZ2lkICJtaW5pbWFsICIKK21zZ3N0ciAibe1uaW0gIgorCisjOiBzeW50YXguYzozNDUyCittc2dpZCAibWF4aW1hbCAiCittc2dzdHIgIm3geGltICIKKworIzogc3ludGF4LmM6MzQ2NAorbXNnaWQgIjsgbWF0Y2ggIgorbXNnc3RyICI7IGNvaW5jaWTobmNpYSAiCisKKyM6IHN5bnRheC5jOjM0NjYKK21zZ2lkICIgbGluZSBicmVha3MiCittc2dzdHIgIiBzYWx0cyBkZSBs7W5pYSIKKworIzogc3ludGF4LmM6NDEwMAorbXNnaWQgIkUzOTM6IGdyb3VwW3RdaGVyZSBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5MzogTCdvcGNp8yBncm91cFt0XWhlcmUgbm8gcydhY2NlcHRhIGFxde0iCisKKyM6IHN5bnRheC5jOjQxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiBObyBzJ2hhIHRyb2JhdCBjYXAgcmVnafMgZCftdGVtcyBwZXIgJXMiCisKKyM6IHN5bnRheC5jOjQxNTIKK21zZ2lkICJFMzk1OiBjb250YWlucyBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NTogQ29udOkgdW4gYXJndW1lbnQgcXVlIG5vIHMnYWNjZXB0YSBhcXXtIgorCisjOiBzeW50YXguYzo0MTYzCittc2dpZCAiRTM5NjogY29udGFpbmVkaW4gYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTY6IEwnYXJndW1lbnQgJ2NvbnRhaW5lZGluJyBubyBzJ2FjY2VwdGEgYXF17SIKKworIzogc3ludGF4LmM6NDI0MQorbXNnaWQgIkUzOTc6IEZpbGVuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMzk3OiBFcyByZXF1ZXJlaXggdW4gbm9tIGRlIGZpdHhlciIKKworIzogc3ludGF4LmM6NDU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk4OiBNaXNzaW5nICc9JzogJXMiCittc2dzdHIgIkUzOTg6IEZhbHRhIHVuICc9JzogJXMiCisKKyMgJ3N5bnRheCByZWdpb24nIOlzIHVuYSBvcmRyZQorIzogc3ludGF4LmM6NDczNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogRmFsdGVuIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKKworIzogc3ludGF4LmM6NTA2OAorbXNnaWQgIkU0MDA6IE5vIGNsdXN0ZXIgc3BlY2lmaWVkIgorbXNnc3RyICJFNDAwOiBObyBoZXUgZXNwZWNpZmljYXQgY2FwIGdydXAiCisKKyM6IHN5bnRheC5jOjUxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMTogUGF0dGVybiBkZWxpbWl0ZXIgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQwMTogTm8gcydoYSB0cm9iYXQgZWwgcGF0cvMgZGUgZGVsaW1pdGFjafM6ICVzIgorCisjOiBzeW50YXguYzo1MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDI6IEdhcmJhZ2UgYWZ0ZXIgcGF0dGVybjogJXMiCittc2dzdHIgIkU0MDI6IEhpIGhhIHBvcnF1ZXJpYSBkZXNwculzIGRlbCBwYXRy8zogJXMiCisKKyM6IHN5bnRheC5jOjUyNzAKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiBzeW50YXggc3luYzogZWwgcGF0cvMgZGUgY29udGludWFjafMgZGUgbO1uaWEgZXN04CByZXBldGl0IgorCisjOiBzeW50YXguYzo1MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDQ6IElsbGVnYWwgYXJndW1lbnRzOiAlcyIKK21zZ3N0ciAiRTQwNDogQXJndW1lbnRzIGlst2xlZ2FsczogJXMiCisKKyM6IHN5bnRheC5jOjUzNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNTogTWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQwNTogRmFsdGEgdW4gc2lnbmUgZCdpZ3VhbDogJXMiCisKKyM6IHN5bnRheC5jOjUzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNjogRW1wdHkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDA2OiBBcmd1bWVudCBidWl0OiAlcyIKKworIzogc3ludGF4LmM6NTQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA3OiAlcyBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNDAyOiAlcyBubyBlc3TgIHBlcm3ocyBhcXXtIgorCisjOiBzeW50YXguYzo1NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDg6ICVzIG11c3QgYmUgZmlyc3QgaW4gY29udGFpbnMgbGlzdCIKK21zZ3N0ciAiRTQwODogJXMgaGEgZCdhbmFyIGFsIHByaW5jaXBpIGRlIGxhIGxsaXN0YSAnY29udGFpbnMnIgorCisjOiBzeW50YXguYzo1NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDk6IFVua25vd24gZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkU0MDk6IEVsIG5vbSBkZWwgZ3J1cCDpcyBkZXNjb25lZ3V0OiAlcyIKKworIzogc3ludGF4LmM6NTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEwOiBJbnZhbGlkIDpzeW50YXggc3ViY29tbWFuZDogJXMiCittc2dzdHIgIkU0MTA6IFN1Yi1vcmRyZSBkZSBzaW50YXhpIG5vIHbgbGlkYTogJXMiCisKKyM6IHN5bnRheC5jOjYwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMTogaGlnaGxpZ2h0IGdyb3VwIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MTE6IE5vIHMnaGEgdHJvYmF0IGVsIGdydXAgZGUgcmVzc2FsdDogJXMiCisKKyM6IHN5bnRheC5jOjYxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMjogTm90IGVub3VnaCBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTI6IEZhbHRlbiBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMzogVG9vIG1hbnkgYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEzOiBTb2JyZW4gYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTUwCittc2dpZCAiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIgorbXNnc3RyICJFNDE0OiBFbCBncnVwIGphIGhhIGVzdGF0IGRlZmluaXQsIHMnaWdub3JhIGwnZW5sbGHnIGRlIHJlc3NhbHQiCisKKyM6IHN5bnRheC5jOjYyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNTogdW5leHBlY3RlZCBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNTogU2lnbmUgZCdpZ3VhbCBpbmVzcGVyYXQ6ICVzIgorCisjOiBzeW50YXguYzo2MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IEZhbHRhIHVuIHNpZ25lIGQnaWd1YWw6ICVzIgorCisjOiBzeW50YXguYzo2MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTc6IG1pc3NpbmcgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDE3OiBGYWx0YSB1biBhcmd1bWVudDogJXMiCisKKyM6IHN5bnRheC5jOjYzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6IEVsIHZhbG9yIOlzIGlst2xlZ2FsOiAlcyIKKworIzogc3ludGF4LmM6NjQ5MworbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6IENvbG9yIGRlIHByaW1lciB0ZXJtZSBkZXNjb25lZ3V0IgorCisjOiBzeW50YXguYzo2NTA0Cittc2dpZCAiRTQyMDogQkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQyMDogQ29sb3IgZGUgZm9ucyBkZXNjb25lZ3V0IgorCisjOiBzeW50YXguYzo2NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjE6IENvbG9yIG5hbWUgb3IgbnVtYmVyIG5vdCByZWNvZ25pemVkOiAlcyIKK21zZ3N0ciAiRTQyMTogTm9tIG8gbvptZXJvIGRlIGNvbG9yIG5vIGlkZW50aWZpY2F0OiAlcyIKKworIzogc3ludGF4LmM6Njc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIyOiB0ZXJtaW5hbCBjb2RlIHRvbyBsb25nOiAlcyIKK21zZ3N0ciAiRTQyMjogRWwgY29kaSBkZSB0ZXJtaW5hbCDpcyBtYXNzYSBsbGFyZzogJXMiCisKKyM6IHN5bnRheC5jOjY4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMzogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MjM6IEwnYXJndW1lbnQg6XMgaWy3bGVnYWw6ICVzIgorCisjOiBzeW50YXguYzo3MzQ3Cittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDogSGkgaGEgbWFzc2EgYXRyaWJ1dHMgZGUgcmVzc2FsdCBkaWZlcmVudHMgZW4g+nMiCisKKyM6IHRhZy5jOjkwCittc2dpZCAiRTU1NTogYXQgYm90dG9tIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiRTU1NTogQmFpeCBkZSBsYSBwaWxhIGQnZXRpcXVldGVzIgorCisjOiB0YWcuYzo5MQorbXNnaWQgIkU1NTY6IGF0IHRvcCBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTY6IERhbHQgZGUgbGEgcGlsYSBkJ2V0aXF1ZXRlcyIKKworIzogdGFnLmM6Mzk2Cittc2dpZCAiRTQyNTogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0MjU6IE5vIGVzIHBvdCBhbmFyIGFiYW5zIGRlIGxhIHByaW1lcmEgZXRpcXVldGEgY29pbmNpZGVudCIKKworIzogdGFnLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjY6IHRhZyBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDI2OiBObyBzJ2hhIHRyb2JhdCBsJ2V0aXF1ZXRhOiAlcyIKKworIzogdGFnLmM6NTQ5Cittc2dpZCAiICAjIHByaSBraW5kIHRhZyIKK21zZ3N0ciAiICAjIHByaSB0aXAgIGV0aXF1ZXRhIgorCisjOiB0YWcuYzo1NTIKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgImZpdHhlclxuIgorCisjLgorIy4gKiBBc2sgdG8gc2VsZWN0IGEgdGFnIGZyb20gdGhlIGxpc3QuCisjLiAqIFdoZW4gdXNpbmcgIjpzaWxlbnQiIGFzc3VtZSB0aGF0IDxDUj4gd2FzIGVudGVyZWQuCisjLgorIzogdGFnLmM6NzEwCittc2dpZCAiRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KTogIgorbXNnc3RyICJFbnRyZXUgdW4gbvptZXJvICg8RW50cmFyPiBwZXIgYXZvcnRhcik6ICIKKworIzogdGFnLmM6NzUwCittc2dpZCAiRTQyNzogVGhlcmUgaXMgb25seSBvbmUgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI3OiBOb23pcyBoaSBoYSB1bmEgc29sYSBldGlxdWV0YSBxdWUgY29pbmNpZGVpeGkiCisKKyM6IHRhZy5jOjc1MgorbXNnaWQgIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjg6IE5vIGVzIHBvdCBhbmFyIG3pcyBlbmxs4CBkZSBsJ/psdGltYSBldGlxdWV0YSBjb2luY2lkZW50IgorCisjOiB0YWcuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkVsIGZpdHhlciBcIiVzXCIgbm8gZXhpc3RlaXgiCisKKyMuIEdpdmUgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIHRhZ3MKKyM6IHRhZy5jOjc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJWQgb2YgJWQlcyIKK21zZ3N0ciAiZXRpcXVldGEgJWQgZGUgJWQlcyIKKworIzogdGFnLmM6Nzg4Cittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiBvIG3pcyIKKworIzogdGFnLmM6NzkwCittc2dpZCAiICBVc2luZyB0YWcgd2l0aCBkaWZmZXJlbnQgY2FzZSEiCittc2dzdHIgIiAgTm8gZXMgZmEgZGlzdGluY2nzIGVudHJlIG1havpzY3VsZXMgaSBtaW76c2N1bGVzISIKKworIzogdGFnLmM6ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Mjk6IEZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFNDI5OiBFbCBmaXR4ZXIgXCIlc1wiIG5vIGV4aXN0ZWl4IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRhZy5jOjkwMworbXNnaWQgIiIKKyJcbiIKKyIgICMgVE8gdGFnICAgICAgICAgRlJPTSBsaW5lICBpbiBmaWxlL3RleHQiCittc2dzdHIgIlxuICAjICBBIGV0aXEgICAgIERFUyBERSBs7W5pYSAgZW4gZml0eGVyL3RleHQiCisKKyM6IHRhZy5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIHRhZ3MgZmlsZSAlcyIKK21zZ3N0ciAiQ2VyY2FudCBlbiBlbCBmaXR4ZXIgZCdldGlxdWV0ZXMgJXMiCisKKyM6IHRhZy5jOjEzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IFMnaGEgdHJ1bmNhdCBsJ3ViaWNhY2nzIGRlbCBmaXR4ZXIgZCdldGlxdWV0ZXMgcGVyICVzXG4iCisKKyM6IHRhZy5jOjE5MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMTogRm9ybWF0IGVycm9yIGluIHRhZ3MgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0MzE6IEVycm9yIGRlIGZvcm1hdCBlbiBlbCBmaXR4ZXIgZCdldGlxdWV0ZXMgXCIlc1wiIgorCisjOiB0YWcuYzoxOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZm9yZSBieXRlICVsZCIKK21zZ3N0ciAiQWJhbnMgZGUgbCdvY3RldCAlbGQiCisKKyM6IHRhZy5jOjE5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMjogVGFncyBmaWxlIG5vdCBzb3J0ZWQ6ICVzIgorbXNnc3RyICJFNDMyOiBFbCBmaXR4ZXIgZCdldGlxdWV0ZXMgbm8gZXN04CBvcmRlbmF0OiAlcyIKKworIy4gbmV2ZXIgb3BlbmVkIGFueSB0YWdzIGZpbGUKKyM6IHRhZy5jOjE5ODMKK21zZ2lkICJFNDMzOiBObyB0YWdzIGZpbGUiCittc2dzdHIgIkU0MzM6IE5vIGhpIGhhIGNhcCBmaXR4ZXIgZCdldGlxdWV0ZXMiCisKKyM6IHRhZy5jOjI2ODQKK21zZ2lkICJFNDM0OiBDYW4ndCBmaW5kIHRhZyBwYXR0ZXJuIgorbXNnc3RyICJFNDM0OiBObyBzJ2hhIHRyb2JhdCBsJ2V0aXF1ZXRhIgorCisjOiB0YWcuYzoyNjk1Cittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiBObyBzJ2hhIHRyb2JhdCBsJ2V0aXF1ZXRhIGV4YWN0YSEiCisKKyMgq3Rlcm1pbmFsuyDpcyBtYXNjdWztCisjOiB0ZXJtLmM6MTc0NQorbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiJyBubyBpZGVudGlmaWNhdC4gRWxzIHRlcm1pbmFscyBkaXNwb25pYmxlcyBz8246IgorCisjOiB0ZXJtLmM6MTc2OQorbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAicGVyIG9taXNzafMgJyIKKworIzogdGVybS5jOjIxMjcKK21zZ2lkICJFNTU3OiBDYW5ub3Qgb3BlbiB0ZXJtY2FwIGZpbGUiCittc2dzdHIgIkU1NTc6IE5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZml0eGVyIHRlcm1jYXAiCisKKyM6IHRlcm0uYzoyMTMxCittc2dpZCAiRTU1ODogVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1pbmZvIgorbXNnc3RyICJFNTU4OiBObyBzJ2hhIHRyb2JhdCBsJ2luZm9ybWFjafMgZGVsIHRlcm1pbmFsIGEgdGVybWluZm8iCisKKyM6IHRlcm0uYzoyMTMzCittc2dpZCAiRTU1OTogVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1NTk6IE5vIHMnaGEgdHJvYmF0IGwnaW5mb3JtYWNp8yBkZWwgdGVybWluYWwgYSB0ZXJtY2FwIgorCisjOiB0ZXJtLmM6MjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDM2OiBObyBcIiVzXCIgZW50cnkgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTQzNjogTm8gaGkgaGEgY2FwIGVudHJhZGEgXCIlc1wiIGEgdGVybWNhcCIKKworIzogdGVybS5jOjI3NjYKK21zZ2lkICJFNDM3OiB0ZXJtaW5hbCBjYXBhYmlsaXR5IFwiY21cIiByZXF1aXJlZCIKK21zZ3N0ciAiRTQzNzogRXMgcmVxdWVyZWl4IGxhIGNhcGFjaXRhdCBcImNtXCIgcGVyIHBhcnQgZGVsIHRlcm1pbmFsIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0OTcwCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiXG4tLS0gVGVjbGVzIGRlbCB0ZXJtaW5hbCAtLS0iCisKKyM6IHVpLmM6MjUyCittc2dpZCAibmV3IHNoZWxsIHN0YXJ0ZWRcbiIKK21zZ3N0ciAicydoYSBpbmljaWF0IHVuYSBub3ZhIHNoZWxsXG4iCisKKyM6IHVpLmM6MTc4NAorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICJWaW06IEVycm9yIGVuIGxsZWdpciBsJ2VudHJhZGEsIHNvcnRpbnQuLi5cbiIKKworIy4gbXVzdCBkaXNwbGF5IHRoZSBwcm9tcHQKKyM6IHVuZG8uYzozOTQKK21zZ2lkICJObyB1bmRvIHBvc3NpYmxlOyBjb250aW51ZSBhbnl3YXkiCittc2dzdHIgIk5vIGVzIHBvdCBkZXNmZXIgcmVzOyB2b2xldSBjb250aW51YXIiCisKKyM6IHVuZG8uYzo1NDkKK21zZ2lkICJFNDM4OiB1X3VuZG86IGxpbmUgbnVtYmVycyB3cm9uZyIKK21zZ3N0ciAiRTQzODogdV91bmRvOiBlbHMgbm9tYnJlcyBkZSBs7W5pYSBubyBz824gY29ycmVjdGVzIgorCisjOiB1bmRvLmM6NzE4Cittc2dpZCAiMSBjaGFuZ2UiCittc2dzdHIgIjEgY2FudmkiCisKKyM6IHVuZG8uYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYW5nZXMiCittc2dzdHIgIiVsZCBjYW52aXMiCisKKyM6IHVuZG8uYzo3NjQKK21zZ2lkICJFNDM5OiB1bmRvIGxpc3QgY29ycnVwdCIKK21zZ3N0ciAiRTQzOTogTGEgbGxpc3RhIGRlIGRlc2ZlciBlc3TgIGNvcnJvbXB1ZGEiCisKKyM6IHVuZG8uYzo3OTYKK21zZ2lkICJFNDQwOiB1bmRvIGxpbmUgbWlzc2luZyIKK21zZ3N0ciAiRTQ0MDogRmFsdGEgdW5hIGztbmlhIGRlIGRlc2ZlciIKKworIy4gT25seSBNUyBWQyA0LjEgYW5kIGVhcmxpZXIgY2FuIGRvIFdpbjMycworIzogdmVyc2lvbi5jOjY5NgorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiXG5WZXJzafMgR1VJIHBlciBNUy1XaW5kb3dzIDE2LzMyIGJpdHMiCisKKyM6IHZlcnNpb24uYzo2OTgKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIlxuVmVyc2nzIEdVSSBwZXIgTVMtV2luZG93cyAzMiBiaXRzIgorCisjOiB2ZXJzaW9uLmM6NzAxCittc2dpZCAiIGluIFdpbjMycyBtb2RlIgorbXNnc3RyICIgZW4gbW9kZSBXaW4zMnMiCisKKyM6IHZlcnNpb24uYzo3MDMKK21zZ2lkICIgd2l0aCBPTEUgc3VwcG9ydCIKK21zZ3N0ciAiIGFtYiBzdXBvcnQgcGVyIE9MRSIKKworIzogdmVyc2lvbi5jOjcwNgorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBjb25zb2xlIHZlcnNpb24iCittc2dzdHIgIlxuVmVyc2nzIGNvbnNvbGEgcGVyIE1TLVdpbmRvd3MgMzIgYml0cyIKKworIzogdmVyc2lvbi5jOjcxMAorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2IGJpdCB2ZXJzaW9uIgorbXNnc3RyICJcblZlcnNp8yBwZXIgTVMtV2luZG93cyAxNiBiaXRzIgorCisjOiB2ZXJzaW9uLmM6NzE0Cittc2dpZCAiIgorIlxuIgorIjMyIGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiXG5WZXJzafMgcGVyIE1TLURPUyAzMiBiaXRzIgorCisjOiB2ZXJzaW9uLmM6NzE2Cittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiXG5WZXJzafMgcGVyIE1TLURPUyAxNiBiaXRzIgorCisjOiB2ZXJzaW9uLmM6NzIyCittc2dpZCAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIHZlcnNpb24iCittc2dzdHIgIlxuVmVyc2nzIHBlciBNYWNPUyBYIChVbml4KSIKKworIzogdmVyc2lvbi5jOjcyNAorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYIHZlcnNpb24iCittc2dzdHIgIlxuVmVyc2nzIHBlciBNYWNPUyBYIgorCisjOiB2ZXJzaW9uLmM6NzI3Cittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIlxuVmVyc2nzIHBlciBNYWNPUyIKKworIzogdmVyc2lvbi5jOjczMgorbXNnaWQgIiIKKyJcbiIKKyJSSVNDIE9TIHZlcnNpb24iCittc2dzdHIgIlxuVmVyc2nzIHBlciBSSVNDIE9TIgorCisjOiB2ZXJzaW9uLmM6NzQyCittc2dpZCAiIgorIlxuIgorIkluY2x1ZGVkIHBhdGNoZXM6ICIKK21zZ3N0ciAiXG5Nb2RpZmljYWNpb25zIGluY2xvc2VzOiAiCisKKyM6IHZlcnNpb24uYzo3NjggdmVyc2lvbi5jOjExMTcKK21zZ2lkICJNb2RpZmllZCBieSAiCittc2dzdHIgIk1vZGlmaWNhdCBwZXIgIgorCisjOiB2ZXJzaW9uLmM6Nzc1Cittc2dpZCAiIgorIlxuIgorIkNvbXBpbGVkICIKK21zZ3N0ciAiXG5Db21waWxhdCAiCisKKyM6IHZlcnNpb24uYzo3NzgKK21zZ2lkICJieSAiCittc2dzdHIgInBlciAiCisKKyM6IHZlcnNpb24uYzo3OTAKK21zZ2lkICIiCisiXG4iCisiSHVnZSB2ZXJzaW9uICIKK21zZ3N0ciAiXG5WZXJzafMgZW5vcm1lICIKKworIzogdmVyc2lvbi5jOjc5MworbXNnaWQgIiIKKyJcbiIKKyJCaWcgdmVyc2lvbiAiCittc2dzdHIgIlxuVmVyc2nzIGdyYW4gIgorCisjOiB2ZXJzaW9uLmM6Nzk2Cittc2dpZCAiIgorIlxuIgorIk5vcm1hbCB2ZXJzaW9uICIKK21zZ3N0ciAiXG5WZXJzafMgbm9ybWFsICIKKworIzogdmVyc2lvbi5jOjc5OQorbXNnaWQgIiIKKyJcbiIKKyJTbWFsbCB2ZXJzaW9uICIKK21zZ3N0ciAiXG5WZXJzafMgcmVkde9kYSAiCisKKyM6IHZlcnNpb24uYzo4MDEKK21zZ2lkICIiCisiXG4iCisiVGlueSB2ZXJzaW9uICIKK21zZ3N0ciAiXG5WZXJzafMgbe1uaW1hICIKKworIzogdmVyc2lvbi5jOjgwNworbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAic2Vuc2UgR1VJLiIKKworIzogdmVyc2lvbi5jOjgxMgorbXNnaWQgIndpdGggR1RLMi1HTk9NRSBHVUkuIgorbXNnc3RyICJhbWIgR1VJIEdUSzItR05PTUUuIgorCisjOiB2ZXJzaW9uLmM6ODE0Cittc2dpZCAid2l0aCBHVEstR05PTUUgR1VJLiIKK21zZ3N0ciAiYW1iIEdVSSBHVEstR05PTUUuIgorCisjOiB2ZXJzaW9uLmM6ODE4Cittc2dpZCAid2l0aCBHVEsyIEdVSS4iCittc2dzdHIgImFtYiBHVUkgR1RLMi4iCisKKyM6IHZlcnNpb24uYzo4MjAKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICJhbWIgR1VJIEdUSy4iCisKKyM6IHZlcnNpb24uYzo4MjUKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICJhbWIgR1VJIFgxMS1Nb3RpZi4iCisKKyM6IHZlcnNpb24uYzo4MjkKK21zZ2lkICJ3aXRoIFgxMS1uZVh0YXcgR1VJLiIKK21zZ3N0ciAiYW1iIEdVSSBYMTEtbmVYdGF3LiIKKworIzogdmVyc2lvbi5jOjgzMQorbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICJhbWIgR1VJIFgxMS1BdGhlbmEuIgorCisjOiB2ZXJzaW9uLmM6ODM1Cittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgImFtYiBHVUkgQmVPUy4iCisKKyM6IHZlcnNpb24uYzo4MzgKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICJhbWIgR1VJIFBob3Rvbi4iCisKKyM6IHZlcnNpb24uYzo4NDEKK21zZ2lkICJ3aXRoIEdVSS4iCittc2dzdHIgImFtYiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODQ0Cittc2dpZCAid2l0aCBDYXJib24gR1VJLiIKK21zZ3N0ciAiYW1iIEdVSSBDYXJib24uIgorCisjOiB2ZXJzaW9uLmM6ODQ3Cittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICJhbWIgR1VJIENvY29hLiIKKworIzogdmVyc2lvbi5jOjg1MAorbXNnaWQgIndpdGggKGNsYXNzaWMpIEdVSS4iCittc2dzdHIgImFtYiBHVUkgKGNs4HNzaWMpLiIKKworIzogdmVyc2lvbi5jOjg2MQorbXNnaWQgIiAgRmVhdHVyZXMgaW5jbHVkZWQgKCspIG9yIG5vdCAoLSk6XG4iCittc2dzdHIgIiAgRnVuY2lvbnMgaW5jbG9zZXMgKCspIG8gZXhjbG9zZXMgKC0pOlxuIgorCisjIDI5IGNhcuBjdGVycyBmaW5zIGVsICI6IiAoaW5jbPJzKQorIzogdmVyc2lvbi5jOjg3MworbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIGZpdHhlciB2aW1yYyBkZWwgc2lzdGVtYTogXCIiCisKKyMgMjkgY2Fy4GN0ZXJzIGZpbnMgZWwgIjoiIChpbmNs8nMpCisjOiB2ZXJzaW9uLmM6ODc4Cittc2dpZCAiICAgICB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgZml0eGVyIHZpbXJjIGRlIGwndXN1YXJpOiBcIiIKKworIyAyOSBjYXLgY3RlcnMgZmlucyBlbCAiOiIgKGluY2zycykKKyM6IHZlcnNpb24uYzo4ODMKK21zZ2lkICIgMm5kIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAybiBmaXR4ZXIgdmltcmMgZGUgbCd1c3Vhcmk6IFwiIgorCisjIDI5IGNhcuBjdGVycyBmaW5zIGVsICI6IiAoaW5jbPJzKQorIzogdmVyc2lvbi5jOjg4OAorbXNnaWQgIiAzcmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIDNyIGZpdHhlciB2aW1yYyBkZSBsJ3VzdWFyaTogXCIiCisKKyMgMjkgY2Fy4GN0ZXJzIGZpbnMgZWwgIjoiIChpbmNs8nMpCisjOiB2ZXJzaW9uLmM6ODkzCittc2dpZCAiICAgICAgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgIGZpdHhlciBleHJjIGRlIGwndXN1YXJpOiBcIiIKKworIyAyOSBjYXLgY3RlcnMgZmlucyBlbCAiOiIgKGluY2zycykKKyM6IHZlcnNpb24uYzo4OTgKK21zZ2lkICIgIDJuZCB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgMm4gZml0eGVyIGV4cmMgZGUgbCd1c3Vhcmk6IFwiIgorCisjIDI5IGNhcuBjdGVycyBmaW5zIGVsICI6IiAoaW5jbPJzKQorIzogdmVyc2lvbi5jOjkwNAorbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgZml0eGVyIGd2aW1yYyBkZWwgc2lzdGVtYTogXCIiCisKKyMgMjkgY2Fy4GN0ZXJzIGZpbnMgZWwgIjoiIChpbmNs8nMpCisjOiB2ZXJzaW9uLmM6OTA4Cittc2dpZCAiICAgIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICBmaXR4ZXIgZ3ZpbXJjIGRlIGwndXN1YXJpOiBcIiIKKworIyAyOSBjYXLgY3RlcnMgZmlucyBlbCAiOiIgKGluY2zycykKKyM6IHZlcnNpb24uYzo5MTIKK21zZ2lkICIybmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIjJuIGZpdHhlciBndmltcmMgZGUgbCd1c3Vhcmk6IFwiIgorCisjIDI5IGNhcuBjdGVycyBmaW5zIGVsICI6IiAoaW5jbPJzKQorIzogdmVyc2lvbi5jOjkxNworbXNnaWQgIjNyZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiM3IgZml0eGVyIGd2aW1yYyBkZSBsJ3VzdWFyaTogXCIiCisKKyMgMjkgY2Fy4GN0ZXJzIGZpbnMgZWwgIjoiIChpbmNs8nMpCisjOiB2ZXJzaW9uLmM6OTI0Cittc2dpZCAiICAgIHN5c3RlbSBtZW51IGZpbGU6IFwiIgorbXNnc3RyICIgIGZpdHhlciBkZSBtZW76IGRlbCBzaXN0ZW1hOiBcIiIKKworIyAyOSBjYXLgY3RlcnMgZmlucyBlbCAiOiIgKGluY2zycykKKyM6IHZlcnNpb24uYzo5MzIKK21zZ2lkICIgIGZhbGwtYmFjayBmb3IgJFZJTTogXCIiCittc2dzdHIgIiAgICAgIGFsdGVybmF0aXZhIHBlciBhICRWSU06IFwiIgorCisjIDI5IGNhcuBjdGVycyBmaW5zIGVsICI6IiAoaW5jbPJzKQorIzogdmVyc2lvbi5jOjkzOAorbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiICAgICAgIGFsdCBwZXIgYSAkVklNUlVOVElNRTogXCIiCisKKyM6IHZlcnNpb24uYzo5NDIKK21zZ2lkICJDb21waWxhdGlvbjogIgorbXNnc3RyICJDb21waWxhdCBhbWI6ICIKKworIzogdmVyc2lvbi5jOjk0OAorbXNnaWQgIkNvbXBpbGVyOiAiCittc2dzdHIgIkNvbXBpbGFkb3I6ICIKKworIzogdmVyc2lvbi5jOjk1MworbXNnaWQgIkxpbmtpbmc6ICIKK21zZ3N0ciAiRW5sbGHnYXQgYW1iOiAiCisKKyM6IHZlcnNpb24uYzo5NTgKK21zZ2lkICIgIERFQlVHIEJVSUxEIgorbXNnc3RyICIgIFZFUlNJ0yBERSBERVBVUkFDSdMiCisKKyM6IHZlcnNpb24uYzo5OTYKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVmkgSU1wcm92ZWQiCisKKyM6IHZlcnNpb24uYzo5OTgKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAidmVyc2nzICIKKworIzogdmVyc2lvbi5jOjk5OQorbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAicGVyIEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKKworIzogdmVyc2lvbi5jOjEwMDMKK21zZ2lkICJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIgorbXNnc3RyICJWaW0g6XMgdW4gcHJvZ3JhbWEgZGUgY29kaSBvYmVydCBpIGxsaXVyZSBkaXN0cmlidWNp8yIKKworIzogdmVyc2lvbi5jOjEwMDUKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAiQWp1ZGV1IGVscyBuZW5zIHBvYnJlcyBkJ1VnYW5kYSEiCisKKyMgYW1wbGFkYSA1MyBjYXLgY3RlcnMKKyM6IHZlcnNpb24uYzoxMDA2Cittc2dpZCAidHlwZSAgOmhlbHAgaWNjZjxFbnRlcj4gICAgICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAiZmV1ICA6aGVscCBpY2NmPEVudHJhcj4gICAgICAgcGVyIG3pcyBpbmZvcm1hY2nzICAgICAiCisKKyMgYW1wbGFkYSA1MyBjYXLgY3RlcnMKKyM6IHZlcnNpb24uYzoxMDA4Cittc2dpZCAidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIKK21zZ3N0ciAiZmV1ICA6cTxFbnRyYXI+ICAgICAgICAgICAgICAgcGVyIHNvcnRpciAgICAgICAgICAgICAiCisKKyMgYW1wbGFkYSA1MyBjYXLgY3RlcnMKKyM6IHZlcnNpb24uYzoxMDA5Cittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAiZmV1ICA6aGVscDxFbnRyYXI+IG8gPEYxPiAgICAgcGVyIG9idGVuaXIgYWp1ZGEgICAgICAiCisKKyMgYW1wbGFkYSA1MyBjYXLgY3RlcnMKKyM6IHZlcnNpb24uYzoxMDEwCittc2dpZCAidHlwZSAgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICAgZm9yIHZlcnNpb24gaW5mbyIKK21zZ3N0ciAiZmV1ICA6aGVscCB2ZXJzaW9uNjxFbnRyYXI+ICAgcGVyIGluZm8gZGUgbGEgdmVyc2nzICAiCisKKyM6IHZlcnNpb24uYzoxMDEzCittc2dpZCAiUnVubmluZyBpbiBWaSBjb21wYXRpYmxlIG1vZGUiCittc2dzdHIgIkZ1bmNpb25hbnQgZW4gbW9kZSBjb21wYXRpYmxlIGFtYiBWaSIKKworIyBhbXBsYWRhIDUzIGNhcuBjdGVycworIzogdmVyc2lvbi5jOjEwMTQKK21zZ2lkICJ0eXBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBmb3IgVmltIGRlZmF1bHRzIgorbXNnc3RyICJmZXUgIDpzZXQgbm9jcDxFbnRyYXI+ICAgICAgICBwZWxzIHZhbG9ycyBwZXIgb21pc3Np8yIKKworIyBhbXBsYWRhIDUzIGNhcuBjdGVycworIzogdmVyc2lvbi5jOjEwMTUKK21zZ2lkICJ0eXBlICA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJmZXUgIDpoZWxwIGNwLWRlZmF1bHQ8RW50cmFyPiBwZXIgaW5mbyBzb2JyZSBlbCB0ZW1hICIKKworIyBhbXBsYWRhIDUzIGNhcuBjdGVycworIzogdmVyc2lvbi5jOjEwMzAKK21zZ2lkICJtZW51ICBIZWxwLT5PcnBoYW5zICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gICAgIgorbXNnc3RyICJtZW76ICBBanVkYS0+T3JmZXMgICAgICAgICAgICAgICAgICAgICBwZXIgaW5mb3JtYWNp8yIKKworIzogdmVyc2lvbi5jOjEwMzIKK21zZ2lkICJSdW5uaW5nIG1vZGVsZXNzLCB0eXBlZCB0ZXh0IGlzIGluc2VydGVkIgorbXNnc3RyICJGdW5jaW9uYW50IHNlbnNlIG1vZGVzLCBlbCB0ZXh0IGVzY3JpdCBzJ2luc2VyZWl4IgorCisjIEFpePIgaGEgZGUgbGxpZ2FyIGFtYiBsYSB0cmFkdWNjafMgZGVsIG1lbvoKKyMgYW1wbGFkYSA1MyBjYXLgY3RlcnMKKyM6IHZlcnNpb24uYzoxMDMzCittc2dpZCAibWVudSAgRWRpdC0+R2xvYmFsIFNldHRpbmdzLT5Ub2dnbGUgSW5zZXJ0IE1vZGUgICIKK21zZ3N0ciAibWVu+iAgRWRpdGEtPk9wY2lvbnMgZ2xvYmFscy0+TW9kZSBkJ2luc2VyY2nzICAgICAgICAiCisKKyMgYW1wbGFkYSA1MyBjYXLgY3RlcnMKKyM6IHZlcnNpb24uYzoxMDM0Cittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHR3byBtb2RlcyAgICAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBkb3MgbW9kZXMiCisKKyMgQWl48iBoYSBkZSBsbGlnYXIgYW1iIGxhIHRyYWR1Y2Np8yBkZWwgbWVu+gorIyBhbXBsYWRhIDUzIGNhcuBjdGVycworIzogdmVyc2lvbi5jOjEwMzgKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBWaSBDb21wYXRpYmxlIgorbXNnc3RyICJtZW76ICBFZGl0YS0+T3BjaW9ucyBnbG9iYWxzLT5Db21wYXRpYmxlIGFtYiBWaSAgICAgICIKKworIyBhbXBsYWRhIDUzIGNhcuBjdGVycworIzogdmVyc2lvbi5jOjEwMzkKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgVmltIGRlZmF1bHRzICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWxzIHZhbG9ycyBwZXIgb21pc3Np8yIKKworIzogdmVyc2lvbi5jOjEwODUKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICJBVEVOQ0nTOiBTJ2hhIGRldGVjdGF0IFdpbmRvd3MgOTUvOTgvTUUiCisKKyMgYW1wbGFkYSA1MyBjYXLgY3RlcnMKKyM6IHZlcnNpb24uYzoxMDg4Cittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAiZmV1ICA6aGVscCB3aW5kb3dzOTU8RW50cmFyPiAgcGVyIGluZm8gc29icmUgZWwgdGVtYSAiCisKKyM6IHdpbmRvdy5jOjIwNAorbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiBObyBoaSBoYSBjYXAgZmluZXN0cmEgZGUgcHJldmlzdWFsaXR6YWNp8yIKKworIzogd2luZG93LmM6NTgyCittc2dpZCAiRTQ0MjogQ2FuJ3Qgc3BsaXQgdG9wbGVmdCBhbmQgYm90cmlnaHQgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiRTQ0MjogTm8gZXMgcG90IGRpdmlkaXIgaG9yaXR6b250YWwgaSB2ZXJ0aWNhbG1lbnQgYWwgbWF0ZWl4IHRlbXBzIgorCisjOiB3aW5kb3cuYzoxMzQxCittc2dpZCAiRTQ0MzogQ2Fubm90IHJvdGF0ZSB3aGVuIGFub3RoZXIgd2luZG93IGlzIHNwbGl0IgorbXNnc3RyICJFNDQyOiBObyBoaSBwb3QgaGF2ZXIgcm90YWNp8yBxdWFuIGhpIGhhIGZpbmVzdHJlcyBkaXZpZGlkZXMiCisKKyM6IHdpbmRvdy5jOjE4MzYKK21zZ2lkICJFNDQ0OiBDYW5ub3QgY2xvc2UgbGFzdCB3aW5kb3ciCittc2dzdHIgIkU0NDQ6IE5vIGVzIHBvdCB0YW5jYXIgbCf6bHRpbWEgZmluZXN0cmEiCisKKyM6IHdpbmRvdy5jOjI1NjcKK21zZ2lkICJBbHJlYWR5IG9ubHkgb25lIHdpbmRvdyIKK21zZ3N0ciAiTm9t6XMgaGkgaGEgdW5hIGZpbmVzdHJhIgorCisjOiB3aW5kb3cuYzoyNjE0Cittc2dpZCAiRTQ0NTogT3RoZXIgd2luZG93IGNvbnRhaW5zIGNoYW5nZXMiCittc2dzdHIgIkU0NDU6IEhpIGhhbiBhbHRyZXMgZmluZXN0cmVzIHF1ZSBjb250ZW5lbiBjYW52aXMiCisKKyM6IHdpbmRvdy5jOjQ0NjAKK21zZ2lkICJFNDQ2OiBObyBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFNDQ2OiBObyBoaSBoYSBjYXAgbm9tIGRlIGZpdHhlciBzb3RhIGVsIGN1cnNvciIKKworIzogd2luZG93LmM6NDU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ3OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkU0NDc6IE5vIHMnaGEgdHJvYmF0IGVsIGZpdHhlciBcIiVzXCIgZW4gZWwgcGF0aCIKKworIzogZ2xvYmFscy5oOjEyMDggaWZfcGVybC54czozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MDogQ291bGQgbm90IGxvYWQgbGlicmFyeSAlcyIKK21zZ3N0ciAiRTM3MDogTm8gcydoYSBwb2d1dCBjYXJyZWdhciBsYSBiaWJsaW90ZWNhICVzIgorCisjOiBpZl9wZXJsLnhzOjU5MQorbXNnaWQgIlNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBQZXJsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIkFxdWVzdGEgb3JkcmUgbm8gZXN04CBoYWJpbGl0YWRhOiBubyBzJ2hhIHBvZ3V0IGNhcnJlZ2FyIGxhIGJpYmxpb3RlY2EgUGVybC4iCisKKyM6IGlmX3BlcmwueHM6NjM3CisjfiBtc2dpZCAiRTI5OTogUGVybCBldmFsdWF0aW9uIGZvcmJpZGRlbiBpbiBzYW5kYm94IHdpdGhvdXQgdGhlIFNhZmUgbW9kdWxlIgorI34gbXNnc3RyICIiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTgzCittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICJFZGl0YSBlbiAmbfpsdGlwbGVzIFZpbXMiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTg5Cittc2dpZCAiRWRpdCB3aXRoIHNpbmdsZSAmVmltIgorbXNnc3RyICJFZGl0YSBlbiB1biBzb2wgJlZpbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1OTgKK21zZ2lkICImRGlmZiB3aXRoIFZpbSIKK21zZ3N0ciAiTW9zdHJhIGxlcyAmZGlmZXLobmNpZXMgYW1iIFZpbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo2MTEKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAiRWRpdGEgYW1iIGVsICZWaW0iCisKKyMuIE5vdyBjb25jYXRlbmF0ZQorIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo2MzMKK21zZ2lkICJFZGl0IHdpdGggZXhpc3RpbmcgVmltIC0gJiIKK21zZ3N0ciAiRWRpdGEgYW1iIGVsIFZpbSBleGlzdGVudCAtICYiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NzQ2Cittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgIkVkaXRhIGVsKHMpIGZpdHhlcihzKSBzZWxlY2Npb25hdChzKSBhbWIgZWwgVmltIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg4NSBHdmltRXh0L2d2aW1leHQuY3BwOjk2NgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHByb2Nlc3M6IENoZWNrIGlmIGd2aW0gaXMgaW4geW91ciBwYXRoISIKK21zZ3N0ciAiRXJyb3IgZW4gY3JlYXIgZWwgcHJvY+lzOiBDb21wcm92ZXUgcXVlIGd2aW0gZXMgdHJvYmkgZW4gZWwgcGF0aCEiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg2IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTAwIEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY3Cittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgImVycm9yIGRlIGxhIGJpYmxpb3RlY2EgZ3ZpbWV4dC5kbGwiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODk5Cittc2dpZCAiUGF0aCBsZW5ndGggdG9vIGxvbmchIgorbXNnc3RyICJMYSBsbGFyZ2FkYSBkZWwgcGF0aCDpcyBleGNlc3NpdmEiCisKKyM6IGdsb2JhbHMuaDo5OTgKK21zZ2lkICItLU5vIGxpbmVzIGluIGJ1ZmZlci0tIgorbXNnc3RyICItLUNhcCBs7W5pYSBlbiBlbCBidWZmZXItLSIKKworIy4KKyMuICogVGhlIGVycm9yIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHNoYXJlZCBhcmUgaW5jbHVkZWQgaGVyZS4KKyMuICogRXhjbHVkZWQgYXJlIGVycm9ycyB0aGF0IGFyZSBvbmx5IHVzZWQgb25jZSBhbmQgZGVidWdnaW5nIG1lc3NhZ2VzLgorIy4KKyM6IGdsb2JhbHMuaDoxMTYxCittc2dpZCAiRTQ3MDogQ29tbWFuZCBhYm9ydGVkIgorbXNnc3RyICJFNDcwOiBTJ2hhIGF2b3J0YXQgbCdvcmRyZSIKKworIzogZ2xvYmFscy5oOjExNjIKK21zZ2lkICJFNDcxOiBBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAiRTQ3MTogRXMgcmVxdWVyZWl4IHVuIGFyZ3VtZW50IgorCisjOiBnbG9iYWxzLmg6MTE2MworbXNnaWQgIkUxMDogXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJiIKK21zZ3N0ciAiRTEwOiBcXCBoYXVyaWEgZGUgY29udGludWFyIGFtYiAvLCA/IG8gJiIKKworIzogZ2xvYmFscy5oOjExNjUKK21zZ2lkICJFMTE6IEludmFsaWQgaW4gY29tbWFuZC1saW5lIHdpbmRvdzsgPENSPiBleGVjdXRlcywgQ1RSTC1DIHF1aXRzIgorbXNnc3RyICJFMTE6IE5vIOlzIHbgbGlkIGEgbGEgbO1uaWEgZCdvcmRyZXM6IDxFTlRSQVI+IGV4ZWN1dGEsIENUUkwtQyBzdXJ0IgorCisjOiBnbG9iYWxzLmg6MTE2NworbXNnaWQgIkUxMjogQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaCIKK21zZ3N0ciAiRTEyOiBPcmRyZSBlbiBleHJjL3ZpbXJjIG5vIHBlcm1lc2EgZW4gbCdhY3R1YWwgY2VyY2EgZCdldGlxdWV0ZXMgbyBkaXJlY3RvcmlzIgorCisjOiBnbG9iYWxzLmg6MTE2OQorbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiBGYWx0YSB1bmEgZGVjbGFyYWNp8yA6ZW5kaWYiCisKKyM6IGdsb2JhbHMuaDoxMTcwCittc2dpZCAiRTYwMDogTWlzc2luZyA6ZW5kdHJ5IgorbXNnc3RyICJFNjAwOiBGYWx0YSB1bmEgZGVjbGFyYWNp8yA6ZW5kdHJ5IgorCisjOiBnbG9iYWxzLmg6MTE3MQorbXNnaWQgIkUxNzA6IE1pc3NpbmcgOmVuZHdoaWxlIgorbXNnc3RyICJFMTcwOiBGYWx0YSB1bmEgZGVjbGFyYWNp8yA6ZW5kd2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMTcyCittc2dpZCAiRTU4ODogOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg4OiBEZWNsYXJhY2nzIDplbmR3aGlsZSBzZW5zZSA6d2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMTc0Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IEVsIGZpdHhlciBleGlzdGVpeCAoYWZlZ2l1ICEgcGVyIGNvbmZpcm1hcikiCisKKyM6IGdsb2JhbHMuaDoxMTc1Cittc2dpZCAiRTQ3MjogQ29tbWFuZCBmYWlsZWQiCittc2dzdHIgIkU0NzI6IEwnb3JkcmUgaGEgZmFsbGF0IgorCisjOiBnbG9iYWxzLmg6MTE3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM0OiBVbmtub3duIGZvbnRzZXQ6ICVzIgorbXNnc3RyICJFMjM0OiBDb25qdW50IGRlIHRpcHVzIGRlc2NvbmVndXQ6ICVzIgorCisjOiBnbG9iYWxzLmg6MTE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBVbmtub3duIGZvbnQ6ICVzIgorbXNnc3RyICJFMjM1OiBUaXB1cyBkZSBsbGV0cmEgZGVzY29uZWd1dDogJXMiCisKKyM6IGdsb2JhbHMuaDoxMTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzY6IEZvbnQgXCIlc1wiIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiRTIzNjogRWwgdGlwdXMgZGUgbGxldHJhIFwiJXNcIiBubyDpcyBkJ2FtcGxhZGEgZml4YSIKKworIzogZ2xvYmFscy5oOjExODYKK21zZ2lkICJFNDczOiBJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiRTQ3MzogRXJyb3IgaW50ZXJuIgorCisjOiBnbG9iYWxzLmg6MTE4NworbXNnaWQgIkludGVycnVwdGVkIgorbXNnc3RyICJJbnRlcnJvbXB1dCIKKworIzogZ2xvYmFscy5oOjExODgKK21zZ2lkICJFMTQ6IEludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiRTE0OiBMJ2FkcmXnYSBubyDpcyB24GxpZGEiCisKKyM6IGdsb2JhbHMuaDoxMTg5Cittc2dpZCAiRTQ3NDogSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAiRTQ3NDogTCdhcmd1bWVudCBubyDpcyB24GxpZCIKKworIzogZ2xvYmFscy5oOjExOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ3NTogSW52YWxpZCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0NzU6IEwnYXJndW1lbnQgbm8g6XMgduBsaWQ6ICVzIgorCisjOiBnbG9iYWxzLmg6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogJXMiCittc2dzdHIgIkUxNTogTCdleHByZXNzafMgbm8g6XMgduBsaWRhOiAlcyIKKworIzogZ2xvYmFscy5oOjExOTQKK21zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCittc2dzdHIgIkUxNjogTCdpbnRlcnZhbCBubyDpcyB24GxpZCIKKworIzogZ2xvYmFscy5oOjExOTUKK21zZ2lkICJFNDc2OiBJbnZhbGlkIGNvbW1hbmQiCittc2dzdHIgIkU0NzY6IEwnb3JkcmUgbm8g6XMgduBsaWRhIgorCisjOiBnbG9iYWxzLmg6MTE5NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCIg6XMgdW4gZGlyZWN0b3JpIgorCisjOiBnbG9iYWxzLmg6MTIwMAorbXNnaWQgIkUxODogVW5leHBlY3RlZCBjaGFyYWN0ZXJzIGJlZm9yZSAnPSciCittc2dzdHIgIkUxODogQ2Fy4GN0ZXJzIGluZXNwZXJhdHMgYWJhbnMgZGUgJz0nIgorCisjOiBnbG9iYWxzLmg6MTIwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMzY0OiBMaWJyYXJ5IGNhbGwgZmFpbGVkIGZvciBcIiVzKClcIiIKK21zZ3N0ciAiRTM2NDogTGEgY3JpZGEgYSBsYSBiaWJsaW90ZWNhIGEgZmFsbGF0IHBlciBcIiVzKClcIiIKKworIzogZ2xvYmFscy5oOjEyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0ODogQ291bGQgbm90IGxvYWQgbGlicmFyeSBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTQ0ODogTm8gcydoYSBwb2d1dCBjYXJyZWdhciBsYSBmdW5jafMgJXMiCisKKyM6IGdsb2JhbHMuaDoxMjExCittc2dpZCAiRTE5OiBNYXJrIGhhcyBpbnZhbGlkIGxpbmUgbnVtYmVyIgorbXNnc3RyICJFMTk6IE1hcmNhIGFtYiB1biBu+m1lcm8gZGUgbO1uaWEgbm8gduBsaWQiCisKKyM6IGdsb2JhbHMuaDoxMjEyCittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIkUyMDogTWFyY2Egbm8gZXN0YWJsZXJ0YSIKKworIzogZ2xvYmFscy5oOjEyMTMKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTogTm8gZXMgcG9kZW4gZmVyIGNhbnZpcywgbCdvcGNp8yAnbW9kaWZpYWJsZScgZXN04CBkZXNhY3RpdmFkYSIKKworIzogZ2xvYmFscy5oOjEyMTQKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IEltYnJpY2FjafMgZCdzY3JpcHRzIG1hc3NhIHByb2Z1bmRhIgorCisjOiBnbG9iYWxzLmg6MTIxNQorbXNnaWQgIkUyMzogTm8gYWx0ZXJuYXRlIGZpbGUiCittc2dzdHIgIkUyMzogTm8gaGkgaGEgY2FwIGZpdHhlciBhbHRlcm5hdGl1IgorCisjOiBnbG9iYWxzLmg6MTIxNgorbXNnaWQgIkUyNDogTm8gc3VjaCBhYmJyZXZpYXRpb24iCittc2dzdHIgIkUyNDogTm8gZXhpc3RlaXggdGFsIGFicmV2aWFjafMiCisKKyM6IGdsb2JhbHMuaDoxMjE3Cittc2dpZCAiRTQ3NzogTm8gISBhbGxvd2VkIgorbXNnc3RyICJFNDc3OiAhIG5vIHBlcm3ocyIKKworIzogZ2xvYmFscy5oOjEyMTkKK21zZ2lkICJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICJFMjU6IE5vIGVzIHBvdCB1c2FyIGxhIEdVSTogTm8gaGEgZXN0YXQgY29tcGlsYWRhIgorCisjOiBnbG9iYWxzLmg6MTIyMgorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI2OiBObyBlcyBwb3QgdXNhciBlbCBtb2RlIEhlYnJldTogTm8gaGEgZXN0YXQgY29tcGlsYXRcbiIKKworIzogZ2xvYmFscy5oOjEyMjUKK21zZ2lkICJFMjc6IEZhcnNpIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI3OiBObyBlcyBwb3QgdXNhciBlbCBtb2RlIEZhcnNpOiBObyBoYSBlc3RhdCBjb21waWxhdFxuIgorCisjOiBnbG9iYWxzLmg6MTIyOAorbXNnaWQgIkU4MDA6IEFyYWJpYyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkU4MDA6IE5vIGVzIHBvdCB1c2FyIGVsIG1vZGUg4HJhYjogTm8gaGEgZXN0YXQgY29tcGlsYXRcbiIKKworIzogZ2xvYmFscy5oOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBObyBleGlzdGVpeCB0YWwgZ3J1cCBkZSByZXNzYWx0OiAlcyIKKworIzogZ2xvYmFscy5oOjEyMzMKK21zZ2lkICJFMjk6IE5vIGluc2VydGVkIHRleHQgeWV0IgorbXNnc3RyICJFMjk6IEVuY2FyYSBubyBzJ2hhIGluc2VyaXQgdGV4dCIKKworIzogZ2xvYmFscy5oOjEyMzQKK21zZ2lkICJFMzA6IE5vIHByZXZpb3VzIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiRTMwOiBObyBoaSBoYSBjYXAgb3JkcmUgYW50ZXJpb3IiCisKKyM6IGdsb2JhbHMuaDoxMjM1Cittc2dpZCAiRTMxOiBObyBzdWNoIG1hcHBpbmciCittc2dzdHIgIkUzMTogTm8gZXhpc3RlaXggdGFsIGFzc2lnbmFjafMiCisKKyM6IGdsb2JhbHMuaDoxMjM2Cittc2dpZCAiRTQ3OTogTm8gbWF0Y2giCittc2dzdHIgIkU0Nzk6IENhcCBjb2luY2lk6G5jaWEiCisKKyM6IGdsb2JhbHMuaDoxMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODA6IE5vIG1hdGNoOiAlcyIKK21zZ3N0ciAiRTQ4MDogQ2FwIGNvaW5jaWTobmNpYTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjM4Cittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjogRmFsdGEgdW4gbm9tIGRlIGZpdHhlciIKKworIzogZ2xvYmFscy5oOjEyMzkKK21zZ2lkICJFMzM6IE5vIHByZXZpb3VzIHN1YnN0aXR1dGUgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzM6IE5vIGhpIGhhIGNhcCBleHByZXNzafMgZGUgc3Vic3RpdHVjafMgYW50ZXJpb3IiCisKKyM6IGdsb2JhbHMuaDoxMjQwCittc2dpZCAiRTM0OiBObyBwcmV2aW91cyBjb21tYW5kIgorbXNnc3RyICJFMzQ6IE5vIGhpIGhhIGNhcCBvcmRyZSBhbnRlcmlvciIKKworIzogZ2xvYmFscy5oOjEyNDEKK21zZ2lkICJFMzU6IE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTM1OiBObyBoaSBoYSBjYXAgZXhwcmVzc2nzIHJlZ3VsYXIgYW50ZXJpb3IiCisKKyM6IGdsb2JhbHMuaDoxMjQyCittc2dpZCAiRTQ4MTogTm8gcmFuZ2UgYWxsb3dlZCIKK21zZ3N0ciAiRTQ4MTogTm8gZXMgcGVybWV0IGNhcCBpbnRlcnZhbCIKKworIzogZ2xvYmFscy5oOjEyNDQKK21zZ2lkICJFMzY6IE5vdCBlbm91Z2ggcm9vbSIKK21zZ3N0ciAiRTM2OiBObyBoaSBoYSBwcm91IGVzcGFpIgorCisjOiBnbG9iYWxzLmg6MTI0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6IE5vIGhpIGhhIGNhcCBzZXJ2aWRvciByZWdpc3RyYXQgYW1iIGFxdWVzdCBub20gXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDgyOiBDYW4ndCBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiRTQ4MjogTm8gZXMgcG90IGNyZWFyIGVsIGZpdHhlciAlcyIKKworIzogZ2xvYmFscy5oOjEyNTAKK21zZ2lkICJFNDgzOiBDYW4ndCBnZXQgdGVtcCBmaWxlIG5hbWUiCittc2dzdHIgIkU0ODM6IE5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbCBub20gZGVsIGZpdHhlciB0ZW1wb3JhbCIKKworIzogZ2xvYmFscy5oOjEyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NDogQ2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJFNDg0OiBObyBlcyBwb3Qgb2JyaXIgZWwgZml0eGVyICVzIgorCisjOiBnbG9iYWxzLmg6MTI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg1OiBDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIkU0ODU6IE5vIGVzIHBvdCBsbGVnaXIgZWwgZml0eGVyICVzIgorCisjOiBnbG9iYWxzLmg6MTI1MworbXNnaWQgIkUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTM3OiBObyBzJ2hhbiBkZXNhdCBlbHMgY2FudmlzIChhZmVnaXUgISBwZXIgY29uZmlybWFyKSIKKworIzogZ2xvYmFscy5oOjEyNTQKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODogQXJndW1lbnQgbnVsIgorCisjOiBnbG9iYWxzLmg6MTI1NgorbXNnaWQgIkUzOTogTnVtYmVyIGV4cGVjdGVkIgorbXNnc3RyICJFMzk6IFMnZXNwZXJhdmEgdW4gbvptZXJvIgorCisjOiBnbG9iYWxzLmg6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA6IENhbid0IG9wZW4gZXJyb3JmaWxlICVzIgorbXNnc3RyICJFNDA6IE5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZml0eGVyIGQnZXJyb3JzICVzIgorCisjOiBnbG9iYWxzLmg6MTI2MgorbXNnaWQgIkUyMzM6IGNhbm5vdCBvcGVuIGRpc3BsYXkiCittc2dzdHIgIkUyMzM6IE5vIHMnaGEgcG9ndXQgb2JyaXIgbGEgcGFudGFsbGEiCisKKyM6IGdsb2JhbHMuaDoxMjY0Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiBNZW3ycmlhIGV4aGF1cmlkYSEiCisKKyM6IGdsb2JhbHMuaDoxMjY2Cittc2dpZCAiUGF0dGVybiBub3QgZm91bmQiCittc2dzdHIgIk5vIHMnaGEgdHJvYmF0IGVsIHBhdHLzIgorCisjOiBnbG9iYWxzLmg6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg2OiBQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0ODY6IE5vIHMnaGEgdHJvYmF0IGVsIHBhdHLzOiAlcyIKKworIzogZ2xvYmFscy5oOjEyNjkKK21zZ2lkICJFNDg3OiBBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJFNDg3OiBMJ2FyZ3VtZW50IGhhIGRlIHNlciB1biBu+m1lcm8gcG9zaXRpdSIKKworIzogZ2xvYmFscy5oOjEyNzEKK21zZ2lkICJFNDU5OiBDYW5ub3QgZ28gYmFjayB0byBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkU0NTk6IE5vIGVzIHBvdCB0b3JuYXIgYWwgZGlyZWN0b3JpIGFudGVyaW9yIgorCisjOiBnbG9iYWxzLmg6MTI3NQorbXNnaWQgIkU0MjogTm8gRXJyb3JzIgorbXNnc3RyICJFNDI6IE5vIGhpIGhhbiBlcnJvcnMiCisKKyM6IGdsb2JhbHMuaDoxMjc3Cittc2dpZCAiRTQzOiBEYW1hZ2VkIG1hdGNoIHN0cmluZyIKK21zZ3N0ciAiRTQzOiBTJ2hhIGNvcnJvbXB1dCBsYSBjYWRlbmEgYW1iIGwnZXhwcmVzc2nzIHJlZ3VsYXIiCisKKyM6IGdsb2JhbHMuaDoxMjc4Cittc2dpZCAiRTQ0OiBDb3JydXB0ZWQgcmVnZXhwIHByb2dyYW0iCittc2dzdHIgIkU0NDogUydoYSBjb3Jyb21wdXQgZWwgcHJvZ3JhbWEgZCdleHByZXNzafMgcmVndWxhciIKKworIzogZ2xvYmFscy5oOjEyNzkKK21zZ2lkICJFNDU6ICdyZWFkb25seScgb3B0aW9uIGlzIHNldCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDU6IEwnb3BjafMgJ3JlYWRvbmx5JyBlc3TgIGRlZmluaWRhIChhZmVnaXUgISBwZXIgY29uZmlybWFyKSIKKworIzogZ2xvYmFscy5oOjEyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiCittc2dzdHIgIkU0NjogTm8gcydoYSBwb2d1dCBkZWZpbmlyIGxhIHZhcmlhYmxlIGRlIG5vbelzIGxlY3R1cmEgXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTI4NAorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0NzogRXJyb3IgZW4gbGxlZ2lyIGVsIGZpdHhlciBkJ2Vycm9ycyIKKworIzogZ2xvYmFscy5oOjEyODcKKyN+IG1zZ2lkICJFNDg6IE5vdCBhbGxvd2VkIGluIHNhbmRib3giCisjfiBtc2dzdHIgIiIKKworIzogZ2xvYmFscy5oOjEyODkKK21zZ2lkICJFNTIzOiBOb3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNTIzOiBObyBlc3TgIHBlcm3ocyBhcXXtIgorCisjOiBnbG9iYWxzLmg6MTI5MgorbXNnaWQgIkUzNTk6IFNjcmVlbiBtb2RlIHNldHRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTM1OTogTGEgZnVuY2nzIGQnYWp1c3RhciBlbCBtb2RlIGRlIHBhbnRhbGxhIG5vIGVzdOAgc3Vwb3J0YWRhIgorCisjOiBnbG9iYWxzLmg6MTI5NAorbXNnaWQgIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIKK21zZ3N0ciAiRTQ5OiBMYSBkaXN04G5jaWEgZGUgZGVzcGxh52FtZW50IG5vIOlzIHbgbGlkYSIKKworIzogZ2xvYmFscy5oOjEyOTUKK21zZ2lkICJFOTE6ICdzaGVsbCcgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJFOTE6IEwnb3BjafMgJ3NoZWxsJyBubyBjb2506SByZXMiCisKKyM6IGdsb2JhbHMuaDoxMjk3Cittc2dpZCAiRTI1NTogQ291bGRuJ3QgcmVhZCBpbiBzaWduIGRhdGEhIgorbXNnc3RyICJFMjU1OiBObyBzJ2hhbiBwb2d1dCBsbGVnaXIgbGVzIGRhZGVzIGRlbCBzZW55YWwhIgorCisjOiBnbG9iYWxzLmg6MTI5OQorbXNnaWQgIkU3MjogQ2xvc2UgZXJyb3Igb24gc3dhcCBmaWxlIgorbXNnc3RyICJFNzI6IEVycm9yIGVuIHRhbmNhciBlbCBmaXR4ZXIgZCdpbnRlcmNhbnZpIgorCisjOiBnbG9iYWxzLmg6MTMwMAorbXNnaWQgIkU3MzogdGFnIHN0YWNrIGVtcHR5IgorbXNnc3RyICJFNzM6IExhIHBpbGEgZCdldGlxdWV0ZXMgZXN04CBidWlkYSIKKworIzogZ2xvYmFscy5oOjEzMDEKK21zZ2lkICJFNzQ6IENvbW1hbmQgdG9vIGNvbXBsZXgiCittc2dzdHIgIkU3NDogTCdvcmRyZSDpcyBtYXNzYSBjb21wbGV4YSIKKworIzogZ2xvYmFscy5oOjEzMDIKK21zZ2lkICJFNzU6IE5hbWUgdG9vIGxvbmciCittc2dzdHIgIkU3NTogRWwgbm9tIOlzIG1hc3NhIGxsYXJnIgorCisjOiBnbG9iYWxzLmg6MTMwMworbXNnaWQgIkU3NjogVG9vIG1hbnkgWyIKK21zZ3N0ciAiRTc2OiBTb2JyZW4gY2Fy4GN0ZXJzIFsiCisKKyM6IGdsb2JhbHMuaDoxMzA0Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IFNvYnJlbiBub21zIGRlIGZpdHhlciIKKworIzogZ2xvYmFscy5oOjEzMDUKK21zZ2lkICJFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJFNDg4OiBTb2JyZW4gY2Fy4GN0ZXJzIgorCisjOiBnbG9iYWxzLmg6MTMwNgorbXNnaWQgIkU3ODogVW5rbm93biBtYXJrIgorbXNnc3RyICJFNzg6IExhIG1hcmNhIOlzIGRlc2NvbmVndWRhIgorCisjOiBnbG9iYWxzLmg6MTMwNworbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTogTm8gcydoYSBwb2d1dCBleHBhbmRpciBlbCBub20gZGUgZml0eGVyIgorCisjOiBnbG9iYWxzLmg6MTMwOQorbXNnaWQgIkU1OTE6ICd3aW5oZWlnaHQnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbmhlaWdodCciCittc2dzdHIgIkU1OTE6IEwnb3BjafMgJ3dpbmhlaWdodCcgbm8gcG90IHNlciBtZW5vciBxdWUgJ3dpbm1pbmhlaWdodCciCisKKyM6IGdsb2JhbHMuaDoxMzExCittc2dpZCAiRTU5MjogJ3dpbndpZHRoJyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW53aWR0aCciCittc2dzdHIgIkU1OTI6IEwnb3BjafMgJ3dpbndpZHRoJyBubyBwb3Qgc2VyIG1lbm9yIHF1ZSAnd2lubWlud2lkdGgnIgorCisjOiBnbG9iYWxzLmg6MTMxNAorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiBFcnJvciBkJ2VzY3JpcHR1cmEiCisKKyM6IGdsb2JhbHMuaDoxMzE1Cittc2dpZCAiWmVybyBjb3VudCIKK21zZ3N0ciAiQ29tcHRhZG9yIGEgemVybyIKKworIzogZ2xvYmFscy5oOjEzMTcKK21zZ2lkICJFODE6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0IgorbXNnc3RyICJFODE6INpzIGRlIDxTSUQ+IGVuIHVuIGNvbnRleHQgZXF1aXZvY2F0IgorCisjOiBnbG9iYWxzLmg6MTMyMAorbXNnaWQgIkU0NDk6IEludmFsaWQgZXhwcmVzc2lvbiByZWNlaXZlZCIKK21zZ3N0ciAiRTQ0OTogUydoYSByZWJ1dCB1bmEgZXhwcmVzc2nzIG5vIHbgbGlkYSIKKworIzogZ2xvYmFscy5oOjEzMjMKK21zZ2lkICJFNDYzOiBSZWdpb24gaXMgZ3VhcmRlZCwgY2Fubm90IG1vZGlmeSIKK21zZ3N0ciAiRTQ2MzogTGEgcmVnafMgZXN04CBwcm90ZWdpZGEsIG5vIGVzIHBvdCBtb2RpZmljYXIiCmRpZmYgLS1naXQgYS9zcmMvcG8vY2xlYW51cC52aW0gYi9zcmMvcG8vY2xlYW51cC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2OTdlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wby9jbGVhbnVwLnZpbQpAQCAtMCwwICsxLDcgQEAKKyIgVmltIHNjcmlwdCB0byBjbGVhbnVwIGEgLnBvIGZpbGU6IGNvbW1lbnQtb3V0IGZ1enp5IGFuZCBlbXB0eSBtZXNzYWdlcy4KKyIgTWFrZSBzdXJlIHRoZXJlIGlzIGEgc3BhY2UgYmVmb3JlIHRoZSBzdHJpbmcgKHJlcXVpcmVkIGZvciBTb2xhcmlzKS4KKyIgUmVxdWlyZXMgVmltIDYuMCAoYmVjYXVzZSBvZiBtdWx0aS1saW5lIHNlYXJjaCBwYXR0ZXJucykuCitnL14jLCBmdXp6eVwoLCAuKlwpXD1cbm1zZ2lkICIiXEAhLy4rMSwvXiQvLTFzL14vI1x+IC8KK2cvXm1zZ3N0ciIvcy8vbXNnc3RyICIvCitnL15tc2dpZCIvcy8vbXNnaWQgIi8KK2cvXm1zZ3N0ciAiIlwoXG4iXClcQCEvP15tc2dpZD8sLnMvXi8jXH4gLwpkaWZmIC0tZ2l0IGEvc3JjL3BvL2NzLmNwMTI1MC5wbyBiL3NyYy9wby9jcy5jcDEyNTAucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzNzBkYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wby9jcy5jcDEyNTAucG8KQEAgLTAsMCArMSw1OTU0IEBACisjIEN6ZWNoIHRyYW5zbGF0aW9uIG9mIHZpbQorIyBKafjtIFBhdmxvdnNr/SA8anBhdmxvdnNreUBtYm94LnZvbC5jej4sIDIwMDAgLSAyMDAyLgorIyBTb21lIGNvbXBsZXRpb24gZm9yIHZpbTYuMCBhZGRlZCBieSBKafjtIEL4ZXppbmEgPGJyekBjZW50cnVtLmN6PgorIyBTb21lIGJ1Z2ZpeGVzIGJ5IFRvbeGaIFplbGxlcmluIDx6ZWxsZXJpbkB2b2xueS5jej4KKyMKKyMgR2VuZXJhdGVkIGZyb20gY3MucG8sIERPIE5PVCBFRElULgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogdmltLTYuMFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDAxLTEwLTA4IDA4OjI3LTA3MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAyLTAyLTA2IDIyOjI5KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEpp+O0gUGF2bG92c2v9IDxqcGF2bG92c2t5QG1ib3gudm9sLmN6PlxuIgorIkxhbmd1YWdlLVRlYW06IEN6ZWNoIDxjc0BsaS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Y3AxMjUwXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBidWZmZXIuYzo5NworbXNnaWQgIkU4MjogQ2Fubm90IGFsbG9jYXRlIGFueSBidWZmZXIsIGV4aXRpbmcuLi4iCittc2dzdHIgIkU4MjogTmVsemUgYWxva292YXQgnuFkbv0gYnVmZmVyLCBrb27o7W0uLi4iCisKKyM6IGJ1ZmZlci5jOjEwMAorbXNnaWQgIkU4MzogQ2Fubm90IGFsbG9jYXRlIGJ1ZmZlciwgdXNpbmcgb3RoZXIgb25lLi4uIgorbXNnc3RyICJFODM6IE5lbHplIGFsb2tvdmF0IGJ1ZmZlciwgcG91nmlqaSBqaW79Li4uIgorCisjOiBidWZmZXIuYzo2OTgKK21zZ2lkICJObyBidWZmZXJzIHdlcmUgdW5sb2FkZWQiCittc2dzdHIgIo7hZG79IGJ1ZmZlciBuZWJ5bCBkZWFrdGl2b3bhbiIKKworIzogYnVmZmVyLmM6NzAwCittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIGRlbGV0ZWQiCittc2dzdHIgIo7hZG79IGJ1ZmZlciBuZWJ5bCBzbWF64W4iCisKKyM6IGJ1ZmZlci5jOjcwMgorbXNnaWQgIk5vIGJ1ZmZlcnMgd2VyZSB3aXBlZCBvdXQiCittc2dzdHIgIo7hZG79IGJ1ZmZlciBuZWJ5bCB6YWhvemVuIgorCisjOiBidWZmZXIuYzo3MTAKK21zZ2lkICIxIGJ1ZmZlciB1bmxvYWRlZCIKK21zZ3N0ciAiUG/oZXQgZGVha3Rpdm92YW79Y2ggYnVmZmVy+TogMSIKKworIzogYnVmZmVyLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgdW5sb2FkZWQiCittc2dzdHIgIlBv6GV0IGRlYWt0aXZvdmFu/WNoIGJ1ZmZlcvk6ICVkIgorCisjOiBidWZmZXIuYzo3MTcKK21zZ2lkICIxIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICJQb+hldCBzbWF6YW79Y2ggYnVmZmVy+TogMSIKKworIzogYnVmZmVyLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgZGVsZXRlZCIKK21zZ3N0ciAiUG/oZXQgc21hemFu/WNoIGJ1ZmZlcvk6ICVkIgorCisjOiBidWZmZXIuYzo3MjQKK21zZ2lkICIxIGJ1ZmZlciB3aXBlZCBvdXQiCittc2dzdHIgIlBv6GV0IHphaG96ZW79Y2ggYnVmZmVy+TogMSIKKworIzogYnVmZmVyLmM6NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgd2lwZWQgb3V0IgorbXNnc3RyICJQb+hldCB6YWhvemVu/WNoIGJ1ZmZlcvk6ICVkIgorCisjOiBidWZmZXIuYzo3ODMKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiBOZWJ5bCBuYWxlemVuIJ7hZG79IHpt7G7sbv0gYnVmZmVyIgorCisjLiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorIzogYnVmZmVyLmM6ODIyCittc2dpZCAiRTg1OiBUaGVyZSBpcyBubyBsaXN0ZWQgYnVmZmVyIgorbXNnc3RyICJFODU6IFNlem5hbSBidWZmZXL5IGplIHBy4Xpkbv0iCisKKyM6IGJ1ZmZlci5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFODY6IENhbm5vdCBnbyB0byBidWZmZXIgJWxkIgorbXNnc3RyICJFODY6IE5lbHplIHD4ZXNrb+hpdCBuYSBidWZmZXIgJWxkIgorCisjOiBidWZmZXIuYzo4MzcKK21zZ2lkICJFODc6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU4NzogWmEgcG9zbGVkbu0gYnVmZmVyIG5lbHplIHD4ZXNrb+hpdCIKKworIzogYnVmZmVyLmM6ODM5Cittc2dpZCAiRTg4OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg4OiBQ+GVkIHBydm7tIGJ1ZmZlciBuZWx6ZSBw+GVza2/oaXQiCisKKyM6IGJ1ZmZlci5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJFODk6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgJWxkICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU4OTogWm3sbnkgdiBidWZmZXJ1ICVsZCBuZWJ5bHkgdWxvnmVueSAoISBwcm8gdnludWNlbu0pIgorCisjOiBidWZmZXIuYzo4NzkKK21zZ2lkICJFOTA6IENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU5MDogUG9zbGVkbu0gYnVmZmVyIG5lbHplIGRlYWt0aXZvdmF0IgorCisjOiBidWZmZXIuYzoxMzE0Cittc2dpZCAiVzE0OiBXYXJuaW5nOiBMaXN0IG9mIGZpbGUgbmFtZXMgb3ZlcmZsb3ciCittc2dzdHIgIlcxNDogVmFyb3bhbu06IHD4ZXRl6GVu7SBzZXpuYW11IHMgbuF6dnkgc291Ym9y+SIKKworIzogYnVmZmVyLmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFOTI6IEJ1ZmZlciAlbGQgbm90IGZvdW5kIgorbXNnc3RyICJFOTI6IEJ1ZmZlciAlbGQgbmVuYWxlemVuIgorCisjOiBidWZmZXIuYzoxNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5MzogVnpvcnUgJXMgdnlob3Z1amUgdu1jZSBidWZmZXL5IgorCisjOiBidWZmZXIuYzoxNzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiBWem9ydSAlcyBuZXZ5aG92dWplIJ7hZG79IGJ1ZmZlciIKKworIzogYnVmZmVyLmM6MjEwNSBleF9kb2NtZC5jOjYwNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQiCittc2dzdHIgIvjhZGVrICVsZCIKKworIzogYnVmZmVyLmM6MjE4OAorbXNnaWQgIkU5NTogQnVmZmVyIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFOTU6IEJ1ZmZlciB0b2hvdG8gam3pbmEgammeIGV4aXN0dWplIgorCisjOiBidWZmZXIuYzoyNDgxCittc2dpZCAiIFtNb2RpZmllZF0iCittc2dzdHIgIiBbWm3sbuxu/V0iCisKKyM6IGJ1ZmZlci5jOjI0ODYKK21zZ2lkICJbTm90IGVkaXRlZF0iCittc2dzdHIgIltOZWVkaXRvdmFu/V0iCisKKyM6IGJ1ZmZlci5jOjI0OTEKK21zZ2lkICJbTmV3IGZpbGVdIgorbXNnc3RyICJbTm92/SBzb3Vib3JdIgorCisjOiBidWZmZXIuYzoyNDkyCittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW0NoeWJ5IHD4aSDodGVu7V0iCisKKyM6IGJ1ZmZlci5jOjI0OTQgZmlsZWlvLmM6MTc1NAorbXNnaWQgIltyZWFkb25seV0iCittc2dzdHIgIltQb3V6ZSBwcm8g6HRlbu1dIgorCisjOiBidWZmZXIuYzoyNTEwCittc2dpZCAiMSBsaW5lIC0tJWQlJS0tIgorbXNnc3RyICL44WRr+TogLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI1MTAKK21zZ2lkICIlbGQgbGluZXMgLS0lZCUlLS0iCittc2dzdHIgIvjhZGv5OiAlbGQgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI1MTgKK21zZ2lkICJsaW5lICVsZCBvZiAlbGQgLS0lZCUlLS0gY29sICIKK21zZ3N0ciAi+OFkZWsgJWxkLyVsZCAtLSVkJSUtLSBzbG91cGVjIgorCisjOiBidWZmZXIuYzoyNjA2Cittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJbjuFkbv0gc291Ym9yXSIKKworIy4gbXVzdCBiZSBhIGhlbHAgYnVmZmVyCisjOiBidWZmZXIuYzoyNjQ2Cittc2dpZCAiaGVscCIKK21zZ3N0ciAibuFwb3bsZGEiCisKKyM6IGJ1ZmZlci5jOjMxNTEgc2NyZWVuLmM6NDY3MQorbXNnaWQgIltoZWxwXSIKK21zZ3N0ciAiW27hcG927GRhXSIKKworIzogYnVmZmVyLmM6MzE4MyBzY3JlZW4uYzo0Njc3Cittc2dpZCAiW1ByZXZpZXddIgorbXNnc3RyICJbbuFobGVkXSIKKworIzogYnVmZmVyLmM6MzM4OQorbXNnaWQgIkFsbCIKK21zZ3N0ciAiVpplIgorCisjOiBidWZmZXIuYzozMzg5Cittc2dpZCAiQm90IgorbXNnc3RyICJLb25lYyIKKworIzogYnVmZmVyLmM6MzM5MQorbXNnaWQgIlRvcCIKK21zZ3N0ciAiWmHo4XRlayIKKworIzogYnVmZmVyLmM6NDEyNworbXNnaWQgIiIKKyJcbiIKKyIjIEJ1ZmZlciBsaXN0OlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBTZXpuYW0gYnVmZmVy+TpcbiIKKworIzogYnVmZmVyLmM6NDE2MAorbXNnaWQgIltFcnJvciBMaXN0XSIKK21zZ3N0ciAiW3Nlem5hbSBjaHliXSIKKworIzogYnVmZmVyLmM6NDE3MyBtZW1saW5lLmM6MTUxMworbXNnaWQgIltObyBGaWxlXSIKK21zZ3N0ciAiW57hZG79IHNvdWJvcl0iCisKKyM6IGJ1ZmZlci5jOjQzOTMKK21zZ2lkICIiCisiXG4iCisiLS0tIFNpZ25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBabmFreSAtLS0iCisKKyM6IGJ1ZmZlci5jOjQ0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2lnbnMgZm9yICVzOiIKK21zZ3N0ciAiWm5ha3kgcHJvICVzOiIKKworIzogYnVmZmVyLmM6NDQwOQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgbGluZT0lbGQgIGlkPSVkICBuYW1lPSVzIgorbXNnc3RyICIgICAg+OFkZWs9JWxkIGlkPSVkIGpt6W5vPSVzIgorCisjOiBkaWZmLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NjogQ2FuIG5vdCBkaWZmIG1vcmUgdGhhbiAlbGQgYnVmZmVycyIKK21zZ3N0ciAiRTk2OiBOZWx6ZSBw+GVrcm/oaXQgbWF4aW3hbG7tIHBv6GV0ICVsZCBkaWZmIGJ1ZmZlcvkiCisKKyM6IGRpZmYuYzo2NDgKK21zZ2lkICJFOTc6IENhbm5vdCBjcmVhdGUgZGlmZnMiCittc2dzdHIgIkU5NzogTmVsemUgdnl0dm/4aXQgZGlmZnkiCisKKyM6IGRpZmYuYzo3NDcKK21zZ2lkICJQYXRjaCBmaWxlIgorbXNnc3RyICJTb3Vib3Igc2UgeuFwbGF0b3UiCisKKyM6IGRpZmYuYzo5OTEKK21zZ2lkICJFOTg6IENhbm5vdCByZWFkIGRpZmYgb3V0cHV0IgorbXNnc3RyICJFOTg6IE5lbHplIOjtc3Qgdv1zdHVwIHByb2dyYW11IGRpZmYiCisKKyM6IGRpZmYuYzoxNzA0Cittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IEFrdHXhbG7tIGJ1ZmZlciBuZW7tIHYgZGlmZiByZZ5pbXUiCisKKyM6IGRpZmYuYzoxNzE2Cittc2dpZCAiRTEwMDogTm8gb3RoZXIgYnVmZmVyIGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMDogVG8gYnlsIHBvc2xlZG7tIGJ1ZmZlciB2IGRpZmYgcmWeaW11IgorCisjOiBkaWZmLmM6MTcyNAorbXNnaWQgIkUxMDE6IE1vcmUgdGhhbiB0d28gYnVmZmVycyBpbiBkaWZmIG1vZGUsIGRvbid0IGtub3cgd2hpY2ggb25lIHRvIHVzZSIKK21zZ3N0ciAiRTEwMTogViBkaWZmIHJlnmltdSBqc291IHbtY2UgbmWeIGR2YSBidWZmZXJ5LiBOZXbtbSwga3Rlcv0gbeFtIHBvdZ7tdC4iCisKKyM6IGRpZmYuYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDI6IENhbid0IGZpbmQgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTEwMjogTmVsemUgbmFs6Xp0IGJ1ZmZlciBcIiVzXCIiCisKKyM6IGRpZmYuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzogQnVmZmVyIFwiJXNcIiBuZW7tIHYgZGlmZiByZZ5pbXUiCisKKyM6IGRpZ3JhcGguYzoyMTY4Cittc2dpZCAiRTEwNDogRXNjYXBlIG5vdCBhbGxvd2VkIGluIGRpZ3JhcGgiCittc2dzdHIgIkUxMDQ6IGRpZ3JhcGggbmVzbe0gb2JzYWhvdmF0IEVzY2FwZSIKKworIzogZGlncmFwaC5jOjIzNDAKK21zZ2lkICJLZXltYXAgZmlsZSBub3QgZm91bmQiCittc2dzdHIgIlNvdWJvciBzIG1hcG91IGts4XZlc25pY2UgbmVieWwgbmFsZXplbiIKKworIzogZGlncmFwaC5jOjIzNjcKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IDpsb2Fka2V5bWFwIG1pbW8gaW50ZXJwcmV0b3Zhbv0gc291Ym9yIgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBEb3Bs8m924W7tIGts7ehvdv1jaCBzbG92ICheTi9eUCkiCisKKyMuIGN0cmxfeF9tb2RlID09IDAsIF5QL15OIGNvbXBsLgorIzogZWRpdC5jOjQxCittc2dpZCAiIF5YIG1vZGUgKF5FL15ZL15ML15dL15GL15JL15LL15EL15WL15OL15QKSIKK21zZ3N0ciAiIF5YIHJlnmltICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eVi9eTi9eUCkiCisKKyMuIFNjcm9sbCBoYXMgaXQncyBvd24gbXNncywgaW4gaXQncyBwbGFjZSB0aGVyZSBpcyB0aGUgbXNnIGZvciBsb2NhbAorIy4gKiBjdHJsX3hfbW9kZSA9IDAgKGVnIGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfTE9DQUwpICAtLSBBY2V2ZWRvCisjOiBlZGl0LmM6NDQKK21zZ2lkICIgS2V5d29yZCBMb2NhbCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBMb2vhbG7tIGRvcGzyb3bhbu0ga2zt6G92/WNoIHNsb3YgKF5OL15QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkwvXk4vXlApIgorbXNnc3RyICIgRG9wbPJvduFu7SBjZWz9Y2gg+OFka/kgKF5ML15OL15QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRi9eTi9eUCkiCittc2dzdHIgIiBEb3Bs8m924W7tIG7henb5IHNvdWJvcvkgKF5GL15OL15QKSIKKworIzogZWRpdC5jOjQ3Cittc2dpZCAiIFRhZyBjb21wbGV0aW9uICheXS9eTi9eUCkiCittc2dzdHIgIiBEb3Bs8m924W7tIHRhZ/kgKF5JL15OL15QKSIKKworIzogZWRpdC5jOjQ4Cittc2dpZCAiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBEb3Bs8m924W7tIHZ6b3J1IGNlc3QgKF5OL15QKSIKKworIzogZWRpdC5jOjQ5Cittc2dpZCAiIERlZmluaXRpb24gY29tcGxldGlvbiAoXkQvXk4vXlApIgorbXNnc3RyICIgRG9wbPJvduFu7SBkZWZpbmljICheRC9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3bhbu0gcG9kbGUgc2xvdm7ta3UgKF5LL15OL15QKSIKKworIzogZWRpdC5jOjUyCittc2dpZCAiIFRoZXNhdXJ1cyBjb21wbGV0aW9uICheVC9eTi9eUCkiCittc2dzdHIgIiBEb3Bs8m924W7tIHBvZGxlIHRlemF1cnUgKF5UL15OL15QKSIKKworIzogZWRpdC5jOjUzCittc2dpZCAiIENvbW1hbmQtbGluZSBjb21wbGV0aW9uICheVi9eTi9eUCkiCittc2dzdHIgIiBEb3Bs8m924W7tIHD47Wthem926SD44WRreSAoXkkvXk4vXlApIgorCisjOiBlZGl0LmM6NTYKK21zZ2lkICJIaXQgZW5kIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAiS29uZWMgb2RzdGF2Y2UiCisKKyM6IGVkaXQuYzo4OTQKK21zZ2lkICIndGhlc2F1cnVzJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgInZvbGJhICd0aGVzYXVydXMnIGplIHBy4XpkbuEiCisKKyM6IGVkaXQuYzoxMDcwCittc2dpZCAiJ2RpY3Rpb25hcnknIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAidm9sYmEgJ2RpY3Rpb25hcnknIGplIHBy4XpkbuEiCisKKyM6IGVkaXQuYzoxOTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGRpY3Rpb25hcnk6ICVzIgorbXNnc3RyICJQcm9obGVk4XbhbSBzbG92bu1rICVzIgorCisjOiBlZGl0LmM6MjE4MworbXNnaWQgIiAoaW5zZXJ0KSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiIChpbnNlcnQpIFJvbG924W7tICheRS9eWSkiCisKKyM6IGVkaXQuYzoyMTg1Cittc2dpZCAiIChyZXBsYWNlKSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiIChyZXBsYWNlKSBSb2xvduFu7SAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIlByb2hsZWThduFtICVzIgorCisjOiBlZGl0LmM6MjUzMQorbXNnaWQgIlNjYW5uaW5nIHRhZ3MuIgorbXNnc3RyICJQcm9obGVk4XbhbSB0YWd5IgorCisjOiBlZGl0LmM6MzE4OQorbXNnaWQgIiBBZGRpbmciCittc2dzdHIgIlD4aWThduFtIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjMyMzgKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIEhsZWThbS4uLiIKKworIzogZWRpdC5jOjMyOTQKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICJW/WNob3rtIHBvZG9iYSIKKworIzogZWRpdC5jOjMyOTkKK21zZ2lkICJXb3JkIGZyb20gb3RoZXIgbGluZSIKK21zZ3N0ciAiU2xvdm8geiBqaW7paG8g+OFka3UiCisKKyM6IGVkaXQuYzozMzA0Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIkplZGlu4SBzaG9kYSIKKworIzogZWRpdC5jOjMzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQgb2YgJWQiCittc2dzdHIgInNob2RhICVkLyVkIgorCisjOiBlZGl0LmM6MzM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYXRjaCAlZCIKK21zZ3N0ciAic2hvZGEgJWQiCisKKyM6IGV2YWwuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNjogVW5rbm93biB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA2OiBOZXpu4W3hIHByb23sbm7hOiBcIiVzXCIiCisKKyM6IGV2YWwuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNzogTWlzc2luZyBicmFjZXM6ICVzIgorbXNnc3RyICJFMTA3OiBDaHli7SB64XZvcmt5OiAlcyIKKworIzogZXZhbC5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiBQcm9t7G5u4SBcIiVzXCIgbmVleGlzdHVqZSIKKworIzogZXZhbC5jOjEyODQKK21zZ2lkICJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciCittc2dzdHIgIkUxMDk6IFBvICc/JyBjaHli7SAnOiciCisKKyM6IGV2YWwuYzoxODk4Cittc2dpZCAiRTExMDogTWlzc2luZyAnKSciCittc2dzdHIgIkUxMTA6IENoeWLsau1j7SAnKSciCisKKyM6IGV2YWwuYzoxOTQ4Cittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6IENoeWLsau1j7SAnXSciCisKKyM6IGV2YWwuYzoyMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIgorbXNnc3RyICJFMTEyOiBDaHli7SBqbelubyB2b2xieTogJXMiCisKKyM6IGV2YWwuYzoyMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTM6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTExMzogTmV6buFt4SB2b2xiYTogJXMiCisKKyM6IGV2YWwuYzoyMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTQ6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE0OiBDaHli7SB1dm96b3ZreTogJXMiCisKKyM6IGV2YWwuYzoyMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTU6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE1OiBDaHli7SB1dm96b3ZreTogJXMiCisKKyM6IGV2YWwuYzoyNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTExNjogQ2h5Ym7pIGFyZ3VtZW50eSBwcm8gZnVua2NpICVzIgorCisjOiBldmFsLmM6MjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE3OiBVbmtub3duIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExNzogTmV6buFt4SBmdW5rY2U6ICVzIgorCisjOiBldmFsLmM6MjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODogUPjtbGmaIG1ub2hvIGFyZ3VtZW50+SBwcm8gZnVua2NpICVzIgorCisjOiBldmFsLmM6MjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE5OiBOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE5OiBQ+O1saZogbeFsbyBhcmd1bWVudPkgcHJvIGZ1bmtjaSAlcyIKKworIzogZXZhbC5jOjI1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMDogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQ6ICVzIgorbXNnc3RyICJFMTIwOiBQb3WeaXTtIDxTSUQ+IG1pbW8ga29udGV4dCBza3JpcHR1OiAlcyIKKworIzogZXZhbC5jOjM1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQg+OFka/k6IgorCisjOiBldmFsLmM6NDY5MAorbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJk9LXG4iCisiJlpydZppdCIKKworIzogZXZhbC5jOjU1MTMKK21zZ2lkICJFMjQwOiBObyBjb25uZWN0aW9uIHRvIFZpbSBzZXJ2ZXIiCittc2dzdHIgIkUyNDA6IE5lZXhpc3R1amUgcPhpcG9qZW7tIGsgVmltIHNlcnZlcnUiCisKKyM6IGV2YWwuYzo1NjAzCittc2dpZCAiRTI3NzogVW5hYmxlIHRvIHJlYWQgYSBzZXJ2ZXIgcmVwbHkiCittc2dzdHIgIkUyNzc6IE5lbHplIOjtc3Qgb2Rwb3bs7yBzZXJ2ZXJ1IgorCisjOiBldmFsLmM6NTYyOAorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODogTmVsemUgcPhlZGF0IGtsaWVudG92aSIKKworIzogZXZhbC5jOjU2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MTogVW5hYmxlIHRvIHNlbmQgdG8gJXMiCittc2dzdHIgIkUyNDE6IE5lbHplIHD4ZWRhdCBkbyAlcyIKKworIzogZXZhbC5jOjU3NjcKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIihDaHlibv0pIgorCisjOiBldmFsLmM6Njc3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgorbXNnc3RyICJFMTIxOiBOZWRlZmlub3ZhbuEgcHJvbexubuE6ICVzIgorCisjOiBldmFsLmM6NzQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgdXNlICEgdG8gcmVwbGFjZSIKK21zZ3N0ciAiRTEyMjogRnVua2NlICVzIGppniBleGlzdHVqZS4gUG91nmlqdGUgISBwcm8gamVq7SBuYWhyYXplbu0uIgorCisjOiBldmFsLmM6NzUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiBOZWRlZmlub3ZhbuEgZnVua2NlOiAlcyIKKworIzogZXZhbC5jOjc1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNDogTWlzc2luZyAnKCc6ICVzIgorbXNnc3RyICJFMTI0OiBDaHli7SAnKCc6ICVzIgorCisjOiBldmFsLmM6NzU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNTogTmVw+O1wdXN0bv0gYXJndW1lbnQ6ICVzIgorCisjOiBldmFsLmM6NzY0MQorbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiBDaHli7SA6ZW5kZnVuY3Rpb24iCisKKyM6IGV2YWwuYzo3NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjc6IENhbm5vdCByZWRlZmluZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTI3OiBOZWx6ZSBw+GVkZWZpbm92YXQgZnVua2NpICVzOiBqZSBwb3We7XbhbmEiCisKKyM6IGV2YWwuYzo3Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6IE7hemV2IGZ1bmtjZSBtdXPtIHph6O1uYXQgdmVsa/1tIHDtc21lbmVtOiAlcyIKKworIzogZXZhbC5jOjc3ODMKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiBKZSB2eZ5hZG924W5vIGpt6W5vIGZ1bmtjZSIKKworIzogZXZhbC5jOjc4NzYKK21zZ2lkICJmdW5jdGlvbiAiCittc2dzdHIgImZ1bmtjZSAiCisKKyM6IGV2YWwuYzo3OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzA6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMzA6IE5lZGVmaW5vdmFu4SBmdW5rY2U6ICVzIgorCisjOiBldmFsLmM6Nzk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTMxOiBDYW5ub3QgZGVsZXRlIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMzE6IE5lbHplIHNtYXphdCBmdW5rY2kgJXM6IGplIGppniBwb3We7XbhbmEiCisKKyM6IGV2YWwuYzo4MDQzCittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiRTEzMjogWmFub/hlbu0gZnVua2NlIGplIGhsdWKa7SBuZZ4gJ21heGZ1bmNkZXB0aCciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjgwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAidm9s4W0gJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjgxMTkgZXhfY21kczIuYzoxOTczCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbnRpbnVpbmcgaW4gJXMiCittc2dzdHIgInBva3Jh6HVqaSB2ICVzIgorCisjOiBldmFsLmM6ODE3MworbXNnaWQgIkUxMzM6IDpyZXR1cm4gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTMzOiA6cmV0dXJuIG1pbW8gZnVua2NpIgorCisjOiBldmFsLmM6ODI1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgIyVsZCIKK21zZ3N0ciAiZG9rb27oZW5vIHByb3bhZOxu7SAlcy4gTuF2cmF0b3bhIGhvZG5vdGEgIyVsZCIKKworIzogZXZhbC5jOjgyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nIFwiJXNcIiIKK21zZ3N0ciAiZG9rb27oZW5vIHByb3bhZOxu7SAlcy4gTuF2cmF0b3bhIGhvZG5vdGEgXCIlc1wiIgorCisjOiBldmFsLmM6ODM5NQorbXNnaWQgIiIKKyJcbiIKKyIjIGdsb2JhbCB2YXJpYWJsZXM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIGdsb2LhbG7tIHByb23sbm7pOlxuIgorCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICCaZXN0buFjdGtvduwgJTAyeCwgIG9zbWnoa2927CAlMDNvIgorCisjOiBleF9jbWRzLmM6NDI4Cittc2dpZCAiRTEzNDogTW92ZSBsaW5lcyBpbnRvIHRoZW1zZWx2ZXMiCittc2dzdHIgIkUxMzQ6IE5lbHplIHD4ZXN1bm91dCD44WRreSBuYSBw+XZvZG7tIG3tc3RvIgorCisjOiBleF9jbWRzLmM6NDk3Cittc2dpZCAiMSBsaW5lIG1vdmVkIgorbXNnc3RyICJwb+hldCBw+GVzdW51dP1jaCD44WRr+TogMSIKKworIzogZXhfY21kcy5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgbW92ZWQiCittc2dzdHIgIlBv6GV0IHD4ZXN1bnV0/WNoIPjhZGv5OiAlbGQiCisKKyM6IGV4X2NtZHMuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICJQb+hldCBmaWx0cm92YW79Y2gg+OFka/k6ICVsZCIKKworIzogZXhfY21kcy5jOjkxOAorbXNnaWQgIkUxMzU6ICpGaWx0ZXIqIEF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUxMzU6IEF1dG9tYXRpY2vpIHD47WthenkgKkZpbHRlciogbmVzbe0gbexuaXQgYWt0deFsbu0gYnVmZmVyIgorCisjOiBleF9jbWRzLmM6MTAwMworbXNnaWQgIltObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZV1cbiIKK21zZ3N0ciAiW05ldWxvnmVu6SB6bexueV1cbiIKKworIzogZXhfY21kcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmltaW5mbzogJXMgaW4gbGluZTogIgorbXNnc3RyICJ2aW1pbmZvOiAlcyBuYSD44WRrdTogIgorCisjOiBleF9jbWRzLmM6MTI1MworbXNnaWQgIkUxMzY6IHZpbWluZm86IFRvbyBtYW55IGVycm9ycywgc2tpcHBpbmcgcmVzdCBvZiBmaWxlIgorbXNnc3RyICJFMTM2OiB2aW1pbmZvOiBw+O1saZogbW5vaG8gY2h5YiwgcPhlc2tha3VqaSB6Ynl0ZWsgc291Ym9ydSIKKworIzogZXhfY21kcy5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiJXMlcyVzIgorbXNnc3RyICLIdHUgdmltaW5mbyBzb3Vib3IgXCIlc1wiJXMlcyVzIgorCisjOiBleF9jbWRzLmM6MTI4MworbXNnaWQgIiBpbmZvIgorbXNnc3RyICIgaW5mb3JtYWNlIgorCisjOiBleF9jbWRzLmM6MTI4NAorbXNnaWQgIiBtYXJrcyIKK21zZ3N0ciAiIHpuYehreSIKKworIzogZXhfY21kcy5jOjEyODUKK21zZ2lkICIgRkFJTEVEIgorbXNnc3RyICIgc2UgbmV6ZGH4aWxvIgorCisjOiBleF9jbWRzLmM6MTM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM3OiBWaW1pbmZvIGZpbGUgaXMgbm90IHdyaXRhYmxlOiAlcyIKK21zZ3N0ciAiRTEzNzogZG8gdmltaW5mbyBzb3Vib3J1ICVzIG5lbHplIHphcGlzb3ZhdCIKKworIzogZXhfY21kcy5jOjE1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzODogQ2FuJ3Qgd3JpdGUgdmltaW5mbyBmaWxlICVzISIKK21zZ3N0ciAiRTEzODogTmVsemUgdWxvnml0IHZpbWluZm8gc291Ym9yICVzISIKKworIzogZXhfY21kcy5jOjE1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiIgorbXNnc3RyICJVa2zhZOFtIHZpbWluZm8gc291Ym9ydSBcIiVzXCIiCisKKyMuIFdyaXRlIHRoZSBpbmZvOgorIzogZXhfY21kcy5jOjE2MTAKK21zZ2lkICIjIFRoaXMgdmltaW5mbyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVmltICVzLlxuIgorbXNnc3RyICIjIFRlbnRvIHZpbWluZm8gc291Ym9yIGJ5bCB2eXR2b/hlbiBlZGl0b3JlbSBWaW0gJXMuXG4iCisKKyM6IGV4X2NtZHMuYzoxNjEyCittc2dpZCAiIgorIiMgWW91IG1heSBlZGl0IGl0IGlmIHlvdSdyZSBjYXJlZnVsIVxuIgorIlxuIgorbXNnc3RyICIiCisiIyBQb2t1ZCBidWRldGUgb3BhdHJu/SwgbfmeZXRlIGplaiB1cHJhdm92YXQuXG4iCisiXG4iCisKKyM6IGV4X2NtZHMuYzoxNjE0Cittc2dpZCAiIyBWYWx1ZSBvZiAnZW5jb2RpbmcnIHdoZW4gdGhpcyBmaWxlIHdhcyB3cml0dGVuXG4iCittc2dzdHIgIiMgSG9kbm90YSB2b2xieSAnZW5jb2RpbmcnIHYgZG9i7CB1bG+eZW7tIHRvaG90byBzb3Vib3J1XG4iCisKKyM6IGV4X2NtZHMuYzoxNzEzCittc2dpZCAiSWxsZWdhbCBzdGFydGluZyBjaGFyIgorbXNnc3RyICJOZXD47XB1c3Ru/SBwb+jhdGXobu0gem5hayIKKworIzogZXhfY21kcy5jOjIwNTMgZXhfY21kcy5jOjIyODkgZXhfY21kczIuYzo2MDIKK21zZ2lkICJTYXZlIEFzIgorbXNnc3RyICJVbG+eaXQgamFrbyIKKworIy4gT3ZlcndyaXRpbmcgYSBmaWxlIHRoYXQgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIGlzIG5vdCBhCisjLiAqIGdvb2QgaWRlYS4KKyM6IGV4X2NtZHMuYzoyMDk2Cittc2dpZCAiRTEzOTogRmlsZSBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIiCittc2dzdHIgIkUxMzk6IFNvdWJvciBqZSBuYWhy4W4gdiBqaW7pbSBidWZmZXJ1IgorCisjOiBleF9jbWRzLmM6MjEzMAorbXNnaWQgIldyaXRlIHBhcnRpYWwgZmlsZT8iCittc2dzdHIgIlVsb55pdCBuZfpwbG79IHNvdWJvcj8iCisKKyM6IGV4X2NtZHMuYzoyMTM3Cittc2dpZCAiRTE0MDogVXNlICEgdG8gd3JpdGUgcGFydGlhbCBidWZmZXIiCittc2dzdHIgIkUxNDA6IFBvdZ5panRlICEgcHJvIHVsb55lbu0gbmX6cGxu6WhvIGJ1ZmZlcnUiCisKKyM6IGV4X2NtZHMuYzoyMjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAiUPhlcHNhdCBzb3Vib3IgXCIlLipzXCI/IgorCisjOiBleF9jbWRzLmM6MjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQxOiBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkUxNDE6II7hZG79IG7hemV2IHNvdWJvcnUgcHJvIGJ1ZmZlciAlbGQiCisKKyM6IGV4X2NtZHMuYzoyMzMyCittc2dpZCAiRTE0MjogRmlsZSBub3Qgd3JpdHRlbjogV3JpdGluZyBpcyBkaXNhYmxlZCBieSAnd3JpdGUnIG9wdGlvbiIKK21zZ3N0ciAiRTE0MjogU291Ym9yIG5lYnlsIHVsb55lbjogVWts4WThbu0gamUgemFr4Xrhbm8gdm9sYm91ICd3cml0ZSciCisKKyM6IGV4X2NtZHMuYzoyMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgZm9yIFwiJS4qc1wiLlxuIgorIkRvIHlvdSB3aXNoIHRvIHdyaXRlIGFueXdheT8iCittc2dzdHIgIiIKKyJQcm8gXCIlLipzXCIgamUgbmFzdGF2ZW5hIHZvbGJhICdyZWFkb25seScuXG4iCisiUPhlamV0ZSBzaSBqaSBwb3RsYehpdD8iCisKKyM6IGV4X2NtZHMuYzoyNTE3Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICJFZGl0b3ZhdCBzb3Vib3IiCisKKyM6IGV4X2NtZHMuYzozMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiBBdXRvbWF0aWNr6SBw+O1rYXp5IG5lb+hla+F2YW7sIHNtYXphbHkgbm92/SBidWZmZXIgJXMiCisKKyM6IGV4X2NtZHMuYzozMTU2Cittc2dpZCAiRTE0NDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gOnoiCittc2dzdHIgIkUxNDQ6IG5l6O1zZWxu/SBhcmd1bWVudCBwcm8gOnoiCisKKyM6IGV4X2NtZHMuYzozMjQxCittc2dpZCAiRTE0NTogU2hlbGwgY29tbWFuZHMgbm90IGFsbG93ZWQgaW4gcnZpbSIKK21zZ3N0ciAiRTE0NTogcnZpbSBuZXBvdm9sdWplIHBvdZ5pdO0gcPjta2F6+SBzaGVsbHUiCisKKyM6IGV4X2NtZHMuYzozMzQ4Cittc2dpZCAiRTE0NjogUmVndWxhciBleHByZXNzaW9ucyBjYW4ndCBiZSBkZWxpbWl0ZWQgYnkgbGV0dGVycyIKK21zZ3N0ciAiRTE0NjogUmVndWzhcm7tIHb9cmF6eSBuZXNt7SBi/XQgb2Rk7GxlbnkgcO1zbWVueSIKKworIzogZXhfY21kcy5jOjM2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKK21zZ3N0ciAibmFocmFkaXQgemEgJXMgKHkvbi9hL3EvbC9eRS9eWSk/IgorCisjOiBleF9jbWRzLmM6NDA1MAorbXNnaWQgIihJbnRlcnJ1cHRlZCkgIgorbXNnc3RyICIoUPhlcnWaZW5vKSAiCisKKyM6IGV4X2NtZHMuYzo0MDU0Cittc2dpZCAiMSBzdWJzdGl0dXRpb24iCittc2dzdHIgIjEgbmFocmF6ZW7tIgorCisjOiBleF9jbWRzLmM6NDA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgc3Vic3RpdHV0aW9ucyIKK21zZ3N0ciAiJWxkIG5haHJhemVu7SIKKworIzogZXhfY21kcy5jOjQwNTkKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIgbmEgamVkbm9tIPjhZGt1IgorCisjOiBleF9jbWRzLmM6NDA2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gJWxkIGxpbmVzIgorbXNnc3RyICIgbmEgJWxkIPjhZGPtY2giCisKKyM6IGV4X2NtZHMuYzo0MTEyCittc2dpZCAiRTE0NzogQ2Fubm90IGRvIDpnbG9iYWwgcmVjdXJzaXZlIgorbXNnc3RyICJFMTQ3OiA6Z2xvYmFsIG5lbHplIHZvbGF0IHJla3Vyeml2buwiCisKKyM6IGV4X2NtZHMuYzo0MTQ3Cittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IFUgcPjta2F6dSAnZ2xvYmFsJyBjaHli7SByZWd1bOFybu0gdv1yYXoiCisKKyM6IGV4X2NtZHMuYzo0MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIlZ6b3IgbmFsZXplbiBuYSBrYZ5k6W0g+OFka3U6ICVzIgorCisjOiBleF9jbWRzLmM6NDI3NworbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMgUG9zbGVkbu0gbmFocmF6dWrtY+0g+GV07HplYzpcbiIKKyIkIgorCisjOiBleF9jbWRzLmM6NDM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQ5OiBTb3JyeSwgbm8gaGVscCBmb3IgJXMiCittc2dzdHIgIkUxNDk6IExpdHVqaSwgcHJvICVzIG5lbu0gnuFkbuEgbuFwb3bsZGEiCisKKyM6IGV4X2NtZHMuYzo0NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAiTGl0dWppLCBzb3Vib3IgXCIlc1wiIHMgbuFwb3bsZG91IG5lYnlsIG5hbGV6ZW4iCisKKyM6IGV4X2NtZHMuYzo0ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTA6IE5vdCBhIGRpcmVjdG9yeTogJXMiCittc2dzdHIgIkUxNTA6ICVzIG5lbu0gYWRyZXPh+GVtIgorCisjOiBleF9jbWRzLmM6NDg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUyOiBDYW5ub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE1MjogTmVsemUgb3RldvjtdCAlcyBwcm8geuFwaXMiCisKKyM6IGV4X2NtZHMuYzo0ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTM6IFVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTUzOiBOZWx6ZSBvdGV2+O10ICVzIHBybyB64XBpcyIKKworIzogZXhfY21kcy5jOjQ5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcyIKK21zZ3N0ciAiRTE1NDogRHVwbGljaXRu7SB0YWcgXCIlc1wiIHYgc291Ym9ydSAlcyIKKworIzogZXhfY21kcy5jOjUwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiBOZXpu4W3hIHZvbGJhIHD47WthenU6ICVzIgorCisjOiBleF9jbWRzLmM6NTA5OAorbXNnaWQgIkUxNTY6IE1pc3Npbmcgc2lnbiBuYW1lIgorbXNnc3RyICJFMTU2OiBDaHli7SBqbelubyB2b2xieSIKKworIzogZXhfY21kcy5jOjUxNDQKK21zZ2lkICJFMjU1OiBUb28gbWFueSBzaWducyBkZWZpbmVkIgorbXNnc3RyICJFMjU1OiBOYXN0YXZlbm8gcPjtbGmaIG1ub2hvIHZvbGViIgorCisjOiBleF9jbWRzLmM6NTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM5OiBJbnZhbGlkIHNpZ24gdGV4dDogJXMiCittc2dzdHIgIkUyMzk6IE5lcGxhdG79IHRleHQgdm9sYnk6ICVzIgorCisjOiBleF9jbWRzLmM6NTIxMCBleF9jbWRzLmM6NTM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiBOZXpu4W3hIHZvbGJhOiAlcyIKKworIzogZXhfY21kcy5jOjUyNTYKK21zZ2lkICJFMTU5OiBNaXNzaW5nIHNpZ24gbnVtYmVyIgorbXNnc3RyICJFMTU5OiBDaHli7SBpZGVudGlmaWvhdG9yIHZvbGJ5IgorCisjOiBleF9jbWRzLmM6NTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU4OiBJbnZhbGlkIGJ1ZmZlciBuYW1lOiAlcyIKK21zZ3N0ciAiRTE1ODogY2h5Ym7pIGpt6W5vIGJ1ZmZlcnU6ICVzIgorCisjOiBleF9jbWRzLmM6NTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU3OiBJbnZhbGlkIHNpZ24gSUQ6ICVsZCIKK21zZ3N0ciAiRTE1NzogQ2h5Ym7pIElEIHZvbGJ5OiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1NTQ2Cittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJbVnltYXrhbm9dIgorCisjOiBleF9jbWRzMi5jOjcwCittc2dpZCAiRW50ZXJpbmcgRGVidWcgbW9kZS4gIFR5cGUgXCJjb250XCIgdG8gbGVhdmUuIgorbXNnc3RyICJTcG91mnTtbSBsYWTtY+0gcmWeaW0uIFBybyB1a29u6GVu7SBuYXBpmnRlIFwiY29udFwiLiIKKworIzogZXhfY21kczIuYzo3NCBleF9kb2NtZC5jOjc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogJXMiCittc2dzdHIgIvjhZGVrICVsZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY21kOiAlcyIKK21zZ3N0ciAicPjta2F6OiAlcyIKKworIzogZXhfY21kczIuYzoyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJlYWtwb2ludCBpbiBcIiVzJXNcIiBsaW5lICVsZCIKK21zZ3N0ciAiQm9kIHD4ZXJ1mmVu7SB2IFwiJXMlc1wiIG5hIPjhZGt1ICVsZCIKKworIzogZXhfY21kczIuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MTogQnJlYWtwb2ludCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMTYxOiBCb2QgcPhlcnWaZW7tIG5lbmFsZXplbjogJXMiCisKKyM6IGV4X2NtZHMyLmM6NDE0Cittc2dpZCAiTm8gYnJlYWtwb2ludHMgZGVmaW5lZCIKK21zZ3N0ciAiTmVieWx5IGRlZmlub3bhbnUgnuFkbukgYm9keSBw+GVydZplbu0iCisKKyM6IGV4X2NtZHMyLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUzZCAgJXMgJXMgIGxpbmUgJWxkIgorbXNnc3RyICIlM2QgICVzICVzICD44WRlayAlbGQiCisKKyM6IGV4X2NtZHMyLmM6NjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmUgY2hhbmdlcyB0byBcIiUuKnNcIj8iCittc2dzdHIgIlVsb55pdCB6bexueSBkbyBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMyLmM6NjI3IGV4X2RvY21kLmM6ODYxMgorbXNnaWQgIlVudGl0bGVkIgorbXNnc3RyICJOZXBvam1lbm924W5vIgorCisjOiBleF9jbWRzMi5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTYyOiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTE2MjogQnVmZmVyIFwiJXNcIiBvYnNhaHVqZSBuZXVsb55lbukgem3sbnkiCisKKyM6IGV4X2NtZHMyLmM6ODMyCittc2dpZCAiV2FybmluZzogRW50ZXJlZCBvdGhlciBidWZmZXIgdW5leHBlY3RlZGx5IChjaGVjayBhdXRvY29tbWFuZHMpIgorbXNnc3RyICIiCisiVmFyb3bhbu06IE5l6GVrYW79IHZzdHVwIGRvIGppbulobyBidWZmZXJ1ICh6a29udHJvbHVqdGUgYXV0b21hdGlja+kgcPjta2F6eSkiCisKKyM6IGV4X2NtZHMyLmM6MTIwOAorbXNnaWQgIkUxNjM6IFRoZXJlIGlzIG9ubHkgb25lIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE2MzogUHJvIGVkaXRhY2kgYnlsIHphZOFuIHBvdXplIGplZGVuIHNvdWJvciIKKworIzogZXhfY21kczIuYzoxMjEwCittc2dpZCAiRTE2NDogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBmaWxlIgorbXNnc3RyICJFMTY0OiBQ+GVkIHBydm7tIHNvdWJvciBuZWx6ZSBw+GVza2/oaXQiCisKKyM6IGV4X2NtZHMyLmM6MTIxMgorbXNnaWQgIkUxNjU6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBmaWxlIgorbXNnc3RyICJFMTY1OiBaYSBwb3NsZWRu7SBzb3Vib3IgbmVsemUgcPhlc2tv6Gl0IgorCisjOiBleF9jbWRzMi5jOjE2MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIgaW4gXCIlc1wiIgorbXNnc3RyICJIbGVk4W0gXCIlc1wiIHYgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIkhsZWThbSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorbXNnc3RyICJzb3Vib3IgXCIlc1wiIG5lYnlsIG5hbGV6ZW4gdiAncnVudGltZXBhdGgnIgorCisjOiBleF9jbWRzMi5jOjE3MTIKK21zZ2lkICJSdW4gTWFjcm8iCittc2dzdHIgIlNwdXN0aXQgbWFrcm8iCisKKyM6IGV4X2NtZHMyLmM6MTgxNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc291cmNlIGEgZGlyZWN0b3J5OiBcIiVzXCIiCittc2dzdHIgIm5lbHplIGludGVycHJldG92YXQgYWRyZXPh+DogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIm5lbHplIGludGVycHJldG92YXQgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IGNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICL44WRlayAlbGQ6IG5lbHplIGludGVycHJldG92YXQgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJpbnRlcnByZXR1amkgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IHNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAi+OFkZWsgJWxkOiBpbnRlcnByZXR1amkgJXMiCisKKyM6IGV4X2NtZHMyLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzb3VyY2luZyAlcyIKK21zZ3N0ciAiZG9rb27oZW5hIGludGVycHJldGFjZSAlcyIKKworIzogZXhfY21kczIuYzoyMjcyCittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIlcxNTogVmFyb3bhbu06IGNoeWJu/SBvZGTsbG92Yegg+OFka/kuIE1vnm7hIGNoeWLtIF5NLiIKKworIzogZXhfY21kczIuYzoyMzIxCittc2dpZCAiRTE2NzogOnNjcmlwdGVuY29kaW5nIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2NzogOnNjcmlwdGVuY29kaW5nIHBvdZ5pdG8gbWltbyBpbnRlcnByZXRvdmFu/SBzb3Vib3IiCisKKyM6IGV4X2NtZHMyLmM6MjM1NAorbXNnaWQgIkUxNjg6IDpmaW5pc2ggdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY4OiA6ZmluaXNoIHBvdZ5pdG8gbWltbyBpbnRlcnByZXRvdmFu/SBzb3Vib3IiCisKKyM6IGV4X2NtZHMyLmM6MjgyMAorbXNnaWQgIk5vIHRleHQgdG8gYmUgcHJpbnRlZCIKK21zZ3N0ciAijuFkbv0gdGV4dCBrIHZ5dGmadOxu7SIKKworIzogZXhfY21kczIuYzoyODk4Cittc2dpZCAiUHJpbnRpbmcgcGFnZSAlZCAoJWQlJSkiCittc2dzdHIgIlRpc2tudSBzdHJhbnUgJWQgKCVkJSUpIgorCisjOiBleF9jbWRzMi5jOjI5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIENvcHkgJWQgb2YgJWQiCittc2dzdHIgIiBLb3BpZSAlZCB6ICVkIgorCisjOiBleF9jbWRzMi5jOjI5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRlZDogJXMiCittc2dzdHIgIlZ5dGmadOxubzogJXMiCisKKyM6IGV4X2NtZHMyLmM6Mjk2NgorbXNnaWQgIlByaW50aW5nIGFib3J0ZWQiCittc2dzdHIgIlRpc2sgenJ1mmVuIgorCisjOiBleF9jbWRzMi5jOjMzNDQKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IE5lbHplIHphcGlzb3ZhdCBkbyB2/XN0dXBu7WhvIFBvc3RTY3JpcHRvdulobyBzb3Vib3J1IgorCisjOiBleF9jbWRzMi5jOjQwMTkKK21zZ2lkICJFMzI0OiBDYW4ndCBvcGVuIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkUzMjQ6IE5lbHplIG90ZXb47XQgdv1zdHVwbu0gUG9zdFNjcmlwdG92/SBzb3Vib3IiCisKKyM6IGV4X2NtZHMyLmM6NDA1NworbXNnaWQgIkU0NTY6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTY6IE5lbHplIG90ZXb47XQgc291Ym9yIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MDY4Cittc2dpZCAiRTQ1NzogQ2FuJ3QgcmVhZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU3OiBOZWx6ZSDo7XN0IHpkcm9qb3b9IFBvc3RTY3JpcHRvdv0gc291Ym9yIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MjY2Cittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICJPZGVz7WzhbSBuYSB0aXNr4XJudS4uLiIKKworIzogZXhfY21kczIuYzo0MjcwCittc2dpZCAiRTM2NTogRmFpbGVkIHRvIHByaW50IFBvc3RTY3JpcHQgZmlsZSIKK21zZ3N0ciAiRTM2NTogU2VsaGFsIHRpc2sgUG9zdFNjcmlwdG926WhvIHNvdWJvcnUiCisKKyM6IGV4X2NtZHMyLmM6NDI3MgorbXNnaWQgIlByaW50IGpvYiBzZW50LiIKK21zZ3N0ciAiVGlza2924SD6bG9oYSBvZGVzbOFuYS4iCisKKyM6IGV4X2NtZHMyLmM6NDY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50ICVzbGFuZ3VhZ2U6IFwiJXNcIiIKK21zZ3N0ciAiQWt0deFsbu0gJXNqYXp5azogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6IE5lbHplIG5hc3Rhdml0IGphenlrIG5hIFwiJXNcIiIKKworIzogZXhfZG9jbWQuYzo0OTEKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAiU3BvdZp07W0gRXggbfNkLiBOYXBpmnRlIFwidmlzdWFsXCIgcHJvIG7hdnJhdCBkbyBub3Jt4Wxu7WhvIG3zZHUuIgorCisjLiBtdXN0IGJlIGF0IEVPRgorIzogZXhfZG9jbWQuYzo1MjcKK21zZ2lkICJBdCBlbmQtb2YtZmlsZSIKK21zZ3N0ciAiS29uZWMgc291Ym9ydSIKKworIzogZXhfZG9jbWQuYzo2MDIKK21zZ2lkICJFMTY5OiBDb21tYW5kIHRvbyByZWN1cnNpdmUiCittc2dzdHIgIkUxNjk6IFD47WtheiBqZSBw+O1saZogcmVrdXJ6aXZu7SIKKworIzogZXhfZG9jbWQuYzo5MTEKK21zZ2lkICJFMTcwOiBNaXNzaW5nIDplbmR3aGlsZSIKK21zZ3N0ciAiRTE3MDogQ2h5Yu0gOmVuZHdoaWxlIgorCisjOiBleF9kb2NtZC5jOjkxMworbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiBDaHli7SA6ZW5kaWYiCisKKyM6IGV4X2RvY21kLmM6OTIzCittc2dpZCAiRW5kIG9mIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiS29uZWMgaW50ZXJwcmV0b3ZhbulobyBzb3Vib3J1IgorCisjOiBleF9kb2NtZC5jOjkyNAorbXNnaWQgIkVuZCBvZiBmdW5jdGlvbiIKK21zZ3N0ciAiS29uZWMgZnVua2NlIgorCisjOiBleF9kb2NtZC5jOjEzNDQKK21zZ2lkICJBbWJpZ3VvdXMgdXNlIG9mIHVzZXItZGVmaW5lZCBjb21tYW5kIgorbXNnc3RyICJOZWplZG5vem5h6G7pIHBvdZ5pdO0gdZ5pdmF0ZWxza3kgZGVmaW5vdmFu6WhvIHD47WthenUiCisKKyM6IGV4X2RvY21kLmM6MTM1OAorbXNnaWQgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAiTmVu7SBw+O1rYXplbSBlZGl0b3J1IgorCisjOiBleF9kb2NtZC5jOjE0NDEKK21zZ2lkICJEb24ndCBwYW5pYyEiCittc2dzdHIgIk5lcGFuaWth+HRlISIKKworIzogZXhfZG9jbWQuYzoxNDYwCittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuIgorbXNnc3RyICJaYWThbiB6cOx0bv0gcm96c2FoIgorCisjOiBleF9kb2NtZC5jOjE0NjkKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4sIE9LIHRvIHN3YXAiCittc2dzdHIgIlphZOFuIHpw7HRu/SByb3pzYWguIFByb2hvZGl0IGhyYW5pY2UiCisKKyM6IGV4X2RvY21kLmM6MTU4MAorbXNnaWQgIlVzZSB3IG9yIHc+PiIKK21zZ3N0ciAiUG91nmlqdGUgdyDoaSB3Pj4iCisKKyM6IGV4X2RvY21kLmM6MzA4NgorbXNnaWQgIkUzMTk6IFNvcnJ5LCB0aGUgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTMxOTogUPjta2F6IG5lbu0gdOl0byB2ZXJ6aSBib2h1nmVsIGltcGxlbWVudG924W4iCisKKyM6IGV4X2RvY21kLmM6MzI1NgorbXNnaWQgIkUxNzI6IE9ubHkgb25lIGZpbGUgbmFtZSBhbGxvd2VkIgorbXNnc3RyICJFMTcyOiBQ+O1wdXN0bv0gamUgcG91emUgamVkZW4gbuF6ZXYgc291Ym9ydSIKKworIzogZXhfZG9jbWQuYzozODEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG1vcmUgZmlsZXMgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIKK21zZ3N0ciAiSmWadOwgemL9dmFq7SBzb3Vib3J5IGsgZWRpdGFjaSAoJWQpLiBDaGNldGUgcPhlc3RvIHVrb27oaXQgZWRpdG9yPyIKKworIzogZXhfZG9jbWQuYzozODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzM6ICVsZCBtb3JlIGZpbGVzIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6IEplmnTsIHpi/XZhau0gc291Ym9yeSBrIGVkaXRhY2kgKCVsZCkuIgorCisjOiBleF9kb2NtZC5jOjM5MTEKK21zZ2lkICJFMTc0OiBDb21tYW5kIGFscmVhZHkgZXhpc3RzOiB1c2UgISB0byByZWRlZmluZSIKK21zZ3N0ciAiRTE3NDogUPjta2F6IGppniBleGlzdHVqZTogcG91nmlqdGUgISBwcm8gcPhlZGVmaW5vduFu7SIKKworIzogZXhfZG9jbWQuYzo0MDE2Cittc2dpZCAiIgorIlxuIgorIiAgICBOYW1lICAgICAgICBBcmdzIFJhbmdlIENvbXBsZXRlICBEZWZpbml0aW9uIgorbXNnc3RyICIiCisiXG4iCisiICAgIEpt6W5vICAgICAgIEFyZ3MgUm96c2FoINpwbG5vc3QgIERlZmluaWNlIgorCisjOiBleF9kb2NtZC5jOjQxMDUKK21zZ2lkICJObyB1c2VyLWRlZmluZWQgY29tbWFuZHMgZm91bmQiCittc2dzdHIgIk5lYnlseSBuYWxlemVueSCe4WRu6SB1nml2YXRlbHNreSBkZWZpbm92YW7pIHD47WthenkiCisKKyM6IGV4X2RvY21kLmM6NDEzNgorbXNnaWQgIkUxNzU6IE5vIGF0dHJpYnV0ZSBzcGVjaWZpZWQiCittc2dzdHIgIkUxNzU6IE5lYnlseSB6YWThbnkgnuFkbukgYXRyaWJ1dHkiCisKKyM6IGV4X2RvY21kLmM6NDE4OAorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3NjogQ2h5Ym79IHBv6GV0IGFyZ3VtZW50+SIKKworIzogZXhfZG9jbWQuYzo0MjAzCittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3NzogT3Bha2924W7tIG5lbfmeZSBi/XQgemFk4W5vIGR2YWty4XQiCisKKyM6IGV4X2RvY21kLmM6NDIxMworbXNnaWQgIkUxNzg6IEludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgY291bnQiCittc2dzdHIgIkUxNzg6IENoeWJu4SBpbXBsaWNpdG7tIGhvZG5vdGEgcHJvIHBv6GV0IgorCisjOiBleF9kb2NtZC5jOjQyNDEKK21zZ2lkICJFMTc5OiBhcmd1bWVudCByZXF1aXJlZCBmb3IgY29tcGxldGUiCittc2dzdHIgIkUxNzk6IGNoeWJu4SBpbXBsaWNpdG7tIGhvZG5vdGEgcHJvIG9wYWtvduFu7SIKKworIzogZXhfZG9jbWQuYzo0MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiBDaHlibuEgaG9kbm90YSBkb3Bsbuxu7TogJXMiCisKKyM6IGV4X2RvY21kLmM6NDI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgxOiBJbnZhbGlkIGF0dHJpYnV0ZTogJXMiCittc2dzdHIgIkUxODE6IENoeWJu/SBhdHJpYnV0OiAlcyIKKworIzogZXhfZG9jbWQuYzo0MzA5Cittc2dpZCAiRTE4MjogSW52YWxpZCBjb21tYW5kIG5hbWUiCittc2dzdHIgIkUxODI6IENoeWJu6SBqbelubyBw+O1rYXp1IgorCisjOiBleF9kb2NtZC5jOjQzMjQKK21zZ2lkICJFMTgzOiBVc2VyIGRlZmluZWQgY29tbWFuZHMgbXVzdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIiCittc2dzdHIgIkUxODM6IFWeaXZhdGVsc2t5IGRlZmlub3ZhbukgcPjta2F6eSBtdXPtIHph6O1uYXQgdmVsaWv9bSBw7XNtZW5lbS4iCisKKyM6IGV4X2RvY21kLmM6NDM5MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTg0OiBObyBzdWNoIHVzZXItZGVmaW5lZCBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE4NDogVZ5pdmF0ZWxza3kgZGVmaW5vdmFu/SBw+O1rYXogJXMgbmVleGlzdHVqZSIKKworIzogZXhfZG9jbWQuYzo0ODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTogTmVsemUgbmFs6Xp0IGJhcmV2bukgc2No6W1hICVzIgorCisjOiBleF9kb2NtZC5jOjQ4NTIKK21zZ2lkICJHcmVldGluZ3MsIFZpbSB1c2VyISIKK21zZ3N0ciAiQmxhaG9w+GVqaSwgdZ5pdmF0ZWxpIFZpbXUhIgorCisjOiBleF9kb2NtZC5jOjU1NDkKK21zZ2lkICJFZGl0IEZpbGUgaW4gbmV3IHdpbmRvdyIKK21zZ3N0ciAiRWRpdG92YXQgc291Ym9yIHYgbm926W0gb2tu7CIKKworIzogZXhfZG9jbWQuYzo1ODE1Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICKO4WRu/SBvZGts4WRhY+0gc291Ym9yIgorCisjOiBleF9kb2NtZC5jOjU5MTkKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAiVWxvnml0IHNvdWJvciIKKworIzogZXhfZG9jbWQuYzo1OTc4Cittc2dpZCAiRTE4NjogTm8gcHJldmlvdXMgZGlyZWN0b3J5IgorbXNnc3RyICJFMTg2OiCO4WRu/SBw+GVkY2hveu0gYWRyZXPh+CIKKworIzogZXhfZG9jbWQuYzo2MDU1Cittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4NzogTmV6buFt/SIKKworIzogZXhfZG9jbWQuYzo2MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIldpbmRvdyBwb3NpdGlvbjogWCAlZCwgWSAlZCIKK21zZ3N0ciAiVW3tc3Tsbu0gb2tuYTogWCAlZCwgWSAlZCIKKworIzogZXhfZG9jbWQuYzo2MTc4Cittc2dpZCAiRTE4ODogT2J0YWluaW5nIHdpbmRvdyBwb3NpdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIkUxODg6IE5hIHTpdG8gcGxhdGZvcm3sIG5lbHplIHVt7XN07G7tIG9rbmEgemppc3RpdCIKKworIzogZXhfZG9jbWQuYzo2NDQ0Cittc2dpZCAiU2F2ZSBSZWRpcmVjdGlvbiIKK21zZ3N0ciAiVWxvnml0IHD4ZXNt7HJvduFu7SIKKworIzogZXhfZG9jbWQuYzo2NTkzCittc2dpZCAiU2F2ZSBWaWV3IgorbXNnc3RyICJVbG+eaXQgcG9obGVkIgorCisjOiBleF9kb2NtZC5jOjY1OTQKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIlVsb55pdCBzZXplbu0iCisKKyM6IGV4X2RvY21kLmM6NjU5NgorbXNnaWQgIlNhdmUgU2V0dXAiCittc2dzdHIgIlVsb55pdCBuYXN0YXZlbu0iCisKKyM6IGV4X2RvY21kLmM6Njc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg5OiBcIiVzXCIgZXhpc3RzICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxODk6IFwiJXNcIiBleGlzdHVqZSAocG91nmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjOiBleF9kb2NtZC5jOjY3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5MDogQ2Fubm90IG9wZW4gXCIlc1wiIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTkwOiBOZWx6ZSBvdGV2+O10IFwiJXNcIiBwcm8geuFwaXMiCisKKyMuIHNldCBtYXJrCisjOiBleF9kb2NtZC5jOjY3NzQKK21zZ2lkICJFMTkxOiBBcmd1bWVudCBtdXN0IGJlIGEgbGV0dGVyIG9yIGZvcndhcmQvYmFja3dhcmQgcXVvdGUiCittc2dzdHIgIkUxOTE6IEFyZ3VtZW50ZW0gbfmeZSBi/XQgcG91emUgcO1zbWVubyBuZWJvIHByYXb9IOhpIGxldv0gYXBvc3Ryb2YiCisKKyM6IGV4X2RvY21kLmM6NjgwMworbXNnaWQgIkUxOTI6IFJlY3Vyc2l2ZSB1c2Ugb2YgOm5vcm1hbCB0b28gZGVlcCIKK21zZ3N0ciAiRTE5MjogVm5v+GVu7SA6bm9ybWFsIGplIHD47WxpmiBobHVib2vpIgorCisjOiBleF9kb2NtZC5jOjcxNzEKK21zZ2lkICI6aWYgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAidm5v+GVu7SA6aWYgamUgcPjtbGmaIGhsdWJva+kiCisKKyM6IGV4X2RvY21kLmM6NzIwNgorbXNnaWQgIjplbmRpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVuZGlmIGJleiBvZHBvdu1kYWrtY+1obyA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzIyNgorbXNnaWQgIjplbHNlIHdpdGhvdXQgOmlmIgorbXNnc3RyICI6ZWxzZSBiZXogb2Rwb3btZGFq7WPtaG8gOmlmIgorCisjOiBleF9kb2NtZC5jOjcyMjgKK21zZ2lkICI6ZWxzZWlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICI6ZWxzZWlmIGJleiBvZHBvdu1kYWrtY+1obyA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzI4MAorbXNnaWQgIjp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJ2bm/4ZW7tIDp3aGlsZSBqZSBw+O1saZogaGx1Ym9r6SIKKworIzogZXhfZG9jbWQuYzo3MzI2Cittc2dpZCAiOmNvbnRpbnVlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICI6Y29udGludWUgYmV6IG9kcG927WRhau1j7WhvIDp3aGlsZSIKKworIzogZXhfZG9jbWQuYzo3MzUzCittc2dpZCAiOmJyZWFrIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICI6YnJlYWsgYmV6IG9kcG927WRhau1j7WhvIDp3aGlsZSIKKworIzogZXhfZG9jbWQuYzo3Mzc2IGV4X2RvY21kLmM6NzM4MQorbXNnaWQgIjplbmR3aGlsZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiOmVuZHdoaWxlIGJleiBvZHBvdu1kYWrtY+1obyA6d2hpbGUiCisKKyM6IGV4X2RvY21kLmM6NzQwMgorbXNnaWQgIkUxOTM6IDplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxOTM6IDplbmRmdW5jdGlvbiBtaW1vIGZ1bmtjaSIKKworIzogZXhfZG9jbWQuYzo3NTgyCittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIiIKKyJFMTk0OiCO4WRu/SBhbHRlcm5hdGl2bu0gbuF6ZXYgc291Ym9ydSwga3Rlcv1tIGJ5IGJ5bG8gbW+ebukgbmFocmFkaXQgJyMnIgorCisjOiBleF9kb2NtZC5jOjc2MTMKK21zZ2lkICJubyBhdXRvY29tbWFuZCBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWZpbGU+XCIiCittc2dzdHIgIo7hZG79IG7hemV2IHNvdWJvcnUsIGt0ZXL9bSBieSBieWxvIG1vnm7pIG5haHJhZGl0IFwiPGFmaWxlPlwiIgorCisjOiBleF9kb2NtZC5jOjc2MjEKK21zZ2lkICJubyBhdXRvY29tbWFuZCBidWZmZXIgbnVtYmVyIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFidWY+XCIiCittc2dzdHIgIo7hZG7pIOjtc2xvIGJ1ZmZlcnUsIGt0ZXL9bSBieSBieWxvIG1vnm7pIG5haHJhZGl0IFwiPGFidWY+XCIiCisKKyM6IGV4X2RvY21kLmM6NzYzMgorbXNnaWQgIm5vIGF1dG9jb21tYW5kIG1hdGNoIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YW1hdGNoPlwiIgorbXNnc3RyICIiCisijuFkbuEgc2hvZGEgYXV0b21hdGlja/1jaCBw+O1rYXr5LCBrdGVyb3UgYnkgYnlsbyBtb55u6SBuYWhyYWRpdCBcIjxhbWF0Y2g+XCIiCisKKyM6IGV4X2RvY21kLmM6NzY0MgorbXNnaWQgIm5vIDpzb3VyY2UgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPHNmaWxlPlwiIgorbXNnc3RyICKO4WRu/SBpbnRlcnByZXRvdmFu/SBzb3Vib3IsIGt0ZXL9bSBieSBieWxvIG1vnm7pIG5haHJhZGl0IFwiPHNmaWxlPlwiIgorCisjOiBleF9kb2NtZC5jOjc2ODMKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZmlsZSBuYW1lIGZvciAnJScgb3IgJyMnLCBvbmx5IHdvcmtzIHdpdGggXCI6cDpoXCIiCittc2dzdHIgIlBy4Xpkbv0gbuF6ZXYgc291Ym9ydSBwcm8gJyUnIOhpICcjJyBmdW5ndWplIHBvdXplIHMgXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6NzY4NQorbXNnaWQgIkV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIlb9c2xlZGtlbSB2eWhvZG5vY2Vu7SBqZSBwcuF6ZG79IPhldOx6ZWMiCisKKyM6IGV4X2RvY21kLmM6ODU5NAorbXNnaWQgIkUxOTU6IENhbm5vdCBvcGVuIHZpbWluZm8gZmlsZSBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE5NTogTmVsemUgb3RldvjtdCBwcm8g6HRlbu0gdmltaW5mbyBzb3Vib3IiCisKKyM6IGV4X2RvY21kLmM6ODc2NworbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5NjogViB06XRvIHZlcnppIG5lanNvdSBzcPhlnmt5IHBvZHBvcm924W55IgorCisjOiBleF9nZXRsbi5jOjI3ODUKK21zZ2lkICJ0YWduYW1lIgorbXNnc3RyICJqbelubyB0YWd1IgorCisjOiBleF9nZXRsbi5jOjI3ODgKK21zZ2lkICIga2luZCBmaWxlXG4iCittc2dzdHIgIiB0eXAgc291Ym9yXG4iCisKKyM6IGV4X2dldGxuLmM6Mzk5NworbXNnaWQgIidoaXN0b3J5JyBvcHRpb24gaXMgemVybyIKK21zZ3N0ciAiJ3ZvbGJhICdoaXN0b3J5JyBqZSBuYXN0YXZlbmEgbmEgbnVsdSIKKworIzogZXhfZ2V0bG4uYzo0MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjICVzIEhpc3RvcnkgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBIaXN0b3JpZSAlcyAocG/o7W5hamUgbmVqbm927Gqa7SBwb2xvnmtvdSk6XG4iCisKKyM6IGV4X2dldGxuLmM6NDIzOAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAicPjta2F6b3bpIPjhZGt5IgorCisjOiBleF9nZXRsbi5jOjQyMzkKK21zZ2lkICJTZWFyY2ggU3RyaW5nIgorbXNnc3RyICJ2eWhsZWThdmFu/WNoIPhldOx6Y/kiCisKKyM6IGV4X2dldGxuLmM6NDI0MAorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgInb9cmF6+SIKKworIzogZXhfZ2V0bG4uYzo0MjQxCittc2dpZCAiSW5wdXQgTGluZSIKK21zZ3N0ciAidnN0dXBu7SD44WRreSIKKworIzogZXhfZ2V0bG4uYzo0MjcxCittc2dpZCAiRTE5ODogY21kX3BjaGFyIGJleW9uZCB0aGUgY29tbWFuZCBsZW5ndGgiCittc2dzdHIgIkUxOTg6IGNtZF9wY2hhciBw+GVrcmHodWplIGTpbGt1IHD47WthenUiCisKKyM6IGV4X2dldGxuLmM6NDQzNQorbXNnaWQgIkUxOTk6IEFjdGl2ZSB3aW5kb3cgb3IgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIkUxOTk6IFNtYXrhbm8gYWt0aXZu7SBva25vIOhpIGJ1ZmZlciIKKworIzogZmlsZWlvLmM6MzQ3Cittc2dpZCAiSWxsZWdhbCBmaWxlIG5hbWUiCittc2dzdHIgIm5lcPjtcHVzdG79IG7hemV2IHNvdWJvcnUiCisKKyM6IGZpbGVpby5jOjM3MSBmaWxlaW8uYzo0OTUgZmlsZWlvLmM6MjQ5MSBmaWxlaW8uYzoyNTI5Cittc2dpZCAiaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgImplIGFkcmVz4fhlbSIKKworIzogZmlsZWlvLmM6MzczCittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAibmVu7SBzb3Vib3JlbSIKKworIzogZmlsZWlvLmM6NTE1IGZpbGVpby5jOjM1ODEKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJbbm92/SBzb3Vib3JdIgorCisjOiBmaWxlaW8uYzo1MzIKK21zZ2lkICJbUGVybWlzc2lvbiBEZW5pZWRdIgorbXNnc3RyICJbcPjtc3R1cCBvZG3tdG51dF0iCisKKyM6IGZpbGVpby5jOjYyNAorbXNnaWQgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtYWRlIHRoZSBmaWxlIHVucmVhZGFibGUiCittc2dzdHIgIkUyMDA6ICpSZWFkUHJlIGF1dG9tYXRpY2vpIHD47WthenkgdehpbmlseSBzb3Vib3IgbmXoaXRlbG79bSIKKworIzogZmlsZWlvLmM6NjI2Cittc2dpZCAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTIwMTogKlJlYWRQcmUgYXV0b21hdGlja+kgcPjta2F6eSBuZXNt7SBt7G5pdCBha3R14Wxu7SBidWZmZXIiCisKKyM6IGZpbGVpby5jOjY0NgorbXNnaWQgIlZpbTogUmVhZGluZyBmcm9tIHN0ZGluLi4uXG4iCittc2dzdHIgIlZpbTogyHR1IHplIHN0YW5kYXJkbu1obyB2c3R1cHUuLi5cbiIKKworIzogZmlsZWlvLmM6NjUyCittc2dpZCAiUmVhZGluZyBmcm9tIHN0ZGluLi4uIgorbXNnc3RyICLIdHUgemUgc3RhbmRhcmRu7WhvIHZzdHVwdS4uLiIKKworIy4gUmUtb3BlbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBmYWlsZWQhCisjOiBmaWxlaW8uYzo4NzYKK21zZ2lkICJFMjAyOiBDb252ZXJzaW9uIG1hZGUgZmlsZSB1bnJlYWRhYmxlISIKK21zZ3N0ciAiRTIwMjogUG8ga29udmVyemkgamUgc291Ym9yIG5l6Gl0ZWxu/SEiCisKKyM6IGZpbGVpby5jOjE3MzIKK21zZ2lkICJbZmlmby9zb2NrZXRdIgorbXNnc3RyICJbcG9qbWVub3ZhbuEgcm91cmEvc29rZXRdIgorCisjOiBmaWxlaW8uYzoxNzM5Cittc2dpZCAiW2ZpZm9dIgorbXNnc3RyICJbcG9qbWVub3ZhbuEgcm91cmFdIgorCisjOiBmaWxlaW8uYzoxNzQ2Cittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIltzb2tldF0iCisKKyM6IGZpbGVpby5jOjE3NTQKK21zZ2lkICJbUk9dIgorbXNnc3RyICJbUk9dIgorCisjOiBmaWxlaW8uYzoxNzY0Cittc2dpZCAiW0NSIG1pc3NpbmddIgorbXNnc3RyICJbY2h5Yu0gQ1JdIgorCisjOiBmaWxlaW8uYzoxNzY5Cittc2dpZCAiW05MIGZvdW5kXSIKK21zZ3N0ciAiW25hbGV6ZW5vIE5MXSIKKworIzogZmlsZWlvLmM6MTc3NAorbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW2Rsb3Vo6SD44WRreSB6YWxvbWVueV0iCisKKyM6IGZpbGVpby5jOjE3ODAgZmlsZWlvLmM6MzU2NQorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW25lemtvbnZlcnRvduFuXSIKKworIzogZmlsZWlvLmM6MTc4NSBmaWxlaW8uYzozNTcwCittc2dpZCAiW2NvbnZlcnRlZF0iCittc2dzdHIgIlt6a29udmVydG924W5dIgorCisjOiBmaWxlaW8uYzoxNzkyIGZpbGVpby5jOjM1OTUKK21zZ2lkICJbY3J5cHRlZF0iCittc2dzdHIgIlt6YZppZnJvduFuXSIKKworIzogZmlsZWlvLmM6MTc5OQorbXNnaWQgIltDT05WRVJTSU9OIEVSUk9SXSIKK21zZ3N0ciAiW0NIWUJBIFDYRVZPRFVdIgorCisjOiBmaWxlaW8uYzoxODA2Cittc2dpZCAiW1JFQUQgRVJST1JTXSIKK21zZ3N0ciAiW0NIWUJZIMhURU7NXSIKKworIzogZmlsZWlvLmM6MjAxMworbXNnaWQgIkNhbid0IGZpbmQgdGVtcCBmaWxlIGZvciBjb252ZXJzaW9uIgorbXNnc3RyICJOZWx6ZSBuYWzpenQgZG/oYXNu/SBzb3Vib3IgcHJvIGtvbnZlcnppIgorCisjOiBmaWxlaW8uYzoyMDIwCittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICJLb252ZXJ6ZSBzICdjaGFyY29udmVydCcgc2UgbmV6ZGH4aWxhIgorCisjOiBmaWxlaW8uYzoyMDIzCittc2dpZCAiY2FuJ3QgcmVhZCBvdXRwdXQgb2YgJ2NoYXJjb252ZXJ0JyIKK21zZ3N0ciAibmVsemUg6O1zdCB2/XN0dXAgJ2NoYXJjb252ZXJ0JyIKKworIzogZmlsZWlvLmM6MjQwNworbXNnaWQgIkUyMDM6IEF1dG9jb21tYW5kcyBkZWxldGVkIG9yIHVubG9hZGVkIGJ1ZmZlciB0byBiZSB3cml0dGVuIgorbXNnc3RyICIiCisiRTIwMzogQXV0b21hdGlja+kgcPjta2F6eSBzbWF6YWx5IOhpIGRlYWt0aXZvdmFseSBidWZmZXIsIGt0ZXL9IG3sbCBi/XQgIgorInVsb55lbiIKKworIzogZmlsZWlvLmM6MjQzMAorbXNnaWQgIkUyMDQ6IEF1dG9jb21tYW5kIGNoYW5nZWQgbnVtYmVyIG9mIGxpbmVzIGluIHVuZXhwZWN0ZWQgd2F5IgorbXNnc3RyICJFMjA0OiBBdXRvbWF0aWNr/SBw+O1rYXogbmXoZWthbv1tIHpw+XNvYmVtIHpt7G5pbCBwb+hldCD44WRr+SIKKworIzogZmlsZWlvLmM6MjQ5NiBmaWxlaW8uYzoyNTEzCittc2dpZCAiaXMgbm90IGEgZmlsZSBvciB3cml0YWJsZSBkZXZpY2UiCittc2dzdHIgIm5lbu0gc291Ym9yZW0gYW5pIHph+O16ZW7tbSBuYSBu7J4gbHplIHphcGlzb3ZhdCIKKworIzogZmlsZWlvLmM6MjU1NQorbXNnaWQgImlzIHJlYWQtb25seSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJqZSBwb3V6ZSBwcm8g6HRlbu0gKHBvdZ5panRlICEgcHJvIHZ5bnVjZW7tKSIKKworIzogZmlsZWlvLmM6Mjg1MQorbXNnaWQgIkNhbid0IHdyaXRlIHRvIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIk5lbHplIHphcGlzb3ZhdCBkbyB64Wxvnm7taG8gc291Ym9ydSAocG91nmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjOiBmaWxlaW8uYzoyODYzCittc2dpZCAiQ2xvc2UgZXJyb3IgZm9yIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkNoeWJhIHD4aSB1emF27XLhbu0geuFsb55u7WhvIHNvdWJvcnUgKHBvdZ5panRlICEgcHJvIHZ5bnVjZW7tKSIKKworIzogZmlsZWlvLmM6Mjg2NQorbXNnaWQgIkNhbid0IHJlYWQgZmlsZSBmb3IgYmFja3VwICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIk5lbHplIG5h6O1zdCBzb3Vib3IgcHJvIHrhbG9odSAocG91nmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjOiBmaWxlaW8uYzoyODgxCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJOZWx6ZSB2eXR2b/hpdCB64Wxvnm7tIHNvdWJvciAocG91nmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjOiBmaWxlaW8uYzoyOTcwCittc2dpZCAiQ2FuJ3QgbWFrZSBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJOZWx6ZSB2eXR2b/hpdCB64Wxvnm7tIHNvdWJvciAocG91nmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjIHJlc291cmNlIGZvcmsgPyEKKyM6IGZpbGVpby5jOjMwMzIKK21zZ2lkICJUaGUgcmVzb3VyY2UgZm9yayB3aWxsIGJlIGxvc3QgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiJ1Jlc291cmNlIGZvcmsnIGJ1ZGUgenRyYWNlbiAocG91nmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjOiBmaWxlaW8uYzozMTIxCittc2dpZCAiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTQ6IE5lbHplIG5hau10IGRv6GFzbv0gdGVtcCBzb3Vib3IgcHJvIHrhcGlzIgorCisjOiBmaWxlaW8uYzozMTM5Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKHVzZSAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIkUyMTM6IE5lbHplIHD4ZXbpc3QgKHBvdZ5panRlICEgcHJvIHrhcGlzIGJleiBw+GV2b2R1KSIKKworIzogZmlsZWlvLmM6MzE3NgorbXNnaWQgIkUxNjY6IENhbid0IG9wZW4gbGlua2VkIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNjY6IE5lbHplIG90ZXb47XQgcPhpcG9qZW79IHNvdWJvciBwcm8geuFwaXMiCisKKyM6IGZpbGVpby5jOjMxODAKK21zZ2lkICJFMjEyOiBDYW4ndCBvcGVuIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTI6IE5lbHplIG90ZXb47XQgc291Ym9yIHBybyB64XBpcyIKKworIzogZmlsZWlvLmM6MzQyMworbXNnaWQgIkNsb3NlIGZhaWxlZCIKK21zZ3N0ciAiVm9s4W7tIGNsb3NlIHNlbGhhbG8iCisKKyM6IGZpbGVpby5jOjM0ODEKK21zZ2lkICJ3cml0ZSBlcnJvciwgY29udmVyc2lvbiBmYWlsZWQiCittc2dzdHIgImNoeWJhIHD4aSB64XBpc3UsIGtvbnZlcnplIHNlIG5lemRh+GlsYSIKKworIzogZmlsZWlvLmM6MzQ4NworbXNnaWQgIndyaXRlIGVycm9yIChmaWxlIHN5c3RlbSBmdWxsPykiCittc2dzdHIgImNoeWJhIHD4aSB1a2zhZOFu7SAoamUgdm9sbukgbe1zdG8gbmEgZGlza3U/KSIKKworIzogZmlsZWlvLmM6MzU2MAorbXNnaWQgIiBDT05WRVJTSU9OIEVSUk9SIgorbXNnc3RyICIgQ0hZQkEgUNhFVk9EVSIKKworIzogZmlsZWlvLmM6MzU3NgorbXNnaWQgIltEZXZpY2VdIgorbXNnc3RyICJbemH47Xplbu1dIgorCisjOiBmaWxlaW8uYzozNTgxCittc2dpZCAiW05ld10iCittc2dzdHIgIltOb3b9XSIKKworIzogZmlsZWlvLmM6MzYwMworbXNnaWQgIiBbYV0iCittc2dzdHIgIiBbcF0iCisKKyM6IGZpbGVpby5jOjM2MDMKK21zZ2lkICIgYXBwZW5kZWQiCittc2dzdHIgIiBw+Glwb2plbiIKKworIzogZmlsZWlvLmM6MzYwNQorbXNnaWQgIiBbd10iCittc2dzdHIgIiBbdV0iCisKKyM6IGZpbGVpby5jOjM2MDUKK21zZ2lkICIgd3JpdHRlbiIKK21zZ3N0ciAiIHVsb55lbiIKKworIzogZmlsZWlvLmM6MzY1NQorbXNnaWQgIkUyMDU6IFBhdGNobW9kZTogY2FuJ3Qgc2F2ZSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA1OiBwYXRjaG1vZGU6IG5lbHplIHVsb55pdCBw+XZvZG7tIHNvdWJvciIKKworIzogZmlsZWlvLmM6MzY3NworbXNnaWQgIkUyMDY6IHBhdGNobW9kZTogY2FuJ3QgdG91Y2ggZW1wdHkgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNjogcGF0Y2htb2RlOiBuZWx6ZSB6YXBpc292YXQgZG8gcHLhemRu6WhvIHD5dm9kbu1obyBzb3Vib3J1IgorCisjOiBmaWxlaW8uYzozNjkyCittc2dpZCAiRTIwNzogQ2FuJ3QgZGVsZXRlIGJhY2t1cCBmaWxlIgorbXNnc3RyICJFMjA3OiBOZWx6ZSBzbWF6YXQgeuFsb55u7SBzb3Vib3IiCisKKyM6IGZpbGVpby5jOjM3NDQKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWQVJPVsFOzTogT2JzYWggcPl2b2Ru7WhvIHNvdWJvcnUgbfmeZSBi/XQgenRyYWNlbiDoaSBwb5prb3plblxuIgorCisjOiBmaWxlaW8uYzozNzQ2Cittc2dpZCAiZG9uJ3QgcXVpdCB0aGUgZWRpdG9yIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIKK21zZ3N0ciAibmV1a29u6HVqdGUgZWRpdG9yIGT47XZlLCBuZZ4gYnVkZSBzb3Vib3Ig+nNw7Jpu7CB1bG+eZW4hIgorCisjOiBmaWxlaW8uYzozODI2Cittc2dpZCAiW2Rvc10iCittc2dzdHIgIltkb3NdIgorCisjOiBmaWxlaW8uYzozODI2Cittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbZG9zIGZvcm3hdF0iCisKKyM6IGZpbGVpby5jOjM4MzMKK21zZ2lkICJbbWFjXSIKK21zZ3N0ciAiW21hY10iCisKKyM6IGZpbGVpby5jOjM4MzMKK21zZ2lkICJbbWFjIGZvcm1hdF0iCittc2dzdHIgIlttYWMgZm9ybeF0XSIKKworIzogZmlsZWlvLmM6Mzg0MAorbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzozODQwCittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW3VuaXggZm9ybeF0XSIKKworIzogZmlsZWlvLmM6Mzg2NworbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxIPjhZGVrLCAiCisKKyM6IGZpbGVpby5jOjM4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzLCAiCittc2dzdHIgIiVsZCD44WRr+SwgIgorCisjOiBmaWxlaW8uYzozODcyCittc2dpZCAiMSBjaGFyYWN0ZXIiCittc2dzdHIgIjEgem5hayIKKworIzogZmlsZWlvLmM6Mzg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxkIHpuYWv5LCAiCisKKyM6IGZpbGVpby5jOjM4ODQKK21zZ2lkICJbbm9lb2xdIgorbXNnc3RyICJbnuFkbv0gZW9sXSIKKworIzogZmlsZWlvLmM6Mzg4NAorbXNnaWQgIltJbmNvbXBsZXRlIGxhc3QgbGluZV0iCittc2dzdHIgIltuZfpwbG79IHBvc2xlZG7tIPjhZGVrXSIKKworIy4gZG9uJ3Qgb3ZlcndyaXRlIG1lc3NhZ2VzIGhlcmUKKyMuIG11c3QgZ2l2ZSB0aGlzIHByb21wdAorIy4gZG9uJ3QgdXNlIGVtc2coKSBoZXJlLCBkb24ndCB3YW50IHRvIGZsdXNoIHRoZSBidWZmZXJzCisjOiBmaWxlaW8uYzozOTAzCittc2dpZCAiV0FSTklORzogVGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSByZWFkaW5nIGl0ISEhIgorbXNnc3RyICJWQVJPVsFOzTogb2QgamVobyBuYeh0ZW7tIGJ5bCBvYnNhaCBzb3Vib3J1IHpt7G7sbiEhISEiCisKKyM6IGZpbGVpby5jOjM5MDUKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQiCittc2dzdHIgIkNoY2V0ZSBqZWogb3ByYXZkdSB1bG+eaXQiCisKKyM6IGZpbGVpby5jOjQ4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiCittc2dzdHIgIkUyMDg6IENoeWJhIHD4aSB64XBpc3UgZG8gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo0ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDk6IEVycm9yIGNsb3NpbmcgXCIlc1wiIgorbXNnc3RyICJFMjA5OiBDaHliIHD4aSB1emF27XLhbu0gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo0ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTA6IEVycm9yIHJlYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFMjEwOiBDaHliYSBw+Gkg6HRlbu0gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1MDM1Cittc2dpZCAiRTI0NjogRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTI0NjogRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCB6cnWaaWwgYnVmZmVyIgorCisjOiBmaWxlaW8uYzo1MDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIG5vIGxvbmdlciBhdmFpbGFibGUiCittc2dzdHIgIkUyMTE6IHdhMTogc291Ym9yIFwiJXNcIiBqaZ4gbmVu7SBkb3N0dXBu/SIKKworIzogZmlsZWlvLmM6NTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVzEyOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBhbmQgdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCBpbiBWaW0gYXMgIgorIndlbGwiCittc2dzdHIgIiIKKyJXMTI6IFZhcm924W7tOiBzb3Vib3IgXCIlc1wiIGJ5bCBwbyBwb+jhdGt1IGVkaXRhY2Ugem3sbuxuIGEgYnVmZmVyIHZlIFZpbSAiCisidGFr6SIKKworIzogZmlsZWlvLmM6NTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzExOiB3YzI6IHNvdWJvciBcIiVzXCIgYnlsIHBvIHBv6OF0a3UgZWRpdGFjZSB6bexu7G4iCisKKyM6IGZpbGVpby5jOjUwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzE2OiBXYXJuaW5nOiBNb2RlIG9mIGZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzE2OiBWYXJvduFu7TogTfNkIHNvdWJvcnUgXCIlc1wiIGJ5bCB6bexu7G4gb2QgemFwb+hudXTtIGVkaXRhY2UiCisKKyM6IGZpbGVpby5jOjUwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzEzOiB3YzQ6IHBvIHBv6OF0a3UgZWRpdGFjZSB2eXR2b/hlbiBzb3Vib3IgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1MDg4Cittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAiVmFyb3bhbu0iCisKKyM6IGZpbGVpby5jOjUwODkKK21zZ2lkICIiCisiJk9LXG4iCisiJkxvYWQgRmlsZSIKK21zZ3N0ciAiIgorIiZPS1xuIgorIiZOYWhy4XQgc291Ym9yIgorCisjOiBmaWxlaW8uYzo1MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjE6IENvdWxkIG5vdCByZWxvYWQgXCIlc1wiIgorbXNnc3RyICJFMzIxOiBOZWx6ZSB6bm92dW90ZXb47XQgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1NjcwCittc2dpZCAiLS1EZWxldGVkLS0iCittc2dzdHIgIi0tVnltYXrhbm8tLSIKKworIy4gdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3QKKyM6IGZpbGVpby5jOjU4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NzogTm8gc3VjaCBncm91cDogXCIlc1wiIgorbXNnc3RyICJFMzY3OiBTa3VwaW5hIFwiJXNcIiBuZWV4aXN0dWplIgorCisjOiBmaWxlaW8uYzo1OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyICo6ICVzIgorbXNnc3RyICJFMjE1OiBOZXD47XB1c3Ru/SB6bmFrIHBvICo6ICVzIgorCisjOiBmaWxlaW8uYzo1OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiBVZOFsb3N0ICVzIG5lZXhpc3R1amUiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogZmlsZWlvLmM6NjExNQorbXNnaWQgIiIKKyJcbiIKKyItLS0gQXV0by1Db21tYW5kcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gQXV0b21hdGlja+kgcPjta2F6eSAtLS0iCisKKyM6IGZpbGVpby5jOjYzODYKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiRTIxNzogQXV0b21hdGlja+kgcPjta2F6eSBuZWx6ZSBzcHVzdGl0IHBybyBWikVDSE5ZIHVk4Wxvc3RpIgorCisjOiBmaWxlaW8uYzo2NDA5Cittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICKO4WRu6SB2eWhvdnVq7WPtIGF1dG9tYXRpY2vpIHD47WthenkiCisKKyM6IGZpbGVpby5jOjY2ODEKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiB2bm/4ZW7tIGF1dG9tYXRpY2vpaG8gcPjta2F6dSBw+O1saZogaGx1Ym9r4SIKKworIzogZmlsZWlvLmM6Njk2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBBdXRvIGNvbW1hbmRzIGZvciBcIiVzXCIiCittc2dzdHIgIiVzIGF1dG9tYXRpY2vpIHD47WthenkgcHJvIFwiJXNcIiIKKworIzogZmlsZWlvLmM6Njk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmcgJXMiCittc2dzdHIgInNwb3WadO1tICVzIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGZpbGVpby5jOjcwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXV0b2NvbW1hbmQgJXMiCittc2dzdHIgIkF1dG9tYXRpY2v9IHD47WtheiAlcyIKKworIzogZmlsZWlvLmM6NzU2NgorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IENoeWLtIHsuIgorCisjOiBmaWxlaW8uYzo3NTY4Cittc2dpZCAiRTIyMDogTWlzc2luZyB9LiIKK21zZ3N0ciAiRTIyMDogQ2h5Yu0gfS4iCisKKyM6IGZvbGQuYzo2NgorbXNnaWQgIk5vIGZvbGQgZm91bmQiCittc2dzdHIgIo7hZG79IHrhaHliIG5lYnlsIG5hbGV6ZW4iCisKKyM6IGZvbGQuYzo1NTQKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogcG9tb2PtIGFrdHXhbG7tICdmb2xkbWV0aG9kJyBuZWx6ZSB2eXR2b/hpdCB64Wh5YiIKKworIzogZm9sZC5jOjU1NgorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiBwb21vY+0gYWt0deFsbu0gJ2ZvbGRtZXRob2QnIG5lbHplIHZ5dHZv+Gl0IHrhaHliIgorCisjOiBmb2xkLmM6MTcwMAorbXNnaWQgIkUyMjE6ICdjb21tZW50c3RyaW5nJyBpcyBlbXB0eSIKK21zZ3N0ciAiRTIyMTogdm9sYmEgJ2NvbW1lbnRzdHJpbmcnIGplIHBy4XpkbuEiCisKKyM6IGdldGNoYXIuYzoyNjgKK21zZ2lkICJFMjIyOiBBZGQgdG8gcmVhZCBidWZmZXIiCittc2dzdHIgIkUyMjI6IFD4aWRhdCBkbyBidWZmZXJ1IHBybyDodGVu7SIKKworIzogZ2V0Y2hhci5jOjIxMTQKK21zZ2lkICJFMjIzOiByZWN1cnNpdmUgbWFwcGluZyIKK21zZ3N0ciAiRTIyMzogcmVrdXJ6aXZu7SBtYXBvduFu7SIKKworIzogZ2V0Y2hhci5jOjI5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNDogZ2xvYmFsIGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjQ6IHBybyAlcyBqaZ4gZ2xvYuFsbu0gemtyYXRrYSBqaZ4gZXhpc3R1amUiCisKKyM6IGdldGNoYXIuYzoyOTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTogcHJvICVzIGppniBnbG9i4Wxu7SBtYXBvduFu7SBqaZ4gZXhpc3R1amUiCisKKyM6IGdldGNoYXIuYzozMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjY6IGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjY6IHBybyAlcyBqaZ4gemtyYXRrYSBqaZ4gZXhpc3R1amUiCisKKyM6IGdldGNoYXIuYzozMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI3OiBwcm8gJXMgammeIG1hcG924W7tIGppniBleGlzdHVqZSIKKworIzogZ2V0Y2hhci5jOjMxNjMKK21zZ2lkICJObyBhYmJyZXZpYXRpb24gZm91bmQiCittc2dzdHIgIo7hZG7hIHprcmF0a2EgbmVieWwgbmFsZXplbmEiCisKKyM6IGdldGNoYXIuYzozMTY1Cittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAijuFkbukgbWFwb3bhbu0gbmVieWxvIG5hbGV6ZW5vIgorCisjOiBnZXRjaGFyLmM6Mzk5MAorbXNnaWQgIkUyMjg6IG1ha2VtYXA6IElsbGVnYWwgbW9kZSIKK21zZ3N0ciAiRTIyODogbWFrZW1hcDogbmVw+O1wdXN0bv0gbfNkIgorCisjOiBndWkuYzoxODEKK21zZ2lkICJFMjI5OiBDYW5ub3Qgc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiRTIyOTogTmVsemUgc3B1c3RpdCBHVUkiCisKKyM6IGd1aS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogTmVsemUg6O1zdCB6IFwiJXNcIiIKKworIzogZ3VpLmM6NDMxCittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiB2b2xiYSAnZ3VpZm9udHdpZGUnIGplIGNoeWJu7CBuYXN0YXZlbmEiCisKKyM6IGd1aS5jOjM5MjYKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiQ2h5YmEiCisKKyM6IGd1aS5jOjM5MjcKK21zZ2lkICImT2siCittc2dzdHIgIiZPayIKKworIzogZ3VpX2F0X2ZzLmM6MjkwCittc2dpZCAiPGNhbm5vdCBvcGVuPiAiCittc2dzdHIgIjxuZWx6ZSBvdGV2+O10PiAiCisKKyM6IGd1aV9hdF9mcy5jOjExMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidmltX1NlbEZpbGU6IGNhbid0IGdldCBmb250ICVzIgorbXNnc3RyICJ2aW1fU2VsRmlsZTogcO1zbW8gJXMgbmVu7SBkb3N0dXBu6SIKKworIzogZ3VpX2F0X2ZzLmM6MjUzOAorbXNnaWQgInZpbV9TZWxGaWxlOiBjYW4ndCByZXR1cm4gdG8gY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgInZpbV9TZWxGaWxlOiBuZWx6ZSBzZSB2cuF0aXQgZG8gYWt0deFsbu1obyBhZHJlc+H4ZSIKKworIzogZ3VpX2F0X2ZzLmM6MjU1NworbXNnaWQgIlBhdGhuYW1lOiIKK21zZ3N0ciAiTuF6ZXYgY2VzdHk6IgorCisjOiBndWlfYXRfZnMuYzoyNTYzCittc2dpZCAidmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAidmltX1NlbEZpbGU6IG5lbHplIHpqaXN0aXQgYWt0deFsbu0gYWRyZXPh+CIKKworIzogZ3VpX2F0X2ZzLmM6MjU3MSBndWlfbW90aWYuYzoxNjA3Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjLiAnQ2FuY2VsJyBidXR0b24KKyM6IGd1aV9hdF9mcy5jOjI1NzEgZ3VpX2d0ay5jOjE2ODMgZ3VpX21vdGlmLmM6MTYwMiBndWlfbW90aWYuYzoyODIzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJacnWaaXQiCisKKyM6IGd1aV9hdF9zYi5jOjQ4NgorbXNnaWQgIlNjcm9sbGJhciBXaWRnZXQ6IENvdWxkIG5vdCBnZXQgZ2VvbWV0cnkgb2YgdGh1bWIgcGl4bWFwLiIKK21zZ3N0ciAiUPjtcHJhdmVrIHBvc3Vub3ZhY+0gbGmadHk6IG5lbHplIHpqaXN0aXQgZ2VvbWV0cmlpIG9icuF6a3UiCisKKyM6IGd1aV9hdGhlbmEuYzoxOTI4IGd1aV9tb3RpZi5jOjE4NTUKK21zZ2lkICJWaW0gZGlhbG9nIgorbXNnc3RyICJWaW0gZGlhbG9nIgorCisjOiBndWlfYmV2YWwuYzo2OAorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICJFMjMyOiBCYWxsb29uRXZhbCBuZWx6ZSB2eXR2b/hpdCBzZSB6cHLhdm91IGEgeuFyb3Zl8iB6cOx0bv1tIHZvbOFu7W0iCisKKyM6IGd1aV9ndGsuYzoxMTQ0Cittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiVmltIGRpYWxvZy4uIgorCisjOiBndWlfZ3RrLmM6MTUxOSBndWlfbW90aWYuYzoyNzQyCittc2dpZCAiVklNIC0gU2VhcmNoIGFuZCBSZXBsYWNlLi4uIgorbXNnc3RyICJWSU0gLSBOYWzpenQgYSBuYWhyYWRpdC4uLiIKKworIzogZ3VpX2d0ay5jOjE1MjQgZ3VpX21vdGlmLmM6Mjc0NAorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiVklNIC0gTmFs6Xp0Li4uIgorCisjOiBndWlfZ3RrLmM6MTU0NyBndWlfbW90aWYuYzoyODYyCittc2dpZCAiRmluZCB3aGF0OiIKK21zZ3N0ciAiVnlobGVkYXQ6IgorCisjOiBndWlfZ3RrLmM6MTU2NSBndWlfbW90aWYuYzoyODk0Cittc2dpZCAiUmVwbGFjZSB3aXRoOiIKK21zZ3N0ciAiTm92/SB0ZXh0OiIKKworIy4gZXhhY3QgbWF0Y2ggb25seSBidXR0b24KKyM6IGd1aV9ndGsuYzoxNTk3IGd1aV9tb3RpZi5jOjI5OTYKK21zZ2lkICJNYXRjaCBleGFjdCB3b3JkIG9ubHkiCittc2dzdHIgImhsZWRhdCBwb3V6ZSBjZWzhIHNsb3ZhIgorCisjOiBndWlfZ3RrLmM6MTYwOSBndWlfbW90aWYuYzoyOTY0Cittc2dpZCAiRGlyZWN0aW9uIgorbXNnc3RyICJTbexyIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjE2MjEgZ3VpX21vdGlmLmM6Mjk3NgorbXNnaWQgIlVwIgorbXNnc3RyICJOYWhvcnUiCisKKyM6IGd1aV9ndGsuYzoxNjI1IGd1aV9tb3RpZi5jOjI5ODQKK21zZ2lkICJEb3duIgorbXNnc3RyICJEb2z5IgorCisjLiAnRmluZCBOZXh0JyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNjQ3IGd1aV9tb3RpZi5jOjI3NjYKK21zZ2lkICJGaW5kIE5leHQiCittc2dzdHIgIk5hau10IGRhbJrtIgorCisjLiAnUmVwbGFjZScgYnV0dG9uCisjOiBndWlfZ3RrLmM6MTY2NCBndWlfbW90aWYuYzoyNzgzCittc2dpZCAiUmVwbGFjZSIKK21zZ3N0ciAiTmFocmFkaXQiCisKKyMuICdSZXBsYWNlIEFsbCcgYnV0dG9uCisjOiBndWlfZ3RrLmM6MTY3MyBndWlfbW90aWYuYzoyNzk2Cittc2dpZCAiUmVwbGFjZSBBbGwiCittc2dzdHIgIk5haHJhZGl0IHaaZSIKKworIzogZ3VpX2d0a194MTEuYzoxMDc2IGd1aV94MTEuYzoxMTk5Cittc2dpZCAiRTIzMzogY2Fubm90IG9wZW4gZGlzcGxheSIKK21zZ3N0ciAiRTIzMzogbmVsemUgb3RldvjtdCBkaXNwbGF5IgorCisjOiBndWlfZ3RrX3gxMS5jOjI0MzMgZ3VpX3gxMS5jOjIwMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNDogVW5rbm93biBmb250c2V0OiAlcyIKK21zZ3N0ciAiRTIzNDogTmV6buFt4SBzYWRhIHDtc2VtOiAlcyIKKworIzogZ3VpX2d0a194MTEuYzoyNDYwCittc2dpZCAiRm9udCBTZWxlY3Rpb24iCittc2dzdHIgIlb9YuxyIHDtc21hIgorCisjOiBndWlfZ3RrX3gxMS5jOjI3MDIgZ3VpX21hYy5jOjI3ODAgZ3VpX3c0OC5jOjExOTcgZ3VpX3gxMS5jOjE4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogVW5rbm93biBmb250OiAlcyIKK21zZ3N0ciAiRTIzNTogTmV6buFt6SBw7XNtbzogJXMiCisKKyM6IGd1aV9ndGtfeDExLmM6MjcxMyBndWlfeDExLmM6MTg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IFDtc21vIFwiJXNcIiBuZW3hIHBldm5vdSCa7fhrdSIKKworIzogZ3VpX2d0a194MTEuYzoyODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDI6IENvbG9yIG5hbWUgbm90IHJlY29nbml6ZWQ6ICVzIgorbXNnc3RyICJFMjQyOiBOZXpu4W3pIGpt6W5vIGJhcnZ5OiAlcyIKKworIzogZ3VpX2d0a194MTEuYzozNTE5IHVpLmM6MTkyOQorbXNnaWQgIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iCittc2dzdHIgIk3tc3RvIHBy4WRu6SBzY2hy4W5reSBwb3WeaXRvIENVVF9CVUZGRVIwIgorCisjOiBndWlfbW90aWYuYzoxNjAxIGd1aV9tb3RpZi5jOjE2MDQKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRyIgorCisjOiBndWlfbW90aWYuYzoxNjAzCittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIkFkcmVz4fhlIgorCisjOiBndWlfbW90aWYuYzoxNjA1Cittc2dpZCAiSGVscCIKK21zZ3N0ciAiTuFwb3bsZGEiCisKKyM6IGd1aV9tb3RpZi5jOjE2MDYKK21zZ2lkICJGaWxlcyIKK21zZ3N0ciAiU291Ym9yeSIKKworIzogZ3VpX21vdGlmLmM6MTYwOAorbXNnaWQgIlNlbGVjdGlvbiIKK21zZ3N0ciAiVv1i7HIiCisKKyM6IGd1aV9tb3RpZi5jOjI4MDkKK21zZ2lkICJVbmRvIgorbXNnc3RyICJacOx0IgorCisjOiBndWlfcmlzY29zLmM6OTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTIzNTogTmVsemUgbmHo7XN0IFphcCBmb250ICclcyciCisKKyM6IGd1aV9yaXNjb3MuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IENhbid0IHVzZSBmb250ICVzIgorbXNnc3RyICJFMjM1OiBOZWx6ZSBwb3We7XQgZm9udCAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjExNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MjogTWlzc2luZyBjb2xvcjogJXMiCittc2dzdHIgIkUyNDI6IENoeWLtIGJhcnZhOiAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNjkKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisiUG9z7WzhbSBzaWdu4WwgayB1a29u6GVu7SBzeW5vdnNr6WhvIHByb2Nlc3UuXG4iCisKKyM6IGd1aV93MzIuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MzogQXJndW1lbnQgbm90IHN1cHBvcnRlZDogXCItJXNcIjsgVXNlIHRoZSBPTEUgdmVyc2lvbi4iCittc2dzdHIgIkUyNDM6IEFyZ3VtZW50IG5lcG9kcG9yb3bhbjogXCItJXNcIjsgUG91nmlqdGUgT0xFIHZlcnppLiIKKworIzogZ3VpX3c0OC5jOjIwNjgKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJOYWrtdCD4ZXTsemVjIChwb3WeaWp0ZSAnXFxcXCcgayBuYWxlemVu7SAnXFwnKSIKKworIzogZ3VpX3c0OC5jOjIwOTMKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJOYWrtdCAmIE5haHJhZGl0IChwb3WeaWp0ZSAnXFxcXCcgayBuYWxlemVu7SAnXFwnKSIKKworIzogZ3VpX3gxMS5jOjE0MTkKK21zZ2lkICJWaW0gRTQ1ODogQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0IgorbXNnc3RyICIiCisiVmltIEU0NTg6IG5lbHplIGFsb2tvdmF0IHBvbG+ea3UgYmFyZXZu6SBtYXB5LiBO7Gt0ZXLpIGJhcnZ5IG1vaG91IGL9dCAiCisibmVzcHLhdm7pIgorCisjOiBndWlfeDExLmM6MTk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUwOiBGb250cyBmb3IgdGhlIGZvbGxvd2luZyBjaGFyc2V0cyBhcmUgbWlzc2luZyBpbiBmb250c2V0ICVzOiIKK21zZ3N0ciAiRTI1MDogcO1zbWEgcHJvIG7hc2xlZHVq7WPtIHpuYWtvdukgc2FkeSBjaHli7SB2IHNhZOwgcO1zZW0gJXM6IgorCisjOiBndWlfeDExLmM6MjAzNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUyOiBGb250c2V0IG5hbWU6ICVzIgorbXNnc3RyICJFMjUyOiBu4XpldiBzYWR5IHDtc2VtOiAlcyIKKworIzogZ3VpX3gxMS5jOjIwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCAnJXMnIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiUO1zbW8gJyVzJyBuZW3hIHBldm5vdSCa7fhrdSIKKworIzogZ3VpX3gxMS5jOjIwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MzogRm9udHNldCBuYW1lOiAlc1xuIgorbXNnc3RyICJFMjUzOiBu4XpldiBzYWR5IHDtc2VtOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MDogJXNcbiIKK21zZ3N0ciAiUO1zbW8wOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1NworIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAiUO1zbW8xOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1OAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250JWQgd2lkdGggaXMgbm90IHR3aWNlIHRoYXQgb2YgZm9udDBcbiIKK21zZ3N0ciAiiu34a2EgcO1zbWElZCBuZW7tIGR2b2pu4XNvYmxlbSCa7fhreSBw7XNtYTBcbiIKKworIzogZ3VpX3gxMS5jOjIwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDAgd2lkdGg6ICVsZFxuIgorbXNnc3RyICKK7fhrYSBw7XNtYTA6ICVsZFxuIgorCisjOiBndWlfeDExLmM6MjA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9udDEgd2lkdGg6ICVsZFxuIgorIlxuIgorbXNnc3RyICIiCisiiu34a2EgcO1zbWExOiAlbGRcbiIKKyJcbiIKKworIzogZ3VpX3gxMS5jOjIyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiBuZWx6ZSBhbG9rb3ZhdCBiYXJ2dSAlcyIKKworIzogZ3VpX3gxMS5jOjMyNTYKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IENoeWJhIC0tIG5lbHplIHD4Zejtc3Qgc2lnbiBkYXRhISIKKworIzogaGFuZ3VsaW4uYzo2MTAKK21zZ2lkICJFMjU2OiBIYW5ndWwgYXV0b21hdGEgRVJST1IiCittc2dzdHIgIkUyNTY6IENZQkEgSGFuZ3VsIGF1dG9tYXR1IgorCisjOiBpZl9jc2NvcGUuYzo2NworbXNnaWQgIkFkZCBhIG5ldyBkYXRhYmFzZSIKK21zZ3N0ciAiUPhpZGF0IG5vdm91IGRhdGFi4XppIgorCisjOiBpZl9jc2NvcGUuYzo2OQorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIkhsZWThbu0gdnpvcmt1IgorCisjOiBpZl9jc2NvcGUuYzo3MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICJab2JyYXppdCB0dXRvIHpwcuF2dSIKKworIzogaWZfY3Njb3BlLmM6NzMKK21zZ2lkICJLaWxsIGEgY29ubmVjdGlvbiIKK21zZ3N0ciAiVWtvbuhpdCBzcG9qZW7tIgorCisjOiBpZl9jc2NvcGUuYzo3NQorbXNnaWQgIlJlaW5pdCBhbGwgY29ubmVjdGlvbnMiCittc2dzdHIgIlpub3Z1IGluaWNpYWxpem92YXQgdpplY2huYSBzcG9qZW7tIgorCisjOiBpZl9jc2NvcGUuYzo3NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIlpvYnJheml0IHNwb2plbu0iCisKKyM6IGlmX2NzY29wZS5jOjEwOAorbXNnaWQgIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIKK21zZ3N0ciAiVGVudG8gY3Njb3BlIHD47WtheiBuZXBvZHBvcnVqZSByb3pk7Gxlbu0gb2tuYS5cbiIKKworIzogaWZfY3Njb3BlLmM6MTQzCittc2dpZCAiVXNhZ2U6IGNzdGFnIDxpZGVudD4iCittc2dzdHIgIlBvdZ5pdO06IGNzdGFnIDxvZHNhemVu7T4iCisKKyM6IGlmX2NzY29wZS5jOjE5OQorbXNnaWQgIkUyNTc6IGNzdGFnOiB0YWcgbm90IGZvdW5kIgorbXNnc3RyICJFMjU3OiBjc3RhZzogdGFnIG5lbmFsZXplbiIKKworIzogaWZfY3Njb3BlLmM6NDA3IGlmX2NzY29wZS5jOjQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGF0KCVzKSBlcnJvcjogJWQiCittc2dzdHIgInN0YXQoJXMpIGNoeWJhOiAlZCIKKworIzogaWZfY3Njb3BlLmM6NDYwIGlmX2NzY29wZS5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRlZCBjc2NvcGUgZGF0YWJhc2UgJXMiCittc2dzdHIgIlD4aWThbmEgY3Njb3BlIGRhdGFi4XplICVzIgorCisjOiBpZl9jc2NvcGUuYzo0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgZGlyZWN0b3J5IG9yIGEgdmFsaWQgY3Njb3BlIGRhdGFiYXNlIgorbXNnc3RyICIlcyBuZW7tIGFuaSBhZHJlc+H4ZW0gYW5pIHNwcuF2bm91IGNzY29wZSBkYXRhYuF67SIKKworIzogaWZfY3Njb3BlLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWQiCittc2dzdHIgImNoeWJhIHD4aSDodGVu7SBjc2NvcGUgc3BvamVu7SAlZCIKKworIzogaWZfY3Njb3BlLmM6NjMzCittc2dpZCAidW5rbm93biBjc2NvcGUgc2VhcmNoIHR5cGUiCittc2dzdHIgIm5lem7hbf0gdHlwIGNzY29wZSBobGVk4W7tIgorCisjOiBpZl9jc2NvcGUuYzo2ODAKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAibmVsemUgdnl0dm/4aXQgY3Njb3BlIHJvdXJ5IgorCisjOiBpZl9jc2NvcGUuYzo3NDUKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIKK21zZ3N0ciAic3B1mnTsbu0gY3NfY3JlYXRlX2Nvbm5lY3Rpb24gc2VsaGFsbyIKKworIzogaWZfY3Njb3BlLmM6NzU1Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogdm9s4W7tIGZkb3BlbiBwcm8gdG9fZnAgc2VsaGFsbyIKKworIzogaWZfY3Njb3BlLmM6NzU3Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgZnJfZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogdm9s4W7tIGZkb3BlbiBwcm8gZnJfZnAgc2VsaGFsbyIKKworIzogaWZfY3Njb3BlLmM6Nzg1Cittc2dpZCAibm8gY3Njb3BlIGNvbm5lY3Rpb25zIgorbXNnc3RyICKe4WRu4SBjc2NvcGUgc3BvamVu7SIKKworIzogaWZfY3Njb3BlLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTk6IG5vIG1hdGNoZXMgZm91bmQgZm9yIGNzY29wZSBxdWVyeSAlcyBvZiAlcyIKK21zZ3N0ciAiRTI1OTogY3Njb3BlIGhsZWThbu0gJXMgdnpvcmt1ICVzIG5lbmGabG8gnuFkbm91IHNob2R1IgorCisjOiBpZl9jc2NvcGUuYzo4OTkKK21zZ2lkICJjc2NvcGUgY29tbWFuZHM6XG4iCittc2dzdHIgInD47WthenkgY3Njb3BlOlxuIgorCisjOiBpZl9jc2NvcGUuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS01czogJS0zMHMgKFVzYWdlOiAlcylcbiIKK21zZ3N0ciAiJS01czogJS0zMHMgKFBvdZ5pdO06ICVzKVxuIgorCisjOiBpZl9jc2NvcGUuYzo5NzAKK21zZ2lkICJkdXBsaWNhdGUgY3Njb3BlIGRhdGFiYXNlIG5vdCBhZGRlZCIKK21zZ3N0ciAiZHVwbGljaXRu7SBjc2NvcGUgZGF0YWLhemUgbmVieWxhIHD4aWThbmEiCisKKyM6IGlmX2NzY29wZS5jOjk4MQorbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICJkb3NhnmVuIG1heGlt4Wxu7SBwb+hldCBjc2NvcGUgc3BvamVu7SIKKworIzogaWZfY3Njb3BlLmM6MTEwMgorbXNnaWQgIkUyNjA6IGNzY29wZSBjb25uZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MDogY29ubmVjdGlvbiBzcG9qZW7tIG5lbmFsZXplbm8iCisKKyM6IGlmX2NzY29wZS5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiBjb25uZWN0aW9uIHNwb2plbu0gJXMgbmVuYWxlemVubyIKKworIzogaWZfY3Njb3BlLmM6MTE0MQorbXNnaWQgImNzY29wZSBjb25uZWN0aW9uIGNsb3NlZCIKK21zZ3N0ciAiY2xvc2VkIHNwb2plbu0gdXphdvhlbm8iCisKKyM6IGlmX2NzY29wZS5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gJXMgY2xvc2VkXG4iCittc2dzdHIgImNzY29wZSBzcG9qZW7tICVzIHV6YXb4ZW5vXG4iCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTI5MAorbXNnaWQgImZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJvc3Vkb3bhIGNoeWJhIHYgY3NfbWFuYWdlX21hdGNoZXMiCisKKyM6IGlmX2NzY29wZS5jOjEzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKK21zZ3N0ciAiRTI2MjogcPhpIOh0ZW7tIGNzY29wZSBzcG9qZW7tICVkIgorCisjOiBpZl9jc2NvcGUuYzoxNDQ5Cittc2dpZCAiY291bGRuJ3QgbWFsbG9jXG4iCittc2dzdHIgInZvbOFu7SBtYWxsb2Mgc2VsaGFsb1xuIgorCisjOiBpZl9jc2NvcGUuYzoxNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzXG4iCittc2dzdHIgIkNzY29wZSB0YWc6ICVzXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0NTgKK21zZ2lkICIgICAjICAgbGluZSIKK21zZ3N0ciAiICAgIyAgIPjhZGVrIgorCisjOiBpZl9jc2NvcGUuYzoxNDYwCittc2dpZCAiZmlsZW5hbWUgLyBjb250ZXh0IC8gbGluZVxuIgorbXNnc3RyICJu4XpldiBzb3Vib3J1LyBrb250ZXh0LyD44WRla1xuIgorCisjOiBpZl9jc2NvcGUuYzoxNzE4Cittc2dpZCAiQWxsIGNzY29wZSBkYXRhYmFzZXMgcmVzZXQiCittc2dzdHIgIlaaZWNobnkgY3Njb3BlIGRhdGFi4XplIHJlc2V0b3bhbnkiCisKKyM6IGlmX2NzY29wZS5jOjE3ODUKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAinuFkbukgY3Njb3BlIHNwb2plbu1cbiIKKworIzogaWZfY3Njb3BlLmM6MTc4OQorbXNnaWQgIiAjIHBpZCAgICBkYXRhYmFzZSBuYW1lICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kIHBhdGhcbiIKK21zZ3N0ciAiICMgcGlkICAgIG7hemV2IGRhdGFi4XplICAgICAgICAgICAgICAgICAgICAgIHD4ZWRwb25hIGNlc3R5XG4iCisKKyM6IGlmX2NzY29wZS5jOjE4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTJkICUtNWxkICAlLTM0cyAgPG5vbmU+XG4iCittc2dzdHIgIiUyZCAlLTVsZCAgJS0zNHMgIDye4WRu/T5cbiIKKworIzogaWZfcHl0aG9uLmM6Mzc2Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjYzOiBMaXR1amksIHRlbnRvIHD47WtheiBqZSBkZWFrdGl2b3bhbjsga25paG92bnUgamF6eWthIFB5dGhvbiBuZWx6ZSAiCisibmFocuF0LiIKKworIzogaWZfcHl0aG9uLmM6NTc2Cittc2dpZCAiY2FuJ3QgZGVsZXRlIE91dHB1dE9iamVjdCBhdHRyaWJ1dGVzIgorbXNnc3RyICJuZWx6ZSBzbWF6YXQgYXRyaWJ1dHkgT3V0cHV0T2JqZWN0IgorCisjOiBpZl9weXRob24uYzo1ODMKK21zZ2lkICJzb2Z0c3BhY2UgbXVzdCBiZSBhbiBpbnRlZ2VyIgorbXNnc3RyICJzb2Z0c3BhY2UgbXVz7SBi/XQga2xhZG7pIGNlbOkg6O1zbG8iCisKKyM6IGlmX3B5dGhvbi5jOjU5MQorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIgorbXNnc3RyICJjaHlibv0gYXRyaWJ1dCIKKworIzogaWZfcHl0aG9uLmM6NjMwIGlmX3B5dGhvbi5jOjY0NAorbXNnaWQgIndyaXRlbGluZXMoKSByZXF1aXJlcyBsaXN0IG9mIHN0cmluZ3MiCittc2dzdHIgIndyaXRlbGluZXMoKSB2eZ5hZHVqZSBzZXpuYW0g+GV07Hpj+SIKKworIzogaWZfcHl0aG9uLmM6NzcwCittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjogY2h5YmEgcPhpIGluaWNpYWxpemFjaSBJL08gb2JqZWt0+SIKKworIzogaWZfcHl0aG9uLmM6OTU1IGlmX3RjbC5jOjEzOTEKK21zZ2lkICJpbnZhbGlkIGV4cHJlc3Npb24iCittc2dzdHIgIkNoeWJu/SB2/XJheiIKKworIzogaWZfcHl0aG9uLmM6OTY5IGlmX3RjbC5jOjEzOTYKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgInBvZHBvcmEgdv1yYXr5IGJ5bGEgdnlwbnV0YSBw+GkgcPhla2xhZHUgcHJvZ3JhbXUiCisKKyM6IGlmX3B5dGhvbi5jOjk4MgorbXNnaWQgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCBidWZmZXIiCittc2dzdHIgInBva3VzIG8gb2RrYXogbmEgc21hemFu/SBidWZmZXIiCisKKyM6IGlmX3B5dGhvbi5jOjk5NyBpZl9weXRob24uYzoxMDM4IGlmX3B5dGhvbi5jOjExMDIgaWZfdGNsLmM6MTIwMworbXNnaWQgImxpbmUgbnVtYmVyIG91dCBvZiByYW5nZSIKK21zZ3N0ciAi6O1zbG8g+OFka3UgbWltbyByb3pzYWgiCisKKyM6IGlmX3B5dGhvbi5jOjEyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IgorbXNnc3RyICI8YnVmZmVyIG9iamVrdCAoc21heuFuKSBuYSAlOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTMyNiBpZl90Y2wuYzo4MjUKK21zZ2lkICJpbnZhbGlkIG1hcmsgbmFtZSIKK21zZ3N0ciAiY2h5Ym7pIGpt6W5vIHpuYehreSIKKworIzogaWZfcHl0aG9uLmM6MTYwMQorbXNnaWQgIm5vIHN1Y2ggYnVmZmVyIgorbXNnc3RyICKe4WRu/SB0YWtvdv0gYnVmZmVyIgorCisjOiBpZl9weXRob24uYzoxNjg5Cittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIHdpbmRvdyIKK21zZ3N0ciAicG9rdXMgbyBvZGtheiBuYSBzbWF6YW7pIG9rbm8iCisKKyM6IGlmX3B5dGhvbi5jOjE3MzQKK21zZ2lkICJyZWFkb25seSBhdHRyaWJ1dGUiCittc2dzdHIgImF0cmlidXQgcG91emVfcHJvX+h0ZW7tIgorCisjOiBpZl9weXRob24uYzoxNzQ3Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICJ1be1zdOxu7SBrdXJ6b3J1IG1pbW8gYnVmZmVyIgorCisjOiBpZl9weXRob24uYzoxODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0IChkZWxldGVkKSBhdCAlLjhsWD4iCittc2dzdHIgIjxvYmpla3Qgb2tuYSAoc21heuFuKSBuYSAlOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTgzNgorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IgorbXNnc3RyICI8b2JqZWt0IG9rbmEgKG5lem7hbf0pIG5hICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxODM4CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8b2tubyAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5MTQKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAinuFkbukgdGFrb3bpIG9rbm8iCisKKyM6IGlmX3B5dGhvbi5jOjIxNDQgaWZfcHl0aG9uLmM6MjE3NSBpZl9weXRob24uYzoyMjI1IGlmX3B5dGhvbi5jOjIyODUKKyM6IGlmX3B5dGhvbi5jOjI0MDIgaWZfcHl0aG9uLmM6MjQ1NCBpZl90Y2wuYzo2NzMgaWZfdGNsLmM6NzE4IGlmX3RjbC5jOjc5MgorIzogaWZfdGNsLmM6ODYyIGlmX3RjbC5jOjE5ODcKK21zZ2lkICJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICJuZWx6ZSB1bG+eaXQgaW5mb3JtYWNlIHBybyBw+O1rYXogdW5kbyIKKworIzogaWZfcHl0aG9uLmM6MjE0NiBpZl9weXRob24uYzoyMjMyIGlmX3B5dGhvbi5jOjIyOTYKK21zZ2lkICJjYW5ub3QgZGVsZXRlIGxpbmUiCittc2dzdHIgIm5lbHplIHNtYXphdCD44WRlayIKKworIzogaWZfcHl0aG9uLmM6MjE3NyBpZl9weXRob24uYzoyMzEyIGlmX3RjbC5jOjY3OSBpZl90Y2wuYzoyMDA5Cittc2dpZCAiY2Fubm90IHJlcGxhY2UgbGluZSIKK21zZ3N0ciAibmVsemUgbmFocmFkaXQg+OFkZWsiCisKKyM6IGlmX3B5dGhvbi5jOjIzMjggaWZfcHl0aG9uLmM6MjQwNCBpZl9weXRob24uYzoyNDYyCittc2dpZCAiY2Fubm90IGluc2VydCBsaW5lIgorbXNnc3RyICJuZWx6ZSB2bG+eaXQg+OFkZWsiCisKKyM6IGlmX3B5dGhvbi5jOjI1NjYKK21zZ2lkICJzdHJpbmcgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgIvhldOx6ZWMgbmVzbe0gb2JzYWhvdmF0IHpuYWt5IG5vdulobyD44WRrdSIKKworIzogaWZfcnVieS5jOjM5NAorbXNnaWQgIiIKKyJFMjY2OiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUnVieSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisiRTI2NjogTGl0dWppLCBhbGUgdGVudG8gcPjta2F6IGplIGRlYWt0aXZvduFuOyBrbmlob3ZudSBqYXp5a2EgUnVieSBuZWx6ZSAiCisibmFocuF0LiIKKworIzogaWZfcnVieS5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjczOiB1bmtub3duIGxvbmdqbXAgc3RhdHVzICVkIgorbXNnc3RyICJFMjczOiBuZXpu4W39IGxvbmdqbXAgc3RhdiAlZCIKKworIzogaWZfc25pZmYuYzo2NworbXNnaWQgIlRvZ2dsZSBpbXBsZW1lbnRhdGlvbi9kZWZpbml0aW9uIgorbXNnc3RyICJQcm9ob3plbu0gaW1wbGVtZW50YWNlL2RlZmluaWNlIgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICJab2JyYXplbu0gYmFzZSBjbGFzcyB6IgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAiWm9icmF6ZW7tIG92ZXJyaWRkZW4gbWVtYmVyIGZ1bmtjZSIKKworIzogaWZfc25pZmYuYzo3MAorbXNnaWQgIlJldHJpZXZlIGZyb20gZmlsZSIKK21zZ3N0ciAiWm5vdnV67XNr4W5vIHplIHNvdWJvcnUiCisKKyM6IGlmX3NuaWZmLmM6NzEKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIHByb2plY3QiCittc2dzdHIgIlpub3Z1eu1za+FubyB6IHByb2pla3R1IgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIlpub3Z67XNr4W5vIHplIHaaZWNoIHByb2pla3T5IgorCisjOiBpZl9zbmlmZi5jOjc0Cittc2dpZCAiUmV0cmlldmUiCittc2dzdHIgIlpub3Z1eu1za+FubyIKKworIzogaWZfc25pZmYuYzo3NQorbXNnaWQgIlNob3cgc291cmNlIG9mIgorbXNnc3RyICJab2JyYXplbu0gemRyb2plIgorCisjOiBpZl9zbmlmZi5jOjc2Cittc2dpZCAiRmluZCBzeW1ib2wiCittc2dzdHIgIk5hau10IHN5bWJvbCIKKworIzogaWZfc25pZmYuYzo3NworbXNnaWQgIkJyb3dzZSBjbGFzcyIKK21zZ3N0ciAiUHJvaGztnmV0IGNsYXNzIgorCisjOiBpZl9zbmlmZi5jOjc4Cittc2dpZCAiU2hvdyBjbGFzcyBpbiBoaWVyYXJjaHkiCittc2dzdHIgIlpvYnJhemVu7SBjbGFzcyB2IGhpZXJhcmNoaWkiCisKKyM6IGlmX3NuaWZmLmM6NzkKK21zZ2lkICJTaG93IGNsYXNzIGluIHJlc3RyaWN0ZWQgaGllcmFyY2h5IgorbXNnc3RyICJab2JyYXplbu0gY2xhc3MgdiByZXN0cmljdGVkIGhpZXJhcmNoaWkiCisKKyM6IGlmX3NuaWZmLmM6ODAKK21zZ2lkICJYcmVmIHJlZmVycyB0byIKK21zZ3N0ciAiWHJlZiBvZGthenVqZSBuYSIKKworIzogaWZfc25pZmYuYzo4MQorbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCittc2dzdHIgIlhyZWYgb2RrYXpvdmFsIG5hIgorCisjOiBpZl9zbmlmZi5jOjgyCittc2dpZCAiWHJlZiBoYXMgYSIKK21zZ3N0ciAiWHJlZiBt4SIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiBwb3WeaXQiCisKKyM6IGlmX3NuaWZmLmM6ODQKK21zZ2lkICJTaG93IGRvY3Ugb2YiCittc2dzdHIgIlpvYnJhemVu7SBkb2N1bWVudGFjZSIKKworIzogaWZfc25pZmYuYzo4NQorbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgorbXNnc3RyICJHZW5lcm924W5hIGRva3VtZW50YWNlIHBybyIKKworIzogaWZfc25pZmYuYzo5NworbXNnaWQgIiIKKyJDYW5ub3QgY29ubmVjdCB0byBTTmlGRisuIENoZWNrIGVudmlyb25tZW50IChzbmlmZmVtYWNzIG11c3QgYmUgZm91bmQgaW4gIgorIiRQQVRIKS5cbiIKK21zZ3N0ciAiIgorIk5lbHplIHNlIHD4aXBvaml0IGsgU05pRkYrLiBaa29udHJvbHVqdGUgcHJvbexubukgKHNuaWZmZW1hY3MgbXVz7SAiCisiYv10KXV2ZWRlbmEgdiAkUEFUSC5cbiIKKworIzogaWZfc25pZmYuYzo0MjUKK21zZ2lkICJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiRTI3NDogU25pZmY6IENoeWJhIHD4aSDodGVu7S4gT2Rwb2plbm8iCisKKyM6IGlmX3NuaWZmLmM6NTUzCittc2dpZCAiU05pRkYrIGlzIGN1cnJlbnRseSAiCittc2dzdHIgIlNOaUZGKyBqZSBwcuF27CAiCisKKyM6IGlmX3NuaWZmLmM6NTU1Cittc2dpZCAibm90ICIKK21zZ3N0ciAibmUgIgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAicPhpcG9qZW4iCisKKyM6IGlmX3NuaWZmLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzU6IFVua25vd24gU05pRkYrIHJlcXVlc3Q6ICVzIgorbXNnc3RyICJFMjc1OiBOZXpu4W39IHBvnmFkYXZlayBTTmlGRis6ICVzIgorCisjOiBpZl9zbmlmZi5jOjYwNQorbXNnaWQgIkUyNzY6IEVycm9yIGNvbm5lY3RpbmcgdG8gU05pRkYrIgorbXNnc3RyICJFMjc2OiBDaHlibukgcPhpcG9qZW7tIGsgU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwMTAKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODogU05pRkYrIG5lcPhpcG9qZW4iCisKKyM6IGlmX3NuaWZmLmM6MTAxOQorbXNnaWQgIkUyNzk6IE5vdCBhIFNOaUZGKyBidWZmZXIiCittc2dzdHIgIkUyNzk6IE5lbu0gU05pRkYrIGJ1ZmZlciIKKworIzogaWZfc25pZmYuYzoxMDg0Cittc2dpZCAiU25pZmY6IEVycm9yIGR1cmluZyB3cml0ZS4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJTbmlmZjogQ2h5YmEgcPhpIHrhcGlzdS4gT2Rwb2plbm8uIgorCisjOiBpZl90Y2wuYzo0MDcKK21zZ2lkICJpbnZhbGlkIGJ1ZmZlciBudW1iZXIiCittc2dzdHIgImNoeWJu/SBu4XpldiBidWZmZXJ1IgorCisjOiBpZl90Y2wuYzo0NTMgaWZfdGNsLmM6OTIwIGlmX3RjbC5jOjEwOTkKK21zZ2lkICJub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICJuZW7tIGplmnTsIHBvZHBvcm924W5vIgorCisjOiBpZl90Y2wuYzo0OTAKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAibmV6buFt4SB2b2xiYSIKKworIy4gPz8/CisjOiBpZl90Y2wuYzo3NjMKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgIm5lbHplIG5hc3Rhdml0IPjhZGt5IgorCisjOiBpZl90Y2wuYzo4MzQKK21zZ2lkICJtYXJrIG5vdCBzZXQiCittc2dzdHIgInpuYehrYSBuZW7tIG5hc3RhdmVuYSIKKworIzogaWZfdGNsLmM6ODQwIGlmX3RjbC5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicm93ICVkIGNvbHVtbiAlZCIKK21zZ3N0ciAi+OFkZWsgJWQgc2xvdXBlYyAlZCIKKworIzogaWZfdGNsLmM6ODcwCittc2dpZCAiY2Fubm90IGluc2VydC9hcHBlbmQgbGluZSIKK21zZ3N0ciAibmVsemUgdmxvnml0L3D4aXBvaml0IPjhZGVrIgorCisjOiBpZl90Y2wuYzoxMjU3Cittc2dpZCAidW5rbm93biBmbGFnOiAiCittc2dzdHIgIm5lem7hbf0gcPjtem5hazogIgorCisjOiBpZl90Y2wuYzoxMzI3Cittc2dpZCAidW5rbm93biB2aW1PcHRpb24iCittc2dzdHIgIm5lem7hbeEgdmltT3B0aW9uIgorCisjOiBpZl90Y2wuYzoxNDEyCittc2dpZCAia2V5Ym9hcmQgaW50ZXJydXB0IgorbXNnc3RyICJw+GVydZplbu0geiBrbOF2ZXNuaWNlIgorCisjOiBpZl90Y2wuYzoxNDE3Cittc2dpZCAidmltIGVycm9yIgorbXNnc3RyICJjaHliYSB2aW0iCisKKyM6IGlmX3RjbC5jOjE0NjAKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIm5lbHplIHZ5dHZv+Gl0IHD47WtheiBidWZmZXJ1L29rbmE6IG9iamVrdCBzbWF64W4iCisKKyM6IGlmX3RjbC5jOjE1MzQKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICIiCisibmVsemUgemFyZWdpc3Ryb3ZhdCBw+O1rYXogenDsdG7paG8gdm9s4W7tOiBidWZmZXIvb2tubyBqaZ4gYnlsbyBzbWF64W5vIgorCisjLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIzogaWZfdGNsLmM6MTU1MQorbXNnaWQgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgY29ycnVwdCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byAiCisidmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IHBvmmtvemVuIT8gT3puYW10ZSwgcHJvc+1tLCB0dXRvIGNoeWJ1IG5hICIKKyJ2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjE1NTIKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisibmVsemUgemFyZWdpc3Ryb3ZhdCBw+O1rYXogenDsdG7paG8gdm9s4W7tOiBvZGtheiBuYSBidWZmZXIvb2tubyBuZW5hbGV6ZW4iCisKKyM6IGlmX3RjbC5jOjE3MTMKK21zZ2lkICJTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgVGNsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJMaXR1amksIGFsZSB0ZW50byBw+O1rYXogamUgZGVha3Rpdm924W47IGtuaWhvdm51IGphenlrYSBUY2wgbmVsemUgbmFocuF0LiIKKworIzogaWZfdGNsLmM6MTg3NQorbXNnaWQgIiIKKyJFMjgxOiBUQ0wgRVJST1I6IGV4aXQgY29kZSBpcyBub3QgaW50IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLm9yZyIKK21zZ3N0ciAiIgorIkUyODE6IFRDTCBDSFlCQTogbuF2cmF0b3b9IGvzZCBuZW7tIGNlbOkg6O1zbG8hPyBPem5hbXRlLCBwcm9z7W0sIHR1dG8gY2h5YnUgIgorIm5hIHZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTk5NQorbXNnaWQgImNhbm5vdCBnZXQgbGluZSIKK21zZ3N0ciAibmVsemUgcPhl6O1zdCD44WRlayIKKworIzogaWZfeGNtZHNydi5jOjIwNAorbXNnaWQgIlVuYWJsZSB0byByZWdpc3RlciBhIGNvbW1hbmQgc2VydmVyIG5hbWUiCittc2dzdHIgIk5lbu0gbW+ebukgemF6bmFtZW5hdCBqbelubyBjb21tYW5kIHNlcnZlcnUiCisKKyM6IGlmX3hjbWRzcnYuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0Nzogbm8gcmVnaXN0ZXJlZCBzZXJ2ZXIgbmFtZWQgXCIlc1wiIgorbXNnc3RyICJFMjQ3OiBOZWV4aXN0dWplIHJlZ2lzdHJvdmFu/SBzZXJ2ZXIgam3pbmVtIFwiJXNcIiIKKworIzogaWZfeGNtZHNydi5jOjQ0NgorbXNnaWQgIkUyNDg6IEZhaWxlZCB0byBzZW5kIGNvbW1hbmQgdG8gdGhlIGRlc3RpbmF0aW9uIHByb2dyYW0iCittc2dzdHIgIkUyNDg6IFNlbGhhbG8gemFzbOFu7SBw+O1rYXp1IHVy6GVu6W11IHByb2dyYW11IgorCisjOiBpZl94Y21kc3J2LmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICJQb3WeaXQgY2h5Ym79IGlkIHNlcnZlcnU6ICVzIgorCisjOiBpZl94Y21kc3J2LmM6MTA2MQorbXNnaWQgIkUyNDk6IGNvdWxkbid0IHJlYWQgVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IgorbXNnc3RyICJFMjQ5OiBuZWx6ZSDo7XN0IFZJTSBpbnN0YW5jaSByZWdpc3RyeSBwcm9wZXJ0eSIKKworIzogaWZfeGNtZHNydi5jOjEwNzIKK21zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCittc2dzdHIgIiIKKyJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgYnlsYSCacGF0buwgdnl0dm/4ZW5hYSBieWxhIHNtYXrhbmEhIgorCisjOiBtYWluLmM6NTMgb3B0aW9uLmM6MzE2MiBvcHRpb24uYzozMjY5Cittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk5lem7hbeEgdm9sYmEiCisKKyM6IG1haW4uYzo1NQorbXNnaWQgIlRvbyBtYW55IGVkaXQgYXJndW1lbnRzIgorbXNnc3RyICJQ+O1saZogbW5vaG8gZWRpdCBhcmd1bWVudPkiCisKKyM6IG1haW4uYzo1NworbXNnaWQgIkFyZ3VtZW50IG1pc3NpbmcgYWZ0ZXIiCittc2dzdHIgIkNoeWLtIGFyZ3VtZW50IHBvIgorCisjOiBtYWluLmM6NTkKK21zZ2lkICJHYXJiYWdlIGFmdGVyIG9wdGlvbiIKK21zZ3N0ciAiQ2h5YnkgemEgdm9sYm91IgorCisjOiBtYWluLmM6NjEKK21zZ2lkICJUb28gbWFueSBcIitjb21tYW5kXCIgb3IgXCItYyBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICJQ+O1saZogbW5vaG8gXCIrcPjta2F6XCIg6GkgXCItYyBw+O1rYXpcIiBhcmd1bWVudPkiCisKKyM6IG1haW4uYzo2MworbXNnaWQgIkludmFsaWQgYXJndW1lbnQgZm9yIgorbXNnc3RyICJDaHlibv0gYXJndW1lbnQgcHJvIgorCisjOiBtYWluLmM6NDM2Cittc2dpZCAiVGhpcyBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSBkaWZmIGZlYXR1cmUuIgorbXNnc3RyICJWSU0gbmVieWwgcPhlbG+eZW4gcyB2b2xib3UgK2RpZmYiCisKKyM6IG1haW4uYzo4NTgKK21zZ2lkICJBdHRlbXB0IHRvIG9wZW4gc2NyaXB0IGZpbGUgYWdhaW46IFwiIgorbXNnc3RyICJQb2t1cyBvIG9w7HRvdm7pIG90ZXb4ZW7tIHNrcmlwdHU6IFwiIgorCisjOiBtYWluLmM6ODYyIG1haW4uYzo4NjkgbWFpbi5jOjkxMyBtZW1saW5lLmM6MzY3MyBtZW1saW5lLmM6MzY3NworIzogdmVyc2lvbi5jOjgxNiB2ZXJzaW9uLmM6ODIxIHZlcnNpb24uYzo4MjYgdmVyc2lvbi5jOjgzMSB2ZXJzaW9uLmM6ODM2CisjOiB2ZXJzaW9uLmM6ODQxIHZlcnNpb24uYzo4NDcgdmVyc2lvbi5jOjg1MSB2ZXJzaW9uLmM6ODU1IHZlcnNpb24uYzo4NjAKKyM6IHZlcnNpb24uYzo4NjcgdmVyc2lvbi5jOjg3NSB2ZXJzaW9uLmM6ODgxCittc2dpZCAiXCJcbiIKK21zZ3N0ciAiXCJcbiIKKworIzogbWFpbi5jOjg2NworbXNnaWQgIkNhbm5vdCBvcGVuIGZvciByZWFkaW5nOiBcIiIKK21zZ3N0ciAiTmVsemUgb3RldvjtdCBwcm8geuFwaXM6IFwiIgorCisjOiBtYWluLmM6OTExCittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICJOZWx6ZSBvdGV2+O10IHBybyB2/XN0dXAgc2tyaXB0dTogXCIiCisKKyM6IG1haW4uYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZpbGVzIHRvIGVkaXRcbiIKK21zZ3N0ciAicG/oZXQgc291Ym9y+SBwcm8gZWRpdGFjaTogJWRcbiIKKworIzogbWFpbi5jOjEwOTQKK21zZ2lkICJWaW06IFdhcm5pbmc6IE91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IFZhcm924W7tOiB2/XN0dXAgbmVzbez4dWplIG5hIHRlcm1pbuFsXG4iCisKKyM6IG1haW4uYzoxMDk2Cittc2dpZCAiVmltOiBXYXJuaW5nOiBJbnB1dCBpcyBub3QgZnJvbSBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTogVmFyb3bhbu06IHZzdHVwIG5lcG9jaOF67SB6IHRlcm1pbuFsdVxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjExNzEKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJwcmUtdmltcmMgcPjta2F6b3b9IPjhZGVrIgorCisjOiBtYWluLmM6MTIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgyOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTI4MjogTmVsemUg6O1zdCB6IFwiJXNcIiIKKworIzogbWFpbi5jOjIxNTcKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvZHJvYm7saprtIGluZm9ybWFjZSB67XNr4XRlIHBvbW9j7SBcInZpbSAtaFwiXG4iCisKKyM6IG1haW4uYzoyMTkwCittc2dpZCAiW2ZpbGUgLi5dICAgICAgIGVkaXQgc3BlY2lmaWVkIGZpbGUocykiCittc2dzdHIgIltTT1VCT1JdIC4uICAgICAgICAgIGVkaXRvdmF0IFNPVUJPUih5KSIKKworIzogbWFpbi5jOjIxOTEKK21zZ2lkICItICAgICAgICAgICAgICAgcmVhZCB0ZXh0IGZyb20gc3RkaW4iCittc2dzdHIgIi0gICAgICAgICAgICAgICAgICAgIOjtc3QgdGV4dCB6ZSBzdGFuZGFyZG7taG8gdnN0dXB1IgorCisjOiBtYWluLmM6MjE5MgorbXNnaWQgIi10IHRhZyAgICAgICAgICBlZGl0IGZpbGUgd2hlcmUgdGFnIGlzIGRlZmluZWQiCittc2dzdHIgIi10IFRBRyAgICAgICAgICBlZGl0b3ZhdCBzb3Vib3IgbmEgbe1zdOwgZGVmaW5pY2UgVEFHVSIKKworIzogbWFpbi5jOjIxOTQKK21zZ2lkICItcSBbZXJyb3JmaWxlXSAgZWRpdCBmaWxlIHdpdGggZmlyc3QgZXJyb3IiCittc2dzdHIgIi1xIFtjaHlib3b9IHNvdWJvcl0gIGVkaXRvdmF0IHNvdWJvciBuYSBt7XN07CB2/XNreXR1IHBydm7tIGNoeWJ5IgorCisjOiBtYWluLmM6MjIwMworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJ1c2FnZToiCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJwb3WeaXTtOiIKKworIzogbWFpbi5jOjIyMDYKK21zZ2lkICIgdmltIFthcmd1bWVudHNdICIKK21zZ3N0ciAidmltIFtw+GVw7W5h6GVdICIKKworIzogbWFpbi5jOjIyMTAKK21zZ2lkICIiCisiXG4iCisiICAgb3I6IgorbXNnc3RyICIiCisiXG4iCisiICAgbmVibyIKKworIzogbWFpbi5jOjIyMTMKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQXJndW1lbnRzOlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiQXJndW1lbnR5OlxuIgorCisjOiBtYWluLmM6MjIxNAorbXNnaWQgIi0tXHRcdFx0T25seSBmaWxlIG5hbWVzIGFmdGVyIHRoaXMiCittc2dzdHIgIi0tXHRcdFx0TW9ob3UgbuFzbGVkb3ZhdCBwb3V6ZSBu4Xp2eSBzb3Vib3L5IgorCisjOiBtYWluLmM6MjIxNgorbXNnaWQgIi1yZWdpc3Rlclx0XHRSZWdpc3RlciB0aGlzIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXJlZ2lzdGVyXHRcdHD4aWhs4XNpdCBndmltIG5hIE9MRSIKKworIzogbWFpbi5jOjIyMTcKK21zZ2lkICItdW5yZWdpc3Rlclx0XHRVbnJlZ2lzdGVyIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXJlZ2lzdGVyXHRcdG9kaGzhc2l0IGd2aW0geiBPTEUiCisKKyM6IG1haW4uYzoyMjIwCittc2dpZCAiLWdcdFx0XHRSdW4gdXNpbmcgR1VJIChsaWtlIFwiZ3ZpbVwiKSIKK21zZ3N0ciAiLWdcdFx0XHRzcHVzdGl0IHYgR1VJIHJlnmltdSAoc3Rlam7pIGpha28gXCJndmltXCIpIgorCisjOiBtYWluLmM6MjIyMQorbXNnaWQgIi1mXHRcdFx0Rm9yZWdyb3VuZDogRG9uJ3QgZm9yayB3aGVuIHN0YXJ0aW5nIEdVSSIKK21zZ3N0ciAiLWZcdFx0XHRQb3D4ZWTtOiBw+Gkgc3RhcnR1IEdVSSBzZSBuZW9kZOxs7SBvZCBzaGVsbHUiCisKKyM6IG1haW4uYzoyMjIzCittc2dpZCAiLXZcdFx0XHRWaSBtb2RlIChsaWtlIFwidmlcIikiCittc2dzdHIgIi12XHRcdFx0VmkgbfNkIChzdGVqbukgamFrbyBcInZpXCIpIgorCisjOiBtYWluLmM6MjIyNAorbXNnaWQgIi1lXHRcdFx0RXggbW9kZSAobGlrZSBcImV4XCIpIgorbXNnc3RyICItdlx0XHRcdEV4IG3zZCAoc3Rlam7pIGpha28gXCJleFwiKSIKKworIzogbWFpbi5jOjIyMjUKK21zZ2lkICItc1x0XHRcdFNpbGVudCAoYmF0Y2gpIG1vZGUgKG9ubHkgZm9yIFwiZXhcIikiCittc2dzdHIgIi1zXHRcdFx0VGljaP0gKGThdmtvdv0pIHJlnmltIChwb3V6ZSBwcm8gXCJleFwiKSIKKworIzogbWFpbi5jOjIyMjcKK21zZ2lkICItZFx0XHRcdERpZmYgbW9kZSAobGlrZSBcInZpbWRpZmZcIikiCittc2dzdHIgIi1kXHRcdFx0RGlmZiByZZ5pbSAoc3Rlam7pIGpha28gXCJ2aW1kaWZmXCIpIgorCisjOiBtYWluLmM6MjIyOQorbXNnaWQgIi15XHRcdFx0RWFzeSBtb2RlIChsaWtlIFwiZXZpbVwiLCBtb2RlbGVzcykiCittc2dzdHIgIi12XHRcdFx0U25hZG79IHJlnmltIChzdGVqbukgamFrbyBcImV2aW1cIiwgnuFkbukgbfNkeSApIgorCisjOiBtYWluLmM6MjIzMAorbXNnaWQgIi1SXHRcdFx0UmVhZG9ubHkgbW9kZSAobGlrZSBcInZpZXdcIikiCittc2dzdHIgIi1SXHRcdFx0UmWeaW0gcG91emVfcHJvX+h0ZW7tIChqYWtvIFwidmlld1wiKSIKKworIzogbWFpbi5jOjIyMzEKK21zZ2lkICItWlx0XHRcdFJlc3RyaWN0ZWQgbW9kZSAobGlrZSBcInJ2aW1cIikiCittc2dzdHIgIi1aXHRcdFx0T21lemVu/SByZZ5pbSAoc3Rlam7pIGpha28gXCJydmltXCIpIgorCisjOiBtYWluLmM6MjIzMgorbXNnaWQgIi1tXHRcdFx0TW9kaWZpY2F0aW9ucyAod3JpdGluZyBmaWxlcykgbm90IGFsbG93ZWQiCittc2dzdHIgIi1tXHRcdFx0Wm3sbnkgKHVrbOFk4W7tIHNvdWJvcvkpIHpha+F64W55IgorCisjOiBtYWluLmM6MjIzMworbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdFpt7G55ICh1a2zhZOFu7SBzb3Vib3L5KSB6YWvheuFueSIKKworIzogbWFpbi5jOjIyMzQKK21zZ2lkICItYlx0XHRcdEJpbmFyeSBtb2RlIgorbXNnc3RyICItYlx0XHRcdEJpbuFybu0gcmWeaW0iCisKKyM6IG1haW4uYzoyMjM2Cittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0TGlzcCByZZ5pbSIKKworIzogbWFpbi5jOjIyMzgKK21zZ2lkICItQ1x0XHRcdENvbXBhdGlibGUgd2l0aCBWaTogJ2NvbXBhdGlibGUnIgorbXNnc3RyICItQ1x0XHRcdEtvbXBhdGFiaWxu7SBzIFZpOiAnY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyMjM5Cittc2dpZCAiLU5cdFx0XHROb3QgZnVsbHkgVmkgY29tcGF0aWJsZTogJ25vY29tcGF0aWJsZSciCittc2dzdHIgIi1OXHRcdFx0S29tcGF0aWJpbGl0YSBzIFZpIHZ5cG51dGE6ICdub2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjI0MAorbXNnaWQgIi1WW05dXHRcdFZlcmJvc2UgbGV2ZWwiCittc2dzdHIgIi1WW05dXHRcdNpyb3Zl8iB2/XBpc3UgaGzhmmVrIgorCisjOiBtYWluLmM6MjI0MQorbXNnaWQgIi1EXHRcdFx0RGVidWdnaW5nIG1vZGUiCittc2dzdHIgIi1EXHRcdFx0TGFk7WPtIHJlnmltIgorCisjOiBtYWluLmM6MjI0MgorbXNnaWQgIi1uXHRcdFx0Tm8gc3dhcCBmaWxlLCB1c2UgbWVtb3J5IG9ubHkiCittc2dzdHIgIi1uXHRcdFx0TmVidWRlIHZ5dHbh+GV0IG9ka2zhZGFj7SBzb3Vib3IsIGJ1ZGUgcG91nu12YXQgcG91emUgcGFt7J0iCisKKyM6IG1haW4uYzoyMjQzCittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0Vnlw7ZplIHNlem5hbSBvZGts4WRhY+1jaCBzb3Vib3L5IGEgc2tvbujtIgorCisjOiBtYWluLmM6MjI0NAorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciBu4XpldiBzb3Vib3J1XHRPYm5vdu0gcPhlcnWaZW7pIHNlemVu7SIKKworIzogbWFpbi5jOjIyNDUKK21zZ2lkICItTFx0XHRcdFNhbWUgYXMgLXIiCittc2dzdHIgIi1MXHRcdFx0U3Rlam7pIGpha28gLXIiCisKKyM6IG1haW4uYzoyMjQ3Cittc2dpZCAiLWZcdFx0XHREb24ndCB1c2UgbmV3Y2xpIHRvIG9wZW4gd2luZG93IgorbXNnc3RyICItZlx0XHRcdE5lYnVkZSBwb3We7XZhdCBuZXdjbGkgcHJvIG90ZXb4ZW7tIG9rbmEiCisKKyM6IG1haW4uYzoyMjQ4Cittc2dpZCAiLWRldiA8ZGV2aWNlPlx0XHRVc2UgPGRldmljZT4gZm9yIEkvTyIKK21zZ3N0ciAiLWRldiA8emH47Xplbu0+XHRcdFBvdZ7tdCA8emH47Xplbu0+IHBybyBJL08iCisKKyM6IG1haW4uYzoyMjUxCittc2dpZCAiLUhcdFx0XHRzdGFydCBpbiBIZWJyZXcgbW9kZSIKK21zZ3N0ciAiLUhcdFx0XHRuYXN0YXJ0dWplIHYgaGVicmVqc2vpbSByZZ5pbXUiCisKKyM6IG1haW4uYzoyMjU0Cittc2dpZCAiLUZcdFx0XHRzdGFydCBpbiBGYXJzaSBtb2RlIgorbXNnc3RyICItRlx0XHRcdG5hc3RhcnR1amUgdmUgRmFyc2kgcmWeaW11IgorCisjOiBtYWluLmM6MjI1NgorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW7hbD5cdE5hc3Rhdu0gdHlwIHRlcm1pbuFsdSBuYSA8dGVybWlu4Ww+IgorCisjOiBtYWluLmM6MjI1NworbXNnaWQgIi11IDx2aW1yYz5cdFx0VXNlIDx2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLnZpbXJjIgorbXNnc3RyICItdSA8dmltcmM+XHRcdFBvdZ5pamUgPHZpbXJjPiBt7XN0byBqYWvpaG9rb2xpdiAudmltcmMiCisKKyM6IG1haW4uYzoyMjU5Cittc2dpZCAiLVUgPGd2aW1yYz5cdFx0VXNlIDxndmltcmM+IGluc3RlYWQgb2YgYW55IC5ndmltcmMiCittc2dzdHIgIi1VIDxndmltcmM+XHRcdFBvdZ5pamUgPGd2aW1yYz4gbe1zdG8gamFr6Whva29saXYgLmd2aW1yYyIKKworIzogbWFpbi5jOjIyNjEKK21zZ2lkICItLW5vcGx1Z2luXHRcdERvbid0IGxvYWQgcGx1Z2luIHNjcmlwdHMiCittc2dzdHIgIi0tbm9wbHVnaW5cdFx0TmVuYWhyYWplICdwbHVnaW4nIHNrcmlwdHkiCisKKyM6IG1haW4uYzoyMjYyCittc2dpZCAiLW9bTl1cdFx0T3BlbiBOIHdpbmRvd3MgKGRlZmF1bHQ6IG9uZSBmb3IgZWFjaCBmaWxlKSIKK21zZ3N0ciAiLW9bTl1cdFx0T3RldvhlIE4gb2tlbiAoaW1wbGljaXRu7CBqZWRubyBwcm8ga2GeZP0gc291Ym9yKSIKKworIzogbWFpbi5jOjIyNjMKK21zZ2lkICItT1tOXVx0XHRsaWtlIC1vIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5IgorbXNnc3RyICItT1tOXVx0XHRKYWtvIC1vIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5IgorCisjOiBtYWluLmM6MjI2NAorbXNnaWQgIitcdFx0XHRTdGFydCBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiK1x0XHRcdE5hc3Rhdu0ga3Vyem9yIG5hIGtvbmVjIHNvdWJvcnUiCisKKyM6IG1haW4uYzoyMjY1Cittc2dpZCAiKzxsbnVtPlx0XHRTdGFydCBhdCBsaW5lIDxsbnVtPiIKK21zZ3N0ciAiKzz44WRlaz5cdFx0TmFzdGF27SBrdXJ6b3IgbmEgPPjhZGVrPiIKKworIzogbWFpbi5jOjIyNjcKK21zZ2lkICItLWNtZCA8Y29tbWFuZD5cdEV4ZWN1dGUgPGNvbW1hbmQ+IGJlZm9yZSBsb2FkaW5nIGFueSB2aW1yYyBmaWxlIgorbXNnc3RyICItLWNtZCA8cPjta2F6Plx0UG8gbmFocuFu7SBwcnZu7WhvIHNvdWJvcnUgdnlrb27hIDxw+O1rYXo+IgorCisjOiBtYWluLmM6MjI2OQorbXNnaWQgIi1jIDxjb21tYW5kPlx0XHRFeGVjdXRlIDxjb21tYW5kPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItYyA8cPjta2F6Plx0XHRQbyBuYWhy4W7tIHBydm7taG8gc291Ym9ydSB2eWtvbuEgPHD47Wthej4iCisKKyM6IG1haW4uYzoyMjcwCittc2dpZCAiLVMgPHNlc3Npb24+XHRcdFNvdXJjZSBmaWxlIDxzZXNzaW9uPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICIiCisiLVMgPHNlemVu7T5cdFx0UG8gbmFocuFu7SBwcnZu7WhvIHNvdWJvcnUgdnlrb27hIHD47WthenkgdiBzb3Vib3J1IDxzZXplbu0+IgorCisjOiBtYWluLmM6MjI3MQorbXNnaWQgIi1zIDxzY3JpcHRpbj5cdFJlYWQgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBmaWxlIDxzY3JpcHRpbj4iCittc2dzdHIgIi1zIDxza3JpcHQ+XHRcdE5h6HRlIHD47Wthenkgbm9ybeFsbu1obyBt82R1IHplIDxza3JpcHR1PiIKKworIzogbWFpbi5jOjIyNzIKK21zZ2lkICItdyA8c2NyaXB0b3V0Plx0QXBwZW5kIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItdyA8c2tyaXB0Plx0XHRQ+Glwb2rtIHaaZWNobnkgbmFwc2Fu6SBw+O1rYXp5IGRvIHNvdWJvcnUgPHNrcmlwdD4iCisKKyM6IG1haW4uYzoyMjczCittc2dpZCAiLVcgPHNjcmlwdG91dD5cdFdyaXRlIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItVyA8c2tyaXB0Plx0XHRVbG+e7SB2mmVjaG55IG5hcHNhbukgcPjta2F6eSBkbyBzb3Vib3J1IDxza3JpcHQ+IgorCisjOiBtYWluLmM6MjI3NQorbXNnaWQgIi14XHRcdFx0RWRpdCBlbmNyeXB0ZWQgZmlsZXMiCittc2dzdHIgIi14XHRcdFx0RWRpdGFjZSB6YZppZnJvdmFu/WNoIHNvdWJvcvkiCisKKyM6IG1haW4uYzoyMjc5Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRDb25uZWN0IHZpbSB0byB0aGlzIHBhcnRpY3VsYXIgWC1zZXJ2ZXIiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0U3B1c3TtIHZpbSBuYSBkYW79IFgtc2VydmVyIgorCisjOiBtYWluLmM6MjI4MQorbXNnaWQgIi1YXHRcdFx0RG8gbm90IGNvbm5lY3QgdG8gWCBzZXJ2ZXIiCittc2dzdHIgIi1YXHRcdFx0TmVw+Glwb2rtIHNlIGsgWCBzZXJ2ZXJ1IgorCisjOiBtYWluLmM6MjI4MworbXNnaWQgIi0tc29ja2V0aWQgPHhpZD5cdE9wZW4gVmltIGluc2lkZSBhbm90aGVyIEdUSyB3aWRnZXQiCittc2dzdHIgIi0tc29ja2V0aWQgPHhpZD5cdE90ZXb4ZSBWaW0gdXZuaXT4IGppbulobyBHVEsgd2lkZ2V0dSIKKworIzogbWFpbi5jOjIyODcKK21zZ2lkICItLXJlbW90ZSA8ZmlsZXM+XHRFZGl0IDxmaWxlcz4gaW4gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZSA8c291Ym9yeT5cdEVkaXR1amUgPHNvdWJvcnk+IG5hIFZpbSBzZXJ2ZXJ1IGEgc2tvbujtIgorCisjOiBtYWluLmM6MjI4OAorbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcz4gIEFzIC0tcmVtb3RlIGJ1dCB3YWl0IGZvciBmaWxlcyB0byBoYXZlIGJlZW4gZWRpdGVkIgorbXNnc3RyICIiCisiLS1yZW1vdGUtd2FpdCA8c291Ym9yeT4gSmFrbyAtLXJlbW90ZSwgYWxlIOhla+EgbmEgc291Ym9yeSBrIGVkaXRhY2kiCisKKyM6IG1haW4uYzoyMjg5Cittc2dpZCAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFNlbmQgPGtleXM+IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUtc2VuZCA8a2zhdmVzeT5cdFD4ZWThIDxrbOF2ZXN5PiBWaW0gc2VydmVydSBhIHNrb27o7SIKKworIzogbWFpbi5jOjIyOTAKK21zZ2lkICItLXJlbW90ZS1leHByIDxleHByPlx0RXZhbHVhdGUgPGV4cHI+IGluIGEgVmltIHNlcnZlciBhbmQgcHJpbnQgcmVzdWx0IgorbXNnc3RyICItLXJlbW90ZS1leHByIDx2/XJhej5cdFByb3ZlZGUgPHb9cmF6PiBuYSBzZXJ2ZXJ1IGEgem9icmF67SB2/XNsZWRlayIKKworIzogbWFpbi5jOjIyOTEKK21zZ2lkICItLXNlcnZlcmxpc3RcdFx0TGlzdCBhdmFpbGFibGUgVmltIHNlcnZlciBuYW1lcyBhbmQgZXhpdCIKK21zZ3N0ciAiLS1zZXJ2ZXJsaXN0XHRcdFZ5cO2aZSBzZXpuYW0gZG9zdHVwbv1jaCBWaW0gc2VydmVy+SBhIHNrb27o7SIKKworIzogbWFpbi5jOjIyOTIKK21zZ2lkICItLXNlcnZlcm5hbWUgPG5hbWU+XHRTZW5kIHRvL2JlY29tZSB0aGUgVmltIHNlcnZlciA8bmFtZT4iCittc2dzdHIgIiIKKyItLXNlcnZlcm5hbWUgPGpt6W5vPlx0WmGabGUgc2VydmVydSA8am3pbm8+L3N0YW5lIHNlIFZpbSBzZXJ2ZXJlbSA8am3pbm8+IgorCisjOiBtYWluLmM6MjI5NQorbXNnaWQgIi1pIDx2aW1pbmZvPlx0XHRVc2UgPHZpbWluZm8+IGluc3RlYWQgb2YgLnZpbWluZm8iCittc2dzdHIgIi1pIDx2aW1pbmZvPlx0XHRQb3WeaWplIDx2aW1pbmZvPiBt7XN0byBqYWvpaG9rb2xpdiAudmltaW5mbyIKKworIzogbWFpbi5jOjIyOTcKK21zZ2lkICItaFx0XHRcdHByaW50IEhlbHAgKHRoaXMgbWVzc2FnZSkgYW5kIGV4aXQiCittc2dzdHIgIi1oXHRcdFx0Vnlw7ZplIHR1dG8gbuFwb3bsZHUgYSBza29u6O0iCisKKyM6IG1haW4uYzoyMjk4Cittc2dpZCAiLS12ZXJzaW9uXHRcdHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQiCittc2dzdHIgIi0tdmVyc2lvblx0XHR2eXDtmmUgaW5mb3JtYWNlIG8gdmVyemkgYSBza29u6O0iCisKKyM6IG1haW4uYzoyMzAyCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKE1vdGlmIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiUPhlcO1uYehlIHBybyBndmltIChNb3RpZiB2ZXJ6aSk6XG4iCisKKyM6IG1haW4uYzoyMzA1Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEF0aGVuYSB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlD4ZXDtbmHoZSBwcm8gZ3ZpbSAoQXRoZW5hIHZlcnppKTpcbiIKKworIzogbWFpbi5jOjIzMDgKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdFNwdXN07SB2aW0gbmEgPGRpc3BsYXk+IgorCisjOiBtYWluLmM6MjMwOQorbXNnaWQgIi1pY29uaWNcdFx0U3RhcnQgdmltIGljb25pZmllZCIKK21zZ3N0ciAiLWljb25pY1x0XHRTcHVzdO0gdmltIG1pbmltYWxpem92YW7pIgorCisjOiBtYWluLmM6MjMxMQorbXNnaWQgIi1uYW1lIDxuYW1lPlx0XHRVc2UgcmVzb3VyY2UgYXMgaWYgdmltIHdhcyA8bmFtZT4iCittc2dzdHIgIi1uYW1lIDxu4Xpldj5cdFx0UG91nmlqZSByZXNvdXJjZSBqYWtvIGJ5IHZpbSBt7GwgPG7hemV2PiIKKworIzogbWFpbi5jOjIzMTIKK21zZ2lkICJcdFx0XHQgIChVbmltcGxlbWVudGVkKVxuIgorbXNnc3RyICJcdFx0XHQgIChuZW7tIGltcGxlbWVudG924W5vKVxuIgorCisjOiBtYWluLmM6MjMxNAorbXNnaWQgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciB0aGUgYmFja2dyb3VuZCAoYWxzbzogLWJnKSIKK21zZ3N0ciAiLWJhY2tncm91bmQgPGJhcnZhPlx0TmFzdGF27SA8YmFydnU+IHBvemFk7SAodGFr6SAtYmcpIgorCisjOiBtYWluLmM6MjMxNQorbXNnaWQgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZnKSIKK21zZ3N0ciAiLWZvcmVncm91bmQgPGJhcnZhPlx0TmFzdGF27SA8YmFydnU+IHBvcPhlZO0gKHRha+kgLWZnKSIKKworIzogbWFpbi5jOjIzMTYgbWFpbi5jOjIzMzYKK21zZ2lkICItZm9udCA8Zm9udD5cdFx0VXNlIDxmb250PiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mbikiCittc2dzdHIgIi1mb250IDxw7XNtbz5cdFx0TmFzdGF27SA8cO1zbW8+IG5vcm3hbG7taG8gdGV4dHUgKHRha+kgLWZuKSIKKworIzogbWFpbi5jOjIzMTcKK21zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCittc2dzdHIgIi1ib2xkZm9udCA8cO1zbW8+XHROYXN0YXbtIDxw7XNtbz4gcHJvIHp2/XJhem7sbv0gdGV4dCIKKworIzogbWFpbi5jOjIzMTgKK21zZ2lkICItaXRhbGljZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGl0YWxpYyB0ZXh0IgorbXNnc3RyICItaXRhbGljZm9udCA8cO1zbW8+XHROYXN0YXbtIDxw7XNtbz4gcHJvIGt1cnrtdnUiCisKKyM6IG1haW4uYzoyMzE5IG1haW4uYzoyMzM3Cittc2dpZCAiLWdlb21ldHJ5IDxnZW9tPlx0VXNlIDxnZW9tPiBmb3IgaW5pdGlhbCBnZW9tZXRyeSAoYWxzbzogLWdlb20pIgorbXNnc3RyICItZ2VvbWV0cnkgPGdlb21ldHJpZT5cdE5hc3Rhdu0gPGdlb21ldHJpaT4gKHRha+kgLWdlb20pIgorCisjOiBtYWluLmM6MjMyMAorbXNnaWQgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHRVc2UgYSBib3JkZXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLWJ3KSIKK21zZ3N0ciAiLWJvcmRlcndpZHRoIDya7fhrYT5cdE5hc3Rhdu0gPJrt+Gt1PiBva3JhavkgKHRha+kgLWJ3KSIKKworIzogbWFpbi5jOjIzMjEKK21zZ2lkICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgVXNlIGEgc2Nyb2xsYmFyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1zdykiCittc2dzdHIgIi1zY3JvbGxiYXJ3aWR0aCA8mu34a3U+IE5hc3Rhdu0gPJrt+Gt1PiBwb3N1bm92YWPtIGxpmnR5ICh0YWvpOiAtc3cpIgorCisjOiBtYWluLmM6MjMyMworbXNnaWQgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHRVc2UgYSBtZW51IGJhciBoZWlnaHQgb2YgPGhlaWdodD4gKGFsc286IC1taCkiCittc2dzdHIgIi1tZW51aGVpZ2h0IDx2/ZprYT5cdE5hc3Rhdu0gPHb9mmt1PiBuYWLtZGt5ICh0YWvpIC1taCkiCisKKyM6IG1haW4uYzoyMzI1IG1haW4uYzoyMzM4Cittc2dpZCAiLXJldmVyc2VcdFx0VXNlIHJldmVyc2UgdmlkZW8gKGFsc286IC1ydikiCittc2dzdHIgIi1yZXZlcnNlXHRcdFBvdZ5pamUgcmV2ZXJ6bu0gYmFydnkgKHRha+kgLXJ2KSIKKworIzogbWFpbi5jOjIzMjYKK21zZ2lkICIrcmV2ZXJzZVx0XHREb24ndCB1c2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogK3J2KSIKK21zZ3N0ciAiK3JldmVyc2VcdFx0TmVwb3WeaWplIHJldmVyem7tIGJhcnZ5ICh0YWvpICtydikiCisKKyM6IG1haW4uYzoyMzI3Cittc2dpZCAiLXhybSA8cmVzb3VyY2U+XHRTZXQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSIKK21zZ3N0ciAiLXhybSA8cmVzb3VyY2U+XHROYXN0YXbtIHphZGFu/SA8cmVzb3VyY2U+IgorCisjOiBtYWluLmM6MjMzMAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChSSVNDIE9TIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiUPhlcO1uYehlIHBybyBndmltIChSSVNDIE9TIHZlcnppKTpcbiIKKworIzogbWFpbi5jOjIzMzEKK21zZ2lkICItLWNvbHVtbnMgPG51bWJlcj5cdEluaXRpYWwgd2lkdGggb2Ygd2luZG93IGluIGNvbHVtbnMiCittc2dzdHIgIi0tY29sdW1ucyA8cG/oZXQ+XHQ8cG/oZXQ+IHNsb3VwY/kgbmEgb2tubyIKKworIzogbWFpbi5jOjIzMzIKK21zZ2lkICItLXJvd3MgPG51bWJlcj5cdEluaXRpYWwgaGVpZ2h0IG9mIHdpbmRvdyBpbiByb3dzIgorbXNnc3RyICItLXJvd3MgPHBv6GV0Plx0PHBv6GV0PiD44WRr+SBuYSBva25vIgorCisjOiBtYWluLmM6MjMzNQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiUPhlcO1uYehlIHBybyBndmltIChHVEsrIHZlcnppKTpcbiIKKworIzogbWFpbi5jOjIzMzkKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IChhbHNvOiAtLWRpc3BsYXkpIgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdFNwdXN07SB2aW0gbmEgPGRpc3BsYXk+ICh0YWvpIC0tZGlzcGxheSkiCisKKyM6IG1haW4uYzoyMzQxCittc2dpZCAiLS1oZWxwXHRcdFNob3cgR25vbWUgYXJndW1lbnRzIgorbXNnc3RyICItLWhlbHBcdFx0Vnlw7ZplIEdub21lIHD4ZXDtbmHoZSIKKworIy4gRmFpbGVkIHRvIHNlbmQsIGFib3J0LgorIzogbWFpbi5jOjI1NjYKK21zZ2lkICIiCisiXG4iCisiU2VuZCBmYWlsZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQ+GVk4W7tIHb9cmF6dSBzZWxoYWxvLlxuIgorCisjLiBMZXQgdmltIHN0YXJ0IG5vcm1hbGx5LgorIzogbWFpbi5jOjI1NzEKK21zZ2lkICIiCisiXG4iCisiU2VuZCBmYWlsZWQuIFRyeWluZyB0byBleGVjdXRlIGxvY2FsbHlcbiIKK21zZ3N0ciAiIgorIlxuIgorIlD4ZWThbu0gc2VsaGFsby4gWmtvdZrtbSBwcm926XN0IGxva+FsbuxcbiIKKworIzogbWFpbi5jOjI2MDQgbWFpbi5jOjI2MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgb2YgJWQgZWRpdGVkIgorbXNnc3RyICIlZCB6ICVkIGVkaXRvduFubyIKKworIzogbWFpbi5jOjI2NDgKK21zZ2lkICJTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICJQ+GVk4W7tIHb9cmF6dSBzZWxoYWxvLlxuIgorCisjOiBtYXJrLmM6NjYwCittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICJOZWpzb3UgbmFzdGF2ZW55IJ7hZG7pIHpuYehreSIKKworIzogbWFyay5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgzOiBObyBtYXJrcyBtYXRjaGluZyBcIiVzXCIiCittc2dzdHIgIkUyODM6IFwiJXNcIiBuZXZ5aG92dWrtIJ7hZG7pIHpuYehreSIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NjczCittc2dpZCAiIgorIlxuIgorIm1hcmsgbGluZSAgY29sIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorInpuYehrYSD44WRlayAgc2xvdXBlYyBzb3Vib3IvdGV4dCIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzExCittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgc2tvayD44WRlayBzbG91cGVjIHNvdWJvci90ZXh0IgorCisjOiBtYXJrLmM6MTA3MworbXNnaWQgIiIKKyJcbiIKKyIjIEZpbGUgbWFya3M6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIFNvdWJvcm926SB6bmHoa3k6XG4iCisKKyMuIFdyaXRlIHRoZSBqdW1wbGlzdCB3aXRoIC0nCisjOiBtYXJrLmM6MTEwOAorbXNnaWQgIiIKKyJcbiIKKyIjIEp1bXBsaXN0IChuZXdlc3QgZmlyc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBTZXpuYW0gc2tva/kgKHBv6O1uYWplIG5lam5vduxqmu0gcG9sb55rb3UpOlxuIgorCisjOiBtYXJrLmM6MTIwMworbXNnaWQgIiIKKyJcbiIKKyIjIEhpc3Rvcnkgb2YgbWFya3Mgd2l0aGluIGZpbGVzIChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgSGlzdG9yaWUgem5h6GVrIHYgc291Ym9yZWNoIChwb+jtbmFqZSBuZWpub3bsaprtIHBvbG+ea291KTpcbiIKKworIzogbWFyay5jOjEyODYKK21zZ2lkICJNaXNzaW5nICc+JyIKK21zZ3N0ciAiQ2h5Yu0gJz4nIgorCisjOiBtYnl0ZS5jOjM5NQorbXNnaWQgIk5vdCBhIHZhbGlkIGNvZGVwYWdlIgorbXNnc3RyICJDaHlibuEga/Nkb3bhIHN0cuFua2EiCisKKyM6IG1ieXRlLmM6MzAxNAorbXNnaWQgIkUyODQ6IENhbm5vdCBzZXQgSUMgdmFsdWVzIgorbXNnc3RyICJFMjg0OiBOZWx6ZSBuYXN0YXZpdCBJQyBob2Rub3R5IgorCisjOiBtYnl0ZS5jOjMxNjYKK21zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCittc2dzdHIgIkUyODU6IE5lcG9kYfhpbG8gc2Ugdnl0dm/4aXQgdnN0dXBu7SBrb250ZXh0IgorCisjOiBtYnl0ZS5jOjMzMTMKK21zZ2lkICJFMjg2OiBGYWlsZWQgdG8gb3BlbiBpbnB1dCBtZXRob2QiCittc2dzdHIgIkUyODY6IE5lcG9kYfhpbG8gc2Ugb3RldvjtdCB2c3R1cG7tIG1ldG9kdSIKKworIzogbWJ5dGUuYzozMzI0Cittc2dpZCAiRTI4NzogV2FybmluZzogQ291bGQgbm90IHNldCBkZXN0cm95IGNhbGxiYWNrIHRvIElNIgorbXNnc3RyICJFMjg3OiBWYXJvduFu7TogbGlrdmlkYehu7SB6cOx0bukgdm9s4W7tIG5lbHplIG5hc3Rhdml0IG5hIElNIgorCisjOiBtYnl0ZS5jOjMzMzAKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODogdnN0dXBu7SBtZXRvZGEgbmVwb2Rwb3J1amUgnuFkbv0gc3R5bCIKKworIzogbWJ5dGUuYzozMzg3Cittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IHZzdHVwbu0gbWV0b2RhIG5lcG9kcG9ydWplIG35aiAncHJlZWRpdCcgdHlwIgorCisjOiBtYnl0ZS5jOjM0NjEKK21zZ2lkICJFMjkwOiBvdmVyLXRoZS1zcG90IHN0eWxlIHJlcXVpcmVzIGZvbnRzZXQiCittc2dzdHIgIkUyOTA6IE5hZGJvZG92/SBzdHlsIHZ5nmFkdWplIGZvbnRzZXQiCisKKyM6IG1ieXRlLmM6MzQ4OQorbXNnaWQgIkUyOTE6IFlvdXIgR1RLKyBpcyBvbGRlciB0aGFuIDEuMi4zLiBTdGF0dXMgYXJlYSBkaXNhYmxlZCIKK21zZ3N0ciAiRTI5MTogTeF0ZSBHVEsrIHZlcnplIHN0YXKa7SBuZZ4gMS4yLjMuIFN0YXZvduEgcGxvY2hhIHZ5cG51dGEuIgorCisjOiBtYnl0ZS5jOjM3MjYKK21zZ2lkICJFMjkyOiBJbnB1dCBNZXRob2QgU2VydmVyIGlzIG5vdCBydW5uaW5nIgorbXNnc3RyICJFMjkyOiBTZXJ2ZXIgdnN0dXBu7WNoIG1ldG9kIG5lYuye7SIKKworIzogbWVtZmlsZS5jOjQ3MworbXNnaWQgIkUyOTM6IGJsb2NrIHdhcyBub3QgbG9ja2VkIgorbXNnc3RyICJFMjkzOiBibG9rIG5lYnlsIHphbWtudXQiCisKKyM6IG1lbWZpbGUuYzo5NzIKK21zZ2lkICJFMjk0OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSByZWFkIgorbXNnc3RyICJFMjk0OiBDaHliYSBwb3N1bnUgdWthem924XRrYSBw+Gkg6HRlbu0gb2RrbOFkYWPtaG8gc291Ym9ydSIKKworIzogbWVtZmlsZS5jOjk3NworbXNnaWQgIkUyOTU6IFJlYWQgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk1OiBDaHliYSBw+Gkg6HRlbu0gb2RrbOFkYWPtaG8gc291Ym9ydSIKKworIzogbWVtZmlsZS5jOjEwMjkKK21zZ2lkICJFMjk2OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIKK21zZ3N0ciAiRTI5NjogQ2h5YmEgcG9zdW51IHVrYXpvduF0a2EgcPhpIHVrbOFk4W7tIGRvIG9ka2zhZGFj7WhvIHNvdWJvcnUiCisKKyM6IG1lbWZpbGUuYzoxMDQ3Cittc2dpZCAiRTI5NzogV3JpdGUgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk3OiBDaHliYSBw+GkgdWts4WThbu0gZG8gb2RrbOFkYWPtaG8gc291Ym9ydSIKKworIzogbWVtZmlsZS5jOjEyNDQKK21zZ2lkICJFMzAwOiBTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMgKHN5bWxpbmsgYXR0YWNrPykiCittc2dzdHIgIiIKKyJFMzAwOiBPZGts4WRhY+0gc291Ym9yIGppniBleGlzdHVqZSEgKE7sa2RvIGhhY2t1amVw+GVzIG5hc3RyYZ5lbv0gc3ltbGluaz8pIgorCisjOiBtZW1saW5lLmM6Mjc1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIKK21zZ3N0ciAiRTI5ODogTmVsemUgeu1za2F0IGJsb2sgMD8iCisKKyM6IG1lbWxpbmUuYzozMTUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDE/IgorbXNnc3RyICJFMjk4OiBOZWx6ZSB67XNrYXQgYmxvayAxPyIKKworIzogbWVtbGluZS5jOjMzMworbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMj8iCittc2dzdHIgIkUyOTg6IG5lbHplIHrtc2thdCBibG9rIDI/IgorCisjLiBjb3VsZCBub3QgKHJlKW9wZW4gdGhlIHN3YXAgZmlsZSwgd2hhdCBjYW4gd2UgZG8/Pz8/CisjOiBtZW1saW5lLmM6NDQzCittc2dpZCAiRTMwMTogT29wcywgbG9zdCB0aGUgc3dhcCBmaWxlISEhIgorbXNnc3RyICJFMzAxOiBK6WplLCBvZGts4WRhY+0gc291Ym9yIGJ5bCB6dHJhY2VuISEhIgorCisjOiBtZW1saW5lLmM6NDQ4Cittc2dpZCAiRTMwMjogQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDI6IE5lbHplIHD4ZWptZW5vdmF0IG9ka2zhZGFj7SBzb3Vib3IiCisKKyM6IG1lbWxpbmUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwMzogVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciBcIiVzXCIsIHJlY292ZXJ5IGltcG9zc2libGUiCittc2dzdHIgIkUzMDM6IE5lbHplIG90ZXb47XQgb2RrbOFkYWPtIHNvdWJvciBwcm8gXCIlc1wiIgorCisjOiBtZW1saW5lLmM6NjE3Cittc2dpZCAiRTMwNDogbWxfdGltZXN0YW1wOiBEaWRuJ3QgZ2V0IGJsb2NrIDA/PyIKK21zZ3N0ciAiRTMwNDogbWxfdGltZXN0YW1wOiBuZWx6ZSB67XNrYXQgYmxvayAwPz8iCisKKyM6IG1lbWxpbmUuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNTogTm8gc3dhcCBmaWxlIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiRTMwNTogT2RrbOFkYWPtIHNvdWJvciBwcm8gJXMgbmVieWwgbmFsZXplbiIKKworIzogbWVtbGluZS5jOjc2NworbXNnaWQgIkVudGVyIG51bWJlciBvZiBzd2FwIGZpbGUgdG8gdXNlICgwIHRvIHF1aXQpOiAiCittc2dzdHIgIiIKKyJaYWRlanRlIOjtc2xvIG9ka2zhZGFj7WhvIHNvdWJvcnUsIGt0ZXL9IHNlIG3hIHBvdZ7tdCAoMCBwcm8gdWtvbuhlbu0pOiAiCisKKyM6IG1lbWxpbmUuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNjogQ2Fubm90IG9wZW4gJXMiCittc2dzdHIgIkUzMDY6IE5lbHplIG90ZXb47XQgJXMiCisKKyM6IG1lbWxpbmUuYzo4MzQKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBibG9jayAwIGZyb20gIgorbXNnc3RyICJOZWx6ZSDo7XN0IGJsb2sgMCB6ICIKKworIzogbWVtbGluZS5jOjgzNworbXNnaWQgIiIKKyJcbiIKKyJNYXliZSBubyBjaGFuZ2VzIHdlcmUgbWFkZSBvciBWaW0gZGlkIG5vdCB1cGRhdGUgdGhlIHN3YXAgZmlsZS4iCittc2dzdHIgIiIKKyJcbiIKKyJNb55u4SBuZWRvmmxvIGsgnuFkbv1tIHpt7G7hbSwgbmVibyBWaW0gbmVha3R1YWxpem92YWwgb2RrbOFkYWPtIHNvdWJvci4iCisKKyM6IG1lbWxpbmUuYzo4NDcgbWVtbGluZS5jOjg2NAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW0uXG4iCittc2dzdHIgIiBuZWx6ZSBwb3We7XQgcyB0b3V0byB2ZXJ67SBWaW0uXG4iCisKKyM6IG1lbWxpbmUuYzo4NDkKK21zZ2lkICJVc2UgVmltIHZlcnNpb24gMy4wLlxuIgorbXNnc3RyICJQb3WeaWp0ZSBWaW0gdmVyemUgMy4wLlxuIgorCisjOiBtZW1saW5lLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDc6ICVzIHNlIG5lemThIGL9dCBvZGts4WRhY+1tIHNvdWJvcmVtIFZpbSIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIgbmVsemUgcG91nu10IG5hIHRvbXRvIHBv6O10YehpLlxuIgorCisjOiBtZW1saW5lLmM6ODcwCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICJTb3Vib3IgYnlsIHZ5dHZv+GVuICIKKworIzogbWVtbGluZS5jOjg3NAorbXNnaWQgIiIKKyIsXG4iCisib3IgdGhlIGZpbGUgaGFzIGJlZW4gZGFtYWdlZC4iCittc2dzdHIgIiIKKyIsXG4iCisibmVibyBieWwgc291Ym9yIHBvmmtvemVuLiIKKworIzogbWVtbGluZS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIgorbXNnc3RyICJQb3We7XbhbSBvZGts4WRhY+0gc291Ym9yIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJPcmlnaW5hbCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiUPl2b2Ru7SBzb3Vib3IgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTM0Cittc2dpZCAiRTMwODogV2FybmluZzogT3JpZ2luYWwgZmlsZSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQiCittc2dzdHIgIkUzMDg6IFZhcm924W7tOiBQ+XZvZG7tIHNvdWJvciBtb2hsIGL9dCB6bexu7G4iCisKKyM6IG1lbWxpbmUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwOTogVW5hYmxlIHRvIHJlYWQgYmxvY2sgMSBmcm9tICVzIgorbXNnc3RyICJFMzA5OiBOZWx6ZSDo7XN0IGJsb2sgMSB6ICVzIgorCisjOiBtZW1saW5lLmM6OTc5Cittc2dpZCAiPz8/TUFOWSBMSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz9DSFlCzSBNTk9ITyDYwURL2SIKKworIzogbWVtbGluZS5jOjk5NQorbXNnaWQgIj8/P0xJTkUgQ09VTlQgV1JPTkciCittc2dzdHIgIj8/P0NIWUJO3SBQT8hFVCDYwURL2SIKKworIzogbWVtbGluZS5jOjEwMDIKK21zZ2lkICI/Pz9FTVBUWSBCTE9DSyIKK21zZ3N0ciAiPz8/UFLBWkRO3SBCTE9LIgorCisjOiBtZW1saW5lLmM6MTAyOAorbXNnaWQgIj8/P0xJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P0NIWULMSs1DzSDYwURLWSIKKworIzogbWVtbGluZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxMDogQmxvY2sgMSBJRCB3cm9uZyAoJXMgbm90IGEgLnN3cCBmaWxlPykiCittc2dzdHIgIkUzMTA6IElEIGJsb2t1IDEgamUgY2h5Ym7pIChqZSAlcyBvZGts4WRhY+1tIHNvdWJvcmVtPykiCisKKyM6IG1lbWxpbmUuYzoxMDY1Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/Q0hZQs0gQkxPSyIKKworIzogbWVtbGluZS5jOjEwODEKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgYmUgbWVzc2VkIHVwIgorbXNnc3RyICJvZCA/Pz8gcG8gPz8/RU5EIG1vaG91IGL9dCD44WRreSBwb23tY2hhbukiCisKKyM6IG1lbWxpbmUuYzoxMDk3Cittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGhhdmUgYmVlbiBpbnNlcnRlZC9kZWxldGVkIgorbXNnc3RyICJvZCA/Pz8gcG8gPz8/RU5EIG1vaG91IGL9dCB2bG+eZW7pL3NtYXphbukg+OFka3kiCisKKyM6IG1lbWxpbmUuYzoxMTE3Cittc2dpZCAiPz8/RU5EIgorbXNnc3RyICI/Pz9LT05FQyIKKworIzogbWVtbGluZS5jOjExNDMKK21zZ2lkICJFMzExOiBSZWNvdmVyeSBJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiRTMxMTogT2Jub3ZhIHD4ZXJ1mmVuYSIKKworIzogbWVtbGluZS5jOjExNDUKK21zZ2lkICIiCisiRTMxMjogRXJyb3JzIGRldGVjdGVkIHdoaWxlIHJlY292ZXJpbmc7IGxvb2sgZm9yIGxpbmVzIHN0YXJ0aW5nIHdpdGggPz8/IgorbXNnc3RyICIiCisiRTMxMjogViBwcvli7Gh1IG9ibm92eSBkb5psbyBrIGNoeWLhbTsgemtvbnRyb2x1anRlIPjhZGt5IHph6O1uYWrtY+0gbmEgPz8/IgorCisjOiBtZW1saW5lLmM6MTE0OAorbXNnaWQgIlJlY292ZXJ5IGNvbXBsZXRlZC4gWW91IHNob3VsZCBjaGVjayBpZiBldmVyeXRoaW5nIGlzIE9LLiIKK21zZ3N0ciAiT2Jub3ZhIGRva29u6GVuYS4gWmtvbnRyb2x1anRlLCB6ZGEgamUgdpplIHYgcG/44WRrdS4iCisKKyM6IG1lbWxpbmUuYzoxMTQ5Cittc2dpZCAiIgorIlxuIgorIihZb3UgbWlnaHQgd2FudCB0byB3cml0ZSBvdXQgdGhpcyBmaWxlIHVuZGVyIGFub3RoZXIgbmFtZVxuIgorbXNnc3RyICIiCisiXG4iCisiKFp2YZ50ZSB1bG+eZW7tIHRvaG90byBzb3Vib3J1IHBvZCBqaW79bSBu4Xp2ZW1cbiIKKworIzogbWVtbGluZS5jOjExNTAKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAiYSBrb250cm9sdSB6bexuIHBvbW9j7SBwcm9ncmFtdSBkaWZmLilcbiIKKworIzogbWVtbGluZS5jOjExNTEKK21zZ2lkICIiCisiRGVsZXRlIHRoZSAuc3dwIGZpbGUgYWZ0ZXJ3YXJkcy5cbiIKKyJcbiIKK21zZ3N0ciAiUG906SBzbWGedGUgb2RrbOFkYWPtIHNvdWJvci5cbiIKKworIy4gdXNlIG1zZygpIHRvIHN0YXJ0IHRoZSBzY3JvbGxpbmcgcHJvcGVybHkKKyM6IG1lbWxpbmUuYzoxMjA3Cittc2dpZCAiU3dhcCBmaWxlcyBmb3VuZDoiCittc2dzdHIgIk5hbGV6ZW7pIG9ka2zhZGFj7SBzb3Vib3J5OiIKKworIzogbWVtbGluZS5jOjEzODUKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAgViBha3R14Wxu7W0gYWRyZXPh+Gk6XG4iCisKKyM6IG1lbWxpbmUuYzoxMzg3Cittc2dpZCAiICAgVXNpbmcgc3BlY2lmaWVkIG5hbWU6XG4iCittc2dzdHIgIiAgIFNlIHphZGFu/W0gbuF6dmVtOlxuIgorCisjOiBtZW1saW5lLmM6MTM5MQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIFYgYWRyZXPh+GkgIgorCisjOiBtZW1saW5lLmM6MTQwOQorbXNnaWQgIiAgICAgIC0tIG5vbmUgLS1cbiIKK21zZ3N0ciAiICAgICAgLS0gnuFkbukgLS1cbiIKKworIzogbWVtbGluZS5jOjE0ODEKK21zZ2lkICIgICAgICAgICAgb3duZWQgYnk6ICIKK21zZ3N0ciAiICAgICAgICAgIHZsYXN0bu1rOiAiCisKKyM6IG1lbWxpbmUuYzoxNDgzCittc2dpZCAiICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgZGF0dW0gdnl0dm/4ZW7tOiAiCisKKyM6IG1lbWxpbmUuYzoxNDg3IG1lbWxpbmUuYzozNjgwCittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICBkYXR1bSB2eXR2b/hlbu06ICIKKworIzogbWVtbGluZS5jOjE1MDMKK21zZ2lkICIgICAgICAgICBbZnJvbSBWaW0gdmVyc2lvbiAzLjBdIgorbXNnc3RyICIgICAgICAgICBbb2QgVmltIHZlcnplIDMuMF0iCisKKyM6IG1lbWxpbmUuYzoxNTA3Cittc2dpZCAiICAgICAgICAgW2RvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGVdIgorbXNnc3RyICIgICAgICAgICBbbmV2eXBhZOEgamFrbyBvZGts4WRhY+0gc291Ym9yIFZpbV0iCisKKyM6IG1lbWxpbmUuYzoxNTExCittc2dpZCAiICAgICAgICAgZmlsZSBuYW1lOiAiCittc2dzdHIgIiAgICAgICAgIG7hemV2IHNvdWJvcnU6ICIKKworIzogbWVtbGluZS5jOjE1MjMKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgIG1vZGlmaWVkOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgZGF0dW0gem3sbnk6ICIKKworIzogbWVtbGluZS5jOjE1MjQKK21zZ2lkICJZRVMiCittc2dzdHIgIkFOTyIKKworIzogbWVtbGluZS5jOjE1MjQKK21zZ2lkICJubyIKK21zZ3N0ciAibmUiCisKKyM6IG1lbWxpbmUuYzoxNTI4Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIHVzZXIgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgdZ5pdmF0ZWxza+kgam3pbm86ICIKKworIzogbWVtbGluZS5jOjE1MzUKK21zZ2lkICIgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiICAgbuF6ZXYgcG/o7XRh6GU6ICIKKworIzogbWVtbGluZS5jOjE1MzcKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBu4XpldiBwb+jtdGHoZTogIgorCisjOiBtZW1saW5lLmM6MTU0MworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgSUQgcHJvY2VzdSA6ICIKKworIzogbWVtbGluZS5jOjE1NDkKK21zZ2lkICIgKHN0aWxsIHJ1bm5pbmcpIgorbXNnc3RyICIgKHN04WxlIGFrdGl2bu0pIgorCisjOiBtZW1saW5lLmM6MTU2MQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW1dIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgW25lcG91nml0ZWxu6SBzIHRvdXRvIHZlcnrtIFZpbV0iCisKKyM6IG1lbWxpbmUuYzoxNTY0Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIG9uIHRoaXMgY29tcHV0ZXJdIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgW25lcG91nml0ZWxu6SBuYSB0b210byBwb+jtdGHoaV0iCisKKyM6IG1lbWxpbmUuYzoxNTY5Cittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSByZWFkXSIKK21zZ3N0ciAiICAgICAgICAgW25lbHplIHD4Zejtc3RdIgorCisjOiBtZW1saW5lLmM6MTU3MworbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgb3BlbmVkXSIKK21zZ3N0ciAiICAgICAgICAgW25lbHplIG90ZXb47XRdIgorCisjOiBtZW1saW5lLmM6MTc2MworbXNnaWQgIkUzMTM6IENhbm5vdCBwcmVzZXJ2ZSwgdGhlcmUgaXMgbm8gc3dhcCBmaWxlIgorbXNnc3RyICJFMzEzOiBOZWx6ZSB6YWNob3ZhdCAtIG9ka2zhZGFj7SBzb3Vib3IgbmVleGlzdHVqZS4iCisKKyM6IG1lbWxpbmUuYzoxODE2Cittc2dpZCAiRmlsZSBwcmVzZXJ2ZWQiCittc2dzdHIgIlNvdWJvciB6YWNob3bhbiIKKworIzogbWVtbGluZS5jOjE4MTgKK21zZ2lkICJFMzE0OiBQcmVzZXJ2ZSBmYWlsZWQiCittc2dzdHIgIkUzMTQ6IFVjaG924W7tIHNlIG5lemRh+GlsbyIKKworIzogbWVtbGluZS5jOjE4ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNTogbWxfZ2V0OiBpbnZhbGlkIGxudW06ICVsZCIKK21zZ3N0ciAiRTMxNTogbWxfZ2V0OiBjaHlibukg6O1zbG8g+OFka3U6ICVsZCIKKworIzogbWVtbGluZS5jOjE5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNjogbWxfZ2V0OiBjYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMxNjogbWxfZ2V0OiBuZWx6ZSBuYWzpenQg+OFkZWsgJWxkIgorCisjOiBtZW1saW5lLmM6MjMwMworbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAiRTMxNzogY2h5Ym7pIGlkIHVrYXphdGVsZSBuYSBibG9rIDMiCisKKyM6IG1lbWxpbmUuYzoyMzgzCittc2dpZCAic3RhY2tfaWR4IHNob3VsZCBiZSAwIgorbXNnc3RyICJzdGFja19pZHggYnkgbexsbyBt7XQgaG9kbm90dSAzIgorCisjOiBtZW1saW5lLmM6MjQ0NQorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODogQWt0dWFsaXpvduFubyBw+O1saZogbW5vaG8gYmxva/k/IgorCisjOiBtZW1saW5lLmM6MjYwMgorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgNCIKK21zZ3N0ciAiRTMxNzogY2h5Ym7pIGlkIHVrYXphdGVsZSBuYSBibG9rIDQiCisKKyM6IG1lbWxpbmUuYzoyNjI5Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAic21heuFuIGJsb2sgMT8iCisKKyM6IG1lbWxpbmUuYzoyODI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjA6IENhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzIwOiBOZWx6ZSBuYWzpenQg+OFkZWsgJWxkIgorCisjOiBtZW1saW5lLmM6MzA3MgorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmciCittc2dzdHIgIkUzMTc6IGNoeWJu6SBpZCB1a2F6YXRlbGUgbmEgYmxvayIKKworIzogbWVtbGluZS5jOjMwODgKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgInBlX2xpbmVfY291bnQgbeEgbnVsb3ZvdSBob2Rub3R1IgorCisjOiBtZW1saW5lLmM6MzExNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzIyOiBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVsZCBwYXN0IHRoZSBlbmQiCittc2dzdHIgIkUzMjI6IHBv6GV0IPjhZGv5IG1pbW8gcm96c2FoOiAlbGQgPiBjZWxrb3b9IHBv6GV0IPjhZGv5IgorCisjOiBtZW1saW5lLmM6MzEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIzOiBsaW5lIGNvdW50IHdyb25nIGluIGJsb2NrICVsZCIKK21zZ3N0ciAiRTMyMzogY2h5Ym79IHBv6GV0IPjhZGv5IHYgYmxva3UgJWxkIgorCisjOiBtZW1saW5lLmM6MzE3MAorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICJO4XL5c3QgdmVsaWtvc3RpIHrhc29ibu1rdSIKKworIzogbWVtbGluZS5jOjMyMTYKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDIiCittc2dzdHIgIkUzMTc6IGNoeWJu6SBpZCB1a2F6YXRlbGUgbmEgYmxvayAyIgorCisjOiBtZW1saW5lLmM6MzY3MAorbXNnaWQgIkUzMjU6IEFUVEVOVElPTiIKK21zZ3N0ciAiRTMyNTogUE9aT1IiCisKKyM6IG1lbWxpbmUuYzozNjcxCittc2dpZCAiIgorIlxuIgorIkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIgorbXNnc3RyICIiCisiXG4iCisiTmFsZXplbiBvZGts4WRhY+0gc291Ym9yIHNlIGpt6W5lbSBcIiIKKworIzogbWVtbGluZS5jOjM2NzUKK21zZ2lkICJXaGlsZSBvcGVuaW5nIGZpbGUgXCIiCittc2dzdHIgIlD4aSBvdGV27XLhbu0gc291Ym9ydVwiIgorCisjOiBtZW1saW5lLmM6MzY4NAorbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICAgICBOT1bMSorNIG5lniBvZGts4WRhY+0gc291Ym9yIVxuIgorCisjLiBTb21lIG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSBsb25nIHRvIGFsbG93IHRyYW5zbGF0aW9uIHRvCisjLiAqIG90aGVyIGxhbmd1YWdlcy4KKyM6IG1lbWxpbmUuYzozNjg4Cittc2dpZCAiIgorIlxuIgorIigxKSBBbm90aGVyIHByb2dyYW0gbWF5IGJlIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS5cbiIKKyIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgYmUgY2FyZWZ1bCBub3QgdG8gZW5kIHVwIHdpdGggdHdvXG4iCisiICAgIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZmlsZSB3aGVuIG1ha2luZyBjaGFuZ2VzLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDEpIFNvdWJvciBt+Z5lIGL9dCBlZGl0b3bhbiBqaW79bSBwcm9ncmFtZW0uXG4iCisiICAgIEplLWxpIHRvbXUgdGFrLCBwYWsgc2kgZGVqdGUgcG96b3IsIGFieSBqc3RlIHBvIHVsb55lbu0gem3sblxuIgorIiAgICBuZW3sbGkgZHbsIHL5em7pIHZlcnplIHTpaG+eIHNvdWJvcnUuXG4iCisKKyM6IG1lbWxpbmUuYzozNjg5Cittc2dpZCAiICAgIFF1aXQsIG9yIGNvbnRpbnVlIHdpdGggY2F1dGlvbi5cbiIKK21zZ3N0ciAiICAgIFVrb27oZXRlIHByb2dyYW0sIG5lYm8gb3BhdHJu7CBwb2tyYeh1anRlIHYgZWRpdGFjaS5cbiIKKworIzogbWVtbGluZS5jOjM2OTAKK21zZ2lkICIiCisiXG4iCisiKDIpIEFuIGVkaXQgc2Vzc2lvbiBmb3IgdGhpcyBmaWxlIGNyYXNoZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMikgRWRpdGFjZSB0b2hvdG8gc291Ym9ydSBieWxhIHD4ZXJ1mmVuYSBuZehla2Fu/W0gdWtvbuhlbu1tIHByb2dyYW11LlxuIgorCisjOiBtZW1saW5lLmM6MzY5MQorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIEplLWxpIHRvbXUgdGFrLCBwYWsgcG91nmlqdGUgXCI6cmVjb3ZlclwiIOhpIFwidmltIC1yICIKKworIzogbWVtbGluZS5jOjM2OTMKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gcmVjb3ZlciB0aGUgY2hhbmdlcyAoc2VlIFwiOmhlbHAgcmVjb3ZlcnlcIikuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICBwcm8gb2RzdHJhbuxu7SB6bexuICh2aXogXCI6aGVscCByZWNvdmVyeSlcIi5cbiIKKworIzogbWVtbGluZS5jOjM2OTQKK21zZ2lkICIgICAgSWYgeW91IGRpZCB0aGlzIGFscmVhZHksIGRlbGV0ZSB0aGUgc3dhcCBmaWxlIFwiIgorbXNnc3RyICIgICAgUG9rdWQganN0ZSB0YWsgammeIHXoaW5pbCwgdGFrIHNtYZ50ZSBvZGts4WRhY+0gc291Ym9yIFwiIgorCisjOiBtZW1saW5lLmM6MzY5NgorbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byBhdm9pZCB0aGlzIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICBhIHRhdG8genBy4XZhIHNlIGppniBuZWJ1ZGUgb2JqZXZvdmF0LlxuIgorCisjOiBtZW1saW5lLmM6MzcxMCBtZW1saW5lLmM6MzcxNAorbXNnaWQgIlN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiT2RrbOFkYWPtIHNvdWJvciBcIiIKKworIzogbWVtbGluZS5jOjM3MTEgbWVtbGluZS5jOjM3MTcKK21zZ2lkICJcIiBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlwiIGppniBleGlzdHVqZSEiCisKKyM6IG1lbWxpbmUuYzozNzIwCittc2dpZCAiVklNIC0gQVRURU5USU9OIgorbXNnc3RyICJWSU0gLSBQT1pPUiIKKworIzogbWVtbGluZS5jOjM3MjIKK21zZ2lkICJTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICJPZGts4WRhY+0gc291Ym9yIGppniBleGlzdHVqZSEiCisKKyM6IG1lbWxpbmUuYzozNzI2Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXQiCittc2dzdHIgIiIKKyImT3RldvjtdCBwb3V6ZSBwcm8g6HRlbu1cbiIKKyImUG9rcmHob3ZhdCB2IGVkaXRhY2lcbiIKKyJPJmJub3ZpdCBzb3Vib3JcbiIKKyImS29uZWMiCisKKyM6IG1lbWxpbmUuYzozNzI4Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisiJk90ZXb47XQgcG91emUgcHJvIOh0ZW7tXG4iCisiJlBva3Jh6G92YXQgdiBlZGl0YWNpXG4iCisiTyZibm92aXQgc291Ym9yXG4iCisiJktvbmVjXG4iCisiJlNtYXphdCIKKworIzogbWVtbGluZS5jOjM3ODEKK21zZ2lkICJFMzI2OiBUb28gbWFueSBzd2FwIGZpbGVzIGZvdW5kIgorbXNnc3RyICJFMzI2OiBQ+O1saZogbW5vaG8gb2RrbOFkYWPtY2ggc291Ym9y+SIKKworIzogbWVudS5jOjY0Cittc2dpZCAiRTMyNzogUGFydCBvZiBtZW51LWl0ZW0gcGF0aCBpcyBub3Qgc3ViLW1lbnUiCittc2dzdHIgIkUzMjc6IMjhc3RpIGNlc3R5IGsgcPhlZG3sdHUgbmFi7WRreSBuZW7tIHBvZG5hYu1ka291IgorCisjOiBtZW51LmM6NjUKK21zZ2lkICJFMzI4OiBNZW51IG9ubHkgZXhpc3RzIGluIGFub3RoZXIgbW9kZSIKK21zZ3N0ciAiRTMyODogTmFi7WRrYSBleGlzdHVqZSBwb3V6ZSB2IGppbultIG3zZHUiCisKKyM6IG1lbnUuYzo2NgorbXNnaWQgIkUzMjk6IE5vIG1lbnUgb2YgdGhhdCBuYW1lIgorbXNnc3RyICJFMzI5OiBOYWLtZGthIHRvaG90byBqbeluYSBuZWV4aXN0dWplIgorCisjOiBtZW51LmM6NTAzCittc2dpZCAiRTMzMDogTWVudSBwYXRoIG11c3Qgbm90IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzMDogQ2VzdGEgbmFi7WRrb3UgbmVzbe0gdulzdCBkbyBwb2RuYWLtZGt5IgorCisjOiBtZW51LmM6NTQyCittc2dpZCAiRTMzMTogTXVzdCBub3QgYWRkIG1lbnUgaXRlbXMgZGlyZWN0bHkgdG8gbWVudSBiYXIiCittc2dzdHIgIkUzMzE6IFBvbG+ea3kgbmFi7WRreSBuZWx6ZSBw+Glk4XZhdCBw+O1tbyBuYSBsaZp0dSIKKworIzogbWVudS5jOjU0OAorbXNnaWQgIkUzMzI6IFNlcGFyYXRvciBjYW5ub3QgYmUgcGFydCBvZiBhIG1lbnUgcGF0aCIKK21zZ3N0ciAiRTMzMjogT2Rk7GxvdmHoIG5lc23tIGL9dCDo4XN07SBjZXN0eSBuYWLtZGtvdSIKKworIy4gTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtZW51LmM6MTA2MworbXNnaWQgIiIKKyJcbiIKKyItLS0gTWVudXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE5hYu1ka3kgLS0tIgorCisjOiBtZW51LmM6MTk4OQorbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAiT2R0cmhub3V0IHR1dG8gbmFi7WRrdSIKKworIzogbWVudS5jOjIwNTQKK21zZ2lkICJFMzMzOiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgbWVudSBpdGVtIgorbXNnc3RyICJFMzMzOiBDZXN0YSBuYWLtZGtvdSBtdXPtIHbpc3QgayBwb2xvnmNlIG5hYu1ka3kiCisKKyM6IG1lbnUuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzQ6IE1lbnUgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTMzNDogVnpvciBuZW5hbGV6ZW46ICVzIgorCisjOiBtZW51LmM6MjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzM1OiBNZW51IG5vdCBkZWZpbmVkIGZvciAlcyBtb2RlIgorbXNnc3RyICJFMzM1OiBWICVzIG3zZHUgbmVu7SBuYWLtZGthIGRlZmlub3bhbmEiCisKKyM6IG1lbnUuYzoyMTgxCittc2dpZCAiRTMzNjogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzM2OiBDZXN0YSBuYWLtZGtvdSBtdXPtIHbpc3QgZG8gcG9kbmFi7WRreSIKKworIzogbWVudS5jOjIyMDIKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IE5hYu1ka2EgbmVuYWxlemVuYSAtIHprb250cm9sdWp0ZSBu4Xp2eSBuYWLtZGVrIgorCisjOiBtZXNzYWdlLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVjdGVkIHdoaWxlIHByb2Nlc3NpbmcgJXM6IgorbXNnc3RyICJDaHliYSBw+GkgenByYWNvduFu7SAlczoiCisKKyM6IG1lc3NhZ2UuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlNGxkOiIKK21zZ3N0ciAi+OFkZWsgJTRsZDoiCisKKyM6IG1lc3NhZ2UuYzo1MjMKK21zZ2lkICJbc3RyaW5nIHRvbyBsb25nXSIKK21zZ3N0ciAiW3D47WxpmiBkbG91aP0g+GV07HplY10iCisKKyM6IG1lc3NhZ2UuYzo2NjkKK21zZ2lkICJNZXNzYWdlcyBtYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiIKK21zZ3N0ciAiU3By4XZjZSB6cHLhdjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4iCisKKyM6IG1lc3NhZ2UuYzo4ODEKK21zZ2lkICJJbnRlcnJ1cHQ6ICIKK21zZ3N0ciAiUPhlcnWaZW7tOiAiCisKKyM6IG1lc3NhZ2UuYzo4ODQKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgInBva3Jh6G924W7tIHN0aXNrZW0gRU5URVIiCisKKyM6IG1lc3NhZ2UuYzo4ODYKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICJQcm8gcG9rcmHob3bhbu0gc3Rpc2tu7HRlIEVOVEVSIG5lYm8gemFkZWp0ZSBw+O1rYXoiCisKKyM6IG1lc3NhZ2UuYzoxOTQwCittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0gUG9rcmHob3bhbu0gLS0iCisKKyM6IG1lc3NhZ2UuYzoxOTQzCittc2dpZCAiIChSRVQvQlM6IGxpbmUsIFNQQUNFL2I6IHBhZ2UsIGQvdTogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQvQlM6IPjhZGVrLCBNRVpFUk7NSy9iOiBzdHLhbmthLCBkL3U6IDAuNSBzdHLhbmt5LCBxOiBrb25lYykiCisKKyM6IG1lc3NhZ2UuYzoxOTQ0Cittc2dpZCAiIChSRVQ6IGxpbmUsIFNQQUNFOiBwYWdlLCBkOiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVDog+OFkZWssIE1FWkVSTs1LOiBzdHLhbmthLCBkOiAwLjUgc3Ry4W5reSwgcToga29uZWMpIgorCisjOiBtZXNzYWdlLmM6MjQxOSBtZXNzYWdlLmM6MjQzNAorbXNnaWQgIlF1ZXN0aW9uIgorbXNnc3RyICJPdOF6a2EiCisKKyM6IG1lc3NhZ2UuYzoyNDIxCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm8iCittc2dzdHIgIiIKKyImQW5vXG4iCisiJk5lIgorCisjOiBtZXNzYWdlLmM6MjQzNgorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZBbm9cbiIKKyImTmVcbiIKKyImWnJ1mml0IgorCisjOiBtZXNzYWdlLmM6MjQ1NAorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZBbm9cbiIKKyImTmVcbiIKKyImVWxvnml0IHaaZVxuIgorIlphaG9kaXQgJnaaZVxuIgorIiZacnWaaXQiCisKKyM6IG1lc3NhZ2UuYzoyNDk0Cittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAiRGlhbG9nIHBybyB1a2zhZOFu7SBzb3Vib3L5IgorCisjOiBtZXNzYWdlLmM6MjQ5NgorbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIkRpYWxvZyBwcm8gb3Rldu1y4W7tIHNvdWJvcvkiCisKKyMuIFRPRE86IG5vbi1HVUkgZmlsZSBzZWxlY3RvciBoZXJlCisjOiBtZXNzYWdlLmM6MjU0NworbXNnaWQgIkUzMzg6IFNvcnJ5LCBubyBmaWxlIGJyb3dzZXIgaW4gY29uc29sZSBtb2RlIgorbXNnc3RyICJFMzM4OiBMaXR1amksIGFsZSBrb256b2xvduEgdmVyemUgbmVwb2Rwb3J1amUgcHJvaGztnmXoIHNvdWJvcvkiCisKKyM6IG1pc2MxLmM6MjQ0OQorbXNnaWQgIlcxMDogV2FybmluZzogQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlIgorbXNnc3RyICJXMTA6IHdjMTogbexu7W0gc291Ym9yIHBvdXplX3Byb1/odGVu7SIKKworIzogbWlzYzEuYzoyNjc4Cittc2dpZCAiMSBtb3JlIGxpbmUiCittc2dzdHIgInBv6GV0IG5vdv1jaCD44WRr+TogMSIKKworIzogbWlzYzEuYzoyNjgwCittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgInBv6GV0IHNtYXphbv1jaCD44WRr+TogMSIKKworIzogbWlzYzEuYzoyNjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgorbXNnc3RyICJwb+hldCBub3b9Y2gg+OFka/k6ICVsZCIKKworIzogbWlzYzEuYzoyNjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBmZXdlciBsaW5lcyIKK21zZ3N0ciAicG/oZXQgc21hemFu/WNoIPjhZGv5OiAlbGQiCisKKyM6IG1pc2MxLmM6MjY5MAorbXNnaWQgIiAoSW50ZXJydXB0ZWQpIgorbXNnc3RyICIoUPhlcnWaZW5vKSIKKworIzogbWlzYzEuYzo2MjQ1Cittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTogemFjaG924XbhbSBzb3Vib3J5Li4uXG4iCisKKyMuIGNsb3NlIGFsbCBtZW1maWxlcywgd2l0aG91dCBkZWxldGluZworIzogbWlzYzEuYzo2MjU1Cittc2dpZCAiVmltOiBGaW5pc2hlZC5cbiIKK21zZ3N0ciAiVmltOiB1a29u6GVuXG4iCisKKyM6IG1pc2MyLmM6NjQ3IG1pc2MyLmM6NjYzCittc2dpZCAiRVJST1I6ICIKK21zZ3N0ciAiQ0hZQkE6ICIKKworIzogbWlzYzIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJbYmFqdPldIGNlbGtlbSB1dm9sbuxuby1hbG9rb3bhbm8gJWx1LSVsdSwgdnl1nml0byAlbHUsIG1heGlt4Wxu7SB2eXWeaXTtICIKKyIlbHVcbiIKKworIzogbWlzYzIuYzo2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW3ZvbOFu7V0gY2Vsa2VtIHJlL21hbGxvYygpOiAlbHUsIGNlbGtlbSBmcmVlKCkgJWx1XG4iCisiXG4iCisKKyM6IG1pc2MyLmM6NzI0Cittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDog2OFkZWsgc2Ugc3ThduEgcPjtbGmaIGRsb3Vo/W0iCisKKyM6IG1pc2MyLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDE6IEludGVybmFsIGVycm9yOiBsYWxsb2MoJWxkLCApIgorbXNnc3RyICJFMzQxOiBWbml0+G7tIGNoeWJhOiBsYWxsb2MoJWxkLCApIgorCisjOiBtaXNjMi5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQyOiBPdXQgb2YgbWVtb3J5ISAgKGFsbG9jYXRpbmcgJWx1IGJ5dGVzKSIKK21zZ3N0ciAiRTM0MjogTmVkb3N0YXRlayBwYW3sdGkhIChwb3T4ZWJ1amkgYWxva292YXQgYmFqdPk6ICVsdSkiCisKKyM6IG1pc2MyLmM6MjUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAiU3BvdZp07W0gcPjta2F6IFwiJXNcIiBwb21vY+0gc2hlbGx1IgorCisjOiBtaXNjMi5jOjI3MDYgbWlzYzIuYzo1MTQ4IG9wdGlvbi5jOjQ1ODQKK21zZ2lkICJNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJDaHli7SBkdm9qdGXoa2EiCisKKyM6IG1pc2MyLmM6MjcwOCBtaXNjMi5jOjI3MzUKK21zZ2lkICJJbGxlZ2FsIG1vZGUiCittc2dzdHIgIm5lcPjtcHVzdG79IG3zZCIKKworIzogbWlzYzIuYzoyNzc0Cittc2dpZCAiSWxsZWdhbCBtb3VzZXNoYXBlIgorbXNnc3RyICJDaHlibv0gdHZhciBteZppIgorCisjOiBtaXNjMi5jOjI4MTQgbWlzYzIuYzo1MTY4Cittc2dpZCAiZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgIm/oZWvhduFuYSDo7XNsaWNlIgorCisjOiBtaXNjMi5jOjI4MTkKK21zZ2lkICJJbGxlZ2FsIHBlcmNlbnRhZ2UiCittc2dzdHIgIm5lcPjtcHVzdG7pIHByb2NlbnRvIgorCisjOiBtaXNjMi5jOjMxMjMKK21zZ2lkICJFbnRlciBlbmNyeXB0aW9uIGtleTogIgorbXNnc3RyICJaYWRlanRlIJppZnJvdmFj7SBrbO3oOiAiCisKKyM6IG1pc2MyLmM6MzEyNAorbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIlphZGVqdGUgamWadOwgamVkbm91IHRlbnT9niBrbO3oOiIKKworIzogbWlzYzIuYzozMTM0Cittc2dpZCAiS2V5cyBkb24ndCBtYXRjaCEiCittc2dzdHIgIkts7ehlIHNlIG5lc2hvZHVq7SIKKworIzogbWlzYzIuYzozNjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICIiCisiRTM0MzogQ2h5Ym7hIGNlc3RhOiAnKipb6O1zbG9dIG11c+0gYv10IGJ17yBuYSBrb25jaSBjZXN0eSwgbmVibyBtdXPtIGL9dFxuIgorIm7hc2xlZG924W5vJyVzLiBWaXogOmhlbHAgcGF0aC4iCisKKyM6IG1pc2MyLmM6NDkwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ0OiBDYW4ndCBmaW5kIGRpcmVjdG9yeSBcIiVzXCIgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ0OiBBZHJlc+H4IFwiJXNcIiBuZWx6ZSB2IGNkcGF0aCBuYWzpenQiCisKKyM6IG1pc2MyLmM6NDkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ1OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkUzNDU6IFNvdWJvciBcIiVzXCIgbmVsemUgdiBwYXRoIG5hbOl6dCIKKworIzogbWlzYzIuYzo0OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDY6IE5vIG1vcmUgZGlyZWN0b3J5IFwiJXNcIiBmb3VuZCBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDY6II7hZG79IGRhbJrtIGFkcmVz4fggXCIlc1wiIG5lYnlsIHYgY2RwYXRoIG5hbGV6ZW4iCisKKyM6IG1pc2MyLmM6NDkxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ3OiBObyBtb3JlIGZpbGUgXCIlc1wiIGZvdW5kIGluIHBhdGgiCittc2dzdHIgIkUzNDc6II7hZG79IGRhbJrtIHNvdWJvciBcIiVzXCIgbmVieWwgdiBjZXN07CBuYWxlemVuIgorCisjOiBtaXNjMi5jOjUxNjAKK21zZ2lkICJJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAibmVw+O1wdXN0buEgc2916OFzdCIKKworIzogbm9ybWFsLmM6MjgxMworbXNnaWQgIldhcm5pbmc6IHRlcm1pbmFsIGNhbm5vdCBoaWdobGlnaHQiCittc2dzdHIgIlZhcm924W7tOiB0ZXJtaW7hbCBuZXBvZHBvcnVqZSB6dv1yYXryb3bhbu0iCisKKyM6IG5vcm1hbC5jOjMwMDgKK21zZ2lkICJFMzQ4OiBObyBzdHJpbmcgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ4OiBwb2Qga3Vyem9yZW0gbmVu7SCe4WRu/SD4ZXTsemVjIgorCisjOiBub3JtYWwuYzozMDEwCittc2dpZCAiRTM0OTogTm8gaWRlbnRpZmllciB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDk6IHBvZCBrdXJ6b3JlbSBuZW7tIJ7hZG79IGlkZW50aWZpa+F0b3IiCisKKyM6IG5vcm1hbC5jOjQxNzUKK21zZ2lkICJFMzUyOiBDYW5ub3QgZXJhc2UgZm9sZHMgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MjogcG9tb2PtIGFrdHXhbG7tICdmb2xkbWV0aG9kJyBuZWx6ZSBtYXphdCB64Wh5YnkiCisKKyM6IG9wcy5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAxIHRpbWUiCittc2dzdHIgInBv6GV0IPjhZGv5IHBvc3VudXT9Y2ggamVkbm91IHBvbW9j7SAlcyA6IDEiCisKKyM6IG9wcy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiUG/oZXQg+OFka/kgcG9zdW51dP1jaCBwb21vY+0gJXMgJWQta3LhdCA6IDEiCisKKyM6IG9wcy5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAxIHRpbWUiCittc2dzdHIgIlBv6GV0IPjhZGv5OiAlbGQgKHBvc3VudXT9Y2ggamVkbm91IHBvbW9j7SAlcykiCisKKyM6IG9wcy5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiUG/oZXQg+OFka/k6ICVsZCAocG9zdW51dP1jaCBwb21vY+0gJXMgJWQta3LhdCkiCisKKyM6IG9wcy5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgdG8gaW5kZW50Li4uICIKK21zZ3N0ciAicG/oZXQg+OFka/kgayBvZHNhemVu7TogJWxkIgorCisjOiBvcHMuYzo2ODgKK21zZ2lkICIxIGxpbmUgaW5kZW50ZWQgIgorbXNnc3RyICJwb+hldCD44WRr+SBrIG9kc2F6ZW7tOiAxIgorCisjOiBvcHMuYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAicG/oZXQgb2RzYXplbv1jaCD44WRr+TogJWxkIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogb3BzLmM6MTUyOAorbXNnaWQgImNhbm5vdCB5YW5rOyBkZWxldGUgYW55d2F5IgorbXNnc3RyICJuZWx6ZSBrb3Dtcm92YXQ7IHD4ZXN0byBzbWF64W5vIgorCisjOiBvcHMuYzoyMDE4Cittc2dpZCAiMSBsaW5lIGNoYW5nZWQiCittc2dzdHIgInBv6GV0IPjhZGVrIHNlIHpt7G7sbm91IHZlbGlrb3N07SBw7XNtZW46IDEiCisKKyM6IG9wcy5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGNoYW5nZWQiCittc2dzdHIgInBv6GV0IPjhZGVrIHNlIHpt7G7sbm91IHZlbGlrb3N07SBw7XNtZW46ICVsZCIKKworIzogb3BzLmM6MjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmcmVlaW5nICVsZCBsaW5lcyIKK21zZ3N0ciAicG/oZXQgdXZvbPJvdmFu/WNoIPjhZGv5OiAlbGQiCisKKyM6IG9wcy5jOjI2NTgKK21zZ2lkICIxIGxpbmUgeWFua2VkIgorbXNnc3RyICJwb+hldCB6a29w7XJvdmFu/WNoIPjhZGv5OiAxIgorCisjOiBvcHMuYzoyNjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgInBv6GV0IHprb3Dtcm92YW79Y2gg+OFka/k6ICVsZCIKKworIzogb3BzLmM6MjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiBSZWdpc3RyICVzIGplIHBy4Xpkbv0iCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogb3BzLmM6MzQ1NAorbXNnaWQgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBSZWdpc3RyeSAtLS0iCisKKyM6IG9wcy5jOjQ1NjUKK21zZ2lkICJJbGxlZ2FsIHJlZ2lzdGVyIG5hbWUiCittc2dzdHIgIm5lcPjtcHVzdG79IG7hemV2IHJlZ2lzdHJ1IgorCisjOiBvcHMuYzo0NjQ1Cittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBSZWdpc3RyeTpcbiIKKworIzogb3BzLmM6NDY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHJlZ2lzdGVyIHR5cGUgJWQiCittc2dzdHIgIiVkIG5lbu0gem7hbf1tIHR5cGVtIHJlZ2lzdHJ1IgorCisjOiBvcHMuYzo1MDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTQ6IEludmFsaWQgcmVnaXN0ZXIgbmFtZTogJyVzJyIKK21zZ3N0ciAiRTM1NDogJyVzJyBuZW7tIHD47XB1c3Ru6SBqbelubyByZWdpc3RydSIKKworIzogb3BzLmM6NTM5MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgQ29sczsgIgorbXNnc3RyICL44WRr+TogJWxkOyIKKworIzogb3BzLmM6NTQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiCittc2dzdHIgIlZ5YnLhbm8gJXMlbGQgeiAlbGQg+OFka/k7ICVsZCB6ICVsZCBzbG92OyAlbGQgeiAlbGQgQnl0+SIKKworIzogb3BzLmM6NTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiCittc2dzdHIgIlNsb3VwZWMgJXMgeiAlczsg2OFkZWsgJWxkIHogJWxkOyBTbG92byAlbGQgeiAlbGQ7IEJ5dGUgJWxkIHogJWxkIgorCisjOiBvcHMuYzo1NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCBwcm8gQk9NKSIKKworIzogb3B0aW9uLmM6MTk4OQorbXNnaWQgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIKK21zZ3N0ciAiROxrdWppIHphIHBvdZ5pdO0gVmltIgorCisjOiBvcHRpb24uYzozMTc1Cittc2dpZCAiT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIlZvbGJhIG5lbu0gcG9kcG9yb3bhbmEiCisKKyM6IG9wdGlvbi5jOjMyMDAKK21zZ2lkICJOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIgorbXNnc3RyICJOZW7tIHYgbW9kZWxpbmUgcG92b2xlbm8iCisKKyM6IG9wdGlvbi5jOjMyNTYKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0TmFwb3NsZWR5IG5hc3RhdmVuYSB6ICIKKworIzogb3B0aW9uLmM6MzM5NQorbXNnaWQgIk51bWJlciByZXF1aXJlZCBhZnRlciA9IgorbXNnc3RyICJQbyA9IGplIHZ5nmFkb3bhbm8g6O1zbG8iCisKKyM6IG9wdGlvbi5jOjM3MDIgb3B0aW9uLmM6NDMwOQorbXNnaWQgIk5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJOZW5hbGV6ZW4gdiB0ZXJtY2FwdSIKKworIzogb3B0aW9uLmM6Mzc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IgorbXNnc3RyICJOZXD47XB1c3Ru/SB6bmFrIDwlcz4iCisKKyM6IG9wdGlvbi5jOjQyOTQgb3B0aW9uLmM6NTQ5NworbXNnaWQgIk5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIlRvdG8gemRlIG5lbu0gcG92b2xlbm8iCisKKyM6IG9wdGlvbi5jOjQzMDEKK21zZ2lkICJDYW5ub3Qgc2V0ICd0ZXJtJyB0byBlbXB0eSBzdHJpbmciCittc2dzdHIgInZvbGJhICd0ZXJtJyBuZW35nmUgYv10IHBy4XpkbuEiCisKKyM6IG9wdGlvbi5jOjQzMDQKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICJWIEdVSSBuZWx6ZSBt7G5pdCB0ZXJtIgorCisjOiBvcHRpb24uYzo0MzA2Cittc2dpZCAiVXNlIFwiOmd1aVwiIHRvIHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIlBvdZ5panRlIFwiZ3VpXCIgcHJvIHNwdZp07G7tIEdVSSIKKworIzogb3B0aW9uLmM6NDMyNworbXNnaWQgIidiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiCittc2dzdHIgInZvbGJ5ICdiYWNrdXBleHQnIGEgJ3BhdGNobW9kZScgbWFq7SBzdGVqbm91IGhvZG5vdHUiCisKKyM6IG9wdGlvbi5jOjQ1ODYKK21zZ2lkICJaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIvhldOx6ZWMgbyBudWxvdukgZOlsY2UiCisKKyM6IG9wdGlvbi5jOjQ2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBudW1iZXIgYWZ0ZXIgPCVzPiIKK21zZ3N0ciAiUG8gPCVzPiBjaHli7SDo7XNsbyIKKworIzogb3B0aW9uLmM6NDY2OAorbXNnaWQgIk1pc3NpbmcgY29tbWEiCittc2dzdHIgIkNoeWLtIOjhcmthIgorCisjOiBvcHRpb24uYzo0Njc1Cittc2dpZCAiTXVzdCBzcGVjaWZ5IGEgJyB2YWx1ZSIKK21zZ3N0ciAiSmUgbnV0bukgemFkYXQgaG9kbm90dSAnIgorCisjOiBvcHRpb24uYzo0NzE1Cittc2dpZCAiY29udGFpbnMgdW5wcmludGFibGUgY2hhcmFjdGVyIgorbXNnc3RyICJvYnNhaHVqZSBuZXRpc2tudXRlbG7pIHpuYWt5IgorCisjOiBvcHRpb24uYzo0NzI4Cittc2dpZCAiSW52YWxpZCBmb250KHMpIgorbXNnc3RyICJDaHlibuEgcO1zbWEiCisKKyM6IG9wdGlvbi5jOjQ3MzQKK21zZ2lkICJjYW4ndCBzZWxlY3QgZm9udHNldCIKK21zZ3N0ciAibmVsemUgdnlicmF0IHNhZHUgcO1zZW0iCisKKyM6IG9wdGlvbi5jOjQ3MzYKK21zZ2lkICJJbnZhbGlkIGZvbnRzZXQiCittc2dzdHIgImNoeWJu4SBzYWRhIHDtc2VtIgorCisjOiBvcHRpb24uYzo0NzQzCittc2dpZCAiY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAibmVsemUgdnlicmF0IJppcm9r/SBmb250IgorCisjOiBvcHRpb24uYzo0NzQ1Cittc2dpZCAiSW52YWxpZCB3aWRlIGZvbnQiCittc2dzdHIgIkNoeWJu6SCaaXJva+kgcO1zbW8iCisKKyM6IG9wdGlvbi5jOjUwMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgPCVjPiIKK21zZ3N0ciAiTmVw+O1wdXN0bv0gem5hayBwbyA8JWM+IgorCisjOiBvcHRpb24uYzo1MDk3Cittc2dpZCAiY29tbWEgcmVxdWlyZWQiCittc2dzdHIgImplIG51dG7hIOjhcmthIgorCisjOiBvcHRpb24uYzo1MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIidjb21tZW50c3RyaW5nJyBtdXN0IGJlIGVtcHR5IG9yIGNvbnRhaW4gJXMiCittc2dzdHIgInZvbGJhIGBjb21tZW50c3RyaW5nYCBtdXPtIGL9dCBide8gcHLhemRu4SBuZWJvIG5hc3RhdmVu4SBuYSAlcyIKKworIzogb3B0aW9uLmM6NTE1MworbXNnaWQgIk5vIG1vdXNlIHN1cHBvcnQiCittc2dzdHIgIkJleiBwb2Rwb3J5IG15mmkiCisKKyM6IG9wdGlvbi5jOjUzOTkKK21zZ2lkICJVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJuZXV6YXb4ZW7hIHNla3ZlbmNlIHb9cmF6+SIKKworIzogb3B0aW9uLmM6NTQwMworbXNnaWQgInRvbyBtYW55IGl0ZW1zIgorbXNnc3RyICJw+O1saZogbW5vaG8gcG9sb55layIKKworIzogb3B0aW9uLmM6NTQwNQorbXNnaWQgInVuYmFsYW5jZWQgZ3JvdXBzIgorbXNnc3RyICJuZXZ5duGeZW7pIHNrdXBpbnkiCisKKyM6IG9wdGlvbi5jOjU2MjAKK21zZ2lkICJBIHByZXZpZXcgd2luZG93IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJPa25vIG7haGxlZHUgammeIGV4aXN0dWplIgorCisjOiBvcHRpb24uYzo1ODgxIG9wdGlvbi5jOjU5MTAKK21zZ2lkICInd2luaGVpZ2h0JyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW5oZWlnaHQnIgorbXNnc3RyICIiCisiaG9kbm90YSB2b2xieSAnd2luaGVpZ2h0JyBuZXNt7SBi/XQgbWVumu0gbmWeIGhvZG5vdGEgdm9sYnkgJ3dpbm1pbmhlaWdodCciCisKKyM6IG9wdGlvbi5jOjU5MjYgb3B0aW9uLmM6NTk0NQorbXNnaWQgIid3aW53aWR0aCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWlud2lkdGgnIgorbXNnc3RyICIiCisiaG9kbm90YSB2b2xieSAnd2lud2lkdGgnIG5lc23tIGL9dCBtZW6a7SBuZZ4gaG9kbm90YSB2b2xieSAnd2lubWlud2lkdGgnIgorCisjOiBvcHRpb24uYzo2MDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgYXQgbGVhc3QgJWQgbGluZXMiCittc2dzdHIgIm1pbmlt4Wxu7SBwb3T4ZWJu/SBwb+hldCD44WRr+TogJWQiCisKKyM6IG9wdGlvbi5jOjYwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIgorbXNnc3RyICJtaW5pbeFsbu0gcG90+GVibv0gcG/oZXQgc2xvdXBj+TogJWQiCisKKyM6IG9wdGlvbi5jOjYzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NTogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMzU1OiBOZXpu4W3hIHZvbGJhOiAlcyIKKworIzogb3B0aW9uLmM6NjUwMAorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEvzZHkgdGVybWlu4Wx1IC0tLSIKKworIzogb3B0aW9uLmM6NjUwMgorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE5hc3RhdmVu7SBnbG9i4Wxu7WNoIHZvbGViIC0tLSIKKworIzogb3B0aW9uLmM6NjUwNAorbXNnaWQgIiIKKyJcbiIKKyItLS0gTG9jYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTmFzdGF2ZW7tIGxva+Fsbu1jaCB2b2xlYiAtLS0iCisKKyM6IG9wdGlvbi5jOjY1MDYKK21zZ2lkICIiCisiXG4iCisiLS0tIE9wdGlvbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFZvbGJ5IC0tLSIKKworIzogb3B0aW9uLmM6NzE5NgorbXNnaWQgIkUzNTY6IGdldF92YXJwIEVSUk9SIgorbXNnc3RyICJFMzU2OiBnZXRfdmFycCBDSFlCQSIKKworIzogb3B0aW9uLmM6ODExMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU3OiAnbGFuZ21hcCc6IE1hdGNoaW5nIGNoYXJhY3RlciBtaXNzaW5nIGZvciAlcyIKK21zZ3N0ciAiRTM1NzogJ2xhbmdtYXAnOiBwcm8gJXMgY2h5Yu0gdnlob3Z1au1j7SB6bmFrIgorCisjOiBvcHRpb24uYzo4MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTg6ICdsYW5nbWFwJzogRXh0cmEgY2hhcmFjdGVycyBhZnRlciBzZW1pY29sb246ICVzIgorbXNnc3RyICJFMzU4OiAnbGFuZ21hcCc6IG5hZGJ5dGXobukgem5ha3kgcG8gc3T4ZWRu7Wt1OiAlcyIKKworIzogb3NfYW1pZ2EuYzoyNzMKK21zZ2lkICJjYW5ub3Qgb3BlbiAiCittc2dzdHIgIm5lbHplIG90ZXb47XQgIgorCisjOiBvc19hbWlnYS5jOjMwNworbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIlZJTTogTmVsemUgb3RldvjtdCBub3bpIG9rbm8hXG4iCisKKyM6IG9zX2FtaWdhLmM6MzI5Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAiVnmeYWR1amUgQW1pZ2Fkb3MgdmVyemUgMi4wNCBuZWJvIHZ5mprtXG4iCisKKyM6IG9zX2FtaWdhLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgJXMgdmVyc2lvbiAlbGRcbiIKK21zZ3N0ciAiVnmeYWR1amUgJXMgdmVyemUgJWxkXG4iCisKKyM6IG9zX2FtaWdhLmM6NDA3Cittc2dpZCAiQ2Fubm90IG9wZW4gTklMOlxuIgorbXNnc3RyICJOZWx6ZSBvdGV2+O10IE5JTDpcbiIKKworIzogb3NfYW1pZ2EuYzo0MTgKK21zZ2lkICJDYW5ub3QgY3JlYXRlICIKK21zZ3N0ciAiIE5lbHplIHZ5dHZv+Gl0ICIKKworIzogb3NfYW1pZ2EuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltIGV4aXRpbmcgd2l0aCAlZFxuIgorbXNnc3RyICJWaW0gYnVkZSB1a29u6GVuICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTI4Cittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAiTmVsemUgem3sbml0IG3zZCBrb256b2xlID8hXG4iCisKKyM6IG9zX2FtaWdhLmM6OTM4IG9zX21hYy5jOjExNjggb3NfbXN3aW4uYzo2MTkgb3NfcmlzY29zLmM6NzI4IG9zX3VuaXguYzoyNzI2Cittc2dpZCAiRTM1OTogU2NyZWVuIG1vZGUgc2V0dGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFMzU5OiBOYXN0YXZvduFu7SByZZ5pbXUgb2JyYXpvdmt5IG5lbu0gcG9kcG9yb3bhbm8iCisKKyM6IG9zX2FtaWdhLmM6OTk0Cittc2dpZCAibWNoX2dldF9zaGVsbHNpemU6IG5vdCBhIGNvbnNvbGU/P1xuIgorbXNnc3RyICJtY2hfZ2V0X3NoZWxsc2l6ZTogbmVuaSBrb256b2xlPz9cbiIKKworIy4gaWYgVmltIG9wZW5lZCBhIHdpbmRvdzogRXhlY3V0aW5nIGEgc2hlbGwgbWF5IGNhdXNlIGNyYXNoZXMKKyM6IG9zX2FtaWdhLmM6MTE0MgorbXNnaWQgIkUzNjA6IENhbm5vdCBleGVjdXRlIHNoZWxsIHdpdGggLWYgb3B0aW9uIgorbXNnc3RyICJFMzYwOiBOZWx6ZSBzcHVzdGl0IHNoZWxsIHMgcGFyYW1ldHJlbSAtZiIKKworIzogb3NfYW1pZ2EuYzoxMTgzIG9zX2FtaWdhLmM6MTI3MworbXNnaWQgIkNhbm5vdCBleGVjdXRlICIKK21zZ3N0ciAiTmVsemUgc3B1c3RpdCAiCisKKyM6IG9zX2FtaWdhLmM6MTE4NiBvc19hbWlnYS5jOjEyODMKK21zZ2lkICJzaGVsbCAiCittc2dzdHIgInNoZWxsICIKKworIzogb3NfYW1pZ2EuYzoxMjA2IG9zX2FtaWdhLmM6MTMwOAorbXNnaWQgIiByZXR1cm5lZFxuIgorbXNnc3RyICIgbuF2cmF0b3bhIGhvZG5vdGEgc2hlbGx1XG4iCisKKyM6IG9zX2FtaWdhLmM6MTQ0OAorbXNnaWQgIkFOQ0hPUl9CVUZfU0laRSB0b28gc21hbGwuIgorbXNnc3RyICJBTkNIT1JfQlVGX1NJWkUgamUgcPjtbGmaIG1hbOEuIgorCisjOiBvc19hbWlnYS5jOjE0NTIKK21zZ2lkICJJL08gRVJST1IiCittc2dzdHIgIkkvTyBDSFlCQSIKKworIzogb3NfbXN3aW4uYzo1MDMKK21zZ2lkICIuLi4odHJ1bmNhdGVkKSIKK21zZ3N0ciAiLi4uKGty4WNlbm8pIgorCisjOiBvc19tc3dpbi5jOjU5NAorbXNnaWQgIidjb2x1bW5zJyBpcyBub3QgODAsIGNhbm5vdCBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICInY29sdW1ucycgbmVu7SA4MCwgbmVsemUgc3B1c3RpdCBleHRlcm7tIHD47WtheiIKKworIzogb3NfbXN3aW4uYzo3MDYgb3NfdW5peC5jOjQ5NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NDogTGlicmFyeSBjYWxsIGZhaWxlZCBmb3IgXCIlcygpXCIiCittc2dzdHIgIkUzNjQ6IFZvbOFu7SBrbmlob3Zu7SBmdW5rY2UgXCIlcygpXCIgc2VsaGFsbyIKKworIzogb3NfbXN3aW4uYzoxMzQwCittc2dpZCAiRTIzNzogUHJpbnRlciBzZWxlY3Rpb24gZmFpbGVkIgorbXNnc3RyICJFMjM3OiBOZWx6ZSB6dm9saXQgdGlza+FybnUiCisKKyM6IG9zX21zd2luLmM6MTM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0byAlcyBvbiAlcyIKK21zZ3N0ciAiZG8gJXMgdiAlcyIKKworIzogb3NfbXN3aW4uYzoxNDQ5IG9zX21zd2luLmM6MTQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM4OiBQcmludCBlcnJvcjogJXMiCittc2dzdHIgIkUyMzg6IENoeWJhIHRpc2t1OiAlcyIKKworIzogb3NfbXN3aW4uYzoxNDYwCittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAiTmV6buFt/SIKKworIzogb3NfbXN3aW4uYzoxNDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nICclcyciCittc2dzdHIgIlZ5dGmadOxubyAnJXMnIgorCisjOiBvc19tc3dpbi5jOjI1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NDogSWxsZWdhbCBjaGFyc2V0IG5hbWUgXCIlc1wiIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDQ6IE5lcPjtcHVzdG7hIGpt6W5vIHpuYWtvdukgc2FkeSBcIiVzXCIgdmUgZm9udHUgXCIlc1wiIgorCisjOiBvc19tc3dpbi5jOjI1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTogTmVw+O1wdXN0bv0gem5hayAnJWMnIHZlIGZvbnR1IFwiJXNcIiIKKworIzogb3NfcmlzY29zLmM6MTIyNworbXNnaWQgIkUzNjY6IEludmFsaWQgJ29zZmlsZXR5cGUnIG9wdGlvbiAtIHVzaW5nIFRleHQiCittc2dzdHIgIkUzNjY6IE5lcGxhdG79ICdvc2ZpbGV0eXBlJyAtIHBvdZ5pdCBUZXh0IgorCisjOiBvc191bml4LmM6ODAwCittc2dpZCAiVmltOiBEb3VibGUgc2lnbmFsLCBleGl0aW5nXG4iCittc2dzdHIgIlZJbTogZHZvaml0/SBzaWdu4WwsIGtvbujtbVxuIgorCisjOiBvc191bml4LmM6ODA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWwgJXNcbiIKK21zZ3N0ciAiVmltOiBaYWNoeWNlbiBzbXJ0ZWxu/SBzaWdu4WwgJXNcbiIKKworIzogb3NfdW5peC5jOjgwOQorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWxcbiIKK21zZ3N0ciAiVmltOiBaYWNoeWNlbiBzbXJ0ZWxu/SBzaWdu4WxcbiIKKworIzogb3NfdW5peC5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRvb2sgJWxkIG1zZWMiCittc2dzdHIgIkRvYmEgb3Rldu1y4W7tIFggZGlzcGxlamUgKHYgbXMpOiAlbGQiCisKKyM6IG9zX3VuaXguYzoxMDkwCittc2dpZCAiIgorIlxuIgorIlZpbTogR290IFggZXJyb3JcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZpbTogY2h5YmEgWDExXG4iCisKKyM6IG9zX3VuaXguYzoxMTU3Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiVGVzdCBYIGRpc3BsZWplIHNlIG5lemRh+GlsIgorCisjOiBvc191bml4LmM6MTMwMQorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0aW1lZCBvdXQiCittc2dzdHIgIlZ5cHKaZWwg6GFzIHD4aSDoZWvhbu0gbmEgb3Rldvhlbu0gWCBkaXNwbGVqZSIKKworIzogb3NfdW5peC5jOjI4OTkgb3NfdW5peC5jOjM0ODMKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgIgorbXNnc3RyICIiCisiXG4iCisibmVsemUgc3B1c3RpdCBzaGVsbCAiCisKKyM6IG9zX3VuaXguYzoyOTQ0Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsIHNoXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOZWx6ZSBzcHVzdGl0IHNoIHNoZWxsXG4iCisKKyM6IG9zX3VuaXguYzoyOTQ4IG9zX3VuaXguYzozNDg5Cittc2dpZCAiIgorIlxuIgorInNoZWxsIHJldHVybmVkICIKK21zZ3N0ciAiIgorIlxuIgorIiBu4XZyYXRvduEgaG9kbm90YSBzaGVsbHUgIgorCisjOiBvc191bml4LmM6MzA4MgorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgY3JlYXRlIHBpcGVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOZWx6ZSB2eXR2b/hpdCByb3VyeVxuIgorCisjOiBvc191bml4LmM6MzA5NworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZm9ya1xuIgorbXNnc3RyICIiCisiXG4iCisiVm9s4W7tIGZvcmsgc2VsaGFsb1xuIgorCisjOiBvc191bml4LmM6MzQ5NgorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIlD47WtheiB1a29u6GVuXG4iCisKKyM6IG9zX3VuaXguYzo0OTkzCittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiT3Rldvhlbu0gWCBkaXNwbGVqZSBzZSBuZXpkYfhpbG8iCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgIk5hIPjhZGt1IgorCisjOiBvc193MzJleGUuYzoxNjkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICJOZWx6ZSBuYejtc3QgdmltMzIuZGxsISIKKworIzogb3NfdzMyZXhlLmM6MTY5IG9zX3czMmV4ZS5jOjE3OQorbXNnaWQgIlZJTSBFcnJvciIKK21zZ3N0ciAiQ2h5YmEgVklNdSIKKworIzogb3NfdzMyZXhlLmM6MTc5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAiTmVsemUgbmFzdGF2aXQgdWthemF0ZWxlIGZ1bmtj7SBuYSBETEwiCisKKyM6IG9zX3dpbjE2LmM6NTc4IG9zX3dpbjMyLmM6MzAyMQorIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAibuF2cmF0b3bhIGhvZG5vdGEgc2hlbGx1ICVkIgorCisjOiBvc193aW4zMi5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgJXMgZXZlbnRcbiIKK21zZ3N0ciAiVmltOiBaYWNoeWNlbiAlcyBzaWdu4WxcbiIKKworIzogb3Nfd2luMzIuYzoyNDkxCittc2dpZCAiY2xvc2UiCittc2dzdHIgInphdvjtdCIKKworIzogb3Nfd2luMzIuYzoyNDkzCittc2dpZCAibG9nb2ZmIgorbXNnc3RyICJsb2dvZmYiCisKKyM6IG9zX3dpbjMyLmM6MjQ5NAorbXNnaWQgInNodXRkb3duIgorbXNnc3RyICJzaHV0ZG93biIKKworIzogb3Nfd2luMzIuYzoyOTc1Cittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6IFD47WtheiBuZW7tIGsgZGlzcG96aWNpIgorCisjOiBvc193aW4zMi5jOjI5ODgKK21zZ2lkICIiCisiVklNUlVOLkVYRSBub3QgZm91bmQgaW4geW91ciAkUEFUSC5cbiIKKyJFeHRlcm5hbCBjb21tYW5kcyB3aWxsIG5vdCBwYXVzZSBhZnRlciBjb21wbGV0aW9uLlxuIgorIlNlZSAgOmhlbHAgd2luMzItdmltcnVuICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJWSU1SVU4uRVhFIHNlIG5ldnlza3l0dWplIHZlIFZhmu0gJFBBVEguXG4iCisiRXh0ZXJu7SBw+O1rYXp5IG5lYnVkb3UgIgorCisjOiBvc193aW4zMi5jOjI5OTEKK21zZ2lkICJWaW0gV2FybmluZyIKK21zZ3N0ciAiVmFyb3bhbu0iCisKKyM6IHF1aWNrZml4LmM6MjgxCittc2dpZCAiRTM3MjogVG9vIG1hbnkgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzcyOiBQ+O1saZogbW5vaG8gJSUlYyB2ZSBmb3Jt4XRvdmFj7W0g+GV07HpjaSIKKworIzogcXVpY2tmaXguYzoyOTQKK21zZ2lkICJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MzogTmVv6GVr4XZhbv0gdv1za3l0ICUlJWMgdmUgZm9ybeF0b3ZhY+1tIPhldOx6Y2kiCisKKyM6IHF1aWNrZml4LmM6MzQ4Cittc2dpZCAiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzQ6IFZlIGZvcm3hdG92YWPtbSD4ZXTsemNpIGNoeWLtIF0iCisKKyM6IHF1aWNrZml4LmM6MzYyCittc2dpZCAiRTM3NTogVW5zdXBwb3J0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc1OiAlJSVjIE5lcG9kcG9yb3ZhbuEgZm9ybeF0b3bhIHNwZWNpZmlrYWNlIHZlIGZvcm3hdG92YWPtbSD4ZXTsemNpIgorCisjOiBxdWlja2ZpeC5jOjM4MAorbXNnaWQgIkUzNzY6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIHByZWZpeCIKK21zZ3N0ciAiRTM3NjogTmVw+O1wdXN0bukgJSUlYyB2IHByZWZpeHUgZm9ybeF0b3ZhY+1obyD4ZXTsemNlIgorCisjOiBxdWlja2ZpeC5jOjM4OAorbXNnaWQgIkUzNzc6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc3OiBOZXD47XB1c3Ru6SAlJSVjIHZlIGZvcm3hdG92YWPtbSD4ZXTsemNpIgorCisjOiBxdWlja2ZpeC5jOjQxNAorbXNnaWQgIkUzNzg6ICdlcnJvcmZvcm1hdCcgY29udGFpbnMgbm8gcGF0dGVybiIKK21zZ3N0ciAiRTM3ODogJ2Vycm9yZm9ybWF0JyBuZW9ic2FodWplIJ7hZG79IHZ6b3JlayIKKworIzogcXVpY2tmaXguYzo1MjAKK21zZ2lkICJFMzc5OiBNaXNzaW5nIG9yIGVtcHR5IGRpcmVjdG9yeSBuYW1lIgorbXNnc3RyICJFMzc5OiBDaHli7GrtY+0gbmVibyBwcuF6ZG79IG7hemV2IGFkcmVz4fhlIgorCisjOiBxdWlja2ZpeC5jOjkzMQorbXNnaWQgIk5vIG1vcmUgaXRlbXMiCittc2dzdHIgIo7hZG7pIGRhbJrtIHBvbG+ea3kiCisKKyM6IHF1aWNrZml4LmM6MTE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIoJWQgb2YgJWQpJXMlczogIgorbXNnc3RyICIoJWQvJWQpJXMlczogIgorCisjOiBxdWlja2ZpeC5jOjExNTQKK21zZ2lkICIgKGxpbmUgZGVsZXRlZCkiCittc2dzdHIgIiAo+OFkZWsgc21heuFuKSIKKworIzogcXVpY2tmaXguYzoxMzYwCittc2dpZCAiRTM4MDogQXQgYm90dG9tIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgwOiBLb25lYyBxdWlja2ZpeCBzZXpuYW11IgorCisjOiBxdWlja2ZpeC5jOjEzNjkKK21zZ2lkICJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODE6IFph6OF0ZWsgcXVpY2tmaXggc2V6bmFtdSIKKworIzogcXVpY2tmaXguYzoxMzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAic2V6bmFtIGNoeWIgJWQgeiAlZDsgcG/oZXQgY2h5YjogJWQiCisKKyM6IHF1aWNrZml4LmM6MTg0MgorbXNnaWQgIkUzODI6IENhbm5vdCB3cml0ZSwgJ2J1ZnR5cGUnIG9wdGlvbiBpcyBzZXQiCittc2dzdHIgIkUzODI6IE5lbHplIHVsb55pdCwgamUgbmFzdGF2ZW5hIHZvbGJhICdidWZ0eXBlJyIKKworIzogcmVnZXhwLmM6ODAxCittc2dpZCAiRTMzOTogUGF0dGVybiB0b28gbG9uZyIKK21zZ3N0ciAiRTMzOTogVnpvciBqZSBw+O1saZogZGxvdWj9IgorCisjOiByZWdleHAuYzoxMzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTogTmVzdGVkICVzKiIKK21zZ3N0ciAiRTYxOiAlcyoiCisKKyM6IHJlZ2V4cC5jOjEzMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyOiBOZXN0ZWQgJXMlYyIKK21zZ3N0ciAiRTYyOiAlcyVjIgorCisjOiByZWdleHAuYzoxNDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDogJXMlYyBuaWMgbmVu7SIKKworIzogcmVnZXhwLmM6MjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gJXN7Li4ufSIKK21zZ3N0ciAiQ2h5YmEgc3ludGF4ZSB2ICVzey4uLn0iCisKKyM6IHJlZ2V4cC5jOjI3MTYKK21zZ2lkICJFMzYxOiBDcmFzaCBpbnRlcmNlcHRlZDsgcmVnZXhwIHRvbyBjb21wbGV4PyIKK21zZ3N0ciAiRTM2MTogWmFjaHljZW5vIHD4ZXRl6GVu7SB64XNvYm7ta3U6IHD47WxpmiBzbG+eaXT9IHJlZ3Vs4XJu7SB2/XJhej8iCisKKyM6IHJlZ2V4cC5jOjI4NTEKK21zZ2lkICJFMzYzOiBwYXR0ZXJuIGNhdXNlZCBvdXQtb2Ytc3RhY2sgZXJyb3IiCittc2dzdHIgIkUzNjM6IHZ6b3JlayB6cPlzb2JpbCBw+GV0Zehlbu0geuFzb2Ju7Wt1IgorCisjOiByZWdleHAuYzozMDg3Cittc2dpZCAiRXh0ZXJuYWwgc3VibWF0Y2hlczpcbiIKK21zZ3N0ciAiVm7saprtIHBvZPhhemVu6SBzaG9keTpcbiIKKworIzogc2NyZWVuLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIrLS0lM2xkIGxpbmVzIGZvbGRlZCAiCittc2dzdHIgInBv6GV0IPjhZGv5IHYgeuFoeWJ1OiAlM2xkIgorCisjOiBzY3JlZW4uYzo3NDI2Cittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgVlJFUExBQ0UiCisKKyM6IHNjcmVlbi5jOjc0MzAKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIFJFUExBQ0UiCisKKyM6IHNjcmVlbi5jOjc0MzUKK21zZ2lkICIgUkVWRVJTRSIKK21zZ3N0ciAiIFJFVkVSU0UiCisKKyM6IHNjcmVlbi5jOjc0MzcKK21zZ2lkICIgSU5TRVJUIgorbXNnc3RyICIgSU5TRVJUIgorCisjOiBzY3JlZW4uYzo3NDQwCittc2dpZCAiIChpbnNlcnQpIgorbXNnc3RyICIgKGluc2VydCkiCisKKyM6IHNjcmVlbi5jOjc0NDIKK21zZ2lkICIgKHJlcGxhY2UpIgorbXNnc3RyICIgKHJlcGxhY2UpIgorCisjOiBzY3JlZW4uYzo3NDQ0Cittc2dpZCAiICh2cmVwbGFjZSkiCittc2dzdHIgIiAodnJlcGxhY2UpIgorCisjOiBzY3JlZW4uYzo3NDQ3Cittc2dpZCAiIEhlYnJldyIKK21zZ3N0ciAiIGhlYnJlanNr/SIKKworIzogc2NyZWVuLmM6NzQ1NQorbXNnaWQgIiAobGFuZykiCittc2dzdHIgIiAobGFuZykiCisKKyM6IHNjcmVlbi5jOjc0NTgKK21zZ2lkICIgKHBhc3RlKSIKK21zZ3N0ciAiIChwYXN0ZSkiCisKKyM6IHNjcmVlbi5jOjc0NjQKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIgU0hPRFkiCisKKyM6IHNjcmVlbi5jOjc0NjYKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgVklaVcFMTs0iCisKKyM6IHNjcmVlbi5jOjc0NjgKK21zZ2lkICIgQkxPQ0siCittc2dzdHIgIiBCTE9LIgorCisjOiBzY3JlZW4uYzo3NDcwCittc2dpZCAiIExJTkUiCittc2dzdHIgIiDYwURFSyIKKworIzogc2NyZWVuLmM6NzQ4MyBzY3JlZW4uYzo3NTM3Cittc2dpZCAicmVjb3JkaW5nIgorbXNnc3RyICJuYWhy4XbhbSIKKworIzogc2VhcmNoLmM6MzYKK21zZ2lkICJzZWFyY2ggaGl0IFRPUCwgY29udGludWluZyBhdCBCT1RUT00iCittc2dzdHIgImhsZWThbu0gZG9z4WhsbyB6YejhdGt1LCBwb2tyYehvduFu7SBvZCBrb25jZSIKKworIzogc2VhcmNoLmM6MzcKK21zZ2lkICJzZWFyY2ggaGl0IEJPVFRPTSwgY29udGludWluZyBhdCBUT1AiCittc2dzdHIgImhsZWThbu0gZG9z4WhsbyBrb25jZSwgcG9rcmHob3bhbu0gb2QgemHo4XRrdSIKKworIzogc2VhcmNoLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IE5lcPjtcHVzdG79IGhsZWRhbv0g+GV07HplYzogJXMiCisKKyM6IHNlYXJjaC5jOjc0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzg0OiBzZWFyY2ggaGl0IFRPUCB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODQ6IGhsZWRhbv0gZG9z4WhsbyB6YejhdGt1IGJleiBuYWxlemVu7SAlcyIKKworIzogc2VhcmNoLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODU6IHNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NTogaGxlZGFu/SBkb3PhaGxvIGtvbmNlIGJleiBuYWxlemVu7SAlcyIKKworIzogc2VhcmNoLmM6MTEwNworbXNnaWQgIkUzODY6IEV4cGVjdGVkICc/JyBvciAnLycgIGFmdGVyICc7JyIKK21zZ3N0ciAiRTM4NjogUG8gJzsnIG/oZWvhduFtICc/JyBuZWJvICcvJyIKKworIzogc2VhcmNoLmM6MzQ3NgorbXNnaWQgIiAoaW5jbHVkZXMgcHJldmlvdXNseSBsaXN0ZWQgbWF0Y2gpIgorbXNnc3RyICIgKHboZXRu7CBqaZ4gdnlwc2Fu/WNoIHNob2QpIgorCisjLiBjdXJzb3IgYXQgc3RhdHVzIGxpbmUKKyM6IHNlYXJjaC5jOjM0OTYKK21zZ2lkICItLS0gSW5jbHVkZWQgZmlsZXMgIgorbXNnc3RyICItLS0gVmxvnmVu6SBzb3Vib3J5IgorCisjOiBzZWFyY2guYzozNDk4Cittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAiIG5lbmFsZXplbnkiCisKKyM6IHNlYXJjaC5jOjM0OTkKK21zZ2lkICJpbiBwYXRoIC0tLVxuIgorbXNnc3RyICJ2IGNlc3TsIC0tLVxuIgorCisjOiBzZWFyY2guYzozNTM4Cittc2dpZCAiICAoQWxyZWFkeSBsaXN0ZWQpIgorbXNnc3RyICIgIChKaZ4gdnlwc+FubykiCisKKyM6IHNlYXJjaC5jOjM1NDAKK21zZ2lkICIgIE5PVCBGT1VORCIKK21zZ3N0ciAiIE5FTkFMRVpFTlkiCisKKyM6IHNlYXJjaC5jOjM1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiCittc2dzdHIgIlByb2hsZWThduFtIHZsb55lbukgc291Ym9yeTogJXMiCisKKyM6IHNlYXJjaC5jOjM4MTAKK21zZ2lkICJFMzg3OiBNYXRjaCBpcyBvbiBjdXJyZW50IGxpbmUiCittc2dzdHIgIkUzODc6IFNob2RhIGplIG5hIGFrdHXhbG7tbSD44WRrdSIKKworIzogc2VhcmNoLmM6Mzk1MAorbXNnaWQgIkFsbCBpbmNsdWRlZCBmaWxlcyB3ZXJlIGZvdW5kIgorbXNnc3RyICJWmmVjaG55IHZsb55lbukgc291Ym9yeSBieWx5IG5hbGV6ZW55IgorCisjOiBzZWFyY2guYzozOTUyCittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIo7hZG7pIHZsb55lbukgc291Ym9yeSIKKworIzogc2VhcmNoLmM6Mzk2OAorbXNnaWQgIkUzODg6IENvdWxkbid0IGZpbmQgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRTM4ODogTmVsemUgbmFs6Xp0IGRlZmluaWNpIgorCisjOiBzZWFyY2guYzozOTcwCittc2dpZCAiRTM4OTogQ291bGRuJ3QgZmluZCBwYXR0ZXJuIgorbXNnc3RyICJFMzg5OiBOZWx6ZSBuYWzpenQgdnpvcmVrIgorCisjOiBzeW50YXguYzoyOTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTA6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMzkwOiBuZXD47XB1c3Ru/SBhcmd1bWVudDogJXMiCisKKyM6IHN5bnRheC5jOjMxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTE6IFN5bnRha3RpY2vhIHNlc3RhdmEgJXMgbmVleGlzdHVqZSIKKworIzogc3ludGF4LmM6MzMzMgorbXNnaWQgIk5vIFN5bnRheCBpdGVtcyBkZWZpbmVkIGZvciB0aGlzIGJ1ZmZlciIKK21zZ3N0ciAiUHJvIHRlbnRvIGJ1ZmZlciBuZWpzb3UgZGVmaW5vduFueSCe4WRu6SBw+GVkbex0eSBzeW50YXhlIgorCisjOiBzeW50YXguYzozMzQwCittc2dpZCAic3luY2luZyBvbiBDLXN0eWxlIGNvbW1lbnRzIgorbXNnc3RyICJzeW5jaHJvbml6dWppIGtvbWVudOH4ZSB2IEMgc3R5bHUiCisKKyM6IHN5bnRheC5jOjMzNDgKK21zZ2lkICJubyBzeW5jaW5nIgorbXNnc3RyICKe4WRu4SBzeW5jaHJvbml6YWNlIgorCisjOiBzeW50YXguYzozMzUxCittc2dpZCAic3luY2luZyBzdGFydHMgIgorbXNnc3RyICJzeW5jaHJvbml6YWNlIHph6O1u4SAiCisKKyM6IHN5bnRheC5jOjMzNTMgc3ludGF4LmM6MzQyMgorbXNnaWQgIiBsaW5lcyBiZWZvcmUgdG9wIGxpbmUiCittc2dzdHIgIiD44WRr+SBw+GVkIHph6OF0a2VtIgorCisjOiBzeW50YXguYzozMzU3Cittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggc3luYyBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gUG9sb55reSBzeW5jaHJvbml6YWNlIHN5bnRheGUgLS0tIgorCisjOiBzeW50YXguYzozMzYwCittc2dpZCAiIgorIlxuIgorInN5bmNpbmcgb24gaXRlbXMiCittc2dzdHIgIiIKKyJcbiIKKyJzeW5jaHJvbml6dWppIHD4ZWRt7HR5IgorCisjOiBzeW50YXguYzozMzY1Cittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFD4ZWRt7HR5IHN5bnRheGUgLS0tIgorCisjOiBzeW50YXguYzozMzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTI6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkyOiBTeW50YWt0aWNr4SBzZXN0YXZhICVzIG5lZXhpc3R1amUiCisKKyM6IHN5bnRheC5jOjM0MTIKK21zZ2lkICJtaW5pbWFsICIKK21zZ3N0ciAibWluaW3hbG7tICIKKworIzogc3ludGF4LmM6MzQxOQorbXNnaWQgIm1heGltYWwgIgorbXNnc3RyICJtYXhpbeFsbu0gIgorCisjOiBzeW50YXguYzo0MDQ3Cittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzkzOiBncm91cFt0XWhlcmUgbmVzbe0gYv10IG5hIHRvbXRvIG3tc3TsIgorCisjOiBzeW50YXguYzo0MDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTQ6IERpZG4ndCBmaW5kIHJlZ2lvbiBpdGVtIGZvciAlcyIKK21zZ3N0ciAiRTM5NDogUHJvICVzIGNoeWLtIHBvbG+ea2EgcmVnaW9udSIKKworIzogc3ludGF4LmM6NDA5OQorbXNnaWQgIkUzOTU6IGNvbnRhaW5zIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk1OiBvYnNhaHVqZSBhcmd1bWVudHksIGt0ZXLpIHpkZSBuZWpzb3UgcG92b2xlbnkiCisKKyM6IHN5bnRheC5jOjQxMTAKK21zZ2lkICJFMzk2OiBjb250YWluZWRpbiBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5Njogb2JzYWh1amUgYXJndW1lbnR5LCBrdGVy6SB6ZGUgbmVqc291IHBvdm9sZW55IgorCisjOiBzeW50YXguYzo0MTg4Cittc2dpZCAiRTM5NzogRmlsZW5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUzOTc6IFZ5nmFkb3bhbiBu4XpldiBzb3Vib3J1IgorCisjOiBzeW50YXguYzo0NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODogQ2h5Yu0gJz0nOiAlcyIKKworIzogc3ludGF4LmM6NDY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogUPjtbGmaIG3hbG8gYXJndW1lbnT5OiBvYmxhc3Qgc3ludGF4ZSAlcyIKKworIzogc3ludGF4LmM6NTAxMQorbXNnaWQgIkU0MDA6IE5vIGNsdXN0ZXIgc3BlY2lmaWVkIgorbXNnc3RyICJFNDAwOiBOZWJ5bGEgemFk4W5hIJ7hZG7hIHNlc3RhdmEiCisKKyM6IHN5bnRheC5jOjUwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMTogUGF0dGVybiBkZWxpbWl0ZXIgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQwMTogT2Rk7GxvdmHoIHZ6b3JrdSAlcyBuZW5hbGV6ZW4iCisKKyM6IHN5bnRheC5jOjUxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMjogR2FyYmFnZSBhZnRlciBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRTQwMjogQ2h5YmEgemEgdnpvcmtlbSAlcyIKKworIzogc3ludGF4LmM6NTIwNQorbXNnaWQgIkU0MDM6IHN5bnRheCBzeW5jOiBsaW5lIGNvbnRpbnVhdGlvbnMgcGF0dGVybiBzcGVjaWZpZWQgdHdpY2UiCittc2dzdHIgIkU0MDM6IHN5bmNocm9uaXphY2Ugc3ludGF4ZTogdnpvcmVrIHBva3Jh6G924W7tIPjhZGv5IHphZOFuIGR2YWty4XQiCisKKyM6IHN5bnRheC5jOjUyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNDogSWxsZWdhbCBhcmd1bWVudHM6ICVzIgorbXNnc3RyICJFNDA0OiBuZXD47XB1c3Ru/SBhcmd1bWVudDogJXMiCisKKyM6IHN5bnRheC5jOjUzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNTogTWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQwNTogQ2h5Yu0gcm92bu10a286ICVzIgorCisjOiBzeW50YXguYzo1MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDY6IEVtcHR5IGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQwNjogUHLhemRu/SBhcmd1bWVudDogJXMiCisKKyM6IHN5bnRheC5jOjUzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNzogJXMgbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTQwNzogJXMgemRlIG5lbu0gcG92b2xlbm8iCisKKyM6IHN5bnRheC5jOjUzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwODogJXMgbXVzdCBiZSBmaXJzdCBpbiBjb250YWlucyBsaXN0IgorbXNnc3RyICJFNDA4OiAlcyBtdXPtIGL9dCBwcnZu7SB2ICdjb250YWlucycgc2V6bmFtdSIKKworIzogc3ludGF4LmM6NTQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA5OiBVbmtub3duIGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFNDA5OiBOZXpu4W3hIG7hemV2IHNrdXBpbnk6ICVzIgorCisjOiBzeW50YXguYzo1NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTA6IEludmFsaWQgOnN5bnRheCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTQxMDogY2h5Ym79IHBvZPhhemVu/SBw+O1rYXogOnN5bnRheCA6ICVzICIKKworIzogc3ludGF4LmM6NjAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDExOiBoaWdobGlnaHQgZ3JvdXAgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQxMTogc2t1cGluYSB6dv1yYXpu7G7tICVzIG5lYnlsYSBuYWxlemVuYSIKKworIzogc3ludGF4LmM6NjA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEyOiBOb3QgZW5vdWdoIGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMjogUPjtbGmaIG3hbG8gYXJndW1lbnT5OiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTM6IFRvbyBtYW55IGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMzogUPjtbGmaIG1ub2hvIGFyZ3VtZW50+TogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjA3NQorbXNnaWQgIkU0MTQ6IGdyb3VwIGhhcyBzZXR0aW5ncywgaGlnaGxpZ2h0IGxpbmsgaWdub3JlZCIKK21zZ3N0ciAiRTQxNDogc2t1cGluYSBqZSBuYXN0YXZlbmEsIG9ka2F6IG5hIHp2/XJhevJvdmFj7SBza3VwaW51IGlnbm9yb3bhbiIKKworIzogc3ludGF4LmM6NjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE1OiB1bmV4cGVjdGVkIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE1OiBuZehla2Fu6SByb3Zu7XRrbyA6ICVzIgorCisjOiBzeW50YXguYzo2MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IGNoeWJu6SByb3Zu7XRrbzogJXMiCisKKyM6IHN5bnRheC5jOjYyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MTc6IGNoeWLtIGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6NjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE4OiBJbGxlZ2FsIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTQxODogbmVw+O1wdXN0buEgaG9kbm90YTogJXMiCisKKyM6IHN5bnRheC5jOjY0MTgKK21zZ2lkICJFNDE5OiBGRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDE5OiBiYXJ2YSBwb3D4ZWTtIG5lbu0gem7hbeEiCisKKyM6IHN5bnRheC5jOjY0MjkKK21zZ2lkICJFNDIwOiBCRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDIwOiBiYXJ2YSBwb3D4ZWTtIG5lbu0gem7hbeEiCisKKyM6IHN5bnRheC5jOjY0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMTogQ29sb3IgbmFtZSBvciBudW1iZXIgbm90IHJlY29nbml6ZWQ6ICVzIgorbXNnc3RyICJFNDIxOiBu4XpldiDoaSDo7XNsbyBiYXJ2eSAlcyBuZWJ5bG8gcm96cG96buFubyIKKworIzogc3ludGF4LmM6NjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIyOiB0ZXJtaW5hbCBjb2RlIHRvbyBsb25nOiAlcyIKK21zZ3N0ciAiRTQyMjogdGVybWlu4Wxvdv0ga/NkICVzIGplIHD47WxpmiBkbG91aP0iCisKKyM6IHN5bnRheC5jOjY3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMzogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MjM6IG5lcPjtcHVzdG79IGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6NzI2NAorbXNnaWQgIkU0MjQ6IFRvbyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBpbiB1c2UiCittc2dzdHIgIiIKKyJFNDI0OiBKZSBwb3We7Xbhbm8gcPjtbGmaIHZlbGvpIG1ub55zdHbtIG9kbGmabv1jaCB6dv1yYXryb3ZhY+1jaCBhdHJpYnV0+SIKKworIzogdGFnLmM6OTAKK21zZ2lkICJhdCBib3R0b20gb2YgdGFnIHN0YWNrIgorbXNnc3RyICJrb25lYyBzZXpuYW11IHRhZ/kiCisKKyM6IHRhZy5jOjkxCittc2dpZCAiYXQgdG9wIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiemHo4XRlayBzZXpuYW11IHRhZ/kiCisKKyM6IHRhZy5jOjM5MgorbXNnaWQgIkU0MjU6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI1OiBQ+GVkIHBydm7tIHZ5aG92dWrtY+0gdGFnIG5lbHplIHD4ZXNrb+hpdCIKKworIzogdGFnLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjY6IHRhZyBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDI2OiB0YWcgJXMgbmVuYWxlemVuIgorCisjOiB0YWcuYzo1NDUKK21zZ2lkICIgICMgcHJpIGtpbmQgdGFnIgorbXNnc3RyICIgICMgcHJpIHR5cCB0YWciCisKKyM6IHRhZy5jOjU0OAorbXNnaWQgImZpbGVcbiIKK21zZ3N0ciAic291Ym9yXG4iCisKKyMuCisjLiAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMuICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjOiB0YWcuYzo3MDYKK21zZ2lkICJFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOiAiCittc2dzdHIgIlphZGVqdGUg6O1zbG8gKDxDUj4gcHJvIHVrb27oZW7tKTogIgorCisjOiB0YWcuYzo3NDYKK21zZ2lkICJFNDI3OiBUaGVyZSBpcyBvbmx5IG9uZSBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjc6IFZ5aG92dWplIHBvdXplIGplZGVuIHRhZyIKKworIzogdGFnLmM6NzQ4Cittc2dpZCAiRTQyODogQ2Fubm90IGdvIGJleW9uZCBsYXN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyODogWmEgcG9zbGVkbu0gdnlob3Z1au1j7SB0YWcgbmVsemUgcPhlc2tv6Gl0IgorCisjOiB0YWcuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlNvdWJvciBcIiVzXCIgbmVleGlzdHVqZSIKKworIy4gR2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgdGFncworIzogdGFnLmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAlZCBvZiAlZCVzIgorbXNnc3RyICJ0YWcgJWQgeiBjZWxrb3bpaG8gcG/odHUgJWQlcyIKKworIzogdGFnLmM6NzgzCittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiBuZWJvIHbtY2UiCisKKyM6IHRhZy5jOjc4NQorbXNnaWQgIiAgVXNpbmcgdGFnIHdpdGggZGlmZmVyZW50IGNhc2UhIgorbXNnc3RyICIgIFBvdZ7tduFtIHRhZyBzIHDtc21lbnkgamlu6SB2ZWxpa29zdGkhIgorCisjOiB0YWcuYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyOTogRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkU0Mjk6IFwiJXNcIiBuZWV4aXN0dWplIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRhZy5jOjg5NworbXNnaWQgIiIKKyJcbiIKKyIgICMgVE8gdGFnICAgICAgICAgRlJPTSBsaW5lICBpbiBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgICMgQ81MIHRhZyAgICAgICAgU1RBUlQg+OFkZWsgIHYgc291Ym9ydS90ZXh0dSIKKworIzogdGFnLmM6MTE0NAorbXNnaWQgIkxpbmVhciB0YWcgc2VhcmNoIgorbXNnc3RyICJMaW5l4XJu7SBobGVk4W7tIHRhZ3UiCisKKyM6IHRhZy5jOjExNDYKK21zZ2lkICJCaW5hcnkgdGFnIHNlYXJjaCIKK21zZ3N0ciAiQmlu4XJu7SBobGVk4W7tIHRhZ3UiCisKKyM6IHRhZy5jOjExNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIHRhZ3MgZmlsZSAlcyIKK21zZ3N0ciAiUHJvaGxlZOF24W0gc291Ym9yIHRhZ/kgJXMiCisKKyM6IHRhZy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IFNvdWJvciB0YWf5ICVzIGJ5bCBv+GV64W5cbiIKKworIzogdGFnLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogQ2h5YmEgZm9ybeF0dSB2IHNvdWJvcnUgdGFn+SBcIiVzXCIiCisKKyM6IHRhZy5jOjE4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICJQ+GVkIGJhanRlbSAlbGQiCisKKyM6IHRhZy5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMjogVGFncyBmaWxlIG5vdCBzb3J0ZWQ6ICVzIgorbXNnc3RyICJFNDMyOiBPYnNhaCBzb3Vib3IgdGFn+SAlcyBuZW7tIHNl+GF6ZW4iCisKKyMuIG5ldmVyIG9wZW5lZCBhbnkgdGFncyBmaWxlCisjOiB0YWcuYzoxOTExCittc2dpZCAiRTQzMzogTm8gdGFncyBmaWxlIgorbXNnc3RyICJFNDMzOiCO4WRu/SBzb3Vib3IgdGFn+SIKKworIzogdGFnLmM6MjU4MworbXNnaWQgIkU0MzQ6IENhbid0IGZpbmQgdGFnIHBhdHRlcm4iCittc2dzdHIgIkU0MzQ6IE5lbHplIG5hau10IHZ6b3JlayB0YWf5IgorCisjOiB0YWcuYzoyNTk0Cittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiBUYWcgbmVsemUgbmFs6Xp0LCBwb3V6ZSBo4WThbSEiCisKKyM6IHRlcm0uYzoxNzIzCittc2dpZCAiJyBub3Qga25vd24uIEF2YWlsYWJsZSBidWlsdGluIHRlcm1pbmFscyBhcmU6IgorbXNnc3RyICInIG5lbu0gem7hbS4gRG9zdHVwbukgdmVzdGF27G7pIHRlcm1pbuFseToiCisKKyM6IHRlcm0uYzoxNzQ3Cittc2dpZCAiZGVmYXVsdGluZyB0byAnIgorbXNnc3RyICJpbXBsaWNpdG7tIHRlcm1pbuFsICciCisKKyM6IHRlcm0uYzoyMTAwCittc2dpZCAiQ2Fubm90IG9wZW4gdGVybWNhcCBmaWxlIgorbXNnc3RyICJOZWx6ZSBvdGV2+O10IHRlcm1jYXAiCisKKyM6IHRlcm0uYzoyMTAzCittc2dpZCAiVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1pbmZvIgorbXNnc3RyICJUZXJtaW5mbyBuZW9ic2FodWplIHBvbG+ea3UgcHJvIHRlbnRvIHRlcm1pbuFsIgorCisjOiB0ZXJtLmM6MjEwNQorbXNnaWQgIlRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJUZXJtY2FwIG5lb2JzYWh1amUgcG9sb55rdSBwcm8gdGVudG8gdGVybWlu4WwiCisKKyM6IHRlcm0uYzoyMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzY6IE5vIFwiJXNcIiBlbnRyeSBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNDM2OiBUZXJtY2FwIG5lb2JzYWh1amUgcG9sb55rdSBwcm8gXCIlc1wiIgorCisjOiB0ZXJtLmM6MjczOAorbXNnaWQgIkU0Mzc6IHRlcm1pbmFsIGNhcGFiaWxpdHkgXCJjbVwiIHJlcXVpcmVkIgorbXNnc3RyICJFNDM3OiBUZXJtaW7hbCBtdXPtIG3tdCBzY2hvcG5vc3QgXCJjbVwiIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0ODc4Cittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBLbOF2ZXN5IHRlcm1pbuFsdSAtLS0iCisKKyM6IHVpLmM6MjQwCittc2dpZCAibmV3IHNoZWxsIHN0YXJ0ZWRcbiIKK21zZ3N0ciAic3B1mnTsbiBub3b9IHNoZWxsXG4iCisKKyM6IHVpLmM6MTcwNQorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICJWaW06IGNoeWJhIHD4aSDodGVu7SB2c3R1cHUsIGtvbujtbS4uLlxuIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogdW5kby5jOjM1MQorbXNnaWQgIk5vIHVuZG8gcG9zc2libGU7IGNvbnRpbnVlIGFueXdheSIKK21zZ3N0ciAib2RzdHJhbuxu7SB6bexuIG5lbu0gbW+ebuk7IGNoY2V0ZSBw+GVzdG8gcG9rcmHob3ZhdCIKKworIzogdW5kby5jOjUwNgorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IOjtc2xhIPjhZGv5IGpzb3UgY2h5Ym7hIgorCisjOiB1bmRvLmM6Njc1Cittc2dpZCAiMSBjaGFuZ2UiCittc2dzdHIgInBv6GV0IHpt7G46IDEiCisKKyM6IHVuZG8uYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYW5nZXMiCittc2dzdHIgInBv6GV0IHpt7G46ICVsZCIKKworIzogdW5kby5jOjcyMQorbXNnaWQgIkU0Mzk6IHVuZG8gbGlzdCBjb3JydXB0IgorbXNnc3RyICJFNDM5OiB64XpuYW0gbyB6bexu4WNoIHBvmmtvemVuIgorCisjOiB1bmRvLmM6NzUxCittc2dpZCAiRTQ0MDogdW5kbyBsaW5lIG1pc3NpbmciCittc2dzdHIgIkU0NDA6IGNoeWLtIHVuZG8g+OFkZWsiCisKKyMuIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMKKyM6IHZlcnNpb24uYzo2NTUKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIxNi8zMiBiaXRvduEgR1VJIHZlcnplIHBybyBNUyBXaW5kb3dzIgorCisjOiB2ZXJzaW9uLmM6NjU3Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzIgYml0b3bhIEdVSSB2ZXJ6ZSBwcm8gTVMgV2luZG93cyIKKworIzogdmVyc2lvbi5jOjY2MAorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiIHZlIFdpbjMycyByZZ5pbXUiCisKKyM6IHZlcnNpb24uYzo2NjIKK21zZ2lkICIgd2l0aCBPTEUgc3VwcG9ydCIKK21zZ3N0ciAiIHMgT0xFIHBvZHBvcm91IgorCisjOiB2ZXJzaW9uLmM6NjY1Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IGNvbnNvbGUgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjMyIGJpdG924SB2ZXJ6ZSBwcm8gTVMgV2luZG93cyBrb256b2x1IgorCisjOiB2ZXJzaW9uLmM6NjY5Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYgYml0IHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIxNiBiaXRvduEgdmVyemUgcHJvIE1TIFdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzo2NzMKK21zZ2lkICIiCisiXG4iCisiMzIgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzIgYml0b3bhIHZlcnplIHBybyBNUyBXaW5kb3dzIgorCisjOiB2ZXJzaW9uLmM6Njc1Cittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2IGJpdG924SBNUy1ET1MgdmVyemUiCisKKyM6IHZlcnNpb24uYzo2ODEKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIHZlcnplIgorCisjOiB2ZXJzaW9uLmM6NjgzCittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFggdmVyemUiCisKKyM6IHZlcnNpb24uYzo2ODYKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIHZlcnplIgorCisjOiB2ZXJzaW9uLmM6NjkxCittc2dpZCAiIgorIlxuIgorIlJJU0MgT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlJJU0MgT1MgdmVyemUiCisKKyM6IHZlcnNpb24uYzo3MDEKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisiUG91nml06SB64XBsYXR5OiAiCisKKyM6IHZlcnNpb24uYzo3MjgKK21zZ2lkICIiCisiXG4iCisiQ29tcGlsZWQgIgorbXNnc3RyICIiCisiXG4iCisicPhlbG+eaWwgIgorCisjOiB2ZXJzaW9uLmM6NzMxCittc2dpZCAiYnkgIgorbXNnc3RyICIgIgorCisjOiB2ZXJzaW9uLmM6NzQzCittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJtYXhpbeFsbu0gdmVyemUiCisKKyM6IHZlcnNpb24uYzo3NDYKK21zZ2lkICIiCisiXG4iCisiQmlnIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisidmVsa+EgdmVyemUgIgorCisjOiB2ZXJzaW9uLmM6NzQ5Cittc2dpZCAiIgorIlxuIgorIk5vcm1hbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIm5vcm3hbG7tIHZlcnplIgorCisjOiB2ZXJzaW9uLmM6NzUyCittc2dpZCAiIgorIlxuIgorIlNtYWxsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisibWFs4SB2ZXJ6ZSAiCisKKyM6IHZlcnNpb24uYzo3NTQKK21zZ2lkICIiCisiXG4iCisiVGlueSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIm1pbmlt4Wxu7SB2ZXJ6ZSIKKworIzogdmVyc2lvbi5jOjc2MAorbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAiYmV6IGdyYWZpY2vpaG8gcm96aHJhbu0iCisKKyM6IHZlcnNpb24uYzo3NjQKK21zZ2lkICJ3aXRoIEdUSy1HTk9NRSBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBHVEstR05PTUUiCisKKyM6IHZlcnNpb24uYzo3NjYKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBHVEsiCisKKyM6IHZlcnNpb24uYzo3NzAKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBYMTEtTW90aWYiCisKKyM6IHZlcnNpb24uYzo3NzMKK21zZ2lkICJ3aXRoIFgxMS1BdGhlbmEgR1VJLiIKK21zZ3N0ciAiUyByb3pocmFu7W0gWDExLUF0aGVuYSIKKworIzogdmVyc2lvbi5jOjc3NgorbXNnaWQgIndpdGggQmVPUyBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBCZU9TIgorCisjOiB2ZXJzaW9uLmM6Nzc5Cittc2dpZCAid2l0aCBQaG90b24gR1VJLiIKK21zZ3N0ciAicyByb3pocmFu7W0gUGhvdG9uIgorCisjOiB2ZXJzaW9uLmM6NzgyCittc2dpZCAid2l0aCBHVUkuIgorbXNnc3RyICJzIGdyYWZpY2v9bSByb3pocmFu7W0iCisKKyM6IHZlcnNpb24uYzo3ODUKK21zZ2lkICJ3aXRoIENhcmJvbiBHVUkuIgorbXNnc3RyICJzIGdyYWZpY2v9bSByb3pocmFu7W0gQ2FyYm9uIgorCisjOiB2ZXJzaW9uLmM6Nzg4Cittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICJzIGdyYWZpY2v9bSByb3pocmFu7W0gQ29jb2EiCisKKyM6IHZlcnNpb24uYzo3OTEKK21zZ2lkICJ3aXRoIChjbGFzc2ljKSBHVUkuIgorbXNnc3RyICJzIChjbGFzaWNr/W0pIGdyYWZpY2v9bSByb3pocmFu7W0iCisKKyM6IHZlcnNpb24uYzo4MDIKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIgVmxhc3Rub3N0aSB6YWhybnV06SAoKykgYSBuZXphaHJudXTpICgtKTpcbiIKKworIzogdmVyc2lvbi5jOjgxNAorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgc3lzdOltb3b9IHZpbXJjIHNvdWJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo4MTkKK21zZ2lkICIgICAgIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgdZ5pdmF0ZWxza/0gdmltcmMgc291Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjgyNAorbXNnaWQgIiAybmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIGRydWj9IHWeaXZhdGVsc2v9IHZpbXJjIHNvdWJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo4MjkKK21zZ2lkICIgM3JkIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiB0+GV07SB1nml2YXRlbHNr/SB2aW1yYyBzb3Vib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODM0Cittc2dpZCAiICAgICAgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICB1nml2YXRlbHNr/SBleHJjIHNvdWJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo4MzkKK21zZ2lkICIgIDJuZCB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgZHJ1aP0gdZ5pdmF0ZWxza/0gZXhyYyBzb3Vib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODQ1Cittc2dpZCAiICBzeXN0ZW0gZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgIHN5c3TpbW92/SBndmltcmMgc291Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjg0OQorbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIHWeaXZhdGVsc2v9IGd2aW1yYyBzb3Vib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODUzCittc2dpZCAiMm5kIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICJkcnVo/SB1nml2YXRlbHNr/SBndmltcmMgc291Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjg1OAorbXNnaWQgIjNyZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAidPhldO0gdZ5pdmF0ZWxza/0gZ3ZpbXJjIHNvdWJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo4NjUKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiAgICBzeXN06W1vdv0gc291Ym9yIHMgbWVudTogXCIiCisKKyM6IHZlcnNpb24uYzo4NzMKK21zZ2lkICIgIGZhbGwtYmFjayBmb3IgJFZJTTogXCIiCittc2dzdHIgIiAgaW1wbGljaXRu7SBob2Rub3RhICRWSU06XCIiCisKKyM6IHZlcnNpb24uYzo4NzkKK21zZ2lkICIgZi1iIGZvciAkVklNUlVOVElNRTogXCIiCittc2dzdHIgIiAgaW1wbGljaXRu7SBob2Rub3RhICRWSU1SVU5USU1FOiBcIiIKKworIzogdmVyc2lvbi5jOjg4MworbXNnaWQgIkNvbXBpbGF0aW9uOiAiCittc2dzdHIgIlD4ZWtsYWQ6ICIKKworIzogdmVyc2lvbi5jOjg4OQorbXNnaWQgIkNvbXBpbGVyOiAiCittc2dzdHIgIlD4ZWtsYWRh6DogIgorCisjOiB2ZXJzaW9uLmM6ODk0Cittc2dpZCAiTGlua2luZzogIgorbXNnc3RyICJMaW5rdWppOiAiCisKKyM6IHZlcnNpb24uYzo4OTkKK21zZ2lkICIgIERFQlVHIEJVSUxEIgorbXNnc3RyICIgIFBPRFBPUkEgTEFEzE7NIgorCisjOiB2ZXJzaW9uLmM6OTM0Cittc2dpZCAiVklNIC0gVmkgSU1wcm92ZWQiCittc2dzdHIgIlZJTSAtIFZpIElNcHJvdmVkIgorCisjOiB2ZXJzaW9uLmM6OTM2Cittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgInZlcnplICIKKworIzogdmVyc2lvbi5jOjkzNworbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAiQXV0b3I6IEJyYW0gTW9vbGVuYWFyIGEgZGFsmu0iCisKKyM6IHZlcnNpb24uYzo5MzgKK21zZ2lkICJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIgorbXNnc3RyICJWaW0gamUgdm9sbuwgmmn4aXRlbG79IHByb2dyYW0gcyBvdGV2+GVu/W0gemRyb2pvdv1tIGvzZGVtIgorCisjOiB2ZXJzaW9uLmM6OTQwCittc2dpZCAiSGVscCBwb29yIGNoaWxkcmVuIGluIFVnYW5kYSEiCittc2dzdHIgIlBvbW96dGUgY2h1ZP1tIGTsdGVtIHYgVWdhbmTsISIKKworIzogdmVyc2lvbi5jOjk0MQorbXNnaWQgInR5cGUgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgInBvZHJvYm7saprtIGluZm9ybWFjZSB67XNr4XRlIHBvbW9j7SA6aGVscCBpY2NmPEVudGVyPiIKKworIzogdmVyc2lvbi5jOjk0MworbXNnaWQgInR5cGUgIDpxPEVudGVyPiAgICAgICAgICAgICAgIHRvIGV4aXQgICAgICAgICAiCittc2dzdHIgInphZGVqdGUgOnE8RW50ZXI+ICAgICAgICAgICAgIHBybyB1a29u6GVu7SBwcm9ncmFtdSIKKworIzogdmVyc2lvbi5jOjk0NAorbXNnaWQgInR5cGUgIDpoZWxwPEVudGVyPiAgb3IgIDxGMT4gIGZvciBvbi1saW5lIGhlbHAiCittc2dzdHIgInphZGVqdGUgOmhlbHA8RW50ZXI+ICDoaSA8RjE+IHBybyBu4XBvduxkdSIKKworIzogdmVyc2lvbi5jOjk0NQorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgInphZGVqdGUgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICBwcm8gaW5mb3JtYWNlIG8gdmVyemkgNiIKKworIzogdmVyc2lvbi5jOjk0OAorbXNnaWQgIlJ1bm5pbmcgaW4gVmkgY29tcGF0aWJsZSBtb2RlIgorbXNnc3RyICJC7J7tbSB2IHJlnmltdSBrb21wYXRpYmlsaXR5IHMgVmkiCisKKyM6IHZlcnNpb24uYzo5NDkKK21zZ2lkICJ0eXBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBmb3IgVmltIGRlZmF1bHRzIgorbXNnc3RyICJ6YWRlanRlIDpzZXQgbm9jcDxFbnRlcj4gICAgIHBybyBpbXBsaWNpdG7tIG5hc3RhdmVu7SBWaW0iCisKKyM6IHZlcnNpb24uYzo5NTAKK21zZ2lkICJ0eXBlICA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJwb2Ryb2Ju7Gqa7SBpbmZvcm1hY2Ugeu1za+F0ZSBwb21vY+0gOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4iCisKKyM6IHZlcnNpb24uYzo5OTAKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICJWQVJPVsFOzTogZGV0ZWtvduFueSBXaW5kb3dzIDk1Lzk4L01FIgorCisjOiB2ZXJzaW9uLmM6OTkzCittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAiemFkZWp0ZSA6aGVscCB3aW5kb3dzOTU8RW50ZXI+IHBybyBwb2Ryb2Ju7Gqa7SBpbmZvcm1hY2UiCisKKyM6IHdpbmRvdy5jOjIwMQorbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiBOZW7tIJ7hZG7pIHByZXZpZXcgb2tubyBuZW7tIgorCisjOiB3aW5kb3cuYzo1NjgKK21zZ2lkICJFNDQyOiBDYW4ndCBzcGxpdCB0b3BsZWZ0IGFuZCBib3RyaWdodCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJFNDQyOiBPa25vIG5lbHplIHJvemTsbGl0IHrhcm92ZfIgdG9wbGVmdCBhIGJvdHJpZ2h0IgorCisjOiB3aW5kb3cuYzoxMzI3Cittc2dpZCAiRTQ0MzogQ2Fubm90IHJvdGF0ZSB3aGVuIGFub3RoZXIgd2luZG93IGlzIHNwbGl0IgorbXNnc3RyICJFNDQzOiBOZWx6ZSByb3RvdmF0LCBwb2t1ZCBqZSBqaW7pIG9rbm8gcm96ZOxsZW5vIgorCisjOiB3aW5kb3cuYzoxODEwCittc2dpZCAiRTQ0NDogQ2Fubm90IGNsb3NlIGxhc3Qgd2luZG93IgorbXNnc3RyICJFNDQ0OiBQb3NsZWRu7SBva25vIG5lbHplIHV6YXb47XQiCisKKyM6IHdpbmRvdy5jOjI0NzQKK21zZ2lkICJBbHJlYWR5IG9ubHkgb25lIHdpbmRvdyIKK21zZ3N0ciAiSmmeIGV4aXN0dWplIHBvdXplIGplZG5vIG9rbm8iCisKKyM6IHdpbmRvdy5jOjI1MjEKK21zZ2lkICJFNDQ1OiBPdGhlciB3aW5kb3cgY29udGFpbnMgY2hhbmdlcyIKK21zZ3N0ciAiRTQ0NTogSmlu6SBva25vIG9ic2FodWplIHpt7G55IgorCisjOiB3aW5kb3cuYzo0MzQxCittc2dpZCAiRTQ0NjogTm8gZmlsZSBuYW1lIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTQ0NjogUG9kIGt1cnpvcmVtIHNlIG5lbmFjaOF67SBu4XpldiBzb3Vib3J1IgorCisjOiB3aW5kb3cuYzo0NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDc6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTQ0NzogU291Ym9yIFwiJXNcIiBuZWx6ZSB2IHBhdGggbmFs6Xp0IgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjU4NgorbXNnaWQgIkVkaXQgd2l0aCAmbXVsdGlwbGUgVmltcyIKK21zZ3N0ciAiRWRpdGFjZSAmbXVsdGlwbGUgVmlteSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo1OTIKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgIkVkaXRhY2UgamVkbu1tICRWaW0gLWVtIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjYwNAorbXNnaWQgIkVkaXQgd2l0aCAmVmltIgorbXNnc3RyICJFZGl0YWNlICZWaW0gLWVtIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjYyOAorbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICJFZGl0YWNlIGV4aXN0dWrtY+1tIFZpbWVtIC0gJiIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo3NTIKK21zZ2lkICJFZGl0cyB0aGUgc2VsZWN0ZWQgZmlsZShzKSB3aXRoIFZpbSIKK21zZ3N0ciAiRWRpdGFjZSB2eWJyYW79Y2ggc291Ym9y+SBWaW1lbSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTEgLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjkKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwcm9jZXNzOiBDaGVjayBpZiBndmltIGlzIGluIHlvdXIgcGF0aCEiCittc2dzdHIgIkNoeWJhIHD4aSBzcG91mnTsbu0gcHJvY2VzdTogWmtvbnRyb2x1anRlIHpkYWxpIGplIGd2aW0gdiAkUEFUSCEiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6ODkyIC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTA2CisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjk3MAorbXNnaWQgImd2aW1leHQuZGxsIGVycm9yIgorbXNnc3RyICJjaHliYSBndmltZXh0LmRsbCIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDUKK21zZ2lkICJQYXRoIGxlbmd0aCB0b28gbG9uZyEiCittc2dzdHIgIk7hemV2ICh2IHBhdGgpIGplIHD47WxpmiBkbG91aP0iCisKKyM6IGdsb2JhbHMuaDo4NzgKK21zZ2lkICItLU5vIGxpbmVzIGluIGJ1ZmZlci0tIgorbXNnc3RyICItLUJ1ZmZlciBuZW9ic2FodWplIJ7hZG79IPjhZGVrLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTAxOQorbXNnaWQgIkNvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiUPjta2F6IHD4ZXJ1mmVuIgorCisjOiBnbG9iYWxzLmg6MTAyMAorbXNnaWQgIkFyZ3VtZW50IHJlcXVpcmVkIgorbXNnc3RyICJKZSB2eZ5hZG924W4gYXJndW1lbnQiCisKKyM6IGdsb2JhbHMuaDoxMDIxCittc2dpZCAiRTEwOiBcXCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgLywgPyBvciAmIgorbXNnc3RyICJFMTA6IHBvIFxcIGJ5IG3sbCBu4XNsZWRvdmF0IC8uID8gbmVibyAmIgorCisjOiBnbG9iYWxzLmg6MTAyMworbXNnaWQgIkUxMTogSW52YWxpZCBpbiBjb21tYW5kLWxpbmUgd2luZG93OyA8Q1I+IGV4ZWN1dGVzLCBDVFJMLUMgcXVpdHMiCittc2dzdHIgIiIKKyJFMTE6IENoeWJhIHYgb2tu7CBw+O1rYXpvdukg+OFka3k7IDxDUj4gcHJvIHNwdZp0mm7tLCBDVFJMLUMgcHJvIHVrb27oZW7tIgorCisjOiBnbG9iYWxzLmg6MTAyNQorbXNnaWQgIkUxMjogQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaCIKK21zZ3N0ciAiIgorIkUxMjogUPjta2F6IG5lbu0geiBleHJjL3ZpbXJjIHYgYWt0deFsbu1tIGFkcmVz4fhpIOhpIHD4aSBobGVk4W7tIHRhZ3UgIgorInBvdm9sZW4uIgorCisjOiBnbG9iYWxzLmg6MTAyNgorbXNnaWQgIkUxMzogRmlsZSBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTEzOiBTb3Vib3IgZXhpc3R1amUgKHBvdZ5panRlICEgcHJvIHZ5bnVjZW7tKSIKKworIzogZ2xvYmFscy5oOjEwMjcKK21zZ2lkICJDb21tYW5kIGZhaWxlZCIKK21zZ3N0ciAiUPjta2F6IHNlbGhhbCIKKworIzogZ2xvYmFscy5oOjEwMjgKK21zZ2lkICJJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiVm5pdPhu7SBjaHliYSIKKworIzogZ2xvYmFscy5oOjEwMjkKK21zZ2lkICJJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiUPhlcnWaZW5vIgorCisjOiBnbG9iYWxzLmg6MTAzMAorbXNnaWQgIkUxNDogSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFMTQ6IENoeWJu4SBhZHJlc2EiCisKKyM6IGdsb2JhbHMuaDoxMDMxCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAiQ2h5Ym79IGFyZ3VtZW50IgorCisjOiBnbG9iYWxzLmg6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiQ2h5Ym79IGFyZ3VtZW50OiAlcyIKKworIzogZ2xvYmFscy5oOjEwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246ICVzIgorbXNnc3RyICJFMTU6IENoeWJu/SB2/XJhejogJXMiCisKKyM6IGdsb2JhbHMuaDoxMDM2Cittc2dpZCAiRTE2OiBJbnZhbGlkIHJhbmdlIgorbXNnc3RyICJFMTY6IENoeWJu/SByb3pzYWgiCisKKyM6IGdsb2JhbHMuaDoxMDM3Cittc2dpZCAiSW52YWxpZCBjb21tYW5kIgorbXNnc3RyICJDaHlibv0gcPjta2F6IgorCisjOiBnbG9iYWxzLmg6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCIgamUgYWRyZXPh+GVtIgorCisjOiBnbG9iYWxzLmg6MTA0MgorbXNnaWQgIkUxODogVW5leHBlY3RlZCBjaGFyYWN0ZXJzIGJlZm9yZSAnPSciCittc2dzdHIgIkUxODogTmVv6GVr4XZhbukgem5ha3kgcPhlZCAnPSciCisKKyM6IGdsb2JhbHMuaDoxMDQ0Cittc2dpZCAiRTE5OiBNYXJrIGhhcyBpbnZhbGlkIGxpbmUgbnVtYmVyIgorbXNnc3RyICJFMTk6IFpuYehrYSBt4SBjaHlibukg6O1zbG8g+OFka3UiCisKKyM6IGdsb2JhbHMuaDoxMDQ1Cittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIkUyMDogbmVu7SBuYXN0YXZlbmEiCisKKyM6IGdsb2JhbHMuaDoxMDQ2Cittc2dpZCAiRTIxOiBDYW5ub3QgbWFrZSBjaGFuZ2VzLCAnbW9kaWZpYWJsZScgaXMgb2ZmIgorbXNnc3RyICJFMjE6IE5lbHplIG3sbml0LCBqZSBuYXN0YXZlbmEgdm9sYmEgJ21vZGlmaWFibGUnIgorCisjOiBnbG9iYWxzLmg6MTA0NworbXNnaWQgIkUyMjogU2NyaXB0cyBuZXN0ZWQgdG9vIGRlZXAiCittc2dzdHIgIkUyMjogU2tyaXB0IHZub/hlbiBw+O1saZogaGx1Ym9rbyIKKworIzogZ2xvYmFscy5oOjEwNDgKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6II7hZG79IGFsdGVybmF0aXZu7SBzb3Vib3IiCisKKyM6IGdsb2JhbHMuaDoxMDQ5Cittc2dpZCAiRTI0OiBObyBzdWNoIGFiYnJldmlhdGlvbiIKK21zZ3N0ciAiRTI0OiBUYWtvduEgemtyYXRrYSBuZWV4aXN0dWplIgorCisjOiBnbG9iYWxzLmg6MTA1MAorbXNnaWQgIk5vICEgYWxsb3dlZCIKK21zZ3N0ciAiISBuZW7tIHBvdm9sZW5vIgorCisjOiBnbG9iYWxzLmg6MTA1MgorbXNnaWQgIkUyNTogR1VJIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIkUyNTogTmVsemUgcG91nu10IEdVSTogbmVieWxvIHphcG51dG8gcPhpIHD4ZWtsYWR1IHByb2dyYW11IgorCisjOiBnbG9iYWxzLmg6MTA1NQorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiIgorIkUyNjogbmVsemUgcG91nu10IGhlYnJlanNr/SByZZ5pbTogIG5lYnlsIHphcG51dCBw+GkgcPhla2xhZHUgcHJvZ3JhbXVcbiIKKworIzogZ2xvYmFscy5oOjEwNTgKK21zZ2lkICJFMjc6IEZhcnNpIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI3OiBOZWx6ZSBwb3We7XQgZmFyc2kgcmWeaW06ICBuZWJ5bCB6YXBudXQgcPhpIHD4ZWtsYWR1IHByb2dyYW11XG4iCisKKyM6IGdsb2JhbHMuaDoxMDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODogTm8gc3VjaCBoaWdobGlnaHQgZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkUyODogU2t1cGluYSB6dv1yYXpu7G7tICVzIG5lZXhpc3R1amUiCisKKyM6IGdsb2JhbHMuaDoxMDYzCittc2dpZCAiRTI5OiBObyBpbnNlcnRlZCB0ZXh0IHlldCIKK21zZ3N0ciAiRTI5OiBaYXTtbSBuZW7tIJ7hZG79IHZsb55lbv0gdGV4dCIKKworIzogZ2xvYmFscy5oOjEwNjQKK21zZ2lkICJFMzA6IE5vIHByZXZpb3VzIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiRTMwOiCO4WRu4SBw+GVkY2hveu0gcPjta2F6b3bhIPjhZGthIgorCisjOiBnbG9iYWxzLmg6MTA2NQorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6II7hZG7pIHRha2926SBtYXBvduFu7SIKKworIzogZ2xvYmFscy5oOjEwNjYKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAijuFkbuEgc2hvZGEiCisKKyM6IGdsb2JhbHMuaDoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoOiAlcyIKK21zZ3N0ciAijuFkbuEgc2hvZGE6ICVzIgorCisjOiBnbG9iYWxzLmg6MTA2OAorbXNnaWQgIkUzMjogTm8gZmlsZSBuYW1lIgorbXNnc3RyICJFMzI6II7hZG79IG7hemV2IHNvdWJvcnUiCisKKyM6IGdsb2JhbHMuaDoxMDY5Cittc2dpZCAiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTMzOiCe4WRu/SBw+GVkY2hveu0gcmVndWzhcm7tIHb9cmF6IgorCisjOiBnbG9iYWxzLmg6MTA3MAorbXNnaWQgIkUzNDogTm8gcHJldmlvdXMgY29tbWFuZCIKK21zZ3N0ciAiRTM0OiCO4WRu/SBw+GVkY2hveu0gcPjta2F6IgorCisjOiBnbG9iYWxzLmg6MTA3MQorbXNnaWQgIkUzNTogTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzU6IJ7hZG79IHD4ZWRjaG967SByZWd1bOFybu0gdv1yYXoiCisKKyM6IGdsb2JhbHMuaDoxMDcyCittc2dpZCAiTm8gcmFuZ2UgYWxsb3dlZCIKK21zZ3N0ciAiUm96c2FoIG5lbu0gcG92b2xlbiIKKworIzogZ2xvYmFscy5oOjEwNzQKK21zZ2lkICJFMzY6IE5vdCBlbm91Z2ggcm9vbSIKK21zZ3N0ciAiRTM2OiBOZWRvc3RhdGVrIG3tc3RhIgorCisjOiBnbG9iYWxzLmg6MTA3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiTmVsemUgdnl0dm/4aXQgc291Ym9yICVzIgorCisjOiBnbG9iYWxzLmg6MTA3NworbXNnaWQgIkNhbid0IGdldCB0ZW1wIGZpbGUgbmFtZSIKK21zZ3N0ciAiTmVsemUgeu1za2F0IG7hemV2IGRv6GFzbulobyBzb3Vib3J1IgorCisjOiBnbG9iYWxzLmg6MTA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIk5lbHplIG90ZXb47XQgc291Ym9yICVzIgorCisjOiBnbG9iYWxzLmg6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIk5lbHplIOjtc3Qgc291Ym9yICVzIgorCisjOiBnbG9iYWxzLmg6MTA4MAorbXNnaWQgIkUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTM3OiBOZXVsb55lbukgem3sbnkgKHBvdZ5panRlICEgcHJvIHZ5bnVjZW7tKSIKKworIzogZ2xvYmFscy5oOjEwODEKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODogTnVsb3b9IGFyZ3VtZW50IgorCisjOiBnbG9iYWxzLmg6MTA4MworbXNnaWQgIkUzOTogTnVtYmVyIGV4cGVjdGVkIgorbXNnc3RyICJFMzk6IE/oZWvhduFubyDo7XNsbyIKKworIzogZ2xvYmFscy5oOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwOiBDYW4ndCBvcGVuIGVycm9yZmlsZSAlcyIKK21zZ3N0ciAiRTQwOiBOZWx6ZSBvdGV2+O10IGNoeWJvdv0gc291Ym9yICVzIgorCisjOiBnbG9iYWxzLmg6MTA4OQorbXNnaWQgIkU0MTogT3V0IG9mIG1lbW9yeSEiCittc2dzdHIgIkU0MTogTmVkb3N0YXRlayBwYW3sdGkhIgorCisjOiBnbG9iYWxzLmg6MTA5MgorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kIgorbXNnc3RyICJWem9yIG5lbmFsZXplbiIKKworIzogZ2xvYmFscy5oOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0dGVybiBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJWem9yIG5lbmFsZXplbjogJXMiCisKKyM6IGdsb2JhbHMuaDoxMDk1Cittc2dpZCAiQXJndW1lbnQgbXVzdCBiZSBwb3NpdGl2ZSIKK21zZ3N0ciAiQXJndW1lbnQgbXVz7SBi/XQga2xhZG79IgorCisjOiBnbG9iYWxzLmg6MTA5NworbXNnaWQgIkU0MjogTm8gRXJyb3JzIgorbXNnc3RyICJFNDI6II7hZG7pIGNoeWJ5IgorCisjOiBnbG9iYWxzLmg6MTA5OQorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0MzogUG+aa296ZW79IPhldOx6ZWMgcHJvIHZ5aGxlZOF24W7tIgorCisjOiBnbG9iYWxzLmg6MTEwMAorbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6IHBvmmtvemVu/SByZWdleHAgcHJvZ3JhbSIKKworIzogZ2xvYmFscy5oOjExMDEKK21zZ2lkICJFNDU6ICdyZWFkb25seScgb3B0aW9uIGlzIHNldCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDU6ICduYXN0YXZlbmEgdm9sYmEgJ3JlYWRvbmx5JyAocG91nmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjOiBnbG9iYWxzLmg6MTEwMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDY6IENhbm5vdCBzZXQgcmVhZC1vbmx5IHZhcmlhYmxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ2OiBOZWx6ZSBuYXN0YXZpdCBwb3V6ZV9wcm9f6HRlbu0gcHJvbexubm91IFwiJXNcIiIKKworIzogZ2xvYmFscy5oOjExMDYKK21zZ2lkICJFNDc6IEVycm9yIHdoaWxlIHJlYWRpbmcgZXJyb3JmaWxlIgorbXNnc3RyICJFNDc6IENoeWJhIHD4aSDodGVu7SBjaHlib3bpaG8gc291Ym9ydSIKKworIzogZ2xvYmFscy5oOjExMDkKK21zZ2lkICJFNDg6IE5vdCBhbGxvd2VkIGluIHNhbmRib3giCittc2dzdHIgIkU0ODogTmVu7SB2IGJlenBl6G5vc3Ru7SBzY2hy4W5jZSBwb3ZvbGVubyIKKworIzogZ2xvYmFscy5oOjExMTEKK21zZ2lkICJFNDk6IEludmFsaWQgc2Nyb2xsIHNpemUiCittc2dzdHIgIkU0OTogQ2h5Ym7hIGhvZG5vdGEgdm9sYnkgJ3Njcm9sbCciCisKKyM6IGdsb2JhbHMuaDoxMTEyCittc2dpZCAiRTkxOiAnc2hlbGwnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiRTkxOiB2b2xiYSAnc2hlbGwnIGplIHBy4XpkbuEiCisKKyM6IGdsb2JhbHMuaDoxMTEzCittc2dpZCAiRTcyOiBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUiCittc2dzdHIgIkU3MjogQ2h5YmEgcPhpIHV6YXbtcuFu7SBvZGts4WRhY+1obyBzb3Vib3J1IgorCisjOiBnbG9iYWxzLmg6MTExNAorbXNnaWQgIkU3MzogdGFnIHN0YWNrIGVtcHR5IgorbXNnc3RyICJFNzM6IHNlem5hbSB0YWf5IGplIHBy4Xpkbv0iCisKKyM6IGdsb2JhbHMuaDoxMTE1Cittc2dpZCAiRTc0OiBDb21tYW5kIHRvbyBjb21wbGV4IgorbXNnc3RyICJFNzQ6IFD47WtheiBqZSBw+O1saZogc2xvnml0/SIKKworIzogZ2xvYmFscy5oOjExMTYKK21zZ2lkICJFNzU6IE5hbWUgdG9vIGxvbmciCittc2dzdHIgIkU3NTogTuF6ZXYgamUgcPjtbGmaIGRsb3Vo/SIKKworIzogZ2xvYmFscy5oOjExMTcKK21zZ2lkICJFNzY6IFRvbyBtYW55IFsiCittc2dzdHIgIkU3NjogcPjtbGmaIG1ub2hvIFsiCisKKyM6IGdsb2JhbHMuaDoxMTE4Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IFD47WxpmiBtbm9obyBu4Xp2+SBzb3Vib3L5IgorCisjOiBnbG9iYWxzLmg6MTExOQorbXNnaWQgIlRyYWlsaW5nIGNoYXJhY3RlcnMiCittc2dzdHIgIk5hZGJ5dGXobukgem5ha3kgbmEga29uY2kiCisKKyM6IGdsb2JhbHMuaDoxMTIwCittc2dpZCAiRTc4OiBVbmtub3duIG1hcmsiCittc2dzdHIgIkU3ODogTmV6buFt4SB6bmHoa2EiCisKKyM6IGdsb2JhbHMuaDoxMTIxCittc2dpZCAiRTc5OiBDYW5ub3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiRTc5OiBOZWx6ZSBleHBhbmRvdmF0IJ5vbO1rb3bpIHpuYWt5IgorCisjOiBnbG9iYWxzLmg6MTEyMgorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiBDaHliYSBw+GkgdWts4WThbu0iCisKKyM6IGdsb2JhbHMuaDoxMTIzCittc2dpZCAiWmVybyBjb3VudCIKK21zZ3N0ciAiTnVsb3b9IHBv6GV0IgorCisjOiBnbG9iYWxzLmg6MTEyNQorbXNnaWQgIkU4MTogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQiCittc2dzdHIgIkU4MTogUG91nml07SA8U0lEPiBtaW1vIGtvbnRleHQgc2tyaXB0dSIKZGlmZiAtLWdpdCBhL3NyYy9wby9jcy5wbyBiL3NyYy9wby9jcy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzhjNjY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL2NzLnBvCkBAIC0wLDAgKzEsNTk1NCBAQAorIyBDemVjaCB0cmFuc2xhdGlvbiBvZiB2aW0KKyMgSmn47SBQYXZsb3Zza/0gPGpwYXZsb3Zza3lAbWJveC52b2wuY3o+LCAyMDAwIC0gMjAwMi4KKyMgU29tZSBjb21wbGV0aW9uIGZvciB2aW02LjAgYWRkZWQgYnkgSmn47SBC+GV6aW5hIDxicnpAY2VudHJ1bS5jej4KKyMgU29tZSBidWdmaXhlcyBieSBUb23huSBaZWxsZXJpbiA8emVsbGVyaW5Adm9sbnkuY3o+CisjCisjIE9yaWdpbmFsIHRyYW5zbGF0aW9ucy4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHZpbS02LjBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwMS0xMC0wOCAwODoyNy0wNzAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMi0wMi0wNiAyMjoyOSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKafjtIFBhdmxvdnNr/SA8anBhdmxvdnNreUBtYm94LnZvbC5jej5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDemVjaCA8Y3NAbGkub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTJcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGJ1ZmZlci5jOjk3Cittc2dpZCAiRTgyOiBDYW5ub3QgYWxsb2NhdGUgYW55IGJ1ZmZlciwgZXhpdGluZy4uLiIKK21zZ3N0ciAiRTgyOiBOZWx6ZSBhbG9rb3ZhdCC+4WRu/SBidWZmZXIsIGtvbujtbS4uLiIKKworIzogYnVmZmVyLmM6MTAwCittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4MzogTmVsemUgYWxva292YXQgYnVmZmVyLCBwb3W+aWppIGppbv0uLi4iCisKKyM6IGJ1ZmZlci5jOjY5OAorbXNnaWQgIk5vIGJ1ZmZlcnMgd2VyZSB1bmxvYWRlZCIKK21zZ3N0ciAiruFkbv0gYnVmZmVyIG5lYnlsIGRlYWt0aXZvduFuIgorCisjOiBidWZmZXIuYzo3MDAKK21zZ2lkICJObyBidWZmZXJzIHdlcmUgZGVsZXRlZCIKK21zZ3N0ciAiruFkbv0gYnVmZmVyIG5lYnlsIHNtYXrhbiIKKworIzogYnVmZmVyLmM6NzAyCittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAiruFkbv0gYnVmZmVyIG5lYnlsIHphaG96ZW4iCisKKyM6IGJ1ZmZlci5jOjcxMAorbXNnaWQgIjEgYnVmZmVyIHVubG9hZGVkIgorbXNnc3RyICJQb+hldCBkZWFrdGl2b3Zhbv1jaCBidWZmZXL5OiAxIgorCisjOiBidWZmZXIuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB1bmxvYWRlZCIKK21zZ3N0ciAiUG/oZXQgZGVha3Rpdm92YW79Y2ggYnVmZmVy+TogJWQiCisKKyM6IGJ1ZmZlci5jOjcxNworbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIlBv6GV0IHNtYXphbv1jaCBidWZmZXL5OiAxIgorCisjOiBidWZmZXIuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICJQb+hldCBzbWF6YW79Y2ggYnVmZmVy+TogJWQiCisKKyM6IGJ1ZmZlci5jOjcyNAorbXNnaWQgIjEgYnVmZmVyIHdpcGVkIG91dCIKK21zZ3N0ciAiUG/oZXQgemFob3plbv1jaCBidWZmZXL5OiAxIgorCisjOiBidWZmZXIuYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB3aXBlZCBvdXQiCittc2dzdHIgIlBv6GV0IHphaG96ZW79Y2ggYnVmZmVy+TogJWQiCisKKyM6IGJ1ZmZlci5jOjc4MworbXNnaWQgIkU4NDogTm8gbW9kaWZpZWQgYnVmZmVyIGZvdW5kIgorbXNnc3RyICJFODQ6IE5lYnlsIG5hbGV6ZW4gvuFkbv0gem3sbuxu/SBidWZmZXIiCisKKyMuIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCwgZGlkbid0IGZpbmQgYW55dGhpbmcuCisjOiBidWZmZXIuYzo4MjIKK21zZ2lkICJFODU6IFRoZXJlIGlzIG5vIGxpc3RlZCBidWZmZXIiCittc2dzdHIgIkU4NTogU2V6bmFtIGJ1ZmZlcvkgamUgcHLhemRu/SIKKworIzogYnVmZmVyLmM6ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQ2Fubm90IGdvIHRvIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU4NjogTmVsemUgcPhlc2tv6Gl0IG5hIGJ1ZmZlciAlbGQiCisKKyM6IGJ1ZmZlci5jOjgzNworbXNnaWQgIkU4NzogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg3OiBaYSBwb3NsZWRu7SBidWZmZXIgbmVsemUgcPhlc2tv6Gl0IgorCisjOiBidWZmZXIuYzo4MzkKK21zZ2lkICJFODg6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgYnVmZmVyIgorbXNnc3RyICJFODg6IFD4ZWQgcHJ2bu0gYnVmZmVyIG5lbHplIHD4ZXNrb+hpdCIKKworIzogYnVmZmVyLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU4OTogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciAlbGQgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTg5OiBabexueSB2IGJ1ZmZlcnUgJWxkIG5lYnlseSB1bG++ZW55ICghIHBybyB2eW51Y2Vu7SkiCisKKyM6IGJ1ZmZlci5jOjg3OQorbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiBQb3NsZWRu7SBidWZmZXIgbmVsemUgZGVha3Rpdm92YXQiCisKKyM6IGJ1ZmZlci5jOjEzMTQKK21zZ2lkICJXMTQ6IFdhcm5pbmc6IExpc3Qgb2YgZmlsZSBuYW1lcyBvdmVyZmxvdyIKK21zZ3N0ciAiVzE0OiBWYXJvduFu7TogcPhldGXoZW7tIHNlem5hbXUgcyBu4Xp2eSBzb3Vib3L5IgorCisjOiBidWZmZXIuYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MjogQnVmZmVyICVsZCBub3QgZm91bmQiCittc2dzdHIgIkU5MjogQnVmZmVyICVsZCBuZW5hbGV6ZW4iCisKKyM6IGJ1ZmZlci5jOjE3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkzOiBNb3JlIHRoYW4gb25lIG1hdGNoIGZvciAlcyIKK21zZ3N0ciAiRTkzOiBWem9ydSAlcyB2eWhvdnVqZSB27WNlIGJ1ZmZlcvkiCisKKyM6IGJ1ZmZlci5jOjE3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIgorbXNnc3RyICJFOTQ6IFZ6b3J1ICVzIG5ldnlob3Z1amUgvuFkbv0gYnVmZmVyIgorCisjOiBidWZmZXIuYzoyMTA1IGV4X2RvY21kLmM6NjA2NQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCIKK21zZ3N0ciAi+OFkZWsgJWxkIgorCisjOiBidWZmZXIuYzoyMTg4Cittc2dpZCAiRTk1OiBCdWZmZXIgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU5NTogQnVmZmVyIHRvaG90byBqbeluYSBqab4gZXhpc3R1amUiCisKKyM6IGJ1ZmZlci5jOjI0ODEKK21zZ2lkICIgW01vZGlmaWVkXSIKK21zZ3N0ciAiIFtabexu7G79XSIKKworIzogYnVmZmVyLmM6MjQ4NgorbXNnaWQgIltOb3QgZWRpdGVkXSIKK21zZ3N0ciAiW05lZWRpdG92YW79XSIKKworIzogYnVmZmVyLmM6MjQ5MQorbXNnaWQgIltOZXcgZmlsZV0iCittc2dzdHIgIltOb3b9IHNvdWJvcl0iCisKKyM6IGJ1ZmZlci5jOjI0OTIKK21zZ2lkICJbUmVhZCBlcnJvcnNdIgorbXNnc3RyICJbQ2h5YnkgcPhpIOh0ZW7tXSIKKworIzogYnVmZmVyLmM6MjQ5NCBmaWxlaW8uYzoxNzU0Cittc2dpZCAiW3JlYWRvbmx5XSIKK21zZ3N0ciAiW1BvdXplIHBybyDodGVu7V0iCisKKyM6IGJ1ZmZlci5jOjI1MTAKK21zZ2lkICIxIGxpbmUgLS0lZCUlLS0iCittc2dzdHIgIvjhZGv5OiAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6MjUxMAorbXNnaWQgIiVsZCBsaW5lcyAtLSVkJSUtLSIKK21zZ3N0ciAi+OFka/k6ICVsZCAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6MjUxOAorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICL44WRlayAlbGQvJWxkIC0tJWQlJS0tIHNsb3VwZWMiCisKKyM6IGJ1ZmZlci5jOjI2MDYKK21zZ2lkICJbTm8gZmlsZV0iCittc2dzdHIgIluu4WRu/SBzb3Vib3JdIgorCisjLiBtdXN0IGJlIGEgaGVscCBidWZmZXIKKyM6IGJ1ZmZlci5jOjI2NDYKK21zZ2lkICJoZWxwIgorbXNnc3RyICJu4XBvduxkYSIKKworIzogYnVmZmVyLmM6MzE1MSBzY3JlZW4uYzo0NjcxCittc2dpZCAiW2hlbHBdIgorbXNnc3RyICJbbuFwb3bsZGFdIgorCisjOiBidWZmZXIuYzozMTgzIHNjcmVlbi5jOjQ2NzcKK21zZ2lkICJbUHJldmlld10iCittc2dzdHIgIltu4WhsZWRdIgorCisjOiBidWZmZXIuYzozMzg5Cittc2dpZCAiQWxsIgorbXNnc3RyICJWuWUiCisKKyM6IGJ1ZmZlci5jOjMzODkKK21zZ2lkICJCb3QiCittc2dzdHIgIktvbmVjIgorCisjOiBidWZmZXIuYzozMzkxCittc2dpZCAiVG9wIgorbXNnc3RyICJaYejhdGVrIgorCisjOiBidWZmZXIuYzo0MTI3Cittc2dpZCAiIgorIlxuIgorIiMgQnVmZmVyIGxpc3Q6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIFNlem5hbSBidWZmZXL5OlxuIgorCisjOiBidWZmZXIuYzo0MTYwCittc2dpZCAiW0Vycm9yIExpc3RdIgorbXNnc3RyICJbc2V6bmFtIGNoeWJdIgorCisjOiBidWZmZXIuYzo0MTczIG1lbWxpbmUuYzoxNTEzCittc2dpZCAiW05vIEZpbGVdIgorbXNnc3RyICJbvuFkbv0gc291Ym9yXSIKKworIzogYnVmZmVyLmM6NDM5MworbXNnaWQgIiIKKyJcbiIKKyItLS0gU2lnbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFpuYWt5IC0tLSIKKworIzogYnVmZmVyLmM6NDQwMworIywgYy1mb3JtYXQKK21zZ2lkICJTaWducyBmb3IgJXM6IgorbXNnc3RyICJabmFreSBwcm8gJXM6IgorCisjOiBidWZmZXIuYzo0NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBsaW5lPSVsZCAgaWQ9JWQgIG5hbWU9JXMiCittc2dzdHIgIiAgICD44WRlaz0lbGQgaWQ9JWQgam3pbm89JXMiCisKKyM6IGRpZmYuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6IE5lbHplIHD4ZWtyb+hpdCBtYXhpbeFsbu0gcG/oZXQgJWxkIGRpZmYgYnVmZmVy+SIKKworIzogZGlmZi5jOjY0OAorbXNnaWQgIkU5NzogQ2Fubm90IGNyZWF0ZSBkaWZmcyIKK21zZ3N0ciAiRTk3OiBOZWx6ZSB2eXR2b/hpdCBkaWZmeSIKKworIzogZGlmZi5jOjc0NworbXNnaWQgIlBhdGNoIGZpbGUiCittc2dzdHIgIlNvdWJvciBzZSB64XBsYXRvdSIKKworIzogZGlmZi5jOjk5MQorbXNnaWQgIkU5ODogQ2Fubm90IHJlYWQgZGlmZiBvdXRwdXQiCittc2dzdHIgIkU5ODogTmVsemUg6O1zdCB2/XN0dXAgcHJvZ3JhbXUgZGlmZiIKKworIzogZGlmZi5jOjE3MDQKK21zZ2lkICJFOTk6IEN1cnJlbnQgYnVmZmVyIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkU5OTogQWt0deFsbu0gYnVmZmVyIG5lbu0gdiBkaWZmIHJlvmltdSIKKworIzogZGlmZi5jOjE3MTYKK21zZ2lkICJFMTAwOiBObyBvdGhlciBidWZmZXIgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAwOiBUbyBieWwgcG9zbGVkbu0gYnVmZmVyIHYgZGlmZiByZb5pbXUiCisKKyM6IGRpZmYuYzoxNzI0Cittc2dpZCAiRTEwMTogTW9yZSB0aGFuIHR3byBidWZmZXJzIGluIGRpZmYgbW9kZSwgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlIgorbXNnc3RyICJFMTAxOiBWIGRpZmYgcmW+aW11IGpzb3Ugdu1jZSBuZb4gZHZhIGJ1ZmZlcnkuIE5ldu1tLCBrdGVy/SBt4W0gcG91vu10LiIKKworIzogZGlmZi5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMjogQ2FuJ3QgZmluZCBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTAyOiBOZWx6ZSBuYWzpenQgYnVmZmVyIFwiJXNcIiIKKworIzogZGlmZi5jOjE3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMzogQnVmZmVyIFwiJXNcIiBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAzOiBCdWZmZXIgXCIlc1wiIG5lbu0gdiBkaWZmIHJlvmltdSIKKworIzogZGlncmFwaC5jOjIxNjgKK21zZ2lkICJFMTA0OiBFc2NhcGUgbm90IGFsbG93ZWQgaW4gZGlncmFwaCIKK21zZ3N0ciAiRTEwNDogZGlncmFwaCBuZXNt7SBvYnNhaG92YXQgRXNjYXBlIgorCisjOiBkaWdyYXBoLmM6MjM0MAorbXNnaWQgIktleW1hcCBmaWxlIG5vdCBmb3VuZCIKK21zZ3N0ciAiU291Ym9yIHMgbWFwb3Uga2zhdmVzbmljZSBuZWJ5bCBuYWxlemVuIgorCisjOiBkaWdyYXBoLmM6MjM2NworbXNnaWQgIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTEwNTogOmxvYWRrZXltYXAgbWltbyBpbnRlcnByZXRvdmFu/SBzb3Vib3IiCisKKyM6IGVkaXQuYzo0MAorbXNnaWQgIiBLZXl3b3JkIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIERvcGzyb3bhbu0ga2zt6G92/WNoIHNsb3YgKF5OL15QKSIKKworIy4gY3RybF94X21vZGUgPT0gMCwgXlAvXk4gY29tcGwuCisjOiBlZGl0LmM6NDEKK21zZ2lkICIgXlggbW9kZSAoXkUvXlkvXkwvXl0vXkYvXkkvXksvXkQvXlYvXk4vXlApIgorbXNnc3RyICIgXlggcmW+aW0gKF5FL15ZL15ML15dL15GL15JL15LL15EL15WL15OL15QKSIKKworIy4gU2Nyb2xsIGhhcyBpdCdzIG93biBtc2dzLCBpbiBpdCdzIHBsYWNlIHRoZXJlIGlzIHRoZSBtc2cgZm9yIGxvY2FsCisjLiAqIGN0cmxfeF9tb2RlID0gMCAoZWcgY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCkgIC0tIEFjZXZlZG8KKyM6IGVkaXQuYzo0NAorbXNnaWQgIiBLZXl3b3JkIExvY2FsIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIExva+Fsbu0gZG9wbPJvduFu7SBrbO3ob3b9Y2ggc2xvdiAoXk4vXlApIgorCisjOiBlZGl0LmM6NDUKK21zZ2lkICIgV2hvbGUgbGluZSBjb21wbGV0aW9uICheTC9eTi9eUCkiCittc2dzdHIgIiBEb3Bs8m924W7tIGNlbP1jaCD44WRr+SAoXkwvXk4vXlApIgorCisjOiBlZGl0LmM6NDYKK21zZ2lkICIgRmlsZSBuYW1lIGNvbXBsZXRpb24gKF5GL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3bhbu0gbuF6dvkgc291Ym9y+SAoXkYvXk4vXlApIgorCisjOiBlZGl0LmM6NDcKK21zZ2lkICIgVGFnIGNvbXBsZXRpb24gKF5dL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3bhbu0gdGFn+SAoXkkvXk4vXlApIgorCisjOiBlZGl0LmM6NDgKK21zZ2lkICIgUGF0aCBwYXR0ZXJuIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIERvcGzyb3bhbu0gdnpvcnUgY2VzdCAoXk4vXlApIgorCisjOiBlZGl0LmM6NDkKK21zZ2lkICIgRGVmaW5pdGlvbiBjb21wbGV0aW9uICheRC9eTi9eUCkiCittc2dzdHIgIiBEb3Bs8m924W7tIGRlZmluaWMgKF5EL15OL15QKSIKKworIzogZWRpdC5jOjUxCittc2dpZCAiIERpY3Rpb25hcnkgY29tcGxldGlvbiAoXksvXk4vXlApIgorbXNnc3RyICIgRG9wbPJvduFu7SBwb2RsZSBzbG92bu1rdSAoXksvXk4vXlApIgorCisjOiBlZGl0LmM6NTIKK21zZ2lkICIgVGhlc2F1cnVzIGNvbXBsZXRpb24gKF5UL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3bhbu0gcG9kbGUgdGV6YXVydSAoXlQvXk4vXlApIgorCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3bhbu0gcPjta2F6b3bpIPjhZGt5ICheSS9eTi9eUCkiCisKKyM6IGVkaXQuYzo1NgorbXNnaWQgIkhpdCBlbmQgb2YgcGFyYWdyYXBoIgorbXNnc3RyICJLb25lYyBvZHN0YXZjZSIKKworIzogZWRpdC5jOjg5NAorbXNnaWQgIid0aGVzYXVydXMnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAidm9sYmEgJ3RoZXNhdXJ1cycgamUgcHLhemRu4SIKKworIzogZWRpdC5jOjEwNzAKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJ2b2xiYSAnZGljdGlvbmFyeScgamUgcHLhemRu4SIKKworIzogZWRpdC5jOjE5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgZGljdGlvbmFyeTogJXMiCittc2dzdHIgIlByb2hsZWThduFtIHNsb3Zu7WsgJXMiCisKKyM6IGVkaXQuYzoyMTgzCittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKGluc2VydCkgUm9sb3bhbu0gKF5FL15ZKSIKKworIzogZWRpdC5jOjIxODUKK21zZ2lkICIgKHJlcGxhY2UpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKHJlcGxhY2UpIFJvbG924W7tICheRS9eWSkiCisKKyM6IGVkaXQuYzoyNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nOiAlcyIKK21zZ3N0ciAiUHJvaGxlZOF24W0gJXMiCisKKyM6IGVkaXQuYzoyNTMxCittc2dpZCAiU2Nhbm5pbmcgdGFncy4iCittc2dzdHIgIlByb2hsZWThduFtIHRhZ3kiCisKKyM6IGVkaXQuYzozMTg5Cittc2dpZCAiIEFkZGluZyIKK21zZ3N0ciAiUPhpZOF24W0iCisKKyMuIHNob3dtb2RlIG1pZ2h0IHJlc2V0IHRoZSBpbnRlcm5hbCBsaW5lIHBvaW50ZXJzLCBzbyBpdCBtdXN0CisjLiAqIGJlIGNhbGxlZCBiZWZvcmUgbGluZSA9IG1sX2dldCgpLCBvciB3aGVuIHRoaXMgYWRkcmVzcyBpcyBubworIy4gKiBsb25nZXIgbmVlZGVkLiAgLS0gQWNldmVkby4KKyMuCisjOiBlZGl0LmM6MzIzOAorbXNnaWQgIi0tIFNlYXJjaGluZy4uLiIKK21zZ3N0ciAiLS0gSGxlZOFtLi4uIgorCisjOiBlZGl0LmM6MzI5NAorbXNnaWQgIkJhY2sgYXQgb3JpZ2luYWwiCittc2dzdHIgIlb9Y2hveu0gcG9kb2JhIgorCisjOiBlZGl0LmM6MzI5OQorbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICJTbG92byB6IGppbulobyD44WRrdSIKKworIzogZWRpdC5jOjMzMDQKK21zZ2lkICJUaGUgb25seSBtYXRjaCIKK21zZ3N0ciAiSmVkaW7hIHNob2RhIgorCisjOiBlZGl0LmM6MzM2MworIywgYy1mb3JtYXQKK21zZ2lkICJtYXRjaCAlZCBvZiAlZCIKK21zZ3N0ciAic2hvZGEgJWQvJWQiCisKKyM6IGVkaXQuYzozMzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIgorbXNnc3RyICJzaG9kYSAlZCIKKworIzogZXZhbC5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA2OiBVbmtub3duIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDY6IE5lem7hbeEgcHJvbexubuE6IFwiJXNcIiIKKworIzogZXZhbC5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA3OiBNaXNzaW5nIGJyYWNlczogJXMiCittc2dzdHIgIkUxMDc6IENoeWLtIHrhdm9ya3k6ICVzIgorCisjOiBldmFsLmM6MTA0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTA4OiBObyBzdWNoIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDg6IFByb23sbm7hIFwiJXNcIiBuZWV4aXN0dWplIgorCisjOiBldmFsLmM6MTI4NAorbXNnaWQgIkUxMDk6IE1pc3NpbmcgJzonIGFmdGVyICc/JyIKK21zZ3N0ciAiRTEwOTogUG8gJz8nIGNoeWLtICc6JyIKKworIzogZXZhbC5jOjE4OTgKK21zZ2lkICJFMTEwOiBNaXNzaW5nICcpJyIKK21zZ3N0ciAiRTExMDogQ2h5Yuxq7WPtICcpJyIKKworIzogZXZhbC5jOjE5NDgKK21zZ2lkICJFMTExOiBNaXNzaW5nICddJyIKK21zZ3N0ciAiRTExMTogQ2h5Yuxq7WPtICddJyIKKworIzogZXZhbC5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMjogT3B0aW9uIG5hbWUgbWlzc2luZzogJXMiCittc2dzdHIgIkUxMTI6IENoeWLtIGpt6W5vIHZvbGJ5OiAlcyIKKworIzogZXZhbC5jOjIwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMzogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMTEzOiBOZXpu4W3hIHZvbGJhOiAlcyIKKworIzogZXZhbC5jOjIxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IENoeWLtIHV2b3pvdmt5OiAlcyIKKworIzogZXZhbC5jOjIyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNTogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTU6IENoeWLtIHV2b3pvdmt5OiAlcyIKKworIzogZXZhbC5jOjI1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNjogSW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICVzIgorbXNnc3RyICJFMTE2OiBDaHlibukgYXJndW1lbnR5IHBybyBmdW5rY2kgJXMiCisKKyM6IGV2YWwuYzoyNTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiBOZXpu4W3hIGZ1bmtjZTogJXMiCisKKyM6IGV2YWwuYzoyNTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTg6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE4OiBQ+O1sabkgbW5vaG8gYXJndW1lbnT5IHBybyBmdW5rY2kgJXMiCisKKyM6IGV2YWwuYzoyNTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTk6IFD47WxpuSBt4WxvIGFyZ3VtZW50+SBwcm8gZnVua2NpICVzIgorCisjOiBldmFsLmM6MjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIwOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dDogJXMiCittc2dzdHIgIkUxMjA6IFBvdb5pdO0gPFNJRD4gbWltbyBrb250ZXh0IHNrcmlwdHU6ICVzIgorCisjOiBldmFsLmM6MzU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIrLSVzJTNsZCBsaW5lczogIgorbXNnc3RyICIrLSVzJTNsZCD44WRr+ToiCisKKyM6IGV2YWwuYzo0NjkwCittc2dpZCAiIgorIiZPS1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImT0tcbiIKKyImWnJ1uWl0IgorCisjOiBldmFsLmM6NTUxMworbXNnaWQgIkUyNDA6IE5vIGNvbm5lY3Rpb24gdG8gVmltIHNlcnZlciIKK21zZ3N0ciAiRTI0MDogTmVleGlzdHVqZSBw+Glwb2plbu0gayBWaW0gc2VydmVydSIKKworIzogZXZhbC5jOjU2MDMKK21zZ2lkICJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIKK21zZ3N0ciAiRTI3NzogTmVsemUg6O1zdCBvZHBvduzvIHNlcnZlcnUiCisKKyM6IGV2YWwuYzo1NjI4Cittc2dpZCAiRTI1ODogVW5hYmxlIHRvIHNlbmQgdG8gY2xpZW50IgorbXNnc3RyICJFMjU4OiBOZWx6ZSBw+GVkYXQga2xpZW50b3ZpIgorCisjOiBldmFsLmM6NTY2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQxOiBVbmFibGUgdG8gc2VuZCB0byAlcyIKK21zZ3N0ciAiRTI0MTogTmVsemUgcPhlZGF0IGRvICVzIgorCisjOiBldmFsLmM6NTc2NworbXNnaWQgIihJbnZhbGlkKSIKK21zZ3N0ciAiKENoeWJu/SkiCisKKyM6IGV2YWwuYzo2NzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogJXMiCittc2dzdHIgIkUxMjE6IE5lZGVmaW5vdmFu4SBwcm9t7G5u4TogJXMiCisKKyM6IGV2YWwuYzo3NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjI6IEZ1bmN0aW9uICVzIGFscmVhZHkgZXhpc3RzLCB1c2UgISB0byByZXBsYWNlIgorbXNnc3RyICJFMTIyOiBGdW5rY2UgJXMgamm+IGV4aXN0dWplLiBQb3W+aWp0ZSAhIHBybyBqZWrtIG5haHJhemVu7S4iCisKKyM6IGV2YWwuYzo3NTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjM6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMjM6IE5lZGVmaW5vdmFu4SBmdW5rY2U6ICVzIgorCisjOiBldmFsLmM6NzUyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6IENoeWLtICcoJzogJXMiCisKKyM6IGV2YWwuYzo3NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiBOZXD47XB1c3Ru/SBhcmd1bWVudDogJXMiCisKKyM6IGV2YWwuYzo3NjQxCittc2dpZCAiRTEyNjogTWlzc2luZyA6ZW5kZnVuY3Rpb24iCittc2dzdHIgIkUxMjY6IENoeWLtIDplbmRmdW5jdGlvbiIKKworIzogZXZhbC5jOjc3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNzogQ2Fubm90IHJlZGVmaW5lIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMjc6IE5lbHplIHD4ZWRlZmlub3ZhdCBmdW5rY2kgJXM6IGplIHBvdb7tduFuYSIKKworIzogZXZhbC5jOjc3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODogTuF6ZXYgZnVua2NlIG11c+0gemHo7W5hdCB2ZWxr/W0gcO1zbWVuZW06ICVzIgorCisjOiBldmFsLmM6Nzc4MworbXNnaWQgIkUxMjk6IEZ1bmN0aW9uIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUxMjk6IEplIHZ5vmFkb3bhbm8gam3pbm8gZnVua2NlIgorCisjOiBldmFsLmM6Nzg3NgorbXNnaWQgImZ1bmN0aW9uICIKK21zZ3N0ciAiZnVua2NlICIKKworIzogZXZhbC5jOjc5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMDogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEzMDogTmVkZWZpbm92YW7hIGZ1bmtjZTogJXMiCisKKyM6IGV2YWwuYzo3OTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzE6IENhbm5vdCBkZWxldGUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEzMTogTmVsemUgc21hemF0IGZ1bmtjaSAlczogamUgamm+IHBvdb7tduFuYSIKKworIzogZXZhbC5jOjgwNDMKK21zZ2lkICJFMTMyOiBGdW5jdGlvbiBjYWxsIGRlcHRoIGlzIGhpZ2hlciB0aGFuICdtYXhmdW5jZGVwdGgnIgorbXNnc3RyICJFMTMyOiBaYW5v+GVu7SBmdW5rY2UgamUgaGx1YrntIG5lviAnbWF4ZnVuY2RlcHRoJyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYWxsaW5nICVzIgorbXNnc3RyICJ2b2zhbSAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODExOSBleF9jbWRzMi5jOjE5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAicG9rcmHodWppIHYgJXMiCisKKyM6IGV2YWwuYzo4MTczCittc2dpZCAiRTEzMzogOnJldHVybiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxMzM6IDpyZXR1cm4gbWltbyBmdW5rY2kiCisKKyM6IGV2YWwuYzo4MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyAjJWxkIgorbXNnc3RyICJkb2tvbuhlbm8gcHJvduFk7G7tICVzLiBO4XZyYXRvduEgaG9kbm90YSAjJWxkIgorCisjOiBldmFsLmM6ODI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICJkb2tvbuhlbm8gcHJvduFk7G7tICVzLiBO4XZyYXRvduEgaG9kbm90YSBcIiVzXCIiCisKKyM6IGV2YWwuYzo4Mzk1Cittc2dpZCAiIgorIlxuIgorIiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgZ2xvYuFsbu0gcHJvbexubuk6XG4iCisKKyM6IGV4X2NtZHMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iCittc2dzdHIgIjwlcz4lcyVzICAlZCwgILllc3Ru4WN0a2927CAlMDJ4LCAgb3Ntaehrb3bsICUwM28iCisKKyM6IGV4X2NtZHMuYzo0MjgKK21zZ2lkICJFMTM0OiBNb3ZlIGxpbmVzIGludG8gdGhlbXNlbHZlcyIKK21zZ3N0ciAiRTEzNDogTmVsemUgcPhlc3Vub3V0IPjhZGt5IG5hIHD5dm9kbu0gbe1zdG8iCisKKyM6IGV4X2NtZHMuYzo0OTcKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgInBv6GV0IHD4ZXN1bnV0/WNoIPjhZGv5OiAxIgorCisjOiBleF9jbWRzLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBtb3ZlZCIKK21zZ3N0ciAiUG/oZXQgcPhlc3VudXT9Y2gg+OFka/k6ICVsZCIKKworIzogZXhfY21kcy5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgZmlsdGVyZWQiCittc2dzdHIgIlBv6GV0IGZpbHRyb3Zhbv1jaCD44WRr+TogJWxkIgorCisjOiBleF9jbWRzLmM6OTE4Cittc2dpZCAiRTEzNTogKkZpbHRlciogQXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTEzNTogQXV0b21hdGlja+kgcPjta2F6eSAqRmlsdGVyKiBuZXNt7SBt7G5pdCBha3R14Wxu7SBidWZmZXIiCisKKyM6IGV4X2NtZHMuYzoxMDAzCittc2dpZCAiW05vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlXVxuIgorbXNnc3RyICJbTmV1bG++ZW7pIHpt7G55XVxuIgorCisjOiBleF9jbWRzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ2aW1pbmZvOiAlcyBpbiBsaW5lOiAiCittc2dzdHIgInZpbWluZm86ICVzIG5hIPjhZGt1OiAiCisKKyM6IGV4X2NtZHMuYzoxMjUzCittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIkUxMzY6IHZpbWluZm86IHD47WxpuSBtbm9obyBjaHliLCBw+GVza2FrdWppIHpieXRlayBzb3Vib3J1IgorCisjOiBleF9jbWRzLmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkaW5nIHZpbWluZm8gZmlsZSBcIiVzXCIlcyVzJXMiCittc2dzdHIgIsh0dSB2aW1pbmZvIHNvdWJvciBcIiVzXCIlcyVzJXMiCisKKyM6IGV4X2NtZHMuYzoxMjgzCittc2dpZCAiIGluZm8iCittc2dzdHIgIiBpbmZvcm1hY2UiCisKKyM6IGV4X2NtZHMuYzoxMjg0Cittc2dpZCAiIG1hcmtzIgorbXNnc3RyICIgem5h6Gt5IgorCisjOiBleF9jbWRzLmM6MTI4NQorbXNnaWQgIiBGQUlMRUQiCittc2dzdHIgIiBzZSBuZXpkYfhpbG8iCisKKyM6IGV4X2NtZHMuYzoxMzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzc6IFZpbWluZm8gZmlsZSBpcyBub3Qgd3JpdGFibGU6ICVzIgorbXNnc3RyICJFMTM3OiBkbyB2aW1pbmZvIHNvdWJvcnUgJXMgbmVsemUgemFwaXNvdmF0IgorCisjOiBleF9jbWRzLmM6MTUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiBOZWx6ZSB1bG++aXQgdmltaW5mbyBzb3Vib3IgJXMhIgorCisjOiBleF9jbWRzLmM6MTUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiCittc2dzdHIgIlVrbOFk4W0gdmltaW5mbyBzb3Vib3J1IFwiJXNcIiIKKworIy4gV3JpdGUgdGhlIGluZm86CisjOiBleF9jbWRzLmM6MTYxMAorbXNnaWQgIiMgVGhpcyB2aW1pbmZvIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBWaW0gJXMuXG4iCittc2dzdHIgIiMgVGVudG8gdmltaW5mbyBzb3Vib3IgYnlsIHZ5dHZv+GVuIGVkaXRvcmVtIFZpbSAlcy5cbiIKKworIzogZXhfY21kcy5jOjE2MTIKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIFBva3VkIGJ1ZGV0ZSBvcGF0cm79LCBt+b5ldGUgamVqIHVwcmF2b3ZhdC5cbiIKKyJcbiIKKworIzogZXhfY21kcy5jOjE2MTQKK21zZ2lkICIjIFZhbHVlIG9mICdlbmNvZGluZycgd2hlbiB0aGlzIGZpbGUgd2FzIHdyaXR0ZW5cbiIKK21zZ3N0ciAiIyBIb2Rub3RhIHZvbGJ5ICdlbmNvZGluZycgdiBkb2LsIHVsb75lbu0gdG9ob3RvIHNvdWJvcnVcbiIKKworIzogZXhfY21kcy5jOjE3MTMKK21zZ2lkICJJbGxlZ2FsIHN0YXJ0aW5nIGNoYXIiCittc2dzdHIgIk5lcPjtcHVzdG79IHBv6OF0Zehu7SB6bmFrIgorCisjOiBleF9jbWRzLmM6MjA1MyBleF9jbWRzLmM6MjI4OSBleF9jbWRzMi5jOjYwMgorbXNnaWQgIlNhdmUgQXMiCittc2dzdHIgIlVsb75pdCBqYWtvIgorCisjLiBPdmVyd3JpdGluZyBhIGZpbGUgdGhhdCBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIgaXMgbm90IGEKKyMuICogZ29vZCBpZGVhLgorIzogZXhfY21kcy5jOjIwOTYKK21zZ2lkICJFMTM5OiBGaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciIKK21zZ3N0ciAiRTEzOTogU291Ym9yIGplIG5haHLhbiB2IGppbultIGJ1ZmZlcnUiCisKKyM6IGV4X2NtZHMuYzoyMTMwCittc2dpZCAiV3JpdGUgcGFydGlhbCBmaWxlPyIKK21zZ3N0ciAiVWxvvml0IG5l+nBsbv0gc291Ym9yPyIKKworIzogZXhfY21kcy5jOjIxMzcKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiRTE0MDogUG91vmlqdGUgISBwcm8gdWxvvmVu7SBuZfpwbG7paG8gYnVmZmVydSIKKworIzogZXhfY21kcy5jOjIyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUgXCIlLipzXCI/IgorbXNnc3RyICJQ+GVwc2F0IHNvdWJvciBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMuYzoyMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDE6IE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTE0MTogruFkbv0gbuF6ZXYgc291Ym9ydSBwcm8gYnVmZmVyICVsZCIKKworIzogZXhfY21kcy5jOjIzMzIKK21zZ2lkICJFMTQyOiBGaWxlIG5vdCB3cml0dGVuOiBXcml0aW5nIGlzIGRpc2FibGVkIGJ5ICd3cml0ZScgb3B0aW9uIgorbXNnc3RyICJFMTQyOiBTb3Vib3IgbmVieWwgdWxvvmVuOiBVa2zhZOFu7SBqZSB6YWvheuFubyB2b2xib3UgJ3dyaXRlJyIKKworIzogZXhfY21kcy5jOjIzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIidyZWFkb25seScgb3B0aW9uIGlzIHNldCBmb3IgXCIlLipzXCIuXG4iCisiRG8geW91IHdpc2ggdG8gd3JpdGUgYW55d2F5PyIKK21zZ3N0ciAiIgorIlBybyBcIiUuKnNcIiBqZSBuYXN0YXZlbmEgdm9sYmEgJ3JlYWRvbmx5Jy5cbiIKKyJQ+GVqZXRlIHNpIGppIHBvdGxh6Gl0PyIKKworIzogZXhfY21kcy5jOjI1MTcKK21zZ2lkICJFZGl0IEZpbGUiCittc2dzdHIgIkVkaXRvdmF0IHNvdWJvciIKKworIzogZXhfY21kcy5jOjMwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MzogQXV0b2NvbW1hbmRzIHVuZXhwZWN0ZWRseSBkZWxldGVkIG5ldyBidWZmZXIgJXMiCittc2dzdHIgIkUxNDM6IEF1dG9tYXRpY2vpIHD47WthenkgbmVv6GVr4XZhbuwgc21hemFseSBub3b9IGJ1ZmZlciAlcyIKKworIzogZXhfY21kcy5jOjMxNTYKK21zZ2lkICJFMTQ0OiBub24tbnVtZXJpYyBhcmd1bWVudCB0byA6eiIKK21zZ3N0ciAiRTE0NDogbmXo7XNlbG79IGFyZ3VtZW50IHBybyA6eiIKKworIzogZXhfY21kcy5jOjMyNDEKK21zZ2lkICJFMTQ1OiBTaGVsbCBjb21tYW5kcyBub3QgYWxsb3dlZCBpbiBydmltIgorbXNnc3RyICJFMTQ1OiBydmltIG5lcG92b2x1amUgcG91vml07SBw+O1rYXr5IHNoZWxsdSIKKworIzogZXhfY21kcy5jOjMzNDgKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiBSZWd1bOFybu0gdv1yYXp5IG5lc23tIGL9dCBvZGTsbGVueSBw7XNtZW55IgorCisjOiBleF9jbWRzLmM6MzY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHdpdGggJXMgKHkvbi9hL3EvbC9eRS9eWSk/IgorbXNnc3RyICJuYWhyYWRpdCB6YSAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCisKKyM6IGV4X2NtZHMuYzo0MDUwCittc2dpZCAiKEludGVycnVwdGVkKSAiCittc2dzdHIgIihQ+GVydbllbm8pICIKKworIzogZXhfY21kcy5jOjQwNTQKK21zZ2lkICIxIHN1YnN0aXR1dGlvbiIKK21zZ3N0ciAiMSBuYWhyYXplbu0iCisKKyM6IGV4X2NtZHMuYzo0MDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICIlbGQgbmFocmF6ZW7tIgorCisjOiBleF9jbWRzLmM6NDA1OQorbXNnaWQgIiBvbiAxIGxpbmUiCittc2dzdHIgIiBuYSBqZWRub20g+OFka3UiCisKKyM6IGV4X2NtZHMuYzo0MDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiAlbGQgbGluZXMiCittc2dzdHIgIiBuYSAlbGQg+OFkY+1jaCIKKworIzogZXhfY21kcy5jOjQxMTIKK21zZ2lkICJFMTQ3OiBDYW5ub3QgZG8gOmdsb2JhbCByZWN1cnNpdmUiCittc2dzdHIgIkUxNDc6IDpnbG9iYWwgbmVsemUgdm9sYXQgcmVrdXJ6aXZu7CIKKworIzogZXhfY21kcy5jOjQxNDcKK21zZ2lkICJFMTQ4OiBSZWd1bGFyIGV4cHJlc3Npb24gbWlzc2luZyBmcm9tIGdsb2JhbCIKK21zZ3N0ciAiRTE0ODogVSBw+O1rYXp1ICdnbG9iYWwnIGNoeWLtIHJlZ3Vs4XJu7SB2/XJheiIKKworIzogZXhfY21kcy5jOjQxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0dGVybiBmb3VuZCBpbiBldmVyeSBsaW5lOiAlcyIKK21zZ3N0ciAiVnpvciBuYWxlemVuIG5hIGthvmTpbSD44WRrdTogJXMiCisKKyM6IGV4X2NtZHMuYzo0Mjc3Cittc2dpZCAiIgorIlxuIgorIiMgTGFzdCBTdWJzdGl0dXRlIFN0cmluZzpcbiIKKyIkIgorbXNnc3RyICIiCisiXG4iCisiIyBQb3NsZWRu7SBuYWhyYXp1au1j7SD4ZXTsemVjOlxuIgorIiQiCisKKyM6IGV4X2NtZHMuYzo0Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTogTGl0dWppLCBwcm8gJXMgbmVu7SC+4WRu4SBu4XBvduxkYSIKKworIzogZXhfY21kcy5jOjQ0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU29ycnksIGhlbHAgZmlsZSBcIiVzXCIgbm90IGZvdW5kIgorbXNnc3RyICJMaXR1amksIHNvdWJvciBcIiVzXCIgcyBu4XBvduxkb3UgbmVieWwgbmFsZXplbiIKKworIzogZXhfY21kcy5jOjQ4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MDogTm90IGEgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiRTE1MDogJXMgbmVu7SBhZHJlc+H4ZW0iCisKKyM6IGV4X2NtZHMuYzo0ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTI6IENhbm5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTUyOiBOZWx6ZSBvdGV2+O10ICVzIHBybyB64XBpcyIKKworIzogZXhfY21kcy5jOjQ4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MzogVW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxNTM6IE5lbHplIG90ZXb47XQgJXMgcHJvIHrhcGlzIgorCisjOiBleF9jbWRzLmM6NDk3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU0OiBEdXBsaWNhdGUgdGFnIFwiJXNcIiBpbiBmaWxlICVzIgorbXNnc3RyICJFMTU0OiBEdXBsaWNpdG7tIHRhZyBcIiVzXCIgdiBzb3Vib3J1ICVzIgorCisjOiBleF9jbWRzLmM6NTA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYwOiBVbmtub3duIHNpZ24gY29tbWFuZDogJXMiCittc2dzdHIgIkUxNjA6IE5lem7hbeEgdm9sYmEgcPjta2F6dTogJXMiCisKKyM6IGV4X2NtZHMuYzo1MDk4Cittc2dpZCAiRTE1NjogTWlzc2luZyBzaWduIG5hbWUiCittc2dzdHIgIkUxNTY6IENoeWLtIGpt6W5vIHZvbGJ5IgorCisjOiBleF9jbWRzLmM6NTE0NAorbXNnaWQgIkUyNTU6IFRvbyBtYW55IHNpZ25zIGRlZmluZWQiCittc2dzdHIgIkUyNTU6IE5hc3RhdmVubyBw+O1sabkgbW5vaG8gdm9sZWIiCisKKyM6IGV4X2NtZHMuYzo1MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTogTmVwbGF0bv0gdGV4dCB2b2xieTogJXMiCisKKyM6IGV4X2NtZHMuYzo1MjEwIGV4X2NtZHMuYzo1Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTU6IFVua25vd24gc2lnbjogJXMiCittc2dzdHIgIkUxNTU6IE5lem7hbeEgdm9sYmE6ICVzIgorCisjOiBleF9jbWRzLmM6NTI1NgorbXNnaWQgIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiCittc2dzdHIgIkUxNTk6IENoeWLtIGlkZW50aWZpa+F0b3Igdm9sYnkiCisKKyM6IGV4X2NtZHMuYzo1MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTg6IEludmFsaWQgYnVmZmVyIG5hbWU6ICVzIgorbXNnc3RyICJFMTU4OiBjaHlibukgam3pbm8gYnVmZmVydTogJXMiCisKKyM6IGV4X2NtZHMuYzo1Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiBDaHlibukgSUQgdm9sYnk6ICVsZCIKKworIzogZXhfY21kcy5jOjU1NDYKK21zZ2lkICJbRGVsZXRlZF0iCittc2dzdHIgIltWeW1heuFub10iCisKKyM6IGV4X2NtZHMyLmM6NzAKK21zZ2lkICJFbnRlcmluZyBEZWJ1ZyBtb2RlLiAgVHlwZSBcImNvbnRcIiB0byBsZWF2ZS4iCittc2dzdHIgIlNwb3W5dO1tIGxhZO1j7SByZb5pbS4gUHJvIHVrb27oZW7tIG5hcGm5dGUgXCJjb250XCIuIgorCisjOiBleF9jbWRzMi5jOjc0IGV4X2RvY21kLmM6NzcxCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiAlcyIKK21zZ3N0ciAi+OFkZWsgJWxkOiAlcyIKKworIzogZXhfY21kczIuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjbWQ6ICVzIgorbXNnc3RyICJw+O1rYXo6ICVzIgorCisjOiBleF9jbWRzMi5jOjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIgorbXNnc3RyICJCb2QgcPhlcnW5ZW7tIHYgXCIlcyVzXCIgbmEg+OFka3UgJWxkIgorCisjOiBleF9jbWRzMi5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYxOiBCcmVha3BvaW50IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUxNjE6IEJvZCBw+GVydbllbu0gbmVuYWxlemVuOiAlcyIKKworIzogZXhfY21kczIuYzo0MTQKK21zZ2lkICJObyBicmVha3BvaW50cyBkZWZpbmVkIgorbXNnc3RyICJOZWJ5bHkgZGVmaW5vduFudSC+4WRu6SBib2R5IHD4ZXJ1uWVu7SIKKworIzogZXhfY21kczIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgIPjhZGVrICVsZCIKKworIzogZXhfY21kczIuYzo2MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZSBjaGFuZ2VzIHRvIFwiJS4qc1wiPyIKK21zZ3N0ciAiVWxvvml0IHpt7G55IGRvIFwiJS4qc1wiPyIKKworIzogZXhfY21kczIuYzo2MjcgZXhfZG9jbWQuYzo4NjEyCittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIk5lcG9qbWVub3bhbm8iCisKKyM6IGV4X2NtZHMyLmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiBCdWZmZXIgXCIlc1wiIG9ic2FodWplIG5ldWxvvmVu6SB6bexueSIKKworIzogZXhfY21kczIuYzo4MzIKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIiIKKyJWYXJvduFu7TogTmXoZWthbv0gdnN0dXAgZG8gamlu6WhvIGJ1ZmZlcnUgKHprb250cm9sdWp0ZSBhdXRvbWF0aWNr6SBw+O1rYXp5KSIKKworIzogZXhfY21kczIuYzoxMjA4Cittc2dpZCAiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTYzOiBQcm8gZWRpdGFjaSBieWwgemFk4W4gcG91emUgamVkZW4gc291Ym9yIgorCisjOiBleF9jbWRzMi5jOjEyMTAKK21zZ2lkICJFMTY0OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGZpbGUiCittc2dzdHIgIkUxNjQ6IFD4ZWQgcHJ2bu0gc291Ym9yIG5lbHplIHD4ZXNrb+hpdCIKKworIzogZXhfY21kczIuYzoxMjEyCittc2dpZCAiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiCittc2dzdHIgIkUxNjU6IFphIHBvc2xlZG7tIHNvdWJvciBuZWx6ZSBw+GVza2/oaXQiCisKKyM6IGV4X2NtZHMyLmM6MTYzMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiCittc2dzdHIgIkhsZWThbSBcIiVzXCIgdiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiIKK21zZ3N0ciAiSGxlZOFtIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxNjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgInNvdWJvciBcIiVzXCIgbmVieWwgbmFsZXplbiB2ICdydW50aW1lcGF0aCciCisKKyM6IGV4X2NtZHMyLmM6MTcxMgorbXNnaWQgIlJ1biBNYWNybyIKK21zZ3N0ciAiU3B1c3RpdCBtYWtybyIKKworIzogZXhfY21kczIuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAibmVsemUgaW50ZXJwcmV0b3ZhdCBhZHJlc+H4OiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAibmVsemUgaW50ZXJwcmV0b3ZhdCBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIvjhZGVrICVsZDogbmVsemUgaW50ZXJwcmV0b3ZhdCBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg2MworIywgYy1mb3JtYXQKK21zZ2lkICJzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgImludGVycHJldHVqaSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogc291cmNpbmcgXCIlc1wiIgorbXNnc3RyICL44WRlayAlbGQ6IGludGVycHJldHVqaSAlcyIKKworIzogZXhfY21kczIuYzoxOTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNvdXJjaW5nICVzIgorbXNnc3RyICJkb2tvbuhlbmEgaW50ZXJwcmV0YWNlICVzIgorCisjOiBleF9jbWRzMi5jOjIyNzIKK21zZ2lkICJXMTU6IFdhcm5pbmc6IFdyb25nIGxpbmUgc2VwYXJhdG9yLCBeTSBtYXkgYmUgbWlzc2luZyIKK21zZ3N0ciAiVzE1OiBWYXJvduFu7TogY2h5Ym79IG9kZOxsb3Zh6CD44WRr+S4gTW++buEgY2h5Yu0gXk0uIgorCisjOiBleF9jbWRzMi5jOjIzMjEKK21zZ2lkICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgcG91vml0byBtaW1vIGludGVycHJldG92YW79IHNvdWJvciIKKworIzogZXhfY21kczIuYzoyMzU0Cittc2dpZCAiRTE2ODogOmZpbmlzaCB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjg6IDpmaW5pc2ggcG91vml0byBtaW1vIGludGVycHJldG92YW79IHNvdWJvciIKKworIzogZXhfY21kczIuYzoyODIwCittc2dpZCAiTm8gdGV4dCB0byBiZSBwcmludGVkIgorbXNnc3RyICKu4WRu/SB0ZXh0IGsgdnl0abl07G7tIgorCisjOiBleF9jbWRzMi5jOjI4OTgKK21zZ2lkICJQcmludGluZyBwYWdlICVkICglZCUlKSIKK21zZ3N0ciAiVGlza251IHN0cmFudSAlZCAoJWQlJSkiCisKKyM6IGV4X2NtZHMyLmM6MjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIgQ29weSAlZCBvZiAlZCIKK21zZ3N0ciAiIEtvcGllICVkIHogJWQiCisKKyM6IGV4X2NtZHMyLmM6Mjk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGVkOiAlcyIKK21zZ3N0ciAiVnl0abl07G5vOiAlcyIKKworIzogZXhfY21kczIuYzoyOTY2Cittc2dpZCAiUHJpbnRpbmcgYWJvcnRlZCIKK21zZ3N0ciAiVGlzayB6cnW5ZW4iCisKKyM6IGV4X2NtZHMyLmM6MzM0NAorbXNnaWQgIkU0NTU6IEVycm9yIHdyaXRpbmcgdG8gUG9zdFNjcmlwdCBvdXRwdXQgZmlsZSIKK21zZ3N0ciAiRTQ1NTogTmVsemUgemFwaXNvdmF0IGRvIHb9c3R1cG7taG8gUG9zdFNjcmlwdG926WhvIHNvdWJvcnUiCisKKyM6IGV4X2NtZHMyLmM6NDAxOQorbXNnaWQgIkUzMjQ6IENhbid0IG9wZW4gUG9zdFNjcmlwdCBvdXRwdXQgZmlsZSIKK21zZ3N0ciAiRTMyNDogTmVsemUgb3RldvjtdCB2/XN0dXBu7SBQb3N0U2NyaXB0b3b9IHNvdWJvciIKKworIzogZXhfY21kczIuYzo0MDU3Cittc2dpZCAiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogTmVsemUgb3RldvjtdCBzb3Vib3IgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQwNjgKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6IE5lbHplIOjtc3QgemRyb2pvdv0gUG9zdFNjcmlwdG92/SBzb3Vib3IgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQyNjYKK21zZ2lkICJTZW5kaW5nIHRvIHByaW50ZXIuLi4iCittc2dzdHIgIk9kZXPtbOFtIG5hIHRpc2vhcm51Li4uIgorCisjOiBleF9jbWRzMi5jOjQyNzAKK21zZ2lkICJFMzY1OiBGYWlsZWQgdG8gcHJpbnQgUG9zdFNjcmlwdCBmaWxlIgorbXNnc3RyICJFMzY1OiBTZWxoYWwgdGlzayBQb3N0U2NyaXB0b3bpaG8gc291Ym9ydSIKKworIzogZXhfY21kczIuYzo0MjcyCittc2dpZCAiUHJpbnQgam9iIHNlbnQuIgorbXNnc3RyICJUaXNrb3bhIPpsb2hhIG9kZXNs4W5hLiIKKworIzogZXhfY21kczIuYzo0NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICJBa3R14Wxu7SAlc2phenlrOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTk3OiBDYW5ub3Qgc2V0IGxhbmd1YWdlIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTE5NzogTmVsemUgbmFzdGF2aXQgamF6eWsgbmEgXCIlc1wiIgorCisjOiBleF9kb2NtZC5jOjQ5MQorbXNnaWQgIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIgorbXNnc3RyICJTcG91uXTtbSBFeCBt82QuIE5hcGm5dGUgXCJ2aXN1YWxcIiBwcm8gbuF2cmF0IGRvIG5vcm3hbG7taG8gbfNkdS4iCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjUyNworbXNnaWQgIkF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJLb25lYyBzb3Vib3J1IgorCisjOiBleF9kb2NtZC5jOjYwMgorbXNnaWQgIkUxNjk6IENvbW1hbmQgdG9vIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE2OTogUPjta2F6IGplIHD47WxpuSByZWt1cnppdm7tIgorCisjOiBleF9kb2NtZC5jOjkxMQorbXNnaWQgIkUxNzA6IE1pc3NpbmcgOmVuZHdoaWxlIgorbXNnc3RyICJFMTcwOiBDaHli7SA6ZW5kd2hpbGUiCisKKyM6IGV4X2RvY21kLmM6OTEzCittc2dpZCAiRTE3MTogTWlzc2luZyA6ZW5kaWYiCittc2dzdHIgIkUxNzE6IENoeWLtIDplbmRpZiIKKworIzogZXhfZG9jbWQuYzo5MjMKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICJLb25lYyBpbnRlcnByZXRvdmFu6WhvIHNvdWJvcnUiCisKKyM6IGV4X2RvY21kLmM6OTI0Cittc2dpZCAiRW5kIG9mIGZ1bmN0aW9uIgorbXNnc3RyICJLb25lYyBmdW5rY2UiCisKKyM6IGV4X2RvY21kLmM6MTM0NAorbXNnaWQgIkFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgIk5lamVkbm96bmHobukgcG91vml07SB1vml2YXRlbHNreSBkZWZpbm92YW7paG8gcPjta2F6dSIKKworIzogZXhfZG9jbWQuYzoxMzU4Cittc2dpZCAiTm90IGFuIGVkaXRvciBjb21tYW5kIgorbXNnc3RyICJOZW7tIHD47WthemVtIGVkaXRvcnUiCisKKyM6IGV4X2RvY21kLmM6MTQ0MQorbXNnaWQgIkRvbid0IHBhbmljISIKK21zZ3N0ciAiTmVwYW5pa2H4dGUhIgorCisjOiBleF9kb2NtZC5jOjE0NjAKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4iCittc2dzdHIgIlphZOFuIHpw7HRu/SByb3pzYWgiCisKKyM6IGV4X2RvY21kLmM6MTQ2OQorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiwgT0sgdG8gc3dhcCIKK21zZ3N0ciAiWmFk4W4genDsdG79IHJvenNhaC4gUHJvaG9kaXQgaHJhbmljZSIKKworIzogZXhfZG9jbWQuYzoxNTgwCittc2dpZCAiVXNlIHcgb3Igdz4+IgorbXNnc3RyICJQb3W+aWp0ZSB3IOhpIHc+PiIKKworIzogZXhfZG9jbWQuYzozMDg2Cittc2dpZCAiRTMxOTogU29ycnksIHRoZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMzE5OiBQ+O1rYXogbmVu7SB06XRvIHZlcnppIGJvaHW+ZWwgaW1wbGVtZW50b3bhbiIKKworIzogZXhfZG9jbWQuYzozMjU2Cittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6IFD47XB1c3Ru/SBqZSBwb3V6ZSBqZWRlbiBu4XpldiBzb3Vib3J1IgorCisjOiBleF9kb2NtZC5jOjM4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICJKZbl07CB6Yv12YWrtIHNvdWJvcnkgayBlZGl0YWNpICglZCkuIENoY2V0ZSBw+GVzdG8gdWtvbuhpdCBlZGl0b3I/IgorCisjOiBleF9kb2NtZC5jOjM4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3MzogJWxkIG1vcmUgZmlsZXMgdG8gZWRpdCIKK21zZ3N0ciAiRTE3MzogSmW5dOwgemL9dmFq7SBzb3Vib3J5IGsgZWRpdGFjaSAoJWxkKS4iCisKKyM6IGV4X2RvY21kLmM6MzkxMQorbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IHVzZSAhIHRvIHJlZGVmaW5lIgorbXNnc3RyICJFMTc0OiBQ+O1rYXogamm+IGV4aXN0dWplOiBwb3W+aWp0ZSAhIHBybyBw+GVkZWZpbm924W7tIgorCisjOiBleF9kb2NtZC5jOjQwMTYKK21zZ2lkICIiCisiXG4iCisiICAgIE5hbWUgICAgICAgIEFyZ3MgUmFuZ2UgQ29tcGxldGUgIERlZmluaXRpb24iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgSm3pbm8gICAgICAgQXJncyBSb3pzYWgg2nBsbm9zdCAgRGVmaW5pY2UiCisKKyM6IGV4X2RvY21kLmM6NDEwNQorbXNnaWQgIk5vIHVzZXItZGVmaW5lZCBjb21tYW5kcyBmb3VuZCIKK21zZ3N0ciAiTmVieWx5IG5hbGV6ZW55IL7hZG7pIHW+aXZhdGVsc2t5IGRlZmlub3ZhbukgcPjta2F6eSIKKworIzogZXhfZG9jbWQuYzo0MTM2Cittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTogTmVieWx5IHphZOFueSC+4WRu6SBhdHJpYnV0eSIKKworIzogZXhfZG9jbWQuYzo0MTg4Cittc2dpZCAiRTE3NjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJFMTc2OiBDaHlibv0gcG/oZXQgYXJndW1lbnT5IgorCisjOiBleF9kb2NtZC5jOjQyMDMKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiBPcGFrb3bhbu0gbmVt+b5lIGL9dCB6YWThbm8gZHZha3LhdCIKKworIzogZXhfZG9jbWQuYzo0MjEzCittc2dpZCAiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIKK21zZ3N0ciAiRTE3ODogQ2h5Ym7hIGltcGxpY2l0bu0gaG9kbm90YSBwcm8gcG/oZXQiCisKKyM6IGV4X2RvY21kLmM6NDI0MQorbXNnaWQgIkUxNzk6IGFyZ3VtZW50IHJlcXVpcmVkIGZvciBjb21wbGV0ZSIKK21zZ3N0ciAiRTE3OTogY2h5Ym7hIGltcGxpY2l0bu0gaG9kbm90YSBwcm8gb3Bha2924W7tIgorCisjOiBleF9kb2NtZC5jOjQyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MDogSW52YWxpZCBjb21wbGV0ZSB2YWx1ZTogJXMiCittc2dzdHIgIkUxODA6IENoeWJu4SBob2Rub3RhIGRvcGxu7G7tOiAlcyIKKworIzogZXhfZG9jbWQuYzo0MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MTogQ2h5Ym79IGF0cmlidXQ6ICVzIgorCisjOiBleF9kb2NtZC5jOjQzMDkKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4MjogQ2h5Ym7pIGpt6W5vIHD47WthenUiCisKKyM6IGV4X2RvY21kLmM6NDMyNAorbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4MzogVb5pdmF0ZWxza3kgZGVmaW5vdmFu6SBw+O1rYXp5IG11c+0gemHo7W5hdCB2ZWxpa/1tIHDtc21lbmVtLiIKKworIzogZXhfZG9jbWQuYzo0MzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODQ6IE5vIHN1Y2ggdXNlci1kZWZpbmVkIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTg0OiBVvml2YXRlbHNreSBkZWZpbm92YW79IHD47WtheiAlcyBuZWV4aXN0dWplIgorCisjOiBleF9kb2NtZC5jOjQ4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NTogQ2Fubm90IGZpbmQgY29sb3Igc2NoZW1lICVzIgorbXNnc3RyICJFMTg1OiBOZWx6ZSBuYWzpenQgYmFyZXZu6SBzY2jpbWEgJXMiCisKKyM6IGV4X2RvY21kLmM6NDg1MgorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICJCbGFob3D4ZWppLCB1vml2YXRlbGkgVmltdSEiCisKKyM6IGV4X2RvY21kLmM6NTU0OQorbXNnaWQgIkVkaXQgRmlsZSBpbiBuZXcgd2luZG93IgorbXNnc3RyICJFZGl0b3ZhdCBzb3Vib3IgdiBub3bpbSBva27sIgorCisjOiBleF9kb2NtZC5jOjU4MTUKK21zZ2lkICJObyBzd2FwIGZpbGUiCittc2dzdHIgIq7hZG79IG9ka2zhZGFj7SBzb3Vib3IiCisKKyM6IGV4X2RvY21kLmM6NTkxOQorbXNnaWQgIkFwcGVuZCBGaWxlIgorbXNnc3RyICJVbG++aXQgc291Ym9yIgorCisjOiBleF9kb2NtZC5jOjU5NzgKK21zZ2lkICJFMTg2OiBObyBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkUxODY6IK7hZG79IHD4ZWRjaG967SBhZHJlc+H4IgorCisjOiBleF9kb2NtZC5jOjYwNTUKK21zZ2lkICJFMTg3OiBVbmtub3duIgorbXNnc3RyICJFMTg3OiBOZXpu4W39IgorCisjOiBleF9kb2NtZC5jOjYxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2luZG93IHBvc2l0aW9uOiBYICVkLCBZICVkIgorbXNnc3RyICJVbe1zdOxu7SBva25hOiBYICVkLCBZICVkIgorCisjOiBleF9kb2NtZC5jOjYxNzgKK21zZ2lkICJFMTg4OiBPYnRhaW5pbmcgd2luZG93IHBvc2l0aW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiRTE4ODogTmEgdOl0byBwbGF0Zm9ybewgbmVsemUgdW3tc3Tsbu0gb2tuYSB6amlzdGl0IgorCisjOiBleF9kb2NtZC5jOjY0NDQKK21zZ2lkICJTYXZlIFJlZGlyZWN0aW9uIgorbXNnc3RyICJVbG++aXQgcPhlc23scm924W7tIgorCisjOiBleF9kb2NtZC5jOjY1OTMKK21zZ2lkICJTYXZlIFZpZXciCittc2dzdHIgIlVsb75pdCBwb2hsZWQiCisKKyM6IGV4X2RvY21kLmM6NjU5NAorbXNnaWQgIlNhdmUgU2Vzc2lvbiIKK21zZ3N0ciAiVWxvvml0IHNlemVu7SIKKworIzogZXhfZG9jbWQuYzo2NTk2Cittc2dpZCAiU2F2ZSBTZXR1cCIKK21zZ3N0ciAiVWxvvml0IG5hc3RhdmVu7SIKKworIzogZXhfZG9jbWQuYzo2NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODk6IFwiJXNcIiBleGlzdHMgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTE4OTogXCIlc1wiIGV4aXN0dWplIChwb3W+aWp0ZSAhIHBybyB2eW51Y2Vu7SkiCisKKyM6IGV4X2RvY21kLmM6Njc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxOTA6IE5lbHplIG90ZXb47XQgXCIlc1wiIHBybyB64XBpcyIKKworIy4gc2V0IG1hcmsKKyM6IGV4X2RvY21kLmM6Njc3NAorbXNnaWQgIkUxOTE6IEFyZ3VtZW50IG11c3QgYmUgYSBsZXR0ZXIgb3IgZm9yd2FyZC9iYWNrd2FyZCBxdW90ZSIKK21zZ3N0ciAiRTE5MTogQXJndW1lbnRlbSBt+b5lIGL9dCBwb3V6ZSBw7XNtZW5vIG5lYm8gcHJhdv0g6GkgbGV2/SBhcG9zdHJvZiIKKworIzogZXhfZG9jbWQuYzo2ODAzCittc2dpZCAiRTE5MjogUmVjdXJzaXZlIHVzZSBvZiA6bm9ybWFsIHRvbyBkZWVwIgorbXNnc3RyICJFMTkyOiBWbm/4ZW7tIDpub3JtYWwgamUgcPjtbGm5IGhsdWJva+kiCisKKyM6IGV4X2RvY21kLmM6NzE3MQorbXNnaWQgIjppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJ2bm/4ZW7tIDppZiBqZSBw+O1sabkgaGx1Ym9r6SIKKworIzogZXhfZG9jbWQuYzo3MjA2Cittc2dpZCAiOmVuZGlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICI6ZW5kaWYgYmV6IG9kcG927WRhau1j7WhvIDppZiIKKworIzogZXhfZG9jbWQuYzo3MjI2Cittc2dpZCAiOmVsc2Ugd2l0aG91dCA6aWYiCittc2dzdHIgIjplbHNlIGJleiBvZHBvdu1kYWrtY+1obyA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzIyOAorbXNnaWQgIjplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIjplbHNlaWYgYmV6IG9kcG927WRhau1j7WhvIDppZiIKKworIzogZXhfZG9jbWQuYzo3MjgwCittc2dpZCAiOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgInZub/hlbu0gOndoaWxlIGplIHD47WxpuSBobHVib2vpIgorCisjOiBleF9kb2NtZC5jOjczMjYKK21zZ2lkICI6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIjpjb250aW51ZSBiZXogb2Rwb3btZGFq7WPtaG8gOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjczNTMKK21zZ2lkICI6YnJlYWsgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIjpicmVhayBiZXogb2Rwb3btZGFq7WPtaG8gOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjczNzYgZXhfZG9jbWQuYzo3MzgxCittc2dpZCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICI6ZW5kd2hpbGUgYmV6IG9kcG927WRhau1j7WhvIDp3aGlsZSIKKworIzogZXhfZG9jbWQuYzo3NDAyCittc2dpZCAiRTE5MzogOmVuZGZ1bmN0aW9uIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTE5MzogOmVuZGZ1bmN0aW9uIG1pbW8gZnVua2NpIgorCisjOiBleF9kb2NtZC5jOjc1ODIKK21zZ2lkICJFMTk0OiBObyBhbHRlcm5hdGUgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yICcjJyIKK21zZ3N0ciAiIgorIkUxOTQ6IK7hZG79IGFsdGVybmF0aXZu7SBu4XpldiBzb3Vib3J1LCBrdGVy/W0gYnkgYnlsbyBtb75u6SBuYWhyYWRpdCAnIyciCisKKyM6IGV4X2RvY21kLmM6NzYxMworbXNnaWQgIm5vIGF1dG9jb21tYW5kIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhZmlsZT5cIiIKK21zZ3N0ciAiruFkbv0gbuF6ZXYgc291Ym9ydSwga3Rlcv1tIGJ5IGJ5bG8gbW++bukgbmFocmFkaXQgXCI8YWZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6NzYyMQorbXNnaWQgIm5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAiruFkbukg6O1zbG8gYnVmZmVydSwga3Rlcv1tIGJ5IGJ5bG8gbW++bukgbmFocmFkaXQgXCI8YWJ1Zj5cIiIKKworIzogZXhfZG9jbWQuYzo3NjMyCittc2dpZCAibm8gYXV0b2NvbW1hbmQgbWF0Y2ggbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhbWF0Y2g+XCIiCittc2dzdHIgIiIKKyKu4WRu4SBzaG9kYSBhdXRvbWF0aWNr/WNoIHD47WthevksIGt0ZXJvdSBieSBieWxvIG1vvm7pIG5haHJhZGl0IFwiPGFtYXRjaD5cIiIKKworIzogZXhfZG9jbWQuYzo3NjQyCittc2dpZCAibm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIq7hZG79IGludGVycHJldG92YW79IHNvdWJvciwga3Rlcv1tIGJ5IGJ5bG8gbW++bukgbmFocmFkaXQgXCI8c2ZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6NzY4MworIywgbm8tYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBmaWxlIG5hbWUgZm9yICclJyBvciAnIycsIG9ubHkgd29ya3Mgd2l0aCBcIjpwOmhcIiIKK21zZ3N0ciAiUHLhemRu/SBu4XpldiBzb3Vib3J1IHBybyAnJScg6GkgJyMnIGZ1bmd1amUgcG91emUgcyBcIjpwOmhcIiIKKworIzogZXhfZG9jbWQuYzo3Njg1Cittc2dpZCAiRXZhbHVhdGVzIHRvIGFuIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiVv1zbGVka2VtIHZ5aG9kbm9jZW7tIGplIHBy4Xpkbv0g+GV07HplYyIKKworIzogZXhfZG9jbWQuYzo4NTk0Cittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiBOZWx6ZSBvdGV2+O10IHBybyDodGVu7SB2aW1pbmZvIHNvdWJvciIKKworIzogZXhfZG9jbWQuYzo4NzY3Cittc2dpZCAiRTE5NjogTm8gZGlncmFwaHMgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMTk2OiBWIHTpdG8gdmVyemkgbmVqc291IHNw+GW+a3kgcG9kcG9yb3bhbnkiCisKKyM6IGV4X2dldGxuLmM6Mjc4NQorbXNnaWQgInRhZ25hbWUiCittc2dzdHIgImpt6W5vIHRhZ3UiCisKKyM6IGV4X2dldGxuLmM6Mjc4OAorbXNnaWQgIiBraW5kIGZpbGVcbiIKK21zZ3N0ciAiIHR5cCBzb3Vib3JcbiIKKworIzogZXhfZ2V0bG4uYzozOTk3Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICIndm9sYmEgJ2hpc3RvcnknIGplIG5hc3RhdmVuYSBuYSBudWx1IgorCisjOiBleF9nZXRsbi5jOjQyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgJXMgSGlzdG9yeSAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIEhpc3RvcmllICVzIChwb+jtbmFqZSBuZWpub3bsarntIHBvbG++a291KTpcbiIKKworIzogZXhfZ2V0bG4uYzo0MjM4Cittc2dpZCAiQ29tbWFuZCBMaW5lIgorbXNnc3RyICJw+O1rYXpvdukg+OFka3kiCisKKyM6IGV4X2dldGxuLmM6NDIzOQorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgInZ5aGxlZOF2YW79Y2gg+GV07Hpj+SIKKworIzogZXhfZ2V0bG4uYzo0MjQwCittc2dpZCAiRXhwcmVzc2lvbiIKK21zZ3N0ciAidv1yYXr5IgorCisjOiBleF9nZXRsbi5jOjQyNDEKK21zZ2lkICJJbnB1dCBMaW5lIgorbXNnc3RyICJ2c3R1cG7tIPjhZGt5IgorCisjOiBleF9nZXRsbi5jOjQyNzEKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyIHD4ZWtyYeh1amUgZOlsa3UgcPjta2F6dSIKKworIzogZXhfZ2V0bG4uYzo0NDM1Cittc2dpZCAiRTE5OTogQWN0aXZlIHdpbmRvdyBvciBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiRTE5OTogU21heuFubyBha3Rpdm7tIG9rbm8g6GkgYnVmZmVyIgorCisjOiBmaWxlaW8uYzozNDcKK21zZ2lkICJJbGxlZ2FsIGZpbGUgbmFtZSIKK21zZ3N0ciAibmVw+O1wdXN0bv0gbuF6ZXYgc291Ym9ydSIKKworIzogZmlsZWlvLmM6MzcxIGZpbGVpby5jOjQ5NSBmaWxlaW8uYzoyNDkxIGZpbGVpby5jOjI1MjkKK21zZ2lkICJpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiamUgYWRyZXPh+GVtIgorCisjOiBmaWxlaW8uYzozNzMKK21zZ2lkICJpcyBub3QgYSBmaWxlIgorbXNnc3RyICJuZW7tIHNvdWJvcmVtIgorCisjOiBmaWxlaW8uYzo1MTUgZmlsZWlvLmM6MzU4MQorbXNnaWQgIltOZXcgRmlsZV0iCittc2dzdHIgIltub3b9IHNvdWJvcl0iCisKKyM6IGZpbGVpby5jOjUzMgorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIltw+O1zdHVwIG9kbe10bnV0XSIKKworIzogZmlsZWlvLmM6NjI0Cittc2dpZCAiRTIwMDogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG1hZGUgdGhlIGZpbGUgdW5yZWFkYWJsZSIKK21zZ3N0ciAiRTIwMDogKlJlYWRQcmUgYXV0b21hdGlja+kgcPjta2F6eSB16GluaWx5IHNvdWJvciBuZehpdGVsbv1tIgorCisjOiBmaWxlaW8uYzo2MjYKK21zZ2lkICJFMjAxOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMjAxOiAqUmVhZFByZSBhdXRvbWF0aWNr6SBw+O1rYXp5IG5lc23tIG3sbml0IGFrdHXhbG7tIGJ1ZmZlciIKKworIzogZmlsZWlvLmM6NjQ2Cittc2dpZCAiVmltOiBSZWFkaW5nIGZyb20gc3RkaW4uLi5cbiIKK21zZ3N0ciAiVmltOiDIdHUgemUgc3RhbmRhcmRu7WhvIHZzdHVwdS4uLlxuIgorCisjOiBmaWxlaW8uYzo2NTIKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIsh0dSB6ZSBzdGFuZGFyZG7taG8gdnN0dXB1Li4uIgorCisjLiBSZS1vcGVuaW5nIHRoZSBvcmlnaW5hbCBmaWxlIGZhaWxlZCEKKyM6IGZpbGVpby5jOjg3NgorbXNnaWQgIkUyMDI6IENvbnZlcnNpb24gbWFkZSBmaWxlIHVucmVhZGFibGUhIgorbXNnc3RyICJFMjAyOiBQbyBrb252ZXJ6aSBqZSBzb3Vib3IgbmXoaXRlbG79ISIKKworIzogZmlsZWlvLmM6MTczMgorbXNnaWQgIltmaWZvL3NvY2tldF0iCittc2dzdHIgIltwb2ptZW5vdmFu4SByb3VyYS9zb2tldF0iCisKKyM6IGZpbGVpby5jOjE3MzkKK21zZ2lkICJbZmlmb10iCittc2dzdHIgIltwb2ptZW5vdmFu4SByb3VyYV0iCisKKyM6IGZpbGVpby5jOjE3NDYKK21zZ2lkICJbc29ja2V0XSIKK21zZ3N0ciAiW3Nva2V0XSIKKworIzogZmlsZWlvLmM6MTc1NAorbXNnaWQgIltST10iCittc2dzdHIgIltST10iCisKKyM6IGZpbGVpby5jOjE3NjQKK21zZ2lkICJbQ1IgbWlzc2luZ10iCittc2dzdHIgIltjaHli7SBDUl0iCisKKyM6IGZpbGVpby5jOjE3NjkKK21zZ2lkICJbTkwgZm91bmRdIgorbXNnc3RyICJbbmFsZXplbm8gTkxdIgorCisjOiBmaWxlaW8uYzoxNzc0Cittc2dpZCAiW2xvbmcgbGluZXMgc3BsaXRdIgorbXNnc3RyICJbZGxvdWjpIPjhZGt5IHphbG9tZW55XSIKKworIzogZmlsZWlvLmM6MTc4MCBmaWxlaW8uYzozNTY1Cittc2dpZCAiW05PVCBjb252ZXJ0ZWRdIgorbXNnc3RyICJbbmV6a29udmVydG924W5dIgorCisjOiBmaWxlaW8uYzoxNzg1IGZpbGVpby5jOjM1NzAKK21zZ2lkICJbY29udmVydGVkXSIKK21zZ3N0ciAiW3prb252ZXJ0b3bhbl0iCisKKyM6IGZpbGVpby5jOjE3OTIgZmlsZWlvLmM6MzU5NQorbXNnaWQgIltjcnlwdGVkXSIKK21zZ3N0ciAiW3phuWlmcm924W5dIgorCisjOiBmaWxlaW8uYzoxNzk5Cittc2dpZCAiW0NPTlZFUlNJT04gRVJST1JdIgorbXNnc3RyICJbQ0hZQkEgUNhFVk9EVV0iCisKKyM6IGZpbGVpby5jOjE4MDYKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbQ0hZQlkgyFRFTs1dIgorCisjOiBmaWxlaW8uYzoyMDEzCittc2dpZCAiQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIGNvbnZlcnNpb24iCittc2dzdHIgIk5lbHplIG5hbOl6dCBkb+hhc279IHNvdWJvciBwcm8ga29udmVyemkiCisKKyM6IGZpbGVpby5jOjIwMjAKK21zZ2lkICJDb252ZXJzaW9uIHdpdGggJ2NoYXJjb252ZXJ0JyBmYWlsZWQiCittc2dzdHIgIktvbnZlcnplIHMgJ2NoYXJjb252ZXJ0JyBzZSBuZXpkYfhpbGEiCisKKyM6IGZpbGVpby5jOjIwMjMKK21zZ2lkICJjYW4ndCByZWFkIG91dHB1dCBvZiAnY2hhcmNvbnZlcnQnIgorbXNnc3RyICJuZWx6ZSDo7XN0IHb9c3R1cCAnY2hhcmNvbnZlcnQnIgorCisjOiBmaWxlaW8uYzoyNDA3Cittc2dpZCAiRTIwMzogQXV0b2NvbW1hbmRzIGRlbGV0ZWQgb3IgdW5sb2FkZWQgYnVmZmVyIHRvIGJlIHdyaXR0ZW4iCittc2dzdHIgIiIKKyJFMjAzOiBBdXRvbWF0aWNr6SBw+O1rYXp5IHNtYXphbHkg6GkgZGVha3Rpdm92YWx5IGJ1ZmZlciwga3Rlcv0gbexsIGL9dCAiCisidWxvvmVuIgorCisjOiBmaWxlaW8uYzoyNDMwCittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IEF1dG9tYXRpY2v9IHD47WtheiBuZehla2Fu/W0genD5c29iZW0gem3sbmlsIHBv6GV0IPjhZGv5IgorCisjOiBmaWxlaW8uYzoyNDk2IGZpbGVpby5jOjI1MTMKK21zZ2lkICJpcyBub3QgYSBmaWxlIG9yIHdyaXRhYmxlIGRldmljZSIKK21zZ3N0ciAibmVu7SBzb3Vib3JlbSBhbmkgemH47Xplbu1tIG5hIG7sviBsemUgemFwaXNvdmF0IgorCisjOiBmaWxlaW8uYzoyNTU1Cittc2dpZCAiaXMgcmVhZC1vbmx5ICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgImplIHBvdXplIHBybyDodGVu7SAocG91vmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjOiBmaWxlaW8uYzoyODUxCittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiTmVsemUgemFwaXNvdmF0IGRvIHrhbG++bu1obyBzb3Vib3J1IChwb3W+aWp0ZSAhIHBybyB2eW51Y2Vu7SkiCisKKyM6IGZpbGVpby5jOjI4NjMKK21zZ2lkICJDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiQ2h5YmEgcPhpIHV6YXbtcuFu7SB64Wxvvm7taG8gc291Ym9ydSAocG91vmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjOiBmaWxlaW8uYzoyODY1Cittc2dpZCAiQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiTmVsemUgbmHo7XN0IHNvdWJvciBwcm8geuFsb2h1IChwb3W+aWp0ZSAhIHBybyB2eW51Y2Vu7SkiCisKKyM6IGZpbGVpby5jOjI4ODEKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIk5lbHplIHZ5dHZv+Gl0IHrhbG++bu0gc291Ym9yIChwb3W+aWp0ZSAhIHBybyB2eW51Y2Vu7SkiCisKKyM6IGZpbGVpby5jOjI5NzAKK21zZ2lkICJDYW4ndCBtYWtlIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIk5lbHplIHZ5dHZv+Gl0IHrhbG++bu0gc291Ym9yIChwb3W+aWp0ZSAhIHBybyB2eW51Y2Vu7SkiCisKKyMgcmVzb3VyY2UgZm9yayA/IQorIzogZmlsZWlvLmM6MzAzMgorbXNnaWQgIlRoZSByZXNvdXJjZSBmb3JrIHdpbGwgYmUgbG9zdCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICInUmVzb3VyY2UgZm9yaycgYnVkZSB6dHJhY2VuIChwb3W+aWp0ZSAhIHBybyB2eW51Y2Vu7SkiCisKKyM6IGZpbGVpby5jOjMxMjEKK21zZ2lkICJFMjE0OiBDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxNDogTmVsemUgbmFq7XQgZG/oYXNu/SB0ZW1wIHNvdWJvciBwcm8geuFwaXMiCisKKyM6IGZpbGVpby5jOjMxMzkKK21zZ2lkICJFMjEzOiBDYW5ub3QgY29udmVydCAodXNlICEgdG8gd3JpdGUgd2l0aG91dCBjb252ZXJzaW9uKSIKK21zZ3N0ciAiRTIxMzogTmVsemUgcPhldulzdCAocG91vmlqdGUgISBwcm8geuFwaXMgYmV6IHD4ZXZvZHUpIgorCisjOiBmaWxlaW8uYzozMTc2Cittc2dpZCAiRTE2NjogQ2FuJ3Qgb3BlbiBsaW5rZWQgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE2NjogTmVsemUgb3RldvjtdCBw+Glwb2plbv0gc291Ym9yIHBybyB64XBpcyIKKworIzogZmlsZWlvLmM6MzE4MAorbXNnaWQgIkUyMTI6IENhbid0IG9wZW4gZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxMjogTmVsemUgb3RldvjtdCBzb3Vib3IgcHJvIHrhcGlzIgorCisjOiBmaWxlaW8uYzozNDIzCittc2dpZCAiQ2xvc2UgZmFpbGVkIgorbXNnc3RyICJWb2zhbu0gY2xvc2Ugc2VsaGFsbyIKKworIzogZmlsZWlvLmM6MzQ4MQorbXNnaWQgIndyaXRlIGVycm9yLCBjb252ZXJzaW9uIGZhaWxlZCIKK21zZ3N0ciAiY2h5YmEgcPhpIHrhcGlzdSwga29udmVyemUgc2UgbmV6ZGH4aWxhIgorCisjOiBmaWxlaW8uYzozNDg3Cittc2dpZCAid3JpdGUgZXJyb3IgKGZpbGUgc3lzdGVtIGZ1bGw/KSIKK21zZ3N0ciAiY2h5YmEgcPhpIHVrbOFk4W7tIChqZSB2b2xu6SBt7XN0byBuYSBkaXNrdT8pIgorCisjOiBmaWxlaW8uYzozNTYwCittc2dpZCAiIENPTlZFUlNJT04gRVJST1IiCittc2dzdHIgIiBDSFlCQSBQ2EVWT0RVIgorCisjOiBmaWxlaW8uYzozNTc2Cittc2dpZCAiW0RldmljZV0iCittc2dzdHIgIlt6YfjtemVu7V0iCisKKyM6IGZpbGVpby5jOjM1ODEKK21zZ2lkICJbTmV3XSIKK21zZ3N0ciAiW05vdv1dIgorCisjOiBmaWxlaW8uYzozNjAzCittc2dpZCAiIFthXSIKK21zZ3N0ciAiIFtwXSIKKworIzogZmlsZWlvLmM6MzYwMworbXNnaWQgIiBhcHBlbmRlZCIKK21zZ3N0ciAiIHD4aXBvamVuIgorCisjOiBmaWxlaW8uYzozNjA1Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiIFt1XSIKKworIzogZmlsZWlvLmM6MzYwNQorbXNnaWQgIiB3cml0dGVuIgorbXNnc3RyICIgdWxvvmVuIgorCisjOiBmaWxlaW8uYzozNjU1Cittc2dpZCAiRTIwNTogUGF0Y2htb2RlOiBjYW4ndCBzYXZlIG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDU6IHBhdGNobW9kZTogbmVsemUgdWxvvml0IHD5dm9kbu0gc291Ym9yIgorCisjOiBmaWxlaW8uYzozNjc3Cittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBwYXRjaG1vZGU6IG5lbHplIHphcGlzb3ZhdCBkbyBwcuF6ZG7paG8gcPl2b2Ru7WhvIHNvdWJvcnUiCisKKyM6IGZpbGVpby5jOjM2OTIKK21zZ2lkICJFMjA3OiBDYW4ndCBkZWxldGUgYmFja3VwIGZpbGUiCittc2dzdHIgIkUyMDc6IE5lbHplIHNtYXphdCB64Wxvvm7tIHNvdWJvciIKKworIzogZmlsZWlvLmM6Mzc0NAorbXNnaWQgIiIKKyJcbiIKKyJXQVJOSU5HOiBPcmlnaW5hbCBmaWxlIG1heSBiZSBsb3N0IG9yIGRhbWFnZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZBUk9WwU7NOiBPYnNhaCBw+XZvZG7taG8gc291Ym9ydSBt+b5lIGL9dCB6dHJhY2VuIOhpIHBvuWtvemVuXG4iCisKKyM6IGZpbGVpby5jOjM3NDYKK21zZ2lkICJkb24ndCBxdWl0IHRoZSBlZGl0b3IgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorbXNnc3RyICJuZXVrb27odWp0ZSBlZGl0b3IgZPjtdmUsIG5lviBidWRlIHNvdWJvciD6c3DsuW7sIHVsb75lbiEiCisKKyM6IGZpbGVpby5jOjM4MjYKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW2Rvc10iCisKKyM6IGZpbGVpby5jOjM4MjYKK21zZ2lkICJbZG9zIGZvcm1hdF0iCittc2dzdHIgIltkb3MgZm9ybeF0XSIKKworIzogZmlsZWlvLmM6MzgzMworbXNnaWQgIlttYWNdIgorbXNnc3RyICJbbWFjXSIKKworIzogZmlsZWlvLmM6MzgzMworbXNnaWQgIlttYWMgZm9ybWF0XSIKK21zZ3N0ciAiW21hYyBmb3Jt4XRdIgorCisjOiBmaWxlaW8uYzozODQwCittc2dpZCAiW3VuaXhdIgorbXNnc3RyICJbdW5peF0iCisKKyM6IGZpbGVpby5jOjM4NDAKK21zZ2lkICJbdW5peCBmb3JtYXRdIgorbXNnc3RyICJbdW5peCBmb3Jt4XRdIgorCisjOiBmaWxlaW8uYzozODY3Cittc2dpZCAiMSBsaW5lLCAiCittc2dzdHIgIjEg+OFkZWssICIKKworIzogZmlsZWlvLmM6Mzg2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMsICIKK21zZ3N0ciAiJWxkIPjhZGv5LCAiCisKKyM6IGZpbGVpby5jOjM4NzIKK21zZ2lkICIxIGNoYXJhY3RlciIKK21zZ3N0ciAiMSB6bmFrIgorCisjOiBmaWxlaW8uYzozODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlbGQgem5ha/ksICIKKworIzogZmlsZWlvLmM6Mzg4NAorbXNnaWQgIltub2VvbF0iCittc2dzdHIgIlu+4WRu/SBlb2xdIgorCisjOiBmaWxlaW8uYzozODg0Cittc2dpZCAiW0luY29tcGxldGUgbGFzdCBsaW5lXSIKK21zZ3N0ciAiW25l+nBsbv0gcG9zbGVkbu0g+OFkZWtdIgorCisjLiBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIy4gbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjLiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyM6IGZpbGVpby5jOjM5MDMKK21zZ2lkICJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiCittc2dzdHIgIlZBUk9WwU7NOiBvZCBqZWhvIG5h6HRlbu0gYnlsIG9ic2FoIHNvdWJvcnUgem3sbuxuISEhISIKKworIzogZmlsZWlvLmM6MzkwNQorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byB3cml0ZSB0byBpdCIKK21zZ3N0ciAiQ2hjZXRlIGplaiBvcHJhdmR1IHVsb75pdCIKKworIzogZmlsZWlvLmM6NDg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogQ2h5YmEgcPhpIHrhcGlzdSBkbyBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjQ4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwOTogRXJyb3IgY2xvc2luZyBcIiVzXCIiCittc2dzdHIgIkUyMDk6IENoeWIgcPhpIHV6YXbtcuFu7SBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjQ4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMDogRXJyb3IgcmVhZGluZyBcIiVzXCIiCittc2dzdHIgIkUyMTA6IENoeWJhIHD4aSDodGVu7SBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjUwMzUKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIHpydblpbCBidWZmZXIiCisKKyM6IGZpbGVpby5jOjUwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMTogV2FybmluZzogRmlsZSBcIiVzXCIgbm8gbG9uZ2VyIGF2YWlsYWJsZSIKK21zZ3N0ciAiRTIxMTogd2ExOiBzb3Vib3IgXCIlc1wiIGppviBuZW7tIGRvc3R1cG79IgorCisjOiBmaWxlaW8uYzo1MDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiIgorIlcxMjogVmFyb3bhbu06IHNvdWJvciBcIiVzXCIgYnlsIHBvIHBv6OF0a3UgZWRpdGFjZSB6bexu7G4gYSBidWZmZXIgdmUgVmltICIKKyJ0YWvpIgorCisjOiBmaWxlaW8uYzo1MDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMTogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTE6IHdjMjogc291Ym9yIFwiJXNcIiBieWwgcG8gcG/o4XRrdSBlZGl0YWNlIHpt7G7sbiIKKworIzogZmlsZWlvLmM6NTA2MQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTY6IFZhcm924W7tOiBN82Qgc291Ym9ydSBcIiVzXCIgYnlsIHpt7G7sbiBvZCB6YXBv6G51dO0gZWRpdGFjZSIKKworIzogZmlsZWlvLmM6NTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTM6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTM6IHdjNDogcG8gcG/o4XRrdSBlZGl0YWNlIHZ5dHZv+GVuIHNvdWJvciBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjUwODgKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJWYXJvduFu7SIKKworIzogZmlsZWlvLmM6NTA4OQorbXNnaWQgIiIKKyImT0tcbiIKKyImTG9hZCBGaWxlIgorbXNnc3RyICIiCisiJk9LXG4iCisiJk5haHLhdCBzb3Vib3IiCisKKyM6IGZpbGVpby5jOjUxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IE5lbHplIHpub3Z1b3RldvjtdCBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU2NzAKK21zZ2lkICItLURlbGV0ZWQtLSIKK21zZ3N0ciAiLS1WeW1heuFuby0tIgorCisjLiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdAorIzogZmlsZWlvLmM6NTgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY3OiBObyBzdWNoIGdyb3VwOiBcIiVzXCIiCittc2dzdHIgIkUzNjc6IFNrdXBpbmEgXCIlc1wiIG5lZXhpc3R1amUiCisKKyM6IGZpbGVpby5jOjU5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgKjogJXMiCittc2dzdHIgIkUyMTU6IE5lcPjtcHVzdG79IHpuYWsgcG8gKjogJXMiCisKKyM6IGZpbGVpby5jOjU5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IFVk4Wxvc3QgJXMgbmVleGlzdHVqZSIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo2MTE1Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRvbWF0aWNr6SBw+O1rYXp5IC0tLSIKKworIzogZmlsZWlvLmM6NjM4NgorbXNnaWQgIkUyMTc6IENhbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZXZlbnRzIgorbXNnc3RyICJFMjE3OiBBdXRvbWF0aWNr6SBw+O1rYXp5IG5lbHplIHNwdXN0aXQgcHJvIFapRUNITlkgdWThbG9zdGkiCisKKyM6IGZpbGVpby5jOjY0MDkKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgIq7hZG7pIHZ5aG92dWrtY+0gYXV0b21hdGlja+kgcPjta2F6eSIKKworIzogZmlsZWlvLmM6NjY4MQorbXNnaWQgIkUyMTg6IGF1dG9jb21tYW5kIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkUyMTg6IHZub/hlbu0gYXV0b21hdGlja+lobyBw+O1rYXp1IHD47WxpuSBobHVib2vhIgorCisjOiBmaWxlaW8uYzo2OTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIEF1dG8gY29tbWFuZHMgZm9yIFwiJXNcIiIKK21zZ3N0ciAiJXMgYXV0b21hdGlja+kgcPjta2F6eSBwcm8gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAic3Bvdbl07W0gJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZmlsZWlvLmM6NzA0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdXRvY29tbWFuZCAlcyIKK21zZ3N0ciAiQXV0b21hdGlja/0gcPjta2F6ICVzIgorCisjOiBmaWxlaW8uYzo3NTY2Cittc2dpZCAiRTIxOTogTWlzc2luZyB7LiIKK21zZ3N0ciAiRTIxOTogQ2h5Yu0gey4iCisKKyM6IGZpbGVpby5jOjc1NjgKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiBDaHli7SB9LiIKKworIzogZm9sZC5jOjY2Cittc2dpZCAiTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAiruFkbv0geuFoeWIgbmVieWwgbmFsZXplbiIKKworIzogZm9sZC5jOjU1NAorbXNnaWQgIkUzNTA6IENhbm5vdCBjcmVhdGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUwOiBwb21vY+0gYWt0deFsbu0gJ2ZvbGRtZXRob2QnIG5lbHplIHZ5dHZv+Gl0IHrhaHliIgorCisjOiBmb2xkLmM6NTU2Cittc2dpZCAiRTM1MTogQ2Fubm90IGRlbGV0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTE6IHBvbW9j7SBha3R14Wxu7SAnZm9sZG1ldGhvZCcgbmVsemUgdnl0dm/4aXQgeuFoeWIiCisKKyM6IGZvbGQuYzoxNzAwCittc2dpZCAiRTIyMTogJ2NvbW1lbnRzdHJpbmcnIGlzIGVtcHR5IgorbXNnc3RyICJFMjIxOiB2b2xiYSAnY29tbWVudHN0cmluZycgamUgcHLhemRu4SIKKworIzogZ2V0Y2hhci5jOjI2OAorbXNnaWQgIkUyMjI6IEFkZCB0byByZWFkIGJ1ZmZlciIKK21zZ3N0ciAiRTIyMjogUPhpZGF0IGRvIGJ1ZmZlcnUgcHJvIOh0ZW7tIgorCisjOiBnZXRjaGFyLmM6MjExNAorbXNnaWQgIkUyMjM6IHJlY3Vyc2l2ZSBtYXBwaW5nIgorbXNnc3RyICJFMjIzOiByZWt1cnppdm7tIG1hcG924W7tIgorCisjOiBnZXRjaGFyLmM6Mjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI0OiBnbG9iYWwgYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNDogcHJvICVzIGppviBnbG9i4Wxu7SB6a3JhdGthIGppviBleGlzdHVqZSIKKworIzogZ2V0Y2hhci5jOjI5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNTogZ2xvYmFsIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI1OiBwcm8gJXMgamm+IGdsb2LhbG7tIG1hcG924W7tIGppviBleGlzdHVqZSIKKworIzogZ2V0Y2hhci5jOjMwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogcHJvICVzIGppviB6a3JhdGthIGppviBleGlzdHVqZSIKKworIzogZ2V0Y2hhci5jOjMwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNzogbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjc6IHBybyAlcyBqab4gbWFwb3bhbu0gamm+IGV4aXN0dWplIgorCisjOiBnZXRjaGFyLmM6MzE2MworbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAiruFkbuEgemtyYXRrYSBuZWJ5bCBuYWxlemVuYSIKKworIzogZ2V0Y2hhci5jOjMxNjUKK21zZ2lkICJObyBtYXBwaW5nIGZvdW5kIgorbXNnc3RyICKu4WRu6SBtYXBvduFu7SBuZWJ5bG8gbmFsZXplbm8iCisKKyM6IGdldGNoYXIuYzozOTkwCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiBuZXD47XB1c3Ru/SBt82QiCisKKyM6IGd1aS5jOjE4MQorbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiBOZWx6ZSBzcHVzdGl0IEdVSSIKKworIzogZ3VpLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzA6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjMwOiBOZWx6ZSDo7XN0IHogXCIlc1wiIgorCisjOiBndWkuYzo0MzEKK21zZ2lkICJFMjMxOiAnZ3VpZm9udHdpZGUnIGludmFsaWQiCittc2dzdHIgIkUyMzE6IHZvbGJhICdndWlmb250d2lkZScgamUgY2h5Ym7sIG5hc3RhdmVuYSIKKworIzogZ3VpLmM6MzkyNgorbXNnaWQgIkVycm9yIgorbXNnc3RyICJDaHliYSIKKworIzogZ3VpLmM6MzkyNworbXNnaWQgIiZPayIKK21zZ3N0ciAiJk9rIgorCisjOiBndWlfYXRfZnMuYzoyOTAKK21zZ2lkICI8Y2Fubm90IG9wZW4+ICIKK21zZ3N0ciAiPG5lbHplIG90ZXb47XQ+ICIKKworIzogZ3VpX2F0X2ZzLmM6MTExNQorIywgYy1mb3JtYXQKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGZvbnQgJXMiCittc2dzdHIgInZpbV9TZWxGaWxlOiBw7XNtbyAlcyBuZW7tIGRvc3R1cG7pIgorCisjOiBndWlfYXRfZnMuYzoyNTM4Cittc2dpZCAidmltX1NlbEZpbGU6IGNhbid0IHJldHVybiB0byBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAidmltX1NlbEZpbGU6IG5lbHplIHNlIHZy4XRpdCBkbyBha3R14Wxu7WhvIGFkcmVz4fhlIgorCisjOiBndWlfYXRfZnMuYzoyNTU3Cittc2dpZCAiUGF0aG5hbWU6IgorbXNnc3RyICJO4XpldiBjZXN0eToiCisKKyM6IGd1aV9hdF9mcy5jOjI1NjMKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJ2aW1fU2VsRmlsZTogbmVsemUgemppc3RpdCBha3R14Wxu7SBhZHJlc+H4IgorCisjOiBndWlfYXRfZnMuYzoyNTcxIGd1aV9tb3RpZi5jOjE2MDcKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyMuICdDYW5jZWwnIGJ1dHRvbgorIzogZ3VpX2F0X2ZzLmM6MjU3MSBndWlfZ3RrLmM6MTY4MyBndWlfbW90aWYuYzoxNjAyIGd1aV9tb3RpZi5jOjI4MjMKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIlpydblpdCIKKworIzogZ3VpX2F0X3NiLmM6NDg2Cittc2dpZCAiU2Nyb2xsYmFyIFdpZGdldDogQ291bGQgbm90IGdldCBnZW9tZXRyeSBvZiB0aHVtYiBwaXhtYXAuIgorbXNnc3RyICJQ+O1wcmF2ZWsgcG9zdW5vdmFj7SBsabl0eTogbmVsemUgemppc3RpdCBnZW9tZXRyaWkgb2Jy4XprdSIKKworIzogZ3VpX2F0aGVuYS5jOjE5MjggZ3VpX21vdGlmLmM6MTg1NQorbXNnaWQgIlZpbSBkaWFsb2ciCittc2dzdHIgIlZpbSBkaWFsb2ciCisKKyM6IGd1aV9iZXZhbC5jOjY4Cittc2dpZCAiRTIzMjogQ2Fubm90IGNyZWF0ZSBCYWxsb29uRXZhbCB3aXRoIGJvdGggbWVzc2FnZSBhbmQgY2FsbGJhY2siCittc2dzdHIgIkUyMzI6IEJhbGxvb25FdmFsIG5lbHplIHZ5dHZv+Gl0IHNlIHpwcuF2b3UgYSB64XJvdmXyIHpw7HRu/W0gdm9s4W7tbSIKKworIzogZ3VpX2d0ay5jOjExNDQKK21zZ2lkICJWaW0gZGlhbG9nLi4uIgorbXNnc3RyICJWaW0gZGlhbG9nLi4iCisKKyM6IGd1aV9ndGsuYzoxNTE5IGd1aV9tb3RpZi5jOjI3NDIKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIlZJTSAtIE5hbOl6dCBhIG5haHJhZGl0Li4uIgorCisjOiBndWlfZ3RrLmM6MTUyNCBndWlfbW90aWYuYzoyNzQ0Cittc2dpZCAiVklNIC0gU2VhcmNoLi4uIgorbXNnc3RyICJWSU0gLSBOYWzpenQuLi4iCisKKyM6IGd1aV9ndGsuYzoxNTQ3IGd1aV9tb3RpZi5jOjI4NjIKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICJWeWhsZWRhdDoiCisKKyM6IGd1aV9ndGsuYzoxNTY1IGd1aV9tb3RpZi5jOjI4OTQKK21zZ2lkICJSZXBsYWNlIHdpdGg6IgorbXNnc3RyICJOb3b9IHRleHQ6IgorCisjLiBleGFjdCBtYXRjaCBvbmx5IGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE1OTcgZ3VpX21vdGlmLmM6Mjk5NgorbXNnaWQgIk1hdGNoIGV4YWN0IHdvcmQgb25seSIKK21zZ3N0ciAiaGxlZGF0IHBvdXplIGNlbOEgc2xvdmEiCisKKyM6IGd1aV9ndGsuYzoxNjA5IGd1aV9tb3RpZi5jOjI5NjQKK21zZ2lkICJEaXJlY3Rpb24iCittc2dzdHIgIlNt7HIiCisKKyMuICdVcCcgYW5kICdEb3duJyBidXR0b25zCisjOiBndWlfZ3RrLmM6MTYyMSBndWlfbW90aWYuYzoyOTc2Cittc2dpZCAiVXAiCittc2dzdHIgIk5haG9ydSIKKworIzogZ3VpX2d0ay5jOjE2MjUgZ3VpX21vdGlmLmM6Mjk4NAorbXNnaWQgIkRvd24iCittc2dzdHIgIkRvbPkiCisKKyMuICdGaW5kIE5leHQnIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE2NDcgZ3VpX21vdGlmLmM6Mjc2NgorbXNnaWQgIkZpbmQgTmV4dCIKK21zZ3N0ciAiTmFq7XQgZGFsue0iCisKKyMuICdSZXBsYWNlJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNjY0IGd1aV9tb3RpZi5jOjI3ODMKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICJOYWhyYWRpdCIKKworIy4gJ1JlcGxhY2UgQWxsJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNjczIGd1aV9tb3RpZi5jOjI3OTYKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAiTmFocmFkaXQgdrllIgorCisjOiBndWlfZ3RrX3gxMS5jOjEwNzYgZ3VpX3gxMS5jOjExOTkKK21zZ2lkICJFMjMzOiBjYW5ub3Qgb3BlbiBkaXNwbGF5IgorbXNnc3RyICJFMjMzOiBuZWx6ZSBvdGV2+O10IGRpc3BsYXkiCisKKyM6IGd1aV9ndGtfeDExLmM6MjQzMyBndWlfeDExLmM6MjAwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM0OiBVbmtub3duIGZvbnRzZXQ6ICVzIgorbXNnc3RyICJFMjM0OiBOZXpu4W3hIHNhZGEgcO1zZW06ICVzIgorCisjOiBndWlfZ3RrX3gxMS5jOjI0NjAKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAiVv1i7HIgcO1zbWEiCisKKyM6IGd1aV9ndGtfeDExLmM6MjcwMiBndWlfbWFjLmM6Mjc4MCBndWlfdzQ4LmM6MTE5NyBndWlfeDExLmM6MTgzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBVbmtub3duIGZvbnQ6ICVzIgorbXNnc3RyICJFMjM1OiBOZXpu4W3pIHDtc21vOiAlcyIKKworIzogZ3VpX2d0a194MTEuYzoyNzEzIGd1aV94MTEuYzoxODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzY6IEZvbnQgXCIlc1wiIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiRTIzNjogUO1zbW8gXCIlc1wiIG5lbeEgcGV2bm91ILnt+Gt1IgorCisjOiBndWlfZ3RrX3gxMS5jOjI4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MjogQ29sb3IgbmFtZSBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkUyNDI6IE5lem7hbekgam3pbm8gYmFydnk6ICVzIgorCisjOiBndWlfZ3RrX3gxMS5jOjM1MTkgdWkuYzoxOTI5Cittc2dpZCAiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIKK21zZ3N0ciAiTe1zdG8gcHLhZG7pIHNjaHLhbmt5IHBvdb5pdG8gQ1VUX0JVRkZFUjAiCisKKyM6IGd1aV9tb3RpZi5jOjE2MDEgZ3VpX21vdGlmLmM6MTYwNAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHIiCisKKyM6IGd1aV9tb3RpZi5jOjE2MDMKK21zZ2lkICJEaXJlY3RvcmllcyIKK21zZ3N0ciAiQWRyZXPh+GUiCisKKyM6IGd1aV9tb3RpZi5jOjE2MDUKK21zZ2lkICJIZWxwIgorbXNnc3RyICJO4XBvduxkYSIKKworIzogZ3VpX21vdGlmLmM6MTYwNgorbXNnaWQgIkZpbGVzIgorbXNnc3RyICJTb3Vib3J5IgorCisjOiBndWlfbW90aWYuYzoxNjA4Cittc2dpZCAiU2VsZWN0aW9uIgorbXNnc3RyICJW/WLsciIKKworIzogZ3VpX21vdGlmLmM6MjgwOQorbXNnaWQgIlVuZG8iCittc2dzdHIgIlpw7HQiCisKKyM6IGd1aV9yaXNjb3MuYzo5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogQ2FuJ3QgbG9hZCBaYXAgZm9udCAnJXMnIgorbXNnc3RyICJFMjM1OiBOZWx6ZSBuYejtc3QgWmFwIGZvbnQgJyVzJyIKKworIzogZ3VpX3Jpc2Nvcy5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogQ2FuJ3QgdXNlIGZvbnQgJXMiCittc2dzdHIgIkUyMzU6IE5lbHplIHBvdb7tdCBmb250ICVzIgorCisjOiBndWlfcmlzY29zLmM6MTE2NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQyOiBNaXNzaW5nIGNvbG9yOiAlcyIKK21zZ3N0ciAiRTI0MjogQ2h5Yu0gYmFydmE6ICVzIgorCisjOiBndWlfcmlzY29zLmM6MzI2OQorbXNnaWQgIiIKKyJcbiIKKyJTZW5kaW5nIG1lc3NhZ2UgdG8gdGVybWluYXRlIGNoaWxkIHByb2Nlc3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQb3PtbOFtIHNpZ27hbCBrIHVrb27oZW7tIHN5bm92c2vpaG8gcHJvY2VzdS5cbiIKKworIzogZ3VpX3czMi5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiRTI0MzogQXJndW1lbnQgbmVwb2Rwb3JvduFuOiBcIi0lc1wiOyBQb3W+aWp0ZSBPTEUgdmVyemkuIgorCisjOiBndWlfdzQ4LmM6MjA2OAorbXNnaWQgIkZpbmQgc3RyaW5nICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIk5hau10IPhldOx6ZWMgKHBvdb5panRlICdcXFxcJyBrIG5hbGV6ZW7tICdcXCcpIgorCisjOiBndWlfdzQ4LmM6MjA5MworbXNnaWQgIkZpbmQgJiBSZXBsYWNlICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIk5hau10ICYgTmFocmFkaXQgKHBvdb5panRlICdcXFxcJyBrIG5hbGV6ZW7tICdcXCcpIgorCisjOiBndWlfeDExLmM6MTQxOQorbXNnaWQgIlZpbSBFNDU4OiBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnksIHNvbWUgY29sb3JzIG1heSBiZSBpbmNvcnJlY3QiCittc2dzdHIgIiIKKyJWaW0gRTQ1ODogbmVsemUgYWxva292YXQgcG9sb75rdSBiYXJldm7pIG1hcHkuIE7sa3RlcukgYmFydnkgbW9ob3UgYv10ICIKKyJuZXNwcuF2bukiCisKKyM6IGd1aV94MTEuYzoxOTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICJFMjUwOiBw7XNtYSBwcm8gbuFzbGVkdWrtY+0gem5ha2926SBzYWR5IGNoeWLtIHYgc2Fk7CBw7XNlbSAlczoiCisKKyM6IGd1aV94MTEuYzoyMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTI6IEZvbnRzZXQgbmFtZTogJXMiCittc2dzdHIgIkUyNTI6IG7hemV2IHNhZHkgcO1zZW06ICVzIgorCisjOiBndWlfeDExLmM6MjAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJQ7XNtbyAnJXMnIG5lbeEgcGV2bm91ILnt+Gt1IgorCisjOiBndWlfeDExLmM6MjA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTM6IG7hemV2IHNhZHkgcO1zZW06ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwOiAlc1xuIgorbXNnc3RyICJQ7XNtbzA6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQxOiAlc1xuIgorbXNnc3RyICJQ7XNtbzE6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQlZCB3aWR0aCBpcyBub3QgdHdpY2UgdGhhdCBvZiBmb250MFxuIgorbXNnc3RyICKp7fhrYSBw7XNtYSVkIG5lbu0gZHZvam7hc29ibGVtILnt+Gt5IHDtc21hMFxuIgorCisjOiBndWlfeDExLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MCB3aWR0aDogJWxkXG4iCittc2dzdHIgIqnt+GthIHDtc21hMDogJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyKp7fhrYSBw7XNtYTE6ICVsZFxuIgorIlxuIgorCisjOiBndWlfeDExLmM6MjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU0OiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgJXMiCittc2dzdHIgIkUyNTQ6IG5lbHplIGFsb2tvdmF0IGJhcnZ1ICVzIgorCisjOiBndWlfeDExLmM6MzI1NgorbXNnaWQgIkUyNTU6IENvdWxkbid0IHJlYWQgaW4gc2lnbiBkYXRhISIKK21zZ3N0ciAiRTI1NTogQ2h5YmEgLS0gbmVsemUgcPhl6O1zdCBzaWduIGRhdGEhIgorCisjOiBoYW5ndWxpbi5jOjYxMAorbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKK21zZ3N0ciAiRTI1NjogQ1lCQSBIYW5ndWwgYXV0b21hdHUiCisKKyM6IGlmX2NzY29wZS5jOjY3Cittc2dpZCAiQWRkIGEgbmV3IGRhdGFiYXNlIgorbXNnc3RyICJQ+GlkYXQgbm92b3UgZGF0YWLhemkiCisKKyM6IGlmX2NzY29wZS5jOjY5Cittc2dpZCAiUXVlcnkgZm9yIGEgcGF0dGVybiIKK21zZ3N0ciAiSGxlZOFu7SB2em9ya3UiCisKKyM6IGlmX2NzY29wZS5jOjcxCittc2dpZCAiU2hvdyB0aGlzIG1lc3NhZ2UiCittc2dzdHIgIlpvYnJheml0IHR1dG8genBy4XZ1IgorCisjOiBpZl9jc2NvcGUuYzo3MworbXNnaWQgIktpbGwgYSBjb25uZWN0aW9uIgorbXNnc3RyICJVa29u6Gl0IHNwb2plbu0iCisKKyM6IGlmX2NzY29wZS5jOjc1Cittc2dpZCAiUmVpbml0IGFsbCBjb25uZWN0aW9ucyIKK21zZ3N0ciAiWm5vdnUgaW5pY2lhbGl6b3ZhdCB2uWVjaG5hIHNwb2plbu0iCisKKyM6IGlmX2NzY29wZS5jOjc3Cittc2dpZCAiU2hvdyBjb25uZWN0aW9ucyIKK21zZ3N0ciAiWm9icmF6aXQgc3BvamVu7SIKKworIzogaWZfY3Njb3BlLmM6MTA4Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICJUZW50byBjc2NvcGUgcPjta2F6IG5lcG9kcG9ydWplIHJvemTsbGVu7SBva25hLlxuIgorCisjOiBpZl9jc2NvcGUuYzoxNDMKK21zZ2lkICJVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiUG91vml07TogY3N0YWcgPG9kc2F6ZW7tPiIKKworIzogaWZfY3Njb3BlLmM6MTk5Cittc2dpZCAiRTI1NzogY3N0YWc6IHRhZyBub3QgZm91bmQiCittc2dzdHIgIkUyNTc6IGNzdGFnOiB0YWcgbmVuYWxlemVuIgorCisjOiBpZl9jc2NvcGUuYzo0MDcgaWZfY3Njb3BlLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXQoJXMpIGVycm9yOiAlZCIKK21zZ3N0ciAic3RhdCglcykgY2h5YmE6ICVkIgorCisjOiBpZl9jc2NvcGUuYzo0NjAgaWZfY3Njb3BlLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGVkIGNzY29wZSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAiUPhpZOFuYSBjc2NvcGUgZGF0YWLhemUgJXMiCisKKyM6IGlmX2NzY29wZS5jOjQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIiVzIG5lbu0gYW5pIGFkcmVz4fhlbSBhbmkgc3By4XZub3UgY3Njb3BlIGRhdGFi4XrtIgorCisjOiBpZl9jc2NvcGUuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKK21zZ3N0ciAiY2h5YmEgcPhpIOh0ZW7tIGNzY29wZSBzcG9qZW7tICVkIgorCisjOiBpZl9jc2NvcGUuYzo2MzMKK21zZ2lkICJ1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAibmV6buFt/SB0eXAgY3Njb3BlIGhsZWThbu0iCisKKyM6IGlmX2NzY29wZS5jOjY4MAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgY3Njb3BlIHBpcGVzIgorbXNnc3RyICJuZWx6ZSB2eXR2b/hpdCBjc2NvcGUgcm91cnkiCisKKyM6IGlmX2NzY29wZS5jOjc0NQorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uIGV4ZWMgZmFpbGVkIgorbXNnc3RyICJzcHW5dOxu7SBjc19jcmVhdGVfY29ubmVjdGlvbiBzZWxoYWxvIgorCisjOiBpZl9jc2NvcGUuYzo3NTUKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciB0b19mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiB2b2zhbu0gZmRvcGVuIHBybyB0b19mcCBzZWxoYWxvIgorCisjOiBpZl9jc2NvcGUuYzo3NTcKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciBmcl9mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiB2b2zhbu0gZmRvcGVuIHBybyBmcl9mcCBzZWxoYWxvIgorCisjOiBpZl9jc2NvcGUuYzo3ODUKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnMiCittc2dzdHIgIr7hZG7hIGNzY29wZSBzcG9qZW7tIgorCisjOiBpZl9jc2NvcGUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiBjc2NvcGUgaGxlZOFu7SAlcyB2em9ya3UgJXMgbmVuYblsbyC+4WRub3Ugc2hvZHUiCisKKyM6IGlmX2NzY29wZS5jOjg5OQorbXNnaWQgImNzY29wZSBjb21tYW5kczpcbiIKK21zZ3N0ciAicPjta2F6eSBjc2NvcGU6XG4iCisKKyM6IGlmX2NzY29wZS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLTVzOiAlLTMwcyAoVXNhZ2U6ICVzKVxuIgorbXNnc3RyICIlLTVzOiAlLTMwcyAoUG91vml07TogJXMpXG4iCisKKyM6IGlmX2NzY29wZS5jOjk3MAorbXNnaWQgImR1cGxpY2F0ZSBjc2NvcGUgZGF0YWJhc2Ugbm90IGFkZGVkIgorbXNnc3RyICJkdXBsaWNpdG7tIGNzY29wZSBkYXRhYuF6ZSBuZWJ5bGEgcPhpZOFuYSIKKworIzogaWZfY3Njb3BlLmM6OTgxCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY3Njb3BlIGNvbm5lY3Rpb25zIHJlYWNoZWQiCittc2dzdHIgImRvc2G+ZW4gbWF4aW3hbG7tIHBv6GV0IGNzY29wZSBzcG9qZW7tIgorCisjOiBpZl9jc2NvcGUuYzoxMTAyCittc2dpZCAiRTI2MDogY3Njb3BlIGNvbm5lY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJFMjYwOiBjb25uZWN0aW9uIHNwb2plbu0gbmVuYWxlemVubyIKKworIzogaWZfY3Njb3BlLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYxOiBjc2NvcGUgY29ubmVjdGlvbiAlcyBub3QgZm91bmQiCittc2dzdHIgIkUyNjE6IGNvbm5lY3Rpb24gc3BvamVu7SAlcyBuZW5hbGV6ZW5vIgorCisjOiBpZl9jc2NvcGUuYzoxMTQxCittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gY2xvc2VkIgorbXNnc3RyICJjbG9zZWQgc3BvamVu7SB1emF2+GVubyIKKworIzogaWZfY3Njb3BlLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWRcbiIKK21zZ3N0ciAiY3Njb3BlIHNwb2plbu0gJXMgdXphdvhlbm9cbiIKKworIy4gc2hvdWxkIG5vdCByZWFjaCBoZXJlCisjOiBpZl9jc2NvcGUuYzoxMjkwCittc2dpZCAiZmF0YWwgZXJyb3IgaW4gY3NfbWFuYWdlX21hdGNoZXMiCittc2dzdHIgIm9zdWRvduEgY2h5YmEgdiBjc19tYW5hZ2VfbWF0Y2hlcyIKKworIzogaWZfY3Njb3BlLmM6MTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVkIgorbXNnc3RyICJFMjYyOiBw+Gkg6HRlbu0gY3Njb3BlIHNwb2plbu0gJWQiCisKKyM6IGlmX2NzY29wZS5jOjE0NDkKK21zZ2lkICJjb3VsZG4ndCBtYWxsb2NcbiIKK21zZ3N0ciAidm9s4W7tIG1hbGxvYyBzZWxoYWxvXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3Njb3BlIHRhZzogJXNcbiIKK21zZ3N0ciAiQ3Njb3BlIHRhZzogJXNcbiIKKworIzogaWZfY3Njb3BlLmM6MTQ1OAorbXNnaWQgIiAgICMgICBsaW5lIgorbXNnc3RyICIgICAjICAg+OFkZWsiCisKKyM6IGlmX2NzY29wZS5jOjE0NjAKK21zZ2lkICJmaWxlbmFtZSAvIGNvbnRleHQgLyBsaW5lXG4iCittc2dzdHIgIm7hemV2IHNvdWJvcnUvIGtvbnRleHQvIPjhZGVrXG4iCisKKyM6IGlmX2NzY29wZS5jOjE3MTgKK21zZ2lkICJBbGwgY3Njb3BlIGRhdGFiYXNlcyByZXNldCIKK21zZ3N0ciAiVrllY2hueSBjc2NvcGUgZGF0YWLhemUgcmVzZXRvduFueSIKKworIzogaWZfY3Njb3BlLmM6MTc4NQorbXNnaWQgIm5vIGNzY29wZSBjb25uZWN0aW9uc1xuIgorbXNnc3RyICK+4WRu6SBjc2NvcGUgc3BvamVu7VxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzg5Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAgbuF6ZXYgZGF0YWLhemUgICAgICAgICAgICAgICAgICAgICAgcPhlZHBvbmEgY2VzdHlcbiIKKworIzogaWZfY3Njb3BlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMmQgJS01bGQgICUtMzRzICA8bm9uZT5cbiIKK21zZ3N0ciAiJTJkICUtNWxkICAlLTM0cyAgPL7hZG79PlxuIgorCisjOiBpZl9weXRob24uYzozNzYKK21zZ2lkICIiCisiRTI2MzogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFB5dGhvbiBsaWJyYXJ5IGNvdWxkIG5vdCBiZSAiCisibG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjM6IExpdHVqaSwgdGVudG8gcPjta2F6IGplIGRlYWt0aXZvduFuOyBrbmlob3ZudSBqYXp5a2EgUHl0aG9uIG5lbHplICIKKyJuYWhy4XQuIgorCisjOiBpZl9weXRob24uYzo1NzYKK21zZ2lkICJjYW4ndCBkZWxldGUgT3V0cHV0T2JqZWN0IGF0dHJpYnV0ZXMiCittc2dzdHIgIm5lbHplIHNtYXphdCBhdHJpYnV0eSBPdXRwdXRPYmplY3QiCisKKyM6IGlmX3B5dGhvbi5jOjU4MworbXNnaWQgInNvZnRzcGFjZSBtdXN0IGJlIGFuIGludGVnZXIiCittc2dzdHIgInNvZnRzcGFjZSBtdXPtIGL9dCBrbGFkbukgY2Vs6SDo7XNsbyIKKworIzogaWZfcHl0aG9uLmM6NTkxCittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUiCittc2dzdHIgImNoeWJu/SBhdHJpYnV0IgorCisjOiBpZl9weXRob24uYzo2MzAgaWZfcHl0aG9uLmM6NjQ0Cittc2dpZCAid3JpdGVsaW5lcygpIHJlcXVpcmVzIGxpc3Qgb2Ygc3RyaW5ncyIKK21zZ3N0ciAid3JpdGVsaW5lcygpIHZ5vmFkdWplIHNlem5hbSD4ZXTsemP5IgorCisjOiBpZl9weXRob24uYzo3NzAKK21zZ2lkICJFMjY0OiBQeXRob246IEVycm9yIGluaXRpYWxpc2luZyBJL08gb2JqZWN0cyIKK21zZ3N0ciAiRTI2NDogUHl0aG9uOiBjaHliYSBw+GkgaW5pY2lhbGl6YWNpIEkvTyBvYmpla3T5IgorCisjOiBpZl9weXRob24uYzo5NTUgaWZfdGNsLmM6MTM5MQorbXNnaWQgImludmFsaWQgZXhwcmVzc2lvbiIKK21zZ3N0ciAiQ2h5Ym79IHb9cmF6IgorCisjOiBpZl9weXRob24uYzo5NjkgaWZfdGNsLmM6MTM5NgorbXNnaWQgImV4cHJlc3Npb25zIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAicG9kcG9yYSB2/XJhevkgYnlsYSB2eXBudXRhIHD4aSBw+GVrbGFkdSBwcm9ncmFtdSIKKworIzogaWZfcHl0aG9uLmM6OTgyCittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAicG9rdXMgbyBvZGtheiBuYSBzbWF6YW79IGJ1ZmZlciIKKworIzogaWZfcHl0aG9uLmM6OTk3IGlmX3B5dGhvbi5jOjEwMzggaWZfcHl0aG9uLmM6MTEwMiBpZl90Y2wuYzoxMjAzCittc2dpZCAibGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIgorbXNnc3RyICLo7XNsbyD44WRrdSBtaW1vIHJvenNhaCIKKworIzogaWZfcHl0aG9uLmM6MTIzNQorIywgYy1mb3JtYXQKK21zZ2lkICI8YnVmZmVyIG9iamVjdCAoZGVsZXRlZCkgYXQgJThsWD4iCittc2dzdHIgIjxidWZmZXIgb2JqZWt0IChzbWF64W4pIG5hICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxMzI2IGlmX3RjbC5jOjgyNQorbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICJjaHlibukgam3pbm8gem5h6Gt5IgorCisjOiBpZl9weXRob24uYzoxNjAxCittc2dpZCAibm8gc3VjaCBidWZmZXIiCittc2dzdHIgIr7hZG79IHRha292/SBidWZmZXIiCisKKyM6IGlmX3B5dGhvbi5jOjE2ODkKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICJwb2t1cyBvIG9ka2F6IG5hIHNtYXphbukgb2tubyIKKworIzogaWZfcHl0aG9uLmM6MTczNAorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXRyaWJ1dCBwb3V6ZV9wcm9f6HRlbu0iCisKKyM6IGlmX3B5dGhvbi5jOjE3NDcKK21zZ2lkICJjdXJzb3IgcG9zaXRpb24gb3V0c2lkZSBidWZmZXIiCittc2dzdHIgInVt7XN07G7tIGt1cnpvcnUgbWltbyBidWZmZXIiCisKKyM6IGlmX3B5dGhvbi5jOjE4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKGRlbGV0ZWQpIGF0ICUuOGxYPiIKK21zZ3N0ciAiPG9iamVrdCBva25hIChzbWF64W4pIG5hICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxODM2CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjxvYmpla3Qgb2tuYSAobmV6buFt/SkgbmEgJThsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjE4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyAlZD4iCittc2dzdHIgIjxva25vICVkPiIKKworIzogaWZfcHl0aG9uLmM6MTkxNAorbXNnaWQgIm5vIHN1Y2ggd2luZG93IgorbXNnc3RyICK+4WRu6SB0YWtvdukgb2tubyIKKworIzogaWZfcHl0aG9uLmM6MjE0NCBpZl9weXRob24uYzoyMTc1IGlmX3B5dGhvbi5jOjIyMjUgaWZfcHl0aG9uLmM6MjI4NQorIzogaWZfcHl0aG9uLmM6MjQwMiBpZl9weXRob24uYzoyNDU0IGlmX3RjbC5jOjY3MyBpZl90Y2wuYzo3MTggaWZfdGNsLmM6NzkyCisjOiBpZl90Y2wuYzo4NjIgaWZfdGNsLmM6MTk4NworbXNnaWQgImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIm5lbHplIHVsb75pdCBpbmZvcm1hY2UgcHJvIHD47WtheiB1bmRvIgorCisjOiBpZl9weXRob24uYzoyMTQ2IGlmX3B5dGhvbi5jOjIyMzIgaWZfcHl0aG9uLmM6MjI5NgorbXNnaWQgImNhbm5vdCBkZWxldGUgbGluZSIKK21zZ3N0ciAibmVsemUgc21hemF0IPjhZGVrIgorCisjOiBpZl9weXRob24uYzoyMTc3IGlmX3B5dGhvbi5jOjIzMTIgaWZfdGNsLmM6Njc5IGlmX3RjbC5jOjIwMDkKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICJuZWx6ZSBuYWhyYWRpdCD44WRlayIKKworIzogaWZfcHl0aG9uLmM6MjMyOCBpZl9weXRob24uYzoyNDA0IGlmX3B5dGhvbi5jOjI0NjIKK21zZ2lkICJjYW5ub3QgaW5zZXJ0IGxpbmUiCittc2dzdHIgIm5lbHplIHZsb75pdCD44WRlayIKKworIzogaWZfcHl0aG9uLmM6MjU2NgorbXNnaWQgInN0cmluZyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAi+GV07HplYyBuZXNt7SBvYnNhaG92YXQgem5ha3kgbm926WhvIPjhZGt1IgorCisjOiBpZl9ydWJ5LmM6Mzk0Cittc2dpZCAiIgorIkUyNjY6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBSdWJ5IGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjY2OiBMaXR1amksIGFsZSB0ZW50byBw+O1rYXogamUgZGVha3Rpdm924W47IGtuaWhvdm51IGphenlrYSBSdWJ5IG5lbHplICIKKyJuYWhy4XQuIgorCisjOiBpZl9ydWJ5LmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzM6IHVua25vd24gbG9uZ2ptcCBzdGF0dXMgJWQiCittc2dzdHIgIkUyNzM6IG5lem7hbf0gbG9uZ2ptcCBzdGF2ICVkIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIlByb2hvemVu7SBpbXBsZW1lbnRhY2UvZGVmaW5pY2UiCisKKyM6IGlmX3NuaWZmLmM6NjgKK21zZ2lkICJTaG93IGJhc2UgY2xhc3Mgb2YiCittc2dzdHIgIlpvYnJhemVu7SBiYXNlIGNsYXNzIHoiCisKKyM6IGlmX3NuaWZmLmM6NjkKK21zZ2lkICJTaG93IG92ZXJyaWRkZW4gbWVtYmVyIGZ1bmN0aW9uIgorbXNnc3RyICJab2JyYXplbu0gb3ZlcnJpZGRlbiBtZW1iZXIgZnVua2NlIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICJabm92dXrtc2vhbm8gemUgc291Ym9ydSIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAiWm5vdnV67XNr4W5vIHogcHJvamVrdHUiCisKKyM6IGlmX3NuaWZmLmM6NzMKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGFsbCBwcm9qZWN0cyIKK21zZ3N0ciAiWm5vdnrtc2vhbm8gemUgdrllY2ggcHJvamVrdPkiCisKKyM6IGlmX3NuaWZmLmM6NzQKK21zZ2lkICJSZXRyaWV2ZSIKK21zZ3N0ciAiWm5vdnV67XNr4W5vIgorCisjOiBpZl9zbmlmZi5jOjc1Cittc2dpZCAiU2hvdyBzb3VyY2Ugb2YiCittc2dzdHIgIlpvYnJhemVu7SB6ZHJvamUiCisKKyM6IGlmX3NuaWZmLmM6NzYKK21zZ2lkICJGaW5kIHN5bWJvbCIKK21zZ3N0ciAiTmFq7XQgc3ltYm9sIgorCisjOiBpZl9zbmlmZi5jOjc3Cittc2dpZCAiQnJvd3NlIGNsYXNzIgorbXNnc3RyICJQcm9obO2+ZXQgY2xhc3MiCisKKyM6IGlmX3NuaWZmLmM6NzgKK21zZ2lkICJTaG93IGNsYXNzIGluIGhpZXJhcmNoeSIKK21zZ3N0ciAiWm9icmF6ZW7tIGNsYXNzIHYgaGllcmFyY2hpaSIKKworIzogaWZfc25pZmYuYzo3OQorbXNnaWQgIlNob3cgY2xhc3MgaW4gcmVzdHJpY3RlZCBoaWVyYXJjaHkiCittc2dzdHIgIlpvYnJhemVu7SBjbGFzcyB2IHJlc3RyaWN0ZWQgaGllcmFyY2hpaSIKKworIzogaWZfc25pZmYuYzo4MAorbXNnaWQgIlhyZWYgcmVmZXJzIHRvIgorbXNnc3RyICJYcmVmIG9ka2F6dWplIG5hIgorCisjOiBpZl9zbmlmZi5jOjgxCittc2dpZCAiWHJlZiByZWZlcnJlZCBieSIKK21zZ3N0ciAiWHJlZiBvZGthem92YWwgbmEiCisKKyM6IGlmX3NuaWZmLmM6ODIKK21zZ2lkICJYcmVmIGhhcyBhIgorbXNnc3RyICJYcmVmIG3hIgorCisjOiBpZl9zbmlmZi5jOjgzCittc2dpZCAiWHJlZiB1c2VkIGJ5IgorbXNnc3RyICJYcmVmIHBvdb5pdCIKKworIzogaWZfc25pZmYuYzo4NAorbXNnaWQgIlNob3cgZG9jdSBvZiIKK21zZ3N0ciAiWm9icmF6ZW7tIGRvY3VtZW50YWNlIgorCisjOiBpZl9zbmlmZi5jOjg1Cittc2dpZCAiR2VuZXJhdGUgZG9jdSBmb3IiCittc2dzdHIgIkdlbmVyb3bhbmEgZG9rdW1lbnRhY2UgcHJvIgorCisjOiBpZl9zbmlmZi5jOjk3Cittc2dpZCAiIgorIkNhbm5vdCBjb25uZWN0IHRvIFNOaUZGKy4gQ2hlY2sgZW52aXJvbm1lbnQgKHNuaWZmZW1hY3MgbXVzdCBiZSBmb3VuZCBpbiAiCisiJFBBVEgpLlxuIgorbXNnc3RyICIiCisiTmVsemUgc2UgcPhpcG9qaXQgayBTTmlGRisuIFprb250cm9sdWp0ZSBwcm9t7G5u6SAoc25pZmZlbWFjcyBtdXPtICIKKyJi/XQpdXZlZGVuYSB2ICRQQVRILlxuIgorCisjOiBpZl9zbmlmZi5jOjQyNQorbXNnaWQgIkUyNzQ6IFNuaWZmOiBFcnJvciBkdXJpbmcgcmVhZC4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJFMjc0OiBTbmlmZjogQ2h5YmEgcPhpIOh0ZW7tLiBPZHBvamVubyIKKworIzogaWZfc25pZmYuYzo1NTMKK21zZ2lkICJTTmlGRisgaXMgY3VycmVudGx5ICIKK21zZ3N0ciAiU05pRkYrIGplIHBy4XbsICIKKworIzogaWZfc25pZmYuYzo1NTUKK21zZ2lkICJub3QgIgorbXNnc3RyICJuZSAiCisKKyM6IGlmX3NuaWZmLmM6NTU2Cittc2dpZCAiY29ubmVjdGVkIgorbXNnc3RyICJw+Glwb2plbiIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6IE5lem7hbf0gcG++YWRhdmVrIFNOaUZGKzogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IENoeWJu6SBw+Glwb2plbu0gayBTTmlGRisiCisKKyM6IGlmX3NuaWZmLmM6MTAxMAorbXNnaWQgIkUyNzg6IFNOaUZGKyBub3QgY29ubmVjdGVkIgorbXNnc3RyICJFMjc4OiBTTmlGRisgbmVw+Glwb2plbiIKKworIzogaWZfc25pZmYuYzoxMDE5Cittc2dpZCAiRTI3OTogTm90IGEgU05pRkYrIGJ1ZmZlciIKK21zZ3N0ciAiRTI3OTogTmVu7SBTTmlGRisgYnVmZmVyIgorCisjOiBpZl9zbmlmZi5jOjEwODQKK21zZ2lkICJTbmlmZjogRXJyb3IgZHVyaW5nIHdyaXRlLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIlNuaWZmOiBDaHliYSBw+GkgeuFwaXN1LiBPZHBvamVuby4iCisKKyM6IGlmX3RjbC5jOjQwNworbXNnaWQgImludmFsaWQgYnVmZmVyIG51bWJlciIKK21zZ3N0ciAiY2h5Ym79IG7hemV2IGJ1ZmZlcnUiCisKKyM6IGlmX3RjbC5jOjQ1MyBpZl90Y2wuYzo5MjAgaWZfdGNsLmM6MTA5OQorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIm5lbu0gamW5dOwgcG9kcG9yb3bhbm8iCisKKyM6IGlmX3RjbC5jOjQ5MAorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJuZXpu4W3hIHZvbGJhIgorCisjLiA/Pz8KKyM6IGlmX3RjbC5jOjc2MworbXNnaWQgImNhbm5vdCBzZXQgbGluZShzKSIKK21zZ3N0ciAibmVsemUgbmFzdGF2aXQg+OFka3kiCisKKyM6IGlmX3RjbC5jOjgzNAorbXNnaWQgIm1hcmsgbm90IHNldCIKK21zZ3N0ciAiem5h6GthIG5lbu0gbmFzdGF2ZW5hIgorCisjOiBpZl90Y2wuYzo4NDAgaWZfdGNsLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyb3cgJWQgY29sdW1uICVkIgorbXNnc3RyICL44WRlayAlZCBzbG91cGVjICVkIgorCisjOiBpZl90Y2wuYzo4NzAKK21zZ2lkICJjYW5ub3QgaW5zZXJ0L2FwcGVuZCBsaW5lIgorbXNnc3RyICJuZWx6ZSB2bG++aXQvcPhpcG9qaXQg+OFkZWsiCisKKyM6IGlmX3RjbC5jOjEyNTcKK21zZ2lkICJ1bmtub3duIGZsYWc6ICIKK21zZ3N0ciAibmV6buFt/SBw+O16bmFrOiAiCisKKyM6IGlmX3RjbC5jOjEzMjcKK21zZ2lkICJ1bmtub3duIHZpbU9wdGlvbiIKK21zZ3N0ciAibmV6buFt4SB2aW1PcHRpb24iCisKKyM6IGlmX3RjbC5jOjE0MTIKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgInD4ZXJ1uWVu7SB6IGts4XZlc25pY2UiCisKKyM6IGlmX3RjbC5jOjE0MTcKK21zZ2lkICJ2aW0gZXJyb3IiCittc2dzdHIgImNoeWJhIHZpbSIKKworIzogaWZfdGNsLmM6MTQ2MAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYnVmZmVyL3dpbmRvdyBjb21tYW5kOiBvYmplY3QgaXMgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAibmVsemUgdnl0dm/4aXQgcPjta2F6IGJ1ZmZlcnUvb2tuYTogb2JqZWt0IHNtYXrhbiIKKworIzogaWZfdGNsLmM6MTUzNAorbXNnaWQgIiIKKyJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyBpcyBhbHJlYWR5IGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIiIKKyJuZWx6ZSB6YXJlZ2lzdHJvdmF0IHD47WtheiB6cOx0bulobyB2b2zhbu06IGJ1ZmZlci9va25vIGppviBieWxvIHNtYXrhbm8iCisKKyMuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEZhbW91cyBsYXN0IHdvcmQ/CisjOiBpZl90Y2wuYzoxNTUxCittc2dpZCAiIgorIkUyODA6IFRDTCBGQVRBTCBFUlJPUjogcmVmbGlzdCBjb3JydXB0IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvICIKKyJ2aW0tZGV2QHZpbS5vcmciCittc2dzdHIgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgcG+5a296ZW4hPyBPem5hbXRlLCBwcm9z7W0sIHR1dG8gY2h5YnUgbmEgIgorInZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTU1MgorbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIiIKKyJuZWx6ZSB6YXJlZ2lzdHJvdmF0IHD47WtheiB6cOx0bulobyB2b2zhbu06IG9ka2F6IG5hIGJ1ZmZlci9va25vIG5lbmFsZXplbiIKKworIzogaWZfdGNsLmM6MTcxMworbXNnaWQgIlNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBUY2wgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkxpdHVqaSwgYWxlIHRlbnRvIHD47WtheiBqZSBkZWFrdGl2b3bhbjsga25paG92bnUgamF6eWthIFRjbCBuZWx6ZSBuYWhy4XQuIgorCisjOiBpZl90Y2wuYzoxODc1Cittc2dpZCAiIgorIkUyODE6IFRDTCBFUlJPUjogZXhpdCBjb2RlIGlzIG5vdCBpbnQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MTogVENMIENIWUJBOiBu4XZyYXRvdv0ga/NkIG5lbu0gY2Vs6SDo7XNsbyE/IE96bmFtdGUsIHByb3PtbSwgdHV0byBjaHlidSAiCisibmEgdmltLWRldkB2aW0ub3JnIgorCisjOiBpZl90Y2wuYzoxOTk1Cittc2dpZCAiY2Fubm90IGdldCBsaW5lIgorbXNnc3RyICJuZWx6ZSBw+GXo7XN0IPjhZGVrIgorCisjOiBpZl94Y21kc3J2LmM6MjA0Cittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAiTmVu7SBtb75u6SB6YXpuYW1lbmF0IGpt6W5vIGNvbW1hbmQgc2VydmVydSIKKworIzogaWZfeGNtZHNydi5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6IE5lZXhpc3R1amUgcmVnaXN0cm92YW79IHNlcnZlciBqbeluZW0gXCIlc1wiIgorCisjOiBpZl94Y21kc3J2LmM6NDQ2Cittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODogU2VsaGFsbyB6YXNs4W7tIHD47WthenUgdXLoZW7pbXUgcHJvZ3JhbXUiCisKKyM6IGlmX3hjbWRzcnYuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzZXJ2ZXIgaWQgdXNlZDogJXMiCittc2dzdHIgIlBvdb5pdCBjaHlibv0gaWQgc2VydmVydTogJXMiCisKKyM6IGlmX3hjbWRzcnYuYzoxMDYxCittc2dpZCAiRTI0OTogY291bGRuJ3QgcmVhZCBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkiCittc2dzdHIgIkUyNDk6IG5lbHplIOjtc3QgVklNIGluc3RhbmNpIHJlZ2lzdHJ5IHByb3BlcnR5IgorCisjOiBpZl94Y21kc3J2LmM6MTA3MgorbXNnaWQgIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBpcyBiYWRseSBmb3JtZWQuICBEZWxldGVkISIKK21zZ3N0ciAiIgorIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBieWxhILlwYXRu7CB2eXR2b/hlbmFhIGJ5bGEgc21heuFuYSEiCisKKyM6IG1haW4uYzo1MyBvcHRpb24uYzozMTYyIG9wdGlvbi5jOjMyNjkKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiTmV6buFt4SB2b2xiYSIKKworIzogbWFpbi5jOjU1Cittc2dpZCAiVG9vIG1hbnkgZWRpdCBhcmd1bWVudHMiCittc2dzdHIgIlD47WxpuSBtbm9obyBlZGl0IGFyZ3VtZW50+SIKKworIzogbWFpbi5jOjU3Cittc2dpZCAiQXJndW1lbnQgbWlzc2luZyBhZnRlciIKK21zZ3N0ciAiQ2h5Yu0gYXJndW1lbnQgcG8iCisKKyM6IG1haW4uYzo1OQorbXNnaWQgIkdhcmJhZ2UgYWZ0ZXIgb3B0aW9uIgorbXNnc3RyICJDaHlieSB6YSB2b2xib3UiCisKKyM6IG1haW4uYzo2MQorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiBvciBcIi1jIGNvbW1hbmRcIiBhcmd1bWVudHMiCittc2dzdHIgIlD47WxpuSBtbm9obyBcIitw+O1rYXpcIiDoaSBcIi1jIHD47WthelwiIGFyZ3VtZW50+SIKKworIzogbWFpbi5jOjYzCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBmb3IiCittc2dzdHIgIkNoeWJu/SBhcmd1bWVudCBwcm8iCisKKyM6IG1haW4uYzo0MzYKK21zZ2lkICJUaGlzIFZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlIGRpZmYgZmVhdHVyZS4iCittc2dzdHIgIlZJTSBuZWJ5bCBw+GVsb75lbiBzIHZvbGJvdSArZGlmZiIKKworIzogbWFpbi5jOjg1OAorbXNnaWQgIkF0dGVtcHQgdG8gb3BlbiBzY3JpcHQgZmlsZSBhZ2FpbjogXCIiCittc2dzdHIgIlBva3VzIG8gb3DsdG92bukgb3Rldvhlbu0gc2tyaXB0dTogXCIiCisKKyM6IG1haW4uYzo4NjIgbWFpbi5jOjg2OSBtYWluLmM6OTEzIG1lbWxpbmUuYzozNjczIG1lbWxpbmUuYzozNjc3CisjOiB2ZXJzaW9uLmM6ODE2IHZlcnNpb24uYzo4MjEgdmVyc2lvbi5jOjgyNiB2ZXJzaW9uLmM6ODMxIHZlcnNpb24uYzo4MzYKKyM6IHZlcnNpb24uYzo4NDEgdmVyc2lvbi5jOjg0NyB2ZXJzaW9uLmM6ODUxIHZlcnNpb24uYzo4NTUgdmVyc2lvbi5jOjg2MAorIzogdmVyc2lvbi5jOjg2NyB2ZXJzaW9uLmM6ODc1IHZlcnNpb24uYzo4ODEKK21zZ2lkICJcIlxuIgorbXNnc3RyICJcIlxuIgorCisjOiBtYWluLmM6ODY3Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICJOZWx6ZSBvdGV2+O10IHBybyB64XBpczogXCIiCisKKyM6IG1haW4uYzo5MTEKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIk5lbHplIG90ZXb47XQgcHJvIHb9c3R1cCBza3JpcHR1OiBcIiIKKworIzogbWFpbi5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmlsZXMgdG8gZWRpdFxuIgorbXNnc3RyICJwb+hldCBzb3Vib3L5IHBybyBlZGl0YWNpOiAlZFxuIgorCisjOiBtYWluLmM6MTA5NAorbXNnaWQgIlZpbTogV2FybmluZzogT3V0cHV0IGlzIG5vdCB0byBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTogVmFyb3bhbu06IHb9c3R1cCBuZXNt7Ph1amUgbmEgdGVybWlu4WxcbiIKKworIzogbWFpbi5jOjEwOTYKK21zZ2lkICJWaW06IFdhcm5pbmc6IElucHV0IGlzIG5vdCBmcm9tIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiBWYXJvduFu7TogdnN0dXAgbmVwb2No4XrtIHogdGVybWlu4Wx1XG4iCisKKyMuIGp1c3QgaW4gY2FzZS4uCisjOiBtYWluLmM6MTE3MQorbXNnaWQgInByZS12aW1yYyBjb21tYW5kIGxpbmUiCittc2dzdHIgInByZS12aW1yYyBw+O1rYXpvdv0g+OFkZWsiCisKKyM6IG1haW4uYzoxMjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODI6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjgyOiBOZWx6ZSDo7XN0IHogXCIlc1wiIgorCisjOiBtYWluLmM6MjE1NworbXNnaWQgIiIKKyJcbiIKKyJNb3JlIGluZm8gd2l0aDogXCJ2aW0gLWhcIlxuIgorbXNnc3RyICIiCisiXG4iCisiUG9kcm9ibuxque0gaW5mb3JtYWNlIHrtc2vhdGUgcG9tb2PtIFwidmltIC1oXCJcbiIKKworIzogbWFpbi5jOjIxOTAKK21zZ2lkICJbZmlsZSAuLl0gICAgICAgZWRpdCBzcGVjaWZpZWQgZmlsZShzKSIKK21zZ3N0ciAiW1NPVUJPUl0gLi4gICAgICAgICAgZWRpdG92YXQgU09VQk9SKHkpIgorCisjOiBtYWluLmM6MjE5MQorbXNnaWQgIi0gICAgICAgICAgICAgICByZWFkIHRleHQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiLSAgICAgICAgICAgICAgICAgICAg6O1zdCB0ZXh0IHplIHN0YW5kYXJkbu1obyB2c3R1cHUiCisKKyM6IG1haW4uYzoyMTkyCittc2dpZCAiLXQgdGFnICAgICAgICAgIGVkaXQgZmlsZSB3aGVyZSB0YWcgaXMgZGVmaW5lZCIKK21zZ3N0ciAiLXQgVEFHICAgICAgICAgIGVkaXRvdmF0IHNvdWJvciBuYSBt7XN07CBkZWZpbmljZSBUQUdVIgorCisjOiBtYWluLmM6MjE5NAorbXNnaWQgIi1xIFtlcnJvcmZpbGVdICBlZGl0IGZpbGUgd2l0aCBmaXJzdCBlcnJvciIKK21zZ3N0ciAiLXEgW2NoeWJvdv0gc291Ym9yXSAgZWRpdG92YXQgc291Ym9yIG5hIG3tc3TsIHb9c2t5dHUgcHJ2bu0gY2h5YnkiCisKKyM6IG1haW4uYzoyMjAzCittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorInBvdb5pdO06IgorCisjOiBtYWluLmM6MjIwNgorbXNnaWQgIiB2aW0gW2FyZ3VtZW50c10gIgorbXNnc3RyICJ2aW0gW3D4ZXDtbmHoZV0gIgorCisjOiBtYWluLmM6MjIxMAorbXNnaWQgIiIKKyJcbiIKKyIgICBvcjoiCittc2dzdHIgIiIKKyJcbiIKKyIgICBuZWJvIgorCisjOiBtYWluLmM6MjIxMworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHk6XG4iCisKKyM6IG1haW4uYzoyMjE0Cittc2dpZCAiLS1cdFx0XHRPbmx5IGZpbGUgbmFtZXMgYWZ0ZXIgdGhpcyIKK21zZ3N0ciAiLS1cdFx0XHRNb2hvdSBu4XNsZWRvdmF0IHBvdXplIG7henZ5IHNvdWJvcvkiCisKKyM6IG1haW4uYzoyMjE2Cittc2dpZCAiLXJlZ2lzdGVyXHRcdFJlZ2lzdGVyIHRoaXMgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItcmVnaXN0ZXJcdFx0cPhpaGzhc2l0IGd2aW0gbmEgT0xFIgorCisjOiBtYWluLmM6MjIxNworbXNnaWQgIi11bnJlZ2lzdGVyXHRcdFVucmVnaXN0ZXIgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItcmVnaXN0ZXJcdFx0b2RobOFzaXQgZ3ZpbSB6IE9MRSIKKworIzogbWFpbi5jOjIyMjAKK21zZ2lkICItZ1x0XHRcdFJ1biB1c2luZyBHVUkgKGxpa2UgXCJndmltXCIpIgorbXNnc3RyICItZ1x0XHRcdHNwdXN0aXQgdiBHVUkgcmW+aW11IChzdGVqbukgamFrbyBcImd2aW1cIikiCisKKyM6IG1haW4uYzoyMjIxCittc2dpZCAiLWZcdFx0XHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZlx0XHRcdFBvcPhlZO06IHD4aSBzdGFydHUgR1VJIHNlIG5lb2Rk7GztIG9kIHNoZWxsdSIKKworIzogbWFpbi5jOjIyMjMKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRWaSBt82QgKHN0ZWpu6SBqYWtvIFwidmlcIikiCisKKyM6IG1haW4uYzoyMjI0Cittc2dpZCAiLWVcdFx0XHRFeCBtb2RlIChsaWtlIFwiZXhcIikiCittc2dzdHIgIi12XHRcdFx0RXggbfNkIChzdGVqbukgamFrbyBcImV4XCIpIgorCisjOiBtYWluLmM6MjIyNQorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHRUaWNo/SAoZOF2a292/SkgcmW+aW0gKHBvdXplIHBybyBcImV4XCIpIgorCisjOiBtYWluLmM6MjIyNworbXNnaWQgIi1kXHRcdFx0RGlmZiBtb2RlIChsaWtlIFwidmltZGlmZlwiKSIKK21zZ3N0ciAiLWRcdFx0XHREaWZmIHJlvmltIChzdGVqbukgamFrbyBcInZpbWRpZmZcIikiCisKKyM6IG1haW4uYzoyMjI5Cittc2dpZCAiLXlcdFx0XHRFYXN5IG1vZGUgKGxpa2UgXCJldmltXCIsIG1vZGVsZXNzKSIKK21zZ3N0ciAiLXZcdFx0XHRTbmFkbv0gcmW+aW0gKHN0ZWpu6SBqYWtvIFwiZXZpbVwiLCC+4WRu6SBt82R5ICkiCisKKyM6IG1haW4uYzoyMjMwCittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHRSZb5pbSBwb3V6ZV9wcm9f6HRlbu0gKGpha28gXCJ2aWV3XCIpIgorCisjOiBtYWluLmM6MjIzMQorbXNnaWQgIi1aXHRcdFx0UmVzdHJpY3RlZCBtb2RlIChsaWtlIFwicnZpbVwiKSIKK21zZ3N0ciAiLVpcdFx0XHRPbWV6ZW79IHJlvmltIChzdGVqbukgamFrbyBcInJ2aW1cIikiCisKKyM6IG1haW4uYzoyMjMyCittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHRabexueSAodWts4WThbu0gc291Ym9y+SkgemFr4XrhbnkiCisKKyM6IG1haW4uYzoyMjMzCittc2dpZCAiLU1cdFx0XHRNb2RpZmljYXRpb25zIGluIHRleHQgbm90IGFsbG93ZWQiCittc2dzdHIgIi1NXHRcdFx0Wm3sbnkgKHVrbOFk4W7tIHNvdWJvcvkpIHpha+F64W55IgorCisjOiBtYWluLmM6MjIzNAorbXNnaWQgIi1iXHRcdFx0QmluYXJ5IG1vZGUiCittc2dzdHIgIi1iXHRcdFx0Qmlu4XJu7SByZb5pbSIKKworIzogbWFpbi5jOjIyMzYKK21zZ2lkICItbFx0XHRcdExpc3AgbW9kZSIKK21zZ3N0ciAiLWxcdFx0XHRMaXNwIHJlvmltIgorCisjOiBtYWluLmM6MjIzOAorbXNnaWQgIi1DXHRcdFx0Q29tcGF0aWJsZSB3aXRoIFZpOiAnY29tcGF0aWJsZSciCittc2dzdHIgIi1DXHRcdFx0S29tcGF0YWJpbG7tIHMgVmk6ICdjb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjIyMzkKK21zZ2lkICItTlx0XHRcdE5vdCBmdWxseSBWaSBjb21wYXRpYmxlOiAnbm9jb21wYXRpYmxlJyIKK21zZ3N0ciAiLU5cdFx0XHRLb21wYXRpYmlsaXRhIHMgVmkgdnlwbnV0YTogJ25vY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyMjQwCittc2dpZCAiLVZbTl1cdFx0VmVyYm9zZSBsZXZlbCIKK21zZ3N0ciAiLVZbTl1cdFx02nJvdmXyIHb9cGlzdSBobOG5ZWsiCisKKyM6IG1haW4uYzoyMjQxCittc2dpZCAiLURcdFx0XHREZWJ1Z2dpbmcgbW9kZSIKK21zZ3N0ciAiLURcdFx0XHRMYWTtY+0gcmW+aW0iCisKKyM6IG1haW4uYzoyMjQyCittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHROZWJ1ZGUgdnl0duH4ZXQgb2RrbOFkYWPtIHNvdWJvciwgYnVkZSBwb3W+7XZhdCBwb3V6ZSBwYW3suyIKKworIzogbWFpbi5jOjIyNDMKK21zZ2lkICItclx0XHRcdExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdCIKK21zZ3N0ciAiLXJcdFx0XHRWeXDtuWUgc2V6bmFtIG9ka2zhZGFj7WNoIHNvdWJvcvkgYSBza29u6O0iCisKKyM6IG1haW4uYzoyMjQ0Cittc2dpZCAiLXIgKHdpdGggZmlsZSBuYW1lKVx0UmVjb3ZlciBjcmFzaGVkIHNlc3Npb24iCittc2dzdHIgIi1yIG7hemV2IHNvdWJvcnVcdE9ibm927SBw+GVydbllbukgc2V6ZW7tIgorCisjOiBtYWluLmM6MjI0NQorbXNnaWQgIi1MXHRcdFx0U2FtZSBhcyAtciIKK21zZ3N0ciAiLUxcdFx0XHRTdGVqbukgamFrbyAtciIKKworIzogbWFpbi5jOjIyNDcKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdFx0TmVidWRlIHBvdb7tdmF0IG5ld2NsaSBwcm8gb3Rldvhlbu0gb2tuYSIKKworIzogbWFpbi5jOjIyNDgKK21zZ2lkICItZGV2IDxkZXZpY2U+XHRcdFVzZSA8ZGV2aWNlPiBmb3IgSS9PIgorbXNnc3RyICItZGV2IDx6YfjtemVu7T5cdFx0UG91vu10IDx6YfjtemVu7T4gcHJvIEkvTyIKKworIzogbWFpbi5jOjIyNTEKK21zZ2lkICItSFx0XHRcdHN0YXJ0IGluIEhlYnJldyBtb2RlIgorbXNnc3RyICItSFx0XHRcdG5hc3RhcnR1amUgdiBoZWJyZWpza+ltIHJlvmltdSIKKworIzogbWFpbi5jOjIyNTQKK21zZ2lkICItRlx0XHRcdHN0YXJ0IGluIEZhcnNpIG1vZGUiCittc2dzdHIgIi1GXHRcdFx0bmFzdGFydHVqZSB2ZSBGYXJzaSByZb5pbXUiCisKKyM6IG1haW4uYzoyMjU2Cittc2dpZCAiLVQgPHRlcm1pbmFsPlx0U2V0IHRlcm1pbmFsIHR5cGUgdG8gPHRlcm1pbmFsPiIKK21zZ3N0ciAiLVQgPHRlcm1pbuFsPlx0TmFzdGF27SB0eXAgdGVybWlu4Wx1IG5hIDx0ZXJtaW7hbD4iCisKKyM6IG1haW4uYzoyMjU3Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0UG91vmlqZSA8dmltcmM+IG3tc3RvIGpha+lob2tvbGl2IC52aW1yYyIKKworIzogbWFpbi5jOjIyNTkKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0UG91vmlqZSA8Z3ZpbXJjPiBt7XN0byBqYWvpaG9rb2xpdiAuZ3ZpbXJjIgorCisjOiBtYWluLmM6MjI2MQorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHROZW5haHJhamUgJ3BsdWdpbicgc2tyaXB0eSIKKworIzogbWFpbi5jOjIyNjIKK21zZ2lkICItb1tOXVx0XHRPcGVuIE4gd2luZG93cyAoZGVmYXVsdDogb25lIGZvciBlYWNoIGZpbGUpIgorbXNnc3RyICItb1tOXVx0XHRPdGV2+GUgTiBva2VuIChpbXBsaWNpdG7sIGplZG5vIHBybyBrYb5k/SBzb3Vib3IpIgorCisjOiBtYWluLmM6MjI2MworbXNnaWQgIi1PW05dXHRcdGxpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdEpha28gLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCisKKyM6IG1haW4uYzoyMjY0Cittc2dpZCAiK1x0XHRcdFN0YXJ0IGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICIrXHRcdFx0TmFzdGF27SBrdXJ6b3IgbmEga29uZWMgc291Ym9ydSIKKworIzogbWFpbi5jOjIyNjUKK21zZ2lkICIrPGxudW0+XHRcdFN0YXJ0IGF0IGxpbmUgPGxudW0+IgorbXNnc3RyICIrPPjhZGVrPlx0XHROYXN0YXbtIGt1cnpvciBuYSA8+OFkZWs+IgorCisjOiBtYWluLmM6MjI2NworbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIi0tY21kIDxw+O1rYXo+XHRQbyBuYWhy4W7tIHBydm7taG8gc291Ym9ydSB2eWtvbuEgPHD47Wthej4iCisKKyM6IG1haW4uYzoyMjY5Cittc2dpZCAiLWMgPGNvbW1hbmQ+XHRcdEV4ZWN1dGUgPGNvbW1hbmQ+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1jIDxw+O1rYXo+XHRcdFBvIG5haHLhbu0gcHJ2bu1obyBzb3Vib3J1IHZ5a29u4SA8cPjta2F6PiIKKworIzogbWFpbi5jOjIyNzAKK21zZ2lkICItUyA8c2Vzc2lvbj5cdFx0U291cmNlIGZpbGUgPHNlc3Npb24+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIiIKKyItUyA8c2V6ZW7tPlx0XHRQbyBuYWhy4W7tIHBydm7taG8gc291Ym9ydSB2eWtvbuEgcPjta2F6eSB2IHNvdWJvcnUgPHNlemVu7T4iCisKKyM6IG1haW4uYzoyMjcxCittc2dpZCAiLXMgPHNjcmlwdGluPlx0UmVhZCBOb3JtYWwgbW9kZSBjb21tYW5kcyBmcm9tIGZpbGUgPHNjcmlwdGluPiIKK21zZ3N0ciAiLXMgPHNrcmlwdD5cdFx0TmHodGUgcPjta2F6eSBub3Jt4Wxu7WhvIG3zZHUgemUgPHNrcmlwdHU+IgorCisjOiBtYWluLmM6MjI3MgorbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDxza3JpcHQ+XHRcdFD4aXBvau0gdrllY2hueSBuYXBzYW7pIHD47WthenkgZG8gc291Ym9ydSA8c2tyaXB0PiIKKworIzogbWFpbi5jOjIyNzMKK21zZ2lkICItVyA8c2NyaXB0b3V0Plx0V3JpdGUgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi1XIDxza3JpcHQ+XHRcdFVsb77tIHa5ZWNobnkgbmFwc2Fu6SBw+O1rYXp5IGRvIHNvdWJvcnUgPHNrcmlwdD4iCisKKyM6IG1haW4uYzoyMjc1Cittc2dpZCAiLXhcdFx0XHRFZGl0IGVuY3J5cHRlZCBmaWxlcyIKK21zZ3N0ciAiLXhcdFx0XHRFZGl0YWNlIHphuWlmcm92YW79Y2ggc291Ym9y+SIKKworIzogbWFpbi5jOjIyNzkKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdENvbm5lY3QgdmltIHRvIHRoaXMgcGFydGljdWxhciBYLXNlcnZlciIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHRTcHVzdO0gdmltIG5hIGRhbv0gWC1zZXJ2ZXIiCisKKyM6IG1haW4uYzoyMjgxCittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHROZXD4aXBvau0gc2UgayBYIHNlcnZlcnUiCisKKyM6IG1haW4uYzoyMjgzCittc2dpZCAiLS1zb2NrZXRpZCA8eGlkPlx0T3BlbiBWaW0gaW5zaWRlIGFub3RoZXIgR1RLIHdpZGdldCIKK21zZ3N0ciAiLS1zb2NrZXRpZCA8eGlkPlx0T3RldvhlIFZpbSB1dm5pdPggamlu6WhvIEdUSyB3aWRnZXR1IgorCisjOiBtYWluLmM6MjI4NworbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQiCittc2dzdHIgIi0tcmVtb3RlIDxzb3Vib3J5Plx0RWRpdHVqZSA8c291Ym9yeT4gbmEgVmltIHNlcnZlcnUgYSBza29u6O0iCisKKyM6IG1haW4uYzoyMjg4Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgQXMgLS1yZW1vdGUgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQiCittc2dzdHIgIiIKKyItLXJlbW90ZS13YWl0IDxzb3Vib3J5PiBKYWtvIC0tcmVtb3RlLCBhbGUg6GVr4SBuYSBzb3Vib3J5IGsgZWRpdGFjaSIKKworIzogbWFpbi5jOjIyODkKK21zZ2lkICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0U2VuZCA8a2V5cz4gdG8gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZS1zZW5kIDxrbOF2ZXN5Plx0UPhlZOEgPGts4XZlc3k+IFZpbSBzZXJ2ZXJ1IGEgc2tvbujtIgorCisjOiBtYWluLmM6MjI5MAorbXNnaWQgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWF0ZSA8ZXhwcj4gaW4gYSBWaW0gc2VydmVyIGFuZCBwcmludCByZXN1bHQiCittc2dzdHIgIi0tcmVtb3RlLWV4cHIgPHb9cmF6Plx0UHJvdmVkZSA8dv1yYXo+IG5hIHNlcnZlcnUgYSB6b2JyYXrtIHb9c2xlZGVrIgorCisjOiBtYWluLmM6MjI5MQorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICItLXNlcnZlcmxpc3RcdFx0Vnlw7bllIHNlem5hbSBkb3N0dXBu/WNoIFZpbSBzZXJ2ZXL5IGEgc2tvbujtIgorCisjOiBtYWluLmM6MjI5MgorbXNnaWQgIi0tc2VydmVybmFtZSA8bmFtZT5cdFNlbmQgdG8vYmVjb21lIHRoZSBWaW0gc2VydmVyIDxuYW1lPiIKK21zZ3N0ciAiIgorIi0tc2VydmVybmFtZSA8am3pbm8+XHRaYblsZSBzZXJ2ZXJ1IDxqbelubz4vc3RhbmUgc2UgVmltIHNlcnZlcmVtIDxqbelubz4iCisKKyM6IG1haW4uYzoyMjk1Cittc2dpZCAiLWkgPHZpbWluZm8+XHRcdFVzZSA8dmltaW5mbz4gaW5zdGVhZCBvZiAudmltaW5mbyIKK21zZ3N0ciAiLWkgPHZpbWluZm8+XHRcdFBvdb5pamUgPHZpbWluZm8+IG3tc3RvIGpha+lob2tvbGl2IC52aW1pbmZvIgorCisjOiBtYWluLmM6MjI5NworbXNnaWQgIi1oXHRcdFx0cHJpbnQgSGVscCAodGhpcyBtZXNzYWdlKSBhbmQgZXhpdCIKK21zZ3N0ciAiLWhcdFx0XHRWeXDtuWUgdHV0byBu4XBvduxkdSBhIHNrb27o7SIKKworIzogbWFpbi5jOjIyOTgKK21zZ2lkICItLXZlcnNpb25cdFx0cHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKK21zZ3N0ciAiLS12ZXJzaW9uXHRcdHZ5cO25ZSBpbmZvcm1hY2UgbyB2ZXJ6aSBhIHNrb27o7SIKKworIzogbWFpbi5jOjIzMDIKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoTW90aWYgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJQ+GVw7W5h6GUgcHJvIGd2aW0gKE1vdGlmIHZlcnppKTpcbiIKKworIzogbWFpbi5jOjIzMDUKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoQXRoZW5hIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiUPhlcO1uYehlIHBybyBndmltIChBdGhlbmEgdmVyemkpOlxuIgorCisjOiBtYWluLmM6MjMwOAorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4iCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0U3B1c3TtIHZpbSBuYSA8ZGlzcGxheT4iCisKKyM6IG1haW4uYzoyMzA5Cittc2dpZCAiLWljb25pY1x0XHRTdGFydCB2aW0gaWNvbmlmaWVkIgorbXNnc3RyICItaWNvbmljXHRcdFNwdXN07SB2aW0gbWluaW1hbGl6b3ZhbukiCisKKyM6IG1haW4uYzoyMzExCittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG7hemV2Plx0XHRQb3W+aWplIHJlc291cmNlIGpha28gYnkgdmltIG3sbCA8buF6ZXY+IgorCisjOiBtYWluLmM6MjMxMgorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgKG5lbu0gaW1wbGVtZW50b3bhbm8pXG4iCisKKyM6IG1haW4uYzoyMzE0Cittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8YmFydmE+XHROYXN0YXbtIDxiYXJ2dT4gcG96YWTtICh0YWvpIC1iZykiCisKKyM6IG1haW4uYzoyMzE1Cittc2dpZCAiLWZvcmVncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIG5vcm1hbCB0ZXh0IChhbHNvOiAtZmcpIgorbXNnc3RyICItZm9yZWdyb3VuZCA8YmFydmE+XHROYXN0YXbtIDxiYXJ2dT4gcG9w+GVk7SAodGFr6SAtZmcpIgorCisjOiBtYWluLmM6MjMxNiBtYWluLmM6MjMzNgorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPHDtc21vPlx0XHROYXN0YXbtIDxw7XNtbz4gbm9ybeFsbu1obyB0ZXh0dSAodGFr6SAtZm4pIgorCisjOiBtYWluLmM6MjMxNworbXNnaWQgIi1ib2xkZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGJvbGQgdGV4dCIKK21zZ3N0ciAiLWJvbGRmb250IDxw7XNtbz5cdE5hc3Rhdu0gPHDtc21vPiBwcm8genb9cmF6buxu/SB0ZXh0IgorCisjOiBtYWluLmM6MjMxOAorbXNnaWQgIi1pdGFsaWNmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgaXRhbGljIHRleHQiCittc2dzdHIgIi1pdGFsaWNmb250IDxw7XNtbz5cdE5hc3Rhdu0gPHDtc21vPiBwcm8ga3Vyeu12dSIKKworIzogbWFpbi5jOjIzMTkgbWFpbi5jOjIzMzcKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIi1nZW9tZXRyeSA8Z2VvbWV0cmllPlx0TmFzdGF27SA8Z2VvbWV0cmlpPiAodGFr6SAtZ2VvbSkiCisKKyM6IG1haW4uYzoyMzIwCittc2dpZCAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdFVzZSBhIGJvcmRlciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtYncpIgorbXNnc3RyICItYm9yZGVyd2lkdGggPLnt+GthPlx0TmFzdGF27SA8ue34a3U+IG9rcmFq+SAodGFr6SAtYncpIgorCisjOiBtYWluLmM6MjMyMQorbXNnaWQgIi1zY3JvbGxiYXJ3aWR0aCA8d2lkdGg+ICBVc2UgYSBzY3JvbGxiYXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLXN3KSIKK21zZ3N0ciAiLXNjcm9sbGJhcndpZHRoIDy57fhrdT4gTmFzdGF27SA8ue34a3U+IHBvc3Vub3ZhY+0gbGm5dHkgKHRha+k6IC1zdykiCisKKyM6IG1haW4uYzoyMzIzCittc2dpZCAiLW1lbnVoZWlnaHQgPGhlaWdodD5cdFVzZSBhIG1lbnUgYmFyIGhlaWdodCBvZiA8aGVpZ2h0PiAoYWxzbzogLW1oKSIKK21zZ3N0ciAiLW1lbnVoZWlnaHQgPHb9uWthPlx0TmFzdGF27SA8dv25a3U+IG5hYu1ka3kgKHRha+kgLW1oKSIKKworIzogbWFpbi5jOjIzMjUgbWFpbi5jOjIzMzgKK21zZ2lkICItcmV2ZXJzZVx0XHRVc2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogLXJ2KSIKK21zZ3N0ciAiLXJldmVyc2VcdFx0UG91vmlqZSByZXZlcnpu7SBiYXJ2eSAodGFr6SAtcnYpIgorCisjOiBtYWluLmM6MjMyNgorbXNnaWQgIityZXZlcnNlXHRcdERvbid0IHVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiArcnYpIgorbXNnc3RyICIrcmV2ZXJzZVx0XHROZXBvdb5pamUgcmV2ZXJ6bu0gYmFydnkgKHRha+kgK3J2KSIKKworIzogbWFpbi5jOjIzMjcKK21zZ2lkICIteHJtIDxyZXNvdXJjZT5cdFNldCB0aGUgc3BlY2lmaWVkIHJlc291cmNlIgorbXNnc3RyICIteHJtIDxyZXNvdXJjZT5cdE5hc3Rhdu0gemFkYW79IDxyZXNvdXJjZT4iCisKKyM6IG1haW4uYzoyMzMwCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKFJJU0MgT1MgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJQ+GVw7W5h6GUgcHJvIGd2aW0gKFJJU0MgT1MgdmVyemkpOlxuIgorCisjOiBtYWluLmM6MjMzMQorbXNnaWQgIi0tY29sdW1ucyA8bnVtYmVyPlx0SW5pdGlhbCB3aWR0aCBvZiB3aW5kb3cgaW4gY29sdW1ucyIKK21zZ3N0ciAiLS1jb2x1bW5zIDxwb+hldD5cdDxwb+hldD4gc2xvdXBj+SBuYSBva25vIgorCisjOiBtYWluLmM6MjMzMgorbXNnaWQgIi0tcm93cyA8bnVtYmVyPlx0SW5pdGlhbCBoZWlnaHQgb2Ygd2luZG93IGluIHJvd3MiCittc2dzdHIgIi0tcm93cyA8cG/oZXQ+XHQ8cG/oZXQ+IPjhZGv5IG5hIG9rbm8iCisKKyM6IG1haW4uYzoyMzM1Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEdUSysgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJQ+GVw7W5h6GUgcHJvIGd2aW0gKEdUSysgdmVyemkpOlxuIgorCisjOiBtYWluLmM6MjMzOQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4gKGFsc286IC0tZGlzcGxheSkiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0U3B1c3TtIHZpbSBuYSA8ZGlzcGxheT4gKHRha+kgLS1kaXNwbGF5KSIKKworIzogbWFpbi5jOjIzNDEKK21zZ2lkICItLWhlbHBcdFx0U2hvdyBHbm9tZSBhcmd1bWVudHMiCittc2dzdHIgIi0taGVscFx0XHRWeXDtuWUgR25vbWUgcPhlcO1uYehlIgorCisjLiBGYWlsZWQgdG8gc2VuZCwgYWJvcnQuCisjOiBtYWluLmM6MjU2NgorbXNnaWQgIiIKKyJcbiIKKyJTZW5kIGZhaWxlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlD4ZWThbu0gdv1yYXp1IHNlbGhhbG8uXG4iCisKKyMuIExldCB2aW0gc3RhcnQgbm9ybWFsbHkuCisjOiBtYWluLmM6MjU3MQorbXNnaWQgIiIKKyJcbiIKKyJTZW5kIGZhaWxlZC4gVHJ5aW5nIHRvIGV4ZWN1dGUgbG9jYWxseVxuIgorbXNnc3RyICIiCisiXG4iCisiUPhlZOFu7SBzZWxoYWxvLiBaa291ue1tIHByb3bpc3QgbG9r4Wxu7FxuIgorCisjOiBtYWluLmM6MjYwNCBtYWluLmM6MjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBvZiAlZCBlZGl0ZWQiCittc2dzdHIgIiVkIHogJWQgZWRpdG924W5vIgorCisjOiBtYWluLmM6MjY0OAorbXNnaWQgIlNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIlD4ZWThbu0gdv1yYXp1IHNlbGhhbG8uXG4iCisKKyM6IG1hcmsuYzo2NjAKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIk5lanNvdSBuYXN0YXZlbnkgvuFkbukgem5h6Gt5IgorCisjOiBtYXJrLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4MzogXCIlc1wiIG5ldnlob3Z1au0gvuFkbukgem5h6Gt5IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo2NzMKK21zZ2lkICIiCisiXG4iCisibWFyayBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiem5h6GthIPjhZGVrICBzbG91cGVjIHNvdWJvci90ZXh0IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo3MTEKK21zZ2lkICIiCisiXG4iCisiIGp1bXAgbGluZSAgY29sIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiBza29rIPjhZGVrIHNsb3VwZWMgc291Ym9yL3RleHQiCisKKyM6IG1hcmsuYzoxMDczCittc2dpZCAiIgorIlxuIgorIiMgRmlsZSBtYXJrczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgU291Ym9yb3bpIHpuYehreTpcbiIKKworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMTA4Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIFNlem5hbSBza29r+SAocG/o7W5hamUgbmVqbm927Gq57SBwb2xvvmtvdSk6XG4iCisKKyM6IG1hcmsuYzoxMjAzCittc2dpZCAiIgorIlxuIgorIiMgSGlzdG9yeSBvZiBtYXJrcyB3aXRoaW4gZmlsZXMgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBIaXN0b3JpZSB6bmHoZWsgdiBzb3Vib3JlY2ggKHBv6O1uYWplIG5lam5vduxque0gcG9sb75rb3UpOlxuIgorCisjOiBtYXJrLmM6MTI4NgorbXNnaWQgIk1pc3NpbmcgJz4nIgorbXNnc3RyICJDaHli7SAnPiciCisKKyM6IG1ieXRlLmM6Mzk1Cittc2dpZCAiTm90IGEgdmFsaWQgY29kZXBhZ2UiCittc2dzdHIgIkNoeWJu4SBr82RvduEgc3Ry4W5rYSIKKworIzogbWJ5dGUuYzozMDE0Cittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IE5lbHplIG5hc3Rhdml0IElDIGhvZG5vdHkiCisKKyM6IG1ieXRlLmM6MzE2NgorbXNnaWQgIkUyODU6IEZhaWxlZCB0byBjcmVhdGUgaW5wdXQgY29udGV4dCIKK21zZ3N0ciAiRTI4NTogTmVwb2Rh+GlsbyBzZSB2eXR2b/hpdCB2c3R1cG7tIGtvbnRleHQiCisKKyM6IG1ieXRlLmM6MzMxMworbXNnaWQgIkUyODY6IEZhaWxlZCB0byBvcGVuIGlucHV0IG1ldGhvZCIKK21zZ3N0ciAiRTI4NjogTmVwb2Rh+GlsbyBzZSBvdGV2+O10IHZzdHVwbu0gbWV0b2R1IgorCisjOiBtYnl0ZS5jOjMzMjQKK21zZ2lkICJFMjg3OiBXYXJuaW5nOiBDb3VsZCBub3Qgc2V0IGRlc3Ryb3kgY2FsbGJhY2sgdG8gSU0iCittc2dzdHIgIkUyODc6IFZhcm924W7tOiBsaWt2aWRh6G7tIHpw7HRu6SB2b2zhbu0gbmVsemUgbmFzdGF2aXQgbmEgSU0iCisKKyM6IG1ieXRlLmM6MzMzMAorbXNnaWQgIkUyODg6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgYW55IHN0eWxlIgorbXNnc3RyICJFMjg4OiB2c3R1cG7tIG1ldG9kYSBuZXBvZHBvcnVqZSC+4WRu/SBzdHlsIgorCisjOiBtYnl0ZS5jOjMzODcKK21zZ2lkICJFMjg5OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IG15IHByZWVkaXQgdHlwZSIKK21zZ3N0ciAiRTI4OTogdnN0dXBu7SBtZXRvZGEgbmVwb2Rwb3J1amUgbflqICdwcmVlZGl0JyB0eXAiCisKKyM6IG1ieXRlLmM6MzQ2MQorbXNnaWQgIkUyOTA6IG92ZXItdGhlLXNwb3Qgc3R5bGUgcmVxdWlyZXMgZm9udHNldCIKK21zZ3N0ciAiRTI5MDogTmFkYm9kb3b9IHN0eWwgdnm+YWR1amUgZm9udHNldCIKKworIzogbWJ5dGUuYzozNDg5Cittc2dpZCAiRTI5MTogWW91ciBHVEsrIGlzIG9sZGVyIHRoYW4gMS4yLjMuIFN0YXR1cyBhcmVhIGRpc2FibGVkIgorbXNnc3RyICJFMjkxOiBN4XRlIEdUSysgdmVyemUgc3RhcrntIG5lviAxLjIuMy4gU3Rhdm924SBwbG9jaGEgdnlwbnV0YS4iCisKKyM6IG1ieXRlLmM6MzcyNgorbXNnaWQgIkUyOTI6IElucHV0IE1ldGhvZCBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmciCittc2dzdHIgIkUyOTI6IFNlcnZlciB2c3R1cG7tY2ggbWV0b2QgbmVi7L7tIgorCisjOiBtZW1maWxlLmM6NDczCittc2dpZCAiRTI5MzogYmxvY2sgd2FzIG5vdCBsb2NrZWQiCittc2dzdHIgIkUyOTM6IGJsb2sgbmVieWwgemFta251dCIKKworIzogbWVtZmlsZS5jOjk3MgorbXNnaWQgIkUyOTQ6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHJlYWQiCittc2dzdHIgIkUyOTQ6IENoeWJhIHBvc3VudSB1a2F6b3bhdGthIHD4aSDodGVu7SBvZGts4WRhY+1obyBzb3Vib3J1IgorCisjOiBtZW1maWxlLmM6OTc3Cittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IENoeWJhIHD4aSDodGVu7SBvZGts4WRhY+1obyBzb3Vib3J1IgorCisjOiBtZW1maWxlLmM6MTAyOQorbXNnaWQgIkUyOTY6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHdyaXRlIgorbXNnc3RyICJFMjk2OiBDaHliYSBwb3N1bnUgdWthem924XRrYSBw+GkgdWts4WThbu0gZG8gb2RrbOFkYWPtaG8gc291Ym9ydSIKKworIzogbWVtZmlsZS5jOjEwNDcKK21zZ2lkICJFMjk3OiBXcml0ZSBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTc6IENoeWJhIHD4aSB1a2zhZOFu7SBkbyBvZGts4WRhY+1obyBzb3Vib3J1IgorCisjOiBtZW1maWxlLmM6MTI0NAorbXNnaWQgIkUzMDA6IFN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyAoc3ltbGluayBhdHRhY2s/KSIKK21zZ3N0ciAiIgorIkUzMDA6IE9ka2zhZGFj7SBzb3Vib3Igamm+IGV4aXN0dWplISAoTuxrZG8gaGFja3VqZXD4ZXMgbmFzdHJhvmVu/SBzeW1saW5rPykiCisKKyM6IG1lbWxpbmUuYzoyNzUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDA/IgorbXNnc3RyICJFMjk4OiBOZWx6ZSB67XNrYXQgYmxvayAwPyIKKworIzogbWVtbGluZS5jOjMxNQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMT8iCittc2dzdHIgIkUyOTg6IE5lbHplIHrtc2thdCBibG9rIDE/IgorCisjOiBtZW1saW5lLmM6MzMzCittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAyPyIKK21zZ3N0ciAiRTI5ODogbmVsemUgeu1za2F0IGJsb2sgMj8iCisKKyMuIGNvdWxkIG5vdCAocmUpb3BlbiB0aGUgc3dhcCBmaWxlLCB3aGF0IGNhbiB3ZSBkbz8/Pz8KKyM6IG1lbWxpbmUuYzo0NDMKK21zZ2lkICJFMzAxOiBPb3BzLCBsb3N0IHRoZSBzd2FwIGZpbGUhISEiCittc2dzdHIgIkUzMDE6IErpamUsIG9ka2zhZGFj7SBzb3Vib3IgYnlsIHp0cmFjZW4hISEiCisKKyM6IG1lbWxpbmUuYzo0NDgKK21zZ2lkICJFMzAyOiBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwMjogTmVsemUgcPhlam1lbm92YXQgb2RrbOFkYWPtIHNvdWJvciIKKworIzogbWVtbGluZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIKK21zZ3N0ciAiRTMwMzogTmVsemUgb3RldvjtdCBvZGts4WRhY+0gc291Ym9yIHBybyBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiBtbF90aW1lc3RhbXA6IG5lbHplIHrtc2thdCBibG9rIDA/PyIKKworIzogbWVtbGluZS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA1OiBObyBzd2FwIGZpbGUgZm91bmQgZm9yICVzIgorbXNnc3RyICJFMzA1OiBPZGts4WRhY+0gc291Ym9yIHBybyAlcyBuZWJ5bCBuYWxlemVuIgorCisjOiBtZW1saW5lLmM6NzY3Cittc2dpZCAiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIKK21zZ3N0ciAiIgorIlphZGVqdGUg6O1zbG8gb2RrbOFkYWPtaG8gc291Ym9ydSwga3Rlcv0gc2UgbeEgcG91vu10ICgwIHBybyB1a29u6GVu7Sk6ICIKKworIzogbWVtbGluZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA2OiBDYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiRTMwNjogTmVsemUgb3RldvjtdCAlcyIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIk5lbHplIOjtc3QgYmxvayAwIHogIgorCisjOiBtZW1saW5lLmM6ODM3Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIk1vvm7hIG5lZG+5bG8gayC+4WRu/W0gem3sbuFtLCBuZWJvIFZpbSBuZWFrdHVhbGl6b3ZhbCBvZGts4WRhY+0gc291Ym9yLiIKKworIzogbWVtbGluZS5jOjg0NyBtZW1saW5lLmM6ODY0Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiIG5lbHplIHBvdb7tdCBzIHRvdXRvIHZlcnrtIFZpbS5cbiIKKworIzogbWVtbGluZS5jOjg0OQorbXNnaWQgIlVzZSBWaW0gdmVyc2lvbiAzLjAuXG4iCittc2dzdHIgIlBvdb5panRlIFZpbSB2ZXJ6ZSAzLjAuXG4iCisKKyM6IG1lbWxpbmUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNzogJXMgZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwNzogJXMgc2UgbmV6ZOEgYv10IG9ka2zhZGFj7W0gc291Ym9yZW0gVmltIgorCisjOiBtZW1saW5lLmM6ODY4Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIG9uIHRoaXMgY29tcHV0ZXIuXG4iCittc2dzdHIgIiBuZWx6ZSBwb3W+7XQgbmEgdG9tdG8gcG/o7XRh6GkuXG4iCisKKyM6IG1lbWxpbmUuYzo4NzAKK21zZ2lkICJUaGUgZmlsZSB3YXMgY3JlYXRlZCBvbiAiCittc2dzdHIgIlNvdWJvciBieWwgdnl0dm/4ZW4gIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyJuZWJvIGJ5bCBzb3Vib3IgcG+5a296ZW4uIgorCisjOiBtZW1saW5lLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHN3YXAgZmlsZSBcIiVzXCIiCittc2dzdHIgIlBvdb7tduFtIG9ka2zhZGFj7SBzb3Vib3IgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9yaWdpbmFsIGZpbGUgXCIlc1wiIgorbXNnc3RyICJQ+XZvZG7tIHNvdWJvciBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MzQKK21zZ2lkICJFMzA4OiBXYXJuaW5nOiBPcmlnaW5hbCBmaWxlIG1heSBoYXZlIGJlZW4gY2hhbmdlZCIKK21zZ3N0ciAiRTMwODogVmFyb3bhbu06IFD5dm9kbu0gc291Ym9yIG1vaGwgYv10IHpt7G7sbiIKKworIzogbWVtbGluZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6IE5lbHplIOjtc3QgYmxvayAxIHogJXMiCisKKyM6IG1lbWxpbmUuYzo5NzkKK21zZ2lkICI/Pz9NQU5ZIExJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P0NIWULNIE1OT0hPINjBREvZIgorCisjOiBtZW1saW5lLmM6OTk1Cittc2dpZCAiPz8/TElORSBDT1VOVCBXUk9ORyIKK21zZ3N0ciAiPz8/Q0hZQk7dIFBPyEVUINjBREvZIgorCisjOiBtZW1saW5lLmM6MTAwMgorbXNnaWQgIj8/P0VNUFRZIEJMT0NLIgorbXNnc3RyICI/Pz9QUsFaRE7dIEJMT0siCisKKyM6IG1lbWxpbmUuYzoxMDI4Cittc2dpZCAiPz8/TElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/Q0hZQsxKzUPNINjBREtZIgorCisjOiBtZW1saW5lLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzEwOiBCbG9jayAxIElEIHdyb25nICglcyBub3QgYSAuc3dwIGZpbGU/KSIKK21zZ3N0ciAiRTMxMDogSUQgYmxva3UgMSBqZSBjaHlibukgKGplICVzIG9ka2zhZGFj7W0gc291Ym9yZW0/KSIKKworIzogbWVtbGluZS5jOjEwNjUKK21zZ2lkICI/Pz9CTE9DSyBNSVNTSU5HIgorbXNnc3RyICI/Pz9DSFlCzSBCTE9LIgorCisjOiBtZW1saW5lLmM6MTA4MQorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBiZSBtZXNzZWQgdXAiCittc2dzdHIgIm9kID8/PyBwbyA/Pz9FTkQgbW9ob3UgYv10IPjhZGt5IHBvbe1jaGFu6SIKKworIzogbWVtbGluZS5jOjEwOTcKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiCittc2dzdHIgIm9kID8/PyBwbyA/Pz9FTkQgbW9ob3UgYv10IHZsb75lbukvc21hemFu6SD44WRreSIKKworIzogbWVtbGluZS5jOjExMTcKK21zZ2lkICI/Pz9FTkQiCittc2dzdHIgIj8/P0tPTkVDIgorCisjOiBtZW1saW5lLmM6MTE0MworbXNnaWQgIkUzMTE6IFJlY292ZXJ5IEludGVycnVwdGVkIgorbXNnc3RyICJFMzExOiBPYm5vdmEgcPhlcnW5ZW5hIgorCisjOiBtZW1saW5lLmM6MTE0NQorbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIiIKKyJFMzEyOiBWIHBy+WLsaHUgb2Jub3Z5IGRvuWxvIGsgY2h5YuFtOyB6a29udHJvbHVqdGUg+OFka3kgemHo7W5hau1j7SBuYSA/Pz8iCisKKyM6IG1lbWxpbmUuYzoxMTQ4Cittc2dpZCAiUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIgorbXNnc3RyICJPYm5vdmEgZG9rb27oZW5hLiBaa29udHJvbHVqdGUsIHpkYSBqZSB2uWUgdiBwb/jhZGt1LiIKKworIzogbWVtbGluZS5jOjExNDkKK21zZ2lkICIiCisiXG4iCisiKFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIG91dCB0aGlzIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoWnZhvnRlIHVsb75lbu0gdG9ob3RvIHNvdWJvcnUgcG9kIGppbv1tIG7henZlbVxuIgorCisjOiBtZW1saW5lLmM6MTE1MAorbXNnaWQgImFuZCBydW4gZGlmZiB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIHRvIGNoZWNrIGZvciBjaGFuZ2VzKVxuIgorbXNnc3RyICJhIGtvbnRyb2x1IHpt7G4gcG9tb2PtIHByb2dyYW11IGRpZmYuKVxuIgorCisjOiBtZW1saW5lLmM6MTE1MQorbXNnaWQgIiIKKyJEZWxldGUgdGhlIC5zd3AgZmlsZSBhZnRlcndhcmRzLlxuIgorIlxuIgorbXNnc3RyICJQb3TpIHNtYb50ZSBvZGts4WRhY+0gc291Ym9yLlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMDcKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAiTmFsZXplbukgb2RrbOFkYWPtIHNvdWJvcnk6IgorCisjOiBtZW1saW5lLmM6MTM4NQorbXNnaWQgIiAgIEluIGN1cnJlbnQgZGlyZWN0b3J5OlxuIgorbXNnc3RyICIgICBWIGFrdHXhbG7tbSBhZHJlc+H4aTpcbiIKKworIzogbWVtbGluZS5jOjEzODcKK21zZ2lkICIgICBVc2luZyBzcGVjaWZpZWQgbmFtZTpcbiIKK21zZ3N0ciAiICAgU2UgemFkYW79bSBu4Xp2ZW06XG4iCisKKyM6IG1lbWxpbmUuYzoxMzkxCittc2dpZCAiICAgSW4gZGlyZWN0b3J5ICIKK21zZ3N0ciAiICAgViBhZHJlc+H4aSAiCisKKyM6IG1lbWxpbmUuYzoxNDA5Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgICAtLSC+4WRu6SAtLVxuIgorCisjOiBtZW1saW5lLmM6MTQ4MQorbXNnaWQgIiAgICAgICAgICBvd25lZCBieTogIgorbXNnc3RyICIgICAgICAgICAgdmxhc3Ru7Ws6ICIKKworIzogbWVtbGluZS5jOjE0ODMKK21zZ2lkICIgICBkYXRlZDogIgorbXNnc3RyICIgICBkYXR1bSB2eXR2b/hlbu06ICIKKworIzogbWVtbGluZS5jOjE0ODcgbWVtbGluZS5jOjM2ODAKK21zZ2lkICIgICAgICAgICAgICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgICAgICAgICAgIGRhdHVtIHZ5dHZv+GVu7TogIgorCisjOiBtZW1saW5lLmM6MTUwMworbXNnaWQgIiAgICAgICAgIFtmcm9tIFZpbSB2ZXJzaW9uIDMuMF0iCittc2dzdHIgIiAgICAgICAgIFtvZCBWaW0gdmVyemUgMy4wXSIKKworIzogbWVtbGluZS5jOjE1MDcKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgIFtuZXZ5cGFk4SBqYWtvIG9ka2zhZGFj7SBzb3Vib3IgVmltXSIKKworIzogbWVtbGluZS5jOjE1MTEKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgICAgbuF6ZXYgc291Ym9ydTogIgorCisjOiBtZW1saW5lLmM6MTUyMworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICAgbW9kaWZpZWQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICBkYXR1bSB6bexueTogIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIllFUyIKK21zZ3N0ciAiQU5PIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIm5vIgorbXNnc3RyICJuZSIKKworIzogbWVtbGluZS5jOjE1MjgKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgdXNlciBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICB1vml2YXRlbHNr6SBqbelubzogIgorCisjOiBtZW1saW5lLmM6MTUzNQorbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgICBu4XpldiBwb+jtdGHoZTogIgorCisjOiBtZW1saW5lLmM6MTUzNworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIG7hemV2IHBv6O10YehlOiAiCisKKyM6IG1lbWxpbmUuYzoxNTQzCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICBJRCBwcm9jZXN1IDogIgorCisjOiBtZW1saW5lLmM6MTU0OQorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAoc3ThbGUgYWt0aXZu7SkiCisKKyM6IG1lbWxpbmUuYzoxNTYxCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbbmVwb3W+aXRlbG7pIHMgdG91dG8gdmVyeu0gVmltXSIKKworIzogbWVtbGluZS5jOjE1NjQKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgb24gdGhpcyBjb21wdXRlcl0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbbmVwb3W+aXRlbG7pIG5hIHRvbXRvIHBv6O10YehpXSIKKworIzogbWVtbGluZS5jOjE1NjkKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIHJlYWRdIgorbXNnc3RyICIgICAgICAgICBbbmVsemUgcPhl6O1zdF0iCisKKyM6IG1lbWxpbmUuYzoxNTczCittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSBvcGVuZWRdIgorbXNnc3RyICIgICAgICAgICBbbmVsemUgb3RldvjtdF0iCisKKyM6IG1lbWxpbmUuYzoxNzYzCittc2dpZCAiRTMxMzogQ2Fubm90IHByZXNlcnZlLCB0aGVyZSBpcyBubyBzd2FwIGZpbGUiCittc2dzdHIgIkUzMTM6IE5lbHplIHphY2hvdmF0IC0gb2RrbOFkYWPtIHNvdWJvciBuZWV4aXN0dWplLiIKKworIzogbWVtbGluZS5jOjE4MTYKK21zZ2lkICJGaWxlIHByZXNlcnZlZCIKK21zZ3N0ciAiU291Ym9yIHphY2hvduFuIgorCisjOiBtZW1saW5lLmM6MTgxOAorbXNnaWQgIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIKK21zZ3N0ciAiRTMxNDogVWNob3bhbu0gc2UgbmV6ZGH4aWxvIgorCisjOiBtZW1saW5lLmM6MTg4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE1OiBtbF9nZXQ6IGludmFsaWQgbG51bTogJWxkIgorbXNnc3RyICJFMzE1OiBtbF9nZXQ6IGNoeWJu6SDo7XNsbyD44WRrdTogJWxkIgorCisjOiBtZW1saW5lLmM6MTkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE2OiBtbF9nZXQ6IGNhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzE2OiBtbF9nZXQ6IG5lbHplIG5hbOl6dCD44WRlayAlbGQiCisKKyM6IG1lbWxpbmUuYzoyMzAzCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAzIgorbXNnc3RyICJFMzE3OiBjaHlibukgaWQgdWthemF0ZWxlIG5hIGJsb2sgMyIKKworIzogbWVtbGluZS5jOjIzODMKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCBieSBt7GxvIG3tdCBob2Rub3R1IDMiCisKKyM6IG1lbWxpbmUuYzoyNDQ1Cittc2dpZCAiRTMxODogVXBkYXRlZCB0b28gbWFueSBibG9ja3M/IgorbXNnc3RyICJFMzE4OiBBa3R1YWxpem924W5vIHD47WxpuSBtbm9obyBibG9r+T8iCisKKyM6IG1lbWxpbmUuYzoyNjAyCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiBjaHlibukgaWQgdWthemF0ZWxlIG5hIGJsb2sgNCIKKworIzogbWVtbGluZS5jOjI2MjkKK21zZ2lkICJkZWxldGVkIGJsb2NrIDE/IgorbXNnc3RyICJzbWF64W4gYmxvayAxPyIKKworIzogbWVtbGluZS5jOjI4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6IE5lbHplIG5hbOl6dCD44WRlayAlbGQiCisKKyM6IG1lbWxpbmUuYzozMDcyCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyIKK21zZ3N0ciAiRTMxNzogY2h5Ym7pIGlkIHVrYXphdGVsZSBuYSBibG9rIgorCisjOiBtZW1saW5lLmM6MzA4OAorbXNnaWQgInBlX2xpbmVfY291bnQgaXMgemVybyIKK21zZ3N0ciAicGVfbGluZV9jb3VudCBt4SBudWxvdm91IGhvZG5vdHUiCisKKyM6IG1lbWxpbmUuYzozMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjI6IGxpbmUgbnVtYmVyIG91dCBvZiByYW5nZTogJWxkIHBhc3QgdGhlIGVuZCIKK21zZ3N0ciAiRTMyMjogcG/oZXQg+OFka/kgbWltbyByb3pzYWg6ICVsZCA+IGNlbGtvdv0gcG/oZXQg+OFka/kiCisKKyM6IG1lbWxpbmUuYzozMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjM6IGxpbmUgY291bnQgd3JvbmcgaW4gYmxvY2sgJWxkIgorbXNnc3RyICJFMzIzOiBjaHlibv0gcG/oZXQg+OFka/kgdiBibG9rdSAlbGQiCisKKyM6IG1lbWxpbmUuYzozMTcwCittc2dpZCAiU3RhY2sgc2l6ZSBpbmNyZWFzZXMiCittc2dzdHIgIk7hcvlzdCB2ZWxpa29zdGkgeuFzb2Ju7Wt1IgorCisjOiBtZW1saW5lLmM6MzIxNgorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMiIKK21zZ3N0ciAiRTMxNzogY2h5Ym7pIGlkIHVrYXphdGVsZSBuYSBibG9rIDIiCisKKyM6IG1lbWxpbmUuYzozNjcwCittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiBQT1pPUiIKKworIzogbWVtbGluZS5jOjM2NzEKK21zZ2lkICIiCisiXG4iCisiRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgXCIiCittc2dzdHIgIiIKKyJcbiIKKyJOYWxlemVuIG9ka2zhZGFj7SBzb3Vib3Igc2Ugam3pbmVtIFwiIgorCisjOiBtZW1saW5lLmM6MzY3NQorbXNnaWQgIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIKK21zZ3N0ciAiUPhpIG90ZXbtcuFu7SBzb3Vib3J1XCIiCisKKyM6IG1lbWxpbmUuYzozNjg0Cittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgIE5PVsxKqc0gbmW+IG9ka2zhZGFj7SBzb3Vib3IhXG4iCisKKyMuIFNvbWUgb2YgdGhlc2UgbWVzc2FnZXMgYXJlIGxvbmcgdG8gYWxsb3cgdHJhbnNsYXRpb24gdG8KKyMuICogb3RoZXIgbGFuZ3VhZ2VzLgorIzogbWVtbGluZS5jOjM2ODgKK21zZ2lkICIiCisiXG4iCisiKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLlxuIgorIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d29cbiIKKyIgICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMSkgU291Ym9yIG35vmUgYv10IGVkaXRvduFuIGppbv1tIHByb2dyYW1lbS5cbiIKKyIgICAgSmUtbGkgdG9tdSB0YWssIHBhayBzaSBkZWp0ZSBwb3pvciwgYWJ5IGpzdGUgcG8gdWxvvmVu7SB6bexuXG4iCisiICAgIG5lbexsaSBkduwgcvl6bukgdmVyemUgdOlob74gc291Ym9ydS5cbiIKKworIzogbWVtbGluZS5jOjM2ODkKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgVWtvbuhldGUgcHJvZ3JhbSwgbmVibyBvcGF0cm7sIHBva3Jh6HVqdGUgdiBlZGl0YWNpLlxuIgorCisjOiBtZW1saW5lLmM6MzY5MAorbXNnaWQgIiIKKyJcbiIKKyIoMikgQW4gZWRpdCBzZXNzaW9uIGZvciB0aGlzIGZpbGUgY3Jhc2hlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigyKSBFZGl0YWNlIHRvaG90byBzb3Vib3J1IGJ5bGEgcPhlcnW5ZW5hIG5l6GVrYW79bSB1a29u6GVu7W0gcHJvZ3JhbXUuXG4iCisKKyM6IG1lbWxpbmUuYzozNjkxCittc2dpZCAiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSBcIjpyZWNvdmVyXCIgb3IgXCJ2aW0gLXIgIgorbXNnc3RyICIgICAgSmUtbGkgdG9tdSB0YWssIHBhayBwb3W+aWp0ZSBcIjpyZWNvdmVyXCIg6GkgXCJ2aW0gLXIgIgorCisjOiBtZW1saW5lLmM6MzY5MworbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byByZWNvdmVyIHRoZSBjaGFuZ2VzIChzZWUgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIHBybyBvZHN0cmFu7G7tIHpt7G4gKHZpeiBcIjpoZWxwIHJlY292ZXJ5KVwiLlxuIgorCisjOiBtZW1saW5lLmM6MzY5NAorbXNnaWQgIiAgICBJZiB5b3UgZGlkIHRoaXMgYWxyZWFkeSwgZGVsZXRlIHRoZSBzd2FwIGZpbGUgXCIiCittc2dzdHIgIiAgICBQb2t1ZCBqc3RlIHRhayBqab4gdehpbmlsLCB0YWsgc21hvnRlIG9ka2zhZGFj7SBzb3Vib3IgXCIiCisKKyM6IG1lbWxpbmUuYzozNjk2Cittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIGF2b2lkIHRoaXMgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIGEgdGF0byB6cHLhdmEgc2Ugamm+IG5lYnVkZSBvYmpldm92YXQuXG4iCisKKyM6IG1lbWxpbmUuYzozNzEwIG1lbWxpbmUuYzozNzE0Cittc2dpZCAiU3dhcCBmaWxlIFwiIgorbXNnc3RyICJPZGts4WRhY+0gc291Ym9yIFwiIgorCisjOiBtZW1saW5lLmM6MzcxMSBtZW1saW5lLmM6MzcxNworbXNnaWQgIlwiIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiXCIgamm+IGV4aXN0dWplISIKKworIzogbWVtbGluZS5jOjM3MjAKK21zZ2lkICJWSU0gLSBBVFRFTlRJT04iCittc2dzdHIgIlZJTSAtIFBPWk9SIgorCisjOiBtZW1saW5lLmM6MzcyMgorbXNnaWQgIlN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIk9ka2zhZGFj7SBzb3Vib3Igamm+IGV4aXN0dWplISIKKworIzogbWVtbGluZS5jOjM3MjYKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdCIKK21zZ3N0ciAiIgorIiZPdGV2+O10IHBvdXplIHBybyDodGVu7VxuIgorIiZQb2tyYehvdmF0IHYgZWRpdGFjaVxuIgorIk8mYm5vdml0IHNvdWJvclxuIgorIiZLb25lYyIKKworIzogbWVtbGluZS5jOjM3MjgKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZEZWxldGUgaXQiCittc2dzdHIgIiIKKyImT3RldvjtdCBwb3V6ZSBwcm8g6HRlbu1cbiIKKyImUG9rcmHob3ZhdCB2IGVkaXRhY2lcbiIKKyJPJmJub3ZpdCBzb3Vib3JcbiIKKyImS29uZWNcbiIKKyImU21hemF0IgorCisjOiBtZW1saW5lLmM6Mzc4MQorbXNnaWQgIkUzMjY6IFRvbyBtYW55IHN3YXAgZmlsZXMgZm91bmQiCittc2dzdHIgIkUzMjY6IFD47WxpuSBtbm9obyBvZGts4WRhY+1jaCBzb3Vib3L5IgorCisjOiBtZW51LmM6NjQKK21zZ2lkICJFMzI3OiBQYXJ0IG9mIG1lbnUtaXRlbSBwYXRoIGlzIG5vdCBzdWItbWVudSIKK21zZ3N0ciAiRTMyNzogyOFzdGkgY2VzdHkgayBw+GVkbex0dSBuYWLtZGt5IG5lbu0gcG9kbmFi7WRrb3UiCisKKyM6IG1lbnUuYzo2NQorbXNnaWQgIkUzMjg6IE1lbnUgb25seSBleGlzdHMgaW4gYW5vdGhlciBtb2RlIgorbXNnc3RyICJFMzI4OiBOYWLtZGthIGV4aXN0dWplIHBvdXplIHYgamlu6W0gbfNkdSIKKworIzogbWVudS5jOjY2Cittc2dpZCAiRTMyOTogTm8gbWVudSBvZiB0aGF0IG5hbWUiCittc2dzdHIgIkUzMjk6IE5hYu1ka2EgdG9ob3RvIGpt6W5hIG5lZXhpc3R1amUiCisKKyM6IG1lbnUuYzo1MDMKK21zZ2lkICJFMzMwOiBNZW51IHBhdGggbXVzdCBub3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzMwOiBDZXN0YSBuYWLtZGtvdSBuZXNt7SB26XN0IGRvIHBvZG5hYu1ka3kiCisKKyM6IG1lbnUuYzo1NDIKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTogUG9sb75reSBuYWLtZGt5IG5lbHplIHD4aWThdmF0IHD47W1vIG5hIGxpuXR1IgorCisjOiBtZW51LmM6NTQ4Cittc2dpZCAiRTMzMjogU2VwYXJhdG9yIGNhbm5vdCBiZSBwYXJ0IG9mIGEgbWVudSBwYXRoIgorbXNnc3RyICJFMzMyOiBPZGTsbG92YeggbmVzbe0gYv10IOjhc3TtIGNlc3R5IG5hYu1ka291IgorCisjLiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgbWVudSwgYW5kIHdlIGxpc3QgdGhlIG1hcHBpbmdzCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1lbnUuYzoxMDYzCittc2dpZCAiIgorIlxuIgorIi0tLSBNZW51cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTmFi7WRreSAtLS0iCisKKyM6IG1lbnUuYzoxOTg5Cittc2dpZCAiVGVhciBvZmYgdGhpcyBtZW51IgorbXNnc3RyICJPZHRyaG5vdXQgdHV0byBuYWLtZGt1IgorCisjOiBtZW51LmM6MjA1NAorbXNnaWQgIkUzMzM6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBtZW51IGl0ZW0iCittc2dzdHIgIkUzMzM6IENlc3RhIG5hYu1ka291IG11c+0gdulzdCBrIHBvbG++Y2UgbmFi7WRreSIKKworIzogbWVudS5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNDogTWVudSBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMzM0OiBWem9yIG5lbmFsZXplbjogJXMiCisKKyM6IG1lbnUuYzoyMTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzU6IE1lbnUgbm90IGRlZmluZWQgZm9yICVzIG1vZGUiCittc2dzdHIgIkUzMzU6IFYgJXMgbfNkdSBuZW7tIG5hYu1ka2EgZGVmaW5vduFuYSIKKworIzogbWVudS5jOjIxODEKK21zZ2lkICJFMzM2OiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzY6IENlc3RhIG5hYu1ka291IG11c+0gdulzdCBkbyBwb2RuYWLtZGt5IgorCisjOiBtZW51LmM6MjIwMgorbXNnaWQgIkUzMzc6IE1lbnUgbm90IGZvdW5kIC0gY2hlY2sgbWVudSBuYW1lcyIKK21zZ3N0ciAiRTMzNzogTmFi7WRrYSBuZW5hbGV6ZW5hIC0gemtvbnRyb2x1anRlIG7henZ5IG5hYu1kZWsiCisKKyM6IG1lc3NhZ2UuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZyAlczoiCittc2dzdHIgIkNoeWJhIHD4aSB6cHJhY2924W7tICVzOiIKKworIzogbWVzc2FnZS5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICU0bGQ6IgorbXNnc3RyICL44WRlayAlNGxkOiIKKworIzogbWVzc2FnZS5jOjUyMworbXNnaWQgIltzdHJpbmcgdG9vIGxvbmddIgorbXNnc3RyICJbcPjtbGm5IGRsb3Vo/SD4ZXTsemVjXSIKKworIzogbWVzc2FnZS5jOjY2OQorbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorbXNnc3RyICJTcHLhdmNlIHpwcuF2OiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiIKKworIzogbWVzc2FnZS5jOjg4MQorbXNnaWQgIkludGVycnVwdDogIgorbXNnc3RyICJQ+GVydbllbu06ICIKKworIzogbWVzc2FnZS5jOjg4NAorbXNnaWQgIkhpdCBFTlRFUiB0byBjb250aW51ZSIKK21zZ3N0ciAicG9rcmHob3bhbu0gc3Rpc2tlbSBFTlRFUiIKKworIzogbWVzc2FnZS5jOjg4NgorbXNnaWQgIkhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUiCittc2dzdHIgIlBybyBwb2tyYehvduFu7SBzdGlza27sdGUgRU5URVIgbmVibyB6YWRlanRlIHD47WtheiIKKworIzogbWVzc2FnZS5jOjE5NDAKK21zZ2lkICItLSBNb3JlIC0tIgorbXNnc3RyICItLSBQb2tyYehvduFu7SAtLSIKKworIzogbWVzc2FnZS5jOjE5NDMKK21zZ2lkICIgKFJFVC9CUzogbGluZSwgU1BBQ0UvYjogcGFnZSwgZC91OiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVC9CUzog+OFkZWssIE1FWkVSTs1LL2I6IHN0cuFua2EsIGQvdTogMC41IHN0cuFua3ksIHE6IGtvbmVjKSIKKworIzogbWVzc2FnZS5jOjE5NDQKK21zZ2lkICIgKFJFVDogbGluZSwgU1BBQ0U6IHBhZ2UsIGQ6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUOiD44WRlaywgTUVaRVJOzUs6IHN0cuFua2EsIGQ6IDAuNSBzdHLhbmt5LCBxOiBrb25lYykiCisKKyM6IG1lc3NhZ2UuYzoyNDE5IG1lc3NhZ2UuYzoyNDM0Cittc2dpZCAiUXVlc3Rpb24iCittc2dzdHIgIk904XprYSIKKworIzogbWVzc2FnZS5jOjI0MjEKK21zZ2lkICIiCisiJlllc1xuIgorIiZObyIKK21zZ3N0ciAiIgorIiZBbm9cbiIKKyImTmUiCisKKyM6IG1lc3NhZ2UuYzoyNDM2Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJkFub1xuIgorIiZOZVxuIgorIiZacnW5aXQiCisKKyM6IG1lc3NhZ2UuYzoyNDU0Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyJTYXZlICZBbGxcbiIKKyImRGlzY2FyZCBBbGxcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJkFub1xuIgorIiZOZVxuIgorIiZVbG++aXQgdrllXG4iCisiWmFob2RpdCAmdrllXG4iCisiJlpydblpdCIKKworIzogbWVzc2FnZS5jOjI0OTQKK21zZ2lkICJTYXZlIEZpbGUgZGlhbG9nIgorbXNnc3RyICJEaWFsb2cgcHJvIHVrbOFk4W7tIHNvdWJvcvkiCisKKyM6IG1lc3NhZ2UuYzoyNDk2Cittc2dpZCAiT3BlbiBGaWxlIGRpYWxvZyIKK21zZ3N0ciAiRGlhbG9nIHBybyBvdGV27XLhbu0gc291Ym9y+SIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzoyNTQ3Cittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIkUzMzg6IExpdHVqaSwgYWxlIGtvbnpvbG924SB2ZXJ6ZSBuZXBvZHBvcnVqZSBwcm9obO2+Zeggc291Ym9y+SIKKworIzogbWlzYzEuYzoyNDQ5Cittc2dpZCAiVzEwOiBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiCittc2dzdHIgIlcxMDogd2MxOiBt7G7tbSBzb3Vib3IgcG91emVfcHJvX+h0ZW7tIgorCisjOiBtaXNjMS5jOjI2NzgKK21zZ2lkICIxIG1vcmUgbGluZSIKK21zZ3N0ciAicG/oZXQgbm92/WNoIPjhZGv5OiAxIgorCisjOiBtaXNjMS5jOjI2ODAKK21zZ2lkICIxIGxpbmUgbGVzcyIKK21zZ3N0ciAicG/oZXQgc21hemFu/WNoIPjhZGv5OiAxIgorCisjOiBtaXNjMS5jOjI2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIG1vcmUgbGluZXMiCittc2dzdHIgInBv6GV0IG5vdv1jaCD44WRr+TogJWxkIgorCisjOiBtaXNjMS5jOjI2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGZld2VyIGxpbmVzIgorbXNnc3RyICJwb+hldCBzbWF6YW79Y2gg+OFka/k6ICVsZCIKKworIzogbWlzYzEuYzoyNjkwCittc2dpZCAiIChJbnRlcnJ1cHRlZCkiCittc2dzdHIgIihQ+GVydbllbm8pIgorCisjOiBtaXNjMS5jOjYyNDUKK21zZ2lkICJWaW06IHByZXNlcnZpbmcgZmlsZXMuLi5cbiIKK21zZ3N0ciAiVmltOiB6YWNob3bhduFtIHNvdWJvcnkuLi5cbiIKKworIy4gY2xvc2UgYWxsIG1lbWZpbGVzLCB3aXRob3V0IGRlbGV0aW5nCisjOiBtaXNjMS5jOjYyNTUKK21zZ2lkICJWaW06IEZpbmlzaGVkLlxuIgorbXNnc3RyICJWaW06IHVrb27oZW5cbiIKKworIzogbWlzYzIuYzo2NDcgbWlzYzIuYzo2NjMKK21zZ2lkICJFUlJPUjogIgorbXNnc3RyICJDSFlCQTogIgorCisjOiBtaXNjMi5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiW2J5dGVzXSB0b3RhbCBhbGxvYy1mcmVlZCAlbHUtJWx1LCBpbiB1c2UgJWx1LCBwZWFrIHVzZSAlbHVcbiIKK21zZ3N0ciAiIgorIlxuIgorIltiYWp0+V0gY2Vsa2VtIHV2b2xu7G5vLWFsb2tvduFubyAlbHUtJWx1LCB2eXW+aXRvICVsdSwgbWF4aW3hbG7tIHZ5db5pdO0gIgorIiVsdVxuIgorCisjOiBtaXNjMi5jOjY2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiW2NhbGxzXSB0b3RhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWwgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCittc2dzdHIgIiIKKyJbdm9s4W7tXSBjZWxrZW0gcmUvbWFsbG9jKCk6ICVsdSwgY2Vsa2VtIGZyZWUoKSAlbHVcbiIKKyJcbiIKKworIzogbWlzYzIuYzo3MjQKK21zZ2lkICJFMzQwOiBMaW5lIGlzIGJlY29taW5nIHRvbyBsb25nIgorbXNnc3RyICJFMzQwOiDY4WRlayBzZSBzdOF24SBw+O1sabkgZGxvdWj9bSIKKworIzogbWlzYzIuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MTogSW50ZXJuYWwgZXJyb3I6IGxhbGxvYyglbGQsICkiCittc2dzdHIgIkUzNDE6IFZuaXT4bu0gY2h5YmE6IGxhbGxvYyglbGQsICkiCisKKyM6IG1pc2MyLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDI6IE91dCBvZiBtZW1vcnkhICAoYWxsb2NhdGluZyAlbHUgYnl0ZXMpIgorbXNnc3RyICJFMzQyOiBOZWRvc3RhdGVrIHBhbex0aSEgKHBvdPhlYnVqaSBhbG9rb3ZhdCBiYWp0+TogJWx1KSIKKworIzogbWlzYzIuYzoyNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbGxpbmcgc2hlbGwgdG8gZXhlY3V0ZTogXCIlc1wiIgorbXNnc3RyICJTcG91uXTtbSBw+O1rYXogXCIlc1wiIHBvbW9j7SBzaGVsbHUiCisKKyM6IG1pc2MyLmM6MjcwNiBtaXNjMi5jOjUxNDggb3B0aW9uLmM6NDU4NAorbXNnaWQgIk1pc3NpbmcgY29sb24iCittc2dzdHIgIkNoeWLtIGR2b2p0ZehrYSIKKworIzogbWlzYzIuYzoyNzA4IG1pc2MyLmM6MjczNQorbXNnaWQgIklsbGVnYWwgbW9kZSIKK21zZ3N0ciAibmVw+O1wdXN0bv0gbfNkIgorCisjOiBtaXNjMi5jOjI3NzQKK21zZ2lkICJJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIkNoeWJu/SB0dmFyIG15uWkiCisKKyM6IG1pc2MyLmM6MjgxNCBtaXNjMi5jOjUxNjgKK21zZ2lkICJkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAib+hla+F24W5hIOjtc2xpY2UiCisKKyM6IG1pc2MyLmM6MjgxOQorbXNnaWQgIklsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAibmVw+O1wdXN0bukgcHJvY2VudG8iCisKKyM6IG1pc2MyLmM6MzEyMworbXNnaWQgIkVudGVyIGVuY3J5cHRpb24ga2V5OiAiCittc2dzdHIgIlphZGVqdGUguWlmcm92YWPtIGts7eg6ICIKKworIzogbWlzYzIuYzozMTI0Cittc2dpZCAiRW50ZXIgc2FtZSBrZXkgYWdhaW46ICIKK21zZ3N0ciAiWmFkZWp0ZSBqZbl07CBqZWRub3UgdGVudP2+IGts7eg6IgorCisjOiBtaXNjMi5jOjMxMzQKK21zZ2lkICJLZXlzIGRvbid0IG1hdGNoISIKK21zZ3N0ciAiS2zt6GUgc2UgbmVzaG9kdWrtIgorCisjOiBtaXNjMi5jOjM2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUzNDM6IEludmFsaWQgcGF0aDogJyoqW251bWJlcl0nIG11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCBvciBiZSAiCisiZm9sbG93ZWQgYnkgJyVzJy4iCittc2dzdHIgIiIKKyJFMzQzOiBDaHlibuEgY2VzdGE6ICcqKlvo7XNsb10gbXVz7SBi/XQgYnXvIG5hIGtvbmNpIGNlc3R5LCBuZWJvIG11c+0gYv10XG4iCisibuFzbGVkb3bhbm8nJXMuIFZpeiA6aGVscCBwYXRoLiIKKworIzogbWlzYzIuYzo0OTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IEFkcmVz4fggXCIlc1wiIG5lbHplIHYgY2RwYXRoIG5hbOl6dCIKKworIzogbWlzYzIuYzo0OTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDU6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NTogU291Ym9yIFwiJXNcIiBuZWx6ZSB2IHBhdGggbmFs6Xp0IgorCisjOiBtaXNjMi5jOjQ5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NjogTm8gbW9yZSBkaXJlY3RvcnkgXCIlc1wiIGZvdW5kIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NjogruFkbv0gZGFsue0gYWRyZXPh+CBcIiVzXCIgbmVieWwgdiBjZHBhdGggbmFsZXplbiIKKworIzogbWlzYzIuYzo0OTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDc6IE5vIG1vcmUgZmlsZSBcIiVzXCIgZm91bmQgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NzogruFkbv0gZGFsue0gc291Ym9yIFwiJXNcIiBuZWJ5bCB2IGNlc3TsIG5hbGV6ZW4iCisKKyM6IG1pc2MyLmM6NTE2MAorbXNnaWQgIklsbGVnYWwgY29tcG9uZW50IgorbXNnc3RyICJuZXD47XB1c3Ru4SBzb3Xo4XN0IgorCisjOiBub3JtYWwuYzoyODEzCittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAiVmFyb3bhbu06IHRlcm1pbuFsIG5lcG9kcG9ydWplIHp2/XJhevJvduFu7SIKKworIzogbm9ybWFsLmM6MzAwOAorbXNnaWQgIkUzNDg6IE5vIHN0cmluZyB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDg6IHBvZCBrdXJ6b3JlbSBuZW7tIL7hZG79IPhldOx6ZWMiCisKKyM6IG5vcm1hbC5jOjMwMTAKK21zZ2lkICJFMzQ5OiBObyBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0OTogcG9kIGt1cnpvcmVtIG5lbu0gvuFkbv0gaWRlbnRpZmlr4XRvciIKKworIzogbm9ybWFsLmM6NDE3NQorbXNnaWQgIkUzNTI6IENhbm5vdCBlcmFzZSBmb2xkcyB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUyOiBwb21vY+0gYWt0deFsbu0gJ2ZvbGRtZXRob2QnIG5lbHplIG1hemF0IHrhaHlieSIKKworIzogb3BzLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkIDEgdGltZSIKK21zZ3N0ciAicG/oZXQg+OFka/kgcG9zdW51dP1jaCBqZWRub3UgcG9tb2PtICVzIDogMSIKKworIzogb3BzLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICJQb+hldCD44WRr+SBwb3N1bnV0/WNoIHBvbW9j7SAlcyAlZC1rcuF0IDogMSIKKworIzogb3BzLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkIDEgdGltZSIKK21zZ3N0ciAiUG/oZXQg+OFka/k6ICVsZCAocG9zdW51dP1jaCBqZWRub3UgcG9tb2PtICVzKSIKKworIzogb3BzLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorbXNnc3RyICJQb+hldCD44WRr+TogJWxkIChwb3N1bnV0/WNoIHBvbW9j7SAlcyAlZC1rcuF0KSIKKworIzogb3BzLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB0byBpbmRlbnQuLi4gIgorbXNnc3RyICJwb+hldCD44WRr+SBrIG9kc2F6ZW7tOiAlbGQiCisKKyM6IG9wcy5jOjY4OAorbXNnaWQgIjEgbGluZSBpbmRlbnRlZCAiCittc2dzdHIgInBv6GV0IPjhZGv5IGsgb2RzYXplbu06IDEiCisKKyM6IG9wcy5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgaW5kZW50ZWQgIgorbXNnc3RyICJwb+hldCBvZHNhemVu/WNoIPjhZGv5OiAlbGQiCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNTI4Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgIm5lbHplIGtvcO1yb3ZhdDsgcPhlc3RvIHNtYXrhbm8iCisKKyM6IG9wcy5jOjIwMTgKK21zZ2lkICIxIGxpbmUgY2hhbmdlZCIKK21zZ3N0ciAicG/oZXQg+OFkZWsgc2Ugem3sbuxub3UgdmVsaWtvc3TtIHDtc21lbjogMSIKKworIzogb3BzLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgY2hhbmdlZCIKK21zZ3N0ciAicG/oZXQg+OFkZWsgc2Ugem3sbuxub3UgdmVsaWtvc3TtIHDtc21lbjogJWxkIgorCisjOiBvcHMuYzoyMzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZyZWVpbmcgJWxkIGxpbmVzIgorbXNnc3RyICJwb+hldCB1dm9s8m92YW79Y2gg+OFka/k6ICVsZCIKKworIzogb3BzLmM6MjY1OAorbXNnaWQgIjEgbGluZSB5YW5rZWQiCittc2dzdHIgInBv6GV0IHprb3Dtcm92YW79Y2gg+OFka/k6IDEiCisKKyM6IG9wcy5jOjI2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHlhbmtlZCIKK21zZ3N0ciAicG/oZXQgemtvcO1yb3Zhbv1jaCD44WRr+TogJWxkIgorCisjOiBvcHMuYzoyOTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTM6IE5vdGhpbmcgaW4gcmVnaXN0ZXIgJXMiCittc2dzdHIgIkUzNTM6IFJlZ2lzdHIgJXMgamUgcHLhemRu/SIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBvcHMuYzozNDU0Cittc2dpZCAiIgorIlxuIgorIi0tLSBSZWdpc3RlcnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFJlZ2lzdHJ5IC0tLSIKKworIzogb3BzLmM6NDU2NQorbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAibmVw+O1wdXN0bv0gbuF6ZXYgcmVnaXN0cnUiCisKKyM6IG9wcy5jOjQ2NDUKK21zZ2lkICIiCisiXG4iCisiIyBSZWdpc3RlcnM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIFJlZ2lzdHJ5OlxuIgorCisjOiBvcHMuYzo0NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIKK21zZ3N0ciAiJWQgbmVu7SB6buFt/W0gdHlwZW0gcmVnaXN0cnUiCisKKyM6IG9wcy5jOjUwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NDogSW52YWxpZCByZWdpc3RlciBuYW1lOiAnJXMnIgorbXNnc3RyICJFMzU0OiAnJXMnIG5lbu0gcPjtcHVzdG7pIGpt6W5vIHJlZ2lzdHJ1IgorCisjOiBvcHMuYzo1MzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBDb2xzOyAiCittc2dzdHIgIvjhZGv5OiAlbGQ7IgorCisjOiBvcHMuYzo1NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlbGVjdGVkICVzJWxkIG9mICVsZCBMaW5lczsgJWxkIG9mICVsZCBXb3JkczsgJWxkIG9mICVsZCBCeXRlcyIKK21zZ3N0ciAiVnlicuFubyAlcyVsZCB6ICVsZCD44WRr+TsgJWxkIHogJWxkIHNsb3Y7ICVsZCB6ICVsZCBCeXT5IgorCisjOiBvcHMuYzo1NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbCAlcyBvZiAlczsgTGluZSAlbGQgb2YgJWxkOyBXb3JkICVsZCBvZiAlbGQ7IEJ5dGUgJWxkIG9mICVsZCIKK21zZ3N0ciAiU2xvdXBlYyAlcyB6ICVzOyDY4WRlayAlbGQgeiAlbGQ7IFNsb3ZvICVsZCB6ICVsZDsgQnl0ZSAlbGQgeiAlbGQiCisKKyM6IG9wcy5jOjU0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCslbGQgZm9yIEJPTSkiCittc2dzdHIgIigrJWxkIHBybyBCT00pIgorCisjOiBvcHRpb24uYzoxOTg5Cittc2dpZCAiVGhhbmtzIGZvciBmbHlpbmcgVmltIgorbXNnc3RyICJE7Gt1amkgemEgcG91vml07SBWaW0iCisKKyM6IG9wdGlvbi5jOjMxNzUKK21zZ2lkICJPcHRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiVm9sYmEgbmVu7SBwb2Rwb3JvduFuYSIKKworIzogb3B0aW9uLmM6MzIwMAorbXNnaWQgIk5vdCBhbGxvd2VkIGluIGEgbW9kZWxpbmUiCittc2dzdHIgIk5lbu0gdiBtb2RlbGluZSBwb3ZvbGVubyIKKworIzogb3B0aW9uLmM6MzI1NgorbXNnaWQgIiIKKyJcbiIKKyJcdExhc3Qgc2V0IGZyb20gIgorbXNnc3RyICIiCisiXG4iCisiXHROYXBvc2xlZHkgbmFzdGF2ZW5hIHogIgorCisjOiBvcHRpb24uYzozMzk1Cittc2dpZCAiTnVtYmVyIHJlcXVpcmVkIGFmdGVyID0iCittc2dzdHIgIlBvID0gamUgdnm+YWRvduFubyDo7XNsbyIKKworIzogb3B0aW9uLmM6MzcwMiBvcHRpb24uYzo0MzA5Cittc2dpZCAiTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIk5lbmFsZXplbiB2IHRlcm1jYXB1IgorCisjOiBvcHRpb24uYzozNzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgY2hhcmFjdGVyIDwlcz4iCittc2dzdHIgIk5lcPjtcHVzdG79IHpuYWsgPCVzPiIKKworIzogb3B0aW9uLmM6NDI5NCBvcHRpb24uYzo1NDk3Cittc2dpZCAiTm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiVG90byB6ZGUgbmVu7SBwb3ZvbGVubyIKKworIzogb3B0aW9uLmM6NDMwMQorbXNnaWQgIkNhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAidm9sYmEgJ3Rlcm0nIG5lbfm+ZSBi/XQgcHLhemRu4SIKKworIzogb3B0aW9uLmM6NDMwNAorbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdGVybSBpbiBHVUkiCittc2dzdHIgIlYgR1VJIG5lbHplIG3sbml0IHRlcm0iCisKKyM6IG9wdGlvbi5jOjQzMDYKK21zZ2lkICJVc2UgXCI6Z3VpXCIgdG8gc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiUG91vmlqdGUgXCJndWlcIiBwcm8gc3B1uXTsbu0gR1VJIgorCisjOiBvcHRpb24uYzo0MzI3Cittc2dpZCAiJ2JhY2t1cGV4dCcgYW5kICdwYXRjaG1vZGUnIGFyZSBlcXVhbCIKK21zZ3N0ciAidm9sYnkgJ2JhY2t1cGV4dCcgYSAncGF0Y2htb2RlJyBtYWrtIHN0ZWpub3UgaG9kbm90dSIKKworIzogb3B0aW9uLmM6NDU4NgorbXNnaWQgIlplcm8gbGVuZ3RoIHN0cmluZyIKK21zZ3N0ciAi+GV07HplYyBvIG51bG926SBk6WxjZSIKKworIzogb3B0aW9uLmM6NDY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICJQbyA8JXM+IGNoeWLtIOjtc2xvIgorCisjOiBvcHRpb24uYzo0NjY4Cittc2dpZCAiTWlzc2luZyBjb21tYSIKK21zZ3N0ciAiQ2h5Yu0g6OFya2EiCisKKyM6IG9wdGlvbi5jOjQ2NzUKK21zZ2lkICJNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJKZSBudXRu6SB6YWRhdCBob2Rub3R1ICciCisKKyM6IG9wdGlvbi5jOjQ3MTUKK21zZ2lkICJjb250YWlucyB1bnByaW50YWJsZSBjaGFyYWN0ZXIiCittc2dzdHIgIm9ic2FodWplIG5ldGlza251dGVsbukgem5ha3kiCisKKyM6IG9wdGlvbi5jOjQ3MjgKK21zZ2lkICJJbnZhbGlkIGZvbnQocykiCittc2dzdHIgIkNoeWJu4SBw7XNtYSIKKworIzogb3B0aW9uLmM6NDczNAorbXNnaWQgImNhbid0IHNlbGVjdCBmb250c2V0IgorbXNnc3RyICJuZWx6ZSB2eWJyYXQgc2FkdSBw7XNlbSIKKworIzogb3B0aW9uLmM6NDczNgorbXNnaWQgIkludmFsaWQgZm9udHNldCIKK21zZ3N0ciAiY2h5Ym7hIHNhZGEgcO1zZW0iCisKKyM6IG9wdGlvbi5jOjQ3NDMKK21zZ2lkICJjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICJuZWx6ZSB2eWJyYXQguWlyb2v9IGZvbnQiCisKKyM6IG9wdGlvbi5jOjQ3NDUKK21zZ2lkICJJbnZhbGlkIHdpZGUgZm9udCIKK21zZ3N0ciAiQ2h5Ym7pILlpcm9r6SBw7XNtbyIKKworIzogb3B0aW9uLmM6NTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciA8JWM+IgorbXNnc3RyICJOZXD47XB1c3Ru/SB6bmFrIHBvIDwlYz4iCisKKyM6IG9wdGlvbi5jOjUwOTcKK21zZ2lkICJjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAiamUgbnV0buEg6OFya2EiCisKKyM6IG9wdGlvbi5jOjUxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJ2NvbW1lbnRzdHJpbmcnIG11c3QgYmUgZW1wdHkgb3IgY29udGFpbiAlcyIKK21zZ3N0ciAidm9sYmEgYGNvbW1lbnRzdHJpbmdgIG11c+0gYv10IGJ17yBwcuF6ZG7hIG5lYm8gbmFzdGF2ZW7hIG5hICVzIgorCisjOiBvcHRpb24uYzo1MTUzCittc2dpZCAiTm8gbW91c2Ugc3VwcG9ydCIKK21zZ3N0ciAiQmV6IHBvZHBvcnkgbXm5aSIKKworIzogb3B0aW9uLmM6NTM5OQorbXNnaWQgIlVuY2xvc2VkIGV4cHJlc3Npb24gc2VxdWVuY2UiCittc2dzdHIgIm5ldXphdvhlbuEgc2VrdmVuY2Ugdv1yYXr5IgorCisjOiBvcHRpb24uYzo1NDAzCittc2dpZCAidG9vIG1hbnkgaXRlbXMiCittc2dzdHIgInD47WxpuSBtbm9obyBwb2xvvmVrIgorCisjOiBvcHRpb24uYzo1NDA1Cittc2dpZCAidW5iYWxhbmNlZCBncm91cHMiCittc2dzdHIgIm5ldnl24b5lbukgc2t1cGlueSIKKworIzogb3B0aW9uLmM6NTYyMAorbXNnaWQgIkEgcHJldmlldyB3aW5kb3cgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIk9rbm8gbuFobGVkdSBqab4gZXhpc3R1amUiCisKKyM6IG9wdGlvbi5jOjU4ODEgb3B0aW9uLmM6NTkxMAorbXNnaWQgIid3aW5oZWlnaHQnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbmhlaWdodCciCittc2dzdHIgIiIKKyJob2Rub3RhIHZvbGJ5ICd3aW5oZWlnaHQnIG5lc23tIGL9dCBtZW657SBuZb4gaG9kbm90YSB2b2xieSAnd2lubWluaGVpZ2h0JyIKKworIzogb3B0aW9uLmM6NTkyNiBvcHRpb24uYzo1OTQ1Cittc2dpZCAiJ3dpbndpZHRoJyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW53aWR0aCciCittc2dzdHIgIiIKKyJob2Rub3RhIHZvbGJ5ICd3aW53aWR0aCcgbmVzbe0gYv10IG1lbrntIG5lviBob2Rub3RhIHZvbGJ5ICd3aW5taW53aWR0aCciCisKKyM6IG9wdGlvbi5jOjYwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCBhdCBsZWFzdCAlZCBsaW5lcyIKK21zZ3N0ciAibWluaW3hbG7tIHBvdPhlYm79IHBv6GV0IPjhZGv5OiAlZCIKKworIzogb3B0aW9uLmM6NjA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOZWVkIGF0IGxlYXN0ICVkIGNvbHVtbnMiCittc2dzdHIgIm1pbmlt4Wxu7SBwb3T4ZWJu/SBwb+hldCBzbG91cGP5OiAlZCIKKworIzogb3B0aW9uLmM6NjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU1OiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUzNTU6IE5lem7hbeEgdm9sYmE6ICVzIgorCisjOiBvcHRpb24uYzo2NTAwCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBjb2RlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gS/NkeSB0ZXJtaW7hbHUgLS0tIgorCisjOiBvcHRpb24uYzo2NTAyCittc2dpZCAiIgorIlxuIgorIi0tLSBHbG9iYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTmFzdGF2ZW7tIGdsb2LhbG7tY2ggdm9sZWIgLS0tIgorCisjOiBvcHRpb24uYzo2NTA0Cittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBOYXN0YXZlbu0gbG9r4Wxu7WNoIHZvbGViIC0tLSIKKworIzogb3B0aW9uLmM6NjUwNgorbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gVm9sYnkgLS0tIgorCisjOiBvcHRpb24uYzo3MTk2Cittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6IGdldF92YXJwIENIWUJBIgorCisjOiBvcHRpb24uYzo4MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTc6ICdsYW5nbWFwJzogTWF0Y2hpbmcgY2hhcmFjdGVyIG1pc3NpbmcgZm9yICVzIgorbXNnc3RyICJFMzU3OiAnbGFuZ21hcCc6IHBybyAlcyBjaHli7SB2eWhvdnVq7WPtIHpuYWsiCisKKyM6IG9wdGlvbi5jOjgxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1ODogJ2xhbmdtYXAnOiBFeHRyYSBjaGFyYWN0ZXJzIGFmdGVyIHNlbWljb2xvbjogJXMiCittc2dzdHIgIkUzNTg6ICdsYW5nbWFwJzogbmFkYnl0Zehu6SB6bmFreSBwbyBzdPhlZG7ta3U6ICVzIgorCisjOiBvc19hbWlnYS5jOjI3MworbXNnaWQgImNhbm5vdCBvcGVuICIKK21zZ3N0ciAibmVsemUgb3RldvjtdCAiCisKKyM6IG9zX2FtaWdhLmM6MzA3Cittc2dpZCAiVklNOiBDYW4ndCBvcGVuIHdpbmRvdyFcbiIKK21zZ3N0ciAiVklNOiBOZWx6ZSBvdGV2+O10IG5vdukgb2tubyFcbiIKKworIzogb3NfYW1pZ2EuYzozMjkKK21zZ2lkICJOZWVkIEFtaWdhZG9zIHZlcnNpb24gMi4wNCBvciBsYXRlclxuIgorbXNnc3RyICJWeb5hZHVqZSBBbWlnYWRvcyB2ZXJ6ZSAyLjA0IG5lYm8gdnm5ue1cbiIKKworIzogb3NfYW1pZ2EuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICJWeb5hZHVqZSAlcyB2ZXJ6ZSAlbGRcbiIKKworIzogb3NfYW1pZ2EuYzo0MDcKK21zZ2lkICJDYW5ub3Qgb3BlbiBOSUw6XG4iCittc2dzdHIgIk5lbHplIG90ZXb47XQgTklMOlxuIgorCisjOiBvc19hbWlnYS5jOjQxOAorbXNnaWQgIkNhbm5vdCBjcmVhdGUgIgorbXNnc3RyICIgTmVsemUgdnl0dm/4aXQgIgorCisjOiBvc19hbWlnYS5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJWaW0gZXhpdGluZyB3aXRoICVkXG4iCittc2dzdHIgIlZpbSBidWRlIHVrb27oZW4gJWRcbiIKKworIzogb3NfYW1pZ2EuYzo5MjgKK21zZ2lkICJjYW5ub3QgY2hhbmdlIGNvbnNvbGUgbW9kZSA/IVxuIgorbXNnc3RyICJOZWx6ZSB6bexuaXQgbfNkIGtvbnpvbGUgPyFcbiIKKworIzogb3NfYW1pZ2EuYzo5Mzggb3NfbWFjLmM6MTE2OCBvc19tc3dpbi5jOjYxOSBvc19yaXNjb3MuYzo3Mjggb3NfdW5peC5jOjI3MjYKK21zZ2lkICJFMzU5OiBTY3JlZW4gbW9kZSBzZXR0aW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkUzNTk6IE5hc3Rhdm924W7tIHJlvmltdSBvYnJhem92a3kgbmVu7SBwb2Rwb3JvduFubyIKKworIzogb3NfYW1pZ2EuYzo5OTQKK21zZ2lkICJtY2hfZ2V0X3NoZWxsc2l6ZTogbm90IGEgY29uc29sZT8/XG4iCittc2dzdHIgIm1jaF9nZXRfc2hlbGxzaXplOiBuZW5pIGtvbnpvbGU/P1xuIgorCisjLiBpZiBWaW0gb3BlbmVkIGEgd2luZG93OiBFeGVjdXRpbmcgYSBzaGVsbCBtYXkgY2F1c2UgY3Jhc2hlcworIzogb3NfYW1pZ2EuYzoxMTQyCittc2dpZCAiRTM2MDogQ2Fubm90IGV4ZWN1dGUgc2hlbGwgd2l0aCAtZiBvcHRpb24iCittc2dzdHIgIkUzNjA6IE5lbHplIHNwdXN0aXQgc2hlbGwgcyBwYXJhbWV0cmVtIC1mIgorCisjOiBvc19hbWlnYS5jOjExODMgb3NfYW1pZ2EuYzoxMjczCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICJOZWx6ZSBzcHVzdGl0ICIKKworIzogb3NfYW1pZ2EuYzoxMTg2IG9zX2FtaWdhLmM6MTI4MworbXNnaWQgInNoZWxsICIKK21zZ3N0ciAic2hlbGwgIgorCisjOiBvc19hbWlnYS5jOjEyMDYgb3NfYW1pZ2EuYzoxMzA4Cittc2dpZCAiIHJldHVybmVkXG4iCittc2dzdHIgIiBu4XZyYXRvduEgaG9kbm90YSBzaGVsbHVcbiIKKworIzogb3NfYW1pZ2EuYzoxNDQ4Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSBqZSBw+O1sabkgbWFs4S4iCisKKyM6IG9zX2FtaWdhLmM6MTQ1MgorbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAiSS9PIENIWUJBIgorCisjOiBvc19tc3dpbi5jOjUwMworbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICIuLi4oa3LhY2VubykiCisKKyM6IG9zX21zd2luLmM6NTk0Cittc2dpZCAiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIidjb2x1bW5zJyBuZW7tIDgwLCBuZWx6ZSBzcHVzdGl0IGV4dGVybu0gcPjta2F6IgorCisjOiBvc19tc3dpbi5jOjcwNiBvc191bml4LmM6NDk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY0OiBMaWJyYXJ5IGNhbGwgZmFpbGVkIGZvciBcIiVzKClcIiIKK21zZ3N0ciAiRTM2NDogVm9s4W7tIGtuaWhvdm7tIGZ1bmtjZSBcIiVzKClcIiBzZWxoYWxvIgorCisjOiBvc19tc3dpbi5jOjEzNDAKK21zZ2lkICJFMjM3OiBQcmludGVyIHNlbGVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkUyMzc6IE5lbHplIHp2b2xpdCB0aXNr4XJudSIKKworIzogb3NfbXN3aW4uYzoxMzg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvICVzIG9uICVzIgorbXNnc3RyICJkbyAlcyB2ICVzIgorCisjOiBvc19tc3dpbi5jOjE0NDkgb3NfbXN3aW4uYzoxNDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogQ2h5YmEgdGlza3U6ICVzIgorCisjOiBvc19tc3dpbi5jOjE0NjAKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJOZXpu4W39IgorCisjOiBvc19tc3dpbi5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAiVnl0abl07G5vICclcyciCisKKyM6IG9zX21zd2luLmM6MjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDogTmVw+O1wdXN0buEgam3pbm8gem5ha2926SBzYWR5IFwiJXNcIiB2ZSBmb250dSBcIiVzXCIiCisKKyM6IG9zX21zd2luLmM6MjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ1OiBJbGxlZ2FsIGNoYXIgJyVjJyBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ1OiBOZXD47XB1c3Ru/SB6bmFrICclYycgdmUgZm9udHUgXCIlc1wiIgorCisjOiBvc19yaXNjb3MuYzoxMjI3Cittc2dpZCAiRTM2NjogSW52YWxpZCAnb3NmaWxldHlwZScgb3B0aW9uIC0gdXNpbmcgVGV4dCIKK21zZ3N0ciAiRTM2NjogTmVwbGF0bv0gJ29zZmlsZXR5cGUnIC0gcG91vml0IFRleHQiCisKKyM6IG9zX3VuaXguYzo4MDAKK21zZ2lkICJWaW06IERvdWJsZSBzaWduYWwsIGV4aXRpbmdcbiIKK21zZ3N0ciAiVkltOiBkdm9qaXT9IHNpZ27hbCwga29u6O1tXG4iCisKKyM6IG9zX3VuaXguYzo4MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IFphY2h5Y2VuIHNtcnRlbG79IHNpZ27hbCAlc1xuIgorCisjOiBvc191bml4LmM6ODA5Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIgorbXNnc3RyICJWaW06IFphY2h5Y2VuIHNtcnRlbG79IHNpZ27hbFxuIgorCisjOiBvc191bml4LmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAiRG9iYSBvdGV27XLhbu0gWCBkaXNwbGVqZSAodiBtcyk6ICVsZCIKKworIzogb3NfdW5peC5jOjEwOTAKK21zZ2lkICIiCisiXG4iCisiVmltOiBHb3QgWCBlcnJvclxuIgorbXNnc3RyICIiCisiXG4iCisiVmltOiBjaHliYSBYMTFcbiIKKworIzogb3NfdW5peC5jOjExNTcKK21zZ2lkICJUZXN0aW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICJUZXN0IFggZGlzcGxlamUgc2UgbmV6ZGH4aWwiCisKKyM6IG9zX3VuaXguYzoxMzAxCittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRpbWVkIG91dCIKK21zZ3N0ciAiVnlwcrllbCDoYXMgcPhpIOhla+Fu7SBuYSBvdGV2+GVu7SBYIGRpc3BsZWplIgorCisjOiBvc191bml4LmM6Mjg5OSBvc191bml4LmM6MzQ4MworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCAiCittc2dzdHIgIiIKKyJcbiIKKyJuZWx6ZSBzcHVzdGl0IHNoZWxsICIKKworIzogb3NfdW5peC5jOjI5NDQKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgc2hcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5lbHplIHNwdXN0aXQgc2ggc2hlbGxcbiIKKworIzogb3NfdW5peC5jOjI5NDggb3NfdW5peC5jOjM0ODkKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisiIG7hdnJhdG924SBob2Rub3RhIHNoZWxsdSAiCisKKyM6IG9zX3VuaXguYzozMDgyCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5lbHplIHZ5dHZv+Gl0IHJvdXJ5XG4iCisKKyM6IG9zX3VuaXguYzozMDk3Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBmb3JrXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWb2zhbu0gZm9yayBzZWxoYWxvXG4iCisKKyM6IG9zX3VuaXguYzozNDk2Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgdGVybWluYXRlZFxuIgorbXNnc3RyICIiCisiXG4iCisiUPjta2F6IHVrb27oZW5cbiIKKworIzogb3NfdW5peC5jOjQ5OTMKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICJPdGV2+GVu7SBYIGRpc3BsZWplIHNlIG5lemRh+GlsbyIKKworIzogb3Nfdm1zX21tcy5jOjU5Cittc2dpZCAiQXQgbGluZSIKK21zZ3N0ciAiTmEg+OFka3UiCisKKyM6IG9zX3czMmV4ZS5jOjE2OQorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHZpbTMyLmRsbCEiCittc2dzdHIgIk5lbHplIG5h6O1zdCB2aW0zMi5kbGwhIgorCisjOiBvc193MzJleGUuYzoxNjkgb3NfdzMyZXhlLmM6MTc5Cittc2dpZCAiVklNIEVycm9yIgorbXNnc3RyICJDaHliYSBWSU11IgorCisjOiBvc193MzJleGUuYzoxNzkKK21zZ2lkICJDb3VsZCBub3QgZml4IHVwIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHRoZSBETEwhIgorbXNnc3RyICJOZWx6ZSBuYXN0YXZpdCB1a2F6YXRlbGUgZnVua2PtIG5hIERMTCIKKworIzogb3Nfd2luMTYuYzo1Nzggb3Nfd2luMzIuYzozMDIxCisjLCBjLWZvcm1hdAorbXNnaWQgInNoZWxsIHJldHVybmVkICVkIgorbXNnc3RyICJu4XZyYXRvduEgaG9kbm90YSBzaGVsbHUgJWQiCisKKyM6IG9zX3dpbjMyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCAlcyBldmVudFxuIgorbXNnc3RyICJWaW06IFphY2h5Y2VuICVzIHNpZ27hbFxuIgorCisjOiBvc193aW4zMi5jOjI0OTEKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAiemF2+O10IgorCisjOiBvc193aW4zMi5jOjI0OTMKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgImxvZ29mZiIKKworIzogb3Nfd2luMzIuYzoyNDk0Cittc2dpZCAic2h1dGRvd24iCittc2dzdHIgInNodXRkb3duIgorCisjOiBvc193aW4zMi5jOjI5NzUKK21zZ2lkICJFMzcxOiBDb21tYW5kIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTM3MTogUPjta2F6IG5lbu0gayBkaXNwb3ppY2kiCisKKyM6IG9zX3dpbjMyLmM6Mjk4OAorbXNnaWQgIiIKKyJWSU1SVU4uRVhFIG5vdCBmb3VuZCBpbiB5b3VyICRQQVRILlxuIgorIkV4dGVybmFsIGNvbW1hbmRzIHdpbGwgbm90IHBhdXNlIGFmdGVyIGNvbXBsZXRpb24uXG4iCisiU2VlICA6aGVscCB3aW4zMi12aW1ydW4gIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlZJTVJVTi5FWEUgc2UgbmV2eXNreXR1amUgdmUgVmG57SAkUEFUSC5cbiIKKyJFeHRlcm7tIHD47WthenkgbmVidWRvdSAiCisKKyM6IG9zX3dpbjMyLmM6Mjk5MQorbXNnaWQgIlZpbSBXYXJuaW5nIgorbXNnc3RyICJWYXJvduFu7SIKKworIzogcXVpY2tmaXguYzoyODEKK21zZ2lkICJFMzcyOiBUb28gbWFueSAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzI6IFD47WxpuSBtbm9obyAlJSVjIHZlIGZvcm3hdG92YWPtbSD4ZXTsemNpIgorCisjOiBxdWlja2ZpeC5jOjI5NAorbXNnaWQgIkUzNzM6IFVuZXhwZWN0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzczOiBOZW/oZWvhdmFu/SB2/XNreXQgJSUlYyB2ZSBmb3Jt4XRvdmFj7W0g+GV07HpjaSIKKworIzogcXVpY2tmaXguYzozNDgKK21zZ2lkICJFMzc0OiBNaXNzaW5nIF0gaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NDogVmUgZm9ybeF0b3ZhY+1tIPhldOx6Y2kgY2h5Yu0gXSIKKworIzogcXVpY2tmaXguYzozNjIKK21zZ2lkICJFMzc1OiBVbnN1cHBvcnRlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzU6ICUlJWMgTmVwb2Rwb3JvdmFu4SBmb3Jt4XRvduEgc3BlY2lmaWthY2UgdmUgZm9ybeF0b3ZhY+1tIPhldOx6Y2kiCisKKyM6IHF1aWNrZml4LmM6MzgwCittc2dpZCAiRTM3NjogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmcgcHJlZml4IgorbXNnc3RyICJFMzc2OiBOZXD47XB1c3Ru6SAlJSVjIHYgcHJlZml4dSBmb3Jt4XRvdmFj7WhvIPhldOx6Y2UiCisKKyM6IHF1aWNrZml4LmM6Mzg4Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6IE5lcPjtcHVzdG7pICUlJWMgdmUgZm9ybeF0b3ZhY+1tIPhldOx6Y2kiCisKKyM6IHF1aWNrZml4LmM6NDE0Cittc2dpZCAiRTM3ODogJ2Vycm9yZm9ybWF0JyBjb250YWlucyBubyBwYXR0ZXJuIgorbXNnc3RyICJFMzc4OiAnZXJyb3Jmb3JtYXQnIG5lb2JzYWh1amUgvuFkbv0gdnpvcmVrIgorCisjOiBxdWlja2ZpeC5jOjUyMAorbXNnaWQgIkUzNzk6IE1pc3Npbmcgb3IgZW1wdHkgZGlyZWN0b3J5IG5hbWUiCittc2dzdHIgIkUzNzk6IENoeWLsau1j7SBuZWJvIHBy4Xpkbv0gbuF6ZXYgYWRyZXPh+GUiCisKKyM6IHF1aWNrZml4LmM6OTMxCittc2dpZCAiTm8gbW9yZSBpdGVtcyIKK21zZ3N0ciAiruFkbukgZGFsue0gcG9sb75reSIKKworIzogcXVpY2tmaXguYzoxMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiglZCBvZiAlZCklcyVzOiAiCittc2dzdHIgIiglZC8lZCklcyVzOiAiCisKKyM6IHF1aWNrZml4LmM6MTE1NAorbXNnaWQgIiAobGluZSBkZWxldGVkKSIKK21zZ3N0ciAiICj44WRlayBzbWF64W4pIgorCisjOiBxdWlja2ZpeC5jOjEzNjAKK21zZ2lkICJFMzgwOiBBdCBib3R0b20gb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODA6IEtvbmVjIHF1aWNrZml4IHNlem5hbXUiCisKKyM6IHF1aWNrZml4LmM6MTM2OQorbXNnaWQgIkUzODE6IEF0IHRvcCBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MTogWmHo4XRlayBxdWlja2ZpeCBzZXpuYW11IgorCisjOiBxdWlja2ZpeC5jOjEzODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgbGlzdCAlZCBvZiAlZDsgJWQgZXJyb3JzIgorbXNnc3RyICJzZXpuYW0gY2h5YiAlZCB6ICVkOyBwb+hldCBjaHliOiAlZCIKKworIzogcXVpY2tmaXguYzoxODQyCittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4MjogTmVsemUgdWxvvml0LCBqZSBuYXN0YXZlbmEgdm9sYmEgJ2J1ZnR5cGUnIgorCisjOiByZWdleHAuYzo4MDEKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiBWem9yIGplIHD47WxpuSBkbG91aP0iCisKKyM6IHJlZ2V4cC5jOjEzMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOiBOZXN0ZWQgJXMqIgorbXNnc3RyICJFNjE6ICVzKiIKKworIzogcmVnZXhwLmM6MTMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI6IE5lc3RlZCAlcyVjIgorbXNnc3RyICJFNjI6ICVzJWMiCisKKyM6IHJlZ2V4cC5jOjE0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY0OiAlcyVjIGZvbGxvd3Mgbm90aGluZyIKK21zZ3N0ciAiRTY0OiAlcyVjIG5pYyBuZW7tIgorCisjOiByZWdleHAuYzoyNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICJDaHliYSBzeW50YXhlIHYgJXN7Li4ufSIKKworIzogcmVnZXhwLmM6MjcxNgorbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiBaYWNoeWNlbm8gcPhldGXoZW7tIHrhc29ibu1rdTogcPjtbGm5IHNsb75pdP0gcmVndWzhcm7tIHb9cmF6PyIKKworIzogcmVnZXhwLmM6Mjg1MQorbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2MzogdnpvcmVrIHpw+XNvYmlsIHD4ZXRl6GVu7SB64XNvYm7ta3UiCisKKyM6IHJlZ2V4cC5jOjMwODcKK21zZ2lkICJFeHRlcm5hbCBzdWJtYXRjaGVzOlxuIgorbXNnc3RyICJWbuxque0gcG9k+GF6ZW7pIHNob2R5OlxuIgorCisjOiBzY3JlZW4uYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIistLSUzbGQgbGluZXMgZm9sZGVkICIKK21zZ3N0ciAicG/oZXQg+OFka/kgdiB64Wh5YnU6ICUzbGQiCisKKyM6IHNjcmVlbi5jOjc0MjYKK21zZ2lkICIgVlJFUExBQ0UiCittc2dzdHIgIiBWUkVQTEFDRSIKKworIzogc2NyZWVuLmM6NzQzMAorbXNnaWQgIiBSRVBMQUNFIgorbXNnc3RyICIgUkVQTEFDRSIKKworIzogc2NyZWVuLmM6NzQzNQorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIgUkVWRVJTRSIKKworIzogc2NyZWVuLmM6NzQzNworbXNnaWQgIiBJTlNFUlQiCittc2dzdHIgIiBJTlNFUlQiCisKKyM6IHNjcmVlbi5jOjc0NDAKK21zZ2lkICIgKGluc2VydCkiCittc2dzdHIgIiAoaW5zZXJ0KSIKKworIzogc2NyZWVuLmM6NzQ0MgorbXNnaWQgIiAocmVwbGFjZSkiCittc2dzdHIgIiAocmVwbGFjZSkiCisKKyM6IHNjcmVlbi5jOjc0NDQKK21zZ2lkICIgKHZyZXBsYWNlKSIKK21zZ3N0ciAiICh2cmVwbGFjZSkiCisKKyM6IHNjcmVlbi5jOjc0NDcKK21zZ2lkICIgSGVicmV3IgorbXNnc3RyICIgaGVicmVqc2v9IgorCisjOiBzY3JlZW4uYzo3NDU1Cittc2dpZCAiIChsYW5nKSIKK21zZ3N0ciAiIChsYW5nKSIKKworIzogc2NyZWVuLmM6NzQ1OAorbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKHBhc3RlKSIKKworIzogc2NyZWVuLmM6NzQ2NAorbXNnaWQgIiBTRUxFQ1QiCittc2dzdHIgIiBTSE9EWSIKKworIzogc2NyZWVuLmM6NzQ2NgorbXNnaWQgIiBWSVNVQUwiCittc2dzdHIgIiBWSVpVwUxOzSIKKworIzogc2NyZWVuLmM6NzQ2OAorbXNnaWQgIiBCTE9DSyIKK21zZ3N0ciAiIEJMT0siCisKKyM6IHNjcmVlbi5jOjc0NzAKK21zZ2lkICIgTElORSIKK21zZ3N0ciAiINjBREVLIgorCisjOiBzY3JlZW4uYzo3NDgzIHNjcmVlbi5jOjc1MzcKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgIm5haHLhduFtIgorCisjOiBzZWFyY2guYzozNgorbXNnaWQgInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIKK21zZ3N0ciAiaGxlZOFu7SBkb3PhaGxvIHph6OF0a3UsIHBva3Jh6G924W7tIG9kIGtvbmNlIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIKK21zZ3N0ciAiaGxlZOFu7SBkb3PhaGxvIGtvbmNlLCBwb2tyYehvduFu7SBvZCB6YejhdGt1IgorCisjOiBzZWFyY2guYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4MzogSW52YWxpZCBzZWFyY2ggc3RyaW5nOiAlcyIKK21zZ3N0ciAiRTM4MzogTmVw+O1wdXN0bv0gaGxlZGFu/SD4ZXTsemVjOiAlcyIKKworIzogc2VhcmNoLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODQ6IHNlYXJjaCBoaXQgVE9QIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NDogaGxlZGFu/SBkb3PhaGxvIHph6OF0a3UgYmV6IG5hbGV6ZW7tICVzIgorCisjOiBzZWFyY2guYzo3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NTogc2VhcmNoIGhpdCBCT1RUT00gd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg1OiBobGVkYW79IGRvc+FobG8ga29uY2UgYmV6IG5hbGV6ZW7tICVzIgorCisjOiBzZWFyY2guYzoxMTA3Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiBQbyAnOycgb+hla+F24W0gJz8nIG5lYm8gJy8nIgorCisjOiBzZWFyY2guYzozNDc2Cittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAoduhldG7sIGppviB2eXBzYW79Y2ggc2hvZCkiCisKKyMuIGN1cnNvciBhdCBzdGF0dXMgbGluZQorIzogc2VhcmNoLmM6MzQ5NgorbXNnaWQgIi0tLSBJbmNsdWRlZCBmaWxlcyAiCittc2dzdHIgIi0tLSBWbG++ZW7pIHNvdWJvcnkiCisKKyM6IHNlYXJjaC5jOjM0OTgKK21zZ2lkICJub3QgZm91bmQgIgorbXNnc3RyICIgbmVuYWxlemVueSIKKworIzogc2VhcmNoLmM6MzQ5OQorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgInYgY2VzdOwgLS0tXG4iCisKKyM6IHNlYXJjaC5jOjM1MzgKK21zZ2lkICIgIChBbHJlYWR5IGxpc3RlZCkiCittc2dzdHIgIiAgKEppviB2eXBz4W5vKSIKKworIzogc2VhcmNoLmM6MzU0MAorbXNnaWQgIiAgTk9UIEZPVU5EIgorbXNnc3RyICIgTkVOQUxFWkVOWSIKKworIzogc2VhcmNoLmM6MzU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBpbmNsdWRlZCBmaWxlOiAlcyIKK21zZ3N0ciAiUHJvaGxlZOF24W0gdmxvvmVu6SBzb3Vib3J5OiAlcyIKKworIzogc2VhcmNoLmM6MzgxMAorbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4NzogU2hvZGEgamUgbmEgYWt0deFsbu1tIPjhZGt1IgorCisjOiBzZWFyY2guYzozOTUwCittc2dpZCAiQWxsIGluY2x1ZGVkIGZpbGVzIHdlcmUgZm91bmQiCittc2dzdHIgIla5ZWNobnkgdmxvvmVu6SBzb3Vib3J5IGJ5bHkgbmFsZXplbnkiCisKKyM6IHNlYXJjaC5jOjM5NTIKK21zZ2lkICJObyBpbmNsdWRlZCBmaWxlcyIKK21zZ3N0ciAiruFkbukgdmxvvmVu6SBzb3Vib3J5IgorCisjOiBzZWFyY2guYzozOTY4Cittc2dpZCAiRTM4ODogQ291bGRuJ3QgZmluZCBkZWZpbml0aW9uIgorbXNnc3RyICJFMzg4OiBOZWx6ZSBuYWzpenQgZGVmaW5pY2kiCisKKyM6IHNlYXJjaC5jOjM5NzAKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IE5lbHplIG5hbOl6dCB2em9yZWsiCisKKyM6IHN5bnRheC5jOjI5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MDogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUzOTA6IG5lcPjtcHVzdG79IGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6MzE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkxOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MTogU3ludGFrdGlja+Egc2VzdGF2YSAlcyBuZWV4aXN0dWplIgorCisjOiBzeW50YXguYzozMzMyCittc2dpZCAiTm8gU3ludGF4IGl0ZW1zIGRlZmluZWQgZm9yIHRoaXMgYnVmZmVyIgorbXNnc3RyICJQcm8gdGVudG8gYnVmZmVyIG5lanNvdSBkZWZpbm924W55IL7hZG7pIHD4ZWRt7HR5IHN5bnRheGUiCisKKyM6IHN5bnRheC5jOjMzNDAKK21zZ2lkICJzeW5jaW5nIG9uIEMtc3R5bGUgY29tbWVudHMiCittc2dzdHIgInN5bmNocm9uaXp1amkga29tZW504fhlIHYgQyBzdHlsdSIKKworIzogc3ludGF4LmM6MzM0OAorbXNnaWQgIm5vIHN5bmNpbmciCittc2dzdHIgIr7hZG7hIHN5bmNocm9uaXphY2UiCisKKyM6IHN5bnRheC5jOjMzNTEKK21zZ2lkICJzeW5jaW5nIHN0YXJ0cyAiCittc2dzdHIgInN5bmNocm9uaXphY2UgemHo7W7hICIKKworIzogc3ludGF4LmM6MzM1MyBzeW50YXguYzozNDIyCittc2dpZCAiIGxpbmVzIGJlZm9yZSB0b3AgbGluZSIKK21zZ3N0ciAiIPjhZGv5IHD4ZWQgemHo4XRrZW0iCisKKyM6IHN5bnRheC5jOjMzNTcKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBQb2xvvmt5IHN5bmNocm9uaXphY2Ugc3ludGF4ZSAtLS0iCisKKyM6IHN5bnRheC5jOjMzNjAKK21zZ2lkICIiCisiXG4iCisic3luY2luZyBvbiBpdGVtcyIKK21zZ3N0ciAiIgorIlxuIgorInN5bmNocm9uaXp1amkgcPhlZG3sdHkiCisKKyM6IHN5bnRheC5jOjMzNjUKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gUPhlZG3sdHkgc3ludGF4ZSAtLS0iCisKKyM6IHN5bnRheC5jOjMzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MjogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTI6IFN5bnRha3RpY2vhIHNlc3RhdmEgJXMgbmVleGlzdHVqZSIKKworIzogc3ludGF4LmM6MzQxMgorbXNnaWQgIm1pbmltYWwgIgorbXNnc3RyICJtaW5pbeFsbu0gIgorCisjOiBzeW50YXguYzozNDE5Cittc2dpZCAibWF4aW1hbCAiCittc2dzdHIgIm1heGlt4Wxu7SAiCisKKyM6IHN5bnRheC5jOjQwNDcKK21zZ2lkICJFMzkzOiBncm91cFt0XWhlcmUgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTM6IGdyb3VwW3RdaGVyZSBuZXNt7SBi/XQgbmEgdG9tdG8gbe1zdOwiCisKKyM6IHN5bnRheC5jOjQwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiBQcm8gJXMgY2h5Yu0gcG9sb75rYSByZWdpb251IgorCisjOiBzeW50YXguYzo0MDk5Cittc2dpZCAiRTM5NTogY29udGFpbnMgYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTU6IG9ic2FodWplIGFyZ3VtZW50eSwga3RlcukgemRlIG5lanNvdSBwb3ZvbGVueSIKKworIzogc3ludGF4LmM6NDExMAorbXNnaWQgIkUzOTY6IGNvbnRhaW5lZGluIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk2OiBvYnNhaHVqZSBhcmd1bWVudHksIGt0ZXLpIHpkZSBuZWpzb3UgcG92b2xlbnkiCisKKyM6IHN5bnRheC5jOjQxODgKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5NzogVnm+YWRvduFuIG7hemV2IHNvdWJvcnUiCisKKyM6IHN5bnRheC5jOjQ1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiBDaHli7SAnPSc6ICVzIgorCisjOiBzeW50YXguYzo0NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBzeW50YXggcmVnaW9uICVzIgorbXNnc3RyICJFMzk5OiBQ+O1sabkgbeFsbyBhcmd1bWVudPk6IG9ibGFzdCBzeW50YXhlICVzIgorCisjOiBzeW50YXguYzo1MDExCittc2dpZCAiRTQwMDogTm8gY2x1c3RlciBzcGVjaWZpZWQiCittc2dzdHIgIkU0MDA6IE5lYnlsYSB6YWThbmEgvuFkbuEgc2VzdGF2YSIKKworIzogc3ludGF4LmM6NTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDAxOiBQYXR0ZXJuIGRlbGltaXRlciBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDAxOiBPZGTsbG92Yeggdnpvcmt1ICVzIG5lbmFsZXplbiIKKworIzogc3ludGF4LmM6NTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDAyOiBHYXJiYWdlIGFmdGVyIHBhdHRlcm46ICVzIgorbXNnc3RyICJFNDAyOiBDaHliYSB6YSB2em9ya2VtICVzIgorCisjOiBzeW50YXguYzo1MjA1Cittc2dpZCAiRTQwMzogc3ludGF4IHN5bmM6IGxpbmUgY29udGludWF0aW9ucyBwYXR0ZXJuIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTQwMzogc3luY2hyb25pemFjZSBzeW50YXhlOiB2em9yZWsgcG9rcmHob3bhbu0g+OFka/kgemFk4W4gZHZha3LhdCIKKworIzogc3ludGF4LmM6NTI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA0OiBJbGxlZ2FsIGFyZ3VtZW50czogJXMiCittc2dzdHIgIkU0MDQ6IG5lcPjtcHVzdG79IGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6NTMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiBDaHli7SByb3Zu7XRrbzogJXMiCisKKyM6IHN5bnRheC5jOjUzMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNjogRW1wdHkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDA2OiBQcuF6ZG79IGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6NTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA3OiAlcyBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNDA3OiAlcyB6ZGUgbmVu7SBwb3ZvbGVubyIKKworIzogc3ludGF4LmM6NTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA4OiAlcyBtdXN0IGJlIGZpcnN0IGluIGNvbnRhaW5zIGxpc3QiCittc2dzdHIgIkU0MDg6ICVzIG11c+0gYv10IHBydm7tIHYgJ2NvbnRhaW5zJyBzZXpuYW11IgorCisjOiBzeW50YXguYzo1NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDk6IFVua25vd24gZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkU0MDk6IE5lem7hbeEgbuF6ZXYgc2t1cGlueTogJXMiCisKKyM6IHN5bnRheC5jOjU2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiBjaHlibv0gcG9k+GF6ZW79IHD47WtheiA6c3ludGF4IDogJXMgIgorCisjOiBzeW50YXguYzo2MDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTE6IGhpZ2hsaWdodCBncm91cCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDExOiBza3VwaW5hIHp2/XJhem7sbu0gJXMgbmVieWxhIG5hbGV6ZW5hIgorCisjOiBzeW50YXguYzo2MDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTI6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEyOiBQ+O1sabkgbeFsbyBhcmd1bWVudPk6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMzogVG9vIG1hbnkgYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEzOiBQ+O1sabkgbW5vaG8gYXJndW1lbnT5OiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MDc1Cittc2dpZCAiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIgorbXNnc3RyICJFNDE0OiBza3VwaW5hIGplIG5hc3RhdmVuYSwgb2RrYXogbmEgenb9cmF68m92YWPtIHNrdXBpbnUgaWdub3JvduFuIgorCisjOiBzeW50YXguYzo2MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTU6IHVuZXhwZWN0ZWQgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTU6IG5l6GVrYW7pIHJvdm7tdGtvIDogJXMiCisKKyM6IHN5bnRheC5jOjYyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNjogbWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNjogY2h5Ym7pIHJvdm7tdGtvOiAlcyIKKworIzogc3ludGF4LmM6NjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE3OiBtaXNzaW5nIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQxNzogY2h5Yu0gYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzo2Mjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTg6IElsbGVnYWwgdmFsdWU6ICVzIgorbXNnc3RyICJFNDE4OiBuZXD47XB1c3Ru4SBob2Rub3RhOiAlcyIKKworIzogc3ludGF4LmM6NjQxOAorbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6IGJhcnZhIHBvcPhlZO0gbmVu7SB6buFt4SIKKworIzogc3ludGF4LmM6NjQyOQorbXNnaWQgIkU0MjA6IEJHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MjA6IGJhcnZhIHBvcPhlZO0gbmVu7SB6buFt4SIKKworIzogc3ludGF4LmM6NjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6IG7hemV2IOhpIOjtc2xvIGJhcnZ5ICVzIG5lYnlsbyByb3pwb3pu4W5vIgorCisjOiBzeW50YXguYzo2Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjI6IHRlcm1pbmFsIGNvZGUgdG9vIGxvbmc6ICVzIgorbXNnc3RyICJFNDIyOiB0ZXJtaW7hbG92/SBr82QgJXMgamUgcPjtbGm5IGRsb3Vo/SIKKworIzogc3ludGF4LmM6NjczNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzogbmVw+O1wdXN0bv0gYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzo3MjY0Cittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiIgorIkU0MjQ6IEplIHBvdb7tduFubyBw+O1sabkgdmVsa+kgbW5vvnN0du0gb2Rsablu/WNoIHp2/XJhevJvdmFj7WNoIGF0cmlidXT5IgorCisjOiB0YWcuYzo5MAorbXNnaWQgImF0IGJvdHRvbSBvZiB0YWcgc3RhY2siCittc2dzdHIgImtvbmVjIHNlem5hbXUgdGFn+SIKKworIzogdGFnLmM6OTEKK21zZ2lkICJhdCB0b3Agb2YgdGFnIHN0YWNrIgorbXNnc3RyICJ6YejhdGVrIHNlem5hbXUgdGFn+SIKKworIzogdGFnLmM6MzkyCittc2dpZCAiRTQyNTogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0MjU6IFD4ZWQgcHJ2bu0gdnlob3Z1au1j7SB0YWcgbmVsemUgcPhlc2tv6Gl0IgorCisjOiB0YWcuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6IHRhZyAlcyBuZW5hbGV6ZW4iCisKKyM6IHRhZy5jOjU0NQorbXNnaWQgIiAgIyBwcmkga2luZCB0YWciCittc2dzdHIgIiAgIyBwcmkgdHlwIHRhZyIKKworIzogdGFnLmM6NTQ4Cittc2dpZCAiZmlsZVxuIgorbXNnc3RyICJzb3Vib3JcbiIKKworIy4KKyMuICogQXNrIHRvIHNlbGVjdCBhIHRhZyBmcm9tIHRoZSBsaXN0LgorIy4gKiBXaGVuIHVzaW5nICI6c2lsZW50IiBhc3N1bWUgdGhhdCA8Q1I+IHdhcyBlbnRlcmVkLgorIy4KKyM6IHRhZy5jOjcwNgorbXNnaWQgIkVudGVyIG5yIG9mIGNob2ljZSAoPENSPiB0byBhYm9ydCk6ICIKK21zZ3N0ciAiWmFkZWp0ZSDo7XNsbyAoPENSPiBwcm8gdWtvbuhlbu0pOiAiCisKKyM6IHRhZy5jOjc0NgorbXNnaWQgIkU0Mjc6IFRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNzogVnlob3Z1amUgcG91emUgamVkZW4gdGFnIgorCisjOiB0YWcuYzo3NDgKK21zZ2lkICJFNDI4OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI4OiBaYSBwb3NsZWRu7SB2eWhvdnVq7WPtIHRhZyBuZWx6ZSBw+GVza2/oaXQiCisKKyM6IHRhZy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiU291Ym9yIFwiJXNcIiBuZWV4aXN0dWplIgorCisjLiBHaXZlIGFuIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiBtYXRjaGluZyB0YWdzCisjOiB0YWcuYzo3ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICVkIG9mICVkJXMiCittc2dzdHIgInRhZyAlZCB6IGNlbGtvdulobyBwb+h0dSAlZCVzIgorCisjOiB0YWcuYzo3ODMKK21zZ2lkICIgb3IgbW9yZSIKK21zZ3N0ciAiIG5lYm8gdu1jZSIKKworIzogdGFnLmM6Nzg1Cittc2dpZCAiICBVc2luZyB0YWcgd2l0aCBkaWZmZXJlbnQgY2FzZSEiCittc2dzdHIgIiAgUG91vu124W0gdGFnIHMgcO1zbWVueSBqaW7pIHZlbGlrb3N0aSEiCisKKyM6IHRhZy5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTQyOTogXCIlc1wiIG5lZXhpc3R1amUiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6ODk3Cittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyBDzUwgdGFnICAgICAgICBTVEFSVCD44WRlayAgdiBzb3Vib3J1L3RleHR1IgorCisjOiB0YWcuYzoxMTQ0Cittc2dpZCAiTGluZWFyIHRhZyBzZWFyY2giCittc2dzdHIgIkxpbmXhcm7tIGhsZWThbu0gdGFndSIKKworIzogdGFnLmM6MTE0NgorbXNnaWQgIkJpbmFyeSB0YWcgc2VhcmNoIgorbXNnc3RyICJCaW7hcm7tIGhsZWThbu0gdGFndSIKKworIzogdGFnLmM6MTE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICJQcm9obGVk4XbhbSBzb3Vib3IgdGFn+SAlcyIKKworIzogdGFnLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMwOiBUYWcgZmlsZSBwYXRoIHRydW5jYXRlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRTQzMDogU291Ym9yIHRhZ/kgJXMgYnlsIG/4ZXrhblxuIgorCisjOiB0YWcuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzE6IEZvcm1hdCBlcnJvciBpbiB0YWdzIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDMxOiBDaHliYSBmb3Jt4XR1IHYgc291Ym9ydSB0YWf5IFwiJXNcIiIKKworIzogdGFnLmM6MTg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJCZWZvcmUgYnl0ZSAlbGQiCittc2dzdHIgIlD4ZWQgYmFqdGVtICVsZCIKKworIzogdGFnLmM6MTg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMyOiBUYWdzIGZpbGUgbm90IHNvcnRlZDogJXMiCittc2dzdHIgIkU0MzI6IE9ic2FoIHNvdWJvciB0YWf5ICVzIG5lbu0gc2X4YXplbiIKKworIy4gbmV2ZXIgb3BlbmVkIGFueSB0YWdzIGZpbGUKKyM6IHRhZy5jOjE5MTEKK21zZ2lkICJFNDMzOiBObyB0YWdzIGZpbGUiCittc2dzdHIgIkU0MzM6IK7hZG79IHNvdWJvciB0YWf5IgorCisjOiB0YWcuYzoyNTgzCittc2dpZCAiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIKK21zZ3N0ciAiRTQzNDogTmVsemUgbmFq7XQgdnpvcmVrIHRhZ/kiCisKKyM6IHRhZy5jOjI1OTQKK21zZ2lkICJFNDM1OiBDb3VsZG4ndCBmaW5kIHRhZywganVzdCBndWVzc2luZyEiCittc2dzdHIgIkU0MzU6IFRhZyBuZWx6ZSBuYWzpenQsIHBvdXplIGjhZOFtISIKKworIzogdGVybS5jOjE3MjMKK21zZ2lkICInIG5vdCBrbm93bi4gQXZhaWxhYmxlIGJ1aWx0aW4gdGVybWluYWxzIGFyZToiCittc2dzdHIgIicgbmVu7SB6buFtLiBEb3N0dXBu6SB2ZXN0YXbsbukgdGVybWlu4Wx5OiIKKworIzogdGVybS5jOjE3NDcKK21zZ2lkICJkZWZhdWx0aW5nIHRvICciCittc2dzdHIgImltcGxpY2l0bu0gdGVybWlu4WwgJyIKKworIzogdGVybS5jOjIxMDAKK21zZ2lkICJDYW5ub3Qgb3BlbiB0ZXJtY2FwIGZpbGUiCittc2dzdHIgIk5lbHplIG90ZXb47XQgdGVybWNhcCIKKworIzogdGVybS5jOjIxMDMKK21zZ2lkICJUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWluZm8iCittc2dzdHIgIlRlcm1pbmZvIG5lb2JzYWh1amUgcG9sb75rdSBwcm8gdGVudG8gdGVybWlu4WwiCisKKyM6IHRlcm0uYzoyMTA1Cittc2dpZCAiVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIlRlcm1jYXAgbmVvYnNhaHVqZSBwb2xvvmt1IHBybyB0ZW50byB0ZXJtaW7hbCIKKworIzogdGVybS5jOjIyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzNjogTm8gXCIlc1wiIGVudHJ5IGluIHRlcm1jYXAiCittc2dzdHIgIkU0MzY6IFRlcm1jYXAgbmVvYnNhaHVqZSBwb2xvvmt1IHBybyBcIiVzXCIiCisKKyM6IHRlcm0uYzoyNzM4Cittc2dpZCAiRTQzNzogdGVybWluYWwgY2FwYWJpbGl0eSBcImNtXCIgcmVxdWlyZWQiCittc2dzdHIgIkU0Mzc6IFRlcm1pbuFsIG11c+0gbe10IHNjaG9wbm9zdCBcImNtXCIiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGVybS5jOjQ4NzgKK21zZ2lkICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIGtleXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEts4XZlc3kgdGVybWlu4Wx1IC0tLSIKKworIzogdWkuYzoyNDAKK21zZ2lkICJuZXcgc2hlbGwgc3RhcnRlZFxuIgorbXNnc3RyICJzcHW5dOxuIG5vdv0gc2hlbGxcbiIKKworIzogdWkuYzoxNzA1Cittc2dpZCAiVmltOiBFcnJvciByZWFkaW5nIGlucHV0LCBleGl0aW5nLi4uXG4iCittc2dzdHIgIlZpbTogY2h5YmEgcPhpIOh0ZW7tIHZzdHVwdSwga29u6O1tLi4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6MzUxCittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICJvZHN0cmFu7G7tIHpt7G4gbmVu7SBtb75u6TsgY2hjZXRlIHD4ZXN0byBwb2tyYehvdmF0IgorCisjOiB1bmRvLmM6NTA2Cittc2dpZCAiRTQzODogdV91bmRvOiBsaW5lIG51bWJlcnMgd3JvbmciCittc2dzdHIgIkU0Mzg6IHVfdW5kbzog6O1zbGEg+OFka/kganNvdSBjaHlibuEiCisKKyM6IHVuZG8uYzo2NzUKK21zZ2lkICIxIGNoYW5nZSIKK21zZ3N0ciAicG/oZXQgem3sbjogMSIKKworIzogdW5kby5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhbmdlcyIKK21zZ3N0ciAicG/oZXQgem3sbjogJWxkIgorCisjOiB1bmRvLmM6NzIxCittc2dpZCAiRTQzOTogdW5kbyBsaXN0IGNvcnJ1cHQiCittc2dzdHIgIkU0Mzk6IHrhem5hbSBvIHpt7G7hY2ggcG+5a296ZW4iCisKKyM6IHVuZG8uYzo3NTEKK21zZ2lkICJFNDQwOiB1bmRvIGxpbmUgbWlzc2luZyIKK21zZ3N0ciAiRTQ0MDogY2h5Yu0gdW5kbyD44WRlayIKKworIy4gT25seSBNUyBWQyA0LjEgYW5kIGVhcmxpZXIgY2FuIGRvIFdpbjMycworIzogdmVyc2lvbi5jOjY1NQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2LzMyIGJpdG924SBHVUkgdmVyemUgcHJvIE1TIFdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzo2NTcKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMiBiaXRvduEgR1VJIHZlcnplIHBybyBNUyBXaW5kb3dzIgorCisjOiB2ZXJzaW9uLmM6NjYwCittc2dpZCAiIGluIFdpbjMycyBtb2RlIgorbXNnc3RyICIgdmUgV2luMzJzIHJlvmltdSIKKworIzogdmVyc2lvbi5jOjY2MgorbXNnaWQgIiB3aXRoIE9MRSBzdXBwb3J0IgorbXNnc3RyICIgcyBPTEUgcG9kcG9yb3UiCisKKyM6IHZlcnNpb24uYzo2NjUKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgY29uc29sZSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzIgYml0b3bhIHZlcnplIHBybyBNUyBXaW5kb3dzIGtvbnpvbHUiCisKKyM6IHZlcnNpb24uYzo2NjkKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNiBiaXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2IGJpdG924SB2ZXJ6ZSBwcm8gTVMgV2luZG93cyIKKworIzogdmVyc2lvbi5jOjY3MworbXNnaWQgIiIKKyJcbiIKKyIzMiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMiBiaXRvduEgdmVyemUgcHJvIE1TIFdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzo2NzUKK21zZ2lkICIiCisiXG4iCisiMTYgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMTYgYml0b3bhIE1TLURPUyB2ZXJ6ZSIKKworIzogdmVyc2lvbi5jOjY4MQorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkgdmVyemUiCisKKyM6IHZlcnNpb24uYzo2ODMKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgWCB2ZXJ6ZSIKKworIzogdmVyc2lvbi5jOjY4NgorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgdmVyemUiCisKKyM6IHZlcnNpb24uYzo2OTEKK21zZ2lkICIiCisiXG4iCisiUklTQyBPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiUklTQyBPUyB2ZXJ6ZSIKKworIzogdmVyc2lvbi5jOjcwMQorbXNnaWQgIiIKKyJcbiIKKyJJbmNsdWRlZCBwYXRjaGVzOiAiCittc2dzdHIgIiIKKyJcbiIKKyJQb3W+aXTpIHrhcGxhdHk6ICIKKworIzogdmVyc2lvbi5jOjcyOAorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyJw+GVsb75pbCAiCisKKyM6IHZlcnNpb24uYzo3MzEKK21zZ2lkICJieSAiCittc2dzdHIgIiAiCisKKyM6IHZlcnNpb24uYzo3NDMKK21zZ2lkICIiCisiXG4iCisiSHVnZSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIm1heGlt4Wxu7SB2ZXJ6ZSIKKworIzogdmVyc2lvbi5jOjc0NgorbXNnaWQgIiIKKyJcbiIKKyJCaWcgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJ2ZWxr4SB2ZXJ6ZSAiCisKKyM6IHZlcnNpb24uYzo3NDkKK21zZ2lkICIiCisiXG4iCisiTm9ybWFsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisibm9ybeFsbu0gdmVyemUiCisKKyM6IHZlcnNpb24uYzo3NTIKK21zZ2lkICIiCisiXG4iCisiU21hbGwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJtYWzhIHZlcnplICIKKworIzogdmVyc2lvbi5jOjc1NAorbXNnaWQgIiIKKyJcbiIKKyJUaW55IHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisibWluaW3hbG7tIHZlcnplIgorCisjOiB2ZXJzaW9uLmM6NzYwCittc2dpZCAid2l0aG91dCBHVUkuIgorbXNnc3RyICJiZXogZ3JhZmlja+lobyByb3pocmFu7SIKKworIzogdmVyc2lvbi5jOjc2NAorbXNnaWQgIndpdGggR1RLLUdOT01FIEdVSS4iCittc2dzdHIgInMgcm96aHJhbu1tIEdUSy1HTk9NRSIKKworIzogdmVyc2lvbi5jOjc2NgorbXNnaWQgIndpdGggR1RLIEdVSS4iCittc2dzdHIgInMgcm96aHJhbu1tIEdUSyIKKworIzogdmVyc2lvbi5jOjc3MAorbXNnaWQgIndpdGggWDExLU1vdGlmIEdVSS4iCittc2dzdHIgInMgcm96aHJhbu1tIFgxMS1Nb3RpZiIKKworIzogdmVyc2lvbi5jOjc3MworbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICJTIHJvemhyYW7tbSBYMTEtQXRoZW5hIgorCisjOiB2ZXJzaW9uLmM6Nzc2Cittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgInMgcm96aHJhbu1tIEJlT1MiCisKKyM6IHZlcnNpb24uYzo3NzkKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBQaG90b24iCisKKyM6IHZlcnNpb24uYzo3ODIKK21zZ2lkICJ3aXRoIEdVSS4iCittc2dzdHIgInMgZ3JhZmlja/1tIHJvemhyYW7tbSIKKworIzogdmVyc2lvbi5jOjc4NQorbXNnaWQgIndpdGggQ2FyYm9uIEdVSS4iCittc2dzdHIgInMgZ3JhZmlja/1tIHJvemhyYW7tbSBDYXJib24iCisKKyM6IHZlcnNpb24uYzo3ODgKK21zZ2lkICJ3aXRoIENvY29hIEdVSS4iCittc2dzdHIgInMgZ3JhZmlja/1tIHJvemhyYW7tbSBDb2NvYSIKKworIzogdmVyc2lvbi5jOjc5MQorbXNnaWQgIndpdGggKGNsYXNzaWMpIEdVSS4iCittc2dzdHIgInMgKGNsYXNpY2v9bSkgZ3JhZmlja/1tIHJvemhyYW7tbSIKKworIzogdmVyc2lvbi5jOjgwMgorbXNnaWQgIiAgRmVhdHVyZXMgaW5jbHVkZWQgKCspIG9yIG5vdCAoLSk6XG4iCittc2dzdHIgIiBWbGFzdG5vc3RpIHphaHJudXTpICgrKSBhIG5lemFocm51dOkgKC0pOlxuIgorCisjOiB2ZXJzaW9uLmM6ODE0Cittc2dpZCAiICAgc3lzdGVtIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICBzeXN06W1vdv0gdmltcmMgc291Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjgxOQorbXNnaWQgIiAgICAgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICB1vml2YXRlbHNr/SB2aW1yYyBzb3Vib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODI0Cittc2dpZCAiIDJuZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgZHJ1aP0gdb5pdmF0ZWxza/0gdmltcmMgc291Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjgyOQorbXNnaWQgIiAzcmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIHT4ZXTtIHW+aXZhdGVsc2v9IHZpbXJjIHNvdWJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo4MzQKK21zZ2lkICIgICAgICB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgIHW+aXZhdGVsc2v9IGV4cmMgc291Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjgzOQorbXNnaWQgIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICBkcnVo/SB1vml2YXRlbHNr/SBleHJjIHNvdWJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo4NDUKK21zZ2lkICIgIHN5c3RlbSBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgc3lzdOltb3b9IGd2aW1yYyBzb3Vib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODQ5Cittc2dpZCAiICAgIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgdb5pdmF0ZWxza/0gZ3ZpbXJjIHNvdWJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo4NTMKK21zZ2lkICIybmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgImRydWj9IHW+aXZhdGVsc2v9IGd2aW1yYyBzb3Vib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODU4Cittc2dpZCAiM3JkIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICJ0+GV07SB1vml2YXRlbHNr/SBndmltcmMgc291Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjg2NQorbXNnaWQgIiAgICBzeXN0ZW0gbWVudSBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIHN5c3TpbW92/SBzb3Vib3IgcyBtZW51OiBcIiIKKworIzogdmVyc2lvbi5jOjg3MworbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICBpbXBsaWNpdG7tIGhvZG5vdGEgJFZJTTpcIiIKKworIzogdmVyc2lvbi5jOjg3OQorbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiICBpbXBsaWNpdG7tIGhvZG5vdGEgJFZJTVJVTlRJTUU6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODgzCittc2dpZCAiQ29tcGlsYXRpb246ICIKK21zZ3N0ciAiUPhla2xhZDogIgorCisjOiB2ZXJzaW9uLmM6ODg5Cittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAiUPhla2xhZGHoOiAiCisKKyM6IHZlcnNpb24uYzo4OTQKK21zZ2lkICJMaW5raW5nOiAiCittc2dzdHIgIkxpbmt1amk6ICIKKworIzogdmVyc2lvbi5jOjg5OQorbXNnaWQgIiAgREVCVUcgQlVJTEQiCittc2dzdHIgIiAgUE9EUE9SQSBMQUTMTs0iCisKKyM6IHZlcnNpb24uYzo5MzQKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVmkgSU1wcm92ZWQiCisKKyM6IHZlcnNpb24uYzo5MzYKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAidmVyemUgIgorCisjOiB2ZXJzaW9uLmM6OTM3Cittc2dpZCAiYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorbXNnc3RyICJBdXRvcjogQnJhbSBNb29sZW5hYXIgYSBkYWy57SIKKworIzogdmVyc2lvbi5jOjkzOAorbXNnaWQgIlZpbSBpcyBvcGVuIHNvdXJjZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUiCittc2dzdHIgIlZpbSBqZSB2b2xu7CC5afhpdGVsbv0gcHJvZ3JhbSBzIG90ZXb4ZW79bSB6ZHJvam92/W0ga/NkZW0iCisKKyM6IHZlcnNpb24uYzo5NDAKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAiUG9tb3p0ZSBjaHVk/W0gZOx0ZW0gdiBVZ2FuZOwhIgorCisjOiB2ZXJzaW9uLmM6OTQxCittc2dpZCAidHlwZSAgOmhlbHAgaWNjZjxFbnRlcj4gICAgICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAicG9kcm9ibuxque0gaW5mb3JtYWNlIHrtc2vhdGUgcG9tb2PtIDpoZWxwIGljY2Y8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6OTQzCittc2dpZCAidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIKK21zZ3N0ciAiemFkZWp0ZSA6cTxFbnRlcj4gICAgICAgICAgICAgcHJvIHVrb27oZW7tIHByb2dyYW11IgorCisjOiB2ZXJzaW9uLmM6OTQ0Cittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAiemFkZWp0ZSA6aGVscDxFbnRlcj4gIOhpIDxGMT4gcHJvIG7hcG927GR1IgorCisjOiB2ZXJzaW9uLmM6OTQ1Cittc2dpZCAidHlwZSAgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICAgZm9yIHZlcnNpb24gaW5mbyIKK21zZ3N0ciAiemFkZWp0ZSA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gIHBybyBpbmZvcm1hY2UgbyB2ZXJ6aSA2IgorCisjOiB2ZXJzaW9uLmM6OTQ4Cittc2dpZCAiUnVubmluZyBpbiBWaSBjb21wYXRpYmxlIG1vZGUiCittc2dzdHIgIkLsvu1tIHYgcmW+aW11IGtvbXBhdGliaWxpdHkgcyBWaSIKKworIzogdmVyc2lvbi5jOjk0OQorbXNnaWQgInR5cGUgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIGZvciBWaW0gZGVmYXVsdHMiCittc2dzdHIgInphZGVqdGUgOnNldCBub2NwPEVudGVyPiAgICAgcHJvIGltcGxpY2l0bu0gbmFzdGF2ZW7tIFZpbSIKKworIzogdmVyc2lvbi5jOjk1MAorbXNnaWQgInR5cGUgIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IGZvciBpbmZvIG9uIHRoaXMiCittc2dzdHIgInBvZHJvYm7sarntIGluZm9ybWFjZSB67XNr4XRlIHBvbW9j7SA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiIKKworIzogdmVyc2lvbi5jOjk5MAorbXNnaWQgIldBUk5JTkc6IFdpbmRvd3MgOTUvOTgvTUUgZGV0ZWN0ZWQiCittc2dzdHIgIlZBUk9WwU7NOiBkZXRla2924W55IFdpbmRvd3MgOTUvOTgvTUUiCisKKyM6IHZlcnNpb24uYzo5OTMKK21zZ2lkICJ0eXBlICA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJ6YWRlanRlIDpoZWxwIHdpbmRvd3M5NTxFbnRlcj4gcHJvIHBvZHJvYm7sarntIGluZm9ybWFjZSIKKworIzogd2luZG93LmM6MjAxCittc2dpZCAiRTQ0MTogVGhlcmUgaXMgbm8gcHJldmlldyB3aW5kb3ciCittc2dzdHIgIkU0NDE6IE5lbu0gvuFkbukgcHJldmlldyBva25vIG5lbu0iCisKKyM6IHdpbmRvdy5jOjU2OAorbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IE9rbm8gbmVsemUgcm96ZOxsaXQgeuFyb3Zl8iB0b3BsZWZ0IGEgYm90cmlnaHQiCisKKyM6IHdpbmRvdy5jOjEzMjcKK21zZ2lkICJFNDQzOiBDYW5ub3Qgcm90YXRlIHdoZW4gYW5vdGhlciB3aW5kb3cgaXMgc3BsaXQiCittc2dzdHIgIkU0NDM6IE5lbHplIHJvdG92YXQsIHBva3VkIGplIGppbukgb2tubyByb3pk7Gxlbm8iCisKKyM6IHdpbmRvdy5jOjE4MTAKK21zZ2lkICJFNDQ0OiBDYW5ub3QgY2xvc2UgbGFzdCB3aW5kb3ciCittc2dzdHIgIkU0NDQ6IFBvc2xlZG7tIG9rbm8gbmVsemUgdXphdvjtdCIKKworIzogd2luZG93LmM6MjQ3NAorbXNnaWQgIkFscmVhZHkgb25seSBvbmUgd2luZG93IgorbXNnc3RyICJKab4gZXhpc3R1amUgcG91emUgamVkbm8gb2tubyIKKworIzogd2luZG93LmM6MjUyMQorbXNnaWQgIkU0NDU6IE90aGVyIHdpbmRvdyBjb250YWlucyBjaGFuZ2VzIgorbXNnc3RyICJFNDQ1OiBKaW7pIG9rbm8gb2JzYWh1amUgem3sbnkiCisKKyM6IHdpbmRvdy5jOjQzNDEKK21zZ2lkICJFNDQ2OiBObyBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFNDQ2OiBQb2Qga3Vyem9yZW0gc2UgbmVuYWNo4XrtIG7hemV2IHNvdWJvcnUiCisKKyM6IHdpbmRvdy5jOjQ0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0NzogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFNDQ3OiBTb3Vib3IgXCIlc1wiIG5lbHplIHYgcGF0aCBuYWzpenQiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NTg2Cittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICJFZGl0YWNlICZtdWx0aXBsZSBWaW15IgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjU5MgorbXNnaWQgIkVkaXQgd2l0aCBzaW5nbGUgJlZpbSIKK21zZ3N0ciAiRWRpdGFjZSBqZWRu7W0gJFZpbSAtZW0iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NjA0Cittc2dpZCAiRWRpdCB3aXRoICZWaW0iCittc2dzdHIgIkVkaXRhY2UgJlZpbSAtZW0iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NjI4Cittc2dpZCAiRWRpdCB3aXRoIGV4aXN0aW5nIFZpbSAtICYiCittc2dzdHIgIkVkaXRhY2UgZXhpc3R1au1j7W0gVmltZW0gLSAmIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjc1MgorbXNnaWQgIkVkaXRzIHRoZSBzZWxlY3RlZCBmaWxlKHMpIHdpdGggVmltIgorbXNnc3RyICJFZGl0YWNlIHZ5YnJhbv1jaCBzb3Vib3L5IFZpbWVtIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjg5MSAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjk2OQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHByb2Nlc3M6IENoZWNrIGlmIGd2aW0gaXMgaW4geW91ciBwYXRoISIKK21zZ3N0ciAiQ2h5YmEgcPhpIHNwb3W5dOxu7SBwcm9jZXN1OiBaa29udHJvbHVqdGUgemRhbGkgamUgZ3ZpbSB2ICRQQVRIISIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTIgLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDYKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTcwCittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgImNoeWJhIGd2aW1leHQuZGxsIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjkwNQorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAiTuF6ZXYgKHYgcGF0aCkgamUgcPjtbGm5IGRsb3Vo/SIKKworIzogZ2xvYmFscy5oOjg3OAorbXNnaWQgIi0tTm8gbGluZXMgaW4gYnVmZmVyLS0iCittc2dzdHIgIi0tQnVmZmVyIG5lb2JzYWh1amUgvuFkbv0g+OFkZWstLSIKKworIy4KKyMuICogVGhlIGVycm9yIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHNoYXJlZCBhcmUgaW5jbHVkZWQgaGVyZS4KKyMuICogRXhjbHVkZWQgYXJlIGVycm9ycyB0aGF0IGFyZSBvbmx5IHVzZWQgb25jZSBhbmQgZGVidWdnaW5nIG1lc3NhZ2VzLgorIy4KKyM6IGdsb2JhbHMuaDoxMDE5Cittc2dpZCAiQ29tbWFuZCBhYm9ydGVkIgorbXNnc3RyICJQ+O1rYXogcPhlcnW5ZW4iCisKKyM6IGdsb2JhbHMuaDoxMDIwCittc2dpZCAiQXJndW1lbnQgcmVxdWlyZWQiCittc2dzdHIgIkplIHZ5vmFkb3bhbiBhcmd1bWVudCIKKworIzogZ2xvYmFscy5oOjEwMjEKK21zZ2lkICJFMTA6IFxcIHNob3VsZCBiZSBmb2xsb3dlZCBieSAvLCA/IG9yICYiCittc2dzdHIgIkUxMDogcG8gXFwgYnkgbexsIG7hc2xlZG92YXQgLy4gPyBuZWJvICYiCisKKyM6IGdsb2JhbHMuaDoxMDIzCittc2dpZCAiRTExOiBJbnZhbGlkIGluIGNvbW1hbmQtbGluZSB3aW5kb3c7IDxDUj4gZXhlY3V0ZXMsIENUUkwtQyBxdWl0cyIKK21zZ3N0ciAiIgorIkUxMTogQ2h5YmEgdiBva27sIHD47Wthem926SD44WRreTsgPENSPiBwcm8gc3B1uXS5bu0sIENUUkwtQyBwcm8gdWtvbuhlbu0iCisKKyM6IGdsb2JhbHMuaDoxMDI1Cittc2dpZCAiRTEyOiBDb21tYW5kIG5vdCBhbGxvd2VkIGZyb20gZXhyYy92aW1yYyBpbiBjdXJyZW50IGRpciBvciB0YWcgc2VhcmNoIgorbXNnc3RyICIiCisiRTEyOiBQ+O1rYXogbmVu7SB6IGV4cmMvdmltcmMgdiBha3R14Wxu7W0gYWRyZXPh+Gkg6GkgcPhpIGhsZWThbu0gdGFndSAiCisicG92b2xlbi4iCisKKyM6IGdsb2JhbHMuaDoxMDI2Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IFNvdWJvciBleGlzdHVqZSAocG91vmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjOiBnbG9iYWxzLmg6MTAyNworbXNnaWQgIkNvbW1hbmQgZmFpbGVkIgorbXNnc3RyICJQ+O1rYXogc2VsaGFsIgorCisjOiBnbG9iYWxzLmg6MTAyOAorbXNnaWQgIkludGVybmFsIGVycm9yIgorbXNnc3RyICJWbml0+G7tIGNoeWJhIgorCisjOiBnbG9iYWxzLmg6MTAyOQorbXNnaWQgIkludGVycnVwdGVkIgorbXNnc3RyICJQ+GVydbllbm8iCisKKyM6IGdsb2JhbHMuaDoxMDMwCittc2dpZCAiRTE0OiBJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIkUxNDogQ2h5Ym7hIGFkcmVzYSIKKworIzogZ2xvYmFscy5oOjEwMzEKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJDaHlibv0gYXJndW1lbnQiCisKKyM6IGdsb2JhbHMuaDoxMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJDaHlibv0gYXJndW1lbnQ6ICVzIgorCisjOiBnbG9iYWxzLmg6MTAzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogJXMiCittc2dzdHIgIkUxNTogQ2h5Ym79IHb9cmF6OiAlcyIKKworIzogZ2xvYmFscy5oOjEwMzYKK21zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCittc2dzdHIgIkUxNjogQ2h5Ym79IHJvenNhaCIKKworIzogZ2xvYmFscy5oOjEwMzcKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQiCittc2dzdHIgIkNoeWJu/SBw+O1rYXoiCisKKyM6IGdsb2JhbHMuaDoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzogXCIlc1wiIGlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJFMTc6IFwiJXNcIiBqZSBhZHJlc+H4ZW0iCisKKyM6IGdsb2JhbHMuaDoxMDQyCittc2dpZCAiRTE4OiBVbmV4cGVjdGVkIGNoYXJhY3RlcnMgYmVmb3JlICc9JyIKK21zZ3N0ciAiRTE4OiBOZW/oZWvhdmFu6SB6bmFreSBw+GVkICc9JyIKKworIzogZ2xvYmFscy5oOjEwNDQKK21zZ2lkICJFMTk6IE1hcmsgaGFzIGludmFsaWQgbGluZSBudW1iZXIiCittc2dzdHIgIkUxOTogWm5h6GthIG3hIGNoeWJu6SDo7XNsbyD44WRrdSIKKworIzogZ2xvYmFscy5oOjEwNDUKK21zZ2lkICJFMjA6IE1hcmsgbm90IHNldCIKK21zZ3N0ciAiRTIwOiBuZW7tIG5hc3RhdmVuYSIKKworIzogZ2xvYmFscy5oOjEwNDYKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTogTmVsemUgbexuaXQsIGplIG5hc3RhdmVuYSB2b2xiYSAnbW9kaWZpYWJsZSciCisKKyM6IGdsb2JhbHMuaDoxMDQ3Cittc2dpZCAiRTIyOiBTY3JpcHRzIG5lc3RlZCB0b28gZGVlcCIKK21zZ3N0ciAiRTIyOiBTa3JpcHQgdm5v+GVuIHD47WxpuSBobHVib2tvIgorCisjOiBnbG9iYWxzLmg6MTA0OAorbXNnaWQgIkUyMzogTm8gYWx0ZXJuYXRlIGZpbGUiCittc2dzdHIgIkUyMzogruFkbv0gYWx0ZXJuYXRpdm7tIHNvdWJvciIKKworIzogZ2xvYmFscy5oOjEwNDkKK21zZ2lkICJFMjQ6IE5vIHN1Y2ggYWJicmV2aWF0aW9uIgorbXNnc3RyICJFMjQ6IFRha2924SB6a3JhdGthIG5lZXhpc3R1amUiCisKKyM6IGdsb2JhbHMuaDoxMDUwCittc2dpZCAiTm8gISBhbGxvd2VkIgorbXNnc3RyICIhIG5lbu0gcG92b2xlbm8iCisKKyM6IGdsb2JhbHMuaDoxMDUyCittc2dpZCAiRTI1OiBHVUkgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAiRTI1OiBOZWx6ZSBwb3W+7XQgR1VJOiBuZWJ5bG8gemFwbnV0byBw+GkgcPhla2xhZHUgcHJvZ3JhbXUiCisKKyM6IGdsb2JhbHMuaDoxMDU1Cittc2dpZCAiRTI2OiBIZWJyZXcgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICIiCisiRTI2OiBuZWx6ZSBwb3W+7XQgaGVicmVqc2v9IHJlvmltOiAgbmVieWwgemFwbnV0IHD4aSBw+GVrbGFkdSBwcm9ncmFtdVxuIgorCisjOiBnbG9iYWxzLmg6MTA1OAorbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjc6IE5lbHplIHBvdb7tdCBmYXJzaSByZb5pbTogIG5lYnlsIHphcG51dCBw+GkgcPhla2xhZHUgcHJvZ3JhbXVcbiIKKworIzogZ2xvYmFscy5oOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBTa3VwaW5hIHp2/XJhem7sbu0gJXMgbmVleGlzdHVqZSIKKworIzogZ2xvYmFscy5oOjEwNjMKK21zZ2lkICJFMjk6IE5vIGluc2VydGVkIHRleHQgeWV0IgorbXNnc3RyICJFMjk6IFphdO1tIG5lbu0gvuFkbv0gdmxvvmVu/SB0ZXh0IgorCisjOiBnbG9iYWxzLmg6MTA2NAorbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6IK7hZG7hIHD4ZWRjaG967SBw+O1rYXpvduEg+OFka2EiCisKKyM6IGdsb2JhbHMuaDoxMDY1Cittc2dpZCAiRTMxOiBObyBzdWNoIG1hcHBpbmciCittc2dzdHIgIkUzMTogruFkbukgdGFrb3bpIG1hcG924W7tIgorCisjOiBnbG9iYWxzLmg6MTA2NgorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICKu4WRu4SBzaG9kYSIKKworIzogZ2xvYmFscy5oOjEwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2g6ICVzIgorbXNnc3RyICKu4WRu4SBzaG9kYTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMDY4Cittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjogruFkbv0gbuF6ZXYgc291Ym9ydSIKKworIzogZ2xvYmFscy5oOjEwNjkKK21zZ2lkICJFMzM6IE5vIHByZXZpb3VzIHN1YnN0aXR1dGUgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzM6IL7hZG79IHD4ZWRjaG967SByZWd1bOFybu0gdv1yYXoiCisKKyM6IGdsb2JhbHMuaDoxMDcwCittc2dpZCAiRTM0OiBObyBwcmV2aW91cyBjb21tYW5kIgorbXNnc3RyICJFMzQ6IK7hZG79IHD4ZWRjaG967SBw+O1rYXoiCisKKyM6IGdsb2JhbHMuaDoxMDcxCittc2dpZCAiRTM1OiBObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzNTogvuFkbv0gcPhlZGNob3rtIHJlZ3Vs4XJu7SB2/XJheiIKKworIzogZ2xvYmFscy5oOjEwNzIKK21zZ2lkICJObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICJSb3pzYWggbmVu7SBwb3ZvbGVuIgorCisjOiBnbG9iYWxzLmg6MTA3NAorbXNnaWQgIkUzNjogTm90IGVub3VnaCByb29tIgorbXNnc3RyICJFMzY6IE5lZG9zdGF0ZWsgbe1zdGEiCisKKyM6IGdsb2JhbHMuaDoxMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJOZWx6ZSB2eXR2b/hpdCBzb3Vib3IgJXMiCisKKyM6IGdsb2JhbHMuaDoxMDc3Cittc2dpZCAiQ2FuJ3QgZ2V0IHRlbXAgZmlsZSBuYW1lIgorbXNnc3RyICJOZWx6ZSB67XNrYXQgbuF6ZXYgZG/oYXNu6WhvIHNvdWJvcnUiCisKKyM6IGdsb2JhbHMuaDoxMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiTmVsemUgb3RldvjtdCBzb3Vib3IgJXMiCisKKyM6IGdsb2JhbHMuaDoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHJlYWQgZmlsZSAlcyIKK21zZ3N0ciAiTmVsemUg6O1zdCBzb3Vib3IgJXMiCisKKyM6IGdsb2JhbHMuaDoxMDgwCittc2dpZCAiRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMzc6IE5ldWxvvmVu6SB6bexueSAocG91vmlqdGUgISBwcm8gdnludWNlbu0pIgorCisjOiBnbG9iYWxzLmg6MTA4MQorbXNnaWQgIkUzODogTnVsbCBhcmd1bWVudCIKK21zZ3N0ciAiRTM4OiBOdWxvdv0gYXJndW1lbnQiCisKKyM6IGdsb2JhbHMuaDoxMDgzCittc2dpZCAiRTM5OiBOdW1iZXIgZXhwZWN0ZWQiCittc2dzdHIgIkUzOTogT+hla+F24W5vIOjtc2xvIgorCisjOiBnbG9iYWxzLmg6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA6IENhbid0IG9wZW4gZXJyb3JmaWxlICVzIgorbXNnc3RyICJFNDA6IE5lbHplIG90ZXb47XQgY2h5Ym92/SBzb3Vib3IgJXMiCisKKyM6IGdsb2JhbHMuaDoxMDg5Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiBOZWRvc3RhdGVrIHBhbex0aSEiCisKKyM6IGdsb2JhbHMuaDoxMDkyCittc2dpZCAiUGF0dGVybiBub3QgZm91bmQiCittc2dzdHIgIlZ6b3IgbmVuYWxlemVuIgorCisjOiBnbG9iYWxzLmg6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIlZ6b3IgbmVuYWxlemVuOiAlcyIKKworIzogZ2xvYmFscy5oOjEwOTUKK21zZ2lkICJBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJBcmd1bWVudCBtdXPtIGL9dCBrbGFkbv0iCisKKyM6IGdsb2JhbHMuaDoxMDk3Cittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0MjogruFkbukgY2h5YnkiCisKKyM6IGdsb2JhbHMuaDoxMDk5Cittc2dpZCAiRTQzOiBEYW1hZ2VkIG1hdGNoIHN0cmluZyIKK21zZ3N0ciAiRTQzOiBQb7lrb3plbv0g+GV07HplYyBwcm8gdnlobGVk4Xbhbu0iCisKKyM6IGdsb2JhbHMuaDoxMTAwCittc2dpZCAiRTQ0OiBDb3JydXB0ZWQgcmVnZXhwIHByb2dyYW0iCittc2dzdHIgIkU0NDogcG+5a296ZW79IHJlZ2V4cCBwcm9ncmFtIgorCisjOiBnbG9iYWxzLmg6MTEwMQorbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0ICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU0NTogJ25hc3RhdmVuYSB2b2xiYSAncmVhZG9ubHknIChwb3W+aWp0ZSAhIHBybyB2eW51Y2Vu7SkiCisKKyM6IGdsb2JhbHMuaDoxMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjogQ2Fubm90IHNldCByZWFkLW9ubHkgdmFyaWFibGUgXCIlc1wiIgorbXNnc3RyICJFNDY6IE5lbHplIG5hc3Rhdml0IHBvdXplX3Byb1/odGVu7SBwcm9t7G5ub3UgXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTEwNgorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0NzogQ2h5YmEgcPhpIOh0ZW7tIGNoeWJvdulobyBzb3Vib3J1IgorCisjOiBnbG9iYWxzLmg6MTEwOQorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiBOZW7tIHYgYmV6cGXobm9zdG7tIHNjaHLhbmNlIHBvdm9sZW5vIgorCisjOiBnbG9iYWxzLmg6MTExMQorbXNnaWQgIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIKK21zZ3N0ciAiRTQ5OiBDaHlibuEgaG9kbm90YSB2b2xieSAnc2Nyb2xsJyIKKworIzogZ2xvYmFscy5oOjExMTIKK21zZ2lkICJFOTE6ICdzaGVsbCcgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJFOTE6IHZvbGJhICdzaGVsbCcgamUgcHLhemRu4SIKKworIzogZ2xvYmFscy5oOjExMTMKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiBDaHliYSBw+GkgdXphdu1y4W7tIG9ka2zhZGFj7WhvIHNvdWJvcnUiCisKKyM6IGdsb2JhbHMuaDoxMTE0Cittc2dpZCAiRTczOiB0YWcgc3RhY2sgZW1wdHkiCittc2dzdHIgIkU3Mzogc2V6bmFtIHRhZ/kgamUgcHLhemRu/SIKKworIzogZ2xvYmFscy5oOjExMTUKK21zZ2lkICJFNzQ6IENvbW1hbmQgdG9vIGNvbXBsZXgiCittc2dzdHIgIkU3NDogUPjta2F6IGplIHD47WxpuSBzbG++aXT9IgorCisjOiBnbG9iYWxzLmg6MTExNgorbXNnaWQgIkU3NTogTmFtZSB0b28gbG9uZyIKK21zZ3N0ciAiRTc1OiBO4XpldiBqZSBw+O1sabkgZGxvdWj9IgorCisjOiBnbG9iYWxzLmg6MTExNworbXNnaWQgIkU3NjogVG9vIG1hbnkgWyIKK21zZ3N0ciAiRTc2OiBw+O1sabkgbW5vaG8gWyIKKworIzogZ2xvYmFscy5oOjExMTgKK21zZ2lkICJFNzc6IFRvbyBtYW55IGZpbGUgbmFtZXMiCittc2dzdHIgIkU3NzogUPjtbGm5IG1ub2hvIG7henb5IHNvdWJvcvkiCisKKyM6IGdsb2JhbHMuaDoxMTE5Cittc2dpZCAiVHJhaWxpbmcgY2hhcmFjdGVycyIKK21zZ3N0ciAiTmFkYnl0Zehu6SB6bmFreSBuYSBrb25jaSIKKworIzogZ2xvYmFscy5oOjExMjAKK21zZ2lkICJFNzg6IFVua25vd24gbWFyayIKK21zZ3N0ciAiRTc4OiBOZXpu4W3hIHpuYehrYSIKKworIzogZ2xvYmFscy5oOjExMjEKK21zZ2lkICJFNzk6IENhbm5vdCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICJFNzk6IE5lbHplIGV4cGFuZG92YXQgvm9s7Wtvdukgem5ha3kiCisKKyM6IGdsb2JhbHMuaDoxMTIyCittc2dpZCAiRTgwOiBFcnJvciB3aGlsZSB3cml0aW5nIgorbXNnc3RyICJFODA6IENoeWJhIHD4aSB1a2zhZOFu7SIKKworIzogZ2xvYmFscy5oOjExMjMKK21zZ2lkICJaZXJvIGNvdW50IgorbXNnc3RyICJOdWxvdv0gcG/oZXQiCisKKyM6IGdsb2JhbHMuaDoxMTI1Cittc2dpZCAiRTgxOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dCIKK21zZ3N0ciAiRTgxOiBQb3W+aXTtIDxTSUQ+IG1pbW8ga29udGV4dCBza3JpcHR1IgpkaWZmIC0tZ2l0IGEvc3JjL3BvL2RlLnBvIGIvc3JjL3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDI2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vZGUucG8KQEAgLTAsMCArMSw2MDkxIEBACisjIEdlcm1hbiBUcmFuc2xhdGlvbiBmb3IgVmltCQl2aW06c2V0IGZvbGRtZXRob2Q9bWFya2VyOgorIworIyBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyMgRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisjCisjIFByZXZpb3VzLVRyYW5zbGF0b3Iocyk6IEpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgorIworIyB0aG91Z2h0cyAoR2VkYW5rZW4pCisjCisjIC0gbWFyayAgICA6IE1hcmtpZXJ1bmcgb2RlciBNYXJrZT8KKyMgLSBhbWJpZ291czogTWVocmRldXRpZywgTmljaHQtZWluZGV1dGlnCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBWaW0oZGV1dHNjaClcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwMi0wNC0yMCAxODoxNSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNC0wNS0xMiAyMDo0OSswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBHZXJmcmllZCBGdWNocyA8YWxmaWVAaXN0Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHZXJtYW4gPGRlQGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU09fODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKworIzogYnVmZmVyLmM6OTcKK21zZ2lkICJFODI6IENhbm5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLCBleGl0aW5nLi4uIgorbXNnc3RyICJFODI6IEtlaW4gUHVmZmVyIGthbm4gYWxsb3ppZXJ0IHdlcmRlbjsgYmVlbmRlbi4uLiIKKworIzogYnVmZmVyLmM6MTAwCittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4MzogUHVmZmVyIGthbm4gbmljaHQgYWxsb3ppZXJ0IHdlcmRlbjsgYmVudXR6ZSBlaW5lbiBhbmRlcmVuLi4uIgorCisjOiBidWZmZXIuYzo3MDYKK21zZ2lkICJObyBidWZmZXJzIHdlcmUgdW5sb2FkZWQiCittc2dzdHIgIktlaW5lIFB1ZmZlciB3dXJkZW4gYXVzZ2VsYWRlbiIKKworIzogYnVmZmVyLmM6NzA4Cittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIGRlbGV0ZWQiCittc2dzdHIgIktlaW5lIFB1ZmZlciB3dXJkZW4gZ2Vs9nNjaHQiCisKKyM6IGJ1ZmZlci5jOjcxMAorbXNnaWQgIk5vIGJ1ZmZlcnMgd2VyZSB3aXBlZCBvdXQiCittc2dzdHIgIktlaW5lIFB1ZmZlciB3dXJkZW4gZ2Vs9nNjaHQiCisKKyM6IGJ1ZmZlci5jOjcxOAorbXNnaWQgIjEgYnVmZmVyIHVubG9hZGVkIgorbXNnc3RyICIxIFB1ZmZlciBhdXNnZWxhZGVuIgorCisjOiBidWZmZXIuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB1bmxvYWRlZCIKK21zZ3N0ciAiJWQgUHVmZmVyIGF1c2dlbGFkZW4iCisKKyM6IGJ1ZmZlci5jOjcyNQorbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIjEgUHVmZmVyIGdlbPZzY2h0IgorCisjOiBidWZmZXIuYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICIlZCBQdWZmZXIgZ2Vs9nNjaHQiCisKKyM6IGJ1ZmZlci5jOjczMgorbXNnaWQgIjEgYnVmZmVyIHdpcGVkIG91dCIKK21zZ3N0ciAiMSBQdWZmZXIgZ2Vs9nNjaHQiCisKKyM6IGJ1ZmZlci5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHdpcGVkIG91dCIKK21zZ3N0ciAiJWQgUHVmZmVyIGdlbPZzY2h0IgorCisjOiBidWZmZXIuYzo3OTEKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiBFcyB3dXJkZSBrZWluZSB2ZXLkbmRlcnRlbiBQdWZmZXIgZ2VmdW5kZW4iCisKKyMuIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCwgZGlkbid0IGZpbmQgYW55dGhpbmcuCisjOiBidWZmZXIuYzo4MzAKK21zZ2lkICJFODU6IFRoZXJlIGlzIG5vIGxpc3RlZCBidWZmZXIiCittc2dzdHIgIkU4NTogRXMgZ2lidCBrZWluZSBhbmdlemVpZ3RlIFB1ZmZlciIKKworIzogYnVmZmVyLmM6ODQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQ2Fubm90IGdvIHRvIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU4NjogS2FubiBuaWNodCB6dW0gUHVmZmVyICVsZCB3ZWNoc2VsbiIKKworIzogYnVmZmVyLmM6ODQ1Cittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6IEthbm4gbmljaHQg/GJlciBkZW4gbGV0enRlbiBQdWZmZXIgaGluYXVzIGdlaGVuIgorCisjOiBidWZmZXIuYzo4NDcKK21zZ2lkICJFODg6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgYnVmZmVyIgorbXNnc3RyICJFODg6IEthbm4gbmljaHQgdm9yIGRlbiBlcnN0ZW4gUHVmZmVyIGdlaGVuIgorCisjOiBidWZmZXIuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg5OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyICVsZCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICIiCisiRTg5OiBQdWZmZXIgJWxkIHd1cmRlIHNlaXQgZGVyIGxldHp0ZW4gxG5kZXJ1bmcgbmljaHQgZ2VzY2hyaWViZW4gKGVyendpbmdlICIKKyJtaXQgISkiCisKKyM6IGJ1ZmZlci5jOjg4NworbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiBsZXR6dGVyIFB1ZmZlciBrYW5uIG5pY2h0IGhlcmF1cy1nZWxhZGVuIHdlcmRlbiIKKworIzogYnVmZmVyLmM6MTM0MgorbXNnaWQgIlcxNDogV2FybmluZzogTGlzdCBvZiBmaWxlIG5hbWVzIG92ZXJmbG93IgorbXNnc3RyICJXMTQ6IEFjaHR1bmc6INxiZXJsYXVmIGRlciBMaXN0ZSBkZXIgRGF0ZWluYW1lbiIKKworIzogYnVmZmVyLmM6MTUwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFOTI6IEJ1ZmZlciAlbGQgbm90IGZvdW5kIgorbXNnc3RyICJFOTI6IGtlaW4gUHVmZmVyICVsZCBnZWZ1bmRlbiIKKworIzogYnVmZmVyLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICJFOTM6IE1vcmUgdGhhbiBvbmUgbWF0Y2ggZm9yICVzIgorbXNnc3RyICJFOTM6IE1laHIgYWxzIGVpbmUgTfZnbGljaGtlaXQgZvxyICVzIgorCisjOiBidWZmZXIuYzoxNzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiBLZWluIFB1ZmZlciBwYXNzdCB6dSAlcyIKKworIzogYnVmZmVyLmM6MjE0MSBleF9kb2NtZC5jOjYwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQiCittc2dzdHIgIlplaWxlICVsZCIKKworIzogYnVmZmVyLmM6MjIyNAorbXNnaWQgIkU5NTogQnVmZmVyIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFOTU6IEVpbiBQdWZmZXIgbWl0IGRpZXNlbSBOYW1lbiBleGlzdGllcnQgYmVyZWl0cyIKKworIzogYnVmZmVyLmM6MjUxNworbXNnaWQgIiBbTW9kaWZpZWRdIgorbXNnc3RyICIgW1ZlcuRuZGVydF0iCisKKyM6IGJ1ZmZlci5jOjI1MjIKK21zZ2lkICJbTm90IGVkaXRlZF0iCittc2dzdHIgIltOaWNodCBlZGl0aWVydF0iCisKKyM6IGJ1ZmZlci5jOjI1MjcKK21zZ2lkICJbTmV3IGZpbGVdIgorbXNnc3RyICJbTmV1ZSBEYXRlaV0iCisKKyM6IGJ1ZmZlci5jOjI1MjgKK21zZ2lkICJbUmVhZCBlcnJvcnNdIgorbXNnc3RyICJbTGVzZS1GZWhsZXJdIgorCisjOiBidWZmZXIuYzoyNTMwIGZpbGVpby5jOjE3NzcKK21zZ2lkICJbcmVhZG9ubHldIgorbXNnc3RyICJbbnVyIExlc2VuXSIKKworIzogYnVmZmVyLmM6MjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgLS0lZCUlLS0iCittc2dzdHIgIjEgWmVpbGUgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIC0tJWQlJS0tIgorbXNnc3RyICIlbGQgWmVpbGVuIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICJaZWlsZSAlbGQgdm9uICVsZCAtLSVkJSUtLSBTcGFsdGUgIgorCisjOiBidWZmZXIuYzoyNjQyCittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJbS2VpbmUgRGF0ZWldIgorCisjLiBtdXN0IGJlIGEgaGVscCBidWZmZXIKKyM6IGJ1ZmZlci5jOjI2ODIKK21zZ2lkICJoZWxwIgorbXNnc3RyICJbSGlsZmVdIgorCisjOiBidWZmZXIuYzozMTkzIHNjcmVlbi5jOjQ3NTQKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIltIaWxmZV0iCisKKyM6IGJ1ZmZlci5jOjMyMjUgc2NyZWVuLmM6NDc2MAorbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW1ZvcmFuc2ljaHRdIgorCisjOiBidWZmZXIuYzozNDMxCittc2dpZCAiQWxsIgorbXNnc3RyICJBbGxlcyIKKworIyBFbmRlIHNvdW5kcyBiZXR0ZXIgdGhhbiAiVW50ZW4iCisjOiBidWZmZXIuYzozNDMxCittc2dpZCAiQm90IgorbXNnc3RyICJFbmRlIgorCisjIEFuZmFuZyBzb3VuZHMgYmV0dGVyIHRoYW4gIk9iZW4iCisjOiBidWZmZXIuYzozNDMzCittc2dpZCAiVG9wIgorbXNnc3RyICJBbmZhbmciCisKKyM6IGJ1ZmZlci5jOjQxNjkKK21zZ2lkICIiCisiXG4iCisiIyBCdWZmZXIgbGlzdDpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgTGlzdGUgZGVyIFB1ZmZlcjpcbiIKKworIzogYnVmZmVyLmM6NDIwMgorbXNnaWQgIltFcnJvciBMaXN0XSIKK21zZ3N0ciAiW0ZlaGxlcmxpc3RlXSIKKworIzogYnVmZmVyLmM6NDIxNSBtZW1saW5lLmM6MTUxMworbXNnaWQgIltObyBGaWxlXSIKK21zZ3N0ciAiW0tlaW5lIERhdGVpXSIKKworIzogYnVmZmVyLmM6NDQzNQorbXNnaWQgIiIKKyJcbiIKKyItLS0gU2lnbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE9wdGlvbmVuIC0tLSIKKworIzogYnVmZmVyLmM6NDQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTaWducyBmb3IgJXM6IgorbXNnc3RyICJWb3J6ZWljaGVuIGb8ciAlczoiCisKKyM6IGJ1ZmZlci5jOjQ0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgIFplaWxlPSVsZCAgaWQ9JWQgIE5hbWU9JXMiCisKKyM6IGRpZmYuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6IFwiZGlmZlwiIGlzdCBm/HIgbWVociBhbHMgJWxkIFB1ZmZlciBuaWNodCBt9mdsaWNoIgorCisjOiBkaWZmLmM6NjQ4Cittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6IEthbm4ga2VpbmUgXCJkaWZmc1wiIGVyc3RlbGxlbiIKKworIzogZGlmZi5jOjc0NworbXNnaWQgIlBhdGNoIGZpbGUiCittc2dzdHIgIlBhdGNoLURhdGVpIgorCisjOiBkaWZmLmM6OTkxCittc2dpZCAiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIKK21zZ3N0ciAiRTk4OiBcImRpZmZcIi1BdXNnYWJlIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4iCisKKyM6IGRpZmYuYzoxNzMyCittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IEFrdHVlbGxlciBQdWZmZXIgaXN0IG5pY2h0IGltIFwiZGlmZlwiLU1vZHVzIgorCisjOiBkaWZmLmM6MTc0NAorbXNnaWQgIkUxMDA6IE5vIG90aGVyIGJ1ZmZlciBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDA6IEtlaW4gd2VpdGVyZXIgUHVmZmVyIGlzdCBpbSBcImRpZmZcIi1Nb2R1cyIKKworIzogZGlmZi5jOjE3NTIKK21zZ2lkICJFMTAxOiBNb3JlIHRoYW4gdHdvIGJ1ZmZlcnMgaW4gZGlmZiBtb2RlLCBkb24ndCBrbm93IHdoaWNoIG9uZSB0byB1c2UiCittc2dzdHIgIkUxMDE6IG1laHJkZXV0aWc6IE1laHIgYWxzIHp3ZWkgUHVmZmVyIGltIFwiZGlmZlwiLU1vZHVzIgorCisjOiBkaWZmLmM6MTc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAyOiBDYW4ndCBmaW5kIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxMDI6IFB1ZmZlciBcIiVzXCIga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4iCisKKyM6IGRpZmYuYzoxNzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzogUHVmZmVyIFwiJXNcIiBpc3QgbmljaHQgaW0gXCJkaWZmXCItTW9kdXMiCisKKyM6IGRpZ3JhcGguYzoyMTcyCittc2dpZCAiRTEwNDogRXNjYXBlIG5vdCBhbGxvd2VkIGluIGRpZ3JhcGgiCittc2dzdHIgIkUxMDQ6ICdFc2NhcGUnIGlzdCBpbiBlaW5lbSBEaWdyYXBoZW4gbmljaHQgZXJsYXVidCIKKworIzogZGlncmFwaC5jOjIzNDQKK21zZ2lkICJLZXltYXAgZmlsZSBub3QgZm91bmQiCittc2dzdHIgIlwiS2V5bWFwXCItRGF0ZWkgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGRpZ3JhcGguYzoyMzcxCittc2dpZCAiRTEwNTogVXNpbmcgOmxvYWRrZXltYXAgbm90IGluIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTA1OiA6bG9hZGtleW1hcCBhdd9lcmhhbGIgZWluZXIgZWluZ2VsZXNlbmVuIERhdGVpIgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBTdGljaHdvcnQtRXJn5G56dW5nICheTi9eUCkiCisKKyMuIGN0cmxfeF9tb2RlID09IDAsIF5QL15OIGNvbXBsLgorIzogZWRpdC5jOjQxCittc2dpZCAiIF5YIG1vZGUgKF5FL15ZL15ML15dL15GL15JL15LL15EL15WL15OL15QKSIKK21zZ3N0ciAiIF5YLU1vZHVzICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eVi9eTi9eUCkiCisKKyMuIFNjcm9sbCBoYXMgaXQncyBvd24gbXNncywgaW4gaXQncyBwbGFjZSB0aGVyZSBpcyB0aGUgbXNnIGZvciBsb2NhbAorIy4gKiBjdHJsX3hfbW9kZSA9IDAgKGVnIGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfTE9DQUwpICAtLSBBY2V2ZWRvCisjOiBlZGl0LmM6NDQKK21zZ2lkICIgS2V5d29yZCBMb2NhbCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBsb2thbGUgU3RpY2h3b3J0LUVyZ+RuenVuZyAoXk4vXlApIgorCisjOiBlZGl0LmM6NDUKK21zZ2lkICIgV2hvbGUgbGluZSBjb21wbGV0aW9uICheTC9eTi9eUCkiCittc2dzdHIgIiBaZWlsZW4tRXJn5G56dW5nICheTC9eTi9eUCkiCisKKyM6IGVkaXQuYzo0NgorbXNnaWQgIiBGaWxlIG5hbWUgY29tcGxldGlvbiAoXkYvXk4vXlApIgorbXNnc3RyICIgRGF0ZWktTmFtZW5zLUVyZ+RuenVuZyAoXkYvXk4vXlApIgorCisjOiBlZGl0LmM6NDcKK21zZ2lkICIgVGFnIGNvbXBsZXRpb24gKF5dL15OL15QKSIKK21zZ3N0ciAiIFRhZy1Fcmfkbnp1bmcgKF5dL15OL15QKSIKKworIzogZWRpdC5jOjQ4Cittc2dpZCAiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBQZmFkLU11c3Rlci1Fcmfkbnp1bmcgKF5OL15QKSIKKworIzogZWRpdC5jOjQ5Cittc2dpZCAiIERlZmluaXRpb24gY29tcGxldGlvbiAoXkQvXk4vXlApIgorbXNnc3RyICIgRGVmaW5pdGlvbnMtRXJn5G56dW5nICheRC9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LL15OL15QKSIKK21zZ3N0ciAiIFf2cnRlcmJ1Y2gtRXJn5G56dW5nICheSy9eTi9eUCkgIgorCisjOiBlZGl0LmM6NTIKK21zZ2lkICIgVGhlc2F1cnVzIGNvbXBsZXRpb24gKF5UL15OL15QKSIKK21zZ3N0ciAiIFRoZXNhdXJ1cy1Fcmfkbnp1bmcgKF5UL15OL15QKSIKKworIzogZWRpdC5jOjUzCittc2dpZCAiIENvbW1hbmQtbGluZSBjb21wbGV0aW9uICheVi9eTi9eUCkiCittc2dzdHIgIiBLb21tYW5kby1aZWlsZW4tRXJn5G56dW5nICheVi9eTi9eUCkiCisKKyM6IGVkaXQuYzo1NgorbXNnaWQgIkhpdCBlbmQgb2YgcGFyYWdyYXBoIgorbXNnc3RyICJTdGll3yBhbiBkYXMgRW5kZSBlaW5lcyBBYnNhdHplcyIKKworIzogZWRpdC5jOjkwNworbXNnaWQgIid0aGVzYXVydXMnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiRGllIE9wdGlvbiAndGhlc2F1cnVzJyBpc3QgbGVlciIKKworIzogZWRpdC5jOjEwODMKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJEaWUgT3B0aW9uICdkaWN0aW9uYXJ5JyBpc3QgbGVlciIKKworIzogZWRpdC5jOjIwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgZGljdGlvbmFyeTogJXMiCittc2dzdHIgIkR1cmNoc3VjaGVuIGRlcyBX9nJ0ZXJidWNoczogJXMiCisKKyM6IGVkaXQuYzoyMTk4Cittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKEVpbmb8Z2VuKSBTY3JvbGxlbiAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjIwMAorbXNnaWQgIiAocmVwbGFjZSkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoRXJzZXR6ZW4pIFNjcm9sbGVuICheRS9eWSkiCisKKyM6IGVkaXQuYzoyNTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nOiAlcyIKK21zZ3N0ciAiRHVyY2hzdWNoZTogJXMiCisKKyM6IGVkaXQuYzoyNTQ3Cittc2dpZCAiU2Nhbm5pbmcgdGFncy4iCittc2dzdHIgIkR1cmNoc3VjaGVuIHZvbiBUYWdzLiIKKworIzogZWRpdC5jOjMyMDcKK21zZ2lkICIgQWRkaW5nIgorbXNnc3RyICIgSGluenVm/Gd1bmcgZGVyIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjMyNTYKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIFN1Y2hlLi4uIgorCisjOiBlZGl0LmM6MzMxMgorbXNnaWQgIkJhY2sgYXQgb3JpZ2luYWwiCittc2dzdHIgIlp1cvxjayBhbSBVcnNwcnVuZyIKKworIzogZWRpdC5jOjMzMTcKK21zZ2lkICJXb3JkIGZyb20gb3RoZXIgbGluZSIKK21zZ3N0ciAiV29ydCBhdXMgYW5kZXJlciBaZWlsZSIKKworIzogZWRpdC5jOjMzMjIKK21zZ2lkICJUaGUgb25seSBtYXRjaCIKK21zZ3N0ciAiRWluemlnZXIgVHJlZmZlciIKKworIzogZWRpdC5jOjMzODEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQgb2YgJWQiCittc2dzdHIgIlRyZWZmZXIgJWQgdm9uICVkIgorCisjOiBlZGl0LmM6MzM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYXRjaCAlZCIKK21zZ3N0ciAiVHJlZmZlciAlZCIKKworIzogZXZhbC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA2OiBVbmtub3duIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDY6IFVuYmVrYW5udGUgVmFyaWFibGU6IFwiJXNcIiIKKworIzogZXZhbC5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTA3OiBNaXNzaW5nIGJyYWNlczogJXMiCittc2dzdHIgIkUxMDc6IEZlaGxlbmRlIEtsYW1tZXJuOiAlcyIKKworIzogZXZhbC5jOjEwNTcgZXZhbC5jOjEwNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiBLZWluZSBzb2xjaGUgVmFyaWFibGU6IFwiJXNcIiIKKworIzogZXZhbC5jOjEzMTUKK21zZ2lkICJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciCittc2dzdHIgIkUxMDk6IGZlaGxlbmRlciAnOicgbmFjaCAnPyciCisKKyM6IGV2YWwuYzoxOTI5Cittc2dpZCAiRTExMDogTWlzc2luZyAnKSciCittc2dzdHIgIkUxMTA6IGZlaGxlbmRlICcpJyIKKworIzogZXZhbC5jOjE5NzkKK21zZ2lkICJFMTExOiBNaXNzaW5nICddJyIKK21zZ3N0ciAiRTExMTogZmVobGVuZGUgJ10nIgorCisjOiBldmFsLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEyOiBPcHRpb24gbmFtZSBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiRTExMjogT3B0aW9ucy1CZXplaWNobnVuZyBmZWhsdDogJXMiCisKKyM6IGV2YWwuYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTM6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTExMzogVW5iZWthbm50ZSBPcHRpb246ICVzIgorCisjOiBldmFsLmM6MjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE0OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNDogRmVobGVuZGVzIEFuZvxocnVuZ3N6ZWljaGVuOiAlcyIKKworIzogZXZhbC5jOjIyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNTogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTU6IEZlaGxlbmRlcyBBbmb8aHJ1bmdzemVpY2hlbjogJXMiCisKKyM6IGV2YWwuYzoyNTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTExNjogVW56dWzkc3NpZ2UgQXJndW1lbnRlIGb8ciBGdW5rdGlvbiAlcyIKKworIzogZXZhbC5jOjI1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNzogVW5rbm93biBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTc6IFVuYmVrYW5udGUgRnVua3Rpb246ICVzIgorCisjOiBldmFsLmM6MjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODogWnUgdmllbGUgQXJndW1lbnRlIGb8ciBGdW5rdGlvbjogJXMiCisKKyM6IGV2YWwuYzoyNTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTk6IE5pY2h0IGdlbnVnIEFyZ3VtZW50ZSBm/HIgRnVua3Rpb246ICVzIgorCisjOiBldmFsLmM6MjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTIwOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dDogJXMiCittc2dzdHIgIkUxMjA6IDxTSUQ+IHd1cmRlIG5pY2h0IGluIGVpbmVyIFNrcmlwdC1VbWdlYnVuZyBiZW51dHp0OiAlcyIKKworIzogZXZhbC5jOjMxNzIgZ3VpLmM6Mzk5MAorbXNnaWQgIiZPayIKK21zZ3N0ciAiJk9rIgorCisjOiBldmFsLmM6MzY3OAorIywgYy1mb3JtYXQKK21zZ2lkICIrLSVzJTNsZCBsaW5lczogIgorbXNnc3RyICIrLSVzJTNsZCBaZWlsZW46ICIKKworIzogZXZhbC5jOjQ3OTQKK21zZ2lkICIiCisiJk9LXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZPS1xuIgorIiZBYmJyZWNoZW4iCisKKyM6IGV2YWwuYzo1NjI2Cittc2dpZCAiRTI0MDogTm8gY29ubmVjdGlvbiB0byBWaW0gc2VydmVyIgorbXNnc3RyICJFMjQwOiBLZWluZSBWZXJiaW5kdW5nIHp1bSBWaW0tU2VydmVyIgorCisjOiBldmFsLmM6NTcxNgorbXNnaWQgIkUyNzc6IFVuYWJsZSB0byByZWFkIGEgc2VydmVyIHJlcGx5IgorbXNnc3RyICJFMjc3OiBTZXJ2ZXItQW50d29ydCBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuIgorCisjOiBldmFsLmM6NTc0MQorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODogS2FubiBuaWNodCB6dW0gQ2xpZW50IHNlbmRlbiIKKworIzogZXZhbC5jOjU3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MTogVW5hYmxlIHRvIHNlbmQgdG8gJXMiCittc2dzdHIgIkUyNDE6IEthbm4gbmljaHQgenUgJXMgc2VuZGVuIgorCisjOiBldmFsLmM6NTg4NAorbXNnaWQgIihJbnZhbGlkKSIKK21zZ3N0ciAiKHVuZ/xsdGlnKSIKKworIzogZXZhbC5jOjY4OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMTogVW5kZWZpbmVkIHZhcmlhYmxlOiAlcyIKK21zZ3N0ciAiRTEyMTogVmFyaWFibGUgbmljaHQgZGVmaW5pZXJ0OiAlcyIKKworIzogZXZhbC5jOjc1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMjogRnVuY3Rpb24gJXMgYWxyZWFkeSBleGlzdHMsIHVzZSAhIHRvIHJlcGxhY2UiCittc2dzdHIgIkUxMjI6IERpZSBGdW5rdGlvbiAlcyBleGlzdGllcnQgYmVyZWl0czsgZXJzZXR6ZSBzaWUgbWl0ICEiCisKKyM6IGV2YWwuYzo3NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjM6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMjM6IEZ1bmt0aW9uIG5pY2h0IGRlZmluaWVydDogJXMiCisKKyM6IGV2YWwuYzo3NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjQ6IE1pc3NpbmcgJygnOiAlcyIKK21zZ3N0ciAiRTEyNDogZmVobGVuZGVzICcoJzogJXMiCisKKyM6IGV2YWwuYzo3NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiBVbnp1bORzc2lnZXMgQXJndW1lbnQ6ICVzIgorCisjOiBldmFsLmM6Nzc2NgorbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiBmZWhsZW5kZXMgOmVuZGZ1bmN0aW9uIgorCisjOiBldmFsLmM6Nzg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzogRnVua3Rpb24gJXMga2FubiBuaWNodCB1bWRlZmluaWVydCB3ZXJkZW46IHNpZSBpc3QgaW4gVmVyd2VuZHVuZyIKKworIzogZXZhbC5jOjc5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODogRnVua3Rpb25zLU5hbWUgbXVzcyBtaXQgR3Jv32J1Y2hzdGFiZW4gYmVnaW5uZW46ICVzIgorCisjOiBldmFsLmM6NzkwOQorbXNnaWQgIkUxMjk6IEZ1bmN0aW9uIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUxMjk6IEZ1bmt0aW9ucy1OYW1lIHdpcmQgdmVybGFuZ3QiCisKKyM6IGV2YWwuYzo4MDAyCittc2dpZCAiZnVuY3Rpb24gIgorbXNnc3RyICJGdW5rdGlvbiAiCisKKyM6IGV2YWwuYzo4MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzA6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMzA6IEZ1bmt0aW9uIG5pY2h0IGRlZmluaWVydDogJXMiCisKKyM6IGV2YWwuYzo4MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzE6IENhbm5vdCBkZWxldGUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEzMTogRnVua3Rpb24gJXMga2FubiBuaWNodCBnZWz2c2NodCB3ZXJkZW46IHNpZSBpc3QgaW4gVmVyd2VuZHVuZyIKKworIzogZXZhbC5jOjgxNjkKK21zZ2lkICJFMTMyOiBGdW5jdGlvbiBjYWxsIGRlcHRoIGlzIGhpZ2hlciB0aGFuICdtYXhmdW5jZGVwdGgnIgorbXNnc3RyICJFMTMyOiBGdW5rdGlvbnNhdWZydWYtVGllZmUg/GJlcnNjaHJlaXRldCAnbWF4ZnVuY2RlcHRoJyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYWxsaW5nICVzIgorbXNnc3RyICJydWZlICVzIGF1ZiIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODI0NSBleF9jbWRzMi5jOjE5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAid2VpdGVyIGluICVzIgorCisjOiBldmFsLmM6ODI5OQorbXNnaWQgIkUxMzM6IDpyZXR1cm4gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTMzOiA6cmV0dXJuIGF132VyaGFsYiBlaW5lciBGdW5rdGlvbiIKKworIzogZXZhbC5jOjgzNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgIiVzIGxpZWZlcnRlICMlbGQgenVy/GNrIgorCisjOiBldmFsLmM6ODM4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICIlcyBsaWVmZXJ0ZSBcIiVzXCIgenVy/GNrIgorCisjOiBldmFsLmM6ODUyMQorbXNnaWQgIiIKKyJcbiIKKyIjIGdsb2JhbCB2YXJpYWJsZXM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIGdsb2JhbGUgVmFyaWFibGVuOlxuIgorCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9rdGFsICUwM28iCisKKyM6IGV4X2NtZHMuYzo0MjgKK21zZ2lkICJFMTM0OiBNb3ZlIGxpbmVzIGludG8gdGhlbXNlbHZlcyIKK21zZ3N0ciAiRTEzNDogVmVyc2NoaWViZSBaZWlsZW4gaW4gc2ljaCBzZWxic3QiCisKKyM6IGV4X2NtZHMuYzo0OTcKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgIjEgWmVpbGUgdmVyc2Nob2JlbiIKKworIzogZXhfY21kcy5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgbW92ZWQiCittc2dzdHIgIiVsZCBaZWlsZW4gdmVyc2Nob2JlbiIKKworIzogZXhfY21kcy5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgZmlsdGVyZWQiCittc2dzdHIgIiVsZCBaZWlsZW4gZ2VmaWx0ZXJ0IgorCisjOiBleF9jbWRzLmM6OTE4Cittc2dpZCAiRTEzNTogKkZpbHRlciogQXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTEzNTogKkZpbHRlciotQXV0by1Lb21tYW5kb3MgZPxyZmVuIGRlbiBha3R1ZWxsZW4gUHVmZmVyIG5pY2h0IORuZGVybiIKKworIzogZXhfY21kcy5jOjEwMDMKK21zZ2lkICJbTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2VdXG4iCittc2dzdHIgIltLZWluIFNjaHJlaWJlbiBzZWl0IGRlciBsZXR6dGVuIMRuZGVydW5nXVxuIgorCisjOiBleF9jbWRzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ2aW1pbmZvOiAlcyBpbiBsaW5lOiAiCittc2dzdHIgInZpbWluZm86ICVzIGluIFplaWxlOiAiCisKKyM6IGV4X2NtZHMuYzoxMjUzCittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIkUxMzY6IHZpbWluZm86IFp1IHZpZWxlIEZlaGxlcjsg/GJlcnNwcmluZ2UgUmVzdCBkZXIgRGF0ZWkiCisKKyM6IGV4X2NtZHMuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAiTGVzZW4gZGVyIHZpbWluZm8tRGF0ZWkgXCIlc1wiJXMlcyVzIgorCisjOiBleF9jbWRzLmM6MTI4MworbXNnaWQgIiBpbmZvIgorbXNnc3RyICIgSW5mb3JtYXRpb24iCisKKyM6IGV4X2NtZHMuYzoxMjg0Cittc2dpZCAiIG1hcmtzIgorbXNnc3RyICJNYXJraWVydW5nZW4iCisKKyM6IGV4X2NtZHMuYzoxMjg1Cittc2dpZCAiIEZBSUxFRCIKK21zZ3N0ciAiIERVUkNIR0VGQUxMRU4iCisKKyM6IGV4X2NtZHMuYzoxMzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzc6IFZpbWluZm8gZmlsZSBpcyBub3Qgd3JpdGFibGU6ICVzIgorbXNnc3RyICJFMTM3OiBWaW1pbmZvLURhdGVpIGlzdCBuaWNodCBzY2hyZWliYmFyOiAlcyIKKworIzogZXhfY21kcy5jOjE1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzODogQ2FuJ3Qgd3JpdGUgdmltaW5mbyBmaWxlICVzISIKK21zZ3N0ciAiRTEzODogU2NocmVpYmVuIGluIGRpZSB2aW1pbmZvLURhdGVpICVzIGlzdCBuaWNodCBt9mdsaWNoISIKKworIzogZXhfY21kcy5jOjE1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiIgorbXNnc3RyICJTY2hyZWliZW4gZGVyIHZpbWluZm8tRGF0ZWkgXCIlc1wiIgorCisjLiBXcml0ZSB0aGUgaW5mbzoKKyM6IGV4X2NtZHMuYzoxNjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVGhpcyB2aW1pbmZvIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBWaW0gJXMuXG4iCittc2dzdHIgIiMgRGllc2UgdmltaW5mby1EYXRlaSB3dXJkZSB2b24gVmltICVzIGdlbmVyaWVydC5cbiIKKworIzogZXhfY21kcy5jOjE2MTIKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIFNpZSBr9m5uZW4gc2llIHZlcuRuZGVybiwgd2VubiBTaWUgdm9yc2ljaHRpZyB2b3JnZWhlbiFcbiIKKyJcbiIKKworIzogZXhfY21kcy5jOjE2MTQKK21zZ2lkICIjIFZhbHVlIG9mICdlbmNvZGluZycgd2hlbiB0aGlzIGZpbGUgd2FzIHdyaXR0ZW5cbiIKK21zZ3N0ciAiIyBXZXJ0IHZvbiAnZW5jb2RpbmcnLCBhbHMgZGllc2UgRGF0ZWkgZ2VzY2hyaWViZW4gd3VyZGVcbiIKKworIzogZXhfY21kcy5jOjE3MTMKK21zZ2lkICJJbGxlZ2FsIHN0YXJ0aW5nIGNoYXIiCittc2dzdHIgIlVuenVs5HNzaWdlcyBaZWljaGVuIGFtIEFuZmFuZyIKKworIzogZXhfY21kcy5jOjIwNTMgZXhfY21kcy5jOjIzMTAgZXhfY21kczIuYzo2MDIKK21zZ2lkICJTYXZlIEFzIgorbXNnc3RyICJTY2hyZWliZSBBbHMiCisKKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjA5NgorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiBEYXRlaSBpc3QgaW4gZWluZW0gYW5kZXJlbiBQdWZmZXIgZ2VsYWRlbiIKKworIzogZXhfY21kcy5jOjIxMzAKK21zZ2lkICJXcml0ZSBwYXJ0aWFsIGZpbGU/IgorbXNnc3RyICJQYXJ0aWVsbGUgRGF0ZWkgc2NocmVpYmVuPyIKKworIzogZXhfY21kcy5jOjIxMzcKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiRTE0MDogVmVyd2VuZGVuIFNpZSAhIHp1bSBTY2hyZWliZW4gdm9uIHBhcnRpZWxsZW4gUHVmZmVybiIKKworIzogZXhfY21kcy5jOjIyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUgXCIlLipzXCI/IgorbXNnc3RyICLcYmVyc2NocmVpYmUgZXhpc3RpZXJlbmRlIERhdGVpIFwiJS4qc1wiPyIKKworIyBDdXJzb3I6IFNjaHJlaWJtYXJrZSBQb3NpdGlvbnNtYXJrZQorIzogZXhfY21kcy5jOjIzMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MTogTm8gZmlsZSBuYW1lIGZvciBidWZmZXIgJWxkIgorbXNnc3RyICJFMTQxOiBLZWluIERhdGVpbmFtZSBm/HIgUHVmZmVyICVsZCIKKworIzogZXhfY21kcy5jOjIzNTMKK21zZ2lkICJFMTQyOiBGaWxlIG5vdCB3cml0dGVuOiBXcml0aW5nIGlzIGRpc2FibGVkIGJ5ICd3cml0ZScgb3B0aW9uIgorbXNnc3RyICIiCisiRTE0MjogRGF0ZWkgd3VyZGUgbmljaHQgZ2VzY2hyaWViZW46IFNjaHJlaWJlbiBpc3QgZHVyY2ggZGllICd3cml0ZSctT3B0aW9uICIKKyJhdXNnZXNjaGFsdGV0IgorCisjOiBleF9jbWRzLmM6MjM3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IGZvciBcIiUuKnNcIi5cbiIKKyJEbyB5b3Ugd2lzaCB0byB3cml0ZSBhbnl3YXk/IgorbXNnc3RyICIiCisiJ3JlYWRvbmx5Jy1PcHRpb24gaXN0IGb8ciBcIiUuKnNcIiBnZXNldHp0LlxuIgorIk32Y2h0ZW4gU2llIHRyb3R6ZGVtIHNjaHJlaWJlbj8iCisKKyM6IGV4X2NtZHMuYzoyNTM4Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICJFZGl0aWVyZSBEYXRlaSIKKworIzogZXhfY21kcy5jOjMwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MzogQXV0b2NvbW1hbmRzIHVuZXhwZWN0ZWRseSBkZWxldGVkIG5ldyBidWZmZXIgJXMiCittc2dzdHIgIkUxNDM6IEF1dG8tS29tbWFuZG9zIGz2c2NodGVuIHVuZXJ3YXJ0ZXQgbmV1ZW4gUHVmZmVyICVzIgorCisjOiBleF9jbWRzLmM6MzE5MworbXNnaWQgIkUxNDQ6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIDp6IgorbXNnc3RyICJFMTQ0OiBuaWNodCBudW1lcmlzY2hlcyBBcmd1bWVudCBm/HIgOnoiCisKKyM6IGV4X2NtZHMuYzozMjc4Cittc2dpZCAiRTE0NTogU2hlbGwgY29tbWFuZHMgbm90IGFsbG93ZWQgaW4gcnZpbSIKK21zZ3N0ciAiRTE0NTogU2hlbGwgQmVmZWhsZSBzaW5kIGluIHJ2aW0gbmljaHQgZXJsYXVidCIKKworIzogZXhfY21kcy5jOjMzODUKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiBSZWd1bORyZSBBdXNkcvxja2Uga/ZubmVuIG5pY2h0IGR1cmNoIEJ1Y2hzdGFiZW4gYmVncmVuenQgd2VyZGVuIgorCisjOiBleF9jbWRzLmM6MzcyNworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHdpdGggJXMgKHkvbi9hL3EvbC9eRS9eWSk/IgorbXNnc3RyICJlcnNldHplIGR1cmNoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKKworIzogZXhfY21kcy5jOjQwOTIKK21zZ2lkICIoSW50ZXJydXB0ZWQpICIKK21zZ3N0ciAiKFVudGVyYnJvY2hlbikgIgorCisjOiBleF9jbWRzLmM6NDA5NgorbXNnaWQgIjEgc3Vic3RpdHV0aW9uIgorbXNnc3RyICJlaW5lIEVyc2V0enVuZyIKKworIzogZXhfY21kcy5jOjQwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIHN1YnN0aXR1dGlvbnMiCittc2dzdHIgIiVsZCBFcnNldHp1bmdlbiIKKworIzogZXhfY21kcy5jOjQxMDEKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIgYXVmIGVpbmVyIFplaWxlIgorCisjOiBleF9jbWRzLmM6NDEwMworIywgYy1mb3JtYXQKK21zZ2lkICIgb24gJWxkIGxpbmVzIgorbXNnc3RyICIgYXVmICVsZCBaZWlsZW4iCisKKyM6IGV4X2NtZHMuYzo0MTU0Cittc2dpZCAiRTE0NzogQ2Fubm90IGRvIDpnbG9iYWwgcmVjdXJzaXZlIgorbXNnc3RyICJFMTQ3OiBLYW5uIDpnbG9iYWwgbmljaHQgcmVrdXJzaXYgYXVzZvxocmVuIgorCisjOiBleF9jbWRzLmM6NDE4OQorbXNnaWQgIkUxNDg6IFJlZ3VsYXIgZXhwcmVzc2lvbiBtaXNzaW5nIGZyb20gZ2xvYmFsIgorbXNnc3RyICJFMTQ4OiBSZWd1bORyZXIgQXVzZHJ1Y2sgZmVobHQgaW4gZ2xvYmFsIgorCisjOiBleF9jbWRzLmM6NDIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIGZvdW5kIGluIGV2ZXJ5IGxpbmU6ICVzIgorbXNnc3RyICJNdXN0ZXIgaW4gamVkZXIgWmVpbGUgZ2VmdW5kZW46ICVzIgorCisjOiBleF9jbWRzLmM6NDMxOQorbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMgTGV0enRlIGVyc2V0enRlIFplaWNoZW5rZXR0ZTpcbiIKKyIkIgorCisjOiBleF9jbWRzLmM6NDQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQ5OiBTb3JyeSwgbm8gaGVscCBmb3IgJXMiCittc2dzdHIgIkUxNDk6IFNjaGFkZSwga2VpbmUgSGlsZmUgZvxyICVzIgorCisjOiBleF9jbWRzLmM6NDQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiCittc2dzdHIgIkhpbGZlLURhdGVpIFwiJXNcIiBuaWNodCBnZWZ1bmRlbiIKKworIzogZXhfY21kcy5jOjQ5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MDogTm90IGEgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiRTE1MDoga2VpbiBWZXJ6ZWljaG5pczogJXMiCisKKyM6IGV4X2NtZHMuYzo0OTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTI6IENhbm5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTUyOiAlcyBrYW5uIG5pY2h0IHp1bSBTY2hyZWliZW4gZ2X2ZmZuZXQgd2VyZGVuIgorCisjOiBleF9jbWRzLmM6NDk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE1MzogJXMga2FubiBuaWNodCB6dW0gTGVzZW4gZ2X2ZmZuZXQgd2VyZGVuIgorCisjOiBleF9jbWRzLmM6NTAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU0OiBEdXBsaWNhdGUgdGFnIFwiJXNcIiBpbiBmaWxlICVzIgorbXNnc3RyICJFMTU0OiBUYWcgXCIlc1wiIGlzdCBtZWhybWFscyBpbiBkZXIgRGF0ZWkgJXMiCisKKyM6IGV4X2NtZHMuYzo1MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjA6IFVua25vd24gc2lnbiBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE2MDogVW5iZWthbm50ZXIgXCJzaWduXCItQmVmZWhsOiAlcyIKKworIzogZXhfY21kcy5jOjUxNTkKK21zZ2lkICJFMTU2OiBNaXNzaW5nIHNpZ24gbmFtZSIKK21zZ3N0ciAiRTE1NjogTmFtZSBkZXMgWmVpY2hlbnMgZmVobHQiCisKKyM6IGV4X2NtZHMuYzo1MjA1Cittc2dpZCAiRTI1NTogVG9vIG1hbnkgc2lnbnMgZGVmaW5lZCIKK21zZ3N0ciAiRTI1NTogWnUgdmllbGUgWmVpY2hlbiBkZWZpbmllcnQiCisKKyM6IGV4X2NtZHMuYzo1MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTogVW5n/Gx0aWdlciBUZXh0IGb8ciBlaW4gWmVpY2hlbjogJXMiCisKKyM6IGV4X2NtZHMuYzo1MjcxIGV4X2NtZHMuYzo1NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTU6IFVua25vd24gc2lnbjogJXMiCittc2dzdHIgIkUxNTU6IFVuYmVrYW5udGVzIFplaWNoZW46ICVzIgorCisjOiBleF9jbWRzLmM6NTMxNworbXNnaWQgIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiCittc2dzdHIgIkUxNTk6IEZlaGxlbmRlIFplaWNoZW4tTnVtbWVyIgorCisjOiBleF9jbWRzLmM6NTM5NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU4OiBJbnZhbGlkIGJ1ZmZlciBuYW1lOiAlcyIKK21zZ3N0ciAiRTE1ODogdW5n/Gx0aWdlIFB1ZmZlci1OdW1tZXI6ICVzIgorCisjOiBleF9jbWRzLmM6NTQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU3OiBJbnZhbGlkIHNpZ24gSUQ6ICVsZCIKK21zZ3N0ciAiRTE1NzogdW5n/Gx0aWdlIFplaWNoZW4tSUQ6ICVsZCIKKworIzogZXhfY21kcy5jOjU2MDcKK21zZ2lkICJbRGVsZXRlZF0iCittc2dzdHIgIltnZWz2c2NodF0iCisKKyM6IGV4X2NtZHMyLmM6NzAKK21zZ2lkICJFbnRlcmluZyBEZWJ1ZyBtb2RlLiAgVHlwZSBcImNvbnRcIiB0byBsZWF2ZS4iCittc2dzdHIgIkRlYnVnLU1vZHVzLiBHZWJlbiBTaWUgXCJjb250XCIgenVtIFZlcmxhc3NlbiBlaW4uIgorCisjOiBleF9jbWRzMi5jOjc0IGV4X2RvY21kLmM6NzcxCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiAlcyIKK21zZ3N0ciAiWmVpbGUgJWxkOiAlcyIKKworIzogZXhfY21kczIuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjbWQ6ICVzIgorbXNnc3RyICJCZWZlaGw6ICVzIgorCisjOiBleF9jbWRzMi5jOjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIgorbXNnc3RyICJIYWx0ZXB1bmt0IGluIFwiJXMlc1wiIFplaWxlICVsZCIKKworIzogZXhfY21kczIuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MTogQnJlYWtwb2ludCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMTYxOiBIYWx0ZXB1bmt0IG5pY2h0IGdlZnVuZGVuOiAlcyIKKworIzogZXhfY21kczIuYzo0MTQKK21zZ2lkICJObyBicmVha3BvaW50cyBkZWZpbmVkIgorbXNnc3RyICJLZWluZSBIYWx0ZXB1bmt0ZSBkZWZpbmllcnQiCisKKyM6IGV4X2NtZHMyLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUzZCAgJXMgJXMgIGxpbmUgJWxkIgorbXNnc3RyICIlM2QgICVzICVzICBaZWlsZSAlbGQiCisKKyM6IGV4X2NtZHMyLmM6NjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmUgY2hhbmdlcyB0byBcIiUuKnNcIj8iCittc2dzdHIgIsRuZGVydW5nZW4gaW4gXCIlLipzXCIgc3BlaWNoZXJuPyIKKworIzogZXhfY21kczIuYzo2MjcgZXhfZG9jbWQuYzo4NjczCittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIlVuYmVuYW5udCIKKworIzogZXhfY21kczIuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MjogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxNjI6IFB1ZmZlciBcIiVzXCIgd3VyZGUgc2VpdCBkZXIgbGV0enRlbiDEbmRlcnVuZyBuaWNodCBnZXNjaHJpZWJlbiIKKworIzogZXhfY21kczIuYzo4MzIKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIiIKKyJBY2h0dW5nOiBVbmVyd2FydGV0ZXIgRWludHJpdHQgaW4gZWluZW4gYW5kcmVuIFB1ZmZlciAo/GJlcnBy/GZlbiBTaWVkaWUgIgorIkF1dG9jb21tYW5kcykiCisKKyM6IGV4X2NtZHMyLmM6MTIwOAorbXNnaWQgIkUxNjM6IFRoZXJlIGlzIG9ubHkgb25lIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE2MzogRXMgZ2lidCBudXIgZWluZSBEYXRlaSB6dW0gRWRpdGllcmVuIgorCisjOiBleF9jbWRzMi5jOjEyMTAKK21zZ2lkICJFMTY0OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGZpbGUiCittc2dzdHIgIkUxNjQ6IEthbm4gbmljaHQg/GJlciBkaWUgZXJzdGUgRGF0ZWkgaGluYXVzZ2VoZW4iCisKKyM6IGV4X2NtZHMyLmM6MTIxMgorbXNnaWQgIkUxNjU6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBmaWxlIgorbXNnc3RyICJFMTY1OiBLYW5uIG5pY2h0IPxiZXIgZGllIGxldHp0ZSBEYXRlaSBoaW5hdXNnZWhlbiIKKworIzogZXhfY21kczIuYzoxNjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIGluIFwiJXNcIiIKK21zZ3N0ciAiU3VjaGUgbmFjaCBcIiVzXCIgaW4gXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIlN1Y2hlIG5hY2ggXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGZvdW5kIGluICdydW50aW1lcGF0aCc6IFwiJXNcIiIKK21zZ3N0ciAiaW0gJ3J1bnRpbWVwYXRoJyBuaWNodCBnZWZ1bmRlbjogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE3MTQKK21zZ2lkICJTb3VyY2UgVmltIHNjcmlwdCIKK21zZ3N0ciAiVmltIFNrcmlwdCIKKworIzogZXhfY21kczIuYzoxODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAiS2FubiBrZWluIFZlcnplaWNobmlzIGVpbmxlc2VuOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAiXCIlc1wiIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbiIKKworIzogZXhfY21kczIuYzoxODY0CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAiWmVpbGUgJWxkOiBcIiVzXCIga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuIgorCisjOiBleF9jbWRzMi5jOjE4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJsZXNlIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxODgwCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgIlplaWxlICVsZDogbGVzZSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTk4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzb3VyY2luZyAlcyIKK21zZ3N0ciAiTGVzZW4gdm9uICVzIGJlZW5kZXQiCisKKyM6IGV4X2NtZHMyLmM6MjI4NworbXNnaWQgIlcxNTogV2FybmluZzogV3JvbmcgbGluZSBzZXBhcmF0b3IsIF5NIG1heSBiZSBtaXNzaW5nIgorbXNnc3RyICJXMTU6IEFjaHR1bmc6IEZhbHNjaGVyIFplaWxlbnRyZW5uZXIsIHZpZWxsZWljaHQgZmVobHQgZWluIF5NIgorCisjOiBleF9jbWRzMi5jOjIzMzYKK21zZ2lkICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgYXXfZXJoYWxiIGVpbmVyIGVpbmdlbGVzZW5lbiBEYXRlaSIKKworIzogZXhfY21kczIuYzoyMzY5Cittc2dpZCAiRTE2ODogOmZpbmlzaCB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjg6IDpmaW5pc2ggYXXfZXJoYWxiIGVpbmVyIGVpbmdlbGVzZW5lbiBEYXRlaSIKKworIzogZXhfY21kczIuYzoyODM4Cittc2dpZCAiTm8gdGV4dCB0byBiZSBwcmludGVkIgorbXNnc3RyICJLZWluIFRleHQgenVtIERydWNrZW4iCisKKyM6IGV4X2NtZHMyLmM6MjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyBwYWdlICVkICglZCUlKSIKK21zZ3N0ciAiRHJ1Y2tlIFNlaXRlICVkICglZCUlKSIKKworIzogZXhfY21kczIuYzoyOTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBDb3B5ICVkIG9mICVkIgorbXNnc3RyICIgS29waWUgJWQgdm9uICVkIgorCisjOiBleF9jbWRzMi5jOjI5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRlZDogJXMiCittc2dzdHIgIkdlZHJ1Y2t0OiAlcyIKKworIzogZXhfY21kczIuYzoyOTg0Cittc2dpZCAiUHJpbnRpbmcgYWJvcnRlZCIKK21zZ3N0ciAiRHJ1Y2tlbiBhYmdlYnJvY2hlbiIKKworIzogZXhfY21kczIuYzozMzY3Cittc2dpZCAiRTQ1NTogRXJyb3Igd3JpdGluZyB0byBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFNDU1OiBGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIFBvc3RTY3JpcHQgQXVzZ2FiZS1EYXRlaSIKKworIzogZXhfY21kczIuYzo0MDQyCittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiBQb3N0U2NyaXB0IEF1c2dhYmUtRGF0ZWkga2FubiBuaWNodCBnZfZmZm5ldCB3ZXJkZW4iCisKKyM6IGV4X2NtZHMyLmM6NDA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU2OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU2OiBEYXRlaSBcIiVzXCIga2FubiBuaWNodCBnZfZmZm5ldCB3ZXJkZW4iCisKKyM6IGV4X2NtZHMyLmM6NDA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6IFBvc3RTY3JpcHQgJ3Jlc291cmNlJy1EYXRlaSBcIiVzXCIga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiIKKworIzogZXhfY21kczIuYzo0Mjg5Cittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICJTY2hpY2tlIHp1bSBEcnVja2VyLi4uIgorCisjOiBleF9jbWRzMi5jOjQyOTMKK21zZ2lkICJFMzY1OiBGYWlsZWQgdG8gcHJpbnQgUG9zdFNjcmlwdCBmaWxlIgorbXNnc3RyICJFMzY1OiBEcnVjayBkZXIgUG9zdFNjcmlwdC1EYXRlaSBzY2hsdWcgZmVobCIKKworIzogZXhfY21kczIuYzo0Mjk1Cittc2dpZCAiUHJpbnQgam9iIHNlbnQuIgorbXNnc3RyICJEcnVja2F1ZnRyYWcgYWJnZXNjaGlja3QiCisKKyM6IGV4X2NtZHMyLmM6NDY5MQorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50ICVzbGFuZ3VhZ2U6IFwiJXNcIiIKK21zZ3N0ciAiTW9tZW50YW5lICVzU3ByYWNoZTogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6IFNwcmFjaGUga2FubiBuaWNodCBhdWYgXCIlc1wiIGdlc2V0enQgd2VyZGVuIgorCisjOiBleF9kb2NtZC5jOjQ5MAorbXNnaWQgIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIgorbXNnc3RyICIiCisiRXgtTW9kdXMuICBHZWJlbiBTaWUgXCJ2aXN1YWxcIiBlaW4sIHVtIHp1bSBOb3JtYWwtTW9kdXMgenVy/GNrenVrZWhyZW4uIgorCisjLiBtdXN0IGJlIGF0IEVPRgorIzogZXhfZG9jbWQuYzo1MjYKK21zZ2lkICJBdCBlbmQtb2YtZmlsZSIKK21zZ3N0ciAiQW0gRGF0ZWllbmRlIgorCisjOiBleF9kb2NtZC5jOjYwMQorbXNnaWQgIkUxNjk6IENvbW1hbmQgdG9vIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE2OTogQmVmZWhsIHp1IHJla3Vyc2l2IgorCisjOiBleF9kb2NtZC5jOjkxMQorbXNnaWQgIkUxNzA6IE1pc3NpbmcgOmVuZHdoaWxlIgorbXNnc3RyICJFMTcwOiBmZWhsZW5kZXMgOmVuZHdoaWxlIgorCisjOiBleF9kb2NtZC5jOjkxMworbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiBmZWhsZW5kZXMgOmVuZGlmIgorCisjOiBleF9kb2NtZC5jOjkyMworbXNnaWQgIkVuZCBvZiBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkVuZGUgZGVyIGVpbmdlbGVzZW5lbiBEYXRlaSIKKworIzogZXhfZG9jbWQuYzo5MjQKK21zZ2lkICJFbmQgb2YgZnVuY3Rpb24iCittc2dzdHIgIkVuZGUgZGVyIEZ1bmt0aW9uIgorCisjOiBleF9kb2NtZC5jOjEzNDQKK21zZ2lkICJBbWJpZ3VvdXMgdXNlIG9mIHVzZXItZGVmaW5lZCBjb21tYW5kIgorbXNnc3RyICJOaWNodC1laW5kZXV0aWdlIFZlcndlbmR1bmcgZWluZXMgYmVudXR6ZXJkZWZpbmllcnRlbiBCZWZlaGxzIgorCisjOiBleF9kb2NtZC5jOjEzNTgKK21zZ2lkICJOb3QgYW4gZWRpdG9yIGNvbW1hbmQiCittc2dzdHIgIktlaW4gRWRpdG9yLUJlZmVobCIKKworIzogZXhfZG9jbWQuYzoxNDQxCittc2dpZCAiRG9uJ3QgcGFuaWMhIgorbXNnc3RyICJOdXIga2VpbmUgUGFuaWshIgorCisjOiBleF9kb2NtZC5jOjE0NjAKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4iCittc2dzdHIgIkJlcmVpY2hzZ3JlbnplbiBy/GNrd+RydHMiCisKKyM6IGV4X2RvY21kLmM6MTQ2OQorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiwgT0sgdG8gc3dhcCIKK21zZ3N0ciAiQmVyZWljaHNncmVuemVuIHL8Y2t35HJ0czsgdmVydGF1c2NoZW4iCisKKyM6IGV4X2RvY21kLmM6MTU4MAorbXNnaWQgIlVzZSB3IG9yIHc+PiIKK21zZ3N0ciAiVmVyd2VuZGVuIFNpZSB3IG9kZXIgdz4+IgorCisjOiBleF9kb2NtZC5jOjMwOTcKK21zZ2lkICJFMzE5OiBTb3JyeSwgdGhlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUzMTk6IERlciBCZWZlaGwgaXN0IGluIGRpZXNlciBWZXJzaW9uIG5pY2h0IGltcGxlbWVudGllcnQiCisKKyM6IGV4X2RvY21kLmM6MzI2NworbXNnaWQgIkUxNzI6IE9ubHkgb25lIGZpbGUgbmFtZSBhbGxvd2VkIgorbXNnc3RyICJFMTcyOiBOdXIgZWluIERhdGVpbmFtZSBlcmxhdWJ0IgorCisjOiBleF9kb2NtZC5jOjM4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICIlZCB3ZWl0ZXJlIERhdGVpZW4genVtIEVkaXRpZXJlbi4gIFRyb3R6ZGVtIGJlZW5kZW4/IgorCisjOiBleF9kb2NtZC5jOjM4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3MzogJWxkIG1vcmUgZmlsZXMgdG8gZWRpdCIKK21zZ3N0ciAiRTE3MzogJWxkIHdlaXRlcmUgRGF0ZWllbiB6dW0gRWRpdGllcmVuIgorCisjOiBleF9kb2NtZC5jOjM5MjQKK21zZ2lkICJFMTc0OiBDb21tYW5kIGFscmVhZHkgZXhpc3RzOiB1c2UgISB0byByZWRlZmluZSIKK21zZ3N0ciAiRTE3NDogQmVmZWhsIGV4aXN0aWVydCBiZXJlaXRzOiB2ZXJ3ZW5kZW4gU2llICEgenVtIFVtZGVmaW5pZXJ0ZW4iCisKKyM6IGV4X2RvY21kLmM6NDAyOQorbXNnaWQgIiIKKyJcbiIKKyIgICAgTmFtZSAgICAgICAgQXJncyBSYW5nZSBDb21wbGV0ZSAgRGVmaW5pdGlvbiIKK21zZ3N0ciAiIgorIlxuIgorIiAgIE5hbWUgICAgICAgIEFyZ3MgQmVyZWljaCBGZXJ0aWcgIERlZmluaXRpb24iCisKKyM6IGV4X2RvY21kLmM6NDExOAorbXNnaWQgIk5vIHVzZXItZGVmaW5lZCBjb21tYW5kcyBmb3VuZCIKK21zZ3N0ciAiS2VpbmUgdm9tIEJlbnV0emVyIGRlZmluaWVydGVuIEJlZmVobGUgZ2VmdW5kZW4iCisKKyM6IGV4X2RvY21kLmM6NDE0OQorbXNnaWQgIkUxNzU6IE5vIGF0dHJpYnV0ZSBzcGVjaWZpZWQiCittc2dzdHIgIkUxNzU6IEtlaW4gQXR0cmlidXQgYW5nZWdlYmVuIgorCisjOiBleF9kb2NtZC5jOjQyMDEKK21zZ2lkICJFMTc2OiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIkUxNzY6IEZhbHNjaGUgQW56YWhsIHZvbiBBcmd1bWVudGVuIgorCisjOiBleF9kb2NtZC5jOjQyMTYKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiBa5GhsZXIga2FubiBuaWNodCB6d2VpbWFsIGFuZ2VnZWJlbiB3ZXJkZW4iCisKKyM6IGV4X2RvY21kLmM6NDIyNgorbXNnaWQgIkUxNzg6IEludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgY291bnQiCittc2dzdHIgIkUxNzg6IFVuZ/xsdGlnZSBWb3JlaW5zdGVsbHVuZyBm/HIgZGVuIFrkaGxlciIKKworIzogZXhfZG9jbWQuYzo0MjU0Cittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiBBcmd1bWVudCB3aXJkIHp1ciBWZXJ2b2xsc3TkbmRpZ3VuZyBiZW72dGlndCIKKworIzogZXhfZG9jbWQuYzo0MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiBVbmf8bHRpZ2VyIFZlcnZvbGxzdORuZGlndW5ncy1XZXJ0OiAlcyIKKworIzogZXhfZG9jbWQuYzo0MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MTogVW5n/Gx0aWdlcyBBdHRyaWJ1dDogJXMiCisKKyM6IGV4X2RvY21kLmM6NDMyMgorbXNnaWQgIkUxODI6IEludmFsaWQgY29tbWFuZCBuYW1lIgorbXNnc3RyICJFMTgyOiBVbmf8bHRpZ2VyIEJlZmVobHMtTmFtZSIKKworIzogZXhfZG9jbWQuYzo0MzM3Cittc2dpZCAiRTE4MzogVXNlciBkZWZpbmVkIGNvbW1hbmRzIG11c3Qgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIgorbXNnc3RyICJFMTgzOiBCZW51dHplcmRlZmluaWVydGUgQmVmZWhsZSBt/HNzZW4gbWl0IEdyb99idWNoc3RhYmVuIGJlZ2lubmVuIgorCisjOiBleF9kb2NtZC5jOjQ0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NDogTm8gc3VjaCB1c2VyLWRlZmluZWQgY29tbWFuZDogJXMiCittc2dzdHIgIkUxODQ6IFVuYmVrYW5udGVyIGJlbnV0emVyZGVmaW5pZXJ0ZXIgQmVmZWhsOiAlcyIKKworIzogZXhfZG9jbWQuYzo0ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTogWmVpbGUgJXMga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4iCisKKyM6IGV4X2RvY21kLmM6NDg2NQorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICJIZXJ6bGljaGUgR3L832UsIFZpbSBCZW51dHplciEiCisKKyM6IGV4X2RvY21kLmM6NTU2OQorbXNnaWQgIkVkaXQgRmlsZSBpbiBuZXcgd2luZG93IgorbXNnc3RyICJFZGl0aWVyZSBEYXRlaSBpbiBlaW5lbSBuZXVlbiBGZW5zdGVyIgorCisjOiBleF9kb2NtZC5jOjU4MzkKK21zZ2lkICJObyBzd2FwIGZpbGUiCittc2dzdHIgIktlaW5lIEF1c2xhZ2VydW5ncy1EYXRlaSIKKworIzogZXhfZG9jbWQuYzo1OTQzCittc2dpZCAiQXBwZW5kIEZpbGUiCittc2dzdHIgIkb8Z2UgRGF0ZWkgYW4iCisKKyM6IGV4X2RvY21kLmM6NjAwMgorbXNnaWQgIkUxODY6IE5vIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE4NjogS2VpbiB2b3JoZXJpZ2VzIFZlcnplaWNobmlzIgorCisjOiBleF9kb2NtZC5jOjYwNzkKK21zZ2lkICJFMTg3OiBVbmtub3duIgorbXNnc3RyICJFMTg3OiBVbmJla2FubnQiCisKKyM6IGV4X2RvY21kLmM6NjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIkZlbnN0ZXItUG9zaXRpb246IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NjIwMgorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisiRTE4ODogZGllIEZlbnN0ZXItUG9zaXRpb24ga2FubiBm/HIgZGllc2VzIFRlcm1pbmFsIG5pY2h0IGJlc3RpbW10IHdlcmRlbiIKKworIzogZXhfZG9jbWQuYzo2NDc0Cittc2dpZCAiU2F2ZSBSZWRpcmVjdGlvbiIKK21zZ3N0ciAiVW1sZWl0dW5nIFNwZWljaGVybiIKKworIzogZXhfZG9jbWQuYzo2NjIzCittc2dpZCAiU2F2ZSBWaWV3IgorbXNnc3RyICJBbnNpY2h0ZW4gU3BlaWNoZXJuIgorCisjOiBleF9kb2NtZC5jOjY2MjQKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIlNpdHp1bmcgU3BlaWNoZXJuIgorCisjOiBleF9kb2NtZC5jOjY2MjYKK21zZ2lkICJTYXZlIFNldHVwIgorbXNnc3RyICJFaW5zdGVsbHVuZ2VuIFNwZWljaGVybiIKKworIzogZXhfZG9jbWQuYzo2Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODk6IFwiJXNcIiBleGlzdHMgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTE4OTogXCIlc1wiIGV4aXN0aWVydCAoZXJ6d2luZ2UgZHVyY2ggISkiCisKKyM6IGV4X2RvY21kLmM6Njc4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxOTA6IFwiJXNcIiBrYW5uIG5pY2h0IHp1bSBTY2hyZWliZW4gZ2X2ZmZuZXQgd2VyZGVuIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo2ODA0Cittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICIiCisiRTE5MTogQXJndW1lbnQgbXVzcyBlaW4gQnVjaHN0YWJlIG9kZXIgdm9yd+RydHMvcvxja3fkcnRzLUFuZvxocnVuZ3N6ZWljaGVuICIKKyJzZWluIgorCisjOiBleF9kb2NtZC5jOjY4NDcKK21zZ2lkICJFMTkyOiBSZWN1cnNpdmUgdXNlIG9mIDpub3JtYWwgdG9vIGRlZXAiCittc2dzdHIgIkUxOTI6IFJla3Vyc2l2ZSBWZXJ3ZW5kdW5nIHZvbiA6bm9ybWFsIHp1IHRpZWYiCisKKyM6IGV4X2RvY21kLmM6NzIwOAorbXNnaWQgIjppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICI6aWYgU2NoYWNodGVsdW5nIHp1IHRpZWYiCisKKyM6IGV4X2RvY21kLmM6NzI0MworbXNnaWQgIjplbmRpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVuZGlmIG9obmUgOmlmIgorCisjOiBleF9kb2NtZC5jOjcyNjMKK21zZ2lkICI6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVsc2Ugb2huZSA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzI2NQorbXNnaWQgIjplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIjplbHNlaWYgb2huZSA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzMxNworbXNnaWQgIjp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICI6d2hpbGUgU2NoYWNodGVsdW5nIHp1IHRpZWYiCisKKyM6IGV4X2RvY21kLmM6NzM2MworbXNnaWQgIjpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiOmNvbnRpbnVlIG9obmUgOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjczOTAKK21zZ2lkICI6YnJlYWsgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIjpicmVhayBvaG5lIDp3aGlsZSIKKworIzogZXhfZG9jbWQuYzo3NDEzIGV4X2RvY21kLmM6NzQxOAorbXNnaWQgIjplbmR3aGlsZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiOmVuZHdoaWxlIG9obmUgOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjc0MzkKK21zZ2lkICJFMTkzOiA6ZW5kZnVuY3Rpb24gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTkzOiA6ZW5kZnVuY3Rpb24gYXXfZXJoYWxiIGVpbmVyIEZ1bmt0aW9uIgorCisjOiBleF9kb2NtZC5jOjc2MTkKK21zZ2lkICJFMTk0OiBObyBhbHRlcm5hdGUgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yICcjJyIKK21zZ3N0ciAiRTE5NDogS2VpbiBhbmRlcmVyIERhdGVpbmFtZSB6dXIgRXJzZXR6dW5nIG1pdCAnIyciCisKKyM6IGV4X2RvY21kLmM6NzY1MAorbXNnaWQgIm5vIGF1dG9jb21tYW5kIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhZmlsZT5cIiIKK21zZ3N0ciAia2VpbiBBdXRvLUtvbW1hbmRvLURhdGVpLU5hbWUgenVyIEVyc2V0enVuZyBtaXQgXCI8YWZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6NzY1OAorbXNnaWQgIm5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAia2VpbmUgQXV0by1Lb21tYW5kby1QdWZmZXItTnVtbWVyIHp1ciBFcnNldHp1bmcgbWl0IFwiPGFidWY+XCIiCisKKyM6IGV4X2RvY21kLmM6NzY2OQorbXNnaWQgIm5vIGF1dG9jb21tYW5kIG1hdGNoIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YW1hdGNoPlwiIgorbXNnc3RyICIiCisia2VpbiBwYXNzZW5kZXIgTmFtZSBlaW5lcyBBdXRvLUtvbW1hbmRvcyB6dXIgRXJzZXR6dW5nIG1pdCBcIjxhbWF0Y2g+XCIiCisKKyM6IGV4X2RvY21kLmM6NzY3OQorbXNnaWQgIm5vIDpzb3VyY2UgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPHNmaWxlPlwiIgorbXNnc3RyICJrZWluIDpzb3VyY2UgRGF0ZWluYW1lIHp1ciBFcnNldHp1bmcgbWl0IFwiPHNmaWxlPlwiIgorCisjOiBleF9kb2NtZC5jOjc3MjAKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZmlsZSBuYW1lIGZvciAnJScgb3IgJyMnLCBvbmx5IHdvcmtzIHdpdGggXCI6cDpoXCIiCittc2dzdHIgIkxlZXJlciBEYXRlaW5hbWUgZvxyICclJyBvZGVyICcjJywgZnVua3Rpb25pZXJ0IG51ciBtaXQgXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6NzcyMgorbXNnaWQgIkV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIkVyZ2lidCBlaW5lIGxlZXJlIFplaWNoZW5rZXR0ZSIKKworIzogZXhfZG9jbWQuYzo4NjU1Cittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiB2aW1pbmZvIGthbm4gbmljaHQgenVtIExlc2VuIGdl9mZmbmV0IHdlcmRlbiIKKworIzogZXhfZG9jbWQuYzo4ODI4Cittc2dpZCAiRTE5NjogTm8gZGlncmFwaHMgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJlZDkpIEtlaW5lIERpZ3JhcGhlbiBpbiBkaWVzZXIgVmVyc2lvbiIKKworIzogZXhfZ2V0bG4uYzoyODMzCittc2dpZCAidGFnbmFtZSIKK21zZ3N0ciAiVGFnLU5hbWUiCisKKyM6IGV4X2dldGxuLmM6MjgzNgorbXNnaWQgIiBraW5kIGZpbGVcbiIKK21zZ3N0ciAiIHZlcndhbmR0ZSBEYXRlaVxuIgorCisjOiBleF9nZXRsbi5jOjQwNDkKK21zZ2lkICInaGlzdG9yeScgb3B0aW9uIGlzIHplcm8iCittc2dzdHIgIidoaXN0b3J5Jy1PcHRpb24gaXN0IE51bGwiCisKKyM6IGV4X2dldGxuLmM6NDI4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyAlcyBIaXN0b3J5IChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgJXMgR2VzY2hpY2h0ZSAobmV1ZXN0ZSBiaXMg5Gx0ZXN0ZSk6XG4iCisKKyM6IGV4X2dldGxuLmM6NDI5MAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAiQmVmZWhsc3plaWxlIgorCisjOiBleF9nZXRsbi5jOjQyOTEKK21zZ2lkICJTZWFyY2ggU3RyaW5nIgorbXNnc3RyICJTdWNoYXVzZHJ1Y2siCisKKyM6IGV4X2dldGxuLmM6NDI5MgorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgIkF1c2RydWNrIgorCisjOiBleF9nZXRsbi5jOjQyOTMKK21zZ2lkICJJbnB1dCBMaW5lIgorbXNnc3RyICJFaW5nYWJlLVplaWxlIgorCisjOiBleF9nZXRsbi5jOjQzMjMKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyIPxiZXIgZGllIEzkbmdlIGRlcyBCZWZlaGxzIGhpbmF1cyIKKworIzogZXhfZ2V0bG4uYzo0NDkxCittc2dpZCAiRTE5OTogQWN0aXZlIHdpbmRvdyBvciBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiRTE5OTogYWt0aXZlcyBGZW5zdGVyIG9kZXIgUHVmZmVyIGdlbPZzY2h0IgorCisjOiBmaWxlaW8uYzozNTEKK21zZ2lkICJJbGxlZ2FsIGZpbGUgbmFtZSIKK21zZ3N0ciAidW56dWzkc3NpZ2VyIERhdGVpbmFtZSIKKworIzogZmlsZWlvLmM6Mzc1IGZpbGVpby5jOjUwMCBmaWxlaW8uYzoyNTE2IGZpbGVpby5jOjI1NTQKK21zZ2lkICJpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiaXN0IGVpbiBWZXJ6ZWljaG5pcyIKKworIzogZmlsZWlvLmM6Mzc3Cittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAiaXN0IGtlaW5lIERhdGVpIgorCisjOiBmaWxlaW8uYzo1MjIgZmlsZWlvLmM6MzY0NgorbXNnaWQgIltOZXcgRmlsZV0iCittc2dzdHIgIltOZXVlIERhdGVpXSIKKworIzogZmlsZWlvLmM6NTQwCittc2dpZCAiW1Blcm1pc3Npb24gRGVuaWVkXSIKK21zZ3N0ciAiW0tlaW5lIEVybGF1Ym5pc10iCisKKyM6IGZpbGVpby5jOjYzNAorbXNnaWQgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtYWRlIHRoZSBmaWxlIHVucmVhZGFibGUiCittc2dzdHIgIkUyMDA6ICpSZWFkUHJlIEF1dG8tS29tbWFuZG9zIGhhYmVuIGRpZSBEYXRlaSB1bmxlc2JhciBnZW1hY2h0IgorCisjOiBmaWxlaW8uYzo2MzYKK21zZ2lkICJFMjAxOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICIiCisiRTIwMTogKlJlYWRQcmUgQXV0by1Lb21tYW5kb3MgZPxyZmVuIG5pY2h0IGRlbiBha3R1ZWxsZW4gUHVmZmVyIHdlY2hzZWxuIgorCisjOiBmaWxlaW8uYzo2NTcKK21zZ2lkICJWaW06IFJlYWRpbmcgZnJvbSBzdGRpbi4uLlxuIgorbXNnc3RyICJWaW06IExlc2Ugdm9uIHN0ZGluLi4uXG4iCisKKyM6IGZpbGVpby5jOjY2MworbXNnaWQgIlJlYWRpbmcgZnJvbSBzdGRpbi4uLiIKK21zZ3N0ciAiTGVzZSB2b24gc3RkaW4uLi4iCisKKyMuIFJlLW9wZW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgZmFpbGVkIQorIzogZmlsZWlvLmM6ODkyCittc2dpZCAiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiCittc2dzdHIgIkUyMDI6IERhdGVpIHd1cmRlIHVubGVzYmFyIGR1cmNoIFVtd2FuZGx1bmciCisKKyM6IGZpbGVpby5jOjE3NTUKK21zZ2lkICJbZmlmby9zb2NrZXRdIgorbXNnc3RyICJbZmlmby9zb2NrZXRdIgorCisjOiBmaWxlaW8uYzoxNzYyCittc2dpZCAiW2ZpZm9dIgorbXNnc3RyICJbZmlmb10iCisKKyM6IGZpbGVpby5jOjE3NjkKK21zZ2lkICJbc29ja2V0XSIKK21zZ3N0ciAiW3NvY2tldF0iCisKKyM6IGZpbGVpby5jOjE3NzcKK21zZ2lkICJbUk9dIgorbXNnc3RyICJbUk9dIgorCisjOiBmaWxlaW8uYzoxNzg3Cittc2dpZCAiW0NSIG1pc3NpbmddIgorbXNnc3RyICJbQ1IgZmVobHRdIgorCisjOiBmaWxlaW8uYzoxNzkyCittc2dpZCAiW05MIGZvdW5kXSIKK21zZ3N0ciAiW05MIGdlZnVuZGVuXSIKKworIzogZmlsZWlvLmM6MTc5NworbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW2xhbmdlIFplaWxlbiBnZXRlaWx0XSIKKworIzogZmlsZWlvLmM6MTgwMyBmaWxlaW8uYzozNjMwCittc2dpZCAiW05PVCBjb252ZXJ0ZWRdIgorbXNnc3RyICJbTklDSFQga29udmVydGllcnRdIgorCisjOiBmaWxlaW8uYzoxODA4IGZpbGVpby5jOjM2MzUKK21zZ2lkICJbY29udmVydGVkXSIKK21zZ3N0ciAiW2tvbnZlcnRpZXJ0XSIKKworIzogZmlsZWlvLmM6MTgxNSBmaWxlaW8uYzozNjYwCittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJbdmVyc2NobPxzc2VsdF0iCisKKyM6IGZpbGVpby5jOjE4MjIKK21zZ2lkICJbQ09OVkVSU0lPTiBFUlJPUl0iCittc2dzdHIgIltVTVdBTkRMVU5HUy1GRUhMRVJdIgorCisjOiBmaWxlaW8uYzoxODI5Cittc2dpZCAiW1JFQUQgRVJST1JTXSIKK21zZ3N0ciAiW0xFU0UtRkVITEVSXSIKKworIzogZmlsZWlvLmM6MjAzNgorbXNnaWQgIkNhbid0IGZpbmQgdGVtcCBmaWxlIGZvciBjb252ZXJzaW9uIgorbXNnc3RyICJ0ZW1wb3LkcmUgRGF0ZWkga2FubiBuaWNodCB6dW0gVW13YW5kZWxuIGdl9mZmbmV0IHdlcmRlbiIKKworIzogZmlsZWlvLmM6MjA0MworbXNnaWQgIkNvbnZlcnNpb24gd2l0aCAnY2hhcmNvbnZlcnQnIGZhaWxlZCIKK21zZ3N0ciAiRmVobGVyIGJlaSBkZXIgVW13YW5kbHVuZyBtaXQgJ2NoYXJjb252ZXJ0JyIKKworIzogZmlsZWlvLmM6MjA0NgorbXNnaWQgImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciCittc2dzdHIgIkF1c2dhYmUgdm9uICdjaGFyY29udmVydCcga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiIKKworIzogZmlsZWlvLmM6MjQzMgorbXNnaWQgIkUyMDM6IEF1dG9jb21tYW5kcyBkZWxldGVkIG9yIHVubG9hZGVkIGJ1ZmZlciB0byBiZSB3cml0dGVuIgorbXNnc3RyICIiCisiRTIwMzogQXV0by1Lb21tYW5kb3MgaGFiZW4gZGVuIHp1IHNjaHJlaWJlbmRlbiBQdWZmZXIgZ2Vs9nNjaHQgb2RlciBoZXJhdXMgIgorImdlbGFkZW4iCisKKyM6IGZpbGVpby5jOjI0NTUKK21zZ2lkICJFMjA0OiBBdXRvY29tbWFuZCBjaGFuZ2VkIG51bWJlciBvZiBsaW5lcyBpbiB1bmV4cGVjdGVkIHdheSIKK21zZ3N0ciAiIgorIkUyMDQ6IEF1dG8tS29tbWFuZG9zIGhhYmVuIGRpZSBBbnphaGwgZGVyIFplaWxlbiBpbiB1bmVyd2FydGV0ZXIgV2Vpc2UgIgorInZlcuRuZGVydCIKKworIzogZmlsZWlvLmM6MjUyMSBmaWxlaW8uYzoyNTM4Cittc2dpZCAiaXMgbm90IGEgZmlsZSBvciB3cml0YWJsZSBkZXZpY2UiCittc2dzdHIgImlzdCBrZWluZSBEYXRlaSBvZGVyIGJlc2NocmVpYmJhcmVzIERldmljZSIKKworIzogZmlsZWlvLmM6MjU4NAorbXNnaWQgImlzIHJlYWQtb25seSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJpc3QgU2NocmVpYmdlc2No/HR6dCAoZXJ6d2luZ2UgZHVyY2ggISkiCisKKyM6IGZpbGVpby5jOjI4ODYKK21zZ2lkICJDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJTaWNoZXJ1bmdzLURhdGVpIGthbm4gbmljaHQgZ2VzY2hyaWViZW4gd2VyZGVuIChlcnp3aW5nZSBtaXQgISkiCisKKyM6IGZpbGVpby5jOjI4OTgKK21zZ2lkICJDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NobGll32VuIGRlciBTaWNoZXJ1bmdzLURhdGVpIChlcnp3aW5nZSBtaXQgISkiCisKKyM6IGZpbGVpby5jOjI5MDAKK21zZ2lkICJDYW4ndCByZWFkIGZpbGUgZm9yIGJhY2t1cCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJEYXRlaSB6dW0gQmFja3VwIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4gKGVyendpbmdlIG1pdCAhKSIKKworIzogZmlsZWlvLmM6MjkxNgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiQmFja3VwLURhdGVpIGthbm4gbmljaHQgYW5nZWxlZ3Qgd2VyZGVuIChlcnp3aW5nZSBtaXQgISkiCisKKyM6IGZpbGVpby5jOjMwMTgKK21zZ2lkICJDYW4ndCBtYWtlIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkJhY2t1cC1EYXRlaSBrYW5uIG5pY2h0IGVyc3RlbGx0IHdlcmRlbiAoZXJ6d2luZ2UgbWl0ICEpIgorCisjOiBmaWxlaW8uYzozMDgwCittc2dpZCAiVGhlIHJlc291cmNlIGZvcmsgd2lsbCBiZSBsb3N0ICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkRlciBSZXNvdXJjZWZvcmsgZ2VodCB2ZXJsb3JlbiAoZXJ6d2luZ2UgbWl0ICEpIgorCisjOiBmaWxlaW8uYzozMTY5Cittc2dpZCAiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTQ6IHRlbXBvcuRyZSBEYXRlaSBrYW5uIG5pY2h0IHp1bSBTY2hyZWliZW4gZ2X2ZmZuZXQgd2VyZGVuIgorCisjOiBmaWxlaW8uYzozMTg3Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKHVzZSAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIkUyMTM6IEZlaGxlciBiZWkgZGVyIFVtd2FuZGx1bmcgKHNjaHJlaWJlIG9obmUgVW13YW5kbHVuZyBtaXQgISkiCisKKyM6IGZpbGVpby5jOjMyMjIKK21zZ2lkICJFMTY2OiBDYW4ndCBvcGVuIGxpbmtlZCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTY2OiBHZWxpbmt0ZSBEYXRlaSBrYW5uIG5pY2h0IHp1bSBTY2hyZWliZW4gZ2X2ZmZuZXQgd2VyZGVuIgorCisjOiBmaWxlaW8uYzozMjI2Cittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiBEYXRlaSBrYW5uIG5pY2h0IHp1bSBTY2hyZWliZW4gZ2X2ZmZuZXQgd2VyZGVuIgorCisjOiBmaWxlaW8uYzozNDc1Cittc2dpZCAiQ2xvc2UgZmFpbGVkIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hsaWXfZW4iCisKKyM6IGZpbGVpby5jOjM1NDYKK21zZ2lkICJ3cml0ZSBlcnJvciwgY29udmVyc2lvbiBmYWlsZWQiCittc2dzdHIgIlNjaHJlaWItRmVobGVyLCBVbXdhbmRsdW5nIHNjaGx1ZyBmZWhsIgorCisjOiBmaWxlaW8uYzozNTUyCittc2dpZCAid3JpdGUgZXJyb3IgKGZpbGUgc3lzdGVtIGZ1bGw/KSIKK21zZ3N0ciAiU2NocmVpYmZlaGxlciAoRGF0ZWlzeXN0ZW0gdm9sbD8pIgorCisjOiBmaWxlaW8uYzozNjI1Cittc2dpZCAiIENPTlZFUlNJT04gRVJST1IiCittc2dzdHIgIktPTlZFUlRJRVJVTkdTLUZFSExFUiIKKworIzogZmlsZWlvLmM6MzY0MQorbXNnaWQgIltEZXZpY2VdIgorbXNnc3RyICJbQXVzZ2FiZWdlcuR0XSIKKworIzogZmlsZWlvLmM6MzY0NgorbXNnaWQgIltOZXddIgorbXNnc3RyICJbTmV1XSIKKworIzogZmlsZWlvLmM6MzY2OAorbXNnaWQgIiBbYV0iCittc2dzdHIgIiBbYV0iCisKKyM6IGZpbGVpby5jOjM2NjgKK21zZ2lkICIgYXBwZW5kZWQiCittc2dzdHIgIiBhbmdlZvxndCIKKworIzogZmlsZWlvLmM6MzY3MAorbXNnaWQgIiBbd10iCittc2dzdHIgIiBbd10iCisKKyM6IGZpbGVpby5jOjM2NzAKK21zZ2lkICIgd3JpdHRlbiIKK21zZ3N0ciAiIGdlc2NocmllYmVuIgorCisjOiBmaWxlaW8uYzozNzIwCittc2dpZCAiRTIwNTogUGF0Y2htb2RlOiBjYW4ndCBzYXZlIG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDU6IHBhdGNobW9kZTogT3JpZ2luYWwtRGF0ZWkga2FubiBuaWNodCBnZXNwZWljaGVydCB3ZXJkZW4iCisKKyM6IGZpbGVpby5jOjM3NDIKK21zZ2lkICJFMjA2OiBwYXRjaG1vZGU6IGNhbid0IHRvdWNoIGVtcHR5IG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDY6IHBhdGNobW9kZTogbGVlcmUgT3JpZ2luYWwtRGF0ZWkga2FubiBuaWNodCB2ZXLkbmRlcnQgd2VyZGVuIgorCisjOiBmaWxlaW8uYzozNzU3Cittc2dpZCAiRTIwNzogQ2FuJ3QgZGVsZXRlIGJhY2t1cCBmaWxlIgorbXNnc3RyICJFMjA3OiBCYWNrdXAtRGF0ZWkga2FubiBuaWNodCBnZWz2c2NodCB3ZXJkZW4iCisKKyM6IGZpbGVpby5jOjM4MDkKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBQ0hUVU5HOiBPcmlnaW5hbC1EYXRlaSBrYW5uIHZlcmxvcmVuIG9kZXIgemVyc3T2cnQgc2VpblxuIgorCisjOiBmaWxlaW8uYzozODExCittc2dpZCAiZG9uJ3QgcXVpdCB0aGUgZWRpdG9yIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIKK21zZ3N0ciAiYmVlbmRlIG5pY2h0IGRlbiBFZGl0b3IgYmlzIGRpZSBEYXRlaSBlcmZvbGdyZWljaCBnZXNjaHJpZWJlbiB3dXJkZSEiCisKKyM6IGZpbGVpby5jOjM4OTEKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW2Rvc10iCisKKyM6IGZpbGVpby5jOjM4OTEKK21zZ2lkICJbZG9zIGZvcm1hdF0iCittc2dzdHIgIltkb3MgRm9ybWF0XSIKKworIzogZmlsZWlvLmM6Mzg5OAorbXNnaWQgIlttYWNdIgorbXNnc3RyICJbbWFjXSIKKworIzogZmlsZWlvLmM6Mzg5OAorbXNnaWQgIlttYWMgZm9ybWF0XSIKK21zZ3N0ciAiW21hYyBGb3JtYXRdIgorCisjOiBmaWxlaW8uYzozOTA1Cittc2dpZCAiW3VuaXhdIgorbXNnc3RyICJbdW5peF0iCisKKyM6IGZpbGVpby5jOjM5MDUKK21zZ2lkICJbdW5peCBmb3JtYXRdIgorbXNnc3RyICJbdW5peCBGb3JtYXRdIgorCisjOiBmaWxlaW8uYzozOTMyCittc2dpZCAiMSBsaW5lLCAiCittc2dzdHIgIjEgWmVpbGUsICIKKworIzogZmlsZWlvLmM6MzkzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMsICIKK21zZ3N0ciAiJWxkIFplaWxlbiwgIgorCisjOiBmaWxlaW8uYzozOTM3Cittc2dpZCAiMSBjaGFyYWN0ZXIiCittc2dzdHIgIjEgWmVpY2hlbiIKKworIzogZmlsZWlvLmM6MzkzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxkIFplaWNoZW4iCisKKyM6IGZpbGVpby5jOjM5NDkKK21zZ2lkICJbbm9lb2xdIgorbXNnc3RyICJbbm9lb2xdIgorCisjOiBmaWxlaW8uYzozOTQ5Cittc2dpZCAiW0luY29tcGxldGUgbGFzdCBsaW5lXSIKK21zZ3N0ciAiW1Vudm9sbHN05G5kaWdlIGxldHp0ZSBaZWlsZV0iCisKKyMuIGRvbid0IG92ZXJ3cml0ZSBtZXNzYWdlcyBoZXJlCisjLiBtdXN0IGdpdmUgdGhpcyBwcm9tcHQKKyMuIGRvbid0IHVzZSBlbXNnKCkgaGVyZSwgZG9uJ3Qgd2FudCB0byBmbHVzaCB0aGUgYnVmZmVycworIzogZmlsZWlvLmM6Mzk2OAorbXNnaWQgIldBUk5JTkc6IFRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgcmVhZGluZyBpdCEhISIKK21zZ3N0ciAiQUNIVFVORzogRGllIERhdGVpIHd1cmRlIHNlaXQgZGVtIGxldHp0ZW4gTGVzZW4gZ2XkbmRlcnQhISEiCisKKyM6IGZpbGVpby5jOjM5NzAKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQiCittc2dzdHIgIk32Y2h0ZW4gU2llIGVzIHdpcmtsaWNoIHNjaHJlaWJlbiIKKworIzogZmlsZWlvLmM6NDkzMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogRmVobGVyIHfkaHJlbmQgZGVzIFNjaHJlaWJlbnMgbmFjaCBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjQ5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwOTogRXJyb3IgY2xvc2luZyBcIiVzXCIiCittc2dzdHIgIkUyMDk6IEZlaGxlciBiZWltIFNjaGxpZd9lbiB2b24gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo0OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTA6IEVycm9yIHJlYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFMjEwOiBGZWhsZXIgYmVpbSBMZXNlbiB2b24gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1MTE1Cittc2dpZCAiRTI0NjogRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTI0NjogRmlsZUNoYW5nZWRTaGVsbCBBdXRva29tbWFuZG8gbPZzY2h0ZSBQdWZmZXIiCisKKyM6IGZpbGVpby5jOjUxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMTogV2FybmluZzogRmlsZSBcIiVzXCIgbm8gbG9uZ2VyIGF2YWlsYWJsZSIKK21zZ3N0ciAiRTIxMTogQWNodHVuZzogRGF0ZWkgXCIlc1wiIGlzdCBuaWNodCBs5G5nZXIgdm9yaGFuZGVuIgorCisjOiBmaWxlaW8uYzo1MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiIgorIlcxMjogQWNodHVuZzogRGF0ZWkgXCIlc1wiIHd1cmRlIHZlcuRuZGVydCB1bmQgZGVyIFB1ZmZlciB3dXJkZSBlYmVuZmFsbHMgaW4gIgorIlZpbSB2ZXLkbmRlcnQiCisKKyM6IGZpbGVpby5jOjUxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIiIKKyJXMTE6IEFjaHR1bmc6IERhdGVpIFwiJXNcIiB3dXJkZSB2ZXLkbmRlcnQsIHNlaXQgbWl0IGRlbSBFZGl0aWVyZW4gIgorImFuZ2VmYW5nZW4gd3VyZGUiCisKKyM6IGZpbGVpby5jOjUxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzE2OiBXYXJuaW5nOiBNb2RlIG9mIGZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiIgorIlcxMTogQWNodHVuZzogTW9kZSBkZXIgRGF0ZWkgXCIlc1wiIHd1cmRlIHZlcuRuZGVydCBzZWl0IG1pdCBkZW0gRWRpdGllcmVuICIKKyJhbmdlZmFuZ2VuIHd1cmRlIgorCisjOiBmaWxlaW8uYzo1MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMzogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGJlZW4gY3JlYXRlZCBhZnRlciBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIiIKKyJXMTM6IEFjaHR1ZzogRGF0ZWkgXCIlc1wiIHd1cmRlIGVyc3RlbGx0LCBuYWNoZGVtIG1pdCBkZW0gRWRpdGllcmVuIGJlZ29ubmVuICIKKyJ3dXJkZSIKKworIzogZmlsZWlvLmM6NTE2OAorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIldhcm51bmciCisKKyM6IGZpbGVpby5jOjUxNjkKK21zZ2lkICIiCisiJk9LXG4iCisiJkxvYWQgRmlsZSIKK21zZ3N0ciAiIgorIiZPS1xuIgorIiZMZXNlIERhdGVpIgorCisjOiBmaWxlaW8uYzo1MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjE6IENvdWxkIG5vdCByZWxvYWQgXCIlc1wiIgorbXNnc3RyICJFMzIxOiBcIiVzXCIga29ubnRlIG5pY2h0IG5ldSBnZWxhZGVuIHdlcmRlbiIKKworIzogZmlsZWlvLmM6NTc3OQorbXNnaWQgIi0tRGVsZXRlZC0tIgorbXNnc3RyICItLWdlbPZzY2h0LS0iCisKKyMuIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0CisjOiBmaWxlaW8uYzo1OTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjc6IE5vIHN1Y2ggZ3JvdXA6IFwiJXNcIiIKK21zZ3N0ciAiRTM2NzogS2VpbmUgc29sY2hlIEdydXBwZTogXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2MDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyICo6ICVzIgorbXNnc3RyICJFMjE1OiBVbnp1bORzc2lnZXMgWmVpY2hlbiBuYWNoICo6ICVzIgorCisjOiBmaWxlaW8uYzo2MDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiBLZWluIGRlcmFydGlnZXMgRXJlaWduaXM6ICVzIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IGZpbGVpby5jOjYyMjQKK21zZ2lkICIiCisiXG4iCisiLS0tIEF1dG8tQ29tbWFuZHMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEF1dG8tS29tbWFuZG9zIC0tLSIKKworIzogZmlsZWlvLmM6NjQ5NQorbXNnaWQgIkUyMTc6IENhbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZXZlbnRzIgorbXNnc3RyICJFMjE3OiBBdXRvLUtvbW1hbmRvcyBr9m5uZW4gbmljaHQgZvxyIEFMTCBFcmVpZ25pc3NlIGF1c2dlZvxocnQgd2VyZGVuIgorCisjOiBmaWxlaW8uYzo2NTE4Cittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICJLZWluZSBwYXNzZW5kZW4gQXV0by1Lb21tYW5kb3MiCisKKyM6IGZpbGVpby5jOjY3OTAKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiBBdXRvLUtvbW1hbmRvIFNjaGFjaHRlbHVuZyB6dSB0aWVmIgorCisjOiBmaWxlaW8uYzo3MDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIEF1dG8gY29tbWFuZHMgZm9yIFwiJXNcIiIKK21zZ3N0ciAiJXMgQXV0by1Lb21tYW5kb3MgZvxyIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NzA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmcgJXMiCittc2dzdHIgIkF1c2b8aHJ1bmcgdm9uICVzIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGZpbGVpby5jOjcxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXV0b2NvbW1hbmQgJXMiCittc2dzdHIgIkF1dG9rb21tYW5kbyAlcyIKKworIzogZmlsZWlvLmM6NzY3NQorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IEVzIGZlaGx0IGVpbiB7LiIKKworIzogZmlsZWlvLmM6NzY3NworbXNnaWQgIkUyMjA6IE1pc3NpbmcgfS4iCittc2dzdHIgIkUyMjA6IEVzIGZlaGx0IGVpbiB9LiIKKworIzogZm9sZC5jOjY2Cittc2dpZCAiTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAiS2VpbmUgRmFsdHVuZyBnZWZ1bmRlbiIKKworIzogZm9sZC5jOjU1MworbXNnaWQgIkUzNTA6IENhbm5vdCBjcmVhdGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICIiCisiRTM1MDogRmFsdHVuZyBrYW5uIG1pdCBkZXIgZWluZ2VzdGVsbHRlbiBNZXRob2RlICdmb2xkbWV0aG9kJyBuaWNodCBlcnpldWd0ICIKKyJ3ZXJkZW4iCisKKyM6IGZvbGQuYzo1NTUKK21zZ2lkICJFMzUxOiBDYW5ub3QgZGVsZXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiIgorIkUzNTE6IEZhbHR1bmcga2FubiBtaXQgZGVyIGVpbmdlc3RlbGx0ZW4gTWV0aG9kZSAnZm9sZG1ldGhvZCcgbmljaHQgZW50ZmVybnQgIgorIndlcmRlbiIKKworIzogZ2V0Y2hhci5jOjI0NworbXNnaWQgIkUyMjI6IEFkZCB0byByZWFkIGJ1ZmZlciIKK21zZ3N0ciAiRTIyMjogWnVtIExlc2UtUHVmZmVyIEhpbnp1ZvxnZW4iCisKKyM6IGdldGNoYXIuYzoyMTA2Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6IHJla3Vyc2l2ZSBadW9yZG51bmciCisKKyM6IGdldGNoYXIuYzoyOTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjQ6IGdsb2JhbCBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI0OiBHbG9iYWxlIEFia/xyenVuZyBm/HIgJXMgZXhpc3RpZXJ0IGJlcmVpdHMiCisKKyM6IGdldGNoYXIuYzoyOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTogR2xvYmFsZSBadW9yZG51bmcgZvxyICVzIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBnZXRjaGFyLmM6MzA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI2OiBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI2OiBBYmv8cnp1bmcgZvxyICVzIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBnZXRjaGFyLmM6MzA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI3OiBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNzogWnVvcmRudW5nIGb8ciAlcyBleGlzdGllcnQgYmVyZWl0cyIKKworIzogZ2V0Y2hhci5jOjMxNDUKK21zZ2lkICJObyBhYmJyZXZpYXRpb24gZm91bmQiCittc2dzdHIgIktlaW5lIEFia/xyenVuZyBnZWZ1bmRlbiIKKworIzogZ2V0Y2hhci5jOjMxNDcKK21zZ2lkICJObyBtYXBwaW5nIGZvdW5kIgorbXNnc3RyICJLZWluZSBadW9yZG51bmcgZ2VmdW5kZW4iCisKKyM6IGdldGNoYXIuYzozOTkyCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiBVbnp1bORzc2lnZXIgTW9kdXMiCisKKyM6IGd1aS5jOjIwMworbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiBHVUkga2FubiBuaWNodCBnZXN0YXJ0ZXQgd2VyZGVuIgorCisjOiBndWkuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzMDogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyMzA6IEthbm4gbmljaHQgdm9uIFwiJXNcIiBsZXNlbiIKKworIzogZ3VpLmM6NDUzCittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiAnZ3VpZm9udHdpZGUnIHVuZ/xsdGlnIgorCisjOiBndWkuYzozNzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTQ6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciAlcyIKK21zZ3N0ciAiRTI1NDogRmFyYmUgZvxyICVzIGthbm4gbmljaHQgYWxsb3ppZXJ0IHdlcmRlbiIKKworIzogZ3VpLmM6Mzk4OQorbXNnaWQgIkVycm9yIgorbXNnc3RyICJGZWhsZXIiCisKKyM6IGd1aV9hdF9mcy5jOjI5MAorbXNnaWQgIjxjYW5ub3Qgb3Blbj4gIgorbXNnc3RyICI8a2FubiBuaWNodCD2ZmZuZW4+IgorCisjOiBndWlfYXRfZnMuYzoxMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAidmltX1NlbEZpbGU6IFNjaHJpZnRhcnQgJXMga2FubiBuaWNodCBlcmhhbHRlbiB3ZXJkZW4iCisKKyM6IGd1aV9hdF9mcy5jOjI1MzgKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJ2aW1fU2VsRmlsZToga2FubiBuaWNodCB6dW0gbGF1ZmVuZGVuIFZlcnplaWNobmlzIHp1cvxja2tlaHJlbiIKKworIzogZ3VpX2F0X2ZzLmM6MjU1NworbXNnaWQgIlBhdGhuYW1lOiIKK21zZ3N0ciAiUGZhZDoiCisKKyM6IGd1aV9hdF9mcy5jOjI1NjMKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJ2aW1fU2VsRmlsZTogbGF1ZmVuZGVzIFZlcnplaWNobmlzIGthbm4gbmljaHQgZXJtaXR0ZWx0IHdlcmRlbiIKKworIzogZ3VpX2F0X2ZzLmM6MjU3MSBndWlfbW90aWYuYzoxNjE5Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjLiAnQ2FuY2VsJyBidXR0b24KKyM6IGd1aV9hdF9mcy5jOjI1NzEgZ3VpX2d0ay5jOjE3NDAgZ3VpX21vdGlmLmM6MTYxNCBndWlfbW90aWYuYzoyODM1Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBYmJyZWNoZW4iCisKKyM6IGd1aV9hdF9zYi5jOjQ4NgorbXNnaWQgIlNjcm9sbGJhciBXaWRnZXQ6IENvdWxkIG5vdCBnZXQgZ2VvbWV0cnkgb2YgdGh1bWIgcGl4bWFwLiIKK21zZ3N0ciAiU2Nyb2xsYmFyIFdpZGdldDogR2VvbWV0cmllIGRlcyBCaWxkY2hlbnMga2FubiBuaWNodCBlcm1pdHRlbHQgd2VyZGVuIgorCisjOiBndWlfYXRoZW5hLmM6MTk1NiBndWlfbW90aWYuYzoxODY3Cittc2dpZCAiVmltIGRpYWxvZyIKK21zZ3N0ciAiVklNIC0gRGlhbG9nLi4uIgorCisjOiBndWlfYmV2YWwuYzo2OAorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICIiCisiRTIzMjogQmFsbG9vbkV2YWwga2FubiBuaWNodCBtaXQgc293b2hsIFwibWVzc2FnZVwiIHVuZCBcImNhbGxiYWNrXCIgZXJ6ZXVndCAiCisid2VyZGVuIgorCisjOiBndWlfZ3RrLmM6MTE5MAorbXNnaWQgIlZpbSBkaWFsb2cuLi4iCittc2dzdHIgIlZJTSAtIERpYWxvZy4uLiIKKworIzogZ3VpX2d0ay5jOjE1NzYgZ3VpX21vdGlmLmM6Mjc1NAorbXNnaWQgIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIKK21zZ3N0ciAiVklNIC0gU3VjaGVuIHVuZCBFcnNldHplbi4uLiIKKworIzogZ3VpX2d0ay5jOjE1ODEgZ3VpX21vdGlmLmM6Mjc1NgorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiVklNIC0gU3VjaGVuLi4uIgorCisjOiBndWlfZ3RrLmM6MTYwNCBndWlfbW90aWYuYzoyODc0Cittc2dpZCAiRmluZCB3aGF0OiIKK21zZ3N0ciAiV29uYWNoIHN1Y2hlbjoiCisKKyM6IGd1aV9ndGsuYzoxNjIyIGd1aV9tb3RpZi5jOjI5MDYKK21zZ2lkICJSZXBsYWNlIHdpdGg6IgorbXNnc3RyICJFcnNldHplbiBtaXQ6IgorCisjLiBleGFjdCBtYXRjaCBvbmx5IGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE2NTQgZ3VpX21vdGlmLmM6MzAwOAorbXNnaWQgIk1hdGNoIGV4YWN0IHdvcmQgb25seSIKK21zZ3N0ciAiUGFzc2VuZCBm/HIgZWluemVsbmUgV/ZydGVyIgorCisjOiBndWlfZ3RrLmM6MTY2NiBndWlfbW90aWYuYzoyOTc2Cittc2dpZCAiRGlyZWN0aW9uIgorbXNnc3RyICJSaWNodHVuZyIKKworIy4gJ1VwJyBhbmQgJ0Rvd24nIGJ1dHRvbnMKKyM6IGd1aV9ndGsuYzoxNjc4IGd1aV9tb3RpZi5jOjI5ODgKK21zZ2lkICJVcCIKK21zZ3N0ciAiQXVmIgorCisjOiBndWlfZ3RrLmM6MTY4MiBndWlfbW90aWYuYzoyOTk2Cittc2dpZCAiRG93biIKK21zZ3N0ciAiQWIiCisKKyMuICdGaW5kIE5leHQnIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE3MDQgZ3VpX21vdGlmLmM6Mjc3OAorbXNnaWQgIkZpbmQgTmV4dCIKK21zZ3N0ciAiU3VjaGUgTuRjaHN0ZXMiCisKKyMuICdSZXBsYWNlJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNzIxIGd1aV9tb3RpZi5jOjI3OTUKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICJFcnNldHplbiIKKworIy4gJ1JlcGxhY2UgQWxsJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNzMwIGd1aV9tb3RpZi5jOjI4MDgKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAiQWxsZSBFcnNldHplbiIKKworIzogZ3VpX2d0a194MTEuYzoxMDc5IGd1aV94MTEuYzoxMTk5Cittc2dpZCAiRTIzMzogY2Fubm90IG9wZW4gZGlzcGxheSIKK21zZ3N0ciAiRTIzMzogRGlzcGxheSBrYW5uIG5pY2h0IGdl9mZmbmV0IHdlcmRlbiIKKworIzogZ3VpX2d0a194MTEuYzoyNDk0IGd1aV94MTEuYzoxOTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzQ6IFVua25vd24gZm9udHNldDogJXMiCittc2dzdHIgIkUyMzQ6IFVuYmVrYW5udGVyIEZvbnRzZXQ6ICVzIgorCisjOiBndWlfZ3RrX3gxMS5jOjI1MTgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAiQXVzd2FobCBkZXIgU2NocmlmdGFydCIKKworIzogZ3VpX2d0a194MTEuYzoyNzY0IGd1aV9tYWMuYzoyOTgyIGd1aV93NDguYzoxMTk3IGd1aV94MTEuYzoxODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IFVua25vd24gZm9udDogJXMiCittc2dzdHIgIkUyMzU6IFVuYmVrYW5udGUgU2NocmlmdGFydDogJXMiCisKKyM6IGd1aV9ndGtfeDExLmM6Mjc3NSBndWlfeDExLmM6MTg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IFNjaHJpZnRhcnQgXCIlc1wiIGhhdCBrZWluZSBmZXN0ZSBCcmVpdGUiCisKKyM6IGd1aV9ndGtfeDExLmM6MzU4MCB1aS5jOjE5NzEKK21zZ2lkICJVc2VkIENVVF9CVUZGRVIwIGluc3RlYWQgb2YgZW1wdHkgc2VsZWN0aW9uIgorbXNnc3RyICJDVVRfQlVGRkVSMCBhbnN0YXR0IGRlciBsZWVyZW4gQXVzd2FobCBiZW51dHp0IgorCisjOiBndWlfbW90aWYuYzoxNjEzIGd1aV9tb3RpZi5jOjE2MTYKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRlciIKKworIzogZ3VpX21vdGlmLmM6MTYxNQorbXNnaWQgIkRpcmVjdG9yaWVzIgorbXNnc3RyICJWZXJ6ZWljaG5pc3NlIgorCisjOiBndWlfbW90aWYuYzoxNjE3Cittc2dpZCAiSGVscCIKK21zZ3N0ciAiSGlsZmUiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTgKK21zZ2lkICJGaWxlcyIKK21zZ3N0ciAiRGF0ZWllbiIKKworIzogZ3VpX21vdGlmLmM6MTYyMAorbXNnaWQgIlNlbGVjdGlvbiIKK21zZ3N0ciAiQXVzd2FobCIKKworIzogZ3VpX21vdGlmLmM6MjgyMQorbXNnaWQgIlVuZG8iCittc2dzdHIgIlL8Y2tn5G5naWciCisKKyM6IGd1aV9yaXNjb3MuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogQ2FuJ3QgbG9hZCBaYXAgZm9udCAnJXMnIgorbXNnc3RyICJFMjM1OiBaYXAtU2NocmlmdGFydCAnJXMnIGthbm4gbmljaHQgZ2VsYWRlbiB3ZXJkZW4iCisKKyM6IGd1aV9yaXNjb3MuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IENhbid0IHVzZSBmb250ICVzIgorbXNnc3RyICJFMjM1OiBTY2hyaWZ0YXJ0ICVzIGthbm4gbmljaHQgdmVyd2VuZGV0IHdlcmRlbiIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNjkKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2VuZGUgTmFjaHJpY2h0IHp1bSBCZWVuZGVuIGRlcyBLaW5kLVByb3plc3Nlcy5cbiIKKworIzogZ3VpX3czMi5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiIgorIkUyNDM6IEFyZ3VtZW50IHdpcmQgbmljaHQgdW50ZXJzdPx0enQ6IFwiLSVzXCI7IHZlcndlbmRlIGRpZSBPTEUgVmVyc2lvbi4iCisKKyMuIFRPRE86IE1heSBiZSBjaGFuZ2VkIHRoaXMgbWVzc2FnZQorIzogZ3VpX3czMi5jOjM0NDggZ3VpX3czMi5jOjM0ODEgZ3VpX3gxMS5jOjMyNTIKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IEZlaGxlciAtLSBEYXRlbiBm/HIgRGVidWdnZXItU3ltYm9sIGtvbm50ZW4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4iCisKKyM6IGd1aV93NDguYzoyMDgxCittc2dpZCAiRmluZCBzdHJpbmcgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAiU3VjaGUgWmVpY2hlbmtldHRlIChiZW78dHplICdcXFxcJyB1bSBlaW4gJ1xcJyB6dSBmaW5kZW4pIgorCisjOiBndWlfdzQ4LmM6MjEwNgorbXNnaWQgIkZpbmQgJiBSZXBsYWNlICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIlN1Y2hlICYgRXJzZXR6ZSAodXNlICdcXFxcJyB1bSBlaW4gJ1xcJyB6dSBmaW5kZW4pIgorCisjOiBndWlfeDExLmM6MTQxOQorbXNnaWQgIlZpbSBFNDU4OiBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnksIHNvbWUgY29sb3JzIG1heSBiZSBpbmNvcnJlY3QiCittc2dzdHIgIiIKKyJWaW0gRTQ1ODogXCJDb2xvcm1hcFwiLUVpbnRyYWcga2FubiBuaWNodCBhbGxvemllcnQgd2VyZGVuLCBlaW5pZ2UgRmFyYmVuICIKKyJr9m5uZW4gZmFsc2NoIHNlaW4iCisKKyM6IGd1aV94MTEuYzoxOTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICIiCisiRTI1MDogU2NocmlmdGFydGVuIGb8ciBkaWUgZm9sZ2VuZGVuIFplaWNoZW5z5HR6ZSBmZWhsZW4gaW0gXCJmb250c2V0XCIgJXM6IgorCisjOiBndWlfeDExLmM6MjAzMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUyOiBGb250c2V0IG5hbWU6ICVzIgorbXNnc3RyICJFMjUyOiBGb250c2V0IE5hbWU6ICVzIgorCisjOiBndWlfeDExLmM6MjAzMworIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJTY2hyaWZ0YXJ0ICclcycgaGF0IGtlaW5lIGZlc3RlIGJyZWl0ZSIKKworIzogZ3VpX3gxMS5jOjIwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MzogRm9udHNldCBuYW1lOiAlc1xuIgorbXNnc3RyICJFMjUzOiBGb250c2V0IE5hbWU6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwOiAlc1xuIgorbXNnc3RyICJTY2hyaWZ0YXJ0IDA6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQxOiAlc1xuIgorbXNnc3RyICJTY2hyaWZ0YXJ0IDE6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQlZCB3aWR0aCBpcyBub3QgdHdpY2UgdGhhdCBvZiBmb250MFxuIgorbXNnc3RyICJTY2hyaWZ0YXJ0JWQgaXN0IG5pY2h0IGRvcHBlbHQgc28gYnJlaXQgd2llIFNjaHJpZnRhcnQwXG4iCisKKyM6IGd1aV94MTEuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwIHdpZHRoOiAlbGRcbiIKK21zZ3N0ciAiU2NocmlmdGFydDAgQnJlaXRlOiAlbGRcbiIKKworIzogZ3VpX3gxMS5jOjIwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvbnQxIHdpZHRoOiAlbGRcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlNjaHJpZnRhcnQxIEJyZWl0ZTogJWxkXG4iCisiXG4iCisKKyM6IGhhbmd1bGluLmM6NjEwCittc2dpZCAiRTI1NjogSGFuZ3VsIGF1dG9tYXRhIEVSUk9SIgorbXNnc3RyICJFMjU2OiBIYW5ndWwtQXV0b21hdCBGZWhsZXIiCisKKyM6IGlmX2NzY29wZS5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjc1tjb3BlXSAlcyIKK21zZ3N0ciAiVmVyd2VuZHVuZzogY3NbY29wZV0gJXMiCisKKyM6IGlmX2NzY29wZS5jOjY3Cittc2dpZCAiQWRkIGEgbmV3IGRhdGFiYXNlIgorbXNnc3RyICJEYXRlbmJhbmsgaGluenVm/GdlbiIKKworIzogaWZfY3Njb3BlLmM6NjkKK21zZ2lkICJRdWVyeSBmb3IgYSBwYXR0ZXJuIgorbXNnc3RyICJNdXN0ZXIgc3VjaGVuIgorCisjOiBpZl9jc2NvcGUuYzo3MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICJkaWVzZSBOYWNocmljaHQgYW56ZWlnZW4iCisKKyM6IGlmX2NzY29wZS5jOjczCittc2dpZCAiS2lsbCBhIGNvbm5lY3Rpb24iCittc2dzdHIgIlZlcmJpbmR1bmcgYWJicmVjaGVuIgorCisjOiBpZl9jc2NvcGUuYzo3NQorbXNnaWQgIlJlaW5pdCBhbGwgY29ubmVjdGlvbnMiCittc2dzdHIgIlZlcmJpbmR1bmdlbiByZWluaXRpYWxpc2llcmVuIgorCisjOiBpZl9jc2NvcGUuYzo3NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIlZlcmJpbmR1bmdlbiBhbnplaWdlbiIKKworIzogaWZfY3Njb3BlLmM6MTA4Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICJEaWVzZXIgY3Njb3BlLUJlZmVobCB1bnRlcnN0/HR6dCBuaWNodCBUZWlsZW4gZGVzIEZlbnN0ZXJzLlxuIgorCisjOiBpZl9jc2NvcGUuYzoxNDMKK21zZ2lkICJVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiVmVyd2VuZHVuZzogY3N0YWcgPGlkZW50PiIKKworIzogaWZfY3Njb3BlLmM6MTk5Cittc2dpZCAiRTI1NzogY3N0YWc6IHRhZyBub3QgZm91bmQiCittc2dzdHIgIkUyNTc6IGNzdGFnOiBUYWcgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGlmX2NzY29wZS5jOjQwNyBpZl9jc2NvcGUuYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdCglcykgZXJyb3I6ICVkIgorbXNnc3RyICJzdGF0KCVzKSBGZWhsZXI6ICVkIgorCisjOiBpZl9jc2NvcGUuYzo0NjAgaWZfY3Njb3BlLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGVkIGNzY29wZSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAiY3NvcGUgRGF0ZW5iYW5rICVzIGhpbnp1Z2Vm/Gd0IgorCisjOiBpZl9jc2NvcGUuYzo0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgZGlyZWN0b3J5IG9yIGEgdmFsaWQgY3Njb3BlIGRhdGFiYXNlIgorbXNnc3RyICIlcyBpc3Qga2VpbiBWZXJ6ZWljaG5pcyBvZGVyIHp1bORzc2lnZSBjc2NvcGUgRGF0ZW5iYW5rIgorCisjOiBpZl9jc2NvcGUuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gYXVzIGRlciBjc2NvcGUgVmVyYmluZHVuZyAlZCIKKworIzogaWZfY3Njb3BlLmM6NjMzCittc2dpZCAidW5rbm93biBjc2NvcGUgc2VhcmNoIHR5cGUiCittc2dzdHIgInVuYmVrYW5udGVyIGNzY29wZSBTdWNodHlwIgorCisjOiBpZl9jc2NvcGUuYzo2ODAKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiY3Njb3BlIFBpcGVzIGtvbm50ZW4gbmljaHQgYW5nZWxlZ3Qgd2VyZGVuIgorCisjOiBpZl9jc2NvcGUuYzo3NDUKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb24gZXhlYyBtaXNzbGFuZyIKKworIzogaWZfY3Njb3BlLmM6NzU1Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIHZvbiB0b19mcCBtaXNzbGFuZyIKKworIzogaWZfY3Njb3BlLmM6NzU3Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgZnJfZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIHZvbiBmcl9mcCBtaXNzbGFuZyIKKworIzogaWZfY3Njb3BlLmM6Nzg1Cittc2dpZCAibm8gY3Njb3BlIGNvbm5lY3Rpb25zIgorbXNnc3RyICJrZWluZSBWZXJiaW5kdW5nZW4genUgY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiBrZWluZSBUcmVmZmVyIGdlZnVuZGVuIGb8ciBjc2NvcGUgQW5mcmFnZW4gJXMgYXVzICVzIgorCisjOiBpZl9jc2NvcGUuYzo4OTkKK21zZ2lkICJjc2NvcGUgY29tbWFuZHM6XG4iCittc2dzdHIgImNzY29wZSBCZWZlaGxlOlxuIgorCisjOiBpZl9jc2NvcGUuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS01czogJS0zMHMgKFVzYWdlOiAlcylcbiIKK21zZ3N0ciAiJS01czogJS0zMHMgKFZlcndlbmR1bmc6ICVzKVxuIgorCisjOiBpZl9jc2NvcGUuYzo5NzAKK21zZ2lkICJkdXBsaWNhdGUgY3Njb3BlIGRhdGFiYXNlIG5vdCBhZGRlZCIKK21zZ3N0ciAiY3Njb3BlIERhdGVuYmFuayBuaWNodCBkb3BwZWx0IGhpbnp1Z2Vm/Gd0IgorCisjOiBpZl9jc2NvcGUuYzo5ODEKK21zZ2lkICJtYXhpbXVtIG51bWJlciBvZiBjc2NvcGUgY29ubmVjdGlvbnMgcmVhY2hlZCIKK21zZ3N0ciAibWF4aW1hbGUgQW56YWhsIHZvbiBjc2NvcGUgVmVyYmluZHVuZ2VuIGVycmVpY2h0IgorCisjOiBpZl9jc2NvcGUuYzoxMTAyCittc2dpZCAiRTI2MDogY3Njb3BlIGNvbm5lY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJFMjYwOiBrZWluZSBjc2NvcGUgVmVyYmluZHVuZyBnZWZ1bmRlbiIKKworIzogaWZfY3Njb3BlLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYxOiBjc2NvcGUgY29ubmVjdGlvbiAlcyBub3QgZm91bmQiCittc2dzdHIgIkUyNjE6IGNzY29wZSBWZXJiaW5kdW5nICVzIG5pY2h0IGdlZnVuZGVuIgorCisjOiBpZl9jc2NvcGUuYzoxMTQxCittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gY2xvc2VkIgorbXNnc3RyICJjc2NvcGUgVmVyYmluZHVuZyBnZXNjaGxvc3NlbiIKKworIzogaWZfY3Njb3BlLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWRcbiIKK21zZ3N0ciAiY3Njb3BlIFZlcmJpbmR1bmcgJXMgZ2VzY2hsb3NzZW5cbiIKKworIy4gc2hvdWxkIG5vdCByZWFjaCBoZXJlCisjOiBpZl9jc2NvcGUuYzoxMjkwCittc2dpZCAiZmF0YWwgZXJyb3IgaW4gY3NfbWFuYWdlX21hdGNoZXMiCittc2dzdHIgImZhdGFsZXIgRmVobGVyIGluIGNzX21hbmFnZV9tYXRjaGVzIgorCisjOiBpZl9jc2NvcGUuYzoxMzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNjI6IGVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWQiCittc2dzdHIgIkUyNjI6IEZlaGxlciBiZWltIExlc2VuIGF1cyBkZXIgY3Njb3BlIFZlcmJpbmR1bmcgJWQiCisKKyM6IGlmX2NzY29wZS5jOjE0NDkKK21zZ2lkICJjb3VsZG4ndCBtYWxsb2NcbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gYWxsb3ppZXJlblxuIgorCisjOiBpZl9jc2NvcGUuYzoxNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzXG4iCittc2dzdHIgIkNzY29wZSBUYWc6ICVzXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0NTgKK21zZ2lkICIgICAjICAgbGluZSIKK21zZ3N0ciAiICAgIyAgWmVpbGUiCisKKyM6IGlmX2NzY29wZS5jOjE0NjAKK21zZ2lkICJmaWxlbmFtZSAvIGNvbnRleHQgLyBsaW5lXG4iCittc2dzdHIgIkRhdGVpbmFtZSAvIEtvbnRleHQgLyBaZWlsZVxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzE4Cittc2dpZCAiQWxsIGNzY29wZSBkYXRhYmFzZXMgcmVzZXQiCittc2dzdHIgImFsbGUgY3Njb3BlIERhdGVuYmFua2VuIHp1cvxja2dlc2V0enQiCisKKyM6IGlmX2NzY29wZS5jOjE3ODUKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAia2VpbmUgY3Njb3BlLVZlcmJpbmR1bmdlblxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzg5Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICBEYXRlbmJhbmsgTmFtZVx0ICAgICAgICAgICAgICAgICAgICBm/GhyZW5kZXIgUGZhZFxuIgorCisjOiBpZl9jc2NvcGUuYzoxODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUyZCAlLTVsZCAgJS0zNHMgIDxub25lPlxuIgorbXNnc3RyICIlMmQgJS01bGQgICUtMzRzICA8a2VpbmU+XG4iCisKKyM6IGlmX3B5dGhvbi5jOjI1NSBpZl9ydWJ5LmM6MjYwIGlmX3RjbC5jOjE5NSBtYnl0ZS5jOjI2MzMgb3Nfd2luMzIuYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MDogQ291bGQgbm90IGxvYWQgbGlicmFyeSAlcyIKK21zZ3N0ciAiRTM3MDogQmlibGlvdGhlayAlcyBrb25udGUgbmljaHQgZ2VsYWRlbiB3ZXJkZW4iCisKKyM6IGlmX3B5dGhvbi5jOjI2NyBpZl9ydWJ5LmM6MjcyIGlmX3RjbC5jOjIwNiBtYnl0ZS5jOjI2NDkgb3Nfd2luMzIuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0ODogQ291bGQgbm90IGxvYWQgbGlicmFyeSBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTQ0ODogQmlibGlvdGhla3MtRnVua3Rpb24gJXMga29ubnRlIG5pY2h0IGdlbGFkZW4gd2VyZGVuIgorCisjOiBpZl9weXRob24uYzozOTIKK21zZ2lkICIiCisiRTI2MzogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFB5dGhvbiBsaWJyYXJ5IGNvdWxkIG5vdCBiZSAiCisibG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjM6IERpZXNlciBCZWZlaGwgaXN0IG5pY2h0IHZlcmb8Z2JhciwgZGllIFB5dGhvbiBCaWJsaW90aGVrIGtvbm50ZSBuaWNodCAiCisiZ2VsYWRlbiB3ZXJkZW4iCisKKyM6IGlmX3B5dGhvbi5jOjU5MgorbXNnaWQgImNhbid0IGRlbGV0ZSBPdXRwdXRPYmplY3QgYXR0cmlidXRlcyIKK21zZ3N0ciAiT3V0cHV0T2JqZWN0LUF0dHJpYnV0ZSBr9m5uZW4gbmljaHQgZ2Vs9nNjaHQgd2VyZGVuIgorCisjOiBpZl9weXRob24uYzo1OTkKK21zZ2lkICJzb2Z0c3BhY2UgbXVzdCBiZSBhbiBpbnRlZ2VyIgorbXNnc3RyICJcInNvZnRzcGFjZVwiIG11c3MgZWluZSBnYW56ZSBaYWhsIHNlaW4iCisKKyM6IGlmX3B5dGhvbi5jOjYwNworbXNnaWQgImludmFsaWQgYXR0cmlidXRlIgorbXNnc3RyICJ1bnp1bORzc2lnZXMgQXR0cmlidXQiCisKKyM6IGlmX3B5dGhvbi5jOjY0NiBpZl9weXRob24uYzo2NjAKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkgdmVybGFuZ3QgZWluZSBMaXN0ZSB2b24gWmVpY2hlbmZvbGdlbiIKKworIzogaWZfcHl0aG9uLmM6Nzg2Cittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjogRmVobGVyIGJlaSBkZXIgSW5pdGlhbGlzaWVydW5nIHZvbiBJL08gT2JqZWt0ZW4iCisKKyM6IGlmX3B5dGhvbi5jOjk3MSBpZl90Y2wuYzoxNDAzCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICJ1bmf8bHRpZ2VyIEF1c2RydWNrIgorCisjOiBpZl9weXRob24uYzo5ODUgaWZfdGNsLmM6MTQwOAorbXNnaWQgImV4cHJlc3Npb25zIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAiQXVzZHL8Y2tlIHd1cmRlbiB6dXIgWmVpdCBkZXMg3GJlcnNldHplbnMgbmljaHQgenVnZWxhc3NlbiIKKworIzogaWZfcHl0aG9uLmM6OTk4Cittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAiVmVyc3VjaCwgQmV6dWcgYXVmIGVpbmVuIGdlbPZzY2h0ZW4gUHVmZmVyIHp1IG5laG1lbiIKKworIzogaWZfcHl0aG9uLmM6MTAxMyBpZl9weXRob24uYzoxMDU0IGlmX3B5dGhvbi5jOjExMTggaWZfdGNsLmM6MTIxNQorbXNnaWQgImxpbmUgbnVtYmVyIG91dCBvZiByYW5nZSIKK21zZ3N0ciAiWmVpbGVubnVtbWVyIGF132VyaGFsYiBkZXMgenVs5HNzaWdlbiBCZXJlaWNocyIKKworIzogaWZfcHl0aG9uLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICI8YnVmZmVyIG9iamVjdCAoZGVsZXRlZCkgYXQgJThsWD4iCittc2dzdHIgIjxQdWZmZXJvYmpla3QgKGdlbPZzY2h0KSBiZWkgJThsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjEzNDIgaWZfdGNsLmM6ODM3Cittc2dpZCAiaW52YWxpZCBtYXJrIG5hbWUiCittc2dzdHIgInVuZ/xsdGlnZXIgTmFtZSBlaW5lciBNYXJraWVydW5nIgorCisjOiBpZl9weXRob24uYzoxNjE3Cittc2dpZCAibm8gc3VjaCBidWZmZXIiCittc2dzdHIgImtlaW4gc29sY2hlciBQdWZmZXIgdm9yaGFuZGVuIgorCisjOiBpZl9weXRob24uYzoxNzA1Cittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIHdpbmRvdyIKK21zZ3N0ciAiVmVyc3VjaCwgQmV6dWcgYXVmIGVpbmUgZ2Vs9nNjaHRlcyBGZW5zdGVyIHp1IG5laG1lbiIKKworIzogaWZfcHl0aG9uLmM6MTc1MAorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAibnVyLUxlc2VuIEF0dHJpYnV0IgorCisjOiBpZl9weXRob24uYzoxNzYzCittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICJDdXJzb3IgUG9zaXRpb24gYXXfZXJoYWxiIGRlcyBQdWZmZXJzIgorCisjOiBpZl9weXRob24uYzoxODQwCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0IChkZWxldGVkKSBhdCAlLjhsWD4iCittc2dzdHIgIjxGZW5zdGVyb2JqZWt0IChnZWz2c2NodCkgYmVpICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTg1MgorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IgorbXNnc3RyICI8RmVuc3Rlcm9iamVrdCAodW5iZWthbm50KSBiZWkgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8RmVuc3RlciAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5MzAKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAidW5n/Gx0aWdlcyBGZW5zdGVyIgorCisjOiBpZl9weXRob24uYzoyMTg3IGlmX3B5dGhvbi5jOjIyMjIgaWZfcHl0aG9uLmM6MjI3MiBpZl9weXRob24uYzoyMzM1CisjOiBpZl9weXRob24uYzoyNDU1IGlmX3B5dGhvbi5jOjI1MDcgaWZfdGNsLmM6Njg1IGlmX3RjbC5jOjczMCBpZl90Y2wuYzo4MDQKKyM6IGlmX3RjbC5jOjg3NCBpZl90Y2wuYzoxOTk5Cittc2dpZCAiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiUmV2ZXJ0aWVydW5ncy1JbmZvcm1hdGlvbiBrYW5uIG5pY2h0IGdlc3BlaWNoZXJ0IHdlcmRlbiIKKworIzogaWZfcHl0aG9uLmM6MjE4OSBpZl9weXRob24uYzoyMjc5IGlmX3B5dGhvbi5jOjIzNDYKK21zZ2lkICJjYW5ub3QgZGVsZXRlIGxpbmUiCittc2dzdHIgIlplaWxlIGthbm4gbmljaHQgZ2Vs9nNjaHQgd2VyZGVuIgorCisjOiBpZl9weXRob24uYzoyMjI0IGlmX3B5dGhvbi5jOjIzNjIgaWZfdGNsLmM6NjkxIGlmX3RjbC5jOjIwMjEKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICJaZWlsZSBrYW5uIG5pY2h0IGVyc2V0enQgd2VyZGVuIgorCisjOiBpZl9weXRob24uYzoyMzc4IGlmX3B5dGhvbi5jOjI0NTcgaWZfcHl0aG9uLmM6MjUxNQorbXNnaWQgImNhbm5vdCBpbnNlcnQgbGluZSIKK21zZ3N0ciAiWmVpbGUga2FubiBuaWNodCBlaW5nZWb8Z3Qgd2VyZGVuIgorCisjOiBpZl9weXRob24uYzoyNjE5Cittc2dpZCAic3RyaW5nIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJaZWljaGVuZm9sZ2Uga2FubiBrZWluZSBaZWlsZW4td2VjaHNlbCBlbnRoYWx0ZW4iCisKKyM6IGlmX3J1YnkuYzo0MDEKK21zZ2lkICIiCisiRTI2NjogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFJ1YnkgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjY6IERpZXNlciBCZWZlaGwgaXN0IG5pY2h0IHZlcmb8Z2JhciwgZGllIFJ1YnkgQmlibGlvdGhlayBrb25udGUgbmljaHQgIgorImdlbGFkZW4gd2VyZGVuIgorCisjOiBpZl9ydWJ5LmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzM6IHVua25vd24gbG9uZ2ptcCBzdGF0dXMgJWQiCittc2dzdHIgIkUyNzM6IFVuYmVrYW5udGVyIGxvbmdqbXAgU3RhdHVzICVkIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIlVtc2NoYWx0dW5nIHp3aXNjaGVuIEltcGxlbWVudGllcnVuZy9EZWZpbml0aW9uIgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICJaZWlnZSBCYXNpcy1LbGFzc2Ugdm9uIgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAiWmVpZ2Ug/GJlcnNjaHJpZWJlbmUgTWl0Z2xpZWRzLUZ1bmt0aW9uIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICJCZXppZWhlIGF1cyBEYXRlaSIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAiQmV6aWVoZSBhdXMgUHJvamVrdCIKKworIzogaWZfc25pZmYuYzo3MworbXNnaWQgIlJldHJpZXZlIGZyb20gYWxsIHByb2plY3RzIgorbXNnc3RyICJCZXppZWhlIGF1cyBhbGxlbiBQcm9qZWt0ZW4iCisKKyM6IGlmX3NuaWZmLmM6NzQKK21zZ2lkICJSZXRyaWV2ZSIKK21zZ3N0ciAiQmV6aWVoZSIKKworIzogaWZfc25pZmYuYzo3NQorbXNnaWQgIlNob3cgc291cmNlIG9mIgorbXNnc3RyICJaZWlnZSBkaWUgUXVlbGxlIHZvbiIKKworIzogaWZfc25pZmYuYzo3NgorbXNnaWQgIkZpbmQgc3ltYm9sIgorbXNnc3RyICJGaW5kZSBTeW1ib2wiCisKKyM6IGlmX3NuaWZmLmM6NzcKK21zZ2lkICJCcm93c2UgY2xhc3MiCittc2dzdHIgIkR1cmNoc2VoZSBLbGFzc2VuIgorCisjOiBpZl9zbmlmZi5jOjc4Cittc2dpZCAiU2hvdyBjbGFzcyBpbiBoaWVyYXJjaHkiCittc2dzdHIgIlplaWdlIEtsYXNzZSBpbiBIaWVyYXJjaGllIgorCisjOiBpZl9zbmlmZi5jOjc5Cittc2dpZCAiU2hvdyBjbGFzcyBpbiByZXN0cmljdGVkIGhpZXJhcmNoeSIKK21zZ3N0ciAiWmVpZ2UgS2xhc3NlIGluIGVpbmdlc2NocuRua3RlciBIaWVyYXJjaGllIgorCisjOiBpZl9zbmlmZi5jOjgwCittc2dpZCAiWHJlZiByZWZlcnMgdG8iCittc2dzdHIgIlhyZWYgYmV6aWVodCBzaWNoIGF1ZiIKKworIzogaWZfc25pZmYuYzo4MQorbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCittc2dzdHIgIlhyZWYgaGF0IEJlevxnZSB6dSIKKworIzogaWZfc25pZmYuYzo4MgorbXNnaWQgIlhyZWYgaGFzIGEiCittc2dzdHIgIlhyZWYgaGF0IGVpbiIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiB3aXJkIHZlcndlbmRldCB2b24iCisKKyM6IGlmX3NuaWZmLmM6ODQKK21zZ2lkICJTaG93IGRvY3Ugb2YiCittc2dzdHIgIlplaWdlIERvY3UgYXVzIgorCisjOiBpZl9zbmlmZi5jOjg1Cittc2dpZCAiR2VuZXJhdGUgZG9jdSBmb3IiCittc2dzdHIgIkdlbmVyaWVyZSBEb2N1IGb8ciIKKworIzogaWZfc25pZmYuYzo5NworbXNnaWQgIiIKKyJDYW5ub3QgY29ubmVjdCB0byBTTmlGRisuIENoZWNrIGVudmlyb25tZW50IChzbmlmZmVtYWNzIG11c3QgYmUgZm91bmQgaW4gIgorIiRQQVRIKS5cbiIKK21zZ3N0ciAiIgorIkthbm4ga2VpbmUgdmVyYmluZHVuZyB6dSBTTmlGRisgYXVmbmVoZW1lbi4gUHL8ZmUgZGllIFVtZ2VidW5nIChzbmlmZmVtYWNzICIKKyJtdXNzIGluICRQQVRIKSB6dSBmaW5kZW4gc2Vpbi5cbiIKKworIzogaWZfc25pZmYuYzo0MjUKK21zZ2lkICJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiRTI3NDogU25pZmY6IEZlaGxlciBiZWltIExlc2VuLiBWZXJiaW5kdW5nIGFiZ2Vicm9jaGVuIgorCisjOiBpZl9zbmlmZi5jOjU1MworbXNnaWQgIlNOaUZGKyBpcyBjdXJyZW50bHkgIgorbXNnc3RyICJTTmlGRisgaXN0IHp1ciBaZWl0IgorCisjOiBpZl9zbmlmZi5jOjU1NQorbXNnaWQgIm5vdCAiCittc2dzdHIgIm5pY2h0IgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAidmVyYnVuZGVuIgorCisjOiBpZl9zbmlmZi5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjc1OiBVbmtub3duIFNOaUZGKyByZXF1ZXN0OiAlcyIKK21zZ3N0ciAiRTI3NTogVW5iZWthbm50ZSBTTmlGRisgQW5mcmFnZTogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IEZlaGxlciBiZWltIEhlcnN0ZWxsZW4gZGVyIFZlcmJpbmR1bmcgbWl0IFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDA5Cittc2dpZCAiRTI3ODogU05pRkYrIG5vdCBjb25uZWN0ZWQiCittc2dzdHIgIkUyNzg6IFNOaUZGKyBpc3QgbmljaHQgdmVyYnVuZGVuIgorCisjOiBpZl9zbmlmZi5jOjEwMTgKK21zZ2lkICJFMjc5OiBOb3QgYSBTTmlGRisgYnVmZmVyIgorbXNnc3RyICJFMjc5OiBJc3Qga2VpbiBTTmlGRisgUHVmZmVyIgorCisjOiBpZl9zbmlmZi5jOjEwODMKK21zZ2lkICJTbmlmZjogRXJyb3IgZHVyaW5nIHdyaXRlLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIlNuaWZmOiBGZWhsZXIgYmVpbSBTY2hyZWliZW4uIFZlcmJpbmR1bmcgYWJnZWJyb2NoZW4iCisKKyM6IGlmX3RjbC5jOjQxOQorbXNnaWQgImludmFsaWQgYnVmZmVyIG51bWJlciIKK21zZ3N0ciAidW5n/Gx0aWdlIFB1ZmZlci1OdW1tZXIiCisKKyM6IGlmX3RjbC5jOjQ2NSBpZl90Y2wuYzo5MzIgaWZfdGNsLmM6MTExMQorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIm5pY2h0IGltcGxlbWVudGllcnQiCisKKyM6IGlmX3RjbC5jOjUwMgorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJ1bmJla2FubnRlIE9wdGlvbiIKKworIy4gPz8/CisjOiBpZl90Y2wuYzo3NzUKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgImthbm4ga2VpbmUgWmVpbGUvWmVpbGVuIHNldHplbiIKKworIzogaWZfdGNsLmM6ODQ2Cittc2dpZCAibWFyayBub3Qgc2V0IgorbXNnc3RyICJNYXJrZSBuaWNodCBnZXNldHp0IgorCisjOiBpZl90Y2wuYzo4NTIgaWZfdGNsLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJyb3cgJWQgY29sdW1uICVkIgorbXNnc3RyICJaZWlsZSAlZCBTcGFsdGUgJWQiCisKKyM6IGlmX3RjbC5jOjg4MgorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgImthbm4gWmVpbGUgbmljaHQgZWluLS9hbmb8Z2VuIgorCisjOiBpZl90Y2wuYzoxMjY5Cittc2dpZCAidW5rbm93biBmbGFnOiAiCittc2dzdHIgInVuYmVrYW5udGVzIEZsYWc6ICIKKworIzogaWZfdGNsLmM6MTMzOQorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICJ1bmJla2FubnRlIHZpbSBPcHRpb24iCisKKyM6IGlmX3RjbC5jOjE0MjQKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgIlRhc3RhdHVyLVVudGVyYnJlY2h1bmciCisKKyM6IGlmX3RjbC5jOjE0MjkKK21zZ2lkICJ2aW0gZXJyb3IiCittc2dzdHIgInZpbSBGZWhsZXIiCisKKyM6IGlmX3RjbC5jOjE0NzIKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIiIKKyJQdWZmZXIvRmVuc3Rlci1CZWZlaGwga2FubiBuaWNodCBhdXNnZWb8aHJ0IHdlcmRlbjogZGFzIE9iamVrdCB3aXJkIGdlbPZzY2h0IgorCisjOiBpZl90Y2wuYzoxNTQ2Cittc2dpZCAiIgorImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IGlzIGFscmVhZHkgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAiIgorImthbm4ga2VpbmVuIENhbGxiYWNrLUJlZmVobCByZWdpc3RyaWVyZW46IFB1ZmZlci9GZW5zdGVyIGlzdCBiZXJlaXRzIGdlbPZzY2h0IgorCisjLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIzogaWZfdGNsLmM6MTU2MworbXNnaWQgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgY29ycnVwdCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS4iCisib3JnIgorbXNnc3RyICIiCisiRTI4MDogVENMIEZBVEFMRVIgRkVITEVSOiByZWZsaXN0IGthcHV0dCE/IEJpdHRlIGJlbmFjaHJpY2h0aWdlbiBTaWUgdmltLSIKKyJkZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTU2NAorbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIiIKKyJrYW5uIGtlaW5lbiBDYWxsYmFjay1CZWZlaGwgcmVnaXN0cmllcmVuOiBQdWZmZXIvRmVuc3Rlci1SZWZlcmVueiBuaWNodCAiCisiZ2VmdW5kZW4iCisKKyM6IGlmX3RjbC5jOjE3MjUKK21zZ2lkICJTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgVGNsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJEaWVzZXIgQmVmZWhsIGlzdCBuaWNodCB2ZXJm/GdiYXIsIGRhIGRpZSBUY2wgQmlibGlvdGhlayBuaWNodCBnZWxhZGVuICIKKyJ3ZXJkZW4ga29ubnRlIgorCisjOiBpZl90Y2wuYzoxODg3Cittc2dpZCAiIgorIkUyODE6IFRDTCBFUlJPUjogZXhpdCBjb2RlIGlzIG5vdCBpbnQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MTogVENMIEZFSExFUjogRXhpdC1Db2RlIGlzdCBuaWNodCBpbnQhPyBCaXR0ZSBiZW5hY2hyaWNodGlnZW4gU2llIHZpbS0iCisiZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjIwMDcKK21zZ2lkICJjYW5ub3QgZ2V0IGxpbmUiCittc2dzdHIgImthbm4gWmVpbGUgbmljaHQgZXJoYWx0ZW4iCisKKyM6IGlmX3hjbWRzcnYuYzoyMTMKK21zZ2lkICJVbmFibGUgdG8gcmVnaXN0ZXIgYSBjb21tYW5kIHNlcnZlciBuYW1lIgorbXNnc3RyICJCZWZlaGxzLVNlcnZlciBOYW1lIGthbm4gbmljaHQgcmVnaXN0cmllcnQgd2VyZGVuIgorCisjOiBpZl94Y21kc3J2LmM6NDM0IG9zX21zd2luLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6IEtlaW4gcmVnaXN0cmllcnRlciBTZXJ2ZXItTmFtZSBcIiVzXCIiCisKKyM6IGlmX3hjbWRzcnYuYzo0NjMKK21zZ2lkICJFMjQ4OiBGYWlsZWQgdG8gc2VuZCBjb21tYW5kIHRvIHRoZSBkZXN0aW5hdGlvbiBwcm9ncmFtIgorbXNnc3RyICJFMjQ4OiBTY2hpY2tlbiBkZXMgQmVmZWhscyB6dW0gWmllbC1Qcm9ncmFtbSBzY2hsdWcgZmVobCIKKworIzogaWZfeGNtZHNydi5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNlcnZlciBpZCB1c2VkOiAlcyIKK21zZ3N0ciAiVW5n/Gx0aWdlIFNlcnZlci1JRCB2ZXJ3ZW5kZXQ6ICVzIgorCisjOiBpZl94Y21kc3J2LmM6MTA3OQorbXNnaWQgIkUyNDk6IGNvdWxkbid0IHJlYWQgVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IgorbXNnc3RyICJFMjQ5OiBSZWdpc3RyeS1FaWdlbnNjaGFmdCBkZXIgVklNIEluc3Rhbnoga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuIgorCisjOiBpZl94Y21kc3J2LmM6MTA5MAorbXNnaWQgIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBpcyBiYWRseSBmb3JtZWQuICBEZWxldGVkISIKK21zZ3N0ciAiRTI1MTogUmVnaXN0cnktRWlnZW5zY2hhZnQgZGVyIFZJTSBJbnN0YW56IGlzdCBmZWhsZXJoYWZ0LiAgR2Vs9nNjaHQhIgorCisjOiBtYWluLmM6NTMgb3B0aW9uLmM6MzE2MiBvcHRpb24uYzozMjY5Cittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIlVuYmVrYW5udGUgT3B0aW9uIgorCisjOiBtYWluLmM6NTUKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAiWnUgdmllbGUgRWRpdG9yIEFyZ3VtZW50ZSIKKworIzogbWFpbi5jOjU3Cittc2dpZCAiQXJndW1lbnQgbWlzc2luZyBhZnRlciIKK21zZ3N0ciAiQXJndW1lbnQgZmVobHQgbmFjaCIKKworIzogbWFpbi5jOjU5Cittc2dpZCAiR2FyYmFnZSBhZnRlciBvcHRpb24iCittc2dzdHIgIlNjaHJvdHQgbmFjaCBkZXIgT3B0aW9uIgorCisjOiBtYWluLmM6NjEKK21zZ2lkICJUb28gbWFueSBcIitjb21tYW5kXCIgb3IgXCItYyBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICJadSB2aWVsZSBcIitjb21tYW5kXCIgb2RlciBcIi1jIGNvbW1hbmRcIiBBcmd1bWVudGUiCisKKyM6IG1haW4uYzo2MworbXNnaWQgIkludmFsaWQgYXJndW1lbnQgZm9yIgorbXNnc3RyICJVbmf8bHRpZ2VzIEFyZ3VtZW50IGb8ciIKKworIzogbWFpbi5jOjQ1MAorbXNnaWQgIlRoaXMgVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgZGlmZiBmZWF0dXJlLiIKK21zZ3N0ciAiVmltIHd1cmRlIG5pY2h0IG1pdCBkZXIgXCJkaWZmXCItRWlnZW5zY2hhZnQg/GJlcnNldHp0IgorCisjOiBtYWluLmM6ODc1Cittc2dpZCAiQXR0ZW1wdCB0byBvcGVuIHNjcmlwdCBmaWxlIGFnYWluOiBcIiIKK21zZ3N0ciAiVmVyc3VjaGUsIGRpZSBTa3JpcHQtRGF0ZWkgZXJuZXV0IHp1IPZmZm5lbjogXCIiCisKKyM6IG1haW4uYzo4NzkgbWFpbi5jOjg4NiBtYWluLmM6OTMwIG1lbWxpbmUuYzozNjczIG1lbWxpbmUuYzozNjc3CisjOiB2ZXJzaW9uLmM6ODU4IHZlcnNpb24uYzo4NjMgdmVyc2lvbi5jOjg2OCB2ZXJzaW9uLmM6ODczIHZlcnNpb24uYzo4NzgKKyM6IHZlcnNpb24uYzo4ODMgdmVyc2lvbi5jOjg4OSB2ZXJzaW9uLmM6ODkzIHZlcnNpb24uYzo4OTcgdmVyc2lvbi5jOjkwMgorIzogdmVyc2lvbi5jOjkwOSB2ZXJzaW9uLmM6OTE3IHZlcnNpb24uYzo5MjMKK21zZ2lkICJcIlxuIgorbXNnc3RyICJcIlxuIgorCisjOiBtYWluLmM6ODg0Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICJrYW5uIG5pY2h0IHp1bSBMZXNlbiBnZfZmZm5ldCB3ZXJkZW46IFwiIgorCisjOiBtYWluLmM6OTI4Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICJrYW5uIG5pY2h0IHp1ciBTa3JpcHQtQXVzZ2FiZSBnZfZmZm5ldCB3ZXJkZW46IFwiIgorCisjOiBtYWluLmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmaWxlcyB0byBlZGl0XG4iCittc2dzdHIgIiVkIERhdGVpZW4genVyIEJlYXJiZWl0dW5nXG4iCisKKyM6IG1haW4uYzoxMTE4Cittc2dpZCAiVmltOiBXYXJuaW5nOiBPdXRwdXQgaXMgbm90IHRvIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiBXYXJudW5nOiBEaWUgQXVzZ2FiZSBlcmZvbGd0IG5pY2h0IGF1ZiBlaW5lbSBUZXJtaW5hbFxuIgorCisjOiBtYWluLmM6MTEyMAorbXNnaWQgIlZpbTogV2FybmluZzogSW5wdXQgaXMgbm90IGZyb20gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IFdhcm51bmc6IERpZSBFaW5nYWJlIGtvbW10IG5pY2h0IHZvbiBlaW5lbSBUZXJtaW5hbFxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjExOTUKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJwcmUtdmltcmMgQmVmZWhscy1aZWlsZSIKKworIzogbWFpbi5jOjEyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IEthbm4gbmljaHQgdm9uIFwiJXNcIiBsZXNlbiIKKworIzogbWFpbi5jOjIyMDkKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIldlaXRlcmUgSW5mb3JtYXRpb25lbiBtaXQ6IFwidmltIC1oXCJcbiIKKworIzogbWFpbi5jOjIyNDIKK21zZ2lkICJbZmlsZSAuLl0gICAgICAgZWRpdCBzcGVjaWZpZWQgZmlsZShzKSIKK21zZ3N0ciAiW0RhdGVpIC4uXSAgICAgIGVkaXRpZXJlIGRpZSBhbmdlZ2ViZW5lbiBEYXRlaSgtZW4pIgorCisjOiBtYWluLmM6MjI0MworbXNnaWQgIi0gICAgICAgICAgICAgICByZWFkIHRleHQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiLSAgICAgICAgICAgICAgIGxlc2UgVGV4dCB2b24gc3RkaW4iCisKKyM6IG1haW4uYzoyMjQ0Cittc2dpZCAiLXQgdGFnICAgICAgICAgIGVkaXQgZmlsZSB3aGVyZSB0YWcgaXMgZGVmaW5lZCIKK21zZ3N0ciAiLXQgdGFnICAgICAgICAgIGVkaXRpZXJlIERhdGVpIGluIGRlciBkZXIgVGFnIGRlZmluaWVydCB3dXJkZSIKKworIzogbWFpbi5jOjIyNDYKK21zZ2lkICItcSBbZXJyb3JmaWxlXSAgZWRpdCBmaWxlIHdpdGggZmlyc3QgZXJyb3IiCittc2dzdHIgIi1xIFtGZWhsZXItRGF0ZWldICBlZGl0aWVyZSBEYXRlaSBtaXQgZXJzdGVtIEZlaGxlciIKKworIzogbWFpbi5jOjIyNTUKK21zZ2lkICIiCisiXG4iCisiXG4iCisidXNhZ2U6IgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiVmVyd2VuZHVuZzoiCisKKyM6IG1haW4uYzoyMjU4Cittc2dpZCAiIHZpbSBbYXJndW1lbnRzXSAiCittc2dzdHIgIiB2aW0gW0FyZ3VtZW50ZV0gIgorCisjOiBtYWluLmM6MjI2MgorbXNnaWQgIiIKKyJcbiIKKyIgICBvcjoiCittc2dzdHIgIiIKKyJcbiIKKyIgICBvZGVyOiIKKworIzogbWFpbi5jOjIyNjUKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQXJndW1lbnRzOlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiQXJndW1lbnRlOlxuIgorCisjOiBtYWluLmM6MjI2NgorbXNnaWQgIi0tXHRcdFx0T25seSBmaWxlIG5hbWVzIGFmdGVyIHRoaXMiCittc2dzdHIgIi0tXHRcdFx0SGllcm5hY2ggbnVyIERhdGVpLU5hbWVuIgorCisjOiBtYWluLmM6MjI2OAorbXNnaWQgIi0tbGl0ZXJhbFx0XHREb24ndCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICItLWxpdGVyYWxcdFx0UGxhdHpoYWx0ZXIgd2VyZGVuIG5pY2h0IGF1c2dld2VydGV0IgorCisjOiBtYWluLmM6MjI3MQorbXNnaWQgIi1yZWdpc3Rlclx0XHRSZWdpc3RlciB0aGlzIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXJlZ2lzdGVyXHRcdFJlZ2lzdHJpZXJlIGRpZXNlbiBndmltIGluIE9MRSIKKworIzogbWFpbi5jOjIyNzIKK21zZ2lkICItdW5yZWdpc3Rlclx0XHRVbnJlZ2lzdGVyIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXVucmVnaXN0ZXJcdFx0RGVyZWdpc3RyaWVyZSBndmltIGF1cyBPTEUiCisKKyM6IG1haW4uYzoyMjc1Cittc2dpZCAiLWdcdFx0XHRSdW4gdXNpbmcgR1VJIChsaWtlIFwiZ3ZpbVwiKSIKK21zZ3N0ciAiLWdcdFx0XHRTdGFydCBhbHMgR1VJICh3aWUgXCJndmltXCIpIgorCisjOiBtYWluLmM6MjI3NgorbXNnaWQgIi1mXHRcdFx0Rm9yZWdyb3VuZDogRG9uJ3QgZm9yayB3aGVuIHN0YXJ0aW5nIEdVSSIKK21zZ3N0ciAiLWZcdFx0XHRGb3JkZXJncnVuZDogS2VpbiBcImZvcmtcIiBiZWltIFN0YXJ0IGRlcyBHVUkiCisKKyM6IG1haW4uYzoyMjc4Cittc2dpZCAiLXZcdFx0XHRWaSBtb2RlIChsaWtlIFwidmlcIikiCittc2dzdHIgIi12XHRcdFx0VmkgTW9kdXMgKHdpZSBcInZpXCIpIgorCisjOiBtYWluLmM6MjI3OQorbXNnaWQgIi1lXHRcdFx0RXggbW9kZSAobGlrZSBcImV4XCIpIgorbXNnc3RyICItZVx0XHRcdEV4IE1vZHVzICh3aWUgXCJleFwiKSIKKworIzogbWFpbi5jOjIyODAKK21zZ2lkICItc1x0XHRcdFNpbGVudCAoYmF0Y2gpIG1vZGUgKG9ubHkgZm9yIFwiZXhcIikiCittc2dzdHIgIi1zXHRcdFx0TGVpc2VyIChiYXRjaCkgTW9kdXMgKG51ciBm/HIgXCJleFwiKSIKKworIzogbWFpbi5jOjIyODIKK21zZ2lkICItZFx0XHRcdERpZmYgbW9kZSAobGlrZSBcInZpbWRpZmZcIikiCittc2dzdHIgIi1kXHRcdFx0RGlmZiBNb2R1cyAod2llIFwidmltZGlmZlwiKSIKKworIzogbWFpbi5jOjIyODQKK21zZ2lkICIteVx0XHRcdEVhc3kgbW9kZSAobGlrZSBcImV2aW1cIiwgbW9kZWxlc3MpIgorbXNnc3RyICIteVx0XHRcdExlaWNodGVyIE1vZHVzICh3aWUgXCJldmltXCIsIG9obmUgTW9kaSkiCisKKyM6IG1haW4uYzoyMjg1Cittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHRNb2R1cyBvaG5lIFNjaHJlaWJyZWNodGUgKHdpZSBcInZpZXdcIikiCisKKyM6IG1haW4uYzoyMjg2Cittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdEVpbmdlc2NocuRua3RlciBNb2R1cyAod2llIFwicnZpbVwiKSIKKworIzogbWFpbi5jOjIyODcKK21zZ2lkICItbVx0XHRcdE1vZGlmaWNhdGlvbnMgKHdyaXRpbmcgZmlsZXMpIG5vdCBhbGxvd2VkIgorbXNnc3RyICItbVx0XHRcdE1vZGlmaWthdGlvZW4gKGJlaW0gU2NocmVpYmVuIHZvbiBEYXRlaWVuKSBzaW5kIG5pY2h0IGVybGF1YnQiCisKKyM6IG1haW4uYzoyMjg4Cittc2dpZCAiLU1cdFx0XHRNb2RpZmljYXRpb25zIGluIHRleHQgbm90IGFsbG93ZWQiCittc2dzdHIgIi1NXHRcdFx0TW9kaWZpa2F0aW9lbiBpbSBUZXh0IG5pY2h0IGVybGF1YnQiCisKKyM6IG1haW4uYzoyMjg5Cittc2dpZCAiLWJcdFx0XHRCaW5hcnkgbW9kZSIKK21zZ3N0ciAiLWJcdFx0XHRCaW7kcm1vZHVzIgorCisjOiBtYWluLmM6MjI5MQorbXNnaWQgIi1sXHRcdFx0TGlzcCBtb2RlIgorbXNnc3RyICItbFx0XHRcdExpc3QgTW9kdXMiCisKKyM6IG1haW4uYzoyMjkzCittc2dpZCAiLUNcdFx0XHRDb21wYXRpYmxlIHdpdGggVmk6ICdjb21wYXRpYmxlJyIKK21zZ3N0ciAiLUNcdFx0XHRLb21wYXRpYmVsIHp1IFZpOiAnY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyMjk0Cittc2dpZCAiLU5cdFx0XHROb3QgZnVsbHkgVmkgY29tcGF0aWJsZTogJ25vY29tcGF0aWJsZSciCittc2dzdHIgIi1OXHRcdFx0TmljaHQgZ2FueiBrb21wYXRpYmVsIHp1IFZpOiAnbm9jb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjIyOTUKK21zZ2lkICItVltOXVx0XHRWZXJib3NlIGxldmVsIgorbXNnc3RyICItVltOXVx0XHRWZXJib3NlIFN0dWZlIgorCisjOiBtYWluLmM6MjI5NgorbXNnaWQgIi1EXHRcdFx0RGVidWdnaW5nIG1vZGUiCittc2dzdHIgIi1EXHRcdFx0RGVidWcgTW9kdXMiCisKKyM6IG1haW4uYzoyMjk3Cittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHRLZWluZSBBdXNsYWdlcnVuZ3MtRGF0ZWksIHZlcndlbmRlIG51ciBTcGVpY2hlciIKKworIzogbWFpbi5jOjIyOTgKK21zZ2lkICItclx0XHRcdExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdCIKK21zZ3N0ciAiLXJcdFx0XHRMaXN0ZSBudXIgQXVzbGFnZXJ1bmdzLURhdGVpZW4gYXVmIgorCisjOiBtYWluLmM6MjI5OQorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciAobWl0IERhdGVpbmFtZSlcdFN0ZWxsZSBhYmdlc3T8cnp0ZSBTZXNzaW9uIHdpZWRlciBoZXIiCisKKyM6IG1haW4uYzoyMzAwCittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRcdEdlbmF1c28gd2llIHogLXIiCisKKyM6IG1haW4uYzoyMzAyCittc2dpZCAiLWZcdFx0XHREb24ndCB1c2UgbmV3Y2xpIHRvIG9wZW4gd2luZG93IgorbXNnc3RyICItZlx0XHRcdFZlcndlbmRlIG5pY2h0IG5ld2NsaSB6dW0g1mZmbmVuIGVpbmVzIG5ldWVuIEZlbnN0ZXJzIgorCisjOiBtYWluLmM6MjMwMworbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPGRldmljZT5cdFx0VmVyd2VuZGUgPGRldmljZT4gZm9yIEkvTyIKKworIzogbWFpbi5jOjIzMDYKK21zZ2lkICItSFx0XHRcdHN0YXJ0IGluIEhlYnJldyBtb2RlIgorbXNnc3RyICItSFx0XHRcdFN0YXJ0IGltIEhlYnLkaXNjaGVuIE1vZHVzIgorCisjOiBtYWluLmM6MjMwOQorbXNnaWQgIi1GXHRcdFx0c3RhcnQgaW4gRmFyc2kgbW9kZSIKK21zZ3N0ciAiLUZcdFx0XHRTdGFydCBpbSBGYXJzaSBNb2R1cyIKKworIzogbWFpbi5jOjIzMTEKK21zZ2lkICItVCA8dGVybWluYWw+XHRTZXQgdGVybWluYWwgdHlwZSB0byA8dGVybWluYWw+IgorbXNnc3RyICItVCA8dGVybWluYWw+XHRTZXR6ZSBUZXJtaW5hbC1UeXAgYXVmIDx0ZXJtaW5hbD4iCisKKyM6IG1haW4uYzoyMzEyCittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0QmVudXR6ZSA8dmltcmM+IGFuc3RhdHQgamVnbGljaGVyIC52aW1yYyIKKworIzogbWFpbi5jOjIzMTQKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0QmVudXR6ZSA8Z3ZpbXJjPiBhbnN0YXR0IGplZ2xpY2hlciAuZ3ZpbXJjIgorCisjOiBtYWluLmM6MjMxNgorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHRsYWRlIGtlaW5lIFwicGx1Z2luXCItU2tyaXB0ZSIKKworIzogbWFpbi5jOjIzMTcKK21zZ2lkICItb1tOXVx0XHRPcGVuIE4gd2luZG93cyAoZGVmYXVsdDogb25lIGZvciBlYWNoIGZpbGUpIgorbXNnc3RyICItb1tOXVx0XHTWZmZuZSBOIEZlbnN0ZXIgKFZvcmdhYmU6IGVpbnplbG4gZvxyIGplZGUgRGF0ZWkpIgorCisjOiBtYWluLmM6MjMxOAorbXNnaWQgIi1PW05dXHRcdGxpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdHdpZSAtbywgYWJlciB0ZWlsZSB2ZXJ0aWthbCIKKworIzogbWFpbi5jOjIzMTkKK21zZ2lkICIrXHRcdFx0U3RhcnQgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIitcdFx0XHRTdGFydGUgYW0gRW5kZSBkZXIgRGF0ZWkiCisKKyM6IG1haW4uYzoyMzIwCittc2dpZCAiKzxsbnVtPlx0XHRTdGFydCBhdCBsaW5lIDxsbnVtPiIKK21zZ3N0ciAiKzxsbnVtPlx0XHRTdGFydCBpbiBaZWlsZSA8bG51bT4iCisKKyM6IG1haW4uYzoyMzIyCittc2dpZCAiLS1jbWQgPGNvbW1hbmQ+XHRFeGVjdXRlIDxjb21tYW5kPiBiZWZvcmUgbG9hZGluZyBhbnkgdmltcmMgZmlsZSIKK21zZ3N0ciAiLS1jbWQgPEJlZmVobD5cdEb8aHJlIDxCZWZlaGw+IHZvciBkZW0gTGFkZW4gamVnbGljaGVyIHZpbXJjIERhdGVpIGF1cyIKKworIzogbWFpbi5jOjIzMjQKK21zZ2lkICItYyA8Y29tbWFuZD5cdFx0RXhlY3V0ZSA8Y29tbWFuZD4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLWMgPEJlZmVobD5cdFx0RvxocmUgPEJlZmVobD4gbmFjaCBkZW0gTGFkZW4gZGVyIGVyc3RlbiBEYXRlaSBhdXMiCisKKyM6IG1haW4uYzoyMzI1Cittc2dpZCAiLVMgPHNlc3Npb24+XHRcdFNvdXJjZSBmaWxlIDxzZXNzaW9uPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItUyA8c2Vzc2lvbj5cdFx0TGVzZSBEYXRlaSA8c2Vzc2lvbj4gbmFjaCBkZW0gTGFkZW4gZGVyIGVyc3RlbiBEYXRlaSIKKworIzogbWFpbi5jOjIzMjYKK21zZ2lkICItcyA8c2NyaXB0aW4+XHRSZWFkIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGZyb20gZmlsZSA8c2NyaXB0aW4+IgorbXNnc3RyICIiCisiLXMgPHNjcmlwdGluPlx0TGVzZSBOb3JtYWwtTW9kdXMgQmVmZWhsZSBhdXMgZGVyIFNrcmlwdC1EYXRlaSA8c2NyaXB0aW4+IgorCisjOiBtYWluLmM6MjMyNworbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDxzY3JpcHRvdXQ+XHRCZWZlaGxlIGFtIEVuZGUgZGVyIFNrcmlwdC1EYXRlaSA8c2NyaXB0b3V0PiBhbmb8Z2VuIgorCisjOiBtYWluLmM6MjMyOAorbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLVcgPHNjcmlwdG91dD5cdFNjaHJlaWJlIEJlZmVobGUgaW4gZGllIFNrcmlwdC1EYXRlaSA8c2NyaXB0b3V0PiIKKworIzogbWFpbi5jOjIzMzAKK21zZ2lkICIteFx0XHRcdEVkaXQgZW5jcnlwdGVkIGZpbGVzIgorbXNnc3RyICIteFx0XHRcdEVkaXRpZXJlIGtvZGllcnRlIERhdGVpZW4iCisKKyM6IG1haW4uYzoyMzM0Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRDb25uZWN0IHZpbSB0byB0aGlzIHBhcnRpY3VsYXIgWC1zZXJ2ZXIiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0U3RhcnRlIHZpbSA8ZGlzcGxheT4iCisKKyM6IG1haW4uYzoyMzM2Cittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHRzdGVsbGUga2VpbmUgVmVyYmluZHVuZyB6dW0gWC1zZXJ2ZXIgaGVyIgorCisjOiBtYWluLmM6MjMzOAorbXNnaWQgIi0tc29ja2V0aWQgPHhpZD5cdE9wZW4gVmltIGluc2lkZSBhbm90aGVyIEdUSyB3aWRnZXQiCittc2dzdHIgIi0tc29ja2V0aWQgPHhpZD5cdNZmZm5lIFZpbSBpbiBlaW5lbSBhbmRlcmVuIEdUSyB3aWRnZXQiCisKKyM6IG1haW4uYzoyMzQyCittc2dpZCAiLS1yZW1vdGUgPGZpbGVzPlx0RWRpdCA8ZmlsZXM+IGluIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUgPERhdGVpZW4+XHRFZGl0aWVyZSA8RGF0ZWllbj4gaW4gZWluZW0gVmltIFNlcnZlciB1bmQgYmVlbmRlIgorCisjOiBtYWluLmM6MjM0MworbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcz4gIEFzIC0tcmVtb3RlIGJ1dCB3YWl0IGZvciBmaWxlcyB0byBoYXZlIGJlZW4gZWRpdGVkIgorbXNnc3RyICIiCisiLS1yZW1vdGUtd2FpdCA8RGF0ZWllbj4gIFdpZSAtLXJlbW90ZSwgYWJlciB3YXJ0ZSwgYmlzIGRpZSA8RGF0ZWllbj4gIgorImVkaXRpZXJ0IHd1cmRlbiIKKworIzogbWFpbi5jOjIzNDQKK21zZ2lkICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0U2VuZCA8a2V5cz4gdG8gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0U2NoaWNrZSA8a2V5cz4genUgZWluZW0gVmltIFNlcnZlciB1bmQgYmVlbmRlIgorCisjOiBtYWluLmM6MjM0NQorbXNnaWQgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWF0ZSA8ZXhwcj4gaW4gYSBWaW0gc2VydmVyIGFuZCBwcmludCByZXN1bHQiCittc2dzdHIgIiIKKyItLXJlbW90ZS1leHByIDxBdXNkcnVjaz5cdEb8aHJlIDxBdXNkcnVjaz4gaW4gZWluZW0gVmltIFNlcnZlciBhdXMgdW5kICIKKyJkcnVja2UgZGFzIEVyZ2VibmlzIgorCisjOiBtYWluLmM6MjM0NgorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICItLXNlcnZlcmxpc3RcdFx0RHJ1Y2tlIHZlcmb8Z2JhcmUgVmltIFNlcnZlciBOYW1lbiB1bmQgYmVlbmRlIgorCisjOiBtYWluLmM6MjM0NworbXNnaWQgIi0tc2VydmVybmFtZSA8bmFtZT5cdFNlbmQgdG8vYmVjb21lIHRoZSBWaW0gc2VydmVyIDxuYW1lPiIKK21zZ3N0ciAiLS1zZXJ2ZXJuYW1lIDxOYW1lPlx0QmVudXR6ZSBkZW4gVmltIHNlcnZlciA8TmFtZT4iCisKKyM6IG1haW4uYzoyMzUwCittc2dpZCAiLWkgPHZpbWluZm8+XHRcdFVzZSA8dmltaW5mbz4gaW5zdGVhZCBvZiAudmltaW5mbyIKK21zZ3N0ciAiLWkgPHZpbWluZm8+XHRcdEJlbnV0emUgPHZpbWluZm8+IHN0YXR0IC52aW1pbmZvIgorCisjOiBtYWluLmM6MjM1MgorbXNnaWQgIi1oXHRcdFx0cHJpbnQgSGVscCAodGhpcyBtZXNzYWdlKSBhbmQgZXhpdCIKK21zZ3N0ciAiLWhcdFx0XHRkcnVja2UgbnVyIEhpbGZlIChkaWVzZSBOYWNocmljaHQpIgorCisjOiBtYWluLmM6MjM1MworbXNnaWQgIi0tdmVyc2lvblx0XHRwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IgorbXNnc3RyICItLXZlcnNpb25cdFx0RHJ1Y2tlIG51ciBWZXJzaW9ucy1JbmZvcm1hdGlvbmVuIgorCisjOiBtYWluLmM6MjM1NworbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChNb3RpZiB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ3VtZW50ZSBm/HIgZGllIGd2aW0gTW90aWYgVmVyc2lvbjpcbiIKKworIzogbWFpbi5jOjIzNjAKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoQXRoZW5hIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnRlIGb8ciBkaWUgZ3ZpbSBBdGhlbmEgVmVyc2lvbjpcbiIKKworIzogbWFpbi5jOjIzNjMKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdFN0YXJ0ZSB2aW0gYXVmIDxkaXNwbGF5PiIKKworIzogbWFpbi5jOjIzNjQKK21zZ2lkICItaWNvbmljXHRcdFN0YXJ0IHZpbSBpY29uaWZpZWQiCittc2dzdHIgIi1pY29uaWNcdFx0U3RhcnRlIHZpbSBhbHMgSWNvbiIKKworIzogbWFpbi5jOjIzNjYKK21zZ2lkICItbmFtZSA8bmFtZT5cdFx0VXNlIHJlc291cmNlIGFzIGlmIHZpbSB3YXMgPG5hbWU+IgorbXNnc3RyICItbmFtZSA8bmFtZT5cdFx0QmVudXR6ZSBzbyBhbHMgb2IgdmltIDxuYW1lPiBoaWXfZSIKKworIzogbWFpbi5jOjIzNjcKK21zZ2lkICJcdFx0XHQgIChVbmltcGxlbWVudGVkKVxuIgorbXNnc3RyICJcdFx0XHQgIChOaWNodCBpbXBsZW1lbnRpZXJ0KVxuIgorCisjOiBtYWluLmM6MjM2OQorbXNnaWQgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciB0aGUgYmFja2dyb3VuZCAoYWxzbzogLWJnKSIKK21zZ3N0ciAiIgorIi1iYWNrZ3JvdW5kIDxGYXJiZT5cdEJlbnV0emUgPEZhcmJlPiBm/HIgZGVuIEhpbnRlcmdydW5kIChhdWNoIG1pdDogLWJnKSIKKworIzogbWFpbi5jOjIzNzAKK21zZ2lkICItZm9yZWdyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mZykiCittc2dzdHIgIiIKKyItZm9yZWdyb3VuZCA8RmFyYmU+XHRCZW51dHplIDxGYXJiZT4gZvxyIGRlbiBUZXh0IFZvcmRlcmdydW5kIChhdWNoIG1pdDogLWZnKSIKKworIzogbWFpbi5jOjIzNzEgbWFpbi5jOjIzOTEKK21zZ2lkICItZm9udCA8Zm9udD5cdFx0VXNlIDxmb250PiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mbikiCittc2dzdHIgIiIKKyItZm9udCA8U2NocmlmdGFydD5cdEJlbnV0emUgPFNjaHJpZnRhcnQ+IGb8ciBub3JtYWxlbiBUZXh0IChhdWNoIG1pdDogLWZuKSIKKworIzogbWFpbi5jOjIzNzIKK21zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCittc2dzdHIgIi1ib2xkZm9udCA8U2NocmlmdGFydD5cdEJlbnV0emUgPFNjaHJpZnRhcnQ+IGb8ciBGZXR0c2NocmlmdCIKKworIzogbWFpbi5jOjIzNzMKK21zZ2lkICItaXRhbGljZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGl0YWxpYyB0ZXh0IgorbXNnc3RyICItaXRhbGljZm9udCA8U2NocmlmdGFydD5cdEJlbnV0emUgPFNjaHJpZnRhcnQ+IGb8ciBnZW5laWd0ZW4gVGV4dCIKKworIzogbWFpbi5jOjIzNzQgbWFpbi5jOjIzOTIKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIiIKKyItZ2VvbWV0cnkgPGdlb20+XHRiZW51dHplIDxnZW9tPiBm/HIgZGllIEFuZmFuZ3MgQWJtZXNzdW5nZW4gKGF1Y2ggbWl0OiAtIgorImdlb20pIgorCisjOiBtYWluLmM6MjM3NQorbXNnaWQgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHRVc2UgYSBib3JkZXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLWJ3KSIKK21zZ3N0ciAiIgorIi1ib3JkZXJ3aWR0aCA8QnJlaXRlPlx0QmVudXR6ZSBlaW5lbiBSYWhtZW4gZGVyIEJyZWl0ZSA8QnJlaXRlPiAoYXVjaCBtaXQ6IC0iCisiYncpIgorCisjOiBtYWluLmM6MjM3NgorbXNnaWQgIi1zY3JvbGxiYXJ3aWR0aCA8d2lkdGg+ICBVc2UgYSBzY3JvbGxiYXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLXN3KSIKK21zZ3N0ciAiIgorIi1zY3JvbGxiYXJ3aWR0aCA8QnJlaXRlPiAgQmVudXR6ZSBlaW5lIFNjcm9sbGJhciBkZXIgQnJlaXRlIDxCcmVpdGU+IChhdWNoICIKKyJtaXQ6IC1zdykiCisKKyM6IG1haW4uYzoyMzc4Cittc2dpZCAiLW1lbnVoZWlnaHQgPGhlaWdodD5cdFVzZSBhIG1lbnUgYmFyIGhlaWdodCBvZiA8aGVpZ2h0PiAoYWxzbzogLW1oKSIKK21zZ3N0ciAiIgorIi1tZW51aGVpZ2h0IDxI9mhlPlx0QmVudXR6ZSBlaW5lbiBNZW78LUJhbGtlbiBkZXIgSPZoZSA8SPZoZT4gKGF1Y2ggbWl0OiAtbWgpIgorCisjOiBtYWluLmM6MjM4MCBtYWluLmM6MjM5MworbXNnaWQgIi1yZXZlcnNlXHRcdFVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiAtcnYpIgorbXNnc3RyICItcmV2ZXJzZVx0XHRCZW51dHplIGludmVydGllcnRlIEZhcmJlbiAoYXVjaCBtaXQ6IC1ydikiCisKKyM6IG1haW4uYzoyMzgxCittc2dpZCAiK3JldmVyc2VcdFx0RG9uJ3QgdXNlIHJldmVyc2UgdmlkZW8gKGFsc286ICtydikiCittc2dzdHIgIityZXZlcnNlXHRcdEJlbnV0emUga2VpbmUgaW52ZXJ0aWVydGVuIEZhcmJlbiAoYXVjaCBtaXQ6ICtydikiCisKKyM6IG1haW4uYzoyMzgyCittc2dpZCAiLXhybSA8cmVzb3VyY2U+XHRTZXQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSIKK21zZ3N0ciAiLXhybSA8cmVzb3VyY2U+XHRTZXR6ZSBkaWUgZ2VnZWJlbmUgUmVzb3VyY2UiCisKKyM6IG1haW4uYzoyMzg1Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKFJJU0MgT1MgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudGUgZvxyIGRpZSBndmltIFJJU0MtT1MgVmVyc2lvbjpcbiIKKworIzogbWFpbi5jOjIzODYKK21zZ2lkICItLWNvbHVtbnMgPG51bWJlcj5cdEluaXRpYWwgd2lkdGggb2Ygd2luZG93IGluIGNvbHVtbnMiCittc2dzdHIgIi0tY29sdW1ucyA8TnVtbWVyPlx0QW5mYW5nc2JyZWl0ZSBkZXMgRmVuc3RlcnMgaW4gU3BhbHRlbiIKKworIzogbWFpbi5jOjIzODcKK21zZ2lkICItLXJvd3MgPG51bWJlcj5cdEluaXRpYWwgaGVpZ2h0IG9mIHdpbmRvdyBpbiByb3dzIgorbXNnc3RyICItLXJvd3MgPE51bW1lcj5cdEFuZmFuZ3No9mhlIGRlcyBGZW5zdGVycyBpbiBaZWlsZW4iCisKKyM6IG1haW4uYzoyMzkwCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEdUSysgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudGUgZvxyIGRpZSBndmltIEdUSysgVmVyc2lvbjpcbiIKKworIzogbWFpbi5jOjIzOTQKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IChhbHNvOiAtLWRpc3BsYXkpIgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdFN0YXJ0ZSB2aW0gYXVmIDxkaXNwbGF5PiAoYXVjaCBtaXQ6IC0tZGlzcGxheSkiCisKKyM6IG1haW4uYzoyMzk2Cittc2dpZCAiLS1oZWxwXHRcdFNob3cgR25vbWUgYXJndW1lbnRzIgorbXNnc3RyICItLWhlbHBcdFx0WmVpZ2UgR25vbWUtQXJndW1lbnRlIgorCisjLiBGYWlsZWQgdG8gc2VuZCwgYWJvcnQuCisjOiBtYWluLmM6MjYzOAorbXNnaWQgIiIKKyJcbiIKKyJTZW5kIGZhaWxlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNjaGlja2VuIGRlcyBBdXNkcnVja3Mgc2NobHVnIGZlaGwuXG4iCisKKyMuIExldCB2aW0gc3RhcnQgbm9ybWFsbHkuCisjOiBtYWluLmM6MjY0MworbXNnaWQgIiIKKyJcbiIKKyJTZW5kIGZhaWxlZC4gVHJ5aW5nIHRvIGV4ZWN1dGUgbG9jYWxseVxuIgorbXNnc3RyICIiCisiXG4iCisiU2NoaWNrZW4gc2NobHVnIGZlaGwuIFZlcnN1Y2hlIGxva2FsIGF1c3p1ZvxocmVuXG4iCisKKyM6IG1haW4uYzoyNjc2IG1haW4uYzoyNjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG9mICVkIGVkaXRlZCIKK21zZ3N0ciAiJWQgdm9uICVkIGVkaXRpZXJ0IgorCisjOiBtYWluLmM6MjcyMAorbXNnaWQgIlNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIlNjaGlja2VuIGRlcyBBdXNkcnVja3Mgc2NobHVnIGZlaGwuXG4iCisKKyM6IG1hcmsuYzo2NjAKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIktlaW5lIE1hcmtpZXJ1bmdlbiBnZXNldHp0IgorCisjOiBtYXJrLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4MzogS2VpbmUgTWFya2llcnVuZ2VuIHBhc3NlbiB6dSBcIiVzXCIiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjY3MworbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyJNYXJrIFplaWxlIFNwICBEYXRlaS9UZXh0IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo3MTEKK21zZ2lkICIiCisiXG4iCisiIGp1bXAgbGluZSAgY29sIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiBTcHJ1bmcgWmVpbGUgU3AgRGF0ZWkvVGV4dCIKKworIzogbWFyay5jOjEwNzMKK21zZ2lkICIiCisiXG4iCisiIyBGaWxlIG1hcmtzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBEYXRlaS1NYXJrZW46XG4iCisKKyMuIFdyaXRlIHRoZSBqdW1wbGlzdCB3aXRoIC0nCisjOiBtYXJrLmM6MTEwOAorbXNnaWQgIiIKKyJcbiIKKyIjIEp1bXBsaXN0IChuZXdlc3QgZmlyc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBHZXNjaGljaHRlIChuZXVlc3RlIGJpcyDkbHRlc3RlKTpcbiIKKworIzogbWFyay5jOjEyMDMKK21zZ2lkICIiCisiXG4iCisiIyBIaXN0b3J5IG9mIG1hcmtzIHdpdGhpbiBmaWxlcyAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIEdlc2NoaWNodGUgZGVyIE1hcmtpZXJ1bmdlbiBpbm5lcmhhbGIgdm9uIERhdGVpZW4gKG5ldWVzdGUgYmlzIORsdGVzdGUpOlxuIgorCisjOiBtYXJrLmM6MTI4NgorbXNnaWQgIk1pc3NpbmcgJz4nIgorbXNnc3RyICInPicgZmVobHQiCisKKyM6IG1ieXRlLmM6Mzk1Cittc2dpZCAiTm90IGEgdmFsaWQgY29kZXBhZ2UiCittc2dzdHIgIklzdCBuaWNodCBlaW5lIHp1bORzc2lnZSBDb2RlLVNlaXRlIgorCisjOiBtYnl0ZS5jOjMxMDcKK21zZ2lkICJFMjg0OiBDYW5ub3Qgc2V0IElDIHZhbHVlcyIKK21zZ3N0ciAiRTI4NDogS2FubiBkaWUgSUMgV2VydGUgbmljaHQgc2V0emVuIgorCisjOiBtYnl0ZS5jOjMyNTkKK21zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCittc2dzdHIgIkUyODU6IEVpbmdhYmUtS29udGV4dCBrb25udGUgbmljaHQgZXJ6ZXVndCB3ZXJkZW4iCisKKyM6IG1ieXRlLmM6MzQwNgorbXNnaWQgIkUyODY6IEZhaWxlZCB0byBvcGVuIGlucHV0IG1ldGhvZCIKK21zZ3N0ciAiRTI4NjogRWluZ2FiZS1NZXRob2RlIGtvbm50ZSBnZfZmZm5ldCB3ZXJkZW4iCisKKyM6IG1ieXRlLmM6MzQxNworbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4NzogQWNodHVuZzogRGVzdHJveSBDYWxsYWJjayBrb25udGUgbmljaHQgYXVmIElNIGdlc2V0enQgd2VyZGVuIgorCisjOiBtYnl0ZS5jOjM0MjMKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODogRWluZ2FiZS1NZXRob2RlIHVudGVyc3T8dHp0IGtlaW5lbiBlaW56aWdlbiBTdGlsIgorCisjOiBtYnl0ZS5jOjM0ODAKK21zZ2lkICJFMjg5OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IG15IHByZWVkaXQgdHlwZSIKK21zZ3N0ciAiRTI4OTogRWluZ2FiZS1NZXRob2RlIHVudGVyc3T8dHp0IG5pY2h0IG1laW5lbiBWb3JlZGl0aWVyLVR5cGVuIgorCisjOiBtYnl0ZS5jOjM1NTQKK21zZ2lkICJFMjkwOiBvdmVyLXRoZS1zcG90IHN0eWxlIHJlcXVpcmVzIGZvbnRzZXQiCittc2dzdHIgIkUyOTA6IGRlciDcYmVyLWRlbS1QdW5rdCBTdGlsIGJlbvZ0aWd0IGZvbnRzZXQiCisKKyM6IG1ieXRlLmM6MzU4MgorbXNnaWQgIkUyOTE6IFlvdXIgR1RLKyBpcyBvbGRlciB0aGFuIDEuMi4zLiBTdGF0dXMgYXJlYSBkaXNhYmxlZCIKK21zZ3N0ciAiIgorIkUyOTE6IElociBHVEsrIGlzdCDkbHRlciBhbHMgMS4yLjMuIERlciBTdGF0dXMtQmVyZWljaCB3aXJkIGFiZ2VzY2hhbHRldCIKKworIzogbWJ5dGUuYzozODQ5Cittc2dpZCAiRTI5MjogSW5wdXQgTWV0aG9kIFNlcnZlciBpcyBub3QgcnVubmluZyIKK21zZ3N0ciAiRTI5MjogU2VydmVyIGRlciBFaW5nYWJlLU1ldGhvZGUgbOR1ZnQgbmljaHQiCisKKyM6IG1lbWZpbGUuYzo0ODgKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5MzogQmxvY2sgd2FyIG5pY2h0IGdlc3BlcnJ0IgorCisjOiBtZW1maWxlLmM6OTg5Cittc2dpZCAiRTI5NDogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgcmVhZCIKK21zZ3N0ciAiRTI5NDogUG9zaXRpb25pZXItRmVobGVyIGJlaW0gTGVzZW4gZGVyIEF1c2xhZ2VydW5ncy1EYXRlaSIKKworIzogbWVtZmlsZS5jOjk5NAorbXNnaWQgIkUyOTU6IFJlYWQgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk1OiBMZXNlLUZlaGxlciBpbiBkZXIgQXVzbGFnZXJ1bmdzLURhdGVpIgorCisjOiBtZW1maWxlLmM6MTA0NgorbXNnaWQgIkUyOTY6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHdyaXRlIgorbXNnc3RyICJFMjk2OiBQb3NpdGlvbmllci1GZWhsZXIgYmVpbSBTY2hyZWliZW4gaW4gZGllIEF1c2xhZ2VydW5ncy1EYXRlaSIKKworIzogbWVtZmlsZS5jOjEwNjQKK21zZ2lkICJFMjk3OiBXcml0ZSBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTc6IEZlaGxlciBiZWltIFNjaHJlaWJlbiBpbiBkaWUgQXVzbGFnZXJ1bmdzLURhdGVpIgorCisjOiBtZW1maWxlLmM6MTI2MQorbXNnaWQgIkUzMDA6IFN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyAoc3ltbGluayBhdHRhY2s/KSIKK21zZ3N0ciAiRTMwMDogQXVzbGFnZXJ1bmdzLURhdGVpIGlzdCBiZXJlaXRzIHZvcmhhbmRlbiAoc3ltbGluayBBdHRhY2tlPykiCisKKyM6IG1lbWxpbmUuYzoyNzUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDA/IgorbXNnc3RyICJFMjk4OiBCbG9jayBOci4gMCBuaWNodCBlcmhhbHRlbj8iCisKKyM6IG1lbWxpbmUuYzozMTUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDE/IgorbXNnc3RyICJFMjk4OiBCbG9jayBOci4gMSBuaWNodCBlcmhhbHRlbj8iCisKKyM6IG1lbWxpbmUuYzozMzMKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDI/IgorbXNnc3RyICJFMjk4OiBCbG9jayBOci4gMiBuaWNodCBlcmhhbHRlbj8iCisKKyMuIGNvdWxkIG5vdCAocmUpb3BlbiB0aGUgc3dhcCBmaWxlLCB3aGF0IGNhbiB3ZSBkbz8/Pz8KKyM6IG1lbWxpbmUuYzo0NDMKK21zZ2lkICJFMzAxOiBPb3BzLCBsb3N0IHRoZSBzd2FwIGZpbGUhISEiCittc2dzdHIgIkUzMDE6IFVwcywgVmVybHVzdCBkZXIgQXVzbGFnZXJ1bmdzLURhdGVpISEhIgorCisjOiBtZW1saW5lLmM6NDQ4Cittc2dpZCAiRTMwMjogQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDI6IEF1c2xhZ2VydW5ncy1EYXRlaSBrb25udGUgbmljaHQgdW1iZW5hbm50IHdlcmRlbiIKKworIzogbWVtbGluZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIKK21zZ3N0ciAiIgorIkUzMDM6IEF1c2xhZ2VydW5ncy1EYXRlaSBm/HIgXCIlc1wiIGtvbm50ZSBuaWNodCBnZfZmZm5ldCB3ZXJkZW4sICIKKyJXaWVkZXJoZXJzdGVsbHVuZyB1bm32Z2xpY2giCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiBtbF90aW1lc3RhbXA6IEJsb2NrIE5yLiAwIG5pY2h0IGVyaGFsdGVuPyIKKworIzogbWVtbGluZS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA1OiBObyBzd2FwIGZpbGUgZm91bmQgZm9yICVzIgorbXNnc3RyICJFMzA1OiBLZWluZSBBdXNsYWdlcnVuZ3MtRGF0ZWkgZvxyICVzIGdlZnVuZGVuIgorCisjOiBtZW1saW5lLmM6NzY3Cittc2dpZCAiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIKK21zZ3N0ciAiIgorIkdlYmVuIFNpZSBkaWUgTnVtbWVyIGRlciBBdXNsYWdlcnVuZ3MtRGF0ZWkgZWluIGRpZSB2ZXJ3ZW5kZXQgd2VyZGVuIHNvbGwgKDAgIgorInVtIGFienVicmVjaGVuKTogIgorCisjOiBtZW1saW5lLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDY6IENhbm5vdCBvcGVuICVzIgorbXNnc3RyICJFMzA2OiAlcyBrYW5uIG5pY2h0IGdl9mZmbmV0IHdlcmRlbiIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIkJsb2NrIDAga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiBhdXMgIgorCisjOiBtZW1saW5lLmM6ODM3Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIlZpZWxsZWljaHQgd3VyZGVuIGtlaW5lIMRuZGVydW5nZW4gdm9yZ2Vub21tZW4gb2RlciBWaW0gaGF0dGUgZGllICIKKyJBdXNsYWdlcnVuZ3MtRGF0ZWkgbmljaHQgYWt0dWFsaXNpZXJ0LiIKKworIzogbWVtbGluZS5jOjg0NyBtZW1saW5lLmM6ODY0Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiIGthbm4gbmljaHQgenVzYW1tZW4gbWl0IGRpZXNlciBWaW0gVmVyc2lvbiB2ZXJ3ZW5kZXQgd2VyZGVuLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAiQmVudXR6ZSBWaW0gVmVyc2lvbiAzLjAuXG4iCisKKyM6IG1lbWxpbmUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNzogJXMgZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwNzogJXMgc2llaHQgbmljaHQgd2llIGVpbmUgVmltIEF1c2xhZ2VydW5ncy1EYXRlaSBhdXMiCisKKyM6IG1lbWxpbmUuYzo4NjgKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgb24gdGhpcyBjb21wdXRlci5cbiIKK21zZ3N0ciAiIGthbm4gYXVmIGRpZXNlbSBSZWNobmVyIG5pY2h0IHZlcndlbmRldCB3ZXJkZW4uXG4iCisKKyM6IG1lbWxpbmUuYzo4NzAKK21zZ2lkICJUaGUgZmlsZSB3YXMgY3JlYXRlZCBvbiAiCittc2dzdHIgIkRpZSBEYXRlaSB3dXJkZSBlcnN0ZWxsdCB1bSAiCisKKyM6IG1lbWxpbmUuYzo4NzQKK21zZ2lkICIiCisiLFxuIgorIm9yIHRoZSBmaWxlIGhhcyBiZWVuIGRhbWFnZWQuIgorbXNnc3RyICIiCisiLFxuIgorIm9kZXIgZGllIERhdGVpIHd1cmRlIHplcnN09nJ0LiIKKworIzogbWVtbGluZS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIgorbXNnc3RyICJWZXJ3ZW5kZSBBdXNsYWdlcnVuZ3MtRGF0ZWkgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9yaWdpbmFsIGZpbGUgXCIlc1wiIgorbXNnc3RyICJPcmlnaW5hbC1EYXRlaSBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MzQKK21zZ2lkICJFMzA4OiBXYXJuaW5nOiBPcmlnaW5hbCBmaWxlIG1heSBoYXZlIGJlZW4gY2hhbmdlZCIKK21zZ3N0ciAiRTMwODogV2FybnVuZzogRGllIE9yaWdpbmFsLURhdGVpIGv2bm50ZSB2ZXLkbmRlcnQgd29yZGVuIHNlaW4iCisKKyM6IG1lbWxpbmUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwOTogVW5hYmxlIHRvIHJlYWQgYmxvY2sgMSBmcm9tICVzIgorbXNnc3RyICJFMzA5OiBCbG9jayAxIGthbm4gbmljaHQgbmljaHQgdm9uICVzIGdlbGVzZW4gd2VyZGVuIgorCisjOiBtZW1saW5lLmM6OTc5Cittc2dpZCAiPz8/TUFOWSBMSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz9WSUVMRSBaRUlMRU4gRkVITEVOIgorCisjOiBtZW1saW5lLmM6OTk1Cittc2dpZCAiPz8/TElORSBDT1VOVCBXUk9ORyIKK21zZ3N0ciAiPz8/WkVJTEVOIFrESExFUiBGQUxTQ0giCisKKyM6IG1lbWxpbmUuYzoxMDAyCittc2dpZCAiPz8/RU1QVFkgQkxPQ0siCittc2dzdHIgIj8/P0xFRVJFUiBCTE9DSyIKKworIzogbWVtbGluZS5jOjEwMjgKK21zZ2lkICI/Pz9MSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz9aRUlMRU4gRkVITEVOIgorCisjOiBtZW1saW5lLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzEwOiBCbG9jayAxIElEIHdyb25nICglcyBub3QgYSAuc3dwIGZpbGU/KSIKK21zZ3N0ciAiRTMxMDogQmxvY2sgMSBJRCBmYWxzY2ggKGlzdCAlcyBrZWluZSAuc3dwLURhdGVpPykiCisKKyM6IG1lbWxpbmUuYzoxMDY1Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/QkxPQ0sgRkVITFQiCisKKyM6IG1lbWxpbmUuYzoxMDgxCittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGJlIG1lc3NlZCB1cCIKK21zZ3N0ciAiPz8/IHZvbiBoaWVyIGJpcyA/Pz9FTkRFIGv2bm50ZW4gZGllIFplaWxlbiBmYWxzY2ggc2VpbiIKKworIzogbWVtbGluZS5jOjEwOTcKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiCittc2dzdHIgIj8/PyB2b24gaGllciBiaXMgPz8/RU5ERSBr9m5udGVuIFplaWxlbiBlaW5nZWb8Z3Qgb2RlciBnZWz2c2NodCBzZWluIgorCisjOiBtZW1saW5lLmM6MTExNworbXNnaWQgIj8/P0VORCIKK21zZ3N0ciAiPz8/RU5ERSIKKworIzogbWVtbGluZS5jOjExNDMKK21zZ2lkICJFMzExOiBSZWNvdmVyeSBJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiRTMxMTogV2llZGVyaGVyc3RlbGx1bmcgdW50ZXJicm9jaGVuIgorCisjOiBtZW1saW5lLmM6MTE0NQorbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIiIKKyJFMzEyOiBGZWhsZXIgd3VyZGVuIGZlc3RnZXN0ZWxsdCB35GhyZW5kIGRlciBXaWVkZXJoZXJzdGVsbHVuZzogc3VjaGUgbmFjaCAiCisiWmVpbGVuIGRpZSBtaXQgPz8/IGJlZ2lubmVuIgorCisjOiBtZW1saW5lLmM6MTE0OAorbXNnaWQgIlJlY292ZXJ5IGNvbXBsZXRlZC4gWW91IHNob3VsZCBjaGVjayBpZiBldmVyeXRoaW5nIGlzIE9LLiIKK21zZ3N0ciAiV2llZGVyaGVyc3RlbGx1bmcgYmVlbmRldC4gUHL8ZmVuIFNpZSwgb2IgYWxsZXMgYWxsZXMgT0sgaXN0LiIKKworIzogbWVtbGluZS5jOjExNDkKK21zZ2lkICIiCisiXG4iCisiKFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIG91dCB0aGlzIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoV29sbGVuIFNpZSB2aWVsbGVpY2h0IGRpZXNlIERhdGVpIHVudGVyIGVpbmVtIG5ldWVuIE5hbWVuIHNwZWljaGVyblxuIgorCisjOiBtZW1saW5lLmM6MTE1MAorbXNnaWQgImFuZCBydW4gZGlmZiB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIHRvIGNoZWNrIGZvciBjaGFuZ2VzKVxuIgorbXNnc3RyICJ1bmQgXCJkaWZmXCIgenVyIE9yaWdpbmFsLURhdGVpIG1hY2hlbiwgdW0gxG5kZXJ1bmdlbiB6dSBwcvxmZW4pXG4iCisKKyM6IG1lbWxpbmUuYzoxMTUxCittc2dpZCAiIgorIkRlbGV0ZSB0aGUgLnN3cCBmaWxlIGFmdGVyd2FyZHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJM9nNjaGVuIFNpZSBkaWUgLnN3cC1EYXRlaSBkYW5hY2guXG4iCisiXG4iCisKKyMuIHVzZSBtc2coKSB0byBzdGFydCB0aGUgc2Nyb2xsaW5nIHByb3Blcmx5CisjOiBtZW1saW5lLmM6MTIwNworbXNnaWQgIlN3YXAgZmlsZXMgZm91bmQ6IgorbXNnc3RyICJBdXNsYWdlcnVuZ3MtRGF0ZWllbiBnZWZ1bmRlbjoiCisKKyM6IG1lbWxpbmUuYzoxMzg1Cittc2dpZCAiICAgSW4gY3VycmVudCBkaXJlY3Rvcnk6XG4iCittc2dzdHIgIiAgIEltIGxhdWZlbmRlbiBWZXJ6ZWljaG5pczpcbiIKKworIzogbWVtbGluZS5jOjEzODcKK21zZ2lkICIgICBVc2luZyBzcGVjaWZpZWQgbmFtZTpcbiIKK21zZ3N0ciAiICAgQmVudXR6ZSBnZWdlYmVuZW4gTmFtZW46XG4iCisKKyM6IG1lbWxpbmUuYzoxMzkxCittc2dpZCAiICAgSW4gZGlyZWN0b3J5ICIKK21zZ3N0ciAiICAgSW0gVmVyemVpY2huaXMgIgorCisjOiBtZW1saW5lLmM6MTQwOQorbXNnaWQgIiAgICAgIC0tIG5vbmUgLS1cbiIKK21zZ3N0ciAiICAgICAgLS0gTmljaHRzIC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDgxCittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgIEVpZ2VudHVtIHZvbjogIgorCisjOiBtZW1saW5lLmM6MTQ4MworbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgdm9tOiAiCisKKyM6IG1lbWxpbmUuYzoxNDg3IG1lbWxpbmUuYzozNjgwCittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICAgIHZvbTogIgorCisjOiBtZW1saW5lLmM6MTUwMworbXNnaWQgIiAgICAgICAgIFtmcm9tIFZpbSB2ZXJzaW9uIDMuMF0iCittc2dzdHIgIiAgICAgICAgIFt2b24gVmltIFZlcnNpb24gMy4wXSIKKworIzogbWVtbGluZS5jOjE1MDcKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgIFtzaWVodCBuaWNodCB3aWUgZWluZSBWaW0gQXVzbGFnZXJ1bmdzLURhdGVpIGF1c10iCisKKyM6IG1lbWxpbmUuYzoxNTExCittc2dpZCAiICAgICAgICAgZmlsZSBuYW1lOiAiCittc2dzdHIgIiAgICAgICAgIERhdGVpbmFtZTogIgorCisjOiBtZW1saW5lLmM6MTUyMworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICAgbW9kaWZpZWQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIHZlcuRuZGVydDogIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIllFUyIKK21zZ3N0ciAiSkEiCisKKyM6IG1lbWxpbmUuYzoxNTI0Cittc2dpZCAibm8iCittc2dzdHIgIm5laW4iCisKKyM6IG1lbWxpbmUuYzoxNTI4Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIHVzZXIgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICBCZW51dHplciBOYW1lOiAiCisKKyM6IG1lbWxpbmUuYzoxNTM1Cittc2dpZCAiICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIiAgIEhvc3QgTmFtZTogIgorCisjOiBtZW1saW5lLmM6MTUzNworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIEhvc3QgTmFtZTogIgorCisjOiBtZW1saW5lLmM6MTU0MworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgUHJvY2VzcyBJRDogIgorCisjOiBtZW1saW5lLmM6MTU0OQorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAobOR1ZnQgbm9jaCkiCisKKyM6IG1lbWxpbmUuYzoxNTYxCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbbmljaHQgdmVyd2VuZGJhciB6dXNhbW1lbiBtaXQgZGllc2VyIFZpbS1WZXJzaW9uXSIKKworIzogbWVtbGluZS5jOjE1NjQKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgb24gdGhpcyBjb21wdXRlcl0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbbmljaHQgdmVyd2VuZGJhciBhdWYgZGllc2VtIFJlY2huZXJdIgorCisjOiBtZW1saW5lLmM6MTU2OQorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iCittc2dzdHIgIiAgICAgICAgIFtrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuXSIKKworIzogbWVtbGluZS5jOjE1NzMKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIG9wZW5lZF0iCittc2dzdHIgIiAgICAgICAgIFtrYW5uIG5pY2h0IGdl9mZmbmV0IHdlcmRlbl0iCisKKyM6IG1lbWxpbmUuYzoxNzYzCittc2dpZCAiRTMxMzogQ2Fubm90IHByZXNlcnZlLCB0aGVyZSBpcyBubyBzd2FwIGZpbGUiCittc2dzdHIgIkUzMTM6IEthbm4gbmljaHQgYWJzaWNoZXJuLCBlcyBnaWJ0IGtlaW5lIEF1c2xhZ2VydW5ncy1EYXRlaSIKKworIzogbWVtbGluZS5jOjE4MTYKK21zZ2lkICJGaWxlIHByZXNlcnZlZCIKK21zZ3N0ciAiRGF0ZWkgZ2VzaWNoZXJ0IgorCisjOiBtZW1saW5lLmM6MTgxOAorbXNnaWQgIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIKK21zZ3N0ciAiRTMxNDogQWJzaWNoZXJ1bmcgZmVobGdlc2NobGFnZW4iCisKKyM6IG1lbWxpbmUuYzoxODg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTU6IG1sX2dldDogaW52YWxpZCBsbnVtOiAlbGQiCittc2dzdHIgIkUzMTU6IG1sX2dldDogdW56dWzkc3NpZ2UgbG51bTogJWxkIgorCisjOiBtZW1saW5lLmM6MTkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE2OiBtbF9nZXQ6IGNhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzE2OiBtbF9nZXQ6IFplaWxlICVsZCBrYW5uIG5pY2h0IGdlZnVuZGVuIHdlcmRlbiIKKworIzogbWVtbGluZS5jOjIzMDMKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDMiCittc2dzdHIgIkUzMTc6IFplaWdlci1CbG9jayBpZCBmYWxzY2ggMyIKKworIzogbWVtbGluZS5jOjIzODMKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCBzb2xsdGUgMCBzZWluIgorCisjOiBtZW1saW5lLmM6MjQ0NQorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODogWnUgdmllbGUgQmxvY2tzIGFrdHVhbGlzaWVydD8iCisKKyM6IG1lbWxpbmUuYzoyNjAyCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiBaZWlnZXIgQmxvY2sgaWQgZmFsc2NoIDQiCisKKyM6IG1lbWxpbmUuYzoyNjI5Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAiQmxvY2sgMSBnZWz2c2NodD8iCisKKyM6IG1lbWxpbmUuYzoyODI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjA6IENhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzIwOiBaZWlsZSAlbGQga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4iCisKKyM6IG1lbWxpbmUuYzozMDcyCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyIKK21zZ3N0ciAiRTMxNzogWmVpZ2VyIEJsb2NrIGlkIGlzdCBmYWxzY2giCisKKyM6IG1lbWxpbmUuYzozMDg4Cittc2dpZCAicGVfbGluZV9jb3VudCBpcyB6ZXJvIgorbXNnc3RyICJwZV9saW5lX2NvdW50IGlzdCBOdWxsIgorCisjOiBtZW1saW5lLmM6MzExNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzIyOiBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVsZCBwYXN0IHRoZSBlbmQiCittc2dzdHIgIkUzMjI6IFplaWxlbm51bW1lciBuaWNodCBpbSB6dWzkc3NpZ2VuIEJlcmVpY2g6ICVsZCBuYWNoIGRlbSBFbmRlIgorCisjOiBtZW1saW5lLmM6MzEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIzOiBsaW5lIGNvdW50IHdyb25nIGluIGJsb2NrICVsZCIKK21zZ3N0ciAiRTMyMzogWmVpbGVuIFrkaGxlciBmYWxzY2ggaW4gQmxvY2sgJWxkIgorCisjOiBtZW1saW5lLmM6MzE3MAorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICJTdGFwZWwgR3L232Ugd+RjaHN0IgorCisjOiBtZW1saW5lLmM6MzIxNgorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMiIKK21zZ3N0ciAiRTMxNzogWmVpZ2VyIEJsb2NrIGlkIGZhbHNjaCAyIgorCisjOiBtZW1saW5lLmM6MzY3MAorbXNnaWQgIkUzMjU6IEFUVEVOVElPTiIKK21zZ3N0ciAiRTMyNTogQUNIVFVORyIKKworIzogbWVtbGluZS5jOjM2NzEKK21zZ2lkICIiCisiXG4iCisiRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgXCIiCittc2dzdHIgIiIKKyJcbiIKKyJBdXNsYWdlcnVuZ3MtRGF0ZWkgbWl0IGZvbGdlbmRlbSBOYW1lbiBnZWZ1bmRlbjogXCIiCisKKyM6IG1lbWxpbmUuYzozNjc1Cittc2dpZCAiV2hpbGUgb3BlbmluZyBmaWxlIFwiIgorbXNnc3RyICJCZWltINZmZm5lbiBkZXIgRGF0ZWkgXCIiCisKKyM6IG1lbWxpbmUuYzozNjg0Cittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgIG5ldWVyIGFscyBBdXNsYWdlcnVuZ3MtRGF0ZWkhXG4iCisKKyMuIFNvbWUgb2YgdGhlc2UgbWVzc2FnZXMgYXJlIGxvbmcgdG8gYWxsb3cgdHJhbnNsYXRpb24gdG8KKyMuICogb3RoZXIgbGFuZ3VhZ2VzLgorIzogbWVtbGluZS5jOjM2ODgKK21zZ2lkICIiCisiXG4iCisiKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLlxuIgorIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d29cbiIKKyIgICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMSkgRWluIGFuZGVyZXMgUHJvZ3JhbW0gZWRpdGllcnQgbfZnbGljaGVyd2Vpc2UgZGllc2UgRGF0ZWkuXG4iCisiICAgIFdlbm4gZGllcyBkZXIgRmFsbCBpc3QsIHNvbGx0ZW4gU2llIHZvcnNpY2h0aWcgc2VpbiwgZGFtaXRcbiIKKyIgICAgZXMgbmljaHQgenUg3GJlcnNjaG5laWR1bmdlbiBrb21tdC5cbiIKKworIzogbWVtbGluZS5jOjM2ODkKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgRW5kZSwgb2RlciBGb3J0c2V0enVuZyBtaXQgVm9yc2ljaHQuXG4iCisKKyM6IG1lbWxpbmUuYzozNjkwCittc2dpZCAiIgorIlxuIgorIigyKSBBbiBlZGl0IHNlc3Npb24gZm9yIHRoaXMgZmlsZSBjcmFzaGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDIpIEVpbmUgRWRpdGllci1TaXR6dW5nIGb8ciBkaWVzZSBEYXRlaSBpc3QgYWJnZXN0/HJ6dC5cbiIKKworIzogbWVtbGluZS5jOjM2OTEKK21zZ2lkICIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdXNlIFwiOnJlY292ZXJcIiBvciBcInZpbSAtciAiCittc2dzdHIgIiIKKyIgICAgV2VubiBkaWVzIGRlciBGYWxsIGlzdCwgc28gdmVyd2VuZGVuIFNpZSBcIjpyZWNvdmVyXCIgb2RlciBcInZpbSAtciAiCisKKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgdW0gZGllIMRuZGVydW5nZW4gd2llZGVyaGVyenVzdGVsbGVuIChzaWVoZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorCisjOiBtZW1saW5lLmM6MzY5NAorbXNnaWQgIiAgICBJZiB5b3UgZGlkIHRoaXMgYWxyZWFkeSwgZGVsZXRlIHRoZSBzd2FwIGZpbGUgXCIiCittc2dzdHIgIiIKKyIgICAgV2VubiBkaWVzIGJlcmVpdHMgZ2VzY2hlaGVuIGlzdCwgbPZzY2hlbiBTaWUgZGllIEF1c2xhZ2VydW5ncy1EYXRlaSBcIiIKKworIzogbWVtbGluZS5jOjM2OTYKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgdW0gZGllc2UgTmFjaHJpY2h0IHp1IHZlcm1laWRlbi5cbiIKKworIzogbWVtbGluZS5jOjM3MTAgbWVtbGluZS5jOjM3MTQKK21zZ2lkICJTd2FwIGZpbGUgXCIiCittc2dzdHIgIkF1c2xhZ2VydW5ncy1EYXRlaSBcIiIKKworIzogbWVtbGluZS5jOjM3MTEgbWVtbGluZS5jOjM3MTcKK21zZ2lkICJcIiBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlwiIGlzdCBiZXJlaXRzIHZvcmhhbmRlbiEiCisKKyM6IG1lbWxpbmUuYzozNzIwCittc2dpZCAiVklNIC0gQVRURU5USU9OIgorbXNnc3RyICJWSU0gLSBBQ0hUVU5HIgorCisjOiBtZW1saW5lLmM6MzcyMgorbXNnaWQgIlN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIkF1c2xhZ2VydW5ncy1EYXRlaSBpc3QgYmVyZWl0cyB2b3JoYW5kZW4hIgorCisjOiBtZW1saW5lLmM6MzcyNgorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0IgorbXNnc3RyICIiCisi1mZmbmVuIG51ciB6dW0gJkxlc2VuXG4iCisiVHJvdHpkZW0gJmVkaXRpZXJlblxuIgorIiZXaWVkZXJoZXJzdGVsbGVuXG4iCisiJkFiYnJlY2hlbiIKKworIzogbWVtbGluZS5jOjM3MjgKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZEZWxldGUgaXQiCittc2dzdHIgIiIKKyLWZmZuZW4gbnVyIHp1bSAmTGVzZW5cbiIKKyJUcm90emRlbSAmZWRpdGllcmVuXG4iCisiJldpZWRlcmhlcnN0ZWxsZW5cbiIKKyImQWJicmVjaGVuXG4iCisiRW50JmZlcm5lbiIKKworIzogbWVtbGluZS5jOjM3ODEKK21zZ2lkICJFMzI2OiBUb28gbWFueSBzd2FwIGZpbGVzIGZvdW5kIgorbXNnc3RyICJFMzI2OiBadSB2aWVsZSBBdXNsYWdlcnVuZ3MtRGF0ZWllbiBnZWZ1bmRlbiIKKworIzogbWVudS5jOjY0Cittc2dpZCAiRTMyNzogUGFydCBvZiBtZW51LWl0ZW0gcGF0aCBpcyBub3Qgc3ViLW1lbnUiCittc2dzdHIgIkUzMjc6IFRlaWwgZGVzIE1lbvxwdW5rdC1QZmFkZXMgbXVzcyB6dW0gVW50ZXJtZW78IGb8aHJlbiIKKworIzogbWVudS5jOjY1Cittc2dpZCAiRTMyODogTWVudSBvbmx5IGV4aXN0cyBpbiBhbm90aGVyIG1vZGUiCittc2dzdHIgIkUzMjg6IE1lbvwgZXhpc3RpZXJ0IG51ciBpbiBhbmRlcmVuIE1vZHVzIgorCisjOiBtZW51LmM6NjYKK21zZ2lkICJFMzI5OiBObyBtZW51IG9mIHRoYXQgbmFtZSIKK21zZ3N0ciAiRTMyOTogS2VpbiBNZW78IG1pdCBkaWVzZW0gTmFtZW4iCisKKyM6IG1lbnUuYzo1MDkKK21zZ2lkICJFMzMwOiBNZW51IHBhdGggbXVzdCBub3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzMwOiBNZW78LVBmYWQgZGFyZiBuaWNodCB6dW0gVW50ZXJtZW78IGb8aHJlbiIKKworIzogbWVudS5jOjU0OAorbXNnaWQgIkUzMzE6IE11c3Qgbm90IGFkZCBtZW51IGl0ZW1zIGRpcmVjdGx5IHRvIG1lbnUgYmFyIgorbXNnc3RyICIiCisiRTMzMTogTWVu/C1QdW5rdCBr9m5uZW4gbmljaHQgZGlyZWt0IHp1bSBNZW78LUJhbGtlbiBoaW56dWdlZvxndCB3ZXJkZW4iCisKKyM6IG1lbnUuYzo1NTQKK21zZ2lkICJFMzMyOiBTZXBhcmF0b3IgY2Fubm90IGJlIHBhcnQgb2YgYSBtZW51IHBhdGgiCittc2dzdHIgIkUzMzI6IFRyZW5uZXIga2FubiBuaWNodCBUZWlsIGRlcyBNZW78LVBmYWRlcyBzZWluIgorCisjLiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgbWVudSwgYW5kIHdlIGxpc3QgdGhlIG1hcHBpbmdzCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1lbnUuYzoxMDcwCittc2dpZCAiIgorIlxuIgorIi0tLSBNZW51cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTWVu/HMgLS0tIgorCisjOiBtZW51LmM6MTk4NworbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAiUmVp32UgZGllc2VzIE1lbvwgYWIiCisKKyM6IG1lbnUuYzoyMDUyCittc2dpZCAiRTMzMzogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIG1lbnUgaXRlbSIKK21zZ3N0ciAiRTMzMzogTWVu/C1QZmFkIG11c3MgenUgZWluZW0gTWVu/C1QdW5rdCBm/GhyZW4iCisKKyM6IG1lbnUuYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzQ6IE1lbnUgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTMzNDogTWVu/CBuaWNodCBnZWZ1bmRlbjogJXMiCisKKyM6IG1lbnUuYzoyMTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzU6IE1lbnUgbm90IGRlZmluZWQgZm9yICVzIG1vZGUiCittc2dzdHIgIkUzMzU6IE1lbvwgaXN0IGb8ciAlcyBNb2R1cyBuaWNodCBkZWZpbmllcnQiCisKKyM6IG1lbnUuYzoyMTc5Cittc2dpZCAiRTMzNjogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzM2OiBNZW78LVBmYWQgbXVzcyB6dW0gVW50ZXJtZW78IGb8aHJlbiIKKworIzogbWVudS5jOjIyMDAKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IE1lbvwgbmljaHQgZ2VmdW5kZW4gLSD8YmVycHL8ZmUgTWVu/C1OYW1lbiIKKworIzogbWVzc2FnZS5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlY3RlZCB3aGlsZSBwcm9jZXNzaW5nICVzOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZvxocmVuIHZvbiBcIiVzXCI6IgorCisjOiBtZXNzYWdlLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJTRsZDoiCittc2dzdHIgIlplaWxlICU0bGQ6IgorCisjOiBtZXNzYWdlLmM6NTI2Cittc2dpZCAiW3N0cmluZyB0b28gbG9uZ10iCittc2dzdHIgIltaZWljaGVua2V0dGUgenUgbGFuZ10iCisKKyM6IG1lc3NhZ2UuYzo2NzIKK21zZ2lkICJNZXNzYWdlcyBtYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiIKK21zZ3N0ciAi3GJlcnNldHp0IHZvbiBKb2hhbm5lcyBaZWxsbmVyIDxqb2hhbm5lc0B6ZWxsbmVyLm9yZz4iCisKKyM6IG1lc3NhZ2UuYzo4ODUKK21zZ2lkICJJbnRlcnJ1cHQ6ICIKK21zZ3N0ciAiVW50ZXJicmVjaHVuZzogIgorCisjOiBtZXNzYWdlLmM6ODg4Cittc2dpZCAiSGl0IEVOVEVSIHRvIGNvbnRpbnVlIgorbXNnc3RyICJ3ZWl0ZXIgbWl0IGRlciBFSU5HQUJFVEFTVEUiCisKKyM6IG1lc3NhZ2UuYzo4OTAKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICJEcvxja2VuIFNpZSBkaWUgRUlOR0FCRVRBU1RFIG9kZXIgZ2ViZW4gU2llIGVpbmVuIEJlZmVobCBlaW4iCisKKyM6IG1lc3NhZ2UuYzoxOTYxCittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0gTWVociAtLSIKKworIzogbWVzc2FnZS5jOjE5NjQKK21zZ2lkICIgKFJFVC9CUzogbGluZSwgU1BBQ0UvYjogcGFnZSwgZC91OiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVC9CUzogWmVpbGUsIExFRVJaRUlDSEVOL2I6IFNlaXRlLCBkL3U6IEhhbGJlIFNlaXRlLCBxOiBFbmRlKSIKKworIzogbWVzc2FnZS5jOjE5NjUKK21zZ2lkICIgKFJFVDogbGluZSwgU1BBQ0U6IHBhZ2UsIGQ6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUOiBaZWlsZSwgTEVFUlpFSUNIRU46IFNlaXRlLCBkOiBIYWxiZSBTZWl0ZSwgcTogRW5kZSkiCisKKyM6IG1lc3NhZ2UuYzoyNDQxIG1lc3NhZ2UuYzoyNDU2Cittc2dpZCAiUXVlc3Rpb24iCittc2dzdHIgIkZyYWdlIgorCisjOiBtZXNzYWdlLmM6MjQ0MworbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vIgorbXNnc3RyICIiCisiJkphXG4iCisiJk5laW4iCisKKyM6IG1lc3NhZ2UuYzoyNDU4Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJkphXG4iCisiJk5laW5cbiIKKyImQWJicmVjaGVuIgorCisjOiBtZXNzYWdlLmM6MjQ3NgorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZKYVxuIgorIiZOZWluXG4iCisiQWxsZSAmU3BlaWNoZXJuXG4iCisiQWxsZSAmVmVyd2VyZmVuXG4iCisiJkFiYnJlY2hlbiIKKworIzogbWVzc2FnZS5jOjI1MTcKK21zZ2lkICJTYXZlIEZpbGUgZGlhbG9nIgorbXNnc3RyICJEYXRlaSBTcGVpY2hlcm4gRGlhbG9nIgorCisjOiBtZXNzYWdlLmM6MjUxOQorbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIkRhdGVpINZmZm5lbiBEaWFsb2ciCisKKyMuIFRPRE86IG5vbi1HVUkgZmlsZSBzZWxlY3RvciBoZXJlCisjOiBtZXNzYWdlLmM6MjU5MAorbXNnaWQgIkUzMzg6IFNvcnJ5LCBubyBmaWxlIGJyb3dzZXIgaW4gY29uc29sZSBtb2RlIgorbXNnc3RyICJFMzM4OiBrZWluIERhdGVpLURpYWxvZyBpbSBLb25zb2xlLU1vZHVzIgorCisjOiBtaXNjMS5jOjI0NjIKK21zZ2lkICJXMTA6IFdhcm5pbmc6IENoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSIKK21zZ3N0ciAiVzEwOiBXYXJudW5nOiDEbmRlcm4gZWluZXIgc2NocmVpYmdlc2No/HR6dGVuIERhdGVpIgorCisjOiBtaXNjMS5jOjI2OTEKK21zZ2lkICIxIG1vcmUgbGluZSIKK21zZ3N0ciAiZWluZSBaZWlsZSBtZWhyIgorCisjOiBtaXNjMS5jOjI2OTMKK21zZ2lkICIxIGxpbmUgbGVzcyIKK21zZ3N0ciAiZWluZSBaZWlsZSB3ZW5pZ2VyIgorCisjOiBtaXNjMS5jOjI2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIG1vcmUgbGluZXMiCittc2dzdHIgIiVsZCBaZWlsZW4gbWVociIKKworIzogbWlzYzEuYzoyNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBmZXdlciBsaW5lcyIKK21zZ3N0ciAiJWxkIFplaWxlbiB3ZW5pZ2VyIgorCisjOiBtaXNjMS5jOjI3MDMKK21zZ2lkICIgKEludGVycnVwdGVkKSIKK21zZ3N0ciAiIChVbnRlcmJyb2NoZW4pIgorCisjOiBtaXNjMS5jOjYzMjEKK21zZ2lkICJWaW06IHByZXNlcnZpbmcgZmlsZXMuLi5cbiIKK21zZ3N0ciAiVmltOiBTaWNoZXJuIGRlciBEYXRlaWVuLi4uXG4iCisKKyMuIGNsb3NlIGFsbCBtZW1maWxlcywgd2l0aG91dCBkZWxldGluZworIzogbWlzYzEuYzo2MzMxCittc2dpZCAiVmltOiBGaW5pc2hlZC5cbiIKK21zZ3N0ciAiVmltOiBCZWVuZGV0LlxuIgorCisjOiBtaXNjMi5jOjY2NiBtaXNjMi5jOjY4MgorbXNnaWQgIkVSUk9SOiAiCittc2dzdHIgIkZFSExFUjogIgorCisjOiBtaXNjMi5jOjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiW2J5dGVzXSB0b3RhbCBhbGxvYy1mcmVlZCAlbHUtJWx1LCBpbiB1c2UgJWx1LCBwZWFrIHVzZSAlbHVcbiIKK21zZ3N0ciAiIgorIlxuIgorIltCeXRlc10gZ2VzYW10IGFsbG96aWVydC1mcmVpICVsdS0lbHUsIGluIFZlcndlbmR1bmcgJWx1LCBtYXhpbWFsZSAiCisiVmVyd2VuZHVuZyAlbHVcbiIKKworIzogbWlzYzIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW0F1ZnJ1ZmVdIGdlc2FtdCByZS9tYWxsb2MoKXMgJWx1LCBnZXNhbXQgZnJlZSgpcyAlbHVcbiIKKyJcbiIKKworIzogbWlzYzIuYzo3NDMKK21zZ2lkICJFMzQwOiBMaW5lIGlzIGJlY29taW5nIHRvbyBsb25nIgorbXNnc3RyICJFMzQwOiBaZWlsZSB3aXJkIHp1IGxhbmciCisKKyM6IG1pc2MyLmM6Nzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDE6IEludGVybmFsIGVycm9yOiBsYWxsb2MoJWxkLCApIgorbXNnc3RyICJFMzQxOiBJbnRlcm5lciBGZWhsZXI6IGxhbGxvYyglbGQsICkiCisKKyM6IG1pc2MyLmM6ODk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDI6IE91dCBvZiBtZW1vcnkhICAoYWxsb2NhdGluZyAlbHUgYnl0ZXMpIgorbXNnc3RyICJFMzQyOiBLZWluIFNwZWljaGVycGxhdHogbWVociB2b3JoYW5kZW4gKCVsdSBieXRlcyBhbGxvemllcnQpIgorCisjOiBtaXNjMi5jOjI1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FsbGluZyBzaGVsbCB0byBleGVjdXRlOiBcIiVzXCIiCittc2dzdHIgIlJ1ZmUgU2hlbGwgYXVmLCB1bSBcIiVzXCIgYXVzenVm/GhyZW4iCisKKyM6IG1pc2MyLmM6Mjc0NSBtaXNjMi5jOjUyMzAgb3B0aW9uLmM6NDYzNgorbXNnaWQgIk1pc3NpbmcgY29sb24iCittc2dzdHIgImZlaGxlbmRlcyBLb21tYSIKKworIzogbWlzYzIuYzoyNzQ3IG1pc2MyLmM6Mjc3NAorbXNnaWQgIklsbGVnYWwgbW9kZSIKK21zZ3N0ciAiVW56dWzkc3NpZ2VyIE1vZHVzIgorCisjOiBtaXNjMi5jOjI4MTMKK21zZ2lkICJJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIlVuenVs5HNzaWdlIE1hdXMtRm9ybSIKKworIzogbWlzYzIuYzoyODUzIG1pc2MyLmM6NTI1MAorbXNnaWQgImRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJaaWZmZXIgZXJ3YXJ0ZXQiCisKKyM6IG1pc2MyLmM6Mjg1OAorbXNnaWQgIklsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAiVW56dWzkc3NpZ2UgUHJvemVudGFuZ2FiZSIKKworIzogbWlzYzIuYzozMTYyCittc2dpZCAiRW50ZXIgZW5jcnlwdGlvbiBrZXk6ICIKK21zZ3N0ciAiR2ViZW4gU2llIGJpdHRlIGRlbiBTY2hs/HNzZWwgZWluOiAiCisKKyM6IG1pc2MyLmM6MzE2MworbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIkdlYmVuIFNpZSBkZW4gZ2xlaWNoZW4gU2NobPxzc2VsIG5vY2htYWxzIGVpbjoiCisKKyM6IG1pc2MyLmM6MzE3MworbXNnaWQgIktleXMgZG9uJ3QgbWF0Y2ghIgorbXNnc3RyICJEaWUgU2NobPxzc2VsIHN0aW1tZW4gbmljaHQg/GJlcmVpbiEiCisKKyM6IG1pc2MyLmM6MzcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTM0MzogSW52YWxpZCBwYXRoOiAnKipbbnVtYmVyXScgbXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIG9yIGJlICIKKyJmb2xsb3dlZCBieSAnJXMnLiIKK21zZ3N0ciAiIgorIkUzNDM6IFVuZ/xsdGlnZXIgUGZhZDogJyoqW051bW1lcl0nIG11c3MgYW0gRW5kZSBkZXMgUGZhZHMgc2Vpbiwgb2RlciB2b24gIgorIiclcycgZ2Vmb2xndCB3ZXJkZW4uIFNpZWhlIDpoZWxwIHBhdGguIgorCisjOiBtaXNjMi5jOjQ5ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NDogQ2FuJ3QgZmluZCBkaXJlY3RvcnkgXCIlc1wiIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NDogVmVyemVpY2huaXMgXCIlc1wiIGthbm4gaW0gJ2NkcGF0aCcgbmljaHQgZ2VmdW5kZW4gd2VyZGVuIgorCisjOiBtaXNjMi5jOjQ5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NTogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFMzQ1OiBEYXRlaSBcIiVzXCIga2FubiBpbSBQZmFkIG5pY2h0IGdlZnVuZGVuIHdlcmRlbiIKKworIzogbWlzYzIuYzo0OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDY6IE5vIG1vcmUgZGlyZWN0b3J5IFwiJXNcIiBmb3VuZCBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDY6IEtlaW4gd2VpdGVyZXMgVmVyemVpY2huaXMgXCIlc1wiIGltICdjZHBhdGgnIGdlZnVuZGVuIgorCisjOiBtaXNjMi5jOjQ5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiBLZWluZSB3ZWl0ZXJlIERhdGVpIFwiJXNcIiBpbSBQZmFkIGdlZnVuZGVuIgorCisjOiBtaXNjMi5jOjUyNDIKK21zZ2lkICJJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAiVW56dWzkc3NpZ2UgS29tcG9uZW50ZSIKKworIzogbm9ybWFsLmM6Mjg1NworbXNnaWQgIldhcm5pbmc6IHRlcm1pbmFsIGNhbm5vdCBoaWdobGlnaHQiCittc2dzdHIgIkFjaHR1bmc6IFRlcm1pbmFsIHVudGVyc3T8dHp0IGtlaW5lIEhlcnZvcmhlYnVuZyIKKworIzogbm9ybWFsLmM6MzA1MgorbXNnaWQgIkUzNDg6IE5vIHN0cmluZyB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDg6IEtlaW5lIFplaWNoZW5rZXR0ZSB1bnRlciBkZW0gQ3Vyc29yIgorCisjIElkZW50aWZpemllcnVuZ3N6ZWljaGVuL21lcmttYWwsIEJlemVpY2huZXIKKyM6IG5vcm1hbC5jOjMwNTQKK21zZ2lkICJFMzQ5OiBObyBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0OTogS2VpbiBNZXJrbWFsIHVudGVyIGRlbSBDdXJzb3IiCisKKyM6IG5vcm1hbC5jOjQyMjUKK21zZ2lkICJFMzUyOiBDYW5ub3QgZXJhc2UgZm9sZHMgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiIgorIkUzNTI6IEZhbHR1bmcga2FubiBtaXQgZGVyIGVpbmdlc3RlbGx0ZW4gTWV0aG9kZSAnZm9sZG1ldGhvZCcgbmljaHQgZ2Vs9nNjaHQgIgorIndlcmRlbiIKKworIzogb3BzLmM6MjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkIDEgdGltZSIKK21zZ3N0ciAiZWluZSBaZWlsZSBlaW4gTWFsICVzIgorCisjOiBvcHMuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgJWQgdGltZXMiCittc2dzdHIgIjEgWmVpbGUgJXMgJWQgTWFsIgorCisjOiBvcHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgMSB0aW1lIgorbXNnc3RyICIlbGQgWmVpbGVuICVzIGVpbiBNYWwiCisKKyM6IG9wcy5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiJWxkIFplaWxlbiAlcyAlZCBNYWwiCisKKyM6IG9wcy5jOjY1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgdG8gaW5kZW50Li4uICIKK21zZ3N0ciAiJWxkIFplaWxlbiB6dW0gRWlucvxja2VuLi4uICIKKworIzogb3BzLmM6NzAxCittc2dpZCAiMSBsaW5lIGluZGVudGVkICIKK21zZ3N0ciAiMSBaZWlsZSBlaW5nZXL8Y2t0Li4uICIKKworIzogb3BzLmM6NzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBpbmRlbnRlZCAiCittc2dzdHIgIiVsZCBaZWlsZW4gZWluZ2Vy/GNrdC4uLiAiCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNTQ2Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgImthbm4gbmljaHQga29waWVyZW47IGz2c2NoZSB0cm90emRlbSIKKworIzogb3BzLmM6MjA3OQorbXNnaWQgIjEgbGluZSBjaGFuZ2VkIgorbXNnc3RyICIxIFplaWxlIH4iCisKKyM6IG9wcy5jOjIwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGNoYW5nZWQiCittc2dzdHIgIiVsZCBaZWlsZW4gZ2XkbmRlcnQiCisKKyM6IG9wcy5jOjI0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnJlZWluZyAlbGQgbGluZXMiCittc2dzdHIgImdlYmUgJWxkIFplaWxlbiBmcmVpIgorCisjOiBvcHMuYzoyNzE5Cittc2dpZCAiMSBsaW5lIHlhbmtlZCIKK21zZ3N0ciAiRWluZSBaZWlsZSBrb3BpZXJ0IgorCisjOiBvcHMuYzoyNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgIiVsZCBaZWlsZW4ga29waWVydCIKKworIzogb3BzLmM6MzAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiBSZWdpc3RlciAlcyBpc3QgbGVlciIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBvcHMuYzozNTcyCittc2dpZCAiIgorIlxuIgorIi0tLSBSZWdpc3RlcnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFJlZ2lzdGVyIC0tLSIKKworIzogb3BzLmM6NDczMAorbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAiVW56dWzkc3NpZ2VyIFJlZ2lzdGVyIE5hbWUiCisKKyM6IG9wcy5jOjQ4MTYKK21zZ2lkICIiCisiXG4iCisiIyBSZWdpc3RlcnM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIFJlZ2lzdGVyOlxuIgorCisjOiBvcHMuYzo0ODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIKK21zZ3N0ciAiVW5iZWthbm50ZXIgUmVnaXN0ZXIgVHlwICVkIgorCisjOiBvcHMuYzo1MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTQ6IEludmFsaWQgcmVnaXN0ZXIgbmFtZTogJyVzJyIKK21zZ3N0ciAiRTM1NDogVW56dWzkc3NpZ2VyIFJlZ2lzdGVyIE5hbWU6ICclcyciCisKKyM6IG9wcy5jOjU1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIENvbHM7ICIKK21zZ3N0ciAiJWxkIFNwYWx0ZW47ICIKKworIzogb3BzLmM6NTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiCittc2dzdHIgIiVzJWxkIHZvbiAlbGQgWmVpbGVuOyAlbGQgdm9uICVsZCBXb3J0ZW47ICVsZCB2b24gJWxkIEJ5dGVzIgorCisjOiBvcHMuYzo1NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbCAlcyBvZiAlczsgTGluZSAlbGQgb2YgJWxkOyBXb3JkICVsZCBvZiAlbGQ7IEJ5dGUgJWxkIG9mICVsZCIKK21zZ3N0ciAiU3BhbCAlcyB2b24gJXM7IFplaWxlICVsZCB2b24gJWxkOyBXb3J0ICVsZCB2b24gJWxkOyBCeXRlICVsZCB2b24gJWxkIgorCisjOiBvcHMuYzo1NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCBm/HIgQk9NKSIKKworIzogb3B0aW9uLmM6MTk4OQorbXNnaWQgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIKK21zZ3N0ciAiRGFua2UgZvxyIGRpZSBCZW51dHp1bmcgdm9uIFZpbSIKKworIzogb3B0aW9uLmM6MzE3NQorbXNnaWQgIk9wdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJPcHRpb24gbmljaHQgdW50ZXJzdPx0enQiCisKKyM6IG9wdGlvbi5jOjMyMDAKK21zZ2lkICJOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIgorbXNnc3RyICJOaWNodCBlcmxhdWJ0IGluIGVpbmVyICdtb2RlbGluZSciCisKKyM6IG9wdGlvbi5jOjMyNTYKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0WnVsZXR6dCBnZXNldHp0IHZvbiAiCisKKyM6IG9wdGlvbi5jOjMzOTUKK21zZ2lkICJOdW1iZXIgcmVxdWlyZWQgYWZ0ZXIgPSIKK21zZ3N0ciAiQnJhdWNoZSBaYWhsIG5hY2ggPSIKKworIzogb3B0aW9uLmM6MzcxNCBvcHRpb24uYzo0MzIyCittc2dpZCAiTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIk5pY2h0IGdlZnVuZGVuIGluIHRlcm1jYXAiCisKKyM6IG9wdGlvbi5jOjM3ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBjaGFyYWN0ZXIgPCVzPiIKK21zZ3N0ciAiVW56dWzkc3NpZ2VzIFplaWNoZW4gPCVzPiIKKworIzogb3B0aW9uLmM6NDMwNyBvcHRpb24uYzo1NTczCittc2dpZCAiTm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiaGllciBuaWNodCBlcmxhdWJ0IgorCisjOiBvcHRpb24uYzo0MzE0Cittc2dpZCAiQ2Fubm90IHNldCAndGVybScgdG8gZW1wdHkgc3RyaW5nIgorbXNnc3RyICIndGVybScga2FubiBrZWluZSBsZWVyZSBaZWljaGVua2V0dGUgc2VpbiIKKworIzogb3B0aW9uLmM6NDMxNworbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdGVybSBpbiBHVUkiCittc2dzdHIgIid0ZXJtJyBrYW5uIGltIEdVSSBuaWNodCB2ZXLkbmRlcnQgd2VyZGVuIgorCisjOiBvcHRpb24uYzo0MzE5Cittc2dpZCAiVXNlIFwiOmd1aVwiIHRvIHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIlZlcndlbmRlIFwiOmd1aVwiLCB1bSBkaWUgR1VJLVZlcnNpb24genUgc3RhcnRlbiIKKworIzogb3B0aW9uLmM6NDM0MAorbXNnaWQgIidiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiCittc2dzdHIgIidiYWNrdXBleHQnIHVuZCAncGF0Y2htb2RlJyBzaW5kIGdsZWljaCIKKworIzogb3B0aW9uLmM6NDYzOAorbXNnaWQgIlplcm8gbGVuZ3RoIHN0cmluZyIKK21zZ3N0ciAiWmVpY2hlbmtldHRlIGRlciBM5G5nZSBOdWxsIgorCisjOiBvcHRpb24uYzo0NzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgbnVtYmVyIGFmdGVyIDwlcz4iCittc2dzdHIgImZlaGxlbmRlIFphaGwgbmFjaCA8JXM+IgorCisjOiBvcHRpb24uYzo0NzIwCittc2dpZCAiTWlzc2luZyBjb21tYSIKK21zZ3N0ciAiS29tbWEgZmVobHQiCisKKyM6IG9wdGlvbi5jOjQ3MjcKK21zZ2lkICJNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJlaW4gJy1XZXJ0IG11c3MgYW5nZWdlYmVuIHdlcmRlbiIKKworIzogb3B0aW9uLmM6NDc2NworbXNnaWQgImNvbnRhaW5zIHVucHJpbnRhYmxlIGNoYXJhY3RlciIKK21zZ3N0ciAiZW50aORsdCBuaWNodC1kcnVja2JhcmUgWmVpY2hlbiIKKworIzogb3B0aW9uLmM6NDgwMAorbXNnaWQgIkludmFsaWQgZm9udChzKSIKK21zZ3N0ciAiVW5n/Gx0aWdlciBTY2hyaWZ0c2F0eiIKKworIyB3aGF0J3MgdGhlIGRpZmZlcmVuY2UgPworIzogb3B0aW9uLmM6NDgwNworbXNnaWQgImNhbid0IHNlbGVjdCBmb250c2V0IgorbXNnc3RyICJcImZvbnRzZXRcIiBrYW5uIG5pY2h0IGVpbmdlc3RlbGx0IHdlcmRlbiIKKworIzogb3B0aW9uLmM6NDgwOQorbXNnaWQgIkludmFsaWQgZm9udHNldCIKK21zZ3N0ciAiVW5n/Gx0aWdlciBGb250c2V0IgorCisjOiBvcHRpb24uYzo0ODE2Cittc2dpZCAiY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAiV2VpdGVyIFNjaHJpZnRhcnQga2FubiBuaWNodCBlbmdlc3RlbGx0IHdlcmRlbiIKKworIzogb3B0aW9uLmM6NDgxOAorbXNnaWQgIkludmFsaWQgd2lkZSBmb250IgorbXNnc3RyICJVbmf8bHRpZ2VyIHdlaXRlciBTY2hyaWZ0c2F0eiIKKworIzogb3B0aW9uLmM6NTA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciA8JWM+IgorbXNnc3RyICJVbnp1bORzc2lnZXMgWmVpY2hlbiBuYWNoIDwlYz4iCisKKyM6IG9wdGlvbi5jOjUxNzEKK21zZ2lkICJjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAiS29tbWEgYmVu9nRpZ3QiCisKKyM6IG9wdGlvbi5jOjUxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJ2NvbW1lbnRzdHJpbmcnIG11c3QgYmUgZW1wdHkgb3IgY29udGFpbiAlcyIKK21zZ3N0ciAiJ2NvbW1lbnRzdHJpbmcnIG113yBsZWVyIHNlaW4sIG9kZXIgJXMgZW50aGFsdGVuIgorCisjOiBvcHRpb24uYzo1MjI2Cittc2dpZCAiTm8gbW91c2Ugc3VwcG9ydCIKK21zZ3N0ciAiS2VpbmUgTWF1cy1VbnRlcnN0/HR6dW5nIgorCisjIFhYWAorIzogb3B0aW9uLmM6NTQ3NQorbXNnaWQgIlVuY2xvc2VkIGV4cHJlc3Npb24gc2VxdWVuY2UiCittc2dzdHIgIk5pY2h0IGdlc2NobG9zc2VuZSBBdXNkcnVja3MgRm9sZ2UiCisKKyM6IG9wdGlvbi5jOjU0NzkKK21zZ2lkICJ0b28gbWFueSBpdGVtcyIKK21zZ3N0ciAienUgdmllbGUgUHVua3RlIgorCisjOiBvcHRpb24uYzo1NDgxCittc2dpZCAidW5iYWxhbmNlZCBncm91cHMiCittc2dzdHIgIm5pY2h0IGF1c2dld29nZW5lIEdydXBwZW4iCisKKyM6IG9wdGlvbi5jOjU2OTYKK21zZ2lkICJBIHByZXZpZXcgd2luZG93IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFaW4gRmVuc3RlciB6dXIgVm9yYW5zaWNodCBleGlzdGllcnQgYmVyZWl0cyIKKworIzogb3B0aW9uLmM6NTk1NyBvcHRpb24uYzo1OTg2Cittc2dpZCAiJ3dpbmhlaWdodCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWluaGVpZ2h0JyIKK21zZ3N0ciAiJ3dpbmhlaWdodCcga2FubiBuaWNodCBrbGVpbmVyIHNlaW4gYWxzICd3aW5taW5oZWlnaHQnIgorCisjOiBvcHRpb24uYzo2MDAyIG9wdGlvbi5jOjYwMjEKK21zZ2lkICInd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiJ3dpbndpZHRoJyBrYW5uIG5pY2h0IGtsZWluZXIgc2VpbiBhbHMgJ3dpbm1pbndpZHRoJyIKKworIzogb3B0aW9uLmM6NjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJtaW5kZXN0ZW5zICVkIFplaWxlbiB3ZXJkZW4gYmVu9nRpZ3QiCisKKyM6IG9wdGlvbi5jOjYxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIgorbXNnc3RyICJtaW5kZXN0ZW5zICVkIFNwYWx0ZW4gd2VyZGVuIGJlbvZ0aWd0IgorCisjOiBvcHRpb24uYzo2NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTU6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTM1NTogVW5iZWthbm50ZSBPcHRpb246ICVzIgorCisjOiBvcHRpb24uYzo2NTc3Cittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBjb2RlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgQ29kZXMgLS0tIgorCisjOiBvcHRpb24uYzo2NTc5Cittc2dpZCAiIgorIlxuIgorIi0tLSBHbG9iYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gV2VydGUgZ2xvYmFsZXIgT3B0aW9uZW4gLS0tIgorCisjOiBvcHRpb24uYzo2NTgxCittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBXZXJ0ZSBsb2thbGVyIE9wdGlvbmVuIC0tLSIKKworIzogb3B0aW9uLmM6NjU4MworbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gT3B0aW9uZW4gLS0tIgorCisjOiBvcHRpb24uYzo3MjcyCittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6IGdldF92YXJwIEZFSExFUiIKKworIzogb3B0aW9uLmM6ODIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU3OiAnbGFuZ21hcCc6IE1hdGNoaW5nIGNoYXJhY3RlciBtaXNzaW5nIGZvciAlcyIKK21zZ3N0ciAiRTM1NzogJ2xhbmdtYXAnOiBQYXNzZW5kZXMgWmVpY2hlbiBmZWhsdCBm/HIgJXMiCisKKyM6IG9wdGlvbi5jOjgyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1ODogJ2xhbmdtYXAnOiBFeHRyYSBjaGFyYWN0ZXJzIGFmdGVyIHNlbWljb2xvbjogJXMiCittc2dzdHIgIkUzNTg6ICdsYW5nbWFwJzog3GJlcnNjaPxzc2lnZSBaZWljaGVuIG5hY2ggZGVtIFNlbWlrb2xvbjogJXMiCisKKyM6IG9zX2FtaWdhLmM6MjczCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICJrYW5uIG5pY2h0IPZmZm5lbiIKKworIzogb3NfYW1pZ2EuYzozMDcKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06IEZlbnN0ZXIga2FubiBuaWNodCBnZfZmZm5ldCB3ZXJkZW4hXG4iCisKKyM6IG9zX2FtaWdhLmM6MzI5Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAiQnJhdWNoZSBBbWlnYWRvcyBWZXJzaW9uIDIuMDQgb2RlciBuZXVlcmVcbiIKKworIzogb3NfYW1pZ2EuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICJCZW72dGlnZSAlcyBWZXJzaW9uICVsZFxuIgorCisjOiBvc19hbWlnYS5jOjQwNworbXNnaWQgIkNhbm5vdCBvcGVuIE5JTDpcbiIKK21zZ3N0ciAiS2FubiBOSUwgbmljaHQg9mZmbmVuOlxuIgorCisjOiBvc19hbWlnYS5jOjQxOAorbXNnaWQgIkNhbm5vdCBjcmVhdGUgIgorbXNnc3RyICJLYW5uIG5pY2h0IGFubGVnZW4gIgorCisjOiBvc19hbWlnYS5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJWaW0gZXhpdGluZyB3aXRoICVkXG4iCittc2dzdHIgIlZpbSBzdGVpZ3QgYXVzIG1pdCAlZFxuIgorCisjOiBvc19hbWlnYS5jOjkyOAorbXNnaWQgImNhbm5vdCBjaGFuZ2UgY29uc29sZSBtb2RlID8hXG4iCittc2dzdHIgImthbm4gS29uc29sZW4gTW9kdXMgbmljaHQgd2VjaHNlbG4gPyFcbiIKKworIzogb3NfYW1pZ2EuYzo5Mzggb3NfbWFjLmM6MTE3NyBvc19tc3dpbi5jOjYyOSBvc19yaXNjb3MuYzo3NTcgb3NfdW5peC5jOjI4MDMKK21zZ2lkICJFMzU5OiBTY3JlZW4gbW9kZSBzZXR0aW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkUzNTk6IEJpbGRzY2hpcm0gTW9kdXMgd2lyZCBuaWNodCB1bnRlcnN0/HR6dCIKKworIzogb3NfYW1pZ2EuYzo5OTQKK21zZ2lkICJtY2hfZ2V0X3NoZWxsc2l6ZTogbm90IGEgY29uc29sZT8/XG4iCittc2dzdHIgIm1jaF9nZXRfd2luc2l6ZTogaXN0IGtlaW5lIEtvbnNvbGU/P1xuIgorCisjLiBpZiBWaW0gb3BlbmVkIGEgd2luZG93OiBFeGVjdXRpbmcgYSBzaGVsbCBtYXkgY2F1c2UgY3Jhc2hlcworIzogb3NfYW1pZ2EuYzoxMTQyCittc2dpZCAiRTM2MDogQ2Fubm90IGV4ZWN1dGUgc2hlbGwgd2l0aCAtZiBvcHRpb24iCittc2dzdHIgIkUzNjA6IEthbm4gU2hlbGwgbmljaHQgbWl0IGRlciAtZiBPcHRpb24gYXVzIGb8aHJlbiIKKworIzogb3NfYW1pZ2EuYzoxMTgzIG9zX2FtaWdhLmM6MTI3MworbXNnaWQgIkNhbm5vdCBleGVjdXRlICIKK21zZ3N0ciAiS2FubiBuaWNodCBhdXNm/GhyZW4gIgorCisjOiBvc19hbWlnYS5jOjExODYgb3NfYW1pZ2EuYzoxMjgzCittc2dpZCAic2hlbGwgIgorbXNnc3RyICJTaGVsbCAiCisKKyM6IG9zX2FtaWdhLmM6MTIwNiBvc19hbWlnYS5jOjEzMDgKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiIHp1cvxja2dlZ2ViZW5cbiIKKworIzogb3NfYW1pZ2EuYzoxNDQ4Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSB6dSBrbGVpbi4iCisKKyM6IG9zX2FtaWdhLmM6MTQ1MgorbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAiSS9PIEZFSExFUiIKKworIzogb3NfbXN3aW4uYzo1MDMKK21zZ2lkICIuLi4odHJ1bmNhdGVkKSIKK21zZ3N0ciAiLi4uKGFiZ2VzY2huaXR0ZW4pIgorCisjOiBvc19tc3dpbi5jOjYwNAorbXNnaWQgIidjb2x1bW5zJyBpcyBub3QgODAsIGNhbm5vdCBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICInY29sdW1ucycgYmV0cuRndCBuaWNodCA4MCwga2FubiBleHRlcm5lIEJlZmVobGUgbmljaHQgYXVzZvxocmVuIgorCisjOiBvc19tc3dpbi5jOjcxNiBvc191bml4LmM6NTExNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY0OiBMaWJyYXJ5IGNhbGwgZmFpbGVkIGZvciBcIiVzKClcIiIKK21zZ3N0ciAiRTM2NDogQmlibGlvdGhla3MtQXVmcnVmIGb8ciBcIiVzKClcIiBzY2hsdWcgZmVobCIKKworIzogb3NfbXN3aW4uYzoxMzY1Cittc2dpZCAiRTIzNzogUHJpbnRlciBzZWxlY3Rpb24gZmFpbGVkIgorbXNnc3RyICJFMjM3OiBEcnVja2VyLUF1c3dhaGwgZmVobGdlc2NobGFnZW4iCisKKyM6IG9zX21zd2luLmM6MTQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0byAlcyBvbiAlcyIKK21zZ3N0ciAibmFjaCAlcyBhdWYgJXMiCisKKyM6IG9zX21zd2luLmM6MTQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ4OiBVbmtub3duIGZvbnQ6ICVzIgorbXNnc3RyICJFNDQ4OiBVbmJla2FubnRlIFNjaHJpZnRhcnQ6ICVzIgorCisjOiBvc19tc3dpbi5jOjE0NzAgb3NfbXN3aW4uYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogRmVobGVyIGJlaW0gRHJ1Y2tlbjogJXMiCisKKyM6IG9zX21zd2luLmM6MTQ4MQorbXNnaWQgIlVua25vd24iCittc2dzdHIgIlVuYmVrYW5udCIKKworIzogb3NfbXN3aW4uYzoxNTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nICclcyciCittc2dzdHIgIkRydWNrZSAnJXMnIgorCisjOiBvc19tc3dpbi5jOjI1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NDogSWxsZWdhbCBjaGFyc2V0IG5hbWUgXCIlc1wiIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDQ6IFVuenVs5HNzaWdlciBaZWljaGVuc2F0ei1OYW1lIFwiJXNcIiBpbSBTY2hyaWZ0YXJ0LU5hbWVuIFwiJXNcIiIKKworIzogb3NfbXN3aW4uYzoyNjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDU6IElsbGVnYWwgY2hhciAnJWMnIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDU6IFVuenVs5HNzaWdlcyBaZWljaGVuICclYycgaW4gZGVyIFNjaHJpZnRhcnQgXCIlc1wiIgorCisjOiBvc19yaXNjb3MuYzoxMjU2Cittc2dpZCAiRTM2NjogSW52YWxpZCAnb3NmaWxldHlwZScgb3B0aW9uIC0gdXNpbmcgVGV4dCIKK21zZ3N0ciAiRTM2NjogVW56dWzkc3NpZ2UgJ29zZmlsZXR5cGUnLU9wdGlvbiAtIHZlcndlbmRlIFRleHQiCisKKyM6IG9zX3VuaXguYzo4NjIKK21zZ2lkICJWaW06IERvdWJsZSBzaWduYWwsIGV4aXRpbmdcbiIKK21zZ3N0ciAiVmltOiBEb3BwZWwtU2lnbmFsLCBiZWVuZGVuXG4iCisKKyM6IG9zX3VuaXguYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IEVyaGllbHQgdPZkbGljaGVzIFNpZ25hbCAlc1xuIgorCisjOiBvc191bml4LmM6ODcxCittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIgorbXNnc3RyICJWaW06IEVyaGllbHQgdPZkbGljaGVzIFNpZ25hbFxuIgorCisjOiBvc191bml4LmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAi1mZmbmVuIGRlcyBYLURpc3BsYXlzIGRhdWVydGUgJWxkIG1zZWMiCisKKyM6IG9zX3VuaXguYzoxMTUyCittc2dpZCAiIgorIlxuIgorIlZpbTogR290IFggZXJyb3JcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZpbTogZWluIFgxMSBGZWhsZXIgdHJhdCBhdWZcbiIKKworIzogb3NfdW5peC5jOjEyMTkKK21zZ2lkICJUZXN0aW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICJUZXN0IGRlcyBYLURpc3BsYXlzIHNjaGx1ZyBmZWhsIgorCisjOiBvc191bml4LmM6MTM2MworbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0aW1lZCBvdXQiCittc2dzdHIgIlplaXT8YmVyc2NocmVpdHVuZyB35GhyZW5kIGRlcyDWZmZuZW5zIGRlcyBYLURpc3BsYXlzIgorCisjOiBvc191bml4LmM6Mjk3NiBvc191bml4LmM6MzYzNAorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCAiCittc2dzdHIgIiIKKyJcbiIKKyJTaGVsbCBrYW5uIG5pY2h0IGF1c2b8aHJ0IHdlcmRlbiAiCisKKyM6IG9zX3VuaXguYzozMDIxCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsIHNoXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTaGVsbCBzaCBrYW5uIG5pY2h0IGF1c2b8aHJ0IHdlcmRlblxuIgorCisjOiBvc191bml4LmM6MzAyNSBvc191bml4LmM6MzY0MAorbXNnaWQgIiIKKyJcbiIKKyJzaGVsbCByZXR1cm5lZCAiCittc2dzdHIgIiIKKyJcbiIKKyJTaGVsbCBiZWVuZGV0ICIKKworIzogb3NfdW5peC5jOjMxNTkKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGNyZWF0ZSBwaXBlc1xuIgorbXNnc3RyICIiCisiXG4iCisiUGlwZXMga/ZubmVuIG5pY2h0IGFuZ2VsZWd0IHdlcmRlblxuIgorCisjOiBvc191bml4LmM6MzE3NAorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZm9ya1xuIgorbXNnc3RyICIiCisiXG4iCisiJ2ZvcmsnIHNjaGx1ZyBmZWhsXG4iCisKKyM6IG9zX3VuaXguYzozNjQ3Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgdGVybWluYXRlZFxuIgorbXNnc3RyICIiCisiXG4iCisiQmVmZWhsIGJlZW5kZXRcbiIKKworIzogb3NfdW5peC5jOjUxNjQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICLWZmZuZW4gZGVzIFgtRGlzcGxheXMgc2NobHVnIGZlaGwiCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgIkluIFplaWxlIgorCisjOiBvc193MzJleGUuYzoxNjkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICJLb25udGUgdmltMzIuZGxsIG5pY2h0IGxhZGVuISIKKworIzogb3NfdzMyZXhlLmM6MTY5IG9zX3czMmV4ZS5jOjE3OQorbXNnaWQgIlZJTSBFcnJvciIKK21zZ3N0ciAiVklNIEZlaGxlciIKKworIzogb3NfdzMyZXhlLmM6MTc5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAiS29ubnRlIEZ1bmt0aW9ucy1aZWlnZXIgaW4gZGVyIERMTCBuaWNodCBrb3JyaWdpZXJlbiEiCisKKyM6IG9zX3dpbjE2LmM6NTc4IG9zX3dpbjMyLmM6MzAzNworIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAiU2hlbGwgZ2FiICVkIHp1cvxjayIKKworIzogb3Nfd2luMzIuYzoyNTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0ICVzIGV2ZW50XG4iCittc2dzdHIgIlZpbTogRmluZyBFcmVpZ25pcyAlcyBlaW5cbiIKKworIzogb3Nfd2luMzIuYzoyNTA3Cittc2dpZCAiY2xvc2UiCittc2dzdHIgInNjaGxpZd9lIgorCisjOiBvc193aW4zMi5jOjI1MDkKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgImF1cy1sb2dnZW4iCisKKyM6IG9zX3dpbjMyLmM6MjUxMAorbXNnaWQgInNodXRkb3duIgorbXNnc3RyICJiZWVuZGVuIgorCisjOiBvc193aW4zMi5jOjI5OTEKK21zZ2lkICJFMzcxOiBDb21tYW5kIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTM3MTogQmVmZWhsIG5pY2h0IGdlZnVuZGVuIgorCisjOiBvc193aW4zMi5jOjMwMDQKK21zZ2lkICIiCisiVklNUlVOLkVYRSBub3QgZm91bmQgaW4geW91ciAkUEFUSC5cbiIKKyJFeHRlcm5hbCBjb21tYW5kcyB3aWxsIG5vdCBwYXVzZSBhZnRlciBjb21wbGV0aW9uLlxuIgorIlNlZSAgOmhlbHAgd2luMzItdmltcnVuICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJWSU1SVU4uRVhFIHd1cmRlIGltIFBmYWQgJFBBVEggbmljaHQgZ2VmdW5kZW4uXG4iCisiRXh0ZXJuZSBCZWZlaGxlIHdlcmRlbiBuYWNoIEF1c2b8aHJ1bmcgbmljaHQgYW5oYWx0ZW4uXG4iCisiU2llaGUgIDpoZWxwIHdpbjMyLXZpbXJ1biAgZvxyIG1laHIgSW5mb3JtYXRpb24uIgorCisjOiBvc193aW4zMi5jOjMwMDcKK21zZ2lkICJWaW0gV2FybmluZyIKK21zZ3N0ciAiVmltIFdhcm51bmciCisKKyM6IHF1aWNrZml4LmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzI6IFRvbyBtYW55ICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MjogWnUgdmllbGUgJSUlYyBpbSBGb3JtYXQiCisKKyM6IHF1aWNrZml4LmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzM6IFVuZXhwZWN0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzczOiBVbmVyd2FydGV0ZXMgJSUlYyBpbSBGb3JtYXQiCisKKyM6IHF1aWNrZml4LmM6MzQ4Cittc2dpZCAiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzQ6IGZlaGxlbmRlcyBdIGltIEZvcm1hdCIKKworIzogcXVpY2tmaXguYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NTogVW5zdXBwb3J0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc1OiAlJSVjIHdpcmQgaW0gRm9ybWF0IG5pY2h0IHVudGVyc3T8dHp0IgorCisjOiBxdWlja2ZpeC5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiCittc2dzdHIgIkUzNzY6IFVuenVs5HNzaWdlcyAlJSVjIGltIFByZWZpeCBkZXMgRm9ybWF0cyIKKworIzogcXVpY2tmaXguYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6IFVuenVs5HNzaWdlcyAlJSVjIGltIEZvcm1hdCIKKworIzogcXVpY2tmaXguYzo0MTQKK21zZ2lkICJFMzc4OiAnZXJyb3Jmb3JtYXQnIGNvbnRhaW5zIG5vIHBhdHRlcm4iCittc2dzdHIgIkUzNzg6ICdlcnJvcmZvcm1hdCcgZW50aORsdCBrZWluIE11c3RlciIKKworIzogcXVpY2tmaXguYzo1MjAKK21zZ2lkICJFMzc5OiBNaXNzaW5nIG9yIGVtcHR5IGRpcmVjdG9yeSBuYW1lIgorbXNnc3RyICJFMzc5OiBGZWhsZW5kZXIgb2RlciBsZWVyZXIgVmVyemVpY2huaXNuYW1lIgorCisjOiBxdWlja2ZpeC5jOjkzMQorbXNnaWQgIk5vIG1vcmUgaXRlbXMiCittc2dzdHIgIktlaW5lIHdlaXRlcmVuIFB1bmt0ZSIKKworIzogcXVpY2tmaXguYzoxMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiglZCBvZiAlZCklcyVzOiAiCittc2dzdHIgIiglZCBhdXMgJWQpJXMlczogIgorCisjOiBxdWlja2ZpeC5jOjExNTQKK21zZ2lkICIgKGxpbmUgZGVsZXRlZCkiCittc2dzdHIgIiAoWmVpbGUgZ2Vs9nNjaHQpIgorCisjOiBxdWlja2ZpeC5jOjEzNjAKK21zZ2lkICJFMzgwOiBBdCBib3R0b20gb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODA6IEFtIEFuZmFuZyBkZXIgcXVpY2tmaXggTGlzdGUiCisKKyM6IHF1aWNrZml4LmM6MTM2OQorbXNnaWQgIkUzODE6IEF0IHRvcCBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MTogQW4gRW5kZSBkZXIgcXVpY2tmaXggTGlzdGUiCisKKyM6IHF1aWNrZml4LmM6MTM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBsaXN0ICVkIG9mICVkOyAlZCBlcnJvcnMiCittc2dzdHIgIkZlaGxlcmxpc3RlICVkIGF1cyAlZDsgJWQgRmVobGVyIgorCisjOiBxdWlja2ZpeC5jOjE4NDIKK21zZ2lkICJFMzgyOiBDYW5ub3Qgd3JpdGUsICdidWZ0eXBlJyBvcHRpb24gaXMgc2V0IgorbXNnc3RyICJFMzgyOiBLYW5uIG5pY2h0IHNjaHJlaWJlbiwgJ2J1ZnR5cGUnLU9wdGlvbiBpc3QgZ2VzZXR6dCIKKworIzogcmVnZXhwLmM6ODIyCittc2dpZCAiRTMzOTogUGF0dGVybiB0b28gbG9uZyIKK21zZ3N0ciAiRTMzOTogTXVzdGVyIHp1IGxhbmciCisKKyM6IHJlZ2V4cC5jOjEzMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOiBOZXN0ZWQgJXMqIgorbXNnc3RyICJFNjE6IFZlcnNjaGFjaHRlbHRlcyAlcyoiCisKKyM6IHJlZ2V4cC5jOjEzNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyOiBOZXN0ZWQgJXMlYyIKK21zZ3N0ciAiRTYyOiBWZXJzY2hhY2h0ZWx0ZXMgJXMlYyIKKworIzogcmVnZXhwLmM6MTQ5MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjQ6ICVzJWMgZm9sbG93cyBub3RoaW5nIgorbXNnc3RyICJFNjQ6ICVzJWMgbmFjaCBOaWNodHMiCisKKyM6IHJlZ2V4cC5jOjI1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ludGF4IGVycm9yIGluICVzey4uLn0iCittc2dzdHIgIlN5bnRheCBGZWhsZXIgaW4gJXN7Li4ufSIKKworIzogcmVnZXhwLmM6Mjc1NworbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiBBYnN0dXJ6IHZlcmhpbmRlcnQ7IElzdCBkZXIgcmVndWzkcmUgQXVzZHJ1Y2sgenUga29tcGxpemllcnQ/IgorCisjOiByZWdleHAuYzoyODkyCittc2dpZCAiRTM2MzogcGF0dGVybiBjYXVzZWQgb3V0LW9mLXN0YWNrIGVycm9yIgorbXNnc3RyICJFMzYzOiBNdXN0ZXIgZXJ6ZXVndGUgZWluZW4gU3RhcGVsLdxiZXJsYXVmLUZlaGxlciIKKworIzogcmVnZXhwLmM6MzEyOAorbXNnaWQgIkV4dGVybmFsIHN1Ym1hdGNoZXM6XG4iCittc2dzdHIgImV4dGVybmUgJ3N1Ym1hdGNoZXMnOlxuIgorCisjOiBzY3JlZW4uYzoyMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIistLSUzbGQgbGluZXMgZm9sZGVkICIKK21zZ3N0ciAiKy0tJTNsZCBaZWlsZW4gZ2VmYWx0ZXQgIgorCisjOiBzY3JlZW4uYzo3NTM1Cittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgVi1FUlNFVFpFTiIKKworIzogc2NyZWVuLmM6NzUzOQorbXNnaWQgIiBSRVBMQUNFIgorbXNnc3RyICIgRVJTRVRaRU4iCisKKyM6IHNjcmVlbi5jOjc1NDQKK21zZ2lkICIgUkVWRVJTRSIKK21zZ3N0ciAiIElOVkVSVElFUlQiCisKKyM6IHNjcmVlbi5jOjc1NDYKK21zZ2lkICIgSU5TRVJUIgorbXNnc3RyICIgRUlORtxHRU4iCisKKyM6IHNjcmVlbi5jOjc1NDkKK21zZ2lkICIgKGluc2VydCkiCittc2dzdHIgIiAoZWluZvxnZW4pIgorCisjOiBzY3JlZW4uYzo3NTUxCittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiIChlcnNldHplbikiCisKKyM6IHNjcmVlbi5jOjc1NTMKK21zZ2lkICIgKHZyZXBsYWNlKSIKK21zZ3N0ciAiICh2LWVyc2V0emVuKSIKKworIzogc2NyZWVuLmM6NzU1NgorbXNnaWQgIiBIZWJyZXciCittc2dzdHIgIiBIZWJy5GlzY2giCisKKyM6IHNjcmVlbi5jOjc1NjQKK21zZ2lkICIgKGxhbmcpIgorbXNnc3RyICIgKFNwcmFjaGUpIgorCisjIGVpbmtsZWJlbiBpc3QgZWNodCBTY2hlad9lLCBhYmVyIGVpbmb8Z2VuCisjIGdpYnRzIHNjaG9uIC4uLgorIzogc2NyZWVuLmM6NzU2NworbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKGVpbmtsZWJlbikiCisKKyM6IHNjcmVlbi5jOjc1NzMKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIgQVVTV0FITCIKKworIzogc2NyZWVuLmM6NzU3NQorbXNnaWQgIiBWSVNVQUwiCittc2dzdHIgIiBWSVNVRUxMIgorCisjOiBzY3JlZW4uYzo3NTc3Cittc2dpZCAiIEJMT0NLIgorbXNnc3RyICJFUiBCTE9DSyIKKworIzogc2NyZWVuLmM6NzU3OQorbXNnaWQgIiBMSU5FIgorbXNnc3RyICJFIFpFSUxFIgorCisjOiBzY3JlZW4uYzo3NTkyIHNjcmVlbi5jOjc2NTIKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgImF1ZnplaWNobmVuIgorCisjOiBzZWFyY2guYzozNgorbXNnaWQgInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIKK21zZ3N0ciAiU3VjaGUgZXJyZWljaHRlIGRlbiBBTkZBTkcgdW5kIHd1cmRlIGFtIEVOREUgZm9ydGdlc2V0enQiCisKKyM6IHNlYXJjaC5jOjM3Cittc2dpZCAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIgorbXNnc3RyICJTdWNoZSBlcnJlaWNodGUgZGFzIEVOREUgdW5kIHd1cmRlIGFtIEFORkFORyBmb3J0Z2VzZXR6dCIKKworIzogc2VhcmNoLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IFVuenVs5HNzaWdlcyBTdWNobXVzdGVyOiAlcyIKKworIzogc2VhcmNoLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODQ6IHNlYXJjaCBoaXQgVE9QIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NDogU3VjaGUgZXJyZWljaHRlIGRlbiBBTkZBTkcgb2huZSBUcmVmZmVyIGb8cjogJXMiCisKKyM6IHNlYXJjaC5jOjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg1OiBzZWFyY2ggaGl0IEJPVFRPTSB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODU6IFN1Y2hlIGVycmVpY2h0ZSBkYXMgRU5ERSBvaG5lIFRyZWZmZXIgZvxyOiAlcyIKKworIzogc2VhcmNoLmM6MTE1NworbXNnaWQgIkUzODY6IEV4cGVjdGVkICc/JyBvciAnLycgIGFmdGVyICc7JyIKK21zZ3N0ciAiRTM4NjogRXJ3YXJ0ZSAnPycgb2RlciAnLycgIG5hY2ggJzsnIgorCisjOiBzZWFyY2guYzozNTM3Cittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAoZW50aORsdCBiZXJlaXRzIHZvcmhlciBhdWZnZXrkaGx0ZSBUcmVmZmVyKSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNTU3Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIEVpbmdlZvxndGUgRGF0ZWllbiAiCisKKyM6IHNlYXJjaC5jOjM1NTkKK21zZ2lkICJub3QgZm91bmQgIgorbXNnc3RyICJuaWNodCBnZWZ1bmRlbiAiCisKKyM6IHNlYXJjaC5jOjM1NjAKK21zZ2lkICJpbiBwYXRoIC0tLVxuIgorbXNnc3RyICJpbSBQZmFkIC0tLVxuIgorCisjOiBzZWFyY2guYzozNTk5Cittc2dpZCAiICAoQWxyZWFkeSBsaXN0ZWQpIgorbXNnc3RyICIgIChCZXJlaXRzIGF1ZmdlbGlzdGV0KSIKKworIzogc2VhcmNoLmM6MzYwMQorbXNnaWQgIiAgTk9UIEZPVU5EIgorbXNnc3RyICIgIE5JQ0hUIEdFRlVOREVOIgorCisjOiBzZWFyY2guYzozNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGluY2x1ZGVkIGZpbGU6ICVzIgorbXNnc3RyICJTY2FubmUgZWluZ2Vm/Gd0ZSBEYXRlaTogJXMiCisKKyM6IHNlYXJjaC5jOjM4NzEKK21zZ2lkICJFMzg3OiBNYXRjaCBpcyBvbiBjdXJyZW50IGxpbmUiCittc2dzdHIgIkUzODc6IFRyZWZmZXIgaXN0IGF1ZiBkZXIgbW9tZW50YW5lbiBaZWlsZSIKKworIzogc2VhcmNoLmM6NDAxMQorbXNnaWQgIkFsbCBpbmNsdWRlZCBmaWxlcyB3ZXJlIGZvdW5kIgorbXNnc3RyICJBbGxlIGVpbmdlZvxndGVuIERhdGVpZW4gd3VyZGVuIGdlZnVuZGVuIgorCisjOiBzZWFyY2guYzo0MDEzCittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIktlaW5lIGVpbmdlZvxndGVuIERhdGVpZW4iCisKKyM6IHNlYXJjaC5jOjQwMjkKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IERlZmluaXRpb24ga29ubnRlIG5pY2h0IGdlZnVuZGVuIHdlcmRlbiIKKworIzogc2VhcmNoLmM6NDAzMQorbXNnaWQgIkUzODk6IENvdWxkbid0IGZpbmQgcGF0dGVybiIKK21zZ3N0ciAiRTM4OTogTXVzdGVyIGtvbm50ZSBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4iCisKKyM6IHN5bnRheC5jOjI5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MDogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUzOTA6IFVuenVs5HNzaWdlcyBBcmd1bWVudDogJXMiCisKKyM6IHN5bnRheC5jOjMxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTE6IEtlaW4gc29sY2hlcyBTeW50YXgtQ2x1c3RlcjogJXMiCisKKyM6IHN5bnRheC5jOjMzNDMKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgIktlaW5lIFN5bnRheC1FbGVtZW50ZSBkZWZpbmllcnQgZvxyIGRpZXNlbiBQdWZmZXIiCisKKyM6IHN5bnRheC5jOjMzNTEKK21zZ2lkICJzeW5jaW5nIG9uIEMtc3R5bGUgY29tbWVudHMiCittc2dzdHIgIlN5bmNocm9uaXNhdGlvbiBhbiBDLVN0aWwgS29tbWVudGFyZW4iCisKKyM6IHN5bnRheC5jOjMzNTkKK21zZ2lkICJubyBzeW5jaW5nIgorbXNnc3RyICJrZWluZSBTeW5jaHJvbmlzYXRpb24iCisKKyM6IHN5bnRheC5jOjMzNjIKK21zZ2lkICJzeW5jaW5nIHN0YXJ0cyAiCittc2dzdHIgIlN5bmNocm9uaXNhdGlvbiBiZWdpbm50ICIKKworIzogc3ludGF4LmM6MzM2NCBzeW50YXguYzozNDM5Cittc2dpZCAiIGxpbmVzIGJlZm9yZSB0b3AgbGluZSIKK21zZ3N0ciAiIFplaWxlbiB2b3IgZGVyIG9iZXJzdGVuIFplaWxlIgorCisjOiBzeW50YXguYzozMzY5Cittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggc3luYyBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gU3ludGF4IFN5bmNocm9uaXNhdGlvbnMtRWxlbWVudGUgLS0tIgorCisjOiBzeW50YXguYzozMzc0Cittc2dpZCAiIgorIlxuIgorInN5bmNpbmcgb24gaXRlbXMiCittc2dzdHIgIiIKKyJcbiIKKyJTeW5jaHJvbmlzYXRpb24gYW4gRWxlbWVudGVuIgorCisjOiBzeW50YXguYzozMzgwCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFNhdHpiYXUgRWxlbWVudGUgLS0tIgorCisjOiBzeW50YXguYzozNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTI6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkyOiBLZWluIHNvbGNoZXMgU3ludGF4LUNsdXN0ZXI6ICVzIgorCisjOiBzeW50YXguYzozNDI5Cittc2dpZCAibWluaW1hbCAiCittc2dzdHIgIm1pbmltYWwgIgorCisjOiBzeW50YXguYzozNDM2Cittc2dpZCAibWF4aW1hbCAiCittc2dzdHIgIm1heGltYWwgIgorCisjOiBzeW50YXguYzozNDQ4Cittc2dpZCAiOyBtYXRjaCAiCittc2dzdHIgIjsgVHJlZmZlciAiCisKKyM6IHN5bnRheC5jOjM0NTAKK21zZ2lkICIgbGluZSBicmVha3MiCittc2dzdHIgIiBaZWlsZW4tVW1icvxjaGUiCisKKyM6IHN5bnRheC5jOjQwNzgKK21zZ2lkICJFMzkzOiBncm91cFt0XWhlcmUgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTM6IFwiZ3JvdXBbdF1oZXJlXCIgaXN0IGFuIGRpZXNlciBTdGVsbGUgdW5n/Gx0aWciCisKKyM6IHN5bnRheC5jOjQxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiBcInJlZ2lvblwiLUVsZW1lbnQgZvxyIFwiJXNcIiBrb25udGUgbmljaHQgZ2VmdW5kZW4gd2VyZGVuIgorCisjOiBzeW50YXguYzo0MTMwCittc2dpZCAiRTM5NTogY29udGFpbnMgYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTU6IFwiY29udGFpbnNcIi1Bcmd1bWVudCBpc3QgYW4gZGllc2VyIFN0ZWxsZSB1bmf8bHRpZyIKKworIzogc3ludGF4LmM6NDE0MQorbXNnaWQgIkUzOTY6IGNvbnRhaW5lZGluIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk2OiBcImNvbnRhaW5lZGluXCItQXJndW1lbnQgaXN0IGFuIGRpZXNlciBTdGVsbGUgdW5n/Gx0aWciCisKKyM6IHN5bnRheC5jOjQyMTkKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5NzogRGF0ZWluYW1lIHdpcmQgYmVu9nRpZ3QiCisKKyM6IHN5bnRheC5jOjQ1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiBGZWhsZW5kZXMgJz0nOiAlcyIKKworIzogc3ludGF4LmM6NDcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogTmljaHQgYXVzcmVpY2hlbmQgdmllbGUgQXJndW1lbnRlOiBzeW50YXggcmVnaW9uICVzIgorCisjOiBzeW50YXguYzo1MDQ2Cittc2dpZCAiRTQwMDogTm8gY2x1c3RlciBzcGVjaWZpZWQiCittc2dzdHIgIkU0MDA6IEtlaW4gQ2x1c3RlciBhbmdlZ2ViZW4iCisKKyM6IHN5bnRheC5jOjUwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMTogUGF0dGVybiBkZWxpbWl0ZXIgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQwMTogTXVzdGVyIEFiZ3JlbnplciBuaWNodCBnZWZ1bmRlbjogJXMiCisKKyM6IHN5bnRheC5jOjUxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMjogR2FyYmFnZSBhZnRlciBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRTQwMjogU2Nocm90dCBuYWNoIE11c3RlcjogJXMiCisKKyM6IHN5bnRheC5jOjUyNDUKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiBzeW50YXggc3luYzogWmVpbGVuIEZvcnRzZXR6dW5ncyBNdXN0ZXIgendlaWZhY2ggYW5nZWdlYmVuIgorCisjOiBzeW50YXguYzo1MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDQ6IElsbGVnYWwgYXJndW1lbnRzOiAlcyIKK21zZ3N0ciAiRTQwNDogVW56dWzkc3NpZ2UgQXJndW1lbnRlOyAlcyIKKworIzogc3ludGF4LmM6NTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiBHbGVpY2hoZWl0c3plaWNoZW4gZmVobHQ6ICVzIgorCisjOiBzeW50YXguYzo1MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDY6IEVtcHR5IGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQwNjogTGVlcmVzIEFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6NTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA3OiAlcyBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNDA3OiAlcyBpc3QgaGllciBuaWNodCBlcmxhdWJ0IgorCisjOiBzeW50YXguYzo1MzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDg6ICVzIG11c3QgYmUgZmlyc3QgaW4gY29udGFpbnMgbGlzdCIKK21zZ3N0ciAiIgorIkU0MDg6ICVzIG11c3MgYWxzIEVyc3RlcyBpbiBkZXIgTGlzdGUgZGVyIGVudGhhbHRlbmVuIEVsZW1lbnRlIGF1ZnRyZXRlbiIKKworIzogc3ludGF4LmM6NTQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA5OiBVbmtub3duIGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFNDA5OiBVbmJla2FubnRlciBHcnVwcGVuLU5hbWU6ICVzIgorCisjOiBzeW50YXguYzo1NjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTA6IEludmFsaWQgOnN5bnRheCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTQxMDogVW5n/Gx0aWdlciA6c3ludGF4IEJlZmVobDogJXMiCisKKyM6IHN5bnRheC5jOjYwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMTogaGlnaGxpZ2h0IGdyb3VwIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MTE6IEhlcnZvcmhlYnVuZ3MtR3J1cHBlIG5pY2h0IGdlZnVuZGVuOiAlcyIKKworIzogc3ludGF4LmM6NjA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEyOiBOb3QgZW5vdWdoIGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMjogTmljaHQgYXVzcmVpY2hlbmQgdmllbGUgQXJndW1lbnRlOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTM6IFRvbyBtYW55IGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMjogWnUgdmllbGUgQXJndW1lbnRlOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTIyCittc2dpZCAiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIgorbXNnc3RyICJFNDE0OiBHcnVwcGUgaGF0IEVpbnN0ZWxsdW5nZW4sIFVudGVyc3RyZWljaHVuZ3MgTGluayBpZ25vcmllcnQiCisKKyM6IHN5bnRheC5jOjYyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNTogdW5leHBlY3RlZCBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNTogdW5lcndhcnRldGVzIEdsZWljaGhlaXRzemVpY2hlbjogJXMiCisKKyM6IHN5bnRheC5jOjYyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNjogbWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNjogZmVobGVuZGVzIEdsZWljaGhlaXRzemVpY2hlbjogJXMiCisKKyM6IHN5bnRheC5jOjYzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MTc6IGZlaGxlbmRlcyBBcmd1bWVudDogJXMiCisKKyM6IHN5bnRheC5jOjYzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6IFVuenVs5HNzaWdlciBXZXJ0OiAlcyIKKworIzogc3ludGF4LmM6NjQ2NQorbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6IEZHIEZhcmJlIHVuYmVrYW5udCIKKworIzogc3ludGF4LmM6NjQ3NgorbXNnaWQgIkU0MjA6IEJHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MjA6IEJHIEZhcmJlIHVuYmVrYW5udCIKKworIzogc3ludGF4LmM6NjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6IFVuYmVrYW5udGUgRmFyYi1CZXplaWNobnVuZyBvZGVyIC1OdW1tZXI6ICVzIgorCisjOiBzeW50YXguYzo2NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjI6IHRlcm1pbmFsIGNvZGUgdG9vIGxvbmc6ICVzIgorbXNnc3RyICJFNDIyOiBUZXJtaW5hbC1Db2RlIHp1IGxhbmc6ICVzIgorCisjOiBzeW50YXguYzo2NzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjM6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDIzOiBVbnp1bORzc2lnZXMgQXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzo3MzIxCittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDogWnUgdmllbGUgdmVyc2NoaWVkZW4gSGVydm9yaGVidW5ncy1BdHRyaWJ1dGUgaW4gR2VicmF1Y2giCisKKyM6IHRhZy5jOjkwCittc2dpZCAiYXQgYm90dG9tIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiYW0gQW5mYW5nIGRlciBUYWctTGlzdGUiCisKKyM6IHRhZy5jOjkxCittc2dpZCAiYXQgdG9wIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiYW0gRW5kZSBkZXIgVGFnLUxpc3RlIgorCisjOiB0YWcuYzozOTIKK21zZ2lkICJFNDI1OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNTogS2FubiBuaWNodCB2b3IgZGVuIGVyc3RlbiBwYXNzZW5kZW4gVGFnIGhpbmF1c2dlaGVuIgorCisjOiB0YWcuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6IFRhZyBcIiVzXCIga29ubnRlIG5pY2h0IGdlZnVuZGVuIHdlcmRlbiIKKworIzogdGFnLmM6NTQ1Cittc2dpZCAiICAjIHByaSBraW5kIHRhZyIKK21zZ3N0ciAiICAgIyBwcmkgdmVydy4gdGFnIgorCisjOiB0YWcuYzo1NDgKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgIkRhdGVpXG4iCisKKyMuCisjLiAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMuICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjOiB0YWcuYzo3MDYKK21zZ2lkICJFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOiAiCittc2dzdHIgIkdld/xuc2NodGUgTnVtbWVyIChhYmJyZWNoZW4gbWl0IDxDUj4pOiAiCisKKyM6IHRhZy5jOjc0NgorbXNnaWQgIkU0Mjc6IFRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNzogRXMgZ2lidCBudXIgZWluZW4gcGFzc2VuZGVuIFRhZyIKKworIzogdGFnLmM6NzQ4Cittc2dpZCAiRTQyODogQ2Fubm90IGdvIGJleW9uZCBsYXN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyODogS2FubiBuaWNodCD8YmVyIGRlbiBsZXR6dGVuIHBhc3NlbmRlbiBUYWcgaGluYXVzZ2VoZW4iCisKKyM6IHRhZy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRGllIERhdGVpIFwiJXNcIiBleGlzdGllcnQgbmljaHQiCisKKyMuIEdpdmUgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIHRhZ3MKKyM6IHRhZy5jOjc4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJWQgb2YgJWQlcyIKK21zZ3N0ciAiVGFnICVkIGF1cyAlZCVzIgorCisjOiB0YWcuYzo3ODMKK21zZ2lkICIgb3IgbW9yZSIKK21zZ3N0ciAiIG9kZXIgbWVociIKKworIzogdGFnLmM6Nzg1Cittc2dpZCAiICBVc2luZyB0YWcgd2l0aCBkaWZmZXJlbnQgY2FzZSEiCittc2dzdHIgIiAgVmVyd2VuZHVuZyBlaW5lcyBUYWdzIG1pdCBhYmdld2FuZGVsdGVyIEdyb98vS2xlaW4tU2NocmVpYnVuZyIKKworIzogdGFnLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Mjk6IEZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFNDI5OiBEaWUgRGF0ZWkgXCIlc1wiIGV4aXN0aWVydCBuaWNodCIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0YWcuYzo4OTcKK21zZ2lkICIiCisiXG4iCisiICAjIFRPIHRhZyAgICAgICAgIEZST00gbGluZSAgaW4gZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiICAjIE5BQ0ggVEFHICAgICAgIFZPTiBaZWlsZSAgaW4gRGF0ZWkvVGV4dCIKKworIzogdGFnLmM6MTE0NAorbXNnaWQgIkxpbmVhciB0YWcgc2VhcmNoIgorbXNnc3RyICJMaW5lYXJlIFRhZy1TdWNoZSIKKworIzogdGFnLmM6MTE0NgorbXNnaWQgIkJpbmFyeSB0YWcgc2VhcmNoIgorbXNnc3RyICJCaW7kcmUgVGFnLVN1Y2hlIgorCisjOiB0YWcuYzoxMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyB0YWdzIGZpbGUgJXMiCittc2dzdHIgInRhZ3MgZmlsZSAlcyB3aXJkIGR1cmNoc3VjaHQiCisKKyM6IHRhZy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IFRhZy1EYXRlaXBmYWQgd3VyZGUgYWJnZXNjaG5pdHRlbiBm/HIgJXNcbiIKKworIzogdGFnLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogRm9ybWF0IEZlaGxlciBpbiBUYWctRGF0ZWkgXCIlc1wiIgorCisjOiB0YWcuYzoxODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZm9yZSBieXRlICVsZCIKK21zZ3N0ciAidm9yIGJ5dGUgJWxkIgorCisjOiB0YWcuYzoxODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzI6IFRhZ3MgZmlsZSBub3Qgc29ydGVkOiAlcyIKK21zZ3N0ciAiRTQzMjogVGFnLURhdGVpIGlzdCBuaWNodCBzb3J0aWVydDogJXMiCisKKyMuIG5ldmVyIG9wZW5lZCBhbnkgdGFncyBmaWxlCisjOiB0YWcuYzoxOTExCittc2dpZCAiRTQzMzogTm8gdGFncyBmaWxlIgorbXNnc3RyICJFNDMzOiBLZWluZSBUYWctRGF0ZWkiCisKKyM6IHRhZy5jOjI1ODMKK21zZ2lkICJFNDM0OiBDYW4ndCBmaW5kIHRhZyBwYXR0ZXJuIgorbXNnc3RyICJFNDM0OiBUYWctTXVzdGVyIGthbm4gbmljaHQgZ2VmdW5kZW4gd2VyZGVuIgorCisjOiB0YWcuYzoyNTk0Cittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiBUYWcga29ubnRlIG5pY2h0IGdlZnVuZGVuIHdlcmRlbiwgZGFzIGlzdCBudXIgZWluZSBWZXJtdXR1bmchIgorCisjOiB0ZXJtLmM6MTczNworbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiIgorIicgbmljaHQgYmVrYW5udC4gWnVyIFZlcmb8Z3VuZyBzdGVoZW4gZGllIGZvbGdlbmRlbiBlaW5nZWJhdXRlbiBUZXJtaW5hbHM6IgorCisjOiB0ZXJtLmM6MTc2MQorbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAiVm9yZWluc3RlbGx1bmcgJyIKKworIzogdGVybS5jOjIxMTQKK21zZ2lkICJDYW5ub3Qgb3BlbiB0ZXJtY2FwIGZpbGUiCittc2dzdHIgInRlcm1wY2FwLURhdGVpIGthbm4gbmljaHQgZ2X2ZmZuZXQgd2VyZGVuIgorCisjOiB0ZXJtLmM6MjExNworbXNnaWQgIlRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtaW5mbyIKK21zZ3N0ciAiVGVybWluYWwtRWludHJhZyBrb25udGUgaW4gZGVyIHRlcm1pbmZvLURhdGVpIG5pY2h0IGdlZnVuZGVuIHdlcmRlbiIKKworIzogdGVybS5jOjIxMTkKK21zZ2lkICJUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiVGVybWluYWwtRWludHJhZyBrb25udGUgaW4gZGVyIHRlcm1jYXAtRGF0ZWkgbmljaHQgZ2VmdW5kZW4gd2VyZGVuIgorCisjOiB0ZXJtLmM6MjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDM2OiBObyBcIiVzXCIgZW50cnkgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTQzNjogS2VpbiBcIiVzXCIgRWludHJhZyBpbiB0ZXJtY2FwIgorCisjOiB0ZXJtLmM6Mjc1MgorbXNnaWQgIkU0Mzc6IHRlcm1pbmFsIGNhcGFiaWxpdHkgXCJjbVwiIHJlcXVpcmVkIgorbXNnc3RyICJFNDM3OiBUZXJtaW5hbC1G5GhpZ2tlaXQgXCJjbVwiIHdpcmQgYmVu9nRpZ3QiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGVybS5jOjQ4OTEKK21zZ2lkICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIGtleXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIFRhc3RlbiAtLS0iCisKKyM6IHVpLmM6MjUxCittc2dpZCAibmV3IHNoZWxsIHN0YXJ0ZWRcbiIKK21zZ3N0ciAibmV1ZSBTaGVsbCBnZXN0YXJ0ZXRcbiIKKworIzogdWkuYzoxNzQ3Cittc2dpZCAiVmltOiBFcnJvciByZWFkaW5nIGlucHV0LCBleGl0aW5nLi4uXG4iCittc2dzdHIgIlZpbTogRmVobGVyIGJlaW0gTGVzZW4gZGVyIEVpbmdhYmUsIEFiYnJ1Y2guLi5cbiIKKworIyBUT0RPOiBuZWVkIG1vcmUgd29yayEKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6MzgzCittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICJS/GNrZ+RuZ2lnbWFjaHVuZyBuaWNodCBt9mdsaWNoOyBzZXR6ZSB0cm90eiBkZW0gZm9ydCIKKworIzogdW5kby5jOjUzOAorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IFplaWxlbm51bW1lciBmYWxzY2giCisKKyM6IHVuZG8uYzo3MDcKK21zZ2lkICIxIGNoYW5nZSIKK21zZ3N0ciAiMSDEbmRlcnVuZyIKKworIzogdW5kby5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhbmdlcyIKK21zZ3N0ciAiJWxkIMRuZGVydW5nZW4iCisKKyM6IHVuZG8uYzo3NTMKK21zZ2lkICJFNDM5OiB1bmRvIGxpc3QgY29ycnVwdCIKK21zZ3N0ciAiRTQzOTogUvxja2dhbmdiYXJrZWl0c2xpc3RlIGthcHV0dCIKKworIzogdW5kby5jOjc4NQorbXNnaWQgIkU0NDA6IHVuZG8gbGluZSBtaXNzaW5nIgorbXNnc3RyICJFNDQwOiBS/GNrZ2FuZ2JhcmtlaXRzbGlzdGUgZmVobHQiCisKKyMuIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMKKyM6IHZlcnNpb24uYzo2OTEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIEJpdCBHVUkgVmVyc2lvbiIKKworIzogdmVyc2lvbi5jOjY5MworbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgQml0IEdVSSBWZXJzaW9uIgorCisjOiB2ZXJzaW9uLmM6Njk2Cittc2dpZCAiIGluIFdpbjMycyBtb2RlIgorbXNnc3RyICIgaW4gV2luMzJzIE1vZHVzIgorCisjOiB2ZXJzaW9uLmM6Njk4Cittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIiBtaXQgT0xFIFVudGVyc3T8dHp1bmciCisKKyM6IHZlcnNpb24uYzo3MDEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgY29uc29sZSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBCaXQgS29uc29sZW4gVmVyc2lvbiIKKworIzogdmVyc2lvbi5jOjcwNQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2IGJpdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAxNiBCaXQgVmVyc2lvbiIKKworIzogdmVyc2lvbi5jOjcwOQorbXNnaWQgIiIKKyJcbiIKKyIzMiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMiBCaXQgTVMtRE9TIFZlcnNpb24iCisKKyM6IHZlcnNpb24uYzo3MTEKK21zZ2lkICIiCisiXG4iCisiMTYgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMTYgQml0IE1TLURPUyBWZXJzaW9uIgorCisjOiB2ZXJzaW9uLmM6NzE3Cittc2dpZCAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSBWZXJzaW9uIgorCisjOiB2ZXJzaW9uLmM6NzE5Cittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFggVmVyc2lvbiIKKworIzogdmVyc2lvbi5jOjcyMgorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgVmVyc2lvbiIKKworIzogdmVyc2lvbi5jOjcyNworbXNnaWQgIiIKKyJcbiIKKyJSSVNDIE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJSSVNDIE9TIFZlcnNpb24iCisKKyM6IHZlcnNpb24uYzo3MzcKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisiSW5jbHVzaXZlIGRlciBLb3JyZWt0dXJlbjogIgorCisjOiB2ZXJzaW9uLmM6NzYzIHZlcnNpb24uYzoxMDk4Cittc2dpZCAiTW9kaWZpZWQgYnkgIgorbXNnc3RyICJWZXLkbmRlcnQgdm9uICIKKworIzogdmVyc2lvbi5jOjc3MAorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyLcYmVyc2V0enQgIgorCisjOiB2ZXJzaW9uLmM6NzczCittc2dpZCAiYnkgIgorbXNnc3RyICJ2b24gIgorCisjOiB2ZXJzaW9uLmM6Nzg1Cittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJNb25zdGVyIFZlcnNpb24gIgorCisjOiB2ZXJzaW9uLmM6Nzg4Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIkdyb99lIFZlcnNpb24gIgorCisjOiB2ZXJzaW9uLmM6NzkxCittc2dpZCAiIgorIlxuIgorIk5vcm1hbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIk5vcm1hbGUgVmVyc2lvbiAiCisKKyM6IHZlcnNpb24uYzo3OTQKK21zZ2lkICIiCisiXG4iCisiU21hbGwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJLbGVpbmUgVmVyc2lvbiAiCisKKyM6IHZlcnNpb24uYzo3OTYKK21zZ2lkICIiCisiXG4iCisiVGlueSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIldpbnppZ2UgVmVyc2lvbiAiCisKKyM6IHZlcnNpb24uYzo4MDIKK21zZ2lkICJ3aXRob3V0IEdVSS4iCittc2dzdHIgIm9obmUgR1VJLiIKKworIzogdmVyc2lvbi5jOjgwNgorbXNnaWQgIndpdGggR1RLLUdOT01FIEdVSS4iCittc2dzdHIgIm1pdCBHVEstR05PTUUgR1VJLiIKKworIzogdmVyc2lvbi5jOjgwOAorbXNnaWQgIndpdGggR1RLIEdVSS4iCittc2dzdHIgIm1pdCBHVEsgR1VJLiIKKworIzogdmVyc2lvbi5jOjgxMgorbXNnaWQgIndpdGggWDExLU1vdGlmIEdVSS4iCittc2dzdHIgIm1pdCBYMTEtTW90aWYgR1VJLiIKKworIzogdmVyc2lvbi5jOjgxNQorbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICJtaXQgWDExLUF0aGVuYSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODE4Cittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgIm1pdCBCZU9TIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4MjEKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICJtaXQgUGhvdG9uIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4MjQKK21zZ2lkICJ3aXRoIEdVSS4iCittc2dzdHIgIm1pdCBHVEsuIgorCisjOiB2ZXJzaW9uLmM6ODI3Cittc2dpZCAid2l0aCBDYXJib24gR1VJLiIKK21zZ3N0ciAibWl0IENhcmJvbiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODMwCittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICJtaXQgQ29jb2EgR1VJLiIKKworIzogdmVyc2lvbi5jOjgzMworbXNnaWQgIndpdGggKGNsYXNzaWMpIEdVSS4iCittc2dzdHIgIm1pdCAoa2xhc3Npc2NoZW0pIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4NDQKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIgRWluLSAoKykgb2RlciBhdXNzY2hsaWXfbGljaCAoLSkgZGVyIEVpZ2Vuc2NoYWZ0ZW46XG4iCisKKyM6IHZlcnNpb24uYzo4NTYKK21zZ2lkICIgICBzeXN0ZW0gdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgICBTeXN0ZW0tdmltcmMtRGF0ZWk6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODYxCittc2dpZCAiICAgICB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgIEJlbnV0emVyLXZpbXJjLURhdGVpOiBcIiIKKworIzogdmVyc2lvbi5jOjg2NgorbXNnaWQgIiAybmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIHp3ZWl0ZSBCZW51dHplci12aW1yYy1EYXRlaTogXCIiCisKKyM6IHZlcnNpb24uYzo4NzEKK21zZ2lkICIgM3JkIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiBkcml0dGUgQmVudXR6ZXItdmltcmMtRGF0ZWk6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODc2Cittc2dpZCAiICAgICAgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgICBCZW51dHplci1leHJjLURhdGVpOiBcIiIKKworIzogdmVyc2lvbi5jOjg4MQorbXNnaWQgIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiIHp3ZWl0ZSBCZW51dHplci12aW1yYy1EYXRlaTogXCIiCisKKyM6IHZlcnNpb24uYzo4ODcKK21zZ2lkICIgIHN5c3RlbSBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgIFN5c3RlbS1ndmltcmMtRGF0ZWk6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODkxCittc2dpZCAiICAgIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgQmVudXR6ZXItZ3ZpbXJjLURhdGVpOiBcIiIKKworIzogdmVyc2lvbi5jOjg5NQorbXNnaWQgIjJuZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiendlaXRlIEJlbnV0emVyLWd2aW1yYy1EYXRlaTogXCIiCisKKyM6IHZlcnNpb24uYzo5MDAKK21zZ2lkICIzcmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgImRyaXR0ZSBCZW51dHplci1ndmltcmMtRGF0ZWk6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTA3Cittc2dpZCAiICAgIHN5c3RlbSBtZW51IGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgICAgIFN5c3RlbS1NZW78LURhdGVpOiBcIiIKKworIzogdmVyc2lvbi5jOjkxNQorbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICAgICBWb3JlaW5zdGVsbHVuZyBm/HIgJFZJTTogXCIiCisKKyM6IHZlcnNpb24uYzo5MjEKK21zZ2lkICIgZi1iIGZvciAkVklNUlVOVElNRTogXCIiCittc2dzdHIgIiAgICAgICAgIHVuZCBm/HIgJFZJTVJVTlRJTUU6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTI1Cittc2dpZCAiQ29tcGlsYXRpb246ICIKK21zZ3N0ciAi3GJlcnNldHp0OiAiCisKKyM6IHZlcnNpb24uYzo5MzEKK21zZ2lkICJDb21waWxlcjogIgorbXNnc3RyICJDb21waWxlcjogIgorCisjOiB2ZXJzaW9uLmM6OTM2Cittc2dpZCAiTGlua2luZzogIgorbXNnc3RyICJMaW5rZW46ICIKKworIzogdmVyc2lvbi5jOjk0MQorbXNnaWQgIiAgREVCVUcgQlVJTEQiCittc2dzdHIgIiAgREVCVUctVkVSU0lPTiIKKworIzogdmVyc2lvbi5jOjk3NworbXNnaWQgIlZJTSAtIFZpIElNcHJvdmVkIgorbXNnc3RyICJWSU0gLSB2ZXJiZXNzZXJ0ZXIgVmkiCisKKyM6IHZlcnNpb24uYzo5NzkKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAiVmVyc2lvbiAiCisKKyM6IHZlcnNpb24uYzo5ODAKK21zZ2lkICJieSBCcmFtIE1vb2xlbmFhciBldCBhbC4iCittc2dzdHIgInZvbiBCcmFtIE1vb2xlbmFhciB1bmQgQW5kZXJlbiIKKworIzogdmVyc2lvbi5jOjk4NAorbXNnaWQgIlZpbSBpcyBvcGVuIHNvdXJjZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUiCittc2dzdHIgIlZpbSBpc3QgT3BlbiBTb3VyY2UgdW5kIGthbm4gZnJlaSB3ZWl0ZXJnZWdlYmVuIHdlcmRlbiIKKworIzogdmVyc2lvbi5jOjk4NgorbXNnaWQgIkhlbHAgcG9vciBjaGlsZHJlbiBpbiBVZ2FuZGEhIgorbXNnc3RyICJIZWxmZW4gU2llIGFybWVuIEtpbmRlcm4gaW4gVWdhbmRhISIKKworIzogdmVyc2lvbi5jOjk4NworbXNnaWQgInR5cGUgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgInRpcHBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICAgZvxyIEluZm9ybWF0aW9uZW4gZGFy/GJlciAiCisKKyM6IHZlcnNpb24uYzo5ODkKK21zZ2lkICJ0eXBlICA6cTxFbnRlcj4gICAgICAgICAgICAgICB0byBleGl0ICAgICAgICAgIgorbXNnc3RyICJ0aXBwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgIHp1bSBCZWVuZGVuICAgICAgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6OTkwCittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAidGlwcGUgIDpoZWxwPEVudGVyPiAgb2RlciA8RjE+ICBm/HIgT25saW5lIEhpbGZlICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjk5MQorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgInRpcHBlICA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICAgZvxyIFZlcnNpb25zLUluZm9ybWF0aW9uZW4iCisKKyM6IHZlcnNpb24uYzo5OTQKK21zZ2lkICJSdW5uaW5nIGluIFZpIGNvbXBhdGlibGUgbW9kZSIKK21zZ3N0ciAiVmkga29tcGF0aWJsZSBFaW5zdGVsbHVuZyIKKworIzogdmVyc2lvbi5jOjk5NQorbXNnaWQgInR5cGUgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIGZvciBWaW0gZGVmYXVsdHMiCittc2dzdHIgInRpcHBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICAgZvxyIFZpbS1Wb3JlaW5zdGVsbHVuZ2VuICAiCisKKyM6IHZlcnNpb24uYzo5OTYKK21zZ2lkICJ0eXBlICA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJ0aXBwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gIGb8ciBJbmZvcm1hdGlvbmVuIGRhcvxiZXIgIgorCisjOiB2ZXJzaW9uLmM6MTAxMQorbXNnaWQgIm1lbnUgIEhlbHAtPk9ycGhhbnMgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIk1lbvwgIEhpbGZlLT5XYWlzZW4gICAgICAgICAgIGb8ciBJbmZvcm1hdGlvbmVuIGRhcvxiZXIgICAgIgorCisjOiB2ZXJzaW9uLmM6MTAxMworbXNnaWQgIlJ1bm5pbmcgbW9kZWxlc3MsIHR5cGVkIHRleHQgaXMgaW5zZXJ0ZWQiCittc2dzdHIgIk1vZGUtZnJlaWVyIEJldHJpZWIsIGdldGlwcHRlciBUZXh0IHdpcmQgZWluZ2Vm/Gd0IgorCisjOiB2ZXJzaW9uLmM6MTAxNAorbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIEluc2VydCBNb2RlICAiCittc2dzdHIgIk1lbvwgIEVkaXRpZXJlbi0+R2xvYmFsZSBFaW5zdGVsbHVuZy0+RWluZvxnZS1Nb2R1cyBlaW4tIHVuZCBhdXNzY2hhbHRlbiAgIgorCisjOiB2ZXJzaW9uLmM6MTAxNQorbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0d28gbW9kZXMgICAgICAiCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGb8ciB6d2VpIE1vZGkgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTAxOQorbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIFZpIENvbXBhdGlibGUiCittc2dzdHIgIk1lbvwgIEVkaXRpZXJlbi0+R2xvYmFsZSBFaW5zdGVsbHVuZy0+VmktS29tcGF0aWJpbGl05HQgZWluLSB1bmQgYXVzc2NoYWx0ZW4iCisKKyM6IHZlcnNpb24uYzoxMDIwCittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZvxyIFZpbSBWb3JlaW5zdGVsbHVuZ2VuICAgIgorCisjOiB2ZXJzaW9uLmM6MTA2NgorbXNnaWQgIldBUk5JTkc6IFdpbmRvd3MgOTUvOTgvTUUgZGV0ZWN0ZWQiCittc2dzdHIgIkFDSFRVTkc6IFdpbmRvd3MgOTUvOTgvTUUgd3VyZGUgZXJrYW5udCIKKworIzogdmVyc2lvbi5jOjEwNjkKK21zZ2lkICJ0eXBlICA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJ0aXBwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgIGb8ciBJbmZvcm1hdGlvbmVuIGRhcvxiZXIgIgorCisjOiB3aW5kb3cuYzoyMDEKK21zZ2lkICJFNDQxOiBUaGVyZSBpcyBubyBwcmV2aWV3IHdpbmRvdyIKK21zZ3N0ciAiRTQ0MTogRXMgZ2lidCBrZWluIEZlbnN0ZXIgenVyIFZvcmFuc2ljaHQiCisKKyMgc2hvdWxkIHJlYWQ6IHRvcGxlZnQgLyBib3RyaWdodAorIzogd2luZG93LmM6NTgwCittc2dpZCAiRTQ0MjogQ2FuJ3Qgc3BsaXQgdG9wbGVmdCBhbmQgYm90cmlnaHQgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiRTQ0MjogdG9wbGVmdCB1bmQgYm90cmlnaHQga/ZubmVuIG5pY2h0IGdsZWljaHplaXRpZyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiB3aW5kb3cuYzoxMzM5Cittc2dpZCAiRTQ0MzogQ2Fubm90IHJvdGF0ZSB3aGVuIGFub3RoZXIgd2luZG93IGlzIHNwbGl0IgorbXNnc3RyICJFNDQzOiBSb3RpZXJlbiBuaWNodCBt9mdsaWNoIHdlbm4gZWluIGFuZGVyZXMgRmVuc3RlciBnZXRlaWx0IGlzdCIKKworIzogd2luZG93LmM6MTg0MQorbXNnaWQgIkU0NDQ6IENhbm5vdCBjbG9zZSBsYXN0IHdpbmRvdyIKK21zZ3N0ciAiRTQ0NDogTGV0enRlcyBGZW5zdGVyIGthbm4gbmljaHQgZ2VzY2hsb3NzZW4gd2VyZGVuIgorCisjOiB3aW5kb3cuYzoyNTA1Cittc2dpZCAiQWxyZWFkeSBvbmx5IG9uZSB3aW5kb3ciCittc2dzdHIgIkJlcmVpdHMgbnVyIGVpbiBGZW5zdGVyIgorCisjOiB3aW5kb3cuYzoyNTUyCittc2dpZCAiRTQ0NTogT3RoZXIgd2luZG93IGNvbnRhaW5zIGNoYW5nZXMiCittc2dzdHIgIkU0NDU6IEFuZGVyZXMgRmVuc3RlciBlbnRo5Gx0IMRuZGVydW5nZW4iCisKKyMgQ3Vyc29yOiBTY2hyZWlibWFya2UgUG9zaXRpb25zbWFya2UKKyM6IHdpbmRvdy5jOjQzNzkKK21zZ2lkICJFNDQ2OiBObyBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFNDQ2OiBLZWluIERhdGVpbmFtZSB1bnRlciBkZW0gQ3Vyc29yIgorCisjOiB3aW5kb3cuYzo0NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDc6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTQ0NzogRGF0ZWkgXCIlc1wiIGthbm4gaW0gUGZhZCBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NTg2Cittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICJFZGl0aWVyZSBtaXQgJm1laHJlcmVuIFZpbXMiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NTkyCittc2dpZCAiRWRpdCB3aXRoIHNpbmdsZSAmVmltIgorbXNnc3RyICJFZGl0aWVyZSBtaXQgZWluZW0gJlZpbSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo2MDQKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAiRWRpdGllcmUgbWl0ICZWaW0iCisKKyMuIE5vdyBjb25jYXRlbmF0ZQorIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo2MjgKK21zZ2lkICJFZGl0IHdpdGggZXhpc3RpbmcgVmltIC0gJiIKK21zZ3N0ciAiRWRpdGllcmUgbWl0IGV4aXN0aWVyZW5kZW0gVmltIC0gJiIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo3NTIKK21zZ2lkICJFZGl0cyB0aGUgc2VsZWN0ZWQgZmlsZShzKSB3aXRoIFZpbSIKK21zZ3N0ciAiRWRpdGllcmUgZGllIGF1c2dld+RobHRlbiBEYXRlaShlbikgbWl0IFZpbSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTEgLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjkKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwcm9jZXNzOiBDaGVjayBpZiBndmltIGlzIGluIHlvdXIgcGF0aCEiCittc2dzdHIgIkZlaGxlciBiZWltIFN0YXJ0ZW4gZGVzIFByb3plc3NlczogSXN0IGd2aW0gaW0gUGZhZD8iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6ODkyIC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTA2CisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjk3MAorbXNnaWQgImd2aW1leHQuZGxsIGVycm9yIgorbXNnc3RyICJndmltZXh0LmRsbCBGZWhsZXIiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTA1Cittc2dpZCAiUGF0aCBsZW5ndGggdG9vIGxvbmchIgorbXNnc3RyICJQZmFkLUzkbmdlIHp1IGxhbmchIgorCisjOiBnbG9iYWxzLmg6OTAwCittc2dpZCAiLS1ObyBsaW5lcyBpbiBidWZmZXItLSIKK21zZ3N0ciAiLS1LZWluZSBaZWlsZW4gaW0gUHVmZmVyLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTA0OAorbXNnaWQgIkNvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiQmVmZWhsIGFiZ2Vicm9jaGVuIgorCisjOiBnbG9iYWxzLmg6MTA0OQorbXNnaWQgIkFyZ3VtZW50IHJlcXVpcmVkIgorbXNnc3RyICJBcmd1bWVudCB3aXJkIGJlbvZ0aWd0IgorCisjOiBnbG9iYWxzLmg6MTA1MAorbXNnaWQgIkUxMDogXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJiIKK21zZ3N0ciAiRTEwOiBcXCBzb2xsdGUgdm9uIC8sID8gb3IgJiBnZWZvbGd0IHdlcmRlbiIKKworIzogZ2xvYmFscy5oOjEwNTIKK21zZ2lkICJFMTE6IEludmFsaWQgaW4gY29tbWFuZC1saW5lIHdpbmRvdzsgPENSPiBleGVjdXRlcywgQ1RSTC1DIHF1aXRzIgorbXNnc3RyICIiCisiRTExOiBVbmf8bHRpZyBpbSBLb21tYW5kby1aZWlsZW4gRmVuc3RlcjsgPENSPiBm/GhydCBhdXMsIENUUkwtQyBiZWVuZGV0IgorCisjOiBnbG9iYWxzLmg6MTA1NAorbXNnaWQgIkUxMjogQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaCIKK21zZ3N0ciAiIgorIkUxMjogQmVmZWhsIG5pY2h0IHp1bORzc2lnIHZvbSBleHJjL3ZpbXJjIGluIGRlciBtb21lbnRhbmVuIFZlcnplaWNobmlzLSAiCisib2RlciBUYWctU3VjaGUiCisKKyM6IGdsb2JhbHMuaDoxMDU1Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IERhdGVpIGV4aXN0aWVydCBiZXJlaXRzIChlcnp3aW5nZSBkdXJjaCAhKSIKKworIzogZ2xvYmFscy5oOjEwNTYKK21zZ2lkICJDb21tYW5kIGZhaWxlZCIKK21zZ3N0ciAiQmVmZWhsIHNjaGx1ZyBmZWhsIgorCisjOiBnbG9iYWxzLmg6MTA1NworbXNnaWQgIkludGVybmFsIGVycm9yIgorbXNnc3RyICJJbnRlcm5lciBGZWhsZXIiCisKKyM6IGdsb2JhbHMuaDoxMDU4Cittc2dpZCAiSW50ZXJydXB0ZWQiCittc2dzdHIgIlVudGVyYnJvY2hlbiIKKworIzogZ2xvYmFscy5oOjEwNTkKK21zZ2lkICJFMTQ6IEludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiRTE0OiBVbmf8bHRpZ2UgQWRyZXNzZSIKKworIzogZ2xvYmFscy5oOjEwNjAKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJVbmf8bHRpZ2VzIEFyZ3VtZW50IgorCisjOiBnbG9iYWxzLmg6MTA2MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiVW5n/Gx0aWdlcyBBcmd1bWVudDogJXMiCisKKyM6IGdsb2JhbHMuaDoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTogSW52YWxpZCBleHByZXNzaW9uOiAlcyIKK21zZ3N0ciAiRTE1OiB1bmf8bHRpZ2VyIEF1c2RydWNrOiAlcyIKKworIzogZ2xvYmFscy5oOjEwNjUKK21zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCittc2dzdHIgIkUxNjogVW5n/Gx0aWdlciBCZXJlaWNoIgorCisjOiBnbG9iYWxzLmg6MTA2NgorbXNnaWQgIkludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAiVW5n/Gx0aWdlciBCZWZlaGxzLU5hbWUiCisKKyM6IGdsb2JhbHMuaDoxMDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzogXCIlc1wiIGlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJFMTc6IFwiJXNcIiBpc3QgZWluIFZlcnplaWNobmlzIgorCisjOiBnbG9iYWxzLmg6MTA3MQorbXNnaWQgIkUxODogVW5leHBlY3RlZCBjaGFyYWN0ZXJzIGJlZm9yZSAnPSciCittc2dzdHIgIkUxODogVW5lcndhcnRldGVzIFplaWNoZW4gdm9yICc9JyIKKworIzogZ2xvYmFscy5oOjEwNzMKK21zZ2lkICJFMTk6IE1hcmsgaGFzIGludmFsaWQgbGluZSBudW1iZXIiCittc2dzdHIgIkUxOTogTWFya2UgaGF0IHVuZ/xsdGlnZSBaZWlsZW5udW1tZXIiCisKKyM6IGdsb2JhbHMuaDoxMDc0Cittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIkUyMDogTWFya2UgbmljaHQgZ2VzZXR6dCIKKworIzogZ2xvYmFscy5oOjEwNzUKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTogS2FubiBrZWluZSDEbmRlcnVuZ2VuIG1hY2hlbiwgJ21vZGlmaWFibGUnIGlzdCBhdXMiCisKKyM6IGdsb2JhbHMuaDoxMDc2Cittc2dpZCAiRTIyOiBTY3JpcHRzIG5lc3RlZCB0b28gZGVlcCIKK21zZ3N0ciAiRTIyOiBTa3JpcHQtU2NoYWNodGVsdW5nIHp1IHRpZWYiCisKKyM6IGdsb2JhbHMuaDoxMDc3Cittc2dpZCAiRTIzOiBObyBhbHRlcm5hdGUgZmlsZSIKK21zZ3N0ciAiRTIzOiBLZWluZSBhbHRlcm5hdGl2ZSBEYXRlaSIKKworIzogZ2xvYmFscy5oOjEwNzgKK21zZ2lkICJFMjQ6IE5vIHN1Y2ggYWJicmV2aWF0aW9uIgorbXNnc3RyICJFMjQ6IEtlaW5lIEFia/xyenVuZyBnZWZ1bmRlbiIKKworIzogZ2xvYmFscy5oOjEwNzkKK21zZ2lkICJObyAhIGFsbG93ZWQiCittc2dzdHIgIiEgbmljaHQgZXJsYXVidCIKKworIzogZ2xvYmFscy5oOjEwODEKK21zZ2lkICJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICIiCisiRTI1OiBHVUkga2FubiBuaWNodCBiZW51dHp0IHdlcmRlbjogd3VyZGUgenVtIFplaXRwdW5rdCBkZXMg3GJlcnNldHplbnMgIgorIm5pY2h0IGVpbmdlc2NoYWx0ZXQuIgorCisjOiBnbG9iYWxzLmg6MTA4NAorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiIgorIkUyNjogSGVicuRpc2NoIGthbm4gbmljaHQgYmVudXR6dCB3ZXJkZW46IHd1cmRlIHp1bSBaZWl0cHVua3QgZGVzICIKKyLcYmVyc2V0emVucyBuaWNodCBlaW5nZXNjaGFsdGV0LlxuIgorCisjOiBnbG9iYWxzLmg6MTA4NworbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICIiCisiRTI3OiBGYXJzaSBrYW5uIG5pY2h0IGJlbnV0enQgd2VyZGVuOiB3dXJkZSB6dW0gWmVpdHB1bmt0IGRlcyDcYmVyc2V0emVucyAiCisibmljaHQgZWluZ2VzY2hhbHRldC5cbiIKKworIzogZ2xvYmFscy5oOjEwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBIZXJ2b3JoZWJ1bmdzLUdydXBwZSBleGlzdGllcnQgbmljaHQ6ICVzIgorCisjOiBnbG9iYWxzLmg6MTA5MgorbXNnaWQgIkUyOTogTm8gaW5zZXJ0ZWQgdGV4dCB5ZXQiCittc2dzdHIgIkUyOTogTm9jaCBrZWluIGVpbmdlZvxndGVyIFRleHQiCisKKyM6IGdsb2JhbHMuaDoxMDkzCittc2dpZCAiRTMwOiBObyBwcmV2aW91cyBjb21tYW5kIGxpbmUiCittc2dzdHIgIkUzMDogS2VpbmUgdm9yaGVyaWdlIEJlZmVobHN6ZWlsZSIKKworIzogZ2xvYmFscy5oOjEwOTQKK21zZ2lkICJFMzE6IE5vIHN1Y2ggbWFwcGluZyIKK21zZ3N0ciAiRTMxOiBLZWluZSBadW9yZG51bmcgZ2VmdW5kZW4iCisKKyM6IGdsb2JhbHMuaDoxMDk1Cittc2dpZCAiTm8gbWF0Y2giCittc2dzdHIgIktlaW4gVHJlZmZlciIKKworIzogZ2xvYmFscy5oOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2g6ICVzIgorbXNnc3RyICJLZWluIFRyZWZmZXIgZvxyOiAlcyIKKworIzogZ2xvYmFscy5oOjEwOTcKK21zZ2lkICJFMzI6IE5vIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTMyOiBLZWluIERhdGVpbmFtZSIKKworIzogZ2xvYmFscy5oOjEwOTgKK21zZ2lkICJFMzM6IE5vIHByZXZpb3VzIHN1YnN0aXR1dGUgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzM6IEtlaW4gdm9yaGVyaWdlciByZWd1bORyZXIgRXJzZXR6dW5ncy1BdXNkcnVjayIKKworIzogZ2xvYmFscy5oOjEwOTkKK21zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCittc2dzdHIgIkUzNDogS2VpbiB2b3JoZXJpZ2VyIEJlZmVobCIKKworIzogZ2xvYmFscy5oOjExMDAKK21zZ2lkICJFMzU6IE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTM1OiBLZWluZSB2b3JoZXJpZ2VyIHJlZ3Vs5HJlciBBdXNkcnVjayIKKworIzogZ2xvYmFscy5oOjExMDEKK21zZ2lkICJObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICJCZXJlaWNoIHVuenVs5HNzaWciCisKKyM6IGdsb2JhbHMuaDoxMTAzCittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjogenUgd2VuaWcgUGxhdHoiCisKKyM6IGdsb2JhbHMuaDoxMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJEYXRlaSBrYW5uIG5pY2h0IGVyemV1Z3Qgd2VyZGVuOiAlcyIKKworIzogZ2xvYmFscy5oOjExMDYKK21zZ2lkICJDYW4ndCBnZXQgdGVtcCBmaWxlIG5hbWUiCittc2dzdHIgInRlbXAtRGF0ZWkga2FubiBuaWNodCBlcnpldWd0IHdlcmRlbiIKKworIzogZ2xvYmFscy5oOjExMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJEYXRlaSAlcyBrYW5uIG5pY2h0IGdl9mZmbmV0IHdlcmRlbiIKKworIzogZ2xvYmFscy5oOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgcmVhZCBmaWxlICVzIgorbXNnc3RyICJEYXRlaSAlcyBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuIgorCisjOiBnbG9iYWxzLmg6MTEwOQorbXNnaWQgIkUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkUzNzogc2VpdCBkZXIgbGV0enRlbiDEbmRlcnVuZyB3dXJkZSBuaWNodCBnZXNjaHJpZWJlbiAoZXJ6d2luZ2UgbWl0ICEpIgorCisjOiBnbG9iYWxzLmg6MTExMAorbXNnaWQgIkUzODogTnVsbCBhcmd1bWVudCIKK21zZ3N0ciAiRTM4OiBOdWxsLUFyZ3VtZW50IgorCisjOiBnbG9iYWxzLmg6MTExMgorbXNnaWQgIkUzOTogTnVtYmVyIGV4cGVjdGVkIgorbXNnc3RyICJFMzk6IE51bW1lciBlcndhcnRldCIKKworIzogZ2xvYmFscy5oOjExMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwOiBDYW4ndCBvcGVuIGVycm9yZmlsZSAlcyIKK21zZ3N0ciAiRTQwOiBGZWhsZXItRGF0ZWkgJXMga2FubiBuaWNodCBnZfZmZm5ldCB3ZXJkZW4iCisKKyM6IGdsb2JhbHMuaDoxMTE4Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiBTcGVpY2hlciBlcnNjaPZwZnQhIgorCisjOiBnbG9iYWxzLmg6MTEyMQorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kIgorbXNnc3RyICJNdXN0ZXIgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGdsb2JhbHMuaDoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiTXVzdGVyIG5pY2h0IGdlZnVuZGVuOiAlcyIKKworIzogZ2xvYmFscy5oOjExMjQKK21zZ2lkICJBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJBcmd1bWVudCBtdXNzIHBvc2l0aXYgc2VpbiIKKworIzogZ2xvYmFscy5oOjExMjYKK21zZ2lkICJFNDI6IE5vIEVycm9ycyIKK21zZ3N0ciAiRTQyOiBLZWluIEZlaGxlciIKKworIzogZ2xvYmFscy5oOjExMjgKK21zZ2lkICJFNDM6IERhbWFnZWQgbWF0Y2ggc3RyaW5nIgorbXNnc3RyICJFNDM6IEJlc2No5GRpZ3RlciBTdWNoYXVzZHJ1Y2siCisKKyM6IGdsb2JhbHMuaDoxMTI5Cittc2dpZCAiRTQ0OiBDb3JydXB0ZWQgcmVnZXhwIHByb2dyYW0iCittc2dzdHIgIkU0NDogc2NoYWRoYWZ0ZXMgcmVnZXhwIFByb2dyYW1tIgorCisjOiBnbG9iYWxzLmg6MTEzMAorbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0ICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIiIKKyJFNDU6IERpZSBTY2hyZWlic2NodXR6LU9wdGlvbiAncmVhZG9ubHknIGlzdCBnZXNldHp0IChlcnp3aW5nZSBkdXJjaCAhKSIKKworIzogZ2xvYmFscy5oOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiCittc2dzdHIgIkU0NjogVmFyaWFibGUgXCIlc1wiIGthbm4gbnVyIGdlbGVzZW4gd2VyZGVuIgorCisjOiBnbG9iYWxzLmg6MTEzNQorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0NzogRmVobGVyIHfkaHJlbmQgZGVzIExlc2VucyBkZXIgRmVobGVyLURhdGVpIgorCisjOiBnbG9iYWxzLmg6MTEzOAorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiBJbiBlaW5lciBTYW5kYm94IG5pY2h0IGVybGF1YnQiCisKKyM6IGdsb2JhbHMuaDoxMTQwCittc2dpZCAiRTQ5OiBJbnZhbGlkIHNjcm9sbCBzaXplIgorbXNnc3RyICJFNDk6IFVuZ/xsdGlnZSBTY3JvbGwtR3L232UiCisKKyM6IGdsb2JhbHMuaDoxMTQxCittc2dpZCAiRTkxOiAnc2hlbGwnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiRTkxOiBEaWUgT3B0aW9uICdzaGVsbCcgaXN0IGxlZXIiCisKKyM6IGdsb2JhbHMuaDoxMTQyCittc2dpZCAiRTcyOiBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUiCittc2dzdHIgIkU3MjogRmVobGVyIGJlaW0gU2NobGll32VuIGRlciBBdXNsYWdlcnVuZ3MtRGF0ZWkiCisKKyM6IGdsb2JhbHMuaDoxMTQzCittc2dpZCAiRTczOiB0YWcgc3RhY2sgZW1wdHkiCittc2dzdHIgIkU3MzogdGFnIFN0YXBlbCBsZWVyLiIKKworIzogZ2xvYmFscy5oOjExNDQKK21zZ2lkICJFNzQ6IENvbW1hbmQgdG9vIGNvbXBsZXgiCittc2dzdHIgIkU3NDogQmVmZWhsIHp1IGtvbXBsaXppZXJ0IgorCisjOiBnbG9iYWxzLmg6MTE0NQorbXNnaWQgIkU3NTogTmFtZSB0b28gbG9uZyIKK21zZ3N0ciAiRTc1OiBOYW1lIHp1IGxhbmciCisKKyM6IGdsb2JhbHMuaDoxMTQ2Cittc2dpZCAiRTc2OiBUb28gbWFueSBbIgorbXNnc3RyICJFNzY6IHp1IHZpZWxlIFsiCisKKyM6IGdsb2JhbHMuaDoxMTQ3Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IHp1IHZpZWxlIERhdGVpLU5hbWVuIgorCisjOiBnbG9iYWxzLmg6MTE0OAorbXNnaWQgIlRyYWlsaW5nIGNoYXJhY3RlcnMiCittc2dzdHIgItxiZXJzY2j8c3NpZ2UgWmVpY2hlbiIKKworIzogZ2xvYmFscy5oOjExNDkKK21zZ2lkICJFNzg6IFVua25vd24gbWFyayIKK21zZ3N0ciAiRTc4OiBVbmJla2FubnRlIE1hcmsiCisKKyM6IGdsb2JhbHMuaDoxMTUwCittc2dpZCAiRTc5OiBDYW5ub3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiRTc5OiBLYW5uIFwid2lsZGNhcmRzXCIgbmljaHQgZXJ3ZWl0ZXJuIgorCisjOiBnbG9iYWxzLmg6MTE1MQorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiBGZWhsZXIgd+RocmVuZCBkZXMgU2NocmVpYmVucyIKKworIzogZ2xvYmFscy5oOjExNTIKK21zZ2lkICJaZXJvIGNvdW50IgorbXNnc3RyICJOdWxsLVrkaGxlciIKKworIzogZ2xvYmFscy5oOjExNTQKK21zZ2lkICJFODE6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0IgorbXNnc3RyICJFODE6IDxTSUQ+IHd1cmRlIG5pY2h0IGluIGVpbmVyIFNrcmlwdC1VbWdlYnVuZyBiZW51dHp0IgorCisjOiBnbG9iYWxzLmg6MTE1NworbXNnaWQgIkU0NDk6IEludmFsaWQgZXhwcmVzc2lvbiByZWNlaXZlZCIKK21zZ3N0ciAiRTQ0OTogdW5n/Gx0aWdlciBBdXNkcnVjayIKZGlmZiAtLWdpdCBhL3NyYy9wby9lbl9HQi5wbyBiL3NyYy9wby9lbl9HQi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTIwOTJhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL2VuX0dCLnBvCkBAIC0wLDAgKzEsNDggQEAKKyMgVUsgRW5nbGlzaCBUcmFuc2xhdGlvbiBmb3IgVmltCQl2aW06c2V0IGZvbGRtZXRob2Q9bWFya2VyOgorIworIyBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyMgRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisjCisjIEZJUlNUIEFVVEhPUiBNaWtlIFdpbGxpYW1zIDxtcndAZWFuZGVtLmNvLnVrPiwgMjAwMy4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IFZpbShVSyBFbmdsaXNoKVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDAzLTAyLTIzIDEwOjI3KzAwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAzLTAyLTI1IDExOjA1KzAwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1pa2UgV2lsbGlhbXMgPG1yd0BlYW5kZW0uY28udWs+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTWlrZSBXaWxsaWFtcyA8bXJ3QGVhbmRlbS5jby51az5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU09fODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdFxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTogQ2Fubm90IGZpbmQgY29sb3VyIHNjaGVtZSAlcyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFMjU0OiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgJXMiCittc2dzdHIgIkUyNTQ6IENhbm5vdCBhbGxvY2F0ZSBjb2xvdXIgJXMiCisKK21zZ2lkICJWaW0gRTQ1ODogQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0IgorbXNnc3RyICIiCisiVmltIEU0NTg6IENhbm5vdCBhbGxvY2F0ZSBjb2xvdXJtYXAgZW50cnksIHNvbWUgY29sb3VycyBtYXkgYmUgaW5jb3JyZWN0IgorCittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8Y29sb3VyPlx0VXNlIDxjb2xvdXI+IGZvciB0aGUgYmFja2dyb3VuZCAoYWxzbzogLWJnKSIKKworbXNnaWQgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZnKSIKK21zZ3N0ciAiLWZvcmVncm91bmQgPGNvbG91cj5cdFVzZSA8Y29sb3VyPiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mZykiCisKK21zZ2lkICJNZXNzYWdlcyBtYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiIKK21zZ3N0ciAiTWVzc2FnZXMgbWFpbnRhaW5lcjogTWlrZSBXaWxsaWFtcyA8bXJ3QGVhbmRlbS5jby51az4iCisKK21zZ2lkICJFNDE5OiBGRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDE5OiBGRyBjb2xvdXIgdW5rbm93biIKKworbXNnaWQgIkU0MjA6IEJHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MjA6IEJHIGNvbG91ciB1bmtub3duIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjE6IENvbG9yIG5hbWUgb3IgbnVtYmVyIG5vdCByZWNvZ25pemVkOiAlcyIKK21zZ3N0ciAiRTQyMTogQ29sb3VyIG5hbWUgb3IgbnVtYmVyIG5vdCByZWNvZ25pc2VkOiAlcyIKZGlmZiAtLWdpdCBhL3NyYy9wby9lcy5wbyBiL3NyYy9wby9lcy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGZkZWMxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL2VzLnBvCkBAIC0wLDAgKzEsNjc4MCBAQAorIyBTcGFuaXNoIHRyYW5zbGF0aW9uIGZvciBWaW0gICAgICAgICAgICAgdmltOnNldCBmb2xkbWV0aG9kPW1hcmtlcjoKKyMKKyMgRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisjIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorIworIyBGSVJTVCBBVVRIT1IgRWR1YXJkbyBGLiBBbWF0cmlhIDxlZmVybmExQHBsYXRlYS5wbnRpYy5tZWMuZXM+LCAyMDAxLgorIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogVmltIDYuM2EuMTYgKEVzcGHxb2wpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEFsZWphbmRybyBM83Blei1WYWxlbmNpYSA8ZHJhZHVsQHlhaG9vLmNvbT5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwNC0wNS0xMiAxODozOC0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNC0wNS0xMiAyMDozNC0wNTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbGVqYW5kcm8gTPNwZXotVmFsZW5jaWEgPGRyYWR1bEB5YWhvby5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQWxlamFuZHJvIEzzcGV6LVZhbGVuY2lhIDxkcmFkdWxAeWFob28uY29tPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGJ1ZmZlci5jOjEwMgorbXNnaWQgIkU4MjogQ2Fubm90IGFsbG9jYXRlIGFueSBidWZmZXIsIGV4aXRpbmcuLi4iCittc2dzdHIgIkU4MjogTm8gc2UgcHVlZGUgYXNpZ25hciBtZW1vcmlhIHBhcmEgbmluZ/puIKtidWZmZXK7LCBzYWxpZW5kby4uLiIKKworIzogYnVmZmVyLmM6MTA1Cittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4MzogTm8gc2UgcHVlZGUgYXNpZ25hciBtZW1vcmlhIHBhcmEgZWwgq2J1ZmZlcrssIHVzYW5kbyBvdHJvLi4uIgorCisjOiBidWZmZXIuYzo4MDUKK21zZ2lkICJFNTE1OiBObyBidWZmZXJzIHdlcmUgdW5sb2FkZWQiCittc2dzdHIgIkU1MTU6IE5vIHNlIGRlc2NhcmfzIG5pbmf6biCrYnVmZmVyuy4iCisKKyM6IGJ1ZmZlci5jOjgwNworbXNnaWQgIkU1MTY6IE5vIGJ1ZmZlcnMgd2VyZSBkZWxldGVkIgorbXNnc3RyICJFNTE2OiBObyBzZSBib3Jy8yBuaW5n+m4gq2J1ZmZlcrsuIgorCisjOiBidWZmZXIuYzo4MDkKK21zZ2lkICJFNTE3OiBObyBidWZmZXJzIHdlcmUgd2lwZWQgb3V0IgorbXNnc3RyICJFNTE3OiBObyBzZSBlbGltaW7zIG5pbmf6biCrYnVmZmVyuy4iCisKKyM6IGJ1ZmZlci5jOjgxNworbXNnaWQgIjEgYnVmZmVyIHVubG9hZGVkIgorbXNnc3RyICJVbiCrYnVmZmVyuyBkZXNjYXJnYWRvLiIKKworIzogYnVmZmVyLmM6ODE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgdW5sb2FkZWQiCittc2dzdHIgIiVkIKtidWZmZXJzuyBkZXNjYXJnYWRvcy4iCisKKyM6IGJ1ZmZlci5jOjgyNAorbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIlVuIKtidWZmZXK7IHN1cHJpbWlkby4iCisKKyM6IGJ1ZmZlci5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIGRlbGV0ZWQiCittc2dzdHIgIiVkIKtidWZmZXJzuyBzdXByaW1pZG9zLiIKKworIzogYnVmZmVyLmM6ODMxCittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICIxIKtidWZmZXK7IGVsaW1pbmFkby4iCisKKyM6IGJ1ZmZlci5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHdpcGVkIG91dCIKK21zZ3N0ciAiJWQgq2J1ZmZlcnO7IGVsaW1pbmFkb3MuIgorCisjOiBidWZmZXIuYzo4OTQKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiBObyBoZSBlbmNvbnRyYWRvIG5pbmf6biCrYnVmZmVyuyBtb2RpZmljYWRvLiIKKworIy4gYmFjayB3aGVyZSB3ZSBzdGFydGVkLCBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyM6IGJ1ZmZlci5jOjkzMworbXNnaWQgIkU4NTogVGhlcmUgaXMgbm8gbGlzdGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTg1OiBObyBoYXkgq2J1ZmZlcnO7IGVuIGxhIGxpc3RhLiIKKworIzogYnVmZmVyLmM6OTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQnVmZmVyICVsZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTg2OiBFbCCrYnVmZmVyuyAlbGQgbm8gZXhpc3RlLiIKKworIzogYnVmZmVyLmM6OTQ4Cittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6IE5vIHB1ZWRvIGlyIG3hcyBhbGzhIGRlbCD6bHRpbW8gq2J1ZmZlcrsuIgorCisjOiBidWZmZXIuYzo5NTAKK21zZ2lkICJFODg6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgYnVmZmVyIgorbXNnc3RyICJFODg6IE5vIHB1ZWRvIGlyIG3hcyBhdHLhcyBkZWwgcHJpbWVyIGJ1ZmZlci4iCisKKyM6IGJ1ZmZlci5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFODk6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgJWxkIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIiIKKyJFODk6IE5vIGhhIGd1YXJkYWRvIGVsIGZpY2hlcm8gZGVzZGUgZWwg+mx0aW1vIGNhbWJpbyBkZWwgq2J1ZmZlcrsgJWxkICIKKyIoYfFhZGEgISBwYXJhIGZvcnphcikuIgorCisjOiBidWZmZXIuYzoxMDA1Cittc2dpZCAiRTkwOiBDYW5ub3QgdW5sb2FkIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFOTA6IE5vIHNlIHB1ZWRlIGRlc2NhcmdhciBlbCD6bHRpbW8gYnVmZmVyLiIKKworIzogYnVmZmVyLmM6MTUzOAorbXNnaWQgIlcxNDogV2FybmluZzogTGlzdCBvZiBmaWxlIG5hbWVzIG92ZXJmbG93IgorbXNnc3RyICJXMTQ6IEFkdmVydGVuY2lhOiBsaXN0YSBkZSBub21icmVzIGRlIGZpY2hlcm9zIGRlbWFzaWFkbyBsYXJnYS4iCisKKyM6IGJ1ZmZlci5jOjE3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkyOiBCdWZmZXIgJWxkIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTkyOiBObyBzZSBoYSBlbmNvbnRyYWRvIGVsIGJ1ZmZlciAlbGQiCisKKyM6IGJ1ZmZlci5jOjE5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkzOiBNb3JlIHRoYW4gb25lIG1hdGNoIGZvciAlcyIKK21zZ3N0ciAiRTkzOiBN4XMgZGUgdW5hIGNvaW5jaWRlbmNpYSBjb24gJXMuIgorCisjOiBidWZmZXIuYzoxOTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiBObyBoYXkgdW4gYnVmZmVyIHF1ZSBjb2luY2lkYSBjb24gJXMuIgorCisjOiBidWZmZXIuYzoyMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIgorbXNnc3RyICJs7W5lYSAlbGQiCisKKyM6IGJ1ZmZlci5jOjI0MjAKK21zZ2lkICJFOTU6IEJ1ZmZlciB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTk1OiBZYSBleGlzdGUgdW4gYnVmZmVyIGNvbiBlc3RlIG5vbWJyZS4iCisKKyM6IGJ1ZmZlci5jOjI3MTMKK21zZ2lkICIgW01vZGlmaWVkXSIKK21zZ3N0ciAiIFtNb2RpZmljYWRvXSIKKworIzogYnVmZmVyLmM6MjcxOAorbXNnaWQgIltOb3QgZWRpdGVkXSIKK21zZ3N0ciAiW1NpbiBlZGl0YXJdIgorCisjOiBidWZmZXIuYzoyNzIzCittc2dpZCAiW05ldyBmaWxlXSIKK21zZ3N0ciAiW0ZpY2hlcm8gbnVldm9dIgorCisjOiBidWZmZXIuYzoyNzI0Cittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW0Vycm9yZXMgZGUgbGVjdHVyYV0iCisKKyM6IGJ1ZmZlci5jOjI3MjYgZmlsZWlvLmM6MjExMgorbXNnaWQgIltyZWFkb25seV0iCittc2dzdHIgIltT82xvIGxlY3R1cmFdIgorCisjOiBidWZmZXIuYzoyNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAtLSVkJSUtLSIKK21zZ3N0ciAiMSBs7W5lYSAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6Mjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgLS0lZCUlLS0iCittc2dzdHIgIiVsZCBs7W5lYXMgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQgb2YgJWxkIC0tJWQlJS0tIGNvbCAiCittc2dzdHIgImztbmVhICVsZCBkZSAlbGQgLS0lZCUlLS0gY29sICIKKworIzogYnVmZmVyLmM6Mjg2NAorbXNnaWQgIltObyBmaWxlXSIKK21zZ3N0ciAiW1NpbiBmaWNoZXJvXSIKKworIyAgbXVzdCBiZSBhIGhlbHAgYnVmZmVyCisjLiBtdXN0IGJlIGEgaGVscCBidWZmZXIKKyM6IGJ1ZmZlci5jOjI5MDQKK21zZ2lkICJoZWxwIgorbXNnc3RyICJheXVkYSIKKworIzogYnVmZmVyLmM6MzQ2MyBzY3JlZW4uYzo1MDc1Cittc2dpZCAiW2hlbHBdIgorbXNnc3RyICJbYXl1ZGFdIgorCisjOiBidWZmZXIuYzozNDk1IHNjcmVlbi5jOjUwODEKK21zZ2lkICJbUHJldmlld10iCittc2dzdHIgIltWaXN0YSBwcmV2aWFdIgorCisjOiBidWZmZXIuYzozNzc1Cittc2dpZCAiQWxsIgorbXNnc3RyICJUb2RvIgorCisjOiBidWZmZXIuYzozNzc1Cittc2dpZCAiQm90IgorbXNnc3RyICJGaW5hbCIKKworIzogYnVmZmVyLmM6Mzc3NworbXNnaWQgIlRvcCIKK21zZ3N0ciAiQ29taWVuem8iCisKKyM6IGJ1ZmZlci5jOjQ1MjMKK21zZ2lkICIiCisiXG4iCisiIyBCdWZmZXIgbGlzdDpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgTGlzdGEgZGUgq2J1ZmZlcnO7OlxuIgorCisjOiBidWZmZXIuYzo0NTU2Cittc2dpZCAiW0Vycm9yIExpc3RdIgorbXNnc3RyICJbTGlzdGEgZGUgZXJyb3Jlc10iCisKKyM6IGJ1ZmZlci5jOjQ1NjkgbWVtbGluZS5jOjE1MjAKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIltTaW4gZmljaGVyb10iCisKKyM6IGJ1ZmZlci5jOjQ4ODIKK21zZ2lkICIiCisiXG4iCisiLS0tIFNpZ25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBTaWdub3MgLS0tIgorCisjOiBidWZmZXIuYzo0OTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNpZ25zIGZvciAlczoiCittc2dzdHIgIlNpZ25vcyBwYXJhICVzIgorCisjOiBidWZmZXIuYzo0OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBsaW5lPSVsZCAgaWQ9JWQgIG5hbWU9JXMiCittc2dzdHIgIiAgICBs7W5lYT0lbGQgaWQ9JWQgbm9tYnJlPSVzIgorCisjOiBkaWZmLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NjogQ2FuIG5vdCBkaWZmIG1vcmUgdGhhbiAlbGQgYnVmZmVycyIKK21zZ3N0ciAiRTk2OiBObyBwdWVkbyB1c2FyIKtkaWZmuyBjb24gbeFzIGRlICVsZCCrYnVmZmVyc7suIgorCisjOiBkaWZmLmM6NzEzCittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6IE5vIHB1ZWRvIGNyZWFyIKtkaWZmc7suIgorCisjOiBkaWZmLmM6ODE4Cittc2dpZCAiUGF0Y2ggZmlsZSIKK21zZ3N0ciAiRmljaGVybyBkZSBwYXJjaGVzLiIKKworIzogZGlmZi5jOjEwNjkKK21zZ2lkICJFOTg6IENhbm5vdCByZWFkIGRpZmYgb3V0cHV0IgorbXNnc3RyICJFOTg6IG5vIHB1ZWRvIGxlZXIgbGEgc2FsaWRhIGRlIKtkaWZmuy4iCisKKyM6IGRpZmYuYzoxODE5Cittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IEVsIKtidWZmZXK7IGFjdHVhbCBubyBlc3ThIGVuIG1vZG8gq2RpZma7LiIKKworIzogZGlmZi5jOjE4MzEKK21zZ2lkICJFMTAwOiBObyBvdGhlciBidWZmZXIgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAwOiBOaW5n+m4gb3RybyCrYnVmZmVyuyBlc3ThIGVuIG1vZG8gq2RpZma7LiIKKworIzogZGlmZi5jOjE4MzkKK21zZ2lkICJFMTAxOiBNb3JlIHRoYW4gdHdvIGJ1ZmZlcnMgaW4gZGlmZiBtb2RlLCBkb24ndCBrbm93IHdoaWNoIG9uZSB0byB1c2UiCittc2dzdHIgIkUxMDE6IE3hcyBkZSBkb3Mgq2J1ZmZlcnO7IGVuIG1vZG8gq2RpZma7LCBubyBzZSBjdWFsIHVzYXIuIgorCisjOiBkaWZmLmM6MTg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAyOiBDYW4ndCBmaW5kIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxMDI6IE5vIHB1ZWRvIGVuY29udHJhciBlbCCrYnVmZmVyuyCrJXO7LiIKKworIzogZGlmZi5jOjE4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMzogQnVmZmVyIFwiJXNcIiBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAzOiBFbCCrYnVmZmVyuyCrJXO7IG5vIGVzdOEgZW4gbW9kbyCrZGlmZrsuIgorCisjOiBkaWdyYXBoLmM6MjE5OQorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiBFbCBj82RpZ28gZGUgZXNjYXBlIG5vIHNlIHBlcm1pdGUgZW4gdW4gZO1ncmFmby4iCisKKyM6IGRpZ3JhcGguYzoyMzg0Cittc2dpZCAiRTU0NDogS2V5bWFwIGZpbGUgbm90IGZvdW5kIgorbXNnc3RyICJFNTQ0OiBObyBlbmNvbnRy6SBlbCBmaWNoZXJvIKtrZXltYXC7LiIKKworIzogZGlncmFwaC5jOjI0MTEKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IKs6bG9hZGtleW1hcLsgZW4gdW4gZmljaGVybyBxdWUgbm8gY29udGllbmUgaW5zdHJ1Y2Npb25lcyBlamVjdXRhYmxlcy4iCisKKyM6IGVkaXQuYzo0MAorbXNnaWQgIiBLZXl3b3JkIGNvbXBsZXRpb24gKF5OXlApIgorbXNnc3RyICIgQ29tcGxldGFyIHBhbGFicmEgY2xhdmUgKF5OXlApLiIKKworIyAgY3RybF94X21vZGUgPT0gMCwgXlAvXk4gY29tcGwuCisjLiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4KKyM6IGVkaXQuYzo0MQorbXNnaWQgIiBeWCBtb2RlICheRV5ZXkxeXV5GXkleS15EXlZeTl5QKSIKK21zZ3N0ciAiIG1vZG8gXlggKF5FXlleTF5dXkZeSV5LXkReVl5OXlApLiIKKworIyAgU2Nyb2xsIGhhcyBpdCdzIG93biBtc2dzLCBpbiBpdCdzIHBsYWNlIHRoZXJlIGlzIHRoZSBtc2cgZm9yIGxvY2FsCisjICAqIGN0cmxfeF9tb2RlID0gMCAoZWcgY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCkgIC0tIEFjZXZlZG8KKyMuIFNjcm9sbCBoYXMgaXQncyBvd24gbXNncywgaW4gaXQncyBwbGFjZSB0aGVyZSBpcyB0aGUgbXNnIGZvciBsb2NhbAorIy4gKiBjdHJsX3hfbW9kZSA9IDAgKGVnIGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfTE9DQUwpICAtLSBBY2V2ZWRvCisjOiBlZGl0LmM6NDQKK21zZ2lkICIgS2V5d29yZCBMb2NhbCBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiIENvbXBsZXRhciBwYWxhYnJhIGNsYXZlIGxvY2FsICheTl5QKS4iCisKKyM6IGVkaXQuYzo0NQorbXNnaWQgIiBXaG9sZSBsaW5lIGNvbXBsZXRpb24gKF5MXk5eUCkiCittc2dzdHIgIiBDb21wbGV0YXIgdG9kYSBsYSBs7W5lYSAoXkxeTl5QKS4iCisKKyM6IGVkaXQuYzo0NgorbXNnaWQgIiBGaWxlIG5hbWUgY29tcGxldGlvbiAoXkZeTl5QKSIKK21zZ3N0ciAiIENvbXBsZXRhciBub21icmUgZGUgZmljaGVybyAoXkZeTl5QKS4iCisKKyM6IGVkaXQuYzo0NworbXNnaWQgIiBUYWcgY29tcGxldGlvbiAoXl1eTl5QKSIKK21zZ3N0ciAiIENvbXBsZXRhciCrdGFnuyAoXl1eTl5QKS4iCisKKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiBDb21wbGV0YXIgcGF0cvNuIGRlIHJ1dGEgKF5OXlApLiIKKworIzogZWRpdC5jOjQ5Cittc2dpZCAiIERlZmluaXRpb24gY29tcGxldGlvbiAoXkReTl5QKSIKK21zZ3N0ciAiIENvbXBsZXRhciBkZWZpbmljafNuICheRF5OXlApLiIKKworIzogZWRpdC5jOjUxCittc2dpZCAiIERpY3Rpb25hcnkgY29tcGxldGlvbiAoXkteTl5QKSIKK21zZ3N0ciAiIENvbXBsZXRhciBkaWNjaW9uYXJpbyAoXkteTl5QKS4iCisKKyM6IGVkaXQuYzo1MgorbXNnaWQgIiBUaGVzYXVydXMgY29tcGxldGlvbiAoXlReTl5QKSIKK21zZ3N0ciAiIENvbXBsZXRhciBkaWNjaW9uYXJpbyBkZSBzaW7zbmltb3MgKF5UXk5eUCkuIgorCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WXk5eUCkiCittc2dzdHIgIiBDb21wbGV0YXIgbO1uZWEgZGUgY29tYW5kb3MgKF5WXk5eUCkuIgorCisjOiBlZGl0LmM6NTYKK21zZ2lkICJIaXQgZW5kIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAiSGUgbGxlZ2FkbyBhbCBmaW5hbCBkZWwgcOFycmFmby4iCisKKyM6IGVkaXQuYzo5NjIKK21zZ2lkICIndGhlc2F1cnVzJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIkxhIG9wY2nzbiCrdGhlc2F1cnVzuyBlc3ThIHZhY+1hLiIKKworIzogZWRpdC5jOjExNjYKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJMYSBvcGNp824gq2RpY3Rpb25hcnm7IGVzdOEgdmFj7WEuIgorCisjOiBlZGl0LmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAiQnVzY2FuZG8gZW4gZWwgZGljY2lvbmFyaW86ICVzLiIKKworIzogZWRpdC5jOjIzNjgKK21zZ2lkICIgKGluc2VydCkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoaW5zZXJ0YXIpIKtTY3JvbGy7ICheRS9eWSkuIgorCisjOiBlZGl0LmM6MjM3MAorbXNnaWQgIiAocmVwbGFjZSkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAocmVlbXBsYXphcikgq1Njcm9sbLsgKF5FL15ZKS4iCisKKyM6IGVkaXQuYzoyNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nOiAlcyIKK21zZ3N0ciAiQnVzY2FuZG86ICVzLiIKKworIzogZWRpdC5jOjI3MTkKK21zZ2lkICJTY2FubmluZyB0YWdzLiIKK21zZ3N0ciAiQnVzY2FuZG8gq3RhZ3O7LiIKKworIzogZWRpdC5jOjMzODEKK21zZ2lkICIgQWRkaW5nIgorbXNnc3RyICJB8WFkaWVuZG8uIgorCisjICBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIyAgKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMgICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjM0MzAKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIEJ1c2NhbmRvLi4uIgorCisjOiBlZGl0LmM6MzQ4NgorbXNnaWQgIkJhY2sgYXQgb3JpZ2luYWwiCittc2dzdHIgIkRlIHZ1ZWx0YSBhbCBvcmlnaW5hbC4iCisKKyM6IGVkaXQuYzozNDkxCittc2dpZCAiV29yZCBmcm9tIG90aGVyIGxpbmUiCittc2dzdHIgIlBhbGFicmEgZGUgb3RyYSBs7W5lYS4iCisKKyM6IGVkaXQuYzozNDk2Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIkxhIPpuaWNhIGNvaW5jaWRlbmNpYS4iCisKKyM6IGVkaXQuYzozNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICJjb2luY2lkZW5jaWEgJWQgZGUgJWQuIgorCisjOiBlZGl0LmM6MzU1OAorIywgYy1mb3JtYXQKK21zZ2lkICJtYXRjaCAlZCIKK21zZ3N0ciAiY29pbmNpZGVuY2lhICVkLiIKKworIyAgU2tpcCBmdXJ0aGVyIGFyZ3VtZW50cyBidXQgZG8gY29udGludWUgdG8KKyMgICogc2VhcmNoIGZvciBhIHRyYWlsaW5nIGNvbW1hbmQuCisjLiBTa2lwIGZ1cnRoZXIgYXJndW1lbnRzIGJ1dCBkbyBjb250aW51ZSB0bworIy4gKiBzZWFyY2ggZm9yIGEgdHJhaWxpbmcgY29tbWFuZC4KKyM6IGV2YWwuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDY6IFVua25vd24gdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwNjogVmFyaWFibGUgZGVzY29ub2NpZGE6IKslc7suIgorCisjOiBldmFsLmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA3OiBNaXNzaW5nIGJyYWNlczogJXMiCittc2dzdHIgIkUxMDc6IEZhbHRhbiBsbGF2ZXM6ICVzLiIKKworIzogZXZhbC5jOjE0MzUgZXZhbC5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiBObyBleGlzdGUgdGFsIHZhcmlhYmxlOiCrJXO7LiIKKworIzogZXZhbC5jOjE3MDUKK21zZ2lkICJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciCittc2dzdHIgIkUxMDk6IEZhbHRhIKs6uyBkZXNwdelzIGRlIKs/uy4iCisKKyM6IGV2YWwuYzoyMzI3Cittc2dpZCAiRTExMDogTWlzc2luZyAnKSciCittc2dzdHIgIkUxMTA6IEZhbHRhIHVuIKspuy4iCisKKyM6IGV2YWwuYzoyMzg5Cittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6IEZhbHRhIHVuIKtduy4iCisKKyM6IGV2YWwuYzoyNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIgorbXNnc3RyICJFMTEyOiBGYWx0YSBlbCBub21icmUgZGUgbGEgb3BjafNuOiAlcy4iCisKKyM6IGV2YWwuYzoyNDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTM6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTExMzogT3BjafNuIGRlc2Nvbm9jaWRhOiAlcy4iCisKKyM6IGV2YWwuYzoyNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTQ6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE0OiBGYWx0YW4gY29taWxsYXM6ICVzLiIKKworIzogZXZhbC5jOjI2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNTogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTU6IEZhbHRhbiBjb21pbGxhczogJXMuIgorCisjOiBldmFsLmM6MzA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE2OiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJXMiCittc2dzdHIgIkUxMTY6IEFyZ3VtZW50b3Mgbm8gduFsaWRvcyBwYXJhIGxhIGZ1bmNp824gJXMuIgorCisjOiBldmFsLmM6MzA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE3OiBVbmtub3duIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExNzogRnVuY2nzbiBkZXNjb25vY2lkYTogJXMuIgorCisjOiBldmFsLmM6MzA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODogRGVtYXNpYWRvcyBhcmd1bWVudG9zIHBhcmEgbGEgZnVuY2nzbjogJXMuIgorCisjOiBldmFsLmM6MzA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE5OiBOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE5OiBBcmd1bWVudG9zIGluc3VmaWNpZW50ZXMgcGFyYSBsYSBmdW5jafNuOiAlcy4iCisKKyM6IGV2YWwuYzozMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjA6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0OiAlcyIKK21zZ3N0ciAiRTEyMDogVXNhbmRvIDxTSUQ+IGVuIHVuIGNvbnRleHRvIHF1ZSBubyBlcyBkZSCrc2NyaXB0uzogJXMuIgorCisjICAqIFllcyB0aGlzIGlzIHVnbHksIEkgZG9uJ3QgcGFydGljdWxhcmx5IGxpa2UgaXQgZWl0aGVyLiAgQnV0IGRvaW5nIGl0CisjICAqIHRoaXMgd2F5IGhhcyB0aGUgY29tcGVsbGluZyBhZHZhbnRhZ2UgdGhhdCB0cmFuc2xhdGlvbnMgbmVlZCBub3QgdG8KKyMgICogYmUgdG91Y2hlZCBhdCBhbGwuICBTZWUgYmVsb3cgd2hhdCAnb2snIGFuZCAneW5jJyBhcmUgdXNlZCBmb3IuCisjLgorIy4gKiBZZXMgdGhpcyBpcyB1Z2x5LCBJIGRvbid0IHBhcnRpY3VsYXJseSBsaWtlIGl0IGVpdGhlci4gIEJ1dCBkb2luZyBpdAorIy4gKiB0aGlzIHdheSBoYXMgdGhlIGNvbXBlbGxpbmcgYWR2YW50YWdlIHRoYXQgdHJhbnNsYXRpb25zIG5lZWQgbm90IHRvCisjLiAqIGJlIHRvdWNoZWQgYXQgYWxsLiAgU2VlIGJlbG93IHdoYXQgJ29rJyBhbmQgJ3luYycgYXJlIHVzZWQgZm9yLgorIy4KKyM6IGV2YWwuYzozNjg3IGd1aS5jOjQzODIgZ3VpX2d0ay5jOjIwNTkKK21zZ2lkICImT2siCittc2dzdHIgIiZPayIKKworIzogZXZhbC5jOjQyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQgbO1uZWFzOiAiCisKKyM6IGV2YWwuYzo1NDc3Cittc2dpZCAiIgorIiZPS1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImQWNlcHRhclxuIgorIiZDYW5jZWxhciIKKworIzogZXZhbC5jOjU1MTcKK21zZ2lkICJjYWxsZWQgaW5wdXRyZXN0b3JlKCkgbW9yZSBvZnRlbiB0aGFuIGlucHV0c2F2ZSgpIgorbXNnc3RyICJIZSBsbGFtYWRvIGEgq2lucHV0cmVzdG9yZSgpuyBt4XMgdmVjZXMgcXVlIGEgq2lucHV0c2F2ZSgpuy4iCisKKyM6IGV2YWwuYzo1OTc3Cittc2dpZCAiRTY1NTogVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgKGN5Y2xlPykiCittc2dzdHIgIkU2NTU6IEhheSBkZW1hc2lhZG9zIGVubGFjZXMgc3ltYvNsaWNvcyAov3JlZmVyZW5jaWEgY2lyY3VsYXI/KSIKKworIzogZXZhbC5jOjY2MDkKK21zZ2lkICJFMjQwOiBObyBjb25uZWN0aW9uIHRvIFZpbSBzZXJ2ZXIiCittc2dzdHIgIkUyNDA6IFNpbiBjb25leGnzbiBhbCBzZXJ2aWRvciBWaW0uIgorCisjOiBldmFsLmM6NjcwNgorbXNnaWQgIkUyNzc6IFVuYWJsZSB0byByZWFkIGEgc2VydmVyIHJlcGx5IgorbXNnc3RyICJFMjc3OiBJbmNhcGF6IGRlIGxlZXIgdW5hIHJlc3B1ZXN0YSBkZWwgc2Vydmlkb3IuIgorCisjOiBldmFsLmM6NjczNAorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODogSW5jYXBheiBkZSBlbnZpYXIgYWwgY2xpZW50ZS4iCisKKyM6IGV2YWwuYzo2NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiBJbmNhcGF6IGRlIGVudmlhciBhICVzLiIKKworIzogZXZhbC5jOjY4ODIKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIihObyB24WxpZG8pIgorCisjOiBldmFsLmM6ODA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgorbXNnc3RyICJFMTIxOiBWYXJpYWJsZSBzaW4gZGVmaW5pcjogJXMuIgorCisjOiBldmFsLmM6ODQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJFMjQ0OiChTm9tYnJlIGlsZWdhbCBwYXJhIHVuYSB2YXJpYWJsZSEgJXMiCisKKyM6IGV2YWwuYzo4Nzg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjI6IEZ1bmN0aW9uICVzIGFscmVhZHkgZXhpc3RzLCBhZGQgISB0byByZXBsYWNlIGl0IgorbXNnc3RyICJFMjI2OiBMYSBmdW5jafNuICVzIHlhIGV4aXN0ZSwgYfFhZGEgqyG7IHBhcmEgcmVlbXBsYXphcmxhLiIKKworIzogZXZhbC5jOjg4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMzogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEyMzogRnVuY2nzbiBzaW4gZGVmaW5pcjogJXMuIgorCisjOiBldmFsLmM6ODg3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6IEZhbHRhIKsouzogJXMuIgorCisjOiBldmFsLmM6ODkwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNTogQXJndW1lbnRvIGlsZWdhbDogJXMuIgorCisjOiBldmFsLmM6ODk4MgorbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiBGYWx0YSCrOmVuZGZ1bmN0aW9uuy4iCisKKyM6IGV2YWwuYzo5MDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjc6IENhbm5vdCByZWRlZmluZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTI3OiBObyBzZSBwdWVkZSByZWRlZmluaXIgbGEgZnVuY2nzbiAlczogZXN04SBlbiB1c28uIgorCisjOiBldmFsLmM6OTE1OQorbXNnaWQgIkUxMjk6IEZ1bmN0aW9uIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUxMjk6IFNlIHJlcXVpZXJlIGVsIG5vbWJyZSBkZSBsYSBmdW5jafNuLiIKKworIzogZXZhbC5jOjkyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODogRWwgbm9tYnJlIGRlIGxhIGZ1bmNp824gZGViZSBlbXBlemFyIGNvbiBtYXn6c2N1bGE6ICVzLiIKKworIzogZXZhbC5jOjk0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMDogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEzMDogRnVuY2nzbiBzaW4gZGVmaW5pcjogJXMuIgorCisjOiBldmFsLmM6OTQwNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTMxOiBDYW5ub3QgZGVsZXRlIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMzE6IE5vIHNlIHB1ZWRlIGVsaW1pbmFyIGxhIGZ1bmNp824gJXM6IGVzdOEgZW4gdXNvLiIKKworIzogZXZhbC5jOjk0NTUKK21zZ2lkICJFMTMyOiBGdW5jdGlvbiBjYWxsIGRlcHRoIGlzIGhpZ2hlciB0aGFuICdtYXhmdW5jZGVwdGgnIgorbXNnc3RyICIiCisiRTEzMjogTGEgcHJvZnVuZGlkYWQgZGUgbGEgbGxhbWFkYSBhIGxhIGZ1bmNp824gZXMgbWF5b3IgcXVlIKttYXhmdW5jZGVwdGi7LiIKKworIyAgYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV2YWwuYzo5NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbGxpbmcgJXMiCittc2dzdHIgIkxsYW1hbmRvIGEgJXMuIgorCisjOiBldmFsLmM6OTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhYm9ydGVkIgorbXNnc3RyICJIZSBhYm9ydGFkbyBhICVzLiIKKworIzogZXZhbC5jOjk1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgIiVzIGRldnVlbHZlICMlbGQuIgorCisjOiBldmFsLmM6OTU3OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICIlcyBkZXZ1ZWx2ZSCrJXO7LiIKKworIyAgYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV2YWwuYzo5NTk1IGV4X2NtZHMyLmM6MjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb250aW51aW5nIGluICVzIgorbXNnc3RyICJjb250aW51YW5kbyBlbiAlcy4iCisKKyM6IGV2YWwuYzo5NjIxCittc2dpZCAiRTEzMzogOnJldHVybiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxMzM6IKs6cmV0dXJuuyBubyBlc3ThIGRlbnRybyBkZSB1bmEgZnVuY2nzbi4iCisKKyM6IGV2YWwuYzo5OTUyCittc2dpZCAiIgorIlxuIgorIiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgdmFyaWFibGVzIGdsb2JhbGVzOlxuIgorCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iCisKKyM6IGV4X2NtZHMuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiPiAlZCwgSGV4ICUwNHgsIE9jdGFsICVvIgorbXNnc3RyICI+ICVkLCBIZXggJTA0eCwgT2N0YWwgJW8iCisKKyM6IGV4X2NtZHMuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiPiAlZCwgSGV4ICUwOHgsIE9jdGFsICVvIgorbXNnc3RyICI+ICVkLCBIZXggJTA4eCwgT2N0YWwgJW8iCisKKyM6IGV4X2NtZHMuYzo0MzAKK21zZ2lkICJFMTM0OiBNb3ZlIGxpbmVzIGludG8gdGhlbXNlbHZlcyIKK21zZ3N0ciAiRTEzNDogTW92aWVuZG8gbO1uZWFzIHNvYnJlIHPtIG1pc21hcy4iCisKKyM6IGV4X2NtZHMuYzo0OTkKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgIjEgbO1uZWEgbW92aWRhLiIKKworIzogZXhfY21kcy5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgbW92ZWQiCittc2dzdHIgIiVsZCBs7W5lYXMgbW92aWRhcy4iCisKKyM6IGV4X2NtZHMuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICIlbGQgbO1uZWFzIGZpbHRyYWRhcy4iCisKKyM6IGV4X2NtZHMuYzo5NTIKK21zZ2lkICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMTM1OiAqRmlsdHJvKiBMb3MgYXV0b2NvbWFuZG9zIG5vIGRlYmVuIGNhbWJpYXIgZWwgq2J1ZmZlcrsgZW4gY3Vyc28uIgorCisjOiBleF9jbWRzLmM6MTAzNworbXNnaWQgIltObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZV1cbiIKK21zZ3N0ciAiW05vIHNlIGhhIGVzY3JpdG8gYWwgZGlzY28gbmFkYSBkZXNkZSBlbCD6bHRpbW8gY2FtYmlvXVxuIgorCisjOiBleF9jbWRzLmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICIlc3ZpbWluZm86ICVzIGluIGxpbmU6ICIKK21zZ3N0ciAiJXN2aW1pbmZvOiAlcyBlbiBsYSBs7W5lYTogIgorCisjOiBleF9jbWRzLmM6MTI4OAorbXNnaWQgIkUxMzY6IHZpbWluZm86IFRvbyBtYW55IGVycm9ycywgc2tpcHBpbmcgcmVzdCBvZiBmaWxlIgorbXNnc3RyICJFMTM2OiB2aW1pbmZvOiBIYXkgZGVtYXNpYWRvcyBlcnJvcmVzLCBvbWl0aWVuZG8gZWwgcmVzdG8gZGVsIGZpY2hlcm8uIgorCisjOiBleF9jbWRzLmM6MTMyMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkaW5nIHZpbWluZm8gZmlsZSBcIiVzXCIlcyVzJXMiCittc2dzdHIgIkxleWVuZG8gZWwgZmljaGVybyCrdmltaW5mb7sgqyVzuyVzJXMlcyIKKworIzogZXhfY21kcy5jOjEzMjQKK21zZ2lkICIgaW5mbyIKK21zZ3N0ciAiIGluZm8iCisKKyM6IGV4X2NtZHMuYzoxMzI1Cittc2dpZCAiIG1hcmtzIgorbXNnc3RyICIgbWFyY2FzIgorCisjOiBleF9jbWRzLmM6MTMyNgorbXNnaWQgIiBGQUlMRUQiCittc2dzdHIgIiBGQUxM0yIKKworIzogZXhfY21kcy5jOjE0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IE5vIGhheSBwZXJtaXNvIGRlIGVzY3JpdHVyYSBwYXJhIGVsIGZpY2hlcm8gdmltaW5mbzogJXMiCisKKyM6IGV4X2NtZHMuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzg6IENhbid0IHdyaXRlIHZpbWluZm8gZmlsZSAlcyEiCittc2dzdHIgIkUxMzg6IKFObyBwdWVkbyBlc2NyaWJpciBlbCBmaWNoZXJvIHZpbWluZm8gJXMhIgorCisjOiBleF9jbWRzLmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiCittc2dzdHIgIkVzY3JpYmllbmRvIGZpY2hlcm8gdmltaW5mbyCrJXO7IgorCisjICBXcml0ZSB0aGUgaW5mbzoKKyMuIFdyaXRlIHRoZSBpbmZvOgorIzogZXhfY21kcy5jOjE2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIyBUaGlzIHZpbWluZm8gZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFZpbSAlcy5cbiIKK21zZ3N0ciAiIyBFc3RlIGZpY2hlcm8gdmltaW5mbyBmdWUgZ2VuZXJhZG8gcG9yIFZpbSAlcy5cbiIKKworIzogZXhfY21kcy5jOjE2NTEKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIFVzdGVkIHB1ZWRlIGVkaXRhcmxvLCChc29sbyBzaSB0aWVuZSBjdWlkYWRvIVxuIgorIlxuIgorCisjOiBleF9jbWRzLmM6MTY1MworbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjIFZhbG9yIGRlIKtlbmNvZGluZ7sgY3VhbmRvIHNlIGVzY3JpYmnzIGVzdGUgZmljaGVyb1xuIgorCisjOiBleF9jbWRzLmM6MTc1MgorbXNnaWQgIklsbGVnYWwgc3RhcnRpbmcgY2hhciIKK21zZ3N0ciAiQ2Fy4WN0ZXIgZGUgY29taWVuem8gaWxlZ2FsIgorCisjOiBleF9jbWRzLmM6MjA5NyBleF9jbWRzLmM6MjM2MiBleF9jbWRzMi5jOjc2MworbXNnaWQgIlNhdmUgQXMiCittc2dzdHIgIkd1YXJkYXIgY29tbyIKKworIyAgT3ZlcndyaXRpbmcgYSBmaWxlIHRoYXQgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIGlzIG5vdCBhCisjICAqIGdvb2QgaWRlYS4KKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjE0MAorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiBFbCBmaWNoZXJvIGVzdOEgY2FyZ2FkbyBlbiBvdHJvIKtidWZmZXK7LiIKKworIzogZXhfY21kcy5jOjIxNzQKK21zZ2lkICJXcml0ZSBwYXJ0aWFsIGZpbGU/IgorbXNnc3RyICK/RXNjcmliaXIgdW4gZmljaGVybyBwYXJjaWFsPyIKKworIzogZXhfY21kcy5jOjIxODEKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiRTE0MDogVXNlICEgcGFyYSBlc2NyaWJpciB1biCrYnVmZmVyuyBwYXJjaWFsLiIKKworIzogZXhfY21kcy5jOjIyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUgXCIlLipzXCI/IgorbXNnc3RyICK/RXNjcmliaXIgc29icmUgZWwgZmljaGVybyBleGlzdGVudGUgqyUuKnO7PyIKKworIzogZXhfY21kcy5jOjIzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MTogTm8gZmlsZSBuYW1lIGZvciBidWZmZXIgJWxkIgorbXNnc3RyICJFMTQxOiBObyBleGlzdGUgdW4gbm9tYnJlIGRlIGZpY2hlcm8gcGFyYSBlbCCrYnVmZmVyuyAlbGQiCisKKyM6IGV4X2NtZHMuYzoyNDA1Cittc2dpZCAiRTE0MjogRmlsZSBub3Qgd3JpdHRlbjogV3JpdGluZyBpcyBkaXNhYmxlZCBieSAnd3JpdGUnIG9wdGlvbiIKK21zZ3N0ciAiIgorIkUxNDI6IE5vIHNlIGhhIGVzY3JpdG8gZWwgZmljaGVybzogZXNjcml0dXJhIGRlc2FjdGl2YWRhIHBvciBsYSBvcGNp824gIgorIqt3cml0ZbsuIgorCisjOiBleF9jbWRzLmM6MjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IGZvciBcIiUuKnNcIi5cbiIKKyJEbyB5b3Ugd2lzaCB0byB3cml0ZSBhbnl3YXk/IgorbXNnc3RyICIiCisiU2UgaGEgYWN0aXZhZG8gbGEgb3BjafNuIKtyZWFkb25sebsgcGFyYSCrJS4qc7suXG4iCisiv1F1aWVyZSBlc2NyaWJpcmxvIGRlIHRvZGFzIGZvcm1hcz8iCisKKyM6IGV4X2NtZHMuYzoyNTk3Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICJFZGl0YXIgZmljaGVybyIKKworIzogZXhfY21kcy5jOjMyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MzogQXV0b2NvbW1hbmRzIHVuZXhwZWN0ZWRseSBkZWxldGVkIG5ldyBidWZmZXIgJXMiCittc2dzdHIgIiIKKyJFMTQzOiBMb3MgYXV0b2NvbWFuZG9zIGhhbiBlbGltaW5hZG8gaW5lc3BlcmFkYW1lbnRlIGVsIG51ZXZvIKtidWZmZXK7ICVzIgorCisjOiBleF9jbWRzLmM6MzMzOQorbXNnaWQgIkUxNDQ6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIDp6IgorbXNnc3RyICJFMTQ0OiBBcmd1bWVudG8gbm8gbnVt6XJpY28gcGFyYSCrOnq7LiIKKworIzogZXhfY21kcy5jOjM0MjQKK21zZ2lkICJFMTQ1OiBTaGVsbCBjb21tYW5kcyBub3QgYWxsb3dlZCBpbiBydmltIgorbXNnc3RyICJFMTQ1OiBSdmltIG5vIHBlcm1pdGUgYWNjZXNvIGFsIHByb2Nlc2Fkb3IgZGUgY29tYW5kb3MuIgorCisjOiBleF9jbWRzLmM6MzUzMQorbXNnaWQgIkUxNDY6IFJlZ3VsYXIgZXhwcmVzc2lvbnMgY2FuJ3QgYmUgZGVsaW1pdGVkIGJ5IGxldHRlcnMiCittc2dzdHIgIkUxNDY6IExhcyBleHByZXNpb25lcyByZWd1bGFyZXMgbm8gc2UgcHVlZGVuIGRlbGltaXRhciBjb24gbGV0cmFzLiIKKworIzogZXhfY21kcy5jOjM4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKK21zZ3N0ciAiv1JlZW1wbGF6YXIgY29uICVzICh5L24vYS9xL2wvXkUvXlkpPyIKKworIzogZXhfY21kcy5jOjQyNzAKK21zZ2lkICIoSW50ZXJydXB0ZWQpICIKK21zZ3N0ciAiKEludGVycnVtcGlkbykiCisKKyM6IGV4X2NtZHMuYzo0Mjc0Cittc2dpZCAiMSBzdWJzdGl0dXRpb24iCittc2dzdHIgIjEgc3VzdGl0dWNp824iCisKKyM6IGV4X2NtZHMuYzo0Mjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICIlbGQgc3VzdGl0dWNpb25lcyIKKworIzogZXhfY21kcy5jOjQyNzkKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIgZW4gMSBs7W5lYSIKKworIzogZXhfY21kcy5jOjQyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uICVsZCBsaW5lcyIKK21zZ3N0ciAiIGVuICVsZCBs7W5lYXMiCisKKyM6IGV4X2NtZHMuYzo0MzMyCittc2dpZCAiRTE0NzogQ2Fubm90IGRvIDpnbG9iYWwgcmVjdXJzaXZlIgorbXNnc3RyICJFMTQ3OiCrOmdsb2JhbLsgbm8gcHVlZGUgc2VyIHJlY3Vyc2l2by4iCisKKyM6IGV4X2NtZHMuYzo0MzY3Cittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IEZhbHRhIHVuYSBleHByZXNp824gcmVndWxhciBlbiBlbCBjb21hbmRvIGdsb2JhbC4iCisKKyM6IGV4X2NtZHMuYzo0NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIlBhdHLzbiBlbmNvbnRyYWRvIGVuIGNhZGEgbO1uZWE6ICVzIgorCisjOiBleF9jbWRzLmM6NDQ5NworbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMg2mx0aW1hIGNhZGVuYSBkZSBzdXN0aXR1Y2nzbjpcbiIKKyIkIgorCisjOiBleF9jbWRzLmM6NDU5OAorbXNnaWQgIkU0Nzg6IERvbid0IHBhbmljISIKK21zZ3N0ciAiRTQ3ODogoU5vIGVudHJlIGVuIHDhbmljbyEiCisKKyM6IGV4X2NtZHMuYzo0NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NjE6IFNvcnJ5LCBubyAnJXMnIGhlbHAgZm9yICVzIgorbXNnc3RyICJFMTQ5OiBMbyBzaWVudG8sIG5vIGhheSBheXVkYSCrJXO7IHBhcmEgJXMuIgorCisjOiBleF9jbWRzLmM6NDY1MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTQ5OiBTb3JyeSwgbm8gaGVscCBmb3IgJXMiCittc2dzdHIgIkUxNDk6IExvIHNpZW50bywgbm8gaGF5IGF5dWRhIHBhcmEgJXMiCisKKyM6IGV4X2NtZHMuYzo0Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAiTG8gc2llbnRvLCBubyBlbmN1ZW50cm8gZWwgZmljaGVybyBkZSBheXVkYSCrJXO7LiIKKworIzogZXhfY21kcy5jOjUxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MDogTm90IGEgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiRTE1MDogTm8gZXMgdW4gZGlyZWN0b3JpbzogJXMiCisKKyM6IGV4X2NtZHMuYzo1MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTI6IENhbm5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTUyOiBObyBzZSBwdWVkZSBhYnJpciAlcyBwYXJhIGVzY3JpdHVyYS4iCisKKyM6IGV4X2NtZHMuYzo1MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTM6IFVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTUzOiBJbmNhcGF6IGRlIGFicmlyICVzIHBhcmEgbGVjdHVyYSIKKworIzogZXhfY21kcy5jOjUzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY3MDogTWl4IG9mIGhlbHAgZmlsZSBlbmNvZGluZ3Mgd2l0aGluIGEgbGFuZ3VhZ2U6ICVzIgorbXNnc3RyICIiCisiRTY3MDogTWV6Y2xhIGRlIGNvZGlmaWNhY2lvbmVzIGRlIGZpY2hlcm9zIGRlIGF5dWRhIGRlbnRybyBkZSB1biBsZW5ndWFqZTogJXMiCisKKyM6IGV4X2NtZHMuYzo1NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTQ6IER1cGxpY2F0ZSB0YWcgXCIlc1wiIGluIGZpbGUgJXMiCittc2dzdHIgIkUxNTQ6IFRhZyCrJXO7IGR1cGxpY2FkYSBlbiBlbCBmaWNoZXJvICVzIgorCisjOiBleF9jbWRzLmM6NTU1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTYwOiBVbmtub3duIHNpZ24gY29tbWFuZDogJXMiCittc2dzdHIgIkUxNjA6IENvbWFuZG8gZGVzY29ub2NpZG8gZGUgc2lnbm86ICVzIgorCisjOiBleF9jbWRzLmM6NTU3NworbXNnaWQgIkUxNTY6IE1pc3Npbmcgc2lnbiBuYW1lIgorbXNnc3RyICJFMTU2OiBGYWx0YSBlbCBub21icmUgZGVsIHNpZ25vLiIKKworIzogZXhfY21kcy5jOjU2MjMKK21zZ2lkICJFNjEyOiBUb28gbWFueSBzaWducyBkZWZpbmVkIgorbXNnc3RyICJFNjEyOiBEZW1hc2lhZG9zIHNpZ25vcyBkZWZpbmlkb3MuIgorCisjOiBleF9jbWRzLmM6NTY5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM5OiBJbnZhbGlkIHNpZ24gdGV4dDogJXMiCittc2dzdHIgIkUyMzk6IFRleHRvIGRlIHNpZ25vIG5vIHbhbGlkbzogJXMiCisKKyM6IGV4X2NtZHMuYzo1NzIyIGV4X2NtZHMuYzo1OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTU6IFVua25vd24gc2lnbjogJXMiCittc2dzdHIgIkUxNTU6IFNpZ25vIGRlc2Nvbm9jaWRhOiAlcyIKKworIzogZXhfY21kcy5jOjU3NzEKK21zZ2lkICJFMTU5OiBNaXNzaW5nIHNpZ24gbnVtYmVyIgorbXNnc3RyICJFMTU5OiBGYWx0YSBlbCBu+m1lcm8gZGVsIHNpZ25vLiIKKworIzogZXhfY21kcy5jOjU4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1ODogSW52YWxpZCBidWZmZXIgbmFtZTogJXMiCittc2dzdHIgIkUxNTk6IEVsIG5vbWJyZSBkZWwgq2J1ZmZlcrsgbm8gZXMgduFsaWRvOiAlcyIKKworIzogZXhfY21kcy5jOjU4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NzogSW52YWxpZCBzaWduIElEOiAlbGQiCittc2dzdHIgIkUxNTc6IEVsIGlkIGRlbCBzaWdubyBubyBlcyB24WxpZG86ICVsZCIKKworIzogZXhfY21kcy5jOjU5NjIKK21zZ2lkICIgKE5PVCBGT1VORCkiCittc2dzdHIgIiAoTk8gRU5DT05UUkFETykiCisKKyM6IGV4X2NtZHMuYzo1OTY0Cittc2dpZCAiIChub3Qgc3VwcG9ydGVkKSIKK21zZ3N0ciAiIChubyBoYXkgYXBveW8gcGFyYSBsYSBmdW5jafNuIHBlZGlkYSkiCisKKyM6IGV4X2NtZHMuYzo2MDYzCittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJbU3VwcmltaWRvXSIKKworIzogZXhfY21kczIuYzo5MgorbXNnaWQgIkVudGVyaW5nIERlYnVnIG1vZGUuICBUeXBlIFwiY29udFwiIHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiRW50cmFuZG8gYWwgbW9kbyBkZSBkZXB1cmFjafNuLiBPcHJpbWEgXCJjb250XCIgcGFyYSBjb250aW51YXIuIgorCisjOiBleF9jbWRzMi5jOjk2IGV4X2RvY21kLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiAlcyIKK21zZ3N0ciAibO1uZWEgJWxkOiAlcyIKKworIzogZXhfY21kczIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjbWQ6ICVzIgorbXNnc3RyICJjbWQ6ICVzIgorCisjOiBleF9jbWRzMi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIgorbXNnc3RyICKrQnJlYWtwb2ludLsgZW4gqyVzJXO7IGztbmVhICVsZCIKKworIzogZXhfY21kczIuYzo1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MTogQnJlYWtwb2ludCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMTYxOiBObyBzZSBoYSBlbmNvbnRyYWRvIGVsIKticmVha3BvaW50uzogJXMiCisKKyM6IGV4X2NtZHMyLmM6NTY2Cittc2dpZCAiTm8gYnJlYWtwb2ludHMgZGVmaW5lZCIKK21zZ3N0ciAiTm8gaGF5IKticmVha3BvaW50c7sgZGVmaW5pZG9zLiIKKworIzogZXhfY21kczIuYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgIGztbmVhICVsZCIKKworIzogZXhfY21kczIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZSBjaGFuZ2VzIHRvIFwiJS4qc1wiPyIKK21zZ3N0ciAiv0d1YXJkYXIgbG9zIGNhbWJpb3MgZW4gqyUuKnO7PyIKKworIzogZXhfY21kczIuYzo3ODggZXhfZG9jbWQuYzo5Mzc4Cittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIlNpbiB07XR1bG8iCisKKyM6IGV4X2NtZHMyLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiBObyBzZSBoYSBncmFiYWRvIG5hZGEgZGVzZGUgZWwg+mx0aW1vIGNhbWJpbyBlbiBlbCBidWZmZXIgqyVzuyIKKworIzogZXhfY21kczIuYzo5ODQKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIiIKKyJBZHZlcnRlbmNpYTogc2UgaGEgZW50cmFkbyBlbiBvdHJvIKtidWZmZXK7IGVuIGZvcm1hIGluZXNwZXJhZGEgKHZlcmlmaXF1ZSAiCisibG9zIGF1dG9jb21hbmRvcykuIgorCisjOiBleF9jbWRzMi5jOjEzODcKK21zZ2lkICJFMTYzOiBUaGVyZSBpcyBvbmx5IG9uZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNjM6IEhheSBz82xvIHVuIGZpY2hlcm8gcXVlIGVkaXRhci4iCisKKyM6IGV4X2NtZHMyLmM6MTM4OQorbXNnaWQgIkUxNjQ6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiRTE2NDogTm8gc2UgcHVlZGUgaXIgYW50ZXMgZGVsIHByaW1lciBmaWNoZXJvLiIKKworIzogZXhfY21kczIuYzoxMzkxCittc2dpZCAiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiCittc2dzdHIgIkUxNjU6IE5vIHNlIHB1ZWRlIGlyIG3hcyBhbGzhIGRlbCD6bHRpbW8gZmljaGVyby4iCisKKyM6IGV4X2NtZHMyLmM6MTgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY2OiBjb21waWxlciBub3Qgc3VwcG9ydGVkOiAlcyIKK21zZ3N0ciAiRTY2NjogRWwgY29tcGlsYWRvciBubyB0aWVuZSBhcG95byBlbiBlc3RhIHZlcnNp8246ICVzIgorCisjOiBleF9jbWRzMi5jOjE4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIgaW4gXCIlc1wiIgorbXNnc3RyICJCdXNjYW5kbyCrJXO7IGVuIKslc7suIgorCisjOiBleF9jbWRzMi5jOjE5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIkJ1c2NhbmRvIKslc7suIgorCisjOiBleF9jbWRzMi5jOjE5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGZvdW5kIGluICdydW50aW1lcGF0aCc6IFwiJXNcIiIKK21zZ3N0ciAiTm8gc2UgaGEgZW5jb250cmFkbyBlbiCrcnVudGltZXBhdGi7OiCrJXO7IgorCisjOiBleF9jbWRzMi5jOjE5NzQKK21zZ2lkICJTb3VyY2UgVmltIHNjcmlwdCIKK21zZ3N0ciAiRWplY3V0ZSBzY3JpcHQgZGUgVmltLiIKKworIzogZXhfY21kczIuYzoyMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZWplY3V0YXIgdW4gZGlyZWN0b3JpbzogqyVzuy4iCisKKyM6IGV4X2NtZHMyLmM6MjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBlamVjdXRhciCrJXO7LiIKKworIzogZXhfY21kczIuYzoyMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAibO1uZWEgJWxkOiBubyBzZSBwdWRvIGVqZWN1dGFyIKslc7suIgorCisjOiBleF9jbWRzMi5jOjIyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJlamVjdXRhbmRvIKslc7suIgorCisjOiBleF9jbWRzMi5jOjIyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IHNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAibO1uZWEgJWxkOiBlamVjdXRhbmRvIKslc7suIgorCisjOiBleF9jbWRzMi5jOjIzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc291cmNpbmcgJXMiCittc2dzdHIgIkxhIGVqZWN1Y2nzbiBkZSCrJXO7IGhhIHRlcm1pbmFkby4iCisKKyM6IGV4X2NtZHMyLmM6MjcwNworbXNnaWQgIlcxNTogV2FybmluZzogV3JvbmcgbGluZSBzZXBhcmF0b3IsIF5NIG1heSBiZSBtaXNzaW5nIgorbXNnc3RyICJXMTU6IEFkdmVydGVuY2lhOiBzZXBhcmFkb3IgZGUgbO1uZWEgZXF1aXZvY2FkbywgcHVlZGUgcXVlIGZhbHRlIF5NIgorCisjOiBleF9jbWRzMi5jOjI3NTYKK21zZ2lkICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY3OiBIYSB1c2FkbyCrOnNjcmlwdGVuY29kaW5nuyBmdWVyYSBkZSB1biBmaWNoZXJvIGRlIGluc3RydWNjaW9uZXMgZWplY3V0YWJsZXMuIgorCisjOiBleF9jbWRzMi5jOjI3ODkKK21zZ2lkICJFMTY4OiA6ZmluaXNoIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2ODogSGEgdXNhZG8gqzpmaW5pc2i7IGZ1ZXJhIGRlIHVuIGZpY2hlcm8gZGUgaW5zdHJ1Y2Npb25lcyBlamVjdXRhYmxlcy4iCisKKyM6IGV4X2NtZHMyLmM6MzIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYWdlICVkIgorbXNnc3RyICJQ4WdpbmEgJWQiCisKKyM6IGV4X2NtZHMyLmM6MzM5NAorbXNnaWQgIk5vIHRleHQgdG8gYmUgcHJpbnRlZCIKK21zZ3N0ciAiTm8gaGF5IHRleHRvIHF1ZSBpbXByaW1pci4iCisKKyM6IGV4X2NtZHMyLmM6MzQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyBwYWdlICVkICglZCUlKSIKK21zZ3N0ciAiSW1wcmltaWVuZG8gbGEgcOFnaW5hICVkICglZCUlKS4iCisKKyM6IGV4X2NtZHMyLmM6MzQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgQ29weSAlZCBvZiAlZCIKK21zZ3N0ciAiQ29waWEgJWQgZGUgJWQiCisKKyM6IGV4X2NtZHMyLmM6MzU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGVkOiAlcyIKK21zZ3N0ciAiSW1wcmVzbzogJXMuIgorCisjOiBleF9jbWRzMi5jOjM1NDkKK21zZ2lkICJQcmludGluZyBhYm9ydGVkIgorbXNnc3RyICJJbXByZXNp824gYWJvcnRhZGEuIgorCisjOiBleF9jbWRzMi5jOjM5MTQKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IEVycm9yIGVzY3JpYmllbmRvIGFsIGZpY2hlcm8gUG9zdFNjcmlwdCBkZSBzYWxpZGEuIgorCisjOiBleF9jbWRzMi5jOjQxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyNDogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogTm8gc2UgcHVlZGUgYWJyaXIgZWwgZmljaGVybyCrJXO7LiIKKworIzogZXhfY21kczIuYzo0MTk5IGV4X2NtZHMyLmM6NDgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6IE5vIHNlIHB1ZWRlIGxlZXIgZWwgZmljaGVybyBkZSByZWN1cnNvcyBkZSBQb3N0U2NyaXB0IKslc7suIgorCisjOiBleF9jbWRzMi5jOjQyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxODogZmlsZSBcIiVzXCIgaXMgbm90IGEgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE4OiBFbCBmaWNoZXJvIFwiJXNcIiBubyBlcyB1biBmaWNoZXJvIGRlIHJlY3Vyc29zIFBvc3RTY3JpcHQuIgorCisjOiBleF9jbWRzMi5jOjQyMjIgZXhfY21kczIuYzo0MjQyIGV4X2NtZHMyLmM6NDI1NyBleF9jbWRzMi5jOjQyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOTogZmlsZSBcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIKK21zZ3N0ciAiRTYxOTogRWwgZmljaGVybyCrJXO7IG5vIGVzIHVuIHJlY3Vyc28gUG9zdFNjcmlwdCBxdWUgcHVlZGEgdXNhci4iCisKKyM6IGV4X2NtZHMyLmM6NDMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjIxOiBcIiVzXCIgcmVzb3VyY2UgZmlsZSBoYXMgd3JvbmcgdmVyc2lvbiIKK21zZ3N0ciAiRTYyMTogRWwgZmljaGVybyBkZSByZWN1cnNvcyCrJXO7IHRpZW5lIGxhIHZlcnNp824gZXF1aXZvY2FkYS4iCisKKyM6IGV4X2NtZHMyLmM6NDc3NgorbXNnaWQgIkUzMjQ6IENhbid0IG9wZW4gUG9zdFNjcmlwdCBvdXRwdXQgZmlsZSIKK21zZ3N0ciAiRTMyNDogTm8gcHVlZG8gYWJyaXIgZWwgZmljaGVybyBQb3N0U2NyaXB0IGRlIHNhbGlkYS4iCisKKyM6IGV4X2NtZHMyLmM6NDgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU2OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU2OiBObyBwdWVkbyBhYnJpciBlbCBmaWNoZXJvIKslc7suIgorCisjOiBleF9jbWRzMi5jOjQ5MjgKK21zZ2lkICJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcInByb2xvZy5wc1wiIgorbXNnc3RyICIiCisiRTQ1NjogTm8gZW5jdWVudHJvIGVsIGZpY2hlcm8gZGUgcmVjdXJzb3MgUG9zdFNjcmlwdCCrcHJvbG9nLnBzuy4iCisKKyM6IGV4X2NtZHMyLmM6NDk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzLnBzXCIiCittc2dzdHIgIkU0NTY6IE5vIGhhbGxvIGVsIGZpY2hlcm8gZGUgcmVjdXJzb3MgUG9zdFNjcmlwdCCrJXMucHO7LiIKKworIzogZXhfY21kczIuYzo0OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjA6IFVuYWJsZSB0byBjb252ZXJ0IGZyb20gbXVsdGktYnl0ZSB0byBcIiVzXCIgZW5jb2RpbmciCittc2dzdHIgIkU2MjA6IE5vIHB1ZWRvIGNvbnZlcnRpciBkZSCrbXVsdGktYnl0ZbsgYSBsYSBjb2RpZmljYWNp824gXCIlc1wiLiIKKworIzogZXhfY21kczIuYzo1MTAyCittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICJFbnbtYW5kbyBhIGxhIGltcHJlc29yYS4uLiIKKworIzogZXhfY21kczIuYzo1MTA2Cittc2dpZCAiRTM2NTogRmFpbGVkIHRvIHByaW50IFBvc3RTY3JpcHQgZmlsZSIKK21zZ3N0ciAiRTM2NTogTm8gcHVkZSBpbXByaW1pciBlbCBmaWNoZXJvIFBvc3RTY3JpcHQuIgorCisjOiBleF9jbWRzMi5jOjUxMDgKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIlRhcmVhIGRlIGltcHJlc2nzbiBlbnbtYWRhLiIKKworIzogZXhfY21kczIuYzo1NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICJJZGlvbWEgYWN0dWFsIKslc7s6IKslc7suIgorCisjOiBleF9jbWRzMi5jOjU2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6IE5vIHNlIHB1ZWRlIGVzdGFibGVjZXIgbGEgb3BjafNuIGRlbCBpZGlvbWEgYSCrJXO7LiIKKworIzogZXhfZG9jbWQuYzo1MjUKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAiRW50cmFuZG8gYWwgbW9kbyBFeC4gRXNjcmliYSCrdmlzdWFsuyBwYXJhIGlyIGFsIG1vZG8gTm9ybWFsLiIKKworIyAgbXVzdCBiZSBhdCBFT0YKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjU2MQorbXNnaWQgIkU1MDE6IEF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJFNTAxOiBFc3RveSBhbCBmaW5hbCBkZWwgZmljaGVyby4iCisKKyM6IGV4X2RvY21kLmM6NjY5Cittc2dpZCAiRTE2OTogQ29tbWFuZCB0b28gcmVjdXJzaXZlIgorbXNnc3RyICJFMTY5OiBFbCBjb21hbmRvIHJlY3VycmUgZXhjZXNpdmFtZW50ZS4iCisKKyM6IGV4X2RvY21kLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA1OiBFeGNlcHRpb24gbm90IGNhdWdodDogJXMiCittc2dzdHIgIkU2MDU6IExhIGV4Y2VwY2nzbiAlcyBubyBzZSBhdHJhcPMuIgorCisjOiBleF9kb2NtZC5jOjEzMTcKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICJGaW4gZGVsIGZpY2hlcm8gZGUgaW5zdHJjdWNjaW9uZXMgZWplY3V0YWJsZXMuIgorCisjOiBleF9kb2NtZC5jOjEzMTgKK21zZ2lkICJFbmQgb2YgZnVuY3Rpb24iCittc2dzdHIgIkZpbiBkZSBsYSBmdW5jafNuLiIKKworIzogZXhfZG9jbWQuYzoxOTA3Cittc2dpZCAiRTQ2NDogQW1iaWd1b3VzIHVzZSBvZiB1c2VyLWRlZmluZWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ2NDogVXNvIGFtYmlndW8gZGUgdW4gY29tYW5kbyBkZWZpbmlkbyBwb3IgZWwgdXN1YXJpby4iCisKKyM6IGV4X2RvY21kLmM6MTkyMQorbXNnaWQgIkU0OTI6IE5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAiRTM3MTogTm8gZXMgdW4gY29tYW5kbyBkZWwgZWRpdG9yLiIKKworIzogZXhfZG9jbWQuYzoyMDI4Cittc2dpZCAiRTQ5MzogQmFja3dhcmRzIHJhbmdlIGdpdmVuIgorbXNnc3RyICJFNDkzOiBNZSBoYSBkYWRvIHVuIHJhbmdvIGludmVydGlkby4iCisKKyM6IGV4X2RvY21kLmM6MjAzNworbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiwgT0sgdG8gc3dhcCIKK21zZ3N0ciAiTWUgaGEgZGFkbyB1biByYW5nbyBpbnZlcnRpZG8sIL9lc3ThIGJpZW4gaW50ZXJjYW1iaWFybG8/IgorCisjOiBleF9kb2NtZC5jOjIxNjAKK21zZ2lkICJFNDk0OiBVc2UgdyBvciB3Pj4iCittc2dzdHIgIkU0OTQ6IFVzZSCrd7sgbyCrdz4+uy4iCisKKyM6IGV4X2RvY21kLmM6Mzc4NgorbXNnaWQgIkUzMTk6IFNvcnJ5LCB0aGUgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTMxOTogTG8gc2llbnRvLCBlbCBjb21hbmRvIG5vIGVzdOEgZGlzcG9uaWJsZSBlbiBlc3RhIHZlcnNp824uIgorCisjOiBleF9kb2NtZC5jOjM5ODkKK21zZ2lkICJFMTcyOiBPbmx5IG9uZSBmaWxlIG5hbWUgYWxsb3dlZCIKK21zZ3N0ciAiRTE3MjogU/NsbyBzZSBwZXJtaXRlIHVuIG5vbWJyZSBkZSBmaWNoZXJvLiIKKworIzogZXhfZG9jbWQuYzo0NTY5Cittc2dpZCAiMSBtb3JlIGZpbGUgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIKK21zZ3N0ciAiVW4gZmljaGVybyBt4XMgcGFyYSBlZGl0YXIuIL9UZXJtaW5vIGRlIHRvZGFzIGZvcm1hcz8iCisKKyM6IGV4X2RvY21kLmM6NDU3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBtb3JlIGZpbGVzIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIkhheSAlZCBmaWNoZXJvcyBt4XMgZW4gZWRpY2nzbi4gv1Rlcm1pbm8gZGUgdG9kYXMgZm9ybWFzPyIKKworIzogZXhfZG9jbWQuYzo0NTc5Cittc2dpZCAiRTE3MzogMSBtb3JlIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE3MzogVW4gZmljaGVybyBt4XMgcGFyYSBlZGl0YXIuIgorCisjOiBleF9kb2NtZC5jOjQ1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3MzogJWxkIG1vcmUgZmlsZXMgdG8gZWRpdCIKK21zZ3N0ciAiRTE3MzogSGF5ICVsZCBmaWNoZXJvcyBlbiBlZGljafNuLiIKKworIzogZXhfZG9jbWQuYzo0Njc2Cittc2dpZCAiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogYWRkICEgdG8gcmVwbGFjZSBpdCIKK21zZ3N0ciAiRTE3NDogRWwgY29tYW5kbyB5YSBleGlzdGUuIEHxYWRhIKshuyBwYXJhIHJlZW1wbGF6YXJsby4iCisKKyM6IGV4X2RvY21kLmM6NDc4NworbXNnaWQgIiIKKyJcbiIKKyIgICAgTmFtZSAgICAgICAgQXJncyBSYW5nZSBDb21wbGV0ZSAgRGVmaW5pdGlvbiIKK21zZ3N0ciAiIgorIlxuIgorIiAgICBOb21icmUgICAgICBBcmdzIFJhbmdvIENvbXBsZXRhciAgRGVmaW5pY2nzbiIKKworIzogZXhfZG9jbWQuYzo0ODc2Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICJObyBzZSBoYW4gZW5jb250cmFkbyBjb21hbmRvcyBkZWZpbmlkb3MgcG9yIGVsIHVzdWFyaW8iCisKKyM6IGV4X2RvY21kLmM6NDkwOAorbXNnaWQgIkUxNzU6IE5vIGF0dHJpYnV0ZSBzcGVjaWZpZWQiCittc2dzdHIgIkUxNzU6IE5vIHNlIGhhIGVzcGVjaWZpY2FkbyBlbCBhdHJpYnV0by4iCisKKyM6IGV4X2RvY21kLmM6NDk2MAorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3NjogRWwgbvptZXJvIGRlIGFyZ3VtZW50b3Mgbm8gZXMgduFsaWRvLiIKKworIzogZXhfZG9jbWQuYzo0OTc1Cittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3NzogRWwgcmVjdWVudG8gbm8gc2UgcHVlZGUgZXNwZWNpZmljYXIgZG9zIHZlY2VzLiIKKworIzogZXhfZG9jbWQuYzo0OTg1Cittc2dpZCAiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIKK21zZ3N0ciAiRTE3ODogRWwgdmFsb3IgcHJlZGV0ZXJtaW5hZG8gcGFyYSBlbCByZWN1ZW50byBubyBlcyB24WxpZG8uIgorCisjOiBleF9kb2NtZC5jOjUwMTYKK21zZ2lkICJFMTc5OiBhcmd1bWVudCByZXF1aXJlZCBmb3IgY29tcGxldGUiCittc2dzdHIgIkUxNzk6IHNlIG5lY2VzaXRhIHVuIGFyZ3VtZW50byBwYXJhIGNvbXBsZXRhci4iCisKKyM6IGV4X2RvY21kLmM6NTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgwOiBJbnZhbGlkIGNvbXBsZXRlIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTE4MDogRWwgdmFsb3IgcGFyYSBjb21wbGV0YXIgbm8gZXMgduFsaWRvOiAlcy4iCisKKyM6IGV4X2RvY21kLmM6NTA1NworbXNnaWQgIkU0Njg6IENvbXBsZXRpb24gYXJndW1lbnQgb25seSBhbGxvd2VkIGZvciBjdXN0b20gY29tcGxldGlvbiIKK21zZ3N0ciAiIgorIkU0Njg6IEVsIGFyZ3VtZW50byBkZSBmaW5hbGl6YWNp824gc29sbyBzZSBwZXJtaXRlIGVuIGZpbmFsaXphY2lvbmVzICIKKyJkZWZpbmlkYXMgcG9yIGVsIHVzdWFyaW8uIgorCisjOiBleF9kb2NtZC5jOjUwNjMKK21zZ2lkICJFNDY3OiBDdXN0b20gY29tcGxldGlvbiByZXF1aXJlcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IgorbXNnc3RyICIiCisiRTQ2NzogTGFzIGZpbmFsaXphdGluZXMgZGVmaW5pZGFkIHBvciBlbCB1c3VhcmlvIHJlcXVpZXJlbiBkZSB1biBhcmd1bWVudG8gIgorImRlIGZ1bmNp824uIgorCisjOiBleF9kb2NtZC5jOjUwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MTogSW52YWxpZCBhdHRyaWJ1dGU6ICVzIgorbXNnc3RyICJFMTgxOiBFbCBhdHJpYnV0byBubyBlcyB24WxpZG86ICVzIgorCisjOiBleF9kb2NtZC5jOjUxMTcKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4MjogRWwgbm9tYnJlIGRlIGNvbWFuZG8gbm8gZXMgduFsaWRvLiIKKworIzogZXhfZG9jbWQuYzo1MTMyCittc2dpZCAiRTE4MzogVXNlciBkZWZpbmVkIGNvbW1hbmRzIG11c3Qgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIgorbXNnc3RyICIiCisiRTE4MzogTG9zIGNvbWFuZG9zIGRlZmluaWRvcyBwb3IgZWwgdXN1YXJpbyBkZWJlbiBjb21lbnphciBjb24gdW5hIGxldHJhICIKKyJtYXn6c2N1bGEuIgorCisjOiBleF9kb2NtZC5jOjUyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NDogTm8gc3VjaCB1c2VyLWRlZmluZWQgY29tbWFuZDogJXMiCittc2dzdHIgIkUxODQ6IE5vIGV4aXN0ZSB0YWwgY29tYW5kbyBkZWZpbmlkbyBwb3IgZWwgdXN1YXJpbzogJXMiCisKKyM6IGV4X2RvY21kLmM6NTY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg1OiBDYW5ub3QgZmluZCBjb2xvciBzY2hlbWUgJXMiCittc2dzdHIgIkUxODU6IE5vIHNlIHB1ZWRlIGVuY29udHJhciBlbCBlc3F1ZW1hIGRlIGNvbG9yZXMgJXMiCisKKyM6IGV4X2RvY21kLmM6NTY3MgorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICKhU2FsdWRvcywgdXN1YXJpbyBkZSBWaW0hIgorCisjOiBleF9kb2NtZC5jOjYzODkKK21zZ2lkICJFZGl0IEZpbGUgaW4gbmV3IHdpbmRvdyIKK21zZ3N0ciAiRWRpdGFyIGZpY2hlcm8gZW4gdW5hIHZlbnRhbmEgbnVldmEiCisKKyM6IGV4X2RvY21kLmM6NjY4NAorbXNnaWQgIk5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiTm8gaGF5IGZpY2hlcm8gZGUgaW50ZXJjYW1iaW8iCisKKyM6IGV4X2RvY21kLmM6Njc4OAorbXNnaWQgIkFwcGVuZCBGaWxlIgorbXNnc3RyICJB8WFkaXIgZmljaGVybyIKKworIzogZXhfZG9jbWQuYzo2ODUyCittc2dpZCAiRTE4NjogTm8gcHJldmlvdXMgZGlyZWN0b3J5IgorbXNnc3RyICJFMTg2OiBObyBoYXkgZGlyZWN0b3JpbyBwcmV2aW8uIgorCisjOiBleF9kb2NtZC5jOjY5MzQKK21zZ2lkICJFMTg3OiBVbmtub3duIgorbXNnc3RyICJFMTg3OiBEZXNjb25vY2lkby4iCisKKyM6IGV4X2RvY21kLmM6NzAxOQorbXNnaWQgIkU0NjU6IDp3aW5zaXplIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY1OiCrOndpbnNpemW7IHJlcXVpZXJlIGRlIGRvcyBhcmd1bWVudG9zIG51belyaWNvcy4iCisKKyM6IGV4X2RvY21kLmM6NzA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIlBvc2ljafNuIGRlIGxhIHZlbnRhbmE6IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NzA4MAorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisiRTE4ODogTGEgb2J0ZW5jafNuIGRlIGxhIHBvc2ljafNuIGRlIGxhIHZlbnRhbmEgbm8gZXN04SBpbXBsZW1lbnRhZGEgZW4gZXN0YSAiCisicGxhdGFmb3JtYS4iCisKKyM6IGV4X2RvY21kLmM6NzA5MAorbXNnaWQgIkU0NjY6IDp3aW5wb3MgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiCittc2dzdHIgIkU0NjY6IKs6d2lucG9zuyByZXF1aXJlIGRlIGRvcyBhcmd1bWVudG9zIG51belyaWNvcy4iCisKKyM6IGV4X2RvY21kLmM6NzM2OAorbXNnaWQgIlNhdmUgUmVkaXJlY3Rpb24iCittc2dzdHIgIkd1YXJkYXIgcmVkaXJlY2Np824uIgorCisjOiBleF9kb2NtZC5jOjc1NTgKK21zZ2lkICJTYXZlIFZpZXciCittc2dzdHIgIkd1YXJkYXIgdmlzdGEiCisKKyM6IGV4X2RvY21kLmM6NzU1OQorbXNnaWQgIlNhdmUgU2Vzc2lvbiIKK21zZ3N0ciAiR3VhcmRhciBzZXNp824iCisKKyM6IGV4X2RvY21kLmM6NzU2MQorbXNnaWQgIlNhdmUgU2V0dXAiCittc2dzdHIgIkd1YXJkYXIgY29uZmlndXJhY2nzbiIKKworIzogZXhfZG9jbWQuYzo3NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODk6IFwiJXNcIiBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTE4OTogXCIlc1wiIHlhIGV4aXN0ZSAoYfFhZGEgISBwYXJhIHNvYnJlZXNjcmliaXIuKSIKKworIzogZXhfZG9jbWQuYzo3NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTA6IENhbm5vdCBvcGVuIFwiJXNcIiBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE5MDogTm8gc2UgcHVlZGUgYWJyaXIgqyVzuyBwYXJhIGVzY3JpdHVyYSIKKworIyAgc2V0IG1hcmsKKyMuIHNldCBtYXJrCisjOiBleF9kb2NtZC5jOjc3NDIKK21zZ2lkICJFMTkxOiBBcmd1bWVudCBtdXN0IGJlIGEgbGV0dGVyIG9yIGZvcndhcmQvYmFja3dhcmQgcXVvdGUiCittc2dzdHIgIiIKKyJFMTkxOiBFbCBhcmd1bWVudG8gZGViZSBzZXIgdW5hIGxldHJhIG8gdW4gYXDzc3Ryb2ZvL2Fw83N0cm9mbyBpbnZlcnRpZG8iCisKKyM6IGV4X2RvY21kLmM6Nzc4NAorbXNnaWQgIkUxOTI6IFJlY3Vyc2l2ZSB1c2Ugb2YgOm5vcm1hbCB0b28gZGVlcCIKK21zZ3N0ciAiRTE5MjogVXNvIHJlY3Vyc2l2byBkZW1hc2lhZG8gcHJvZnVuZG8gZGUgqzpub3JtYWy7LiIKKworIzogZXhfZG9jbWQuYzo4MzAyCittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6IE5vIGhheSB1biBub21icmUgZGUgZmljaGVybyBhbHRlcm5hdGl2byBxdWUgc3VzdGl0dXlhIGEgqyO7LiIKKworIzogZXhfZG9jbWQuYzo4MzMzCittc2dpZCAiRTQ5NTogbm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIgorbXNnc3RyICIiCisiRTQ5NTogTm8gaGEgZGFkbyB1biBub21icmUgZGUgZmljaGVybyBkZSBhdXRvY29tYW5kb3MgcGFyYSBzdXN0aXR1aXIgYSAiCisiXCI8YWZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6ODM0MQorbXNnaWQgIkU0OTY6IG5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAiIgorIkU0OTY6IE5vIGV4aXN0ZSB1biCrYnVmZmVyuyBkZSBhdXRvY29tYW5kbyBwYXJhIHN1c3RpdHVpciBwb3IgXCI8YWJ1Zj5cIiIKKworIzogZXhfZG9jbWQuYzo4MzUyCittc2dpZCAiRTQ5Nzogbm8gYXV0b2NvbW1hbmQgbWF0Y2ggbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhbWF0Y2g+XCIiCittc2dzdHIgIiIKKyJFNDk3OiBOaW5n+m4gbm9tYnJlIGRlIGF1dG9jb21hbmRvIGNvbmN1ZXJkYSBwYXJhIHN1c3RpdHVpciCrPGFtYXRjaD67LiIKKworIzogZXhfZG9jbWQuYzo4MzYyCittc2dpZCAiRTQ5ODogbm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIiIKKyJFNDk4OiBObyBoYXkgdW4gbm9tYnJlIGRlIGZpY2hlcm8gqzpzb3VyY2W7IHF1ZSBzdXN0aXR1eWEgYSBcIjxzZmlsZT5cIi4iCisKKyM6IGV4X2RvY21kLmM6ODQwMworIywgbm8tYy1mb3JtYXQKK21zZ2lkICJFNDk5OiBFbXB0eSBmaWxlIG5hbWUgZm9yICclJyBvciAnIycsIG9ubHkgd29ya3Mgd2l0aCBcIjpwOmhcIiIKK21zZ3N0ciAiRTQ5OTogVW4gbm9tYnJlIGRlIGZpY2hlcm8gdmFjaW8gc29sbyBmdW5jaW9uYSBjb24gXCI6cDpoXCIuIgorCisjOiBleF9kb2NtZC5jOjg0MDUKK21zZ2lkICJFNTAwOiBFdmFsdWF0ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJFNTAwOiBMYSBleHByZXNp824gZXZhbHVhIGEgdW4gq3N0cmluZ7sgdmFjaW8uIgorCisjOiBleF9kb2NtZC5jOjkzNjAKK21zZ2lkICJFMTk1OiBDYW5ub3Qgb3BlbiB2aW1pbmZvIGZpbGUgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxOTU6IE5vIHNlIHB1ZWRlIGFicmlyIGVsIGZpY2hlcm8gq3ZpbWluZm+7IHBhcmEgbGVjdHVyYS4iCisKKyM6IGV4X2RvY21kLmM6OTUzMworbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5NjogTm8gaGF5IGTtZ3JhZm9zIGVuIGVzdGEgdmVyc2nzbi4iCisKKyM6IGV4X2V2YWwuYzo0NDAKK21zZ2lkICJFNjA4OiBDYW5ub3QgOnRocm93IGV4Y2VwdGlvbnMgd2l0aCAnVmltJyBwcmVmaXgiCittc2dzdHIgIiIKKyJFNjA4OiBObyBwdWVkbyBsYW56YXIgKCc6dGhyb3cnKSBleGNlcGNpb25lcyBzaSB0aWVuZW4gZWwgcHJlZmlqbyAnVmltJy4iCisKKyMgIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBleF9ldmFsLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiB0aHJvd246ICVzIgorbXNnc3RyICJIZSBlbmNvbnRyYWRvIHVuYSBleGNlcGNp8246ICVzLiIKKworIzogZXhfZXZhbC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZmluaXNoZWQ6ICVzIgorbXNnc3RyICJFeGVwY2nzbiBmaW5hbGl6YWRhOiAlcyIKKworIzogZXhfZXZhbC5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZGlzY2FyZGVkOiAlcyIKK21zZ3N0ciAiSGUgZGVzY2FydGFkbyB1bmEgZXhjZXBjafNuOiAlcyIKKworIzogZXhfZXZhbC5jOjYyMCBleF9ldmFsLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBsaW5lICVsZCIKK21zZ3N0ciAiJXMsIGVuIGxhIGztbmVhICVsZC4iCisKKyMgIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBleF9ldmFsLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBjYXVnaHQ6ICVzIgorbXNnc3RyICJFeGNlcHRpb24gYXRyYXBhZGE6ICVzIgorCisjOiBleF9ldmFsLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG1hZGUgcGVuZGluZyIKK21zZ3N0ciAiSGUgcHVlc3RvIGEgJXMgZW4gbGEgbGlzdGEgZGUgcGVuZGllbnRlcy4iCisKKyM6IGV4X2V2YWwuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzdW1lZCIKK21zZ3N0ciAiSGUgcmVzdW1pZG8gYSAlcy4iCisKKyM6IGV4X2V2YWwuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzY2FyZGVkIgorbXNnc3RyICJIZSBkZXNjYXJ0YWRvIGEgJXMuIgorCisjOiBleF9ldmFsLmM6NzQ2Cittc2dpZCAiRXhjZXB0aW9uIgorbXNnc3RyICJFeGVwY2nzbi4iCisKKyM6IGV4X2V2YWwuYzo3NTIKK21zZ2lkICJFcnJvciBhbmQgaW50ZXJydXB0IgorbXNnc3RyICJFcnJvciBlIGludGVycnVwY2nzbiIKKworIzogZXhfZXZhbC5jOjc1NCBndWkuYzo0MzgxCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkVycm9yIgorCisjICBpZiAocGVuZGluZyAmIENTVFBfSU5URVJSVVBUKQorIy4gaWYgKHBlbmRpbmcgJiBDU1RQX0lOVEVSUlVQVCkKKyM6IGV4X2V2YWwuYzo3NTYKK21zZ2lkICJJbnRlcnJ1cHQiCittc2dzdHIgIkludGVycnVwY2nzbiIKKworIzogZXhfZXZhbC5jOjgzMAorbXNnaWQgIkU1Nzk6IDppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTc5OiBBbmlkYW1pbmVvdCBkZSCrOmlmuyBkZW1hc2lhZG8gcHJvZnVuZG8uIgorCisjOiBleF9ldmFsLmM6ODY3Cittc2dpZCAiRTU4MDogOmVuZGlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgwOiChOmVuZGlmIHNpbiB1biA6aWYhIgorCisjOiBleF9ldmFsLmM6OTExCittc2dpZCAiRTU4MTogOmVsc2Ugd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODE6IDplbHNlIHNpbiB1biA6aWYiCisKKyM6IGV4X2V2YWwuYzo5MTQKK21zZ2lkICJFNTgyOiA6ZWxzZWlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgyOiA6ZWxzZWlmIHNpbiB1biA6aWYiCisKKyM6IGV4X2V2YWwuYzo5MjEKK21zZ2lkICJFNTgzOiBtdWx0aXBsZSA6ZWxzZSIKK21zZ3N0ciAiRTU4MzogqzplbHNluyBt+mx0aXBsZS4iCisKKyM6IGV4X2V2YWwuYzo5MjQKK21zZ2lkICJFNTg0OiA6ZWxzZWlmIGFmdGVyIDplbHNlIgorbXNnc3RyICJFNTg0OiA6ZWxzZWlmIGRlc3B16XMgZGUgOmVsc2UiCisKKyM6IGV4X2V2YWwuYzo5OTEKK21zZ2lkICJFNTg1OiA6d2hpbGUgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTU4NTogoas6d2hpbGW7IHNlIGFuaWRhIG11eSBwcm9mdW5kYW1lbnRlISIKKworIzogZXhfZXZhbC5jOjEwNDcKK21zZ2lkICJFNTg2OiA6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODY6IDpjb250aW51ZSBzaW4gdW4gOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTA4NworbXNnaWQgIkU1ODc6IDpicmVhayB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4NzogOmJyZWFrIHNpbiA6d2hpbGUiCisKKyM6IGV4X2V2YWwuYzoxMjg2Cittc2dpZCAiRTYwMTogOnRyeSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiChqzp0cnm7IHNlIGFuaWRhIG11eSBwcm9mdW5kYW1lbnRlISIKKworIzogZXhfZXZhbC5jOjEzNjYKK21zZ2lkICJFNjAzOiA6Y2F0Y2ggd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAzOiA6Y2F0Y2ggc2luIHVuIDp0cnkiCisKKyMgIEdpdmUgdXAgZm9yIGEgIjpjYXRjaCIgYWZ0ZXIgIjpmaW5hbGx5IiBhbmQgaWdub3JlIGl0LgorIyAgKiBKdXN0IHBhcnNlLgorIyAgR2l2ZSB1cCBmb3IgYSAiOmNhdGNoIiBhZnRlciAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjICAqIEp1c3QgcGFyc2UuCisjLiBHaXZlIHVwIGZvciBhICI6Y2F0Y2giIGFmdGVyICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKyMuICogSnVzdCBwYXJzZS4KKyM6IGV4X2V2YWwuYzoxMzg4Cittc2dpZCAiRTYwNDogOmNhdGNoIGFmdGVyIDpmaW5hbGx5IgorbXNnc3RyICJFNjA0OiA6Y2F0Y2ggZGVzcHXpcyBkZSA6ZmluYWxseSIKKworIzogZXhfZXZhbC5jOjE1MjEKK21zZ2lkICJFNjA2OiA6ZmluYWxseSB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDY6IDpmaW5hbGx5IHNpbiB1biA6dHJ5IgorCisjICBHaXZlIHVwIGZvciBhIG11bHRpcGxlICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKyMuIEdpdmUgdXAgZm9yIGEgbXVsdGlwbGUgIjpmaW5hbGx5IiBhbmQgaWdub3JlIGl0LgorIzogZXhfZXZhbC5jOjE1NDUKK21zZ2lkICJFNjA3OiBtdWx0aXBsZSA6ZmluYWxseSIKK21zZ3N0ciAiRTYwNzogoas6ZmluYWxsebsgbfpsdGlwbGUhIgorCisjOiBleF9ldmFsLmM6MTY1NAorbXNnaWQgIkU2MDI6IDplbmR0cnkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAyOiA6ZW5kdHJ5IHNpbiB1biA6dHJ5IgorCisjOiBleF9ldmFsLmM6MTk4NgorbXNnaWQgIkUxOTM6IDplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxOTM6IKs6ZW5kZnVuY3Rpb267IG5vIGVzdOEgZGVudHJvIGRlIHVuYSBmdW5jafNuLiIKKworIzogZXhfZ2V0bG4uYzozMjk2Cittc2dpZCAidGFnbmFtZSIKK21zZ3N0ciAiTm9tYnJlIGRlbCCrdGFnuyIKKworIzogZXhfZ2V0bG4uYzozMjk5Cittc2dpZCAiIGtpbmQgZmlsZVxuIgorbXNnc3RyICIgdGlwbyBkZSBmaWNoZXJvXG4iCisKKyM6IGV4X2dldGxuLmM6NDc1MgorbXNnaWQgIidoaXN0b3J5JyBvcHRpb24gaXMgemVybyIKK21zZ3N0ciAiTGEgb3BjafNuICdoaXN0b3J5JyBlcyBjZXJvLiIKKworIzogZXhfZ2V0bG4uYzo1MDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjICVzIEhpc3RvcnkgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBIaXN0b3JpYSBkZSCrJXO7IChkZSBsbyBt4XMgbnVldm8gYSBsbyBt4XMgYW50aWd1byk6XG4iCisKKyM6IGV4X2dldGxuLmM6NTAyNAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAiTO1uZWEgZGUgY29tYW5kb3MiCisKKyM6IGV4X2dldGxuLmM6NTAyNQorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgIkNhZGVuYSBkZSBi+nNxdWVkYSIKKworIzogZXhfZ2V0bG4uYzo1MDI2Cittc2dpZCAiRXhwcmVzc2lvbiIKK21zZ3N0ciAiRXhwcmVzafNuIgorCisjOiBleF9nZXRsbi5jOjUwMjcKK21zZ2lkICJJbnB1dCBMaW5lIgorbXNnc3RyICJM7W5lYSBkZSBlbnRyYWRhIgorCisjOiBleF9nZXRsbi5jOjUwNjUKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogq2NtZF9wY2hhcrsgbeFzIGFsbOEgZGUgbGEgbG9uZ2l0dWQgZGVsIGNvbWFuZG8uIgorCisjOiBleF9nZXRsbi5jOjUyNDIKK21zZ2lkICJFMTk5OiBBY3RpdmUgd2luZG93IG9yIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICJFMTk5OiBTZSBoYSBzdXByaW1pZG8gbGEgdmVudGFuYSBvIGVsIGJ1ZmZlciBhY3Rpdm9zLiIKKworIzogZmlsZWlvLmM6Mzc3Cittc2dpZCAiSWxsZWdhbCBmaWxlIG5hbWUiCittc2dzdHIgIk5vbWJyZSBkZSBmaWNoZXJvIGlsZWdhbCIKKworIzogZmlsZWlvLmM6NDAxIGZpbGVpby5jOjUzNSBmaWxlaW8uYzoyOTEzIGZpbGVpby5jOjI5NTQKK21zZ2lkICJpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiZXMgdW4gZGlyZWN0b3JpbyIKKworIzogZmlsZWlvLmM6NDAzCittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAibm8gZXMgdW4gZmljaGVybyIKKworIzogZmlsZWlvLmM6NTU3IGZpbGVpby5jOjQxMzEKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJbRmljaGVybyBudWV2b10iCisKKyM6IGZpbGVpby5jOjU5MAorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIltQZXJtaXNvIG5lZ2Fkb10iCisKKyM6IGZpbGVpby5jOjY5NAorbXNnaWQgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtYWRlIHRoZSBmaWxlIHVucmVhZGFibGUiCittc2dzdHIgIkUyMDA6IExvcyBhdXRvY29tYW5kb3MgqypSZWFkUHJluyBoaWNpZXJvbiBpbGVnaWJsZSBhbCBmaWNoZXJvLiIKKworIzogZmlsZWlvLmM6Njk2Cittc2dpZCAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTIwMTogTG9zIGF1dG9jb21hbmRvcyCrKlJlYWRQcmW7IG5vIGRlYmVuIGNhbWJpYXIgZWwgYnVmZmVyIGVuIGN1cnNvLiIKKworIzogZmlsZWlvLmM6NzE3Cittc2dpZCAiVmltOiBSZWFkaW5nIGZyb20gc3RkaW4uLi5cbiIKK21zZ3N0ciAiVmltOiBsZXllbmRvIGxhIGVudHJhZGEgZXN04W5kYXIuLi5cbiIKKworIzogZmlsZWlvLmM6NzIzCittc2dpZCAiUmVhZGluZyBmcm9tIHN0ZGluLi4uIgorbXNnc3RyICJMZXllbmRvIGxhIGVudHJhZGEgZXN04W5kYXIuLi4iCisKKyMgIFJlLW9wZW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgZmFpbGVkIQorIy4gUmUtb3BlbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBmYWlsZWQhCisjOiBmaWxlaW8uYzoxMDAwCittc2dpZCAiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiCittc2dzdHIgIkUyMDI6IKFMYSBjb252ZXJzafNuIGhhIGhlY2hvIGVsIGZpY2hlcm8gaWxlZ2libGUhIgorCisjOiBmaWxlaW8uYzoyMDkwCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2ZpZm8vc29ja2V0XSIKKworIzogZmlsZWlvLmM6MjA5NworbXNnaWQgIltmaWZvXSIKK21zZ3N0ciAiW2ZpZm9dIgorCisjOiBmaWxlaW8uYzoyMTA0Cittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIltzb2NrZXRdIgorCisjOiBmaWxlaW8uYzoyMTEyCittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW1JPXSIKKworIzogZmlsZWlvLmM6MjEyMgorbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW0ZhbHRhIHVuIENSXSIKKworIzogZmlsZWlvLmM6MjEyNworbXNnaWQgIltOTCBmb3VuZF0iCittc2dzdHIgIltTZSBoYSBlbmNvbnRyYWRvIHVuIE5MXSIKKworIzogZmlsZWlvLmM6MjEzMgorbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW2hlIHBhcnRpZG8gbGFzIGztbmVhcyBsYXJnYXNdIgorCisjOiBmaWxlaW8uYzoyMTM4IGZpbGVpby5jOjQxMTUKK21zZ2lkICJbTk9UIGNvbnZlcnRlZF0iCittc2dzdHIgIltOTyBjb252ZXJ0aWRvXSIKKworIzogZmlsZWlvLmM6MjE0MyBmaWxlaW8uYzo0MTIwCittc2dpZCAiW2NvbnZlcnRlZF0iCittc2dzdHIgIltjb252ZXJ0aWRvXSIKKworIzogZmlsZWlvLmM6MjE1MCBmaWxlaW8uYzo0MTQ1Cittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJbZW5jcmlwdGFkb10iCisKKyM6IGZpbGVpby5jOjIxNTcKK21zZ2lkICJbQ09OVkVSU0lPTiBFUlJPUl0iCittc2dzdHIgIltFUlJPUiBERSBDT05WRVJTSdNOXSIKKworIzogZmlsZWlvLmM6MjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJbSUxMRUdBTCBCWVRFIGluIGxpbmUgJWxkXSIKK21zZ3N0ciAiW0JZVEUgSUxFR0FMIGVuIGxhIGztbmVhICVsZF0iCisKKyM6IGZpbGVpby5jOjIxNzAKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbRVJST1JFUyBERSBMRUNUVVJBXSIKKworIzogZmlsZWlvLmM6MjM4NgorbXNnaWQgIkNhbid0IGZpbmQgdGVtcCBmaWxlIGZvciBjb252ZXJzaW9uIgorbXNnc3RyICJObyBzZSBwdWVkZSBlbmNvbnRyYXIgZWwgZmljaGVybyB0ZW1wb3JhbCBwYXJhIGxhIGNvbnZlcnNp824uIgorCisjOiBmaWxlaW8uYzoyMzkzCittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICJMYSBjb252ZXJzafNuIGNvbiAnq2NoYXJjb252ZXJ0uycgaGEgZmFsbGFkby4iCisKKyM6IGZpbGVpby5jOjIzOTYKK21zZ2lkICJjYW4ndCByZWFkIG91dHB1dCBvZiAnY2hhcmNvbnZlcnQnIgorbXNnc3RyICJObyBwdWVkbyBsZWVyIGxhIHNhbGlkYSBkZSCrY2hhcmNvbnZlcnS7LiIKKworIzogZmlsZWlvLmM6Mjc5NgorbXNnaWQgIkUyMDM6IEF1dG9jb21tYW5kcyBkZWxldGVkIG9yIHVubG9hZGVkIGJ1ZmZlciB0byBiZSB3cml0dGVuIgorbXNnc3RyICIiCisiRTIwMzogTG9zIGF1dG9jb21hbmRvcyBmdWVyb24gc3VwcmltaWRvcyBvIGVsIKtidWZmZXK7IHNlIGRlc2NhcmfzIHBhcmEgc2VyICIKKyJncmFiYWRvIGVuIGRpc2NvLiIKKworIzogZmlsZWlvLmM6MjgxOQorbXNnaWQgIkUyMDQ6IEF1dG9jb21tYW5kIGNoYW5nZWQgbnVtYmVyIG9mIGxpbmVzIGluIHVuZXhwZWN0ZWQgd2F5IgorbXNnc3RyICIiCisiRTIwNDogRWwgYXV0b2NvbWFuZG8gaGEgY2FtYmlhZG8gZWwgbvptZXJvIGRlIGztbmVhcyBlbiBmb3JtYSBpbmVzcGVyYWRhLiIKKworIzogZmlsZWlvLmM6Mjg1NworbXNnaWQgIk5ldEJlYW5zIGRpc3NhbGxvd3Mgd3JpdGVzIG9mIHVubW9kaWZpZWQgYnVmZmVycyIKK21zZ3N0ciAiTmV0QmVhbnMgbm8gcGVybWl0ZSBxdWUgc2UgZXNjcmliYSBzb2JyZSCrYnVmZmVyc7sgc2luIG1vZGlmaWNhci4iCisKKyM6IGZpbGVpby5jOjI4NjUKK21zZ2lkICJQYXJ0aWFsIHdyaXRlcyBkaXNhbGxvd2VkIGZvciBOZXRCZWFucyBidWZmZXJzIgorbXNnc3RyICJObyBzZSBwZXJtaXRlIGxhIGVzY3JpdHVyYSBwYXJjaWFsIGRlIGxvcyCrYnVmZmVyc7sgZGUgTmV0QmVhbnMuIgorCisjOiBmaWxlaW8uYzoyOTE5IGZpbGVpby5jOjI5MzcKK21zZ2lkICJpcyBub3QgYSBmaWxlIG9yIHdyaXRhYmxlIGRldmljZSIKK21zZ3N0ciAibm8gZXMgdW4gZmljaGVybyBvIGRpc3Bvc2l0aXZvIGVuIGVsIHF1ZSBzZSBwdWVkYSBlc2NyaWJpci4iCisKKyM6IGZpbGVpby5jOjI5ODkKK21zZ2lkICJpcyByZWFkLW9ubHkgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRXMgZGUgc29sbyBsZWN0dXJhIChh8WFkYSAhIHBhcmEgb2JyZWVzY3JpYmlyKS4iCisKKyM6IGZpbGVpby5jOjMzMzUKK21zZ2lkICJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICIiCisiRTUwNjogTm8gcHVlZG8gZXNjcmliaXIgYWwgZmljaGVybyBkZSByZXNwYWxkbyAoYfFhZGEgISBwYXJhIGZvcnphciBlbCAiCisiY29tYW5kbykuIgorCisjOiBmaWxlaW8uYzozMzQ3Cittc2dpZCAiRTUwNzogQ2xvc2UgZXJyb3IgZm9yIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIiIKKyJFNTA3OiBFcnJvciBhbCBjZXJyYXIgZWwgZmljaGVybyBkZSBsYSBjb3BpYSBkZSByZXNwYWxkbyAoYfFhZGEgISBwYXJhICIKKyJmb3J6YXIgZWwgY29tYW5kbykuIgorCisjOiBmaWxlaW8uYzozMzQ5Cittc2dpZCAiRTUwODogQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkU1MDg6IE5vIHB1ZWRvIGxlZXIgZWwgZmljaGVybyBwYXJhIGNyZWFyIGxhIGNvcGlhIGRlIHJlc3BhbGRvIChh8WFkYSAhIHBhcmEgIgorImZvcnphciBlbCBjb21hbmRvKS4iCisKKyM6IGZpbGVpby5jOjMzNjUKK21zZ2lkICJFNTA5OiBDYW5ub3QgY3JlYXRlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIiIKKyJFNTA5OiBObyBwdWVkbyBjcmVhciBlbCBmaWNoZXJvIHBhcmEgbGEgY29waWEgZGUgcmVzcGFsZG8gKGHxYWRhICEgcGFyYSAiCisiZm9yemFyIGVsIGNvbWFuZG8pLiIKKworIzogZmlsZWlvLmM6MzQ2OAorbXNnaWQgIkU1MTA6IENhbid0IG1ha2UgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkU1MTA6IE5vIHB1ZWRvIGhhY2VyIHVuIGZpY2hlcm8gZGUgY29waWEgZGUgcmVzcGFsZG8gKGHxYWRhICEgcGFyYSBmb3J6YXIgZWwgIgorImNvbWFuZG8pLiIKKworIzogZmlsZWlvLmM6MzUzMAorbXNnaWQgIkU0NjA6IFRoZSByZXNvdXJjZSBmb3JrIHdvdWxkIGJlIGxvc3QgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkU0NjA6IFNlIHBlcmRlcu1hIGVsIHNlZ21lbnRvICirZm9ya7spIGRlIHJlY3Vyc29zISAoYfFhZGEgISBwYXJhIGZvcnphciBlbCAiCisiY29tYW5kbykuIgorCisjOiBmaWxlaW8uYzozNjQwCittc2dpZCAiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTQ6IE5vIHB1ZWRvIGVuY29udHJhciBlbCBmaWNoZXJvIHRlbXBvcmFsIHBhcmEgZXNjcmliaXIgZW4g6WwuIgorCisjOiBmaWxlaW8uYzozNjU4Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKGFkZCAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIiIKKyJFMjEzOiBObyBwdWVkbyBjb252ZXJ0aXJsbyAoYfFhZGEgISBwYXJhIGVzY3JpYmlyIGVsIGZpY2hlcm8gc2luIGNvbnZlcnNp824pLiIKKworIzogZmlsZWlvLmM6MzY5MworbXNnaWQgIkUxNjY6IENhbid0IG9wZW4gbGlua2VkIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNjY6IE5vIHB1ZWRvIGFicmlyIGVsIGZpY2hlcm8gZW5sYXphZG8gcGFyYSBlc2NyaWJpciBlbiDpbC4iCisKKyM6IGZpbGVpby5jOjM2OTcKK21zZ2lkICJFMjEyOiBDYW4ndCBvcGVuIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTI6IE5vIHB1ZWRvIGFicmlyIGVsIGZpY2hlcm8gcGFyYSBlc2NyaWJpciBlbiDpbC4iCisKKyM6IGZpbGVpby5jOjM5NTkKK21zZ2lkICJFNjY3OiBGc3luYyBmYWlsZWQiCittc2dzdHIgIkU2Njc6IGZhbGzzIKtmc3luY7siCisKKyM6IGZpbGVpby5jOjM5NjYKK21zZ2lkICJFNTEyOiBDbG9zZSBmYWlsZWQiCittc2dzdHIgIkUzMTQ6IEZhbGzzIGVsIGNpZXJyZSBkZWwgZmljaGVyby4iCisKKyM6IGZpbGVpby5jOjQwMzcKK21zZ2lkICJFNTEzOiB3cml0ZSBlcnJvciwgY29udmVyc2lvbiBmYWlsZWQiCittc2dzdHIgIkU1MTM6IEVycm9yIGRlIGVzY3JpdHVyYSwgbGEgY29udmVyc2nzbiBmYWxs8y4iCisKKyM6IGZpbGVpby5jOjQwNDMKK21zZ2lkICJFNTE0OiB3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICJFNTE0OiBFcnJvciBkZSBlc2NyaXR1cmEgKL9TaXN0ZW1hIGRlIGZpY2hlcm9zIGxsZW5vPyIKKworIzogZmlsZWlvLmM6NDExMAorbXNnaWQgIiBDT05WRVJTSU9OIEVSUk9SIgorbXNnc3RyICJFUlJPUiBERSBDT05WRVJTSdNOIgorCisjOiBmaWxlaW8uYzo0MTI2Cittc2dpZCAiW0RldmljZV0iCittc2dzdHIgIltEaXNwb3NpdGl2b10iCisKKyM6IGZpbGVpby5jOjQxMzEKK21zZ2lkICJbTmV3XSIKK21zZ3N0ciAiW051ZXZvXSIKKworIzogZmlsZWlvLmM6NDE1MworbXNnaWQgIiBbYV0iCittc2dzdHIgIiBbYV0iCisKKyM6IGZpbGVpby5jOjQxNTMKK21zZ2lkICIgYXBwZW5kZWQiCittc2dzdHIgIiBh8WFkaWRvIgorCisjOiBmaWxlaW8uYzo0MTU1Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiIFt3XSIKKworIzogZmlsZWlvLmM6NDE1NQorbXNnaWQgIiB3cml0dGVuIgorbXNnc3RyICIgZXNjcml0b3MiCisKKyM6IGZpbGVpby5jOjQyMDUKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTogTW9kbyCrcGF0Y2i7OiBubyBzZSBwdWVkZSBndWFyZGFyIGVsIGZpY2hlcm8gb3JpZ2luYWwuIgorCisjOiBmaWxlaW8uYzo0MjI3Cittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBNb2RvIKtwYXRjaLs6IG5vIHNlIHB1ZWRlIHRvY2FyIGVsIGZpY2hlcm8gb3JpZ2luYWwgdmFj7W8uIgorCisjOiBmaWxlaW8uYzo0MjQyCittc2dpZCAiRTIwNzogQ2FuJ3QgZGVsZXRlIGJhY2t1cCBmaWxlIgorbXNnc3RyICJFMjA3OiBObyBzZSBwdWVkZSBib3JyYXIgZWwgZmljaGVybyBkZSByZXNwYWxkby4iCisKKyM6IGZpbGVpby5jOjQzMDYKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBVklTTzogZWwgZmljaGVybyBvcmlnaW5hbCBwdWVkZSBoYWJlcnNlIHBlcmRpZG8gbyBoYWJlcnNlIGRh8WFkb1xuIgorCisjOiBmaWxlaW8uYzo0MzA4Cittc2dpZCAiZG9uJ3QgcXVpdCB0aGUgZWRpdG9yIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIKK21zZ3N0ciAioW5vIHNhbGdhIGRlbCBlZGl0b3IgaGFzdGEgcXVlIGVsIGZpY2hlcm8gc2UgaGF5YSBlc2NyaXRvISIKKworIzogZmlsZWlvLmM6NDM5NworbXNnaWQgIltkb3NdIgorbXNnc3RyICJbRE9TXSIKKworIzogZmlsZWlvLmM6NDM5NworbXNnaWQgIltkb3MgZm9ybWF0XSIKK21zZ3N0ciAiW2Zvcm1hdG8gRE9TXSIKKworIzogZmlsZWlvLmM6NDQwNAorbXNnaWQgIlttYWNdIgorbXNnc3RyICJbTWFjXSIKKworIzogZmlsZWlvLmM6NDQwNAorbXNnaWQgIlttYWMgZm9ybWF0XSIKK21zZ3N0ciAiW2Zvcm1hdG8gTWFjXSIKKworIzogZmlsZWlvLmM6NDQxMQorbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW1VOSVhdIgorCisjOiBmaWxlaW8uYzo0NDExCittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW2Zvcm1hdG8gVU5JWF0iCisKKyM6IGZpbGVpby5jOjQ0MzgKK21zZ2lkICIxIGxpbmUsICIKK21zZ3N0ciAiMSBs7W5lYSwgIgorCisjOiBmaWxlaW8uYzo0NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcywgIgorbXNnc3RyICIlbGQgbO1uZWFzLCAiCisKKyM6IGZpbGVpby5jOjQ0NDMKK21zZ2lkICIxIGNoYXJhY3RlciIKK21zZ3N0ciAiMSBjYXLhY3RlciIKKworIzogZmlsZWlvLmM6NDQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxkIGNhcmFjdGVyZXMiCisKKyM6IGZpbGVpby5jOjQ0NTUKK21zZ2lkICJbbm9lb2xdIgorbXNnc3RyICJbbm8gaGF5IGZpbiBkZSBs7W5lYV0iCisKKyM6IGZpbGVpby5jOjQ0NTUKK21zZ2lkICJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIgorbXNnc3RyICJb2mx0aW1hIGztbmVhIGluY29tcGxldGFdIgorCisjICBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIyAgbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjICBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyMuIGRvbid0IG92ZXJ3cml0ZSBtZXNzYWdlcyBoZXJlCisjLiBtdXN0IGdpdmUgdGhpcyBwcm9tcHQKKyMuIGRvbid0IHVzZSBlbXNnKCkgaGVyZSwgZG9uJ3Qgd2FudCB0byBmbHVzaCB0aGUgYnVmZmVycworIzogZmlsZWlvLmM6NDQ3NAorbXNnaWQgIldBUk5JTkc6IFRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgcmVhZGluZyBpdCEhISIKK21zZ3N0ciAiQURWRVJURU5DSUE6IKGhoUVsIGZpY2hlcm8gaGEgY2FtYmlhZG8gZGVzZGUgcXVlIHNlIGxlefMhISEiCisKKyM6IGZpbGVpby5jOjQ0NzYKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQiCittc2dzdHIgIr9RdWllcmUgcmVhbG1lbnRlIGVzY3JpYmlyIGEg6Ww/IgorCisjOiBmaWxlaW8uYzo1NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDg6IEVycm9yIHdyaXRpbmcgdG8gXCIlc1wiIgorbXNnc3RyICJFMjA4OiBFcnJvciBhbCBlc2NyaWJpciBhIKslc7suIgorCisjOiBmaWxlaW8uYzo1NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDk6IEVycm9yIGNsb3NpbmcgXCIlc1wiIgorbXNnc3RyICJFMjA5OiBFcnJvciBhbCBjZXJyYXIgqyVzuy4iCisKKyM6IGZpbGVpby5jOjU3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMDogRXJyb3IgcmVhZGluZyBcIiVzXCIiCittc2dzdHIgIkUyMTA6IEVycm9yIGFsIGxlZXIgqyVzuy4iCisKKyM6IGZpbGVpby5jOjU5NzAKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBlbCBhdXRvY29tYW5kbyCrRmlsZUNoYW5nZWRTaGVsbLsgaGEgYm9ycmFkbyBlbCBidWZmZXIuIgorCisjOiBmaWxlaW8uYzo1OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIG5vIGxvbmdlciBhdmFpbGFibGUiCittc2dzdHIgIkUyMTE6IEFkdmVydGVuY2lhOiBlbCBmaWNoZXJvIKslc7sgeWEgbm8gZXN04SBkaXNwb25pYmxlIgorCisjOiBmaWxlaW8uYzo1OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiIgorIlcxMjogQWR2ZXJ0ZW5jaWE6IGVsIGZpY2hlcm8gqyVzuyBoYSBjYW1iaWFkbyB5IGVsIGJ1ZmZlciBmdWUgY2FtYmlhZG8gIgorInRhbWJp6W4gZW4gVmltLiIKKworIzogZmlsZWlvLmM6NTk5NAorIywgYy1mb3JtYXQKK21zZ2lkICJXMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiIgorIlcxMTogQWR2ZXJ0ZW5jaWE6IGVsIGZpY2hlcm8gqyVzuyBoYSBjYW1iaWFkbyBkZXNkZSBxdWUgY29tZW568yBsYSBlZGljafNuLiIKKworIzogZmlsZWlvLmM6NTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICIiCisiVzE2OiBBZHZlcnRlbmNpYTogZWwgbW9kbyBkZWwgZmljaGVybyCrJXO7IGhhIGNhbWJpYWRvIGRlc2RlIHF1ZSBjb21lbnrzIGxhICIKKyJlZGljafNuLiIKKworIzogZmlsZWlvLmM6NjAwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTM6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICIiCisiVzEzOiBBZHZlcnRlbmNpYTogZWwgZmljaGVybyCrJXO7IGhhIHNpZG8gY3JlYWRvIGRlc3B16XMgZGUgY29tZW56YXIgbGEgIgorImVkaWNp824uIgorCisjOiBmaWxlaW8uYzo2MDE5Cittc2dpZCAiU2VlIFwiOmhlbHAgVzExXCIgZm9yIG1vcmUgaW5mby4iCittc2dzdHIgIlZlYSCrOmhlbHAgdzExuyBwYXJhIG3hcyBpbmZvcm1hY2nzbi4iCisKKyM6IGZpbGVpby5jOjYwMzMKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJBZHZlcnRlbmNpYSIKKworIzogZmlsZWlvLmM6NjAzNAorbXNnaWQgIiIKKyImT0tcbiIKKyImTG9hZCBGaWxlIgorbXNnc3RyICIiCisiJk9LXG4iCisiJkNhcmdhciBmaWNoZXJvIgorCisjOiBmaWxlaW8uYzo2MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjI6IENvdWxkIG5vdCBwcmVwYXJlIGZvciByZWxvYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFNDYyOiBObyBwdWRlIHByZXBhcmFybWUgcGFyYSByZWNhcmdhciBhIFwiJXNcIi4iCisKKyM6IGZpbGVpby5jOjYxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IE5vIHNlIHB1ZG8gcmVjYXJnYXIgqyVzuy4iCisKKyM6IGZpbGVpby5jOjY3NDAKK21zZ2lkICItLURlbGV0ZWQtLSIKK21zZ3N0ciAiLS1TdXByaW1pZG8tLSIKKworIyAgdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3QKKyMuIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0CisjOiBmaWxlaW8uYzo2OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjc6IE5vIHN1Y2ggZ3JvdXA6IFwiJXNcIiIKK21zZ3N0ciAiRTM2NzogTm8gZXhpc3RlIGVsIGdydXBvOiCrJXO7LiIKKworIzogZmlsZWlvLmM6NzAyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciAqOiAlcyIKK21zZ3N0ciAiRTIxNTogQ2Fy4WN0ZXIgaWxlZ2FsIGRlc3B16XMgZGUgKjogqyVzuy4iCisKKyM6IGZpbGVpby5jOjcwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IE5vIGV4aXN0ZSB0YWwgaGVjaG86IKslc7siCisKKyM6IGZpbGVpby5jOjcwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBncm91cCBvciBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IE5vIGV4aXN0ZSB0YWwgZ3J1cG8gbyBldmVudG86ICVzIgorCisjICBIaWdobGlnaHQgdGl0bGUKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogZmlsZWlvLmM6NzE5OAorbXNnaWQgIiIKKyJcbiIKKyItLS0gQXV0by1Db21tYW5kcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gQXV0by1jb21hbmRvcyAtLS0iCisKKyM6IGZpbGVpby5jOjc0NjkKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiIgorIkUyMTc6IE5vIHNlIHB1ZWRlbiBlamVjdXRhciBsb3MgYXV0b2NvbWFuZG9zIHBhcmEgVE9ET1MgbG9zIGV2ZW50b3MgZGUgIgorImVqZWN1Y2nzbi4iCisKKyM6IGZpbGVpby5jOjc0OTIKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgIk5pbmf6biBhdXRvY29tYW5kbyBjb2luY2lkZS4iCisKKyM6IGZpbGVpby5jOjc4MTMKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiBFbCBhdXRvY29tYW5kbyBzZSBhbmlkYSBlbiBkZW1hc2lhZG9zIGJ1Y2xlcy4iCisKKyM6IGZpbGVpby5jOjgwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgQXV0byBjb21tYW5kcyBmb3IgXCIlc1wiIgorbXNnc3RyICIlcyBBdXRvIGNvbWFuZG9zIHBhcmEgqyVzuyIKKworIzogZmlsZWlvLmM6ODA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmcgJXMiCittc2dzdHIgIkVqZWN1dGFuZG8gJXMiCisKKyMgIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBmaWxlaW8uYzo4MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImF1dG9jb21tYW5kICVzIgorbXNnc3RyICJhdXRvY29tYW5kbyAlcyIKKworIzogZmlsZWlvLmM6ODczMQorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IEZhbHRhIHVuIHsuIgorCisjOiBmaWxlaW8uYzo4NzMzCittc2dpZCAiRTIyMDogTWlzc2luZyB9LiIKK21zZ3N0ciAiRTIyMDogRmFsdGEgdW4gfS4iCisKKyM6IGZvbGQuYzo2OAorbXNnaWQgIkU0OTA6IE5vIGZvbGQgZm91bmQiCittc2dzdHIgIkU0OTA6IE5vIGVuY29udHLpIG5pbmf6biBwbGllZ3VlLiIKKworIzogZm9sZC5jOjU5MworbXNnaWQgIkUzNTA6IENhbm5vdCBjcmVhdGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUwOiBObyBwdWVkbyBjcmVhciBlbCBwbGllZ3VlIGNvbiBlbCAnZm9sbWV0aG9kJyBhY3Rpdm8uIgorCisjOiBmb2xkLmM6NTk1Cittc2dpZCAiRTM1MTogQ2Fubm90IGRlbGV0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTE6IE5vIHB1ZWRvIGJvcnJhciBlbCBwbGllZ3VlIGNvbiBlbCAnZm9sZG1ldGhvZCcgYWN0aXZvLiIKKworIzogZ2V0Y2hhci5jOjI0OAorbXNnaWQgIkUyMjI6IEFkZCB0byByZWFkIGJ1ZmZlciIKK21zZ3N0ciAiRTIyMjogQfFhZGlyIGFsIKtidWZmZXK7IGRlIGxlY3R1cmEiCisKKyM6IGdldGNoYXIuYzoyMTk4Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6IGFzb2NpYWNp824gcmVjdXJzaXZhIgorCisjOiBnZXRjaGFyLmM6MzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjI0OiBnbG9iYWwgYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNDogeWEgZXhpc3RlIHVuYSBhYnJldmlhdHVyYSBnbG9iYWwgcGFyYSCrJXO7LiIKKworIzogZ2V0Y2hhci5jOjMwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNTogZ2xvYmFsIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI1OiB5YSBleGlzdGUgdW5hIGFzb2NpYWNp824gZ2xvYmFsIHBhcmEgqyVzuy4iCisKKyM6IGdldGNoYXIuYzozMjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjY6IGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjY6IHlhIGV4aXN0ZSB1bmEgYWJyZXZpYXR1cmEgcGFyYSCrJXO7LiIKKworIzogZ2V0Y2hhci5jOjMyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNzogbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjc6IHlhIGV4aXN0ZSB1bmEgYXNvY2lhY2nzbiBwYXJhIKslc7suIgorCisjOiBnZXRjaGFyLmM6MzI3OQorbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAiTm8gZW5jb250cukgbmluZ3VuYSBhYnJldmlhdHVyYS4iCisKKyM6IGdldGNoYXIuYzozMjgxCittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAiTm8gZW5jb250cukgbmluZ3VuYSBhc29jaWFjafNuLiIKKworIzogZ2V0Y2hhci5jOjQxNzMKK21zZ2lkICJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkUyMjg6IKttYWtlbWFwuzogbW9kbyBpbGVnYWwuIgorCisjOiBndWkuYzoyMjAKK21zZ2lkICJFMjI5OiBDYW5ub3Qgc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiRTIyOTogTm8gc2UgcHVlZGUgaW5pY2lhciBsYSBpbnRlcmZhY2UgZ3LhZmljYSAoq0dVSbspLiIKKworIzogZ3VpLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzA6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjMwOiBObyBwdWVkbyBsZWVyIGEgqyVzuy4iCisKKyM6IGd1aS5jOjQ3MgorbXNnaWQgIkU2NjU6IENhbm5vdCBzdGFydCBHVUksIG5vIHZhbGlkIGZvbnQgZm91bmQiCittc2dzdHIgIiIKKyJFNjY1OiBObyBwdWVkbyBpbmljaWFsIGxhIGludGVyZmFzZSBncuFmaWNhIChHVUkpLCBubyBlbmNvbnRy6SBuaW5ndW5hICIKKyJmdWVudGUgZGUgaW1wcmVzafNuIHbhbGlkYS4iCisKKyM6IGd1aS5jOjQ3NworbXNnaWQgIkUyMzE6ICdndWlmb250d2lkZScgaW52YWxpZCIKK21zZ3N0ciAiRTIzMTogRWwgdmFsb3IgZGUgq2d1aWZvbnR3aWRluyBubyBlcyB24WxpZG8uIgorCisjOiBndWkuYzo1NDcKK21zZ2lkICJFNTk5OiBWYWx1ZSBvZiAnaW1hY3RpdmF0ZWtleScgaXMgaW52YWxpZCIKK21zZ3N0ciAiRTU5OTogRWwgdmFsb3IgZGUgq2ltYWN0aXZhdGVrZXm7IG5vIGVzIHbhbGlkby4iCisKKyM6IGd1aS5jOjQwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiBObyBzZSBwdWVkZSBhc2lnbmFyIGVsIGNvbG9yIKslc7suIgorCisjOiBndWlfYXRfZnMuYzozMDAKK21zZ2lkICI8Y2Fubm90IG9wZW4+ICIKK21zZ3N0ciAiPG5vIHB1ZWRvIGFicmlybG8+IgorCisjOiBndWlfYXRfZnMuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAiRTYxNjogq3ZpbV9TZWxGaWxluzogTm8gcHVlZG8gaGFsbGFyIGxhIGZ1ZW50ZSBkZSBpbXByZXNp824gJXMuIgorCisjOiBndWlfYXRfZnMuYzoyNzgxCittc2dpZCAiRTYxNDogdmltX1NlbEZpbGU6IGNhbid0IHJldHVybiB0byBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNDogq3ZpbV9TZWxGaWxluzogbm8gcHVlZG8gcmVncmVzYXIgYWwgZGlyZWN0b3JpbyBhY3R1YWwuIgorCisjOiBndWlfYXRfZnMuYzoyODAxCittc2dpZCAiUGF0aG5hbWU6IgorbXNnc3RyICJOb21icmUgZGUgbGEgcnV0YToiCisKKyM6IGd1aV9hdF9mcy5jOjI4MDcKK21zZ2lkICJFNjE1OiB2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiRTYxNTogdqt2aW1fU2VsRmlsZbs6IE5vIHB1ZWRvIG9idGVuZXIgbGEgbG9jYWxpemFjafNuIGRlbCBkaXJlY3RvcmlvIGFjdHVhbC4iCisKKyM6IGd1aV9hdF9mcy5jOjI4MTUgZ3VpX21vdGlmLmM6MTYyMworbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfZ3RrLmM6MjczMSBndWlfbW90aWYuYzoxNjE4IGd1aV9tb3RpZi5jOjI4NDkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkNhbmNlbGFyIgorCisjOiBndWlfYXRfc2IuYzo0ODYKK21zZ2lkICJTY3JvbGxiYXIgV2lkZ2V0OiBDb3VsZCBub3QgZ2V0IGdlb21ldHJ5IG9mIHRodW1iIHBpeG1hcC4iCittc2dzdHIgIlNjcm9sbGJhciBXaWRnZXQ6IE5vIHB1ZGUgb2J0ZW5lciBsYSBnZW9tZXRy7WEgZGVsIKtwaXhtYXC7IG1pbmlhdHVyYS4iCisKKyM6IGd1aV9hdGhlbmEuYzoyMDQ3IGd1aV9tb3RpZi5jOjE4NzEKK21zZ2lkICJWaW0gZGlhbG9nIgorbXNnc3RyICJEaeFsb2dvIGRlIFZpbSIKKworIzogZ3VpX2JldmFsLmM6MTAxIGd1aV93MzIuYzozOTQ1Cittc2dpZCAiRTIzMjogQ2Fubm90IGNyZWF0ZSBCYWxsb29uRXZhbCB3aXRoIGJvdGggbWVzc2FnZSBhbmQgY2FsbGJhY2siCittc2dzdHIgIiIKKyJFMjMyOiBObyBwdWVkbyBjcmVhciB1biCrQmFsbG9vbkV2YWy7IHF1ZSBjb250ZW5nYSB0YW50byBlbCBtZW5zYWplIGNvbW8gZWwgIgorIqtjYWxsYmFja7suIgorCisjOiBndWlfZ3RrLmM6MTYwNworbXNnaWQgIlZpbSBkaWFsb2cuLi4iCittc2dzdHIgIkRp4WxvZ28gZGUgVmltLi4uIgorCisjOiBndWlfZ3RrLmM6MjA2MCBtZXNzYWdlLmM6Mjk5OQorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZTaVxuIgorIiZOb1xuIgorIiZDYW5jZWxhciIKKworIzogZ3VpX2d0ay5jOjIyNjgKK21zZ2lkICJJbnB1dCBfTWV0aG9kcyIKK21zZ3N0ciAiTel0b2RvcyBkZSBFbnRyYWRhICirSW5wdXRfTWV0aG9kc7spIgorCisjOiBndWlfZ3RrLmM6MjUzNCBndWlfbW90aWYuYzoyNzY4Cittc2dpZCAiVklNIC0gU2VhcmNoIGFuZCBSZXBsYWNlLi4uIgorbXNnc3RyICJWSU0gLSBCdXNjYXIgeSByZWVtcGxhemFyLi4uIgorCisjOiBndWlfZ3RrLmM6MjU0MiBndWlfbW90aWYuYzoyNzcwCittc2dpZCAiVklNIC0gU2VhcmNoLi4uIgorbXNnc3RyICJWSU0gLSBCdXNjYXIuLi4iCisKKyM6IGd1aV9ndGsuYzoyNTc0IGd1aV9tb3RpZi5jOjI4ODgKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICK/RW5jb250cmFyIHF16T86IgorCisjOiBndWlfZ3RrLmM6MjU5MiBndWlfbW90aWYuYzoyOTIwCittc2dpZCAiUmVwbGFjZSB3aXRoOiIKK21zZ3N0ciAiUmVlbXBsYXphciBjb246IgorCisjICB3aG9sZSB3b3JkIG9ubHkgYnV0dG9uCisjLiB3aG9sZSB3b3JkIG9ubHkgYnV0dG9uCisjOiBndWlfZ3RrLmM6MjYyNCBndWlfbW90aWYuYzozMDM2Cittc2dpZCAiTWF0Y2ggd2hvbGUgd29yZCBvbmx5IgorbXNnc3RyICJFbmNvbnRyYXIgc29sbyBwYWxhYnJhcyBjb21wbGV0YXMuIgorCisjICBtYXRjaCBjYXNlIGJ1dHRvbgorIy4gbWF0Y2ggY2FzZSBidXR0b24KKyM6IGd1aV9ndGsuYzoyNjM1IGd1aV9tb3RpZi5jOjMwNDgKK21zZ2lkICJNYXRjaCBjYXNlIgorbXNnc3RyICJMYSD6bmljYSBjb2luY2lkZW5jaWEiCisKKyM6IGd1aV9ndGsuYzoyNjQ1IGd1aV9tb3RpZi5jOjI5OTAKK21zZ2lkICJEaXJlY3Rpb24iCittc2dzdHIgIkRpcmVjY2nzbiIKKworIyAgJ1VwJyBhbmQgJ0Rvd24nIGJ1dHRvbnMKKyMuICdVcCcgYW5kICdEb3duJyBidXR0b25zCisjOiBndWlfZ3RrLmM6MjY1NyBndWlfbW90aWYuYzozMDAyCittc2dpZCAiVXAiCittc2dzdHIgIkhhY2lhIGFycmliYSIKKworIzogZ3VpX2d0ay5jOjI2NjEgZ3VpX21vdGlmLmM6MzAxMAorbXNnaWQgIkRvd24iCittc2dzdHIgIkhhY2lhIGFiYWpvIgorCisjOiBndWlfZ3RrLmM6MjY4MyBndWlfZ3RrLmM6MjY4NSBndWlfbW90aWYuYzoyNzkyCittc2dpZCAiRmluZCBOZXh0IgorbXNnc3RyICJFbmNvbnRyYXIgc2lndWllbnRlIgorCisjOiBndWlfZ3RrLmM6MjcwMiBndWlfZ3RrLmM6MjcwNCBndWlfbW90aWYuYzoyODA5Cittc2dpZCAiUmVwbGFjZSIKK21zZ3N0ciAiUmVlbXBsYXphciIKKworIzogZ3VpX2d0ay5jOjI3MTUgZ3VpX2d0ay5jOjI3MTcgZ3VpX21vdGlmLmM6MjgyMgorbXNnaWQgIlJlcGxhY2UgQWxsIgorbXNnc3RyICJSZWVtcGxhemFyIHRvZG9zIgorCisjOiBndWlfZ3RrX3gxMS5jOjIzMjcKK21zZ2lkICJWaW06IFJlY2VpdmVkIFwiZGllXCIgcmVxdWVzdCBmcm9tIHNlc3Npb24gbWFuYWdlclxuIgorbXNnc3RyICJWaW06IFJlY2li7SB1bmEgc29saWNpdHVkIFwiZGllXCIgZGVsIGFkbWluaXN0cmFkb3IgZGUgc2VzaW9uZXMuXG4iCisKKyM6IGd1aV9ndGtfeDExLmM6MzUxOQorbXNnaWQgIlZpbTogTWFpbiB3aW5kb3cgdW5leHBlY3RlZGx5IGRlc3Ryb3llZFxuIgorbXNnc3RyICJWaW06IExhIHZlbnRhbmEgcHJpbmNpcGFsIGZ1ZSBkZXN0cnVpZGEgaW5lc3BlcmFkYW1lbnRlLlxuIgorCisjOiBndWlfZ3RrX3gxMS5jOjQxMzgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAiU2VsZWNjafNuIGRlIHRpcG9zIGRlIGxldHJhIgorCisjOiBndWlfZ3RrX3gxMS5jOjYwMzUgdWkuYzoyMTIwCittc2dpZCAiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIKK21zZ3N0ciAiU2UgaGEgdXNhZG8gq0NVVF9CVUZGRVIwuyBlbiB2ZXogZGUgdW5hIHNlbGVjY2nzbiB2YWPtYS4iCisKKyM6IGd1aV9tb3RpZi5jOjE2MTcgZ3VpX21vdGlmLmM6MTYyMAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJvIgorCisjOiBndWlfbW90aWYuYzoxNjE5Cittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIkRpcmVjdG9yaW9zIgorCisjOiBndWlfbW90aWYuYzoxNjIxCittc2dpZCAiSGVscCIKK21zZ3N0ciAiQXl1ZGEiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjIKK21zZ2lkICJGaWxlcyIKK21zZ3N0ciAiRmljaGVyb3MiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjQKK21zZ2lkICJTZWxlY3Rpb24iCittc2dzdHIgIlNlbGVjY2nzbiIKKworIzogZ3VpX21vdGlmLmM6MjgzNQorbXNnaWQgIlVuZG8iCittc2dzdHIgIkRlc2hhY2VyIgorCisjOiBndWlfcmlzY29zLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTA6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTYxMDogTm8gcHVlZG8gY2FyZ2FyIGxhIGZ1ZW50ZSBkZSBpbXByZXNp824gWmFwICclcycuIgorCisjOiBndWlfcmlzY29zLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjExOiBDYW4ndCB1c2UgZm9udCAlcyIKK21zZ3N0ciAiRTYxMTogTm8gcHVlZG8gdXNhciBsYSBmdWVudGUgZGUgaW1wcmVzafNuICVzLiIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNzAKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisiRW52aWFuZG8gbWVuc2FqZSBwYXJhIHRlcm1pbmFyIGxvcyBwcm9jZXNvcyBkZXBlbmRpZW50ZXMgKKtoaWpvuykuXG4iCisKKyM6IGd1aV93MzIuYzo4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MzogQXJndW1lbnQgbm90IHN1cHBvcnRlZDogXCItJXNcIjsgVXNlIHRoZSBPTEUgdmVyc2lvbi4iCittc2dzdHIgIkUyNDM6IEFyZ3VtZW50byBubyBhZG1pdGlkbzogqy0lc7s7IHVzZSBsYSB2ZXJzafNuIE9MRS4iCisKKyM6IGd1aV93NDguYzoyMTQ3Cittc2dpZCAiRmluZCBzdHJpbmcgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAiQnVzY2FyIGNhZGVuYSAodXNlIKtcXFxcuyBwYXJhIGVuY29udHJhciB1biCrXFy7KSIKKworIzogZ3VpX3c0OC5jOjIxNzIKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJCdXNjYXIgeSByZWVtcGxhemFyICh1c2Ugq1xcXFy7IHBhcmEgZW5jb250cmEgdW5hIKtcXLspIgorCisjOiBndWlfeDExLmM6MTUzNworbXNnaWQgIlZpbSBFNDU4OiBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnksIHNvbWUgY29sb3JzIG1heSBiZSBpbmNvcnJlY3QiCittc2dzdHIgIiIKKyJWaW0gRTQ1ODogbm8gc2UgcHVlZGUgYXNpZ25hciB1bmEgZW50cmFkYSBhbCBtYXBhIGRlIGNvbG9yZXM7IGFsZ3Vub3MgIgorImNvbG9yZXMgdGFsIHZleiBubyBzZWFuIGNvcnJlY3Rvcy4iCisKKyM6IGd1aV94MTEuYzoyMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICIiCisiRTI1MDogRmFsdGFuIGxhcyBmdWVudGVzIGRlIGltcHJlc2nzbiBwYXJhIGxvcyBzaWd1aWVudGVzIGNvbmp1bnRvcyBkZSAiCisiY2FyYWN0ZXJlcyBlbiBlbCBjb25qdW50byBkZSBmdWVudGVzIKslc7s6IgorCisjOiBndWlfeDExLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUyOiBGb250c2V0IG5hbWU6ICVzIgorbXNnc3RyICJFMjUyOiBOb21icmUgZGVsIGNvbmp1bnRvIGRlIGZ1ZW50ZXMgZGUgaW1wcmVzafNuOiCrJXO7IgorCisjOiBndWlfeDExLmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJMYSBmdWVudGUgZGUgaW1wcmVzafNuIKslc7sgbm8gZXMgZGUgYW5jaG8gZmlqby4iCisKKyM6IGd1aV94MTEuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTM6IEZvbnRzZXQgbmFtZTogJXNcbiIKK21zZ3N0ciAiRTI1MzogTm9tYnJlIGRlbCBjb25qdW50byBkZSBmdWVudGVzIGRlIGltcHJlc2nzbjogqyVzu1xuIgorCisjOiBndWlfeDExLmM6MjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MDogJXNcbiIKK21zZ3N0ciAiRnVlbnRlIGRlIGltcHJlc2nzbiAwOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAiRnVlbnRlIGRlIGltcHJlc2nzbiAxOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250JWxkIHdpZHRoIGlzIG5vdCB0d2ljZSB0aGF0IG9mIGZvbnQwXG4iCittc2dzdHIgIiIKKyJMYSBhbmNodXJhIGRlIGxhIGZ1ZW50ZSBkZSBpbXByZXNp824gICVsZCBubyBlcyBlbCBkb2JsZSBkZSBsYSBkZSBsYSBmdWVudGUgIgorImRlIGltcHJlc2nzbiAwXG4iCisKKyM6IGd1aV94MTEuYzoyMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwIHdpZHRoOiAlbGRcbiIKK21zZ3N0ciAiQW5jaHVyYSBkZSBsYSBmdWVudGUgZGUgaW1wcmVzafNuIDA6ICVsZFxuIgorCisjOiBndWlfeDExLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9udDEgd2lkdGg6ICVsZFxuIgorIlxuIgorbXNnc3RyICIiCisiQW5jaHVyYSBkZSBsYSBmdWVudGUgZGUgaW1wcmVzafNuIDE6ICVsZFxuIgorIlxuIgorCisjOiBoYW5ndWxpbi5jOjYxMAorbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKK21zZ3N0ciAiRTI1NjogRVJST1IgZGVsIGF1dPNtYXRhIEhhbmd1bC4iCisKKyM6IGlmX2NzY29wZS5jOjc3Cittc2dpZCAiQWRkIGEgbmV3IGRhdGFiYXNlIgorbXNnc3RyICJB8WFkaXIgdW5hIG51ZXZhIGJhc2UgZGUgZGF0b3MuIgorCisjOiBpZl9jc2NvcGUuYzo3OQorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIlBldGljafNuIGRlIHVuIHBhdHLzbi4iCisKKyM6IGlmX2NzY29wZS5jOjgxCittc2dpZCAiU2hvdyB0aGlzIG1lc3NhZ2UiCittc2dzdHIgIk1vc3RyYXIgZXN0ZSBtZW5zYWplLiIKKworIzogaWZfY3Njb3BlLmM6ODMKK21zZ2lkICJLaWxsIGEgY29ubmVjdGlvbiIKK21zZ3N0ciAiTWF0YXIgdW5hIGNvbmV4afNuLiIKKworIzogaWZfY3Njb3BlLmM6ODUKK21zZ2lkICJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIgorbXNnc3RyICJSZWluaWNpYXIgdG9kYXMgbGFzIGNvbmV4aW9uZXMuIgorCisjOiBpZl9jc2NvcGUuYzo4NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIk1vc3RyYXIgbGFzIGNvbmV4aW9uZXMuIgorCisjOiBpZl9jc2NvcGUuYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTYwOiBVc2FnZTogY3NbY29wZV0gJXMiCittc2dzdHIgIkU1NjA6IEZvcm1hIGRlIHVzbzogY3NbY29wZV0gJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNAorbXNnaWQgIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIKK21zZ3N0ciAiRXN0ZSBjb21hbmRvIKtjc2NvcGW7IG5vIGFkbWl0ZSBsYSBkaXZpc2nzbiBkZSBsYSB2ZW50YW5hLlxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzUKK21zZ2lkICJFNTYyOiBVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiRTU2MjogRm9ybWEgZGUgdXNvOiBjc3RhZyA8aWRlbnRpZmljYWRvcj4iCisKKyM6IGlmX2NzY29wZS5jOjIzMQorbXNnaWQgIkUyNTc6IGNzdGFnOiB0YWcgbm90IGZvdW5kIgorbXNnc3RyICJFMjU3OiBjc3RhZzogq3RhZ7sgbm8gZW5jb250cmFkby4iCisKKyM6IGlmX2NzY29wZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTYzOiBzdGF0KCVzKSBlcnJvcjogJWQiCittc2dzdHIgIkU1NjM6IEVycm9yIGVuIHN0YXQoJXMpOiAlZCIKKworIzogaWZfY3Njb3BlLmM6NDE5Cittc2dpZCAiRTU2Mzogc3RhdCBlcnJvciIKK21zZ3N0ciAiRTU2MzogZXJyb3IgZW4gbGEgZnVuY2nzbiCrc3RhdCgpuy4iCisKKyM6IGlmX2NzY29wZS5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY0OiAlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIkU1NjQ6ICVzIG5vIGVzIHVuIGRpcmVjdG9yaW8gbmkgdW5hIGJhc2UgZGUgZGF0b3MgduFsaWRhIGRlIGNzY29wZS4iCisKKyM6IGlmX2NzY29wZS5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRlZCBjc2NvcGUgZGF0YWJhc2UgJXMiCittc2dzdHIgIlNlIGhhIGHxYWRpZG8gbGEgYmFzZSBkZSBkYXRvcyCrY3Njb3BluyAlcyIKKworIzogaWZfY3Njb3BlLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNjI6IGVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWxkIgorbXNnc3RyICJFMjYyOiBFcnJvciBhbCBsZWVyIGxhIGNvbmV4afNuICVsZCBjb24gY3Njb3BlLiIKKworIzogaWZfY3Njb3BlLmM6Njk0Cittc2dpZCAiRTU2MTogdW5rbm93biBjc2NvcGUgc2VhcmNoIHR5cGUiCittc2dzdHIgIkU1NjE6IFRpcG8gZGUgYvpzcXVlZGEgZGVzY29ub2NpZG8gcGFyYSBjc2NvcGUuIgorCisjOiBpZl9jc2NvcGUuYzo3MzYKK21zZ2lkICJFNTY2OiBDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiRTU2NjogTm8gcHVkZSBjcmVhciBsYSBjb25leGnzbiCrcGlwZbsgcGFyYSBjb211bmljYXJtZSBjb24gY3Njb3BlLiIKKworIzogaWZfY3Njb3BlLmM6NzUzCittc2dpZCAiRTYyMjogQ291bGQgbm90IGZvcmsgZm9yIGNzY29wZSIKK21zZ3N0ciAiRTYyMjogTm8gcHVkZSBjcmVhciB1biBudWV2byBwcm9jZXNvICirZm9ya7spIHBhcmEgdXNhciBjc2NvcGUuIgorCisjOiBpZl9jc2NvcGUuYzo4NDcgaWZfY3Njb3BlLmM6ODk3Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb24gZXhlYyBmYWlsZWQiCittc2dzdHIgIkZhbGzzIGxhIGVqZWN1Y2nzbiBkZSCrY3NfY3JlYXRlX2Nvbm5lY3Rpb267IgorCisjOiBpZl9jc2NvcGUuYzo4OTgKK21zZ2lkICJFNjIzOiBDb3VsZCBub3Qgc3Bhd24gY3Njb3BlIHByb2Nlc3MiCittc2dzdHIgIkU2MjM6IE5vIHB1ZGUgY3JlYXIgdW4gbnVldm8gcHJvY2VzbyAoq3NwYXduuykgZGUgY3Njb3BlLiIKKworIzogaWZfY3Njb3BlLmM6OTExCittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICKrY3NfY3JlYXRlX2Nvbm5lY3Rpb267OiBGYWxs8yCrZmRvcGVuuyBwYXJhIKt0b19mcLsuIgorCisjOiBpZl9jc2NvcGUuYzo5MTMKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciBmcl9mcCBmYWlsZWQiCittc2dzdHIgIqtjc19jcmVhdGVfY29ubmVjdGlvbrs6IEZhbGzzIKtmZG9wZW67IHBhcmEgq2ZyX2Zwuy4iCisKKyM6IGlmX2NzY29wZS5jOjk1MQorbXNnaWQgIkU1Njc6IG5vIGNzY29wZSBjb25uZWN0aW9ucyIKK21zZ3N0ciAiRTU2NzogTm8gaGF5IGNvbmV4aW9uZXMgY29uIGNzY29wZS4iCisKKyM6IGlmX2NzY29wZS5jOjEwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICIiCisiRTI1OTogTm8gc2UgZW5jb250cmFyb24gY29pbmNpZGVuY2lhcyBwYXJhIGxhIGL6c3F1ZWRhIGNzY29wZSAlcyBkZSAlcy4iCisKKyM6IGlmX2NzY29wZS5jOjEwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OTogaW52YWxpZCBjc2NvcGVxdWlja2ZpeCBmbGFnICVjIGZvciAlYyIKK21zZ3N0ciAiRTQ2OTogTGEgbWFyY2Egq2NzY29wZXF1aWNrZml4uyAlYyBwYXJhICVjIG5vIGVzIHbhbGlkYS4iCisKKyM6IGlmX2NzY29wZS5jOjExNTIKK21zZ2lkICJjc2NvcGUgY29tbWFuZHM6XG4iCittc2dzdHIgImNvbWFuZG9zIGRlIKtjc2NvcGW7OlxuIgorCisjOiBpZl9jc2NvcGUuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtNXM6ICUtMzBzIChVc2FnZTogJXMpIgorbXNnc3RyICIlLTVzOiAlLTMwcyAoTW9kbyBkZSB1c286ICVzKSIKKworIzogaWZfY3Njb3BlLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjI1OiBjYW5ub3Qgb3BlbiBjc2NvcGUgZGF0YWJhc2U6ICVzIgorbXNnc3RyICJFNjI1OiBObyBwdWVkbyBhYnJpciBsYSBiYXNlIGRlIGRhdG9zIGNzY29wZTogJXMuIgorCisjOiBpZl9jc2NvcGUuYzoxMjcxCittc2dpZCAiRTYyNjogY2Fubm90IGdldCBjc2NvcGUgZGF0YWJhc2UgaW5mb3JtYXRpb24iCittc2dzdHIgIkU2MjY6IE5vIHB1ZWRvIG9idGVuZXIgaW5mb3JtYWNp824gYWNlcmNhIGRlIGxhIGJhc2UgZGUgZGF0b3MgY3Njb3BlLiIKKworIzogaWZfY3Njb3BlLmM6MTI5NgorbXNnaWQgIkU1Njg6IGR1cGxpY2F0ZSBjc2NvcGUgZGF0YWJhc2Ugbm90IGFkZGVkIgorbXNnc3RyICJFNTY4OiBObyBzZSBh8WFkafMgdW5hIGJhc2UgZGUgZGF0b3MgZGUgY3Njb3BlIGR1cGxpY2FkYS4iCisKKyM6IGlmX2NzY29wZS5jOjEzMDcKK21zZ2lkICJFNTY5OiBtYXhpbXVtIG51bWJlciBvZiBjc2NvcGUgY29ubmVjdGlvbnMgcmVhY2hlZCIKK21zZ3N0ciAiRTU2OTogU2UgaGEgYWxjYW56YWRvIGVsIG76bWVybyBt4XhpbW8gZGUgY29uZXhpb25lcyBjb24gY3Njb3BlLiIKKworIzogaWZfY3Njb3BlLmM6MTQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYxOiBjc2NvcGUgY29ubmVjdGlvbiAlcyBub3QgZm91bmQiCittc2dzdHIgIkUyNjE6IG5vIHNlIGhhIGVuY29udHJhZG8gbGEgY29uZXhp824gq2NzY29wZbsgJXMiCisKKyM6IGlmX2NzY29wZS5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gJXMgY2xvc2VkIgorbXNnc3RyICJDb25leGnzbiCrY3Njb3BluyAlcyBjZXJyYWRhLiIKKworIyAgc2hvdWxkIG5vdCByZWFjaCBoZXJlCisjLiBzaG91bGQgbm90IHJlYWNoIGhlcmUKKyM6IGlmX2NzY29wZS5jOjE1OTgKK21zZ2lkICJFNTcwOiBmYXRhbCBlcnJvciBpbiBjc19tYW5hZ2VfbWF0Y2hlcyIKK21zZ3N0ciAiRTU3MDogRXJyb3IgZmF0YWwgZW4gq2NzX21hbmFnZV9tYXRjaGVzuy4iCisKKyM6IGlmX2NzY29wZS5jOjE4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3Njb3BlIHRhZzogJXMiCittc2dzdHIgIqt0YWe7IGRlIGNzY29wZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjE4NzAKK21zZ2lkICIiCisiXG4iCisiICAgIyAgIGxpbmUiCittc2dzdHIgIiIKKyJcbiIKKyIgICAjICAgbO1uZWEiCisKKyM6IGlmX2NzY29wZS5jOjE4NzIKK21zZ2lkICJmaWxlbmFtZSAvIGNvbnRleHQgLyBsaW5lXG4iCittc2dzdHIgIm5vbWJyZSBkZWwgZmljaGVybyAvIGNvbnRleHRvIC8gbO1uZWFcbiIKKworIzogaWZfY3Njb3BlLmM6MTk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA5OiBDc2NvcGUgZXJyb3I6ICVzIgorbXNnc3RyICJFNjA5OiBFcnJvciBkZSCrY3Njb3BluzogJXMiCisKKyM6IGlmX2NzY29wZS5jOjIxNzYKK21zZ2lkICJBbGwgY3Njb3BlIGRhdGFiYXNlcyByZXNldCIKK21zZ3N0ciAiU2UgaGFuIHZhY2lhZG8gdG9kYXMgbGFzIGJhc2VzIGRlIGRhdG9zIGRlIKtjc2NvcGW7IgorCisjOiBpZl9jc2NvcGUuYzoyMjQ0Cittc2dpZCAibm8gY3Njb3BlIGNvbm5lY3Rpb25zXG4iCittc2dzdHIgIm5vIGhheSBjb25leGlvbmVzIKtjc2NvcGW7XG4iCisKKyM6IGlmX2NzY29wZS5jOjIyNDgKK21zZ2lkICIgIyBwaWQgICAgZGF0YWJhc2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iCittc2dzdHIgIiBuuiBwaWQgICAgYmFzZSBkZSBkYXRvcyAgICAgICAgICAgICAgICAgICAgICAgcHJlZmlqbyBydXRhXG4iCisKKyM6IGlmX3B5dGhvbi5jOjQzNgorbXNnaWQgIiIKKyJFMjYzOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUHl0aG9uIGxpYnJhcnkgY291bGQgbm90IGJlICIKKyJsb2FkZWQuIgorbXNnc3RyICIiCisiRTI2MzogTG8gc2llbnRvLCBlc3RlIGNvbWFuZG8gZXN04SBkZXNhY3RpdmFkbyBwdWVzIG5vIHNlIHB1ZG8gY2FyZ2FyIGxhICIKKyJiaWJsaW90ZWNhIGRlIFB5dGhvbi4iCisKKyM6IGlmX3B5dGhvbi5jOjUwMAorbXNnaWQgIkU2NTk6IENhbm5vdCBpbnZva2UgUHl0aG9uIHJlY3Vyc2l2ZWx5IgorbXNnc3RyICJFNjU5OiBObyBwdWVkbyBpbnZvY2FyIGEgUHl0aG9uIHJlY3Vyc2l2YW1lbnRlLiIKKworIzogaWZfcHl0aG9uLmM6NzAxCittc2dpZCAiY2FuJ3QgZGVsZXRlIE91dHB1dE9iamVjdCBhdHRyaWJ1dGVzIgorbXNnc3RyICJubyBzZSBwdWVkZW4gYm9ycmFyIGxvcyBhdHJpYnV0b3MgZGUgq091dHB1dE9iamVjdLsuIgorCisjOiBpZl9weXRob24uYzo3MDgKK21zZ2lkICJzb2Z0c3BhY2UgbXVzdCBiZSBhbiBpbnRlZ2VyIgorbXNnc3RyICKrc29mdHNwYWNluyBkZWJlIHNlciB1biBlbnRlcm8uIgorCisjOiBpZl9weXRob24uYzo3MTYKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXRyaWJ1dG8gbm8gduFsaWRvLiIKKworIzogaWZfcHl0aG9uLmM6NzU1IGlmX3B5dGhvbi5jOjc2OQorbXNnaWQgIndyaXRlbGluZXMoKSByZXF1aXJlcyBsaXN0IG9mIHN0cmluZ3MiCittc2dzdHIgIqt3cml0ZWxpbmVzKCm7IHJlcXVpZXJlIHVuYSBsaXN0YSBkZSBjYWRlbmFzLiIKKworIzogaWZfcHl0aG9uLmM6ODk1Cittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjogZXJyb3IgZGUgaW5pY2lhbGl6YWNp824gZGUgb2JqZXRvcyBkZSBFL1MuIgorCisjOiBpZl9weXRob24uYzoxMDgwIGlmX3RjbC5jOjE0MDIKK21zZ2lkICJpbnZhbGlkIGV4cHJlc3Npb24iCittc2dzdHIgImV4cHJlc2nzbiBubyB24WxpZGEuIgorCisjOiBpZl9weXRob24uYzoxMDk0IGlmX3RjbC5jOjE0MDcKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgImV4cHJlc2lvbmVzIGRlc2FjdGl2YWRhcyBhbCBjb21waWxhci4iCisKKyM6IGlmX3B5dGhvbi5jOjExMDcKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJpbnRlbnRvIGRlIHJlZmVyaXJzZSBhIHVuIGJ1ZmZlciBzdXByaW1pZG8uIgorCisjOiBpZl9weXRob24uYzoxMTIyIGlmX3B5dGhvbi5jOjExNjMgaWZfcHl0aG9uLmM6MTIyNyBpZl90Y2wuYzoxMjE0Cittc2dpZCAibGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIgorbXNnc3RyICJu+m1lcm8gZGUgbGEgbO1uZWEgZnVlcmEgZGVsIHJhbmdvLiIKKworIzogaWZfcHl0aG9uLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICI8YnVmZmVyIG9iamVjdCAoZGVsZXRlZCkgYXQgJThsWD4iCittc2dzdHIgIjxvYmpldG8gq2J1ZmZlcrsgKHN1cHJpbWlkbykgZW4gJThsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjE0NTMgaWZfdGNsLmM6ODM2Cittc2dpZCAiaW52YWxpZCBtYXJrIG5hbWUiCittc2dzdHIgIm5vbWJyZSBkZSBtYXJjYSBubyB24WxpZG8iCisKKyM6IGlmX3B5dGhvbi5jOjE3MzMKK21zZ2lkICJubyBzdWNoIGJ1ZmZlciIKK21zZ3N0ciAibm8gZXhpc3RlIHRhbCBidWZmZXIiCisKKyM6IGlmX3B5dGhvbi5jOjE4MjEKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICJpbnRlbnRvIGRlIHJlZmVyaXJzZSBhIHVuYSB2ZW50YW5hIHN1cHJpbWlkYSIKKworIzogaWZfcHl0aG9uLmM6MTg2NgorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXRyaWJ1dG8gZGUgc/NsbyBsZWN0dXJhIgorCisjOiBpZl9weXRob24uYzoxODc5Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICJwb3NpY2nzbiBkZWwgY3Vyc29yIGZ1ZXJhIGRlbCBidWZmZXIiCisKKyM6IGlmX3B5dGhvbi5jOjE5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKGRlbGV0ZWQpIGF0ICUuOGxYPiIKK21zZ3N0ciAiPG9iamV0byB2ZW50YW5hIChzdXByaW1pZG8pIGVuICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTk2OAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IgorbXNnc3RyICI8b2JqZXRvIHZlbnRhbmEgKGRlc2Nvbm9jaWRvKSBlbiAlLjhsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyAlZD4iCittc2dzdHIgIjx2ZW50YW5hICVkPiIKKworIzogaWZfcHl0aG9uLmM6MjA0NgorbXNnaWQgIm5vIHN1Y2ggd2luZG93IgorbXNnc3RyICJubyBleGlzdGUgdGFsIHZlbnRhbmEiCisKKyM6IGlmX3B5dGhvbi5jOjIzMDcgaWZfcHl0aG9uLmM6MjM0MSBpZl9weXRob24uYzoyMzk2IGlmX3B5dGhvbi5jOjI0NjQKKyM6IGlmX3B5dGhvbi5jOjI1ODYgaWZfcHl0aG9uLmM6MjYzOCBpZl90Y2wuYzo2ODQgaWZfdGNsLmM6NzI5IGlmX3RjbC5jOjgwMworIzogaWZfdGNsLmM6ODczIGlmX3RjbC5jOjE5OTkKK21zZ2lkICJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICJObyBwdWVkbyBndWFyZGFyIGxhIGluZm9ybWFjafNuIHBhcmEgZGVzaGFjZXIuIgorCisjOiBpZl9weXRob24uYzoyMzA5IGlmX3B5dGhvbi5jOjI0MDMgaWZfcHl0aG9uLmM6MjQ3NQorbXNnaWQgImNhbm5vdCBkZWxldGUgbGluZSIKK21zZ3N0ciAibm8gcHVlZG8gc3VwcmltaXIgbGEgbO1uZWEiCisKKyM6IGlmX3B5dGhvbi5jOjIzNDYgaWZfcHl0aG9uLmM6MjQ5MSBpZl90Y2wuYzo2OTAgaWZfdGNsLmM6MjAyMQorbXNnaWQgImNhbm5vdCByZXBsYWNlIGxpbmUiCittc2dzdHIgIm5vIHB1ZWRvIHJlZW1wbGF6YXIgbGEgbO1uZWEiCisKKyM6IGlmX3B5dGhvbi5jOjI1MDkgaWZfcHl0aG9uLmM6MjU4OCBpZl9weXRob24uYzoyNjQ2Cittc2dpZCAiY2Fubm90IGluc2VydCBsaW5lIgorbXNnc3RyICJubyBwdWVkbyBpbnNlcnRhciBsYSBs7W5lYSIKKworIzogaWZfcHl0aG9uLmM6Mjc1MAorbXNnaWQgInN0cmluZyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAiTGEgY2FkZW5hIG5vIHB1ZWRlIGNvbnRlbmVyIHF1aWVicmVzIGRlIGztbmVhIgorCisjOiBpZl9ydWJ5LmM6NDIyCittc2dpZCAiIgorIkUyNjY6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBSdWJ5IGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjY2OiBMbyBzaWVudG8sIGVzdGUgY29tYW5kbyBlc3ThIGRlc2FjdGl2YWRvIHB1ZXMgbm8gc2UgcHVkbyBjYXJnYXIgbGEgIgorImJpYmxpb3RlY2EgZGUgUnVieS4iCisKKyM6IGlmX3J1YnkuYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIKK21zZ3N0ciAiRTI3MzogRWwgZXN0YXR1cyAlZCBkZSCrbG9uZ2ptcLsgbm8gZXMgY29ub2NpZG8uIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIkludGVyY2FtYmlhciBpbXBsZW1lbnRhY2nzbi9kZWZpbmljafNuIgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICJNb3N0cmFyIGxhIGNsYXNlIGJhc2UgZGUiCisKKyM6IGlmX3NuaWZmLmM6NjkKK21zZ2lkICJTaG93IG92ZXJyaWRkZW4gbWVtYmVyIGZ1bmN0aW9uIgorbXNnc3RyICJNb3N0cmFyIGxhIGZ1bmNp824gbWllbWJybyBxdWUgc2UgaGEgc29icmVwYXNhZG8gY29uIGVsIGPzZGlnbyBudWV2by4iCisKKyM6IGlmX3NuaWZmLmM6NzAKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGZpbGUiCittc2dzdHIgIlJlc3RhdXJhciBkZWwgZmljaGVybyIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAiUmVzdGF1cmFyIGRlbCBwcm95ZWN0byIKKworIzogaWZfc25pZmYuYzo3MworbXNnaWQgIlJldHJpZXZlIGZyb20gYWxsIHByb2plY3RzIgorbXNnc3RyICJSZXN0YXVyYXIgZGUgdG9kb3MgbG9zIHByb3llY3RvcyIKKworIzogaWZfc25pZmYuYzo3NAorbXNnaWQgIlJldHJpZXZlIgorbXNnc3RyICJSZXN0YXVyYXIiCisKKyM6IGlmX3NuaWZmLmM6NzUKK21zZ2lkICJTaG93IHNvdXJjZSBvZiIKK21zZ3N0ciAiTW9zdHJhciBlbCBvcu1nZW4gZGUgIgorCisjOiBpZl9zbmlmZi5jOjc2Cittc2dpZCAiRmluZCBzeW1ib2wiCittc2dzdHIgIkJ1c2NhciBz7W1ib2xvIgorCisjOiBpZl9zbmlmZi5jOjc3Cittc2dpZCAiQnJvd3NlIGNsYXNzIgorbXNnc3RyICJIb2plYXIgbGEgY2xhc2UiCisKKyM6IGlmX3NuaWZmLmM6NzgKK21zZ2lkICJTaG93IGNsYXNzIGluIGhpZXJhcmNoeSIKK21zZ3N0ciAiTW9zdHJhciBsYSBjbGFzZSBlbiBzdSBqZXJhcnF17WEiCisKKyM6IGlmX3NuaWZmLmM6NzkKK21zZ2lkICJTaG93IGNsYXNzIGluIHJlc3RyaWN0ZWQgaGllcmFyY2h5IgorbXNnc3RyICJNb3N0cmFyIGxhIGNsYXNlIGVuIGplcmFycXXtYSByZXN0cmluZ2lkYSIKKworIzogaWZfc25pZmYuYzo4MAorbXNnaWQgIlhyZWYgcmVmZXJzIHRvIgorbXNnc3RyICJYcmVmIHNlIHJlZmllcmUgYSIKKworIzogaWZfc25pZmYuYzo4MQorbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCittc2dzdHIgIlhyZWYgcmVmZXJpZGEgcG9yIgorCisjOiBpZl9zbmlmZi5jOjgyCittc2dpZCAiWHJlZiBoYXMgYSIKK21zZ3N0ciAiWHJlZiB0aWVuZSB1biIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiB1c2FkYSBwb3IiCisKKyM6IGlmX3NuaWZmLmM6ODQKK21zZ2lkICJTaG93IGRvY3Ugb2YiCittc2dzdHIgIk1vc3RyYXIgZG9jdSBkZSIKKworIzogaWZfc25pZmYuYzo4NQorbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgorbXNnc3RyICJHZW5lcmFyIGRvY3UgZGUiCisKKyM6IGlmX3NuaWZmLmM6OTcKK21zZ2lkICIiCisiQ2Fubm90IGNvbm5lY3QgdG8gU05pRkYrLiBDaGVjayBlbnZpcm9ubWVudCAoc25pZmZlbWFjcyBtdXN0IGJlIGZvdW5kIGluICIKKyIkUEFUSCkuXG4iCittc2dzdHIgIiIKKyJObyBwdWVkbyBjb25lY3Rhcm1lIGEgU05pRkYrLiBWZXJpZmlxdWUgZWwgZW50b3JubyAoq3NuaWZmZW1hY3O7IGRlYmUgZXN0YXIgIgorImVuICRQQVRIKS5cbiIKKworIzogaWZfc25pZmYuYzo0MjUKK21zZ2lkICJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiRTI3NDogU25pZmY6IEVycm9yIGFsIGxlZXIuIERlc2NvbmVjdGFkbyIKKworIzogaWZfc25pZmYuYzo1NTMKK21zZ2lkICJTTmlGRisgaXMgY3VycmVudGx5ICIKK21zZ3N0ciAiU05pRkYrIGVzdOEgYWN0dWFsbWVudGUgIgorCisjOiBpZl9zbmlmZi5jOjU1NQorbXNnaWQgIm5vdCAiCittc2dzdHIgIm5vICIKKworIzogaWZfc25pZmYuYzo1NTYKK21zZ2lkICJjb25uZWN0ZWQiCittc2dzdHIgImNvbmVjdGFkbyIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6IFBldGljafNuIGRlIFNOaUZGKyBkZXNjb25vY2lkYTogqyVzuyIKKworIzogaWZfc25pZmYuYzo2MDUKK21zZ2lkICJFMjc2OiBFcnJvciBjb25uZWN0aW5nIHRvIFNOaUZGKyIKK21zZ3N0ciAiRTI3NjogRXJyb3IgYWwgY29uZWN0YXJtZSBhIFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDA5Cittc2dpZCAiRTI3ODogU05pRkYrIG5vdCBjb25uZWN0ZWQiCittc2dzdHIgIkUyNzg6IFNOaUZGKyBubyBlc3ThIGNvbmVjdGFkbyIKKworIzogaWZfc25pZmYuYzoxMDE4Cittc2dpZCAiRTI3OTogTm90IGEgU05pRkYrIGJ1ZmZlciIKK21zZ3N0ciAiRTI3OTogTm8gZXMgdW4gq2J1ZmZlcrsgZGUgU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwODMKK21zZ2lkICJTbmlmZjogRXJyb3IgZHVyaW5nIHdyaXRlLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIlNuaWZmOiBlcnJvciBhbCBlc2NyaWJpci4gRGVzY29uZWN0YWRvIgorCisjOiBpZl90Y2wuYzo0MTgKK21zZ2lkICJpbnZhbGlkIGJ1ZmZlciBudW1iZXIiCittc2dzdHIgIm76bWVybyBkZSCrYnVmZmVyuyBubyB24WxpZG8iCisKKyM6IGlmX3RjbC5jOjQ2NCBpZl90Y2wuYzo5MzEgaWZfdGNsLmM6MTExMAorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIm5vIGltcGxlbWVudGFkbyBh+m4iCisKKyM6IGlmX3RjbC5jOjUwMQorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJvcGNp824gZGVzY29ub2NpZGEiCisKKyMgID8/PworIy4gPz8/CisjOiBpZl90Y2wuYzo3NzQKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgIm5vIHNlIHB1ZWRlKG4pIHBvbmVyIGxhKHMpIGztbmVhKHMpIgorCisjOiBpZl90Y2wuYzo4NDUKK21zZ2lkICJtYXJrIG5vdCBzZXQiCittc2dzdHIgIm1hcmNhIHNpbiBwb25lciIKKworIzogaWZfdGNsLmM6ODUxIGlmX3RjbC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicm93ICVkIGNvbHVtbiAlZCIKK21zZ3N0ciAiZmlsYSAlZCBjb2x1bW5hICVkIgorCisjOiBpZl90Y2wuYzo4ODEKK21zZ2lkICJjYW5ub3QgaW5zZXJ0L2FwcGVuZCBsaW5lIgorbXNnc3RyICJubyBzZSBwdWVkZSBpbnNlcnRhci9h8WFkaXIgbO1uZWEiCisKKyM6IGlmX3RjbC5jOjEyNjgKK21zZ2lkICJ1bmtub3duIGZsYWc6ICIKK21zZ3N0ciAiaW5kaWNhZG9yIGRlc2Nvbm9jaWRvOiAiCisKKyM6IGlmX3RjbC5jOjEzMzgKK21zZ2lkICJ1bmtub3duIHZpbU9wdGlvbiIKK21zZ3N0ciAiq3ZpbU9wdGlvbrsgZGVzY29ub2NpZGEiCisKKyM6IGlmX3RjbC5jOjE0MjMKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgImludGVycnVwY2nzbiBkZXNkZSBlbCB0ZWNsYWRvIgorCisjOiBpZl90Y2wuYzoxNDI4Cittc2dpZCAidmltIGVycm9yIgorbXNnc3RyICJlcnJvciBkZSB2aW0iCisKKyM6IGlmX3RjbC5jOjE0NzEKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIm5vIHB1ZWRvIGNyZWFyIGVsIGNvbWFuZG8gZGUgYnVmZmVyL3ZlbnRhbmE6IGVsIG9iamV0byBzZXLhIHN1cHJpbWlkbyIKKworIzogaWZfdGNsLmM6MTU0NQorbXNnaWQgIiIKKyJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyBpcyBhbHJlYWR5IGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIiIKKyJObyBwdWVkbyByZWdpc3RyYXIgZWwgY29tYW5kbyCrY2FsbGJhY2u7OiBFbCCrYnVmZmVyuyBvIGxhIHZlbnRhbmEgeWEgZnXpICIKKyJlbGltaW5hZG8uIgorCisjICBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIy4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgRmFtb3VzIGxhc3Qgd29yZD8KKyM6IGlmX3RjbC5jOjE1NjIKK21zZ2lkICIiCisiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IGNvcnJ1cHQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0uIgorIm9yZyIKK21zZ3N0ciAiIgorIkUyODA6IEVSUk9SIEZBVEFMIERFIFRDTDogv6GrcmVmbGlzdLsgY29ycnVwdGEhPyBQb3IgZmF2b3IsIGluZm9ybWUgZGUgZXN0byAiCisiYSB2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjE1NjMKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisiTm8gcHVlZG8gcmVnaXN0cmFyIGVsIGNvbWFuZG8gq2NhbGxiYWNruzogTm8gcHVlZG8gZW5jb250cmFyIGxhIHJlZmVyZW5jaWEgIgorImFsIKtidWZmZXK7IG8gbGEgdmVudGFuYS4iCisKKyM6IGlmX3RjbC5jOjE3MjQKK21zZ2lkICIiCisiRTU3MTogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFRjbCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisiRTU3MTogTG8gc2llbnRvLCBlc3RlIGNvbWFuZG8gZXN04SBkZXNhY3RpdmFkbyBwdWVzIG5vIHNlIHB1ZG8gY2FyZ2FyIGxhICIKKyJiaWJsaW90ZWNhIGRlIFRjbC4iCisKKyM6IGlmX3RjbC5jOjE4ODYKK21zZ2lkICIiCisiRTI4MTogVENMIEVSUk9SOiBleGl0IGNvZGUgaXMgbm90IGludCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS5vcmciCittc2dzdHIgIiIKKyJFMjgxOiBFUlJPUiBERSBUQ0w6IL+hZWwgY/NkaWdvIGRlIHNhbGlkYSBubyBlcyCraW50uyE/IFBvciBmYXZvciBpbmZvcm1lIGRlICIKKyJlc3RvIGEgdmltLWRldkB2aW0ub3JnIgorCisjOiBpZl90Y2wuYzoyMDA3Cittc2dpZCAiY2Fubm90IGdldCBsaW5lIgorbXNnc3RyICJubyBwdWVkbyBvYnRlbmVyIGxhIGztbmVhIgorCisjOiBpZl94Y21kc3J2LmM6MjI1Cittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAiSW5jYXBheiBkZSByZWdpc3RyYXIgdW4gbm9tYnJlIGRlIHNlcnZpZG9yIGRlIGNvbWFuZG9zIgorCisjOiBpZl94Y21kc3J2LmM6NDczCittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODogTm8gcHVkZSBlbnZpYXIgZWwgY29tYW5kbyBhbCBwcm9ncmFtYSBkZSBkZXN0aW5vIgorCisjOiBpZl94Y21kc3J2LmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzM6IEludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICJFNTczOiBFbCBJRCBkZWwgdXN1YXJpbyBkZWwgc2Vydmlkb3Igbm8gZXMgduFsaWRvOiCrJXO7LiIKKworIzogaWZfeGNtZHNydi5jOjExMTAKK21zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCittc2dzdHIgIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBpcyBiYWRseSBmb3JtZWQuICBEZWxldGVkISIKKworIzogbWFpbi5jOjYwCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk9wY2nzbiBkZXNjb25vY2lkYSIKKworIzogbWFpbi5jOjYyCittc2dpZCAiVG9vIG1hbnkgZWRpdCBhcmd1bWVudHMiCittc2dzdHIgIkRlbWFzaWFkb3MgYXJndW1lbnRvcyBkZSBlZGljafNuLiIKKworIzogbWFpbi5jOjY0Cittc2dpZCAiQXJndW1lbnQgbWlzc2luZyBhZnRlciIKK21zZ3N0ciAiRmFsdGEgZWwgYXJndW1lbnRvIGRlc3B16XMgZGUiCisKKyM6IG1haW4uYzo2NgorbXNnaWQgIkdhcmJhZ2UgYWZ0ZXIgb3B0aW9uIgorbXNnc3RyICJCYXN1cmEgZGVzcHXpcyBkZSBsYSBvcGNp824iCisKKyM6IG1haW4uYzo2OAorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiwgXCItYyBjb21tYW5kXCIgb3IgXCItLWNtZCBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICIiCisiRGVtYXNpYWRvcyBhcmd1bWVudG9zIHRhbGVzIGNvbW86IKsrY29tYW5kb7ssIKstYyBjb21hbmRvuyBvIKstLWNtZCBjb21hbmRvuy4iCisKKyM6IG1haW4uYzo3MAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgZm9yIgorbXNnc3RyICJBcmd1bWVudG8gbm8gduFsaWRvIHBhcmEiCisKKyM6IG1haW4uYzo0NjYKK21zZ2lkICJUaGlzIFZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlIGRpZmYgZmVhdHVyZS4iCittc2dzdHIgIkVzdGUgVmltIG5vIGhhIHNpZG8gY29tcGlsYWRvIGNvbiBsYSBjYXJhY3Rlcu1zdGljYSCrZGlmZrsuIgorCisjOiBtYWluLmM6OTMyCittc2dpZCAiQXR0ZW1wdCB0byBvcGVuIHNjcmlwdCBmaWxlIGFnYWluOiBcIiIKK21zZ3N0ciAiSW50ZW50byBkZSBhYnJpciBkZSBudWV2byBlbCBmaWNoZXJvIKtzY3JpcHS7OiCrIgorCisjOiBtYWluLmM6OTQxCittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICJObyBwdWVkbyBhYnJpciBwYXJhIGxlZXI6IKsiCisKKyM6IG1haW4uYzo5ODUKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIk5vIHB1ZWRvIGFicmlyIHBhcmEgZXNjcmliaXIgbGEgc2FsaWRhIGRlbCCrc2NyaXB0uzogqyIKKworIzogbWFpbi5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmlsZXMgdG8gZWRpdFxuIgorbXNnc3RyICIlZCBmaWNoZXJvcyBxdWUgZWRpdGFyXG4iCisKKyM6IG1haW4uYzoxMjMzCittc2dpZCAiVmltOiBXYXJuaW5nOiBPdXRwdXQgaXMgbm90IHRvIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiBBZHZlcnRlbmNpYTogbGEgc2FsaWRhIG5vIGVzIGEgdW4gdGVybWluYWxcbiIKKworIzogbWFpbi5jOjEyMzUKK21zZ2lkICJWaW06IFdhcm5pbmc6IElucHV0IGlzIG5vdCBmcm9tIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiBBZHZlcnRlbmNpYTogbGEgZW50cmFkYSBubyBlcyBkZXNkZSB1biB0ZXJtaW5hbFxuIgorCisjICBqdXN0IGluIGNhc2UuLgorIy4ganVzdCBpbiBjYXNlLi4KKyM6IG1haW4uYzoxMjk3Cittc2dpZCAicHJlLXZpbXJjIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiTO1uZWEgZGUgY29tYW5kb3MgYW50ZXIgZGUgq3ZpbXJjuyIKKworIzogbWFpbi5jOjEzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IE5vIHB1ZWRvIGxlZXIgZGVzZGUgqyVzuyIKKworIzogbWFpbi5jOjI0MTEKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk3hcyBpbmZvcm1hY2nzbiBjb246IKt2aW0gLWi7XG4iCisKKyM6IG1haW4uYzoyNDQ0Cittc2dpZCAiW2ZpbGUgLi5dICAgICAgIGVkaXQgc3BlY2lmaWVkIGZpbGUocykiCittc2dzdHIgIltmaWNoZXJvIC4uLl0gICBlZGl0YSBlbC9sb3MgZmljaGVybyhzKSBlc3BlY2lmaWNhZG8ocykiCisKKyM6IG1haW4uYzoyNDQ1Cittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAgbGVlIHRleHRvIGRlIGxhIGVudHJhZGEgZXN04W5kYXIiCisKKyM6IG1haW4uYzoyNDQ2Cittc2dpZCAiLXQgdGFnICAgICAgICAgIGVkaXQgZmlsZSB3aGVyZSB0YWcgaXMgZGVmaW5lZCIKK21zZ3N0ciAiLXQgq3RhZ7sgICAgICAgIGVkaXRhIGVsIGZpY2hlcm8gZG9uZGUgZXN04SBkZWZpbmlkbyCrdGFnuyIKKworIzogbWFpbi5jOjI0NDgKK21zZ2lkICItcSBbZXJyb3JmaWxlXSAgZWRpdCBmaWxlIHdpdGggZmlyc3QgZXJyb3IiCittc2dzdHIgIi1xIFtmaWNoLiBlcnIuXSBlZGl0YSBlbCBmaWNoZXJvIGNvbiBlbCBwcmltZXIgZXJyb3IiCisKKyM6IG1haW4uYzoyNDU3Cittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIlVzbzoiCisKKyM6IG1haW4uYzoyNDYwCittc2dpZCAiIHZpbSBbYXJndW1lbnRzXSAiCittc2dzdHIgIiB2aW0gW2FyZ3VtZW50b3NdIgorCisjOiBtYWluLmM6MjQ2NAorbXNnaWQgIiIKKyJcbiIKKyIgICBvcjoiCittc2dzdHIgIiIKKyJcbiIKKyIgIG86IgorCisjOiBtYWluLmM6MjQ2NworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudG9zOlxuIgorCisjOiBtYWluLmM6MjQ2OAorbXNnaWQgIi0tXHRcdFx0T25seSBmaWxlIG5hbWVzIGFmdGVyIHRoaXMiCittc2dzdHIgIi0tXHRcdFx0U/NsbyBub21icmVzIGRlIGZpY2hlcm9zIGRlc3B16XMgZGUgZXN0byIKKworIzogbWFpbi5jOjI0NzAKK21zZ2lkICItLWxpdGVyYWxcdFx0RG9uJ3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiLS1saXRlcmFsXHRcdE5vIGV4cGFuZGlyIGNvbW9kaW5lcyIKKworIzogbWFpbi5jOjI0NzMKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHRSZWdpc3RyYXIgZXN0ZSCrZ3ZpbbsgcGFyYSCrT0xFuyIKKworIzogbWFpbi5jOjI0NzQKK21zZ2lkICItdW5yZWdpc3Rlclx0XHRVbnJlZ2lzdGVyIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXVucmVnaXN0ZXJcdFx0U3VwcmltaXIgZWwgcmVnaXN0cm8gZGUgZ3ZpbSBwYXJhIE9MRSIKKworIzogbWFpbi5jOjI0NzcKK21zZ2lkICItZ1x0XHRcdFJ1biB1c2luZyBHVUkgKGxpa2UgXCJndmltXCIpIgorbXNnc3RyICItZ1x0XHRcdEVqZWN1dGFyIHVzYW5kbyBlbCBHVUkgKGNvbW8gq2d2aW27KSIKKworIzogbWFpbi5jOjI0NzgKK21zZ2lkICItZiAgb3IgIC0tbm9mb3JrXHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICIiCisiLWYgIG8gIC0tbm9mb3JrXHRQcmltZXIgcGxhbm86IE5vIHNlcGFyYXJzZSAoq2Zvcmu7KSBjdWFuZG8gc2UgaW5pY2lhIGxhICIKKyJpbnRlcmZhY2UgZ3LhZmljYSAoR1VJKS4iCisKKyM6IG1haW4uYzoyNDgwCittc2dpZCAiLXZcdFx0XHRWaSBtb2RlIChsaWtlIFwidmlcIikiCittc2dzdHIgIi12XHRcdFx0TW9kbyBWaSAoY29tbyCrdmm7KSIKKworIzogbWFpbi5jOjI0ODEKK21zZ2lkICItZVx0XHRcdEV4IG1vZGUgKGxpa2UgXCJleFwiKSIKK21zZ3N0ciAiLWVcdFx0XHRNb2RvIEV4IChjb21vIKtleLspIgorCisjOiBtYWluLmM6MjQ4MgorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHRNb2RvIHNpbGVuY2lvc28gbyCrYmF0Y2i7IChz82xvIHBhcmEgq2V4uykiCisKKyM6IG1haW4uYzoyNDg0Cittc2dpZCAiLWRcdFx0XHREaWZmIG1vZGUgKGxpa2UgXCJ2aW1kaWZmXCIpIgorbXNnc3RyICItZFx0XHRcdE1vZG8gq2RpZma7IChjb21vIKt2aW1kaWZmuykiCisKKyM6IG1haW4uYzoyNDg2Cittc2dpZCAiLXlcdFx0XHRFYXN5IG1vZGUgKGxpa2UgXCJldmltXCIsIG1vZGVsZXNzKSIKK21zZ3N0ciAiLXlcdFx0XHRNb2RvIGbhY2lsIChjb21vIKtldmltuywgc2luIG1vZG8pIgorCisjOiBtYWluLmM6MjQ4NworbXNnaWQgIi1SXHRcdFx0UmVhZG9ubHkgbW9kZSAobGlrZSBcInZpZXdcIikiCittc2dzdHIgIi1SXHRcdFx0TW9kbyBkZSBz82xvIGxlY3R1cmEgKGNvbW8gq3ZpZXe7KSIKKworIzogbWFpbi5jOjI0ODgKK21zZ2lkICItWlx0XHRcdFJlc3RyaWN0ZWQgbW9kZSAobGlrZSBcInJ2aW1cIikiCittc2dzdHIgIi1aXHRcdFx0TW9kbyByZXN0cmluZ2lkbyAoY29tbyCrcnZpbbspIgorCisjOiBtYWluLmM6MjQ4OQorbXNnaWQgIi1tXHRcdFx0TW9kaWZpY2F0aW9ucyAod3JpdGluZyBmaWxlcykgbm90IGFsbG93ZWQiCittc2dzdHIgIi1tXHRcdFx0TW9kaWZpY2FjaW9uZXMgbm8gcGVybWl0aWRhcyAoZXNjcml0dXJhIGRlIGZpY2hlcm9zKSIKKworIzogbWFpbi5jOjI0OTAKK21zZ2lkICItTVx0XHRcdE1vZGlmaWNhdGlvbnMgaW4gdGV4dCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLU1cdFx0XHRNb2RpZmljYWNpb25lcyBlbiBlbCB0ZXh0byBubyBwZXJtaXRpZGFzIgorCisjOiBtYWluLmM6MjQ5MQorbXNnaWQgIi1iXHRcdFx0QmluYXJ5IG1vZGUiCittc2dzdHIgIi1iXHRcdFx0TW9kbyBiaW5hcmlvIgorCisjOiBtYWluLmM6MjQ5MworbXNnaWQgIi1sXHRcdFx0TGlzcCBtb2RlIgorbXNnc3RyICItbFx0XHRcdE1vZG8gbGlzcCIKKworIzogbWFpbi5jOjI0OTUKK21zZ2lkICItQ1x0XHRcdENvbXBhdGlibGUgd2l0aCBWaTogJ2NvbXBhdGlibGUnIgorbXNnc3RyICItQ1x0XHRcdENvbXBhdGlibGUgY29uIFZpOiAnY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyNDk2Cittc2dpZCAiLU5cdFx0XHROb3QgZnVsbHkgVmkgY29tcGF0aWJsZTogJ25vY29tcGF0aWJsZSciCittc2dzdHIgIi1OXHRcdFx0Tm8gdG90YWxtZW50ZSBjb21wYXRpYmxlIGNvbiBWaTogJ25vY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyNDk3Cittc2dpZCAiLVZbTl1cdFx0VmVyYm9zZSBsZXZlbCIKK21zZ3N0ciAiLVZbTl1cdFx0Tml2ZWwgZGUgZGV0YWxsZSBkZSBsYSBlamVjdWNp824iCisKKyM6IG1haW4uYzoyNDk4Cittc2dpZCAiLURcdFx0XHREZWJ1Z2dpbmcgbW9kZSIKK21zZ3N0ciAiLURcdFx0XHRNb2RvIGRlIGRlcHVyYWNp824iCisKKyM6IG1haW4uYzoyNDk5Cittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHRTaW4gZmljaGVybyBkZSBpbnRlcmNhbWJpbywgdXNhIHPzbG8gbGEgbWVtb3JpYSIKKworIzogbWFpbi5jOjI1MDAKK21zZ2lkICItclx0XHRcdExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdCIKK21zZ3N0ciAiLXJcdFx0XHREYXIgdW5hIGxpc3RhIGRlIGxvcyBmaWNoZXJvIGRlIGludGVyY2FtYmlvIHkgc2FsaXIiCisKKyM6IG1haW4uYzoyNTAxCittc2dpZCAiLXIgKHdpdGggZmlsZSBuYW1lKVx0UmVjb3ZlciBjcmFzaGVkIHNlc3Npb24iCittc2dzdHIgIi1yIChjb24gbm9tYnJlIGRlbCBmaWNoZXJvKVx0UmVjdXBlcmFyIHNlc2nzbiBmYWxsaWRhIgorCisjOiBtYWluLmM6MjUwMgorbXNnaWQgIi1MXHRcdFx0U2FtZSBhcyAtciIKK21zZ3N0ciAiLUxcdFx0XHRJZ3VhbCBxdWUgLXIiCisKKyM6IG1haW4uYzoyNTA0Cittc2dpZCAiLWZcdFx0XHREb24ndCB1c2UgbmV3Y2xpIHRvIG9wZW4gd2luZG93IgorbXNnc3RyICItZlx0XHRcdE5vIHVzYXIgq25ld2NsabsgcGFyYSBhYnJpciBsYSB2ZW50YW5hIgorCisjOiBtYWluLmM6MjUwNQorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPGRpc3Bvc2l0aXZvPlx0XHRVc2UgPGRpc3Bvc2l0aXZvPiBwYXJhIEUvUyIKKworIzogbWFpbi5jOjI1MDgKK21zZ2lkICItQVx0XHRcdHN0YXJ0IGluIEFyYWJpYyBtb2RlIgorbXNnc3RyICItQVx0XHRcdEluaWNpYXIgZW4gbW9kbyDhcmFiZSIKKworIzogbWFpbi5jOjI1MTEKK21zZ2lkICItSFx0XHRcdFN0YXJ0IGluIEhlYnJldyBtb2RlIgorbXNnc3RyICItSFx0XHRcdEluaWNpYXIgZW4gbW9kbyBoZWJyZW8iCisKKyM6IG1haW4uYzoyNTE0Cittc2dpZCAiLUZcdFx0XHRTdGFydCBpbiBGYXJzaSBtb2RlIgorbXNnc3RyICItRlx0XHRcdEluaWNpYXIgZW4gbW9kbyBwZXJzYSAoZmFyc2kpIgorCisjOiBtYWluLmM6MjUxNgorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW5hbD5cdERldGVybWluYSBlbCB0aXBvIGRlIHRlcm1pbmFsIGEgPDx0ZXJtaW5hbD4+IgorCisjOiBtYWluLmM6MjUxNworbXNnaWQgIi11IDx2aW1yYz5cdFx0VXNlIDx2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLnZpbXJjIgorbXNnc3RyICItdSA8dmltcmM+XHRcdFVzYSA8dmltcmM+IGVuIGx1Z2FyIGRlIGN1YWxxdWllciAudmltcmMiCisKKyM6IG1haW4uYzoyNTE5Cittc2dpZCAiLVUgPGd2aW1yYz5cdFx0VXNlIDxndmltcmM+IGluc3RlYWQgb2YgYW55IC5ndmltcmMiCittc2dzdHIgIi1VIDxndmltcmM+XHRcdFVzYSA8Z3ZpbXJjPiBlbiBsdWdhciBkZSBjdWFscXVpZXIgLmd2aW1yYyIKKworIzogbWFpbi5jOjI1MjEKK21zZ2lkICItLW5vcGx1Z2luXHRcdERvbid0IGxvYWQgcGx1Z2luIHNjcmlwdHMiCittc2dzdHIgIi0tbm9wbHVnaW5cdFx0Tm8gY2FyZ2EgbG9zIKtwbHVnaW4gc2NyaXB0c7siCisKKyM6IG1haW4uYzoyNTIyCittc2dpZCAiLW9bTl1cdFx0T3BlbiBOIHdpbmRvd3MgKGRlZmF1bHQ6IG9uZSBmb3IgZWFjaCBmaWxlKSIKK21zZ3N0ciAiLW9bTl1cdFx0QWJyZSBOIHZlbnRhbmFzICh2YWxvciBwcmVkZXRlcm1pbmFkbzogdW5hIHBvciBmaWNoZXJvKSIKKworIzogbWFpbi5jOjI1MjMKK21zZ2lkICItT1tOXVx0XHRMaWtlIC1vIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5IgorbXNnc3RyICItT1tOXVx0XHRDb21vIKstb7sgcGVybyBkaXZpZGUgbGFzIHZlbnRhbmFzIHZlcnRpY2FsbWVudGUuIgorCisjOiBtYWluLmM6MjUyNAorbXNnaWQgIitcdFx0XHRTdGFydCBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiK1x0XHRcdENvbWllbnphIGFsIGZpbmFsIGRlbCBmaWNoZXJvIgorCisjOiBtYWluLmM6MjUyNQorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8bG51bT5cdFx0Q29taWVuemEgZW4gbGEgbO1uZWEgPGxudW0+IgorCisjOiBtYWluLmM6MjUyNworbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIi0tY21kIDxjb21hbmRvPlx0RWplY3V0YSA8Y29tYW5kbz4gYW50ZXMgZGUgY2FyZ2FyIGFsZ/puIGZpY2hlcm8gdmltcmMiCisKKyM6IG1haW4uYzoyNTI5Cittc2dpZCAiLWMgPGNvbW1hbmQ+XHRcdEV4ZWN1dGUgPGNvbW1hbmQ+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1jIDxjb21hbmRvPlx0XHRFamVjdXRhIDxjb21hbmRvPiBkZXNwdelzIGRlIGNhcmdhciBlbCBwcmltZXIgZmljaGVybyIKKworIzogbWFpbi5jOjI1MzAKK21zZ2lkICItUyA8c2Vzc2lvbj5cdFx0U291cmNlIGZpbGUgPHNlc3Npb24+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIiIKKyItUyA8c2VzafNuPlx0XHRFamVjdXRhIGxvcyBjb21hbmRvcyBkZWwgZmljaGVybyA8c2VzafNuPiBkZXNwdelzXG4iCisiICAgICAgICAgICBcdFx0ZGUgY2FyZ2FyIGVsIHByaW1lciBmaWNoZXJvIgorCisjOiBtYWluLmM6MjUzMQorbXNnaWQgIi1zIDxzY3JpcHRpbj5cdFJlYWQgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBmaWxlIDxzY3JpcHRpbj4iCittc2dzdHIgIi1zIDxzY3JpcHRpbj5cdExlZSBsb3MgY29tYW5kb3MgZW4gbW9kbyBOb3JtYWwgZGVsIGZpY2hlcm8gPHNjcmlwdGluPiIKKworIzogbWFpbi5jOjI1MzIKK21zZ2lkICItdyA8c2NyaXB0b3V0Plx0QXBwZW5kIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICIiCisiLXcgPHNjcmlwdG91dD5cdEHxYWRlIHRvZG9zIGxvcyBjb21hbmRvcyBlc2NyaXRvcyBhbCBmaWNoZXJvIDxzY3JpcHRvdXQ+IgorCisjOiBtYWluLmM6MjUzMworbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiIgorIi1XIDxzY3JpcHRvdXQ+XHRHcmFiYSB0b2RvcyBsb3MgY29tYW5kb3MgZXNjcml0b3MgYWwgZmljaGVybyA8c2NyaXB0b3V0PiIKKworIzogbWFpbi5jOjI1MzUKK21zZ2lkICIteFx0XHRcdEVkaXQgZW5jcnlwdGVkIGZpbGVzIgorbXNnc3RyICIteFx0XHRcdEVkaXRhIGZpY2hlcm9zIGNpZnJhZG9zIgorCisjOiBtYWluLmM6MjUzOQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0Q29ubmVjdCB2aW0gdG8gdGhpcyBwYXJ0aWN1bGFyIFgtc2VydmVyIgorbXNnc3RyICItZGlzcGxheSA8cGFudGFsbGE+XHRDb25lY3RhIHZpbSBhIGVzdGUgc2Vydmlkb3IgWDExIGVuIHBhcnRpY3VsYXIiCisKKyM6IG1haW4uYzoyNTQxCittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHRObyBzZSBjb25lY3RhIGFsIHNlcnZpZG9yIFgxMSIKKworIzogbWFpbi5jOjI1NDQKK21zZ2lkICItLXJlbW90ZSA8ZmlsZXM+XHRFZGl0IDxmaWxlcz4gaW4gYSBWaW0gc2VydmVyIGlmIHBvc3NpYmxlIgorbXNnc3RyICIiCisiLS1yZW1vdGUgPGZpY2hlcm9zPlx0RWRpdGEgbG9zIDxmaWNoZXJvcz4gZW4gdW4gc2Vydmlkb3IgVmltIHNpIGVzIHBvc2libGUuIgorCisjOiBtYWluLmM6MjU0NQorbXNnaWQgIi0tcmVtb3RlLXNpbGVudCA8ZmlsZXM+ICBTYW1lLCBkb24ndCBjb21wbGFpbiBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIiCittc2dzdHIgIiIKKyItLXJlbW90ZS1zaWxlbnQgPGZpY2hlcm9zPiAgTG8gbWlzbW8gcGVybyBubyBzZSBxdWVqYSBzaSBubyBleGlzdGUgdW4gIgorInNlcnZpZG9yIGRpc3BvbmlibGUuIgorCisjOiBtYWluLmM6MjU0NgorbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcz4gIEFzIC0tcmVtb3RlIGJ1dCB3YWl0IGZvciBmaWxlcyB0byBoYXZlIGJlZW4gZWRpdGVkIgorbXNnc3RyICIiCisiLS1yZW1vdGUtd2FpdCA8ZmljaGVyb3M+XHRDb21vIC0tcmVtb3RlIHBlcm8gZXNwZXJhIGEgcXVlIGxvcyBmaWNoZXJvcyAiCisidGVybWluZW4gZGUgZWRpdGFyc2UiCisKKyM6IG1haW4uYzoyNTQ3Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWNoZXJvcz4gIExvIG1pc21vIHBlcm8gbm8gc2UgcXVlamEgc2kgbm8gaGF5IHVuICIKKyJzZXJ2aWRvciBkaXNwb25pYmxlLiIKKworIzogbWFpbi5jOjI1NDgKK21zZ2lkICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0U2VuZCA8a2V5cz4gdG8gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZS1zZW5kIDx0ZWNsYXM+XHRFbnbtYSA8dGVjbGFzPiBhIHVuIHNlcnZpZG9yIFZpbSB5IHNhbGUiCisKKyM6IG1haW4uYzoyNTQ5Cittc2dpZCAiLS1yZW1vdGUtZXhwciA8ZXhwcj5cdEV2YWx1YXRlIDxleHByPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIHByaW50IHJlc3VsdCIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFs+mEgPGV4cHI+IGVuIHNlcnZpZG9yIFZpbSBlIGltcHJpbWUgZWwgcmVzdWx0YWRvIgorCisjOiBtYWluLmM6MjU1MAorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICIiCisiLS1zZXJ2ZXJsaXN0XHRcdEVtaXRlIHVuYSBsaXN0YSBkZSBsb3Mgc2Vydmlkb3JlcyBWaW0gZGlzcG9uaWJsZXMgeSBzYWxlIgorCisjOiBtYWluLmM6MjU1MQorbXNnaWQgIi0tc2VydmVybmFtZSA8bmFtZT5cdFNlbmQgdG8vYmVjb21lIHRoZSBWaW0gc2VydmVyIDxuYW1lPiIKK21zZ3N0ciAiIgorIi0tc2VydmVybmFtZSA8bm9tYnJlPlx0RW527WEgYS9zZSBjb252aWVydGUgZW4gZWwgc2Vydmlkb3IgVmltIGRlIG5vbWJyZSAiCisiPG5vbWJyZT4iCisKKyM6IG1haW4uYzoyNTU0Cittc2dpZCAiLWkgPHZpbWluZm8+XHRcdFVzZSA8dmltaW5mbz4gaW5zdGVhZCBvZiAudmltaW5mbyIKK21zZ3N0ciAiLWkgPHZpbWluZm8+XHRcdFVzYSA8dmltaW5mbz4gZW4gbHVnYXIgZGUgLnZpbWluZm8iCisKKyM6IG1haW4uYzoyNTU2Cittc2dpZCAiLWggIG9yICAtLWhlbHBcdFByaW50IEhlbHAgKHRoaXMgbWVzc2FnZSkgYW5kIGV4aXQiCittc2dzdHIgIi1oICBvciAgLS1oZWxwXHRJbXByaW1lIGxhIGF5dWRhIGRlIGNvbWFuZG9zIChlc3RlIG1lbnNhamUpIHkgdGVybWluYS4iCisKKyM6IG1haW4uYzoyNTU3Cittc2dpZCAiLS12ZXJzaW9uXHRcdFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQiCittc2dzdHIgIi0tdmVyc2lvblx0XHRJbXByaW1lIGxhIGluZm9ybWFjafNuIGRlIHZlcnNp824geSB0ZXJtaW5hLiIKKworIzogbWFpbi5jOjI1NjEKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoTW90aWYgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudG9zIHJlY29ub2NpZG9zIHBvciBndmltICh2ZXJzafNuIE1vdGlmKTpcbiIKKworIzogbWFpbi5jOjI1NjUKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAobmVYdGF3IHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnRvcyByZWNvbm9jaWRvcyBwb3IgZ3ZpbSAodmVyc2nzbiBuZVh0YXcpOlxuIgorCisjOiBtYWluLmM6MjU2NworbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChBdGhlbmEgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudG9zIHJlY29ub2NpZG9zIHBvciBndmltICh2ZXJzafNuIEF0aGVuYSk6XG4iCisKKyM6IG1haW4uYzoyNTcxCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiIKK21zZ3N0ciAiLWRpc3BsYXkgPHBhbnRhbGxhPlx0RWplY3V0YSB2aW0gZW4gPHBhbnRhbGxhPiIKKworIzogbWFpbi5jOjI1NzIKK21zZ2lkICItaWNvbmljXHRcdFN0YXJ0IHZpbSBpY29uaWZpZWQiCittc2dzdHIgIi1pY29uaWNcdFx0QXJyYW5jYSB2aW0gq2ljb25pemFkb7siCisKKyM6IG1haW4uYzoyNTc0Cittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG5vbWJyZT5cdFx0VXNhIHVuIHJlY3Vyc28gY29tbyBzaSB2aW0gZnVlc2UgPG5vbWJyZT4iCisKKyM6IG1haW4uYzoyNTc1Cittc2dpZCAiXHRcdFx0ICAoVW5pbXBsZW1lbnRlZClcbiIKK21zZ3N0ciAiXHRcdFx0ICAoU2luIGltcGxlbWVudGFyKVxuIgorCisjOiBtYWluLmM6MjU3NworbXNnaWQgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciB0aGUgYmFja2dyb3VuZCAoYWxzbzogLWJnKSIKK21zZ3N0ciAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNhIDxjb2xvcj4gcGFyYSBlbCBmb25kbyAodGFtYmnpbjogLWJnKSIKKworIzogbWFpbi5jOjI1NzgKK21zZ2lkICItZm9yZWdyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mZykiCittc2dzdHIgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzYSA8Y29sb3I+IHBhcmEgZWwgdGV4dG8gbm9ybWFsICh0YW1iaeluOiAtZmcpIgorCisjOiBtYWluLmM6MjU3OSBtYWluLmM6MjU5OQorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiIgorIi1mb250IDx0aXBvPlx0XHRVc2EgPGZ1ZW50ZSBkZSBpbXByZXNp824+IHBhcmEgZWwgdGV4dG8gbm9ybWFsICh0YW1iaeluOiAtZm4pIgorCisjOiBtYWluLmM6MjU4MAorbXNnaWQgIi1ib2xkZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGJvbGQgdGV4dCIKK21zZ3N0ciAiLWJvbGRmb250IDx0aXBvPlx0VXNhIDxmdWVudGUgZGUgaW1wcmVzafNuPiBwYXJhIHRleHRvIGVuIG5lZ3JpdGEiCisKKyM6IG1haW4uYzoyNTgxCittc2dpZCAiLWl0YWxpY2ZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBpdGFsaWMgdGV4dCIKK21zZ3N0ciAiLWl0YWxpY2ZvbnQgPHRpcG8+XHRVc2EgPGZ1ZW50ZSBkZSBpbXByZXNp824+IHBhcmEgdGV4dG8gZW4gY3Vyc2l2YSIKKworIzogbWFpbi5jOjI1ODIgbWFpbi5jOjI2MDAKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIiIKKyItZ2VvbWV0cnkgPGdlb20+XHRVc2EgPGdlb20+IHBhcmEgbGEgZ2VvbWV0cu1hIGluaWNpYWwgKHRhbWJp6W46IC1nZW9tKSIKKworIzogbWFpbi5jOjI1ODMKK21zZ2lkICItYm9yZGVyd2lkdGggPHdpZHRoPlx0VXNlIGEgYm9yZGVyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1idykiCittc2dzdHIgIi1ib3JkZXJ3aWR0aCA8YW5jaG8+XHRVc2EgdW4gYW5jaG8gZGUgYm9yZGUgZGUgPGFuY2hvPiAodGFtYmnpbjogLWJ3KSIKKworIzogbWFpbi5jOjI1ODQKK21zZ2lkICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgVXNlIGEgc2Nyb2xsYmFyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1zdykiCittc2dzdHIgIiIKKyItc2Nyb2xsYmFyd2lkdGggPGFuY2hvPiAgVXNhIHVuYSBiYXJyYSBkZSBkZXNwbGF6YW1pZW50byBkZSBhbmNobyA8YW5jaG8+ICIKKyIodGFtYmnpbjogLXN3KSIKKworIzogbWFpbi5jOjI1ODYKK21zZ2lkICItbWVudWhlaWdodCA8aGVpZ2h0Plx0VXNlIGEgbWVudSBiYXIgaGVpZ2h0IG9mIDxoZWlnaHQ+IChhbHNvOiAtbWgpIgorbXNnc3RyICIiCisiLW1lbnVoZWlnaHQgPGFsdD5cdFVzYSB1bmEgYmFycmEgZGUgbWVu+iBkZSBhbHR1cmEgPGFsdD4gKHRhbWJp6W46IC1taCkiCisKKyM6IG1haW4uYzoyNTg4IG1haW4uYzoyNjAxCittc2dpZCAiLXJldmVyc2VcdFx0VXNlIHJldmVyc2UgdmlkZW8gKGFsc286IC1ydikiCittc2dzdHIgIi1yZXZlcnNlXHRcdFVzYXIgdu1kZW8gaW52ZXJzbyAodGFtYmnpbjogLXJ2KSIKKworIzogbWFpbi5jOjI1ODkKK21zZ2lkICIrcmV2ZXJzZVx0XHREb24ndCB1c2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogK3J2KSIKK21zZ3N0ciAiK3JldmVyc2VcdFx0Tm8gdXNhciB27WRlbyBpbnZlcnNvICh0YW1iaeluOiArcnYpIgorCisjOiBtYWluLmM6MjU5MAorbXNnaWQgIi14cm0gPHJlc291cmNlPlx0U2V0IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UiCittc2dzdHIgIi14cm0gPHJlY3Vyc28+XHRFc3RhYmxlY2UgZWwgcmVjdXJzbyBlc3BlY2lmaWNhZG8iCisKKyM6IG1haW4uYzoyNTkzCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKFJJU0MgT1MgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudG9zIHJlY29ub2NpZG9zIHBvciBndmltICh2ZXJzafNuIHBhcmEgUklTQyBPUyk6XG4iCisKKyM6IG1haW4uYzoyNTk0Cittc2dpZCAiLS1jb2x1bW5zIDxudW1iZXI+XHRJbml0aWFsIHdpZHRoIG9mIHdpbmRvdyBpbiBjb2x1bW5zIgorbXNnc3RyICItLWNvbHVtbnMgPG76bWVybz5cdEFuY2h1cmEgaW5pY2lhbCBkZSBsYSB2ZW50YW5hLCBlbiBjb2x1bW5hcyIKKworIzogbWFpbi5jOjI1OTUKK21zZ2lkICItLXJvd3MgPG51bWJlcj5cdEluaXRpYWwgaGVpZ2h0IG9mIHdpbmRvdyBpbiByb3dzIgorbXNnc3RyICItLXJvd3MgPG76bWVybz5cdEFsdHVyYSBpbmljaWFsIGRlIGxhIHZlbnRhbmEsIGVuIGZpbGFzIgorCisjOiBtYWluLmM6MjU5OAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnRvcyByZWNvbm9jaWRvcyBwb3IgZ3ZpbSAodmVyc2nzbiBHVEsrKTpcbiIKKworIzogbWFpbi5jOjI2MDIKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IChhbHNvOiAtLWRpc3BsYXkpIgorbXNnc3RyICItZGlzcGxheSA8cGFudGFsbGE+XHRFamVjdXRhIHZpbSBlbiA8cGFudGFsbGE+ICh0YW1iaeluOiAtLWRpc3BsYXkpIgorCisjOiBtYWluLmM6MjYwNAorbXNnaWQgIi0tcm9sZSA8cm9sZT5cdFNldCBhIHVuaXF1ZSByb2xlIHRvIGlkZW50aWZ5IHRoZSBtYWluIHdpbmRvdyIKK21zZ3N0ciAiIgorIi0tcm9sZSA8cm9sZT5cdERlZmluZSB1biByb2wg+m5pY28gcGFyYSBpZGVudGlmaWNhciBsYSB2ZW50YW5hIHByaW5jaXBhbC4iCisKKyM6IG1haW4uYzoyNjA2Cittc2dpZCAiLS1zb2NrZXRpZCA8eGlkPlx0T3BlbiBWaW0gaW5zaWRlIGFub3RoZXIgR1RLIHdpZGdldCIKK21zZ3N0ciAiLS1zb2NrZXRpZCA8eGlkPlx0QWJyZSBhIFZpbSBkZW50cm8gZGUgb3RybyCrd2lkZ2V0uyBHVEsuIgorCisjOiBtYWluLmM6MjYwOQorbXNnaWQgIi1QIDxwYXJlbnQgdGl0bGU+XHRPcGVuIFZpbSBpbnNpZGUgcGFyZW50IGFwcGxpY2F0aW9uIgorbXNnc3RyICItUCA8dO10dWxvIHZlbnRhbmEgcGFkcmU+XHRBYnJpciBhIFZpbSBkZW50cm8gZGUgbGEgYXBsaWNhY2nzbiBwYWRyZS4iCisKKyM6IG1haW4uYzoyODQ3Cittc2dpZCAiTm8gZGlzcGxheSIKK21zZ3N0ciAiTm8gaGF5IHVuYSB2ZW50YW5hIgorCisjICBGYWlsZWQgdG8gc2VuZCwgYWJvcnQuCisjLiBGYWlsZWQgdG8gc2VuZCwgYWJvcnQuCisjOiBtYWluLmM6Mjg2MgorbXNnaWQgIjogU2VuZCBmYWlsZWQuXG4iCittc2dzdHIgIjogRmFsbPMgZWwgZW52aW8uXG4iCisKKyMgIExldCB2aW0gc3RhcnQgbm9ybWFsbHkuCisjLiBMZXQgdmltIHN0YXJ0IG5vcm1hbGx5LgorIzogbWFpbi5jOjI4NjgKK21zZ2lkICI6IFNlbmQgZmFpbGVkLiBUcnlpbmcgdG8gZXhlY3V0ZSBsb2NhbGx5XG4iCittc2dzdHIgIiIKKyI6IEZhbGzzIGVsIGluaWNpbyBkZSBzZXNp824gcmVtb3RhICirc2VuZLspLiBJbnRlbnRhZG8gdW5hIGVqZWN1Y2nzbiBsb2NhbC5cbiIKKworIzogbWFpbi5jOjI5MDYgbWFpbi5jOjI5MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgb2YgJWQgZWRpdGVkIgorbXNnc3RyICIlZCBkZSAlZCBlZGl0YWRvcyIKKworIzogbWFpbi5jOjI5NDkKK21zZ2lkICJObyBkaXNwbGF5OiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICJObyBoYXkgdW5hIHZlbnRhbmEgZW4gZWwgZGVzdGlubzogRWwgZW52aW8gZGUgbGEgZXhwcmVzafNuIGZhbGzzLlxuIgorCisjOiBtYWluLmM6Mjk2MQorbXNnaWQgIjogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiBGYWxs8yBlbCBlbnZpbyBkZSBsYSBleHByZXNp824uXG4iCisKKyM6IG1hcmsuYzo3MDkKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIk5vIGhheSBuaW5ndW5hIG1hcmNhIGZpamFkYSIKKworIzogbWFyay5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgzOiBObyBtYXJrcyBtYXRjaGluZyBcIiVzXCIiCittc2dzdHIgIkUyODM6IE5vIGhheSBtYXJjYXMgcXVlIGNvaW5jaWRhbiBjb24gqyVzuyIKKworIyAgSGlnaGxpZ2h0IHRpdGxlCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo3MjIKK21zZ2lkICIiCisiXG4iCisibWFyayBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisibWFyY2EgbO1uZWEgIGNvbCBmaWNoZXJvL3RleHRvIgorCisjICBIaWdobGlnaHQgdGl0bGUKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjc2MAorbXNnaWQgIiIKKyJcbiIKKyIganVtcCBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiIHNhbHRvIGztbmVhICBjb2wgZmljaGVyby90ZXh0byIKKworIyAgSGlnaGxpZ2h0IHRpdGxlCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo4MDUKK21zZ2lkICIiCisiXG4iCisiY2hhbmdlIGxpbmUgIGNvbCB0ZXh0IgorbXNnc3RyICIiCisiXG4iCisibWFyY2EgbO1uZWEgIGNvbCBmaWNoZXJvL3RleHRvIgorCisjOiBtYXJrLmM6MTI4MQorbXNnaWQgIiIKKyJcbiIKKyIjIEZpbGUgbWFya3M6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIE1hcmNhcyBlbiBlbCBmaWNoZXJvOlxuIgorCisjICBXcml0ZSB0aGUganVtcGxpc3Qgd2l0aCAtJworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMzE2Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIExpc3RhIGRlIHNhbHRvcyAoZWwgbeFzIHJlY2llbnRlIHZhIHByaW1lcm8pOlxuIgorCisjOiBtYXJrLmM6MTQxMgorbXNnaWQgIiIKKyJcbiIKKyIjIEhpc3Rvcnkgb2YgbWFya3Mgd2l0aGluIGZpbGVzIChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgSGlzdG9yaWEgZGUgbGFzIG1hcmNhcyBlbiBsb3MgZmljaGVyb3MgKGRlIGxhIG3hcyByZWNpZW50ZSBhIGxhIG3hcyAiCisiYW50aWd1YSk6XG4iCisKKyM6IG1hcmsuYzoxNTAxCittc2dpZCAiTWlzc2luZyAnPiciCittc2dzdHIgIkZhbHRhIKs+uyIKKworIzogbWJ5dGUuYzo0NjcKK21zZ2lkICJFNTQzOiBOb3QgYSB2YWxpZCBjb2RlcGFnZSIKK21zZ3N0ciAiRTU0MzogTm8gZXMgdW5hIHDhZ2luYSBkZSBj82RpZ28gduFsaWRhLiIKKworIzogbWJ5dGUuYzo0NDMxCittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IE5vIHNlIHB1ZWRlbiBmaWphciBsb3MgdmFsb3JlcyBJQyIKKworIzogbWJ5dGUuYzo0NTgzCittc2dpZCAiRTI4NTogRmFpbGVkIHRvIGNyZWF0ZSBpbnB1dCBjb250ZXh0IgorbXNnc3RyICJFMjg1OiBGYWxs8yBsYSBjcmVhY2nzbiBkZWwgY29udGV4dG8gZGUgZW50cmFkYSIKKworIzogbWJ5dGUuYzo0NzQxCittc2dpZCAiRTI4NjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgbWV0aG9kIgorbXNnc3RyICJFMjg2OiBGYWxs8yBsYSBhcGVydHVyYSBkZWwgbel0b2RvIGRlIGVudHJhZGEiCisKKyM6IG1ieXRlLmM6NDc1MgorbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4NzogQWR2ZXJ0ZW5jaWE6IE5vIHB1ZGUgY3JlYXIgdW4gY2FsbGJhY2wgZGUgZGVzdHJ1Y2Np824gYWwgSU0uIgorCisjOiBtYnl0ZS5jOjQ3NTgKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODogZWwgbel0b2RvIGRlIGVudHJhZGEgbm8gYWRtaXRlIG5pbmf6biBlc3RpbG8iCisKKyM6IG1ieXRlLmM6NDgxNQorbXNnaWQgIkUyODk6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgbXkgcHJlZWRpdCB0eXBlIgorbXNnc3RyICJFMjg5OiBFbCBt6XRvZG8gZGUgZW50cmFkYSBubyBzb3BvcnRhIG1pIHRpcG8gZGUgcHJlZWRpY2nzbi4iCisKKyM6IG1ieXRlLmM6NDg4OQorbXNnaWQgIkUyOTA6IG92ZXItdGhlLXNwb3Qgc3R5bGUgcmVxdWlyZXMgZm9udHNldCIKK21zZ3N0ciAiRTI5MDogRWwgZXN0aWxvIKtzb2JyZSBlbCBwdW50b7sgcmVxdWllcmUgZGVsIHVzbyBkZSB1biCrZm9udHNldLsuIgorCisjOiBtYnl0ZS5jOjQ5MjUKK21zZ2lkICJFMjkxOiBZb3VyIEdUSysgaXMgb2xkZXIgdGhhbiAxLjIuMy4gU3RhdHVzIGFyZWEgZGlzYWJsZWQiCittc2dzdHIgIkUyOTE6IFN1IEdUSysgZXMgYW50ZXJpb3IgYSAxLjIuMy4gwXJlYSBkZSBlc3RhZG8gZGVzYWN0aXZhZGEiCisKKyM6IG1ieXRlLmM6NTIzMgorbXNnaWQgIkUyOTI6IElucHV0IE1ldGhvZCBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmciCittc2dzdHIgIkUyOTI6IEVsIHNlcnZpZG9yIGRlIG3pdG9kbyBkZSBlbnRyYWRhIChJTUUpIG5vIGVzdOEgZnVuY2lvbmFuZG8iCisKKyM6IG1lbWZpbGUuYzo0ODgKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5MzogRWwgYmxvcXVlIG5vIGVzdGFiYSBhc2VndXJhZG8iCisKKyM6IG1lbWZpbGUuYzoxMDA1Cittc2dpZCAiRTI5NDogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgcmVhZCIKK21zZ3N0ciAiRTI5NDogRXJyb3IgZGUgYvpzcXVlZGEgYWwgbGVlciBlbCBmaWNoZXJvIGRlIGludGVyY2FtYmlvIgorCisjOiBtZW1maWxlLmM6MTAxMAorbXNnaWQgIkUyOTU6IFJlYWQgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk1OiBFcnJvciBkZSBsZWN0dXJhIGVuIGVsIGZpY2hlcm8gZGUgaW50ZXJjYW1iaW8iCisKKyM6IG1lbWZpbGUuYzoxMDYyCittc2dpZCAiRTI5NjogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgd3JpdGUiCittc2dzdHIgIkUyOTY6IEVycm9yIGRlIGL6c3F1ZWRhIGFsIGVzY3JpYmlyIGVuIGVsIGZpY2hlcm8gZGUgaW50ZXJjYW1iaW8iCisKKyM6IG1lbWZpbGUuYzoxMDgwCittc2dpZCAiRTI5NzogV3JpdGUgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk3OiBFcnJvciBkZSBlc2NyaXR1cmEgZW4gZWwgZmljaGVybyBkZSBpbnRlcmNhbWJpbyIKKworIzogbWVtZmlsZS5jOjEyNzcKK21zZ2lkICJFMzAwOiBTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMgKHN5bWxpbmsgYXR0YWNrPykiCittc2dzdHIgIkUzMDA6IFlhIGV4aXN0ZSB1biBmaWNoZXJvIGRlIGludGVyY2FtYmlvICi/YXRhcXVlIGRlIHN5bWxpbms/KSIKKworIzogbWVtbGluZS5jOjI3NQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMD8iCittc2dzdHIgIkUyOTg6IL9ObyBzZSBvYnR1dm8gZWwgYmxvcXVlIG66IDA/IgorCisjOiBtZW1saW5lLmM6MzE1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAxPyIKK21zZ3N0ciAiRTI5ODogv05vIHNlIG9idHV2byBlbCBibG9xdWUgbrogMT8iCisKKyM6IG1lbWxpbmUuYzozMzMKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDI/IgorbXNnc3RyICJFMjk4OiC/Tm8gc2Ugb2J0dXZvIGVsIGJsb3F1ZSBuuiAyPyIKKworIyAgY291bGQgbm90IChyZSlvcGVuIHRoZSBzd2FwIGZpbGUsIHdoYXQgY2FuIHdlIGRvPz8/PworIy4gY291bGQgbm90IChyZSlvcGVuIHRoZSBzd2FwIGZpbGUsIHdoYXQgY2FuIHdlIGRvPz8/PworIzogbWVtbGluZS5jOjQ0MworbXNnaWQgIkUzMDE6IE9vcHMsIGxvc3QgdGhlIHN3YXAgZmlsZSEhISIKK21zZ3N0ciAiRTMwMTogoaGhRWVlaCwgc2UgaGEgcGVyZGlkbyBlbCBmaWNoZXJvIGRlIGludGVyY2FtYmlvISEhIgorCisjOiBtZW1saW5lLmM6NDQ4Cittc2dpZCAiRTMwMjogQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDI6IE5vIHNlIHB1ZG8gY2FtYmlhciBlbCBub21icmUgZGVsIGZpY2hlcm8gZGUgaW50ZXJjYW1iaW8iCisKKyM6IG1lbWxpbmUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwMzogVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciBcIiVzXCIsIHJlY292ZXJ5IGltcG9zc2libGUiCittc2dzdHIgIiIKKyJFMzAzOiBJbmNhcGF6IGRlIGFicmlyIGVsIGZpY2hlcm8gZGUgaW50ZXJjYW1iaW8gcGFyYSCrJXO7LCByZWN1cGVyYWNp824gIgorImltcG9zaWJsZSIKKworIzogbWVtbGluZS5jOjYxNworbXNnaWQgIkUzMDQ6IG1sX3RpbWVzdGFtcDogRGlkbid0IGdldCBibG9jayAwPz8iCittc2dzdHIgIkUzMDQ6IKttbF90aW1lc3RhbXC7OiC/Tm8gc2Ugb2J0dXZvIGVsIGJsb3F1ZSAwPyIKKworIzogbWVtbGluZS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA1OiBObyBzd2FwIGZpbGUgZm91bmQgZm9yICVzIgorbXNnc3RyICJFMzA1OiBObyBzZSBlbmNvbnRy8yBlbCBmaWNoZXJvIGRlIGludGVyY2FtYmlvIHBhcmEgJXMiCisKKyM6IG1lbWxpbmUuYzo3NjcKK21zZ2lkICJFbnRlciBudW1iZXIgb2Ygc3dhcCBmaWxlIHRvIHVzZSAoMCB0byBxdWl0KTogIgorbXNnc3RyICIiCisiSW50cm9kdXpjYSBlbCBu+m1lcm8gZGVsIGZpY2hlcm8gZGUgaW50ZXJjYW1iaW8gYSB1c2FyICgwIHBhcmEgc2FsaXIpOiAiCisKKyM6IG1lbWxpbmUuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNjogQ2Fubm90IG9wZW4gJXMiCittc2dzdHIgIkUzMDY6IE5vIHB1ZWRvIGFicmlyICVzIgorCisjOiBtZW1saW5lLmM6ODM0Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgYmxvY2sgMCBmcm9tICIKK21zZ3N0ciAiSW5jYXBheiBkZSBsZWVyIGVsIGJsb3F1ZSAwIGRlICIKKworIzogbWVtbGluZS5jOjgzNworbXNnaWQgIiIKKyJcbiIKKyJNYXliZSBubyBjaGFuZ2VzIHdlcmUgbWFkZSBvciBWaW0gZGlkIG5vdCB1cGRhdGUgdGhlIHN3YXAgZmlsZS4iCittc2dzdHIgIiIKKyJcbiIKKyJUYWwgdmV6IG5vIHNlIGhhbiBoZWNobyBjYW1iaW9zIG8gVmltIG5vIGFjdHVhbGl68yBlbCBmaWNoZXJvIGRlIGludGVyY2FtYmlvIgorCisjOiBtZW1saW5lLmM6ODQ3IG1lbWxpbmUuYzo4NjQKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltLlxuIgorbXNnc3RyICIgbm8gcHVlZGUgdXNhcnNlIGNvbiBlc3RhIHZlcnNp824gZGUgVmltLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAiVXNlIGxhIHZlcnNp824gMy4wIGRlIFZpbS5cbiIKKworIzogbWVtbGluZS5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA3OiAlcyBkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlIgorbXNnc3RyICJFMzA3OiAlcyBubyBwYXJlY2UgdW4gZmljaGVybyBkZSBpbnRlcmNhbWJpbyBkZSBWaW0iCisKKyM6IG1lbWxpbmUuYzo4NjgKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgb24gdGhpcyBjb21wdXRlci5cbiIKK21zZ3N0ciAibm8gcHVlZGUgdXNhcnNlIGVuIGVzdGUgb3JkZW5hZG9yLlxuIgorCisjOiBtZW1saW5lLmM6ODcwCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICJFbCBmaWNoZXJvIGZ1ZSBjcmVhZG8gZWwgIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyJvIGVsIGZpY2hlcm8gaGEgc2lkbyBkYfFhZG8uIgorCisjOiBtZW1saW5lLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHN3YXAgZmlsZSBcIiVzXCIiCittc2dzdHIgIlVzYW5kbyBlbCBmaWNoZXJvIGRlIGludGVyY2FtYmlvIKslc7siCisKKyM6IG1lbWxpbmUuYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3JpZ2luYWwgZmlsZSBcIiVzXCIiCittc2dzdHIgIkZpY2hlcm8gb3JpZ2luYWwgqyVzuyIKKworIzogbWVtbGluZS5jOjkyMgorbXNnaWQgIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIgorbXNnc3RyICJFMzA4OiBBZHZlcnRlbmNpYTogZWwgZmljaGVybyBvcmlnaW5hbCBwdWVkZSBoYWJlciBzaWRvIGNhbWJpYWRvIgorCisjOiBtZW1saW5lLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDk6IFVuYWJsZSB0byByZWFkIGJsb2NrIDEgZnJvbSAlcyIKK21zZ3N0ciAiRTMwOTogSW5jYXBheiBkZSBsZWVyIGVsIGJsb3F1ZSAxIGRlICVzIgorCisjOiBtZW1saW5lLmM6OTc5Cittc2dpZCAiPz8/TUFOWSBMSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz9GQUxUQU4gTVVDSEFTIEzNTkVBUyIKKworIzogbWVtbGluZS5jOjk5NQorbXNnaWQgIj8/P0xJTkUgQ09VTlQgV1JPTkciCittc2dzdHIgIj8/P1JFQ1VFTlRPIERFIEzNTkVBUyBFUVVJVk9DQURPIgorCisjOiBtZW1saW5lLmM6MTAwMgorbXNnaWQgIj8/P0VNUFRZIEJMT0NLIgorbXNnc3RyICI/Pz9CTE9RVUUgVkFDzU8iCisKKyM6IG1lbWxpbmUuYzoxMDI4Cittc2dpZCAiPz8/TElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/RkFMVEFOIEzNTkVBUyIKKworIzogbWVtbGluZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxMDogQmxvY2sgMSBJRCB3cm9uZyAoJXMgbm90IGEgLnN3cCBmaWxlPykiCittc2dzdHIgIkUzMTA6IElEIGRlbCBibG9xdWUgMSBlcXVpdm9jYWRvICi/bm8gZXMgJXMgdW4gZmljaGVybyAuc3dwPykiCisKKyM6IG1lbWxpbmUuYzoxMDY1Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/RkFMVEEgVU4gQkxPUVVFIgorCisjOiBtZW1saW5lLmM6MTA4MQorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBiZSBtZXNzZWQgdXAiCittc2dzdHIgIj8/PyBkZXNkZSBhcXXtIGhhc3QgPz8/RklOIGxhcyBs7W5lYXMgcHVlZGVuIGVzdGFyIGRlc29yZGVuYWRhcyIKKworIzogbWVtbGluZS5jOjEwOTcKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiCittc2dzdHIgIiIKKyI/Pz8gZGVzZGUgYXF17SBoYXN0YSA/Pz9GSU4gbGFzIGztbmVhcyBwdWVkZW4gaGFiZXIgc2lkbyBpbnNlcnRhZGFzL2JvcnJhZGFzIgorCisjOiBtZW1saW5lLmM6MTExNworbXNnaWQgIj8/P0VORCIKK21zZ3N0ciAiPz8/RklOIgorCisjOiBtZW1saW5lLmM6MTE0MworbXNnaWQgIkUzMTE6IFJlY292ZXJ5IEludGVycnVwdGVkIgorbXNnc3RyICJFMzExOiBSZWN1cGVyYWNp824gaW50ZXJydW1waWRhIgorCisjOiBtZW1saW5lLmM6MTE0OAorbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIiIKKyJFMzEyOiBTZSBoYW4gZGV0ZWN0YWRvIGVycm9yZXMgYWwgcmVjdXBlcmFyOyBidXNxdWUgbO1uZWFzIHF1ZSBlbXBpZWNlbiAiCisiY29uID8/PyIKKworIzogbWVtbGluZS5jOjExNTAKK21zZ2lkICJTZWUgXCI6aGVscCBFMzEyXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICJWZWEgqzpoZWxwIEUzMTK7IHBhcmEgbeFzIGluZm9ybWFjafNuLiIKKworIzogbWVtbGluZS5jOjExNTUKK21zZ2lkICJSZWNvdmVyeSBjb21wbGV0ZWQuIFlvdSBzaG91bGQgY2hlY2sgaWYgZXZlcnl0aGluZyBpcyBPSy4iCittc2dzdHIgIlJlY3VwZXJhY2nzbiBjb21wbGV0YWRhLiBVZC4gZGViZXLtYSBjb21wcm9iYXIgcXVlIHRvZG8gZXN04SBiaWVuLiIKKworIzogbWVtbGluZS5jOjExNTYKK21zZ2lkICIiCisiXG4iCisiKFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIG91dCB0aGlzIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoUG9kcu1hIHF1ZXJlciBndWFyZGFyIGVzdGUgZmljaGVybyBjb24gb3RybyBub21icmVcbiIKKworIzogbWVtbGluZS5jOjExNTcKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAiIgorInkgZWplY3V0YXIgq2RpZma7IGNvbiBlbCBmaWNoZXJvIG9yaWdpbmFsIHBhcmEgY29tcHJvYmFyIGxvcyBjYW1iaW9zKVxuIgorCisjOiBtZW1saW5lLmM6MTE1OAorbXNnaWQgIiIKKyJEZWxldGUgdGhlIC5zd3AgZmlsZSBhZnRlcndhcmRzLlxuIgorIlxuIgorbXNnc3RyICIiCisiU3VwcmltaXIgZWwgZmljaGVybyAuc3dwLCBkZXNwdelzIGRlIHRlcm1pbmFyLlxuIgorIlxuIgorCisjICB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIy4gdXNlIG1zZygpIHRvIHN0YXJ0IHRoZSBzY3JvbGxpbmcgcHJvcGVybHkKKyM6IG1lbWxpbmUuYzoxMjE0Cittc2dpZCAiU3dhcCBmaWxlcyBmb3VuZDoiCittc2dzdHIgIlNlIGhhbiBlbmNvbnRyYWRvIGZpY2hlcm9zIGRlIGludGVyY2FtYmlvOiIKKworIzogbWVtbGluZS5jOjEzOTIKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAgRW4gZWwgZGlyZWN0b3JpbyBhY3R1YWw6XG4iCisKKyM6IG1lbWxpbmUuYzoxMzk0Cittc2dpZCAiICAgVXNpbmcgc3BlY2lmaWVkIG5hbWU6XG4iCittc2dzdHIgIiAgIFVzYW5kbyBlbCBub21icmUgZXNwZWNpZmljYWRvOlxuIgorCisjOiBtZW1saW5lLmM6MTM5OAorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIEVuIGVsIGRpcmVjdG9yaW8gIgorCisjOiBtZW1saW5lLmM6MTQxNgorbXNnaWQgIiAgICAgIC0tIG5vbmUgLS1cbiIKK21zZ3N0ciAiICAgICAgLS0gbmluZ3VubyAtLVxuIgorCisjOiBtZW1saW5lLmM6MTQ4OAorbXNnaWQgIiAgICAgICAgICBvd25lZCBieTogIgorbXNnc3RyICIgICAgICAgICAgcHJvcGllZGFkIGRlOiAiCisKKyM6IG1lbWxpbmUuYzoxNDkwCittc2dpZCAiICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgZGUgZmVjaGE6ICIKKworIzogbWVtbGluZS5jOjE0OTQgbWVtbGluZS5jOjM2ODQKK21zZ2lkICIgICAgICAgICAgICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgICAgICAgICAgIGRlIGZlY2hhOiAiCisKKyM6IG1lbWxpbmUuYzoxNTEwCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgW2Rlc2RlIGxhIHZlcnNp824gMy4wIGRlIFZpbV0iCisKKyM6IG1lbWxpbmUuYzoxNTE0Cittc2dpZCAiICAgICAgICAgW2RvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGVdIgorbXNnc3RyICIgICAgICAgICBbbm8gcGFyZWNlIHVuIGZpY2hlcm8gZGUgaW50ZXJjYW1iaW8gZGUgVmltXSIKKworIzogbWVtbGluZS5jOjE1MTgKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgICAgbm9tYnJlIGRlbCBmaWNoZXJvOiAiCisKKyM6IG1lbWxpbmUuYzoxNTI0Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgICBtb2RpZmllZDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgbW9kaWZpY2FkbzogIgorCisjOiBtZW1saW5lLmM6MTUyNQorbXNnaWQgIllFUyIKK21zZ3N0ciAiU0kiCisKKyM6IG1lbWxpbmUuYzoxNTI1Cittc2dpZCAibm8iCittc2dzdHIgIm5vIgorCisjOiBtZW1saW5lLmM6MTUyOQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICB1c2VyIG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiBub21icmUgZGVsIHVzdWFyaW86ICIKKworIzogbWVtbGluZS5jOjE1MzYKK21zZ2lkICIgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiICBub21icmUgZGVsIKtob3N0uzogIgorCisjOiBtZW1saW5lLmM6MTUzOAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICBub21icmUgZGVsIKtob3N0uzogIgorCisjOiBtZW1saW5lLmM6MTU0NAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgIElEIGRlbCBwcm9jZXNvOiAiCisKKyM6IG1lbWxpbmUuYzoxNTUwCittc2dpZCAiIChzdGlsbCBydW5uaW5nKSIKK21zZ3N0ciAiIChh+m4gZW4gZWplY3VjafNuKSIKKworIzogbWVtbGluZS5jOjE1NjIKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFtubyBzZSBwZXVkZSB1c2FyIGNvbiBlc3RhIHZlcnNp824gZGUgVmltXSIKKworIzogbWVtbGluZS5jOjE1NjUKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgb24gdGhpcyBjb21wdXRlcl0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbbm8gc2UgcHVlZGUgdXNhciBlbiBlc3RlIG9yZGVuYWRvcl0iCisKKyM6IG1lbWxpbmUuYzoxNTcwCittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSByZWFkXSIKK21zZ3N0ciAiICAgICAgICAgW25vIHNlIHB1ZWRlIGxlZXJdIgorCisjOiBtZW1saW5lLmM6MTU3NAorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgb3BlbmVkXSIKK21zZ3N0ciAiICAgICAgICAgW25vIHNlIHB1ZWRlIGFicmlyXSIKKworIzogbWVtbGluZS5jOjE3NjQKK21zZ2lkICJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMxMzogTm8gcHVlZG8gcHJlc2VydmFybG8sIG5vIGV4aXN0ZSB1biBmaWNoZXJvIGRlIGludGVyY2FtYmlvIgorCisjOiBtZW1saW5lLmM6MTgxNworbXNnaWQgIkZpbGUgcHJlc2VydmVkIgorbXNnc3RyICJmaWNoZXJvIHByZXNlcnZhZG8iCisKKyM6IG1lbWxpbmUuYzoxODE5Cittc2dpZCAiRTMxNDogUHJlc2VydmUgZmFpbGVkIgorbXNnc3RyICJFMzE0OiBGYWxs8yBsYSBwcmVzZXJ2YWNp824gZGVsIGZpY2hlcm8iCisKKyM6IG1lbWxpbmUuYzoxODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTU6IG1sX2dldDogaW52YWxpZCBsbnVtOiAlbGQiCittc2dzdHIgIkUzMTU6IKttbF9nZXS7OiBu+m1lcm8gZGUgbO1uZWEgbm8gduFsaWRvOiAlbGQiCisKKyM6IG1lbWxpbmUuYzoxOTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTY6IG1sX2dldDogY2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMTY6IKttbF9nZXS7OiBubyBwdWVkbyBlbmNvbnRyYXIgbGEgbO1uZWEgJWxkIgorCisjOiBtZW1saW5lLmM6MjMwNgorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAiRTMxNzogRWwgaWQgZGVsIGJsb3F1ZSBkZSBwdW50ZXJvcyBlc3ThIGVxdWl2b2NhZG8uIDMiCisKKyM6IG1lbWxpbmUuYzoyMzg2Cittc2dpZCAic3RhY2tfaWR4IHNob3VsZCBiZSAwIgorbXNnc3RyICKrc3RhY2tfaWR4uyBkZWJlcu1hIHNlciAwIgorCisjOiBtZW1saW5lLmM6MjQ0OAorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODogv0RlbWFzaWFkb3MgYmxvcXVlcyBhY3R1YWxpemFkb3M/IgorCisjOiBtZW1saW5lLmM6MjYzMAorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgNCIKK21zZ3N0ciAiRTMxNzogRWwgaWQgZGVsIGJsb3F1ZSBkZSBwdW50ZXJvcyBlc3ThIGVxdWl2b2NhZG8uIDQiCisKKyM6IG1lbWxpbmUuYzoyNjU3Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAiv2Jsb3F1ZSAxIHN1cHJpbWlkbz8iCisKKyM6IG1lbWxpbmUuYzoyODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjA6IENhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzIwOiBObyBwdWVkbyBlbmNvbnRyYXIgbGEgbO1uZWEgJWxkIgorCisjOiBtZW1saW5lLmM6MzEwMAorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmciCittc2dzdHIgIkUzMTc6IEVsIGlkIGRlbCBibG9xdWUgZGUgcHVudGVyb3MgZXN04SBlcXVpdm9jYWRvLiIKKworIzogbWVtbGluZS5jOjMxMTYKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgIqtwZV9saW5lX2NvdW50uyBlcyBjZXJvIgorCisjOiBtZW1saW5lLmM6MzE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIyOiBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVsZCBwYXN0IHRoZSBlbmQiCittc2dzdHIgIkUzMjI6IG76bWVybyBkZSBs7W5lYSBmdWVyYSBkZSByYW5nbzogJWxkIG3hcyBhbGzhIGRlbCBmaW5hbCIKKworIzogbWVtbGluZS5jOjMxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMzogbGluZSBjb3VudCB3cm9uZyBpbiBibG9jayAlbGQiCittc2dzdHIgIkUzMjM6IHJlY3VlbnRvIGRlIGztbmVhcyBlcnLzbmVvIGVuIGVsIGJsb3F1ZSAlbGQiCisKKyM6IG1lbWxpbmUuYzozMTk4Cittc2dpZCAiU3RhY2sgc2l6ZSBpbmNyZWFzZXMiCittc2dzdHIgIkVsIHRhbWHxbyBkZSBsYSBwaWxhIGF1bWVudGEiCisKKyM6IG1lbWxpbmUuYzozMjQ0Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAyIgorbXNnc3RyICJFMzEwOiBFbCBpZCBkZWwgYmxvcXVlIGRlIHB1bnRlcm9zIGVzdOEgZXF1aXZvY2Fkby4gMiIKKworIzogbWVtbGluZS5jOjM2NzQKK21zZ2lkICJFMzI1OiBBVFRFTlRJT04iCittc2dzdHIgIkUzMjU6IEFURU5DSdNOIgorCisjOiBtZW1saW5lLmM6MzY3NQorbXNnaWQgIiIKKyJcbiIKKyJGb3VuZCBhIHN3YXAgZmlsZSBieSB0aGUgbmFtZSBcIiIKK21zZ3N0ciAiIgorIlxuIgorIlNlIGhhIGVuY29udHJhZG8gdW4gZmljaGVybyBkZSBpbnRlcmNhbWJpbyBjb24gZWwgbm9tYnJlIKsiCisKKyM6IG1lbWxpbmUuYzozNjc5Cittc2dpZCAiV2hpbGUgb3BlbmluZyBmaWxlIFwiIgorbXNnc3RyICJhbCBhYnJpciBlbCBmaWNoZXJvIKsiCisKKyM6IG1lbWxpbmUuYzozNjg4Cittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgTcFTIE5VRVZPIHF1ZSBlbCBmaWNoZXJvIGRlIGludGVyY2FtYmlvIVxuIgorCisjICBTb21lIG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSBsb25nIHRvIGFsbG93IHRyYW5zbGF0aW9uIHRvCisjICAqIG90aGVyIGxhbmd1YWdlcy4KKyMuIFNvbWUgb2YgdGhlc2UgbWVzc2FnZXMgYXJlIGxvbmcgdG8gYWxsb3cgdHJhbnNsYXRpb24gdG8KKyMuICogb3RoZXIgbGFuZ3VhZ2VzLgorIzogbWVtbGluZS5jOjM2OTIKK21zZ2lkICIiCisiXG4iCisiKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLlxuIgorIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d29cbiIKKyIgICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMSkgT3RybyBwcm9ncmFtYSBwdWVkZSBlc3RhciBlZGl0YW5kbyBlbCBtaXNtbyBmaWNoZXJvLlxuIgorIiAgICBEZSBzZXIgYXPtLCB0ZW5nYSBjdWlkYWRvIGRlIG5vIGFjYWJhciBjb24gZG9zXG4iCisiICAgIGVqZW1wbGFyZXMgZGlmZXJlbnRlcyBkZWwgbWlzbW8gZmljaGVybyBhbCBoYWNlciBjYW1iaW9zLlxuIgorCisjOiBtZW1saW5lLmM6MzY5MworbXNnaWQgIiAgICBRdWl0LCBvciBjb250aW51ZSB3aXRoIGNhdXRpb24uXG4iCittc2dzdHIgIiAgICBTYWxnYSBkZWwgcHJvZ3JhbWEgbyBjb250aW51ZSBjb24gcHJlY2F1Y2nzbi5cbiIKKworIzogbWVtbGluZS5jOjM2OTQKK21zZ2lkICIiCisiXG4iCisiKDIpIEFuIGVkaXQgc2Vzc2lvbiBmb3IgdGhpcyBmaWxlIGNyYXNoZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMikgRmFsbPMgdW5hIHNlc2nzbiBkZSBlZGljafNuIGRlIGVzdGUgZmljaGVyby5cbiIKKworIzogbWVtbGluZS5jOjM2OTUKK21zZ2lkICIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdXNlIFwiOnJlY292ZXJcIiBvciBcInZpbSAtciAiCittc2dzdHIgIiAgICBTaSBlcyBhc+0sIHVzZSCrOnJlY292ZXK7IG8gq3ZpbSAtciAiCisKKyM6IG1lbWxpbmUuYzozNjk3Cittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiu1xuIgorIiAgICBwYXJhIHJlY3VwZXJhciBsb3MgY2FtYmlvcyAodulhIKs6aGVscCByZWNvdmVyebspLlxuIgorCisjOiBtZW1saW5lLmM6MzY5OAorbXNnaWQgIiAgICBJZiB5b3UgZGlkIHRoaXMgYWxyZWFkeSwgZGVsZXRlIHRoZSBzd2FwIGZpbGUgXCIiCittc2dzdHIgIiAgICBTaSBVZC4geWEgaGEgaGVjaG8gZXN0bywgYm9ycmUgZWwgZmljaGVybyBkZSBpbnRlcmNhbWJpbyCrIgorCisjOiBtZW1saW5lLmM6MzcwMAorbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byBhdm9pZCB0aGlzIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKyK7XG4iCisiICAgIHBhcmEgZXZpdGFyIGVzdGUgbWVuc2FqZS5cbiIKKworIzogbWVtbGluZS5jOjM3MTQgbWVtbGluZS5jOjM3MTgKK21zZ2lkICJTd2FwIGZpbGUgXCIiCittc2dzdHIgIqFFbCBmaWNoZXJvIGRlIGludGVyY2FtYmlvIKsiCisKKyM6IG1lbWxpbmUuYzozNzE1IG1lbWxpbmUuYzozNzIxCittc2dpZCAiXCIgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICK7IHlhIGV4aXN0ZSEiCisKKyM6IG1lbWxpbmUuYzozNzI0Cittc2dpZCAiVklNIC0gQVRURU5USU9OIgorbXNnc3RyICJWSU0gLSBBVEVOQ0nTTiIKKworIzogbWVtbGluZS5jOjM3MjYKK21zZ2lkICJTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICKhWWEgZXhpc3RlIHVuIGZpY2hlcm8gZGUgaW50ZXJjYW1iaW8hIgorCisjOiBtZW1saW5lLmM6MzczMAorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0XG4iCisiJkFib3J0IgorbXNnc3RyICIiCisiJkFicmlyIHBhcmEgbGVjdHVyYSD6bmljYW1lbnRlXG4iCisiJkVkaXRhciBkZSB0b2RhcyBmb3JtYXNcbiIKKyImUmVjdXBlcmFyXG4iCisiJlNhbGlyXG4iCisiJkFib3J0YXIiCisKKyM6IG1lbWxpbmUuYzozNzMyCittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImQWJvcnRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisiJkFicmlyIHBhcmEgbGVjdHVyYSD6bmljYW1lbnRlXG4iCisiJkVkaXRhciBkZSB0b2RhcyBmb3JtYXNcbiIKKyImUmVjdXBlcmFyXG4iCisiJlNhbGlyXG4iCisiJkFib3J0YXJcbiIKKyImQm9ycmFybG8iCisKKyM6IG1lbWxpbmUuYzozNzg5Cittc2dpZCAiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIKK21zZ3N0ciAiRTMyNjogU2UgaGFuIGVuY29udHJhZG8gZGVtYXNpYWRvcyBmaWNoZXJvcyBkZSBpbnRlcmNhbWJpbyIKKworIzogbWVudS5jOjY0Cittc2dpZCAiRTMyNzogUGFydCBvZiBtZW51LWl0ZW0gcGF0aCBpcyBub3Qgc3ViLW1lbnUiCittc2dzdHIgIkUzMjc6IFBhcnRlIGRlIGxhIHJ1dGEgZGVsIGl0ZW0gZGVsIG1lbvogbm8gZXMgdW4gc3ViLW1lbvoiCisKKyM6IG1lbnUuYzo2NQorbXNnaWQgIkUzMjg6IE1lbnUgb25seSBleGlzdHMgaW4gYW5vdGhlciBtb2RlIgorbXNnc3RyICJFMzI4OiBFbCBtZW76IHPzbG8gZXhpc3RlIGVuIG90cm8gbW9kbyBkZSBvcGVyYWNp824iCisKKyM6IG1lbnUuYzo2NgorbXNnaWQgIkUzMjk6IE5vIG1lbnUgb2YgdGhhdCBuYW1lIgorbXNnc3RyICJFMzI5OiBObyBleGlzdGUgdW4gbWVu+iBjb24gZXNlIG5vbWJyZSIKKworIzogbWVudS5jOjUyNQorbXNnaWQgIkUzMzA6IE1lbnUgcGF0aCBtdXN0IG5vdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzA6IExhIHJ1dGEgZGVsIG1lbvogbm8gZGViZSBjb25kdWNpciBhIHVuIHN1Yi1tZW76IgorCisjOiBtZW51LmM6NTY0Cittc2dpZCAiRTMzMTogTXVzdCBub3QgYWRkIG1lbnUgaXRlbXMgZGlyZWN0bHkgdG8gbWVudSBiYXIiCittc2dzdHIgIiIKKyJFMzMxOiBObyBzZSBkZWJlbiBh8WFkaXIgaXRlbXMgZGVsIG1lbvogZGlyZWN0YW1lbnRlIGEgbGEgYmFycmEgZGVsIG1lbvoiCisKKyM6IG1lbnUuYzo1NzAKK21zZ2lkICJFMzMyOiBTZXBhcmF0b3IgY2Fubm90IGJlIHBhcnQgb2YgYSBtZW51IHBhdGgiCittc2dzdHIgIkUzMzI6IEVsIHNlcGFyYWRvciBubyBwdWVkZSBzZXIgcGFydGUgZGUgdW5hIHJ1dGEgZGUgbWVu+iIKKworIyAgTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIyAgSGlnaGxpZ2h0IHRpdGxlCisjLiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgbWVudSwgYW5kIHdlIGxpc3QgdGhlIG1hcHBpbmdzCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1lbnUuYzoxMDk3Cittc2dpZCAiIgorIlxuIgorIi0tLSBNZW51cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTWVu+nMgLS0tIgorCisjOiBtZW51LmM6MjAxOQorbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAiRGVzcHJlbmRlciB5IGZsb3RhciBlc3RlIG1lbvoiCisKKyM6IG1lbnUuYzoyMDg0Cittc2dpZCAiRTMzMzogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIG1lbnUgaXRlbSIKK21zZ3N0ciAiRTMzMzogTGEgcnV0YSBkZWwgbWVudSBkZWJlIGNvbmR1Y2lyIGEgdW4gaXRlbSBkZWwgbWVu+iIKKworIzogbWVudS5jOjIxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNDogTWVudSBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMzM0OiBObyBzZSBoYSBlbmNvbnRyYWRvIGVsIG1lbvo6ICVzIgorCisjOiBtZW51LmM6MjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzM1OiBNZW51IG5vdCBkZWZpbmVkIGZvciAlcyBtb2RlIgorbXNnc3RyICJFMzM1OiBFbCBtZW76IG5vIGVzdOEgZGVmaW5pZG8gcGFyYSBlbCBtb2RvICVzIgorCisjOiBtZW51LmM6MjIxMQorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogTGEgcnV0YSBkZWwgbWVu+iBkZWJlIGNvbmR1Y2lyIGEgdW4gc3ViLW1lbvoiCisKKyM6IG1lbnUuYzoyMjMyCittc2dpZCAiRTMzNzogTWVudSBub3QgZm91bmQgLSBjaGVjayBtZW51IG5hbWVzIgorbXNnc3RyICJFMzM3OiBObyBzZSBoYSBlbmNvbnRyYWRvIGVsIG1lbvogLSB2ZXJpZmlxdWUgbG9zIG5vbWJyZXMgZGUgbG9zIG1lbvpzIgorCisjOiBtZXNzYWdlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVjdGVkIHdoaWxlIHByb2Nlc3NpbmcgJXM6IgorbXNnc3RyICJTZSBoYSBkZXRlY3RhZG8gdW4gZXJyb3IgYWwgcHJvY2VzYXIgJXM6IgorCisjOiBtZXNzYWdlLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJTRsZDoiCittc2dzdHIgImztbmVhICU0bGQiCisKKyM6IG1lc3NhZ2UuYzo2NDcKK21zZ2lkICJbc3RyaW5nIHRvbyBsb25nXSIKK21zZ3N0ciAiW2NhZGVuYSBkZW1hc2lhZG8gbGFyZ2FdIgorCisjOiBtZXNzYWdlLmM6Nzk3Cittc2dpZCAiTWVzc2FnZXMgbWFpbnRhaW5lcjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4iCittc2dzdHIgIiIKKyJNYW50ZW5lZG9yIGRlIGxvcyBtZW5zYWplczogQWxlamFuZHJvIEzzcGV6LVZhbGVuY2lhIDxkcmFkdWxAeWFob28uY29tPiIKKworIzogbWVzc2FnZS5jOjEwMjUKK21zZ2lkICJJbnRlcnJ1cHQ6ICIKK21zZ3N0ciAiSW50ZXJydXBjafNuOiAiCisKKyM6IG1lc3NhZ2UuYzoxMDI4Cittc2dpZCAiSGl0IEVOVEVSIHRvIGNvbnRpbnVlIgorbXNnc3RyICJQdWxzZSBJTlRSTyBwYXJhIGNvbnRpbnVhciIKKworIzogbWVzc2FnZS5jOjEwMzAKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICJQdWxzZSBJTlRSTyBvIGVzY3JpYmEgdW4gY29tYW5kbyBwYXJhIGNvbnRpbnVhciIKKworIzogbWVzc2FnZS5jOjIzNTEKK21zZ2lkICItLSBNb3JlIC0tIgorbXNnc3RyICItLSBN4XMgLS0iCisKKyM6IG1lc3NhZ2UuYzoyMzU0Cittc2dpZCAiIChSRVQvQlM6IGxpbmUsIFNQQUNFL2I6IHBhZ2UsIGQvdTogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQvQlM6IGztbmVhLCBFU1BBQ0lPL2I6IHDhZ2luYSwgZC91OiBtZWRpYSBw4WdpbmEsIHE6IHNhbGlyKSIKKworIzogbWVzc2FnZS5jOjIzNTUKK21zZ2lkICIgKFJFVDogbGluZSwgU1BBQ0U6IHBhZ2UsIGQ6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUOiBs7W5lYSwgRVNQQUNJTzogcOFnaW5hLCBkOiBtZWRpYSBw4WdpbmEsIHE6IHNhbGlyKSIKKworIzogbWVzc2FnZS5jOjI5ODIgbWVzc2FnZS5jOjI5OTcKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAiUHJlZ3VudGEiCisKKyM6IG1lc3NhZ2UuYzoyOTg0Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm8iCittc2dzdHIgIiIKKyImU2lcbiIKKyImTm8iCisKKyM6IG1lc3NhZ2UuYzozMDE3Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyJTYXZlICZBbGxcbiIKKyImRGlzY2FyZCBBbGxcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJlNpXG4iCisiJk5vXG4iCisiJkd1YXJkYXIgdG9kb1xuIgorIiZEZXNjYXJ0YXIgdG9kb1xuIgorIiZDYW5jZWxhciIKKworIzogbWVzc2FnZS5jOjMwNTgKK21zZ2lkICJTYXZlIEZpbGUgZGlhbG9nIgorbXNnc3RyICJEaeFsb2dvIGRlIEd1YXJkYXIgRmljaGVybyIKKworIzogbWVzc2FnZS5jOjMwNjAKK21zZ2lkICJPcGVuIEZpbGUgZGlhbG9nIgorbXNnc3RyICJEaeFsb2dvIGRlIEFicmlyIEZpY2hlcm8iCisKKyMuIFRPRE86IG5vbi1HVUkgZmlsZSBzZWxlY3RvciBoZXJlCisjOiBtZXNzYWdlLmM6MzEzMQorbXNnaWQgIkUzMzg6IFNvcnJ5LCBubyBmaWxlIGJyb3dzZXIgaW4gY29uc29sZSBtb2RlIgorbXNnc3RyICJFMzM4OiBMbyBzaWVudG8sIG5vIGhheSBob2plYWRvciBkZSBmaWNoZXJvcyBlbiBtb2RvIGRlIGNvbnNvbGEiCisKKyM6IG1pc2MxLmM6Mjc3MworbXNnaWQgIlcxMDogV2FybmluZzogQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlIgorbXNnc3RyICJXMTA6IEFkdmVydGVuY2lhOiBjYW1iaWFuZG8gdW4gZmljaGVybyBkZSBz82xvIGxlY3R1cmEiCisKKyM6IG1pc2MxLmM6MzAyMQorbXNnaWQgIjEgbW9yZSBsaW5lIgorbXNnc3RyICIxIGztbmVhIG3hcyIKKworIzogbWlzYzEuYzozMDIzCittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgIjEgbO1uZWEgbWVub3MiCisKKyM6IG1pc2MxLmM6MzAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbW9yZSBsaW5lcyIKK21zZ3N0ciAiJWxkIGztbmVhcyBt4XMiCisKKyM6IG1pc2MxLmM6MzAzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgZmV3ZXIgbGluZXMiCittc2dzdHIgIiVsZCBs7W5lYXMgbWVub3MiCisKKyM6IG1pc2MxLmM6MzAzMworbXNnaWQgIiAoSW50ZXJydXB0ZWQpIgorbXNnc3RyICIgKEludGVycnVtcGlkbykiCisKKyM6IG1pc2MxLmM6NzU4OAorbXNnaWQgIlZpbTogcHJlc2VydmluZyBmaWxlcy4uLlxuIgorbXNnc3RyICJWaW06IHByZXNlcnZhbmRvIGZpY2hlcm9zLi4uXG4iCisKKyMuIGNsb3NlIGFsbCBtZW1maWxlcywgd2l0aG91dCBkZWxldGluZworIzogbWlzYzEuYzo3NTk4Cittc2dpZCAiVmltOiBGaW5pc2hlZC5cbiIKK21zZ3N0ciAiVmltOiBmaW5hbGl6YWRvLlxuIgorCisjOiBtaXNjMi5jOjY5NSBtaXNjMi5jOjcxMQorbXNnaWQgIkVSUk9SOiAiCittc2dzdHIgIkVSUk9SOiAiCisKKyM6IG1pc2MyLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJbYnl0ZXNdIHRvdGFsIGFsbG9jLWZyZWVkICVsdS0lbHUsIGluIHVzZSAlbHUsIHBlYWsgdXNlICVsdVxuIgorbXNnc3RyICIiCisiXG4iCisiW2J5dGVzXSB0b3RhbCBsaWJlcmFkbyBwb3IgYWxsb2MgJWx1LSVsdSwgZW4gdXNvICVsdSwgdXNvIG3heGltbyAlbHVcbiIKKworIzogbWlzYzIuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW2xhbWFkYXNdIHRvdGFsIHJlL21hbGxvYygpJ3MgJWx1LCB0b3RhbCBmcmVlKCkncyAlbHVcbiIKKyJcbiIKKworIzogbWlzYzIuYzo3NzIKK21zZ2lkICJFMzQwOiBMaW5lIGlzIGJlY29taW5nIHRvbyBsb25nIgorbXNnc3RyICJFMzQwOiBMYSBs7W5lYSBzZSBlc3ThIGhhY2llbmRvIGRlbWFzaWFkbyBsYXJnYSIKKworIzogbWlzYzIuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MTogSW50ZXJuYWwgZXJyb3I6IGxhbGxvYyglbGQsICkiCittc2dzdHIgIkUzNDE6IEVycm9yIGludGVybm86IGxhbGxvYyglbGQsICkiCisKKyM6IG1pc2MyLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDI6IE91dCBvZiBtZW1vcnkhICAoYWxsb2NhdGluZyAlbHUgYnl0ZXMpIgorbXNnc3RyICJFMzQyOiChTWVtb3JpYSBhZ290YWRhISAoYWwgYXNpZ25hciAlbHUgYnl0ZXMpIgorCisjOiBtaXNjMi5jOjI1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FsbGluZyBzaGVsbCB0byBleGVjdXRlOiBcIiVzXCIiCittc2dzdHIgIkxsYW1hbmRvIGEgbGEgq3NoZWxsuyBwYXJhIGVqZWN1dGFyOiCrJXO7IgorCisjOiBtaXNjMi5jOjI4MTYKK21zZ2lkICJFNTQ1OiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTQ1OiBGYWx0YSB1biBz7W1ib2xvIGRlIGRvcyBwdW50b3MuIgorCisjOiBtaXNjMi5jOjI4MTggbWlzYzIuYzoyODQ1Cittc2dpZCAiRTU0NjogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFNTQ2OiBNb2RvIGRlIG9wZXJhY2nzbiBpbGVnYWwuIgorCisjOiBtaXNjMi5jOjI4ODQKK21zZ2lkICJFNTQ3OiBJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIkU1NDc6IEVsIKttb3VzZXNoYXBluyBubyBlcyB24WxpZG8uIgorCisjOiBtaXNjMi5jOjI5MjQKK21zZ2lkICJFNTQ4OiBkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAiRTU0ODogU2UgZXNwZXJhYmEgdW4gZO1naXRvLiIKKworIzogbWlzYzIuYzoyOTI5Cittc2dpZCAiRTU0OTogSWxsZWdhbCBwZXJjZW50YWdlIgorbXNnc3RyICJFNTQ5OiBQb3JjZW50YWplIGlsZWdhbC4iCisKKyM6IG1pc2MyLmM6MzIzOQorbXNnaWQgIkVudGVyIGVuY3J5cHRpb24ga2V5OiAiCittc2dzdHIgIkludHJvZHV6Y2EgbGEgY2xhdmUgZGUgY2lmcmFkbzogIgorCisjOiBtaXNjMi5jOjMyNDAKK21zZ2lkICJFbnRlciBzYW1lIGtleSBhZ2FpbjogIgorbXNnc3RyICJJbnRyb2R1emNhIGxhIG1pc21hIGNsYXZlIGRlIGNpZnJhZG8gb3RyYSB2ZXo6ICIKKworIzogbWlzYzIuYzozMjUwCittc2dpZCAiS2V5cyBkb24ndCBtYXRjaCEiCittc2dzdHIgIqFMYXMgY2xhdmVzIGRlIGNpZnJhZG8gbm8gY29pbmNpZGVuISIKKworIzogbWlzYzIuYzozNzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICIiCisiRTM0MzogUnV0YSBubyB24WxpZGE6ICcqKltu+m1lcm9dJyBkZWJlIGVzdGFyIGFsIGZpbmFsIGRlIGxhIHJ1dGEgbyBzZWd1aWRvICIKKyJkZSCrJXO7LiIKKworIzogbWlzYzIuYzo1MDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IE5vIHNlIHB1ZWRlIGVuY29udHJhciBlbCBkaXJlY3RvcmlvIKslc7sgZW4gq2NkcGF0aLsiCisKKyM6IG1pc2MyLmM6NTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ1OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkUzNDU6IE5vIHNlIHB1ZWRlIGVuY29udHJhciBlbCBmaWNoZXJvIKslc7sgZW4gbGEgcnV0YSIKKworIzogbWlzYzIuYzo1MDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDY6IE5vIG1vcmUgZGlyZWN0b3J5IFwiJXNcIiBmb3VuZCBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDY6IE5vIHNlIGhhbiBlbmNvbnRyYWRvIG1hcyBkaXJlY3RvcmlvcyCrJXO7IGVuIKtjZHBhdGi7IgorCisjOiBtaXNjMi5jOjUwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiBObyBzZSBoYW4gZW5jb250cmFkbyBtYXMgZmljaGVyb3MgqyVzuyBlbiBsYSBydXRhIgorCisjOiBtaXNjMi5jOjUzMjQKK21zZ2lkICJFNTUwOiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTUwOiBGYWx0YSB1biBz7W1ib2xvIGRlIGRvcyBwdW50b3MuIgorCisjOiBtaXNjMi5jOjUzMzYKK21zZ2lkICJFNTUxOiBJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAiRTU1MTogQ29tcG9uZW50ZSBpbGVnYWwuIgorCisjOiBtaXNjMi5jOjUzNDQKK21zZ2lkICJFNTUyOiBkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAiRTU1Mjogc2UgZXNwZXJhYmEgdW4gZO1naXRvLiIKKworIyAgR2V0IGhlcmUgd2hlbiB0aGUgc2VydmVyIGNhbid0IGJlIGZvdW5kLgorIy4gR2V0IGhlcmUgd2hlbiB0aGUgc2VydmVyIGNhbid0IGJlIGZvdW5kLgorIzogbmV0YmVhbnMuYzozOTYKK21zZ2lkICJDYW5ub3QgY29ubmVjdCB0byBOZXRiZWFucyAjMiIKK21zZ3N0ciAiTm8gcHVlZG8gY29uZWN0YXJtZSBhIE5ldGJlYW5zICMyIgorCisjOiBuZXRiZWFucy5jOjQwNAorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zIgorbXNnc3RyICJObyBwdWVkbyBjb25lY3Rhcm1lIGEgTmV0YmVhbnMiCisKKyMgYy1mb3JtYXQKKyM6IG5ldGJlYW5zLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2Njg6IFdyb25nIGFjY2VzcyBtb2RlIGZvciBOZXRCZWFucyBjb25uZWN0aW9uIGluZm8gZmlsZTogXCIlc1wiIgorbXNnc3RyICJFNjY4OiBFbCBkdWXxbyhhKSBkZWwgZmljaGVybyBkZSBjb25leGnzbiBOZXRCZWFucyBubyBlcyB24WxpZG86IKslc7siCisKKyM6IG5ldGJlYW5zLmM6NzQ5Cittc2dpZCAicmVhZCBmcm9tIE5ldGJlYW5zIHNvY2tldCIKK21zZ3N0ciAibGVpZG8gZGVsIHNvY2tldCBOZXRiZWFucyIKKworIzogbmV0YmVhbnMuYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NTg6IE5ldEJlYW5zIGNvbm5lY3Rpb24gbG9zdCBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTY1ODogU2UgcGVyZGnzIGxhIGNvbmV4afNuIE5ldEJlYW5zIHBhcmEgZWwgIKtidWZmZXK7ICVsZC4iCisKKyM6IG5vcm1hbC5jOjI5ODAKK21zZ2lkICJXYXJuaW5nOiB0ZXJtaW5hbCBjYW5ub3QgaGlnaGxpZ2h0IgorbXNnc3RyICJBZHZlcnRlbmNpYTogZWwgdGVybWluYWwgbm8gcHVlZGUgcmVhbHphciBlbCB0ZXh0byIKKworIzogbm9ybWFsLmM6MzI3NgorbXNnaWQgIkUzNDg6IE5vIHN0cmluZyB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDg6IE5vIGhheSBuaW5ndW5hIGNhZGVuYSBiYWpvIGVsIGN1cnNvciIKKworIzogbm9ybWFsLmM6MzI3OAorbXNnaWQgIkUzNDk6IE5vIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ5OiBObyBoYXkgbmluZ/puIGlkZW50aWZpY2Fkb3IgYmFqbyBlbCBjdXJzb3IiCisKKyM6IG5vcm1hbC5jOjQ1MTkKK21zZ2lkICJFMzUyOiBDYW5ub3QgZXJhc2UgZm9sZHMgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MjogTm8gcHVlZG8gYm9yYXIgcGxpZWd1ZXMgY29uIGVsIKtmb2xtZXRob2S7IGFjdHVhbC4iCisKKyM6IG5vcm1hbC5jOjY3NDAKK21zZ2lkICJFNjY0OiBjaGFuZ2VsaXN0IGlzIGVtcHR5IgorbXNnc3RyICJFNjY0OiBMYSBsaXN0YSBkZSBjYW1iaW9zIGVzdOEgdmFj7WEuIgorCisjOiBub3JtYWwuYzo2NzQyCittc2dpZCAiRTY2MjogQXQgc3RhcnQgb2YgY2hhbmdlbGlzdCIKK21zZ3N0ciAiRTY2MjogQWwgY29taWVuem8gZGUgbGEgbGlzdGEgZGUgY2FtYmlvcy4iCisKKyM6IG5vcm1hbC5jOjY3NDQKK21zZ2lkICJFNjYzOiBBdCBlbmQgb2YgY2hhbmdlbGlzdCIKK21zZ3N0ciAiRTY2MzogQWwgZmluYWwgZGUgbGEgbGlzdGEgZGUgY2FtYmlvcy4iCisKKyM6IG5vcm1hbC5jOjgwMDUKK21zZ2lkICJUeXBlICA6cXVpdDxFbnRlcj4gIHRvIGV4aXQgVmltIgorbXNnc3RyICJFc2NyaWJhIDpxdWl0PGVudGVyPiBwYXJhIHRlcm1pbmFyIGxhIGVqZWN1Y2nzbiBkZSBWaW0uIgorCisjOiBvcHMuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgMSB0aW1lIgorbXNnc3RyICIxIGztbmVhICVzZWQgMSB2ZXouIgorCisjOiBvcHMuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgJWQgdGltZXMiCittc2dzdHIgIjEgbO1uZWEgJXNlZCAlZCB2ZWNlcy4iCisKKyM6IG9wcy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAxIHRpbWUiCittc2dzdHIgIiVsZCBs7W5lYXMgJXNlZCAxIHZlei4iCisKKyM6IG9wcy5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiJWxkIGztbmVhcyAlc2VkICVkIHZlY2VzLiIKKworIzogb3BzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB0byBpbmRlbnQuLi4gIgorbXNnc3RyICIlbGQgbO1uZWFzIHBvciBzYW5ncmFyLi4uIgorCisjOiBvcHMuYzo3MTIKK21zZ2lkICIxIGxpbmUgaW5kZW50ZWQgIgorbXNnc3RyICIxIGztbmVhIHNhbmdyYWRhIgorCisjOiBvcHMuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAiJWxkIGztbmVhcyBzYW5ncmFkYXMiCisKKyMgRGViZSBtb3N0cmFyIGxhIGztbmVhIGRlIGNvbWFuZG9zLgorIy4gbXVzdCBkaXNwbGF5IHRoZSBwcm9tcHQKKyM6IG9wcy5jOjE2NzUKK21zZ2lkICJjYW5ub3QgeWFuazsgZGVsZXRlIGFueXdheSIKK21zZ3N0ciAiTm8gcHVlZG8gaGFjZXIgdW4gq3lhbmu7OyC/TG8gYm9ycm8gZGUgdG9kYXMgZm9ybWFzPyIKKworIzogb3BzLmM6MjI2MQorbXNnaWQgIjEgbGluZSBjaGFuZ2VkIgorbXNnc3RyICIxIGztbmVhIGNhbWJpYWRhIgorCisjOiBvcHMuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBjaGFuZ2VkIgorbXNnc3RyICIlbGQgbO1uZWFzIGNhbWJpYWRhcyIKKworIzogb3BzLmM6MjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJmcmVlaW5nICVsZCBsaW5lcyIKK21zZ3N0ciAibGliZXJhbmRvICVsZCBs7W5lYXMiCisKKyM6IG9wcy5jOjI5MjgKK21zZ2lkICIxIGxpbmUgeWFua2VkIgorbXNnc3RyICIxIGztbmVhIGNvcGlhZGEiCisKKyM6IG9wcy5jOjI5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHlhbmtlZCIKK21zZ3N0ciAiJWxkIGztbmVhcyBjb3BpYWRhcyIKKworIzogb3BzLmM6MzIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiBObyBoYXkgbmFkYSBlbiBlbCByZWdpc3RybyAlcyIKKworIyAgSGlnaGxpZ2h0IHRpdGxlCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG9wcy5jOjM3NjYKK21zZ2lkICIiCisiXG4iCisiLS0tIFJlZ2lzdGVycyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gUmVnaXN0cm9zIC0tLSIKKworIzogb3BzLmM6NTA3NQorbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAiTm9tYnJlIGRlIHJlZ2lzdHJvIGlsZWdhbCIKKworIzogb3BzLmM6NTE2MworbXNnaWQgIiIKKyJcbiIKKyIjIFJlZ2lzdGVyczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgUmVnaXN0cm9zOlxuIgorCisjOiBvcHMuYzo1MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzQ6IFVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIKK21zZ3N0ciAiRTU3NDogUmVnaXN0cm8gZGVzY29ub2NpZG8gZGUgdGlwbyCrJWS7LiIKKworIzogb3BzLmM6NTY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU0OiBJbnZhbGlkIHJlZ2lzdGVyIG5hbWU6ICclcyciCittc2dzdHIgIkUzNTQ6IE5vbWJyZSBkZSByZWdpc3RybyBubyB24WxpZG86ICclcyciCisKKyM6IG9wcy5jOjYwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIENvbHM7ICIKK21zZ3N0ciAiJWxkIENvbHM7ICIKKworIzogb3BzLmM6NjA2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiCittc2dzdHIgIiIKKyJTZWxlY2Npb25hZGFzICVzJWxkIGRlICVsZCBM7W5lYXM7ICVsZCBkZSAlbGQgUGFsYWJyYXM7ICVsZCBkZSAlbGQgQ2FyYWN0ZXJlcyIKKworIzogb3BzLmM6NjA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiCittc2dzdHIgIiIKKyJDb2wgJXMgZGUgJXM7IEztbmVhICVsZCBkZSAlbGQ7IFBhbGFicmEgJWxkIGRlICVsZDsgQ2Fy4WN0ZXIgJWxkIGRlICVsZCIKKworIzogb3BzLmM6NjA5MgorIywgYy1mb3JtYXQKK21zZ2lkICIoKyVsZCBmb3IgQk9NKSIKK21zZ3N0ciAiKCslbGQgcGFyYSBCT00pIgorCisjOiBvcHRpb24uYzoxNjQzCittc2dpZCAiJTwlZiVoJW0lPVBhZ2UgJU4iCittc2dzdHIgIiU8JWYlaCVtJT1Q4WdpbmEgJU4iCisKKyM6IG9wdGlvbi5jOjIwOTIKK21zZ2lkICJUaGFua3MgZm9yIGZseWluZyBWaW0iCittc2dzdHIgIkdyYWNpYXMgcG9yIHZvbGFyIGNvbiBWaW0iCisKKyM6IG9wdGlvbi5jOjM0MTkgb3B0aW9uLmM6MzUzNQorbXNnaWQgIkU1MTg6IFVua25vd24gb3B0aW9uIgorbXNnc3RyICJFNTE4OiBPcGNp824gZGVzY29ub2NpZGEuIgorCisjOiBvcHRpb24uYzozNDMyCittc2dpZCAiRTUxOTogT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkU1MTk6IE9wY2nzbiBubyBhZG1pdGlkYSIKKworIzogb3B0aW9uLmM6MzQ1NworbXNnaWQgIkU1MjA6IE5vdCBhbGxvd2VkIGluIGEgbW9kZWxpbmUiCittc2dzdHIgIkU1MjA6IE5vIHNlIHBlcm1pdGUgZW4gdW5hIKttb2RlbGluZbsiCisKKyM6IG9wdGlvbi5jOjM1MjIKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0U2UgZGVmaW5p8yBwb3Ig+mx0aW1hIHZleiBlbiAiCisKKyM6IG9wdGlvbi5jOjM2NjEKK21zZ2lkICJFNTIxOiBOdW1iZXIgcmVxdWlyZWQgYWZ0ZXIgPSIKK21zZ3N0ciAiRTUyMTogU2UgbmVjZXNpdGEgdW4gbvptZXJvIGRlc3B1ZXMgZGUgqz27IgorCisjOiBvcHRpb24uYzozOTg5IG9wdGlvbi5jOjQ2MTkKK21zZ2lkICJFNTIyOiBOb3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTUyMjogTm8gbG8gZW5jb250cukgZW4gZWwgq3Rlcm1jYXC7LiIKKworIzogb3B0aW9uLmM6NDA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM5OiBJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IgorbXNnc3RyICJFNTM5OiBDYXLhY3RlciBpbGVnYWwgPCVzPiIKKworIzogb3B0aW9uLmM6NDYxMQorbXNnaWQgIkU1Mjk6IENhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiRTUyOTogTm8gcHVlZG8gZGVmaW5pciCrdGVybbsgY29tbyB1bmEgY2FkZW5hIGRlIGNhcmFjdGVyZXMgdmFj7WEuIgorCisjOiBvcHRpb24uYzo0NjE0Cittc2dpZCAiRTUzMDogQ2Fubm90IGNoYW5nZSB0ZXJtIGluIEdVSSIKK21zZ3N0ciAiRTUzMDogTm8gcHVlZG8gY2FtYmlhciCrdGVybbsgZW4gbGEgR1VJLiIKKworIzogb3B0aW9uLmM6NDYxNgorbXNnaWQgIkU1MzE6IFVzZSBcIjpndWlcIiB0byBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFNTMxOiBVc2UgqzpndWm7IHBhcmEgaW5pY2lhciBsYSBHVUkuIgorCisjOiBvcHRpb24uYzo0NjQ1Cittc2dpZCAiRTU4OTogJ2JhY2t1cGV4dCcgYW5kICdwYXRjaG1vZGUnIGFyZSBlcXVhbCIKK21zZ3N0ciAiRTU4OTogq2JhY2t1cGV4dLsgeSCrcGF0Y2htb2RluyBzb24gaWd1YWxlcy4iCisKKyM6IG9wdGlvbi5jOjQ4NjAKK21zZ2lkICJFNjE3OiBDYW5ub3QgYmUgY2hhbmdlZCBpbiB0aGUgR1RLKyAyIEdVSSIKK21zZ3N0ciAiRTYxNzogTm8gcHVlZGUgY2FtYmlhcnNlIGVuIGVsIEdVSSBkZSBHVEsrIDIuIgorCisjOiBvcHRpb24uYzo1MDE2Cittc2dpZCAiRTUyNDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTUyNDogRmFsdGEgdW4gc+1tYm9sbyBkZSBkb3MgcHVudG9zLiIKKworIzogb3B0aW9uLmM6NTAxOAorbXNnaWQgIkU1MjU6IFplcm8gbGVuZ3RoIHN0cmluZyIKK21zZ3N0ciAiRTUyNTogQ2FkZW5hIGRlIGNhcmFjdGVyZXMgZGUgbGFyZ28gY2Vyby4iCisKKyM6IG9wdGlvbi5jOjUwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUyNjogTWlzc2luZyBudW1iZXIgYWZ0ZXIgPCVzPiIKK21zZ3N0ciAiRTUyNjogRmFsdGEgZWwgbvptZXJvIGRlc3B1ZXMgZGUgPCVzPi4iCisKKyM6IG9wdGlvbi5jOjUxMDAKK21zZ2lkICJFNTI3OiBNaXNzaW5nIGNvbW1hIgorbXNnc3RyICJFNTI3OiBGYWx0YSB1bmEgY29tYS4iCisKKyM6IG9wdGlvbi5jOjUxMDcKK21zZ2lkICJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJFNTI4OiBEZWJlIGVzcGVjaWZpY2FyIHVuIHZhbG9yICciCisKKyM6IG9wdGlvbi5jOjUxNDgKK21zZ2lkICJFNTk1OiBjb250YWlucyB1bnByaW50YWJsZSBvciB3aWRlIGNoYXJhY3RlciIKK21zZ3N0ciAiRTU5NTogQ29udGllbmUgdW4gY2FyYWN0ZXIgbm8gaW1wcmltaWJsZSBvIGRlIG3hcyBkZSB1biBieXRlIGRlIGFuY2hvLiIKKworIzogb3B0aW9uLmM6NTE5NworbXNnaWQgIkU1OTY6IEludmFsaWQgZm9udChzKSIKK21zZ3N0ciAiRTU5NjogTGFzIGZ1ZW50ZShzKSBkZSBpbXByZXNp824gbm8gc29uIHbhbGlkYXMuIgorCisjOiBvcHRpb24uYzo1MjA1Cittc2dpZCAiRTU5NzogY2FuJ3Qgc2VsZWN0IGZvbnRzZXQiCittc2dzdHIgIkU1OTc6IE5vIHB1ZWRvIHNlbGVjY2lvbmFyIGVzZSCrZm9udHNldLsuIgorCisjOiBvcHRpb24uYzo1MjA3Cittc2dpZCAiRTU5ODogSW52YWxpZCBmb250c2V0IgorbXNnc3RyICJFNTk4OiBFbCBjb25qdW50byBkZSBmdWVudGVzIGRlIGltcHJlc2nzbiBubyBlcyB24WxpZG8uIgorCisjOiBvcHRpb24uYzo1MjE0Cittc2dpZCAiRTUzMzogY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAiIgorIkU1MzM6IE5vIHB1ZWRvIHNlbGVjY2lvbmFyIGxhIGZ1ZW50ZSBkZSBpbXByZXNp824gq2FuY2hhuyAoZGUgYnl0ZSBkb2JsZSkuIgorCisjOiBvcHRpb24uYzo1MjE2Cittc2dpZCAiRTUzNDogSW52YWxpZCB3aWRlIGZvbnQiCittc2dzdHIgIkU1MzQ6IEZ1ZW50ZSBkZSBpbXByZXNp824gq2FuY2hhuyBpbnbhbGlkYS4iCisKKyM6IG9wdGlvbi5jOjU0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgPCVjPiIKK21zZ3N0ciAiRTUzNTogYXLhY3RlciBpbGVnYWwgZGVzcHXpcyBkZSA8JWM+LiIKKworIzogb3B0aW9uLmM6NTU5NworbXNnaWQgIkU1MzY6IGNvbW1hIHJlcXVpcmVkIgorbXNnc3RyICJFNTM2OiBTZSByZXF1aWVyZSB1bmEgY29tYS4iCisKKyM6IG9wdGlvbi5jOjU2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzNzogJ2NvbW1lbnRzdHJpbmcnIG11c3QgYmUgZW1wdHkgb3IgY29udGFpbiAlcyIKK21zZ3N0ciAiRTUzNzogq2NvbW1lbnRzdHJpbme7IGRlYmUgZXN0YXIgdmFjaW8gbyBjb250ZW5lciCrJXO7LiIKKworIzogb3B0aW9uLmM6NTY3OQorbXNnaWQgIkU1Mzg6IE5vIG1vdXNlIHN1cHBvcnQiCittc2dzdHIgIkU1Mzg6IE5vIGhheSBzb3BvcnRlIHBhcmEgZWwgcmF0824uIgorCisjOiBvcHRpb24uYzo1OTQ3Cittc2dpZCAiRTU0MDogVW5jbG9zZWQgZXhwcmVzc2lvbiBzZXF1ZW5jZSIKK21zZ3N0ciAiRTU0MDogU0VjdWVuY2lhIGRlIGV4cHJlc2nzbiBzaW4gY2VycmFyLiIKKworIzogb3B0aW9uLmM6NTk1MQorbXNnaWQgIkU1NDE6IHRvbyBtYW55IGl0ZW1zIgorbXNnc3RyICJFNTQxOiBEZW1hc2lhZG9zIO10ZW1zLiIKKworIzogb3B0aW9uLmM6NTk1MworbXNnaWQgIkU1NDI6IHVuYmFsYW5jZWQgZ3JvdXBzIgorbXNnc3RyICJFNTQyOiBHcnVwb3MgZGVzYmFsYW5jZWFkb3MuIgorCisjOiBvcHRpb24uYzo2MTkzCittc2dpZCAiRTU5MDogQSBwcmV2aWV3IHdpbmRvdyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTU5MDogWWEgZXhpc3RlIHVuYSB2ZW50YW5hIGRlIHZpc3VhbGl6YWNp824gcHJldmlhLiIKKworIzogb3B0aW9uLmM6NjQ1MAorbXNnaWQgIlcxNzogQXJhYmljIHJlcXVpcmVzIFVURi04LCBkbyAnOnNldCBlbmNvZGluZz11dGYtOCciCittc2dzdHIgIiIKKyJXMTc6IEVsIHVzbyBkZSDhcmFiZSByZXF1aWVyZSBsYSBjb2RpZmljYWNp824gVVRGLTgsIHVzZSCrOnNldCBlbmNvZGluZz11dGYtIgorIji7IHByaW1lcm8uIgorCisjOiBvcHRpb24uYzo2NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTM6IE5lZWQgYXQgbGVhc3QgJWQgbGluZXMiCittc2dzdHIgIkU1OTM6IE5lY2VzaXRhIGFsIG1lbm9zICVkIGztbmVhcy4iCisKKyM6IG9wdGlvbi5jOjY3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU5NDogTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIgorbXNnc3RyICJFNTk0OiBOZWNlc2l0YSBhbCBtZW5vcyAlZCBjb2x1bW5hcy4iCisKKyM6IG9wdGlvbi5jOjcxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NTogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMzU1OiBPcGNp824gZGVzY29ub2NpZGE6ICVzIgorCisjOiBvcHRpb24uYzo3MjIwCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBjb2RlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gQ/NkaWdvcyBkZSB0ZXJtaW5hbCAtLS0iCisKKyM6IG9wdGlvbi5jOjcyMjIKK21zZ2lkICIiCisiXG4iCisiLS0tIEdsb2JhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBWYWxvcmVzIGRlIGxhcyBvcGNpb25lcyBnbG9iYWxlcyAtLS0iCisKKyM6IG9wdGlvbi5jOjcyMjQKK21zZ2lkICIiCisiXG4iCisiLS0tIExvY2FsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFZhbG9yZXMgZGUgbGFzIG9wY2lvbmVzIGxvY2FsZXMgLS0tIgorCisjOiBvcHRpb24uYzo3MjI2Cittc2dpZCAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBPcGNpb25lcyAtLS0iCisKKyM6IG9wdGlvbi5jOjc5MzIKK21zZ2lkICJFMzU2OiBnZXRfdmFycCBFUlJPUiIKK21zZ3N0ciAiRTM1NjogRVJST1IgZGUgq2dldF92YXJwuyIKKworIzogb3B0aW9uLmM6ODkwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMzU3OiAnbGFuZ21hcCc6IE1hdGNoaW5nIGNoYXJhY3RlciBtaXNzaW5nIGZvciAlcyIKK21zZ3N0ciAiRTM1Nzogq2xhbmdtYXC7OiBmYWx0YSBjYXLhY3RlciBjb2luY2lkZW50ZSBwYXJhICVzIgorCisjOiBvcHRpb24uYzo4OTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTg6ICdsYW5nbWFwJzogRXh0cmEgY2hhcmFjdGVycyBhZnRlciBzZW1pY29sb246ICVzIgorbXNnc3RyICJFMzU4OiCrbGFuZ21hcLs6IGNhcmFjdGVyZXMgZXh0cmEgZGVzcHXpcyBkZWwgcHVudG8geSBjb21hOiAlcyIKKworIzogb3NfYW1pZ2EuYzoyODAKK21zZ2lkICJjYW5ub3Qgb3BlbiAiCittc2dzdHIgIk5vIHB1ZWRvIGFicmlybG8iCisKKyM6IG9zX2FtaWdhLmM6MzE0Cittc2dpZCAiVklNOiBDYW4ndCBvcGVuIHdpbmRvdyFcbiIKK21zZ3N0ciAiVklNOiChTm8gcHVlZG8gYWJyaXIgbGEgdmVudGFuYSFcbiIKKworIzogb3NfYW1pZ2EuYzozMzgKK21zZ2lkICJOZWVkIEFtaWdhZG9zIHZlcnNpb24gMi4wNCBvciBsYXRlclxuIgorbXNnc3RyICJOZWNlc2l0byBsYSB2ZXJzafNuIDIuMDQgbyBwb3N0ZXJpb3IgZGUgQW1pZ2Fkb3NcbiIKKworIzogb3NfYW1pZ2EuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICJOZWNlc2l0byAlcyB2ZXJzafNuICVsZFxuIgorCisjOiBvc19hbWlnYS5jOjQxNgorbXNnaWQgIkNhbm5vdCBvcGVuIE5JTDpcbiIKK21zZ3N0ciAiTm8gcHVlZG8gYWJyaXIgTklMOlxuIgorCisjOiBvc19hbWlnYS5jOjQyNworbXNnaWQgIkNhbm5vdCBjcmVhdGUgIgorbXNnc3RyICJObyBwdWVkbyBjcmVhciAiCisKKyM6IG9zX2FtaWdhLmM6OTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbSBleGl0aW5nIHdpdGggJWRcbiIKK21zZ3N0ciAiU2FsaWVuZG8gZGUgVmltIGNvbiAlZFxuIgorCisjOiBvc19hbWlnYS5jOjkzNworbXNnaWQgImNhbm5vdCBjaGFuZ2UgY29uc29sZSBtb2RlID8hXG4iCittc2dzdHIgIqG/Tm8gcHVlZG8gY2FtYmlhciBlbCBtb2RvIGRlIGxhIGNvbnNvbGE/IVxuIgorCisjOiBvc19hbWlnYS5jOjEwMDMKK21zZ2lkICJtY2hfZ2V0X3NoZWxsc2l6ZTogbm90IGEgY29uc29sZT8/XG4iCittc2dzdHIgIqttY2hfZ2V0X3NoZWxsc2l6Zbs6IL9ObyBlcyB1bmEgY29uc29sYT9cbiIKKworIyAgaWYgVmltIG9wZW5lZCBhIHdpbmRvdzogRXhlY3V0aW5nIGEgc2hlbGwgbWF5IGNhdXNlIGNyYXNoZXMKKyMuIGlmIFZpbSBvcGVuZWQgYSB3aW5kb3c6IEV4ZWN1dGluZyBhIHNoZWxsIG1heSBjYXVzZSBjcmFzaGVzCisjOiBvc19hbWlnYS5jOjExNTIKK21zZ2lkICJFMzYwOiBDYW5ub3QgZXhlY3V0ZSBzaGVsbCB3aXRoIC1mIG9wdGlvbiIKK21zZ3N0ciAiRTM2MDogTm8gc2UgcHVlZGUgZWplY3V0YXIgbGEgq3NoZWxsuyBjb24gbGEgb3BjafNuIC1mIgorCisjOiBvc19hbWlnYS5jOjExOTMgb3NfYW1pZ2EuYzoxMjgzCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICJObyBwdWVkbyBlamVjdXRhcmxvICIKKworIzogb3NfYW1pZ2EuYzoxMTk2IG9zX2FtaWdhLmM6MTI5MworbXNnaWQgInNoZWxsICIKK21zZ3N0ciAiq3NoZWxsuyAiCisKKyM6IG9zX2FtaWdhLmM6MTIxNiBvc19hbWlnYS5jOjEzMTgKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiIGRldnVlbHRvXG4iCisKKyM6IG9zX2FtaWdhLmM6MTQ1OQorbXNnaWQgIkFOQ0hPUl9CVUZfU0laRSB0b28gc21hbGwuIgorbXNnc3RyICKrQU5DSE9SX0JVRl9TSVpFuyBkZW1hc2lhZG8gcGVxdWXxbyIKKworIzogb3NfYW1pZ2EuYzoxNDYzCittc2dpZCAiSS9PIEVSUk9SIgorbXNnc3RyICJFUlJPUiBFL1MiCisKKyM6IG9zX21zd2luLmM6NTM5Cittc2dpZCAiLi4uKHRydW5jYXRlZCkiCittc2dzdHIgIi4uLih0cnVuY2FkbykiCisKKyM6IG9zX21zd2luLmM6NjQxCittc2dpZCAiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIidjb2x1bW5zJyBubyBlcyA4MCwgbm8gc2UgcHVlZGVuIGVqZWN1dGFyIGNvbWFuZG9zIGV4dGVybm9zIgorCisjOiBvc19tc3dpbi5jOjE5NzMKK21zZ2lkICJFMjM3OiBQcmludGVyIHNlbGVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkUyMzc6IEZBbGzzIGxhIHNlbGVjdGnzbiBkZSBpbXByZXNvcmEuIgorCisjOiBvc19tc3dpbi5jOjIwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG8gJXMgb24gJXMiCittc2dzdHIgInBhcmEgJXMgZW4gJXMiCisKKyM6IG9zX21zd2luLmM6MjAyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjEzOiBVbmtub3duIHByaW50ZXIgZm9udDogJXMiCittc2dzdHIgIkU2MTM6IEZ1ZW50ZSBkZSBpbXByZXNp824gZGVzY29ub2NpZGEgZW4gbGEgaW1wcmVzb3JhOiAlcyIKKworIzogb3NfbXN3aW4uYzoyMDc3IG9zX21zd2luLmM6MjA4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM4OiBQcmludCBlcnJvcjogJXMiCittc2dzdHIgIkUyMzg6IEVycm9yIGRlIGltcHJlc2nzbjogJXMiCisKKyM6IG9zX21zd2luLmM6MjA4OAorbXNnaWQgIlVua25vd24iCittc2dzdHIgIkRlc2Nvbm9jaWRvIgorCisjOiBvc19tc3dpbi5jOjIxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAiSW1wcmltaWVuZG8gqyVzuyIKKworIzogb3NfbXN3aW4uYzozMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDQ6IElsbGVnYWwgY2hhcnNldCBuYW1lIFwiJXNcIiBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICIiCisiRTI0NDogRWwgbm9tYnJlIGRlbCBjb25qdW50byBkZSBjYXJhY3RlcmVzIKslc7sgbm8gZXMgduFsaWRvIGVuIGVsIG5vbWJyZSBkZSAiCisibGEgZnVlbnRlIGRlIGltcHJlc2nzbiCrJXO7IgorCisjOiBvc19tc3dpbi5jOjMyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTogQ2Fy4WN0ZXIgqyVjuyBpbGVnYWwgZW4gZWwgbm9tYnJlIGRlIGxhIGZ1ZW50ZSBkZSBpbXByZXNp824gqyVzuyIKKworIzogb3NfcmlzY29zLmM6MTI1OQorbXNnaWQgIkUzNjY6IEludmFsaWQgJ29zZmlsZXR5cGUnIG9wdGlvbiAtIHVzaW5nIFRleHQiCittc2dzdHIgIkUzNjY6IE9wY2nzbiCrb3NmaWxldHlwZbsgaW524WxpZGEgLSB1c2FuZG8gVGV4dCIKKworIzogb3NfdW5peC5jOjkyNworbXNnaWQgIlZpbTogRG91YmxlIHNpZ25hbCwgZXhpdGluZ1xuIgorbXNnc3RyICJWaW06IGRvYmxlIHNl8WFsLCBzYWxpZW5kb1xuIgorCisjOiBvc191bml4LmM6OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWwgJXNcbiIKK21zZ3N0ciAiVmltOiBjYXB06SB1bmEgc2XxYWwgZGUgbXVlcnRlICVzXG4iCisKKyM6IG9zX3VuaXguYzo5MzYKK21zZ2lkICJWaW06IENhdWdodCBkZWFkbHkgc2lnbmFsXG4iCittc2dzdHIgIlZpbTogY2FwdOkgdW5hIHNl8WFsIGRlIG11ZXJ0ZVxuIgorCisjOiBvc191bml4LmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAiQWJyaXIgbGEgcGFudGFsbGEgWCB0b23zICVsZCBtcyIKKworIzogb3NfdW5peC5jOjEyMjYKK21zZ2lkICIiCisiXG4iCisiVmltOiBHb3QgWCBlcnJvclxuIgorbXNnc3RyICIiCisiXG4iCisiVmltOiBIYXkgdW4gZXJyb3IgZGUgWDExXG4iCisKKyM6IG9zX3VuaXguYzoxMzM0Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiRmFsbPMgbGEgcHJ1ZWJhIGRlbCBzaXN0ZW1hIFgxMSIKKworIzogb3NfdW5peC5jOjE0NzMKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IgorbXNnc3RyICJFbCCrZGlzcGxhebsgZGUgWCBubyBhYnJp8yBhIHRpZW1wby4iCisKKyM6IG9zX3VuaXguYzozMjMwIG9zX3VuaXguYzozOTEwCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsICIKK21zZ3N0ciAiIgorIlxuIgorIk5vIHB1ZWRvIGVqZWN1dGFyIGxhIKtzaGVsbLsgIgorCisjOiBvc191bml4LmM6MzI3OAorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCBzaFxuIgorbXNnc3RyICIiCisiXG4iCisiTm8gcHVlZG8gZWplY3V0YXIgbGEgq3NoZWxsuyCrc2i7XG4iCisKKyM6IG9zX3VuaXguYzozMjgyIG9zX3VuaXguYzozOTE2Cittc2dpZCAiIgorIlxuIgorInNoZWxsIHJldHVybmVkICIKK21zZ3N0ciAiIgorIlxuIgorIkxhIKtzaGVsbLsgaGEgZGV2dWVsdG8gIgorCisjOiBvc191bml4LmM6MzQxNworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgY3JlYXRlIHBpcGVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJObyBwdWVkbyBjcmVhciCrcGlwZXO7XG4iCisKKyM6IG9zX3VuaXguYzozNDMyCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBmb3JrXG4iCittc2dzdHIgIiIKKyJcbiIKKyJObyBwdWVkbyB1c2FyIKtmb3Jru1xuIgorCisjOiBvc191bml4LmM6MzkyMworbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIkNvbWFuZG8gZmluYWxpemFkb1xuIgorCisjOiBvc191bml4LmM6NDE4NyBvc191bml4LmM6NDMxMiBvc191bml4LmM6NTk3OAorbXNnaWQgIlhTTVAgbG9zdCBJQ0UgY29ubmVjdGlvbiIKK21zZ3N0ciAiWFNNUCBwZXJkafMgbGEgY29uZXhp824gSUNFLiIKKworIzogb3NfdW5peC5jOjU1NjEKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICJGYWxs8yBsYSBhcGVydHVyYSBkZSBsYSBwYW50YWxsYSBYMTEiCisKKyM6IG9zX3VuaXguYzo1ODgzCittc2dpZCAiWFNNUCBoYW5kbGluZyBzYXZlLXlvdXJzZWxmIHJlcXVlc3QiCittc2dzdHIgIlhTTVAgZXN04SBtYW5lamFuZG8gdW5hIHNvbGljaXR1ZCBkZSCrZ3VhcmRlbG8gdXN0ZWQgbWlzbW+7LiIKKworIzogb3NfdW5peC5jOjYwMDIKK21zZ2lkICJYU01QIG9wZW5pbmcgY29ubmVjdGlvbiIKK21zZ3N0ciAiWFNNUCBlc3ThIGFicmllbmRvIHVuYSBjb25leGnzbi4iCisKKyM6IG9zX3VuaXguYzo2MDIxCittc2dpZCAiWFNNUCBJQ0UgY29ubmVjdGlvbiB3YXRjaCBmYWlsZWQiCittc2dzdHIgIlhTTVAgRmFsbPMgZWwgbW9uaXRvcmVvIGRlIGxhIGNvbmV4afNuIElDRS4iCisKKyM6IG9zX3VuaXguYzo2MDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlhTTVAgU21jT3BlbkNvbm5lY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBoYSBmYWxsYWRvOiAlcy4iCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgIkVuIGxhIGztbmVhIgorCisjOiBvc193MzJleGUuYzo2NQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIk5vIHB1ZGUgZGVzaWduYXIgbWVtb3JpYSBwYXJhIGxhIGztbmVhIGRlIGNvbWFuZG9zLiIKKworIzogb3NfdzMyZXhlLmM6NjYgb3NfdzMyZXhlLmM6ODkgb3NfdzMyZXhlLmM6MTAwCittc2dpZCAiVklNIEVycm9yIgorbXNnc3RyICJFcnJvciBkZSBWaW0iCisKKyM6IG9zX3czMmV4ZS5jOjg5Cittc2dpZCAiQ291bGQgbm90IGxvYWQgdmltMzIuZGxsISIKK21zZ3N0ciAioU5vIHB1ZGUgY2FyZ2FyIHZpbTMyLmRsbCEiCisKKyM6IG9zX3czMmV4ZS5jOjk5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAioU5vIHB1ZGUgZmlqYXIgbG9zIHB1bnRlcm9zIGRlIGxhIGZ1bmNp824gYSBsYSBETEwhIgorCisjOiBvc193aW4xNi5jOjM0MiBvc193aW4zMi5jOjMyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hlbGwgcmV0dXJuZWQgJWQiCittc2dzdHIgIkxhIKtzaGVsbLsgaGEgZGV2dWVsdG8gJWQiCisKKyM6IG9zX3dpbjMyLmM6MjcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCAlcyBldmVudFxuIgorbXNnc3RyICJWaW06IENhcHTpIGVsIGV2ZW50byAlc1xuIgorCisjOiBvc193aW4zMi5jOjI3MDgKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAiY2VycmFyIgorCisjOiBvc193aW4zMi5jOjI3MTAKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgInNhbGlkYSIKKworIzogb3Nfd2luMzIuYzoyNzExCittc2dpZCAic2h1dGRvd24iCittc2dzdHIgImFwYWdhciIKKworIzogb3Nfd2luMzIuYzozMjAxCittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6IE5vIHNlIGVuY3VlbnRyYSBlbCBjb21hbmRvIgorCisjOiBvc193aW4zMi5jOjMyMTQKK21zZ2lkICIiCisiVklNUlVOLkVYRSBub3QgZm91bmQgaW4geW91ciAkUEFUSC5cbiIKKyJFeHRlcm5hbCBjb21tYW5kcyB3aWxsIG5vdCBwYXVzZSBhZnRlciBjb21wbGV0aW9uLlxuIgorIlNlZSAgOmhlbHAgd2luMzItdmltcnVuICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJWSU1SVU4uRVhFIG5vIHNlIGVuY3VlbnRyYSBlbiBzdSAkUEFUSC5cbiIKKyJMb3MgY29tYW5kb3MgZXh0ZXJub3Mgbm8gaGFy4W4gdW5hIHBhdXNhIGFsIGZpbmFsaXphci5cbiIKKyJW6WFzZSAgOmhlbHAgd2luMzItdmltcnVuICBwYXJhIG3hcyBpbmZvcm1hY2nzbiIKKworIzogb3Nfd2luMzIuYzozMjE3Cittc2dpZCAiVmltIFdhcm5pbmciCittc2dzdHIgIkFkdmVydGVuY2lhIGRlIFZpbSIKKworIzogcXVpY2tmaXguYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MjogVG9vIG1hbnkgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzcyOiBEZW1hc2lhZG9zICUlJWMgZW4gbGEgY2FkZW5hIGRlIGZvcm1hdG8iCisKKyM6IHF1aWNrZml4LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzM6IFVuZXhwZWN0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzczOiAlJSVjIGluZXNwZXJhZG8gZW4gbGEgY2FkZW5hIGRlIGZvcm1hdG8iCisKKyM6IHF1aWNrZml4LmM6MzI1Cittc2dpZCAiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzQ6IEZhbHRhIF0gZW4gbGEgY2FkZW5hIGRlIGZvcm1hdG8iCisKKyM6IHF1aWNrZml4LmM6MzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogJSUlYyBubyBhZG1pdGlkbyBlbiBjYWRlbmEgZGUgZm9ybWF0byIKKworIzogcXVpY2tmaXguYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NjogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmcgcHJlZml4IgorbXNnc3RyICJFMzc2OiAlJSVjIG5vIHbhbGlkbyBlbiBlbCBwcmVmaWpvIGRlIHVuYSBjYWRlbmEgZGUgZm9ybWF0byIKKworIzogcXVpY2tmaXguYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6ICUlJWMgbm8gduFsaWRvIGVuIHVuYSBjYWRlbmEgZGUgZm9ybWF0byIKKworIzogcXVpY2tmaXguYzozOTEKK21zZ2lkICJFMzc4OiAnZXJyb3Jmb3JtYXQnIGNvbnRhaW5zIG5vIHBhdHRlcm4iCittc2dzdHIgIkUzNzg6IKtlcnJvcmZvcm1hdLsgbm8gY29udGllbmUgdW4gcGF0cvNuIgorCisjOiBxdWlja2ZpeC5jOjUwMQorbXNnaWQgIkUzNzk6IE1pc3Npbmcgb3IgZW1wdHkgZGlyZWN0b3J5IG5hbWUiCittc2dzdHIgIkUzNzk6IEVsIG5vbWJyZSBkZWwgZGlyZWN0b3JpbyBmYWx0YSBvIGVzdOEgdmFj7W8iCisKKyM6IHF1aWNrZml4LmM6OTkwCittc2dpZCAiRTU1MzogTm8gbW9yZSBpdGVtcyIKK21zZ3N0ciAiRTU1MzogTm8gaGF5IG3hcyDtdGVtcy4iCisKKyM6IHF1aWNrZml4LmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICIoJWQgb2YgJWQpJXMlczogIgorbXNnc3RyICIoJWQgZGUgJWQpJXMlczogIgorCisjOiBxdWlja2ZpeC5jOjEyMzEKK21zZ2lkICIgKGxpbmUgZGVsZXRlZCkiCittc2dzdHIgIiAobO1uZWEgYm9ycmFkYSkiCisKKyM6IHF1aWNrZml4LmM6MTQ0NAorbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDogQWwgZmluYWwgZGUgbGEgcGlsYSBkZSBjb3JyZWNp824gcuFwaWRhIgorCisjOiBxdWlja2ZpeC5jOjE0NTMKK21zZ2lkICJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODE6IEFsIHByaW5jaXBpbyBkZSBsYSBwaWxhIGRlIGNvcnJlY2nzbiBy4XBpZGEiCisKKyM6IHF1aWNrZml4LmM6MTQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBsaXN0ICVkIG9mICVkOyAlZCBlcnJvcnMiCittc2dzdHIgImxpc3RhIGRlIGVycm9yZXMgJWQgZGUgJWQ6ICVkIGVycm9yZXMiCisKKyM6IHF1aWNrZml4LmM6MTk0MworbXNnaWQgIkUzODI6IENhbm5vdCB3cml0ZSwgJ2J1ZnR5cGUnIG9wdGlvbiBpcyBzZXQiCittc2dzdHIgIkUzODI6IE5vIHNlIHB1ZWRlIGdyYWJhciwgbGEgb3BjafNuIKtidWZ0eXBluyBlc3ThIGFjdGl2YWRhIgorCisjOiByZWdleHAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2OTogaW52YWxpZCBpdGVtIGluICVzJSVbXSIKK21zZ3N0ciAiRTM2OTogRWwg7XRlbSBlbiAlcyUlW10gbm8gZXMgduFsaWRvLiIKKworIzogcmVnZXhwLmM6ODM4Cittc2dpZCAiRTMzOTogUGF0dGVybiB0b28gbG9uZyIKK21zZ3N0ciAiRTMzOTogUGF0cvNuIGRlbWFzaWFkbyBsYXJnbyIKKworIzogcmVnZXhwLmM6MTAwOQorbXNnaWQgIkU1MDogVG9vIG1hbnkgXFx6KCIKK21zZ3N0ciAiRTUwOiBEZW1hc2lhZG9zIFxceigiCisKKyM6IHJlZ2V4cC5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUxOiBUb28gbWFueSAlcygiCittc2dzdHIgIkU1MTogSGF5IGRlbWFzaWFkb3MgJXMoIgorCisjOiByZWdleHAuYzoxMDc3Cittc2dpZCAiRTUyOiBVbm1hdGNoZWQgXFx6KCIKK21zZ3N0ciAiRTUyOiBcXHooIHNpbiBjb21wbGVtZW50by4iCisKKyM6IHJlZ2V4cC5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOiBVbm1hdGNoZWQgJXMlJSgiCittc2dzdHIgIkU1MzogJXMlJSggc2luIGNvbXBsZW1lbnRvLiIKKworIzogcmVnZXhwLmM6MTA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTQ6IFVubWF0Y2hlZCAlcygiCittc2dzdHIgIkU1NDogJXMoIHNpbiBjb21wbGVtZW50by4iCisKKyM6IHJlZ2V4cC5jOjEwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU1OiBVbm1hdGNoZWQgJXMpIgorbXNnc3RyICJFNTU6ICVzKSBzaW4gY29tcGxlbWVudG8uIgorCisjOiByZWdleHAuYzoxMjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjogJXMqIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1NjogRWwgb3BlcmFuZG8gJXMqIHBvZHLtYSBlc3RhciB2YWPtby4iCisKKyM6IHJlZ2V4cC5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3OiAlcysgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU3OiBFTCBvcGVyYW5kbyAlcysgcG9kcu1hIGVzdGFyIHZhY+1vLiIKKworIzogcmVnZXhwLmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzQCIKK21zZ3N0ciAiRTU5OiBDYXLhY3RlciBpbnbhbGlkbyBkZXNwdelzIGRlICVzQCIKKworIzogcmVnZXhwLmM6MTM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTg6ICVzeyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTg6IEVMIG9wZXJhbmRvICVzeyBwb2Ry7WEgZXN0YXIgdmFj7W8uIgorCisjOiByZWdleHAuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDogVG9vIG1hbnkgY29tcGxleCAlc3suLi59cyIKK21zZ3N0ciAiRTYwOiBIYXkgZGVtYXNpYWRvcyAlc3suLi59cyBjb21wbGVqb3MuIgorCisjOiByZWdleHAuYzoxMzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTogTmVzdGVkICVzKiIKK21zZ3N0ciAiRTYxOiBBbmlkYWRvICVzKiIKKworIzogcmVnZXhwLmM6MTM3MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjI6IE5lc3RlZCAlcyVjIgorbXNnc3RyICJFNjI6IEFuaWRhZG8gJXMlYyIKKworIzogcmVnZXhwLmM6MTQ5MQorbXNnaWQgIkU2MzogaW52YWxpZCB1c2Ugb2YgXFxfIgorbXNnc3RyICJFNjM6IFVzbyBpbnbhbGlkbyBkZSBcXF8iCisKKyM6IHJlZ2V4cC5jOjE1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY0OiAlcyVjIGZvbGxvd3Mgbm90aGluZyIKK21zZ3N0ciAiRTY0OiAlcyVjIG5vIHNpZ3VlIGEgbmFkYSIKKworIzogcmVnZXhwLmM6MTU5MgorbXNnaWQgIkU2NTogSWxsZWdhbCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiRTY1OiBSZWZlcm5lY2lhIHJldmVyc2EgaWxlZ2FsLiIKKworIzogcmVnZXhwLmM6MTYwNQorbXNnaWQgIkU2NjogXFx6KCBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNjY6IE5vIHNlIHBlcm1pdGUgXFx6KCBhcXXtLiIKKworIzogcmVnZXhwLmM6MTYyNAorbXNnaWQgIkU2NzogXFx6MSBldCBhbC4gbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY3OiBcXHoxIGV0IGFsLiBubyBlc3ThbiBwZXJtaXRpZG9zIGFxde0uIgorCisjIEVzIHByZWZlcmlibGUgdHJhZHVjaXIgImludmFsaWQiIHBvciAibm8gW2VzXSB24WxpZG8iIHB1ZXMgImluduFsaWRvIiBubyBlcyBsbyBzdWZpY2llbnRlbWVudGUgY2xhcm8uIEFkZW3hcywgbm8gZXMgcG9s7XRpY2FtZW50ZSBjb3JyZWN0byA6LSkKKyM6IHJlZ2V4cC5jOjE2MzUKK21zZ2lkICJFNjg6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxceiIKK21zZ3N0ciAiRTY4OiBIYXkgdW4gY2Fy4WN0ZXIgbm8gduFsaWRvIGRlc3B16XMgZGUgXFx6IgorCisjOiByZWdleHAuYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2OTogTWlzc2luZyBdIGFmdGVyICVzJSVbIgorbXNnc3RyICJFNjk6IEZhbHRhIF0gZGVzcHVlcyBkZSAlcyUlWyIKKworIzogcmVnZXhwLmM6MTcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNzA6IEVtcHR5ICVzJSVbXSIKK21zZ3N0ciAiRTcwOiAlcyUlW10gdmFj7W8uIgorCisjOiByZWdleHAuYzoxNzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MTogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXMlJSIKK21zZ3N0ciAiRTcxOiBDYXLhY3RlciBpbGVnYWwgZGVzcHXpcyBkZSAlcyUlIgorCisjOiByZWdleHAuYzoyNTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTQ6IFN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICJFNTU0OiBFcm9yIGRlIHNpbnTheGlzIGVuICVzey4uLn0uIgorCisjOiByZWdleHAuYzoyODYzIHJlZ2V4cC5jOjMwMTYKK21zZ2lkICJFMzYxOiBDcmFzaCBpbnRlcmNlcHRlZDsgcmVnZXhwIHRvbyBjb21wbGV4PyIKK21zZ3N0ciAiRTM2MTogSW50ZXJjZXB06SB1biCrY3Jhc2i7OyC/ZXhwcmVzafNuIHJlZ3VsYXIgbXV5IGNvbXBsZWphPyIKKworIzogcmVnZXhwLmM6MzAwNCByZWdleHAuYzozMDEzCittc2dpZCAiRTM2MzogcGF0dGVybiBjYXVzZWQgb3V0LW9mLXN0YWNrIGVycm9yIgorbXNnc3RyICJFMzYzOiBlbCBwYXRy824gaGEgcHJvdm9jYWRvIHVuIGVycm9yIKtvdXQtb2Ytc3RhY2u7IgorCisjOiByZWdleHAuYzozMjU4Cittc2dpZCAiRXh0ZXJuYWwgc3VibWF0Y2hlczpcbiIKK21zZ3N0ciAiU3ViY29pbmNpZGVuY2lhcyBleHRlcm5hczpcbiIKKworIzogc2NyZWVuLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIrLS0lM2xkIGxpbmVzIGZvbGRlZCAiCittc2dzdHIgIistLSUzbGQgbO1uZWFzIHBsZWdhZGFzIgorCisjOiBzY3JlZW4uYzo3OTk2Cittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgUkVFTVBMQVpBTUlFTlRPIFZJUlRVQUwiCisKKyM6IHNjcmVlbi5jOjgwMDAKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIFJFRU1QTEFaQVIiCisKKyM6IHNjcmVlbi5jOjgwMDUKK21zZ2lkICIgUkVWRVJTRSIKK21zZ3N0ciAiIElOVkVSVElSIgorCisjOiBzY3JlZW4uYzo4MDA3Cittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIElOU0VSVEFSIgorCisjOiBzY3JlZW4uYzo4MDEwCittc2dpZCAiIChpbnNlcnQpIgorbXNnc3RyICIgKGluc2VydGFyKSIKKworIzogc2NyZWVuLmM6ODAxMgorbXNnaWQgIiAocmVwbGFjZSkiCittc2dzdHIgIiAocmVlbXBsYXphcikiCisKKyM6IHNjcmVlbi5jOjgwMTQKK21zZ2lkICIgKHZyZXBsYWNlKSIKK21zZ3N0ciAiIChyZWVtcGxhemFtaWVudG8gdmlydHVhbCkiCisKKyM6IHNjcmVlbi5jOjgwMTcKK21zZ2lkICIgSGVicmV3IgorbXNnc3RyICIgSGVicmVvIgorCisjOiBzY3JlZW4uYzo4MDI4Cittc2dpZCAiIEFyYWJpYyIKK21zZ3N0ciAiIOFyYWJlIgorCisjOiBzY3JlZW4uYzo4MDMxCittc2dpZCAiIChsYW5nKSIKK21zZ3N0ciAiIChpZGlvbWEpIgorCisjOiBzY3JlZW4uYzo4MDM1Cittc2dpZCAiIChwYXN0ZSkiCittc2dzdHIgIiAocGVnYXIpIgorCisjOiBzY3JlZW4uYzo4MDQ4Cittc2dpZCAiIFZJU1VBTCIKK21zZ3N0ciAiIFZJU1VBTCIKKworIzogc2NyZWVuLmM6ODA0OQorbXNnaWQgIiBWSVNVQUwgTElORSIKK21zZ3N0ciAiIEzNTkVBIFZJU1VBTCIKKworIzogc2NyZWVuLmM6ODA1MAorbXNnaWQgIiBWSVNVQUwgQkxPQ0siCittc2dzdHIgIiBCTE9RVUUgVklTVUFMIgorCisjOiBzY3JlZW4uYzo4MDUxCittc2dpZCAiIFNFTEVDVCIKK21zZ3N0ciAiIFNFTEVDQ0lPTkFSIgorCisjOiBzY3JlZW4uYzo4MDUyCittc2dpZCAiIFNFTEVDVCBMSU5FIgorbXNnc3RyICIgU0VMRUNDSU9OQVIgTM1ORUEiCisKKyM6IHNjcmVlbi5jOjgwNTMKK21zZ2lkICIgU0VMRUNUIEJMT0NLIgorbXNnc3RyICIgU0VMRUNDSU9OQVIgQkxPUVVFIgorCisjOiBzY3JlZW4uYzo4MDY4IHNjcmVlbi5jOjgxMzEKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgImdyYWJhbmRvIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIKK21zZ3N0ciAiTGEgYvpzcXVlZGEgaGEgbGxlZ2FkbyBhbCBQUklOQ0lQSU8sIGNvbnRpbnVhbmRvIGRlc2RlIGVsIEZJTkFMLiIKKworIzogc2VhcmNoLmM6MzgKK21zZ2lkICJzZWFyY2ggaGl0IEJPVFRPTSwgY29udGludWluZyBhdCBUT1AiCittc2dzdHIgIkxhIGL6c3F1ZWRhIGhhIGxsZWdhZG8gYWwgRklOQUwsIGNvbnRpbnVhbmRvIGRlc2RlIGVsIFBSSU5DSVBJTyIKKworIzogc2VhcmNoLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IENhZGVuYSBkZSBi+nNxdWVkYSBubyB24WxpZGE6ICVzIgorCisjOiBzZWFyY2guYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg0OiBMYSBi+nNxdWVkYSBoYSBsbGVnYWRvIGFsIFBSSU5DSVBJTyBzaW4gY29pbmNpZGVuY2lhcyBjb246ICVzIgorCisjOiBzZWFyY2guYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NTogc2VhcmNoIGhpdCBCT1RUT00gd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg1OiBMYSBi+nNxdWVkYSBoYSBsbGVnYWRvIGFsIEZJTkFMIHNpbiBjb2luY2lkZW5jaWFzIGNvbjogJXMiCisKKyM6IHNlYXJjaC5jOjEyNDkKK21zZ2lkICJFMzg2OiBFeHBlY3RlZCAnPycgb3IgJy8nICBhZnRlciAnOyciCittc2dzdHIgIkUzODY6IEVzcGVyYWJhIKs/uyBvIKsvuyBkZXNwdelzIGRlIKs7uyIKKworIzogc2VhcmNoLmM6Mzc1OQorbXNnaWQgIiAoaW5jbHVkZXMgcHJldmlvdXNseSBsaXN0ZWQgbWF0Y2gpIgorbXNnc3RyICIgKGluY2x1eWUgbGEgY29pbmNpZGVuY2lhIG1vc3RyYWRhIHByZXZpYW1lbnRlKS4iCisKKyMgIGN1cnNvciBhdCBzdGF0dXMgbGluZQorIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNzc5Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIEZpY2hlcm9zIGluY2x1aWRvcyAiCisKKyM6IHNlYXJjaC5jOjM3ODEKK21zZ2lkICJub3QgZm91bmQgIgorbXNnc3RyICJubyBsbyBlbmNvbnRy6SIKKworIzogc2VhcmNoLmM6Mzc4MgorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgImVuIGxhIHJ1dGEgLS0tXG4iCisKKyM6IHNlYXJjaC5jOjM4MzkKK21zZ2lkICIgIChBbHJlYWR5IGxpc3RlZCkiCittc2dzdHIgIiAgKFlhIGxvIGVudW1lcukpIgorCisjOiBzZWFyY2guYzozODQxCittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiAgTk8gU0UgRU5DT05UUtMiCisKKyM6IHNlYXJjaC5jOjM4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiCittc2dzdHIgIkV4cGxvcmFuZG8gZWwgZmljaGVybyBpbmNsdWlkbzogJXMiCisKKyM6IHNlYXJjaC5jOjQxMTEKK21zZ2lkICJFMzg3OiBNYXRjaCBpcyBvbiBjdXJyZW50IGxpbmUiCittc2dzdHIgIkUzODc6IExhIGNvaW5jaWRlbmNpYSBlc3ThIGVuIGxhIGztbmVhIGVuIGN1cnNvLiIKKworIzogc2VhcmNoLmM6NDI1NAorbXNnaWQgIkFsbCBpbmNsdWRlZCBmaWxlcyB3ZXJlIGZvdW5kIgorbXNnc3RyICJTZSBoYW4gZW5jb250cmFkbyB0b2RvcyBsb3MgZmljaGVyb3MgaW5jbHVpZG9zIgorCisjOiBzZWFyY2guYzo0MjU2Cittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIk5vIGhheSBmaWNoZXJvcyBpbmNsdWlkb3MiCisKKyM6IHNlYXJjaC5jOjQyNzIKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IE5vIHNlIHB1ZG8gZW5jb250cmFyIGxhIGRlZmluaWNp824iCisKKyM6IHNlYXJjaC5jOjQyNzQKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IE5vIHNlIHB1ZG8gZW5jb250cmFyIGVsIHBhdHLzbiIKKworIzogc3ludGF4LmM6MzA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkwOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTM5MDogQXJndW1lbnRvIGlsZWdhbDogJXMiCisKKyM6IHN5bnRheC5jOjMyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTE6IE5vIGV4aXN0ZSB0YWwgYWdydXBhbWllbnRvIHNpbnThY3RpY286ICVzIgorCisjOiBzeW50YXguYzozMzk0Cittc2dpZCAiTm8gU3ludGF4IGl0ZW1zIGRlZmluZWQgZm9yIHRoaXMgYnVmZmVyIgorbXNnc3RyICJObyBoYXkg7XRlbXMgc2ludOFjdGljb3MgZGVmaW5pZG9zIHBhcmEgZXN0ZSCrYnVmZmVyuyIKKworIzogc3ludGF4LmM6MzQwMgorbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAiU2luY3Jvbml6YW5kbyBlbiBsb3MgY29tZW50YXJpb3MgZGUgZXN0aWxvIKtDuy4iCisKKyM6IHN5bnRheC5jOjM0MTAKK21zZ2lkICJubyBzeW5jaW5nIgorbXNnc3RyICJubyBoYXkgc2luY3Jvbml6YWNp824iCisKKyM6IHN5bnRheC5jOjM0MTMKK21zZ2lkICJzeW5jaW5nIHN0YXJ0cyAiCittc2dzdHIgIkNvbWVuemFuZG8gc2luY3Jvbml6YWNp824uIgorCisjOiBzeW50YXguYzozNDE1IHN5bnRheC5jOjM0OTAKK21zZ2lkICIgbGluZXMgYmVmb3JlIHRvcCBsaW5lIgorbXNnc3RyICIgbO1uZWFzIGFudGVzIGRlIGxhIGztbmVhIHN1cGVyaW9yIgorCisjOiBzeW50YXguYzozNDIwCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggc3luYyBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gzXRlbXMgZGUgc2luY3Jvbml6YWNp824gZGUgc2ludOF4aXMgLS0tIgorCisjOiBzeW50YXguYzozNDI1Cittc2dpZCAiIgorIlxuIgorInN5bmNpbmcgb24gaXRlbXMiCittc2dzdHIgIiIKKyJcbiIKKyJzaW5jcm9uaXphbmRvIGVuIGxvcyDtdGVtcyIKKworIzogc3ludGF4LmM6MzQzMQorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBJdGVtcyBzaW504WN0aWNvcyAtLS0iCisKKyM6IHN5bnRheC5jOjM0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MjogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTI6IE5vIGV4aXN0ZSB0YWwgYWdydXBhbWllbnRvIHNpbnThY3RpY286ICVzIgorCisjOiBzeW50YXguYzozNDgwCittc2dpZCAibWluaW1hbCAiCittc2dzdHIgIm3tbmltbyIKKworIzogc3ludGF4LmM6MzQ4NworbXNnaWQgIm1heGltYWwgIgorbXNnc3RyICJt4XhpbW8iCisKKyM6IHN5bnRheC5jOjM0OTkKK21zZ2lkICI7IG1hdGNoICIKK21zZ3N0ciAiOyBjb2luY2lkZSIKKworIzogc3ludGF4LmM6MzUwMQorbXNnaWQgIiBsaW5lIGJyZWFrcyIKK21zZ3N0ciAiIGztbmVhcyBkZSBxdWllYnJlIgorCisjOiBzeW50YXguYzo0MTM1Cittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzkzOiBncm91cFt0XWhlcmUgbm90IGFjY2VwdGVkIGhlcmUiCisKKyM6IHN5bnRheC5jOjQxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiBObyBzZSBlbmN1ZW50cmEgZWwgaXRlbSBkZSByZWdp824gcGFyYSAlcyIKKworIzogc3ludGF4LmM6NDE4NworbXNnaWQgIkUzOTU6IGNvbnRhaW5zIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk1OiBlbCBjb250ZW5pZG8gZGVsIGFyZ3VtZW50byBubyBzZSBhY2VwdGEgYXF17SIKKworIzogc3ludGF4LmM6NDE5OAorbXNnaWQgIkUzOTY6IGNvbnRhaW5lZGluIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk2OiBlbCBhcmd1bWVudG8gq2NvbnRhaW5lZGluuyBubyBzZSBhY2VwdGEgYXF17SIKKworIzogc3ludGF4LmM6NDI3NgorbXNnaWQgIkUzOTc6IEZpbGVuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMzk3OiBIYWNlIGZhbHRhIHVuIG5vbWJyZSBkZSBmaWNoZXJvIgorCisjOiBzeW50YXguYzo0NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODogRmFsdGEgZWwgqz27OiAlcyIKKworIzogc3ludGF4LmM6NDc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogQXJndW1lbnRvcyBpbnN1ZmljaWVudGVzOiByZWdp824gZGUgc2ludGF4aXMgJXMiCisKKyM6IHN5bnRheC5jOjUxMDMKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDogTm8gc2UgaGEgZXNwZWNpZmljYWRvIHVuYSBhZ3J1cGFjafNuIgorCisjOiBzeW50YXguYzo1MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDE6IFBhdHRlcm4gZGVsaW1pdGVyIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MDE6IE5vIGhheSB1biBkZWxpbWl0YWRvciBkZSBwYXRy8246ICVzIgorCisjOiBzeW50YXguYzo1MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDI6IEdhcmJhZ2UgYWZ0ZXIgcGF0dGVybjogJXMiCittc2dzdHIgIkU0MDI6IEJhc3VyYSBkZXNwdelzIGRlbCBwYXRy8246ICVzIgorCisjOiBzeW50YXguYzo1MzA1Cittc2dpZCAiRTQwMzogc3ludGF4IHN5bmM6IGxpbmUgY29udGludWF0aW9ucyBwYXR0ZXJuIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiIgorIkU0MDM6IFNpbmNyb25pemFjafNuIGRlIHNpbnTheGlzOiBTZSBlc3BlY2lmaWPzIGRvcyB2ZWNlcyB1biBwYXRy824gZGUgIgorImNvbnRpbnVhY2lvbmVzIGRlIGztbmVhLiIKKworIzogc3ludGF4LmM6NTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA0OiBJbGxlZ2FsIGFyZ3VtZW50czogJXMiCittc2dzdHIgIkU0MDQ6IEFyZ3VtZW50b3MgaWxlZ2FsZXM6ICVzIgorCisjOiBzeW50YXguYzo1NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDU6IE1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MDU6IEZhbHRhIGVsIHNpZ25vIGlndWFsOiAlcyIKKworIzogc3ludGF4LmM6NTQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA2OiBFbXB0eSBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MDY6IEFyZ3VtZW50byB2YWPtbzogJXMiCisKKyM6IHN5bnRheC5jOjU0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNzogJXMgbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTQwNzogJXMgbm8gZXN04SBwZXJtaXRpZG8gYXF17SIKKworIzogc3ludGF4LmM6NTQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA4OiAlcyBtdXN0IGJlIGZpcnN0IGluIGNvbnRhaW5zIGxpc3QiCittc2dzdHIgIkU0MDg6ICVzIGRlYmUgc2VyIGVsIHByaW1lcm8gZW4gbGEgbGlzdGEgZGUgY29udGVuaWRvIgorCisjOiBzeW50YXguYzo1NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDk6IFVua25vd24gZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkU0MDk6IE5vbWJyZSBkZSBncnVwbyBkZXNjb25vY2lkbzogJXMiCisKKyM6IHN5bnRheC5jOjU3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiBTdWJjb21hbmRvIKs6c3ludGF4uyBubyB24WxpZG86ICVzIgorCisjOiBzeW50YXguYzo2MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTE6IGhpZ2hsaWdodCBncm91cCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDExOiBncnVwbyByZWFsemFkbyBubyBlbmNvbnRyYWRvOiAlcyIKKworIzogc3ludGF4LmM6NjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEyOiBOb3QgZW5vdWdoIGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMjogQXJndW1lbnRvcyBpbnN1ZmljaWVudGVzOiCrOmhpZ2hsaWdodCBsaW5rICVzuyIKKworIzogc3ludGF4LmM6NjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDEzOiBUb28gbWFueSBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTM6IERlbWFzaWFkb3MgYXJndW1lbnRvczogqzpoaWdobGlnaHQgbGluayAlc7siCisKKyM6IHN5bnRheC5jOjYxODcKK21zZ2lkICJFNDE0OiBncm91cCBoYXMgc2V0dGluZ3MsIGhpZ2hsaWdodCBsaW5rIGlnbm9yZWQiCittc2dzdHIgIiIKKyJFNDE0OiBFbCBncnVwbyB0aWVuZSBvcGNpb25lcyBhc2lnbmFkYXMsIHNlIGhhIGlnbm9yYWRvIGVsIGVubGFjZSBkZSAiCisiY29sb3JpemFjafNuLiIKKworIzogc3ludGF4LmM6NjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE1OiB1bmV4cGVjdGVkIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE1OiBTaWdubyBpZ3VhbCBpbmVzcGVyYWRvOiAlcyIKKworIzogc3ludGF4LmM6NjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE2OiBtaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE2OiBmYWx0YSBlbCBzaWdubyBpZ3VhbDogJXMiCisKKyM6IHN5bnRheC5jOjYzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MTc6IGZhbHRhIGVsIGFyZ3VtZW50bzogJXMiCisKKyM6IHN5bnRheC5jOjY0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6IFZhbG9yIGlsZWdhbDogJXMiCisKKyM6IHN5bnRheC5jOjY1MzYKK21zZ2lkICJFNDE5OiBGRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDE5OiBjb2xvciBkZSBwcmltZXIgcGxhbm8gZGVzY29ub2NpZG8iCisKKyM6IHN5bnRheC5jOjY1NDcKK21zZ2lkICJFNDIwOiBCRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDIwOiBDb2xvciBkZSBmb25kbyBkZXNjb25vY2lkbyIKKworIzogc3ludGF4LmM6NjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6IE5vbWJyZSBvIG76bWVybyBkZSBjb2xvciBkZXNjb25vY2lkbzogJXMiCisKKyM6IHN5bnRheC5jOjY4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6IGPzZGlnbyBkZSB0ZXJtaW5hbCBkZW1hc2lhZG8gbGFyZ286ICVzIgorCisjOiBzeW50YXguYzo2ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjM6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDIzOiBBcmd1bWVudG8gaWxlZ2FsOiAlcyIKKworIzogc3ludGF4LmM6NzM5MAorbXNnaWQgIkU0MjQ6IFRvbyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBpbiB1c2UiCittc2dzdHIgIkU0MjQ6IEhheSBkZW1hc2lhZG9zIGF0cmlidXRvcyBkZSByZWFsemFkbyBlbiB1c28iCisKKyM6IHN5bnRheC5jOjc5MTEKK21zZ2lkICJFNjY5OiBVbnByaW50YWJsZSBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSIKK21zZ3N0ciAiRTY2OTogQ2FyYWN0ZXIgbm8gaW1wcmltaWJsZSBlbiBlbCBub21icmUgZGVsIGdydXBvLiIKKworIyBFcyBwcmVmZXJpYmxlIHRyYWR1Y2lyICJpbnZhbGlkIiBwb3IgIm5vIFtlc10gduFsaWRvIiBwdWVzICJpbnbhbGlkbyIgCisjIG5vIGVzIGxvIHN1ZmljaWVudGVtZW50ZSBjbGFyby4gQWRlbeFzLCBubyBlcyBwb2ztdGljYW1lbnRlIGNvcnJlY3RvIDotKQorIyBBTFYKKyMuIFRoaXMgaXMgYW4gZXJyb3IsIGJ1dCBzaW5jZSB0aGVyZSBwcmV2aW91c2x5IHdhcyBubyBjaGVjayBvbmx5CisjLiAqIGdpdmUgYSB3YXJuaW5nLgorIzogc3ludGF4LmM6NzkxOAorbXNnaWQgIlcxODogSW52YWxpZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSIKK21zZ3N0ciAiVzE4OiBIYXkgdW4gY2Fy4WN0ZXIgbm8gduFsaWRvIGVuIGVsIG5vYnJlIGRlbCBncnVwby4iCisKKyM6IHRhZy5jOjkwCittc2dpZCAiRTU1NTogYXQgYm90dG9tIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiRTU1NTogRW4gZWwgZmluYWwgZGUgbGEgcGlsYSBkZSBjb3JyZWNp824gcuFwaWRhIgorCisjOiB0YWcuYzo5MQorbXNnaWQgIkU1NTY6IGF0IHRvcCBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTY6IEVuIGVsIHByaW5jaXBpbyBkZSBsYSBwaWxhIGRlIGNvcnJlY2nzbiBy4XBpZGEiCisKKyM6IHRhZy5jOjQxMgorbXNnaWQgIkU0MjU6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI1OiBObyBzZSBwdWVkZSBpciBhbnRlcyBkZWwgcHJpbWVyIKt0YWe7IGNvaW5jaWRlbnRlIgorCisjOiB0YWcuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6IKt0YWe7IG5vIGVuY29udHJhZG86ICVzIgorCisjOiB0YWcuYzo1ODMKK21zZ2lkICIgICMgcHJpIGtpbmQgdGFnIgorbXNnc3RyICIgICMgbWFyY2EgdGlwbyBwcmkiCisKKyM6IHRhZy5jOjU4NgorbXNnaWQgImZpbGVcbiIKK21zZ3N0ciAiZmljaGVyb1xuIgorCisjICAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMgICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjLiAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMuICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjOiB0YWcuYzo3NDQKK21zZ2lkICJFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOiAiCittc2dzdHIgIkludHJvZHV6Y2EgZWwgbrogZGUgbGEgZWxlY2Np824gKDxJTlRSTz4gcGFyYSBhYm9ydGFyKTogIgorCisjOiB0YWcuYzo3ODQKK21zZ2lkICJFNDI3OiBUaGVyZSBpcyBvbmx5IG9uZSBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjc6IEhheSBz82xvIHVuIKt0YWe7IHF1ZSBjb2luY2lkZSIKKworIzogdGFnLmM6Nzg2Cittc2dpZCAiRTQyODogQ2Fubm90IGdvIGJleW9uZCBsYXN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyMDogTm8gc2UgcHVlZGUgaXIgbeFzIGFsbOEgZGVsIPpsdGltbyCrdGFnuyBxdWUgY29pbmNpZGEiCisKKyM6IHRhZy5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiTm8gZXhpc3RlIGVsIGZpY2hlcm8gqyVzuy4iCisKKyMgIEdpdmUgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIHRhZ3MKKyMuIEdpdmUgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIHRhZ3MKKyM6IHRhZy5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJWQgb2YgJWQlcyIKK21zZ3N0ciAiq3RhZ7sgJWQgZGUgJWQlcyIKKworIzogdGFnLmM6ODI2Cittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiBvIG3hcyIKKworIzogdGFnLmM6ODI4Cittc2dpZCAiICBVc2luZyB0YWcgd2l0aCBkaWZmZXJlbnQgY2FzZSEiCittc2dzdHIgIiAgVXNvIGRlIHVuIKt0YWe7IGNvbiBjYWphIGRpZmVyZW50ZSIKKworIzogdGFnLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Mjk6IEZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFNDI5OiBFbCBmaWNoZXJvIKslc7sgbm8gZXhpc3RlIgorCisjICBIaWdobGlnaHQgdGl0bGUKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6OTQxCittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyBBIKt0YWe7ICAgICAgICBERVNERSBsYSBs7W5lYSAgIGVuIGVsIGZpY2hlcm8vdGV4dG8iCisKKyM6IHRhZy5jOjEzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIHRhZ3MgZmlsZSAlcyIKK21zZ3N0ciAiQnVzY2FuZG8gZWwgZmljaGVybyBkZSCrdGFnc7sgJXMiCisKKyM6IHRhZy5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IFJ1dGEgZGVsIGZpY2hlcm8gZGUgq3RhZ3O7IHRydW5jYWRhIHBhcmEgJXNcbiIKKworIzogdGFnLmM6MjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogRXJyb3IgZGUgZm9ybWF0byBlbiBlbCBmaWNoZXJvIGRlIKt0YWdzuyCrJXO7IgorCisjOiB0YWcuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZm9yZSBieXRlICVsZCIKK21zZ3N0ciAiQWRlbGFudGUgZGVsIGJ5dGUgJWxkIgorCisjOiB0YWcuYzoyMjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzI6IFRhZ3MgZmlsZSBub3Qgc29ydGVkOiAlcyIKK21zZ3N0ciAiRTQzMjogRmljaGVybyBkZSCrdGFnc7sgc2luIG9yZGVuYXI6ICVzIgorCisjICBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIy4gbmV2ZXIgb3BlbmVkIGFueSB0YWdzIGZpbGUKKyM6IHRhZy5jOjIyODAKK21zZ2lkICJFNDMzOiBObyB0YWdzIGZpbGUiCittc2dzdHIgIkU0MzM6IE5vIGhheSBmaWNoZXJvIGRlIKt0YWdzuyIKKworIzogdGFnLmM6MzAxNgorbXNnaWQgIkU0MzQ6IENhbid0IGZpbmQgdGFnIHBhdHRlcm4iCittc2dzdHIgIkU0MzQ6IE5vIHNlIHB1ZWRlIGVuY29udHJhciBlbCBwYXRy824gZGUgq3RhZ3O7IgorCisjOiB0YWcuYzozMDI3Cittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiBObyBzZSBwdWRvIGVuY29udHJhciBlbCCrdGFnuywgoWFkaXZpbm8gc29sYW1lbnRlISIKKworIzogdGVybS5jOjE3NTkKK21zZ2lkICInIG5vdCBrbm93bi4gQXZhaWxhYmxlIGJ1aWx0aW4gdGVybWluYWxzIGFyZToiCittc2dzdHIgIicgZGVzY29ub2NpZG8uIExvcyB0ZXJtaW5hbGVzIGluY29ycG9yYWRvcyBkaXNwb25pYmxlcyBzb246IgorCisjOiB0ZXJtLmM6MTc4MworbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAiVXNhbmRvICcgcG9yIGRlZmVjdG8uIgorCisjOiB0ZXJtLmM6MjE0MQorbXNnaWQgIkU1NTc6IENhbm5vdCBvcGVuIHRlcm1jYXAgZmlsZSIKK21zZ3N0ciAiRTU1NzogTm8gcHVlZG8gYWJyaXIgZWwgZmljaGVybyCrdGVybWNhcLsuIgorCisjOiB0ZXJtLmM6MjE0NQorbXNnaWQgIkU1NTg6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtaW5mbyIKK21zZ3N0ciAiRTU1ODogTm8gc2UgaGEgZW5jb250cmFkbyBsYSBkZWZpbmljafNuIGRlbCB0ZXJtaW5hbCBlbiCrdGVybWluZm+7LiIKKworIzogdGVybS5jOjIxNDcKK21zZ2lkICJFNTU5OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTU1OTogTm8gc2UgaGEgZW5jb250cmFkbyBsYSBkZWZpbmljafNuIGRlbCB0ZXJtaW5hbCBlbiCrdGVybWNhcLsuIgorCisjOiB0ZXJtLmM6MjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDM2OiBObyBcIiVzXCIgZW50cnkgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTQzNjogbGEgZW50cmFkYSCrJXO7IG5vIGV4aXN0ZSBlbiBlbCBmaWNoZXJvIKt0ZXJtY2Fwuy4iCisKKyM6IHRlcm0uYzoyNzgwCittc2dpZCAiRTQzNzogdGVybWluYWwgY2FwYWJpbGl0eSBcImNtXCIgcmVxdWlyZWQiCittc2dzdHIgIkU0Mzc6IFNlIG5lY2VzaXRhIGxhIGNhcGFjaWRhZCBkZSB0ZXJtaW5hbCCrY227IgorCisjICBIaWdobGlnaHQgdGl0bGUKKyMgIEhpZ2hsaWdodCB0aXRsZQorIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0ZXJtLmM6NDk5MAorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwga2V5cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gVGVjbGFzIGRlbCB0ZXJtaW5hbCAtLS0iCisKKyM6IHVpLmM6MjU4Cittc2dpZCAibmV3IHNoZWxsIHN0YXJ0ZWRcbiIKK21zZ3N0ciAiSW5pY2npIHVuYSCrc2hlbGy7IG51ZXZhXG4iCisKKyM6IHVpLmM6MTg0MQorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICJWaW06IGVycm9yIGFsIGxlZXIgbGEgZW50cmFkYSwgc2FsaWVuZG8uLi5cbiIKKworIyAgbXVzdCBkaXNwbGF5IHRoZSBwcm9tcHQKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6NDA1Cittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICJObyBlcyBwb3NpYmxlIGRlc2hhY2VyOyBjb250aW51YW5kbyBkZSB0b2RvcyBtb2RvcyIKKworIzogdW5kby5jOjU2MQorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiCrdV91bmRvuzogbvptZXJvcyBkZSBs7W5lYSBlcnLzbmVvcyIKKworIzogdW5kby5jOjc1NworbXNnaWQgIjEgY2hhbmdlIgorbXNnc3RyICIxIGNhbWJpbyIKKworIzogdW5kby5jOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhbmdlcyIKK21zZ3N0ciAiJWxkIGNhbWJpb3MiCisKKyM6IHVuZG8uYzo4MTIKK21zZ2lkICJFNDM5OiB1bmRvIGxpc3QgY29ycnVwdCIKK21zZ3N0ciAiRTQzOTogbGEgbGlzdGEgZGUgZGVzaGFjZXIgc2UgZGHx8y4iCisKKyM6IHVuZG8uYzo4NDQKK21zZ2lkICJFNDQwOiB1bmRvIGxpbmUgbWlzc2luZyIKK21zZ3N0ciAiRTQ0MDogZmFsdGEgbGEgbO1uZWEgZGVzaGFjZXIuIgorCisjICBPbmx5IE1TIFZDIDQuMSBhbmQgZWFybGllciBjYW4gZG8gV2luMzJzCisjLiBPbmx5IE1TIFZDIDQuMSBhbmQgZWFybGllciBjYW4gZG8gV2luMzJzCisjOiB2ZXJzaW9uLmM6NzM5Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYvMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2nzbiBHVUkgZGUgMTYvMzIgYml0cyBwYXJhIE1TLVdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzo3NDEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJWZXJzafNuIEdVSSBkZSAzMiBiaXRzIHBhcmEgTVMtV2luZG93cyIKKworIzogdmVyc2lvbi5jOjc0NAorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiIGVuIG1vZG8gV2luMzJzIgorCisjOiB2ZXJzaW9uLmM6NzQ2Cittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIiBjb24gc29wb3J0ZSBwYXJhIE9MRSIKKworIzogdmVyc2lvbi5jOjc0OQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBjb25zb2xlIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJWZXJzafNuIGRlIDMyIGJpdHMgcGFyYSBjb25zb2xhIGRlIE1TLVdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzo3NTMKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNiBiaXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNp824gZGUgMTYgYml0cyBwYXJhIE1TLVdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzo3NTcKK21zZ2lkICIiCisiXG4iCisiMzIgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2nzbiBkZSAzMiBiaXRzIHBhcmEgTVMtRE9TIgorCisjOiB2ZXJzaW9uLmM6NzU5Cittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNp824gZGUgMTYgYml0cyBwYXJhIE1TLURPUyIKKworIzogdmVyc2lvbi5jOjc2NQorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2nzbiBYICh1bml4KSBwYXJhIE1hY09TIgorCisjOiB2ZXJzaW9uLmM6NzY3Cittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNp824gWCBwYXJhIE1hY09TIgorCisjOiB2ZXJzaW9uLmM6NzcwCittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJWZXJzafNuIHBhcmEgTWFjT1MiCisKKyM6IHZlcnNpb24uYzo3NzUKK21zZ2lkICIiCisiXG4iCisiUklTQyBPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2nzbiBwYXJhIFJJU0MgT1MiCisKKyM6IHZlcnNpb24uYzo3ODUKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisiUGFyY2hlcyBpbmNsdWlkb3M6ICIKKworIzogdmVyc2lvbi5jOjgxMSB2ZXJzaW9uLmM6MTE3OQorbXNnaWQgIk1vZGlmaWVkIGJ5ICIKK21zZ3N0ciAiTW9kaWZpY2FkbyBwb3IgIgorCisjOiB2ZXJzaW9uLmM6ODE4Cittc2dpZCAiIgorIlxuIgorIkNvbXBpbGVkICIKK21zZ3N0ciAiIgorIlxuIgorIkNvbXBpbGFkbyAiCisKKyM6IHZlcnNpb24uYzo4MjEKK21zZ2lkICJieSAiCittc2dzdHIgInBvciAiCisKKyM6IHZlcnNpb24uYzo4MzMKK21zZ2lkICIiCisiXG4iCisiSHVnZSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNp824gq2Vub3JtZbsgIgorCisjOiB2ZXJzaW9uLmM6ODM2Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNp824gq2dyYW5kZbsgIgorCisjOiB2ZXJzaW9uLmM6ODM5Cittc2dpZCAiIgorIlxuIgorIk5vcm1hbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNp824gq25vcm1hbLsgIgorCisjOiB2ZXJzaW9uLmM6ODQyCittc2dpZCAiIgorIlxuIgorIlNtYWxsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2nzbiCrcGVxdWXxYbsgIgorCisjOiB2ZXJzaW9uLmM6ODQ0Cittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJWZXJzafNuIKtkaW1pbnV0YbsgIgorCisjOiB2ZXJzaW9uLmM6ODUwCittc2dpZCAid2l0aG91dCBHVUkuIgorbXNnc3RyICJzaW4gR1VJLiIKKworIzogdmVyc2lvbi5jOjg1NQorbXNnaWQgIndpdGggR1RLMi1HTk9NRSBHVUkuIgorbXNnc3RyICJjb24gR1VJIEdUSzItR05PTUUuIgorCisjOiB2ZXJzaW9uLmM6ODU3Cittc2dpZCAid2l0aCBHVEstR05PTUUgR1VJLiIKK21zZ3N0ciAiY29uIEdVSSBHVEstR05PTUUuIgorCisjOiB2ZXJzaW9uLmM6ODYxCittc2dpZCAid2l0aCBHVEsyIEdVSS4iCittc2dzdHIgImNvbiBHVUkgR1RLMi4iCisKKyM6IHZlcnNpb24uYzo4NjMKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICJjb24gR1VJIEdUSy4iCisKKyM6IHZlcnNpb24uYzo4NjgKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICJjb24gR1VJIFgxMS1Nb3RpZi4iCisKKyM6IHZlcnNpb24uYzo4NzIKK21zZ2lkICJ3aXRoIFgxMS1uZVh0YXcgR1VJLiIKK21zZ3N0ciAiY29uIEdVSSBYMTEtbmVYdGF3LiIKKworIzogdmVyc2lvbi5jOjg3NAorbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICJjb24gR1VJIFgxMS1BdGhlbmEuIgorCisjOiB2ZXJzaW9uLmM6ODc4Cittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgImNvbiBHVUkgcGFyYSBCZU9TLiIKKworIzogdmVyc2lvbi5jOjg4MQorbXNnaWQgIndpdGggUGhvdG9uIEdVSS4iCittc2dzdHIgImNvbiBHVUkgcGFyYSBQaG90b24uIgorCisjOiB2ZXJzaW9uLmM6ODg0Cittc2dpZCAid2l0aCBHVUkuIgorbXNnc3RyICJjb24gR1VJLiIKKworIzogdmVyc2lvbi5jOjg4NworbXNnaWQgIndpdGggQ2FyYm9uIEdVSS4iCittc2dzdHIgImNvbiBDYXJib24gR1VJLiIKKworIzogdmVyc2lvbi5jOjg5MAorbXNnaWQgIndpdGggQ29jb2EgR1VJLiIKK21zZ3N0ciAiY29uIENvY29hIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4OTMKK21zZ2lkICJ3aXRoIChjbGFzc2ljKSBHVUkuIgorbXNnc3RyICJjb24gR1VJIChjbOFzaWNvKS4iCisKKyM6IHZlcnNpb24uYzo5MDQKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIgIEFzcGVjdG9zIGluY2x1aWRvcyAoKykgbyBubyAoLSk6XG4iCisKKyM6IHZlcnNpb24uYzo5MTYKK21zZ2lkICIgICBzeXN0ZW0gdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgZmljaGVybyCrdmltcmO7IGRlbCBzaXN0ZW1hOiBcIiIKKworIzogdmVyc2lvbi5jOjkyMQorbXNnaWQgIiAgICAgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICBmaWNoZXJvIKt2aW1yY7sgZGVsIHVzdWFyaW86IFwiIgorCisjOiB2ZXJzaW9uLmM6OTI2Cittc2dpZCAiIDJuZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgIDK6IGZpY2hlcm8gq3ZpbXJjuyBkZWwgdXN1YXJpbzogXCIiCisKKyM6IHZlcnNpb24uYzo5MzEKK21zZ2lkICIgM3JkIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAzZXIgZmljaGVybyCrdmltcmO7IGRlbCB1c3VhcmlvOiBcIiIKKworIzogdmVyc2lvbi5jOjkzNgorbXNnaWQgIiAgICAgIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgZmljaGVybyCrZXhyY7sgZGVsIHVzdWFyaW86IFwiIgorCisjOiB2ZXJzaW9uLmM6OTQxCittc2dpZCAiICAybmQgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAyuiBmaWNoZXJvIKtleHJjuyBkZWwgdXN1YXJpbzogXCIiCisKKyM6IHZlcnNpb24uYzo5NDcKK21zZ2lkICIgIHN5c3RlbSBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICBmaWNoZXJvIKtndmltcmO7IGRlbCBzaXN0ZW1hOiBcIiIKKworIzogdmVyc2lvbi5jOjk1MQorbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIGZpY2hlcm8gq2d2aW1yY7sgZGVsIHVzdWFyaW86IFwiIgorCisjOiB2ZXJzaW9uLmM6OTU1Cittc2dpZCAiMm5kIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgMrogZmljaGVybyCrZ3ZpbXJjuyBkZWwgdXN1YXJpbzogXCIiCisKKyM6IHZlcnNpb24uYzo5NjAKK21zZ2lkICIzcmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIjNlciBmaWNoZXJvIKtndmltcmO7IGRlbCB1c3VhcmlvOiBcIiIKKworIzogdmVyc2lvbi5jOjk2NworbXNnaWQgIiAgICBzeXN0ZW0gbWVudSBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICBmaWNoZXJvIGRlIG1lbvogZGVsIHNpc3RlbWE6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTc1Cittc2dpZCAiICBmYWxsLWJhY2sgZm9yICRWSU06IFwiIgorbXNnc3RyICIgICAgICAgICAgICBsb2NhbGl6YWNp824gZGUgJFZJTTogXCIiCisKKyM6IHZlcnNpb24uYzo5ODEKK21zZ2lkICIgZi1iIGZvciAkVklNUlVOVElNRTogXCIiCittc2dzdHIgIiAgICAgbG9jYWxpemFjafNuIGRlICRWSU1SVU5USU1FOiBcIiIKKworIzogdmVyc2lvbi5jOjk4NQorbXNnaWQgIkNvbXBpbGF0aW9uOiAiCittc2dzdHIgIkNvbXBpbGFjafNuOiAiCisKKyM6IHZlcnNpb24uYzo5OTEKK21zZ2lkICJDb21waWxlcjogIgorbXNnc3RyICJDb21waWxhZG9yOiAiCisKKyM6IHZlcnNpb24uYzo5OTYKK21zZ2lkICJMaW5raW5nOiAiCittc2dzdHIgIkVubGF6YWRvOiAiCisKKyM6IHZlcnNpb24uYzoxMDAxCittc2dpZCAiICBERUJVRyBCVUlMRCIKK21zZ3N0ciAiICBDT01QSUxBQ0nTTiBDT04gU81NQk9MT1MgREUgREVQVVJBQ0nTTiIKKworIzogdmVyc2lvbi5jOjEwNDAKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVkkgTWVqb3JhZG8iCisKKyM6IHZlcnNpb24uYzoxMDQyCittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgInZlcnNp824gIgorCisjOiB2ZXJzaW9uLmM6MTA0MworbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAicG9yIEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKKworIzogdmVyc2lvbi5jOjEwNDcKK21zZ2lkICJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIgorbXNnc3RyICJWaW0gZXMgY/NkaWdvIGFiaWVydG8geSBzZSBwdWVkZSBkaXN0cmlidWlyIGxpYnJlbWVudGUiCisKKyM6IHZlcnNpb24uYzoxMDQ5Cittc2dpZCAiSGVscCBwb29yIGNoaWxkcmVuIGluIFVnYW5kYSEiCittc2dzdHIgIqFBeXVkZSBhIGxvcyBuafFvcyBwb2JyZXMgZGUgVWdhbmRhISIKKworIzogdmVyc2lvbi5jOjEwNTAKK21zZ2lkICJ0eXBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJlc2NyaWJhICCrOmhlbHAgaWNjZjxJbnRybz67ICAgIHBhcmEgbeFzIGluZm9ybWFjafNuICAiCisKKyM6IHZlcnNpb24uYzoxMDUyCittc2dpZCAidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIKK21zZ3N0ciAiZXNjcmliYSAgqzpxPEludHJvPrsgICAgICAgICAgICBwYXJhIHNhbGlyICAgICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjEwNTMKK21zZ2lkICJ0eXBlICA6aGVscDxFbnRlcj4gIG9yICA8RjE+ICBmb3Igb24tbGluZSBoZWxwIgorbXNnc3RyICJlc2NyaWJhICCrOmhlbHA8SW50cm8+IG8gPEYxPrsgIHBhcmEgb2J0ZW5lciBheXVkYSAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTA1NAorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgImVzY3JpYmEgqzpoZWxwIHZlcnNpb242PEludHJvPrsgcGFyYSBpbmZvcm1hY2nzbiBkZSBsYSB2ZXJzafNuIgorCisjOiB2ZXJzaW9uLmM6MTA1NworbXNnaWQgIlJ1bm5pbmcgaW4gVmkgY29tcGF0aWJsZSBtb2RlIgorbXNnc3RyICJFamVjdXRhbmRvIGVuIG1vZG8gY29tcGF0aWJsZSBjb24gVmkiCisKKyM6IHZlcnNpb24uYzoxMDU4Cittc2dpZCAidHlwZSAgOnNldCBub2NwPEVudGVyPiAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyIKK21zZ3N0ciAiZXNjcmliYSAgqzpzZXQgbm9jcDxJbnRybz67ICBwYXJhIGxvcyB2YWxvcmVzIHByZWRlZmluaWRvcyBkZSBWaW0iCisKKyM6IHZlcnNpb24uYzoxMDU5Cittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAiZXNjcmliYSCrOmhlbHAgY3AtZGVmYXVsdDxJbnRybz67ICAgICAgICBwYXJhIG3hcyBpbmZvcm1hY2nzbiIKKworIzogdmVyc2lvbi5jOjEwNzQKK21zZ2lkICJtZW51ICBIZWxwLT5PcnBoYW5zICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gICAgIgorbXNnc3RyICJtZW76ICBBeXVkYS0+QXl1ZGUgYSBsb3Mgbmnxb3MgaHXpcmZhbm9zICAgICAgcGFyYSBt4XMgaW5mb3JtYWNp824gIgorCisjOiB2ZXJzaW9uLmM6MTA3NgorbXNnaWQgIlJ1bm5pbmcgbW9kZWxlc3MsIHR5cGVkIHRleHQgaXMgaW5zZXJ0ZWQiCittc2dzdHIgIkVqZWN1Y2nzbiBubyBtb2RhbCwgZWwgdGV4dG8gZXNjcml0byBzZSBpbnNlcnRhIGRpcmVjdGFtZW50ZSIKKworIzogdmVyc2lvbi5jOjEwNzcKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBJbnNlcnQgTW9kZSAgIgorbXNnc3RyICJtZW51IEVkaXRhci0+T3BjaW9uZXMgZ2xvYmFsZXMtPkFjdGl2YXIvRGVzYWN0aXZhciBtb2RvIGRlIGluc2VyY2nzbiIKKworIzogdmVyc2lvbi5jOjEwNzgKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHdvIG1vZGVzICAgICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYSBkb3MgbW9kb3MgICAgICIKKworIzogdmVyc2lvbi5jOjEwODIKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBWaSBDb21wYXRpYmxlIgorbXNnc3RyICIiCisibWVudSBFZGl0YXItPk9wY2lvbmVzIGdsb2JhbGVzLT5BY3RpdmFyL0Rlc2FjdGl2YXIgY29tcGF0aWJpbGlkYWQgY29uIFZpIgorCisjOiB2ZXJzaW9uLmM6MTA4MworbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBWaW0gZGVmYXVsdHMgICAiCittc2dzdHIgIiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhIGxvcyB2YWxvcmVzIHByZWRldGVybWluYWRvcyBkZSBWaW0iCisKKyM6IHZlcnNpb24uYzoxMTMwCittc2dpZCAiU3BvbnNvciBWaW0gZGV2ZWxvcG1lbnQhIgorbXNnc3RyICKhUGF0cm9jaW5lIGVsIGRlc2Fycm9sbG8gZGUgVmltISIKKworIzogdmVyc2lvbi5jOjExMzEKK21zZ2lkICJCZWNvbWUgYSByZWdpc3RlcmVkIFZpbSB1c2VyISIKK21zZ3N0ciAioUNvbnZpZXJ0YXNlIGVuIHVuIHVzdWFyaW8gcmVnaXN0cmFkbyBkZSBWaW0hIgorCisjOiB2ZXJzaW9uLmM6MTEzNAorbXNnaWQgInR5cGUgIDpoZWxwIHNwb25zb3I8RW50ZXI+ICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgImVzY3JpYmEgIDpoZWxwIHNwb25zb3I8SW50cm8+ICAgICBwYXJhIG3hcyBpbmZvcm1hY2nzbiAgIgorCisjOiB2ZXJzaW9uLmM6MTEzNQorbXNnaWQgInR5cGUgIDpoZWxwIHJlZ2lzdGVyPEVudGVyPiAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgImVzY3JpYmEgqzpoZWxwIHJlZ2lzdGVyPEludHJvPrsgICAgcGFyYSBt4XMgaW5mb3JtYWNp824gICIKKworIzogdmVyc2lvbi5jOjExMzcKK21zZ2lkICJtZW51ICBIZWxwLT5TcG9uc29yL1JlZ2lzdGVyICBmb3IgaW5mb3JtYXRpb24gICAgIgorbXNnc3RyICJtZW51ICBBeXVkYS0+QmVuZWZhY3Rvci9SZWftc3RyZXNlICBwYXJhIG3hcyBpbmZvcm1hY2nzbi4iCisKKyM6IHZlcnNpb24uYzoxMTQ3Cittc2dpZCAiV0FSTklORzogV2luZG93cyA5NS85OC9NRSBkZXRlY3RlZCIKK21zZ3N0ciAiQVZJU086IHNlIGhhIGRldGVjdGFkbyBXaW5kb3dzIDk1Lzk4L01FIgorCisjOiB2ZXJzaW9uLmM6MTE1MAorbXNnaWQgInR5cGUgIDpoZWxwIHdpbmRvd3M5NTxFbnRlcj4gIGZvciBpbmZvIG9uIHRoaXMiCittc2dzdHIgImVzY3JpYmE6IKs6aGVscCB3aW5kb3dzOTU8SW50cm8+uyBwYXJhIG3hcyBpbmZvcm1hY2nzbiIKKworIzogd2luZG93LmM6MjAzCittc2dpZCAiRTQ0MTogVGhlcmUgaXMgbm8gcHJldmlldyB3aW5kb3ciCittc2dzdHIgIkU0NDE6IE5vIGhheSB1bmEgdmVudGFuYSBkZSB2aXN0YSBwcmV2aWEiCisKKyM6IHdpbmRvdy5jOjU4MQorbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IE5vIHNlIHB1ZWRlIGRpdmlkaXIgYXJyaWJhLWl6cSB5IGFiYWpvLWRlciBhbCBtaXNtbyB0aWVtcG8iCisKKyM6IHdpbmRvdy5jOjEzNDAKK21zZ2lkICJFNDQzOiBDYW5ub3Qgcm90YXRlIHdoZW4gYW5vdGhlciB3aW5kb3cgaXMgc3BsaXQiCittc2dzdHIgIkU0NDM6IE5vIHNlIHB1ZWRlIHJvdGFyIGN1YW5kbyBvdHJhIHZlbnRhbmEgZXN04SBkaXZpZGlkYS4iCisKKyM6IHdpbmRvdy5jOjE4MzYKK21zZ2lkICJFNDQ0OiBDYW5ub3QgY2xvc2UgbGFzdCB3aW5kb3ciCittc2dzdHIgIkU0NDQ6IE5vIHNlIHB1ZWRlIGNlcnJhciBsYSD6bHRpbWEgdmVudGFuYS4iCisKKyM6IHdpbmRvdy5jOjI1NjcKK21zZ2lkICJBbHJlYWR5IG9ubHkgb25lIHdpbmRvdyIKK21zZ3N0ciAiU/NsbyBoYXkgdW5hIHZlbnRhbmEuIgorCisjOiB3aW5kb3cuYzoyNjE0Cittc2dpZCAiRTQ0NTogT3RoZXIgd2luZG93IGNvbnRhaW5zIGNoYW5nZXMiCittc2dzdHIgIkU0NDU6IE90cmEgdmVudGFuYSBjb250aWVuZSBjYW1iaW9zLiIKKworIzogd2luZG93LmM6NDQ4MAorbXNnaWQgIkU0NDY6IE5vIGZpbGUgbmFtZSB1bmRlciBjdXJzb3IiCittc2dzdHIgIkU0NDY6IE5vIGhheSB1biBub21icmUgZGUgZmljaGVybyBiYWpvIGVsIGN1cnNvciIKKworIzogd2luZG93LmM6NDU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ3OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkU0NDc6IE5vIHNlIHB1ZWRlIGVuY29udHJhciBlbCBmaWNoZXJvIKslc7sgZW4gbGEgcnV0YSIKKworIzogaWZfcGVybC54czozMjYgZ2xvYmFscy5oOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MDogQ291bGQgbm90IGxvYWQgbGlicmFyeSAlcyIKK21zZ3N0ciAiRTM3MDogTm8gc2UgcHVkbyBjYXJnYXIgbGEgYmlibGlvdGVjYSBkaW7hbWljYSAlcy4iCisKKyM6IGlmX3BlcmwueHM6NTU0Cittc2dpZCAiU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFBlcmwgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjM6IExvIHNpZW50bywgZXN0ZSBjb21hbmRvIGVzdOEgZGVzYWN0aXZhZG8sIG5vIHNlIHB1ZG8gY2FyZ2FyIGxhICIKKyJiaWJsaW90ZWNhIGRpbuFtaWNhIGRlIFBlcmwuIgorCisjOiBpZl9wZXJsLnhzOjYwNworbXNnaWQgIkUyOTk6IFBlcmwgZXZhbHVhdGlvbiBmb3JiaWRkZW4gaW4gc2FuZGJveCB3aXRob3V0IHRoZSBTYWZlIG1vZHVsZSIKK21zZ3N0ciAiIgorIkUyOTk6IE5vIHNlIHBlcm1pdGUgbGEgZXZhbHVhY2nzbiBkZSBj82RpZ28gUGVybCBlbiBsYSBjYWphIGRlIGFyZW5hIHNpbiBlbCAiCisidXNvIGRlbCBt82R1bG8gq1NhZmW7LiIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODMKK21zZ2lkICJFZGl0IHdpdGggJm11bHRpcGxlIFZpbXMiCittc2dzdHIgIkVkaXRhciBjb24gVmltcyAmbfpsdGlwbGVzIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjU4OQorbXNnaWQgIkVkaXQgd2l0aCBzaW5nbGUgJlZpbSIKK21zZ3N0ciAiRWRpdGFyIGNvbiB1biBzb2xvICZWaW0iCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTk4Cittc2dpZCAiJkRpZmYgd2l0aCBWaW0iCittc2dzdHIgIiZEaWZmIGNvbiBWaW0iCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NjExCittc2dpZCAiRWRpdCB3aXRoICZWaW0iCittc2dzdHIgIkVkaXRhciBjb24gJlZpbSIKKworIyAgTm93IGNvbmNhdGVuYXRlCisjLiBOb3cgY29uY2F0ZW5hdGUKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NjMzCittc2dpZCAiRWRpdCB3aXRoIGV4aXN0aW5nIFZpbSAtICYiCittc2dzdHIgIkVkaXRhciBjb24gdW4gVmltIGV4aXN0ZW50ZSAtICYiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NzQ2Cittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgIkVkaXRhciBlbChsb3MpIGZpY2hlcm9zIHNlbGVjY2lvbmFkbyhzKSBjb24gVmltIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg4NSBHdmltRXh0L2d2aW1leHQuY3BwOjk2NgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHByb2Nlc3M6IENoZWNrIGlmIGd2aW0gaXMgaW4geW91ciBwYXRoISIKK21zZ3N0ciAiRXJyb3IgYWwgY3JlYXIgZWwgcHJvY2VzbzogQXNlZ/pyZXNlIGRlIHF1ZSBndmltIGVzIGVuIHN1IKtwYXRouyEiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg2IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTAwIEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY3Cittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgImVycm9yIGVuIGd2aW1leHQuZGxsIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg5OQorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAioUxhIHJ1dGEgZGUgYWNjZXNvIGVzIGRlbWFzaWFkbyBsYXJnYSEiCisKKyM6IGdsb2JhbHMuaDoxMDI2Cittc2dpZCAiLS1ObyBsaW5lcyBpbiBidWZmZXItLSIKK21zZ3N0ciAiLS1ObyBoYXkgbO1uZWFzIGVuIGVsIGJ1ZmZlci0tIgorCisjICAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjICAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTE4OQorbXNnaWQgIkU0NzA6IENvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiRTQ3MDogRWwgY29tYW5kbyBhYm9ydPMuIgorCisjOiBnbG9iYWxzLmg6MTE5MAorbXNnaWQgIkU0NzE6IEFyZ3VtZW50IHJlcXVpcmVkIgorbXNnc3RyICJFNDcxOiBTZSByZXF1aWVyZSB1biBhcmd1bWVudG8uIgorCisjOiBnbG9iYWxzLmg6MTE5MQorbXNnaWQgIkUxMDogXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJiIKK21zZ3N0ciAiRTEwOiBcXCBkZWJlcu1hIGlyIHNlZ3VpZG8gZGUgLywgPyBvICYuIgorCisjOiBnbG9iYWxzLmg6MTE5MworbXNnaWQgIkUxMTogSW52YWxpZCBpbiBjb21tYW5kLWxpbmUgd2luZG93OyA8Q1I+IGV4ZWN1dGVzLCBDVFJMLUMgcXVpdHMiCittc2dzdHIgIiIKKyJFMTE6IE5vIGVzIHbhbGlkbyBlbiBsYSB2ZW50YW5hIGRlIGxhIGztbmVhIGRlIGNvbWFuZG9zOiA8Q1I+IGVqZWN1dGEsIENUUkwtIgorIkMgc2FsZS4iCisKKyM6IGdsb2JhbHMuaDoxMTk1Cittc2dpZCAiRTEyOiBDb21tYW5kIG5vdCBhbGxvd2VkIGZyb20gZXhyYy92aW1yYyBpbiBjdXJyZW50IGRpciBvciB0YWcgc2VhcmNoIgorbXNnc3RyICIiCisiRTEyOiBDb21hbmRvIG5vIHBlcm1pdGlkbyBkZXNkZSBleHJjL3ZpbXJjIGVuIGVsIGRpciBlbiBjdXJzbyBvIGFsIGJ1c2NhciAiCisiq3RhZ3O7IgorCisjOiBnbG9iYWxzLmg6MTE5NworbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiBGYWx0YSCrOmVuZGlmuyIKKworIzogZ2xvYmFscy5oOjExOTgKK21zZ2lkICJFNjAwOiBNaXNzaW5nIDplbmR0cnkiCittc2dzdHIgIkU2MDA6IEZhbHRhIKs6ZW5kdHJ5uyIKKworIzogZ2xvYmFscy5oOjExOTkKK21zZ2lkICJFMTcwOiBNaXNzaW5nIDplbmR3aGlsZSIKK21zZ3N0ciAiRTE3MDogRmFsdGEgqzplbmR3aGlsZbsiCisKKyM6IGdsb2JhbHMuaDoxMjAwCittc2dpZCAiRTU4ODogOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg4OiCrOmVuZHdoaWxluyBzaW4gqzp3aGlsZbsuIgorCisjOiBnbG9iYWxzLmg6MTIwMgorbXNnaWQgIkUxMzogRmlsZSBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTEzOiBFbCBmaWNoZXJvIHlhIGV4aXN0ZSAodXNlICEgcGFyYSBzb2JyZWVzY3JpYmlyKSIKKworIzogZ2xvYmFscy5oOjEyMDMKK21zZ2lkICJFNDcyOiBDb21tYW5kIGZhaWxlZCIKK21zZ3N0ciAiRTQ3MjogRmFsbPMgZWwgY29tYW5kbyIKKworIzogZ2xvYmFscy5oOjEyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNDogVW5rbm93biBmb250c2V0OiAlcyIKK21zZ3N0ciAiRTIzNDogQ29uanVudG8gZGUgZnVlbnRlcyBkZSBpbXByZXNp824gZGVzY29ub2NpZG86ICVzIgorCisjOiBnbG9iYWxzLmg6MTIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBVbmtub3duIGZvbnQ6ICVzIgorbXNnc3RyICJFMjM1OiBGdWVudGUgZGUgaW1wcmVzafNuIGRlc2Nvbm9jaWRhOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNjogRm9udCBcIiVzXCIgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJFMjM2OiBMYSBmdWVudGUgZGUgaW1wcmVzafNuIKslc7sgbm8gZXMgZGUgYW5jaG8gZmlqbyIKKworIzogZ2xvYmFscy5oOjEyMTQKK21zZ2lkICJFNDczOiBJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiRTQ3MzogRXJyb3IgaW50ZXJuby4iCisKKyM6IGdsb2JhbHMuaDoxMjE1Cittc2dpZCAiSW50ZXJydXB0ZWQiCittc2dzdHIgIkludGVycnVtcGlkbyIKKworIzogZ2xvYmFscy5oOjEyMTYKK21zZ2lkICJFMTQ6IEludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiRTE0OiBEaXJlY2Np824gbm8gduFsaWRhIgorCisjOiBnbG9iYWxzLmg6MTIxNworbXNnaWQgIkU0NzQ6IEludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkU0NzQ6IGFyZ3VtZW50byBubyB24WxpZG8iCisKKyM6IGdsb2JhbHMuaDoxMjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NzU6IEludmFsaWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDc1OiBBcmd1bWVudG8gbm8gduFsaWRvOiAlcy4iCisKKyM6IGdsb2JhbHMuaDoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTogSW52YWxpZCBleHByZXNzaW9uOiAlcyIKK21zZ3N0ciAiRTE1OiBFeHByZXNp824gbm8gduFsaWRhOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMjIKK21zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCittc2dzdHIgIkUxNjogUmFuZ28gbm8gduFsaWRvIgorCisjOiBnbG9iYWxzLmg6MTIyMworbXNnaWQgIkU0NzY6IEludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ3NjogTm9tYnJlIGRlIGNvbWFuZG8gbm8gduFsaWRvIgorCisjOiBnbG9iYWxzLmg6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiCrJXO7IGVzIHVuIGRpcmVjdG9yaW8iCisKKyM6IGdsb2JhbHMuaDoxMjI4Cittc2dpZCAiRTE4OiBVbmV4cGVjdGVkIGNoYXJhY3RlcnMgYmVmb3JlICc9JyIKK21zZ3N0ciAiRTE4OiBDYXJhY3RlcmVzIGluZXNwZXJhZG9zIGRlbGFudGUgZGUgqz27IgorCisjOiBnbG9iYWxzLmg6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY0OiBMaWJyYXJ5IGNhbGwgZmFpbGVkIGZvciBcIiVzKClcIiIKK21zZ3N0ciAiRTM2NDogRmFsbPMgbGEgbGxhbWFkYSBhIGJpYmxpb3RlY2EgcGFyYSCrJXO7KCkiCisKKyM6IGdsb2JhbHMuaDoxMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDg6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgZnVuY3Rpb24gJXMiCittc2dzdHIgIkU0NDg6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgZnVuY3Rpb24gJXMiCisKKyM6IGdsb2JhbHMuaDoxMjM5Cittc2dpZCAiRTE5OiBNYXJrIGhhcyBpbnZhbGlkIGxpbmUgbnVtYmVyIgorbXNnc3RyICJFMTk6IExhIG1hcmNhIHRpZW5lIHVuIG76bWVybyBkZSBs7W5lYSBubyB24WxpZG8iCisKKyM6IGdsb2JhbHMuaDoxMjQwCittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIkUyMDogTWFyY2Egc2luIHBvbmVyIgorCisjOiBnbG9iYWxzLmg6MTI0MQorbXNnaWQgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIKK21zZ3N0ciAiRTIxOiBObyBzZSBwdWVkZW4gaGFjZXIgY2FtYmlvcywgq21vZGlmaWFibGW7IGVzdOEgZGVzYWN0aXZhZG8iCisKKyM6IGdsb2JhbHMuaDoxMjQyCittc2dpZCAiRTIyOiBTY3JpcHRzIG5lc3RlZCB0b28gZGVlcCIKK21zZ3N0ciAiRTIyOiBEZW1hc2lhZG9zIKtzY3JpcHRzuyBhbmlkYWRvcyIKKworIzogZ2xvYmFscy5oOjEyNDMKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6IE5vIGhheSB1biBmaWNoZXJvIGFsdGVybmF0aXZvIgorCisjOiBnbG9iYWxzLmg6MTI0NAorbXNnaWQgIkUyNDogTm8gc3VjaCBhYmJyZXZpYXRpb24iCittc2dzdHIgIkUyNDogVGFsIGFicmV2aWF0dXJhIG5vIGV4aXN0ZSIKKworIzogZ2xvYmFscy5oOjEyNDUKK21zZ2lkICJFNDc3OiBObyAhIGFsbG93ZWQiCittc2dzdHIgIkU0Nzc6IKshuyBubyBlc3ThIHBlcm1pdGlkby4iCisKKyM6IGdsb2JhbHMuaDoxMjQ3Cittc2dpZCAiRTI1OiBHVUkgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAiRTI1OiBObyBzZSBwdWVkZSB1c2FyIGVsIEdVSTogbm8gc2UgaGEgYWN0aXZhZG8gYWwgY29tcGlsYXIuIgorCisjOiBnbG9iYWxzLmg6MTI1MAorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI2OiBObyBzZSBwdWVkZSB1c2FyIGVsIGhlYnJlbzogbm8gc2UgaGEgYWN0aXZhZG8gYWwgY29tcGlsYXJcbiIKKworIzogZ2xvYmFscy5oOjEyNTMKK21zZ2lkICJFMjc6IEZhcnNpIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiIgorIkUyNzogTm8gc2UgcHVlZGUgdXNhciBlbCBwZXJzYSAoZmFyc2kpOiBubyBzZSBoYSBhY3RpdmFkbyBhbCBjb21waWxhclxuIgorCisjOiBnbG9iYWxzLmg6MTI1NgorbXNnaWQgIkU4MDA6IEFyYWJpYyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkU4MDA6IE5vIHNlIHB1ZWRlIHVzYXIgZWwg4XJhYmU6IG5vIHNlIGhhIGFjdGl2YWRvIGFsIGNvbXBpbGFyXG4iCisKKyM6IGdsb2JhbHMuaDoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODogTm8gc3VjaCBoaWdobGlnaHQgZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkUyODogTm8gZXhpc3RlIGVsIGdydXBvIGRlIHJlYWx6YWRvIGNvbiBlc2Ugbm9tYnJlOiAlcyIKKworIzogZ2xvYmFscy5oOjEyNjEKK21zZ2lkICJFMjk6IE5vIGluc2VydGVkIHRleHQgeWV0IgorbXNnc3RyICJFMjk6IEH6biBubyBoYSBpbnNlcnRhZG8gdGV4dG8uIgorCisjOiBnbG9iYWxzLmg6MTI2MgorbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6IE5vIGhheSB1bmEgbO1uZWEgZGUgY29tYW5kb3MgcHJldmlhIgorCisjOiBnbG9iYWxzLmg6MTI2MworbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IE5vIGV4aXN0ZSB0YWwgYXNvY2lhY2nzbi4iCisKKyM6IGdsb2JhbHMuaDoxMjY0Cittc2dpZCAiRTQ3OTogTm8gbWF0Y2giCittc2dzdHIgIkU0Nzk6IE5vIGhheSBjb2luY2lkZW5jaWEuIgorCisjOiBnbG9iYWxzLmg6MTI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDgwOiBObyBtYXRjaDogJXMiCittc2dzdHIgIkU0ODA6IE5vIGNvaW5jaWRlOiAlcyIKKworIzogZ2xvYmFscy5oOjEyNjYKK21zZ2lkICJFMzI6IE5vIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTMyOiBObyBoYXkgdW4gbm9tYnJlIGRlIGZpY2hlcm8uIgorCisjOiBnbG9iYWxzLmg6MTI2NworbXNnaWQgIkUzMzogTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzMzogTm8gZXhpc3RlIHVuYSBleHByZXNp824gcmVndWxhciBkZSBzdXN0aXR1Y2nzbiBwcmV2aWEuIgorCisjOiBnbG9iYWxzLmg6MTI2OAorbXNnaWQgIkUzNDogTm8gcHJldmlvdXMgY29tbWFuZCIKK21zZ3N0ciAiRTM0OiBObyBleGlzdGUgdW4gY29tYW5kbyBwcmV2aW8uIgorCisjOiBnbG9iYWxzLmg6MTI2OQorbXNnaWQgIkUzNTogTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzU6IE5vIGV4aXN0ZSB1bmEgZXhwcmVzafNuIHJlZ3VsYXIgcHJldmlhLiIKKworIzogZ2xvYmFscy5oOjEyNzAKK21zZ2lkICJFNDgxOiBObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICJFNDgxOiBFbCByYW5nbyBubyBlc3ThIHBlcm1pdGlkby4iCisKKyM6IGdsb2JhbHMuaDoxMjcyCittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjogTm8gaGF5IGVzcGFjaW8gc3VmaWNpZW50ZS4iCisKKyM6IGdsb2JhbHMuaDoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDc6IG5vIHJlZ2lzdGVyZWQgc2VydmVyIG5hbWVkIFwiJXNcIiIKK21zZ3N0ciAiRTI0NzogRWwgc2Vydmlkb3IgqyVzuyBubyBlc3ThIHJlZ2lzdHJhZG8uIgorCisjOiBnbG9iYWxzLmg6MTI3NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDgyOiBDYW4ndCBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiRTQ4MjogTm8gc2UgcHVlZGUgY3JlYXIgZWwgZmljaGVybyCrJXO7IgorCisjOiBnbG9iYWxzLmg6MTI3OAorbXNnaWQgIkU0ODM6IENhbid0IGdldCB0ZW1wIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTQ4MzogTm8gcHVlZG8gb2J0ZW5lciBlbCBub21icmUgZGVsIGZpY2hlcm8gdGVtcG9yYWwuIgorCisjOiBnbG9iYWxzLmg6MTI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg0OiBDYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIkU0ODQ6IE5vIHB1ZWRvIGFicmlyIGVsIGZpY2hlcm8gqyVzuyIKKworIzogZ2xvYmFscy5oOjEyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NTogQ2FuJ3QgcmVhZCBmaWxlICVzIgorbXNnc3RyICJFNDg1OiBObyBwdWVkbyBsZWVyIGVsIGZpY2hlcm8gqyVzuy4iCisKKyM6IGdsb2JhbHMuaDoxMjgxCittc2dpZCAiRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICIiCisiRTM3OiBObyBzZSBoYSBndWFyZGFkbyBlbCBmaWNoZXJvIGRlc2RlIGVsIPpsdGltbyBjYW1iaW8gKGHxYWRhICEgcGFyYSAiCisiZm9yemFyKS4iCisKKyM6IGdsb2JhbHMuaDoxMjgyCittc2dpZCAiRTM4OiBOdWxsIGFyZ3VtZW50IgorbXNnc3RyICJFMzg6IEFyZ3VtZW50byBudWxvLiIKKworIzogZ2xvYmFscy5oOjEyODQKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiBFc3BlcmFiYSB1biBu+m1lcm8uIgorCisjOiBnbG9iYWxzLmg6MTI4NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA6IENhbid0IG9wZW4gZXJyb3JmaWxlICVzIgorbXNnc3RyICJFNDA6IE5vIHB1ZWRvIGFicmlyIGVsIGZpY2hlcm8gZGUgZXJyb3JlcyAlcy4iCisKKyM6IGdsb2JhbHMuaDoxMjkwCittc2dpZCAiRTIzMzogY2Fubm90IG9wZW4gZGlzcGxheSIKK21zZ3N0ciAiRTIzMzogTm8gc2UgcHVlZGUgYWJyaXIgbGEgcGFudGFsbGEuIgorCisjOiBnbG9iYWxzLmg6MTI5MgorbXNnaWQgIkU0MTogT3V0IG9mIG1lbW9yeSEiCittc2dzdHIgIkU0MTogoU1lbW9yaWEgYWdvdGFkYSEiCisKKyM6IGdsb2JhbHMuaDoxMjk0Cittc2dpZCAiUGF0dGVybiBub3QgZm91bmQiCittc2dzdHIgIk5vIHNlIGVuY29udHLzIGVsIHBhdHLzbiBkZSBi+nNxdWVkYS4iCisKKyM6IGdsb2JhbHMuaDoxMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODY6IFBhdHRlcm4gbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQ4NjogTm8gc2UgZW5jb250cvMgZWwgcGF0cvNuIGRlIGL6c3F1ZWRhOiAlcyIKKworIzogZ2xvYmFscy5oOjEyOTcKK21zZ2lkICJFNDg3OiBBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJFNDg3OiBFbCBhcmd1bWVudG8gZGViZSBzZXIgcG9zaXRpdm8uIgorCisjOiBnbG9iYWxzLmg6MTI5OQorbXNnaWQgIkU0NTk6IENhbm5vdCBnbyBiYWNrIHRvIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTQ1OTogTm8gcHVlZG8gcmVncmVzYXIgYWwgZGlyZWN0b3JpbyBwcmV2aW8uIgorCisjOiBnbG9iYWxzLmg6MTMwMworbXNnaWQgIkU0MjogTm8gRXJyb3JzIgorbXNnc3RyICJFNDI6IE5vIGhheSBlcnJvcmVzIgorCisjOiBnbG9iYWxzLmg6MTMwNQorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0MzogQ2FkZW5hIGRlIGNvbmNpZGVuY2lhIGRh8WFkYS4iCisKKyM6IGdsb2JhbHMuaDoxMzA2Cittc2dpZCAiRTQ0OiBDb3JydXB0ZWQgcmVnZXhwIHByb2dyYW0iCittc2dzdHIgIkU0NDogRWwgcHJvZ3JhbWEgq3JlZ2V4cLsgZXN04SBjb3JydXB0by4iCisKKyM6IGdsb2JhbHMuaDoxMzA3Cittc2dpZCAiRTQ1OiAncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ1OiBFc3ThIGFjdGl2YSBsYSBvcGNp824gq3JlYWRvbmx5uyAoYfFhZGEgqyG7IHBhcmEgZm9yemFyKS4iCisKKyM6IGdsb2JhbHMuaDoxMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjogQ2Fubm90IHNldCByZWFkLW9ubHkgdmFyaWFibGUgXCIlc1wiIgorbXNnc3RyICJFNDY6IE5vIHNlIHB1ZWRlIGRlZmluaXIgbGEgdmFyaWFibGUgZGUgc/NsbyBsZWN0dXJhIKslc7suIgorCisjOiBnbG9iYWxzLmg6MTMxMgorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0NzogRXJyb3IgYWwgbGVlciBlbCBmaWNoZXJvIGRlIGVycm9yZXMuIgorCisjOiBnbG9iYWxzLmg6MTMxNQorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiBObyBzZSBwZXJtaXRlIGVuIGVsIGFtYmllbnRlIHByb3RlZ2lkby4iCisKKyM6IGdsb2JhbHMuaDoxMzE3Cittc2dpZCAiRTUyMzogTm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTUyMzogTm8gc2UgcGVybWl0ZSBhcXXtLiIKKworIzogZ2xvYmFscy5oOjEzMjAKK21zZ2lkICJFMzU5OiBTY3JlZW4gbW9kZSBzZXR0aW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkUzNTk6IExhIGNvbmZpZ3VyYWNp824gZGUgbGEgcGFudGFsbGEgbm8gZXMgduFsaWRhLiIKKworIzogZ2xvYmFscy5oOjEzMjIKK21zZ2lkICJFNDk6IEludmFsaWQgc2Nyb2xsIHNpemUiCittc2dzdHIgIkU0OTogRWwgdGFtYfFvIGRlIGRlc3BsYXphbWllbnRvIG5vIHbhbGlkby4iCisKKyM6IGdsb2JhbHMuaDoxMzIzCittc2dpZCAiRTkxOiAnc2hlbGwnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiRTkxOiBMYSBvcGNp824gq3NoZWxsuyBlc3ThIHZhY+1hLiIKKworIzogZ2xvYmFscy5oOjEzMjUKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IKFObyBzZSBwdWRvIGxlZXIgbG9zIGRhdG9zIGRlIGxvcyBzaWdub3MhIgorCisjOiBnbG9iYWxzLmg6MTMyNworbXNnaWQgIkU3MjogQ2xvc2UgZXJyb3Igb24gc3dhcCBmaWxlIgorbXNnc3RyICJFNzI6IEVycm9yIGRlIGNpZXJyZSBlbiBlbCBmaWNoZXJvIGRlIGludGVyY2FtYmlvIgorCisjOiBnbG9iYWxzLmg6MTMyOAorbXNnaWQgIkU3MzogdGFnIHN0YWNrIGVtcHR5IgorbXNnc3RyICJFNzM6IExhIHBpbGEgZGUgq3RhZ3O7IGVzdOEgdmFj7WEuIgorCisjOiBnbG9iYWxzLmg6MTMyOQorbXNnaWQgIkU3NDogQ29tbWFuZCB0b28gY29tcGxleCIKK21zZ3N0ciAiRTc0OiBFbCBjb21hbmRvIGVzIGRlbWFzaWFkbyBjb21wbGVqby4iCisKKyM6IGdsb2JhbHMuaDoxMzMwCittc2dpZCAiRTc1OiBOYW1lIHRvbyBsb25nIgorbXNnc3RyICJFNzU6IEVsIG5vbWJyZSBlcyBkZW1hc2lhZG8gbGFyZ28uIgorCisjOiBnbG9iYWxzLmg6MTMzMQorbXNnaWQgIkU3NjogVG9vIG1hbnkgWyIKK21zZ3N0ciAiRTc2OiBIYXkgZGVtYXNpYWRvcyBbIgorCisjOiBnbG9iYWxzLmg6MTMzMgorbXNnaWQgIkU3NzogVG9vIG1hbnkgZmlsZSBuYW1lcyIKK21zZ3N0ciAiRTc3OiBIYXkgZGVtYXNpYWRvcyBub21icmVzIGRlIGZpY2hlcm9zLiIKKworIzogZ2xvYmFscy5oOjEzMzMKK21zZ2lkICJFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJFNDg4OiBDYXJhY3RlcmVzIGVuIGV4Y2VzbyBhbCBmaW5hbCBkZSBsYSBs7W5lYS4iCisKKyM6IGdsb2JhbHMuaDoxMzM0Cittc2dpZCAiRTc4OiBVbmtub3duIG1hcmsiCittc2dzdHIgIkU3ODogTWFyY2EgZGVzY29ub2NpZGEuIgorCisjOiBnbG9iYWxzLmg6MTMzNQorbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTogTm8gcHVlZG8gZXhwYW5kaXIgbG9zIGNvbW9kaW5lcy4iCisKKyM6IGdsb2JhbHMuaDoxMzM3Cittc2dpZCAiRTU5MTogJ3dpbmhlaWdodCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWluaGVpZ2h0JyIKK21zZ3N0ciAiRTU5MTogq3dpbmhlaWdodLsgbm8gcHVlZGUgc2VyIG3hcyBwZXF1ZfFvIHF1ZSCrd2lubWluaGVpZ2h0uy4iCisKKyM6IGdsb2JhbHMuaDoxMzM5Cittc2dpZCAiRTU5MjogJ3dpbndpZHRoJyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW53aWR0aCciCittc2dzdHIgIkU1OTI6IKt3aW53aWR0aLsgbm8gcHVlZGUgc2VyIG3hcyBwZXF1ZfFvIHF1ZSCrd2lubWlud2lkdGi7LiIKKworIzogZ2xvYmFscy5oOjEzNDIKK21zZ2lkICJFODA6IEVycm9yIHdoaWxlIHdyaXRpbmciCittc2dzdHIgIkU4MDogRXJyb3IgYWwgZXNjcmliaXIgZWwgZmljaGVyby4iCisKKyM6IGdsb2JhbHMuaDoxMzQzCittc2dpZCAiWmVybyBjb3VudCIKK21zZ3N0ciAiRWwgcmVjdWVudG8gZXMgY2Vyby4iCisKKyM6IGdsb2JhbHMuaDoxMzQ1Cittc2dpZCAiRTgxOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dCIKK21zZ3N0ciAiRTgxOiBVc2FuZG8gPFNJRD4gZW4gdW4gY29udGV4dG8gcXVlIG5vIGVzIGRlIKtzY3JpcHS7IgorCisjOiBnbG9iYWxzLmg6MTM0OAorbXNnaWQgIkU0NDk6IEludmFsaWQgZXhwcmVzc2lvbiByZWNlaXZlZCIKK21zZ3N0ciAiRTQ0OTogUmVjaWLtIHVuYSBleHByZXNp824gaW524WxpZGEuIgorCisjOiBnbG9iYWxzLmg6MTM1MQorbXNnaWQgIkU0NjM6IFJlZ2lvbiBpcyBndWFyZGVkLCBjYW5ub3QgbW9kaWZ5IgorbXNnc3RyICJFNDYzOiBMYSByZWdp824gZXN04SBwcm90ZWdpZGEsIG5vIHB1ZWRvIG1vZGlmaWNhcmxhLiIKKworI34gbXNnaWQgIlwiXG4iCisjfiBtc2dzdHIgIrtcbiIKKworI34gbXNnaWQgIiBCTE9DSyIKKyN+IG1zZ3N0ciAiIEJMT1FVRSIKKworI34gbXNnaWQgIiBMSU5FIgorI34gbXNnc3RyICIgTM1ORUEiCmRpZmYgLS1naXQgYS9zcmMvcG8vZnIucG8gYi9zcmMvcG8vZnIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhZTRiZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wby9mci5wbwpAQCAtMCwwICsxLDY4ODggQEAKKyMgRnJlbmNoIFRyYW5zbGF0aW9uIGZvciBWaW0KKyMKKyMgRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisjIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorIworIyAgRklSU1QgQVVUSE9SICBEaW5kaW5YICAgICAgPERhdmlkLk9kaW5AYmlnZm9vdC5jb20+CSAgIDIwMDAuCisjIFNFQ09ORCBBVVRIT1IgIEFkcmllbiBCZWF1ICA8dmVyc2lvbi5mcmFuY2Fpc2VAZnJlZS5mcj4gIDIwMDIsIDIwMDMuCisjCisjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjCisjCisjIENlIGZpY2hpZXIgbidlc3QgcGFzIGZpbmFsaXPpICEgTGUgZ3JvcyBkdSB0cmF2YWlsIGEg6XTpIGZhaXQsIG1haXMgbGEgdG91Y2hlCisjIGZpbmFsZSByZXN0ZSDgIGFwcG9ydGVyLiBKZSBwZW5zZSBxdWUgdG91dCBzZXJhIGJlbCBldCBiaWVuIGZpbmkgcG91ciBWaW0gNi4zCisjIChodW0sIGMn6XRhaXQgY2Vuc+kg6nRyZSBsZSBjYXMgcG91ciBWaW0gNi4yKS4KKyMKKyMgQ29uc3VsdGV6IGh0dHA6Ly92ZXJzaW9uLmZyYW5jYWlzZS5mcmVlLmZyLyBwb3VyIGxlcyBtaXNlcyDgIGpvdXIgZGUgY2UKKyMgZmljaGllciwgYWluc2kgcXVlIHBvdXIgbGVzIHZlcnNpb25zIGZyYW7nYWlzZXMgZGVzIG1lbnVzIGV0IGR1IHR1dG9yaWVsLgorIworIyBTaSB2b3VzIGF2ZXogZGVzIHJlbWFycXVlcyDgIGZhaXJlIHN1ciBjZSBmaWNoaWVyLCDpY3JpdmV6IOAKKyMgdmVyc2lvbi5mcmFuY2Fpc2VAZnJlZS5mci4gQ2V0dGUgYWRyZXNzZSBlc3QgY29uc3VsdOllIHLpZ3VsaehyZW1lbnQuCisjCisjIEVuIGNhcyBkJ2VycmV1ciB0ZWNobmlxdWUgYXUgbml2ZWF1IGRlIHZlcnNpb24uZnJhbmNhaXNlQGZyZWUuZnIsIG91IHNpIHZvdXMKKyMgbmUgcmVjZXZleiBhdWN1bmUgculwb25zZSBwbHVzaWV1cnMgam91cnMgYXBy6HMgdm90cmUgZW52b2ksIHbpcmlmaWV6IHNpIHVuCisjIG1lc3NhZ2UgbidhIHBhcyDpdOkgcG9zdOkgc3VyIGxlIHNpdGUgd2ViLiBTaSBjZXR0ZSBvcHRpb24gc2Ugcul26GxlCisjIGluZnJ1Y3R1ZXVzZSwgZXNzYXlleiBkZSBtZSBjb250YWN0ZXIg4CBtZXMgYXV0cmVzIGFkcmVzc2VzLCBjaGV6IGZyZWUuZnIgb3UKKyMgY2hleiB5YWhvby5jb20uIE1vbiBub20gZCd1dGlsaXNhdGV1ciBlc3QgbGEgY29uY2F06W5hdGlvbiBkZSBtb24gcHLpbm9tIGV0CisjIGRlIG1vbiBub20uCisjCisjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjCisjCisjIFRoaXMgZmlsZSBzdGlsbCBuZWVkcyB3b3JrISBUaGUgcm91Z2ggd29yayBoYXMgYmVlbiBkb25lLCBzb21lIHBvbGlzaGluZworIyBuZWVkcyB0byBiZSBhcHBsaWVkLiBJIGV4cGVjdCBldmVyeXRoaW5nIHRvIGJlIGJyaWdodCBhbmQgc2hpbnkgZm9yIFZpbSA2LjMKKyMgKGVyciwgdGhhdCB3YXMgc3VwcG9zZWQgdG8gYmUgVmltIDYuMikuCisjCisjIEdvIHRvIGh0dHA6Ly92ZXJzaW9uLmZyYW5jYWlzZS5mcmVlLmZyLyBmb3IgdXBkYXRlcyB0byB0aGlzIGZpbGUsIGFuZCB0byB0aGUKKyMgRnJlbmNoIHZlcnNpb25zIG9mIHRoZSBtZW51cyBhbmQgdGhlIHR1dG9yLgorIworIyBTZW5kIHlvdXIgY29tbWVudHMgYWJvdXQgdGhpcyBmaWxlIGJ5IGVtYWlsLCB0byB2ZXJzaW9uLmZyYW5jYWlzZUBmcmVlLmZyLgorIyBUaGlzIGFkZHJlc3MgaXMgY2hlY2tlZCByZWd1bGFybHkuCisjCisjIEluIGNhc2Ugb2YgdGVjaG5pY2FsIGVycm9yIGF0IHZlcnNpb24uZnJhbmNhaXNlQGZyZWUuZnIsIG9yIGlmIHlvdSBkb24ndCBnZXQKKyMgYW55IGFuc3dlciBzZXZlcmFsIGRheXMgYWZ0ZXIgd3JpdGluZywgY2hlY2sgaWYgdGhlcmUgaXMgYSBtZXNzYWdlIGF0CisjIGh0dHA6Ly92ZXJzaW9uLmZyYW5jYWlzZS5mcmVlLmZyLy4gSWYgdGhpcyBvcHRpb24gZmFpbHMgdG8gd29yaywgdHJ5IHRvCisjIHdyaXRlIHRvIG15IG90aGVyIGFkZHJlc3NlcyBhdCBmcmVlLmZyIGFuZCB5YWhvby5jb20uIENvbmNhdGVuZSBteSBmaXJzdCBhbmQKKyMgbGFzdCBuYW1lIHRvIGdldCBteSB1c2VybmFtZS4KKyMKKyMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKKyMKKyMgQ2hhbmdlTG9nOgorIworIyAyMDAyLTAzLTA0CUFCCUJ1bGsgdHJhbnNsYXRpb24gKGRvbmUgaW4gMTYgaG91cnMhKQorIyAJCQkgIC0gVGhhdCdzIDEuMzUgbXNnL21pbiBmb3IgeWEKKyMgMjAwMi0wMy0yMwlBQglJbml0aWFsIHJlbGVhc2UgKHNoaXBzIHdpdGggVmltIDYuMSkKKyMgCQkJICAtIE11Y2ggY2xlYW5lciB0aGFuIHRoZSBmaXJzdCB2ZXJzaW9uIDopCisjIDIwMDItMDktMzAJQUIJUGF0Y2ggIzIwMCB1cGRhdGUgKHJlbGVhc2VkIG9uIHdlYiBzaXRlKQorIyAJCQkgIC0gRml2ZSBuZXcgbWVzc2FnZXMKKyMgCQkJICAtIENvcnJlY3RlZCB0aHJlZSB0eXBvcyBpbiBwcmludGYoKS1zdHlsZSBleHByZXNzaW9ucworIyAJCQkgICAgKHRoYW5rcyBNaWspCisjIDIwMDMtMDUtMDkJQUIJUGF0Y2ggIzQ3NCB1cGRhdGUgKHVucmVsZWFzZWQpCisjIAkJCSAgLSBQb2xpc2hpbmcgZG9uZSBvbiB0aHJlZSBtb3JlIGZpbGVzICh0aGUgdGhyZWUgZmlyc3QKKyMgCQkJICAgIG9uZXMgaGF2ZSBiZWVuIHJld29ya2VkLCB0b28pCisjIAkJCSAgLSBNYW55IGNvbW1lbnRzIGhhdmUgYmVlbiBhZGRlZCBpbiB0aGUgcG9saXNoZWQKKyMgCQkJICAgIHNlY3Rpb24KKyMgMjAwMy0wNS0yOQlBQglWaW0gNi4yIHBlbmRpbmcgcmVsZWFzZQorIyAJCQkgIC0gRmluaXNoIHdvcmsgb24gVmltIDYuMS40NzQgKHF1aWNrbHkhKQorIyAJCQkgIC0gVGhpcnR5LXRocmVlIG5ldyBtZXNzYWdlcyAocm91Z2ggdHJhbnNsYXRpb24pCisjIAkJCSAgLSBTb21lIG9mIHRoZSBFbmdsaXNoIG1lc3NhZ2VzIGhhdmUgYmVlbiBhbHRlcmVkCisjIAkJCSAgICAoZnV6enkgZW50cmllcyksIGRlYWwgd2l0aCBpdAorIyAyMDAzLTA1LTI5CUFCCVZpbSA2LjIgcmVsZWFzZSBjYW5kaWRhdGUgKHNlbnQgdG8gQnJhbSBNb29sZW5hYXIpCisjIAkJCSAgLSBVcGRhdGUgdG8gVmltIDYuMmYuMDE0IChxdWlja2x5LCB0b28pCisjIAkJCSAgLSBGaWZ0eS1uaW5lIG5ldyBtZXNzYWdlcyAocm91Z2ggdHJhbnNsYXRpb24pCisjIAkJCSAgLSBIdW5kcmVkcyBvZiBlcnJvciBtZXNzYWdlcyBudW1iZXJzIGFkZGVkICh3b3cpCisjCisjIFRyYW5zbGF0ZWQ6CSAxMzkyLzEzOTIgKDEwMC4wMCUpCisjCisjIFBvbGlzaGluZyBkb25lIG9uOgorIyAgYnVmZmVyLmMKKyMgIGRpZmYuYworIyAgZGlncmFwaC5jCisjICBlZGl0LmMKKyMgIGV2YWwuYworIyAgZXhfY21kcy5jCisjCisjIE90aGVyIGZpbGVzIHN0aWxsIHRvIGRvLgorIworIyBOb3RhdGlvbnMgdXNlZCBpbiB0aGUgY29tbWVudHMgb2YgdGhlIHVucG9saXNoZWQgcGFydCBvZiB0aGlzIGZpbGU6CisjIFRPRE8JCVRoZXJlJ3Mgd29yayB0byBkbyB0aGVyZSwgYW5kIGl0J3MgaW1wb3J0YW50CisjIHRvZG8JCVRoZXJlJ3Mgd29yayB0byBkbyB0aGVyZSwgYnV0IGl0J3MgbGVzcyBpbXBvcnRhbnQKKyMgKG5vIGNvbW1lbnQpCVBlcmhhcHMgdGhlcmUncyB3b3JrIHRvIGRvIHRoZXJlPworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogVmltKEZyYW7nYWlzKVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDAzLTA1LTI4IDIzOjA5KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAzLTA1LTI5IDA0OjAxKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFkcmllbiBCZWF1IDx2ZXJzaW9uLmZyYW5jYWlzZUBmcmVlLmZyPlxuIgorIkxhbmd1YWdlLVRlYW06IEFkcmllbiBCZWF1IDx2ZXJzaW9uLmZyYW5jYWlzZUBmcmVlLmZyPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTT184ODU5LTE1XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjIEFCIC0gSWwgZmF1dCByZXNwZWN0ZXIgbCdlc3ByaXQgcGx1cyBxdWUgbGEgbGV0dHJlLgorIzogYnVmZmVyLmM6OTcKK21zZ2lkICJFODI6IENhbm5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLCBleGl0aW5nLi4uIgorbXNnc3RyICJFODI6IEF1Y3VuIHRhbXBvbiBuZSBwZXV0IOp0cmUgYWxsb3XpLCBWaW0gZG9pdCBzJ2Fycup0ZXIiCisKKyMgQUIgLSBMYSBzaXR1YXRpb24gZXN0IHByb2JhYmxlbWVudCBwbHVzIGdyYXZlIHF1ZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlIG5lIGxlCisjICAgICAgbGFpc3NlIGVudGVuZHJlICh2b2lyIGwnYWlkZSBlbiBsaWduZSkuIExhIHZlcnNpb24gZnJhbudhaXNlIGVzdCBwbHVzCisjICAgICAgZXhwbGljaXRlLgorIzogYnVmZmVyLmM6MTAwCittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4MzogTCdhbGxvY2F0aW9uIGR1IHRhbXBvbiBhIOljaG916TogYXJy6nRleiBWaW0sIGxpYulyZXogZGUgbGEgbeltb2lyZSIKKworIzogYnVmZmVyLmM6Nzk3Cittc2dpZCAiRTUxNTogTm8gYnVmZmVycyB3ZXJlIHVubG9hZGVkIgorbXNnc3RyICJFNTE1OiBBdWN1biB0YW1wb24gbidhIOl06SBk6WNoYXJn6SIKKworIzogYnVmZmVyLmM6Nzk5Cittc2dpZCAiRTUxNjogTm8gYnVmZmVycyB3ZXJlIGRlbGV0ZWQiCittc2dzdHIgIkU1MTY6IEF1Y3VuIHRhbXBvbiBuJ2Eg6XTpIGVmZmFj6SIKKworIzogYnVmZmVyLmM6ODAxCittc2dpZCAiRTUxNzogTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAiRTUxNzogQXVjdW4gdGFtcG9uIG4nYSDpdOkgZOl0cnVpdCIKKworIzogYnVmZmVyLmM6ODA5Cittc2dpZCAiMSBidWZmZXIgdW5sb2FkZWQiCittc2dzdHIgIjEgdGFtcG9uIGEg6XTpIGTpY2hhcmfpIgorCisjOiBidWZmZXIuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB1bmxvYWRlZCIKK21zZ3N0ciAiJWQgdGFtcG9ucyBvbnQg6XTpIGTpY2hhcmfpcyIKKworIzogYnVmZmVyLmM6ODE2Cittc2dpZCAiMSBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiMSB0YW1wb24gYSDpdOkgZWZmYWPpIgorCisjOiBidWZmZXIuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICIlZCB0YW1wb25zIG9udCDpdOkgZWZmYWPpcyIKKworIzogYnVmZmVyLmM6ODIzCittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICIxIHRhbXBvbiBhIOl06SBk6XRydWl0IgorCisjOiBidWZmZXIuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB3aXBlZCBvdXQiCittc2dzdHIgIiVkIHRhbXBvbnMgb250IOl06SBk6XRydWl0cyIKKworIyBBQiAtIExhIHZlcnNpb24gZnJhbudhaXNlIGVzdCBtZWlsbGV1cmUgcXVlIGxhIHZlcnNpb24gYW5nbGFpc2UuCisjOiBidWZmZXIuYzo4ODYKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiBBdWN1biB0YW1wb24gbidlc3QgbW9kaWZp6SIKKworIy4gYmFjayB3aGVyZSB3ZSBzdGFydGVkLCBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyM6IGJ1ZmZlci5jOjkyNQorbXNnaWQgIkU4NTogVGhlcmUgaXMgbm8gbGlzdGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTg1OiBBdWN1biB0YW1wb24gbidlc3QgbGlzdOkiCisKKyMgQUIgLSBWdSBsZSBjb2RlIHNvdXJjZSwgbGEgdmVyc2lvbiBmcmFu52Fpc2UgZXN0IG1laWxsZXVyZSBxdWUgbGEKKyMgICAgICB2ZXJzaW9uIGFuZ2xhaXNlLgorIzogYnVmZmVyLmM6OTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQ2Fubm90IGdvIHRvIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU4NjogTGUgdGFtcG9uICVsZCBuJ2V4aXN0ZSBwYXMiCisKKyMgQUIgLSBKZSBuZSBzdWlzIHBhcyBz+3IgcXVlIGwnb24gcHVpc3NlIG9idGVuaXIgY2UgbWVzc2FnZS4KKyM6IGJ1ZmZlci5jOjk0MAorbXNnaWQgIkU4NzogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg3OiBJbXBvc3NpYmxlIGQnYWxsZXIgYXBy6HMgbGUgZGVybmllciB0YW1wb24iCisKKyMgQUIgLSBKZSBuZSBzdWlzIHBhcyBz+3IgcXVlIGwnb24gcHVpc3NlIG9idGVuaXIgY2UgbWVzc2FnZS4KKyM6IGJ1ZmZlci5jOjk0MgorbXNnaWQgIkU4ODogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBidWZmZXIiCittc2dzdHIgIkU4ODogSW1wb3NzaWJsZSBkJ2FsbGVyIGF2YW50IGxlIHByZW1pZXIgdGFtcG9uIgorCisjOiBidWZmZXIuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg5OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyICVsZCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFODk6IExlIHRhbXBvbiAlbGQgbidhIHBhcyDpdOkgZW5yZWdpc3Ry6SAoYWpvdXRleiAhIHBvdXIgcGFzc2VyIG91dHJlKSIKKworIzogYnVmZmVyLmM6OTgyCittc2dpZCAiRTkwOiBDYW5ub3QgdW5sb2FkIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFOTA6IEltcG9zc2libGUgZGUgZOljaGFyZ2VyIGxlIGRlcm5pZXIgdGFtcG9uIgorCisjOiBidWZmZXIuYzoxNTAwCittc2dpZCAiVzE0OiBXYXJuaW5nOiBMaXN0IG9mIGZpbGUgbmFtZXMgb3ZlcmZsb3ciCittc2dzdHIgIlcxNDogQWxlcnRlOiBMYSBsaXN0ZSBkZXMgbm9tcyBkZSBmaWNoaWVyIGTpYm9yZGUiCisKKyMgQUIgLSBWdSBsZSBjb2RlIHNvdXJjZSwgbGEgdmVyc2lvbiBmcmFu52Fpc2UgZXN0IG1laWxsZXVyZSBxdWUgbGEKKyMgICAgICB2ZXJzaW9uIGFuZ2xhaXNlLiBDZSBtZXNzYWdlIGVzdCBzaW1pbGFpcmUgYXUgbWVzc2FnZSBFODYuCisjOiBidWZmZXIuYzoxNjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MjogQnVmZmVyICVsZCBub3QgZm91bmQiCittc2dzdHIgIkU5MjogTGUgdGFtcG9uICVsZCBuJ2V4aXN0ZSBwYXMiCisKKyMgQUIgLSBJbCBmYXV0IHJlc3BlY3RlciBsJ2VzcHJpdCBwbHVzIHF1ZSBsYSBsZXR0cmUuCisjOiBidWZmZXIuYzoxOTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5MzogUGx1c2lldXJzIHRhbXBvbnMgY29ycmVzcG9uZGVudCDgICVzIgorCisjOiBidWZmZXIuYzoxOTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiBBdWN1biB0YW1wb24gbmUgY29ycmVzcG9uZCDgICVzIgorCisjOiBidWZmZXIuYzoyMjk5IGV4X2RvY21kLmM6NjU2MAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCIKK21zZ3N0ciAibGlnbmUgJWxkIgorCisjOiBidWZmZXIuYzoyMzgyCittc2dpZCAiRTk1OiBCdWZmZXIgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU5NTogVW4gdGFtcG9uIHBvcnRlIGTpauAgY2Ugbm9tIgorCisjOiBidWZmZXIuYzoyNjc1Cittc2dpZCAiIFtNb2RpZmllZF0iCittc2dzdHIgIltNb2RpZmnpXSIKKworIyBBQiAtICJbSW7pZGl06V0iIGVzdCBwbHVzIGNvcnJlY3QsIG1haXMgc29ubmUgZmF1eC4KKyM6IGJ1ZmZlci5jOjI2ODAKK21zZ2lkICJbTm90IGVkaXRlZF0iCittc2dzdHIgIltQYXMg6WRpdOldIgorCisjOiBidWZmZXIuYzoyNjg1Cittc2dpZCAiW05ldyBmaWxlXSIKK21zZ3N0ciAiW05vdXZlYXUgZmljaGllcl0iCisKKyM6IGJ1ZmZlci5jOjI2ODYKK21zZ2lkICJbUmVhZCBlcnJvcnNdIgorbXNnc3RyICJbRXJyZXVycyBkZSBsZWN0dXJlXSIKKworIyBBQiAtIExhIHZlcnNpb24gY291cnRlLCAiW1JPXSIsIGRldnJhaXQtZWxsZSDqdHJlIHRyYWR1aXRlIHBhciAiW0xTXSIgPworIyAgICAgIElsIGZhdWRyYWl0IGZhaXJlIHVuIHNvbmRhZ2UgYXVwcuhzIGRlcyB1dGlsaXNhdGV1cnMgZnJhbmNvcGhvbmVzLgorIzogYnVmZmVyLmM6MjY4OCBmaWxlaW8uYzoxOTE0Cittc2dpZCAiW3JlYWRvbmx5XSIKK21zZ3N0ciAiW2xlY3R1cmUtc2V1bGVdIgorCisjOiBidWZmZXIuYzoyNzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAtLSVkJSUtLSIKK21zZ3N0ciAiMSBsaWduZSAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6MjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgLS0lZCUlLS0iCittc2dzdHIgIiVsZCBsaWduZXMgLS0lZCUlLS0iCisKKyMgQUIgLSBGYXV0LWlsIHJlbXBsYWNlciAic3VyIiBwYXIgImRlIiA/CisjOiBidWZmZXIuYzoyNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICJsaWduZSAlbGQgc3VyICVsZCAtLSVkJSUtLSBjb2wgIgorCisjOiBidWZmZXIuYzoyODEzCittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJbUGFzIGRlIGZpY2hpZXJdIgorCisjLiBtdXN0IGJlIGEgaGVscCBidWZmZXIKKyM6IGJ1ZmZlci5jOjI4NTMKK21zZ2lkICJoZWxwIgorbXNnc3RyICJhaWRlIgorCisjOiBidWZmZXIuYzozNDEyIHNjcmVlbi5jOjQ5OTYKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIlthaWRlXSIKKworIyBBQiAtICJQcul2aXN1YWxpc2F0aW9uIiBwcmVuZCBiZWF1Y291cCBkZSBwbGFjZS4gIlBy6XZpc2lvbiIgZXN0IHVuZQorIyAgICAgIHRyYWR1Y3Rpb24gbGl0dOlyYWxlIGV0IGJy6HZlLCBtYWlzIHF1aSByaXNxdWUgZm9ydCBkJ+p0cmUgbWFsIGNvbXByaXNlLgorIyAgICAgIEonYWkgZmluYWxlbWVudCBjaG9pc2kgZCd1dGlsaXNlciB1bmUgYWJy6XZpYXRpb24sIG1haXMgY2VsYSBuZSBtZQorIyAgICAgIHNhdGlzZmFpdCBwYXMuCisjOiBidWZmZXIuYzozNDQ0IHNjcmVlbi5jOjUwMDIKK21zZ2lkICJbUHJldmlld10iCittc2dzdHIgIltQcul2aXN1XSIKKworIzogYnVmZmVyLmM6MzcyNAorbXNnaWQgIkFsbCIKK21zZ3N0ciAiVG91dCIKKworIzogYnVmZmVyLmM6MzcyNAorbXNnaWQgIkJvdCIKK21zZ3N0ciAiQmFzIgorCisjIEFCIC0gQXR0ZW50aW9uLCBvbiBwYXNzZSBkZSB0cm9pcyDgIHF1YXRyZSBsZXR0cmVzLgorIzogYnVmZmVyLmM6MzcyNgorbXNnaWQgIlRvcCIKK21zZ3N0ciAiSGF1dCIKKworIzogYnVmZmVyLmM6NDQ3MAorbXNnaWQgIiIKKyJcbiIKKyIjIEJ1ZmZlciBsaXN0OlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBMaXN0ZSBkZXMgdGFtcG9uczpcbiIKKworIzogYnVmZmVyLmM6NDUwMworbXNnaWQgIltFcnJvciBMaXN0XSIKK21zZ3N0ciAiW0xpc3RlIGQnZXJyZXVyc10iCisKKyMgQUIgLSBDZSBtZXNzYWdlIGVzdCBk6WrgIHBy6XNlbnQgcXVlbHF1ZXMgbGlnbmVzIHBsdXMgaGF1dC4KKyM6IGJ1ZmZlci5jOjQ1MTYgbWVtbGluZS5jOjE1MDEKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIltQYXMgZGUgZmljaGllcl0iCisKKyM6IGJ1ZmZlci5jOjQ4MTkKK21zZ2lkICIiCisiXG4iCisiLS0tIFNpZ25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBTeW1ib2xlcyAtLS0iCisKKyM6IGJ1ZmZlci5jOjQ4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2lnbnMgZm9yICVzOiIKK21zZ3N0ciAiU3ltYm9sZXMgZGFucyAlczoiCisKKyM6IGJ1ZmZlci5jOjQ4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgIGxpZ25lPSVsZCAgaWQ9JWQgIG5vbT0lcyIKKworIyBBQiAtIEplIG4nYWkgcGFzIHRyb3V26SBkZSB0cmFkdWN0aW9uIHNhdGlzZmFpc2FudGUgYXUgdmVyYmUgImRpZmYiLiBDb21tZQorIyAgICAgIFZpbSBmYWl0IGVuIHByYXRpcXVlIGFwcGVsIGF1IHByb2dyYW1tZSAiZGlmZiIgcG91ciBldmFsdWVyIGxlcworIyAgICAgIGRpZmbpcmVuY2VzIGVudHJlIGZpY2hpZXJzLCAidG8gZGlmZiIgYSDpdOkgdHJhZHVpdCBwYXIgInV0aWxpc2VyIGRpZmYiCisjICAgICAgZXQgZCdhdXRyZXMgZXhwcmVzc2lvbnMgYXBwcm9wcmnpZXMuCisjOiBkaWZmLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NjogQ2FuIG5vdCBkaWZmIG1vcmUgdGhhbiAlbGQgYnVmZmVycyIKK21zZ3N0ciAiRTk2OiBJbXBvc3NpYmxlIGQndXRpbGlzZXIgZGlmZiBzdXIgcGx1cyBkZSAlbGQgdGFtcG9ucyIKKworIyBBQiAtIExhIHZlcnNpb24gZnJhbudhaXNlIGVzdCBtZWlsbGV1cmUgcXVlIGxhIHZlcnNpb24gYW5nbGFpc2UuCisjOiBkaWZmLmM6NjUxCittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6IGRpZmYgbmUgZm9uY3Rpb25uZSBwYXMiCisKKyMgQUIgLSBDZWNpIGVzdCB1biB0aXRyZSBkZSBib+50ZSBkZSBkaWFsb2d1ZS4KKyM6IGRpZmYuYzo3NTAKK21zZ2lkICJQYXRjaCBmaWxlIgorbXNnc3RyICJT6WxlY3Rpb25uZXIgdW4gcGF0Y2ggLSBWaW0iCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBlc3QgY29ycmVjdGUsIG1haXMgdHJvcCB0ZWNobmlxdWUuCisjIEFCIC0gIm91dHB1dCIgZXN0IGRpZmZpY2lsZSDgIHRyYWR1aXJlIGNsYWlyZW1lbnQuCisjOiBkaWZmLmM6MTAwMQorbXNnaWQgIkU5ODogQ2Fubm90IHJlYWQgZGlmZiBvdXRwdXQiCittc2dzdHIgIkU5ODogTGUgZmljaGllciBpbnRlcm3pZGlhaXJlIHByb2R1aXQgcGFyIGRpZmYgbidhIHB1IOp0cmUgbHUiCisKKyM6IGRpZmYuYzoxNzQyCittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IExlIHRhbXBvbiBjb3VyYW50IG4nZXN0IHBhcyBlbiBtb2RlIGRpZmYiCisKKyM6IGRpZmYuYzoxNzU0Cittc2dpZCAiRTEwMDogTm8gb3RoZXIgYnVmZmVyIGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMDogQXVjdW4gYXV0cmUgdGFtcG9uIG4nZXN0IGVuIG1vZGUgZGlmZiIKKworIyBBQiAtIExhIHZlcnNpb24gZnJhbudhaXNlIGVzdCBtZWlsbGV1cmUgcXVlIGxhIHZlcnNpb24gYW5nbGFpc2UsIG1haXMgZWxsZQorIyAgICAgIHBldXQg6nRyZSBhbelsaW9y6WUuCisjOiBkaWZmLmM6MTc2MgorbXNnaWQgIkUxMDE6IE1vcmUgdGhhbiB0d28gYnVmZmVycyBpbiBkaWZmIG1vZGUsIGRvbid0IGtub3cgd2hpY2ggb25lIHRvIHVzZSIKK21zZ3N0ciAiRTEwMTogUGx1cyBkZSBkZXV4IHRhbXBvbnMgc29udCBlbiBtb2RlIGRpZmYsIHNveWV6IHBsdXMgcHLpY2lzIgorCisjOiBkaWZmLmM6MTc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAyOiBDYW4ndCBmaW5kIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxMDI6IExlIHRhbXBvbiAlcyBlc3QgaW50cm91dmFibGUiCisKKyM6IGRpZmYuYzoxNzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzogTGUgdGFtcG9uICVzIG4nZXN0IHBhcyBlbiBtb2RlIGRpZmYiCisKKyMgQUIgLSBKZSBjaGVyY2hlIHVuZSB0cmFkdWN0aW9uIHBsdXMgY29uY2lzZSBwb3VyICJlc2NhcGUiLgorIzogZGlncmFwaC5jOjIxNzIKK21zZ2lkICJFMTA0OiBFc2NhcGUgbm90IGFsbG93ZWQgaW4gZGlncmFwaCIKK21zZ3N0ciAiRTEwNDogVW4gZGlncmFwaGUgbmUgcGV1dCBjb250ZW5pciBsZSBjYXJhY3TocmUgZCfpY2hhcHBlbWVudCIKKworIyBBQiAtIExhIHZlcnNpb24gZnJhbudhaXNlIGVzdCB0cm9wIHZlcmJldXNlLgorIzogZGlncmFwaC5jOjIzNDQKK21zZ2lkICJFNTQ0OiBLZXltYXAgZmlsZSBub3QgZm91bmQiCittc2dzdHIgIkU1NDQ6IExlIGZpY2hpZXIgZGVzY3JpcHRldXIgZGUgY2xhdmllciBlc3QgaW50cm91dmFibGUiCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBlc3QgbWVpbGxldXJlIHF1ZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlLgorIzogZGlncmFwaC5jOjIzNzEKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IDpsb2Fka2V5bWFwIG5lIHBldXQg6nRyZSB1dGlsaXPpIHF1ZSBkYW5zIHVuIHNjcmlwdCBWaW0iCisKKyMgQUIgLSBSZW1wbGFjZXIgImNvbXBs6XRpb24iIHBhciAiY29tcGzodGVtZW50IiA/IFZvaXIgbCfpdGh5bW9sb2dpZQorIyAgICAgIGQnImFjY3LpdGlvbiIuCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBDb21wbOl0aW9uIGRlIG1vdC1jbOkgKF5OL15QKSIKKworIy4gY3RybF94X21vZGUgPT0gMCwgXlAvXk4gY29tcGwuCisjOiBlZGl0LmM6NDEKK21zZ2lkICIgXlggbW9kZSAoXkUvXlkvXkwvXl0vXkYvXkkvXksvXkQvXlYvXk4vXlApIgorbXNnc3RyICIgbW9kZSBeWCAoXkUvXlkvXkwvXl0vXkYvXkkvXksvXkQvXlYvXk4vXlApIgorCisjIEFCIC0gUmVtcGxhY2VyICJjb21wbOl0aW9uIiBwYXIgImNvbXBs6HRlbWVudCIgPyBWb2lyIGwn6XRoeW1vbG9naWUKKyMgICAgICBkJyJhY2Ny6XRpb24iLgorIy4gU2Nyb2xsIGhhcyBpdCdzIG93biBtc2dzLCBpbiBpdCdzIHBsYWNlIHRoZXJlIGlzIHRoZSBtc2cgZm9yIGxvY2FsCisjLiAqIGN0cmxfeF9tb2RlID0gMCAoZWcgY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCkgIC0tIEFjZXZlZG8KKyM6IGVkaXQuYzo0NAorbXNnaWQgIiBLZXl3b3JkIExvY2FsIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIENvbXBs6XRpb24gbG9jYWxlIGRlIG1vdC1jbOkgKF5OL15QKSIKKworIyBBQiAtIFJlbXBsYWNlciAiY29tcGzpdGlvbiIgcGFyICJjb21wbOh0ZW1lbnQiID8gVm9pciBsJ+l0aHltb2xvZ2llCisjICAgICAgZCciYWNjcul0aW9uIi4KKyM6IGVkaXQuYzo0NQorbXNnaWQgIiBXaG9sZSBsaW5lIGNvbXBsZXRpb24gKF5ML15OL15QKSIKK21zZ3N0ciAiIENvbXBs6XRpb24gZGUgbGlnbmUgZW50aehyZSAoXkwvXk4vXlApIgorCisjIEFCIC0gUmVtcGxhY2VyICJjb21wbOl0aW9uIiBwYXIgImNvbXBs6HRlbWVudCIgPyBWb2lyIGwn6XRoeW1vbG9naWUKKyMgICAgICBkJyJhY2Ny6XRpb24iLgorIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRi9eTi9eUCkiCittc2dzdHIgIiBDb21wbOl0aW9uIGRlIG5vbSBkZSBmaWNoaWVyICheRi9eTi9eUCkiCisKKyMgQUIgLSBSZW1wbGFjZXIgImNvbXBs6XRpb24iIHBhciAiY29tcGzodGVtZW50IiA/IFZvaXIgbCfpdGh5bW9sb2dpZQorIyAgICAgIGQnImFjY3LpdGlvbiIuCisjOiBlZGl0LmM6NDcKK21zZ2lkICIgVGFnIGNvbXBsZXRpb24gKF5dL15OL15QKSIKK21zZ3N0ciAiIENvbXBs6XRpb24gZCfpdGlxdWV0dGUgKF5dL15OL15QKSIKKworIyBBQiAtIFJlbXBsYWNlciAiY29tcGzpdGlvbiIgcGFyICJjb21wbOh0ZW1lbnQiID8gVm9pciBsJ+l0aHltb2xvZ2llCisjICAgICAgZCciYWNjcul0aW9uIi4KKyMgQUIgLSBKJ2FpIGT7IGF2b2lyIHVuZSBib25uZSByYWlzb24gZGUgZmFpcmUgdW5lIHZlcnNpb24gZnJhbudhaXNlIGF1c3NpCisjICAgICAgZGlmZulyZW50ZSBkZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlLiBJbCBtZSBmYXV0IGxhIHJldHJvdXZlci4KKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIgQ29tcGzpdGlvbiBnbG9iYWxlIGRlIG1vdC1jbOkgKF5OL15QKSIKKworIyBBQiAtIFJlbXBsYWNlciAiY29tcGzpdGlvbiIgcGFyICJjb21wbOh0ZW1lbnQiID8gVm9pciBsJ+l0aHltb2xvZ2llCisjICAgICAgZCciYWNjcul0aW9uIi4KKyM6IGVkaXQuYzo0OQorbXNnaWQgIiBEZWZpbml0aW9uIGNvbXBsZXRpb24gKF5EL15OL15QKSIKK21zZ3N0ciAiIENvbXBs6XRpb24gZGUgZOlmaW5pdGlvbiAoXkQvXk4vXlApIgorCisjIEFCIC0gUmVtcGxhY2VyICJjb21wbOl0aW9uIiBwYXIgImNvbXBs6HRlbWVudCIgPyBWb2lyIGwn6XRoeW1vbG9naWUKKyMgICAgICBkJyJhY2Ny6XRpb24iLgorIyBBQiAtIFRyb3V2ZXIgdW5lIG1laWxsZXVyZSBmb3JtdWxhdGlvbiBxdWUgInNlbG9uIGxlIi4KKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LL15OL15QKSIKK21zZ3N0ciAiIENvbXBs6XRpb24gc2Vsb24gbGUgZGljdGlvbm5haXJlICheSy9eTi9eUCkiCisKKyMgQUIgLSBSZW1wbGFjZXIgImNvbXBs6XRpb24iIHBhciAiY29tcGzodGVtZW50IiA/IFZvaXIgbCfpdGh5bW9sb2dpZQorIyAgICAgIGQnImFjY3LpdGlvbiIuCisjIEFCIC0gVHJvdXZlciB1bmUgbWVpbGxldXJlIGZvcm11bGF0aW9uIHF1ZSAic2Vsb24gbGUiLgorIzogZWRpdC5jOjUyCittc2dpZCAiIFRoZXNhdXJ1cyBjb21wbGV0aW9uICheVC9eTi9eUCkiCittc2dzdHIgIiBDb21wbOl0aW9uIHNlbG9uIGxlIHRo6XNhdXJ1cyAoXlQvXk4vXlApIgorCisjIEFCIC0gUmVtcGxhY2VyICJjb21wbOl0aW9uIiBwYXIgImNvbXBs6HRlbWVudCIgPyBWb2lyIGwn6XRoeW1vbG9naWUKKyMgICAgICBkJyJhY2Ny6XRpb24iLgorIyBBQiAtIExhIHZlcnNpb24gZnJhbudhaXNlIGVzdCBtZWlsbGV1cmUgcXVlIGxhIHZlcnNpb24gYW5nbGFpc2UuCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WL15OL15QKSIKK21zZ3N0ciAiIENvbXBs6XRpb24gZGUgY29tbWFuZGUgVmltICheVi9eTi9eUCkiCisKKyMgQUIgLSBDZSB0ZXh0ZSBzJ2Fqb3V0ZSDgIGxhIGZpbiBkJ3VuIGRlcyBtZXNzYWdlcyBkZSBjb21wbOl0aW9uIGNpLWRlc3N1cy4KKyMgICAgICBJbCBmYXV0IOl2aXRlciBkZSBsZSBmYWlyZSB0cm9wIGxvbmcuIEplIHBlbnNlIHF1ZSBsYSB2ZXJzaW9uIGZyYW7nYWlzZQorIyAgICAgIGVzdCBzdWZmaXNhbW1lbnQgY29tcHLpaGVuc2libGUgZGFucyBsZSBjb250ZXh0ZSBkYW5zIGxlcXVlbCBlbGxlIGVzdAorIyAgICAgIGFmZmljaOllLgorIzogZWRpdC5jOjU2Cittc2dpZCAiSGl0IGVuZCBvZiBwYXJhZ3JhcGgiCittc2dzdHIgIkZpbiBkdSBwYXJhZ3JhcGhlIgorCisjOiBlZGl0LmM6OTU1Cittc2dpZCAiJ3RoZXNhdXJ1cycgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJMJ29wdGlvbiAndGhlc2F1cnVzJyBlc3QgdmlkZSIKKworIzogZWRpdC5jOjExNTkKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJMJ29wdGlvbiAnZGljdGlvbmFyeScgZXN0IHZpZGUiCisKKyM6IGVkaXQuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGRpY3Rpb25hcnk6ICVzIgorbXNnc3RyICJFeGFtZW4gZHUgZGljdGlvbm5haXJlOiAlcyIKKworIzogZWRpdC5jOjIzNTAKK21zZ2lkICIgKGluc2VydCkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoaW5zZXJ0aW9uKSBE6WZpbGVtZW50ICheRS9eWSkiCisKKyM6IGVkaXQuYzoyMzUyCittc2dpZCAiIChyZXBsYWNlKSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiIChyZW1wbGFjZW1lbnQpIETpZmlsZW1lbnQgKF5FL15ZKSIKKworIzogZWRpdC5jOjI2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmc6ICVzIgorbXNnc3RyICJFeGFtZW46ICVzIgorCisjOiBlZGl0LmM6MjcwMQorbXNnaWQgIlNjYW5uaW5nIHRhZ3MuIgorbXNnc3RyICJFeGFtZW4gZGVzIOl0aXF1ZXR0ZXMuIgorCisjIEFCIC0gQ2V0dGUgY2hh7m5lIGRlIGNhcmFjdOhyZXMgZXN0IGFqb3V06WUgZW4gZOlidXQgZGUgbGlnbmUgbG9yc3F1J3VuZQorIyAgICAgIG9w6XJhdGlvbiBkZSBjb21wbOl0aW9uIGVzdCBy6XDpdOllICh0eXBpcXVlbWVudCBhdmVjIENUUkwtWCBDVFJMLU4pLgorIyAgICAgIFF1ZSBjZSBzb2l0IGVuIGFuZ2xhaXMgb3UgZW4gZnJhbudhaXMsIGlsIHkgYSB1biBwcm9ibOhtZSBkZSBtYWp1c2N1bGVzLgorIyAgICAgIEJpZW4gcXUnaW5zYXRpc2ZhaXNhbnRlLCBjZXR0ZSB0cmFkdWN0aW9uIHNlbWJsZSBvcHRpbWFsZS4KKyM6IGVkaXQuYzozMzYzCittc2dpZCAiIEFkZGluZyIKK21zZ3N0ciAiIEFqb3V0IgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjM0MTIKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIFJlY2hlcmNoZSBlbiBjb3Vycy4uLiIKKworIyBBQiAtIENlIHRleHRlIHMnYWpvdXRlIOAgbGEgZmluIGQndW4gZGVzIG1lc3NhZ2VzIGRlIGNvbXBs6XRpb24gY2ktZGVzc3VzLgorIyBBQiAtIEZhdXQtaWwgdXRpbGlzZXIgIm9yaWdpbmUiIG91ICJvcmlnaW5lbCIgYXUgbGlldSBkJyJvcmlnaW5hbCIgPworIzogZWRpdC5jOjM0NjgKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICJEZSByZXRvdXIg4CBsJ29yaWdpbmFsIgorCisjIEFCIC0gQ2UgdGV4dGUgcydham91dGUg4CBsYSBmaW4gZCd1biBkZXMgbWVzc2FnZXMgZGUgY29tcGzpdGlvbiBjaS1kZXNzdXMuCisjOiBlZGl0LmM6MzQ3MworbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICJNb3QgZCd1bmUgYXV0cmUgbGlnbmUiCisKKyMgQUIgLSBDZSB0ZXh0ZSBzJ2Fqb3V0ZSDgIGxhIGZpbiBkJ3VuIGRlcyBtZXNzYWdlcyBkZSBjb21wbOl0aW9uIGNpLWRlc3N1cy4KKyM6IGVkaXQuYzozNDc4Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIkxhIHNldWxlIGNvcnJlc3BvbmRhbmNlIgorCisjIEFCIC0gQ2UgdGV4dGUgcydham91dGUg4CBsYSBmaW4gZCd1biBkZXMgbWVzc2FnZXMgZGUgY29tcGzpdGlvbiBjaS1kZXNzdXMuCisjIEFCIC0gRmF1dC1pbCByZW1wbGFjZXIgInN1ciIgcGFyICJkZSIgPworIzogZWRpdC5jOjM1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQgb2YgJWQiCittc2dzdHIgIkNvcnJlc3BvbmRhbmNlICVkIHN1ciAlZCIKKworIyBBQiAtIENlIHRleHRlIHMnYWpvdXRlIOAgbGEgZmluIGQndW4gZGVzIG1lc3NhZ2VzIGRlIGNvbXBs6XRpb24gY2ktZGVzc3VzLgorIzogZWRpdC5jOjM1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgIkNvcnJlc3BvbmRhbmNlICVkIgorCisjLiBTa2lwIGZ1cnRoZXIgYXJndW1lbnRzIGJ1dCBkbyBjb250aW51ZSB0bworIy4gKiBzZWFyY2ggZm9yIGEgdHJhaWxpbmcgY29tbWFuZC4KKyM6IGV2YWwuYzo5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNjogVW5rbm93biB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA2OiBWYXJpYWJsZSBpbmNvbm51ZTogJXMiCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBlc3QgbWVpbGxldXJlIHF1ZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlLgorIyBBQiAtIEplIHN1aXMgcGFydGFn6SBlbnRyZSBsYSBjb25jaXNpb24gZCd1bmUgdHJhZHVjdGlvbiBhc3NleiBsaXR06XJhbGUgZXQKKyMgICAgICBsYSBsb3VyZGV1ciBkJ3VuZSB0cmFkdWN0aW9uIHBsdXMgY29ycmVjdGUuCisjOiBldmFsLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA3OiBNaXNzaW5nIGJyYWNlczogJXMiCittc2dzdHIgIkUxMDc6IElsIG1hbnF1ZSAnKCcgYXBy6HMgJXMiCisKKyM6IGV2YWwuYzoxMzgwIGV2YWwuYzoxMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDg6IE5vIHN1Y2ggdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwODogVmFyaWFibGUgaW5leGlzdGFudGU6ICVzIgorCisjIEFCIC0gSmUgc3VpcyBwYXJ0YWfpIGVudHJlIGxhIGNvbmNpc2lvbiBkJ3VuZSB0cmFkdWN0aW9uIGFzc2V6IGxpdHTpcmFsZSBldAorIyAgICAgIGxhIGxvdXJkZXVyIGQndW5lIHRyYWR1Y3Rpb24gcGx1cyBjb3JyZWN0ZS4KKyM6IGV2YWwuYzoxNjUwCittc2dpZCAiRTEwOTogTWlzc2luZyAnOicgYWZ0ZXIgJz8nIgorbXNnc3RyICJFMTA5OiBJbCBtYW5xdWUgJzonIGFwcuhzICc/JyIKKworIyBBQiAtIEplIHN1aXMgcGFydGFn6SBlbnRyZSBsYSBjb25jaXNpb24gZCd1bmUgdHJhZHVjdGlvbiBhc3NleiBsaXR06XJhbGUgZXQKKyMgICAgICBsYSBsb3VyZGV1ciBkJ3VuZSB0cmFkdWN0aW9uIHBsdXMgY29ycmVjdGUuCisjOiBldmFsLmM6MjI2NgorbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiBJbCBtYW5xdWUgJyknIgorCisjIEFCIC0gSmUgc3VpcyBwYXJ0YWfpIGVudHJlIGxhIGNvbmNpc2lvbiBkJ3VuZSB0cmFkdWN0aW9uIGFzc2V6IGxpdHTpcmFsZSBldAorIyAgICAgIGxhIGxvdXJkZXVyIGQndW5lIHRyYWR1Y3Rpb24gcGx1cyBjb3JyZWN0ZS4KKyM6IGV2YWwuYzoyMzIzCittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6IElsIG1hbnF1ZSAnXSciCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBlc3QgbWVpbGxldXJlIHF1ZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlLgorIyBBQiAtIEplIHN1aXMgcGFydGFn6SBlbnRyZSBsYSBjb25jaXNpb24gZCd1bmUgdHJhZHVjdGlvbiBhc3NleiBsaXR06XJhbGUgZXQKKyMgICAgICBsYSBsb3VyZGV1ciBkJ3VuZSB0cmFkdWN0aW9uIHBsdXMgY29ycmVjdGUuCisjOiBldmFsLmM6MjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEyOiBPcHRpb24gbmFtZSBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiRTExMjogSWwgbWFucXVlIHVuIG5vbSBkJ29wdGlvbiBhcHLocyAlcyIKKworIzogZXZhbC5jOjI0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMzogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMTEzOiBPcHRpb24gaW5jb25udWU6ICVzIgorCisjIEFCIC0gTGEgdmVyc2lvbiBmcmFu52Fpc2UgZXN0IG1laWxsZXVyZSBxdWUgbGEgdmVyc2lvbiBhbmdsYWlzZSwgcXVpIGVzdAorIyAgICAgIGVycm9u6WUsIGQnYWlsbGV1cnMgOiBpbCBzJ2FnaXQgZCd1bmUgImRvdWJsZSBxdW90ZSIgZXQgbm9uIGQndW5lCisjICAgICAgInF1b3RlIi4KKyM6IGV2YWwuYzoyNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTQ6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE0OiBJbCBtYW5xdWUgXCIg4CBsYSBmaW4gZGUgJXMiCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBlc3QgbWVpbGxldXJlIHF1ZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlLgorIzogZXZhbC5jOjI2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNTogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTU6IElsIG1hbnF1ZSAnIOAgbGEgZmluIGRlICVzIgorCisjIEFCIC0gTGEgdmVyc2lvbiBmcmFu52Fpc2UgZXN0IG1laWxsZXVyZSBxdWUgbGEgdmVyc2lvbiBhbmdsYWlzZS4KKyM6IGV2YWwuYzoyOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTExNjogVW4gYXJndW1lbnQgZGUgbGEgZm9uY3Rpb24gJXMgZXN0IGludmFsaWRlIgorCisjOiBldmFsLmM6Mjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE3OiBVbmtub3duIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExNzogRm9uY3Rpb24gaW5jb25udWU6ICVzIgorCisjOiBldmFsLmM6Mjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODogTGEgZm9uY3Rpb24gJXMgYSB0cm9wIGQnYXJndW1lbnRzIgorCisjOiBldmFsLmM6Mjk5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE5OiBOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE5OiBMYSBmb25jdGlvbiAlcyBuJ2EgcGFzIGFzc2V6IGQnYXJndW1lbnRzIgorCisjOiBldmFsLmM6Mjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIwOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dDogJXMiCittc2dzdHIgIkUxMjA6IDxTSUQ+IG5lIHBldXQg6nRyZSB1dGlsaXPpIGVuIGRlaG9ycyBkJ3VuIHNjcmlwdDogJXMiCisKKyMgQUIgLSBUZXh0ZSBwYXIgZOlmYXV0IGR1IGJvdXRvbiBkZSBsYSBib+50ZSBkZSBkaWFsb2d1ZSBhZmZpY2jpZSBwYXIgbGEKKyMgICAgICBmb25jdGlvbiBjb25maXJtKCkuCisjLgorIy4gKiBZZXMgdGhpcyBpcyB1Z2x5LCBJIGRvbid0IHBhcnRpY3VsYXJseSBsaWtlIGl0IGVpdGhlci4gIEJ1dCBkb2luZyBpdAorIy4gKiB0aGlzIHdheSBoYXMgdGhlIGNvbXBlbGxpbmcgYWR2YW50YWdlIHRoYXQgdHJhbnNsYXRpb25zIG5lZWQgbm90IHRvCisjLiAqIGJlIHRvdWNoZWQgYXQgYWxsLiAgU2VlIGJlbG93IHdoYXQgJ29rJyBhbmQgJ3luYycgYXJlIHVzZWQgZm9yLgorIy4KKyM6IGV2YWwuYzozNTg1IGd1aS5jOjQyNTQgZ3VpX2d0ay5jOjE5OTcKK21zZ2lkICImT2siCittc2dzdHIgIiZPayIKKworIzogZXZhbC5jOjQxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQgbGlnbmVzOiAiCisKKyMgQUIgLSBUZXh0ZXMgZGVzIGJvdXRvbnMgZGUgbGEgYm/udGUgZGUgZGlhbG9ndWUgYWZmaWNo6WUgcGFyIGlucHV0ZGlhbG9nKCkuCisjOiBldmFsLmM6NTM0NQorbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJk9rXG4iCisiJkFubnVsZXIiCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBlc3QgbWVpbGxldXJlIHF1ZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlLgorIzogZXZhbC5jOjUzODUKK21zZ2lkICJjYWxsZWQgaW5wdXRyZXN0b3JlKCkgbW9yZSBvZnRlbiB0aGFuIGlucHV0c2F2ZSgpIgorbXNnc3RyICJpbnB1dHJlc3RvcmUoKSBhIOl06SBhcHBlbOkgcGx1cyBkZSBmb2lzIHF1J2lucHV0c2F2ZSgpIgorCisjIEFCIC0gwCBtb24gYXZpcywgbGEgdmVyc2lvbiBhbmdsYWlzZSBlc3QgZXJyb27pZS4KKyM6IGV2YWwuYzo2MzAwCittc2dpZCAiRTI0MDogTm8gY29ubmVjdGlvbiB0byBWaW0gc2VydmVyIgorbXNnc3RyICJFMjQwOiBQYXMgZGUgY29ubmVjdGlvbiBhdSBzZXJ2ZXVyIFgiCisKKyM6IGV2YWwuYzo2Mzk3Cittc2dpZCAiRTI3NzogVW5hYmxlIHRvIHJlYWQgYSBzZXJ2ZXIgcmVwbHkiCittc2dzdHIgIkUyNzc6IExhIHLpcG9uc2UgZHUgc2VydmV1ciBuJ2EgcHUg6nRyZSBsdWUiCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBlc3QgbWVpbGxldXJlIHF1ZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlLgorIzogZXZhbC5jOjY0MjUKK21zZ2lkICJFMjU4OiBVbmFibGUgdG8gc2VuZCB0byBjbGllbnQiCittc2dzdHIgIkUyNTg6IExhIHLpcG9uc2UgbidhIHB1IOp0cmUgZW52b3npZSBhdSBjbGllbnQiCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBlc3QgbWVpbGxldXJlIHF1ZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlLgorIzogZXZhbC5jOjY0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MTogVW5hYmxlIHRvIHNlbmQgdG8gJXMiCittc2dzdHIgIkUyNDE6IEwnZW52b2kgYXUgc2VydmV1ciAlcyDgIOljaG916SIKKworIzogZXZhbC5jOjY1NzMKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIihJbnZhbGlkZSkiCisKKyM6IGV2YWwuYzo3Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogJXMiCittc2dzdHIgIkUxMjE6IFZhcmlhYmxlIGluZOlmaW5pZTogJXMiCisKKyMgQUIgLSAiaWxs6WdhbCIgZXN0IHVuIHRlcm1lIHRyb3AgZm9ydCDgIG1vbiBnb/t0LgorIzogZXZhbC5jOjgxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2MTogSWxsZWdhbCB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAiRTQ2MTogTm9tIGRlIHZhcmlhYmxlIGlsbOlnYWw6ICVzIgorCisjOiBldmFsLmM6ODQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgYWRkICEgdG8gcmVwbGFjZSBpdCIKK21zZ3N0ciAiRTEyMjogTGEgZm9uY3Rpb24gJXMgZXhpc3RlIGTpauAgKGFqb3V0ZXogISBwb3VyIGxhIHJlbXBsYWNlcikiCisKKyM6IGV2YWwuYzo4NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjM6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMjM6IEZvbmN0aW9uIGluZOlmaW5pZTogJXMiCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBlc3QgcGx1cyBjb25zaXN0YW50ZSBxdWUgbGEgdmVyc2lvbiBhbmdsYWlzZS4KKyMgQUIgLSBKZSBzdWlzIHBhcnRhZ+kgZW50cmUgbGEgY29uY2lzaW9uIGQndW5lIHRyYWR1Y3Rpb24gYXNzZXogbGl0dOlyYWxlIGV0CisjICAgICAgbGEgbG91cmRldXIgZCd1bmUgdHJhZHVjdGlvbiBwbHVzIGNvcnJlY3RlLgorIzogZXZhbC5jOjg0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNDogTWlzc2luZyAnKCc6ICVzIgorbXNnc3RyICJFMTI0OiBJbCBtYW5xdWUgJygnIGFwcuhzICVzIgorCisjIEFCIC0gImlsbOlnYWwiIGVzdCB1biB0ZXJtZSB0cm9wIGZvcnQg4CBtb24gZ2/7dC4KKyM6IGV2YWwuYzo4NTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiBBcmd1bWVudCBpbGzpZ2FsOiAlcyIKKworIzogZXZhbC5jOjg2MDAKK21zZ2lkICJFMTI2OiBNaXNzaW5nIDplbmRmdW5jdGlvbiIKK21zZ3N0ciAiRTEyNjogSWwgbWFucXVlIDplbmRmdW5jdGlvbiIKKworIyBBQiAtIElsIGVzdCBkaWZmaWNpbGUgZGUgY3LpZXIgdW5lIHZlcnNpb24gZnJhbudhaXNlIHF1aSBmYXNzZSBtb2lucyBkZSA4MAorIyAgICAgIGNhcmFjdOhyZXMgZGUgbG9uZywgbm9tIGRlIGxhIGZvbmN0aW9uIGNvbXByaXMgOiAiSXQgaXMgaW4gdXNlIiBlc3QgdW5lCisjICAgICAgZXhwcmVzc2lvbiB0cuhzIGRlbnNlLiBUcmFkdWN0aW9ucyBwb3NzaWJsZXMgOiAiZWxsZSBlc3QgdXRpbGlz6WUiLAorIyAgICAgICJlbGxlIHMnZXjpY3V0ZSIgb3UgImVsbGUgZXN0IG9jY3Vw6WUiLgorIzogZXZhbC5jOjg2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNzogQ2Fubm90IHJlZGVmaW5lIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMjc6IEltcG9zc2libGUgZGUgcmVk6WZpbmlyICVzOiBjZXR0ZSBmb25jdGlvbiBlc3Qgb2NjdXDpZSIKKworIzogZXZhbC5jOjg3NTEKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiBOb20gZGUgZm9uY3Rpb24gcmVxdWlzIgorCisjIEFCIC0gSWwgZmF1dCByZXNwZWN0ZXIgbCdlc3ByaXQgcGx1cyBxdWUgbGEgbGV0dHJlLgorIzogZXZhbC5jOjg4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODogJXMgbmUgY29tbWVuY2UgcGFzIHBhciB1bmUgbWFqdXNjdWxlIgorCisjOiBldmFsLmM6ODk5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTMwOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTMwOiBGb25jdGlvbiBpbmTpZmluaWU6ICVzIgorCisjIEFCIC0gSWwgZXN0IGRpZmZpY2lsZSBkZSBjcullciB1bmUgdmVyc2lvbiBmcmFu52Fpc2UgcXVpIGZhc3NlIG1vaW5zIGRlIDgwCisjICAgICAgY2FyYWN06HJlcyBkZSBsb25nLCBub20gZGUgbGEgZm9uY3Rpb24gY29tcHJpcyA6ICJJdCBpcyBpbiB1c2UiIGVzdCB1bmUKKyMgICAgICBleHByZXNzaW9uIHRy6HMgZGVuc2UuIFRyYWR1Y3Rpb25zIHBvc3NpYmxlcyA6ICJlbGxlIGVzdCB1dGlsaXPpZSIsCisjICAgICAgImVsbGUgcydleOljdXRlIiBvdSAiZWxsZSBlc3Qgb2NjdXDpZSIuCisjOiBldmFsLmM6ODk5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTMxOiBDYW5ub3QgZGVsZXRlIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMzE6IEltcG9zc2libGUgZCdlZmZhY2VyICVzOiBjZXR0ZSBmb25jdGlvbiBlc3Qgb2NjdXDpZSIKKworIyBBQiAtIFbpcmlmaWVyIGRhbnMgbGEgbGl0dOlyYXR1cmUgdGVjaG5pcXVlIHMnaWwgbidleGlzdGUgcGFzIHVuZSBtZWlsbGV1cmUKKyMgICAgICB0cmFkdWN0aW9uIHBvdXIgImZ1bmN0aW9uIGNhbGwgZGVwdGgiLgorIzogZXZhbC5jOjkwNDcKK21zZ2lkICJFMTMyOiBGdW5jdGlvbiBjYWxsIGRlcHRoIGlzIGhpZ2hlciB0aGFuICdtYXhmdW5jZGVwdGgnIgorbXNnc3RyICJFMTMyOiBMYSBwcm9mb25kZXVyIGQnYXBwZWwgZGUgZm9uY3Rpb24gZXN0IHN1cOlyaWV1cmUg4CAnbWF4ZnVuY2RlcHRoJyIKKworIyBBQiAtIENlIHRleHRlIGZhaXQgcGFydGllIGQndW4gbWVzc2FnZSBkZSBk6WJvZ2FnZS4KKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjkxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAiYXBwZWwgZGUgJXMiCisKKyMgQUIgLSBW6XJpZmllci4KKyM6IGV2YWwuYzo5MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFib3J0ZWQiCittc2dzdHIgIiVzIGFubnVs6WUiCisKKyMgQUIgLSBDZSB0ZXh0ZSBmYWl0IHBhcnRpZSBkJ3VuIG1lc3NhZ2UgZGUgZOlib2dhZ2UuCisjOiBldmFsLmM6OTE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgIyVsZCIKK21zZ3N0ciAiJXMgYSByZXRvdXJu6SAjJWxkIgorCisjIEFCIC0gQ2UgdGV4dGUgZmFpdCBwYXJ0aWUgZCd1biBtZXNzYWdlIGRlIGTpYm9nYWdlLgorIzogZXZhbC5jOjkxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nIFwiJXNcIiIKK21zZ3N0ciAiJXMgYSByZXRvdXJu6SBcIiVzXCIiCisKKyMgQUIgLSBDZSB0ZXh0ZSBmYWl0IHBhcnRpZSBkJ3VuIG1lc3NhZ2UgZGUgZOlib2dhZ2UuCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV2YWwuYzo5MTg3IGV4X2NtZHMyLmM6MjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb250aW51aW5nIGluICVzIgorbXNnc3RyICJkZSByZXRvdXIgZGFucyAlcyIKKworIzogZXZhbC5jOjkyMTMKK21zZ2lkICJFMTMzOiA6cmV0dXJuIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTEzMzogOnJldHVybiBuJ2VzdCBwYXMg4CBsJ2ludOlyaWV1ciBkJ3VuZSBmb25jdGlvbiIKKworIyBBQiAtIExhIHZlcnNpb24gZnJhbudhaXNlIGVzdCBjYXBpdGFsaXPpZSBwb3VyIOp0cmUgZW4gYWNjb3JkIGF2ZWMgbGVzIGF1dHJlcworIyAgICAgIGNvbW1lbnRhaXJlcyBlbnJlZ2lzdHLpcyBkYW5zIGxlIGZpY2hpZXIgdmltaW5mby4KKyM6IGV2YWwuYzo5NTQ0Cittc2dpZCAiIgorIlxuIgorIiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgVmFyaWFibGVzIGdsb2JhbGVzOlxuIgorCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGFuZ2xhaXNlIGVzdCB0cuhzIG1hdXZhaXNlLCBjZSBxdWkgbSdvYmxpZ2UgYSBpbnZlbnRlciB1bmUKKyMgICAgICB2ZXJzaW9uIGZyYW7nYWlzZS4KKyM6IGV4X2NtZHMuYzo0MzMKK21zZ2lkICJFMTM0OiBNb3ZlIGxpbmVzIGludG8gdGhlbXNlbHZlcyIKK21zZ3N0ciAiRTEzNDogTGEgZGVzdGluYXRpb24gZXN0IGRhbnMgbGEgcGxhZ2UgZCdvcmlnaW5lIgorCisjOiBleF9jbWRzLmM6NTAyCittc2dpZCAiMSBsaW5lIG1vdmVkIgorbXNnc3RyICIxIGxpZ25lIGTpcGxhY+llIgorCisjOiBleF9jbWRzLmM6NTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBtb3ZlZCIKK21zZ3N0ciAiJWxkIGxpZ25lcyBk6XBsYWPpZXMiCisKKyM6IGV4X2NtZHMuYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICIlbGQgbGlnbmVzIGZpbHRy6WVzIgorCisjIEFCIC0gSidhaSB2b2xvbnRhaXJlbWVudCBvbWlzIGwnYXN06XJpc3F1ZSBpbml0aWFsZSBjYXIgamUgcGVuc2UgcXVlIGxlCisjICAgICAgbW90aWYgIkZpbHRlcioiIGTpY3JpdCBwbHVzIGNsYWlyZW1lbnQgbGVzIHF1YXRyZSBhdXRvY29tbWFuZGVzIGxp6WVzCisjICAgICAgYXUgZmlsdHJhZ2UgKEZpbHRlclJlYWRQcmUsIEZpbHRlclJlYWRQb3N0LCBGaWx0ZXJXcml0ZVByZSBldAorIyAgICAgIEZpbHRlcldyaXRlUG9zdCkgcXVlICIqRmlsdGVyKiIgcXVlIGwnb24gY29uZm9uZCBhdmVjIHVuZSB0ZW50YXRpdmUgZGUKKyMgICAgICBtaXNlIGVuIHZhbGV1ci4KKyM6IGV4X2NtZHMuYzo5MzcKK21zZ2lkICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICIiCisiRTEzNTogTGVzIGF1dG9jb21tYW5kZXMgRmlsdGVyKiBuZSBkb2l2ZW50IHBhcyBjaGFuZ2VyIGxlIHRhbXBvbiBjb3VyYW50IgorCisjIEFCIC0gSWwgZmF1dCByZXNwZWN0ZXIgbCdlc3ByaXQgcGx1cyBxdWUgbGEgbGV0dHJlLiBEYW5zIGxlIGNhcyBwculzZW50LAorIyAgICAgIG5ldHRlbWVudCBwbHVzLgorIzogZXhfY21kcy5jOjEwMjIKK21zZ2lkICJbTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2VdXG4iCittc2dzdHIgIltBdHRlbnRpb246IHRvdXQgbidlc3QgcGFzIGVucmVnaXN0culdXG4iCisKKyMgQUIgLSBMZSBudW3pcm8gZXQgbGUgbWVzc2FnZSBkJ2VycmV1ciAoJXMgY2ktZGVzc291cykgZXQgbGUgIm51belybyIgZGUgbGlnbmUKKyMgICAgICBzb250IGRlcyBjaGHubmVzIGRlIGNhcmFjdOhyZXMgZG9udCBsZSBjb250ZW51IGVzdCDgIGxhIGRpc2Ny6XRpb24gZGUKKyMgICAgICBsJ2FwcGVsYW50IGRlIGxhIGZvbmN0aW9uIHZpbWluZm9fZXJyb3IoKS4KKyM6IGV4X2NtZHMuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzdmltaW5mbzogJXMgaW4gbGluZTogIgorbXNnc3RyICIlc3ZpbWluZm86ICVzIOAgbGEgbGlnbmUgIgorCisjIEFCIC0gTGEgdmVyc2lvbiBmcmFu52Fpc2UgZXN0IG1laWxsZXVyZSBxdWUgbGEgdmVyc2lvbiBhbmdsYWlzZS4KKyM6IGV4X2NtZHMuYzoxMjczCittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIiIKKyJFMTM2OiBJbCB5IGEgdHJvcCBkJ2VycmV1cnM7IGludGVycnVwdGlvbiBkZSBsYSBsZWN0dXJlIGR1IGZpY2hpZXIgdmltaW5mbyIKKworIyBBQiAtIENlIHRleHRlIGZhaXQgcGFydGllIGQndW4gbWVzc2FnZSBkZSBk6WJvZ2FnZS4KKyM6IGV4X2NtZHMuYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAiTGVjdHVyZSBkdSBmaWNoaWVyIHZpbWluZm8gXCIlc1wiJXMlcyVzIgorCisjIEFCIC0gQ2UgdGV4dGUgZmFpdCBwYXJ0aWUgZCd1biBtZXNzYWdlIGRlIGTpYm9nYWdlLgorIzogZXhfY21kcy5jOjEzMDkKK21zZ2lkICIgaW5mbyIKK21zZ3N0ciAiIGluZm8iCisKKyMgQUIgLSBDZSB0ZXh0ZSBmYWl0IHBhcnRpZSBkJ3VuIG1lc3NhZ2UgZGUgZOlib2dhZ2UuCisjOiBleF9jbWRzLmM6MTMxMAorbXNnaWQgIiBtYXJrcyIKK21zZ3N0ciAiIG1hcnF1ZXMiCisKKyMgQUIgLSBDZSB0ZXh0ZSBmYWl0IHBhcnRpZSBkJ3VuIG1lc3NhZ2UgZGUgZOlib2dhZ2UuCisjOiBleF9jbWRzLmM6MTMxMQorbXNnaWQgIiBGQUlMRUQiCittc2dzdHIgIiDJQ0hFQyIKKworIyBBQiAtIEonZXNw6HJlIHF1ZSBsYSBwbHVwYXJ0IGRlcyB1dGlsaXNhdGV1cnMgYXVyYSBsJ2lk6WUgZCdhbGxlciB26XJpZmllcgorIyAgICAgIHNlcyBkcm9pdHMgZCdhY2Pocy4KKyMgQUIgLSBMZSBtb3QgInZpbWluZm8iIGEg6XTpIHJldGly6SBwb3VyIHF1ZSBsZSBtZXNzYWdlIG5lIGTpcGFzc2UgcGFzIDgwCisjICAgICAgY2FyYWN06HJlcyBkYW5zIGxlIGNhcyBjb3VyYW50IG/5ICVzID0gL2hvbWUvMTIzNDU2NzgvLnZpbWluZm8KKyM6IGV4X2NtZHMuYzoxNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzc6IFZpbWluZm8gZmlsZSBpcyBub3Qgd3JpdGFibGU6ICVzIgorbXNnc3RyICJFMTM3OiBMJ+ljcml0dXJlIGRhbnMgbGUgZmljaGllciAlcyBlc3QgaW50ZXJkaXRlIgorCisjIEFCIC0gTGUgcG9pbnQgZCdleGNsYW1hdGlvbiBlc3Qgc3VwZXJmbHUuCisjIEFCIC0gTGUgbW90ICJ2aW1pbmZvIiBhIOl06SByZXRpcukgcG91ciBxdWUgbGUgbWVzc2FnZSBuZSBk6XBhc3NlIHBhcyA4MAorIyAgICAgIGNhcmFjdOhyZXMgZGFucyBsZSBjYXMgY291cmFudCBv+SAlcyA9IC9ob21lLzEyMzQ1Njc4Ly52aW1pbmZvCisjOiBleF9jbWRzLmM6MTUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiBJbXBvc3NpYmxlIGQn6WNyaXJlIGxlIGZpY2hpZXIgJXMiCisKKyMgQUIgLSBDZSB0ZXh0ZSBlc3QgdW4gbWVzc2FnZSBkZSBk6WJvZ2FnZS4KKyM6IGV4X2NtZHMuYzoxNTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiyWNyaXR1cmUgZHUgZmljaGllciB2aW1pbmZvIFwiJXNcIiIKKworIy4gV3JpdGUgdGhlIGluZm86CisjOiBleF9jbWRzLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIjIFRoaXMgdmltaW5mbyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVmltICVzLlxuIgorbXNnc3RyICIjIENlIGZpY2hpZXIgdmltaW5mbyBhIOl06SBn6W7pcukgcGFyIFZpbSAlcy5cbiIKKworIyBBQiAtIExlcyBkZXV4IHZlcnNpb25zLCBiaWVuIHF1ZSBkaWZm6XJlbnRlcywgc2UgdmFsZW50LgorIzogZXhfY21kcy5jOjE2MzYKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIFZvdXMgcG91dmV6IGwn6WRpdGVyLCBtYWlzIHNveWV6IHBydWRlbnQuXG4iCisiXG4iCisKKyMgQUIgLSBKZSBwculm6HJlICJWYWxldXIgZGUgJ2VuY29kaW5nJyIg4CAiVmFsZXVyIGQnJ2VuY29kaW5nJyIuCisjOiBleF9jbWRzLmM6MTYzOAorbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjICdlbmNvZGluZycgZGFucyBsZXF1ZWwgY2UgZmljaGllciBhIOl06SDpY3JpdFxuIgorCisjIEFCIC0gQ2UgdGV4dGUgZXN0IHBhc3PpIGVuIGFyZ3VtZW50IOAgbGEgZm9uY3Rpb24gdmltaW5mb19lcnJvcigpLgorIyBBQiAtICJpbGzpZ2FsIiBlc3QgdW4gdGVybWUgdHJvcCBmb3J0IOAgbW9uIGdv+3QuCisjOiBleF9jbWRzLmM6MTczNworbXNnaWQgIklsbGVnYWwgc3RhcnRpbmcgY2hhciIKK21zZ3N0ciAiQ2FyYWN06HJlIGluaXRpYWwgaWxs6WdhbCIKKworIyBBQiAtIENlY2kgZXN0IHVuIHRpdHJlIGRlIGJv7nRlIGRlIGRpYWxvZ3VlLiBW6XJpZmllciBxdWUgbGEgdmVyc2lvbgorIyAgICAgIGZyYW7nYWlzZSBlc3QgY29ycmVjdGUgcG91ciBsZXMgdHJvaXMgculm6XJlbmNlcyA7IGonYWkgdW4gZG91dGUgcXVhbnQKKyMgICAgICDgIGxhIHRyb2lzaehtZS4KKyM6IGV4X2NtZHMuYzoyMDgyIGV4X2NtZHMuYzoyMzQ3IGV4X2NtZHMyLmM6NzU0Cittc2dpZCAiU2F2ZSBBcyIKK21zZ3N0ciAiRW5yZWdpc3RyZXIgc291cyAtIFZpbSIKKworIy4gT3ZlcndyaXRpbmcgYSBmaWxlIHRoYXQgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIGlzIG5vdCBhCisjLiAqIGdvb2QgaWRlYS4KKyM6IGV4X2NtZHMuYzoyMTI1Cittc2dpZCAiRTEzOTogRmlsZSBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIiCittc2dzdHIgIkUxMzk6IExlIGZpY2hpZXIgZXN0IGNoYXJn6SBkYW5zIHVuIGF1dHJlIHRhbXBvbiIKKworIyBBQiAtIENlY2kgZXN0IHVuIGNvbnRlbnUgZGUgYm/udGUgZGUgZGlhbG9ndWUgKOl2ZW50dWVsbGVtZW50IGVuIG1vZGUgdGV4dGUpLgorIyBBQiAtIExhIHZlcnNpb24gZnJhbudhaXNlIGVzdCBtZWlsbGV1cmUgcXVlIGxhIHZlcnNpb24gYW5nbGFpc2UuCisjOiBleF9jbWRzLmM6MjE1OQorbXNnaWQgIldyaXRlIHBhcnRpYWwgZmlsZT8iCittc2dzdHIgIlBlcmRyZSB1bmUgcGFydGllIGR1IGZpY2hpZXIgPyIKKworIyBBQiAtIExhIHZlcnNpb24gZnJhbudhaXNlIGVzdCBuZXR0ZW1lbnQgbWVpbGxldXJlIHF1ZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlLgorIzogZXhfY21kcy5jOjIxNjYKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiIgorIkUxNDA6IFVuZSBwYXJ0aWUgZHUgZmljaGllciBzZXJhaXQgcGVyZHVlIChham91dGV6ICEgcG91ciBwYXNzZXIgb3V0cmUpIgorCisjIEFCIC0gQ2VjaSBlc3QgdW4gY29udGVudSBkZSBib+50ZSBkZSBkaWFsb2d1ZSAo6XZlbnR1ZWxsZW1lbnQgZW4gbW9kZSB0ZXh0ZSkuCisjOiBleF9jbWRzLmM6MjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGUgZXhpc3RpbmcgZmlsZSBcIiUuKnNcIj8iCittc2dzdHIgIsljcmFzZXIgbGUgZmljaGllciAlLipzIGV4aXN0YW50ID8iCisKKyM6IGV4X2NtZHMuYzoyMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDE6IE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTE0MTogUGFzIGRlIG5vbSBkZSBmaWNoaWVyIHBvdXIgbGUgdGFtcG9uICVsZCIKKworIyBBQiAtIElsIGZhdXQgcmVzcGVjdGVyIGwnZXNwcml0IHBsdXMgcXVlIGxhIGxldHRyZS4KKyM6IGV4X2NtZHMuYzoyMzkwCittc2dpZCAiRTE0MjogRmlsZSBub3Qgd3JpdHRlbjogV3JpdGluZyBpcyBkaXNhYmxlZCBieSAnd3JpdGUnIG9wdGlvbiIKK21zZ3N0ciAiRTE0MjogTCdvcHRpb24gJ25vd3JpdGUnIGVzdCBhY3RpdullIGV0IGVtcOpjaGUgdG91dGUg6WNyaXR1cmUgZGUgZmljaGllciIKKworIyBBQiAtIENlY2kgZXN0IHVuIGNvbnRlbnUgZGUgYm/udGUgZGUgZGlhbG9ndWUgKOl2ZW50dWVsbGVtZW50IGVuIG1vZGUgdGV4dGUpLgorIyBBQiAtICJhY3RpdullIHBvdXIiIG4nZXN0IHBhcyB1bmUgZm9ybXVsYXRpb24gdHLocyBoZXVyZXVzZS4KKyM6IGV4X2NtZHMuYzoyNDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgZm9yIFwiJS4qc1wiLlxuIgorIkRvIHlvdSB3aXNoIHRvIHdyaXRlIGFueXdheT8iCittc2dzdHIgIiIKKyJMJ29wdGlvbiAncmVhZG9ubHknIGVzdCBhY3RpdullIHBvdXIgJS4qcy5cbiIKKyJWb3VsZXotdm91cyBxdWFuZCBt6m1lIGVucmVnaXN0cmVyID8iCisKKyMgQUIgLSBDZWNpIGVzdCB1biB0aXRyZSBkZSBib+50ZSBkZSBkaWFsb2d1ZS4KKyM6IGV4X2NtZHMuYzoyNTc1Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICJPdXZyaXIgdW4gZmljaGllciAtIFZpbSIKKworIyBBQiAtIElsIGZhdXQgcmVzcGVjdGVyIGwnZXNwcml0IHBsdXMgcXVlIGxhIGxldHRyZS4KKyMgQUIgLSBKJ2jpc2l0ZSDgIGFqb3V0ZXIgIuAgc2EgY3LpYXRpb24iIGFwcuhzIGxlIG5vbSBkdSB0YW1wb24uIENlIG1lc3NhZ2UKKyMgICAgICBkZXZyYWl0IG4n6nRyZSBhZmZpY2jpIHF1J2FwcuhzIHVuZSB0ZW50YXRpdmUgZCdvdXZlcnR1cmUgZGUgZmljaGllciwKKyMgICAgICBsYSB2ZXJzaW9uIGFjdHVlbGxlIGRldnJhaXQgZG9uYyBzdWZmaXJlLgorIzogZXhfY21kcy5jOjMxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MzogQXV0b2NvbW1hbmRzIHVuZXhwZWN0ZWRseSBkZWxldGVkIG5ldyBidWZmZXIgJXMiCittc2dzdHIgIkUxNDM6IFVuZSBhdXRvY29tbWFuZGUgYSBlZmZhY+kgbGUgdGFtcG9uICVzIgorCisjOiBleF9jbWRzLmM6MzI3OQorbXNnaWQgIkUxNDQ6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIDp6IgorbXNnc3RyICJFMTQ0OiBMJ2FyZ3VtZW50IGRlIDp6IG4nZXN0IHBhcyBudW3pcmlxdWUiCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBmZXJhIHBldXQt6nRyZSBtaWV1eCBwYXNzZXIgbCdhbehyZSBwaWxsdWxlLgorIyAgICAgIExhIGNvbnN1bHRhdGlvbiBkZSBsJ2FpZGUgZG9ubmVyYSBsJ2V4cGxpY2F0aW9uIGNvbXBs6HRlIOAgY2V1eCBxdWkKKyMgICAgICBuZSBjb21wcmVuZHJhaWVudCBwYXMg4CBxdW9pIGNlIG1lc3NhZ2UgZXN0IGT7LgorIzogZXhfY21kcy5jOjMzNjQKK21zZ2lkICJFMTQ1OiBTaGVsbCBjb21tYW5kcyBub3QgYWxsb3dlZCBpbiBydmltIgorbXNnc3RyICJFMTQ1OiBMZXMgY29tbWFuZGVzIGV4dGVybmVzIHNvbnQgaW5kaXNwb25pYmxlcyIKKworIzogZXhfY21kcy5jOjM0NzEKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiBMZXMgZXhwcmVzc2lvbnMgculndWxp6HJlcyBuZSBwZXV2ZW50IOp0cmUgZOlsaW1pdOllcyBwYXIgZGVzIGxldHRyZXMiCisKKyM6IGV4X2NtZHMuYzozODE3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2Ugd2l0aCAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCittc2dzdHIgInJlbXBsYWNlciBwYXIgJXMgKHkvbi9hL3EvbC9eRS9eWSk/IgorCisjOiBleF9jbWRzLmM6NDE4OQorbXNnaWQgIihJbnRlcnJ1cHRlZCkgIgorbXNnc3RyICIoSW50ZXJyb21wdSkgIgorCisjOiBleF9jbWRzLmM6NDE5MworbXNnaWQgIjEgc3Vic3RpdHV0aW9uIgorbXNnc3RyICIxIHN1YnN0aXR1dGlvbiIKKworIzogZXhfY21kcy5jOjQxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIHN1YnN0aXR1dGlvbnMiCittc2dzdHIgIiVsZCBzdWJzdGl0dXRpb25zIgorCisjOiBleF9jbWRzLmM6NDE5OAorbXNnaWQgIiBvbiAxIGxpbmUiCittc2dzdHIgIiBzdXIgMSBsaWduZSIKKworIzogZXhfY21kcy5jOjQyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uICVsZCBsaW5lcyIKK21zZ3N0ciAiIHN1ciAlbGQgbGlnbmVzIgorCisjIEFCIC0gSWwgZmF1dCByZXNwZWN0ZXIgbCdlc3ByaXQgcGx1cyBxdWUgbGEgbGV0dHJlLgorIyBBQiAtIENlIG1lc3NhZ2UgZGV2cmFpdCBjb250ZW5pciB1bmUgculm6XJlbmNlIOAgOnZnbG9iYWwuCisjOiBleF9jbWRzLmM6NDI1MQorbXNnaWQgIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE0NzogOmdsb2JhbCBuZSBwZXV0IGV46WN1dGVyIDpnbG9iYWwiCisKKyMgQUIgLSBDZSBtZXNzYWdlIGRldnJhaXQgY29udGVuaXIgdW5lIHLpZulyZW5jZSDgIDp2Z2xvYmFsLgorIzogZXhfY21kcy5jOjQyODYKK21zZ2lkICJFMTQ4OiBSZWd1bGFyIGV4cHJlc3Npb24gbWlzc2luZyBmcm9tIGdsb2JhbCIKK21zZ3N0ciAiRTE0ODogOmdsb2JhbCBkb2l0IOp0cmUgc3VpdmkgcGFyIHVuZSBleHByZXNzaW9uIHLpZ3VsaehyZSIKKworIyBBQiAtIENlIG1lc3NhZ2UgZXN0IHV0aWxpc+kgbG9yc3F1ZSA6dmdsb2JhbCBuZSB0cm91dmUgcmllbi4gTG9yc3F1ZSA6Z2xvYmFsCisjICAgICAgbmUgdHJvdXZlIHJpZW4sIGMnZXN0ICJQYXR0ZXJuIG5vdCBmb3VuZDogJXMiIC8gIk1vdGlmIGludHJvdXZhYmxlOiAlcyIKKyMgICAgICBxdWkgZXN0IHV0aWxpc+kuCisjOiBleF9jbWRzLmM6NDMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIGZvdW5kIGluIGV2ZXJ5IGxpbmU6ICVzIgorbXNnc3RyICJNb3RpZiB0cm91dukg4CBjaGFxdWUgbGlnbmU6ICVzIgorCisjIEFCIC0gTmUgcGFzIHRyYWR1aXJlIGxlIGRvbGxhci4KKyMgQUIgLSBDZSBtZXNzYWdlIG4nZXN0IHZvbG9udGFpcmVtZW50IHBhcyB0cmFkdWl0LiBFbiBlZmZldCwgaWwgZmFpdCBwYXJ0aWUKKyMgICAgICBkJ3VuIGdyb3VwZSBkZSB0cm9pcyBtZXNzYWdlcyBkYW5zIHZpbWluZm8sIGRvbnQgZGV1eCBuZSBzb250IHBhcyBzb3VtaXMKKyMgICAgICDgIGludGVybmF0aW9uYWxpc2F0aW9uLiBKJ2F0dGVuZHMgcXVlIGxlcyBkZXV4IGF1dHJlcyBtZXNzYWdlcyBzb2llbnQKKyMgICAgICB0cmFkdWlzaWJsZXMgcG91ciB0cmFkdWlyZSBjZWx1aS1jaS4KKyM6IGV4X2NtZHMuYzo0NDE2Cittc2dpZCAiIgorIlxuIgorIiMgTGFzdCBTdWJzdGl0dXRlIFN0cmluZzpcbiIKKyIkIgorbXNnc3RyICIiCisiXG4iCisiIyBMYXN0IFN1YnN0aXR1dGUgU3RyaW5nOlxuIgorIiQiCisKKyM6IGV4X2NtZHMuYzo0NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTogROlzb2zpLCBwYXMgZCdhaWRlIHBvdXIgJXMiCisKKyM6IGV4X2NtZHMuYzo0NTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAiROlzb2zpLCBsZSBmaWNoaWVyIGQnYWlkZSAlcyBlc3QgaW50cm91dmFibGUiCisKKyM6IGV4X2NtZHMuYzo1MDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTA6IE5vdCBhIGRpcmVjdG9yeTogJXMiCittc2dzdHIgIkUxNTA6ICVzIG4nZXN0IHBhcyB1biBy6XBlcnRvaXJlIgorCisjIEFCIC0gTGEgdmVyc2lvbiBhbmdsYWlzZSBlc3QgcGx1cyBwculjaXNlLCBtYWlzIHRyb3AgdGVjaG5pcXVlLgorIzogZXhfY21kcy5jOjUwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MjogQ2Fubm90IG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNTI6IEltcG9zc2libGUgZCfpY3JpcmUgJXMiCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGFuZ2xhaXNlIGVzdCBwbHVzIHBy6WNpc2UsIG1haXMgdHJvcCB0ZWNobmlxdWUuCisjOiBleF9jbWRzLmM6NTEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE1MzogSW1wb3NzaWJsZSBkZSBsaXJlICVzIgorCisjIEFCIC0gTCfpdGlxdWV0dGUgbGEgcGx1cyBsb25ndWUgZmFpdCAyNyBjYXJhY3TocmVzLiBMZSBub20gZGUgZmljaGllciBsZSBwbHVzCisjICAgICAgbG9uZyBmYWl0IDEyIGNhcmFjdOhyZXMuIElsIGZhdWRyYWl0IGRvbmMgaWTpYWxlbWVudCBmYWlyZSB1bmUKKyMgICAgICB0cmFkdWN0aW9uIGRlIDQwIGNhcmFjdOhyZXMgb3UgbW9pbnMuIENlIHF1aSBlc3QgbG9pbiBkJ+p0cmUgbGUgY2FzCisjICAgICAgcHLpc2VudC4KKyM6IGV4X2NtZHMuYzo1MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTQ6IER1cGxpY2F0ZSB0YWcgXCIlc1wiIGluIGZpbGUgJXMiCittc2dzdHIgIkUxNTQ6IEwn6XRpcXVldHRlIFwiJXNcIiBhcHBhcmHudCBkZXV4IGZvaXMgZGFucyBsZSBmaWNoaWVyICVzIgorCisjIEFCIC0gSWwgZmF1dCByZXNwZWN0ZXIgbCdlc3ByaXQgcGx1cyBxdWUgbGEgbGV0dHJlLgorIzogZXhfY21kcy5jOjUyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiBDb21tYW5kZSBpbmNvbm51ZTogOnNpZ24gJXMiCisKKyMgQUIgLSBMYSB2ZXJzaW9uIGZyYW7nYWlzZSBlc3QgbWVpbGxldXJlIHF1ZSBsYSB2ZXJzaW9uIGFuZ2xhaXNlLgorIzogZXhfY21kcy5jOjUzMDgKK21zZ2lkICJFMTU2OiBNaXNzaW5nIHNpZ24gbmFtZSIKK21zZ3N0ciAiRTE1NjogSWwgbWFucXVlIGxlIG5vbSBkdSBzeW1ib2xlIgorCisjOiBleF9jbWRzLmM6NTM1NAorbXNnaWQgIkU2MTI6IFRvbyBtYW55IHNpZ25zIGRlZmluZWQiCittc2dzdHIgIkU2MTI6IFRyb3AgZGUgc3ltYm9sZXMgc29udCBk6WZpbmlzIgorCisjIEFCIC0gQ2V0dGUgdHJhZHVjdGlvbiBuZSBtZSBzYXRpc2ZhaXQgcGFzLgorIzogZXhfY21kcy5jOjU0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzOTogSW52YWxpZCBzaWduIHRleHQ6ICVzIgorbXNnc3RyICJFMjM5OiBMYSB2ZXJzaW9uIHRleHRlIGR1IHN5bWJvbGUgZXN0IGludmFsaWRlOiAlcyIKKworIzogZXhfY21kcy5jOjU0NTIgZXhfY21kcy5jOjU2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NTogVW5rbm93biBzaWduOiAlcyIKK21zZ3N0ciAiRTE1NTogU3ltYm9sZSBpbmNvbm51OiAlcyIKKworIyBBQiAtIExhIHZlcnNpb24gZnJhbudhaXNlIGVzdCBtZWlsbGV1cmUgcXVlIGxhIHZlcnNpb24gYW5nbGFpc2UuCisjOiBleF9jbWRzLmM6NTQ5OAorbXNnaWQgIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiCittc2dzdHIgIkUxNTk6IElsIG1hbnF1ZSBsJ0lEIGR1IHN5bWJvbGUiCisKKyMgQUIgLSBWdSBsZSBjb2RlIHNvdXJjZSwgbGEgdmVyc2lvbiBmcmFu52Fpc2UgZXN0IG1laWxsZXVyZSBxdWUgbGEKKyMgICAgICB2ZXJzaW9uIGFuZ2xhaXNlLiBDZSBtZXNzYWdlIGVzdCBzaW1pbGFpcmUgYXUgbWVzc2FnZSBFMTAyLgorIzogZXhfY21kcy5jOjU1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1ODogSW52YWxpZCBidWZmZXIgbmFtZTogJXMiCittc2dzdHIgIkUxNTg6IExlIHRhbXBvbiAlcyBlc3QgaW50cm91dmFibGUiCisKKyMgQUIgLSBWdSBsZSBjb2RlIHNvdXJjZSwgbGEgdmVyc2lvbiBmcmFu52Fpc2UgZXN0IG1laWxsZXVyZSBxdWUgbGEKKyMgICAgICB2ZXJzaW9uIGFuZ2xhaXNlLgorIzogZXhfY21kcy5jOjU2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NzogSW52YWxpZCBzaWduIElEOiAlbGQiCittc2dzdHIgIkUxNTc6IExlIHN5bWJvbGUgJWxkIGVzdCBpbnRyb3V2YWJsZSIKKworIzogZXhfY21kcy5jOjU3ODgKK21zZ2lkICJbRGVsZXRlZF0iCittc2dzdHIgIltFZmZhY+ldIgorCisjIEFCIC0gTGEgdmVyc2lvbiBmcmFu52Fpc2UgZGUgbGEgcHJlbWnocmUgcGhyYXNlIG5lIG1lIHNhdGlzZmFpdCBwYXMuCisjOiBleF9jbWRzMi5jOjgzCittc2dpZCAiRW50ZXJpbmcgRGVidWcgbW9kZS4gIFR5cGUgXCJjb250XCIgdG8gY29udGludWUuIgorbXNnc3RyICJE6WJ1dCBkdSBk6WJvZ3VhZ2UuIFRhcGV6IFwiY29udFwiIHBvdXIgY29udGludWVyLiIKKworIzogZXhfY21kczIuYzo4NyBleF9kb2NtZC5jOjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogJXMiCittc2dzdHIgImxpZ25lICVsZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY21kOiAlcyIKK21zZ3N0ciAiY21kZTogJXMiCisKKyM6IGV4X2NtZHMyLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyZWFrcG9pbnQgaW4gXCIlcyVzXCIgbGluZSAlbGQiCittc2dzdHIgIlBvaW50IGQnaW50ZXJydXB0aW9uIGRhbnMgJXMlcyBsaWduZSAlbGQiCisKKyM6IGV4X2NtZHMyLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjE6IEJyZWFrcG9pbnQgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTE2MTogTGUgcG9pbnQgZCdpbnRlcnJ1cHRpb24gJXMgZXN0IGludHJvdXZhYmxlIgorCisjOiBleF9jbWRzMi5jOjU1NworbXNnaWQgIk5vIGJyZWFrcG9pbnRzIGRlZmluZWQiCittc2dzdHIgIkF1Y3VuIHBvaW50IGQnaW50ZXJydXB0aW9uIG4nZXN0IGTpZmluaSIKKworIyBBQiAtIExlIGRldXhp6G1lICVzIGVzdCByZW1wbGFj6SBwYXIgImZ1bmMiIG91ICJmaWxlIiBzYW5zIHF1ZSBsJ29uIHB1aXNzZQorIyAgICAgIHRyYWR1aXJlIGNlcyBtb3RzLgorIzogZXhfY21kczIuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgIGxpZ25lICVsZCIKKworIyBBQiAtICJjaGFuZ2VzIHRvIiBlc3QgcmVkb25kYW50IGV0IGEg6XTpIG9taXMgZGUgbGEgdmVyc2lvbiBmcmFu52Fpc2UuCisjOiBleF9jbWRzMi5jOjc3NworIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlIGNoYW5nZXMgdG8gXCIlLipzXCI/IgorbXNnc3RyICJFbnJlZ2lzdHJlciAlLipzID8iCisKKyMgQUIgLSBTaSBsZXMgcGFyZW50aOhzZXMgcG9zZW50IHByb2Js6G1lLCBpbCBmYXVkcmEgcmVtZXR0cmUgbGVzIGd1aWxsZW1lbnRzCisjICAgICAgY2ktZGVzc3VzLgorIzogZXhfY21kczIuYzo3NzkgZXhfZG9jbWQuYzo4OTE3Cittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIihzYW5zIHRpdHJlKSIKKworIyBBQiAtIElsIGZhdXQgcmVzcGVjdGVyIGwnZXNwcml0IHBsdXMgcXVlIGxhIGxldHRyZS4KKyMgQUIgLSBDZSBtZXNzYWdlIGVzdCBzaW1pbGFpcmUgYXUgbWVzc2FnZSBFODkuCisjOiBleF9jbWRzMi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYyOiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTE2MjogTGUgdGFtcG9uICVzIG4nYSBwYXMg6XTpIGVucmVnaXN0cukiCisKKyMgIyMgSEVSRSAjIyMKKyM6IGV4X2NtZHMyLmM6OTg0Cittc2dpZCAiV2FybmluZzogRW50ZXJlZCBvdGhlciBidWZmZXIgdW5leHBlY3RlZGx5IChjaGVjayBhdXRvY29tbWFuZHMpIgorbXNnc3RyICJBbGVydGU6IEVudHLpZSBpbmF0dGVuZHVlIGRhbnMgdW4gYXV0cmUgdGFtcG9uICh26XJpZmllciBhdXRvY21kZXMpIgorCisjOiBleF9jbWRzMi5jOjEzODcKK21zZ2lkICJFMTYzOiBUaGVyZSBpcyBvbmx5IG9uZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNjM6IElsIG4neSBhIHF1J3VuIHNldWwgZmljaGllciDgIOlkaXRlciIKKworIzogZXhfY21kczIuYzoxMzg5Cittc2dpZCAiRTE2NDogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBmaWxlIgorbXNnc3RyICJFMTY0OiBOZSBwZXV0IGFsbGVyIGF2YW50IGxlIHByZW1pZXIgZmljaGllciIKKworIzogZXhfY21kczIuYzoxMzkxCittc2dpZCAiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiCittc2dzdHIgIkUxNjU6IE5lIHBldXQgYWxsZXIgYXUgZGVs4CBkdSBkZXJuaWVyIGZpY2hpZXIiCisKKyM6IGV4X2NtZHMyLmM6MTg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiCittc2dzdHIgIlJlY2hlcmNoZSBkZSBcIiVzXCIgZGFucyBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg2MworIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiIKK21zZ3N0ciAiUmVjaGVyY2hlIGRlIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgImludHJvdXZhYmxlIGRhbnMgJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE5MTgKK21zZ2lkICJTb3VyY2UgVmltIHNjcmlwdCIKK21zZ3N0ciAiU291cmNlciB1biBzY3JpcHQgLSBWaW0iCisKKyM6IGV4X2NtZHMyLmM6MjA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc291cmNlIGEgZGlyZWN0b3J5OiBcIiVzXCIiCittc2dzdHIgIk5lIHBldXQgc291cmNlciB1biBy6XBlcnRvaXJlOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAicGFzIHB1IHNvdXJjZXIgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IGNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICJsaWduZSAlbGQ6IHBhcyBwdSBzb3VyY2VyIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAic291cudhZ2UgXCIlc1wiIgorCisjIFRPRE8KKyM6IGV4X2NtZHMyLmM6MjExNworIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogc291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJsaWduZSAlbGQ6IHNvdXLnYWdlIGRlIFwiJXNcIiIKKworIyB0b2RvCisjOiBleF9jbWRzMi5jOjIyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc291cmNpbmcgJXMiCittc2dzdHIgImZpbiBkdSBzb3Vy52FnZSBkZSAlcyIKKworIzogZXhfY21kczIuYzoyNTgwCittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIlcxNTogV2FybmluZzogTWF1dmFpcyBz6XBhcmF0ZXVyIGRlIGxpZ25lLCBeTSBtYW5xdWUgcGV1dC3qdHJlIgorCisjOiBleF9jbWRzMi5jOjI2MjkKK21zZ2lkICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXRpbGlz6SBlbiBkZWhvcnMgZCd1biBmaWNoaWVyIHNvdXJj6SIKKworIyB0b2RvCisjOiBleF9jbWRzMi5jOjI2NjIKK21zZ2lkICJFMTY4OiA6ZmluaXNoIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2ODogOmZpbmlzaCB1dGlsaXPpIGVuIGRlaG9ycyBkJ3VuIGZpY2hpZXIgc291cmPpIgorCisjOiBleF9jbWRzMi5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFnZSAlZCIKK21zZ3N0ciAiUGFnZSAlZCIKKworIzogZXhfY21kczIuYzozMjYxCittc2dpZCAiTm8gdGV4dCB0byBiZSBwcmludGVkIgorbXNnc3RyICJQYXMgZGUgdGV4dGUg4CBpbXByaW1lciIKKworIzogZXhfY21kczIuYzozMzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nIHBhZ2UgJWQgKCVkJSUpIgorbXNnc3RyICJJbXByZXNzaW9uIGRlIGxhIHBhZ2UgJWQgKCVkJSUpIgorCisjOiBleF9jbWRzMi5jOjMzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIENvcHkgJWQgb2YgJWQiCittc2dzdHIgIiBDb3BpZSAlZCBkZSAlZCIKKworIzogZXhfY21kczIuYzozNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50ZWQ6ICVzIgorbXNnc3RyICJJbXByaW3pOiAlcyIKKworIzogZXhfY21kczIuYzozNDEzCittc2dpZCAiUHJpbnRpbmcgYWJvcnRlZCIKK21zZ3N0ciAiSW1wcmVzc2lvbiBpbnRlcnJvbXB1ZSIKKworIzogZXhfY21kczIuYzozNzc4Cittc2dpZCAiRTQ1NTogRXJyb3Igd3JpdGluZyB0byBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFNDU1OiBFcnJldXIgbG9ycyBkZSBsJ+ljcml0dXJlIGR1IGZpY2hpZXIgUG9zdFNjcmlwdCBkZSBzb3J0aWUiCisKKyM6IGV4X2NtZHMyLmM6NDA1MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjI0OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNjI0OiBQZXV0IHBhcyBvdXZyaXIgbGUgZmljaGllciBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDA2MyBleF9jbWRzMi5jOjQ2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NzogQ2FuJ3QgcmVhZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU3OiBQZXV0IHBhcyBsaXJlIGxlIGZpY2hpZXIgZGUgcmVzc291cmNlIFBvc3RTY3JpcHQgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxODogZmlsZSBcIiVzXCIgaXMgbm90IGEgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE4OiBcIiVzXCIgbidlc3QgcGFzIHVuIGZpY2hpZXIgZGUgcmVzc291cmNlIFBvc3RTY3JpcHQiCisKKyM6IGV4X2NtZHMyLmM6NDA4NiBleF9jbWRzMi5jOjQxMDYgZXhfY21kczIuYzo0MTIxIGV4X2NtZHMyLmM6NDE0MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjE5OiBmaWxlIFwiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE5OiBcIiVzXCIgbidlc3QgcGFzIHVuIGZpY2hpZXIgZGUgcmVzc291cmNlIFBvc3RTY3JpcHQgc3VwcG9ydOkiCisKKyM6IGV4X2NtZHMyLmM6NDE3MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjIxOiBcIiVzXCIgcmVzb3VyY2UgZmlsZSBoYXMgd3JvbmcgdmVyc2lvbiIKK21zZ3N0ciAiRTYyMTogTGEgdmVyc2lvbiBkdSBmaWNoaWVyIGRlIHJlc3NvdXJjZSBcIiVzXCIgZXN0IG1hdXZhaXNlIgorCisjOiBleF9jbWRzMi5jOjQ2NDAKK21zZ2lkICJFMzI0OiBDYW4ndCBvcGVuIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkUzMjQ6IFBldXQgcGFzIG91dnJpciBsZSBmaWNoaWVyIFBvc3RTY3JpcHQgZGUgc29ydGllIgorCisjOiBleF9jbWRzMi5jOjQ2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogUGV1dCBwYXMgb3V2cmlyIGxlIGZpY2hpZXIgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ3OTIKK21zZ2lkICJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcInByb2xvZy5wc1wiIgorbXNnc3RyICJFNDU2OiBMZSBmaWNoaWVyIGRlIHJlc3NvdXJjZSBQb3N0U2NyaXB0IFwicHJvbG9nLnBzXCIgZXN0IGludHJvdXZhYmxlIgorCisjOiBleF9jbWRzMi5jOjQ4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3QgZmluZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlcy5wc1wiIgorbXNnc3RyICJFNDU2OiBMZSBmaWNoaWVyIGRlIHJlc3NvdXJjZSBQb3N0U2NyaXB0IFwiJXMucHNcIiBlc3QgaW50cm91dmFibGUiCisKKyMgVE9ETworIzogZXhfY21kczIuYzo0ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjA6IFVuYWJsZSB0byBjb252ZXJ0IGZyb20gbXVsdGktYnl0ZSB0byBcIiVzXCIgZW5jb2RpbmciCittc2dzdHIgIkU2MjA6IExhIGNvbnZlcnNpb24gZHUgbXVsdGktb2N0ZXQg4CBsJ2VuY29kYWdlIFwiJXNcIiBhIOljaG916SIKKworIzogZXhfY21kczIuYzo0OTY2Cittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICJFbnZvaSDgIGwnaW1wcmltYW50ZS4uLiIKKworIzogZXhfY21kczIuYzo0OTcwCittc2dpZCAiRTM2NTogRmFpbGVkIHRvIHByaW50IFBvc3RTY3JpcHQgZmlsZSIKK21zZ3N0ciAiRTM2NTogTCdpbXByZXNzaW9uIGR1IGZpY2hpZXIgUG9zdFNjcmlwdCBhIOljaG916SIKKworIzogZXhfY21kczIuYzo0OTcyCittc2dpZCAiUHJpbnQgam9iIHNlbnQuIgorbXNnc3RyICJKb2IgZCdpbXByZXNzaW9uIGVudm956S4iCisKKyM6IGV4X2NtZHMyLmM6NTM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50ICVzbGFuZ3VhZ2U6IFwiJXNcIiIKK21zZ3N0ciAiTGFuZ2FnZSAlc2NvdXJhbnQ6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzo1MzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTc6IENhbm5vdCBzZXQgbGFuZ3VhZ2UgdG8gXCIlc1wiIgorbXNnc3RyICJFMTk3OiBQYXMgcHUgculnbGVyIGxlIGxhbmdhZ2Ugc3VyIFwiJXNcIiIKKworIzogZXhfZG9jbWQuYzo0ODkKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAiROltYXJyYWdlIGR1IG1vZGUgRXguICBUYXBleiBcInZpc3VhbFwiIHBvdXIgYWxsZXIgZW4gbW9kZSBOb3JtYWwuIgorCisjLiBtdXN0IGJlIGF0IEVPRgorIzogZXhfZG9jbWQuYzo1MjUKK21zZ2lkICJFNTAxOiBBdCBlbmQtb2YtZmlsZSIKK21zZ3N0ciAiRTUwMTogwCBsYSBmaW4gZHUgZmljaGllciIKKworIzogZXhfZG9jbWQuYzo2MjcKK21zZ2lkICJFMTY5OiBDb21tYW5kIHRvbyByZWN1cnNpdmUiCittc2dzdHIgIkUxNjk6IENvbW1hbmRlIHRyb3AgculjdXJzaXZlIgorCisjIFRPRE8KKyM6IGV4X2RvY21kLmM6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA1OiBFeGNlcHRpb24gbm90IGNhdWdodDogJXMiCittc2dzdHIgIkU2MDU6IEV4Y2VwdGlvbiBwYXMgYXR0cmFw6WU6ICVzIgorCisjIHRvZG8KKyM6IGV4X2RvY21kLmM6MTE4MAorbXNnaWQgIkVuZCBvZiBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkZpbiBkdSBmaWNoaWVyIHNvdXJj6SIKKworIzogZXhfZG9jbWQuYzoxMTgxCittc2dpZCAiRW5kIG9mIGZ1bmN0aW9uIgorbXNnc3RyICJGaW4gZGUgbGEgZm9uY3Rpb24iCisKKyM6IGV4X2RvY21kLmM6MTYzMworbXNnaWQgIkU0NjQ6IEFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgIkU0NjQ6IFV0aWxpc2F0aW9uIGFtYmln/GUgZCd1bmUgY29tbWFuZGUgZOlmaW5pZSBwYXIgbCd1dGlsaXNhdGV1ciIKKworIzogZXhfZG9jbWQuYzoxNjQ3Cittc2dpZCAiRTQ5MjogTm90IGFuIGVkaXRvciBjb21tYW5kIgorbXNnc3RyICJFNDkyOiBQYXMgdW5lIGNvbW1hbmRlIGRlIGwn6WRpdGV1ciIKKworIyBUT0RPIFRoaXMgbWVzc2FnZSBzaG91bGQgKnNvKiBiZSBFNDIhCisjOiBleF9kb2NtZC5jOjE3MzcKK21zZ2lkICJFNDc4OiBEb24ndCBwYW5pYyEiCittc2dzdHIgIkU0Nzg6IE5lIHBhbmlxdWV6IHBhcyAhIgorCisjOiBleF9kb2NtZC5jOjE3NTYKK21zZ2lkICJFNDkzOiBCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4iCittc2dzdHIgIkU0OTM6IENoYW1wIGQnYWN0aW9uIGludmVyc+kgcmXndSIKKworIyB0b2RvCisjOiBleF9kb2NtZC5jOjE3NjUKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4sIE9LIHRvIHN3YXAiCittc2dzdHIgIkNoYW1wIGQnYWN0aW9uIGludmVyc+kgcmXndSwgT0sgcG91ciBpbnZlcnNlciIKKworIzogZXhfZG9jbWQuYzoxODc2Cittc2dpZCAiRTQ5NDogVXNlIHcgb3Igdz4+IgorbXNnc3RyICJFNDk0OiBVdGlsaXNleiB3IG91IHc+PiIKKworIzogZXhfZG9jbWQuYzozNDYzCittc2dpZCAiRTMxOTogU29ycnksIHRoZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMzE5OiBE6XNvbOksIGNldHRlIGNvbW1hbmRlIG4nZXN0IHBhcyBkaXNwb25pYmxlIGRhbnMgY2V0dGUgdmVyc2lvbiIKKworIzogZXhfZG9jbWQuYzozNjQ5Cittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6IFVuIHNldWwgbm9tIGRlIGZpY2hpZXIgYXV0b3Jpc+kiCisKKyM6IGV4X2RvY21kLmM6NDIxMQorbXNnaWQgIjEgbW9yZSBmaWxlIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIkVuY29yZSB1biBmaWNoaWVyIOAg6WRpdGVyLiAgUXVpdHRlciBxdWFuZCBt6m1lID8iCisKKyM6IGV4X2RvY21kLmM6NDIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBtb3JlIGZpbGVzIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIkVuY29yZSAlZCBmaWNoaWVycyDgIOlkaXRlci4gIFF1aXR0ZXIgcXVhbmQgbeptZSA/IgorCisjOiBleF9kb2NtZC5jOjQyMjEKK21zZ2lkICJFMTczOiAxIG1vcmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTczOiBlbmNvcmUgdW4gZmljaGllciDgIOlkaXRlciIKKworIzogZXhfZG9jbWQuYzo0MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzM6ICVsZCBtb3JlIGZpbGVzIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6IGVuY29yZSAlbGQgZmljaGllcnMg4CDpZGl0ZXIiCisKKyM6IGV4X2RvY21kLmM6NDMxOAorbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxNzQ6IExhIGNvbW1hbmRlIGV4aXN0ZSBk6WrgOiBham91dGV6ICEgcG91ciBsYSByZWTpZmluaXIiCisKKyMgVE9ETworIzogZXhfZG9jbWQuYzo0NDI4Cittc2dpZCAiIgorIlxuIgorIiAgICBOYW1lICAgICAgICBBcmdzIFJhbmdlIENvbXBsZXRlICBEZWZpbml0aW9uIgorbXNnc3RyICIiCisiXG4iCisiICAgIE5vbSAgICAgICAgIEFyZ3MgQ2hhbXAgQ29tcGzpdC4gIETpZmluaXRpb24iCisKKyM6IGV4X2RvY21kLmM6NDUxNworbXNnaWQgIk5vIHVzZXItZGVmaW5lZCBjb21tYW5kcyBmb3VuZCIKK21zZ3N0ciAiQXVjdW5lIGNvbW1hbmRlIGTpZmluaWUgcGFyIGwndXRpbGlzYXRldXIgdHJvdXbpZSIKKworIzogZXhfZG9jbWQuYzo0NTQ5Cittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTogUGFzIGQnYXR0cmlidXQgc3DpY2lmaekiCisKKyM6IGV4X2RvY21kLmM6NDYwMQorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3NjogTm9tYnJlIGQnYXJndW1lbnRzIGludmFsaWRlIgorCisjOiBleF9kb2NtZC5jOjQ2MTYKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiBMYSBxdWFudGl06SBuZSBwZXV0IOp0cmUgaW5kaXF16WUgZGV1eCBmb2lzIgorCisjOiBleF9kb2NtZC5jOjQ2MjYKK21zZ2lkICJFMTc4OiBJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIGNvdW50IgorbXNnc3RyICJFMTc4OiBMYSB2YWxldXIgcGFyIGTpZmF1dCBkZSBsYSBxdWFudGl06SBlc3QgaW52YWxpZGUiCisKKyMgVE9ETworIzogZXhfZG9jbWQuYzo0NjU3Cittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiBhcmd1bWVudCByZXF1aXMgcG91ciBjb21wbGV0ZSIKKworIzogZXhfZG9jbWQuYzo0Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiBWYWxldXIgY29tcGzodGUgaW52YWxpZGU6ICVzIgorCisjOiBleF9kb2NtZC5jOjQ2OTQKK21zZ2lkICJFNDY3OiBDdXN0b20gY29tcGxldGlvbiByZXF1aXJlcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IgorbXNnc3RyICJFNDY3OiBMYSBjb21wbOl0aW9uIHBlcnNvbm5hbGlz6WUgcmVxdWllcnQgdW5lIGZvbmN0aW9uIGVuIGFyZ3VtZW50IgorCisjOiBleF9kb2NtZC5jOjQ2OTkKK21zZ2lkICJFNDY4OiBDb21wbGV0aW9uIGFyZ3VtZW50IG9ubHkgYWxsb3dlZCBmb3IgY3VzdG9tIGNvbXBsZXRpb24iCittc2dzdHIgIkU0Njg6IFNldWxlIGxhIGNvbXBs6XRpb24gcGVyc29ubmFsaXPpZSBwcmVuZCB1biBhcmd1bWVudCIKKworIzogZXhfZG9jbWQuYzo0NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MTogQXR0cmlidXQgaW52YWxpZGU6ICVzIgorCisjOiBleF9kb2NtZC5jOjQ3NTIKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4MjogTm9tIGRlIGNvbW1hbmRlIGludmFsaWRlIgorCisjIFRPRE8KKyM6IGV4X2RvY21kLmM6NDc2NworbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4MzogQ29tbWFuZGVzIGTpZmluaWVzIHBhciB1dGlsaXNhdGV1ciBkb2l2ZW50IGNvbW1lbmNlciBwYXIgbWFqdXNjdWxlIgorCisjOiBleF9kb2NtZC5jOjQ4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NDogTm8gc3VjaCB1c2VyLWRlZmluZWQgY29tbWFuZDogJXMiCittc2dzdHIgIkUxODQ6IFBhcyBkZSB0ZWxsZSBjb21tYW5kZSBk6WZpbmllIHBhciBsJ3V0aWxpc2F0ZXVyOiAlcyIKKworIzogZXhfZG9jbWQuYzo1Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTogTmUgcGV1dCB0cm91dmVyIGxlIHN0eWxlIGRlIGNvdWxldXJzICVzIgorCisjOiBleF9kb2NtZC5jOjUzMDIKK21zZ2lkICJHcmVldGluZ3MsIFZpbSB1c2VyISIKK21zZ3N0ciAiQmllbnZlbnVlLCB1dGlsaXNhdGV1ciBkZSBWaW0gISIKKworIzogZXhfZG9jbWQuYzo2MDEzCittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgIk91dnJpciB1biBmaWNoaWVyIGRhbnMgdW5lIG5vdXZlbGxlIGZlbup0cmUgLSBWaW0iCisKKyM6IGV4X2RvY21kLmM6NjMwMAorbXNnaWQgIk5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiUGFzIGRlIGZpY2hpZXIgZCfpY2hhbmdlIgorCisjOiBleF9kb2NtZC5jOjY0MDQKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAiQWpvdXRlciBmaWNoaWVyIgorCisjOiBleF9kb2NtZC5jOjY0NjgKK21zZ2lkICJFMTg2OiBObyBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkUxODY6IFBhcyBkZSBy6XBlcnRvaXJlIHBy6WPpZGVudCIKKworIzogZXhfZG9jbWQuYzo2NTUwCittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4NzogSW5jb25udSIKKworIzogZXhfZG9jbWQuYzo2NjM1Cittc2dpZCAiRTQ2NTogOndpbnNpemUgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiCittc2dzdHIgIkU0NjU6IDp3aW5zaXplIHJlcXVpZXJ0IGRldXggYXJndW1lbnRzIG51belyaXF1ZXMiCisKKyM6IGV4X2RvY21kLmM6NjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIlBvc2l0aW9uIGRlIGxhIGZlbup0cmU6IFggJWQsIFkgJWQiCisKKyMgVE9ETworIzogZXhfZG9jbWQuYzo2NjkxCittc2dpZCAiRTE4ODogT2J0YWluaW5nIHdpbmRvdyBwb3NpdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIkUxODg6IExhIHLpY3Vw6XJhdGlvbiBkZSBsYSBwb3NpdGlvbiBkZSBsYSBmZW7qdHJlIG4nZXN0IHBhcyBkaXNwby4gaWNpIgorCisjOiBleF9kb2NtZC5jOjY3MDEKK21zZ2lkICJFNDY2OiA6d2lucG9zIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY2OiA6d2lucG9zIHJlcXVpZXJ0IGRldXggYXJndW1lbnRzIG51belyaXF1ZXMiCisKKyMgdG9kbworIzogZXhfZG9jbWQuYzo2OTgwCittc2dpZCAiU2F2ZSBSZWRpcmVjdGlvbiIKK21zZ3N0ciAiRW5yZWdpc3RyZXIgbGEgcmVkaXJlY3Rpb24iCisKKyMgdG9kbworIzogZXhfZG9jbWQuYzo3MTMxCittc2dpZCAiU2F2ZSBWaWV3IgorbXNnc3RyICJFbnJlZ2lzdHJlciBsYSB2dWUgLSBWaW0iCisKKyM6IGV4X2RvY21kLmM6NzEzMgorbXNnaWQgIlNhdmUgU2Vzc2lvbiIKK21zZ3N0ciAiRW5yZWdpc3RyZXIgbGEgc2Vzc2lvbiAtIFZpbSIKKworIyBUT0RPCisjOiBleF9kb2NtZC5jOjcxMzQKK21zZ2lkICJTYXZlIFNldHVwIgorbXNnc3RyICJFbnJlZ2lzdHJlciBsZXMgculnbGFnZXMgLSBWaW0iCisKKyM6IGV4X2RvY21kLmM6NzI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg5OiBcIiVzXCIgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxODk6IFwiJXNcIiBleGlzdGUgKGFqb3V0ZXogISBwb3VyIHBhc3NlciBvdXRyZSkiCisKKyM6IGV4X2RvY21kLmM6NzI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxOTA6IE5lIHBldXQgb3V2cmlyIFwiJXNcIiBwb3VyIHkg6WNyaXJlIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo3MzE0Cittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICJFMTkxOiBMJ2FyZ3VtZW50IGRvaXQg6nRyZSB1bmUgbGV0dHJlIG91IHVuZSBhcG9zdHJvcGhlIGF2YW50L2FycmnocmUiCisKKyM6IGV4X2RvY21kLmM6NzM1NgorbXNnaWQgIkUxOTI6IFJlY3Vyc2l2ZSB1c2Ugb2YgOm5vcm1hbCB0b28gZGVlcCIKK21zZ3N0ciAiRTE5MjogQXBwZWwgculjdXJzaWYgZGUgOm5vcm1hbCB0cm9wIGltcG9ydGFudCIKKworIzogZXhfZG9jbWQuYzo3ODY5Cittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6IFBhcyBkZSBub20gZGUgZmljaGllciBhbHRlcm5hdGlmIOAgc3Vic3RpdHVlciDgICcjJyIKKworIyBUT0RPCisjOiBleF9kb2NtZC5jOjc5MDAKK21zZ2lkICJFNDk1OiBubyBhdXRvY29tbWFuZCBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWZpbGU+XCIiCittc2dzdHIgIkU0OTU6IHBhcyBkZSBub20gZGUgZmljaGVyIGQnYXV0b2NvbW1tYW5kZSDgIHN1YnN0aXR1ZXIg4CBcIjxhZmlsZT5cIiIKKworIyBUT0RPCisjOiBleF9kb2NtZC5jOjc5MDgKK21zZ2lkICJFNDk2OiBubyBhdXRvY29tbWFuZCBidWZmZXIgbnVtYmVyIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFidWY+XCIiCittc2dzdHIgIkU0OTY6IHBhcyBkZSBudW3pcm8gZGUgdGFtcG9uIGQnYXV0b2NvbW1hbmRlIOAgc3Vic3RpdHVlciDgIFwiPGFidWY+XCIiCisKKyMgVE9ETworIzogZXhfZG9jbWQuYzo3OTE5Cittc2dpZCAiRTQ5Nzogbm8gYXV0b2NvbW1hbmQgbWF0Y2ggbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhbWF0Y2g+XCIiCittc2dzdHIgIkU0OTc6IHBhcyBkZSBub20gZGUgY29ycmVzcC4gZCdhdXRvY29tbWFuZGUg4CBzdWJzdGl0dWVyIOAgXCI8YW1hdGNoPlwiIgorCisjOiBleF9kb2NtZC5jOjc5MjkKK21zZ2lkICJFNDk4OiBubyA6c291cmNlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxzZmlsZT5cIiIKK21zZ3N0ciAiRTQ5ODogcGFzIGRlIG5vbSBkZSBmaWNoaWVyIDpzb3VyY2Ug4CBzdWJzdGl0dWVyIOAgXCI8c2ZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6Nzk3MAorIywgbm8tYy1mb3JtYXQKK21zZ2lkICJFNDk5OiBFbXB0eSBmaWxlIG5hbWUgZm9yICclJyBvciAnIycsIG9ubHkgd29ya3Mgd2l0aCBcIjpwOmhcIiIKK21zZ3N0ciAiRTQ5OTogTm9tIGRlIGZpY2hpZXIgdmlkZSBwb3VyICclJyBvdSAnIycsIG5lIG1hcmNoZSBxdSdhdmVjIFwiOnA6aFwiIgorCisjOiBleF9kb2NtZC5jOjc5NzIKK21zZ2lkICJFNTAwOiBFdmFsdWF0ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJFNTAwOiBS6XN1bHRlIGVuIHVuZSBjaGHubmUgdmlkZSIKKworIzogZXhfZG9jbWQuYzo4ODk5Cittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiBOZSBwZXV0IG91dnJpciB2aW1pbmZvIHBvdXIgeSBsaXJlIgorCisjOiBleF9kb2NtZC5jOjkwNzIKK21zZ2lkICJFMTk2OiBObyBkaWdyYXBocyBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUxOTY6IFBhcyBkZSBkaWdyYXBoZXMgZGFucyBjZXR0ZSB2ZXJzaW9uIgorCisjOiBleF9ldmFsLmM6NDIzCittc2dpZCAiRTYwODogQ2Fubm90IDp0aHJvdyBleGNlcHRpb25zIHdpdGggJ1ZpbScgcHJlZml4IgorbXNnc3RyICJFNjA4OiBJbXBvc3NpYmxlIGRlIGxhbmNlciBkZXMgZXhjZXB0aW9ucyBhdmVjICdWaW0nIGNvbW1lIHBy6WZpeGUiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gdGhyb3duOiAlcyIKK21zZ3N0ciAiRXhjZXB0aW9uIGxhbmPpZTogJXMiCisKKyM6IGV4X2V2YWwuYzo1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGZpbmlzaGVkOiAlcyIKK21zZ3N0ciAiRXhjZXB0aW9uIHRlcm1pbullOiAlcyIKKworIzogZXhfZXZhbC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZGlzY2FyZGVkOiAlcyIKK21zZ3N0ciAiRXhjZXB0aW9uIGTpZmF1c3PpZTogJXMiCisKKyM6IGV4X2V2YWwuYzo2MDAgZXhfZXZhbC5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgbGluZSAlbGQiCittc2dzdHIgIiVzLCBsaWduZSAlbGQiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjYxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gY2F1Z2h0OiAlcyIKK21zZ3N0ciAiRXhjZXB0aW9uIGF0dHJhcOllOiAlcyIKKworIzogZXhfZXZhbC5jOjY5MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtYWRlIHBlbmRpbmciCittc2dzdHIgIiVzIGEg6XTpIG1pc2UgZW4gcGF1c2UiCisKKyM6IGV4X2V2YWwuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzdW1lZCIKK21zZ3N0ciAiJXMgYSDpdOkgcmVsYW5j6WUiCisKKyM6IGV4X2V2YWwuYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzY2FyZGVkIgorbXNnc3RyICIlcyBhIOl06SBk6WZhdXNz6WUiCisKKyM6IGV4X2V2YWwuYzo3MjYKK21zZ2lkICJFeGNlcHRpb24iCittc2dzdHIgIkV4Y2VwdGlvbiIKKworIzogZXhfZXZhbC5jOjczMgorbXNnaWQgIkVycm9yIGFuZCBpbnRlcnJ1cHQiCittc2dzdHIgIkVycmV1ciBldCBpbnRlcnJ1cHRpb24iCisKKyM6IGV4X2V2YWwuYzo3MzQgZ3VpLmM6NDI1MworbXNnaWQgIkVycm9yIgorbXNnc3RyICJFcnJldXIiCisKKyMuIGlmIChwZW5kaW5nICYgQ1NUUF9JTlRFUlJVUFQpCisjOiBleF9ldmFsLmM6NzM2Cittc2dpZCAiSW50ZXJydXB0IgorbXNnc3RyICJJbnRlcnJ1cHRpb246ICIKKworIzogZXhfZXZhbC5jOjgxMAorbXNnaWQgIkU1Nzk6IDppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTc5OiBJbWJyaWNhdGlvbiBkZSA6aWYgdHJvcCBpbXBvcnRhbnRlIgorCisjOiBleF9ldmFsLmM6ODQ3Cittc2dpZCAiRTU4MDogOmVuZGlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgwOiA6ZW5kaWYgc2FucyA6aWYiCisKKyM6IGV4X2V2YWwuYzo4OTEKK21zZ2lkICJFNTgxOiA6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MTogOmVsc2Ugc2FucyA6aWYiCisKKyM6IGV4X2V2YWwuYzo4OTQKK21zZ2lkICJFNTgyOiA6ZWxzZWlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgyOiA6ZWxzZWlmIHNhbnMgOmlmIgorCisjOiBleF9ldmFsLmM6OTAxCittc2dpZCAiRTU4MzogbXVsdGlwbGUgOmVsc2UiCittc2dzdHIgIkU1ODM6IElsIG5lIHBldXQgeSBhdm9pciBxdSd1biBzZXVsIDplbHNlIgorCisjOiBleF9ldmFsLmM6OTA0Cittc2dpZCAiRTU4NDogOmVsc2VpZiBhZnRlciA6ZWxzZSIKK21zZ3N0ciAiRTU4NDogOmVsc2VpZiBhcHLocyA6ZWxzZSIKKworIzogZXhfZXZhbC5jOjk3MQorbXNnaWQgIkU1ODU6IDp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTg1OiBJbWJyaWNhdGlvbiBkZSA6d2hpbGUgdHJvcCBpbXBvcnRhbnRlIgorCisjOiBleF9ldmFsLmM6MTAyNworbXNnaWQgIkU1ODY6IDpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4NjogOmNvbnRpbnVlIHNhbnMgOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTA2NworbXNnaWQgIkU1ODc6IDpicmVhayB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4NzogOmJyZWFrIHNhbnMgOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTI2NgorbXNnaWQgIkU2MDE6IDp0cnkgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTYwMTogSW1icmljYXRpb24gZGUgOnRyeSB0cm9wIGltcG9ydGFudGUiCisKKyM6IGV4X2V2YWwuYzoxMzQ2Cittc2dpZCAiRTYwMzogOmNhdGNoIHdpdGhvdXQgOnRyeSIKK21zZ3N0ciAiRTYwMzogOmNhdGNoIHNhbnMgOnRyeSIKKworIy4gR2l2ZSB1cCBmb3IgYSAiOmNhdGNoIiBhZnRlciAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjLiAqIEp1c3QgcGFyc2UuCisjOiBleF9ldmFsLmM6MTM2OAorbXNnaWQgIkU2MDQ6IDpjYXRjaCBhZnRlciA6ZmluYWxseSIKK21zZ3N0ciAiRTYwNDogOmNhdGNoIGFwcuhzIDpmaW5hbGx5IgorCisjOiBleF9ldmFsLmM6MTUwMQorbXNnaWQgIkU2MDY6IDpmaW5hbGx5IHdpdGhvdXQgOnRyeSIKK21zZ3N0ciAiRTYwNjogOmZpbmFsbHkgc2FucyA6dHJ5IgorCisjLiBHaXZlIHVwIGZvciBhIG11bHRpcGxlICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKyM6IGV4X2V2YWwuYzoxNTI1Cittc2dpZCAiRTYwNzogbXVsdGlwbGUgOmZpbmFsbHkiCittc2dzdHIgIkU2MDc6IElsIG5lIHBldXQgeSBhdm9pciBxdSd1biBzZXVsIDpmaW5hbGx5IgorCisjOiBleF9ldmFsLmM6MTYzNAorbXNnaWQgIkU2MDI6IDplbmR0cnkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAyOiA6ZW5kdHJ5IHNhbnMgOnRyeSIKKworIzogZXhfZXZhbC5jOjE5NjYKK21zZ2lkICJFMTkzOiA6ZW5kZnVuY3Rpb24gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTkzOiA6ZW5kZnVuY3Rpb24g4CBsJ2V4dOlyaWV1ciBkJ3VuZSBmb25jdGlvbiIKKworIyBUT0RPCisjOiBleF9nZXRsbi5jOjMxNDUKK21zZ2lkICJ0YWduYW1lIgorbXNnc3RyICJ0YWduYW1lIgorCisjIFRPRE8KKyM6IGV4X2dldGxuLmM6MzE0OAorbXNnaWQgIiBraW5kIGZpbGVcbiIKK21zZ3N0ciAiIGdlbnJlIGRlIGZpY2hpZXJcbiIKKworIzogZXhfZ2V0bG4uYzo0NDk5Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICJsJ29wdGlvbiAnaGlzdG9yeScgdmF1dCB66XJvIgorCisjOiBleF9nZXRsbi5jOjQ3MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgJXMgSGlzdG9yeSAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjICVzIEhpc3RvcmlxdWUgKGNocm9ub2xvZ2llIGTpY3JvaXNzYW50ZSk6XG4iCisKKyM6IGV4X2dldGxuLmM6NDc0MAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAiTGlnbmUgZGUgY29tbWFuZGUiCisKKyM6IGV4X2dldGxuLmM6NDc0MQorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgIkNoYe5uZSBkZSByZWNoZXJjaGUiCisKKyM6IGV4X2dldGxuLmM6NDc0MgorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgIkV4cHJlc3Npb24iCisKKyM6IGV4X2dldGxuLmM6NDc0MworbXNnaWQgIklucHV0IExpbmUiCittc2dzdHIgIkxpZ25lIGQnZW50cullIgorCisjOiBleF9nZXRsbi5jOjQ3NzMKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyIGF1IGRlbOAgZGUgbGEgbG9uZ3VldXIgZGUgbGEgY29tbWFuZGUiCisKKyM6IGV4X2dldGxuLmM6NDk1MAorbXNnaWQgIkUxOTk6IEFjdGl2ZSB3aW5kb3cgb3IgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIkUxOTk6IFRhbXBvbiBvdSBmZW7qdHJlIGFjdGl2ZSBlZmZhY+koZSkiCisKKyM6IGZpbGVpby5jOjM3MworbXNnaWQgIklsbGVnYWwgZmlsZSBuYW1lIgorbXNnc3RyICJOb20gZGUgZmljaGllciBpbGzpZ2FsIgorCisjOiBmaWxlaW8uYzozOTcgZmlsZWlvLmM6NTIyIGZpbGVpby5jOjI2ODYgZmlsZWlvLmM6MjcyNworbXNnaWQgImlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJlc3QgdW4gculwZXJ0b2lyZSIKKworIzogZmlsZWlvLmM6Mzk5Cittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAibidlc3QgcGFzIHVuIGZpY2hpZXIiCisKKyM6IGZpbGVpby5jOjU0NCBmaWxlaW8uYzozODM2Cittc2dpZCAiW05ldyBGaWxlXSIKK21zZ3N0ciAiW05vdXZlYXUgZmljaGllcl0iCisKKyM6IGZpbGVpby5jOjU2NgorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIltBdXRvcmlzYXRpb24gcmVmdXPpZV0iCisKKyM6IGZpbGVpby5jOjY3MAorbXNnaWQgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtYWRlIHRoZSBmaWxlIHVucmVhZGFibGUiCittc2dzdHIgIkUyMDA6IExlcyBhdXRvY29tbWFuZGVzICpSZWFkUHJlIG9udCByZW5kdSBsZSBmaWNoaWVyIGlsbGlzaWJsZSIKKworIyBUT0RPCisjOiBmaWxlaW8uYzo2NzIKK21zZ2lkICJFMjAxOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICIiCisiRTIwMTogQXV0b2NvbW1hbmRlcyAqUmVhZFByZSBuZSBkb2l2ZW50IHBhcyBjaGFuZ2VyIGxlIGNvbnRlbnUgZHUgdGFtcG9uICIKKyJjb3VyYW50IgorCisjOiBmaWxlaW8uYzo2OTMKK21zZ2lkICJWaW06IFJlYWRpbmcgZnJvbSBzdGRpbi4uLlxuIgorbXNnc3RyICJWaW06IExlY3R1cmUgZGUgc3RkaW4uLi5cbiIKKworIzogZmlsZWlvLmM6Njk5Cittc2dpZCAiUmVhZGluZyBmcm9tIHN0ZGluLi4uIgorbXNnc3RyICJMZWN0dXJlIGRlIHN0ZGluLi4uIgorCisjLiBSZS1vcGVuaW5nIHRoZSBvcmlnaW5hbCBmaWxlIGZhaWxlZCEKKyM6IGZpbGVpby5jOjk0NAorbXNnaWQgIkUyMDI6IENvbnZlcnNpb24gbWFkZSBmaWxlIHVucmVhZGFibGUhIgorbXNnc3RyICJFMjAyOiBMYSBjb252ZXJzaW9uIGEgcmVuZHUgbGUgZmljaGllciBpbGxpc2JsZSAhIgorCisjOiBmaWxlaW8uYzoxODkyCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2ZpZm8vc29ja2V0XSIKKworIzogZmlsZWlvLmM6MTg5OQorbXNnaWQgIltmaWZvXSIKK21zZ3N0ciAiW2ZpZm9dIgorCisjOiBmaWxlaW8uYzoxOTA2Cittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIltzb2NrZXRdIgorCisjIFRPRE8KKyM6IGZpbGVpby5jOjE5MTQKK21zZ2lkICJbUk9dIgorbXNnc3RyICJbUk9dIgorCisjOiBmaWxlaW8uYzoxOTI0Cittc2dpZCAiW0NSIG1pc3NpbmddIgorbXNnc3RyICJbQ1IgbWFucXVhbnRdIgorCisjOiBmaWxlaW8uYzoxOTI5Cittc2dpZCAiW05MIGZvdW5kXSIKK21zZ3N0ciAiW05MIHRyb3V26V0iCisKKyM6IGZpbGVpby5jOjE5MzQKK21zZ2lkICJbbG9uZyBsaW5lcyBzcGxpdF0iCittc2dzdHIgIltsb25ndWVzIGxpZ25lcyBkaXZpc+llc10iCisKKyM6IGZpbGVpby5jOjE5NDAgZmlsZWlvLmM6MzgyMAorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW1BBUyBjb252ZXJ0aV0iCisKKyM6IGZpbGVpby5jOjE5NDUgZmlsZWlvLmM6MzgyNQorbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJbY29udmVydGldIgorCisjOiBmaWxlaW8uYzoxOTUyIGZpbGVpby5jOjM4NTAKK21zZ2lkICJbY3J5cHRlZF0iCittc2dzdHIgIltjaGlmZnLpXSIKKworIzogZmlsZWlvLmM6MTk1OQorbXNnaWQgIltDT05WRVJTSU9OIEVSUk9SXSIKK21zZ3N0ciAiW0VSUkVVUiBERSBDT05WRVJTSU9OXSIKKworIzogZmlsZWlvLmM6MTk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJbSUxMRUdBTCBCWVRFIGluIGxpbmUgJWxkXSIKK21zZ3N0ciAiW09DVEVUIElMTMlHQUwg4CBsYSBsaWduZSAlbGRdIgorCisjOiBmaWxlaW8uYzoxOTcyCittc2dpZCAiW1JFQUQgRVJST1JTXSIKK21zZ3N0ciAiW0VSUkVVUlMgREUgTEVDVFVSRV0iCisKKyM6IGZpbGVpby5jOjIxODgKK21zZ2lkICJDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3IgY29udmVyc2lvbiIKK21zZ3N0ciAiUGV1dCBwYXMgdHJvdXZlciBkZSBmaWNoaWVyIHRlbXBvcmFpcmUgcG91ciBsYSBjb252ZXJzaW9uIgorCisjOiBmaWxlaW8uYzoyMTk1Cittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICJMYSBjb252ZXJzaW9uIGF2ZWMgJ2NoYXJjb252ZXJ0JyBhIOljaG916SIKKworIzogZmlsZWlvLmM6MjE5OAorbXNnaWQgImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciCittc2dzdHIgInBldXQgcGFzIGxpcmUgbGEgc29ydGllIGRlICdjaGFyY29udmVydCciCisKKyM6IGZpbGVpby5jOjI2MDEKK21zZ2lkICJFMjAzOiBBdXRvY29tbWFuZHMgZGVsZXRlZCBvciB1bmxvYWRlZCBidWZmZXIgdG8gYmUgd3JpdHRlbiIKK21zZ3N0ciAiRTIwMzogRGVzIGF1dG9jb21tYW5kZXMgb250IGVmZmFj6SBvdSBk6WNoYXJn6SBsZSB0YW1vbiDgIOljcmlyZSIKKworIzogZmlsZWlvLmM6MjYyNAorbXNnaWQgIkUyMDQ6IEF1dG9jb21tYW5kIGNoYW5nZWQgbnVtYmVyIG9mIGxpbmVzIGluIHVuZXhwZWN0ZWQgd2F5IgorbXNnc3RyICJFMjA0OiBMJ2F1dG9jb21tYW5kZSBhIGNoYW5n6SBsZSBub21icmUgZGUgbGlnbmVzIGRlIG1hbmnocmUgaW5hdHRlbmR1ZSIKKworIzogZmlsZWlvLmM6MjY5MiBmaWxlaW8uYzoyNzEwCittc2dpZCAiaXMgbm90IGEgZmlsZSBvciB3cml0YWJsZSBkZXZpY2UiCittc2dzdHIgIm4nZXN0IHBhcyB1biBmaWNoaWVyIG91IHVuIHDpcmlwaOlyaXF1ZSBpbnNjcmlwdGlibGUiCisKKyM6IGZpbGVpby5jOjI3NjIKK21zZ2lkICJpcyByZWFkLW9ubHkgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiZXN0IGVuIGxlY3R1cmUgc2V1bGUgKGFqb3V0ZXogISBwb3VyIHBhc3NlciBvdXRyZSkiCisKKyM6IGZpbGVpby5jOjMwNjgKK21zZ2lkICJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA2OiBQZXV0IHBhcyDpY3JpcmUgZGFucyBsYSBjb3BpZSBkZSBzZWNvdXJzIChham91dGV6ICEgcG91ciBwYXNzZXIgb3V0cmUpIgorCisjIHRvZG8KKyM6IGZpbGVpby5jOjMwODAKK21zZ2lkICJFNTA3OiBDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkU1MDc6IEVycmV1ciBkZSBmZXJtZXR1cmUgZGUgbGEgY29waWUgZGUgc2Vjb3VycyAoYWpvdXRleiAhIHBvdXIgcGFzc2VyIG91dHJlKSIKKworIyBUT0RPCisjOiBmaWxlaW8uYzozMDgyCittc2dpZCAiRTUwODogQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkU1MDg6IFBldXQgcGFzIGxpcmUgbGUgZmljaGllciBwb3VyIHVuZSBjb3BpZSBkZSBzZWNvdXJzIChham91dGV6ICEgcG91ciBwYXNzZXIgb3V0cmUpIgorCisjOiBmaWxlaW8uYzozMDk4Cittc2dpZCAiRTUwOTogQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA5OiBQZXV0IHBhcyBjcullciBkZSBjb3BpZSBkZSBzZWNvdXJzIChham91dGV6ICEgcG91ciBwYXNzZXIgb3V0cmUpIgorCisjIFRPRE8KKyM6IGZpbGVpby5jOjMyMDEKK21zZ2lkICJFNTEwOiBDYW4ndCBtYWtlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MTA6IFBldXQgcGFzIGNy6WVyIGRlIGNvcGllIGRlIHNlY291cnMgKGFqb3V0ZXogISBwb3VyIHBhc3NlciBvdXRyZSkiCisKKyMgVE9ETworIzogZmlsZWlvLmM6MzI2MworbXNnaWQgIkU0NjA6IFRoZSByZXNvdXJjZSBmb3JrIHdvdWxkIGJlIGxvc3QgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkU0NjA6IExhIHNlY3Rpb24gZGVzIHJlc3NvdXJjZXMgc2VyYWl0IHBlcmR1ZSAoYWpvdXRleiAhIHBvdXIgcGFzc2VyIG91dHJlKSIKKworIzogZmlsZWlvLmM6MzM2NAorbXNnaWQgIkUyMTQ6IENhbid0IGZpbmQgdGVtcCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjE0OiBQZXV0IHBhcyB0cm91dmVyIGxlIGZpY2hpZXIgdGVtcG9yYWlyZSBwb3VyIHkg6WNyaXJlIgorCisjOiBmaWxlaW8uYzozMzgyCittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKGFkZCAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIkUyMTM6IFBldXQgcGFzIGNvbnZlcnRpciAoYWpvdXRleiAhIHBvdXIg6WNyaXJlIHNhbnMgY29udmVydGlyKSIKKworIyB0b2RvCisjOiBmaWxlaW8uYzozNDE3Cittc2dpZCAiRTE2NjogQ2FuJ3Qgb3BlbiBsaW5rZWQgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE2NjogUGV1dCBwYXMgb3V2cmlyIGxlIGZpY2hpZXIgbGnpIHBvdXIgeSDpY3JpcmUiCisKKyM6IGZpbGVpby5jOjM0MjEKK21zZ2lkICJFMjEyOiBDYW4ndCBvcGVuIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTI6IFBldXQgcGFzIG91dnJpciBsZSBmaWNoaWVyIHBvdXIgeSDpY3JpcmUiCisKKyM6IGZpbGVpby5jOjM2NzEKK21zZ2lkICJFNTEyOiBDbG9zZSBmYWlsZWQiCittc2dzdHIgIkU1MTI6IEVycmV1ciBkZSBmZXJtZXR1cmUgZGUgZmljaGllciIKKworIzogZmlsZWlvLmM6Mzc0MgorbXNnaWQgIkU1MTM6IHdyaXRlIGVycm9yLCBjb252ZXJzaW9uIGZhaWxlZCIKK21zZ3N0ciAiRTUxMzogRXJyZXVyIGQn6WNyaXR1cmUsIGxhIGNvbnZlcnNpb24gYSDpY2hvdekiCisKKyM6IGZpbGVpby5jOjM3NDgKK21zZ2lkICJFNTE0OiB3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICJFNTE0OiBlcnJldXIgZCfpY3JpdHVyZSAoc3lzdOhtZSBkZSBmaWNoaWVycyBwbGVpbiA/KSIKKworIzogZmlsZWlvLmM6MzgxNQorbXNnaWQgIiBDT05WRVJTSU9OIEVSUk9SIgorbXNnc3RyICIgRVJSRVVSIERFIENPTlZFUlNJT04iCisKKyM6IGZpbGVpby5jOjM4MzEKK21zZ2lkICJbRGV2aWNlXSIKK21zZ3N0ciAiW1DpcmlwaC5dIgorCisjOiBmaWxlaW8uYzozODM2Cittc2dpZCAiW05ld10iCittc2dzdHIgIltOb3V2ZWF1XSIKKworIzogZmlsZWlvLmM6Mzg1OAorbXNnaWQgIiBbYV0iCittc2dzdHIgIiBbYV0iCisKKyM6IGZpbGVpby5jOjM4NTgKK21zZ2lkICIgYXBwZW5kZWQiCittc2dzdHIgIiBham91dOkocykiCisKKyM6IGZpbGVpby5jOjM4NjAKK21zZ2lkICIgW3ddIgorbXNnc3RyICIgW2VdIgorCisjOiBmaWxlaW8uYzozODYwCittc2dpZCAiIHdyaXR0ZW4iCittc2dzdHIgIiDpY3JpdChzKSIKKworIzogZmlsZWlvLmM6MzkxMworbXNnaWQgIkUyMDU6IFBhdGNobW9kZTogY2FuJ3Qgc2F2ZSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA1OiBwYXRjaG1vZGU6IHBldXQgcGFzIHNhdXZlciBsZSBmaWNoaWVyIG9yaWdpbmFsIgorCisjOiBmaWxlaW8uYzozOTM1Cittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBwYXRjaG1vZGU6IHBldXQgcGFzIHRvdWNoZXIgbGUgZmljaGllciBvcmlnaW5hbCB2aWRlIgorCisjOiBmaWxlaW8uYzozOTUwCittc2dpZCAiRTIwNzogQ2FuJ3QgZGVsZXRlIGJhY2t1cCBmaWxlIgorbXNnc3RyICJFMjA3OiBQZXV0IHBhcyBlZmZhY2VyIGxhIGNvcGllIGRlIHNlY291cnMiCisKKyM6IGZpbGVpby5jOjQwMTQKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBTEVSVEU6IExlIGZpY2hpZXIgb3JpZ2luYWwgZXN0IHBldXQt6nRyZSBwZXJkdSBvdSBlbmRvbW1hZ+lcbiIKKworIzogZmlsZWlvLmM6NDAxNgorbXNnaWQgImRvbid0IHF1aXQgdGhlIGVkaXRvciB1bnRpbCB0aGUgZmlsZSBpcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiEiCittc2dzdHIgIm5lIHF1aXR0ZXogcGFzIGwn6WRpdGV1ciBzYW5zIHF1ZSBsZSBmaWNoaWVyIHNvaXQgYmllbiBlbnJlZ2lzdHLpICEiCisKKyM6IGZpbGVpby5jOjQxMDUKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW2Rvc10iCisKKyM6IGZpbGVpby5jOjQxMDUKK21zZ2lkICJbZG9zIGZvcm1hdF0iCittc2dzdHIgIltmb3JtYXQgZG9zXSIKKworIzogZmlsZWlvLmM6NDExMgorbXNnaWQgIlttYWNdIgorbXNnc3RyICJbbWFjXSIKKworIzogZmlsZWlvLmM6NDExMgorbXNnaWQgIlttYWMgZm9ybWF0XSIKK21zZ3N0ciAiW2Zvcm1hdCBtYWNdIgorCisjOiBmaWxlaW8uYzo0MTE5Cittc2dpZCAiW3VuaXhdIgorbXNnc3RyICJbdW5peF0iCisKKyM6IGZpbGVpby5jOjQxMTkKK21zZ2lkICJbdW5peCBmb3JtYXRdIgorbXNnc3RyICJbZm9ybWF0IHVuaXhdIgorCisjOiBmaWxlaW8uYzo0MTQ2Cittc2dpZCAiMSBsaW5lLCAiCittc2dzdHIgIjEgbGlnbmUsICIKKworIzogZmlsZWlvLmM6NDE0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMsICIKK21zZ3N0ciAiJWxkIGxpZ25lcywgIgorCisjOiBmaWxlaW8uYzo0MTUxCittc2dpZCAiMSBjaGFyYWN0ZXIiCittc2dzdHIgIjEgY2FyYWN06HJlIgorCisjOiBmaWxlaW8uYzo0MTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlbGQgY2FyYWN06HJlcyIKKworIyBUT0RPCisjOiBmaWxlaW8uYzo0MTYzCittc2dpZCAiW25vZW9sXSIKK21zZ3N0ciAiW25vZW9sXSIKKworIzogZmlsZWlvLmM6NDE2MworbXNnaWQgIltJbmNvbXBsZXRlIGxhc3QgbGluZV0iCittc2dzdHIgIltEZXJuaehyZSBsaWduZSBpbmNvbXBs6HRlXSIKKworIy4gZG9uJ3Qgb3ZlcndyaXRlIG1lc3NhZ2VzIGhlcmUKKyMuIG11c3QgZ2l2ZSB0aGlzIHByb21wdAorIy4gZG9uJ3QgdXNlIGVtc2coKSBoZXJlLCBkb24ndCB3YW50IHRvIGZsdXNoIHRoZSBidWZmZXJzCisjOiBmaWxlaW8uYzo0MTgyCittc2dpZCAiV0FSTklORzogVGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSByZWFkaW5nIGl0ISEhIgorbXNnc3RyICJBTEVSVEU6IExlIGZpY2hpZXIgYSDpdOkgbW9kaWZp6SBkZXB1aXMgcXVlIFZpbSBsJ2EgbHUgISIKKworIzogZmlsZWlvLmM6NDE4NAorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byB3cml0ZSB0byBpdCIKK21zZ3N0ciAiVm91bGV6LXZvdXMgdnJhaW1lbnQg6WNyaXJlIGRlZGFucyIKKworIzogZmlsZWlvLmM6NTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogRXJyZXVyIGxvcnMgZGUgbCfpY3JpdHVyZSBkYW5zIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA5OiBFcnJvciBjbG9zaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIwOTogRXJyZXVyIGxvcnMgZGUgbGEgZmVybWV0dXJlIGRlIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogRXJyZXVyIGxvcnMgZGUgbGEgbGVjdHVyZSBkZSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU0NTUKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBMJ2F1dG8tY29tbWFuZGUgRmlsZUNoYW5nZWRTaGVsbCBhIGVmZmFj6SBsZSB0YW1wb24iCisKKyM6IGZpbGVpby5jOjU0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMTogV2FybmluZzogRmlsZSBcIiVzXCIgbm8gbG9uZ2VyIGF2YWlsYWJsZSIKK21zZ3N0ciAiRTIxMTogQWxlcnRlOiBMZSBmaWNoaWVyIFwiJXNcIiBuJ2VzdCBwbHVzIGRpc3BvbmlibGUiCisKKyMgdG9kbworIzogZmlsZWlvLmM6NTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVzEyOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBhbmQgdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCBpbiBWaW0gYXMgIgorIndlbGwiCittc2dzdHIgIlcxMjogQWxlcnRlOiBMZSBmaWNoaWVyIFwiJXNcIiBhIGNoYW5n6SBldCBsZSB0YW1wb24gYSBwYXIgYWlsbGV1cnMg6XTpIG1vZGlmaekgZGFucyBWaW0iCisKKyM6IGZpbGVpby5jOjU0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMTogQWxlcnRlOiBMZSBmaWNoaWVyIFwiJXNcIiBhIGNoYW5n6SBkZXB1aXMgbGUgZOlidXQgZGUgbCfpZGl0aW9uIgorCisjOiBmaWxlaW8uYzo1NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlcxNjogV2FybmluZzogTW9kZSBvZiBmaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxNjogQWxlcnRlOiBMZXMgcGVybWlzc2lvbnMgZGUgXCIlc1wiIG9udCBjaGFuZ+kgZGVwdWlzIGxlIGTpYnV0IGRlIGwn6WRpdGlvbiIKKworIzogZmlsZWlvLmM6NTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTM6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTM6IEFsZXJ0ZTogTGUgZmljaGllciBcIiVzXCIgYSDpdOkgY3Lp6SBhcHLocyBsZSBk6WJ1dCBkZSBsJ+lkaXRpb24iCisKKyM6IGZpbGVpby5jOjU1MDgKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJBbGVydGUiCisKKyM6IGZpbGVpby5jOjU1MDkKK21zZ2lkICIiCisiJk9LXG4iCisiJkxvYWQgRmlsZSIKK21zZ3N0ciAiIgorIiZPa1xuIgorIiZDaGFyZ2UgbGUgZmljaGllciIKKworIzogZmlsZWlvLmM6NTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJFNDYyOiBDb3VsZCBub3QgcHJlcGFyZSBmb3IgcmVsb2FkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTQ2MjogUGFzIHB1IHBy6XBhcmVyIGxlIHJlY2hhcmdlbWVudCBkZSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IFBhcyBwdSByZWNoYXJnZXIgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2MjA4Cittc2dpZCAiLS1EZWxldGVkLS0iCittc2dzdHIgIi0tRWZmYWPpLS0iCisKKyMuIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0CisjOiBmaWxlaW8uYzo2MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjc6IE5vIHN1Y2ggZ3JvdXA6IFwiJXNcIiIKK21zZ3N0ciAiRTM2NzogUGFzIGRlIHRlbCBncm91cGU6IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NjQ5MworIywgYy1mb3JtYXQKK21zZ2lkICJFMjE1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciAqOiAlcyIKK21zZ3N0ciAiRTIxNTogQ2FyYWN06HJlIGlsbOlnYWwgYXBy6HMgKjogJXMiCisKKyM6IGZpbGVpby5jOjY1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IFBhcyBkZSB0ZWwg6XbobmVtZW50OiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo2NjUzCittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRvLWNvbW1hbmRlcyAtLS0iCisKKyM6IGZpbGVpby5jOjY5MjQKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiRTIxNzogSW1wb3NzaWJsZSBkJ2V46WN1dGVyIHVuZSBhdXRvY29tbWFuZGUgcG91ciBUT1VTIGxlcyDpduhuZW1lbnRzIgorCisjOiBmaWxlaW8uYzo2OTQ3Cittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICJQYXMgZCdhdXRvY29tbWFuZGUgY29ycmVzcG9uZGFudGUiCisKKyM6IGZpbGVpby5jOjcyNjcKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiBhdXRvY29tbWFuZGVzIHRyb3AgaW1icmlxdellcyIKKworIzogZmlsZWlvLmM6NzUzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBBdXRvIGNvbW1hbmRzIGZvciBcIiVzXCIiCittc2dzdHIgIiVzIEF1dG8gY29tbWFuZGVzIHBvdXIgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo3NTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAiRXjpY3V0aW9uIGRlICVzIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGZpbGVpby5jOjc2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXV0b2NvbW1hbmQgJXMiCittc2dzdHIgImF1dG9jb21tYW5kZSAlcyIKKworIzogZmlsZWlvLmM6ODE3OAorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IHsgbWFucXVhbnQuIgorCisjOiBmaWxlaW8uYzo4MTgwCittc2dpZCAiRTIyMDogTWlzc2luZyB9LiIKK21zZ3N0ciAiRTIyMDogfSBtYW5xdWFudC4iCisKKyM6IGZvbGQuYzo2NgorbXNnaWQgIkU0OTA6IE5vIGZvbGQgZm91bmQiCittc2dzdHIgIkU0OTA6IFBhcyB0cm91dukgZGUgcmVwbGkiCisKKyM6IGZvbGQuYzo1NTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogTmUgcGV1dCBjcullciBkZSByZXBsaSBhdmVjIGxhICdmb2xkbWV0aG9kJyBjb3VyYW50ZSIKKworIzogZm9sZC5jOjU1NQorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiBOZSBwZXV0IGVmZmFjZXIgbGUgcmVwbGkgYXZlYyBsYSAnZm9sZG1ldGhvZCcgY291cmFudGUiCisKKyM6IGdldGNoYXIuYzoyNDYKK21zZ2lkICJFMjIyOiBBZGQgdG8gcmVhZCBidWZmZXIiCittc2dzdHIgIkUyMjI6IEFqb3V0IGF1IHRhbXBvbiBkZSBsZWN0dXJlIgorCisjOiBnZXRjaGFyLmM6MjE1NgorbXNnaWQgIkUyMjM6IHJlY3Vyc2l2ZSBtYXBwaW5nIgorbXNnc3RyICJFMjIzOiBtYXBwaW5nIHLpY3Vyc2lmIgorCisjOiBnZXRjaGFyLmM6MzAyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI0OiBnbG9iYWwgYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNDogdW5lIGFiYnLpdmlhdGlvbiBnbG9iYWxlIGV4aXN0ZSBk6WrgIHBvdXIgJXMiCisKKyM6IGdldGNoYXIuYzozMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTogdW4gbWFwcGluZyBnbG9iYWwgZXhpc3RlIGTpauAgcG91ciAlcyIKKworIzogZ2V0Y2hhci5jOjMxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogdW5lIGFiYnLpdmlhdGlvbiBleGlzdGUgZOlq4CBwb3VyICVzIgorCisjOiBnZXRjaGFyLmM6MzE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI3OiBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNzogdW4gbWFwcGluZyBleGlzdGUgZOlq4CBwb3VyICVzIgorCisjOiBnZXRjaGFyLmM6MzIxOQorbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAiUGFzIGQnYWJicul2aWF0aW9uIHRyb3V26WUiCisKKyMgVE9ETworIzogZ2V0Y2hhci5jOjMyMjEKK21zZ2lkICJObyBtYXBwaW5nIGZvdW5kIgorbXNnc3RyICJQYXMgZGUgbWFwcGluZyB0cm91dukiCisKKyM6IGdldGNoYXIuYzo0MTExCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiBNb2RlIGlsbOlnYWwiCisKKyM6IGd1aS5jOjIxOQorbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiBJbXBvc3NpYmxlIGRlIGTpbWFycmVyIGwnaW50ZXJmYWNlIGdyYXBoaXF1ZSIKKworIzogZ3VpLmM6MzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzA6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjMwOiBQYXMgcHUgbGlyZSBcIiVzXCIiCisKKyM6IGd1aS5jOjQ3MworbXNnaWQgIkUyMzE6ICdndWlmb250d2lkZScgaW52YWxpZCIKK21zZ3N0ciAiRTIzMTogJ2d1aWZvbnR3aWRlJyBlc3QgaW52YWxpZGUiCisKKyM6IGd1aS5jOjM5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiBQZXV0IHBhcyBhbGxvdWVyIGxhIGNvdWxldXIgJXMiCisKKyM6IGd1aV9hdF9mcy5jOjMwMAorbXNnaWQgIjxjYW5ub3Qgb3Blbj4gIgorbXNnc3RyICI8cGFzIHB1IG91dnJpcj4gIgorCisjOiBndWlfYXRfZnMuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAiRTYxNjogdmltX1NlbEZpbGU6IHBhcyBwdSBy6WN1cOlyZXIgbGEgZm9udGUgJXMiCisKKyM6IGd1aV9hdF9mcy5jOjI3ODEKK21zZ2lkICJFNjE0OiB2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJFNjE0OiB2aW1fU2VsRmlsZTogcGFzIHB1IHJldmVuaXIgZGFucyBsZSBy6XBlcnRvaXJlIGNvdXJhbnQiCisKKyM6IGd1aV9hdF9mcy5jOjI4MDEKK21zZ2lkICJQYXRobmFtZToiCittc2dzdHIgIkNoZW1pbjoiCisKKyM6IGd1aV9hdF9mcy5jOjI4MDcKK21zZ2lkICJFNjE1OiB2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJFNjE1OiB2aW1fU2VsRmlsZTogcGFzIHB1IHLpY3Vw6XJlciBsZSBy6XBlcnRvaXJlIGNvdXJhbnQiCisKKyM6IGd1aV9hdF9mcy5jOjI4MTUgZ3VpX21vdGlmLmM6MTYyMworbXNnaWQgIk9LIgorbXNnc3RyICJPayIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfZ3RrLmM6MjYzNCBndWlfbW90aWYuYzoxNjE4IGd1aV9tb3RpZi5jOjI4NDkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFubnVsZXIiCisKKyMgVE9ETworIzogZ3VpX2F0X3NiLmM6NDg2Cittc2dpZCAiU2Nyb2xsYmFyIFdpZGdldDogQ291bGQgbm90IGdldCBnZW9tZXRyeSBvZiB0aHVtYiBwaXhtYXAuIgorbXNnc3RyICJXaWRnZXQgc2Nyb2xsYmFyOiBQYXMgcHUgculjdXDpcmVyIGxhIGfpb23pdHJpZSBkdSB0aHVtYiBwaXhtYXAuICdeX14iCisKKyM6IGd1aV9hdGhlbmEuYzoyMDQ3IGd1aV9tb3RpZi5jOjE4NzEKK21zZ2lkICJWaW0gZGlhbG9nIgorbXNnc3RyICJWaW0iCisKKyMgdG9kbworIzogZ3VpX2JldmFsLmM6OTgKK21zZ2lkICJFMjMyOiBDYW5ub3QgY3JlYXRlIEJhbGxvb25FdmFsIHdpdGggYm90aCBtZXNzYWdlIGFuZCBjYWxsYmFjayIKK21zZ3N0ciAiRTIzMjogTmUgcGV1dCBjcullciBCYWxsb29uRXZhbCBhdmVjIG1lc3NhZ2UgRVQgY2FsbGJhY2siCisKKyM6IGd1aV9ndGsuYzoxNTYzCittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiVmltIgorCisjOiBndWlfZ3RrLmM6MTk5OCBtZXNzYWdlLmM6Mjc1NworbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZPdWlcbiIKKyImTm9uXG4iCisiJkFubnVsZXIiCisKKyMgdG9kbyAnXycgaXMgZm9yIGhvdGtleSwgaSBndWVzcz8KKyM6IGd1aV9ndGsuYzoyMTYxCittc2dpZCAiSW5wdXQgX01ldGhvZHMiCittc2dzdHIgIl9N6XRob2RlcyBkZSBzYWlzaWUiCisKKyM6IGd1aV9ndGsuYzoyNDI3IGd1aV9tb3RpZi5jOjI3NjgKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIlJlbXBsYWNlciAtIFZpbSIKKworIzogZ3VpX2d0ay5jOjI0MzUgZ3VpX21vdGlmLmM6Mjc3MAorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiUmVjaGVyY2hlciAtIFZpbSIKKworIzogZ3VpX2d0ay5jOjI0NjcgZ3VpX21vdGlmLmM6Mjg4OAorbXNnaWQgIkZpbmQgd2hhdDoiCittc2dzdHIgIlJlY2hlcmNoZXIgOiIKKworIzogZ3VpX2d0ay5jOjI0ODcgZ3VpX21vdGlmLmM6MjkyMAorbXNnaWQgIlJlcGxhY2Ugd2l0aDoiCittc2dzdHIgIlJlbXBsYWNlciBwYXIgOiIKKworIyB0b2RvCisjLiB3aG9sZSB3b3JkIG9ubHkgYnV0dG9uCisjOiBndWlfZ3RrLmM6MjUxOSBndWlfbW90aWYuYzozMDM2Cittc2dpZCAiTWF0Y2ggd2hvbGUgd29yZCBvbmx5IgorbXNnc3RyICJNb3RzIGVudGllcnMgc2V1bGVtZW50IgorCisjLiBtYXRjaCBjYXNlIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI1MzIgZ3VpX21vdGlmLmM6MzA0OAorbXNnaWQgIk1hdGNoIGNhc2UiCittc2dzdHIgIlJlc3BlY3RlciBjYXNzZSIKKworIzogZ3VpX2d0ay5jOjI1NDQgZ3VpX21vdGlmLmM6Mjk5MAorbXNnaWQgIkRpcmVjdGlvbiIKK21zZ3N0ciAiRGlyZWN0aW9uIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjI1NTYgZ3VpX21vdGlmLmM6MzAwMgorbXNnaWQgIlVwIgorbXNnc3RyICJIYXV0IgorCisjOiBndWlfZ3RrLmM6MjU2MCBndWlfbW90aWYuYzozMDEwCittc2dpZCAiRG93biIKK21zZ3N0ciAiQmFzIgorCisjOiBndWlfZ3RrLmM6MjU4NiBndWlfZ3RrLmM6MjU4OCBndWlfbW90aWYuYzoyNzkyCittc2dpZCAiRmluZCBOZXh0IgorbXNnc3RyICJTdWl2YW50IgorCisjOiBndWlfZ3RrLmM6MjYwNSBndWlfZ3RrLmM6MjYwNyBndWlfbW90aWYuYzoyODA5Cittc2dpZCAiUmVwbGFjZSIKK21zZ3N0ciAiUmVtcGxhY2VyIgorCisjOiBndWlfZ3RrLmM6MjYxOCBndWlfZ3RrLmM6MjYyMCBndWlfbW90aWYuYzoyODIyCittc2dpZCAiUmVwbGFjZSBBbGwiCittc2dzdHIgIlJlbXBsYWNlciB0b3V0IgorCisjIHRvZG8KKyM6IGd1aV9ndGtfeDExLmM6MjI4NQorbXNnaWQgIlZpbTogUmVjZWl2ZWQgXCJkaWVcIiByZXF1ZXN0IGZyb20gc2Vzc2lvbiBtYW5hZ2VyXG4iCittc2dzdHIgIlZpbTogVW5lIHJlcXXqdGUgXCJtZXVyc1wiIGEg6XTpIHJl53VlIGR1IGdlc3Rpb25uYWlyZSBkZSBzZXNzaW9uXG4iCisKKyM6IGd1aV9ndGtfeDExLmM6MzQ3NAorbXNnaWQgIlZpbTogTWFpbiB3aW5kb3cgdW5leHBlY3RlZGx5IGRlc3Ryb3llZFxuIgorbXNnc3RyICJWaW06IEZlbup0cmUgcHJpbmNpcGFsZSBk6XRydWl0ZSBpbmF0dGVuZPttZW50XG4iCisKKyM6IGd1aV9ndGtfeDExLmM6NDA4OAorbXNnaWQgIkZvbnQgU2VsZWN0aW9uIgorbXNnc3RyICJDaG9pc2lyIHVuZSBwb2xpY2UgLSBWaW0iCisKKyMgdG9kbworIzogZ3VpX2d0a194MTEuYzo1OTQwIHVpLmM6MjAwOQorbXNnaWQgIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iCittc2dzdHIgIlV0aWxpc+kgQ1VUX0JVRkZFUjAgYXUgbGlldSBkJ3VuZSBz6WxlY3Rpb24gdmlkZSIKKworIzogZ3VpX21vdGlmLmM6MTYxNyBndWlfbW90aWYuYzoxNjIwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0cmUiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTkKK21zZ2lkICJEaXJlY3RvcmllcyIKK21zZ3N0ciAiUulwZXJ0b2lyZXMiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjEKK21zZ2lkICJIZWxwIgorbXNnc3RyICJBaWRlIgorCisjOiBndWlfbW90aWYuYzoxNjIyCittc2dpZCAiRmlsZXMiCittc2dzdHIgIkZpY2hpZXJzIgorCisjOiBndWlfbW90aWYuYzoxNjI0Cittc2dpZCAiU2VsZWN0aW9uIgorbXNnc3RyICJT6WxlY3Rpb24iCisKKyM6IGd1aV9tb3RpZi5jOjI4MzUKK21zZ2lkICJVbmRvIgorbXNnc3RyICJBbm51bGVyIgorCisjOiBndWlfcmlzY29zLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTA6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTYxMDogTmUgcGV1dCBjaGFyZ2VyIGxhIGZvbnRlIFphcCAnJXMnIgorCisjOiBndWlfcmlzY29zLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjExOiBDYW4ndCB1c2UgZm9udCAlcyIKK21zZ3N0ciAiRTYxMTogTmUgcGV1dCB1dGlsaXNlciBsYSBmb250ZSAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNzAKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisiRW52b2kgZCd1biBtZXNzYWdlIHBvdXIgaW50ZXJyb21wcmUgbGUgcHJvY2Vzc3VzIGZpbHMuXG4iCisKKyM6IGd1aV93MzIuYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MzogQXJndW1lbnQgbm90IHN1cHBvcnRlZDogXCItJXNcIjsgVXNlIHRoZSBPTEUgdmVyc2lvbi4iCittc2dzdHIgIkUyNDM6IEFyZ3VtZW50IGluc3VwcG9ydOk6IFwiLSVzXCI7IFV0aWxpc2V6IGxhIHZlcnNpb24gT0xFLiIKKworIzogZ3VpX3c0OC5jOjIwNDgKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJUcm91dmVyIHVuIHRleHRlICh1dGlsaXNleiAnXFxcXCcgcG91ciB0cm91dmVyIHVuICdcXCcpIgorCisjOiBndWlfdzQ4LmM6MjA3MworbXNnaWQgIkZpbmQgJiBSZXBsYWNlICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIkNoZXJjaGVyIGV0IHJlbXBsYWNlciAodXRpbGlzZXogJ1xcXFwnIHBvdXIgdHJvdXZlciB1biAnXFwnKSIKKworIyB0b2RvCisjOiBndWlfeDExLmM6MTQ3OQorbXNnaWQgIlZpbSBFNDU4OiBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnksIHNvbWUgY29sb3JzIG1heSBiZSBpbmNvcnJlY3QiCittc2dzdHIgIiIKKyJWaW0gRTQ1ODogRXJyZXVyIGQnYWxsb2NhdGlvbiBkZSBjb3VsZXVyLCBjb3VsZXVycyBpbmNvcnJlY3RlcyBwb3NzaWJsZXMiCisKKyM6IGd1aV94MTEuYzoyMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICJFMjUwOiBQYXMgZGUgZm9udGVzIHBvdXIgY2VzIGNoYXJzZXRzIGRhbnMgbGUgZm9udHNldCAlczoiCisKKyM6IGd1aV94MTEuYzoyMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTI6IEZvbnRzZXQgbmFtZTogJXMiCittc2dzdHIgIkUyNTI6IE5vbSBkdSBmb250c2V0OiAlcyIKKworIyB0b2RvCisjOiBndWlfeDExLmM6MjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJMYSBmb250ZSAnJXMnIG4nYSBwYXMgdW5lIGxhcmdldXIgZml4ZSIKKworIyBUT0RPCisjOiBndWlfeDExLmM6MjEyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTM6IE5vbSBkdSBmb250c2V0OiAlc1xuIgorCisjOiBndWlfeDExLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MDogJXNcbiIKK21zZ3N0ciAiRm9udDA6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQxOiAlc1xuIgorbXNnc3RyICJGb250MTogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCVkIHdpZHRoIGlzIG5vdCB0d2ljZSB0aGF0IG9mIGZvbnQwXG4iCittc2dzdHIgIkxhIGxhcmdldXIgZGUgRm9udCVkIG4nZXN0IHBhcyBsZSBkb3VibGUgZGUgY2VsbGUgZGUgRm9udDBcbiIKKworIzogZ3VpX3gxMS5jOjIxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDAgd2lkdGg6ICVsZFxuIgorbXNnc3RyICJMYXJnZXVyIEZvbnQwOiAlbGRcbiIKKworIzogZ3VpX3gxMS5jOjIxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvbnQxIHdpZHRoOiAlbGRcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkxhcmdldXIgRm9udDE6ICVsZFxuIgorIlxuIgorCisjOiBoYW5ndWxpbi5jOjYxMAorbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKK21zZ3N0ciAiRTI1NjogRVJSRVVSIGRlIGwnYXV0b21hdGUgSGFuZ3VsIgorCisjOiBpZl9jc2NvcGUuYzo3NgorbXNnaWQgIkFkZCBhIG5ldyBkYXRhYmFzZSIKK21zZ3N0ciAiQWpvdXRlciB1bmUgYmFzZSBkZSBkb25u6WVzIgorCisjOiBpZl9jc2NvcGUuYzo3OAorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIlJlcXXqdGUgc2Vsb24gdW4gbW90aWYiCisKKyM6IGlmX2NzY29wZS5jOjgwCittc2dpZCAiU2hvdyB0aGlzIG1lc3NhZ2UiCittc2dzdHIgIkFmZmljaGVyIGNlIG1lc3NhZ2UiCisKKyM6IGlmX2NzY29wZS5jOjgyCittc2dpZCAiS2lsbCBhIGNvbm5lY3Rpb24iCittc2dzdHIgIkNhc3NlciB1bmUgY29ubmVjdGlvbiIKKworIzogaWZfY3Njb3BlLmM6ODQKK21zZ2lkICJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIgorbXNnc3RyICJS6WluaXRpYWxpc2VyIGxlcyBjb25uZWN0aW9ucyIKKworIzogaWZfY3Njb3BlLmM6ODYKK21zZ2lkICJTaG93IGNvbm5lY3Rpb25zIgorbXNnc3RyICJNb250cmVyIGxlcyBjb25uZWN0aW9ucyIKKworIzogaWZfY3Njb3BlLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2MDogVXNhZ2U6IGNzW2NvcGVdICVzIgorbXNnc3RyICJFNTYwOiBVdGlsaXNhdGlvbjogY3NbY29wZV0gJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNgorbXNnaWQgIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIKK21zZ3N0ciAiQ2V0dGUgY29tbWFuZGUgY3Njb3BlIG5lIHN1cHBvcnRlIHBhcyBsYSBz6XBhcmF0aW9uIGRlIGxhIGZlbup0cmUuXG4iCisKKyM6IGlmX2NzY29wZS5jOjE2NworbXNnaWQgIkU1NjI6IFVzYWdlOiBjc3RhZyA8aWRlbnQ+IgorbXNnc3RyICJFNTYyOiBVdGlsaXNhdGlvbjogY3N0YWcgPGlkZW50PiIKKworIzogaWZfY3Njb3BlLmM6MjIzCittc2dpZCAiRTI1NzogY3N0YWc6IHRhZyBub3QgZm91bmQiCittc2dzdHIgIkUyNTc6IGNzdGFnOiDpdGlxdWV0dGUgaW50cm91dmFibGUiCisKKyM6IGlmX2NzY29wZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTYzOiBzdGF0KCVzKSBlcnJvcjogJWQiCittc2dzdHIgIkU1NjM6IEVycmV1ciBzdGF0KCVzKTogJWQiCisKKyM6IGlmX2NzY29wZS5jOjQxMQorbXNnaWQgIkU1NjM6IHN0YXQgZXJyb3IiCittc2dzdHIgIkU1NjM6IEVycmV1ciBzdGF0IgorCisjOiBpZl9jc2NvcGUuYzo1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2NDogJXMgaXMgbm90IGEgZGlyZWN0b3J5IG9yIGEgdmFsaWQgY3Njb3BlIGRhdGFiYXNlIgorbXNnc3RyICJFNTY0OiAlcyBuJ2VzdCBwYXMgdW4gculwZXJ0b2lyZSBvdSB1bmUgYmFzZSBkZSBkb25u6WVzIGNzY29wZSB2YWxpZGUiCisKKyM6IGlmX2NzY29wZS5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRlZCBjc2NvcGUgZGF0YWJhc2UgJXMiCittc2dzdHIgIkFqb3V06SBsYSBiYXNlIGRlIGRvbm7pZXMgY3Njb3BlICVzIgorCisjOiBpZl9jc2NvcGUuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlbGQiCittc2dzdHIgIkUyNjI6IGVycmV1ciBsb3JzIGRlIGxhIGxlY3R1cmUgZGUgbGEgY29ubmVjdGlvbiBjc2NvcGUgJWxkIgorCisjOiBpZl9jc2NvcGUuYzo2ODMKK21zZ2lkICJFNTYxOiB1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAiRTU2MTogdHlwZSBkZSByZWNoZXJjaGUgY3Njb3BlIGluY29ubnUiCisKKyMgdG9kbworIzogaWZfY3Njb3BlLmM6NzI1Cittc2dpZCAiRTU2NjogQ291bGQgbm90IGNyZWF0ZSBjc2NvcGUgcGlwZXMiCittc2dzdHIgIkU1NjY6IFBhcyBwdSBjcullciBkZSB0dXlhdXggKHBpcGVzKSBjc2NvcGUiCisKKyMgVE9ETworIzogaWZfY3Njb3BlLmM6NzQyCittc2dpZCAiRTYyMjogQ291bGQgbm90IGZvcmsgZm9yIGNzY29wZSIKK21zZ3N0ciAiRTYyMjogUGFzIHB1IGZvcmtlciBwb3VyIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6ODM2IGlmX2NzY29wZS5jOjg4NgorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uIGV4ZWMgZmFpbGVkIgorbXNnc3RyICJleGVjIGRlIGNzX2NyZWF0ZV9jb25uZWN0aW9uIGEg6WNob3XpIgorCisjOiBpZl9jc2NvcGUuYzo4ODcKK21zZ2lkICJFNjIzOiBDb3VsZCBub3Qgc3Bhd24gY3Njb3BlIHByb2Nlc3MiCittc2dzdHIgIkU2MjM6IFBhcyBwdSBlbmdlbmRyZXIgbGUgcHJvY2Vzc3VzIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6OTAwCittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIHBvdXIgdG9fZnAgYSDpY2hvdekiCisKKyM6IGlmX2NzY29wZS5jOjkwMgorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIGZyX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBwb3VyIGZyX2ZwIGEg6WNob3XpIgorCisjOiBpZl9jc2NvcGUuYzo5NDAKK21zZ2lkICJFNTY3OiBubyBjc2NvcGUgY29ubmVjdGlvbnMiCittc2dzdHIgIkU1Njc6IHBhcyBkZSBjb25uZWN0aW9uIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU5OiBubyBtYXRjaGVzIGZvdW5kIGZvciBjc2NvcGUgcXVlcnkgJXMgb2YgJXMiCittc2dzdHIgIkUyNTk6IHBhcyBkZSBjb3JyZXNwLiB0cm91dullIHBvdXIgbGEgcmVxdep0ZSBjc2NvcGUgJXMgZGUgJXMiCisKKyMgdG9kbworIzogaWZfY3Njb3BlLmM6MTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDY5OiBpbnZhbGlkIGNzY29wZXF1aWNrZml4IGZsYWcgJWMgZm9yICVjIgorbXNnc3RyICJFNDY5OiBEcmFwZWF1IGNzY29wZXF1aWNrZml4ICVjIHBvdXIgJWMgaW52YWxpZGUiCisKKyM6IGlmX2NzY29wZS5jOjExMjgKK21zZ2lkICJjc2NvcGUgY29tbWFuZHM6XG4iCittc2dzdHIgImNvbW1hbmRlcyBjc2NvcGU6XG4iCisKKyM6IGlmX2NzY29wZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS01czogJS0zMHMgKFVzYWdlOiAlcykiCittc2dzdHIgIiUtNXM6ICUtMzBzIChVdGlsaXNhdGlvbjogJXMpIgorCisjOiBpZl9jc2NvcGUuYzoxMjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjU6IGNhbm5vdCBvcGVuIGNzY29wZSBkYXRhYmFzZTogJXMiCittc2dzdHIgIkU2MjU6IGltcG9zc2libGUgZCdvdXZyaXIgbGEgYmFzZSBkZSBkb25u6WVzIGNzY29wZTogJXMiCisKKyMgdG9kbworIzogaWZfY3Njb3BlLmM6MTI0MQorbXNnaWQgIkU2MjY6IGNhbm5vdCBnZXQgY3Njb3BlIGRhdGFiYXNlIGluZm9ybWF0aW9uIgorbXNnc3RyICJFNjI2OiBpbXBvc3NpYmxlIGQnb2J0ZW5pciBkZXMgaW5mb3Mgc3VyIGxhIGJhc2UgZGUgZG9ubullcyBjc2NvcGUiCisKKyMgdG9kbworIzogaWZfY3Njb3BlLmM6MTI2MQorbXNnaWQgIkU1Njg6IGR1cGxpY2F0ZSBjc2NvcGUgZGF0YWJhc2Ugbm90IGFkZGVkIgorbXNnc3RyICJFNTY4OiBiYXNlIGRlIGRvbm7pZXMgY3Njb3BlIHJlZG9uZGFudGUgcGFzIGFqb3V06WUiCisKKyM6IGlmX2NzY29wZS5jOjEyNzIKK21zZ2lkICJFNTY5OiBtYXhpbXVtIG51bWJlciBvZiBjc2NvcGUgY29ubmVjdGlvbnMgcmVhY2hlZCIKK21zZ3N0ciAiRTU2OTogbm9tYnJlIG1heGltdW0gZGUgY29ubmVjdGlvbnMgY3Njb3BlIGF0dGVpbnQiCisKKyM6IGlmX2NzY29wZS5jOjEzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiBsYSBjb25uZWN0aW9uIGNzY29wZSAlcyBuJ2EgcGFzIOl06SB0cm91dullIgorCisjOiBpZl9jc2NvcGUuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNzY29wZSBjb25uZWN0aW9uICVzIGNsb3NlZCIKK21zZ3N0ciAiY29ubmVjdGlvbiBjc2NvcGUgJXMgZXN0IGZlcm3pZSIKKworIy4gc2hvdWxkIG5vdCByZWFjaCBoZXJlCisjOiBpZl9jc2NvcGUuYzoxNTYyCittc2dpZCAiRTU3MDogZmF0YWwgZXJyb3IgaW4gY3NfbWFuYWdlX21hdGNoZXMiCittc2dzdHIgIkU1NzA6IGVycmV1ciBmYXRhbGUgZGFucyBjc19tYW5hZ2VfbWF0Y2hlcyIKKworIzogaWZfY3Njb3BlLmM6MTgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDc2NvcGUgdGFnOiAlcyIKK21zZ3N0ciAiyXRpcXVldHRlIGNzY29wZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjE4MjYKK21zZ2lkICIiCisiXG4iCisiICAgIyAgIGxpbmUiCittc2dzdHIgIiIKKyJcbiIKKyIgICAjICAgbGlnbmUiCisKKyM6IGlmX2NzY29wZS5jOjE4MjgKK21zZ2lkICJmaWxlbmFtZSAvIGNvbnRleHQgLyBsaW5lXG4iCittc2dzdHIgIm5vbS1maWNoaWVyIC8gY29udGV4dCAvIGxpZ25lXG4iCisKKyM6IGlmX2NzY29wZS5jOjE5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwOTogQ3Njb3BlIGVycm9yOiAlcyIKK21zZ3N0ciAiRTYwOTogRXJyZXVyIGNzY29wZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjIxNDEKK21zZ2lkICJBbGwgY3Njb3BlIGRhdGFiYXNlcyByZXNldCIKK21zZ3N0ciAiVG91dGVzIGxlcyBiYXNlcyBkZSBkb25u6WVzIGNzY29wZSBvbnQg6XTpIHJlbWlzZXMg4CB66XJvIgorCisjOiBpZl9jc2NvcGUuYzoyMjA5Cittc2dpZCAibm8gY3Njb3BlIGNvbm5lY3Rpb25zXG4iCittc2dzdHIgInBhcyBkZSBjb25uZWN0aW9uIGNzY29wZVxuIgorCisjOiBpZl9jc2NvcGUuYzoyMjEzCittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAgbm9tIGRhbnMgYmFzZSBkZSBkb25u6WVzICAgICAgICAgICAgaW5z6XJlciBjaGVtaW5cbiIKKworIzogaWZfcHl0aG9uLmM6Mzk0Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIkUyNjM6IETpc29s6SwgY2V0dGUgY29tbWFuZGUgZXN0IGTpc2FjdGl26WUsIGxhIGJpYmxpb3Ro6HF1ZSBQeXRob24gbidhIHB1IOp0cmUgY2hhcmfpZS4iCisKKyM6IGlmX3B5dGhvbi5jOjU5NgorbXNnaWQgImNhbid0IGRlbGV0ZSBPdXRwdXRPYmplY3QgYXR0cmlidXRlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2VmZmFjZXIgbGVzIGF0dHJpYnV0cyBkJ091dHB1dE9iamVjdCIKKworIzogaWZfcHl0aG9uLmM6NjAzCittc2dpZCAic29mdHNwYWNlIG11c3QgYmUgYW4gaW50ZWdlciIKK21zZ3N0ciAic29mdHNwYWNlIGRvaXQg6nRyZSB1biBub21icmUgZW50aWVyIgorCisjOiBpZl9weXRob24uYzo2MTEKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXR0cmlidXQgaW52YWxpZGUiCisKKyM6IGlmX3B5dGhvbi5jOjY1MCBpZl9weXRob24uYzo2NjQKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkgcmVxdWllcnQgdW5lIGxpc3RlIGRlIGNoYe5uZXMiCisKKyM6IGlmX3B5dGhvbi5jOjc5MAorbXNnaWQgIkUyNjQ6IFB5dGhvbjogRXJyb3IgaW5pdGlhbGlzaW5nIEkvTyBvYmplY3RzIgorbXNnc3RyICJFMjY0OiBQeXRob246IEVycmV1ciBkJ2luaXRpYWxpc2F0aW9uIGRlcyBvYmpldHMgZCdFL1MiCisKKyM6IGlmX3B5dGhvbi5jOjk3NSBpZl90Y2wuYzoxNDAyCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICJleHByZXNzaW9uIGludmFsaWRlIgorCisjOiBpZl9weXRob24uYzo5ODkgaWZfdGNsLmM6MTQwNworbXNnaWQgImV4cHJlc3Npb25zIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAiZXhwcmVzc2lvbnMgZOlzYWN0aXbpZSBsb3JzIGRlIGxhIGNvbXBpbGF0aW9uIgorCisjOiBpZl9weXRob24uYzoxMDAyCittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAidGVudGF0aXZlIGRlIHLpZulyZW5jZSDgIHVuIHRhbXBvbiBlZmZhY+kiCisKKyM6IGlmX3B5dGhvbi5jOjEwMTcgaWZfcHl0aG9uLmM6MTA1OCBpZl9weXRob24uYzoxMTIyIGlmX3RjbC5jOjEyMTQKK21zZ2lkICJsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UiCittc2dzdHIgIm51belybyBkZSBsaWduZSBob3JzIGxpbWl0ZXMiCisKKyM6IGlmX3B5dGhvbi5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IgorbXNnc3RyICI8b2JqZXQgdGFtcG9uIChlZmZhY+kpIOAgJThsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjEzNDggaWZfdGNsLmM6ODM2Cittc2dpZCAiaW52YWxpZCBtYXJrIG5hbWUiCittc2dzdHIgIm5vbSBkZSBtYXJxdWUgaW52YWxpZGUiCisKKyM6IGlmX3B5dGhvbi5jOjE2MjMKK21zZ2lkICJubyBzdWNoIGJ1ZmZlciIKK21zZ3N0ciAicGFzIGRlIHRlbCB0YW1wb24iCisKKyM6IGlmX3B5dGhvbi5jOjE3MTEKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICJ0ZW50YXRpdmUgZGUgculm6XJlbmNlIOAgdW5lIGZlbup0cmUgZWZmYWPpZSIKKworIzogaWZfcHl0aG9uLmM6MTc1NgorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXR0cmlidXQgZW4gbGVjdHVyZSBzZXVsZSIKKworIzogaWZfcHl0aG9uLmM6MTc2OQorbXNnaWQgImN1cnNvciBwb3NpdGlvbiBvdXRzaWRlIGJ1ZmZlciIKK21zZ3N0ciAiY3Vyc2V1ciBwb3NpdGlvbm7pIGVuIGRlaG9ycyBkdSB0YW1wb24iCisKKyM6IGlmX3B5dGhvbi5jOjE4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKGRlbGV0ZWQpIGF0ICUuOGxYPiIKK21zZ3N0ciAiPG9iamV0IGZlbup0cmUgKGVmZmFj6Skg4CAlLjhsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjE4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKHVua25vd24pIGF0ICUuOGxYPiIKK21zZ3N0ciAiPG9iamV0IGZlbup0cmUgKGluY29ubnUpIOAgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODYwCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8ZmVu6nRyZSAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5MzYKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAicGFzIGRlIHRlbGxlIGZlbup0cmUiCisKKyM6IGlmX3B5dGhvbi5jOjIxOTMgaWZfcHl0aG9uLmM6MjIyOCBpZl9weXRob24uYzoyMjc4IGlmX3B5dGhvbi5jOjIzNDYKKyM6IGlmX3B5dGhvbi5jOjI0NjYgaWZfcHl0aG9uLmM6MjUxOCBpZl90Y2wuYzo2ODQgaWZfdGNsLmM6NzI5IGlmX3RjbC5jOjgwMworIzogaWZfdGNsLmM6ODczIGlmX3RjbC5jOjE5OTgKK21zZ2lkICJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnZW5yZWdpc3RyZXIgbGVzIGluZm9ybWF0aW9ucyBkJ2FubnVsYXRpb24iCisKKyM6IGlmX3B5dGhvbi5jOjIxOTUgaWZfcHl0aG9uLmM6MjI4NSBpZl9weXRob24uYzoyMzU3Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBsaW5lIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnZWZmYWNlciBsYSBsaWduZSIKKworIzogaWZfcHl0aG9uLmM6MjIzMCBpZl9weXRob24uYzoyMzczIGlmX3RjbC5jOjY5MCBpZl90Y2wuYzoyMDIwCittc2dpZCAiY2Fubm90IHJlcGxhY2UgbGluZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZW1wbGFjZXIgbGEgbGlnbmUiCisKKyM6IGlmX3B5dGhvbi5jOjIzODkgaWZfcHl0aG9uLmM6MjQ2OCBpZl9weXRob24uYzoyNTI2Cittc2dpZCAiY2Fubm90IGluc2VydCBsaW5lIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnaW5z6XJlciBsYSBsaWduZSIKKworIzogaWZfcHl0aG9uLmM6MjYzMAorbXNnaWQgInN0cmluZyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAibGEgY2hh7m5lIG5lIHBldXQgY29udGVuaXIgZGUgcmV0b3VyIOAgbGEgbGlnbmUiCisKKyM6IGlmX3J1YnkuYzozOTYKK21zZ2lkICIiCisiRTI2NjogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFJ1YnkgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiRTI2NjogROlzb2zpLCBjb21tYW5kZSBpbmFjdGl2ZSwgbGEgYmlibGlvdGjocXVlIFJ1YnkgbidhIHB1IOp0cmUgY2hhcmfpZS4iCisKKyM6IGlmX3J1YnkuYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIKK21zZ3N0ciAiRTI3Mzogc3RhdHV0IGxvbmdqbXAgaW5jb25udTogJWQiCisKKyM6IGlmX3NuaWZmLmM6NjcKK21zZ2lkICJUb2dnbGUgaW1wbGVtZW50YXRpb24vZGVmaW5pdGlvbiIKK21zZ3N0ciAiQmFzY3VsZXIgaW1wbOltZW50YXRpb24vZOlmaW5pdGlvbiIKKworIzogaWZfc25pZmYuYzo2OAorbXNnaWQgIlNob3cgYmFzZSBjbGFzcyBvZiIKK21zZ3N0ciAiTW9udHJlciBsYSBjbGFzc2UgZGUgYmFzZSBkZSIKKworIzogaWZfc25pZmYuYzo2OQorbXNnaWQgIlNob3cgb3ZlcnJpZGRlbiBtZW1iZXIgZnVuY3Rpb24iCittc2dzdHIgIk1vbnRyZXIgbGVzIGZvbmN0aW9ucyBtZW1icmVzIHN1cmNoYXJn6WVzIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICJS6WN1cOlyZXIgZHUgZmljaGllciIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAiUuljdXDpcmVyIGR1IHByb2pldCIKKworIzogaWZfc25pZmYuYzo3MworbXNnaWQgIlJldHJpZXZlIGZyb20gYWxsIHByb2plY3RzIgorbXNnc3RyICJS6WN1cOlyZXIgZGUgdG91cyBsZXMgcHJvamV0cyIKKworIzogaWZfc25pZmYuYzo3NAorbXNnaWQgIlJldHJpZXZlIgorbXNnc3RyICJS6WN1cOlyZXIiCisKKyM6IGlmX3NuaWZmLmM6NzUKK21zZ2lkICJTaG93IHNvdXJjZSBvZiIKK21zZ3N0ciAiTW9udHJlciBzb3VyY2UgZGUiCisKKyM6IGlmX3NuaWZmLmM6NzYKK21zZ2lkICJGaW5kIHN5bWJvbCIKK21zZ3N0ciAiVHJvdXZlciBzeW1ib2xlcyIKKworIzogaWZfc25pZmYuYzo3NworbXNnaWQgIkJyb3dzZSBjbGFzcyIKK21zZ3N0ciAiUGFyY291cmlyIGNsYXNzZSIKKworIzogaWZfc25pZmYuYzo3OAorbXNnaWQgIlNob3cgY2xhc3MgaW4gaGllcmFyY2h5IgorbXNnc3RyICJNb250cmVyIGNsYXNzZSBkYW5zIGhp6XJhcmNoaWUiCisKKyM6IGlmX3NuaWZmLmM6NzkKK21zZ2lkICJTaG93IGNsYXNzIGluIHJlc3RyaWN0ZWQgaGllcmFyY2h5IgorbXNnc3RyICJNb250cmVyIGNsYXNzZSBkYW5zIGhp6XJhcmNoaWUgcmVzdHJlaW50ZSIKKworIyB0b2RvCisjOiBpZl9zbmlmZi5jOjgwCittc2dpZCAiWHJlZiByZWZlcnMgdG8iCittc2dzdHIgIlhyZWYgculm6XJlbmNlIgorCisjOiBpZl9zbmlmZi5jOjgxCittc2dpZCAiWHJlZiByZWZlcnJlZCBieSIKK21zZ3N0ciAiWHJlZiBlc3Qgculm6XJlbmPpIHBhciIKKworIzogaWZfc25pZmYuYzo4MgorbXNnaWQgIlhyZWYgaGFzIGEiCittc2dzdHIgIlhyZWYgYSB1bihlKSIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiB1dGlsaXPpZSBwYXIiCisKKyM6IGlmX3NuaWZmLmM6ODQKK21zZ2lkICJTaG93IGRvY3Ugb2YiCittc2dzdHIgIk1vbnRyZXIgZG9jdSBkZSIKKworIzogaWZfc25pZmYuYzo4NQorbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgorbXNnc3RyICJH6W7pcmF0aW9uIGRlIGRvY3UgcG91ciIKKworIzogaWZfc25pZmYuYzo5NworbXNnaWQgIiIKKyJDYW5ub3QgY29ubmVjdCB0byBTTmlGRisuIENoZWNrIGVudmlyb25tZW50IChzbmlmZmVtYWNzIG11c3QgYmUgZm91bmQgaW4gIgorIiRQQVRIKS5cbiIKK21zZ3N0ciAiQ29ubmVjdGlvbiDgIFNOaUZGKyBpbXBvc3NpYmxlLiBW6XJpZmlleiBsJ2Vudmlyb25uZW1lbnQgKHNuaWZmZW1hY3MgZG9pdCDqdHJlIGRhbnMgbGUgJFBBVEgpLlxuIgorCisjOiBpZl9zbmlmZi5jOjQyNQorbXNnaWQgIkUyNzQ6IFNuaWZmOiBFcnJvciBkdXJpbmcgcmVhZC4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJFMjc0OiBTbmlmZjogRXJyZXVyIGRlIGxlY3R1cmUuIETpY29ubmVjdOkiCisKKyM6IGlmX3NuaWZmLmM6NTUzCittc2dpZCAiU05pRkYrIGlzIGN1cnJlbnRseSAiCittc2dzdHIgIlNOaUZGKyBlc3QgYWN0dWVsbGVtZW50ICIKKworIzogaWZfc25pZmYuYzo1NTUKK21zZ2lkICJub3QgIgorbXNnc3RyICJwYXMgIgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAiY29ubmVjdOkiCisKKyM6IGlmX3NuaWZmLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzU6IFVua25vd24gU05pRkYrIHJlcXVlc3Q6ICVzIgorbXNnc3RyICJFMjc1OiBSZXF16nRlIFNOaUZGKyBpbmNvbm51ZTogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IEVycmV1ciBkZSBjb25uZWN0aW9uIOAgU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwMDkKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODogU05pRkYrIG4nZXN0IHBhcyBjb25uZWN06SIKKworIzogaWZfc25pZmYuYzoxMDE4Cittc2dpZCAiRTI3OTogTm90IGEgU05pRkYrIGJ1ZmZlciIKK21zZ3N0ciAiRTI3OTogQ2VjaSBuJ2VzdCBwYXMgdW4gdGFtcG9uIFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDgzCittc2dpZCAiU25pZmY6IEVycm9yIGR1cmluZyB3cml0ZS4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJTbmlmZjogRXJyZXVyIGQn6WNyaXR1cmUuIETpY29ubmVjdGlvbiIKKworIzogaWZfdGNsLmM6NDE4Cittc2dpZCAiaW52YWxpZCBidWZmZXIgbnVtYmVyIgorbXNnc3RyICJudW3pcm8gZGUgdGFtcG9uIGludmFsaWRlIgorCisjOiBpZl90Y2wuYzo0NjQgaWZfdGNsLmM6OTMxIGlmX3RjbC5jOjExMTAKK21zZ2lkICJub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICJwYXMgZW5jb3JlIGltcGzpbWVudOkiCisKKyM6IGlmX3RjbC5jOjUwMQorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJvcHRpb24gaW5jb25udWUiCisKKyMgVE9ETworIy4gPz8/CisjOiBpZl90Y2wuYzo3NzQKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgInBldXQgcGFzIHLpZ2xlciBsYS9sZXMgbGlnbmUocykgICdeX14iCisKKyM6IGlmX3RjbC5jOjg0NQorbXNnaWQgIm1hcmsgbm90IHNldCIKK21zZ3N0ciAibWFycXVlIGFic2VudGUiCisKKyM6IGlmX3RjbC5jOjg1MSBpZl90Y2wuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdyAlZCBjb2x1bW4gJWQiCittc2dzdHIgImxpZ25lICVkIGNvbG9ubmUgJWQiCisKKyM6IGlmX3RjbC5jOjg4MQorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgInBldXQgcGFzIGluc+lyZXIvYWpvdXRlciBsaWduZSIKKworIzogaWZfdGNsLmM6MTI2OAorbXNnaWQgInVua25vd24gZmxhZzogIgorbXNnc3RyICJkcmFwZWF1IGluY29ubnU6ICIKKworIzogaWZfdGNsLmM6MTMzOAorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICJ2aW1PcHRpb24gaW5jb25udWUiCisKKyM6IGlmX3RjbC5jOjE0MjMKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgImludGVycnVwdGlvbiBjbGF2aWVyIgorCisjOiBpZl90Y2wuYzoxNDI4Cittc2dpZCAidmltIGVycm9yIgorbXNnc3RyICJlcnJldXIgdmltIgorCisjOiBpZl90Y2wuYzoxNDcxCittc2dpZCAiY2Fubm90IGNyZWF0ZSBidWZmZXIvd2luZG93IGNvbW1hbmQ6IG9iamVjdCBpcyBiZWluZyBkZWxldGVkIgorbXNnc3RyICJwZXV0IHBhcyBjcullciBjbWRlIHRhbXBvbi9mZW7qdHJlOiBvYmpldCBlbiB0cmFpbiBkJ+p0cmUgZWZmYWPpIgorCisjIFRPRE8KKyM6IGlmX3RjbC5jOjE1NDUKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICJwZXV0IHBhcyBpbnNjcmlyZSBjb21tYW5kZSBkZSByYXBwZWw6IHRhbXBvbi9mZW7qdHJlIGVuIGVmZmFjZW1lbnQiCisKKyMuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEZhbW91cyBsYXN0IHdvcmQ/CisjOiBpZl90Y2wuYzoxNTYyCittc2dpZCAiIgorIkUyODA6IFRDTCBGQVRBTCBFUlJPUjogcmVmbGlzdCBjb3JydXB0IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLiIKKyJvcmciCittc2dzdHIgIiIKKyJFMjgwOiBFUlJFVVIgRkFUQUxFIFRDTDogcmVmbGlzdCBjb3Jyb21wdWUgPyEgQ29udGFjdGV6IHZpbS1kZXZAdmltLm9yZywgc3ZwLiIKKworIzogaWZfdGNsLmM6MTU2MworbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgInBldXQgcGFzIGluc2NyaXJlIGNvbW1hbmRlIGRlIHJhcHBlbDogculmLiB0YW1wb24vZmVu6nRyZSBpbnRyb3V2YWJsZSIKKworIzogaWZfdGNsLmM6MTcyNAorbXNnaWQgIiIKKyJFNTcxOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgVGNsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFNTcxOiBE6XNvbOksIGNvbW1hbmRlIGTpc2FjdGl26WU6IGxhIGJpYmxpb3Ro6HF1ZSBUY2wgbidhIHB1IOp0cmUgY2hhcmfpZS4iCisKKyM6IGlmX3RjbC5jOjE4ODYKK21zZ2lkICIiCisiRTI4MTogVENMIEVSUk9SOiBleGl0IGNvZGUgaXMgbm90IGludCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS5vcmciCittc2dzdHIgIkUyODE6IEVSUkVVUiBUQ0w6IGNvZGUgZGUgc29ydGllIHBhcyBpbnQgPyEgQ29udGFjdGVyIHZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MjAwNgorbXNnaWQgImNhbm5vdCBnZXQgbGluZSIKK21zZ3N0ciAicGFzIHB1IHLpY3Vw6XJlciBsYSBsaWduZSIKKworIyB0b2RvCisjOiBpZl94Y21kc3J2LmM6MjE1Cittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAiSW5jYXBhYmxlIGQnaW5zY3JpcmUgdW4gbm9tIGRlIHNlcnZldXIgZGUgY29tbWFuZGUiCisKKyM6IGlmX3hjbWRzcnYuYzo0NjUKK21zZ2lkICJFMjQ4OiBGYWlsZWQgdG8gc2VuZCBjb21tYW5kIHRvIHRoZSBkZXN0aW5hdGlvbiBwcm9ncmFtIgorbXNnc3RyICJFMjQ4OiDJY2hlYyBkZSBsJ2Vudm9pIGRlIGxhIGNvbW1hbmRlIGF1IHByb2dyYW1tZSBkZSBkZXN0aW5hdGlvbiIKKworIzogaWZfeGNtZHNydi5jOjczNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTczOiBJbnZhbGlkIHNlcnZlciBpZCB1c2VkOiAlcyIKK21zZ3N0ciAiRTU3MzogVXRpbGlz6SB1bmUgSWQgZGUgc2VydmV1ciBpbnZhbGlkZTogJXMiCisKKyM6IGlmX3hjbWRzcnYuYzoxMDk4Cittc2dpZCAiRTI1MTogVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IGlzIGJhZGx5IGZvcm1lZC4gIERlbGV0ZWQhIgorbXNnc3RyICJFMjUxOiBFbnRy6WUgcmVnaXN0cmUgZGUgbCdpbnN0YW5jZSBkZSBWaW0gbWFsIGZvcm1hdHTpZS4gIEVmZmFj6WUgISIKKworIzogbWFpbi5jOjYwCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk9wdGlvbiBpbmNvbm51ZSIKKworIzogbWFpbi5jOjYyCittc2dpZCAiVG9vIG1hbnkgZWRpdCBhcmd1bWVudHMiCittc2dzdHIgIlRyb3AgZCdhcmd1bWVudHMgZCfpZGl0aW9uIgorCisjOiBtYWluLmM6NjQKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICJBcmd1bWVudCBtYW5xdWFudCBhcHLocyIKKworIyB0b2RvCisjOiBtYWluLmM6NjYKK21zZ2lkICJHYXJiYWdlIGFmdGVyIG9wdGlvbiIKK21zZ3N0ciAiROl0cml0dXMgYXBy6HMgbCdvcHRpb24iCisKKyM6IG1haW4uYzo2OAorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiwgXCItYyBjb21tYW5kXCIgb3IgXCItLWNtZCBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICJUcm9wIGQnYXJndW1lbnRzIFwiK2NvbW1hbmRcIiwgXCItYyBjb21tYW5kXCIgb3UgXCItLWNtZCBjb21tYW5kXCIiCisKKyM6IG1haW4uYzo3MAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgZm9yIgorbXNnc3RyICJBcmd1bWVudCBpbnZhbGlkZSBwb3VyIgorCisjOiBtYWluLmM6NDY5Cittc2dpZCAiVGhpcyBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSBkaWZmIGZlYXR1cmUuIgorbXNnc3RyICJDZSBWaW0gbidhIHBhcyDpdOkgY29tcGls6SBhdmVjIGxhIGZvbmN0aW9ubmFsaXTpIGRpZmYiCisKKyM6IG1haW4uYzo5MjYKK21zZ2lkICJBdHRlbXB0IHRvIG9wZW4gc2NyaXB0IGZpbGUgYWdhaW46IFwiIgorbXNnc3RyICJOdmxlIHRlbnRhdGl2ZSBwb3VyIG91dnJpciBsZSBzY3JpcHQ6IFwiIgorCisjOiBtYWluLmM6OTMwIG1haW4uYzo5MzcgbWFpbi5jOjk4MSBtZW1saW5lLmM6MzY4MiBtZW1saW5lLmM6MzY4NgorbXNnaWQgIlwiXG4iCittc2dzdHIgIlwiXG4iCisKKyM6IG1haW4uYzo5MzUKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3IgcmVhZGluZzogXCIiCittc2dzdHIgIk5lIHBldXQgb3V2cmlyIGVuIGxlY3R1cmU6IFwiIgorCisjIHRvZG8KKyM6IG1haW4uYzo5NzkKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIk5lIHBldXQgb3V2cmlyIHBvdXIgbGEgc29ydGllIHNjcmlwdDogXCIiCisKKyM6IG1haW4uYzoxMTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZpbGVzIHRvIGVkaXRcbiIKK21zZ3N0ciAiJWQgZmljaGllcnMg4CDpZGl0ZXJcbiIKKworIzogbWFpbi5jOjEyMDMKK21zZ2lkICJWaW06IFdhcm5pbmc6IE91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IEFsZXJ0ZTogTGEgc29ydGllIG5lIHMnZWZmZWN0dWUgcGFzIHN1ciB1biB0ZXJtaW5hbFxuIgorCisjOiBtYWluLmM6MTIwNQorbXNnaWQgIlZpbTogV2FybmluZzogSW5wdXQgaXMgbm90IGZyb20gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IEFsZXJ0ZTogTCdlbnRy6WUgbmUgc2UgZmFpdCBwYXMgc3VyIHVuIHRlcm1pbmFsXG4iCisKKyMuIGp1c3QgaW4gY2FzZS4uCisjOiBtYWluLmM6MTI2NworbXNnaWQgInByZS12aW1yYyBjb21tYW5kIGxpbmUiCittc2dzdHIgImxpZ25lIGRlIGNvbW1hbmRlIHByZS12aW1yYyIKKworIzogbWFpbi5jOjEzMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IE5lIHBldXQgbGlyZSBcIiVzXCIiCisKKyM6IG1haW4uYzoyMzQ0Cittc2dpZCAiIgorIlxuIgorIk1vcmUgaW5mbyB3aXRoOiBcInZpbSAtaFwiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQbHVzIGQnaW5mbyBhdmVjOiBcInZpbSAtaFwiXG4iCisKKyM6IG1haW4uYzoyMzc3Cittc2dpZCAiW2ZpbGUgLi5dICAgICAgIGVkaXQgc3BlY2lmaWVkIGZpbGUocykiCittc2dzdHIgIltmaWNoaWVyIC4uLl0gIG91dnJpciBsZS9zIGZpY2hpZXIvcyBzcOljaWZp6S9zIgorCisjOiBtYWluLmM6MjM3OAorbXNnaWQgIi0gICAgICAgICAgICAgICByZWFkIHRleHQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiLSAgICAgICAgICAgICAgbGlyZSBsZSB0ZXh0ZSDgIHBhcnRpciBkZSBzdGRpbiIKKworIzogbWFpbi5jOjIzNzkKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCDpdGlxdWV0dGUgICBvdXZyaXIgbGUgZmljaGllciBxdWkgY29udGllbnQgbCfpdGlxdWV0dGUiCisKKyM6IG1haW4uYzoyMzgxCittc2dpZCAiLXEgW2Vycm9yZmlsZV0gIGVkaXQgZmlsZSB3aXRoIGZpcnN0IGVycm9yIgorbXNnc3RyICItcSBbZmljaEVycl0gICBvdXZyaXIgYXUgbml2ZWF1IGRlIGxhIHByZW1p6HJlIGVycmV1ciIKKworIzogbWFpbi5jOjIzOTAKK21zZ2lkICIiCisiXG4iCisiXG4iCisidXNhZ2U6IgorbXNnc3RyICIiCisiXG4iCisiXG4iCisidXRpbGlzZXI6IgorCisjOiBtYWluLmM6MjM5MworbXNnaWQgIiB2aW0gW2FyZ3VtZW50c10gIgorbXNnc3RyICIgdmltIFthcmdzXSAiCisKKyM6IG1haW4uYzoyMzk3Cittc2dpZCAiIgorIlxuIgorIiAgIG9yOiIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgIG91OiIKKworIzogbWFpbi5jOjI0MDAKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQXJndW1lbnRzOlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiQXJndW1lbnRzOlxuIgorCisjOiBtYWluLmM6MjQwMQorbXNnaWQgIi0tXHRcdFx0T25seSBmaWxlIG5hbWVzIGFmdGVyIHRoaXMiCittc2dzdHIgIi0tXHRcdFBsdXMgcXVlIGRlcyBub21zIGRlIGZpY2hpZXIgYXBy6HMgY2VjaSIKKworIzogbWFpbi5jOjI0MDMKK21zZ2lkICItLWxpdGVyYWxcdFx0RG9uJ3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiLS1saXRlcmFsXHROZSBwYXMgZOl2ZWxvcHBlciBsZXMgbel0YWNhcmFjdOhyZXMiCisKKyM6IG1haW4uYzoyNDA2Cittc2dpZCAiLXJlZ2lzdGVyXHRcdFJlZ2lzdGVyIHRoaXMgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItcmVnaXN0ZXJcdEluc2NyaXJlIGNlIGd2aW0gcG91ciBsJ09MRSIKKworIzogbWFpbi5jOjI0MDcKK21zZ2lkICItdW5yZWdpc3Rlclx0XHRVbnJlZ2lzdGVyIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXVucmVnaXN0ZXJcdETpc2luc2NyaXJlIGd2aW0gZGUgbCdPTEUiCisKKyM6IG1haW4uYzoyNDEwCittc2dpZCAiLWdcdFx0XHRSdW4gdXNpbmcgR1VJIChsaWtlIFwiZ3ZpbVwiKSIKK21zZ3N0ciAiLWdcdFx0TGFuY2VyIGwnaW50ZXJmYWNlIGdyYXBoaXF1ZSAoY29tbWUgXCJndmltXCIpIgorCisjOiBtYWluLmM6MjQxMQorbXNnaWQgIi1mICBvciAgLS1ub2ZvcmtcdEZvcmVncm91bmQ6IERvbid0IGZvcmsgd2hlbiBzdGFydGluZyBHVUkiCittc2dzdHIgIi1mLCAtLW5vZm9ya1x0QXZhbnQtcGxhbjsgbmUgcGFzIGTpdGFjaGVyIGwnaW50ZXJmYWNlIGdyYXBoaXF1ZSBkdSB0ZXJtaW5hbCIKKworIzogbWFpbi5jOjI0MTMKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0TW9kZSBWaSAoY29tbWUgXCJ2aVwiKSIKKworIzogbWFpbi5jOjI0MTQKK21zZ2lkICItZVx0XHRcdEV4IG1vZGUgKGxpa2UgXCJleFwiKSIKK21zZ3N0ciAiLWVcdFx0TW9kZSBFeCAoY29tbWUgXCJleFwiKSIKKworIzogbWFpbi5jOjI0MTUKK21zZ2lkICItc1x0XHRcdFNpbGVudCAoYmF0Y2gpIG1vZGUgKG9ubHkgZm9yIFwiZXhcIikiCittc2dzdHIgIi1zXHRcdE1vZGUgc2lsZW5jaWV1eCAoYmF0Y2gpIChzZXVsZW1lbnQgcG91ciBcImV4XCIpIgorCisjOiBtYWluLmM6MjQxNworbXNnaWQgIi1kXHRcdFx0RGlmZiBtb2RlIChsaWtlIFwidmltZGlmZlwiKSIKK21zZ3N0ciAiLWRcdFx0TW9kZSBEaWZmIChjb21tZSBcInZpbWRpZmZcIikiCisKKyM6IG1haW4uYzoyNDE5Cittc2dpZCAiLXlcdFx0XHRFYXN5IG1vZGUgKGxpa2UgXCJldmltXCIsIG1vZGVsZXNzKSIKK21zZ3N0ciAiLXlcdFx0TW9kZSBmYWNpbGUgKGNvbW1lIFwiZXZpbVwiLCB2aW0gc2FucyBtb2RlcykiCisKKyM6IG1haW4uYzoyNDIwCittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0TW9kZSBsZWN0dXJlIHNldWxlIChjb21tZSBcInZpZXdcIikiCisKKyM6IG1haW4uYzoyNDIxCittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRNb2RlIHJlc3RyZWludCAoY29tbWUgXCJydmltXCIpIgorCisjOiBtYWluLmM6MjQyMgorbXNnaWQgIi1tXHRcdFx0TW9kaWZpY2F0aW9ucyAod3JpdGluZyBmaWxlcykgbm90IGFsbG93ZWQiCittc2dzdHIgIi1tXHRcdEludGVyZGlyZSBsJ2VucmVnaXN0cmVtZW50IGRlIGZpY2hpZXJzIgorCisjOiBtYWluLmM6MjQyMworbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRJbnRlcmRpcmUgdG91dGUgbW9kaWZpY2F0aW9uIGRlIHRleHRlIgorCisjOiBtYWluLmM6MjQyNAorbXNnaWQgIi1iXHRcdFx0QmluYXJ5IG1vZGUiCittc2dzdHIgIi1iXHRcdE1vZGUgYmluYWlyZSIKKworIzogbWFpbi5jOjI0MjYKK21zZ2lkICItbFx0XHRcdExpc3AgbW9kZSIKK21zZ3N0ciAiLWxcdFx0TW9kZSBsaXNwIgorCisjOiBtYWluLmM6MjQyOAorbXNnaWQgIi1DXHRcdFx0Q29tcGF0aWJsZSB3aXRoIFZpOiAnY29tcGF0aWJsZSciCittc2dzdHIgIi1DXHRcdENvbXBhdGlibGUgYXZlYyBWaTogJ2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjQyOQorbXNnaWQgIi1OXHRcdFx0Tm90IGZ1bGx5IFZpIGNvbXBhdGlibGU6ICdub2NvbXBhdGlibGUnIgorbXNnc3RyICItTlx0XHRQYXMgdGVsbGVtZW50IGNvbXBhdGlibGUgYXZlYyBWaTogJ25vY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyNDMwCittc2dpZCAiLVZbTl1cdFx0VmVyYm9zZSBsZXZlbCIKK21zZ3N0ciAiLVZbTl1cdE5pdmVhdSBkZSB2ZXJib3NpdOkiCisKKyM6IG1haW4uYzoyNDMxCittc2dpZCAiLURcdFx0XHREZWJ1Z2dpbmcgbW9kZSIKK21zZ3N0ciAiLURcdFx0TW9kZSBkZSBk6WJvZ2FnZSIKKworIzogbWFpbi5jOjI0MzIKK21zZ2lkICItblx0XHRcdE5vIHN3YXAgZmlsZSwgdXNlIG1lbW9yeSBvbmx5IgorbXNnc3RyICItblx0XHROZSBwYXMgdXRpbGlzZXIgZGUgZmljaGllciBkJ+ljaGFuZ2UsIHNldWxlbWVudCBsYSBt6W1vaXJlIgorCisjOiBtYWluLmM6MjQzMworbXNnaWQgIi1yXHRcdFx0TGlzdCBzd2FwIGZpbGVzIGFuZCBleGl0IgorbXNnc3RyICItclx0XHRMaXN0ZXIgbGVzIGZpY2hpZXJzIGQn6WNoYW5nZSBwdWlzIHF1aXR0ZXIiCisKKyM6IG1haW4uYzoyNDM0Cittc2dpZCAiLXIgKHdpdGggZmlsZSBuYW1lKVx0UmVjb3ZlciBjcmFzaGVkIHNlc3Npb24iCittc2dzdHIgIi1yIDxmaWNoaWVyPlx0UuljdXDpcmVyIHVuZSBzZXNzaW9uIHBsYW506WUiCisKKyM6IG1haW4uYzoyNDM1Cittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRDb21tZSAtciIKKworIzogbWFpbi5jOjI0MzcKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdE5lIHBhcyB1dGlsaXNlciBuZXdjbGkgcG91ciBsJ291dmVydHVyZSBkZXMgZmVu6nRyZXMiCisKKyM6IG1haW4uYzoyNDM4Cittc2dpZCAiLWRldiA8ZGV2aWNlPlx0XHRVc2UgPGRldmljZT4gZm9yIEkvTyIKK21zZ3N0ciAiLWRldiA8cOlyaWY+XHRVdGlsaXNlciA8cOlyaXBo6XJpcXVlPiBwb3VyIGxlcyBFL1MiCisKKyM6IG1haW4uYzoyNDQxCittc2dpZCAiLUFcdFx0XHRzdGFydCBpbiBBcmFiaWMgbW9kZSIKK21zZ3N0ciAiLUFcdFx0ROltYXJyZXIgZW4gbW9kZSBhcmFiaXF1ZSIKKworIzogbWFpbi5jOjI0NDQKK21zZ2lkICItSFx0XHRcdFN0YXJ0IGluIEhlYnJldyBtb2RlIgorbXNnc3RyICItSFx0XHRE6W1hcnJlciBlbiBtb2RlIGjpYnJldSIKKworIzogbWFpbi5jOjI0NDcKK21zZ2lkICItRlx0XHRcdFN0YXJ0IGluIEZhcnNpIG1vZGUiCittc2dzdHIgIi1GXHRcdETpbWFycmVyIGVuIG1vZGUgZmFyc2kiCisKKyM6IG1haW4uYzoyNDQ5Cittc2dpZCAiLVQgPHRlcm1pbmFsPlx0U2V0IHRlcm1pbmFsIHR5cGUgdG8gPHRlcm1pbmFsPiIKK21zZ3N0ciAiLVQgPHRlcm0+XHRS6WdsZXIgbGUgdHlwZSBkdSB0ZXJtaW5hbCBzdXIgPHRlcm1pbmFsPiIKKworIzogbWFpbi5jOjI0NTAKK21zZ2lkICItdSA8dmltcmM+XHRcdFVzZSA8dmltcmM+IGluc3RlYWQgb2YgYW55IC52aW1yYyIKK21zZ3N0ciAiLXUgPHZpbXJjPlx0VXRpbGlzZXIgPHZpbXJjPiBhdSBsaWV1IGR1IHZpbXJjIGhhYml0dWVsIgorCisjOiBtYWluLmM6MjQ1MgorbXNnaWQgIi1VIDxndmltcmM+XHRcdFVzZSA8Z3ZpbXJjPiBpbnN0ZWFkIG9mIGFueSAuZ3ZpbXJjIgorbXNnc3RyICItVSA8Z3ZpbXJjPlx0VXRpbGlzZXIgPGd2aW1yYz4gYXUgbGlldSBkdSBndmltcmMgaGFiaXR1ZWwiCisKKyMgdG9kbworIzogbWFpbi5jOjI0NTQKK21zZ2lkICItLW5vcGx1Z2luXHRcdERvbid0IGxvYWQgcGx1Z2luIHNjcmlwdHMiCittc2dzdHIgIi0tbm9wbHVnaW5cdE5lIGNoYXJnZXIgYXVjdW4gcGx1Z2luIHNjcmlwdOkiCisKKyM6IG1haW4uYzoyNDU1Cittc2dpZCAiLW9bTl1cdFx0T3BlbiBOIHdpbmRvd3MgKGRlZmF1bHQ6IG9uZSBmb3IgZWFjaCBmaWxlKSIKK21zZ3N0ciAiLW9bTl1cdE91dnJpciBOIGZlbup0cmVzIChk6WZhdXQ6IHVuZSBwb3VyIGNoYXF1ZSBmaWNoaWVyKSIKKworIzogbWFpbi5jOjI0NTYKK21zZ2lkICItT1tOXVx0XHRMaWtlIC1vIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5IgorbXNnc3RyICItT1tOXVx0Q29tbWUgLW8sIG1haXMgc+lwYXJlciB2ZXJ0aWNhbGVtZW50IgorCisjOiBtYWluLmM6MjQ1NworbXNnaWQgIitcdFx0XHRTdGFydCBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiK1x0XHRE6W1hcnJlciBlbiBiYXMgZHUgZmljaGllciIKKworIzogbWFpbi5jOjI0NTgKK21zZ2lkICIrPGxudW0+XHRcdFN0YXJ0IGF0IGxpbmUgPGxudW0+IgorbXNnc3RyICIrPG51bUw+XHRE6W1hcnJlciDgIGxhIGxpZ25lIDxudW1MPiIKKworIzogbWFpbi5jOjI0NjAKK21zZ2lkICItLWNtZCA8Y29tbWFuZD5cdEV4ZWN1dGUgPGNvbW1hbmQ+IGJlZm9yZSBsb2FkaW5nIGFueSB2aW1yYyBmaWxlIgorbXNnc3RyICItLWNtZCA8Y21kZT5cdEV46WN1dGVyIDxjb21tYW5kZT4gYXZhbnQgbeptZSBkZSBjaGFyZ2VyIGxlcyB2aW1yYyIKKworIzogbWFpbi5jOjI0NjIKK21zZ2lkICItYyA8Y29tbWFuZD5cdFx0RXhlY3V0ZSA8Y29tbWFuZD4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLWMgPGNtZGU+XHRFeOljdXRlciA8Y29tbWFuZGU+IHVuZSBmb2lzIGxlIDFlciBmaWNoaWVyIGNoYXJn6SIKKworIzogbWFpbi5jOjI0NjMKK21zZ2lkICItUyA8c2Vzc2lvbj5cdFx0U291cmNlIGZpbGUgPHNlc3Npb24+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1TIDxzZXNzaW9uPlx0TGlyZSBsZSBmaWNoaWVyIDxzZXNzaW9uPiB1bmUgZm9pcyBsZSAxZXIgZmljaGllciBjaGFyZ+kiCisKKyM6IG1haW4uYzoyNDY0Cittc2dpZCAiLXMgPHNjcmlwdGluPlx0UmVhZCBOb3JtYWwgbW9kZSBjb21tYW5kcyBmcm9tIGZpbGUgPHNjcmlwdGluPiIKK21zZ3N0ciAiLXMgPHNyYz5cdExpcmUgbGVzIGNvbW1hbmRlcyBkdSBtb2RlIE5vcm1hbCDgIHBhcnRpciBkdSBmaWNoaWVyIDxzcmM+IgorCisjOiBtYWluLmM6MjQ2NQorbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDxkZXN0Plx0QWpvdXRlciB0b3V0ZXMgbGVzIGNvbW1hbmRlcyB0YXDpZXMgZGFucyBsZSBmaWNoaWVyIDxkZXN0PiIKKworIzogbWFpbi5jOjI0NjYKK21zZ2lkICItVyA8c2NyaXB0b3V0Plx0V3JpdGUgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi1XIDxkZXN0Plx0yWNyaXJlIHRvdXRlcyBsZXMgY29tbWFuZGVzIHRhcOllcyBkYW5zIGxlIGZpY2hpZXIgPGRlc3Q+IgorCisjOiBtYWluLmM6MjQ2OAorbXNnaWQgIi14XHRcdFx0RWRpdCBlbmNyeXB0ZWQgZmlsZXMiCittc2dzdHIgIi14XHRcdFx0yWRpdGVyIGRlcyBmaWNoaWVycyBlbmNvZOlzIgorCisjOiBtYWluLmM6MjQ3MgorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0Q29ubmVjdCB2aW0gdG8gdGhpcyBwYXJ0aWN1bGFyIFgtc2VydmVyIgorbXNnc3RyICItZGlzcGxheSA86WNyYW4+XHRDb25uZWN0ZXIgVmltIGF1IHNlcnZldXIgWCBpbmRpcXXpIGRhbnMgPOljcmFuPiIKKworIzogbWFpbi5jOjI0NzQKK21zZ2lkICItWFx0XHRcdERvIG5vdCBjb25uZWN0IHRvIFggc2VydmVyIgorbXNnc3RyICItWFx0XHRcdE5lIHNlIGNvbm5lY3RlciDgIGF1Y3VuIHNlcnZldXIgWCIKKworIzogbWFpbi5jOjI0NzcKK21zZ2lkICItLXJlbW90ZSA8ZmlsZXM+XHRFZGl0IDxmaWxlcz4gaW4gYSBWaW0gc2VydmVyIGlmIHBvc3NpYmxlIgorbXNnc3RyICItLXJlbW90ZSA8ZmljaD5cdMlkaXRlciBsZXMgPGZpY2hpZXJzPiBkYW5zIHVuIHNlcnZldXIgVmltIHNpIHBvc3NpYmxlIgorCisjOiBtYWluLmM6MjQ3OAorbXNnaWQgIi0tcmVtb3RlLXNpbGVudCA8ZmlsZXM+ICBTYW1lLCBkb24ndCBjb21wbGFpbiBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIiCittc2dzdHIgIiIKKyItLXJlbW90ZS1zaWxlbnQgLi4uXHRQYXJlaWwsIG1haXMgcGFzIGRlIHBsYWludGUgcydpbCBuJ3kgYSBwYXMgZGUgc2VydmV1ciIKKworIzogbWFpbi5jOjI0NzkKK21zZ2lkICIiCisiLS1yZW1vdGUtd2FpdCA8ZmlsZXM+ICBBcyAtLXJlbW90ZSBidXQgd2FpdCBmb3IgZmlsZXMgdG8gaGF2ZSBiZWVuIGVkaXRlZCIKK21zZ3N0ciAiLS1yZW1vdGUtd2FpdCA8ZmljaD5cdENvbW1lIC0tcmVtb3RlIG1haXMgbmUgcXVpdHRlciBxdSfgIGxhIGZpbiBkZSBsJ+lkaXRpb24iCisKKyM6IG1haW4uYzoyNDgwCittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50XHRQYXJlaWwsIG1haXMgcGFzIGRlIHBsYWludGUgcydpbCBuJ3kgYSBwYXMgZGUgIgorInNlcnZldXIiCisKKyM6IG1haW4uYzoyNDgxCittc2dpZCAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFNlbmQgPGtleXM+IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUtc2VuZCA8dGNoZT5cdEVudm95ZXIgPHRvdWNoZXM+IOAgdW4gc2VydmV1ciBWaW0gcHVpcyBxdWl0dGVyIgorCisjOiBtYWluLmM6MjQ4MgorbXNnaWQgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWF0ZSA8ZXhwcj4gaW4gYSBWaW0gc2VydmVyIGFuZCBwcmludCByZXN1bHQiCittc2dzdHIgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHTJdmFsdWVyIDxleHA+IGRhbnMgdW4gc2VydmV1ciBWaW0sIGFmZmljaGVyIGxlIHLpc3VsdGF0IgorCisjOiBtYWluLmM6MjQ4MworbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICIiCisiLS1zZXJ2ZXJsaXN0XHRcdExpc3RlciBsZXMgbm9tcyBkZXMgc2VydmV1cnMgVmltIGRpc3BvbmlibGVzIGV0IHF1aXR0ZXIiCisKKyM6IG1haW4uYzoyNDg0Cittc2dpZCAiLS1zZXJ2ZXJuYW1lIDxuYW1lPlx0U2VuZCB0by9iZWNvbWUgdGhlIFZpbSBzZXJ2ZXIgPG5hbWU+IgorbXNnc3RyICItLXNlcnZlcm5hbWUgPG5vbT5cdEVudm95ZXIgYXUgLyBEZXZlbmlyIGxlIHNlcnZldXIgVmltIG5vbW3pIDxub20+IgorCisjOiBtYWluLmM6MjQ4NworbXNnaWQgIi1pIDx2aW1pbmZvPlx0XHRVc2UgPHZpbWluZm8+IGluc3RlYWQgb2YgLnZpbWluZm8iCittc2dzdHIgIi1pIDx2aW1pbmZvPlx0XHRVdGlsaXNlciA8dmltaW5mbz4gYXUgbGlldSBkdSB2aW1pbmZvIGhhYml0dWVsIgorCisjOiBtYWluLmM6MjQ4OQorbXNnaWQgIi1oICBvciAgLS1oZWxwXHRQcmludCBIZWxwICh0aGlzIG1lc3NhZ2UpIGFuZCBleGl0IgorbXNnc3RyICItaCBvdSAtLWhlbHBcdFx0QWZmaWNoZXIgbCdhaWRlIChjZSBtZXNzYWdlKSBwdWlzIHF1aXR0ZXIiCisKKyM6IG1haW4uYzoyNDkwCittc2dpZCAiLS12ZXJzaW9uXHRcdFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQiCittc2dzdHIgIi0tdmVyc2lvblx0XHRBZmZpY2hlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZlcnNpb24gcHVpcyBxdWl0dGVyIgorCisjOiBtYWluLmM6MjQ5NAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChNb3RpZiB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvbm51cyBwYXIgZ3ZpbSAodmVyc2lvbiBNb3RpZik6XG4iCisKKyM6IG1haW4uYzoyNDk4Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKG5lWHRhdyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvbm51cyBwYXIgZ3ZpbSAodmVyc2lvbiBuZVh0YXcpOlxuIgorCisjOiBtYWluLmM6MjUwMAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChBdGhlbmEgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb25udXMgcGFyIGd2aW0gKHZlcnNpb24gQXRoZW5hKTpcbiIKKworIzogbWFpbi5jOjI1MDQKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IgorbXNnc3RyICItZGlzcGxheSA86WNyYW4+XHRMYW5jZXIgVmltIHN1ciBjZXQgPOljcmFuPiIKKworIzogbWFpbi5jOjI1MDUKK21zZ2lkICItaWNvbmljXHRcdFN0YXJ0IHZpbSBpY29uaWZpZWQiCittc2dzdHIgIi1pY29uaWNcdFx0SWNvbmlmaWVyIFZpbSBhdSBk6W1hcnJhZ2UiCisKKyM6IG1haW4uYzoyNTA3Cittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG5vbT5cdFx0RW1wbG95ZXIgbGVzIHJlc3NvdXJjZXMgY29tbWUgc2kgVmltIHMnYXBwZWxhaXQgPG5vbT4iCisKKyM6IG1haW4uYzoyNTA4Cittc2dpZCAiXHRcdFx0ICAoVW5pbXBsZW1lbnRlZClcbiIKK21zZ3N0ciAiXHRcdFx0ICAocGFzIGltcGzpbWVudOkpXG4iCisKKyM6IG1haW4uYzoyNTEwCittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8Y291bD5cdFV0aWxpc2VyIDxjb3VsZXVyPiBwb3VyIGwnYXJyaehyZS1wbGFuXHQgICAgKGFicnY6IC1iZykiCisKKyM6IG1haW4uYzoyNTExCittc2dpZCAiLWZvcmVncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIG5vcm1hbCB0ZXh0IChhbHNvOiAtZmcpIgorbXNnc3RyICIiCisiLWZvcmVncm91bmQgPGNvdWw+XHRVdGlsaXNlciA8Y291bGV1cj4gcG91ciBsZSB0ZXh0ZSBub3JtYWxcdCAgICAoYWJydjogLWZnKSIKKworIzogbWFpbi5jOjI1MTIgbWFpbi5jOjI1MzIKK21zZ2lkICItZm9udCA8Zm9udD5cdFx0VXNlIDxmb250PiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mbikiCittc2dzdHIgIi1mb250IDxmb250ZT5cdFV0aWxpc2VyIDxmb250ZT4gcG91ciBsZSB0ZXh0ZSBub3JtYWxcdCAgICAoYWJydjogLWZuKSIKKworIzogbWFpbi5jOjI1MTMKK21zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCittc2dzdHIgIi1ib2xkZm9udCA8Zm9udGU+XHRVdGlsaXNlciA8Zm9udGU+IHBvdXIgbGUgdGV4dGUgZ3JhcyIKKworIzogbWFpbi5jOjI1MTQKK21zZ2lkICItaXRhbGljZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGl0YWxpYyB0ZXh0IgorbXNnc3RyICItaXRhbGljZm9udCA8Zm9udGU+XHRVdGlsaXNlciA8Zm9udGU+IHBvdXIgbGUgdGV4dGUgaXRhbGlxdWUiCisKKyM6IG1haW4uYzoyNTE1IG1haW4uYzoyNTMzCittc2dpZCAiLWdlb21ldHJ5IDxnZW9tPlx0VXNlIDxnZW9tPiBmb3IgaW5pdGlhbCBnZW9tZXRyeSAoYWxzbzogLWdlb20pIgorbXNnc3RyICItZ2VvbWV0cnkgPGfpb20+XHRVdGlsaXNlciBjZXR0ZSA8Z+lvbel0cmllPiBpbml0aWFsZVx0ICAoYWJydjogLWdlb20pIgorCisjOiBtYWluLmM6MjUxNgorbXNnaWQgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHRVc2UgYSBib3JkZXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLWJ3KSIKK21zZ3N0ciAiLWJvcmRlcndpZHRoIDzpcGFpcz5cdFV0aWxpc2VyIGNldHRlIDzpcGFpc3NldXI+IGRlIGJvcmR1cmVcdCAgICAoYWJydjogLWJ3KSIKKworIzogbWFpbi5jOjI1MTcKK21zZ2lkICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgVXNlIGEgc2Nyb2xsYmFyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1zdykiCittc2dzdHIgIi1zY3JvbGxiYXJ3aWR0aCA8bGc+XHRVdGlsaXNlciBjZXR0ZSA8bGFyZ2V1cj4gZGUgYmFycmUgZGUgZOlmaWwuIChhYnJ2OiAtc3cpIgorCisjOiBtYWluLmM6MjUxOQorbXNnaWQgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHRVc2UgYSBtZW51IGJhciBoZWlnaHQgb2YgPGhlaWdodD4gKGFsc286IC1taCkiCittc2dzdHIgIi1tZW51aGVpZ2h0IDxoYXV0Plx0VXRpbGlzZXIgY2V0dGUgPGhhdXRldXI+IGRlIG1lbnVcdCAgICAoYWJydjogLW1oKSIKKworIzogbWFpbi5jOjI1MjEgbWFpbi5jOjI1MzQKK21zZ2lkICItcmV2ZXJzZVx0XHRVc2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogLXJ2KSIKK21zZ3N0ciAiLXJldmVyc2VcdFx0VXRpbGlzZXIgbGEgdmlk6W8gaW52ZXJz6WVcdFx0ICAgIChhYnJ2OiAtcnYpIgorCisjOiBtYWluLmM6MjUyMgorbXNnaWQgIityZXZlcnNlXHRcdERvbid0IHVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiArcnYpIgorbXNnc3RyICIrcmV2ZXJzZVx0XHROZSBwYXMgdXRpbGlzZXIgZGUgdmlk6W8gaW52ZXJz6WVcdCAgICAoYWJydjogK3J2KSIKKworIzogbWFpbi5jOjI1MjMKK21zZ2lkICIteHJtIDxyZXNvdXJjZT5cdFNldCB0aGUgc3BlY2lmaWVkIHJlc291cmNlIgorbXNnc3RyICIteHJtIDxyZXNzb3VyY2U+XHRDb25maWd1cmVyIGxhIDxyZXNzb3VyY2U+IHNw6WNpZmnpZSIKKworIzogbWFpbi5jOjI1MjYKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoUklTQyBPUyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvbm51cyBwYXIgZ3ZpbSAodmVyc2lvbiBSSVNDIE9TKTpcbiIKKworIzogbWFpbi5jOjI1MjcKK21zZ2lkICItLWNvbHVtbnMgPG51bWJlcj5cdEluaXRpYWwgd2lkdGggb2Ygd2luZG93IGluIGNvbHVtbnMiCittc2dzdHIgIi0tY29sdW1ucyA8bm9tYnJlPlx0Tm9tYnJlIGRlIGNvbG9ubmVzIGluaXRpYWwgZGUgbGEgZmVu6nRyZSIKKworIzogbWFpbi5jOjI1MjgKK21zZ2lkICItLXJvd3MgPG51bWJlcj5cdEluaXRpYWwgaGVpZ2h0IG9mIHdpbmRvdyBpbiByb3dzIgorbXNnc3RyICItLXJvd3MgPG5vbWJyZT5cdE5vbWJyZSBkZSBsaWduZXMgaW5pdGlhbCBkZSBsYSBmZW7qdHJlIgorCisjOiBtYWluLmM6MjUzMQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29ubnVzIHBhciBndmltICh2ZXJzaW9uIEdUSyspOlxuIgorCisjOiBtYWluLmM6MjUzNQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4gKGFsc286IC0tZGlzcGxheSkiCittc2dzdHIgIi1kaXNwbGF5IDzpY3Jhbj5cdExhbmNlciBWaW0gc3VyIGNldCA86WNyYW4+XHQgKOlnYWxlbWVudDogLS1kaXNwbGF5KSIKKworIzogbWFpbi5jOjI1MzcKK21zZ2lkICItLXJvbGUgPHJvbGU+XHRTZXQgYSB1bmlxdWUgcm9sZSB0byBpZGVudGlmeSB0aGUgbWFpbiB3aW5kb3ciCittc2dzdHIgIiIKKyItLXJvbGUgPHL0bGU+XHRcdEVuZG9zc2UgdW4gcvRsZSB1bmlxdWUgcG91ciBpZGVudGlmaWVyIGxhIGZlbup0cmUgcHJpbmNpcGFsZSIKKworIzogbWFpbi5jOjI1MzkKK21zZ2lkICItLXNvY2tldGlkIDx4aWQ+XHRPcGVuIFZpbSBpbnNpZGUgYW5vdGhlciBHVEsgd2lkZ2V0IgorbXNnc3RyICItLXNvY2tldGlkIDx4aWQ+XHRPdXZyaXIgVmltIGRhbnMgdW4gYXV0cmUgd2lkZ2V0IEdUSyIKKworIzogbWFpbi5jOjI1NDEKK21zZ2lkICItLWhlbHBcdFx0U2hvdyBHbm9tZSBhcmd1bWVudHMiCittc2dzdHIgIi0taGVscFx0XHRBZmZpY2hlciBsZXMgYXJndW1lbnRzIEdOT01FIgorCisjIFRPRE8KKyM6IG1haW4uYzoyNzczCittc2dpZCAiTm8gZGlzcGxheSIKK21zZ3N0ciAiUGFzIGRlIGRpc3BsYXkiCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyNzg4Cittc2dpZCAiOiBTZW5kIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiBMJ2Vudm9pIGEg6WNob3XpLlxuIgorCisjLiBMZXQgdmltIHN0YXJ0IG5vcm1hbGx5LgorIzogbWFpbi5jOjI3OTQKK21zZ2lkICI6IFNlbmQgZmFpbGVkLiBUcnlpbmcgdG8gZXhlY3V0ZSBsb2NhbGx5XG4iCittc2dzdHIgIjogTCdlbnZvaSBhIOljaG916S4gVGVudGF0aXZlIGQnZXjpY3V0aW9uIGxvY2FsZVxuIgorCisjOiBtYWluLmM6MjgzMiBtYWluLmM6Mjg1MworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBvZiAlZCBlZGl0ZWQiCittc2dzdHIgIiVkIGRlICVkIOlkaXTpcyIKKworIyBUT0RPCisjOiBtYWluLmM6Mjg3NQorbXNnaWQgIk5vIGRpc3BsYXk6IFNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIlBhcyBkZSBkaXNwbGF5OiBMJ2Vudm9pIGRlIGwnZXhwcmVzc2lvbiBhIOljaG916S5cbiIKKworIzogbWFpbi5jOjI4ODcKK21zZ2lkICI6IFNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIjogTCdlbnZvaSBkZSBsJ2V4cHJlc3Npb24gYSDpY2hvdekuXG4iCisKKyM6IG1hcmsuYzo2NTYKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIkF1Y3VuZSBtYXJxdWUgYWN0aXbpZSIKKworIzogbWFyay5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgzOiBObyBtYXJrcyBtYXRjaGluZyBcIiVzXCIiCittc2dzdHIgIkUyODM6IEF1Y3VuZSBtYXJxdWUgbmUgY29ycmVzcG9uZCDgIFwiJXNcIiIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NjY5Cittc2dpZCAiIgorIlxuIgorIm1hcmsgbGluZSAgY29sIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIm1hcnEgbGlnbmUgY29sIGZpY2hpZXIvdGV4dGUiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjcwNworbXNnaWQgIiIKKyJcbiIKKyIganVtcCBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiIHNhdXQgbGlnbmUgY29sIGZpY2hpZXIvdGV4dGUiCisKKyM6IG1hcmsuYzoxMDcyCittc2dpZCAiIgorIlxuIgorIiMgRmlsZSBtYXJrczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgTWFycXVlcyBkYW5zIGxlIGZpY2hpZXI6XG4iCisKKyMgVE9ETworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMTA3Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIExpc3QgZGUgc2F1dCAobGUgcGx1cyBy6WNlbnQgZW4gcHJlbWllcik6XG4iCisKKyM6IG1hcmsuYzoxMjAyCittc2dpZCAiIgorIlxuIgorIiMgSGlzdG9yeSBvZiBtYXJrcyB3aXRoaW4gZmlsZXMgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBIaXN0b3JpcXVlIGRlcyBtYXJxdWVzIGRhbnMgbGVzIGZpY2hpZXJzIChjaHJvbm9sb2dpZSBk6WNyb2lzc2FudGUpOlxuIgorCisjOiBtYXJrLmM6MTI4NQorbXNnaWQgIk1pc3NpbmcgJz4nIgorbXNnc3RyICInPicgbWFucXVhbnQiCisKKyM6IG1ieXRlLmM6NDA5Cittc2dpZCAiRTU0MzogTm90IGEgdmFsaWQgY29kZXBhZ2UiCittc2dzdHIgIkU1NDM6IFBhcyB1bmUgcGFnZSBkZSBjb2RlcyB2YWxhYmxlIgorCisjOiBtYnl0ZS5jOjQwMTQKK21zZ2lkICJFMjg0OiBDYW5ub3Qgc2V0IElDIHZhbHVlcyIKK21zZ3N0ciAiRTI4NDogSW1wb3NzaWJsZSBkZSBy6WdsZXIgbGVzIHZhbGV1cnMgSUMiCisKKyM6IG1ieXRlLmM6NDE2NgorbXNnaWQgIkUyODU6IEZhaWxlZCB0byBjcmVhdGUgaW5wdXQgY29udGV4dCIKK21zZ3N0ciAiRTI4NTogRXJyZXVyIGRlIGNy6WF0aW9uIGR1IGNvbnRleHRlIGRlIHNhaXNpZSIKKworIzogbWJ5dGUuYzo0MzEzCittc2dpZCAiRTI4NjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgbWV0aG9kIgorbXNnc3RyICJFMjg2OiBFcnJldXIgZCdvdXZlcnR1cmUgZGUgbGEgbel0aG9kZSBkZSBzYWlzaWUiCisKKyMgVE9ETworIzogbWJ5dGUuYzo0MzI0Cittc2dpZCAiRTI4NzogV2FybmluZzogQ291bGQgbm90IHNldCBkZXN0cm95IGNhbGxiYWNrIHRvIElNIgorbXNnc3RyICJFMjg3OiBBbGVydGU6IFBhcyBwdSDpdGFibGlyIGQnYXBwZWwgZGUgZGVzdHJ1Y3Rpb24gZGFucyBsYSBNUyIKKworIzogbWJ5dGUuYzo0MzMwCittc2dpZCAiRTI4ODogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgc3R5bGUiCittc2dzdHIgIkUyODg6IGxhIG3pdGhvZGUgZGUgc2Fpc2llIG5lIHN1cHBvcnRlIGF1Y3VuIHN0eWxlIgorCisjOiBtYnl0ZS5jOjQzODcKK21zZ2lkICJFMjg5OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IG15IHByZWVkaXQgdHlwZSIKK21zZ3N0ciAiRTI4OTogbGEgbel0aG9kZSBkZSBzYWlzaWUgbmUgc3VwcG9ydGUgcGFzIG1vbiB0eXBlIGRlIHBy6elkaXRpb24iCisKKyMgVE9ETworIzogbWJ5dGUuYzo0NDYxCittc2dpZCAiRTI5MDogb3Zlci10aGUtc3BvdCBzdHlsZSByZXF1aXJlcyBmb250c2V0IgorbXNnc3RyICJFMjkwOiBsZSBzdHlsZSBvdmVyLXRoZS1zcG90IG7pY2Vzc2l0ZSB1biBmb250c2V0IgorCisjOiBtYnl0ZS5jOjQ0OTMKK21zZ2lkICJFMjkxOiBZb3VyIEdUSysgaXMgb2xkZXIgdGhhbiAxLjIuMy4gU3RhdHVzIGFyZWEgZGlzYWJsZWQiCittc2dzdHIgIkUyOTE6IFZvdHJlIEdUSysgZXN0IHBsdXMgYW5jaWVuIHF1ZSAxLjIuMy4gWm9uZSBkJ+l0YXQgZOlzYWN0aXbpZSIKKworIzogbWJ5dGUuYzo0NzcyCittc2dpZCAiRTI5MjogSW5wdXQgTWV0aG9kIFNlcnZlciBpcyBub3QgcnVubmluZyIKK21zZ3N0ciAiRTI5MjogTGUgU2VydmV1ciBkZSBN6XRob2RlcyBkZSBTYWlzaWUgbidlc3QgcGFzIGxhbmPpIgorCisjOiBtZW1maWxlLmM6NDg4Cittc2dpZCAiRTI5MzogYmxvY2sgd2FzIG5vdCBsb2NrZWQiCittc2dzdHIgIkUyOTM6IGxlIGJsb2MgbifpdGFpdCBwYXMgdmVyb3VpbGzpIgorCisjOiBtZW1maWxlLmM6OTg5Cittc2dpZCAiRTI5NDogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgcmVhZCIKK21zZ3N0ciAiRTI5NDogRXJyZXVyIGRlIHBvc2l0aW9ubmVtZW50IGxvcnMgZGUgbGEgbGVjdHVyZSBkdSBmaWNoaWVyIGQn6WNoYW5nZSIKKworIzogbWVtZmlsZS5jOjk5NAorbXNnaWQgIkUyOTU6IFJlYWQgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk1OiBFcnJldXIgZGUgbGVjdHVyZSBkYW5zIGxlIGZpY2hpZXIgZCfpY2hhbmdlIgorCisjOiBtZW1maWxlLmM6MTA0NgorbXNnaWQgIkUyOTY6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHdyaXRlIgorbXNnc3RyICJFMjk2OiBFcnJldXIgZGUgcG9zaXRpb25uZW1lbnQgbG9ycyBkZSBsJ+ljcml0dXJlIGR1IGZpY2hpZXIgZCfpY2hhbmdlIgorCisjOiBtZW1maWxlLmM6MTA2NAorbXNnaWQgIkUyOTc6IFdyaXRlIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5NzogRXJyZXVyIGQn6WNyaXR1cmUgZGFucyBsZSBmaWNoaWVyIGQn6WNoYW5nZSIKKworIzogbWVtZmlsZS5jOjEyNjEKK21zZ2lkICJFMzAwOiBTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMgKHN5bWxpbmsgYXR0YWNrPykiCittc2dzdHIgIkUzMDA6IExlIGZpY2hpZXIgZCfpY2hhbmdlIGV4aXN0ZSBk6WrgIChhdHRhcXVlIHBhciBzeW1saW5rID8pIgorCisjOiBtZW1saW5lLmM6Mjc1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIKK21zZ3N0ciAiRTI5ODogUGFzIHLpY3Vw6XLpIGxlIGJsb2MgbrAwID8iCisKKyM6IG1lbWxpbmUuYzozMTUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDE/IgorbXNnc3RyICJFMjk4OiBQYXMgculjdXDpcukgbGUgYmxvYyBusDEgPyIKKworIzogbWVtbGluZS5jOjMzMworbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMj8iCittc2dzdHIgIkUyOTg6IFBhcyBy6WN1cOly6SBsZSBibG9jIG6wMiA/IgorCisjLiBjb3VsZCBub3QgKHJlKW9wZW4gdGhlIHN3YXAgZmlsZSwgd2hhdCBjYW4gd2UgZG8/Pz8/CisjOiBtZW1saW5lLmM6NDQzCittc2dpZCAiRTMwMTogT29wcywgbG9zdCB0aGUgc3dhcCBmaWxlISEhIgorbXNnc3RyICJFMzAxOiBPdXBzLCBvbiBhIHBlcmR1IGxlIGZpY2hpZXIgZCfpY2hhbmdlICEiCisKKyM6IG1lbWxpbmUuYzo0NDgKK21zZ2lkICJFMzAyOiBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwMjogUGFzIHB1IHJlbm9tbWVyIGxlIGZpY2hpZXIgZCfpY2hhbmdlIgorCisjOiBtZW1saW5lLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDM6IFVuYWJsZSB0byBvcGVuIHN3YXAgZmlsZSBmb3IgXCIlc1wiLCByZWNvdmVyeSBpbXBvc3NpYmxlIgorbXNnc3RyICJFMzAzOiBQYXMgcHUgb3V2cmlyIGZpY2hpZXIgLnN3cCBwb3VyIFwiJXNcIiwgculjdXAuIGltcG9zc2libGUiCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiBtbF90aW1lc3RhbXA6IFBhcyBy6WN1cOly6SBsZSBibG9jIDAgPyEiCisKKyM6IG1lbWxpbmUuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNTogTm8gc3dhcCBmaWxlIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiRTMwNTogUGFzIGRlIGZpY2hpZXIgZCfpY2hhbmdlIHRyb3V26SBwb3VyICVzIgorCisjOiBtZW1saW5lLmM6NzY3Cittc2dpZCAiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIKK21zZ3N0ciAiRW50cmUgbGUgbnVt6XJvIGR1IGZpY2hpZXIgZCfpY2hhbmdlIOAgdXRpbGlzZXIgKDAgcG91ciBxdWl0dGVyKTogIgorCisjOiBtZW1saW5lLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDY6IENhbm5vdCBvcGVuICVzIgorbXNnc3RyICJFMzA2OiBOZSBwZXV0IG91dnJpciAlcyIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIkluY2FwYWJsZSBkZSBsaXJlIGxlIGJsb2MgMCBkZSAiCisKKyMgVE9ETworIzogbWVtbGluZS5jOjgzNworbXNnaWQgIiIKKyJcbiIKKyJNYXliZSBubyBjaGFuZ2VzIHdlcmUgbWFkZSBvciBWaW0gZGlkIG5vdCB1cGRhdGUgdGhlIHN3YXAgZmlsZS4iCittc2dzdHIgIiIKKyJcbiIKKyJQZXV0Lep0cmUgcXUnYXVjdW5lIG1vZGlmLiBuJ2Eg6XTpIGZhaXRlIG91IFZpbSBuJ2EgcGFzIG1pcyDgIGpvdXIgbGUgZmljaGllciBkJ+ljaGFuZ2UuIgorCisjOiBtZW1saW5lLmM6ODQ3IG1lbWxpbmUuYzo4NjQKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltLlxuIgorbXNnc3RyICIgbmUgcGV1dCDqdHJlIHV0aWxpc+kgYXZlYyBjZXR0ZSB2ZXJzaW9uIGRlIFZpbS5cbiIKKworIzogbWVtbGluZS5jOjg0OQorbXNnaWQgIlVzZSBWaW0gdmVyc2lvbiAzLjAuXG4iCittc2dzdHIgIlV0aWxpc2V6IFZpbSB2ZXJzaW9uIDMuMC5cbiIKKworIzogbWVtbGluZS5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA3OiAlcyBkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlIgorbXNnc3RyICJFMzA3OiAlcyBuZSBzZW1ibGUgcGFzIOp0cmUgdW4gZmljaGllciBkJ+ljaGFuZ2UgZGUgVmltIgorCisjOiBtZW1saW5lLmM6ODY4Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIG9uIHRoaXMgY29tcHV0ZXIuXG4iCittc2dzdHIgIiBuZSBwZXV0IOp0cmUgdXRpbGlz6SBzdXIgY2V0IG9yZGluYXRldXIuXG4iCisKKyM6IG1lbWxpbmUuYzo4NzAKK21zZ2lkICJUaGUgZmlsZSB3YXMgY3JlYXRlZCBvbiAiCittc2dzdHIgIkxlIGZpY2hpZXIgYSDpdOkgY3Lp6SBsZSAiCisKKyM6IG1lbWxpbmUuYzo4NzQKK21zZ2lkICIiCisiLFxuIgorIm9yIHRoZSBmaWxlIGhhcyBiZWVuIGRhbWFnZWQuIgorbXNnc3RyICIiCisiLFxuIgorIm91IGxlIGZpY2hpZXIgYSDpdOkgZW5kb21tYWfpLiIKKworIzogbWVtbGluZS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIgorbXNnc3RyICJVdGlsaXNhdGlvbiBkdSBmaWNoaWVyIGQn6WNoYW5nZSBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3JpZ2luYWwgZmlsZSBcIiVzXCIiCittc2dzdHIgIkZpY2hpZXIgb3JpZ2luYWwgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTIyCittc2dpZCAiRTMwODogV2FybmluZzogT3JpZ2luYWwgZmlsZSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQiCittc2dzdHIgIkUzMDg6IEFsZXJ0ZTogTGUgZmljaGllciBvcmlnaW5hbCBhIHB1IOp0cmUgY2hhbmfpIgorCisjOiBtZW1saW5lLmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDk6IFVuYWJsZSB0byByZWFkIGJsb2NrIDEgZnJvbSAlcyIKK21zZ3N0ciAiRTMwOTogSW5jYXBhYmxlIGRlIGxpcmUgbGUgYmxvYyAxIGRlICVzIgorCisjOiBtZW1saW5lLmM6OTY3Cittc2dpZCAiPz8/TUFOWSBMSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz9CRUFVQ09VUCBERSBMSUdORVMgTUFOUVVFTlQiCisKKyM6IG1lbWxpbmUuYzo5ODMKK21zZ2lkICI/Pz9MSU5FIENPVU5UIFdST05HIgorbXNnc3RyICI/Pz9OT01CUkUgREUgTElHTkVTIEVSUk9OySIKKworIzogbWVtbGluZS5jOjk5MAorbXNnaWQgIj8/P0VNUFRZIEJMT0NLIgorbXNnc3RyICI/Pz9CTE9DIFZJREUiCisKKyM6IG1lbWxpbmUuYzoxMDE2Cittc2dpZCAiPz8/TElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/TElHTkVTIE1BTlFVQU5URVMiCisKKyM6IG1lbWxpbmUuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTA6IEJsb2NrIDEgSUQgd3JvbmcgKCVzIG5vdCBhIC5zd3AgZmlsZT8pIgorbXNnc3RyICJFMzEwOiBJRCBkdSBibG9jIDEgZXJyb27pZSAoJXMgbidlc3QgcGFzIHVuIGZpY2hpZXIgZCfpY2hhbmdlID8pIgorCisjOiBtZW1saW5lLmM6MTA1MworbXNnaWQgIj8/P0JMT0NLIE1JU1NJTkciCittc2dzdHIgIj8/P0JMT0MgTUFOUVVBTlQiCisKKyM6IG1lbWxpbmUuYzoxMDY5Cittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGJlIG1lc3NlZCB1cCIKK21zZ3N0ciAiPz8/IGQnaWNpIGp1c3F1J+AgPz8/RklOIGRlcyBsaWduZXMgcGV1dmVudCDqdHJlIGNvcnJvbXB1ZXMiCisKKyM6IG1lbWxpbmUuYzoxMDg1Cittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGhhdmUgYmVlbiBpbnNlcnRlZC9kZWxldGVkIgorbXNnc3RyICI/Pz8gZCdpY2kganVzcXUn4CA/Pz9GSU4gZGVzIGxpZ25lcyBvbnQgcHUg6nRyZSBpbnPpcullL2VmZmFj6WVzIgorCisjOiBtZW1saW5lLmM6MTEwNQorbXNnaWQgIj8/P0VORCIKK21zZ3N0ciAiPz8/RklOIgorCisjOiBtZW1saW5lLmM6MTEzMQorbXNnaWQgIkUzMTE6IFJlY292ZXJ5IEludGVycnVwdGVkIgorbXNnc3RyICJFMzExOiBS6WN1cOlyYXRpb24gaW50ZXJyb21wdWUiCisKKyM6IG1lbWxpbmUuYzoxMTMzCittc2dpZCAiIgorIkUzMTI6IEVycm9ycyBkZXRlY3RlZCB3aGlsZSByZWNvdmVyaW5nOyBsb29rIGZvciBsaW5lcyBzdGFydGluZyB3aXRoID8/PyIKK21zZ3N0ciAiRTMxMjogRXJyZXVycyBsb3JzIGRlIGxhIHLpY3Vw6XJhdGlvbjsgZXhhbWluZXogbGVzIGxpZ25lcyBjb21tZW7nYW50IHBhciA/Pz8iCisKKyM6IG1lbWxpbmUuYzoxMTM2Cittc2dpZCAiUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIgorbXNnc3RyICJS6WN1cOlyYXRpb24gYWNoZXbpZS4gVulyaWZpZXogc2kgdG91dCBlc3QgT0suIgorCisjOiBtZW1saW5lLmM6MTEzNworbXNnaWQgIiIKKyJcbiIKKyIoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWVcbiIKK21zZ3N0ciAiIgorIlxuIgorIihWb3VzIHZvdWRyZXogcGV1dC3qdHJlIGVucmVnaXN0cmVyIGNlIGZpY2hpZXIgc291cyB1biBhdXRyZSBub21cbiIKKworIzogbWVtbGluZS5jOjExMzgKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAiZXQgbGFuY2VyIGRpZmYgYXZlYyBsZSBmaWNoaWVyIG9yaWdpbmFsIHBvdXIgcmVw6XJlciBsZXMgY2hhbmdlbWVudHMpXG4iCisKKyM6IG1lbWxpbmUuYzoxMTM5Cittc2dpZCAiIgorIkRlbGV0ZSB0aGUgLnN3cCBmaWxlIGFmdGVyd2FyZHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJFZmZhY2V6IGxlIGZpY2hpZXIgLnN3cCBlbnN1aXRlLlxuIgorIlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjExOTUKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAiRmljaGllcnMgZCfpY2hhbmdlIHRyb3V26XM6IgorCisjOiBtZW1saW5lLmM6MTM3MworbXNnaWQgIiAgIEluIGN1cnJlbnQgZGlyZWN0b3J5OlxuIgorbXNnc3RyICIgICBEYW5zIGxlIHLpcGVydG9pcmUgY291cmFudDpcbiIKKworIzogbWVtbGluZS5jOjEzNzUKK21zZ2lkICIgICBVc2luZyBzcGVjaWZpZWQgbmFtZTpcbiIKK21zZ3N0ciAiVXRpbGlzYW50IGxlIG5vbSBpbmRpcXXpOlxuIgorCisjOiBtZW1saW5lLmM6MTM3OQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIERhbnMgbGUgculwZXJ0b2lyZSAiCisKKyM6IG1lbWxpbmUuYzoxMzk3Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgIC0tIGF1Y3VuIC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDY5Cittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgIHByb3Byael06SBkZTogIgorCisjOiBtZW1saW5lLmM6MTQ3MQorbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgICBkYXTpOiAiCisKKyM6IG1lbWxpbmUuYzoxNDc1IG1lbWxpbmUuYzozNjg5Cittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICAgZGF06TogIgorCisjOiBtZW1saW5lLmM6MTQ5MQorbXNnaWQgIiAgICAgICAgIFtmcm9tIFZpbSB2ZXJzaW9uIDMuMF0iCittc2dzdHIgIiAgICAgICAgIFtkZSBWaW0gdmVyc2lvbiAzLjBdIgorCisjOiBtZW1saW5lLmM6MTQ5NQorbXNnaWQgIiAgICAgICAgIFtkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlXSIKK21zZ3N0ciAiICAgICAgICAgW25lIHNlbWJsZSBwYXMg6nRyZSB1biBmaWNoaWVyIGQn6WNoYW5nZSBWaW1dIgorCisjOiBtZW1saW5lLmM6MTQ5OQorbXNnaWQgIiAgICAgICAgIGZpbGUgbmFtZTogIgorbXNnc3RyICIgICAgbm9tIGRlIGZpY2hpZXI6ICIKKworIzogbWVtbGluZS5jOjE1MDUKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgIG1vZGlmaWVkOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgIG1vZGlmaek6ICIKKworIzogbWVtbGluZS5jOjE1MDYKK21zZ2lkICJZRVMiCittc2dzdHIgIk9VSSIKKworIzogbWVtbGluZS5jOjE1MDYKK21zZ2lkICJubyIKK21zZ3N0ciAibm9uIgorCisjOiBtZW1saW5lLmM6MTUxMAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICB1c2VyIG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiBub20gZCd1dGlsaXNhdGV1cjogIgorCisjOiBtZW1saW5lLmM6MTUxNworbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgICBub20gZCdo9HRlOiAiCisKKyM6IG1lbWxpbmUuYzoxNTE5Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICBub20gZCdo9HRlOiAiCisKKyM6IG1lbWxpbmUuYzoxNTI1Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgcHJvY2Vzc3VzIG6wOiAiCisKKyM6IG1lbWxpbmUuYzoxNTMxCittc2dpZCAiIChzdGlsbCBydW5uaW5nKSIKK21zZ3N0ciAiIChlbiBjb3VycyBkJ2V46WN1dGlvbikiCisKKyM6IG1lbWxpbmUuYzoxNTQzCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbaW51dGlsaXNhYmxlIGF2ZWMgY2V0dGUgdmVyc2lvbiBkZSBWaW1dIgorCisjOiBtZW1saW5lLmM6MTU0NgorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSBvbiB0aGlzIGNvbXB1dGVyXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFtpbnV0aWxpc2FibGUgc3VyIGNldCBvcmRpbmF0ZXVyXSIKKworIzogbWVtbGluZS5jOjE1NTEKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIHJlYWRdIgorbXNnc3RyICIgICAgICAgICBbbmUgcGV1dCDqdHJlIGx1XSIKKworIzogbWVtbGluZS5jOjE1NTUKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIG9wZW5lZF0iCittc2dzdHIgIiAgICAgICAgIFtuZSBwZXV0IOp0cmUgb3V2ZXJ0XSIKKworIzogbWVtbGluZS5jOjE3NDUKK21zZ2lkICJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMxMzogUHLpc2VydmF0aW9uIGltcG9zc2libGUsIGlsIG4neSBhIHBhcyBkZSBmaWNoaWVyIGQn6WNoYW5nZSIKKworIzogbWVtbGluZS5jOjE3OTgKK21zZ2lkICJGaWxlIHByZXNlcnZlZCIKK21zZ3N0ciAiRmljaGllciBwculzZXJ26SIKKworIyB0b2RvCisjOiBtZW1saW5lLmM6MTgwMAorbXNnaWQgIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIKK21zZ3N0ciAiRTMxNDogyWNoZWMgZGUgbGEgcHLpc2VydmF0aW9uIgorCisjOiBtZW1saW5lLmM6MTg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE1OiBtbF9nZXQ6IGludmFsaWQgbG51bTogJWxkIgorbXNnc3RyICJFMzE1OiBtbF9nZXQ6IGxudW0gaW52YWxpZGU6ICVsZCIKKworIzogbWVtbGluZS5jOjE4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNjogbWxfZ2V0OiBjYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMxNjogbWxfZ2V0OiBsaWduZSAlbGQgaW50cm91dmFibGUiCisKKyM6IG1lbWxpbmUuYzoyMjg3Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAzIgorbXNnc3RyICJFMzE3OiBtYXV2YWlzIGlkIGRlIHBvaW50ZXVyIGRlIGJsb2MgMyIKKworIzogbWVtbGluZS5jOjIzNjcKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCBkZXZyYWl0IOp0cmUgMCIKKworIzogbWVtbGluZS5jOjI0MjkKK21zZ2lkICJFMzE4OiBVcGRhdGVkIHRvbyBtYW55IGJsb2Nrcz8iCittc2dzdHIgIkUzMTg6IFRyb3AgZGUgYmxvY3MgbWlzIOAgam91ciA/IgorCisjIHRvZG8KKyM6IG1lbWxpbmUuYzoyNjExCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiBtYXV2YWlzIGlkIGRlIHBvaW50ZXVyIGRlIGJsb2MgNCIKKworIzogbWVtbGluZS5jOjI2MzgKK21zZ2lkICJkZWxldGVkIGJsb2NrIDE/IgorbXNnc3RyICJibG9jIDEgZWZmYWPpID8iCisKKyM6IG1lbWxpbmUuYzoyODM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjA6IENhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzIwOiBMaWduZSAlbGQgaW50cm91dmFibGUiCisKKyMgdG9kbworIzogbWVtbGluZS5jOjMwODEKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIgorbXNnc3RyICJFMzE3OiBtYXV2YWlzIGlkIGRlIHBvaW50ZXVyIGRlIGJsb2MiCisKKyM6IG1lbWxpbmUuYzozMDk3Cittc2dpZCAicGVfbGluZV9jb3VudCBpcyB6ZXJvIgorbXNnc3RyICJwZV9saW5lX2NvdW50IHZhdXQgeulybyIKKworIyB0b2RvIGRlbGEgZGVs4AorIzogbWVtbGluZS5jOjMxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMjogbGluZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlbGQgcGFzdCB0aGUgZW5kIgorbXNnc3RyICJFMzIyOiBudW3pcm8gZGUgbGlnbmUgaG9ycyBsaW1pdGVzOiAlbGQgYXUgZGVsYSBkZSBsYSBmaW4iCisKKyM6IG1lbWxpbmUuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjM6IGxpbmUgY291bnQgd3JvbmcgaW4gYmxvY2sgJWxkIgorbXNnc3RyICJFMzIzOiBub21icmUgZGUgbGlnbmVzIGVycm9u6SBkYW5zIGxlIGJsb2MgJWxkIgorCisjOiBtZW1saW5lLmM6MzE3OQorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICJMYSB0YWlsbGUgZGUgbGEgcGlsZSBzJ2FjY3Jv7nQiCisKKyM6IG1lbWxpbmUuYzozMjI1Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAyIgorbXNnc3RyICJFMzE3OiBtYXV2YWlzIGlkIGRlIHBvaW50ZXVyIGRlIGJsb2NrIDIiCisKKyM6IG1lbWxpbmUuYzozNjc5Cittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiBBVFRFTlRJT04iCisKKyM6IG1lbWxpbmUuYzozNjgwCittc2dpZCAiIgorIlxuIgorIkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIgorbXNnc3RyICIiCisiXG4iCisiVHJvdXbpIHVuIGZpY2hpZXIgZCfpY2hhbmdlIG5vbW3pIFwiIgorCisjOiBtZW1saW5lLmM6MzY4NAorbXNnaWQgIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIKK21zZ3N0ciAiTG9ycyBkZSBsJ291dmVydHVyZSBkdSBmaWNoaWVyIFwiIgorCisjOiBtZW1saW5lLmM6MzY5MworbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICAgICBQTFVTIFLJQ0VOVCBxdWUgbGUgZmljaGllciBkJ+ljaGFuZ2UgIVxuIgorCisjLiBTb21lIG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSBsb25nIHRvIGFsbG93IHRyYW5zbGF0aW9uIHRvCisjLiAqIG90aGVyIGxhbmd1YWdlcy4KKyM6IG1lbWxpbmUuYzozNjk3Cittc2dpZCAiIgorIlxuIgorIigxKSBBbm90aGVyIHByb2dyYW0gbWF5IGJlIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS5cbiIKKyIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgYmUgY2FyZWZ1bCBub3QgdG8gZW5kIHVwIHdpdGggdHdvXG4iCisiICAgIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZmlsZSB3aGVuIG1ha2luZyBjaGFuZ2VzLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDEpIFVuIGF1dHJlIHByb2dyYW1tZSBlc3QgcGV1dC3qdHJlIGVuIHRyYWluIGQn6WRpdGVyIGNlIGZpY2hpZXIuXG4iCisiICAgIFNpIGMnZXN0IGxlIGNhcywgZmFpdGVzIGF0dGVudGlvbiDgIG5lIHBhcyB2b3VzIHJldHJvdXZlciBhdmVjXG4iCisiICAgIGRldXggdmVyc2lvbiBkaWZm6XJlbnRlcyBkdSBt6m1lIGZpY2hpZXIgZW4gZmFpc2FudCBkZXMgbW9kaWZpY2F0aW9ucy5cbiIKKworIzogbWVtbGluZS5jOjM2OTgKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgUXVpdHRleiwgb3UgY29udGludWV6IHBydWRlbW1lbnQuXG4iCisKKyM6IG1lbWxpbmUuYzozNjk5Cittc2dpZCAiIgorIlxuIgorIigyKSBBbiBlZGl0IHNlc3Npb24gZm9yIHRoaXMgZmlsZSBjcmFzaGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDIpIFVuZSBzZXNzaW9uIGQn6WRpdGlvbiBwb3VyIGNlIGZpY2hpZXIgYSBwbGFudOkuXG4iCisKKyM6IG1lbWxpbmUuYzozNzAwCittc2dpZCAiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSBcIjpyZWNvdmVyXCIgb3IgXCJ2aW0gLXIgIgorbXNnc3RyICIgICAgU2kgYydlc3QgbGUgY2FzLCB1dGlsaXNleiBcIjpyZWNvdmVyXCIgb3UgXCJ2aW0gLXIgIgorCisjOiBtZW1saW5lLmM6MzcwMgorbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byByZWNvdmVyIHRoZSBjaGFuZ2VzIChzZWUgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIHBvdXIgculjdXDpcmVyIGxlcyBjaGFuZ2VtZW50cyAodm9pciBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorCisjOiBtZW1saW5lLmM6MzcwMworbXNnaWQgIiAgICBJZiB5b3UgZGlkIHRoaXMgYWxyZWFkeSwgZGVsZXRlIHRoZSBzd2FwIGZpbGUgXCIiCittc2dzdHIgIiAgICBTaSB2b3VzIGwnYXZleiBk6WrgIGZhaXQsIGVmZmFjZXogbGUgZmljaGllciBkJ+ljaGFuZ2UgXCIiCisKKyM6IG1lbWxpbmUuYzozNzA1Cittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIGF2b2lkIHRoaXMgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIHBvdXIg6XZpdGVyIGNlIG1lc3NhZ2UuXG4iCisKKyM6IG1lbWxpbmUuYzozNzE5IG1lbWxpbmUuYzozNzIzCittc2dpZCAiU3dhcCBmaWxlIFwiIgorbXNnc3RyICJMZSBmaWNoaWVyIGQn6WNoYW5nZSBcIiIKKworIzogbWVtbGluZS5jOjM3MjAgbWVtbGluZS5jOjM3MjYKK21zZ2lkICJcIiBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlwiIGV4aXN0ZSBk6WrgICEiCisKKyM6IG1lbWxpbmUuYzozNzI5Cittc2dpZCAiVklNIC0gQVRURU5USU9OIgorbXNnc3RyICJWSU0gLSBBVFRFTlRJT04iCisKKyM6IG1lbWxpbmUuYzozNzMxCittc2dpZCAiU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiVW4gZmljaGllciBkJ+ljaGFuZ2UgZXhpc3RlIGTpauAgISIKKworIzogbWVtbGluZS5jOjM3MzUKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdCIKK21zZ3N0ciAiIgorIiZPdXZyaXIgZW4gbGVjdHVyZSBzZXVsZVxuIgorIiZFZGl0ZXIgcXVhbmQgbeptZVxuIgorIiZS6WN1cOlyZXJcbiIKKyImUXVpdHRlciIKKworIzogbWVtbGluZS5jOjM3MzcKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZEZWxldGUgaXQiCittc2dzdHIgIiIKKyImT3V2cmlyIGVuIGxlY3R1cmUgc2V1bGVcbiIKKyImRWRpdGVyIHF1YW5kIG3qbWVcbiIKKyImUuljdXDpcmVyXG4iCisiJlF1aXR0ZXJcbiIKKyJMZSAmc3VwcHJpbWVyIgorCisjOiBtZW1saW5lLmM6Mzc5MAorbXNnaWQgIkUzMjY6IFRvbyBtYW55IHN3YXAgZmlsZXMgZm91bmQiCittc2dzdHIgIkUzMjY6IFRyb3AgZGUgZmljaGllcnMgZCfpY2hhbmdlIHRyb3V26XMiCisKKyM6IG1lbnUuYzo2NAorbXNnaWQgIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51IgorbXNnc3RyICJFMzI3OiBVbmUgcGFydGllIGR1IGNoZW1pbiBkJ+ls6W1lbnRzIGRlIG1lbnUgbidlc3QgcGFzIHVuIHNvdXMtbWVudSIKKworIzogbWVudS5jOjY1Cittc2dpZCAiRTMyODogTWVudSBvbmx5IGV4aXN0cyBpbiBhbm90aGVyIG1vZGUiCittc2dzdHIgIkUzMjg6IExlIG1lbnUgbidleGlzdGUgcXVlIGRhbnMgdW4gYXV0cmUgbW9kZSIKKworIzogbWVudS5jOjY2Cittc2dpZCAiRTMyOTogTm8gbWVudSBvZiB0aGF0IG5hbWUiCittc2dzdHIgIkUzMjk6IFBhcyBkZSBtZW51IGRlIGNlIG5vbSIKKworIzogbWVudS5jOjUwOQorbXNnaWQgIkUzMzA6IE1lbnUgcGF0aCBtdXN0IG5vdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzA6IExlIGNoZW1pbiBkZSBtZW51IG5lIGRvaXQgcGFzIGNvbmR1aXJlIOAgdW4gc291cy1tZW51IgorCisjIHRvZG8KKyM6IG1lbnUuYzo1NDgKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTogQWpvdXQgZCfpbOltZW50cyBkaXJlY3RlbWVudCBkYW5zIGJhcnJlIGRlIG1lbnUgaW50ZXJkaXQiCisKKyM6IG1lbnUuYzo1NTQKK21zZ2lkICJFMzMyOiBTZXBhcmF0b3IgY2Fubm90IGJlIHBhcnQgb2YgYSBtZW51IHBhdGgiCittc2dzdHIgIkUzMzI6IFVuIHPpcGFyYXRldXIgbmUgcGV1dCBmYWlyZSBwYXJ0aWUgZCd1biBjaGVtaW4gZGUgbWVudSIKKworIy4gTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtZW51LmM6MTA3OQorbXNnaWQgIiIKKyJcbiIKKyItLS0gTWVudXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE1lbnVzIC0tLSIKKworIzogbWVudS5jOjE5OTYKK21zZ2lkICJUZWFyIG9mZiB0aGlzIG1lbnUiCittc2dzdHIgIkFycmFjaGVyIGNlIG1lbnUiCisKKyM6IG1lbnUuYzoyMDYxCittc2dpZCAiRTMzMzogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIG1lbnUgaXRlbSIKK21zZ3N0ciAiRTMzMzogTGUgY2hlbWluIGR1IG1lbnUgZG9pdCBjb25kdWlyZSDgIHVuIOls6W1lbnQgZGUgbWVudSIKKworIzogbWVudS5jOjIwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNDogTWVudSBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMzM0OiBNZW51IGludHJvdXZhYmxlOiAlcyIKKworIzogbWVudS5jOjIxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNTogTWVudSBub3QgZGVmaW5lZCBmb3IgJXMgbW9kZSIKK21zZ3N0ciAiRTMzNTogTGUgbWVudSBuJ2VzdCBwYXMgZOlmaW5pIHBvdXIgbGUgbW9kZSAlcyIKKworIyB0b2RvCisjOiBtZW51LmM6MjE4OAorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogTGUgY2hlbWluIGR1IG1lbnUgZG9pdCBjb25kdWlyZSDgIHVuIHNvdXMtbWVudSIKKworIzogbWVudS5jOjIyMDkKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IE1lbnUgaW50cm91dmFibGUgLSB26XJpZmlleiBsZXMgbm9tcyBkZXMgbWVudXMiCisKKyMgdG9kbworIzogbWVzc2FnZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlY3RlZCB3aGlsZSBwcm9jZXNzaW5nICVzOiIKK21zZ3N0ciAiRXJyZXVyIGTpdGVjdOllIGVuIHRyYWl0YW50ICVzOiIKKworIzogbWVzc2FnZS5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICU0bGQ6IgorbXNnc3RyICJsaWduZSAlNGxkOiIKKworIzogbWVzc2FnZS5jOjU3NQorbXNnaWQgIltzdHJpbmcgdG9vIGxvbmddIgorbXNnc3RyICJbY2hh7m5lIHRyb3AgbG9uZ3VlXSIKKworIyB0b2RvCisjOiBtZXNzYWdlLmM6NzIxCittc2dpZCAiTWVzc2FnZXMgbWFpbnRhaW5lcjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4iCittc2dzdHIgIk1haW50ZW5ldXIgZGVzIG1lc3NhZ2VzOiBBZHJpZW4gQmVhdSA8dmVyc2lvbi5mcmFuY2Fpc2VAZnJlZS5mcj4iCisKKyM6IG1lc3NhZ2UuYzo5NDUKK21zZ2lkICJJbnRlcnJ1cHQ6ICIKK21zZ3N0ciAiSW50ZXJydXB0aW9uOiAiCisKKyM6IG1lc3NhZ2UuYzo5NDgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIkFwcHV5ZXogc3VyIEVOVFLJRSBwb3VyIGNvbnRpbnVlciIKKworIzogbWVzc2FnZS5jOjk1MAorbXNnaWQgIkhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUiCittc2dzdHIgIkFwcHV5ZXogc3VyIEVOVFLJRSBvdSB0YXBleiB1bmUgY29tbWFuZGUgcG91ciBjb250aW51ZXIiCisKKyM6IG1lc3NhZ2UuYzoyMjQ0Cittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0gUGx1cyAtLSIKKworIyBUT0RPCisjOiBtZXNzYWdlLmM6MjI0NworbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoRU5UUi9SQTogbGlnbmUsIEVTUENFL2I6IHBhZ2UsIGQvdTogZGVtaSBwYWdlLCBxOiBxdWl0dGUpIgorCisjOiBtZXNzYWdlLmM6MjI0OAorbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChFTlRSOiBsaWduZSwgRVNQQ0U6IHBhZ2UsIGQ6IGRlbWkgcGFnZSwgcTogcXVpdHRlKSIKKworIzogbWVzc2FnZS5jOjI3NDAgbWVzc2FnZS5jOjI3NTUKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAiUXVlc3Rpb24iCisKKyM6IG1lc3NhZ2UuYzoyNzQyCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm8iCittc2dzdHIgIiIKKyImT3VpXG4iCisiJk5vbiIKKworIyB0b2RvCisjOiBtZXNzYWdlLmM6Mjc3NQorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZPdWlcbiIKKyImTm9uXG4iCisiVG91dCAmc2F1dmVyXG4iCisiVG91dCAmcmVqZXRlclxuIgorIiZBbm51bGVyIgorCisjIHRvZG8KKyM6IG1lc3NhZ2UuYzoyODE2Cittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAiQm/udGUgZGUgZGlhbG9ndWUgJ0VucmVnaXN0cmVyJyIKKworIyB0b2RvCisjOiBtZXNzYWdlLmM6MjgxOAorbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIkJv7nRlIGRlIGRpYWxvZ3VlICdPdXZyaXInIgorCisjIFRPRE8KKyMuIFRPRE86IG5vbi1HVUkgZmlsZSBzZWxlY3RvciBoZXJlCisjOiBtZXNzYWdlLmM6Mjg4OQorbXNnaWQgIkUzMzg6IFNvcnJ5LCBubyBmaWxlIGJyb3dzZXIgaW4gY29uc29sZSBtb2RlIgorbXNnc3RyICJFMzM4OiBE6XNvbOksIHBhcyBkJ2V4cGxvcmF0ZXVyIGRlIGZpY2hpZXJzIGVuIG1vZGUgY29uc29sZSIKKworIzogbWlzYzEuYzoyNjkyCittc2dpZCAiVzEwOiBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiCittc2dzdHIgIlcxMDogQWxlcnRlOiBNb2RpZmljYXRpb24gZCd1biBmaWNoaWVyIGVuIGxlY3R1cmUgc2V1bGUiCisKKyM6IG1pc2MxLmM6MjkyNworbXNnaWQgIjEgbW9yZSBsaW5lIgorbXNnc3RyICIxIGxpZ25lIGVuIHBsdXMiCisKKyM6IG1pc2MxLmM6MjkyOQorbXNnaWQgIjEgbGluZSBsZXNzIgorbXNnc3RyICIxIGxpZ25lIGVuIG1vaW5zIgorCisjOiBtaXNjMS5jOjI5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIG1vcmUgbGluZXMiCittc2dzdHIgIiVsZCBsaWduZXMgZW4gcGx1cyIKKworIzogbWlzYzEuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBmZXdlciBsaW5lcyIKK21zZ3N0ciAiJWxkIGxpZ25lcyBlbiBtb2lucyIKKworIzogbWlzYzEuYzoyOTM5Cittc2dpZCAiIChJbnRlcnJ1cHRlZCkiCittc2dzdHIgIiAoSW50ZXJyb21wdSkiCisKKyM6IG1pc2MxLmM6NjYzMQorbXNnaWQgIlZpbTogcHJlc2VydmluZyBmaWxlcy4uLlxuIgorbXNnc3RyICJWaW06IHBy6XNlcnZhdGlvbiBkZXMgZmljaGllcnMuLi5cbiIKKworIy4gY2xvc2UgYWxsIG1lbWZpbGVzLCB3aXRob3V0IGRlbGV0aW5nCisjOiBtaXNjMS5jOjY2NDEKK21zZ2lkICJWaW06IEZpbmlzaGVkLlxuIgorbXNnc3RyICJWaW06IEZpbmkuXG4iCisKKyM6IG1pc2MyLmM6NjcwIG1pc2MyLmM6Njg2Cittc2dpZCAiRVJST1I6ICIKK21zZ3N0ciAiRVJSRVVSOiAiCisKKyM6IG1pc2MyLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJbYnl0ZXNdIHRvdGFsIGFsbG9jLWZyZWVkICVsdS0lbHUsIGluIHVzZSAlbHUsIHBlYWsgdXNlICVsdVxuIgorbXNnc3RyICIiCisiXG4iCisiW29jdGV0c10gdG90YWwgYWxsb3XpLWxpYuly6SAlbHUtJWx1LCB1dGlsaXPpICVsdSwgcGljICVsdVxuIgorCisjOiBtaXNjMi5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiW2NhbGxzXSB0b3RhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWwgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCittc2dzdHIgIiIKKyJbYXBwZWxzXSB0b3RhbCByZS9tYWxsb2MoKSAlbHUsIHRvdGFsIGZyZWUoKSAlbHVcbiIKKyJcbiIKKworIzogbWlzYzIuYzo3NDcKK21zZ2lkICJFMzQwOiBMaW5lIGlzIGJlY29taW5nIHRvbyBsb25nIgorbXNnc3RyICJFMzQwOiBMYSBsaWduZSBkZXZpZW50IHRyb3AgbGluZ3VlIgorCisjOiBtaXNjMi5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQxOiBJbnRlcm5hbCBlcnJvcjogbGFsbG9jKCVsZCwgKSIKK21zZ3N0ciAiRTM0MTogRXJyZXVyIGludGVybmU6IGxhbGxvYyglbGQsICkiCisKKyM6IG1pc2MyLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDI6IE91dCBvZiBtZW1vcnkhICAoYWxsb2NhdGluZyAlbHUgYnl0ZXMpIgorbXNnc3RyICJFMzQyOiBN6W1vaXJlIOlwdWlz6WUgISAgKGFsbG9jYXRpb24gZGUgJWx1IG9jdGV0cykiCisKKyM6IG1pc2MyLmM6MjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAiQXBwZWwgZHUgc2hlbGwgcG91ciBleOljdXRlcjogXCIlc1wiIgorCisjOiBtaXNjMi5jOjI3ODYKK21zZ2lkICJFNTQ1OiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTQ1OiBEZXV4LXBvaW50cyBtYW5xdWFudCIKKworIzogbWlzYzIuYzoyNzg4IG1pc2MyLmM6MjgxNQorbXNnaWQgIkU1NDY6IElsbGVnYWwgbW9kZSIKK21zZ3N0ciAiRTU0NjogTW9kZSBpbGzpZ2FsIgorCisjOiBtaXNjMi5jOjI4NTQKK21zZ2lkICJFNTQ3OiBJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIkU1NDc6IEZvcm1lIGRlIGN1cnNldXIgaWxs6WdhbGUiCisKKyM6IG1pc2MyLmM6Mjg5NAorbXNnaWQgIkU1NDg6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTQ4OiBjaGlmZnJlIGF0dGVuZHUiCisKKyM6IG1pc2MyLmM6Mjg5OQorbXNnaWQgIkU1NDk6IElsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAiRTU0OTogUG91cmNlbnRhZ2UgaWxs6WdhbCIKKworIzogbWlzYzIuYzozMjA5Cittc2dpZCAiRW50ZXIgZW5jcnlwdGlvbiBrZXk6ICIKK21zZ3N0ciAiVGFwZXogbGEgY2zpIGQnZW5jb2RhZ2U6ICIKKworIzogbWlzYzIuYzozMjEwCittc2dpZCAiRW50ZXIgc2FtZSBrZXkgYWdhaW46ICIKK21zZ3N0ciAiUullbnRyZXogbGEgbeptZSBjbOk6ICIKKworIzogbWlzYzIuYzozMjIwCittc2dpZCAiS2V5cyBkb24ndCBtYXRjaCEiCittc2dzdHIgIkxlcyBjbOlzIG5lIGNvcnJlc3BvbmRlbnQgcGFzICEiCisKKyM6IG1pc2MyLmM6Mzc2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTM0MzogSW52YWxpZCBwYXRoOiAnKipbbnVtYmVyXScgbXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIG9yIGJlICIKKyJmb2xsb3dlZCBieSAnJXMnLiIKK21zZ3N0ciAiRTM0MzogQ2hlbWluIGludmFsaWRlOiAnKipbbm9tYnJlXScgZG9pdCDqdHJlIOAgbGEgZmluIGR1IGNoZW1pbiBvdSDqdHJlIHN1aXZpIGRlICclcycuIgorCisjOiBtaXNjMi5jOjUwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NDogQ2FuJ3QgZmluZCBkaXJlY3RvcnkgXCIlc1wiIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NDogUulwZXJ0b2lyZSBcIiVzXCIgaW50cm91dmFibGUgZGFucyBsZSBjZHBhdGgiCisKKyM6IG1pc2MyLmM6NTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ1OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkUzNDU6IEZpY2hpZXIgXCIlc1wiIGludHJvdXZhYmxlIGRhbnMgbGUgY2hlbWluIgorCisjIHRvZG8KKyM6IG1pc2MyLmM6NTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ2OiBObyBtb3JlIGRpcmVjdG9yeSBcIiVzXCIgZm91bmQgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ2OiBQbHVzIGRlIHLpcGVydG9pcmUgXCIlc1wiIGRhbnMgbGUgY2RwYXRoIgorCisjOiBtaXNjMi5jOjUwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiBQbHVzIGRlIGZpY2hpZXIgXCIlc1wiIGRhbnMgbGUgY2hlbWluIgorCisjOiBtaXNjMi5jOjUyOTEKK21zZ2lkICJFNTUwOiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTUwOiBEZXV4LXBvaW50cyBtYW5xdWFudCIKKworIzogbWlzYzIuYzo1MzAzCittc2dpZCAiRTU1MTogSWxsZWdhbCBjb21wb25lbnQiCittc2dzdHIgIkU1NTE6IENvbXBvc2FudCBpbGzpZ2FsIgorCisjOiBtaXNjMi5jOjUzMTEKK21zZ2lkICJFNTUyOiBkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAiRTU1MjogY2hpZmZyZSBhdHRlbmR1IgorCisjLiBHZXQgaGVyZSB3aGVuIHRoZSBzZXJ2ZXIgY2FuJ3QgYmUgZm91bmQuCisjOiBuZXRiZWFucy5jOjI4MworbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zICMyIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHNlIGNvbm5lY3RlciDgIE5ldGJlYW5zIG6wMiIKKworIzogbmV0YmVhbnMuYzoyOTEKK21zZ2lkICJDYW5ub3QgY29ubmVjdCB0byBOZXRiZWFucyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzZSBjb25uZWN0ZXIg4CBOZXRiZWFucyIKKworIyBUT0RPCisjOiBuZXRiZWFucy5jOjU2NQorbXNnaWQgInJlYWQgZnJvbSBOZXRiZWFucyBzb2NrZXQiCittc2dzdHIgImx1IGVuIHByb3ZlbmFuY2UgZHUgc29ja2V0IE5ldGJlYW5zIgorCisjOiBub3JtYWwuYzoyOTE2Cittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAiQWxlcnRlOiBsZSB0ZXJtaW5hbCBuZSBwZXV0IHN1cmxpZ25lciIKKworIzogbm9ybWFsLmM6MzEzMQorbXNnaWQgIkUzNDg6IE5vIHN0cmluZyB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDg6IFBhcyBkZSBjaGHubmUgc291cyBsZSBjdXJzZXVyIgorCisjOiBub3JtYWwuYzozMTMzCittc2dpZCAiRTM0OTogTm8gaWRlbnRpZmllciB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDk6IFBhcyBkJ2lkZW50aWZpYW50IHNvdXMgbGUgY3Vyc2V1ciIKKworIzogbm9ybWFsLmM6NDM1MQorbXNnaWQgIkUzNTI6IENhbm5vdCBlcmFzZSBmb2xkcyB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUyOiBMZXMgcmVwbGlzIG5lIHBldXZlbnQg6nRyZSBlZmZhY+lzIGF2ZWMgbGEgJ2ZvbGRtZXRob2QnIGFjdHVlbGxlIgorCisjIFRPRE8KKyM6IG9wcy5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAxIHRpbWUiCittc2dzdHIgIjEgbGlnbmUgJXPpZSAxIGZvaXMiCisKKyMgVE9ETworIzogb3BzLmM6Mjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIxIGxpZ25lICVz6WUgJWQgZm9pcyIKKworIyBUT0RPCisjOiBvcHMuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgMSB0aW1lIgorbXNnc3RyICIlbGQgbGlnbmVzICVz6WVzIDEgZm9pcyIKKworIzogb3BzLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIlbGQgbGlnbmVzICVz6WVzICVkIGZvaXMiCisKKyM6IG9wcy5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgdG8gaW5kZW50Li4uICIKK21zZ3N0ciAiJWxkIGxpZ25lcyDgIGluZGVudGVyLi4uICIKKworIzogb3BzLmM6NzEzCittc2dpZCAiMSBsaW5lIGluZGVudGVkICIKK21zZ3N0ciAiMSBsaWduZSBpbmRlbnTpZSAiCisKKyM6IG9wcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgaW5kZW50ZWQgIgorbXNnc3RyICIlbGQgbGlnbmVzIGluZGVudOllcyAiCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNjQ3Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgImNvcGllIGltcG9zc2libGU7IGVmZmFjZW1lbnQgZW4gdG91dCBjYXMiCisKKyM6IG9wcy5jOjIxNTUKK21zZ2lkICIxIGxpbmUgY2hhbmdlZCIKK21zZ3N0ciAiMSBsaWduZSBtb2RpZmnpZSIKKworIzogb3BzLmM6MjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgY2hhbmdlZCIKK21zZ3N0ciAiJWxkIGxpZ25lcyBtb2RpZmnpZXMiCisKKyM6IG9wcy5jOjI1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnJlZWluZyAlbGQgbGluZXMiCittc2dzdHIgImxpYulyYXRpb24gZGUgJWxkIGxpZ25lcyIKKworIzogb3BzLmM6MjgyMgorbXNnaWQgIjEgbGluZSB5YW5rZWQiCittc2dzdHIgIjEgbGlnbmUgY29waellIgorCisjOiBvcHMuYzoyODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgIiVsZCBsaWduZXMgY29waellcyIKKworIzogb3BzLmM6MzEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiBMZSByZWdpc3RyZSAlcyBlc3QgdmlkZSIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBvcHMuYzozNjY2Cittc2dpZCAiIgorIlxuIgorIi0tLSBSZWdpc3RlcnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFJlZ2lzdHJlcyAtLS0iCisKKyM6IG9wcy5jOjQ4NzUKK21zZ2lkICJJbGxlZ2FsIHJlZ2lzdGVyIG5hbWUiCittc2dzdHIgIk5vbSBkZSByZWdpc3RyZSBpbGzpZ2FsIgorCisjOiBvcHMuYzo0OTYxCittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBSZXNnaXN0cmVzOlxuIgorCisjOiBvcHMuYzo0OTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzQ6IFVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIKK21zZ3N0ciAiRTU3NDogVHlwZSBkZSByZWdpc3RyZSAlZCBpbmNvbm51IgorCisjOiBvcHMuYzo1NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTQ6IEludmFsaWQgcmVnaXN0ZXIgbmFtZTogJyVzJyIKK21zZ3N0ciAiRTM1NDogTm9tIGRlIHJlZ2lzdHJlIGludmFsaWRlOiAnJXMnIgorCisjOiBvcHMuYzo1ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBDb2xzOyAiCittc2dzdHIgIiVsZCBDb2xzOyAiCisKKyM6IG9wcy5jOjU4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VsZWN0ZWQgJXMlbGQgb2YgJWxkIExpbmVzOyAlbGQgb2YgJWxkIFdvcmRzOyAlbGQgb2YgJWxkIEJ5dGVzIgorbXNnc3RyICJT6WxlY3Rpb25u6SAlcyVsZCBkZSAlbGQgTGlnbmVzOyAlbGQgZGUgJWxkIE1vdHM7ICVsZCBkZSAlbGQgT2N0ZXRzIgorCisjOiBvcHMuYzo1ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbCAlcyBvZiAlczsgTGluZSAlbGQgb2YgJWxkOyBXb3JkICVsZCBvZiAlbGQ7IEJ5dGUgJWxkIG9mICVsZCIKK21zZ3N0ciAiQ29sICVzIGRlICVzOyBMaWduZSAlbGQgZGUgJWxkOyBNb3QgJWxkIGRlICVsZDsgT2N0ZXQgJWxkIGRlICVsZCIKKworIyB0b2RvCisjOiBvcHMuYzo1ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCBwb3VyIGxlIEJPTSkiCisKKyM6IG9wdGlvbi5jOjE2MjMKK21zZ2lkICIlPCVmJWglbSU9UGFnZSAlTiIKK21zZ3N0ciAiJTwlZiVoJW0lPVBhZ2UgJU4iCisKKyM6IG9wdGlvbi5jOjIwNzIKK21zZ2lkICJUaGFua3MgZm9yIGZseWluZyBWaW0iCittc2dzdHIgIk1lcmNpIGQnYXZvaXIgY2hvaXNpIFZpbSIKKworIzogb3B0aW9uLmM6MzM0NCBvcHRpb24uYzozNDUxCittc2dpZCAiRTUxODogVW5rbm93biBvcHRpb24iCittc2dzdHIgIkU1MTg6IE9wdGlvbiBpbmNvbm51ZSIKKworIzogb3B0aW9uLmM6MzM1NworbXNnaWQgIkU1MTk6IE9wdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFNTE5OiBPcHRpb24gcGFzIHN1cHBvcnTpZSIKKworIyB0b2RvCisjOiBvcHRpb24uYzozMzgyCittc2dpZCAiRTUyMDogTm90IGFsbG93ZWQgaW4gYSBtb2RlbGluZSIKK21zZ3N0ciAiRTUyMDogSW50ZXJkaXQgZGFucyB1bmUgbGlnbmUgZGUgbW9kZSIKKworIyBUT0RPCisjOiBvcHRpb24uYzozNDM4Cittc2dpZCAiIgorIlxuIgorIlx0TGFzdCBzZXQgZnJvbSAiCittc2dzdHIgIiIKKyJcbiIKKyJcdFLpZ2zpIHLpY2VtbWVudCBkYW5zICIKKworIzogb3B0aW9uLmM6MzU3NworbXNnaWQgIkU1MjE6IE51bWJlciByZXF1aXJlZCBhZnRlciA9IgorbXNnc3RyICJFNTIxOiBOb21icmUgcmVxdWlzIGFwcuhzID0iCisKKyM6IG9wdGlvbi5jOjM5MDMgb3B0aW9uLmM6NDUyMAorbXNnaWQgIkU1MjI6IE5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNTIyOiBQYXMgdHJvdXbpIGRhbnMgdGVybWNhcCIKKworIzogb3B0aW9uLmM6Mzk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM5OiBJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IgorbXNnc3RyICJFNTM5OiBDYXJhY3TocmUgPCVzPiBpbGzpZ2FsIgorCisjOiBvcHRpb24uYzo0NTEyCittc2dpZCAiRTUyOTogQ2Fubm90IHNldCAndGVybScgdG8gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJFNTI5OiAndGVybScgbmUgcGV1dCBwYXMg6nRyZSB1bmUgY2hh7m5lIHZpZGUiCisKKyM6IG9wdGlvbi5jOjQ1MTUKK21zZ2lkICJFNTMwOiBDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICJFNTMwOiBDaGFuZ2VtZW50IGRlIHRlcm0gaW1wb3NzaWJsZSBkYW5zIGwnaW50ZXJmYWNlIGdyYXBoaXF1ZSIKKworIzogb3B0aW9uLmM6NDUxNworbXNnaWQgIkU1MzE6IFVzZSBcIjpndWlcIiB0byBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFNTMxOiBVdGlsaXNleiBcIjpndWlcIiBwb3VyIGTpbWFycmVyIGwnaW50ZXJmYWNlIGdyYXBoaXF1ZSIKKworIzogb3B0aW9uLmM6NDUzOAorbXNnaWQgIkU1ODk6ICdiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiCittc2dzdHIgIkU1ODk6ICdiYWNrdXBleHQnIGV0ICdwYXRjaG1vZGUnIHNvbnQg6WdhdXgiCisKKyM6IG9wdGlvbi5jOjQ3MjMKK21zZ2lkICJFNjE3OiBDYW5ub3QgYmUgY2hhbmdlZCBpbiB0aGUgR1RLKyAyIEdVSSIKK21zZ3N0ciAiRTYxNzogSW5jaGFuZ2VhYmxlIGRhbnMgbCdpbnRlcmZhY2UgR1RLKyAyIgorCisjOiBvcHRpb24uYzo0ODc5Cittc2dpZCAiRTUyNDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTUyNDogRGV1eC1wb2ludHMgbWFucXVhbnQiCisKKyM6IG9wdGlvbi5jOjQ4ODEKK21zZ2lkICJFNTI1OiBaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIkU1MjU6IENoYe5uZSBkZSBsb25ndWV1ciBudWxsZSIKKworIzogb3B0aW9uLmM6NDk0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTI2OiBNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICJFNTI2OiBOb21icmUgbWFucXVhbnQgYXBy6HMgPCVzPiIKKworIzogb3B0aW9uLmM6NDk2MworbXNnaWQgIkU1Mjc6IE1pc3NpbmcgY29tbWEiCittc2dzdHIgIkU1Mjc6IFZpcmd1bGUgbWFucXVhbnRlIgorCisjOiBvcHRpb24uYzo0OTcwCittc2dpZCAiRTUyODogTXVzdCBzcGVjaWZ5IGEgJyB2YWx1ZSIKK21zZ3N0ciAiRTUyODogVW5lIHZhbGV1ciAnIGRvaXQg6nRyZSBzcOljaWZp6WUiCisKKyMgdG9kbworIzogb3B0aW9uLmM6NTAxMQorbXNnaWQgIkU1OTU6IGNvbnRhaW5zIHVucHJpbnRhYmxlIG9yIHdpZGUgY2hhcmFjdGVyIgorbXNnc3RyICJFNTk1OiBjb250aWVudCBkZXMgY2FyYWN06HJlcyBtdWx0aS1vY3RldHMgb3UgaW5hZmZpY2hhYmxlcyIKKworIzogb3B0aW9uLmM6NTA2MAorbXNnaWQgIkU1OTY6IEludmFsaWQgZm9udChzKSIKK21zZ3N0ciAiRTU5NjogRm9udGUocykgaW52YWxpZGUocykiCisKKyM6IG9wdGlvbi5jOjUwNjgKK21zZ2lkICJFNTk3OiBjYW4ndCBzZWxlY3QgZm9udHNldCIKK21zZ3N0ciAiRTU5Nzogc+lsZWN0aW9uIGRlIGZvbnRzZXQgaW1wb3NzaWJsZSIKKworIyB0b2RvCisjOiBvcHRpb24uYzo1MDcwCittc2dpZCAiRTU5ODogSW52YWxpZCBmb250c2V0IgorbXNnc3RyICJFNTk4OiBGb250c2V0IGludmFsaWRlIgorCisjIFRPRE8KKyM6IG9wdGlvbi5jOjUwNzcKK21zZ2lkICJFNTMzOiBjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICJFNTMzOiBT6WxlY3Rpb24gZGUgZm9udGUgbGFyZ2UgaW1wb3NzaWJsZSIKKworIzogb3B0aW9uLmM6NTA3OQorbXNnaWQgIkU1MzQ6IEludmFsaWQgd2lkZSBmb250IgorbXNnc3RyICJFNTM0OiBGb250ZSBsYXJnZSBpbnZhbGlkZSIKKworIzogb3B0aW9uLmM6NTM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciA8JWM+IgorbXNnc3RyICJFNTM1OiBDYXJhY3TocmUgaWxs6WdhbCBhcHLocyA8JWM+IgorCisjOiBvcHRpb24uYzo1NDUzCittc2dpZCAiRTUzNjogY29tbWEgcmVxdWlyZWQiCittc2dzdHIgIkU1MzY6IHZpcmd1bGUgcmVxdWlzZSIKKworIzogb3B0aW9uLmM6NTQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM3OiAnY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIgorbXNnc3RyICJFNTM3OiAnY29tbWVudHN0cmluZycgZG9pdCDqdHJlIHZpZGUgb3UgY29udGVuaXIgJXMiCisKKyM6IG9wdGlvbi5jOjU1MzQKK21zZ2lkICJFNTM4OiBObyBtb3VzZSBzdXBwb3J0IgorbXNnc3RyICJFNTM4OiBMYSBzb3VyaXMgbidlc3QgcGFzIHN1cHBvcnTpZSIKKworIyB0b2RvCisjOiBvcHRpb24uYzo1ODAyCittc2dpZCAiRTU0MDogVW5jbG9zZWQgZXhwcmVzc2lvbiBzZXF1ZW5jZSIKK21zZ3N0ciAiRTU0MDogU+lxdWVuY2UgZCdleHByZXNzaW9uIG1hbCBmZXJt6WUiCisKKyM6IG9wdGlvbi5jOjU4MDYKK21zZ2lkICJFNTQxOiB0b28gbWFueSBpdGVtcyIKK21zZ3N0ciAiRTU0MTogdHJvcCBkJ+ls6W1lbnRzIgorCisjOiBvcHRpb24uYzo1ODA4Cittc2dpZCAiRTU0MjogdW5iYWxhbmNlZCBncm91cHMiCittc2dzdHIgIkU1NDI6IGdyb3VwZXMgZOlz6XF1aWxpYnLpcyIKKworIzogb3B0aW9uLmM6NjAyOQorbXNnaWQgIkU1OTA6IEEgcHJldmlldyB3aW5kb3cgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU1OTA6IElsIHkgYSBk6WrgIHVuZSBmZW7qdHJlIGRlIHBy6XZpc3VhbGlzYXRpb24iCisKKyM6IG9wdGlvbi5jOjYyODYKK21zZ2lkICJXMTc6IEFyYWJpYyByZXF1aXJlcyBVVEYtOCwgZG8gJzpzZXQgZW5jb2Rpbmc9dXRmLTgnIgorbXNnc3RyICJXMTc6IEwnYXJhYmlxdWUgcmVxdWllcnQgbCdVVEYtOCwgdGFwZXogJzpzZXQgZW5jb2Rpbmc9dXRmLTgnIgorCisjOiBvcHRpb24uYzo2NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTM6IE5lZWQgYXQgbGVhc3QgJWQgbGluZXMiCittc2dzdHIgIkU1OTM6IE7pY2Vzc2l0ZSBhdSBtb2lucyAlZCBsaWduZXMiCisKKyM6IG9wdGlvbi5jOjY2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU5NDogTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIgorbXNnc3RyICJFNTk0OiBO6WNlc3NpdGUgYXUgbW9pbnMgJWQgY29sb25uZXMiCisKKyM6IG9wdGlvbi5jOjY5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NTogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMzU1OiBPcHRpb24gaW5jb25udWU6ICVzIgorCisjOiBvcHRpb24uYzo3MDI2Cittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBjb2RlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gQ29kZXMgZGUgdGVybWluYWwgLS0tIgorCisjOiBvcHRpb24uYzo3MDI4Cittc2dpZCAiIgorIlxuIgorIi0tLSBHbG9iYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gVmFsZXVyIGRlcyBvcHRpb25zIGdsb2JhbGVzIC0tLSIKKworIzogb3B0aW9uLmM6NzAzMAorbXNnaWQgIiIKKyJcbiIKKyItLS0gTG9jYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gVmFsZXVyIGRlcyBvcHRpb25zIGxvY2FsZXMgLS0tIgorCisjOiBvcHRpb24uYzo3MDMyCittc2dpZCAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKKworIzogb3B0aW9uLmM6NzczMworbXNnaWQgIkUzNTY6IGdldF92YXJwIEVSUk9SIgorbXNnc3RyICJFMzU2OiBFUlJFVVIgZ2V0X3ZhcnAiCisKKyM6IG9wdGlvbi5jOjg3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NzogJ2xhbmdtYXAnOiBNYXRjaGluZyBjaGFyYWN0ZXIgbWlzc2luZyBmb3IgJXMiCittc2dzdHIgIkUzNTc6ICdsYW5nbWFwJzogQ2FyYWN06HJlIGNvcnJlc3BvbmRhbnQgbWFucXVhbnQgcG91ciAlcyIKKworIzogb3B0aW9uLmM6ODczOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU4OiAnbGFuZ21hcCc6IEV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgc2VtaWNvbG9uOiAlcyIKK21zZ3N0ciAiRTM1ODogJ2xhbmdtYXAnOiBDYXJhY3TocmVzIHN1cm51belyYWlyZXMgYXBy6HMgcG9pbnQtdmlyZ3VsZTogJXMiCisKKyM6IG9zX2FtaWdhLmM6MjczCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICJuZSBwZXV0IG91dmlyICIKKworIzogb3NfYW1pZ2EuYzozMDcKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06IE91dmVydHVyZSBkZSBsYSBmZW7qdHJlIGltcG9zc2libGUgIVxuIgorCisjOiBvc19hbWlnYS5jOjMyOQorbXNnaWQgIk5lZWQgQW1pZ2Fkb3MgdmVyc2lvbiAyLjA0IG9yIGxhdGVyXG4iCittc2dzdHIgIk7pY2Vzc2l0ZSBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3UgdWx06XJpZXVyZVxuIgorCisjOiBvc19hbWlnYS5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJOZWVkICVzIHZlcnNpb24gJWxkXG4iCittc2dzdHIgIk7pY2Vzc2l06SAlcyB2ZXJzaW9uICVsZFxuIgorCisjOiBvc19hbWlnYS5jOjQwNworbXNnaWQgIkNhbm5vdCBvcGVuIE5JTDpcbiIKK21zZ3N0ciAiTmUgcGV1dCBvdXZyaXIgTklMOlxuIgorCisjOiBvc19hbWlnYS5jOjQxOAorbXNnaWQgIkNhbm5vdCBjcmVhdGUgIgorbXNnc3RyICJOZSBwZXV0IGNy6WVyICIKKworIzogb3NfYW1pZ2EuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltIGV4aXRpbmcgd2l0aCAlZFxuIgorbXNnc3RyICJWaW0gc29ydCBhdmVjICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTI4Cittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAiY2hhbmdlbWVudCBkdSBtb2RlIGRlIGNvbnNvbGUgaW1wb3NzaWJsZSA/IVxuIgorCisjOiBvc19hbWlnYS5jOjk5NAorbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAibWNoX2dldF9zaGVsbHNpemU6IHBhcyB1bmUgY29uc29sZSA/IVxuIgorCisjLiBpZiBWaW0gb3BlbmVkIGEgd2luZG93OiBFeGVjdXRpbmcgYSBzaGVsbCBtYXkgY2F1c2UgY3Jhc2hlcworIzogb3NfYW1pZ2EuYzoxMTQzCittc2dpZCAiRTM2MDogQ2Fubm90IGV4ZWN1dGUgc2hlbGwgd2l0aCAtZiBvcHRpb24iCittc2dzdHIgIkUzNjA6IEV46WN1dGlvbiBkZSBzaGVsbCBpbXBvc3NpYmxlIGF2ZWMgbCdvcHRpb24gLWYiCisKKyM6IG9zX2FtaWdhLmM6MTE4NCBvc19hbWlnYS5jOjEyNzQKK21zZ2lkICJDYW5ub3QgZXhlY3V0ZSAiCittc2dzdHIgIk5lIHBldXQgZXjpY3V0ZXIgIgorCisjIHRvZG8KKyM6IG9zX2FtaWdhLmM6MTE4NyBvc19hbWlnYS5jOjEyODQKK21zZ2lkICJzaGVsbCAiCittc2dzdHIgInNoZWxsICIKKworIzogb3NfYW1pZ2EuYzoxMjA3IG9zX2FtaWdhLmM6MTMwOQorbXNnaWQgIiByZXR1cm5lZFxuIgorbXNnc3RyICIgcmV0b3VybulcbiIKKworIzogb3NfYW1pZ2EuYzoxNDUwCittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSB0cm9wIHBldGl0LiIKKworIzogb3NfYW1pZ2EuYzoxNDU0Cittc2dpZCAiSS9PIEVSUk9SIgorbXNnc3RyICJFUlJFVVIgZCdFL1MiCisKKyM6IG9zX21zd2luLmM6NTE3Cittc2dpZCAiLi4uKHRydW5jYXRlZCkiCittc2dzdHIgIi4uLih0cm9ucXXpKSIKKworIzogb3NfbXN3aW4uYzo2MTkKK21zZ2lkICInY29sdW1ucycgaXMgbm90IDgwLCBjYW5ub3QgZXhlY3V0ZSBleHRlcm5hbCBjb21tYW5kcyIKK21zZ3N0ciAiJ2NvbHVtbnMnIG5lIHZhdXQgcGFzIDgwLCBleOljdXRpb24gZGUgY29tbWFuZGVzIGV4dGVybmVzIGltcG9zc2libGUiCisKKyM6IG9zX21zd2luLmM6MTg1NAorbXNnaWQgIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRTIzNzogTGEgc+lsZWN0aW9uIGRlIGwnaW1wcmltYW50ZSBhIOljaG916SIKKworIyBUT0RPCisjOiBvc19tc3dpbi5jOjE4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidG8gJXMgb24gJXMiCittc2dzdHIgInZlcnMgJXMgc3VyICVzIgorCisjOiBvc19tc3dpbi5jOjE5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMzogVW5rbm93biBwcmludGVyIGZvbnQ6ICVzIgorbXNnc3RyICJFNjEzOiBGb250ZSBkJ2ltcHJpbWFudGUgaW5jb25udWU6ICVzIgorCisjOiBvc19tc3dpbi5jOjE5NTkgb3NfbXN3aW4uYzoxOTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogRXJyZXVyIGQnaW1wcmVzc2lvbjogJXMiCisKKyM6IG9zX21zd2luLmM6MTk3MAorbXNnaWQgIlVua25vd24iCittc2dzdHIgIkluY29ubnUiCisKKyM6IG9zX21zd2luLmM6MTk5NworIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyAnJXMnIgorbXNnc3RyICJJbXByZXNzaW9uIGRlICclcyciCisKKyMgdG9kbworIzogb3NfbXN3aW4uYzozMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDQ6IElsbGVnYWwgY2hhcnNldCBuYW1lIFwiJXNcIiBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ0OiBOb20gZGUgamV1IGRlIGNhcmFjLiBcIiVzXCIgaWxs6WdhbCBkYW5zIG5vbSBkZSBmb250ZSBcIiVzXCIiCisKKyM6IG9zX21zd2luLmM6MzA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ1OiBJbGxlZ2FsIGNoYXIgJyVjJyBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ1OiBDYXJhY3TocmUgJyVjJyBpbGzpZ2FsIGRhbnMgbGUgbm9tIGRlIGZvbnRlIFwiJXNcIiIKKworIzogb3NfcmlzY29zLmM6MTI1OAorbXNnaWQgIkUzNjY6IEludmFsaWQgJ29zZmlsZXR5cGUnIG9wdGlvbiAtIHVzaW5nIFRleHQiCittc2dzdHIgIkUzNjY6IE9wdGlvbiAnb3NmaWxldHlwZScgaW52YWxpZGUgLSBUZXh0IGVzdCB1dGlsaXPpIgorCisjOiBvc191bml4LmM6ODg3Cittc2dpZCAiVmltOiBEb3VibGUgc2lnbmFsLCBleGl0aW5nXG4iCittc2dzdHIgIlZpbTogU2lnbmFsIGRvdWJsZSwgc29ydGllXG4iCisKKyM6IG9zX3VuaXguYzo4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IFNpZ25hbCBtb3J0ZWwgJXMgaW50ZXJjZXB06VxuIgorCisjOiBvc191bml4LmM6ODk2Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIgorbXNnc3RyICJWaW06IFNpZ25hbCBtb3J0ZWwgaW50ZXJjZXB06VxuIgorCisjOiBvc191bml4LmM6MTE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAiTCdvdXZlcnR1cmUgZGUgbCdhZmZpY2hhZ2UgWCBhIHByaXMgJWxkIG1zZWMiCisKKyM6IG9zX3VuaXguYzoxMTg2Cittc2dpZCAiIgorIlxuIgorIlZpbTogR290IFggZXJyb3JcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZpbTogUmXndSBsJ2VycmV1ciBYXG4iCisKKyMgVE9ETworIzogb3NfdW5peC5jOjEyOTQKK21zZ2lkICJUZXN0aW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICJMZSB0ZXN0IGRlIGwnYWZmaWNoYWdlIFggYSDpY2hvdekiCisKKyMgVE9ETworIzogb3NfdW5peC5jOjE0MzMKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IgorbXNnc3RyICJMJ291dmVydHVyZSBkZSBsJ2FmZmljaGFnZSBYIGEgZOlwYXNz6SBsZXMgZOlsYWlzIgorCisjOiBvc191bml4LmM6MzE2NSBvc191bml4LmM6Mzg0NQorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCAiCittc2dzdHIgIiIKKyJcbiIKKyLJY2hlYyBkZSBsJ2V46WN1dGlvbiBkdSBzaGVsbCAiCisKKyMgdG9kbworIzogb3NfdW5peC5jOjMyMTMKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgc2hcbiIKK21zZ3N0ciAiIgorIlxuIgorIsljaGVjIGRlIGwnZXjpY3V0aW9uIGR1IHNoZWxsIHNoXG4iCisKKyM6IG9zX3VuaXguYzozMjE3IG9zX3VuaXguYzozODUxCittc2dpZCAiIgorIlxuIgorInNoZWxsIHJldHVybmVkICIKK21zZ3N0ciAiIgorIlxuIgorImxlIHNoZWxsIGEgcmV0b3VybukgIgorCisjIFRPRE8KKyM6IG9zX3VuaXguYzozMzUyCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkNy6WF0aW9uIGRlIHR1eWF1eCAocGlwZXMpIGltcG9zc2libGVcbiIKKworIyB0b2RvCisjOiBvc191bml4LmM6MzM2NworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZm9ya1xuIgorbXNnc3RyICIiCisiXG4iCisiU+lwYXJhdGlvbiBpbXBvc3NpYmxlXG4iCisKKyM6IG9zX3VuaXguYzozODU4Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgdGVybWluYXRlZFxuIgorbXNnc3RyICIiCisiXG4iCisiQ29tbWFuZGUgaW50ZXJyb21wdWVcbiIKKworIzogb3NfdW5peC5jOjQxMTEgb3NfdW5peC5jOjQyMzYgb3NfdW5peC5jOjU4OTQKK21zZ2lkICJYU01QIGxvc3QgSUNFIGNvbm5lY3Rpb24iCittc2dzdHIgIlhTTVAgYSBwZXJkdSBsYSBjb25uZWN0aW9uIElDRSIKKworIyBUT0RPCisjOiBvc191bml4LmM6NTQ3OAorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIkwnb3V2ZXJ0dXJlIGRhIGwnYWZmaWNoYWdlIFggYSDpY2hvdekiCisKKyMgVE9ETworIzogb3NfdW5peC5jOjU4MDAKK21zZ2lkICJYU01QIGhhbmRsaW5nIHNhdmUteW91cnNlbGYgcmVxdWVzdCIKK21zZ3N0ciAiWFNNUCBn6HJlIHVuZSByZXF16nRlIHNhdXZlei12b3VzIgorCisjOiBvc191bml4LmM6NTkxNworbXNnaWQgIlhTTVAgb3BlbmluZyBjb25uZWN0aW9uIgorbXNnc3RyICJvdXZlcnR1cmUgZGUgY29ubmVjdGlvbiBYU01QIgorCisjOiBvc191bml4LmM6NTkzNQorbXNnaWQgIlhTTVAgSUNFIGNvbm5lY3Rpb24gd2F0Y2ggZmFpbGVkIgorbXNnc3RyICJYU01QOiDpY2hlYyBkZSBsYSBzdXJ2ZWlsbGFuY2UgZGUgY29ubmVjdGlvbiBJQ0UiCisKKyM6IG9zX3VuaXguYzo1OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlhTTVAgU21jT3BlbkNvbm5lY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBhIOljaG916TogJXMiCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgIsAgbGEgbGlnbmUiCisKKyM6IG9zX3czMmV4ZS5jOjY1Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiUGFzIHB1IGFsbG91ZXIgZGUgbGEgbeltb2lyZSBwb3VyIGxhIGxpZ25lIGRlIGNvbW1hbmRlLiIKKworIzogb3NfdzMyZXhlLmM6NjYgb3NfdzMyZXhlLmM6ODkgb3NfdzMyZXhlLmM6MTAwCittc2dpZCAiVklNIEVycm9yIgorbXNnc3RyICJFcnJldXIgVklNIgorCisjOiBvc193MzJleGUuYzo4OQorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHZpbTMyLmRsbCEiCittc2dzdHIgIkxlIGNoYXJnZW1lbnQgZGUgdmltMzIuZGxsIGEg6WNob3XpICEiCisKKyM6IG9zX3czMmV4ZS5jOjk5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAiTGVzIHBvaW50ZXVycyBkZSBmb25jdGlvbiBuJ29udCBwdSDqdHJlIGFqdXN06XMg4CBsYSBETEwgISIKKworIzogb3Nfd2luMTYuYzozNDEgb3Nfd2luMzIuYzozMDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInNoZWxsIHJldHVybmVkICVkIgorbXNnc3RyICJsZSBzaGVsbCBhIHJldG91cm7pICVkIgorCisjOiBvc193aW4zMi5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgJXMgZXZlbnRcbiIKK21zZ3N0ciAiVmltOiDJduhuZW1lbnQgJXMgaW50ZXJjZXB06VxuIgorCisjOiBvc193aW4zMi5jOjI1MDkKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAiZmVybWV0dXJlIgorCisjOiBvc193aW4zMi5jOjI1MTEKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgImTpY29ubmVjdGlvbiIKKworIzogb3Nfd2luMzIuYzoyNTEyCittc2dpZCAic2h1dGRvd24iCittc2dzdHIgImFycup0IgorCisjOiBvc193aW4zMi5jOjMwMDIKK21zZ2lkICJFMzcxOiBDb21tYW5kIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTM3MTogQ29tbWFuZGUgaW50cm91dmFibGUiCisKKyM6IG9zX3dpbjMyLmM6MzAxNQorbXNnaWQgIiIKKyJWSU1SVU4uRVhFIG5vdCBmb3VuZCBpbiB5b3VyICRQQVRILlxuIgorIkV4dGVybmFsIGNvbW1hbmRzIHdpbGwgbm90IHBhdXNlIGFmdGVyIGNvbXBsZXRpb24uXG4iCisiU2VlICA6aGVscCB3aW4zMi12aW1ydW4gIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlZJTVJVTi5FWEUgbidlc3QgcGFzIGRhbnMgdm90cmUgJFBBVEguXG4iCisiTGVzIGNvbW1hbmRlcyBleHRlcm5lcyBuZSBmZXJvbnQgcGFzIGRlIHBhdXNlIHVuZSBmb2lzIHRlcm1pbullcy5cbiIKKyJWb2lyICA6aGVscCB3aW4zMi12aW1ydW4gIHBvdXIgcGx1cyBkJ2luZm9ybWF0aW9ucy4iCisKKyMgdG9kbworIzogb3Nfd2luMzIuYzozMDE4Cittc2dpZCAiVmltIFdhcm5pbmciCittc2dzdHIgIkFsZXJ0ZSBWaW0iCisKKyM6IHF1aWNrZml4LmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzI6IFRvbyBtYW55ICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MjogVHJvcCBkZSAlJSVjIGRhbnMgbGUgcGF0cm9uIGRlIGZvcm1hdHRhZ2UiCisKKyM6IHF1aWNrZml4LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzM6IFVuZXhwZWN0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzczOiAlJSVjIGluYXR0ZW5kdSBkYW5zIGxlIHBhdHJvbiBkZSBmb3JtYXR0YWdlIgorCisjOiBxdWlja2ZpeC5jOjMyNQorbXNnaWQgIkUzNzQ6IE1pc3NpbmcgXSBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc0OiBdIG1hbnF1YW50IGRhbnMgbGUgcGF0cm9uIGRlIGZvcm1hdHRhZ2UiCisKKyM6IHF1aWNrZml4LmM6MzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogJSUlYyBpbnN1cHBvcnTpIGRhbnMgbGUgcGF0cm9uIGRlIGZvcm1hdHRhZ2UiCisKKyMgdG9kbworIzogcXVpY2tmaXguYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NjogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmcgcHJlZml4IgorbXNnc3RyICJFMzc2OiAlJSVjIGludmFsaWRlIGRhbnMgbGUgcHLpZml4ZSBkdSBwYXRyb24gZGUgZm9ybWF0dGFnZSIKKworIyB0b2RvCisjOiBxdWlja2ZpeC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc3OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NzogJSUlYyBpbnZhbGlkZSBkYW5zIGxlIHBhdHJvbiBkZSBmb3JtYXR0YWdlIgorCisjOiBxdWlja2ZpeC5jOjM5MQorbXNnaWQgIkUzNzg6ICdlcnJvcmZvcm1hdCcgY29udGFpbnMgbm8gcGF0dGVybiIKK21zZ3N0ciAiRTM3ODogJ2Vycm9yZm9ybWF0JyBuZSBjb250aWVudCBhdWN1biBtb3RpZiIKKworIzogcXVpY2tmaXguYzo0OTcKK21zZ2lkICJFMzc5OiBNaXNzaW5nIG9yIGVtcHR5IGRpcmVjdG9yeSBuYW1lIgorbXNnc3RyICJFMzc5OiBOb20gZGUgculwZXJ0b2lyZSB2aWRlIG91IGFic2VudCIKKworIzogcXVpY2tmaXguYzo5ODQKK21zZ2lkICJFNTUzOiBObyBtb3JlIGl0ZW1zIgorbXNnc3RyICJFNTUzOiBQbHVzIGQn6WzpbWVudHMiCisKKyM6IHF1aWNrZml4LmM6MTIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIoJWQgb2YgJWQpJXMlczogIgorbXNnc3RyICIoJWQgZGUgJWQpJXMlczogIgorCisjOiBxdWlja2ZpeC5jOjEyMjMKK21zZ2lkICIgKGxpbmUgZGVsZXRlZCkiCittc2dzdHIgIiAobGlnbmUgZWZmYWPpZSkiCisKKyM6IHF1aWNrZml4LmM6MTQzMworbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDogRW4gYmFzIGRlIGxhIHBpbGUgcXVpY2tmaXgiCisKKyMgdG9kbworIzogcXVpY2tmaXguYzoxNDQyCittc2dpZCAiRTM4MTogQXQgdG9wIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgxOiBBdSBzb21tZXQgZGUgbGEgcGlsZSBxdWlja2ZpeCIKKworIzogcXVpY2tmaXguYzoxNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAibGlzdGUgZCdlcnJldXJzICVkIHN1ciAlZDsgJWQgZXJyZXVycyIKKworIzogcXVpY2tmaXguYzoxOTI4Cittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4MjogyWNyaXR1cmUgaW1wb3NzaWJsZSwgb3B0aW9uICdidWZ0eXBlJyBhY3RpdullIgorCisjIHRvZG8KKyM6IHJlZ2V4cC5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY5OiBpbnZhbGlkIGl0ZW0gaW4gJXMlJVtdIgorbXNnc3RyICJFMzY5OiDpbOltZW50IGludmFsaWRlIGRhbnMgJXMlJVtdIgorCisjOiByZWdleHAuYzo4MjcKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiBNb3RpZiB0cm9wIGxvbmciCisKKyM6IHJlZ2V4cC5jOjk5NgorbXNnaWQgIkU1MDogVG9vIG1hbnkgXFx6KCIKK21zZ3N0ciAiRTUwOiBUcm9wIGRlIFxceigiCisKKyM6IHJlZ2V4cC5jOjEwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUxOiBUb28gbWFueSAlcygiCittc2dzdHIgIkU1MTogVHJvcCBkZSAlcygiCisKKyM6IHJlZ2V4cC5jOjEwNjQKK21zZ2lkICJFNTI6IFVubWF0Y2hlZCBcXHooIgorbXNnc3RyICJFNTI6IFBhcyBkZSBjb3JyZXNwb25kYW5jZSBwb3VyIFxceigiCisKKyM6IHJlZ2V4cC5jOjEwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOiBVbm1hdGNoZWQgJXMlJSgiCittc2dzdHIgIkU1MzogUGFzIGRlIGNvcnJlc3BvbmRhbmNlIHBvdXIgJXMlJSgiCisKKyM6IHJlZ2V4cC5jOjEwNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU0OiBVbm1hdGNoZWQgJXMoIgorbXNnc3RyICJFNTQ6IFBhcyBkZSBjb3JyZXNwb25kYW5jZSBwb3VyICVzKCIKKworIzogcmVnZXhwLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTU6IFVubWF0Y2hlZCAlcykiCittc2dzdHIgIkU1NTogUGFzIGRlIGNvcnJlc3BvbmRhbmNlIHBvdXIgJXMpIgorCisjIFRPRE8KKyM6IHJlZ2V4cC5jOjEyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2OiAlcyogb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU2OiBMJ29w6XJhbmRlICVzKiBwb3VycmFpdCDqdHJlIHZpZGUiCisKKyMgVE9ETworIzogcmVnZXhwLmM6MTI0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNTc6ICVzKyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTc6IEwnb3DpcmFuZGUgJXMqIHBvdXJyYWl0IOp0cmUgdmlkZSIKKworIzogcmVnZXhwLmM6MTMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzQCIKK21zZ3N0ciAiRTU5OiBjYXJhY3TocmUgaW52YWxpZGUgYXBy6HMgJXNAIgorCisjIFRPRE8KKyM6IHJlZ2V4cC5jOjEzMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU4OiAlc3sgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU4OiBMJ29w6XJhbmRlICVzeyBwb3VycmFpdCDqdHJlIHZpZGUiCisKKyMgdG9kbworIzogcmVnZXhwLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA6IFRvbyBtYW55IGNvbXBsZXggJXN7Li4ufXMiCittc2dzdHIgIkU2MDogVHJvcCBkZSAlc3suLi59cyBjb21wbGV4ZXMiCisKKyM6IHJlZ2V4cC5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOiBOZXN0ZWQgJXMqIgorbXNnc3RyICJFNjE6ICVzKiBpbWJyaXF16SIKKworIzogcmVnZXhwLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI6IE5lc3RlZCAlcyVjIgorbXNnc3RyICJFNjI6ICVzJWMgaW1icmlxdekiCisKKyM6IHJlZ2V4cC5jOjE0NzMKK21zZ2lkICJFNjM6IGludmFsaWQgdXNlIG9mIFxcXyIKK21zZ3N0ciAiRTYzOiB1dGlsaXNhdGlvbiBpbnZhbGlkZSBkZSBcXF8iCisKKyM6IHJlZ2V4cC5jOjE1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY0OiAlcyVjIGZvbGxvd3Mgbm90aGluZyIKK21zZ3N0ciAiRTY0OiAlcyVjIG5lIHN1aXQgcmllbiIKKworIyB0b2RvCisjOiByZWdleHAuYzoxNTc0Cittc2dpZCAiRTY1OiBJbGxlZ2FsIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICJFNjU6IFLpdHJvculm6XJlbmNlIGlsbOlnYWxlIgorCisjOiByZWdleHAuYzoxNTg3Cittc2dpZCAiRTY2OiBcXHooIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU2NjogXFx6KCBuJ2VzdCBwYXMgYXV0b3Jpc+kgaWNpIgorCisjOiByZWdleHAuYzoxNjA2Cittc2dpZCAiRTY3OiBcXHoxIGV0IGFsLiBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNjc6IFxcejEgZXQgY28uIG5lIHNvbnQgcGFzIGF1dG9yaXPpcyBpY2kiCisKKyM6IHJlZ2V4cC5jOjE2MTcKK21zZ2lkICJFNjg6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxceiIKK21zZ3N0ciAiRTY4OiBDYXJhY3TocmUgaW52YWxpZGUgYXBy6HMgXFx6IgorCisjOiByZWdleHAuYzoxNjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2OTogTWlzc2luZyBdIGFmdGVyICVzJSVbIgorbXNnc3RyICJFNjk6IElsIG1hbnF1ZSBdIGFwcuhzICVzJSVbIgorCisjOiByZWdleHAuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MDogRW1wdHkgJXMlJVtdIgorbXNnc3RyICJFNzA6ICVzJSVbXSB2aWRlIgorCisjOiByZWdleHAuYzoxNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MTogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXMlJSIKK21zZ3N0ciAiRTcxOiBDYXJhY3TocmUgaW52YWxpZGUgYXBy6HMgJXMlJSIKKworIzogcmVnZXhwLmM6MjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTU0OiBTeW50YXggZXJyb3IgaW4gJXN7Li4ufSIKK21zZ3N0ciAiRTU1NDogRXJyZXVyIGRlIHN5bnRheGUgZGFucyAlc3suLi59IgorCisjOiByZWdleHAuYzoyODAwCittc2dpZCAiRTM2MTogQ3Jhc2ggaW50ZXJjZXB0ZWQ7IHJlZ2V4cCB0b28gY29tcGxleD8iCittc2dzdHIgIkUzNjE6IFBsYW50YWdlIGludGVyY2VwdOk7IGV4cC5y6WcuIHRyb3AgY29tcGxleGUgPyIKKworIzogcmVnZXhwLmM6Mjk0MQorbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2MzogdW4gbW90aWYgYSBmYWl0IGTpYm9yZGVyIGxhIHBpbGUiCisKKyM6IHJlZ2V4cC5jOjMxODAKK21zZ2lkICJFeHRlcm5hbCBzdWJtYXRjaGVzOlxuIgorbXNnc3RyICJTb3VzLWNvcnJlc3BvbmRhbmNlcyBleHRlcm5lczpcbiIKKworIzogc2NyZWVuLmM6MjExMworIywgYy1mb3JtYXQKK21zZ2lkICIrLS0lM2xkIGxpbmVzIGZvbGRlZCAiCittc2dzdHIgIistLSUzbGQgbGlnbmVzIHBsaellcyAiCisKKyM6IHNjcmVlbi5jOjc4ODQKK21zZ2lkICIgVlJFUExBQ0UiCittc2dzdHIgIiBSRU1QTEFDRU1FTlQtViIKKworIzogc2NyZWVuLmM6Nzg4OAorbXNnaWQgIiBSRVBMQUNFIgorbXNnc3RyICIgUkVNUExBQ0VNRU5UIgorCisjIFRPRE8KKyM6IHNjcmVlbi5jOjc4OTMKK21zZ2lkICIgUkVWRVJTRSIKK21zZ3N0ciAiIFJFVkVSU0UiCisKKyM6IHNjcmVlbi5jOjc4OTUKK21zZ2lkICIgSU5TRVJUIgorbXNnc3RyICIgSU5TRVJUSU9OIgorCisjOiBzY3JlZW4uYzo3ODk4Cittc2dpZCAiIChpbnNlcnQpIgorbXNnc3RyICIgKGluc2VydGlvbikiCisKKyM6IHNjcmVlbi5jOjc5MDAKK21zZ2lkICIgKHJlcGxhY2UpIgorbXNnc3RyICIgKHJlbXBsYWNlbWVudCkiCisKKyM6IHNjcmVlbi5jOjc5MDIKK21zZ2lkICIgKHZyZXBsYWNlKSIKK21zZ3N0ciAiIChyZW1wbGFjZW1lbnQtdikiCisKKyM6IHNjcmVlbi5jOjc5MDUKK21zZ2lkICIgSGVicmV3IgorbXNnc3RyICIgaOlicmV1IgorCisjOiBzY3JlZW4uYzo3OTE2Cittc2dpZCAiIEFyYWJpYyIKK21zZ3N0ciAiIGFyYWJpcXVlIgorCisjOiBzY3JlZW4uYzo3OTE5Cittc2dpZCAiIChsYW5nKSIKK21zZ3N0ciAiIChsYW5ndWUpIgorCisjOiBzY3JlZW4uYzo3OTIzCittc2dpZCAiIChwYXN0ZSkiCittc2dzdHIgIiAoY29sbGFnZSkiCisKKyM6IHNjcmVlbi5jOjc5MjkKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIgU0VMRUNUSU9OIgorCisjOiBzY3JlZW4uYzo3OTMxCittc2dpZCAiIFZJU1VBTCIKK21zZ3N0ciAiIFZJU1VFTCIKKworIzogc2NyZWVuLmM6NzkzMworbXNnaWQgIiBCTE9DSyIKK21zZ3N0ciAiIEJMT0MiCisKKyM6IHNjcmVlbi5jOjc5MzUKK21zZ2lkICIgTElORSIKK21zZ3N0ciAiIExJR05FIgorCisjOiBzY3JlZW4uYzo3OTQ4IHNjcmVlbi5jOjgwMDgKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgImVucmVnaXN0cmVtZW50IgorCisjOiBzZWFyY2guYzozNgorbXNnaWQgInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIKK21zZ3N0ciAiTGEgcmVjaGVyY2hlIGEgYXR0ZWludCBsZSBIQVVULCBldCBjb250aW51ZSBlbiBCQVMiCisKKyM6IHNlYXJjaC5jOjM3Cittc2dpZCAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIgorbXNnc3RyICJMYSByZWNoZXJjaGUgYSBhdHRlaW50IGxlIEJBUywgZXQgY29udGludWUgZW4gSEFVVCIKKworIzogc2VhcmNoLmM6NTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IFRleHRlIGRlIHJlY2hlcmNoZSBpbnZhbGlkZTogJXMiCisKKyM6IHNlYXJjaC5jOjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg0OiBzZWFyY2ggaGl0IFRPUCB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODQ6IGxhIHJlY2hlcmNoZSBhIGF0dGVpbnQgbGUgSEFVVCBzYW5zIHRyb3V2ZXI6ICVzIgorCisjOiBzZWFyY2guYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NTogc2VhcmNoIGhpdCBCT1RUT00gd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg1OiBsYSByZWNoZXJjaGUgYSBhdHRlaW50IGxlIEJBUyBzYW5zIHRyb3V2ZXI6ICVzIgorCisjOiBzZWFyY2guYzoxMjQ3Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiAnPycgb3UgJy8nIGF0dGVuZHUgYXBy6HMgJzsnIgorCisjOiBzZWFyY2guYzozNjg1Cittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAoaW5jbHV0IGRlcyBjb3JyZXNwb25kYW5jZXMgbGlzdOllcyBwculj6WRlbW1lbnQpIgorCisjLiBjdXJzb3IgYXQgc3RhdHVzIGxpbmUKKyM6IHNlYXJjaC5jOjM3MDUKK21zZ2lkICItLS0gSW5jbHVkZWQgZmlsZXMgIgorbXNnc3RyICItLS0gRmljaGllcnMgaW5jbHVzICIKKworIzogc2VhcmNoLmM6MzcwNworbXNnaWQgIm5vdCBmb3VuZCAiCittc2dzdHIgImludHJvdXZhYmxlICIKKworIzogc2VhcmNoLmM6MzcwOAorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgImRhbnMgbGUgY2hlbWluIC0tLVxuIgorCisjOiBzZWFyY2guYzozNzQ3Cittc2dpZCAiICAoQWxyZWFkeSBsaXN0ZWQpIgorbXNnc3RyICIgIChE6WrgIGxpc3TpKSIKKworIzogc2VhcmNoLmM6Mzc0OQorbXNnaWQgIiAgTk9UIEZPVU5EIgorbXNnc3RyICIgIElOVFJPVVZBQkxFIgorCisjOiBzZWFyY2guYzozODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGluY2x1ZGVkIGZpbGU6ICVzIgorbXNnc3RyICJFeGFtZW4gZGVzIGZpY2hpZXJzIGluY2x1czogJXMiCisKKyM6IHNlYXJjaC5jOjQwMTkKK21zZ2lkICJFMzg3OiBNYXRjaCBpcyBvbiBjdXJyZW50IGxpbmUiCittc2dzdHIgIkUzODc6IExhIGNvcnJlc3BvbmRhbmNlIGVzdCBzdXIgbGEgbGlnbmUgY291cmFudGUiCisKKyM6IHNlYXJjaC5jOjQxNjIKK21zZ2lkICJBbGwgaW5jbHVkZWQgZmlsZXMgd2VyZSBmb3VuZCIKK21zZ3N0ciAiVG91cyBsZXMgZmljaGllcnMgaW5jbHVzIG9udCDpdOkgdHJvdXbpcyIKKworIyB0b2RvCisjOiBzZWFyY2guYzo0MTY0Cittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIlBhcyBkZSBmaWNoaWVycyBpbmNsdXMiCisKKyM6IHNlYXJjaC5jOjQxODAKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IETpZmluaXRpb24gaW50cm91dmFibGUiCisKKyM6IHNlYXJjaC5jOjQxODIKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IE1vdGlmIGludHJvdXZhYmxlIgorCisjOiBzeW50YXguYzozMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTA6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMzkwOiBBcmd1bWVudCBpbGzpZ2FsOiAlcyIKKworIzogc3ludGF4LmM6MzE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkxOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MTogUGFzIGRlIHRlbCBzdXJncm91cGUgc3ludGFjdGlxdWU6ICVzIgorCisjOiBzeW50YXguYzozMzU5Cittc2dpZCAiTm8gU3ludGF4IGl0ZW1zIGRlZmluZWQgZm9yIHRoaXMgYnVmZmVyIgorbXNnc3RyICJQYXMgZCfpbOltZW50cyBzeW50YWN0aXF1ZXMgZOlmaW5pcyBwb3VyIGNlIHRhbXBvbiIKKworIzogc3ludGF4LmM6MzM2NworbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAic3luY2hybyBzdXIgbGVzIGNvbW1lbnRhaXJlIHN0eWxlIEMiCisKKyM6IHN5bnRheC5jOjMzNzUKK21zZ2lkICJubyBzeW5jaW5nIgorbXNnc3RyICJwYXMgZGUgc3luY2hybyIKKworIzogc3ludGF4LmM6MzM3OAorbXNnaWQgInN5bmNpbmcgc3RhcnRzICIKK21zZ3N0ciAibGEgc3luY2hybyBjb21tZW5jZSAiCisKKyM6IHN5bnRheC5jOjMzODAgc3ludGF4LmM6MzQ1NQorbXNnaWQgIiBsaW5lcyBiZWZvcmUgdG9wIGxpbmUiCittc2dzdHIgIiBsaWduZXMgYXZhbnQgbGEgbGlnbmUgZHUgaGF1dCIKKworIyB0b2RvCisjOiBzeW50YXguYzozMzg1Cittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggc3luYyBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gyWzpbWVudHMgZGUgc3luY2hybyBzeW50YWN0aXF1ZSAtLS0iCisKKyMgdG9kbworIzogc3ludGF4LmM6MzM5MAorbXNnaWQgIiIKKyJcbiIKKyJzeW5jaW5nIG9uIGl0ZW1zIgorbXNnc3RyICIiCisiXG4iCisic3luY2hyb25pc2F0aW9uIHN1ciDpbOltZW50cyIKKworIzogc3ludGF4LmM6MzM5NgorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDJbOltZW50cyBkZSBzeW50YXhlIC0tLSIKKworIzogc3ludGF4LmM6MzQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MjogUGFzIGRlIHRlbCBzdXJncm91cGUgZGUgc3ludGF4ZTogJXMiCisKKyM6IHN5bnRheC5jOjM0NDUKK21zZ2lkICJtaW5pbWFsICIKK21zZ3N0ciAibWluaW1hbCAiCisKKyM6IHN5bnRheC5jOjM0NTIKK21zZ2lkICJtYXhpbWFsICIKK21zZ3N0ciAibWF4aW1hbCAiCisKKyMgdG9kbworIzogc3ludGF4LmM6MzQ2NAorbXNnaWQgIjsgbWF0Y2ggIgorbXNnc3RyICI7IGNvcnJlc3BvbmRhbmNlIgorCisjOiBzeW50YXguYzozNDY2Cittc2dpZCAiIGxpbmUgYnJlYWtzIgorbXNnc3RyICIgZmlucyBkZSBsaWduZSIKKworIyB0b2RvCisjOiBzeW50YXguYzo0MTAwCittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk0OiBncm91cFt0XWhlcmUgcGFzIGFjY2VwdOkgaWNpIgorCisjIHRvZG8KKyM6IHN5bnRheC5jOjQxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiBQYXMgdHJvdXbpIGQnb2JqZXQgcmVnaW9uIHBvdXIgJXMiCisKKyM6IHN5bnRheC5jOjQxNTIKK21zZ2lkICJFMzk1OiBjb250YWlucyBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NTogTCdhcmd1bWVudCBjb250YWlucyBuJ2VzdCBwYXMgYWNjZXB06SBpY2kiCisKKyM6IHN5bnRheC5jOjQxNjMKK21zZ2lkICJFMzk2OiBjb250YWluZWRpbiBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NjogTCdhcmd1bWVudCBjb250YWluZWRpbiBuJ2VzdCBwYXMgYWNjZXB06SBpY2kiCisKKyM6IHN5bnRheC5jOjQyNDEKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5NzogTm9tIGRlIGZpY2hpZXIgcmVxdWlzIgorCisjOiBzeW50YXguYzo0NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODogJz0nIG1hbnF1YW50OiAlcyIKKworIzogc3ludGF4LmM6NDczNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogUGFzIGFzc2V6IGQnYXJndW1lbnRzOiBzeW50YXggcmVnaW9uICVzIgorCisjIFRPRE8KKyM6IHN5bnRheC5jOjUwNjgKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDogQXVjdW4gc3VyZ3JvdXBlIHNw6WNpZmnpIgorCisjOiBzeW50YXguYzo1MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDE6IFBhdHRlcm4gZGVsaW1pdGVyIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MDE6IETpbGltaXRldXIgZGUgbW90aWYgaW50cm91dmFibGU6ICVzIgorCisjIHRvZG8KKyM6IHN5bnRheC5jOjUxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMjogR2FyYmFnZSBhZnRlciBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRTQwMjogROl0cml0dXMgYXBy6HMgbGUgbW90aWY6ICVzIgorCisjIHRvZG8KKyM6IHN5bnRheC5jOjUyNzAKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiBzeW5jaHJvIHN5bnRheDogbW90aWYgZGUgY29udGludWF0aW9uIGRlIGxpZ25lIHBy6XNlbnQgZGV1eCBmb2lzIgorCisjOiBzeW50YXguYzo1MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDQ6IElsbGVnYWwgYXJndW1lbnRzOiAlcyIKK21zZ3N0ciAiRTQwNDogQXJndW1lbnRzIGlsbOlnYXV4OiAlcyIKKworIzogc3ludGF4LmM6NTM3NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiBTaWduZSDpZ2FsIG1hbnF1YW50OiAlcyIKKworIzogc3ludGF4LmM6NTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA2OiBFbXB0eSBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MDY6IEFyZ3VtZW50IHZpZGU6ICVzIgorCisjOiBzeW50YXguYzo1NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDc6ICVzIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU0MDc6ICVzIG4nZXN0IHBhcyBwZXJtaXMgaWNpIgorCisjOiBzeW50YXguYzo1NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDg6ICVzIG11c3QgYmUgZmlyc3QgaW4gY29udGFpbnMgbGlzdCIKK21zZ3N0ciAiRTQwODogJXMgZG9pdCDqdHJlIGxlIHByZW1pZXIg6WzpbWVudCBkJ3VuZSBsaXN0ZSBjb250YWlucyIKKworIzogc3ludGF4LmM6NTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA5OiBVbmtub3duIGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFNDA5OiBOb20gZGUgZ3JvdXBlIGluY29ubnU6ICVzIgorCisjOiBzeW50YXguYzo1NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTA6IEludmFsaWQgOnN5bnRheCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTQxMDogU291cy1jb21tYW5kZSBkZSA6c3ludGF4IGludmFsaWRlOiAlcyIKKworIzogc3ludGF4LmM6NjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDExOiBoaWdobGlnaHQgZ3JvdXAgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQxMTogZ3JvdXBlIGRlIHN1cmxpZ25hZ2UgaW50cm91dmFibGU6ICVzIgorCisjOiBzeW50YXguYzo2MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTI6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEyOiBQYXMgYXNzZXogZCdhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMzogVG9vIG1hbnkgYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEzOiBUcm9wIGQnYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjIFRPRE8KKyM6IHN5bnRheC5jOjYxNTAKK21zZ2lkICJFNDE0OiBncm91cCBoYXMgc2V0dGluZ3MsIGhpZ2hsaWdodCBsaW5rIGlnbm9yZWQiCittc2dzdHIgIkU0MTQ6IGxlIGdyb3VwZSBhIGRlcyBy6WdsYWdlcywgbGllbiBkZSBzdXJsaWduYWdlIGlnbm9y6SIKKworIzogc3ludGF4LmM6NjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE1OiB1bmV4cGVjdGVkIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE1OiBzaWduZSDpZ2FsIGluYXR0ZW5kdTogJXMiCisKKyM6IHN5bnRheC5jOjYzMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNjogbWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNjogc2lnbmUg6WdhbCBtYW5xdWFudDogJXMiCisKKyM6IHN5bnRheC5jOjYzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MTc6IGFyZ3VtZW50IG1hbnF1YW50OiAlcyIKKworIzogc3ludGF4LmM6NjM3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE4OiBJbGxlZ2FsIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTQxODogVmFsZXVyIGlsbOlnYWxlOiAlcyIKKworIzogc3ludGF4LmM6NjQ5MworbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6IENvdWxldXIgZGUgcHJlbWllciBwbGFuIGluY29ubnVlIgorCisjOiBzeW50YXguYzo2NTA0Cittc2dpZCAiRTQyMDogQkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQyMDogQ291bGV1ciBkJ2FycmnocmUtcGxhbiBpbmNvbm51ZSIKKworIzogc3ludGF4LmM6NjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6IE5vbSBvdSBudW3pcm8gZGUgY291bGV1ciBub24gcmVjb25udTogJXMiCisKKyM6IHN5bnRheC5jOjY3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6IGxlIGNvZGUgZGUgdGVybWluYWwgZXN0IHRyb3AgbG9uZzogJXMiCisKKyM6IHN5bnRheC5jOjY4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMzogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MjM6IEFyZ3VtZW50IGlsbOlnYWw6ICVzIgorCisjOiBzeW50YXguYzo3MzQ3Cittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDogVHJvcCBkJ2F0dHJpYnV0cyBkZSBzdXJsaWduYWdlIGRpZmbpcmVudHMgZW4gY291cnMgZCd1dGlsaXNhdGlvbiIKKworIzogdGFnLmM6OTAKK21zZ2lkICJFNTU1OiBhdCBib3R0b20gb2YgdGFnIHN0YWNrIgorbXNnc3RyICJFNTU1OiBFbiBiYXMgZGUgbGEgcGlsZSBkJ+l0aXF1ZXR0ZXMiCisKKyM6IHRhZy5jOjkxCittc2dpZCAiRTU1NjogYXQgdG9wIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiRTU1NjogQXUgc29tbWV0IGRlIGxhIHBpbGUgZCfpdGlxdWV0dGVzIgorCisjOiB0YWcuYzozOTIKK21zZ2lkICJFNDI1OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNTogTmUgcGV1dCBhbGxlciBhdmFudCBsYSBwcmVtaehyZSDpdGlxdWV0dGUgY29ycmVzcG9uZGFudGUiCisKKyM6IHRhZy5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI2OiB0YWcgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQyNjogyXRpcXVldHRlIGludHJvdXZhYmxlOiAlcyIKKworIzogdGFnLmM6NTQ1Cittc2dpZCAiICAjIHByaSBraW5kIHRhZyIKK21zZ3N0ciAiICAjIHByaSB0eXBlIOl0aXF1ZXR0ZSIKKworIzogdGFnLmM6NTQ4Cittc2dpZCAiZmlsZVxuIgorbXNnc3RyICJmaWNoaWVyXG4iCisKKyMuCisjLiAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMuICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjOiB0YWcuYzo3MDYKK21zZ2lkICJFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOiAiCittc2dzdHIgIkVudHJleiBsZSBubyBjaG9pc2kgKDxDUj4gcG91ciBhbm51bGVyKTogIgorCisjOiB0YWcuYzo3NDYKK21zZ2lkICJFNDI3OiBUaGVyZSBpcyBvbmx5IG9uZSBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjc6IElsIG4neSBhIHF1J3VuZSDpdGlxdWV0dGUgY29ycmVzcG9uZGFudGUiCisKKyM6IHRhZy5jOjc0OAorbXNnaWQgIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjg6IE5lIHBldXQgYWxsZXIgYXUgZGVs4CBkZSBsYSBkZXJuaehyZSDpdGlxdWV0dGUgY29ycmVzcG9uZGFudGUiCisKKyM6IHRhZy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiTGUgZmljaGllciBcIiVzXCIgbidleGlzdGUgcGFzIgorCisjLiBHaXZlIGFuIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiBtYXRjaGluZyB0YWdzCisjOiB0YWcuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICVkIG9mICVkJXMiCittc2dzdHIgIul0aXF1ZXR0ZSAlZCBkZSAlZCVzIgorCisjOiB0YWcuYzo3ODQKK21zZ2lkICIgb3IgbW9yZSIKK21zZ3N0ciAiIG91IHBsdXMiCisKKyM6IHRhZy5jOjc4NgorbXNnaWQgIiAgVXNpbmcgdGFnIHdpdGggZGlmZmVyZW50IGNhc2UhIgorbXNnc3RyICIgIFV0aWxpc2F0aW9uIGQndW5lIOl0aXF1ZXR0ZSBkYW5zIHVuZSBjYXNzZSBkaWZm6XJlbnRlICEiCisKKyM6IHRhZy5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTQyOTogTGUgZmljaGllciBcIiVzXCIgbidleGlzdGUgcGFzIgorCisjIHRvZG8KKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6ODk5Cittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyBWRVJTIOl0aXF1ZXR0ZSBERSBsaWduZSAgIGRhbnMgZmljaGllci90ZXh0ZSIKKworIzogdGFnLmM6MTIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICJFeGFtZW4gZHUgZmljaGllciBkJ+l0aXF1ZXR0ZXMgJXMiCisKKyM6IHRhZy5jOjEzODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IENoZW1pbiBkZSBmaWNoaWVycyBkJ+l0aXF1ZXR0ZXMgdHJvbnF16SBwb3VyICVzXG4iCisKKyM6IHRhZy5jOjE5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMTogRm9ybWF0IGVycm9yIGluIHRhZ3MgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0MzE6IEVycmV1ciBkZSBmb3JtYXQgZGFucyBsZSBmaWNoaWVyIGQn6XRpcXVldHRlcyBcIiVzXCIiCisKKyM6IHRhZy5jOjE5MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICJBdmFudCBsJ29jdGV0ICVsZCIKKworIzogdGFnLmM6MTkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMyOiBUYWdzIGZpbGUgbm90IHNvcnRlZDogJXMiCittc2dzdHIgIkU0MzI6IExlIGZpY2hpZXIgZCfpdGlxdWV0dGVzIG4nZXN0IHBhcyBjbGFzc+k6ICVzIgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MTk3OQorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzogUGFyIGRlIGZpY2hpZXIgZCfpdGlxdWV0dGVzIgorCisjIHRvZG8KKyM6IHRhZy5jOjI2NjYKK21zZ2lkICJFNDM0OiBDYW4ndCBmaW5kIHRhZyBwYXR0ZXJuIgorbXNnc3RyICJFNDM0OiBMZSBtb3RpZiBkZSBsJ+l0aXF1ZXR0ZSBlc3QgaW50cm91dmFibGUiCisKKyM6IHRhZy5jOjI2NzcKK21zZ2lkICJFNDM1OiBDb3VsZG4ndCBmaW5kIHRhZywganVzdCBndWVzc2luZyEiCittc2dzdHIgIkU0MzU6IMl0aXF1ZXR0ZSBpbnRyb3V2YWJsZSwgb24gc2UgY29udGVudGUgZGUgZGV2aW5lciAhIgorCisjOiB0ZXJtLmM6MTc0NQorbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiJyBpbmNvbm51LiBMZXMgdGVybWluYXV4IGludGVybmVzIHNvbnQ6IgorCisjIHRvZG8KKyM6IHRlcm0uYzoxNzY5Cittc2dpZCAiZGVmYXVsdGluZyB0byAnIgorbXNnc3RyICJ1dGlsaXNhdGlvbiBwYXIgZOlmYXV0IGRlICciCisKKyM6IHRlcm0uYzoyMTI3Cittc2dpZCAiRTU1NzogQ2Fubm90IG9wZW4gdGVybWNhcCBmaWxlIgorbXNnc3RyICJFNTU3OiBMZSBmaWNoaWVyIHRlcm1jYXAgbmUgcGV1dCDqdHJlIG91dmVydCIKKworIzogdGVybS5jOjIxMzEKK21zZ2lkICJFNTU4OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWluZm8iCittc2dzdHIgIkU1NTg6IExhIGRlc2NyaXB0aW9uIGR1IHRlcm1pbmFsIG4nYSBwYXMg6XTpIHRyb3V26WUgZGFucyB0ZXJtaW5mbyIKKworIzogdGVybS5jOjIxMzMKK21zZ2lkICJFNTU5OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTU1OTogTGEgZGVzY3JpcHRpb24gZHUgdGVybWluYWwgbidhIHBhcyDpdOkgdHJvdXbpZSBkYW5zIHRlcm1jYXAiCisKKyMgdG9kbworIzogdGVybS5jOjIyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzNjogTm8gXCIlc1wiIGVudHJ5IGluIHRlcm1jYXAiCittc2dzdHIgIkU0MzY6IFBhcyBkJ2VudHLpZSBcIiVzXCIgZGFucyB0ZXJtY2FwIgorCisjIHRvZG8KKyM6IHRlcm0uYzoyNzY2Cittc2dpZCAiRTQzNzogdGVybWluYWwgY2FwYWJpbGl0eSBcImNtXCIgcmVxdWlyZWQiCittc2dzdHIgIkU0Mzc6IGNhcGFjaXTpIGRlIHRlcm1pbmFsIFwiY21cIiByZXF1aXNlIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0OTcwCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBUb3VjaGVzIGR1IHRlcm1pbmFsIC0tLSIKKworIyB0b2RvCisjOiB1aS5jOjI1MgorbXNnaWQgIm5ldyBzaGVsbCBzdGFydGVkXG4iCittc2dzdHIgIm5vdXZlYXUgc2hlbGwgZOltYXJy6VxuIgorCisjIHRvZG8KKyM6IHVpLmM6MTc4NAorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICJWaW06IEVycmV1ciBlbiBsaXNhbnQgbCdlbnRy6WUsIHNvcnRpZS4uLlxuIgorCisjIHRvZG8KKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6Mzk0Cittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICJBbm51bGF0aW9uIGltcG9zc2libGU7IG9uIGNvbnRpbnVlIHF1YW5kIG3qbWUiCisKKyM6IHVuZG8uYzo1NDkKK21zZ2lkICJFNDM4OiB1X3VuZG86IGxpbmUgbnVtYmVycyB3cm9uZyIKK21zZ3N0ciAiRTQzODogdV91bmRvOiBudW3pcm9zIGRlIGxpZ25lIGVycm9u6XMiCisKKyM6IHVuZG8uYzo3MTgKK21zZ2lkICIxIGNoYW5nZSIKK21zZ3N0ciAiMSBjaGFuZ2VtZW50IgorCisjOiB1bmRvLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFuZ2VzIgorbXNnc3RyICIlbGQgY2hhbmdlbWVudHMiCisKKyM6IHVuZG8uYzo3NjQKK21zZ2lkICJFNDM5OiB1bmRvIGxpc3QgY29ycnVwdCIKK21zZ3N0ciAiRTQzOTogbGEgbGlzdGUgZCdhbm51bGF0aW9uIGVzdCBjb3Jyb21wdWUiCisKKyMgdG9kbworIzogdW5kby5jOjc5NgorbXNnaWQgIkU0NDA6IHVuZG8gbGluZSBtaXNzaW5nIgorbXNnc3RyICJFNDQwOiBsaWduZSBkJ2FubnVsYXRpb24gbWFucXVhbnRlIgorCisjLiBPbmx5IE1TIFZDIDQuMSBhbmQgZWFybGllciBjYW4gZG8gV2luMzJzCisjOiB2ZXJzaW9uLmM6NzI0Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYvMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2lvbiBncmFwaGlxdWUgTVMtV2luZG93cyAxNi8zMiBiaXRzIgorCisjOiB2ZXJzaW9uLmM6NzI2Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2lvbiBncmFwaGlxdWUgTVMtV2luZG93cyAzMiBiaXRzIgorCisjOiB2ZXJzaW9uLmM6NzI5Cittc2dpZCAiIGluIFdpbjMycyBtb2RlIgorbXNnc3RyICIgbGFuY+llIGVuIG1vZGUgV2luMzJzIgorCisjOiB2ZXJzaW9uLmM6NzMxCittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIiBzdXBwb3J0YW50IGwnT0xFIgorCisjOiB2ZXJzaW9uLmM6NzM0Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IGNvbnNvbGUgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb24gY29uc29sZSBNUy1XaW5kb3dzIDMyIGJpdHMiCisKKyM6IHZlcnNpb24uYzo3MzgKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNiBiaXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb24gTVMtV2luZG93cyAxNiBiaXRzIgorCisjOiB2ZXJzaW9uLmM6NzQyCittc2dpZCAiIgorIlxuIgorIjMyIGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb24gTVMtRE9TIDMyIGJpdHMiCisKKyM6IHZlcnNpb24uYzo3NDQKK21zZ2lkICIiCisiXG4iCisiMTYgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2lvbiBNUy1ET1MgMTYgYml0cyIKKworIzogdmVyc2lvbi5jOjc1MAorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2lvbiBNYXhPUyBYICh1bml4KSIKKworIzogdmVyc2lvbi5jOjc1MgorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJWZXJzaW9uIE1hY09TIFgiCisKKyM6IHZlcnNpb24uYzo3NTUKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb24gTWFjT1MiCisKKyM6IHZlcnNpb24uYzo3NjAKK21zZ2lkICIiCisiXG4iCisiUklTQyBPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2lvbiBSSVNDIE9TIgorCisjIHRvZG8KKyM6IHZlcnNpb24uYzo3NzAKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisiUGF0Y2hlcyBpbmNsdXM6ICIKKworIzogdmVyc2lvbi5jOjc5NiB2ZXJzaW9uLmM6MTE0NQorbXNnaWQgIk1vZGlmaWVkIGJ5ICIKK21zZ3N0ciAiTW9kaWZp6SBwYXIgIgorCisjOiB2ZXJzaW9uLmM6ODAzCittc2dpZCAiIgorIlxuIgorIkNvbXBpbGVkICIKK21zZ3N0ciAiIgorIlxuIgorIkNvbXBpbOkgIgorCisjOiB2ZXJzaW9uLmM6ODA2Cittc2dpZCAiYnkgIgorbXNnc3RyICJwYXIgIgorCisjOiB2ZXJzaW9uLmM6ODE4Cittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyLJbm9ybWUgdmVyc2lvbiAiCisKKyM6IHZlcnNpb24uYzo4MjEKK21zZ2lkICIiCisiXG4iCisiQmlnIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiR3Jvc3NlIHZlcnNpb24gIgorCisjOiB2ZXJzaW9uLmM6ODI0Cittc2dpZCAiIgorIlxuIgorIk5vcm1hbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb24gbm9ybWFsZSAiCisKKyM6IHZlcnNpb24uYzo4MjcKK21zZ2lkICIiCisiXG4iCisiU21hbGwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJQZXRpdGUgdmVyc2lvbiAiCisKKyM6IHZlcnNpb24uYzo4MjkKK21zZ2lkICIiCisiXG4iCisiVGlueSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb24gbWludXNjdWxlICIKKworIzogdmVyc2lvbi5jOjgzNQorbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAic2FucyBpbnRlcmZhY2UgZ3JhcGhpcXVlLiIKKworIzogdmVyc2lvbi5jOjg0MAorbXNnaWQgIndpdGggR1RLMi1HTk9NRSBHVUkuIgorbXNnc3RyICJhdmVjIGludGVyZmFjZSBHVEsyLUdOT01FLiIKKworIzogdmVyc2lvbi5jOjg0MgorbXNnaWQgIndpdGggR1RLLUdOT01FIEdVSS4iCittc2dzdHIgImF2ZWMgaW50ZXJmYWNlIEdUSy1HTk9NRS4iCisKKyM6IHZlcnNpb24uYzo4NDYKK21zZ2lkICJ3aXRoIEdUSzIgR1VJLiIKK21zZ3N0ciAiYXZlYyBpbnRlcmZhY2UgR1RLMi4iCisKKyM6IHZlcnNpb24uYzo4NDgKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICJhdmVjIGludGVyZmFjZSBHVEsuIgorCisjOiB2ZXJzaW9uLmM6ODUzCittc2dpZCAid2l0aCBYMTEtTW90aWYgR1VJLiIKK21zZ3N0ciAiYXZlYyBpbnRlcmZhY2UgWDExLU1vdGlmLiIKKworIzogdmVyc2lvbi5jOjg1NworbXNnaWQgIndpdGggWDExLW5lWHRhdyBHVUkuIgorbXNnc3RyICJhdmVjIGludGVyZmFjZSBYMTEtbmVYdGF3LiIKKworIzogdmVyc2lvbi5jOjg1OQorbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICJhdmVjIGludGVyZmFjZSBYMTEtQXRoZW5hLiIKKworIzogdmVyc2lvbi5jOjg2MworbXNnaWQgIndpdGggQmVPUyBHVUkuIgorbXNnc3RyICJhdmVjIGludGVyZmFjZSBCZU9TLiIKKworIzogdmVyc2lvbi5jOjg2NgorbXNnaWQgIndpdGggUGhvdG9uIEdVSS4iCittc2dzdHIgImF2ZWMgaW50ZXJmYWNlIFBob3Rvbi4iCisKKyM6IHZlcnNpb24uYzo4NjkKK21zZ2lkICJ3aXRoIEdVSS4iCittc2dzdHIgImF2ZWMgdW5lIGludGVyZmFjZSBncmFwaGlxdWUuIgorCisjOiB2ZXJzaW9uLmM6ODcyCittc2dpZCAid2l0aCBDYXJib24gR1VJLiIKK21zZ3N0ciAiYXZlYyBpbnRlcmZhY2UgQ2FyYm9uLiIKKworIzogdmVyc2lvbi5jOjg3NQorbXNnaWQgIndpdGggQ29jb2EgR1VJLiIKK21zZ3N0ciAiYXZlYyBpbnRlcmZhY2UgQ29jb2EuIgorCisjOiB2ZXJzaW9uLmM6ODc4Cittc2dpZCAid2l0aCAoY2xhc3NpYykgR1VJLiIKK21zZ3N0ciAiYXZlYyBpbnRlcmZhY2UgKGNsYXNzaXF1ZSkuIgorCisjOiB2ZXJzaW9uLmM6ODg5Cittc2dpZCAiICBGZWF0dXJlcyBpbmNsdWRlZCAoKykgb3Igbm90ICgtKTpcbiIKK21zZ3N0ciAiICBGb25jdGlvbm5hbGl06XMgaW5jbHVzZXMgKCspIG91IG5vbiAoLSk6XG4iCisKKyM6IHZlcnNpb24uYzo5MDEKK21zZ2lkICIgICBzeXN0ZW0gdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgIGZpY2hpZXIgdmltcmMgc3lzdOhtZTogXCIiCisKKyM6IHZlcnNpb24uYzo5MDYKK21zZ2lkICIgICAgIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgZmljaGllciB2aW1yYyB1dGlsaXNhdGV1cjogXCIiCisKKyM6IHZlcnNpb24uYzo5MTEKK21zZ2lkICIgMm5kIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAybWUgZmljaGllciB2aW1yYyB1dGlsaXNhdGV1cjogXCIiCisKKyM6IHZlcnNpb24uYzo5MTYKK21zZ2lkICIgM3JkIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAzbWUgZmljaGllciB2aW1yYyB1dGlsaXNhdGV1cjogXCIiCisKKyM6IHZlcnNpb24uYzo5MjEKK21zZ2lkICIgICAgICB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgIGZpY2hpZXIgZXhyYyB1dGlsaXNhdGV1cjogXCIiCisKKyM6IHZlcnNpb24uYzo5MjYKK21zZ2lkICIgIDJuZCB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgMm1lIGZpY2hpZXIgZXhyYyB1dGlsaXNhdGV1cjogXCIiCisKKyM6IHZlcnNpb24uYzo5MzIKK21zZ2lkICIgIHN5c3RlbSBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgZmljaGllciBndmltcmMgc3lzdOhtZTogXCIiCisKKyM6IHZlcnNpb24uYzo5MzYKK21zZ2lkICIgICAgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICBmaWNoaWVyIGd2aW1yYyB1dGlsaXNhdGV1cjogXCIiCisKKyM6IHZlcnNpb24uYzo5NDAKK21zZ2lkICIybmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIjJtZSBmaWNoaWVyIGd2aW1yYyB1dGlsaXNhdGV1cjogXCIiCisKKyM6IHZlcnNpb24uYzo5NDUKK21zZ2lkICIzcmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIjNtZSBmaWNoaWVyIGd2aW1yYyB1dGlsaXNhdGV1cjogXCIiCisKKyM6IHZlcnNpb24uYzo5NTIKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgICBmaWNoaWVyIG1lbnUgc3lzdOhtZTogXCIiCisKKyM6IHZlcnNpb24uYzo5NjAKK21zZ2lkICIgIGZhbGwtYmFjayBmb3IgJFZJTTogXCIiCittc2dzdHIgIiAgICAgICAgICAgICAgICRWSU0gcGFyIGTpZmF1dDogXCIiCisKKyM6IHZlcnNpb24uYzo5NjYKK21zZ2lkICIgZi1iIGZvciAkVklNUlVOVElNRTogXCIiCittc2dzdHIgIiAgICAgICAgJFZJTVJVTlRJTUUgcGFyIGTpZmF1dDogXCIiCisKKyM6IHZlcnNpb24uYzo5NzAKK21zZ2lkICJDb21waWxhdGlvbjogIgorbXNnc3RyICJDb21waWxhdGlvbjogIgorCisjOiB2ZXJzaW9uLmM6OTc2Cittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAiQ29tcGlsYXRldXI6ICIKKworIzogdmVyc2lvbi5jOjk4MQorbXNnaWQgIkxpbmtpbmc6ICIKK21zZ3N0ciAiyWRpdGlvbiBkZSBsaWVuczogIgorCisjOiB2ZXJzaW9uLmM6OTg2Cittc2dpZCAiICBERUJVRyBCVUlMRCIKK21zZ3N0ciAiICBWRVJTSU9OIERFIETJQk9HQUdFIgorCisjOiB2ZXJzaW9uLmM6MTAyNAorbXNnaWQgIlZJTSAtIFZpIElNcHJvdmVkIgorbXNnc3RyICJWSU0gLSBWaSBBbelsaW9y6SIKKworIzogdmVyc2lvbi5jOjEwMjYKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAidmVyc2lvbiAiCisKKyM6IHZlcnNpb24uYzoxMDI3Cittc2dpZCAiYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorbXNnc3RyICJwYXIgQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorCisjIHRvZG8KKyM6IHZlcnNpb24uYzoxMDMxCittc2dpZCAiVmltIGlzIG9wZW4gc291cmNlIGFuZCBmcmVlbHkgZGlzdHJpYnV0YWJsZSIKK21zZ3N0ciAiVmltIGVzdCB1biBsb2dpY2llbCBsaWJyZSIKKworIzogdmVyc2lvbi5jOjEwMzMKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAiQWlkZXogZGUgcGF1dnJlcyBlbmZhbnRzIGVuIE91Z2FuZGEgISIKKworIzogdmVyc2lvbi5jOjEwMzQKK21zZ2lkICJ0eXBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJ0YXBleiAgOmhlbHAgaWNjZjxFbnRy6WU+ICBwb3VyIHBsdXMgZCdpbmZvcm1hdGlvbnMiCisKKyM6IHZlcnNpb24uYzoxMDM2Cittc2dpZCAidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIKK21zZ3N0ciAidGFwZXogIDpxPEVudHLpZT4gICAgICAgICAgICAgICBwb3VyIHNvcnRpciBkdSBwcm9ncmFtbWUgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTAzNworbXNnaWQgInR5cGUgIDpoZWxwPEVudGVyPiAgb3IgIDxGMT4gIGZvciBvbi1saW5lIGhlbHAiCittc2dzdHIgInRhcGV6ICA6aGVscDxFbnRy6WU+ICBvdSAgPEYxPiAgcG91ciBhY2PpZGVyIOAgbCdhaWRlIGVuIGxpZ25lICAgICIKKworIzogdmVyc2lvbi5jOjEwMzgKK21zZ2lkICJ0eXBlICA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICBmb3IgdmVyc2lvbiBpbmZvIgorbXNnc3RyICJ0YXBleiAgOmhlbHAgdmVyc2lvbjY8RW50cullPiAgIHBvdXIgbGlyZSBsZXMgbm90ZXMgZGUgbWlzZSDgIGpvdXIiCisKKyM6IHZlcnNpb24uYzoxMDQxCittc2dpZCAiUnVubmluZyBpbiBWaSBjb21wYXRpYmxlIG1vZGUiCittc2dzdHIgIkNvbXBhdGliaWxpdOkgVmkgYWN0aXbpZSIKKworIzogdmVyc2lvbi5jOjEwNDIKK21zZ2lkICJ0eXBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBmb3IgVmltIGRlZmF1bHRzIgorbXNnc3RyICJ0YXBleiAgOnNldCBub2NwPEVudHLpZT4gICAgICAgIHBvdXIgZOlmLiBkZSBWaW0iCisKKyM6IHZlcnNpb24uYzoxMDQzCittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAidGFwZXogIDpoZWxwIGNwLWRlZmF1bHQ8RW50cullPiBwb3VyIHBsdXMgZCdpbmZvIgorCisjOiB2ZXJzaW9uLmM6MTA1OAorbXNnaWQgIm1lbnUgIEhlbHAtPk9ycGhhbnMgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIm1lbnUgIEFpZGUtPk9ycGhlbGlucyAgICAgICAgICAgcG91ciBwbHVzIGQnaW5mbyIKKworIzogdmVyc2lvbi5jOjEwNjAKK21zZ2lkICJSdW5uaW5nIG1vZGVsZXNzLCB0eXBlZCB0ZXh0IGlzIGluc2VydGVkIgorbXNnc3RyICJMZXMgbW9kZXMgc29udCBk6XNhY3RpdulzLCB0b3V0IHRleHRlIGVzdCBpbnPpcukiCisKKyMgVE9ETworIzogdmVyc2lvbi5jOjEwNjEKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBJbnNlcnQgTW9kZSAgIgorbXNnc3RyICJtZW51ICBFZGl0aW9uLT5S6WdsYWdlcyBHbG9iYXV4LT5JbnNlcnRpb24gUGVybS4gIgorCisjOiB2ZXJzaW9uLmM6MTA2MgorbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0d28gbW9kZXMgICAgICAiCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG91ciBsZXMgbW9kZXMgICAiCisKKyMgVE9ETworIzogdmVyc2lvbi5jOjEwNjYKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBWaSBDb21wYXRpYmxlIgorbXNnc3RyICJtZW51ICDJZGl0aW9uLT5S6WdsYWdlcyBHbG9iYXV4LT5Db21wYXRpYmlsaXTpIFZpIgorCisjOiB2ZXJzaW9uLmM6MTA2NworbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBWaW0gZGVmYXVsdHMgICAiCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG91ciBk6WYuIGRlIFZpbSAiCisKKyM6IHZlcnNpb24uYzoxMTEzCittc2dpZCAiV0FSTklORzogV2luZG93cyA5NS85OC9NRSBkZXRlY3RlZCIKK21zZ3N0ciAiQUxFUlRFOiBXaW5kb3dzIDk1Lzk4L01FIGTpdGVjdOkiCisKKyM6IHZlcnNpb24uYzoxMTE2Cittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAidGFwZXogIDpoZWxwIHdpbmRvd3M5NTxFbnRy6WU+ICBwb3VyIHBsdXMgZCdpbmZvcm1hdGlvbiIKKworIzogd2luZG93LmM6MjA0Cittc2dpZCAiRTQ0MTogVGhlcmUgaXMgbm8gcHJldmlldyB3aW5kb3ciCittc2dzdHIgIkU0NDE6IElsIG4neSBhIHBhcyBkZSBmZW7qdHJlIGRlIHBy6XZpc3VhbGlzYXRpb24iCisKKyM6IHdpbmRvdy5jOjU4MgorbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IE5lIHBldXQgc+lwYXJlciBoYXV0Z2F1Y2hlIGV0IGJhc2Ryb2l0ZSBlbiBt6m1lIHRlbXBzIgorCisjIHRvZG8KKyM6IHdpbmRvdy5jOjEzNDEKK21zZ2lkICJFNDQzOiBDYW5ub3Qgcm90YXRlIHdoZW4gYW5vdGhlciB3aW5kb3cgaXMgc3BsaXQiCittc2dzdHIgIkU0NDM6IFJvdGF0aW9uIGltcG9zc2libGUgcXVhbmQgZGVzIGZlbup0cmVzIHNvbnQgc+lwYXLpZXMiCisKKyM6IHdpbmRvdy5jOjE4MzIKK21zZ2lkICJFNDQ0OiBDYW5ub3QgY2xvc2UgbGFzdCB3aW5kb3ciCittc2dzdHIgIkU0NDQ6IEZlcm1ldHVyZSBkZSBsYSBkZXJuaehyZSBmZW7qdHJlIGltcG9zc2libGUiCisKKyM6IHdpbmRvdy5jOjI1NjMKK21zZ2lkICJBbHJlYWR5IG9ubHkgb25lIHdpbmRvdyIKK21zZ3N0ciAiSWwgbid5IGEgZOlq4CBwbHVzIHF1J3VuZSBmZW7qdHJlIgorCisjIFRPRE8KKyM6IHdpbmRvdy5jOjI2MTAKK21zZ2lkICJFNDQ1OiBPdGhlciB3aW5kb3cgY29udGFpbnMgY2hhbmdlcyIKK21zZ3N0ciAiRTQ0NTogTCdhdXRyZSBmZW7qdHJlIG4nYSBwYXMg6XTpIGVucmVnaXN0cullIgorCisjOiB3aW5kb3cuYzo0NDU2Cittc2dpZCAiRTQ0NjogTm8gZmlsZSBuYW1lIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTQ0NjogUGFzIGRlIG5vbSBkZSBmaWNoaWVyIHNvdXMgbGUgY3Vyc2V1ciIKKworIyB0b2RvCisjOiB3aW5kb3cuYzo0NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDc6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTQ0NzogTGUgZmljaGllciBcIiVzXCIgbidlc3QgcGFzIGRhbnMgbGUgY2hlbWluIgorCisjOiBnbG9iYWxzLmg6MTIwOCBpZl9wZXJsLnhzOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzcwOiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5ICVzIgorbXNnc3RyICJFMzcwOiBMZSBjaGFyZ2VtZW50IGRlIGxhIGJpYmxpb3Ro6HF1ZSAlcyIKKworIzogaWZfcGVybC54czo1OTEKK21zZ2lkICJTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgUGVybCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJE6XNvbOksIGNvbW1hbmRlIGTpc2FjdGl26WU6IGxhIGJpYmxpb3Ro6HF1ZSBQZXJsIG4nYSBwdSDqdHJlIGNoYXJn6WUuIgorCisjOiBpZl9wZXJsLnhzOjYzNworbXNnaWQgIkUyOTk6IFBlcmwgZXZhbHVhdGlvbiBmb3JiaWRkZW4gaW4gc2FuZGJveCB3aXRob3V0IHRoZSBTYWZlIG1vZHVsZSIKK21zZ3N0ciAiRTI5OTogyXZhbHVhdGlvbiBQZXJsIGludGVyZGl0ZSBkYW5zIGJhYyDgIHNhYmxlIHNhbnMgbW9kdWxlIFNhZmUiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTgzCittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICLJZGl0ZSBkYW5zICZwbHVzaWV1cnMgVmltcyIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODkKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgIslkaXRlIGRhbnMgdW4gc2V1bCAmVmltIgorCisjIHRvZG8KKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTk4Cittc2dpZCAiJkRpZmYgd2l0aCBWaW0iCittc2dzdHIgIiZDb21wYXJlciBkYW5zIFZpbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo2MTEKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAiyWRpdGUgZGFucyAmVmltIgorCisjLiBOb3cgY29uY2F0ZW5hdGUKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NjMzCittc2dpZCAiRWRpdCB3aXRoIGV4aXN0aW5nIFZpbSAtICYiCittc2dzdHIgIslkaXRlciBkYW5zIGxlIFZpbSBleGlzdGFudCAtICYiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NzQ2Cittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgIslkaXRlciBsZShzKSBmaWNoaWVyKHMpIHPpbGVjdGlvbm7pKHMpIGF2ZWMgVmltIgorCisjIHRvZG8KKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg1IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcHJvY2VzczogQ2hlY2sgaWYgZ3ZpbSBpcyBpbiB5b3VyIHBhdGghIgorbXNnc3RyICJFcnJldXIgZGUgY3LpYXRpb24gZHUgcHJvY2Vzc3VzOiBW6XJpZmlleiBzaSBndmltIGVzdCBiaWVuIGRhbnMgdm90cmUgY2hlbWluISIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4ODYgR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDAgR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjcKK21zZ2lkICJndmltZXh0LmRsbCBlcnJvciIKK21zZ3N0ciAiRXJyZXVyIGRlIGd2aW1leHQuZGxsIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg5OQorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAiTGUgY2hlbWluIGVzdCB0cm9wIGxvbmcgISIKKworIyBtc2dzdHIgIi0tUGFzIGRlIGxpZ25lcyBkYW5zIGxlIHRhbXBvbi0tIgorIzogZ2xvYmFscy5oOjk5OAorbXNnaWQgIi0tTm8gbGluZXMgaW4gYnVmZmVyLS0iCittc2dzdHIgIi0tTGUgdGFtcG9uIGVzdCB2aWRlLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTE2MQorbXNnaWQgIkU0NzA6IENvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiRTQ3MDogQ29tbWFuZGUgYW5udWzpZSIKKworIzogZ2xvYmFscy5oOjExNjIKK21zZ2lkICJFNDcxOiBBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAiRTQ3MTogQXJndW1lbnQgcmVxdWlzIgorCisjOiBnbG9iYWxzLmg6MTE2MworbXNnaWQgIkUxMDogXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJiIKK21zZ3N0ciAiRTEwOiBcXCBkZXZyYWl0IOp0cmUgc3VpdmkgZGUgLywgPyBvdSAmIgorCisjIHRvZG8KKyM6IGdsb2JhbHMuaDoxMTY1Cittc2dpZCAiRTExOiBJbnZhbGlkIGluIGNvbW1hbmQtbGluZSB3aW5kb3c7IDxDUj4gZXhlY3V0ZXMsIENUUkwtQyBxdWl0cyIKK21zZ3N0ciAiRTExOiBJbnZhbGlkZSBkYW5zIGxhIGZlbup0cmUgbGlnbmUtZGUtY29tbWFuZGU7IDxDUj4gZXjpY3V0ZSwgQ1RSTC1DIHEiCisKKyMgVE9ETworIzogZ2xvYmFscy5oOjExNjcKK21zZ2lkICJFMTI6IENvbW1hbmQgbm90IGFsbG93ZWQgZnJvbSBleHJjL3ZpbXJjIGluIGN1cnJlbnQgZGlyIG9yIHRhZyBzZWFyY2giCittc2dzdHIgIkUxMjogQ21kZSBpbnRlcmRpdGUg4CBwYXJ0aXIgZCd1biBleHJjL3ZpbXJjIGRhbnMgculwLiBjb3VyLiBvdSB0YWcgc2VhcmNoIgorCisjOiBnbG9iYWxzLmg6MTE2OQorbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiA6ZW5kaWYgbWFucXVhbnQiCisKKyM6IGdsb2JhbHMuaDoxMTcwCittc2dpZCAiRTYwMDogTWlzc2luZyA6ZW5kdHJ5IgorbXNnc3RyICJFNjAwOiA6ZW5kdHJ5IG1hbnF1YW50IgorCisjOiBnbG9iYWxzLmg6MTE3MQorbXNnaWQgIkUxNzA6IE1pc3NpbmcgOmVuZHdoaWxlIgorbXNnc3RyICJFMTcwOiA6ZW5kd2hpbGUgbWFucXVhbnQiCisKKyM6IGdsb2JhbHMuaDoxMTcyCittc2dpZCAiRTU4ODogOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg4OiA6ZW5kd2hpbGUgc2FucyA6d2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMTc0Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IExlIGZpY2hpZXIgZXhpc3RlIGTpauAgKGFqb3V0ZXogISBwb3VyIHBhc3NlciBvdXRyZSkiCisKKyM6IGdsb2JhbHMuaDoxMTc1Cittc2dpZCAiRTQ3MjogQ29tbWFuZCBmYWlsZWQiCittc2dzdHIgIkU0NzI6IExhIGNvbW1hbmRlIGEg6WNob3XpIgorCisjIHRvZG8KKyM6IGdsb2JhbHMuaDoxMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzQ6IFVua25vd24gZm9udHNldDogJXMiCittc2dzdHIgIkUyMzQ6IEZvbnRzZXQgaW5jb25udTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IFVua25vd24gZm9udDogJXMiCittc2dzdHIgIkUyMzU6IEZvbnRlIGluY29ubnVlOiAlcyIKKworIyBUT0RPCisjOiBnbG9iYWxzLmg6MTE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IExhIGZvbnRlIFwiJXNcIiBuJ2EgcGFzIHVuZSBsYXJnZXVyIGZpeGUiCisKKyM6IGdsb2JhbHMuaDoxMTg2Cittc2dpZCAiRTQ3MzogSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIkU0NzM6IEVycmV1ciBpbnRlcm5lIgorCisjOiBnbG9iYWxzLmg6MTE4NworbXNnaWQgIkludGVycnVwdGVkIgorbXNnc3RyICJJbnRlcnJvbXB1IgorCisjOiBnbG9iYWxzLmg6MTE4OAorbXNnaWQgIkUxNDogSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFMTQ6IEFkcmVzc2UgaW52YWxpZGUiCisKKyM6IGdsb2JhbHMuaDoxMTg5Cittc2dpZCAiRTQ3NDogSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAiRTQ3NDogQXJndW1lbnQgaW52YWxpZGUiCisKKyM6IGdsb2JhbHMuaDoxMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NzU6IEludmFsaWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDc1OiBBcmd1bWVudCBpbnZhbGlkZTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTogSW52YWxpZCBleHByZXNzaW9uOiAlcyIKK21zZ3N0ciAiRTE1OiBFeHByZXNzaW9uIGludmFsaWRlOiAlcyIKKworIyB0b2RvCisjOiBnbG9iYWxzLmg6MTE5NAorbXNnaWQgIkUxNjogSW52YWxpZCByYW5nZSIKK21zZ3N0ciAiRTE2OiBEb21haW5lIGludmFsaWRlIgorCisjOiBnbG9iYWxzLmg6MTE5NQorbXNnaWQgIkU0NzY6IEludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ3NjogQ29tbWFuZGUgaW52YWxpZGUiCisKKyM6IGdsb2JhbHMuaDoxMTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzogXCIlc1wiIGlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJFMTc6IFwiJXNcIiBlc3QgdW4gculwZXJ0b2lyZSIKKworIzogZ2xvYmFscy5oOjEyMDAKK21zZ2lkICJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIgorbXNnc3RyICJFMTg6IENhcmFjdOhyZXMgaW5hdHRlbmR1cyBhdmFudCAnPSciCisKKyM6IGdsb2JhbHMuaDoxMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjQ6IExpYnJhcnkgY2FsbCBmYWlsZWQgZm9yIFwiJXMoKVwiIgorbXNnc3RyICJFMzY0OiBMJ2FwcGVsIGRhbnMgbGEgYmlibGlvdGjocXVlIGEg6WNob3XpIHBvdXIgXCIlcygpXCIiCisKKyM6IGdsb2JhbHMuaDoxMjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDg6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgZnVuY3Rpb24gJXMiCittc2dzdHIgIkU0NDg6IFBhcyBwdSBjaGFyZ2VyIGxhIGZvbmN0aW9uICVzIGRlIGxhIGJpYmxpb3Ro6HF1ZSIKKworIzogZ2xvYmFscy5oOjEyMTEKK21zZ2lkICJFMTk6IE1hcmsgaGFzIGludmFsaWQgbGluZSBudW1iZXIiCittc2dzdHIgIkUxOTogTGEgbWFycXVlIGEgdW4gbnVt6XJvIGRlIGxpZ25lIGludmFsaWRlIgorCisjIHRvZG8KKyM6IGdsb2JhbHMuaDoxMjEyCittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIkUyMDogTWFycXVlIG5vbiBwb3NpdGlvbm7pZSIKKworIzogZ2xvYmFscy5oOjEyMTMKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTogTmUgcGV1dCByaWVuIGNoYW5nZXIsICdtb2RpZmlhYmxlJyBlc3QgZOlzYWN0aXbpIgorCisjOiBnbG9iYWxzLmg6MTIxNAorbXNnaWQgIkUyMjogU2NyaXB0cyBuZXN0ZWQgdG9vIGRlZXAiCittc2dzdHIgIkUyMjogTml2ZWF1IGRlIHLpY3Vyc2lvbiB0cm9wIOlsZXbpIGRhbnMgbGVzIHNjcmlwdHMiCisKKyMgdG9kbworIzogZ2xvYmFscy5oOjEyMTUKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6IFBhcyBkZSBmaWNoaWVyIGFsdGVybmF0aWYiCisKKyM6IGdsb2JhbHMuaDoxMjE2Cittc2dpZCAiRTI0OiBObyBzdWNoIGFiYnJldmlhdGlvbiIKK21zZ3N0ciAiRTI0OiBQYXMgZGUgdGVsbGUgYWJy6XZpYXRpb24iCisKKyM6IGdsb2JhbHMuaDoxMjE3Cittc2dpZCAiRTQ3NzogTm8gISBhbGxvd2VkIgorbXNnc3RyICJFNDc3OiBMZSAhIG4nZXN0IHBhcyBhdXRvcmlz6SIKKworIzogZ2xvYmFscy5oOjEyMTkKK21zZ2lkICJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICJFMjU6IEwnaW50ZXJmYWNlIGdyYXBoaXF1ZSBuJ2EgcGFzIOl06SBjb21waWzpZSBkYW5zIGNldHRlIHZlcnNpb24iCisKKyM6IGdsb2JhbHMuaDoxMjIyCittc2dpZCAiRTI2OiBIZWJyZXcgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjY6IExlIHN1cHBvcnQgZGUgbCdo6WJyZXUgbidhIHBhcyDpdOkgY29tcGls6SBkYW5zIGNldHRlIHZlcnNpb25cbiIKKworIzogZ2xvYmFscy5oOjEyMjUKK21zZ2lkICJFMjc6IEZhcnNpIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI3OiBMZSBzdXBwb3J0IGR1IGZhcnNpIG4nYSBwYXMg6XTpIGNvbXBpbOkgZGFucyBjZXR0ZSB2ZXJzaW9uXG4iCisKKyM6IGdsb2JhbHMuaDoxMjI4Cittc2dpZCAiRTgwMDogQXJhYmljIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTgwMDogTGUgc3VwcG9ydCBkZSBsJ2FyYWJpcXVlIG4nYSBwYXMg6XTpIGNvbXBpbOkgZGFucyBjZXR0ZSB2ZXJzaW9uXG4iCisKKyMgdG9kbworIzogZ2xvYmFscy5oOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBQYXMgZGUgdGVsIG5vbSBkZSBncm91cGUgZGUgc3VybGlnbmFnZTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjMzCittc2dpZCAiRTI5OiBObyBpbnNlcnRlZCB0ZXh0IHlldCIKK21zZ3N0ciAiRTI5OiBQYXMgZW5jb3JlIGRlIHRleHRlIGluc+ly6SIKKworIzogZ2xvYmFscy5oOjEyMzQKK21zZ2lkICJFMzA6IE5vIHByZXZpb3VzIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiRTMwOiBQYXMgZGUgbGlnbmUgZGUgY29tbWFuZGUgcHLpY+lkZW50ZSIKKworIyB0b2RvCisjOiBnbG9iYWxzLmg6MTIzNQorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IFBhcyBkZSB0ZWwgbWFwcGluZyIKKworIzogZ2xvYmFscy5oOjEyMzYKK21zZ2lkICJFNDc5OiBObyBtYXRjaCIKK21zZ3N0ciAiRTQ3OTogUGFzIGRlIGNvcnJlc3BvbmRhbmNlIgorCisjOiBnbG9iYWxzLmg6MTIzNworIywgYy1mb3JtYXQKK21zZ2lkICJFNDgwOiBObyBtYXRjaDogJXMiCittc2dzdHIgIkU0ODA6IFBhcyBkZSBjb3JyZXNwb25kYW5jZTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjM4Cittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjogUGFzIGRlIG5vbSBkZSBmaWNoaWVyIgorCisjIHRvZG8KKyM6IGdsb2JhbHMuaDoxMjM5Cittc2dpZCAiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTMzOiBQYXMgZCdleHByZXNzaW9uIHLpZ3VsaehyZSBkZSBzdWJzdGl0dXRpb24gcHLpY+lkZW50ZSIKKworIzogZ2xvYmFscy5oOjEyNDAKK21zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCittc2dzdHIgIkUzNDogUGFzIGRlIGNvbW1hbmRlIHBy6WPpZGVudGUiCisKKyM6IGdsb2JhbHMuaDoxMjQxCittc2dpZCAiRTM1OiBObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzNTogUGFzIGQnZXhwcmVzc2lvbiBy6Wd1bGnocmUgcHLpY+lkZW50ZSIKKworIzogZ2xvYmFscy5oOjEyNDIKK21zZ2lkICJFNDgxOiBObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICJFNDgxOiBMZXMgZG9tYWluZXMgbmUgc29udCBwYXMgYXV0b3Jpc+lzIgorCisjOiBnbG9iYWxzLmg6MTI0NAorbXNnaWQgIkUzNjogTm90IGVub3VnaCByb29tIgorbXNnc3RyICJFMzY6IFBhcyBhc3NleiBkZSBwbGFjZSIKKworIzogZ2xvYmFscy5oOjEyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0Nzogbm8gcmVnaXN0ZXJlZCBzZXJ2ZXIgbmFtZWQgXCIlc1wiIgorbXNnc3RyICJFMjQ3OiBwYXMgZGUgc2VydmV1ciBub21t6SBcIiVzXCIgaW5zY3JpdCIKKworIzogZ2xvYmFscy5oOjEyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4MjogQ2FuJ3QgY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgIkU0ODI6IE5lIHBldXQgY3LpZXIgbGUgZmljaGllciAlcyIKKworIzogZ2xvYmFscy5oOjEyNTAKK21zZ2lkICJFNDgzOiBDYW4ndCBnZXQgdGVtcCBmaWxlIG5hbWUiCittc2dzdHIgIkU0ODM6IE5lIHBldXQgb2J0ZW5pciBkZSBub20gZGUgZmljaGllciB0ZW1wb3JhaXJlIgorCisjOiBnbG9iYWxzLmg6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg0OiBDYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIkU0ODQ6IEltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciBcIiVzXCIiCisKKyM6IGdsb2JhbHMuaDoxMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODU6IENhbid0IHJlYWQgZmlsZSAlcyIKK21zZ3N0ciAiRTQ4NTogSW1wb3NzaWJsZSBkZSBsaXJlIGxlIGZpY2hpZXIgJXMiCisKKyM6IGdsb2JhbHMuaDoxMjUzCittc2dpZCAiRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMzc6IE1vZGlmaWNhdGlvbnMgbm9uIGVucmVnaXN0cullcyAoYWpvdXRleiAhIHBvdXIgcGFzc2VyIG91dHJlKSIKKworIzogZ2xvYmFscy5oOjEyNTQKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODogQXJndW1lbnQgbnVsIgorCisjOiBnbG9iYWxzLmg6MTI1NgorbXNnaWQgIkUzOTogTnVtYmVyIGV4cGVjdGVkIgorbXNnc3RyICJFMzk6IE5vbWJyZSBhdHRlbmR1IgorCisjOiBnbG9iYWxzLmg6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA6IENhbid0IG9wZW4gZXJyb3JmaWxlICVzIgorbXNnc3RyICJFNDA6IE5lIHBldXQgb3V2cmlyIGxlIGZpY2hpZXIgZCdlcnJldXJzICVzIgorCisjIFRPRE8KKyM6IGdsb2JhbHMuaDoxMjYyCittc2dpZCAiRTIzMzogY2Fubm90IG9wZW4gZGlzcGxheSIKK21zZ3N0ciAiRTIzMzogb3V2ZXJ0dXJlIGRlIGwnYWZmaWNoYWdlIGltcG9zc2libGUiCisKKyM6IGdsb2JhbHMuaDoxMjY0Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiBN6W1vaXJlIOlwdWlz6WUiCisKKyM6IGdsb2JhbHMuaDoxMjY2Cittc2dpZCAiUGF0dGVybiBub3QgZm91bmQiCittc2dzdHIgIk1vdGlmIGludHJvdXZhYmxlIgorCisjOiBnbG9iYWxzLmg6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg2OiBQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0ODY6IE1vdGlmIGludHJvdXZhYmxlOiAlcyIKKworIzogZ2xvYmFscy5oOjEyNjkKK21zZ2lkICJFNDg3OiBBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJFNDg3OiBMJ2FyZ3VtZW50IGRvaXQg6nRyZSBwb3NpdGlmIgorCisjOiBnbG9iYWxzLmg6MTI3MQorbXNnaWQgIkU0NTk6IENhbm5vdCBnbyBiYWNrIHRvIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTQ1OTogSW1wb3NzaWJsZSBkZSByZXRvdXJuZXIgYXUgculwZXJ0b2lyZSBwculj6WRlbnQiCisKKyM6IGdsb2JhbHMuaDoxMjc1Cittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0MjogUGFzIGQnZXJyZXVycyIKKworIzogZ2xvYmFscy5oOjEyNzcKK21zZ2lkICJFNDM6IERhbWFnZWQgbWF0Y2ggc3RyaW5nIgorbXNnc3RyICJFNDM6IExlIHRleHRlIGRlIGxhIHJlY2hlcmNoZSBlc3QgZW5kb21tYWfpIgorCisjOiBnbG9iYWxzLmg6MTI3OAorbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6IExlIHByb2dyYW1tZSByZWdleHAgZXN0IGNvcnJvbXB1IgorCisjOiBnbG9iYWxzLmg6MTI3OQorbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU0NTogTCdvcHRpb24gJ3JlYWRvbmx5JyBlc3QgYWN0aXbpZSAoYWpvdXRleiAhIHBvdXIgcGFzc2VyIG91dHJlKSIKKworIzogZ2xvYmFscy5oOjEyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiCittc2dzdHIgIkU0NjogTGEgdmFyaWFibGUgXCIlc1wiIGVzdCBlbiBsZWN0dXJlIHNldWxlIgorCisjOiBnbG9iYWxzLmg6MTI4NAorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0NzogRXJyZXVyIGxvcnMgZGUgbGEgbGVjdHVyZSBkdSBmaWNoaWVyIGQnZXJyZXVycyIKKworIzogZ2xvYmFscy5oOjEyODcKK21zZ2lkICJFNDg6IE5vdCBhbGxvd2VkIGluIHNhbmRib3giCittc2dzdHIgIkU0ODogT3DpcmF0aW9uIGludGVyZGl0ZSBkYW5zIGxlIGJhYyDgIHNhYmxlIgorCisjOiBnbG9iYWxzLmg6MTI4OQorbXNnaWQgIkU1MjM6IE5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU1MjM6IEludGVyZGl0IOAgY2V0IGVuZHJvaXQiCisKKyMgdG9kbworIzogZ2xvYmFscy5oOjEyOTIKK21zZ2lkICJFMzU5OiBTY3JlZW4gbW9kZSBzZXR0aW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkUzNTk6IENob2l4IGR1IG1vZGUgZCfpY3JhbiBub24gc3VwcG9ydOkiCisKKyM6IGdsb2JhbHMuaDoxMjk0Cittc2dpZCAiRTQ5OiBJbnZhbGlkIHNjcm9sbCBzaXplIgorbXNnc3RyICJFNDk6IEwnYW1wbGV1ciBkdSBk6WZpbGVtZW50IGVzdCBpbnZhbGlkZSIKKworIzogZ2xvYmFscy5oOjEyOTUKK21zZ2lkICJFOTE6ICdzaGVsbCcgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJFOTE6IEwnb3B0aW9uICdzaGVsbCcgZXN0IHZpZGUiCisKKyMgdG9kbworIzogZ2xvYmFscy5oOjEyOTcKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IFBhcyBwdSBsaXJlIGxlcyBkb25u6WVzIGR1IHN5bWJvbGUhIgorCisjOiBnbG9iYWxzLmg6MTI5OQorbXNnaWQgIkU3MjogQ2xvc2UgZXJyb3Igb24gc3dhcCBmaWxlIgorbXNnc3RyICJFNzI6IEVycmV1ciBsb3JzIGRlIGxhIGZlcm1ldHVyZSBkdSBmaWNoaWVyIGQn6WNoYW5nZSIKKworIzogZ2xvYmFscy5oOjEzMDAKK21zZ2lkICJFNzM6IHRhZyBzdGFjayBlbXB0eSIKK21zZ3N0ciAiRTczOiBMYSBwaWxlIGRlcyDpdGlxdWV0dGVzIGVzdCB2aWRlIgorCisjOiBnbG9iYWxzLmg6MTMwMQorbXNnaWQgIkU3NDogQ29tbWFuZCB0b28gY29tcGxleCIKK21zZ3N0ciAiRTc0OiBDb21tYW5kZSB0cm9wIGNvbXBsZXhlIgorCisjOiBnbG9iYWxzLmg6MTMwMgorbXNnaWQgIkU3NTogTmFtZSB0b28gbG9uZyIKK21zZ3N0ciAiRTc1OiBOb20gdHJvcCBsb25nIgorCisjOiBnbG9iYWxzLmg6MTMwMworbXNnaWQgIkU3NjogVG9vIG1hbnkgWyIKK21zZ3N0ciAiRTc2OiBUcm9wIGRlIFsiCisKKyM6IGdsb2JhbHMuaDoxMzA0Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IFRyb3AgZGUgbm9tcyBkZSBmaWNoaWVycyIKKworIzogZ2xvYmFscy5oOjEzMDUKK21zZ2lkICJFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJFNDg4OiBDYXJhY3TocmVzIHN1cm51belyYWlyZXMiCisKKyM6IGdsb2JhbHMuaDoxMzA2Cittc2dpZCAiRTc4OiBVbmtub3duIG1hcmsiCittc2dzdHIgIkU3ODogTWFycXVlIGluY29ubnVlIgorCisjOiBnbG9iYWxzLmg6MTMwNworbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTogSW1wb3NzaWJsZSBkZSBk6XZlbG9wcGVyIGxlcyBt6XRhY2FyYWN06HJlcyIKKworIzogZ2xvYmFscy5oOjEzMDkKK21zZ2lkICJFNTkxOiAnd2luaGVpZ2h0JyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW5oZWlnaHQnIgorbXNnc3RyICJFNTkxOiAnd2luaGVpZ2h0JyBuZSBwZXV0IOp0cmUgcGx1cyBwZXRpdCBxdWUgJ3dpbm1pbmhlaWdodCciCisKKyM6IGdsb2JhbHMuaDoxMzExCittc2dpZCAiRTU5MjogJ3dpbndpZHRoJyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW53aWR0aCciCittc2dzdHIgIkU1OTI6ICd3aW53aWR0aCcgbmUgcGV1dCDqdHJlIHBsdXMgcGV0aXQgcXVlICd3aW5taW53aWR0aCciCisKKyM6IGdsb2JhbHMuaDoxMzE0Cittc2dpZCAiRTgwOiBFcnJvciB3aGlsZSB3cml0aW5nIgorbXNnc3RyICJFODA6IEVycmV1ciBsb3JzIGRlIGwn6WNyaXR1cmUiCisKKyMgdG9kbworIzogZ2xvYmFscy5oOjEzMTUKK21zZ2lkICJaZXJvIGNvdW50IgorbXNnc3RyICJMZSBjb21wdGUgdmF1dCB66XJvIgorCisjOiBnbG9iYWxzLmg6MTMxNworbXNnaWQgIkU4MTogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQiCittc2dzdHIgIkU4MTogPFNJRD4gdXRpbGlz6SBlbiBkZWhvcnMgZCd1biBzY3JpcHQiCisKKyMgdG9kbworIzogZ2xvYmFscy5oOjEzMjAKK21zZ2lkICJFNDQ5OiBJbnZhbGlkIGV4cHJlc3Npb24gcmVjZWl2ZWQiCittc2dzdHIgIkU0NDk6IEV4cHJlc3Npb24gaW52YWxpZGUgcmXndWUiCisKKyMgdG9kbworIzogZ2xvYmFscy5oOjEzMjMKK21zZ2lkICJFNDYzOiBSZWdpb24gaXMgZ3VhcmRlZCwgY2Fubm90IG1vZGlmeSIKK21zZ3N0ciAiRTQ2MzogQ2V0dGUgem9uZSBlc3QgdmVycm91aWxs6WUgZXQgbmUgcGV1dCDqdHJlIG1vZGlmaellIgorCisjfiBtc2dpZCAiZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKKyN+IG1zZ3N0ciAiZXJyZXVyIGxvcnMgZGUgbGEgbGVjdHVyZSBkZSBsYSBjb25uZWN0aW9uIGNzY29wZSAlZCIKKworI34gbXNnaWQgIkUyNjA6IGNzY29wZSBjb25uZWN0aW9uIG5vdCBmb3VuZCIKKyN+IG1zZ3N0ciAiRTI2MDogbGEgY29ubmVjdGlvbiBjc2NvcGUgbidhIHBhcyDpdOkgdHJvdXbpZSIKKworI34gbXNnaWQgImNzY29wZSBjb25uZWN0aW9uIGNsb3NlZCIKKyN+IG1zZ3N0ciAiTGEgY29ubmVjdGlvbiBjc2NvcGUgZXN0IGZlcm3pZSIKKworI34gbXNnaWQgImNvdWxkbid0IG1hbGxvY1xuIgorI34gbXNnc3RyICJtYWxsb2MgYSDpY2hvdelcbiIKKworI34gbXNnaWQgIiUyZCAlLTVsZCAgJS0zNHMgIDxub25lPlxuIgorI34gbXNnc3RyICIlMmQgJS01bGQgJS0zNHMgIDxhdWN1bj5cbiIKKworI34gbXNnaWQgIkU0NDg6IFVua25vd24gZm9udDogJXMiCisjfiBtc2dzdHIgIkU0NDg6IEZvbnRlIGluY29ubnVlOiAlcyIKKworI34gbXNnaWQgIkxpbmVhciB0YWcgc2VhcmNoIgorI34gbXNnc3RyICJSZWNoZXJjaGUgbGlu6WFpcmUgZCfpdGlxdWV0dGUiCisKKyN+IG1zZ2lkICJCaW5hcnkgdGFnIHNlYXJjaCIKKyN+IG1zZ3N0ciAiUmVjaGVyY2hlIGJpbmFpcmUgZCfpdGlxdWV0dGUiCisKKyN+IG1zZ2lkICJDYW4ndCBvcGVuIGZpbGUgJXMiCisjfiBtc2dzdHIgIk5lIHBldXQgb3V2cmlyIGxlIGZpY2hpZXIgJXMiCisKKyN+IG1zZ2lkICJFMjQ5OiBjb3VsZG4ndCByZWFkIFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSIKKyN+IG1zZ3N0ciAiRTI0OTogUGFzIHB1IGxpcmUgZW50cullIHJlZ2lzdHJlIGRlIGwnaW5zdGFuY2UgZGUgVmltIgpkaWZmIC0tZ2l0IGEvc3JjL3BvL2l0LnBvIGIvc3JjL3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTY2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vaXQucG8KQEAgLTAsMCArMSw2NjM4IEBACisjIEl0YWxpYW4gVHJhbnNsYXRpb24gZm9yIFZpbQorIworIyBGSVJTVCBBVVRIT1IgQW50b25pbyBDb2xvbWJvIDxhbnRvbmlvLmNvbG9tYm9AanJjLml0PiwgMjAwMAorIworIyBPZ25pIGNvbW1lbnRvIOggYmVudmVudXRvLi4uCisjIEV2ZXJ5IHJlbWFyayBpcyB2ZXJ5IHdlbGNvbWUuLi4KKyMKKyMgVHJhbnNsYXRpb24gZG9uZSB1bmRlciBMaW51eCBhbmQgdXNpbmcgYW4gSXRhbGlhbiBrZXlib2FyZC4KKyMgRW5nbGlzaCB3b3JkcyBsZWZ0IGluIHRoZSB0ZXh0IGFyZSB1bm1vZGlmaWVkIGF0IHBsdXJhbC4KKyMgT3B0aW9uIG5hbWVzIGFyZSBtb3N0bHkgbGVmdCB1bnRvdWNoZWQuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiB2aW0gNi4zXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDQtMDYtMDIgMjA6MDIrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6ICAyMDA0LTA2LTAyIDIwOjAyKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6ICAgVmxhZCBTYW5kcmluaSAgIDxtYXJjb0BzYW5kcmluaS5iaXo+XG4iCisiTGFuZ3VhZ2UtVGVhbTogICAgIEl0YWxpYW4iCisiICAgICAgICAgICAgICAgICAgIEFudG9uaW8gQ29sb21ibyA8YW50b25pby5jb2xvbWJvQGpyYy5pdD5cbiIKKyIgICAgICAgICAgICAgICAgICAgVmxhZCBTYW5kcmluaSAgIDxtYXJjb0BzYW5kcmluaS5iaXo+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPXzg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDgtYml0XG4iCisKKyM6IGJ1ZmZlci5jOjEwMgorbXNnaWQgIkU4MjogQ2Fubm90IGFsbG9jYXRlIGFueSBidWZmZXIsIGV4aXRpbmcuLi4iCittc2dzdHIgIkU4MjogTm9uIHJpZXNjbyBhZCBhbGxvY2FyZSBhbGN1biBidWZmZXIsIGVzY28uLi4iCisKKyM6IGJ1ZmZlci5jOjEwNQorbXNnaWQgIkU4MzogQ2Fubm90IGFsbG9jYXRlIGJ1ZmZlciwgdXNpbmcgb3RoZXIgb25lLi4uIgorbXNnc3RyICJFODM6IE5vbiByaWVzY28gYWQgYWxsb2NhcmUgdW4gYnVmZmVyLCB1c28gbCdhbHRyby4uLiIKKworIzogYnVmZmVyLmM6ODA4Cittc2dpZCAiRTUxNTogTm8gYnVmZmVycyB3ZXJlIHVubG9hZGVkIgorbXNnc3RyICJFNTE1OiBOZXNzdW4gYnVmZmVyIHNjYXJpY2F0byIKKworIzogYnVmZmVyLmM6ODEwCittc2dpZCAiRTUxNjogTm8gYnVmZmVycyB3ZXJlIGRlbGV0ZWQiCittc2dzdHIgIkU1MTY6IE5lc3N1biBidWZmZXIgdG9sdG8gZGFsbGEgbGlzdGEiCisKKyM6IGJ1ZmZlci5jOjgxMgorbXNnaWQgIkU1MTc6IE5vIGJ1ZmZlcnMgd2VyZSB3aXBlZCBvdXQiCittc2dzdHIgIkU1MTc6IE5lc3N1biBidWZmZXIgY2FuY2VsbGF0byIKKworIzogYnVmZmVyLmM6ODIwCittc2dpZCAiMSBidWZmZXIgdW5sb2FkZWQiCittc2dzdHIgIjEgYnVmZmVyIHNjYXJpY2F0byIKKworIzogYnVmZmVyLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgdW5sb2FkZWQiCittc2dzdHIgIiVkIGJ1ZmZlciBzY2FyaWNhdGkiCisKKyM6IGJ1ZmZlci5jOjgyNworbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIjEgYnVmZmVyIHRvbHRvIGRhbGxhIGxpc3RhIgorCisjOiBidWZmZXIuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICIlZCBidWZmZXIgdG9sdGkgZGFsbGEgbGlzdGEiCisKKyM6IGJ1ZmZlci5jOjgzNAorbXNnaWQgIjEgYnVmZmVyIHdpcGVkIG91dCIKK21zZ3N0ciAiMSBidWZmZXIgY2FuY2VsbGF0byIKKworIzogYnVmZmVyLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgd2lwZWQgb3V0IgorbXNnc3RyICIlZCBidWZmZXIgY2FuY2VsbGF0aSIKKworIzogYnVmZmVyLmM6ODk3Cittc2dpZCAiRTg0OiBObyBtb2RpZmllZCBidWZmZXIgZm91bmQiCittc2dzdHIgIkU4NDogTmVzc3VuIGJ1ZmZlciByaXN1bHRhIG1vZGlmaWNhdG8iCisKKyMuIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCwgZGlkbid0IGZpbmQgYW55dGhpbmcuCisjOiBidWZmZXIuYzo5MzYKK21zZ2lkICJFODU6IFRoZXJlIGlzIG5vIGxpc3RlZCBidWZmZXIiCittc2dzdHIgIkU4NTogTm9uIGMn6CBhbGN1biBidWZmZXIgZWxlbmNhdG8iCisKKyM6IGJ1ZmZlci5jOjk0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFODY6IEJ1ZmZlciAlbGQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkU4NjogTm9uIGVzaXN0ZSBpbCBidWZmZXIgJWxkIgorCisjOiBidWZmZXIuYzo5NTEKK21zZ2lkICJFODc6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU4NzogTm9uIHBvc3NvIG9sdHJlcGFzc2FyZSBsJ3VsdGltbyBidWZmZXIiCisKKyM6IGJ1ZmZlci5jOjk1MworbXNnaWQgIkU4ODogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBidWZmZXIiCittc2dzdHIgIkU4ODogTm9uIHBvc3NvIGFuZGFyZSBwcmltYSBkZWwgcHJpbW8gYnVmZmVyIgorCisjOiBidWZmZXIuYzo5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg5OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyICVsZCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICIiCisiRTg5OiBCdWZmZXIgJWxkIG5vbiBzYWx2YXRvIGRvcG8gbW9kaWZpY2EgKGFnZ2l1bmdpICEgcGVyIGVzZWd1aXJlIGNvbXVucXVlKSIKKworIzogYnVmZmVyLmM6MTAwOAorbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiBOb24gcmllc2NvIGEgc2NhcmljYXJlIGwndWx0aW1vIGJ1ZmZlciIKKworIzogYnVmZmVyLmM6MTU0NAorbXNnaWQgIlcxNDogV2FybmluZzogTGlzdCBvZiBmaWxlIG5hbWVzIG92ZXJmbG93IgorbXNnc3RyICJXMTQ6IEF0dGVuemlvbmU6IFN1cGVyYXRvIGxpbWl0ZSBkZWxsYSBsaXN0YSBkZWkgbm9taSBkaSBmaWxlIgorCisjOiBidWZmZXIuYzoxNzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MjogQnVmZmVyICVsZCBub3QgZm91bmQiCittc2dzdHIgIkU5MjogQnVmZmVyICVsZCBub24gdHJvdmF0byIKKworIzogYnVmZmVyLmM6MTk0NworIywgYy1mb3JtYXQKK21zZ2lkICJFOTM6IE1vcmUgdGhhbiBvbmUgbWF0Y2ggZm9yICVzIgorbXNnc3RyICJFOTM6IFBp+SBkaSB1bmEgY29ycmlzcG9uZGVuemEgcGVyICVzIgorCisjOiBidWZmZXIuYzoxOTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiBOZXNzdW4gYnVmZmVyIGNvcnJpc3BvbmRlbnRlIGEgJXMiCisKKyM6IGJ1ZmZlci5jOjIzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQiCittc2dzdHIgImxpbmVhICVsZCIKKworIzogYnVmZmVyLmM6MjQyOQorbXNnaWQgIkU5NTogQnVmZmVyIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFOTU6IEMn6CBnaeAgdW4gYnVmZmVyIGNvbiBxdWVzdG8gbm9tZSIKKworIzogYnVmZmVyLmM6MjcyNAorbXNnaWQgIiBbTW9kaWZpZWRdIgorbXNnc3RyICIgW01vZGlmaWNhdG9dIgorCisjOiBidWZmZXIuYzoyNzI5Cittc2dpZCAiW05vdCBlZGl0ZWRdIgorbXNnc3RyICJbTm9uIGVsYWJvcmF0b10iCisKKyM6IGJ1ZmZlci5jOjI3MzQKK21zZ2lkICJbTmV3IGZpbGVdIgorbXNnc3RyICJbRmlsZSBudW92b10iCisKKyM6IGJ1ZmZlci5jOjI3MzUKK21zZ2lkICJbUmVhZCBlcnJvcnNdIgorbXNnc3RyICJbRXJyb3JpIGluIGxldHR1cmFdIgorCisjOiBidWZmZXIuYzoyNzM3IGZpbGVpby5jOjIxMjQKK21zZ2lkICJbcmVhZG9ubHldIgorbXNnc3RyICJbaW4gc29sYSBsZXR0dXJhXSIKKworIzogYnVmZmVyLmM6Mjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgLS0lZCUlLS0iCittc2dzdHIgIjEgbGluZWEgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIC0tJWQlJS0tIgorbXNnc3RyICIlbGQgbGluZWUgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQgb2YgJWxkIC0tJWQlJS0tIGNvbCAiCittc2dzdHIgImxpbmVhICVsZCBkaSAlbGQgLS0lZCUlLS0gY29sICIKKworIzogYnVmZmVyLmM6Mjg3NQorbXNnaWQgIltObyBmaWxlXSIKK21zZ3N0ciAiW1NlbnphIG5vbWVdIgorCisjLiBtdXN0IGJlIGEgaGVscCBidWZmZXIKKyM6IGJ1ZmZlci5jOjI5MTUKK21zZ2lkICJoZWxwIgorbXNnc3RyICJhaXV0byIKKworIzogYnVmZmVyLmM6MzQ3NCBzY3JlZW4uYzo1MDc1Cittc2dpZCAiW2hlbHBdIgorbXNnc3RyICJbYWl1dG9dIgorCisjOiBidWZmZXIuYzozNTA2IHNjcmVlbi5jOjUwODEKK21zZ2lkICJbUHJldmlld10iCittc2dzdHIgIltBbnRlcHJpbWFdIgorCisjOiBidWZmZXIuYzozNzg2Cittc2dpZCAiQWxsIgorbXNnc3RyICJUdXQiCisKKyM6IGJ1ZmZlci5jOjM3ODYKK21zZ2lkICJCb3QiCittc2dzdHIgIkZvbiIKKworIzogYnVmZmVyLmM6Mzc4OAorbXNnaWQgIlRvcCIKK21zZ3N0ciAiQ2ltIgorCisjOiBidWZmZXIuYzo0NTM2Cittc2dpZCAiIgorIlxuIgorIiMgQnVmZmVyIGxpc3Q6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIExpc3RhIEJ1ZmZlcjpcbiIKKworIzogYnVmZmVyLmM6NDU2OQorbXNnaWQgIltFcnJvciBMaXN0XSIKK21zZ3N0ciAiW0xpc3RhIEVycm9yaV0iCisKKyM6IGJ1ZmZlci5jOjQ1ODIgbWVtbGluZS5jOjE1MjEKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIltTZW56YSBub21lXSIKKworIzogYnVmZmVyLmM6NDg5NQorbXNnaWQgIiIKKyJcbiIKKyItLS0gU2lnbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFNlZ25pIC0tLSIKKworIzogYnVmZmVyLmM6NDkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTaWducyBmb3IgJXM6IgorbXNnc3RyICJTZWduaSBwZXIgJXM6IgorCisjOiBidWZmZXIuYzo0OTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBsaW5lPSVsZCAgaWQ9JWQgIG5hbWU9JXMiCittc2dzdHIgIiAgICBsaW5lYT0lbGQgaWQ9JWQsIG5vbWU9JXMiCisKKyM6IGRpZmYuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6IE5vbiBzdXBwb3J0byBkaWZmZXJlbnplIGZyYSBwafkgZGkgJWxkIGJ1ZmZlciIKKworIzogZGlmZi5jOjcxMworbXNnaWQgIkU5NzogQ2Fubm90IGNyZWF0ZSBkaWZmcyIKK21zZ3N0ciAiRTk3OiBOb24gcmllc2NvIGEgY3JlYXJlIGRpZmZlcmVuemUgIgorCisjOiBkaWZmLmM6ODE4Cittc2dpZCAiUGF0Y2ggZmlsZSIKK21zZ3N0ciAiRmlsZSBkaSBkaWZmZXJlbnplIgorCisjOiBkaWZmLmM6MTA2OQorbXNnaWQgIkU5ODogQ2Fubm90IHJlYWQgZGlmZiBvdXRwdXQiCittc2dzdHIgIkU5ODogTm9uIHJpZXNjbyBhIGxlZ2dlcmUgb3V0cHV0IGRlbCBjb21hbmRvICdkaWZmJyIKKworIzogZGlmZi5jOjE4MTkKK21zZ2lkICJFOTk6IEN1cnJlbnQgYnVmZmVyIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkU5OTogQnVmZmVyIGNvcnJlbnRlIG5vbiBpbiBtb2RhbGl04CAnZGlmZiciCisKKyM6IGRpZmYuYzoxODMxCittc2dpZCAiRTEwMDogTm8gb3RoZXIgYnVmZmVyIGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMDogTm9uIGMn6CBuZXNzdW4gYWx0cm8gYnVmZmVyIGluIG1vZGFsaXTgICdkaWZmJyIKKworIzogZGlmZi5jOjE4MzkKK21zZ2lkICJFMTAxOiBNb3JlIHRoYW4gdHdvIGJ1ZmZlcnMgaW4gZGlmZiBtb2RlLCBkb24ndCBrbm93IHdoaWNoIG9uZSB0byB1c2UiCittc2dzdHIgIkUxMDE6IFBp+SBkaSBkdWUgYnVmZmVyIGluIG1vZGFsaXTgICdkaWZmJywgbm9uIHNvIHF1YWxlIHVzYXJlIgorCisjOiBkaWZmLmM6MTg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAyOiBDYW4ndCBmaW5kIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxMDI6IE5vbiByaWVzY28gYSB0cm92YXJlIGlsIGJ1ZmZlcjogXCIlc1wiIgorCisjOiBkaWZmLmM6MTg2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAzOiBCdWZmZXIgXCIlc1wiIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDM6IElsIGJ1ZmZlciBcIiVzXCIgbm9uIOggaW4gbW9kYWxpdOAgJ2RpZmYnIgorCisjOiBkaWdyYXBoLmM6MjE5OQorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiBFc2NhcGUgbm90IGFtbWVzc28gbmVpIGRpZ3JhbW1pIgorCisjOiBkaWdyYXBoLmM6MjM4NAorbXNnaWQgIkU1NDQ6IEtleW1hcCBmaWxlIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTU0NDogRmlsZSBrZXltYXAgbm9uIHRyb3ZhdG8iCisKKyM6IGRpZ3JhcGguYzoyNDExCittc2dpZCAiRTEwNTogVXNpbmcgOmxvYWRrZXltYXAgbm90IGluIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTA1OiBVc28gZGkgOmxvYWRrZXltYXAgZnVvcmkgZGEgdW4gZmlsZSBkaSBjb21hbmRpIgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiIENvbXBsZXRhbWVudG8gS2V5d29yZCAoXk5eUCkiCisKKyMuIGN0cmxfeF9tb2RlID09IDAsIF5QL15OIGNvbXBsLgorIzogZWRpdC5jOjQxCittc2dpZCAiIF5YIG1vZGUgKF5FXlleTF5dXkZeSV5LXkReVl5OXlApIgorbXNnc3RyICIgbW9kYWxpdOAgXlggKF5FXlleTF5dXkZeSV5LXkReVl5OXlApIgorCisjLiBTY3JvbGwgaGFzIGl0J3Mgb3duIG1zZ3MsIGluIGl0J3MgcGxhY2UgdGhlcmUgaXMgdGhlIG1zZyBmb3IgbG9jYWwKKyMuICogY3RybF94X21vZGUgPSAwIChlZyBjb250aW51ZV9zdGF0dXMgJiBDT05UX0xPQ0FMKSAgLS0gQWNldmVkbworIzogZWRpdC5jOjQ0Cittc2dpZCAiIEtleXdvcmQgTG9jYWwgY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiBDb21wbGV0YW1lbnRvIEtleXdvcmQgTG9jYWxlICheTl5QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkxeTl5QKSIKK21zZ3N0ciAiIENvbXBsZXRhbWVudG8gTGluZWEgSW50ZXJhICheTF5OXlApIgorCisjOiBlZGl0LmM6NDYKK21zZ2lkICIgRmlsZSBuYW1lIGNvbXBsZXRpb24gKF5GXk5eUCkiCittc2dzdHIgIiBDb21wbGV0YW1lbnRvIG5vbWkgRmlsZSAoXkZeTl5QKSIKKworIzogZWRpdC5jOjQ3Cittc2dpZCAiIFRhZyBjb21wbGV0aW9uICheXV5OXlApIgorbXNnc3RyICIgQ29tcGxldGFtZW50byBUYWcgKF5dXk5eUCkiCisKKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiBDb21wbGV0YW1lbnRvIG1vZGVsbG8gUGF0aCAoXk5eUCkiCisKKyM6IGVkaXQuYzo0OQorbXNnaWQgIiBEZWZpbml0aW9uIGNvbXBsZXRpb24gKF5EXk5eUCkiCittc2dzdHIgIiBDb21wbGV0YW1lbnRvIERlZmluaXppb25lICheRF5OXlApIgorCisjOiBlZGl0LmM6NTEKK21zZ2lkICIgRGljdGlvbmFyeSBjb21wbGV0aW9uICheS15OXlApIgorbXNnc3RyICIgQ29tcGxldGFtZW50byBEaXppb25hcmlvICheS15OXlApIgorCisjOiBlZGl0LmM6NTIKK21zZ2lkICIgVGhlc2F1cnVzIGNvbXBsZXRpb24gKF5UXk5eUCkiCittc2dzdHIgIiBDb21wbGV0YW1lbnRvIFRoZXNhdXJ1cyAoXlReTl5QKSIKKworIzogZWRpdC5jOjUzCittc2dpZCAiIENvbW1hbmQtbGluZSBjb21wbGV0aW9uICheVl5OXlApIgorbXNnc3RyICIgQ29tcGxldGFtZW50byBsaW5lYSBjb21hbmRpICheVl5OXlApIgorCisjOiBlZGl0LmM6NTYKK21zZ2lkICJIaXQgZW5kIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAiR2l1bnRvIGFsbGEgZmluZSBkZWwgcGFyYWdyYWZvIgorCisjOiBlZGl0LmM6OTYyCittc2dpZCAiJ3RoZXNhdXJ1cycgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJsJ29wemlvbmUgJ3RoZXNhdXJ1cycg6CB2dW90YSIKKworIzogZWRpdC5jOjExNjYKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJsJ29wemlvbmUgJ2RpY3Rpb25hcnknIOggdnVvdGEiCisKKyM6IGVkaXQuYzoyMTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGRpY3Rpb25hcnk6ICVzIgorbXNnc3RyICJTY2Fuc2lvbmUgZGl6aW9uYXJpbzogJXMiCisKKyM6IGVkaXQuYzoyMzY4Cittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKGluc2VyaXNjaSkgU2Nyb2xsICheRS9eWSkiCisKKyM6IGVkaXQuYzoyMzcwCittc2dpZCAiIChyZXBsYWNlKSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiIChzb3N0aXR1aXNjaSkgU2Nyb2xsICheRS9eWSkiCisKKyM6IGVkaXQuYzoyNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nOiAlcyIKK21zZ3N0ciAiU2NhbnNpb25lOiAlcyIKKworIzogZWRpdC5jOjI3MTkKK21zZ2lkICJTY2FubmluZyB0YWdzLiIKK21zZ3N0ciAiU2NhbnNpb25lIHRhZy4iCisKKyM6IGVkaXQuYzozMzgxCittc2dpZCAiIEFkZGluZyIKK21zZ3N0ciAiIEFnZ2l1bmdvIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjM0MzAKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIFJpY2VyY2EuLi4iCisKKyM6IGVkaXQuYzozNDg2Cittc2dpZCAiQmFjayBhdCBvcmlnaW5hbCIKK21zZ3N0ciAiUml0b3JubyBhbGwnb3JpZ2luYWxlIgorCisjOiBlZGl0LmM6MzQ5MQorbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICJQYXJvbGEgZGEgdW4nYWx0cmEgbGluZWEiCisKKyM6IGVkaXQuYzozNDk2Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIkwndW5pY2EgY29ycmlzcG9uZGVuemEiCisKKyM6IGVkaXQuYzozNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICJjb3JyaXNwb25kZW56YSAlZCBkaSAlZCIKKworIzogZWRpdC5jOjM1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgImNvcnJpcG9uZGVuemEgJWQiCisKKyMuIFNraXAgZnVydGhlciBhcmd1bWVudHMgYnV0IGRvIGNvbnRpbnVlIHRvCisjLiAqIHNlYXJjaCBmb3IgYSB0cmFpbGluZyBjb21tYW5kLgorIzogZXZhbC5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNjogVW5rbm93biB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA2OiBWYXJpYWJpbGUgaW5lc2lzdGVudGU6IFwiJXNcIiIKKworIzogZXZhbC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNzogTWlzc2luZyBicmFjZXM6ICVzIgorbXNnc3RyICJFMTA3OiBNYW5jYW5vIGdyYWZmZTogJXMiCisKKyM6IGV2YWwuYzoxNDM1IGV2YWwuYzoxNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDg6IE5vIHN1Y2ggdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwODogVmFyaWFiaWxlIGluZXNpc3RlbnRlOiBcIiVzXCIiCisKKyM6IGV2YWwuYzoxNzA1Cittc2dpZCAiRTEwOTogTWlzc2luZyAnOicgYWZ0ZXIgJz8nIgorbXNnc3RyICJFMTA5OiBNYW5jYSAnOicgZG9wbyAnPyciCisKKyM6IGV2YWwuYzoyMzI3Cittc2dpZCAiRTExMDogTWlzc2luZyAnKSciCittc2dzdHIgIkUxMTA6IE1hbmNhICcpJyIKKworIzogZXZhbC5jOjIzODkKK21zZ2lkICJFMTExOiBNaXNzaW5nICddJyIKK21zZ3N0ciAiRTExMTogTWFuY2EgJ10nIgorCisjOiBldmFsLmM6MjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEyOiBPcHRpb24gbmFtZSBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiRTExMjogTm9tZSBPcHppb25lIG1hbmNhbnRlOiAlcyIKKworIzogZXZhbC5jOjI0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMzogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMTEzOiBPcHppb25lIGluZXNpc3RlbnRlOiAlcyIKKworIzogZXZhbC5jOjI1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IE1hbmNhICdcIic6ICVzIgorCisjOiBldmFsLmM6MjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE1OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNTogTWFuY2EgYXBvc3Ryb2ZvOiAlcyIKKworIzogZXZhbC5jOjMwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNjogSW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICVzIgorbXNnc3RyICJFMTE2OiBBcmdvbWVudG8gbm9uIHZhbGlkbyBwZXIgbGEgZnVuemlvbmUgJXMiCisKKyM6IGV2YWwuYzozMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiBGdW56aW9uZSBpbmVzaXN0ZW50ZTogJXMiCisKKyM6IGV2YWwuYzozMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTg6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE4OiBUcm9wcGkgYXJnb21lbnRpIHBlciBsYSBmdW56aW9uZTogJXMiCisKKyM6IGV2YWwuYzozMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTk6IEFyZ29tZW50aSBpbnN1ZmZpY2llbnRpIHBlciBsYSBmdW56aW9uZTogJXMiCisKKyM6IGV2YWwuYzozMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjA6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0OiAlcyIKK21zZ3N0ciAiRTEyMDogVXNvIGRpIDxTSUQ+IGZ1b3JpIGRhbCBjb250ZXN0byBkaSB1bm8gc2NyaXB0OiAlcyIKKworIy4KKyMuICogWWVzIHRoaXMgaXMgdWdseSwgSSBkb24ndCBwYXJ0aWN1bGFybHkgbGlrZSBpdCBlaXRoZXIuICBCdXQgZG9pbmcgaXQKKyMuICogdGhpcyB3YXkgaGFzIHRoZSBjb21wZWxsaW5nIGFkdmFudGFnZSB0aGF0IHRyYW5zbGF0aW9ucyBuZWVkIG5vdCB0bworIy4gKiBiZSB0b3VjaGVkIGF0IGFsbC4gIFNlZSBiZWxvdyB3aGF0ICdvaycgYW5kICd5bmMnIGFyZSB1c2VkIGZvci4KKyMuCisjOiBldmFsLmM6MzY4NyBndWkuYzo0MzgyIGd1aV9ndGsuYzoyMDU5Cittc2dpZCAiJk9rIgorbXNnc3RyICImT0siCisKKyM6IGV2YWwuYzo0MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIistJXMlM2xkIGxpbmVzOiAiCittc2dzdHIgIistJXMlM2xkIGxpbmVlOiAiCisKKyM6IGV2YWwuYzo1NDc3Cittc2dpZCAiIgorIiZPS1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImT0tcbiIKKyImTm9uIGVzZWd1aXJlIgorCisjOiBldmFsLmM6NTUxNworbXNnaWQgImNhbGxlZCBpbnB1dHJlc3RvcmUoKSBtb3JlIG9mdGVuIHRoYW4gaW5wdXRzYXZlKCkiCittc2dzdHIgImlucHV0cmVzdG9yZSgpIGNoaWFtYXRhIHBp+SB2b2x0ZSBkaSBpbnB1dHNhdmUoKSIKKworIzogZXZhbC5jOjU5NzcKK21zZ2lkICJFNjU1OiBUb28gbWFueSBzeW1ib2xpYyBsaW5rcyAoY3ljbGU/KSIKK21zZ3N0ciAiRTY1NTogVHJvcHBpIGxpbmsgc2ltYm9saWNpIChjaXJjb2xhcml04D8pIgorCisjOiBldmFsLmM6NjYyNgorbXNnaWQgIkUyNDA6IE5vIGNvbm5lY3Rpb24gdG8gVmltIHNlcnZlciIKK21zZ3N0ciAiRTI0MDogTWFuY2EgY29ubmVzc2lvbmUgY29uIHNlcnZlciBWaW0iCisKKyM6IGV2YWwuYzo2NzI0Cittc2dpZCAiRTI3NzogVW5hYmxlIHRvIHJlYWQgYSBzZXJ2ZXIgcmVwbHkiCittc2dzdHIgIkUyNzc6IE5vbiByaWVzY28gYSBsZWdnZXJlIHVuYSByaXNwb3N0YSBkZWwgc2VydmVyIgorCisjOiBldmFsLmM6Njc1MgorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODogSW1wb3NzaWJpbGUgaW52aWFyZSBhbCBjbGllbnQiCisKKyM6IGV2YWwuYzo2ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiBJbXBvc3NpYmlsZSBpbnZpYXJlIGEgJXMiCisKKyM6IGV2YWwuYzo2OTAwCittc2dpZCAiKEludmFsaWQpIgorbXNnc3RyICIoTm9uIHZhbGlkbykiCisKKyM6IGV2YWwuYzo4MDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogJXMiCittc2dzdHIgIkUxMjE6IFZhcmlhYmlsZSBub24gZGVmaW5pdGE6ICVzIgorCisjOiBldmFsLmM6ODUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJFNDYxOiBOb21lIGRpIHZhcmlhYmlsZSBub24gYW1tZXNzbzogJXMiCisKKyM6IGV2YWwuYzo4ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjI6IEZ1bmN0aW9uICVzIGFscmVhZHkgZXhpc3RzLCBhZGQgISB0byByZXBsYWNlIGl0IgorbXNnc3RyICJFMTIyOiBMYSBmdW56aW9uZSAlcyBlc2lzdGUgZ2ngLCBhZ2dpdW5naSAhIHBlciBzb3N0aXR1aXJsYSIKKworIzogZXZhbC5jOjg4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMzogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEyMzogRnVuemlvbmUgbm9uIGRlZmluaXRhOiAlcyIKKworIzogZXZhbC5jOjg4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNDogTWlzc2luZyAnKCc6ICVzIgorbXNnc3RyICJFMTI0OiBNYW5jYSAnKCc6ICVzIgorCisjOiBldmFsLmM6ODkyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNTogQXJnb21lbnRvIG5vbiBhbW1lc3NvOiAlcyIKKworIzogZXZhbC5jOjkwMDAKK21zZ2lkICJFMTI2OiBNaXNzaW5nIDplbmRmdW5jdGlvbiIKK21zZ3N0ciAiRTEyNjogTWFuY2EgOmVuZGZ1bmN0aW9uIgorCisjOiBldmFsLmM6OTEwNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzogTm9uIHBvc3NvIHJpZGVmaW5pcmUgbGEgZnVuemlvbmUgJXM6IEUnIGluIHVzbyIKKworIzogZXZhbC5jOjkxNzcKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiBOb21lIGZ1bnppb25lIG5lY2Vzc2FyaW8iCisKKyM6IGV2YWwuYzo5MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6IElsIG5vbWUgZnVuemlvbmUgZGV2ZSBpbml6aWFyZSBjb24gdW5hIGxldHRlcmEgbWFpdXNjb2xhOiAlcyIKKworIzogZXZhbC5jOjk0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMDogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEzMDogRnVuemlvbmUgbm9uIGRlZmluaXRhOiAlcyIKKworIzogZXZhbC5jOjk0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMTogQ2Fubm90IGRlbGV0ZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTMxOiBOb24gcG9zc28gZWxpbWluYXJlIGxhIGZ1bnppb25lICVzOiBFJyBpbiB1c28iCisKKyM6IGV2YWwuYzo5NDczCittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiIgorIkUxMzI6IE5pZGlmaWNhemlvbmUgZGVsbGEgY2hpYW1hdGEgZGkgZnVuemlvbmUgbWFnZ2lvcmUgZGkgJ21heGZ1bmNkZXB0aCciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjk1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAiY2hpYW1vICVzIgorCisjOiBldmFsLmM6OTU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhYm9ydGVkIgorbXNnc3RyICIlcyBub24gY29tcGxldGF0YSIKKworIzogZXZhbC5jOjk1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgIiVzIHJpdG9ybm8gIyVsZCIKKworIzogZXZhbC5jOjk1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nIFwiJXNcIiIKK21zZ3N0ciAiJXMgcml0b3JubyBcIiVzXCIiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjk2MTMgZXhfY21kczIuYzoyMzcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbnRpbnVpbmcgaW4gJXMiCittc2dzdHIgImNvbnRpbnVvIGluICVzIgorCisjOiBldmFsLmM6OTYzOQorbXNnaWQgIkUxMzM6IDpyZXR1cm4gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTMzOiA6cmV0dXJuIGZ1b3JpIGRhIHVuYSBmdW56aW9uZSIKKworIzogZXZhbC5jOjk5NzAKK21zZ2lkICIiCisiXG4iCisiIyBnbG9iYWwgdmFyaWFibGVzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyB2YXJpYWJpbGkgZ2xvYmFsaTpcbiIKKworIzogZXhfY21kczIuYzo5MgorbXNnaWQgIkVudGVyaW5nIERlYnVnIG1vZGUuICBUeXBlIFwiY29udFwiIHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiRW50cm8gbW9kYWxpdOAgRGVidWcuICBCYXR0aSBcImNvbnRcIiBwZXIgY29udGludWFyZS4iCisKKyM6IGV4X2NtZHMyLmM6OTYgZXhfZG9jbWQuYzo5NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6ICVzIgorbXNnc3RyICJsaW5lYSAlbGQ6ICVzIgorCisjOiBleF9jbWRzMi5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNtZDogJXMiCittc2dzdHIgImNvbTogJXMiCisKKyM6IGV4X2NtZHMyLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyZWFrcG9pbnQgaW4gXCIlcyVzXCIgbGluZSAlbGQiCittc2dzdHIgIlBhdXNhIGluIFwiJXMlc1wiIGxpbmVhICVsZCIKKworIzogZXhfY21kczIuYzo1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MTogQnJlYWtwb2ludCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMTYxOiBCcmVha3BvaW50ICVzIG5vbiB0cm92YXRvIgorCisjOiBleF9jbWRzMi5jOjU2NgorbXNnaWQgIk5vIGJyZWFrcG9pbnRzIGRlZmluZWQiCittc2dzdHIgIk5lc3N1biAnYnJlYWtwb2ludCcgZGVmaW5pdG8iCisKKyM6IGV4X2NtZHMyLmM6NTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUzZCAgJXMgJXMgIGxpbmUgJWxkIgorbXNnc3RyICIlM2QgICVzICVzIGxpbmVhICVsZCIKKworIzogZXhfY21kczIuYzo3NjEgZXhfY21kcy5jOjIwOTcKK21zZ2lkICJTYXZlIEFzIgorbXNnc3RyICJTYWx2YSBjb24gTm9tZSIKKworIzogZXhfY21kczIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZSBjaGFuZ2VzIHRvIFwiJS4qc1wiPyIKK21zZ3N0ciAiU2FsdmFyZSBtb2RpZmljaGUgYSBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMyLmM6Nzg4IGV4X2RvY21kLmM6OTM5OAorbXNnaWQgIlVudGl0bGVkIgorbXNnc3RyICJTZW56YSBOb21lIgorCisjOiBleF9jbWRzMi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYyOiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTE2MjogQnVmZmVyIFwiJXNcIiBub24gc2FsdmF0byBkb3BvIG1vZGlmaWNhIgorCisjOiBleF9jbWRzMi5jOjk4NAorbXNnaWQgIldhcm5pbmc6IEVudGVyZWQgb3RoZXIgYnVmZmVyIHVuZXhwZWN0ZWRseSAoY2hlY2sgYXV0b2NvbW1hbmRzKSIKK21zZ3N0ciAiIgorIkF0dGVuemlvbmU6IEVudHJhdG8gaW4gYWx0cm8gYnVmZmVyIGluYXNwZXR0YXRhbWVudGUgKGNvbnRyb2xsYXJlICIKKyJhdXRvY29tYW5kaSkiCisKKyM6IGV4X2NtZHMyLmM6MTM4NworbXNnaWQgIkUxNjM6IFRoZXJlIGlzIG9ubHkgb25lIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE2MzogQyfoIHVuIHNvbG8gZmlsZSBkYSBlbGFib3JhcmUiCisKKyM6IGV4X2NtZHMyLmM6MTM4OQorbXNnaWQgIkUxNjQ6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiRTE2NDogTm9uIHBvc3NvIGFuZGFyZSBkYXZhbnRpIGFsIHByaW1vIGZpbGUiCisKKyM6IGV4X2NtZHMyLmM6MTM5MQorbXNnaWQgIkUxNjU6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBmaWxlIgorbXNnc3RyICJFMTY1OiBOb24gcG9zc28gb2x0cmVwYXNzYXJlIGwndWx0aW1vIGZpbGUiCisKKyM6IGV4X2NtZHMyLmM6MTgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY2OiBjb21waWxlciBub3Qgc3VwcG9ydGVkOiAlcyIKK21zZ3N0ciAiRTY2NjogY29tcGlsYXRvcmUgbm9uIHN1cHBvcnRhdG86ICVzIgorCisjOiBleF9jbWRzMi5jOjE5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIgaW4gXCIlc1wiIgorbXNnc3RyICJDZXJjbyBcIiVzXCIgaW4gXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE5MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIkNlcmNvIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgIm5vbiB0cm92YXRvIGluICdydW50aW1lcGF0aCc6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTc5Cittc2dpZCAiU291cmNlIFZpbSBzY3JpcHQiCittc2dzdHIgIkVzZWd1aSBzY3JpcHQgVmltIgorCisjOiBleF9jbWRzMi5jOjIxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNvdXJjZSBhIGRpcmVjdG9yeTogXCIlc1wiIgorbXNnc3RyICJOb24gcmllc2NvIGFkIGVzZWd1aXJlIHVuYSBkaXJlY3Rvcnk6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICJub24gcmllc2NvIGFkIGVzZWd1aXJlIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAibGluZWEgJWxkOiBub24gcmllc2NvIGFkIGVzZWd1aXJlIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAiZXNlZ3VvIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgImxpbmVhICVsZDogZXNlZ3VvIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNvdXJjaW5nICVzIgorbXNnc3RyICJlc2VjdXppb25lIGRpICVzIHRlcm1pbmF0YSIKKworIzogZXhfY21kczIuYzoyNzEyCittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIlcxNTogQXR0ZW56aW9uZTogU2VwYXJhdG9yZSBkaSBsaW5lYSBlcnJhdG8sIGZvcnNlIG1hbmNhIF5NIgorCisjOiBleF9jbWRzMi5jOjI3NjEKK21zZ2lkICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNhdG8gZnVvcmkgZGEgdW4gZmlsZSBkaSBjb21hbmRpIgorCisjOiBleF9jbWRzMi5jOjI3OTQKK21zZ2lkICJFMTY4OiA6ZmluaXNoIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2ODogOmZpbmlzaCB1c2F0byBmdW9yaSBkYSBmaWxlIGRpIGNvbWFuZGkiCisKKyM6IGV4X2NtZHMyLmM6MzI0MworIywgYy1mb3JtYXQKK21zZ2lkICJQYWdlICVkIgorbXNnc3RyICJQYWdpbmEgJWQiCisKKyM6IGV4X2NtZHMyLmM6MzM5OQorbXNnaWQgIk5vIHRleHQgdG8gYmUgcHJpbnRlZCIKK21zZ3N0ciAiTWFuY2EgdGVzdG8gZGEgc3RhbXBhcmUiCisKKyM6IGV4X2NtZHMyLmM6MzQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyBwYWdlICVkICglZCUlKSIKK21zZ3N0ciAiU3RvIHN0YW1wYW5kbyBwYWdpbmEgJWQgKCVkJSUpIgorCisjOiBleF9jbWRzMi5jOjM0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIENvcHkgJWQgb2YgJWQiCittc2dzdHIgIiBDb3BpYSAlZCBkaSAlZCIKKworIzogZXhfY21kczIuYzozNTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50ZWQ6ICVzIgorbXNnc3RyICJTdGFtcGF0bzogJXMiCisKKyM6IGV4X2NtZHMyLmM6MzU1NAorbXNnaWQgIlByaW50aW5nIGFib3J0ZWQiCittc2dzdHIgIlN0YW1wYSBub24gY29tcGxldGF0YSciCisKKyM6IGV4X2NtZHMyLmM6MzkxOQorbXNnaWQgIkU0NTU6IEVycm9yIHdyaXRpbmcgdG8gUG9zdFNjcmlwdCBvdXRwdXQgZmlsZSIKK21zZ3N0ciAiRTQ1NTogRXJyb3JlIGluIHNjcml0dHVyYSBhIGZpbGUgUG9zdFNjcmlwdCBkaSBvdXRwdXQiCisKKyM6IGV4X2NtZHMyLmM6NDE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI0OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNjI0OiBOb24gcmllc2NvIGFkIGFwcmlyZSBpbCBmaWxlIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MjA0IGV4X2NtZHMyLmM6NDgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6IE5vbiByaWVzY28gYSBsZWdnZXJlIGZpbGUgcmlzb3JzZSBQb3N0U2NyaXB0IFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTg6IGZpbGUgXCIlc1wiIGlzIG5vdCBhIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIKK21zZ3N0ciAiRTYxODogZmlsZSBcIiVzXCIgbm9uIOggdW4gZmlsZSBkaSByaXNvcnNlIFBvc3RTY3JpcHQiCisKKyM6IGV4X2NtZHMyLmM6NDIyNyBleF9jbWRzMi5jOjQyNDcgZXhfY21kczIuYzo0MjYyIGV4X2NtZHMyLmM6NDI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE5OiBmaWxlIFwiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE5OiBmaWxlIFwiJXNcIiBub24g6CB1biBmaWxlIGRpIHJpc29yc2UgUG9zdFNjcmlwdCBzdXBwb3J0YXRvIgorCisjOiBleF9jbWRzMi5jOjQzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyMTogXCIlc1wiIHJlc291cmNlIGZpbGUgaGFzIHdyb25nIHZlcnNpb24iCittc2dzdHIgIkU2MjE6IGlsIGZpbGUgZGkgcmlzb3JzZSBcIiVzXCIgaGEgdW5hIHZlcnNpb25lIHNiYWdsaWF0YSIKKworIzogZXhfY21kczIuYzo0NzgxCittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiBOb24gcmllc2NvIGFkIGFwcmlyZSBmaWxlIFBvc3RTY3JpcHQgZGkgb3V0cHV0IgorCisjOiBleF9jbWRzMi5jOjQ4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogTm9uIHJpZXNjbyBhZCBhcHJpcmUgaWwgZmlsZSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDkzMworbXNnaWQgIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwicHJvbG9nLnBzXCIiCittc2dzdHIgIkU0NTY6IE5vbiB0cm92byBmaWxlIHJpc29yc2UgUG9zdFNjcmlwdCBcInByb2xvZy5wc1wiIgorCisjOiBleF9jbWRzMi5jOjQ5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3QgZmluZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlcy5wc1wiIgorbXNnc3RyICJFNDU2OiBOb24gdHJvdm8gZmlsZSByaXNvcnNlIFBvc3RTY3JpcHQgXCIlcy5wc1wiIgorCisjOiBleF9jbWRzMi5jOjQ5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyMDogVW5hYmxlIHRvIGNvbnZlcnQgZnJvbSBtdWx0aS1ieXRlIHRvIFwiJXNcIiBlbmNvZGluZyIKK21zZ3N0ciAiRTYyMDogSW1wb3NzaWJpbGUgY29udmVydGlyZSBkYSBtdWx0aS1ieXRlIGEgY29kaWZpY2EgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjUxMDcKK21zZ2lkICJTZW5kaW5nIHRvIHByaW50ZXIuLi4iCittc2dzdHIgIkludmlvIGEgc3RhbXBhbnRlLi4uIgorCisjOiBleF9jbWRzMi5jOjUxMTEKK21zZ2lkICJFMzY1OiBGYWlsZWQgdG8gcHJpbnQgUG9zdFNjcmlwdCBmaWxlIgorbXNnc3RyICJFMzY1OiBOb24gcmllc2NvIGFkIGFwcmlyZSBmaWxlIFBvc3RTY3JpcHQiCisKKyM6IGV4X2NtZHMyLmM6NTExMworbXNnaWQgIlByaW50IGpvYiBzZW50LiIKK21zZ3N0ciAiUmljaGllc3RhIGRpIHN0YW1wYSBpbnZpYXRhLiIKKworIzogZXhfY21kczIuYzo1NjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICJMaW5ndWEgJXNpbiB1c286IFwiJXNcIiIKKworIzogZXhfY21kczIuYzo1NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTc6IENhbm5vdCBzZXQgbGFuZ3VhZ2UgdG8gXCIlc1wiIgorbXNnc3RyICJFMTk3OiBOb24gcG9zc28gaW1wb3N0YXJlIGxpbmd1YSBhIFwiJXNcIiIKKworIzogZXhfY21kcy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2N0YWwgJTAzbyIKK21zZ3N0ciAiPCVzPiVzJXMgICVkLCAgRXNhICUwMngsICBPdHRhbGUgJTAzbyIKKworIzogZXhfY21kcy5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI+ICVkLCBIZXggJTA0eCwgT2N0YWwgJW8iCittc2dzdHIgIj4gJWQsIEVzYSAlMDR4LCBPdHRhbGUgJW8iCisKKyM6IGV4X2NtZHMuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiPiAlZCwgSGV4ICUwOHgsIE9jdGFsICVvIgorbXNnc3RyICI+ICVkLCBFc2EgJTA4eCwgT3R0YWxlICVvIgorCisjOiBleF9jbWRzLmM6NDMwCittc2dpZCAiRTEzNDogTW92ZSBsaW5lcyBpbnRvIHRoZW1zZWx2ZXMiCittc2dzdHIgIkUxMzQ6IE1vdmltZW50byBkaSBsaW5lZSB2ZXJzbyBzZSBzdGVzc2UiCisKKyM6IGV4X2NtZHMuYzo0OTkKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgIjEgbGluZWEgbW9zc2EiCisKKyM6IGV4X2NtZHMuYzo1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIG1vdmVkIgorbXNnc3RyICIlbGQgbGluZWUgbW9zc2UiCisKKyM6IGV4X2NtZHMuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICIlbGQgbGluZWUgZmlsdHJhdGUiCisKKyM6IGV4X2NtZHMuYzo5NTIKK21zZ2lkICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMTM1OiAqRmlsdGVyKiBHbGkgYXV0b2NvbWFuZGkgbm9uIGRldm9ubyBtb2RpZmljYXJlIGlsIGJ1ZmZlciBpbiB1c28iCisKKyM6IGV4X2NtZHMuYzoxMDM3Cittc2dpZCAiW05vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlXVxuIgorbXNnc3RyICJbTm9uIHNhbHZhdG8gZG9wbyBsJ3VsdGltYSBtb2RpZmljYV1cbiIKKworIzogZXhfY21kcy5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXN2aW1pbmZvOiAlcyBpbiBsaW5lOiAiCittc2dzdHIgIiVzdmltaW5mbzogJXMgbmVsbGEgbGluZWE6ICIKKworIzogZXhfY21kcy5jOjEyODgKK21zZ2lkICJFMTM2OiB2aW1pbmZvOiBUb28gbWFueSBlcnJvcnMsIHNraXBwaW5nIHJlc3Qgb2YgZmlsZSIKK21zZ3N0ciAiRTEzNjogdmltaW5mbzogVHJvcHBpIGVycm9yaSwgaWdub3JvIGlsIHJlc3RvIGRlbCBmaWxlIgorCisjOiBleF9jbWRzLmM6MTMyMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkaW5nIHZpbWluZm8gZmlsZSBcIiVzXCIlcyVzJXMiCittc2dzdHIgIkxldHR1cmEgZmlsZSB2aW1pbmZvIFwiJXNcIiVzJXMlcyIKKworIzogZXhfY21kcy5jOjEzMjQKK21zZ2lkICIgaW5mbyIKK21zZ3N0ciAiIGluZm9ybWF6aW9uZSIKKworIzogZXhfY21kcy5jOjEzMjUKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiBtYXJrIgorCisjOiBleF9jbWRzLmM6MTMyNgorbXNnaWQgIiBGQUlMRUQiCittc2dzdHIgIiBGQUxMSVRPIgorCisjOiBleF9jbWRzLmM6MTQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM3OiBWaW1pbmZvIGZpbGUgaXMgbm90IHdyaXRhYmxlOiAlcyIKK21zZ3N0ciAiRTEzNzogRmlsZSB2aW1pbmZvIFwiJXNcIiBpbmFjY2Vzc2liaWxlIGluIHNjcml0dHVyYSIKKworIzogZXhfY21kcy5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzODogQ2FuJ3Qgd3JpdGUgdmltaW5mbyBmaWxlICVzISIKK21zZ3N0ciAiRTEzODogTm9uIHJpZXNjbyBhIHNjcml2ZXJlIGlsIGZpbGUgdmltaW5mbyAlcyEiCisKKyM6IGV4X2NtZHMuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiU2NyaXZvIGZpbGUgdmltaW5mbyBcIiVzXCIiCisKKyMuIFdyaXRlIHRoZSBpbmZvOgorIzogZXhfY21kcy5jOjE2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIyBUaGlzIHZpbWluZm8gZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFZpbSAlcy5cbiIKK21zZ3N0ciAiIyBRdWVzdG8gZmlsZSB2aW1pbmZvIOggc3RhdG8gZ2VuZXJhdG8gZGEgVmltICVzLlxuIgorCisjOiBleF9jbWRzLmM6MTY1MQorbXNnaWQgIiIKKyIjIFlvdSBtYXkgZWRpdCBpdCBpZiB5b3UncmUgY2FyZWZ1bCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiMgRmlsZSBtb2RpZmljYWJpbGUsIGF0dGVudG8gYSBxdWVsIGNoZSBmYWkhXG4iCisiXG4iCisKKyM6IGV4X2NtZHMuYzoxNjUzCittc2dpZCAiIyBWYWx1ZSBvZiAnZW5jb2RpbmcnIHdoZW4gdGhpcyBmaWxlIHdhcyB3cml0dGVuXG4iCittc2dzdHIgIiMgVmFsb3JlIGRpICdlbmNvZGluZycgYWwgbW9tZW50byBkZWxsYSBzY3JpdHR1cmEgZGkgcXVlc3RvIGZpbGVcbiIKKworIzogZXhfY21kcy5jOjE3NTIKK21zZ2lkICJJbGxlZ2FsIHN0YXJ0aW5nIGNoYXIiCittc2dzdHIgIkNhcmF0dGVyZSBpbml6aWFsZSBub24gYW1tZXNzbyIKKworIy4gT3ZlcndyaXRpbmcgYSBmaWxlIHRoYXQgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIGlzIG5vdCBhCisjLiAqIGdvb2QgaWRlYS4KKyM6IGV4X2NtZHMuYzoyMTQwCittc2dpZCAiRTEzOTogRmlsZSBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIiCittc2dzdHIgIkUxMzk6IEZpbGUgZ2ngIGNhcmljYXRvIGluIHVuIGFsdHJvIGJ1ZmZlciIKKworIzogZXhfY21kcy5jOjIxNzQKK21zZ2lkICJXcml0ZSBwYXJ0aWFsIGZpbGU/IgorbXNnc3RyICJTY3Jpdm8gaWwgZmlsZSBpbmNvbXBsZXRvPyIKKworIzogZXhfY21kcy5jOjIxODEKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiRTE0MDogVXNhICEgcGVyIHNjcml2ZXJlIGlsIGJ1ZmZlciBpbmNvbXBsZXRvIgorCisjOiBleF9jbWRzLmM6MjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGUgZXhpc3RpbmcgZmlsZSBcIiUuKnNcIj8iCittc2dzdHIgIlJpc2NyaXR0dXJhIGRlbCBmaWxlIGVzaXN0ZW50ZSBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMuYzoyMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDE6IE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTE0MTogTWFuY2Egbm9tZSBmaWxlIHBlciBpbCBidWZmZXIgJWxkIgorCisjOiBleF9jbWRzLmM6MjQwNgorbXNnaWQgIkUxNDI6IEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24iCittc2dzdHIgIkUxNDI6IEZpbGUgbm9uIHNjcml0dG86IFNjcml0dHVyYSBpbmliaXRhIGRhIG9wemlvbmUgJ3dyaXRlJyIKKworIzogZXhfY21kcy5jOjI0MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIidyZWFkb25seScgb3B0aW9uIGlzIHNldCBmb3IgXCIlLipzXCIuXG4iCisiRG8geW91IHdpc2ggdG8gd3JpdGUgYW55d2F5PyIKK21zZ3N0ciAiIgorIm9wemlvbmUgJ3JlYWRvbmx5JyBhdHRpdmEgcGVyIFwiJS4qc1wiLlxuIgorIlZ1b2kgc2NyaXZlcmUgY29tdW5xdWU/IgorCisjOiBleF9jbWRzLmM6MjU5OQorbXNnaWQgIkVkaXQgRmlsZSIKK21zZ3N0ciAiRWxhYm9yYSBGaWxlIgorCisjOiBleF9jbWRzLmM6MzIwNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTQzOiBBdXRvY29tbWFuZHMgdW5leHBlY3RlZGx5IGRlbGV0ZWQgbmV3IGJ1ZmZlciAlcyIKK21zZ3N0ciAiIgorIkUxNDM6IEdsaSBhdXRvY29tYW5kaSBoYW5ubyBpbmFzcGV0dGF0YW1lbnRlIGNhbmNlbGxhdG8gaWwgbnVvdm8gYnVmZmVyICVzIgorCisjOiBleF9jbWRzLmM6MzM0MQorbXNnaWQgIkUxNDQ6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIDp6IgorbXNnc3RyICJFMTQ0OiBhcmdvbWVudG8gbm9uLW51bWVyaWNvIGEgOnoiCisKKyM6IGV4X2NtZHMuYzozNDI2Cittc2dpZCAiRTE0NTogU2hlbGwgY29tbWFuZHMgbm90IGFsbG93ZWQgaW4gcnZpbSIKK21zZ3N0ciAiRTE0NTogQ29tYW5kaSBTaGVsbCBub24gcGVybWVzc2kgaW4gcnZpbSIKKworIzogZXhfY21kcy5jOjM1MzMKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiBMZSBlc3ByZXNzaW9uaSByZWdvbGFyaSBub24gcG9zc29ubyBlc3NlcmUgZGVsaW1pdGF0ZSBkYSBsZXR0ZXJlIgorCisjOiBleF9jbWRzLmM6Mzg3OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHdpdGggJXMgKHkvbi9hL3EvbC9eRS9eWSk/IgorbXNnc3RyICJzb3N0aXR1aXJlIGNvbiAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCisKKyM6IGV4X2NtZHMuYzo0MjcyCittc2dpZCAiKEludGVycnVwdGVkKSAiCittc2dzdHIgIihJbnRlcnJvdHRvKSAiCisKKyM6IGV4X2NtZHMuYzo0Mjc2Cittc2dpZCAiMSBzdWJzdGl0dXRpb24iCittc2dzdHIgIjEgc29zdGl0dXppb25lIgorCisjOiBleF9jbWRzLmM6NDI3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgc3Vic3RpdHV0aW9ucyIKK21zZ3N0ciAiJWxkIHNvc3RpdHV6aW9uaSIKKworIzogZXhfY21kcy5jOjQyODEKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIgaW4gMSBsaW5lYSIKKworIzogZXhfY21kcy5jOjQyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uICVsZCBsaW5lcyIKK21zZ3N0ciAiIGluICVsZCBsaW5lZSIKKworIzogZXhfY21kcy5jOjQzMzQKK21zZ2lkICJFMTQ3OiBDYW5ub3QgZG8gOmdsb2JhbCByZWN1cnNpdmUiCittc2dzdHIgIkUxNDc6IDpnbG9iYWwgbm9uIHB18iBlc3NlcmUgdXNhdG8gcmljb3JzaXZhbWVudGUiCisKKyM6IGV4X2NtZHMuYzo0MzY5Cittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IE1hbmNhIGVzcHJlc3Npb25lIHJlZ29sYXJlIG5lbCBjb21hbmRvICdnbG9iYWwnIgorCisjOiBleF9jbWRzLmM6NDQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIGZvdW5kIGluIGV2ZXJ5IGxpbmU6ICVzIgorbXNnc3RyICJFc3ByZXNzaW9uZSB0cm92YXRhIHN1IG9nbmkgbGluZWE6ICVzIgorCisjOiBleF9jbWRzLmM6NDQ5OQorbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMgVWx0aW1hIFN0cmluZ2EgU29zdGl0dXppb25lOlxuIgorIiQiCisKKyM6IGV4X2NtZHMuYzo0NjAwCittc2dpZCAiRTQ3ODogRG9uJ3QgcGFuaWMhIgorbXNnc3RyICJFNDc4OiBOb24gbGFzY2lhcnRpIHByZW5kZXJlIGRhbCBwYW5pY28hIgorCisjOiBleF9jbWRzLmM6NDY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjYxOiBTb3JyeSwgbm8gJyVzJyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTY2MTogU3BpYWNlbnRlLCBuZXNzdW4gYWl1dG8gJyVzJyBwZXIgJXMiCisKKyM6IGV4X2NtZHMuYzo0NjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTogU3BpYWNlbnRlLCBuZXNzdW4gYWl1dG8gcGVyICVzIgorCisjOiBleF9jbWRzLmM6NDY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiCittc2dzdHIgIlNwaWFjZW50ZSwgbm9uIHRyb3ZvIGZpbGUgZGkgYWl1dG8gXCIlc1wiIgorCisjOiBleF9jbWRzLmM6NTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiAlcyBub24g6CB1bmEgZGlyZWN0b3J5IgorCisjOiBleF9jbWRzLmM6NTMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUyOiBDYW5ub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE1MjogTm9uIHBvc3NvIGFwcmlyZSAlcyBpbiBzY3JpdHR1cmEiCisKKyM6IGV4X2NtZHMuYzo1MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTM6IFVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTUzOiBOb24gcmllc2NvIGFkIGFwcmlyZSAlcyBpbiBsZXR0dXJhIgorCisjOiBleF9jbWRzLmM6NTM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjcwOiBNaXggb2YgaGVscCBmaWxlIGVuY29kaW5ncyB3aXRoaW4gYSBsYW5ndWFnZTogJXMiCittc2dzdHIgIkU2NzA6IENvZGlmaWNoZSBkaXZlcnNlIGZyYSBmaWxlIGRpIGFpdXRvIG5lbGxhIHN0ZXNzYSBsaW5ndWE6ICVzIgorCisjOiBleF9jbWRzLmM6NTQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU0OiBEdXBsaWNhdGUgdGFnIFwiJXNcIiBpbiBmaWxlICVzIgorbXNnc3RyICJFMTU0OiBUYWcgZHVwbGljYXRhIFwiJXNcIiBuZWwgZmlsZSAlcyIKKworIzogZXhfY21kcy5jOjU1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiBDb21hbmRvICdzaWduJyBzY29ub3NjaXV0bzogJXMiCisKKyM6IGV4X2NtZHMuYzo1NTk5Cittc2dpZCAiRTE1NjogTWlzc2luZyBzaWduIG5hbWUiCittc2dzdHIgIkUxNTY6IE1hbmNhIG5vbWUgJ3NpZ24nIgorCisjOiBleF9jbWRzLmM6NTY0NQorbXNnaWQgIkU2MTI6IFRvbyBtYW55IHNpZ25zIGRlZmluZWQiCittc2dzdHIgIkU2MTI6IFRyb3BwaSAnc2lnbicgZGVmaW5pdGkiCisKKyM6IGV4X2NtZHMuYzo1NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTogVGVzdG8gJ3NpZ24nIG5vbiB2YWxpZG86ICVzIgorCisjOiBleF9jbWRzLmM6NTc0NCBleF9jbWRzLmM6NTkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiAnc2lnbicgc2Nvbm9zY2l1dG86ICVzIgorCisjOiBleF9jbWRzLmM6NTc5MworbXNnaWQgIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiCittc2dzdHIgIkUxNTk6IE1hbmNhIG51bWVybyAnc2lnbiciCisKKyM6IGV4X2NtZHMuYzo1ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTg6IEludmFsaWQgYnVmZmVyIG5hbWU6ICVzIgorbXNnc3RyICJFMTU4OiBOb21lIGJ1ZmZlciBub24gdmFsaWRvOiAlcyIKKworIzogZXhfY21kcy5jOjU5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NzogSW52YWxpZCBzaWduIElEOiAlbGQiCittc2dzdHIgIkUxNTc6IElEICdzaWduJyBub24gdmFsaWRvOiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1OTg0Cittc2dpZCAiIChOT1QgRk9VTkQpIgorbXNnc3RyICIgKE5PTiBUUk9WQVRPKSIKKworIzogZXhfY21kcy5jOjU5ODYKK21zZ2lkICIgKG5vdCBzdXBwb3J0ZWQpIgorbXNnc3RyICIgKG5vbiBzdXBwb3J0YXRhKSIKKworIzogZXhfY21kcy5jOjYwODUKK21zZ2lkICJbRGVsZXRlZF0iCittc2dzdHIgIltDYW5jZWxsYXRvXSIKKworIzogZXhfZG9jbWQuYzo1MjUKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAiRW50cm8gbW9kYWxpdOAgRXguICBCYXR0aSBcInZpc3VhbFwiIHBlciB0b3JuYXJlIGEgbW9kYWxpdOAgTm9ybWFsZS4iCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjU2MQorbXNnaWQgIkU1MDE6IEF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJFNTAxOiBBbGxhIGZpbmUtZmlsZSIKKworIzogZXhfZG9jbWQuYzo2NzAKK21zZ2lkICJFMTY5OiBDb21tYW5kIHRvbyByZWN1cnNpdmUiCittc2dzdHIgIkUxNjk6IENvbWFuZG8gdHJvcHBvIHJpY29yc2l2byIKKworIzogZXhfZG9jbWQuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDU6IEV4Y2VwdGlvbiBub3QgY2F1Z2h0OiAlcyIKK21zZ3N0ciAiRTYwNTogRWNjZXppb25lIG5vbiBpbnRlcmNldHRhdGE6ICVzIgorCisjOiBleF9kb2NtZC5jOjEzMjAKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICJGaW5lIGRlbCBmaWxlIGRpIGNvbWFuZGkiCisKKyM6IGV4X2RvY21kLmM6MTMyMQorbXNnaWQgIkVuZCBvZiBmdW5jdGlvbiIKK21zZ3N0ciAiRmluZSBmdW56aW9uZSAiCisKKyM6IGV4X2RvY21kLmM6MTkxMAorbXNnaWQgIkU0NjQ6IEFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgIkU0NjQ6IFVzbyBhbWJpZ3VvIGRpIGNvbWFuZG8gZGVmaW5pdG8gZGFsbCd1dGVudGUiCisKKyM6IGV4X2RvY21kLmM6MTkyNAorbXNnaWQgIkU0OTI6IE5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAiRTQ5MjogTm9uIOggdW4gY29tYW5kbyBkZWxsJ2VkaXRvciIKKworIzogZXhfZG9jbWQuYzoyMDMxCittc2dpZCAiRTQ5MzogQmFja3dhcmRzIHJhbmdlIGdpdmVuIgorbXNnc3RyICJFNDkzOiBJbnRlcnZhbGxvIHJvdmVzY2lhdG8iCisKKyM6IGV4X2RvY21kLmM6MjA0MAorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiwgT0sgdG8gc3dhcCIKK21zZ3N0ciAiSW50ZXJ2YWxsbyByb3Zlc2NpYXRvLCBPSyBpbnZlcnRpcmxvIgorCisjOiBleF9kb2NtZC5jOjIxNjMKK21zZ2lkICJFNDk0OiBVc2UgdyBvciB3Pj4iCittc2dzdHIgIkU0OTQ6IFVzYSB3IG9wcHVyZSB3Pj4iCisKKyM6IGV4X2RvY21kLmM6Mzc4OQorbXNnaWQgIkUzMTk6IFNvcnJ5LCB0aGUgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTMxOTogU3BpYWNlbnRlLCBjb21hbmRvIG5vbiBkaXNwb25pYmlsZSBpbiBxdWVzdGEgdmVyc2lvbmUiCisKKyM6IGV4X2RvY21kLmM6Mzk5MgorbXNnaWQgIkUxNzI6IE9ubHkgb25lIGZpbGUgbmFtZSBhbGxvd2VkIgorbXNnc3RyICJFMTcyOiBBbW1lc3NvIHVuIHNvbG8gbm9tZSBmaWxlIgorCisjOiBleF9kb2NtZC5jOjQ1NzIKK21zZ2lkICIxIG1vcmUgZmlsZSB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICIxIHVsdGVyaW9yZSBmaWxlIGRhIGVsYWJvcmFyZS4gIEVzY28gbG8gc3Rlc3NvPyIKKworIzogZXhfZG9jbWQuYzo0NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG1vcmUgZmlsZXMgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIKK21zZ3N0ciAiJWQgdWx0ZXJpb3JpIGZpbGUgZGEgZWxhYm9yYXJlLiAgRXNjbyBsbyBzdGVzc28/IgorCisjOiBleF9kb2NtZC5jOjQ1ODIKK21zZ2lkICJFMTczOiAxIG1vcmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTczOiBhbmNvcmEgMSBmaWxlIGRhIGVsYWJvcmFyZSIKKworIzogZXhfZG9jbWQuYzo0NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzM6ICVsZCBtb3JlIGZpbGVzIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6IGFuY29yYSAlbGQgZmlsZSBkYSBlbGFib3JhcmUiCisKKyM6IGV4X2RvY21kLmM6NDY3OQorbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxNzQ6IElsIGNvbWFuZG8gZXNpc3RlIGdp4DogYWdnaXVuZ2kgISBwZXIgc29zdGl0dWlybG8iCisKKyM6IGV4X2RvY21kLmM6NDc5MAorbXNnaWQgIiIKKyJcbiIKKyIgICAgTmFtZSAgICAgICAgQXJncyBSYW5nZSBDb21wbGV0ZSAgRGVmaW5pdGlvbiIKK21zZ3N0ciAiIgorIlxuIgorIiAgICBOb21lICAgICAgICBBcmcuIEludGVyIENvbXBsZXRvICBEZWZpbml6aW9uZSIKKworIzogZXhfZG9jbWQuYzo0ODc5Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICJOb24gdHJvdm8gY29tYW5kaSBkZWZpbml0aSBkYWxsJ3V0ZW50ZSIKKworIzogZXhfZG9jbWQuYzo0OTExCittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTogTmVzc3VuIGF0dHJpYnV0byBzcGVjaWZpY2F0byIKKworIzogZXhfZG9jbWQuYzo0OTYzCittc2dpZCAiRTE3NjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJFMTc2OiBOdW1lcm8gZGkgYXJnb21lbnRpIG5vbiB2YWxpZG8iCisKKyM6IGV4X2RvY21kLmM6NDk3OAorbXNnaWQgIkUxNzc6IENvdW50IGNhbm5vdCBiZSBzcGVjaWZpZWQgdHdpY2UiCittc2dzdHIgIkUxNzc6IE5vbiBzaSBwdfIgc3BlY2lmaWNhcmUgZHVlIHZvbHRlIGlsIGNvbnRhdG9yZSIKKworIzogZXhfZG9jbWQuYzo0OTg4Cittc2dpZCAiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIKK21zZ3N0ciAiRTE3ODogVmFsb3JlIHByZWRlZmluaXRvIGRlbCBjb250YXRvcmUgbm9uIHZhbGlkbyIKKworIzogZXhfZG9jbWQuYzo1MDE5Cittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiBhcmdvbWVudG8gbmVjZXNzYXJpbyBwZXIgY29tcGxldGUiCisKKyM6IGV4X2RvY21kLmM6NTA1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgwOiBJbnZhbGlkIGNvbXBsZXRlIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTE4MDogVmFsb3JlICVzIG5vbiB2YWxpZG8gcGVyICdjb21wbGV0ZSciCisKKyM6IGV4X2RvY21kLmM6NTA2MAorbXNnaWQgIkU0Njg6IENvbXBsZXRpb24gYXJndW1lbnQgb25seSBhbGxvd2VkIGZvciBjdXN0b20gY29tcGxldGlvbiIKK21zZ3N0ciAiIgorIkU0Njg6IEFyZ29tZW50byBkaSBjb21wbGV0YW1lbnRvIHBlcm1lc3NvIHNvbG8gcGVyIGNvbXBsZXRhbWVudG8gIgorInBlcnNvbmFsaXp6YXRvIgorCisjOiBleF9kb2NtZC5jOjUwNjYKK21zZ2lkICJFNDY3OiBDdXN0b20gY29tcGxldGlvbiByZXF1aXJlcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IgorbXNnc3RyICIiCisiRTQ2NzogSWwgY29tcGxldGFtZW50byBwZXJzb25hbGl6emF0byByaWNoaWVkZSB1biBhcmdvbWVudG8gZGkgZnVuemlvbmUiCisKKyM6IGV4X2RvY21kLmM6NTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTgxOiBJbnZhbGlkIGF0dHJpYnV0ZTogJXMiCittc2dzdHIgIkUxODE6IEF0dHJpYnV0byBub24gdmFsaWRvOiAlcyIKKworIzogZXhfZG9jbWQuYzo1MTIwCittc2dpZCAiRTE4MjogSW52YWxpZCBjb21tYW5kIG5hbWUiCittc2dzdHIgIkUxODI6IE5vbWUgY29tYW5kbyBub24gdmFsaWRvIgorCisjOiBleF9kb2NtZC5jOjUxMzUKK21zZ2lkICJFMTgzOiBVc2VyIGRlZmluZWQgY29tbWFuZHMgbXVzdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIiCittc2dzdHIgIiIKKyJFMTgzIEkgY29tYW5kaSBkZWZpbml0aSBkYWxsJ3V0ZW50ZSBkZXZvbm8gaW5pemlhcmUgY29uIGxldHRlcmEgbWFpdXNjb2xhIgorCisjOiBleF9kb2NtZC5jOjUyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NDogTm8gc3VjaCB1c2VyLWRlZmluZWQgY29tbWFuZDogJXMiCittc2dzdHIgIkUxODQ6IENvbWFuZG8gZGVmaW5pdG8gZGFsbCd1dGVudGUgJXMgaW5lc2lzdGVudGUiCisKKyM6IGV4X2RvY21kLmM6NTY2NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTg1OiBDYW5ub3QgZmluZCBjb2xvciBzY2hlbWUgJXMiCittc2dzdHIgIkUxODU6IE5vbiByaWVzY28gYSB0cm92YXJlIHNjaGVtYSBjb2xvcmUgJXMiCisKKyM6IGV4X2RvY21kLmM6NTY3NQorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICJTYWx2ZSwgdXRlbnRlIFZpbSEiCisKKyM6IGV4X2RvY21kLmM6NjM5MworbXNnaWQgIkVkaXQgRmlsZSBpbiBuZXcgd2luZG93IgorbXNnc3RyICJBcHJpIGlsIEZpbGUgaW4gdW5hIG51b3ZhIGZpbmVzdHJhIgorCisjOiBleF9kb2NtZC5jOjY2ODgKK21zZ2lkICJObyBzd2FwIGZpbGUiCittc2dzdHIgIk5vbiBwb3NzbyBjcmVhcmUgdW4gZmlsZSBkaSBzd2FwIgorCisjOiBleF9kb2NtZC5jOjY3OTIKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAiSW4gYWdnaXVudGEgYWwgRmlsZSIKKworIzogZXhfZG9jbWQuYzo2ODU2Cittc2dpZCAiRTE4NjogTm8gcHJldmlvdXMgZGlyZWN0b3J5IgorbXNnc3RyICJFMTg2OiBOb24gYyfoIHVuYSBkaXJlY3RvcnkgcHJlY2VkZW50ZSIKKworIzogZXhfZG9jbWQuYzo2OTM4Cittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4NzogU2Nvbm9zY2l1dG8iCisKKyM6IGV4X2RvY21kLmM6NzAyMworbXNnaWQgIkU0NjU6IDp3aW5zaXplIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY1OiA6d2luc2l6ZSByaWNoaWVkZSBkdWUgYXJnb21lbnRpIG51bWVyaWNpIgorCisjOiBleF9kb2NtZC5jOjcwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2luZG93IHBvc2l0aW9uOiBYICVkLCBZICVkIgorbXNnc3RyICJQb3NpemlvbmUgZmluZXN0cmE6IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NzA4NAorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisiRTE4ODogSW5mb3JtYXppb25pIHBvc2l6aW9uZSBmaW5lc3RyYSBub24gZGlzcG9uaWJpbGkgc3UgcXVlc3RhIHBpYXR0YWZvcm1hIgorCisjOiBleF9kb2NtZC5jOjcwOTQKK21zZ2lkICJFNDY2OiA6d2lucG9zIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY2OiA6d2lucG9zIHJpY2hpZWRlIGR1ZSBhcmdvbWVudGkgbnVtZXJpY2kiCisKKyM6IGV4X2RvY21kLmM6NzM3MgorbXNnaWQgIlNhdmUgUmVkaXJlY3Rpb24iCittc2dzdHIgIlNhbHZhIFJlZGlyZXppb25lIgorCisjOiBleF9kb2NtZC5jOjc1NjIKK21zZ2lkICJTYXZlIFZpZXciCittc2dzdHIgIlNhbHZhIFZlZHV0YSIKKworIzogZXhfZG9jbWQuYzo3NTYzCittc2dpZCAiU2F2ZSBTZXNzaW9uIgorbXNnc3RyICJTYWx2YSBTZXNzaW9uZSIKKworIzogZXhfZG9jbWQuYzo3NTY1Cittc2dpZCAiU2F2ZSBTZXR1cCIKK21zZ3N0ciAiU2FsdmEgU2V0dXAiCisKKyM6IGV4X2RvY21kLmM6NzcxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTg5OiBcIiVzXCIgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxODk6IFwiJXNcIiBlc2lzdGUgKGFnZ2l1bmdpICEgcGVyIGVzZWd1aXJlIGNvbXVucXVlKSIKKworIzogZXhfZG9jbWQuYzo3NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTA6IENhbm5vdCBvcGVuIFwiJXNcIiBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE5MDogTm9uIHJpZXNjbyBhZCBhcHJpcmUgXCIlc1wiIGluIHNjcml0dHVyYSIKKworIy4gc2V0IG1hcmsKKyM6IGV4X2RvY21kLmM6Nzc0NgorbXNnaWQgIkUxOTE6IEFyZ3VtZW50IG11c3QgYmUgYSBsZXR0ZXIgb3IgZm9yd2FyZC9iYWNrd2FyZCBxdW90ZSIKK21zZ3N0ciAiIgorIkUxOTE6IEwnYXJnb21lbnRvIGRldmUgZXNzZXJlIHVuYSBsZXR0ZXJhLCBvcHB1cmUgdW4gYXBpY2UvYXBpY2UgcmV0cm92ZXJzbyIKKworIzogZXhfZG9jbWQuYzo3Nzg4Cittc2dpZCAiRTE5MjogUmVjdXJzaXZlIHVzZSBvZiA6bm9ybWFsIHRvbyBkZWVwIgorbXNnc3RyICJFMTkyOiBVc28gcmljb3JzaXZvIGRpIDpub3JtYWwgdHJvcHBvIGVzdGVzbyIKKworIzogZXhfZG9jbWQuYzo4MzA2Cittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6IE5lc3N1biBub21lIGZpbGUgYWx0ZXJuYXRpdm8gZGEgc29zdGl0dWlyZSBhICcjJyIKKworIzogZXhfZG9jbWQuYzo4MzM3Cittc2dpZCAiRTQ5NTogbm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIgorbXNnc3RyICJFNDk1OiBuZXNzdW4gZmlsZSBkaSBhdXRvY29tYW5kaSBkYSBzb3N0aXR1aXJlIHBlciBcIjxhZmlsZT5cIiIKKworIzogZXhfZG9jbWQuYzo4MzQ1Cittc2dpZCAiRTQ5Njogbm8gYXV0b2NvbW1hbmQgYnVmZmVyIG51bWJlciB0byBzdWJzdGl0dXRlIGZvciBcIjxhYnVmPlwiIgorbXNnc3RyICIiCisiRTQ5NjogbmVzc3VuIG51bWVybyBkaSBidWZmZXIgZGkgYXV0b2NvbWFuZGkgZGEgc29zdGl0dWlyZSBwZXIgXCI8YWJ1Zj5cIiIKKworIzogZXhfZG9jbWQuYzo4MzU2Cittc2dpZCAiRTQ5Nzogbm8gYXV0b2NvbW1hbmQgbWF0Y2ggbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhbWF0Y2g+XCIiCittc2dzdHIgIiIKKyJFNDk3OiBuZXNzdW4gbm9tZSBkaSBhdXRvY29tYW5kaSB0cm92YXRvIGRhIHNvc3RpdHVpcmUgcGVyIFwiPGFtYXRjaD5cIiIKKworIzogZXhfZG9jbWQuYzo4MzY2Cittc2dpZCAiRTQ5ODogbm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIiIKKyJFNDk4OiBuZXNzdW4gbm9tZSBkaSBmaWxlIDpzb3VyY2UgdHJvdmF0byBkYSBzb3N0aXR1aXJlIHBlciBcIjxzZmlsZT5cIiIKKworIzogZXhfZG9jbWQuYzo4NDA3CisjLCBuby1jLWZvcm1hdAorbXNnaWQgIkU0OTk6IEVtcHR5IGZpbGUgbmFtZSBmb3IgJyUnIG9yICcjJywgb25seSB3b3JrcyB3aXRoIFwiOnA6aFwiIgorbXNnc3RyICJFNDk5OiBVbiBub21lIGRpIGZpbGUgbnVsbG8gcGVyICclJyBvciAnIycsIHZhIGJlbmUgc29sbyBjb24gXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6ODQwOQorbXNnaWQgIkU1MDA6IEV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1MDA6IElsIHZhbG9yZSDoIHVuYSBzdHJpbmdhIG51bGxhIgorCisjOiBleF9kb2NtZC5jOjkzODAKK21zZ2lkICJFMTk1OiBDYW5ub3Qgb3BlbiB2aW1pbmZvIGZpbGUgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxOTU6IE5vbiBwb3NzbyBhcHJpcmUgaWwgZmlsZSB2aW1pbmZvIGluIGxldHR1cmEiCisKKyM6IGV4X2RvY21kLmM6OTU1MworbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5NjogRGlncmFtbWkgbm9uIHN1cHBvcnRhdGkgaW4gcXVlc3RhIHZlcnNpb25lIgorCisjOiBleF9ldmFsLmM6NDQwCittc2dpZCAiRTYwODogQ2Fubm90IDp0aHJvdyBleGNlcHRpb25zIHdpdGggJ1ZpbScgcHJlZml4IgorbXNnc3RyICJFNjA4OiBJbXBvc3NpYmlsZSBsYW5jaWFyZSBlY2NlemlvbmkgY29uIHByZWZpc3NvICdWaW0nIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV4X2V2YWwuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIHRocm93bjogJXMiCittc2dzdHIgIkVjY2V6aW9uZSBsYW5jaWF0YTogJXMiCisKKyM6IGV4X2V2YWwuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGZpbmlzaGVkOiAlcyIKK21zZ3N0ciAiRWNjZXppb25lIGZpbml0YTogJXMiCisKKyM6IGV4X2V2YWwuYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGRpc2NhcmRlZDogJXMiCittc2dzdHIgIkVjY2V6aW9uZSBzY2FydGF0YTogJXMiCisKKyM6IGV4X2V2YWwuYzo2MjAgZXhfZXZhbC5jOjY2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgbGluZSAlbGQiCittc2dzdHIgIiVzLCBsaW5lYSAlbGQiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gY2F1Z2h0OiAlcyIKK21zZ3N0ciAiRWNjZXppb25lIGludGVyY2V0dGF0YTogJXMiCisKKyM6IGV4X2V2YWwuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbWFkZSBwZW5kaW5nIgorbXNnc3RyICIlcyByZXNvICdwZW5kaW5nJyIKKworIzogZXhfZXZhbC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXN1bWVkIgorbXNnc3RyICIlcyByaXByaXN0aW5hdG8iCisKKyM6IGV4X2V2YWwuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzY2FyZGVkIgorbXNnc3RyICIlcyBzY2FydGF0byIKKworIzogZXhfZXZhbC5jOjc0NgorbXNnaWQgIkV4Y2VwdGlvbiIKK21zZ3N0ciAiRWNjZXppb25lIgorCisjOiBleF9ldmFsLmM6NzUyCittc2dpZCAiRXJyb3IgYW5kIGludGVycnVwdCIKK21zZ3N0ciAiRXJyb3JlIGVkIGludGVycnV6aW9uZSIKKworIzogZXhfZXZhbC5jOjc1NCBndWkuYzo0MzgxCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkVycm9yZSIKKworIy4gaWYgKHBlbmRpbmcgJiBDU1RQX0lOVEVSUlVQVCkKKyM6IGV4X2V2YWwuYzo3NTYKK21zZ2lkICJJbnRlcnJ1cHQiCittc2dzdHIgIkludGVycnV6aW9uZSIKKworIzogZXhfZXZhbC5jOjgzMAorbXNnaWQgIkU1Nzk6IDppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTc5OiBuaWRpZmljYXppb25lIGRpIDppZiB0cm9wcG8gZXN0ZXNhIgorCisjOiBleF9ldmFsLmM6ODY3Cittc2dpZCAiRTU4MDogOmVuZGlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgwOiA6ZW5kaWYgc2VuemEgOmlmIgorCisjOiBleF9ldmFsLmM6OTExCittc2dpZCAiRTU4MTogOmVsc2Ugd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODE6IDplbHNlIHNlbnphIDppZiIKKworIzogZXhfZXZhbC5jOjkxNAorbXNnaWQgIkU1ODI6IDplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODI6IDplbHNlaWYgc2VuemEgOmlmIgorCisjOiBleF9ldmFsLmM6OTIxCittc2dpZCAiRTU4MzogbXVsdGlwbGUgOmVsc2UiCittc2dzdHIgIkU1ODM6IDplbHNlIG11bHRpcGxpIgorCisjOiBleF9ldmFsLmM6OTI0Cittc2dpZCAiRTU4NDogOmVsc2VpZiBhZnRlciA6ZWxzZSIKK21zZ3N0ciAiRTU4NDogOmVsc2VpZiBkb3BvIDplbHNlIgorCisjOiBleF9ldmFsLmM6OTkxCittc2dpZCAiRTU4NTogOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU1ODU6IG5pZGlmaWNhemlvbmUgZGkgOndoaWxlIHRyb3BwbyBlc3Rlc2EiCisKKyM6IGV4X2V2YWwuYzoxMDQ3Cittc2dpZCAiRTU4NjogOmNvbnRpbnVlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg2OiA6Y29udGludWUgc2VuemEgOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTA4NworbXNnaWQgIkU1ODc6IDpicmVhayB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4NzogOmJyZWFrIHNlbnphIDp3aGlsZSIKKworIzogZXhfZXZhbC5jOjEyODYKK21zZ2lkICJFNjAxOiA6dHJ5IG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU2MDE6IG5pZGlmaWNhemlvbmUgZGkgOnRyeSB0cm9wcG8gZXN0ZXNhIgorCisjOiBleF9ldmFsLmM6MTM2NgorbXNnaWQgIkU2MDM6IDpjYXRjaCB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDM6IDpjYXRjaCBzZW56YSA6dHJ5IgorCisjLiBHaXZlIHVwIGZvciBhICI6Y2F0Y2giIGFmdGVyICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKyMuICogSnVzdCBwYXJzZS4KKyM6IGV4X2V2YWwuYzoxMzg4Cittc2dpZCAiRTYwNDogOmNhdGNoIGFmdGVyIDpmaW5hbGx5IgorbXNnc3RyICJFNjA0OiA6Y2F0Y2ggZG9wbyA6ZmluYWxseSIKKworIzogZXhfZXZhbC5jOjE1MjEKK21zZ2lkICJFNjA2OiA6ZmluYWxseSB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDY6IDpmaW5hbGx5IHNlbnphIDp0cnkiCisKKyMuIEdpdmUgdXAgZm9yIGEgbXVsdGlwbGUgIjpmaW5hbGx5IiBhbmQgaWdub3JlIGl0LgorIzogZXhfZXZhbC5jOjE1NDUKK21zZ2lkICJFNjA3OiBtdWx0aXBsZSA6ZmluYWxseSIKK21zZ3N0ciAiRTYwNzogOmZpbmFsbHkgbXVsdGlwbGkiCisKKyM6IGV4X2V2YWwuYzoxNjU0Cittc2dpZCAiRTYwMjogOmVuZHRyeSB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDI6IDplbmR0cnkgc2VuemEgOnRyeSIKKworIzogZXhfZXZhbC5jOjE5ODYKK21zZ2lkICJFMTkzOiA6ZW5kZnVuY3Rpb24gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTkzOiA6ZW5kZnVuY3Rpb24gbm9uIGNvbnRlbnV0byBpbiB1bmEgZnVuemlvbmUiCisKKyM6IGV4X2dldGxuLmM6MzI5OQorbXNnaWQgInRhZ25hbWUiCittc2dzdHIgIm5vbWVfdGFnIgorCisjOiBleF9nZXRsbi5jOjMzMDIKK21zZ2lkICIga2luZCBmaWxlXG4iCittc2dzdHIgIiB0aXBvIGZpbGVcbiIKKworIzogZXhfZ2V0bG4uYzo0NzY4Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICJsJ29wemlvbmUgJ2hpc3RvcnknIOggYSB6ZXJvIgorCisjOiBleF9nZXRsbi5jOjUwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgJXMgSGlzdG9yeSAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjICVzIFN0b3JpYSAoZGEgcGn5IHJlY2VudGUgYSBtZW5vIHJlY2VudGUpOlxuIgorCisjOiBleF9nZXRsbi5jOjUwNDAKK21zZ2lkICJDb21tYW5kIExpbmUiCittc2dzdHIgIkxpbmVhIGRpIENvbWFuZG8iCisKKyM6IGV4X2dldGxuLmM6NTA0MQorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgIlN0cmluZ2EgZGkgUmljZXJjYSIKKworIzogZXhfZ2V0bG4uYzo1MDQyCittc2dpZCAiRXhwcmVzc2lvbiIKK21zZ3N0ciAiRXNwcmVzc2lvbmUiCisKKyM6IGV4X2dldGxuLmM6NTA0MworbXNnaWQgIklucHV0IExpbmUiCittc2dzdHIgIkxpbmVhIGRpIElucHV0IgorCisjOiBleF9nZXRsbi5jOjUwODEKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyIGRvcG8gbGEgZmluZSBkZWwgY29tYW5kbyIKKworIzogZXhfZ2V0bG4uYzo1MjU4Cittc2dpZCAiRTE5OTogQWN0aXZlIHdpbmRvdyBvciBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiRTE5OTogRmluZXN0cmEgYXR0aXZhIG8gYnVmZmVyIGNhbmNlbGxhdG8iCisKKyM6IGZpbGVpby5jOjM3OAorbXNnaWQgIklsbGVnYWwgZmlsZSBuYW1lIgorbXNnc3RyICJOb21lIGRpIGZpbGUgbm9uIGFtbWVzc28iCisKKyM6IGZpbGVpby5jOjQwMiBmaWxlaW8uYzo1NDAgZmlsZWlvLmM6MjkyNSBmaWxlaW8uYzoyOTY2Cittc2dpZCAiaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIuggdW5hIGRpcmVjdG9yeSIKKworIzogZmlsZWlvLmM6NDA0Cittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAibm9uIOggdW4gZmlsZSIKKworIzogZmlsZWlvLmM6NTYyIGZpbGVpby5jOjQxNDMKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJbRmlsZSBudW92b10iCisKKyM6IGZpbGVpby5jOjU5NQorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIltUaXBvIGRpIGFjY2Vzc28gbm9uIGNvbnNlbnRpdG9dIgorCisjOiBmaWxlaW8uYzo3MDYKK21zZ2lkICJFMjAwOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbWFkZSB0aGUgZmlsZSB1bnJlYWRhYmxlIgorbXNnc3RyICJFMjAwOiBHbGkgYXV0b2NvbWFuZCAqUmVhZFByZSBoYW5ubyByZXNvIGlsIGZpbGUgaWxsZWdnaWJpbGUiCisKKyM6IGZpbGVpby5jOjcwOAorbXNnaWQgIkUyMDE6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUyMDE6IEdsaSBhdXRvY29tYW5kaSAqUmVhZFByZSBub24gZGV2b25vIG1vZGlmaWNhcmUgaWwgYnVmZmVyIGluIHVzbyIKKworIzogZmlsZWlvLmM6NzI5Cittc2dpZCAiVmltOiBSZWFkaW5nIGZyb20gc3RkaW4uLi5cbiIKK21zZ3N0ciAiVmltOiBMZWdnbyBkYSAnc3RkaW4nLi4uXG4iCisKKyM6IGZpbGVpby5jOjczNQorbXNnaWQgIlJlYWRpbmcgZnJvbSBzdGRpbi4uLiIKK21zZ3N0ciAiTGVnZ28gZGEgJ3N0ZGluJy4uLiIKKworIy4gUmUtb3BlbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBmYWlsZWQhCisjOiBmaWxlaW8uYzoxMDEyCittc2dpZCAiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiCittc2dzdHIgIkUyMDI6IExhIGNvbnZlcnNpb25lIGhhIHJlc28gaWwgZmlsZSBpbGxlZ2dpYmlsZSEiCisKKyM6IGZpbGVpby5jOjIxMDIKK21zZ2lkICJbZmlmby9zb2NrZXRdIgorbXNnc3RyICJbZmlmby9zb2NrZXRdIgorCisjOiBmaWxlaW8uYzoyMTA5Cittc2dpZCAiW2ZpZm9dIgorbXNnc3RyICJbZmlmb10iCisKKyM6IGZpbGVpby5jOjIxMTYKK21zZ2lkICJbc29ja2V0XSIKK21zZ3N0ciAiW3NvY2tldF0iCisKKyM6IGZpbGVpby5jOjIxMjQKK21zZ2lkICJbUk9dIgorbXNnc3RyICJbU29sYSBMZXR0dXJhXSIKKworIzogZmlsZWlvLmM6MjEzNAorbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW21hbmNhIENSXSIKKworIzogZmlsZWlvLmM6MjEzOQorbXNnaWQgIltOTCBmb3VuZF0iCittc2dzdHIgIlt0cm92YXRhIE5MXSIKKworIzogZmlsZWlvLmM6MjE0NAorbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW2xpbmVlIGx1bmdoZSBkaXZpc2VdIgorCisjOiBmaWxlaW8uYzoyMTUwIGZpbGVpby5jOjQxMjcKK21zZ2lkICJbTk9UIGNvbnZlcnRlZF0iCittc2dzdHIgIltOT04gY29udmVydGl0b10iCisKKyM6IGZpbGVpby5jOjIxNTUgZmlsZWlvLmM6NDEzMgorbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJbY29udmVydGl0b10iCisKKyM6IGZpbGVpby5jOjIxNjIgZmlsZWlvLmM6NDE1NworbXNnaWQgIltjcnlwdGVkXSIKK21zZ3N0ciAiW2NyaXR0b2dyYWZhdG9dIgorCisjOiBmaWxlaW8uYzoyMTY5Cittc2dpZCAiW0NPTlZFUlNJT04gRVJST1JdIgorbXNnc3RyICJbRVJST1JFIERJIENPTlZFUlNJT05FXSIKKworIzogZmlsZWlvLmM6MjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJbSUxMRUdBTCBCWVRFIGluIGxpbmUgJWxkXSIKK21zZ3N0ciAiW0JZVEUgTk9OIFZBTElETyBhbGxhIGxpbmVhICVsZF0iCisKKyM6IGZpbGVpby5jOjIxODIKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbRVJST1JJIElOIExFVFRVUkFdIgorCisjOiBmaWxlaW8uYzoyMzk4Cittc2dpZCAiQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIGNvbnZlcnNpb24iCittc2dzdHIgIk5vbiByaWVzY28gYSB0cm92YXJlIGlsIGZpbGUgdGVtcCBwZXIgbGVnZ2VybG8iCisKKyM6IGZpbGVpby5jOjI0MDUKK21zZ2lkICJDb252ZXJzaW9uIHdpdGggJ2NoYXJjb252ZXJ0JyBmYWlsZWQiCittc2dzdHIgIkNvbnZlcnNpb25lIGZhbGxpdGEgY29uICdjaGFyY29udmVydCciCisKKyM6IGZpbGVpby5jOjI0MDgKK21zZ2lkICJjYW4ndCByZWFkIG91dHB1dCBvZiAnY2hhcmNvbnZlcnQnIgorbXNnc3RyICJub24gcmllc2NvIGEgbGVnZ2VyZSBpbCByaXN1bHRhdG8gZGkgJ2NoYXJjb252ZXJ0JyIKKworIzogZmlsZWlvLmM6MjgwOAorbXNnaWQgIkUyMDM6IEF1dG9jb21tYW5kcyBkZWxldGVkIG9yIHVubG9hZGVkIGJ1ZmZlciB0byBiZSB3cml0dGVuIgorbXNnc3RyICJFMjAzOiBCdWZmZXIgaW4gc2NyaXR0dXRhIGNhbmNlbGxhdG8gbyBzY2FyaWNhdG8gZGFnbGkgYXV0b2NvbWFuZGkiCisKKyM6IGZpbGVpby5jOjI4MzEKK21zZ2lkICJFMjA0OiBBdXRvY29tbWFuZCBjaGFuZ2VkIG51bWJlciBvZiBsaW5lcyBpbiB1bmV4cGVjdGVkIHdheSIKK21zZ3N0ciAiRTIwNDogTCdhdXRvY29tYW5kbyBoYSBtb2RpZmljYXRvIG51bWVybyBsaW5lZSBpbiBtYW5pZXJhIGltcHJldmlzdGEiCisKKyM6IGZpbGVpby5jOjI4NjkKK21zZ2lkICJOZXRCZWFucyBkaXNzYWxsb3dzIHdyaXRlcyBvZiB1bm1vZGlmaWVkIGJ1ZmZlcnMiCittc2dzdHIgIk5ldEJlYW5zIG5vbiBwZXJtZXR0ZSBsYSBzY3JpdHR1cmEgZGkgdW4gYnVmZmVyIG5vbiBtb2RpZmljYXRvIgorCisjOiBmaWxlaW8uYzoyODc3Cittc2dpZCAiUGFydGlhbCB3cml0ZXMgZGlzYWxsb3dlZCBmb3IgTmV0QmVhbnMgYnVmZmVycyIKK21zZ3N0ciAiU2NyaXR0dXJhIHBhcnppYWxlIGRpc2FiaWxpdGF0YSBwZXIgaSBidWZmZXIgZGkgTmV0QmVhbnMiCisKKyM6IGZpbGVpby5jOjI5MzEgZmlsZWlvLmM6Mjk0OQorbXNnaWQgImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIgorbXNnc3RyICJub24g6CB1biBmaWxlIG8gdW4gZGlzcG9zaXRpdm8gc3UgY3VpIHNpIHBvc3NhIHNjcml2ZXJlIgorCisjOiBmaWxlaW8uYzozMDAxCittc2dpZCAiaXMgcmVhZC1vbmx5IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIuggaW4gc29sYSBsZXR0dXJlIChhZ2dpdW5naSAhIHBlciBlc2VndWlyZSBjb211bnF1ZSkiCisKKyM6IGZpbGVpby5jOjMzNDcKK21zZ2lkICJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICIiCisiRTUwNjogTm9uIHBvc3NvIHNjcml2ZXJlIHN1bCBmaWxlIGRpIGJhY2t1cCAoYWdnaXVuZ2kgISBwZXIgZXNlZ3VpcmUgIgorImNvbXVucXVlKSIKKworIzogZmlsZWlvLmM6MzM1OQorbXNnaWQgIkU1MDc6IENsb3NlIGVycm9yIGZvciBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICIiCisiRTUwNzogRXJyb3JlIGluIGNoaXVzdXJhIHN1bCBmaWxlIGRpIGJhY2t1cCAoYWdnaXVuZ2kgISBwZXIgZXNlZ3VpcmUgIgorImNvbXVucXVlKSIKKworIzogZmlsZWlvLmM6MzM2MQorbXNnaWQgIkU1MDg6IENhbid0IHJlYWQgZmlsZSBmb3IgYmFja3VwIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIiIKKyJFNTA4OiBOb24gcmllc2NvIGEgbGVnZ2VyZSBpbCBmaWxlIGRpIGJhY2t1cCAoYWdnaXVuZ2kgISBwZXIgZXNlZ3VpcmUgIgorImNvbXVucXVlKSIKKworIzogZmlsZWlvLmM6MzM3NworbXNnaWQgIkU1MDk6IENhbm5vdCBjcmVhdGUgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkU1MDk6IE5vbiBwb3NzbyBjcmVhcmUgaWwgZmlsZSBkaSBiYWNrdXAgKGFnZ2l1bmdpICEgcGVyIGVzZWd1aXJlIGNvbXVucXVlKSIKKworIzogZmlsZWlvLmM6MzQ4MAorbXNnaWQgIkU1MTA6IENhbid0IG1ha2UgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkU1MTA6IE5vbiBwb3NzbyBmYXJlIGlsIGZpbGUgZGkgYmFja3VwIChhZ2dpdW5naSAhIHBlciBlc2VndWlyZSBjb211bnF1ZSkiCisKKyM6IGZpbGVpby5jOjM1NDIKK21zZ2lkICJFNDYwOiBUaGUgcmVzb3VyY2UgZm9yayB3b3VsZCBiZSBsb3N0IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIiIKKyJFNDYwOiBMYSAnZm9yaycgc3VsbGEgcmlzb3JzYSB2ZXJyZWJiZSBwZXJzYSAoYWdnaXVuZ2kgISBwZXIgZXNlZ3VpcmUgIgorImNvbXVucXVlKSIKKworIzogZmlsZWlvLmM6MzY1MgorbXNnaWQgIkUyMTQ6IENhbid0IGZpbmQgdGVtcCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjE0OiBOb24gcmllc2NvIGEgdHJvdmFyZSB1biBmaWxlICd0ZW1wJyBzdSBjdWkgc2NyaXZlcmUiCisKKyM6IGZpbGVpby5jOjM2NzAKK21zZ2lkICJFMjEzOiBDYW5ub3QgY29udmVydCAoYWRkICEgdG8gd3JpdGUgd2l0aG91dCBjb252ZXJzaW9uKSIKK21zZ3N0ciAiIgorIkUyMTM6IE5vbiByaWVzY28gYSBjb252ZXJ0aXJlIChhZ2dpdW5naSAhIHBlciBzY3JpdmVyZSBzZW56YSBjb252ZXJzaW9uZSkiCisKKyM6IGZpbGVpby5jOjM3MDUKK21zZ2lkICJFMTY2OiBDYW4ndCBvcGVuIGxpbmtlZCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTY2OiBOb24gcG9zc28gYXByaXJlIGlsIGZpbGUgY29sbGVnYXRvICgnbGlua2VkJykgaW4gc2NyaXR0dXJhIgorCisjOiBmaWxlaW8uYzozNzA5Cittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiBOb24gcG9zc28gYXByaXJlIGlsIGZpbGUgaW4gc2NyaXR0dXJhIgorCisjOiBmaWxlaW8uYzozOTcxCittc2dpZCAiRTY2NzogRnN5bmMgZmFpbGVkIgorbXNnc3RyICJFNjY3OiBGc3luYyBmYWxsaXRvIgorCisjOiBmaWxlaW8uYzozOTc4Cittc2dpZCAiRTUxMjogQ2xvc2UgZmFpbGVkIgorbXNnc3RyICJFNTEyOiBDaGl1c3VyYSBmYWxsaXRhIgorCisjOiBmaWxlaW8uYzo0MDQ5Cittc2dpZCAiRTUxMzogd3JpdGUgZXJyb3IsIGNvbnZlcnNpb24gZmFpbGVkIgorbXNnc3RyICJFNTEzOiBlcnJvcmUgaW4gc2NyaXR0dXJhLCBjb252ZXJzaW9uZSBmYWxsaXRhIgorCisjOiBmaWxlaW8uYzo0MDU1Cittc2dpZCAiRTUxNDogd3JpdGUgZXJyb3IgKGZpbGUgc3lzdGVtIGZ1bGw/KSIKK21zZ3N0ciAiRTUxNDogZXJyb3JlIGluIHNjcml0dHVyYSAoJ0ZpbGUgU3lzdGVtJyBwaWVubz8pIgorCisjOiBmaWxlaW8uYzo0MTIyCittc2dpZCAiIENPTlZFUlNJT04gRVJST1IiCittc2dzdHIgIiBFUlJPUkUgREkgQ09OVkVSU0lPTkUiCisKKyM6IGZpbGVpby5jOjQxMzgKK21zZ2lkICJbRGV2aWNlXSIKK21zZ3N0ciAiW0Rpc3Bvc2l0aXZvXSIKKworIzogZmlsZWlvLmM6NDE0MworbXNnaWQgIltOZXddIgorbXNnc3RyICJbTnVvdm9dIgorCisjOiBmaWxlaW8uYzo0MTY1Cittc2dpZCAiIFthXSIKK21zZ3N0ciAiIFthXSIKKworIzogZmlsZWlvLmM6NDE2NQorbXNnaWQgIiBhcHBlbmRlZCIKK21zZ3N0ciAiIGFnZ2l1bnRvIGluIGZvbmRvIgorCisjOiBmaWxlaW8uYzo0MTY3Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiIFtzXSIKKworIzogZmlsZWlvLmM6NDE2NworbXNnaWQgIiB3cml0dGVuIgorbXNnc3RyICIgc2NyaXR0aSIKKworIzogZmlsZWlvLmM6NDIxNworbXNnaWQgIkUyMDU6IFBhdGNobW9kZTogY2FuJ3Qgc2F2ZSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA1OiBQYXRjaG1vZGU6IG5vbiBwb3NzbyBzYWx2YXJlIGlsIGZpbGUgb3JpZ2luYWxlIgorCisjOiBmaWxlaW8uYzo0MjM5Cittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBwYXRjaG1vZGU6IG5vbiBwb3NzbyBhbHRlcmFyZSBpbCBmaWxlIHZ1b3RvIG9yaWdpbmFsZSIKKworIzogZmlsZWlvLmM6NDI1NAorbXNnaWQgIkUyMDc6IENhbid0IGRlbGV0ZSBiYWNrdXAgZmlsZSIKK21zZ3N0ciAiRTE5MzogTm9uIHJpZXNjbyBhIGNhbmNlbGxhcmUgaWwgZmlsZSBkaSBiYWNrdXAiCisKKyM6IGZpbGVpby5jOjQzMTgKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBVFRFTlpJT05FOiBJbCBmaWxlIG9yaWdpbmFsZSBwdfIgZXNzZXJlIHBlcnNvIG8gZGFubmVnZ2lhdG9cbiIKKworIzogZmlsZWlvLmM6NDMyMAorbXNnaWQgImRvbid0IHF1aXQgdGhlIGVkaXRvciB1bnRpbCB0aGUgZmlsZSBpcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiEiCittc2dzdHIgIm5vbiB1c2NpcmUgZGFsbCdlZGl0b3IgcHJpbWEgZGVsbGEgZmluZSBkZWxsYSBzY3JpdHR1cmEgZGVsIGZpbGUhIgorCisjOiBmaWxlaW8uYzo0NDA5Cittc2dpZCAiW2Rvc10iCittc2dzdHIgIltET1NdIgorCisjOiBmaWxlaW8uYzo0NDA5Cittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbaW4gZm9ybWF0byBET1NdIgorCisjOiBmaWxlaW8uYzo0NDE2Cittc2dpZCAiW21hY10iCittc2dzdHIgIltNQUNdIgorCisjOiBmaWxlaW8uYzo0NDE2Cittc2dpZCAiW21hYyBmb3JtYXRdIgorbXNnc3RyICJbaW4gZm9ybWF0byBNQUNdIgorCisjOiBmaWxlaW8uYzo0NDIzCittc2dpZCAiW3VuaXhdIgorbXNnc3RyICJbVU5JWF0iCisKKyM6IGZpbGVpby5jOjQ0MjMKK21zZ2lkICJbdW5peCBmb3JtYXRdIgorbXNnc3RyICJbaW4gZm9ybWF0byBVTklYXSIKKworIzogZmlsZWlvLmM6NDQ1MAorbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxIGxpbmVhLCAiCisKKyM6IGZpbGVpby5jOjQ0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzLCAiCittc2dzdHIgIiVsZCBsaW5lZSwiCisKKyM6IGZpbGVpby5jOjQ0NTUKK21zZ2lkICIxIGNoYXJhY3RlciIKK21zZ3N0ciAiMSBjYXJhdHRlcmUiCisKKyM6IGZpbGVpby5jOjQ0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYXJhY3RlcnMiCittc2dzdHIgIiVsZCBjYXJhdHRlcmkiCisKKyM6IGZpbGVpby5jOjQ0NjcKK21zZ2lkICJbbm9lb2xdIgorbXNnc3RyICJbbWFuY2EgY2FyYXR0ZXJlIGRpIGZpbmUgbGluZWFdIgorCisjOiBmaWxlaW8uYzo0NDY3Cittc2dpZCAiW0luY29tcGxldGUgbGFzdCBsaW5lXSIKK21zZ3N0ciAiW1VsdGltYSBsaW5lYSBpbmNvbXBsZXRhXSIKKworIy4gZG9uJ3Qgb3ZlcndyaXRlIG1lc3NhZ2VzIGhlcmUKKyMuIG11c3QgZ2l2ZSB0aGlzIHByb21wdAorIy4gZG9uJ3QgdXNlIGVtc2coKSBoZXJlLCBkb24ndCB3YW50IHRvIGZsdXNoIHRoZSBidWZmZXJzCisjOiBmaWxlaW8uYzo0NDg2Cittc2dpZCAiV0FSTklORzogVGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSByZWFkaW5nIGl0ISEhIgorbXNnc3RyICJBVFRFTlpJT05FOiBGaWxlIG1vZGlmaWNhdG8gZG9wbyBlc3NlcmUgc3RhdG8gbGV0dG8gZGFsbCdFZGl0b3IhISEiCisKKyM6IGZpbGVpby5jOjQ0ODgKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQiCittc2dzdHIgIlZ1b2kgZGF2dmVybyByaXNjcml2ZXJsbyIKKworIzogZmlsZWlvLmM6NTczOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogRXJyb3JlIGluIHNjcml0dHVyYSBkaSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwOTogRXJyb3IgY2xvc2luZyBcIiVzXCIiCittc2dzdHIgIkUyMDk6IEVycm9yZSBpbiBjaGl1c3VyYSBkaSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMDogRXJyb3IgcmVhZGluZyBcIiVzXCIiCittc2dzdHIgIkUyMTA6IEVycm9yZSBpbiBsZXR0dXJhIGRpIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTk4MgorbXNnaWQgIkUyNDY6IEZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQgZGVsZXRlZCBidWZmZXIiCittc2dzdHIgIkUyNDY6IEwnYXV0b2NvbWFuZG8gJ0ZpbGVDaG5hZ2VkU2hlbGwnIGhhIGNhbmNlbGxhdG8gaWwgYnVmZmVyIgorCisjOiBmaWxlaW8uYzo1OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIG5vIGxvbmdlciBhdmFpbGFibGUiCittc2dzdHIgIkUyMTE6IEF0dGVuemlvbmU6IElsIGZpbGUgXCIlc1wiIG5vbiBlc2lzdGUgcGn5IgorCisjOiBmaWxlaW8uYzo2MDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiIgorIlcxMjogQXR0ZW56aW9uZTogRmlsZSBcIiVzXCIgbW9kaWZpY2F0byBzdSBkaXNjbyBlZCBhbmNoZSBuZWwgYnVmZmVyIGRpIFZpbSIKKworIzogZmlsZWlvLmM6NjAwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzExOiBBdHRlbnppb25lOiBGaWxlIFwiJXNcIiBtb2RpZmljYXRvIGRvcG8gbCdhcGVydHVyYSIKKworIzogZmlsZWlvLmM6NjAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTY6IEF0dGVuemlvbmU6IE1vZG8gRmlsZSBcIiVzXCIgbW9kaWZpY2F0byBkb3BvIGwnYXBlcnR1cmEiCisKKyM6IGZpbGVpby5jOjYwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzEzOiBBdHRlbnppb25lOiBJbCBmaWxlIFwiJXNcIiByaXN1bHRhIGNyZWF0byBkb3BvIGwnYXBlcnR1cmEiCisKKyM6IGZpbGVpby5jOjYwMzEKK21zZ2lkICJTZWUgXCI6aGVscCBXMTFcIiBmb3IgbW9yZSBpbmZvLiIKK21zZ3N0ciAiVmVkZXJlIFwiOmhlbHAgVzExXCIgcGVyIHVsdGVyaW9yaSBpbmZvcm1hemlvbmkuIgorCisjOiBmaWxlaW8uYzo2MDQ1Cittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAiQXR0ZW56aW9uZSIKKworIzogZmlsZWlvLmM6NjA0NgorbXNnaWQgIiIKKyImT0tcbiIKKyImTG9hZCBGaWxlIgorbXNnc3RyICIiCisiJk9LXG4iCisiJkNhcmljYSBGaWxlIgorCisjOiBmaWxlaW8uYzo2MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjI6IENvdWxkIG5vdCBwcmVwYXJlIGZvciByZWxvYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFNDYyOiBOb24gcmllc2NvIGEgcHJlcGFyYXJlIHBlciByaS1jYXJpY2FyZSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjYxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IE5vbiByaWVzY28gYSByaS1jYXJpY2FyZSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjY3NTIKK21zZ2lkICItLURlbGV0ZWQtLSIKK21zZ3N0ciAiLS1DYW5jZWxsYXRvLS0iCisKKyMuIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0CisjOiBmaWxlaW8uYzo2OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjc6IE5vIHN1Y2ggZ3JvdXA6IFwiJXNcIiIKK21zZ3N0ciAiRTM2NzogR3J1cHBvIGluZXNpc3RlbnRlOiBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjcwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgKjogJXMiCittc2dzdHIgIkUyMTU6IENhcmF0dGVyZSBub24gYW1tZXNzbyBkb3BvICo6ICVzIgorCisjOiBmaWxlaW8uYzo3MDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiBFdmVudG8gaW5lc2lzdGVudGU6ICVzIgorCisjOiBmaWxlaW8uYzo3MDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZ3JvdXAgb3IgZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiBFdmVudG8gbyBncnVwcG8gaW5lc2lzdGVudGU6ICVzIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IGZpbGVpby5jOjcyMTAKK21zZ2lkICIiCisiXG4iCisiLS0tIEF1dG8tQ29tbWFuZHMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEF1dG8tQ29tYW5kaSAtLS0iCisKKyM6IGZpbGVpby5jOjc0ODEKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiRTIxNzogTm9uIHBvc3NvIGVzZWd1aXJlIGF1dG9jb21hbmRpIGZvciBUVVRUSSBnbGkgZXZlbnRpIgorCisjOiBmaWxlaW8uYzo3NTA0Cittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICJOZXNzdW4gYXV0b2NvbWFuZG8gY29ycmlzcG9uZGVudGUiCisKKyM6IGZpbGVpby5jOjc4MjUKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiBuaWRpZmljYXppb25lIGRlbGwnYXV0b2NvbWFuZG8gdHJvcHBvIGVzdGVzYSIKKworIzogZmlsZWlvLmM6ODEwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBBdXRvIGNvbW1hbmRzIGZvciBcIiVzXCIiCittc2dzdHIgIiVzIEF1dG8gY29tYW5kaSBwZXIgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo4MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAiRXNlZ3VvICVzIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGZpbGVpby5jOjgxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXV0b2NvbW1hbmQgJXMiCittc2dzdHIgImF1dG9jb21hbmRvICVzIgorCisjOiBmaWxlaW8uYzo4NzQzCittc2dpZCAiRTIxOTogTWlzc2luZyB7LiIKK21zZ3N0ciAiRTIxOTogTWFuY2Egey4iCisKKyM6IGZpbGVpby5jOjg3NDUKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiBNYW5jYSB9LiIKKworIzogZm9sZC5jOjY4Cittc2dpZCAiRTQ5MDogTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAiRTQ5MDogTm9uIHRyb3ZvIGFsY3VuYSBwaWVnYXR1cmEiCisKKyM6IGZvbGQuYzo1OTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogTm9uIHBvc3NvIGNyZWF0ZSBwaWVnYXR1cmEgY29uIGlsICdmb2xkbWV0aG9kJyBpbiB1c28iCisKKyM6IGZvbGQuYzo1OTUKK21zZ2lkICJFMzUxOiBDYW5ub3QgZGVsZXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MTogTm9uIHBvc3NvIGNhbmNlbGxhcmUgcGllZ2F0dXJhIGNvbiBpbCAnZm9sZG1ldGhvZCcgaW4gdXNvIgorCisjOiBnZXRjaGFyLmM6MjQ4Cittc2dpZCAiRTIyMjogQWRkIHRvIHJlYWQgYnVmZmVyIgorbXNnc3RyICJFMjIyOiBBZ2dpdW50byBhbCBidWZmZXIgZGkgbGV0dHVyYSIKKworIzogZ2V0Y2hhci5jOjIyMDgKK21zZ2lkICJFMjIzOiByZWN1cnNpdmUgbWFwcGluZyIKK21zZ3N0ciAiRTIyMzogbWFwcGluZyByaWNvcnNpdm8iCisKKyM6IGdldGNoYXIuYzozMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjQ6IGdsb2JhbCBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI0OiB1bmEgYWJicmV2aWF6aW9uZSBnbG9iYWxlIGdp4CBlc2lzdGUgcGVyICVzIgorCisjOiBnZXRjaGFyLmM6MzA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI1OiBnbG9iYWwgbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjU6IHVuIG1hcHBpbmcgZ2xvYmFsZSBnaeAgZXNpc3RlIHBlciAlcyIKKworIzogZ2V0Y2hhci5jOjMyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogdW5hIGFiYnJldmlhemlvbmUgZ2ngIGVzaXN0ZSBwZXIgJXMiCisKKyM6IGdldGNoYXIuYzozMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI3OiB1biBtYXBwaW5nIGdp4CBlc2lzdGUgcGVyICVzIgorCisjOiBnZXRjaGFyLmM6MzI4OQorbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAiTm9uIHRyb3ZvIGwnYWJicmV2aWF6aW9uZSIKKworIzogZ2V0Y2hhci5jOjMyOTEKK21zZ2lkICJObyBtYXBwaW5nIGZvdW5kIgorbXNnc3RyICJOb24gdHJvdm8gaWwgbWFwcGluZyIKKworIzogZ2V0Y2hhci5jOjQxODMKK21zZ2lkICJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkUyMjg6IG1ha2VtYXA6IG1vZG8gbm9uIGNvbnNlbnRpdG8iCisKKyM6IGd1aV9hdF9mcy5jOjMwMAorbXNnaWQgIjxjYW5ub3Qgb3Blbj4gIgorbXNnc3RyICI8bm9uIHBvc3NvIGFwcmlyZT4gIgorCisjOiBndWlfYXRfZnMuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAiRTYxNjogdmltX1NlbEZpbGU6IG5vbiByaWVzY28gYSB0cm92YXJlIGlsIGZvbnQgJXMiCisKKyM6IGd1aV9hdF9mcy5jOjI3ODEKK21zZ2lkICJFNjE0OiB2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJFNjE0OiB2aW1fU2VsRmlsZTogbm9uIHBvc3NvIHRvcm5hcmUgYWxsYSBkaXJlY3RvcnkgaW4gdXNvIgorCisjOiBndWlfYXRfZnMuYzoyODAxCittc2dpZCAiUGF0aG5hbWU6IgorbXNnc3RyICJOb21lIHBlcmNvcnNvOiIKKworIzogZ3VpX2F0X2ZzLmM6MjgwNworbXNnaWQgIkU2MTU6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgIkU2MTU6IHZpbV9TZWxGaWxlOiBub24gcmllc2NvIGFkIG90dGVuZXJlIGxhIGRpcmVjdG9yeSBpbiB1c28iCisKKyM6IGd1aV9hdF9mcy5jOjI4MTUgZ3VpX21vdGlmLmM6MTYyMworbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfZ3RrLmM6MjczMSBndWlfbW90aWYuYzoxNjE4IGd1aV9tb3RpZi5jOjI4NDkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIk5vbiBlc2VndWlyZSIKKworIzogZ3VpX2F0aGVuYS5jOjIwNDcgZ3VpX21vdGlmLmM6MTg3MQorbXNnaWQgIlZpbSBkaWFsb2ciCittc2dzdHIgIkRpYWxvZ28gVmltIgorCisjOiBndWlfYXRfc2IuYzo0ODYKK21zZ2lkICJTY3JvbGxiYXIgV2lkZ2V0OiBDb3VsZCBub3QgZ2V0IGdlb21ldHJ5IG9mIHRodW1iIHBpeG1hcC4iCittc2dzdHIgIlNjcm9sbGJhciBXaWRnZXQ6IE5vbiByaWVzY28gYSBvdHRlbmVyZSBnZW9tZXRyaWEgZGVsICd0aHVtYiBwaXhtYXAnLiIKKworIzogZ3VpX2JldmFsLmM6MTAxIGd1aV93MzIuYzozOTc4Cittc2dpZCAiRTIzMjogQ2Fubm90IGNyZWF0ZSBCYWxsb29uRXZhbCB3aXRoIGJvdGggbWVzc2FnZSBhbmQgY2FsbGJhY2siCittc2dzdHIgIkUyMzI6IE5vbiByaWVzY28gYSBjcmVhcmUgJ0JhbGxvb25FdmFsJyBjb24gc2lhIG1lc3NhZ2dpbyBjaGUgY2FsbGJhY2siCisKKyM6IGd1aS5jOjIyMAorbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiBOb24gcG9zc28gaW5pemlhbGl6emFyZSBsYSBHVUkiCisKKyM6IGd1aS5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogTm9uIHBvc3NvIGxlZ2dlcmUgZGEgXCIlc1wiIgorCisjOiBndWkuYzo0NzIKK21zZ2lkICJFNjY1OiBDYW5ub3Qgc3RhcnQgR1VJLCBubyB2YWxpZCBmb250IGZvdW5kIgorbXNnc3RyICJFNjY1OiBOb24gcG9zc28gaW5pemlhbGl6emFyZSBsYSBHVUksIG5lc3N1biBmb250IHZhbGlkbyB0cm92YXRvIgorCisjOiBndWkuYzo0NzcKK21zZ2lkICJFMjMxOiAnZ3VpZm9udHdpZGUnIGludmFsaWQiCittc2dzdHIgIkUyMzE6ICdndWlmb250d2lkZScgbm9uIHZhbGlkbyIKKworIzogZ3VpLmM6NTQ3Cittc2dpZCAiRTU5OTogVmFsdWUgb2YgJ2ltYWN0aXZhdGVrZXknIGlzIGludmFsaWQiCittc2dzdHIgIkU1OTk6IElsIHZhbG9yZSBkaSAnaW1hY3RpdmF0ZWtleScgbm9uIOggdmFsaWRvIgorCisjOiBndWkuYzo0MDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTQ6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciAlcyIKK21zZ3N0ciAiRTI1NDogTm9uIHJpZXNjbyBhZCBhbGxvY2FyZSBpbCBjb2xvcmUgJXMiCisKKyM6IGd1aV9ndGsuYzoxNjA3Cittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiRGlhbG9nbyBWaW0uLi4iCisKKyM6IGd1aV9ndGsuYzoyMDYwIG1lc3NhZ2UuYzoyOTk5Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJlkgU+xcbiIKKyImTm9cbiIKKyImQyBJZ25vcmEiCisKKyM6IGd1aV9ndGsuYzoyMjY4Cittc2dpZCAiSW5wdXQgX01ldGhvZHMiCittc2dzdHIgIl9NZXRvZGkgZGkgaW5zZXJpbWVudG8iCisKKyM6IGd1aV9ndGsuYzoyNTM0IGd1aV9tb3RpZi5jOjI3NjgKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIlZJTSAtIFNvc3RpdHVpc2NpLi4uIgorCisjOiBndWlfZ3RrLmM6MjU0MiBndWlfbW90aWYuYzoyNzcwCittc2dpZCAiVklNIC0gU2VhcmNoLi4uIgorbXNnc3RyICJWSU0gLSBDZXJjYS4uLiIKKworIzogZ3VpX2d0ay5jOjI1NzQgZ3VpX21vdGlmLmM6Mjg4OAorbXNnaWQgIkZpbmQgd2hhdDoiCittc2dzdHIgIlRyb3ZhIGNvc2E6IgorCisjOiBndWlfZ3RrLmM6MjU5MiBndWlfbW90aWYuYzoyOTIwCittc2dpZCAiUmVwbGFjZSB3aXRoOiIKK21zZ3N0ciAiU29zdGl0dWlzY2kgY29uOiIKKworIy4gd2hvbGUgd29yZCBvbmx5IGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI2MjQgZ3VpX21vdGlmLmM6MzAzNgorbXNnaWQgIk1hdGNoIHdob2xlIHdvcmQgb25seSIKK21zZ3N0ciAiQ2VyY2Egc29sbyBsYSBwYXJvbGEgaW50ZXJhIgorCisjLiBtYXRjaCBjYXNlIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI2MzUgZ3VpX21vdGlmLmM6MzA0OAorbXNnaWQgIk1hdGNoIGNhc2UiCittc2dzdHIgIk1haXVzY29sZS9taW51c2NvbGUiCisKKyM6IGd1aV9ndGsuYzoyNjQ1IGd1aV9tb3RpZi5jOjI5OTAKK21zZ2lkICJEaXJlY3Rpb24iCittc2dzdHIgIkRpcmV6aW9uZSIKKworIy4gJ1VwJyBhbmQgJ0Rvd24nIGJ1dHRvbnMKKyM6IGd1aV9ndGsuYzoyNjU3IGd1aV9tb3RpZi5jOjMwMDIKK21zZ2lkICJVcCIKK21zZ3N0ciAiU3UiCisKKyM6IGd1aV9ndGsuYzoyNjYxIGd1aV9tb3RpZi5jOjMwMTAKK21zZ2lkICJEb3duIgorbXNnc3RyICJHafkiCisKKyM6IGd1aV9ndGsuYzoyNjgzIGd1aV9ndGsuYzoyNjg1IGd1aV9tb3RpZi5jOjI3OTIKK21zZ2lkICJGaW5kIE5leHQiCittc2dzdHIgIlRyb3ZhIGlsIFByb3NzaW1vIgorCisjOiBndWlfZ3RrLmM6MjcwMiBndWlfZ3RrLmM6MjcwNCBndWlfbW90aWYuYzoyODA5Cittc2dpZCAiUmVwbGFjZSIKK21zZ3N0ciAiU29zdGl0dWlzY2kiCisKKyM6IGd1aV9ndGsuYzoyNzE1IGd1aV9ndGsuYzoyNzE3IGd1aV9tb3RpZi5jOjI4MjIKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAiU29zdGl0dWlzY2kgVHV0dG8iCisKKyM6IGd1aV9ndGtfeDExLmM6MjMyNworbXNnaWQgIlZpbTogUmVjZWl2ZWQgXCJkaWVcIiByZXF1ZXN0IGZyb20gc2Vzc2lvbiBtYW5hZ2VyXG4iCittc2dzdHIgIlZpbTogUmljZXZ1dGEgcmljaGllc3RhIFwiZGllXCIgZGFsIHNlc3Npb24gbWFuYWdlclxuIgorCisjOiBndWlfZ3RrX3gxMS5jOjM1MTkKK21zZ2lkICJWaW06IE1haW4gd2luZG93IHVuZXhwZWN0ZWRseSBkZXN0cm95ZWRcbiIKK21zZ3N0ciAiVmltOiBGaW5lc3RyYSBwcmluY2lwYWxlIGRpc3RydXR0YSBpbmFzcGV0dGF0YW1lbnRlXG4iCisKKyM6IGd1aV9ndGtfeDExLmM6NDEzOAorbXNnaWQgIkZvbnQgU2VsZWN0aW9uIgorbXNnc3RyICJTZWxlemlvbmUgRm9udCIKKworIzogZ3VpX2d0a194MTEuYzo2MDM1IHVpLmM6MjEyMAorbXNnaWQgIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iCittc2dzdHIgIlVzbyBDVVRfQlVGRkVSMCBpbnZlY2UgY2hlIHVuYSBzY2VsdGEgbnVsbGEiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTcgZ3VpX21vdGlmLmM6MTYyMAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJvIgorCisjOiBndWlfbW90aWYuYzoxNjE5Cittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIkRpcmVjdG9yeSIKKworIzogZ3VpX21vdGlmLmM6MTYyMQorbXNnaWQgIkhlbHAiCittc2dzdHIgIkFpdXRvIgorCisjOiBndWlfbW90aWYuYzoxNjIyCittc2dpZCAiRmlsZXMiCittc2dzdHIgIkZpbGUiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjQKK21zZ2lkICJTZWxlY3Rpb24iCittc2dzdHIgIlNlbGV6aW9uZSIKKworIzogZ3VpX21vdGlmLmM6MjgzNQorbXNnaWQgIlVuZG8iCittc2dzdHIgIkRpc2ZhIgorCisjOiBndWlfcmlzY29zLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTA6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTYxMDogTm9uIHJpZXNjbyBhIGNhcmljYXRlIGlsIGZvbnRlIFphcCAnJXMnIgorCisjOiBndWlfcmlzY29zLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjExOiBDYW4ndCB1c2UgZm9udCAlcyIKK21zZ3N0ciAiRTYxMTogTm9uIHJpZXNjbyBhIHVzYXJlIGlsIGZvbnQgJXMiCisKKyM6IGd1aV9yaXNjb3MuYzozMjcwCittc2dpZCAiIgorIlxuIgorIlNlbmRpbmcgbWVzc2FnZSB0byB0ZXJtaW5hdGUgY2hpbGQgcHJvY2Vzcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNwZWRpc2NvIHVuIG1lc3NhZ2dpbyBwZXIgdGVybWluYXJlIGlsIHByb2Nlc3NvIGZpZ2xpby5cbiIKKworIzogZ3VpX3czMi5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjcxOiBDYW5ub3QgZmluZCB3aW5kb3cgdGl0bGUgXCIlc1wiIgorbXNnc3RyICJFNjcxOiBOb24gdHJvdm8gaWwgdGl0b2xvIGRlbGxhIGZpbmVzdHJhIFwiJXNcIiIKKworIzogZ3VpX3czMi5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiRTI0MzogQXJnb21lbnRvIG5vbiBzdXBwb3J0YXRvOiBcIi0lc1wiOyBVc2EgbGEgdmVyc2lvbmUgT0xFLiIKKworIzogZ3VpX3czMi5jOjExMDAKK21zZ2lkICJFNjcyOiBVbmFibGUgdG8gb3BlbiB3aW5kb3cgaW5zaWRlIE1ESSBhcHBsaWNhdGlvbiIKK21zZ3N0ciAiRTY3MjogTm9uIHBvc3NvIGFwcmlyZSBsYSBmaW5lc3RyYSBpbiB1bidhcHBsaWNhemlvbmUgTURJIgorCisjOiBndWlfdzQ4LmM6MjE2MworbXNnaWQgIkZpbmQgc3RyaW5nICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIlN0cmluZ2EgZGkgcmljZXJjYSAodXNhICdcXFxcJyBwZXIgY2VyY2FyZSAgdW4gJ1xcJykiCisKKyM6IGd1aV93NDguYzoyMTg4Cittc2dpZCAiRmluZCAmIFJlcGxhY2UgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAiU29zdGl0dWlzY2kgKHVzYSAnXFxcXCcgcGVyIGNlcmNhcmUgIHVuICdcXCcpIgorCisjOiBndWlfeDExLmM6MTUzNworbXNnaWQgIlZpbSBFNDU4OiBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnksIHNvbWUgY29sb3JzIG1heSBiZSBpbmNvcnJlY3QiCittc2dzdHIgIiIKKyJWaW0gRTQ1ODogTm9uIHJpZXNjbyBhZCBhbGxvY2FyZSBlbGVtZW50byBkaSBjb2xvcm1hcCwgcG9zc2liaWxpIGNvbG9yaSAiCisiZXJyYXRpIgorCisjOiBndWlfeDExLmM6MjExOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUwOiBGb250cyBmb3IgdGhlIGZvbGxvd2luZyBjaGFyc2V0cyBhcmUgbWlzc2luZyBpbiBmb250c2V0ICVzOiIKK21zZ3N0ciAiRTI1MDogTWFuY2FubyBkZXNjcml6aW9uaSBwZXIgaSBzZWd1ZW50aSBjYXJhdHRlcmkgbmVsIGZvbnQ6ICVzIgorCisjOiBndWlfeDExLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUyOiBGb250c2V0IG5hbWU6ICVzIgorbXNnc3RyICJFMjUyOiBOb21lIGZvbnRzZXQ6ICVzIgorCisjOiBndWlfeDExLmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJJbCBmb250ICclcycgbm9uIGRpIGxhcmdoZXp6YSBmaXNzYSIKKworIzogZ3VpX3gxMS5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MzogRm9udHNldCBuYW1lOiAlc1xuIgorbXNnc3RyICJFMjUzOiBOb21lIGZvbnRzZXQ6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwOiAlc1xuIgorbXNnc3RyICJGb250MDogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDE6ICVzXG4iCittc2dzdHIgIkZvbnQxOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250JWxkIHdpZHRoIGlzIG5vdCB0d2ljZSB0aGF0IG9mIGZvbnQwXG4iCittc2dzdHIgIkxhIGxhcmdoZXp6YSBkaSBmb250JWxkIG5vbiDoIGRvcHBpYSBkaSBxdWVsbGEgZGkgZm9udDBcbiIKKworIzogZ3VpX3gxMS5jOjIxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDAgd2lkdGg6ICVsZFxuIgorbXNnc3RyICJMYXJnaGV6emEgZGkgRm9udDA6ICVsZFxuIgorCisjOiBndWlfeDExLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9udDEgd2lkdGg6ICVsZFxuIgorIlxuIgorbXNnc3RyICIiCisiTGFyZ2hlenphIGRpIEZvbnQxOiAlbGRcbiIKKyJcbiIKKworIzogaGFuZ3VsaW4uYzo2MTAKK21zZ2lkICJFMjU2OiBIYW5ndWwgYXV0b21hdGEgRVJST1IiCittc2dzdHIgIkUyNTY6IEVSUk9SRSBwcm9jZXNzb3JlIEhhbmd1bCIKKworIzogaWZfY3Njb3BlLmM6NzcKK21zZ2lkICJBZGQgYSBuZXcgZGF0YWJhc2UiCittc2dzdHIgIkFnZ2l1bmdpIHVuIG51b3ZvIGRhdGFiYXNlIgorCisjOiBpZl9jc2NvcGUuYzo3OQorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIkNlcmNhIHVuIG1vZGVsbG8iCisKKyM6IGlmX2NzY29wZS5jOjgxCittc2dpZCAiU2hvdyB0aGlzIG1lc3NhZ2UiCittc2dzdHIgIlZpc3VhbGl6emEgcXVlc3RvIG1lc3NhZ2dpbyIKKworIzogaWZfY3Njb3BlLmM6ODMKK21zZ2lkICJLaWxsIGEgY29ubmVjdGlvbiIKK21zZ3N0ciAiVGVybWluYSB1bmEgY29ubmVzc2lvbmUiCisKKyM6IGlmX2NzY29wZS5jOjg1Cittc2dpZCAiUmVpbml0IGFsbCBjb25uZWN0aW9ucyIKK21zZ3N0ciAiUmluaXppYWxpenphIHR1dHRlIGxlIGNvbm5lc3Npb25pIgorCisjOiBpZl9jc2NvcGUuYzo4NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIlZpc3VhbGl6emEgY29ubmVzc2lvbmkiCisKKyM6IGlmX2NzY29wZS5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjA6IFVzYWdlOiBjc1tjb3BlXSAlcyIKK21zZ3N0ciAiRTU2MDogVXNvOiBjc1tjb3BlXSAlcyIKKworIzogaWZfY3Njb3BlLmM6MTI0Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICJRdWVzdG8gY29tYW5kbyBjc2NvcGUgbm9uIGdlc3Rpc2NlIGxhIGRpdmlzaW9uZSBkZWxsZSBzY2hlcm1vLlxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzUKK21zZ2lkICJFNTYyOiBVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiRTU2MjogVXNvOiBjc3RhZyA8aWRlbnQ+IgorCisjOiBpZl9jc2NvcGUuYzoyMzEKK21zZ2lkICJFMjU3OiBjc3RhZzogdGFnIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI1NzogY3N0YWc6IHRhZyBub24gdHJvdmF0YSIKKworIzogaWZfY3Njb3BlLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjM6IHN0YXQoJXMpIGVycm9yOiAlZCIKK21zZ3N0ciAiRTU2MzogZXJyb3JlIHN0YXQoJXMpOiAlZCIKKworIzogaWZfY3Njb3BlLmM6NDE5Cittc2dpZCAiRTU2Mzogc3RhdCBlcnJvciIKK21zZ3N0ciAiRTU2MzogZXJyb3JlIHN0YXQiCisKKyM6IGlmX2NzY29wZS5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY0OiAlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIkU1NjQ6ICVzIG5vbiDoIHVuYSBkaXJlY3RvcnkgbyB1biBkYXRhYmFzZSBjc2NvcGUgdmFsaWRvIgorCisjOiBpZl9jc2NvcGUuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICJBZ2dpdW50byBkYXRhYmFzZSBjc2NvcGUgJXMiCisKKyM6IGlmX2NzY29wZS5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVsZCIKK21zZ3N0ciAiRTI2MjogZXJyb3JlIGxlZ2dlbmRvIGNvbm5lc3Npb25lIGNzY29wZSAlbGQiCisKKyM6IGlmX2NzY29wZS5jOjY5NAorbXNnaWQgIkU1NjE6IHVua25vd24gY3Njb3BlIHNlYXJjaCB0eXBlIgorbXNnc3RyICJFNTYxOiB0aXBvIGRpIHJpY2VyY2EgY3Njb3BlIHNjb25vc2NpdXRhIgorCisjOiBpZl9jc2NvcGUuYzo3MzYKK21zZ2lkICJFNTY2OiBDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiRTU2NjogTm9uIHJpZXNjbyBhIGNyZWFyZSBwaXBlcyBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjc1MworbXNnaWQgIkU2MjI6IENvdWxkIG5vdCBmb3JrIGZvciBjc2NvcGUiCittc2dzdHIgIkU2MjI6IE5vbiByaWVzY28gYSBmYXJlIGZvcmsgcGVyIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6ODQ3IGlmX2NzY29wZS5jOjg5NworbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uIGV4ZWMgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhbGxpdGEiCisKKyM6IGlmX2NzY29wZS5jOjg5OAorbXNnaWQgIkU2MjM6IENvdWxkIG5vdCBzcGF3biBjc2NvcGUgcHJvY2VzcyIKK21zZ3N0ciAiRTYyMzogTm9uIHJpZXNjbyBhIGdlbmVyYXJlIHByb2Nlc3NvIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6OTExCittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGRpIHRvX2ZwIGZhbGxpdGEiCisKKyM6IGlmX2NzY29wZS5jOjkxMworbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIGZyX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBkaSBmcl9mcCBmYWxsaXRhIgorCisjOiBpZl9jc2NvcGUuYzo5NTEKK21zZ2lkICJFNTY3OiBubyBjc2NvcGUgY29ubmVjdGlvbnMiCittc2dzdHIgIkU1Njc6IG5lc3N1bmEgY29ubmVzc2lvbmUgY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTk6IG5vIG1hdGNoZXMgZm91bmQgZm9yIGNzY29wZSBxdWVyeSAlcyBvZiAlcyIKK21zZ3N0ciAiRTI1OTogbmVzc3VuYSBjb3JyaXNwb25kZW56YSB0cm92YXRhIHBlciBsYSByaWNoaWVzdGEgY3Njb3BlICVzIGRpICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Njk6IGludmFsaWQgY3Njb3BlcXVpY2tmaXggZmxhZyAlYyBmb3IgJWMiCittc2dzdHIgIkU0Njk6IGZsYWcgY3Njb3BlcXVpY2tmaXggJWMgbm9uIHZhbGlkbyBwZXIgJWMiCisKKyM6IGlmX2NzY29wZS5jOjExNTIKK21zZ2lkICJjc2NvcGUgY29tbWFuZHM6XG4iCittc2dzdHIgImNvbWFuZGkgY3Njb3BlOlxuIgorCisjOiBpZl9jc2NvcGUuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtNXM6ICUtMzBzIChVc2FnZTogJXMpIgorbXNnc3RyICIlLTVzOiAlLTMwcyAoVXNvOiAlcykiCisKKyM6IGlmX2NzY29wZS5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyNTogY2Fubm90IG9wZW4gY3Njb3BlIGRhdGFiYXNlOiAlcyIKK21zZ3N0ciAiRTYyNTogaW1wb3NzaWJpbGUgYXByaXJlIGRhdGFiYXNlIGNzY29wZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNzEKK21zZ2lkICJFNjI2OiBjYW5ub3QgZ2V0IGNzY29wZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRTYyNjogaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbmZvcm1hemlvbmkgc3VsIGRhdGFiYXNlIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MTI5NgorbXNnaWQgIkU1Njg6IGR1cGxpY2F0ZSBjc2NvcGUgZGF0YWJhc2Ugbm90IGFkZGVkIgorbXNnc3RyICJFNTY4OiBkYXRhYmFzZSBjc2NvcGUgZHVwbGljYXRvLCBub24gYWdnaXVudG8iCisKKyM6IGlmX2NzY29wZS5jOjEzMDcKK21zZ2lkICJFNTY5OiBtYXhpbXVtIG51bWJlciBvZiBjc2NvcGUgY29ubmVjdGlvbnMgcmVhY2hlZCIKK21zZ3N0ciAiRTU2OTogcmFnZ2l1bnRvIG51bWVybyBtYXNzaW1vIGRpIGNvbm5lc3Npb25pIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MTQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYxOiBjc2NvcGUgY29ubmVjdGlvbiAlcyBub3QgZm91bmQiCittc2dzdHIgIkUyNjE6IGNvbm5lc3Npb25lIGNzY29wZSAlcyBub24gdHJvdmF0YSIKKworIzogaWZfY3Njb3BlLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWQiCittc2dzdHIgImNvbm5lc3Npb25lIGNzY29wZSAlcyBjaGl1c2EiCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTU5OAorbXNnaWQgIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJFNTcwOiBlcnJvcmUgaXJyZXBhcmFiaWxlIGluIGNzX21hbmFnZV9tYXRjaGVzIgorCisjOiBpZl9jc2NvcGUuYzoxODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzIgorbXNnc3RyICJUYWcgY3Njb3BlOiAlcyIKKworIzogaWZfY3Njb3BlLmM6MTg3MAorbXNnaWQgIiIKKyJcbiIKKyIgICAjICAgbGluZSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICMgICBsaW5lYSIKKworIzogaWZfY3Njb3BlLmM6MTg3MgorbXNnaWQgImZpbGVuYW1lIC8gY29udGV4dCAvIGxpbmVcbiIKK21zZ3N0ciAibm9tZWZpbGUgLyBjb250ZXN0IC8gbGluZWFcbiIKKworIzogaWZfY3Njb3BlLmM6MTk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA5OiBDc2NvcGUgZXJyb3I6ICVzIgorbXNnc3RyICJFNjA5OiBFcnJvcmUgY3Njb3BlOiAlcyIKKworIzogaWZfY3Njb3BlLmM6MjE3NgorbXNnaWQgIkFsbCBjc2NvcGUgZGF0YWJhc2VzIHJlc2V0IgorbXNnc3RyICJUdXR0aSBpIGRhdGFiZXNlIGNzY29wZSBhbm51bGxhdGkiCisKKyM6IGlmX2NzY29wZS5jOjIyNDQKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAibmVzc3VuYSBjb25uZXNzaW9uZSBjc2NvcGVcbiIKKworIzogaWZfY3Njb3BlLmM6MjI0OAorbXNnaWQgIiAjIHBpZCAgICBkYXRhYmFzZSBuYW1lICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kIHBhdGhcbiIKK21zZ3N0ciAiICMgcGlkICAgIGRhdGFiYXNlIG5vbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorCisjOiBpZl9weXRob24uYzo0MzYKK21zZ2lkICIiCisiRTI2MzogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFB5dGhvbiBsaWJyYXJ5IGNvdWxkIG5vdCBiZSAiCisibG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjM6IFNwaWFjZW50ZSwgY29tYW5kbyBub24gZGlzcG9uaWJpbGUsIG5vbiByaWVzY28gYSBjYXJpY2FyZSBsaWJyZXJpYSAiCisicHJvZ3JhbW1pIFB5dGhvbi4iCisKKyM6IGlmX3B5dGhvbi5jOjUwMAorbXNnaWQgIkU2NTk6IENhbm5vdCBpbnZva2UgUHl0aG9uIHJlY3Vyc2l2ZWx5IgorbXNnc3RyICJFNjU5OiBQeXRob24gbm9uIHB18iBlc3NlcmUgY2hpYW1hdG8gcmljb3JzaXZhbWVudGUiCisKKyM6IGlmX3B5dGhvbi5jOjcwMQorbXNnaWQgImNhbid0IGRlbGV0ZSBPdXRwdXRPYmplY3QgYXR0cmlidXRlcyIKK21zZ3N0ciAibm9uIHJpZXNjbyBhIGNhbmNlbGxhcmUgZ2xpIGF0dHJpYnV0aSBPdXRwdXRPYmplY3QiCisKKyM6IGlmX3B5dGhvbi5jOjcwOAorbXNnaWQgInNvZnRzcGFjZSBtdXN0IGJlIGFuIGludGVnZXIiCittc2dzdHIgInNvZnRzcGFjZSBkZXZlIGVzc2VyZSB1biBudW1lcm8gaW50ZXJvIgorCisjOiBpZl9weXRob24uYzo3MTYKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXRycmlidXRvIG5vbiB2YWxpZG8iCisKKyM6IGlmX3B5dGhvbi5jOjc1NSBpZl9weXRob24uYzo3NjkKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkgcmljaGllZGUgdW5hIGxpc3RhIGRpIHN0cmluZ2hlIgorCisjOiBpZl9weXRob24uYzo4OTUKK21zZ2lkICJFMjY0OiBQeXRob246IEVycm9yIGluaXRpYWxpc2luZyBJL08gb2JqZWN0cyIKK21zZ3N0ciAiRTI2NDogUHl0aG9uOiBFcnJvcmUgaW5pemlhbGl6emF6aW9uZSBvZ2dldHRpIEkvTyIKKworIzogaWZfcHl0aG9uLmM6MTA4MCBpZl90Y2wuYzoxNDAyCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICJlc3ByZXNzaW9uZSBub24gdmFsaWRhIgorCisjOiBpZl9weXRob24uYzoxMDk0IGlmX3RjbC5jOjE0MDcKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgImVzcHJlc3Npb25pIGRpc2FiaWxpdGF0ZSBpbiBjb21waWxhemlvbmUiCisKKyM6IGlmX3B5dGhvbi5jOjExMDcKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJ0ZW50YXRpdm8gZGkgcmVmZXJlbnphIGEgYnVmZmVyIGNhbmNlbGxhdG8iCisKKyM6IGlmX3B5dGhvbi5jOjExMjIgaWZfcHl0aG9uLmM6MTE2MyBpZl9weXRob24uYzoxMjI3IGlmX3RjbC5jOjEyMTQKK21zZ2lkICJsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UiCittc2dzdHIgIm51bWVybyBsaW5lYSBub24gbmVsbCdpbnRlcnZhbGxvIgorCisjOiBpZl9weXRob24uYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIjxidWZmZXIgb2JqZWN0IChkZWxldGVkKSBhdCAlOGxYPiIKK21zZ3N0ciAiPGJ1ZmZlciBvZ2dldHRvIChjYW5jZWxsYXRvKSBhICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxNDUzIGlmX3RjbC5jOjgzNgorbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICJub21lIGRpIG1hcmsgbm9uIHZhbGlkbyIKKworIzogaWZfcHl0aG9uLmM6MTczMworbXNnaWQgIm5vIHN1Y2ggYnVmZmVyIgorbXNnc3RyICJidWZmZXIgaW5lc2lzdGVudGUiCisKKyM6IGlmX3B5dGhvbi5jOjE4MjEKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICJ0ZW50YXRpdm8gZGkgcmVmZXJlbnphIGEgdW5hIGZpbmVzdHJhIGNhbmNlbGxhdGEiCisKKyM6IGlmX3B5dGhvbi5jOjE4NjYKK21zZ2lkICJyZWFkb25seSBhdHRyaWJ1dGUiCittc2dzdHIgImF0dHJpYnV0byAncmVhZG9ubHknIgorCisjOiBpZl9weXRob24uYzoxODc5Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICJwb3NpemlvbmUgY3Vyc29yZSBmdW9yaSBkYWwgYnVmZmVyIgorCisjOiBpZl9weXRob24uYzoxOTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0IChkZWxldGVkKSBhdCAlLjhsWD4iCittc2dzdHIgIjxmaW5lc3RyYSBvZ2dldHRvIChjYW5jZWxsYXRhKSBhICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTk2OAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IgorbXNnc3RyICI8ZmluZXN0cmEgb2dnZXR0byAoc2Nvbm9zY2l1dGEpIGEgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxOTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8ZmluZXN0cmEgJWQ+IgorCisjOiBpZl9weXRob24uYzoyMDQ2Cittc2dpZCAibm8gc3VjaCB3aW5kb3ciCittc2dzdHIgImZpbmVzdHJhIGluZXNpc3RlbnRlIgorCisjOiBpZl9weXRob24uYzoyMzA3IGlmX3B5dGhvbi5jOjIzNDEgaWZfcHl0aG9uLmM6MjM5NiBpZl9weXRob24uYzoyNDY0CisjOiBpZl9weXRob24uYzoyNTg2IGlmX3B5dGhvbi5jOjI2MzggaWZfdGNsLmM6Njg0IGlmX3RjbC5jOjcyOSBpZl90Y2wuYzo4MDMKKyM6IGlmX3RjbC5jOjg3MyBpZl90Y2wuYzoxOTk5Cittc2dpZCAiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAibm9uIHJpZXNjbyBhIHNhbHZhcmUgaW5mb3JtYXppb25pIHBlciAndW5kbyciCisKKyM6IGlmX3B5dGhvbi5jOjIzMDkgaWZfcHl0aG9uLmM6MjQwMyBpZl9weXRob24uYzoyNDc1Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBsaW5lIgorbXNnc3RyICJub24gcG9zc28gY2FuY2VsbGFyZSBsYSBsaW5lYSIKKworIzogaWZfcHl0aG9uLmM6MjM0NiBpZl9weXRob24uYzoyNDkxIGlmX3RjbC5jOjY5MCBpZl90Y2wuYzoyMDIxCittc2dpZCAiY2Fubm90IHJlcGxhY2UgbGluZSIKK21zZ3N0ciAibm9uIHBvc3NvIHNvc3RpdHVpcmUgbGEgbGluZWEiCisKKyM6IGlmX3B5dGhvbi5jOjI1MDkgaWZfcHl0aG9uLmM6MjU4OCBpZl9weXRob24uYzoyNjQ2Cittc2dpZCAiY2Fubm90IGluc2VydCBsaW5lIgorbXNnc3RyICJub24gcG9zc28gaW5zZXJpcmUgbGEgbGluZWEiCisKKyM6IGlmX3B5dGhvbi5jOjI3NTAKK21zZ2lkICJzdHJpbmcgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgImxhIHN0cmluZ2Egbm9uIHB18iBjb250ZW5lcmUgY2FyYXR0ZXJpICdBIENBUE8nIgorCisjOiBpZl9ydWJ5LmM6NDIyCittc2dpZCAiIgorIkUyNjY6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBSdWJ5IGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjY2OiBTcGlhY2VudGUsIGNvbWFuZG8gbm9uIGRpc3BvbmliaWxlLCBub24gcmllc2NvIGEgY2FyaWNhcmUgbGlicmVyaWEgIgorInByb2dyYW1taSBSdWJ5LiIKKworIzogaWZfcnVieS5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjczOiB1bmtub3duIGxvbmdqbXAgc3RhdHVzICVkIgorbXNnc3RyICJFMjczOiB0aXBvIHNjb25vc2NpdXRvIGRpIHNhbHRvIG5lbCBwcm9ncmFtbWEgJWQiCisKKyM6IGlmX3NuaWZmLmM6NjcKK21zZ2lkICJUb2dnbGUgaW1wbGVtZW50YXRpb24vZGVmaW5pdGlvbiIKK21zZ3N0ciAiSW1wbGVtZW50YXppb25lL2RlZmluaXppb25lIFPsL05vIgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICJWaXN1YWxpenphIGNsYXNzZSBiYXNlIGRpIgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAiVmlzdWFsaXp6YSBmdW56aW9uZSBtb2R1bG8gc292cmFzY3JpdHRvIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICJDYXJpY2EgZGEgZmlsZSIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAiQ2FyaWNhIGRhIHByb2dldHRvIgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIkNhcmljYSBkYSB0dXR0aSBpIHByb2dldHRpIgorCisjOiBpZl9zbmlmZi5jOjc0Cittc2dpZCAiUmV0cmlldmUiCittc2dzdHIgIkNhcmljYSBzdWNjZXNzaXZvIgorCisjOiBpZl9zbmlmZi5jOjc1Cittc2dpZCAiU2hvdyBzb3VyY2Ugb2YiCittc2dzdHIgIlZpc3VhbGl6emEgc29yZ2VudGUgZGkiCisKKyM6IGlmX3NuaWZmLmM6NzYKK21zZ2lkICJGaW5kIHN5bWJvbCIKK21zZ3N0ciAiVHJvdmEgc2ltYm9sbyIKKworIzogaWZfc25pZmYuYzo3NworbXNnaWQgIkJyb3dzZSBjbGFzcyIKK21zZ3N0ciAiRXNwbG9yYSBjbGFzc2UiCisKKyM6IGlmX3NuaWZmLmM6NzgKK21zZ2lkICJTaG93IGNsYXNzIGluIGhpZXJhcmNoeSIKK21zZ3N0ciAiVmlzdWFsaXp6YSBjbGFzc2UgaW4gZ2VyYXJjaGlhIgorCisjOiBpZl9zbmlmZi5jOjc5Cittc2dpZCAiU2hvdyBjbGFzcyBpbiByZXN0cmljdGVkIGhpZXJhcmNoeSIKK21zZ3N0ciAiVmlzdWFsaXp6YSBjbGFzc2UgbmVsbGEgZ2VyYXJjaGlhIHJpc3RyZXR0YSIKKworIzogaWZfc25pZmYuYzo4MAorbXNnaWQgIlhyZWYgcmVmZXJzIHRvIgorbXNnc3RyICJYcmVmIHNpIHJpZmVyaXNjZSBhIgorCisjOiBpZl9zbmlmZi5jOjgxCittc2dpZCAiWHJlZiByZWZlcnJlZCBieSIKK21zZ3N0ciAiWHJlZiByZWZlcmVuemlhdG8gZGEiCisKKyM6IGlmX3NuaWZmLmM6ODIKK21zZ2lkICJYcmVmIGhhcyBhIgorbXNnc3RyICJYcmVmIGhhIHVuIgorCisjOiBpZl9zbmlmZi5jOjgzCittc2dpZCAiWHJlZiB1c2VkIGJ5IgorbXNnc3RyICJYcmVmIHVzYXRvIGRhIgorCisjOiBpZl9zbmlmZi5jOjg0Cittc2dpZCAiU2hvdyBkb2N1IG9mIgorbXNnc3RyICJWaXN1YWxpenphIGRvY3UgZGkiCisKKyM6IGlmX3NuaWZmLmM6ODUKK21zZ2lkICJHZW5lcmF0ZSBkb2N1IGZvciIKK21zZ3N0ciAiR2VuZXJhIGRvY3UgcGVyIgorCisjOiBpZl9zbmlmZi5jOjk3Cittc2dpZCAiIgorIkNhbm5vdCBjb25uZWN0IHRvIFNOaUZGKy4gQ2hlY2sgZW52aXJvbm1lbnQgKHNuaWZmZW1hY3MgbXVzdCBiZSBmb3VuZCBpbiAiCisiJFBBVEgpLlxuIgorbXNnc3RyICIiCisiTm9uIHJpZXNjbyBhIGNvbm5ldHRlcm1pIGEgU05pRkYrLiBDb250cm9sbGFyZSBhbWJpZW50ZSAoc25pZmZlbWFjcyBkZXZlICIKKyJlc3NlcmUgcHJlc2VudGUgaW4gJFBBVEgpLlxuIgorCisjOiBpZl9zbmlmZi5jOjQyNQorbXNnaWQgIkUyNzQ6IFNuaWZmOiBFcnJvciBkdXJpbmcgcmVhZC4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJFMjc0OiBTbmlmZjogRXJyb3JlIGluIGxldHR1cmEuIERpc2Nvbm5lc3Npb25lLiIKKworIzogaWZfc25pZmYuYzo1NTMKK21zZ2lkICJTTmlGRisgaXMgY3VycmVudGx5ICIKK21zZ3N0ciAiU05pRkYrIOggYWwgbW9tZW50byAiCisKKyM6IGlmX3NuaWZmLmM6NTU1Cittc2dpZCAibm90ICIKK21zZ3N0ciAibm9uICIKKworIzogaWZfc25pZmYuYzo1NTYKK21zZ2lkICJjb25uZWN0ZWQiCittc2dzdHIgImNvbm5lc3NvIgorCisjOiBpZl9zbmlmZi5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjc1OiBVbmtub3duIFNOaUZGKyByZXF1ZXN0OiAlcyIKK21zZ3N0ciAiRTI3NTogUmljaGllc3RhIFNOaUZGKyBzY29ub3NjaXV0YTogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IEVycm9yZSBjb25uZXR0ZW5kb3NpIGEgU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwMDkKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODogU05pRkYrIG5vbiBjb25uZXNzbyIKKworIzogaWZfc25pZmYuYzoxMDE4Cittc2dpZCAiRTI3OTogTm90IGEgU05pRkYrIGJ1ZmZlciIKK21zZ3N0ciAiRTI3OTogTm9uIOggdW4gYnVmZmVyIFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDgzCittc2dpZCAiU25pZmY6IEVycm9yIGR1cmluZyB3cml0ZS4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJTbmlmZjogRXJyb3JlIGluIHNjcml0dHVyYS4gRGlzY29ubmVzc28iCisKKyM6IGlmX3RjbC5jOjQxOAorbXNnaWQgImludmFsaWQgYnVmZmVyIG51bWJlciIKK21zZ3N0ciAibnVtZXJvIGJ1ZmZlciBub24gdmFsaWRvIgorCisjOiBpZl90Y2wuYzo0NjQgaWZfdGNsLmM6OTMxIGlmX3RjbC5jOjExMTAKK21zZ2lkICJub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICJub24gYW5jb3JhIGltcGxlbWVudGF0byIKKworIzogaWZfdGNsLmM6NTAxCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIm9wemlvbmUgaW5lc2lzdGVudGUiCisKKyMuID8/PworIzogaWZfdGNsLmM6Nzc0Cittc2dpZCAiY2Fubm90IHNldCBsaW5lKHMpIgorbXNnc3RyICJub24gcG9zc28gaW1wb3N0YXJlIGxpbmVhKGUpIgorCisjOiBpZl90Y2wuYzo4NDUKK21zZ2lkICJtYXJrIG5vdCBzZXQiCittc2dzdHIgIm1hcmsgbm9uIGltcG9zdGF0byIKKworIzogaWZfdGNsLmM6ODUxIGlmX3RjbC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicm93ICVkIGNvbHVtbiAlZCIKK21zZ3N0ciAicmlnYSAlZCBjb2xvbm5hICVkIgorCisjOiBpZl90Y2wuYzo4ODEKK21zZ2lkICJjYW5ub3QgaW5zZXJ0L2FwcGVuZCBsaW5lIgorbXNnc3RyICJub24gcmllc2NvIGEgaW5zZXJpcmUvYWdnaXVuZ2VyZSBsaW5lYSIKKworIzogaWZfdGNsLmM6MTI2OAorbXNnaWQgInVua25vd24gZmxhZzogIgorbXNnc3RyICJvcHppb25lIGluZXNpc3RlbnRlOiAiCisKKyM6IGlmX3RjbC5jOjEzMzgKK21zZ2lkICJ1bmtub3duIHZpbU9wdGlvbiIKK21zZ3N0ciAiJ3ZpbU9wdGlvbicgaW5lc2lzdGVudGUiCisKKyM6IGlmX3RjbC5jOjE0MjMKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgImludGVycnV6aW9uZSBkYWxsYSB0YXN0aWVyYSIKKworIzogaWZfdGNsLmM6MTQyOAorbXNnaWQgInZpbSBlcnJvciIKK21zZ3N0ciAiZXJyb3JlIHZpbSIKKworIzogaWZfdGNsLmM6MTQ3MQorbXNnaWQgImNhbm5vdCBjcmVhdGUgYnVmZmVyL3dpbmRvdyBjb21tYW5kOiBvYmplY3QgaXMgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAiIgorIm5vbiByaWVzY28gYSBjcmVhcmUgY29tYW5kbyBidWZmZXIvZmluZXN0cmE6IG9nZ2V0dG8gaW4gdmlhIGRpIGNhbmNlbGxhemlvbmUiCisKKyM6IGlmX3RjbC5jOjE1NDUKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICIiCisibm9uIHBvc3NvIHJlZ2lzdHJhcmUgY29tYW5kbyBjYWxsYmFjazogYnVmZmVyL2ZpbmVzdHJhIGdp4CBpbiBjYW5jZWxsYXppb25lIgorCisjLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIzogaWZfdGNsLmM6MTU2MgorbXNnaWQgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgY29ycnVwdCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS4iCisib3JnIgorbXNnc3RyICIiCisiRTI4MDogRVJST1JFIEZBVEFMRSBUQ0w6IHJlZmxpc3QgY29ycm90dGEhPyBTaSBwcmVnYSBub3RpZmljYXJlIGEgdmltLSIKKyJkZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTU2MworbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIiIKKyJub24gcG9zc28gcmVnaXN0cmFyZSBjb21hbmRvIGNhbGxiYWNrOiByZWZlcmVuemEgYSBidWZmZXIvZmluZXN0cmEgIgorImluZXNpc3RlbnRlIgorCisjOiBpZl90Y2wuYzoxNzI0Cittc2dpZCAiIgorIkU1NzE6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBUY2wgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkU1NzE6IFNwaWFjZW50ZSwgY29tYW5kbyBub24gZGlzcG9uaWJpbGUsIG5vbiByaWVzY28gYSBjYXJpY2FyZSBsaWJyZXJpYSAiCisicHJvZ3JhbW1pIFRjbC4iCisKKyM6IGlmX3RjbC5jOjE4ODYKK21zZ2lkICIiCisiRTI4MTogVENMIEVSUk9SOiBleGl0IGNvZGUgaXMgbm90IGludCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS5vcmciCittc2dzdHIgIiIKKyJFMjgxOiBFUlJPUkUgVENMOiBjb2RpY2UgZGkgcml0b3JubyBub24gaW50IT8gU2kgcHJlZ2Egbm90aWZpY2FyZSBhIHZpbS0iCisiZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjIwMDcKK21zZ2lkICJjYW5ub3QgZ2V0IGxpbmUiCittc2dzdHIgIm5vbiByaWVzY28gYSBvdHRlbmVyZSBsYSBsaW5lYSIKKworIzogaWZfeGNtZHNydi5jOjIyNQorbXNnaWQgIlVuYWJsZSB0byByZWdpc3RlciBhIGNvbW1hbmQgc2VydmVyIG5hbWUiCittc2dzdHIgIk5vbiByaWVzY28gYSByZWdpc3RyYXJlIHVuIG5vbWUgZGkgc2VydmVyIGNvbWFuZG8iCisKKyM6IGlmX3hjbWRzcnYuYzo0NzMKK21zZ2lkICJFMjQ4OiBGYWlsZWQgdG8gc2VuZCBjb21tYW5kIHRvIHRoZSBkZXN0aW5hdGlvbiBwcm9ncmFtIgorbXNnc3RyICJFMjQ4OiBGYWxsaXRvIGludmlvIGNvbWFuZG8gYSBwcm9ncmFtbWEgZGVzdGluYXRhcmlvIgorCisjOiBpZl94Y21kc3J2LmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzM6IEludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICJFNTczOiBJZGVudGlmaWNhdGl2byBkaSBzZXJ2ZXIgbm9uIHZhbGlkbzogJXMiCisKKyM6IGlmX3hjbWRzcnYuYzoxMTEwCittc2dpZCAiRTI1MTogVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IGlzIGJhZGx5IGZvcm1lZC4gIERlbGV0ZWQhIgorbXNnc3RyICJFMjUxOiBQcm9wcmlldOAgcmVnaXN0cnkgcmVsYXRpdmUgYSBWSU0gbm9uIGFkZWd1YXRlLiAgQ2FuY2VsbGF0ZSEiCisKKyM6IG1haW4uYzo2MAorbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJPcHppb25lIGluZXNpc3RlbnRlIgorCisjOiBtYWluLmM6NjIKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAiVHJvcHBpIGFyZ29tZW50aSBkaSBlZGl0IgorCisjOiBtYWluLmM6NjQKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICJBcmdvbWVudG8gbWFuY2FudGUgZG9wbyIKKworIzogbWFpbi5jOjY2Cittc2dpZCAiR2FyYmFnZSBhZnRlciBvcHRpb24iCittc2dzdHIgIlNwYXp6YXR1cmEgZG9wbyBvcHppb25lIgorCisjOiBtYWluLmM6NjgKK21zZ2lkICJUb28gbWFueSBcIitjb21tYW5kXCIsIFwiLWMgY29tbWFuZFwiIG9yIFwiLS1jbWQgY29tbWFuZFwiIGFyZ3VtZW50cyIKK21zZ3N0ciAiVHJvcHBpIGFyZ29tZW50aSBcIitjb21tYW5kXCIsIFwiLWMgY29tbWFuZFwiIG8gXCItLWNtZCBjb21tYW5kXCIiCisKKyM6IG1haW4uYzo3MAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgZm9yIgorbXNnc3RyICJBcmdvbWVudG8gbm9uIHZhbGlkbyBwZXIiCisKKyM6IG1haW4uYzo0NjkKK21zZ2lkICJUaGlzIFZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlIGRpZmYgZmVhdHVyZS4iCittc2dzdHIgIlZpbSBub24gY29tcGlsYXRvIGNvbiBvcHppb25lICdkaWZmJy4iCisKKyM6IG1haW4uYzo5MzUKK21zZ2lkICJBdHRlbXB0IHRvIG9wZW4gc2NyaXB0IGZpbGUgYWdhaW46IFwiIgorbXNnc3RyICJUZW50byBkaSByaWFwcmlyZSBsbyBzY3JpcHQgZmlsZTogXCIiCisKKyM6IG1haW4uYzo5NDQKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3IgcmVhZGluZzogXCIiCittc2dzdHIgIk5vbiBwb3NzbyBhcHJpcmUgaW4gbGV0dHVyYTogXCIiCisKKyM6IG1haW4uYzo5ODgKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIk5vbiBwb3NzbyBhcHJpcmUgY29tZSBzY3JpcHQgb3V0cHV0OiBcIiIKKworIzogbWFpbi5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmlsZXMgdG8gZWRpdFxuIgorbXNnc3RyICIlZCBmaWxlIGRhIGVsYWJvcmFyZVxuIgorCisjOiBtYWluLmM6MTIzNgorbXNnaWQgIlZpbTogV2FybmluZzogT3V0cHV0IGlzIG5vdCB0byBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTogQXR0ZW56aW9uZTogT3V0cHV0IG5vbiBkaXJldHRvIGEgdW4gdGVybWluYWxlXG4iCisKKyM6IG1haW4uYzoxMjM4Cittc2dpZCAiVmltOiBXYXJuaW5nOiBJbnB1dCBpcyBub3QgZnJvbSBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTogQXR0ZW56aW9uZTogSW5wdXQgbm9uIHByb3ZlbmllbnRlIGRhIHVuIHRlcm1pbmFsZVxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjEzMDYKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJsaW5lYSBjb21hbmRpIHByaW1hIGRpIHZpbXJjIgorCisjOiBtYWluLmM6MTM0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjgyOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTI4MjogTm9uIHBvc3NvIGxlZ2dlcmUgZGEgXCIlc1wiIgorCisjOiBtYWluLmM6MjQyMAorbXNnaWQgIiIKKyJcbiIKKyJNb3JlIGluZm8gd2l0aDogXCJ2aW0gLWhcIlxuIgorbXNnc3RyICIiCisiXG4iCisiTWFnZ2lvcmkgaW5mb3JtYXppb25pIGNvbjogXCJ2aW0gLWhcIlxuIgorCisjOiBtYWluLmM6MjQ1MworbXNnaWQgIltmaWxlIC4uXSAgICAgICBlZGl0IHNwZWNpZmllZCBmaWxlKHMpIgorbXNnc3RyICJbZmlsZSAuLl0gICAgICAgYXByaSBmaWxlKHMpIHNwZWNpZmljYXRpIgorCisjOiBtYWluLmM6MjQ1NAorbXNnaWQgIi0gICAgICAgICAgICAgICByZWFkIHRleHQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiLSAgICAgICAgICAgICAgIGxlZ2dpIHRlc3RvIGRhICdzdGRpbiciCisKKyM6IG1haW4uYzoyNDU1Cittc2dpZCAiLXQgdGFnICAgICAgICAgIGVkaXQgZmlsZSB3aGVyZSB0YWcgaXMgZGVmaW5lZCIKK21zZ3N0ciAiLXQgdGFnICAgICAgICAgIGFwcmkgZmlsZSBpbiBjdWkg6CBkZWZpbml0YSBsYSB0YWciCisKKyM6IG1haW4uYzoyNDU3Cittc2dpZCAiLXEgW2Vycm9yZmlsZV0gIGVkaXQgZmlsZSB3aXRoIGZpcnN0IGVycm9yIgorbXNnc3RyICItcSBbZXJyb3JmaWxlXSAgYXByaSBmaWxlIGNvbCBwcmltbyBlcnJvcmUiCisKKyM6IG1haW4uYzoyNDY2Cittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIiAgdXNvOiIKKworIzogbWFpbi5jOjI0NjkKK21zZ2lkICIgdmltIFthcmd1bWVudHNdICIKK21zZ3N0ciAiIHZpbSBbYXJnb21lbnRpXSAiCisKKyM6IG1haW4uYzoyNDczCittc2dpZCAiIgorIlxuIgorIiAgIG9yOiIKK21zZ3N0ciAiIgorIlxuIgorIiAgICBvOiIKKworIzogbWFpbi5jOjI0NzYKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQXJndW1lbnRzOlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiQXJnb21lbnRpOlxuIgorCisjOiBtYWluLmM6MjQ3NworbXNnaWQgIi0tXHRcdFx0T25seSBmaWxlIG5hbWVzIGFmdGVyIHRoaXMiCittc2dzdHIgIi0tXHRcdFx0U29sbyBub21pIGZpbGUgZGEgcXVpIGluIHBvaSIKKworIzogbWFpbi5jOjI0NzkKK21zZ2lkICItLWxpdGVyYWxcdFx0RG9uJ3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiLS1saXRlcmFsXHRcdE5vbiBlc3BhbmRlcmUgd2lsZGNhcmQiCisKKyM6IG1haW4uYzoyNDgyCittc2dpZCAiLXJlZ2lzdGVyXHRcdFJlZ2lzdGVyIHRoaXMgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItcmVnaXN0ZXJcdFx0UmVnaXN0cmEgcXVlc3RvIGd2aW0gYSBPTEUiCisKKyM6IG1haW4uYzoyNDgzCittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi11bnJlZ2lzdGVyXHRcdERlcmVnaXN0cmEgZ3ZpbSBhIE9MRSIKKworIzogbWFpbi5jOjI0ODYKK21zZ2lkICItZ1x0XHRcdFJ1biB1c2luZyBHVUkgKGxpa2UgXCJndmltXCIpIgorbXNnc3RyICItZ1x0XHRcdEVzZWd1aSB1c2FuZG8gR1VJIChjb21lIFwiZ3ZpbVwiKSIKKworIzogbWFpbi5jOjI0ODcKK21zZ2lkICItZiAgb3IgIC0tbm9mb3JrXHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZiBvcHAuIC0tbm9mb3JrXHRGb3JlZ3JvdW5kOiBOb24gdXNhcmUgJ2ZvcmsnIGluaXppYWxpenphbmRvIEdVSSIKKworIzogbWFpbi5jOjI0ODkKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRNb2RhbGl04CBWaSAoY29tZSBcInZpXCIpIgorCisjOiBtYWluLmM6MjQ5MAorbXNnaWQgIi1lXHRcdFx0RXggbW9kZSAobGlrZSBcImV4XCIpIgorbXNnc3RyICItZVx0XHRcdE1vZGFsaXTgIEV4IChjb21lIFwiZXhcIikiCisKKyM6IG1haW4uYzoyNDkxCittc2dpZCAiLXNcdFx0XHRTaWxlbnQgKGJhdGNoKSBtb2RlIChvbmx5IGZvciBcImV4XCIpIgorbXNnc3RyICItc1x0XHRcdE1vZGFsaXTgIFNpbGVuemlvc2EgKGJhdGNoKSAoc29sbyBwZXIgXCJleFwiKSIKKworIzogbWFpbi5jOjI0OTMKK21zZ2lkICItZFx0XHRcdERpZmYgbW9kZSAobGlrZSBcInZpbWRpZmZcIikiCittc2dzdHIgIi1kXHRcdFx0TW9kYWxpdOAgRGlmZiAoY29tZSBcInZpbWRpZmZcIikiCisKKyM6IG1haW4uYzoyNDk1Cittc2dpZCAiLXlcdFx0XHRFYXN5IG1vZGUgKGxpa2UgXCJldmltXCIsIG1vZGVsZXNzKSIKK21zZ3N0ciAiLXlcdFx0XHRNb2RhbGl04CBGYWNpbGUgKGNvbWUgXCJldmltXCIsIHNlbnphIG1vZGFsaXTgKSIKKworIzogbWFpbi5jOjI0OTYKK21zZ2lkICItUlx0XHRcdFJlYWRvbmx5IG1vZGUgKGxpa2UgXCJ2aWV3XCIpIgorbXNnc3RyICItUlx0XHRcdE1vZGFsaXTgIFNvbGEgTGV0dHVyYSAoY29tZSBcInZpZXdcIikiCisKKyM6IG1haW4uYzoyNDk3Cittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdE1vZGFsaXTgIFJpc3RyZXR0YSAoY29tZSBcInJ2aW1cIikiCisKKyM6IG1haW4uYzoyNDk4Cittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHRSaXNjcml0dHVyZSBkZWwgZmlsZSBub24gcGVybWVzc2UiCisKKyM6IG1haW4uYzoyNDk5Cittc2dpZCAiLU1cdFx0XHRNb2RpZmljYXRpb25zIGluIHRleHQgbm90IGFsbG93ZWQiCittc2dzdHIgIi1NXHRcdFx0TW9kaWZpY2hlIG5lbCBmaWxlIG5vbiBwZXJtZXNzZSIKKworIzogbWFpbi5jOjI1MDAKK21zZ2lkICItYlx0XHRcdEJpbmFyeSBtb2RlIgorbXNnc3RyICItYlx0XHRcdE1vZGFsaXTgIEJpbmFyaWEiCisKKyM6IG1haW4uYzoyNTAyCittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0TW9kYWxpdOAgTGlzcCIKKworIzogbWFpbi5jOjI1MDQKK21zZ2lkICItQ1x0XHRcdENvbXBhdGlibGUgd2l0aCBWaTogJ2NvbXBhdGlibGUnIgorbXNnc3RyICItQ1x0XHRcdENvbXBhdGliaWxlIGNvbiBWaTogJ2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjUwNQorbXNnaWQgIi1OXHRcdFx0Tm90IGZ1bGx5IFZpIGNvbXBhdGlibGU6ICdub2NvbXBhdGlibGUnIgorbXNnc3RyICItTlx0XHRcdE5vbiBpbnRlcmFtZW50ZSBjb21wYXRpYmlsZSBjb24gVmk6ICdub2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjUwNgorbXNnaWQgIi1WW05dXHRcdFZlcmJvc2UgbGV2ZWwiCittc2dzdHIgIi1WW05dXHRcdExpdmVsbG8gVmVyYm9zaXTgIgorCisjOiBtYWluLmM6MjUwNworbXNnaWQgIi1EXHRcdFx0RGVidWdnaW5nIG1vZGUiCittc2dzdHIgIi1EXHRcdFx0TW9kYWxpdOAgRGVidWciCisKKyM6IG1haW4uYzoyNTA4Cittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHROaWVudGUgZmlsZSBkaSBzd2FwLCB1c2Egc29sbyBtZW1vcmlhIgorCisjOiBtYWluLmM6MjUwOQorbXNnaWQgIi1yXHRcdFx0TGlzdCBzd2FwIGZpbGVzIGFuZCBleGl0IgorbXNnc3RyICItclx0XHRcdExpc3RhIHN3YXAgZmlsZSBlZCBlc2NpIgorCisjOiBtYWluLmM6MjUxMAorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciAoZSBub21lIGZpbGUpXHRSZWN1cGVyYSBkYSBzZXNzaW9uZSBmaW5pdGEgbWFsZSIKKworIzogbWFpbi5jOjI1MTEKK21zZ2lkICItTFx0XHRcdFNhbWUgYXMgLXIiCittc2dzdHIgIi1MXHRcdFx0Q29tZSAtciIKKworIzogbWFpbi5jOjI1MTMKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdFx0Tm9uIHVzYXJlIG5ld2NsaSBwZXIgYXByaXJlIGZpbmVzdHJhIgorCisjOiBtYWluLmM6MjUxNAorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPGRpc3Bvc2l0aXZvPlx0XHRVc2EgPGRpc3Bvc2l0aXZvPiBwZXIgSS9PIgorCisjOiBtYWluLmM6MjUxNworbXNnaWQgIi1BXHRcdFx0c3RhcnQgaW4gQXJhYmljIG1vZGUiCittc2dzdHIgIi1BXHRcdFx0Q29taW5jaWEgaW4gbW9kYWxpdOAgQXJhYmEiCisKKyM6IG1haW4uYzoyNTIwCittc2dpZCAiLUhcdFx0XHRTdGFydCBpbiBIZWJyZXcgbW9kZSIKK21zZ3N0ciAiLUhcdFx0XHRDb21pbmNpYSBpbiBtb2RhbGl04CBFYnJhaWNhIgorCisjOiBtYWluLmM6MjUyMworbXNnaWQgIi1GXHRcdFx0U3RhcnQgaW4gRmFyc2kgbW9kZSIKK21zZ3N0ciAiLUZcdFx0XHRDb21pbmNpYSBpbiBtb2RhbGl04CBGYXJzaSAoUGVyc2lhbm8pIgorCisjOiBtYWluLmM6MjUyNQorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW5hbGU+XHRJbXBvc3RhIHRpcG8gdGVybWluYWxlIGEgPHRlcm1pbmFsZT4iCisKKyM6IG1haW4uYzoyNTI2Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0VXNhIDx2aW1yYz4gaW52ZWNlIGRpIC52aW1yYyIKKworIzogbWFpbi5jOjI1MjgKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0VXNhIDxndmltcmM+IGludmVjZSBkaSAuZ3ZpbXJjIgorCisjOiBtYWluLmM6MjUzMAorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHROb24gY2FyaWNhcmUgc2NyaXB0IHBsdWdpbiIKKworIzogbWFpbi5jOjI1MzEKK21zZ2lkICItb1tOXVx0XHRPcGVuIE4gd2luZG93cyAoZGVmYXVsdDogb25lIGZvciBlYWNoIGZpbGUpIgorbXNnc3RyICItb1tOXVx0XHRBcHJpIE4gZmluZXN0cmUgKHByZWRlZmluaXRvOiB1bmEgcGVyIG9nbmkgZmlsZSkiCisKKyM6IG1haW4uYzoyNTMyCittc2dpZCAiLU9bTl1cdFx0TGlrZSAtbyBidXQgc3BsaXQgdmVydGljYWxseSIKK21zZ3N0ciAiLU9bTl1cdFx0Q29tZSAtbyBtYSBkaXZpZGkgbGUgZmluZXN0cmUgaW4gdmVydGljYWxlIgorCisjOiBtYWluLmM6MjUzMworbXNnaWQgIitcdFx0XHRTdGFydCBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiK1x0XHRcdFBvc2l6aW9uYXRpIGFsbGEgZmluZSBkZWwgZmlsZSIKKworIzogbWFpbi5jOjI1MzQKK21zZ2lkICIrPGxudW0+XHRcdFN0YXJ0IGF0IGxpbmUgPGxudW0+IgorbXNnc3RyICIrPGxudW0+XHRcdFBvc2l6aW9uYXRpIGFsbGEgbGluZWEgPGxudW0+IgorCisjOiBtYWluLmM6MjUzNgorbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIiIKKyItLWNtZCA8Y29tYW5kbz5cdFx0RXNlZ3VpIDxjb21hbmRvPiBwcmltYSBkaSBjYXJpY2FyZSBldmVudHVhbGkgZmlsZSB2aW1yYyIKKworIzogbWFpbi5jOjI1MzgKK21zZ2lkICItYyA8Y29tbWFuZD5cdFx0RXhlY3V0ZSA8Y29tbWFuZD4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLWMgPGNvbWFuZG8+XHRcdEVzZWd1aSA8Y29tYW5kbz4gZG9wbyBjYXJpY2FtZW50byBwcmltbyBmaWxlIgorCisjOiBtYWluLmM6MjUzOQorbXNnaWQgIi1TIDxzZXNzaW9uPlx0XHRTb3VyY2UgZmlsZSA8c2Vzc2lvbj4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiIgorIi1TIDxzZXNzaW9uZT5cdEVzZWd1aSBjb21hbmRpIGluIGZpbGUgPHNlc3Npb25lPiBkb3BvIGNhcmljYW1lbnRvIHByaW1vIGZpbGUiCisKKyM6IG1haW4uYzoyNTQwCittc2dpZCAiLXMgPHNjcmlwdGluPlx0UmVhZCBOb3JtYWwgbW9kZSBjb21tYW5kcyBmcm9tIGZpbGUgPHNjcmlwdGluPiIKK21zZ3N0ciAiLXMgPHNjcmlwdGluPlx0TGVnZ2kgY29tYW5kaSBpbiBtb2RhbGl04CBub3JtYWxlIGRhIGZpbGUgPHNjcmlwdGluPiIKKworIzogbWFpbi5jOjI1NDEKK21zZ2lkICItdyA8c2NyaXB0b3V0Plx0QXBwZW5kIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItdyA8c2NyaXB0b3V0Plx0QWdnaXVuZ2kgdHV0dGkgaSBjb21hbmRpIGltbWVzc2kgYSBmaWxlIDxzY3JpcHRvdXQ+IgorCisjOiBtYWluLmM6MjU0MgorbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLVcgPHNjcmlwdG91dD5cdFNjcml2aSB0dXR0aSBpIGNvbWFuZGkgaW1tZXNzaSBpbiBmaWxlIDxzY3JpcHRvdXQ+IgorCisjOiBtYWluLmM6MjU0NAorbXNnaWQgIi14XHRcdFx0RWRpdCBlbmNyeXB0ZWQgZmlsZXMiCittc2dzdHIgIi14XHRcdFx0QXByaSB1biBmaWxlIGNyaXR0YXRvIgorCisjOiBtYWluLmM6MjU0OAorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0Q29ubmVjdCB2aW0gdG8gdGhpcyBwYXJ0aWN1bGFyIFgtc2VydmVyIgorbXNnc3RyICItZGlzcGxheSA8c2NoZXJtbz5cdEVzZWd1aSB2aW0gYSBxdWVzdG8gcGFydGljb2xhcmUgc2VydmVyIFgiCisKKyM6IG1haW4uYzoyNTUwCittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHROb24gY29ubmV0dGVydGkgYSBzZXJ2ZXIgWCIKKworIzogbWFpbi5jOjI1NTMKK21zZ2lkICItLXJlbW90ZSA8ZmlsZXM+XHRFZGl0IDxmaWxlcz4gaW4gYSBWaW0gc2VydmVyIGlmIHBvc3NpYmxlIgorbXNnc3RyICItLXJlbW90ZSA8ZmlsZT5cdEFwcmkgPGZpbGU+IGluIHVuIHNlcnZlciBWaW0gc2UgcG9zc2liaWxlIgorCisjOiBtYWluLmM6MjU1NAorbXNnaWQgIi0tcmVtb3RlLXNpbGVudCA8ZmlsZXM+ICBTYW1lLCBkb24ndCBjb21wbGFpbiBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIiCittc2dzdHIgIi0tcmVtb3RlLXNpbGVudCA8ZmlsZXM+ICBTdGVzc2EgY29zYSwgaWdub3JhIHNlIG5vbiBlc2lzdGUgdW4gc2VydmVyIgorCisjOiBtYWluLmM6MjU1NQorbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcz4gIEFzIC0tcmVtb3RlIGJ1dCB3YWl0IGZvciBmaWxlcyB0byBoYXZlIGJlZW4gZWRpdGVkIgorbXNnc3RyICIiCisiLS1yZW1vdGUtd2FpdCA8ZmlsZT4gIENvbWUgLS1yZW1vdGUgbWEgYXNwZXR0YSBjaGUgZmlsZSBzaWFubyBlbGFib3JhdGkiCisKKyM6IG1haW4uYzoyNTU2Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIFN0ZXNzYSBjb3NhLCBpZ25vcmEgc2Ugbm9uIGVzaXN0ZSB1biBzZXJ2ZXIiCisKKyM6IG1haW4uYzoyNTU3Cittc2dpZCAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFNlbmQgPGtleXM+IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUtc2VuZCA8dGFzdGk+XHRJbnZpYSA8dGFzdGk+IGEgdW4gc2VydmVyIFZpbSBlZCBlc2NpIgorCisjOiBtYWluLmM6MjU1OAorbXNnaWQgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWF0ZSA8ZXhwcj4gaW4gYSBWaW0gc2VydmVyIGFuZCBwcmludCByZXN1bHQiCittc2dzdHIgIiIKKyItLXJlbW90ZS0tZXhwciA8ZXhwcj5cdEVzZWd1aSA8ZXhwcj4gaW4gdW4gc2VydmVyIFZpbSBlIHN0YW1wYSByaXN1bHRhdG8iCisKKyM6IG1haW4uYzoyNTU5Cittc2dpZCAiLS1zZXJ2ZXJsaXN0XHRcdExpc3QgYXZhaWxhYmxlIFZpbSBzZXJ2ZXIgbmFtZXMgYW5kIGV4aXQiCittc2dzdHIgIi0tc2VydmVybGlzdFx0XHRMaXN0YSBub21pIHNlcnZlciBWaW0gZGlzcG9uaWJpbGkgZWQgZXNjaSIKKworIzogbWFpbi5jOjI1NjAKK21zZ2lkICItLXNlcnZlcm5hbWUgPG5hbWU+XHRTZW5kIHRvL2JlY29tZSB0aGUgVmltIHNlcnZlciA8bmFtZT4iCittc2dzdHIgIi0tc2VydmVybmFtZSA8bm9tZT5cdEludmlhIGEvZGl2ZW50YSBzZXJ2ZXIgVmltIGRpIG5vbWUgPG5vbWU+IgorCisjOiBtYWluLmM6MjU2MworbXNnaWQgIi1pIDx2aW1pbmZvPlx0XHRVc2UgPHZpbWluZm8+IGluc3RlYWQgb2YgLnZpbWluZm8iCittc2dzdHIgIi1pIDx2aW1pbmZvPlx0XHRVc2EgPHZpbWluZm8+IGludmVjZSBkaSAudmltaW5mbyIKKworIzogbWFpbi5jOjI1NjUKK21zZ2lkICItaCAgb3IgIC0taGVscFx0UHJpbnQgSGVscCAodGhpcyBtZXNzYWdlKSBhbmQgZXhpdCIKK21zZ3N0ciAiLWggb3BwLiAtLWhlbHBcdFN0YW1wYSBBaXV0byAocXVlc3RvIG1lc3NhZ2dpbykgZWQgZXNjaSIKKworIzogbWFpbi5jOjI1NjYKK21zZ2lkICItLXZlcnNpb25cdFx0UHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKK21zZ3N0ciAiLS12ZXJzaW9uXHRcdFN0YW1wYSBpbmZvcm1hemlvbmkgc3VsbGEgdmVyc2lvbmUgZWQgZXNjaSIKKworIzogbWFpbi5jOjI1NzAKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoTW90aWYgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJPcHppb25pIGFjY2V0dGF0ZSBkYSBndmltICh2ZXJzaW9uZSBNb3RpZik6XG4iCisKKyM6IG1haW4uYzoyNTc0Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKG5lWHRhdyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIk9wemlvbmkgYWNjZXR0YXRlIGRhIGd2aW0gKHZlcnNpb25lIG5lWHRhdyk6XG4iCisKKyM6IG1haW4uYzoyNTc2Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEF0aGVuYSB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIk9wemlvbmkgYWNjZXR0YXRlIGRhIGd2aW0gKHZlcnNpb25lIEF0aGVuYSk6XG4iCisKKyM6IG1haW4uYzoyNTgwCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiIKK21zZ3N0ciAiLWRpc3BsYXkgPHNjaGVybW8+XHRFc2VndWkgdmltIHN1IDxzY2hlcm1vPiIKKworIzogbWFpbi5jOjI1ODEKK21zZ2lkICItaWNvbmljXHRcdFN0YXJ0IHZpbSBpY29uaWZpZWQiCittc2dzdHIgIi1pY29uaWNcdFx0SW5pemlhIHZpbSByaWR1Y2VuZG9sbyBhZCBpY29uYSIKKworIzogbWFpbi5jOjI1ODMKK21zZ2lkICItbmFtZSA8bmFtZT5cdFx0VXNlIHJlc291cmNlIGFzIGlmIHZpbSB3YXMgPG5hbWU+IgorbXNnc3RyICItbmFtZSA8bm9tZT5cdFx0VXNhIHJpc29yc2EgY29tZSBzZSB2aW0gZm9zc2UgPG5vbWU+IgorCisjOiBtYWluLmM6MjU4NAorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgKE5vbiBpbXBsZW1lbnRhdG8pXG4iCisKKyM6IG1haW4uYzoyNTg2Cittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8Y29sb3JlPlx0VXNhIDxjb2xvcmU+IGNvbWUgc2ZvbmRvIChhbmNoZTogLWJnKSIKKworIzogbWFpbi5jOjI1ODcKK21zZ2lkICItZm9yZWdyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mZykiCittc2dzdHIgIi1mb3JlZ3JvdW5kIDxjb2xvcmU+XHRVc2EgPGNvbG9yZT4gcGVyIGlsIHRlc3RvIG5vcm1hbGUgKGFuY2hlOiAtZmcpIgorCisjOiBtYWluLmM6MjU4OCBtYWluLmM6MjYwOAorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPGZvbnQ+XHRcdFVzYSA8Zm9udD4gZm9yIGlsIHRlc3RvIG5vcm1hbGUgKGFuY2hlOiAtZm4pIgorCisjOiBtYWluLmM6MjU4OQorbXNnaWQgIi1ib2xkZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGJvbGQgdGV4dCIKK21zZ3N0ciAiLWJvbGRmb250IDxmb250Plx0VXNhIDxmb250PiBwZXIgdGVzdG8gaW4gZ3Jhc3NldHRvIgorCisjOiBtYWluLmM6MjU5MAorbXNnaWQgIi1pdGFsaWNmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgaXRhbGljIHRleHQiCittc2dzdHIgIi1pdGFsaWNmb250IDxmb250Plx0VXNhIDxmb250PiBwZXIgdGVzdG8gaW4gY29yc2l2byIKKworIzogbWFpbi5jOjI1OTEgbWFpbi5jOjI2MDkKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIi1nZW9tZXRyeSA8Z2VvbT5cdFVzYSA8Z2VvbT4gcGVyIGxhIGdlb21ldHJpYSBpbml6aWFsZSAoYW5jaGU6IC1nZW9tKSIKKworIzogbWFpbi5jOjI1OTIKK21zZ2lkICItYm9yZGVyd2lkdGggPHdpZHRoPlx0VXNlIGEgYm9yZGVyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1idykiCittc2dzdHIgIi1ib3JkZXJ3aWR0aCA8bGFyZz5cdFVzYSBsYXJnaGV6emEgPGxhcmc+IHBlciBib3JkbyAoYW5jaGU6IC1idykiCisKKyM6IG1haW4uYzoyNTkzCittc2dpZCAiLXNjcm9sbGJhcndpZHRoIDx3aWR0aD4gIFVzZSBhIHNjcm9sbGJhciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtc3cpIgorbXNnc3RyICIiCisiLXNjcm9sbGJhcndpZHRoIDxsYXJnPiAgVXNhIGxhcmdoZXp6YSA8bGFyZz4gcGVyIHNjcm9sbGJhciAoYW5jaGU6IC1zdykiCisKKyM6IG1haW4uYzoyNTk1Cittc2dpZCAiLW1lbnVoZWlnaHQgPGhlaWdodD5cdFVzZSBhIG1lbnUgYmFyIGhlaWdodCBvZiA8aGVpZ2h0PiAoYWxzbzogLW1oKSIKK21zZ3N0ciAiLW1lbnVoZWlnaHQgPGFsdD5cdFVzYSBhbHRlenphIDxhbHQ+IHBlciBiYXJyYSBtZW51IChhbmNoZTogLW1oKSIKKworIzogbWFpbi5jOjI1OTcgbWFpbi5jOjI2MTAKK21zZ2lkICItcmV2ZXJzZVx0XHRVc2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogLXJ2KSIKK21zZ3N0ciAiLXJldmVyc2VcdFx0VXNhIGNvbG9yaSBpbnZlcnRpdGkgKGFuY2hlOiAtcnYpIgorCisjOiBtYWluLmM6MjU5OAorbXNnaWQgIityZXZlcnNlXHRcdERvbid0IHVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiArcnYpIgorbXNnc3RyICIrcmV2ZXJzZVx0XHROb24gdXNhcmUgY29sb3JpIGludmVydGl0aSAoYW5jaGU6ICtydikiCisKKyM6IG1haW4uYzoyNTk5Cittc2dpZCAiLXhybSA8cmVzb3VyY2U+XHRTZXQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSIKK21zZ3N0ciAiLXhybSA8cmlzb3JzYT5cdEltcG9zdGEgbGEgcmlzb3JzYSBzcGVjaWZpY2F0YSIKKworIzogbWFpbi5jOjI2MDIKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoUklTQyBPUyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ29tZW50aSBhY2NldHRhdGkgZGEgZ3ZpbSAodmVyc2lvbmUgUklTQyBPUyk6XG4iCisKKyM6IG1haW4uYzoyNjAzCittc2dpZCAiLS1jb2x1bW5zIDxudW1iZXI+XHRJbml0aWFsIHdpZHRoIG9mIHdpbmRvdyBpbiBjb2x1bW5zIgorbXNnc3RyICItLWNvbHVtbnMgPG51bWVybz5cdExhcmdoZXp6YSBpbml6aWFsZSBmaW5lc3RyYSBpbiBjb2xvbm5lIgorCisjOiBtYWluLmM6MjYwNAorbXNnaWQgIi0tcm93cyA8bnVtYmVyPlx0SW5pdGlhbCBoZWlnaHQgb2Ygd2luZG93IGluIHJvd3MiCittc2dzdHIgIi0tcm93cyA8bnVtZXJvPlx0QWx0ZXp6YSBpbml6aWFsZSBmaW5lc3RyYSBpbiByaWdoZSIKKworIzogbWFpbi5jOjI2MDcKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoR1RLKyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ29tZW50aSBhY2NldHRhdGkgZGEgZ3ZpbSAodmVyc2lvbmUgR1RLKyk6XG4iCisKKyM6IG1haW4uYzoyNjExCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiAoYWxzbzogLS1kaXNwbGF5KSIKK21zZ3N0ciAiLWRpc3BsYXkgPHNjaGVybW8+XHRFc2VndWkgdmltIHN1IDxzY2hlcm1vPiAoYW5jaGU6IC0tZGlzcGxheSkiCisKKyM6IG1haW4uYzoyNjEzCittc2dpZCAiLS1yb2xlIDxyb2xlPlx0U2V0IGEgdW5pcXVlIHJvbGUgdG8gaWRlbnRpZnkgdGhlIG1haW4gd2luZG93IgorbXNnc3RyICIiCisiLS1yb2xlIDxydW9sbz5cdEltcG9zdGEgdW4gcnVvbG8gdW5pdm9jbyBwZXIgaWRlbnRpZmljYXJlIGxhIGZpbmVzdHJhICIKKyJwcmluY2lwYWxlIgorCisjOiBtYWluLmM6MjYxNQorbXNnaWQgIi0tc29ja2V0aWQgPHhpZD5cdE9wZW4gVmltIGluc2lkZSBhbm90aGVyIEdUSyB3aWRnZXQiCittc2dzdHIgIi0tc29ja2V0aWQgPHhpZD5cdEFwcmkgVmltIGRlbnRybyB1biBhbHRybyAnd2lkZ2V0JyBHVEsiCisKKyM6IG1haW4uYzoyNjE4Cittc2dpZCAiLVAgPHBhcmVudCB0aXRsZT5cdE9wZW4gVmltIGluc2lkZSBwYXJlbnQgYXBwbGljYXRpb24iCittc2dzdHIgIi1QIDx0aXRvbG8gcGFkcmU+XHRBcHJpIFZpbSBpbiB1bidhcHBsaWNhemlvbmUgcGFkcmUiCisKKyM6IG1haW4uYzoyODU2Cittc2dpZCAiTm8gZGlzcGxheSIKK21zZ3N0ciAiTWFuY2EgZGlzcGxheSIKKworIy4gRmFpbGVkIHRvIHNlbmQsIGFib3J0LgorIzogbWFpbi5jOjI4NzEKK21zZ2lkICI6IFNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICI6IEludmlvIGZhbGxpdG8uXG4iCisKKyMuIExldCB2aW0gc3RhcnQgbm9ybWFsbHkuCisjOiBtYWluLmM6Mjg3NworbXNnaWQgIjogU2VuZCBmYWlsZWQuIFRyeWluZyB0byBleGVjdXRlIGxvY2FsbHlcbiIKK21zZ3N0ciAiOiBJbnZpbyBmYWxsaXRvLiBUZW50byBkaSBlc2VndWlyZSBsb2NhbG1lbnRlXG4iCisKKyM6IG1haW4uYzoyOTE1IG1haW4uYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG9mICVkIGVkaXRlZCIKK21zZ3N0ciAiJWQgZGkgJWQgZWxhYm9yYXRvIgorCisjOiBtYWluLmM6Mjk1OAorbXNnaWQgIk5vIGRpc3BsYXk6IFNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIk5lc3N1biBkaXNwbGF5OiBJbnZpbyBkaSBlc3ByZXNzaW9uZSBmYWxsaXRvLlxuIgorCisjOiBtYWluLmM6Mjk3MAorbXNnaWQgIjogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiBJbnZpbyBkaSBlc3ByZXNzaW9uZSBmYWxsaXRvLlxuIgorCisjOiBtYXJrLmM6NzA5Cittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICJOZXNzdW4gbWFyayBpbXBvc3RhdG8iCisKKyM6IG1hcmsuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MzogTm8gbWFya3MgbWF0Y2hpbmcgXCIlc1wiIgorbXNnc3RyICJFMjgzOiBOZXNzdW4gbWFyayBjb3JyaXNwb25kZW50ZSBhIFwiJXNcIiIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzIyCittc2dpZCAiIgorIlxuIgorIm1hcmsgbGluZSAgY29sIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIm1hcmsgbGluZWEgY29sLmZpbGUvdGVzdG8iCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjc2MAorbXNnaWQgIiIKKyJcbiIKKyIganVtcCBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiIHNhbHQubGluZWEgY29sLmZpbGUvdGVzdG8iCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjgwNQorbXNnaWQgIiIKKyJcbiIKKyJjaGFuZ2UgbGluZSAgY29sIHRleHQiCittc2dzdHIgIiIKKyJcbiIKKyJtb2RpZiBsaW5lYSAgY29sIHRlc3RvIgorCisjOiBtYXJrLmM6MTI4MQorbXNnaWQgIiIKKyJcbiIKKyIjIEZpbGUgbWFya3M6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIEZpbGUgbWFyazpcbiIKKworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMzE2Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIEp1bXBsaXN0IChkYWkgcGn5IHJlY2VudGkpOlxuIgorCisjOiBtYXJrLmM6MTQxMgorbXNnaWQgIiIKKyJcbiIKKyIjIEhpc3Rvcnkgb2YgbWFya3Mgd2l0aGluIGZpbGVzIChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgU3RvcmlhIGRlaSBtYXJrIGFsbCdpbnRlcm5vIGRlaSBmaWxlcyAoZGFpIHBp+SByZWNlbnRpIGFpIG1lbm8gcmVjZW50aSk6XG4iCisKKyM6IG1hcmsuYzoxNTAxCittc2dpZCAiTWlzc2luZyAnPiciCittc2dzdHIgIk1hbmNhICc+JyIKKworIzogbWJ5dGUuYzo0NjcKK21zZ2lkICJFNTQzOiBOb3QgYSB2YWxpZCBjb2RlcGFnZSIKK21zZ3N0ciAiRTU0MzogQ29kZXBhZ2Ugbm9uIHZhbGlkbyIKKworIzogbWJ5dGUuYzo0NDMxCittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IE5vbiBwb3NzbyBhc3NlZ25hcmUgdmFsb3JpIElDIgorCisjOiBtYnl0ZS5jOjQ1ODMKK21zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCittc2dzdHIgIkUyODU6IENyZWF6aW9uZSBkaSB1biBjb250ZXN0byBkaSBpbnB1dCBmYWxsaXRhIgorCisjOiBtYnl0ZS5jOjQ3NDEKK21zZ2lkICJFMjg2OiBGYWlsZWQgdG8gb3BlbiBpbnB1dCBtZXRob2QiCittc2dzdHIgIkUyODY6IEFwZXJ0dXJhICdpbnB1dCBtZXRob2QnIGZhbGxpdGEiCisKKyM6IG1ieXRlLmM6NDc1MgorbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4NzogQXR0ZW56aW9uZTogTm9uIHBvc3NvIGFzc2VnbmFyZSBJTSBhICdkZXN0cm95IGNhbGxiYWNrJyIKKworIzogbWJ5dGUuYzo0NzU4Cittc2dpZCAiRTI4ODogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgc3R5bGUiCittc2dzdHIgIkUyODg6ICdpbnB1dCBtZXRob2QnIG5vbiBzb3Bwb3J0YSBhbGN1bm8gc3RpbGUiCisKKyM6IG1ieXRlLmM6NDgxNQorbXNnaWQgIkUyODk6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgbXkgcHJlZWRpdCB0eXBlIgorbXNnc3RyICJFMjg5OiAnaW5wdXQgbWV0aG9kJyBub24gc3VwcG9ydGEgaWwgbWlvIHRpcG8gZGkgcHJlZWRpdCIKKworIzogbWJ5dGUuYzo0ODg5Cittc2dpZCAiRTI5MDogb3Zlci10aGUtc3BvdCBzdHlsZSByZXF1aXJlcyBmb250c2V0IgorbXNnc3RyICJFMjkwOiBzdGlsZSAnb3Zlci10aGUtc3BvdCcgcmljaGllZGUgZm9udHNldCIKKworIzogbWJ5dGUuYzo0OTI1Cittc2dpZCAiRTI5MTogWW91ciBHVEsrIGlzIG9sZGVyIHRoYW4gMS4yLjMuIFN0YXR1cyBhcmVhIGRpc2FibGVkIgorbXNnc3RyICIiCisiRTI5MTogSWwgdHVvIEdUSysg6CBhbnRlcmlvcmUgYSB2ZXJzaW9uZSAxLjIuMy4gQXJlYSBTdGF0dXMgZGlzYWJpbGl0YXRhIgorCisjOiBtYnl0ZS5jOjUyMzIKK21zZ2lkICJFMjkyOiBJbnB1dCBNZXRob2QgU2VydmVyIGlzIG5vdCBydW5uaW5nIgorbXNnc3RyICJFMjkyOiBTZXJ2ZXIgZGkgJ0lucHV0IE1ldGhvZCcgbm9uIGluIGVzZWN1emlvbmUiCisKKyM6IG1lbWZpbGUuYzo0ODgKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5MzogaWwgYmxvY2NvIG5vbiBlcmEgcmlzZXJ2YXRvIgorCisjOiBtZW1maWxlLmM6MTAxMAorbXNnaWQgIkUyOTQ6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHJlYWQiCittc2dzdHIgIkUyOTQ6IEVycm9yZSBkaSBwb3NpemlvbmFtZW50byBkdXJhbnRlIGxldHR1cmEgc3dhcCBmaWxlIgorCisjOiBtZW1maWxlLmM6MTAxNQorbXNnaWQgIkUyOTU6IFJlYWQgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk1OiBFcnJvcmUgbGVnZ2VuZG8gc3dhcCBmaWxlIgorCisjOiBtZW1maWxlLmM6MTA2NworbXNnaWQgIkUyOTY6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHdyaXRlIgorbXNnc3RyICJFMjk2OiBFcnJvcmUgZGkgcG9zaXppb25hbWVudG8gc2NyaXZlbmRvIHN3YXAgZmlsZSIKKworIzogbWVtZmlsZS5jOjEwODUKK21zZ2lkICJFMjk3OiBXcml0ZSBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTc6IEVycm9yZSBzY3JpdmVuZG8gc3dhcCBmaWxlIgorCisjOiBtZW1maWxlLmM6MTI4MgorbXNnaWQgIkUzMDA6IFN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyAoc3ltbGluayBhdHRhY2s/KSIKK21zZ3N0ciAiRTMwMDogTG8gc3dhcCBmaWxlIGVzaXN0ZSBnaeAgKHVuIGxpbmsgc2ltYm9saWNvPykiCisKKyM6IG1lbWxpbmUuYzoyNzUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDA/IgorbXNnc3RyICJFMjk4OiBOb24gcmllc2NvIGEgbGVnZ2VyZSBibG9jY28gbnVtZXJvIDA/IgorCisjOiBtZW1saW5lLmM6MzE1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAxPyIKK21zZ3N0ciAiRTI5ODogTm9uIHJpZXNjbyBhIGxlZ2dlcmUgYmxvY2NvIG51bWVybyAxPyIKKworIzogbWVtbGluZS5jOjMzMworbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMj8iCittc2dzdHIgIkUyOTg6IE5vbiByaWVzY28gYSBsZWdnZXJlIGJsb2NjbyBudW1lcm8gMj8iCisKKyMuIGNvdWxkIG5vdCAocmUpb3BlbiB0aGUgc3dhcCBmaWxlLCB3aGF0IGNhbiB3ZSBkbz8/Pz8KKyM6IG1lbWxpbmUuYzo0NDQKK21zZ2lkICJFMzAxOiBPb3BzLCBsb3N0IHRoZSBzd2FwIGZpbGUhISEiCittc2dzdHIgIkUzMDE6IEFoaW3oLCBsbyBzd2FwIGZpbGUg6CBwZXJkdXRvISEhIgorCisjOiBtZW1saW5lLmM6NDQ5Cittc2dpZCAiRTMwMjogQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDI6IE5vbiByaWVzY28gYSByaW5vbWluYXJlIGxvIHN3YXAgZmlsZSIKKworIzogbWVtbGluZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIKK21zZ3N0ciAiIgorIkUzMDM6IE5vbiByaWVzY28gYWQgYXByaWxlIGxvIHN3YXAgZmlsZSBwZXIgXCIlc1wiLCByZWN1cGVybyBpbXBvc3NpYmxlIgorCisjOiBtZW1saW5lLmM6NjE4Cittc2dpZCAiRTMwNDogbWxfdGltZXN0YW1wOiBEaWRuJ3QgZ2V0IGJsb2NrIDA/PyIKK21zZ3N0ciAiRTMwNDogbWxfdGltZXN0YW1wOiBOb24gcmllc2NvIGEgbGVnZ2VyZSBibG9jY28gMD8/IgorCisjOiBtZW1saW5lLmM6NzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDU6IE5vIHN3YXAgZmlsZSBmb3VuZCBmb3IgJXMiCittc2dzdHIgIkUzMDU6IE5lc3N1biBzd2FwIGZpbGUgdHJvdmF0byBwZXIgJXMiCisKKyM6IG1lbWxpbmUuYzo3NjgKK21zZ2lkICJFbnRlciBudW1iZXIgb2Ygc3dhcCBmaWxlIHRvIHVzZSAoMCB0byBxdWl0KTogIgorbXNnc3RyICJEaW1taSBudW1lcm8gZGkgc3dhcCBmaWxlIGRhIHVzYXJlICgwIHBlciBsYXNjaWFyIHBlcmRlcmUpOiAiCisKKyM6IG1lbWxpbmUuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNjogQ2Fubm90IG9wZW4gJXMiCittc2dzdHIgIkUzMDY6IE5vbiByaWVzY28gYWQgYXByaXJlICVzIgorCisjOiBtZW1saW5lLmM6ODM1Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgYmxvY2sgMCBmcm9tICIKK21zZ3N0ciAiTm9uIHJpZXNjbyBhIGxlZ2dlcmUgaWwgYmxvY2NvIDAgZGEgIgorCisjOiBtZW1saW5lLmM6ODM4Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIkZvcnNlIG5vbiBjaSBzb25vIHN0YXRlIG1vZGlmaWNoZSBvcHB1cmUgVmltIG5vbiBoYSBhZ2dpb3JuYXRvIGxvIHN3YXAgZmlsZS4iCisKKyM6IG1lbWxpbmUuYzo4NDggbWVtbGluZS5jOjg2NQorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW0uXG4iCittc2dzdHIgIiBub24gcHXyIGVzc2VyZSB1c2F0byBjb24gcXVlc3RhIHZlcnNpb25lIGRpIFZpbS5cbiIKKworIzogbWVtbGluZS5jOjg1MAorbXNnaWQgIlVzZSBWaW0gdmVyc2lvbiAzLjAuXG4iCittc2dzdHIgIlVzYSBWaW0gdmVyc2lvbmUgMy4wLlxuIgorCisjOiBtZW1saW5lLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDc6ICVzIG5vbiBzZW1icmEgdW5vIHN3YXAgZmlsZSBWaW0iCisKKyM6IG1lbWxpbmUuYzo4NjkKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgb24gdGhpcyBjb21wdXRlci5cbiIKK21zZ3N0ciAiIG5vbiBwdfIgZXNzZXJlIHVzYXRvIHN1IHF1ZXN0byBjb21wdXRlci5cbiIKKworIzogbWVtbGluZS5jOjg3MQorbXNnaWQgIlRoZSBmaWxlIHdhcyBjcmVhdGVkIG9uICIKK21zZ3N0ciAiSWwgZmlsZSDoIHN0YXRvIGNyZWF0byBpbCAiCisKKyM6IG1lbWxpbmUuYzo4NzUKK21zZ2lkICIiCisiLFxuIgorIm9yIHRoZSBmaWxlIGhhcyBiZWVuIGRhbWFnZWQuIgorbXNnc3RyICIiCisiLFxuIgorIm8gaWwgZmlsZSDoIHN0YXRvIGRhbm5lZ2dpYXRvLiIKKworIzogbWVtbGluZS5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIgorbXNnc3RyICJVc28gc3dhcCBmaWxlIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJPcmlnaW5hbCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRmlsZSBvcmlnaW5hbGUgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTIzCittc2dpZCAiRTMwODogV2FybmluZzogT3JpZ2luYWwgZmlsZSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQiCittc2dzdHIgIiIKKyJFMzA4OiBBdHRlbnppb25lOiBpbCBmaWxlIG9yaWdpbmFsZSBwdfIgZXNzZXJlIHN0YXRvIG1vZGlmaWNhdG8gbmVsIGZyYXR0ZW1wbyIKKworIzogbWVtbGluZS5jOjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6IEltcG9zc2liaWxlIGxlZ2dlcmUgYmxvY2NvIDEgZGEgJXMiCisKKyM6IG1lbWxpbmUuYzo5ODAKK21zZ2lkICI/Pz9NQU5ZIExJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P01PTFRFIExJTkVFIE1BTkNBTlRJIgorCisjOiBtZW1saW5lLmM6OTk2Cittc2dpZCAiPz8/TElORSBDT1VOVCBXUk9ORyIKK21zZ3N0ciAiPz8/Q09OVEFUT1JFIExJTkVFIEVSUkFUTyIKKworIzogbWVtbGluZS5jOjEwMDMKK21zZ2lkICI/Pz9FTVBUWSBCTE9DSyIKK21zZ3N0ciAiPz8/QkxPQ0NPIFZVT1RPIgorCisjOiBtZW1saW5lLmM6MTAyOQorbXNnaWQgIj8/P0xJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P0xJTkVFIE1BTkNBTlRJIgorCisjOiBtZW1saW5lLmM6MTA2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzEwOiBCbG9jayAxIElEIHdyb25nICglcyBub3QgYSAuc3dwIGZpbGU/KSIKK21zZ3N0ciAiRTMxMDogSUQgZGVsIEJsb2NjbyAxIGVycmF0byAoY2hlICVzIG5vbiBzaWEgdW4gLnN3cCBmaWxlPykiCisKKyM6IG1lbWxpbmUuYzoxMDY2Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/QkxPQ0NPIE1BTkNBTlRFIgorCisjOiBtZW1saW5lLmM6MTA4MgorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBiZSBtZXNzZWQgdXAiCittc2dzdHIgIj8/PyBkYSBxdWkgZmlubyBhID8/P0VORCBsZSBsaW5lZSBwb3Nzb25vIGVzc2VyZSBmdW9yaSBvcmRpbmUiCisKKyM6IG1lbWxpbmUuYzoxMDk4Cittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGhhdmUgYmVlbiBpbnNlcnRlZC9kZWxldGVkIgorbXNnc3RyICIiCisiPz8/IGRhIHF1aSBmaW5vIGEgPz8/RU5EIGxpbmVlIHBvc3Nvbm8gZXNzZXJlIHN0YXRlIGluc2VyaXRlL2NhbmNlbGxhdGUiCisKKyM6IG1lbWxpbmUuYzoxMTE4Cittc2dpZCAiPz8/RU5EIgorbXNnc3RyICI/Pz9FTkQiCisKKyM6IG1lbWxpbmUuYzoxMTQ0Cittc2dpZCAiRTMxMTogUmVjb3ZlcnkgSW50ZXJydXB0ZWQiCittc2dzdHIgIkUzMTE6IFJlY3VwZXJvIEludGVycm90dG8iCisKKyM6IG1lbWxpbmUuYzoxMTQ5Cittc2dpZCAiIgorIkUzMTI6IEVycm9ycyBkZXRlY3RlZCB3aGlsZSByZWNvdmVyaW5nOyBsb29rIGZvciBsaW5lcyBzdGFydGluZyB3aXRoID8/PyIKK21zZ3N0ciAiRTMxMjogRXJyb3JpIGR1cmFudGUgcmVjdXBlcm87IGNvbnRyb2xsYSBsaW5lZSBjaGUgaW5pemlhbm8gY29uID8/PyIKKworIzogbWVtbGluZS5jOjExNTEKK21zZ2lkICJTZWUgXCI6aGVscCBFMzEyXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICJWZWRlcmUgXCI6aGVscCBFMzEyXCIgcGVyIHVsdGVyaW9yaSBpbmZvcm1hemlvbmkuIgorCisjOiBtZW1saW5lLmM6MTE1NgorbXNnaWQgIlJlY292ZXJ5IGNvbXBsZXRlZC4gWW91IHNob3VsZCBjaGVjayBpZiBldmVyeXRoaW5nIGlzIE9LLiIKK21zZ3N0ciAiUmVjdXBlcm8gY29tcGxldGF0by4gRG92cmVzdGkgY29udHJvbGxhcmUgc2UgdmEgdHV0dG8gYmVuZS4iCisKKyM6IG1lbWxpbmUuYzoxMTU3Cittc2dpZCAiIgorIlxuIgorIihZb3UgbWlnaHQgd2FudCB0byB3cml0ZSBvdXQgdGhpcyBmaWxlIHVuZGVyIGFub3RoZXIgbmFtZVxuIgorbXNnc3RyICIiCisiXG4iCisiKFBvdHJlc3RpIHNhbHZhcmUgcXVlc3RvIGZpbGUgY29uIHVuIGFsdHJvIG5vbWUgZWQgZXNlZ3VpcmVcbiIKKworIzogbWVtbGluZS5jOjExNTgKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAiJ2RpZmYnIHJpc3BldHRvIGFsIGZpbGUgb3JpZ2luYWxlIHBlciB2ZWRlcmUgbGUgZGlmZmVyZW56ZSlcbiIKKworIzogbWVtbGluZS5jOjExNTkKK21zZ2lkICIiCisiRGVsZXRlIHRoZSAuc3dwIGZpbGUgYWZ0ZXJ3YXJkcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkNhbmNlbGxhIGlsIGZpbGUgLnN3cCBpbiBzZWd1aXRvLlxuIgorIlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMTUKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAiU3dhcCBmaWxlIHRyb3ZhdGk6IgorCisjOiBtZW1saW5lLmM6MTM5MworbXNnaWQgIiAgIEluIGN1cnJlbnQgZGlyZWN0b3J5OlxuIgorbXNnc3RyICIgICBOZWxsYSBkaXJlY3RvcnkgaW4gdXNvOlxuIgorCisjOiBtZW1saW5lLmM6MTM5NQorbXNnaWQgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorbXNnc3RyICIgICBVc28gaWwgbm9tZSBmb3JuaXRvOlxuIgorCisjOiBtZW1saW5lLmM6MTM5OQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIE5lbGxhIGRpcmVjdG9yeSAiCisKKyM6IG1lbWxpbmUuYzoxNDE3Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgICAtLSBuZXNzdW5vIC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDg5Cittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgIHByb3ByaWV0YXJpbzogIgorCisjOiBtZW1saW5lLmM6MTQ5MQorbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgZGF0YXRvOiAiCisKKyM6IG1lbWxpbmUuYzoxNDk1IG1lbWxpbmUuYzozNjg1Cittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgIGRhdGF0bzogIgorCisjOiBtZW1saW5lLmM6MTUxMQorbXNnaWQgIiAgICAgICAgIFtmcm9tIFZpbSB2ZXJzaW9uIDMuMF0iCittc2dzdHIgIiAgICAgICAgIFtkYSBWaW0gdmVyc2lvbmUgMy4wXSIKKworIzogbWVtbGluZS5jOjE1MTUKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgW25vbiBhc3NvbWlnbGlhIGFkIHVubyBzd2FwIGZpbGUgVmltXSIKKworIzogbWVtbGluZS5jOjE1MTkKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgICAgbm9tZSBmaWxlOiAiCisKKyM6IG1lbWxpbmUuYzoxNTI1Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgICBtb2RpZmllZDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICBtb2RpZmljYXRvOiAiCisKKyM6IG1lbWxpbmUuYzoxNTI2Cittc2dpZCAiWUVTIgorbXNnc3RyICJZRVMiCisKKyM6IG1lbWxpbmUuYzoxNTI2Cittc2dpZCAibm8iCittc2dzdHIgIm5vIgorCisjOiBtZW1saW5lLmM6MTUzMAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICB1c2VyIG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICBub21lIHV0ZW50ZTogIgorCisjOiBtZW1saW5lLmM6MTUzNworbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgICBub21lIGNvbXB1dGVyOiAiCisKKyM6IG1lbWxpbmUuYzoxNTM5Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgIG5vbWUgY29tcHV0ZXI6ICIKKworIzogbWVtbGluZS5jOjE1NDUKK21zZ2lkICIiCisiXG4iCisiICAgICAgICBwcm9jZXNzIElEOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICBJRCBkZWwgcHJvY2Vzc286ICIKKworIzogbWVtbGluZS5jOjE1NTEKK21zZ2lkICIgKHN0aWxsIHJ1bm5pbmcpIgorbXNnc3RyICIgKGFuY29yYSBhdHRpdm8pIgorCisjOiBtZW1saW5lLmM6MTU2MworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW1dIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgW25vbiB1dGlsaXp6YWJpbGUgY29uIHF1ZXN0YSB2ZXJzaW9uZSBkaSBWaW1dIgorCisjOiBtZW1saW5lLmM6MTU2NgorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSBvbiB0aGlzIGNvbXB1dGVyXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXRpbGl6emFiaWxlIHN1IHF1ZXN0byBjb21wdXRlcl0iCisKKyM6IG1lbWxpbmUuYzoxNTcxCittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSByZWFkXSIKK21zZ3N0ciAiICAgICAgICAgIFtub24gbGVnZ2liaWxlXSIKKworIzogbWVtbGluZS5jOjE1NzUKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIG9wZW5lZF0iCittc2dzdHIgIiAgICAgW25vbiByaWVzY28gYWQgYXByaXJlXSIKKworIzogbWVtbGluZS5jOjE3NjUKK21zZ2lkICJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMxMzogTm9uIHBvc3NvIHByZXNlcnZhcmUsIG1hbmNhIHN3YXAgZmlsZSIKKworIzogbWVtbGluZS5jOjE4MTgKK21zZ2lkICJGaWxlIHByZXNlcnZlZCIKK21zZ3N0ciAiRmlsZSBwcmVzZXJ2YXRvIgorCisjOiBtZW1saW5lLmM6MTgyMAorbXNnaWQgIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIKK21zZ3N0ciAiRTMxNDogUHJlc2VydmF6aW9uZSBmYWxsaXRhIgorCisjOiBtZW1saW5lLmM6MTg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE1OiBtbF9nZXQ6IGludmFsaWQgbG51bTogJWxkIgorbXNnc3RyICJFMzE1OiBtbF9nZXQ6IG51bWVybyBsaW5lYSBub24gdmFsaWRvOiAlbGQiCisKKyM6IG1lbWxpbmUuYzoxOTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTY6IG1sX2dldDogY2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMTY6IG1sX2dldDogbm9uIHJpZXNjbyBhIHRyb3ZhcmUgbGEgbGluZWEgJWxkIgorCisjOiBtZW1saW5lLmM6MjMwNworbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAiRTMxNzogSUQgYmxvY2NvIHB1bnRhdG9yaSBlcnJhdG8gMyIKKworIzogbWVtbGluZS5jOjIzODcKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCBkb3ZyZWJiZSBlc3NlcmUgMCIKKworIzogbWVtbGluZS5jOjI0NDkKK21zZ2lkICJFMzE4OiBVcGRhdGVkIHRvbyBtYW55IGJsb2Nrcz8iCittc2dzdHIgIkUzMTg6IEFnZ2lvcm5hdGkgdHJvcHBpIGJsb2NjaGk/IgorCisjOiBtZW1saW5lLmM6MjYzMQorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgNCIKK21zZ3N0ciAiRTMxNzogSUQgYmxvY2NvIHB1bnRhdG9yaSBlcnJhdG8gNCIKKworIzogbWVtbGluZS5jOjI2NTgKK21zZ2lkICJkZWxldGVkIGJsb2NrIDE/IgorbXNnc3RyICJjYW5jZWxsYXRvIGJsb2NjbyAxPyIKKworIzogbWVtbGluZS5jOjI4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6IE5vbiByaWVzY28gYSB0cm92YXJlIGxhIGxpbmVhICVsZCIKKworIzogbWVtbGluZS5jOjMxMDEKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIgorbXNnc3RyICJFMzE3OiBJRCBibG9jY28gcHVudGF0b3JpIGVycmF0byIKKworIzogbWVtbGluZS5jOjMxMTcKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgInBlX2xpbmVfY291bnQgYSB6ZXJvIgorCisjOiBtZW1saW5lLmM6MzE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIyOiBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVsZCBwYXN0IHRoZSBlbmQiCittc2dzdHIgIkUzMjI6IG51bWVybyBsaW5lYSBub24gYW1taXNzaWJpbGU6ICVsZCBkb3BvIGxhIGZpbmUiCisKKyM6IG1lbWxpbmUuYzozMTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjM6IGxpbmUgY291bnQgd3JvbmcgaW4gYmxvY2sgJWxkIgorbXNnc3RyICJFMzIzOiBjb250YXRvcmUgbGluZWUgZXJyYXRvIG5lbCBibG9jY28gJWxkIgorCisjOiBtZW1saW5lLmM6MzE5OQorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICJEaW1lbnNpb25lICdzdGFjaycgYXVtZW50YXRhIgorCisjOiBtZW1saW5lLmM6MzI0NQorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMiIKK21zZ3N0ciAiRTMxNzogSUQgYmxvY2NvIHB1bnRhdG9yaSBlcnJhdG8gMiIKKworIzogbWVtbGluZS5jOjM2NzUKK21zZ2lkICJFMzI1OiBBVFRFTlRJT04iCittc2dzdHIgIkUzMjU6IEFUVEVOWklPTkUiCisKKyM6IG1lbWxpbmUuYzozNjc2Cittc2dpZCAiIgorIlxuIgorIkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIgorbXNnc3RyICIiCisiXG4iCisiVHJvdmF0byB1bm8gc3dhcCBmaWxlIGRpIG5vbWUgXCIiCisKKyM6IG1lbWxpbmUuYzozNjgwCittc2dpZCAiV2hpbGUgb3BlbmluZyBmaWxlIFwiIgorbXNnc3RyICJNZW50cmUgYXByaXZvIGZpbGUgXCIiCisKKyM6IG1lbWxpbmUuYzozNjg5Cittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgIHBp+SBSRUNFTlRFIGRlbGxvIHN3YXAgZmlsZSFcbiIKKworIy4gU29tZSBvZiB0aGVzZSBtZXNzYWdlcyBhcmUgbG9uZyB0byBhbGxvdyB0cmFuc2xhdGlvbiB0bworIy4gKiBvdGhlciBsYW5ndWFnZXMuCisjOiBtZW1saW5lLmM6MzY5MworbXNnaWQgIiIKKyJcbiIKKyIoMSkgQW5vdGhlciBwcm9ncmFtIG1heSBiZSBlZGl0aW5nIHRoZSBzYW1lIGZpbGUuXG4iCisiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIGJlIGNhcmVmdWwgbm90IHRvIGVuZCB1cCB3aXRoIHR3b1xuIgorIiAgICBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGZpbGUgd2hlbiBtYWtpbmcgY2hhbmdlcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigxKSBVbiBhbHRybyBwcm9ncmFtbWEgcHXyIGVzc2VyZSBpbiBlZGl0IHN1bGxvIHN0ZXNzbyBmaWxlLlxuIgorIiAgICBTZSDoIGNvc+wsIGF0dGVuemlvbmUgYSBub24gdHJvdmFydGkgY29uIGR1ZSB2ZXJzaW9uaVxuIgorIiAgICBkaWZmZXJlbnRpIGRlbGxvIHN0ZXNzbyBmaWxlIGEgY3VpIHZlbmdvbm8gYXBwb3J0YXRlIG1vZGlmaWNoZS5cbiIKKworIzogbWVtbGluZS5jOjM2OTQKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgRXNjaSwgbyBjb250aW51YSBjb24gcHJ1ZGVuemEuXG4iCisKKyM6IG1lbWxpbmUuYzozNjk1Cittc2dpZCAiIgorIlxuIgorIigyKSBBbiBlZGl0IHNlc3Npb24gZm9yIHRoaXMgZmlsZSBjcmFzaGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDIpIFVuYSBzZXNzaW9uZSBkaSBlZGl0IHBlciBxdWVzdG8gZmlsZSDoIGZpbml0YSBtYWxlLlxuIgorCisjOiBtZW1saW5lLmM6MzY5NgorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIFNlIOggY29z7CwgdXNhIFwiOnJlY292ZXJcIiBvcHB1cmUgXCJ2aW0gLXIgIgorCisjOiBtZW1saW5lLmM6MzY5OAorbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byByZWNvdmVyIHRoZSBjaGFuZ2VzIChzZWUgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIHBlciByZWN1cGVyYXJlIG1vZGlmaWNoZSBmYXR0ZSAodmVkaSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorCisjOiBtZW1saW5lLmM6MzY5OQorbXNnaWQgIiAgICBJZiB5b3UgZGlkIHRoaXMgYWxyZWFkeSwgZGVsZXRlIHRoZSBzd2FwIGZpbGUgXCIiCittc2dzdHIgIiAgICBTZSBoYWkgZ2ngIGZhdHRvIGNp8iwgY2FuY2VsbGEgaWwgZmlsZSBkaSBzd2FwIFwiIgorCisjOiBtZW1saW5lLmM6MzcwMQorbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byBhdm9pZCB0aGlzIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICBwZXIgbm9uIHJpY2V2ZXJlIGFuY29yYSBxdWVzdG8gbWVzc2FnZ2lvLlxuIgorCisjOiBtZW1saW5lLmM6MzcxNSBtZW1saW5lLmM6MzcxOQorbXNnaWQgIlN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiU3dhcCBmaWxlIFwiIgorCisjOiBtZW1saW5lLmM6MzcxNiBtZW1saW5lLmM6MzcyMgorbXNnaWQgIlwiIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiXCIgZ2ngIGVzaXN0ZW50ZSEiCisKKyM6IG1lbWxpbmUuYzozNzI1Cittc2dpZCAiVklNIC0gQVRURU5USU9OIgorbXNnc3RyICJWSU0gLSBBVFRFTlpJT05FIgorCisjOiBtZW1saW5lLmM6MzcyNworbXNnaWQgIlN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIkxvIHN3YXAgZmlsZSBlc2lzdGUgZ2ngISIKKworIzogbWVtbGluZS5jOjM3MzEKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZBYm9ydCIKK21zZ3N0ciAiIgorIiZPIEFwcmkgc29sYS1sZXR0dXJhXG4iCisiJkUgQXByaSBjb211bnF1ZVxuIgorIiZSZWN1cGVyYVxuIgorIiZRIEVzY2lcbiIKKyImQW5udWxsYSIKKworIzogbWVtbGluZS5jOjM3MzMKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZBYm9ydFxuIgorIiZEZWxldGUgaXQiCittc2dzdHIgIiIKKyImTyBBcHJpIHNvbGEtbGV0dHVyYVxuIgorIiZFIEFwcmkgY29tdW5xdWVcbiIKKyImUmVjdXBlcmFcbiIKKyImUSBFc2NpXG4iCisiJkFubnVsbGFcbiIKKyImRCBDYW5jZWxsYWxvIgorCisjOiBtZW1saW5lLmM6Mzc5MAorbXNnaWQgIkUzMjY6IFRvbyBtYW55IHN3YXAgZmlsZXMgZm91bmQiCittc2dzdHIgIkUzMjY6IFRyb3ZhdGkgdHJvcHBpIHN3YXAgZmlsZSIKKworIzogbWVudS5jOjY0Cittc2dpZCAiRTMyNzogUGFydCBvZiBtZW51LWl0ZW0gcGF0aCBpcyBub3Qgc3ViLW1lbnUiCittc2dzdHIgIiIKKyJFMzI3OiBQYXJ0ZSBkZWwgcGVyY29yc28gZGkgcXVlc3RvIGVsZW1lbnRvIGRpIE1lbnUgbm9uIOggdW4gc290dG8tTWVudSIKKworIzogbWVudS5jOjY1Cittc2dpZCAiRTMyODogTWVudSBvbmx5IGV4aXN0cyBpbiBhbm90aGVyIG1vZGUiCittc2dzdHIgIkUzMjg6IEkgTWVudSBlc2lzdG9ubyBzb2xvIGluIHVuJ2FsdHJhIG1vZGFsaXTgIgorCisjOiBtZW51LmM6NjYKK21zZ2lkICJFMzI5OiBObyBtZW51IG9mIHRoYXQgbmFtZSIKK21zZ3N0ciAiRTMyOTogTmVzc3VuIE1lbnUgY29uIHF1ZWwgbm9tZSIKKworIzogbWVudS5jOjUyNQorbXNnaWQgIkUzMzA6IE1lbnUgcGF0aCBtdXN0IG5vdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzA6IElsIHBlcmNvcnNvIGRlbCBNZW51IG5vbiBkZXZlIGNvbmR1cnJlIGEgdW4gc290dG8tTWVudSIKKworIzogbWVudS5jOjU2NAorbXNnaWQgIkUzMzE6IE11c3Qgbm90IGFkZCBtZW51IGl0ZW1zIGRpcmVjdGx5IHRvIG1lbnUgYmFyIgorbXNnc3RyICIiCisiRTMzMTogTm9uIGRldmkgYWdnaXVuZ2VyZSBlbGVtZW50aSBkaSBNZW51IGRpcmV0dGFtZW50ZSBhbGxhIGJhcnJhIE1lbnUiCisKKyM6IG1lbnUuYzo1NzAKK21zZ2lkICJFMzMyOiBTZXBhcmF0b3IgY2Fubm90IGJlIHBhcnQgb2YgYSBtZW51IHBhdGgiCittc2dzdHIgIkUzMzI6IElsIHNlcGFyYXRvcmUgbm9uIHB18iBmYXIgcGFydGUgZGkgdW4gcGVyY29yc28gZGkgTWVudSIKKworIy4gTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtZW51LmM6MTA5NworbXNnaWQgIiIKKyJcbiIKKyItLS0gTWVudXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE1lbnUgLS0tIgorCisjOiBtZW51LmM6MjAxOQorbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAiVG9nbGkgcXVlc3RvIE1lbnUiCisKKyM6IG1lbnUuYzoyMDg0Cittc2dpZCAiRTMzMzogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIG1lbnUgaXRlbSIKK21zZ3N0ciAiRTMzMzogSWwgcGVyY29yc28gTWVudSBkZXZlIGNvbmR1cnJlIGFkIHVuIGVsZW1lbnRvIE1lbnUiCisKKyM6IG1lbnUuYzoyMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzQ6IE1lbnUgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTMzNDogTWVudSBub24gdHJvdmF0bzogJXMiCisKKyM6IG1lbnUuYzoyMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzU6IE1lbnUgbm90IGRlZmluZWQgZm9yICVzIG1vZGUiCittc2dzdHIgIkUzMzU6IE1lbnUgbm9uIGRlZmluaXRvIHBlciBsYSBtb2RhbGl04CAlcyIKKworIzogbWVudS5jOjIyMTEKK21zZ2lkICJFMzM2OiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzY6IElsIHBlcmNvcnNvIE1lbnUgZGV2ZSBjb25kdXJyZSBhZCB1biBzb3R0by1NZW51IgorCisjOiBtZW51LmM6MjIzMgorbXNnaWQgIkUzMzc6IE1lbnUgbm90IGZvdW5kIC0gY2hlY2sgbWVudSBuYW1lcyIKK21zZ3N0ciAiRTMzNzogTWVudSBub24gdHJvdmF0byAtIGNvbnRyb2xsYSBub21pIE1lbnUiCisKKyM6IG1lc3NhZ2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZyAlczoiCittc2dzdHIgIkVycm9yZS9pIGVzZWd1ZW5kbyAlczoiCisKKyM6IG1lc3NhZ2UuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlNGxkOiIKK21zZ3N0ciAibGluZWEgJTRsZDoiCisKKyM6IG1lc3NhZ2UuYzo2NDcKK21zZ2lkICJbc3RyaW5nIHRvbyBsb25nXSIKK21zZ3N0ciAiW3N0cmluZ2EgdHJvcHBvIGx1bmdhXSIKKworIzogbWVzc2FnZS5jOjc5NworbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorbXNnc3RyICJNYW51dGVudG9yZSBtZXNzYWdnaTogVmxhZCBTYW5kcmluaSA8bWFyY29Ac2FuZHJpbmkuYml6PiIKKworIzogbWVzc2FnZS5jOjEwMjUKK21zZ2lkICJJbnRlcnJ1cHQ6ICIKK21zZ3N0ciAiSW50ZXJydXppb25lOiAiCisKKyM6IG1lc3NhZ2UuYzoxMDI4Cittc2dpZCAiSGl0IEVOVEVSIHRvIGNvbnRpbnVlIgorbXNnc3RyICJJTlZJTyBwZXIgcHJvc2VndWlyZSIKKworIzogbWVzc2FnZS5jOjEwMzAKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICJCYXR0aSBJTlZJTyBvIHVuIGNvbWFuZG8gcGVyIHByb3NlZ3VpcmUiCisKKyM6IG1lc3NhZ2UuYzoyMzUxCittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0gQW5jb3JhIC0tIgorCisjOiBtZXNzYWdlLmM6MjM1NAorbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiBsaW5lYSwgU1BBWklPL2I6IHBhZ2luYSwgZC91OiBtZXp6YSBwYWdpbmEsIHE6IGVzY2kpIgorCisjOiBtZXNzYWdlLmM6MjM1NQorbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQ6IGxpbmVhLCBTUEFaSU86IHBhZ2luYSwgZDogbWV6emEgcGFnaW5hLCBxOiBlc2NpKSIKKworIzogbWVzc2FnZS5jOjI5ODIgbWVzc2FnZS5jOjI5OTcKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAiRG9tYW5kYSIKKworIzogbWVzc2FnZS5jOjI5ODQKK21zZ2lkICIiCisiJlllc1xuIgorIiZObyIKK21zZ3N0ciAiIgorIiZZIFPsXG4iCisiJk5vIgorCisjOiBtZXNzYWdlLmM6MzAxNworbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZZIFPsXG4iCisiJk5vXG4iCisiJkEgU2FsdmEgdHV0dG9cbiIKKyImRCBTY2FydGEgVHV0dG9cbiIKKyImQ2FuY2VsbGEiCisKKyM6IG1lc3NhZ2UuYzozMDU4Cittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAiU2FsdmEgRmlsZSBkaWFsb2dvIgorCisjOiBtZXNzYWdlLmM6MzA2MAorbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIkFwcmkgRmlsZSBkaWFsb2dvIgorCisjLiBUT0RPOiBub24tR1VJIGZpbGUgc2VsZWN0b3IgaGVyZQorIzogbWVzc2FnZS5jOjMxMzEKK21zZ2lkICJFMzM4OiBTb3JyeSwgbm8gZmlsZSBicm93c2VyIGluIGNvbnNvbGUgbW9kZSIKK21zZ3N0ciAiRTMzODogU3BpYWNlbnRlLCBuaWVudGUgZXNwbG9yYXppb25lIGZpbGUgaW4gbW9kYWxpdOAgY29uc29sZSIKKworIzogbWlzYzEuYzoyNzczCittc2dpZCAiVzEwOiBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiCittc2dzdHIgIlcxMDogQXR0ZW56aW9uZTogTW9kaWZpY2EgYSB1biBmaWxlIGluIHNvbGEtbGV0dHVyYSIKKworIzogbWlzYzEuYzozMDIxCittc2dpZCAiMSBtb3JlIGxpbmUiCittc2dzdHIgIjEgbGluZWEgaW4gcGn5IgorCisjOiBtaXNjMS5jOjMwMjMKK21zZ2lkICIxIGxpbmUgbGVzcyIKK21zZ3N0ciAiMSBsaW5lYSBpbiBtZW5vIgorCisjOiBtaXNjMS5jOjMwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIG1vcmUgbGluZXMiCittc2dzdHIgIiVsZCBsaW5lZSBpbiBwafkiCisKKyM6IG1pc2MxLmM6MzAzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgZmV3ZXIgbGluZXMiCittc2dzdHIgIiVsZCBsaW5lZSBpbiBtZW5vIgorCisjOiBtaXNjMS5jOjMwMzMKK21zZ2lkICIgKEludGVycnVwdGVkKSIKK21zZ3N0ciAiIChJbnRlcnJvdHRvKSIKKworIzogbWlzYzEuYzo3NTg4Cittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTogcHJlc2Vydm8gZmlsZS4uLlxuIgorCisjLiBjbG9zZSBhbGwgbWVtZmlsZXMsIHdpdGhvdXQgZGVsZXRpbmcKKyM6IG1pc2MxLmM6NzU5OAorbXNnaWQgIlZpbTogRmluaXNoZWQuXG4iCittc2dzdHIgIlZpbTogRmluaXRvLlxuIgorCisjOiBtaXNjMi5jOjY5NSBtaXNjMi5jOjcxMQorbXNnaWQgIkVSUk9SOiAiCittc2dzdHIgIkVSUk9SRTogIgorCisjOiBtaXNjMi5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiW2J5dGVzXSB0b3RhbCBhbGxvYy1mcmVlZCAlbHUtJWx1LCBpbiB1c2UgJWx1LCBwZWFrIHVzZSAlbHVcbiIKK21zZ3N0ciAiIgorIlxuIgorIltieXRlc10gdG90YWxpIGFsbG9jLXJpbGFzYyAlbHUtJWx1LCBpbiB1c28gJWx1LCBtYXggdXNvICVsdVxuIgorCisjOiBtaXNjMi5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiW2NhbGxzXSB0b3RhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWwgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCittc2dzdHIgIiIKKyJbY2hpYW1hdGVdIHRvdGFsZSByZS9tYWxsb2MoKSAlbHUsIHRvdGFsZSBmcmVlKCkgJWx1XG4iCisiXG4iCisKKyM6IG1pc2MyLmM6NzcyCittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDogTGEgbGluZWEgc3RhIGRpdmVudGFuZG8gdHJvcHBvIGx1bmdhIgorCisjOiBtaXNjMi5jOjgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQxOiBJbnRlcm5hbCBlcnJvcjogbGFsbG9jKCVsZCwgKSIKK21zZ3N0ciAiRTM0MTogRXJyb3JlIGludGVybm86IGxhbGxvYyglbGQsICkiCisKKyM6IG1pc2MyLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDI6IE91dCBvZiBtZW1vcnkhICAoYWxsb2NhdGluZyAlbHUgYnl0ZXMpIgorbXNnc3RyICJFMzQyOiBOb24gYyfoIHBp+SBtZW1vcmlhISAoc3Rhdm8gYWxsb2NhbmRvICVsdSBieXRlcykiCisKKyM6IG1pc2MyLmM6MjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAiQ2hpYW1vIGxvIHNoZWxsIHBlciBlc2VndWlyZTogXCIlc1wiIgorCisjOiBtaXNjMi5jOjI4MTYKK21zZ2lkICJFNTQ1OiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTQ1OiBNYW5jYSAnOiciCisKKyM6IG1pc2MyLmM6MjgxOCBtaXNjMi5jOjI4NDUKK21zZ2lkICJFNTQ2OiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkU1NDY6IE1vZGFsaXTgIG5vbiB2YWxpZGEiCisKKyM6IG1pc2MyLmM6Mjg4NAorbXNnaWQgIkU1NDc6IElsbGVnYWwgbW91c2VzaGFwZSIKK21zZ3N0ciAiRTU0NzogRm9ybWEgZGVsIG1vdXNlIG5vbiB2YWxpZGEiCisKKyM6IG1pc2MyLmM6MjkyNAorbXNnaWQgIkU1NDg6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTQ4OiBhc3BldHRhdm8gdW4gbnVtZXJvIgorCisjOiBtaXNjMi5jOjI5MjkKK21zZ2lkICJFNTQ5OiBJbGxlZ2FsIHBlcmNlbnRhZ2UiCittc2dzdHIgIkU1NDk6IFBlcmNlbnR1YWxlIG5vbiB2YWxpZGEiCisKKyM6IG1pc2MyLmM6MzIzOQorbXNnaWQgIkVudGVyIGVuY3J5cHRpb24ga2V5OiAiCittc2dzdHIgIkltbWV0dGkgY2hpYXZlIGRpIGNyaXR0YXppb25lOiAiCisKKyM6IG1pc2MyLmM6MzI0MAorbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIlJpYmF0dGkgcGVyIGNvbmZlcm1hIGxhIHN0ZXNzYSBjaGlhdmU6ICIKKworIzogbWlzYzIuYzozMjUwCittc2dpZCAiS2V5cyBkb24ndCBtYXRjaCEiCittc2dzdHIgIkxlIGNoaWF2aSBub24gY29ycmlzcG9uZG9ubyEiCisKKyM6IG1pc2MyLmM6Mzc5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTM0MzogSW52YWxpZCBwYXRoOiAnKipbbnVtYmVyXScgbXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIG9yIGJlICIKKyJmb2xsb3dlZCBieSAnJXMnLiIKK21zZ3N0ciAiIgorIkUzNDM6IFBlcmNvcnNvIG5vbiB2YWxpZG86ICcqKltudW1lcm9dJyBkZXZlIGVzc2VyZSBhIGZpbmUgcGVyY29yc28gbyBlc3NlcmUgIgorInNlZ3VpdG8gZGEgJyVzJy4iCisKKyM6IG1pc2MyLmM6NTA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ0OiBDYW4ndCBmaW5kIGRpcmVjdG9yeSBcIiVzXCIgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ0OiBOb24gcmllc2NvIGEgdHJvdmFyZSBsYSBkaXJlY3RvcnkgXCIlc1wiIG5lbCAnY2RwYXRoJyIKKworIzogbWlzYzIuYzo1MDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDU6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NTogTm9uIHJpZXNjbyBhIHRyb3ZhcmUgaWwgZmlsZSBcIiVzXCIgbmVsIHBlcmNvcnNvIgorCisjOiBtaXNjMi5jOjUwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NjogTm8gbW9yZSBkaXJlY3RvcnkgXCIlc1wiIGZvdW5kIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NjogTmVzc3VuIGFsdHJhIGRpcmVjdG9yeSBcIiVzXCIgdHJvdmF0YSBuZWwgJ2NkcGF0aCciCisKKyM6IG1pc2MyLmM6NTA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ3OiBObyBtb3JlIGZpbGUgXCIlc1wiIGZvdW5kIGluIHBhdGgiCittc2dzdHIgIkUzNDc6IE5lc3N1biBhbHRybyBmaWxlIFwiJXNcIiB0cm92YXRvIG5lbCBwZXJjb3JzbyIKKworIzogbWlzYzIuYzo1MzI0Cittc2dpZCAiRTU1MDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU1MDogTWFuY2EgJzonIgorCisjOiBtaXNjMi5jOjUzMzYKK21zZ2lkICJFNTUxOiBJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAiRTU1MTogQ29tcG9uZW50ZSBub24gdmFsaWRvIgorCisjOiBtaXNjMi5jOjUzNDQKK21zZ2lkICJFNTUyOiBkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAiRTU1MjogYXNwZXR0YXZvIHVuIG51bWVybyIKKworIy4gR2V0IGhlcmUgd2hlbiB0aGUgc2VydmVyIGNhbid0IGJlIGZvdW5kLgorIzogbmV0YmVhbnMuYzozOTYKK21zZ2lkICJDYW5ub3QgY29ubmVjdCB0byBOZXRiZWFucyAjMiIKK21zZ3N0ciAiTm9uIHBvc3NvIGNvbm5ldHRlcm1pIGEgTmV0YmVhbnMgIzIiCisKKyM6IG5ldGJlYW5zLmM6NDA0Cittc2dpZCAiQ2Fubm90IGNvbm5lY3QgdG8gTmV0YmVhbnMiCittc2dzdHIgIk5vbiBwb3NzbyBjb25uZXR0ZXJtaSBhIE5ldGJlYW5zIgorCisjOiBuZXRiZWFucy5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY4OiBXcm9uZyBhY2Nlc3MgbW9kZSBmb3IgTmV0QmVhbnMgY29ubmVjdGlvbiBpbmZvIGZpbGU6IFwiJXNcIiIKK21zZ3N0ciAiIgorIkU2Njg6IE1vZGFsaXTgIGVycmF0YSBkaSBhY2Nlc3NvIGEgZmlsZSBpbmZvIGNvbm5lc3Npb25lIE5ldEJlYW5zOiBcIiVzXCIiCisKKyM6IG5ldGJlYW5zLmM6NzQ5Cittc2dpZCAicmVhZCBmcm9tIE5ldGJlYW5zIHNvY2tldCIKK21zZ3N0ciAibGV0dHVyYSBkYSBzb2NrZXQgTmV0YmVhbnMiCisKKyM6IG5ldGJlYW5zLmM6MTY0MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjU4OiBOZXRCZWFucyBjb25uZWN0aW9uIGxvc3QgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU2NTg6IENvbm5lc3Npb25lIE5ldEJlYW5zIHBlcnNhIHBlciBpbCBidWZmZXIgJWxkIgorCisjOiBub3JtYWwuYzoyOTgwCittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAiQXR0ZW56aW9uZTogaWwgdGVybWluYWxlIG5vbiDoIGluIGdyYWRvIGRpIGV2aWRlbnppYXJlIgorCisjOiBub3JtYWwuYzozMjc2Cittc2dpZCAiRTM0ODogTm8gc3RyaW5nIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0ODogTmVzc3VuYSBzdHJpbmdhIHNvdHRvIGlsIGN1cnNvcmUiCisKKyM6IG5vcm1hbC5jOjMyNzgKK21zZ2lkICJFMzQ5OiBObyBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0OTogTmVzc3VuIGlkZW50aWZpY2F0aXZvIHNvdHRvIGlsIGN1cnNvcmUiCisKKyM6IG5vcm1hbC5jOjQ1MTkKK21zZ2lkICJFMzUyOiBDYW5ub3QgZXJhc2UgZm9sZHMgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MjogTm9uIHBvc3NvIHRvZ2xpZXJlIHBpZWdhdHVyZSBjb24gaWwgJ2ZvbGRtZXRob2QnIGluIHVzbyIKKworIzogbm9ybWFsLmM6Njc0MAorbXNnaWQgIkU2NjQ6IGNoYW5nZWxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkU2NjQ6IGxpc3RhIG1vZGlmaWNoZSB2dW90YSIKKworIzogbm9ybWFsLmM6Njc0MgorbXNnaWQgIkU2NjI6IEF0IHN0YXJ0IG9mIGNoYW5nZWxpc3QiCittc2dzdHIgIkU2NjI6IEFsbCdpbml6aW8gZGVsbGEgbGlzdGEgbW9kaWZpY2hlIgorCisjOiBub3JtYWwuYzo2NzQ0Cittc2dpZCAiRTY2MzogQXQgZW5kIG9mIGNoYW5nZWxpc3QiCittc2dzdHIgIkU2NjM6IEFsbGEgZmluZSBkZWxsYSBsaXN0YSBtb2RpZmljaGUiCisKKyM6IG5vcm1hbC5jOjgwMDYKK21zZ2lkICJUeXBlICA6cXVpdDxFbnRlcj4gIHRvIGV4aXQgVmltIgorbXNnc3RyICJCYXR0aSA6cXVpdDxJbnZpbz4gIHBlciB1c2NpcmUgZGEgVmltIgorCisjOiBvcHMuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgMSB0aW1lIgorbXNnc3RyICIxIGxpbmVhICVzYSAxIHZvbHRhIgorCisjOiBvcHMuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgJWQgdGltZXMiCittc2dzdHIgIjEgbGluZWEgJXNhICVkIHZvbHRlIgorCisjOiBvcHMuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgMSB0aW1lIgorbXNnc3RyICIlbGQgbGluZWUgJXNlIDEgdm9sdGEiCisKKyM6IG9wcy5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiJWxkIGxpbmVlICVzZSAlZCB2b2x0ZSIKKworIzogb3BzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB0byBpbmRlbnQuLi4gIgorbXNnc3RyICIlbGQgbGluZWUgZGEgcmllbnRyYXJlLi4uICIKKworIzogb3BzLmM6NzEyCittc2dpZCAiMSBsaW5lIGluZGVudGVkICIKK21zZ3N0ciAiMSBsaW5lYSByaWVudHJhdGEgIgorCisjOiBvcHMuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAiJWxkIGxpbmVlIHJpZW50cmF0ZSAiCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNjg4Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgIm5vbiByaWVzY28gYSBzYWx2YXJlIGluIHVuIHJlZ2lzdHJvOyBjYW5jZWxsbyBjb211bnF1ZSIKKworIzogb3BzLmM6MjI3NAorbXNnaWQgIjEgbGluZSBjaGFuZ2VkIgorbXNnc3RyICIxIGxpbmVhIGNhbWJpYXRhIgorCisjOiBvcHMuYzoyMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBjaGFuZ2VkIgorbXNnc3RyICIlbGQgbGluZWUgY2FtYmlhdGUiCisKKyM6IG9wcy5jOjI2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnJlZWluZyAlbGQgbGluZXMiCittc2dzdHIgImxpYmVybyAlbGQgbGluZWUiCisKKyM6IG9wcy5jOjI5NDEKK21zZ2lkICIxIGxpbmUgeWFua2VkIgorbXNnc3RyICIxIGxpbmVhIG1lc3NhIGluIHJlZ2lzdHJvIgorCisjOiBvcHMuYzoyOTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgIiVsZCBsaW5lZSBtZXNzZSBpbiByZWdpc3RybyIKKworIzogb3BzLmM6MzIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiBOaWVudGUgbmVsIHJlZ2lzdHJvICVzIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG9wcy5jOjM3NzkKK21zZ2lkICIiCisiXG4iCisiLS0tIFJlZ2lzdGVycyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gUmVnaXN0cmkgLS0tIgorCisjOiBvcHMuYzo1MDg4Cittc2dpZCAiSWxsZWdhbCByZWdpc3RlciBuYW1lIgorbXNnc3RyICJOb21lIHJlZ2lzdHJvIG5vbiBhbW1lc3NvIgorCisjOiBvcHMuYzo1MTc2Cittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBSZWdpc3RyaTpcbiIKKworIzogb3BzLmM6NTIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTc0OiBVbmtub3duIHJlZ2lzdGVyIHR5cGUgJWQiCittc2dzdHIgIkU1NzQ6IFRpcG8gZGkgcmVnaXN0cm8gc2Nvbm9zY2l1dG86ICVkIgorCisjOiBvcHMuYzo1NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTQ6IEludmFsaWQgcmVnaXN0ZXIgbmFtZTogJyVzJyIKK21zZ3N0ciAiRTM1NDogTm9tZSByZWdpc3RybyBub24gdmFsaWRvOiAnJXMnIgorCisjOiBvcHMuYzo2MDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBDb2xzOyAiCittc2dzdHIgIiVsZCBDb2wuOyAiCisKKyM6IG9wcy5jOjYwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VsZWN0ZWQgJXMlbGQgb2YgJWxkIExpbmVzOyAlbGQgb2YgJWxkIFdvcmRzOyAlbGQgb2YgJWxkIEJ5dGVzIgorbXNnc3RyICJTZWxlemlvbmF0ZSAlcyVsZCBkaSAlbGQgbGluZWU7ICVsZCBkaSAlbGQgcGFyb2xlOyAlbGQgZGkgJWxkIGNhcmF0dC4iCisKKyM6IG9wcy5jOjYwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQnl0ZSAlbGQgb2YgJWxkIgorbXNnc3RyICJDb2wuICVzIGRpICVzOyBMaW5lYSAlbGQgZGkgJWxkOyBQYXJvbGEgJWxkIGRpICVsZDsgQ2FyYXR0LiAlbGQgZGkgJWxkIgorCisjOiBvcHMuYzo2MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCBwZXIgQk9NKSIKKworIzogb3B0aW9uLmM6MTY0MworbXNnaWQgIiU8JWYlaCVtJT1QYWdlICVOIgorbXNnc3RyICIlPCVmJWglbSU9UGFnaW5hICVOIgorCisjOiBvcHRpb24uYzoyMDkyCittc2dpZCAiVGhhbmtzIGZvciBmbHlpbmcgVmltIgorbXNnc3RyICJHcmF6aWUgcGVyIGF2ZXIgdm9sYXRvIGNvbiBWaW0iCisKKyM6IG9wdGlvbi5jOjM0MTkgb3B0aW9uLmM6MzUzNQorbXNnaWQgIkU1MTg6IFVua25vd24gb3B0aW9uIgorbXNnc3RyICJFNTE4OiBPcHppb25lIGluZXNpc3RlbnRlIgorCisjOiBvcHRpb24uYzozNDMyCittc2dpZCAiRTUxOTogT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkU1MTk6IE9wemlvbmUgbm9uIHN1cHBvcnRhdGEiCisKKyM6IG9wdGlvbi5jOjM0NTcKK21zZ2lkICJFNTIwOiBOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIgorbXNnc3RyICJFNTIwOiBOb24gY29uc2VudGl0byBpbiB1bmEgJ21vZGVsaW5lJyIKKworIzogb3B0aW9uLmM6MzUyMgorbXNnaWQgIiIKKyJcbiIKKyJcdExhc3Qgc2V0IGZyb20gIgorbXNnc3RyICIiCisiXG4iCisiXHRJbXBvc3RhdGEgbCd1bHRpbWEgdm9sdGEgZGEgIgorCisjOiBvcHRpb24uYzozNjYxCittc2dpZCAiRTUyMTogTnVtYmVyIHJlcXVpcmVkIGFmdGVyID0iCittc2dzdHIgIkU1MjE6IENpIHZ1b2xlIHVuIG51bWVybyBkb3BvID0iCisKKyM6IG9wdGlvbi5jOjM5ODkgb3B0aW9uLmM6NDYxOQorbXNnaWQgIkU1MjI6IE5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNTIyOiBOb24gdHJvdmF0byBpbiAndGVybWNhcCciCisKKyM6IG9wdGlvbi5jOjQwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOTogSWxsZWdhbCBjaGFyYWN0ZXIgPCVzPiIKK21zZ3N0ciAiRTUzOTogQ2FyYXR0ZXJlIG5vbiBhbW1lc3NvIDwlcz4iCisKKyM6IG9wdGlvbi5jOjQ2MTEKK21zZ2lkICJFNTI5OiBDYW5ub3Qgc2V0ICd0ZXJtJyB0byBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1Mjk6IE5vbiBwb3NzbyBhc3NlZ25hcmUgYSAndGVybScgaWwgdmFsb3JlICdzdHJpbmdhIG51bGxhJyIKKworIzogb3B0aW9uLmM6NDYxNAorbXNnaWQgIkU1MzA6IENhbm5vdCBjaGFuZ2UgdGVybSBpbiBHVUkiCittc2dzdHIgIkU1MzA6IE5vbiBwb3NzbyBtb2RpZmljYXJlICd0ZXJtJyBtZW50cmUgc29ubyBuZWxsYSBHVUkiCisKKyM6IG9wdGlvbi5jOjQ2MTYKK21zZ2lkICJFNTMxOiBVc2UgXCI6Z3VpXCIgdG8gc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiRTUzMTogVXNhIFwiOmd1aVwiIHBlciBmYXIgcGFydGlyZSBsYSBHVUkiCisKKyM6IG9wdGlvbi5jOjQ2NDUKK21zZ2lkICJFNTg5OiAnYmFja3VwZXh0JyBhbmQgJ3BhdGNobW9kZScgYXJlIGVxdWFsIgorbXNnc3RyICJFNTg5OiAnYmFja3VwZXh0JyBlICdwYXRjaG1vZGUnIHNvbm8gdWd1YWxpIgorCisjOiBvcHRpb24uYzo0ODYwCittc2dpZCAiRTYxNzogQ2Fubm90IGJlIGNoYW5nZWQgaW4gdGhlIEdUSysgMiBHVUkiCittc2dzdHIgIkU2MTc6IE5vbiBwdfIgZXNzZXJlIGNhbWJpYXRvIG5lbGxhIEdVSSBHVEsrIDIiCisKKyM6IG9wdGlvbi5jOjUwMTYKK21zZ2lkICJFNTI0OiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTI0OiBNYW5jYSAnOiciCisKKyM6IG9wdGlvbi5jOjUwMTgKK21zZ2lkICJFNTI1OiBaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIkU1MjU6IFN0cmluZ2EgbnVsbGEiCisKKyM6IG9wdGlvbi5jOjUwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUyNjogTWlzc2luZyBudW1iZXIgYWZ0ZXIgPCVzPiIKK21zZ3N0ciAiRTUyNjogTWFuY2EgbnVtZXJvIGRvcG8gPCVzPiIKKworIzogb3B0aW9uLmM6NTEwMAorbXNnaWQgIkU1Mjc6IE1pc3NpbmcgY29tbWEiCittc2dzdHIgIkU1Mjc6IE1hbmNhIHZpcmdvbGEiCisKKyM6IG9wdGlvbi5jOjUxMDcKK21zZ2lkICJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJFNTI4OiBEZXZpIHNwZWNpZmljYXJlIHVuIHZhbG9yZSAnIgorCisjOiBvcHRpb24uYzo1MTQ4Cittc2dpZCAiRTU5NTogY29udGFpbnMgdW5wcmludGFibGUgb3Igd2lkZSBjaGFyYWN0ZXIiCittc2dzdHIgIkU1OTU6IGNvbnRpZW5lIGNhcmF0dGVyZSAnd2lkZScgbyBub24tc3RhbXBhYmlsZSIKKworIzogb3B0aW9uLmM6NTE5NworbXNnaWQgIkU1OTY6IEludmFsaWQgZm9udChzKSIKK21zZ3N0ciAiRTU5NjogRm9udCBub24gdmFsaWRpIgorCisjOiBvcHRpb24uYzo1MjA1Cittc2dpZCAiRTU5NzogY2FuJ3Qgc2VsZWN0IGZvbnRzZXQiCittc2dzdHIgIkU1OTc6IG5vbiBwb3NzbyBzZWxlemlvbmFyZSBmb250c2V0IgorCisjOiBvcHRpb24uYzo1MjA3Cittc2dpZCAiRTU5ODogSW52YWxpZCBmb250c2V0IgorbXNnc3RyICJFNTk4OiBGb250c2V0IG5vbiB2YWxpZG8iCisKKyM6IG9wdGlvbi5jOjUyMTQKK21zZ2lkICJFNTMzOiBjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICJFNTMzOiBub24gcG9zc28gc2VsZXppb25hcmUgJ3dpZGUgZm9udCciCisKKyM6IG9wdGlvbi5jOjUyMTYKK21zZ2lkICJFNTM0OiBJbnZhbGlkIHdpZGUgZm9udCIKK21zZ3N0ciAiRTUzNDogJ1dpZGUgZm9udCcgbm9uIHZhbGlkbyIKKworIzogb3B0aW9uLmM6NTQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciA8JWM+IgorbXNnc3RyICJFNTM1OiBDYXJhdHRlcmUgbm9uIGFtbWVzc28gZG9wbyA8JWM+IgorCisjOiBvcHRpb24uYzo1NTk3Cittc2dpZCAiRTUzNjogY29tbWEgcmVxdWlyZWQiCittc2dzdHIgIkU1MzY6IHZpcmdvbGEgbWFuY2FudGUiCisKKyM6IG9wdGlvbi5jOjU2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzNzogJ2NvbW1lbnRzdHJpbmcnIG11c3QgYmUgZW1wdHkgb3IgY29udGFpbiAlcyIKK21zZ3N0ciAiRTUzNzogJ2NvbW1lbnRzdHJpbmcnIGRldmUgZXNzZXJlIG51bGxhIG8gY29udGVuZXJlICVzIgorCisjOiBvcHRpb24uYzo1NjgyCittc2dpZCAiRTUzODogTm8gbW91c2Ugc3VwcG9ydCIKK21zZ3N0ciAiRTUzODogTWFuY2Egc3VwcG9ydG8gbW91c2UiCisKKyM6IG9wdGlvbi5jOjU5NTAKK21zZ2lkICJFNTQwOiBVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJFNTQwOiBFc3ByZXNzaW9uZSBub24gdGVybWluYXRhIgorCisjOiBvcHRpb24uYzo1OTU0Cittc2dpZCAiRTU0MTogdG9vIG1hbnkgaXRlbXMiCittc2dzdHIgIkU1NDE6IHRyb3BwaSBlbGVtZW50aSIKKworIzogb3B0aW9uLmM6NTk1NgorbXNnaWQgIkU1NDI6IHVuYmFsYW5jZWQgZ3JvdXBzIgorbXNnc3RyICJFNTQyOiBncnVwcGkgc2JpbGFuY2lhdGkiCisKKyM6IG9wdGlvbi5jOjYxOTYKK21zZ2lkICJFNTkwOiBBIHByZXZpZXcgd2luZG93IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFNTkwOiBVbmEgZmluZXN0cmEgZGkgcHJlLXZpc3VhbGl6emF6aW9uZSBlc2lzdGUgZ2ngIgorCisjOiBvcHRpb24uYzo2NDUzCittc2dpZCAiVzE3OiBBcmFiaWMgcmVxdWlyZXMgVVRGLTgsIGRvICc6c2V0IGVuY29kaW5nPXV0Zi04JyIKK21zZ3N0ciAiVzE3OiBBcmFibyByaWNoaWVkZSBVVEYtOCwgZXNlZ3VpICc6c2V0IGVuY29kaW5nPXV0Zi04JyIKKworIzogb3B0aW9uLmM6Njc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTkzOiBOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJFNTkzOiBTZXJ2b25vIGFsbWVubyAlZCBsaW5lZSIKKworIzogb3B0aW9uLmM6Njc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk0OiBOZWVkIGF0IGxlYXN0ICVkIGNvbHVtbnMiCittc2dzdHIgIkU1OTQ6IFNlcnZvbm8gYWxtZW5vICVkIGNvbG9ubmUiCisKKyM6IG9wdGlvbi5jOjcxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NTogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMzU1OiBPcHppb25lIGluZXNpc3RlbnRlOiAlcyIKKworIzogb3B0aW9uLmM6NzIyMworbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIENvZGljaSB0ZXJtaW5hbGUgLS0tIgorCisjOiBvcHRpb24uYzo3MjI1Cittc2dpZCAiIgorIlxuIgorIi0tLSBHbG9iYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gVmFsb3JpIG9wemlvbmkgZ2xvYmFsaSAtLS0iCisKKyM6IG9wdGlvbi5jOjcyMjcKK21zZ2lkICIiCisiXG4iCisiLS0tIExvY2FsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFZhbG9yZSBvcHppb25pIGdsb2JhbGkgLS0tIgorCisjOiBvcHRpb24uYzo3MjI5Cittc2dpZCAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBPcHppb25pIC0tLSIKKworIzogb3B0aW9uLmM6NzkzNQorbXNnaWQgIkUzNTY6IGdldF92YXJwIEVSUk9SIgorbXNnc3RyICJFMzU2OiBFUlJPUkUgZ2V0X3ZhcnAiCisKKyM6IG9wdGlvbi5jOjg5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NzogJ2xhbmdtYXAnOiBNYXRjaGluZyBjaGFyYWN0ZXIgbWlzc2luZyBmb3IgJXMiCittc2dzdHIgIkUzNTc6ICdsYW5nbWFwJzogTWFuY2EgY2FyYXR0ZXJlIGNvcnJpc3BvbmRlbnRlIHBlciAlcyIKKworIzogb3B0aW9uLmM6ODk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU4OiAnbGFuZ21hcCc6IEV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgc2VtaWNvbG9uOiAlcyIKK21zZ3N0ciAiRTM1ODogJ2xhbmdtYXAnOiBDYXJhdHRlcmkgaW4gcGn5IGRvcG8gaWwgJzsnOiAlcyIKKworIzogb3NfYW1pZ2EuYzoyODAKK21zZ2lkICJjYW5ub3Qgb3BlbiAiCittc2dzdHIgIm5vbiByaWVzY28gYWQgYXByaXJlICIKKworIzogb3NfYW1pZ2EuYzozMTQKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06IE5vbiByaWVzY28gYWQgYXByaXJlIGxhIGZpbmVzdHJhIVxuIgorCisjOiBvc19hbWlnYS5jOjMzOAorbXNnaWQgIk5lZWQgQW1pZ2Fkb3MgdmVyc2lvbiAyLjA0IG9yIGxhdGVyXG4iCittc2dzdHIgIlNlcnZlIEFtaWdhZG9zIHZlcnNpb25lIDIuMDQgbyBzdWNjZXNzaXZhXG4iCisKKyM6IG9zX2FtaWdhLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgJXMgdmVyc2lvbiAlbGRcbiIKK21zZ3N0ciAiU2VydmUgJXMgdmVyc2lvbmUgJWxkXG4iCisKKyM6IG9zX2FtaWdhLmM6NDE2Cittc2dpZCAiQ2Fubm90IG9wZW4gTklMOlxuIgorbXNnc3RyICJOb24gcmllc2NvIGFkIGFwcmlyZSBOSUw6XG4iCisKKyM6IG9zX2FtaWdhLmM6NDI3Cittc2dpZCAiQ2Fubm90IGNyZWF0ZSAiCittc2dzdHIgIk5vbiByaWVzY28gYSBjcmVhcmUgIgorCisjOiBvc19hbWlnYS5jOjkwNQorIywgYy1mb3JtYXQKK21zZ2lkICJWaW0gZXhpdGluZyB3aXRoICVkXG4iCittc2dzdHIgIlZpbSBlc2NlIGNvbiAlZFxuIgorCisjOiBvc19hbWlnYS5jOjk0MQorbXNnaWQgImNhbm5vdCBjaGFuZ2UgY29uc29sZSBtb2RlID8hXG4iCittc2dzdHIgIm5vbiBwb3NzbyBtb2RpZmljYXJlIG1vZGFsaXTgIGNvbnNvbGUgPyFcbiIKKworIzogb3NfYW1pZ2EuYzoxMDEyCittc2dpZCAibWNoX2dldF9zaGVsbHNpemU6IG5vdCBhIGNvbnNvbGU/P1xuIgorbXNnc3RyICJtY2hfZ2V0X3NoZWxsc2l6ZTogbm9uIHVuYSBjb25zb2xlPz9cbiIKKworIy4gaWYgVmltIG9wZW5lZCBhIHdpbmRvdzogRXhlY3V0aW5nIGEgc2hlbGwgbWF5IGNhdXNlIGNyYXNoZXMKKyM6IG9zX2FtaWdhLmM6MTE2MQorbXNnaWQgIkUzNjA6IENhbm5vdCBleGVjdXRlIHNoZWxsIHdpdGggLWYgb3B0aW9uIgorbXNnc3RyICJFMzYwOiBOb24gcG9zc28gZXNlZ3VpcmUgbG8gc2hlbGwgY29uIGwnb3B6aW9uZSAtZiIKKworIzogb3NfYW1pZ2EuYzoxMjAyIG9zX2FtaWdhLmM6MTI5MgorbXNnaWQgIkNhbm5vdCBleGVjdXRlICIKK21zZ3N0ciAiTm9uIHJpZXNjbyBhIGVzZWd1aXJlICIKKworIzogb3NfYW1pZ2EuYzoxMjA1IG9zX2FtaWdhLmM6MTMwMgorbXNnaWQgInNoZWxsICIKK21zZ3N0ciAic2hlbGwgIgorCisjOiBvc19hbWlnYS5jOjEyMjUgb3NfYW1pZ2EuYzoxMzI3Cittc2dpZCAiIHJldHVybmVkXG4iCittc2dzdHIgIiBvdHRlbnV0b1xuIgorCisjOiBvc19hbWlnYS5jOjE0NjgKK21zZ2lkICJBTkNIT1JfQlVGX1NJWkUgdG9vIHNtYWxsLiIKK21zZ3N0ciAiQU5DSE9SX0JVRl9TSVpFIHRyb3BwbyBwaWNjb2xvLiIKKworIzogb3NfYW1pZ2EuYzoxNDcyCittc2dpZCAiSS9PIEVSUk9SIgorbXNnc3RyICJFUlJPUkUgSS9PIgorCisjOiBvc19tc3dpbi5jOjU0OAorbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICIuLi4odHJvbmNhdG8pIgorCisjOiBvc19tc3dpbi5jOjY1MAorbXNnaWQgIidjb2x1bW5zJyBpcyBub3QgODAsIGNhbm5vdCBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICInY29sdW1ucycgbm9uIHZhbGUgODAsIG5vbiByaWVzY28gYWQgZXNlZ3VpcmUgY29tYW5kaSBlc3Rlcm5pIgorCisjOiBvc19tc3dpbi5jOjE5ODIKK21zZ2lkICJFMjM3OiBQcmludGVyIHNlbGVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkUyMzc6IFNjZWx0YSBzdGFtcGFudGUgbm9uIHJpdXNjaXRhIgorCisjOiBvc19tc3dpbi5jOjIwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidG8gJXMgb24gJXMiCittc2dzdHIgImEgJXMgc3UgJXMiCisKKyM6IG9zX21zd2luLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJFNjEzOiBVbmtub3duIHByaW50ZXIgZm9udDogJXMiCittc2dzdHIgIkU2MTM6IEZvbnQgcGVyIHN0YW1wYW50ZSBzY29ub3NjaXV0bzogJXMiCisKKyM6IG9zX21zd2luLmM6MjA4NiBvc19tc3dpbi5jOjIwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzODogUHJpbnQgZXJyb3I6ICVzIgorbXNnc3RyICJFMjM4OiBFcnJvcmUgZHVyYW50ZSBzdGFtcGE6ICVzIgorCisjOiBvc19tc3dpbi5jOjIwOTcKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJTY29ub3NjaXV0byIKKworIzogb3NfbXN3aW4uYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nICclcyciCittc2dzdHIgIlN0YW1wYXRvOiAnJXMnIgorCisjOiBvc19tc3dpbi5jOjMyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NDogSWxsZWdhbCBjaGFyc2V0IG5hbWUgXCIlc1wiIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDQ6IE5vbWUgZGkgY2hhcnNldCBub24gYW1tZXNzbyBcIiVzXCIgbmVsIGZvbnRlIGRpIG5vbWUgXCIlc1wiIgorCisjOiBvc19tc3dpbi5jOjMyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTogQ2FyYXR0ZXJlIG5vbiBhbW1lc3NvICclYycgbmVsIGZvbnQgZGkgbm9tZSBcIiVzXCIiCisKKyM6IG9zX3Jpc2Nvcy5jOjEyNTkKK21zZ2lkICJFMzY2OiBJbnZhbGlkICdvc2ZpbGV0eXBlJyBvcHRpb24gLSB1c2luZyBUZXh0IgorbXNnc3RyICJFMzY2OiBPcHppb25lICdvc2ZpbGV0eXBlJyBub24gdmFsaWRhIC0gdXNvICdUZXh0JyIKKworIzogb3NfdW5peC5jOjkyNworbXNnaWQgIlZpbTogRG91YmxlIHNpZ25hbCwgZXhpdGluZ1xuIgorbXNnc3RyICJWaW06IFNlZ25hbGUgZG9wcGlvLCBlc2NvXG4iCisKKyM6IG9zX3VuaXguYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IEludGVyY2V0dGF0byBzZWduYWxlIGZhdGFsZSAlc1xuIgorCisjOiBvc191bml4LmM6OTM2Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIgorbXNnc3RyICJWaW06IEludGVyY2V0dGF0byBzZWduYWxlIGZhdGFsZVxuIgorCisjOiBvc191bml4LmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAiQXR0aXZhemlvbmUgdmlzdWFsaXp6YXppb25lIFggaGEgcmljaGllc3RvICVsZCBtc2VjIgorCisjOiBvc191bml4LmM6MTIyNgorbXNnaWQgIiIKKyJcbiIKKyJWaW06IEdvdCBYIGVycm9yXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWaW06IFByZXNvIGVycm9yZSBYXG4iCisKKyM6IG9zX3VuaXguYzoxMzM4Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiUHJvdmEgdmlzdWFsaXp6YXppb25lIFggZmFsbGl0YSIKKworIzogb3NfdW5peC5jOjE0NzcKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IgorbXNnc3RyICJBcGVydHVyYSB2aXN1YWxpenphemlvbmUgWDogdGVtcG8gc2NhZHV0byIKKworIzogb3NfdW5peC5jOjMyMzQgb3NfdW5peC5jOjM5MTQKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgIgorbXNnc3RyICIiCisiXG4iCisiTm9uIHJpZXNjbyBhIGVzZWd1aXJlIHNoZWxsICIKKworIzogb3NfdW5peC5jOjMyODIKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgc2hcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vbiByaWVzY28gYSBlc2VndWlyZSBzaGVsbCBzaFxuIgorCisjOiBvc191bml4LmM6MzI4NiBvc191bml4LmM6MzkyMAorbXNnaWQgIiIKKyJcbiIKKyJzaGVsbCByZXR1cm5lZCAiCittc2dzdHIgIiIKKyJcbiIKKyJzaGVsbCB0ZXJtaW5hdG8gY29uIHJldHVybi1jb2RlICIKKworIzogb3NfdW5peC5jOjM0MjEKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGNyZWF0ZSBwaXBlc1xuIgorbXNnc3RyICIiCisiXG4iCisiTm9uIHBvc3NvIGNyZWFyZSAncGlwZSdcbiIKKworIzogb3NfdW5peC5jOjM0MzYKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGZvcmtcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vbiByaWVzY28gYWQgZWZmZXR0dWFyZSAnZm9yaydcbiIKKworIzogb3NfdW5peC5jOjM5MjcKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDb21hbmRvIHRlcm1pbmF0b1xuIgorCisjOiBvc191bml4LmM6NDE5MSBvc191bml4LmM6NDMxNiBvc191bml4LmM6NTk4MgorbXNnaWQgIlhTTVAgbG9zdCBJQ0UgY29ubmVjdGlvbiIKK21zZ3N0ciAiWFNNUCBoYSBwZXJzbyBsYSBjb25uZXNzaW9uZSBJQ0UiCisKKyM6IG9zX3VuaXguYzo1NTY1Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiQXBlcnR1cmEgdmlzdWFsaXp6YXppb25lIFggZmFsbGl0YSIKKworIzogb3NfdW5peC5jOjU4ODcKK21zZ2lkICJYU01QIGhhbmRsaW5nIHNhdmUteW91cnNlbGYgcmVxdWVzdCIKK21zZ3N0ciAiWFNNUCBnZXN0aW9uZSByaWNoaWVzdGEgJ3NhdmUteW91cnNlbGYnIgorCisjOiBvc191bml4LmM6NjAwNgorbXNnaWQgIlhTTVAgb3BlbmluZyBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QIGFwZXJ0dXJhIGNvbm5lc3Npb25lIgorCisjOiBvc191bml4LmM6NjAyNQorbXNnaWQgIlhTTVAgSUNFIGNvbm5lY3Rpb24gd2F0Y2ggZmFpbGVkIgorbXNnc3RyICJYU01QIG9zc2VydmF6aW9uZSBjb25uZXNzaW9uZSBJQ0UgZmFsbGl0YSIKKworIzogb3NfdW5peC5jOjYwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICJYU01QIFNtY09wZW5Db25uZWN0aW9uIGZhbGxpdGE6ICVzIgorCisjOiBvc192bXNfbW1zLmM6NTkKK21zZ2lkICJBdCBsaW5lIgorbXNnc3RyICJBbGxhIGxpbmVhIgorCisjOiBvc193MzJleGUuYzo2NQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIk5vbiByaWVzY28gYWQgYWxsb2NhcmUgbWVtb3JpYSBwZXIgbGluZWEgZGkgY29tYW5kby4iCisKKyM6IG9zX3czMmV4ZS5jOjY2IG9zX3czMmV4ZS5jOjg5IG9zX3czMmV4ZS5jOjEwMAorbXNnaWQgIlZJTSBFcnJvciIKK21zZ3N0ciAiRXJyb3JlIFZJTSIKKworIzogb3NfdzMyZXhlLmM6ODkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICJOb24gcmllc2NvIGEgY2FyaWNhcmUgdmltMzIuZGxsISIKKworIzogb3NfdzMyZXhlLmM6OTkKK21zZ2lkICJDb3VsZCBub3QgZml4IHVwIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHRoZSBETEwhIgorbXNnc3RyICJOb24gc29ubyByaXVzY2l0byBhIGltcG9zdGFyZSBwdW50YXRvcmkgZGkgZnVuemlvbmUgdmVyc28gbGEgRExMISIKKworIzogb3Nfd2luMTYuYzozNDIgb3Nfd2luMzIuYzozMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInNoZWxsIHJldHVybmVkICVkIgorbXNnc3RyICJzaGVsbCB0ZXJtaW5hdG8gY29uIHJldHVybi1jb2RlICVkIgorCisjOiBvc193aW4zMi5jOjI3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgJXMgZXZlbnRcbiIKK21zZ3N0ciAiVmltOiBJbnRlcmNldHRhdG8gZXZlbnRvICVzXG4iCisKKyM6IG9zX3dpbjMyLmM6MjcwOAorbXNnaWQgImNsb3NlIgorbXNnc3RyICJjaGl1c3VyYSIKKworIzogb3Nfd2luMzIuYzoyNzEwCittc2dpZCAibG9nb2ZmIgorbXNnc3RyICJsb2dvZmYiCisKKyM6IG9zX3dpbjMyLmM6MjcxMQorbXNnaWQgInNodXRkb3duIgorbXNnc3RyICJzaHV0ZG93biIKKworIzogb3Nfd2luMzIuYzozMjAxCittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6IENvbWFuZG8gbm9uIHRyb3ZhdG8iCisKKyM6IG9zX3dpbjMyLmM6MzIxNAorbXNnaWQgIiIKKyJWSU1SVU4uRVhFIG5vdCBmb3VuZCBpbiB5b3VyICRQQVRILlxuIgorIkV4dGVybmFsIGNvbW1hbmRzIHdpbGwgbm90IHBhdXNlIGFmdGVyIGNvbXBsZXRpb24uXG4iCisiU2VlICA6aGVscCB3aW4zMi12aW1ydW4gIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlZJTVJVTi5FWEUgbm9uIHRyb3ZhdG8gbmVsIHR1byAkUEFUSC5cbiIKKyJJIGNvbWFuZGkgZXN0ZXJuaSBub24gZmFyYW5vIHVuYSBwYXVzYSBkb3BvIGF2ZXIgZmluaXRvIGwnZXNlY3V6aW9uZS5cbiIKKyJWZWRpICA6aGVscCB3aW4zMi12aW1ydW4gIHBlciB1bHRlcmlvcmkgaW5mb3JtYXppb25pLiIKKworIzogb3Nfd2luMzIuYzozMjE3Cittc2dpZCAiVmltIFdhcm5pbmciCittc2dzdHIgIkF2dmlzbyBkYSBWaW0iCisKKyM6IHF1aWNrZml4LmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzI6IFRvbyBtYW55ICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MjogVHJvcHBpICUlJWMgbmVsbGEgc3RyaW5nYSBkaSAnZm9ybWF0JyIKKworIzogcXVpY2tmaXguYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MzogVW5leHBlY3RlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzM6ICUlJWMgaW1wcmV2aXN0byBuZWxsYSBzdHJpbmdhIGRpICdmb3JtYXQnIgorCisjOiBxdWlja2ZpeC5jOjMyNQorbXNnaWQgIkUzNzQ6IE1pc3NpbmcgXSBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc0OiBNYW5jYSBdIG5lbGxhIHN0cmluZ2EgZGkgJ2Zvcm1hdCciCisKKyM6IHF1aWNrZml4LmM6MzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogJSUlYyBub24gc3VwcG9ydGF0byBuZWxsYSBzdHJpbmdhIGRpICdmb3JtYXQnIgorCisjOiBxdWlja2ZpeC5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiCittc2dzdHIgIkUzNzY6ICUlJWMgbm9uIHZhbGlkbyBuZWwgcHJlZmlzc28gZGVsbGEgc3RyaW5nYSBkaSAnZm9ybWF0JyIKKworIzogcXVpY2tmaXguYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6ICUlJWMgbm9uIHZhbGlkbyBuZWxsYSBzdHJpbmdhIGRpICdmb3JtYXQnIgorCisjOiBxdWlja2ZpeC5jOjM5MQorbXNnaWQgIkUzNzg6ICdlcnJvcmZvcm1hdCcgY29udGFpbnMgbm8gcGF0dGVybiIKK21zZ3N0ciAiRTM3ODogJ2Vycm9yZm9ybWF0JyBub24gY29udGllbmUgYWxjdW4gbW9kZWxsbyIKKworIzogcXVpY2tmaXguYzo1MDEKK21zZ2lkICJFMzc5OiBNaXNzaW5nIG9yIGVtcHR5IGRpcmVjdG9yeSBuYW1lIgorbXNnc3RyICJFMzc5OiBOb21lIGRpcmVjdG9yeSBtYW5jYW50ZSBvIG51bGxvIgorCisjOiBxdWlja2ZpeC5jOjk5MAorbXNnaWQgIkU1NTM6IE5vIG1vcmUgaXRlbXMiCittc2dzdHIgIkU1NTM6IE5vbiBjaSBzb25vIHBp+SBlbGVtZW50aSIKKworIzogcXVpY2tmaXguYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiglZCBvZiAlZCklcyVzOiAiCittc2dzdHIgIiglZCBkaSAlZCklcyVzOiAiCisKKyM6IHF1aWNrZml4LmM6MTIzMQorbXNnaWQgIiAobGluZSBkZWxldGVkKSIKK21zZ3N0ciAiIChsaW5lYSBjYW5jZWxsYXRhKSIKKworIzogcXVpY2tmaXguYzoxNDQ0Cittc2dpZCAiRTM4MDogQXQgYm90dG9tIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgwOiBBbCBmb25kbyBkZWxsYSAnc3RhY2snIGRpIHF1aWNrZml4IgorCisjOiBxdWlja2ZpeC5jOjE0NTMKK21zZ2lkICJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODE6IEluIGNpbWEgYWxsYSAnc3RhY2snIGRpIHF1aWNrZml4IgorCisjOiBxdWlja2ZpeC5jOjE0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgbGlzdCAlZCBvZiAlZDsgJWQgZXJyb3JzIgorbXNnc3RyICJsaXN0YSBlcnJvcmkgJWQgZGkgJWQ7ICVkIGVycm9yaSIKKworIzogcXVpY2tmaXguYzoxOTQzCittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4MjogTm9uIHBvc3NvIHNjcml2ZXJlLCBsJ29wemlvbmUgJ2J1ZnR5cGUnIOggaW1wb3N0YXRhIgorCisjOiByZWdleHAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2OTogaW52YWxpZCBpdGVtIGluICVzJSVbXSIKK21zZ3N0ciAiRTM2OTogZWxlbWVudG8gbm9uIHZhbGlkbyBpbiAlcyUlW10iCisKKyM6IHJlZ2V4cC5jOjgzOAorbXNnaWQgIkUzMzk6IFBhdHRlcm4gdG9vIGxvbmciCittc2dzdHIgIkUzMzk6IEVzcHJlc3Npb25lIHRyb3BwbyBsdW5nYSIKKworIzogcmVnZXhwLmM6MTAwOQorbXNnaWQgIkU1MDogVG9vIG1hbnkgXFx6KCIKK21zZ3N0ciAiRTUwOiBUcm9wcGUgXFx6KCIKKworIzogcmVnZXhwLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTE6IFRvbyBtYW55ICVzKCIKK21zZ3N0ciAiRTUxOiBUcm9wcGUgJXMoIgorCisjOiByZWdleHAuYzoxMDc3Cittc2dpZCAiRTUyOiBVbm1hdGNoZWQgXFx6KCIKK21zZ3N0ciAiRTUyOiBTZW56YSByaXNjb250cm86IFxceigiCisKKyM6IHJlZ2V4cC5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOiBVbm1hdGNoZWQgJXMlJSgiCittc2dzdHIgIkU1MzogU2VuemEgcmlzY29udHJvOiAlcyUlKCIKKworIzogcmVnZXhwLmM6MTA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTQ6IFVubWF0Y2hlZCAlcygiCittc2dzdHIgIkU1NDogU2VuemEgcmlzY29udHJvOiAlcygiCisKKyM6IHJlZ2V4cC5jOjEwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU1OiBVbm1hdGNoZWQgJXMpIgorbXNnc3RyICJFNTU6IFNlbnphIHJpc2NvbnRybzogJXMpIgorCisjOiByZWdleHAuYzoxMjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjogJXMqIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1NjogbCdvcGVyYW5kbyAlcyogbm9uIHB18iBlc3NlcmUgdnVvdG8iCisKKyM6IHJlZ2V4cC5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3OiAlcysgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU3OiBsJ29wZXJhbmRvICVzKyBub24gcHXyIGVzc2VyZSB2dW90byIKKworIzogcmVnZXhwLmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzQCIKK21zZ3N0ciAiRTU5OiBDYXJhdHRlcmUgbm9uIGFtbWVzc28gZG9wbyAlc0AiCisKKyM6IHJlZ2V4cC5jOjEzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU4OiAlc3sgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU4OiBsJ29wZXJhbmRvICVzeyBwb3RyZWJiZSBlc3NlcmUgdnVvdG8iCisKKyM6IHJlZ2V4cC5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwOiBUb28gbWFueSBjb21wbGV4ICVzey4uLn1zIgorbXNnc3RyICJFNjA6IFRyb3BwaSAlc3suLi59cyBjb21wbGVzc2kiCisKKyM6IHJlZ2V4cC5jOjEzNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOiBOZXN0ZWQgJXMqIgorbXNnc3RyICJFNjE6ICVzKiBuaWRpZmljYXRvIgorCisjOiByZWdleHAuYzoxMzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjogTmVzdGVkICVzJWMiCittc2dzdHIgIkU2MjogJXMlYyBuaWRpZmljYXRvIgorCisjOiByZWdleHAuYzoxNDkxCittc2dpZCAiRTYzOiBpbnZhbGlkIHVzZSBvZiBcXF8iCittc2dzdHIgIkU2MzogdXNvIG5vbiB2YWxpZG8gZGkgXFxfIgorCisjOiByZWdleHAuYzoxNTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDogJXMlYyBzZW56YSBudWxsYSBwcmltYSIKKworIzogcmVnZXhwLmM6MTU5MgorbXNnaWQgIkU2NTogSWxsZWdhbCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiRTY1OiBSaWZlcmltZW50byBhbGwnaW5kaWV0cm8gbm9uIGFtbWVzc28iCisKKyM6IHJlZ2V4cC5jOjE2MDUKK21zZ2lkICJFNjY6IFxceiggbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY2OiBcXHooIG5vbiBjb25zZW50aXRvIHF1aSIKKworIzogcmVnZXhwLmM6MTYyNAorbXNnaWQgIkU2NzogXFx6MSBldCBhbC4gbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY3OiBcXHoxIGV0IGFsLiBub24gY29uc2VudGl0aSBxdWkiCisKKyM6IHJlZ2V4cC5jOjE2MzUKK21zZ2lkICJFNjg6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxceiIKK21zZ3N0ciAiRTY4OiBDYXJhdHRlcmUgbm9uIGFtbWVzc28gZG9wbyBcXHoiCisKKyM6IHJlZ2V4cC5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY5OiBNaXNzaW5nIF0gYWZ0ZXIgJXMlJVsiCittc2dzdHIgIkU2OTogTWFuY2EgXSBkb3BvICVzJSVbIgorCisjOiByZWdleHAuYzoxNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MDogRW1wdHkgJXMlJVtdIgorbXNnc3RyICJFNzA6ICVzJSVbXSB2dW90byIKKworIzogcmVnZXhwLmM6MTc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNzE6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzJSUiCittc2dzdHIgIkU3MTogQ2FyYXR0ZXJlIG5vbiBhbW1lc3NvIGRvcG8gJXMlJSIKKworIzogcmVnZXhwLmM6MjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJFNTU0OiBTeW50YXggZXJyb3IgaW4gJXN7Li4ufSIKK21zZ3N0ciAiRTU1NDogRXJyb3JlIHNpbnRhdHRpY28gaW4gJXN7Li4ufSIKKworIzogcmVnZXhwLmM6Mjg2MyByZWdleHAuYzozMDE2Cittc2dpZCAiRTM2MTogQ3Jhc2ggaW50ZXJjZXB0ZWQ7IHJlZ2V4cCB0b28gY29tcGxleD8iCittc2dzdHIgIkUzNjE6IEludGVyY2V0dGF0YSBmaW5lIGFub3JtYWxlOyAncmVnZXhwJyB0cm9wcG8gY29tcGxlc3NhPyIKKworIzogcmVnZXhwLmM6MzAwNCByZWdleHAuYzozMDEzCittc2dpZCAiRTM2MzogcGF0dGVybiBjYXVzZWQgb3V0LW9mLXN0YWNrIGVycm9yIgorbXNnc3RyICJFMzYzOiBlcnJvcmUgZGkgc3VwZXJvLWNhcGFjaXTgLXN0YWNrIGNhdXNhdG8gZGEgZXNwcmVzc2lvbmUiCisKKyM6IHJlZ2V4cC5jOjMyNTgKK21zZ2lkICJFeHRlcm5hbCBzdWJtYXRjaGVzOlxuIgorbXNnc3RyICJTb3R0by1jb3JyaXNwb25kZW56ZSBlc3Rlcm5lOlxuIgorCisjOiBzY3JlZW4uYzoyMTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIistLSUzbGQgbGluZXMgZm9sZGVkICIKK21zZ3N0ciAiKy0tJTNsZCBsaW5lZSBwaWVnYXRlIgorCisjOiBzY3JlZW4uYzo3OTk2Cittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgVi1TT1NUSVRVSVNDSSIKKworIzogc2NyZWVuLmM6ODAwMAorbXNnaWQgIiBSRVBMQUNFIgorbXNnc3RyICIgU09TVElUVUlTQ0kiCisKKyM6IHNjcmVlbi5jOjgwMDUKK21zZ2lkICIgUkVWRVJTRSIKK21zZ3N0ciAiIElOVkVSVElUTyIKKworIzogc2NyZWVuLmM6ODAwNworbXNnaWQgIiBJTlNFUlQiCittc2dzdHIgIiBJTlNFUklTQ0kiCisKKyM6IHNjcmVlbi5jOjgwMTAKK21zZ2lkICIgKGluc2VydCkiCittc2dzdHIgIiAoaW5zZXJpc2NpKSIKKworIzogc2NyZWVuLmM6ODAxMgorbXNnaWQgIiAocmVwbGFjZSkiCittc2dzdHIgIiAoc29zdGl0dWlzY2kpIgorCisjOiBzY3JlZW4uYzo4MDE0Cittc2dpZCAiICh2cmVwbGFjZSkiCittc2dzdHIgIiAodi1zb3N0aXR1aXNjaSkiCisKKyM6IHNjcmVlbi5jOjgwMTcKK21zZ2lkICIgSGVicmV3IgorbXNnc3RyICIgRWJyYWljbyIKKworIzogc2NyZWVuLmM6ODAyOAorbXNnaWQgIiBBcmFiaWMiCittc2dzdHIgIiBBcmFibyIKKworIzogc2NyZWVuLmM6ODAzMQorbXNnaWQgIiAobGFuZykiCittc2dzdHIgIiAobGluZ3VhKSIKKworIzogc2NyZWVuLmM6ODAzNQorbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKGluY29sbGEpIgorCisjOiBzY3JlZW4uYzo4MDQ4Cittc2dpZCAiIFZJU1VBTCIKK21zZ3N0ciAiIFZJU1VBTEUiCisKKyM6IHNjcmVlbi5jOjgwNDkKK21zZ2lkICIgVklTVUFMIExJTkUiCittc2dzdHIgIiBWSVNVQUxFIExJTkVBIgorCisjOiBzY3JlZW4uYzo4MDUwCittc2dpZCAiIFZJU1VBTCBCTE9DSyIKK21zZ3N0ciAiIFZJU1VBTEUgQkxPQ0NPIgorCisjOiBzY3JlZW4uYzo4MDUxCittc2dpZCAiIFNFTEVDVCIKK21zZ3N0ciAiIFNFTEVaSU9OQSIKKworIzogc2NyZWVuLmM6ODA1MgorbXNnaWQgIiBTRUxFQ1QgTElORSIKK21zZ3N0ciAiIFNFTEVaSU9OQSBMSU5FQSIKKworIzogc2NyZWVuLmM6ODA1MworbXNnaWQgIiBTRUxFQ1QgQkxPQ0siCittc2dzdHIgIiBTRUxFWklPTkEgQkxPQ0NPIgorCisjOiBzY3JlZW4uYzo4MDY4IHNjcmVlbi5jOjgxMzEKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgInJlZ2lzdHJhemlvbmUiCisKKyM6IHNlYXJjaC5jOjM3Cittc2dpZCAic2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIgorbXNnc3RyICJyYWdnaXVudGEgbGEgQ0lNQSBuZWxsYSByaWNlcmNhLCBjb250aW51byBkYWwgRk9ORE8iCisKKyM6IHNlYXJjaC5jOjM4Cittc2dpZCAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIgorbXNnc3RyICJyYWdnaXVudG8gaWwgRk9ORE8gbmVsbGEgcmljZXJjYSwgY29udGludW8gZGFsbGEgQ0lNQSIKKworIzogc2VhcmNoLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IFN0cmluZ2EgZGkgcmljZXJjYSBub24gdmFsaWRhOiAlcyIKKworIzogc2VhcmNoLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODQ6IHNlYXJjaCBoaXQgVE9QIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NDogbGEgcmljZXJjYSBoYSByYWdnaXVudG8gbGEgQ0lNQSBzZW56YSBzdWNjZXNzbyBwZXI6ICVzIgorCisjOiBzZWFyY2guYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NTogc2VhcmNoIGhpdCBCT1RUT00gd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg1OiBsYSByaWNlcmNhIGhhIHJhZ2dpdW50byBpbCBGT05ETyBzZW56YSBzdWNjZXNzbyBwZXI6ICVzIgorCisjOiBzZWFyY2guYzoxMjQ5Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiAnPycgbyAnLycgYXR0ZXNvIGRvcG8gJzsnIgorCisjOiBzZWFyY2guYzozNzY4Cittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAoY29tcHJlc2UgY29ycmlzcG9uZGVuemUgZWxlbmNhdGUgcHJpbWEpIgorCisjLiBjdXJzb3IgYXQgc3RhdHVzIGxpbmUKKyM6IHNlYXJjaC5jOjM3ODgKK21zZ2lkICItLS0gSW5jbHVkZWQgZmlsZXMgIgorbXNnc3RyICItLS0gRmlsZSBpbmNsdXNpICIKKworIzogc2VhcmNoLmM6Mzc5MAorbXNnaWQgIm5vdCBmb3VuZCAiCittc2dzdHIgIm5vbiB0cm92YXRpICIKKworIzogc2VhcmNoLmM6Mzc5MQorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgIm5lbCBwZXJjb3JzbyAtLS1cbiIKKworIzogc2VhcmNoLmM6Mzg0OAorbXNnaWQgIiAgKEFscmVhZHkgbGlzdGVkKSIKK21zZ3N0ciAiICAoR2ngIGVsZW5jYXRpKSIKKworIzogc2VhcmNoLmM6Mzg1MAorbXNnaWQgIiAgTk9UIEZPVU5EIgorbXNnc3RyICIgIE5PTiBUUk9WQVRPIgorCisjOiBzZWFyY2guYzozOTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGluY2x1ZGVkIGZpbGU6ICVzIgorbXNnc3RyICJTY2FuZGlzY28gZmlsZSBpbmNsdXNvOiAlcyIKKworIzogc2VhcmNoLmM6NDEyMAorbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4NzogQ29ycmlzcG9uZGVuemEgbmVsbGEgbGluZWEgY29ycmVudGUiCisKKyM6IHNlYXJjaC5jOjQyNjMKK21zZ2lkICJBbGwgaW5jbHVkZWQgZmlsZXMgd2VyZSBmb3VuZCIKK21zZ3N0ciAiVHV0dGkgaSBmaWxlIGluY2x1c2kgc29ubyBzdGF0aSB0cm92YXRpIgorCisjOiBzZWFyY2guYzo0MjY1Cittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIk5lc3N1biBmaWxlIGluY2x1c28iCisKKyM6IHNlYXJjaC5jOjQyODEKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IE5vbiBzb25vIHJpdXNjaXRvIGEgdHJvdmFyZSBsYSBkZWZpbml6aW9uZSIKKworIzogc2VhcmNoLmM6NDI4MworbXNnaWQgIkUzODk6IENvdWxkbid0IGZpbmQgcGF0dGVybiIKK21zZ3N0ciAiRTM4OTogTm9uIHNvbiByaXVzY2l0byBhIHRyb3ZhcmUgaWwgbW9kZWxsbyIKKworIzogc3ludGF4LmM6MzA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkwOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTM5MDogQXJnb21lbnRvIG5vbiBhbW1lc3NvOiAlcyIKKworIzogc3ludGF4LmM6MzIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkxOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MTogJ2NsdXN0ZXInIHNpbnRhdHRpY28gaW5lc2lzdGVudGU6ICVzIgorCisjOiBzeW50YXguYzozMzk0Cittc2dpZCAiTm8gU3ludGF4IGl0ZW1zIGRlZmluZWQgZm9yIHRoaXMgYnVmZmVyIgorbXNnc3RyICJOZXNzdW4gZWxlbWVudG8gc2ludGF0dGljbyBkZWZpbml0byBwZXIgcXVlc3RvIGJ1ZmZlciIKKworIzogc3ludGF4LmM6MzQwMgorbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAic2luY3Jvbml6em8gaSBjb21tZW50aSBuZWxsbyBzdGlsZSBDIgorCisjOiBzeW50YXguYzozNDEwCittc2dpZCAibm8gc3luY2luZyIKK21zZ3N0ciAibmVzc3VuYSBzc2luY3Jvbml6emF6aW9uZSIKKworIzogc3ludGF4LmM6MzQxMworbXNnaWQgInN5bmNpbmcgc3RhcnRzICIKK21zZ3N0ciAibGEgc2luY3Jvbml6emF6aW9uZSBpbml6aWEgIgorCisjOiBzeW50YXguYzozNDE1IHN5bnRheC5jOjM0OTAKK21zZ2lkICIgbGluZXMgYmVmb3JlIHRvcCBsaW5lIgorbXNnc3RyICIgbGluZWUgcHJpbWEgZGVsbGEgbGluZWEgaW5pemlhbGUiCisKKyM6IHN5bnRheC5jOjM0MjAKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBFbGVtZW50aSBzaW5jcm9uaXp6YXppb25lIHNpbnRhc3NpIC0tLSIKKworIzogc3ludGF4LmM6MzQyNQorbXNnaWQgIiIKKyJcbiIKKyJzeW5jaW5nIG9uIGl0ZW1zIgorbXNnc3RyICIiCisiXG4iCisic2luY3Jvbml6em8gZWxlbWVudGkiCisKKyM6IHN5bnRheC5jOjM0MzEKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gRWxlbWVudGkgc2ludGF0dGljaSAtLS0iCisKKyM6IHN5bnRheC5jOjM0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MjogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTI6ICdjbHVzdGVyJyBzaW50YXR0aWNvIGluZXNpc3RlbnRlOiAlcyIKKworIzogc3ludGF4LmM6MzQ4MAorbXNnaWQgIm1pbmltYWwgIgorbXNnc3RyICJtaW5pbWFsZSAiCisKKyM6IHN5bnRheC5jOjM0ODcKK21zZ2lkICJtYXhpbWFsICIKK21zZ3N0ciAibWFzc2ltYWxlICIKKworIzogc3ludGF4LmM6MzQ5OQorbXNnaWQgIjsgbWF0Y2ggIgorbXNnc3RyICI7IGNvcnJpc3AuICIKKworIzogc3ludGF4LmM6MzUwMQorbXNnaWQgIiBsaW5lIGJyZWFrcyIKK21zZ3N0ciAiIGludGVycnV6aW9uaSBkaSBsaW5lYSIKKworIzogc3ludGF4LmM6NDEzNQorbXNnaWQgIkUzOTM6IGdyb3VwW3RdaGVyZSBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vbiBhbW1lc3NvIHF1aSIKKworIzogc3ludGF4LmM6NDE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk0OiBEaWRuJ3QgZmluZCByZWdpb24gaXRlbSBmb3IgJXMiCittc2dzdHIgIkUzOTQ6IEVsZW1lbnRvIGRpICdyZWdpb24nIG5vbiB0cm92YXRvIHBlciAlcyIKKworIzogc3ludGF4LmM6NDE4NworbXNnaWQgIkUzOTU6IGNvbnRhaW5zIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk1OiBjb250aWVuZSBhcmdvbWVudGkgbm9uIGFjY2V0dGF0aSBxdWkiCisKKyM6IHN5bnRheC5jOjQxOTgKK21zZ2lkICJFMzk2OiBjb250YWluZWRpbiBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NjogYXJnb21lbnRvICdjb250YWluZWRpbicgbm9uIGFjY2V0dGF0byBxdWkiCisKKyM6IHN5bnRheC5jOjQyNzYKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5NzogTm9tZSBmaWxlIG5lY2Vzc2FyaW8iCisKKyM6IHN5bnRheC5jOjQ2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiBNYW5jYSAnPSc6ICVzIgorCisjOiBzeW50YXguYzo0NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBzeW50YXggcmVnaW9uICVzIgorbXNnc3RyICJFMzk5OiBBcmdvbWVudGkgbm9uIHN1ZmZpY2llbnRpIHBlcjogJ3N5bnRheCByZWdpb24nICVzIgorCisjOiBzeW50YXguYzo1MTAzCittc2dpZCAiRTQwMDogTm8gY2x1c3RlciBzcGVjaWZpZWQiCittc2dzdHIgIkU0MDA6IE5lc3N1biAnY2x1c3Rlcicgc3BlY2lmaWNhdG8iCisKKyM6IHN5bnRheC5jOjUxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMTogUGF0dGVybiBkZWxpbWl0ZXIgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQwMTogRGVsaW1pdGF0b3JlIGRpIGVzcHJlc3Npb25lIG5vbiB0cm92YXRvOiAlcyIKKworIzogc3ludGF4LmM6NTIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDAyOiBHYXJiYWdlIGFmdGVyIHBhdHRlcm46ICVzIgorbXNnc3RyICJFNDAyOiBTcGF6emF0dXJhIGRvcG8gZXNwcmVzc2lvbmU6ICVzIgorCisjOiBzeW50YXguYzo1MzA1Cittc2dpZCAiRTQwMzogc3ludGF4IHN5bmM6IGxpbmUgY29udGludWF0aW9ucyBwYXR0ZXJuIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiIgorIkU0MDM6IHN5bnRheCBzeW5jOiBlc3ByZXNzaW9uZSBkaSBjb250aW51YXppb25lIGxpbmVhIHNwZWNpZmljYXRhIGR1ZSB2b2x0ZSIKKworIzogc3ludGF4LmM6NTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA0OiBJbGxlZ2FsIGFyZ3VtZW50czogJXMiCittc2dzdHIgIkU0MDQ6IEFyZ29tZW50aSBub24gdmFsaWRpOiAlcyIKKworIzogc3ludGF4LmM6NTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiBNYW5jYSAnPSc6ICVzIgorCisjOiBzeW50YXguYzo1NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDY6IEVtcHR5IGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQwNjogQXJnb21lbnRvIG51bGxvOiAlcyIKKworIzogc3ludGF4LmM6NTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA3OiAlcyBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNDA3OiAlcyBub24gY29uc2VudGl0byBxdWkiCisKKyM6IHN5bnRheC5jOjU0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwODogJXMgbXVzdCBiZSBmaXJzdCBpbiBjb250YWlucyBsaXN0IgorbXNnc3RyICJFNDA4OiAlcyBkZXZlIHZlbmlyZSBwZXIgcHJpbW8gbmVsbGEgbGlzdGEgJ2NvbnRhaW5zJyIKKworIzogc3ludGF4LmM6NTUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA5OiBVbmtub3duIGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFNDA5OiBOb21lIGdydXBwbyBzY29ub3NjaXV0bzogJXMiCisKKyM6IHN5bnRheC5jOjU3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiBTb3R0by1jb21hbmRvIDpzeW50YXggbm9uIHZhbGlkbzogJXMiCisKKyM6IHN5bnRheC5jOjYxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMTogaGlnaGxpZ2h0IGdyb3VwIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MTE6IGdydXBwbyBldmlkZW56aWF6aW9uZSBub24gdHJvdmF0bzogJXMiCisKKyM6IHN5bnRheC5jOjYxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMjogTm90IGVub3VnaCBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTI6IEFyZ29tZW50aSBub24gc3VmZmljaWVudGk6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMzogVG9vIG1hbnkgYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEzOiBUcm9wcGkgYXJnb21lbnRpOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTg3Cittc2dpZCAiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIgorbXNnc3RyICJFNDE0OiAnZ3JvdXAnIGhhIGltcG9zdGF6aW9uaSwgJ2hpZ2hsaWdodCBsaW5rJyBpZ25vcmF0byIKKworIzogc3ludGF4LmM6NjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE1OiB1bmV4cGVjdGVkIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE1OiBzZWdubyAnPScgaW5hdHRlc286ICVzIgorCisjOiBzeW50YXguYzo2MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IG1hbmNhIHNlZ25vICc9JzogJXMiCisKKyM6IHN5bnRheC5jOjYzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MTc6IG1hbmNhIGFyZ29tZW50bzogJXMiCisKKyM6IHN5bnRheC5jOjY0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6IFZhbG9yZSBub24gYW1tZXNzbzogJXMiCisKKyM6IHN5bnRheC5jOjY1MzYKK21zZ2lkICJFNDE5OiBGRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDE5OiBjb2xvcmUgZGkgdGVzdG8gc2Nvbm9zY2l1dG8iCisKKyM6IHN5bnRheC5jOjY1NDcKK21zZ2lkICJFNDIwOiBCRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDIwOiBjb2xvcmUgZGkgc2ZvbmRvIHNjb25vc2NpdXRvIgorCisjOiBzeW50YXguYzo2NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjE6IENvbG9yIG5hbWUgb3IgbnVtYmVyIG5vdCByZWNvZ25pemVkOiAlcyIKK21zZ3N0ciAiRTQyMTogTnVtZXJvIG8gbm9tZSBkaSBjb2xvcmUgbm9uIHJpY29ub3NjaXV0bzogJXMiCisKKyM6IHN5bnRheC5jOjY4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6IGNvZGljZSB0ZXJtaW5hbGUgdHJvcHBvIGx1bmdvOiAlcyIKKworIzogc3ludGF4LmM6Njg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzogQXJnb21lbnRvIG5vbiBhbW1lc3NvOiAlcyIKKworIzogc3ludGF4LmM6NzM5MAorbXNnaWQgIkU0MjQ6IFRvbyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBpbiB1c2UiCittc2dzdHIgIkU0MjQ6IFRyb3BwaSBncnVwcGkgZXZpZGVuemlhemlvbmUgZGlmZmVyZW50aSBpbiB1c28iCisKKyM6IHN5bnRheC5jOjc5MTEKK21zZ2lkICJFNjY5OiBVbnByaW50YWJsZSBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSIKK21zZ3N0ciAiRTY2OTogQ2FyYXR0ZXJlIG5vbiBzdGFtcGFiaWxlIGluIHVuIG5vbWUgZGkgZ3J1cHBvIgorCisjLiBUaGlzIGlzIGFuIGVycm9yLCBidXQgc2luY2UgdGhlcmUgcHJldmlvdXNseSB3YXMgbm8gY2hlY2sgb25seQorIy4gKiBnaXZlIGEgd2FybmluZy4KKyM6IHN5bnRheC5jOjc5MTgKK21zZ2lkICJXMTg6IEludmFsaWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUiCittc2dzdHIgIlcxODogQ2FyYXR0ZXJlIG5vbiBhbW1lc3NvIGluIHVuIG5vbWUgZGkgZ3J1cHBvIgorCisjOiB0YWcuYzo5MAorbXNnaWQgIkU1NTU6IGF0IGJvdHRvbSBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTU6IGFsIGZvbmRvIGRlbGxhICdzdGFjaycgZGVsbGUgdGFnIgorCisjOiB0YWcuYzo5MQorbXNnaWQgIkU1NTY6IGF0IHRvcCBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTY6IGluIGNpbWEgYWxsYSAnc3RhY2snIGRlbGxlIHRhZyIKKworIzogdGFnLmM6NDEyCittc2dpZCAiRTQyNTogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0MjU6IE5vbiBwb3NzbyBhbmRhcmUgcHJpbWEgZGVsbGEgcHJpbWEgdGFnIGNvcnJpc3BvbmRlbnRlIgorCisjOiB0YWcuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6IHRhZyBub24gdHJvdmF0YTogJXMiCisKKyM6IHRhZy5jOjU4MworbXNnaWQgIiAgIyBwcmkga2luZCB0YWciCittc2dzdHIgIiAgIyBwcmkgdGlwbyB0YWciCisKKyM6IHRhZy5jOjU4NgorbXNnaWQgImZpbGVcbiIKK21zZ3N0ciAiZmlsZVxuIgorCisjLgorIy4gKiBBc2sgdG8gc2VsZWN0IGEgdGFnIGZyb20gdGhlIGxpc3QuCisjLiAqIFdoZW4gdXNpbmcgIjpzaWxlbnQiIGFzc3VtZSB0aGF0IDxDUj4gd2FzIGVudGVyZWQuCisjLgorIzogdGFnLmM6NzQ0Cittc2dpZCAiRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KTogIgorbXNnc3RyICJCYXR0aSBuLiBkaSBzY2VsdGEgKDxJTlZJTz4gcGVyIGxhc2NpYXIgcGVyZGVyZSk6ICIKKworIzogdGFnLmM6Nzg0Cittc2dpZCAiRTQyNzogVGhlcmUgaXMgb25seSBvbmUgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI3OiBDJ+ggc29sbyB1bmEgdGFnIGNvcnJpc3BvbmRlbnRlIgorCisjOiB0YWcuYzo3ODYKK21zZ2lkICJFNDI4OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI4OiBOb24gcG9zc28gYW5kYXJlIG9sdHJlIGwndWx0aW1hIHRhZyBjb3JyaXNwb25kZW50ZSIKKworIzogdGFnLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJJbCBmaWxlIFwiJXNcIiBub24gZXNpc3RlIgorCisjLiBHaXZlIGFuIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiBtYXRjaGluZyB0YWdzCisjOiB0YWcuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICVkIG9mICVkJXMiCittc2dzdHIgInRhZyAlZCBkaSAlZCVzIgorCisjOiB0YWcuYzo4MjYKK21zZ2lkICIgb3IgbW9yZSIKK21zZ3N0ciAiIG8gcGn5IgorCisjOiB0YWcuYzo4MjgKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiICBVc28gdGFnIGlnbm9yYW5kbyBtYWl1c2NvbGUvbWludXNjb2xlISIKKworIzogdGFnLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Mjk6IEZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFNDI5OiBJbCBmaWxlIFwiJXNcIiBub24gZXNpc3RlIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRhZy5jOjk0MQorbXNnaWQgIiIKKyJcbiIKKyIgICMgVE8gdGFnICAgICAgICAgRlJPTSBsaW5lICBpbiBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgICMgQSAgdGFnICAgICAgICAgREFfXyBsaW5lYSBpbiBmaWxlL3Rlc3RvIgorCisjOiB0YWcuYzoxMzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyB0YWdzIGZpbGUgJXMiCittc2dzdHIgIlJpY2VyY2EgbmVsIHRhZyBmaWxlICVzIgorCisjOiB0YWcuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzA6IFRhZyBmaWxlIHBhdGggdHJ1bmNhdGVkIGZvciAlc1xuIgorbXNnc3RyICJFNDMwOiBQZXJjb3JzbyB0YWcgZmlsZSB0cm9uY2F0byBwZXIgJXNcbiIKKworIzogdGFnLmM6MjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogRXJyb3JlIGRpIGZvcm1hdG8gbmVsIHRhZyBmaWxlIFwiJXNcIiIKKworIzogdGFnLmM6MjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJCZWZvcmUgYnl0ZSAlbGQiCittc2dzdHIgIlByaW1hIGRlbCBieXRlICVsZCIKKworIzogdGFnLmM6MjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMyOiBUYWdzIGZpbGUgbm90IHNvcnRlZDogJXMiCittc2dzdHIgIkU0MzI6IFRhZyBmaWxlIG5vbiBvcmRpbmF0byBhbGZhYmV0aWNhbWVudGU6ICVzIgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MjI4MAorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzogTmVzc3VuIHRhZyBmaWxlIgorCisjOiB0YWcuYzozMDE2Cittc2dpZCAiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIKK21zZ3N0ciAiRTQzNDogTm9uIHJpZXNjbyBhIHRyb3ZhcmUgbW9kZWxsbyB0YWciCisKKyM6IHRhZy5jOjMwMjcKK21zZ2lkICJFNDM1OiBDb3VsZG4ndCBmaW5kIHRhZywganVzdCBndWVzc2luZyEiCittc2dzdHIgIkU0MzU6IE5vbiByaWVzY28gYSB0cm92YXJlIHRhZywgc3RvIHNvbG8gdGlyYW5kbyBhIGluZG92aW5hcmUhIgorCisjOiB0ZXJtLmM6MTc1OQorbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiJyBub24gbm90by4gVGVybWluYWxpIGRpc3BvbmliaWxpIHByZWRpc3Bvc3RpIHNvbm86IgorCisjOiB0ZXJtLmM6MTc4MworbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAicHJlZGVmaW5pdG8gYSAnIgorCisjOiB0ZXJtLmM6MjE0MQorbXNnaWQgIkU1NTc6IENhbm5vdCBvcGVuIHRlcm1jYXAgZmlsZSIKK21zZ3N0ciAiRTU1NzogTm9uIHBvc3NvIGFwcmlyZSBmaWxlICd0ZXJtY2FwJyIKKworIzogdGVybS5jOjIxNDUKK21zZ2lkICJFNTU4OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWluZm8iCittc2dzdHIgIkU1NTg6IERlc2NyaXppb25lIHRlcm1pbmFsZSBub24gdHJvdmF0YSBpbiAndGVybWluZm8nIgorCisjOiB0ZXJtLmM6MjE0NworbXNnaWQgIkU1NTk6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNTU5OiBEZXNjcml6aW9uZSB0ZXJtaW5hbGUgbm9uIHRyb3ZhdGEgaW4gJ3Rlcm1jYXAnIgorCisjOiB0ZXJtLmM6MjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDM2OiBObyBcIiVzXCIgZW50cnkgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTQzNjogTmVzc3VuYSBkZXNjcml6aW9uZSBwZXIgXCIlc1wiIGluICd0ZXJtY2FwJyIKKworIzogdGVybS5jOjI3ODAKK21zZ2lkICJFNDM3OiB0ZXJtaW5hbCBjYXBhYmlsaXR5IFwiY21cIiByZXF1aXJlZCIKK21zZ3N0ciAiRTQzNzogY2FwYWNpdOAgXCJjbVwiIGRlbCB0ZXJtaW5hbGUgbmVjZXNzYXJpYSIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0ZXJtLmM6NDk5MAorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwga2V5cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gVGFzdGkgVGVybWluYWxlIC0tLSIKKworIzogdWkuYzoyNTgKK21zZ2lkICJuZXcgc2hlbGwgc3RhcnRlZFxuIgorbXNnc3RyICJmYXR0byBlc2VndWlyZSBudW92byBzaGVsbFxuIgorCisjOiB1aS5jOjE4NDEKK21zZ2lkICJWaW06IEVycm9yIHJlYWRpbmcgaW5wdXQsIGV4aXRpbmcuLi5cbiIKK21zZ3N0ciAiVmltOiBFcnJvcmUgbGVnZ2VuZG8gbCdpbnB1dCwgZXNjby4uLlxuIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogdW5kby5jOjQwNQorbXNnaWQgIk5vIHVuZG8gcG9zc2libGU7IGNvbnRpbnVlIGFueXdheSIKK21zZ3N0ciAiJ3VuZG8nIG5vbiBwafkgcG9zc2liaWxlOyBjb250aW51byBjb211bnF1ZSIKKworIzogdW5kby5jOjU2MQorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IG51bWVyaSBsaW5lZSBlcnJhdGkiCisKKyM6IHVuZG8uYzo3NTcKK21zZ2lkICIxIGNoYW5nZSIKK21zZ3N0ciAiMSBtb2RpZmljYSIKKworIzogdW5kby5jOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhbmdlcyIKK21zZ3N0ciAiJWxkIG1vZGlmaWNoZSIKKworIzogdW5kby5jOjgxMgorbXNnaWQgIkU0Mzk6IHVuZG8gbGlzdCBjb3JydXB0IgorbXNnc3RyICJFNDM5OiBsaXN0YSAndW5kbycgbm9uIHZhbGlkYSIKKworIzogdW5kby5jOjg0NAorbXNnaWQgIkU0NDA6IHVuZG8gbGluZSBtaXNzaW5nIgorbXNnc3RyICJFNDQwOiBsaW5lYSBkaSAndW5kbycgbWFuY2FudGUiCisKKyMuIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMKKyM6IHZlcnNpb24uYzo3NTkKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJ2ZXJzaW9uZSBNUy1XaW5kb3dzIDE2LzMyIGJpdCBHVUkiCisKKyM6IHZlcnNpb24uYzo3NjEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJWZXJzaW9uZSBNUy1XaW5kb3dzIDMyIGJpdCBHVUkiCisKKyM6IHZlcnNpb24uYzo3NjQKK21zZ2lkICIgaW4gV2luMzJzIG1vZGUiCittc2dzdHIgIiBpbiBtb2RhbGl04CBXaW4zMnMiCisKKyM6IHZlcnNpb24uYzo3NjYKK21zZ2lkICIgd2l0aCBPTEUgc3VwcG9ydCIKK21zZ3N0ciAiIGNvbiBzdXBwb3J0byBPTEUiCisKKyM6IHZlcnNpb24uYzo3NjkKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgY29uc29sZSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2lvbmUgTVMtV2luZG93cyAzMiBiaXQgY29uc29sZSIKKworIzogdmVyc2lvbi5jOjc3MworbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2IGJpdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2lvbmUgTVMtV2luZG93cyAxNiBiaXQiCisKKyM6IHZlcnNpb24uYzo3NzcKK21zZ2lkICIiCisiXG4iCisiMzIgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2lvbiBNUy1ET1MgMzIgYml0IgorCisjOiB2ZXJzaW9uLmM6Nzc5Cittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb25lIE1TLURPUyAxNiBiaXQiCisKKyM6IHZlcnNpb24uYzo3ODUKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb25lIE1hY09TIFggKHVuaXgpIgorCisjOiB2ZXJzaW9uLmM6Nzg3Cittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb25lIFggTWFjT1MiCisKKyM6IHZlcnNpb24uYzo3OTAKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb25lIE1hY09TIgorCisjOiB2ZXJzaW9uLmM6Nzk1Cittc2dpZCAiIgorIlxuIgorIlJJU0MgT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb25lIFJJU0MgT1MiCisKKyM6IHZlcnNpb24uYzo4MDUKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisiUGF0Y2ggaW5jbHVzZTogIgorCisjOiB2ZXJzaW9uLmM6ODMxIHZlcnNpb24uYzoxMTk5Cittc2dpZCAiTW9kaWZpZWQgYnkgIgorbXNnc3RyICJNb2RpZmljYXRvIGRhICIKKworIzogdmVyc2lvbi5jOjgzOAorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyJDb21waWxhdG8gIgorCisjOiB2ZXJzaW9uLmM6ODQxCittc2dpZCAiYnkgIgorbXNnc3RyICJkYSAiCisKKyM6IHZlcnNpb24uYzo4NTMKK21zZ2lkICIiCisiXG4iCisiSHVnZSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb25lIGdpZ2FudGUgIgorCisjOiB2ZXJzaW9uLmM6ODU2Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlZlcnNpb25lIGdyYW5kZSAiCisKKyM6IHZlcnNpb24uYzo4NTkKK21zZ2lkICIiCisiXG4iCisiTm9ybWFsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2lvbmUgbm9ybWFsZSAiCisKKyM6IHZlcnNpb24uYzo4NjIKK21zZ2lkICIiCisiXG4iCisiU21hbGwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJWZXJzaW9uZSBwaWNjb2xhICIKKworIzogdmVyc2lvbi5jOjg2NAorbXNnaWQgIiIKKyJcbiIKKyJUaW55IHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiVmVyc2lvbmUgbWludXNjb2xhICIKKworIzogdmVyc2lvbi5jOjg3MAorbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAic2VuemEgR1VJLiIKKworIzogdmVyc2lvbi5jOjg3NQorbXNnaWQgIndpdGggR1RLMi1HTk9NRSBHVUkuIgorbXNnc3RyICJjb24gR1VJIEdUSzItR05PTUUuIgorCisjOiB2ZXJzaW9uLmM6ODc3Cittc2dpZCAid2l0aCBHVEstR05PTUUgR1VJLiIKK21zZ3N0ciAiY29uIEdVSSBHVEstR05PTUUuIgorCisjOiB2ZXJzaW9uLmM6ODgxCittc2dpZCAid2l0aCBHVEsyIEdVSS4iCittc2dzdHIgImNvbiBHVUkgR1RLMi4iCisKKyM6IHZlcnNpb24uYzo4ODMKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICJjb24gR1VJIEdUSy4iCisKKyM6IHZlcnNpb24uYzo4ODgKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICJjb24gR1VJIFgxMS1Nb3RpZi4iCisKKyM6IHZlcnNpb24uYzo4OTIKK21zZ2lkICJ3aXRoIFgxMS1uZVh0YXcgR1VJLiIKK21zZ3N0ciAiY29uIEdVSSBYMTEtbmVYdGF3LiIKKworIzogdmVyc2lvbi5jOjg5NAorbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICJjb24gR1VJIFgxMS1BdGhlbmEuIgorCisjOiB2ZXJzaW9uLmM6ODk4Cittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgImNvbiBHVUkgQmVPUy4iCisKKyM6IHZlcnNpb24uYzo5MDEKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICJjb24gR1VJIFBob3Rvbi4iCisKKyM6IHZlcnNpb24uYzo5MDQKK21zZ2lkICJ3aXRoIEdVSS4iCittc2dzdHIgImNvbiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6OTA3Cittc2dpZCAid2l0aCBDYXJib24gR1VJLiIKK21zZ3N0ciAiY29uIEdVSSBDYXJib24uIgorCisjOiB2ZXJzaW9uLmM6OTEwCittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICJjb24gR1VJIENvY29hLiIKKworIzogdmVyc2lvbi5jOjkxMworbXNnaWQgIndpdGggKGNsYXNzaWMpIEdVSS4iCittc2dzdHIgImNvbiBHVUkgKGNsYXNzaWNhKS4iCisKKyM6IHZlcnNpb24uYzo5MjQKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIgIE9wemlvbmkgaW5jbHVzZSAoKykgbyBlc2NsdXNlICgtKTpcbiIKKworIzogdmVyc2lvbi5jOjkzNgorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgZmlsZSB2aW1yYyBkaSBzaXN0ZW1hOiBcIiIKKworIzogdmVyc2lvbi5jOjk0MQorbXNnaWQgIiAgICAgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgIGZpbGUgdmltcmMgdXRlbnRlOiBcIiIKKworIzogdmVyc2lvbi5jOjk0NgorbXNnaWQgIiAybmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIElJIGZpbGUgdmltcmMgdXRlbnRlOiBcIiIKKworIzogdmVyc2lvbi5jOjk1MQorbXNnaWQgIiAzcmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgSUlJIGZpbGUgdmltcmMgdXRlbnRlOiBcIiIKKworIzogdmVyc2lvbi5jOjk1NgorbXNnaWQgIiAgICAgIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICBmaWxlIGV4cmMgdXRlbnRlOiBcIiIKKworIzogdmVyc2lvbi5jOjk2MQorbXNnaWQgIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICBJSSBmaWxlIGV4cmMgdXRlbnRlOiBcIiIKKworIzogdmVyc2lvbi5jOjk2NworbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICBmaWxlIGd2aW1yYyBkaSBzaXN0ZW1hOiBcIiIKKworIzogdmVyc2lvbi5jOjk3MQorbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgZmlsZSBndmltcmMgdXRlbnRlOiBcIiIKKworIzogdmVyc2lvbi5jOjk3NQorbXNnaWQgIjJuZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgSUkgZmlsZSBndmltcmMgdXRlbnRlOiBcIiIKKworIzogdmVyc2lvbi5jOjk4MAorbXNnaWQgIjNyZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICBJSUkgZmlsZSBndmltcmMgdXRlbnRlOiBcIiIKKworIzogdmVyc2lvbi5jOjk4NworbXNnaWQgIiAgICBzeXN0ZW0gbWVudSBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIGZpbGUgbWVudSBkaSBzaXN0ZW1hOiBcIiIKKworIzogdmVyc2lvbi5jOjk5NQorbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICAgICAgICAgJFZJTSBkaSByaXNlcnZhOiBcIiIKKworIzogdmVyc2lvbi5jOjEwMDEKK21zZ2lkICIgZi1iIGZvciAkVklNUlVOVElNRTogXCIiCittc2dzdHIgIiAkVklNUlVOVElNRSBkaSByaXNlcnZhOiBcIiIKKworIzogdmVyc2lvbi5jOjEwMDUKK21zZ2lkICJDb21waWxhdGlvbjogIgorbXNnc3RyICJDb21waWxhemlvbmU6ICIKKworIzogdmVyc2lvbi5jOjEwMTEKK21zZ2lkICJDb21waWxlcjogIgorbXNnc3RyICJDb21waWxhdG9yZTogIgorCisjOiB2ZXJzaW9uLmM6MTAxNgorbXNnaWQgIkxpbmtpbmc6ICIKK21zZ3N0ciAiTGluazogIgorCisjOiB2ZXJzaW9uLmM6MTAyMQorbXNnaWQgIiAgREVCVUcgQlVJTEQiCittc2dzdHIgIiAgVkVSU0lPTkUgREVCVUciCisKKyM6IHZlcnNpb24uYzoxMDYwCittc2dpZCAiVklNIC0gVmkgSU1wcm92ZWQiCittc2dzdHIgIlZJTSAtIFZpIElNcHJvdmVkIChWSSBNaWdsaW9yYXRvKSIKKworIzogdmVyc2lvbi5jOjEwNjIKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAidmVyc2lvbmUgIgorCisjOiB2ZXJzaW9uLmM6MTA2MworbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAiZGkgQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorCisjOiB2ZXJzaW9uLmM6MTA2NworbXNnaWQgIlZpbSBpcyBvcGVuIHNvdXJjZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUiCittc2dzdHIgIlZpbSDoICdvcGVuIHNvdXJjZScgZSBwdfIgZXNzZXJlIGRpc3RyaWJ1aXRvIGxpYmVyYW1lbnRlIgorCisjOiB2ZXJzaW9uLmM6MTA2OQorbXNnaWQgIkhlbHAgcG9vciBjaGlsZHJlbiBpbiBVZ2FuZGEhIgorbXNnc3RyICJBaXV0YSBpIGJhbWJpbmkgcG92ZXJpIGRlbGwnVWdhbmRhISIKKworIzogdmVyc2lvbi5jOjEwNzAKK21zZ2lkICJ0eXBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJiYXR0aSA6aGVscCBpY2NmPEludmlvPiAgICAgICBwZXIgaW5mb3JtYXppb25pICAgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTA3MgorbXNnaWQgInR5cGUgIDpxPEVudGVyPiAgICAgICAgICAgICAgIHRvIGV4aXQgICAgICAgICAiCittc2dzdHIgImJhdHRpIDpxPEludmlvPiAgICAgICAgICAgICAgIHBlciB1c2NpcmUgICAgICAgICAgICAgICAgICAiCisKKyM6IHZlcnNpb24uYzoxMDczCittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAiYmF0dGkgOmhlbHA8SW52aW8+ICBvICA8RjE+ICAgcGVyIGFpdXRvIG9ubGluZSAgICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjEwNzQKK21zZ2lkICJ0eXBlICA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICBmb3IgdmVyc2lvbiBpbmZvIgorbXNnc3RyICJiYXR0aSA6aGVscCB2ZXJzaW9uNjxJbnZpbz4gICBwZXIgaW5mb3JtYXppb25pIHN1IHZlcnNpb25lIgorCisjOiB2ZXJzaW9uLmM6MTA3NworbXNnaWQgIlJ1bm5pbmcgaW4gVmkgY29tcGF0aWJsZSBtb2RlIgorbXNnc3RyICJFc2VndW8gaW4gbW9kYWxpdOAgY29tcGF0aWJpbGUgVmkiCisKKyM6IHZlcnNpb24uYzoxMDc4Cittc2dpZCAidHlwZSAgOnNldCBub2NwPEVudGVyPiAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyIKK21zZ3N0ciAiYmF0dGkgOnNldCBub2NwPEludmlvPiAgICAgICAgcGVyIHZhbG9yaSBwcmVkZWZpbml0aSBWaW0iCisKKyM6IHZlcnNpb24uYzoxMDc5Cittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAiYmF0dGkgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gcGVyIGluZm8gYWwgcmlndWFyZG8iCisKKyM6IHZlcnNpb24uYzoxMDk0Cittc2dpZCAibWVudSAgSGVscC0+T3JwaGFucyAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uICAgICIKK21zZ3N0ciAibWVudSAgQWl1dG8tPk9yZmFuaSAgICAgICAgICAgcGVyIGluZm9ybWF6aW9uaSAgICIKKworIzogdmVyc2lvbi5jOjEwOTYKK21zZ2lkICJSdW5uaW5nIG1vZGVsZXNzLCB0eXBlZCB0ZXh0IGlzIGluc2VydGVkIgorbXNnc3RyICJFc2VjdXppb25lIHNlbnphIG1vZGFsaXTgOiBzb2xvIGluc2VyaW1lbnRvIgorCisjOiB2ZXJzaW9uLmM6MTA5NworbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIEluc2VydCBNb2RlICAiCittc2dzdHIgIm1lbnUgTW9kaWZpY2EtPkltcG9zdC5HbG9iYWxpLT5Nb2RhbC5JbnNlci4gU+wvTm8iCisKKyM6IHZlcnNpb24uYzoxMDk4Cittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHR3byBtb2RlcyAgICAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgICBwZXIgbW9kbyBJbnNlci4vQ29tYW5kaSIKKworIzogdmVyc2lvbi5jOjExMDIKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBWaSBDb21wYXRpYmxlIgorbXNnc3RyICJtZW51IE1vZGlmaWNhLT5JbXBvc3QuR2xvYmFsaS0+Q29tcGF0aWJpbGUgVmkgU+wvTm8iCisKKyM6IHZlcnNpb24uYzoxMTAzCittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZG8gVmltIHByZWRlZmluaXRvICIKKworIzogdmVyc2lvbi5jOjExNTAKK21zZ2lkICJTcG9uc29yIFZpbSBkZXZlbG9wbWVudCEiCittc2dzdHIgIlNwb25zb3JpenphIGxvIHN2aWx1cHBvIGRpIFZpbSEiCisKKyM6IHZlcnNpb24uYzoxMTUxCittc2dpZCAiQmVjb21lIGEgcmVnaXN0ZXJlZCBWaW0gdXNlciEiCittc2dzdHIgIkRpdmVudGEgdW4gdXRlbnRlIFZpbSByZWdpc3RyYXRvISIKKworIzogdmVyc2lvbi5jOjExNTQKK21zZ2lkICJ0eXBlICA6aGVscCBzcG9uc29yPEVudGVyPiAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJiYXR0aSA6aGVscCBzcG9uc29yPEludmlvPiAgICBwZXIgaW5mb3JtYXppb25pICIKKworIzogdmVyc2lvbi5jOjExNTUKK21zZ2lkICJ0eXBlICA6aGVscCByZWdpc3RlcjxFbnRlcj4gICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJiYXR0aSA6aGVscCByZWdpc3RlcjxJbnZpbz4gICBwZXIgaW5mb3JtYXppb25pICIKKworIzogdmVyc2lvbi5jOjExNTcKK21zZ2lkICJtZW51ICBIZWxwLT5TcG9uc29yL1JlZ2lzdGVyICBmb3IgaW5mb3JtYXRpb24gICAgIgorbXNnc3RyICJtZW51ICBBaXV0by0+U3BvbnNvci9SZWdpc3RyYXppb25lICBwZXIgaW5mb3JtYXppb25pICIKKworIzogdmVyc2lvbi5jOjExNjcKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICJBVFRFTlpJT05FOiBUcm92YXRvIFdpbmRvd3MgOTUvOTgvTUUiCisKKyM6IHZlcnNpb24uYzoxMTcwCittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAiYmF0dGkgOmhlbHAgd2luZG93czk1PEVudGVyPiAgcGVyIGluZm8gYWwgcmlndWFyZG8iCisKKyM6IHdpbmRvdy5jOjIwMworbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiBOb24gYyfoIHVuYSBmaW5lc3RyYSBkaSBwcmUtdmlzdWFsaXp6YXppb25lIgorCisjOiB3aW5kb3cuYzo1ODEKK21zZ2lkICJFNDQyOiBDYW4ndCBzcGxpdCB0b3BsZWZ0IGFuZCBib3RyaWdodCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJFNDQyOiBOb24gcmllc2NvIGEgZGl2aWRlcmUgQUxUTy1TWCBlIEJBU1NPLURYIGNvbnRlbXBvcmFuZWFtZW50ZSIKKworIzogd2luZG93LmM6MTM0MAorbXNnaWQgIkU0NDM6IENhbm5vdCByb3RhdGUgd2hlbiBhbm90aGVyIHdpbmRvdyBpcyBzcGxpdCIKK21zZ3N0ciAiRTQ0MzogTm9uIHBvc3NvIHJ1b3RhcmUgcXVhbmRvIHVuJ2FsdHJhIGZpbmVzdHJhIOggZGl2aXNhIGluIGR1ZSIKKworIzogd2luZG93LmM6MTgzNgorbXNnaWQgIkU0NDQ6IENhbm5vdCBjbG9zZSBsYXN0IHdpbmRvdyIKK21zZ3N0ciAiRTQ0NDogTm9uIHJpZXNjbyBhIGNoaXVkZXJlIGwndWx0aW1hIGZpbmVzdHJhIgorCisjOiB3aW5kb3cuYzoyNTY3Cittc2dpZCAiQWxyZWFkeSBvbmx5IG9uZSB3aW5kb3ciCittc2dzdHIgIkMn6CBnaeAgdW5hIGZpbmVzdHJhIHNvbGEiCisKKyM6IHdpbmRvdy5jOjI2MTQKK21zZ2lkICJFNDQ1OiBPdGhlciB3aW5kb3cgY29udGFpbnMgY2hhbmdlcyIKK21zZ3N0ciAiRTQ0NTogQWx0cmUgZmluZXN0cmUgY29udGVuZ29ubyBtb2RpZmljaGUiCisKKyM6IHdpbmRvdy5jOjQ0ODAKK21zZ2lkICJFNDQ2OiBObyBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFNDQ2OiBOZXNzdW4gbm9tZSBmaWxlIHNvdHRvIGlsIGN1cnNvcmUiCisKKyM6IHdpbmRvdy5jOjQ1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0NzogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFNDQ3OiBOb24gcmllc2NvIGEgdHJvdmFyZSBpbCBmaWxlIFwiJXNcIiBuZWwgcGVyY29yc28iCisKKyM6IGlmX3BlcmwueHM6MzI2IGdsb2JhbHMuaDoxMjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzA6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgJXMiCittc2dzdHIgIkUzNzA6IE5vbiBwb3NzbyBjYXJpY2FyZSBsYSBsaWJyZXJpYSAlcyIKKworIzogaWZfcGVybC54czo1NTQKK21zZ2lkICJTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgUGVybCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisiU3BpYWNlbnRlLCBjb21hbmRvIG5vbiBkaXNwb25pYmlsZSwgbm9uIHJpZXNjbyBhIGNhcmljYXJlIGxpYnJlcmlhIHByb2dyYW1taSAiCisiUGVybC4iCisKKyM6IGlmX3BlcmwueHM6NjA3Cittc2dpZCAiRTI5OTogUGVybCBldmFsdWF0aW9uIGZvcmJpZGRlbiBpbiBzYW5kYm94IHdpdGhvdXQgdGhlIFNhZmUgbW9kdWxlIgorbXNnc3RyICIiCisiRTI5OTogVmFsb3JpenphemlvbmUgUGVybCB2aWV0YXRhIGluIGFtYmllbnRlIHByb3RldHRvIHNlbnphIGlsIG1vZHVsbyBTYWZlIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjU4MworbXNnaWQgIkVkaXQgd2l0aCAmbXVsdGlwbGUgVmltcyIKK21zZ3N0ciAiQXByaSBjb24gJm1vbHRpIFZpbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODkKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgIkFwcmkgY29uIHVuIHNvbG8gJlZpbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1OTgKK21zZ2lkICImRGlmZiB3aXRoIFZpbSIKK21zZ3N0ciAiJkRpZmZlcmVuemEgY29uIFZpbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo2MTEKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAiQXByaSBjb24gJlZpbSIKKworIy4gTm93IGNvbmNhdGVuYXRlCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjYzMworbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICJBcHJpIGNvbiBWaW0gZXNpc3RlbnRlIC0gJiIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo3NDYKK21zZ2lkICJFZGl0cyB0aGUgc2VsZWN0ZWQgZmlsZShzKSB3aXRoIFZpbSIKK21zZ3N0ciAiQXByaSBpKGwpIGZpbGUgc2NlbHRvKGkpIGNvbiBWaW0iCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg1IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcHJvY2VzczogQ2hlY2sgaWYgZ3ZpbSBpcyBpbiB5b3VyIHBhdGghIgorbXNnc3RyICIiCisiRXJyb3JlIGNyZWFuZG8gaWwgcHJvY2Vzc286IENvbnRyb2xsYXRlIGNoZSBndmltIHNpYSBpbmNsdXNvIG5lbCB2b3N0cm8gIgorImNhbW1pbm8gKFBBVEgpIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg4NiBHdmltRXh0L2d2aW1leHQuY3BwOjkwMCBHdmltRXh0L2d2aW1leHQuY3BwOjk2NworbXNnaWQgImd2aW1leHQuZGxsIGVycm9yIgorbXNnc3RyICJlcnJvcmUgZ3ZpbWV4dC5kbGwiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODk5Cittc2dpZCAiUGF0aCBsZW5ndGggdG9vIGxvbmchIgorbXNnc3RyICJQZXJjb3JzbyBmaWxlIHRyb3BwbyBsdW5nbyEiCisKKyM6IGdsb2JhbHMuaDoxMDMxCittc2dpZCAiLS1ObyBsaW5lcyBpbiBidWZmZXItLSIKK21zZ3N0ciAiLS1GaWxlIHZ1b3RvLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTE5NAorbXNnaWQgIkU0NzA6IENvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiRTQ3MDogQ29tYW5kbyBmaW5pdG8gbWFsZSIKKworIzogZ2xvYmFscy5oOjExOTUKK21zZ2lkICJFNDcxOiBBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAiRTQ3MTogQXJnb21lbnRvIG5lY2Vzc2FyaW8iCisKKyM6IGdsb2JhbHMuaDoxMTk2Cittc2dpZCAiRTEwOiBcXCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgLywgPyBvciAmIgorbXNnc3RyICJFMTA6IFxcIGRvdnJlYmJlIGVzc2VyZSBzZWd1aXRvIGRhIC8sID8gb3BwdXJlICYiCisKKyM6IGdsb2JhbHMuaDoxMTk4Cittc2dpZCAiRTExOiBJbnZhbGlkIGluIGNvbW1hbmQtbGluZSB3aW5kb3c7IDxDUj4gZXhlY3V0ZXMsIENUUkwtQyBxdWl0cyIKK21zZ3N0ciAiRTExOiBOb24gdmFsaWRvIG5lbGxhIGZpbmVzdHJhIGNvbWFuZGk7IDxJTlZJTz4gZXNlZ3VlLCBDVFJMLUMgaWdub3JhIgorCisjOiBnbG9iYWxzLmg6MTIwMAorbXNnaWQgIkUxMjogQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaCIKK21zZ3N0ciAiIgorIkUxMjogQ29tYW5kbyBub24gYW1tZXNzbyBkYSBleHJjL3ZpbXJjIG5lbGxhIGRpci4gaW4gdXNvIG8gbmVsbGEgcmljZXJjYSB0YWciCisKKyM6IGdsb2JhbHMuaDoxMjAyCittc2dpZCAiRTE3MTogTWlzc2luZyA6ZW5kaWYiCittc2dzdHIgIkUxNzE6IE1hbmNhIDplbmRpZiIKKworIzogZ2xvYmFscy5oOjEyMDMKK21zZ2lkICJFNjAwOiBNaXNzaW5nIDplbmR0cnkiCittc2dzdHIgIkU2MDA6IE1hbmNhIDplbmR0cnkiCisKKyM6IGdsb2JhbHMuaDoxMjA0Cittc2dpZCAiRTE3MDogTWlzc2luZyA6ZW5kd2hpbGUiCittc2dzdHIgIkUxNzA6IE1hbmNhIDplbmR3aGlsZSIKKworIzogZ2xvYmFscy5oOjEyMDUKK21zZ2lkICJFNTg4OiA6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODg6IDplbmR3aGlsZSBzZW56YSA6d2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMjA3Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IEZpbGUgZXNpc3RlbnRlIChhZ2dpdW5naSAhIHBlciByaXNjcml2ZXJsbykiCisKKyM6IGdsb2JhbHMuaDoxMjA4Cittc2dpZCAiRTQ3MjogQ29tbWFuZCBmYWlsZWQiCittc2dzdHIgIkU0NzI6IENvbWFuZG8gZmFsbGl0byIKKworIzogZ2xvYmFscy5oOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNDogVW5rbm93biBmb250c2V0OiAlcyIKK21zZ3N0ciAiRTIzNDogRm9udHNldCBzY29ub3NjaXV0bzogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IFVua25vd24gZm9udDogJXMiCittc2dzdHIgIkUyMzU6IEZvbnQgc2Nvbm9zY2l1dG86ICVzIgorCisjOiBnbG9iYWxzLmg6MTIxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IEZvbnQgXCIlc1wiIG5vbiBkaSBsYXJnaGV6emEgZmlzc2EiCisKKyM6IGdsb2JhbHMuaDoxMjE5Cittc2dpZCAiRTQ3MzogSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIkU0NzM6IEVycm9yZSBpbnRlcm5vIgorCisjOiBnbG9iYWxzLmg6MTIyMAorbXNnaWQgIkludGVycnVwdGVkIgorbXNnc3RyICJJbnRlcnJvdHRvIgorCisjOiBnbG9iYWxzLmg6MTIyMQorbXNnaWQgIkUxNDogSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFMTQ6IEluZGlyaXp6byBub24gdmFsaWRvIgorCisjOiBnbG9iYWxzLmg6MTIyMgorbXNnaWQgIkU0NzQ6IEludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkU0NzQ6IEFyZ29tZW50byBub24gdmFsaWRvIgorCisjOiBnbG9iYWxzLmg6MTIyMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDc1OiBJbnZhbGlkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQ3NTogQXJnb21lbnRvIG5vbiB2YWxpZG86ICVzIgorCisjOiBnbG9iYWxzLmg6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogJXMiCittc2dzdHIgIkUxNTogRXNwcmVzc2lvbmUgbm9uIHZhbGlkYTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjI3Cittc2dpZCAiRTE2OiBJbnZhbGlkIHJhbmdlIgorbXNnc3RyICJFMTY6IEludGVydmFsbG8gbm9uIHZhbGlkbyIKKworIzogZ2xvYmFscy5oOjEyMjgKK21zZ2lkICJFNDc2OiBJbnZhbGlkIGNvbW1hbmQiCittc2dzdHIgIkU0NzY6IENvbWFuZG8gbm9uIHZhbGlkbyIKKworIzogZ2xvYmFscy5oOjEyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3OiBcIiVzXCIgaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIkUxNzogXCIlc1wiIOggdW5hIGRpcmVjdG9yeSIKKworIzogZ2xvYmFscy5oOjEyMzMKK21zZ2lkICJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIgorbXNnc3RyICJFMTg6IENhcmF0dGVyaSBub24gcHJldmlzdGkgcHJpbWEgZGkgJz0nIgorCisjOiBnbG9iYWxzLmg6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY0OiBMaWJyYXJ5IGNhbGwgZmFpbGVkIGZvciBcIiVzKClcIiIKK21zZ3N0ciAiRTM2NDogQ2hpYW1hdGEgYSBsaWJyZXJpYSBmYWxsaXRhIHBlciBcIiVzKClcIiIKKworIzogZ2xvYmFscy5oOjEyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0ODogQ291bGQgbm90IGxvYWQgbGlicmFyeSBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTQ0ODogTm9uIHBvc3NvIGNhcmljYXJlIGxhIGZ1bnppb25lIGRpIGxpYnJlcmlhICVzIgorCisjOiBnbG9iYWxzLmg6MTI0NAorbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiAnTWFyaycgY29uIG51bWVybyBsaW5lYSBub24gdmFsaWRvIgorCisjOiBnbG9iYWxzLmg6MTI0NQorbXNnaWQgIkUyMDogTWFyayBub3Qgc2V0IgorbXNnc3RyICJFMjA6ICdNYXJrJyBub24gaW1wb3N0YXRvIgorCisjOiBnbG9iYWxzLmg6MTI0NgorbXNnaWQgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIKK21zZ3N0ciAiRTIxOiBOb24gcG9zc28gZmFyZSBtb2RpZmljaGUsICdtb2RpZmlhYmxlJyDoIGluaWJpdG8iCisKKyM6IGdsb2JhbHMuaDoxMjQ3Cittc2dpZCAiRTIyOiBTY3JpcHRzIG5lc3RlZCB0b28gZGVlcCIKK21zZ3N0ciAiRTIyOiBTY3JpcHQgdHJvcHBvIG5pZGlmaWNhdGkiCisKKyM6IGdsb2JhbHMuaDoxMjQ4Cittc2dpZCAiRTIzOiBObyBhbHRlcm5hdGUgZmlsZSIKK21zZ3N0ciAiRTIzOiBOZXNzdW4gZmlsZSBhbHRlcm5hdG8iCisKKyM6IGdsb2JhbHMuaDoxMjQ5Cittc2dpZCAiRTI0OiBObyBzdWNoIGFiYnJldmlhdGlvbiIKK21zZ3N0ciAiRTI0OiBBYmJyZXZpYXppb25lIGluZXNpc3RlbnRlIgorCisjOiBnbG9iYWxzLmg6MTI1MAorbXNnaWQgIkU0Nzc6IE5vICEgYWxsb3dlZCIKK21zZ3N0ciAiRTQ3NzogISBub24gY29uc2VudGl0byIKKworIzogZ2xvYmFscy5oOjEyNTIKK21zZ2lkICJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICJFMjU6IEdVSSBub24gdXRpbGl6emFiaWxlOiBOb24gYWJpbGl0YXRhIGluIGNvbXBpbGF6aW9uZSIKKworIzogZ2xvYmFscy5oOjEyNTUKK21zZ2lkICJFMjY6IEhlYnJldyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNjogRWJyYWljbyBub24gdXRpbGl6emFiaWxlOiBOb24gYWJpbGl0YXRvIGluIGNvbXBpbGF6aW9uZVxuIgorCisjOiBnbG9iYWxzLmg6MTI1OAorbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjc6IEZhcnNpIG5vbiB1dGlsaXp6YWJpbGU6IE5vbiBhYmlsaXRhdG8gaW4gY29tcGlsYXppb25lXG4iCisKKyM6IGdsb2JhbHMuaDoxMjYxCittc2dpZCAiRTgwMDogQXJhYmljIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTgwMDogQXJhYm8gbm9uIHV0aWxpenphYmlsZTogTm9uIGFiaWxpdGF0byBpbiBjb21waWxhemlvbmVcbiIKKworIzogZ2xvYmFscy5oOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBOb21lIGRpIGdydXBwbyBkaSBldmlkZW56aWF6aW9uZSBpbmVzaXN0ZW50ZTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjY2Cittc2dpZCAiRTI5OiBObyBpbnNlcnRlZCB0ZXh0IHlldCIKK21zZ3N0ciAiRTI5OiBBbmNvcmEgbmVzc3VuIHRlc3RvIGluc2VyaXRvIgorCisjOiBnbG9iYWxzLmg6MTI2NworbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6IE5lc3N1bmEgbGluZWEgY29tYW5kaSBwcmVjZWRlbnRlIgorCisjOiBnbG9iYWxzLmg6MTI2OAorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IE1hcHBpbmcgaW5lc2lzdGVudGUiCisKKyM6IGdsb2JhbHMuaDoxMjY5Cittc2dpZCAiRTQ3OTogTm8gbWF0Y2giCittc2dzdHIgIkU0Nzk6IE5lc3N1bmEgY29ycmlzcG9uZGVuemEiCisKKyM6IGdsb2JhbHMuaDoxMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODA6IE5vIG1hdGNoOiAlcyIKK21zZ3N0ciAiRTQ4MDogTmVzc3VuYSBjb3JyaXNwb25kZW56YTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjcxCittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjogTWFuY2Egbm9tZSBmaWxlIgorCisjOiBnbG9iYWxzLmg6MTI3MgorbXNnaWQgIkUzMzogTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzMzogTmVzc3VuYSBlc3ByZXNzaW9uZSByZWdvbGFyZSBwcmVjZWRlbnRlIGRpICdzdWJzdGl0dXRlJyIKKworIzogZ2xvYmFscy5oOjEyNzMKK21zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCittc2dzdHIgIkUzNDogTmVzc3VuIGNvbWFuZG8gcHJlY2VkZW50ZSIKKworIzogZ2xvYmFscy5oOjEyNzQKK21zZ2lkICJFMzU6IE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTM1OiBOZXNzdW5hIGVzcHJlc3Npb25lIHJlZ29sYXJlIHByZWNlZGVudGUiCisKKyM6IGdsb2JhbHMuaDoxMjc1Cittc2dpZCAiRTQ4MTogTm8gcmFuZ2UgYWxsb3dlZCIKK21zZ3N0ciAiRTQ4MTogTmVzc3VuIGludGVydmFsbG8gY29uc2VudGl0byIKKworIzogZ2xvYmFscy5oOjEyNzcKK21zZ2lkICJFMzY6IE5vdCBlbm91Z2ggcm9vbSIKK21zZ3N0ciAiRTM2OiBNYW5jYSBzcGF6aW8iCisKKyM6IGdsb2JhbHMuaDoxMjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDc6IG5vIHJlZ2lzdGVyZWQgc2VydmVyIG5hbWVkIFwiJXNcIiIKK21zZ3N0ciAiRTI0Nzogbm9uIGVzaXN0ZSBzZXJ2ZXIgcmVnaXN0cmF0byBjb24gbm9tZSBcIiVzXCIiCisKKyM6IGdsb2JhbHMuaDoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODI6IENhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJFNDgyOiBOb24gcmllc2NvIGEgY3JlYXJlIGlsIGZpbGUgJXMiCisKKyM6IGdsb2JhbHMuaDoxMjgzCittc2dpZCAiRTQ4MzogQ2FuJ3QgZ2V0IHRlbXAgZmlsZSBuYW1lIgorbXNnc3RyICJFNDgzOiBOb24gcmllc2NvIGFkIG90dGVuZXJlIG5vbWUgZmlsZSAndGVtcCciCisKKyM6IGdsb2JhbHMuaDoxMjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODQ6IENhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiRTQ4NDogTm9uIHJpZXNjbyBhZCBhcHJpcmUgaWwgZmlsZSAlcyIKKworIzogZ2xvYmFscy5oOjEyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NTogQ2FuJ3QgcmVhZCBmaWxlICVzIgorbXNnc3RyICJFNDg1OiBOb24gcmllc2NvIGEgbGVnZ2VyZSBpbCBmaWxlICVzIgorCisjOiBnbG9iYWxzLmg6MTI4NgorbXNnaWQgIkUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTM3OiBOb24gc2FsdmF0byBkb3BvIG1vZGlmaWNhIChhZ2dpdW5naSAhIHBlciBlc2VndWlyZSBjb211bnF1ZSkiCisKKyM6IGdsb2JhbHMuaDoxMjg3Cittc2dpZCAiRTM4OiBOdWxsIGFyZ3VtZW50IgorbXNnc3RyICJFMzg6IEFyZ29tZW50byBudWxsbyIKKworIzogZ2xvYmFscy5oOjEyODkKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiBNaSBhc3BldHRhdm8gdW4gbnVtZXJvIgorCisjOiBnbG9iYWxzLmg6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA6IENhbid0IG9wZW4gZXJyb3JmaWxlICVzIgorbXNnc3RyICJFNDA6IE5vbiByaWVzY28gYWQgYXByaXJlIGlsIGZpbGUgZXJyb3JpICVzIgorCisjOiBnbG9iYWxzLmg6MTI5NQorbXNnaWQgIkUyMzM6IGNhbm5vdCBvcGVuIGRpc3BsYXkiCittc2dzdHIgIkUyMzM6IG5vbiByaWVzY28gYWQgYXByaXJlIGxvIHNjaGVybW8iCisKKyM6IGdsb2JhbHMuaDoxMjk3Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiBOb24gYyfoIHBp+SBtZW1vcmlhISIKKworIzogZ2xvYmFscy5oOjEyOTkKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZCIKK21zZ3N0ciAiRXNwcmVzc2lvbmUgbm9uIHRyb3ZhdGEiCisKKyM6IGdsb2JhbHMuaDoxMzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODY6IFBhdHRlcm4gbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQ4NjogRXNwcmVzc2lvbmUgbm9uIHRyb3ZhdGE6ICVzIgorCisjOiBnbG9iYWxzLmg6MTMwMgorbXNnaWQgIkU0ODc6IEFyZ3VtZW50IG11c3QgYmUgcG9zaXRpdmUiCittc2dzdHIgIkU0ODc6IEwnYXJnb21lbnRvIGRldmUgZXNzZXJlIHBvc2l0aXZvIgorCisjOiBnbG9iYWxzLmg6MTMwNAorbXNnaWQgIkU0NTk6IENhbm5vdCBnbyBiYWNrIHRvIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTQ1OTogTm9uIHBvc3NvIHRvcm5hcmUgYWxsYSBkaXJlY3RvcnkgcHJlY2VkZW50ZSIKKworIzogZ2xvYmFscy5oOjEzMDgKK21zZ2lkICJFNDI6IE5vIEVycm9ycyIKK21zZ3N0ciAiRTQyOiBOZXNzdW4gRXJyb3JlIgorCisjOiBnbG9iYWxzLmg6MTMxMAorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0MzogU3RyaW5nYSBkaSBjb25mcm9udG8gZGFubmVnZ2lhdGEiCisKKyM6IGdsb2JhbHMuaDoxMzExCittc2dpZCAiRTQ0OiBDb3JydXB0ZWQgcmVnZXhwIHByb2dyYW0iCittc2dzdHIgIkU0NDogUHJvZ3JhbW1hICdyZWdleHAnIGNvcnJvdHRvIgorCisjOiBnbG9iYWxzLmg6MTMxMgorbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU0NTogZmlsZSBpbiBzb2xhIGxldHR1cmEgKGFnZ2l1bmdpICEgcGVyIGVzZWd1aXJlIGNvbXVucXVlKSIKKworIzogZ2xvYmFscy5oOjEzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiCittc2dzdHIgIkU0NjogTm9uIHBvc3NvIGltcG9zdGFyZSBsYSB2YXJpYWJpbGUgcmVhZC1vbmx5IFwiJXNcIiIKKworIzogZ2xvYmFscy5oOjEzMTcKK21zZ2lkICJFNDc6IEVycm9yIHdoaWxlIHJlYWRpbmcgZXJyb3JmaWxlIgorbXNnc3RyICJFNDc6IEVycm9yZSBsZWdnZW5kbyBpbCBmaWxlIGVycm9yaSIKKworIzogZ2xvYmFscy5oOjEzMjAKK21zZ2lkICJFNDg6IE5vdCBhbGxvd2VkIGluIHNhbmRib3giCittc2dzdHIgIkU0ODogTm9uIGFtbWVzc28gaW4gYW1iaWVudGUgcHJvdGV0dG8iCisKKyM6IGdsb2JhbHMuaDoxMzIyCittc2dpZCAiRTUyMzogTm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTUyMzogTm9uIGNvbnNlbnRpdG8gcXVpIgorCisjOiBnbG9iYWxzLmg6MTMyNQorbXNnaWQgIkUzNTk6IFNjcmVlbiBtb2RlIHNldHRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTM1OTogSW1wb3N0YXppb25lIG1vZGFsaXTgIHNjaGVybW8gbm9uIHN1cHBvcnRhdGEiCisKKyM6IGdsb2JhbHMuaDoxMzI3Cittc2dpZCAiRTQ5OiBJbnZhbGlkIHNjcm9sbCBzaXplIgorbXNnc3RyICJFNDk6IFF1YW50aXTgIGRpICdzY3JvbGwnIG5vbiB2YWxpZGEiCisKKyM6IGdsb2JhbHMuaDoxMzI4Cittc2dpZCAiRTkxOiAnc2hlbGwnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiRTkxOiBvcHppb25lICdzaGVsbCcgdnVvdGEiCisKKyM6IGdsb2JhbHMuaDoxMzMwCittc2dpZCAiRTI1NTogQ291bGRuJ3QgcmVhZCBpbiBzaWduIGRhdGEhIgorbXNnc3RyICJFMjU1OiBFcnJvcmUgLS0gbm9uIHNvbm8gcml1c2NpdG8gYSBsZWdnZXJlIGkgZGF0aSBkZWwgJ3NpZ24nISIKKworIzogZ2xvYmFscy5oOjEzMzIKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiBFcnJvcmUgZHVyYW50ZSBjaGl1c3VyYSBzd2FwIGZpbGUiCisKKyM6IGdsb2JhbHMuaDoxMzMzCittc2dpZCAiRTczOiB0YWcgc3RhY2sgZW1wdHkiCittc2dzdHIgIkU3MzogdGFnIHN0YWNrIHZ1b3RhIgorCisjOiBnbG9iYWxzLmg6MTMzNAorbXNnaWQgIkU3NDogQ29tbWFuZCB0b28gY29tcGxleCIKK21zZ3N0ciAiRTc0OiBDb21hbmRvIHRyb3BwbyBjb21wbGVzc28iCisKKyM6IGdsb2JhbHMuaDoxMzM1Cittc2dpZCAiRTc1OiBOYW1lIHRvbyBsb25nIgorbXNnc3RyICJFNzU6IE5vbWUgdHJvcHBvIGx1bmdvIgorCisjOiBnbG9iYWxzLmg6MTMzNgorbXNnaWQgIkU3NjogVG9vIG1hbnkgWyIKK21zZ3N0ciAiRTc2OiBUcm9wcGUgWyIKKworIzogZ2xvYmFscy5oOjEzMzcKK21zZ2lkICJFNzc6IFRvbyBtYW55IGZpbGUgbmFtZXMiCittc2dzdHIgIkU3NzogVHJvcHBpIG5vbWkgZmlsZSIKKworIzogZ2xvYmFscy5oOjEzMzgKK21zZ2lkICJFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJFNDg4OiBDYXJhdHRlcmkgaW4gcGn5IGEgZmluZSBjb21hbmRvIgorCisjOiBnbG9iYWxzLmg6MTMzOQorbXNnaWQgIkU3ODogVW5rbm93biBtYXJrIgorbXNnc3RyICJFNzg6ICdNYXJrJyBzY29ub3NjaXV0byIKKworIzogZ2xvYmFscy5oOjEzNDAKK21zZ2lkICJFNzk6IENhbm5vdCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICJFNzk6IE5vbiBwb3NzbyBlc3BhbmRlcmUgJ3dpbGRjYXJkJyIKKworIzogZ2xvYmFscy5oOjEzNDIKK21zZ2lkICJFNTkxOiAnd2luaGVpZ2h0JyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW5oZWlnaHQnIgorbXNnc3RyICJFNTkxOiAnd2luaGVpZ2h0JyBub24gcHXyIGVzc2VyZSBpbmZlcmlvcmUgYSAnd2lubWluaGVpZ2h0JyIKKworIzogZ2xvYmFscy5oOjEzNDQKK21zZ2lkICJFNTkyOiAnd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiRTU5MjogJ3dpbndpZHRoJyBub24gcHXyIGVzc2VyZSBpbmZlcmlvcmUgYSAnd2lubWlud2lkdGgnIgorCisjOiBnbG9iYWxzLmg6MTM0NworbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiBFcnJvcmUgaW4gc2NyaXR0dXJhIgorCisjOiBnbG9iYWxzLmg6MTM0OAorbXNnaWQgIlplcm8gY291bnQiCittc2dzdHIgIkNvbnRhdG9yZSBhIHplcm8iCisKKyM6IGdsb2JhbHMuaDoxMzUwCittc2dpZCAiRTgxOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dCIKK21zZ3N0ciAiRTgxOiBVc28gZGkgPFNJRD4gZnVvcmkgZGFsIGNvbnRlc3RvIGRpIHVubyBzY3JpcHQiCisKKyM6IGdsb2JhbHMuaDoxMzUzCittc2dpZCAiRTQ0OTogSW52YWxpZCBleHByZXNzaW9uIHJlY2VpdmVkIgorbXNnc3RyICJFNDQ5OiBSaWNldnV0YSB1bidlc3ByZXNzaW9uZSBub24gdmFsaWRhIgorCisjOiBnbG9iYWxzLmg6MTM1NgorbXNnaWQgIkU0NjM6IFJlZ2lvbiBpcyBndWFyZGVkLCBjYW5ub3QgbW9kaWZ5IgorbXNnc3RyICJFNDYzOiBSZWdpb25lIHByb3RldHRhLCBpbXBvc3NpYmlsZSBtb2RpZmljYXJlIgpkaWZmIC0tZ2l0IGEvc3JjL3BvL2phLnBvIGIvc3JjL3BvL2phLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDk0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vamEucG8KQEAgLTAsMCArMSw2NTg3IEBACisjIEphcGFuZXNlIHRyYW5zbGF0aW9uIGZvciBWaW0JCQl2aW06c2V0IGZvbGRtZXRob2Q9bWFya2VyOgorIworIyBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyMgRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisjCisjIE1VUkFPS0EgVGFybyA8a29yb25AdGthLmF0dC5uZS5qcD4sIDIwMDEtNC4KKyMgTGFzdCBDaGFuZ2U6IDI5LUFwci0yMDA0LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogVmltIDYuMlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA0LTA0LTI5IDEzOjE2KzA5MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA0LTA0LTI5IDEzOjAwKzA5MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1VUkFPS0EgVGFybyA8a29yb25AdGthLmF0dC5uZS5qcD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBNVVJBT0tBIFRhcm8gPGtvcm9uQHRrYS5hdHQubmUuanA+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9ZXVjLWpwXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKworIzogYnVmZmVyLmM6MTAyCittc2dpZCAiRTgyOiBDYW5ub3QgYWxsb2NhdGUgYW55IGJ1ZmZlciwgZXhpdGluZy4uLiIKK21zZ3N0ciAiRTgyOiCl0KXDpdWloaTyMaTEpOK67sCupMekraTKpKSkzqTHLCC9qs67pLek3qS5Li4uIgorCisjOiBidWZmZXIuYzoxMDUKK21zZ2lkICJFODM6IENhbm5vdCBhbGxvY2F0ZSBidWZmZXIsIHVzaW5nIG90aGVyIG9uZS4uLiIKK21zZ3N0ciAiRTgzOiCl0KXDpdWloaTyuu7ArqTHpK2kyqSkpM6kxywgwr6kzqTyu8jN0aS3pN6kuS4uLiIKKworIzogYnVmZmVyLmM6ODA1Cittc2dpZCAiRTUxNTogTm8gYnVmZmVycyB3ZXJlIHVubG9hZGVkIgorbXNnc3RyICJFNTE1OiCy8sr8pLWk7KS/pdClw6XVpaGkz6SipOqk3qS7pPMiCisKKyM6IGJ1ZmZlci5jOjgwNworbXNnaWQgIkU1MTY6IE5vIGJ1ZmZlcnMgd2VyZSBkZWxldGVkIgorbXNnc3RyICJFNTE2OiC67738pLWk7KS/pdClw6XVpaGkz6SipOqk3qS7pPMiCisKKyM6IGJ1ZmZlci5jOjgwOQorbXNnaWQgIkU1MTc6IE5vIGJ1ZmZlcnMgd2VyZSB3aXBlZCBvdXQiCittc2dzdHIgIkU1MTc6IMfLtP6ktaTspL+l0KXDpdWloaTPpKKk6qTepLuk8yIKKworIzogYnVmZmVyLmM6ODE3Cittc2dpZCAiMSBidWZmZXIgdW5sb2FkZWQiCittc2dzdHIgIjEguMSkzqXQpcOl1aWhpKyy8sr8pLWk7KTepLekvyIKKworIzogYnVmZmVyLmM6ODE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgdW5sb2FkZWQiCittc2dzdHIgIiVkILjEpM6l0KXDpdWloaSssvLK/KS1pOyk3qS3pL8iCisKKyM6IGJ1ZmZlci5jOjgyNAorbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIjEguMSkzqXQpcOl1aWhpKy67738pLWk7KTepLekvyIKKworIzogYnVmZmVyLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgZGVsZXRlZCIKK21zZ3N0ciAiJWQguMSkzqXQpcOl1aWhpKy67738pLWk7KTepLekvyIKKworIzogYnVmZmVyLmM6ODMxCittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICIxILjEpM6l0KXDpdWloaSsx8u0/qS1pOyk3qS3pL8iCisKKyM6IGJ1ZmZlci5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHdpcGVkIG91dCIKK21zZ3N0ciAiJWQguMSkzqXQpcOl1aWhpKzHy7T+pLWk7KTepLekvyIKKworIzogYnVmZmVyLmM6ODk0Cittc2dpZCAiRTg0OiBObyBtb2RpZmllZCBidWZmZXIgZm91bmQiCittc2dzdHIgIkU4NDogytG5uaS1pOykv6XQpcOl1aWhpM+koqTqpN6ku6TzIgorCisjLiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorIzogYnVmZmVyLmM6OTMzCittc2dpZCAiRTg1OiBUaGVyZSBpcyBubyBsaXN0ZWQgYnVmZmVyIgorbXNnc3RyICJFODU6IKXqpbmlyMm9vKiktaTspOul0KXDpdWloaTPpKKk6qTepLuk8yIKKworIzogYnVmZmVyLmM6OTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQnVmZmVyICVsZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTg2OiCl0KXDpdWloSAlbGQgpM+koqTqpN6ku6TzIgorCisjOiBidWZmZXIuYzo5NDgKK21zZ2lkICJFODc6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU4Nzoguse45aTOpdClw6XVpaGk8rHbpKikxrDcxrCkz6THpK2k3qS7pPMiCisKKyM6IGJ1ZmZlci5jOjk1MAorbXNnaWQgIkU4ODogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBidWZmZXIiCittc2dzdHIgIkU4ODoguse96aTOpdClw6XVpaGk6KTqwbCk2KTPsNzGsKTHpK2k3qS7pPMiCisKKyM6IGJ1ZmZlci5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFODk6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgJWxkIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU4OTogpdClw6XVpaEgJWxkIKTOytG5uaTPyt3CuKS1pOykxqSkpN6ku6TzICghIKTHytG5uaTyx8u0/ikiCisKKyM6IGJ1ZmZlci5jOjEwMDUKK21zZ2lkICJFOTA6IENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU5MDoguse45aTOpdClw6XVpaGkz7Lyyvykx6StpN6ku6TzIgorCisjOiBidWZmZXIuYzoxNTM4Cittc2dpZCAiVzE0OiBXYXJuaW5nOiBMaXN0IG9mIGZpbGUgbmFtZXMgb3ZlcmZsb3ciCittc2dzdHIgIlcxNDogt9m58DogpdWloaWkpevMvqTOpeqluaXIpKzEuaS5pK6k3qS5IgorCisjOiBidWZmZXIuYzoxNzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MjogQnVmZmVyICVsZCBub3QgZm91bmQiCittc2dzdHIgIkU5MjogpdClw6XVpaEgJWxkIKSspN+kxKSrpOqk3qS7pPMiCisKKyM6IGJ1ZmZlci5jOjE5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkzOiBNb3JlIHRoYW4gb25lIG1hdGNoIGZvciAlcyIKK21zZ3N0ciAiRTkzOiAlcyCky8qjv/SkzrO6xfakrKSipOqk3qS3pL8iCisKKyM6IGJ1ZmZlci5jOjE5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIgorbXNnc3RyICJFOTQ6ICVzIKTLs7rF9qS5pOul0KXDpdWloaTPpKKk6qTepLuk86THpLekvyIKKworIzogYnVmZmVyLmM6MjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCIKK21zZ3N0ciAiudQgJWxkIgorCisjOiBidWZmZXIuYzoyNDIwCittc2dpZCAiRTk1OiBCdWZmZXIgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU5NTogpLOkzsy+wbCkzqXQpcOl1aWhpM+0+6TLpKKk6qTepLkiCisKKyM6IGJ1ZmZlci5jOjI3MTMKK21zZ2lkICIgW01vZGlmaWVkXSIKK21zZ3N0ciAiIFvK0bm5pKKk6l0iCisKKyM6IGJ1ZmZlci5jOjI3MTgKK21zZ2lkICJbTm90IGVkaXRlZF0iCittc2dzdHIgIlvMpMrUvbhdIgorCisjOiBidWZmZXIuYzoyNzIzCittc2dpZCAiW05ldyBmaWxlXSIKK21zZ3N0ciAiW7+3pdWloaWkpetdIgorCisjOiBidWZmZXIuYzoyNzI0Cittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW8bJuf6lqKXpobxdIgorCisjOiBidWZmZXIuYzoyNzI2IGZpbGVpby5jOjIwNDkKK21zZ2lkICJbcmVhZG9ubHldIgorbXNnc3RyICJbxsm5/sDszdFdIgorCisjOiBidWZmZXIuYzoyNzQ3Cittc2dpZCAiMSBsaW5lIC0tJWQlJS0tIgorbXNnc3RyICIxILnUIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNzQ5Cittc2dpZCAiJWxkIGxpbmVzIC0tJWQlJS0tIgorbXNnc3RyICIlbGQgudQgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI3NTYKK21zZ2lkICJsaW5lICVsZCBvZiAlbGQgLS0lZCUlLS0gY29sICIKK21zZ3N0ciAiudQgJWxkICjBtMLOICVsZCkgLS0lZCUlLS0gY29sICIKKworIzogYnVmZmVyLmM6Mjg2NAorbXNnaWQgIltObyBmaWxlXSIKK21zZ3N0ciAiW8y1wupdIgorCisjLiBtdXN0IGJlIGEgaGVscCBidWZmZXIKKyM6IGJ1ZmZlci5jOjI5MDQKK21zZ2lkICJoZWxwIgorbXNnc3RyICKl2KXrpdciCisKKyM6IGJ1ZmZlci5jOjM0NjMgc2NyZWVuLmM6NTAzOAorbXNnaWQgIltoZWxwXSIKK21zZ3N0ciAiW6XYpeul110iCisKKyM6IGJ1ZmZlci5jOjM0OTUgc2NyZWVuLmM6NTA0NAorbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW6XXpeyl06XlobxdIgorCisjOiBidWZmZXIuYzozNzc1Cittc2dpZCAiQWxsIgorbXNnc3RyICLBtKTGIgorCisjOiBidWZmZXIuYzozNzc1Cittc2dpZCAiQm90IgorbXNnc3RyICLL9sj4IgorCisjOiBidWZmZXIuYzozNzc3Cittc2dpZCAiVG9wIgorbXNnc3RyICLA6MasIgorCisjOiBidWZmZXIuYzo0NTIzCittc2dpZCAiIgorIlxuIgorIiMgQnVmZmVyIGxpc3Q6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIKXQpcOl1aWhpeqluaXIOlxuIgorCisjOiBidWZmZXIuYzo0NTU2Cittc2dpZCAiW0Vycm9yIExpc3RdIgorbXNnc3RyICJbpail6aG8peqluaXIXSIKKworIzogYnVmZmVyLmM6NDU2OSBtZW1saW5lLmM6MTUyMAorbXNnaWQgIltObyBGaWxlXSIKK21zZ3N0ciAiW8y1wupdIgorCisjOiBidWZmZXIuYzo0ODgyCittc2dpZCAiIgorIlxuIgorIi0tLSBTaWducyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gpbWlpKXzIC0tLSIKKworIzogYnVmZmVyLmM6NDkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJTaWducyBmb3IgJXM6IgorbXNnc3RyICIlcyCkzqW1paSl8zoiCisKKyM6IGJ1ZmZlci5jOjQ5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgILnUPSVsZCAgvLHKzLvSPSVkICDMvsGwPSVzIgorCisjOiBkaWZmLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NjogQ2FuIG5vdCBkaWZmIG1vcmUgdGhhbiAlbGQgYnVmZmVycyIKK21zZ3N0ciAiRTk2OiAlbGQgsMq+5aTOpdClw6XVpaGkz2RpZmakx6StpN6ku6TzIgorCisjOiBkaWZmLmM6NzA5Cittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6ILq5yqyk8rruwK6kx6StpN6ku6TzICIKKworIzogZGlmZi5jOjgxNAorbXNnaWQgIlBhdGNoIGZpbGUiCittc2dzdHIgIqXRpcOlwaXVpaGlpKXrIgorCisjOiBkaWZmLmM6MTA2NQorbXNnaWQgIkU5ODogQ2Fubm90IHJlYWQgZGlmZiBvdXRwdXQiCittc2dzdHIgIkU5ODogZGlmZqTOvdDOz6Tyxsm5/qThpN6ku6TzIgorCisjOiBkaWZmLmM6MTgxNQorbXNnaWQgIkU5OTogQ3VycmVudCBidWZmZXIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTk5OiC4vbrfpM6l0KXDpdWloaTPurnKrKXiobylyaTHpM+koqTqpN6ku6TzIgorCisjOiBkaWZmLmM6MTgyNworbXNnaWQgIkUxMDA6IE5vIG90aGVyIGJ1ZmZlciBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDA6ILq5yqyl4qG8pcmkx6SipOvCvqTOpdClw6XVpaGkz6SipOqk3qS7pPMiCisKKyM6IGRpZmYuYzoxODM1Cittc2dpZCAiRTEwMTogTW9yZSB0aGFuIHR3byBidWZmZXJzIGluIGRpZmYgbW9kZSwgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlIgorbXNnc3RyICIiCisiRTEwMTogurnKrKXiobylyaTOpdClw6XVpaGkrDK4xLDKvuWkoqTrpM6kx6GipMmk7KTyu8ikpqSrxsPE6qTHpK2k3qS7pPMiCisKKyM6IGRpZmYuYzoxODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDI6IENhbid0IGZpbmQgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTEwMjogpdClw6XVpaEgXCIlc1wiIKSspN+kxKSrpOqk3qS7pPMiCisKKyM6IGRpZmYuYzoxODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzogpdClw6XVpaEgXCIlc1wiIKTPurnKrKXiobylyaTHpM+koqTqpN6ku6TzIgorCisjOiBkaWdyYXBoLmM6MjE5OQorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiC557v6pMtFc2NhcGWkz7vIzdGkx6StpN6ku6TzIgorCisjOiBkaWdyYXBoLmM6MjM4NAorbXNnaWQgIkU1NDQ6IEtleW1hcCBmaWxlIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTU0NDogpa2hvKXepcOl16XVpaGlpKXrpKyk36TEpKuk6qTepLuk8yIKKworIzogZGlncmFwaC5jOjI0MTEKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IDpzb3VyY2UgpMe86Ln+pOCl1aWhpaSl67DKs7Ckx6TPIDpsb2Fka2V5bWFwIKTyu8ikqKTepLuk8yIKKworIzogZWRpdC5jOjQwCittc2dpZCAiIEtleXdvcmQgY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiClraG8pe+hvKXJyuS0sCAoXk5eUCkiCisKKyMuIGN0cmxfeF9tb2RlID09IDAsIF5QL15OIGNvbXBsLgorIzogZWRpdC5jOjQxCittc2dpZCAiIF5YIG1vZGUgKF5FXlleTF5dXkZeSV5LXkReVl5OXlApIgorbXNnc3RyICIgXlggpeKhvKXJICheRV5ZXkxeXV5GXkleS15EXlZeTl5QKSIKKworIy4gU2Nyb2xsIGhhcyBpdCdzIG93biBtc2dzLCBpbiBpdCdzIHBsYWNlIHRoZXJlIGlzIHRoZSBtc2cgZm9yIGxvY2FsCisjLiAqIGN0cmxfeF9tb2RlID0gMCAoZWcgY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCkgIC0tIEFjZXZlZG8KKyM6IGVkaXQuYzo0NAorbXNnaWQgIiBLZXl3b3JkIExvY2FsIGNvbXBsZXRpb24gKF5OXlApIgorbXNnc3RyICIgtsm96qWtobyl76G8pcnK5LSwICheTl5QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkxeTl5QKSIKK21zZ3N0ciAiILnUKMG0ws4pyuS0sCAoXkxeTl5QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRl5OXlApIgorbXNnc3RyICKl1aWhpaSl68y+yuS0sCAoXkZeTl5QKSIKKworIzogZWRpdC5jOjQ3Cittc2dpZCAiIFRhZyBjb21wbGV0aW9uICheXV5OXlApIgorbXNnc3RyICIgpb+lsMrktLAgKF5dXk5eUCkiCisKKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiCl0aW5pdGlv6G8pfPK5LSwICheTl5QKSIKKworIzogZWRpdC5jOjQ5Cittc2dpZCAiIERlZmluaXRpb24gY29tcGxldGlvbiAoXkReTl5QKSIKK21zZ3N0ciAiIMTqtcHK5LSwICheRF5OXlApIgorCisjOiBlZGl0LmM6NTEKK21zZ2lkICIgRGljdGlvbmFyeSBjb21wbGV0aW9uICheS15OXlApIgorbXNnc3RyICIgvK298crktLAgKF5LXk5eUCkiCisKKyM6IGVkaXQuYzo1MgorbXNnaWQgIiBUaGVzYXVydXMgY29tcGxldGlvbiAoXlReTl5QKSIKK21zZ3N0ciAiIKW3pb2hvKXppbnK5LSwICheVF5OXlApIgorCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WXk5eUCkiCittc2dzdHIgIiCls6XepfOlyaXppaSl88rktLAgKF5WXk5eUCkiCisKKyM6IGVkaXQuYzo1NgorbXNnaWQgIkhpdCBlbmQgb2YgcGFyYWdyYXBoIgorbXNnc3RyICLDys3upM66x7jlpMul0qXDpcgiCisKKyM6IGVkaXQuYzo5NjIKK21zZ2lkICIndGhlc2F1cnVzJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIid0aGVzYXVydXMnIKWqpdelt6XnpfOkrLb1pMekuSIKKworIzogZWRpdC5jOjExNjYKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICInZGljdGlvbmFyeScgpaql16W3peel86SstvWkx6S5IgorCisjOiBlZGl0LmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAivK298aTypbmlraXjpfPD5jogJXMiCisKKyM6IGVkaXQuYzoyMzY4Cittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKMHexv4pIKW5pa+l7aG8pesoXkUvXlkpIgorCisjOiBlZGl0LmM6MjM3MAorbXNnaWQgIiAocmVwbGFjZSkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAow9a0uSkgpbmlr6Xtobyl6yAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIqW5pa2l46Xzw+Y6ICVzIgorCisjOiBlZGl0LmM6MjcxOQorbXNnaWQgIlNjYW5uaW5nIHRhZ3MuIgorbXNnc3RyICKlv6WwpPKluaWtpeOl88PmLiIKKworIzogZWRpdC5jOjMzODEKK21zZ2lkICIgQWRkaW5nIgorbXNnc3RyICIgxMmyw8PmIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjM0MzAKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tILihuvfD5i4uLiIKKworIzogZWRpdC5jOjM0ODYKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICK7z6ThpMvM4aTrIgorCisjOiBlZGl0LmM6MzQ5MQorbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICLCvqTOudSkzsOxuOwiCisKKyM6IGVkaXQuYzozNDk2Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIs2jsOykzrO6xfYiCisKKyM6IGVkaXQuYzozNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICIlZCDI1szcpM6zusX2ICjBtLO6xfYgJWQguMTD5ikiCisKKyM6IGVkaXQuYzozNTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIgorbXNnc3RyICIlZCDI1szcpM6zusX2IgorCisjLiBTa2lwIGZ1cnRoZXIgYXJndW1lbnRzIGJ1dCBkbyBjb250aW51ZSB0bworIy4gKiBzZWFyY2ggZm9yIGEgdHJhaWxpbmcgY29tbWFuZC4KKyM6IGV2YWwuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDY6IFVua25vd24gdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwNjogzKTDzqTOytG/9DogXCIlc1wiIgorCisjOiBldmFsLmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA3OiBNaXNzaW5nIGJyYWNlczogJXMiCittc2dzdHIgIkUxMDc6IKWrpcOlsyAnKCcgpKykoqTqpN6ku6TzOiAlcyIKKworIzogZXZhbC5jOjE0MzUgZXZhbC5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiCkvaTOytG/9KTPpKKk6qTepLuk8zogXCIlc1wiIgorCisjOiBldmFsLmM6MTcwNQorbXNnaWQgIkUxMDk6IE1pc3NpbmcgJzonIGFmdGVyICc/JyIKK21zZ3N0ciAiRTEwOTogJz8nIKTOuOWkyyAnOicgpKykoqTqpN6ku6TzIgorCisjOiBldmFsLmM6MjMyNworbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiAnKScgpKyk36TEpKuk6qTepLuk8yIKKworIzogZXZhbC5jOjIzODkKK21zZ2lkICJFMTExOiBNaXNzaW5nICddJyIKK21zZ3N0ciAiRTExMTogJ10nIKSspN+kxKSrpOqk3qS7pPMiCisKKyM6IGV2YWwuYzoyNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIgorbXNnc3RyICJFMTEyOiClqqXXpbel56XzzL6krKSipOqk3qS7pPM6ICVzIgorCisjOiBldmFsLmM6MjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEzOiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUxMTM6IMykw86kzqWqpdelt6XnpfOkx6S5OiAlcyIKKworIzogZXZhbC5jOjI1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6ILD6zdHJ5CAoXCIpIKSspKKk6qTepLuk8zogJXMiCisKKyM6IGV2YWwuYzoyNjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTU6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE1OiCw+s3RyeQgKCcpIKSspKKk6qTepLuk8zogJXMiCisKKyM6IGV2YWwuYzozMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTExNjogtNi/9CAlcyCky6TPzLW4+qTKsPq/9KTHpLkiCisKKyM6IGV2YWwuYzozMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiDMpMPOpM602L/0pMekuTogJXMiCisKKyM6IGV2YWwuYzozMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTg6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE4OiC02L/0pM6w+r/0pKzCv6S5pK6k3qS5OiAlcyIKKworIzogZXZhbC5jOjMwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOTogtNi/9KTOsPq/9KSswq2k6qTepLuk8zogJXMiCisKKyM6IGV2YWwuYzozMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjA6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0OiAlcyIKK21zZ3N0ciAiRTEyMDogpbmlr6XqpdelyLDKs7CkxzxTSUQ+pKy7yKTvpOyk3qS3pL86ICVzIgorCisjLgorIy4gKiBZZXMgdGhpcyBpcyB1Z2x5LCBJIGRvbid0IHBhcnRpY3VsYXJseSBsaWtlIGl0IGVpdGhlci4gIEJ1dCBkb2luZyBpdAorIy4gKiB0aGlzIHdheSBoYXMgdGhlIGNvbXBlbGxpbmcgYWR2YW50YWdlIHRoYXQgdHJhbnNsYXRpb25zIG5lZWQgbm90IHRvCisjLiAqIGJlIHRvdWNoZWQgYXQgYWxsLiAgU2VlIGJlbG93IHdoYXQgJ29rJyBhbmQgJ3luYycgYXJlIHVzZWQgZm9yLgorIy4KKyM6IGV2YWwuYzozNjg3IGd1aS5jOjQzNzYgZ3VpX2d0ay5jOjIwNTkKK21zZ2lkICImT2siCittc2dzdHIgIiZPayIKKworIzogZXZhbC5jOjQyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQgudQ6IgorCisjOiBldmFsLmM6NTQ3NworbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisit+jE6igmTylcbiIKKyKlraXjpfOlu6XrKCZDKSIKKworIzogZXZhbC5jOjU1MTcKK21zZ2lkICJjYWxsZWQgaW5wdXRyZXN0b3JlKCkgbW9yZSBvZnRlbiB0aGFuIGlucHV0c2F2ZSgpIgorbXNnc3RyICJpbnB1dHJlc3RvcmUoKSCkrCBpbnB1dHNhdmUoKSCk6KTqpOLCv6SvuMak0KTspN6kt6S/IgorCisjIEFkZGVkIGF0IDEwLU1hci0yMDA0LgorIzogZXZhbC5jOjU5NzcKK21zZ2lkICJFNjU1OiBUb28gbWFueSBzeW1ib2xpYyBsaW5rcyAoY3ljbGU/KSIKK21zZ3N0ciAiRTY1NTogpbel86Xcpeqlw6Wvpeql86WvpKzCv7LhpK6k3qS5ICi927TEpLekxqSkpOuyxMe9wK2krKSipOqk3qS5KSIKKworIzogZXZhbC5jOjY2MDkKK21zZ2lkICJFMjQwOiBObyBjb25uZWN0aW9uIHRvIFZpbSBzZXJ2ZXIiCittc2dzdHIgIkUyNDA6IFZpbSCltaG8pdCk2KTOwNzCs6SspKKk6qTepLuk8yIKKworIzogZXZhbC5jOjY3MDYKK21zZ2lkICJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIKK21zZ3N0ciAiRTI3NzogpbWhvKXQpM6x/sX6pKykoqTqpN6ku6TzIgorCisjOiBldmFsLmM6NjczNAorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODogpa+l6aWkpaKl86XIpNjB96TrpLOkyKSspMekraTepLuk8yIKKworIzogZXZhbC5jOjY3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MTogVW5hYmxlIHRvIHNlbmQgdG8gJXMiCittc2dzdHIgIkUyNDE6ICVzIKTYwfek66SzpMikrKTHpK2k3qS7pPMiCisKKyM6IGV2YWwuYzo2ODgyCittc2dpZCAiKEludmFsaWQpIgorbXNnc3RyICIozLW4+ikiCisKKyM6IGV2YWwuYzo4MDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogJXMiCittc2dzdHIgIkUxMjE6IMykxOq1waTOytG/9KTHpLk6ICVzIgorCisjOiBldmFsLmM6ODQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJFNDYxOiDJ1MC1pMrK0b/0zL6kx6S5OiAlcyIKKworIzogZXZhbC5jOjg3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMjogRnVuY3Rpb24gJXMgYWxyZWFkeSBleGlzdHMsIGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxMjI6ILTYv/QgJXMgpM/E6rXButGkx6S5LCC6xsTqtcGkuaTrpMukzyAhIKTyxMmyw6S3pMakr6TApLWkpCIKKworIzogZXZhbC5jOjg4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMzogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEyMzogzKTE6rXBpM602L/0pMekuTogJXMiCisKKyM6IGV2YWwuYzo4ODcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjQ6IE1pc3NpbmcgJygnOiAlcyIKK21zZ3N0ciAiRTEyNDogJygnIKSspKKk6qTepLuk8zogJXMiCisKKyM6IGV2YWwuYzo4OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiDJ1MC1pMqw+r/0pMekuTogJXMiCisKKyM6IGV2YWwuYzo4OTgyCittc2dpZCAiRTEyNjogTWlzc2luZyA6ZW5kZnVuY3Rpb24iCittc2dzdHIgIkUxMjY6IDplbmRmdW5jdGlvbiCkrKSipOqk3qS7pPMiCisKKyM6IGV2YWwuYzo5MDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjc6IENhbm5vdCByZWRlZmluZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTI3OiC02L/0ICVzIKTyusbE6rXBpMekraTepLuk8zogu8jN0cPmpMekuSIKKworIzogZXZhbC5jOjkxNTkKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiC02L/0zL6krM3XteGktaTspN6kuSIKKworIzogZXZhbC5jOjkyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODogtNi/9My+pM/C58q4u/qkx7vPpN6k6aTKpLGk7KTQpMqk6qTepLuk8zogJXMiCisKKyM6IGV2YWwuYzo5NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzA6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMzA6IMykxOq1waTOtNi/9KTHpLk6ICVzIgorCisjOiBldmFsLmM6OTQwNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTMxOiBDYW5ub3QgZGVsZXRlIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMzE6ILTYv/QgJXMgpPK67738pMekraTepLuk8zogu8jN0cPmpMekuSIKKworIzogZXZhbC5jOjk0NTUKK21zZ2lkICJFMTMyOiBGdW5jdGlvbiBjYWxsIGRlcHRoIGlzIGhpZ2hlciB0aGFuICdtYXhmdW5jZGVwdGgnIgorbXNnc3RyICJFMTMyOiC02L/0uMa90KTOxv6k7LvSv/SkrCAnbWF4ZnVuY2RlcHRoJyCk8sS2pKik3qS3pL8iCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjk1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAiJXMgpPK8wrnUw+akx6S5IgorCisjOiBldmFsLmM6OTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhYm9ydGVkIgorbXNnc3RyICIlcyCkrMPmw8ektaTspN6kt6S/IgorCisjOiBldmFsLmM6OTU3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgIyVsZCIKK21zZ3N0ciAiJXMgpKwgIyVsZCCk8srWpLek3qS3pL8iCisKKyM6IGV2YWwuYzo5NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyBcIiVzXCIiCittc2dzdHIgIiVzIKSsIFwiJXNcIiCk8srWpLek3qS3pL8iCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjk1OTUgZXhfY21kczIuYzoyMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbnRpbnVpbmcgaW4gJXMiCittc2dzdHIgIiVzIKTOvMK51KTyt9HCs8PmpMekuSIKKworIzogZXZhbC5jOjk2MjEKK21zZ2lkICJFMTMzOiA6cmV0dXJuIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTEzMzogtNi/9LOwpMsgOnJldHVybiCkrKSipOqk3qS3pL8iCisKKyM6IGV2YWwuYzo5OTUyCittc2dpZCAiIgorIlxuIgorIiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgpbCl7aG8pdCl68rRv/Q6XG4iCisKKyM6IGV4X2NtZHMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iCittc2dzdHIgIjwlcz4lcyVzICAlZCwgIDE2v8q/9CAlMDJ4LCAgOL/Kv/QgJTAzbyIKKworIzogZXhfY21kcy5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI+ICVkLCBIZXggJTA0eCwgT2N0YWwgJW8iCittc2dzdHIgIj4gJWQsIDE2v8q/9CAlMDR4LCA4v8q/9CAlbyIKKworIzogZXhfY21kcy5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICI+ICVkLCBIZXggJTA4eCwgT2N0YWwgJW8iCittc2dzdHIgIj4gJWQsIDE2v8q/9CAlMDh4LCA4v8q/9CAlbyIKKworIzogZXhfY21kcy5jOjQzMAorbXNnaWQgIkUxMzQ6IE1vdmUgbGluZXMgaW50byB0aGVtc2VsdmVzIgorbXNnc3RyICJFMTM0OiC51KTypL2k7Lyrv8iky6TPsNzGsKTHpK2k3qS7pPMiCisKKyM6IGV4X2NtZHMuYzo0OTkKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgIjEgudSkrLDcxrCktaTspN6kt6S/IgorCisjOiBleF9jbWRzLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBtb3ZlZCIKK21zZ3N0ciAiJWxkILnUpKyw3MawpLWk7KTepLekvyIKKworIzogZXhfY21kcy5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgZmlsdGVyZWQiCittc2dzdHIgIiVsZCC51KSspdWlo6Xrpb+96M39pLWk7KTepLekvyIKKworIzogZXhfY21kcy5jOjk1MgorbXNnaWQgIkUxMzU6ICpGaWx0ZXIqIEF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUxMzU6ICql1aWjpeulvyogYXV0b2NvbW1hbmSkz7i9ut+kzqXQpcOl1aWhpPLK0bm5pLekxqTPpKSksaTepLuk8yIKKworIzogZXhfY21kcy5jOjEwMzcKK21zZ2lkICJbTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2VdXG4iCittc2dzdHIgIlu6x7jlpM7K0bm5pKzK3cK4pLWk7KTGpKSk3qS7pPNdXG4iCisKKyM6IGV4X2NtZHMuYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzdmltaW5mbzogJXMgaW4gbGluZTogIgorbXNnc3RyICIlc3ZpbWluZm86ICVzILnUzNw6ICIKKworIzogZXhfY21kcy5jOjEyODgKK21zZ2lkICJFMTM2OiB2aW1pbmZvOiBUb28gbWFueSBlcnJvcnMsIHNraXBwaW5nIHJlc3Qgb2YgZmlsZSIKK21zZ3N0ciAiRTEzNjogdmltaW5mbzogpail6aG8pKzCv7LhpK6k66TOpMcsILDKud+kz6W5pa2lw6XXpLek3qS5IgorCisjOiBleF9jbWRzLmM6MTMyMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkaW5nIHZpbWluZm8gZmlsZSBcIiVzXCIlcyVzJXMiCittc2dzdHIgInZpbWluZm+l1aWhpaSl6yBcIiVzXCIlcyVzJXMgpPLGybn+pN/D5iAiCisKKyM6IGV4X2NtZHMuYzoxMzI0Cittc2dpZCAiIGluZm8iCittc2dzdHIgIiC+8MrzIgorCisjOiBleF9jbWRzLmM6MTMyNQorbXNnaWQgIiBtYXJrcyIKK21zZ3N0ciAiIKXeobylryIKKworIzogZXhfY21kcy5jOjEzMjYKK21zZ2lkICIgRkFJTEVEIgorbXNnc3RyICIgvLrH1CIKKworIzogZXhfY21kcy5jOjE0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IHZpbWluZm+l1aWhpaSl66SsvfG5/qTfpMekraTepLuk8zogJXMiCisKKyM6IGV4X2NtZHMuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzg6IENhbid0IHdyaXRlIHZpbWluZm8gZmlsZSAlcyEiCittc2dzdHIgIkUxMzg6IHZpbWluZm+l1aWhpaSl6yAlcyCk8srdwrikx6StpN6ku6TzISIKKworIzogZXhfY21kcy5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiIgorbXNnc3RyICJ2aW1pbmZvpdWloaWkpesgXCIlc1wiIKTyvfG5/qTfw+YiCisKKyMuIFdyaXRlIHRoZSBpbmZvOgorIzogZXhfY21kcy5jOjE2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIyBUaGlzIHZpbWluZm8gZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFZpbSAlcy5cbiIKK21zZ3N0ciAiIyCks6TOIHZpbWluZm8gpdWloaWkpeukzyBWaW0gJXMgpMuk6KTDpMbAuMCupLWk7KTepLekvy5cbiIKKworIzogZXhfY21kcy5jOjE2NTEKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIMrRubmkuaTrut2ky6TPvb3KrMPtsNWkt6TGpK+kwKS1pKQhXG4iCisiXG4iCisKKyM6IGV4X2NtZHMuYzoxNjUzCittc2dpZCAiIyBWYWx1ZSBvZiAnZW5jb2RpbmcnIHdoZW4gdGhpcyBmaWxlIHdhcyB3cml0dGVuXG4iCittc2dzdHIgIiMgpLOkzqXVpaGlpKXrpKy98aSrpOykv7v+pM4gJ2VuY29kaW5nJyCkzsPNXG4iCisKKyM6IGV4X2NtZHMuYzoxNzUyCittc2dpZCAiSWxsZWdhbCBzdGFydGluZyBjaGFyIgorbXNnc3RyICLJ1MC1pMrA6Masyri7+qTHpLkiCisKKyM6IGV4X2NtZHMuYzoyMDk3IGV4X2NtZHMuYzoyMzYyIGV4X2NtZHMyLmM6NzYzCittc2dpZCAiU2F2ZSBBcyIKK21zZ3N0ciAiyszMvqTHyt3CuCIKKworIy4gT3ZlcndyaXRpbmcgYSBmaWxlIHRoYXQgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIGlzIG5vdCBhCisjLiAqIGdvb2QgaWRlYS4KKyM6IGV4X2NtZHMuYzoyMTQwCittc2dpZCAiRTEzOTogRmlsZSBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIiCittc2dzdHIgIkUxMzk6IMaxpLjMvsGwpM6l1aWhpaSl66Sswr6kzqXQpcOl1aWhpMfGybn+pN6k7KTGpKSk3qS5IgorCisjOiBleF9jbWRzLmM6MjE3NAorbXNnaWQgIldyaXRlIHBhcnRpYWwgZmlsZT8iCittc2dzdHIgIqXVpaGlpKXrpPLJ9Mqsxaqky8rdwrikt6TepLmkqz8iCisKKyM6IGV4X2NtZHMuYzoyMTgxCittc2dpZCAiRTE0MDogVXNlICEgdG8gd3JpdGUgcGFydGlhbCBidWZmZXIiCittc2dzdHIgIkUxNDA6IKXQpcOl1aWhpPLJ9Mqsxaqky8rdwrikuaTrpMukzyAhIKTyu8ikw6TGpK+kwKS1pKQiCisKKyM6IGV4X2NtZHMuYzoyMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAitPvCuKTOpdWloaWkpesgXCIlLipzXCIgpPK+5b3xpK2kt6TepLmkqz8iCisKKyM6IGV4X2NtZHMuYzoyMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDE6IE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTE0MTogpdClw6XVpaEgJWxkIKTLpM/MvsGwpKykoqTqpN6ku6TzIgorCisjOiBleF9jbWRzLmM6MjQwNQorbXNnaWQgIkUxNDI6IEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24iCittc2dzdHIgIkUxNDI6IKXVpaGlpKXrpM/K3cK4pLWk7KTepLuk86THpLekvzogJ3dyaXRlJyClqqXXpbel56XzpMuk6KTqzLW4+qTHpLkiCisKKyM6IGV4X2NtZHMuYzoyNDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgZm9yIFwiJS4qc1wiLlxuIgorIkRvIHlvdSB3aXNoIHRvIHdyaXRlIGFueXdheT8iCittc2dzdHIgIiIKKyJcIiUuKnNcIiCky6TPICdyZWFkb25seScgpaql16W3peel86SswN/E6qS1pOykxqSkpN6kuVxuIgorIravwKnFqqTLvuW98aStpLek3qS5pKs/IgorCisjOiBleF9jbWRzLmM6MjU5NworbXNnaWQgIkVkaXQgRmlsZSIKK21zZ3N0ciAipdWloaWkpeuk8srUvbgiCisKKyM6IGV4X2NtZHMuYzozMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiBhdXRvY29tbWFuZKSszb20/KS7pLq/t6S3pKSl0KXDpdWloSAlcyCk8rrvvfykt6TepLekvyIKKworIzogZXhfY21kcy5jOjMzMzkKK21zZ2lkICJFMTQ0OiBub24tbnVtZXJpYyBhcmd1bWVudCB0byA6eiIKK21zZ3N0ciAiRTE0NDogv/Skx6TPpMqkpLD6v/SkrCA6eiCky8XPpLWk7KTepLekvyIKKworIzogZXhfY21kcy5jOjM0MjQKK21zZ2lkICJFMTQ1OiBTaGVsbCBjb21tYW5kcyBub3QgYWxsb3dlZCBpbiBydmltIgorbXNnc3RyICJFMTQ1OiBydmltpMekz6W3pael66Wzpd6l86XJpPK7yKSopN6ku6TzIgorCisjOiBleF9jbWRzLmM6MzUzMQorbXNnaWQgIkUxNDY6IFJlZ3VsYXIgZXhwcmVzc2lvbnMgY2FuJ3QgYmUgZGVsaW1pdGVkIGJ5IGxldHRlcnMiCittc2dzdHIgIkUxNDY6IMC1tazJvbi9pM/KuLv6pMe26MDapOuks6TIpKykx6StpN6ku6TzIgorCisjOiBleF9jbWRzLmM6Mzg3NworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHdpdGggJXMgKHkvbi9hL3EvbC9eRS9eWSk/IgorbXNnc3RyICIlcyCky8PWtLmkt6TepLmkqz8gKHkvbi9hL3EvbC9eRS9eWSkiCisKKyM6IGV4X2NtZHMuYzo0MjcwCittc2dpZCAiKEludGVycnVwdGVkKSAiCittc2dzdHIgIiiz5Ln+pN6k7KTepLekvykiCisKKyM6IGV4X2NtZHMuYzo0Mjc0Cittc2dpZCAiMSBzdWJzdGl0dXRpb24iCittc2dzdHIgIjEgstW96sPWtLmkt6TepLekvyIKKworIzogZXhfY21kcy5jOjQyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIHN1YnN0aXR1dGlvbnMiCittc2dzdHIgIiVsZCCy1b3qw9a0uaS3pN6kt6S/IgorCisjOiBleF9jbWRzLmM6NDI3OQorbXNnaWQgIiBvbiAxIGxpbmUiCittc2dzdHIgIiAot9cgMSC51MbiKSIKKworIzogZXhfY21kcy5jOjQyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uICVsZCBsaW5lcyIKK21zZ3N0ciAiICi31yAlbGQgudTG4ikiCisKKyM6IGV4X2NtZHMuYzo0MzMyCittc2dpZCAiRTE0NzogQ2Fubm90IGRvIDpnbG9iYWwgcmVjdXJzaXZlIgorbXNnc3RyICJFMTQ3OiA6Z2xvYmFsIKTyusa1osWqpMukz7vIpKik3qS7pPMiCisKKyM6IGV4X2NtZHMuYzo0MzY3Cittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IGdsb2JhbKWzpd6l86XJpMvAtbWsyb24vaSsu9jE6qS1pOykxqSkpN6ku6TzIgorCisjOiBleF9jbWRzLmM6NDQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIGZvdW5kIGluIGV2ZXJ5IGxpbmU6ICVzIgorbXNnc3RyICKl0aW/obyl86SswbSkxqTOudSkx6TfpMSkq6TqpN6kt6S/OiAlcyIKKworIzogZXhfY21kcy5jOjQ0OTcKK21zZ2lkICIiCisiXG4iCisiIyBMYXN0IFN1YnN0aXR1dGUgU3RyaW5nOlxuIgorIiQiCittc2dzdHIgIiIKKyJcbiIKKyIjILrHuOWky8PWtLmktaTspL/KuLv6zvM6XG4iCisiJCIKKworIzogZXhfY21kcy5jOjQ1OTggZXhfZG9jbWQuYzoyMDExCittc2dpZCAiRTQ3ODogRG9uJ3QgcGFuaWMhIgorbXNnc3RyICJFNDc4OiC5sqTGpMqkpKTHpK+kwKS1pKQiCisKKyM6IGV4X2NtZHMuYzo0NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NjE6IFNvcnJ5LCBubyAnJXMnIGhlbHAgZm9yICVzIgorbXNnc3RyICJFNjYxOiC7xMewpMekuaSsICclcycgpM6l2KXrpdekrCAlcyCky6TPpKKk6qTepLuk8yIKKworIzogZXhfY21kcy5jOjQ2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0OTogU29ycnksIG5vIGhlbHAgZm9yICVzIgorbXNnc3RyICJFMTQ5OiC7xMewpMekuaSsICVzIKTLpM+l2KXrpdekrKSipOqk3qS7pPMiCisKKyM6IGV4X2NtZHMuYzo0Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAiu8THsKTHpLmkrKXYpeul16XVpaGlpKXrIFwiJXNcIiCkrKTfpMSkq6TqpN6ku6TzIgorCisjOiBleF9jbWRzLmM6NTE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiClx6Wjpeylr6XIpeqkx6TPpKKk6qTepLuk8zogJXMiCisKKyM6IGV4X2NtZHMuYzo1MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTI6IENhbm5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTUyOiC98bn+pN/N0aTLICVzIKTys6uksaTepLuk8yIKKworIzogZXhfY21kcy5jOjUzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MzogVW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxNTM6IMbJuf7N0aTLICVzIKTys6uksaTepLuk8yIKKworIyBBZGRlZCBhdCAyOS1BcHItMjAwNC4KKyM6IGV4X2NtZHMuYzo1MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NzA6IE1peCBvZiBoZWxwIGZpbGUgZW5jb2RpbmdzIHdpdGhpbiBhIGxhbmd1YWdlOiAlcyIKK21zZ3N0ciAiRTY3MDogMaTEpM64wLjspM6l2KXrpdel1aWhpaSl66TLyqO/9KTOpail86WzobylyaSsuq6636S3pMakpKTepLk6ICVzIgorCisjOiBleF9jbWRzLmM6NTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU0OiBEdXBsaWNhdGUgdGFnIFwiJXNcIiBpbiBmaWxlICVzIgorbXNnc3RyICJFMTU0OiClv6WwIFwiJXNcIiCkrKXVpaGlpKXrICVzIKTLvcXKo6S3pMakpKTepLkiCisKKyM6IGV4X2NtZHMuYzo1NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjA6IFVua25vd24gc2lnbiBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE2MDogzKTDzqTOc2lnbqWzpd6l86XJpMekuTogJXMiCisKKyM6IGV4X2NtZHMuYzo1NTc3Cittc2dpZCAiRTE1NjogTWlzc2luZyBzaWduIG5hbWUiCittc2dzdHIgIkUxNTY6IHNpZ27MvqSspKKk6qTepLuk8yIKKworIzogZXhfY21kcy5jOjU2MjMKK21zZ2lkICJFNjEyOiBUb28gbWFueSBzaWducyBkZWZpbmVkIgorbXNnc3RyICJFNjEyOiBzaWdupM7E6rXBpKzCv7/0uKukxKSrpOqk3qS3pL8iCisKKyM6IGV4X2NtZHMuYzo1NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTogzLW4+qTKc2lnbqTOpcalraW5pcikx6S5OiAlcyIKKworIzogZXhfY21kcy5jOjU3MjIgZXhfY21kcy5jOjU5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NTogVW5rbm93biBzaWduOiAlcyIKK21zZ3N0ciAiRTE1NTogzKTDzqTOc2lnbqTHpLk6ICVzIgorCisjOiBleF9jbWRzLmM6NTc3MQorbXNnaWQgIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiCittc2dzdHIgIkUxNTk6IHNpZ26kzsjWueakrKSipOqk3qS7pPMiCisKKyM6IGV4X2NtZHMuYzo1ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTg6IEludmFsaWQgYnVmZmVyIG5hbWU6ICVzIgorbXNnc3RyICJFMTU4OiDMtbj6pMql0KXDpdWlocy+pMekuTogJXMiCisKKyM6IGV4X2NtZHMuYzo1ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiDMtbj6pMpzaWduvLHKzLvSpMekuTogJWxkIgorCisjIEFkZGVkIGF0IDI3LUphbi0yMDA0LgorIzogZXhfY21kcy5jOjU5NjIKK21zZ2lkICIgKE5PVCBGT1VORCkiCittc2dzdHIgIiAgKKTfpMSkq6TqpN6ku6TzKSIKKworIzogZXhfY21kcy5jOjU5NjQKK21zZ2lkICIgKG5vdCBzdXBwb3J0ZWQpIgorbXNnc3RyICIgKMjzpbWl3aG8pcgpIgorCisjOiBleF9jbWRzLmM6NjA2MworbXNnaWQgIltEZWxldGVkXSIKK21zZ3N0ciAiW7rvvfy60V0iCisKKyM6IGV4X2NtZHMyLmM6OTIKK21zZ2lkICJFbnRlcmluZyBEZWJ1ZyBtb2RlLiAgVHlwZSBcImNvbnRcIiB0byBjb250aW51ZS4iCittc2dzdHIgIqXHpdClw6WwpeKhvKXJpMvG/qTqpN6kuS4gwrOksaTrpMukzyBcImNvbnRcIiCkyMb+zs+kt6TGpK+kwKS1pKQuIgorCisjOiBleF9jbWRzMi5jOjk2IGV4X2RvY21kLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiAlcyIKK21zZ3N0ciAiudQgJWxkOiAlcyIKKworIzogZXhfY21kczIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjbWQ6ICVzIgorbXNnc3RyICKls6XepfOlyTogJXMiCisKKyM6IGV4X2NtZHMyLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyZWFrcG9pbnQgaW4gXCIlcyVzXCIgbGluZSAlbGQiCittc2dzdHIgIqXWpeyhvKWvpd2lpKXzpcggXCIlcyVzXCIgudQgJWxkIgorCisjOiBleF9jbWRzMi5jOjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYxOiBCcmVha3BvaW50IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUxNjE6IKXWpeyhvKWvpd2lpKXzpcikrKTfpMSkq6TqpN6ku6TzOiAlcyIKKworIzogZXhfY21kczIuYzo1NjYKK21zZ2lkICJObyBicmVha3BvaW50cyBkZWZpbmVkIgorbXNnc3RyICKl1qXsobylr6XdpaSl86XIpKzE6rXBpLWk7KTGpKSk3qS7pPMiCisKKyM6IGV4X2NtZHMyLmM6NTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUzZCAgJXMgJXMgIGxpbmUgJWxkIgorbXNnc3RyICIlM2QgICVzICVzICC51CAlbGQiCisKKyM6IGV4X2NtZHMyLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmUgY2hhbmdlcyB0byBcIiUuKnNcIj8iCittc2dzdHIgIsrRubmk8iBcIiUuKnNcIiCky8rdwrikt6TepLmkqz8iCisKKyM6IGV4X2NtZHMyLmM6Nzg4IGV4X2RvY21kLmM6OTM1NgorbXNnaWQgIlVudGl0bGVkIgorbXNnc3RyICLMtcLqIgorCisjOiBleF9jbWRzMi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYyOiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTE2MjogpdClw6XVpaEgXCIlc1wiIKTOytG5uaTPyt3CuKS1pOykxqSkpN6ku6TzIgorCisjOiBleF9jbWRzMi5jOjk4NAorbXNnaWQgIldhcm5pbmc6IEVudGVyZWQgb3RoZXIgYnVmZmVyIHVuZXhwZWN0ZWRseSAoY2hlY2sgYXV0b2NvbW1hbmRzKSIKK21zZ3N0ciAit9m58Dogzb20/KS7pLrCvqXQpcOl1aWhpNiw3MawpLek3qS3pL8gKGF1dG9jb21tYW5kcyCk8sS0pNmkxqSvpMCktaSkKSIKKworIzogZXhfY21kczIuYzoxMzg3Cittc2dpZCAiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTYzOiDK1L24pLmk66XVpaGlpKXrpM8xpMSkt6SrpKKk6qTepLuk8yIKKworIzogZXhfY21kczIuYzoxMzg5Cittc2dpZCAiRTE2NDogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBmaWxlIgorbXNnc3RyICJFMTY0OiC6x73ppM6l1aWhpaSl66TopOrBsKTLpM+51KSxpN6ku6TzIgorCisjOiBleF9jbWRzMi5jOjEzOTEKK21zZ2lkICJFMTY1OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgZmlsZSIKK21zZ3N0ciAiRTE2NToguse45aTOpdWloaWkpeuk8rHbpKikxrjlpMukz7nUpLGk3qS7pPMiCisKKyM6IGV4X2NtZHMyLmM6MTgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY2OiBjb21waWxlciBub3Qgc3VwcG9ydGVkOiAlcyIKK21zZ3N0ciAiRTY2NjogpL2kzqWzpfOl0aWkpemky6TPwtCx/qS3pMakpKTepLuk8zogJXMiCisKKyM6IGV4X2NtZHMyLmM6MTg5NworIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiCittc2dzdHIgIlwiJXNcIiCk8iBcIiVzXCIgpKuk6bihuvfD5iIKKworIzogZXhfY21kczIuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIgorbXNnc3RyICJcIiVzXCIgpPK4obr3w+YiCisKKyM6IGV4X2NtZHMyLmM6MTk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorbXNnc3RyICIncnVudGltZXBhdGgnIKTOw+aky6TPpN+kxKSrpOqk3qS7pPM6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTc0Cittc2dpZCAiU291cmNlIFZpbSBzY3JpcHQiCittc2dzdHIgIlZpbaW5pa+l6qXXpcikzrzouf6k3yIKKworIzogZXhfY21kczIuYzoyMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAipcelo6Xspa+lyKXqpM+86Ln+pOGk3qS7pPM6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICJcIiVzXCIgpPK86Ln+pOGk3qS7pPMiCisKKyM6IGV4X2NtZHMyLmM6MjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIrnUICVsZDogXCIlc1wiIKTyvOi5/qThpN6ku6TzIgorCisjOiBleF9jbWRzMi5jOjIyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJcIiVzXCIgpPK86Ln+w+YiCisKKyM6IGV4X2NtZHMyLmM6MjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogc291cmNpbmcgXCIlc1wiIgorbXNnc3RyICK51CAlbGQ6ICVzIKTyvOi5/sPmIgorCisjOiBleF9jbWRzMi5jOjIzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc291cmNpbmcgJXMiCittc2dzdHIgIiVzIKTOvOi5/qTytLDOuyIKKworIzogZXhfY21kczIuYzoyNzA3Cittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIlcxNTogt9m58DogudS26MDapKzJ1MC1pMekuS4gXk0gpKykyqSkpM6kx6S3pOekpiIKKworIzogZXhfY21kczIuYzoyNzU2Cittc2dpZCAiRTE2NzogOnNjcmlwdGVuY29kaW5nIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2NzogOnNjcmlwdGVuY29kaW5nIKSsvOi5/qW5pa+l6qXXpciwyrOwpMe7yM3RpLWk7KTepLekvyIKKworIzogZXhfY21kczIuYzoyNzg5Cittc2dpZCAiRTE2ODogOmZpbmlzaCB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjg6IDpmaW5pc2ggpKy86Ln+pbmlr6XqpdelyLDKs7Ckx7vIzdGktaTspN6kt6S/IgorCisjOiBleF9jbWRzMi5jOjMyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFnZSAlZCIKK21zZ3N0ciAiJWQgpdqhvKW4IgorCisjOiBleF9jbWRzMi5jOjMzOTQKK21zZ2lkICJObyB0ZXh0IHRvIGJlIHByaW50ZWQiCittc2dzdHIgIrD1uv6kuaTrpcalraW5pcikrKSipOqk3qS7pPMiCisKKyM6IGV4X2NtZHMyLmM6MzQ3MgorbXNnaWQgIlByaW50aW5nIHBhZ2UgJWQgKCVkJSUpIgorbXNnc3RyICKw9br+w+Y6IKXaobyluCAlZCAoJWQlJSkiCisKKyM6IGV4X2NtZHMyLmM6MzQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgQ29weSAlZCBvZiAlZCIKK21zZ3N0ciAiIKWzpdShvCAlZCAowbQgJWQgw+YpIgorCisjOiBleF9jbWRzMi5jOjM1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRlZDogJXMiCittc2dzdHIgIrD1uv6kt6TepLekvzogJXMiCisKKyM6IGV4X2NtZHMyLmM6MzU0OQorbXNnaWQgIlByaW50aW5nIGFib3J0ZWQiCittc2dzdHIgIrD1uv6krMPmu9+ktaTspN6kt6S/IgorCisjOiBleF9jbWRzMi5jOjM5MTQKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IFBvc3RTY3JpcHS90M7PpdWloaWkpeukzr3xuf6k36WopemhvKTHpLkiCisKKyM6IGV4X2NtZHMyLmM6NDE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI0OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNjI0OiCl1aWhpaSl6yBcIiVzXCIgpPKzq6SxpN6ku6TzIgorCisjOiBleF9jbWRzMi5jOjQxOTkgZXhfY21kczIuYzo0ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTc6IENhbid0IHJlYWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NzogUG9zdFNjcmlwdKTOpeqlvaG8pbml1aWhpaSl6yBcIiVzXCIgpPLGybn+pOGk3qS7pPMiCisKKyM6IGV4X2NtZHMyLmM6NDIwNworIywgYy1mb3JtYXQKK21zZ2lkICJFNjE4OiBmaWxlIFwiJXNcIiBpcyBub3QgYSBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUiCittc2dzdHIgIkU2MTg6IKXVpaGlpKXrIFwiJXNcIiCkzyBQb3N0U2NyaXB0IKXqpb2hvKW5pdWloaWkpeukx6TPpKKk6qTepLuk8yIKKworIzogZXhfY21kczIuYzo0MjIyIGV4X2NtZHMyLmM6NDI0MiBleF9jbWRzMi5jOjQyNTcgZXhfY21kczIuYzo0Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTk6IGZpbGUgXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUiCittc2dzdHIgIkU2MTk6IKXVpaGlpKXrIFwiJXNcIiCkz8LQsf6kt6TGpKSkyqSkIFBvc3RTY3JpcHQgpeqlvaG8pbml1aWhpaSl66THpLkiCisKKyM6IGV4X2NtZHMyLmM6NDMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjIxOiBcIiVzXCIgcmVzb3VyY2UgZmlsZSBoYXMgd3JvbmcgdmVyc2lvbiIKK21zZ3N0ciAiRTYyMTogpeqlvaG8pbml1aWhpaSl6yBcIiVzXCIgpM+l0KG8pbil56XzpKyw26TKpOqk3qS5IgorCisjOiBleF9jbWRzMi5jOjQ3NzYKK21zZ2lkICJFMzI0OiBDYW4ndCBvcGVuIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkUzMjQ6IFBvc3RTY3JpcHS90M7PzdGkzqXVpaGlpKXrpPKzq6SxpN6ku6TzIgorCisjOiBleF9jbWRzMi5jOjQ4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogpdWloaWkpesgXCIlc1wiIKTys6uksaTepLuk8yIKKworIzogZXhfY21kczIuYzo0OTI4Cittc2dpZCAiRTQ1NjogQ2FuJ3QgZmluZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCJwcm9sb2cucHNcIiIKK21zZ3N0ciAiRTQ1NjogUG9zdFNjcmlwdKTOpeqlvaG8pbml1aWhpaSl6yBcInByb2xvZy5wc1wiIKSspN+kxKSrpOqk3qS7pPMiCisKKyM6IGV4X2NtZHMyLmM6NDk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzLnBzXCIiCittc2dzdHIgIkU0NTY6IFBvc3RTY3JpcHSkzqXqpb2hvKW5pdWloaWkpesgXCIlcy5wc1wiIKSspN+kxKSrpOqk3qS7pPMiCisKKyM6IGV4X2NtZHMyLmM6NDk3NworIywgYy1mb3JtYXQKK21zZ2lkICJFNjIwOiBVbmFibGUgdG8gY29udmVydCBmcm9tIG11bHRpLWJ5dGUgdG8gXCIlc1wiIGVuY29kaW5nIgorbXNnc3RyICJFNjIwOiCl3qXrpcGl0KWkpcjKuLv6pPKlqKXzpbOhvKXJIFwiJXNcIiCk2MrRtLmkx6StpN6ku6TzIgorCisjOiBleF9jbWRzMi5jOjUxMDIKK21zZ2lkICJTZW5kaW5nIHRvIHByaW50ZXIuLi4iCittc2dzdHIgIqXXpeql86W/pMvB97+uw+YuLi4iCisKKyM6IGV4X2NtZHMyLmM6NTEwNgorbXNnaWQgIkUzNjU6IEZhaWxlZCB0byBwcmludCBQb3N0U2NyaXB0IGZpbGUiCittc2dzdHIgIkUzNjU6IFBvc3RTY3JpcHSl1aWhpaSl66TOsPW6/qTLvLrH1KS3pN6kt6S/IgorCisjOiBleF9jbWRzMi5jOjUxMDgKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIrD1uv6luKXnpdak8sH3v66kt6TepLekvy4iCisKKyM6IGV4X2NtZHMyLmM6NTYxOAorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50ICVzbGFuZ3VhZ2U6IFwiJXNcIiIKK21zZ3N0ciAiuL2636TOICVzuMC47DogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjU2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6ILjAuOyk8iBcIiVzXCIgpMvA38TqpMekraTepLuk8yIKKworIzogZXhfZG9jbWQuYzo1MjUKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAiRXil4qG8pcmky8b+pOqk3qS5LiClzqG8pd6l66TLzOGk66TLpM9cInZpc3VhbFwipMjG/s7PpLekxqSvpMCktaSkLiIKKworIy4gbXVzdCBiZSBhdCBFT0YKKyM6IGV4X2RvY21kLmM6NTYxCittc2dpZCAiRTUwMTogQXQgZW5kLW9mLWZpbGUiCittc2dzdHIgIkU1MDE6IKXVpaGlpKXrpM69qs67sMzD1iIKKworIzogZXhfZG9jbWQuYzo2NjkKK21zZ2lkICJFMTY5OiBDb21tYW5kIHRvbyByZWN1cnNpdmUiCittc2dzdHIgIkUxNjk6IKWzpd6l86XJpKy6xrWixaqy4aSupN6kuSIKKworIzogZXhfZG9jbWQuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDU6IEV4Y2VwdGlvbiBub3QgY2F1Z2h0OiAlcyIKK21zZ3N0ciAiRTYwNTogzuOzsKSsyuHCqqS1pOyk3qS7pPOkx6S3pL86ICVzIgorCisjOiBleF9kb2NtZC5jOjEzMTcKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICK86Ln+pdWloaWkpeukzrrHuOWkx6S5IgorCisjOiBleF9kb2NtZC5jOjEzMTgKK21zZ2lkICJFbmQgb2YgZnVuY3Rpb24iCittc2dzdHIgIrTYv/SkzrrHuOWkx6S5IgorCisjOiBleF9kb2NtZC5jOjE5MDcKK21zZ2lkICJFNDY0OiBBbWJpZ3VvdXMgdXNlIG9mIHVzZXItZGVmaW5lZCBjb21tYW5kIgorbXNnc3RyICJFNDY0OiCl5qG8pbbE6rXBpbOl3qXzpcmkzqSipKSk3qSkpMq7yM3RpMekuSIKKworIzogZXhfZG9jbWQuYzoxOTIxCittc2dpZCAiRTQ5MjogTm90IGFuIGVkaXRvciBjb21tYW5kIgorbXNnc3RyICJFNDkyOiClqKXHpaOlv6TOpbOl3qXzpcmkx6TPpKKk6qTepLuk8yIKKworIzogZXhfZG9jbWQuYzoyMDMwCittc2dpZCAiRTQ5MzogQmFja3dhcmRzIHJhbmdlIGdpdmVuIgorbXNnc3RyICJFNDkzOiC11aS1pN6kzsjPsM+krLvYxOqktaTspN6kt6S/IgorCisjOiBleF9kb2NtZC5jOjIwMzkKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4sIE9LIHRvIHN3YXAiCittc2dzdHIgIrXVpLWk3qTOyM+wz6Ssu9jE6qS1pOyk3qS3pL8sIMb+wtikqKTepLmkqz8iCisKKyM6IGV4X2RvY21kLmM6MjE2MgorbXNnaWQgIkU0OTQ6IFVzZSB3IG9yIHc+PiIKK21zZ3N0ciAiRTQ5NDogdyCk4qS3pK+kzyB3Pj4gpPK7yM3RpLekxqSvpMCktaSkIgorCisjOiBleF9kb2NtZC5jOjM3ODgKK21zZ2lkICJFMzE5OiBTb3JyeSwgdGhlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUzMTk6IKSzpM6l0KG8pbil56XzpMekz6SzpM6ls6XepfOlyaTPzfjN0aTHpK2k3qS7pPMsIKS0pOGk86TKpLWkpCIKKworIzogZXhfZG9jbWQuYzozOTkxCittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6IKXVpaGlpKXrzL6kzyAxIKTEpMukt6TGpK+kwKS1pKQiCisKKyM6IGV4X2RvY21kLmM6NDU3MQorbXNnaWQgIjEgbW9yZSBmaWxlIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIsrUvbikuaTZpK2l1aWhpaSl66SsIDEguMSkoqTqpN6kuaSsLCC9qs67pLek3qS5pKs/IgorCisjOiBleF9kb2NtZC5jOjQ1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICLK1L24pLmk2aStpdWloaWkpeukrKSipMggJWQguMSkoqTqpN6kuaSsLCC9qs67pLek3qS5pKs/IgorCisjOiBleF9kb2NtZC5jOjQ1ODEKK21zZ2lkICJFMTczOiAxIG1vcmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTczOiDK1L24pLmk2aStpdWloaWkpeukrCAxILjEpKKk6qTepLkiCisKKyM6IGV4X2RvY21kLmM6NDU4MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiDK1L24pLmk2aStpdWloaWkpeukrKSipMggJWxkILjEpKKk6qTepLkiCisKKyM6IGV4X2RvY21kLmM6NDY3OAorbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxNzQ6IKWzpd6l86XJpKy0+6TLpKKk6qTepLk6ILrGxOq1waS5pOuky6TPICEgpPLEybLDpLekxqSvpMCktaSkIgorCisjOiBleF9kb2NtZC5jOjQ3ODkKK21zZ2lkICIiCisiXG4iCisiICAgIE5hbWUgICAgICAgIEFyZ3MgUmFuZ2UgQ29tcGxldGUgIERlZmluaXRpb24iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgzL7BsCAgICAgICAgsPq/9CDIz7DPICDK5LSwICAgICAgxOq1wSIKKworIzogZXhfZG9jbWQuYzo0ODc4Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICKl5qG8pbbE6rXBpbOl3qXzpcmkrLirpMSkq6TqpN6ku6TzpMekt6S/IgorCisjOiBleF9kb2NtZC5jOjQ5MTAKK21zZ2lkICJFMTc1OiBObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIgorbXNnc3RyICJFMTc1OiDCsMCtpM/E6rXBpLWk7KTGpKSk3qS7pPMiCisKKyM6IGV4X2RvY21kLmM6NDk2MgorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3NjogsPq/9KTOv/SkrMy1uPqkx6S5IgorCisjOiBleF9kb2NtZC5jOjQ5NzcKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiClq6WmpfOlyKTyMr3Fu9jE6qS5pOuks6TIpM+kx6StpN6ku6TzIgorCisjOiBleF9kb2NtZC5jOjQ5ODcKK21zZ2lkICJFMTc4OiBJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIGNvdW50IgorbXNnc3RyICJFMTc4OiClq6WmpfOlyKTOvsrOrMPNpKzMtbj6pMekuSIKKworIzogZXhfZG9jbWQuYzo1MDE4Cittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiDK5LSwpM6kv6ThpM6w+r/0pKzJrM3XpMekuSIKKworIzogZXhfZG9jbWQuYzo1MDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiDMtbj6pMrK5LSwu9jE6qTHpLk6ICVzIgorCisjOiBleF9kb2NtZC5jOjUwNTkKK21zZ2lkICJFNDY4OiBDb21wbGV0aW9uIGFyZ3VtZW50IG9ubHkgYWxsb3dlZCBmb3IgY3VzdG9tIGNvbXBsZXRpb24iCittc2dzdHIgIkU0Njg6IMrktLCw+r/0pM+lq6W5pb+l4MrktLCkx6S3pKu7yM3RpMekraTepLuk8yIKKworIzogZXhfZG9jbWQuYzo1MDY1Cittc2dpZCAiRTQ2NzogQ3VzdG9tIGNvbXBsZXRpb24gcmVxdWlyZXMgYSBmdW5jdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiRTQ2NzogpauluaW/peDK5LSwpMukz7D6v/SkyKS3pMa02L/0pKzJrM3XpMekuSIKKworIzogZXhfZG9jbWQuYzo1MDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MTogzLW4+qTKwrDAraTHpLk6ICVzIgorCisjOiBleF9kb2NtZC5jOjUxMTkKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4MjogzLW4+qTKpbOl3qXzpcnMvqTHpLkiCisKKyM6IGV4X2RvY21kLmM6NTEzNAorbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4MzogpeahvKW2xOq1waWzpd6l86XJpM+x0cLnyri7+qTHu8+k3qTppMqksaTspNCkyqTqpN6ku6TzIgorCisjOiBleF9kb2NtZC5jOjUyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NDogTm8gc3VjaCB1c2VyLWRlZmluZWQgY29tbWFuZDogJXMiCittc2dzdHIgIkUxODQ6IKS9pM6l5qG8pbbE6rXBpbOl3qXzpcmkz6SipOqk3qS7pPM6ICVzIgorCisjOiBleF9kb2NtZC5jOjU2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NTogQ2Fubm90IGZpbmQgY29sb3Igc2NoZW1lICVzIgorbXNnc3RyICJFMTg1OiClq6XpobyluaWtobyl4CAlcyCkrKTfpMSkq6TqpN6ku6TzIgorCisjOiBleF9kb2NtZC5jOjU2NzQKK21zZ2lkICJHcmVldGluZ3MsIFZpbSB1c2VyISIKK21zZ3N0ciAiVmltILvIpKSktaTzoaKk5KSiISIKKworIzogZXhfZG9jbWQuYzo2MzkxCittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgIr+3pLekpKWmpaOl86XJpaakx6XVpaGlpKXrpPLK1L24pLek3qS5IgorCisjOiBleF9kb2NtZC5jOjY2ODYKK21zZ2lkICJObyBzd2FwIGZpbGUiCittc2dzdHIgIqW5pe+lw6XXpdWloaWkpeukrKSipOqk3qS7pPMiCisKKyM6IGV4X2RvY21kLmM6Njc5MAorbXNnaWQgIkFwcGVuZCBGaWxlIgorbXNnc3RyICLEybLDpdWloaWkpesiCisKKyM6IGV4X2RvY21kLmM6Njg1NAorbXNnaWQgIkUxODY6IE5vIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE4NjogwbCkzqXHpaOl7KWvpcil6qTPpKKk6qTepLuk8yIKKworIzogZXhfZG9jbWQuYzo2OTM2Cittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4NzogzKTDziIKKworIzogZXhfZG9jbWQuYzo3MDIxCittc2dpZCAiRTQ2NTogOndpbnNpemUgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiCittc2dzdHIgIkU0NjU6ICIKKworIzogZXhfZG9jbWQuYzo3MDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldpbmRvdyBwb3NpdGlvbjogWCAlZCwgWSAlZCIKK21zZ3N0ciAipaalo6XzpcmlprDMw9Y6IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NzA4MgorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisiRTE4ODogpLOkzqXXpemlw6XIpduhvKXgpMukz6WmpaOl86XJpaawzMPWpM686MbAtaHHvaTPvMLB9aS1pOykxqSkpN6ku6TzIgorCisjOiBleF9kb2NtZC5jOjcwOTIKK21zZ2lkICJFNDY2OiA6d2lucG9zIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY2OiA6d2lucG9zIKTLpM8ypMSkzr/0w82kzrD6v/SkrMmszdekx6S5IgorCisjOiBleF9kb2NtZC5jOjczNzAKK21zZ2lkICJTYXZlIFJlZGlyZWN0aW9uIgorbXNnc3RyICKl6qXApaSl7KWvpcik8srdwrikt6TepLkiCisKKyM6IGV4X2RvY21kLmM6NzU2MAorbXNnaWQgIlNhdmUgVmlldyIKK21zZ3N0ciAipdOl5aG8pPLK3cK4pLek3qS5IgorCisjOiBleF9kb2NtZC5jOjc1NjEKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIqW7pcOlt6XnpfO+8MrzpPLK3cK4pLek3qS5IgorCisjOiBleF9kb2NtZC5jOjc1NjMKK21zZ2lkICJTYXZlIFNldHVwIgorbXNnc3RyICLA38TqpPLK3cK4pLek3qS5IgorCisjOiBleF9kb2NtZC5jOjc3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4OTogXCIlc1wiIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTg5OiBcIiVzXCIgpKzCuLrfpLek3qS5ICi+5b3xpLmk66TLpM8gISCk8sTJssOkt6TGpK+kwKS1pKQpIgorCisjOiBleF9kb2NtZC5jOjc3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5MDogQ2Fubm90IG9wZW4gXCIlc1wiIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTkwOiBcIiVzXCIgpPK98bn+pN/N0aTIpLekxrOrpLGk3qS7pPMiCisKKyMuIHNldCBtYXJrCisjOiBleF9kb2NtZC5jOjc3NDQKK21zZ2lkICJFMTkxOiBBcmd1bWVudCBtdXN0IGJlIGEgbGV0dGVyIG9yIGZvcndhcmQvYmFja3dhcmQgcXVvdGUiCittc2dzdHIgIkUxOTE6ILD6v/Skz8q4u/qkq8Gwv8ovuOXC4KWvpamhvKXIpMekt6TKpLGk7KTQpKSksaTepLuk8yIKKworIzogZXhfZG9jbWQuYzo3Nzg2Cittc2dpZCAiRTE5MjogUmVjdXJzaXZlIHVzZSBvZiA6bm9ybWFsIHRvbyBkZWVwIgorbXNnc3RyICJFMTkyOiA6bm9ybWFsIKTOusa1os34zdGkrL+8pK+kyqTqpLmkrqTepLekvyIKKworIzogZXhfZG9jbWQuYzo4MzA0Cittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6ICcjJ6Tyw9akrbS5pKik68n7pdWloaWkpeukzsy+wbCkrKSipOqk3qS7pPMiCisKKyM6IGV4X2RvY21kLmM6ODMzNQorbXNnaWQgIkU0OTU6IG5vIGF1dG9jb21tYW5kIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhZmlsZT5cIiIKK21zZ3N0ciAiRTQ5NTogXCI8YWZpbGU+XCKk8sPWpK20uaSopOthdXRvY29tbWFuZKTOpdWloaWkpevMvqSspKKk6qTepLuk8yIKKworIzogZXhfZG9jbWQuYzo4MzQzCittc2dpZCAiRTQ5Njogbm8gYXV0b2NvbW1hbmQgYnVmZmVyIG51bWJlciB0byBzdWJzdGl0dXRlIGZvciBcIjxhYnVmPlwiIgorbXNnc3RyICJFNDk2OiBcIjxhYnVmPlwipPLD1qSttLmkqKTrYXV0b2NvbW1hbmSl0KXDpdWlocjWueakrKSipOqk3qS7pPMiCisKKyM6IGV4X2RvY21kLmM6ODM1NAorbXNnaWQgIkU0OTc6IG5vIGF1dG9jb21tYW5kIG1hdGNoIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YW1hdGNoPlwiIgorbXNnc3RyICJFNDk3OiBcIjxhbWF0Y2g+XCKk8sPWpK20uaSopOthdXRvY29tbWFuZKTOs7rF9sy+pKykoqTqpN6ku6TzIgorCisjOiBleF9kb2NtZC5jOjgzNjQKK21zZ2lkICJFNDk4OiBubyA6c291cmNlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxzZmlsZT5cIiIKK21zZ3N0ciAiRTQ5ODogXCI8c2ZpbGU+XCKk8sPWpK20uaSopOsgOnNvdXJjZSDC0L7dpdWloaWkpevMvqSspKKk6qTepLuk8yIKKworIzogZXhfZG9jbWQuYzo4NDA1CisjLCBuby1jLWZvcm1hdAorbXNnaWQgIkU0OTk6IEVtcHR5IGZpbGUgbmFtZSBmb3IgJyUnIG9yICcjJywgb25seSB3b3JrcyB3aXRoIFwiOnA6aFwiIgorbXNnc3RyICIiCisiRTQ5OTogJyUnIKTkICcjJyCkrMy1zL6l1aWhpaSl66TKpM6kxyBcIjpwOmhcIiCk8si8pO+kyqSku8ikpMr9pM+kx6StpN6ku6TzIgorCisjOiBleF9kb2NtZC5jOjg0MDcKK21zZ2lkICJFNTAwOiBFdmFsdWF0ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJFNTAwOiC29cq4u/rO86TIpLekxsm+ssGktaTspN6kt6S/IgorCisjOiBleF9kb2NtZC5jOjkzMzgKK21zZ2lkICJFMTk1OiBDYW5ub3Qgb3BlbiB2aW1pbmZvIGZpbGUgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxOTU6IHZpbWluZm+l1aWhpaSl66Tyxsm5/s3RpMikt6TGs6uksaTepLuk8yIKKworIzogZXhfZG9jbWQuYzo5NTExCittc2dpZCAiRTE5NjogTm8gZGlncmFwaHMgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMTk2OiCks6TOpdChvKW4peel86TLuee7+qTPpKKk6qTepLuk8yIKKworIzogZXhfZXZhbC5jOjQ0MAorbXNnaWQgIkU2MDg6IENhbm5vdCA6dGhyb3cgZXhjZXB0aW9ucyB3aXRoICdWaW0nIHByZWZpeCIKK21zZ3N0ciAiRTYwODogJ1ZpbScgpMe7z6TepOvO47OwpM8gOnRocm93IKTHpK2k3qS7pPMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gdGhyb3duOiAlcyIKK21zZ3N0ciAizuOzsKSsyK/AuKS3pN6kt6S/OiAlcyIKKworIzogZXhfZXZhbC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZmluaXNoZWQ6ICVzIgorbXNnc3RyICLO47OwpKy8/cKrpLek3qS3pL86ICVzIgorCisjOiBleF9ldmFsLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBkaXNjYXJkZWQ6ICVzIgorbXNnc3RyICLO47OwpKzHy7T+pLWk7KTepLekvzogJXMiCisKKyM6IGV4X2V2YWwuYzo2MjAgZXhfZXZhbC5jOjY2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgbGluZSAlbGQiCittc2dzdHIgIiVzLCC51CAlbGQiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gY2F1Z2h0OiAlcyIKK21zZ3N0ciAizuOzsKSsyuHCqqS1pOyk3qS3pL86ICVzIgorCisjOiBleF9ldmFsLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG1hZGUgcGVuZGluZyIKK21zZ3N0ciAiJXMgpMuk6KTqzKS36MTqvvXC1qSswLikuKTepLekvyIKKworIzogZXhfZXZhbC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXN1bWVkIgorbXNnc3RyICIlcyCkrLrGs6ukt6TepLekvyIKKworIzogZXhfZXZhbC5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNjYXJkZWQiCittc2dzdHIgIiVzIKSsx8u0/qS1pOyk3qS3pL8iCisKKyM6IGV4X2V2YWwuYzo3NDYKK21zZ2lkICJFeGNlcHRpb24iCittc2dzdHIgIs7js7AiCisKKyM6IGV4X2V2YWwuYzo3NTIKK21zZ2lkICJFcnJvciBhbmQgaW50ZXJydXB0IgorbXNnc3RyICKlqKXpobykyLPkuf6k3yIKKworIzogZXhfZXZhbC5jOjc1NCBndWkuYzo0Mzc1Cittc2dpZCAiRXJyb3IiCittc2dzdHIgIqWopemhvCIKKworIy4gaWYgKHBlbmRpbmcgJiBDU1RQX0lOVEVSUlVQVCkKKyM6IGV4X2V2YWwuYzo3NTYKK21zZ2lkICJJbnRlcnJ1cHQiCittc2dzdHIgIrPkuf6k3yIKKworIzogZXhfZXZhbC5jOjgzMAorbXNnaWQgIkU1Nzk6IDppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTc5OiA6aWYgpM7G/qTsu9KkrL+8suGkrqTepLkiCisKKyM6IGV4X2V2YWwuYzo4NjcKK21zZ2lkICJFNTgwOiA6ZW5kaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODA6IDppZiCkzqTKpKQgOmVuZGlmIKSspKKk6qTepLkiCisKKyM6IGV4X2V2YWwuYzo5MTEKK21zZ2lkICJFNTgxOiA6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MTogOmlmIKTOpMqkpCA6ZWxzZSCkrKSipOqk3qS5IgorCisjOiBleF9ldmFsLmM6OTE0Cittc2dpZCAiRTU4MjogOmVsc2VpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MjogOmlmIKTOpMqkpCA6ZWxzZWlmIKSspKKk6qTepLkiCisKKyM6IGV4X2V2YWwuYzo5MjEKK21zZ2lkICJFNTgzOiBtdWx0aXBsZSA6ZWxzZSIKK21zZ3N0ciAiRTU4MzogyqO/9KTOIDplbHNlIKSspKKk6qTepLkiCisKKyM6IGV4X2V2YWwuYzo5MjQKK21zZ2lkICJFNTg0OiA6ZWxzZWlmIGFmdGVyIDplbHNlIgorbXNnc3RyICJFNTg0OiA6ZWxzZSCkzrjlpMsgOmVsc2VpZiCkrKSipOqk3qS5IgorCisjOiBleF9ldmFsLmM6OTkxCittc2dpZCAiRTU4NTogOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU1ODU6IDp3aGlsZSCkzsb+pOy70qSsv7ykr7LhpK6k3qS5IgorCisjOiBleF9ldmFsLmM6MTA0NworbXNnaWQgIkU1ODY6IDpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4NjogOndoaWxlIKTOpMqkpCA6Y29udGludWUgpKykoqTqpN6kuSIKKworIzogZXhfZXZhbC5jOjEwODcKK21zZ2lkICJFNTg3OiA6YnJlYWsgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODc6IDp3aGlsZSCkzqTKpKQgOmJyZWFrIKSspKKk6qTepLkiCisKKyM6IGV4X2V2YWwuYzoxMjg2Cittc2dpZCAiRTYwMTogOnRyeSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNjAxOiA6dHJ5IKTOxv6k7LvSpKy/vLLhpK6k3qS5IgorCisjOiBleF9ldmFsLmM6MTM2NgorbXNnaWQgIkU2MDM6IDpjYXRjaCB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDM6IDp0cnkgpM6kyqSkIDpjYXRjaCCkrKSipOqk3qS5IgorCisjLiBHaXZlIHVwIGZvciBhICI6Y2F0Y2giIGFmdGVyICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKyMuICogSnVzdCBwYXJzZS4KKyM6IGV4X2V2YWwuYzoxMzg4Cittc2dpZCAiRTYwNDogOmNhdGNoIGFmdGVyIDpmaW5hbGx5IgorbXNnc3RyICJFNjA0OiA6ZmluYWxseSCkzrjlpMsgOmNhdGNoIKSspKKk6qTepLkiCisKKyM6IGV4X2V2YWwuYzoxNTIxCittc2dpZCAiRTYwNjogOmZpbmFsbHkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjA2OiA6dHJ5IKTOpMqkpCA6ZmluYWxseSCkrKSipOqk3qS5IgorCisjLiBHaXZlIHVwIGZvciBhIG11bHRpcGxlICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKyM6IGV4X2V2YWwuYzoxNTQ1Cittc2dpZCAiRTYwNzogbXVsdGlwbGUgOmZpbmFsbHkiCittc2dzdHIgIkU2MDc6IMqjv/SkziA6ZmluYWx5eSCkrKSipOqk3qS5IgorCisjOiBleF9ldmFsLmM6MTY1NAorbXNnaWQgIkU2MDI6IDplbmR0cnkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAyOiA6dHJ5IKTOpMqkpCA6ZW5kdHJ5IKTHpLkiCisKKyM6IGV4X2V2YWwuYzoxOTg2Cittc2dpZCAiRTE5MzogOmVuZGZ1bmN0aW9uIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTE5MzogtNi/9KTOs7CkyyA6ZW5kZnVuY3Rpb24gpKykoqTqpN6kt6S/IgorCisjOiBleF9nZXRsbi5jOjMyOTUKK21zZ2lkICJ0YWduYW1lIgorbXNnc3RyICKlv6WwzL4iCisKKyM6IGV4X2dldGxuLmM6MzI5OAorbXNnaWQgIiBraW5kIGZpbGVcbiIKK21zZ3N0ciAiIKXVpaGlpKXrvO/O4FxuIgorCisjOiBleF9nZXRsbi5jOjQ3NTEKK21zZ2lkICInaGlzdG9yeScgb3B0aW9uIGlzIHplcm8iCittc2dzdHIgIqWqpdelt6XnpfMgJ2hpc3RvcnknIKSspbyl7aTHpLkiCisKKyM6IGV4X2dldGxuLmM6NTAxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyAlcyBIaXN0b3J5IChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgJXMgueDM3KTOzfrO8iAov7ekt6SkpOKkzqSrpOm4xaSkpOKkzqTYKTpcbiIKKworIzogZXhfZ2V0bG4uYzo1MDE4Cittc2dpZCAiQ29tbWFuZCBMaW5lIgorbXNnc3RyICKls6XepfOlyaXppaSl8yIKKworIzogZXhfZ2V0bG4uYzo1MDE5Cittc2dpZCAiU2VhcmNoIFN0cmluZyIKK21zZ3N0ciAiuKG698q4u/rO8yIKKworIzogZXhfZ2V0bG4uYzo1MDIwCittc2dpZCAiRXhwcmVzc2lvbiIKK21zZ3N0ciAivLAiCisKKyM6IGV4X2dldGxuLmM6NTAyMQorbXNnaWQgIklucHV0IExpbmUiCittc2dzdHIgIsb+zs+51CIKKworIzogZXhfZ2V0bG4uYzo1MDU5Cittc2dpZCAiRTE5ODogY21kX3BjaGFyIGJleW9uZCB0aGUgY29tbWFuZCBsZW5ndGgiCittc2dzdHIgIkUxOTg6IGNtZF9wY2hhciCkrKWzpd6l86XJxLmk8sS2pKik3qS3pL8iCisKKyM6IGV4X2dldGxuLmM6NTIzNgorbXNnaWQgIkUxOTk6IEFjdGl2ZSB3aW5kb3cgb3IgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIkUxOTk6IKWipa+lxqWjpdakyqWmpaOl86XJpaakq6XQpcOl1aWhpKy67738pLWk7KTepLekvyIKKworIzogZmlsZWlvLmM6MzcxCittc2dpZCAiSWxsZWdhbCBmaWxlIG5hbWUiCittc2dzdHIgIsnUwLWkyqXVpaGlpKXrzL4iCisKKyM6IGZpbGVpby5jOjM5NSBmaWxlaW8uYzo1MjkgZmlsZWlvLmM6Mjg1MCBmaWxlaW8uYzoyODkxCittc2dpZCAiaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIiCkz6XHpaOl7KWvpcil6qTHpLkiCisKKyM6IGZpbGVpby5jOjM5NworbXNnaWQgImlzIG5vdCBhIGZpbGUiCittc2dzdHIgIiCkz6XVpaGlpKXrpMekz6SipOqk3qS7pPMiCisKKyM6IGZpbGVpby5jOjU1MSBmaWxlaW8uYzo0MDU3Cittc2dpZCAiW05ldyBGaWxlXSIKK21zZ3N0ciAiW7+3pdWloaWkpetdIgorCisjOiBmaWxlaW8uYzo1ODQKK21zZ2lkICJbUGVybWlzc2lvbiBEZW5pZWRdIgorbXNnc3RyICJbx6eyxKSspKKk6qTepLuk810iCisKKyM6IGZpbGVpby5jOjY4OAorbXNnaWQgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtYWRlIHRoZSBmaWxlIHVucmVhZGFibGUiCittc2dzdHIgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kIKSspdWloaWkpeuk8sbJuf7J1LLEpMukt6TepLekvyIKKworIzogZmlsZWlvLmM6NjkwCittc2dpZCAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmQgpM+4vbrfpM6l0KXDpdWloaTyytGkqKTppOyk3qS7pPMiCisKKyM6IGZpbGVpby5jOjcxMQorbXNnaWQgIlZpbTogUmVhZGluZyBmcm9tIHN0ZGluLi4uXG4iCittc2dzdHIgIlZpbTogybi94Mb+zs+kq6Tpxsm5/sPmLi4uXG4iCisKKyM6IGZpbGVpby5jOjcxNworbXNnaWQgIlJlYWRpbmcgZnJvbSBzdGRpbi4uLiIKK21zZ3N0ciAiybi94Mb+zs+kq6Tpxsm5/qTfw+YuLi4iCisKKyMuIFJlLW9wZW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgZmFpbGVkIQorIzogZmlsZWlvLmM6OTg4Cittc2dpZCAiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiCittc2dzdHIgIkUyMDI6IMrRtLmkrKXVpaGlpKXrpPLGybn+ydSyxKTLpLek3qS3pL8iCisKKyM6IGZpbGVpby5jOjIwMjcKK21zZ2lkICJbZmlmby9zb2NrZXRdIgorbXNnc3RyICJbRklGTy+lvaWxpcOlyF0iCisKKyM6IGZpbGVpby5jOjIwMzQKK21zZ2lkICJbZmlmb10iCittc2dzdHIgIltGSUZPXSIKKworIzogZmlsZWlvLmM6MjA0MQorbXNnaWQgIltzb2NrZXRdIgorbXNnc3RyICJbpb2lsaXDpchdIgorCisjOiBmaWxlaW8uYzoyMDQ5Cittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW8bJwOxdIgorCisjOiBmaWxlaW8uYzoyMDU5Cittc2dpZCAiW0NSIG1pc3NpbmddIgorbXNnc3RyICJbQ1LMtV0iCisKKyM6IGZpbGVpby5jOjIwNjQKK21zZ2lkICJbTkwgZm91bmRdIgorbXNnc3RyICJbTkzNrV0iCisKKyM6IGZpbGVpby5jOjIwNjkKK21zZ2lkICJbbG9uZyBsaW5lcyBzcGxpdF0iCittc2dzdHIgIlvEubnUyqyz5F0iCisKKyM6IGZpbGVpby5jOjIwNzUgZmlsZWlvLmM6NDA0MQorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW8ykytG0uV0iCisKKyM6IGZpbGVpby5jOjIwODAgZmlsZWlvLmM6NDA0NgorbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJbytG0ubrRXSIKKworIzogZmlsZWlvLmM6MjA4NyBmaWxlaW8uYzo0MDcxCittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJbsMW55rK9XSIKKworIzogZmlsZWlvLmM6MjA5NAorbXNnaWQgIltDT05WRVJTSU9OIEVSUk9SXSIKK21zZ3N0ciAiW8rRtLmlqKXpobxdIgorCisjOiBmaWxlaW8uYzoyMTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIltJTExFR0FMIEJZVEUgaW4gbGluZSAlbGRdIgorbXNnc3RyICJbJWxkILnUzNykzsnUwLWkyqXQpaSlyF0iCisKKyM6IGZpbGVpby5jOjIxMDcKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbxsm5/qWopemhvF0iCisKKyM6IGZpbGVpby5jOjIzMjMKK21zZ2lkICJDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3IgY29udmVyc2lvbiIKK21zZ3N0ciAiytG0uaTLyazN16TKsOy7/qXVpaGlpKXrpKyk36TEpKuk6qTepLuk8yIKKworIzogZmlsZWlvLmM6MjMzMAorbXNnaWQgIkNvbnZlcnNpb24gd2l0aCAnY2hhcmNvbnZlcnQnIGZhaWxlZCIKK21zZ3N0ciAiJ2NoYXJjb252ZXJ0JyCky6TopOvK0bS5pKy8usfUpLek3qS3pL8iCisKKyM6IGZpbGVpby5jOjIzMzMKK21zZ2lkICJjYW4ndCByZWFkIG91dHB1dCBvZiAnY2hhcmNvbnZlcnQnIgorbXNnc3RyICInY2hhcmNvbnZlcnQnIKTOvdDOz6Tyxsm5/qThpN6ku6TzpMekt6S/IgorCisjOiBmaWxlaW8uYzoyNzMzCittc2dpZCAiRTIwMzogQXV0b2NvbW1hbmRzIGRlbGV0ZWQgb3IgdW5sb2FkZWQgYnVmZmVyIHRvIGJlIHdyaXR0ZW4iCittc2dzdHIgIkUyMDM6IMrdwrikuaTrpdClw6XVpaGk8mF1dG9jb21tYW5kpKy67738pKuy8sr8pLek3qS3pL8iCisKKyM6IGZpbGVpby5jOjI3NTYKK21zZ2lkICJFMjA0OiBBdXRvY29tbWFuZCBjaGFuZ2VkIG51bWJlciBvZiBsaW5lcyBpbiB1bmV4cGVjdGVkIHdheSIKK21zZ3N0ciAiRTIwNDogYXV0b2NvbW1hbmSkrM29tPyku6TMyv3LoaTHudS/9KTyytG5uaS3pN6kt6S/IgorCisjIEFkZGVkIGF0IDE5LUphbi0yMDA0LgorIzogZmlsZWlvLmM6Mjc5NAorbXNnaWQgIk5ldEJlYW5zIGRpc3NhbGxvd3Mgd3JpdGVzIG9mIHVubW9kaWZpZWQgYnVmZmVycyIKK21zZ3N0ciAiTmV0QmVhbnOkz8ykytG5uaTOpdClw6XVpaGk8r7lvfGkuaTrpLOkyKTPtfayxKS3pMakpKTepLuk8yIKKworIzogZmlsZWlvLmM6MjgwMgorbXNnaWQgIlBhcnRpYWwgd3JpdGVzIGRpc2FsbG93ZWQgZm9yIE5ldEJlYW5zIGJ1ZmZlcnMiCittc2dzdHIgIk5ldEJlYW5zpdClw6XVpaGkzrDsyfSk8r3xpK290KS5pLOkyKTPpMekraTepLuk8yIKKworIzogZmlsZWlvLmM6Mjg1NiBmaWxlaW8uYzoyODc0Cittc2dpZCAiaXMgbm90IGEgZmlsZSBvciB3cml0YWJsZSBkZXZpY2UiCittc2dzdHIgIqTPpdWloaWkpeukx6TivfG5/qTfssTHvaXHpdClpKW5pMek4qSipOqk3qS7pPMiCisKKyM6IGZpbGVpby5jOjI5MjYKK21zZ2lkICJpcyByZWFkLW9ubHkgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAipM/Gybn+wOzN0aTHpLkgKLavwKm98bn+pMukzyAhIKTyxMmywykiCisKKyM6IGZpbGVpby5jOjMyNzIKK21zZ2lkICJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA2OiCl0KXDpa+loqXDpdel1aWhpaSl66Tyyt3CuKTHpK2k3qS7pPMgKCEgpPLEybLDpMe2r8Cpyt3CuCkiCisKKyM6IGZpbGVpby5jOjMyODQKK21zZ2lkICJFNTA3OiBDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkU1MDc6IKXQpcOlr6WipcOl16XVpaGlpKXrpPLKxKS4pOu63aTLpail6aG8pKzIr8C4pLek3qS3pL8gKCEgpPLEybLDpMe2r8CpKSIKKworIzogZmlsZWlvLmM6MzI4NgorbXNnaWQgIkU1MDg6IENhbid0IHJlYWQgZmlsZSBmb3IgYmFja3VwIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDg6IKXQpcOlr6WipcOl183RpdWloaWkpeuk8sbJuf6k4aTepLuk8yAoISCk8sTJssOkx7avwKnGybn+KSIKKworIzogZmlsZWlvLmM6MzMwMgorbXNnaWQgIkU1MDk6IENhbm5vdCBjcmVhdGUgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwOTogpdClw6WvpaKlw6XXpdWloaWkpeuk8rrupOyk3qS7pPMgKCEgpPLEybLDpMe2r8Cpuu7ArikiCisKKyM6IGZpbGVpby5jOjM0MDUKK21zZ2lkICJFNTEwOiBDYW4ndCBtYWtlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MTA6IKXQpcOlr6WipcOl16XVpaGlpKXrpPK67qTspN6ku6TzICghIKTyxMmyw6THtq/AqbruwK4pIgorCisjOiBmaWxlaW8uYzozNDY3Cittc2dpZCAiRTQ2MDogVGhlIHJlc291cmNlIGZvcmsgd291bGQgYmUgbG9zdCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDYwOiCl6qW9obyluaXVpamhvKWvpKy8uqTvpOyk66SrpOKkt6TspN6ku6TzICghIKTyxMmyw6THtq/AqSkiCisKKyM6IGZpbGVpby5jOjM1NjYKK21zZ2lkICJFMjE0OiBDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxNDogyt3CuM3RsOy7/qXVpaGlpKXrpKyk36TEpKuk6qTepLuk8yIKKworIzogZmlsZWlvLmM6MzU4NAorbXNnaWQgIkUyMTM6IENhbm5vdCBjb252ZXJ0IChhZGQgISB0byB3cml0ZSB3aXRob3V0IGNvbnZlcnNpb24pIgorbXNnc3RyICJFMjEzOiDK0bS5pMekraTepLuk8yAoISCk8sTJssOkx8rRtLmku6S6pMvK3cK4KSIKKworIzogZmlsZWlvLmM6MzYxOQorbXNnaWQgIkUxNjY6IENhbid0IG9wZW4gbGlua2VkIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNjY6IKXqpfOlr6S1pOykv6XVpaGlpKXrpMu98bn+pOGk3qS7pPMiCisKKyM6IGZpbGVpby5jOjM2MjMKK21zZ2lkICJFMjEyOiBDYW4ndCBvcGVuIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTI6IL3xuf6k383RpMul1aWhpaSl66Tys6uksaTepLuk8yIKKworIzogZmlsZWlvLmM6Mzg4NQorbXNnaWQgIkU2Njc6IEZzeW5jIGZhaWxlZCIKK21zZ3N0ciAiRTY2NzogZnN5bmMgpMu8usfUpLek3qS3pL8iCisKKyM6IGZpbGVpby5jOjM4OTIKK21zZ2lkICJFNTEyOiBDbG9zZSBmYWlsZWQiCittc2dzdHIgIkU1MTI6IMrEpLik66SzpMiky7y6x9QiCisKKyM6IGZpbGVpby5jOjM5NjMKK21zZ2lkICJFNTEzOiB3cml0ZSBlcnJvciwgY29udmVyc2lvbiBmYWlsZWQiCittc2dzdHIgIkU1MTM6IL3xuf6k36WopemhvCwgytG0uby6x9QiCisKKyM6IGZpbGVpby5jOjM5NjkKK21zZ2lkICJFNTE0OiB3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICJFNTE0OiC98bn+pN+lqKXpobwsICil1aWhpaSl66W3pbmlxqXgpKzL/sfVPykiCisKKyM6IGZpbGVpby5jOjQwMzYKK21zZ2lkICIgQ09OVkVSU0lPTiBFUlJPUiIKK21zZ3N0ciAiIMrRtLmlqKXpobwiCisKKyM6IGZpbGVpby5jOjQwNTIKK21zZ2lkICJbRGV2aWNlXSIKK21zZ3N0ciAiW6XHpdClpKW5XSIKKworIzogZmlsZWlvLmM6NDA1NworbXNnaWQgIltOZXddIgorbXNnc3RyICJbv7ddIgorCisjOiBmaWxlaW8uYzo0MDc5Cittc2dpZCAiIFthXSIKK21zZ3N0ciAiIFthXSIKKworIzogZmlsZWlvLmM6NDA3OQorbXNnaWQgIiBhcHBlbmRlZCIKK21zZ3N0ciAiIMTJssMiCisKKyM6IGZpbGVpby5jOjQwODEKK21zZ2lkICIgW3ddIgorbXNnc3RyICIgW3ddIgorCisjOiBmaWxlaW8uYzo0MDgxCittc2dpZCAiIHdyaXR0ZW4iCittc2dzdHIgIiC98bn+pN8iCisKKyM6IGZpbGVpby5jOjQxMzEKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTogcGF0Y2htb2RlOiC4tsvcpdWloaWkpeuk8srdwrikx6StpN6ku6TzIgorCisjOiBmaWxlaW8uYzo0MTUzCittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBwYXRjaG1vZGU6ILb1pM64tsvcpdWloaWkpeuk8nRvdWNopMekraTepLuk8yIKKworIzogZmlsZWlvLmM6NDE2OAorbXNnaWQgIkUyMDc6IENhbid0IGRlbGV0ZSBiYWNrdXAgZmlsZSIKK21zZ3N0ciAiRTIwNzogpdClw6WvpaKlw6XXpdWloaWkpeuk8r7DpLuk3qS7pPMiCisKKyM6IGZpbGVpby5jOjQyMzIKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyK32bnwOiC4tsvcpdWloaWkpeukrLy6pO+k7KS/pKvK0bm5pLWk7KTepLekv1xuIgorCisjOiBmaWxlaW8uYzo0MjM0Cittc2dpZCAiZG9uJ3QgcXVpdCB0aGUgZWRpdG9yIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIKK21zZ3N0ciAipdWloaWkpeukzsrdwriky8CuuPmkuaTrpN6kx6Wopcelo6W/pPK9qs67pLekyqSkpMekr6TApLWkpCEiCisKKyM6IGZpbGVpby5jOjQzMjMKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW2Rvc10iCisKKyM6IGZpbGVpby5jOjQzMjMKK21zZ2lkICJbZG9zIGZvcm1hdF0iCittc2dzdHIgIltkb3Ol1aWpobyl3qXDpchdIgorCisjOiBmaWxlaW8uYzo0MzMwCittc2dpZCAiW21hY10iCittc2dzdHIgIlttYWNdIgorCisjOiBmaWxlaW8uYzo0MzMwCittc2dpZCAiW21hYyBmb3JtYXRdIgorbXNnc3RyICJbbWFjpdWlqaG8pd6lw6XIXSIKKworIzogZmlsZWlvLmM6NDMzNworbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzo0MzM3Cittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW3VuaXil1aWpobyl3qXDpchdIgorCisjOiBmaWxlaW8uYzo0MzY0Cittc2dpZCAiMSBsaW5lLCAiCittc2dzdHIgIjEgudQsICIKKworIzogZmlsZWlvLmM6NDM2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMsICIKK21zZ3N0ciAiJWxkILnULCAiCisKKyM6IGZpbGVpby5jOjQzNjkKK21zZ2lkICIxIGNoYXJhY3RlciIKK21zZ3N0ciAiMSDKuLv6IgorCisjOiBmaWxlaW8uYzo0MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlbGQgyri7+iIKKworIzogZmlsZWlvLmM6NDM4MQorbXNnaWQgIltub2VvbF0iCittc2dzdHIgIltub2VvbF0iCisKKyM6IGZpbGVpby5jOjQzODEKK21zZ2lkICJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIgorbXNnc3RyICJbuse9qrnUpKzJ1LSwwbRdIgorCisjLiBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIy4gbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjLiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyM6IGZpbGVpby5jOjQ0MDAKK21zZ2lkICJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiCittc2dzdHIgIrfZufA6IMbJuf6k86TAuOWky6XVpaGlpKXrpMvK0bm5pKykoqTqpN6kt6S/ISEhIgorCisjOiBmaWxlaW8uYzo0NDAyCittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0IgorbXNnc3RyICLL3MX2pMu+5b3xpK2kt6TepLmkqyIKKworIzogZmlsZWlvLmM6NTU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogXCIlc1wiIKTyvfG5/qTfw+akzqWopemhvKTHpLkiCisKKyM6IGZpbGVpby5jOjU1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwOTogRXJyb3IgY2xvc2luZyBcIiVzXCIiCittc2dzdHIgIkUyMDk6IFwiJXNcIiCk8srEpLik67v+pMulqKXpobykx6S5IgorCisjOiBmaWxlaW8uYzo1NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTA6IEVycm9yIHJlYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFMjEwOiBcIiVzXCIgpPLGybn+w+akzqWopemhvKTHpLkiCisKKyM6IGZpbGVpby5jOjU4MTAKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBhdXRvY29tbWFuZCCkziBGaWxlQ2hhbmdlZFNoZWxsIKSspdClw6XVpaGk8rrvvfykt6TepLekvyIKKworIzogZmlsZWlvLmM6NTgxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMjExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBubyBsb25nZXIgYXZhaWxhYmxlIgorbXNnc3RyICJFMjExOiC32bnwOiCl1aWhpaSl6yBcIiVzXCIgpM+0+6TLwri636S3pN6ku6TzIgorCisjOiBmaWxlaW8uYzo1ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiVzEyOiC32bnwOiCl1aWhpaSl6yBcIiVzXCIgpKzK0bm5pLWk7FZpbaTOpdClw6XVpaGk4srRubmktaTspN6kt6S/IgorCisjOiBmaWxlaW8uYzo1ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMTogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTE6ILfZufA6IKXVpaGlpKXrIFwiJXNcIiCkz8rUvbizq7vPuOWky8rRubmktaTspN6kt6S/IgorCisjOiBmaWxlaW8uYzo1ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxNjogV2FybmluZzogTW9kZSBvZiBmaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxNjogt9m58DogpdWloaWkpesgXCIlc1wiIKTOpeKhvKXJpKzK1L24s6u7z7jlpMvK0bm5pLWk7KTepLekvyIKKworIzogZmlsZWlvLmM6NTg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTM6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTM6ILfZufA6IKXVpaGlpKXrIFwiJXNcIiCkz8rUvbizq7vPuOWky7ruwK6ktaTspN6kt6S/IgorCisjOiBmaWxlaW8uYzo1ODU5Cittc2dpZCAiU2VlIFwiOmhlbHAgVzExXCIgZm9yIG1vcmUgaW5mby4iCittc2dzdHIgIr7cutmkzyBcIjpoZWxwIFcxMVwiIKTyu7K+yKS3pMakr6TApLWkpCIKKworIzogZmlsZWlvLmM6NTg3MworbXNnaWQgIldhcm5pbmciCittc2dzdHIgIrfZufAiCisKKyM6IGZpbGVpby5jOjU4NzQKK21zZ2lkICIiCisiJk9LXG4iCisiJkxvYWQgRmlsZSIKK21zZ3N0ciAiIgorIiZPS1xuIgorIqXVpaGlpKXrxsm5/igmTCkiCisKKyM6IGZpbGVpby5jOjU5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2MjogQ291bGQgbm90IHByZXBhcmUgZm9yIHJlbG9hZGluZyBcIiVzXCIiCittc2dzdHIgIkU0NjI6IFwiJXNcIiCk8qXqpe2hvKXJpLmk673gyPekrKTHpK2k3qS7pPOkx6S3pL8iCisKKyM6IGZpbGVpby5jOjU5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IFwiJXNcIiCkz6Xqpe2hvKXJpMekraTepLuk86THpLekvyIKKworIzogZmlsZWlvLmM6NjU4MAorbXNnaWQgIi0tRGVsZXRlZC0tIgorbXNnc3RyICItLbrvvfy60S0tIgorCisjLiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdAorIzogZmlsZWlvLmM6Njc0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY3OiBObyBzdWNoIGdyb3VwOiBcIiVzXCIiCittc2dzdHIgIkUzNjc6IKS9pM6lsKXrobyl16TPpKKk6qTepLuk8zogXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyICo6ICVzIgorbXNnc3RyICJFMjE1OiAqIKTOuOWky8nUwLWkysq4u/qkrKSipOqk3qS3pL86ICVzIgorCisjOiBmaWxlaW8uYzo2ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiCkvaTOpOikpqTKpaSl2aXzpcikz6SipOqk3qS7pPM6ICVzIgorCisjOiBmaWxlaW8uYzo2ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZ3JvdXAgb3IgZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiCkvaTOpOikpqTKpbCl66G8pdek4qS3pK+kz6Wkpdml86XIpM+koqTqpN6ku6TzOiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo3MDM4Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKKworIzogZmlsZWlvLmM6NzMwOQorbXNnaWQgIkUyMTc6IENhbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZXZlbnRzIgorbXNnc3RyICJFMjE3OiDBtKTGpM6lpKXZpfOlyKTLwtCkt6TGpM5hdXRvY29tbWFuZKTPvMK51KTHpK2k3qS7pPMiCisKKyM6IGZpbGVpby5jOjczMzIKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgIrO6xfakuaTrYXV0b2NvbW1hbmSkz8K4ut+kt6TepLuk8yIKKworIzogZmlsZWlvLmM6NzY1MworbXNnaWQgIkUyMTg6IGF1dG9jb21tYW5kIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkUyMTg6IGF1dG9jb21tYW5kpM7G/qTsu9KkrL+8pLmkrqTepLkiCisKKyM6IGZpbGVpby5jOjc5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgQXV0byBjb21tYW5kcyBmb3IgXCIlc1wiIgorbXNnc3RyICIlcyBBdXRvIGNvbW1hbmRzIGZvciBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjc5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nICVzIgorbXNnc3RyICIlcyCk8rzCudSkt6TGpKSk3qS5IgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGZpbGVpby5jOjgwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXV0b2NvbW1hbmQgJXMiCittc2dzdHIgImF1dG9jb21tYW5kICVzIgorCisjOiBmaWxlaW8uYzo4NTcxCittc2dpZCAiRTIxOTogTWlzc2luZyB7LiIKK21zZ3N0ciAiRTIxOTogeyCkrKSipOqk3qS7pPMuIgorCisjOiBmaWxlaW8uYzo4NTczCittc2dpZCAiRTIyMDogTWlzc2luZyB9LiIKK21zZ3N0ciAiRTIyMDogfSCkrKSipOqk3qS7pPMuIgorCisjOiBmb2xkLmM6NjgKK21zZ2lkICJFNDkwOiBObyBmb2xkIGZvdW5kIgorbXNnc3RyICJFNDkwOiDA3r72pN+krKSipOqk3qS7pPMiCisKKyM6IGZvbGQuYzo1OTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDoguL2636TOICdmb2xkbWV0aG9kJyCkx6TPwN6+9qTfpPK67sCupMekraTepLuk8yIKKworIzogZm9sZC5jOjU5NQorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiC4vbrfpM4gJ2ZvbGRtZXRob2QnIKTHpM/A3r72pN+k8rrvvfykx6StpN6ku6TzIgorCisjOiBnZXRjaGFyLmM6MjQ4Cittc2dpZCAiRTIyMjogQWRkIHRvIHJlYWQgYnVmZmVyIgorbXNnc3RyICJFMjIyOiDGybn+pdClw6XVpaGk2MTJssMiCisKKyM6IGdldGNoYXIuYzoyMTk4Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6ILrGtaLFqqXepcOl1KXzpbAiCisKKyM6IGdldGNoYXIuYzozMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjQ6IGdsb2JhbCBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI0OiAlcyCkyKSkpKalsKXtobyl0KXrw7u9zMb+zs+kz7T7pMvCuLrfpLek3qS5IgorCisjOiBnZXRjaGFyLmM6MzA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI1OiBnbG9iYWwgbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjU6ICVzIKTIpKSkpqWwpe2hvKXQpeul3qXDpdSl86WwpM+0+6TLwri636S3pN6kuSIKKworIzogZ2V0Y2hhci5jOjMyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogJXMgpMikpKSmw7u9zMb+zs+kz7T7pMvCuLrfpLek3qS5IgorCisjOiBnZXRjaGFyLmM6MzIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI3OiBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNzogJXMgpMikpKSmpd6lw6XUpfOlsKTPtPuky8K4ut+kt6TepLkiCisKKyM6IGdldGNoYXIuYzozMjc5Cittc2dpZCAiTm8gYWJicmV2aWF0aW9uIGZvdW5kIgorbXNnc3RyICLDu73Mxv7Oz6TPpN+kxKSrpOqk3qS7pPOkx6S3pL8iCisKKyM6IGdldGNoYXIuYzozMjgxCittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAipd6lw6XUpfOlsKTPpN+kxKSrpOqk3qS7pPOkx6S3pL8iCisKKyM6IGdldGNoYXIuYzo0MTczCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiDJ1MC1pMql4qG8pckiCisKKyM6IGd1aS5jOjIyMAorbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiBHVUmk8rOru8+kx6StpN6ku6TzIgorCisjOiBndWkuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzMDogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyMzA6IFwiJXNcIqSrpOnGybn+pOCks6TIpKykx6StpN6ku6TzIgorCisjOiBndWkuYzo0NzIKK21zZ2lkICJFNjY1OiBDYW5ub3Qgc3RhcnQgR1VJLCBubyB2YWxpZCBmb250IGZvdW5kIgorbXNnc3RyICJFNjY1OiDNrbj6pMql1aWppfOlyKSsuKukxKSrpOmkyqSkpM6kxywgR1VJpPKzq7vPpMekraTepLuk8yIKKworIzogZ3VpLmM6NDc3Cittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiAnZ3VpZm9udHdpZGUnIKSszLW4+qTHpLkiCisKKyM6IGd1aS5jOjU0NworbXNnaWQgIkU1OTk6IFZhbHVlIG9mICdpbWFjdGl2YXRla2V5JyBpcyBpbnZhbGlkIgorbXNnc3RyICJFNTk5OiAnaW1hY3RpdmF0ZWtleScgpMvA38TqpLWk7KS/w82krMy1uPqkx6S5IgorCisjOiBndWkuYzo0MDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTQ6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciAlcyIKK21zZ3N0ciAiRTI1NDogJXMgpM6/p6Tys+Sk6sX2pMak6aTspN6ku6TzIgorCisjOiBndWlfYXRfZnMuYzozMDAKK21zZ2lkICI8Y2Fubm90IG9wZW4+ICIKK21zZ3N0ciAiPLOrpLGk3qS7pPM+IgorCisjOiBndWlfYXRfZnMuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAiRTYxNjogdmltX1NlbEZpbGU6IKXVpaml86XIICVzIKTyvOjGwKTHpK2k3qS7pPMiCisKKyM6IGd1aV9hdF9mcy5jOjI3ODEKK21zZ2lkICJFNjE0OiB2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJFNjE0OiB2aW1fU2VsRmlsZToguL2636TOpcelo6Xspa+lyKXqpMvM4aTspN6ku6TzIgorCisjOiBndWlfYXRfZnMuYzoyODAxCittc2dpZCAiUGF0aG5hbWU6IgorbXNnc3RyICKl0aW5zL46IgorCisjOiBndWlfYXRfZnMuYzoyODA3Cittc2dpZCAiRTYxNTogdmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNTogdmltX1NlbEZpbGU6ILi9ut+kzqXHpaOl7KWvpcil6qTyvOjGwKTHpK2k3qS7pPMiCisKKyM6IGd1aV9hdF9mcy5jOjI4MTUgZ3VpX21vdGlmLmM6MTYyMworbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfZ3RrLmM6MjczMSBndWlfbW90aWYuYzoxNjE4IGd1aV9tb3RpZi5jOjI4NDkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIqWtpeOl86W7pesiCisKKyM6IGd1aV9hdF9zYi5jOjQ4NgorbXNnaWQgIlNjcm9sbGJhciBXaWRnZXQ6IENvdWxkIG5vdCBnZXQgZ2VvbWV0cnkgb2YgdGh1bWIgcGl4bWFwLiIKK21zZ3N0ciAipbmlr6Xtobyl66XQobw6ILLowfyk8rzoxsCkx6StpN6ku6TzpMekt6S/LiIKKworIzogZ3VpX2F0aGVuYS5jOjIwNDcgZ3VpX21vdGlmLmM6MTg3MQorbXNnaWQgIlZpbSBkaWFsb2ciCittc2dzdHIgIlZpbSClwKWkpaKl7aWwIgorCisjOiBndWlfYmV2YWwuYzoxMDEgZ3VpX3czMi5jOjM4MzAKK21zZ2lkICJFMjMyOiBDYW5ub3QgY3JlYXRlIEJhbGxvb25FdmFsIHdpdGggYm90aCBtZXNzYWdlIGFuZCBjYWxsYmFjayIKK21zZ3N0ciAiRTIzMjogpeGlw6W7obyluKTIpbOhvKXrpdClw6WvpM6koqTrIEJhbGxvb25FdmFsIKTyuu7ArqTHpK2k3qS7pPMiCisKKyM6IGd1aV9ndGsuYzoxNjA3Cittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiVmltIKXApaSloqXtpbAuLi4iCisKKyM6IGd1aV9ndGsuYzoyMDYwIG1lc3NhZ2UuYzoyOTkzCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisipM+kpCgmWSlcbiIKKyKkpKSkpKgoJk4pXG4iCisipa2l46Xzpbul6ygmQykiCisKKyM6IGd1aV9ndGsuYzoyMjY4Cittc2dpZCAiSW5wdXQgX01ldGhvZHMiCittc2dzdHIgIqWkpfOl16XDpcil4aW9pcOlySIKKworIzogZ3VpX2d0ay5jOjI1MzQgZ3VpX21vdGlmLmM6Mjc2OAorbXNnaWQgIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIKK21zZ3N0ciAiVklNIC0guKG696TIw9a0uS4uLiIKKworIzogZ3VpX2d0ay5jOjI1NDIgZ3VpX21vdGlmLmM6Mjc3MAorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiVklNIC0guKG69y4uLiIKKworIzogZ3VpX2d0ay5jOjI1NzQgZ3VpX21vdGlmLmM6Mjg4OAorbXNnaWQgIkZpbmQgd2hhdDoiCittc2dzdHIgIrihuvfKuLv6zvM6IgorCisjOiBndWlfZ3RrLmM6MjU5MiBndWlfbW90aWYuYzoyOTIwCittc2dpZCAiUmVwbGFjZSB3aXRoOiIKK21zZ3N0ciAiw9a0ucq4u/rO8zoiCisKKyMuIHdob2xlIHdvcmQgb25seSBidXR0b24KKyM6IGd1aV9ndGsuYzoyNjI0IGd1aV9tb3RpZi5jOjMwMzYKK21zZ2lkICJNYXRjaCB3aG9sZSB3b3JkIG9ubHkiCittc2dzdHIgIsC1s86ky7O6xfakuaTrpOKkzqTApLEiCisKKyMuIG1hdGNoIGNhc2UgYnV0dG9uCisjOiBndWlfZ3RrLmM6MjYzNSBndWlfbW90aWYuYzozMDQ4Cittc2dpZCAiTWF0Y2ggY2FzZSIKK21zZ3N0ciAiwufKuLv6L76uyri7+qTytujKzKS5pOsiCisKKyM6IGd1aV9ndGsuYzoyNjQ1IGd1aV9tb3RpZi5jOjI5OTAKK21zZ2lkICJEaXJlY3Rpb24iCittc2dzdHIgIsr9uP4iCisKKyMuICdVcCcgYW5kICdEb3duJyBidXR0b25zCisjOiBndWlfZ3RrLmM6MjY1NyBndWlfbW90aWYuYzozMDAyCittc2dpZCAiVXAiCittc2dzdHIgIr7lIgorCisjOiBndWlfZ3RrLmM6MjY2MSBndWlfbW90aWYuYzozMDEwCittc2dpZCAiRG93biIKK21zZ3N0ciAisrwiCisKKyM6IGd1aV9ndGsuYzoyNjgzIGd1aV9ndGsuYzoyNjg1IGd1aV9tb3RpZi5jOjI3OTIKK21zZ2lkICJGaW5kIE5leHQiCittc2dzdHIgIryhpPK4obr3IgorCisjOiBndWlfZ3RrLmM6MjcwMiBndWlfZ3RrLmM6MjcwNCBndWlfbW90aWYuYzoyODA5Cittc2dpZCAiUmVwbGFjZSIKK21zZ3N0ciAiw9a0uSIKKworIzogZ3VpX2d0ay5jOjI3MTUgZ3VpX2d0ay5jOjI3MTcgZ3VpX21vdGlmLmM6MjgyMgorbXNnaWQgIlJlcGxhY2UgQWxsIgorbXNnc3RyICLBtKTGw9a0uSIKKworIzogZ3VpX2d0a194MTEuYzoyMzI3Cittc2dpZCAiVmltOiBSZWNlaXZlZCBcImRpZVwiIHJlcXVlc3QgZnJvbSBzZXNzaW9uIG1hbmFnZXJcbiIKK21zZ3N0ciAiVmltOiClu6XDpbel56Xzpd6lzaG8pbil46SrpOkgXCJkaWVcIiDN17XhpPK89aSxvOik6qTepLekv1xuIgorCisjOiBndWlfZ3RrX3gxMS5jOjM1MTkKK21zZ2lkICJWaW06IE1haW4gd2luZG93IHVuZXhwZWN0ZWRseSBkZXN0cm95ZWRcbiIKK21zZ3N0ciAiVmltOiCl4aWkpfOlpqWjpfOlyaWmpKzJ1LDVpMvHy7L1pLWk7KTepLekv1xuIgorCisjOiBndWlfZ3RrX3gxMS5jOjQxMzgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAipdWlqaXzpcjBqsLyIgorCisjOiBndWlfZ3RrX3gxMS5jOjYwMzUgdWkuYzoyMTE3Cittc2dpZCAiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIKK21zZ3N0ciAitvWkzsGqwvLOzrDopM6kq6TvpOqky0NVVF9CVUZGRVIwpKy7yM3RpLWk7KTepLekvyIKKworIzogZ3VpX21vdGlmLmM6MTYxNyBndWlfbW90aWYuYzoxNjIwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICKl1aWjpeulvyIKKworIzogZ3VpX21vdGlmLmM6MTYxOQorbXNnaWQgIkRpcmVjdG9yaWVzIgorbXNnc3RyICKlx6Wjpeylr6XIpeoiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjEKK21zZ2lkICJIZWxwIgorbXNnc3RyICKl2KXrpdciCisKKyM6IGd1aV9tb3RpZi5jOjE2MjIKK21zZ2lkICJGaWxlcyIKK21zZ3N0ciAipdWloaWkpesiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjQKK21zZ2lkICJTZWxlY3Rpb24iCittc2dzdHIgIsGqwvIiCisKKyM6IGd1aV9tb3RpZi5jOjI4MzUKK21zZ2lkICJVbmRvIgorbXNnc3RyICKloqXzpcmlpSIKKworIzogZ3VpX3Jpc2Nvcy5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjEwOiBDYW4ndCBsb2FkIFphcCBmb250ICclcyciCittc2dzdHIgIkU2MTA6IFphcKXVpaml86XIICclcycgpPLGybn+pOGk3qS7pPMiCisKKyM6IGd1aV9yaXNjb3MuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTE6IENhbid0IHVzZSBmb250ICVzIgorbXNnc3RyICJFNjExOiCl1aWppfOlyCAlcyCk8rvIzdGkx6StpN6ku6TzIgorCisjOiBndWlfcmlzY29zLmM6MzI3MAorbXNnaWQgIiIKKyJcbiIKKyJTZW5kaW5nIG1lc3NhZ2UgdG8gdGVybWluYXRlIGNoaWxkIHByb2Nlc3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyK70qXXpe2lu6W5pNjE5LvfpeGlw6W7obyluKTywfe/rsPmpMekuS5cbiIKKworIzogZ3VpX3czMi5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiRTI0MzogsPq/9KTPpbWl3aG8pciktaTspN6ku6TzOiBcIi0lc1wiOyBPTEXIx6Tyu8jN0aS3pMakr6TApLWkpC4iCisKKyM6IGd1aV93NDguYzoyMDkwCittc2dpZCAiRmluZCBzdHJpbmcgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAiuKG698q4u/rO8yAoJ1xcJyCk8rihuvekuaTrpMukzyAnXFxcXCcpIgorCisjOiBndWlfdzQ4LmM6MjExNQorbXNnaWQgIkZpbmQgJiBSZXBsYWNlICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIrihuvehpsPWtLkgKCdcXCcgpPK4obr3pLmk66TLpM8gJ1xcXFwnKSIKKworIzogZ3VpX3gxMS5jOjE1MzcKK21zZ2lkICJWaW0gRTQ1ODogQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0IgorbXNnc3RyICJWaW0gRTQ1ODogv6e72MTqpKzAtaS3pK+kyqSkpM6kx6WopfOlyKXqpPKz5KTqxfakxqTppOyk3qS7pPMiCisKKyM6IGd1aV94MTEuYzoyMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICJFMjUwOiCwyrK8pM7KuLv6pbulw6XIpM6l1aWppfOlyKSspKKk6qTepLuk8yAlczoiCisKKyM6IGd1aV94MTEuYzoyMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTI6IEZvbnRzZXQgbmFtZTogJXMiCittc2dzdHIgIkUyNTI6IKXVpaml86XIpbulw6XIzL46ICVzIgorCisjOiBndWlfeDExLmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICKl1aWppfOlyCAnJXMnIKTPuMfE6sn9pMekz6SipOqk3qS7pPMiCisKKyM6IGd1aV94MTEuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTM6IEZvbnRzZXQgbmFtZTogJXNcbiIKK21zZ3N0ciAiRTI1MzogpdWlqaXzpcilu6XDpcjMvjogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDA6ICVzXG4iCittc2dzdHIgIqXVpaml86XIMDogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDE6ICVzXG4iCittc2dzdHIgIqXVpaml86XIMTogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCVkIHdpZHRoIGlzIG5vdCB0d2ljZSB0aGF0IG9mIGZvbnQwXG4iCittc2dzdHIgIqXVpaml86XIJWQgpM7J/aSspdWlqaXzpcgwpM7H3KTHpM+koqTqpN6ku6TzXG4iCisKKyM6IGd1aV94MTEuYzoyMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwIHdpZHRoOiAlbGRcbiIKK21zZ3N0ciAipdWlqaXzpcgwpM7J/TogJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyKl1aWppfOlyDGkzsn9OiAlbGRcbiIKKyJcbiIKKworIzogaGFuZ3VsaW4uYzo2MTAKK21zZ2lkICJFMjU2OiBIYW5ndWwgYXV0b21hdGEgRVJST1IiCittc2dzdHIgIkUyNTY6IKXPpfOlsKXrpaqhvKXIpd6lyKXzpail6aG8IgorCisjOiBpZl9jc2NvcGUuYzo3NworbXNnaWQgIkFkZCBhIG5ldyBkYXRhYmFzZSIKK21zZ3N0ciAiv7elx6G8pb+l2aG8pbmk8sTJssMiCisKKyM6IGlmX2NzY29wZS5jOjc5Cittc2dpZCAiUXVlcnkgZm9yIGEgcGF0dGVybiIKK21zZ3N0ciAipdGlv6G8pfOkzqWvpail6qG8pPLEybLDIgorCisjOiBpZl9jc2NvcGUuYzo4MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICKks6TOpeGlw6W7obyluKTyyb28qKS5pOsiCisKKyM6IGlmX2NzY29wZS5jOjgzCittc2dpZCAiS2lsbCBhIGNvbm5lY3Rpb24iCittc2dzdHIgIsDcwrOk8r2qzrukuaTrIgorCisjOiBpZl9jc2NvcGUuYzo4NQorbXNnaWQgIlJlaW5pdCBhbGwgY29ubmVjdGlvbnMiCittc2dzdHIgIsG0pMakzsDcwrOk8rrGvem0/LK9pLmk6yIKKworIzogaWZfY3Njb3BlLmM6ODcKK21zZ2lkICJTaG93IGNvbm5lY3Rpb25zIgorbXNnc3RyICLA3MKzpPLJvbyopLmk6yIKKworIzogaWZfY3Njb3BlLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2MDogVXNhZ2U6IGNzW2NvcGVdICVzIgorbXNnc3RyICJFNTYwOiC7yM3Ryv3LoTogY3NbY29wZV0gJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNAorbXNnaWQgIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIKK21zZ3N0ciAipLOkzmNzY29wZaWzpd6l86XJpM/KrLPkpaalo6XzpcmlpqTHpM+ltaXdobylyKS1pOyk3qS7pPMuXG4iCisKKyM6IGlmX2NzY29wZS5jOjE3NQorbXNnaWQgIkU1NjI6IFVzYWdlOiBjc3RhZyA8aWRlbnQ+IgorbXNnc3RyICJFNTYyOiC7yM3Ry6E6IGNzdGFnIDxpZGVudD4iCisKKyM6IGlmX2NzY29wZS5jOjIzMQorbXNnaWQgIkUyNTc6IGNzdGFnOiB0YWcgbm90IGZvdW5kIgorbXNnc3RyICJFMjU3OiBjc3RhZzogpb+lsKSspN+kxKSrpOqk3qS7pPMiCisKKyM6IGlmX2NzY29wZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTYzOiBzdGF0KCVzKSBlcnJvcjogJWQiCittc2dzdHIgIkU1NjM6IHN0YXQoJXMpIKWopemhvDogJWQiCisKKyM6IGlmX2NzY29wZS5jOjQxOQorbXNnaWQgIkU1NjM6IHN0YXQgZXJyb3IiCittc2dzdHIgIkU1NjM6IHN0YXQgpail6aG8IgorCisjOiBpZl9jc2NvcGUuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2NDogJXMgaXMgbm90IGEgZGlyZWN0b3J5IG9yIGEgdmFsaWQgY3Njb3BlIGRhdGFiYXNlIgorbXNnc3RyICJFNTY0OiAlcyCkz6XHpaOl7KWvpcil6rXapNPNrbj6pMpjc2NvcGWkzqXHobylv6XZobyluaTHpM+koqTqpN6ku6TzIgorCisjOiBpZl9jc2NvcGUuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICJjc2NvcGWlx6G8pb+l2aG8pbkgJXMgpPLEybLDIgorCisjOiBpZl9jc2NvcGUuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlbGQiCittc2dzdHIgIkUyNjI6IGNzY29wZaTOwNzCsyAlbGQgpPLGybn+pN/D5qTOpail6aG8pMekuSIKKworIzogaWZfY3Njb3BlLmM6Njk0Cittc2dpZCAiRTU2MTogdW5rbm93biBjc2NvcGUgc2VhcmNoIHR5cGUiCittc2dzdHIgIkU1NjE6IMykw86kzmNzY29wZbihuve3v6THpLkiCisKKyM6IGlmX2NzY29wZS5jOjczNgorbXNnaWQgIkU1NjY6IENvdWxkIG5vdCBjcmVhdGUgY3Njb3BlIHBpcGVzIgorbXNnc3RyICJFNTY2OiBjc2NvcGWl0aWkpdek8rruwK6kx6StpN6ku6TzpMekt6S/IgorCisjOiBpZl9jc2NvcGUuYzo3NTMKK21zZ2lkICJFNjIyOiBDb3VsZCBub3QgZm9yayBmb3IgY3Njb3BlIgorbXNnc3RyICJFNjIyOiBjc2NvcGWkzrWvxrC94Mj3KGZvcmsppMu8usfUpLek3qS3pL8iCisKKyM6IGlmX2NzY29wZS5jOjg0NyBpZl9jc2NvcGUuYzo4OTcKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb24gpM68wrnUpMu8usfUpLek3qS3pL8iCisKKyM6IGlmX2NzY29wZS5jOjg5OAorbXNnaWQgIkU2MjM6IENvdWxkIG5vdCBzcGF3biBjc2NvcGUgcHJvY2VzcyIKK21zZ3N0ciAiRTYyMzogY3Njb3Blpdel7aW7pbmk8rWvxrCkx6StpN6ku6TzpMekt6S/IgorCisjOiBpZl9jc2NvcGUuYzo5MTEKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciB0b19mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiB0b19mcCCkziBmZG9wZW4gpMu8usfUpLek3qS3pL8iCisKKyM6IGlmX2NzY29wZS5jOjkxMworbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIGZyX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZyX2ZwIKTOIGZkb3BlbiCky7y6x9Skt6TepLekvyIKKworIzogaWZfY3Njb3BlLmM6OTUxCittc2dpZCAiRTU2Nzogbm8gY3Njb3BlIGNvbm5lY3Rpb25zIgorbXNnc3RyICJFNTY3OiBjc2NvcGXA3MKzpMu8usfUpLek3qS3pL8iCisKKyM6IGlmX2NzY29wZS5jOjEwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiBjc2NvcGWlr6WopeqhvCAlcyBvZiAlcyCky7O6xfakrKSipOqk3qS7pPOkx6S3pL8iCisKKyM6IGlmX2NzY29wZS5jOjEwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OTogaW52YWxpZCBjc2NvcGVxdWlja2ZpeCBmbGFnICVjIGZvciAlYyIKK21zZ3N0ciAiRTQ2OTogzLW4+qTKIGNzY29wZXF1aWNrZml4IKXVpemlsCAlYyCkziAlYyCkx6S5IgorCisjOiBpZl9jc2NvcGUuYzoxMTUyCittc2dpZCAiY3Njb3BlIGNvbW1hbmRzOlxuIgorbXNnc3RyICJjc2NvcGWls6XepfOlyTpcbiIKKworIzogaWZfY3Njb3BlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLTVzOiAlLTMwcyAoVXNhZ2U6ICVzKSIKK21zZ3N0ciAiJS01czogJS0zMHMgKLvIzdHLoTogJXMpIgorCisjOiBpZl9jc2NvcGUuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjU6IGNhbm5vdCBvcGVuIGNzY29wZSBkYXRhYmFzZTogJXMiCittc2dzdHIgIkU2MjU6IGNzY29wZaXHobylv6XZobyluTogJXMgpPKzq6SvpLOkyKSspMekraTepLuk8yIKKworIzogaWZfY3Njb3BlLmM6MTI3MQorbXNnaWQgIkU2MjY6IGNhbm5vdCBnZXQgY3Njb3BlIGRhdGFiYXNlIGluZm9ybWF0aW9uIgorbXNnc3RyICJFNjI2OiBjc2NvcGWlx6G8pb+l2aG8pbmkzr7wyvOk8rzoxsCkx6StpN6ku6TzIgorCisjOiBpZl9jc2NvcGUuYzoxMjk2Cittc2dpZCAiRTU2ODogZHVwbGljYXRlIGNzY29wZSBkYXRhYmFzZSBub3QgYWRkZWQiCittc2dzdHIgIkU1Njg6IL3FyqOkuaTrY3Njb3BlpcehvKW/pdmhvKW5pM/EybLDpLWk7KTepLuk86THpLekvyIKKworIzogaWZfY3Njb3BlLmM6MTMwNworbXNnaWQgIkU1Njk6IG1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICJFNTY5OiBjc2NvcGXA3MKzpM66x8Lnv/Sky8OjpLek3qS3pL8iCisKKyM6IGlmX2NzY29wZS5jOjE0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiBjc2NvcGXA3MKzICVzIKSspN+kxKSrpOqk3qS7pPOkx6S3pL8iCisKKyM6IGlmX2NzY29wZS5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gJXMgY2xvc2VkIgorbXNnc3RyICJjc2NvcGXA3MKzICVzIKSsysSkuKTppOyk3qS3pL8iCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTU5OAorbXNnaWQgIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJFNTcwOiBjc19tYW5hZ2VfbWF0Y2hlcyCkx8PXzL/FqqTKpail6aG8pMekuSIKKworIzogaWZfY3Njb3BlLmM6MTg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDc2NvcGUgdGFnOiAlcyIKK21zZ3N0ciAiQ3Njb3BlIKW/pbA6ICVzIgorCisjOiBpZl9jc2NvcGUuYzoxODcwCittc2dpZCAiIgorIlxuIgorIiAgICMgICBsaW5lIgorbXNnc3RyICIiCisiXG4iCisiICAgIyAgILnUyNa55iIKKworIzogaWZfY3Njb3BlLmM6MTg3MgorbXNnaWQgImZpbGVuYW1lIC8gY29udGV4dCAvIGxpbmVcbiIKK21zZ3N0ciAipdWloaWkpevMviAvIMq4zK4gLyC51FxuIgorCisjOiBpZl9jc2NvcGUuYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDk6IENzY29wZSBlcnJvcjogJXMiCittc2dzdHIgIkU2MDk6IGNzY29wZaWopemhvDogJXMiCisKKyM6IGlmX2NzY29wZS5jOjIxNzYKK21zZ2lkICJBbGwgY3Njb3BlIGRhdGFiYXNlcyByZXNldCIKK21zZ3N0ciAiwbSkxqTOY3Njb3BlpcehvKW/pdmhvKW5pPKl6qW7pcOlyKS3pN6kuSIKKworIzogaWZfY3Njb3BlLmM6MjI0NAorbXNnaWQgIm5vIGNzY29wZSBjb25uZWN0aW9uc1xuIgorbXNnc3RyICJjc2NvcGXA3MKzpKykoqTqpN6ku6TzXG4iCisKKyM6IGlmX2NzY29wZS5jOjIyNDgKK21zZ2lkICIgIyBwaWQgICAgZGF0YWJhc2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iCittc2dzdHIgIiAjIHBpZCAgICClx6G8pb+l2aG8pbnMviAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kIKXRpblcbiIKKworIzogaWZfcHl0aG9uLmM6NDM2Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjYzOiCks6TOpbOl3qXzpcmkz8y1uPqkx6S5LKS0pOGk86TKpLWkpDogIgorIlB5dGhvbqXppaSl1qXppeqk8qXtobylyaTHpK2k3qS7pPOkx6S3pL8uIgorCisjIEFkZGVkIGF0IDA3LUZlYi0yMDA0LgorIzogaWZfcHl0aG9uLmM6NTAwCittc2dpZCAiRTY1OTogQ2Fubm90IGludm9rZSBQeXRob24gcmVjdXJzaXZlbHkiCittc2dzdHIgIkU2NTk6IFB5dGhvbiCk8rrGtaLFqqTLvMK51KS5pOuks6TIpM+kx6StpN6ku6TzIgorCisjOiBpZl9weXRob24uYzo3MDEKK21zZ2lkICJjYW4ndCBkZWxldGUgT3V0cHV0T2JqZWN0IGF0dHJpYnV0ZXMiCittc2dzdHIgIk91dHB1dE9iamVjdMKwwK2k8r7DpLuk3qS7pPMiCisKKyM6IGlmX3B5dGhvbi5jOjcwOAorbXNnaWQgInNvZnRzcGFjZSBtdXN0IGJlIGFuIGludGVnZXIiCittc2dzdHIgInNvZnRzcGFjZSCkzyBpbnRlZ2VyIKTHpMqksaTspNCkyqTqpN6ku6TzIgorCisjOiBpZl9weXRob24uYzo3MTYKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAizLW4+qTKwrDAraTHpLkiCisKKyM6IGlmX3B5dGhvbi5jOjc1NSBpZl9weXRob24uYzo3NjkKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkgpMukz8q4u/rO86TOpeqluaXIpKzJrM3XpMekuSIKKworIzogaWZfcHl0aG9uLmM6ODk1Cittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjogSS9Ppaql1qW4paelr6XIpM696bT8sr3D5qTLpail6aG8pMekuSIKKworIzogaWZfcHl0aG9uLmM6MTA4MCBpZl90Y2wuYzoxNDAyCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICLMtbj6pMq8sKTHpLkiCisKKyM6IGlmX3B5dGhvbi5jOjEwOTQgaWZfdGNsLmM6MTQwNworbXNnaWQgImV4cHJlc3Npb25zIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAivLCkz6WzpfOl0aWkpeu7/qTLzLW4+qTLpLWk7KTGpKSk3qS5IgorCisjOiBpZl9weXRob24uYzoxMTA3Cittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAivsOktaTspL+l0KXDpdWloaSsu7K+yKS1pOyk3qS3pL8iCisKKyM6IGlmX3B5dGhvbi5jOjExMjIgaWZfcHl0aG9uLmM6MTE2MyBpZl9weXRob24uYzoxMjI3IGlmX3RjbC5jOjEyMTQKK21zZ2lkICJsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UiCittc2dzdHIgIsjPsM+zsKTOudTI1rnmpMekuSIKKworIzogaWZfcHl0aG9uLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICI8YnVmZmVyIG9iamVjdCAoZGVsZXRlZCkgYXQgJThsWD4iCittc2dzdHIgIjyl0KXDpdWloaWqpdaluKWnpa+lyCAovsO17rrRpN8pICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxNDUzIGlmX3RjbC5jOjgzNgorbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICLMtbj6pMql3qG8pa/MvqTHpLkiCisKKyM6IGlmX3B5dGhvbi5jOjE3MzMKK21zZ2lkICJubyBzdWNoIGJ1ZmZlciIKK21zZ3N0ciAipL2kzqTopKakyqXQpcOl1aWhpM+koqTqpN6ku6TzIgorCisjOiBpZl9weXRob24uYzoxODIxCittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIHdpbmRvdyIKK21zZ3N0ciAivsOktaTspL+lpqWjpfOlyaWmpKy7sr7IpLWk7KTepLekvyIKKworIzogaWZfcHl0aG9uLmM6MTg2NgorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAixsm5/sDszdHCsMCtIgorCisjOiBpZl9weXRob24uYzoxODc5Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICKlq6G8pb2l66SspdClw6XVpaGkzrOwpMukoqTqpN6kuSIKKworIzogaWZfcHl0aG9uLmM6MTk1NgorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAoZGVsZXRlZCkgYXQgJS44bFg+IgorbXNnc3RyICI8paalo6XzpcmlpqWqpdaluKWnpa+lyCAovsO17rrRKSAlLjhsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKHVua25vd24pIGF0ICUuOGxYPiIKK21zZ3N0ciAiPKWmpaOl86XJpaalqqXWpbilp6WvpcggKMykw84pICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93ICVkPiIKK21zZ3N0ciAiPKWmpaOl86XJpaYgJWQ+IgorCisjOiBpZl9weXRob24uYzoyMDQ2Cittc2dpZCAibm8gc3VjaCB3aW5kb3ciCittc2dzdHIgIqS9pM6k6KSmpMqlpqWjpfOlyaWmpM+koqTqpN6ku6TzIgorCisjOiBpZl9weXRob24uYzoyMzA3IGlmX3B5dGhvbi5jOjIzNDEgaWZfcHl0aG9uLmM6MjM5NiBpZl9weXRob24uYzoyNDY0CisjOiBpZl9weXRob24uYzoyNTg2IGlmX3B5dGhvbi5jOjI2MzggaWZfdGNsLmM6Njg0IGlmX3RjbC5jOjcyOSBpZl90Y2wuYzo4MDMKKyM6IGlmX3RjbC5jOjg3MyBpZl90Y2wuYzoxOTk5Cittc2dpZCAiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAipaKl86XJpaW+8MrzpKzK3cK4pMekraTepLuk8yIKKworIzogaWZfcHl0aG9uLmM6MjMwOSBpZl9weXRob24uYzoyNDAzIGlmX3B5dGhvbi5jOjI0NzUKK21zZ2lkICJjYW5ub3QgZGVsZXRlIGxpbmUiCittc2dzdHIgIrnUpPK+w6S7pN6ku6TzIgorCisjOiBpZl9weXRob24uYzoyMzQ2IGlmX3B5dGhvbi5jOjI0OTEgaWZfdGNsLmM6NjkwIGlmX3RjbC5jOjIwMjEKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICK51KTyw9a0uaTHpK2k3qS7pPMiCisKKyM6IGlmX3B5dGhvbi5jOjI1MDkgaWZfcHl0aG9uLmM6MjU4OCBpZl9weXRob24uYzoyNjQ2Cittc2dpZCAiY2Fubm90IGluc2VydCBsaW5lIgorbXNnc3RyICK51KTywd7G/qTHpK2k3qS7pPMiCisKKyM6IGlmX3B5dGhvbi5jOjI3NTAKK21zZ2lkICJzdHJpbmcgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgIsq4u/rO86TLpM+y/rnUyri7+qTytN6k4aTppOyk3qS7pPMiCisKKyM6IGlmX3J1YnkuYzo0MjIKK21zZ2lkICIiCisiRTI2NjogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFJ1YnkgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjY6IKSzpM6ls6XepfOlyaTPzLW4+qTHpLkspLSk4aTzpMqktaSkOiAiCisiUnVieaXppaSl1qXppeqk8qXtobylyaTHpK2k3qS7pPOkx6S3pL8uIgorCisjOiBpZl9ydWJ5LmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzM6IHVua25vd24gbG9uZ2ptcCBzdGF0dXMgJWQiCittc2dzdHIgIkUyNzM6IMykw86kzmxvbmdqbXC+9cLWOiAlZCIKKworIzogaWZfc25pZmYuYzo2NworbXNnaWQgIlRvZ2dsZSBpbXBsZW1lbnRhdGlvbi9kZWZpbml0aW9uIgorbXNnc3RyICK8wsH1pMjE6rXBpPLA2qTqwtikqKTrIgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICK8oaTOpa+l6aW5pM608MTspPLJvbyoIgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAipaqhvKXQobyl6aWkpcmktaTspL+l4aXzpdC02L/0pPLJvbyoIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICKl1aWhpaSl66SrpOmy88n8pLmk6yIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAipdel7aW4paelr6XIpKuk6bLzyfykuaTrIgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIsG0pMakzqXXpe2luKWnpa+lyKSrpOmy88n8pLmk6yIKKworIzogaWZfc25pZmYuYzo3NAorbXNnaWQgIlJldHJpZXZlIgorbXNnc3RyICKy88n8IgorCisjOiBpZl9zbmlmZi5jOjc1Cittc2dpZCAiU2hvdyBzb3VyY2Ugb2YiCittc2dzdHIgIryhpM6lvaG8pbmk8sm9vKikuaTrIgorCisjOiBpZl9zbmlmZi5jOjc2Cittc2dpZCAiRmluZCBzeW1ib2wiCittc2dzdHIgIqTfpMSksaS/pbel86XcpesiCisKKyM6IGlmX3NuaWZmLmM6NzcKK21zZ2lkICJCcm93c2UgY2xhc3MiCittc2dzdHIgIqWvpemluaTyu7K+yCIKKworIzogaWZfc25pZmYuYzo3OAorbXNnaWQgIlNob3cgY2xhc3MgaW4gaGllcmFyY2h5IgorbXNnc3RyICKzrMHYpMelr6Xppbmk8sm9vKgiCisKKyM6IGlmX3NuaWZmLmM6NzkKK21zZ2lkICJTaG93IGNsYXNzIGluIHJlc3RyaWN0ZWQgaGllcmFyY2h5IgorbXNnc3RyICK4wsTqpLWk7KS/s6zB2KTHpa+l6aW5pPLJvbyoIgorCisjOiBpZl9zbmlmZi5jOjgwCittc2dpZCAiWHJlZiByZWZlcnMgdG8iCittc2dzdHIgIlhyZWYgpM67sr7IwOgiCisKKyM6IGlmX3NuaWZmLmM6ODEKK21zZ2lkICJYcmVmIHJlZmVycmVkIGJ5IgorbXNnc3RyICJYcmVmIKSsu7K+yKS1pOyk6yIKKworIzogaWZfc25pZmYuYzo4MgorbXNnaWQgIlhyZWYgaGFzIGEiCittc2dzdHIgIlhyZWYgpKy8oaTOpOKkzqTypOKkw6TGpKSk3qS5IgorCisjOiBpZl9zbmlmZi5jOjgzCittc2dpZCAiWHJlZiB1c2VkIGJ5IgorbXNnc3RyICJYcmVmIKSsu8jN0aS1pOyk6yIKKworIzogaWZfc25pZmYuYzo4NAorbXNnaWQgIlNob3cgZG9jdSBvZiIKK21zZ3N0ciAivKGkzsq4vs+k8sm9vKgiCisKKyM6IGlmX3NuaWZmLmM6ODUKK21zZ2lkICJHZW5lcmF0ZSBkb2N1IGZvciIKK21zZ3N0ciAivKGkzsq4vs+k8sC4wK4iCisKKyM6IGlmX3NuaWZmLmM6OTcKK21zZ2lkICIiCisiQ2Fubm90IGNvbm5lY3QgdG8gU05pRkYrLiBDaGVjayBlbnZpcm9ubWVudCAoc25pZmZlbWFjcyBtdXN0IGJlIGZvdW5kIGluICIKKyIkUEFUSCkuXG4iCittc2dzdHIgIiIKKyJTTmlGRiuky8DcwrOkx6StpN6ku6TzLiC0xLatpPKlwaWnpcOlr6S3pMakr6TApLWkpChzbmlmZmVtYWNzIKSsICRQQVRIICIKKyKky6TKpLGk7KTQpMqk6qTepLuk8ykuXG4iCisKKyM6IGlmX3NuaWZmLmM6NDI1Cittc2dpZCAiRTI3NDogU25pZmY6IEVycm9yIGR1cmluZyByZWFkLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIkUyNzQ6IFNuaWZmOiDGybn+w+aky6WopemhvKSsyK/AuKS3pN6kt6S/LiDA2sPHpLek3qS3pL8iCisKKyM6IGlmX3NuaWZmLmM6NTUzCittc2dpZCAiU05pRkYrIGlzIGN1cnJlbnRseSAiCittc2dzdHIgIri9ut9TTmlGRisgpM6+9cLWpM+h1iIKKworIzogaWZfc25pZmYuYzo1NTUKK21zZ2lkICJub3QgIgorbXNnc3RyICLMpCIKKworIzogaWZfc25pZmYuYzo1NTYKK21zZ2lkICJjb25uZWN0ZWQiCittc2dzdHIgIsDcwrOh16THpLkiCisKKyM6IGlmX3NuaWZmLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzU6IFVua25vd24gU05pRkYrIHJlcXVlc3Q6ICVzIgorbXNnc3RyICJFMjc1OiDMpMPOpM4gU05pRkYrIKXqpa+lqKW5pcikx6S5OiAlcyIKKworIzogaWZfc25pZmYuYzo2MDUKK21zZ2lkICJFMjc2OiBFcnJvciBjb25uZWN0aW5nIHRvIFNOaUZGKyIKK21zZ3N0ciAiRTI3NjogU05pRkYrIKTYpM7A3MKzw+akzqWopemhvKTHpLkiCisKKyM6IGlmX3NuaWZmLmM6MTAwOQorbXNnaWQgIkUyNzg6IFNOaUZGKyBub3QgY29ubmVjdGVkIgorbXNnc3RyICJFMjc4OiBTTmlGRisgpMvA3MKzpLWk7KTGpKSk3qS7pPMiCisKKyM6IGlmX3NuaWZmLmM6MTAxOAorbXNnaWQgIkUyNzk6IE5vdCBhIFNOaUZGKyBidWZmZXIiCittc2dzdHIgIkUyNzk6IFNOaUZGKyCl0KXDpdWloaSspKKk6qTepLuk8yIKKworIzogaWZfc25pZmYuYzoxMDgzCittc2dpZCAiU25pZmY6IEVycm9yIGR1cmluZyB3cml0ZS4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJTbmlmZjogvfG5/qTfw+aky6WopemhvKSsyK/AuKS3pL+kzqTHwNrDx6S3pN6kt6S/IgorCisjOiBpZl90Y2wuYzo0MTgKK21zZ2lkICJpbnZhbGlkIGJ1ZmZlciBudW1iZXIiCittc2dzdHIgIsy1uPqkyqXQpcOl1aWhyNa55qTHpLkiCisKKyM6IGlmX3RjbC5jOjQ2NCBpZl90Y2wuYzo5MzEgaWZfdGNsLmM6MTExMAorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIqTepMC8wsH1pLWk7KTGpKSk3qS7pPMiCisKKyM6IGlmX3RjbC5jOjUwMQorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICLMpMPOpM6lqqXXpbel56XzpMekuSIKKworIy4gPz8/CisjOiBpZl90Y2wuYzo3NzQKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgIrnUpPLA38TqpMekraTepLuk8yIKKworIzogaWZfdGNsLmM6ODQ1Cittc2dpZCAibWFyayBub3Qgc2V0IgorbXNnc3RyICKl3qG8pa+kz8DfxOqktaTspMakpKTepLuk8yIKKworIzogaWZfdGNsLmM6ODUxIGlmX3RjbC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicm93ICVkIGNvbHVtbiAlZCIKK21zZ3N0ciAiudQgJWQgzvMgJWQiCisKKyM6IGlmX3RjbC5jOjg4MQorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgIrnUpM7B3sb+L8TJssOk8qTHpK2k3qS7pPMiCisKKyM6IGlmX3RjbC5jOjEyNjgKK21zZ2lkICJ1bmtub3duIGZsYWc6ICIKK21zZ3N0ciAizKTDzqTOpdWl6aWwOiIKKworIzogaWZfdGNsLmM6MTMzOAorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICLMpMPOpM4gdmltT3B0aW9uIKTHpLkiCisKKyM6IGlmX3RjbC5jOjE0MjMKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgIqWtobyl3KG8pcmz5Ln+pN8iCisKKyM6IGlmX3RjbC5jOjE0MjgKK21zZ2lkICJ2aW0gZXJyb3IiCittc2dzdHIgInZpbSClqKXpobwiCisKKyM6IGlmX3RjbC5jOjE0NzEKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIiIKKyKl0KXDpdWloS+lpqWjpfOlyaWmuu7ArqWzpd6l86XJpPK67sCupMekraTepLuk8zogIgorIqWqpdaluKWnpa+lyKSsvsO17qS1pOykxqSkpN6kt6S/IgorCisjOiBpZl90Y2wuYzoxNTQ1Cittc2dpZCAiIgorImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IGlzIGFscmVhZHkgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAiIgorIqWzobyl66XQpcOlr6Wzpd6l86XJpPLF0M+/pMekraTepLuk8zogpdClw6XVpaEvpaalo6XzpcmlpqSstPuky77Dte6ktaTspN6kt6S/IgorCisjLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIzogaWZfdGNsLmM6MTU2MgorbXNnaWQgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgY29ycnVwdCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byAiCisidmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MDogVENMIMPXzL/FqqWopemhvDogcmVmbGlzdCCx+MD3IT8gdmltLWRldkB2aW0ub3JnIKTLyvO58KS3pMakr6TApLWkpCIKKworIzogaWZfdGNsLmM6MTU2MworbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIiIKKyKls6G8peul0KXDpa+ls6XepfOlyaTyxdDPv6THpK2k3qS7pPM6ICIKKyKl0KXDpdWloS+lpqWjpfOlyaWmpM67sr7IpKyk36TEpKuk6qTepLuk8yIKKworIzogaWZfdGNsLmM6MTcyNAorbXNnaWQgIiIKKyJFNTcxOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgVGNsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFNTcxOiCks6TOpbOl3qXzpcmkz8y1uPqkx6S5LKS0pOGk86TKpLWkpDogIgorIlRjbKXppaSl1qXppeqk8qXtobylyaTHpK2k3qS7pPOkx6S3pL8uIgorCisjOiBpZl90Y2wuYzoxODg2Cittc2dpZCAiIgorIkUyODE6IFRDTCBFUlJPUjogZXhpdCBjb2RlIGlzIG5vdCBpbnQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MTogVENMIKWopemhvDogvarOu6WzobylyaSswLC/9MPNpMekz6SipOqk3qS7pPMhPyB2aW0tZGV2QHZpbS5vcmcgIgorIqTLyvO58KS3pMakr6TApLWkpCIKKworIzogaWZfdGNsLmM6MjAwNworbXNnaWQgImNhbm5vdCBnZXQgbGluZSIKK21zZ3N0ciAiudSk8rzoxsCkx6StpN6ku6TzIgorCisjOiBpZl94Y21kc3J2LmM6MjI1Cittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAizL/O4aW1obyl0KTOzL7BsKTyxdDPv6THpK2k3qS7pPMiCisKKyM6IGlmX3hjbWRzcnYuYzo0NzMKK21zZ2lkICJFMjQ4OiBGYWlsZWQgdG8gc2VuZCBjb21tYW5kIHRvIHRoZSBkZXN0aW5hdGlvbiBwcm9ncmFtIgorbXNnc3RyICJFMjQ4OiDM3MWqpM6l16XtpbCl6aXgpNikzqWzpd6l86XJwfe/rqTLvLrH1KS3pN6kt6S/IgorCisjOiBpZl94Y21kc3J2LmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzM6IEludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICJFNTczOiDMtbj6pMqltaG8pdBJRKSsu8ik76TspN6kt6S/OiAlcyIKKworIzogaWZfeGNtZHNydi5jOjExMTAKK21zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCittc2dzdHIgIkUyNTE6IFZJTSC8wsLOpM7F0M+/pdel7aXRpcalo6SsydTAtaTHpLkuIL7Dte6kt6TepLekvyEiCisKKyM6IG1haW4uYzo2MAorbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICLMpMPOpM6lqqXXpbel56XzpMekuSIKKworIzogbWFpbi5jOjYyCittc2dpZCAiVG9vIG1hbnkgZWRpdCBhcmd1bWVudHMiCittc2dzdHIgIsrUvbiw+r/0pKzCv6S5pK6k3qS5IgorCisjOiBtYWluLmM6NjQKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICKw+r/0pKykoqTqpN6ku6TzIgorCisjOiBtYWluLmM6NjYKK21zZ2lkICJHYXJiYWdlIGFmdGVyIG9wdGlvbiIKK21zZ3N0ciAipaql16W3peel86TOuOWky6W0pd+krKSipOqk3qS5IgorCisjOiBtYWluLmM6NjgKK21zZ2lkICJUb28gbWFueSBcIitjb21tYW5kXCIsIFwiLWMgY29tbWFuZFwiIG9yIFwiLS1jbWQgY29tbWFuZFwiIGFyZ3VtZW50cyIKK21zZ3N0ciAiXCIrY29tbWFuZFwiLCBcIi1jIGNvbW1hbmRcIiwgXCItLWNtZCBjb21tYW5kXCIgpM6w+r/0pKzCv6S5pK6k3qS5IgorCisjOiBtYWluLmM6NzAKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IGZvciIKK21zZ3N0ciAizLW4+qTKsPq/9KTHpLk6ICIKKworIzogbWFpbi5jOjQ2NgorbXNnaWQgIlRoaXMgVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgZGlmZiBmZWF0dXJlLiIKK21zZ3N0ciAipLOkzlZpbaTLpM9kaWZmtaHHvaSspKKk6qTepLuk8yils6XzpdGlpKXru/7A38TqKS4iCisKKyM6IG1haW4uYzo5MzIKK21zZ2lkICJBdHRlbXB0IHRvIG9wZW4gc2NyaXB0IGZpbGUgYWdhaW46IFwiIgorbXNnc3RyICKluaWvpeql16XIpdWloaWkpeuk8rrGpNOzq6SkpMak36TepLk6IFwiIgorCisjIG1zZ2lkICJcIlxuIgorIyBtc2dzdHIgIlwiXG4iCisjOiBtYWluLmM6OTQxCittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICLGybn+zdGkyKS3pMazq6SxpN6ku6TzIgorCisjOiBtYWluLmM6OTg1Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICKluaWvpeql16XIvdDOz83RpPKzq6SxpN6ku6TzIgorCisjOiBtYWluLmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmaWxlcyB0byBlZGl0XG4iCittc2dzdHIgIiVkILjEpM6l1aWhpaSl66SsytS9uKTyubWkqKTGpKSk3qS5XG4iCisKKyM6IG1haW4uYzoxMjMzCittc2dpZCAiVmltOiBXYXJuaW5nOiBPdXRwdXQgaXMgbm90IHRvIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiC32bnwOiDDvMv2pNikzr3Qzs+kx6TPpKKk6qTepLuk81xuIgorCisjOiBtYWluLmM6MTIzNQorbXNnaWQgIlZpbTogV2FybmluZzogSW5wdXQgaXMgbm90IGZyb20gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06ILfZufA6IMO8y/akq6TppM7G/s7PpMekz6SipOqk3qS7pPNcbiIKKworIy4ganVzdCBpbiBjYXNlLi4KKyM6IG1haW4uYzoxMjk3Cittc2dpZCAicHJlLXZpbXJjIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAidmltcmPBsKTOpbOl3qXzpcml6aWkpfMiCisKKyM6IG1haW4uYzoxMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODI6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjgyOiBcIiVzXCKkq6Tpxsm5/qTgpLOkyKSspMekraTepLuk8yIKKworIzogbWFpbi5jOjI0MTEKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIqTopOq+3LrZpMq+8MrzpM86IFwidmltIC1oXCJcbiIKKworIzogbWFpbi5jOjI0NDQKK21zZ2lkICJbZmlsZSAuLl0gICAgICAgZWRpdCBzcGVjaWZpZWQgZmlsZShzKSIKK21zZ3N0ciAiW6XVpaGlpKXrLi5dICAgIKSipOul1aWhpaSl66TyytS9uKS5pOsiCisKKyM6IG1haW4uYzoyNDQ1Cittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAgybi94Mb+zs+kq6TppcalraW5pcik8sbJuf6k4CIKKworIzogbWFpbi5jOjI0NDYKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCClv6WwICAgICAgICAgpb+lsKSsxOq1waS1pOykv6TIpLOk7aSrpOnK1L24pLmk6yIKKworIzogbWFpbi5jOjI0NDgKK21zZ2lkICItcSBbZXJyb3JmaWxlXSAgZWRpdCBmaWxlIHdpdGggZmlyc3QgZXJyb3IiCittc2dzdHIgIi1xIFtlcnJvcmZpbGVdICC6x73ppM6lqKXpobykx8rUvbikuaTrIgorCisjOiBtYWluLmM6MjQ1NworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJ1c2FnZToiCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyK7yM3Ry6E6IgorCisjOiBtYWluLmM6MjQ2MAorbXNnaWQgIiB2aW0gW2FyZ3VtZW50c10gIgorbXNnc3RyICIgdmltIFuw+r/0XSIKKworIzogbWFpbi5jOjI0NjQKK21zZ2lkICIiCisiXG4iCisiICAgb3I6IgorbXNnc3RyICIiCisiXG4iCisiICAgpOKkt6SvpM86IgorCisjOiBtYWluLmM6MjQ2NworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyKw+r/0OlxuIgorCisjOiBtYWluLmM6MjQ2OAorbXNnaWQgIi0tXHRcdFx0T25seSBmaWxlIG5hbWVzIGFmdGVyIHRoaXMiCittc2dzdHIgIi0tXHRcdFx0pLOkzqSipMiky6TPpdWloaWkpevMvqTApLEiCisKKyM6IG1haW4uYzoyNDcwCittc2dpZCAiLS1saXRlcmFsXHRcdERvbid0IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIi0tbGl0ZXJhbFx0XHSl76WkpeulyaWrobylyaTyxbizq6S3pMqkpCIKKworIzogbWFpbi5jOjI0NzMKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHSks6TOZ3ZpbaTyT0xFpMikt6TGxdDPv6S5pOsiCisKKyM6IG1haW4uYzoyNDc0Cittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi11bnJlZ2lzdGVyXHRcdGd2aW2kzk9MRcXQz7+k8rLyvfykuaTrIgorCisjOiBtYWluLmM6MjQ3NworbXNnaWQgIi1nXHRcdFx0UnVuIHVzaW5nIEdVSSAobGlrZSBcImd2aW1cIikiCittc2dzdHIgIi1nXHRcdFx0R1VJpMe1r8awpLmk6yAoXCJndmltXCIgpMjGsaS4KSIKKworIzogbWFpbi5jOjI0NzgKK21zZ2lkICItZiAgb3IgIC0tbm9mb3JrXHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZiBvciAgLS1ub2ZvcmtcdKXVpamloqWwpemlpqXzpck6IEdVSaTyu8+k4aTrpMikraTLZm9ya6S3pMqkpCIKKworIzogbWFpbi5jOjI0ODAKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRWaaXiobylySAoXCJ2aVwiIKTIxrGkuCkiCisKKyM6IG1haW4uYzoyNDgxCittc2dpZCAiLWVcdFx0XHRFeCBtb2RlIChsaWtlIFwiZXhcIikiCittc2dzdHIgIi1lXHRcdFx0RXil4qG8pckgKFwiZXhcIiCkyMaxpLgpIgorCisjOiBtYWluLmM6MjQ4MgorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHSltaWkpeyl86XIKKXQpcOlwSml4qG8pckgKFwiZXhcIiDA7M3RKSIKKworIzogbWFpbi5jOjI0ODQKK21zZ2lkICItZFx0XHRcdERpZmYgbW9kZSAobGlrZSBcInZpbWRpZmZcIikiCittc2dzdHIgIi1kXHRcdFx0urnKrKXiobylySAoXCJ2aWRpZmZcIiCkyMaxpLgpIgorCisjOiBtYWluLmM6MjQ4NgorbXNnaWQgIi15XHRcdFx0RWFzeSBtb2RlIChsaWtlIFwiZXZpbVwiLCBtb2RlbGVzcykiCittc2dzdHIgIi15XHRcdFx0paShvKW4obyl4qG8pckgKFwiZXZpbVwiIKTIxrGkuCwgpeKhvKXJzLUpIgorCisjOiBtYWluLmM6MjQ4NworbXNnaWQgIi1SXHRcdFx0UmVhZG9ubHkgbW9kZSAobGlrZSBcInZpZXdcIikiCittc2dzdHIgIi1SXHRcdFx0xsm5/sDszdGl4qG8pckgKFwidmlld1wiIKTIxrGkuCkiCisKKyM6IG1haW4uYzoyNDg4Cittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdMCpuMKl4qG8pckgKFwicnZpbVwiIKTIxrGkuCkiCisKKyM6IG1haW4uYzoyNDg5Cittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHTK0bm5ICil1aWhpaSl68rdwri7/ikgpPKkx6StpMqkpKTopKaky6S5pOsiCisKKyM6IG1haW4uYzoyNDkwCittc2dpZCAiLU1cdFx0XHRNb2RpZmljYXRpb25zIGluIHRleHQgbm90IGFsbG93ZWQiCittc2dzdHIgIi1NXHRcdFx0pcalraW5pcikzsrUvbik8rnUpMqkqKTKpKSk6KSmpMukuaTrIgorCisjOiBtYWluLmM6MjQ5MQorbXNnaWQgIi1iXHRcdFx0QmluYXJ5IG1vZGUiCittc2dzdHIgIi1iXHRcdFx0pdClpKXKpeql4qG8pckiCisKKyM6IG1haW4uYzoyNDkzCittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0TGlzcKXiobylySIKKworIzogbWFpbi5jOjI0OTUKK21zZ2lkICItQ1x0XHRcdENvbXBhdGlibGUgd2l0aCBWaTogJ2NvbXBhdGlibGUnIgorbXNnc3RyICItQ1x0XHRcdFZpuN+0uaXiobylyTogJ2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjQ5NgorbXNnaWQgIi1OXHRcdFx0Tm90IGZ1bGx5IFZpIGNvbXBhdGlibGU6ICdub2NvbXBhdGlibGUnIgorbXNnc3RyICItTlx0XHRcdFZpyPO437S5peKhvKXJOiAnbm9jb21wYXRpYmxlIgorCisjOiBtYWluLmM6MjQ5NworbXNnaWQgIi1WW05dXHRcdFZlcmJvc2UgbGV2ZWwiCittc2dzdHIgIi1WW05dXHRcdFZlcmJvc2Ugpeyl2aXrIgorCisjOiBtYWluLmM6MjQ5OAorbXNnaWQgIi1EXHRcdFx0RGVidWdnaW5nIG1vZGUiCittc2dzdHIgIi1EXHRcdFx0pcel0KXDpbCl4qG8pckiCisKKyM6IG1haW4uYzoyNDk5Cittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHSluaXvpcOl16XVpaGlpKXrpPK7yM3RpLukuqXhpeKl6qTApLEiCisKKyM6IG1haW4uYzoyNTAwCittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0pbml76XDpdel1aWhpaSl66TyzvO186S3varOuyIKKworIzogbWFpbi5jOjI1MDEKK21zZ2lkICItciAod2l0aCBmaWxlIG5hbWUpXHRSZWNvdmVyIGNyYXNoZWQgc2Vzc2lvbiIKK21zZ3N0ciAiLXIgKKXVpaGlpKXrzL4pXHSlr6XppcOlt6XlpLekv6W7pcOlt6XnpfOk8sn8taIiCisKKyM6IG1haW4uYzoyNTAyCittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRcdC1ypMjGsaS4IgorCisjOiBtYWluLmM6MjUwNAorbXNnaWQgIi1mXHRcdFx0RG9uJ3QgdXNlIG5ld2NsaSB0byBvcGVuIHdpbmRvdyIKK21zZ3N0ciAiLWZcdFx0XHSlpqWjpfOlyaWmpPKzq6SvpM6kyyBuZXdjbGkgpPK7yM3RpLekyqSkIgorCisjOiBtYWluLmM6MjUwNQorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPGRldmljZT5cdFx0SS9PpMsgPGRldmljZT4gpPK7yM3RpLmk6yIKKworIzogbWFpbi5jOjI1MDgKK21zZ2lkICItQVx0XHRcdHN0YXJ0IGluIEFyYWJpYyBtb2RlIgorbXNnc3RyICItQVx0XHRcdKWipeml06WiuOyl4qG8pcmkx7WvxrCkuaTrIgorCisjOiBtYWluLmM6MjUxMQorbXNnaWQgIi1IXHRcdFx0U3RhcnQgaW4gSGVicmV3IG1vZGUiCittc2dzdHIgIi1IXHRcdFx0pdil1qXppaS47KXiobylyaTHta/GsKS5pOsiCisKKyM6IG1haW4uYzoyNTE0Cittc2dpZCAiLUZcdFx0XHRTdGFydCBpbiBGYXJzaSBtb2RlIgorbXNnc3RyICItRlx0XHRcdKXapeult6WiuOyl4qG8pcmkx7WvxrCkuaTrIgorCisjOiBtYWluLmM6MjUxNgorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW5hbD5cdMO8y/ak8iA8dGVybWluYWw+IKTLwN/E6qS5pOsiCisKKyM6IG1haW4uYzoyNTE3Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0LnZpbXJjpM7C5aTvpOqkyyA8dmltcmM+IKTyu8ikpiIKKworIzogbWFpbi5jOjI1MTkKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0Lmd2aW1yY6TOwuWk76TqpMsgPGd2aW1yYz4gpPK7yKSmIgorCisjOiBtYWluLmM6MjUyMQorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHSl16XppbClpKXzpbmlr6XqpdelyKType2hvKXJpLekyqSkIgorCisjOiBtYWluLmM6MjUyMgorbXNnaWQgIi1vW05dXHRcdE9wZW4gTiB3aW5kb3dzIChkZWZhdWx0OiBvbmUgZm9yIGVhY2ggZmlsZSkiCittc2dzdHIgIi1vW05dXHRcdE4guMSlpqWjpfOlyaWmpPKzq6SvKL7KzqzDzTogpdWloaWkpeuky6TEpK0xuMQpIgorCisjOiBtYWluLmM6MjUyMworbXNnaWQgIi1PW05dXHRcdExpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdC1vpMjGsaS4pMCkrL/ixL7KrLPkIgorCisjOiBtYWluLmM6MjUyNAorbXNnaWQgIitcdFx0XHRTdGFydCBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiK1x0XHRcdKXVpaGlpKXrpM66x7jlpKuk6aTPpLik4aTrIgorCisjOiBtYWluLmM6MjUyNQorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8bG51bT5cdFx0PGxudW0+ILnUpKuk6aTPpLik4aTrIgorCisjOiBtYWluLmM6MjUyNworbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIi0tY21kIDxjb21tYW5kPlx0dmltcmOk8qXtobylyaS5pOvBsKTLIDxjb21tYW5kPiCk8rzCudSkuaTrIgorCisjOiBtYWluLmM6MjUyOQorbXNnaWQgIi1jIDxjb21tYW5kPlx0XHRFeGVjdXRlIDxjb21tYW5kPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItYyA8Y29tbWFuZD5cdFx0use96aTOpdWloaWkpeuk8qXtobylybjlIDxjb21tYW5kPiCk8rzCudSkuaTrIgorCisjOiBtYWluLmM6MjUzMAorbXNnaWQgIi1TIDxzZXNzaW9uPlx0XHRTb3VyY2UgZmlsZSA8c2Vzc2lvbj4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLVMgPHNlc3Npb24+XHRcdLrHvemkzqXVpaGlpKXrpPKl7aG8pcm45aXVpaGlpKXrIDxzZXNzaW9uPiCk8rzouf6k4CIKKworIzogbWFpbi5jOjI1MzEKK21zZ2lkICItcyA8c2NyaXB0aW4+XHRSZWFkIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGZyb20gZmlsZSA8c2NyaXB0aW4+IgorbXNnc3RyICItcyA8c2NyaXB0aW4+XHSl1aWhpaSl6yA8c2NyaXB0aW4+IKSrpOmlzqG8pd6l66Wzpd6l86XJpPLGybn+pOAiCisKKyM6IG1haW4uYzoyNTMyCittc2dpZCAiLXcgPHNjcmlwdG91dD5cdEFwcGVuZCBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLXcgPHNjcmlwdG91dD5cdMb+zs+kt6S/wbSls6XepfOlyaTypdWloaWkpesgPHNjcmlwdG91dD4gpMvEybLDpLmk6yIKKworIzogbWFpbi5jOjI1MzMKK21zZ2lkICItVyA8c2NyaXB0b3V0Plx0V3JpdGUgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi1XIDxzY3JpcHRvdXQ+XHTG/s7PpLekv8G0pbOl3qXzpcmk8qXVpaGlpKXrIDxzY3JpcHRvdXQ+IKTLyt3CuKS5pOsiCisKKyM6IG1haW4uYzoyNTM1Cittc2dpZCAiLXhcdFx0XHRFZGl0IGVuY3J5cHRlZCBmaWxlcyIKK21zZ3N0ciAiLXhcdFx0XHSwxbnmsr2ktaTspL+l1aWhpaSl66TyytS9uKS5pOsiCisKKyM6IG1haW4uYzoyNTM5Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRDb25uZWN0IHZpbSB0byB0aGlzIHBhcnRpY3VsYXIgWC1zZXJ2ZXIiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0dmltpPK72MTqpLekvyBYIKW1obyl0KTLwNzCs6S5pOsiCisKKyM6IG1haW4uYzoyNTQxCittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHRYpbWhvKXQpMvA3MKzpLekyqSkIgorCisjOiBtYWluLmM6MjU0NAorbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgaWYgcG9zc2libGUiCittc2dzdHIgIi0tcmVtb3RlIDxmaWxlcz5cdLLEx72kyqTppNBWaW2ltaG8pdCkxyA8ZmlsZXM+IKTyytS9uKS5pOsiCisKKyM6IG1haW4uYzoyNTQ1Cittc2dpZCAiLS1yZW1vdGUtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiLS1yZW1vdGUtc2lsbmV0IDxmaWxlcz4gIMaxvuUsIKW1obyl0KSszLWkr6TGpOK32bnwyrik8r3Qzs+kt6TKpKQiCisKKyM6IG1haW4uYzoyNTQ2Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgQXMgLS1yZW1vdGUgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQiCittc2dzdHIgIi0tcmVtb3RlLXdhaXQgPGZpbGVzPlx0LS1yZW1vdGW45SCl1aWhpaSl66TOytS9uKSsvaqk76TrpM6k8sLUpMQiCisKKyM6IG1haW4uYzoyNTQ3Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiLS1yZW1vdGUtd2FpdC1zaWxlbnQgPGZpbGVzPiAgxrG+5SwgpbWhvKXQpKzMtaSvpMak4rfZufDKuKTyvdDOz6S3pMqkpCIKKworIzogbWFpbi5jOjI1NDgKK21zZ2lkICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0U2VuZCA8a2V5cz4gdG8gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0VmltpbWhvKXQpMsgPGtleXM+IKTywfe/rqS3pMa9qs67pLmk6yIKKworIzogbWFpbi5jOjI1NDkKK21zZ2lkICItLXJlbW90ZS1leHByIDxleHByPlx0RXZhbHVhdGUgPGV4cHI+IGluIGEgVmltIHNlcnZlciBhbmQgcHJpbnQgcmVzdWx0IgorbXNnc3RyICItLXJlbW90ZS1leHByIDxleHByPlx0pbWhvKXQpMcgPGV4cHI+IKTyvMK51KS3pMa367LMpPLJvbyopLmk6yIKKworIzogbWFpbi5jOjI1NTAKK21zZ2lkICItLXNlcnZlcmxpc3RcdFx0TGlzdCBhdmFpbGFibGUgVmltIHNlcnZlciBuYW1lcyBhbmQgZXhpdCIKK21zZ3N0ciAiLS1zZXJ2ZXJsaXN0XHRcdFZpbaW1obyl0My+pM6w7M33pPLJvbyopLekxr2qzrukuaTrIgorCisjOiBtYWluLmM6MjU1MQorbXNnaWQgIi0tc2VydmVybmFtZSA8bmFtZT5cdFNlbmQgdG8vYmVjb21lIHRoZSBWaW0gc2VydmVyIDxuYW1lPiIKK21zZ3N0ciAiLS1zZXJ2ZW5hbWUgPG5hbWU+XHRcdFZpbaW1obyl0CA8bmFtZT4gpMvB97+uL8y+wbDA38TqpLmk6yIKKworIzogbWFpbi5jOjI1NTQKK21zZ2lkICItaSA8dmltaW5mbz5cdFx0VXNlIDx2aW1pbmZvPiBpbnN0ZWFkIG9mIC52aW1pbmZvIgorbXNnc3RyICItaSA8dmltaW5mbz5cdFx0LnZpbWluZm+kzsLlpO+k6qTLIDx2aW1pbmZvPiCk8rvIpKYiCisKKyM6IG1haW4uYzoyNTU2Cittc2dpZCAiLWggIG9yICAtLWhlbHBcdFByaW50IEhlbHAgKHRoaXMgbWVzc2FnZSkgYW5kIGV4aXQiCittc2dzdHIgIi1oIG9yICAtLWhlbHBcdKXYpeul1yiks6TOpeGlw6W7obyluCmk8sm9vKikt72qzrukuaTrIgorCisjOiBtYWluLmM6MjU1NworbXNnaWQgIi0tdmVyc2lvblx0XHRQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IgorbXNnc3RyICItLXZlcnNpb25cdFx0pdChvKW4peel877wyvOk8sm9vKikt72qzrukuaTrIgorCisjOiBtYWluLmM6MjU2MQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChNb3RpZiB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW2ky6TopMOkxrLyvOGktaTspOuw+r/0KE1vdGlmpdChvKW4peel8yk6XG4iCisKKyM6IG1haW4uYzoyNTY1Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKG5lWHRhdyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW2ky6TopMOkxrLyvOGktaTspOuw+r/0KG5lWHRhd6XQobyluKXnpfMpOlxuIgorCisjOiBtYWluLmM6MjU2NworbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChBdGhlbmEgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJndmltpMuk6KTDpMay8rzhpLWk7KTrsPq/9ChBdGhlbmGl0KG8pbil56XzKTpcbiIKKworIzogbWFpbi5jOjI1NzEKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdDxkaXNwbGF5PiCkx3ZpbaTyvMK51KS5pOsiCisKKyM6IG1haW4uYzoyNTcyCittc2dpZCAiLWljb25pY1x0XHRTdGFydCB2aW0gaWNvbmlmaWVkIgorbXNnc3RyICItaWNvbmljXHRcdLrHvq6yvaS3pL++9cLWpMd2aW2k8rWvxrCkuaTrIgorCisjOiBtYWluLmM6MjU3NAorbXNnaWQgIi1uYW1lIDxuYW1lPlx0XHRVc2UgcmVzb3VyY2UgYXMgaWYgdmltIHdhcyA8bmFtZT4iCittc2dzdHIgIi1uYW1lIDxuYW1lPlx0XHR2aW2kzsy+pKwgPG5hbWU+IKTHpKKk66TIpLekxqXqpb2hvKW5pPK7yKSmIgorCisjOiBtYWluLmM6MjU3NQorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgKLzCwfWktaTspMakpKTKpKQpXG4iCisKKyM6IG1haW4uYzoyNTc3Cittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8Y29sb3I+XHTH2LfKv6ekyyA8Y29sb3I+IKTyu8ikpijGsbXBOiAtYmcpIgorCisjOiBtYWluLmM6MjU3OAorbXNnaWQgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZnKSIKK21zZ3N0ciAiLWZvcmVncm91bmQgPGNvbG9yPlx0wbC3yr+npMsgPGNvbG9yPiCk8rvIpKYoxrG1wTogLWZnKSIKKworIzogbWFpbi5jOjI1NzkgbWFpbi5jOjI1OTkKK21zZ2lkICItZm9udCA8Zm9udD5cdFx0VXNlIDxmb250PiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mbikiCittc2dzdHIgIi1mb250IDxmb250Plx0XHSlxqWtpbmlyMm9vKikyyA8Zm9udD4gpPK7yKSmKMaxtcE6IC1mbikiCisKKyM6IG1haW4uYzoyNTgwCittc2dpZCAiLWJvbGRmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgYm9sZCB0ZXh0IgorbXNnc3RyICItYm9sZGZvbnQgPGZvbnQ+XHTCwLv6pMsgPGZvbnQ+IKTyu8ikpiIKKworIzogbWFpbi5jOjI1ODEKK21zZ2lkICItaXRhbGljZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGl0YWxpYyB0ZXh0IgorbXNnc3RyICItaXRhbGljZm9udCA8Zm9yPlx0vNDCzrv6pMsgPGZvbnQ+IKTyu8ikpiIKKworIzogbWFpbi5jOjI1ODIgbWFpbi5jOjI2MDAKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIi1nZW9tZXRyeSA8Z2VvbT5cdL3ptPzH28PWpMsgPGdlb20+IKTyu8ikpijGsbXBOiAtZ2VvbSkiCisKKyM6IG1haW4uYzoyNTgzCittc2dpZCAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdFVzZSBhIGJvcmRlciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtYncpIgorbXNnc3RyICItYm9yZGVyd2lkdGggPHdpZHRoPlx0tq2zpqTOyf2k8iA8d2lkdGg+IKTLpLmk6yjGsbXBOiAtYncpIgorCisjOiBtYWluLmM6MjU4NAorbXNnaWQgIi1zY3JvbGxiYXJ3aWR0aCA8d2lkdGg+ICBVc2UgYSBzY3JvbGxiYXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLXN3KSIKK21zZ3N0ciAiIgorIi1zY3JvbGxiYXJ3aWR0aCA8d2lkdGg+ICCluaWvpe2hvKXrpdChvKTOyf2k8iA8d2lkdGg+IKTLpLmk6yjGsbXBOiAtc3cpIgorCisjOiBtYWluLmM6MjU4NgorbXNnaWQgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHRVc2UgYSBtZW51IGJhciBoZWlnaHQgb2YgPGhlaWdodD4gKGFsc286IC1taCkiCittc2dzdHIgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHSl4aXLpeWhvKXQobykzrnipLWk8iA8aGVpZ2h0PiCky6S5pOsoxrG1wTogLW1oKSIKKworIzogbWFpbi5jOjI1ODggbWFpbi5jOjI2MDEKK21zZ2lkICItcmV2ZXJzZVx0XHRVc2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogLXJ2KSIKK21zZ3N0ciAiLXJldmVyc2VcdFx0yL/FvrHHwfyk8rvIzdGkuaTrKMaxtcE6IC1ydikiCisKKyM6IG1haW4uYzoyNTg5Cittc2dpZCAiK3JldmVyc2VcdFx0RG9uJ3QgdXNlIHJldmVyc2UgdmlkZW8gKGFsc286ICtydikiCittc2dzdHIgIityZXZlcnNlXHRcdMi/xb6xx8H8pPK7yM3RpLekyqSkKMaxtcE6ICtydikiCisKKyM6IG1haW4uYzoyNTkwCittc2dpZCAiLXhybSA8cmVzb3VyY2U+XHRTZXQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSIKK21zZ3N0ciAiLXhybSA8cmVzb3VyY2U+XHTGw8TqpM6l6qW9obyluaTyu8jN0aS5pOsiCisKKyM6IG1haW4uYzoyNTkzCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKFJJU0MgT1MgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJndmltpMuk6KTDpMay8rzhpLWk7KTrsPq/9ChSSVNDIE9TpdChvKW4peel8yk6XG4iCisKKyM6IG1haW4uYzoyNTk0Cittc2dpZCAiLS1jb2x1bW5zIDxudW1iZXI+XHRJbml0aWFsIHdpZHRoIG9mIHdpbmRvdyBpbiBjb2x1bW5zIgorbXNnc3RyICItLWNvbHVtbnMgPG51bWJlcj5cdL3ptPykzqWmpaOl86XJpaakzqWzpeml4MOxsMykzsn9IgorCisjOiBtYWluLmM6MjU5NQorbXNnaWQgIi0tcm93cyA8bnVtYmVyPlx0SW5pdGlhbCBoZWlnaHQgb2Ygd2luZG93IGluIHJvd3MiCittc2dzdHIgIi0tcm93cyA8bnVtYmVyPlx0vem0/KTOpaalo6XzpcmlpqTOudTDsbDMpM654qS1IgorCisjOiBtYWluLmM6MjU5OAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbaTLpOikw6TGsvK84aS1pOyk67D6v/QoR1RLK6XQobyluKXnpfMpOlxuIgorCisjOiBtYWluLmM6MjYwMgorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4gKGFsc286IC0tZGlzcGxheSkiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0PGRpc3BsYXk+IKTHdmltpPK8wrnUpLmk6yjGsbXBOiAtLWRpc3BsYXkpIgorCisjOiBtYWluLmM6MjYwNAorbXNnaWQgIi0tcm9sZSA8cm9sZT5cdFNldCBhIHVuaXF1ZSByb2xlIHRvIGlkZW50aWZ5IHRoZSBtYWluIHdpbmRvdyIKK21zZ3N0ciAiLS1yb2xlIDxyb2xlPlx0peGlpKXzpaalo6XzpcmlpqTyvLHKzKS5pOuw7LDVpMrM8rPkKHJvbGUppPLA38TqpLmk6yIKKworIzogbWFpbi5jOjI2MDYKK21zZ2lkICItLXNvY2tldGlkIDx4aWQ+XHRPcGVuIFZpbSBpbnNpZGUgYW5vdGhlciBHVEsgd2lkZ2V0IgorbXNnc3RyICItLXNvY2tldGlkIDx4aWQ+XHSw26TKpOtHVEsgd2lkZ2V0pMdWaW2k8rOrpK8iCisKKyM6IG1haW4uYzoyNjA5Cittc2dpZCAiLVAgPHBhcmVudCB0aXRsZT5cdE9wZW4gVmltIGluc2lkZSBwYXJlbnQgYXBwbGljYXRpb24iCittc2dzdHIgIi1QIDy/xqTOpb+lpKXIpes+XHRWaW2k8r/GpaKl16XqpbGhvKW3peel86TOw+akx7WvxrCkuaTrIgorCisjIG1zZ2lkICItLWhlbHBcdFx0U2hvdyBHbm9tZSBhcmd1bWVudHMiCisjIG1zZ3N0ciAiLS1oZWxwXHRcdEdOT01FpM6w+r/0pPK4q6S7pOsiCisjOiBtYWluLmM6Mjg0NworbXNnaWQgIk5vIGRpc3BsYXkiCittc2dzdHIgIqXHpaOluaXXpeylpKSsuKukxKSrpOqk3qS7pPMiCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyODYyCittc2dpZCAiOiBTZW5kIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiDB97+upMu8usfUpLek3qS3pL8uXG4iCisKKyMuIExldCB2aW0gc3RhcnQgbm9ybWFsbHkuCisjOiBtYWluLmM6Mjg2OAorbXNnaWQgIjogU2VuZCBmYWlsZWQuIFRyeWluZyB0byBleGVjdXRlIGxvY2FsbHlcbiIKK21zZ3N0ciAiOiDB97+upMu8usfUpLek3qS3pL8uIKXtobylq6XrpMekzrzCudSk8rvupN+kxqSkpN6kuVxuIgorCisjOiBtYWluLmM6MjkwNiBtYWluLmM6MjkyNworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBvZiAlZCBlZGl0ZWQiCittc2dzdHIgIiVkILjEICglZCC4xMPmKSCkzqXVpaGlpKXrpPLK1L24pLek3qS3pL8iCisKKyM6IG1haW4uYzoyOTQ5Cittc2dpZCAiTm8gZGlzcGxheTogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAipcelo6W5pdel7KWkpKykoqTqpN6ku6TzOiC8sKTOwfe/rqTLvLrH1KS3pN6kt6S/LlxuIgorCisjOiBtYWluLmM6Mjk2MQorbXNnaWQgIjogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiC8sKTOwfe/rqTLvLrH1KS3pN6kt6S/LlxuIgorCisjOiBtYXJrLmM6NzA5Cittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICKl3qG8pa+krMDfxOqktaTspMakpKTepLuk8yIKKworIzogbWFyay5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgzOiBObyBtYXJrcyBtYXRjaGluZyBcIiVzXCIiCittc2dzdHIgIkUyODM6IFwiJXNcIiCky7O6xfakuaTrpd6hvKWvpKykoqTqpN6ku6TzIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo3MjIKK21zZ2lkICIiCisiXG4iCisibWFyayBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisibWFyayAgILnUICAgzvMgpdWloaWkpesvpcalraW5pcgiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjc2MAorbXNnaWQgIiIKKyJcbiIKKyIganVtcCBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiIGp1bXAgICC51CAgIM7zIKXVpaGlpKXrL6XGpa2luaXIIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo4MDUKK21zZ2lkICIiCisiXG4iCisiY2hhbmdlIGxpbmUgIGNvbCB0ZXh0IgorbXNnc3RyICIiCisiXG4iCisiytG5uSAgILnUICAgIM7zICClxqWtpbmlyCIKKworIzogbWFyay5jOjEyODEKK21zZ2lkICIiCisiXG4iCisiIyBGaWxlIG1hcmtzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyCl1aWhpaSl66XeobylrzpcbiIKKworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMzE2Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIKW4peOl86XXpeqluaXIICi/t6S3pKSk4qTOpKzA6Ck6XG4iCisKKyM6IG1hcmsuYzoxNDEyCittc2dpZCAiIgorIlxuIgorIiMgSGlzdG9yeSBvZiBtYXJrcyB3aXRoaW4gZmlsZXMgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyCl1aWhpaSl68bipd6hvKWvpM7N+s7yICi/t6S3pKSk4qTOpKuk6bjFpKSk4qTOKTpcbiIKKworIzogbWFyay5jOjE1MDEKK21zZ2lkICJNaXNzaW5nICc+JyIKK21zZ3N0ciAiJz4nIKSspN+kxKSrpOqk3qS7pPMiCisKKyM6IG1ieXRlLmM6NDY3Cittc2dpZCAiRTU0MzogTm90IGEgdmFsaWQgY29kZXBhZ2UiCittc2dzdHIgIkU1NDM6IMy1uPqkyqWzobylyaXaobyluKTHpLkiCisKKyM6IG1ieXRlLmM6NDQzMQorbXNnaWQgIkUyODQ6IENhbm5vdCBzZXQgSUMgdmFsdWVzIgorbXNnc3RyICJFMjg0OiBJQ6TOw82k8sDfxOqkx6StpN6ku6TzIgorCisjOiBtYnl0ZS5jOjQ1ODMKK21zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCittc2dzdHIgIkUyODU6IKWkpfOl16XDpcils6XzpcalraW5pcikzrruwK6ky7y6x9Skt6TepLekvyIKKworIzogbWJ5dGUuYzo0NzQxCittc2dpZCAiRTI4NjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgbWV0aG9kIgorbXNnc3RyICJFMjg2OiClpKXzpdelw6XIpeGlvaXDpcmkzqWqobyl16XzpMu8usfUpLek3qS3pL8iCisKKyM6IG1ieXRlLmM6NDc1MgorbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4Nzogt9m58DogSU2kzsfLsvWls6G8peul0KXDpa+k8sDfxOqkx6StpN6ku6TzpMekt6S/IgorCisjOiBtYnl0ZS5jOjQ3NTgKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODogpaSl86XXpcOlyKXhpb2lw6XJpM+kyaTzpMqluaW/paSl66TipbWl3aG8pcikt6TepLuk8yIKKworIzogbWJ5dGUuYzo0ODE1Cittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IKWkpfOl16XDpcil4aW9pcOlyaTPIG15IHByZWVkaXQgdHlwZSCk8qW1pd2hvKXIpLek3qS7pPMiCisKKyM6IG1ieXRlLmM6NDg4OQorbXNnaWQgIkUyOTA6IG92ZXItdGhlLXNwb3Qgc3R5bGUgcmVxdWlyZXMgZm9udHNldCIKK21zZ3N0ciAiRTI5MDogb3Zlci10aGUtc3BvdCCluaW/paSl66TLpM9mb250c2V0pKzJrM3XpMekuSIKKworIzogbWJ5dGUuYzo0OTI1Cittc2dpZCAiRTI5MTogWW91ciBHVEsrIGlzIG9sZGVyIHRoYW4gMS4yLjMuIFN0YXR1cyBhcmVhIGRpc2FibGVkIgorbXNnc3RyICJFMjkxOiBHVEsrpKwxLjIuM6TopOqk4rjFpKSkzqTHpbmlxqG8pb+luaWopeqloqSszLW4+qTHpLkiCisKKyM6IG1ieXRlLmM6NTIzMgorbXNnaWQgIkUyOTI6IElucHV0IE1ldGhvZCBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmciCittc2dzdHIgIkUyOTI6IKWkpfOl16XDpcil4aW9pcOlyaW1obyl0CCkrMawuu6kt6TGpKSk3qS7pPMiCisKKyM6IG1lbWZpbGUuYzo0ODgKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5Mzogpdal7aXDpa+krKXtpcOlr6S1pOykxqSkpN6ku6TzIgorCisjOiBtZW1maWxlLmM6MTAwNQorbXNnaWQgIkUyOTQ6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHJlYWQiCittc2dzdHIgIkUyOTQ6IKW5pe+lw6XXpdWloaWkpevGybn+u/6ky6W3obylr6WopemhvKTHpLkiCisKKyM6IG1lbWZpbGUuYzoxMDEwCittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IKW5pe+lw6XXpdWloaWkpeukzsbJuf6k36WopemhvKTHpLkiCisKKyM6IG1lbWZpbGUuYzoxMDYyCittc2dpZCAiRTI5NjogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgd3JpdGUiCittc2dzdHIgIkUyOTY6IKW5pe+lw6XXpdWloaWkpeu98bn+pN+7/qTLpbehvKWvpail6aG8pMekuSIKKworIzogbWVtZmlsZS5jOjEwODAKK21zZ2lkICJFMjk3OiBXcml0ZSBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTc6IKW5pe+lw6XXpdWloaWkpeukzr3xuf6k36WopemhvKTHpLkiCisKKyM6IG1lbWZpbGUuYzoxMjc3Cittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiCluaXvpcOl16XVpaGlpKXrpKy0+6TLwri636S3pN6kuSAoc3ltbGlua6TLpOik67m2t+I/KSIKKworIzogbWVtbGluZS5jOjI3NQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMD8iCittc2dzdHIgIkUyOTg6IKXWpe2lw6WvIDAgpPK86MbApMekraTepLuk8z8iCisKKyM6IG1lbWxpbmUuYzozMTUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDE/IgorbXNnc3RyICJFMjk4OiCl1qXtpcOlryAxIKTyvOjGwKTHpK2k3qS7pPM/IgorCisjOiBtZW1saW5lLmM6MzMzCittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAyPyIKK21zZ3N0ciAiRTI5ODogpdal7aXDpa8gMiCk8rzoxsCkx6StpN6ku6TzPyIKKworIy4gY291bGQgbm90IChyZSlvcGVuIHRoZSBzd2FwIGZpbGUsIHdoYXQgY2FuIHdlIGRvPz8/PworIzogbWVtbGluZS5jOjQ0MworbXNnaWQgIkUzMDE6IE9vcHMsIGxvc3QgdGhlIHN3YXAgZmlsZSEhISIKK21zZ3N0ciAiRTMwMTogpKqkw6TILCCluaXvpcOl16XVpaGlpKXrpKy8uqTvpOyk3qS3pL8hISEiCisKKyM6IG1lbWxpbmUuYzo0NDgKK21zZ2lkICJFMzAyOiBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwMjogpbml76XDpdel1aWhpaSl66TOzL7BsKTyytGkqKTppOyk3qS7pPMiCisKKyM6IG1lbWxpbmUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwMzogVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciBcIiVzXCIsIHJlY292ZXJ5IGltcG9zc2libGUiCittc2dzdHIgIkUzMDM6IFwiJXNcIiCkzqW5pe+lw6XXpdWloaWkpeuk8rOrpLGkyqSkpM6kx6Xqpaul0KXqpM/J1LLEx72kx6S5IgorCisjOiBtZW1saW5lLmM6NjE3Cittc2dpZCAiRTMwNDogbWxfdGltZXN0YW1wOiBEaWRuJ3QgZ2V0IGJsb2NrIDA/PyIKK21zZ3N0ciAiRTMwNDogbWxfdGltZXN0YW1wOiCl1qXtpcOlryAwIKTyvOjGwKTHpK2k3qS7pPOkx6S3pL8/PyIKKworIzogbWVtbGluZS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA1OiBObyBzd2FwIGZpbGUgZm91bmQgZm9yICVzIgorbXNnc3RyICJFMzA1OiAlcyCky6TPpbml76XDpdel1aWhpaSl66SspN+kxKSrpOqk3qS7pPMiCisKKyM6IG1lbWxpbmUuYzo3NjcKK21zZ2lkICJFbnRlciBudW1iZXIgb2Ygc3dhcCBmaWxlIHRvIHVzZSAoMCB0byBxdWl0KTogIgorbXNnc3RyICK7yM3RpLmk66W5pe+lw6XXpdWloaWkpeukzsjWueak8sb+zs+kt6TGpK+kwKS1pKQoMCCkx72qzrspOiAiCisKKyM6IG1lbWxpbmUuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNjogQ2Fubm90IG9wZW4gJXMiCittc2dzdHIgIkUzMDY6ICVzIKTys6uksaTepLuk8yIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIqXWpe2lw6WvIDAgpPLGybn+pOGk3qS7pPMgIgorCisjOiBtZW1saW5lLmM6ODM3Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIraypOmkr8rRubmkrKS1pOykxqSkpMqkpKSrVmltpKyluaXvpcOl16XVpaGlpKXrpPK5ub+3pLekxqSkpN6ku6TzLiIKKworIzogbWVtbGluZS5jOjg0NyBtZW1saW5lLmM6ODY0Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiIFZpbaTOpLOkzqXQobyluKXnpfOkx6TPu8jN0aTHpK2k3qS7pPMuXG4iCisKKyM6IG1lbWxpbmUuYzo4NDkKK21zZ2lkICJVc2UgVmltIHZlcnNpb24gMy4wLlxuIgorbXNnc3RyICJWaW2kzqXQobyluKXnpfMzLjCk8rvIzdGkt6TGpK+kwKS1pKQuXG4iCisKKyM6IG1lbWxpbmUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNzogJXMgZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwNzogJXMgpM9WaW2kzqW5pe+lw6XXpdWloaWkpeukx6TPpMqkpKTopKakx6S5IgorCisjOiBtZW1saW5lLmM6ODY4Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIG9uIHRoaXMgY29tcHV0ZXIuXG4iCittc2dzdHIgIiCks6TOpbOl86XUpeWhvKW/pMekz7vIzdGkx6StpN6ku6TzLlxuIgorCisjOiBtZW1saW5lLmM6ODcwCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICKks6TOpdWloaWkpeukz7yhpM6+7L3qpMe67qTppOyk3qS3pL8gIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyKk4qS3pK+kz6XVpaGlpKXrpKzCu739pLekxqSkpN6kuS4iCisKKyM6IG1lbWxpbmUuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgc3dhcCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAipbml76XDpdel1aWhpaSl6yBcIiVzXCIgpPK7yM3Rw+YiCisKKyM6IG1lbWxpbmUuYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3JpZ2luYWwgZmlsZSBcIiVzXCIiCittc2dzdHIgIri2y9yl1aWhpaSl6yBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MjIKK21zZ2lkICJFMzA4OiBXYXJuaW5nOiBPcmlnaW5hbCBmaWxlIG1heSBoYXZlIGJlZW4gY2hhbmdlZCIKK21zZ3N0ciAiRTMwODogt9m58DoguLbL3KXVpaGlpKXrpKzK0bm5pLWk7KTGpKSk3qS5IgorCisjOiBtZW1saW5lLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDk6IFVuYWJsZSB0byByZWFkIGJsb2NrIDEgZnJvbSAlcyIKK21zZ3N0ciAiRTMwOTogJXMgpKuk6aXWpe2lw6WvIDEgpPLGybn+pOGk3qS7pPMiCisKKyM6IG1lbWxpbmUuYzo5NzkKK21zZ2lkICI/Pz9NQU5ZIExJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P8K/pK+kzrnUpKy8uqTvpOykxqSkpN6kuSIKKworIzogbWVtbGluZS5jOjk5NQorbXNnaWQgIj8/P0xJTkUgQ09VTlQgV1JPTkciCittc2dzdHIgIj8/P7nUv/SkrLTWsOOkw6TGpKSk3qS5IgorCisjOiBtZW1saW5lLmM6MTAwMgorbXNnaWQgIj8/P0VNUFRZIEJMT0NLIgorbXNnc3RyICI/Pz+l1qXtpcOlr6SstvWkx6S5IgorCisjOiBtZW1saW5lLmM6MTAyOAorbXNnaWQgIj8/P0xJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P7nUpKy8uqTvpOykxqSkpN6kuSIKKworIzogbWVtbGluZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxMDogQmxvY2sgMSBJRCB3cm9uZyAoJXMgbm90IGEgLnN3cCBmaWxlPykiCittc2dzdHIgIkUzMTA6IKXWpe2lw6WvIDEgpM5JRKSstNaw46TDpMakpKTepLkoJXMgpKwuc3dwpdWloaWkpeukx6TKpKQ/KSIKKworIzogbWVtbGluZS5jOjEwNjUKK21zZ2lkICI/Pz9CTE9DSyBNSVNTSU5HIgorbXNnc3RyICI/Pz+l1qXtpcOlr6SspKKk6qTepLuk8yIKKworIzogbWVtbGluZS5jOjEwODEKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgYmUgbWVzc2VkIHVwIgorbXNnc3RyICI/Pz8gpLOks6SrpOk/Pz9FTkSk3qTHpM651KSsx8uy9aS1pOykxqSkpOuk6KSmpMekuSIKKworIzogbWVtbGluZS5jOjEwOTcKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiCittc2dzdHIgIj8/PyCks6SzpKuk6T8/RU5EpN6kx6TOudSkrMHexv6kq7rvvfyktaTspL+k6KSmpMekuSIKKworIzogbWVtbGluZS5jOjExMTcKK21zZ2lkICI/Pz9FTkQiCittc2dzdHIgIj8/P0VORCIKKworIzogbWVtbGluZS5jOjExNDMKK21zZ2lkICJFMzExOiBSZWNvdmVyeSBJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiRTMxMTogpeqlq6XQpeqkrLPkuf6k3qTspN6kt6S/IgorCisjOiBtZW1saW5lLmM6MTE0OAorbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIiIKKyJFMzEyOiCl6qWrpdCl6qTOusfD5qTLpail6aG8pKy4ob3QpLWk7KTepLekvzsgPz8/pMe7z6TepOu51KTyu7K+yKS3pMakr6TApLWkpCIKKworIzogbWVtbGluZS5jOjExNTAKK21zZ2lkICJTZWUgXCI6aGVscCBFMzEyXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICK+3LrZpM8gXCI6aGVscCBFMzEyXCIgpPK7sr7IpLekxqSvpMCktaSkIgorCisjOiBtZW1saW5lLmM6MTE1NQorbXNnaWQgIlJlY292ZXJ5IGNvbXBsZXRlZC4gWW91IHNob3VsZCBjaGVjayBpZiBldmVyeXRoaW5nIGlzIE9LLiIKK21zZ3N0ciAipeqlq6XQpeqkrL2qzrukt6TepLekvy4gwbSkxqSswLWkt6SkpKulwaWnpcOlr6S3pMakr6TApLWkpC4iCisKKyM6IG1lbWxpbmUuYzoxMTU2Cittc2dpZCAiIgorIlxuIgorIihZb3UgbWlnaHQgd2FudCB0byB3cml0ZSBvdXQgdGhpcyBmaWxlIHVuZGVyIGFub3RoZXIgbmFtZVxuIgorbXNnc3RyICIiCisiXG4iCisiKMrRubmk8qXBpaelw6WvpLmk66S/pOGkyywgpLOkzqXVpaGlpKXrpPLKzKTOzL7BsKTHyt3CuKS3pL++5aTHXG4iCisKKyM6IG1lbWxpbmUuYzoxMTU3Cittc2dpZCAiYW5kIHJ1biBkaWZmIHdpdGggdGhlIG9yaWdpbmFsIGZpbGUgdG8gY2hlY2sgZm9yIGNoYW5nZXMpXG4iCittc2dzdHIgIri2y9yl1aWhpaSl66TIpM4gZGlmZiCk8rzCudSkuaTrpMjOyaSkpMekt6TnpKYpXG4iCisKKyM6IG1lbWxpbmUuYzoxMTU4Cittc2dpZCAiIgorIkRlbGV0ZSB0aGUgLnN3cCBmaWxlIGFmdGVyd2FyZHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyKkvaTspKuk6S5zd3Cl1aWhpaSl66Tyuu+9/KS3pMakr6TApLWkpFxuIgorIlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMTQKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAipbml76XDpdel1aWhpaSl66SsyqO/9LirpMSkq6TqpN6kt6S/OiIKKworIzogbWVtbGluZS5jOjEzOTIKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAguL2636TOpcelo6Xspa+lyKXqOlxuIgorCisjOiBtZW1saW5lLmM6MTM5NAorbXNnaWQgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorbXNnc3RyICIgICCkoqTrzL7BsKTyu8jN0cPmOlxuIgorCisjOiBtZW1saW5lLmM6MTM5OAorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIKXHpaOl7KWvpcil6iAiCisKKyM6IG1lbWxpbmUuYzoxNDE2Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgICAtLSCkyqS3IC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDg4Cittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgICAgICAgIL3qza281DogIgorCisjOiBtZW1saW5lLmM6MTQ5MAorbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgIMb8ydU6ICIKKworIzogbWVtbGluZS5jOjE0OTQgbWVtbGluZS5jOjM2ODQKK21zZ2lkICIgICAgICAgICAgICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgICAgICAgICAgIMb8ydU6ICIKKworIzogbWVtbGluZS5jOjE1MTAKK21zZ2lkICIgICAgICAgICBbZnJvbSBWaW0gdmVyc2lvbiAzLjBdIgorbXNnc3RyICIgICAgICAgICBbZnJvbSBWaW0gdmVyc2lvbiAzLjBdIgorCisjOiBtZW1saW5lLmM6MTUxNAorbXNnaWQgIiAgICAgICAgIFtkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlXSIKK21zZ3N0ciAiICAgICAgICAgW1ZpbaTOpbml76XDpdel1aWhpaSl66THpM+kyqSkpOikpqTHpLldIgorCisjOiBtZW1saW5lLmM6MTUxOAorbXNnaWQgIiAgICAgICAgIGZpbGUgbmFtZTogIgorbXNnc3RyICIgICAgICAgIKXVpaGlpKXrzL46ICIKKworIzogbWVtbGluZS5jOjE1MjQKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgIG1vZGlmaWVkOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgytG5ub71wtY6ICIKKworIzogbWVtbGluZS5jOjE1MjUKK21zZ2lkICJZRVMiCittc2dzdHIgIqSipOoiCisKKyM6IG1lbWxpbmUuYzoxNTI1Cittc2dpZCAibm8iCittc2dzdHIgIqTKpLciCisKKyM6IG1lbWxpbmUuYzoxNTI5Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIHVzZXIgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgIKXmobyltsy+OiAiCisKKyM6IG1lbWxpbmUuYzoxNTM2Cittc2dpZCAiICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIiAgIKXbpbmlyMy+OiAiCisKKyM6IG1lbWxpbmUuYzoxNTM4Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgIKXbpbmlyMy+OiAiCisKKyM6IG1lbWxpbmUuYzoxNTQ0Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICCl16XtpbuluUlEOiAiCisKKyM6IG1lbWxpbmUuYzoxNTUwCittc2dpZCAiIChzdGlsbCBydW5uaW5nKSIKK21zZ3N0ciAiICik3qTAvMK51MPmKSIKKworIzogbWVtbGluZS5jOjE1NjIKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFuks6TOVmltpdChvKW4peel86THpM+7yM3RpMekraTepLuk810iCisKKyM6IG1lbWxpbmUuYzoxNTY1Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIG9uIHRoaXMgY29tcHV0ZXJdIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgW6SzpM6ls6XzpdSl5aG8pb+kx6TPu8jN0aTHpK2k3qS7pPNdIgorCisjOiBtZW1saW5lLmM6MTU3MAorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iCittc2dzdHIgIiAgICAgICAgIFvGybn+pOGk3qS7pPNdIgorCisjOiBtZW1saW5lLmM6MTU3NAorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgb3BlbmVkXSIKK21zZ3N0ciAiICAgICAgICAgW7OrpLGk3qS7pPNdIgorCisjOiBtZW1saW5lLmM6MTc2NAorbXNnaWQgIkUzMTM6IENhbm5vdCBwcmVzZXJ2ZSwgdGhlcmUgaXMgbm8gc3dhcCBmaWxlIgorbXNnc3RyICJFMzEzOiCluaXvpcOl16XVpaGlpKXrpKzMtaSkpM6kx7Ddu/2kx6StpN6ku6TzIgorCisjOiBtZW1saW5lLmM6MTgxNworbXNnaWQgIkZpbGUgcHJlc2VydmVkIgorbXNnc3RyICKl1aWhpaSl66SssN27/aS1pOyk3qS5IgorCisjOiBtZW1saW5lLmM6MTgxOQorbXNnaWQgIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIKK21zZ3N0ciAiRTMxNDogsN27/aTLvLrH1KS3pN6kt6S/IgorCisjOiBtZW1saW5lLmM6MTg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE1OiBtbF9nZXQ6IGludmFsaWQgbG51bTogJWxkIgorbXNnc3RyICJFMzE1OiBtbF9nZXQ6IMy1uPqkymxudW2kx6S5OiAlbGQiCisKKyM6IG1lbWxpbmUuYzoxOTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTY6IG1sX2dldDogY2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMTY6IG1sX2dldDogudQgJWxkIKTypN+kxKSxpOmk7KTepLuk8yIKKworIzogbWVtbGluZS5jOjIzMDYKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDMiCittc2dzdHIgIkUzMTc6IKXdpaSl86W/pdal7aXDpa+kzklEpKy01rDjpMOkxqSkpN6kuSAzIgorCisjOiBtZW1saW5lLmM6MjM4NgorbXNnaWQgInN0YWNrX2lkeCBzaG91bGQgYmUgMCIKK21zZ3N0ciAic3RhY2tfaWR4IKTPIDAgpMekoqTrpNmkraTHpLkiCisKKyM6IG1lbWxpbmUuYzoyNDQ4Cittc2dpZCAiRTMxODogVXBkYXRlZCB0b28gbWFueSBibG9ja3M/IgorbXNnc3RyICJFMzE4OiC5ub+3pLWk7KS/pdal7aXDpa+krMK/pLmkrqTrpKuk4j8iCisKKyM6IG1lbWxpbmUuYzoyNjMwCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiCl3aWkpfOlv6XWpe2lw6WvpM5JRKSstNaw46TDpMakpKTepLkgNCIKKworIzogbWVtbGluZS5jOjI2NTcKK21zZ2lkICJkZWxldGVkIGJsb2NrIDE/IgorbXNnc3RyICKl1qXtpcOlryAxIKTPvsOktaTspL8/IgorCisjOiBtZW1saW5lLmM6Mjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzIwOiBDYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMyMDogudQgJWxkIKSspN+kxKSrpOqk3qS7pPMiCisKKyM6IG1lbWxpbmUuYzozMTAwCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyIKK21zZ3N0ciAiRTMxNzogpd2lpKXzpb+l1qXtpcOlr6TOSUSkrLTWsOOkw6TGpKSk3qS5IgorCisjOiBtZW1saW5lLmM6MzExNgorbXNnaWQgInBlX2xpbmVfY291bnQgaXMgemVybyIKK21zZ3N0ciAicGVfbGluZV9jb3VudCCkrKW8pe2kx6S5IgorCisjOiBtZW1saW5lLmM6MzE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIyOiBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVsZCBwYXN0IHRoZSBlbmQiCittc2dzdHIgIkUzMjI6ILnUyNa55qSsyM+wz7OwpMekuTogJWxkIMS2pKikxqSkpN6kuSIKKworIzogbWVtbGluZS5jOjMxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMzogbGluZSBjb3VudCB3cm9uZyBpbiBibG9jayAlbGQiCittc2dzdHIgIkUzMjM6IKXWpe2lw6WvICVsZCCkzrnUpaulpqXzpcikrLTWsOOkw6TGpKSk3qS5IgorCisjOiBtZW1saW5lLmM6MzE5OAorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICKluaW/pcOlr6W1paSluqSswf2kqKTepLkiCisKKyM6IG1lbWxpbmUuYzozMjQ0Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAyIgorbXNnc3RyICJFMzE3OiCl3aWkpfOlv6XWpe2lw6WvpM5JRKSstNaw46TDpMakpKTepLkgMiIKKworIzogbWVtbGluZS5jOjM2NzQKK21zZ2lkICJFMzI1OiBBVFRFTlRJT04iCittc2dzdHIgIkUzMjU6IMPtsNUiCisKKyM6IG1lbWxpbmUuYzozNjc1Cittc2dpZCAiIgorIlxuIgorIkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIgorbXNnc3RyICIiCisiXG4iCisivKGkzsy+wbCkx6W5pe+lw6XXpdWloaWkpeuk8rirpMSksaTepLekvyBcIiIKKworIzogbWVtbGluZS5jOjM2NzkKK21zZ2lkICJXaGlsZSBvcGVuaW5nIGZpbGUgXCIiCittc2dzdHIgIryhpM6l1aWhpaSl66Tys6ukpKTGpKSk67rHw+YgXCIiCisKKyM6IG1lbWxpbmUuYzozNjg4Cittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgIKW5pe+lw6XXpdWloaWkpeuk6KTqpOK/t6S3pKSkx6S5IVxuIgorCisjLiBTb21lIG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSBsb25nIHRvIGFsbG93IHRyYW5zbGF0aW9uIHRvCisjLiAqIG90aGVyIGxhbmd1YWdlcy4KKyM6IG1lbWxpbmUuYzozNjkyCittc2dpZCAiIgorIlxuIgorIigxKSBBbm90aGVyIHByb2dyYW0gbWF5IGJlIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS5cbiIKKyIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgYmUgY2FyZWZ1bCBub3QgdG8gZW5kIHVwIHdpdGggdHdvXG4iCisiICAgIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZmlsZSB3aGVuIG1ha2luZyBjaGFuZ2VzLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDEpIMrMpM6l16XtpbCl6aXgpKzGsaS4pdWloaWkpeuk8srUvbikt6TGpKSk66SrpOKkt6TspN6ku6TzLlxuIgorIiAgICCks6TOvuy556TLpM8sIMrRubmk8qS3pL+63aTLuse9qsWqpMssIMaxpLil1aWhpaSl66TOsNukyqTrXG4iCisiICAgIDKkxKTOpaSl86W5pb+l86W5pKykx6StpMakt6TepKaks6TIpMvD7bDVpLekxqSvpMCktaSkLlxuIgorCisjOiBtZW1saW5lLmM6MzY5MworbXNnaWQgIiAgICBRdWl0LCBvciBjb250aW51ZSB3aXRoIGNhdXRpb24uXG4iCittc2dzdHIgIiAgICC9qs67pLmk66SrLCDD7bDVpLekyqSspOnCs6SxpN6kuS5cbiIKKworIzogbWVtbGluZS5jOjM2OTQKK21zZ2lkICIiCisiXG4iCisiKDIpIEFuIGVkaXQgc2Vzc2lvbiBmb3IgdGhpcyBmaWxlIGNyYXNoZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMikgpLOkzqXVpaGlpKXrpM7K1L24pbulw6W3peel86Sspa+l6aXDpbel5aS3pL8uXG4iCisKKyM6IG1lbWxpbmUuYzozNjk1Cittc2dpZCAiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSBcIjpyZWNvdmVyXCIgb3IgXCJ2aW0gLXIgIgorbXNnc3RyICIgICAgpLOkzr7sueeky6TPIFwiOnJlY292ZXJcIiCkqyBcInZpbSAtciAiCisKKyM6IG1lbWxpbmUuYzozNjk3Cittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgpPK7yM3RpLekxsrRubmk8qXqpaul0KG8pLek3qS5KFwiOmhlbHAgcmVjb3ZlclwiIKTyu7K+yCkuXG4iCisKKyM6IG1lbWxpbmUuYzozNjk4Cittc2dpZCAiICAgIElmIHlvdSBkaWQgdGhpcyBhbHJlYWR5LCBkZWxldGUgdGhlIHN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiICAgILT7pMuks6TspPK51KTKpMOkv6TOpMqk6aTQLCCluaXvpcOl16XVpaGlpKXrIFwiIgorCisjOiBtZW1saW5lLmM6MzcwMAorbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byBhdm9pZCB0aGlzIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICCk8r7DpLuk0KSzpM6l4aXDpbuhvKW4pPKy88jypMekraTepLkuXG4iCisKKyM6IG1lbWxpbmUuYzozNzE0IG1lbWxpbmUuYzozNzE4Cittc2dpZCAiU3dhcCBmaWxlIFwiIgorbXNnc3RyICKluaXvpcOl16XVpaGlpKXrIFwiIgorCisjOiBtZW1saW5lLmM6MzcxNSBtZW1saW5lLmM6MzcyMQorbXNnaWQgIlwiIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiXCIgpKy0+6TLpKKk6qTepLkhIgorCisjOiBtZW1saW5lLmM6MzcyNAorbXNnaWQgIlZJTSAtIEFUVEVOVElPTiIKK21zZ3N0ciAiVklNIC0gw+2w1SIKKworIzogbWVtbGluZS5jOjM3MjYKK21zZ2lkICJTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICKluaXvpcOl16XVpaGlpKXrpKy0+6TLwri636S3pN6kuSEiCisKKyM6IG1lbWxpbmUuYzozNzMwCittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImQWJvcnQiCittc2dzdHIgIiIKKyLGybn+wOzN0aTHs6ukrygmTylcbiIKKyKkyKTLpKukr8rUvbikuaTrKCZFKVxuIgorIsn8s+iktaS7pOsoJlIpZWNvdmVyXG4iCisivarOu6S5pOsoJlEpXG4iCisiw+a736S5pOsoJkEpIgorCisjOiBtZW1saW5lLmM6MzczMgorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0XG4iCisiJkFib3J0XG4iCisiJkRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorIsbJuf7A7M3RpMezq6SvKCZPKVxuIgorIqTIpMukq6SvytS9uKS5pOsoJkUpXG4iCisiyfyz6KS1pLuk6ygmUillY292ZXJcbiIKKyK9qs67pLmk6ygmUSlcbiIKKyLD5rvfpLmk6ygmQSlcbiIKKyK+w7XupLmk6ygmRCkiCisKKyM6IG1lbWxpbmUuYzozNzg5Cittc2dpZCAiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIKK21zZ3N0ciAiRTMyNjogpbml76XDpdel1aWhpaSl66Sswr+/9LirpMSkq6TqpN6kt6S/IgorCisjOiBtZW51LmM6NjQKK21zZ2lkICJFMzI3OiBQYXJ0IG9mIG1lbnUtaXRlbSBwYXRoIGlzIG5vdCBzdWItbWVudSIKK21zZ3N0ciAiRTMyNzogpeGly6XlobyloqWkpcal4KTOpdGluaTOyfTKrKSspbWl1qXhpcul5aG8pMekz6SipOqk3qS7pPMiCisKKyM6IG1lbnUuYzo2NQorbXNnaWQgIkUzMjg6IE1lbnUgb25seSBleGlzdHMgaW4gYW5vdGhlciBtb2RlIgorbXNnc3RyICJFMzI4OiCl4aXLpeWhvKTPwr6kzqXiobylyaTLpMCksaSipOqk3qS5IgorCisjOiBtZW51LmM6NjYKK21zZ2lkICJFMzI5OiBObyBtZW51IG9mIHRoYXQgbmFtZSIKK21zZ3N0ciAiRTMyOTogpL2kzsy+wbCkzqXhpcul5aG8pM+koqTqpN6ku6TzIgorCisjOiBtZW51LmM6NTI1Cittc2dpZCAiRTMzMDogTWVudSBwYXRoIG11c3Qgbm90IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzMDogpeGly6Xlobyl0aW5pM+ltaXWpeGly6Xlobyk8sC4pLik66TZpK2kx6TPpKKk6qTepLuk8yIKKworIzogbWVudS5jOjU2NAorbXNnaWQgIkUzMzE6IE11c3Qgbm90IGFkZCBtZW51IGl0ZW1zIGRpcmVjdGx5IHRvIG1lbnUgYmFyIgorbXNnc3RyICJFMzMxOiCl4aXLpeWhvKXQobyky6TPxL7A3KXhpcul5aG8paKlpKXGpeCk8sTJssOkx6StpN6ku6TzIgorCisjOiBtZW51LmM6NTcwCittc2dpZCAiRTMzMjogU2VwYXJhdG9yIGNhbm5vdCBiZSBwYXJ0IG9mIGEgbWVudSBwYXRoIgorbXNnc3RyICJFMzMyOiC26MDapOqkz6Xhpcul5aG8pdGluaTOsOzJ9KTHpM+koqTqpN6ku6TzIgorCisjLiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgbWVudSwgYW5kIHdlIGxpc3QgdGhlIG1hcHBpbmdzCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1lbnUuYzoxMDk3Cittc2dpZCAiIgorIlxuIgorIi0tLSBNZW51cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gpeGly6XlobwgLS0tIgorCisjOiBtZW51LmM6MjAxOQorbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAipLOkzqXhpcul5aG8pPLA2qTqvOik6yIKKworIzogbWVudS5jOjIwODQKK21zZ2lkICJFMzMzOiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgbWVudSBpdGVtIgorbXNnc3RyICJFMzMzOiCl4aXLpeWhvKXRpbmkz6Xhpcul5aG8paKlpKXGpeCk8sC4pLikyqSxpOyk0KSkpLGk3qS7pPMiCisKKyM6IG1lbnUuYzoyMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzQ6IE1lbnUgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTMzNDogpeGly6XlobykrKTfpMSkq6TqpN6ku6TzOiAlcyIKKworIzogbWVudS5jOjIxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNTogTWVudSBub3QgZGVmaW5lZCBmb3IgJXMgbW9kZSIKK21zZ3N0ciAiRTMzNTogJXMgpMukz6Xhpcul5aG8pKzE6rXBpLWk7KTGpKSk3qS7pPMiCisKKyM6IG1lbnUuYzoyMjExCittc2dpZCAiRTMzNjogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzM2OiCl4aXLpeWhvKXRpbmkz6W1pdal4aXLpeWhvKTywLikuKTKpLGk7KTQpKSksaTepLuk8yIKKworIzogbWVudS5jOjIyMzIKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IKXhpcul5aG8pKyk36TEpKuk6qTepLuk8yAtIKXhpcul5aG8zL6k8rPOx6ekt6TGpK+kwKS1pKQiCisKKyM6IG1lc3NhZ2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZyAlczoiCittc2dzdHIgIiVzIKTOvejN/cPmpMulqKXpobykrLihvdCktaTspN6kt6S/OiIKKworIzogbWVzc2FnZS5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICU0bGQ6IgorbXNnc3RyICK51CAlNGxkOiIKKworIzogbWVzc2FnZS5jOjY0NworbXNnaWQgIltzdHJpbmcgdG9vIGxvbmddIgorbXNnc3RyICJbyri7+s7zpKzEuaS5pK6k3qS5XSIKKworIzogbWVzc2FnZS5jOjc5NworbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorbXNnc3RyICLG/MvcuOyl4aXDpbuhvKW4y93M9S+0xr2kOiDCvLKsIMLAz7ogPGtvcm9uQHRrYS5hdHQubmUuanA+IgorCisjOiBtZXNzYWdlLmM6MTAyNQorbXNnaWQgIkludGVycnVwdDogIgorbXNnc3RyICKz5Ln+pN86ICIKKworIzogbWVzc2FnZS5jOjEwMjgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIsKzpLGk66TLpM9FTlRFUqTysqGkt6TGpK+kwKS1pKQiCisKKyM6IG1lc3NhZ2UuYzoxMDMwCittc2dpZCAiSGl0IEVOVEVSIG9yIHR5cGUgY29tbWFuZCB0byBjb250aW51ZSIKK21zZ3N0ciAiwrOksaTrpMukz0VOVEVSpPKyoaS5pKuls6XepfOlyaTyxv7Oz6S3pMakr6TApLWkpCIKKworIzogbWVzc2FnZS5jOjIzNTEKK21zZ2lkICItLSBNb3JlIC0tIgorbXNnc3RyICItLSC30cKzIC0tIgorCisjOiBtZXNzYWdlLmM6MjM1NAorbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiC51MH3pOosIFNQQUNFL2I6IKXaobyluMH3pOosIGQvdTogyL6l2qG8pbjB96TqLCBxOiC9qs67KSIKKworIzogbWVzc2FnZS5jOjIzNTUKK21zZ2lkICIgKFJFVDogbGluZSwgU1BBQ0U6IHBhZ2UsIGQ6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUOiC51MH3pOosIFNQQUNFOiCl2qG8pbjB96TqLCBkOiDIvqXaobyluMH3pOosIHE6IL2qzrspIgorCisjOiBtZXNzYWdlLmM6Mjk3NiBtZXNzYWdlLmM6Mjk5MQorbXNnaWQgIlF1ZXN0aW9uIgorbXNnc3RyICK8wczkIgorCisjOiBtZXNzYWdlLmM6Mjk3OAorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vIgorbXNnc3RyICIiCisipM+kpCgmWSlcbiIKKyKkpKSkpKgoJk4pIgorCisjOiBtZXNzYWdlLmM6MzAxMQorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIqTPpKQoJlkpXG4iCisipKSkpKSoKCZOKVxuIgorIsG0pMbK3cK4KCZBKVxuIgorIsG0pMbK/LT+KCZEKVxuIgorIqWtpeOl86W7pesoJkMpIgorCisjOiBtZXNzYWdlLmM6MzA1MgorbXNnaWQgIlNhdmUgRmlsZSBkaWFsb2ciCittc2dzdHIgIqXVpaGlpKXryt3CuKXApaSloqXtpbAiCisKKyM6IG1lc3NhZ2UuYzozMDU0Cittc2dpZCAiT3BlbiBGaWxlIGRpYWxvZyIKK21zZ3N0ciAipdWloaWkpevGybn+pcClpKWipe2lsCIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzozMTI1Cittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIkUzMzg6IKWzpfOlvaG8peul4qG8pcmkx6TPpdWloaWkpeul1qXppaaltqTyu8ikqKTepLuk8ywgpLSk4aTzpMqktaSkIgorCisjOiBtaXNjMS5jOjI3NzMKK21zZ2lkICJXMTA6IFdhcm5pbmc6IENoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSIKK21zZ3N0ciAiVzEwOiC32bnwOiDGybn+wOzN0aXVpaGlpKXrpPLK0bm5pLek3qS5IgorCisjOiBtaXNjMS5jOjMwMjEKK21zZ2lkICIxIG1vcmUgbGluZSIKK21zZ3N0ciAiMSC51CDEybLDpLek3qS3pL8iCisKKyM6IG1pc2MxLmM6MzAyMworbXNnaWQgIjEgbGluZSBsZXNzIgorbXNnc3RyICIxILnUILrvvfykt6TepLekvyIKKworIzogbWlzYzEuYzozMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgorbXNnc3RyICIlbGQgudQgxMmyw6S3pN6kt6S/IgorCisjOiBtaXNjMS5jOjMwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGZld2VyIGxpbmVzIgorbXNnc3RyICIlbGQgudQguu+9/KS3pN6kt6S/IgorCisjOiBtaXNjMS5jOjMwMzMKK21zZ2lkICIgKEludGVycnVwdGVkKSIKK21zZ3N0ciAiICiz5Ln+pN6k7KTepLekvykiCisKKyM6IG1pc2MxLmM6NzU4MgorbXNnaWQgIlZpbTogcHJlc2VydmluZyBmaWxlcy4uLlxuIgorbXNnc3RyICJWaW06IKXVpaGlpKXrpPLK3cK4w+YuLi5cbiIKKworIy4gY2xvc2UgYWxsIG1lbWZpbGVzLCB3aXRob3V0IGRlbGV0aW5nCisjOiBtaXNjMS5jOjc1OTIKK21zZ2lkICJWaW06IEZpbmlzaGVkLlxuIgorbXNnc3RyICJWaW06IL2qzrukt6TepLekvy5cbiIKKworIzogbWlzYzIuYzo2OTUgbWlzYzIuYzo3MTEKK21zZ2lkICJFUlJPUjogIgorbXNnc3RyICKlqKXpobw6ICIKKworIzogbWlzYzIuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJbpeGl4qXqKKXQpaSlyCldIMHts+TF9i2y8sr8zswgJWx1LSVsdSwgu8jN0c7MICVsdSwgpdShvKWvu/4gJWx1XG4iCisKKyM6IG1pc2MyLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJbY2FsbHNdIHRvdGFsIHJlL21hbGxvYygpJ3MgJWx1LCB0b3RhbCBmcmVlKCkncyAlbHVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlu4xr3QXSDB7SByZS9tYWxsb2MoKSCy87/0ICVsdSwgwe0gZnJlZSgpILLzv/QgJWx1XG4iCisiXG4iCisKKyM6IG1pc2MyLmM6NzcyCittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDogudSkrMS5pK+kyqTqpLmkrqTepLekvyIKKworIzogbWlzYzIuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MTogSW50ZXJuYWwgZXJyb3I6IGxhbGxvYyglbGQsICkiCittc2dzdHIgIkUzNDE6IMbiyfSlqKXpobw6IGxhbGxvYyglbGQsKSIKKworIzogbWlzYzIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MjogT3V0IG9mIG1lbW9yeSEgIChhbGxvY2F0aW5nICVsdSBieXRlcykiCittc2dzdHIgIkUzNDI6IKXhpeKl6qSswq2k6qTepLuk8yEgICglbHUgpdClpKXIpPKz5MX2zde14SkiCisKKyM6IG1pc2MyLmM6MjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAivMK51KTOpL+k4aTLpbelp6XrpPK4xr3QpLfD5jogXCIlc1wiIgorCisjOiBtaXNjMi5jOjI4MTUKK21zZ2lkICJFNTQ1OiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTQ1OiCls6XtpfOkrKSipOqk3qS7pPMiCisKKyM6IG1pc2MyLmM6MjgxNyBtaXNjMi5jOjI4NDQKK21zZ2lkICJFNTQ2OiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkU1NDY6IMnUwLWkyqXiobylyaTHpLkiCisKKyM6IG1pc2MyLmM6Mjg4MworbXNnaWQgIkU1NDc6IElsbGVnYWwgbW91c2VzaGFwZSIKK21zZ3N0ciAiRTU0NzogydTAtaTKICdtb3VzZXNoYXBlJyCkx6S5IgorCisjOiBtaXNjMi5jOjI5MjMKK21zZ2lkICJFNTQ4OiBkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAiRTU0ODogv/TDzaSsyazN16THpLkiCisKKyM6IG1pc2MyLmM6MjkyOAorbXNnaWQgIkU1NDk6IElsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAiRTU0OTogydTAtaTKpdGhvKW7pfOlxqG8pbikx6S5IgorCisjOiBtaXNjMi5jOjMyMzgKK21zZ2lkICJFbnRlciBlbmNyeXB0aW9uIGtleTogIgorbXNnc3RyICKwxbnmsr3N0aTOpa2hvKTyxv7Oz6S3pMakr6TApLWkpDogIgorCisjOiBtaXNjMi5jOjMyMzkKK21zZ2lkICJFbnRlciBzYW1lIGtleSBhZ2FpbjogIgorbXNnc3RyICKk4qSmsOzF2caxpLilraG8pPLG/s7PpLekxqSvpMCktaSkOiAiCisKKyM6IG1pc2MyLmM6MzI0OQorbXNnaWQgIktleXMgZG9uJ3QgbWF0Y2ghIgorbXNnc3RyICKlraG8pKyw7MPXpLek3qS7pPMiCisKKyM6IG1pc2MyLmM6Mzc5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTM0MzogSW52YWxpZCBwYXRoOiAnKipbbnVtYmVyXScgbXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIG9yIGJlICIKKyJmb2xsb3dlZCBieSAnJXMnLiIKK21zZ3N0ciAiIgorIkUzNDM6IMy1uPqkyqXRpbmkx6S5OiAnKipbv/TDzV0nIKTPcGF0aKTOuse45aSrICclcycgIgorIqSswrOkpKTGpMqkpKTIpKSksaTepLuk8y4iCisKKyM6IG1pc2MyLmM6NTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ0OiBDYW4ndCBmaW5kIGRpcmVjdG9yeSBcIiVzXCIgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ0OiBjZHBhdGiky6TPIFwiJXNcIiCkyKSkpKal1aWhpaSl66SspKKk6qTepLuk8yIKKworIzogbWlzYzIuYzo1MDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDU6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NTogcGF0aKTLpM8gXCIlc1wiIKTIpKSkpqXVpaGlpKXrpKykoqTqpN6ku6TzIgorCisjOiBtaXNjMi5jOjUwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NjogTm8gbW9yZSBkaXJlY3RvcnkgXCIlc1wiIGZvdW5kIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NjogY2RwYXRopMukz6SzpOywyr7lIFwiJXNcIiCkyKSkpKal1aWhpaSl66SspKKk6qTepLuk8yIKKworIzogbWlzYzIuYzo1MDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDc6IE5vIG1vcmUgZmlsZSBcIiVzXCIgZm91bmQgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NzogpdGluaTLpM+ks6TssMq+5SBcIiVzXCIgpMikpKSmpdWloaWkpeukrKSipOqk3qS7pPMiCisKKyM6IG1pc2MyLmM6NTMyMworbXNnaWQgIkU1NTA6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1NTA6IKWzpe2l86SspKKk6qTepLuk8yIKKworIzogbWlzYzIuYzo1MzM1Cittc2dpZCAiRTU1MTogSWxsZWdhbCBjb21wb25lbnQiCittc2dzdHIgIkU1NTE6IMnUwLWkyrm9yrjN18HHpMekuSIKKworIzogbWlzYzIuYzo1MzQzCittc2dpZCAiRTU1MjogZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgIkU1NTI6IL/0w82krMmszdekx6S5IgorCisjLiBHZXQgaGVyZSB3aGVuIHRoZSBzZXJ2ZXIgY2FuJ3QgYmUgZm91bmQuCisjOiBuZXRiZWFucy5jOjM5NgorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zICMyIgorbXNnc3RyICJOZXRiZWFucyAjMiCky8DcwrOkx6StpN6ku6TzIgorCisjOiBuZXRiZWFucy5jOjQwNAorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zIgorbXNnc3RyICJOZXRiZWFucyCky8DcwrOkx6StpN6ku6TzIgorCisjOiBuZXRiZWFucy5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY4OiBXcm9uZyBhY2Nlc3MgbW9kZSBmb3IgTmV0QmVhbnMgY29ubmVjdGlvbiBpbmZvIGZpbGU6IFwiJXNcIiIKK21zZ3N0ciAiIgorIkU2Njg6IE5ldEJlYW5zpM7A3MKzvvDK86XVpaGlpKXrpM6loqWvpbuluaXiobylyaTLzOTC6qSspKKk6qTepLk6IFwiJXNcIiIKKworIzogbmV0YmVhbnMuYzo3NDkKK21zZ2lkICJyZWFkIGZyb20gTmV0YmVhbnMgc29ja2V0IgorbXNnc3RyICJOZXRiZWFucyCkzqW9pbGlw6XIpPLGybn+pN8iCisKKyM6IG5ldGJlYW5zLmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjU4OiBOZXRCZWFucyBjb25uZWN0aW9uIGxvc3QgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU2NTg6IKXQpcOl1aWhICVsZCCkziBOZXRCZWFucyDA3MKzpKy8uqTvpOyk3qS3pL8iCisKKyM6IG5vcm1hbC5jOjI5ODAKK21zZ2lkICJXYXJuaW5nOiB0ZXJtaW5hbCBjYW5ub3QgaGlnaGxpZ2h0IgorbXNnc3RyICK32bnwOiC7yM3RpLekxqSkpOvDvMv2pM+lz6WkpemlpKXIpMekraTepLuk8yIKKworIzogbm9ybWFsLmM6MzI3NgorbXNnaWQgIkUzNDg6IE5vIHN0cmluZyB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDg6IKWrobylvaXrpM6wzMPWpMukz8q4u/rO86SspKKk6qTepLuk8yIKKworIzogbm9ybWFsLmM6MzI3OAorbXNnaWQgIkUzNDk6IE5vIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ5OiClq6G8pb2l66TOsMzD1qTLpM+8scrMu9KkrKSipOqk3qS7pPMiCisKKyM6IG5vcm1hbC5jOjQ1MTkKK21zZ2lkICJFMzUyOiBDYW5ub3QgZXJhc2UgZm9sZHMgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MjoguL2636TOICdmb2xkbWV0aG9kJyCkx6TPwN6+9qTfpPK+w7XupMekraTepLuk8yIKKworIzogbm9ybWFsLmM6NjcwOAorbXNnaWQgIkU2NjQ6IGNoYW5nZWxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkU2NjQ6IMrRubml6qW5pcikrLb1pMekuSIKKworIzogbm9ybWFsLmM6NjcxMAorbXNnaWQgIkU2NjI6IEF0IHN0YXJ0IG9mIGNoYW5nZWxpc3QiCittc2dzdHIgIkU2NjI6IMrRubml6qW5pcikzsDoxqwiCisKKyM6IG5vcm1hbC5jOjY3MTIKK21zZ2lkICJFNjYzOiBBdCBlbmQgb2YgY2hhbmdlbGlzdCIKK21zZ3N0ciAiRTY2MzogytG5uaXqpbmlyKTOy/bI+CIKKworIzogbm9ybWFsLmM6Nzk3MworbXNnaWQgIlR5cGUgIDpxdWl0PEVudGVyPiAgdG8gZXhpdCBWaW0iCittc2dzdHIgIlZpbaTyvarOu6S5pOuky6TPIDpxdWl0PEVudGVyPiCkyMb+zs+kt6TGpK+kwKS1pKQiCisKKyM6IG9wcy5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAxIHRpbWUiCittc2dzdHIgIjEgudSkrCAlcyCkxyAxILLzvejN/aS1pOyk3qS3pL8iCisKKyM6IG9wcy5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiMSC51KSsICVzIKTHICVkILLzvejN/aS1pOyk3qS3pL8iCisKKyM6IG9wcy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAxIHRpbWUiCittc2dzdHIgIiVsZCC51KSsICVzIKTHIDEgsvO96M39pLWk7KTepLekvyIKKworIzogb3BzLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIlbGQgudSkrCAlcyCkxyAlZCCy873ozf2ktaTspN6kt6S/IgorCisjOiBvcHMuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHRvIGluZGVudC4uLiAiCittc2dzdHIgIiVsZCC51KSspaSl86XHpfOlyKS1pOyk3qS5Li4uICIKKworIzogb3BzLmM6NzEyCittc2dpZCAiMSBsaW5lIGluZGVudGVkICIKK21zZ3N0ciAiMSC51KTypaSl86XHpfOlyKS3pN6kt6S/IgorCisjOiBvcHMuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAiJWxkILnUpPKlpKXzpcel86XIpLek3qS3pL8iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNjc1Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgIqXkpfOlr6THpK2k3qS7pPM7IKTIpMukq6SvvsO17iIKKworIzogb3BzLmM6MjE4NQorbXNnaWQgIjEgbGluZSBjaGFuZ2VkIgorbXNnc3RyICIxILnUpKzK0bm5pLWk7KTepLekvyIKKworIzogb3BzLmM6MjE4NworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgY2hhbmdlZCIKK21zZ3N0ciAiJWxkILnUpKzK0bm5pLWk7KTepLekvyIKKworIzogb3BzLmM6MjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmcmVlaW5nICVsZCBsaW5lcyIKK21zZ3N0ciAiJWxkILnUpPKzq8r8w+YiCisKKyM6IG9wcy5jOjI4NTIKK21zZ2lkICIxIGxpbmUgeWFua2VkIgorbXNnc3RyICIxILnUpKyl5KXzpa+ktaTspN6kt6S/IgorCisjOiBvcHMuYzoyODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgIiVsZCC51KSspeSl86WvpLWk7KTepLekvyIKKworIzogb3BzLmM6MzEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiCl7KW4pbmlvyAlcyCky6TPsr+k4qSipOqk3qS7pPMiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogb3BzLmM6MzY5MAorbXNnaWQgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSCl7KW4pbmlvyAtLS0iCisKKyM6IG9wcy5jOjQ5OTcKK21zZ2lkICJJbGxlZ2FsIHJlZ2lzdGVyIG5hbWUiCittc2dzdHIgIsnUwLWkyqXspbiluaW/zL4iCisKKyM6IG9wcy5jOjUwODUKK21zZ2lkICIiCisiXG4iCisiIyBSZWdpc3RlcnM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIKXspbiluaW/OlxuIgorCisjOiBvcHMuYzo1MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzQ6IFVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIKK21zZ3N0ciAiRTU3NDogzKTDzqTOpeyluKW5pb+3vyAlZCCkx6S5IgorCisjOiBvcHMuYzo1NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTQ6IEludmFsaWQgcmVnaXN0ZXIgbmFtZTogJyVzJyIKK21zZ3N0ciAiRTM1NDogzLW4+qTKpeyluKW5pb/MvjogJyVzJyIKKworIzogb3BzLmM6NTk4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgQ29sczsgIgorbXNnc3RyICIlbGQgzvM7ICIKKworIzogb3BzLmM6NTk4NworIywgYy1mb3JtYXQKK21zZ2lkICJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiCittc2dzdHIgIsGqwvIgJXMlbGQgLyAlbGQgudQ7ICVsZCAvICVsZCDDsbjsOyAlbGQgLyAlbGQgyri7+iIKKworIzogb3BzLmM6NjAwMworIywgYy1mb3JtYXQKK21zZ2lkICJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiCittc2dzdHIgIs7zICVzIC8gJXM7ILnUICVsZCBvZiAlbGQ7IMOxuOwgJWxkIC8gJWxkOyDKuLv6ICVsZCAvICVsZCIKKworIzogb3BzLmM6NjAxNAorIywgYy1mb3JtYXQKK21zZ2lkICIoKyVsZCBmb3IgQk9NKSIKK21zZ3N0ciAiKCslbGQgZm9yIEJPTSkiCisKKyM6IG9wdGlvbi5jOjE2NDMKK21zZ2lkICIlPCVmJWglbSU9UGFnZSAlTiIKK21zZ3N0ciAiJTwlZiVoJW0lPSVOIKXaobyluCIKKworIzogb3B0aW9uLmM6MjA5MgorbXNnaWQgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIKK21zZ3N0ciAiVmltIKTyu8ikw6TGpK+k7KTGpKKk6qSspMikpiIKKworIzogb3B0aW9uLmM6MzQxOSBvcHRpb24uYzozNTM1Cittc2dpZCAiRTUxODogVW5rbm93biBvcHRpb24iCittc2dzdHIgIkU1MTg6IMykw86kzqWqpdelt6XnpfOkx6S5IgorCisjOiBvcHRpb24uYzozNDMyCittc2dpZCAiRTUxOTogT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkU1MTk6IKWqpdelt6XnpfOkz6W1pd2hvKXIpLWk7KTGpKSk3qS7pPMiCisKKyM6IG9wdGlvbi5jOjM0NTcKK21zZ2lkICJFNTIwOiBOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIgorbXNnc3RyICJFNTIwOiBtb2RlbGluZSCkx6TPtfayxKS1pOyk3qS7pPMiCisKKyM6IG9wdGlvbi5jOjM1MjIKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0TGFzdCBzZXQgZnJvbSAiCisKKyM6IG9wdGlvbi5jOjM2NjEKK21zZ2lkICJFNTIxOiBOdW1iZXIgcmVxdWlyZWQgYWZ0ZXIgPSIKK21zZ3N0ciAiRTUyMTogPSCkzrjlpMukz7/0u/qkrMmszdekx6S5IgorCisjOiBvcHRpb24uYzozOTg5IG9wdGlvbi5jOjQ2MTkKK21zZ2lkICJFNTIyOiBOb3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTUyMjogdGVybWNhcCDG4qTLpN+kxKSrpOqk3qS7pPMiCisKKyM6IG9wdGlvbi5jOjQwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOTogSWxsZWdhbCBjaGFyYWN0ZXIgPCVzPiIKK21zZ3N0ciAiRTUzOTogydTAtaTKyri7+qTHpLkgPCVzPiIKKworIzogb3B0aW9uLmM6NDYxMQorbXNnaWQgIkU1Mjk6IENhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiRTUyOTogJ3Rlcm0nIKTLpM+29cq4u/rO86TywN/E6qTHpK2k3qS7pPMiCisKKyM6IG9wdGlvbi5jOjQ2MTQKK21zZ2lkICJFNTMwOiBDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICJFNTMwOiBHVUmkx6TPICd0ZXJtJyCk8srRubmkx6StpN6ku6TzIgorCisjOiBvcHRpb24uYzo0NjE2Cittc2dpZCAiRTUzMTogVXNlIFwiOmd1aVwiIHRvIHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkU1MzE6IEdVSaTypbmlv6G8pcikuaTrpMukzyBcIjpndWlcIiCk8rvIzdGkt6TGpK+kwKS1pKQiCisKKyM6IG9wdGlvbi5jOjQ2NDUKK21zZ2lkICJFNTg5OiAnYmFja3VwZXh0JyBhbmQgJ3BhdGNobW9kZScgYXJlIGVxdWFsIgorbXNnc3RyICJFNTg5OiAnYmFja3VwZXh0JyCkyCAncGF0Y2htb2RlJyCkrMaxpLikx6S5IgorCisjOiBvcHRpb24uYzo0ODYwCittc2dpZCAiRTYxNzogQ2Fubm90IGJlIGNoYW5nZWQgaW4gdGhlIEdUSysgMiBHVUkiCittc2dzdHIgIkU2MTc6IEdUSysyIEdVSaTHpM/K0bm5pMekraTepLuk8yIKKworIzogb3B0aW9uLmM6NTAxNgorbXNnaWQgIkU1MjQ6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1MjQ6IKWzpe2l86SspKKk6qTepLuk8yIKKworIzogb3B0aW9uLmM6NTAxOAorbXNnaWQgIkU1MjU6IFplcm8gbGVuZ3RoIHN0cmluZyIKK21zZ3N0ciAiRTUyNTogyri7+s7zpM7EuaS1pKylvKXtpMekuSIKKworIzogb3B0aW9uLmM6NTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTI2OiBNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICJFNTI2OiA8JXM+IKTOuOWky7/0u/qkrKSipOqk3qS7pPMiCisKKyM6IG9wdGlvbi5jOjUxMDAKK21zZ2lkICJFNTI3OiBNaXNzaW5nIGNvbW1hIgorbXNnc3RyICJFNTI3OiClq6Xzpd6krKSipOqk3qS7pPMiCisKKyM6IG9wdGlvbi5jOjUxMDcKK21zZ2lkICJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJFNTI4OiAnIKTOw82k8rvYxOqkt6TKpLGk7KTQpMqk6qTepLuk8yIKKworIzogb3B0aW9uLmM6NTE0OAorbXNnaWQgIkU1OTU6IGNvbnRhaW5zIHVucHJpbnRhYmxlIG9yIHdpZGUgY2hhcmFjdGVyIgorbXNnc3RyICJFNTk1OiDJvbyopMekraTKpKTKuLv6pKul76WkpcnKuLv6pPK03qTzpMekpKTepLkiCisKKyM6IG9wdGlvbi5jOjUxOTcKK21zZ2lkICJFNTk2OiBJbnZhbGlkIGZvbnQocykiCittc2dzdHIgIkU1OTY6IMy1uPqkyqXVpaml86XIpMekuSIKKworIzogb3B0aW9uLmM6NTIwNQorbXNnaWQgIkU1OTc6IGNhbid0IHNlbGVjdCBmb250c2V0IgorbXNnc3RyICJFNTk3OiCl1aWppfOlyKW7pcOlyKTywarC8qTHpK2k3qS7pPMiCisKKyM6IG9wdGlvbi5jOjUyMDcKK21zZ2lkICJFNTk4OiBJbnZhbGlkIGZvbnRzZXQiCittc2dzdHIgIkU1OTg6IMy1uPqkyqXVpaml86XIpbulw6XIpMekuSIKKworIzogb3B0aW9uLmM6NTIxNAorbXNnaWQgIkU1MzM6IGNhbid0IHNlbGVjdCB3aWRlIGZvbnQiCittc2dzdHIgIkU1MzM6IKXvpaSlyaXVpaml86XIpPLBqsLypMekraTepLuk8yIKKworIzogb3B0aW9uLmM6NTIxNgorbXNnaWQgIkU1MzQ6IEludmFsaWQgd2lkZSBmb250IgorbXNnc3RyICJFNTM0OiDMtbj6pMql76Wkpcml1aWppfOlyKTHpLkiCisKKyM6IG9wdGlvbi5jOjU0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgPCVjPiIKK21zZ3N0ciAiRTUzNTogPCVjPiCkzrjlpMvJ1MC1pMrKuLv6pKykoqTqpN6kuSIKKworIzogb3B0aW9uLmM6NTU5NworbXNnaWQgIkU1MzY6IGNvbW1hIHJlcXVpcmVkIgorbXNnc3RyICJFNTM2OiClq6Xzpd6krMmszdekx6S5IgorCisjOiBvcHRpb24uYzo1NjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1Mzc6ICdjb21tZW50c3RyaW5nJyBtdXN0IGJlIGVtcHR5IG9yIGNvbnRhaW4gJXMiCittc2dzdHIgIkU1Mzc6ICdjb21tZW50c3RyaW5nJyCkz7b1pMekoqTrpKsgJXMgpPK03qTgyazN16SspKKk6qTepLkiCisKKyM6IG9wdGlvbi5jOjU2NzkKK21zZ2lkICJFNTM4OiBObyBtb3VzZSBzdXBwb3J0IgorbXNnc3RyICJFNTM4OiCl3qWmpbmkz6W1pd2hvKXIpLWk7KTepLuk8yIKKworIzogb3B0aW9uLmM6NTk0NworbXNnaWQgIkU1NDA6IFVuY2xvc2VkIGV4cHJlc3Npb24gc2VxdWVuY2UiCittc2dzdHIgIkU1NDA6ILywpKy9qs67pLekxqSkpN6ku6TzIgorCisjOiBvcHRpb24uYzo1OTUxCittc2dpZCAiRTU0MTogdG9vIG1hbnkgaXRlbXMiCittc2dzdHIgIkU1NDE6IM3XwcekrMK/pLmkrqTepLkiCisKKyM6IG9wdGlvbi5jOjU5NTMKK21zZ2lkICJFNTQyOiB1bmJhbGFuY2VkIGdyb3VwcyIKK21zZ3N0ciAiRTU0MjogpbCl66G8pdekrMTgueekpKTepLuk8yIKKworIzogb3B0aW9uLmM6NjE5MworbXNnaWQgIkU1OTA6IEEgcHJldmlldyB3aW5kb3cgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU1OTA6IKXXpeyl06XlobylpqWjpfOlyaWmpKy0+6TLwri636S3pN6kuSIKKworIzogb3B0aW9uLmM6NjQ1MAorbXNnaWQgIlcxNzogQXJhYmljIHJlcXVpcmVzIFVURi04LCBkbyAnOnNldCBlbmNvZGluZz11dGYtOCciCittc2dzdHIgIiIKKyJXMTc6IKWipeml06Wiyri7+qTLpM9VVEYtOKSsyazN16TKpM6kxywgJzpzZXQgZW5jb2Rpbmc9dXRmLTgnIKS3pMakr6TApLWkpCIKKworIzogb3B0aW9uLmM6Njc3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTkzOiBOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJFNTkzOiC6x8TjICVkIKTOudS/9KSsyazN16THpLkiCisKKyM6IG9wdGlvbi5jOjY3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU5NDogTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIgorbXNnc3RyICJFNTk0OiC6x8TjICVkIKTOpaul6aXgyf2krMmszdekx6S5IgorCisjOiBvcHRpb24uYzo3MDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTU6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTM1NTogzKTDzqTOpaql16W3peel86THpLk6ICVzIgorCisjOiBvcHRpb24uYzo3MjEzCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBjb2RlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gw7zL9qWzobylySAtLS0iCisKKyM6IG9wdGlvbi5jOjcyMTUKK21zZ2lkICIiCisiXG4iCisiLS0tIEdsb2JhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSClsKXtobyl0KXrpaql16W3peel88PNIC0tLSIKKworIzogb3B0aW9uLmM6NzIxNworbXNnaWQgIiIKKyJcbiIKKyItLS0gTG9jYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gpe2hvKWrpeulqqXXpbel56Xzw80gLS0tIgorCisjOiBvcHRpb24uYzo3MjE5Cittc2dpZCAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSClqqXXpbel56XzIC0tLSIKKworIzogb3B0aW9uLmM6NzkyNQorbXNnaWQgIkUzNTY6IGdldF92YXJwIEVSUk9SIgorbXNnc3RyICJFMzU2OiBnZXRfdmFycCClqKXpobwiCisKKyM6IG9wdGlvbi5jOjg4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NzogJ2xhbmdtYXAnOiBNYXRjaGluZyBjaGFyYWN0ZXIgbWlzc2luZyBmb3IgJXMiCittc2dzdHIgIkUzNTc6ICdsYW5nbWFwJzogJXMgpMvC0LH+pLmk68q4u/qkrKSipOqk3qS7pPMiCisKKyM6IG9wdGlvbi5jOjg5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1ODogJ2xhbmdtYXAnOiBFeHRyYSBjaGFyYWN0ZXJzIGFmdGVyIHNlbWljb2xvbjogJXMiCittc2dzdHIgIkUzNTg6ICdsYW5nbWFwJzogpbul36Wzpe2l86TOuOWky82+yqykysq4u/qkrKSipOqk3qS5OiAlcyIKKworIzogb3NfYW1pZ2EuYzoyODAKK21zZ2lkICJjYW5ub3Qgb3BlbiAiCittc2dzdHIgIrOrpLGk3qS7pPMgIgorCisjOiBvc19hbWlnYS5jOjMxNAorbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIlZJTTogpaalo6XzpcmlpqTys6uksaTepLuk8yFcbiIKKworIzogb3NfYW1pZ2EuYzozMzgKK21zZ2lkICJOZWVkIEFtaWdhZG9zIHZlcnNpb24gMi4wNCBvciBsYXRlclxuIgorbXNnc3RyICJBbWlnYWRvc6TOpdChvKW4peel8yAyLjA0pKukvaTssMq536SsyazN16THpLlcbiIKKworIzogb3NfYW1pZ2EuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICIlcyCkzqXQobyluKXnpfMgJWxkIKSsyazN16THpLlcbiIKKworIzogb3NfYW1pZ2EuYzo0MTYKK21zZ2lkICJDYW5ub3Qgb3BlbiBOSUw6XG4iCittc2dzdHIgIk5JTKTys6uksaTepLuk8zpcbiIKKworIzogb3NfYW1pZ2EuYzo0MjcKK21zZ2lkICJDYW5ub3QgY3JlYXRlICIKK21zZ3N0ciAiuu7ArqTHpK2k3qS7pPMgIgorCisjOiBvc19hbWlnYS5jOjkwNQorIywgYy1mb3JtYXQKK21zZ2lkICJWaW0gZXhpdGluZyB3aXRoICVkXG4iCittc2dzdHIgIlZpbaTPICVkIKTHvarOu6S3pN6kuVxuIgorCisjOiBvc19hbWlnYS5jOjkzNworbXNnaWQgImNhbm5vdCBjaGFuZ2UgY29uc29sZSBtb2RlID8hXG4iCittc2dzdHIgIqWzpfOlvaG8peul4qG8pcmk8srRubmkx6StpN6ku6TzPyFcbiIKKworIzogb3NfYW1pZ2EuYzoxMDAzCittc2dpZCAibWNoX2dldF9zaGVsbHNpemU6IG5vdCBhIGNvbnNvbGU/P1xuIgorbXNnc3RyICJtY2hfZ2V0X3NoZWxsc2l6ZTogpbOl86W9obyl66THpM+kyqSkPz9cbiIKKworIy4gaWYgVmltIG9wZW5lZCBhIHdpbmRvdzogRXhlY3V0aW5nIGEgc2hlbGwgbWF5IGNhdXNlIGNyYXNoZXMKKyM6IG9zX2FtaWdhLmM6MTE1MgorbXNnaWQgIkUzNjA6IENhbm5vdCBleGVjdXRlIHNoZWxsIHdpdGggLWYgb3B0aW9uIgorbXNnc3RyICJFMzYwOiAtZiClqqXXpbel56XzpMelt6Wnpeuk8rzCudSkx6StpN6ku6TzIgorCisjOiBvc19hbWlnYS5jOjExOTMgb3NfYW1pZ2EuYzoxMjgzCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICK8wrnUpMekraTepLuk8yAiCisKKyM6IG9zX2FtaWdhLmM6MTE5NiBvc19hbWlnYS5jOjEyOTMKK21zZ2lkICJzaGVsbCAiCittc2dzdHIgIqW3pael6yAiCisKKyM6IG9zX2FtaWdhLmM6MTIxNiBvc19hbWlnYS5jOjEzMTgKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiIMzhpOqk3qS3pL9cbiIKKworIzogb3NfYW1pZ2EuYzoxNDU5Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSCkrL6upLWkuaSupN6kuS4iCisKKyM6IG9zX2FtaWdhLmM6MTQ2MworbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAixv690M7Ppail6aG8IgorCisjOiBvc19tc3dpbi5jOjUzOQorbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICIuLi4ovsrOrCkiCisKKyM6IG9zX21zd2luLmM6NjQxCittc2dpZCAiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIidjb2x1bW5zJyCkrDgwpMekz6TKpKSkv6ThLCCzsMn0pbOl3qXzpcmk8rzCudSkx6StpN6ku6TzIgorCisjOiBvc19tc3dpbi5jOjE5NzMKK21zZ2lkICJFMjM3OiBQcmludGVyIHNlbGVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkUyMzc6IKXXpeql86W/pM7BqsLypMu8usfUpLek3qS3pL8iCisKKyM6IG9zX21zd2luLmM6MjAxMworIywgYy1mb3JtYXQKK21zZ2lkICJ0byAlcyBvbiAlcyIKK21zZ3N0ciAiJXMgpNggKCVzIL7lpM4pIgorCisjOiBvc19tc3dpbi5jOjIwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMzogVW5rbm93biBwcmludGVyIGZvbnQ6ICVzIgorbXNnc3RyICJFNjEzOiDMpMPOpM6l16XqpfOlv6Wqpdelt6XnpfOkx6S5OiAlcyIKKworIzogb3NfbXN3aW4uYzoyMDc3IG9zX21zd2luLmM6MjA4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM4OiBQcmludCBlcnJvcjogJXMiCittc2dzdHIgIkUyMzg6ILD1uv6lqKXpobw6ICVzIgorCisjOiBvc19tc3dpbi5jOjIwODgKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICLJ1MzAIgorCisjOiBvc19tc3dpbi5jOjIxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAisPW6/qS3pMakpKTepLk6ICclcyciCisKKyM6IG9zX21zd2luLmM6MzIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDogyri7+qW7pcOlyMy+IFwiJXNcIiCkz8nUwLWkx6S5ICil1aWppfOlyMy+IFwiJXNcIikiCisKKyM6IG9zX21zd2luLmM6MzIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ1OiBJbGxlZ2FsIGNoYXIgJyVjJyBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ1OiAnJWMnIKTPydTAtaTKyri7+qTHpLkgKKXVpaml86XIzL4gXCIlc1wiKSIKKworIzogb3NfcmlzY29zLmM6MTI1OQorbXNnaWQgIkUzNjY6IEludmFsaWQgJ29zZmlsZXR5cGUnIG9wdGlvbiAtIHVzaW5nIFRleHQiCittc2dzdHIgIkUzNjY6IMy1uPqkyiAnb3NmaWxldHlwZScgpaql16W3peel8yAtIFwiVGV4dFwiIKTyu8ikpKTepLkiCisKKyM6IG9zX3VuaXguYzo5MjcKK21zZ2lkICJWaW06IERvdWJsZSBzaWduYWwsIGV4aXRpbmdcbiIKK21zZ3N0ciAiVmltOiAyvcWkzqW3pbClyqXrpM6kv6ThLCC9qs67pLek3qS5XG4iCisKKyM6IG9zX3VuaXguYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IMPXzL/FqqW3pbClyqXrICVzIKTyuKHDzqS3pN6kt6S/XG4iCisKKyM6IG9zX3VuaXguYzo5MzYKK21zZ2lkICJWaW06IENhdWdodCBkZWFkbHkgc2lnbmFsXG4iCittc2dzdHIgIlZpbTogw9fMv8WqpbelsKXKpeuk8rihw86kt6TepLekv1xuIgorCisjOiBvc191bml4LmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAiWKW1obyl0KTYpM7A3MKzpMsgJWxkIKXfperJw6SrpKuk6qTepLekvyIKKworIzogb3NfdW5peC5jOjEyMjYKK21zZ2lkICIiCisiXG4iCisiVmltOiBHb3QgWCBlcnJvclxuIgorbXNnc3RyICIiCisiXG4iCisiVmltOiBYIKTOpail6aG8pPK4ob3QpLek3qS3pL9yXG4iCisKKyM6IG9zX3VuaXguYzoxMzM0Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiWCBkaXNwbGF5IKTOpcGlp6XDpa+ky7y6x9Skt6TepLekvyIKKworIzogb3NfdW5peC5jOjE0NzMKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IgorbXNnc3RyICJYIGRpc3BsYXkgpM4gb3BlbiCkrKW/paSl4KWipaalyKS3pN6kt6S/IgorCisjOiBvc191bml4LmM6MzIyNyBvc191bml4LmM6MzkwNworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCAiCittc2dzdHIgIiIKKyJcbiIKKyKlt6Wnpeuk8rzCudSkx6StpN6ku6TzICIKKworIzogb3NfdW5peC5jOjMyNzUKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgc2hcbiIKK21zZ3N0ciAiIgorIlxuIgorInNoIKW3pael66TyvMK51KTHpK2k3qS7pPNcbiIKKworIzogb3NfdW5peC5jOjMyNzkgb3NfdW5peC5jOjM5MTMKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisipbelp6XrpKzDzaTyytakt6TepLekvyAiCisKKyM6IG9zX3VuaXguYzozNDE0Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIqXRpaSl16Tyuu7ArqTHpK2k3qS7pPNcbiIKKworIzogb3NfdW5peC5jOjM0MjkKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGZvcmtcbiIKK21zZ3N0ciAiIgorIlxuIgorImZvcmsgpMekraTepLuk81xuIgorCisjOiBvc191bml4LmM6MzkyMAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIqWzpd6l86XJpPLD5sPHpLek3qS3pL9cbiIKKworIzogb3NfdW5peC5jOjQxODQgb3NfdW5peC5jOjQzMDkgb3NfdW5peC5jOjU5NzUKK21zZ2lkICJYU01QIGxvc3QgSUNFIGNvbm5lY3Rpb24iCittc2dzdHIgIlhTTVAgpKxJQ0XA3MKzpPK8uqSkpN6kt6S/IgorCisjOiBvc191bml4LmM6NTU1OAorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIlggZGlzcGxheSCkziBvcGVuIKTLvLrH1KS3pN6kt6S/IgorCisjOiBvc191bml4LmM6NTg4MAorbXNnaWQgIlhTTVAgaGFuZGxpbmcgc2F2ZS15b3Vyc2VsZiByZXF1ZXN0IgorbXNnc3RyICJYU01QIKSsc2F2ZS15b3Vyc2VsZs3XteGk8r3ozf2kt6TGpKSk3qS5IgorCisjOiBvc191bml4LmM6NTk5OQorbXNnaWQgIlhTTVAgb3BlbmluZyBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QIKSswNzCs6Tys6u7z6S3pMakpKTepLkiCisKKyM6IG9zX3VuaXguYzo2MDE4Cittc2dpZCAiWFNNUCBJQ0UgY29ubmVjdGlvbiB3YXRjaCBmYWlsZWQiCittc2dzdHIgIlhTTVAgSUNFwNzCs6SsvLrH1KS3pL+k6KSmpMekuSIKKworIzogb3NfdW5peC5jOjYwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICJYU01QIFNtY09wZW5Db25uZWN0aW9upKy8usfUpLek3qS3pL86ICVzIgorCisjOiBvc192bXNfbW1zLmM6NTkKK21zZ2lkICJBdCBsaW5lIgorbXNnc3RyICK51CIKKworIzogb3NfdzMyZXhlLmM6NjUKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjb21tYW5kIGxpbmUuIgorbXNnc3RyICKls6XepfOlyaXppaSl86TLpeGl4qXqpPKz5KTqxfakxqTppOyk3qS7pPMiCisKKyM6IG9zX3czMmV4ZS5jOjY2IG9zX3czMmV4ZS5jOjg5IG9zX3czMmV4ZS5jOjEwMAorbXNnaWQgIlZJTSBFcnJvciIKK21zZ3N0ciAiVklNpail6aG8IgorCisjOiBvc193MzJleGUuYzo4OQorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHZpbTMyLmRsbCEiCittc2dzdHIgInZpbTMyLmRsbCCk8qXtobylyaTHpK2k3qS7pPOkx6S3pL8iCisKKyM6IG9zX3czMmV4ZS5jOjk5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAiRExMpKuk6bTYv/Sl3aWkpfOlv6TyvOjGwKTHpK2k3qS7pPOkx6S3pL8iCisKKyM6IG9zX3dpbjE2LmM6MzQyIG9zX3dpbjMyLmM6MzE5NworIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAipbelp6XrpKyls6G8pckgJWQgpMe9qs67pLek3qS3pL8iCisKKyM6IG9zX3dpbjMyLmM6MjY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCAlcyBldmVudFxuIgorbXNnc3RyICJWaW06IKWkpdml86XIICVzIKTyuKHDzlxuIgorCisjOiBvc193aW4zMi5jOjI2NTcKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAiysSkuKTrIgorCisjOiBvc193aW4zMi5jOjI2NTkKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgIqXtpbClqqXVIgorCisjOiBvc193aW4zMi5jOjI2NjAKK21zZ2lkICJzaHV0ZG93biIKK21zZ3N0ciAipbel46XDpcilwKWmpfMiCisKKyM6IG9zX3dpbjMyLmM6MzE1MAorbXNnaWQgIkUzNzE6IENvbW1hbmQgbm90IGZvdW5kIgorbXNnc3RyICJFMzcxOiCls6XepfOlyaSspKKk6qTepLuk8yIKKworIzogb3Nfd2luMzIuYzozMTYzCittc2dpZCAiIgorIlZJTVJVTi5FWEUgbm90IGZvdW5kIGluIHlvdXIgJFBBVEguXG4iCisiRXh0ZXJuYWwgY29tbWFuZHMgd2lsbCBub3QgcGF1c2UgYWZ0ZXIgY29tcGxldGlvbi5cbiIKKyJTZWUgIDpoZWxwIHdpbjMyLXZpbXJ1biAgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiVklNUlVOLkVYRaSsICRQQVRIIKTOw+aky6TfpMSkq6TqpN6ku6TzLlxuIgorIrOwyfSls6XepfOlyaTOvarOu7jlpMuw7Lv+xOS736TypLek3qS7pPMuXG4iCisivty62aTPICA6aGVscCB3aW4zMi12aW1ydW4gIKTyu7K+yKS3pMakr6TApLWkpC4iCisKKyM6IG9zX3dpbjMyLmM6MzE2NgorbXNnaWQgIlZpbSBXYXJuaW5nIgorbXNnc3RyICJWaW2kzrfZufAiCisKKyM6IHF1aWNrZml4LmM6MjU4Cittc2dpZCAiRTM3MjogVG9vIG1hbnkgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzcyOiCl1aWpobyl3qXDpcjKuLv6zvOkyyAlJSVjIKSswr+kuaSupN6kuSIKKworIzogcXVpY2tmaXguYzoyNzEKK21zZ2lkICJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MzogpdWlqaG8pd6lw6XIyri7+s7zpMvNvbT8pLukzCAlJSVjIKSspKKk6qTepLekvyIKKworIzogcXVpY2tmaXguYzozMjUKK21zZ2lkICJFMzc0OiBNaXNzaW5nIF0gaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NDogpdWlqaG8pd6lw6XIyri7+s7zpMsgXSCkrKSipOqk3qS7pPMiCisKKyM6IHF1aWNrZml4LmM6MzM5Cittc2dpZCAiRTM3NTogVW5zdXBwb3J0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc1OiCl1aWpobyl3qXDpcjKuLv6zvOkx6TPICUlJWMgpM+ltaXdobylyKS1pOyk3qS7pPMiCisKKyM6IHF1aWNrZml4LmM6MzU3Cittc2dpZCAiRTM3NjogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmcgcHJlZml4IgorbXNnc3RyICJFMzc2OiCl1aWpobyl3qXDpcjKuLv6zvOkzsGww9aky8y1uPqkyiAlJSVjIKSspKKk6qTepLkiCisKKyM6IHF1aWNrZml4LmM6MzY1Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6IKXVpamhvKXepcOlyMq4u/rO86TLzLW4+qTKICUlJWMgpKykoqTqpN6kuSIKKworIzogcXVpY2tmaXguYzozOTEKK21zZ2lkICJFMzc4OiAnZXJyb3Jmb3JtYXQnIGNvbnRhaW5zIG5vIHBhdHRlcm4iCittc2dzdHIgIkUzNzg6ICdlcnJvcmZvcm1hdCcgpMul0aW/obyl86Ssu9jE6qS1pOykxqSkpN6ku6TzIgorCisjOiBxdWlja2ZpeC5jOjUwMQorbXNnaWQgIkUzNzk6IE1pc3Npbmcgb3IgZW1wdHkgZGlyZWN0b3J5IG5hbWUiCittc2dzdHIgIkUzNzk6IKXHpaOl7KWvpcil6sy+pKzMtaSkpKu29aTHpLkiCisKKyM6IHF1aWNrZml4LmM6OTkwCittc2dpZCAiRTU1MzogTm8gbW9yZSBpdGVtcyIKK21zZ3N0ciAiRTU1MzogzdfBx6SspOKkpqSipOqk3qS7pPMiCisKKyM6IHF1aWNrZml4LmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICIoJWQgb2YgJWQpJXMlczogIgorbXNnc3RyICIoJWQgb2YgJWQpJXMlczogIgorCisjOiBxdWlja2ZpeC5jOjEyMzEKK21zZ2lkICIgKGxpbmUgZGVsZXRlZCkiCittc2dzdHIgIiAoudSkrLrvvfyktaTspN6kt6S/KSIKKworIzogcXVpY2tmaXguYzoxNDQ0Cittc2dpZCAiRTM4MDogQXQgYm90dG9tIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgwOiBxdWlja2ZpeCCluaW/pcOlr6TOy/bI+KTHpLkiCisKKyM6IHF1aWNrZml4LmM6MTQ1MworbXNnaWQgIkUzODE6IEF0IHRvcCBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MTogcXVpY2tmaXggpbmlv6XDpa+kzsDoxqykx6S5IgorCisjOiBxdWlja2ZpeC5jOjE0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgbGlzdCAlZCBvZiAlZDsgJWQgZXJyb3JzIgorbXNnc3RyICKlqKXpobyw7M33ICVkIG9mICVkOyAlZCC4xKWopemhvCIKKworIzogcXVpY2tmaXguYzoxOTQzCittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4MjogJ2J1ZnR5cGUnIKWqpdelt6XnpfOkrMDfxOqktaTspMakpKTrpM6kx73xuf6k36TepLuk8yIKKworIzogcmVnZXhwLmM6ODM4Cittc2dpZCAiRTMzOTogUGF0dGVybiB0b28gbG9uZyIKK21zZ3N0ciAiRTMzOTogpdGlv6G8pfOkrMS5pLmkrqTepLkiCisKKyM6IHJlZ2V4cC5jOjEwMDkKK21zZ2lkICJFNTA6IFRvbyBtYW55IFxceigiCittc2dzdHIgIkU1MDogXFx6KCCkrMK/pLmkrqTepLkiCisKKyM6IHJlZ2V4cC5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUxOiBUb28gbWFueSAlcygiCittc2dzdHIgIkU1MTogJXMoIKSswr+kuaSupN6kuSIKKworIzogcmVnZXhwLmM6MTA3NworbXNnaWQgIkU1MjogVW5tYXRjaGVkIFxceigiCittc2dzdHIgIkU1MjogXFx6KCCkrMTgpOq556TDpMakpKTepLuk8yIKKworIzogcmVnZXhwLmM6MTA4MQorbXNnaWQgIkU1MzogVW5tYXRjaGVkICVzJSUoIgorbXNnc3RyICJFNTM6ICVzJSUoIKSsxOCk6rnnpMOkxqSkpN6ku6TzIgorCisjOiByZWdleHAuYzoxMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NDogVW5tYXRjaGVkICVzKCIKK21zZ3N0ciAiRTU0OiAlcyggpKzE4KTqueekw6TGpKSk3qS7pPMiCisKKyM6IHJlZ2V4cC5jOjEwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU1OiBVbm1hdGNoZWQgJXMpIgorbXNnc3RyICJFNTU6ICVzKSCkrMTgpOq556TDpMakpKTepLuk8yIKKworIzogcmVnZXhwLmM6MTI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY6ICVzKiBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTY6ICVzKiCkrLb1yri7+s7zpMukyqTrssTHvcCtpKykoqTqpN6kuSIKKworIzogcmVnZXhwLmM6MTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTc6ICVzKyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTc6ICVzKyCkrLb1yri7+s7zpMukyqTrssTHvcCtpKykoqTqpN6kuSIKKworIzogcmVnZXhwLmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzQCIKK21zZ3N0ciAiRTU5OiAlc0AgpM645aTLydTAtaTKyri7+qSspKKk6qTepLekvyIKKworIzogcmVnZXhwLmM6MTM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTg6ICVzeyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTg6ICVzeyCkrLb1yri7+s7zpMukyqTrssTHvcCtpKykoqTqpN6kuSIKKworIzogcmVnZXhwLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA6IFRvbyBtYW55IGNvbXBsZXggJXN7Li4ufXMiCittc2dzdHIgIkU2MDogyqO7qKTKICVzey4uLn0gpKzCv6S5pK6k3qS5IgorCisjOiByZWdleHAuYzoxMzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTogTmVzdGVkICVzKiIKK21zZ3N0ciAiRTYxOiVzKiCkrMb+pOy70qTLpMqkw6TGpKSk3qS5IgorCisjOiByZWdleHAuYzoxMzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjogTmVzdGVkICVzJWMiCittc2dzdHIgIkU2MjolcyVjIKSsxv6k7LvSpMukyqTDpMakpKTepLkiCisKKyMKKyM6IHJlZ2V4cC5jOjE0OTEKK21zZ2lkICJFNjM6IGludmFsaWQgdXNlIG9mIFxcXyIKK21zZ3N0ciAiRTYzOiBcXF8gpM7Mtbj6pMq7yM3Ryv3LoaTHpLkiCisKKyM6IHJlZ2V4cC5jOjE1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY0OiAlcyVjIGZvbGxvd3Mgbm90aGluZyIKK21zZ3N0ciAiRTY0OiVzJWMgpM645aTLpMqky6TipKKk6qTepLuk8yIKKworIworIzogcmVnZXhwLmM6MTU5MgorbXNnaWQgIkU2NTogSWxsZWdhbCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiRTY1OiDJ1MC1pMq45cr9u7K+yKTHpLkiCisKKyMKKyM6IHJlZ2V4cC5jOjE2MDUKK21zZ2lkICJFNjY6IFxceiggbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY2OiBcXHooIKTPpbOls6THpM+19rLEpLWk7KTGpKSk3qS7pPMiCisKKyMKKyM6IHJlZ2V4cC5jOjE2MjQKK21zZ2lkICJFNjc6IFxcejEgZXQgYWwuIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU2NzogXFx6MSCkvaTOwr6kz6WzpbOkx6TPtfayxKS1pOykxqSkpN6ku6TzIgorCisjCisjOiByZWdleHAuYzoxNjM1Cittc2dpZCAiRTY4OiBJbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXHoiCittc2dzdHIgIkU2ODogXFx6IKTOuOWky8nUwLWkysq4u/qkrKSipOqk3qS3pL8iCisKKyMKKyM6IHJlZ2V4cC5jOjE2ODQKK21zZ2lkICJFNjk6IE1pc3NpbmcgXSBhZnRlciAlcyUlWyIKK21zZ3N0ciAiRTY5OiAlcyUlWyCkzrjlpMsgXSCkrKSipOqk3qS7pPMiCisKKyM6IHJlZ2V4cC5jOjE3MDAKK21zZ2lkICJFNzA6IEVtcHR5ICVzJSVbXSIKK21zZ3N0ciAiRTcwOiAlcyUlW10gpKy29aTHpLkiCisKKyMKKyM6IHJlZ2V4cC5jOjE3NjAKK21zZ2lkICJFNzE6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzJSUiCittc2dzdHIgIkU3MTogJXMlJSCkzrjlpMvJ1MC1pMrKuLv6pKykoqTqpN6kt6S/IgorCisjOiByZWdleHAuYzoyNTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTQ6IFN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICJFNTU0OiAlc3suLi59IMbipMvKuMuhpail6aG8pKykoqTqpN6kuSIKKworIzogcmVnZXhwLmM6Mjg2MyByZWdleHAuYzozMDE2Cittc2dpZCAiRTM2MTogQ3Jhc2ggaW50ZXJjZXB0ZWQ7IHJlZ2V4cCB0b28gY29tcGxleD8iCittc2dzdHIgIkUzNjE6IKWvpemlw6W3peWky6TopOrD5sPHOyDAtbWsyb24vaSsyqO7qLLhpK6k66SrpOI/IgorCisjOiByZWdleHAuYzozMDA0IHJlZ2V4cC5jOjMwMTMKK21zZ2lkICJFMzYzOiBwYXR0ZXJuIGNhdXNlZCBvdXQtb2Ytc3RhY2sgZXJyb3IiCittc2dzdHIgIkUzNjM6IKXRpb+hvKXzpMuk6KTrpbmlv6XDpa/J1MKtpail6aG8pMekuSIKKworIzogcmVnZXhwLmM6MzI1OAorbXNnaWQgIkV4dGVybmFsIHN1Ym1hdGNoZXM6XG4iCittc2dzdHIgIrOwyfSkzsn0yqyzusX2OlxuIgorCisjOiBzY3JlZW4uYzoyMTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIistLSUzbGQgbGluZXMgZm9sZGVkICIKK21zZ3N0ciAiKy0tJTNsZCC51KSswN6+9qTepOyk3qS3pL8iCisKKyM6IHNjcmVlbi5jOjc5NTkKK21zZ2lkICIgVlJFUExBQ0UiCittc2dzdHIgIiCyvsHbw9a0uSIKKworIzogc2NyZWVuLmM6Nzk2MworbXNnaWQgIiBSRVBMQUNFIgorbXNnc3RyICIgw9a0uSIKKworIzogc2NyZWVuLmM6Nzk2OAorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIgyL/FviIKKworIzogc2NyZWVuLmM6Nzk3MAorbXNnaWQgIiBJTlNFUlQiCittc2dzdHIgIiDB3sb+IgorCisjOiBzY3JlZW4uYzo3OTczCittc2dpZCAiIChpbnNlcnQpIgorbXNnc3RyICIgKMHexv4pIgorCisjOiBzY3JlZW4uYzo3OTc1Cittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiICjD1rS5KSIKKworIzogc2NyZWVuLmM6Nzk3NworbXNnaWQgIiAodnJlcGxhY2UpIgorbXNnc3RyICIgKLK+wdvD1rS5KSIKKworIzogc2NyZWVuLmM6Nzk4MAorbXNnaWQgIiBIZWJyZXciCittc2dzdHIgIiCl2KXWpemlpCIKKworIzogc2NyZWVuLmM6Nzk5MQorbXNnaWQgIiBBcmFiaWMiCittc2dzdHIgIiCloqXppdOloiIKKworIzogc2NyZWVuLmM6Nzk5NAorbXNnaWQgIiAobGFuZykiCittc2dzdHIgIiAouMC47CkiCisKKyM6IHNjcmVlbi5jOjc5OTgKK21zZ2lkICIgKHBhc3RlKSIKK21zZ3N0ciAiICjFvaTqydWksSkiCisKKyM6IHNjcmVlbi5jOjgwMTEKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgpdOluKXlpaKl6yIKKworIzogc2NyZWVuLmM6ODAxMgorbXNnaWQgIiBWSVNVQUwgTElORSIKK21zZ3N0ciAiIKXTpbil5aWipesgudQiCisKKyM6IHNjcmVlbi5jOjgwMTMKK21zZ2lkICIgVklTVUFMIEJMT0NLIgorbXNnc3RyICIgpdOluKXlpaKl6yC267fBIgorCisjOiBzY3JlZW4uYzo4MDE0Cittc2dpZCAiIFNFTEVDVCIKK21zZ3N0ciAiIKW7peylr6XIIgorCisjOiBzY3JlZW4uYzo4MDE1Cittc2dpZCAiIFNFTEVDVCBMSU5FIgorbXNnc3RyICIgudS72Lj+warC8iIKKworIzogc2NyZWVuLmM6ODAxNgorbXNnaWQgIiBTRUxFQ1QgQkxPQ0siCittc2dzdHIgIiC267fBwarC8iIKKworIyBtc2dpZCAiIEJMT0NLIgorIyBtc2dzdHIgIiCl1qXtpcOlryIKKyMgbXNnaWQgIiBMSU5FIgorIyBtc2dzdHIgIiC51CIKKyM6IHNjcmVlbi5jOjgwMzEgc2NyZWVuLmM6ODA5NAorbXNnaWQgInJlY29yZGluZyIKK21zZ3N0ciAita3Pv8PmIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIKK21zZ3N0ciAivuWk3qTHuKG696S3pL+kzqTHsryky8zhpOqk3qS5IgorCisjOiBzZWFyY2guYzozOAorbXNnaWQgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIKK21zZ3N0ciAisryk3qTHuKG696S3pL+kzqTHvuWky8zhpOqk3qS5IgorCisjOiBzZWFyY2guYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4MzogSW52YWxpZCBzZWFyY2ggc3RyaW5nOiAlcyIKK21zZ3N0ciAiRTM4MzogzLW4+qTKuKG698q4u/rO86THpLk6ICVzIgorCisjOiBzZWFyY2guYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg0OiC+5aTepMe4obr3pLekv6SxpOykybO6xfay1b3qpM+koqTqpN6ku6TzOiAlcyIKKworIzogc2VhcmNoLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODU6IHNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NTogsryk3qTHuKG696S3pL+ksaTspMmzusX2stW96qTPpKKk6qTepLuk8zogJXMiCisKKyM6IHNlYXJjaC5jOjEyNDkKK21zZ2lkICJFMzg2OiBFeHBlY3RlZCAnPycgb3IgJy8nICBhZnRlciAnOyciCittc2dzdHIgIkUzODY6ICc7JyCkzqSipMiky6TPICc/JyCkqyAnLycgpKy0/MLUpLWk7KTGpKSk6yIKKworIzogc2VhcmNoLmM6Mzc1OAorbXNnaWQgIiAoaW5jbHVkZXMgcHJldmlvdXNseSBsaXN0ZWQgbWF0Y2gpIgorbXNnc3RyICIgKMGwpMvO87XzpLekv7O6xfay1b3qpPK03qTgKSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNzc4Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIKWkpfOlr6XrobylyaS1pOykv6XVpaGlpKXrIgorCisjOiBzZWFyY2guYzozNzgwCittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAipN+kxKSrpOqk3qS7pPMgIgorCisjOiBzZWFyY2guYzozNzgxCittc2dpZCAiaW4gcGF0aCAtLS1cbiIKK21zZ3N0ciAipdGluaTLIC0tLS1cbiIKKworIzogc2VhcmNoLmM6MzgyMAorbXNnaWQgIiAgKEFscmVhZHkgbGlzdGVkKSIKK21zZ3N0ciAiICAotPuky87ztfMpIgorCisjOiBzZWFyY2guYzozODIyCittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiAgpN+kxKSrpOqk3qS7pPMiCisKKyM6IHNlYXJjaC5jOjM4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiCittc2dzdHIgIqWkpfOlr6XrobylyaS1pOykv6XVpaGlpKXrpPKluaWtpeOl88PmOiAlcyIKKworIzogc2VhcmNoLmM6NDA5MgorbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4NzoguL2637nUpMuzusX2pKykoqTqpN6kuSIKKworIzogc2VhcmNoLmM6NDIzNQorbXNnaWQgIkFsbCBpbmNsdWRlZCBmaWxlcyB3ZXJlIGZvdW5kIgorbXNnc3RyICLBtKTGpM6lpKXzpa+l66G8pcmktaTspL+l1aWhpaSl66SspN+kxKSrpOqk3qS3pL8iCisKKyM6IHNlYXJjaC5jOjQyMzcKK21zZ2lkICJObyBpbmNsdWRlZCBmaWxlcyIKK21zZ3N0ciAipaSl86WvpeuhvKXJpdWloaWkpeukz6SipOqk3qS7pPMiCisKKyM6IHNlYXJjaC5jOjQyNTMKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IMTqtcGk8qTfpMSksaTppOyk3qS7pPMiCisKKyM6IHNlYXJjaC5jOjQyNTUKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IKXRpb+hvKXzpPKk36TEpLGk6aTspN6ku6TzIgorCisjOiBzeW50YXguYzozMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTA6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMzkwOiDJ1MC1pMqw+r/0pMekuTogJXMiCisKKyM6IHN5bnRheC5jOjMyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTE6IKS9pM6k6KSmpMq5vcq4pa+l6aW5pb+kz6SipOqk3qS7pPM6ICVzIgorCisjOiBzeW50YXguYzozMzk0Cittc2dpZCAiTm8gU3ludGF4IGl0ZW1zIGRlZmluZWQgZm9yIHRoaXMgYnVmZmVyIgorbXNnc3RyICKks6TOpdClw6XVpaGky8TqtcGktaTspL+5vcq4zdfBx6TPpKKk6qTepLuk8yIKKworIzogc3ludGF4LmM6MzQwMgorbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAiQ7jAuOzJ96WzpeGl86XIpKuk6caxtPzD5iIKKworIzogc3ludGF4LmM6MzQxMAorbXNnaWQgIm5vIHN5bmNpbmciCittc2dzdHIgIsjzxrG0/CIKKworIzogc3ludGF4LmM6MzQxMworbXNnaWQgInN5bmNpbmcgc3RhcnRzICIKK21zZ3N0ciAixrG0/LOru88gIgorCisjOiBzeW50YXguYzozNDE1IHN5bnRheC5jOjM0OTAKK21zZ2lkICIgbGluZXMgYmVmb3JlIHRvcCBsaW5lIgorbXNnc3RyICIgudTBsCilyKXDpde51KTopOqk4ikiCisKKyM6IHN5bnRheC5jOjM0MjAKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSC5vcq4xrG0/M3XwccgLS0tIgorCisjOiBzeW50YXguYzozNDI1Cittc2dpZCAiIgorIlxuIgorInN5bmNpbmcgb24gaXRlbXMiCittc2dzdHIgIiIKKyJcbiIKKyLN18HHvuWkx8axtPzD5iIKKworIzogc3ludGF4LmM6MzQzMQorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSC5vcq4zdfBxyAtLS0iCisKKyM6IHN5bnRheC5jOjM0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MjogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTI6IKS9pM6k6KSmpMq5vcq4pa+l6aW5pb+kz6SipOqk3qS7pPM6ICVzIgorCisjOiBzeW50YXguYzozNDgwCittc2dpZCAibWluaW1hbCAiCittc2dzdHIgIm1pbmltYWwiCisKKyM6IHN5bnRheC5jOjM0ODcKK21zZ2lkICJtYXhpbWFsICIKK21zZ3N0ciAibWF4aW1hbCIKKworIzogc3ludGF4LmM6MzQ5OQorbXNnaWQgIjsgbWF0Y2ggIgorbXNnc3RyICI7ILO6xfYgIgorCisjOiBzeW50YXguYzozNTAxCittc2dpZCAiIGxpbmUgYnJlYWtzIgorbXNnc3RyICIguMSkzrL+udQiCisKKyM6IHN5bnRheC5jOjQxMzUKK21zZ2lkICJFMzkzOiBncm91cFt0XWhlcmUgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTM6IKSzpLOkx6TPpbCl66G8pdekz7X2ssSktaTspN6ku6TzIgorCisjOiBzeW50YXguYzo0MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTQ6IERpZG4ndCBmaW5kIHJlZ2lvbiBpdGVtIGZvciAlcyIKK21zZ3N0ciAiRTM5NDogJXMgpM7Iz7DPzdfBx6SspN+kxKSrpOqk3qS7pPMiCisKKyM6IHN5bnRheC5jOjQxODcKK21zZ2lkICJFMzk1OiBjb250YWlucyBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NTogpLOkzr7sveqkx6TPsPq/9GNvbnRhaW5zpM+19rLEpLWk7KTGpKSk3qS7pPMiCisKKyM6IHN5bnRheC5jOjQxOTgKK21zZ2lkICJFMzk2OiBjb250YWluZWRpbiBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NjogpLOkzr7sveqkx6TPsPq/9GNvbnRhaW5lZGlupM+19rLEpLWk7KTGpKSk3qS7pPMiCisKKyM6IHN5bnRheC5jOjQyNzYKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5NzogpdWloaWkpevMvqSsyazN16THpLkiCisKKyM6IHN5bnRheC5jOjQ2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiAnPScgpKykoqTqpN6ku6TzOiAlcyIKKworIzogc3ludGF4LmM6NDc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogsPq/9KSswq2k6qTepLuk8zogub3KuMjPsM8gJXMiCisKKyM6IHN5bnRheC5jOjUxMDMKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDogpa+l6aW5pb+krLvYxOqktaTspMakpKTepLuk8yIKKworIzogc3ludGF4LmM6NTE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDAxOiBQYXR0ZXJuIGRlbGltaXRlciBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDAxOiCl0aW/obyl87bowNqk6qSspN+kxKSrpOqk3qS7pPM6ICVzIgorCisjOiBzeW50YXguYzo1MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDI6IEdhcmJhZ2UgYWZ0ZXIgcGF0dGVybjogJXMiCittc2dzdHIgIkU0MDI6IKXRpb+hvKXzpM6koqTIpMultKXfpKykoqTqpN6kuTogJXMiCisKKyM6IHN5bnRheC5jOjUzMDUKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiC5vcq4xrG0/Dogz6LCs7nUpdGlv6G8pfOkrDLF2bvYxOqktaTspN6kt6S/IgorCisjOiBzeW50YXguYzo1MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDQ6IElsbGVnYWwgYXJndW1lbnRzOiAlcyIKK21zZ3N0ciAiRTQwNDogydTAtaTKsPq/9KTHpLk6ICVzIgorCisjOiBzeW50YXguYzo1NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDU6IE1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MDU6IMX5pLekpCBzaWduIKSspKKk6qTepLuk8zogJXMiCisKKyM6IHN5bnRheC5jOjU0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNjogRW1wdHkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDA2OiC29aTOsPq/9DogJXMiCisKKyM6IHN5bnRheC5jOjU0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNzogJXMgbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTQwNzogJXMgpM+ls6WzpMekz7X2ssSktaTspMakpKTepLuk8yIKKworIzogc3ludGF4LmM6NTQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA4OiAlcyBtdXN0IGJlIGZpcnN0IGluIGNvbnRhaW5zIGxpc3QiCittc2dzdHIgIkU0MDg6ICVzIKTPxuLNxqXqpbmlyKTOwOjGrKTHpMqksaTspNCkyqTppMqkpCIKKworIzogc3ludGF4LmM6NTUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA5OiBVbmtub3duIGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFNDA5OiDMpMPOpM6lsKXrobyl18y+OiAlcyIKKworIzogc3ludGF4LmM6NTc1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEwOiBJbnZhbGlkIDpzeW50YXggc3ViY29tbWFuZDogJXMiCittc2dzdHIgIkU0MTA6IMy1uPqkyiA6c3ludGF4IKTOpbWl1qWzpd6l86XJOiAlcyIKKworIzogc3ludGF4LmM6NjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDExOiBoaWdobGlnaHQgZ3JvdXAgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQxMTogpc+lpKXppaSlyKWwpeuhvKXXpKyk36TEpKuk6qTepLuk8zogJXMiCisKKyM6IHN5bnRheC5jOjYxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMjogTm90IGVub3VnaCBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTI6ILD6v/SkrL28yqykx6TPpMqkpDogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEzOiBUb28gbWFueSBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTM6ILD6v/SkrMK/pLmkrqTepLk6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYxODUKK21zZ2lkICJFNDE0OiBncm91cCBoYXMgc2V0dGluZ3MsIGhpZ2hsaWdodCBsaW5rIGlnbm9yZWQiCittc2dzdHIgIkU0MTQ6IKWwpeuhvKXXpKzA38TqpLWk7KTGpKSk66TOpMelz6WkpemlpKXIpeql86WvpM/MtbvrpLWk7KTepLkiCisKKyM6IHN5bnRheC5jOjYzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNTogdW5leHBlY3RlZCBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNTogzb20/KS7pMzGsaS4IHNpZ24gpMekuTogJXMiCisKKyM6IHN5bnRheC5jOjYzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNjogbWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNjogxrGkuCBzaWduIKSspKKk6qTepLuk8zogJXMiCisKKyM6IHN5bnRheC5jOjYzNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MTc6ILD6v/SkrKSipOqk3qS7pPM6ICVzIgorCisjOiBzeW50YXguYzo2NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTg6IElsbGVnYWwgdmFsdWU6ICVzIgorbXNnc3RyICJFNDE4OiDJ1MC1pMrDzaTHpLk6ICVzIgorCisjOiBzeW50YXguYzo2NTM0Cittc2dpZCAiRTQxOTogRkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQxOTogzKTDzqTOwbC3yr+npMekuSIKKworIzogc3ludGF4LmM6NjU0NQorbXNnaWQgIkU0MjA6IEJHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MjA6IMykw86kzsfYt8q/p6THpLkiCisKKyM6IHN5bnRheC5jOjY2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMTogQ29sb3IgbmFtZSBvciBudW1iZXIgbm90IHJlY29nbml6ZWQ6ICVzIgorbXNnc3RyICJFNDIxOiClq6XpobzMvqTkyNa55qTyx6e8saTHpK2k3qS7pPM6ICVzIgorCisjOiBzeW50YXguYzo2ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjI6IHRlcm1pbmFsIGNvZGUgdG9vIGxvbmc6ICVzIgorbXNnc3RyICJFNDIyOiC9qsO8pbOhvKXJpKzEuaS5pK6k3qS5OiAlcyIKKworIzogc3ludGF4LmM6Njg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzogydTAtaTKsPq/9KTHpLk6ICVzIgorCisjOiBzeW50YXguYzo3Mzg4Cittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDogwr+kr6TOsNukyqTrpc+lpKXppaSlyMKwwK2krLvIpO+k7KS5pK6kxqSkpN6kuSIKKworIzogc3ludGF4LmM6NzkwOQorbXNnaWQgIkU2Njk6IFVucHJpbnRhYmxlIGNoYXJhY3RlciBpbiBncm91cCBuYW1lIgorbXNnc3RyICJFNjY5OiClsKXrobyl18y+pMuw9br+ydSyxMe9pMrKuLv6pKykoqTqpN6kuSIKKworIy4gVGhpcyBpcyBhbiBlcnJvciwgYnV0IHNpbmNlIHRoZXJlIHByZXZpb3VzbHkgd2FzIG5vIGNoZWNrIG9ubHkKKyMuICogZ2l2ZSBhIHdhcm5pbmcuCisjOiBzeW50YXguYzo3OTE2Cittc2dpZCAiVzE4OiBJbnZhbGlkIGNoYXJhY3RlciBpbiBncm91cCBuYW1lIgorbXNnc3RyICJXMTg6IKWwpeuhvKXXzL6ky8nUwLWkysq4u/qkrKSipOqk3qS5IgorCisjOiB0YWcuYzo5MAorbXNnaWQgIkU1NTU6IGF0IGJvdHRvbSBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTU6IKW/pbCluaW/pcOlr6TOy/bI+KTHpLkiCisKKyM6IHRhZy5jOjkxCittc2dpZCAiRTU1NjogYXQgdG9wIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiRTU1Njogpb+lsKW5pb+lw6WvpM7A6MaspMekuSIKKworIzogdGFnLmM6NDEyCittc2dpZCAiRTQyNTogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0MjU6ILrHvemkzrO6xfalv6WwpPLEtqSopMbM4aTrpLOkyKTPpMekraTepLuk8yIKKworIzogdGFnLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjY6IHRhZyBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDI2OiClv6WwpKyk36TEpKuk6qTepLuk8zogJXMiCisKKyM6IHRhZy5jOjU4MworbXNnaWQgIiAgIyBwcmkga2luZCB0YWciCittc2dzdHIgIiAgIyBwcmkga2luZCB0YWciCisKKyM6IHRhZy5jOjU4NgorbXNnaWQgImZpbGVcbiIKK21zZ3N0ciAipdWloaWkpetcbiIKKworIy4KKyMuICogQXNrIHRvIHNlbGVjdCBhIHRhZyBmcm9tIHRoZSBsaXN0LgorIy4gKiBXaGVuIHVzaW5nICI6c2lsZW50IiBhc3N1bWUgdGhhdCA8Q1I+IHdhcyBlbnRlcmVkLgorIy4KKyM6IHRhZy5jOjc0NAorbXNnaWQgIkVudGVyIG5yIG9mIGNob2ljZSAoPENSPiB0byBhYm9ydCk6ICIKK21zZ3N0ciAiwarC8qS5pOvI1rnmpPLG/s7PpLekxqSvpMCktaSkICg8Q1I+pMfD5rvfKTogIgorCisjOiB0YWcuYzo3ODQKK21zZ2lkICJFNDI3OiBUaGVyZSBpcyBvbmx5IG9uZSBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjc6ILO6xfalv6WwpKwxpMSkwKSxpLekq6SipOqk3qS7pPMiCisKKyM6IHRhZy5jOjc4NgorbXNnaWQgIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjg6ILrHuOWky7O6xfakuaTrpb+lsKTyxLakqKTGv8qk4KSzpMikz6THpK2k3qS7pPMiCisKKyM6IHRhZy5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAipdWloaWkpesgXCIlc1wiIKSspKKk6qTepLuk8yIKKworIy4gR2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgdGFncworIzogdGFnLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAlZCBvZiAlZCVzIgorbXNnc3RyICKlv6WwICVkICjBtCVkJXMpIgorCisjOiB0YWcuYzo4MjYKK21zZ2lkICIgb3IgbW9yZSIKK21zZ3N0ciAiIKSrpL2k7LDKvuUiCisKKyM6IHRhZy5jOjgyOAorbXNnaWQgIiAgVXNpbmcgdGFnIHdpdGggZGlmZmVyZW50IGNhc2UhIgorbXNnc3RyICIgIKW/pbCk8rDbpMqk62Nhc2Wkx7vIzdGkt6TepLkhIgorCisjOiB0YWcuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyOTogRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkU0Mjk6IKXVpaGlpKXrIFwiJXNcIiCkrKSipOqk3qS7pPMiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6OTQxCittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyBUTyClv6WwICAgICAgICBGUk9NILnUICAgIGluIGZpbGUvdGV4dCIKKworIzogdGFnLmM6MTM2MworIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICKlv6WwpdWloaWkpesgJXMgpPK4obr3w+YiCisKKyM6IHRhZy5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IKW/pbCl1aWhpaSl66TOpdGluaSsICVzIKTLwNqk6rzOpMak6aTspN6kt6S/XG4iCisKKyM6IHRhZy5jOjIyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMTogRm9ybWF0IGVycm9yIGluIHRhZ3MgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0MzE6IKW/pbCl1aWhpaSl6yBcIiVzXCIgpM6l1aWpobyl3qXDpciky6WopemhvKSspKKk6qTepLkiCisKKyM6IHRhZy5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICLEvsGwpM4gJWxkIKXQpaSlyCIKKworIzogdGFnLmM6MjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMyOiBUYWdzIGZpbGUgbm90IHNvcnRlZDogJXMiCittc2dzdHIgIkU0MzI6IKW/pbCl1aWhpaSl66Sspb2hvKXIpLWk7KTGpKSk3qS7pPM6ICVzIgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MjI4MAorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzogpb+lsKXVpaGlpKXrpKykoqTqpN6ku6TzIgorCisjOiB0YWcuYzozMDE2Cittc2dpZCAiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIKK21zZ3N0ciAiRTQzNDogpb+lsKXRpb+hvKXzpPKk36TEpLGk6aTspN6ku6TzIgorCisjOiB0YWcuYzozMDI3Cittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiClv6WwpPKk36TEpLGk6aTspMqkpKTOpMfDsaTLv+TCrKS3pN6kuSEiCisKKyM6IHRlcm0uYzoxNzU5Cittc2dpZCAiJyBub3Qga25vd24uIEF2YWlsYWJsZSBidWlsdGluIHRlcm1pbmFscyBhcmU6IgorbXNnc3RyICInIKTPzKTDzqTHpLkuILi9udSkzsHIpN+5/qTfw7zL9qTPvKGkzqTIpKqk6qTHpLk6IgorCisjOiB0ZXJtLmM6MTc4MworbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAivsrOrMPNpPK8oaTOpOikpqTLwN/E6qS3pN6kuSAnIgorCisjOiB0ZXJtLmM6MjE0MQorbXNnaWQgIkU1NTc6IENhbm5vdCBvcGVuIHRlcm1jYXAgZmlsZSIKK21zZ3N0ciAiRTU1NzogdGVybWNhcKXVpaGlpKXrpPKzq6SxpN6ku6TzIgorCisjOiB0ZXJtLmM6MjE0NQorbXNnaWQgIkU1NTg6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtaW5mbyIKK21zZ3N0ciAiRTU1ODogdGVybWluZm+ky8O8y/alqKXzpcil6qTypN+kxKSxpOmk7KTepLuk8yIKKworIzogdGVybS5jOjIxNDcKK21zZ2lkICJFNTU5OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTU1OTogdGVybWNhcKTLw7zL9qWopfOlyKXqpPKk36TEpLGk6aTspN6ku6TzIgorCisjOiB0ZXJtLmM6MjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDM2OiBObyBcIiVzXCIgZW50cnkgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTQzNjogdGVybWNhcKTLIFwiJXNcIiCkzqWopfOlyKXqpKykoqTqpN6ku6TzIgorCisjOiB0ZXJtLmM6Mjc4MAorbXNnaWQgIkU0Mzc6IHRlcm1pbmFsIGNhcGFiaWxpdHkgXCJjbVwiIHJlcXVpcmVkIgorbXNnc3RyICJFNDM3OiDDvMv2pMsgXCJjbVwiILWhx72krMmszdekx6S5IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0OTkwCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDDvMv2pa2hvCAtLS0iCisKKyM6IHVpLmM6MjU4Cittc2dpZCAibmV3IHNoZWxsIHN0YXJ0ZWRcbiIKK21zZ3N0ciAiv7ekt6Skpbelp6XrpPK1r8awpLek3qS5XG4iCisKKyM6IHVpLmM6MTg0MQorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICJWaW06IMb+zs+k8sbJuf6k38PmpM6lqKXpobyky6TopOq9qs67pLek3qS5Li4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6NDA1Cittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICKyxMe9pMqloqXzpcmlpaTPpKKk6qTepLuk8zogpMik6qSipKikusKzpLGk3qS5IgorCisjOiB1bmRvLmM6NTYxCittc2dpZCAiRTQzODogdV91bmRvOiBsaW5lIG51bWJlcnMgd3JvbmciCittc2dzdHIgIkU0Mzg6IHVfdW5kbzogudTI1rnmpKy01rDjpMOkxqSkpN6kuSIKKworIzogdW5kby5jOjc1NworbXNnaWQgIjEgY2hhbmdlIgorbXNnc3RyICIxILLVverK0bm5pLek3qS3pL8iCisKKyM6IHVuZG8uYzo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYW5nZXMiCittc2dzdHIgIiVsZCCy1b3qytG5uaS3pN6kt6S/IgorCisjOiB1bmRvLmM6ODEyCittc2dpZCAiRTQzOTogdW5kbyBsaXN0IGNvcnJ1cHQiCittc2dzdHIgIkU0Mzk6IKWipfOlyaWlpeqluaXIpKyy9aTspMakpKTepLkiCisKKyM6IHVuZG8uYzo4NDQKK21zZ2lkICJFNDQwOiB1bmRvIGxpbmUgbWlzc2luZyIKK21zZ3N0ciAiRTQ0MDogpaKl86XJpaW51KSspKKk6qTepLuk8yIKKworIy4gT25seSBNUyBWQyA0LjEgYW5kIGVhcmxpZXIgY2FuIGRvIFdpbjMycworIzogdmVyc2lvbi5jOjE3MzEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIKXTpcOlyCBHVUkgyMciCisKKyM6IHZlcnNpb24uYzoxNzMzCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMiCl06XDpcggR1VJIMjHIgorCisjOiB2ZXJzaW9uLmM6MTczNgorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiIGluIFdpbjMycyCl4qG8pckiCisKKyM6IHZlcnNpb24uYzoxNzM4Cittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIiB3aXRoIE9MRSCltaXdobylyCIKKworIzogdmVyc2lvbi5jOjE3NDEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgY29uc29sZSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMiCl06XDpcggpbOl86W9obyl6yDIxyIKKworIzogdmVyc2lvbi5jOjE3NDUKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNiBiaXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYgpdOlw6XIIMjHIgorCisjOiB2ZXJzaW9uLmM6MTc0OQorbXNnaWQgIiIKKyJcbiIKKyIzMiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMiCl06XDpcggTVMtRE9TIMjHIgorCisjOiB2ZXJzaW9uLmM6MTc1MQorbXNnaWQgIiIKKyJcbiIKKyIxNiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIxNiCl06XDpcggTVMtRE9TIMjHIgorCisjOiB2ZXJzaW9uLmM6MTc1NworbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkgyMciCisKKyM6IHZlcnNpb24uYzoxNzU5Cittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFggyMciCisKKyM6IHZlcnNpb24uYzoxNzYyCittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyDIxyIKKworIzogdmVyc2lvbi5jOjE3NjcKK21zZ2lkICIiCisiXG4iCisiUklTQyBPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiUklTQyBPUyDIxyIKKworIzogdmVyc2lvbi5jOjE3NzcKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisixazN0brRpdGlw6XBOiAiCisKKyM6IHZlcnNpb24uYzoxODAzIHZlcnNpb24uYzoyMTcxCittc2dpZCAiTW9kaWZpZWQgYnkgIgorbXNnc3RyICJNb2RpZmllZCBieSAiCisKKyM6IHZlcnNpb24uYzoxODEwCittc2dpZCAiIgorIlxuIgorIkNvbXBpbGVkICIKK21zZ3N0ciAiIgorIlxuIgorIkNvbXBpbGVkICIKKworIzogdmVyc2lvbi5jOjE4MTMKK21zZ2lkICJieSAiCittc2dzdHIgImJ5ICIKKworIzogdmVyc2lvbi5jOjE4MjUKK21zZ2lkICIiCisiXG4iCisiSHVnZSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIkh1Z2UgyMcgIgorCisjOiB2ZXJzaW9uLmM6MTgyOAorbXNnaWQgIiIKKyJcbiIKKyJCaWcgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJCaWcgyMcgIgorCisjOiB2ZXJzaW9uLmM6MTgzMQorbXNnaWQgIiIKKyJcbiIKKyJOb3JtYWwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyLEzL7vIMjHICIKKworIzogdmVyc2lvbi5jOjE4MzQKK21zZ2lkICIiCisiXG4iCisiU21hbGwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJTbWFsbCDIxyAiCisKKyM6IHZlcnNpb24uYzoxODM2Cittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJUaW55IMjHICIKKworIzogdmVyc2lvbi5jOjE4NDIKK21zZ2lkICJ3aXRob3V0IEdVSS4iCittc2dzdHIgIndpdGhvdXQgR1VJLiIKKworIzogdmVyc2lvbi5jOjE4NDcKK21zZ2lkICJ3aXRoIEdUSzItR05PTUUgR1VJLiIKK21zZ3N0ciAid2l0aCBHVEsyLUdOT01FIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODQ5Cittc2dpZCAid2l0aCBHVEstR05PTUUgR1VJLiIKK21zZ3N0ciAid2l0aCBHVEstR05PTUUgR1VJLiIKKworIzogdmVyc2lvbi5jOjE4NTMKK21zZ2lkICJ3aXRoIEdUSzIgR1VJLiIKK21zZ3N0ciAid2l0aCBHVEsyIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODU1Cittc2dpZCAid2l0aCBHVEsgR1VJLiIKK21zZ3N0ciAid2l0aCBHVEsgR1VJLiIKKworIzogdmVyc2lvbi5jOjE4NjAKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTg2NAorbXNnaWQgIndpdGggWDExLW5lWHRhdyBHVUkuIgorbXNnc3RyICJ3aXRoIFgxMS1uZVh0YXcgR1VJLiIKKworIzogdmVyc2lvbi5jOjE4NjYKK21zZ2lkICJ3aXRoIFgxMS1BdGhlbmEgR1VJLiIKK21zZ3N0ciAid2l0aCBYMTEtQXRoZW5hIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODcwCittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgIndpdGggQmVPUyBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTg3MworbXNnaWQgIndpdGggUGhvdG9uIEdVSS4iCittc2dzdHIgIndpdGggUGhvdG9uIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODc2Cittc2dpZCAid2l0aCBHVUkuIgorbXNnc3RyICJ3aXRoIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODc5Cittc2dpZCAid2l0aCBDYXJib24gR1VJLiIKK21zZ3N0ciAid2l0aCBDYXJib24gR1VJLiIKKworIzogdmVyc2lvbi5jOjE4ODIKK21zZ2lkICJ3aXRoIENvY29hIEdVSS4iCittc2dzdHIgIndpdGggQ29jb2EgR1VJLiIKKworIzogdmVyc2lvbi5jOjE4ODUKK21zZ2lkICJ3aXRoIChjbGFzc2ljKSBHVUkuIgorbXNnc3RyICJ3aXRoICilr6Xppbelw6WvKSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTg5NgorbXNnaWQgIiAgRmVhdHVyZXMgaW5jbHVkZWQgKCspIG9yIG5vdCAoLSk6XG4iCittc2dzdHIgIiAgtaHHvaTOsOzN9yDNrbj6KCspL8y1uPooLSlcbiIKKworIzogdmVyc2lvbi5jOjE5MDgKK21zZ2lkICIgICBzeXN0ZW0gdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgIKW3pbmlxqXgIHZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjE5MTMKK21zZ2lkICIgICAgIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgpeahvKW2IHZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjE5MTgKK21zZ2lkICIgMm5kIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgwugypeahvKW2IHZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjE5MjMKK21zZ2lkICIgM3JkIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgwugzpeahvKW2IHZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjE5MjgKK21zZ2lkICIgICAgICB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgIKXmobyltiBleHJjOiBcIiIKKworIzogdmVyc2lvbi5jOjE5MzMKK21zZ2lkICIgIDJuZCB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgIMLoMqXmobyltiBleHJjOiBcIiIKKworIzogdmVyc2lvbi5jOjE5MzkKK21zZ2lkICIgIHN5c3RlbSBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgpbeluaXGpeAgZ3ZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjE5NDMKK21zZ2lkICIgICAgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICCl5qG8pbYgZ3ZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjE5NDcKK21zZ2lkICIybmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICDC6DKl5qG8pbYgZ3ZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjE5NTIKK21zZ2lkICIzcmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICDC6DOl5qG8pbYgZ3ZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjE5NTkKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiAgICClt6W5pcal4KXhpcul5aG8OiBcIiIKKworIzogdmVyc2lvbi5jOjE5NjcKK21zZ2lkICIgIGZhbGwtYmFjayBmb3IgJFZJTTogXCIiCittc2dzdHIgIiAgICAgICC+ys6su/6kziAkVklNOiBcIiIKKworIzogdmVyc2lvbi5jOjE5NzMKK21zZ2lkICIgZi1iIGZvciAkVklNUlVOVElNRTogXCIiCittc2dzdHIgIr7Kzqy7/qTOICRWSU1SVU5USU1FOiBcIiIKKworIzogdmVyc2lvbi5jOjE5NzcKK21zZ2lkICJDb21waWxhdGlvbjogIgorbXNnc3RyICKls6XzpdGlpKXrOiAiCisKKyM6IHZlcnNpb24uYzoxOTgzCittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAipbOl86XRpaSl6TogIgorCisjOiB2ZXJzaW9uLmM6MTk4OAorbXNnaWQgIkxpbmtpbmc6ICIKK21zZ3N0ciAipeql86WvOiAiCisKKyM6IHZlcnNpb24uYzoxOTkzCittc2dpZCAiICBERUJVRyBCVUlMRCIKK21zZ3N0ciAipcel0KXDpbCl06XrpckiCisKKyM6IHZlcnNpb24uYzoyMDMyCittc2dpZCAiVklNIC0gVmkgSU1wcm92ZWQiCittc2dzdHIgIlZJTSAtIFZpIElNcHJvdmVkIgorCisjOiB2ZXJzaW9uLmM6MjAzNAorbXNnaWQgInZlcnNpb24gIgorbXNnc3RyICJ2ZXJzaW9uICIKKworIzogdmVyc2lvbi5jOjIwMzUKK21zZ2lkICJieSBCcmFtIE1vb2xlbmFhciBldCBhbC4iCittc2dzdHIgImJ5IEJyYW0gTW9vbGVuYWFyIMK+LiIKKworIzogdmVyc2lvbi5jOjIwMzkKK21zZ2lkICJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIgorbXNnc3RyICJWaW0gpM+lqqG8pdel86W9obyluaTHpKKk6ryrzbOky8fbyduyxMe9pMekuSIKKworIzogdmVyc2lvbi5jOjIwNDEKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAipaalrKXzpcCkzrfDpN6k7KTKpKS70rahpL+kwaTLsee99aTyISIKKworIzogdmVyc2lvbi5jOjIwNDIKK21zZ2lkICJ0eXBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICK+3LrZpMq+8MrzpM8gICAgICAgICAgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MjA0NAorbXNnaWQgInR5cGUgIDpxPEVudGVyPiAgICAgICAgICAgICAgIHRvIGV4aXQgICAgICAgICAiCittc2dzdHIgIr2qzrukuaTrpMukzyAgICAgICAgICAgOnE8RW50ZXI+ICAgICAgICAgICAgICAiCisKKyM6IHZlcnNpb24uYzoyMDQ1Cittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAipaql86XppaSl86XYpeul16TPICAgICA6aGVscDxFbnRlcj4gpKsgPEYxPiAgICIKKworIzogdmVyc2lvbi5jOjIwNDYKK21zZ2lkICJ0eXBlICA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICBmb3IgdmVyc2lvbiBpbmZvIgorbXNnc3RyICKl0KG8pbil56XzvvDK86TPICAgICAgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIgorCisjOiB2ZXJzaW9uLmM6MjA0OQorbXNnaWQgIlJ1bm5pbmcgaW4gVmkgY29tcGF0aWJsZSBtb2RlIgorbXNnc3RyICJWabjftLml4qG8pcmkx8awuu7D5iIKKworIzogdmVyc2lvbi5jOjIwNTAKK21zZ2lkICJ0eXBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBmb3IgVmltIGRlZmF1bHRzIgorbXNnc3RyICJWaW2/5L6pw82ky6S5pOuky6TPICAgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MjA1MQorbXNnaWQgInR5cGUgIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IGZvciBpbmZvIG9uIHRoaXMiCittc2dzdHIgIr7cutmkyr7wyvOkzyAgICAgICAgICAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4iCisKKyM6IHZlcnNpb24uYzoyMDY2Cittc2dpZCAibWVudSAgSGVscC0+T3JwaGFucyAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uICAgICIKK21zZ3N0ciAivty62aTPpeGly6XlobykziCl2KXrpdeiqrjJu/kgpPK7sr7IpLekxrK8pLWkpCAgICIKKworIzogdmVyc2lvbi5jOjIwNjgKK21zZ2lkICJSdW5uaW5nIG1vZGVsZXNzLCB0eXBlZCB0ZXh0IGlzIGluc2VydGVkIgorbXNnc3RyICKl4qG8pcnMtaTHvMK51MPmLCClv6Wkpdekt6S/yri7+qSswd7G/qS1pOyk3qS5IgorCisjOiB2ZXJzaW9uLmM6MjA2OQorbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIEluc2VydCBNb2RlICAiCittc2dzdHIgIqXhpcul5aG8pM4gytS9uKKqwbTCzsDfxOqiqsHexv4ovem/tLzUKaXiobylycDawtgiCisKKyM6IHZlcnNpb24uYzoyMDcwCittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHR3byBtb2RlcyAgICAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgpMel4qG8pcnNraTLICAgICAgICIKKworIzogdmVyc2lvbi5jOjIwNzQKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBWaSBDb21wYXRpYmxlIgorbXNnc3RyICKl4aXLpeWhvKTOIMrUvbiiqsG0ws7A38TqoqpWabjftLml4qG8pcnA2sLYICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MjA3NQorbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBWaW0gZGVmYXVsdHMgICAiCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIKTHVmltpMikt6TGxrC67iAgICAiCisKKyM6IHZlcnNpb24uYzoyMTIyCittc2dpZCAiU3BvbnNvciBWaW0gZGV2ZWxvcG1lbnQhIgorbXNnc3RyICJWaW2kzrOryK+k8rH+seekt6TGpK+kwKS1pKQhIgorCisjOiB2ZXJzaW9uLmM6MjEyMworbXNnaWQgIkJlY29tZSBhIHJlZ2lzdGVyZWQgVmltIHVzZXIhIgorbXNnc3RyICJWaW2kzsXQz7+l5qG8pbaky6TKpMOkxqSvpMCktaSkISIKKworIzogdmVyc2lvbi5jOjIxMjYKK21zZ2lkICJ0eXBlICA6aGVscCBzcG9uc29yPEVudGVyPiAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICK+3LrZpMq+8MrzpM8gICAgICAgICAgIDpoZWxwIHNwb25zb3I8RW50ZXI+ICAgIgorCisjOiB2ZXJzaW9uLmM6MjEyNworbXNnaWQgInR5cGUgIDpoZWxwIHJlZ2lzdGVyPEVudGVyPiAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgIr7cutmkyr7wyvOkzyAgICAgICAgICAgOmhlbHAgcmVnaXN0ZXI8RW50ZXI+ICAiCisKKyM6IHZlcnNpb24uYzoyMTI5Cittc2dpZCAibWVudSAgSGVscC0+U3BvbnNvci9SZWdpc3RlciAgZm9yIGluZm9ybWF0aW9uICAgICIKK21zZ3N0ciAivty62aTPpeGly6XlobykziCl2KXrpdeiqqW5pd2l86W1obwvxdDPvyCk8ruyvsikt6TGsryktaSkICAgIgorCisjOiB2ZXJzaW9uLmM6MjEzOQorbXNnaWQgIldBUk5JTkc6IFdpbmRvd3MgOTUvOTgvTUUgZGV0ZWN0ZWQiCittc2dzdHIgIiAgILfZufA6IFdpbmRvd3MgOTUvOTgvTWUgpPK4ob3QICAiCisKKyM6IHZlcnNpb24uYzoyMTQyCittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAiIL7cutmkyr7wyvOkzyAgICAgICAgICA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICIKKworIzogd2luZG93LmM6MjAzCittc2dpZCAiRTQ0MTogVGhlcmUgaXMgbm8gcHJldmlldyB3aW5kb3ciCittc2dzdHIgIkU0NDE6IKXXpeyl06XlobylpqWjpfOlyaWmpKykoqTqpN6ku6TzIgorCisjOiB3aW5kb3cuYzo1ODEKK21zZ2lkICJFNDQyOiBDYW4ndCBzcGxpdCB0b3BsZWZ0IGFuZCBib3RyaWdodCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJFNDQyOiC6uL7lpMixprK8pPLGsbv+pMvKrLPkpLmk66SzpMikz6THpK2k3qS7pPMiCisKKyM6IHdpbmRvdy5jOjEzNDAKK21zZ2lkICJFNDQzOiBDYW5ub3Qgcm90YXRlIHdoZW4gYW5vdGhlciB3aW5kb3cgaXMgc3BsaXQiCittc2dzdHIgIkU0NDM6IMK+pM6lpqWjpfOlyaWmpKzKrLPkpLWk7KTGpKSk67v+pMukz73nsvOkx6StpN6ku6TzIgorCisjOiB3aW5kb3cuYzoxODM2Cittc2dpZCAiRTQ0NDogQ2Fubm90IGNsb3NlIGxhc3Qgd2luZG93IgorbXNnc3RyICJFNDQ0OiC6x7jlpM6lpqWjpfOlyaWmpPLKxKS4pOuks6TIpM+kx6StpN6ku6TzIgorCisjOiB3aW5kb3cuYzoyNTY3Cittc2dpZCAiQWxyZWFkeSBvbmx5IG9uZSB3aW5kb3ciCittc2dzdHIgIrT7pMulpqWjpfOlyaWmpM8xpMSkt6SrpKKk6qTepLuk8yIKKworIzogd2luZG93LmM6MjYxNAorbXNnaWQgIkU0NDU6IE90aGVyIHdpbmRvdyBjb250YWlucyBjaGFuZ2VzIgorbXNnc3RyICJFNDQ1OiDCvqTOpaalo6XzpcmlpqTLpM/K0bm5pKykoqTqpN6kuSIKKworIzogd2luZG93LmM6NDQ4MAorbXNnaWQgIkU0NDY6IE5vIGZpbGUgbmFtZSB1bmRlciBjdXJzb3IiCittc2dzdHIgIkU0NDY6IKWrobylvaXrpM6yvKTLpdWloaWkpevMvqSspKKk6qTepLuk8yIKKworIzogd2luZG93LmM6NDU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ3OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkU0NDc6IHBhdGiky6TPIFwiJXNcIiCkyKSkpKal1aWhpaSl66SspKKk6qTepLuk8yIKKworIzogZ2xvYmFscy5oOjEyMzIgaWZfcGVybC54czozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MDogQ291bGQgbm90IGxvYWQgbGlicmFyeSAlcyIKK21zZ3N0ciAiRTM3MDogpemlpKXWpeml6iAlcyCk8qXtobylyaTHpK2k3qS7pPOkx6S3pL8iCisKKyM6IGlmX3BlcmwueHM6NTU0Cittc2dpZCAiU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFBlcmwgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIqSzpM6ls6XepfOlyaTPzLW4+qTHpLksIKS0pOGk86TKpLWkpDogUGVybKXppaSl1qXppeqk8qXtobylyaTHpK2k3qS7pPOkx6S3pL8uIgorCisjOiBpZl9wZXJsLnhzOjYwNworbXNnaWQgIkUyOTk6IFBlcmwgZXZhbHVhdGlvbiBmb3JiaWRkZW4gaW4gc2FuZGJveCB3aXRob3V0IHRoZSBTYWZlIG1vZHVsZSIKK21zZ3N0ciAiIgorIkUyOTk6IKW1pfOlyaXcpcOlr6W5pMekzyBTYWZlICIKKyKl4qW4peWhvKXrpPK7yM3RpLekyqSkUGVybKW5pa+l6qXXpcikz7bYpLik6aTspMakpKTepLkiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTgzCittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICKzxqXVpaGlpKXrpPLKzKG5pM4gVmltIKTHytS9uCgmTSkiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTg5Cittc2dpZCAiRWRpdCB3aXRoIHNpbmdsZSAmVmltIgorbXNnc3RyICLBtKXVpaGlpKXrpPIxpMSkziBWaW0gpMfK1L24KCZWKSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1OTgKK21zZ2lkICImRGlmZiB3aXRoIFZpbSIKK21zZ3N0ciAiVmltIKTHurnKrMrUvbgoJkQpIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjYxMQorbXNnaWQgIkVkaXQgd2l0aCAmVmltIgorbXNnc3RyICJWaW0gpMfK1L24KCZWKSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo2MzMKK21zZ2lkICJFZGl0IHdpdGggZXhpc3RpbmcgVmltIC0gJiIKK21zZ3N0ciAitPvCuKTOIFZpbSCkx8rUvbggLSAmIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjc0NgorbXNnaWQgIkVkaXRzIHRoZSBzZWxlY3RlZCBmaWxlKHMpIHdpdGggVmltIgorbXNnc3RyICLBqsLypLWk7KS/pdWloaWkpeuk8iBWaW0gpMfK1L24IgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg4NSBHdmltRXh0L2d2aW1leHQuY3BwOjk2NgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHByb2Nlc3M6IENoZWNrIGlmIGd2aW0gaXMgaW4geW91ciBwYXRoISIKK21zZ3N0ciAita/GsKWopemhvDogZ3ZpbSCky6XRpbmkrMTMpMOkxqSkpOukq7POpKuk4aTGpK+kwKS1pKQhIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg4NiBHdmltRXh0L2d2aW1leHQuY3BwOjkwMCBHdmltRXh0L2d2aW1leHQuY3BwOjk2NworbXNnaWQgImd2aW1leHQuZGxsIGVycm9yIgorbXNnc3RyICJndmltZXh0LmRsbCClqKXpobwiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODk5Cittc2dpZCAiUGF0aCBsZW5ndGggdG9vIGxvbmchIgorbXNnc3RyICKl0aW5pKzEuaS5pK6k3qS5ISIKKworIzogZ2xvYmFscy5oOjEwMjIKK21zZ2lkICItLU5vIGxpbmVzIGluIGJ1ZmZlci0tIgorbXNnc3RyICItLaXQpcOl1aWhpMu51KSspKKk6qTepLuk8y0tIgorCisjLgorIy4gKiBUaGUgZXJyb3IgbWVzc2FnZXMgdGhhdCBjYW4gYmUgc2hhcmVkIGFyZSBpbmNsdWRlZCBoZXJlLgorIy4gKiBFeGNsdWRlZCBhcmUgZXJyb3JzIHRoYXQgYXJlIG9ubHkgdXNlZCBvbmNlIGFuZCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisjLgorIzogZ2xvYmFscy5oOjExODUKK21zZ2lkICJFNDcwOiBDb21tYW5kIGFib3J0ZWQiCittc2dzdHIgIkU0NzA6IKWzpd6l86XJpKzD5sPHpLWk7KTepLekvyIKKworIzogZ2xvYmFscy5oOjExODYKK21zZ2lkICJFNDcxOiBBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAiRTQ3MTogsPq/9KSsyazN16THpLkiCisKKyM6IGdsb2JhbHMuaDoxMTg3Cittc2dpZCAiRTEwOiBcXCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgLywgPyBvciAmIgorbXNnc3RyICJFMTA6IFxcIKTOuOWkzyAvIKSrID8gpKsgJiCkx6TKpLGk7KTQpMqk6qTepLuk8yIKKworIzogZ2xvYmFscy5oOjExODkKK21zZ2lkICJFMTE6IEludmFsaWQgaW4gY29tbWFuZC1saW5lIHdpbmRvdzsgPENSPiBleGVjdXRlcywgQ1RSTC1DIHF1aXRzIgorbXNnc3RyICJFMTE6IKWzpd6l86XJpemlpKXzpMekz8y1uPqkx6S5OyA8Q1I+pMe8wrnULCBDVFJMLUOkx6TkpOGk6yIKKworIzogZ2xvYmFscy5oOjExOTEKK21zZ2lkICJFMTI6IENvbW1hbmQgbm90IGFsbG93ZWQgZnJvbSBleHJjL3ZpbXJjIGluIGN1cnJlbnQgZGlyIG9yIHRhZyBzZWFyY2giCittc2dzdHIgIiIKKyJFMTI6ILi9ut+kzqXHpaOl7KWvpcil6qTkpb+lsLihuvekx6TPZXhyYy92aW1yY6TOpbOl3qXzpcmkz7X2ssSktaTspN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTE5MworbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiA6ZW5kaWYgpKykoqTqpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTE5NAorbXNnaWQgIkU2MDA6IE1pc3NpbmcgOmVuZHRyeSIKK21zZ3N0ciAiRTYwMDogOmVuZHRyeSCkrKSipOqk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMTk1Cittc2dpZCAiRTE3MDogTWlzc2luZyA6ZW5kd2hpbGUiCittc2dzdHIgIkUxNzA6IDplbmR3aGlsZSCkrKSipOqk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMTk2Cittc2dpZCAiRTU4ODogOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg4OiA6d2hpbGUgpM6kyqSkIDplbmR3aGlsZSCkrKSipOqk3qS5IgorCisjOiBnbG9iYWxzLmg6MTE5OAorbXNnaWQgIkUxMzogRmlsZSBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTEzOiCl1aWhpaSl66Sswri636S3pN6kuSAoISCk8sTJssOkx77lvfEpIgorCisjOiBnbG9iYWxzLmg6MTE5OQorbXNnaWQgIkU0NzI6IENvbW1hbmQgZmFpbGVkIgorbXNnc3RyICJFNDcyOiCls6XepfOlyaSsvLrH1KS3pN6kt6S/IgorCisjOiBnbG9iYWxzLmg6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM0OiBVbmtub3duIGZvbnRzZXQ6ICVzIgorbXNnc3RyICJFMjM0OiDMpMPOpM6l1aWppfOlyKW7pcOlyDogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IFVua25vd24gZm9udDogJXMiCittc2dzdHIgIkUyMzU6IMykw86kzqXVpaml86XIOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNjogRm9udCBcIiVzXCIgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJFMjM2OiCl1aWppfOlyCBcIiVzXCIgpM+4x8Tqyf2kx6TPpKKk6qTepLuk8yIKKworIzogZ2xvYmFscy5oOjEyMTAKK21zZ2lkICJFNDczOiBJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiRTQ3MzogxuLJ9KWopemhvKTHpLkiCisKKyM6IGdsb2JhbHMuaDoxMjExCittc2dpZCAiSW50ZXJydXB0ZWQiCittc2dzdHIgIrPkuf6k3qTspN6kt6S/IgorCisjOiBnbG9iYWxzLmg6MTIxMgorbXNnaWQgIkUxNDogSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFMTQ6IMy1uPqkyqWipcml7KW5pMekuSIKKworIzogZ2xvYmFscy5oOjEyMTMKK21zZ2lkICJFNDc0OiBJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJFNDc0OiDMtbj6pMqw+r/0pMekuSIKKworIzogZ2xvYmFscy5oOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ3NTogSW52YWxpZCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0NzU6IMy1uPqkyrD6v/Skx6S5OiAlcyIKKworIzogZ2xvYmFscy5oOjEyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246ICVzIgorbXNnc3RyICJFMTU6IMy1uPqkyrywpMekuTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjE4Cittc2dpZCAiRTE2OiBJbnZhbGlkIHJhbmdlIgorbXNnc3RyICJFMTY6IMy1uPqkysjPsM+kx6S5IgorCisjOiBnbG9iYWxzLmg6MTIxOQorbXNnaWQgIkU0NzY6IEludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ3NjogzLW4+qTKpbOl3qXzpcmkx6S5IgorCisjOiBnbG9iYWxzLmg6MTIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCIgpM+lx6Wjpeylr6XIpeqkx6S5IgorCisjOiBnbG9iYWxzLmg6MTIyNAorbXNnaWQgIkUxODogVW5leHBlY3RlZCBjaGFyYWN0ZXJzIGJlZm9yZSAnPSciCittc2dzdHIgIkUxODogzb20/KS7pMzKuLv6pKwgJz0nIKTOwbCky6SipOqk3qS3pL8iCisKKyM6IGdsb2JhbHMuaDoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjQ6IExpYnJhcnkgY2FsbCBmYWlsZWQgZm9yIFwiJXMoKVwiIgorbXNnc3RyICJFMzY0OiBcIiVzXCIoKSCkzqXppaSl1qXppeq4xr3QpMu8usfUpLek3qS3pL8iCisKKyM6IGdsb2JhbHMuaDoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDg6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgZnVuY3Rpb24gJXMiCittc2dzdHIgIkU0NDg6IKXppaSl1qXppeqkzrTYv/QgJXMgpPKl7aG8pcmkx6StpN6ku6TzpMekt6S/IgorCisjOiBnbG9iYWxzLmg6MTIzNQorbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiCl3qG8pa+ky8y1uPqkyrnUyNa55qSsu9jE6qS1pOykxqSkpN6kt6S/IgorCisjOiBnbG9iYWxzLmg6MTIzNgorbXNnaWQgIkUyMDogTWFyayBub3Qgc2V0IgorbXNnc3RyICJFMjA6IKXeobylr6TPwN/E6qS1pOykxqSkpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTIzNworbXNnaWQgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIKK21zZ3N0ciAiRTIxOiAnbW9kaWZpYWJsZScgpKylqqXVpMqkzqTHLCDK0bm5pMekraTepLuk8yIKKworIzogZ2xvYmFscy5oOjEyMzgKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IKW5pa+l6qXXpcikzsb+pOy70qSsv7ykuaSupN6kuSIKKworIzogZ2xvYmFscy5oOjEyMzkKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6IMn7pdWloaWkpeukz6SipOqk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMjQwCittc2dpZCAiRTI0OiBObyBzdWNoIGFiYnJldmlhdGlvbiIKK21zZ3N0ciAiRTI0OiCkvaTOpOikpqTKw7u9zMb+zs+kz6SipOqk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMjQxCittc2dpZCAiRTQ3NzogTm8gISBhbGxvd2VkIgorbXNnc3RyICJFNDc3OiAhIKTPtfayxKS1pOykxqSkpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTI0MworbXNnaWQgIkUyNTogR1VJIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIkUyNTogR1VJpM+7yM3RydSyxMe9pMekuTogpbOl86XRpaSl67v+pMvMtbj6pMuktaTspMakpKTepLkiCisKKyM6IGdsb2JhbHMuaDoxMjQ2Cittc2dpZCAiRTI2OiBIZWJyZXcgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjY6IKXYpdal6aWkuOykz7vIzdHJ1LLEx72kx6S5OiCls6XzpdGlpKXru/6ky8y1uPqky6S1pOykxqSkpN6kuVxuIgorCisjOiBnbG9iYWxzLmg6MTI0OQorbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjc6IKXapeult6WiuOykz7vIzdHJ1LLEx72kx6S5OiCls6XzpdGlpKXru/6ky8y1uPqky6S1pOykxqSkpN6kuVxuIgorCisjOiBnbG9iYWxzLmg6MTI1MgorbXNnaWQgIkU4MDA6IEFyYWJpYyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkU4MDA6IKWipeml06WiuOykz7vIzdHJ1LLEx72kx6S5OiCls6XzpdGlpKXru/6ky8y1uPqky6S1pOykxqSkpN6kuVxuIgorCisjOiBnbG9iYWxzLmg6MTI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjg6IE5vIHN1Y2ggaGlnaGxpZ2h0IGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFMjg6IKS9pM6k6KSmpMrMvqTOpc+lpKXppaSlyKWwpeuhvKXXpM+koqTqpN6ku6TzOiAlcyIKKworIzogZ2xvYmFscy5oOjEyNTcKK21zZ2lkICJFMjk6IE5vIGluc2VydGVkIHRleHQgeWV0IgorbXNnc3RyICJFMjk6IKTepMClxqWtpbmlyKSswd7G/qS1pOykxqSkpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTI1OAorbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6ILDKwbCky6Wzpd6l86XJudSkrKSipOqk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMjU5Cittc2dpZCAiRTMxOiBObyBzdWNoIG1hcHBpbmciCittc2dzdHIgIkUzMTogpL2kzqTopKakyqXepcOl1KXzpbCkz6SipOqk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMjYwCittc2dpZCAiRTQ3OTogTm8gbWF0Y2giCittc2dzdHIgIkU0Nzk6ILO6xfakz6SipOqk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODA6IE5vIG1hdGNoOiAlcyIKK21zZ3N0ciAiRTQ4MDogs7rF9qTPpKKk6qTepLuk8zogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjYyCittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjogpdWloaWkpevMvqSspKKk6qTepLuk8yIKKworIzogZ2xvYmFscy5oOjEyNjMKK21zZ2lkICJFMzM6IE5vIHByZXZpb3VzIHN1YnN0aXR1dGUgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzM6IMC1tazJvbi9w9a0uaSspN6kwLzCudSktaTspMakpKTepLuk8yIKKworIzogZ2xvYmFscy5oOjEyNjQKK21zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCittc2dzdHIgIkUzNDogpbOl3qXzpcmkrKTepMC8wrnUpLWk7KTGpKSk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMjY1Cittc2dpZCAiRTM1OiBObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzNTogwLW1rMm9uL2krKTepMC8wrnUpLWk7KTGpKSk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMjY2Cittc2dpZCAiRTQ4MTogTm8gcmFuZ2UgYWxsb3dlZCIKK21zZ3N0ciAiRTQ4MTogyM+wz7vYxOqkz7X2ssSktaTspMakpKTepLuk8yIKKworIzogZ2xvYmFscy5oOjEyNjgKK21zZ2lkICJFMzY6IE5vdCBlbm91Z2ggcm9vbSIKK21zZ3N0ciAiRTM2OiC9vMqspMrNxs7MpKykoqTqpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6ICVzIKTIpKSkpsy+wbCkzsXQz7+ktaTspL+ltaG8pdCkz6SipOqk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODI6IENhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJFNDgyOiCl1aWhpaSl6yAlcyCk8rruwK6kx6StpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTI3NAorbXNnaWQgIkU0ODM6IENhbid0IGdldCB0ZW1wIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTQ4MzogsOy7/qXVpaGlpKXrpM7MvsGwpPK86MbApMekraTepLuk8yIKKworIzogZ2xvYmFscy5oOjEyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NDogQ2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJFNDg0OiCl1aWhpaSl6yBcIiVzXCIgpPKzq6SxpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg1OiBDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIkU0ODU6IKXVpaGlpKXrICVzIKTyxsm5/qThpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTI3NworbXNnaWQgIkUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTM3OiC6x7jlpM7K0bm5pKzK3cK4pLWk7KTGpKSk3qS7pPMgKCEgpPLEybLDpMfK0bm5pPLHy7T+KSIKKworIzogZ2xvYmFscy5oOjEyNzgKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODogsPq/9KSstvWkx6S5IgorCisjOiBnbG9iYWxzLmg6MTI4MAorbXNnaWQgIkUzOTogTnVtYmVyIGV4cGVjdGVkIgorbXNnc3RyICJFMzk6IL/0w82krM3XteGktaTspMakpKTepLkiCisKKyM6IGdsb2JhbHMuaDoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDogpail6aG8pdWloaWkpesgJXMgpPKzq6SxpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTI4NgorbXNnaWQgIkUyMzM6IGNhbm5vdCBvcGVuIGRpc3BsYXkiCittc2dzdHIgIkUyMzM6IKXHpaOluaXXpeylpKTys6uksaTepLuk8yIKKworIzogZ2xvYmFscy5oOjEyODgKK21zZ2lkICJFNDE6IE91dCBvZiBtZW1vcnkhIgorbXNnc3RyICJFNDE6IKXhpeKl6qSsv9SkrbLMpMak3qS3pL8hIgorCisjOiBnbG9iYWxzLmg6MTI5MAorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kIgorbXNnc3RyICKl0aW/obyl86TPpN+kxKSrpOqk3qS7pPOkx6S3pL8iCisKKyM6IGdsb2JhbHMuaDoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODY6IFBhdHRlcm4gbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQ4NjogpdGlv6G8pfOkz6TfpMSkq6TqpN6ku6TzpMekt6S/OiAlcyIKKworIzogZ2xvYmFscy5oOjEyOTMKK21zZ2lkICJFNDg3OiBBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJFNDg3OiCw+r/0pM/AtaTOw82kx6TKpLGk7KTQpMqk6qTepLuk8yIKKworIzogZ2xvYmFscy5oOjEyOTUKK21zZ2lkICJFNDU5OiBDYW5ub3QgZ28gYmFjayB0byBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkU0NTk6IMGwpM6lx6Wjpeylr6XIpeqky8zhpOyk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMjk5Cittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0Mjogpail6aG8pM+koqTqpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTMwMQorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0Mzogs7rF9sq4u/rO86Ssx8vCu6S3pMakpKTepLkiCisKKyM6IGdsb2JhbHMuaDoxMzAyCittc2dpZCAiRTQ0OiBDb3JydXB0ZWQgcmVnZXhwIHByb2dyYW0iCittc2dzdHIgIkU0NDogydTAtaTKwLW1rMm9uL2l16XtpbCl6aXgpMekuSIKKworIzogZ2xvYmFscy5oOjEzMDMKK21zZ2lkICJFNDU6ICdyZWFkb25seScgb3B0aW9uIGlzIHNldCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDU6ICdyZWFkb25seScgpaql16W3peel86SswN/E6qS1pOykxqSkpN6kuSAoISCk8sTJssOkx77lvfGkrSkiCisKKyM6IGdsb2JhbHMuaDoxMzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjogQ2Fubm90IHNldCByZWFkLW9ubHkgdmFyaWFibGUgXCIlc1wiIgorbXNnc3RyICJFNDY6IMbJvOjA7M3RytG/9CBcIiVzXCIgpMvA38TqpLmk66SzpMikz6THpK2k3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMzA4Cittc2dpZCAiRTQ3OiBFcnJvciB3aGlsZSByZWFkaW5nIGVycm9yZmlsZSIKK21zZ3N0ciAiRTQ3OiClqKXpobyl1aWhpaSl66TOxsm5/sPmpMulqKXpobykrMivwLikt6TepLekvyIKKworIzogZ2xvYmFscy5oOjEzMTEKK21zZ2lkICJFNDg6IE5vdCBhbGxvd2VkIGluIHNhbmRib3giCittc2dzdHIgIkU0ODogpbWl86XJpdylw6Wvpbmkx6TPtfaktaTspN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTMxMworbXNnaWQgIkU1MjM6IE5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU1MjM6IKSzpLOkx6TPtfayxKS1pOyk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMzE2Cittc2dpZCAiRTM1OTogU2NyZWVuIG1vZGUgc2V0dGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFMzU5OiCluaWvpeqhvKXzpeKhvKXJpM7A38TqpMukz8LQsf6kt6TGpKSk3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMzE4Cittc2dpZCAiRTQ5OiBJbnZhbGlkIHNjcm9sbCBzaXplIgorbXNnc3RyICJFNDk6IMy1uPqkyqW5pa+l7aG8pevOzKTHpLkiCisKKyM6IGdsb2JhbHMuaDoxMzE5Cittc2dpZCAiRTkxOiAnc2hlbGwnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiRTkxOiAnc2hlbGwnIKWqpdelt6XnpfOkrLb1pMekuSIKKworIzogZ2xvYmFscy5oOjEzMjEKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IHNpZ24gpM6lx6G8pb+k8sbJuf6k4aTepLuk86THpLekvyIKKworIzogZ2xvYmFscy5oOjEzMjMKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiCluaXvpcOl16XVpaGlpKXrpM6lr6Xtobylurv+pail6aG8pMekuSIKKworIzogZ2xvYmFscy5oOjEzMjQKK21zZ2lkICJFNzM6IHRhZyBzdGFjayBlbXB0eSIKK21zZ3N0ciAiRTczOiClv6Wwpbmlv6XDpa+krLb1pMekuSIKKworIzogZ2xvYmFscy5oOjEzMjUKK21zZ2lkICJFNzQ6IENvbW1hbmQgdG9vIGNvbXBsZXgiCittc2dzdHIgIkU3NDogpbOl3qXzpcmkrMqju6ikuaSupN6kuSIKKworIzogZ2xvYmFscy5oOjEzMjYKK21zZ2lkICJFNzU6IE5hbWUgdG9vIGxvbmciCittc2dzdHIgIkU3NTogzL7BsKSsxLmkuaSupN6kuSIKKworIzogZ2xvYmFscy5oOjEzMjcKK21zZ2lkICJFNzY6IFRvbyBtYW55IFsiCittc2dzdHIgIkU3NjogWyCkrMK/pLmkrqTepLkiCisKKyM6IGdsb2JhbHMuaDoxMzI4Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IKXVpaGlpKXrzL6krMK/pLmkrqTepLkiCisKKyM6IGdsb2JhbHMuaDoxMzI5Cittc2dpZCAiRTQ4ODogVHJhaWxpbmcgY2hhcmFjdGVycyIKK21zZ3N0ciAiRTQ4ODogzb7KrKTKyri7+qSsuOWk7aTLpKKk6qTepLkiCisKKyM6IGdsb2JhbHMuaDoxMzMwCittc2dpZCAiRTc4OiBVbmtub3duIG1hcmsiCittc2dzdHIgIkU3ODogzKTDzqTOpd6hvKWvIgorCisjOiBnbG9iYWxzLmg6MTMzMQorbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTogpe+lpKXrpcmlq6G8pcmk8sW4s6ukx6StpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTMzMworbXNnaWQgIkU1OTE6ICd3aW5oZWlnaHQnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbmhlaWdodCciCittc2dzdHIgIkU1OTE6ICd3aW5oZWlnaHQnIKTPICd3aW5taW5oZWlnaHQnIKTopOq+rqS1pK+kx6StpN6ku6TzIgorCisjOiBnbG9iYWxzLmg6MTMzNQorbXNnaWQgIkU1OTI6ICd3aW53aWR0aCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWlud2lkdGgnIgorbXNnc3RyICJFNTkyOiAnd2lud2lkdGgnIKTPICd3aW5taW53aWR0aCcgpOik6r6upLWkr6THpK2k3qS7pPMiCisKKyM6IGdsb2JhbHMuaDoxMzM4Cittc2dpZCAiRTgwOiBFcnJvciB3aGlsZSB3cml0aW5nIgorbXNnc3RyICJFODA6IL3xuf6k38PmpM6lqKXpobwiCisKKyM6IGdsb2JhbHMuaDoxMzM5Cittc2dpZCAiWmVybyBjb3VudCIKK21zZ3N0ciAipbyl7aWrpaal86XIIgorCisjOiBnbG9iYWxzLmg6MTM0MQorbXNnaWQgIkU4MTogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQiCittc2dzdHIgIkU4MTogpbmlr6XqpdelyLDKs7CkxzxTSUQ+pKy7yKTvpOyk3qS3pL8iCisKKyM6IGdsb2JhbHMuaDoxMzQ0Cittc2dpZCAiRTQ0OTogSW52YWxpZCBleHByZXNzaW9uIHJlY2VpdmVkIgorbXNnc3RyICJFNDQ5OiDMtbj6pMq8sKTyvPWksbzopOqk3qS3pL8iCisKKyM6IGdsb2JhbHMuaDoxMzQ3Cittc2dpZCAiRTQ2MzogUmVnaW9uIGlzIGd1YXJkZWQsIGNhbm5vdCBtb2RpZnkiCittc2dzdHIgIkU0NjM6IM7OsOikrMrduO6ktaTspMakpKTrpM6kxywgytG5uaTHpK2k3qS7pPMiCmRpZmYgLS1naXQgYS9zcmMvcG8vamEuc2ppcy5wbyBiL3NyYy9wby9qYS5zamlzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNWMxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vamEuc2ppcy5wbwpAQCAtMCwwICsxLDY1ODcgQEAKKyMgSmFwYW5lc2UgdHJhbnNsYXRpb24gZm9yIFZpbQkJCXZpbTpzZXQgZm9sZG1ldGhvZD1tYXJrZXI6CisjCisjIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorIyBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyMKKyMgTVVSQU9LQSBUYXJvIDxrb3JvbkB0a2EuYXR0Lm5lLmpwPiwgMjAwMS00LgorIyBMYXN0IENoYW5nZTogMjktQXByLTIwMDQuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBWaW0gNi4yXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDQtMDQtMjkgMTM6MTYrMDkwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMDQtMjkgMTM6MDArMDkwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTVVSQU9LQSBUYXJvIDxrb3JvbkB0a2EuYXR0Lm5lLmpwPlxuIgorIkxhbmd1YWdlLVRlYW06IE1VUkFPS0EgVGFybyA8a29yb25AdGthLmF0dC5uZS5qcD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1jcDkzMlxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDgtYml0XG4iCisKKyM6IGJ1ZmZlci5jOjEwMgorbXNnaWQgIkU4MjogQ2Fubm90IGFsbG9jYXRlIGFueSBidWZmZXIsIGV4aXRpbmcuLi4iCittc2dzdHIgIkU4Mjogg2+DYoN0g0CC8DGCwoLgjeyQrILFgquCyIKigsyCxSwgj0mXuYK1gtyCty4uLiIKKworIzogYnVmZmVyLmM6MTA1Cittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4Mzogg2+DYoN0g0CC8I3skKyCxYKrgsiCooLMgsUsIJG8gsyC8I5nl3CCtYLcgrcuLi4iCisKKyM6IGJ1ZmZlci5jOjgwNQorbXNnaWQgIkU1MTU6IE5vIGJ1ZmZlcnMgd2VyZSB1bmxvYWRlZCIKK21zZ3N0ciAiRTUxNTogifCV+oKzguqCvYNvg2KDdINAgs2CoILogtyCuYLxIgorCisjOiBidWZmZXIuYzo4MDcKK21zZ2lkICJFNTE2OiBObyBidWZmZXJzIHdlcmUgZGVsZXRlZCIKK21zZ3N0ciAiRTUxNjogje2PnIKzguqCvYNvg2KDdINAgs2CoILogtyCuYLxIgorCisjOiBidWZmZXIuYzo4MDkKK21zZ2lkICJFNTE3OiBObyBidWZmZXJzIHdlcmUgd2lwZWQgb3V0IgorbXNnc3RyICJFNTE3OiCUaor8grOC6oK9g2+DYoN0g0CCzYKgguiC3IK5gvEiCisKKyM6IGJ1ZmZlci5jOjgxNworbXNnaWQgIjEgYnVmZmVyIHVubG9hZGVkIgorbXNnc3RyICIxIIzCgsyDb4Nig3SDQIKqifCV+oKzguqC3IK1gr0iCisKKyM6IGJ1ZmZlci5jOjgxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHVubG9hZGVkIgorbXNnc3RyICIlZCCMwoLMg2+DYoN0g0CCqonwlfqCs4LqgtyCtYK9IgorCisjOiBidWZmZXIuYzo4MjQKK21zZ2lkICIxIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICIxIIzCgsyDb4Nig3SDQIKqje2PnIKzguqC3IK1gr0iCisKKyM6IGJ1ZmZlci5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIGRlbGV0ZWQiCittc2dzdHIgIiVkIIzCgsyDb4Nig3SDQIKqje2PnIKzguqC3IK1gr0iCisKKyM6IGJ1ZmZlci5jOjgzMQorbXNnaWQgIjEgYnVmZmVyIHdpcGVkIG91dCIKK21zZ3N0ciAiMSCMwoLMg2+DYoN0g0CCqpRqivyCs4LqgtyCtYK9IgorCisjOiBidWZmZXIuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB3aXBlZCBvdXQiCittc2dzdHIgIiVkIIzCgsyDb4Nig3SDQIKqlGqK/IKzguqC3IK1gr0iCisKKyM6IGJ1ZmZlci5jOjg5NAorbXNnaWQgIkU4NDogTm8gbW9kaWZpZWQgYnVmZmVyIGZvdW5kIgorbXNnc3RyICJFODQ6IJXPjViCs4Lqgr2Db4Nig3SDQILNgqCC6ILcgrmC8SIKKworIy4gYmFjayB3aGVyZSB3ZSBzdGFydGVkLCBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyM6IGJ1ZmZlci5jOjkzMworbXNnaWQgIkU4NTogVGhlcmUgaXMgbm8gbGlzdGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTg1OiCDioNYg2eVXFyOpoKzguqC6YNvg2KDdINAgs2CoILogtyCuYLxIgorCisjOiBidWZmZXIuYzo5NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg2OiBCdWZmZXIgJWxkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFODY6IINvg2KDdINAICVsZCCCzYKgguiC3IK5gvEiCisKKyM6IGJ1ZmZlci5jOjk0OAorbXNnaWQgIkU4NzogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg3OiCNxYzjgsyDb4Nig3SDQILwiXqCpoLEiNqTroLNgsWCq4LcgrmC8SIKKworIzogYnVmZmVyLmM6OTUwCittc2dpZCAiRTg4OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg4OiCNxY+JgsyDb4Nig3SDQILmguiRT4LWgs2I2pOugsWCq4LcgrmC8SIKKworIzogYnVmZmVyLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4OTogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciAlbGQgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTg5OiCDb4Nig3SDQCAlbGQggsyVz41Ygs2V25G2grOC6oLEgqKC3IK5gvEgKCEggsWVz41YgvCUaor8KSIKKworIzogYnVmZmVyLmM6MTAwNQorbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiCNxYzjgsyDb4Nig3SDQILNifCV+oLFgquC3IK5gvEiCisKKyM6IGJ1ZmZlci5jOjE1MzgKK21zZ2lkICJXMTQ6IFdhcm5pbmc6IExpc3Qgb2YgZmlsZSBuYW1lcyBvdmVyZmxvdyIKK21zZ3N0ciAiVzE0OiCMeI2QOiCDdINAg0ODi5a8gsyDioNYg2eCqpK3greCrILcgrciCisKKyM6IGJ1ZmZlci5jOjE3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkyOiBCdWZmZXIgJWxkIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTkyOiCDb4Nig3SDQCAlbGQggqqC3YLCgqmC6ILcgrmC8SIKKworIzogYnVmZmVyLmM6MTk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFOTM6IE1vcmUgdGhhbiBvbmUgbWF0Y2ggZm9yICVzIgorbXNnc3RyICJFOTM6ICVzIILJlaGQlILMilmTloKqgqCC6ILcgrWCvSIKKworIzogYnVmZmVyLmM6MTk0MgorIywgYy1mb3JtYXQKK21zZ2lkICJFOTQ6IE5vIG1hdGNoaW5nIGJ1ZmZlciBmb3IgJXMiCittc2dzdHIgIkU5NDogJXMggsmKWZOWgreC6YNvg2KDdINAgs2CoILogtyCuYLxgsWCtYK9IgorCisjOiBidWZmZXIuYzoyMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIgorbXNnc3RyICKNcyAlbGQiCisKKyM6IGJ1ZmZlci5jOjI0MjAKK21zZ2lkICJFOTU6IEJ1ZmZlciB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTk1OiCCsYLMlryRT4LMg2+DYoN0g0CCzYr5gsmCoILogtyCtyIKKworIzogYnVmZmVyLmM6MjcxMworbXNnaWQgIiBbTW9kaWZpZWRdIgorbXNnc3RyICIgW5XPjViCoILoXSIKKworIzogYnVmZmVyLmM6MjcxOAorbXNnaWQgIltOb3QgZWRpdGVkXSIKK21zZ3N0ciAiW5aildKPV10iCisKKyM6IGJ1ZmZlci5jOjI3MjMKK21zZ2lkICJbTmV3IGZpbGVdIgorbXNnc3RyICJbkFaDdINAg0ODi10iCisKKyM6IGJ1ZmZlci5jOjI3MjQKK21zZ2lkICJbUmVhZCBlcnJvcnNdIgorbXNnc3RyICJbk8eNnoNHg4mBW10iCisKKyM6IGJ1ZmZlci5jOjI3MjYgZmlsZWlvLmM6MjA0OQorbXNnaWQgIltyZWFkb25seV0iCittc2dzdHIgIluTx42ekOqXcF0iCisKKyM6IGJ1ZmZlci5jOjI3NDcKK21zZ2lkICIxIGxpbmUgLS0lZCUlLS0iCittc2dzdHIgIjEgjXMgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI3NDkKK21zZ2lkICIlbGQgbGluZXMgLS0lZCUlLS0iCittc2dzdHIgIiVsZCCNcyAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6Mjc1NgorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICKNcyAlbGQgKJFTkcwgJWxkKSAtLSVkJSUtLSBjb2wgIgorCisjOiBidWZmZXIuYzoyODY0Cittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJblrOR6F0iCisKKyMuIG11c3QgYmUgYSBoZWxwIGJ1ZmZlcgorIzogYnVmZmVyLmM6MjkwNAorbXNnaWQgImhlbHAiCittc2dzdHIgIoN3g4uDdiIKKworIzogYnVmZmVyLmM6MzQ2MyBzY3JlZW4uYzo1MDM4Cittc2dpZCAiW2hlbHBdIgorbXNnc3RyICJbg3eDi4N2XSIKKworIzogYnVmZmVyLmM6MzQ5NSBzY3JlZW4uYzo1MDQ0Cittc2dpZCAiW1ByZXZpZXddIgorbXNnc3RyICJbg3aDjINyg4WBW10iCisKKyM6IGJ1ZmZlci5jOjM3NzUKK21zZ2lkICJBbGwiCittc2dzdHIgIpFTgsQiCisKKyM6IGJ1ZmZlci5jOjM3NzUKK21zZ2lkICJCb3QiCittc2dzdHIgIpaWlPYiCisKKyM6IGJ1ZmZlci5jOjM3NzcKK21zZ2lkICJUb3AiCittc2dzdHIgIpDmk6oiCisKKyM6IGJ1ZmZlci5jOjQ1MjMKK21zZ2lkICIiCisiXG4iCisiIyBCdWZmZXIgbGlzdDpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgg2+DYoN0g0CDioNYg2c6XG4iCisKKyM6IGJ1ZmZlci5jOjQ1NTYKK21zZ2lkICJbRXJyb3IgTGlzdF0iCittc2dzdHIgIluDR4OJgVuDioNYg2ddIgorCisjOiBidWZmZXIuYzo0NTY5IG1lbWxpbmUuYzoxNTIwCittc2dpZCAiW05vIEZpbGVdIgorbXNnc3RyICJblrOR6F0iCisKKyM6IGJ1ZmZlci5jOjQ4ODIKK21zZ2lkICIiCisiXG4iCisiLS0tIFNpZ25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSCDVINDg5MgLS0tIgorCisjOiBidWZmZXIuYzo0OTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNpZ25zIGZvciAlczoiCittc2dzdHIgIiVzIILMg1SDQ4OTOiIKKworIzogYnVmZmVyLmM6NDkwNworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgbGluZT0lbGQgIGlkPSVkICBuYW1lPSVzIgorbXNnc3RyICIgICAgjXM9JWxkICCOr5XKjnE9JWQgIJa8kU89JXMiCisKKyM6IGRpZmYuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6ICVsZCCIyI/jgsyDb4Nig3SDQILNZGlmZoLFgquC3IK5gvEiCisKKyM6IGRpZmYuYzo3MDkKK21zZ2lkICJFOTc6IENhbm5vdCBjcmVhdGUgZGlmZnMiCittc2dzdHIgIkU5NzogjbeVqoLwjeyQrILFgquC3IK5gvEgIgorCisjOiBkaWZmLmM6ODE0Cittc2dpZCAiUGF0Y2ggZmlsZSIKK21zZ3N0ciAig3CDYoNgg3SDQINDg4siCisKKyM6IGRpZmYuYzoxMDY1Cittc2dpZCAiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIKK21zZ3N0ciAiRTk4OiBkaWZmgsyPb5fNgvCTx42egt+C3IK5gvEiCisKKyM6IGRpZmYuYzoxODE1Cittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IIy7jd2CzINvg2KDdINAgs2Nt5Wqg4KBW4NogsWCzYKgguiC3IK5gvEiCisKKyM6IGRpZmYuYzoxODI3Cittc2dpZCAiRTEwMDogTm8gb3RoZXIgYnVmZmVyIGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMDogjbeVqoOCgVuDaILFgqCC6ZG8gsyDb4Nig3SDQILNgqCC6ILcgrmC8SIKKworIzogZGlmZi5jOjE4MzUKK21zZ2lkICJFMTAxOiBNb3JlIHRoYW4gdHdvIGJ1ZmZlcnMgaW4gZGlmZiBtb2RlLCBkb24ndCBrbm93IHdoaWNoIG9uZSB0byB1c2UiCittc2dzdHIgIiIKKyJFMTAxOiCNt5Wqg4KBW4NogsyDb4Nig3SDQIKqMozCiMiP44KggumCzILFgUGCx4LqgvCOZ4KkgqmTwZLogsWCq4LcgrmC8SIKKworIzogZGlmZi5jOjE4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMjogQ2FuJ3QgZmluZCBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTAyOiCDb4Nig3SDQCBcIiVzXCIggqqC3YLCgqmC6ILcgrmC8SIKKworIzogZGlmZi5jOjE4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMzogQnVmZmVyIFwiJXNcIiBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAzOiCDb4Nig3SDQCBcIiVzXCIggs2Nt5Wqg4KBW4NogsWCzYKgguiC3IK5gvEiCisKKyM6IGRpZ3JhcGguYzoyMTk5Cittc2dpZCAiRTEwNDogRXNjYXBlIG5vdCBhbGxvd2VkIGluIGRpZ3JhcGgiCittc2dzdHIgIkUxMDQ6II2HjpqCyUVzY2FwZYLNjmeXcILFgquC3IK5gvEiCisKKyM6IGRpZ3JhcGguYzoyMzg0Cittc2dpZCAiRTU0NDogS2V5bWFwIGZpbGUgbm90IGZvdW5kIgorbXNnc3RyICJFNTQ0OiCDTIFbg32DYoN2g3SDQINDg4uCqoLdgsKCqYLogtyCuYLxIgorCisjOiBkaWdyYXBoLmM6MjQxMQorbXNnaWQgIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTEwNTogOnNvdXJjZSCCxY7mjZ6C3oN0g0CDQ4OLiMiKT4LFgs0gOmxvYWRrZXltYXAggvCOZ4KmgtyCuYLxIgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiIINMgVuDj4Fbg2iV4oquICheTl5QKSIKKworIy4gY3RybF94X21vZGUgPT0gMCwgXlAvXk4gY29tcGwuCisjOiBlZGl0LmM6NDEKK21zZ2lkICIgXlggbW9kZSAoXkVeWV5MXl1eRl5JXkteRF5WXk5eUCkiCittc2dzdHIgIiBeWCCDgoFbg2ggKF5FXlleTF5dXkZeSV5LXkReVl5OXlApIgorCisjLiBTY3JvbGwgaGFzIGl0J3Mgb3duIG1zZ3MsIGluIGl0J3MgcGxhY2UgdGhlcmUgaXMgdGhlIG1zZyBmb3IgbG9jYWwKKyMuICogY3RybF94X21vZGUgPSAwIChlZyBjb250aW51ZV9zdGF0dXMgJiBDT05UX0xPQ0FMKSAgLS0gQWNldmVkbworIzogZWRpdC5jOjQ0Cittc2dpZCAiIEtleXdvcmQgTG9jYWwgY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiCLx4+Kg0yBW4OPgVuDaJXiiq4gKF5OXlApIgorCisjOiBlZGl0LmM6NDUKK21zZ2lkICIgV2hvbGUgbGluZSBjb21wbGV0aW9uICheTF5OXlApIgorbXNnc3RyICIgjXMokVORzCmV4oquICheTF5OXlApIgorCisjOiBlZGl0LmM6NDYKK21zZ2lkICIgRmlsZSBuYW1lIGNvbXBsZXRpb24gKF5GXk5eUCkiCittc2dzdHIgIoN0g0CDQ4OLlryV4oquICheRl5OXlApIgorCisjOiBlZGl0LmM6NDcKK21zZ2lkICIgVGFnIGNvbXBsZXRpb24gKF5dXk5eUCkiCittc2dzdHIgIiCDXoNPleKKriAoXl1eTl5QKSIKKworIzogZWRpdC5jOjQ4Cittc2dpZCAiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiIINwg1iDcINegVuDk5Xiiq4gKF5OXlApIgorCisjOiBlZGl0LmM6NDkKK21zZ2lkICIgRGVmaW5pdGlvbiBjb21wbGV0aW9uICheRF5OXlApIgorbXNnc3RyICIgkuiLYJXiiq4gKF5EXk5eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LXk5eUCkiCittc2dzdHIgIiCOq4+RleKKriAoXkteTl5QKSIKKworIzogZWRpdC5jOjUyCittc2dpZCAiIFRoZXNhdXJ1cyBjb21wbGV0aW9uICheVF5OXlApIgorbXNnc3RyICIgg1aDXFyBW4OJg1iV4oquICheVF5OXlApIgorCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WXk5eUCkiCittc2dzdHIgIiCDUoN9g5ODaIOJg0ODk5Xiiq4gKF5WXk5eUCkiCisKKyM6IGVkaXQuYzo1NgorbXNnaWQgIkhpdCBlbmQgb2YgcGFyYWdyYXBoIgorbXNnc3RyICKSaZeOgsyNxYzjgsmDcYNig2ciCisKKyM6IGVkaXQuYzo5NjIKK21zZ2lkICIndGhlc2F1cnVzJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIid0aGVzYXVydXMnIINJg3aDVoOHg5OCqovzgsWCtyIKKworIzogZWRpdC5jOjExNjYKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICInZGljdGlvbmFyeScgg0mDdoNWg4eDk4Kqi/OCxYK3IgorCisjOiBlZGl0LmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAijquPkYLwg1iDTIODg5OShjogJXMiCisKKyM6IGVkaXQuYzoyMzY4Cittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKJF9k/wpIINYg06DjYFbg4soXkUvXlkpIgorCisjOiBlZGl0LmM6MjM3MAorbXNnaWQgIiAocmVwbGFjZSkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoknWKtykgg1iDToONgVuDiyAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIoNYg0yDg4OTkoY6ICVzIgorCisjOiBlZGl0LmM6MjcxOQorbXNnaWQgIlNjYW5uaW5nIHRhZ3MuIgorbXNnc3RyICKDXoNPgvCDWINMg4ODk5KGLiIKKworIzogZWRpdC5jOjMzODEKK21zZ2lkICIgQWRkaW5nIgorbXNnc3RyICIgkseJwZKGIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjM0MzAKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIIyfjfWShi4uLiIKKworIzogZWRpdC5jOjM0ODYKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICKOboLfgsmW34LpIgorCisjOiBlZGl0LmM6MzQ5MQorbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICKRvILMjXOCzJJQjOoiCisKKyM6IGVkaXQuYzozNDk2Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIpdCiOqCzIpZk5YiCisKKyM6IGVkaXQuYzozNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICIlZCCU1JbagsyKWZOWICiRU4pZk5YgJWQgjMKShikiCisKKyM6IGVkaXQuYzozNTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIgorbXNnc3RyICIlZCCU1JbagsyKWZOWIgorCisjLiBTa2lwIGZ1cnRoZXIgYXJndW1lbnRzIGJ1dCBkbyBjb250aW51ZSB0bworIy4gKiBzZWFyY2ggZm9yIGEgdHJhaWxpbmcgY29tbWFuZC4KKyM6IGV2YWwuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDY6IFVua25vd24gdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwNjoglqKSbYLMlc+QlDogXCIlc1wiIgorCisjOiBldmFsLmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA3OiBNaXNzaW5nIGJyYWNlczogJXMiCittc2dzdHIgIkUxMDc6IINKg2KDUiAnKCcggqqCoILogtyCuYLxOiAlcyIKKworIzogZXZhbC5jOjE0MzUgZXZhbC5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiCCu4LMlc+QlILNgqCC6ILcgrmC8TogXCIlc1wiIgorCisjOiBldmFsLmM6MTcwNQorbXNnaWQgIkUxMDk6IE1pc3NpbmcgJzonIGFmdGVyICc/JyIKK21zZ3N0ciAiRTEwOTogJz8nIILMjOOCySAnOicggqqCoILogtyCuYLxIgorCisjOiBldmFsLmM6MjMyNworbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiAnKScggqqC3YLCgqmC6ILcgrmC8SIKKworIzogZXZhbC5jOjIzODkKK21zZ2lkICJFMTExOiBNaXNzaW5nICddJyIKK21zZ3N0ciAiRTExMTogJ10nIIKqgt2CwoKpguiC3IK5gvEiCisKKyM6IGV2YWwuYzoyNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIgorbXNnc3RyICJFMTEyOiCDSYN2g1aDh4OTlryCqoKgguiC3IK5gvE6ICVzIgorCisjOiBldmFsLmM6MjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEzOiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUxMTM6IJaikm2CzINJg3aDVoOHg5OCxYK3OiAlcyIKKworIzogZXZhbC5jOjI1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IIj4l3CVhCAoXCIpIIKqgqCC6ILcgrmC8TogJXMiCisKKyM6IGV2YWwuYzoyNjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTU6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE1OiCI+JdwlYQgKCcpIIKqgqCC6ILcgrmC8TogJXMiCisKKyM6IGV2YWwuYzozMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTExNjogitaQlCAlcyCCyYLNlrOM+ILIiPiQlILFgrciCisKKyM6IGV2YWwuYzozMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiCWopJtgsyK1pCUgsWCtzogJXMiCisKKyM6IGV2YWwuYzozMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTg6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE4OiCK1pCUgsyI+JCUgqqRvYK3gqyC3IK3OiAlcyIKKworIzogZXZhbC5jOjMwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOTogitaQlILMiPiQlIKqkauC6ILcgrmC8TogJXMiCisKKyM6IGV2YWwuYzozMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjA6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0OiAlcyIKK21zZ3N0ciAiRTEyMDogg1iDToOKg3aDZ4jIik+CxTxTSUQ+gqqOZ4LtguqC3IK1gr06ICVzIgorCisjLgorIy4gKiBZZXMgdGhpcyBpcyB1Z2x5LCBJIGRvbid0IHBhcnRpY3VsYXJseSBsaWtlIGl0IGVpdGhlci4gIEJ1dCBkb2luZyBpdAorIy4gKiB0aGlzIHdheSBoYXMgdGhlIGNvbXBlbGxpbmcgYWR2YW50YWdlIHRoYXQgdHJhbnNsYXRpb25zIG5lZWQgbm90IHRvCisjLiAqIGJlIHRvdWNoZWQgYXQgYWxsLiAgU2VlIGJlbG93IHdoYXQgJ29rJyBhbmQgJ3luYycgYXJlIHVzZWQgZm9yLgorIy4KKyM6IGV2YWwuYzozNjg3IGd1aS5jOjQzNzYgZ3VpX2d0ay5jOjIwNTkKK21zZ2lkICImT2siCittc2dzdHIgIiZPayIKKworIzogZXZhbC5jOjQyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQgjXM6IgorCisjOiBldmFsLmM6NTQ3NworbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisijIiS6CgmTylcbiIKKyKDTIODg5ODWoOLKCZDKSIKKworIzogZXZhbC5jOjU1MTcKK21zZ2lkICJjYWxsZWQgaW5wdXRyZXN0b3JlKCkgbW9yZSBvZnRlbiB0aGFuIGlucHV0c2F2ZSgpIgorbXNnc3RyICJpbnB1dHJlc3RvcmUoKSCCqiBpbnB1dHNhdmUoKSCC5oLoguCRvYKtjMSCzoLqgtyCtYK9IgorCisjIEFkZGVkIGF0IDEwLU1hci0yMDA0LgorIzogZXZhbC5jOjU5NzcKK21zZ2lkICJFNjU1OiBUb28gbWFueSBzeW1ib2xpYyBsaW5rcyAoY3ljbGU/KSIKK21zZ3N0ciAiRTY1NTogg1aDk4N7g4qDYoNOg4qDk4NOgqqRvYnfgqyC3IK3ICiPeorCgrWCxIKigumJwpRcXJCrgqqCoILogtyCtykiCisKKyM6IGV2YWwuYzo2NjA5Cittc2dpZCAiRTI0MDogTm8gY29ubmVjdGlvbiB0byBWaW0gc2VydmVyIgorbXNnc3RyICJFMjQwOiBWaW0gg1SBW4NvgtaCzJDakbGCqoKgguiC3IK5gvEiCisKKyM6IGV2YWwuYzo2NzA2Cittc2dpZCAiRTI3NzogVW5hYmxlIHRvIHJlYWQgYSBzZXJ2ZXIgcmVwbHkiCittc2dzdHIgIkUyNzc6IINUgVuDb4LMiZ6TmoKqgqCC6ILcgrmC8SIKKworIzogZXZhbC5jOjY3MzQKK21zZ2lkICJFMjU4OiBVbmFibGUgdG8gc2VuZCB0byBjbGllbnQiCittc2dzdHIgIkUyNTg6IINOg4mDQ4NBg5ODZ4LWkZeC6YKxgsaCqoLFgquC3IK5gvEiCisKKyM6IGV2YWwuYzo2NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiAlcyCC1pGXgumCsYLGgqqCxYKrgtyCuYLxIgorCisjOiBldmFsLmM6Njg4MgorbXNnaWQgIihJbnZhbGlkKSIKK21zZ3N0ciAiKJazjPgpIgorCisjOiBldmFsLmM6ODA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgorbXNnc3RyICJFMTIxOiCWopLoi2CCzJXPkJSCxYK3OiAlcyIKKworIzogZXZhbC5jOjg0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2MTogSWxsZWdhbCB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAiRTQ2MToglXOQs4LIlc+QlJa8gsWCtzogJXMiCisKKyM6IGV2YWwuYzo4Nzg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjI6IEZ1bmN0aW9uICVzIGFscmVhZHkgZXhpc3RzLCBhZGQgISB0byByZXBsYWNlIGl0IgorbXNnc3RyICJFMTIyOiCK1pCUICVzIILNkuiLYI3PgsWCtywgjcSS6ItggreC6YLJgs0gISCC8JLHicGCtYLEgq2CvoKzgqIiCisKKyM6IGV2YWwuYzo4ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjM6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMjM6IJaikuiLYILMitaQlILFgrc6ICVzIgorCisjOiBldmFsLmM6ODg3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6ICcoJyCCqoKgguiC3IK5gvE6ICVzIgorCisjOiBldmFsLmM6ODkwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNToglXOQs4LIiPiQlILFgrc6ICVzIgorCisjOiBldmFsLmM6ODk4MgorbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiA6ZW5kZnVuY3Rpb24ggqqCoILogtyCuYLxIgorCisjOiBldmFsLmM6OTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzogitaQlCAlcyCC8I3EkuiLYILFgquC3IK5gvE6II5nl3CShoLFgrciCisKKyM6IGV2YWwuYzo5MTU5Cittc2dpZCAiRTEyOTogRnVuY3Rpb24gbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTEyOTogitaQlJa8gqqXdouBgrOC6oLcgrciCisKKyM6IGV2YWwuYzo5MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6IIrWkJSWvILNkeWVto6agsWOboLcgueCyIKvguqCzoLIguiC3IK5gvE6ICVzIgorCisjOiBldmFsLmM6OTQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTMwOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTMwOiCWopLoi2CCzIrWkJSCxYK3OiAlcyIKKworIzogZXZhbC5jOjk0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMTogQ2Fubm90IGRlbGV0ZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTMxOiCK1pCUICVzIILwje2PnILFgquC3IK5gvE6II5nl3CShoLFgrciCisKKyM6IGV2YWwuYzo5NDU1Cittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiRTEzMjogitaQlIzEj2+CzJP8guqOcZCUgqogJ21heGZ1bmNkZXB0aCcggvCStIKmgtyCtYK9IgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV2YWwuYzo5NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbGxpbmcgJXMiCittc2dzdHIgIiVzIILwjsCNc5KGgsWCtyIKKworIzogZXZhbC5jOjk1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWJvcnRlZCIKK21zZ3N0ciAiJXMggqqShpJmgrOC6oLcgrWCvSIKKworIzogZXZhbC5jOjk1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgIiVzIIKqICMlbGQggvCV1IK1gtyCtYK9IgorCisjOiBldmFsLmM6OTU3OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICIlcyCCqiBcIiVzXCIggvCV1IK1gtyCtYK9IgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV2YWwuYzo5NTk1IGV4X2NtZHMyLmM6MjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb250aW51aW5nIGluICVzIgorbXNnc3RyICIlcyCCzI7AjXOC8IxwkbGShoLFgrciCisKKyM6IGV2YWwuYzo5NjIxCittc2dpZCAiRTEzMzogOnJldHVybiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxMzM6IIrWkJSKT4LJIDpyZXR1cm4ggqqCoILogtyCtYK9IgorCisjOiBldmFsLmM6OTk1MgorbXNnaWQgIiIKKyJcbiIKKyIjIGdsb2JhbCB2YXJpYWJsZXM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIINPg42BW4Nvg4uVz5CUOlxuIgorCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICAxNpBpkJQgJTAyeCwgIDiQaZCUICUwM28iCisKKyM6IGV4X2NtZHMuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiPiAlZCwgSGV4ICUwNHgsIE9jdGFsICVvIgorbXNnc3RyICI+ICVkLCAxNpBpkJQgJTA0eCwgOJBpkJQgJW8iCisKKyM6IGV4X2NtZHMuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiPiAlZCwgSGV4ICUwOHgsIE9jdGFsICVvIgorbXNnc3RyICI+ICVkLCAxNpBpkJQgJTA4eCwgOJBpkJQgJW8iCisKKyM6IGV4X2NtZHMuYzo0MzAKK21zZ2lkICJFMTM0OiBNb3ZlIGxpbmVzIGludG8gdGhlbXNlbHZlcyIKK21zZ3N0ciAiRTEzNDogjXOC8IK7guqOqZBngsmCzYjak66CxYKrgtyCuYLxIgorCisjOiBleF9jbWRzLmM6NDk5Cittc2dpZCAiMSBsaW5lIG1vdmVkIgorbXNnc3RyICIxII1zgqqI2pOugrOC6oLcgrWCvSIKKworIzogZXhfY21kcy5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgbW92ZWQiCittc2dzdHIgIiVsZCCNc4KqiNqTroKzguqC3IK1gr0iCisKKyM6IGV4X2NtZHMuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICIlbGQgjXOCqoN0g0KDi4Nej4iXnYKzguqC3IK1gr0iCisKKyM6IGV4X2NtZHMuYzo5NTIKK21zZ2lkICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMTM1OiAqg3SDQoOLg14qIGF1dG9jb21tYW5kgs2Mu43dgsyDb4Nig3SDQILwlc+NWIK1gsSCzYKigq+C3IK5gvEiCisKKyM6IGV4X2NtZHMuYzoxMDM3Cittc2dpZCAiW05vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlXVxuIgorbXNnc3RyICJbjcWM44LMlc+NWIKqlduRtoKzguqCxIKigtyCuYLxXVxuIgorCisjOiBleF9jbWRzLmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICIlc3ZpbWluZm86ICVzIGluIGxpbmU6ICIKK21zZ3N0ciAiJXN2aW1pbmZvOiAlcyCNc5baOiAiCisKKyM6IGV4X2NtZHMuYzoxMjg4Cittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIkUxMzY6IHZpbWluZm86IINHg4mBW4Kqkb2J34KsgumCzILFLCCIyI1+gs2DWINMg2KDdoK1gtyCtyIKKworIzogZXhfY21kcy5jOjEzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiJXMlcyVzIgorbXNnc3RyICJ2aW1pbmZvg3SDQINDg4sgXCIlc1wiJXMlcyVzIILwk8eNnoLdkoYgIgorCisjOiBleF9jbWRzLmM6MTMyNAorbXNnaWQgIiBpbmZvIgorbXNnc3RyICIgj+6V8SIKKworIzogZXhfY21kcy5jOjEzMjUKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiCDfYFbg04iCisKKyM6IGV4X2NtZHMuYzoxMzI2Cittc2dpZCAiIEZBSUxFRCIKK21zZ3N0ciAiII64lHMiCisKKyM6IGV4X2NtZHMuYzoxNDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzc6IFZpbWluZm8gZmlsZSBpcyBub3Qgd3JpdGFibGU6ICVzIgorbXNnc3RyICJFMTM3OiB2aW1pbmZvg3SDQINDg4uCqo+RjZ6C3YLFgquC3IK5gvE6ICVzIgorCisjOiBleF9jbWRzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiB2aW1pbmZvg3SDQINDg4sgJXMggvCV25G2gsWCq4LcgrmC8SEiCisKKyM6IGV4X2NtZHMuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAidmltaW5mb4N0g0CDQ4OLIFwiJXNcIiCC8I+RjZ6C3ZKGIgorCisjLiBXcml0ZSB0aGUgaW5mbzoKKyM6IGV4X2NtZHMuYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVGhpcyB2aW1pbmZvIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBWaW0gJXMuXG4iCittc2dzdHIgIiMggrGCzCB2aW1pbmZvIIN0g0CDQ4OLgs0gVmltICVzIILJguaCwYLEkLaQrIKzguqC3IK1gr0uXG4iCisKKyM6IGV4X2NtZHMuYzoxNjUxCittc2dpZCAiIgorIiMgWW91IG1heSBlZGl0IGl0IGlmIHlvdSdyZSBjYXJlZnVsIVxuIgorIlxuIgorbXNnc3RyICIiCisiIyCVz41YgreC6Y3bgsmCzY9cXJWqko2I04K1gsSCrYK+grOCoiFcbiIKKyJcbiIKKworIzogZXhfY21kcy5jOjE2NTMKK21zZ2lkICIjIFZhbHVlIG9mICdlbmNvZGluZycgd2hlbiB0aGlzIGZpbGUgd2FzIHdyaXR0ZW5cbiIKK21zZ3N0ciAiIyCCsYLMg3SDQINDg4uCqo+RgqmC6oK9jp6CzCAnZW5jb2RpbmcnIILMkmxcbiIKKworIzogZXhfY21kcy5jOjE3NTIKK21zZ2lkICJJbGxlZ2FsIHN0YXJ0aW5nIGNoYXIiCittc2dzdHIgIpVzkLOCyJDmk6qVto6agsWCtyIKKworIzogZXhfY21kcy5jOjIwOTcgZXhfY21kcy5jOjIzNjIgZXhfY21kczIuYzo3NjMKK21zZ2lkICJTYXZlIEFzIgorbXNnc3RyICKVypa8gsWV25G2IgorCisjLiBPdmVyd3JpdGluZyBhIGZpbGUgdGhhdCBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIgaXMgbm90IGEKKyMuICogZ29vZCBpZGVhLgorIzogZXhfY21kcy5jOjIxNDAKK21zZ2lkICJFMTM5OiBGaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciIKK21zZ3N0ciAiRTEzOTogk6+Ctpa8kU+CzIN0g0CDQ4OLgqqRvILMg2+DYoN0g0CCxZPHjZ6C3ILqgsSCooLcgrciCisKKyM6IGV4X2NtZHMuYzoyMTc0Cittc2dpZCAiV3JpdGUgcGFydGlhbCBmaWxlPyIKK21zZ3N0ciAig3SDQINDg4uC8JWUlaqTSYLJlduRtoK1gtyCt4KpPyIKKworIzogZXhfY21kcy5jOjIxODEKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiRTE0MDogg2+DYoN0g0CC8JWUlaqTSYLJlduRtoK3gumCyYLNICEggvCOZ4LBgsSCrYK+grOCoiIKKworIzogZXhfY21kcy5jOjIyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUgXCIlLipzXCI/IgorbXNnc3RyICKK+ZG2gsyDdINAg0ODiyBcIiUuKnNcIiCC8I/jj5GCq4K1gtyCt4KpPyIKKworIzogZXhfY21kcy5jOjIzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MTogTm8gZmlsZSBuYW1lIGZvciBidWZmZXIgJWxkIgorbXNnc3RyICJFMTQxOiCDb4Nig3SDQCAlbGQggsmCzZa8kU+CqoKgguiC3IK5gvEiCisKKyM6IGV4X2NtZHMuYzoyNDA1Cittc2dpZCAiRTE0MjogRmlsZSBub3Qgd3JpdHRlbjogV3JpdGluZyBpcyBkaXNhYmxlZCBieSAnd3JpdGUnIG9wdGlvbiIKK21zZ3N0ciAiRTE0Mjogg3SDQINDg4uCzZXbkbaCs4LqgtyCuYLxgsWCtYK9OiAnd3JpdGUnIINJg3aDVoOHg5OCyYLmguiWs4z4gsWCtyIKKworIzogZXhfY21kcy5jOjI0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIidyZWFkb25seScgb3B0aW9uIGlzIHNldCBmb3IgXCIlLipzXCIuXG4iCisiRG8geW91IHdpc2ggdG8gd3JpdGUgYW55d2F5PyIKK21zZ3N0ciAiIgorIlwiJS4qc1wiIILJgs0gJ3JlYWRvbmx5JyCDSYN2g1aDh4OTgqqQ3ZLogrOC6oLEgqKC3IK3XG4iCisii62Qp5NJgsmP44+RgquCtYLcgreCqT8iCisKKyM6IGV4X2NtZHMuYzoyNTk3Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICKDdINAg0ODi4LwldKPVyIKKworIzogZXhfY21kcy5jOjMyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MzogQXV0b2NvbW1hbmRzIHVuZXhwZWN0ZWRseSBkZWxldGVkIG5ldyBidWZmZXIgJXMiCittc2dzdHIgIkUxNDM6IGF1dG9jb21tYW5kgqqXXFyK+oK5griQVoK1gqKDb4Nig3SDQCAlcyCC8I3tj5yCtYLcgrWCvSIKKworIzogZXhfY21kcy5jOjMzMzkKK21zZ2lkICJFMTQ0OiBub24tbnVtZXJpYyBhcmd1bWVudCB0byA6eiIKK21zZ3N0ciAiRTE0NDogkJSCxYLNgsiCooj4kJSCqiA6eiCCyZNugrOC6oLcgrWCvSIKKworIzogZXhfY21kcy5jOjM0MjQKK21zZ2lkICJFMTQ1OiBTaGVsbCBjb21tYW5kcyBub3QgYWxsb3dlZCBpbiBydmltIgorbXNnc3RyICJFMTQ1OiBydmltgsWCzYNWg0aDi4NSg32Dk4NogvCOZ4KmgtyCuYLxIgorCisjOiBleF9jbWRzLmM6MzUzMQorbXNnaWQgIkUxNDY6IFJlZ3VsYXIgZXhwcmVzc2lvbnMgY2FuJ3QgYmUgZGVsaW1pdGVkIGJ5IGxldHRlcnMiCittc2dzdHIgIkUxNDY6IJCzi0uVXFyMu4LNlbaOmoLFi+aQ2ILpgrGCxoKqgsWCq4LcgrmC8SIKKworIzogZXhfY21kcy5jOjM4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKK21zZ3N0ciAiJXMggsmSdYq3grWC3IK3gqk/ICh5L24vYS9xL2wvXkUvXlkpIgorCisjOiBleF9jbWRzLmM6NDI3MAorbXNnaWQgIihJbnRlcnJ1cHRlZCkgIgorbXNnc3RyICIoioSNnoLcguqC3IK1gr0pIgorCisjOiBleF9jbWRzLmM6NDI3NAorbXNnaWQgIjEgc3Vic3RpdHV0aW9uIgorbXNnc3RyICIxIInTj4qSdYq3grWC3IK1gr0iCisKKyM6IGV4X2NtZHMuYzo0Mjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICIlbGQgidOPipJ1ireCtYLcgrWCvSIKKworIzogZXhfY21kcy5jOjQyNzkKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIgKIx2IDEgjXOT4CkiCisKKyM6IGV4X2NtZHMuYzo0MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiAlbGQgbGluZXMiCittc2dzdHIgIiAojHYgJWxkII1zk+ApIgorCisjOiBleF9jbWRzLmM6NDMzMgorbXNnaWQgIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE0NzogOmdsb2JhbCCC8I3Ei0GTSYLJgs2OZ4KmgtyCuYLxIgorCisjOiBleF9jbWRzLmM6NDM2NworbXNnaWQgIkUxNDg6IFJlZ3VsYXIgZXhwcmVzc2lvbiBtaXNzaW5nIGZyb20gZ2xvYmFsIgorbXNnc3RyICJFMTQ4OiBnbG9iYWyDUoN9g5ODaILJkLOLS5VcXIy7gqqOd5LogrOC6oLEgqKC3IK5gvEiCisKKyM6IGV4X2NtZHMuYzo0NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIoNwg16BW4OTgqqRU4LEgsyNc4LFgt2CwoKpguiC3IK1gr06ICVzIgorCisjOiBleF9jbWRzLmM6NDQ5NworbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMgjcWM44LJknWKt4KzguqCvZW2jpqX8TpcbiIKKyIkIgorCisjOiBleF9jbWRzLmM6NDU5OCBleF9kb2NtZC5jOjIwMTEKK21zZ2lkICJFNDc4OiBEb24ndCBwYW5pYyEiCittc2dzdHIgIkU0Nzg6II1RgsSCyIKigsWCrYK+grOCoiIKKworIzogZXhfY21kcy5jOjQ2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY2MTogU29ycnksIG5vICclcycgaGVscCBmb3IgJXMiCittc2dzdHIgIkU2NjE6II5jlE+CxYK3gqogJyVzJyCCzIN3g4uDdoKqICVzIILJgs2CoILogtyCuYLxIgorCisjOiBleF9jbWRzLmM6NDY1MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTQ5OiBTb3JyeSwgbm8gaGVscCBmb3IgJXMiCittc2dzdHIgIkUxNDk6II5jlE+CxYK3gqogJXMggsmCzYN3g4uDdoKqgqCC6ILcgrmC8SIKKworIzogZXhfY21kcy5jOjQ2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU29ycnksIGhlbHAgZmlsZSBcIiVzXCIgbm90IGZvdW5kIgorbXNnc3RyICKOY5RPgsWCt4Kqg3eDi4N2g3SDQINDg4sgXCIlc1wiIIKqgt2CwoKpguiC3IK5gvEiCisKKyM6IGV4X2NtZHMuYzo1MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTA6IE5vdCBhIGRpcmVjdG9yeTogJXMiCittc2dzdHIgIkUxNTA6IINmg0KDjINOg2eDioLFgs2CoILogtyCuYLxOiAlcyIKKworIzogZXhfY21kcy5jOjUzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MjogQ2Fubm90IG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNTI6II+RjZ6C3ZdwgskgJXMggvCKSoKvgtyCuYLxIgorCisjOiBleF9jbWRzLmM6NTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE1Mzogk8eNnpdwgskgJXMggvCKSoKvgtyCuYLxIgorCisjIEFkZGVkIGF0IDI5LUFwci0yMDA0LgorIzogZXhfY21kcy5jOjUzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY3MDogTWl4IG9mIGhlbHAgZmlsZSBlbmNvZGluZ3Mgd2l0aGluIGEgbGFuZ3VhZ2U6ICVzIgorbXNnc3RyICJFNjcwOiAxgsKCzIy+jOqCzIN3g4uDdoN0g0CDQ4OLgsmVoZCUgsyDR4OTg1KBW4NogqqNrI3dgrWCxIKigtyCtzogJXMiCisKKyM6IGV4X2NtZHMuYzo1NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTQ6IER1cGxpY2F0ZSB0YWcgXCIlc1wiIGluIGZpbGUgJXMiCittc2dzdHIgIkUxNTQ6IINeg08gXCIlc1wiIIKqg3SDQINDg4sgJXMggsmPZJWhgrWCxIKigtyCtyIKKworIzogZXhfY21kcy5jOjU1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiCWopJtgsxzaWdug1KDfYOTg2iCxYK3OiAlcyIKKworIzogZXhfY21kcy5jOjU1NzcKK21zZ2lkICJFMTU2OiBNaXNzaW5nIHNpZ24gbmFtZSIKK21zZ3N0ciAiRTE1Njogc2lnbpa8gqqCoILogtyCuYLxIgorCisjOiBleF9jbWRzLmM6NTYyMworbXNnaWQgIkU2MTI6IFRvbyBtYW55IHNpZ25zIGRlZmluZWQiCittc2dzdHIgIkU2MTI6IHNpZ26CzJLoi2CCqpG9kJSMqYLCgqmC6ILcgrWCvSIKKworIzogZXhfY21kcy5jOjU2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzOTogSW52YWxpZCBzaWduIHRleHQ6ICVzIgorbXNnc3RyICJFMjM5OiCWs4z4gshzaWdugsyDZYNMg1iDZ4LFgrc6ICVzIgorCisjOiBleF9jbWRzLmM6NTcyMiBleF9jbWRzLmM6NTkxMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiCWopJtgsxzaWdugsWCtzogJXMiCisKKyM6IGV4X2NtZHMuYzo1NzcxCittc2dpZCAiRTE1OTogTWlzc2luZyBzaWduIG51bWJlciIKK21zZ3N0ciAiRTE1OTogc2lnboLMlNSNhoKqgqCC6ILcgrmC8SIKKworIzogZXhfY21kcy5jOjU4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1ODogSW52YWxpZCBidWZmZXIgbmFtZTogJXMiCittc2dzdHIgIkUxNTg6IJazjPiCyINvg2KDdINAlryCxYK3OiAlcyIKKworIzogZXhfY21kcy5jOjU4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NzogSW52YWxpZCBzaWduIElEOiAlbGQiCittc2dzdHIgIkUxNTc6IJazjPiCyHNpZ26Or5XKjnGCxYK3OiAlbGQiCisKKyMgQWRkZWQgYXQgMjctSmFuLTIwMDQuCisjOiBleF9jbWRzLmM6NTk2MgorbXNnaWQgIiAoTk9UIEZPVU5EKSIKK21zZ3N0ciAiICAogt2CwoKpguiC3IK5gvEpIgorCisjOiBleF9jbWRzLmM6NTk2NAorbXNnaWQgIiAobm90IHN1cHBvcnRlZCkiCittc2dzdHIgIiAolPGDVIN8gVuDZykiCisKKyM6IGV4X2NtZHMuYzo2MDYzCittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJbje2PnI3PXSIKKworIzogZXhfY21kczIuYzo5MgorbXNnaWQgIkVudGVyaW5nIERlYnVnIG1vZGUuICBUeXBlIFwiY29udFwiIHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAig2aDb4Nig0+DgoFbg2iCyZP8guiC3IK3LiCRsYKvgumCyYLNIFwiY29udFwiIILGk/yXzYK1gsSCrYK+grOCoi4iCisKKyM6IGV4X2NtZHMyLmM6OTYgZXhfZG9jbWQuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6ICVzIgorbXNnc3RyICKNcyAlbGQ6ICVzIgorCisjOiBleF9jbWRzMi5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNtZDogJXMiCittc2dzdHIgIoNSg32Dk4NoOiAlcyIKKworIzogZXhfY21kczIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJlYWtwb2ludCBpbiBcIiVzJXNcIiBsaW5lICVsZCIKK21zZ3N0ciAig3WDjIFbg06DfINDg5ODZyBcIiVzJXNcIiCNcyAlbGQiCisKKyM6IGV4X2NtZHMyLmM6NTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjE6IEJyZWFrcG9pbnQgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTE2MTogg3WDjIFbg06DfINDg5ODZ4Kqgt2CwoKpguiC3IK5gvE6ICVzIgorCisjOiBleF9jbWRzMi5jOjU2NgorbXNnaWQgIk5vIGJyZWFrcG9pbnRzIGRlZmluZWQiCittc2dzdHIgIoN1g4yBW4NOg3yDQ4OTg2eCqpLoi2CCs4LqgsSCooLcgrmC8SIKKworIzogZXhfY21kczIuYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgII1zICVsZCIKKworIzogZXhfY21kczIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZSBjaGFuZ2VzIHRvIFwiJS4qc1wiPyIKK21zZ3N0ciAilc+NWILwIFwiJS4qc1wiIILJlduRtoK1gtyCt4KpPyIKKworIzogZXhfY21kczIuYzo3ODggZXhfZG9jbWQuYzo5MzU2Cittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIpazkegiCisKKyM6IGV4X2NtZHMyLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiCDb4Nig3SDQCBcIiVzXCIggsyVz41Ygs2V25G2grOC6oLEgqKC3IK5gvEiCisKKyM6IGV4X2NtZHMyLmM6OTg0Cittc2dpZCAiV2FybmluZzogRW50ZXJlZCBvdGhlciBidWZmZXIgdW5leHBlY3RlZGx5IChjaGVjayBhdXRvY29tbWFuZHMpIgorbXNnc3RyICKMeI2QOiCXXFyK+oK5griRvINvg2KDdINAgtaI2pOugrWC3IK1gr0gKGF1dG9jb21tYW5kcyCC8JKygteCxIKtgr6Cs4KiKSIKKworIzogZXhfY21kczIuYzoxMzg3Cittc2dpZCAiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTYzOiCV0o9XgreC6YN0g0CDQ4OLgs0xgsKCtYKpgqCC6ILcgrmC8SIKKworIzogZXhfY21kczIuYzoxMzg5Cittc2dpZCAiRTE2NDogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBmaWxlIgorbXNnc3RyICJFMTY0OiCNxY+JgsyDdINAg0ODi4LmguiRT4LJgs2Nc4KvgtyCuYLxIgorCisjOiBleF9jbWRzMi5jOjEzOTEKK21zZ2lkICJFMTY1OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgZmlsZSIKK21zZ3N0ciAiRTE2NTogjcWM44LMg3SDQINDg4uC8Il6gqaCxIzjgsmCzY1zgq+C3IK5gvEiCisKKyM6IGV4X2NtZHMyLmM6MTgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY2OiBjb21waWxlciBub3Qgc3VwcG9ydGVkOiAlcyIKK21zZ3N0ciAiRTY2NjoggruCzINSg5ODcINDg4mCyYLNkc6JnoK1gsSCooLcgrmC8TogJXMiCisKKyM6IGV4X2NtZHMyLmM6MTg5NworIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiCittc2dzdHIgIlwiJXNcIiCC8CBcIiVzXCIggqmC54yfjfWShiIKKworIzogZXhfY21kczIuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIgorbXNnc3RyICJcIiVzXCIggvCMn431koYiCisKKyM6IGV4X2NtZHMyLmM6MTk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorbXNnc3RyICIncnVudGltZXBhdGgnIILMkoaCyYLNgt2CwoKpguiC3IK5gvE6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTc0Cittc2dpZCAiU291cmNlIFZpbSBzY3JpcHQiCittc2dzdHIgIlZpbYNYg06DioN2g2eCzI7mjZ6C3SIKKworIzogZXhfY21kczIuYzoyMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAig2aDQoOMg06DZ4OKgs2O5o2egt+C3IK5gvE6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICJcIiVzXCIggvCO5o2egt+C3IK5gvEiCisKKyM6IGV4X2NtZHMyLmM6MjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIo1zICVsZDogXCIlc1wiIILwjuaNnoLfgtyCuYLxIgorCisjOiBleF9jbWRzMi5jOjIyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJcIiVzXCIggvCO5o2ekoYiCisKKyM6IGV4X2NtZHMyLmM6MjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogc291cmNpbmcgXCIlc1wiIgorbXNnc3RyICKNcyAlbGQ6ICVzIILwjuaNnpKGIgorCisjOiBleF9jbWRzMi5jOjIzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc291cmNpbmcgJXMiCittc2dzdHIgIiVzIILMjuaNnoLwiq6XuSIKKworIzogZXhfY21kczIuYzoyNzA3Cittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIlcxNTogjHiNkDogjXOL5pDYgqqVc5CzgsWCty4gXk0ggqqCyIKigsyCxYK1guWCpCIKKworIzogZXhfY21kczIuYzoyNzU2Cittc2dpZCAiRTE2NzogOnNjcmlwdGVuY29kaW5nIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2NzogOnNjcmlwdGVuY29kaW5nIIKqjuaNnoNYg06DioN2g2eIyIpPgsWOZ5dwgrOC6oLcgrWCvSIKKworIzogZXhfY21kczIuYzoyNzg5Cittc2dpZCAiRTE2ODogOmZpbmlzaCB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjg6IDpmaW5pc2gggqqO5o2eg1iDToOKg3aDZ4jIik+CxY5nl3CCs4LqgtyCtYK9IgorCisjOiBleF9jbWRzMi5jOjMyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFnZSAlZCIKK21zZ3N0ciAiJWQgg3mBW4NXIgorCisjOiBleF9jbWRzMi5jOjMzOTQKK21zZ2lkICJObyB0ZXh0IHRvIGJlIHByaW50ZWQiCittc2dzdHIgIojzjfyCt4Lpg2WDTINYg2eCqoKgguiC3IK5gvEiCisKKyM6IGV4X2NtZHMyLmM6MzQ3MgorbXNnaWQgIlByaW50aW5nIHBhZ2UgJWQgKCVkJSUpIgorbXNnc3RyICKI8438koY6IIN5gVuDVyAlZCAoJWQlJSkiCisKKyM6IGV4X2NtZHMyLmM6MzQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgQ29weSAlZCBvZiAlZCIKK21zZ3N0ciAiIINSg3OBWyAlZCAokVMgJWQgkoYpIgorCisjOiBleF9jbWRzMi5jOjM1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRlZDogJXMiCittc2dzdHIgIojzjfyCtYLcgrWCvTogJXMiCisKKyM6IGV4X2NtZHMyLmM6MzU0OQorbXNnaWQgIlByaW50aW5nIGFib3J0ZWQiCittc2dzdHIgIojzjfyCqpKGjn6Cs4LqgtyCtYK9IgorCisjOiBleF9jbWRzMi5jOjM5MTQKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IFBvc3RTY3JpcHSPb5fNg3SDQINDg4uCzI+RjZ6C3YNHg4mBW4LFgrciCisKKyM6IGV4X2NtZHMyLmM6NDE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI0OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNjI0OiCDdINAg0ODiyBcIiVzXCIggvCKSoKvgtyCuYLxIgorCisjOiBleF9jbWRzMi5jOjQxOTkgZXhfY21kczIuYzo0ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTc6IENhbid0IHJlYWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NzogUG9zdFNjcmlwdILMg4qDXFyBW4NYg3SDQINDg4sgXCIlc1wiIILwk8eNnoLfgtyCuYLxIgorCisjOiBleF9jbWRzMi5jOjQyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxODogZmlsZSBcIiVzXCIgaXMgbm90IGEgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE4OiCDdINAg0ODiyBcIiVzXCIggs0gUG9zdFNjcmlwdCCDioNcXIFbg1iDdINAg0ODi4LFgs2CoILogtyCuYLxIgorCisjOiBleF9jbWRzMi5jOjQyMjIgZXhfY21kczIuYzo0MjQyIGV4X2NtZHMyLmM6NDI1NyBleF9jbWRzMi5jOjQyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOTogZmlsZSBcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIKK21zZ3N0ciAiRTYxOTogg3SDQINDg4sgXCIlc1wiIILNkc6JnoK1gsSCooLIgqIgUG9zdFNjcmlwdCCDioNcXIFbg1iDdINAg0ODi4LFgrciCisKKyM6IGV4X2NtZHMyLmM6NDMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjIxOiBcIiVzXCIgcmVzb3VyY2UgZmlsZSBoYXMgd3JvbmcgdmVyc2lvbiIKK21zZ3N0ciAiRTYyMTogg4qDXFyBW4NYg3SDQINDg4sgXCIlc1wiIILNg2+BW4NXg4eDk4KqiNmCyILogtyCtyIKKworIzogZXhfY21kczIuYzo0Nzc2Cittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiBQb3N0U2NyaXB0j2+XzZdwgsyDdINAg0ODi4LwikqCr4LcgrmC8SIKKworIzogZXhfY21kczIuYzo0ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTY6IIN0g0CDQ4OLIFwiJXNcIiCC8IpKgq+C3IK5gvEiCisKKyM6IGV4X2NtZHMyLmM6NDkyOAorbXNnaWQgIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwicHJvbG9nLnBzXCIiCittc2dzdHIgIkU0NTY6IFBvc3RTY3JpcHSCzIOKg1xcgVuDWIN0g0CDQ4OLIFwicHJvbG9nLnBzXCIggqqC3YLCgqmC6ILcgrmC8SIKKworIzogZXhfY21kczIuYzo0OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXMucHNcIiIKK21zZ3N0ciAiRTQ1NjogUG9zdFNjcmlwdILMg4qDXFyBW4NYg3SDQINDg4sgXCIlcy5wc1wiIIKqgt2CwoKpguiC3IK5gvEiCisKKyM6IGV4X2NtZHMyLmM6NDk3NworIywgYy1mb3JtYXQKK21zZ2lkICJFNjIwOiBVbmFibGUgdG8gY29udmVydCBmcm9tIG11bHRpLWJ5dGUgdG8gXCIlc1wiIGVuY29kaW5nIgorbXNnc3RyICJFNjIwOiCDfYOLg2CDb4NDg2eVto6agvCDR4OTg1KBW4NoIFwiJXNcIiCC1pXPireCxYKrgtyCuYLxIgorCisjOiBleF9jbWRzMi5jOjUxMDIKK21zZ2lkICJTZW5kaW5nIHRvIHByaW50ZXIuLi4iCittc2dzdHIgIoN2g4qDk4NegsmRl5BNkoYuLi4iCisKKyM6IGV4X2NtZHMyLmM6NTEwNgorbXNnaWQgIkUzNjU6IEZhaWxlZCB0byBwcmludCBQb3N0U2NyaXB0IGZpbGUiCittc2dzdHIgIkUzNjU6IFBvc3RTY3JpcHSDdINAg0ODi4LMiPON/ILJjriUc4K1gtyCtYK9IgorCisjOiBleF9jbWRzMi5jOjUxMDgKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIojzjfyDV4OHg3WC8JGXkE2CtYLcgrWCvS4iCisKKyM6IGV4X2NtZHMyLmM6NTYxOAorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50ICVzbGFuZ3VhZ2U6IFwiJXNcIiIKK21zZ3N0ciAijLuN3YLMICVzjL6M6jogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjU2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6IIy+jOqC8CBcIiVzXCIggsmQ3ZLogsWCq4LcgrmC8SIKKworIzogZXhfZG9jbWQuYzo1MjUKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAiRXiDgoFbg2iCyZP8guiC3IK3LiCDbYFbg32Di4LJlt+C6YLJgs1cInZpc3VhbFwigsaT/JfNgrWCxIKtgr6Cs4KiLiIKKworIy4gbXVzdCBiZSBhdCBFT0YKKyM6IGV4X2RvY21kLmM6NTYxCittc2dpZCAiRTUwMTogQXQgZW5kLW9mLWZpbGUiCittc2dzdHIgIkU1MDE6IIN0g0CDQ4OLgsyPSZe5iMqSdSIKKworIzogZXhfZG9jbWQuYzo2NjkKK21zZ2lkICJFMTY5OiBDb21tYW5kIHRvbyByZWN1cnNpdmUiCittc2dzdHIgIkUxNjk6IINSg32Dk4NogqqNxItBk0mJ34KsgtyCtyIKKworIzogZXhfZG9jbWQuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDU6IEV4Y2VwdGlvbiBub3QgY2F1Z2h0OiAlcyIKK21zZ3N0ciAiRTYwNTogl+GKT4Kqld+RqIKzguqC3IK5gvGCxYK1gr06ICVzIgorCisjOiBleF9kb2NtZC5jOjEzMTcKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICKO5o2eg3SDQINDg4uCzI3FjOOCxYK3IgorCisjOiBleF9kb2NtZC5jOjEzMTgKK21zZ2lkICJFbmQgb2YgZnVuY3Rpb24iCittc2dzdHIgIorWkJSCzI3FjOOCxYK3IgorCisjOiBleF9kb2NtZC5jOjE5MDcKK21zZ2lkICJFNDY0OiBBbWJpZ3VvdXMgdXNlIG9mIHVzZXItZGVmaW5lZCBjb21tYW5kIgorbXNnc3RyICJFNDY0OiCDhoFbg1WS6Itgg1KDfYOTg2iCzIKggqKC3IKigsiOZ5dwgsWCtyIKKworIzogZXhfZG9jbWQuYzoxOTIxCittc2dpZCAiRTQ5MjogTm90IGFuIGVkaXRvciBjb21tYW5kIgorbXNnc3RyICJFNDkyOiCDR4Nmg0KDXoLMg1KDfYOTg2iCxYLNgqCC6ILcgrmC8SIKKworIzogZXhfZG9jbWQuYzoyMDMwCittc2dpZCAiRTQ5MzogQmFja3dhcmRzIHJhbmdlIGdpdmVuIgorbXNnc3RyICJFNDkzOiCLdIKzgtyCzJTNiM2Cqo53kuiCs4LqgtyCtYK9IgorCisjOiBleF9kb2NtZC5jOjIwMzkKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4sIE9LIHRvIHN3YXAiCittc2dzdHIgIot0grOC3ILMlM2IzYKqjneS6IKzguqC3IK1gr0sIJP8kdaCpoLcgreCqT8iCisKKyM6IGV4X2RvY21kLmM6MjE2MgorbXNnaWQgIkU0OTQ6IFVzZSB3IG9yIHc+PiIKK21zZ3N0ciAiRTQ5NDogdyCC4IK1gq2CzSB3Pj4ggvCOZ5dwgrWCxIKtgr6Cs4KiIgorCisjOiBleF9kb2NtZC5jOjM3ODgKK21zZ2lkICJFMzE5OiBTb3JyeSwgdGhlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUzMTk6IIKxgsyDb4Fbg1eDh4OTgsWCzYKxgsyDUoN9g5ODaILNl5iXcILFgquC3IK5gvEsIIKygt+C8YLIgrOCoiIKKworIzogZXhfZG9jbWQuYzozOTkxCittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6IIN0g0CDQ4OLlryCzSAxIILCgsmCtYLEgq2CvoKzgqIiCisKKyM6IGV4X2RvY21kLmM6NDU3MQorbXNnaWQgIjEgbW9yZSBmaWxlIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIpXSj1eCt4LXgquDdINAg0ODi4KqIDEgjMKCoILogtyCt4KqLCCPSZe5grWC3IK3gqk/IgorCisjOiBleF9kb2NtZC5jOjQ1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICKV0o9XgreC14Krg3SDQINDg4uCqoKggsYgJWQgjMKCoILogtyCt4KqLCCPSZe5grWC3IK3gqk/IgorCisjOiBleF9kb2NtZC5jOjQ1ODEKK21zZ2lkICJFMTczOiAxIG1vcmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTczOiCV0o9XgreC14Krg3SDQINDg4uCqiAxIIzCgqCC6ILcgrciCisKKyM6IGV4X2RvY21kLmM6NDU4MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiCV0o9XgreC14Krg3SDQINDg4uCqoKggsYgJWxkIIzCgqCC6ILcgrciCisKKyM6IGV4X2RvY21kLmM6NDY3OAorbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxNzQ6IINSg32Dk4NogqqK+YLJgqCC6ILcgrc6II3EkuiLYIK3gumCyYLNICEggvCSx4nBgrWCxIKtgr6Cs4KiIgorCisjOiBleF9kb2NtZC5jOjQ3ODkKK21zZ2lkICIiCisiXG4iCisiICAgIE5hbWUgICAgICAgIEFyZ3MgUmFuZ2UgQ29tcGxldGUgIERlZmluaXRpb24iCittc2dzdHIgIiIKKyJcbiIKKyIgICAglryRTyAgICAgICAgiPiQlCCUzYjNICCV4oquICAgICAgkuiLYCIKKworIzogZXhfZG9jbWQuYzo0ODc4Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICKDhoFbg1WS6Itgg1KDfYOTg2iCqoypgsKCqYLogtyCuYLxgsWCtYK9IgorCisjOiBleF9kb2NtZC5jOjQ5MTAKK21zZ2lkICJFMTc1OiBObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIgorbXNnc3RyICJFMTc1OiCRrpCrgs2S6ItggrOC6oLEgqKC3IK5gvEiCisKKyM6IGV4X2RvY21kLmM6NDk2MgorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3NjogiPiQlILMkJSCqpazjPiCxYK3IgorCisjOiBleF9kb2NtZC5jOjQ5NzcKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiCDSoNFg5ODZ4LwMo9kjneS6IK3gumCsYLGgs2CxYKrgtyCuYLxIgorCisjOiBleF9kb2NtZC5jOjQ5ODcKK21zZ2lkICJFMTc4OiBJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIGNvdW50IgorbXNnc3RyICJFMTc4OiCDSoNFg5ODZ4LMj8iXqpJsgqqWs4z4gsWCtyIKKworIzogZXhfZG9jbWQuYzo1MDE4Cittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiCV4oqugsyCvYLfgsyI+JCUgqqVS5d2gsWCtyIKKworIzogZXhfZG9jbWQuYzo1MDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiCWs4z4gsiV4oqujneS6ILFgrc6ICVzIgorCisjOiBleF9kb2NtZC5jOjUwNTkKK21zZ2lkICJFNDY4OiBDb21wbGV0aW9uIGFyZ3VtZW50IG9ubHkgYWxsb3dlZCBmb3IgY3VzdG9tIGNvbXBsZXRpb24iCittc2dzdHIgIkU0Njg6IJXiiq6I+JCUgs2DSoNYg16DgJXiiq6CxYK1gqmOZ5dwgsWCq4LcgrmC8SIKKworIzogZXhfZG9jbWQuYzo1MDY1Cittc2dpZCAiRTQ2NzogQ3VzdG9tIGNvbXBsZXRpb24gcmVxdWlyZXMgYSBmdW5jdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiRTQ2Nzogg0qDWINeg4CV4oqugsmCzYj4kJSCxoK1gsSK1pCUgqqVS5d2gsWCtyIKKworIzogZXhfZG9jbWQuYzo1MDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MToglrOM+ILIka6Qq4LFgrc6ICVzIgorCisjOiBleF9kb2NtZC5jOjUxMTkKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4MjoglrOM+ILIg1KDfYOTg2iWvILFgrciCisKKyM6IGV4X2RvY21kLmM6NTEzNAorbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4Mzogg4aBW4NVkuiLYINSg32Dk4Nogs2JcJHllbaOmoLFjm6C3ILngsiCr4Lqgs6CyILogtyCuYLxIgorCisjOiBleF9kb2NtZC5jOjUyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NDogTm8gc3VjaCB1c2VyLWRlZmluZWQgY29tbWFuZDogJXMiCittc2dzdHIgIkUxODQ6IIK7gsyDhoFbg1WS6Itgg1KDfYOTg2iCzYKgguiC3IK5gvE6ICVzIgorCisjOiBleF9kb2NtZC5jOjU2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NTogQ2Fubm90IGZpbmQgY29sb3Igc2NoZW1lICVzIgorbXNnc3RyICJFMTg1OiCDSoOJgVuDWINMgVuDgCAlcyCCqoLdgsKCqYLogtyCuYLxIgorCisjOiBleF9kb2NtZC5jOjU2NzQKK21zZ2lkICJHcmVldGluZ3MsIFZpbSB1c2VyISIKK21zZ3N0ciAiVmltII5ngqKCs4LxgUGC4oKgISIKKworIzogZXhfZG9jbWQuYzo2MzkxCittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgIpBWgrWCooNFg0KDk4Nog0WCxYN0g0CDQ4OLgvCV0o9XgrWC3IK3IgorCisjOiBleF9kb2NtZC5jOjY2ODYKK21zZ2lkICJObyBzd2FwIGZpbGUiCittc2dzdHIgIoNYg4+DYoN2g3SDQINDg4uCqoKgguiC3IK5gvEiCisKKyM6IGV4X2RvY21kLmM6Njc5MAorbXNnaWQgIkFwcGVuZCBGaWxlIgorbXNnc3RyICKSx4nBg3SDQINDg4siCisKKyM6IGV4X2RvY21kLmM6Njg1NAorbXNnaWQgIkUxODY6IE5vIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE4NjogkU+CzINmg0KDjINOg2eDioLNgqCC6ILcgrmC8SIKKworIzogZXhfZG9jbWQuYzo2OTM2Cittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4NzoglqKSbSIKKworIzogZXhfZG9jbWQuYzo3MDIxCittc2dpZCAiRTQ2NTogOndpbnNpemUgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiCittc2dzdHIgIkU0NjU6ICIKKworIzogZXhfZG9jbWQuYzo3MDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldpbmRvdyBwb3NpdGlvbjogWCAlZCwgWSAlZCIKK21zZ3N0ciAig0WDQoOTg2iDRYjKknU6IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NzA4MgorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisiRTE4ODoggrGCzIN2g4mDYoNng3qBW4OAgsmCzYNFg0KDk4Nog0WIypJ1gsyO5pO+i0CUXFyCzY7AkZWCs4LqgsSCooLcgrmC8SIKKworIzogZXhfZG9jbWQuYzo3MDkyCittc2dpZCAiRTQ2NjogOndpbnBvcyByZXF1aXJlcyB0d28gbnVtYmVyIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTQ2NjogOndpbnBvcyCCyYLNMoLCgsyQlJJsgsyI+JCUgqqVS5d2gsWCtyIKKworIzogZXhfZG9jbWQuYzo3MzcwCittc2dpZCAiU2F2ZSBSZWRpcmVjdGlvbiIKK21zZ3N0ciAig4qDX4NDg4yDToNngvCV25G2grWC3IK3IgorCisjOiBleF9kb2NtZC5jOjc1NjAKK21zZ2lkICJTYXZlIFZpZXciCittc2dzdHIgIoNyg4WBW4LwlduRtoK1gtyCtyIKKworIzogZXhfZG9jbWQuYzo3NTYxCittc2dpZCAiU2F2ZSBTZXNzaW9uIgorbXNnc3RyICKDWoNig1aDh4OTj+6V8YLwlduRtoK1gtyCtyIKKworIzogZXhfZG9jbWQuYzo3NTYzCittc2dpZCAiU2F2ZSBTZXR1cCIKK21zZ3N0ciAikN2S6ILwlduRtoK1gtyCtyIKKworIzogZXhfZG9jbWQuYzo3NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODk6IFwiJXNcIiBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTE4OTogXCIlc1wiIIKqkbaN3YK1gtyCtyAoj+OPkYK3gumCyYLNICEggvCSx4nBgrWCxIKtgr6Cs4KiKSIKKworIzogZXhfZG9jbWQuYzo3NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTA6IENhbm5vdCBvcGVuIFwiJXNcIiBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE5MDogXCIlc1wiIILwj5GNnoLdl3CCxoK1gsSKSoKvgtyCuYLxIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo3NzQ0Cittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICJFMTkxOiCI+JCUgs2Vto6agqmRT5BpL4zjkd6DToNIgVuDZ4LFgrWCyIKvguqCzoKigq+C3IK5gvEiCisKKyM6IGV4X2RvY21kLmM6Nzc4NgorbXNnaWQgIkUxOTI6IFJlY3Vyc2l2ZSB1c2Ugb2YgOm5vcm1hbCB0b28gZGVlcCIKK21zZ3N0ciAiRTE5MjogOm5vcm1hbCCCzI3Ei0GXmJdwgqqQW4KtgsiC6IK3gqyC3IK1gr0iCisKKyM6IGV4X2RvY21kLmM6ODMwNAorbXNnaWQgIkUxOTQ6IE5vIGFsdGVybmF0ZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgJyMnIgorbXNnc3RyICJFMTk0OiAnIyeC8JJ1gquKt4KmgumVm4N0g0CDQ4OLgsyWvJFPgqqCoILogtyCuYLxIgorCisjOiBleF9kb2NtZC5jOjgzMzUKK21zZ2lkICJFNDk1OiBubyBhdXRvY29tbWFuZCBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWZpbGU+XCIiCittc2dzdHIgIkU0OTU6IFwiPGFmaWxlPlwigvCSdYKrireCpoLpYXV0b2NvbW1hbmSCzIN0g0CDQ4OLlryCqoKgguiC3IK5gvEiCisKKyM6IGV4X2RvY21kLmM6ODM0MworbXNnaWQgIkU0OTY6IG5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAiRTQ5NjogXCI8YWJ1Zj5cIoLwknWCq4q3gqaC6WF1dG9jb21tYW5kg2+DYoN0g0CU1I2GgqqCoILogtyCuYLxIgorCisjOiBleF9kb2NtZC5jOjgzNTQKK21zZ2lkICJFNDk3OiBubyBhdXRvY29tbWFuZCBtYXRjaCBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFtYXRjaD5cIiIKK21zZ3N0ciAiRTQ5NzogXCI8YW1hdGNoPlwigvCSdYKrireCpoLpYXV0b2NvbW1hbmSCzIpZk5aWvIKqgqCC6ILcgrmC8SIKKworIzogZXhfZG9jbWQuYzo4MzY0Cittc2dpZCAiRTQ5ODogbm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIkU0OTg6IFwiPHNmaWxlPlwigvCSdYKrireCpoLpIDpzb3VyY2Ugkc6P24N0g0CDQ4OLlryCqoKgguiC3IK5gvEiCisKKyM6IGV4X2RvY21kLmM6ODQwNQorIywgbm8tYy1mb3JtYXQKK21zZ2lkICJFNDk5OiBFbXB0eSBmaWxlIG5hbWUgZm9yICclJyBvciAnIycsIG9ubHkgd29ya3Mgd2l0aCBcIjpwOmhcIiIKK21zZ3N0ciAiIgorIkU0OTk6ICclJyCC4iAnIycggqqWs5a8g3SDQINDg4uCyILMgsUgXCI6cDpoXCIggvCUuoLtgsiCoo5ngqKV+4LNgsWCq4LcgrmC8SIKKworIzogZXhfZG9jbWQuYzo4NDA3Cittc2dpZCAiRTUwMDogRXZhbHVhdGVzIHRvIGFuIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiRTUwMDogi/OVto6al/GCxoK1gsSVXYm/grOC6oLcgrWCvSIKKworIzogZXhfZG9jbWQuYzo5MzM4Cittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiB2aW1pbmZvg3SDQINDg4uC8JPHjZ6XcILGgrWCxIpKgq+C3IK5gvEiCisKKyM6IGV4X2RvY21kLmM6OTUxMQorbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5NjoggrGCzINvgVuDV4OHg5OCyY2HjpqCzYKgguiC3IK5gvEiCisKKyM6IGV4X2V2YWwuYzo0NDAKK21zZ2lkICJFNjA4OiBDYW5ub3QgOnRocm93IGV4Y2VwdGlvbnMgd2l0aCAnVmltJyBwcmVmaXgiCittc2dzdHIgIkU2MDg6ICdWaW0nIILFjm6C3ILpl+GKT4LNIDp0aHJvdyCCxYKrgtyCuYLxIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV4X2V2YWwuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIHRocm93bjogJXMiCittc2dzdHIgIpfhik+CqpStkLaCtYLcgrWCvTogJXMiCisKKyM6IGV4X2V2YWwuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGZpbmlzaGVkOiAlcyIKK21zZ3N0ciAil+GKT4KqjvuRqYK1gtyCtYK9OiAlcyIKKworIzogZXhfZXZhbC5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZGlzY2FyZGVkOiAlcyIKK21zZ3N0ciAil+GKT4KqlGqK/IKzguqC3IK1gr06ICVzIgorCisjOiBleF9ldmFsLmM6NjIwIGV4X2V2YWwuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIGxpbmUgJWxkIgorbXNnc3RyICIlcywgjXMgJWxkIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV4X2V2YWwuYzo2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGNhdWdodDogJXMiCittc2dzdHIgIpfhik+CqpXfkaiCs4LqgtyCtYK9OiAlcyIKKworIzogZXhfZXZhbC5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtYWRlIHBlbmRpbmciCittc2dzdHIgIiVzIILJguaC6JaijIiS6I/zkdSCqpC2graC3IK1gr0iCisKKyM6IGV4X2V2YWwuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzdW1lZCIKK21zZ3N0ciAiJXMggqqNxIpKgrWC3IK1gr0iCisKKyM6IGV4X2V2YWwuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzY2FyZGVkIgorbXNnc3RyICIlcyCCqpRqivyCs4LqgtyCtYK9IgorCisjOiBleF9ldmFsLmM6NzQ2Cittc2dpZCAiRXhjZXB0aW9uIgorbXNnc3RyICKX4YpPIgorCisjOiBleF9ldmFsLmM6NzUyCittc2dpZCAiRXJyb3IgYW5kIGludGVycnVwdCIKK21zZ3N0ciAig0eDiYFbgsaKhI2egt0iCisKKyM6IGV4X2V2YWwuYzo3NTQgZ3VpLmM6NDM3NQorbXNnaWQgIkVycm9yIgorbXNnc3RyICKDR4OJgVsiCisKKyMuIGlmIChwZW5kaW5nICYgQ1NUUF9JTlRFUlJVUFQpCisjOiBleF9ldmFsLmM6NzU2Cittc2dpZCAiSW50ZXJydXB0IgorbXNnc3RyICKKhI2egt0iCisKKyM6IGV4X2V2YWwuYzo4MzAKK21zZ2lkICJFNTc5OiA6aWYgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTU3OTogOmlmIILMk/yC6o5xgqqQW4nfgqyC3IK3IgorCisjOiBleF9ldmFsLmM6ODY3Cittc2dpZCAiRTU4MDogOmVuZGlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgwOiA6aWYggsyCyIKiIDplbmRpZiCCqoKgguiC3IK3IgorCisjOiBleF9ldmFsLmM6OTExCittc2dpZCAiRTU4MTogOmVsc2Ugd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODE6IDppZiCCzILIgqIgOmVsc2UggqqCoILogtyCtyIKKworIzogZXhfZXZhbC5jOjkxNAorbXNnaWQgIkU1ODI6IDplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODI6IDppZiCCzILIgqIgOmVsc2VpZiCCqoKgguiC3IK3IgorCisjOiBleF9ldmFsLmM6OTIxCittc2dpZCAiRTU4MzogbXVsdGlwbGUgOmVsc2UiCittc2dzdHIgIkU1ODM6IJWhkJSCzCA6ZWxzZSCCqoKgguiC3IK3IgorCisjOiBleF9ldmFsLmM6OTI0Cittc2dpZCAiRTU4NDogOmVsc2VpZiBhZnRlciA6ZWxzZSIKK21zZ3N0ciAiRTU4NDogOmVsc2UggsyM44LJIDplbHNlaWYggqqCoILogtyCtyIKKworIzogZXhfZXZhbC5jOjk5MQorbXNnaWQgIkU1ODU6IDp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTg1OiA6d2hpbGUggsyT/ILqjnGCqpBbgq2J34KsgtyCtyIKKworIzogZXhfZXZhbC5jOjEwNDcKK21zZ2lkICJFNTg2OiA6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODY6IDp3aGlsZSCCzILIgqIgOmNvbnRpbnVlIIKqgqCC6ILcgrciCisKKyM6IGV4X2V2YWwuYzoxMDg3Cittc2dpZCAiRTU4NzogOmJyZWFrIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg3OiA6d2hpbGUggsyCyIKiIDpicmVhayCCqoKgguiC3IK3IgorCisjOiBleF9ldmFsLmM6MTI4NgorbXNnaWQgIkU2MDE6IDp0cnkgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTYwMTogOnRyeSCCzJP8guqOcYKqkFuJ34KsgtyCtyIKKworIzogZXhfZXZhbC5jOjEzNjYKK21zZ2lkICJFNjAzOiA6Y2F0Y2ggd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAzOiA6dHJ5IILMgsiCoiA6Y2F0Y2gggqqCoILogtyCtyIKKworIy4gR2l2ZSB1cCBmb3IgYSAiOmNhdGNoIiBhZnRlciAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjLiAqIEp1c3QgcGFyc2UuCisjOiBleF9ldmFsLmM6MTM4OAorbXNnaWQgIkU2MDQ6IDpjYXRjaCBhZnRlciA6ZmluYWxseSIKK21zZ3N0ciAiRTYwNDogOmZpbmFsbHkggsyM44LJIDpjYXRjaCCCqoKgguiC3IK3IgorCisjOiBleF9ldmFsLmM6MTUyMQorbXNnaWQgIkU2MDY6IDpmaW5hbGx5IHdpdGhvdXQgOnRyeSIKK21zZ3N0ciAiRTYwNjogOnRyeSCCzILIgqIgOmZpbmFsbHkggqqCoILogtyCtyIKKworIy4gR2l2ZSB1cCBmb3IgYSBtdWx0aXBsZSAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjOiBleF9ldmFsLmM6MTU0NQorbXNnaWQgIkU2MDc6IG11bHRpcGxlIDpmaW5hbGx5IgorbXNnc3RyICJFNjA3OiCVoZCUgswgOmZpbmFseXkggqqCoILogtyCtyIKKworIzogZXhfZXZhbC5jOjE2NTQKK21zZ2lkICJFNjAyOiA6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIKK21zZ3N0ciAiRTYwMjogOnRyeSCCzILIgqIgOmVuZHRyeSCCxYK3IgorCisjOiBleF9ldmFsLmM6MTk4NgorbXNnaWQgIkUxOTM6IDplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxOTM6IIrWkJSCzIpPgskgOmVuZGZ1bmN0aW9uIIKqgqCC6ILcgrWCvSIKKworIzogZXhfZ2V0bG4uYzozMjk1Cittc2dpZCAidGFnbmFtZSIKK21zZ3N0ciAig16DT5a8IgorCisjOiBleF9nZXRsbi5jOjMyOTgKK21zZ2lkICIga2luZCBmaWxlXG4iCittc2dzdHIgIiCDdINAg0ODi47tl95cbiIKKworIzogZXhfZ2V0bG4uYzo0NzUxCittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICKDSYN2g1aDh4OTICdoaXN0b3J5JyCCqoNbg42CxYK3IgorCisjOiBleF9nZXRsbi5jOjUwMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgJXMgSGlzdG9yeSAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjICVzII2AltqCzJeal/AgKJBWgrWCooLggsyCqYLnjMOCooLggsyC1ik6XG4iCisKKyM6IGV4X2dldGxuLmM6NTAxOAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAig1KDfYOTg2iDiYNDg5MiCisKKyM6IGV4X2dldGxuLmM6NTAxOQorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgIoyfjfWVto6al/EiCisKKyM6IGV4X2dldGxuLmM6NTAyMAorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgIo6uIgorCisjOiBleF9nZXRsbi5jOjUwMjEKK21zZ2lkICJJbnB1dCBMaW5lIgorbXNnc3RyICKT/JfNjXMiCisKKyM6IGV4X2dldGxuLmM6NTA1OQorbXNnaWQgIkUxOTg6IGNtZF9wY2hhciBiZXlvbmQgdGhlIGNvbW1hbmQgbGVuZ3RoIgorbXNnc3RyICJFMTk4OiBjbWRfcGNoYXIggqqDUoN9g5ODaJK3gvCStIKmgtyCtYK9IgorCisjOiBleF9nZXRsbi5jOjUyMzYKK21zZ2lkICJFMTk5OiBBY3RpdmUgd2luZG93IG9yIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICJFMTk5OiCDQYNOg2WDQoN1gsiDRYNCg5ODaINFgqmDb4Nig3SDQIKqje2PnIKzguqC3IK1gr0iCisKKyM6IGZpbGVpby5jOjM3MQorbXNnaWQgIklsbGVnYWwgZmlsZSBuYW1lIgorbXNnc3RyICKVc5CzgsiDdINAg0ODi5a8IgorCisjOiBmaWxlaW8uYzozOTUgZmlsZWlvLmM6NTI5IGZpbGVpby5jOjI4NTAgZmlsZWlvLmM6Mjg5MQorbXNnaWQgImlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICIggs2DZoNCg4yDToNng4qCxYK3IgorCisjOiBmaWxlaW8uYzozOTcKK21zZ2lkICJpcyBub3QgYSBmaWxlIgorbXNnc3RyICIggs2DdINAg0ODi4LFgs2CoILogtyCuYLxIgorCisjOiBmaWxlaW8uYzo1NTEgZmlsZWlvLmM6NDA1NworbXNnaWQgIltOZXcgRmlsZV0iCittc2dzdHIgIluQVoN0g0CDQ4OLXSIKKworIzogZmlsZWlvLmM6NTg0Cittc2dpZCAiW1Blcm1pc3Npb24gRGVuaWVkXSIKK21zZ3N0ciAiW5RGicKCqoKgguiC3IK5gvFdIgorCisjOiBmaWxlaW8uYzo2ODgKK21zZ2lkICJFMjAwOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbWFkZSB0aGUgZmlsZSB1bnJlYWRhYmxlIgorbXNnc3RyICJFMjAwOiAqUmVhZFByZSBhdXRvY29tbWFuZCCCqoN0g0CDQ4OLgvCTx42elXOJwoLJgrWC3IK1gr0iCisKKyM6IGZpbGVpby5jOjY5MAorbXNnaWQgIkUyMDE6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUyMDE6ICpSZWFkUHJlIGF1dG9jb21tYW5kIILNjLuN3YLMg2+DYoN0g0CC8JXPgqaC54LqgtyCuYLxIgorCisjOiBmaWxlaW8uYzo3MTEKK21zZ2lkICJWaW06IFJlYWRpbmcgZnJvbSBzdGRpbi4uLlxuIgorbXNnc3RyICJWaW06IJVXj4CT/JfNgqmC55PHjZ6Shi4uLlxuIgorCisjOiBmaWxlaW8uYzo3MTcKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIpVXj4CT/JfNgqmC55PHjZ6C3ZKGLi4uIgorCisjLiBSZS1vcGVuaW5nIHRoZSBvcmlnaW5hbCBmaWxlIGZhaWxlZCEKKyM6IGZpbGVpby5jOjk4OAorbXNnaWQgIkUyMDI6IENvbnZlcnNpb24gbWFkZSBmaWxlIHVucmVhZGFibGUhIgorbXNnc3RyICJFMjAyOiCVz4q3gqqDdINAg0ODi4Lwk8eNnpVzicKCyYK1gtyCtYK9IgorCisjOiBmaWxlaW8uYzoyMDI3Cittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW0ZJRk8vg1xcg1CDYoNnXSIKKworIzogZmlsZWlvLmM6MjAzNAorbXNnaWQgIltmaWZvXSIKK21zZ3N0ciAiW0ZJRk9dIgorCisjOiBmaWxlaW8uYzoyMDQxCittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIluDXFyDUINig2ddIgorCisjOiBmaWxlaW8uYzoyMDQ5Cittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW5PHkOpdIgorCisjOiBmaWxlaW8uYzoyMDU5Cittc2dpZCAiW0NSIG1pc3NpbmddIgorbXNnc3RyICJbQ1KWs10iCisKKyM6IGZpbGVpby5jOjIwNjQKK21zZ2lkICJbTkwgZm91bmRdIgorbXNnc3RyICJbTkyXTF0iCisKKyM6IGZpbGVpby5jOjIwNjkKK21zZ2lkICJbbG9uZyBsaW5lcyBzcGxpdF0iCittc2dzdHIgIluSt41zlaqKhF0iCisKKyM6IGZpbGVpby5jOjIwNzUgZmlsZWlvLmM6NDA0MQorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW5ailc+Kt10iCisKKyM6IGZpbGVpby5jOjIwODAgZmlsZWlvLmM6NDA0NgorbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJblc+Kt43PXSIKKworIzogZmlsZWlvLmM6MjA4NyBmaWxlaW8uYzo0MDcxCittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJbiMONhom7XSIKKworIzogZmlsZWlvLmM6MjA5NAorbXNnaWQgIltDT05WRVJTSU9OIEVSUk9SXSIKK21zZ3N0ciAiW5XPireDR4OJgVtdIgorCisjOiBmaWxlaW8uYzoyMTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIltJTExFR0FMIEJZVEUgaW4gbGluZSAlbGRdIgorbXNnc3RyICJbJWxkII1zltqCzJVzkLOCyINvg0ODZ10iCisKKyM6IGZpbGVpby5jOjIxMDcKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbk8eNnoNHg4mBW10iCisKKyM6IGZpbGVpby5jOjIzMjMKK21zZ2lkICJDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3IgY29udmVyc2lvbiIKK21zZ3N0ciAilc+Kt4LJlUuXdoLIiOqOnoN0g0CDQ4OLgqqC3YLCgqmC6ILcgrmC8SIKKworIzogZmlsZWlvLmM6MjMzMAorbXNnaWQgIkNvbnZlcnNpb24gd2l0aCAnY2hhcmNvbnZlcnQnIGZhaWxlZCIKK21zZ3N0ciAiJ2NoYXJjb252ZXJ0JyCCyYLmgumVz4q3gqqOuJRzgrWC3IK1gr0iCisKKyM6IGZpbGVpby5jOjIzMzMKK21zZ2lkICJjYW4ndCByZWFkIG91dHB1dCBvZiAnY2hhcmNvbnZlcnQnIgorbXNnc3RyICInY2hhcmNvbnZlcnQnIILMj2+XzYLwk8eNnoLfgtyCuYLxgsWCtYK9IgorCisjOiBmaWxlaW8uYzoyNzMzCittc2dpZCAiRTIwMzogQXV0b2NvbW1hbmRzIGRlbGV0ZWQgb3IgdW5sb2FkZWQgYnVmZmVyIHRvIGJlIHdyaXR0ZW4iCittc2dzdHIgIkUyMDM6IJXbkbaCt4Lpg2+DYoN0g0CC8GF1dG9jb21tYW5kgqqN7Y+cgqmJ8JX6grWC3IK1gr0iCisKKyM6IGZpbGVpby5jOjI3NTYKK21zZ2lkICJFMjA0OiBBdXRvY29tbWFuZCBjaGFuZ2VkIG51bWJlciBvZiBsaW5lcyBpbiB1bmV4cGVjdGVkIHdheSIKK21zZ3N0ciAiRTIwNDogYXV0b2NvbW1hbmSCqpdcXIr6grmCypX7lkCCxY1zkJSC8JXPjViCtYLcgrWCvSIKKworIyBBZGRlZCBhdCAxOS1KYW4tMjAwNC4KKyM6IGZpbGVpby5jOjI3OTQKK21zZ2lkICJOZXRCZWFucyBkaXNzYWxsb3dzIHdyaXRlcyBvZiB1bm1vZGlmaWVkIGJ1ZmZlcnMiCittc2dzdHIgIk5ldEJlYW5zgs2WopXPjViCzINvg2KDdINAgvCP44+RgreC6YKxgsaCzYuWicKCtYLEgqKC3IK5gvEiCisKKyM6IGZpbGVpby5jOjI4MDIKK21zZ2lkICJQYXJ0aWFsIHdyaXRlcyBkaXNhbGxvd2VkIGZvciBOZXRCZWFucyBidWZmZXJzIgorbXNnc3RyICJOZXRCZWFuc4Nvg2KDdINAgsyI6pWUgvCPkYKrj2+Ct4KxgsaCzYLFgquC3IK5gvEiCisKKyM6IGZpbGVpby5jOjI4NTYgZmlsZWlvLmM6Mjg3NAorbXNnaWQgImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIgorbXNnc3RyICKCzYN0g0CDQ4OLgsWC4I+RjZ6C3YnClFxcg2aDb4NDg1iCxYLggqCC6ILcgrmC8SIKKworIzogZmlsZWlvLmM6MjkyNgorbXNnaWQgImlzIHJlYWQtb25seSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICKCzZPHjZ6Q6pdwgsWCtyAoi62Qp4+RjZ6CyYLNICEggvCSx4nBKSIKKworIzogZmlsZWlvLmM6MzI3MgorbXNnaWQgIkU1MDY6IENhbid0IHdyaXRlIHRvIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDY6IINvg2KDToNBg2KDdoN0g0CDQ4OLgvCV25G2gsWCq4LcgrmC8SAoISCC8JLHicGCxYutkKeV25G2KSIKKworIzogZmlsZWlvLmM6MzI4NAorbXNnaWQgIkU1MDc6IENsb3NlIGVycm9yIGZvciBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICIiCisiRTUwNzogg2+DYoNOg0GDYoN2g3SDQINDg4uC8JXCgraC6Y3bgsmDR4OJgVuCqpStkLaCtYLcgrWCvSAoISCC8JLHicGCxYutkKcpIgorCisjOiBmaWxlaW8uYzozMjg2Cittc2dpZCAiRTUwODogQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwODogg2+DYoNOg0GDYoN2l3CDdINAg0ODi4Lwk8eNnoLfgtyCuYLxICghIILwkseJwYLFi62Qp5PHjZ4pIgorCisjOiBmaWxlaW8uYzozMzAyCittc2dpZCAiRTUwOTogQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA5OiCDb4Nig06DQYNig3aDdINAg0ODi4LwjeyC6oLcgrmC8SAoISCC8JLHicGCxYutkKeN7JCsKSIKKworIzogZmlsZWlvLmM6MzQwNQorbXNnaWQgIkU1MTA6IENhbid0IG1ha2UgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUxMDogg2+DYoNOg0GDYoN2g3SDQINDg4uC8I3sguqC3IK5gvEgKCEggvCSx4nBgsWLrZCnjeyQrCkiCisKKyM6IGZpbGVpby5jOjM0NjcKK21zZ2lkICJFNDYwOiBUaGUgcmVzb3VyY2UgZm9yayB3b3VsZCBiZSBsb3N0IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU0NjA6IIOKg1xcgVuDWIN0g0iBW4NOgqqOuILtguqC6YKpguCCtYLqgtyCuYLxICghIILwkseJwYLFi62QpykiCisKKyM6IGZpbGVpby5jOjM1NjYKK21zZ2lkICJFMjE0OiBDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxNDoglduRtpdwiOqOnoN0g0CDQ4OLgqqC3YLCgqmC6ILcgrmC8SIKKworIzogZmlsZWlvLmM6MzU4NAorbXNnaWQgIkUyMTM6IENhbm5vdCBjb252ZXJ0IChhZGQgISB0byB3cml0ZSB3aXRob3V0IGNvbnZlcnNpb24pIgorbXNnc3RyICJFMjEzOiCVz4q3gsWCq4LcgrmC8SAoISCC8JLHicGCxZXPireCuYK4gsmV25G2KSIKKworIzogZmlsZWlvLmM6MzYxOQorbXNnaWQgIkUxNjY6IENhbid0IG9wZW4gbGlua2VkIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNjY6IIOKg5ODToKzguqCvYN0g0CDQ4OLgsmPkY2egt+C3IK5gvEiCisKKyM6IGZpbGVpby5jOjM2MjMKK21zZ2lkICJFMjEyOiBDYW4ndCBvcGVuIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTI6II+RjZ6C3ZdwgsmDdINAg0ODi4LwikqCr4LcgrmC8SIKKworIzogZmlsZWlvLmM6Mzg4NQorbXNnaWQgIkU2Njc6IEZzeW5jIGZhaWxlZCIKK21zZ3N0ciAiRTY2NzogZnN5bmMggsmOuJRzgrWC3IK1gr0iCisKKyM6IGZpbGVpby5jOjM4OTIKK21zZ2lkICJFNTEyOiBDbG9zZSBmYWlsZWQiCittc2dzdHIgIkU1MTI6IJXCgraC6YKxgsaCyY64lHMiCisKKyM6IGZpbGVpby5jOjM5NjMKK21zZ2lkICJFNTEzOiB3cml0ZSBlcnJvciwgY29udmVyc2lvbiBmYWlsZWQiCittc2dzdHIgIkU1MTM6II+RjZ6C3YNHg4mBWywglc+Kt464lHMiCisKKyM6IGZpbGVpby5jOjM5NjkKK21zZ2lkICJFNTE0OiB3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICJFNTE0OiCPkY2egt2DR4OJgVssICiDdINAg0ODi4NWg1iDZYOAgqqWnpR0PykiCisKKyM6IGZpbGVpby5jOjQwMzYKK21zZ2lkICIgQ09OVkVSU0lPTiBFUlJPUiIKK21zZ3N0ciAiIJXPireDR4OJgVsiCisKKyM6IGZpbGVpby5jOjQwNTIKK21zZ2lkICJbRGV2aWNlXSIKK21zZ3N0ciAiW4Nmg2+DQ4NYXSIKKworIzogZmlsZWlvLmM6NDA1NworbXNnaWQgIltOZXddIgorbXNnc3RyICJbkFZdIgorCisjOiBmaWxlaW8uYzo0MDc5Cittc2dpZCAiIFthXSIKK21zZ3N0ciAiIFthXSIKKworIzogZmlsZWlvLmM6NDA3OQorbXNnaWQgIiBhcHBlbmRlZCIKK21zZ3N0ciAiIJLHicEiCisKKyM6IGZpbGVpby5jOjQwODEKK21zZ2lkICIgW3ddIgorbXNnc3RyICIgW3ddIgorCisjOiBmaWxlaW8uYzo0MDgxCittc2dpZCAiIHdyaXR0ZW4iCittc2dzdHIgIiCPkY2egt0iCisKKyM6IGZpbGVpby5jOjQxMzEKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTogcGF0Y2htb2RlOiCMtJZ7g3SDQINDg4uC8JXbkbaCxYKrgtyCuYLxIgorCisjOiBmaWxlaW8uYzo0MTUzCittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBwYXRjaG1vZGU6IIvzgsyMtJZ7g3SDQINDg4uC8HRvdWNogsWCq4LcgrmC8SIKKworIzogZmlsZWlvLmM6NDE2OAorbXNnaWQgIkUyMDc6IENhbid0IGRlbGV0ZSBiYWNrdXAgZmlsZSIKK21zZ3N0ciAiRTIwNzogg2+DYoNOg0GDYoN2g3SDQINDg4uC8I/BgrmC3IK5gvEiCisKKyM6IGZpbGVpby5jOjQyMzIKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyKMeI2QOiCMtJZ7g3SDQINDg4uCqo64gu2C6oK9gqmVz41YgrOC6oLcgrWCvVxuIgorCisjOiBmaWxlaW8uYzo0MjM0Cittc2dpZCAiZG9uJ3QgcXVpdCB0aGUgZWRpdG9yIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIKK21zZ3N0ciAig3SDQINDg4uCzJXbkbaCyZCsjPeCt4LpgtyCxYNHg2aDQoNegvCPSZe5grWCyIKigsWCrYK+grOCoiEiCisKKyM6IGZpbGVpby5jOjQzMjMKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW2Rvc10iCisKKyM6IGZpbGVpby5jOjQzMjMKK21zZ2lkICJbZG9zIGZvcm1hdF0iCittc2dzdHIgIltkb3ODdINIgVuDfYNig2ddIgorCisjOiBmaWxlaW8uYzo0MzMwCittc2dpZCAiW21hY10iCittc2dzdHIgIlttYWNdIgorCisjOiBmaWxlaW8uYzo0MzMwCittc2dpZCAiW21hYyBmb3JtYXRdIgorbXNnc3RyICJbbWFjg3SDSIFbg32DYoNnXSIKKworIzogZmlsZWlvLmM6NDMzNworbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzo0MzM3Cittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW3VuaXiDdINIgVuDfYNig2ddIgorCisjOiBmaWxlaW8uYzo0MzY0Cittc2dpZCAiMSBsaW5lLCAiCittc2dzdHIgIjEgjXMsICIKKworIzogZmlsZWlvLmM6NDM2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMsICIKK21zZ3N0ciAiJWxkII1zLCAiCisKKyM6IGZpbGVpby5jOjQzNjkKK21zZ2lkICIxIGNoYXJhY3RlciIKK21zZ3N0ciAiMSCVto6aIgorCisjOiBmaWxlaW8uYzo0MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlbGQglbaOmiIKKworIzogZmlsZWlvLmM6NDM4MQorbXNnaWQgIltub2VvbF0iCittc2dzdHIgIltub2VvbF0iCisKKyM6IGZpbGVpby5jOjQzODEKK21zZ2lkICJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIgorbXNnc3RyICJbjcWPSY1zgqqVc4qukVNdIgorCisjLiBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIy4gbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjLiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyM6IGZpbGVpby5jOjQ0MDAKK21zZ2lkICJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiCittc2dzdHIgIox4jZA6IJPHjZ6C8YK+jOOCyYN0g0CDQ4OLgsmVz41YgqqCoILogtyCtYK9ISEhIgorCisjOiBmaWxlaW8uYzo0NDAyCittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0IgorbXNnc3RyICKWe5OWgsmP44+RgquCtYLcgreCqSIKKworIzogZmlsZWlvLmM6NTU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogXCIlc1wiIILwj5GNnoLdkoaCzINHg4mBW4LFgrciCisKKyM6IGZpbGVpby5jOjU1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwOTogRXJyb3IgY2xvc2luZyBcIiVzXCIiCittc2dzdHIgIkUyMDk6IFwiJXNcIiCC8JXCgraC6Y6egsmDR4OJgVuCxYK3IgorCisjOiBmaWxlaW8uYzo1NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTA6IEVycm9yIHJlYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFMjEwOiBcIiVzXCIggvCTx42ekoaCzINHg4mBW4LFgrciCisKKyM6IGZpbGVpby5jOjU4MTAKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBhdXRvY29tbWFuZCCCzCBGaWxlQ2hhbmdlZFNoZWxsIIKqg2+DYoN0g0CC8I3tj5yCtYLcgrWCvSIKKworIzogZmlsZWlvLmM6NTgxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMjExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBubyBsb25nZXIgYXZhaWxhYmxlIgorbXNnc3RyICJFMjExOiCMeI2QOiCDdINAg0ODiyBcIiVzXCIggs2K+YLJkbaN3YK1gtyCuYLxIgorCisjOiBmaWxlaW8uYzo1ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiVzEyOiCMeI2QOiCDdINAg0ODiyBcIiVzXCIggqqVz41YgrOC6lZpbYLMg2+DYoN0g0CC4JXPjViCs4LqgtyCtYK9IgorCisjOiBmaWxlaW8uYzo1ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMTogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTE6IIx4jZA6IIN0g0CDQ4OLIFwiJXNcIiCCzZXSj1eKSo5ujOOCyZXPjViCs4LqgtyCtYK9IgorCisjOiBmaWxlaW8uYzo1ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxNjogV2FybmluZzogTW9kZSBvZiBmaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxNjogjHiNkDogg3SDQINDg4sgXCIlc1wiIILMg4KBW4NogqqV0o9XikqObozjgsmVz41YgrOC6oLcgrWCvSIKKworIzogZmlsZWlvLmM6NTg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTM6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTM6IIx4jZA6IIN0g0CDQ4OLIFwiJXNcIiCCzZXSj1eKSo5ujOOCyY3skKyCs4LqgtyCtYK9IgorCisjOiBmaWxlaW8uYzo1ODU5Cittc2dpZCAiU2VlIFwiOmhlbHAgVzExXCIgZm9yIG1vcmUgaW5mby4iCittc2dzdHIgIo/ajdeCzSBcIjpoZWxwIFcxMVwiIILwjlGPxoK1gsSCrYK+grOCoiIKKworIzogZmlsZWlvLmM6NTg3MworbXNnaWQgIldhcm5pbmciCittc2dzdHIgIox4jZAiCisKKyM6IGZpbGVpby5jOjU4NzQKK21zZ2lkICIiCisiJk9LXG4iCisiJkxvYWQgRmlsZSIKK21zZ3N0ciAiIgorIiZPS1xuIgorIoN0g0CDQ4OLk8eNnigmTCkiCisKKyM6IGZpbGVpby5jOjU5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2MjogQ291bGQgbm90IHByZXBhcmUgZm9yIHJlbG9hZGluZyBcIiVzXCIiCittc2dzdHIgIkU0NjI6IFwiJXNcIiCC8IOKg42BW4NogreC6Y+AlPWCqoLFgquC3IK5gvGCxYK1gr0iCisKKyM6IGZpbGVpby5jOjU5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IFwiJXNcIiCCzYOKg42BW4NogsWCq4LcgrmC8YLFgrWCvSIKKworIzogZmlsZWlvLmM6NjU4MAorbXNnaWQgIi0tRGVsZXRlZC0tIgorbXNnc3RyICItLY3tj5yNzy0tIgorCisjLiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdAorIzogZmlsZWlvLmM6Njc0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY3OiBObyBzdWNoIGdyb3VwOiBcIiVzXCIiCittc2dzdHIgIkUzNjc6IIK7gsyDT4OLgVuDdoLNgqCC6ILcgrmC8TogXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyICo6ICVzIgorbXNnc3RyICJFMjE1OiAqIILMjOOCyZVzkLOCyJW2jpqCqoKgguiC3IK1gr06ICVzIgorCisjOiBmaWxlaW8uYzo2ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiCCu4LMguaCpILIg0ODeIOTg2eCzYKgguiC3IK5gvE6ICVzIgorCisjOiBmaWxlaW8uYzo2ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZ3JvdXAgb3IgZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiCCu4LMguaCpILIg0+Di4Fbg3aC4IK1gq2CzYNDg3iDk4Nngs2CoILogtyCuYLxOiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo3MDM4Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKKworIzogZmlsZWlvLmM6NzMwOQorbXNnaWQgIkUyMTc6IENhbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZXZlbnRzIgorbXNnc3RyICJFMjE3OiCRU4LEgsyDQ4N4g5ODZ4LJkc6CtYLEgsxhdXRvY29tbWFuZILNjsCNc4LFgquC3IK5gvEiCisKKyM6IGZpbGVpby5jOjczMzIKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgIopZk5aCt4LpYXV0b2NvbW1hbmSCzZG2jd2CtYLcgrmC8SIKKworIzogZmlsZWlvLmM6NzY1MworbXNnaWQgIkUyMTg6IGF1dG9jb21tYW5kIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkUyMTg6IGF1dG9jb21tYW5kgsyT/ILqjnGCqpBbgreCrILcgrciCisKKyM6IGZpbGVpby5jOjc5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgQXV0byBjb21tYW5kcyBmb3IgXCIlc1wiIgorbXNnc3RyICIlcyBBdXRvIGNvbW1hbmRzIGZvciBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjc5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nICVzIgorbXNnc3RyICIlcyCC8I7AjXOCtYLEgqKC3IK3IgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGZpbGVpby5jOjgwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXV0b2NvbW1hbmQgJXMiCittc2dzdHIgImF1dG9jb21tYW5kICVzIgorCisjOiBmaWxlaW8uYzo4NTcxCittc2dpZCAiRTIxOTogTWlzc2luZyB7LiIKK21zZ3N0ciAiRTIxOTogeyCCqoKgguiC3IK5gvEuIgorCisjOiBmaWxlaW8uYzo4NTczCittc2dpZCAiRTIyMDogTWlzc2luZyB9LiIKK21zZ3N0ciAiRTIyMDogfSCCqoKgguiC3IK5gvEuIgorCisjOiBmb2xkLmM6NjgKK21zZ2lkICJFNDkwOiBObyBmb2xkIGZvdW5kIgorbXNnc3RyICJFNDkwOiCQ3I/0gt2CqoKgguiC3IK5gvEiCisKKyM6IGZvbGQuYzo1OTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogjLuN3YLMICdmb2xkbWV0aG9kJyCCxYLNkNyP9ILdgvCN7JCsgsWCq4LcgrmC8SIKKworIzogZm9sZC5jOjU5NQorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiCMu43dgswgJ2ZvbGRtZXRob2QnIILFgs2Q3I/0gt2C8I3tj5yCxYKrgtyCuYLxIgorCisjOiBnZXRjaGFyLmM6MjQ4Cittc2dpZCAiRTIyMjogQWRkIHRvIHJlYWQgYnVmZmVyIgorbXNnc3RyICJFMjIyOiCTx42eg2+DYoN0g0CC1pLHicEiCisKKyM6IGdldGNoYXIuYzoyMTk4Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6II3Ei0GTSYN9g2KDc4OTg08iCisKKyM6IGdldGNoYXIuYzozMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjQ6IGdsb2JhbCBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI0OiAlcyCCxoKigqSDT4ONgVuDb4OLklqPa5P8l82CzYr5gsmRto3dgrWC3IK3IgorCisjOiBnZXRjaGFyLmM6MzA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI1OiBnbG9iYWwgbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjU6ICVzIILGgqKCpINPg42BW4Nvg4uDfYNig3ODk4NPgs2K+YLJkbaN3YK1gtyCtyIKKworIzogZ2V0Y2hhci5jOjMyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogJXMggsaCooKkklqPa5P8l82CzYr5gsmRto3dgrWC3IK3IgorCisjOiBnZXRjaGFyLmM6MzIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI3OiBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNzogJXMggsaCooKkg32DYoNzg5ODT4LNivmCyZG2jd2CtYLcgrciCisKKyM6IGdldGNoYXIuYzozMjc5Cittc2dpZCAiTm8gYWJicmV2aWF0aW9uIGZvdW5kIgorbXNnc3RyICKSWo9rk/yXzYLNgt2CwoKpguiC3IK5gvGCxYK1gr0iCisKKyM6IGdldGNoYXIuYzozMjgxCittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAig32DYoNzg5ODT4LNgt2CwoKpguiC3IK5gvGCxYK1gr0iCisKKyM6IGdldGNoYXIuYzo0MTczCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiCVc5CzgsiDgoFbg2giCisKKyM6IGd1aS5jOjIyMAorbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiBHVUmC8IpKjm6CxYKrgtyCuYLxIgorCisjOiBndWkuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzMDogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyMzA6IFwiJXNcIoKpgueTx42egt6CsYLGgqqCxYKrgtyCuYLxIgorCisjOiBndWkuYzo0NzIKK21zZ2lkICJFNjY1OiBDYW5ub3Qgc3RhcnQgR1VJLCBubyB2YWxpZCBmb250IGZvdW5kIgorbXNnc3RyICJFNjY1OiCXTIz4gsiDdINIg5ODZ4KqjKmCwoKpgueCyIKigsyCxSwgR1VJgvCKSo5ugsWCq4LcgrmC8SIKKworIzogZ3VpLmM6NDc3Cittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiAnZ3VpZm9udHdpZGUnIIKqlrOM+ILFgrciCisKKyM6IGd1aS5jOjU0NworbXNnaWQgIkU1OTk6IFZhbHVlIG9mICdpbWFjdGl2YXRla2V5JyBpcyBpbnZhbGlkIgorbXNnc3RyICJFNTk5OiAnaW1hY3RpdmF0ZWtleScggsmQ3ZLogrOC6oK9kmyCqpazjPiCxYK3IgorCisjOiBndWkuYzo0MDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTQ6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciAlcyIKK21zZ3N0ciAiRTI1NDogJXMggsyQRoLwioSC6JOWgsSC54LqgtyCuYLxIgorCisjOiBndWlfYXRfZnMuYzozMDAKK21zZ2lkICI8Y2Fubm90IG9wZW4+ICIKK21zZ3N0ciAiPIpKgq+C3IK5gvE+IgorCisjOiBndWlfYXRfZnMuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAiRTYxNjogdmltX1NlbEZpbGU6IIN0g0iDk4NnICVzIILwjuaTvoLFgquC3IK5gvEiCisKKyM6IGd1aV9hdF9mcy5jOjI3ODEKK21zZ2lkICJFNjE0OiB2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJFNjE0OiB2aW1fU2VsRmlsZTogjLuN3YLMg2aDQoOMg06DZ4OKgsmW34LqgtyCuYLxIgorCisjOiBndWlfYXRfZnMuYzoyODAxCittc2dpZCAiUGF0aG5hbWU6IgorbXNnc3RyICKDcINYlrw6IgorCisjOiBndWlfYXRfZnMuYzoyODA3Cittc2dpZCAiRTYxNTogdmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNTogdmltX1NlbEZpbGU6IIy7jd2CzINmg0KDjINOg2eDioLwjuaTvoLFgquC3IK5gvEiCisKKyM6IGd1aV9hdF9mcy5jOjI4MTUgZ3VpX21vdGlmLmM6MTYyMworbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfZ3RrLmM6MjczMSBndWlfbW90aWYuYzoxNjE4IGd1aV9tb3RpZi5jOjI4NDkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIoNMg4ODk4Nag4siCisKKyM6IGd1aV9hdF9zYi5jOjQ4NgorbXNnaWQgIlNjcm9sbGJhciBXaWRnZXQ6IENvdWxkIG5vdCBnZXQgZ2VvbWV0cnkgb2YgdGh1bWIgcGl4bWFwLiIKK21zZ3N0ciAig1iDToONgVuDi4NvgVs6IInmkZyC8I7mk76CxYKrgtyCuYLxgsWCtYK9LiIKKworIzogZ3VpX2F0aGVuYS5jOjIwNDcgZ3VpX21vdGlmLmM6MTg3MQorbXNnaWQgIlZpbSBkaWFsb2ciCittc2dzdHIgIlZpbSCDX4NDg0GDjYNPIgorCisjOiBndWlfYmV2YWwuYzoxMDEgZ3VpX3czMi5jOjM4MzAKK21zZ2lkICJFMjMyOiBDYW5ub3QgY3JlYXRlIEJhbGxvb25FdmFsIHdpdGggYm90aCBtZXNzYWdlIGFuZCBjYWxsYmFjayIKK21zZ3N0ciAiRTIzMjogg4GDYoNagVuDV4LGg1KBW4OLg2+DYoNOgsyCoILpIEJhbGxvb25FdmFsIILwjeyQrILFgquC3IK5gvEiCisKKyM6IGd1aV9ndGsuYzoxNjA3Cittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiVmltIINfg0ODQYONg08uLi4iCisKKyM6IGd1aV9ndGsuYzoyMDYwIG1lc3NhZ2UuYzoyOTkzCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisigs2CoigmWSlcbiIKKyKCooKigqYoJk4pXG4iCisig0yDg4OTg1qDiygmQykiCisKKyM6IGd1aV9ndGsuYzoyMjY4Cittc2dpZCAiSW5wdXQgX01ldGhvZHMiCittc2dzdHIgIoNDg5ODdoNig2eDgYNcXINig2giCisKKyM6IGd1aV9ndGsuYzoyNTM0IGd1aV9tb3RpZi5jOjI3NjgKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIlZJTSAtIIyfjfWCxpJ1ircuLi4iCisKKyM6IGd1aV9ndGsuYzoyNTQyIGd1aV9tb3RpZi5jOjI3NzAKK21zZ2lkICJWSU0gLSBTZWFyY2guLi4iCittc2dzdHIgIlZJTSAtIIyfjfUuLi4iCisKKyM6IGd1aV9ndGsuYzoyNTc0IGd1aV9tb3RpZi5jOjI4ODgKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICKMn431lbaOmpfxOiIKKworIzogZ3VpX2d0ay5jOjI1OTIgZ3VpX21vdGlmLmM6MjkyMAorbXNnaWQgIlJlcGxhY2Ugd2l0aDoiCittc2dzdHIgIpJ1ireVto6al/E6IgorCisjLiB3aG9sZSB3b3JkIG9ubHkgYnV0dG9uCisjOiBndWlfZ3RrLmM6MjYyNCBndWlfbW90aWYuYzozMDM2Cittc2dpZCAiTWF0Y2ggd2hvbGUgd29yZCBvbmx5IgorbXNnc3RyICKQs4ptgsmKWZOWgreC6YLggsyCvoKvIgorCisjLiBtYXRjaCBjYXNlIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI2MzUgZ3VpX21vdGlmLmM6MzA0OAorbXNnaWQgIk1hdGNoIGNhc2UiCittc2dzdHIgIpHllbaOmi+PrJW2jpqC8IvmlcqCt4LpIgorCisjOiBndWlfZ3RrLmM6MjY0NSBndWlfbW90aWYuYzoyOTkwCittc2dpZCAiRGlyZWN0aW9uIgorbXNnc3RyICKV+4z8IgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjI2NTcgZ3VpX21vdGlmLmM6MzAwMgorbXNnaWQgIlVwIgorbXNnc3RyICKP4yIKKworIzogZ3VpX2d0ay5jOjI2NjEgZ3VpX21vdGlmLmM6MzAxMAorbXNnaWQgIkRvd24iCittc2dzdHIgIom6IgorCisjOiBndWlfZ3RrLmM6MjY4MyBndWlfZ3RrLmM6MjY4NSBndWlfbW90aWYuYzoyNzkyCittc2dpZCAiRmluZCBOZXh0IgorbXNnc3RyICKOn4LwjJ+N9SIKKworIzogZ3VpX2d0ay5jOjI3MDIgZ3VpX2d0ay5jOjI3MDQgZ3VpX21vdGlmLmM6MjgwOQorbXNnaWQgIlJlcGxhY2UiCittc2dzdHIgIpJ1irciCisKKyM6IGd1aV9ndGsuYzoyNzE1IGd1aV9ndGsuYzoyNzE3IGd1aV9tb3RpZi5jOjI4MjIKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAikVOCxJJ1irciCisKKyM6IGd1aV9ndGtfeDExLmM6MjMyNworbXNnaWQgIlZpbTogUmVjZWl2ZWQgXCJkaWVcIiByZXF1ZXN0IGZyb20gc2Vzc2lvbiBtYW5hZ2VyXG4iCittc2dzdHIgIlZpbTogg1qDYoNWg4eDk4N9g2yBW4NXg4OCqYLnIFwiZGllXCIgl3aLgYLwjvOCr47mguiC3IK1gr1cbiIKKworIzogZ3VpX2d0a194MTEuYzozNTE5Cittc2dpZCAiVmltOiBNYWluIHdpbmRvdyB1bmV4cGVjdGVkbHkgZGVzdHJveWVkXG4iCittc2dzdHIgIlZpbTogg4GDQ4OTg0WDQoOTg2iDRYKqlXOI04LJlGqJ84KzguqC3IK1gr1cbiIKKworIzogZ3VpX2d0a194MTEuYzo0MTM4Cittc2dpZCAiRm9udCBTZWxlY3Rpb24iCittc2dzdHIgIoN0g0iDk4NnkUmR8CIKKworIzogZ3VpX2d0a194MTEuYzo2MDM1IHVpLmM6MjExNworbXNnaWQgIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iCittc2dzdHIgIovzgsyRSZHwl8yI5oLMgqmC7YLogslDVVRfQlVGRkVSMIKqjmeXcIKzguqC3IK1gr0iCisKKyM6IGd1aV9tb3RpZi5jOjE2MTcgZ3VpX21vdGlmLmM6MTYyMAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAig3SDQoOLg14iCisKKyM6IGd1aV9tb3RpZi5jOjE2MTkKK21zZ2lkICJEaXJlY3RvcmllcyIKK21zZ3N0ciAig2aDQoOMg06DZ4OKIgorCisjOiBndWlfbW90aWYuYzoxNjIxCittc2dpZCAiSGVscCIKK21zZ3N0ciAig3eDi4N2IgorCisjOiBndWlfbW90aWYuYzoxNjIyCittc2dpZCAiRmlsZXMiCittc2dzdHIgIoN0g0CDQ4OLIgorCisjOiBndWlfbW90aWYuYzoxNjI0Cittc2dpZCAiU2VsZWN0aW9uIgorbXNnc3RyICKRSZHwIgorCisjOiBndWlfbW90aWYuYzoyODM1Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAig0GDk4Nog0QiCisKKyM6IGd1aV9yaXNjb3MuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMDogQ2FuJ3QgbG9hZCBaYXAgZm9udCAnJXMnIgorbXNnc3RyICJFNjEwOiBaYXCDdINIg5ODZyAnJXMnIILwk8eNnoLfgtyCuYLxIgorCisjOiBndWlfcmlzY29zLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjExOiBDYW4ndCB1c2UgZm9udCAlcyIKK21zZ3N0ciAiRTYxMTogg3SDSIOTg2cgJXMggvCOZ5dwgsWCq4LcgrmC8SIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNzAKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisijnGDdoONg1qDWILWkuKOfoOBg2KDWoFbg1eC8JGXkE2ShoLFgrcuXG4iCisKKyM6IGd1aV93MzIuYzo4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MzogQXJndW1lbnQgbm90IHN1cHBvcnRlZDogXCItJXNcIjsgVXNlIHRoZSBPTEUgdmVyc2lvbi4iCittc2dzdHIgIkUyNDM6IIj4kJSCzYNUg3yBW4NngrOC6oLcgrmC8TogXCItJXNcIjsgT0xFlMWC8I5nl3CCtYLEgq2CvoKzgqIuIgorCisjOiBndWlfdzQ4LmM6MjA5MAorbXNnaWQgIkZpbmQgc3RyaW5nICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIoyfjfWVto6al/EgKCdcXCcggvCMn431greC6YLJgs0gJ1xcXFwnKSIKKworIzogZ3VpX3c0OC5jOjIxMTUKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICKMn431gUWSdYq3ICgnXFwnIILwjJ+N9YK3gumCyYLNICdcXFxcJykiCisKKyM6IGd1aV94MTEuYzoxNTM3Cittc2dpZCAiVmltIEU0NTg6IENhbm5vdCBhbGxvY2F0ZSBjb2xvcm1hcCBlbnRyeSwgc29tZSBjb2xvcnMgbWF5IGJlIGluY29ycmVjdCIKK21zZ3N0ciAiVmltIEU0NTg6IJBGjneS6IKqkLOCtYKtgsiCooLMgsWDR4OTg2eDioLwioSC6JOWgsSC54LqgtyCuYLxIgorCisjOiBndWlfeDExLmM6MjExOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUwOiBGb250cyBmb3IgdGhlIGZvbGxvd2luZyBjaGFyc2V0cyBhcmUgbWlzc2luZyBpbiBmb250c2V0ICVzOiIKK21zZ3N0ciAiRTI1MDogiMiJuoLMlbaOmoNag2KDZ4LMg3SDSIOTg2eCqoKgguiC3IK5gvEgJXM6IgorCisjOiBndWlfeDExLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUyOiBGb250c2V0IG5hbWU6ICVzIgorbXNnc3RyICJFMjUyOiCDdINIg5ODZ4Nag2KDZ5a8OiAlcyIKKworIzogZ3VpX3gxMS5jOjIxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCAnJXMnIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAig3SDSIOTg2cgJyVzJyCCzYzFkuiVnYLFgs2CoILogtyCuYLxIgorCisjOiBndWlfeDExLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTM6IIN0g0iDk4Nng1qDYoNnlrw6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwOiAlc1xuIgorbXNnc3RyICKDdINIg5ODZzA6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQxOiAlc1xuIgorbXNnc3RyICKDdINIg5ODZzE6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQlZCB3aWR0aCBpcyBub3QgdHdpY2UgdGhhdCBvZiBmb250MFxuIgorbXNnc3RyICKDdINIg5ODZyVkIILMlZ2CqoN0g0iDk4NnMILMlHuCxYLNgqCC6ILcgrmC8VxuIgorCisjOiBndWlfeDExLmM6MjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MCB3aWR0aDogJWxkXG4iCittc2dzdHIgIoN0g0iDk4NnMILMlZ06ICVsZFxuIgorCisjOiBndWlfeDExLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9udDEgd2lkdGg6ICVsZFxuIgorIlxuIgorbXNnc3RyICIiCisig3SDSIOTg2cxgsyVnTogJWxkXG4iCisiXG4iCisKKyM6IGhhbmd1bGluLmM6NjEwCittc2dpZCAiRTI1NjogSGFuZ3VsIGF1dG9tYXRhIEVSUk9SIgorbXNnc3RyICJFMjU2OiCDboOTg0+Di4NJgVuDZ4N9g2eDk4NHg4mBWyIKKworIzogaWZfY3Njb3BlLmM6NzcKK21zZ2lkICJBZGQgYSBuZXcgZGF0YWJhc2UiCittc2dzdHIgIpBWg2aBW4Neg3iBW4NYgvCSx4nBIgorCisjOiBpZl9jc2NvcGUuYzo3OQorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIoNwg16BW4OTgsyDToNHg4qBW4LwkseJwSIKKworIzogaWZfY3Njb3BlLmM6ODEKK21zZ2lkICJTaG93IHRoaXMgbWVzc2FnZSIKK21zZ3N0ciAigrGCzIOBg2KDWoFbg1eC8JVcXI6mgreC6SIKKworIzogaWZfY3Njb3BlLmM6ODMKK21zZ2lkICJLaWxsIGEgY29ubmVjdGlvbiIKK21zZ3N0ciAikNqRsYLwj0mXuYK3gukiCisKKyM6IGlmX2NzY29wZS5jOjg1Cittc2dpZCAiUmVpbml0IGFsbCBjb25uZWN0aW9ucyIKK21zZ3N0ciAikVOCxILMkNqRsYLwjcSPiYr6ibuCt4LpIgorCisjOiBpZl9jc2NvcGUuYzo4NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIpDakbGC8JVcXI6mgreC6SIKKworIzogaWZfY3Njb3BlLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2MDogVXNhZ2U6IGNzW2NvcGVdICVzIgorbXNnc3RyICJFNTYwOiCOZ5dwlfuWQDogY3NbY29wZV0gJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNAorbXNnaWQgIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIKK21zZ3N0ciAigrGCzGNzY29wZYNSg32Dk4Nogs2VqoqEg0WDQoOTg2iDRYLFgs2DVIN8gVuDZ4KzguqC3IK5gvEuXG4iCisKKyM6IGlmX2NzY29wZS5jOjE3NQorbXNnaWQgIkU1NjI6IFVzYWdlOiBjc3RhZyA8aWRlbnQ+IgorbXNnc3RyICJFNTYyOiCOZ5dwlkA6IGNzdGFnIDxpZGVudD4iCisKKyM6IGlmX2NzY29wZS5jOjIzMQorbXNnaWQgIkUyNTc6IGNzdGFnOiB0YWcgbm90IGZvdW5kIgorbXNnc3RyICJFMjU3OiBjc3RhZzogg16DT4Kqgt2CwoKpguiC3IK5gvEiCisKKyM6IGlmX2NzY29wZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTYzOiBzdGF0KCVzKSBlcnJvcjogJWQiCittc2dzdHIgIkU1NjM6IHN0YXQoJXMpIINHg4mBWzogJWQiCisKKyM6IGlmX2NzY29wZS5jOjQxOQorbXNnaWQgIkU1NjM6IHN0YXQgZXJyb3IiCittc2dzdHIgIkU1NjM6IHN0YXQgg0eDiYFbIgorCisjOiBpZl9jc2NvcGUuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2NDogJXMgaXMgbm90IGEgZGlyZWN0b3J5IG9yIGEgdmFsaWQgY3Njb3BlIGRhdGFiYXNlIgorbXNnc3RyICJFNTY0OiAlcyCCzYNmg0KDjINOg2eDiot5gtGXTIz4gshjc2NvcGWCzINmgVuDXoN4gVuDWILFgs2CoILogtyCuYLxIgorCisjOiBpZl9jc2NvcGUuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICJjc2NvcGWDZoFbg16DeIFbg1ggJXMggvCSx4nBIgorCisjOiBpZl9jc2NvcGUuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlbGQiCittc2dzdHIgIkUyNjI6IGNzY29wZYLMkNqRsSAlbGQggvCTx42egt2ShoLMg0eDiYFbgsWCtyIKKworIzogaWZfY3Njb3BlLmM6Njk0Cittc2dpZCAiRTU2MTogdW5rbm93biBjc2NvcGUgc2VhcmNoIHR5cGUiCittc2dzdHIgIkU1NjE6IJaikm2CzGNzY29wZYyfjfWMXoLFgrciCisKKyM6IGlmX2NzY29wZS5jOjczNgorbXNnaWQgIkU1NjY6IENvdWxkIG5vdCBjcmVhdGUgY3Njb3BlIHBpcGVzIgorbXNnc3RyICJFNTY2OiBjc2NvcGWDcINDg3aC8I3skKyCxYKrgtyCuYLxgsWCtYK9IgorCisjOiBpZl9jc2NvcGUuYzo3NTMKK21zZ2lkICJFNjIyOiBDb3VsZCBub3QgZm9yayBmb3IgY3Njb3BlIgorbXNnc3RyICJFNjIyOiBjc2NvcGWCzItOk66PgJT1KGZvcmspgsmOuJRzgrWC3IK1gr0iCisKKyM6IGlmX2NzY29wZS5jOjg0NyBpZl9jc2NvcGUuYzo4OTcKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb24ggsyOwI1zgsmOuJRzgrWC3IK1gr0iCisKKyM6IGlmX2NzY29wZS5jOjg5OAorbXNnaWQgIkU2MjM6IENvdWxkIG5vdCBzcGF3biBjc2NvcGUgcHJvY2VzcyIKK21zZ3N0ciAiRTYyMzogY3Njb3Blg3aDjYNag1iC8ItOk66CxYKrgtyCuYLxgsWCtYK9IgorCisjOiBpZl9jc2NvcGUuYzo5MTEKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciB0b19mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiB0b19mcCCCzCBmZG9wZW4ggsmOuJRzgrWC3IK1gr0iCisKKyM6IGlmX2NzY29wZS5jOjkxMworbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIGZyX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZyX2ZwIILMIGZkb3BlbiCCyY64lHOCtYLcgrWCvSIKKworIzogaWZfY3Njb3BlLmM6OTUxCittc2dpZCAiRTU2Nzogbm8gY3Njb3BlIGNvbm5lY3Rpb25zIgorbXNnc3RyICJFNTY3OiBjc2NvcGWQ2pGxgsmOuJRzgrWC3IK1gr0iCisKKyM6IGlmX2NzY29wZS5jOjEwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiBjc2NvcGWDToNHg4qBWyAlcyBvZiAlcyCCyYpZk5aCqoKgguiC3IK5gvGCxYK1gr0iCisKKyM6IGlmX2NzY29wZS5jOjEwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OTogaW52YWxpZCBjc2NvcGVxdWlja2ZpeCBmbGFnICVjIGZvciAlYyIKK21zZ3N0ciAiRTQ2OToglrOM+ILIIGNzY29wZXF1aWNrZml4IIN0g4mDTyAlYyCCzCAlYyCCxYK3IgorCisjOiBpZl9jc2NvcGUuYzoxMTUyCittc2dpZCAiY3Njb3BlIGNvbW1hbmRzOlxuIgorbXNnc3RyICJjc2NvcGWDUoN9g5ODaDpcbiIKKworIzogaWZfY3Njb3BlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLTVzOiAlLTMwcyAoVXNhZ2U6ICVzKSIKK21zZ3N0ciAiJS01czogJS0zMHMgKI5nl3CWQDogJXMpIgorCisjOiBpZl9jc2NvcGUuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjU6IGNhbm5vdCBvcGVuIGNzY29wZSBkYXRhYmFzZTogJXMiCittc2dzdHIgIkU2MjU6IGNzY29wZYNmgVuDXoN4gVuDWDogJXMggvCKSoKtgrGCxoKqgsWCq4LcgrmC8SIKKworIzogaWZfY3Njb3BlLmM6MTI3MQorbXNnaWQgIkU2MjY6IGNhbm5vdCBnZXQgY3Njb3BlIGRhdGFiYXNlIGluZm9ybWF0aW9uIgorbXNnc3RyICJFNjI2OiBjc2NvcGWDZoFbg16DeIFbg1iCzI/ulfGC8I7mk76CxYKrgtyCuYLxIgorCisjOiBpZl9jc2NvcGUuYzoxMjk2Cittc2dpZCAiRTU2ODogZHVwbGljYXRlIGNzY29wZSBkYXRhYmFzZSBub3QgYWRkZWQiCittc2dzdHIgIkU1Njg6II9klaGCt4LpY3Njb3Blg2aBW4Neg3iBW4NYgs2Sx4nBgrOC6oLcgrmC8YLFgrWCvSIKKworIzogaWZfY3Njb3BlLmM6MTMwNworbXNnaWQgIkU1Njk6IG1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICJFNTY5OiBjc2NvcGWQ2pGxgsyNxZHlkJSCyZJCgrWC3IK1gr0iCisKKyM6IGlmX2NzY29wZS5jOjE0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiBjc2NvcGWQ2pGxICVzIIKqgt2CwoKpguiC3IK5gvGCxYK1gr0iCisKKyM6IGlmX2NzY29wZS5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gJXMgY2xvc2VkIgorbXNnc3RyICJjc2NvcGWQ2pGxICVzIIKqlcKCtoLnguqC3IK1gr0iCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTU5OAorbXNnaWQgIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJFNTcwOiBjc19tYW5hZ2VfbWF0Y2hlcyCCxZJ2lr2TSYLIg0eDiYFbgsWCtyIKKworIzogaWZfY3Njb3BlLmM6MTg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDc2NvcGUgdGFnOiAlcyIKK21zZ3N0ciAiQ3Njb3BlIINeg086ICVzIgorCisjOiBpZl9jc2NvcGUuYzoxODcwCittc2dpZCAiIgorIlxuIgorIiAgICMgICBsaW5lIgorbXNnc3RyICIiCisiXG4iCisiICAgIyAgII1zlNSNhiIKKworIzogaWZfY3Njb3BlLmM6MTg3MgorbXNnaWQgImZpbGVuYW1lIC8gY29udGV4dCAvIGxpbmVcbiIKK21zZ3N0ciAig3SDQINDg4uWvCAvIJW2lqwgLyCNc1xuIgorCisjOiBpZl9jc2NvcGUuYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDk6IENzY29wZSBlcnJvcjogJXMiCittc2dzdHIgIkU2MDk6IGNzY29wZYNHg4mBWzogJXMiCisKKyM6IGlmX2NzY29wZS5jOjIxNzYKK21zZ2lkICJBbGwgY3Njb3BlIGRhdGFiYXNlcyByZXNldCIKK21zZ3N0ciAikVOCxILMY3Njb3Blg2aBW4Neg3iBW4NYgvCDioNag2KDZ4K1gtyCtyIKKworIzogaWZfY3Njb3BlLmM6MjI0NAorbXNnaWQgIm5vIGNzY29wZSBjb25uZWN0aW9uc1xuIgorbXNnc3RyICJjc2NvcGWQ2pGxgqqCoILogtyCuYLxXG4iCisKKyM6IGlmX2NzY29wZS5jOjIyNDgKK21zZ2lkICIgIyBwaWQgICAgZGF0YWJhc2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iCittc2dzdHIgIiAjIHBpZCAgICCDZoFbg16DeIFbg1iWvCAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kIINwg1hcbiIKKworIzogaWZfcHl0aG9uLmM6NDM2Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjYzOiCCsYLMg1KDfYOTg2iCzZazjPiCxYK3LIKygt+C8YLIgrOCojogIgorIlB5dGhvboOJg0ODdYOJg4qC8IONgVuDaILFgquC3IK5gvGCxYK1gr0uIgorCisjIEFkZGVkIGF0IDA3LUZlYi0yMDA0LgorIzogaWZfcHl0aG9uLmM6NTAwCittc2dpZCAiRTY1OTogQ2Fubm90IGludm9rZSBQeXRob24gcmVjdXJzaXZlbHkiCittc2dzdHIgIkU2NTk6IFB5dGhvbiCC8I3Ei0GTSYLJjsCNc4K3gumCsYLGgs2CxYKrgtyCuYLxIgorCisjOiBpZl9weXRob24uYzo3MDEKK21zZ2lkICJjYW4ndCBkZWxldGUgT3V0cHV0T2JqZWN0IGF0dHJpYnV0ZXMiCittc2dzdHIgIk91dHB1dE9iamVjdJGukKuC8I/BgrmC3IK5gvEiCisKKyM6IGlmX3B5dGhvbi5jOjcwOAorbXNnaWQgInNvZnRzcGFjZSBtdXN0IGJlIGFuIGludGVnZXIiCittc2dzdHIgInNvZnRzcGFjZSCCzSBpbnRlZ2VyIILFgsiCr4Lqgs6CyILogtyCuYLxIgorCisjOiBpZl9weXRob24uYzo3MTYKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAilrOM+ILIka6Qq4LFgrciCisKKyM6IGlmX3B5dGhvbi5jOjc1NSBpZl9weXRob24uYzo3NjkKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkggsmCzZW2jpqX8YLMg4qDWINngqqVS5d2gsWCtyIKKworIzogaWZfcHl0aG9uLmM6ODk1Cittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjogSS9Pg0mDdYNXg0aDToNngsyPiYr6ibuShoLJg0eDiYFbgsWCtyIKKworIzogaWZfcHl0aG9uLmM6MTA4MCBpZl90Y2wuYzoxNDAyCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICKWs4z4gsiOroLFgrciCisKKyM6IGlmX3B5dGhvbi5jOjEwOTQgaWZfdGNsLmM6MTQwNworbXNnaWQgImV4cHJlc3Npb25zIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAijq6CzYNSg5ODcINDg4uOnoLJlrOM+ILJgrOC6oLEgqKC3IK3IgorCisjOiBpZl9weXRob24uYzoxMTA3Cittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAij8GCs4Lqgr2Db4Nig3SDQIKqjlGPxoKzguqC3IK1gr0iCisKKyM6IGlmX3B5dGhvbi5jOjExMjIgaWZfcHl0aG9uLmM6MTE2MyBpZl9weXRob24uYzoxMjI3IGlmX3RjbC5jOjEyMTQKK21zZ2lkICJsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UiCittc2dzdHIgIpTNiM2KT4LMjXOU1I2GgsWCtyIKKworIzogaWZfcHl0aG9uLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICI8YnVmZmVyIG9iamVjdCAoZGVsZXRlZCkgYXQgJThsWD4iCittc2dzdHIgIjyDb4Nig3SDQINJg3WDV4NGg06DZyAoj8GLjo3Pgt0pICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxNDUzIGlmX3RjbC5jOjgzNgorbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICKWs4z4gsiDfYFbg06WvILFgrciCisKKyM6IGlmX3B5dGhvbi5jOjE3MzMKK21zZ2lkICJubyBzdWNoIGJ1ZmZlciIKK21zZ3N0ciAigruCzILmgqSCyINvg2KDdINAgs2CoILogtyCuYLxIgorCisjOiBpZl9weXRob24uYzoxODIxCittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIHdpbmRvdyIKK21zZ3N0ciAij8GCs4Lqgr2DRYNCg5ODaINFgqqOUY/GgrOC6oLcgrWCvSIKKworIzogaWZfcHl0aG9uLmM6MTg2NgorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAik8eNnpDql3CRrpCrIgorCisjOiBpZl9weXRob24uYzoxODc5Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICKDSoFbg1xcg4uCqoNvg2KDdINAgsyKT4LJgqCC6ILcgrciCisKKyM6IGlmX3B5dGhvbi5jOjE5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKGRlbGV0ZWQpIGF0ICUuOGxYPiIKK21zZ3N0ciAiPINFg0KDk4Nog0WDSYN1g1eDRoNOg2cgKI/Bi46NzykgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxOTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjyDRYNCg5ODaINFg0mDdYNXg0aDToNnICiWopJtKSAlLjhsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyAlZD4iCittc2dzdHIgIjyDRYNCg5ODaINFICVkPiIKKworIzogaWZfcHl0aG9uLmM6MjA0NgorbXNnaWQgIm5vIHN1Y2ggd2luZG93IgorbXNnc3RyICKCu4LMguaCpILIg0WDQoOTg2iDRYLNgqCC6ILcgrmC8SIKKworIzogaWZfcHl0aG9uLmM6MjMwNyBpZl9weXRob24uYzoyMzQxIGlmX3B5dGhvbi5jOjIzOTYgaWZfcHl0aG9uLmM6MjQ2NAorIzogaWZfcHl0aG9uLmM6MjU4NiBpZl9weXRob24uYzoyNjM4IGlmX3RjbC5jOjY4NCBpZl90Y2wuYzo3MjkgaWZfdGNsLmM6ODAzCisjOiBpZl90Y2wuYzo4NzMgaWZfdGNsLmM6MTk5OQorbXNnaWQgImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIoNBg5ODaINEj+6V8YKqlduRtoLFgquC3IK5gvEiCisKKyM6IGlmX3B5dGhvbi5jOjIzMDkgaWZfcHl0aG9uLmM6MjQwMyBpZl9weXRob24uYzoyNDc1Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBsaW5lIgorbXNnc3RyICKNc4Lwj8GCuYLcgrmC8SIKKworIzogaWZfcHl0aG9uLmM6MjM0NiBpZl9weXRob24uYzoyNDkxIGlmX3RjbC5jOjY5MCBpZl90Y2wuYzoyMDIxCittc2dpZCAiY2Fubm90IHJlcGxhY2UgbGluZSIKK21zZ3N0ciAijXOC8JJ1ireCxYKrgtyCuYLxIgorCisjOiBpZl9weXRob24uYzoyNTA5IGlmX3B5dGhvbi5jOjI1ODggaWZfcHl0aG9uLmM6MjY0NgorbXNnaWQgImNhbm5vdCBpbnNlcnQgbGluZSIKK21zZ3N0ciAijXOC8JF9k/yCxYKrgtyCuYLxIgorCisjOiBpZl9weXRob24uYzoyNzUwCittc2dpZCAic3RyaW5nIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICKVto6al/GCyYLNifyNc5W2jpqC8Ircgt+C54LqgtyCuYLxIgorCisjOiBpZl9ydWJ5LmM6NDIyCittc2dpZCAiIgorIkUyNjY6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBSdWJ5IGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjY2OiCCsYLMg1KDfYOTg2iCzZazjPiCxYK3LIKygt+C8YLIgrOCojogIgorIlJ1YnmDiYNDg3WDiYOKgvCDjYFbg2iCxYKrgtyCuYLxgsWCtYK9LiIKKworIzogaWZfcnVieS5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjczOiB1bmtub3duIGxvbmdqbXAgc3RhdHVzICVkIgorbXNnc3RyICJFMjczOiCWopJtgsxsb25nam1wj/OR1DogJWQiCisKKyM6IGlmX3NuaWZmLmM6NjcKK21zZ2lkICJUb2dnbGUgaW1wbGVtZW50YXRpb24vZGVmaW5pdGlvbiIKK21zZ3N0ciAijsCRlYLGkuiLYILwkNiC6JHWgqaC6SIKKworIzogaWZfc25pZmYuYzo2OAorbXNnaWQgIlNob3cgYmFzZSBjbGFzcyBvZiIKK21zZ3N0ciAijp+CzINOg4mDWILMiu6S6oLwlVxcjqYiCisKKyM6IGlmX3NuaWZmLmM6NjkKK21zZ2lkICJTaG93IG92ZXJyaWRkZW4gbWVtYmVyIGZ1bmN0aW9uIgorbXNnc3RyICKDSYFbg2+BW4OJg0ODaIKzguqCvYOBg5ODb4rWkJSC8JVcXI6mIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICKDdINAg0ODi4KpgueJ8ZWcgreC6SIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAig3aDjYNXg0aDToNngqmC54nxlZyCt4LpIgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIpFTgsSCzIN2g42DV4NGg06DZ4KpgueJ8ZWcgreC6SIKKworIzogaWZfc25pZmYuYzo3NAorbXNnaWQgIlJldHJpZXZlIgorbXNnc3RyICKJ8ZWcIgorCisjOiBpZl9zbmlmZi5jOjc1Cittc2dpZCAiU2hvdyBzb3VyY2Ugb2YiCittc2dzdHIgIo6fgsyDXFyBW4NYgvCVXFyOpoK3gukiCisKKyM6IGlmX3NuaWZmLmM6NzYKK21zZ2lkICJGaW5kIHN5bWJvbCIKK21zZ3N0ciAigt2CwoKvgr2DVoOTg3uDiyIKKworIzogaWZfc25pZmYuYzo3NworbXNnaWQgIkJyb3dzZSBjbGFzcyIKK21zZ3N0ciAig06DiYNYgvCOUY/GIgorCisjOiBpZl9zbmlmZi5jOjc4Cittc2dpZCAiU2hvdyBjbGFzcyBpbiBoaWVyYXJjaHkiCittc2dzdHIgIopLkXeCxYNOg4mDWILwlVxcjqYiCisKKyM6IGlmX3NuaWZmLmM6NzkKK21zZ2lkICJTaG93IGNsYXNzIGluIHJlc3RyaWN0ZWQgaGllcmFyY2h5IgorbXNnc3RyICKMwJLogrOC6oK9ikuRd4LFg06DiYNYgvCVXFyOpiIKKworIzogaWZfc25pZmYuYzo4MAorbXNnaWQgIlhyZWYgcmVmZXJzIHRvIgorbXNnc3RyICJYcmVmIILMjlGPxpDmIgorCisjOiBpZl9zbmlmZi5jOjgxCittc2dpZCAiWHJlZiByZWZlcnJlZCBieSIKK21zZ3N0ciAiWHJlZiCCqo5Rj8aCs4LqgukiCisKKyM6IGlmX3NuaWZmLmM6ODIKK21zZ2lkICJYcmVmIGhhcyBhIgorbXNnc3RyICJYcmVmIIKqjp+CzILggsyC8ILggsGCxIKigtyCtyIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiCCqo5nl3CCs4LqgukiCisKKyM6IGlmX3NuaWZmLmM6ODQKK21zZ2lkICJTaG93IGRvY3Ugb2YiCittc2dzdHIgIo6fgsyVto/NgvCVXFyOpiIKKworIzogaWZfc25pZmYuYzo4NQorbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgorbXNnc3RyICKOn4LMlbaPzYLwkLaQrCIKKworIzogaWZfc25pZmYuYzo5NworbXNnaWQgIiIKKyJDYW5ub3QgY29ubmVjdCB0byBTTmlGRisuIENoZWNrIGVudmlyb25tZW50IChzbmlmZmVtYWNzIG11c3QgYmUgZm91bmQgaW4gIgorIiRQQVRIKS5cbiIKK21zZ3N0ciAiIgorIlNOaUZGK4LJkNqRsYLFgquC3IK5gvEuIIrCi6uC8INgg0aDYoNOgrWCxIKtgr6Cs4KiKHNuaWZmZW1hY3MggqogJFBBVEggIgorIoLJgsiCr4Lqgs6CyILogtyCuYLxKS5cbiIKKworIzogaWZfc25pZmYuYzo0MjUKK21zZ2lkICJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiRTI3NDogU25pZmY6IJPHjZ6ShoLJg0eDiYFbgqqUrZC2grWC3IK1gr0uIJDYkmaCtYLcgrWCvSIKKworIzogaWZfc25pZmYuYzo1NTMKK21zZ2lkICJTTmlGRisgaXMgY3VycmVudGx5ICIKK21zZ3N0ciAijLuN3VNOaUZGKyCCzI/zkdSCzYF1IgorCisjOiBpZl9zbmlmZi5jOjU1NQorbXNnaWQgIm5vdCAiCittc2dzdHIgIpaiIgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAikNqRsYF2gsWCtyIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6IJaikm2CzCBTTmlGRisgg4qDToNHg1iDZ4LFgrc6ICVzIgorCisjOiBpZl9zbmlmZi5jOjYwNQorbXNnaWQgIkUyNzY6IEVycm9yIGNvbm5lY3RpbmcgdG8gU05pRkYrIgorbXNnc3RyICJFMjc2OiBTTmlGRisggtaCzJDakbGShoLMg0eDiYFbgsWCtyIKKworIzogaWZfc25pZmYuYzoxMDA5Cittc2dpZCAiRTI3ODogU05pRkYrIG5vdCBjb25uZWN0ZWQiCittc2dzdHIgIkUyNzg6IFNOaUZGKyCCyZDakbGCs4LqgsSCooLcgrmC8SIKKworIzogaWZfc25pZmYuYzoxMDE4Cittc2dpZCAiRTI3OTogTm90IGEgU05pRkYrIGJ1ZmZlciIKK21zZ3N0ciAiRTI3OTogU05pRkYrIINvg2KDdINAgqqCoILogtyCuYLxIgorCisjOiBpZl9zbmlmZi5jOjEwODMKK21zZ2lkICJTbmlmZjogRXJyb3IgZHVyaW5nIHdyaXRlLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIlNuaWZmOiCPkY2egt2ShoLJg0eDiYFbgqqUrZC2grWCvYLMgsWQ2JJmgrWC3IK1gr0iCisKKyM6IGlmX3RjbC5jOjQxOAorbXNnaWQgImludmFsaWQgYnVmZmVyIG51bWJlciIKK21zZ3N0ciAilrOM+ILIg2+DYoN0g0CU1I2GgsWCtyIKKworIzogaWZfdGNsLmM6NDY0IGlmX3RjbC5jOjkzMSBpZl90Y2wuYzoxMTEwCittc2dpZCAibm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAigtyCvo7AkZWCs4LqgsSCooLcgrmC8SIKKworIzogaWZfdGNsLmM6NTAxCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIpaikm2CzINJg3aDVoOHg5OCxYK3IgorCisjLiA/Pz8KKyM6IGlmX3RjbC5jOjc3NAorbXNnaWQgImNhbm5vdCBzZXQgbGluZShzKSIKK21zZ3N0ciAijXOC8JDdkuiCxYKrgtyCuYLxIgorCisjOiBpZl90Y2wuYzo4NDUKK21zZ2lkICJtYXJrIG5vdCBzZXQiCittc2dzdHIgIoN9gVuDToLNkN2S6IKzguqCxIKigtyCuYLxIgorCisjOiBpZl90Y2wuYzo4NTEgaWZfdGNsLmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJyb3cgJWQgY29sdW1uICVkIgorbXNnc3RyICKNcyAlZCCX8SAlZCIKKworIzogaWZfdGNsLmM6ODgxCittc2dpZCAiY2Fubm90IGluc2VydC9hcHBlbmQgbGluZSIKK21zZ3N0ciAijXOCzJF9k/wvkseJwYLwgsWCq4LcgrmC8SIKKworIzogaWZfdGNsLmM6MTI2OAorbXNnaWQgInVua25vd24gZmxhZzogIgorbXNnc3RyICKWopJtgsyDdIOJg086IgorCisjOiBpZl90Y2wuYzoxMzM4Cittc2dpZCAidW5rbm93biB2aW1PcHRpb24iCittc2dzdHIgIpaikm2CzCB2aW1PcHRpb24ggsWCtyIKKworIzogaWZfdGNsLmM6MTQyMworbXNnaWQgImtleWJvYXJkIGludGVycnVwdCIKK21zZ3N0ciAig0yBW4N7gVuDaIqEjZ6C3SIKKworIzogaWZfdGNsLmM6MTQyOAorbXNnaWQgInZpbSBlcnJvciIKK21zZ3N0ciAidmltIINHg4mBWyIKKworIzogaWZfdGNsLmM6MTQ3MQorbXNnaWQgImNhbm5vdCBjcmVhdGUgYnVmZmVyL3dpbmRvdyBjb21tYW5kOiBvYmplY3QgaXMgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAiIgorIoNvg2KDdINAL4NFg0KDk4Nog0WN7JCsg1KDfYOTg2iC8I3skKyCxYKrgtyCuYLxOiAiCisig0mDdYNXg0aDToNngqqPwYuOgrOC6oLEgqKC3IK1gr0iCisKKyM6IGlmX3RjbC5jOjE1NDUKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICIiCisig1KBW4OLg2+DYoNOg1KDfYOTg2iC8JNvmF6CxYKrgtyCuYLxOiCDb4Nig3SDQC+DRYNCg5ODaINFgqqK+YLJj8GLjoKzguqC3IK1gr0iCisKKyMuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEZhbW91cyBsYXN0IHdvcmQ/CisjOiBpZl90Y2wuYzoxNTYyCittc2dpZCAiIgorIkUyODA6IFRDTCBGQVRBTCBFUlJPUjogcmVmbGlzdCBjb3JydXB0IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvICIKKyJ2aW0tZGV2QHZpbS5vcmciCittc2dzdHIgIiIKKyJFMjgwOiBUQ0wgknaWvZNJg0eDiYFbOiByZWZsaXN0IImYkPUhPyB2aW0tZGV2QHZpbS5vcmcggsmV8Y2QgrWCxIKtgr6Cs4KiIgorCisjOiBpZl90Y2wuYzoxNTYzCittc2dpZCAiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgcmVmZXJlbmNlIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorIoNSgVuDi4Nvg2KDToNSg32Dk4NogvCTb5hegsWCq4LcgrmC8TogIgorIoNvg2KDdINAL4NFg0KDk4Nog0WCzI5Rj8aCqoLdgsKCqYLogtyCuYLxIgorCisjOiBpZl90Y2wuYzoxNzI0Cittc2dpZCAiIgorIkU1NzE6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBUY2wgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkU1NzE6IIKxgsyDUoN9g5ODaILNlrOM+ILFgrcsgrKC34LxgsiCs4KiOiAiCisiVGNsg4mDQ4N1g4mDioLwg42BW4NogsWCq4LcgrmC8YLFgrWCvS4iCisKKyM6IGlmX3RjbC5jOjE4ODYKK21zZ2lkICIiCisiRTI4MTogVENMIEVSUk9SOiBleGl0IGNvZGUgaXMgbm90IGludCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS5vcmciCittc2dzdHIgIiIKKyJFMjgxOiBUQ0wgg0eDiYFbOiCPSZe5g1KBW4NogqqQrpCUkmyCxYLNgqCC6ILcgrmC8SE/IHZpbS1kZXZAdmltLm9yZyAiCisigsmV8Y2QgrWCxIKtgr6Cs4KiIgorCisjOiBpZl90Y2wuYzoyMDA3Cittc2dpZCAiY2Fubm90IGdldCBsaW5lIgorbXNnc3RyICKNc4LwjuaTvoLFgquC3IK5gvEiCisKKyM6IGlmX3hjbWRzcnYuYzoyMjUKK21zZ2lkICJVbmFibGUgdG8gcmVnaXN0ZXIgYSBjb21tYW5kIHNlcnZlciBuYW1lIgorbXNnc3RyICKWvZffg1SBW4NvgsyWvJFPgvCTb5hegsWCq4LcgrmC8SIKKworIzogaWZfeGNtZHNydi5jOjQ3MworbXNnaWQgIkUyNDg6IEZhaWxlZCB0byBzZW5kIGNvbW1hbmQgdG8gdGhlIGRlc3RpbmF0aW9uIHByb2dyYW0iCittc2dzdHIgIkUyNDg6IJbak0mCzIN2g42DT4OJg4CC1oLMg1KDfYOTg2iRl5BNgsmOuJRzgrWC3IK1gr0iCisKKyM6IGlmX3hjbWRzcnYuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3MzogSW52YWxpZCBzZXJ2ZXIgaWQgdXNlZDogJXMiCittc2dzdHIgIkU1NzM6IJazjPiCyINUgVuDb0lEgqqOZ4LtguqC3IK1gr06ICVzIgorCisjOiBpZl94Y21kc3J2LmM6MTExMAorbXNnaWQgIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBpcyBiYWRseSBmb3JtZWQuICBEZWxldGVkISIKK21zZ3N0ciAiRTI1MTogVklNII7AkcyCzJNvmF6DdoONg3CDZYNCgqqVc5CzgsWCty4gj8GLjoK1gtyCtYK9ISIKKworIzogbWFpbi5jOjYwCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIpaikm2CzINJg3aDVoOHg5OCxYK3IgorCisjOiBtYWluLmM6NjIKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAildKPV4j4kJSCqpG9greCrILcgrciCisKKyM6IG1haW4uYzo2NAorbXNnaWQgIkFyZ3VtZW50IG1pc3NpbmcgYWZ0ZXIiCittc2dzdHIgIoj4kJSCqoKgguiC3IK5gvEiCisKKyM6IG1haW4uYzo2NgorbXNnaWQgIkdhcmJhZ2UgYWZ0ZXIgb3B0aW9uIgorbXNnc3RyICKDSYN2g1aDh4OTgsyM44LJg1ODfoKqgqCC6ILcgrciCisKKyM6IG1haW4uYzo2OAorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiwgXCItYyBjb21tYW5kXCIgb3IgXCItLWNtZCBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICJcIitjb21tYW5kXCIsIFwiLWMgY29tbWFuZFwiLCBcIi0tY21kIGNvbW1hbmRcIiCCzIj4kJSCqpG9greCrILcgrciCisKKyM6IG1haW4uYzo3MAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgZm9yIgorbXNnc3RyICKWs4z4gsiI+JCUgsWCtzogIgorCisjOiBtYWluLmM6NDY2Cittc2dpZCAiVGhpcyBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSBkaWZmIGZlYXR1cmUuIgorbXNnc3RyICKCsYLMVmltgsmCzWRpZmaLQJRcXIKqgqCC6ILcgrmC8SiDUoOTg3CDQ4OLjp6Q3ZLoKS4iCisKKyM6IG1haW4uYzo5MzIKK21zZ2lkICJBdHRlbXB0IHRvIG9wZW4gc2NyaXB0IGZpbGUgYWdhaW46IFwiIgorbXNnc3RyICKDWINOg4qDdoNng3SDQINDg4uC8I3EgtGKSoKigsSC3YLcgrc6IFwiIgorCisjIG1zZ2lkICJcIlxuIgorIyBtc2dzdHIgIlwiXG4iCisjOiBtYWluLmM6OTQxCittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICKTx42el3CCxoK1gsSKSoKvgtyCuYLxIgorCisjOiBtYWluLmM6OTg1Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICKDWINOg4qDdoNnj2+XzZdwgvCKSoKvgtyCuYLxIgorCisjOiBtYWluLmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmaWxlcyB0byBlZGl0XG4iCittc2dzdHIgIiVkIIzCgsyDdINAg0ODi4KqldKPV4LwjVSCpoLEgqKC3IK3XG4iCisKKyM6IG1haW4uYzoxMjMzCittc2dpZCAiVmltOiBXYXJuaW5nOiBPdXRwdXQgaXMgbm90IHRvIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiCMeI2QOiCSW5aWgtaCzI9vl82CxYLNgqCC6ILcgrmC8VxuIgorCisjOiBtYWluLmM6MTIzNQorbXNnaWQgIlZpbTogV2FybmluZzogSW5wdXQgaXMgbm90IGZyb20gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IIx4jZA6IJJblpaCqYLngsyT/JfNgsWCzYKgguiC3IK5gvFcbiIKKworIy4ganVzdCBpbiBjYXNlLi4KKyM6IG1haW4uYzoxMjk3Cittc2dpZCAicHJlLXZpbXJjIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAidmltcmORT4LMg1KDfYOTg2iDiYNDg5MiCisKKyM6IG1haW4uYzoxMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODI6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjgyOiBcIiVzXCKCqYLnk8eNnoLegrGCxoKqgsWCq4LcgrmC8SIKKworIzogbWFpbi5jOjI0MTEKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIoLmguiP2o3XgsiP7pXxgs06IFwidmltIC1oXCJcbiIKKworIzogbWFpbi5jOjI0NDQKK21zZ2lkICJbZmlsZSAuLl0gICAgICAgZWRpdCBzcGVjaWZpZWQgZmlsZShzKSIKK21zZ3N0ciAiW4N0g0CDQ4OLLi5dICAgIIKggumDdINAg0ODi4LwldKPV4K3gukiCisKKyM6IG1haW4uYzoyNDQ1Cittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAglVePgJP8l82CqYLng2WDTINYg2eC8JPHjZ6C3iIKKworIzogbWFpbi5jOjI0NDYKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCCDXoNPICAgICAgICAgg16DT4KqkuiLYIKzguqCvYLGgrGC64KpgueV0o9XgreC6SIKKworIzogbWFpbi5jOjI0NDgKK21zZ2lkICItcSBbZXJyb3JmaWxlXSAgZWRpdCBmaWxlIHdpdGggZmlyc3QgZXJyb3IiCittc2dzdHIgIi1xIFtlcnJvcmZpbGVdICCNxY+JgsyDR4OJgVuCxZXSj1eCt4LpIgorCisjOiBtYWluLmM6MjQ1NworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJ1c2FnZToiCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyKOZ5dwlkA6IgorCisjOiBtYWluLmM6MjQ2MAorbXNnaWQgIiB2aW0gW2FyZ3VtZW50c10gIgorbXNnc3RyICIgdmltIFuI+JCUXSIKKworIzogbWFpbi5jOjI0NjQKK21zZ2lkICIiCisiXG4iCisiICAgb3I6IgorbXNnc3RyICIiCisiXG4iCisiICAgguCCtYKtgs06IgorCisjOiBtYWluLmM6MjQ2NworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyKI+JCUOlxuIgorCisjOiBtYWluLmM6MjQ2OAorbXNnaWQgIi0tXHRcdFx0T25seSBmaWxlIG5hbWVzIGFmdGVyIHRoaXMiCittc2dzdHIgIi0tXHRcdFx0grGCzIKggsaCyYLNg3SDQINDg4uWvIK+gq8iCisKKyM6IG1haW4uYzoyNDcwCittc2dpZCAiLS1saXRlcmFsXHRcdERvbid0IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIi0tbGl0ZXJhbFx0XHSDj4NDg4uDaINKgVuDaILwk1eKSoK1gsiCoiIKKworIzogbWFpbi5jOjI0NzMKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHSCsYLMZ3ZpbYLwT0xFgsaCtYLEk2+YXoK3gukiCisKKyM6IG1haW4uYzoyNDc0Cittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi11bnJlZ2lzdGVyXHRcdGd2aW2CzE9MRZNvmF6C8Inwj5yCt4LpIgorCisjOiBtYWluLmM6MjQ3NworbXNnaWQgIi1nXHRcdFx0UnVuIHVzaW5nIEdVSSAobGlrZSBcImd2aW1cIikiCittc2dzdHIgIi1nXHRcdFx0R1VJgsWLTpOugreC6SAoXCJndmltXCIggsaTr4K2KSIKKworIzogbWFpbi5jOjI0NzgKK21zZ2lkICItZiAgb3IgIC0tbm9mb3JrXHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZiBvciAgLS1ub2ZvcmtcdIN0g0iDQYNPg4mDRYOTg2g6IEdVSYLwjm6C34LpgsaCq4LJZm9ya4K1gsiCoiIKKworIzogbWFpbi5jOjI0ODAKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRWaYOCgVuDaCAoXCJ2aVwiIILGk6+CtikiCisKKyM6IG1haW4uYzoyNDgxCittc2dpZCAiLWVcdFx0XHRFeCBtb2RlIChsaWtlIFwiZXhcIikiCittc2dzdHIgIi1lXHRcdFx0RXiDgoFbg2ggKFwiZXhcIiCCxpOvgrYpIgorCisjOiBtYWluLmM6MjQ4MgorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHSDVINDg4yDk4NnKINvg2KDYCmDgoFbg2ggKFwiZXhcIiCQ6pdwKSIKKworIzogbWFpbi5jOjI0ODQKK21zZ2lkICItZFx0XHRcdERpZmYgbW9kZSAobGlrZSBcInZpbWRpZmZcIikiCittc2dzdHIgIi1kXHRcdFx0jbeVqoOCgVuDaCAoXCJ2aWRpZmZcIiCCxpOvgrYpIgorCisjOiBtYWluLmM6MjQ4NgorbXNnaWQgIi15XHRcdFx0RWFzeSBtb2RlIChsaWtlIFwiZXZpbVwiLCBtb2RlbGVzcykiCittc2dzdHIgIi15XHRcdFx0g0OBW4NXgVuDgoFbg2ggKFwiZXZpbVwiIILGk6+Ctiwgg4KBW4NolrMpIgorCisjOiBtYWluLmM6MjQ4NworbXNnaWQgIi1SXHRcdFx0UmVhZG9ubHkgbW9kZSAobGlrZSBcInZpZXdcIikiCittc2dzdHIgIi1SXHRcdFx0k8eNnpDql3CDgoFbg2ggKFwidmlld1wiIILGk6+CtikiCisKKyM6IG1haW4uYzoyNDg4Cittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdJCnjMCDgoFbg2ggKFwicnZpbVwiIILGk6+CtikiCisKKyM6IG1haW4uYzoyNDg5Cittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHSVz41YICiDdINAg0ODi5XbkbaOnikggvCCxYKrgsiCooLmgqSCyYK3gukiCisKKyM6IG1haW4uYzoyNDkwCittc2dpZCAiLU1cdFx0XHRNb2RpZmljYXRpb25zIGluIHRleHQgbm90IGFsbG93ZWQiCittc2dzdHIgIi1NXHRcdFx0g2WDTINYg2eCzJXSj1eC8I1zgsiCpoLIgqKC5oKkgsmCt4LpIgorCisjOiBtYWluLmM6MjQ5MQorbXNnaWQgIi1iXHRcdFx0QmluYXJ5IG1vZGUiCittc2dzdHIgIi1iXHRcdFx0g2+DQ4Npg4qDgoFbg2giCisKKyM6IG1haW4uYzoyNDkzCittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0TGlzcIOCgVuDaCIKKworIzogbWFpbi5jOjI0OTUKK21zZ2lkICItQ1x0XHRcdENvbXBhdGlibGUgd2l0aCBWaTogJ2NvbXBhdGlibGUnIgorbXNnc3RyICItQ1x0XHRcdFZpjN2Kt4OCgVuDaDogJ2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjQ5NgorbXNnaWQgIi1OXHRcdFx0Tm90IGZ1bGx5IFZpIGNvbXBhdGlibGU6ICdub2NvbXBhdGlibGUnIgorbXNnc3RyICItTlx0XHRcdFZplPGM3Yq3g4KBW4NoOiAnbm9jb21wYXRpYmxlIgorCisjOiBtYWluLmM6MjQ5NworbXNnaWQgIi1WW05dXHRcdFZlcmJvc2UgbGV2ZWwiCittc2dzdHIgIi1WW05dXHRcdFZlcmJvc2Ugg4yDeIOLIgorCisjOiBtYWluLmM6MjQ5OAorbXNnaWQgIi1EXHRcdFx0RGVidWdnaW5nIG1vZGUiCittc2dzdHIgIi1EXHRcdFx0g2aDb4Nig0+DgoFbg2giCisKKyM6IG1haW4uYzoyNDk5Cittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHSDWIOPg2KDdoN0g0CDQ4OLgvCOZ5dwgrmCuIOBg4KDioK+gq8iCisKKyM6IG1haW4uYzoyNTAwCittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0g1iDj4Nig3aDdINAg0ODi4Lwl/GLk4K1j0mXuSIKKworIzogbWFpbi5jOjI1MDEKK21zZ2lkICItciAod2l0aCBmaWxlIG5hbWUpXHRSZWNvdmVyIGNyYXNoZWQgc2Vzc2lvbiIKK21zZ3N0ciAiLXIgKIN0g0CDQ4OLlrwpXHSDToOJg2KDVoOFgrWCvYNag2KDVoOHg5OC8JWci0EiCisKKyM6IG1haW4uYzoyNTAyCittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRcdC1ygsaTr4K2IgorCisjOiBtYWluLmM6MjUwNAorbXNnaWQgIi1mXHRcdFx0RG9uJ3QgdXNlIG5ld2NsaSB0byBvcGVuIHdpbmRvdyIKK21zZ3N0ciAiLWZcdFx0XHSDRYNCg5ODaINFgvCKSoKtgsyCySBuZXdjbGkggvCOZ5dwgrWCyIKiIgorCisjOiBtYWluLmM6MjUwNQorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPGRldmljZT5cdFx0SS9PgskgPGRldmljZT4ggvCOZ5dwgreC6SIKKworIzogbWFpbi5jOjI1MDgKK21zZ2lkICItQVx0XHRcdHN0YXJ0IGluIEFyYWJpYyBtb2RlIgorbXNnc3RyICItQVx0XHRcdINBg4mDcoNBjOqDgoFbg2iCxYtOk66Ct4LpIgorCisjOiBtYWluLmM6MjUxMQorbXNnaWQgIi1IXHRcdFx0U3RhcnQgaW4gSGVicmV3IG1vZGUiCittc2dzdHIgIi1IXHRcdFx0g3eDdYOJg0OM6oOCgVuDaILFi06TroK3gukiCisKKyM6IG1haW4uYzoyNTE0Cittc2dpZCAiLUZcdFx0XHRTdGFydCBpbiBGYXJzaSBtb2RlIgorbXNnc3RyICItRlx0XHRcdIN5g4uDVoNBjOqDgoFbg2iCxYtOk66Ct4LpIgorCisjOiBtYWluLmM6MjUxNgorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW5hbD5cdJJblpaC8CA8dGVybWluYWw+IILJkN2S6IK3gukiCisKKyM6IG1haW4uYzoyNTE3Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0LnZpbXJjgsyR44LtguiCySA8dmltcmM+IILwjmeCpCIKKworIzogbWFpbi5jOjI1MTkKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0Lmd2aW1yY4LMkeOC7YLogskgPGd2aW1yYz4ggvCOZ4KkIgorCisjOiBtYWluLmM6MjUyMQorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHSDdoOJg0+DQ4OTg1iDToOKg3aDZ4Lwg42BW4NogrWCyIKiIgorCisjOiBtYWluLmM6MjUyMgorbXNnaWQgIi1vW05dXHRcdE9wZW4gTiB3aW5kb3dzIChkZWZhdWx0OiBvbmUgZm9yIGVhY2ggZmlsZSkiCittc2dzdHIgIi1vW05dXHRcdE4gjMKDRYNCg5ODaINFgvCKSoKtKI/Il6qSbDogg3SDQINDg4uCyYLCgqsxjMIpIgorCisjOiBtYWluLmM6MjUyMworbXNnaWQgIi1PW05dXHRcdExpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdC1vgsaTr4K2gr6CqpCCkryVqoqEIgorCisjOiBtYWluLmM6MjUyNAorbXNnaWQgIitcdFx0XHRTdGFydCBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiK1x0XHRcdIN0g0CDQ4OLgsyNxYzjgqmC54LNgraC34LpIgorCisjOiBtYWluLmM6MjUyNQorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8bG51bT5cdFx0PGxudW0+II1zgqmC54LNgraC34LpIgorCisjOiBtYWluLmM6MjUyNworbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIi0tY21kIDxjb21tYW5kPlx0dmltcmOC8IONgVuDaIK3gumRT4LJIDxjb21tYW5kPiCC8I7AjXOCt4LpIgorCisjOiBtYWluLmM6MjUyOQorbXNnaWQgIi1jIDxjb21tYW5kPlx0XHRFeGVjdXRlIDxjb21tYW5kPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItYyA8Y29tbWFuZD5cdFx0jcWPiYLMg3SDQINDg4uC8IONgVuDaIzjIDxjb21tYW5kPiCC8I7AjXOCt4LpIgorCisjOiBtYWluLmM6MjUzMAorbXNnaWQgIi1TIDxzZXNzaW9uPlx0XHRTb3VyY2UgZmlsZSA8c2Vzc2lvbj4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLVMgPHNlc3Npb24+XHRcdI3Fj4mCzIN0g0CDQ4OLgvCDjYFbg2iM44N0g0CDQ4OLIDxzZXNzaW9uPiCC8I7mjZ6C3iIKKworIzogbWFpbi5jOjI1MzEKK21zZ2lkICItcyA8c2NyaXB0aW4+XHRSZWFkIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGZyb20gZmlsZSA8c2NyaXB0aW4+IgorbXNnc3RyICItcyA8c2NyaXB0aW4+XHSDdINAg0ODiyA8c2NyaXB0aW4+IIKpgueDbYFbg32Di4NSg32Dk4NogvCTx42egt4iCisKKyM6IG1haW4uYzoyNTMyCittc2dpZCAiLXcgPHNjcmlwdG91dD5cdEFwcGVuZCBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLXcgPHNjcmlwdG91dD5cdJP8l82CtYK9kVODUoN9g5ODaILwg3SDQINDg4sgPHNjcmlwdG91dD4ggsmSx4nBgreC6SIKKworIzogbWFpbi5jOjI1MzMKK21zZ2lkICItVyA8c2NyaXB0b3V0Plx0V3JpdGUgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi1XIDxzY3JpcHRvdXQ+XHST/JfNgrWCvZFTg1KDfYOTg2iC8IN0g0CDQ4OLIDxzY3JpcHRvdXQ+IILJlduRtoK3gukiCisKKyM6IG1haW4uYzoyNTM1Cittc2dpZCAiLXhcdFx0XHRFZGl0IGVuY3J5cHRlZCBmaWxlcyIKK21zZ3N0ciAiLXhcdFx0XHSIw42GibuCs4Lqgr2DdINAg0ODi4LwldKPV4K3gukiCisKKyM6IG1haW4uYzoyNTM5Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRDb25uZWN0IHZpbSB0byB0aGlzIHBhcnRpY3VsYXIgWC1zZXJ2ZXIiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0dmltgvCOd5LogrWCvSBYIINUgVuDb4LJkNqRsYK3gukiCisKKyM6IG1haW4uYzoyNTQxCittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHRYg1SBW4NvgsmQ2pGxgrWCyIKiIgorCisjOiBtYWluLmM6MjU0NAorbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgaWYgcG9zc2libGUiCittc2dzdHIgIi0tcmVtb3RlIDxmaWxlcz5cdInClFxcgsiC54LOVmltg1SBW4NvgsUgPGZpbGVzPiCC8JXSj1eCt4LpIgorCisjOiBtYWluLmM6MjU0NQorbXNnaWQgIi0tcmVtb3RlLXNpbGVudCA8ZmlsZXM+ICBTYW1lLCBkb24ndCBjb21wbGFpbiBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIiCittc2dzdHIgIi0tcmVtb3RlLXNpbG5ldCA8ZmlsZXM+ICCTr4/jLCCDVIFbg2+Cqpazgq2CxILgjHiNkJW2gvCPb5fNgrWCyIKiIgorCisjOiBtYWluLmM6MjU0NgorbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcz4gIEFzIC0tcmVtb3RlIGJ1dCB3YWl0IGZvciBmaWxlcyB0byBoYXZlIGJlZW4gZWRpdGVkIgorbXNnc3RyICItLXJlbW90ZS13YWl0IDxmaWxlcz5cdC0tcmVtb3RljOMgg3SDQINDg4uCzJXSj1eCqo9Jgu2C6YLMgvCR0oLCIgorCisjOiBtYWluLmM6MjU0NworbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0LXNpbGVudCA8ZmlsZXM+ICBTYW1lLCBkb24ndCBjb21wbGFpbiBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIiCittc2dzdHIgIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIJOvj+MsIINUgVuDb4KqlrOCrYLEguCMeI2QlbaC8I9vl82CtYLIgqIiCisKKyM6IG1haW4uYzoyNTQ4Cittc2dpZCAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFNlbmQgPGtleXM+IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFZpbYNUgVuDb4LJIDxrZXlzPiCC8JGXkE2CtYLEj0mXuYK3gukiCisKKyM6IG1haW4uYzoyNTQ5Cittc2dpZCAiLS1yZW1vdGUtZXhwciA8ZXhwcj5cdEV2YWx1YXRlIDxleHByPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIHByaW50IHJlc3VsdCIKK21zZ3N0ciAiLS1yZW1vdGUtZXhwciA8ZXhwcj5cdINUgVuDb4LFIDxleHByPiCC8I7AjXOCtYLEjIuJyoLwlVxcjqaCt4LpIgorCisjOiBtYWluLmM6MjU1MAorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICItLXNlcnZlcmxpc3RcdFx0Vmltg1SBW4NvlryCzIjql5eC8JVcXI6mgrWCxI9Jl7mCt4LpIgorCisjOiBtYWluLmM6MjU1MQorbXNnaWQgIi0tc2VydmVybmFtZSA8bmFtZT5cdFNlbmQgdG8vYmVjb21lIHRoZSBWaW0gc2VydmVyIDxuYW1lPiIKK21zZ3N0ciAiLS1zZXJ2ZW5hbWUgPG5hbWU+XHRcdFZpbYNUgVuDbyA8bmFtZT4ggsmRl5BNL5a8kU+Q3ZLogreC6SIKKworIzogbWFpbi5jOjI1NTQKK21zZ2lkICItaSA8dmltaW5mbz5cdFx0VXNlIDx2aW1pbmZvPiBpbnN0ZWFkIG9mIC52aW1pbmZvIgorbXNnc3RyICItaSA8dmltaW5mbz5cdFx0LnZpbWluZm+CzJHjgu2C6ILJIDx2aW1pbmZvPiCC8I5ngqQiCisKKyM6IG1haW4uYzoyNTU2Cittc2dpZCAiLWggIG9yICAtLWhlbHBcdFByaW50IEhlbHAgKHRoaXMgbWVzc2FnZSkgYW5kIGV4aXQiCittc2dzdHIgIi1oIG9yICAtLWhlbHBcdIN3g4uDdiiCsYLMg4GDYoNagVuDVymC8JVcXI6mgrWPSZe5greC6SIKKworIzogbWFpbi5jOjI1NTcKK21zZ2lkICItLXZlcnNpb25cdFx0UHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKK21zZ3N0ciAiLS12ZXJzaW9uXHRcdINvgVuDV4OHg5OP7pXxgvCVXFyOpoK1j0mXuYK3gukiCisKKyM6IG1haW4uYzoyNTYxCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKE1vdGlmIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbYLJguaCwYLEifCO34KzguqC6Yj4kJQoTW90aWaDb4Fbg1eDh4OTKTpcbiIKKworIzogbWFpbi5jOjI1NjUKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAobmVYdGF3IHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbYLJguaCwYLEifCO34KzguqC6Yj4kJQobmVYdGF3g2+BW4NXg4eDkyk6XG4iCisKKyM6IG1haW4uYzoyNTY3Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEF0aGVuYSB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW2CyYLmgsGCxInwjt+Cs4LqgumI+JCUKEF0aGVuYYNvgVuDV4OHg5MpOlxuIgorCisjOiBtYWluLmM6MjU3MQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4iCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0PGRpc3BsYXk+IILFdmltgvCOwI1zgreC6SIKKworIzogbWFpbi5jOjI1NzIKK21zZ2lkICItaWNvbmljXHRcdFN0YXJ0IHZpbSBpY29uaWZpZWQiCittc2dzdHIgIi1pY29uaWNcdFx0jcWPrIm7grWCvY/zkdSCxXZpbYLwi06TroK3gukiCisKKyM6IG1haW4uYzoyNTc0Cittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG5hbWU+XHRcdHZpbYLMlryCqiA8bmFtZT4ggsWCoILpgsaCtYLEg4qDXFyBW4NYgvCOZ4KkIgorCisjOiBtYWluLmM6MjU3NQorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgKI7AkZWCs4LqgsSCooLIgqIpXG4iCisKKyM6IG1haW4uYzoyNTc3Cittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8Y29sb3I+XHSUd4xpkEaCySA8Y29sb3I+IILwjmeCpCiTr4tgOiAtYmcpIgorCisjOiBtYWluLmM6MjU3OAorbXNnaWQgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZnKSIKK21zZ3N0ciAiLWZvcmVncm91bmQgPGNvbG9yPlx0kU+MaZBGgskgPGNvbG9yPiCC8I5ngqQok6+LYDogLWZnKSIKKworIzogbWFpbi5jOjI1NzkgbWFpbi5jOjI1OTkKK21zZ2lkICItZm9udCA8Zm9udD5cdFx0VXNlIDxmb250PiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mbikiCittc2dzdHIgIi1mb250IDxmb250Plx0XHSDZYNMg1iDZ5VcXI6mgskgPGZvbnQ+IILwjmeCpCiTr4tgOiAtZm4pIgorCisjOiBtYWluLmM6MjU4MAorbXNnaWQgIi1ib2xkZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGJvbGQgdGV4dCIKK21zZ3N0ciAiLWJvbGRmb250IDxmb250Plx0kb6OmoLJIDxmb250PiCC8I5ngqQiCisKKyM6IG1haW4uYzoyNTgxCittc2dpZCAiLWl0YWxpY2ZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBpdGFsaWMgdGV4dCIKK21zZ3N0ciAiLWl0YWxpY2ZvbnQgPGZvcj5cdI7OkcyOmoLJIDxmb250PiCC8I5ngqQiCisKKyM6IG1haW4uYzoyNTgyIG1haW4uYzoyNjAwCittc2dpZCAiLWdlb21ldHJ5IDxnZW9tPlx0VXNlIDxnZW9tPiBmb3IgaW5pdGlhbCBnZW9tZXRyeSAoYWxzbzogLWdlb20pIgorbXNnc3RyICItZ2VvbWV0cnkgPGdlb20+XHSPiYr6lHqSdYLJIDxnZW9tPiCC8I5ngqQok6+LYDogLWdlb20pIgorCisjOiBtYWluLmM6MjU4MworbXNnaWQgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHRVc2UgYSBib3JkZXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLWJ3KSIKK21zZ3N0ciAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdIurikWCzJWdgvAgPHdpZHRoPiCCyYK3gukok6+LYDogLWJ3KSIKKworIzogbWFpbi5jOjI1ODQKK21zZ2lkICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgVXNlIGEgc2Nyb2xsYmFyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1zdykiCittc2dzdHIgIiIKKyItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgg1iDToONgVuDi4NvgVuCzJWdgvAgPHdpZHRoPiCCyYK3gukok6+LYDogLXN3KSIKKworIzogbWFpbi5jOjI1ODYKK21zZ2lkICItbWVudWhlaWdodCA8aGVpZ2h0Plx0VXNlIGEgbWVudSBiYXIgaGVpZ2h0IG9mIDxoZWlnaHQ+IChhbHNvOiAtbWgpIgorbXNnc3RyICItbWVudWhlaWdodCA8aGVpZ2h0Plx0g4GDaoOFgVuDb4FbgsyNgoKzgvAgPGhlaWdodD4ggsmCt4LpKJOvi2A6IC1taCkiCisKKyM6IG1haW4uYzoyNTg4IG1haW4uYzoyNjAxCittc2dpZCAiLXJldmVyc2VcdFx0VXNlIHJldmVyc2UgdmlkZW8gKGFsc286IC1ydikiCittc2dzdHIgIi1yZXZlcnNlXHRcdJS9k12JZpGcgvCOZ5dwgreC6SiTr4tgOiAtcnYpIgorCisjOiBtYWluLmM6MjU4OQorbXNnaWQgIityZXZlcnNlXHRcdERvbid0IHVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiArcnYpIgorbXNnc3RyICIrcmV2ZXJzZVx0XHSUvZNdiWaRnILwjmeXcIK1gsiCoiiTr4tgOiArcnYpIgorCisjOiBtYWluLmM6MjU5MAorbXNnaWQgIi14cm0gPHJlc291cmNlPlx0U2V0IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UiCittc2dzdHIgIi14cm0gPHJlc291cmNlPlx0k8GS6ILMg4qDXFyBW4NYgvCOZ5dwgreC6SIKKworIzogbWFpbi5jOjI1OTMKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoUklTQyBPUyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW2CyYLmgsGCxInwjt+Cs4LqgumI+JCUKFJJU0MgT1ODb4Fbg1eDh4OTKTpcbiIKKworIzogbWFpbi5jOjI1OTQKK21zZ2lkICItLWNvbHVtbnMgPG51bWJlcj5cdEluaXRpYWwgd2lkdGggb2Ygd2luZG93IGluIGNvbHVtbnMiCittc2dzdHIgIi0tY29sdW1ucyA8bnVtYmVyPlx0j4mK+oLMg0WDQoOTg2iDRYLMg1KDiYOAklCIyoLMlZ0iCisKKyM6IG1haW4uYzoyNTk1Cittc2dpZCAiLS1yb3dzIDxudW1iZXI+XHRJbml0aWFsIGhlaWdodCBvZiB3aW5kb3cgaW4gcm93cyIKK21zZ3N0ciAiLS1yb3dzIDxudW1iZXI+XHSPiYr6gsyDRYNCg5ODaINFgsyNc5JQiMqCzI2CgrMiCisKKyM6IG1haW4uYzoyNTk4Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEdUSysgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJndmltgsmC5oLBgsSJ8I7fgrOC6oLpiPiQlChHVEsrg2+BW4NXg4eDkyk6XG4iCisKKyM6IG1haW4uYzoyNjAyCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiAoYWxzbzogLS1kaXNwbGF5KSIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHQ8ZGlzcGxheT4ggsV2aW2C8I7AjXOCt4LpKJOvi2A6IC0tZGlzcGxheSkiCisKKyM6IG1haW4uYzoyNjA0Cittc2dpZCAiLS1yb2xlIDxyb2xlPlx0U2V0IGEgdW5pcXVlIHJvbGUgdG8gaWRlbnRpZnkgdGhlIG1haW4gd2luZG93IgorbXNnc3RyICItLXJvbGUgPHJvbGU+XHSDgYNDg5ODRYNCg5ODaINFgvCOr5XKgreC6YjqiNOCyJbwioQocm9sZSmC8JDdkuiCt4LpIgorCisjOiBtYWluLmM6MjYwNgorbXNnaWQgIi0tc29ja2V0aWQgPHhpZD5cdE9wZW4gVmltIGluc2lkZSBhbm90aGVyIEdUSyB3aWRnZXQiCittc2dzdHIgIi0tc29ja2V0aWQgPHhpZD5cdIjZgsiC6UdUSyB3aWRnZXSCxVZpbYLwikqCrSIKKworIzogbWFpbi5jOjI2MDkKK21zZ2lkICItUCA8cGFyZW50IHRpdGxlPlx0T3BlbiBWaW0gaW5zaWRlIHBhcmVudCBhcHBsaWNhdGlvbiIKK21zZ3N0ciAiLVAgPJBlgsyDXoNDg2eDiz5cdFZpbYLwkGWDQYN2g4qDUIFbg1aDh4OTgsyShoLFi06TroK3gukiCisKKyMgbXNnaWQgIi0taGVscFx0XHRTaG93IEdub21lIGFyZ3VtZW50cyIKKyMgbXNnc3RyICItLWhlbHBcdFx0R05PTUWCzIj4kJSC8IypgrmC6SIKKyM6IG1haW4uYzoyODQ3Cittc2dpZCAiTm8gZGlzcGxheSIKK21zZ3N0ciAig2aDQoNYg3aDjINDgqqMqYLCgqmC6ILcgrmC8SIKKworIy4gRmFpbGVkIHRvIHNlbmQsIGFib3J0LgorIzogbWFpbi5jOjI4NjIKK21zZ2lkICI6IFNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICI6IJGXkE2CyY64lHOCtYLcgrWCvS5cbiIKKworIy4gTGV0IHZpbSBzdGFydCBub3JtYWxseS4KKyM6IG1haW4uYzoyODY4Cittc2dpZCAiOiBTZW5kIGZhaWxlZC4gVHJ5aW5nIHRvIGV4ZWN1dGUgbG9jYWxseVxuIgorbXNnc3RyICI6IJGXkE2CyY64lHOCtYLcgrWCvS4gg42BW4NKg4uCxYLMjsCNc4Lwjo6C3YLEgqKC3IK3XG4iCisKKyM6IG1haW4uYzoyOTA2IG1haW4uYzoyOTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG9mICVkIGVkaXRlZCIKK21zZ3N0ciAiJWQgjMIgKCVkIIzCkoYpIILMg3SDQINDg4uC8JXSj1eCtYLcgrWCvSIKKworIzogbWFpbi5jOjI5NDkKK21zZ2lkICJObyBkaXNwbGF5OiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICKDZoNCg1iDdoOMg0OCqoKgguiC3IK5gvE6II6ugsyRl5BNgsmOuJRzgrWC3IK1gr0uXG4iCisKKyM6IG1haW4uYzoyOTYxCittc2dpZCAiOiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICI6II6ugsyRl5BNgsmOuJRzgrWC3IK1gr0uXG4iCisKKyM6IG1hcmsuYzo3MDkKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIoN9gVuDToKqkN2S6IKzguqCxIKigtyCuYLxIgorCisjOiBtYXJrLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4MzogXCIlc1wiIILJilmTloK3gumDfYFbg06CqoKgguiC3IK5gvEiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjcyMgorbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyJtYXJrICAgjXMgICCX8SCDdINAg0ODiy+DZYNMg1iDZyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzYwCittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIganVtcCAgII1zICAgl/Egg3SDQINDg4svg2WDTINYg2ciCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjgwNQorbXNnaWQgIiIKKyJcbiIKKyJjaGFuZ2UgbGluZSAgY29sIHRleHQiCittc2dzdHIgIiIKKyJcbiIKKyKVz41YICAgjXMgICAgl/EgIINlg0yDWINnIgorCisjOiBtYXJrLmM6MTI4MQorbXNnaWQgIiIKKyJcbiIKKyIjIEZpbGUgbWFya3M6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIIN0g0CDQ4OLg32BW4NOOlxuIgorCisjLiBXcml0ZSB0aGUganVtcGxpc3Qgd2l0aCAtJworIzogbWFyay5jOjEzMTYKK21zZ2lkICIiCisiXG4iCisiIyBKdW1wbGlzdCAobmV3ZXN0IGZpcnN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgg1eDg4OTg3aDioNYg2cgKJBWgrWCooLggsyCqpDmKTpcbiIKKworIzogbWFyay5jOjE0MTIKK21zZ2lkICIiCisiXG4iCisiIyBIaXN0b3J5IG9mIG1hcmtzIHdpdGhpbiBmaWxlcyAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIIN0g0CDQ4OLk+CDfYFbg06CzJeal/AgKJBWgrWCooLggsyCqYLnjMOCooLggswpOlxuIgorCisjOiBtYXJrLmM6MTUwMQorbXNnaWQgIk1pc3NpbmcgJz4nIgorbXNnc3RyICInPicggqqC3YLCgqmC6ILcgrmC8SIKKworIzogbWJ5dGUuYzo0NjcKK21zZ2lkICJFNTQzOiBOb3QgYSB2YWxpZCBjb2RlcGFnZSIKK21zZ3N0ciAiRTU0MzoglrOM+ILIg1KBW4Nog3mBW4NXgsWCtyIKKworIzogbWJ5dGUuYzo0NDMxCittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IElDgsySbILwkN2S6ILFgquC3IK5gvEiCisKKyM6IG1ieXRlLmM6NDU4MworbXNnaWQgIkUyODU6IEZhaWxlZCB0byBjcmVhdGUgaW5wdXQgY29udGV4dCIKK21zZ3N0ciAiRTI4NTogg0ODk4N2g2KDZ4NSg5ODZYNMg1iDZ4LMjeyQrILJjriUc4K1gtyCtYK9IgorCisjOiBtYnl0ZS5jOjQ3NDEKK21zZ2lkICJFMjg2OiBGYWlsZWQgdG8gb3BlbiBpbnB1dCBtZXRob2QiCittc2dzdHIgIkUyODY6IINDg5ODdoNig2eDgYNcXINig2iCzINJgVuDdoOTgsmOuJRzgrWC3IK1gr0iCisKKyM6IG1ieXRlLmM6NDc1MgorbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4NzogjHiNkDogSU2CzJRqifODUoFbg4uDb4Nig06C8JDdkuiCxYKrgtyCuYLxgsWCtYK9IgorCisjOiBtYnl0ZS5jOjQ3NTgKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODogg0ODk4N2g2KDZ4OBg1xcg2KDaILNgseC8YLIg1iDXoNDg4uC4INUg3yBW4NngrWC3IK5gvEiCisKKyM6IG1ieXRlLmM6NDgxNQorbXNnaWQgIkUyODk6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgbXkgcHJlZWRpdCB0eXBlIgorbXNnc3RyICJFMjg5OiCDQ4OTg3aDYoNng4GDXFyDYoNogs0gbXkgcHJlZWRpdCB0eXBlIILwg1SDfIFbg2eCtYLcgrmC8SIKKworIzogbWJ5dGUuYzo0ODg5Cittc2dpZCAiRTI5MDogb3Zlci10aGUtc3BvdCBzdHlsZSByZXF1aXJlcyBmb250c2V0IgorbXNnc3RyICJFMjkwOiBvdmVyLXRoZS1zcG90IINYg16DQ4OLgsmCzWZvbnRzZXSCqpVLl3aCxYK3IgorCisjOiBtYnl0ZS5jOjQ5MjUKK21zZ2lkICJFMjkxOiBZb3VyIEdUSysgaXMgb2xkZXIgdGhhbiAxLjIuMy4gU3RhdHVzIGFyZWEgZGlzYWJsZWQiCittc2dzdHIgIkUyOTE6IEdUSyuCqjEuMi4zguaC6ILgjMOCooLMgsWDWINlgVuDXoNYg0eDioNBgqqWs4z4gsWCtyIKKworIzogbWJ5dGUuYzo1MjMyCittc2dpZCAiRTI5MjogSW5wdXQgTWV0aG9kIFNlcnZlciBpcyBub3QgcnVubmluZyIKK21zZ3N0ciAiRTI5Mjogg0ODk4N2g2KDZ4OBg1xcg2KDaINUgVuDbyCCqpOujeyCtYLEgqKC3IK5gvEiCisKKyM6IG1lbWZpbGUuYzo0ODgKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5Mzogg3WDjYNig06CqoONg2KDToKzguqCxIKigtyCuYLxIgorCisjOiBtZW1maWxlLmM6MTAwNQorbXNnaWQgIkUyOTQ6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHJlYWQiCittc2dzdHIgIkUyOTQ6IINYg4+DYoN2g3SDQINDg4uTx42ejp6CyYNWgVuDToNHg4mBW4LFgrciCisKKyM6IG1lbWZpbGUuYzoxMDEwCittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IINYg4+DYoN2g3SDQINDg4uCzJPHjZ6C3YNHg4mBW4LFgrciCisKKyM6IG1lbWZpbGUuYzoxMDYyCittc2dpZCAiRTI5NjogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgd3JpdGUiCittc2dzdHIgIkUyOTY6IINYg4+DYoN2g3SDQINDg4uPkY2egt2OnoLJg1aBW4NOg0eDiYFbgsWCtyIKKworIzogbWVtZmlsZS5jOjEwODAKK21zZ2lkICJFMjk3OiBXcml0ZSBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTc6IINYg4+DYoN2g3SDQINDg4uCzI+RjZ6C3YNHg4mBW4LFgrciCisKKyM6IG1lbWZpbGUuYzoxMjc3Cittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiCDWIOPg2KDdoN0g0CDQ4OLgqqK+YLJkbaN3YK1gtyCtyAoc3ltbGlua4LJguaC6Y1VjII/KSIKKworIzogbWVtbGluZS5jOjI3NQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMD8iCittc2dzdHIgIkUyOTg6IIN1g42DYoNOIDAggvCO5pO+gsWCq4LcgrmC8T8iCisKKyM6IG1lbWxpbmUuYzozMTUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDE/IgorbXNnc3RyICJFMjk4OiCDdYONg2KDTiAxIILwjuaTvoLFgquC3IK5gvE/IgorCisjOiBtZW1saW5lLmM6MzMzCittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAyPyIKK21zZ3N0ciAiRTI5ODogg3WDjYNig04gMiCC8I7mk76CxYKrgtyCuYLxPyIKKworIy4gY291bGQgbm90IChyZSlvcGVuIHRoZSBzd2FwIGZpbGUsIHdoYXQgY2FuIHdlIGRvPz8/PworIzogbWVtbGluZS5jOjQ0MworbXNnaWQgIkUzMDE6IE9vcHMsIGxvc3QgdGhlIHN3YXAgZmlsZSEhISIKK21zZ3N0ciAiRTMwMToggqiCwYLGLCCDWIOPg2KDdoN0g0CDQ4OLgqqOuILtguqC3IK1gr0hISEiCisKKyM6IG1lbWxpbmUuYzo0NDgKK21zZ2lkICJFMzAyOiBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwMjogg1iDj4Nig3aDdINAg0ODi4LMlryRT4Lwlc+CpoLnguqC3IK5gvEiCisKKyM6IG1lbWxpbmUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwMzogVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciBcIiVzXCIsIHJlY292ZXJ5IGltcG9zc2libGUiCittc2dzdHIgIkUzMDM6IFwiJXNcIiCCzINYg4+DYoN2g3SDQINDg4uC8IpKgq+CyIKigsyCxYOKg0qDb4OKgs2Vc4nClFxcgsWCtyIKKworIzogbWVtbGluZS5jOjYxNworbXNnaWQgIkUzMDQ6IG1sX3RpbWVzdGFtcDogRGlkbid0IGdldCBibG9jayAwPz8iCittc2dzdHIgIkUzMDQ6IG1sX3RpbWVzdGFtcDogg3WDjYNig04gMCCC8I7mk76CxYKrgtyCuYLxgsWCtYK9Pz8iCisKKyM6IG1lbWxpbmUuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNTogTm8gc3dhcCBmaWxlIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiRTMwNTogJXMggsmCzYNYg4+DYoN2g3SDQINDg4uCqoLdgsKCqYLogtyCuYLxIgorCisjOiBtZW1saW5lLmM6NzY3Cittc2dpZCAiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIKK21zZ3N0ciAijmeXcIK3gumDWIOPg2KDdoN0g0CDQ4OLgsyU1I2GgvCT/JfNgrWCxIKtgr6Cs4KiKDAggsWPSZe5KTogIgorCisjOiBtZW1saW5lLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDY6IENhbm5vdCBvcGVuICVzIgorbXNnc3RyICJFMzA2OiAlcyCC8IpKgq+C3IK5gvEiCisKKyM6IG1lbWxpbmUuYzo4MzQKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBibG9jayAwIGZyb20gIgorbXNnc3RyICKDdYONg2KDTiAwIILwk8eNnoLfgtyCuYLxICIKKworIzogbWVtbGluZS5jOjgzNworbXNnaWQgIiIKKyJcbiIKKyJNYXliZSBubyBjaGFuZ2VzIHdlcmUgbWFkZSBvciBWaW0gZGlkIG5vdCB1cGRhdGUgdGhlIHN3YXAgZmlsZS4iCittc2dzdHIgIiIKKyJcbiIKKyKLsILngq2Vz41YgqqCs4LqgsSCooLIgqKCqVZpbYKqg1iDj4Nig3aDdINAg0ODi4LwjViQVoK1gsSCooLcgrmC8S4iCisKKyM6IG1lbWxpbmUuYzo4NDcgbWVtbGluZS5jOjg2NAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW0uXG4iCittc2dzdHIgIiBWaW2CzIKxgsyDb4Fbg1eDh4OTgsWCzY5nl3CCxYKrgtyCuYLxLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAiVmltgsyDb4Fbg1eDh4OTMy4wgvCOZ5dwgrWCxIKtgr6Cs4KiLlxuIgorCisjOiBtZW1saW5lLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDc6ICVzIILNVmltgsyDWIOPg2KDdoN0g0CDQ4OLgsWCzYLIgqKC5oKkgsWCtyIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIggrGCzINSg5ODc4OFgVuDXoLFgs2OZ5dwgsWCq4LcgrmC8S5cbiIKKworIzogbWVtbGluZS5jOjg3MAorbXNnaWQgIlRoZSBmaWxlIHdhcyBjcmVhdGVkIG9uICIKK21zZ3N0ciAigrGCzIN0g0CDQ4OLgs2On4LMj+qPioLFjeyC54LqgtyCtYK9ICIKKworIzogbWVtbGluZS5jOjg3NAorbXNnaWQgIiIKKyIsXG4iCisib3IgdGhlIGZpbGUgaGFzIGJlZW4gZGFtYWdlZC4iCittc2dzdHIgIiIKKyIsXG4iCisiguCCtYKtgs2DdINAg0ODi4KqkbmPnYK1gsSCooLcgrcuIgorCisjOiBtZW1saW5lLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHN3YXAgZmlsZSBcIiVzXCIiCittc2dzdHIgIoNYg4+DYoN2g3SDQINDg4sgXCIlc1wiIILwjmeXcJKGIgorCisjOiBtZW1saW5lLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk9yaWdpbmFsIGZpbGUgXCIlc1wiIgorbXNnc3RyICKMtJZ7g3SDQINDg4sgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTIyCittc2dpZCAiRTMwODogV2FybmluZzogT3JpZ2luYWwgZmlsZSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQiCittc2dzdHIgIkUzMDg6IIx4jZA6IIy0lnuDdINAg0ODi4Kqlc+NWIKzguqCxIKigtyCtyIKKworIzogbWVtbGluZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6ICVzIIKpgueDdYONg2KDTiAxIILwk8eNnoLfgtyCuYLxIgorCisjOiBtZW1saW5lLmM6OTc5Cittc2dpZCAiPz8/TUFOWSBMSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz+RvYKtgsyNc4KqjriC7YLqgsSCooLcgrciCisKKyM6IG1lbWxpbmUuYzo5OTUKK21zZ2lkICI/Pz9MSU5FIENPVU5UIFdST05HIgorbXNnc3RyICI/Pz+Nc5CUgqqK1IjhgsGCxIKigtyCtyIKKworIzogbWVtbGluZS5jOjEwMDIKK21zZ2lkICI/Pz9FTVBUWSBCTE9DSyIKK21zZ3N0ciAiPz8/g3WDjYNig06CqovzgsWCtyIKKworIzogbWVtbGluZS5jOjEwMjgKK21zZ2lkICI/Pz9MSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz+Nc4KqjriC7YLqgsSCooLcgrciCisKKyM6IG1lbWxpbmUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTA6IEJsb2NrIDEgSUQgd3JvbmcgKCVzIG5vdCBhIC5zd3AgZmlsZT8pIgorbXNnc3RyICJFMzEwOiCDdYONg2KDTiAxIILMSUSCqorUiOGCwYLEgqKC3IK3KCVzIIKqLnN3cIN0g0CDQ4OLgsWCyIKiPykiCisKKyM6IG1lbWxpbmUuYzoxMDY1Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/g3WDjYNig06CqoKgguiC3IK5gvEiCisKKyM6IG1lbWxpbmUuYzoxMDgxCittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGJlIG1lc3NlZCB1cCIKK21zZ3N0ciAiPz8/IIKxgrGCqYLnPz8/RU5EgtyCxYLMjXOCqpRqifOCs4LqgsSCooLpguaCpILFgrciCisKKyM6IG1lbWxpbmUuYzoxMDk3Cittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGhhdmUgYmVlbiBpbnNlcnRlZC9kZWxldGVkIgorbXNnc3RyICI/Pz8ggrGCsYKpguc/P0VORILcgsWCzI1zgqqRfZP8gqmN7Y+cgrOC6oK9guaCpILFgrciCisKKyM6IG1lbWxpbmUuYzoxMTE3Cittc2dpZCAiPz8/RU5EIgorbXNnc3RyICI/Pz9FTkQiCisKKyM6IG1lbWxpbmUuYzoxMTQzCittc2dpZCAiRTMxMTogUmVjb3ZlcnkgSW50ZXJydXB0ZWQiCittc2dzdHIgIkUzMTE6IIOKg0qDb4OKgqqKhI2egtyC6oLcgrWCvSIKKworIzogbWVtbGluZS5jOjExNDgKK21zZ2lkICIiCisiRTMxMjogRXJyb3JzIGRldGVjdGVkIHdoaWxlIHJlY292ZXJpbmc7IGxvb2sgZm9yIGxpbmVzIHN0YXJ0aW5nIHdpdGggPz8/IgorbXNnc3RyICIiCisiRTMxMjogg4qDSoNvg4qCzI3FkoaCyYNHg4mBW4KqjJ+Pb4KzguqC3IK1gr07ID8/P4LFjm6C3ILpjXOC8I5Rj8aCtYLEgq2CvoKzgqIiCisKKyM6IG1lbWxpbmUuYzoxMTUwCittc2dpZCAiU2VlIFwiOmhlbHAgRTMxMlwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAij9qN14LNIFwiOmhlbHAgRTMxMlwiIILwjlGPxoK1gsSCrYK+grOCoiIKKworIzogbWVtbGluZS5jOjExNTUKK21zZ2lkICJSZWNvdmVyeSBjb21wbGV0ZWQuIFlvdSBzaG91bGQgY2hlY2sgaWYgZXZlcnl0aGluZyBpcyBPSy4iCittc2dzdHIgIoOKg0qDb4OKgqqPSZe5grWC3IK1gr0uIJFTgsSCqpCzgrWCooKpg2CDRoNig06CtYLEgq2CvoKzgqIuIgorCisjOiBtZW1saW5lLmM6MTE1NgorbXNnaWQgIiIKKyJcbiIKKyIoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWVcbiIKK21zZ3N0ciAiIgorIlxuIgorIiiVz41YgvCDYINGg2KDToK3gumCvYLfgsksIIKxgsyDdINAg0ODi4LwlcqCzJa8kU+CxZXbkbaCtYK9j+OCxVxuIgorCisjOiBtZW1saW5lLmM6MTE1NworbXNnaWQgImFuZCBydW4gZGlmZiB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIHRvIGNoZWNrIGZvciBjaGFuZ2VzKVxuIgorbXNnc3RyICKMtJZ7g3SDQINDg4uCxoLMIGRpZmYggvCOwI1zgreC6YLGl8eCooLFgrWC5YKkKVxuIgorCisjOiBtZW1saW5lLmM6MTE1OAorbXNnaWQgIiIKKyJEZWxldGUgdGhlIC5zd3AgZmlsZSBhZnRlcndhcmRzLlxuIgorIlxuIgorbXNnc3RyICIiCisigruC6oKpgucuc3dwg3SDQINDg4uC8I3tj5yCtYLEgq2CvoKzgqJcbiIKKyJcbiIKKworIy4gdXNlIG1zZygpIHRvIHN0YXJ0IHRoZSBzY3JvbGxpbmcgcHJvcGVybHkKKyM6IG1lbWxpbmUuYzoxMjE0Cittc2dpZCAiU3dhcCBmaWxlcyBmb3VuZDoiCittc2dzdHIgIoNYg4+DYoN2g3SDQINDg4uCqpWhkJSMqYLCgqmC6ILcgrWCvToiCisKKyM6IG1lbWxpbmUuYzoxMzkyCittc2dpZCAiICAgSW4gY3VycmVudCBkaXJlY3Rvcnk6XG4iCittc2dzdHIgIiAgIIy7jd2CzINmg0KDjINOg2eDijpcbiIKKworIzogbWVtbGluZS5jOjEzOTQKK21zZ2lkICIgICBVc2luZyBzcGVjaWZpZWQgbmFtZTpcbiIKK21zZ3N0ciAiICAggqCC6Za8kU+C8I5nl3CShjpcbiIKKworIzogbWVtbGluZS5jOjEzOTgKK21zZ2lkICIgICBJbiBkaXJlY3RvcnkgIgorbXNnc3RyICIgICCDZoNCg4yDToNng4ogIgorCisjOiBtZW1saW5lLmM6MTQxNgorbXNnaWQgIiAgICAgIC0tIG5vbmUgLS1cbiIKK21zZ3N0ciAiICAgICAgLS0ggsiCtSAtLVxuIgorCisjOiBtZW1saW5lLmM6MTQ4OAorbXNnaWQgIiAgICAgICAgICBvd25lZCBieTogIgorbXNnc3RyICIgICAgICAgICAgICCPipdMjtI6ICIKKworIzogbWVtbGluZS5jOjE0OTAKK21zZ2lkICIgICBkYXRlZDogIgorbXNnc3RyICIgICCT+pV0OiAiCisKKyM6IG1lbWxpbmUuYzoxNDk0IG1lbWxpbmUuYzozNjg0Cittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICCT+pV0OiAiCisKKyM6IG1lbWxpbmUuYzoxNTEwCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKKworIzogbWVtbGluZS5jOjE1MTQKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgIFtWaW2CzINYg4+DYoN2g3SDQINDg4uCxYLNgsiCooLmgqSCxYK3XSIKKworIzogbWVtbGluZS5jOjE1MTgKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgICCDdINAg0ODi5a8OiAiCisKKyM6IG1lbWxpbmUuYzoxNTI0Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgICBtb2RpZmllZDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgIJXPjViP85HUOiAiCisKKyM6IG1lbWxpbmUuYzoxNTI1Cittc2dpZCAiWUVTIgorbXNnc3RyICKCoILoIgorCisjOiBtZW1saW5lLmM6MTUyNQorbXNnaWQgIm5vIgorbXNnc3RyICKCyIK1IgorCisjOiBtZW1saW5lLmM6MTUyOQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICB1c2VyIG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICCDhoFbg1WWvDogIgorCisjOiBtZW1saW5lLmM6MTUzNgorbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgICCDeoNYg2eWvDogIgorCisjOiBtZW1saW5lLmM6MTUzOAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICCDeoNYg2eWvDogIgorCisjOiBtZW1saW5lLmM6MTU0NAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgg3aDjYNag1hJRDogIgorCisjOiBtZW1saW5lLmM6MTU1MAorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAogtyCvo7AjXOShikiCisKKyM6IG1lbWxpbmUuYzoxNTYyCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbgrGCzFZpbYNvgVuDV4OHg5OCxYLNjmeXcILFgquC3IK5gvFdIgorCisjOiBtZW1saW5lLmM6MTU2NQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSBvbiB0aGlzIGNvbXB1dGVyXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFuCsYLMg1KDk4Nzg4WBW4NegsWCzY5nl3CCxYKrgtyCuYLxXSIKKworIzogbWVtbGluZS5jOjE1NzAKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIHJlYWRdIgorbXNnc3RyICIgICAgICAgICBbk8eNnoLfgtyCuYLxXSIKKworIzogbWVtbGluZS5jOjE1NzQKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIG9wZW5lZF0iCittc2dzdHIgIiAgICAgICAgIFuKSoKvgtyCuYLxXSIKKworIzogbWVtbGluZS5jOjE3NjQKK21zZ2lkICJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMxMzogg1iDj4Nig3aDdINAg0ODi4KqlrOCooLMgsWI246dgsWCq4LcgrmC8SIKKworIzogbWVtbGluZS5jOjE4MTcKK21zZ2lkICJGaWxlIHByZXNlcnZlZCIKK21zZ3N0ciAig3SDQINDg4uCqojbjp2Cs4LqgtyCtyIKKworIzogbWVtbGluZS5jOjE4MTkKK21zZ2lkICJFMzE0OiBQcmVzZXJ2ZSBmYWlsZWQiCittc2dzdHIgIkUzMTQ6IIjbjp2CyY64lHOCtYLcgrWCvSIKKworIzogbWVtbGluZS5jOjE4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNTogbWxfZ2V0OiBpbnZhbGlkIGxudW06ICVsZCIKK21zZ3N0ciAiRTMxNTogbWxfZ2V0OiCWs4z4gshsbnVtgsWCtzogJWxkIgorCisjOiBtZW1saW5lLmM6MTkxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE2OiBtbF9nZXQ6IGNhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzE2OiBtbF9nZXQ6II1zICVsZCCC8ILdgsKCr4LnguqC3IK5gvEiCisKKyM6IG1lbWxpbmUuYzoyMzA2Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAzIgorbXNnc3RyICJFMzE3OiCDfINDg5ODXoN1g42DYoNOgsxJRIKqitSI4YLBgsSCooLcgrcgMyIKKworIzogbWVtbGluZS5jOjIzODYKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCCCzSAwIILFgqCC6YLXgquCxYK3IgorCisjOiBtZW1saW5lLmM6MjQ0OAorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODogjViQVoKzguqCvYN1g42DYoNOgqqRvYK3gqyC6YKpguA/IgorCisjOiBtZW1saW5lLmM6MjYzMAorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgNCIKK21zZ3N0ciAiRTMxNzogg3yDQ4OTg16DdYONg2KDToLMSUSCqorUiOGCwYLEgqKC3IK3IDQiCisKKyM6IG1lbWxpbmUuYzoyNjU3Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAig3WDjYNig04gMSCCzY/BgrOC6oK9PyIKKworIzogbWVtbGluZS5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6II1zICVsZCCCqoLdgsKCqYLogtyCuYLxIgorCisjOiBtZW1saW5lLmM6MzEwMAorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmciCittc2dzdHIgIkUzMTc6IIN8g0ODk4Neg3WDjYNig06CzElEgqqK1IjhgsGCxIKigtyCtyIKKworIzogbWVtbGluZS5jOjMxMTYKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgInBlX2xpbmVfY291bnQggqqDW4ONgsWCtyIKKworIzogbWVtbGluZS5jOjMxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMjogbGluZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlbGQgcGFzdCB0aGUgZW5kIgorbXNnc3RyICJFMzIyOiCNc5TUjYaCqpTNiM2KT4LFgrc6ICVsZCCStIKmgsSCooLcgrciCisKKyM6IG1lbWxpbmUuYzozMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjM6IGxpbmUgY291bnQgd3JvbmcgaW4gYmxvY2sgJWxkIgorbXNnc3RyICJFMzIzOiCDdYONg2KDTiAlbGQggsyNc4NKg0WDk4NngqqK1IjhgsGCxIKigtyCtyIKKworIzogbWVtbGluZS5jOjMxOTgKK21zZ2lkICJTdGFjayBzaXplIGluY3JlYXNlcyIKK21zZ3N0ciAig1iDXoNig06DVINDg1mCqpGdgqaC3IK3IgorCisjOiBtZW1saW5lLmM6MzI0NAorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMiIKK21zZ3N0ciAiRTMxNzogg3yDQ4OTg16DdYONg2KDToLMSUSCqorUiOGCwYLEgqKC3IK3IDIiCisKKyM6IG1lbWxpbmUuYzozNjc0Cittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiCSjYjTIgorCisjOiBtZW1saW5lLmM6MzY3NQorbXNnaWQgIiIKKyJcbiIKKyJGb3VuZCBhIHN3YXAgZmlsZSBieSB0aGUgbmFtZSBcIiIKK21zZ3N0ciAiIgorIlxuIgorIo6fgsyWvJFPgsWDWIOPg2KDdoN0g0CDQ4OLgvCMqYLCgq+C3IK1gr0gXCIiCisKKyM6IG1lbWxpbmUuYzozNjc5Cittc2dpZCAiV2hpbGUgb3BlbmluZyBmaWxlIFwiIgorbXNnc3RyICKOn4LMg3SDQINDg4uC8IpKgqKCxIKigumNxZKGIFwiIgorCisjOiBtZW1saW5lLmM6MzY4OAorbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICAgICCDWIOPg2KDdoN0g0CDQ4OLguaC6ILgkFaCtYKigsWCtyFcbiIKKworIy4gU29tZSBvZiB0aGVzZSBtZXNzYWdlcyBhcmUgbG9uZyB0byBhbGxvdyB0cmFuc2xhdGlvbiB0bworIy4gKiBvdGhlciBsYW5ndWFnZXMuCisjOiBtZW1saW5lLmM6MzY5MgorbXNnaWQgIiIKKyJcbiIKKyIoMSkgQW5vdGhlciBwcm9ncmFtIG1heSBiZSBlZGl0aW5nIHRoZSBzYW1lIGZpbGUuXG4iCisiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIGJlIGNhcmVmdWwgbm90IHRvIGVuZCB1cCB3aXRoIHR3b1xuIgorIiAgICBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGZpbGUgd2hlbiBtYWtpbmcgY2hhbmdlcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigxKSCVyoLMg3aDjYNPg4mDgIKqk6+CtoN0g0CDQ4OLgvCV0o9XgrWCxIKigumCqYLggrWC6oLcgrmC8S5cbiIKKyIgICAggrGCzI/qjYeCyYLNLCCVz41YgvCCtYK9jduCyY3Fj0mTSYLJLCCTr4K2g3SDQINDg4uCzIjZgsiC6VxuIgorIiAgICAygsKCzINDg5ODWINeg5ODWIKqgsWCq4LEgrWC3IKkgrGCxoLJko2I04K1gsSCrYK+grOCoi5cbiIKKworIzogbWVtbGluZS5jOjM2OTMKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgj0mXuYK3gumCqSwgko2I04K1gsiCqoLnkbGCr4LcgrcuXG4iCisKKyM6IG1lbWxpbmUuYzozNjk0Cittc2dpZCAiIgorIlxuIgorIigyKSBBbiBlZGl0IHNlc3Npb24gZm9yIHRoaXMgZmlsZSBjcmFzaGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDIpIIKxgsyDdINAg0ODi4LMldKPV4Nag2KDVoOHg5OCqoNOg4mDYoNWg4WCtYK9LlxuIgorCisjOiBtZW1saW5lLmM6MzY5NQorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIIKxgsyP6o2HgsmCzSBcIjpyZWNvdmVyXCIggqkgXCJ2aW0gLXIgIgorCisjOiBtZW1saW5lLmM6MzY5NworbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byByZWNvdmVyIHRoZSBjaGFuZ2VzIChzZWUgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIILwjmeXcIK1gsSVz41YgvCDioNKg2+BW4K1gtyCtyhcIjpoZWxwIHJlY292ZXJcIiCC8I5Rj8YpLlxuIgorCisjOiBtZW1saW5lLmM6MzY5OAorbXNnaWQgIiAgICBJZiB5b3UgZGlkIHRoaXMgYWxyZWFkeSwgZGVsZXRlIHRoZSBzd2FwIGZpbGUgXCIiCittc2dzdHIgIiAgICCK+YLJgrGC6oLwjXOCyILBgr2CzILIgueCziwgg1iDj4Nig3aDdINAg0ODiyBcIiIKKworIzogbWVtbGluZS5jOjM3MDAKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAggvCPwYK5gs6CsYLMg4GDYoNagVuDV4LwifGU8ILFgquC3IK3LlxuIgorCisjOiBtZW1saW5lLmM6MzcxNCBtZW1saW5lLmM6MzcxOAorbXNnaWQgIlN3YXAgZmlsZSBcIiIKK21zZ3N0ciAig1iDj4Nig3aDdINAg0ODiyBcIiIKKworIzogbWVtbGluZS5jOjM3MTUgbWVtbGluZS5jOjM3MjEKK21zZ2lkICJcIiBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlwiIIKqivmCyYKgguiC3IK3ISIKKworIzogbWVtbGluZS5jOjM3MjQKK21zZ2lkICJWSU0gLSBBVFRFTlRJT04iCittc2dzdHIgIlZJTSAtIJKNiNMiCisKKyM6IG1lbWxpbmUuYzozNzI2Cittc2dpZCAiU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAig1iDj4Nig3aDdINAg0ODi4KqivmCyZG2jd2CtYLcgrchIgorCisjOiBtZW1saW5lLmM6MzczMAorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0XG4iCisiJkFib3J0IgorbXNnc3RyICIiCisik8eNnpDql3CCxYpKgq0oJk8pXG4iCisigsaCyYKpgq2V0o9XgreC6SgmRSlcbiIKKyKVnIqIgrOCuYLpKCZSKWVjb3ZlclxuIgorIo9Jl7mCt4LpKCZRKVxuIgorIpKGjn6Ct4LpKCZBKSIKKworIzogbWVtbGluZS5jOjM3MzIKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZBYm9ydFxuIgorIiZEZWxldGUgaXQiCittc2dzdHIgIiIKKyKTx42ekOqXcILFikqCrSgmTylcbiIKKyKCxoLJgqmCrZXSj1eCt4LpKCZFKVxuIgorIpWcioiCs4K5gukoJlIpZWNvdmVyXG4iCisij0mXuYK3gukoJlEpXG4iCisikoaOfoK3gukoJkEpXG4iCisij8GLjoK3gukoJkQpIgorCisjOiBtZW1saW5lLmM6Mzc4OQorbXNnaWQgIkUzMjY6IFRvbyBtYW55IHN3YXAgZmlsZXMgZm91bmQiCittc2dzdHIgIkUzMjY6IINYg4+DYoN2g3SDQINDg4uCqpG9kJSMqYLCgqmC6ILcgrWCvSIKKworIzogbWVudS5jOjY0Cittc2dpZCAiRTMyNzogUGFydCBvZiBtZW51LWl0ZW0gcGF0aCBpcyBub3Qgc3ViLW1lbnUiCittc2dzdHIgIkUzMjc6IIOBg2qDhYFbg0GDQ4Nlg4CCzINwg1iCzJWUlaqCqoNUg3WDgYNqg4WBW4LFgs2CoILogtyCuYLxIgorCisjOiBtZW51LmM6NjUKK21zZ2lkICJFMzI4OiBNZW51IG9ubHkgZXhpc3RzIGluIGFub3RoZXIgbW9kZSIKK21zZ3N0ciAiRTMyODogg4GDaoOFgVuCzZG8gsyDgoFbg2iCyYK+gq+CoILogtyCtyIKKworIzogbWVudS5jOjY2Cittc2dpZCAiRTMyOTogTm8gbWVudSBvZiB0aGF0IG5hbWUiCittc2dzdHIgIkUzMjk6IIK7gsyWvJFPgsyDgYNqg4WBW4LNgqCC6ILcgrmC8SIKKworIzogbWVudS5jOjUyNQorbXNnaWQgIkUzMzA6IE1lbnUgcGF0aCBtdXN0IG5vdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzA6IIOBg2qDhYFbg3CDWILNg1SDdYOBg2qDhYFbgvCQtoK2gumC14KrgsWCzYKgguiC3IK5gvEiCisKKyM6IG1lbnUuYzo1NjQKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTogg4GDaoOFgVuDb4FbgsmCzZK8kNqDgYNqg4WBW4NBg0ODZYOAgvCSx4nBgsWCq4LcgrmC8SIKKworIzogbWVudS5jOjU3MAorbXNnaWQgIkUzMzI6IFNlcGFyYXRvciBjYW5ub3QgYmUgcGFydCBvZiBhIG1lbnUgcGF0aCIKK21zZ3N0ciAiRTMzMjogi+aQ2ILogs2DgYNqg4WBW4Nwg1iCzIjqlZSCxYLNgqCC6ILcgrmC8SIKKworIy4gTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtZW51LmM6MTA5NworbXNnaWQgIiIKKyJcbiIKKyItLS0gTWVudXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIIOBg2qDhYFbIC0tLSIKKworIzogbWVudS5jOjIwMTkKK21zZ2lkICJUZWFyIG9mZiB0aGlzIG1lbnUiCittc2dzdHIgIoKxgsyDgYNqg4WBW4LwkNiC6I7mgukiCisKKyM6IG1lbnUuYzoyMDg0Cittc2dpZCAiRTMzMzogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIG1lbnUgaXRlbSIKK21zZ3N0ciAiRTMzMzogg4GDaoOFgVuDcINYgs2DgYNqg4WBW4NBg0ODZYOAgvCQtoK2gsiCr4Lqgs6CooKvgtyCuYLxIgorCisjOiBtZW51LmM6MjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzM0OiBNZW51IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUzMzQ6IIOBg2qDhYFbgqqC3YLCgqmC6ILcgrmC8TogJXMiCisKKyM6IG1lbnUuYzoyMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzU6IE1lbnUgbm90IGRlZmluZWQgZm9yICVzIG1vZGUiCittc2dzdHIgIkUzMzU6ICVzIILJgs2DgYNqg4WBW4KqkuiLYIKzguqCxIKigtyCuYLxIgorCisjOiBtZW51LmM6MjIxMQorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogg4GDaoOFgVuDcINYgs2DVIN1g4GDaoOFgVuC8JC2graCyIKvguqCzoKigq+C3IK5gvEiCisKKyM6IG1lbnUuYzoyMjMyCittc2dpZCAiRTMzNzogTWVudSBub3QgZm91bmQgLSBjaGVjayBtZW51IG5hbWVzIgorbXNnc3RyICJFMzM3OiCDgYNqg4WBW4Kqgt2CwoKpguiC3IK5gvEgLSCDgYNqg4WBW5a8gvCKbZRGgrWCxIKtgr6Cs4KiIgorCisjOiBtZXNzYWdlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVjdGVkIHdoaWxlIHByb2Nlc3NpbmcgJXM6IgorbXNnc3RyICIlcyCCzI+Il52ShoLJg0eDiYFbgqqMn49vgrOC6oLcgrWCvToiCisKKyM6IG1lc3NhZ2UuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlNGxkOiIKK21zZ3N0ciAijXMgJTRsZDoiCisKKyM6IG1lc3NhZ2UuYzo2NDcKK21zZ2lkICJbc3RyaW5nIHRvbyBsb25nXSIKK21zZ3N0ciAiW5W2jpqX8YKqkreCt4KsgtyCt10iCisKKyM6IG1lc3NhZ2UuYzo3OTcKK21zZ2lkICJNZXNzYWdlcyBtYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiIKK21zZ3N0ciAik/qWe4zqg4GDYoNagVuDV5Z8lvMvisSPQzogkbqJqiCRvphZIDxrb3JvbkB0a2EuYXR0Lm5lLmpwPiIKKworIzogbWVzc2FnZS5jOjEwMjUKK21zZ2lkICJJbnRlcnJ1cHQ6ICIKK21zZ3N0ciAiioSNnoLdOiAiCisKKyM6IG1lc3NhZ2UuYzoxMDI4Cittc2dpZCAiSGl0IEVOVEVSIHRvIGNvbnRpbnVlIgorbXNnc3RyICKRsYKvgumCyYLNRU5URVKC8ImfgrWCxIKtgr6Cs4KiIgorCisjOiBtZXNzYWdlLmM6MTAzMAorbXNnaWQgIkhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUiCittc2dzdHIgIpGxgq+C6YLJgs1FTlRFUoLwiZ+Ct4Kpg1KDfYOTg2iC8JP8l82CtYLEgq2CvoKzgqIiCisKKyM6IG1lc3NhZ2UuYzoyMzUxCittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0gjHCRsSAtLSIKKworIzogbWVzc2FnZS5jOjIzNTQKK21zZ2lkICIgKFJFVC9CUzogbGluZSwgU1BBQ0UvYjogcGFnZSwgZC91OiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVC9CUzogjXORl4LoLCBTUEFDRS9iOiCDeYFbg1eRl4LoLCBkL3U6IJS8g3mBW4NXkZeC6CwgcTogj0mXuSkiCisKKyM6IG1lc3NhZ2UuYzoyMzU1Cittc2dpZCAiIChSRVQ6IGxpbmUsIFNQQUNFOiBwYWdlLCBkOiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVDogjXORl4LoLCBTUEFDRTogg3mBW4NXkZeC6CwgZDoglLyDeYFbg1eRl4LoLCBxOiCPSZe5KSIKKworIzogbWVzc2FnZS5jOjI5NzYgbWVzc2FnZS5jOjI5OTEKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAijr+W4iIKKworIzogbWVzc2FnZS5jOjI5NzgKK21zZ2lkICIiCisiJlllc1xuIgorIiZObyIKK21zZ3N0ciAiIgorIoLNgqIoJlkpXG4iCisigqKCooKmKCZOKSIKKworIzogbWVzc2FnZS5jOjMwMTEKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIlNhdmUgJkFsbFxuIgorIiZEaXNjYXJkIEFsbFxuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyKCzYKiKCZZKVxuIgorIoKigqKCpigmTilcbiIKKyKRU4LElduRtigmQSlcbiIKKyKRU4LElfqK/CgmRClcbiIKKyKDTIODg5ODWoOLKCZDKSIKKworIzogbWVzc2FnZS5jOjMwNTIKK21zZ2lkICJTYXZlIEZpbGUgZGlhbG9nIgorbXNnc3RyICKDdINAg0ODi5XbkbaDX4NDg0GDjYNPIgorCisjOiBtZXNzYWdlLmM6MzA1NAorbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIoN0g0CDQ4OLk8eNnoNfg0ODQYONg08iCisKKyMuIFRPRE86IG5vbi1HVUkgZmlsZSBzZWxlY3RvciBoZXJlCisjOiBtZXNzYWdlLmM6MzEyNQorbXNnaWQgIkUzMzg6IFNvcnJ5LCBubyBmaWxlIGJyb3dzZXIgaW4gY29uc29sZSBtb2RlIgorbXNnc3RyICJFMzM4OiCDUoOTg1xcgVuDi4OCgVuDaILFgs2DdINAg0ODi4N1g4mDRYNVgvCOZ4KmgtyCuYLxLCCCsoLfgvGCyIKzgqIiCisKKyM6IG1pc2MxLmM6Mjc3MworbXNnaWQgIlcxMDogV2FybmluZzogQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlIgorbXNnc3RyICJXMTA6IIx4jZA6IJPHjZ6Q6pdwg3SDQINDg4uC8JXPjViCtYLcgrciCisKKyM6IG1pc2MxLmM6MzAyMQorbXNnaWQgIjEgbW9yZSBsaW5lIgorbXNnc3RyICIxII1zIJLHicGCtYLcgrWCvSIKKworIzogbWlzYzEuYzozMDIzCittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgIjEgjXMgje2PnIK1gtyCtYK9IgorCisjOiBtaXNjMS5jOjMwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIG1vcmUgbGluZXMiCittc2dzdHIgIiVsZCCNcyCSx4nBgrWC3IK1gr0iCisKKyM6IG1pc2MxLmM6MzAzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgZmV3ZXIgbGluZXMiCittc2dzdHIgIiVsZCCNcyCN7Y+cgrWC3IK1gr0iCisKKyM6IG1pc2MxLmM6MzAzMworbXNnaWQgIiAoSW50ZXJydXB0ZWQpIgorbXNnc3RyICIgKIqEjZ6C3ILqgtyCtYK9KSIKKworIzogbWlzYzEuYzo3NTgyCittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTogg3SDQINDg4uC8JXbkbaShi4uLlxuIgorCisjLiBjbG9zZSBhbGwgbWVtZmlsZXMsIHdpdGhvdXQgZGVsZXRpbmcKKyM6IG1pc2MxLmM6NzU5MgorbXNnaWQgIlZpbTogRmluaXNoZWQuXG4iCittc2dzdHIgIlZpbTogj0mXuYK1gtyCtYK9LlxuIgorCisjOiBtaXNjMi5jOjY5NSBtaXNjMi5jOjcxMQorbXNnaWQgIkVSUk9SOiAiCittc2dzdHIgIoNHg4mBWzogIgorCisjOiBtaXNjMi5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiW2J5dGVzXSB0b3RhbCBhbGxvYy1mcmVlZCAlbHUtJWx1LCBpbiB1c2UgJWx1LCBwZWFrIHVzZSAlbHVcbiIKK21zZ3N0ciAiIgorIlxuIgorIluDgYOCg4oog2+DQ4NnKV0gkY2KhJOWLYnwlfqXyiAlbHUtJWx1LCCOZ5dwl8ogJWx1LCCDc4Fbg06OniAlbHVcbiIKKworIzogbWlzYzIuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW4zEj29dIJGNIHJlL21hbGxvYygpIInxkJQgJWx1LCCRjSBmcmVlKCkgifGQlCAlbHVcbiIKKyJcbiIKKworIzogbWlzYzIuYzo3NzIKK21zZ2lkICJFMzQwOiBMaW5lIGlzIGJlY29taW5nIHRvbyBsb25nIgorbXNnc3RyICJFMzQwOiCNc4KqkreCrYLIguiCt4KsgtyCtYK9IgorCisjOiBtaXNjMi5jOjgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQxOiBJbnRlcm5hbCBlcnJvcjogbGFsbG9jKCVsZCwgKSIKK21zZ3N0ciAiRTM0MTogk+CVlINHg4mBWzogbGFsbG9jKCVsZCwpIgorCisjOiBtaXNjMi5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQyOiBPdXQgb2YgbWVtb3J5ISAgKGFsbG9jYXRpbmcgJWx1IGJ5dGVzKSIKK21zZ3N0ciAiRTM0Mjogg4GDgoOKgqqRq4LogtyCuYLxISAgKCVsdSCDb4NDg2eC8IqEk5aXdouBKSIKKworIzogbWlzYzIuYzoyNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbGxpbmcgc2hlbGwgdG8gZXhlY3V0ZTogXCIlc1wiIgorbXNnc3RyICKOwI1zgsyCvYLfgsmDVoNGg4uC8IzEj2+CtZKGOiBcIiVzXCIiCisKKyM6IG1pc2MyLmM6MjgxNQorbXNnaWQgIkU1NDU6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1NDU6IINSg42Dk4KqgqCC6ILcgrmC8SIKKworIzogbWlzYzIuYzoyODE3IG1pc2MyLmM6Mjg0NAorbXNnaWQgIkU1NDY6IElsbGVnYWwgbW9kZSIKK21zZ3N0ciAiRTU0NjoglXOQs4LIg4KBW4NogsWCtyIKKworIzogbWlzYzIuYzoyODgzCittc2dpZCAiRTU0NzogSWxsZWdhbCBtb3VzZXNoYXBlIgorbXNnc3RyICJFNTQ3OiCVc5CzgsggJ21vdXNlc2hhcGUnIILFgrciCisKKyM6IG1pc2MyLmM6MjkyMworbXNnaWQgIkU1NDg6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTQ4OiCQlJJsgqqVS5d2gsWCtyIKKworIzogbWlzYzIuYzoyOTI4Cittc2dpZCAiRTU0OTogSWxsZWdhbCBwZXJjZW50YWdlIgorbXNnc3RyICJFNTQ5OiCVc5CzgsiDcIFbg1qDk4NlgVuDV4LFgrciCisKKyM6IG1pc2MyLmM6MzIzOAorbXNnaWQgIkVudGVyIGVuY3J5cHRpb24ga2V5OiAiCittc2dzdHIgIojDjYaJu5dwgsyDTIFbgvCT/JfNgrWCxIKtgr6Cs4KiOiAiCisKKyM6IG1pc2MyLmM6MzIzOQorbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIoLggqSI6pN4k6+CtoNMgVuC8JP8l82CtYLEgq2CvoKzgqI6ICIKKworIzogbWlzYzIuYzozMjQ5Cittc2dpZCAiS2V5cyBkb24ndCBtYXRjaCEiCittc2dzdHIgIoNMgVuCqojqknaCtYLcgrmC8SIKKworIzogbWlzYzIuYzozNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICIiCisiRTM0MzoglrOM+ILIg3CDWILFgrc6ICcqKluQlJJsXScggs1wYXRogsyNxYzjgqkgJyVzJyAiCisigqqRsYKigsSCyIKigsaCooKvgtyCuYLxLiIKKworIzogbWlzYzIuYzo1MDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IGNkcGF0aILJgs0gXCIlc1wiIILGgqKCpIN0g0CDQ4OLgqqCoILogtyCuYLxIgorCisjOiBtaXNjMi5jOjUwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NTogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFMzQ1OiBwYXRogsmCzSBcIiVzXCIggsaCooKkg3SDQINDg4uCqoKgguiC3IK5gvEiCisKKyM6IG1pc2MyLmM6NTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ2OiBObyBtb3JlIGRpcmVjdG9yeSBcIiVzXCIgZm91bmQgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ2OiBjZHBhdGiCyYLNgrGC6ojIj+MgXCIlc1wiIILGgqKCpIN0g0CDQ4OLgqqCoILogtyCuYLxIgorCisjOiBtaXNjMi5jOjUwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiCDcINYgsmCzYKxguqIyI/jIFwiJXNcIiCCxoKigqSDdINAg0ODi4KqgqCC6ILcgrmC8SIKKworIzogbWlzYzIuYzo1MzIzCittc2dpZCAiRTU1MDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU1MDogg1KDjYOTgqqCoILogtyCuYLxIgorCisjOiBtaXNjMi5jOjUzMzUKK21zZ2lkICJFNTUxOiBJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAiRTU1MToglXOQs4LIjVxclbaXdpFmgsWCtyIKKworIzogbWlzYzIuYzo1MzQzCittc2dpZCAiRTU1MjogZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgIkU1NTI6IJCUkmyCqpVLl3aCxYK3IgorCisjLiBHZXQgaGVyZSB3aGVuIHRoZSBzZXJ2ZXIgY2FuJ3QgYmUgZm91bmQuCisjOiBuZXRiZWFucy5jOjM5NgorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zICMyIgorbXNnc3RyICJOZXRiZWFucyAjMiCCyZDakbGCxYKrgtyCuYLxIgorCisjOiBuZXRiZWFucy5jOjQwNAorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zIgorbXNnc3RyICJOZXRiZWFucyCCyZDakbGCxYKrgtyCuYLxIgorCisjOiBuZXRiZWFucy5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY4OiBXcm9uZyBhY2Nlc3MgbW9kZSBmb3IgTmV0QmVhbnMgY29ubmVjdGlvbiBpbmZvIGZpbGU6IFwiJXNcIiIKK21zZ3N0ciAiIgorIkU2Njg6IE5ldEJlYW5zgsyQ2pGxj+6V8YN0g0CDQ4OLgsyDQYNOg1qDWIOCgVuDaILJluKR6IKqgqCC6ILcgrc6IFwiJXNcIiIKKworIzogbmV0YmVhbnMuYzo3NDkKK21zZ2lkICJyZWFkIGZyb20gTmV0YmVhbnMgc29ja2V0IgorbXNnc3RyICJOZXRiZWFucyCCzINcXINQg2KDZ4Lwk8eNnoLdIgorCisjOiBuZXRiZWFucy5jOjE2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY1ODogTmV0QmVhbnMgY29ubmVjdGlvbiBsb3N0IGZvciBidWZmZXIgJWxkIgorbXNnc3RyICJFNjU4OiCDb4Nig3SDQCAlbGQggswgTmV0QmVhbnMgkNqRsYKqjriC7YLqgtyCtYK9IgorCisjOiBub3JtYWwuYzoyOTgwCittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAijHiNkDogjmeXcIK1gsSCooLpkluWloLNg26DQ4OJg0ODZ4LFgquC3IK5gvEiCisKKyM6IG5vcm1hbC5jOjMyNzYKK21zZ2lkICJFMzQ4OiBObyBzdHJpbmcgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ4OiCDSoFbg1xcg4uCzIjKknWCyYLNlbaOmpfxgqqCoILogtyCuYLxIgorCisjOiBub3JtYWwuYzozMjc4Cittc2dpZCAiRTM0OTogTm8gaWRlbnRpZmllciB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDk6IINKgVuDXFyDi4LMiMqSdYLJgs2Or5XKjnGCqoKgguiC3IK5gvEiCisKKyM6IG5vcm1hbC5jOjQ1MTkKK21zZ2lkICJFMzUyOiBDYW5ub3QgZXJhc2UgZm9sZHMgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MjogjLuN3YLMICdmb2xkbWV0aG9kJyCCxYLNkNyP9ILdgvCPwYuOgsWCq4LcgrmC8SIKKworIzogbm9ybWFsLmM6NjcwOAorbXNnaWQgIkU2NjQ6IGNoYW5nZWxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkU2NjQ6IJXPjViDioNYg2eCqovzgsWCtyIKKworIzogbm9ybWFsLmM6NjcxMAorbXNnaWQgIkU2NjI6IEF0IHN0YXJ0IG9mIGNoYW5nZWxpc3QiCittc2dzdHIgIkU2NjI6IJXPjViDioNYg2eCzJDmk6oiCisKKyM6IG5vcm1hbC5jOjY3MTIKK21zZ2lkICJFNjYzOiBBdCBlbmQgb2YgY2hhbmdlbGlzdCIKK21zZ3N0ciAiRTY2Mzoglc+NWIOKg1iDZ4LMlpaU9iIKKworIzogbm9ybWFsLmM6Nzk3MworbXNnaWQgIlR5cGUgIDpxdWl0PEVudGVyPiAgdG8gZXhpdCBWaW0iCittc2dzdHIgIlZpbYLwj0mXuYK3gumCyYLNIDpxdWl0PEVudGVyPiCCxpP8l82CtYLEgq2CvoKzgqIiCisKKyM6IG9wcy5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAxIHRpbWUiCittc2dzdHIgIjEgjXOCqiAlcyCCxSAxIInxj4iXnYKzguqC3IK1gr0iCisKKyM6IG9wcy5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiMSCNc4KqICVzIILFICVkIInxj4iXnYKzguqC3IK1gr0iCisKKyM6IG9wcy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAxIHRpbWUiCittc2dzdHIgIiVsZCCNc4KqICVzIILFIDEgifGPiJedgrOC6oLcgrWCvSIKKworIzogb3BzLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIlbGQgjXOCqiAlcyCCxSAlZCCJ8Y+Il52Cs4LqgtyCtYK9IgorCisjOiBvcHMuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHRvIGluZGVudC4uLiAiCittc2dzdHIgIiVsZCCNc4Kqg0ODk4Nmg5ODZ4KzguqC3IK3Li4uICIKKworIzogb3BzLmM6NzEyCittc2dpZCAiMSBsaW5lIGluZGVudGVkICIKK21zZ3N0ciAiMSCNc4Lwg0ODk4Nmg5ODZ4K1gtyCtYK9IgorCisjOiBvcHMuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAiJWxkII1zgvCDQ4OTg2aDk4NngrWC3IK1gr0iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNjc1Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgIoOEg5ODToLFgquC3IK5gvE7IILGgsmCqYKtj8GLjiIKKworIzogb3BzLmM6MjE4NQorbXNnaWQgIjEgbGluZSBjaGFuZ2VkIgorbXNnc3RyICIxII1zgqqVz41YgrOC6oLcgrWCvSIKKworIzogb3BzLmM6MjE4NworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgY2hhbmdlZCIKK21zZ3N0ciAiJWxkII1zgqqVz41YgrOC6oLcgrWCvSIKKworIzogb3BzLmM6MjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmcmVlaW5nICVsZCBsaW5lcyIKK21zZ3N0ciAiJWxkII1zgvCKSpX6koYiCisKKyM6IG9wcy5jOjI4NTIKK21zZ2lkICIxIGxpbmUgeWFua2VkIgorbXNnc3RyICIxII1zgqqDhIOTg06Cs4LqgtyCtYK9IgorCisjOiBvcHMuYzoyODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgIiVsZCCNc4Kqg4SDk4NOgrOC6oLcgrWCvSIKKworIzogb3BzLmM6MzEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiCDjINXg1iDXiAlcyCCyYLNib2C4IKgguiC3IK5gvEiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogb3BzLmM6MzY5MAorbXNnaWQgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSCDjINXg1iDXiAtLS0iCisKKyM6IG9wcy5jOjQ5OTcKK21zZ2lkICJJbGxlZ2FsIHJlZ2lzdGVyIG5hbWUiCittc2dzdHIgIpVzkLOCyIOMg1eDWINelrwiCisKKyM6IG9wcy5jOjUwODUKK21zZ2lkICIiCisiXG4iCisiIyBSZWdpc3RlcnM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIIOMg1eDWINeOlxuIgorCisjOiBvcHMuYzo1MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzQ6IFVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIKK21zZ3N0ciAiRTU3NDoglqKSbYLMg4yDV4NYg16MXiAlZCCCxYK3IgorCisjOiBvcHMuYzo1NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTQ6IEludmFsaWQgcmVnaXN0ZXIgbmFtZTogJyVzJyIKK21zZ3N0ciAiRTM1NDoglrOM+ILIg4yDV4NYg16WvDogJyVzJyIKKworIzogb3BzLmM6NTk4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgQ29sczsgIgorbXNnc3RyICIlbGQgl/E7ICIKKworIzogb3BzLmM6NTk4NworIywgYy1mb3JtYXQKK21zZ2lkICJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiCittc2dzdHIgIpFJkfAgJXMlbGQgLyAlbGQgjXM7ICVsZCAvICVsZCCSUIzqOyAlbGQgLyAlbGQglbaOmiIKKworIzogb3BzLmM6NjAwMworIywgYy1mb3JtYXQKK21zZ2lkICJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiCittc2dzdHIgIpfxICVzIC8gJXM7II1zICVsZCBvZiAlbGQ7IJJQjOogJWxkIC8gJWxkOyCVto6aICVsZCAvICVsZCIKKworIzogb3BzLmM6NjAxNAorIywgYy1mb3JtYXQKK21zZ2lkICIoKyVsZCBmb3IgQk9NKSIKK21zZ3N0ciAiKCslbGQgZm9yIEJPTSkiCisKKyM6IG9wdGlvbi5jOjE2NDMKK21zZ2lkICIlPCVmJWglbSU9UGFnZSAlTiIKK21zZ3N0ciAiJTwlZiVoJW0lPSVOIIN5gVuDVyIKKworIzogb3B0aW9uLmM6MjA5MgorbXNnaWQgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIKK21zZ3N0ciAiVmltIILwjmeCwYLEgq2C6oLEgqCC6IKqgsaCpCIKKworIzogb3B0aW9uLmM6MzQxOSBvcHRpb24uYzozNTM1Cittc2dpZCAiRTUxODogVW5rbm93biBvcHRpb24iCittc2dzdHIgIkU1MTg6IJaikm2CzINJg3aDVoOHg5OCxYK3IgorCisjOiBvcHRpb24uYzozNDMyCittc2dpZCAiRTUxOTogT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkU1MTk6IINJg3aDVoOHg5OCzYNUg3yBW4NngrOC6oLEgqKC3IK5gvEiCisKKyM6IG9wdGlvbi5jOjM0NTcKK21zZ2lkICJFNTIwOiBOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIgorbXNnc3RyICJFNTIwOiBtb2RlbGluZSCCxYLNi5aJwoKzguqC3IK5gvEiCisKKyM6IG9wdGlvbi5jOjM1MjIKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0TGFzdCBzZXQgZnJvbSAiCisKKyM6IG9wdGlvbi5jOjM2NjEKK21zZ2lkICJFNTIxOiBOdW1iZXIgcmVxdWlyZWQgYWZ0ZXIgPSIKK21zZ3N0ciAiRTUyMTogPSCCzIzjgsmCzZCUjpqCqpVLl3aCxYK3IgorCisjOiBvcHRpb24uYzozOTg5IG9wdGlvbi5jOjQ2MTkKK21zZ2lkICJFNTIyOiBOb3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTUyMjogdGVybWNhcCCT4ILJgt2CwoKpguiC3IK5gvEiCisKKyM6IG9wdGlvbi5jOjQwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOTogSWxsZWdhbCBjaGFyYWN0ZXIgPCVzPiIKK21zZ3N0ciAiRTUzOToglXOQs4LIlbaOmoLFgrcgPCVzPiIKKworIzogb3B0aW9uLmM6NDYxMQorbXNnaWQgIkU1Mjk6IENhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiRTUyOTogJ3Rlcm0nIILJgs2L85W2jpqX8YLwkN2S6ILFgquC3IK5gvEiCisKKyM6IG9wdGlvbi5jOjQ2MTQKK21zZ2lkICJFNTMwOiBDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICJFNTMwOiBHVUmCxYLNICd0ZXJtJyCC8JXPjViCxYKrgtyCuYLxIgorCisjOiBvcHRpb24uYzo0NjE2Cittc2dpZCAiRTUzMTogVXNlIFwiOmd1aVwiIHRvIHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkU1MzE6IEdVSYLwg1iDXoFbg2eCt4LpgsmCzSBcIjpndWlcIiCC8I5nl3CCtYLEgq2CvoKzgqIiCisKKyM6IG9wdGlvbi5jOjQ2NDUKK21zZ2lkICJFNTg5OiAnYmFja3VwZXh0JyBhbmQgJ3BhdGNobW9kZScgYXJlIGVxdWFsIgorbXNnc3RyICJFNTg5OiAnYmFja3VwZXh0JyCCxiAncGF0Y2htb2RlJyCCqpOvgraCxYK3IgorCisjOiBvcHRpb24uYzo0ODYwCittc2dpZCAiRTYxNzogQ2Fubm90IGJlIGNoYW5nZWQgaW4gdGhlIEdUSysgMiBHVUkiCittc2dzdHIgIkU2MTc6IEdUSysyIEdVSYLFgs2Vz41YgsWCq4LcgrmC8SIKKworIzogb3B0aW9uLmM6NTAxNgorbXNnaWQgIkU1MjQ6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1MjQ6IINSg42Dk4KqgqCC6ILcgrmC8SIKKworIzogb3B0aW9uLmM6NTAxOAorbXNnaWQgIkU1MjU6IFplcm8gbGVuZ3RoIHN0cmluZyIKK21zZ3N0ciAiRTUyNToglbaOmpfxgsySt4KzgqqDW4ONgsWCtyIKKworIzogb3B0aW9uLmM6NTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTI2OiBNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICJFNTI2OiA8JXM+IILMjOOCyZCUjpqCqoKgguiC3IK5gvEiCisKKyM6IG9wdGlvbi5jOjUxMDAKK21zZ2lkICJFNTI3OiBNaXNzaW5nIGNvbW1hIgorbXNnc3RyICJFNTI3OiCDSoOTg32CqoKgguiC3IK5gvEiCisKKyM6IG9wdGlvbi5jOjUxMDcKK21zZ2lkICJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJFNTI4OiAnIILMkmyC8I53kuiCtYLIgq+C6oLOgsiC6ILcgrmC8SIKKworIzogb3B0aW9uLmM6NTE0OAorbXNnaWQgIkU1OTU6IGNvbnRhaW5zIHVucHJpbnRhYmxlIG9yIHdpZGUgY2hhcmFjdGVyIgorbXNnc3RyICJFNTk1OiCVXFyOpoLFgquCyIKilbaOmoKpg4+DQ4NolbaOmoLwityC8YLFgqKC3IK3IgorCisjOiBvcHRpb24uYzo1MTk3Cittc2dpZCAiRTU5NjogSW52YWxpZCBmb250KHMpIgorbXNnc3RyICJFNTk2OiCWs4z4gsiDdINIg5ODZ4LFgrciCisKKyM6IG9wdGlvbi5jOjUyMDUKK21zZ2lkICJFNTk3OiBjYW4ndCBzZWxlY3QgZm9udHNldCIKK21zZ3N0ciAiRTU5Nzogg3SDSIOTg2eDWoNig2eC8JFJkfCCxYKrgtyCuYLxIgorCisjOiBvcHRpb24uYzo1MjA3Cittc2dpZCAiRTU5ODogSW52YWxpZCBmb250c2V0IgorbXNnc3RyICJFNTk4OiCWs4z4gsiDdINIg5ODZ4Nag2KDZ4LFgrciCisKKyM6IG9wdGlvbi5jOjUyMTQKK21zZ2lkICJFNTMzOiBjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICJFNTMzOiCDj4NDg2iDdINIg5ODZ4LwkUmR8ILFgquC3IK5gvEiCisKKyM6IG9wdGlvbi5jOjUyMTYKK21zZ2lkICJFNTM0OiBJbnZhbGlkIHdpZGUgZm9udCIKK21zZ3N0ciAiRTUzNDoglrOM+ILIg4+DQ4Nog3SDSIOTg2eCxYK3IgorCisjOiBvcHRpb24uYzo1NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIDwlYz4iCittc2dzdHIgIkU1MzU6IDwlYz4ggsyM44LJlXOQs4LIlbaOmoKqgqCC6ILcgrciCisKKyM6IG9wdGlvbi5jOjU1OTcKK21zZ2lkICJFNTM2OiBjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAiRTUzNjogg0qDk4N9gqqVS5d2gsWCtyIKKworIzogb3B0aW9uLmM6NTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJFNTM3OiAnY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIgorbXNnc3RyICJFNTM3OiAnY29tbWVudHN0cmluZycggs2L84LFgqCC6YKpICVzIILwityC3pVLl3aCqoKgguiC3IK3IgorCisjOiBvcHRpb24uYzo1Njc5Cittc2dpZCAiRTUzODogTm8gbW91c2Ugc3VwcG9ydCIKK21zZ3N0ciAiRTUzODogg32DRYNYgs2DVIN8gVuDZ4KzguqC3IK5gvEiCisKKyM6IG9wdGlvbi5jOjU5NDcKK21zZ2lkICJFNTQwOiBVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJFNTQwOiCOroKqj0mXuYK1gsSCooLcgrmC8SIKKworIzogb3B0aW9uLmM6NTk1MQorbXNnaWQgIkU1NDE6IHRvbyBtYW55IGl0ZW1zIgorbXNnc3RyICJFNTQxOiCXdpFmgqqRvYK3gqyC3IK3IgorCisjOiBvcHRpb24uYzo1OTUzCittc2dpZCAiRTU0MjogdW5iYWxhbmNlZCBncm91cHMiCittc2dzdHIgIkU1NDI6IINPg4uBW4N2gqqS3o2HgqKC3IK5gvEiCisKKyM6IG9wdGlvbi5jOjYxOTMKK21zZ2lkICJFNTkwOiBBIHByZXZpZXcgd2luZG93IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFNTkwOiCDdoOMg3KDhYFbg0WDQoOTg2iDRYKqivmCyZG2jd2CtYLcgrciCisKKyM6IG9wdGlvbi5jOjY0NTAKK21zZ2lkICJXMTc6IEFyYWJpYyByZXF1aXJlcyBVVEYtOCwgZG8gJzpzZXQgZW5jb2Rpbmc9dXRmLTgnIgorbXNnc3RyICIiCisiVzE3OiCDQYOJg3KDQZW2jpqCyYLNVVRGLTiCqpVLl3aCyILMgsUsICc6c2V0IGVuY29kaW5nPXV0Zi04JyCCtYLEgq2CvoKzgqIiCisKKyM6IG9wdGlvbi5jOjY3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU5MzogTmVlZCBhdCBsZWFzdCAlZCBsaW5lcyIKK21zZ3N0ciAiRTU5MzogjcWS4SAlZCCCzI1zkJSCqpVLl3aCxYK3IgorCisjOiBvcHRpb24uYzo2Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTQ6IE5lZWQgYXQgbGVhc3QgJWQgY29sdW1ucyIKK21zZ3N0ciAiRTU5NDogjcWS4SAlZCCCzINKg4mDgJWdgqqVS5d2gsWCtyIKKworIzogb3B0aW9uLmM6NzA5MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzU1OiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUzNTU6IJaikm2CzINJg3aDVoOHg5OCxYK3OiAlcyIKKworIzogb3B0aW9uLmM6NzIxMworbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIJJblpaDUoFbg2ggLS0tIgorCisjOiBvcHRpb24uYzo3MjE1Cittc2dpZCAiIgorIlxuIgorIi0tLSBHbG9iYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gg0+DjYFbg2+Di4NJg3aDVoOHg5OSbCAtLS0iCisKKyM6IG9wdGlvbi5jOjcyMTcKK21zZ2lkICIiCisiXG4iCisiLS0tIExvY2FsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIIONgVuDSoOLg0mDdoNWg4eDk5JsIC0tLSIKKworIzogb3B0aW9uLmM6NzIxOQorbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gg0mDdoNWg4eDkyAtLS0iCisKKyM6IG9wdGlvbi5jOjc5MjUKK21zZ2lkICJFMzU2OiBnZXRfdmFycCBFUlJPUiIKK21zZ3N0ciAiRTM1NjogZ2V0X3ZhcnAgg0eDiYFbIgorCisjOiBvcHRpb24uYzo4ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTc6ICdsYW5nbWFwJzogTWF0Y2hpbmcgY2hhcmFjdGVyIG1pc3NpbmcgZm9yICVzIgorbXNnc3RyICJFMzU3OiAnbGFuZ21hcCc6ICVzIILJkc6JnoK3gumVto6agqqCoILogtyCuYLxIgorCisjOiBvcHRpb24uYzo4OTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTg6ICdsYW5nbWFwJzogRXh0cmEgY2hhcmFjdGVycyBhZnRlciBzZW1pY29sb246ICVzIgorbXNnc3RyICJFMzU4OiAnbGFuZ21hcCc6IINag36DUoONg5OCzIzjgsmXXZWqgsiVto6agqqCoILogtyCtzogJXMiCisKKyM6IG9zX2FtaWdhLmM6MjgwCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICKKSoKvgtyCuYLxICIKKworIzogb3NfYW1pZ2EuYzozMTQKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06IINFg0KDk4Nog0WC8IpKgq+C3IK5gvEhXG4iCisKKyM6IG9zX2FtaWdhLmM6MzM4Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAiQW1pZ2Fkb3OCzINvgVuDV4OHg5MgMi4wNIKpgruC6ojIjX6CqpVLl3aCxYK3XG4iCisKKyM6IG9zX2FtaWdhLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgJXMgdmVyc2lvbiAlbGRcbiIKK21zZ3N0ciAiJXMggsyDb4Fbg1eDh4OTICVsZCCCqpVLl3aCxYK3XG4iCisKKyM6IG9zX2FtaWdhLmM6NDE2Cittc2dpZCAiQ2Fubm90IG9wZW4gTklMOlxuIgorbXNnc3RyICJOSUyC8IpKgq+C3IK5gvE6XG4iCisKKyM6IG9zX2FtaWdhLmM6NDI3Cittc2dpZCAiQ2Fubm90IGNyZWF0ZSAiCittc2dzdHIgIo3skKyCxYKrgtyCuYLxICIKKworIzogb3NfYW1pZ2EuYzo5MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltIGV4aXRpbmcgd2l0aCAlZFxuIgorbXNnc3RyICJWaW2CzSAlZCCCxY9Jl7mCtYLcgrdcbiIKKworIzogb3NfYW1pZ2EuYzo5MzcKK21zZ2lkICJjYW5ub3QgY2hhbmdlIGNvbnNvbGUgbW9kZSA/IVxuIgorbXNnc3RyICKDUoOTg1xcgVuDi4OCgVuDaILwlc+NWILFgquC3IK5gvE/IVxuIgorCisjOiBvc19hbWlnYS5jOjEwMDMKK21zZ2lkICJtY2hfZ2V0X3NoZWxsc2l6ZTogbm90IGEgY29uc29sZT8/XG4iCittc2dzdHIgIm1jaF9nZXRfc2hlbGxzaXplOiCDUoOTg1xcgVuDi4LFgs2CyIKiPz9cbiIKKworIy4gaWYgVmltIG9wZW5lZCBhIHdpbmRvdzogRXhlY3V0aW5nIGEgc2hlbGwgbWF5IGNhdXNlIGNyYXNoZXMKKyM6IG9zX2FtaWdhLmM6MTE1MgorbXNnaWQgIkUzNjA6IENhbm5vdCBleGVjdXRlIHNoZWxsIHdpdGggLWYgb3B0aW9uIgorbXNnc3RyICJFMzYwOiAtZiCDSYN2g1aDh4OTgsWDVoNGg4uC8I7AjXOCxYKrgtyCuYLxIgorCisjOiBvc19hbWlnYS5jOjExOTMgb3NfYW1pZ2EuYzoxMjgzCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICKOwI1zgsWCq4LcgrmC8SAiCisKKyM6IG9zX2FtaWdhLmM6MTE5NiBvc19hbWlnYS5jOjEyOTMKK21zZ2lkICJzaGVsbCAiCittc2dzdHIgIoNWg0aDiyAiCisKKyM6IG9zX2FtaWdhLmM6MTIxNiBvc19hbWlnYS5jOjEzMTgKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiIJbfguiC3IK1gr1cbiIKKworIzogb3NfYW1pZ2EuYzoxNDU5Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSCCqo+sgrOCt4KsgtyCty4iCisKKyM6IG9zX2FtaWdhLmM6MTQ2MworbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAik/yPb5fNg0eDiYFbIgorCisjOiBvc19tc3dpbi5jOjUzOQorbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICIuLi4oj8iXqikiCisKKyM6IG9zX21zd2luLmM6NjQxCittc2dpZCAiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIidjb2x1bW5zJyCCqjgwgsWCzYLIgqKCvYLfLCCKT5WUg1KDfYOTg2iC8I7AjXOCxYKrgtyCuYLxIgorCisjOiBvc19tc3dpbi5jOjE5NzMKK21zZ2lkICJFMjM3OiBQcmludGVyIHNlbGVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkUyMzc6IIN2g4qDk4NegsyRSZHwgsmOuJRzgrWC3IK1gr0iCisKKyM6IG9zX21zd2luLmM6MjAxMworIywgYy1mb3JtYXQKK21zZ2lkICJ0byAlcyBvbiAlcyIKK21zZ3N0ciAiJXMggtYgKCVzII/jgswpIgorCisjOiBvc19tc3dpbi5jOjIwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMzogVW5rbm93biBwcmludGVyIGZvbnQ6ICVzIgorbXNnc3RyICJFNjEzOiCWopJtgsyDdoOKg5ODXoNJg3aDVoOHg5OCxYK3OiAlcyIKKworIzogb3NfbXN3aW4uYzoyMDc3IG9zX21zd2luLmM6MjA4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM4OiBQcmludCBlcnJvcjogJXMiCittc2dzdHIgIkUyMzg6IIjzjfyDR4OJgVs6ICVzIgorCisjOiBvc19tc3dpbi5jOjIwODgKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICKVc5a+IgorCisjOiBvc19tc3dpbi5jOjIxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAiiPON/IK1gsSCooLcgrc6ICclcyciCisKKyM6IG9zX21zd2luLmM6MzIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDoglbaOmoNag2KDZ5a8IFwiJXNcIiCCzZVzkLOCxYK3ICiDdINIg5ODZ5a8IFwiJXNcIikiCisKKyM6IG9zX21zd2luLmM6MzIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ1OiBJbGxlZ2FsIGNoYXIgJyVjJyBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ1OiAnJWMnIILNlXOQs4LIlbaOmoLFgrcgKIN0g0iDk4NnlrwgXCIlc1wiKSIKKworIzogb3NfcmlzY29zLmM6MTI1OQorbXNnaWQgIkUzNjY6IEludmFsaWQgJ29zZmlsZXR5cGUnIG9wdGlvbiAtIHVzaW5nIFRleHQiCittc2dzdHIgIkUzNjY6IJazjPiCyCAnb3NmaWxldHlwZScgg0mDdoNWg4eDkyAtIFwiVGV4dFwiIILwjmeCooLcgrciCisKKyM6IG9zX3VuaXguYzo5MjcKK21zZ2lkICJWaW06IERvdWJsZSBzaWduYWwsIGV4aXRpbmdcbiIKK21zZ3N0ciAiVmltOiAyj2SCzINWg0+DaYOLgsyCvYLfLCCPSZe5grWC3IK3XG4iCisKKyM6IG9zX3VuaXguYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IJJ2lr2TSYNWg0+DaYOLICVzIILwjJ+SbYK1gtyCtYK9XG4iCisKKyM6IG9zX3VuaXguYzo5MzYKK21zZ2lkICJWaW06IENhdWdodCBkZWFkbHkgc2lnbmFsXG4iCittc2dzdHIgIlZpbTogknaWvZNJg1aDT4Npg4uC8Iyfkm2CtYLcgrWCvVxuIgorCisjOiBvc191bml4LmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAiWINUgVuDb4LWgsyQ2pGxgskgJWxkIIN+g4qVYoKpgqmC6ILcgrWCvSIKKworIzogb3NfdW5peC5jOjEyMjYKK21zZ2lkICIiCisiXG4iCisiVmltOiBHb3QgWCBlcnJvclxuIgorbXNnc3RyICIiCisiXG4iCisiVmltOiBYIILMg0eDiYFbgvCMn49vgrWC3IK1gr1yXG4iCisKKyM6IG9zX3VuaXguYzoxMzM0Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiWCBkaXNwbGF5IILMg2CDRoNig06CyY64lHOCtYLcgrWCvSIKKworIzogb3NfdW5peC5jOjE0NzMKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IgorbXNnc3RyICJYIGRpc3BsYXkggswgb3BlbiCCqoNeg0ODgINBg0WDZ4K1gtyCtYK9IgorCisjOiBvc191bml4LmM6MzIyNyBvc191bml4LmM6MzkwNworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCAiCittc2dzdHIgIiIKKyJcbiIKKyKDVoNGg4uC8I7AjXOCxYKrgtyCuYLxICIKKworIzogb3NfdW5peC5jOjMyNzUKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgc2hcbiIKK21zZ3N0ciAiIgorIlxuIgorInNoIINWg0aDi4LwjsCNc4LFgquC3IK5gvFcbiIKKworIzogb3NfdW5peC5jOjMyNzkgb3NfdW5peC5jOjM5MTMKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisig1aDRoOLgqqSbILwldSCtYLcgrWCvSAiCisKKyM6IG9zX3VuaXguYzozNDE0Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIoNwg0ODdoLwjeyQrILFgquC3IK5gvFcbiIKKworIzogb3NfdW5peC5jOjM0MjkKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGZvcmtcbiIKK21zZ3N0ciAiIgorIlxuIgorImZvcmsggsWCq4LcgrmC8VxuIgorCisjOiBvc191bml4LmM6MzkyMAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIoNSg32Dk4NogvCShpJmgrWC3IK1gr1cbiIKKworIzogb3NfdW5peC5jOjQxODQgb3NfdW5peC5jOjQzMDkgb3NfdW5peC5jOjU5NzUKK21zZ2lkICJYU01QIGxvc3QgSUNFIGNvbm5lY3Rpb24iCittc2dzdHIgIlhTTVAggqpJQ0WQ2pGxgvCOuIKigtyCtYK9IgorCisjOiBvc191bml4LmM6NTU1OAorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIlggZGlzcGxheSCCzCBvcGVuIILJjriUc4K1gtyCtYK9IgorCisjOiBvc191bml4LmM6NTg4MAorbXNnaWQgIlhTTVAgaGFuZGxpbmcgc2F2ZS15b3Vyc2VsZiByZXF1ZXN0IgorbXNnc3RyICJYU01QIIKqc2F2ZS15b3Vyc2VsZpd2i4GC8I+Il52CtYLEgqKC3IK3IgorCisjOiBvc191bml4LmM6NTk5OQorbXNnaWQgIlhTTVAgb3BlbmluZyBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QIIKqkNqRsYLwikqOboK1gsSCooLcgrciCisKKyM6IG9zX3VuaXguYzo2MDE4Cittc2dpZCAiWFNNUCBJQ0UgY29ubmVjdGlvbiB3YXRjaCBmYWlsZWQiCittc2dzdHIgIlhTTVAgSUNFkNqRsYKqjriUc4K1gr2C5oKkgsWCtyIKKworIzogb3NfdW5peC5jOjYwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICJYU01QIFNtY09wZW5Db25uZWN0aW9ugqqOuJRzgrWC3IK1gr06ICVzIgorCisjOiBvc192bXNfbW1zLmM6NTkKK21zZ2lkICJBdCBsaW5lIgorbXNnc3RyICKNcyIKKworIzogb3NfdzMyZXhlLmM6NjUKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjb21tYW5kIGxpbmUuIgorbXNnc3RyICKDUoN9g5ODaIOJg0ODk4LJg4GDgoOKgvCKhILok5aCxILnguqC3IK5gvEiCisKKyM6IG9zX3czMmV4ZS5jOjY2IG9zX3czMmV4ZS5jOjg5IG9zX3czMmV4ZS5jOjEwMAorbXNnaWQgIlZJTSBFcnJvciIKK21zZ3N0ciAiVklNg0eDiYFbIgorCisjOiBvc193MzJleGUuYzo4OQorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHZpbTMyLmRsbCEiCittc2dzdHIgInZpbTMyLmRsbCCC8IONgVuDaILFgquC3IK5gvGCxYK1gr0iCisKKyM6IG9zX3czMmV4ZS5jOjk5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAiRExMgqmC54rWkJSDfINDg5ODXoLwjuaTvoLFgquC3IK5gvGCxYK1gr0iCisKKyM6IG9zX3dpbjE2LmM6MzQyIG9zX3dpbjMyLmM6MzE5NworIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAig1aDRoOLgqqDUoFbg2ggJWQggsWPSZe5grWC3IK1gr0iCisKKyM6IG9zX3dpbjMyLmM6MjY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCAlcyBldmVudFxuIgorbXNnc3RyICJWaW06IINDg3iDk4NnICVzIILwjJ+SbVxuIgorCisjOiBvc193aW4zMi5jOjI2NTcKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAilcKCtoLpIgorCisjOiBvc193aW4zMi5jOjI2NTkKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgIoONg0+DSYN0IgorCisjOiBvc193aW4zMi5jOjI2NjAKK21zZ2lkICJzaHV0ZG93biIKK21zZ3N0ciAig1aDg4Nig2eDX4NFg5MiCisKKyM6IG9zX3dpbjMyLmM6MzE1MAorbXNnaWQgIkUzNzE6IENvbW1hbmQgbm90IGZvdW5kIgorbXNnc3RyICJFMzcxOiCDUoN9g5ODaIKqgqCC6ILcgrmC8SIKKworIzogb3Nfd2luMzIuYzozMTYzCittc2dpZCAiIgorIlZJTVJVTi5FWEUgbm90IGZvdW5kIGluIHlvdXIgJFBBVEguXG4iCisiRXh0ZXJuYWwgY29tbWFuZHMgd2lsbCBub3QgcGF1c2UgYWZ0ZXIgY29tcGxldGlvbi5cbiIKKyJTZWUgIDpoZWxwIHdpbjMyLXZpbXJ1biAgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiVklNUlVOLkVYRYKqICRQQVRIIILMkoaCyYLdgsKCqYLogtyCuYLxLlxuIgorIopPlZSDUoN9g5ODaILMj0mXuYzjgsmI6o6ekuKOfoLwgrWC3IK5gvEuXG4iCisij9qN14LNICA6aGVscCB3aW4zMi12aW1ydW4gIILwjlGPxoK1gsSCrYK+grOCoi4iCisKKyM6IG9zX3dpbjMyLmM6MzE2NgorbXNnaWQgIlZpbSBXYXJuaW5nIgorbXNnc3RyICJWaW2CzIx4jZAiCisKKyM6IHF1aWNrZml4LmM6MjU4Cittc2dpZCAiRTM3MjogVG9vIG1hbnkgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzcyOiCDdINIgVuDfYNig2eVto6al/GCySAlJSVjIIKqkb2Ct4KsgtyCtyIKKworIzogcXVpY2tmaXguYzoyNzEKK21zZ2lkICJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3Mzogg3SDSIFbg32DYoNnlbaOmpfxgsmXXFyK+oK5gsogJSUlYyCCqoKgguiC3IK1gr0iCisKKyM6IHF1aWNrZml4LmM6MzI1Cittc2dpZCAiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzQ6IIN0g0iBW4N9g2KDZ5W2jpqX8YLJIF0ggqqCoILogtyCuYLxIgorCisjOiBxdWlja2ZpeC5jOjMzOQorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogg3SDSIFbg32DYoNnlbaOmpfxgsWCzSAlJSVjIILNg1SDfIFbg2eCs4LqgtyCuYLxIgorCisjOiBxdWlja2ZpeC5jOjM1NworbXNnaWQgIkUzNzY6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIHByZWZpeCIKK21zZ3N0ciAiRTM3Njogg3SDSIFbg32DYoNnlbaOmpfxgsyRT5J1gsmWs4z4gsggJSUlYyCCqoKgguiC3IK3IgorCisjOiBxdWlja2ZpeC5jOjM2NQorbXNnaWQgIkUzNzc6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc3OiCDdINIgVuDfYNig2eVto6al/GCyZazjPiCyCAlJSVjIIKqgqCC6ILcgrciCisKKyM6IHF1aWNrZml4LmM6MzkxCittc2dpZCAiRTM3ODogJ2Vycm9yZm9ybWF0JyBjb250YWlucyBubyBwYXR0ZXJuIgorbXNnc3RyICJFMzc4OiAnZXJyb3Jmb3JtYXQnIILJg3CDXoFbg5OCqo53kuiCs4LqgsSCooLcgrmC8SIKKworIzogcXVpY2tmaXguYzo1MDEKK21zZ2lkICJFMzc5OiBNaXNzaW5nIG9yIGVtcHR5IGRpcmVjdG9yeSBuYW1lIgorbXNnc3RyICJFMzc5OiCDZoNCg4yDToNng4qWvIKqlrOCooKpi/OCxYK3IgorCisjOiBxdWlja2ZpeC5jOjk5MAorbXNnaWQgIkU1NTM6IE5vIG1vcmUgaXRlbXMiCittc2dzdHIgIkU1NTM6IJd2kWaCqoLggqSCoILogtyCuYLxIgorCisjOiBxdWlja2ZpeC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCVkIG9mICVkKSVzJXM6ICIKK21zZ3N0ciAiKCVkIG9mICVkKSVzJXM6ICIKKworIzogcXVpY2tmaXguYzoxMjMxCittc2dpZCAiIChsaW5lIGRlbGV0ZWQpIgorbXNnc3RyICIgKI1zgqqN7Y+cgrOC6oLcgrWCvSkiCisKKyM6IHF1aWNrZml4LmM6MTQ0NAorbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDogcXVpY2tmaXggg1iDXoNig06CzJaWlPaCxYK3IgorCisjOiBxdWlja2ZpeC5jOjE0NTMKK21zZ2lkICJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODE6IHF1aWNrZml4IINYg16DYoNOgsyQ5pOqgsWCtyIKKworIzogcXVpY2tmaXguYzoxNDY1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAig0eDiYFbiOqXlyAlZCBvZiAlZDsgJWQgjMKDR4OJgVsiCisKKyM6IHF1aWNrZml4LmM6MTk0MworbXNnaWQgIkUzODI6IENhbm5vdCB3cml0ZSwgJ2J1ZnR5cGUnIG9wdGlvbiBpcyBzZXQiCittc2dzdHIgIkUzODI6ICdidWZ0eXBlJyCDSYN2g1aDh4OTgqqQ3ZLogrOC6oLEgqKC6YLMgsWPkY2egt2C3IK5gvEiCisKKyM6IHJlZ2V4cC5jOjgzOAorbXNnaWQgIkUzMzk6IFBhdHRlcm4gdG9vIGxvbmciCittc2dzdHIgIkUzMzk6IINwg16BW4OTgqqSt4K3gqyC3IK3IgorCisjOiByZWdleHAuYzoxMDA5Cittc2dpZCAiRTUwOiBUb28gbWFueSBcXHooIgorbXNnc3RyICJFNTA6IFxceigggqqRvYK3gqyC3IK3IgorCisjOiByZWdleHAuYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MTogVG9vIG1hbnkgJXMoIgorbXNnc3RyICJFNTE6ICVzKCCCqpG9greCrILcgrciCisKKyM6IHJlZ2V4cC5jOjEwNzcKK21zZ2lkICJFNTI6IFVubWF0Y2hlZCBcXHooIgorbXNnc3RyICJFNTI6IFxceigggqqS3oLojYeCwYLEgqKC3IK5gvEiCisKKyM6IHJlZ2V4cC5jOjEwODEKK21zZ2lkICJFNTM6IFVubWF0Y2hlZCAlcyUlKCIKK21zZ3N0ciAiRTUzOiAlcyUlKCCCqpLeguiNh4LBgsSCooLcgrmC8SIKKworIzogcmVnZXhwLmM6MTA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTQ6IFVubWF0Y2hlZCAlcygiCittc2dzdHIgIkU1NDogJXMoIIKqkt6C6I2HgsGCxIKigtyCuYLxIgorCisjOiByZWdleHAuYzoxMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTogVW5tYXRjaGVkICVzKSIKK21zZ3N0ciAiRTU1OiAlcykggqqS3oLojYeCwYLEgqKC3IK5gvEiCisKKyM6IHJlZ2V4cC5jOjEyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2OiAlcyogb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU2OiAlcyoggqqL85W2jpqX8YLJgsiC6YnClFxckKuCqoKgguiC3IK3IgorCisjOiByZWdleHAuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzogJXMrIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1NzogJXMrIIKqi/OVto6al/GCyYLIgumJwpRcXJCrgqqCoILogtyCtyIKKworIzogcmVnZXhwLmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzQCIKK21zZ3N0ciAiRTU5OiAlc0AggsyM44LJlXOQs4LIlbaOmoKqgqCC6ILcgrWCvSIKKworIzogcmVnZXhwLmM6MTM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTg6ICVzeyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTg6ICVzeyCCqovzlbaOmpfxgsmCyILpicKUXFyQq4KqgqCC6ILcgrciCisKKyM6IHJlZ2V4cC5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwOiBUb28gbWFueSBjb21wbGV4ICVzey4uLn1zIgorbXNnc3RyICJFNjA6IJWhjkeCyCAlc3suLi59IIKqkb2Ct4KsgtyCtyIKKworIzogcmVnZXhwLmM6MTM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE6IE5lc3RlZCAlcyoiCittc2dzdHIgIkU2MTolcyoggqqT/ILqjnGCyYLIgsGCxIKigtyCtyIKKworIzogcmVnZXhwLmM6MTM3MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjI6IE5lc3RlZCAlcyVjIgorbXNnc3RyICJFNjI6JXMlYyCCqpP8guqOcYLJgsiCwYLEgqKC3IK3IgorCisjCisjOiByZWdleHAuYzoxNDkxCittc2dpZCAiRTYzOiBpbnZhbGlkIHVzZSBvZiBcXF8iCittc2dzdHIgIkU2MzogXFxfIILMlrOM+ILIjmeXcJX7lkCCxYK3IgorCisjOiByZWdleHAuYzoxNTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDolcyVjIILMjOOCyYLIgsmC4IKgguiC3IK5gvEiCisKKyMKKyM6IHJlZ2V4cC5jOjE1OTIKK21zZ2lkICJFNjU6IElsbGVnYWwgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIkU2NToglXOQs4LIjOOV+45Rj8aCxYK3IgorCisjCisjOiByZWdleHAuYzoxNjA1Cittc2dpZCAiRTY2OiBcXHooIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU2NjogXFx6KCCCzYNSg1KCxYLNi5aJwoKzguqCxIKigtyCuYLxIgorCisjCisjOiByZWdleHAuYzoxNjI0Cittc2dpZCAiRTY3OiBcXHoxIGV0IGFsLiBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNjc6IFxcejEggruCzJG8gs2DUoNSgsWCzYuWicKCs4LqgsSCooLcgrmC8SIKKworIworIzogcmVnZXhwLmM6MTYzNQorbXNnaWQgIkU2ODogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFx6IgorbXNnc3RyICJFNjg6IFxceiCCzIzjgsmVc5CzgsiVto6agqqCoILogtyCtYK9IgorCisjCisjOiByZWdleHAuYzoxNjg0Cittc2dpZCAiRTY5OiBNaXNzaW5nIF0gYWZ0ZXIgJXMlJVsiCittc2dzdHIgIkU2OTogJXMlJVsggsyM44LJIF0ggqqCoILogtyCuYLxIgorCisjOiByZWdleHAuYzoxNzAwCittc2dpZCAiRTcwOiBFbXB0eSAlcyUlW10iCittc2dzdHIgIkU3MDogJXMlJVtdIIKqi/OCxYK3IgorCisjCisjOiByZWdleHAuYzoxNzYwCittc2dpZCAiRTcxOiBJbnZhbGlkIGNoYXJhY3RlciBhZnRlciAlcyUlIgorbXNnc3RyICJFNzE6ICVzJSUggsyM44LJlXOQs4LIlbaOmoKqgqCC6ILcgrWCvSIKKworIzogcmVnZXhwLmM6MjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJFNTU0OiBTeW50YXggZXJyb3IgaW4gJXN7Li4ufSIKK21zZ3N0ciAiRTU1NDogJXN7Li4ufSCT4ILJlbaWQINHg4mBW4KqgqCC6ILcgrciCisKKyM6IHJlZ2V4cC5jOjI4NjMgcmVnZXhwLmM6MzAxNgorbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiCDToOJg2KDVoOFgsmC5oLokoaSZjsgkLOLS5VcXIy7gqqVoY5Hid+CrILpgqmC4D8iCisKKyM6IHJlZ2V4cC5jOjMwMDQgcmVnZXhwLmM6MzAxMworbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2Mzogg3CDXoFbg5OCyYLmgumDWINeg2KDTpVzkauDR4OJgVuCxYK3IgorCisjOiByZWdleHAuYzozMjU4Cittc2dpZCAiRXh0ZXJuYWwgc3VibWF0Y2hlczpcbiIKK21zZ3N0ciAiik+VlILMlZSVqopZk5Y6XG4iCisKKyM6IHNjcmVlbi5jOjIxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0tJTNsZCBsaW5lcyBmb2xkZWQgIgorbXNnc3RyICIrLS0lM2xkII1zgqqQ3I/0gtyC6oLcgrWCvSIKKworIzogc2NyZWVuLmM6Nzk1OQorbXNnaWQgIiBWUkVQTEFDRSIKK21zZ3N0ciAiIIm8kXqSdYq3IgorCisjOiBzY3JlZW4uYzo3OTYzCittc2dpZCAiIFJFUExBQ0UiCittc2dzdHIgIiCSdYq3IgorCisjOiBzY3JlZW4uYzo3OTY4Cittc2dpZCAiIFJFVkVSU0UiCittc2dzdHIgIiCUvZNdIgorCisjOiBzY3JlZW4uYzo3OTcwCittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIJF9k/wiCisKKyM6IHNjcmVlbi5jOjc5NzMKK21zZ2lkICIgKGluc2VydCkiCittc2dzdHIgIiAokX2T/CkiCisKKyM6IHNjcmVlbi5jOjc5NzUKK21zZ2lkICIgKHJlcGxhY2UpIgorbXNnc3RyICIgKJJ1ircpIgorCisjOiBzY3JlZW4uYzo3OTc3Cittc2dpZCAiICh2cmVwbGFjZSkiCittc2dzdHIgIiAoibyRepJ1ircpIgorCisjOiBzY3JlZW4uYzo3OTgwCittc2dpZCAiIEhlYnJldyIKK21zZ3N0ciAiIIN3g3WDiYNDIgorCisjOiBzY3JlZW4uYzo3OTkxCittc2dpZCAiIEFyYWJpYyIKK21zZ3N0ciAiIINBg4mDcoNBIgorCisjOiBzY3JlZW4uYzo3OTk0Cittc2dpZCAiIChsYW5nKSIKK21zZ3N0ciAiICiMvozqKSIKKworIzogc2NyZWVuLmM6Nzk5OAorbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKJNcXILolXSCrykiCisKKyM6IHNjcmVlbi5jOjgwMTEKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgg3KDV4OFg0GDiyIKKworIzogc2NyZWVuLmM6ODAxMgorbXNnaWQgIiBWSVNVQUwgTElORSIKK21zZ3N0ciAiIINyg1eDhYNBg4sgjXMiCisKKyM6IHNjcmVlbi5jOjgwMTMKK21zZ2lkICIgVklTVUFMIEJMT0NLIgorbXNnc3RyICIgg3KDV4OFg0GDiyCL6YxgIgorCisjOiBzY3JlZW4uYzo4MDE0Cittc2dpZCAiIFNFTEVDVCIKK21zZ3N0ciAiIINag4yDToNnIgorCisjOiBzY3JlZW4uYzo4MDE1Cittc2dpZCAiIFNFTEVDVCBMSU5FIgorbXNnc3RyICIgjXOOd4z8kUmR8CIKKworIzogc2NyZWVuLmM6ODAxNgorbXNnaWQgIiBTRUxFQ1QgQkxPQ0siCittc2dzdHIgIiCL6YxgkUmR8CIKKworIyBtc2dpZCAiIEJMT0NLIgorIyBtc2dzdHIgIiCDdYONg2KDTiIKKyMgbXNnaWQgIiBMSU5FIgorIyBtc2dzdHIgIiCNcyIKKyM6IHNjcmVlbi5jOjgwMzEgc2NyZWVuLmM6ODA5NAorbXNnaWQgInJlY29yZGluZyIKK21zZ3N0ciAii0yYXpKGIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIKK21zZ3N0ciAij+OC3ILFjJ+N9YK1gr2CzILFibqCyZbfguiC3IK3IgorCisjOiBzZWFyY2guYzozOAorbXNnaWQgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIKK21zZ3N0ciAiibqC3ILFjJ+N9YK1gr2CzILFj+OCyZbfguiC3IK3IgorCisjOiBzZWFyY2guYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4MzogSW52YWxpZCBzZWFyY2ggc3RyaW5nOiAlcyIKK21zZ3N0ciAiRTM4MzoglrOM+ILIjJ+N9ZW2jpqX8YLFgrc6ICVzIgorCisjOiBzZWFyY2guYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg0OiCP44LcgsWMn431grWCvYKvguqCx4pZk5aJ04+Kgs2CoILogtyCuYLxOiAlcyIKKworIzogc2VhcmNoLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODU6IHNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NTogibqC3ILFjJ+N9YK1gr2Cr4LqgseKWZOWidOPioLNgqCC6ILcgrmC8TogJXMiCisKKyM6IHNlYXJjaC5jOjEyNDkKK21zZ2lkICJFMzg2OiBFeHBlY3RlZCAnPycgb3IgJy8nICBhZnRlciAnOyciCittc2dzdHIgIkUzODY6ICc7JyCCzIKggsaCyYLNICc/JyCCqSAnLycggqqK+pHSgrOC6oLEgqKC6SIKKworIzogc2VhcmNoLmM6Mzc1OAorbXNnaWQgIiAoaW5jbHVkZXMgcHJldmlvdXNseSBsaXN0ZWQgbWF0Y2gpIgorbXNnc3RyICIgKJFPgsmX8YuTgrWCvYpZk5aJ04+KgvCK3ILeKSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNzc4Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIINDg5ODToOLgVuDaIKzguqCvYN0g0CDQ4OLIgorCisjOiBzZWFyY2guYzozNzgwCittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAigt2CwoKpguiC3IK5gvEgIgorCisjOiBzZWFyY2guYzozNzgxCittc2dpZCAiaW4gcGF0aCAtLS1cbiIKK21zZ3N0ciAig3CDWILJIC0tLS1cbiIKKworIzogc2VhcmNoLmM6MzgyMAorbXNnaWQgIiAgKEFscmVhZHkgbGlzdGVkKSIKK21zZ3N0ciAiICAoivmCyZfxi5MpIgorCisjOiBzZWFyY2guYzozODIyCittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiAggt2CwoKpguiC3IK5gvEiCisKKyM6IHNlYXJjaC5jOjM4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiCittc2dzdHIgIoNDg5ODToOLgVuDaIKzguqCvYN0g0CDQ4OLgvCDWINMg4ODk5KGOiAlcyIKKworIzogc2VhcmNoLmM6NDA5MgorbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4NzogjLuN3Y1zgsmKWZOWgqqCoILogtyCtyIKKworIzogc2VhcmNoLmM6NDIzNQorbXNnaWQgIkFsbCBpbmNsdWRlZCBmaWxlcyB3ZXJlIGZvdW5kIgorbXNnc3RyICKRU4LEgsyDQ4OTg06Di4Fbg2iCs4Lqgr2DdINAg0ODi4Kqgt2CwoKpguiC3IK1gr0iCisKKyM6IHNlYXJjaC5jOjQyMzcKK21zZ2lkICJObyBpbmNsdWRlZCBmaWxlcyIKK21zZ3N0ciAig0ODk4NOg4uBW4Nog3SDQINDg4uCzYKgguiC3IK5gvEiCisKKyM6IHNlYXJjaC5jOjQyNTMKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IJLoi2CC8ILdgsKCr4LnguqC3IK5gvEiCisKKyM6IHNlYXJjaC5jOjQyNTUKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IINwg16BW4OTgvCC3YLCgq+C54LqgtyCuYLxIgorCisjOiBzeW50YXguYzozMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTA6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMzkwOiCVc5CzgsiI+JCUgsWCtzogJXMiCisKKyM6IHN5bnRheC5jOjMyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTE6IIK7gsyC5oKkgsiNXFyVtoNOg4mDWINegs2CoILogtyCuYLxOiAlcyIKKworIzogc3ludGF4LmM6MzM5NAorbXNnaWQgIk5vIFN5bnRheCBpdGVtcyBkZWZpbmVkIGZvciB0aGlzIGJ1ZmZlciIKK21zZ3N0ciAigrGCzINvg2KDdINAgsmS6ItggrOC6oK9jVxclbaXdpFmgs2CoILogtyCuYLxIgorCisjOiBzeW50YXguYzozNDAyCittc2dpZCAic3luY2luZyBvbiBDLXN0eWxlIGNvbW1lbnRzIgorbXNnc3RyICJDjL6M6pWXg1KDgYOTg2eCqYLnk6+K+pKGIgorCisjOiBzeW50YXguYzozNDEwCittc2dpZCAibm8gc3luY2luZyIKK21zZ3N0ciAilPGTr4r6IgorCisjOiBzeW50YXguYzozNDEzCittc2dpZCAic3luY2luZyBzdGFydHMgIgorbXNnc3RyICKTr4r6ikqObiAiCisKKyM6IHN5bnRheC5jOjM0MTUgc3ludGF4LmM6MzQ5MAorbXNnaWQgIiBsaW5lcyBiZWZvcmUgdG9wIGxpbmUiCittc2dzdHIgIiCNc5FPKINng2KDdo1zguaC6ILgKSIKKworIzogc3ludGF4LmM6MzQyMAorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IHN5bmMgaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tII1cXJW2k6+K+pd2kWYgLS0tIgorCisjOiBzeW50YXguYzozNDI1Cittc2dpZCAiIgorIlxuIgorInN5bmNpbmcgb24gaXRlbXMiCittc2dzdHIgIiIKKyJcbiIKKyKXdpFmj+OCxZOvivqShiIKKworIzogc3ludGF4LmM6MzQzMQorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSCNXFyVtpd2kWYgLS0tIgorCisjOiBzeW50YXguYzozNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTI6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkyOiCCu4LMguaCpILIjVxclbaDToOJg1iDXoLNgqCC6ILcgrmC8TogJXMiCisKKyM6IHN5bnRheC5jOjM0ODAKK21zZ2lkICJtaW5pbWFsICIKK21zZ3N0ciAibWluaW1hbCIKKworIzogc3ludGF4LmM6MzQ4NworbXNnaWQgIm1heGltYWwgIgorbXNnc3RyICJtYXhpbWFsIgorCisjOiBzeW50YXguYzozNDk5Cittc2dpZCAiOyBtYXRjaCAiCittc2dzdHIgIjsgilmTliAiCisKKyM6IHN5bnRheC5jOjM1MDEKK21zZ2lkICIgbGluZSBicmVha3MiCittc2dzdHIgIiCMwoLMifyNcyIKKworIzogc3ludGF4LmM6NDEzNQorbXNnaWQgIkUzOTM6IGdyb3VwW3RdaGVyZSBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5MzoggrGCsYLFgs2DT4OLgVuDdoLNi5aJwoKzguqC3IK5gvEiCisKKyM6IHN5bnRheC5jOjQxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiAlcyCCzJTNiM2XdpFmgqqC3YLCgqmC6ILcgrmC8SIKKworIzogc3ludGF4LmM6NDE4NworbXNnaWQgIkUzOTU6IGNvbnRhaW5zIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk1OiCCsYLMj+qPioLFgs2I+JCUY29udGFpbnOCzYuWicKCs4LqgsSCooLcgrmC8SIKKworIzogc3ludGF4LmM6NDE5OAorbXNnaWQgIkUzOTY6IGNvbnRhaW5lZGluIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk2OiCCsYLMj+qPioLFgs2I+JCUY29udGFpbmVkaW6CzYuWicKCs4LqgsSCooLcgrmC8SIKKworIzogc3ludGF4LmM6NDI3NgorbXNnaWQgIkUzOTc6IEZpbGVuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMzk3OiCDdINAg0ODi5a8gqqVS5d2gsWCtyIKKworIzogc3ludGF4LmM6NDYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk4OiBNaXNzaW5nICc9JzogJXMiCittc2dzdHIgIkUzOTg6ICc9JyCCqoKgguiC3IK5gvE6ICVzIgorCisjOiBzeW50YXguYzo0NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBzeW50YXggcmVnaW9uICVzIgorbXNnc3RyICJFMzk5OiCI+JCUgqqRq4LogtyCuYLxOiCNXFyVtpTNiM0gJXMiCisKKyM6IHN5bnRheC5jOjUxMDMKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDogg06DiYNYg16Cqo53kuiCs4LqgsSCooLcgrmC8SIKKworIzogc3ludGF4LmM6NTE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDAxOiBQYXR0ZXJuIGRlbGltaXRlciBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDAxOiCDcINegVuDk4vmkNiC6IKqgt2CwoKpguiC3IK5gvE6ICVzIgorCisjOiBzeW50YXguYzo1MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDI6IEdhcmJhZ2UgYWZ0ZXIgcGF0dGVybjogJXMiCittc2dzdHIgIkU0MDI6IINwg16BW4OTgsyCoILGgsmDU4N+gqqCoILogtyCtzogJXMiCisKKyM6IHN5bnRheC5jOjUzMDUKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiCNXFyVtpOvivo6IJhBkbGNc4Nwg16BW4OTgqoyk3iOd5LogrOC6oLcgrWCvSIKKworIzogc3ludGF4LmM6NTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA0OiBJbGxlZ2FsIGFyZ3VtZW50czogJXMiCittc2dzdHIgIkU0MDQ6IJVzkLOCyIj4kJSCxYK3OiAlcyIKKworIzogc3ludGF4LmM6NTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiCTmYK1gqIgc2lnbiCCqoKgguiC3IK5gvE6ICVzIgorCisjOiBzeW50YXguYzo1NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDY6IEVtcHR5IGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQwNjogi/OCzIj4kJQ6ICVzIgorCisjOiBzeW50YXguYzo1NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDc6ICVzIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU0MDc6ICVzIILNg1KDUoLFgs2LlonCgrOC6oLEgqKC3IK5gvEiCisKKyM6IHN5bnRheC5jOjU0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwODogJXMgbXVzdCBiZSBmaXJzdCBpbiBjb250YWlucyBsaXN0IgorbXNnc3RyICJFNDA4OiAlcyCCzZPgl2WDioNYg2eCzJDmk6qCxYLIgq+C6oLOgsiC54LIgqIiCisKKyM6IHN5bnRheC5jOjU1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwOTogVW5rbm93biBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTQwOToglqKSbYLMg0+Di4Fbg3aWvDogJXMiCisKKyM6IHN5bnRheC5jOjU3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiCWs4z4gsggOnN5bnRheCCCzINUg3WDUoN9g5ODaDogJXMiCisKKyM6IHN5bnRheC5jOjYxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMTogaGlnaGxpZ2h0IGdyb3VwIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MTE6IINug0ODiYNDg2eDT4OLgVuDdoKqgt2CwoKpguiC3IK5gvE6ICVzIgorCisjOiBzeW50YXguYzo2MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTI6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEyOiCI+JCUgqqPW5WqgsWCzYLIgqI6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMzogVG9vIG1hbnkgYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEzOiCI+JCUgqqRvYK3gqyC3IK3OiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTg1Cittc2dpZCAiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIgorbXNnc3RyICJFNDE0OiCDT4OLgVuDdoKqkN2S6IKzguqCxIKigumCzILFg26DQ4OJg0ODZ4OKg5ODToLNlrOOi4KzguqC3IK3IgorCisjOiBzeW50YXguYzo2MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTU6IHVuZXhwZWN0ZWQgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTU6IJdcXIr6grmCypOvgrYgc2lnbiCCxYK3OiAlcyIKKworIzogc3ludGF4LmM6NjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE2OiBtaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE2OiCTr4K2IHNpZ24ggqqCoILogtyCuYLxOiAlcyIKKworIzogc3ludGF4LmM6NjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE3OiBtaXNzaW5nIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQxNzogiPiQlIKqgqCC6ILcgrmC8TogJXMiCisKKyM6IHN5bnRheC5jOjY0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6IJVzkLOCyJJsgsWCtzogJXMiCisKKyM6IHN5bnRheC5jOjY1MzQKK21zZ2lkICJFNDE5OiBGRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDE5OiCWopJtgsyRT4xpkEaCxYK3IgorCisjOiBzeW50YXguYzo2NTQ1Cittc2dpZCAiRTQyMDogQkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQyMDoglqKSbYLMlHeMaZBGgsWCtyIKKworIzogc3ludGF4LmM6NjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6IINKg4mBW5a8guKU1I2GgvCURo6vgsWCq4LcgrmC8TogJXMiCisKKyM6IHN5bnRheC5jOjY4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6II9JkluDUoFbg2iCqpK3greCrILcgrc6ICVzIgorCisjOiBzeW50YXguYzo2ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjM6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDIzOiCVc5CzgsiI+JCUgsWCtzogJXMiCisKKyM6IHN5bnRheC5jOjczODgKK21zZ2lkICJFNDI0OiBUb28gbWFueSBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIGF0dHJpYnV0ZXMgaW4gdXNlIgorbXNnc3RyICJFNDI0OiCRvYKtgsyI2YLIgumDboNDg4mDQ4Nnka6Qq4KqjmeC7YLqgreCrILEgqKC3IK3IgorCisjOiBzeW50YXguYzo3OTA5Cittc2dpZCAiRTY2OTogVW5wcmludGFibGUgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUiCittc2dzdHIgIkU2Njk6IINPg4uBW4N2lryCyYjzjfyVc4nClFxcgsiVto6agqqCoILogtyCtyIKKworIy4gVGhpcyBpcyBhbiBlcnJvciwgYnV0IHNpbmNlIHRoZXJlIHByZXZpb3VzbHkgd2FzIG5vIGNoZWNrIG9ubHkKKyMuICogZ2l2ZSBhIHdhcm5pbmcuCisjOiBzeW50YXguYzo3OTE2Cittc2dpZCAiVzE4OiBJbnZhbGlkIGNoYXJhY3RlciBpbiBncm91cCBuYW1lIgorbXNnc3RyICJXMTg6IINPg4uBW4N2lryCyZVzkLOCyJW2jpqCqoKgguiC3IK3IgorCisjOiB0YWcuYzo5MAorbXNnaWQgIkU1NTU6IGF0IGJvdHRvbSBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTU6IINeg0+DWINeg2KDToLMlpaU9oLFgrciCisKKyM6IHRhZy5jOjkxCittc2dpZCAiRTU1NjogYXQgdG9wIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiRTU1Njogg16DT4NYg16DYoNOgsyQ5pOqgsWCtyIKKworIzogdGFnLmM6NDEyCittc2dpZCAiRTQyNTogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0MjU6II3Fj4mCzIpZk5aDXoNPgvCStIKmgsSW34LpgrGCxoLNgsWCq4LcgrmC8SIKKworIzogdGFnLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjY6IHRhZyBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDI2OiCDXoNPgqqC3YLCgqmC6ILcgrmC8TogJXMiCisKKyM6IHRhZy5jOjU4MworbXNnaWQgIiAgIyBwcmkga2luZCB0YWciCittc2dzdHIgIiAgIyBwcmkga2luZCB0YWciCisKKyM6IHRhZy5jOjU4NgorbXNnaWQgImZpbGVcbiIKK21zZ3N0ciAig3SDQINDg4tcbiIKKworIy4KKyMuICogQXNrIHRvIHNlbGVjdCBhIHRhZyBmcm9tIHRoZSBsaXN0LgorIy4gKiBXaGVuIHVzaW5nICI6c2lsZW50IiBhc3N1bWUgdGhhdCA8Q1I+IHdhcyBlbnRlcmVkLgorIy4KKyM6IHRhZy5jOjc0NAorbXNnaWQgIkVudGVyIG5yIG9mIGNob2ljZSAoPENSPiB0byBhYm9ydCk6ICIKK21zZ3N0ciAikUmR8IK3gumU1I2GgvCT/JfNgrWCxIKtgr6Cs4KiICg8Q1I+gsWSho5+KTogIgorCisjOiB0YWcuYzo3ODQKK21zZ2lkICJFNDI3OiBUaGVyZSBpcyBvbmx5IG9uZSBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjc6IIpZk5aDXoNPgqoxgsKCvoKvgrWCqYKgguiC3IK5gvEiCisKKyM6IHRhZy5jOjc4NgorbXNnaWQgIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjg6II3FjOOCyYpZk5aCt4Lpg16DT4LwkrSCpoLEkGmC3oKxgsaCzYLFgquC3IK5gvEiCisKKyM6IHRhZy5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAig3SDQINDg4sgXCIlc1wiIIKqgqCC6ILcgrmC8SIKKworIy4gR2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgdGFncworIzogdGFnLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAlZCBvZiAlZCVzIgorbXNnc3RyICKDXoNPICVkICiRUyVkJXMpIgorCisjOiB0YWcuYzo4MjYKK21zZ2lkICIgb3IgbW9yZSIKK21zZ3N0ciAiIIKpgruC6ojIj+MiCisKKyM6IHRhZy5jOjgyOAorbXNnaWQgIiAgVXNpbmcgdGFnIHdpdGggZGlmZmVyZW50IGNhc2UhIgorbXNnc3RyICIgIINeg0+C8IjZgsiC6WNhc2WCxY5nl3CCtYLcgrchIgorCisjOiB0YWcuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyOTogRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkU0Mjk6IIN0g0CDQ4OLIFwiJXNcIiCCqoKgguiC3IK5gvEiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6OTQxCittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyBUTyCDXoNPICAgICAgICBGUk9NII1zICAgIGluIGZpbGUvdGV4dCIKKworIzogdGFnLmM6MTM2MworIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICKDXoNPg3SDQINDg4sgJXMggvCMn431koYiCisKKyM6IHRhZy5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IINeg0+DdINAg0ODi4LMg3CDWIKqICVzIILJkNiC6I7MgsSC54LqgtyCtYK9XG4iCisKKyM6IHRhZy5jOjIyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMTogRm9ybWF0IGVycm9yIGluIHRhZ3MgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0MzE6IINeg0+DdINAg0ODiyBcIiVzXCIggsyDdINIgVuDfYNig2eCyYNHg4mBW4KqgqCC6ILcgrciCisKKyM6IHRhZy5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICKSvJFPgswgJWxkIINvg0ODZyIKKworIzogdGFnLmM6MjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMyOiBUYWdzIGZpbGUgbm90IHNvcnRlZDogJXMiCittc2dzdHIgIkU0MzI6IINeg0+DdINAg0ODi4Kqg1xcgVuDZ4KzguqCxIKigtyCuYLxOiAlcyIKKworIy4gbmV2ZXIgb3BlbmVkIGFueSB0YWdzIGZpbGUKKyM6IHRhZy5jOjIyODAKK21zZ2lkICJFNDMzOiBObyB0YWdzIGZpbGUiCittc2dzdHIgIkU0MzM6IINeg0+DdINAg0ODi4KqgqCC6ILcgrmC8SIKKworIzogdGFnLmM6MzAxNgorbXNnaWQgIkU0MzQ6IENhbid0IGZpbmQgdGFnIHBhdHRlcm4iCittc2dzdHIgIkU0MzQ6IINeg0+DcINegVuDk4Lwgt2CwoKvgueC6oLcgrmC8SIKKworIzogdGFnLmM6MzAyNworbXNnaWQgIkU0MzU6IENvdWxkbid0IGZpbmQgdGFnLCBqdXN0IGd1ZXNzaW5nISIKK21zZ3N0ciAiRTQzNTogg16DT4Lwgt2CwoKvgueC6oLIgqKCzILFklCCyZCEkaqCtYLcgrchIgorCisjOiB0ZXJtLmM6MTc1OQorbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiJyCCzZaikm2CxYK3LiCMu41zgsyRZ4LdjZ6C3ZJblpaCzY6fgsyCxoKoguiCxYK3OiIKKworIzogdGVybS5jOjE3ODMKK21zZ2lkICJkZWZhdWx0aW5nIHRvICciCittc2dzdHIgIo/Il6qSbILwjp+CzILmgqSCyZDdkuiCtYLcgrcgJyIKKworIzogdGVybS5jOjIxNDEKK21zZ2lkICJFNTU3OiBDYW5ub3Qgb3BlbiB0ZXJtY2FwIGZpbGUiCittc2dzdHIgIkU1NTc6IHRlcm1jYXCDdINAg0ODi4LwikqCr4LcgrmC8SIKKworIzogdGVybS5jOjIxNDUKK21zZ2lkICJFNTU4OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWluZm8iCittc2dzdHIgIkU1NTg6IHRlcm1pbmZvgsmSW5aWg0eDk4Nng4qC8ILdgsKCr4LnguqC3IK5gvEiCisKKyM6IHRlcm0uYzoyMTQ3Cittc2dpZCAiRTU1OTogVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1NTk6IHRlcm1jYXCCyZJblpaDR4OTg2eDioLwgt2CwoKvgueC6oLcgrmC8SIKKworIzogdGVybS5jOjIzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzNjogTm8gXCIlc1wiIGVudHJ5IGluIHRlcm1jYXAiCittc2dzdHIgIkU0MzY6IHRlcm1jYXCCySBcIiVzXCIggsyDR4OTg2eDioKqgqCC6ILcgrmC8SIKKworIzogdGVybS5jOjI3ODAKK21zZ2lkICJFNDM3OiB0ZXJtaW5hbCBjYXBhYmlsaXR5IFwiY21cIiByZXF1aXJlZCIKK21zZ3N0ciAiRTQzNzogkluWloLJIFwiY21cIiCLQJRcXIKqlUuXdoLFgrciCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGVybS5jOjQ5OTAKK21zZ2lkICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIGtleXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIJJblpaDTIFbIC0tLSIKKworIzogdWkuYzoyNTgKK21zZ2lkICJuZXcgc2hlbGwgc3RhcnRlZFxuIgorbXNnc3RyICKQVoK1gqKDVoNGg4uC8ItOk66CtYLcgrdcbiIKKworIzogdWkuYzoxODQxCittc2dpZCAiVmltOiBFcnJvciByZWFkaW5nIGlucHV0LCBleGl0aW5nLi4uXG4iCittc2dzdHIgIlZpbTogk/yXzYLwk8eNnoLdkoaCzINHg4mBW4LJguaC6I9Jl7mCtYLcgrcuLi5cbiIKKworIy4gbXVzdCBkaXNwbGF5IHRoZSBwcm9tcHQKKyM6IHVuZG8uYzo0MDUKK21zZ2lkICJObyB1bmRvIHBvc3NpYmxlOyBjb250aW51ZSBhbnl3YXkiCittc2dzdHIgIonClFxcgsiDQYOTg2iDRILNgqCC6ILcgrmC8ToggsaC6IKggqaCuJGxgq+C3IK3IgorCisjOiB1bmRvLmM6NTYxCittc2dpZCAiRTQzODogdV91bmRvOiBsaW5lIG51bWJlcnMgd3JvbmciCittc2dzdHIgIkU0Mzg6IHVfdW5kbzogjXOU1I2GgqqK1IjhgsGCxIKigtyCtyIKKworIzogdW5kby5jOjc1NworbXNnaWQgIjEgY2hhbmdlIgorbXNnc3RyICIxIInTj4qVz41YgrWC3IK1gr0iCisKKyM6IHVuZG8uYzo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYW5nZXMiCittc2dzdHIgIiVsZCCJ04+Klc+NWIK1gtyCtYK9IgorCisjOiB1bmRvLmM6ODEyCittc2dpZCAiRTQzOTogdW5kbyBsaXN0IGNvcnJ1cHQiCittc2dzdHIgIkU0Mzk6IINBg5ODaINEg4qDWINngqqJ84LqgsSCooLcgrciCisKKyM6IHVuZG8uYzo4NDQKK21zZ2lkICJFNDQwOiB1bmRvIGxpbmUgbWlzc2luZyIKK21zZ3N0ciAiRTQ0MDogg0GDk4Nog0SNc4KqgqCC6ILcgrmC8SIKKworIy4gT25seSBNUyBWQyA0LjEgYW5kIGVhcmxpZXIgY2FuIGRvIFdpbjMycworIzogdmVyc2lvbi5jOjE3MzEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIINyg2KDZyBHVUkglMUiCisKKyM6IHZlcnNpb24uYzoxNzMzCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMiCDcoNig2cgR1VJIJTFIgorCisjOiB2ZXJzaW9uLmM6MTczNgorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiIGluIFdpbjMycyCDgoFbg2giCisKKyM6IHZlcnNpb24uYzoxNzM4Cittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIiB3aXRoIE9MRSCDVIN8gVuDZyIKKworIzogdmVyc2lvbi5jOjE3NDEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgY29uc29sZSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMiCDcoNig2cgg1KDk4NcXIFbg4sglMUiCisKKyM6IHZlcnNpb24uYzoxNzQ1Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYgYml0IHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2IINyg2KDZyCUxSIKKworIzogdmVyc2lvbi5jOjE3NDkKK21zZ2lkICIiCisiXG4iCisiMzIgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzIgg3KDYoNnIE1TLURPUyCUxSIKKworIzogdmVyc2lvbi5jOjE3NTEKK21zZ2lkICIiCisiXG4iCisiMTYgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMTYgg3KDYoNnIE1TLURPUyCUxSIKKworIzogdmVyc2lvbi5jOjE3NTcKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIJTFIgorCisjOiB2ZXJzaW9uLmM6MTc1OQorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyBYIJTFIgorCisjOiB2ZXJzaW9uLmM6MTc2MgorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MglMUiCisKKyM6IHZlcnNpb24uYzoxNzY3Cittc2dpZCAiIgorIlxuIgorIlJJU0MgT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlJJU0MgT1MglMUiCisKKyM6IHZlcnNpb24uYzoxNzc3Cittc2dpZCAiIgorIlxuIgorIkluY2x1ZGVkIHBhdGNoZXM6ICIKK21zZ3N0ciAiIgorIlxuIgorIpNLl3CNz4Nwg2KDYDogIgorCisjOiB2ZXJzaW9uLmM6MTgwMyB2ZXJzaW9uLmM6MjE3MQorbXNnaWQgIk1vZGlmaWVkIGJ5ICIKK21zZ3N0ciAiTW9kaWZpZWQgYnkgIgorCisjOiB2ZXJzaW9uLmM6MTgxMAorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyJDb21waWxlZCAiCisKKyM6IHZlcnNpb24uYzoxODEzCittc2dpZCAiYnkgIgorbXNnc3RyICJieSAiCisKKyM6IHZlcnNpb24uYzoxODI1Cittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJIdWdlIJTFICIKKworIzogdmVyc2lvbi5jOjE4MjgKK21zZ2lkICIiCisiXG4iCisiQmlnIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiQmlnIJTFICIKKworIzogdmVyc2lvbi5jOjE4MzEKK21zZ2lkICIiCisiXG4iCisiTm9ybWFsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiksqP7SCUxSAiCisKKyM6IHZlcnNpb24uYzoxODM0Cittc2dpZCAiIgorIlxuIgorIlNtYWxsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiU21hbGwglMUgIgorCisjOiB2ZXJzaW9uLmM6MTgzNgorbXNnaWQgIiIKKyJcbiIKKyJUaW55IHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiVGlueSCUxSAiCisKKyM6IHZlcnNpb24uYzoxODQyCittc2dpZCAid2l0aG91dCBHVUkuIgorbXNnc3RyICJ3aXRob3V0IEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODQ3Cittc2dpZCAid2l0aCBHVEsyLUdOT01FIEdVSS4iCittc2dzdHIgIndpdGggR1RLMi1HTk9NRSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTg0OQorbXNnaWQgIndpdGggR1RLLUdOT01FIEdVSS4iCittc2dzdHIgIndpdGggR1RLLUdOT01FIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODUzCittc2dpZCAid2l0aCBHVEsyIEdVSS4iCittc2dzdHIgIndpdGggR1RLMiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTg1NQorbXNnaWQgIndpdGggR1RLIEdVSS4iCittc2dzdHIgIndpdGggR1RLIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODYwCittc2dpZCAid2l0aCBYMTEtTW90aWYgR1VJLiIKK21zZ3N0ciAid2l0aCBYMTEtTW90aWYgR1VJLiIKKworIzogdmVyc2lvbi5jOjE4NjQKK21zZ2lkICJ3aXRoIFgxMS1uZVh0YXcgR1VJLiIKK21zZ3N0ciAid2l0aCBYMTEtbmVYdGF3IEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODY2Cittc2dpZCAid2l0aCBYMTEtQXRoZW5hIEdVSS4iCittc2dzdHIgIndpdGggWDExLUF0aGVuYSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTg3MAorbXNnaWQgIndpdGggQmVPUyBHVUkuIgorbXNnc3RyICJ3aXRoIEJlT1MgR1VJLiIKKworIzogdmVyc2lvbi5jOjE4NzMKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICJ3aXRoIFBob3RvbiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTg3NgorbXNnaWQgIndpdGggR1VJLiIKK21zZ3N0ciAid2l0aCBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTg3OQorbXNnaWQgIndpdGggQ2FyYm9uIEdVSS4iCittc2dzdHIgIndpdGggQ2FyYm9uIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODgyCittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICJ3aXRoIENvY29hIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODg1Cittc2dpZCAid2l0aCAoY2xhc3NpYykgR1VJLiIKK21zZ3N0ciAid2l0aCAog06DiYNWg2KDTikgR1VJLiIKKworIzogdmVyc2lvbi5jOjE4OTYKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIgIItAlFxcgsyI6peXIJdMjPgoKykvlrOM+CgtKVxuIgorCisjOiB2ZXJzaW9uLmM6MTkwOAorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgg1aDWINlg4AgdmltcmM6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTkxMworbXNnaWQgIiAgICAgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICCDhoFbg1UgdmltcmM6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTkxOAorbXNnaWQgIiAybmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICCR5jKDhoFbg1UgdmltcmM6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTkyMworbXNnaWQgIiAzcmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICCR5jODhoFbg1UgdmltcmM6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTkyOAorbXNnaWQgIiAgICAgIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICAgg4aBW4NVIGV4cmM6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTkzMworbXNnaWQgIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgkeYyg4aBW4NVIGV4cmM6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTkzOQorbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICCDVoNYg2WDgCBndmltcmM6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk0MworbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgIIOGgVuDVSBndmltcmM6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk0NworbXNnaWQgIjJuZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIJHmMoOGgVuDVSBndmltcmM6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk1MgorbXNnaWQgIjNyZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIJHmM4OGgVuDVSBndmltcmM6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk1OQorbXNnaWQgIiAgICBzeXN0ZW0gbWVudSBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIINWg1iDZYOAg4GDaoOFgVs6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk2NworbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICAgICAgII/Il6qOnoLMICRWSU06IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk3MworbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAij8iXqo6egswgJFZJTVJVTlRJTUU6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk3NworbXNnaWQgIkNvbXBpbGF0aW9uOiAiCittc2dzdHIgIoNSg5ODcINDg4s6ICIKKworIzogdmVyc2lvbi5jOjE5ODMKK21zZ2lkICJDb21waWxlcjogIgorbXNnc3RyICKDUoOTg3CDQ4OJOiAiCisKKyM6IHZlcnNpb24uYzoxOTg4Cittc2dpZCAiTGlua2luZzogIgorbXNnc3RyICKDioOTg046ICIKKworIzogdmVyc2lvbi5jOjE5OTMKK21zZ2lkICIgIERFQlVHIEJVSUxEIgorbXNnc3RyICKDZoNvg2KDT4Nyg4uDaCIKKworIzogdmVyc2lvbi5jOjIwMzIKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVmkgSU1wcm92ZWQiCisKKyM6IHZlcnNpb24uYzoyMDM0Cittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgInZlcnNpb24gIgorCisjOiB2ZXJzaW9uLmM6MjAzNQorbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAiYnkgQnJhbSBNb29sZW5hYXIgkbwuIgorCisjOiB2ZXJzaW9uLmM6MjAzOQorbXNnaWQgIlZpbSBpcyBvcGVuIHNvdXJjZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUiCittc2dzdHIgIlZpbSCCzYNJgVuDdoOTg1xcgVuDWILFgqCC6I6pl1KCyZR6lXqJwpRcXILFgrciCisKKyM6IHZlcnNpb24uYzoyMDQxCittc2dpZCAiSGVscCBwb29yIGNoaWxkcmVuIGluIFVnYW5kYSEiCittc2dzdHIgIoNFg0uDk4NfgsyMYoLcguqCyIKijnGLn4K9gr+CyYmHj5WC8CEiCisKKyM6IHZlcnNpb24uYzoyMDQyCittc2dpZCAidHlwZSAgOmhlbHAgaWNjZjxFbnRlcj4gICAgICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAij9qN14LIj+6V8YLNICAgICAgICAgICA6aGVscCBpY2NmPEVudGVyPiAgICAgICIKKworIzogdmVyc2lvbi5jOjIwNDQKK21zZ2lkICJ0eXBlICA6cTxFbnRlcj4gICAgICAgICAgICAgICB0byBleGl0ICAgICAgICAgIgorbXNnc3RyICKPSZe5greC6YLJgs0gICAgICAgICAgIDpxPEVudGVyPiAgICAgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MjA0NQorbXNnaWQgInR5cGUgIDpoZWxwPEVudGVyPiAgb3IgIDxGMT4gIGZvciBvbi1saW5lIGhlbHAiCittc2dzdHIgIoNJg5ODiYNDg5ODd4OLg3aCzSAgICAgOmhlbHA8RW50ZXI+IIKpIDxGMT4gICAiCisKKyM6IHZlcnNpb24uYzoyMDQ2Cittc2dpZCAidHlwZSAgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICAgZm9yIHZlcnNpb24gaW5mbyIKK21zZ3N0ciAig2+BW4NXg4eDk4/ulfGCzSAgICAgICA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICIKKworIzogdmVyc2lvbi5jOjIwNDkKK21zZ2lkICJSdW5uaW5nIGluIFZpIGNvbXBhdGlibGUgbW9kZSIKK21zZ3N0ciAiVmmM3Yq3g4KBW4NogsWTro3skoYiCisKKyM6IHZlcnNpb24uYzoyMDUwCittc2dpZCAidHlwZSAgOnNldCBub2NwPEVudGVyPiAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyIKK21zZ3N0ciAiVmltkISPp5JsgsmCt4LpgsmCzSAgICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICIKKworIzogdmVyc2lvbi5jOjIwNTEKK21zZ2lkICJ0eXBlICA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICKP2o3XgsiP7pXxgs0gICAgICAgICAgIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6MjA2NgorbXNnaWQgIm1lbnUgIEhlbHAtPk9ycGhhbnMgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIo/ajdeCzYOBg2qDhYFbgswgg3eDi4N2gaiMx46ZIILwjlGPxoK1gsSJuoKzgqIgICAiCisKKyM6IHZlcnNpb24uYzoyMDY4Cittc2dpZCAiUnVubmluZyBtb2RlbGVzcywgdHlwZWQgdGV4dCBpcyBpbnNlcnRlZCIKK21zZ3N0ciAig4KBW4NolrOCxY7AjXOShiwgg16DQ4N2grWCvZW2jpqCqpF9k/yCs4LqgtyCtyIKKworIzogdmVyc2lvbi5jOjIwNjkKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBJbnNlcnQgTW9kZSAgIgorbXNnc3RyICKDgYNqg4WBW4LMIJXSj1eBqJFTkcyQ3ZLogaiRfZP8KI+JkFOO0imDgoFbg2iQ2JHWIgorCisjOiB2ZXJzaW9uLmM6MjA3MAorbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0d28gbW9kZXMgICAgICAiCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIILFg4KBW4Nol0yCySAgICAgICAiCisKKyM6IHZlcnNpb24uYzoyMDc0Cittc2dpZCAibWVudSAgRWRpdC0+R2xvYmFsIFNldHRpbmdzLT5Ub2dnbGUgVmkgQ29tcGF0aWJsZSIKK21zZ3N0ciAig4GDaoOFgVuCzCCV0o9XgaiRU5HMkN2S6IGoVmmM3Yq3g4KBW4NokNiR1iAgICAgICIKKworIzogdmVyc2lvbi5jOjIwNzUKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgVmltIGRlZmF1bHRzICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICCCxVZpbYLGgrWCxJOujewgICAgIgorCisjOiB2ZXJzaW9uLmM6MjEyMgorbXNnaWQgIlNwb25zb3IgVmltIGRldmVsb3BtZW50ISIKK21zZ3N0ciAiVmltgsyKSpStgvCJnomHgrWCxIKtgr6Cs4KiISIKKworIzogdmVyc2lvbi5jOjIxMjMKK21zZ2lkICJCZWNvbWUgYSByZWdpc3RlcmVkIFZpbSB1c2VyISIKK21zZ3N0ciAiVmltgsyTb5heg4aBW4NVgsmCyILBgsSCrYK+grOCoiEiCisKKyM6IHZlcnNpb24uYzoyMTI2Cittc2dpZCAidHlwZSAgOmhlbHAgc3BvbnNvcjxFbnRlcj4gICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAij9qN14LIj+6V8YLNICAgICAgICAgICA6aGVscCBzcG9uc29yPEVudGVyPiAgICIKKworIzogdmVyc2lvbi5jOjIxMjcKK21zZ2lkICJ0eXBlICA6aGVscCByZWdpc3RlcjxFbnRlcj4gICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICKP2o3XgsiP7pXxgs0gICAgICAgICAgIDpoZWxwIHJlZ2lzdGVyPEVudGVyPiAgIgorCisjOiB2ZXJzaW9uLmM6MjEyOQorbXNnaWQgIm1lbnUgIEhlbHAtPlNwb25zb3IvUmVnaXN0ZXIgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIo/ajdeCzYOBg2qDhYFbgswgg3eDi4N2gaiDWIN8g5ODVIFbL5NvmF4ggvCOUY/GgrWCxIm6grOCoiAgICIKKworIzogdmVyc2lvbi5jOjIxMzkKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICIgICCMeI2QOiBXaW5kb3dzIDk1Lzk4L01lIILwjJ+PbyAgIgorCisjOiB2ZXJzaW9uLmM6MjE0MgorbXNnaWQgInR5cGUgIDpoZWxwIHdpbmRvd3M5NTxFbnRlcj4gIGZvciBpbmZvIG9uIHRoaXMiCittc2dzdHIgIiCP2o3XgsiP7pXxgs0gICAgICAgICAgOmhlbHAgd2luZG93czk1PEVudGVyPiAiCisKKyM6IHdpbmRvdy5jOjIwMworbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiCDdoOMg3KDhYFbg0WDQoOTg2iDRYKqgqCC6ILcgrmC8SIKKworIzogd2luZG93LmM6NTgxCittc2dpZCAiRTQ0MjogQ2FuJ3Qgc3BsaXQgdG9wbGVmdCBhbmQgYm90cmlnaHQgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiRTQ0MjogjbaP44LGiUWJuoLwk6+OnoLJlaqKhIK3gumCsYLGgs2CxYKrgtyCuYLxIgorCisjOiB3aW5kb3cuYzoxMzQwCittc2dpZCAiRTQ0MzogQ2Fubm90IHJvdGF0ZSB3aGVuIGFub3RoZXIgd2luZG93IGlzIHNwbGl0IgorbXNnc3RyICJFNDQzOiCRvILMg0WDQoOTg2iDRYKqlaqKhIKzguqCxIKigumOnoLJgs2Ph4nxgsWCq4LcgrmC8SIKKworIzogd2luZG93LmM6MTgzNgorbXNnaWQgIkU0NDQ6IENhbm5vdCBjbG9zZSBsYXN0IHdpbmRvdyIKK21zZ3N0ciAiRTQ0NDogjcWM44LMg0WDQoOTg2iDRYLwlcKCtoLpgrGCxoLNgsWCq4LcgrmC8SIKKworIzogd2luZG93LmM6MjU2NworbXNnaWQgIkFscmVhZHkgb25seSBvbmUgd2luZG93IgorbXNnc3RyICKK+YLJg0WDQoOTg2iDRYLNMYLCgrWCqYKgguiC3IK5gvEiCisKKyM6IHdpbmRvdy5jOjI2MTQKK21zZ2lkICJFNDQ1OiBPdGhlciB3aW5kb3cgY29udGFpbnMgY2hhbmdlcyIKK21zZ3N0ciAiRTQ0NTogkbyCzINFg0KDk4Nog0WCyYLNlc+NWIKqgqCC6ILcgrciCisKKyM6IHdpbmRvdy5jOjQ0ODAKK21zZ2lkICJFNDQ2OiBObyBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFNDQ2OiCDSoFbg1xcg4uCzIm6gsmDdINAg0ODi5a8gqqCoILogtyCuYLxIgorCisjOiB3aW5kb3cuYzo0NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDc6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTQ0NzogcGF0aILJgs0gXCIlc1wiIILGgqKCpIN0g0CDQ4OLgqqCoILogtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTIzMiBpZl9wZXJsLnhzOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcwOiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5ICVzIgorbXNnc3RyICJFMzcwOiCDiYNDg3WDiYOKICVzIILwg42BW4NogsWCq4LcgrmC8YLFgrWCvSIKKworIzogaWZfcGVybC54czo1NTQKK21zZ2lkICJTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgUGVybCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisigrGCzINSg32Dk4Nogs2Ws4z4gsWCtywggrKC34LxgsiCs4KiOiBQZXJsg4mDQ4N1g4mDioLwg42BW4NogsWCq4LcgrmC8YLFgrWCvS4iCisKKyM6IGlmX3BlcmwueHM6NjA3Cittc2dpZCAiRTI5OTogUGVybCBldmFsdWF0aW9uIGZvcmJpZGRlbiBpbiBzYW5kYm94IHdpdGhvdXQgdGhlIFNhZmUgbW9kdWxlIgorbXNnc3RyICIiCisiRTI5OTogg1SDk4Nog3uDYoNOg1iCxYLNIFNhZmUgIgorIoOCg1eDhYFbg4uC8I5nl3CCtYLIgqJQZXJsg1iDToOKg3aDZ4LNi9aCtoLnguqCxIKigtyCtyIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODMKK21zZ2lkICJFZGl0IHdpdGggJm11bHRpcGxlIFZpbXMiCittc2dzdHIgIoplg3SDQINDg4uC8JXKgViCzCBWaW0ggsWV0o9XKCZNKSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODkKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgIpFTg3SDQINDg4uC8DGCwoLMIFZpbSCCxZXSj1coJlYpIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjU5OAorbXNnaWQgIiZEaWZmIHdpdGggVmltIgorbXNnc3RyICJWaW0ggsWNt5WqldKPVygmRCkiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NjExCittc2dpZCAiRWRpdCB3aXRoICZWaW0iCittc2dzdHIgIlZpbSCCxZXSj1coJlYpIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjYzMworbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICKK+ZG2gswgVmltIILFldKPVyAtICYiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NzQ2Cittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgIpFJkfCCs4Lqgr2DdINAg0ODi4LwIFZpbSCCxZXSj1ciCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg1IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcHJvY2VzczogQ2hlY2sgaWYgZ3ZpbSBpcyBpbiB5b3VyIHBhdGghIgorbXNnc3RyICKLTpOug0eDiYFbOiBndmltIILJg3CDWIKqksqCwYLEgqKC6YKpim2CqYLfgsSCrYK+grOCoiEiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg2IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTAwIEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY3Cittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgImd2aW1leHQuZGxsIINHg4mBWyIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTkKK21zZ2lkICJQYXRoIGxlbmd0aCB0b28gbG9uZyEiCittc2dzdHIgIoNwg1iCqpK3greCrILcgrchIgorCisjOiBnbG9iYWxzLmg6MTAyMgorbXNnaWQgIi0tTm8gbGluZXMgaW4gYnVmZmVyLS0iCittc2dzdHIgIi0tg2+DYoN0g0CCyY1zgqqCoILogtyCuYLxLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTE4NQorbXNnaWQgIkU0NzA6IENvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiRTQ3MDogg1KDfYOTg2iCqpKGkmaCs4LqgtyCtYK9IgorCisjOiBnbG9iYWxzLmg6MTE4NgorbXNnaWQgIkU0NzE6IEFyZ3VtZW50IHJlcXVpcmVkIgorbXNnc3RyICJFNDcxOiCI+JCUgqqVS5d2gsWCtyIKKworIzogZ2xvYmFscy5oOjExODcKK21zZ2lkICJFMTA6IFxcIHNob3VsZCBiZSBmb2xsb3dlZCBieSAvLCA/IG9yICYiCittc2dzdHIgIkUxMDogXFwggsyM44LNIC8ggqkgPyCCqSAmIILFgsiCr4Lqgs6CyILogtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTE4OQorbXNnaWQgIkUxMTogSW52YWxpZCBpbiBjb21tYW5kLWxpbmUgd2luZG93OyA8Q1I+IGV4ZWN1dGVzLCBDVFJMLUMgcXVpdHMiCittc2dzdHIgIkUxMTogg1KDfYOTg2iDiYNDg5OCxYLNlrOM+ILFgrc7IDxDUj6CxY7AjXMsIENUUkwtQ4LFguKC34LpIgorCisjOiBnbG9iYWxzLmg6MTE5MQorbXNnaWQgIkUxMjogQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaCIKK21zZ3N0ciAiIgorIkUxMjogjLuN3YLMg2aDQoOMg06DZ4OKguKDXoNPjJ+N9YLFgs1leHJjL3ZpbXJjgsyDUoN9g5ODaILNi5aJwoKzguqC3IK5gvEiCisKKyM6IGdsb2JhbHMuaDoxMTkzCittc2dpZCAiRTE3MTogTWlzc2luZyA6ZW5kaWYiCittc2dzdHIgIkUxNzE6IDplbmRpZiCCqoKgguiC3IK5gvEiCisKKyM6IGdsb2JhbHMuaDoxMTk0Cittc2dpZCAiRTYwMDogTWlzc2luZyA6ZW5kdHJ5IgorbXNnc3RyICJFNjAwOiA6ZW5kdHJ5IIKqgqCC6ILcgrmC8SIKKworIzogZ2xvYmFscy5oOjExOTUKK21zZ2lkICJFMTcwOiBNaXNzaW5nIDplbmR3aGlsZSIKK21zZ3N0ciAiRTE3MDogOmVuZHdoaWxlIIKqgqCC6ILcgrmC8SIKKworIzogZ2xvYmFscy5oOjExOTYKK21zZ2lkICJFNTg4OiA6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODg6IDp3aGlsZSCCzILIgqIgOmVuZHdoaWxlIIKqgqCC6ILcgrciCisKKyM6IGdsb2JhbHMuaDoxMTk4Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IIN0g0CDQ4OLgqqRto3dgrWC3IK3ICghIILwkseJwYLFj+OPkSkiCisKKyM6IGdsb2JhbHMuaDoxMTk5Cittc2dpZCAiRTQ3MjogQ29tbWFuZCBmYWlsZWQiCittc2dzdHIgIkU0NzI6IINSg32Dk4NogqqOuJRzgrWC3IK1gr0iCisKKyM6IGdsb2JhbHMuaDoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzQ6IFVua25vd24gZm9udHNldDogJXMiCittc2dzdHIgIkUyMzQ6IJaikm2CzIN0g0iDk4Nng1qDYoNnOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogVW5rbm93biBmb250OiAlcyIKK21zZ3N0ciAiRTIzNToglqKSbYLMg3SDSIOTg2c6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IIN0g0iDk4NnIFwiJXNcIiCCzYzFkuiVnYLFgs2CoILogtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTIxMAorbXNnaWQgIkU0NzM6IEludGVybmFsIGVycm9yIgorbXNnc3RyICJFNDczOiCT4JWUg0eDiYFbgsWCtyIKKworIzogZ2xvYmFscy5oOjEyMTEKK21zZ2lkICJJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiioSNnoLcguqC3IK1gr0iCisKKyM6IGdsb2JhbHMuaDoxMjEyCittc2dpZCAiRTE0OiBJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIkUxNDoglrOM+ILIg0GDaIOMg1iCxYK3IgorCisjOiBnbG9iYWxzLmg6MTIxMworbXNnaWQgIkU0NzQ6IEludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkU0NzQ6IJazjPiCyIj4kJSCxYK3IgorCisjOiBnbG9iYWxzLmg6MTIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDc1OiBJbnZhbGlkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQ3NToglrOM+ILIiPiQlILFgrc6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogJXMiCittc2dzdHIgIkUxNToglrOM+ILIjq6CxYK3OiAlcyIKKworIzogZ2xvYmFscy5oOjEyMTgKK21zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCittc2dzdHIgIkUxNjoglrOM+ILIlM2IzYLFgrciCisKKyM6IGdsb2JhbHMuaDoxMjE5Cittc2dpZCAiRTQ3NjogSW52YWxpZCBjb21tYW5kIgorbXNnc3RyICJFNDc2OiCWs4z4gsiDUoN9g5ODaILFgrciCisKKyM6IGdsb2JhbHMuaDoxMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzogXCIlc1wiIGlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJFMTc6IFwiJXNcIiCCzYNmg0KDjINOg2eDioLFgrciCisKKyM6IGdsb2JhbHMuaDoxMjI0Cittc2dpZCAiRTE4OiBVbmV4cGVjdGVkIGNoYXJhY3RlcnMgYmVmb3JlICc9JyIKK21zZ3N0ciAiRTE4OiCXXFyK+oK5gsqVto6agqogJz0nIILMkU+CyYKgguiC3IK1gr0iCisKKyM6IGdsb2JhbHMuaDoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjQ6IExpYnJhcnkgY2FsbCBmYWlsZWQgZm9yIFwiJXMoKVwiIgorbXNnc3RyICJFMzY0OiBcIiVzXCIoKSCCzIOJg0ODdYOJg4qMxI9vgsmOuJRzgrWC3IK1gr0iCisKKyM6IGdsb2JhbHMuaDoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDg6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgZnVuY3Rpb24gJXMiCittc2dzdHIgIkU0NDg6IIOJg0ODdYOJg4qCzIrWkJQgJXMggvCDjYFbg2iCxYKrgtyCuYLxgsWCtYK9IgorCisjOiBnbG9iYWxzLmg6MTIzNQorbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiCDfYFbg06CyZazjPiCyI1zlNSNhoKqjneS6IKzguqCxIKigtyCtYK9IgorCisjOiBnbG9iYWxzLmg6MTIzNgorbXNnaWQgIkUyMDogTWFyayBub3Qgc2V0IgorbXNnc3RyICJFMjA6IIN9gVuDToLNkN2S6IKzguqCxIKigtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTIzNworbXNnaWQgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIKK21zZ3N0ciAiRTIxOiAnbW9kaWZpYWJsZScggqqDSYN0gsiCzILFLCCVz41YgsWCq4LcgrmC8SIKKworIzogZ2xvYmFscy5oOjEyMzgKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IINYg06DioN2g2eCzJP8guqOcYKqkFuCt4KsgtyCtyIKKworIzogZ2xvYmFscy5oOjEyMzkKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6IJWbg3SDQINDg4uCzYKgguiC3IK5gvEiCisKKyM6IGdsb2JhbHMuaDoxMjQwCittc2dpZCAiRTI0OiBObyBzdWNoIGFiYnJldmlhdGlvbiIKK21zZ3N0ciAiRTI0OiCCu4LMguaCpILIklqPa5P8l82CzYKgguiC3IK5gvEiCisKKyM6IGdsb2JhbHMuaDoxMjQxCittc2dpZCAiRTQ3NzogTm8gISBhbGxvd2VkIgorbXNnc3RyICJFNDc3OiAhIILNi5aJwoKzguqCxIKigtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTI0MworbXNnaWQgIkUyNTogR1VJIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIkUyNTogR1VJgs2OZ5dwlXOJwpRcXILFgrc6IINSg5ODcINDg4uOnoLJlrOM+ILJgrOC6oLEgqKC3IK3IgorCisjOiBnbG9iYWxzLmg6MTI0NgorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI2OiCDd4N1g4mDQ4zqgs2OZ5dwlXOJwpRcXILFgrc6IINSg5ODcINDg4uOnoLJlrOM+ILJgrOC6oLEgqKC3IK3XG4iCisKKyM6IGdsb2JhbHMuaDoxMjQ5Cittc2dpZCAiRTI3OiBGYXJzaSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNzogg3mDi4NWg0GM6oLNjmeXcJVzicKUXFyCxYK3OiCDUoOTg3CDQ4OLjp6CyZazjPiCyYKzguqCxIKigtyCt1xuIgorCisjOiBnbG9iYWxzLmg6MTI1MgorbXNnaWQgIkU4MDA6IEFyYWJpYyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkU4MDA6IINBg4mDcoNBjOqCzY5nl3CVc4nClFxcgsWCtzogg1KDk4Nwg0ODi46egsmWs4z4gsmCs4LqgsSCooLcgrdcbiIKKworIzogZ2xvYmFscy5oOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiCCu4LMguaCpILIlryCzINug0ODiYNDg2eDT4OLgVuDdoLNgqCC6ILcgrmC8TogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjU3Cittc2dpZCAiRTI5OiBObyBpbnNlcnRlZCB0ZXh0IHlldCIKK21zZ3N0ciAiRTI5OiCC3IK+g2WDTINYg2eCqpF9k/yCs4LqgsSCooLcgrmC8SIKKworIzogZ2xvYmFscy5oOjEyNTgKK21zZ2lkICJFMzA6IE5vIHByZXZpb3VzIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiRTMwOiCIyJFPgsmDUoN9g5ODaI1zgqqCoILogtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTI1OQorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IIK7gsyC5oKkgsiDfYNig3ODk4NPgs2CoILogtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTI2MAorbXNnaWQgIkU0Nzk6IE5vIG1hdGNoIgorbXNnc3RyICJFNDc5OiCKWZOWgs2CoILogtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDgwOiBObyBtYXRjaDogJXMiCittc2dzdHIgIkU0ODA6IIpZk5aCzYKgguiC3IK5gvE6ICVzIgorCisjOiBnbG9iYWxzLmg6MTI2MgorbXNnaWQgIkUzMjogTm8gZmlsZSBuYW1lIgorbXNnc3RyICJFMzI6IIN0g0CDQ4OLlryCqoKgguiC3IK5gvEiCisKKyM6IGdsb2JhbHMuaDoxMjYzCittc2dpZCAiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTMzOiCQs4tLlVxcjLuSdYq3gqqC3IK+jsCNc4KzguqCxIKigtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTI2NAorbXNnaWQgIkUzNDogTm8gcHJldmlvdXMgY29tbWFuZCIKK21zZ3N0ciAiRTM0OiCDUoN9g5ODaIKqgtyCvo7AjXOCs4LqgsSCooLcgrmC8SIKKworIzogZ2xvYmFscy5oOjEyNjUKK21zZ2lkICJFMzU6IE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTM1OiCQs4tLlVxcjLuCqoLcgr6OwI1zgrOC6oLEgqKC3IK5gvEiCisKKyM6IGdsb2JhbHMuaDoxMjY2Cittc2dpZCAiRTQ4MTogTm8gcmFuZ2UgYWxsb3dlZCIKK21zZ3N0ciAiRTQ4MToglM2IzY53kuiCzYuWicKCs4LqgsSCooLcgrmC8SIKKworIzogZ2xvYmFscy5oOjEyNjgKK21zZ2lkICJFMzY6IE5vdCBlbm91Z2ggcm9vbSIKK21zZ3N0ciAiRTM2OiCPW5WqgsiXZZfKgqqCoILogtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6ICVzIILGgqKCpJa8kU+CzJNvmF6Cs4Lqgr2DVIFbg2+CzYKgguiC3IK5gvEiCisKKyM6IGdsb2JhbHMuaDoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODI6IENhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJFNDgyOiCDdINAg0ODiyAlcyCC8I3skKyCxYKrgtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTI3NAorbXNnaWQgIkU0ODM6IENhbid0IGdldCB0ZW1wIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTQ4MzogiOqOnoN0g0CDQ4OLgsyWvJFPgvCO5pO+gsWCq4LcgrmC8SIKKworIzogZ2xvYmFscy5oOjEyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NDogQ2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJFNDg0OiCDdINAg0ODiyBcIiVzXCIggvCKSoKvgtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg1OiBDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIkU0ODU6IIN0g0CDQ4OLICVzIILwk8eNnoLfgtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTI3NworbXNnaWQgIkUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTM3OiCNxYzjgsyVz41YgqqV25G2grOC6oLEgqKC3IK5gvEgKCEggvCSx4nBgsWVz41YgvCUaor8KSIKKworIzogZ2xvYmFscy5oOjEyNzgKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODogiPiQlIKqi/OCxYK3IgorCisjOiBnbG9iYWxzLmg6MTI4MAorbXNnaWQgIkUzOTogTnVtYmVyIGV4cGVjdGVkIgorbXNnc3RyICJFMzk6IJCUkmyCqpd2i4GCs4LqgsSCooLcgrciCisKKyM6IGdsb2JhbHMuaDoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDogg0eDiYFbg3SDQINDg4sgJXMggvCKSoKvgtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTI4NgorbXNnaWQgIkUyMzM6IGNhbm5vdCBvcGVuIGRpc3BsYXkiCittc2dzdHIgIkUyMzM6IINmg0KDWIN2g4yDQ4LwikqCr4LcgrmC8SIKKworIzogZ2xvYmFscy5oOjEyODgKK21zZ2lkICJFNDE6IE91dCBvZiBtZW1vcnkhIgorbXNnc3RyICJFNDE6IIOBg4KDioKqkHOCq4nKgsSC3IK1gr0hIgorCisjOiBnbG9iYWxzLmg6MTI5MAorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kIgorbXNnc3RyICKDcINegVuDk4LNgt2CwoKpguiC3IK5gvGCxYK1gr0iCisKKyM6IGdsb2JhbHMuaDoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODY6IFBhdHRlcm4gbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQ4Njogg3CDXoFbg5OCzYLdgsKCqYLogtyCuYLxgsWCtYK9OiAlcyIKKworIzogZ2xvYmFscy5oOjEyOTMKK21zZ2lkICJFNDg3OiBBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJFNDg3OiCI+JCUgs2Qs4LMkmyCxYLIgq+C6oLOgsiC6ILcgrmC8SIKKworIzogZ2xvYmFscy5oOjEyOTUKK21zZ2lkICJFNDU5OiBDYW5ub3QgZ28gYmFjayB0byBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkU0NTk6IJFPgsyDZoNCg4yDToNng4qCyZbfguqC3IK5gvEiCisKKyM6IGdsb2JhbHMuaDoxMjk5Cittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0Mjogg0eDiYFbgs2CoILogtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTMwMQorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0MzogilmTlpW2jpqX8YKqlGqRuYK1gsSCooLcgrciCisKKyM6IGdsb2JhbHMuaDoxMzAyCittc2dpZCAiRTQ0OiBDb3JydXB0ZWQgcmVnZXhwIHByb2dyYW0iCittc2dzdHIgIkU0NDoglXOQs4LIkLOLS5VcXIy7g3aDjYNPg4mDgILFgrciCisKKyM6IGdsb2JhbHMuaDoxMzAzCittc2dpZCAiRTQ1OiAncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ1OiAncmVhZG9ubHknIINJg3aDVoOHg5OCqpDdkuiCs4LqgsSCooLcgrcgKCEggvCSx4nBgsWP44+RgqspIgorCisjOiBnbG9iYWxzLmg6MTMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDY6IENhbm5vdCBzZXQgcmVhZC1vbmx5IHZhcmlhYmxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ2OiCTx47mkOqXcJXPkJQgXCIlc1wiIILJkN2S6IK3gumCsYLGgs2CxYKrgtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTMwOAorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0Nzogg0eDiYFbg3SDQINDg4uCzJPHjZ6ShoLJg0eDiYFbgqqUrZC2grWC3IK1gr0iCisKKyM6IGdsb2JhbHMuaDoxMzExCittc2dpZCAiRTQ4OiBOb3QgYWxsb3dlZCBpbiBzYW5kYm94IgorbXNnc3RyICJFNDg6IINUg5ODaIN7g2KDToNYgsWCzYuWgrOC6oLcgrmC8SIKKworIzogZ2xvYmFscy5oOjEzMTMKK21zZ2lkICJFNTIzOiBOb3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNTIzOiCCsYKxgsWCzYuWicKCs4LqgtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTMxNgorbXNnaWQgIkUzNTk6IFNjcmVlbiBtb2RlIHNldHRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTM1OTogg1iDToOKgVuDk4OCgVuDaILMkN2S6ILJgs2RzomegrWCxIKigtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTMxOAorbXNnaWQgIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIKK21zZ3N0ciAiRTQ5OiCWs4z4gsiDWINOg42BW4OLl8qCxYK3IgorCisjOiBnbG9iYWxzLmg6MTMxOQorbXNnaWQgIkU5MTogJ3NoZWxsJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIkU5MTogJ3NoZWxsJyCDSYN2g1aDh4OTgqqL84LFgrciCisKKyM6IGdsb2JhbHMuaDoxMzIxCittc2dpZCAiRTI1NTogQ291bGRuJ3QgcmVhZCBpbiBzaWduIGRhdGEhIgorbXNnc3RyICJFMjU1OiBzaWduIILMg2aBW4NegvCTx42egt+C3IK5gvGCxYK1gr0iCisKKyM6IGdsb2JhbHMuaDoxMzIzCittc2dpZCAiRTcyOiBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUiCittc2dzdHIgIkU3Mjogg1iDj4Nig3aDdINAg0ODi4LMg06DjYFbg1mOnoNHg4mBW4LFgrciCisKKyM6IGdsb2JhbHMuaDoxMzI0Cittc2dpZCAiRTczOiB0YWcgc3RhY2sgZW1wdHkiCittc2dzdHIgIkU3Mzogg16DT4NYg16DYoNOgqqL84LFgrciCisKKyM6IGdsb2JhbHMuaDoxMzI1Cittc2dpZCAiRTc0OiBDb21tYW5kIHRvbyBjb21wbGV4IgorbXNnc3RyICJFNzQ6IINSg32Dk4NogqqVoY5HgreCrILcgrciCisKKyM6IGdsb2JhbHMuaDoxMzI2Cittc2dpZCAiRTc1OiBOYW1lIHRvbyBsb25nIgorbXNnc3RyICJFNzU6IJa8kU+CqpK3greCrILcgrciCisKKyM6IGdsb2JhbHMuaDoxMzI3Cittc2dpZCAiRTc2OiBUb28gbWFueSBbIgorbXNnc3RyICJFNzY6IFsggqqRvYK3gqyC3IK3IgorCisjOiBnbG9iYWxzLmg6MTMyOAorbXNnaWQgIkU3NzogVG9vIG1hbnkgZmlsZSBuYW1lcyIKK21zZ3N0ciAiRTc3OiCDdINAg0ODi5a8gqqRvYK3gqyC3IK3IgorCisjOiBnbG9iYWxzLmg6MTMyOQorbXNnaWQgIkU0ODg6IFRyYWlsaW5nIGNoYXJhY3RlcnMiCittc2dzdHIgIkU0ODg6IJddlaqCyJW2jpqCqozjguuCyYKgguiC3IK3IgorCisjOiBnbG9iYWxzLmg6MTMzMAorbXNnaWQgIkU3ODogVW5rbm93biBtYXJrIgorbXNnc3RyICJFNzg6IJaikm2CzIN9gVuDTiIKKworIzogZ2xvYmFscy5oOjEzMzEKK21zZ2lkICJFNzk6IENhbm5vdCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICJFNzk6IIOPg0ODi4Nog0qBW4NogvCTV4pKgsWCq4LcgrmC8SIKKworIzogZ2xvYmFscy5oOjEzMzMKK21zZ2lkICJFNTkxOiAnd2luaGVpZ2h0JyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW5oZWlnaHQnIgorbXNnc3RyICJFNTkxOiAnd2luaGVpZ2h0JyCCzSAnd2lubWluaGVpZ2h0JyCC5oLoj6yCs4KtgsWCq4LcgrmC8SIKKworIzogZ2xvYmFscy5oOjEzMzUKK21zZ2lkICJFNTkyOiAnd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiRTU5MjogJ3dpbndpZHRoJyCCzSAnd2lubWlud2lkdGgnIILmguiPrIKzgq2CxYKrgtyCuYLxIgorCisjOiBnbG9iYWxzLmg6MTMzOAorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiCPkY2egt2ShoLMg0eDiYFbIgorCisjOiBnbG9iYWxzLmg6MTMzOQorbXNnaWQgIlplcm8gY291bnQiCittc2dzdHIgIoNbg42DSoNFg5ODZyIKKworIzogZ2xvYmFscy5oOjEzNDEKK21zZ2lkICJFODE6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0IgorbXNnc3RyICJFODE6IINYg06DioN2g2eIyIpPgsU8U0lEPoKqjmeC7YLqgtyCtYK9IgorCisjOiBnbG9iYWxzLmg6MTM0NAorbXNnaWQgIkU0NDk6IEludmFsaWQgZXhwcmVzc2lvbiByZWNlaXZlZCIKK21zZ3N0ciAiRTQ0OToglrOM+ILIjq6C8I7zgq+O5oLogtyCtYK9IgorCisjOiBnbG9iYWxzLmg6MTM0NworbXNnaWQgIkU0NjM6IFJlZ2lvbiBpcyBndWFyZGVkLCBjYW5ub3QgbW9kaWZ5IgorbXNnc3RyICJFNDYzOiCXzIjmgqqV24zsgrOC6oLEgqKC6YLMgsUsIJXPjViCxYKrgtyCuYLxIgpkaWZmIC0tZ2l0IGEvc3JjL3BvL2tvLnBvIGIvc3JjL3BvL2tvLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNGNhODUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8va28ucG8KQEAgLTAsMCArMSw2NTgwIEBACisjIEtvcmVhbiB0cmFuc2xhdGlvbiBmb3IgVmltCisjCisjIEZJUlNUIEFVVEhPUiBOYW0gU3VuZ0h5dW4gPG5hbXNoQGtsZHAub3JnPiwgMjAwMC0yMDA0CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiB2aW0gNi4zXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IE5hbSBTdW5nSHl1biA8bmFtc2hAa2xkcC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDQtMDUtMTcgMTc6MjcrMDkwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMDUtMTcgMTg6MTcrMDkwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTmFtIFN1bmdIeXVuIDxuYW1zaEBrbGRwLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHVFAgS29yZWFuIDxnbm9tZS1rci10cmFuc2xhdGlvbkBnbm9tZS5vci5rcj5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1ldWMta3JcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGJ1ZmZlci5jOjEwMgorbXNnaWQgIkU4MjogQ2Fubm90IGFsbG9jYXRlIGFueSBidWZmZXIsIGV4aXRpbmcuLi4iCittc2dzdHIgIkU4MjogufbG27imIMfStOfH0iC89iC++L7uvK0gs6GzwLTPtNkuLi4iCisKKyM6IGJ1ZmZlci5jOjEwNQorbXNnaWQgIkU4MzogQ2Fubm90IGFsbG9jYXRlIGJ1ZmZlciwgdXNpbmcgb3RoZXIgb25lLi4uIgorbXNnc3RyICJFODM6ILn2xtu4piDH0rTnx9IgvPYgvvi+7rytILTZuKUgsMkgu+e/68fVtM+02S4uLiIKKworIzogYnVmZmVyLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MTU6IE5vIGJ1ZmZlcnMgd2VyZSB1bmxvYWRlZCIKK21zZ3N0ciAiRTUxNTogs7u3wcH4ILn2xtuwoSC++L3AtM+02SIKKworIzogYnVmZmVyLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MTY6IE5vIGJ1ZmZlcnMgd2VyZSBkZWxldGVkIgorbXNnc3RyICJFNTE2OiDB9r/2wfggufbG27ChIL74vcC0z7TZIgorCisjOiBidWZmZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUxNzogTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAiRTUxNzogv8/A/Mj3IMH2v/bB+CC59sbbsKEgvvi9wLTPtNkiCisKKyM6IGJ1ZmZlci5jOjgxNworbXNnaWQgIjEgYnVmZmVyIHVubG9hZGVkIgorbXNnc3RyICK59sbbIMfRILCzsKEgs7u3wcGzvcC0z7TZIgorCisjOiBidWZmZXIuYzo4MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB1bmxvYWRlZCIKK21zZ3N0ciAiufbG2yAlZCCws7ChILO7t8HBs73AtM+02SIKKworIzogYnVmZmVyLmM6ODI0Cittc2dpZCAiMSBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiufbG2yDH0SCws7ChIMH2v/bBs73AtM+02SIKKworIzogYnVmZmVyLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgZGVsZXRlZCIKK21zZ3N0ciAiufbG2yAlZCCws7ChIMH2v/bBs73AtM+02SIKKworIzogYnVmZmVyLmM6ODMxCittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICK59sbbIMfRILCzsKEgv8/A/Mj3IMH2v/bBs73AtM+02SIKKworIzogYnVmZmVyLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgd2lwZWQgb3V0IgorbXNnc3RyICK59sbbICVksLOwoSC/z8D8yPcgwfa/9sGzvcC0z7TZIgorCisjOiBidWZmZXIuYzo4OTQKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiC52bLvILn2xtu4piDDo8C7ILz2IL74vcC0z7TZIgorCisjLiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorIzogYnVmZmVyLmM6OTMzCittc2dpZCAiRTg1OiBUaGVyZSBpcyBubyBsaXN0ZWQgYnVmZmVyIgorbXNnc3RyICJFODU6ILOqv621yCC59sbbsKEgvvi9wLTPtNkiCisKKyM6IGJ1ZmZlci5jOjk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFODY6IEJ1ZmZlciAlbGQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkU4NjogufbG2yAlbGTAzCiwoSkgwbjA58fPwfYgvsq9wLTPtNkiCisKKyM6IGJ1ZmZlci5jOjk0OAorbXNnaWQgIkU4NzogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg3OiC4tsH2uLcgufbG28DUtM+02SIKKworIzogYnVmZmVyLmM6OTUwCittc2dpZCAiRTg4OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg4OiDDuSC5+MKwILn2xtvA1LTPtNkiCisKKyM6IGJ1ZmZlci5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFODk6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgJWxkIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIiIKKyJFODk6ILn2xtsgJWxkwLsouKYpILi2wfa4t8C4t84gsO3EoyC12iDA+sDlx8/B9iC+yr7SvcC0z7TZICi1pL7uvrK3wbjpICEgtPXHzyIKKyKx4ikiCisKKyM6IGJ1ZmZlci5jOjEwMDUKK21zZ2lkICJFOTA6IENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU5MDoguLbB9ri3ILn2xtu4piCzu7ixILz2IL74vcC0z7TZIgorCisjOiBidWZmZXIuYzoxNTM4Cittc2dpZCAiVzE0OiBXYXJuaW5nOiBMaXN0IG9mIGZpbGUgbmFtZXMgb3ZlcmZsb3ciCittc2dzdHIgIlcxNDogsOaw7TogxsTAzyDAzLinILjxt8/AzCCz0cPGvcC0z7TZIgorCisjOiBidWZmZXIuYzoxNzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MjogQnVmZmVyICVsZCBub3QgZm91bmQiCittc2dzdHIgIkU5MjogufbG2yAlbGTAuyi4pikgw6PAuyC89iC++L3AtM+02SIKKworIzogYnVmZmVyLmM6MTk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFOTM6IE1vcmUgdGhhbiBvbmUgbWF0Y2ggZm9yICVzIgorbXNnc3RyICJFOTM6ICVzwLsouKYpIMfPs6ogwMy78yDDo77SvcC0z7TZIgorCisjOiBidWZmZXIuYzoxOTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiAlc7/NILjCtMIgufbG27ChIL74vcC0z7TZIgorCisjOiBidWZmZXIuYzoyMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIgorbXNnc3RyICIlbGQgwdkiCisKKyM6IGJ1ZmZlci5jOjI0MjIKK21zZ2lkICJFOTU6IEJ1ZmZlciB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTk1OiDAzCDAzLinwLsgsKHB+CC59sbbsKEgwMy5zCDA1r3AtM+02SIKKworIzogYnVmZmVyLmM6MjcxNworbXNnaWQgIiBbTW9kaWZpZWRdIgorbXNnc3RyICIgW7nZsvFdIgorCisjOiBidWZmZXIuYzoyNzIyCittc2dpZCAiW05vdCBlZGl0ZWRdIgorbXNnc3RyICJbsO3EocH2IL7KvtLAvV0iCisKKyM6IGJ1ZmZlci5jOjI3MjcKK21zZ2lkICJbTmV3IGZpbGVdIgorbXNnc3RyICJbu/UgxsTAz10iCisKKyM6IGJ1ZmZlci5jOjI3MjgKK21zZ2lkICJbUmVhZCBlcnJvcnNdIgorbXNnc3RyICJbwNCx4iC/obevXSIKKworIzogYnVmZmVyLmM6MjczMCBmaWxlaW8uYzoyMTEyCittc2dpZCAiW3JlYWRvbmx5XSIKK21zZ3N0ciAiW8DQseIgwPy/610iCisKKyM6IGJ1ZmZlci5jOjI3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lIC0tJWQlJS0tIgorbXNnc3RyICIxIMHZIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAtLSVkJSUtLSIKK21zZ3N0ciAiJWxkIMHZIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICIlbGQgLyAlbGQgwdkgLS0lZCUlLS0gxK0gIgorCisjOiBidWZmZXIuYzoyODY4Cittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJbxsTAzyC++MC9XSIKKworIy4gbXVzdCBiZSBhIGhlbHAgYnVmZmVyCisjOiBidWZmZXIuYzoyOTA4Cittc2dpZCAiaGVscCIKK21zZ3N0ciAitbW/8ri7IgorCisjOiBidWZmZXIuYzozNDY3IHNjcmVlbi5jOjUwNzUKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIlu1tb/yuLtdIgorCisjOiBidWZmZXIuYzozNDk5IHNjcmVlbi5jOjUwODEKK21zZ2lkICJbUHJldmlld10iCittc2dzdHIgIlu5zLiuILq4seJdIgorCisjOiBidWZmZXIuYzozNzc5Cittc2dpZCAiQWxsIgorbXNnc3RyICK48LXOIgorCisjOiBidWZmZXIuYzozNzc5Cittc2dpZCAiQm90IgorbXNnc3RyICK52bTaIgorCisjOiBidWZmZXIuYzozNzgxCittc2dpZCAiVG9wIgorbXNnc3RyICKywLTrseIiCisKKyM6IGJ1ZmZlci5jOjQ1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgQnVmZmVyIGxpc3Q6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjILn2xtsguPG3zzpcbiIKKworIzogYnVmZmVyLmM6NDU2MgorbXNnaWQgIltFcnJvciBMaXN0XSIKK21zZ3N0ciAiW7+ht68guPG3z10iCisKKyM6IGJ1ZmZlci5jOjQ1NzUgbWVtbGluZS5jOjE1MjEKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIlvGxMDPIL74wL1dIgorCisjOiBidWZmZXIuYzo0ODg4Cittc2dpZCAiIgorIlxuIgorIi0tLSBTaWducyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gseLIoyAtLS0iCisKKyM6IGJ1ZmZlci5jOjQ5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2lnbnMgZm9yICVzOiIKK21zZ3N0ciAiJXO/oSC068fRILHiyKM6IgorCisjOiBidWZmZXIuYzo0OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBsaW5lPSVsZCAgaWQ9JWQgIG5hbWU9JXMiCittc2dzdHIgIiAgICDB2T0lbGQgIGlkPSVkICDAzLinPSVzIgorCisjOiBkaWZmLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NjogQ2FuIG5vdCBkaWZmIG1vcmUgdGhhbiAlbGQgYnVmZmVycyIKK21zZ3N0ciAiRTk2OiAlbGSwsyDAzLvzwMcgufbG27+hILTrx9i8rbTCIGRpZma4piDH0iC89iC++L3AtM+02SIKKworIzogZGlmZi5jOjcxMworbXNnaWQgIkU5NzogQ2Fubm90IGNyZWF0ZSBkaWZmcyIKK21zZ3N0ciAiRTk3OiBkaWZmuKYguLi16SC89iC++L3AtM+02SIKKworIzogZGlmZi5jOjgxOAorbXNnaWQgIlBhdGNoIGZpbGUiCittc2dzdHIgIsbQxbAgxsTAzyIKKworIzogZGlmZi5jOjEwNjkKK21zZ2lkICJFOTg6IENhbm5vdCByZWFkIGRpZmYgb3V0cHV0IgorbXNnc3RyICJFOTg6IGRpZmYgw+K3wsC7IMDQwLsgvPYgvvi9wLTPtNkiCisKKyM6IGRpZmYuYzoxODE5Cittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IMf2wOcgufbG27TCIGRpZmYgu/PFwrChIL7GtNW0z7TZIgorCisjOiBkaWZmLmM6MTgzMQorbXNnaWQgIkUxMDA6IE5vIG90aGVyIGJ1ZmZlciBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDA6ILTZuKUgufbG28Hfv6EgZGlmZiC788XCwM4gsNQgvvi9wLTPtNkiCisKKyM6IGRpZmYuYzoxODM5Cittc2dpZCAiRTEwMTogTW9yZSB0aGFuIHR3byBidWZmZXJzIGluIGRpZmYgbW9kZSwgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlIgorbXNnc3RyICIiCisiRTEwMTogtc6wsyDAzLvzwMcgufbG27ChIGRpZmYgu/PFwr+pvK0gvu62siCwzcC7IL3hvt/H0iDB9iC+yyC89iC++L3AtM+02SIKKworIzogZGlmZi5jOjE4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMjogQ2FuJ3QgZmluZCBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTAyOiBcIiVzXCIgufbG27imIMOjwLsgvPYgvvi9wLTPtNkiCisKKyM6IGRpZmYuYzoxODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzogXCIlc1wiILn2xtu0wiBkaWZmILvzxcKwoSC+xrTVtM+02SIKKworIzogZGlncmFwaC5jOjIxOTkKK21zZ2lkICJFMTA0OiBFc2NhcGUgbm90IGFsbG93ZWQgaW4gZGlncmFwaCIKK21zZ3N0ciAiRTEwNDogZGlncmFwaL+htMIgRXNjYXBlwLsgvrUgvPYgvvi9wLTPtNkiCisKKyM6IGRpZ3JhcGguYzoyMzg0Cittc2dpZCAiRTU0NDogS2V5bWFwIGZpbGUgbm90IGZvdW5kIgorbXNnc3RyICJFNTQ0OiDFsLjKIMbEwM/AuyDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBkaWdyYXBoLmM6MjQxMQorbXNnaWQgIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTEwNTogutK3r7XpwM4gxsTAz7+hvK0gOmxvYWRrZXltYXDAuyC757/rx8/B9iC+yr7SvcC0z7TZIgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiILO5uLsgv8+8uiAoXk5eUCkiCisKKyMuIGN0cmxfeF9tb2RlID09IDAsIF5QL15OIGNvbXBsLgorIzogZWRpdC5jOjQxCittc2dpZCAiIF5YIG1vZGUgKF5FXlleTF5dXkZeSV5LXkReVl5OXlApIgorbXNnc3RyICIgXlgguPC15SAoXkVeWV5MXl1eRl5JXkteRF5WXk5eUCkiCisKKyMuIFNjcm9sbCBoYXMgaXQncyBvd24gbXNncywgaW4gaXQncyBwbGFjZSB0aGVyZSBpcyB0aGUgbXNnIGZvciBsb2NhbAorIy4gKiBjdHJsX3hfbW9kZSA9IDAgKGVnIGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfTE9DQUwpICAtLSBBY2V2ZWRvCisjOiBlZGl0LmM6NDQKK21zZ2lkICIgS2V5d29yZCBMb2NhbCBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiILO5uLsgt87EwyC/z7y6ICheTl5QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkxeTl5QKSIKK21zZ3N0ciAiIMD8w7wgwdkgv8+8uiAoXkxeTl5QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRl5OXlApIgorbXNnc3RyICIgxsTAzyDAzLinIL/PvLogKF5GXk5eUCkiCisKKyM6IGVkaXQuYzo0NworbXNnaWQgIiBUYWcgY29tcGxldGlvbiAoXl1eTl5QKSIKK21zZ3N0ciAiIMXCsdcgv8+8uiAoXl1eTl5QKSIKKworIzogZWRpdC5jOjQ4Cittc2dpZCAiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiILDmt84gxtDFzyC/z7y6ICheTl5QKSIKKworIzogZWRpdC5jOjQ5Cittc2dpZCAiIERlZmluaXRpb24gY29tcGxldGlvbiAoXkReTl5QKSIKK21zZ3N0ciAiIMGkwMcgv8+8uiAoXkReTl5QKSIKKworIzogZWRpdC5jOjUxCittc2dpZCAiIERpY3Rpb25hcnkgY29tcGxldGlvbiAoXkteTl5QKSIKK21zZ3N0ciAiIMDat+G55iC/z7y6ICheS15OXlApIgorCisjOiBlZGl0LmM6NTIKK21zZ2lkICIgVGhlc2F1cnVzIGNvbXBsZXRpb24gKF5UXk5eUCkiCittc2dzdHIgIiC56bD6u+fA/CC/z7y6ICheVF5OXlApIgorCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WXk5eUCkiCittc2dzdHIgIiC47bfJx+Agv8+8uiAoXlZeTl5QKSIKKworIzogZWRpdC5jOjU2Cittc2dpZCAiSGl0IGVuZCBvZiBwYXJhZ3JhcGgiCittc2dzdHIgIrTctvTAxyC4tsH2uLcguLizsiIKKworIzogZWRpdC5jOjk2MgorbXNnaWQgIid0aGVzYXVydXMnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiJ3RoZXNhdXJ1cycgv8m8x8DMILrxvvq9wLTPtNkiCisKKyM6IGVkaXQuYzoxMTY2Cittc2dpZCAiJ2RpY3Rpb25hcnknIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiJ2RpY3Rpb25hcnknIL/JvMfAzCC68b76vcC0z7TZIgorCisjOiBlZGl0LmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAiu+fA/CDDo7TCIMHfOiAlcyIKKworIzogZWRpdC5jOjIzNjgKK21zZ2lkICIgKGluc2VydCkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAos6K/9rPWseIpIL26xam30SAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjM3MAorbXNnaWQgIiAocmVwbGFjZSkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoudmy3ikgvbrFqbfRICheRS9eWSkiCisKKyM6IGVkaXQuYzoyNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nOiAlcyIKK21zZ3N0ciAiw6O0wiDB3zogJXMiCisKKyM6IGVkaXQuYzoyNzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIHRhZ3MuIgorbXNnc3RyICLFwrHXIMOjtMIgwd8uIgorCisjOiBlZGl0LmM6MzM4MQorbXNnaWQgIiBBZGRpbmciCittc2dzdHIgIiC09cfPseIiCisKKyMuIHNob3dtb2RlIG1pZ2h0IHJlc2V0IHRoZSBpbnRlcm5hbCBsaW5lIHBvaW50ZXJzLCBzbyBpdCBtdXN0CisjLiAqIGJlIGNhbGxlZCBiZWZvcmUgbGluZSA9IG1sX2dldCgpLCBvciB3aGVuIHRoaXMgYWRkcmVzcyBpcyBubworIy4gKiBsb25nZXIgbmVlZGVkLiAgLS0gQWNldmVkby4KKyMuCisjOiBlZGl0LmM6MzQzMAorbXNnaWQgIi0tIFNlYXJjaGluZy4uLiIKK21zZ3N0ciAiLS0gw6O0wiDB3y4uLiIKKworIzogZWRpdC5jOjM0ODYKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICK/+LehtOu3ziC6ubG4IgorCisjOiBlZGl0LmM6MzQ5MQorbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICK02bilIMHZv6Egs7m4uyIKKworIzogZWRpdC5jOjM0OTYKK21zZ2lkICJUaGUgb25seSBtYXRjaCIKK21zZ3N0ciAiVGhlIG9ubHkgbWF0Y2giCisKKyM6IGVkaXQuYzozNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICJtYXRjaCAlZCBvZiAlZCIKKworIzogZWRpdC5jOjM1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgIm1hdGNoICVkIgorCisjLiBTa2lwIGZ1cnRoZXIgYXJndW1lbnRzIGJ1dCBkbyBjb250aW51ZSB0bworIy4gKiBzZWFyY2ggZm9yIGEgdHJhaWxpbmcgY29tbWFuZC4KKyM6IGV2YWwuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDY6IFVua25vd24gdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwNjoguPC4o7TCILqvvPY6IFwiJXNcIiIKKworIzogZXZhbC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNzogTWlzc2luZyBicmFjZXM6ICVzIgorbXNnc3RyICJFMTA3OiCw/cijIL74wL06ICVzIgorCisjOiBldmFsLmM6MTQzNSBldmFsLmM6MTQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA4OiBObyBzdWNoIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDg6IMDMt7Eguq+89iC++MC9OiBcIiVzXCIiCisKKyM6IGV2YWwuYzoxNzA1Cittc2dpZCAiRTEwOTogTWlzc2luZyAnOicgYWZ0ZXIgJz8nIgorbXNnc3RyICJFMTA5OiAnPycgtdq/oSAnOifAzCC++L3AtM+02SIKKworIzogZXZhbC5jOjIzMjcKK21zZ2lkICJFMTEwOiBNaXNzaW5nICcpJyIKK21zZ3N0ciAiRTExMDogJyknsKEgvvi9wLTPtNkiCisKKyM6IGV2YWwuYzoyMzg5Cittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6ICddJ8DMIL74vcC0z7TZIgorCisjOiBldmFsLmM6MjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEyOiBPcHRpb24gbmFtZSBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiRTExMjogv8m8xyDAzLinIL74wL06ICVzIgorCisjOiBldmFsLmM6MjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEzOiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUxMTM6ILjwuKO0wiC/ybzHOiAlcyIKKworIzogZXZhbC5jOjI1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6ILX7v8jHpSC++MC9OiAlcyIKKworIzogZXZhbC5jOjI2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNTogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTU6ILX7v8jHpSC++MC9OiAlcyIKKworIzogZXZhbC5jOjMwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNjogSW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICVzIgorbXNnc3RyICJFMTE2OiDH1Lz2ICVzKMC4KbfOIMDfuPi1yCDAzsDasKEgs9Gw3MGzvcC0z7TZIgorCisjOiBldmFsLmM6MzA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE3OiBVbmtub3duIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExNzoguPC4o7TCIMfUvPY6ICVzIgorCisjOiBldmFsLmM6MzA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODogx9S89r+hILPKuasguLnAuiDAzsDaILPRseg6ICVzIgorCisjOiBldmFsLmM6MzA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE5OiBOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE5OiDH1Lz2v6EgwPvAuiDAzsDaILPRseg6ICVzIgorCisjOiBldmFsLmM6MzA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIwOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dDogJXMiCittc2dzdHIgIkUxMjA6IL26xam4s8auIMTcxdi9usauILnbv6G8rSA8U0lEPiC757/rOiAlcyIKKworIy4KKyMuICogWWVzIHRoaXMgaXMgdWdseSwgSSBkb24ndCBwYXJ0aWN1bGFybHkgbGlrZSBpdCBlaXRoZXIuICBCdXQgZG9pbmcgaXQKKyMuICogdGhpcyB3YXkgaGFzIHRoZSBjb21wZWxsaW5nIGFkdmFudGFnZSB0aGF0IHRyYW5zbGF0aW9ucyBuZWVkIG5vdCB0bworIy4gKiBiZSB0b3VjaGVkIGF0IGFsbC4gIFNlZSBiZWxvdyB3aGF0ICdvaycgYW5kICd5bmMnIGFyZSB1c2VkIGZvci4KKyMuCisjOiBldmFsLmM6MzY4NyBndWkuYzo0MzgyIGd1aV9ndGsuYzoyMDU5Cittc2dpZCAiJk9rIgorbXNnc3RyICLIrsDOKCZPKSIKKworIzogZXZhbC5jOjQyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQgwdk6ICIKKworIzogZXZhbC5jOjU0NzcKK21zZ2lkICIiCisiJk9LXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIsiuwM4oJk8pXG4iCisiw+u80igmQykiCisKKyM6IGV2YWwuYzo1NTE3Cittc2dpZCAiY2FsbGVkIGlucHV0cmVzdG9yZSgpIG1vcmUgb2Z0ZW4gdGhhbiBpbnB1dHNhdmUoKSIKK21zZ3N0ciAiaW5wdXRyZXN0b3JlKCmwoSBpbnB1dHNhdmUoKbq4tNkguLnAzCC60rfBwbO9wLTPtNkiCisKKyM6IGV2YWwuYzo1OTc3Cittc2dpZCAiRTY1NTogVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgKGN5Y2xlPykiCittc2dzdHIgIkU2NTU6ILPKuasguLnAuiC9ybq8uK8guLXFqSAoud26ubz4yK8/KSIKKworIzogZXZhbC5jOjY2MjYKK21zZ2lkICJFMjQwOiBObyBjb25uZWN0aW9uIHRvIFZpbSBzZXJ2ZXIiCittc2dzdHIgIkUyNDA6IFZpbSC8rbn2v6Egv6yw4bXHvu4gwNbB9iC+yr3AtM+02SIKKworIzogZXZhbC5jOjY3MjQKK21zZ2lkICJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIKK21zZ3N0ciAiRTI3NzogvK259sDHIMDAtOTAuyDA0MC7ILz2IL74vcC0z7TZIgorCisjOiBldmFsLmM6Njc1MgorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODogxay288DMvvDGrrfOILq4s74gvPYgvvi9wLTPtNkiCisKKyM6IGV2YWwuYzo2ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiAlcyjAuCm3ziC6uLO+ILz2IL74vcC0z7TZIgorCisjOiBldmFsLmM6NjkwMAorbXNnaWQgIihJbnZhbGlkKSIKK21zZ3N0ciAiKMDfuPi1x776vcC0z7TZKSIKKworIzogZXZhbC5jOjgwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMTogVW5kZWZpbmVkIHZhcmlhYmxlOiAlcyIKK21zZ3N0ciAiRTEyMTogwaTAxyC+yCC1yCC6r7z2OiAlcyIKKworIzogZXZhbC5jOjg1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2MTogSWxsZWdhbCB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAiRTQ2MToguvHBpLvzwPvAziC6r7z2ILjtOiAlcyIKKworIzogZXZhbC5jOjg4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMjogRnVuY3Rpb24gJXMgYWxyZWFkeSBleGlzdHMsIGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxMjI6IMfUvPYgJXPAzCiwoSkgwMy5zCDA1r3AtM+02Swgudmy2bfBuOkgIcC7ILT1x8+8vL/kIgorCisjOiBldmFsLmM6ODg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiDBpMDHIL7IILXIIMfUvPY6ICVzIgorCisjOiBldmFsLmM6ODg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6ICcoJ7ChIL74wL06ICVzIgorCisjOiBldmFsLmM6ODkyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNTogwN+4+LXIIMDOwNo6ICVzIgorCisjOiBldmFsLmM6OTAwMAorbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiA6ZW5kZnVuY3Rpb27AzCC++L3AtM+02SIKKworIzogZXZhbC5jOjkxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNzogQ2Fubm90IHJlZGVmaW5lIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMjc6IMfUvPYgJXPAuyi4pikgtNm9wyDBpMDHx9IgvPYgvvi9wLTPtNk6ILvnv+vB38DUtM+02SIKKworIzogZXZhbC5jOjkxNzcKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiDH1Lz2IMDMuKfAzCDHyr/kx9W0z7TZIgorCisjOiBldmFsLmM6OTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI4OiBGdW5jdGlvbiBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWw6ICVzIgorbXNnc3RyICJFMTI4OiDH1Lz2IMDMuKfAuiC067muwNq3ziC9w8Dbx9i+3yDH1DogJXMiCisKKyM6IGV2YWwuYzo5NDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzA6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMzA6IMGkwMcgvsggtcggx9S89jogJXMiCisKKyM6IGV2YWwuYzo5NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzE6IENhbm5vdCBkZWxldGUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEzMTogx9S89iAlc8C7KLimKSDB9r/vILz2IL74vcC0z7TZOiC757/rwd/A1LTPtNkiCisKKyM6IGV2YWwuYzo5NDczCittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiRTEzMjogx9S89rimILrOuKUgse3AzLChICdtYXhmdW5jZGVwdGgnuri02SDFrrTPtNkiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjk1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAiJXMgus64o7TCIMHfIgorCisjOiBldmFsLmM6OTU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhYm9ydGVkIgorbXNnc3RyICIlc8DMKLChKSDB38H2tce++r3AtM+02SIKKworIzogZXZhbC5jOjk1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgIiVzwMwosKEpICMlbGTAuyi4pikgtbm3wcHWvvq9wLTPtNkiCisKKyM6IGV2YWwuYzo5NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyBcIiVzXCIiCittc2dzdHIgIiVzwMwosKEpIFwiJXNcIsC7KLimKSC1ubfBwda++r3AtM+02SIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6OTYxMyBleF9jbWRzMi5jOjIzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAiJXO/obytILDovNMiCisKKyM6IGV2YWwuYzo5NjM5Cittc2dpZCAiRTEzMzogOnJldHVybiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxMzM6IDpyZXR1cm7AzCDH1Lz2IL7Iv6EgwNbB9iC+yr3AtM+02SIKKworIzogZXZhbC5jOjk5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgwPy/qiC6r7z2OlxuIgorCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICC9ysCwwfggJTAyeCwgIMbIwfggJTAzbyIKKworIzogZXhfY21kcy5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI+ICVkLCBIZXggJTA0eCwgT2N0YWwgJW8iCittc2dzdHIgIj4gJWQsICC9ysCwwfggJTA0eCwgIMbIwfggJW8iCisKKyM6IGV4X2NtZHMuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiPiAlZCwgSGV4ICUwOHgsIE9jdGFsICVvIgorbXNnc3RyICI+ICVkLCAgvcrAsMH4ICUwOHgsICDGyMH4ICVvIgorCisjOiBleF9jbWRzLmM6NDMwCittc2dpZCAiRTEzNDogTW92ZSBsaW5lcyBpbnRvIHRoZW1zZWx2ZXMiCittc2dzdHIgIkUxMzQ6IMHZwLsgsdcgwNq9xcC4t84gwMy1v8fPt8Gw7SDH373AtM+02SIKKworIzogZXhfY21kcy5jOjQ5OQorbXNnaWQgIjEgbGluZSBtb3ZlZCIKK21zZ3N0ciAiMSDB2SC/xbDcwbO9wLTPtNkiCisKKyM6IGV4X2NtZHMuYzo1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIG1vdmVkIgorbXNnc3RyICIlbGQgwdkgv8Ww3MGzvcC0z7TZIgorCisjOiBleF9jbWRzLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBmaWx0ZXJlZCIKK21zZ3N0ciAiJWxkIMHZwLsgsMm3tr3AtM+02SIKKworIzogZXhfY21kcy5jOjk1MgorbXNnaWQgIkUxMzU6ICpGaWx0ZXIqIEF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUxMzU6ICpGaWx0ZXIqIMDatb+47bfJwLogx/bA5yC59sbbuKYgudmy2b7uvK20wiC+yCC1y7TPtNkiCisKKyM6IGV4X2NtZHMuYzoxMDM3Cittc2dpZCAiW05vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlXVxuIgorbXNnc3RyICJbuLbB9ri3wLi3ziCw7cSjILXaIMD6wOUgvsggx9RdXG4iCisKKyM6IGV4X2NtZHMuYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzdmltaW5mbzogJXMgaW4gbGluZTogIgorbXNnc3RyICIlc3ZpbWluZm86IMHZv6EgJXM6ICIKKworIzogZXhfY21kcy5jOjEyODgKK21zZ2lkICJFMTM2OiB2aW1pbmZvOiBUb28gbWFueSBlcnJvcnMsIHNraXBwaW5nIHJlc3Qgb2YgZmlsZSIKK21zZ3N0ciAiRTEzNjogdmltaW5mbzogs8q5qyC4ucC6IL+ht68sILOquNPB9iCwx7PKttwiCisKKyM6IGV4X2NtZHMuYzoxMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAidmltaW5mbyDGxMDPIFwiJXNcIiVzJXMlc8C7KLimKSDA0LTCIMHfIgorCisjOiBleF9jbWRzLmM6MTMyNAorbXNnaWQgIiBpbmZvIgorbXNnc3RyICIgwM7G9yIKKworIzogZXhfY21kcy5jOjEzMjUKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiC4tsWpIgorCisjOiBleF9jbWRzLmM6MTMyNgorbXNnaWQgIiBGQUlMRUQiCittc2dzdHIgIiC9x8bQIgorCisjOiBleF9jbWRzLmM6MTQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM3OiBWaW1pbmZvIGZpbGUgaXMgbm90IHdyaXRhYmxlOiAlcyIKK21zZ3N0ciAiRTEzNzogVmltaW5mbyDGxMDPwMcgvrKx4iCxx8fRwMwgvvi9wLTPtNk6ICVzIgorCisjOiBleF9jbWRzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiBWaW1pbmZvIMbEwM8gJXPAuyi4pikgvrUgvPYgvvi9wLTPtNkhIgorCisjOiBleF9jbWRzLmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiCittc2dzdHIgIlZpbWluZm8gxsTAzyBcIiVzXCLAuyi4pikgvrK0wiDB3yIKKworIy4gV3JpdGUgdGhlIGluZm86CisjOiBleF9jbWRzLmM6MTY0OQorIywgYy1mb3JtYXQKK21zZ2lkICIjIFRoaXMgdmltaW5mbyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVmltICVzLlxuIgorbXNnc3RyICIjIMDMIHZpbWluZm8gxsTAz8C6ILr2wMwguLi15yCwzcDUtM+02SBWaW0gJXMuXG4iCisKKyM6IGV4X2NtZHMuYzoxNjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFlvdSBtYXkgZWRpdCBpdCBpZiB5b3UncmUgY2FyZWZ1bCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiMgwba9ybi4IMfRtNm46SCw7cSlILz2tbUgwNa9wLTPtNkhXG4iCisiXG4iCisKKyM6IGV4X2NtZHMuYzoxNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjIMDMIMbEwM/AzCDA+sDltce++sC7ILanwMcgJ2VuY29kaW5nJ8DHILCqXG4iCisKKyM6IGV4X2NtZHMuYzoxNzUyCittc2dpZCAiSWxsZWdhbCBzdGFydGluZyBjaGFyIgorbXNnc3RyICLAzLvzx9EgvcPA2yCx28DaIgorCisjOiBleF9jbWRzLmM6MjA5NyBleF9jbWRzMi5jOjc2MQorbXNnaWQgIlNhdmUgQXMiCittc2dzdHIgIrTZuKUgwMy4p8C4t84gwPrA5SIKKworIy4gT3ZlcndyaXRpbmcgYSBmaWxlIHRoYXQgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIGlzIG5vdCBhCisjLiAqIGdvb2QgaWRlYS4KKyM6IGV4X2NtZHMuYzoyMTQwCittc2dpZCAiRTEzOTogRmlsZSBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIiCittc2dzdHIgIkUxMzk6IMbEwM/AzCC02bilILn2xtu/oSC3zrX5tce+7iDA1r3AtM+02SIKKworIzogZXhfY21kcy5jOjIxNzQKK21zZ2lkICJXcml0ZSBwYXJ0aWFsIGZpbGU/IgorbXNnc3RyICLGxMDPIMDPus64uCDA+sDlx9Kx7r/kPyIKKworIzogZXhfY21kcy5jOjIxODEKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiRTE0MDogufbG2yDAz7rOuLggvrK3wbjpICHAuyC757/rx8+9yr3Dv8AiCisKKyM6IGV4X2NtZHMuYzoyMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAiwMy5zCDA1rTCIFwiJS4qc1wiIMbEwM/AuyC1pL7uvrWx7r/kPyIKKworIzogZXhfY21kcy5jOjIzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MTogTm8gZmlsZSBuYW1lIGZvciBidWZmZXIgJWxkIgorbXNnc3RyICJFMTQxOiC59sbbICVsZMDHIMbEwM8gwMy4p8DMIL74vcC0z7TZIgorCisjOiBleF9jbWRzLmM6MjQwNgorbXNnaWQgIkUxNDI6IEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24iCittc2dzdHIgIkUxNDI6IMbEwM/AzCC94cH2wfYgvsrAvTogJ3dyaXRlJyC/ybzHv6EgwMfH2CC+tSC89rChIL74vcC0z7TZIgorCisjOiBleF9jbWRzLmM6MjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IGZvciBcIiUuKnNcIi5cbiIKKyJEbyB5b3Ugd2lzaCB0byB3cml0ZSBhbnl3YXk/IgorbXNnc3RyICIiCisiJ3JlYWRvbmx5JyC/ybzHwMwgXCIlLipzXCK/oSC068fYILyzwaS1x77uIMDWvcC0z7TZLlxuIgorIrHXt6G1tSC+srHiuKYgv/jHz73KtM+x7j8iCisKKyM6IGV4X2NtZHMuYzoyNTk5Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICLGxMDPILDtxKGx4iIKKworIzogZXhfY21kcy5jOjMyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MzogQXV0b2NvbW1hbmRzIHVuZXhwZWN0ZWRseSBkZWxldGVkIG5ldyBidWZmZXIgJXMiCittc2dzdHIgIkUxNDM6IEF1dG9jb21tYW5ksKEgtuYgudu/oSC79SC59sbbICVzwLsouKYpIMH2v/y9wLTPtNkiCisKKyM6IGV4X2NtZHMuYzozMzQxCittc2dpZCAiRTE0NDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gOnoiCittc2dzdHIgIkUxNDQ6ILz9wNqwoSC+xrTRIMDOwNqwoSA6er+hIMHWvu7Bs73AtM+02SIKKworIzogZXhfY21kcy5jOjM0MjYKK21zZ2lkICJFMTQ1OiBTaGVsbCBjb21tYW5kcyBub3QgYWxsb3dlZCBpbiBydmltIgorbXNnc3RyICJFMTQ1OiBydmltv6G8rbTCIL2pILjtt8nAuyC757/rx9IgvPYgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMuYzozNTMzCittc2dpZCAiRTE0NjogUmVndWxhciBleHByZXNzaW9ucyBjYW4ndCBiZSBkZWxpbWl0ZWQgYnkgbGV0dGVycyIKK21zZ3N0ciAiRTE0NjogwaSx1Melx/a9xMC6ILHbwNq3ziCxuLrQtckgvPYgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMuYzozODc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2Ugd2l0aCAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCittc2dzdHIgIiVzKMC4KbfOILnZst4gKHkvbi9hL3EvbC9eRS9eWSk/IgorCisjOiBleF9jbWRzLmM6NDI3MgorbXNnaWQgIihJbnRlcnJ1cHRlZCkgIgorbXNnc3RyICIowd+03LXHvvq9wLTPtNkpICIKKworIzogZXhfY21kcy5jOjQyNzYKK21zZ2lkICIxIHN1YnN0aXR1dGlvbiIKK21zZ3N0ciAiMSCwsyC52bLlwL0iCisKKyM6IGV4X2NtZHMuYzo0Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICIlbGQgsLMgudmy5cC9IgorCisjOiBleF9jbWRzLmM6NDI4MQorbXNnaWQgIiBvbiAxIGxpbmUiCittc2dzdHIgIiDH0SDB2b+hvK0iCisKKyM6IGV4X2NtZHMuYzo0MjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiAlbGQgbGluZXMiCittc2dzdHIgIiAlbGQgwdm/obytIgorCisjOiBleF9jbWRzLmM6NDMzNAorbXNnaWQgIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE0NzogOmdsb2JhbMC6IMDnsc0gyKPD4iC1ySC89iC++L3AtM+02SIKKworIzogZXhfY21kcy5jOjQzNjkKK21zZ2lkICJFMTQ4OiBSZWd1bGFyIGV4cHJlc3Npb24gbWlzc2luZyBmcm9tIGdsb2JhbCIKK21zZ3N0ciAiRTE0ODogZ2xvYmFsv6G8rSDBpLHUx6XH9r3EwMwguvzBs73AtM+02SIKKworIzogZXhfY21kcy5jOjQ0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0dGVybiBmb3VuZCBpbiBldmVyeSBsaW5lOiAlcyIKK21zZ3N0ciAiv6m3ryDB2b+hvK0gxtDFz8C7IMOjvtK9wLTPtNk6ICVzIgorCisjOiBleF9jbWRzLmM6NDQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyBMYXN0IFN1YnN0aXR1dGUgU3RyaW5nOlxuIgorIiQiCittc2dzdHIgIiIKKyJcbiIKKyIjILi2wfa4t8C4t84gudmy2yC5rsDav606XG4iCisiJCIKKworIzogZXhfY21kcy5jOjQ2MDAKK21zZ2lkICJFNDc4OiBEb24ndCBwYW5pYyEiCittc2dzdHIgIkU0Nzg6ILTnyLLHz8H2ILi2vcq9w7/AISIKKworIzogZXhfY21kcy5jOjQ2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY2MTogU29ycnksIG5vICclcycgaGVscCBmb3IgJXMiCittc2dzdHIgIkU2NjE6ILnMvsjH1bTPtNksILW1v/K4uyAnJXMnwMwosKEpICVzv6EgtOvH2CC++L3AtM+02SIKKworIzogZXhfY21kcy5jOjQ2NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0OTogU29ycnksIG5vIGhlbHAgZm9yICVzIgorbXNnc3RyICJFMTQ5OiC5zL7Ix9W0z7TZLCAlc7+hILTrx9EgtbW/8ri7wMwgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMuYzo0Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAiucy+yMfVtM+02SwgtbW/8ri7IMbEwM8gXCIlc1wiwLsouKYpIMOjwLsgvPYgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMuYzo1MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTA6IE5vdCBhIGRpcmVjdG9yeTogJXMiCittc2dzdHIgIkUxNTA6IMDat+G55sDMIL7GtNQ6ICVzIgorCisjOiBleF9jbWRzLmM6NTMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUyOiBDYW5ub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE1MjogvrKx4iDAp8fRICVzwLsouKYpIL+tILz2IL74vcC0z7TZIgorCisjOiBleF9jbWRzLmM6NTM0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE1MzogwNCx4iDAp8fRICVzwLsouKYpIL+tILz2IL74vcC0z7TZIgorCisjOiBleF9jbWRzLmM6NTM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjcwOiBNaXggb2YgaGVscCBmaWxlIGVuY29kaW5ncyB3aXRoaW4gYSBsYW5ndWFnZTogJXMiCittc2dzdHIgIkU2NzA6IMfRIL7wvu6zu7+hvK0gv6m3ryDAzsTatfkgu+e/6zogJXMiCisKKyM6IGV4X2NtZHMuYzo1NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTQ6IER1cGxpY2F0ZSB0YWcgXCIlc1wiIGluIGZpbGUgJXMiCittc2dzdHIgIkUxNTQ6IMXCsdcgXCIlc1wiwMwosKEpIMbEwM8gJXO/oSDB37q5tce+7iDA1r3AtM+02SIKKworIzogZXhfY21kcy5jOjU1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiC48LijtMIgc2lnbiC47bfJOiAlcyIKKworIzogZXhfY21kcy5jOjU1NzkKK21zZ2lkICJFMTU2OiBNaXNzaW5nIHNpZ24gbmFtZSIKK21zZ3N0ciAiRTE1Njogc2lnbiDAzLinwMwgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMuYzo1NjI1Cittc2dpZCAiRTYxMjogVG9vIG1hbnkgc2lnbnMgZGVmaW5lZCIKK21zZ3N0ciAiRTYxMjogs8q5qyC4ucC6IHNpZ27AzCDBpMDHtce+7iDA1r3AtM+02SIKKworIzogZXhfY21kcy5jOjU2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzOTogSW52YWxpZCBzaWduIHRleHQ6ICVzIgorbXNnc3RyICJFMjM5OiDA37j4tcggc2lnbiDF2L26xq46ICVzIgorCisjOiBleF9jbWRzLmM6NTcyNCBleF9jbWRzLmM6NTkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiC48LijtMIgc2lnbjogJXMiCisKKyM6IGV4X2NtZHMuYzo1NzczCittc2dpZCAiRTE1OTogTWlzc2luZyBzaWduIG51bWJlciIKK21zZ3N0ciAiRTE1OTogc2lnbiC5+MijsKEgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMuYzo1ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTg6IEludmFsaWQgYnVmZmVyIG5hbWU6ICVzIgorbXNnc3RyICJFMTU4OiDA37j4tcggufbG2yDAzLinOiAlcyIKKworIzogZXhfY21kcy5jOjU4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NzogSW52YWxpZCBzaWduIElEOiAlbGQiCittc2dzdHIgIkUxNTc6IMDfuPi1yCBzaWduIElEOiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1OTY0Cittc2dpZCAiIChOT1QgRk9VTkQpIgorbXNnc3RyICIgKLj4IMOjvtLAvSkiCisKKyM6IGV4X2NtZHMuYzo1OTY2Cittc2dpZCAiIChub3Qgc3VwcG9ydGVkKSIKK21zZ3N0ciAiICjB9r/4tcfB9iC+ysC9KSIKKworIzogZXhfY21kcy5jOjYwNjUKK21zZ2lkICJbRGVsZXRlZF0iCittc2dzdHIgIlvB9r/2wbO9wLTPtNldIgorCisjOiBleF9jbWRzMi5jOjkyCittc2dpZCAiRW50ZXJpbmcgRGVidWcgbW9kZS4gIFR5cGUgXCJjb250XCIgdG8gY29udGludWUuIgorbXNnc3RyICK18Ln2sdcgu/PFwrfOILXpvu6wqC4gILDovNPHz7fBuOkgXCJjb250XCK4piDA1LfCx8+9yr3Dv8AuIgorCisjOiBleF9jbWRzMi5jOjk2IGV4X2RvY21kLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiAlcyIKK21zZ3N0ciAiJWxkIMHZOiAlcyIKKworIzogZXhfY21kczIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjbWQ6ICVzIgorbXNnc3RyICK47bfJOiAlcyIKKworIzogZXhfY21kczIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJlYWtwb2ludCBpbiBcIiVzJXNcIiBsaW5lICVsZCIKK21zZ3N0ciAiwd/B9sGhOiBcIiVzJXNcIiAlbGQgwdkiCisKKyM6IGV4X2NtZHMyLmM6NTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjE6IEJyZWFrcG9pbnQgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTE2MTogwd/B9sGhwLsgw6PAuyC89iC++L3AtM+02TogJXMiCisKKyM6IGV4X2NtZHMyLmM6NTY2Cittc2dpZCAiTm8gYnJlYWtwb2ludHMgZGVmaW5lZCIKK21zZ3N0ciAiwd/B9sGhwMwgwaTAx7XHvu4gwNbB9iC+yr3AtM+02SIKKworIzogZXhfY21kczIuYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgICVsZCDB2SIKKworIzogZXhfY21kczIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZSBjaGFuZ2VzIHRvIFwiJS4qc1wiPyIKK21zZ3N0ciAiXCIlLipzXCK/oSC52bLvILO7v+vAuyDA+sDlx9Kx7r/kPyIKKworIzogZXhfY21kczIuYzo3ODggZXhfZG9jbWQuYzo5Mzc5Cittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIsGmuPEgvvjAvSIKKworIzogZXhfY21kczIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MjogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxNjI6ILn2xtsgXCIlc1wiv6Egs6rB37+hILnZsu8gs7u/68DMIL3hwfbB9iC+yr7SvcC0z7TZIgorCisjOiBleF9jbWRzMi5jOjk4NAorbXNnaWQgIldhcm5pbmc6IEVudGVyZWQgb3RoZXIgYnVmZmVyIHVuZXhwZWN0ZWRseSAoY2hlY2sgYXV0b2NvbW1hbmRzKSIKK21zZ3N0ciAisOaw7TogtuYgudu/oSC02bilILn2xtu3ziC16b7usKy9wLTPtNkgKGF1dG9jb21tYW5kuKYgyK7AzsfPvcq9w7/AKSIKKworIzogZXhfY21kczIuYzoxMzg3Cittc2dpZCAiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTYzOiCw7cSlIMbEwM/AzCDHz7OqILnbv6Egvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMyLmM6MTM4OQorbXNnaWQgIkUxNjQ6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiRTE2NDogw7kgufjCsCDGxMDPIMDMwPzAuLfOtMIgsKUgvPYgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMyLmM6MTM5MQorbXNnaWQgIkUxNjU6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBmaWxlIgorbXNnc3RyICJFMTY1OiC4tsH2uLcgxsTAzyC12rfOtMIgsKUgvPYgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMyLmM6MTgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY2OiBjb21waWxlciBub3Qgc3VwcG9ydGVkOiAlcyIKK21zZ3N0ciAiRTY2NjogxMTGxMDPt6+woSDB9r/4tcfB9iC+ysC9OiAlcyIKKworIzogZXhfY21kczIuYzoxODk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIGluIFwiJXNcIiIKK21zZ3N0ciAiXCIlc1wiwLsouKYpIFwiJXNcIr+hvK0gw6O0wiDB3yIKKworIzogZXhfY21kczIuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIgorbXNnc3RyICJcIiVzXCLAuyi4pikgw6O0wiDB3yIKKworIzogZXhfY21kczIuYzoxOTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgIidydW50aW1lcGF0aCe/obytIMOjwLsgvPYgvvjAvTogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE5NzQKK21zZ2lkICJTb3VyY2UgVmltIHNjcmlwdCIKK21zZ3N0ciAiuvYgvbrFqbizxq4gt8615SIKKworIzogZXhfY21kczIuYzoyMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAiwNq34bnmwLogutK3ryC16cDPILz2IL74wL06IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICJcIiVzXCLAuyi4pikgutK3ryC16cDPILz2IL74vcC0z7TZIgorCisjOiBleF9jbWRzMi5jOjIyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IGNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICIlbGQgwdk6IFwiJXNcIsC7KLimKSC60revILXpwM8gvPYgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMyLmM6MjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgIlwiJXNcIsC7KLimKSC60revtenAzLTCIMHfIgorCisjOiBleF9jbWRzMi5jOjIyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IHNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAiJWxkIMHZOiBcIiVzXCIgutK3r7XpwMy0wiDB3yIKKworIzogZXhfY21kczIuYzoyMzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNvdXJjaW5nICVzIgorbXNnc3RyICIlcyC60revtenAzLHiILOhIgorCisjOiBleF9jbWRzMi5jOjI3MDcKK21zZ2lkICJXMTU6IFdhcm5pbmc6IFdyb25nIGxpbmUgc2VwYXJhdG9yLCBeTSBtYXkgYmUgbWlzc2luZyIKK21zZ3N0ciAiVzE1OiCw5rDtOiDA37j4tcggwdkgsbi60MDaLiBeTcDMIL74tMIgsM0gsLC9wLTPtNkiCisKKyM6IGV4X2NtZHMyLmM6Mjc1NgorbXNnaWQgIkUxNjc6IDpzY3JpcHRlbmNvZGluZyB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjc6IDpzY3JpcHRlbmNvZGluZ8DMILrSt6+16cDOIMbEwM8gudu/obytILvnv+u1x776vcC0z7TZIgorCisjOiBleF9jbWRzMi5jOjI3ODkKK21zZ2lkICJFMTY4OiA6ZmluaXNoIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2ODogOmZpbmlzaLChILrSt6+16cDOIMbEwM8gudu/obytILvnv+u1x776vcC0z7TZIgorCisjOiBleF9jbWRzMi5jOjMyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFnZSAlZCIKK21zZ3N0ciAixuTAzMH2ICVkIgorCisjOiBleF9jbWRzMi5jOjMzOTQKK21zZ2lkICJObyB0ZXh0IHRvIGJlIHByaW50ZWQiCittc2dzdHIgIsDOvOK1ySDF2L26xq6woSC++L3AtM+02SIKKworIzogZXhfY21kczIuYzozNDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nIHBhZ2UgJWQgKCVkJSUpIgorbXNnc3RyICLG5MDMwfYgJWQgwM684sHfICglZCUlKSIKKworIzogZXhfY21kczIuYzozNDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiBDb3B5ICVkIG9mICVkIgorbXNnc3RyICIgurm75yAlZCAvICVkIgorCisjOiBleF9jbWRzMi5jOjM1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRlZDogJXMiCittc2dzdHIgIsDOvOK1yjogJXMiCisKKyM6IGV4X2NtZHMyLmM6MzU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyBhYm9ydGVkIgorbXNnc3RyICLAzrzisKEgw+u80rXHvvq9wLTPtNkuIgorCisjOiBleF9jbWRzMi5jOjM5MTQKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IMb3vbrGrr26xam4s8auIMPit8LGxMDPv6EgvrUgvPYgvvi9wLTPtNkuIgorCisjOiBleF9jbWRzMi5jOjQxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyNDogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTYyNDogXCIlc1wiIMbEwM/AuyC/rSC89iC++L3AtM+02SIKKworIzogZXhfY21kczIuYzo0MTk5IGV4X2NtZHMyLmM6NDgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6IMb3vbrGrr26xam4s8auILiuvNK9uiDGxMDPIFwiJXNcIsC7KLimKSDA0MC7ILz2IL74vcC0z7TZIgorCisjOiBleF9jbWRzMi5jOjQyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxODogZmlsZSBcIiVzXCIgaXMgbm90IGEgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE4OiDGxMDPIFwiJXNcIsC6KLTCKSDG9726xq69usWpuLPGriC4rrzSvbogxsTAz8DMIL7GtNW0z7TZIgorCisjOiBleF9jbWRzMi5jOjQyMjIgZXhfY21kczIuYzo0MjQyIGV4X2NtZHMyLmM6NDI1NyBleF9jbWRzMi5jOjQyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOTogZmlsZSBcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIKK21zZ3N0ciAiRTYxOTogxsTAzyBcIiVzXCLAuii0wikgwfa/+LXHtMIgxve9usauvbrFqbizxq4guK680r26IMbEwM/AzCC+xrTVtM+02SIKKworIzogZXhfY21kczIuYzo0MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjE6IFwiJXNcIiByZXNvdXJjZSBmaWxlIGhhcyB3cm9uZyB2ZXJzaW9uIgorbXNnc3RyICJFNjIxOiBcIiVzXCIguK680r26IMbEwM/AuiC59sD8wMwgwN+4+LXHvvq9wLTPtNkiCisKKyM6IGV4X2NtZHMyLmM6NDc3NgorbXNnaWQgIkUzMjQ6IENhbid0IG9wZW4gUG9zdFNjcmlwdCBvdXRwdXQgZmlsZSIKK21zZ3N0ciAiRTMyNDogxve9usauvbrFqbizxq4gw+K3wsbEwM/AuyC/rSC89iC++L3AtM+02SIKKworIzogZXhfY21kczIuYzo0ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTY6IFwiJXNcIiDGxMDPwLsgv60gvPYgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMyLmM6NDkyOAorbXNnaWQgIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwicHJvbG9nLnBzXCIiCittc2dzdHIgIkU0NTY6IMb3vbrGrr26xam4s8auILiuvNK9uiDGxMDPIFwicHJvbG9nLnBzXCK4piDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBleF9jbWRzMi5jOjQ5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3QgZmluZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlcy5wc1wiIgorbXNnc3RyICJFNDU2OiDG9726xq69usWpuLPGriC4rrzSvbogxsTAzyBcIiVzLnBzXCK4piDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBleF9jbWRzMi5jOjQ5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyMDogVW5hYmxlIHRvIGNvbnZlcnQgZnJvbSBtdWx0aS1ieXRlIHRvIFwiJXNcIiBlbmNvZGluZyIKK21zZ3N0ciAiRTYyMDogtNnB37nZwMzGrrimIFwiJXNcIiDAzsTatfnAuLfOILqvyK/H0iC89iC++L3AtM+02SIKKworIzogZXhfY21kczIuYzo1MTAyCittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICLHwbiwxc23ziC6uLO7tMIgwd8uLi4iCisKKyM6IGV4X2NtZHMyLmM6NTEwNgorbXNnaWQgIkUzNjU6IEZhaWxlZCB0byBwcmludCBQb3N0U2NyaXB0IGZpbGUiCittc2dzdHIgIkUzNjU6IMb3vbrGrr26xam4s8auIMbEwM/AuyDAzrzix9IgvPYgvvi9wLTPtNkiCisKKyM6IGV4X2NtZHMyLmM6NTEwOAorbXNnaWQgIlByaW50IGpvYiBzZW50LiIKK21zZ3N0ciAiwM684sDbvvfAzCCzobO1vcC0z7TZLiIKKworIzogZXhfY21kczIuYzo1NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICLH9sDnICVzvvC+7jogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjU2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6IL7wvu64piBcIiVzXCIowLgpt84gvLPBpMfSILz2IL74vcC0z7TZIgorCisjOiBleF9kb2NtZC5jOjUyNQorbXNnaWQgIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIgorbXNnc3RyICJFeCC788XCt84gwPzIry4gIE5vcm1hbCC788XCt84gsKG3wbjpIFwidmlzdWFsXCLAuyDA1LfCx8+9yr3Dv8AuIgorCisjLiBtdXN0IGJlIGF0IEVPRgorIzogZXhfZG9jbWQuYzo1NjEKK21zZ2lkICJFNTAxOiBBdCBlbmQtb2YtZmlsZSIKK21zZ3N0ciAiRTUwMTogxsTAz8DHILi2wfa4t8DUtM+02SIKKworIzogZXhfZG9jbWQuYzo2NjkKK21zZ2lkICJFMTY5OiBDb21tYW5kIHRvbyByZWN1cnNpdmUiCittc2dzdHIgIkUxNjk6ILjtt8nAzCCzyrmrILi5wMwgtNm9wyC53bq5tce++r3AtM+02SIKKworIzogZXhfZG9jbWQuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDU6IEV4Y2VwdGlvbiBub3QgY2F1Z2h0OiAlcyIKK21zZ3N0ciAiRTYwNTogv7m/3LChILnfu/3Hz8H2IL7KvtK9wLTPtNk6ICVzIgorCisjOiBleF9kb2NtZC5jOjEzMTcKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICK60revtenAziDGxMDPwMcguLbB9ri3IgorCisjOiBleF9kb2NtZC5jOjEzMTgKK21zZ2lkICJFbmQgb2YgZnVuY3Rpb24iCittc2dzdHIgIsfUvPbAxyC4tsH2uLciCisKKyM6IGV4X2RvY21kLmM6MTkwNworbXNnaWQgIkU0NjQ6IEFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgIkU0NjQ6ILvnv+vA2iDBpMDHILjtt8nAuyC48Mijx8+w1CC757/rx8+w7SDA1r3AtM+02SIKKworIzogZXhfZG9jbWQuYzoxOTIxCittc2dpZCAiRTQ5MjogTm90IGFuIGVkaXRvciBjb21tYW5kIgorbXNnc3RyICJFNDkyOiDG7cH9seIguO23ycDMIL7GtNW0z7TZIgorCisjOiBleF9kb2NtZC5jOjIwMjgKK21zZ2lkICJFNDkzOiBCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4iCittc2dzdHIgIkU0OTM6ILndtOsgv7W/qsDMIMHWvu7Bs73AtM+02SIKKworIzogZXhfZG9jbWQuYzoyMDM3Cittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuLCBPSyB0byBzd2FwIgorbXNnc3RyICK53bTrIL+1v6rAzCDB1r7uwbO9wLTPtNksILXawf3Au7Huv+QiCisKKyM6IGV4X2RvY21kLmM6MjE2MAorbXNnaWQgIkU0OTQ6IFVzZSB3IG9yIHc+PiIKK21zZ3N0ciAiRTQ5NDogd7OqIHc+PrimILvnv+vHz73KvcO/wCIKKworIzogZXhfZG9jbWQuYzozNzg2Cittc2dpZCAiRTMxOTogU29ycnksIHRoZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMzE5OiC5zL7Ix9W0z7TZLCCx1yC47bfJwLogx/bA5yDGx7+hvK0gu+e/68fSILz2IL74vcC0z7TZIgorCisjOiBleF9kb2NtZC5jOjM5ODkKK21zZ2lkICJFMTcyOiBPbmx5IG9uZSBmaWxlIG5hbWUgYWxsb3dlZCIKK21zZ3N0ciAiRTE3Mjogv8C3zsH2IMfPs6rAxyDGxMDPIMDMuKe4uCC757/rILChtMnH1bTPtNkiCisKKyM6IGV4X2RvY21kLmM6NDU2OQorbXNnaWQgIjEgbW9yZSBmaWxlIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIrDtxKUgxsTAz8DMIMfRILCzILT1IMDWvcC0z7TZLiCx17ehtbUgs6GzvrHuv+Q/IgorCisjOiBleF9kb2NtZC5jOjQ1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICKw7cSlIMbEwM/AzCAlZCCwsyC09SDA1r3AtM+02S4gsde3obW1ILOhs76x7r/kPyIKKworIzogZXhfZG9jbWQuYzo0NTc5Cittc2dpZCAiRTE3MzogMSBtb3JlIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE3MzogsO3EpSDGxMDPwMwgx9EgsLMgtPUgwNa9wLTPtNkiCisKKyM6IGV4X2RvY21kLmM6NDU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiCw7cSlIMbEwM/AzCAlbGQgsLMgtPUgwNa9wLTPtNkiCisKKyM6IGV4X2RvY21kLmM6NDY3NgorbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxNzQ6ILjtt8nAzCDAzLnMIMG4wOfH1bTPtNk6ILnZstm3wbjpICHAuyC09cfPvLy/5CIKKworIzogZXhfZG9jbWQuYzo0Nzg3Cittc2dpZCAiIgorIlxuIgorIiAgICBOYW1lICAgICAgICBBcmdzIFJhbmdlIENvbXBsZXRlICBEZWZpbml0aW9uIgorbXNnc3RyICIiCisiXG4iCisiICAgIMDMuKcgICAgICAgIMDOwNogufzApyAgv8+8uiAgICAgIMGkwMciCisKKyM6IGV4X2RvY21kLmM6NDg3NgorbXNnaWQgIk5vIHVzZXItZGVmaW5lZCBjb21tYW5kcyBmb3VuZCIKK21zZ3N0ciAiu+e/68DaIMGkwMcguO23ycC7IMOjwLsgvPYgvvi9wLTPtNkiCisKKyM6IGV4X2RvY21kLmM6NDkwOAorbXNnaWQgIkUxNzU6IE5vIGF0dHJpYnV0ZSBzcGVjaWZpZWQiCittc2dzdHIgIkUxNzU6ILjtvcO1yCC807y6wMwgvvi9wLTPtNkiCisKKyM6IGV4X2RvY21kLmM6NDk2MAorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3NjogwN+4+LXIIMDOwNogsLm89iIKKworIzogZXhfZG9jbWQuYzo0OTc1Cittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3NzogxKu/7sautMIgtc4gufggwMy78yC47b3DtckgvPYgvvi9wLTPtNkiCisKKyM6IGV4X2RvY21kLmM6NDk4NQorbXNnaWQgIkUxNzg6IEludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgY291bnQiCittc2dzdHIgIkUxNzg6IMDfuPi1yCCx4rq7IMSrv+7GriCwqiIKKworIzogZXhfZG9jbWQuYzo1MDE2Cittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiCzobO7seIgwKfH2CDAzsDasKEgx8q/5MfVtM+02SIKKworIzogZXhfZG9jbWQuYzo1MDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiDA37j4tcggs6Gzu7HiILCqOiAlcyIKKworIzogZXhfZG9jbWQuYzo1MDU3Cittc2dpZCAiRTQ2ODogQ29tcGxldGlvbiBhcmd1bWVudCBvbmx5IGFsbG93ZWQgZm9yIGN1c3RvbSBjb21wbGV0aW9uIgorbXNnc3RyICJFNDY4OiC/z7y6IMDOwNq0wiC757/rwNogv8+8ur+hvK24uCDH47/rtcu0z7TZIgorCisjOiBleF9kb2NtZC5jOjUwNjMKK21zZ2lkICJFNDY3OiBDdXN0b20gY29tcGxldGlvbiByZXF1aXJlcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IgorbXNnc3RyICJFNDY3OiC757/rwNogv8+8usC6IMfUvPYgwM7A2rChIMfKv+TH1bTPtNkiCisKKyM6IGV4X2RvY21kLmM6NTA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgxOiBJbnZhbGlkIGF0dHJpYnV0ZTogJXMiCittc2dzdHIgIkUxODE6IMDfuPi1yCC807y6OiAlcyIKKworIzogZXhfZG9jbWQuYzo1MTE3Cittc2dpZCAiRTE4MjogSW52YWxpZCBjb21tYW5kIG5hbWUiCittc2dzdHIgIkUxODI6IMDfuPi1yCC47bfJIMDMuKciCisKKyM6IGV4X2RvY21kLmM6NTEzMgorbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4Mzogu+e/68DaIMGkwMcguO23ycC6ILTrua7A2rfOIL3DwNvH2L7fIMfVtM+02SIKKworIzogZXhfZG9jbWQuYzo1MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODQ6IE5vIHN1Y2ggdXNlci1kZWZpbmVkIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTg0OiCx17exILvnv+vA2iDBpMDHILjtt8kgvvjAvTogJXMiCisKKyM6IGV4X2RvY21kLmM6NTY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg1OiBDYW5ub3QgZmluZCBjb2xvciBzY2hlbWUgJXMiCittc2dzdHIgIkUxODU6ILv2IL26xbQgJXPAuyi4pikgw6PAuyC89iC++L3AtM+02SIKKworIzogZXhfZG9jbWQuYzo1NjcyCittc2dpZCAiR3JlZXRpbmdzLCBWaW0gdXNlciEiCittc2dzdHIgIrr2ILvnv+vA2rTULCDIr7+1x9W0z7TZISIKKworIzogZXhfZG9jbWQuYzo2MzkwCittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgIrv1IMOiv6G8rSDGxMDPILDtxKGx4iIKKworIzogZXhfZG9jbWQuYzo2Njg1Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICK9ur/SIMbEwM/AzCC++L3AtM+02SIKKworIzogZXhfZG9jbWQuYzo2Nzg5Cittc2dpZCAiQXBwZW5kIEZpbGUiCittc2dzdHIgIsbEwM8gw9+woSIKKworIzogZXhfZG9jbWQuYzo2ODUzCittc2dpZCAiRTE4NjogTm8gcHJldmlvdXMgZGlyZWN0b3J5IgorbXNnc3RyICJFMTg2OiDAzMD8IMDat+G55sDMIL74vcC0z7TZIgorCisjOiBleF9kb2NtZC5jOjY5MzUKK21zZ2lkICJFMTg3OiBVbmtub3duIgorbXNnc3RyICJFMTg3OiC48LinIgorCisjOiBleF9kb2NtZC5jOjcwMjAKK21zZ2lkICJFNDY1OiA6d2luc2l6ZSByZXF1aXJlcyB0d28gbnVtYmVyIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTQ2NTogOndpbnNpemW0wiC1zrCzwMcgwM7A2rChIMfKv+TH1bTPtNkiCisKKyM6IGV4X2RvY21kLmM6NzA3NgorIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIsOiIMCnxKE6IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NzA4MQorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICJFMTg4OiDAzCDHw7enxvu/oSC068fRIMOiIMCnxKEgvvK0wiCx4rTJwLsgsbjH9rXHwfYgvsq+0r3AtM+02SIKKworIzogZXhfZG9jbWQuYzo3MDkxCittc2dpZCAiRTQ2NjogOndpbnBvcyByZXF1aXJlcyB0d28gbnVtYmVyIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTQ2NjogOndpbnBvc7+htMIgtc6ws8DHIMDOwNqwoSDHyr/kx9W0z7TZIgorCisjOiBleF9kb2NtZC5jOjczNjkKK21zZ2lkICJTYXZlIFJlZGlyZWN0aW9uIgorbXNnc3RyICK4rrXwt7q8xyDA+sDlIgorCisjOiBleF9kb2NtZC5jOjc1NTkKK21zZ2lkICJTYXZlIFZpZXciCittc2dzdHIgIrq4seIgwPrA5SIKKworIzogZXhfZG9jbWQuYzo3NTYwCittc2dpZCAiU2F2ZSBTZXNzaW9uIgorbXNnc3RyICK8vLzHIMD6wOUiCisKKyM6IGV4X2RvY21kLmM6NzU2MgorbXNnaWQgIlNhdmUgU2V0dXAiCittc2dzdHIgIryzwaQgwPrA5SIKKworIzogZXhfZG9jbWQuYzo3NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODk6IFwiJXNcIiBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTE4OTogXCIlc1wiwMwosKEpIMG4wOfH1bTPtNkgKLWkvu6+srfBuOkgISC09cfPseIpIgorCisjOiBleF9kb2NtZC5jOjc3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5MDogQ2Fubm90IG9wZW4gXCIlc1wiIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTkwOiC+srHiIMCnx9EgXCIlc1wiwLsouKYpIL+tILz2IL74vcC0z7TZIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo3NzQzCittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICJFMTkxOiDAzsDatMIgsdvA2rOqIL7VL7XaIMDOv+sgus7Io7+pvt8gx9W0z7TZIgorCisjOiBleF9kb2NtZC5jOjc3ODUKK21zZ2lkICJFMTkyOiBSZWN1cnNpdmUgdXNlIG9mIDpub3JtYWwgdG9vIGRlZXAiCittc2dzdHIgIkUxOTI6IDpub3JtYWzAxyDA57HNIMijw+LAzCCzyrmrILi5wMwgu/2w5b3AtM+02SIKKworIzogZXhfZG9jbWQuYzo4MzAzCittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6ICcjJ7+hILTrx9ggxKHIr8fSILGzw7wgxsTAzyDAzLinwMwgvvi9wLTPtNkiCisKKyM6IGV4X2RvY21kLmM6ODMzNAorbXNnaWQgIkU0OTU6IG5vIGF1dG9jb21tYW5kIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhZmlsZT5cIiIKK21zZ3N0ciAiRTQ5NTogXCI8YWZpbGU+XCK/oSC068fYIMShyK/H0iDA2rW/uO23ySDGxMDPIMDMuKfAzCC++L3AtM+02SIKKworIzogZXhfZG9jbWQuYzo4MzQyCittc2dpZCAiRTQ5Njogbm8gYXV0b2NvbW1hbmQgYnVmZmVyIG51bWJlciB0byBzdWJzdGl0dXRlIGZvciBcIjxhYnVmPlwiIgorbXNnc3RyICJFNDk2OiBcIjxhYnVmPlwiv6EgtOvH2CDEocivx9IgwNq1v7jtt8kgufbG2yC5+MijsKEgvvi9wLTPtNkiCisKKyM6IGV4X2RvY21kLmM6ODM1MworbXNnaWQgIkU0OTc6IG5vIGF1dG9jb21tYW5kIG1hdGNoIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YW1hdGNoPlwiIgorbXNnc3RyICJFNDk3OiBcIjxhbWF0Y2g+XCK/oSC068fYIMShyK/H0iDA2rW/uO23ySC4xcShIMDMuKfAzCC++L3AtM+02SIKKworIzogZXhfZG9jbWQuYzo4MzYzCittc2dpZCAiRTQ5ODogbm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIkU0OTg6IFwiPHNmaWxlPlwiv6EgtOvH2CDEocivx9IgOnNvdXJjZSDGxMDPIMDMuKfAzCC++L3AtM+02SIKKworIzogZXhfZG9jbWQuYzo4NDA0CisjLCBuby1jLWZvcm1hdAorbXNnaWQgIkU0OTk6IEVtcHR5IGZpbGUgbmFtZSBmb3IgJyUnIG9yICcjJywgb25seSB3b3JrcyB3aXRoIFwiOnA6aFwiIgorbXNnc3RyICJFNDk5OiAnJSezqiAnIye/oSC068fRILrzIMbEwM8gwMy4pywgv8C3zsH2IFwiOnA6aFwiv824uCC1v8Dbx9W0z7TZIgorCisjOiBleF9kb2NtZC5jOjg0MDYKK21zZ2lkICJFNTAwOiBFdmFsdWF0ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJFNTAwOiC68yC5rsDav62/obytILCqwLsgsbjHz7fBsO0gx9W0z7TZIgorCisjOiBleF9kb2NtZC5jOjkzNjEKK21zZ2lkICJFMTk1OiBDYW5ub3Qgb3BlbiB2aW1pbmZvIGZpbGUgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxOTU6IMDQwLsgdmltaW5mbyDGxMDPwLsgv60gvPYgvvi9wLTPtNkiCisKKyM6IGV4X2RvY21kLmM6OTUzNAorbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5NjogwMwgxse/obTCIGRpZ3JhcGiwoSC++L3AtM+02SIKKworIzogZXhfZXZhbC5jOjQ0MAorbXNnaWQgIkU2MDg6IENhbm5vdCA6dGhyb3cgZXhjZXB0aW9ucyB3aXRoICdWaW0nIHByZWZpeCIKK21zZ3N0ciAiRTYwODogJ1ZpbScgwaK1zrvnt84gv7m/3LimIDp0aHJvd8fSILz2IL74vcC0z7TZIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV4X2V2YWwuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIHRocm93bjogJXMiCittc2dzdHIgIr+5v9wgdGhyb3duOiAlcyIKKworIzogZXhfZXZhbC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZmluaXNoZWQ6ICVzIgorbXNnc3RyICK/ub/cIMG+t+G1yjogJXMiCisKKyM6IGV4X2V2YWwuYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGRpc2NhcmRlZDogJXMiCittc2dzdHIgIr+5v9wgufa3wcH8OiAlcyIKKworIzogZXhfZXZhbC5jOjYyMCBleF9ldmFsLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBsaW5lICVsZCIKK21zZ3N0ciAiJXMsICVsZCDB2SIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBleF9ldmFsLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBjYXVnaHQ6ICVzIgorbXNnc3RyICK/ub/cILnfu/06ICVzIgorCisjOiBleF9ldmFsLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG1hZGUgcGVuZGluZyIKK21zZ3N0ciAiJXPAzCiwoSkgcGVuZGluZyC1x776vcC0z7TZIgorCisjOiBleF9ldmFsLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc3VtZWQiCittc2dzdHIgIiVzwMwosKEpIMDnsLMgtce++r3AtM+02SIKKworIzogZXhfZXZhbC5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNjYXJkZWQiCittc2dzdHIgIiVzwMwosKEpILn2t8HBs73AtM+02SIKKworIzogZXhfZXZhbC5jOjc0NgorbXNnaWQgIkV4Y2VwdGlvbiIKK21zZ3N0ciAiv7m/3CIKKworIzogZXhfZXZhbC5jOjc1MgorbXNnaWQgIkVycm9yIGFuZCBpbnRlcnJ1cHQiCittc2dzdHIgIr+ht6+/zSDAzsXNt7TGriIKKworIzogZXhfZXZhbC5jOjc1NCBndWkuYzo0MzgxCittc2dpZCAiRXJyb3IiCittc2dzdHIgIr+ht68iCisKKyMuIGlmIChwZW5kaW5nICYgQ1NUUF9JTlRFUlJVUFQpCisjOiBleF9ldmFsLmM6NzU2Cittc2dpZCAiSW50ZXJydXB0IgorbXNnc3RyICLAzsXNt7TGriIKKworIzogZXhfZXZhbC5jOjgzMAorbXNnaWQgIkU1Nzk6IDppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTc5OiA6aWawoSCzyrmrILHtsNQgwd/DuLXHvvq9wLTPtNkiCisKKyM6IGV4X2V2YWwuYzo4NjcKK21zZ2lkICJFNTgwOiA6ZW5kaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODA6IDppZr74wMwgOmVuZGlmsKEgwNa9wLTPtNkiCisKKyM6IGV4X2V2YWwuYzo5MTEKK21zZ2lkICJFNTgxOiA6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MTogOmlmvvjAzCA6ZWxzZbChIMDWvcC0z7TZIgorCisjOiBleF9ldmFsLmM6OTE0Cittc2dpZCAiRTU4MjogOmVsc2VpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MjogOmlmvvjAzCA6ZWxzZWlmsKEgwNa9wLTPtNkiCisKKyM6IGV4X2V2YWwuYzo5MjEKK21zZ2lkICJFNTgzOiBtdWx0aXBsZSA6ZWxzZSIKK21zZ3N0ciAiRTU4Mzogv6m3r7CzwMcgOmVsc2WwoSDA1r3AtM+02SIKKworIzogZXhfZXZhbC5jOjkyNAorbXNnaWQgIkU1ODQ6IDplbHNlaWYgYWZ0ZXIgOmVsc2UiCittc2dzdHIgIkU1ODQ6IDplbHNlILXav6EgOmVsc2VpZrChIMDWvcC0z7TZIgorCisjOiBleF9ldmFsLmM6OTkxCittc2dpZCAiRTU4NTogOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU1ODU6IDp3aGlsZcDMILPKuasgse2w1CDB38O4tce++r3AtM+02SIKKworIzogZXhfZXZhbC5jOjEwNDcKK21zZ2lkICJFNTg2OiA6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODY6IDp3aGlsZb74wMwgOmNvbnRpbnVlsKEgwNa9wLTPtNkiCisKKyM6IGV4X2V2YWwuYzoxMDg3Cittc2dpZCAiRTU4NzogOmJyZWFrIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg3OiA6d2hpbGW++MDMIDpicmVha7ChIMDWvcC0z7TZIgorCisjOiBleF9ldmFsLmM6MTI4NgorbXNnaWQgIkU2MDE6IDp0cnkgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTYwMTogOnRyebChILPKuasgse2w1CDB38O4tce++r3AtM+02SIKKworIzogZXhfZXZhbC5jOjEzNjYKK21zZ2lkICJFNjAzOiA6Y2F0Y2ggd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAzOiA6dHJ5vvjAzCA6Y2F0Y2iwoSDA1r3AtM+02SIKKworIy4gR2l2ZSB1cCBmb3IgYSAiOmNhdGNoIiBhZnRlciAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjLiAqIEp1c3QgcGFyc2UuCisjOiBleF9ldmFsLmM6MTM4OAorbXNnaWQgIkU2MDQ6IDpjYXRjaCBhZnRlciA6ZmluYWxseSIKK21zZ3N0ciAiRTYwNDogOmZpbmFsbHkgtdq/oSA6Y2F0Y2iwoSDA1r3AtM+02SIKKworIzogZXhfZXZhbC5jOjE1MjEKK21zZ2lkICJFNjA2OiA6ZmluYWxseSB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDY6IDp0cnm++MDMIDpmaW5hbGx5sKEgwNa9wLTPtNkiCisKKyMuIEdpdmUgdXAgZm9yIGEgbXVsdGlwbGUgIjpmaW5hbGx5IiBhbmQgaWdub3JlIGl0LgorIzogZXhfZXZhbC5jOjE1NDUKK21zZ2lkICJFNjA3OiBtdWx0aXBsZSA6ZmluYWxseSIKK21zZ3N0ciAiRTYwNzogv6m3r7CzwMcgOmZpbmFsbHmwoSDA1r3AtM+02SIKKworIzogZXhfZXZhbC5jOjE2NTQKK21zZ2lkICJFNjAyOiA6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIKK21zZ3N0ciAiRTYwMjogOnRyeb74wMwgOmVuZHRyebChIMDWvcC0z7TZIgorCisjOiBleF9ldmFsLmM6MTk4NgorbXNnaWQgIkUxOTM6IDplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxOTM6IDplbmRmdW5jdGlvbsDMIGZ1bmN0aW9uILO7v6Egvvi9wLTPtNkiCisKKyM6IGV4X2dldGxuLmM6MzI5NgorbXNnaWQgInRhZ25hbWUiCittc2dzdHIgIsXCsdfAzLinIgorCisjOiBleF9nZXRsbi5jOjMyOTkKK21zZ2lkICIga2luZCBmaWxlXG4iCittc2dzdHIgIiBraW5kIGZpbGVcbiIKKworIzogZXhfZ2V0bG4uYzo0NzY1Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICInaGlzdG9yeScgv8m8x8DMIDDA1LTPtNkiCisKKyM6IGV4X2dldGxuLmM6NTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyAlcyBIaXN0b3J5IChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgJXMgyPe9usXkuK4gKLv1sM26zsXNIL/At6G1yCCwzSC8+Ck6XG4iCisKKyM6IGV4X2dldGxuLmM6NTAzNworbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAiuO23ySDB2SIKKworIzogZXhfZ2V0bG4uYzo1MDM4Cittc2dpZCAiU2VhcmNoIFN0cmluZyIKK21zZ3N0ciAiw6PAuyC5rsDav60iCisKKyM6IGV4X2dldGxuLmM6NTAzOQorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgIselx/YiCisKKyM6IGV4X2dldGxuLmM6NTA0MAorbXNnaWQgIklucHV0IExpbmUiCittc2dzdHIgIsDUt8IgwdkiCisKKyM6IGV4X2dldGxuLmM6NTA3OAorbXNnaWQgIkUxOTg6IGNtZF9wY2hhciBiZXlvbmQgdGhlIGNvbW1hbmQgbGVuZ3RoIgorbXNnc3RyICJFMTk4OiBjbWRfcGNoYXKwoSC47bfJILHmwMy4piC5/r7us7W9wLTPtNkiCisKKyM6IGV4X2dldGxuLmM6NTI1NQorbXNnaWQgIkUxOTk6IEFjdGl2ZSB3aW5kb3cgb3IgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIkUxOTk6IMiwvLq1yCDDosDMs6ogufbG27ChIMH2v/bBs73AtM+02SIKKworIzogZmlsZWlvLmM6Mzc3Cittc2dpZCAiSWxsZWdhbCBmaWxlIG5hbWUiCittc2dzdHIgIsDfuPi1yCDGxMDPIMDMuKciCisKKyM6IGZpbGVpby5jOjQwMSBmaWxlaW8uYzo1MzUgZmlsZWlvLmM6MjkxMyBmaWxlaW8uYzoyOTU0Cittc2dpZCAiaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIrTCIMDat+G55sDUtM+02SIKKworIzogZmlsZWlvLmM6NDAzCittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAitMIgxsTAz8DMIL7GtNW0z7TZIgorCisjOiBmaWxlaW8uYzo1NTcgZmlsZWlvLmM6NDEzMQorbXNnaWQgIltOZXcgRmlsZV0iCittc2dzdHIgIlu79SDGxMDPXSIKKworIzogZmlsZWlvLmM6NTkwCittc2dpZCAiW1Blcm1pc3Npb24gRGVuaWVkXSIKK21zZ3N0ciAiW8fjv+sgvsggtcu0z7TZXSIKKworIzogZmlsZWlvLmM6Njk0Cittc2dpZCAiRTIwMDogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG1hZGUgdGhlIGZpbGUgdW5yZWFkYWJsZSIKK21zZ3N0ciAiRTIwMDogKlJlYWRQcmUgwNq1v7jtt8nAzCDGxMDPwLsgwNDB9iC4+MfPsNQguLi16b76vcC0z7TZIgorCisjOiBmaWxlaW8uYzo2OTYKK21zZ2lkICJFMjAxOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMjAxOiAqUmVhZFByZSDA2rW/uO23ycC6IMf2wOcgufbG27imILnZstm46SC+yCC1y7TPtNkiCisKKyM6IGZpbGVpby5jOjcxNworbXNnaWQgIlZpbTogUmVhZGluZyBmcm9tIHN0ZGluLi4uXG4iCittc2dzdHIgIrr2OiDHpcHYwNS3wr+hvK0gwNC0wiDB3y4uLlxuIgorCisjOiBmaWxlaW8uYzo3MjMKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIselwdjA1LfCv6G8rSDA0LTCIMHfLi4uIgorCisjLiBSZS1vcGVuaW5nIHRoZSBvcmlnaW5hbCBmaWxlIGZhaWxlZCEKKyM6IGZpbGVpby5jOjEwMDAKK21zZ2lkICJFMjAyOiBDb252ZXJzaW9uIG1hZGUgZmlsZSB1bnJlYWRhYmxlISIKK21zZ3N0ciAiRTIwMjoguq/Ir7XIIMbEwM/AuyDA0MC7ILz2sKEgvvi9wLTPtNkhIgorCisjOiBmaWxlaW8uYzoyMDkwCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW8fHxvcvvNLEz10iCisKKyM6IGZpbGVpby5jOjIwOTcKK21zZ2lkICJbZmlmb10iCittc2dzdHIgIlvHx8b3XSIKKworIzogZmlsZWlvLmM6MjEwNAorbXNnaWQgIltzb2NrZXRdIgorbXNnc3RyICJbvNLEz10iCisKKyM6IGZpbGVpby5jOjIxMTIKK21zZ2lkICJbUk9dIgorbXNnc3RyICJbwNCx4iDA/L/rXSIKKworIzogZmlsZWlvLmM6MjEyMgorbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW0NSIL74wL1dIgorCisjOiBmaWxlaW8uYzoyMTI3Cittc2dpZCAiW05MIGZvdW5kXSIKK21zZ3N0ciAiW05MIMb3x9RdIgorCisjOiBmaWxlaW8uYzoyMTMyCittc2dpZCAiW2xvbmcgbGluZXMgc3BsaXRdIgorbXNnc3RyICJbseQgwdkgwN+4sl0iCisKKyM6IGZpbGVpby5jOjIxMzggZmlsZWlvLmM6NDExNQorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW7qvyK8gvsggtcu0z7TZXSIKKworIzogZmlsZWlvLmM6MjE0MyBmaWxlaW8uYzo0MTIwCittc2dpZCAiW2NvbnZlcnRlZF0iCittc2dzdHIgIlu6r8ivILXHvvq9wLTPtNldIgorCisjOiBmaWxlaW8uYzoyMTUwIGZpbGVpby5jOjQxNDUKK21zZ2lkICJbY3J5cHRlZF0iCittc2dzdHIgIlu+z8ijyK0gtce++r3AtM+02V0iCisKKyM6IGZpbGVpby5jOjIxNTcKK21zZ2lkICJbQ09OVkVSU0lPTiBFUlJPUl0iCittc2dzdHIgIlu6r8ivIL+ht69dIgorCisjOiBmaWxlaW8uYzoyMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIltJTExFR0FMIEJZVEUgaW4gbGluZSAlbGRdIgorbXNnc3RyICJbJWxkIMHZv6EgwN+4+LXIILnZwMzGrl0iCisKKyM6IGZpbGVpby5jOjIxNzAKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbwNCx4iC/obevXSIKKworIzogZmlsZWlvLmM6MjM4NgorbXNnaWQgIkNhbid0IGZpbmQgdGVtcCBmaWxlIGZvciBjb252ZXJzaW9uIgorbXNnc3RyICK6r8ivx8+x4iDAp8fRIMDTvcMgxsTAz8C7IMOjwLsgvPYgvvi9wLTPtNkiCisKKyM6IGZpbGVpby5jOjIzOTMKK21zZ2lkICJDb252ZXJzaW9uIHdpdGggJ2NoYXJjb252ZXJ0JyBmYWlsZWQiCittc2dzdHIgIidjaGFyY29udmVydCe4piC757/rx9Eguq/Ir8DMIL3HxtDH373AtM+02SIKKworIzogZmlsZWlvLmM6MjM5NgorbXNnaWQgImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciCittc2dzdHIgIidjaGFyY29udmVydCfAxyDD4rfCsOGw+rimIMDQwLsgvPYgvvi9wLTPtNkiCisKKyM6IGZpbGVpby5jOjI3OTYKK21zZ2lkICJFMjAzOiBBdXRvY29tbWFuZHMgZGVsZXRlZCBvciB1bmxvYWRlZCBidWZmZXIgdG8gYmUgd3JpdHRlbiIKK21zZ3N0ciAiRTIwMzogvrUgufbG27imIMDatb+47bfJwMwgwfa/7LDFs6ogtN2+0r3AtM+02SIKKworIzogZmlsZWlvLmM6MjgxOQorbXNnaWQgIkUyMDQ6IEF1dG9jb21tYW5kIGNoYW5nZWQgbnVtYmVyIG9mIGxpbmVzIGluIHVuZXhwZWN0ZWQgd2F5IgorbXNnc3RyICJFMjA0OiBBdXRvY29tbWFuZLChIMDfuPi1yCC55rn9wLi3ziDB2cC7ILnZstm++r3AtM+02SIKKworIzogZmlsZWlvLmM6Mjg1NworbXNnaWQgIk5ldEJlYW5zIGRpc3NhbGxvd3Mgd3JpdGVzIG9mIHVubW9kaWZpZWQgYnVmZmVycyIKK21zZ3N0ciAiTmV0QmVhbnO/obyttMIgudmy7sH2IL7KwLogufbG27imIL61ILz2IL74vcC0z7TZIgorCisjOiBmaWxlaW8uYzoyODY1Cittc2dpZCAiUGFydGlhbCB3cml0ZXMgZGlzYWxsb3dlZCBmb3IgTmV0QmVhbnMgYnVmZmVycyIKK21zZ3N0ciAiTmV0QmVhbnMgufbG27+hILTrx9i8rbTCILrOutAgwPrA5cC7IMfSILz2IL74vcC0z7TZIgorCisjOiBmaWxlaW8uYzoyOTE5IGZpbGVpby5jOjI5MzcKK21zZ2lkICJpcyBub3QgYSBmaWxlIG9yIHdyaXRhYmxlIGRldmljZSIKK21zZ3N0ciAixsTAzyDIpMC6IL61ILz2IMDWtMIgwOXEobChIL7GtNW0z7TZIgorCisjOiBmaWxlaW8uYzoyOTg5Cittc2dpZCAiaXMgcmVhZC1vbmx5IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIsDQseIgwPy/68DUtM+02SAotaS+7r6yt8G46SAhILT1x8+x4ikiCisKKyM6IGZpbGVpby5jOjMzMzUKK21zZ2lkICJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA2OiC56b73xsTAz8C7IL61ILz2IL74vcC0z7TZICi1pL7uvrK3wbjpICEgtPXHz7HiKSIKKworIzogZmlsZWlvLmM6MzM0NworbXNnaWQgIkU1MDc6IENsb3NlIGVycm9yIGZvciBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA3OiC56b73xsTAzyC03bHiIL+ht68gKLWkvu6+srfBuOkgISC09cfPseIpIgorCisjOiBmaWxlaW8uYzozMzQ5Cittc2dpZCAiRTUwODogQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwODoguem+98fSIMbEwM/AuyDA0MC7ILz2IL74vcC0z7TZICi1pL7uvrK3wbjpICEgtPXHz7HiKSIKKworIzogZmlsZWlvLmM6MzM2NQorbXNnaWQgIkU1MDk6IENhbm5vdCBjcmVhdGUgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwOToguem+98bEwM/AuyC4uLXpILz2IL74vcC0z7TZICi1pL7uvrK3wbjpICEgtPXHz7HiKSIKKworIzogZmlsZWlvLmM6MzQ2OAorbXNnaWQgIkU1MTA6IENhbid0IG1ha2UgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUxMDoguem+98bEwM/AuyC4uLXpILz2IL74vcC0z7TZICi1pL7uvrK3wbjpICEgtPXHz7HiKSIKKworIzogZmlsZWlvLmM6MzUzMAorbXNnaWQgIkU0NjA6IFRoZSByZXNvdXJjZSBmb3JrIHdvdWxkIGJlIGxvc3QgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ2MDogVGhlIHJlc291cmNlIGZvcmsgd2lsbCBiZSBsb3N0ICi1pL7uvrK3wbjpICEgtPXHz7HiKSIKKworIzogZmlsZWlvLmM6MzY0MAorbXNnaWQgIkUyMTQ6IENhbid0IGZpbmQgdGVtcCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjE0OiC+tSDA073DIMbEwM/AuyDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBmaWxlaW8uYzozNjU4Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKGFkZCAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIkUyMTM6ILqvyK/H0iC89iC++L3AtM+02SAouq/IryC++MDMIMD6wOXHz7fBuOkgISC09cfPseIpIgorCisjOiBmaWxlaW8uYzozNjkzCittc2dpZCAiRTE2NjogQ2FuJ3Qgb3BlbiBsaW5rZWQgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE2NjogvrUgv6yw4bXIIMbEwM/AuyC/rSC89iC++L3AtM+02SIKKworIzogZmlsZWlvLmM6MzY5NworbXNnaWQgIkUyMTI6IENhbid0IG9wZW4gZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxMjogvrUgxsTAz8C7IL+tILz2IL74vcC0z7TZIgorCisjOiBmaWxlaW8uYzozOTU5Cittc2dpZCAiRTY2NzogRnN5bmMgZmFpbGVkIgorbXNnc3RyICJFNjY3OiBGc3luY7ChIL3HxtDH373AtM+02SIKKworIzogZmlsZWlvLmM6Mzk2NgorbXNnaWQgIkU1MTI6IENsb3NlIGZhaWxlZCIKK21zZ3N0ciAiRTUxMjogtN2x4rChIL3HxtDH373AtM+02SIKKworIzogZmlsZWlvLmM6NDAzNworbXNnaWQgIkU1MTM6IHdyaXRlIGVycm9yLCBjb252ZXJzaW9uIGZhaWxlZCIKK21zZ3N0ciAiRTUxMzogvrKx4iC/obevLCC6r8ivwMwgvcfG0MffvcC0z7TZIgorCisjOiBmaWxlaW8uYzo0MDQzCittc2dpZCAiRTUxNDogd3JpdGUgZXJyb3IgKGZpbGUgc3lzdGVtIGZ1bGw/KSIKK21zZ3N0ciAiRTUxNDogvrKx4iC/obevICjGxMDPIL3DvbrF28DMILLLw6Gzqr/kPykiCisKKyM6IGZpbGVpby5jOjQxMTAKK21zZ2lkICIgQ09OVkVSU0lPTiBFUlJPUiIKK21zZ3N0ciAiILqvyK8gv6G3ryIKKworIzogZmlsZWlvLmM6NDEyNgorbXNnaWQgIltEZXZpY2VdIgorbXNnc3RyICJbwOXEoV0iCisKKyM6IGZpbGVpby5jOjQxMzEKK21zZ2lkICJbTmV3XSIKK21zZ3N0ciAiW7v1t86/7l0iCisKKyM6IGZpbGVpby5jOjQxNTMKK21zZ2lkICIgW2FdIgorbXNnc3RyICIgW2FdIgorCisjOiBmaWxlaW8uYzo0MTUzCittc2dpZCAiIGFwcGVuZGVkIgorbXNnc3RyICIgtPXH373AtM+02SIKKworIzogZmlsZWlvLmM6NDE1NQorbXNnaWQgIiBbd10iCittc2dzdHIgIiBbd10iCisKKyM6IGZpbGVpby5jOjQxNTUKK21zZ2lkICIgd3JpdHRlbiIKK21zZ3N0ciAiIMD6wOUgx9+9wLTPtNkiCisKKyM6IGZpbGVpby5jOjQyMDUKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTogxtDEoSC788XCOiC/+LehIMbEwM/AuyDA+sDlx9IgvPYgvvi9wLTPtNkiCisKKyM6IGZpbGVpby5jOjQyMjcKK21zZ2lkICJFMjA2OiBwYXRjaG1vZGU6IGNhbid0IHRvdWNoIGVtcHR5IG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDY6IMbQxKEgu/PFwjoguvMgv/i3oSDGxMDPwLsguLi16SC89iC++L3AtM+02SIKKworIzogZmlsZWlvLmM6NDI0MgorbXNnaWQgIkUyMDc6IENhbid0IGRlbGV0ZSBiYWNrdXAgZmlsZSIKK21zZ3N0ciAiRTIwNzoguem+9yDGxMDPwLsgwfa/7yC89iC++L3AtM+02SIKKworIzogZmlsZWlvLmM6NDMwNgorbXNnaWQgIiIKKyJcbiIKKyJXQVJOSU5HOiBPcmlnaW5hbCBmaWxlIG1heSBiZSBsb3N0IG9yIGRhbWFnZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIrDmsO06IL/4t6EgxsTAz8DMIL74vu7Bs7DFs6ogsfrBs8C7ILz2IMDWvcC0z7TZXG4iCisKKyM6IGZpbGVpby5jOjQzMDgKK21zZ2lkICJkb24ndCBxdWl0IHRoZSBlZGl0b3IgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorbXNnc3RyICLGxMDPwMwgvLqw+MD7wLi3ziDA+sDltckgtqex7sH2IMbtwf2x4rimILOhs7vB9iC4tr3KvcO/wCEiCisKKyM6IGZpbGVpby5jOjQzOTcKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW7W1vbpdIgorCisjOiBmaWxlaW8uYzo0Mzk3Cittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbtbW9uiDH/L3EXSIKKworIzogZmlsZWlvLmM6NDQwNAorbXNnaWQgIlttYWNdIgorbXNnc3RyICJbuMZdIgorCisjOiBmaWxlaW8uYzo0NDA0Cittc2dpZCAiW21hYyBmb3JtYXRdIgorbXNnc3RyICJbuMYgx/y9xF0iCisKKyM6IGZpbGVpby5jOjQ0MTEKK21zZ2lkICJbdW5peF0iCittc2dzdHIgIlvAr7TQvbpdIgorCisjOiBmaWxlaW8uYzo0NDExCittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW8CvtNC9uiDH/L3EXSIKKworIzogZmlsZWlvLmM6NDQzOAorbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxIMHZLCAiCisKKyM6IGZpbGVpby5jOjQ0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzLCAiCittc2dzdHIgIiVsZCDB2SwgIgorCisjOiBmaWxlaW8uYzo0NDQzCittc2dpZCAiMSBjaGFyYWN0ZXIiCittc2dzdHIgIjEgsdvA2iIKKworIzogZmlsZWlvLmM6NDQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxkILHbwNoiCisKKyM6IGZpbGVpby5jOjQ0NTUKK21zZ2lkICJbbm9lb2xdIgorbXNnc3RyICJbbm9lb2xdIgorCisjOiBmaWxlaW8uYzo0NDU1Cittc2dpZCAiW0luY29tcGxldGUgbGFzdCBsaW5lXSIKK21zZ3N0ciAiW7rSv8/A/MfRILi2wfa4tyDB2V0iCisKKyMuIGRvbid0IG92ZXJ3cml0ZSBtZXNzYWdlcyBoZXJlCisjLiBtdXN0IGdpdmUgdGhpcyBwcm9tcHQKKyMuIGRvbid0IHVzZSBlbXNnKCkgaGVyZSwgZG9uJ3Qgd2FudCB0byBmbHVzaCB0aGUgYnVmZmVycworIzogZmlsZWlvLmM6NDQ3NAorbXNnaWQgIldBUk5JTkc6IFRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgcmVhZGluZyBpdCEhISIKK21zZ3N0ciAisOaw7TogxsTAz8DMIMDQwLogtdq/oSC52bLuvvq9wLTPtNkhISEiCisKKyM6IGZpbGVpby5jOjQ0NzYKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQiCittc2dzdHIgIsGkuLu3ziC+srHiuKYgv/jHz73KtM+x7iIKKworIzogZmlsZWlvLmM6NTcyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogXCIlc1wiv6EgvrKx4iC/obevIgorCisjOiBmaWxlaW8uYzo1NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDk6IEVycm9yIGNsb3NpbmcgXCIlc1wiIgorbXNnc3RyICJFMjA5OiBcIiVzXCIgtN2x4iC/obevIgorCisjOiBmaWxlaW8uYzo1NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTA6IEVycm9yIHJlYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFMjEwOiBcIiVzXCIgwNCx4iC/obevIgorCisjOiBmaWxlaW8uYzo1OTcwCittc2dpZCAiRTI0NjogRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTI0NjogRmlsZUNoYW5nZWRTaGVsbCDA2rW/uO23ycDMILn2xtu4piDB9r/8vcC0z7TZIgorCisjOiBmaWxlaW8uYzo1OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIG5vIGxvbmdlciBhdmFpbGFibGUiCittc2dzdHIgIkUyMTE6ILDmsO06IMbEwM8gXCIlc1wiwLsouKYpILT1IMDMu/Mgu+e/68fSILz2IL74vcC0z7TZIgorCisjOiBmaWxlaW8uYzo1OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiIgorIlcxMjogsOaw7TogxsTAzyBcIiVzXCLAzCiwoSkgudmy7r76sO0guLbC+bChwfa3ziC69sDHILn2xtu1tSC52bLuvvq9wLTPtNkiCisKKyM6IGZpbGVpby5jOjU5OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMTogsOaw7TogxsTAzyBcIiVzXCLAzCiwoSkgsO3EobHiIL3DwNvH0SC12r+hILnZsu6++r3AtM+02SIKKworIzogZmlsZWlvLmM6NTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTY6ILDmsO06IMbEwM8gXCIlc1wiwMcgu/PFwrChILDtxKGx4iC9w8Dbx9Egtdq/oSC52bLuvvq9wLTPtNkiCisKKyM6IGZpbGVpby5jOjYwMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzEzOiCw5rDtOiDGxMDPIFwiJXNcIsDMKLChKSCw7cShseIgvcPA28fRILXav6EguLi16b76vcC0z7TZIgorCisjOiBmaWxlaW8uYzo2MDE5Cittc2dpZCAiU2VlIFwiOmhlbHAgVzExXCIgZm9yIG1vcmUgaW5mby4iCittc2dzdHIgIrT1ILi5wLogwaS6uLimILq4t8G46SBcIjpoZWxwIFcxMVwiwLsgwNS3wsfPvLy/5C4iCisKKyM6IGZpbGVpby5jOjYwMzMKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICKw5rDtIgorCisjOiBmaWxlaW8uYzo2MDM0Cittc2dpZCAiIgorIiZPS1xuIgorIiZMb2FkIEZpbGUiCittc2dzdHIgIiIKKyLIrsDOKCZPKVxuIgorIsbEwM8gutK3r7/AseIoJkwpIgorCisjOiBmaWxlaW8uYzo2MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjI6IENvdWxkIG5vdCBwcmVwYXJlIGZvciByZWxvYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFNDYyOiBcIiVzXCLAxyDA57fOteW4piDB2Lrxx9IgvPYgvvi9wLTPtNkiCisKKyM6IGZpbGVpby5jOjYxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IFwiJXNcIsC7KLimKSC02b3DILfOteXH0iC89iC++L3AtM+02SIKKworIzogZmlsZWlvLmM6Njc0MAorbXNnaWQgIi0tRGVsZXRlZC0tIgorbXNnc3RyICItLcH2v/bB/C0tIgorCisjLiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdAorIzogZmlsZWlvLmM6NjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY3OiBObyBzdWNoIGdyb3VwOiBcIiVzXCIiCittc2dzdHIgIkUzNjc6IMDMt7Egsde37CC++MC9OiBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjcwMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgKjogJXMiCittc2dzdHIgIkUyMTU6ICogtdq/oSDAzLvzx9EgsdvA2jogJXMiCisKKyM6IGZpbGVpby5jOjcwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBldmVudDogJXMiCittc2dzdHIgIkUyMTY6ILHXt7EgwMy6pcauIL74wL06ICVzIgorCisjOiBmaWxlaW8uYzo3MDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZ3JvdXAgb3IgZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiCx17exILHXt+zAzLOqIMDMuqXGriC++MC9OiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo3MTk4Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDA2rW/Lbjtt8kgLS0tIgorCisjOiBmaWxlaW8uYzo3NDY5Cittc2dpZCAiRTIxNzogQ2FuJ3QgZXhlY3V0ZSBhdXRvY29tbWFuZHMgZm9yIEFMTCBldmVudHMiCittc2dzdHIgIkUyMTc6IEFMTCDAzLqlxq6/oSC068fYIMDatb+47bfJwLsgvcfH4MfSILz2IL74vcC0z7TZIgorCisjOiBmaWxlaW8uYzo3NDkyCittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICK4wrTCIMDatb+47bfJwMwgvvi9wLTPtNkiCisKKyM6IGZpbGVpby5jOjc4MTMKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiDA2rW/uO23ycDMILPKuasgse2w1CDB38O4tce++r3AtM+02SIKKworIzogZmlsZWlvLmM6ODA4OAorIywgYy1mb3JtYXQKKyN+IG1zZ2lkICIlcyBBdXRvIGNvbW1hbmRzIGZvciBcIiVzXCIiCisjfiBtc2dzdHIgIiIKKworIzogZmlsZWlvLmM6ODA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmcgJXMiCittc2dzdHIgIiVzIL3Hx+DB3yIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBmaWxlaW8uYzo4MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImF1dG9jb21tYW5kICVzIgorbXNnc3RyICLA2rW/uO23ySAlcyIKKworIzogZmlsZWlvLmM6ODczMQorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IHuwoSC++L3AtM+02S4iCisKKyM6IGZpbGVpby5jOjg3MzMKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiB9sKEgvvi9wLTPtNkuIgorCisjOiBmb2xkLmM6NjgKK21zZ2lkICJFNDkwOiBObyBmb2xkIGZvdW5kIgorbXNnc3RyICJFNDkwOiBmb2xksKEgvvi9wLTPtNkiCisKKyM6IGZvbGQuYzo1OTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogx/bA58DHICdmb2xkbWV0aG9kJ8C4t84gwaKx4rimILi4tekgvPYgvvi9wLTPtNkiCisKKyM6IGZvbGQuYzo1OTUKK21zZ2lkICJFMzUxOiBDYW5ub3QgZGVsZXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MTogx/bA58DHICdmb2xkbWV0aG9kJ8C4t84gwaKx4rimIMH2v+8gvPYgvvi9wLTPtNkiCisKKyM6IGdldGNoYXIuYzoyNDgKK21zZ2lkICJFMjIyOiBBZGQgdG8gcmVhZCBidWZmZXIiCittc2dzdHIgIkUyMjI6IMDQx/TB+CC59sbbv6EgtPXHz7HiIgorCisjOiBnZXRjaGFyLmM6MjIwOAorbXNnaWQgIkUyMjM6IHJlY3Vyc2l2ZSBtYXBwaW5nIgorbXNnc3RyICJFMjIzOiDA57HNILjKx84iCisKKyM6IGdldGNoYXIuYzozMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjQ6IGdsb2JhbCBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI0OiAlcyDA/L+qIL7gvu6woSDAzLnMIMG4wOfH1bTPtNkiCisKKyM6IGdldGNoYXIuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTogJXMgwPy/qiC4xcfOwMwgwMy5zCDBuMDnx9W0z7TZIgorCisjOiBnZXRjaGFyLmM6MzIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI2OiBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI2OiAlcyC+4L7usKEgwMy5zCDBuMDnx9W0z7TZIgorCisjOiBnZXRjaGFyLmM6MzIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI3OiBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNzogJXMguMXHzsDMIMDMucwgwbjA58fVtM+02SIKKworIzogZ2V0Y2hhci5jOjMyODkKK21zZ2lkICJObyBhYmJyZXZpYXRpb24gZm91bmQiCittc2dzdHIgIr7gvu64piDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBnZXRjaGFyLmM6MzI5MQorbXNnaWQgIk5vIG1hcHBpbmcgZm91bmQiCittc2dzdHIgIrjKx87AuyDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBnZXRjaGFyLmM6NDE4MworbXNnaWQgIkUyMjg6IG1ha2VtYXA6IElsbGVnYWwgbW9kZSIKK21zZ3N0ciAiRTIyODogbWFrZW1hcDogwMy788fRILvzxcIiCisKKyM6IGd1aS5jOjIyMAorbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiBHVUm4piC9w8Dbx9IgvPYgvvi9wLTPtNkiCisKKyM6IGd1aS5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogXCIlc1wiv6G8rSDA0MC7ILz2IL74vcC0z7TZIgorCisjOiBndWkuYzo0NzIKK21zZ2lkICJFNjY1OiBDYW5ub3Qgc3RhcnQgR1VJLCBubyB2YWxpZCBmb250IGZvdW5kIgorbXNnc3RyICJFNjY1OiC+tbi4x9Egsduyw8C7IMOjwLsgvPYgvvi+7rytIEdVSbimIL3Hx+DH0iC89iC++L3AtM+02SIKKworIzogZ3VpLmM6NDc3Cittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiAnZ3VpZm9udHdpZGUnsKEgwMy788fVtM+02SIKKworIzogZ3VpLmM6NTQ3Cittc2dpZCAiRTU5OTogVmFsdWUgb2YgJ2ltYWN0aXZhdGVrZXknIGlzIGludmFsaWQiCittc2dzdHIgIkU1OTk6ICdpbWFjdGl2YXRla2V5JyCwqsDMIMDMu/PH1bTPtNkiCisKKyM6IGd1aS5jOjQwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiC79iAlc8C7KLimKSDH0rTnx9IgvPYgvvi9wLTPtNkiCisKKyM6IGd1aV9hdF9mcy5jOjMwMAorbXNnaWQgIjxjYW5ub3Qgb3Blbj4gIgorbXNnc3RyICI8v60gvPYgvvjAvT4gIgorCisjOiBndWlfYXRfZnMuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAiRTYxNjogdmltX1NlbEZpbGU6ILHbssMgJXPAuyi4pikgvvLAuyC89iC++L3AtM+02SIKKworIzogZ3VpX2F0X2ZzLmM6Mjc4MQorbXNnaWQgIkU2MTQ6IHZpbV9TZWxGaWxlOiBjYW4ndCByZXR1cm4gdG8gY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgIkU2MTQ6IHZpbV9TZWxGaWxlOiDH9sDnILXwt7rF5Liut84gtbm+xrClILz2IL74vcC0z7TZIgorCisjOiBndWlfYXRfZnMuYzoyODAxCittc2dpZCAiUGF0aG5hbWU6IgorbXNnc3RyICKw5rfOIMDMuKc6IgorCisjOiBndWlfYXRfZnMuYzoyODA3Cittc2dpZCAiRTYxNTogdmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNTogdmltX1NlbEZpbGU6IMf2wOcgtfC3usXkuK64piC+8sC7ILz2IL74vcC0z7TZIgorCisjOiBndWlfYXRfZnMuYzoyODE1IGd1aV9tb3RpZi5jOjE2MjMKK21zZ2lkICJPSyIKK21zZ3N0ciAiyK7AziIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfZ3RrLmM6MjczMSBndWlfbW90aWYuYzoxNjE4IGd1aV9tb3RpZi5jOjI4NDkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIsPrvNIiCisKKyM6IGd1aV9hdF9zYi5jOjQ4NgorbXNnaWQgIlNjcm9sbGJhciBXaWRnZXQ6IENvdWxkIG5vdCBnZXQgZ2VvbWV0cnkgb2YgdGh1bWIgcGl4bWFwLiIKK21zZ3N0ciAivbrFqbfRudkgwKfBrDogveYgx8i9urjKwMcgwfa/wLnMxq64rrimIL7ywLsgvPYgvvi9wLTPtNkuIgorCisjOiBndWlfYXRoZW5hLmM6MjA0NyBndWlfbW90aWYuYzoxODcxCittc2dpZCAiVmltIGRpYWxvZyIKK21zZ3N0ciAiuvYgtOvIrbvzwNoiCisKKyM6IGd1aV9iZXZhbC5jOjEwMSBndWlfdzMyLmM6Mzk1NAorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICJFMjMyOiC43r3Dwfa/zSDE3bnpILjwtc64piC757/rx9i8rbTCIEJhbGxvb25FdmFswLsguLi16SC89iC++L3AtM+02SIKKworIzogZ3VpX2d0ay5jOjE2MDcKK21zZ2lkICJWaW0gZGlhbG9nLi4uIgorbXNnc3RyICK69iC068itu/PA2i4uLiIKKworIzogZ3VpX2d0ay5jOjIwNjAgbWVzc2FnZS5jOjI5OTkKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyK/uSgmWSlcbiIKKyK+xrTPv8AoJk4pXG4iCisiw+u80igmQykiCisKKyM6IGd1aV9ndGsuYzoyMjY4Cittc2dpZCAiSW5wdXQgX01ldGhvZHMiCittc2dzdHIgIsDUt8Iguea5/ShfTSkiCisKKyM6IGd1aV9ndGsuYzoyNTM0IGd1aV9tb3RpZi5jOjI3NjgKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIrr2IC0gw6O+xrytILnZstmx4i4uLiIKKworIzogZ3VpX2d0ay5jOjI1NDIgZ3VpX21vdGlmLmM6Mjc3MAorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiuvYgLSDDo7HiLi4uIgorCisjOiBndWlfZ3RrLmM6MjU3NCBndWlfbW90aWYuYzoyODg4Cittc2dpZCAiRmluZCB3aGF0OiIKK21zZ3N0ciAiuau+8yDDo8C7se6/5DoiCisKKyM6IGd1aV9ndGsuYzoyNTkyIGd1aV9tb3RpZi5jOjI5MjAKK21zZ2lkICJSZXBsYWNlIHdpdGg6IgorbXNnc3RyICK52bLcILmuwNq/rToiCisKKyMuIHdob2xlIHdvcmQgb25seSBidXR0b24KKyM6IGd1aV9ndGsuYzoyNjI0IGd1aV9tb3RpZi5jOjMwMzYKK21zZ2lkICJNYXRjaCB3aG9sZSB3b3JkIG9ubHkiCittc2dzdHIgIrbIsLDAuiCzubi7uLgiCisKKyMuIG1hdGNoIGNhc2UgYnV0dG9uCisjOiBndWlfZ3RrLmM6MjYzNSBndWlfbW90aWYuYzozMDQ4CisjfiBtc2dpZCAiTWF0Y2ggY2FzZSIKKyN+IG1zZ3N0ciAiIgorCisjOiBndWlfZ3RrLmM6MjY0NSBndWlfbW90aWYuYzoyOTkwCittc2dpZCAiRGlyZWN0aW9uIgorbXNnc3RyICK55sfiIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjI2NTcgZ3VpX21vdGlmLmM6MzAwMgorbXNnaWQgIlVwIgorbXNnc3RyICLAp7fOIgorCisjOiBndWlfZ3RrLmM6MjY2MSBndWlfbW90aWYuYzozMDEwCittc2dpZCAiRG93biIKK21zZ3N0ciAivsa3obfOIgorCisjOiBndWlfZ3RrLmM6MjY4MyBndWlfZ3RrLmM6MjY4NSBndWlfbW90aWYuYzoyNzkyCittc2dpZCAiRmluZCBOZXh0IgorbXNnc3RyICK02cC9IMOjseIiCisKKyM6IGd1aV9ndGsuYzoyNzAyIGd1aV9ndGsuYzoyNzA0IGd1aV9tb3RpZi5jOjI4MDkKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICK52bLZseIiCisKKyM6IGd1aV9ndGsuYzoyNzE1IGd1aV9ndGsuYzoyNzE3IGd1aV9tb3RpZi5jOjI4MjIKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAiuPC1ziC52bLZseIiCisKKyM6IGd1aV9ndGtfeDExLmM6MjMyNworbXNnaWQgIlZpbTogUmVjZWl2ZWQgXCJkaWVcIiByZXF1ZXN0IGZyb20gc2Vzc2lvbiBtYW5hZ2VyXG4iCittc2dzdHIgIrr2OiC8vLzHILD8uK7A2rfOus7FzSBcImRpZVwiIL/kw7vAuyC53r7SvcC0z7TZXG4iCisKKyM6IGd1aV9ndGtfeDExLmM6MzUxOQorbXNnaWQgIlZpbTogTWFpbiB3aW5kb3cgdW5leHBlY3RlZGx5IGRlc3Ryb3llZFxuIgorbXNnc3RyICK69joguN7AziDDosDMIMHXsNQgtckgsM3A1LTPtNlcbiIKKworIzogZ3VpX2d0a194MTEuYzo0MTM4Cittc2dpZCAiRm9udCBTZWxlY3Rpb24iCittc2dzdHIgIrHbssMgsO24o7HiIgorCisjOiBndWlfZ3RrX3gxMS5jOjYwMzUgdWkuYzoyMTIwCittc2dpZCAiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIKK21zZ3N0ciAiuvMgsO24o7HiILTrvcUgQ1VUX0JVRkZFUjDAuyC757/rx9+9wLTPtNkiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTcgZ3VpX21vdGlmLmM6MTYyMAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAisMW4o7CzIgorCisjOiBndWlfbW90aWYuYzoxNjE5Cittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIsDat+G55iIKKworIzogZ3VpX21vdGlmLmM6MTYyMQorbXNnaWQgIkhlbHAiCittc2dzdHIgIrW1v/K4uyIKKworIzogZ3VpX21vdGlmLmM6MTYyMgorbXNnaWQgIkZpbGVzIgorbXNnc3RyICLGxMDPIgorCisjOiBndWlfbW90aWYuYzoxNjI0Cittc2dpZCAiU2VsZWN0aW9uIgorbXNnc3RyICKw7bijseIiCisKKyM6IGd1aV9tb3RpZi5jOjI4MzUKK21zZ2lkICJVbmRvIgorbXNnc3RyICLD67zSIgorCisjOiBndWlfcmlzY29zLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTA6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTYxMDogWmFwILHbssMgJyVzJ8C7KLimKSC3zrXlx9IgvPYgvvi9wLTPtNkiCisKKyM6IGd1aV9yaXNjb3MuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTE6IENhbid0IHVzZSBmb250ICVzIgorbXNnc3RyICJFNjExOiCx27LDICVzwLsouKYpILvnv+vH0iC89iC++L3AtM+02SIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNzAKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisiwNq9xCDHwbfOvLy9urimILOhs7ux4iDAp8fYILjevcPB9rimILq4s8K9wLTPtNkuXG4iCisKKyM6IGd1aV93MzIuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MzogQXJndW1lbnQgbm90IHN1cHBvcnRlZDogXCItJXNcIjsgVXNlIHRoZSBPTEUgdmVyc2lvbi4iCittc2dzdHIgIkUyNDM6IMH2v/i1x8H2IL7KtMIgwM7A2jogXCItJXNcIjogT0xFIMbHwLsgu+e/68fPvcq9w7/ALiIKKworIzogZ3VpX3c0OC5jOjIxNjMKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICK5rsDav60gw6Ox4iAoJ1xcJ7imIMOjwLi3wbjpICdcXFxcJyC757/rKSIKKworIzogZ3VpX3c0OC5jOjIxODgKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICK5rsDav60gw6O+xiC52bLZseIgKCdcXCe4piDDo8C4t8G46SAnXFxcXCcgu+e/6ykiCisKKyM6IGd1aV94MTEuYzoxNTM3Cittc2dpZCAiVmltIEU0NTg6IENhbm5vdCBhbGxvY2F0ZSBjb2xvcm1hcCBlbnRyeSwgc29tZSBjb2xvcnMgbWF5IGJlIGluY29ycmVjdCIKK21zZ3N0ciAiIgorIrr2IEU0NTg6ILv2u/O4yiC/o8auuK64piDH0rTnx9IgvPYgvvi9wLTPtNksILjuuO4gu/bAzCDA37j4tckgvPYgwNa9wLTPtNkiCisKKyM6IGd1aV94MTEuYzoyMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICJFMjUwOiC02cC9ILHbwNq8wsDHILHbssPAzCCx27LDvMIgJXO/oSC++L3AtM+02ToiCisKKyM6IGd1aV94MTEuYzoyMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTI6IEZvbnRzZXQgbmFtZTogJXMiCittc2dzdHIgIkUyNTI6ILHbssO8wiDAzLinOiAlcyIKKworIzogZ3VpX3gxMS5jOjIxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCAnJXMnIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAisduywyAnJXMnwLootMIpILDtwaSz0MDMsKEgvsa01bTPtNkiCisKKyM6IGd1aV94MTEuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTM6IEZvbnRzZXQgbmFtZTogJXNcbiIKK21zZ3N0ciAiRTI1Mzogsduyw7zCIMDMuKc6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwOiAlc1xuIgorbXNnc3RyICKx27LDMDogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDE6ICVzXG4iCittc2dzdHIgIrHbssMxOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250JWxkIHdpZHRoIGlzIG5vdCB0d2ljZSB0aGF0IG9mIGZvbnQwXG4iCittc2dzdHIgIrHbssMlbGQgs8q68bChILHbssMwwMcgtc656LChIL7GtNW0z7TZXG4iCisKKyM6IGd1aV94MTEuYzoyMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwIHdpZHRoOiAlbGRcbiIKK21zZ3N0ciAisduywzAgs8q68TogJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyKx27LDMSCzyrrxOiAlbGRcbiIKKyJcbiIKKworIzogaGFuZ3VsaW4uYzo2MTAKK21zZ2lkICJFMjU2OiBIYW5ndWwgYXV0b21hdGEgRVJST1IiCittc2dzdHIgIkUyNTY6IMfRsdsgv8DF5Li2xbggv6G3ryIKKworIzogaWZfY3Njb3BlLmM6NzcKK21zZ2lkICJBZGQgYSBuZXcgZGF0YWJhc2UiCittc2dzdHIgIrv1ILWlwMzFzbqjwMy9uiC09cfPseIiCisKKyM6IGlmX2NzY29wZS5jOjc5CisjfiBtc2dpZCAiUXVlcnkgZm9yIGEgcGF0dGVybiIKKyN+IG1zZ3N0ciAiIgorCisjOiBpZl9jc2NvcGUuYzo4MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICLAzCC43r3DwfYgurjAzLHiIgorCisjOiBpZl9jc2NvcGUuYzo4MworbXNnaWQgIktpbGwgYSBjb25uZWN0aW9uIgorbXNnc3RyICK/rLDhILL3seIiCisKKyM6IGlmX2NzY29wZS5jOjg1Cittc2dpZCAiUmVpbml0IGFsbCBjb25uZWN0aW9ucyIKK21zZ3N0ciAiuPC15yC/rLDhILTZvcMgw8qx4sitIgorCisjOiBpZl9jc2NvcGUuYzo4NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIr+ssOEguri/qcHWseIiCisKKyM6IGlmX2NzY29wZS5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjA6IFVzYWdlOiBjc1tjb3BlXSAlcyIKK21zZ3N0ciAiRTU2MDogu+e/67n9OiBjc1tjb3BlXSAlcyIKKworIzogaWZfY3Njb3BlLmM6MTI0Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICLAzCBjc2NvcGUguO23ycC6IMOiILOqtKmx4rimIMH2v/jHz8H2IL7KvcC0z7TZLlxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzUKK21zZ2lkICJFNTYyOiBVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiRTU2Mjogu+e/67n9OiBjc3RhZyA8aWRlbnQ+IgorCisjOiBpZl9jc2NvcGUuYzoyMzEKK21zZ2lkICJFMjU3OiBjc3RhZzogdGFnIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI1NzogY3N0YWc6IMXCsde4piDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBpZl9jc2NvcGUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2Mzogc3RhdCglcykgZXJyb3I6ICVkIgorbXNnc3RyICJFNTYzOiBzdGF0KCVzKSC/obevOiAlZCIKKworIzogaWZfY3Njb3BlLmM6NDE5Cittc2dpZCAiRTU2Mzogc3RhdCBlcnJvciIKK21zZ3N0ciAiRTU2Mzogc3RhdCC/obevIgorCisjOiBpZl9jc2NvcGUuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2NDogJXMgaXMgbm90IGEgZGlyZWN0b3J5IG9yIGEgdmFsaWQgY3Njb3BlIGRhdGFiYXNlIgorbXNnc3RyICJFNTY0OiAlc8C6KLTCKSC18Le6xeS4rrW1IMikwLogY3Njb3BlILWlwMzFzbqjwMy9urChIL7GtNW0z7TZIgorCisjOiBpZl9jc2NvcGUuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICJjc2NvcGUgtaXAzMXNuqPAzL26ICVzv6EgtPXH373AtM+02S4iCisKKyM6IGlmX2NzY29wZS5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVsZCIKK21zZ3N0ciAiRTI2MjogY3Njb3BlIL+ssOEgJWxkIMDQseIgv6G3ryIKKworIzogaWZfY3Njb3BlLmM6Njk0Cittc2dpZCAiRTU2MTogdW5rbm93biBjc2NvcGUgc2VhcmNoIHR5cGUiCittc2dzdHIgIkU1NjE6ILjwuKO0wiBjc2NvcGUgw6Ox4iDH/L3EIgorCisjOiBpZl9jc2NvcGUuYzo3MzYKK21zZ2lkICJFNTY2OiBDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiRTU2NjogY3Njb3BlIMbEwMzHwbimILi4tekgvPYgvvi9wLTPtNkiCisKKyM6IGlmX2NzY29wZS5jOjc1MworbXNnaWQgIkU2MjI6IENvdWxkIG5vdCBmb3JrIGZvciBjc2NvcGUiCittc2dzdHIgIkU2MjI6IGNzY29wZbimIGZvcmvH0iC89iC++L3AtM+02SIKKworIzogaWZfY3Njb3BlLmM6ODQ3IGlmX2NzY29wZS5jOjg5NworbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uIGV4ZWMgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbiC9x8fgwMwgvcfG0MffvcC0z7TZIgorCisjOiBpZl9jc2NvcGUuYzo4OTgKK21zZ2lkICJFNjIzOiBDb3VsZCBub3Qgc3Bhd24gY3Njb3BlIHByb2Nlc3MiCittc2dzdHIgIkU2MjM6IGNzY29wZSDHwbfOvLy9urimIHNwYXdux9IgvPYgvvi9wLTPtNkiCisKKyM6IGlmX2NzY29wZS5jOjkxMQorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIHRvX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IHRvX2Zwv6EgtOvH0SBmZG9wZW4gvcfG0CIKKworIzogaWZfY3Njb3BlLmM6OTEzCittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgZnJfZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZnJfZnC/oSC068fRIGZkb3BlbiC9x8bQIgorCisjOiBpZl9jc2NvcGUuYzo5NTEKK21zZ2lkICJFNTY3OiBubyBjc2NvcGUgY29ubmVjdGlvbnMiCittc2dzdHIgIkU1Njc6IGNzY29wZSC/rLDhwMwgvvi9wLTPtNkiCisKKyM6IGlmX2NzY29wZS5jOjEwMjUKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorI34gbXNnc3RyICIiCisKKyM6IGlmX2NzY29wZS5jOjEwODIKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiRTQ2OTogaW52YWxpZCBjc2NvcGVxdWlja2ZpeCBmbGFnICVjIGZvciAlYyIKKyN+IG1zZ3N0ciAiIgorCisjOiBpZl9jc2NvcGUuYzoxMTUyCittc2dpZCAiY3Njb3BlIGNvbW1hbmRzOlxuIgorbXNnc3RyICJjc2NvcGUguO23yTpcbiIKKworIzogaWZfY3Njb3BlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLTVzOiAlLTMwcyAoVXNhZ2U6ICVzKSIKK21zZ3N0ciAiJS01czogJS0zMHMgKLvnv+u5/TogJXMpIgorCisjOiBpZl9jc2NvcGUuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjU6IGNhbm5vdCBvcGVuIGNzY29wZSBkYXRhYmFzZTogJXMiCittc2dzdHIgIkU2MjU6IGNzY29wZSC1pcDMxc26o8DMvbq4piC/rSC89iC++MC9OiAlcyIKKworIzogaWZfY3Njb3BlLmM6MTI3MQorbXNnaWQgIkU2MjY6IGNhbm5vdCBnZXQgY3Njb3BlIGRhdGFiYXNlIGluZm9ybWF0aW9uIgorbXNnc3RyICJFNjI2OiBjc2NvcGUgtaXAzMXNuqPAzL26IMGkuri4piC+8sC7ILz2IL74vcC0z7TZIgorCisjOiBpZl9jc2NvcGUuYzoxMjk2Cittc2dpZCAiRTU2ODogZHVwbGljYXRlIGNzY29wZSBkYXRhYmFzZSBub3QgYWRkZWQiCittc2dzdHIgIkU1Njg6IMHfurm1yCBjc2NvcGUgtaXAzMXNuqPAzL26tMIgtPXH2MH2wfYgvsq+0r3AtM+02SIKKworIzogaWZfY3Njb3BlLmM6MTMwNworbXNnaWQgIkU1Njk6IG1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICJFNTY5OiBjc2NvcGUgv6yw4SDH47/rxKHAxyDD1rTrILCqv6EgtbW03sffvcC0z7TZIgorCisjOiBpZl9jc2NvcGUuYzoxNDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNjE6IGNzY29wZSBjb25uZWN0aW9uICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MTogY3Njb3BlIL+ssOEgJXPAuyi4pikgw6PAuyC89iC++L3AtM+02SIKKworIzogaWZfY3Njb3BlLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWQiCittc2dzdHIgImNzY29wZSC/rLDhICVzwMwosKEpILTdx/u9wLTPtNkiCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTU5OAorbXNnaWQgIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJFNTcwOiBjc19tYW5hZ2VfbWF0Y2hlc7+hIL3JsKLH0SC/obevIgorCisjOiBpZl9jc2NvcGUuYzoxODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzIgorbXNnc3RyICJDc2NvcGUgxcKx1zogJXMiCisKKyM6IGlmX2NzY29wZS5jOjE4NzAKK21zZ2lkICIiCisiXG4iCisiICAgIyAgIGxpbmUiCittc2dzdHIgIiIKKyJcbiIKKyIgICAjICAgwdkiCisKKyM6IGlmX2NzY29wZS5jOjE4NzIKK21zZ2lkICJmaWxlbmFtZSAvIGNvbnRleHQgLyBsaW5lXG4iCittc2dzdHIgIsbEwM8gwMy4pyAvIMTcxdi9usauIC8gwdlcbiIKKworIzogaWZfY3Njb3BlLmM6MTk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA5OiBDc2NvcGUgZXJyb3I6ICVzIgorbXNnc3RyICJFNjA5OiBDc2NvcGUgv6G3rzogJXMiCisKKyM6IGlmX2NzY29wZS5jOjIxNzYKK21zZ2lkICJBbGwgY3Njb3BlIGRhdGFiYXNlcyByZXNldCIKK21zZ3N0ciAiuPC15yBjc2NvcGUgtaXAzMXNuqPAzL26ILiuvMIiCisKKyM6IGlmX2NzY29wZS5jOjIyNDQKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAiY3Njb3BlIL+ssOHAzCC++L3AtM+02VxuIgorCisjOiBpZl9jc2NvcGUuYzoyMjQ4Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAgtaXAzMXNuqPAzL26IMDMuKcgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iCisKKyM6IGlmX3B5dGhvbi5jOjQzNgorbXNnaWQgIiIKKyJFMjYzOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUHl0aG9uIGxpYnJhcnkgY291bGQgbm90IGJlICIKKyJsb2FkZWQuIgorbXNnc3RyICIiCisiRTI2Mzogucy+yMfVtM+02SwgwMwguO23ycC6ILvnv+vH0iC89iC++L3AtM+02SwgxsTAzL3jILbzwMy66revuK64piC3zrX5x9IgIgorIrz2IL74vcC0z7TZLiIKKworIzogaWZfcHl0aG9uLmM6NTAwCittc2dpZCAiRTY1OTogQ2Fubm90IGludm9rZSBQeXRob24gcmVjdXJzaXZlbHkiCittc2dzdHIgIkU2NTk6IFB5dGhvbsC7IMDnsc3Io8Pix9IgvPYgvvi9wLTPtNkiCisKKyM6IGlmX3B5dGhvbi5jOjcwMQorbXNnaWQgImNhbid0IGRlbGV0ZSBPdXRwdXRPYmplY3QgYXR0cmlidXRlcyIKK21zZ3N0ciAiT3V0cHV0T2JqZWN0ILzTvLrAuyDB9r/vILz2IL74vcC0z7TZIgorCisjOiBpZl9weXRob24uYzo3MDgKK21zZ2lkICJzb2Z0c3BhY2UgbXVzdCBiZSBhbiBpbnRlZ2VyIgorbXNnc3RyICJzb2Z0c3BhY2W0wiDBpLz2v6m+37i4IMfVtM+02SIKKworIzogaWZfcHl0aG9uLmM6NzE2Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUiCittc2dzdHIgIsDfuPi1yCC807y6IgorCisjOiBpZl9weXRob24uYzo3NTUgaWZfcHl0aG9uLmM6NzY5Cittc2dpZCAid3JpdGVsaW5lcygpIHJlcXVpcmVzIGxpc3Qgb2Ygc3RyaW5ncyIKK21zZ3N0ciAid3JpdGVsaW5lcygptMIgua7A2r+tILjxt8/AzCDHyr/kx9W0z7TZIgorCisjOiBpZl9weXRob24uYzo4OTUKK21zZ2lkICJFMjY0OiBQeXRob246IEVycm9yIGluaXRpYWxpc2luZyBJL08gb2JqZWN0cyIKK21zZ3N0ciAiRTI2NDogxsTAzL3jOiBJL08gsLTDvCDDyrHiyK3B3yC/obevsKEgu/2w5b3AtM+02SIKKworIzogaWZfcHl0aG9uLmM6MTA4MCBpZl90Y2wuYzoxNDAyCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICLA37j4tcggx6XH9r3EIgorCisjOiBpZl9weXRob24uYzoxMDk0IGlmX3RjbC5jOjE0MDcKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIselx/a9xMC7IMH2v/jHz8H2IL7KtbW3zyDExMbEwM8gtce++r3AtM+02SIKKworIzogaWZfcHl0aG9uLmM6MTEwNworbXNnaWQgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCBidWZmZXIiCittc2dzdHIgIsH2v/bB+CC59sbbuKYgwvzBtsfPt8Gw7SDHz7+0vcC0z7TZIgorCisjOiBpZl9weXRob24uYzoxMTIyIGlmX3B5dGhvbi5jOjExNjMgaWZfcHl0aG9uLmM6MTIyNyBpZl90Y2wuYzoxMjE0Cittc2dpZCAibGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIgorbXNnc3RyICLB2SC5+MijsKEgufzAp7imILn+vu6ztb3AtM+02SIKKworIzogaWZfcHl0aG9uLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICI8YnVmZmVyIG9iamVjdCAoZGVsZXRlZCkgYXQgJThsWD4iCittc2dzdHIgIjwlOGxYv6EgufbG2yCwtMO8ICjB9r/2wbO9wLTPtNkpPiIKKworIzogaWZfcHl0aG9uLmM6MTQ1MyBpZl90Y2wuYzo4MzYKK21zZ2lkICJpbnZhbGlkIG1hcmsgbmFtZSIKK21zZ3N0ciAiwN+4+LXIILi2xakgwMy4pyIKKworIzogaWZfcHl0aG9uLmM6MTczMworbXNnaWQgIm5vIHN1Y2ggYnVmZmVyIgorbXNnc3RyICKx17exILn2xtu0wiC++L3AtM+02SIKKworIzogaWZfcHl0aG9uLmM6MTgyMQorbXNnaWQgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCB3aW5kb3ciCittc2dzdHIgIsH2v/bB+CDDosC7IML8wbbHz7fBsO0gx8+/tL3AtM+02SIKKworIzogaWZfcHl0aG9uLmM6MTg2NgorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAiwNCx4iDA/L/rILzTvLoiCisKKyM6IGlmX3B5dGhvbi5jOjE4NzkKK21zZ2lkICJjdXJzb3IgcG9zaXRpb24gb3V0c2lkZSBidWZmZXIiCittc2dzdHIgIsbbvK0gwKfEobChILn2xtsgudu/oSDA1r3AtM+02SIKKworIzogaWZfcHl0aG9uLmM6MTk1NgorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAoZGVsZXRlZCkgYXQgJS44bFg+IgorbXNnc3RyICI8JS44bFi/oSDDoiCwtMO8ICjB9r/2wbO9wLTPtNkpPiIKKworIzogaWZfcHl0aG9uLmM6MTk2OAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IgorbXNnc3RyICI8JS44bFi/oSDDoiCwtMO8ICi48LinKT4iCisKKyM6IGlmX3B5dGhvbi5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyAlZD4iCittc2dzdHIgIjzDoiAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjIwNDYKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAisde3sSDDosC6IL74vcC0z7TZIgorCisjOiBpZl9weXRob24uYzoyMzA3IGlmX3B5dGhvbi5jOjIzNDEgaWZfcHl0aG9uLmM6MjM5NiBpZl9weXRob24uYzoyNDY0CisjOiBpZl9weXRob24uYzoyNTg2IGlmX3B5dGhvbi5jOjI2MzggaWZfdGNsLmM6Njg0IGlmX3RjbC5jOjcyOSBpZl90Y2wuYzo4MDMKKyM6IGlmX3RjbC5jOjg3MyBpZl90Y2wuYzoxOTk5Cittc2dpZCAiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAidW5kbyDBpLq4uKYgwPrA5cfSILz2IL74vcC0z7TZIgorCisjOiBpZl9weXRob24uYzoyMzA5IGlmX3B5dGhvbi5jOjI0MDMgaWZfcHl0aG9uLmM6MjQ3NQorbXNnaWQgImNhbm5vdCBkZWxldGUgbGluZSIKK21zZ3N0ciAiwdnAuyDB9r/vILz2IL74vcC0z7TZIgorCisjOiBpZl9weXRob24uYzoyMzQ2IGlmX3B5dGhvbi5jOjI0OTEgaWZfdGNsLmM6NjkwIGlmX3RjbC5jOjIwMjEKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICLB2cC7ILnZstwgvPYgvvi9wLTPtNkiCisKKyM6IGlmX3B5dGhvbi5jOjI1MDkgaWZfcHl0aG9uLmM6MjU4OCBpZl9weXRob24uYzoyNjQ2Cittc2dpZCAiY2Fubm90IGluc2VydCBsaW5lIgorbXNnc3RyICLB2cC7ILOiv/az1sC7ILz2IL74vcC0z7TZIgorCisjOiBpZl9weXRob24uYzoyNzUwCittc2dpZCAic3RyaW5nIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICK5rsDav63AuiBuZXdsaW5lwLsgxvfH1MfSILz2IL74vcC0z7TZIgorCisjOiBpZl9ydWJ5LmM6NDIyCittc2dpZCAiIgorIkUyNjY6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBSdWJ5IGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjY2OiC5zL7Ix9W0z7TZLCDAzCC47bfJwLogu+e/68fSILz2IL74vcC0z7TZLCC357rxILbzwMy66revuK64piC3zrX5x9IgvPYgIgorIr74vcC0z7TZLiIKKworIzogaWZfcnVieS5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjczOiB1bmtub3duIGxvbmdqbXAgc3RhdHVzICVkIgorbXNnc3RyICJFMjczOiC48LijtMIgbG9uZ2ptcCC788XCICVkIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIsXksdsgsbjH9i/BpMDHIgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICIuLi7AxyCx4rq7IMWst6G9uiC6uL+pwdax4iIKKworIzogaWZfc25pZmYuYzo2OQorI34gbXNnaWQgIlNob3cgb3ZlcnJpZGRlbiBtZW1iZXIgZnVuY3Rpb24iCisjfiBtc2dzdHIgIiIKKworIzogaWZfc25pZmYuYzo3MAorI34gbXNnaWQgIlJldHJpZXZlIGZyb20gZmlsZSIKKyN+IG1zZ3N0ciAiIgorCisjOiBpZl9zbmlmZi5jOjcxCisjfiBtc2dpZCAiUmV0cmlldmUgZnJvbSBwcm9qZWN0IgorI34gbXNnc3RyICIiCisKKyM6IGlmX3NuaWZmLmM6NzMKKyN+IG1zZ2lkICJSZXRyaWV2ZSBmcm9tIGFsbCBwcm9qZWN0cyIKKyN+IG1zZ3N0ciAiIgorCisjOiBpZl9zbmlmZi5jOjc0CisjfiBtc2dpZCAiUmV0cmlldmUiCisjfiBtc2dzdHIgIiIKKworIzogaWZfc25pZmYuYzo3NQorI34gbXNnaWQgIlNob3cgc291cmNlIG9mIgorI34gbXNnc3RyICIiCisKKyM6IGlmX3NuaWZmLmM6NzYKKyN+IG1zZ2lkICJGaW5kIHN5bWJvbCIKKyN+IG1zZ3N0ciAiIgorCisjOiBpZl9zbmlmZi5jOjc3CisjfiBtc2dpZCAiQnJvd3NlIGNsYXNzIgorI34gbXNnc3RyICIiCisKKyM6IGlmX3NuaWZmLmM6NzgKKyN+IG1zZ2lkICJTaG93IGNsYXNzIGluIGhpZXJhcmNoeSIKKyN+IG1zZ3N0ciAiIgorCisjOiBpZl9zbmlmZi5jOjc5CisjfiBtc2dpZCAiU2hvdyBjbGFzcyBpbiByZXN0cmljdGVkIGhpZXJhcmNoeSIKKyN+IG1zZ3N0ciAiIgorCisjOiBpZl9zbmlmZi5jOjgwCisjfiBtc2dpZCAiWHJlZiByZWZlcnMgdG8iCisjfiBtc2dzdHIgIiIKKworIzogaWZfc25pZmYuYzo4MQorI34gbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCisjfiBtc2dzdHIgIiIKKworIzogaWZfc25pZmYuYzo4MgorI34gbXNnaWQgIlhyZWYgaGFzIGEiCisjfiBtc2dzdHIgIiIKKworIzogaWZfc25pZmYuYzo4MworI34gbXNnaWQgIlhyZWYgdXNlZCBieSIKKyN+IG1zZ3N0ciAiIgorCisjOiBpZl9zbmlmZi5jOjg0CisjfiBtc2dpZCAiU2hvdyBkb2N1IG9mIgorI34gbXNnc3RyICIiCisKKyM6IGlmX3NuaWZmLmM6ODUKKyN+IG1zZ2lkICJHZW5lcmF0ZSBkb2N1IGZvciIKKyN+IG1zZ3N0ciAiIgorCisjOiBpZl9zbmlmZi5jOjk3Cittc2dpZCAiIgorIkNhbm5vdCBjb25uZWN0IHRvIFNOaUZGKy4gQ2hlY2sgZW52aXJvbm1lbnQgKHNuaWZmZW1hY3MgbXVzdCBiZSBmb3VuZCBpbiAiCisiJFBBVEgpLlxuIgorbXNnc3RyICIiCisiU05pRkYrt84gv6yw4cfSILz2IL74vcC0z7TZLiDIr7DmwLsgyK7AzsfPvcq9w7/AIChzbmlmZmVtYWNzsKEgJFBBVEi/obytIMOjvsYiCisiwa6+3yDH1bTPtNkpLlxuIgorCisjOiBpZl9zbmlmZi5jOjQyNQorbXNnaWQgIkUyNzQ6IFNuaWZmOiBFcnJvciBkdXJpbmcgcmVhZC4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJFMjc0OiBTbmlmZjogwNC0wiDB3yC/obevLiCy97HoIgorCisjOiBpZl9zbmlmZi5jOjU1MworbXNnaWQgIlNOaUZGKyBpcyBjdXJyZW50bHkgIgorbXNnc3RyICJTTmlGRisgaXMgY3VycmVudGx5ICIKKworIzogaWZfc25pZmYuYzo1NTUKK21zZ2lkICJub3QgIgorbXNnc3RyICJub3QgIgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAiY29ubmVjdGVkIgorCisjOiBpZl9zbmlmZi5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjc1OiBVbmtub3duIFNOaUZGKyByZXF1ZXN0OiAlcyIKK21zZ3N0ciAiRTI3NToguPC4o7TCIFNOaUZGKyC/5MO7OiAlcyIKKworIzogaWZfc25pZmYuYzo2MDUKK21zZ2lkICJFMjc2OiBFcnJvciBjb25uZWN0aW5nIHRvIFNOaUZGKyIKK21zZ3N0ciAiRTI3NjogU05pRkYrv6Egv6yw4SC/obevIgorCisjOiBpZl9zbmlmZi5jOjEwMDkKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODogU25pRkYrsKEgv6yw4bXHwfYgvsq+0r3AtM+02SIKKworIzogaWZfc25pZmYuYzoxMDE4Cittc2dpZCAiRTI3OTogTm90IGEgU05pRkYrIGJ1ZmZlciIKK21zZ3N0ciAiRTI3OTogU25pRkYrILn2xtuwoSC+xrTVtM+02SIKKworIzogaWZfc25pZmYuYzoxMDgzCittc2dpZCAiU25pZmY6IEVycm9yIGR1cmluZyB3cml0ZS4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJTbmlmZjogvrK0wiC1tcHfIL+ht68uILL3sOW9wLTPtNkiCisKKyM6IGlmX3RjbC5jOjQxOAorbXNnaWQgImludmFsaWQgYnVmZmVyIG51bWJlciIKK21zZ3N0ciAiwN+4+LXIILn2xtsgufjIoyIKKworIzogaWZfdGNsLmM6NDY0IGlmX3RjbC5jOjkzMSBpZl90Y2wuYzoxMTEwCittc2dpZCAibm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAivsbB9yCxuMf2tcfB9iC+yr7SvcC0z7TZIgorCisjOiBpZl90Y2wuYzo1MDEKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAiuPC4o7TCIL/JvMciCisKKyMuID8/PworIzogaWZfdGNsLmM6Nzc0Cittc2dpZCAiY2Fubm90IHNldCBsaW5lKHMpIgorbXNnc3RyICLB2cC7ILyzwaTH0iC89iC++L3AtM+02SIKKworIzogaWZfdGNsLmM6ODQ1Cittc2dpZCAibWFyayBub3Qgc2V0IgorbXNnc3RyICK4tsWpsKEgvLPBpLXHwfYgvsq+0r3AtM+02SIKKworIzogaWZfdGNsLmM6ODUxIGlmX3RjbC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicm93ICVkIGNvbHVtbiAlZCIKK21zZ3N0ciAix+AgJWQgv60gJWQiCisKKyM6IGlmX3RjbC5jOjg4MQorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgIsHZwLsgs6K/9rPWsMWzqiC09cfSILz2IL74vcC0z7TZIgorCisjOiBpZl90Y2wuYzoxMjY4Cittc2dpZCAidW5rbm93biBmbGFnOiAiCittc2dzdHIgIrjwuKO0wiDHw7ehsdc6ICIKKworIzogaWZfdGNsLmM6MTMzOAorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICK48LijtMIguvYgv8m8xyIKKworIzogaWZfdGNsLmM6MTQyMworbXNnaWQgImtleWJvYXJkIGludGVycnVwdCIKK21zZ3N0ciAixbC6uLXlIMDOxc23tMauIgorCisjOiBpZl90Y2wuYzoxNDI4Cittc2dpZCAidmltIGVycm9yIgorbXNnc3RyICK69iC/obevIgorCisjOiBpZl90Y2wuYzoxNDcxCittc2dpZCAiY2Fubm90IGNyZWF0ZSBidWZmZXIvd2luZG93IGNvbW1hbmQ6IG9iamVjdCBpcyBiZWluZyBkZWxldGVkIgorbXNnc3RyICK59sbbL8OiILjtt8nAuyC4uLXpILz2IL74vcC0z7TZOiCwtMO8sKEgwfa/9sH9tM+02SIKKworIzogaWZfdGNsLmM6MTU0NQorbXNnaWQgIiIKKyJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyBpcyBhbHJlYWR5IGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIsTduekguO23ycC7ILXut8/H0iC89iC++L3AtM+02TogufbG2y/DosDMIMDMucwgwfa/9sGzvcC0z7TZIgorCisjLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIzogaWZfdGNsLmM6MTU2MgorbXNnaWQgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgY29ycnVwdCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS4iCisib3JnIgorbXNnc3RyICIiCisiRTI4MDogVENMIL3JsKLH0SC/obevOiByZWZsaXN0sKEgsfrBs7OqIT8gwMwgua7BprimIHZpbS1kZXZAdmltLm9yZ7fOIL7Lt8HB1iIKKyK9yr3Dv8AiCisKKyM6IGlmX3RjbC5jOjE1NjMKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIgorbXNnc3RyICLE3bnpILjtt8nAuyC17rfPx9IgvPYgvvi9wLTPtNk6ILn2xtsvw6IgwvzBtrimIMOjwLsgvPYgvvi9wLTPtNkiCisKKyM6IGlmX3RjbC5jOjE3MjQKK21zZ2lkICIiCisiRTU3MTogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFRjbCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisiRTU3MTogucy+yMfVtM+02SwgwMwguO23ycC6ILvnv+vH0iC89iC++L3AtM+02SwgVGNsILbzwMy66revuK64piC3zrX5x9IgvPYgvvgiCisivcC0z7TZLiIKKworIzogaWZfdGNsLmM6MTg4NgorbXNnaWQgIiIKKyJFMjgxOiBUQ0wgRVJST1I6IGV4aXQgY29kZSBpcyBub3QgaW50IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLm9yZyIKK21zZ3N0ciAiIgorIkUyODE6IFRDTCC/obevOiCzobO7seIgxNq15bChIMGkvPawoSC+xrTRsKEhPyDAzCC5rsGmuKYgdmltLWRldkB2aW0ub3Jnt84gvssiCisit8HB1r3KvcO/wCIKKworIzogaWZfdGNsLmM6MjAwNworbXNnaWQgImNhbm5vdCBnZXQgbGluZSIKK21zZ3N0ciAiwdnAuyC+8sC7ILz2IL74vcC0z7TZIgorCisjOiBpZl94Y21kc3J2LmM6MjI1Cittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAiuO23ySC8rbn2IMDMuKfAuyC17rfPx9IgvPYgvvi9wLTPtNkiCisKKyM6IGlmX3hjbWRzcnYuYzo0NzMKK21zZ2lkICJFMjQ4OiBGYWlsZWQgdG8gc2VuZCBjb21tYW5kIHRvIHRoZSBkZXN0aW5hdGlvbiBwcm9ncmFtIgorbXNnc3RyICJFMjQ4OiC067vzx8G3zrHXt6XAuLfOILjtt8kgurizu7HisKEgvcfG0MffvcC0z7TZIgorCisjOiBpZl94Y21kc3J2LmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzM6IEludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICJFNTczOiDA37j4tcggvK259iBpZCC757/rtco6ICVzIgorCisjOiBpZl94Y21kc3J2LmM6MTExMAorbXNnaWQgIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBpcyBiYWRseSBmb3JtZWQuICBEZWxldGVkISIKK21zZ3N0ciAiRTI1MToguvYgwM69usXPvbogt7nB9r26xq64riC807y6wMwgwN+4+LXHvu4gwNa9wLTPtNkuIMH2v/y9wLTPtNkhIgorCisjOiBtYWluLmM6NjAKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiuPC4o7TCIL/JvMciCisKKyM6IG1haW4uYzo2MgorbXNnaWQgIlRvbyBtYW55IGVkaXQgYXJndW1lbnRzIgorbXNnc3RyICKzyrmrILi5wLogxu3B/SDAzsDaIgorCisjOiBtYWluLmM6NjQKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICK12r+hIMDOwNqwoSC++MC9IgorCisjOiBtYWluLmM6NjYKK21zZ2lkICJHYXJiYWdlIGFmdGVyIG9wdGlvbiIKK21zZ3N0ciAiv8m8xyC12r+hIL6yt7mx4iCwqiIKKworIzogbWFpbi5jOjY4Cittc2dpZCAiVG9vIG1hbnkgXCIrY29tbWFuZFwiLCBcIi1jIGNvbW1hbmRcIiBvciBcIi0tY21kIGNvbW1hbmRcIiBhcmd1bWVudHMiCittc2dzdHIgIrPKuasguLnAuiBcIitjb21tYW5kXCIgXCItYyBjb21tYW5kXCIgyKTAuiBcIi0tY21kIGNvbW1hbmRcIiDAzsDaIgorCisjOiBtYWluLmM6NzAKKyN+IG1zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IGZvciIKKyN+IG1zZ3N0ciAiIgorCisjOiBtYWluLmM6NDY2Cittc2dpZCAiVGhpcyBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSBkaWZmIGZlYXR1cmUuIgorbXNnc3RyICLAzCC69sC6IGRpZmYgseK0ySC++MDMIMTExsTAzyC1x776vcC0z7TZLiIKKworIzogbWFpbi5jOjkzMgorbXNnaWQgIkF0dGVtcHQgdG8gb3BlbiBzY3JpcHQgZmlsZSBhZ2FpbjogXCIiCittc2dzdHIgIr26xam4s8auIMbEwM/AuyC02b3DIL+tt8Gw7SC9w7W1OiBcIiIKKworIzogbWFpbi5jOjk0MQorbXNnaWQgIkNhbm5vdCBvcGVuIGZvciByZWFkaW5nOiBcIiIKK21zZ3N0ciAiwNCx4iDAp8fYIL+tILz2IL74wL06IFwiIgorCisjOiBtYWluLmM6OTg1Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICK9usWpuLPGriDD4rfCwLsgv60gvPYgvvjAvTogXCIiCisKKyM6IG1haW4uYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZpbGVzIHRvIGVkaXRcbiIKK21zZ3N0ciAiJWQgxsTAz8C7ILDtxKGx4lxuIgorCisjOiBtYWluLmM6MTIzMworbXNnaWQgIlZpbTogV2FybmluZzogT3V0cHV0IGlzIG5vdCB0byBhIHRlcm1pbmFsXG4iCittc2dzdHIgIrr2OiCw5rDtOiDFzbnMs863ziDD4rfCx9IgvPYgvvi9wLTPtNlcbiIKKworIzogbWFpbi5jOjEyMzUKK21zZ2lkICJWaW06IFdhcm5pbmc6IElucHV0IGlzIG5vdCBmcm9tIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiuvY6ILDmsO06IMXNucyzzrfOILrOxc0gwNS3wrnewLsgvPYgvvi9wLTPtNlcbiIKKworIy4ganVzdCBpbiBjYXNlLi4KKyM6IG1haW4uYzoxMjk3CisjfiBtc2dpZCAicHJlLXZpbXJjIGNvbW1hbmQgbGluZSIKKyN+IG1zZ3N0ciAiIgorCisjOiBtYWluLmM6MTMzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgyOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTI4MjogXCIlc1wiv6G8rSDA0MC7ILz2IL74vcC0z7TZIgorCisjOiBtYWluLmM6MjQxMQorbXNnaWQgIiIKKyJcbiIKKyJNb3JlIGluZm8gd2l0aDogXCJ2aW0gLWhcIlxuIgorbXNnc3RyICIiCisiXG4iCisitPUguLnAuiDBpLq4uKYgv/jHz73DuOk6IFwidmltIC1oXCJcbiIKKworIzogbWFpbi5jOjI0NDQKK21zZ2lkICJbZmlsZSAuLl0gICAgICAgZWRpdCBzcGVjaWZpZWQgZmlsZShzKSIKK21zZ3N0ciAiW8bEwM8gLi5dICAgICAgIMHWvu7B+CDGxMDPILDtxKGx4iIKKworIzogbWFpbi5jOjI0NDUKK21zZ2lkICItICAgICAgICAgICAgICAgcmVhZCB0ZXh0IGZyb20gc3RkaW4iCittc2dzdHIgIi0gICAgICAgICAgICAgICDHpcHYwNS3wr+hvK0gxdi9usauIMDQseIiCisKKyM6IG1haW4uYzoyNDQ2Cittc2dpZCAiLXQgdGFnICAgICAgICAgIGVkaXQgZmlsZSB3aGVyZSB0YWcgaXMgZGVmaW5lZCIKK21zZ3N0ciAiLXQgdGFnICAgICAgICAgIMXCsdewoSDBpMDHtcggwKfEob+hvK0gxsTAzyCw7cShseIiCisKKyM6IG1haW4uYzoyNDQ4Cittc2dpZCAiLXEgW2Vycm9yZmlsZV0gIGVkaXQgZmlsZSB3aXRoIGZpcnN0IGVycm9yIgorbXNnc3RyICItcSBbv6G3r8bEwM9dICAgw7kgufjCsCC/obevsKEgs60gxsTAzyCw7cShseIiCisKKyM6IG1haW4uYzoyNDU3Cittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIrvnv+u5/ToiCisKKyM6IG1haW4uYzoyNDYwCittc2dpZCAiIHZpbSBbYXJndW1lbnRzXSAiCittc2dzdHIgIiB2aW0gW8DOwNpdICIKKworIzogbWFpbi5jOjI0NjQKK21zZ2lkICIiCisiXG4iCisiICAgb3I6IgorbXNnc3RyICIiCisiXG4iCisiICAgyKTAujoiCisKKyM6IG1haW4uYzoyNDY3Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50czpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIsDOwNo6XG4iCisKKyM6IG1haW4uYzoyNDY4Cittc2dpZCAiLS1cdFx0XHRPbmx5IGZpbGUgbmFtZXMgYWZ0ZXIgdGhpcyIKK21zZ3N0ciAiLS1cdFx0XHTAzCC12r+htMIgxsTAzyDAzLinuLgiCisKKyM6IG1haW4uYzoyNDcwCittc2dpZCAiLS1saXRlcmFsXHRcdERvbid0IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIi0tbGl0ZXJhbFx0XHS/zcDPteXEq7XluKYgyK7A5cfPwfYgvsrAvSIKKworIzogbWFpbi5jOjI0NzMKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHTAzCBndmltIE9MRb+hILXut88iCisKKyM6IG1haW4uYzoyNDc0Cittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi11bnJlZ2lzdGVyXHRcdGd2aW3AuyBPTEW/obytILXut8/D67zSIgorCisjOiBtYWluLmM6MjQ3NworbXNnaWQgIi1nXHRcdFx0UnVuIHVzaW5nIEdVSSAobGlrZSBcImd2aW1cIikiCittc2dzdHIgIi1nXHRcdFx0R1VJt84gvcfH4CAoXCJndmltXCKw+iCwsMC9KSIKKworIzogbWFpbi5jOjI0NzgKK21zZ2lkICItZiAgb3IgIC0tbm9mb3JrXHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZiDIpMC6IC0tbm9mb3JrXHTG97HXtvO/7rXlOiBHVUm3ziC9w8Dbx9IgtqcgZm9ya8fPwfYguLsgsM0iCisKKyM6IG1haW4uYzoyNDgwCittc2dpZCAiLXZcdFx0XHRWaSBtb2RlIChsaWtlIFwidmlcIikiCittc2dzdHIgIi12XHRcdFx0Vmkgu/PFwiAoXCJ2aVwiv80gsLDAvSkiCisKKyM6IG1haW4uYzoyNDgxCittc2dpZCAiLWVcdFx0XHRFeCBtb2RlIChsaWtlIFwiZXhcIikiCittc2dzdHIgIi1lXHRcdFx0RXggu/PFwiAoXCJleFwiv80gsLDAvSkiCisKKyM6IG1haW4uYzoyNDgyCittc2dpZCAiLXNcdFx0XHRTaWxlbnQgKGJhdGNoKSBtb2RlIChvbmx5IGZvciBcImV4XCIpIgorbXNnc3RyICItc1x0XHRcdMG2v+vH0SAouejEoSkgu/PFwiAoXCJleFwiuLgpIgorCisjOiBtYWluLmM6MjQ4NAorbXNnaWQgIi1kXHRcdFx0RGlmZiBtb2RlIChsaWtlIFwidmltZGlmZlwiKSIKK21zZ3N0ciAiLWRcdFx0XHREaWZmILvzxcIgKFwidmltZGlmZlwiv80gsLDAvSkiCisKKyM6IG1haW4uYzoyNDg2Cittc2dpZCAiLXlcdFx0XHRFYXN5IG1vZGUgKGxpa2UgXCJldmltXCIsIG1vZGVsZXNzKSIKK21zZ3N0ciAiLXlcdFx0XHS9rL/uILvzxcIgKFwiZXZpbVwisPogsLDAvSwgbW9kZWxlc3MpIgorCisjOiBtYWluLmM6MjQ4NworbXNnaWQgIi1SXHRcdFx0UmVhZG9ubHkgbW9kZSAobGlrZSBcInZpZXdcIikiCittc2dzdHIgIi1SXHRcdFx0wNCx4iDA/L/rILvzxcIgKFwidmlld1wiv80gsLDAvSkiCisKKyM6IG1haW4uYzoyNDg4Cittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdMGmx9G1yCC788XCIChcInJ2aW1cIrD6ILCwwL0pIgorCisjOiBtYWluLmM6MjQ4OQorbXNnaWQgIi1tXHRcdFx0TW9kaWZpY2F0aW9ucyAod3JpdGluZyBmaWxlcykgbm90IGFsbG93ZWQiCittc2dzdHIgIi1tXHRcdFx0vPbBpCjGxMDPIL6yseIpwMwgx+O/67XHwfYgvsrAvSIKKworIzogbWFpbi5jOjI0OTAKK21zZ2lkICItTVx0XHRcdE1vZGlmaWNhdGlvbnMgaW4gdGV4dCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLU1cdFx0XHTF2L26xq4gvPbBpMDMIMfjv+u1x8H2IL7KwL0iCisKKyM6IG1haW4uYzoyNDkxCittc2dpZCAiLWJcdFx0XHRCaW5hcnkgbW9kZSIKK21zZ3N0ciAiLWJcdFx0XHTAzMH4ILvzxcIiCisKKyM6IG1haW4uYzoyNDkzCittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0uK69usfBILvzxcIiCisKKyM6IG1haW4uYzoyNDk1Cittc2dpZCAiLUNcdFx0XHRDb21wYXRpYmxlIHdpdGggVmk6ICdjb21wYXRpYmxlJyIKK21zZ3N0ciAiLUNcdFx0XHRWaSDIo8ivOiAnY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyNDk2Cittc2dpZCAiLU5cdFx0XHROb3QgZnVsbHkgVmkgY29tcGF0aWJsZTogJ25vY29tcGF0aWJsZSciCittc2dzdHIgIi1OXHRcdFx0Vmm/zSDIo8ivtcfB9iC+ysC9OiAnbm9jb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjI0OTcKK21zZ2lkICItVltOXVx0XHRWZXJib3NlIGxldmVsIgorbXNnc3RyICItVltOXVx0XHRWZXJib3NlILe5uqciCisKKyM6IG1haW4uYzoyNDk4Cittc2dpZCAiLURcdFx0XHREZWJ1Z2dpbmcgbW9kZSIKK21zZ3N0ciAiLURcdFx0XHS18Ln2sesgu/PFwiIKKworIzogbWFpbi5jOjI0OTkKK21zZ2lkICItblx0XHRcdE5vIHN3YXAgZmlsZSwgdXNlIG1lbW9yeSBvbmx5IgorbXNnc3RyICItblx0XHRcdL26v9IgxsTAzyC++MDMILjeuPC4rri4ILvnv+siCisKKyM6IG1haW4uYzoyNTAwCittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0vbq/0iDGxMDPILjxt8/AuyDHpb3Dx9Egtdogs6Gzu7HiIgorCisjOiBtYWluLmM6MjUwMQorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciAoxsTAzyDAzLinsPogx9SysilcdMbEvNW1x776tPggvLy8xyC6ubG4IgorCisjOiBtYWluLmM6MjUwMgorbXNnaWQgIi1MXHRcdFx0U2FtZSBhcyAtciIKK21zZ3N0ciAiLUxcdFx0XHQtcrD6ILCwwL0iCisKKyM6IG1haW4uYzoyNTA0Cittc2dpZCAiLWZcdFx0XHREb24ndCB1c2UgbmV3Y2xpIHRvIG9wZW4gd2luZG93IgorbXNnc3RyICItZlx0XHRcdMOiwLsgv60gtqcgbmV3Y2xpILvnv+vHz8H2IL7KwL0iCisKKyM6IG1haW4uYzoyNTA1Cittc2dpZCAiLWRldiA8ZGV2aWNlPlx0XHRVc2UgPGRldmljZT4gZm9yIEkvTyIKK21zZ3N0ciAiLWRldiA8wOXEoT5cdFx0SS9Pv6EgPMDlxKE+ILvnv+siCisKKyM6IG1haW4uYzoyNTA4Cittc2dpZCAiLUFcdFx0XHRzdGFydCBpbiBBcmFiaWMgbW9kZSIKK21zZ3N0ciAiLUFcdFx0XHRBcmFiaWMguPC15bfOIL3DwNsiCisKKyM6IG1haW4uYzoyNTExCittc2dpZCAiLUhcdFx0XHRTdGFydCBpbiBIZWJyZXcgbW9kZSIKK21zZ3N0ciAiLUhcdFx0XHRIZWJyZXcguPC15bfOIL3DwNsiCisKKyM6IG1haW4uYzoyNTE0Cittc2dpZCAiLUZcdFx0XHRTdGFydCBpbiBGYXJzaSBtb2RlIgorbXNnc3RyICItRlx0XHRcdEZhcnNpILjwteW3ziC9w8DbIgorCisjOiBtYWluLmM6MjUxNgorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW5hbD5cdMXNucyzziDBvrf5uKYgPHRlcm1pbmFsPrfOILyzwaQiCisKKyM6IG1haW4uYzoyNTE3Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0LnZpbXJjILTrvcUgPHZpbXJjPrimILvnv+siCisKKyM6IG1haW4uYzoyNTE5Cittc2dpZCAiLVUgPGd2aW1yYz5cdFx0VXNlIDxndmltcmM+IGluc3RlYWQgb2YgYW55IC5ndmltcmMiCittc2dzdHIgIi1VIDxndmltcmM+XHRcdC5ndmltcmMgtOu9xSA8Z3ZpbXJjPrimILvnv+siCisKKyM6IG1haW4uYzoyNTIxCittc2dpZCAiLS1ub3BsdWdpblx0XHREb24ndCBsb2FkIHBsdWdpbiBzY3JpcHRzIgorbXNnc3RyICItLW5vcGx1Z2luXHRcdMfDt6+x18DOIL26xam4s8auuKYgutK3r7XpwMzB9iC+ysC9IgorCisjOiBtYWluLmM6MjUyMgorbXNnaWQgIi1vW05dXHRcdE9wZW4gTiB3aW5kb3dzIChkZWZhdWx0OiBvbmUgZm9yIGVhY2ggZmlsZSkiCittc2dzdHIgIi1vW05dXHRcdE6ws8DHIMOiIL+tseIgKLHiurs6IMbEwM+6sLfOIMfPs6opIgorCisjOiBtYWluLmM6MjUyMworbXNnaWQgIi1PW05dXHRcdExpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdC1vv80gsLDB9ri4IMOiwLsgvPbB98C4t84gs6q0qbHiIgorCisjOiBtYWluLmM6MjUyNAorbXNnaWQgIitcdFx0XHRTdGFydCBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiK1x0XHRcdMbEwM8guLbB9ri3v6G8rSC9w8DbIgorCisjOiBtYWluLmM6MjUyNQorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8bG51bT5cdFx0PGxudW0+IMHZv6G8rSC9w8DbIgorCisjOiBtYWluLmM6MjUyNworbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIi0tY21kIDy47bfJPlx0dmltcmMgxsTAz8C7IMDQseIgwPy/oSA8uO23yT7AuyC9x8fgIgorCisjOiBtYWluLmM6MjUyOQorbXNnaWQgIi1jIDxjb21tYW5kPlx0XHRFeGVjdXRlIDxjb21tYW5kPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItYyA8uO23yT5cdFx0w7nCsCDGxMDPwLsgwNDAuiC12iA8uO23yT7AuyC9x8fgIgorCisjOiBtYWluLmM6MjUzMAorbXNnaWQgIi1TIDxzZXNzaW9uPlx0XHRTb3VyY2UgZmlsZSA8c2Vzc2lvbj4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLVMgPLy8vMc+XHRcdMO5wrAgxsTAz8C7IMDQwLogtdogPLy8vMc+IMbEwM8gutK3ryC16cDMseIiCisKKyM6IG1haW4uYzoyNTMxCittc2dpZCAiLXMgPHNjcmlwdGluPlx0UmVhZCBOb3JtYWwgbW9kZSBjb21tYW5kcyBmcm9tIGZpbGUgPHNjcmlwdGluPiIKK21zZ3N0ciAiLXMgPHNjcmlwdGluPlx0PHNjcmlwdGluPiDGxMDPv6G8rSBOb3JtYWwgu/PFwiC47bfJIMDQseIiCisKKyM6IG1haW4uYzoyNTMyCittc2dpZCAiLXcgPHNjcmlwdG91dD5cdEFwcGVuZCBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLXcgPHNjcmlwdG91dD5cdLjwtecgwNS3wrXIILjtt8nAuyA8c2NyaXB0b3V0PiDGxMDPv6Egw9+woSIKKworIzogbWFpbi5jOjI1MzMKK21zZ2lkICItVyA8c2NyaXB0b3V0Plx0V3JpdGUgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi1XIDxzY3JpcHRvdXQ+XHS48LXnIMDUt8K1yCC47bfJwLsgPHNjcmlwdG91dD4gxsTAz7+hIMD6wOUiCisKKyM6IG1haW4uYzoyNTM1Cittc2dpZCAiLXhcdFx0XHRFZGl0IGVuY3J5cHRlZCBmaWxlcyIKK21zZ3N0ciAiLXhcdFx0XHS+z8ijyK21yCDGxMDPILDtxKGx4iIKKworIzogbWFpbi5jOjI1MzkKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdENvbm5lY3QgdmltIHRvIHRoaXMgcGFydGljdWxhciBYLXNlcnZlciIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHS69sC7IMavwaQgWC28rbn2v80gv6yw4SIKKworIzogbWFpbi5jOjI1NDEKK21zZ2lkICItWFx0XHRcdERvIG5vdCBjb25uZWN0IHRvIFggc2VydmVyIgorbXNnc3RyICItWFx0XHRcdFggvK259r+hIL+ssOHHz8H2IL7KwL0iCisKKyM6IG1haW4uYzoyNTQ0Cittc2dpZCAiLS1yZW1vdGUgPGZpbGVzPlx0RWRpdCA8ZmlsZXM+IGluIGEgVmltIHNlcnZlciBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiLS1yZW1vdGUgPGZpbGVzPlx0sKG0ycfPuOkguvYgvK259r+hvK0gPGZpbGVzPiDG7cH9IgorCisjOiBtYWluLmM6MjU0NQorbXNnaWQgIi0tcmVtb3RlLXNpbGVudCA8ZmlsZXM+ICBTYW1lLCBkb24ndCBjb21wbGFpbiBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIiCittc2dzdHIgIi0tcmVtb3RlLXNpbGVudCA8ZmlsZXM+ICCwsMC9LCC8rbn2sKEgvvi02bDtILrSxvLHz8H2IL7KwL0iCisKKyM6IG1haW4uYzoyNTQ2Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgQXMgLS1yZW1vdGUgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQiCittc2dzdHIgIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgLS1yZW1vdGW/zSCwsMH2uLggtNkgsO3EpSC2p7HuwfYgseK02biztM+02SIKKworIzogbWFpbi5jOjI1NDcKK21zZ2lkICIiCisiLS1yZW1vdGUtd2FpdC1zaWxlbnQgPGZpbGVzPiAgU2FtZSwgZG9uJ3QgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm8gc2VydmVyIgorbXNnc3RyICItLXJlbW90ZS13YWl0LXNpbGVudCA8ZmlsZXM+ICCwsMC9LCC8rbn2sKEgvvi02bDtILrSxvLHz8H2IL7KwL0iCisKKyM6IG1haW4uYzoyNTQ4Cittc2dpZCAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFNlbmQgPGtleXM+IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdLr2ILytufa3ziA8a2V5cz64piC6uLO7sO0gs6Gzu7HiIgorCisjOiBtYWluLmM6MjU0OQorbXNnaWQgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWF0ZSA8ZXhwcj4gaW4gYSBWaW0gc2VydmVyIGFuZCBwcmludCByZXN1bHQiCittc2dzdHIgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHS69iC8rbn2v6G8rSA8ZXhwcj4gvcfH4MfPsO0gsOGw+iDD4rfCIgorCisjOiBtYWluLmM6MjU1MAorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICItLXNlcnZlcmxpc3RcdFx0u+e/6yCwobTJx9EguvYgvK259iDAzLinwLsgx6W9w8fPsO0gs6Gzu7HiIgorCisjOiBtYWluLmM6MjU1MQorbXNnaWQgIi0tc2VydmVybmFtZSA8bmFtZT5cdFNlbmQgdG8vYmVjb21lIHRoZSBWaW0gc2VydmVyIDxuYW1lPiIKK21zZ3N0ciAiLS1zZXJ2ZXJuYW1lIDxuYW1lPlx0uvYgvK259iA8bmFtZT7AzCC1x7DFs6ogvK259rfOILq4s7ux4iIKKworIzogbWFpbi5jOjI1NTQKK21zZ2lkICItaSA8dmltaW5mbz5cdFx0VXNlIDx2aW1pbmZvPiBpbnN0ZWFkIG9mIC52aW1pbmZvIgorbXNnc3RyICItaSA8dmltaW5mbz5cdFx0LnZpbWluZm8gtOu9xSA8dmltaW5mbz64piC757/rIgorCisjOiBtYWluLmM6MjU1NgorbXNnaWQgIi1oICBvciAgLS1oZWxwXHRQcmludCBIZWxwICh0aGlzIG1lc3NhZ2UpIGFuZCBleGl0IgorbXNnc3RyICItaCDIpMC6IC0taGVscFx0tbW/8ri7KMDMILjevcPB9inAuyDD4rfCx9Egtdogs6Gzu7HiIgorCisjOiBtYWluLmM6MjU1NworbXNnaWQgIi0tdmVyc2lvblx0XHRQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IgorbXNnc3RyICItLXZlcnNpb25cdFx0xscgwaS6uLimIMPit8LH0SC12iCzobO7seIiCisKKyM6IG1haW4uYzoyNTYxCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKE1vdGlmIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbcDMIL7LsO0gwNa0wiDAzsDaICi48Ma8x8EgxscpOlxuIgorCisjOiBtYWluLmM6MjU2NQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChuZVh0YXcgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJndmltwMwgvsuw7SDA1rTCIMDOwNogKG5lWHRhdyDGxyk6XG4iCisKKyM6IG1haW4uYzoyNTY3Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEF0aGVuYSB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW3AzCC+y7DtIMDWtMIgwM7A2iAovsbF17OqIMbHKTpcbiIKKworIzogbWFpbi5jOjI1NzEKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdLr2wLsgPGRpc3BsYXk+v6G8rSC9x8fgIgorCisjOiBtYWluLmM6MjU3MgorbXNnaWQgIi1pY29uaWNcdFx0U3RhcnQgdmltIGljb25pZmllZCIKK21zZ3N0ciAiLWljb25pY1x0XHS+xsDMxNwgu/PFwrfOILr2IL3DwNsiCisKKyM6IG1haW4uYzoyNTc0Cittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG5hbWU+XHRcdLr2wMwgPG5hbWU+wM4gsM3Ds7ezILiuvNK9uiC757/rIgorCisjOiBtYWluLmM6MjU3NQorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgKLG4x/a1x8H2IL7KwL0pXG4iCisKKyM6IG1haW4uYzoyNTc3Cittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8Y29sb3I+XHS52cXBILv2wLi3ziA8Y29sb3I+ILvnv+sgKGFsc286IC1iZykiCisKKyM6IG1haW4uYzoyNTc4Cittc2dpZCAiLWZvcmVncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIG5vcm1hbCB0ZXh0IChhbHNvOiAtZmcpIgorbXNnc3RyICItZm9yZWdyb3VuZCA8Y29sb3I+XHTAz7ndILv2v6EgPGNvbG9yPiC757/rIChhbHNvOiAtZmcpIgorCisjOiBtYWluLmM6MjU3OSBtYWluLmM6MjU5OQorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPGZvbnQ+XHRcdMDPud0gxdi9usauv6EgPGZvbnQ+ILvnv+sgKGFsc286IC1mbikiCisKKyM6IG1haW4uYzoyNTgwCittc2dpZCAiLWJvbGRmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgYm9sZCB0ZXh0IgorbXNnc3RyICItYm9sZGZvbnQgPGZvbnQ+XHSxvcC6IMXYvbrGrr+hIDxmb250PiC757/rIgorCisjOiBtYWluLmM6MjU4MQorbXNnaWQgIi1pdGFsaWNmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgaXRhbGljIHRleHQiCittc2dzdHIgIi1pdGFsaWNmb250IDxmb250Plx0seK/78DTIMXYvbrGrr+hIDxmb250PiC757/rIgorCisjOiBtYWluLmM6MjU4MiBtYWluLmM6MjYwMAorbXNnaWQgIi1nZW9tZXRyeSA8Z2VvbT5cdFVzZSA8Z2VvbT4gZm9yIGluaXRpYWwgZ2VvbWV0cnkgKGFsc286IC1nZW9tKSIKK21zZ3N0ciAiLWdlb21ldHJ5IDxnZW9tPlx0w8qx4iDB9r/AuczGrriuv6EgPGdlb20+ILvnv+sgKGFsc286IC1nZW9tKSIKKworIzogbWFpbi5jOjI1ODMKK21zZ2lkICItYm9yZGVyd2lkdGggPHdpZHRoPlx0VXNlIGEgYm9yZGVyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1idykiCittc2dzdHIgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHSwocDlwNq4riCz0MDMv6EgPHdpZHRoPiC757/rIChhbHNvOiAtYncpIgorCisjOiBtYWluLmM6MjU4NAorbXNnaWQgIi1zY3JvbGxiYXJ3aWR0aCA8d2lkdGg+ICBVc2UgYSBzY3JvbGxiYXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLXN3KSIKK21zZ3N0ciAiLXNjcm9sbGJhcndpZHRoIDx3aWR0aD4gIL26xam30bnZILPQwMy/oSA8d2lkdGg+ILvnv+sgKGFsc286IC1zdykiCisKKyM6IG1haW4uYzoyNTg2Cittc2dpZCAiLW1lbnVoZWlnaHQgPGhlaWdodD5cdFVzZSBhIG1lbnUgYmFyIGhlaWdodCBvZiA8aGVpZ2h0PiAoYWxzbzogLW1oKSIKK21zZ3N0ciAiLW1lbnVoZWlnaHQgPGhlaWdodD5cdML3uLLHpSC4t7TrILP0wMy/oSA8aGVpZ2h0PiC757/rIChhbHNvOiAtbWgpIgorCisjOiBtYWluLmM6MjU4OCBtYWluLmM6MjYwMQorbXNnaWQgIi1yZXZlcnNlXHRcdFVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiAtcnYpIgorbXNnc3RyICItcmV2ZXJzZVx0XHS53cD8ILrxtfC/wCC757/rIChhbHNvOiAtcnYpIgorCisjOiBtYWluLmM6MjU4OQorbXNnaWQgIityZXZlcnNlXHRcdERvbid0IHVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiArcnYpIgorbXNnc3RyICIrcmV2ZXJzZVx0XHS53cD8ILrxtfC/wCC757/rIL7IIMfUIChhbHNvOiArcnYpIgorCisjOiBtYWluLmM6MjU5MAorbXNnaWQgIi14cm0gPHJlc291cmNlPlx0U2V0IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UiCittc2dzdHIgIi14cm0gPHJlc291cmNlPlx0uO29w7XIILiuvNK9uiC8s8GkIgorCisjOiBtYWluLmM6MjU5MworbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChSSVNDIE9TIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbcDMIL7LsO3A1rTCIMDOwNogKFJJU0MgT1MgxscpOlxuIgorCisjOiBtYWluLmM6MjU5NAorbXNnaWQgIi0tY29sdW1ucyA8bnVtYmVyPlx0SW5pdGlhbCB3aWR0aCBvZiB3aW5kb3cgaW4gY29sdW1ucyIKK21zZ3N0ciAiLS1jb2x1bW5zIDy8/cDaPlx0xK2/obytIMOiIMPKseIgs8q68SIKKworIzogbWFpbi5jOjI1OTUKK21zZ2lkICItLXJvd3MgPG51bWJlcj5cdEluaXRpYWwgaGVpZ2h0IG9mIHdpbmRvdyBpbiByb3dzIgorbXNnc3RyICItLXJvd3MgPLz9wNo+XHTB2b+hvK0gw6Igw8qx4iCz9MDMIgorCisjOiBtYWluLmM6MjU5OAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbcDMIL7LsO3A1rTCIMDOwNogKEdUSysgxscpOlxuIgorCisjOiBtYWluLmM6MjYwMgorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4gKGFsc286IC0tZGlzcGxheSkiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0uvbAuyA8ZGlzcGxheT6/obytIL3Hx+AgKGFsc286IC0tZGlzcGxheSkiCisKKyM6IG1haW4uYzoyNjA0Cittc2dpZCAiLS1yb2xlIDxyb2xlPlx0U2V0IGEgdW5pcXVlIHJvbGUgdG8gaWRlbnRpZnkgdGhlIG1haW4gd2luZG93IgorbXNnc3RyICItLXJvbGUgPHJvbGU+XHS43sDOIMOiILG4utDAuyDAp8fYIMCvwM/H0SC/qsfSILyzwaQiCisKKyM6IG1haW4uYzoyNjA2Cittc2dpZCAiLS1zb2NrZXRpZCA8eGlkPlx0T3BlbiBWaW0gaW5zaWRlIGFub3RoZXIgR1RLIHdpZGdldCIKK21zZ3N0ciAiLS1zb2NrZXRpZCA8eGlkPlx0uvbAuyC02bilIEdUSyDAp8GsIL7Iv6G8rSC/rcC9IgorCisjOiBtYWluLmM6MjYwOQorbXNnaWQgIi1QIDxwYXJlbnQgdGl0bGU+XHRPcGVuIFZpbSBpbnNpZGUgcGFyZW50IGFwcGxpY2F0aW9uIgorbXNnc3RyICItUCA8cGFyZW50IHRpdGxlPlx0VmltwLsgus648CDAwL/rIMfBt86x17elILO7v6G8rSC/rbHiIgorCisjOiBtYWluLmM6Mjg0NworbXNnaWQgIk5vIGRpc3BsYXkiCittc2dzdHIgIrXwvbrHw7e5wMywoSC++L3AtM+02SIKKworIy4gRmFpbGVkIHRvIHNlbmQsIGFib3J0LgorIzogbWFpbi5jOjI4NjIKK21zZ2lkICI6IFNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICI6ILq4s7ux4rChIL3HxtDHz7+0vcC0z7TZLlxuIgorCisjLiBMZXQgdmltIHN0YXJ0IG5vcm1hbGx5LgorIzogbWFpbi5jOjI4NjgKK21zZ2lkICI6IFNlbmQgZmFpbGVkLiBUcnlpbmcgdG8gZXhlY3V0ZSBsb2NhbGx5XG4iCittc2dzdHIgIjogurizu7HiIL3HxtAuILfOxMO/obytIL3Hx+C1y7TPtNlcbiIKKworIzogbWFpbi5jOjI5MDYgbWFpbi5jOjI5MjcKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiJWQgb2YgJWQgZWRpdGVkIgorI34gbXNnc3RyICIiCisKKyM6IG1haW4uYzoyOTQ5Cittc2dpZCAiTm8gZGlzcGxheTogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAitfC9usfDt7nAzCC++MC9OiDHpcf2vcQgurizu7HisKEgvcfG0MffvcC0z7TZLlxuIgorCisjOiBtYWluLmM6Mjk2MQorbXNnaWQgIjogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiDHpcf2vcQgurizu7HisKEgvcfG0MffvcC0z7TZLlxuIgorCisjOiBtYXJrLmM6NzA5Cittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICK8s8GktcgguLbFqbChIL74vcC0z7TZIgorCisjOiBtYXJrLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4MzogXCIlc1wiv6EguMK0wiC4tsWpsKEgvvi9wLTPtNkiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjcyMgorbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyK4tsWpILbzwM4gIGNvbCDGxMDPL8XYvbrGriIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzYwCittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgwaHHwSC288DOICBjb2wgxsTAzy/F2L26xq4iCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjgwNQorI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJjaGFuZ2UgbGluZSAgY29sIHRleHQiCisjfiBtc2dzdHIgIiIKKworIzogbWFyay5jOjEyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgRmlsZSBtYXJrczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgxsTAzyC4tsWpOlxuIgorCisjLiBXcml0ZSB0aGUganVtcGxpc3Qgd2l0aCAtJworIzogbWFyay5jOjEzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIMGhx8G48bfPICi79bDNwMwguNXA+ik6XG4iCisKKyM6IG1hcmsuYzoxNDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjIEhpc3Rvcnkgb2YgbWFya3Mgd2l0aGluIGZpbGVzIChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgxsTAz7O7wMcguLbFqSDI9726xeS4riAou/WwzbrOxc0gv8C3obXIILz4KTpcbiIKKworIzogbWFyay5jOjE1MDEKK21zZ2lkICJNaXNzaW5nICc+JyIKK21zZ3N0ciAiJz4nwMwgvvi9wLTPtNkiCisKKyM6IG1ieXRlLmM6NDY3Cittc2dpZCAiRTU0MzogTm90IGEgdmFsaWQgY29kZXBhZ2UiCittc2dzdHIgIkU1NDM6IMGku/PA+8DOIMTateXG5MDMwfawoSC+xrTVtM+02SIKKworIzogbWJ5dGUuYzo0NDMxCittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IElDILCqwLsgvLPBpMfSILz2IL74vcC0z7TZIgorCisjOiBtYnl0ZS5jOjQ1ODMKK21zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCittc2dzdHIgIkUyODU6IMDUt8IgxNzF2L26xq64piC4uLXpILz2IL74vcC0z7TZIgorCisjOiBtYnl0ZS5jOjQ3NDEKK21zZ2lkICJFMjg2OiBGYWlsZWQgdG8gb3BlbiBpbnB1dCBtZXRob2QiCittc2dzdHIgIkUyODY6IMDUt8Iguea9xMC7IL+ttNmwoSC9x8bQx9+9wLTPtNkiCisKKyM6IG1ieXRlLmM6NDc1MgorbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4NzogsOaw7TogSU2/oSDGxLGrIMTduenAuyC8s8Gkx9IgvPYgvvi9wLTPtNkiCisKKyM6IG1ieXRlLmM6NDc1OAorbXNnaWQgIkUyODg6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgYW55IHN0eWxlIgorbXNnc3RyICJFMjg4OiDA1LfCILnmvcTAzCC+7rayIMf8vcS1tSDB9r/4x8/B9iC+yr3AtM+02SIKKworIzogbWJ5dGUuYzo0ODE1Cittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IMDUt8Iguea9xMDMILO7IHByZWVkaXQgx/y9xMC7IMH2v/jHz8H2IL7KvcC0z7TZIgorCisjOiBtYnl0ZS5jOjQ4ODkKK21zZ2lkICJFMjkwOiBvdmVyLXRoZS1zcG90IHN0eWxlIHJlcXVpcmVzIGZvbnRzZXQiCittc2dzdHIgIkUyOTA6IG92ZXItdGhlLXNwb3Qgx/y9xMC6IGZvbnRzZXTAzCC757/rtce+7r7fIMfVtM+02SIKKworIzogbWJ5dGUuYzo0OTI1Cittc2dpZCAiRTI5MTogWW91ciBHVEsrIGlzIG9sZGVyIHRoYW4gMS4yLjMuIFN0YXR1cyBhcmVhIGRpc2FibGVkIgorbXNnc3RyICJFMjkxOiBHVEsrsKEgMS4yLjMgwMzA/CDGx8DUtM+02S4gu/PFwiC/tb+qwLsgu+e/68fSILz2IL74vcC0z7TZIgorCisjOiBtYnl0ZS5jOjUyMzIKK21zZ2lkICJFMjkyOiBJbnB1dCBNZXRob2QgU2VydmVyIGlzIG5vdCBydW5uaW5nIgorbXNnc3RyICJFMjkyOiDA1LfCILytufawoSC9x8fgtcfB9iC+yrDtIMDWvcC0z7TZIgorCisjOiBtZW1maWxlLmM6NDg4Cittc2dpZCAiRTI5MzogYmxvY2sgd2FzIG5vdCBsb2NrZWQiCittc2dzdHIgIkUyOTM6ILG4v6rAzCDA4bHFwfbB9iC+yr7SvcC0z7TZIgorCisjOiBtZW1maWxlLmM6MTAxMAorbXNnaWQgIkUyOTQ6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHJlYWQiCittc2dzdHIgIkUyOTQ6IL26v9IgxsTAz8C7IMDQseIgwKfH2CDGr8GkIMCnxKG3ziCwpSC89iC++L3AtM+02SIKKworIzogbWVtZmlsZS5jOjEwMTUKK21zZ2lkICJFMjk1OiBSZWFkIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5NTogvbq/0iDGxMDPwLsgwNDAuyC89iC++L3AtM+02SIKKworIzogbWVtZmlsZS5jOjEwNjcKK21zZ2lkICJFMjk2OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIKK21zZ3N0ciAiRTI5Njogvbq/0iDGxMDPwLsgvrKx4iDAp8fYIMavwaQgwKfEobfOILClILz2IL74vcC0z7TZIgorCisjOiBtZW1maWxlLmM6MTA4NQorbXNnaWQgIkUyOTc6IFdyaXRlIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5Nzogvbq/0iDGxMDPwLsgvrUgvPYgvvi9wLTPtNkiCisKKyM6IG1lbWZpbGUuYzoxMjgyCittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiC9ur/SIMbEwM/AzCDAzLnMIMG4wOfH1bTPtNkgKHN5bWxpbmsgsPiw3T8pIgorCisjOiBtZW1saW5lLmM6Mjc1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIKK21zZ3N0ciAiRTI5ODogsbi/qiC5+MijIDDAuyC+8sH2ILj4x9+zqr/kPyIKKworIzogbWVtbGluZS5jOjMxNQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMT8iCittc2dzdHIgIkUyOTg6ILG4v6ogufjIoyAxwLsgvvLB9iC4+Mffs6q/5D8iCisKKyM6IG1lbWxpbmUuYzozMzMKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDI/IgorbXNnc3RyICJFMjk4OiCxuL+qILn4yKMgMrimIL7ywfYguPjH37Oqv+Q/IgorCisjLiBjb3VsZCBub3QgKHJlKW9wZW4gdGhlIHN3YXAgZmlsZSwgd2hhdCBjYW4gd2UgZG8/Pz8/CisjOiBtZW1saW5lLmM6NDQ0Cittc2dpZCAiRTMwMTogT29wcywgbG9zdCB0aGUgc3dhcCBmaWxlISEhIgorbXNnc3RyICJFMzAxOiDAuMC5LCC9ur/SIMbEwM/AuyDA0r7uufa3yL3AtM+02SEhISIKKworIzogbWVtbGluZS5jOjQ0OQorbXNnaWQgIkUzMDI6IENvdWxkIG5vdCByZW5hbWUgc3dhcCBmaWxlIgorbXNnc3RyICJFMzAyOiC9ur/SIMbEwM8gwMy4p8C7ILnZstwgvPYgvvi9wLTPtNkiCisKKyM6IG1lbWxpbmUuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwMzogVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciBcIiVzXCIsIHJlY292ZXJ5IGltcG9zc2libGUiCittc2dzdHIgIkUzMDM6IFwiJXNcIsDHIL26v9IgxsTAz8C7IL+tILz2IL74vu68rSC6ubG4tMIgutKwobTJx9W0z7TZIgorCisjOiBtZW1saW5lLmM6NjE4Cittc2dpZCAiRTMwNDogbWxfdGltZXN0YW1wOiBEaWRuJ3QgZ2V0IGJsb2NrIDA/PyIKK21zZ3N0ciAiRTMwNDogbWxfdGltZXN0YW1wOiCxuL+qIDDAuyC+8sH2ILj4x9+zqr/kPz8iCisKKyM6IG1lbWxpbmUuYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNTogTm8gc3dhcCBmaWxlIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiRTMwNTogJXPAxyC9ur/SIMbEwM/AuyDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBtZW1saW5lLmM6NzY4Cittc2dpZCAiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIKK21zZ3N0ciAiu+e/68fSIL26v9IgxsTAzyC5+MijuKYgwNS3wsfPvcq9w7/AICgwwLogs6Gzu7HiKTogIgorCisjOiBtZW1saW5lLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDY6IENhbm5vdCBvcGVuICVzIgorbXNnc3RyICJFMzA2OiAlc8C7KLimKSC/rSC89iC++L3AtM+02SIKKworIzogbWVtbGluZS5jOjgzNQorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCisKKyM6IG1lbWxpbmUuYzo4MzgKK21zZ2lkICIiCisiXG4iCisiTWF5YmUgbm8gY2hhbmdlcyB3ZXJlIG1hZGUgb3IgVmltIGRpZCBub3QgdXBkYXRlIHRoZSBzd2FwIGZpbGUuIgorbXNnc3RyICIiCisiXG4iCisivu62siC89sGktbUgvvi++rDFs6oguvbAzCC9ur/SIMbEwM/AuyCwu73Fx8/B9iC+ysC6ILDNILCwvcC0z7TZLiIKKworIzogbWVtbGluZS5jOjg0OCBtZW1saW5lLmM6ODY1Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKKworIzogbWVtbGluZS5jOjg1MAorbXNnaWQgIlVzZSBWaW0gdmVyc2lvbiAzLjAuXG4iCittc2dzdHIgIrr2IDMuMCDGx8C7ILvnv+vHz73KvcO/wC5cbiIKKworIzogbWVtbGluZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA3OiAlcyBkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlIgorbXNnc3RyICJFMzA3OiAlc8C6KLTCKSC69iC9ur/SIMbEwM/AzCC+xrTRILDNILCwvcC0z7TZIgorCisjOiBtZW1saW5lLmM6ODY5Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIG9uIHRoaXMgY29tcHV0ZXIuXG4iCittc2dzdHIgIiDAzCDExMe7xc2/obyttMIgu+e/67XJILz2IL74vcC0z7TZLlxuIgorCisjOiBtZW1saW5lLmM6ODcxCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICJUaGUgZmlsZSB3YXMgY3JlYXRlZCBvbiAiCisKKyM6IG1lbWxpbmUuYzo4NzUKK21zZ2lkICIiCisiLFxuIgorIm9yIHRoZSBmaWxlIGhhcyBiZWVuIGRhbWFnZWQuIgorbXNnc3RyICIiCisiLFxuIgorIm9yIHRoZSBmaWxlIGhhcyBiZWVuIGRhbWFnZWQuIgorCisjOiBtZW1saW5lLmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHN3YXAgZmlsZSBcIiVzXCIiCittc2dzdHIgIr26v9IgxsTAzyBcIiVzXCLAuyi4pikgu+e/68fVtM+02SIKKworIzogbWVtbGluZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJPcmlnaW5hbCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiv/i3oSDGxMDPIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkyMworbXNnaWQgIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIgorbXNnc3RyICJFMzA4OiCw5rDtOiC/+LehIMbEwM/AzCC52bLuvvq9wLTPtNkiCisKKyM6IG1lbWxpbmUuYzo5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwOTogVW5hYmxlIHRvIHJlYWQgYmxvY2sgMSBmcm9tICVzIgorbXNnc3RyICJFMzA5OiAlc8DHILG4v6ogMcC7IMDQwLsgvPYgvvi9wLTPtNkiCisKKyM6IG1lbWxpbmUuYzo5ODAKK21zZ2lkICI/Pz9NQU5ZIExJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P7i5wLogwdnAuyDA0r7uufa4siIKKworIzogbWVtbGluZS5jOjk5NgorbXNnaWQgIj8/P0xJTkUgQ09VTlQgV1JPTkciCittc2dzdHIgIj8/P8HZILn4yKOwoSDA37j4tce++r3AtM+02SIKKworIzogbWVtbGluZS5jOjEwMDMKK21zZ2lkICI/Pz9FTVBUWSBCTE9DSyIKK21zZ3N0ciAiPz8/uvMgsbi/qiIKKworIzogbWVtbGluZS5jOjEwMjkKK21zZ2lkICI/Pz9MSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz/B2cC7IMDSvu659riyIgorCisjOiBtZW1saW5lLmM6MTA2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzEwOiBCbG9jayAxIElEIHdyb25nICglcyBub3QgYSAuc3dwIGZpbGU/KSIKK21zZ3N0ciAiRTMxMDogsbi/qiAxwMcgSUSwoSDA37j4tce++r3AtM+02SAoJXPAzCiwoSkgLnN3cCDGxMDPwMwgvsa00bChPykiCisKKyM6IG1lbWxpbmUuYzoxMDY2Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/sbi/qiDA0r7uufa4siIKKworIzogbWVtbGluZS5jOjEwODIKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgYmUgbWVzc2VkIHVwIgorbXNnc3RyICI/Pz8gv6mx4rrOxc0gPz8/s6Gx7sH2wMcgwdnAzCC8r7+0vcC0z7TZIgorCisjOiBtZW1saW5lLmM6MTA5OAorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBoYXZlIGJlZW4gaW5zZXJ0ZWQvZGVsZXRlZCIKK21zZ3N0ciAiPz8/IL+pseK6zsXNID8/P7Ohse7B9sDHIMHZwMwgs6K/9sH2sMWzqiDB9r/2wa4gufa4sCCwzSCwsL3AtM+02SIKKworIzogbWVtbGluZS5jOjExMTgKK21zZ2lkICI/Pz9FTkQiCittc2dzdHIgIj8/P7OhIgorCisjOiBtZW1saW5lLmM6MTE0NAorbXNnaWQgIkUzMTE6IFJlY292ZXJ5IEludGVycnVwdGVkIgorbXNnc3RyICJFMzExOiC6ubG4IMHftNy1x776vcC0z7TZIgorCisjOiBtZW1saW5lLmM6MTE0OQorbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIkUzMTI6ILq5sbggtbXB3yC/obevILv9sOW9wLTPtNk7ID8/P7fOIL3DwNvHz7TCIMHZwLsgw6O+xrq4vcq9w7/AIgorCisjOiBtZW1saW5lLmM6MTE1MQorbXNnaWQgIlNlZSBcIjpoZWxwIEUzMTJcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIrT1ILi5wLogwaS6uLimILq4t8G46SBcIjpoZWxwIEUzMTJcIrimIMDUt8LHz7y8v+QuIgorCisjOiBtZW1saW5lLmM6MTE1NgorbXNnaWQgIlJlY292ZXJ5IGNvbXBsZXRlZC4gWW91IHNob3VsZCBjaGVjayBpZiBldmVyeXRoaW5nIGlzIE9LLiIKK21zZ3N0ciAiurmxuLChILOhs7W9wLTPtNkuILjwtecgsNQgwaS788DOIMH2IMiuwM7H2CC6uLzFvt+4uCDH1bTPtNkuIgorCisjOiBtZW1saW5lLmM6MTE1NworbXNnaWQgIiIKKyJcbiIKKyIoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWVcbiIKK21zZ3N0ciAiIgorIlxuIgorIii+7sK8uOkgtNm4pSDAzLinwLi3ziDA+sDlx8+w7SC9zcC4vccgwfa1tSC48LijsNq9wLTPtNlcbiIKKworIzogbWVtbGluZS5jOjExNTgKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAisde4rrDtILnZsu8gs7u/68C7IMiuwM7Hz7fBuOkgZGlmZrimIMDMv+vHz73KvcO/wClcbiIKKworIzogbWVtbGluZS5jOjExNTkKK21zZ2lkICIiCisiRGVsZXRlIHRoZSAuc3dwIGZpbGUgYWZ0ZXJ3YXJkcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIrOqwd+/oSAuc3dwIMbEwM/AuyDB9r/svcq9w7/ALlxuIgorIlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMTUKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAivbq/0iDGxMDPwLsgw6O+0sC9OiIKKworIzogbWVtbGluZS5jOjEzOTMKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAgx/bA5yDA2rfhuea/oTpcbiIKKworIzogbWVtbGluZS5jOjEzOTUKK21zZ2lkICIgICBVc2luZyBzcGVjaWZpZWQgbmFtZTpcbiIKK21zZ3N0ciAiICAguO29w7XIIMDMuKfAuyC757/rOlxuIgorCisjOiBtZW1saW5lLmM6MTM5OQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIEluIGRpcmVjdG9yeSAiCisKKyM6IG1lbWxpbmUuYzoxNDE3Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgICAtLSC++MC9IC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDg5Cittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgICAgICC80sCvwNo6ICIKKworIzogbWVtbGluZS5jOjE0OTEKK21zZ2lkICIgICBkYXRlZDogIgorbXNnc3RyICIgICCzr8KlOiAiCisKKyM6IG1lbWxpbmUuYzoxNDk1IG1lbWxpbmUuYzozNjg1Cittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICCzr8KlOiAiCisKKyM6IG1lbWxpbmUuYzoxNTExCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgICAgW7r2IDMuMCDGx8DHILDNXSIKKworIzogbWVtbGluZS5jOjE1MTUKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgIFu69iC9ur/SIMbEwM+3ziC6uMDMwfYgvsq9wLTPtNldIgorCisjOiBtZW1saW5lLmM6MTUxOQorbXNnaWQgIiAgICAgICAgIGZpbGUgbmFtZTogIgorbXNnc3RyICIgICAgICAgICDGxMDPIMDMuKc6ICIKKworIzogbWVtbGluZS5jOjE1MjUKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgIG1vZGlmaWVkOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgvPbBpDogIgorCisjOiBtZW1saW5lLmM6MTUyNgorbXNnaWQgIllFUyIKK21zZ3N0ciAiv7kiCisKKyM6IG1lbWxpbmUuYzoxNTI2Cittc2dpZCAibm8iCittc2dzdHIgIr7GtM+/wCIKKworIzogbWVtbGluZS5jOjE1MzAKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgdXNlciBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICC757/rwNogwMy4pzogIgorCisjOiBtZW1saW5lLmM6MTUzNworbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgIMijvbrGriDAzLinOiAiCisKKyM6IG1lbWxpbmUuYzoxNTM5Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgyKO9usauIMDMuKc6ICIKKworIzogbWVtbGluZS5jOjE1NDUKK21zZ2lkICIiCisiXG4iCisiICAgICAgICBwcm9jZXNzIElEOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgIMfBt868vL26IElEOiAiCisKKyM6IG1lbWxpbmUuYzoxNTUxCittc2dpZCAiIChzdGlsbCBydW5uaW5nKSIKK21zZ3N0ciAiICi+xsH3IL3Hx+DB3ykiCisKKyM6IG1lbWxpbmUuYzoxNTYzCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbuvYgwMy5+CDGx7+hvK20wiC757/rx9IgvPYgvvjAvV0iCisKKyM6IG1lbWxpbmUuYzoxNTY2Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIG9uIHRoaXMgY29tcHV0ZXJdIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgW8DMIMTEx7vFzb+hvK20wiC757/rx9IgvPYgvvjAvV0iCisKKyM6IG1lbWxpbmUuYzoxNTcxCittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSByZWFkXSIKK21zZ3N0ciAiICAgICAgICAgW8DQwLsgvPYgvvjAvV0iCisKKyM6IG1lbWxpbmUuYzoxNTc1Cittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSBvcGVuZWRdIgorbXNnc3RyICIgICAgICAgICBbv60gvPYgvvjAvV0iCisKKyM6IG1lbWxpbmUuYzoxNzY1Cittc2dpZCAiRTMxMzogQ2Fubm90IHByZXNlcnZlLCB0aGVyZSBpcyBubyBzd2FwIGZpbGUiCittc2dzdHIgIkUzMTM6ILq4wbjH0iC89iC++L3AtM+02Swgvbq/0iDGxMDPwMwgvvi9wLTPtNkiCisKKyM6IG1lbWxpbmUuYzoxODE4Cittc2dpZCAiRmlsZSBwcmVzZXJ2ZWQiCittc2dzdHIgIsbEwM/AzCC6uMG4tce++r3AtM+02SIKKworIzogbWVtbGluZS5jOjE4MjAKK21zZ2lkICJFMzE0OiBQcmVzZXJ2ZSBmYWlsZWQiCittc2dzdHIgIkUzMTQ6IMbEwM8gurjBuMC7IL3HxtDH373AtM+02SIKKworIzogbWVtbGluZS5jOjE4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNTogbWxfZ2V0OiBpbnZhbGlkIGxudW06ICVsZCIKK21zZ3N0ciAiRTMxNTogbWxfZ2V0OiDA37j4tcggbG51bTogJWxkIgorCisjOiBtZW1saW5lLmM6MTkxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzE2OiBtbF9nZXQ6IGNhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzE2OiBtbF9nZXQ6ICVsZCDB2cC7IMOjwLsgvPYgvvi9wLTPtNkiCisKKyM6IG1lbWxpbmUuYzoyMzA3Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAzIgorbXNnc3RyICJFMzE3OiDA37j4tcggxvfAzsXNILG4v6ogaWQgMyIKKworIzogbWVtbGluZS5jOjIzODcKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeLTCIDC/qb7fuLggx9W0z7TZIgorCisjOiBtZW1saW5lLmM6MjQ0OQorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODogs8q5qyC4ucC6ILG4v6rAzCCwu73Ftce++rOqv+Q/IgorCisjOiBtZW1saW5lLmM6MjYzMQorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgNCIKK21zZ3N0ciAiRTMxNzogwN+4+LXIIMb3wM7FzSCxuL+qIGlkIDQiCisKKyM6IG1lbWxpbmUuYzoyNjU4Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAisbi/qiAxwMwgwfa/9sGzs6q/5D8iCisKKyM6IG1lbWxpbmUuYzoyODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjA6IENhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzIwOiAlbGQgwdnAuyDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBtZW1saW5lLmM6MzEwMQorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmciCittc2dzdHIgIkUzMTc6IMDfuPi1yCDG98DOxc0gsbi/qiBpZCIKKworIzogbWVtbGluZS5jOjMxMTcKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgInBlX2xpbmVfY291bnSwoSAwwNS0z7TZIgorCisjOiBtZW1saW5lLmM6MzE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIyOiBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVsZCBwYXN0IHRoZSBlbmQiCittc2dzdHIgIkUzMjI6IMHZILn4yKOwoSC5/MCnuKYguf6+7rO1vcC0z7TZOiC4tsH2uLe/obytICVsZCC4uMWtIgorCisjOiBtZW1saW5lLmM6MzE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIzOiBsaW5lIGNvdW50IHdyb25nIGluIGJsb2NrICVsZCIKK21zZ3N0ciAiRTMyMzogsbi/qiAlbGTAxyDB2SCwubz2sKEgxrK3yL3AtM+02SIKKworIzogbWVtbGluZS5jOjMxOTkKK21zZ2lkICJTdGFjayBzaXplIGluY3JlYXNlcyIKK21zZ3N0ciAivbrFwyDFqbHiIMH1sKEiCisKKyM6IG1lbWxpbmUuYzozMjQ1Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAyIgorbXNnc3RyICJFMzE3OiDA37j4tcggxvfAzsXNILG4v6ogaWQgMiIKKworIzogbWVtbGluZS5jOjM2NzUKK21zZ2lkICJFMzI1OiBBVFRFTlRJT04iCittc2dzdHIgIkUzMjU6IMHWuPEiCisKKyM6IG1lbWxpbmUuYzozNjc2Cittc2dpZCAiIgorIlxuIgorIkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIgorbXNnc3RyICIiCisiXG4iCisiRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgXCIiCisKKyM6IG1lbWxpbmUuYzozNjgwCittc2dpZCAiV2hpbGUgb3BlbmluZyBmaWxlIFwiIgorbXNnc3RyICJXaGlsZSBvcGVuaW5nIGZpbGUgXCIiCisKKyM6IG1lbWxpbmUuYzozNjg5Cittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorCisjLiBTb21lIG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSBsb25nIHRvIGFsbG93IHRyYW5zbGF0aW9uIHRvCisjLiAqIG90aGVyIGxhbmd1YWdlcy4KKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiIgorIlxuIgorIigxKSBBbm90aGVyIHByb2dyYW0gbWF5IGJlIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS5cbiIKKyIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgYmUgY2FyZWZ1bCBub3QgdG8gZW5kIHVwIHdpdGggdHdvXG4iCisiICAgIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZmlsZSB3aGVuIG1ha2luZyBjaGFuZ2VzLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDEpILTZuKUgx8G3zrHXt6XAzCCwsMC6IMbEwM/AuyCw7cShsO0gwNa0wsHfwM8gvPYgwNa9wLTPtNkuXG4iCisiICAgILi4vuAgsde3uLTZuOkgsLDAuiDGxMDPwLsgtc4gsLPAxyDHwbfOsde3pb+hvK0gsO3EocH2XG4iCisiICAgIL7KtbW3zyDBtr3Jx8+9w7HiILnZtvi0z7TZLlxuIgorCisjOiBtZW1saW5lLmM6MzY5NAorbXNnaWQgIiAgICBRdWl0LCBvciBjb250aW51ZSB3aXRoIGNhdXRpb24uXG4iCittc2dzdHIgIiAgICCzobO7sMWzqiDAp8fowLsgsKi89sfPvcO3wbjpILDovNPHz73KvcO/wC5cbiIKKworIzogbWVtbGluZS5jOjM2OTUKK21zZ2lkICIiCisiXG4iCisiKDIpIEFuIGVkaXQgc2Vzc2lvbiBmb3IgdGhpcyBmaWxlIGNyYXNoZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMikgxsTAz8C7ILDtxKG02bChIMHXvvq++r3AtM+02S5cbiIKKworIzogbWVtbGluZS5jOjM2OTYKK21zZ2lkICIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdXNlIFwiOnJlY292ZXJcIiBvciBcInZpbSAtciAiCittc2dzdHIgIiAgICC4uL7gILHXt7i02bjpIFwiOnJlY292ZXJcIiDIpMC6IFwidmltIC1yICIKKworIzogbWVtbGluZS5jOjM2OTgKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gcmVjb3ZlciB0aGUgY2hhbmdlcyAoc2VlIFwiOmhlbHAgcmVjb3ZlcnlcIikuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICDAuyC757/rx8+/qSC6ubG4x8+9yr3Dv8AgKFwiOmhlbHAgcmVjb3ZlcnlcIiDC/LDtKS5cbiIKKworIzogbWVtbGluZS5jOjM2OTkKK21zZ2lkICIgICAgSWYgeW91IGRpZCB0aGlzIGFscmVhZHksIGRlbGV0ZSB0aGUgc3dhcCBmaWxlIFwiIgorbXNnc3RyICIgICAgwMy5zCC6ubG4x8+8zL76tNm46SC9ur/SxsTAzyBcIiIKKworIzogbWVtbGluZS5jOjM3MDEKKyN+IG1zZ2lkICIiCisjfiAiXCJcbiIKKyN+ICIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorI34gbXNnc3RyICIiCisKKyM6IG1lbWxpbmUuYzozNzE1IG1lbWxpbmUuYzozNzE5Cittc2dpZCAiU3dhcCBmaWxlIFwiIgorbXNnc3RyICK9ur/SIMbEwM8gXCIiCisKKyM6IG1lbWxpbmUuYzozNzE2IG1lbWxpbmUuYzozNzIyCittc2dpZCAiXCIgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICJcIsDMIMDMucwgwbjA58fVtM+02SEiCisKKyM6IG1lbWxpbmUuYzozNzI1Cittc2dpZCAiVklNIC0gQVRURU5USU9OIgorbXNnc3RyICK69iAtIMHWuPEiCisKKyM6IG1lbWxpbmUuYzozNzI3Cittc2dpZCAiU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAivbq/0iDGxMDPwMwgwMy5zCDBuMDnx9W0z7TZISIKKworIzogbWVtbGluZS5jOjM3MzEKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZBYm9ydCIKK21zZ3N0ciAiIgorIsDQseIgwPy/68C4t84gv62x4igmTylcbiIKKyKx17PJILDtxKGx4igmRSlcbiIKKyK6ubG4KCZSKVxuIgorIrOhs7ux4igmUSlcbiIKKyK59riuseIoJkEpIgorCisjOiBtZW1saW5lLmM6MzczMworbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0XG4iCisiJkFib3J0XG4iCisiJkRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorIsDQseIgwPy/68C4t84gv62x4igmTylcbiIKKyKx17PJILDtxKGx4igmRSlcbiIKKyK6ubG4KCZSKVxuIgorIrOhs7ux4igmUSlcbiIKKyK59riuseIoJkEpXG4iCisiwfa/7LHiKCZEKSIKKworIzogbWVtbGluZS5jOjM3OTAKK21zZ2lkICJFMzI2OiBUb28gbWFueSBzd2FwIGZpbGVzIGZvdW5kIgorbXNnc3RyICJFMzI2OiCzyrmrILi5wLogvbq/0iDGxMDPwMwgud+w37XHvvq9wLTPtNkiCisKKyM6IG1lbnUuYzo2NAorbXNnaWQgIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51IgorbXNnc3RyICJFMzI3OiDC97iyx6Ugx9e48SCw5rfOwMcgus660MDMIMfPwKcgwve4sselsKEgvsa01bTPtNkiCisKKyM6IG1lbnUuYzo2NQorbXNnaWQgIkUzMjg6IE1lbnUgb25seSBleGlzdHMgaW4gYW5vdGhlciBtb2RlIgorbXNnc3RyICJFMzI4OiDC97iyx6W0wiC/wLfOwfYgtNm4pSC788XCv6G8rbi4IMG4wOfH1bTPtNkiCisKKyM6IG1lbnUuYzo2NgorbXNnaWQgIkUzMjk6IE5vIG1lbnUgb2YgdGhhdCBuYW1lIgorbXNnc3RyICJFMzI5OiCx17exIMDMuKfAuyCwocH4IML3uLLHpbChIL74vcC0z7TZIgorCisjOiBtZW51LmM6NTI1Cittc2dpZCAiRTMzMDogTWVudSBwYXRoIG11c3Qgbm90IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzMDogx8/ApyDC97iyx6UgvtW/obTCIML3uLLHpSCw5rfOsKEgutnAuyC89iC++L3AtM+02SIKKworIzogbWVudS5jOjU2NAorbXNnaWQgIkUzMzE6IE11c3Qgbm90IGFkZCBtZW51IGl0ZW1zIGRpcmVjdGx5IHRvIG1lbnUgYmFyIgorbXNnc3RyICJFMzMxOiDC97iyx6UguLe067+hILDwudm3ziDC97iyx6Ugx9e48cC7ILT1x9IgvPa0wiC++L3AtM+02SIKKworIzogbWVudS5jOjU3MAorbXNnaWQgIkUzMzI6IFNlcGFyYXRvciBjYW5ub3QgYmUgcGFydCBvZiBhIG1lbnUgcGF0aCIKK21zZ3N0ciAiRTMzMjogsbi60MDatMIgwve4sselILDmt87AxyC6zrrQwMwgtckgvPYgvvi9wLTPtNkiCisKKyMuIE5vdyB3ZSBoYXZlIGZvdW5kIHRoZSBtYXRjaGluZyBtZW51LCBhbmQgd2UgbGlzdCB0aGUgbWFwcGluZ3MKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWVudS5jOjEwOTcKK21zZ2lkICIiCisiXG4iCisiLS0tIE1lbnVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDC97iyx6UgLS0tIgorCisjOiBtZW51LmM6MjAxOQorbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAiwMwgwve4sseluKYgtry+7rO/IgorCisjOiBtZW51LmM6MjA4NAorbXNnaWQgIkUzMzM6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBtZW51IGl0ZW0iCittc2dzdHIgIkUzMzM6IML3uLLHpSDH17jxIL7Vv6G0wiDC97iyx6UgsOa3zrChIMDWvu6+3yDH1bTPtNkiCisKKyM6IG1lbnUuYzoyMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzQ6IE1lbnUgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTMzNDogwve4sseluKYgw6PAuyC89iC++L3AtM+02TogJXMiCisKKyM6IG1lbnUuYzoyMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzU6IE1lbnUgbm90IGRlZmluZWQgZm9yICVzIG1vZGUiCittc2dzdHIgIkUzMzU6ICVzILvzxcK/oSC068fRIML3uLLHpbChIMGkwMe1x77uIMDWwfYgvsq9wLTPtNkiCisKKyM6IG1lbnUuYzoyMjExCittc2dpZCAiRTMzNjogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzM2OiDHz8CnIML3uLLHpSC+1b+hIML3uLLHpSCw5rfOsKEgwNa+7r7fIMfVtM+02SIKKworIzogbWVudS5jOjIyMzIKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IML3uLLHpbimIMOjwLsgvPYgvvjAvSAtIML3uLLHpSDAzLinwLsgyK7AzsfPvcq9w7/AIgorCisjOiBtZXNzYWdlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVjdGVkIHdoaWxlIHByb2Nlc3NpbmcgJXM6IgorbXNnc3RyICIlcyC89sfgwd8gv6G3ryC537DfOiIKKworIzogbWVzc2FnZS5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICU0bGQ6IgorbXNnc3RyICIlNGxkIMHZOiIKKworIzogbWVzc2FnZS5jOjY0NworbXNnaWQgIltzdHJpbmcgdG9vIGxvbmddIgorbXNnc3RyICJbs8q5qyCx5CC5rsDav61dIgorCisjOiBtZXNzYWdlLmM6Nzk3Cittc2dpZCAiTWVzc2FnZXMgbWFpbnRhaW5lcjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4iCittc2dzdHIgIrjevcPB9iC5+L+qOiBTdW5nLUh5dW4gTmFtIDxuYW1zaEBrbGRwLm9yZz4iCisKKyM6IG1lc3NhZ2UuYzoxMDI1Cittc2dpZCAiSW50ZXJydXB0OiAiCittc2dzdHIgIsHftNw6ICIKKworIzogbWVzc2FnZS5jOjEwMjgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIrDovNPHz7fBuOkgv6PFzcWwuKYgtKm4o73KvcO/wCIKKworIzogbWVzc2FnZS5jOjEwMzAKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICKw6LzTx8+3wbjpIL+jxc0gyKTAuiC47bfJwLsgwNS3wsfPvcq9w7/AIgorCisjOiBtZXNzYWdlLmM6MjM1MQorbXNnaWQgIi0tIE1vcmUgLS0iCittc2dzdHIgIi0tILT1IC0tIgorCisjOiBtZXNzYWdlLmM6MjM1NAorbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiDB2SwgU1BBQ0UvYjogwsosIGQvdTogud3CyiwgcTogs6Gzu7HiKSIKKworIzogbWVzc2FnZS5jOjIzNTUKK21zZ2lkICIgKFJFVDogbGluZSwgU1BBQ0U6IHBhZ2UsIGQ6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUOiDB2SwgU1BBQ0U6IMLKLCBkOiC53cLKLCBxOiCzobO7seIpIgorCisjOiBtZXNzYWdlLmM6Mjk4MiBtZXNzYWdlLmM6Mjk5NworbXNnaWQgIlF1ZXN0aW9uIgorbXNnc3RyICLB+rmuIgorCisjOiBtZXNzYWdlLmM6Mjk4NAorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vIgorbXNnc3RyICIiCisiv7koJlkpXG4iCisivsa0z7/AKCZOKSIKKworIzogbWVzc2FnZS5jOjMwMTcKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIlNhdmUgJkFsbFxuIgorIiZEaXNjYXJkIEFsbFxuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyK/uSgmWSlcbiIKKyK+xrTPv8AoJk4pXG4iCisiuPC1ziDA+sDlKCZBKVxuIgorIrjwtc4gufa4sigmRClcbiIKKyLD67zSKCZDKSIKKworIzogbWVzc2FnZS5jOjMwNTgKK21zZ2lkICJTYXZlIEZpbGUgZGlhbG9nIgorbXNnc3RyICLGxMDPIMD6wOUgtOvIrbvzwNoiCisKKyM6IG1lc3NhZ2UuYzozMDYwCittc2dpZCAiT3BlbiBGaWxlIGRpYWxvZyIKK21zZ3N0ciAixsTAzyC/rbHiILTryK2788DaIgorCisjLiBUT0RPOiBub24tR1VJIGZpbGUgc2VsZWN0b3IgaGVyZQorIzogbWVzc2FnZS5jOjMxMzEKK21zZ2lkICJFMzM4OiBTb3JyeSwgbm8gZmlsZSBicm93c2VyIGluIGNvbnNvbGUgbW9kZSIKK21zZ3N0ciAiRTMzODogucy+yMfVtM+02SwgxNy81iC788XCv6G0wiDGxMDPILrqtvO/7MD6sKEgvvi9wLTPtNkiCisKKyM6IG1pc2MxLmM6Mjc3MworbXNnaWQgIlcxMDogV2FybmluZzogQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlIgorbXNnc3RyICJXMTA6ILDmsO06IMDQseIgwPy/6yDGxMDPwLsgsO3EobDtIMDWvcC0z7TZIgorCisjOiBtaXNjMS5jOjMwMjEKK21zZ2lkICIxIG1vcmUgbGluZSIKK21zZ3N0ciAix9EgwdkgwMy78yIKKworIzogbWlzYzEuYzozMDIzCittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgIsfRIMHZIMDMx88iCisKKyM6IG1pc2MxLmM6MzAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbW9yZSBsaW5lcyIKK21zZ3N0ciAiJWxkILq4tNkguLnAuiDB2SIKKworIzogbWlzYzEuYzozMDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBmZXdlciBsaW5lcyIKK21zZ3N0ciAiJWxkILq4tNkgwPvAuiDB2SIKKworIzogbWlzYzEuYzozMDMzCittc2dpZCAiIChJbnRlcnJ1cHRlZCkiCittc2dzdHIgIiAowd+03LXHvvq9wLTPtNkpIgorCisjOiBtaXNjMS5jOjc1ODgKK21zZ2lkICJWaW06IHByZXNlcnZpbmcgZmlsZXMuLi5cbiIKK21zZ3N0ciAiuvY6IMbEwM8gurjBuMHfLi4uXG4iCisKKyMuIGNsb3NlIGFsbCBtZW1maWxlcywgd2l0aG91dCBkZWxldGluZworIzogbWlzYzEuYzo3NTk4Cittc2dpZCAiVmltOiBGaW5pc2hlZC5cbiIKK21zZ3N0ciAiuvY6ILL4s7W9wLTPtNkuXG4iCisKKyM6IG1pc2MyLmM6Njk1IG1pc2MyLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiAiCittc2dzdHIgIr+ht686ICIKKworIzogbWlzYzIuYzo3MTUKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iCisjfiBtc2dzdHIgIiIKKworIzogbWlzYzIuYzo3MTcKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiIgorI34gIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisKKyM6IG1pc2MyLmM6NzcyCittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDogwdnAzCCzyrmrILHmvu7Bs73AtM+02SIKKworIzogbWlzYzIuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MTogSW50ZXJuYWwgZXJyb3I6IGxhbGxvYyglbGQsICkiCittc2dzdHIgIkUzNDE6ILO7us4gv6G3rzogbGFsbG9jKCVsZCwgKSIKKworIzogbWlzYzIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MjogT3V0IG9mIG1lbW9yeSEgIChhbGxvY2F0aW5nICVsdSBieXRlcykiCittc2dzdHIgIkUzNDI6ILjeuPC4riC6zsG3ISAgKCVsdSC52cDMxq64piDH0rTnKSIKKworIzogbWlzYzIuYzoyNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbGxpbmcgc2hlbGwgdG8gZXhlY3V0ZTogXCIlc1wiIgorbXNnc3RyICK9x8fgx8+3wbDtIL2pILrOuKc6IFwiJXNcIiIKKworIzogbWlzYzIuYzoyODE2Cittc2dpZCAiRTU0NTogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU0NTogxN230MDMIL74vcC0z7TZIgorCisjOiBtaXNjMi5jOjI4MTggbWlzYzIuYzoyODQ1Cittc2dpZCAiRTU0NjogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFNTQ2OiDAzLvzx9EguPC15SIKKworIzogbWlzYzIuYzoyODg0Cittc2dpZCAiRTU0NzogSWxsZWdhbCBtb3VzZXNoYXBlIgorbXNnc3RyICJFNTQ3OiDAzLvzx9EguLa/7L26uPC+5yIKKworIzogbWlzYzIuYzoyOTI0Cittc2dpZCAiRTU0ODogZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgIkU1NDg6ILz9wNqwoSDHyr/kx9W0z7TZIgorCisjOiBtaXNjMi5jOjI5MjkKK21zZ2lkICJFNTQ5OiBJbGxlZ2FsIHBlcmNlbnRhZ2UiCittc2dzdHIgIkU1NDk6IMDMu/PH0SC56brQwLIiCisKKyM6IG1pc2MyLmM6MzIzOQorbXNnaWQgIkVudGVyIGVuY3J5cHRpb24ga2V5OiAiCittc2dzdHIgIr7PyKMgxbAgwNS3wjogIgorCisjOiBtaXNjMi5jOjMyNDAKK21zZ2lkICJFbnRlciBzYW1lIGtleSBhZ2FpbjogIgorbXNnc3RyICKwsMC6IMWwuKYgtNm9wyDA1LfCOiAiCisKKyM6IG1pc2MyLmM6MzI1MAorbXNnaWQgIktleXMgZG9uJ3QgbWF0Y2ghIgorbXNnc3RyICLFsLChILjCwfYgvsq9wLTPtNkhIgorCisjOiBtaXNjMi5jOjM3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUzNDM6IEludmFsaWQgcGF0aDogJyoqW251bWJlcl0nIG11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCBvciBiZSAiCisiZm9sbG93ZWQgYnkgJyVzJy4iCittc2dzdHIgIiIKKyJFMzQzOiDA37j4tcggsOa3zjogJyoqW7n4yKNdJ7TCILDmt87AxyC4tsH2uLe/oSDAp8Shx8+wxbOqICclcycgtdq/oSDA1r7uvt8gIgorIsfVtM+02S4iCisKKyM6IG1pc2MyLmM6NTA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ0OiBDYW4ndCBmaW5kIGRpcmVjdG9yeSBcIiVzXCIgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ0OiBjZHBhdGi/obytIFwiJXNcIiDA2rfhuebAuyDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBtaXNjMi5jOjUwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NTogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFMzQ1OiBwYXRov6G8rSBcIiVzXCIgxsTAz8C7IMOjwLsgvPYgvvi9wLTPtNkiCisKKyM6IG1pc2MyLmM6NTA4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ2OiBObyBtb3JlIGRpcmVjdG9yeSBcIiVzXCIgZm91bmQgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ2OiBjZHBhdGi/obytILT1IMDMu/PAxyBcIiVzXCIgwNq34bnmwLogw6PAuyC89iC++L3AtM+02SIKKworIzogbWlzYzIuYzo1MDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDc6IE5vIG1vcmUgZmlsZSBcIiVzXCIgZm91bmQgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NzogcGF0aL+hvK0gtPUgwMy788DHIFwiJXNcIiDGxMDPwLsgw6PAuyC89iC++L3AtM+02SIKKworIzogbWlzYzIuYzo1MzI0Cittc2dpZCAiRTU1MDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU1MDogxN230MDMIL74vcC0z7TZIgorCisjOiBtaXNjMi5jOjUzMzYKK21zZ2lkICJFNTUxOiBJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAiRTU1MTogwMy788fRIMTExvezzcauIgorCisjOiBtaXNjMi5jOjUzNDQKK21zZ2lkICJFNTUyOiBkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAiRTU1MjogvP3A2rChIMfKv+TH1bTPtNkiCisKKyMuIEdldCBoZXJlIHdoZW4gdGhlIHNlcnZlciBjYW4ndCBiZSBmb3VuZC4KKyM6IG5ldGJlYW5zLmM6Mzk2Cittc2dpZCAiQ2Fubm90IGNvbm5lY3QgdG8gTmV0YmVhbnMgIzIiCittc2dzdHIgIk5ldGJlYW5zICMyv6Egv6yw4cfSILz2IL74vcC0z7TZIgorCisjOiBuZXRiZWFucy5jOjQwNAorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zIgorbXNnc3RyICJOZXRiZWFuc7+hIL+ssOHH0iC89iC++L3AtM+02SIKKworIzogbmV0YmVhbnMuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY2ODogV3JvbmcgYWNjZXNzIG1vZGUgZm9yIE5ldEJlYW5zIGNvbm5lY3Rpb24gaW5mbyBmaWxlOiBcIiVzXCIiCittc2dzdHIgIkU2Njg6IE5ldEJlYW5zIL+ssOEgwaS6uCDGxMDPwMwgwaKx2SC48LXlsKEgwN+4+LXKOiBcIiVzXCIiCisKKyM6IG5ldGJlYW5zLmM6NzQ5Cittc2dpZCAicmVhZCBmcm9tIE5ldGJlYW5zIHNvY2tldCIKK21zZ3N0ciAiTmV0YmVhbnMgvNLEz7+hvK0gwNCx4iIKKworIzogbmV0YmVhbnMuYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NTg6IE5ldEJlYW5zIGNvbm5lY3Rpb24gbG9zdCBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTY1ODogufbG2yAlbGS/oSC068fRIE5ldEJlYW5zIL+ssOHAuyDA0r7uufa3yL3AtM+02SIKKworIzogbm9ybWFsLmM6Mjk4MAorbXNnaWQgIldhcm5pbmc6IHRlcm1pbmFsIGNhbm5vdCBoaWdobGlnaHQiCittc2dzdHIgIrDmsO06IMXNucyzzsDMILrxweq+8yC788XCuKYgx6W9w8fSILz2IL74vcC0z7TZIgorCisjOiBub3JtYWwuYzozMjc2Cittc2dpZCAiRTM0ODogTm8gc3RyaW5nIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0ODogxL+8rSC52L+hILmuwNq/rcDMIL74vcC0z7TZIgorCisjOiBub3JtYWwuYzozMjc4Cittc2dpZCAiRTM0OTogTm8gaWRlbnRpZmllciB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDk6IMS/vK0gudi/oSC9xLqwwNqwoSC++L3AtM+02SIKKworIzogbm9ybWFsLmM6NDUxOQorbXNnaWQgIkUzNTI6IENhbm5vdCBlcmFzZSBmb2xkcyB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUyOiDH9sDnwMcgJ2ZvbGRtZXRob2QnwLi3ziDBorHiuKYgwfa/7yC89iC++L3AtM+02SIKKworIzogbm9ybWFsLmM6Njc0MAorbXNnaWQgIkU2NjQ6IGNoYW5nZWxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkU2NjQ6IGNoYW5nZWxpc3SwoSC68b76vcC0z7TZIgorCisjOiBub3JtYWwuYzo2NzQyCisjfiBtc2dpZCAiRTY2MjogQXQgc3RhcnQgb2YgY2hhbmdlbGlzdCIKKyN+IG1zZ3N0ciAiIgorCisjOiBub3JtYWwuYzo2NzQ0CisjfiBtc2dpZCAiRTY2MzogQXQgZW5kIG9mIGNoYW5nZWxpc3QiCisjfiBtc2dzdHIgIiIKKworIzogbm9ybWFsLmM6ODAwNQorbXNnaWQgIlR5cGUgIDpxdWl0PEVudGVyPiAgdG8gZXhpdCBWaW0iCittc2dzdHIgIlZJTcC7ILi2xKG3wbjpICA6cXVpdDxFbnRlcj4gIMDUt8IiCisKKyM6IG9wcy5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAxIHRpbWUiCittc2dzdHIgIjEgbGluZSAlc2VkIDEgdGltZSIKKworIzogb3BzLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIxIGxpbmUgJXNlZCAlZCB0aW1lcyIKKworIzogb3BzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkIDEgdGltZSIKK21zZ3N0ciAiJWxkIGxpbmVzICVzZWQgMSB0aW1lIgorCisjOiBvcHMuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgJWQgdGltZXMiCittc2dzdHIgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorCisjOiBvcHMuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHRvIGluZGVudC4uLiAiCittc2dzdHIgIiVsZCBsaW5lcyB0byBpbmRlbnQuLi4gIgorCisjOiBvcHMuYzo3MTIKK21zZ2lkICIxIGxpbmUgaW5kZW50ZWQgIgorbXNnc3RyICIxIGxpbmUgaW5kZW50ZWQgIgorCisjOiBvcHMuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAiJWxkIGxpbmVzIGluZGVudGVkICIKKworIy4gbXVzdCBkaXNwbGF5IHRoZSBwcm9tcHQKKyM6IG9wcy5jOjE2NzUKK21zZ2lkICJjYW5ub3QgeWFuazsgZGVsZXRlIGFueXdheSIKK21zZ3N0ciAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCisKKyM6IG9wcy5jOjIyNjEKK21zZ2lkICIxIGxpbmUgY2hhbmdlZCIKK21zZ3N0ciAiMSBsaW5lIGNoYW5nZWQiCisKKyM6IG9wcy5jOjIyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGNoYW5nZWQiCittc2dzdHIgIiVsZCBsaW5lcyBjaGFuZ2VkIgorCisjOiBvcHMuYzoyNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImZyZWVpbmcgJWxkIGxpbmVzIgorbXNnc3RyICJmcmVlaW5nICVsZCBsaW5lcyIKKworIzogb3BzLmM6MjkyOAorbXNnaWQgIjEgbGluZSB5YW5rZWQiCittc2dzdHIgIjEgbGluZSB5YW5rZWQiCisKKyM6IG9wcy5jOjI5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHlhbmtlZCIKK21zZ3N0ciAiJWxkIGxpbmVzIHlhbmtlZCIKKworIzogb3BzLmM6MzIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiAlcyC3ucH2vbrFzb+hIL7GuasgsM21tSC++L3AtM+02SIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBvcHMuYzozNzY2Cittc2dpZCAiIgorIlxuIgorIi0tLSBSZWdpc3RlcnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tILe5wfa9usXNIC0tLSIKKworIzogb3BzLmM6NTA3NQorbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAiwMy788fRILe5wfa9usXNIMDMuKciCisKKyM6IG9wcy5jOjUxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyC3ucH2vbrFzTpcbiIKKworIzogb3BzLmM6NTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJFNTc0OiBVbmtub3duIHJlZ2lzdGVyIHR5cGUgJWQiCittc2dzdHIgIkU1NzQ6ILjwuKO0wiC3ucH2vbrFzSDH/L3EICVkIgorCisjOiBvcHMuYzo1Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTQ6IEludmFsaWQgcmVnaXN0ZXIgbmFtZTogJyVzJyIKK21zZ3N0ciAiRTM1NDogwN+4+LXIILe5wfa9usXNIMDMuKc6ICclcyciCisKKyM6IG9wcy5jOjYwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIENvbHM7ICIKK21zZ3N0ciAiJWxkIL+tOyAiCisKKyM6IG9wcy5jOjYwNjUKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiU2VsZWN0ZWQgJXMlbGQgb2YgJWxkIExpbmVzOyAlbGQgb2YgJWxkIFdvcmRzOyAlbGQgb2YgJWxkIEJ5dGVzIgorI34gbXNnc3RyICIiCisKKyM6IG9wcy5jOjYwODEKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQnl0ZSAlbGQgb2YgJWxkIgorI34gbXNnc3RyICIiCisKKyM6IG9wcy5jOjYwOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCslbGQgZm9yIEJPTSkiCittc2dzdHIgIigrJWxkIGZvciBCT00pIgorCisjOiBvcHRpb24uYzoxNjQzCittc2dpZCAiJTwlZiVoJW0lPVBhZ2UgJU4iCittc2dzdHIgIiU8JWYlaCVtJT3G5MDMwfYgJU4iCisKKyM6IG9wdGlvbi5jOjIwOTIKK21zZ2lkICJUaGFua3MgZm9yIGZseWluZyBWaW0iCittc2dzdHIgIrr2wLsgs6+w1CDH2CDB1rzFvK0gsO24v73AtM+02SIKKworIzogb3B0aW9uLmM6MzQxOSBvcHRpb24uYzozNTM1Cittc2dpZCAiRTUxODogVW5rbm93biBvcHRpb24iCittc2dzdHIgIkU1MTg6ILjwuKO0wiC/ybzHIgorCisjOiBvcHRpb24uYzozNDMyCittc2dpZCAiRTUxOTogT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkU1MTk6IMH2v/i1x8H2IL7KtMIgv8m8x8DUtM+02SIKKworIzogb3B0aW9uLmM6MzQ1NworbXNnaWQgIkU1MjA6IE5vdCBhbGxvd2VkIGluIGEgbW9kZWxpbmUiCittc2dzdHIgIkU1MjA6ILjwteW288DOv6G8rSC757/rtckgvPYgvvi9wLTPtNkiCisKKyM6IG9wdGlvbi5jOjM1MjIKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0TGFzdCBzZXQgZnJvbSAiCisKKyM6IG9wdGlvbi5jOjM2NjEKK21zZ2lkICJFNTIxOiBOdW1iZXIgcmVxdWlyZWQgYWZ0ZXIgPSIKK21zZ3N0ciAiRTUyMTogPSC12r+hILz9wNqwoSDHyr/kx9W0z7TZIgorCisjOiBvcHRpb24uYzozOTg5IG9wdGlvbi5jOjQ2MTkKK21zZ2lkICJFNTIyOiBOb3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTUyMjogdGVybWNhcL+hvK0gw6PAuyC89iC++L3AtM+02SIKKworIzogb3B0aW9uLmM6NDA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM5OiBJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IgorbXNnc3RyICJFNTM5OiDAzLvzx9EgsdvA2iA8JXM+IgorCisjOiBvcHRpb24uYzo0NjExCittc2dpZCAiRTUyOTogQ2Fubm90IHNldCAndGVybScgdG8gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJFNTI5OiAndGVybSfAuyC68yC5rsDav623ziC8s8Gkx9IgvPYgvvi9wLTPtNkiCisKKyM6IG9wdGlvbi5jOjQ2MTQKK21zZ2lkICJFNTMwOiBDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICJFNTMwOiBHVUm/obyttMIgdGVybcC7ILnZstwgvPYgvvi9wLTPtNkiCisKKyM6IG9wdGlvbi5jOjQ2MTYKK21zZ2lkICJFNTMxOiBVc2UgXCI6Z3VpXCIgdG8gc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiRTUzMTogR1VJuKYgvcPA28fPt8G46SBcIjpndWlcIrimILvnv+vHz73KvcO/wCIKKworIzogb3B0aW9uLmM6NDY0NQorbXNnaWQgIkU1ODk6ICdiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiCittc2dzdHIgIkU1ODk6ICdiYWNrdXBleHQnv80gJ3BhdGNobW9kZSewoSC1v8DPx9W0z7TZIgorCisjOiBvcHRpb24uYzo0ODYwCittc2dpZCAiRTYxNzogQ2Fubm90IGJlIGNoYW5nZWQgaW4gdGhlIEdUSysgMiBHVUkiCittc2dzdHIgIkU2MTc6IEdUSysgMiBHVUm/obyttMIgudmy8CC89iC++L3AtM+02SIKKworIzogb3B0aW9uLmM6NTAxNgorbXNnaWQgIkU1MjQ6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1MjQ6IMTdt9DAzCC++L3AtM+02SIKKworIzogb3B0aW9uLmM6NTAxOAorbXNnaWQgIkU1MjU6IFplcm8gbGVuZ3RoIHN0cmluZyIKK21zZ3N0ciAiRTUyNToguvMgua7A2r+twNS0z7TZIgorCisjOiBvcHRpb24uYzo1MDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MjY6IE1pc3NpbmcgbnVtYmVyIGFmdGVyIDwlcz4iCittc2dzdHIgIkU1MjY6IDwlcz4gtdq/oSC8/cDasKEgvvi9wLTPtNkiCisKKyM6IG9wdGlvbi5jOjUxMDAKK21zZ2lkICJFNTI3OiBNaXNzaW5nIGNvbW1hIgorbXNnc3RyICJFNTI3OiDE3ri2sKEgvvi9wLTPtNkiCisKKyM6IG9wdGlvbi5jOjUxMDcKK21zZ2lkICJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJFNTI4OiAnILCqwLsguO29w8fYIMHWvMW+3yDH1bTPtNkiCisKKyM6IG9wdGlvbi5jOjUxNDgKK21zZ2lkICJFNTk1OiBjb250YWlucyB1bnByaW50YWJsZSBvciB3aWRlIGNoYXJhY3RlciIKK21zZ3N0ciAiRTU5NTogw+K3wsfSILz2IL74tMIsIMikwLogv83AzLXlILmuwNq4piDG98fUx8+w7SDA1r3AtM+02SIKKworIzogb3B0aW9uLmM6NTE5NworbXNnaWQgIkU1OTY6IEludmFsaWQgZm9udChzKSIKK21zZ3N0ciAiRTU5NjogwN+4+LXIILHbssMotekpIgorCisjOiBvcHRpb24uYzo1MjA1Cittc2dpZCAiRTU5NzogY2FuJ3Qgc2VsZWN0IGZvbnRzZXQiCittc2dzdHIgIkU1OTc6ILHbssO8wsC7ILDtuKYgvPYgvvi9wLTPtNkiCisKKyM6IG9wdGlvbi5jOjUyMDcKK21zZ2lkICJFNTk4OiBJbnZhbGlkIGZvbnRzZXQiCittc2dzdHIgIkU1OTg6IMDfuPi1yCCx27LDvMIiCisKKyM6IG9wdGlvbi5jOjUyMTQKK21zZ2lkICJFNTMzOiBjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICJFNTMzOiC/zcDMteUgsduyw8C7ILDtuKYgvPYgvvi9wLTPtNkiCisKKyM6IG9wdGlvbi5jOjUyMTYKK21zZ2lkICJFNTM0OiBJbnZhbGlkIHdpZGUgZm9udCIKK21zZ3N0ciAiRTUzNDogwN+4+LXIIL/NwMy15SCx27LDIgorCisjOiBvcHRpb24uYzo1NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIDwlYz4iCittc2dzdHIgIkU1MzU6IDwlYz4gtdq/oSDAzLvzx9EgsdvA2iIKKworIzogb3B0aW9uLmM6NTU5NworbXNnaWQgIkU1MzY6IGNvbW1hIHJlcXVpcmVkIgorbXNnc3RyICJFNTM2OiDE3ri2sKEgx8q/5MfVtM+02SIKKworIzogb3B0aW9uLmM6NTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJFNTM3OiAnY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIgorbXNnc3RyICJFNTM3OiAnY29tbWVudHN0cmluZyfAuiC68bDFs6ogJXPAuyi4pikgxvfH1MfYvt8gx9W0z7TZIgorCisjOiBvcHRpb24uYzo1NjgyCittc2dpZCAiRTUzODogTm8gbW91c2Ugc3VwcG9ydCIKK21zZ3N0ciAiRTUzODoguLa/7L26uKYgwfa/+MfPwfYgvsq9wLTPtNkiCisKKyM6IG9wdGlvbi5jOjU5NTAKK21zZ2lkICJFNTQwOiBVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJFNTQwOiC03cj3wfYgvsrAuiDHpcf2vcQguei/rSIKKworIzogb3B0aW9uLmM6NTk1NAorbXNnaWQgIkU1NDE6IHRvbyBtYW55IGl0ZW1zIgorbXNnc3RyICJFNTQxOiCzyrmrILi5wLogx9e48SIKKworIzogb3B0aW9uLmM6NTk1NgorbXNnaWQgIkU1NDI6IHVuYmFsYW5jZWQgZ3JvdXBzIgorbXNnc3RyICJFNTQyOiCx1cf8wMwgvsggwOLI+SCx17fsIgorCisjOiBvcHRpb24uYzo2MTk2Cittc2dpZCAiRTU5MDogQSBwcmV2aWV3IHdpbmRvdyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTU5MDogucy4riC6uLHiIMOiwMwgwMy5zCDBuMDnx9W0z7TZIgorCisjOiBvcHRpb24uYzo2NDUzCittc2dpZCAiVzE3OiBBcmFiaWMgcmVxdWlyZXMgVVRGLTgsIGRvICc6c2V0IGVuY29kaW5nPXV0Zi04JyIKK21zZ3N0ciAiVzE3OiBBcmFiaWPAuiBVVEYtOCDAzsTatfkgx8q/5CwgJzpzZXQgZW5jb2Rpbmc9dXRmLTgnIMfPvLy/5CIKKworIzogb3B0aW9uLmM6Njc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTkzOiBOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJFNTkzOiDA+77utbUgJWQgwdnAzCDHyr/kx9W0z7TZIgorCisjOiBvcHRpb24uYzo2Nzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTQ6IE5lZWQgYXQgbGVhc3QgJWQgY29sdW1ucyIKK21zZ3N0ciAiRTU5NDogwPu+7rW1ICVkIMStwMwgx8q/5MfVtM+02SIKKworIzogb3B0aW9uLmM6NzEwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMzU1OiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUzNTU6ILjwuKO0wiC/ybzHOiAlcyIKKworIzogb3B0aW9uLmM6NzIyMworbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIMXNucyzziDE2rXlIC0tLSIKKworIzogb3B0aW9uLmM6NzIyNQorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIMD8v6ogv8m8xyCwqiAtLS0iCisKKyM6IG9wdGlvbi5jOjcyMjcKK21zZ2lkICIiCisiXG4iCisiLS0tIExvY2FsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIMH2v6ogv8m8xyCwqiAtLS0iCisKKyM6IG9wdGlvbi5jOjcyMjkKK21zZ2lkICIiCisiXG4iCisiLS0tIE9wdGlvbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIL/JvMcgLS0tIgorCisjOiBvcHRpb24uYzo3OTM1Cittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6IGdldF92YXJwIL+ht68iCisKKyM6IG9wdGlvbi5jOjg5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NzogJ2xhbmdtYXAnOiBNYXRjaGluZyBjaGFyYWN0ZXIgbWlzc2luZyBmb3IgJXMiCittc2dzdHIgIkUzNTc6ICdsYW5nbWFwJzogJXO/oSC068fRILjCtMIgsdvA2rChIL74vcC0z7TZIgorCisjOiBvcHRpb24uYzo4OTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTg6ICdsYW5nbWFwJzogRXh0cmEgY2hhcmFjdGVycyBhZnRlciBzZW1pY29sb246ICVzIgorbXNnc3RyICJFMzU4OiAnbGFuZ21hcCc6ILy8uczE3bfQILXav6EgsdvA2rChILT1IMDWwL06ICVzIgorCisjOiBvc19hbWlnYS5jOjI4MAorbXNnaWQgImNhbm5vdCBvcGVuICIKK21zZ3N0ciAiY2Fubm90IG9wZW4gIgorCisjOiBvc19hbWlnYS5jOjMxNAorbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIrr2OiDDosC7IL+tILz2IL74vcC0z7TZIVxuIgorCisjOiBvc19hbWlnYS5jOjMzOAorbXNnaWQgIk5lZWQgQW1pZ2Fkb3MgdmVyc2lvbiAyLjA0IG9yIGxhdGVyXG4iCittc2dzdHIgIr7GucywobW1vbogMi4wNLOqILT1ILP0wLogxsfAzCDHyr/kx9W0z7TZXG4iCisKKyM6IG9zX2FtaWdhLmM6MzQ0CisjLCBjLWZvcm1hdAorI34gbXNnaWQgIk5lZWQgJXMgdmVyc2lvbiAlbGRcbiIKKyN+IG1zZ3N0ciAiIgorCisjOiBvc19hbWlnYS5jOjQxNgorbXNnaWQgIkNhbm5vdCBvcGVuIE5JTDpcbiIKK21zZ3N0ciAiTklMwLsgv60gvPYgvvjAvTpcbiIKKworIzogb3NfYW1pZ2EuYzo0MjcKK21zZ2lkICJDYW5ub3QgY3JlYXRlICIKK21zZ3N0ciAiQ2Fubm90IGNyZWF0ZSAiCisKKyM6IG9zX2FtaWdhLmM6OTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbSBleGl0aW5nIHdpdGggJWRcbiIKK21zZ3N0ciAiuvbAzCAlZCCwqsC4t84gs6GzwLTPtNlcbiIKKworIzogb3NfYW1pZ2EuYzo5NDEKK21zZ2lkICJjYW5ub3QgY2hhbmdlIGNvbnNvbGUgbW9kZSA/IVxuIgorbXNnc3RyICLE3LzWILvzxcK4piC52bLcILz2IL74vcC0z7TZID8hXG4iCisKKyM6IG9zX2FtaWdhLmM6MTAxMgorbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAibWNoX2dldF9zaGVsbHNpemU6IMTcvNbAzCC+xrTRsKE/P1xuIgorCisjLiBpZiBWaW0gb3BlbmVkIGEgd2luZG93OiBFeGVjdXRpbmcgYSBzaGVsbCBtYXkgY2F1c2UgY3Jhc2hlcworIzogb3NfYW1pZ2EuYzoxMTYxCittc2dpZCAiRTM2MDogQ2Fubm90IGV4ZWN1dGUgc2hlbGwgd2l0aCAtZiBvcHRpb24iCittc2dzdHIgIkUzNjA6IC1mIL/JvMfAzCC757/rtcggsOa/7CC9qcC7IL3Hx+DH0iC89iC++L3AtM+02SIKKworIzogb3NfYW1pZ2EuYzoxMjAyIG9zX2FtaWdhLmM6MTI5MgorbXNnaWQgIkNhbm5vdCBleGVjdXRlICIKK21zZ3N0ciAiQ2Fubm90IGV4ZWN1dGUgIgorCisjOiBvc19hbWlnYS5jOjEyMDUgb3NfYW1pZ2EuYzoxMzAyCittc2dpZCAic2hlbGwgIgorbXNnc3RyICJzaGVsbCAiCisKKyM6IG9zX2FtaWdhLmM6MTIyNSBvc19hbWlnYS5jOjEzMjcKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiIHJldHVybmVkXG4iCisKKyM6IG9zX2FtaWdhLmM6MTQ2OAorbXNnaWQgIkFOQ0hPUl9CVUZfU0laRSB0b28gc21hbGwuIgorbXNnc3RyICJBTkNIT1JfQlVGX1NJWkWwoSCzyrmrIMDbvcC0z7TZLiIKKworIzogb3NfYW1pZ2EuYzoxNDcyCittc2dpZCAiSS9PIEVSUk9SIgorbXNnc3RyICJJL08gv6G3ryIKKworIzogb3NfbXN3aW4uYzo1NDMKK21zZ2lkICIuLi4odHJ1bmNhdGVkKSIKK21zZ3N0ciAiLi4uKMDfuLIpIgorCisjOiBvc19tc3dpbi5jOjY0NQorbXNnaWQgIidjb2x1bW5zJyBpcyBub3QgODAsIGNhbm5vdCBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICInY29sdW1ucyfAzCA4MMDMIL7GtM++7rytLCC/3LrOILjtt8nAuyC9x8fgx9IgvPYgvvi9wLTPtNkiCisKKyM6IG9zX21zd2luLmM6MTk3NworbXNnaWQgIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRTIzNzogx8G4sMXNuKYgsO24o8H2ILj4x9+9wLTPtNkiCisKKyM6IG9zX21zd2luLmM6MjAxNworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJ0byAlcyBvbiAlcyIKKyN+IG1zZ3N0ciAiIgorCisjOiBvc19tc3dpbi5jOjIwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMzogVW5rbm93biBwcmludGVyIGZvbnQ6ICVzIgorbXNnc3RyICJFNjEzOiC48LijtMIgx8G4sMXNILHbssM6ICVzIgorCisjOiBvc19tc3dpbi5jOjIwODEgb3NfbXN3aW4uYzoyMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogwM684iC/obevOiAlcyIKKworIzogb3NfbXN3aW4uYzoyMDkyCittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAiuPC4pyIKKworIzogb3NfbXN3aW4uYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nICclcyciCittc2dzdHIgIiclcycgwM684sHfIgorCisjOiBvc19tc3dpbi5jOjMyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NDogSWxsZWdhbCBjaGFyc2V0IG5hbWUgXCIlc1wiIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDQ6IMDfuPi1yCCx28DavMIgwMy4pyBcIiVzXCLAzCiwoSkgsduywyDAzLinIFwiJXNcIr+hIMDWvcC0z7TZIgorCisjOiBvc19tc3dpbi5jOjMyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTogwN+4+LXIILHbwNogJyVjJ8DMKLChKSCx27LDIMDMuKcgXCIlc1wiv6EgwNa9wLTPtNkiCisKKyM6IG9zX3Jpc2Nvcy5jOjEyNTkKK21zZ2lkICJFMzY2OiBJbnZhbGlkICdvc2ZpbGV0eXBlJyBvcHRpb24gLSB1c2luZyBUZXh0IgorbXNnc3RyICJFMzY2OiDA37j4tcggJ29zZmlsZXR5cGUnIL/JvMcgLSBUZXh0uKYgu+e/68fVtM+02SIKKworIzogb3NfdW5peC5jOjkyNworbXNnaWQgIlZpbTogRG91YmxlIHNpZ25hbCwgZXhpdGluZ1xuIgorbXNnc3RyICK69jogsLDAuiC9w7HXs84gtc4gufgsILOhs8C0z7TZXG4iCisKKyM6IG9zX3VuaXguYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICK69jogJXMgvcOx17POwLsgwOK+0r3AtM+02VxuIgorCisjOiBvc191bml4LmM6OTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWxcbiIKK21zZ3N0ciAiuvY6IMHXwLsgvcOx17POwLsgwOK+0r3AtM+02VxuIgorCisjOiBvc191bml4LmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAiWCC18L26x8O3ucDMuKYgv6m0wiC1pSAlbGQgbXNlY8DMILDJt8i9wLTPtNkiCisKKyM6IG9zX3VuaXguYzoxMjI2Cittc2dpZCAiIgorIlxuIgorIlZpbTogR290IFggZXJyb3JcbiIKK21zZ3N0ciAiIgorIlxuIgorIrr2OiBYIL+ht6+woSC7/bDlvcC0z7TZXG4iCisKKyM6IG9zX3VuaXguYzoxMzM4Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiWCC18L26x8O3ucDMIL3Dx+jAzCC9x8bQx9+9wLTPtNkiCisKKyM6IG9zX3VuaXguYzoxNDc3Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRpbWVkIG91dCIKK21zZ3N0ciAiWCC18L26x8O3ucDMuKYgv6202bChIL3DsKPAzCDDyrD6tce++r3AtM+02SIKKworIzogb3NfdW5peC5jOjMyMzQgb3NfdW5peC5jOjM5MTQKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgIgorbXNnc3RyICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgIgorCisjOiBvc191bml4LmM6MzI4MgorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCBzaFxuIgorbXNnc3RyICIiCisiXG4iCisivakgc2i4piC9x8fgx9IgvPYgvvi9wLTPtNlcbiIKKworIzogb3NfdW5peC5jOjMyODYgb3NfdW5peC5jOjM5MjAKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorCisjOiBvc191bml4LmM6MzQyMQorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgY3JlYXRlIHBpcGVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyLGxMDMx8G4piC4uLXpILz2IL74vcC0z7TZXG4iCisKKyM6IG9zX3VuaXguYzozNDM2Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBmb3JrXG4iCittc2dzdHIgIiIKKyJcbiIKKyLA2r3EIMfBt868vL26uKYguLi16SC89iC++L3AtM+02VxuIgorCisjOiBvc191bml4LmM6MzkyNworbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIrjtt8nAzCCzobi2w8TBs73AtM+02VxuIgorCisjOiBvc191bml4LmM6NDE5MSBvc191bml4LmM6NDMxNiBvc191bml4LmM6NTk4MgorbXNnaWQgIlhTTVAgbG9zdCBJQ0UgY29ubmVjdGlvbiIKK21zZ3N0ciAiWFNNULChIElDRSC/rLDhwLsgwNK+7rn2t8i9wLTPtNkiCisKKyM6IG9zX3VuaXguYzo1NTY1Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiWCC18L26x8O3ucDMIL+tseKwoSC9x8bQx9+9wLTPtNkiCisKKyM6IG9zX3VuaXguYzo1ODg3Cittc2dpZCAiWFNNUCBoYW5kbGluZyBzYXZlLXlvdXJzZWxmIHJlcXVlc3QiCittc2dzdHIgIlhTTVCwoSBzYXZlLXlvdXJzZWxmIL/kw7vAuyC9x8fgx8+w7SDA1r3AtM+02SIKKworIzogb3NfdW5peC5jOjYwMDYKK21zZ2lkICJYU01QIG9wZW5pbmcgY29ubmVjdGlvbiIKK21zZ3N0ciAiWFNNULChIL+ssOHAuyC/qbTCIMHfwNS0z7TZIgorCisjOiBvc191bml4LmM6NjAyNQorbXNnaWQgIlhTTVAgSUNFIGNvbm5lY3Rpb24gd2F0Y2ggZmFpbGVkIgorbXNnc3RyICJYU01QsKEgSUNFIL+ssOEgsKi9w7imIL3HxtDH373AtM+02SIKKworIzogb3NfdW5peC5jOjYwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICJYU01QIFNtY09wZW5Db25uZWN0aW9uIL3HxtA6ICVzIgorCisjOiBvc192bXNfbW1zLmM6NTkKKyN+IG1zZ2lkICJBdCBsaW5lIgorI34gbXNnc3RyICIiCisKKyM6IG9zX3czMmV4ZS5jOjY1Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiuO23ycfgwLsgwKfH0SC43rjwuK64piDH0rTnx9IgvPYgvvi9wLTPtNkuIgorCisjOiBvc193MzJleGUuYzo2NiBvc193MzJleGUuYzo4OSBvc193MzJleGUuYzoxMDAKK21zZ2lkICJWSU0gRXJyb3IiCittc2dzdHIgIrr2IL+ht68iCisKKyM6IG9zX3czMmV4ZS5jOjg5Cittc2dpZCAiQ291bGQgbm90IGxvYWQgdmltMzIuZGxsISIKK21zZ3N0ciAidmltMzIuZGxswLsgutK3ryC16cDPILz2IL74vcC0z7TZISIKKworIzogb3NfdzMyZXhlLmM6OTkKK21zZ2lkICJDb3VsZCBub3QgZml4IHVwIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHRoZSBETEwhIgorbXNnc3RyICLH1Lz2IMb3wM7FzbimIERMTLfOILnZstwgvPYgvvi9wLTPtNkhIgorCisjOiBvc193aW4xNi5jOjM0MiBvc193aW4zMi5jOjMyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hlbGwgcmV0dXJuZWQgJWQiCittc2dzdHIgIr2pwMwgJWTAuyi4pikgtbm3wcHWvvq9wLTPtNkiCisKKyM6IG9zX3dpbjMyLmM6MjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCAlcyBldmVudFxuIgorbXNnc3RyICK69jogJXMgwMy6pcauuKYgwOK+0r3AtM+02VxuIgorCisjOiBvc193aW4zMi5jOjI2ODkKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAitN2x4iIKKworIzogb3Nfd2luMzIuYzoyNjkxCittc2dpZCAibG9nb2ZmIgorbXNnc3RyICK3zrHXvsa/9CIKKworIzogb3Nfd2luMzIuYzoyNjkyCittc2dpZCAic2h1dGRvd24iCittc2dzdHIgIrzLtNm/7iIKKworIzogb3Nfd2luMzIuYzozMTgyCittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6ILjtt8nAuyDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBvc193aW4zMi5jOjMxOTUKK21zZ2lkICIiCisiVklNUlVOLkVYRSBub3QgZm91bmQgaW4geW91ciAkUEFUSC5cbiIKKyJFeHRlcm5hbCBjb21tYW5kcyB3aWxsIG5vdCBwYXVzZSBhZnRlciBjb21wbGV0aW9uLlxuIgorIlNlZSAgOmhlbHAgd2luMzItdmltcnVuICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJWSU1SVU4uRVhFuKYgJFBBVEi/obytIMOjwLsgvPYgvvi9wLTPtNkuXG4iCisiv9y6ziC47bfJwMwgs6GzrSC12iC42MPiILz2IL74vcC0z7TZLlxuIgorIrTZILi5wLogwaS6uLimILq4vcO3wbjpIDpoZWxwIHdpbjMyLXZpbXJ1bsC7ILq4vcq9w7/ALiIKKworIzogb3Nfd2luMzIuYzozMTk4Cittc2dpZCAiVmltIFdhcm5pbmciCittc2dzdHIgIrr2ILDmsO0iCisKKyM6IHF1aWNrZml4LmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzI6IFRvbyBtYW55ICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3Mjogx/y9xCC5rsDav62/oSAlJSVjwMwosKEpILPKuasguLm9wLTPtNkiCisKKyM6IHF1aWNrZml4LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzM6IFVuZXhwZWN0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzczOiDH/L3EILmuwNq/rb+hICUlJWPAzCiwoSkgwN+4+LXHvvq9wLTPtNkiCisKKyM6IHF1aWNrZml4LmM6MzI1Cittc2dpZCAiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzQ6IMf8vcQgua7A2r+tv6EgXbChIL74vcC0z7TZIgorCisjOiBxdWlja2ZpeC5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc1OiBVbnN1cHBvcnRlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzU6IMf8vcQgua7A2r+tv6Egwfa/+LXHwfYgvsq0wiAlJSVjwMwosKEpIMDWvcC0z7TZIgorCisjOiBxdWlja2ZpeC5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiCittc2dzdHIgIkUzNzY6IMf8vcQgua7A2r+tILyttc6/oSDA37j4tcggJSUlY8DMKLChKSDA1r3AtM+02SIKKworIzogcXVpY2tmaXguYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6IMf8vcQgua7A2r+tv6EgwN+4+LXIICUlJWPAzCiwoSkgwNa9wLTPtNkiCisKKyM6IHF1aWNrZml4LmM6MzkxCittc2dpZCAiRTM3ODogJ2Vycm9yZm9ybWF0JyBjb250YWlucyBubyBwYXR0ZXJuIgorbXNnc3RyICJFMzc4OiAnZXJyb3Jmb3JtYXQnwMwgvu62siDG0MXPtbUgxvfH1MfPsO0gwNbB9iC+yr3AtM+02SIKKworIzogcXVpY2tmaXguYzo1MDEKK21zZ2lkICJFMzc5OiBNaXNzaW5nIG9yIGVtcHR5IGRpcmVjdG9yeSBuYW1lIgorbXNnc3RyICJFMzc5OiC6/MGzsMWzqiC68yDA2rfhueYgwMy4pyIKKworIzogcXVpY2tmaXguYzo5OTAKK21zZ2lkICJFNTUzOiBObyBtb3JlIGl0ZW1zIgorbXNnc3RyICJFNTUzOiC09SDAzLvzwMcgx9e48cDMIL74vcC0z7TZIgorCisjOiBxdWlja2ZpeC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCVkIG9mICVkKSVzJXM6ICIKK21zZ3N0ciAiKCVkIG9mICVkKSVzJXM6ICIKKworIzogcXVpY2tmaXguYzoxMjMxCittc2dpZCAiIChsaW5lIGRlbGV0ZWQpIgorbXNnc3RyICIgKMHZwLsgwfa//MC9KSIKKworIzogcXVpY2tmaXguYzoxNDQ0Cittc2dpZCAiRTM4MDogQXQgYm90dG9tIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgwOiDE/MfIvbogvbrFw8DHILnZtNrA1LTPtNkiCisKKyM6IHF1aWNrZml4LmM6MTQ1MworbXNnaWQgIkUzODE6IEF0IHRvcCBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MTogxPzHyL26IL26xcPAxyCywLTrseLA1LTPtNkiCisKKyM6IHF1aWNrZml4LmM6MTQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBsaXN0ICVkIG9mICVkOyAlZCBlcnJvcnMiCittc2dzdHIgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKKworIzogcXVpY2tmaXguYzoxOTQzCittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4MjogvrUgvPYgvvjAvSwgJ2J1ZnR5cGUnIL/JvMfAzCC8s8Gktce+7iDA1r3AtM+02SIKKworIzogcmVnZXhwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjk6IGludmFsaWQgaXRlbSBpbiAlcyUlW10iCittc2dzdHIgIkUzNjk6ICVzJSVbXb+hIMDfuPi1yCDH17jxIgorCisjOiByZWdleHAuYzo4MzgKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiDG0MXPwMwgs8q5qyCx6bTPtNkiCisKKyM6IHJlZ2V4cC5jOjEwMDkKK21zZ2lkICJFNTA6IFRvbyBtYW55IFxceigiCittc2dzdHIgIkU1MDogXFx6KLChILPKuasguLm9wLTPtNkiCisKKyM6IHJlZ2V4cC5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUxOiBUb28gbWFueSAlcygiCittc2dzdHIgIkU1MTogJXMosKEgs8q5qyC4ub3AtM+02SIKKworIzogcmVnZXhwLmM6MTA3NworbXNnaWQgIkU1MjogVW5tYXRjaGVkIFxceigiCittc2dzdHIgIkU1MjoguMLB9iC+yrTCIFxceigiCisKKyM6IHJlZ2V4cC5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOiBVbm1hdGNoZWQgJXMlJSgiCittc2dzdHIgIkU1MzoguMLB9iC+yrTCICVzJSUoIgorCisjOiByZWdleHAuYzoxMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NDogVW5tYXRjaGVkICVzKCIKK21zZ3N0ciAiRTU0OiC4wsH2IL7KtMIgJXMoIgorCisjOiByZWdleHAuYzoxMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTogVW5tYXRjaGVkICVzKSIKK21zZ3N0ciAiRTU1OiC4wsH2IL7KtMIgJXMpIgorCisjOiByZWdleHAuYzoxMjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjogJXMqIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1NjogJXMqIL+su+q89rTCILr0ILz2IMDWvcC0z7TZIgorCisjOiByZWdleHAuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzogJXMrIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1NzogJXMrIL+su+q89rTCILr0ILz2IMDWvcC0z7TZIgorCisjOiByZWdleHAuYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTogaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXNAIgorbXNnc3RyICJFNTk6ICVzQCC12r+hIMDfuPi1yCC5rsDaIgorCisjOiByZWdleHAuYzoxMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1ODogJXN7IG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1ODogJXN7IL+su+q89rTCILr0ILz2IMDWvcC0z7TZIgorCisjOiByZWdleHAuYzoxMzU0CisjLCBjLWZvcm1hdAorI34gbXNnaWQgIkU2MDogVG9vIG1hbnkgY29tcGxleCAlc3suLi59cyIKKyN+IG1zZ3N0ciAiIgorCisjOiByZWdleHAuYzoxMzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTogTmVzdGVkICVzKiIKK21zZ3N0ciAiRTYxOiBOZXN0ZWQgJXMqIgorCisjOiByZWdleHAuYzoxMzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjogTmVzdGVkICVzJWMiCittc2dzdHIgIkU2MjogTmVzdGVkICVzJWMiCisKKyM6IHJlZ2V4cC5jOjE0OTEKK21zZ2lkICJFNjM6IGludmFsaWQgdXNlIG9mIFxcXyIKK21zZ3N0ciAiRTYzOiBcXF+4piDA3yC4+CC757/rIgorCisjOiByZWdleHAuYzoxNTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDogJXMlYyC12r+hIL7GuauwzbW1IL74vcC0z7TZIgorCisjOiByZWdleHAuYzoxNTkyCittc2dpZCAiRTY1OiBJbGxlZ2FsIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICJFNjU6IMDMu/PH0SDIxMCnIML8wbYiCisKKyM6IHJlZ2V4cC5jOjE2MDUKK21zZ2lkICJFNjY6IFxceiggbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY2OiBcXHootMIgv6mx4r+hvK0gx+O/67XHwfYgvsq9wLTPtNkiCisKKyM6IHJlZ2V4cC5jOjE2MjQKK21zZ2lkICJFNjc6IFxcejEgZXQgYWwuIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU2NzogXFx6MSC17sC6IL+pseK/obytIMfjv+u1x8H2IL7KvcC0z7TZIgorCisjOiByZWdleHAuYzoxNjM1Cittc2dpZCAiRTY4OiBJbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXHoiCittc2dzdHIgIkU2ODogXFx6ILXav6EgwMy788fRILmuwNoiCisKKyM6IHJlZ2V4cC5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY5OiBNaXNzaW5nIF0gYWZ0ZXIgJXMlJVsiCittc2dzdHIgIkU2OTogJXMlJVsgtdq/oSBdsKEgvvi9wLTPtNkiCisKKyM6IHJlZ2V4cC5jOjE3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTcwOiBFbXB0eSAlcyUlW10iCittc2dzdHIgIkU3MDoguvMgJXMlJVtdIgorCisjOiByZWdleHAuYzoxNzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MTogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXMlJSIKK21zZ3N0ciAiRTcxOiAlcyUlILXav6EgwMy788fRILmuwNoiCisKKyM6IHJlZ2V4cC5jOjI1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU1NDogU3ludGF4IGVycm9yIGluICVzey4uLn0iCittc2dzdHIgIkU1NTQ6ICVzey4uLn2/oSCxuLmuIL+ht68iCisKKyM6IHJlZ2V4cC5jOjI4NjMgcmVnZXhwLmM6MzAxNgorbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiDB18C9ILCht87DqDsgwaSx1Melx/a9xMDMILPKuasgurnA4sfRsKG/5D8iCisKKyM6IHJlZ2V4cC5jOjMwMDQgcmVnZXhwLmM6MzAxMworbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2MzogxtDFz7+hIMDHx9ggvbrFw7PRxKcgv6G3r7ChILv9sOW9wLTPtNkiCisKKyM6IHJlZ2V4cC5jOjMyNTgKKyN+IG1zZ2lkICJFeHRlcm5hbCBzdWJtYXRjaGVzOlxuIgorI34gbXNnc3RyICIiCisKKyM6IHNjcmVlbi5jOjIxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0tJTNsZCBsaW5lcyBmb2xkZWQgIgorbXNnc3RyICIrLS0lM2xkIMHZIMGiyPsgIgorCisjOiBzY3JlZW4uYzo3OTk2Cittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgvLHFw8ShyK8iCisKKyM6IHNjcmVlbi5jOjgwMDAKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiILnZstmx4iIKKworIzogc2NyZWVuLmM6ODAwNQorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIgud206yIKKworIzogc2NyZWVuLmM6ODAwNworbXNnaWQgIiBJTlNFUlQiCittc2dzdHIgIiCzor/2s9ax4iIKKworIzogc2NyZWVuLmM6ODAxMAorbXNnaWQgIiAoaW5zZXJ0KSIKK21zZ3N0ciAiICizor/2s9ax4ikiCisKKyM6IHNjcmVlbi5jOjgwMTIKK21zZ2lkICIgKHJlcGxhY2UpIgorbXNnc3RyICIgKLnZstmx4ikiCisKKyM6IHNjcmVlbi5jOjgwMTQKK21zZ2lkICIgKHZyZXBsYWNlKSIKK21zZ3N0ciAiICi8scXDxKHIrykiCisKKyM6IHNjcmVlbi5jOjgwMTcKK21zZ2lkICIgSGVicmV3IgorbXNnc3RyICIgx+y66rfnIgorCisjOiBzY3JlZW4uYzo4MDI4CisjfiBtc2dpZCAiIEFyYWJpYyIKKyN+IG1zZ3N0ciAiIgorCisjOiBzY3JlZW4uYzo4MDMxCittc2dpZCAiIChsYW5nKSIKK21zZ3N0ciAiICi+8L7uKSIKKworIzogc2NyZWVuLmM6ODAzNQorbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKLrZwMyx4ikiCisKKyM6IHNjcmVlbi5jOjgwNDgKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIguvHB1r7zIgorCisjOiBzY3JlZW4uYzo4MDQ5Cittc2dpZCAiIFZJU1VBTCBMSU5FIgorbXNnc3RyICIguvHB1r7zILbzwM4iCisKKyM6IHNjcmVlbi5jOjgwNTAKK21zZ2lkICIgVklTVUFMIEJMT0NLIgorbXNnc3RyICIguvHB1r7zILrtt88iCisKKyM6IHNjcmVlbi5jOjgwNTEKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIgsO24o7HiIgorCisjOiBzY3JlZW4uYzo4MDUyCittc2dpZCAiIFNFTEVDVCBMSU5FIgorbXNnc3RyICIgtvPAziCw7bijseIiCisKKyM6IHNjcmVlbi5jOjgwNTMKK21zZ2lkICIgU0VMRUNUIEJMT0NLIgorbXNnc3RyICIguu23zyCw7bijseIiCisKKyM6IHNjcmVlbi5jOjgwNjggc2NyZWVuLmM6ODEzMQorbXNnaWQgInJlY29yZGluZyIKK21zZ3N0ciAiseK3z8HfIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIKK21zZ3N0ciAiw7PAvbHuwfYgw6O+0sC9LCCzob+hvK0gsOi80yIKKworIzogc2VhcmNoLmM6MzgKK21zZ2lkICJzZWFyY2ggaGl0IEJPVFRPTSwgY29udGludWluZyBhdCBUT1AiCittc2dzdHIgIrOhse7B9iDDo77SwL0sIMOzwL26zsXNILDovNMiCisKKyM6IHNlYXJjaC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzgzOiBJbnZhbGlkIHNlYXJjaCBzdHJpbmc6ICVzIgorbXNnc3RyICJFMzgzOiDA37j4tcggw6Ox4iC5rsDav606ICVzIgorCisjOiBzZWFyY2guYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg0OiDDs8C9se7B9iC4wrTCILmuwNq/rcDMIL74vcC0z7TZOiAlcyIKKworIzogc2VhcmNoLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODU6IHNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NTogs6Gx7sH2ILjCtMIgua7A2r+twMwgvvi9wLTPtNk6ICVzIgorCisjOiBzZWFyY2guYzoxMjQ5Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiAnOycgtdq/obTCICc/J7OqICcvJ7ChIL/Nvt8gx9W0z7TZIgorCisjOiBzZWFyY2guYzozNzU5Cittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAowMzA/L+hILjCvtK0+CC48bfPIMb3x9QpIgorCisjLiBjdXJzb3IgYXQgc3RhdHVzIGxpbmUKKyM6IHNlYXJjaC5jOjM3NzkKK21zZ2lkICItLS0gSW5jbHVkZWQgZmlsZXMgIgorbXNnc3RyICItLS0gSW5jbHVkZWQgZmlsZXMgIgorCisjOiBzZWFyY2guYzozNzgxCittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAibm90IGZvdW5kICIKKworIzogc2VhcmNoLmM6Mzc4MgorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgImluIHBhdGggLS0tXG4iCisKKyM6IHNlYXJjaC5jOjM4MzkKK21zZ2lkICIgIChBbHJlYWR5IGxpc3RlZCkiCittc2dzdHIgIiAgKEFscmVhZHkgbGlzdGVkKSIKKworIzogc2VhcmNoLmM6Mzg0MQorbXNnaWQgIiAgTk9UIEZPVU5EIgorbXNnc3RyICIgILj4IMOjvtLAvSIKKworIzogc2VhcmNoLmM6Mzg5MworIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBpbmNsdWRlZCBmaWxlOiAlcyIKK21zZ3N0ciAixvfH1LXIIMbEwM8gw6O0wiDB3zogJXMiCisKKyM6IHNlYXJjaC5jOjQxMTEKK21zZ2lkICJFMzg3OiBNYXRjaCBpcyBvbiBjdXJyZW50IGxpbmUiCittc2dzdHIgIkUzODc6ILjCtMIgsNQgx/bA5yDB2b+hIMDWvcC0z7TZIgorCisjOiBzZWFyY2guYzo0MjU0Cittc2dpZCAiQWxsIGluY2x1ZGVkIGZpbGVzIHdlcmUgZm91bmQiCittc2dzdHIgIrjwtecgxvfH1LXIIMbEwM/AuyDDo77SvcC0z7TZIgorCisjOiBzZWFyY2guYzo0MjU2Cittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIsb3x9S1yCDGxMDPwMwgvvi9wLTPtNkiCisKKyM6IHNlYXJjaC5jOjQyNzIKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IMGkwMe4piDDo8C7ILz2IL74vcC0z7TZIgorCisjOiBzZWFyY2guYzo0Mjc0Cittc2dpZCAiRTM4OTogQ291bGRuJ3QgZmluZCBwYXR0ZXJuIgorbXNnc3RyICJFMzg5OiDG0MXPwLsgw6PAuyC89iC++L3AtM+02SIKKworIzogc3ludGF4LmM6MzA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkwOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTM5MDogwN+4+LXIIMDOwNo6ICVzIgorCisjOiBzeW50YXguYzozMjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTE6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkxOiDAzLexILG4ua4gxay3r726xc20wiC++L3AtM+02TogJXMiCisKKyM6IHN5bnRheC5jOjMzOTQKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgIsDMILn2xtu/oSC068fYIMGkwMe1yCCxuLmuIMfXuPHAzCC++L3AtM+02SIKKworIzogc3ludGF4LmM6MzQwMgorbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAiQy3H/L3EIMHWvK65rr+hILW/seK4wsPjIgorCisjOiBzeW50YXguYzozNDEwCisjfiBtc2dpZCAibm8gc3luY2luZyIKKyN+IG1zZ3N0ciAiIgorCisjOiBzeW50YXguYzozNDEzCisjfiBtc2dpZCAic3luY2luZyBzdGFydHMgIgorI34gbXNnc3RyICIiCisKKyM6IHN5bnRheC5jOjM0MTUgc3ludGF4LmM6MzQ5MAorI34gbXNnaWQgIiBsaW5lcyBiZWZvcmUgdG9wIGxpbmUiCisjfiBtc2dzdHIgIiIKKworIzogc3ludGF4LmM6MzQyMAorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IHN5bmMgaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFN5bnRheCC1v7HiIMfXuPG16SAtLS0iCisKKyM6IHN5bnRheC5jOjM0MjUKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAic3luY2luZyBvbiBpdGVtcyIKKyN+IG1zZ3N0ciAiIgorCisjOiBzeW50YXguYzozNDMxCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFN5bnRheCDH17jxIC0tLSIKKworIzogc3ludGF4LmM6MzQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MjogwMy3sSCxuLmuIMWst6+9usXNtMIgvvi9wLTPtNk6ICVzIgorCisjOiBzeW50YXguYzozNDgwCisjfiBtc2dpZCAibWluaW1hbCAiCisjfiBtc2dzdHIgIiIKKworIzogc3ludGF4LmM6MzQ4NworI34gbXNnaWQgIm1heGltYWwgIgorI34gbXNnc3RyICIiCisKKyM6IHN5bnRheC5jOjM0OTkKKyN+IG1zZ2lkICI7IG1hdGNoICIKKyN+IG1zZ3N0ciAiIgorCisjOiBzeW50YXguYzozNTAxCisjfiBtc2dpZCAiIGxpbmUgYnJlYWtzIgorI34gbXNnc3RyICIiCisKKyM6IHN5bnRheC5jOjQxMzUKK21zZ2lkICJFMzkzOiBncm91cFt0XWhlcmUgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTM6IGdyb3VwW3RdaGVyZbTCIL+pseK/obytILvnv+u1ySC89iC++L3AtM+02SIKKworIzogc3ludGF4LmM6NDE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk0OiBEaWRuJ3QgZmluZCByZWdpb24gaXRlbSBmb3IgJXMiCittc2dzdHIgIkUzOTQ6ICVzv6EgtOvH0SByZWdpb24gx9e48cC7IMOjwfYguPjH373AtM+02SIKKworIzogc3ludGF4LmM6NDE4NworbXNnaWQgIkUzOTU6IGNvbnRhaW5zIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk1OiBjb250YWlucyDAzsDatMIgv6mx4r+hIL61ILz2IL74vcC0z7TZIgorCisjOiBzeW50YXguYzo0MTk4Cittc2dpZCAiRTM5NjogY29udGFpbmVkaW4gYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTY6IGNvbnRhaW5lZGluIMDOwNq0wiC/qbHiv6EgvrUgvPYgvvi9wLTPtNkiCisKKyM6IHN5bnRheC5jOjQyNzYKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5NzogxsTAz8DMuKfAzCDHyr/kx9W0z7TZIgorCisjOiBzeW50YXguYzo0NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODogJz0nwMwgvvi9wLTPtNk6ICVzIgorCisjOiBzeW50YXguYzo0NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBzeW50YXggcmVnaW9uICVzIgorbXNnc3RyICJFMzk5OiDD5rrQxKEgvsrAuiDAzsDaOiCxuLmuIL+1v6ogJXMiCisKKyM6IHN5bnRheC5jOjUxMDMKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDogxay3r726xc2woSC47b3DtcfB9iC+yr7SvcC0z7TZIgorCisjOiBzeW50YXguYzo1MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDE6IFBhdHRlcm4gZGVsaW1pdGVyIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MDE6IMbQxc8gsbi60MDauKYgw6PAuyC89iC++L3AtM+02TogJXMiCisKKyM6IHN5bnRheC5jOjUyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMjogR2FyYmFnZSBhZnRlciBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRTQwMjogxtDFzyC12r+hIL6yt7mx4jogJXMiCisKKyM6IHN5bnRheC5jOjUzMDUKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiBzeW50YXggc3luYzogwdkgv6y80yDG0MXPwMwgtc4gufggu+e/67XHvvq9wLTPtNkiCisKKyM6IHN5bnRheC5jOjUzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNDogSWxsZWdhbCBhcmd1bWVudHM6ICVzIgorbXNnc3RyICJFNDA0OiC68cGku/PA+8DOIMDOwNo6ICVzIgorCisjOiBzeW50YXguYzo1NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDU6IE1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MDU6IMDMxPcgseLIo7ChILr8wbPAvTogJXMiCisKKyM6IHN5bnRheC5jOjU0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNjogRW1wdHkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDA2OiC68yDAzsDaOiAlcyIKKworIzogc3ludGF4LmM6NTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA3OiAlcyBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNDA3OiAlc8C6KLTCKSC/qbHiv6G8rSDH47/rtcfB9iC+yr3AtM+02SIKKworIzogc3ludGF4LmM6NTQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA4OiAlcyBtdXN0IGJlIGZpcnN0IGluIGNvbnRhaW5zIGxpc3QiCittc2dzdHIgIkU0MDg6ICVzwLootMIpIGNvbnRhaW5zILjxt8/AxyDDuSC5+MKwv6m+3yDH1bTPtNkiCisKKyM6IHN5bnRheC5jOjU1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwOTogVW5rbm93biBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTQwOToguPC4o7TCILHXt+wgwMy4pzogJXMiCisKKyM6IHN5bnRheC5jOjU3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiDA37j4tcggOnN5bnRheCDHz8CnILjtt8k6ICVzIgorCisjOiBzeW50YXguYzo2MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTE6IGhpZ2hsaWdodCBncm91cCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDExOiDHz8DMtvPAzMauILHXt+zAuyDDo8C7ILz2IL74vcC0z7TZOiAlcyIKKworIzogc3ludGF4LmM6NjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEyOiBOb3QgZW5vdWdoIGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMjogw+a60MShIL7KwLogwM7A2jogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDEzOiBUb28gbWFueSBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTM6ILPKuasguLnAuiDAzsDaOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTg3CisjfiBtc2dpZCAiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIgorI34gbXNnc3RyICIiCisKKyM6IHN5bnRheC5jOjYzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNTogdW5leHBlY3RlZCBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNTogtua528DHIMDMxPcgseLIozogJXMiCisKKyM6IHN5bnRheC5jOjYzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNjogbWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNjogwMzE9yCx4sijsKEguvzBs8C9OiAlcyIKKworIzogc3ludGF4LmM6NjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE3OiBtaXNzaW5nIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQxNzogwM7A2rChILr8wbPAvTogJXMiCisKKyM6IHN5bnRheC5jOjY0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6ILrxwaS788D7wM4gsKo6ICVzIgorCisjOiBzeW50YXguYzo2NTM2Cittc2dpZCAiRTQxOTogRkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQxOToguPC4o7TCIEZHILv2u/MiCisKKyM6IHN5bnRheC5jOjY1NDcKK21zZ2lkICJFNDIwOiBCRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDIwOiC48LijtMIgQkcgu/a78yIKKworIzogc3ludGF4LmM6NjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6ILv2IMDMuKfAzLOqILz9wNq4piDAzr3Ex9IgvPYgvvjAvTogJXMiCisKKyM6IHN5bnRheC5jOjY4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6IMXNucyzziDE2rXlsKEgs8q5qyCx6DogJXMiCisKKyM6IHN5bnRheC5jOjY4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMzogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MjM6IMDfuPi1yCDAzsDaOiAlcyIKKworIzogc3ludGF4LmM6NzM5MAorbXNnaWQgIkU0MjQ6IFRvbyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBpbiB1c2UiCittc2dzdHIgIkU0MjQ6ILPKuasguLnAuiC02bilIMfPwMy288DMxq4gvNO8usDMILvnv+u1x7DtIMDWvcC0z7TZIgorCisjOiBzeW50YXguYzo3OTExCittc2dpZCAiRTY2OTogVW5wcmludGFibGUgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUiCittc2dzdHIgIkU2Njk6ILHXt+wgwMy4p7+hIMPit8LH0iC89iC++LTCILmuwNqwoSDA1r3AtM+02SIKKworIy4gVGhpcyBpcyBhbiBlcnJvciwgYnV0IHNpbmNlIHRoZXJlIHByZXZpb3VzbHkgd2FzIG5vIGNoZWNrIG9ubHkKKyMuICogZ2l2ZSBhIHdhcm5pbmcuCisjOiBzeW50YXguYzo3OTE4Cittc2dpZCAiVzE4OiBJbnZhbGlkIGNoYXJhY3RlciBpbiBncm91cCBuYW1lIgorbXNnc3RyICJXMTg6ILHXt+wgwMy4p7+hIMDMu/PH0SC5rsDaIgorCisjOiB0YWcuYzo5MAorbXNnaWQgIkU1NTU6IGF0IGJvdHRvbSBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTU6IMXCsdcgvbrFw8DHILOhwNS0z7TZIgorCisjOiB0YWcuYzo5MQorbXNnaWQgIkU1NTY6IGF0IHRvcCBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTY6IMXCsdcgvbrFw8DHIMOzwL3A1LTPtNkiCisKKyM6IHRhZy5jOjQxMgorbXNnaWQgIkU0MjU6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI1OiDDuSC5+MKwILjCtMIgxcKx1yDAzMD8wLi3zrTCILClILz2IL74vcC0z7TZIgorCisjOiB0YWcuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6IMXCsde4piDDo8C7ILz2IL74wL06ICVzIgorCisjOiB0YWcuYzo1ODMKK21zZ2lkICIgICMgcHJpIGtpbmQgdGFnIgorbXNnc3RyICIgICMgcHJpIGtpbmQgdGFnIgorCisjOiB0YWcuYzo1ODYKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgIsbEwM9cbiIKKworIy4KKyMuICogQXNrIHRvIHNlbGVjdCBhIHRhZyBmcm9tIHRoZSBsaXN0LgorIy4gKiBXaGVuIHVzaW5nICI6c2lsZW50IiBhc3N1bWUgdGhhdCA8Q1I+IHdhcyBlbnRlcmVkLgorIy4KKyM6IHRhZy5jOjc0NAorbXNnaWQgIkVudGVyIG5yIG9mIGNob2ljZSAoPENSPiB0byBhYm9ydCk6ICIKK21zZ3N0ciAisO24piC8/cDaIMDUt8IgKDxDUj7AuiDB38H2KToiCisKKyM6IHRhZy5jOjc4NAorbXNnaWQgIkU0Mjc6IFRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNzoguMK0wiDFwrHXsKEgx8+zqiC527+hIL74vcC0z7TZIgorCisjOiB0YWcuYzo3ODYKK21zZ2lkICJFNDI4OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI4OiC4tsH2uLcguMK0wiDFwrHXILXat860wiCwpSC89iC++L3AtM+02SIKKworIzogdGFnLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLGxMDPIFwiJXNcIsDMKLChKSDBuMDnx8/B9iC+yr3AtM+02SIKKworIy4gR2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgdGFncworIzogdGFnLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAlZCBvZiAlZCVzIgorbXNnc3RyICJ0YWcgJWQgb2YgJWQlcyIKKworIzogdGFnLmM6ODI2Cittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiBvciBtb3JlIgorCisjOiB0YWcuYzo4MjgKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiICBVc2luZyB0YWcgd2l0aCBkaWZmZXJlbnQgY2FzZSEiCisKKyM6IHRhZy5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTQyOTogxsTAzyBcIiVzXCLAzCiwoSkgwbjA58fPwfYgvsq9wLTPtNkiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6OTQxCittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKKworIzogdGFnLmM6MTM2MworIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICLFwrHXIMbEwM8gJXMgw6O0wiDB3yIKKworIzogdGFnLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMwOiBUYWcgZmlsZSBwYXRoIHRydW5jYXRlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRTQzMDogJXO/oSC068fRIMXCsdcgxsTAzyCw5rfOsKEgwN+3yL3AtM+02VxuIgorCisjOiB0YWcuYzoyMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzE6IEZvcm1hdCBlcnJvciBpbiB0YWdzIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDMxOiDFwrHXIMbEwM8gXCIlc1wiv6Egx/y9xCC/obevsKEgwNa9wLTPtNkiCisKKyM6IHRhZy5jOjIyMDcKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorI34gbXNnc3RyICIiCisKKyM6IHRhZy5jOjIyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMjogVGFncyBmaWxlIG5vdCBzb3J0ZWQ6ICVzIgorbXNnc3RyICJFNDMyOiDFwrHXIMbEwM/AzCDBpLfEtce+7iDA1sH2IL7KwL06ICVzIgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MjI4MAorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzogxcKx1yDGxMDPwMwgvvi9wLTPtNkiCisKKyM6IHRhZy5jOjMwMTYKK21zZ2lkICJFNDM0OiBDYW4ndCBmaW5kIHRhZyBwYXR0ZXJuIgorbXNnc3RyICJFNDM0OiDFwrHXIMbQxc/AuyDDo8C7ILz2IL74vcC0z7TZIgorCisjOiB0YWcuYzozMDI3Cittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiDFwrHXuKYgw6PAuyC89iC++MH2uLggwMywxSCwsL3AtM+02SEiCisKKyM6IHRlcm0uYzoxNzU5Cittc2dpZCAiJyBub3Qga25vd24uIEF2YWlsYWJsZSBidWlsdGluIHRlcm1pbmFscyBhcmU6IgorbXNnc3RyICInIG5vdCBrbm93bi4gQXZhaWxhYmxlIGJ1aWx0aW4gdGVybWluYWxzIGFyZToiCisKKyM6IHRlcm0uYzoxNzgzCittc2dpZCAiZGVmYXVsdGluZyB0byAnIgorbXNnc3RyICJkZWZhdWx0aW5nIHRvICciCisKKyM6IHRlcm0uYzoyMTQxCittc2dpZCAiRTU1NzogQ2Fubm90IG9wZW4gdGVybWNhcCBmaWxlIgorbXNnc3RyICJFNTU3OiB0ZXJtY2FwIMbEwM/AuyC/rSC89iC++L3AtM+02SIKKworIzogdGVybS5jOjIxNDUKK21zZ2lkICJFNTU4OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWluZm8iCittc2dzdHIgIkU1NTg6IMXNucyzziDH17jxwLsgdGVybWluZm+/obytIMOjwLsgvPYgvvi9wLTPtNkiCisKKyM6IHRlcm0uYzoyMTQ3Cittc2dpZCAiRTU1OTogVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1NTk6IMXNucyzziDH17jxwLsgdGVybWNhcL+hvK0gw6PAuyC89iC++L3AtM+02SIKKworIzogdGVybS5jOjIzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzNjogTm8gXCIlc1wiIGVudHJ5IGluIHRlcm1jYXAiCittc2dzdHIgIkU0MzY6IHRlcm1jYXC/oSBcIiVzXCIgx9e48cDMIL74vcC0z7TZIgorCisjOiB0ZXJtLmM6Mjc4MAorbXNnaWQgIkU0Mzc6IHRlcm1pbmFsIGNhcGFiaWxpdHkgXCJjbVwiIHJlcXVpcmVkIgorbXNnc3RyICJFNDM3OiDFzbnMs87AzCBcImNtXCIgseK0ycC7IMH2v/jH2L7fIMfVtM+02SIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0ZXJtLmM6NDk5MAorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwga2V5cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gxc25zLPOIMWwIC0tLSIKKworIzogdWkuYzoyNTgKK21zZ2lkICJuZXcgc2hlbGwgc3RhcnRlZFxuIgorbXNnc3RyICK79SC9qcDMIL3DwNu1x776vcC0z7TZXG4iCisKKyM6IHVpLmM6MTg0MQorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICK69jogwNS3wiDA0LTCIMHfIL+ht68sILOhs7u0wsHfLi4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6NDA1Cittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICLD67zSILrSsKG0yTsgvu7Ct7XnILDovNPH1bTPtNkiCisKKyM6IHVuZG8uYzo1NjEKK21zZ2lkICJFNDM4OiB1X3VuZG86IGxpbmUgbnVtYmVycyB3cm9uZyIKK21zZ3N0ciAiRTQzODogdV91bmRvOiDA37j4tcggwdkgufjIoyIKKworIzogdW5kby5jOjc1NworbXNnaWQgIjEgY2hhbmdlIgorbXNnc3RyICLHz7OqILnZstm++r3AtM+02SIKKworIzogdW5kby5jOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhbmdlcyIKK21zZ3N0ciAiJWxksLO4piC52bLZvvq9wLTPtNkiCisKKyM6IHVuZG8uYzo4MTIKK21zZ2lkICJFNDM5OiB1bmRvIGxpc3QgY29ycnVwdCIKK21zZ3N0ciAiRTQzOTogdW5kbyC48bfPwMwgsfrBs73AtM+02SIKKworIzogdW5kby5jOjg0NAorbXNnaWQgIkU0NDA6IHVuZG8gbGluZSBtaXNzaW5nIgorbXNnc3RyICJFNDQwOiB1bmRvIMHZwMwgvvi9wLTPtNkiCisKKyMuIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMKKyM6IHZlcnNpb24uYzo3MDcKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyILrxxq4gR1VJIMbHIgorCisjOiB2ZXJzaW9uLmM6NzA5Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMiC68cauIEdVSSDGxyIKKworIzogdmVyc2lvbi5jOjcxMgorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiIFdpbjMycyC788XCIgorCisjOiB2ZXJzaW9uLmM6NzE0Cittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIiBPTEUgwfa/+CIKKworIzogdmVyc2lvbi5jOjcxNworbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBjb25zb2xlIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyILrxxq4gxNy81iDGxyIKKworIzogdmVyc2lvbi5jOjcyMQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2IGJpdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAxNiC68cauIMbHIgorCisjOiB2ZXJzaW9uLmM6NzI1Cittc2dpZCAiIgorIlxuIgorIjMyIGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjMyILrxxq4gTVMtRE9TIMbHIgorCisjOiB2ZXJzaW9uLmM6NzI3Cittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2ILrxxq4gTVMtRE9TIMbHIgorCisjOiB2ZXJzaW9uLmM6NzMzCittc2dpZCAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyBYICjAr7TQvbopIMbHIgorCisjOiB2ZXJzaW9uLmM6NzM1Cittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFggxsciCisKKyM6IHZlcnNpb24uYzo3MzgKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIMbHIgorCisjOiB2ZXJzaW9uLmM6NzQzCittc2dpZCAiIgorIlxuIgorIlJJU0MgT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlJJU0MgT1MgxsciCisKKyM6IHZlcnNpb24uYzo3NTMKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisixvfH1LXIIMbQxKE6ICIKKworIzogdmVyc2lvbi5jOjc3OSB2ZXJzaW9uLmM6MTE0NworI34gbXNnaWQgIk1vZGlmaWVkIGJ5ICIKKyN+IG1zZ3N0ciAiIgorCisjOiB2ZXJzaW9uLmM6Nzg2Cittc2dpZCAiIgorIlxuIgorIkNvbXBpbGVkICIKK21zZ3N0ciAiIgorIlxuIgorIkNvbXBpbGVkICIKKworIzogdmVyc2lvbi5jOjc4OQorbXNnaWQgImJ5ICIKK21zZ3N0ciAiYnkgIgorCisjOiB2ZXJzaW9uLmM6ODAxCittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyKwxbTrx9EgxscgIgorCisjOiB2ZXJzaW9uLmM6ODA0Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIsWrIMbHICIKKworIzogdmVyc2lvbi5jOjgwNworbXNnaWQgIiIKKyJcbiIKKyJOb3JtYWwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyK6uMXrIMbHICIKKworIzogdmVyc2lvbi5jOjgxMAorbXNnaWQgIiIKKyJcbiIKKyJTbWFsbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIsDbwLogxscgIgorCisjOiB2ZXJzaW9uLmM6ODEyCittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyK+xsHWIMDbwLogxscgIgorCisjOiB2ZXJzaW9uLmM6ODE4Cittc2dpZCAid2l0aG91dCBHVUkuIgorbXNnc3RyICJHVUkgvvjAvS4iCisKKyM6IHZlcnNpb24uYzo4MjMKK21zZ2lkICJ3aXRoIEdUSzItR05PTUUgR1VJLiIKK21zZ3N0ciAiR1RLMi1HTk9NRSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODI1Cittc2dpZCAid2l0aCBHVEstR05PTUUgR1VJLiIKK21zZ3N0ciAiR1RLLUdOT01FIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4MjkKK21zZ2lkICJ3aXRoIEdUSzIgR1VJLiIKK21zZ3N0ciAiR1RLMiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODMxCittc2dpZCAid2l0aCBHVEsgR1VJLiIKK21zZ3N0ciAiR1RLIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4MzYKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICJYMTEtTW90aWYgR1VJLiIKKworIzogdmVyc2lvbi5jOjg0MAorbXNnaWQgIndpdGggWDExLW5lWHRhdyBHVUkuIgorbXNnc3RyICJYMTEtbmVYdGF3IEdVSS4iCisKKyM6IHZlcnNpb24uYzo4NDIKK21zZ2lkICJ3aXRoIFgxMS1BdGhlbmEgR1VJLiIKK21zZ3N0ciAiWDExLUF0aGVuYSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODQ2Cittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgIkJlT1MgR1VJLiIKKworIzogdmVyc2lvbi5jOjg0OQorbXNnaWQgIndpdGggUGhvdG9uIEdVSS4iCittc2dzdHIgIsb3xeYgR1VJLiIKKworIzogdmVyc2lvbi5jOjg1MgorbXNnaWQgIndpdGggR1VJLiIKK21zZ3N0ciAiR1VJLiIKKworIzogdmVyc2lvbi5jOjg1NQorbXNnaWQgIndpdGggQ2FyYm9uIEdVSS4iCittc2dzdHIgIkNhcmJvbiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODU4Cittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICJDb2NvYSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODYxCittc2dpZCAid2l0aCAoY2xhc3NpYykgR1VJLiIKK21zZ3N0ciAiKMWst6G9xCkgR1VJLiIKKworIzogdmVyc2lvbi5jOjg3MgorbXNnaWQgIiAgRmVhdHVyZXMgaW5jbHVkZWQgKCspIG9yIG5vdCAoLSk6XG4iCittc2dzdHIgIiAgseK0ySAoKzogxvfH1LXKLCAtOiDG98fUIL7IILXKKTpcbiIKKworIzogdmVyc2lvbi5jOjg4NAorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICC9w726xdsgdmltcmMgxsTAzzogXCIiCisKKyM6IHZlcnNpb24uYzo4ODkKK21zZ2lkICIgICAgIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgu+e/68DaIHZpbXJjIMbEwM86IFwiIgorCisjOiB2ZXJzaW9uLmM6ODk0Cittc2dpZCAiIDJuZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgu+e/68DaILXOILn4wrAgdmltcmMgxsTAzzogXCIiCisKKyM6IHZlcnNpb24uYzo4OTkKK21zZ2lkICIgM3JkIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiC757/rwNogvLwgufjCsCB2aW1yYyDGxMDPOiBcIiIKKworIzogdmVyc2lvbi5jOjkwNAorbXNnaWQgIiAgICAgIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICAgu+e/68DaIGV4cmMgxsTAzzogXCIiCisKKyM6IHZlcnNpb24uYzo5MDkKK21zZ2lkICIgIDJuZCB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgu+e/68DaILXOILn4wrAgZXhyYyDGxMDPOiBcIiIKKworIzogdmVyc2lvbi5jOjkxNQorbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgIL3DvbrF2yBndmltcmMgxsTAzzogXCIiCisKKyM6IHZlcnNpb24uYzo5MTkKK21zZ2lkICIgICAgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICC757/rwNogZ3ZpbXJjIMbEwM86IFwiIgorCisjOiB2ZXJzaW9uLmM6OTIzCittc2dpZCAiMm5kIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICK757/rwNogtc4gufjCsCBndmltcmMgxsTAzzogXCIiCisKKyM6IHZlcnNpb24uYzo5MjgKK21zZ2lkICIzcmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIrvnv+vA2iC8vCC5+MKwIGd2aW1yYyDGxMDPOiBcIiIKKworIzogdmVyc2lvbi5jOjkzNQorbXNnaWQgIiAgICBzeXN0ZW0gbWVudSBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIL3DvbrF2yDC97iyx6UgxsTAzzogXCIiCisKKyM6IHZlcnNpb24uYzo5NDMKK21zZ2lkICIgIGZhbGwtYmFjayBmb3IgJFZJTTogXCIiCittc2dzdHIgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKKworIzogdmVyc2lvbi5jOjk0OQorbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiIGYtYiBmb3IgJFZJTVJVTlRJTUU6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTUzCittc2dpZCAiQ29tcGlsYXRpb246ICIKK21zZ3N0ciAixMTGxMDPOiAiCisKKyM6IHZlcnNpb24uYzo5NTkKK21zZ2lkICJDb21waWxlcjogIgorbXNnc3RyICLExMbEwM+3rzogIgorCisjOiB2ZXJzaW9uLmM6OTY0Cittc2dpZCAiTGlua2luZzogIgorbXNnc3RyICK4tcWpOiAiCisKKyM6IHZlcnNpb24uYzo5NjkKK21zZ2lkICIgIERFQlVHIEJVSUxEIgorbXNnc3RyICIgILXwufax1yC69LXlIgorCisjOiB2ZXJzaW9uLmM6MTAwOAorbXNnaWQgIlZJTSAtIFZpIElNcHJvdmVkIgorbXNnc3RyICK69iAtIMfiu/O1yCBWaSIKKworIzogdmVyc2lvbi5jOjEwMTAKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAixscgIgorCisjOiB2ZXJzaW9uLmM6MTAxMQorbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAiYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorCisjOiB2ZXJzaW9uLmM6MTAxNQorbXNnaWQgIlZpbSBpcyBvcGVuIHNvdXJjZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUiCittc2dzdHIgIrr2wLogvNK9urChIL+tt8EgwNaw7SCw+MKlt84guejG97XLtM+02SIKKworIzogdmVyc2lvbi5jOjEwMTcKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAiv+ywo7TZv6Egu+e0wiCwobOtx9EgvsbAzLimILW1v83B1ry8v+QhIgorCisjOiB2ZXJzaW9uLmM6MTAxOAorbXNnaWQgInR5cGUgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgIsDMv6EgtOvH0SDBpLq4uKYguri3wbjpICAgIDpoZWxwIGljY2Y8v6PFzT4gICAgICAgwNS3wiIKKworIzogdmVyc2lvbi5jOjEwMjAKK21zZ2lkICJ0eXBlICA6cTxFbnRlcj4gICAgICAgICAgICAgICB0byBleGl0ICAgICAgICAgIgorbXNnc3RyICKzobO7t8G46SAgICAgICAgICAgICAgICAgICA6cTy/o8XNPiAgICAgICAgICAgICAgIMDUt8IiCisKKyM6IHZlcnNpb24uYzoxMDIxCittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAiv8K288DOILW1v/K4u8C7ILq4t8G46SAgICAgOmhlbHA8v6PFzT4gtse0wiA8RjE+ICDA1LfCIgorCisjOiB2ZXJzaW9uLmM6MTAyMgorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgIsbHIMGkuri4piC6uLfBuOkgICAgICAgICAgIDpoZWxwIHZlcnNpb242PL+jxc0+ICAgwNS3wiIKKworIzogdmVyc2lvbi5jOjEwMjUKK21zZ2lkICJSdW5uaW5nIGluIFZpIGNvbXBhdGlibGUgbW9kZSIKK21zZ3N0ciAiVmkgyKPIryC788XCt84gvcfH4MHfwNS0z7TZIgorCisjOiB2ZXJzaW9uLmM6MTAyNgorbXNnaWQgInR5cGUgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIGZvciBWaW0gZGVmYXVsdHMiCittc2dzdHIgIrr2ILHiuruwqsC7ILvnv+vHz7fBuOkgICAgIDpzZXQgbm9jcDy/o8XNPiAgICAgICAgwNS3wiIKKworIzogdmVyc2lvbi5jOjEwMjcKK21zZ2lkICJ0eXBlICA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICLAzL+hILTrx9EgwaS6uLimILq4t8G46SAgICA6aGVscCBjcC1kZWZhdWx0PL+jxc0+IMDUt8IiCisKKyM6IHZlcnNpb24uYzoxMDQyCittc2dpZCAibWVudSAgSGVscC0+T3JwaGFucyAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uICAgICIKK21zZ3N0ciAiwMy/oSC068fRIMGkuri4piC6uLfBuOkgICAguN60ur+hvK0gtbW/8ri7LT6w7b7GICC8scXDIgorCisjOiB2ZXJzaW9uLmM6MTA0NAorbXNnaWQgIlJ1bm5pbmcgbW9kZWxlc3MsIHR5cGVkIHRleHQgaXMgaW5zZXJ0ZWQiCittc2dzdHIgIrjwteW++MDMILz2x+DB38DMuOcsIMDUt8K1yCC5rsDatMIgu/DA1LXLtM+02SIKKworIzogdmVyc2lvbi5jOjEwNDUKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBJbnNlcnQgTW9kZSAgIgorbXNnc3RyICK43rS6v6G8rSDG7cH9LT7A/L+qILyzwaQtPrvwwNQguPC15SDF5LHbwLsgvLHFw8fPvcO46SAiCisKKyM6IHZlcnNpb24uYzoxMDQ2Cittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHR3byBtb2RlcyAgICAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgILXOILjwteW4piC757/rx9IgvPYgwNa9wLTPtNkgIgorCisjOiB2ZXJzaW9uLmM6MTA1MAorbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIFZpIENvbXBhdGlibGUiCittc2dzdHIgIrjetLq/obytIMbtwf0tPsD8v6ogvLPBpC0+VmkgyKPIryDF5LHbwLsgvLHFw8fPvcO46SAgICIKKworIzogdmVyc2lvbi5jOjEwNTEKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgVmltIGRlZmF1bHRzICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgIFZpbcDMILHiuruwqsC4t84gtb/A28fVtM+02SAiCisKKyM6IHZlcnNpb24uYzoxMDk4Cittc2dpZCAiU3BvbnNvciBWaW0gZGV2ZWxvcG1lbnQhIgorbXNnc3RyICK69iCws7nfwLsgyMS/+MfYIMHWvLy/5CEiCisKKyM6IHZlcnNpb24uYzoxMDk5Cittc2dpZCAiQmVjb21lIGEgcmVnaXN0ZXJlZCBWaW0gdXNlciEiCittc2dzdHIgIrr2ILvnv+vA2rfOILXut8/Hz7y8v+QhIgorCisjOiB2ZXJzaW9uLmM6MTEwMgorbXNnaWQgInR5cGUgIDpoZWxwIHNwb25zb3I8RW50ZXI+ICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgIsDMv6EgtOvH0SDBpLq4uKYguri3wbjpICAgIDpoZWxwIHNwb25zb3I8v6PFzT4gICAgwNS3wiIKKworIzogdmVyc2lvbi5jOjExMDMKK21zZ2lkICJ0eXBlICA6aGVscCByZWdpc3RlcjxFbnRlcj4gICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICLAzL+hILTrx9EgwaS6uLimILq4t8G46SAgICA6aGVscCByZWdpc3Rlcjy/o8XNPiAgIMDUt8IiCisKKyM6IHZlcnNpb24uYzoxMTA1Cittc2dpZCAibWVudSAgSGVscC0+U3BvbnNvci9SZWdpc3RlciAgZm9yIGluZm9ybWF0aW9uICAgICIKK21zZ3N0ciAiwMy/oSC068fRIMGkuri4piC6uLfBuOkgICAguN60uiC1tb/yuLstPlNwb25zb3IvUmVnaXN0ZXIiCisKKyM6IHZlcnNpb24uYzoxMTE1Cittc2dpZCAiV0FSTklORzogV2luZG93cyA5NS85OC9NRSBkZXRlY3RlZCIKK21zZ3N0ciAisOaw7TogwKm1tb/swe4gOTUvOTgvTUW4piDDo77SwL0iCisKKyM6IHZlcnNpb24uYzoxMTE4Cittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAiwMy/oSC068fRIMGkuri4piC6uLfBuOkgICAgOmhlbHAgd2luZG93czk1PL+jxc0+ICDA1LfCIgorCisjOiB3aW5kb3cuYzoyMDMKK21zZ2lkICJFNDQxOiBUaGVyZSBpcyBubyBwcmV2aWV3IHdpbmRvdyIKK21zZ3N0ciAiRTQ0MTogucy4riC6uLHiIMOiwMwgvvi9wLTPtNkiCisKKyM6IHdpbmRvdy5jOjU4MQorbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IMCnIL/ewsqw+iC+xrehIL/AuKXCysC7ILW/vcO/oSCzqrStILz2IL74vcC0z7TZIgorCisjOiB3aW5kb3cuYzoxMzQwCittc2dpZCAiRTQ0MzogQ2Fubm90IHJvdGF0ZSB3aGVuIGFub3RoZXIgd2luZG93IGlzIHNwbGl0IgorbXNnc3RyICJFNDQzOiC02bilIMOiwMwgs6q0ssGzwLsgtqe/obTCIMi4wPzH0iC89iC++L3AtM+02SIKKworIzogd2luZG93LmM6MTgzNgorbXNnaWQgIkU0NDQ6IENhbm5vdCBjbG9zZSBsYXN0IHdpbmRvdyIKK21zZ3N0ciAiRTQ0NDoguLbB9ri3IMOiwLsgtN3AuyC89iC++L3AtM+02SIKKworIzogd2luZG93LmM6MjU2NworbXNnaWQgIkFscmVhZHkgb25seSBvbmUgd2luZG93IgorbXNnc3RyICLAzLnMIMfPs6rAxyDDori4IMDWvcC0z7TZIgorCisjOiB3aW5kb3cuYzoyNjE0Cittc2dpZCAiRTQ0NTogT3RoZXIgd2luZG93IGNvbnRhaW5zIGNoYW5nZXMiCittc2dzdHIgIkU0NDU6ILTZuKUgw6LAzCC52bLuvvq9wLTPtNkiCisKKyM6IHdpbmRvdy5jOjQ0ODAKK21zZ2lkICJFNDQ2OiBObyBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFNDQ2OiDEv7ytILnYv6EgxsTAzyDAzLinwMwgvvi9wLTPtNkiCisKKyM6IHdpbmRvdy5jOjQ1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0NzogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFNDQ3OiBwYXRov6G8rSBcIiVzXCIgxsTAz8C7IMOjwLsgvPYgvvi9wLTPtNkiCisKKyM6IGlmX3BlcmwueHM6MzI2IGdsb2JhbHMuaDoxMjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzA6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgJXMiCittc2dzdHIgIkUzNzA6ICVzILbzwMy66revuK64piC3zrXlx9IgvPYgvvi9wLTPtNkiCisKKyM6IGlmX3BlcmwueHM6NTU0Cittc2dpZCAiU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFBlcmwgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiucy+yMfVtM+02SwgwMwguO23ycC6ILvnv+vH0iC89iC++L3AtM+02SwgUGVybCC288DMuuq3r7iuuKYgt861+cfSILz2IL74IgorIr3AtM+02S4iCisKKyM6IGlmX3BlcmwueHM6NjA3CisjfiBtc2dpZCAiRTI5OTogUGVybCBldmFsdWF0aW9uIGZvcmJpZGRlbiBpbiBzYW5kYm94IHdpdGhvdXQgdGhlIFNhZmUgbW9kdWxlIgorI34gbXNnc3RyICIiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTgzCittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICK/qbevILr2wLi3ziDG7cH9KCZNKSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODkKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgIsfPs6rAxyC69sC4t864uCDG7cH9KCZWKSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1OTgKK21zZ2lkICImRGlmZiB3aXRoIFZpbSIKK21zZ3N0ciAiuvbAuLfOIERpZmYoJkQpIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjYxMQorbXNnaWQgIkVkaXQgd2l0aCAmVmltIgorbXNnc3RyICK69sC4t84gxu3B/SgmVikiCisKKyMuIE5vdyBjb25jYXRlbmF0ZQorIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo2MzMKKyN+IG1zZ2lkICJFZGl0IHdpdGggZXhpc3RpbmcgVmltIC0gJiIKKyN+IG1zZ3N0ciAiIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjc0NgorbXNnaWQgIkVkaXRzIHRoZSBzZWxlY3RlZCBmaWxlKHMpIHdpdGggVmltIgorbXNnc3RyICK8scXDtcggxsTAzyi16SnAuyC69sC4t84gxu3B/SIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4ODUgR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjYKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwcm9jZXNzOiBDaGVjayBpZiBndmltIGlzIGluIHlvdXIgcGF0aCEiCittc2dzdHIgIsfBt868vL26ILv9vLogv6G3rzogZ3ZpbcDMIHBhdGi/oSDA1rTCIMH2IMiuwM7Hz7y8v+QhIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg4NiBHdmltRXh0L2d2aW1leHQuY3BwOjkwMCBHdmltRXh0L2d2aW1leHQuY3BwOjk2NworbXNnaWQgImd2aW1leHQuZGxsIGVycm9yIgorbXNnc3RyICJndmltZXh0LmRsbCC/obevIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg5OQorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAisOa3zrChILPKuasgsem0z7TZIgorCisjOiBnbG9iYWxzLmg6MTAzMQorbXNnaWQgIi0tTm8gbGluZXMgaW4gYnVmZmVyLS0iCittc2dzdHIgIi0tufbG27+hIMHZIL74wL0tLSIKKworIy4KKyMuICogVGhlIGVycm9yIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHNoYXJlZCBhcmUgaW5jbHVkZWQgaGVyZS4KKyMuICogRXhjbHVkZWQgYXJlIGVycm9ycyB0aGF0IGFyZSBvbmx5IHVzZWQgb25jZSBhbmQgZGVidWdnaW5nIG1lc3NhZ2VzLgorIy4KKyM6IGdsb2JhbHMuaDoxMTk0Cittc2dpZCAiRTQ3MDogQ29tbWFuZCBhYm9ydGVkIgorbXNnc3RyICJFNDcwOiC47bfJwMwgwd/B9rXHvvq9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMTk1Cittc2dpZCAiRTQ3MTogQXJndW1lbnQgcmVxdWlyZWQiCittc2dzdHIgIkU0NzE6IMDOwNqwoSDHyr/kx9W0z7TZIgorCisjOiBnbG9iYWxzLmg6MTE5NgorbXNnaWQgIkUxMDogXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJiIKK21zZ3N0ciAiRTEwOiAvLCA/IMikwLogJrTCIFxcILXav6Egv82+3yDH1bTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMTk4Cittc2dpZCAiRTExOiBJbnZhbGlkIGluIGNvbW1hbmQtbGluZSB3aW5kb3c7IDxDUj4gZXhlY3V0ZXMsIENUUkwtQyBxdWl0cyIKK21zZ3N0ciAiRTExOiC47bfJwdkgw6K/oSDA37j4tco7IDxDUj4gvcfH4CwgQ1RSTC1DILOhs7ux4iIKKworIzogZ2xvYmFscy5oOjEyMDAKK21zZ2lkICJFMTI6IENvbW1hbmQgbm90IGFsbG93ZWQgZnJvbSBleHJjL3ZpbXJjIGluIGN1cnJlbnQgZGlyIG9yIHRhZyBzZWFyY2giCittc2dzdHIgIiIKKyJFMTI6IMf2wOcgwNq34bnmILbHwLogxcKx1yDDo7Hiv6G8rSBleHJjL3ZpbXJjv6G8rcDHILjtt8nAuiDH47/rIL7IILXLtM+02SIKKworIzogZ2xvYmFscy5oOjEyMDIKK21zZ2lkICJFMTcxOiBNaXNzaW5nIDplbmRpZiIKK21zZ3N0ciAiRTE3MTogOmVuZGlmsKEgvvi9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjAzCittc2dpZCAiRTYwMDogTWlzc2luZyA6ZW5kdHJ5IgorbXNnc3RyICJFNjAwOiA6ZW5kdHJ5sKEgvvi9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjA0Cittc2dpZCAiRTE3MDogTWlzc2luZyA6ZW5kd2hpbGUiCittc2dzdHIgIkUxNzA6IDplbmR3aGlsZcDMIL74vcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTIwNQorbXNnaWQgIkU1ODg6IDplbmR3aGlsZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4ODogOndoaWxlvvjAzCA6ZW5kd2hpbGXAzCDA1r3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyMDcKK21zZ2lkICJFMTM6IEZpbGUgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxMzogxsTAz8DMIMDWvcC0z7TZICi1pL7uvrK3wbjpICEgu+e/6ykiCisKKyM6IGdsb2JhbHMuaDoxMjA4Cittc2dpZCAiRTQ3MjogQ29tbWFuZCBmYWlsZWQiCittc2dzdHIgIkU0NzI6ILjtt8nAzCC9x8bQx9+9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzQ6IFVua25vd24gZm9udHNldDogJXMiCittc2dzdHIgIkUyMzQ6ILjwuKO0wiCx27LDvMI6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBVbmtub3duIGZvbnQ6ICVzIgorbXNnc3RyICJFMjM1OiC48LijtMIgsduywzogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzY6IEZvbnQgXCIlc1wiIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiRTIzNjogsduywyBcIiVzXCLAuii0wikgsO3BpLPQwMywoSC+xrTVtM+02SIKKworIzogZ2xvYmFscy5oOjEyMTkKK21zZ2lkICJFNDczOiBJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiRTQ3Mzogs7u6ziC/obevIgorCisjOiBnbG9iYWxzLmg6MTIyMAorbXNnaWQgIkludGVycnVwdGVkIgorbXNnc3RyICLB37Tctce++r3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyMjEKK21zZ2lkICJFMTQ6IEludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiRTE0OiDA37j4tcggwda80iIKKworIzogZ2xvYmFscy5oOjEyMjIKK21zZ2lkICJFNDc0OiBJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJFNDc0OiDA37j4tcggwM7A2iIKKworIzogZ2xvYmFscy5oOjEyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ3NTogSW52YWxpZCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0NzU6IMDfuPi1yCDAzsDaOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246ICVzIgorbXNnc3RyICJFMTU6IMDfuPi1yCDHpcf2vcQ6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIyNworbXNnaWQgIkUxNjogSW52YWxpZCByYW5nZSIKK21zZ3N0ciAiRTE2OiDA37j4tcggufzApyIKKworIzogZ2xvYmFscy5oOjEyMjgKK21zZ2lkICJFNDc2OiBJbnZhbGlkIGNvbW1hbmQiCittc2dzdHIgIkU0NzY6IMDfuPi1yCC47bfJIgorCisjOiBnbG9iYWxzLmg6MTIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCLAuii0wikgwNq34bnmwNS0z7TZIgorCisjOiBnbG9iYWxzLmg6MTIzMworbXNnaWQgIkUxODogVW5leHBlY3RlZCBjaGFyYWN0ZXJzIGJlZm9yZSAnPSciCittc2dzdHIgIkUxODogJz0nIMD8v6Egu/2wosH2ILj4x9EgsdvA2iIKKworIzogZ2xvYmFscy5oOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NDogTGlicmFyeSBjYWxsIGZhaWxlZCBmb3IgXCIlcygpXCIiCittc2dzdHIgIkUzNjQ6ILbzwMy66revuK4gXCIlcygpXCIgus64o7HiIL3HxtAiCisKKyM6IGdsb2JhbHMuaDoxMjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDg6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgZnVuY3Rpb24gJXMiCittc2dzdHIgIkU0NDg6ICVzILbzwMy66revuK4gx9S89rimILfOteXH0iC89iC++L3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyNDQKK21zZ2lkICJFMTk6IE1hcmsgaGFzIGludmFsaWQgbGluZSBudW1iZXIiCittc2dzdHIgIkUxOToguLbFqbChIMDfuPi1yCDB2SC5+MijuKYgsKHB9rDtIMDWvcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTI0NQorbXNnaWQgIkUyMDogTWFyayBub3Qgc2V0IgorbXNnc3RyICJFMjA6ILi2xamwoSC8s8Gktce+7iDA1sH2IL7KvcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTI0NgorbXNnaWQgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIKK21zZ3N0ciAiRTIxOiC52bLcILz2IL74wL0sICdtb2RpZmlhYmxlJ8DMILKowa7A1r3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyNDcKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IL26xam4s8ausKEgs8q5qyCx7bDUIMHfw7i1x776vcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTI0OAorbXNnaWQgIkUyMzogTm8gYWx0ZXJuYXRlIGZpbGUiCittc2dzdHIgIkUyMzogtNm4pSDGxMDPwMwgvvi9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjQ5Cittc2dpZCAiRTI0OiBObyBzdWNoIGFiYnJldmlhdGlvbiIKK21zZ3N0ciAiRTI0OiCx17exIL7gvu60wiC++L3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyNTAKK21zZ2lkICJFNDc3OiBObyAhIGFsbG93ZWQiCittc2dzdHIgIkU0Nzc6ICHAuiDH47/rtcfB9iC+yr3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyNTIKK21zZ2lkICJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICJFMjU6IEdVSbTCILvnv+vH0iC89iC++L3AtM+02TogxMTGxMDPILanIMb3x9S1x8H2IL7KvtK9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjU1Cittc2dpZCAiRTI2OiBIZWJyZXcgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjY6IEhlYnJld7TCILvnv+vH0iC89iC++L3AtM+02TogxMTGxMDPILanIMb3x9S1x8H2IL7KvtK9wLTPtNlcbiIKKworIzogZ2xvYmFscy5oOjEyNTgKK21zZ2lkICJFMjc6IEZhcnNpIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI3OiBGYXJzabTCILvnv+vH0iC89iC++L3AtM+02TogxMTGxMDPILanIMb3x9S1x8H2IL7KvtK9wLTPtNlcbiIKKworIzogZ2xvYmFscy5oOjEyNjEKK21zZ2lkICJFODAwOiBBcmFiaWMgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFODAwOiBBcmFiaWPAuiC757/rx9IgvPYgvvi9wLTPtNk6IMTExsTAzyC2pyDG98fUtcfB9iC+yr7SvcC0z7TZXG4iCisKKyM6IGdsb2JhbHMuaDoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODogTm8gc3VjaCBoaWdobGlnaHQgZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkUyODogwMy3sSDHz8DMtvPAzMauILHXt+wgwMy4p8C6IL74vcC0z7TZOiAlcyIKKworIzogZ2xvYmFscy5oOjEyNjYKK21zZ2lkICJFMjk6IE5vIGluc2VydGVkIHRleHQgeWV0IgorbXNnc3RyICJFMjk6IMDUt8K1yCDF2L26xq6woSC+xsH3IL74vcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTI2NworbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6IMDMwPwguO23ySDB2cDMIL74vcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTI2OAorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6ILHXt7EguMrHzsDMIL74vcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTI2OQorbXNnaWQgIkU0Nzk6IE5vIG1hdGNoIgorbXNnc3RyICJFNDc5OiC4wsH2IL7KvcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDgwOiBObyBtYXRjaDogJXMiCittc2dzdHIgIkU0ODA6ILjCwfYgvsrAvTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjcxCittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjogxsTAzyDAzLinwMwgvvi9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjcyCittc2dpZCAiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTMzOiDAzMD8ILnZstmx4iDBpLHUIMelx/a9xMDMIL74vcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTI3MworbXNnaWQgIkUzNDogTm8gcHJldmlvdXMgY29tbWFuZCIKK21zZ3N0ciAiRTM0OiDAzMD8ILjtt8nAzCC++L3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyNzQKK21zZ2lkICJFMzU6IE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTM1OiDAzMD8IMGksdTHpcf2vcTAzCC++L3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyNzUKK21zZ2lkICJFNDgxOiBObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICJFNDgxOiC5/MCntMIgx+O/67XHwfYgvsq9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjc3Cittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjoguvMgsPiwo8DMIMPmutDHz8H2IL7KvcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6IFwiJXNcIsC6KLTCKSC17rfPtcggvK259rjtwMwgvsa01bTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODI6IENhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJFNDgyOiAlcyDGxMDPwLsguLi16SC89iC++L3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyODMKK21zZ2lkICJFNDgzOiBDYW4ndCBnZXQgdGVtcCBmaWxlIG5hbWUiCittc2dzdHIgIkU0ODM6IMDTvcMgxsTAzyDAzLinwLsgvvLAuyC89iC++L3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NDogQ2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJFNDg0OiAlcyDGxMDPwLsgv60gvPYgvvi9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODU6IENhbid0IHJlYWQgZmlsZSAlcyIKK21zZ3N0ciAiRTQ4NTogJXMgxsTAz8C7IMDQwLsgvPYgvvi9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjg2Cittc2dpZCAiRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMzc6ILi2wfa4t8C4t84gsO3EoyC12iDA+sDltcfB9iC+yr7SvcC0z7TZICi1pL7uvrK3wbjpICEgtPXHz7HiKSIKKworIzogZ2xvYmFscy5oOjEyODcKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODogs84gwM7A2iIKKworIzogZ2xvYmFscy5oOjEyODkKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiC8/cDasKEgx8q/5MfVtM+02SIKKworIzogZ2xvYmFscy5oOjEyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwOiBDYW4ndCBvcGVuIGVycm9yZmlsZSAlcyIKK21zZ3N0ciAiRTQwOiC/obevxsTAzyAlc8C7KLimKSC/rSC89iC++L3AtM+02SIKKworIzogZ2xvYmFscy5oOjEyOTUKK21zZ2lkICJFMjMzOiBjYW5ub3Qgb3BlbiBkaXNwbGF5IgorbXNnc3RyICJFMjMzOiC18L26x8O3ucDMuKYgv60gvPYgvvi9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMjk3Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiC43rjwuK6woSC52bTas7W9wLTPtNkhIgorCisjOiBnbG9iYWxzLmg6MTI5OQorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kIgorbXNnc3RyICLG0MXPwLsgw6PAuyC89iC++L3AtM+02SIKKworIzogZ2xvYmFscy5oOjEzMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NjogUGF0dGVybiBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDg2OiDG0MXPwLsgw6PAuyC89iC++L3AtM+02TogJXMiCisKKyM6IGdsb2JhbHMuaDoxMzAyCittc2dpZCAiRTQ4NzogQXJndW1lbnQgbXVzdCBiZSBwb3NpdGl2ZSIKK21zZ3N0ciAiRTQ4NzogwM7A2rTCIL7nvPbAzL7uvt8gx9W0z7TZIgorCisjOiBnbG9iYWxzLmg6MTMwNAorbXNnaWQgIkU0NTk6IENhbm5vdCBnbyBiYWNrIHRvIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTQ1OTogwMzA/CC18Le6xeS4rrfOILClILz2IL74vcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTMwOAorbXNnaWQgIkU0MjogTm8gRXJyb3JzIgorbXNnc3RyICJFNDI6IL+ht68gvvjAvSIKKworIzogZ2xvYmFscy5oOjEzMTAKK21zZ2lkICJFNDM6IERhbWFnZWQgbWF0Y2ggc3RyaW5nIgorbXNnc3RyICJFNDM6ILH6wfgguMK0wiC5rsDav60iCisKKyM6IGdsb2JhbHMuaDoxMzExCittc2dpZCAiRTQ0OiBDb3JydXB0ZWQgcmVnZXhwIHByb2dyYW0iCittc2dzdHIgIkU0NDogsfrB+CDBpLHUx6XH9r3EIMfBt86x17elIgorCisjOiBnbG9iYWxzLmg6MTMxMgorbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU0NTogJ3JlYWRvbmx5JyC/ybzHwMwgvLPBpLXHvu4gwNa9wLTPtNkgKLWkvu6+srfBuOkgISC09cfPseIpIgorCisjOiBnbG9iYWxzLmg6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDY6IENhbm5vdCBzZXQgcmVhZC1vbmx5IHZhcmlhYmxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ2OiDA0LHiIMD8v+sguq+89iBcIiVzXCLAuyi4pikgvLPBpMfSILz2IL74vcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTMxNworbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0Nzogv6G3r8bEwM8gwNC0wiC1tcHfv6Egv6G3ryIKKworIzogZ2xvYmFscy5oOjEzMjAKK21zZ2lkICJFNDg6IE5vdCBhbGxvd2VkIGluIHNhbmRib3giCittc2dzdHIgIkU0ODogc2FuZGJveL+hvK20wiDH47/rtcfB9iC+yr3AtM+02SIKKworIzogZ2xvYmFscy5oOjEzMjIKK21zZ2lkICJFNTIzOiBOb3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNTIzOiC/qbHiv6G8rSDH47/rtcfB9iC+yr3AtM+02SIKKworIzogZ2xvYmFscy5oOjEzMjUKK21zZ2lkICJFMzU5OiBTY3JlZW4gbW9kZSBzZXR0aW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkUzNTk6IL26xam4sCC788XCILyzwaTAuiDB9r/4tcfB9iC+yr3AtM+02SIKKworIzogZ2xvYmFscy5oOjEzMjcKK21zZ2lkICJFNDk6IEludmFsaWQgc2Nyb2xsIHNpemUiCittc2dzdHIgIkU0OTogvbrFqbfRIMWpseKwoSDA37j4tce++r3AtM+02SIKKworIzogZ2xvYmFscy5oOjEzMjgKK21zZ2lkICJFOTE6ICdzaGVsbCcgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJFOTE6ICdzaGVsbCcgv8m8x8DMILrxvvq9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMzMwCittc2dpZCAiRTI1NTogQ291bGRuJ3QgcmVhZCBpbiBzaWduIGRhdGEhIgorbXNnc3RyICJFMjU1OiBzaWduIMDat+G4piDA0MC7ILz2IL74vcC0z7TZIgorCisjOiBnbG9iYWxzLmg6MTMzMgorbXNnaWQgIkU3MjogQ2xvc2UgZXJyb3Igb24gc3dhcCBmaWxlIgorbXNnc3RyICJFNzI6IL26v9IgxsTAz8C7ILTdwLsgvPYgvvi9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMzMzCittc2dpZCAiRTczOiB0YWcgc3RhY2sgZW1wdHkiCittc2dzdHIgIkU3MzogxcKx1yC9usXDwMwguvG++r3AtM+02SIKKworIzogZ2xvYmFscy5oOjEzMzQKK21zZ2lkICJFNzQ6IENvbW1hbmQgdG9vIGNvbXBsZXgiCittc2dzdHIgIkU3NDoguO23ycDMILPKuasgurnA4sfVtM+02SIKKworIzogZ2xvYmFscy5oOjEzMzUKK21zZ2lkICJFNzU6IE5hbWUgdG9vIGxvbmciCittc2dzdHIgIkU3NTogwMy4p8DMILPKuasgsem0z7TZIgorCisjOiBnbG9iYWxzLmg6MTMzNgorbXNnaWQgIkU3NjogVG9vIG1hbnkgWyIKK21zZ3N0ciAiRTc2OiBbsKEgs8q5qyC4ub3AtM+02SIKKworIzogZ2xvYmFscy5oOjEzMzcKK21zZ2lkICJFNzc6IFRvbyBtYW55IGZpbGUgbmFtZXMiCittc2dzdHIgIkU3NzogxsTAzyDAzLinwMwgs8q5qyC4ub3AtM+02SIKKworIzogZ2xvYmFscy5oOjEzMzgKK21zZ2lkICJFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJFNDg4OiCzob+hILmuwNqwoSC09SDA1r3AtM+02SIKKworIzogZ2xvYmFscy5oOjEzMzkKK21zZ2lkICJFNzg6IFVua25vd24gbWFyayIKK21zZ3N0ciAiRTc4OiC48LijtMIguLbFqSIKKworIzogZ2xvYmFscy5oOjEzNDAKK21zZ2lkICJFNzk6IENhbm5vdCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICJFNzk6ILi4tMkgsdvA2rimIMiuwOXH0iC89iC++L3AtM+02SIKKworIzogZ2xvYmFscy5oOjEzNDIKK21zZ2lkICJFNTkxOiAnd2luaGVpZ2h0JyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW5oZWlnaHQnIgorbXNnc3RyICJFNTkxOiAnd2luaGVpZ2h0J7TCICd3aW5taW5oZWlnaHQnuri02SDEv77fIMfVtM+02SIKKworIzogZ2xvYmFscy5oOjEzNDQKK21zZ2lkICJFNTkyOiAnd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiRTU5MjogJ3dpbndpZHRoJ7TCICd3aW5taW53aWR0aCe6uLTZIMS/vt8gx9W0z7TZIgorCisjOiBnbG9iYWxzLmg6MTM0NworbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiC+srTCIMHfv6Egv6G3ryIKKworIzogZ2xvYmFscy5oOjEzNDgKKyN+IG1zZ2lkICJaZXJvIGNvdW50IgorI34gbXNnc3RyICIiCisKKyM6IGdsb2JhbHMuaDoxMzUwCittc2dpZCAiRTgxOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dCIKK21zZ3N0ciAiRTgxOiC9usWpuLPGriDE3MXYvbrGriC527+hvK0gPFNJRD4gu+e/6yIKKworIzogZ2xvYmFscy5oOjEzNTMKK21zZ2lkICJFNDQ5OiBJbnZhbGlkIGV4cHJlc3Npb24gcmVjZWl2ZWQiCittc2dzdHIgIkU0NDk6IMDfuPi1yCDHpcf2vcTAzCC53r7GwbO9wLTPtNkiCisKKyM6IGdsb2JhbHMuaDoxMzU2Cittc2dpZCAiRTQ2MzogUmVnaW9uIGlzIGd1YXJkZWQsIGNhbm5vdCBtb2RpZnkiCittc2dzdHIgIkU0NjM6IL+1v6rAzCC6uMijtcew7SDA1r7uvK0gvPbBpMfSILz2IL74vcC0z7TZIgpkaWZmIC0tZ2l0IGEvc3JjL3BvL25vLnBvIGIvc3JjL3BvL25vLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNzQ0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vbm8ucG8KQEAgLTAsMCArMSw2NjMwIEBACisjIE5vcndlZ2lhbiAoQm9rbeVsKSB0cmFuc2xhdGlvbiBvZiBWaW0uCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBGSVJTVCBBVVRIT1Ig2Hl2aW5kIEEuIEhvbG0gPHN1bm55QHN1bmJhc2Uub3JnPiwgMjAwMy0yMDA0LgorIyBuby5wbyAzMTcgMjAwNC0wNi0xMSAxMjo1NDo1OVogc3VubnkKKyMKKyMgQ29tbWVudHMgYW5kIGVycm9yIHJlcG9ydHMgYXBwcmVjaWF0ZWQuCisjCisjIEluZm9ybWF0aW9uIGFib3V0IHRoZSAiVmltIGluIE5vcndlZ2lhbiIgcHJvamVjdDoKKyMKKyMgICBodHRwOi8vd3d3LnN1bmJhc2Uub3JnL3NyYy92aW0vbm9yd2VnaWFuLworIworIyBOZXcgdmVyc2lvbnMgb2YgdGhlIHRyYW5zbGF0aW9uIGZpbGVzIGNhbiBiZSBkb3dubG9hZGVkIGluIC50YXIuZ3oKKyMgZm9ybWF0IGZyb20KKyMKKyMgICBodHRwOi8vc3ZuLnN1bmJhc2Uub3JnL3JlcG9zL25vcndlZ2lhbl92aW0vZG93bmxvYWQvCisjCisjIFRoZSBmaWxlcyBhcmUgc3RvcmVkIGluIHRoZSBTdWJ2ZXJzaW9uIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gYW5kCisjIHVzZXJzIG9mIHRoaXMgc29mdHdhcmUgY2FuIGNoZWNrIG91dCB0aGUgbGF0ZXN0IHZlcnNpb24gd2l0aAorIworIyAgIHN2biBjaGVja291dCBodHRwOi8vc3ZuLnN1bmJhc2Uub3JnL3JlcG9zL25vcndlZ2lhbl92aW0vdHJ1bmsvbXNncyBub3J3ZWdpYW5fdmltLW1zZ3MKKyMKKyMgVGhpcyB3aWxsIHBsYWNlIHRoZSBtZXNzYWdlIGZpbGVzIGludG8gdGhlICJub3J3ZWdpYW5fdmltLW1zZ3MiCisjIGRpcmVjdG9yeS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IFZpbSA2LnhcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwNC0wNi0xMSAxNDozOCswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMy0wNS0xMyAwODoxOSswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiDYeXZpbmQgQS4gSG9sbSA8c3VubnlAc3VuYmFzZS5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTm9yd2VnaWFuIDx2aW0uaW4ubm9yd2VnaWFuQHN1bmJhc2Uub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHN1bm55QHN1bmJhc2Uub3JnXG4iCisKKyM6IGJ1ZmZlci5jOjEwMgorbXNnaWQgIkU4MjogQ2Fubm90IGFsbG9jYXRlIGFueSBidWZmZXIsIGV4aXRpbmcuLi4iCittc2dzdHIgIkU4MjogS2FuIGlra2UgcmVzZXJ2ZXJlIHBsYXNzIHRpbCBub2VuIGJ1ZmZlcmUsIGF2c2x1dHRlcqAuLi4iCisKKyM6IGJ1ZmZlci5jOjEwNQorbXNnaWQgIkU4MzogQ2Fubm90IGFsbG9jYXRlIGJ1ZmZlciwgdXNpbmcgb3RoZXIgb25lLi4uIgorbXNnc3RyICJFODM6IEthbiBpa2tlIHJlc2VydmVyZSBwbGFzcyB0aWwgYnVmZmVyLCBicnVrZXIgZW4gYW5uZW6gLi4uIgorCisjOiBidWZmZXIuYzo4MDgKK21zZ2lkICJFNTE1OiBObyBidWZmZXJzIHdlcmUgdW5sb2FkZWQiCittc2dzdHIgIkU1MTU6IEluZ2VuIGJ1ZmZlcmUgYmxlIGxhc3RldCB1dCIKKworIzogYnVmZmVyLmM6ODEwCittc2dpZCAiRTUxNjogTm8gYnVmZmVycyB3ZXJlIGRlbGV0ZWQiCittc2dzdHIgIkU1MTY6IEluZ2VuIGJ1ZmZlcmUgYmxlIHNsZXR0ZXQiCisKKyM6IGJ1ZmZlci5jOjgxMgorbXNnaWQgIkU1MTc6IE5vIGJ1ZmZlcnMgd2VyZSB3aXBlZCBvdXQiCittc2dzdHIgIkU1MTc6IEluZ2VuIGJ1ZmZlcmUgYmxlIHZpc2tldCB1dCIKKworIzogYnVmZmVyLmM6ODIwCittc2dpZCAiMSBidWZmZXIgdW5sb2FkZWQiCittc2dzdHIgIjEgYnVmZmVyIGJsZSBsYXN0ZXQgdXQiCisKKyM6IGJ1ZmZlci5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHVubG9hZGVkIgorbXNnc3RyICIlZCBidWZmZXJlIGJsZSBsYXN0ZXQgdXQiCisKKyM6IGJ1ZmZlci5jOjgyNworbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIjEgYnVmZmVyIGJsZSBzbGV0dGV0IgorCisjOiBidWZmZXIuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICIlZCBidWZmZXJlIGJsZSBzbGV0dGV0IgorCisjOiBidWZmZXIuYzo4MzQKK21zZ2lkICIxIGJ1ZmZlciB3aXBlZCBvdXQiCittc2dzdHIgIjEgYnVmZmVyIGJsZSB2aXNrZXQgdXQiCisKKyM6IGJ1ZmZlci5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHdpcGVkIG91dCIKK21zZ3N0ciAiJWQgYnVmZmVyZSBibGUgdmlza2V0IHV0IgorCisjOiBidWZmZXIuYzo4OTcKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiBGYW50IGluZ2VuIG1vZGlmaXNlcnQgYnVmZmVyIgorCisjLiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorIzogYnVmZmVyLmM6OTM2Cittc2dpZCAiRTg1OiBUaGVyZSBpcyBubyBsaXN0ZWQgYnVmZmVyIgorbXNnc3RyICJFODU6IERldCBmaW5uZXMgaW5nZW4gbGlzdGVkZSBidWZmZXJlIgorCisjOiBidWZmZXIuYzo5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg2OiBCdWZmZXIgJWxkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFODY6IEJ1ZmZlcmVuICVsZCBmaW5uZXMgaWtrZSIKKworIzogYnVmZmVyLmM6OTUxCittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6IEthbiBpa2tlIGflIGZvcmJpIHNpc3RlIGJ1ZmZlciIKKworIzogYnVmZmVyLmM6OTUzCittc2dpZCAiRTg4OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg4OiBLYW4gaWtrZSBn5SBmb3JiaSBm+HJzdGUgYnVmZmVyIgorCisjOiBidWZmZXIuYzo5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg5OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyICVsZCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICIiCisiRTg5OiBJa2tlIGxhZ3JldCBzaWRlbiBmb3JyaWdlIGZvcmFuZHJpbmcgYXYgYnVmZmVyZW4gJWxkIChsZWdnIHRpbCAhIGZvciDlICIKKyJvdmVyc3R5cmUpIgorCisjOiBidWZmZXIuYzoxMDA4Cittc2dpZCAiRTkwOiBDYW5ub3QgdW5sb2FkIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFOTA6IEthbiBpa2tlIGxhc3RlIHV0IHNpc3RlIGJ1ZmZlciIKKworIzogYnVmZmVyLmM6MTU0NAorbXNnaWQgIlcxNDogV2FybmluZzogTGlzdCBvZiBmaWxlIG5hbWVzIG92ZXJmbG93IgorbXNnc3RyICJXMTQ6IEFkdmFyc2VsOiBMaXN0ZW4gbWVkIGZpbG5hdm4gZXIgb3ZlcmZ5bHQiCisKKyM6IGJ1ZmZlci5jOjE3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkyOiBCdWZmZXIgJWxkIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTkyOiBGYW50IGlra2UgYnVmZmVyZW4gJWxkIgorCisjOiBidWZmZXIuYzoxOTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5MzogTWVyIGVubiBldHQgdHJlZmYgZm9yICVzIgorCisjOiBidWZmZXIuYzoxOTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiBJbmdlbiBzYW1zdmFyZW5kZSBidWZmZXIgZm9yICVzIgorCisjOiBidWZmZXIuYzoyMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIgorbXNnc3RyICJsaW5qZSAlbGQiCisKKyM6IGJ1ZmZlci5jOjI0MjkKK21zZ2lkICJFOTU6IEJ1ZmZlciB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTk1OiBFbiBidWZmZXIgbWVkIGRldHRlIG5hdm5ldCBmaW5uZXMgYWxsZXJlZGUiCisKKyM6IGJ1ZmZlci5jOjI3MjQKK21zZ2lkICIgW01vZGlmaWVkXSIKK21zZ3N0ciAiIFtNb2RpZmlzZXJ0XSIKKworIzogYnVmZmVyLmM6MjcyOQorbXNnaWQgIltOb3QgZWRpdGVkXSIKK21zZ3N0ciAiW1VyZWRpZ2VydF0iCisKKyM6IGJ1ZmZlci5jOjI3MzQKK21zZ2lkICJbTmV3IGZpbGVdIgorbXNnc3RyICJbTnkgZmlsXSIKKworIzogYnVmZmVyLmM6MjczNQorbXNnaWQgIltSZWFkIGVycm9yc10iCittc2dzdHIgIltMZXNlZmVpbF0iCisKKyM6IGJ1ZmZlci5jOjI3MzcgZmlsZWlvLmM6MjEyNAorbXNnaWQgIltyZWFkb25seV0iCittc2dzdHIgIltza3JpdmViZXNreXR0ZXRdIgorCisjOiBidWZmZXIuYzoyNzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAtLSVkJSUtLSIKK21zZ3N0ciAiMSBsaW5qZSAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6Mjc2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgLS0lZCUlLS0iCittc2dzdHIgIiVsZCBsaW5qZXIgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQgb2YgJWxkIC0tJWQlJS0tIGNvbCAiCittc2dzdHIgImxpbmplICVsZCBhdiAlbGQgLS0lZCUlLS0ga29sICIKKworIzogYnVmZmVyLmM6Mjg3NQorbXNnaWQgIltObyBmaWxlXSIKK21zZ3N0ciAiW1V0ZW4gbmF2bl0iCisKKyMuIG11c3QgYmUgYSBoZWxwIGJ1ZmZlcgorIzogYnVmZmVyLmM6MjkxNQorbXNnaWQgImhlbHAiCittc2dzdHIgImhqZWxwIgorCisjOiBidWZmZXIuYzozNDc0IHNjcmVlbi5jOjUwNzkKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIltoamVscF0iCisKKyM6IGJ1ZmZlci5jOjM1MDYgc2NyZWVuLmM6NTA4NQorbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW0ZvcmjlbmRzdmlzbmluZ10iCisKKyM6IGJ1ZmZlci5jOjM3ODYKK21zZ2lkICJBbGwiCittc2dzdHIgIkFsdCIKKworIzogYnVmZmVyLmM6Mzc4NgorbXNnaWQgIkJvdCIKK21zZ3N0ciAiQnVubiIKKworIzogYnVmZmVyLmM6Mzc4OAorbXNnaWQgIlRvcCIKK21zZ3N0ciAiVG9wcCIKKworIzogYnVmZmVyLmM6NDUzNgorbXNnaWQgIiIKKyJcbiIKKyIjIEJ1ZmZlciBsaXN0OlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBCdWZmZXJsaXN0ZTpcbiIKKworIzogYnVmZmVyLmM6NDU2OQorbXNnaWQgIltFcnJvciBMaXN0XSIKK21zZ3N0ciAiW0ZlaWxsaXN0ZV0iCisKKyM6IGJ1ZmZlci5jOjQ1ODIgbWVtbGluZS5jOjE1MjEKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIltVdGVuIG5hdm5dIgorCisjOiBidWZmZXIuYzo0ODk1Cittc2dpZCAiIgorIlxuIgorIi0tLSBTaWducyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gU2tpbHQgLS0tIgorCisjOiBidWZmZXIuYzo0OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNpZ25zIGZvciAlczoiCittc2dzdHIgIlNraWx0IGZvciAlczoiCisKKyM6IGJ1ZmZlci5jOjQ5MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgIGxpbmplPSVsZCAgaWQ9JWQgIG5hdm49JXMiCisKKyM6IGRpZmYuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6IEthbiBpa2tlIHNhbW1lbmxpZ25lIGZsZXJlIGVubiAlbGQgYnVmZmVyZSIKKworIzogZGlmZi5jOjcxMworbXNnaWQgIkU5NzogQ2Fubm90IGNyZWF0ZSBkaWZmcyIKK21zZ3N0ciAiRTk3OiBLYW4gaWtrZSBsYWdlIGRpZmZlcmFuc2VmaWxlciIKKworIzogZGlmZi5jOjgxOQorbXNnaWQgIlBhdGNoIGZpbGUiCittc2dzdHIgIlBhdGNoIGZpbCIKKworIzogZGlmZi5jOjEwNzIKK21zZ2lkICJFOTg6IENhbm5vdCByZWFkIGRpZmYgb3V0cHV0IgorbXNnc3RyICJFOTg6IEthbiBpa2tlIGxlc2UgZGlmZmVyYW5zZS11dGRhdGEiCisKKyM6IGRpZmYuYzoxODIyCittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IE7lduZyZW5kZSBidWZmZXIgZXIgaWtrZSBpIGRpZmZlcmFuc2Vtb2R1cyIKKworIzogZGlmZi5jOjE4MzQKK21zZ2lkICJFMTAwOiBObyBvdGhlciBidWZmZXIgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAwOiBJbmdlbiBhbm5lbiBidWZmZXIgaSBkaWZmZXJhbnNlbW9kdXMiCisKKyM6IGRpZmYuYzoxODQyCittc2dpZCAiRTEwMTogTW9yZSB0aGFuIHR3byBidWZmZXJzIGluIGRpZmYgbW9kZSwgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlIgorbXNnc3RyICIiCisiRTEwMTogTWVyIGVubiB0byBidWZmZXJlIGkgZGlmZmVyYW5zZW1vZHVzLCB2ZXQgaWtrZSBodmlsa2VuIHNvbSBza2FsIGJydWtlcyIKKworIzogZGlmZi5jOjE4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMjogQ2FuJ3QgZmluZCBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTAyOiBLYW4gaWtrZSBmaW5uZSBidWZmZXIgXCIlc1wiIgorCisjOiBkaWZmLmM6MTg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAzOiBCdWZmZXIgXCIlc1wiIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDM6IEJ1ZmZlcmVuIFwiJXNcIiBlciBpa2tlIGkgZGlmZmVyYW5zZW1vZHVzIgorCisjOiBkaWdyYXBoLmM6MjE5OQorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiBFc2NhcGUgZXIgaWtrZSBsb3ZsaWcgaSBzcGVzaWFsdGVnbiIKKworIzogZGlncmFwaC5jOjIzODQKK21zZ2lkICJFNTQ0OiBLZXltYXAgZmlsZSBub3QgZm91bmQiCittc2dzdHIgIkU1NDQ6IEZhbnQgaWtrZSBrZXltYXAtZmlsIgorCisjOiBkaWdyYXBoLmM6MjQxMQorbXNnaWQgIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTEwNTogQnJ1ayBhdiA6bG9hZGtleW1hcCB1dGVuZm9yIGVuIGtq+HJ0IGZpbCIKKworIzogZWRpdC5jOjQwCittc2dpZCAiIEtleXdvcmQgY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiBO+GtrZWxvcmRmdWxsZvhyaW5nICheTl5QKSIKKworIy4gY3RybF94X21vZGUgPT0gMCwgXlAvXk4gY29tcGwuCisjOiBlZGl0LmM6NDEKK21zZ2lkICIgXlggbW9kZSAoXkVeWV5MXl1eRl5JXkteRF5WXk5eUCkiCittc2dzdHIgIiBeWC1tb2R1cyAoXkVeWV5MXl1eRl5JXkteRF5WXk5eUCkiCisKKyMuIFNjcm9sbCBoYXMgaXQncyBvd24gbXNncywgaW4gaXQncyBwbGFjZSB0aGVyZSBpcyB0aGUgbXNnIGZvciBsb2NhbAorIy4gKiBjdHJsX3hfbW9kZSA9IDAgKGVnIGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfTE9DQUwpICAtLSBBY2V2ZWRvCisjOiBlZGl0LmM6NDQKK21zZ2lkICIgS2V5d29yZCBMb2NhbCBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiIExva2FsIG74a2tlbG9yZGZ1bGxm+HJpbmcgKF5OXlApIgorCisjOiBlZGl0LmM6NDUKK21zZ2lkICIgV2hvbGUgbGluZSBjb21wbGV0aW9uICheTF5OXlApIgorbXNnc3RyICIgRnVsbGb4cmluZyBhdiBoZWwgbGluamUgKF5MXk5eUCkiCisKKyM6IGVkaXQuYzo0NgorbXNnaWQgIiBGaWxlIG5hbWUgY29tcGxldGlvbiAoXkZeTl5QKSIKK21zZ3N0ciAiIEZ1bGxm+HJpbmcgYXYgZmlsbmF2biAoXkZeTl5QKSIKKworIzogZWRpdC5jOjQ3Cittc2dpZCAiIFRhZyBjb21wbGV0aW9uICheXV5OXlApIgorbXNnc3RyICIgRnVsbGb4cmluZyBhdiB0YWcgKF5dXk5eUCkiCisKKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiBTdGlt+G5zdGVyLWZ1bGxm+HJpbmcgKF5OXlApIgorCisjOiBlZGl0LmM6NDkKK21zZ2lkICIgRGVmaW5pdGlvbiBjb21wbGV0aW9uICheRF5OXlApIgorbXNnc3RyICIgRnVsbGb4cmluZyBhdiBkZWZpbmVyaW5nZXIgKF5EXk5eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LXk5eUCkiCittc2dzdHIgIiBGdWxsZvhyaW5nIGZyYSBvcmRsaXN0ZSAoXkteTl5QKSIKKworIzogZWRpdC5jOjUyCittc2dpZCAiIFRoZXNhdXJ1cyBjb21wbGV0aW9uICheVF5OXlApIgorbXNnc3RyICIgVGhlc2F1cnVzLWZ1bGxm+HJpbmcgKF5UXk5eUCkiCisKKyM6IGVkaXQuYzo1MworbXNnaWQgIiBDb21tYW5kLWxpbmUgY29tcGxldGlvbiAoXlZeTl5QKSIKK21zZ3N0ciAiIEtvbW1hbmRvbGluamUtZnVsbGb4cmluZyAoXlZeTl5QKSIKKworIzogZWRpdC5jOjU2Cittc2dpZCAiSGl0IGVuZCBvZiBwYXJhZ3JhcGgiCittc2dzdHIgIktvbSB0aWwgc2x1dHRlbiBhdiBhdnNuaXR0ZXQiCisKKyM6IGVkaXQuYzo5NjIKK21zZ2lkICIndGhlc2F1cnVzJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIid0aGVzYXVydXMnLXZhbGdldCBlciB0b210IgorCisjOiBlZGl0LmM6MTE2NgorbXNnaWQgIidkaWN0aW9uYXJ5JyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIidkaWN0aW9uYXJ5Jy12YWxnZXQgZXIgdG9tdCIKKworIzogZWRpdC5jOjIxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgZGljdGlvbmFyeTogJXMiCittc2dzdHIgIkxldGVyIGdqZW5ub20gb3JkbGlzdGU6ICVzIgorCisjOiBlZGl0LmM6MjM2OAorbXNnaWQgIiAoaW5zZXJ0KSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiIChzZXR0IGlubikgUnVsbGluZyAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjM3MAorbXNnaWQgIiAocmVwbGFjZSkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoZXJzdGF0dCkgUnVsbGluZyAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIkxldGVyOiAlcyIKKworIzogZWRpdC5jOjI3MTkKK21zZ2lkICJTY2FubmluZyB0YWdzLiIKK21zZ3N0ciAiTGV0ZXIgZ2plbm5vbSB0YWdnZXIuIgorCisjOiBlZGl0LmM6MzM4MQorbXNnaWQgIiBBZGRpbmciCittc2dzdHIgIiBMZWdnZXIgdGlsIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjM0MzAKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIFP4a2VyoC4uLiIKKworIzogZWRpdC5jOjM0ODYKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICJUaWxiYWtlIGkgb3JpZ2luYWxlbiIKKworIzogZWRpdC5jOjM0OTEKK21zZ2lkICJXb3JkIGZyb20gb3RoZXIgbGluZSIKK21zZ3N0ciAiT3JkIGZyYSBhbm5lbiBsaW5qZSIKKworIzogZWRpdC5jOjM0OTYKK21zZ2lkICJUaGUgb25seSBtYXRjaCIKK21zZ3N0ciAiRGV0IGVuZXN0ZSB0cmVmZmV0IgorCisjOiBlZGl0LmM6MzU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYXRjaCAlZCBvZiAlZCIKK21zZ3N0ciAidHJlZmYgJWQgYXYgJWQiCisKKyM6IGVkaXQuYzozNTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIgorbXNnc3RyICJ0cmVmZiAlZCIKKworIy4gU2tpcCBmdXJ0aGVyIGFyZ3VtZW50cyBidXQgZG8gY29udGludWUgdG8KKyMuICogc2VhcmNoIGZvciBhIHRyYWlsaW5nIGNvbW1hbmQuCisjOiBldmFsLmM6MTAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA2OiBVbmtub3duIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDY6IFVramVudCB2YXJpYWJlbDogXCIlc1wiIgorCisjOiBldmFsLmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA3OiBNaXNzaW5nIGJyYWNlczogJXMiCittc2dzdHIgIkUxMDc6IE1hbmdsZXIgcGFyZW50ZXNlcjogJXMiCisKKyM6IGV2YWwuYzoxNDM1IGV2YWwuYzoxNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDg6IE5vIHN1Y2ggdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwODogVmFyaWFiZWxlbiBmaW5uZXMgaWtrZTogXCIlc1wiIgorCisjOiBldmFsLmM6MTcwNQorbXNnaWQgIkUxMDk6IE1pc3NpbmcgJzonIGFmdGVyICc/JyIKK21zZ3N0ciAiRTEwOTogTWFuZ2xlciAnOicgZXR0ZXIgJz8nIgorCisjOiBldmFsLmM6MjMyNworbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiBNYW5nbGVyICcpJyIKKworIzogZXZhbC5jOjIzODkKK21zZ2lkICJFMTExOiBNaXNzaW5nICddJyIKK21zZ3N0ciAiRTExMTogTWFuZ2xlciAnXSciCisKKyM6IGV2YWwuYzoyNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIgorbXNnc3RyICJFMTEyOiBOYXZuIHDlIHZhbGcgbWFuZ2xlcjogJXMiCisKKyM6IGV2YWwuYzoyNDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTM6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTExMzogVWtqZW50IHZhbGc6ICVzIgorCisjOiBldmFsLmM6MjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE0OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNDogTWFuZ2xlciBhbmb4cnNlbHN0ZWduIChcIik6ICVzIgorCisjOiBldmFsLmM6MjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE1OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNTogTWFuZ2xlciBhcG9zdHJvZiAoJyk6ICVzIgorCisjOiBldmFsLmM6MzA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE2OiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJXMiCittc2dzdHIgIkUxMTY6IFVneWxkaWdlIHBhcmFtZXRlcmUgdGlsIGZ1bmtzam9uICVzIgorCisjOiBldmFsLmM6MzA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE3OiBVbmtub3duIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExNzogVWtqZW50IGZ1bmtzam9uOiAlcyIKKworIzogZXZhbC5jOjMwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExODogVG9vIG1hbnkgYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTg6IEZvciBtYW5nZSBwYXJhbWV0ZXJlIHRpbCBmdW5rc2pvbmVuOiAlcyIKKworIzogZXZhbC5jOjMwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOTogSWtrZSBub2sgcGFyYW1ldGVyZSB0aWwgZnVua3Nqb25lbjogJXMiCisKKyM6IGV2YWwuYzozMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjA6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0OiAlcyIKK21zZ3N0ciAiRTEyMDogQnJ1ayBhdiBcIjxTSUQ+XCIgdXRlbmZvciBza3JpcHQtc2FtbWVuaGVuZzogJXMiCisKKyMuCisjLiAqIFllcyB0aGlzIGlzIHVnbHksIEkgZG9uJ3QgcGFydGljdWxhcmx5IGxpa2UgaXQgZWl0aGVyLiAgQnV0IGRvaW5nIGl0CisjLiAqIHRoaXMgd2F5IGhhcyB0aGUgY29tcGVsbGluZyBhZHZhbnRhZ2UgdGhhdCB0cmFuc2xhdGlvbnMgbmVlZCBub3QgdG8KKyMuICogYmUgdG91Y2hlZCBhdCBhbGwuICBTZWUgYmVsb3cgd2hhdCAnb2snIGFuZCAneW5jJyBhcmUgdXNlZCBmb3IuCisjLgorIzogZXZhbC5jOjM2ODcgZ3VpLmM6NDM4NSBndWlfZ3RrLmM6MjA1OQorbXNnaWQgIiZPayIKK21zZ3N0ciAiJk9rIgorCisjOiBldmFsLmM6NDIyNgorIywgYy1mb3JtYXQKK21zZ2lkICIrLSVzJTNsZCBsaW5lczogIgorbXNnc3RyICIrLSVzJTNsZCBsaW5qZXI6ICIKKworIzogZXZhbC5jOjU0NzcKK21zZ2lkICIiCisiJk9LXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZPS1xuIgorIiZBdmJyeXQiCisKKyM6IGV2YWwuYzo1NTE3Cittc2dpZCAiY2FsbGVkIGlucHV0cmVzdG9yZSgpIG1vcmUgb2Z0ZW4gdGhhbiBpbnB1dHNhdmUoKSIKK21zZ3N0ciAia2FsdGUgaW5wdXRyZXN0b3JlKCkgb2Z0ZXJlIGVubiBpbnB1dHNhdmUoKSIKKworIzogZXZhbC5jOjU5NzcKK21zZ2lkICJFNjU1OiBUb28gbWFueSBzeW1ib2xpYyBsaW5rcyAoY3ljbGU/KSIKK21zZ3N0ciAiRTY1NTogRm9yIG1hbmdlIHN5bWJvbHNrZSBsaW5rZXIgKHJ1bmRkYW5zPykiCisKKyM6IGV2YWwuYzo2NjI2Cittc2dpZCAiRTI0MDogTm8gY29ubmVjdGlvbiB0byBWaW0gc2VydmVyIgorbXNnc3RyICJFMjQwOiBJbmdlbiBmb3JiaW5kZWxzZSBtZWQgVmltLXRqZW5lcmVuIgorCisjOiBldmFsLmM6NjcyNAorbXNnaWQgIkUyNzc6IFVuYWJsZSB0byByZWFkIGEgc2VydmVyIHJlcGx5IgorbXNnc3RyICJFMjc3OiBLbGFyZXIgaWtrZSBsZXNlIHN2YXIgZnJhIHRqZW5lcmVuIgorCisjOiBldmFsLmM6Njc1MgorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODogS2xhcmVyIGlra2Ugc2VuZGUgdGlsIGtsaWVudGVuIgorCisjOiBldmFsLmM6NjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQxOiBVbmFibGUgdG8gc2VuZCB0byAlcyIKK21zZ3N0ciAiRTI0MTogS2xhcmVyIGlra2Ugc2VuZGUgdGlsICVzIgorCisjOiBldmFsLmM6NjkwMAorbXNnaWQgIihJbnZhbGlkKSIKK21zZ3N0ciAiKFVneWxkaWcpIgorCisjOiBldmFsLmM6ODA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgorbXNnc3RyICJFMTIxOiBVZGVmaW5lcnQgdmFyaWFiZWw6ICVzIgorCisjOiBldmFsLmM6ODUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJFNDYxOiBVZ3lsZGlnIHZhcmlhYmVsbmF2bjogJXMiCisKKyM6IGV2YWwuYzo4ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjI6IEZ1bmN0aW9uICVzIGFscmVhZHkgZXhpc3RzLCBhZGQgISB0byByZXBsYWNlIGl0IgorbXNnc3RyICJFMTIyOiBGdW5rc2pvbmVuICVzIGVrc2lzdGVyZXIgYWxsZXJlZGUsIGxlZ2cgdGlsICEgZm9yIOUgZXJzdGF0dGUgZGVuIgorCisjOiBldmFsLmM6ODg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiBVZGVmaW5lcnQgZnVua3Nqb246ICVzIgorCisjOiBldmFsLmM6ODg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6IE1hbmdsZXIgJygnOiAlcyIKKworIzogZXZhbC5jOjg5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNTogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUxMjU6IFVneWxkaWcgcGFyYW1ldGVyOiAlcyIKKworIzogZXZhbC5jOjkwMDAKK21zZ2lkICJFMTI2OiBNaXNzaW5nIDplbmRmdW5jdGlvbiIKK21zZ3N0ciAiRTEyNjogTWFuZ2xlciA6ZW5kZnVuY3Rpb24iCisKKyM6IGV2YWwuYzo5MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjc6IENhbm5vdCByZWRlZmluZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTI3OiBLYW4gaWtrZSBvbWRlZmluZXJlIGZ1bmtzam9uZW4gJXM6IERlbiBlciBpIGJydWsiCisKKyM6IGV2YWwuYzo5MTc3Cittc2dpZCAiRTEyOTogRnVuY3Rpb24gbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTEyOTogRnVua3Nqb25zbmF2biBu+GR2ZW5kaWciCisKKyM6IGV2YWwuYzo5MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6IEZ1bmtzam9uc25hdm4gbeUgaGEgc3RvciBmb3Jib2tzdGF2OiAlcyIKKworIzogZXZhbC5jOjk0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMDogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEzMDogVWRlZmluZXJ0IGZ1bmtzam9uOiAlcyIKKworIzogZXZhbC5jOjk0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMTogQ2Fubm90IGRlbGV0ZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTMxOiBLYW4gaWtrZSBzbGV0dGUgZnVua3Nqb25lbiAlczogRGVuIGVyIGkgYnJ1ayIKKworIzogZXZhbC5jOjk0NzMKK21zZ2lkICJFMTMyOiBGdW5jdGlvbiBjYWxsIGRlcHRoIGlzIGhpZ2hlciB0aGFuICdtYXhmdW5jZGVwdGgnIgorbXNnc3RyICJFMTMyOiBGdW5rc2pvbnNrYWxsZHliZGVuIGVyIHN0+HJyZSBlbm4gJ21heGZ1bmNkZXB0aCciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjk1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAia2FsbGVyICVzIgorCisjOiBldmFsLmM6OTU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhYm9ydGVkIgorbXNnc3RyICIlcyBhdmJydXR0IgorCisjOiBldmFsLmM6OTU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgIyVsZCIKK21zZ3N0ciAiJXMgcmV0dXJuZXJlciAjJWxkIgorCisjOiBldmFsLmM6OTU5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICIlcyByZXR1cm5lcmVyIFwiJXNcIiIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6OTYxMyBleF9jbWRzMi5jOjIzNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAiZm9ydHNldHRlciBpICVzIgorCisjOiBldmFsLmM6OTYzOQorbXNnaWQgIkUxMzM6IDpyZXR1cm4gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTMzOiA6cmV0dXJuIGVyIGlra2UgaW5uZW5mb3IgZW4gZnVua3Nqb24iCisKKyM6IGV2YWwuYzo5OTcwCittc2dpZCAiIgorIlxuIgorIiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgZ2xvYmFsZSB2YXJpYWJsZXI6XG4iCisKKyM6IGV4X2NtZHMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iCittc2dzdHIgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2t0YWwgJTAzbyIKKworIzogZXhfY21kcy5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI+ICVkLCBIZXggJTA0eCwgT2N0YWwgJW8iCittc2dzdHIgIj4gJWQsIEhleCAlMDR4LCBPa3RhbCAlbyIKKworIzogZXhfY21kcy5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICI+ICVkLCBIZXggJTA4eCwgT2N0YWwgJW8iCittc2dzdHIgIj4gJWQsIEhleCAlMDh4LCBPa3RhbCAlbyIKKworIzogZXhfY21kcy5jOjQzMAorbXNnaWQgIkUxMzQ6IE1vdmUgbGluZXMgaW50byB0aGVtc2VsdmVzIgorbXNnc3RyICJFMTM0OiBGbHl0dGluZyBhdiBsaW5qZXIgaW5uIGkgc2VnIHNlbHYiCisKKyM6IGV4X2NtZHMuYzo0OTkKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgIjEgbGluamUgZmx5dHRldCIKKworIzogZXhfY21kcy5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgbW92ZWQiCittc2dzdHIgIiVsZCBsaW5qZXIgZmx5dHRldCIKKworIzogZXhfY21kcy5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgZmlsdGVyZWQiCittc2dzdHIgIiVsZCBsaW5qZXIgZmlsdHJlcnQiCisKKyM6IGV4X2NtZHMuYzo5NTIKK21zZ2lkICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMTM1OiAqRmlsdGVyKiBBdXRva29tbWFuZG9lciBt5SBpa2tlIGZvcmFuZHJlIG7lduZyZW5kZSBidWZmZXIiCisKKyM6IGV4X2NtZHMuYzoxMDM3Cittc2dpZCAiW05vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlXVxuIgorbXNnc3RyICJbSWtrZSBsYWdyZXQgc2lkZW4gZm9ycmlnZSBmb3JhbmRyaW5nXVxuIgorCisjOiBleF9jbWRzLmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICIlc3ZpbWluZm86ICVzIGluIGxpbmU6ICIKK21zZ3N0ciAiJXN2aW1pbmZvOiAlcyBpIGxpbmplOiAiCisKKyM6IGV4X2NtZHMuYzoxMjg4Cittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIkUxMzY6IHZpbWluZm86IEZvciBtYW5nZSBmZWlsLCBob3BwZXIgb3ZlciByZXN0ZW4gYXYgZmlsZW4iCisKKyM6IGV4X2NtZHMuYzoxMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAiTGVzZXIgdmltaW5mby1maWwgXCIlc1wiJXMlcyVzIgorCisjOiBleF9jbWRzLmM6MTMyNAorbXNnaWQgIiBpbmZvIgorbXNnc3RyICIgaW5mbyIKKworIzogZXhfY21kcy5jOjEzMjUKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiBtZXJrZXIiCisKKyM6IGV4X2NtZHMuYzoxMzI2Cittc2dpZCAiIEZBSUxFRCIKK21zZ3N0ciAiIEZFSUxFVCIKKworIzogZXhfY21kcy5jOjE0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IFZpbWluZm8tZmlsIGVyIGlra2Ugc2tyaXZiYXI6ICVzIgorCisjOiBleF9jbWRzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiBLYW4gaWtrZSBsYWdyZSB2aW1pbmZvLWZpbCAlcyEiCisKKyM6IGV4X2NtZHMuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiTGFncmVyIHZpbWluZm8tZmlsIFwiJXNcIiIKKworIy4gV3JpdGUgdGhlIGluZm86CisjOiBleF9jbWRzLmM6MTY0OQorIywgYy1mb3JtYXQKK21zZ2lkICIjIFRoaXMgdmltaW5mbyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVmltICVzLlxuIgorbXNnc3RyICIjIERlbm5lIHZpbWluZm8tZmlsZW4gYmxlIGdlbmVyZXJ0IGF2IFZpbSAlcy5cbiIKKworIzogZXhfY21kcy5jOjE2NTEKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIER1IGthbiByZWRpZ2VyZSBkZW4gaHZpcyBkdSBlciBmb3JzaWt0aWchXG4iCisiXG4iCisKKyM6IGV4X2NtZHMuYzoxNjUzCittc2dpZCAiIyBWYWx1ZSBvZiAnZW5jb2RpbmcnIHdoZW4gdGhpcyBmaWxlIHdhcyB3cml0dGVuXG4iCittc2dzdHIgIiMgVmVyZGllbiBhdiAnZW5jb2RpbmcnIG7lciBkZW5uZSBmaWxlbiBibGUgc2tyZXZldFxuIgorCisjOiBleF9jbWRzLmM6MTc1MgorbXNnaWQgIklsbGVnYWwgc3RhcnRpbmcgY2hhciIKK21zZ3N0ciAiVWxvdmxpZyBzdGFydHRlZ24iCisKKyM6IGV4X2NtZHMuYzoyMDk3IGV4X2NtZHMyLmM6NzYxCittc2dpZCAiU2F2ZSBBcyIKK21zZ3N0ciAiTGFncmUgc29tIgorCisjLiBPdmVyd3JpdGluZyBhIGZpbGUgdGhhdCBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIgaXMgbm90IGEKKyMuICogZ29vZCBpZGVhLgorIzogZXhfY21kcy5jOjIxNDAKK21zZ2lkICJFMTM5OiBGaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciIKK21zZ3N0ciAiRTEzOTogRmlsZW4gZXIgbGFzdGV0IGkgZW4gYW5uZW4gYnVmZmVyIgorCisjOiBleF9jbWRzLmM6MjE3NAorbXNnaWQgIldyaXRlIHBhcnRpYWwgZmlsZT8iCittc2dzdHIgIlNrcml2ZSBkZWx2aXMgZmlsPyIKKworIzogZXhfY21kcy5jOjIxODEKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiRTE0MDogQnJ1ayAhIGZvciDlIHNrcml2ZSBkZWx2aXMgYnVmZmVyIgorCisjOiBleF9jbWRzLmM6MjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGUgZXhpc3RpbmcgZmlsZSBcIiUuKnNcIj8iCittc2dzdHIgIk92ZXJza3JpdmUgZWtzaXN0ZXJlbmRlIGZpbCBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMuYzoyMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDE6IE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTE0MTogTWFuZ2xlciBmaWxuYXZuIGZvciBidWZmZXIgJWxkIgorCisjOiBleF9jbWRzLmM6MjQwNgorbXNnaWQgIkUxNDI6IEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24iCittc2dzdHIgIkUxNDI6IEZpbGVuIGJsZSBpa2tlIGxhZ3JldDogTGFncmluZyBlciBkZWFrdGl2ZXJ0IG1lZCAnd3JpdGUnLXZhbGdldCIKKworIzogZXhfY21kcy5jOjI0MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIidyZWFkb25seScgb3B0aW9uIGlzIHNldCBmb3IgXCIlLipzXCIuXG4iCisiRG8geW91IHdpc2ggdG8gd3JpdGUgYW55d2F5PyIKK21zZ3N0ciAiIgorIidyZWFkb25seSctdmFsZ2V0IGVyIHNhdHQgZm9yIFwiJS4qc1wiLlxuIgorIlZpbCBkdSBsYWdyZSBsaWtldmVsPyIKKworIzogZXhfY21kcy5jOjI1OTkKK21zZ2lkICJFZGl0IEZpbGUiCittc2dzdHIgIlJlZGlnZXIgZmlsIgorCisjOiBleF9jbWRzLmM6MzIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQzOiBBdXRvY29tbWFuZHMgdW5leHBlY3RlZGx5IGRlbGV0ZWQgbmV3IGJ1ZmZlciAlcyIKK21zZ3N0ciAiRTE0MzogQXV0b2tvbW1hbmRvZXIgc2xldHRldCB1dmVudGV0IGRlbiBueWUgYnVmZmVyZW4gJXMiCisKKyM6IGV4X2NtZHMuYzozMzQwCittc2dpZCAiRTE0NDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gOnoiCittc2dzdHIgIkUxNDQ6IElra2UtbnVtZXJpc2sgcGFyYW1ldGVyIHRpbCA6eiIKKworIzogZXhfY21kcy5jOjM0MjUKK21zZ2lkICJFMTQ1OiBTaGVsbCBjb21tYW5kcyBub3QgYWxsb3dlZCBpbiBydmltIgorbXNnc3RyICJFMTQ1OiBTa2FsbGtvbW1hbmRvZXIgZXIgaWtrZSB0aWxsYXR0IGkgcnZpbSIKKworIzogZXhfY21kcy5jOjM1MzIKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiBSZWd1bOZyZSB1dHRyeWtrIGthbiBpa2tlIGJsaSBhZHNraWx0IGF2IGJva3N0YXZlciIKKworIzogZXhfY21kcy5jOjM4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKK21zZ3N0ciAiRXJzdGF0dCBtZWQgJXMgKHkvbi9hL3EvbC9eRS9eWSk/IgorCisjOiBleF9jbWRzLmM6NDI3MQorbXNnaWQgIihJbnRlcnJ1cHRlZCkgIgorbXNnc3RyICIoQXZicnV0dCkgIgorCisjOiBleF9jbWRzLmM6NDI3NQorbXNnaWQgIjEgc3Vic3RpdHV0aW9uIgorbXNnc3RyICIxIGVyc3RhdG5pbmciCisKKyM6IGV4X2NtZHMuYzo0Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICIlbGQgZXJzdGF0bmluZ2VyIgorCisjOiBleF9jbWRzLmM6NDI4MAorbXNnaWQgIiBvbiAxIGxpbmUiCittc2dzdHIgIiBpIDEgbGluamUiCisKKyM6IGV4X2NtZHMuYzo0MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiAlbGQgbGluZXMiCittc2dzdHIgIiBpICVsZCBsaW5qZXIiCisKKyM6IGV4X2NtZHMuYzo0MzMzCittc2dpZCAiRTE0NzogQ2Fubm90IGRvIDpnbG9iYWwgcmVjdXJzaXZlIgorbXNnc3RyICJFMTQ3OiBLYW4gaWtrZSBnavhyZSA6Z2xvYmFsIHJla3Vyc2l2IgorCisjOiBleF9jbWRzLmM6NDM2OAorbXNnaWQgIkUxNDg6IFJlZ3VsYXIgZXhwcmVzc2lvbiBtaXNzaW5nIGZyb20gZ2xvYmFsIgorbXNnc3RyICJFMTQ4OiBSZWd1bOZydCB1dHRyeWtrIG1hbmdsZXIgaSBnbG9iYWwga29tbWFuZG8iCisKKyM6IGV4X2NtZHMuYzo0NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIlP4a2VzdHJlbmcgZnVubmV0IGkgYWxsZSBsaW5qZW5lOiAlcyIKKworIzogZXhfY21kcy5jOjQ0OTgKK21zZ2lkICIiCisiXG4iCisiIyBMYXN0IFN1YnN0aXR1dGUgU3RyaW5nOlxuIgorIiQiCittc2dzdHIgIiIKKyJcbiIKKyIjIFNpc3RlIGVyc3RhdG5pbmdzdGVrc3Q6XG4iCisiJCIKKworIzogZXhfY21kcy5jOjQ1OTkKK21zZ2lkICJFNDc4OiBEb24ndCBwYW5pYyEiCittc2dzdHIgIkU0Nzg6IEluZ2VuIHBhbmlrayEiCisKKyM6IGV4X2NtZHMuYzo0NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NjE6IFNvcnJ5LCBubyAnJXMnIGhlbHAgZm9yICVzIgorbXNnc3RyICJFNjYxOiBEZXNzdmVycmUgaW5nZW4gJyVzJyBoamVscCBmb3IgJXMiCisKKyM6IGV4X2NtZHMuYzo0NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTogRGVzc3ZlcnJlIGluZ2VuIGhqZWxwIGZvciAlcyIKKworIzogZXhfY21kcy5jOjQ2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU29ycnksIGhlbHAgZmlsZSBcIiVzXCIgbm90IGZvdW5kIgorbXNnc3RyICJGYW50IGlra2UgaGplbHBlZmlsZW4gXCIlc1wiIgorCisjOiBleF9jbWRzLmM6NTE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiBFciBpa2tlIGVuIGthdGFsb2c6ICVzIgorCisjOiBleF9jbWRzLmM6NTMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUyOiBDYW5ub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE1MjogS2FuIGlra2Ug5XBuZSAlcyBmb3Igc2tyaXZpbmciCisKKyM6IGV4X2NtZHMuYzo1MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTM6IFVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTUzOiBLYW4gaWtrZSDlcG5lICVzIGZvciBsZXNpbmciCisKKyM6IGV4X2NtZHMuYzo1NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NzA6IE1peCBvZiBoZWxwIGZpbGUgZW5jb2RpbmdzIHdpdGhpbiBhIGxhbmd1YWdlOiAlcyIKK21zZ3N0ciAiRTY3MDogVGVnbnNldHRibGFuZGluZyBpIGhqZWxwZWZpbGVuIGlubmVuZm9yIHNhbW1lIHNwcuVrOiAlcyIKKworIzogZXhfY21kcy5jOjU0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcy8lcyIKK21zZ3N0ciAiRTE1NDogRHVwbGlrYXQtdGFnIFwiJXNcIiBpIGZpbGVuICVzLyVzIgorCisjOiBleF9jbWRzLmM6NTU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYwOiBVbmtub3duIHNpZ24gY29tbWFuZDogJXMiCittc2dzdHIgIkUxNjA6IFVramVudCBza2lsdGtvbW1hbmRvOiAlcyIKKworIzogZXhfY21kcy5jOjU2MTkKK21zZ2lkICJFMTU2OiBNaXNzaW5nIHNpZ24gbmFtZSIKK21zZ3N0ciAiRTE1NjogTWFuZ2xlciBza2lsdG5hdm4iCisKKyM6IGV4X2NtZHMuYzo1NjY1Cittc2dpZCAiRTYxMjogVG9vIG1hbnkgc2lnbnMgZGVmaW5lZCIKK21zZ3N0ciAiRTYxMjogRm9yIG1hbmdlIHNraWx0IGRlZmluZXJ0IgorCisjOiBleF9jbWRzLmM6NTczMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM5OiBJbnZhbGlkIHNpZ24gdGV4dDogJXMiCittc2dzdHIgIkUyMzk6IFVneWxkaWcgc2tpbHR0ZWtzdDogJXMiCisKKyM6IGV4X2NtZHMuYzo1NzY0IGV4X2NtZHMuYzo1OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTU6IFVua25vd24gc2lnbjogJXMiCittc2dzdHIgIkUxNTU6IFVramVudCBza2lsdDogJXMiCisKKyM6IGV4X2NtZHMuYzo1ODEzCittc2dpZCAiRTE1OTogTWlzc2luZyBzaWduIG51bWJlciIKK21zZ3N0ciAiRTE1OTogTWFuZ2xlciBza2lsdG51bW1lciIKKworIzogZXhfY21kcy5jOjU4OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1ODogSW52YWxpZCBidWZmZXIgbmFtZTogJXMiCittc2dzdHIgIkUxNTg6IFVneWxkaWcgYnVmZmVybmF2bjogJXMiCisKKyM6IGV4X2NtZHMuYzo1OTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiBVbG92bGlnIHNraWx0LUlEOiAlbGQiCisKKyM6IGV4X2NtZHMuYzo2MDA0Cittc2dpZCAiIChOT1QgRk9VTkQpIgorbXNnc3RyICIgKElLS0UgRlVOTkVUKSIKKworIzogZXhfY21kcy5jOjYwMDYKK21zZ2lkICIgKG5vdCBzdXBwb3J0ZWQpIgorbXNnc3RyICIgKGlra2Ugc3T4dHRldCkiCisKKyM6IGV4X2NtZHMuYzo2MTA1Cittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJbU2xldHRldF0iCisKKyM6IGV4X2NtZHMyLmM6OTIKK21zZ2lkICJFbnRlcmluZyBEZWJ1ZyBtb2RlLiAgVHlwZSBcImNvbnRcIiB0byBjb250aW51ZS4iCittc2dzdHIgIkflciBpbm4gaSBkZWJ1Z2dpbmdzbW9kdXMuIFNrcml2IFwiY29udFwiIGZvciDlIGZvcnRzZXR0ZS4iCisKKyM6IGV4X2NtZHMyLmM6OTYgZXhfZG9jbWQuYzo5NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6ICVzIgorbXNnc3RyICJsaW5qZSAlbGQ6ICVzIgorCisjOiBleF9jbWRzMi5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNtZDogJXMiCittc2dzdHIgImtvbW1hbmRvOiAlcyIKKworIzogZXhfY21kczIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJlYWtwb2ludCBpbiBcIiVzJXNcIiBsaW5lICVsZCIKK21zZ3N0ciAiU3RvcHB1bmt0IGkgXCIlcyVzXCIgbGluamUgJWxkIgorCisjOiBleF9jbWRzMi5jOjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYxOiBCcmVha3BvaW50IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUxNjE6IEZhbnQgaWtrZSBzdG9wcHVua3Q6ICVzIgorCisjOiBleF9jbWRzMi5jOjU2NgorbXNnaWQgIk5vIGJyZWFrcG9pbnRzIGRlZmluZWQiCittc2dzdHIgIkluZ2VuIHN0b3BwdW5rdCBkZWZpbmVydCIKKworIzogZXhfY21kczIuYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgIGxpbmplICVsZCIKKworIzogZXhfY21kczIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZSBjaGFuZ2VzIHRvIFwiJS4qc1wiPyIKK21zZ3N0ciAiTGFncmUgZm9yYW5kcmluZ2VyIHRpbCBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMyLmM6Nzg4IGV4X2RvY21kLmM6OTQwNworbXNnaWQgIlVudGl0bGVkIgorbXNnc3RyICJVdGVuIG5hdm4iCisKKyM6IGV4X2NtZHMyLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiBJa2tlIGxhZ3JldCBzaWRlbiBzaXN0ZSBmb3JhbmRyaW5nZXIgaSBidWZmZXJlbiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6OTg0Cittc2dpZCAiV2FybmluZzogRW50ZXJlZCBvdGhlciBidWZmZXIgdW5leHBlY3RlZGx5IChjaGVjayBhdXRvY29tbWFuZHMpIgorbXNnc3RyICJBZHZhcnNlbDogR2lrayB1dmVudGV0IGlubiBpIGVuIGFubmVuIGJ1ZmZlciAoc2pla2sgYXV0b2tvbW1hbmRvZXIpIgorCisjOiBleF9jbWRzMi5jOjEzODcKK21zZ2lkICJFMTYzOiBUaGVyZSBpcyBvbmx5IG9uZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNjM6IERldCBlciBiYXJlIGVuIGZpbCDlIHJlZGlnZXJlIgorCisjOiBleF9jbWRzMi5jOjEzODkKK21zZ2lkICJFMTY0OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGZpbGUiCittc2dzdHIgIkUxNjQ6IEthbiBpa2tlIGflIGZvcmJpIGb4cnN0ZSBmaWwiCisKKyM6IGV4X2NtZHMyLmM6MTM5MQorbXNnaWQgIkUxNjU6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBmaWxlIgorbXNnc3RyICJFMTY1OiBLYW4gaWtrZSBn5SBmb3JiaSBzaXN0ZSBmaWwiCisKKyM6IGV4X2NtZHMyLmM6MTgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY2OiBjb21waWxlciBub3Qgc3VwcG9ydGVkOiAlcyIKK21zZ3N0ciAiRTY2NjogS29tcGlsYXRvcmVuIGVyIGlra2Ugc3T4dHRldDogJXMiCisKKyM6IGV4X2NtZHMyLmM6MTkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiCittc2dzdHIgIlP4a2VyIGV0dGVyIFwiJXNcIiBpIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIgorbXNnc3RyICJT+GtlciBldHRlciBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorbXNnc3RyICJpa2tlIGZ1bm5ldCBpICdydW50aW1lcGF0aCc6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTc5Cittc2dpZCAiU291cmNlIFZpbSBzY3JpcHQiCittc2dzdHIgIktq+HIgVmltLXNrcmlwdCIKKworIzogZXhfY21kczIuYzoyMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAiS2FuIGlra2Uga2r4cmUgZW4ga2F0YWxvZzogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgImt1bm5lIGlra2Uga2r4cmUgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IGNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICJsaW5qZSAlbGQ6IEt1bm5lIGlra2Uga2r4cmUgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJravhyZXIgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IHNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAibGluamUgJWxkOiBravhyZXIgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc291cmNpbmcgJXMiCittc2dzdHIgImZlcmRpZyBtZWQga2r4cmluZyBhdiAlcyIKKworIzogZXhfY21kczIuYzoyNzEyCittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIlcxNTogQWR2YXJzZWw6IEZlaWwgbGluamVzZXBhcmF0b3IsIGRldCBlciBtdWxpZyBeTSBtYW5nbGVyIgorCisjOiBleF9jbWRzMi5jOjI3NjEKK21zZ2lkICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgYnJ1a3QgdXRlbmZvciBlbiBravhydCBmaWwiCisKKyM6IGV4X2NtZHMyLmM6Mjc5NAorbXNnaWQgIkUxNjg6IDpmaW5pc2ggdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY4OiA6ZmluaXNoIGJydWt0IHV0ZW5mb3IgZW4ga2r4cnQgZmlsIgorCisjOiBleF9jbWRzMi5jOjMyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFnZSAlZCIKK21zZ3N0ciAiU2lkZSAlZCIKKworIzogZXhfY21kczIuYzozMzk5Cittc2dpZCAiTm8gdGV4dCB0byBiZSBwcmludGVkIgorbXNnc3RyICJJbmdlbiB0ZWtzdCBmb3IgdXRza3JpZnQiCisKKyM6IGV4X2NtZHMyLmM6MzQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyBwYWdlICVkICglZCUlKSIKK21zZ3N0ciAiU2tyaXZlciB1dCBzaWRlICVkICglZCUlKSIKKworIzogZXhfY21kczIuYzozNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBDb3B5ICVkIG9mICVkIgorbXNnc3RyICIgS29waSAlZCBhdiAlZCIKKworIzogZXhfY21kczIuYzozNTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50ZWQ6ICVzIgorbXNnc3RyICJTa3JldmV0IHV0OiAlcyIKKworIzogZXhfY21kczIuYzozNTU0Cittc2dpZCAiUHJpbnRpbmcgYWJvcnRlZCIKK21zZ3N0ciAiVXRza3JpZnQgYXZicnV0dCIKKworIzogZXhfY21kczIuYzozOTE5Cittc2dpZCAiRTQ1NTogRXJyb3Igd3JpdGluZyB0byBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFNDU1OiBGZWlsIHVuZGVyIHNrcml2aW5nIHRpbCBQb3N0c2NyaXB0LWZpbCIKKworIzogZXhfY21kczIuYzo0MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjQ6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU2MjQ6IEthbiBpa2tlIOVwbmUgZmlsZW4gXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQyMDQgZXhfY21kczIuYzo0ODI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTc6IENhbid0IHJlYWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NzogS2FuIGlra2UgbGVzZSBQb3N0c2NyaXB0LXJlc3N1cnNmaWwgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxODogZmlsZSBcIiVzXCIgaXMgbm90IGEgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE4OiBGaWxlbiBcIiVzXCIgZXIgaWtrZSBlbiBQb3N0c2NyaXB0LXJlc3N1cnNmaWwiCisKKyM6IGV4X2NtZHMyLmM6NDIyNyBleF9jbWRzMi5jOjQyNDcgZXhfY21kczIuYzo0MjYyIGV4X2NtZHMyLmM6NDI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE5OiBmaWxlIFwiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE5OiBEZXQgZXIgaWtrZSBzdPh0dGUgZm9yIFBvc3RzY3JpcHQtcmVzc3Vyc2ZpbGVuIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjE6IFwiJXNcIiByZXNvdXJjZSBmaWxlIGhhcyB3cm9uZyB2ZXJzaW9uIgorbXNnc3RyICJFNjIxOiBSZXNzdXJzZmlsZW4gXCIlc1wiIGVyIGZlaWwgdmVyc2pvbiIKKworIzogZXhfY21kczIuYzo0NzgxCittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiBLYW4gaWtrZSDlcG5lIFBvc3RzY3JpcHQtZmlsIGZvciBza3JpdmluZyIKKworIzogZXhfY21kczIuYzo0ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTY6IEthbiBpa2tlIOVwbmUgZmlsZW4gXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ5MzMKK21zZ2lkICJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcInByb2xvZy5wc1wiIgorbXNnc3RyICJFNDU2OiBGYW50IGlra2UgUG9zdHNjcmlwdC1yZXNzdXJzZmlsZW4gXCJwcm9sb2cucHNcIiIKKworIzogZXhfY21kczIuYzo0OTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXMucHNcIiIKK21zZ3N0ciAiRTQ1NjogRmFudCBpa2tlIFBvc3RzY3JpcHQtcmVzc3Vyc2ZpbGVuIFwiJXMucHNcIiIKKworIzogZXhfY21kczIuYzo0OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjA6IFVuYWJsZSB0byBjb252ZXJ0IGZyb20gbXVsdGktYnl0ZSB0byBcIiVzXCIgZW5jb2RpbmciCittc2dzdHIgIkU2MjA6IEtsYXJ0ZSBpa2tlIGtvbnZlcnRlcmUgZnJhIG11bHRpYnl0ZSB0aWwgXCIlc1wiLXRlZ25zZXR0IgorCisjOiBleF9jbWRzMi5jOjUxMDcKK21zZ2lkICJTZW5kaW5nIHRvIHByaW50ZXIuLi4iCittc2dzdHIgIlNlbmRlciB0aWwgc2tyaXZlcqAuLi4iCisKKyM6IGV4X2NtZHMyLmM6NTExMQorbXNnaWQgIkUzNjU6IEZhaWxlZCB0byBwcmludCBQb3N0U2NyaXB0IGZpbGUiCittc2dzdHIgIkUzNjU6IEZlaWwgdW5kZXIgdXRza3JpZnQgYXYgUG9zdHNjcmlwdC1maWwiCisKKyM6IGV4X2NtZHMyLmM6NTExMworbXNnaWQgIlByaW50IGpvYiBzZW50LiIKK21zZ3N0ciAiU2tyaXZlcmpvYmIgc2VuZHQuIgorCisjOiBleF9jbWRzMi5jOjU2MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCAlc2xhbmd1YWdlOiBcIiVzXCIiCittc2dzdHIgIk7lduZyZW5kZSAlc3NwcuVrOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTk3OiBDYW5ub3Qgc2V0IGxhbmd1YWdlIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTE5NzogS2FuIGlra2Ugc2V0dGUgc3By5WsgdGlsIFwiJXNcIiIKKworIzogZXhfZG9jbWQuYzo1MjUKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAiR+VyIGlubiBpIEV4LW1vZHVzLiBTa3JpdiBcInZpc3VhbFwiIGZvciDlIGflIHRpbCBub3JtYWxtb2R1cy4iCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjU2MQorbXNnaWQgIkU1MDE6IEF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJFNTAxOiBWZWQgc2x1dHRlbiBhdiBmaWxlbiIKKworIzogZXhfZG9jbWQuYzo2NzAKK21zZ2lkICJFMTY5OiBDb21tYW5kIHRvbyByZWN1cnNpdmUiCittc2dzdHIgIkUxNjk6IEtvbW1hbmRvIGFsdGZvciByZWt1cnNpdiIKKworIzogZXhfZG9jbWQuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDU6IEV4Y2VwdGlvbiBub3QgY2F1Z2h0OiAlcyIKK21zZ3N0ciAiRTYwNTogVW5udGFrIGlra2UgZmFuZ2V0IG9wcDogJXMiCisKKyM6IGV4X2RvY21kLmM6MTMyMAorbXNnaWQgIkVuZCBvZiBzb3VyY2VkIGZpbGUiCittc2dzdHIgIlNsdXR0IHDlIGtq+HJ0IGZpbCIKKworIzogZXhfZG9jbWQuYzoxMzIxCittc2dpZCAiRW5kIG9mIGZ1bmN0aW9uIgorbXNnc3RyICJTbHV0dCBw5SBmdW5rc2pvbiIKKworIzogZXhfZG9jbWQuYzoxOTEwCittc2dpZCAiRTQ2NDogQW1iaWd1b3VzIHVzZSBvZiB1c2VyLWRlZmluZWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ2NDogRmxlcnR5ZGlnIGJydWsgYXYgYnJ1a2VyZGVmaW5lcnQga29tbWFuZG8iCisKKyM6IGV4X2RvY21kLmM6MTkyNAorbXNnaWQgIkU0OTI6IE5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAiRTQ5MjogRXIgaWtrZSBlbiBlZGl0b3Jrb21tYW5kbyIKKworIzogZXhfZG9jbWQuYzoyMDMxCittc2dpZCAiRTQ5MzogQmFja3dhcmRzIHJhbmdlIGdpdmVuIgorbXNnc3RyICJFNDkzOiBPbXLlZGUgYmFrb3ZlciBlciBhbmdpdHQiCisKKyM6IGV4X2RvY21kLmM6MjA0MAorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiwgT0sgdG8gc3dhcCIKK21zZ3N0ciAiT21y5WRlIGJha292ZXIgZXIgYW5naXR0LCBPSyDlIHN3YXBwZSIKKworIzogZXhfZG9jbWQuYzoyMTYzCittc2dpZCAiRTQ5NDogVXNlIHcgb3Igdz4+IgorbXNnc3RyICJFNDk0OiBCcnVrIHcgZWxsZXIgdz4+IgorCisjOiBleF9kb2NtZC5jOjM3ODkKK21zZ2lkICJFMzE5OiBTb3JyeSwgdGhlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUzMTk6IEtvbW1hbmRvZW4gZXIgaWtrZSB0aWxnamVuZ2VsaWcgaSBkZW5uZSB2ZXJzam9uZW4iCisKKyM6IGV4X2RvY21kLmM6Mzk5MgorbXNnaWQgIkUxNzI6IE9ubHkgb25lIGZpbGUgbmFtZSBhbGxvd2VkIgorbXNnc3RyICJFMTcyOiBCYXJlIGV0dCBmaWxuYXZuIHRpbGxhdHQiCisKKyM6IGV4X2RvY21kLmM6NDU3MgorbXNnaWQgIjEgbW9yZSBmaWxlIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIjEgYW5uZW4gZmlsIOUgcmVkaWdlcmUuIEF2c2x1dHQgbGlrZXZlbD8iCisKKyM6IGV4X2RvY21kLmM6NDU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBtb3JlIGZpbGVzIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIiVkIGFuZHJlIGZpbGVyIOUgcmVkaWdlcmUuIEF2c2x1dHQgbGlrZXZlbD8iCisKKyM6IGV4X2RvY21kLmM6NDU4MgorbXNnaWQgIkUxNzM6IDEgbW9yZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6IDEgYW5uZW4gZmlsIOUgcmVkaWdlcmUiCisKKyM6IGV4X2RvY21kLmM6NDU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiAlbGQgYW5kcmUgZmlsZXIg5SByZWRpZ2VyZSIKKworIzogZXhfZG9jbWQuYzo0Njc5Cittc2dpZCAiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogYWRkICEgdG8gcmVwbGFjZSBpdCIKK21zZ3N0ciAiRTE3NDogS29tbWFuZG9lbiBmaW5uZXMgYWxsZXJlZGU6IExlZ2cgdGlsICEgZm9yIOUgZXJzdGF0dGUgZGVuIgorCisjOiBleF9kb2NtZC5jOjQ3OTAKK21zZ2lkICIiCisiXG4iCisiICAgIE5hbWUgICAgICAgIEFyZ3MgUmFuZ2UgQ29tcGxldGUgIERlZmluaXRpb24iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgTmF2biAgICAgICAgUHJtLiBPbXLlZCBGdWxsZvhyICAgRGVmaW5lcmluZyIKKworIzogZXhfZG9jbWQuYzo0ODc5Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICJJbmdlbiBicnVrZXJkZWZpbmVydGUga29tbWFuZG9lciBmdW5uZXQiCisKKyM6IGV4X2RvY21kLmM6NDkxMQorbXNnaWQgIkUxNzU6IE5vIGF0dHJpYnV0ZSBzcGVjaWZpZWQiCittc2dzdHIgIkUxNzU6IEluZ2VuIGF0dHJpYnV0dCBzcGVzaWZpc2VydCIKKworIzogZXhfZG9jbWQuYzo0OTYzCittc2dpZCAiRTE3NjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJFMTc2OiBVZ3lsZGlnIGFudGFsbCBwYXJhbWV0ZXJlIgorCisjOiBleF9kb2NtZC5jOjQ5NzgKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiBBbnRhbGwgcmVwZXRlcmluZ2VyIGthbiBpa2tlIGJsaSBzcGVzaWZpc2VydCB0byBnYW5nZXIiCisKKyM6IGV4X2RvY21kLmM6NDk4OAorbXNnaWQgIkUxNzg6IEludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgY291bnQiCittc2dzdHIgIkUxNzg6IFVneWxkaWcgc3RhbmRhcmR2ZXJkaSBmb3IgYW50YWxsIHJlcGV0ZXJpbmdlciIKKworIzogZXhfZG9jbWQuYzo1MDE5Cittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiBUcmVuZ2VyIHBhcmFtZXRlciB0aWwgXCJjb21wbGV0ZVwiIgorCisjOiBleF9kb2NtZC5jOjUwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MDogSW52YWxpZCBjb21wbGV0ZSB2YWx1ZTogJXMiCittc2dzdHIgIkUxODA6IFVneWxkaWcgXCJjb21wbGV0ZVwiLXZlcmRpOiAlcyIKKworIzogZXhfZG9jbWQuYzo1MDYwCittc2dpZCAiRTQ2ODogQ29tcGxldGlvbiBhcmd1bWVudCBvbmx5IGFsbG93ZWQgZm9yIGN1c3RvbSBjb21wbGV0aW9uIgorbXNnc3RyICJFNDY4OiBGdWxsZvhyaW5nc3BhcmFtZXRlciBlciBiYXJlIHRpbGxhdHQgZm9yIHRpbHBhc3NldCBmdWxsZvhyaW5nIgorCisjOiBleF9kb2NtZC5jOjUwNjYKK21zZ2lkICJFNDY3OiBDdXN0b20gY29tcGxldGlvbiByZXF1aXJlcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IgorbXNnc3RyICJFNDY3OiBUaWxwYXNzZWRlIGZ1bGxm+HJpbmdlciB0cmVuZ2VyIGV0IGZ1bmtzam9uc3BhcmFtZXRlciIKKworIzogZXhfZG9jbWQuYzo1MDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MTogVWd5bGRpZyBhdHRyaWJ1dHQ6ICVzIgorCisjOiBleF9kb2NtZC5jOjUxMjAKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4MjogVWd5bGRpZyBrb21tYW5kb25hdm4iCisKKyM6IGV4X2RvY21kLmM6NTEzNQorbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4MzogQnJ1a2VyZGVmaW5lcnRlIGtvbW1hbmRvZXIgbeUgaGEgc3RvciBmb3Jib2tzdGF2IgorCisjOiBleF9kb2NtZC5jOjUyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NDogTm8gc3VjaCB1c2VyLWRlZmluZWQgY29tbWFuZDogJXMiCittc2dzdHIgIkUxODQ6IEJydWtlcmRlZmluZXJ0IGtvbW1hbmRvIGZpbm5lcyBpa2tlOiAlcyIKKworIzogZXhfZG9jbWQuYzo1NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTogS2FuIGlra2UgZmlubmUgZmFyZ2VvcHBzZXR0ZXQgJXMiCisKKyM6IGV4X2RvY21kLmM6NTY3NQorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICJW5nIgaGlsc2V0LCBWaW0tYnJ1a2VyISIKKworIzogZXhfZG9jbWQuYzo2Mzk2Cittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgIlJlZGlnZXIgZmlsIGkgbnl0dCB2aW5kdSIKKworIzogZXhfZG9jbWQuYzo2Njk3Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICJJbmdlbiBzd2FwZmlsIgorCisjOiBleF9kb2NtZC5jOjY4MDEKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAiTGVnZyB0aWwgZmlsIgorCisjOiBleF9kb2NtZC5jOjY4NjUKK21zZ2lkICJFMTg2OiBObyBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkUxODY6IEluZ2VuIHRpZGxpZ2VyZSBrYXRhbG9nIgorCisjOiBleF9kb2NtZC5jOjY5NDcKK21zZ2lkICJFMTg3OiBVbmtub3duIgorbXNnc3RyICJFMTg3OiBVa2plbnQiCisKKyM6IGV4X2RvY21kLmM6NzAzMgorbXNnaWQgIkU0NjU6IDp3aW5zaXplIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY1OiA6d2luc2l6ZSB0cmVuZ2VyIHRvIG51bWVyaXNrZSBwYXJhbWV0ZXJlIgorCisjOiBleF9kb2NtZC5jOjcwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2luZG93IHBvc2l0aW9uOiBYICVkLCBZICVkIgorbXNnc3RyICJWaW5kdXNwb3Npc2pvbjogWCAlZCwgWSAlZCIKKworIzogZXhfZG9jbWQuYzo3MDkzCittc2dpZCAiRTE4ODogT2J0YWluaW5nIHdpbmRvdyBwb3NpdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIiIKKyJFMTg4OiBMZXNpbmcgYXYgdmluZHVzcG9zaXNqb24gZXIgaWtrZSBpbXBsZW1lbnRlcnQgcOUgZGVubmUgcGxhdHRmb3JtZW4iCisKKyM6IGV4X2RvY21kLmM6NzEwMworbXNnaWQgIkU0NjY6IDp3aW5wb3MgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiCittc2dzdHIgIkU0NjY6IDp3aW5wb3MgdHJlbmdlciB0byBudW1lcmlza2UgcGFyYW1ldGVyZSIKKworIzogZXhfZG9jbWQuYzo3MzgxCittc2dpZCAiU2F2ZSBSZWRpcmVjdGlvbiIKK21zZ3N0ciAiTGFncmUgb21kaXJpZ2VyaW5nIgorCisjOiBleF9kb2NtZC5jOjc1NzEKK21zZ2lkICJTYXZlIFZpZXciCittc2dzdHIgIkxhZ3JlIHV0c2VlbmRlIgorCisjOiBleF9kb2NtZC5jOjc1NzIKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIkxhZ3JlIPhrdCIKKworIzogZXhfZG9jbWQuYzo3NTc0Cittc2dpZCAiU2F2ZSBTZXR1cCIKK21zZ3N0ciAiTGFncmUgb3Bwc2V0dCIKKworIzogZXhfZG9jbWQuYzo3NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODk6IFwiJXNcIiBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTE4OTogXCIlc1wiIGZpbm5lcyAobGVnZyB0aWwgISBmb3Ig5SBvdmVyc3R5cmUpIgorCisjOiBleF9kb2NtZC5jOjc3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5MDogQ2Fubm90IG9wZW4gXCIlc1wiIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTkwOiBLYW4gaWtrZSDlcG5lIFwiJXNcIiBmb3Igc2tyaXZpbmciCisKKyMuIHNldCBtYXJrCisjOiBleF9kb2NtZC5jOjc3NTUKK21zZ2lkICJFMTkxOiBBcmd1bWVudCBtdXN0IGJlIGEgbGV0dGVyIG9yIGZvcndhcmQvYmFja3dhcmQgcXVvdGUiCittc2dzdHIgIkUxOTE6IFBhcmFtZXRlciBt5SB25nJlIGVuIGJva3N0YXYgZWxsZXIgdmFubGlnL2Jha2xlbmdzIGFwb3N0cm9mIgorCisjOiBleF9kb2NtZC5jOjc3OTcKK21zZ2lkICJFMTkyOiBSZWN1cnNpdmUgdXNlIG9mIDpub3JtYWwgdG9vIGRlZXAiCittc2dzdHIgIkUxOTI6IFJla3Vyc2l2IGJydWsgYXYgOm5vcm1hbCBlciBmb3IgZHlwIgorCisjOiBleF9kb2NtZC5jOjgzMTUKK21zZ2lkICJFMTk0OiBObyBhbHRlcm5hdGUgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yICcjJyIKK21zZ3N0ciAiRTE5NDogSW5nZW4gYWx0ZXJuYXRpdmUgZmlsbmF2biB0aWxnamVuZ2VsaWcgc29tIGVyc3RhdG5pbmcgZm9yICcjJyIKKworIzogZXhfZG9jbWQuYzo4MzQ2Cittc2dpZCAiRTQ5NTogbm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIgorbXNnc3RyICIiCisiRTQ5NTogSW5nZW4gYXV0b2tvbW1hbmRvZmlsbmF2biB0aWxnamVuZ2VsaWcgc29tIGVyc3RhdG5pbmcgZm9yIFwiPGFmaWxlPlwiIgorCisjOiBleF9kb2NtZC5jOjgzNTQKK21zZ2lkICJFNDk2OiBubyBhdXRvY29tbWFuZCBidWZmZXIgbnVtYmVyIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFidWY+XCIiCittc2dzdHIgIiIKKyJFNDk2OiBJbmdlbiBidWZmZXJudW1tZXIgdGlsZ2plbmdlbGlnIHNvbSBlcnN0YXRuaW5nIGZvciBcIjxhYnVmPlwiIGkgIgorImF1dG9rb21tYW5kbyIKKworIzogZXhfZG9jbWQuYzo4MzY1Cittc2dpZCAiRTQ5Nzogbm8gYXV0b2NvbW1hbmQgbWF0Y2ggbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhbWF0Y2g+XCIiCittc2dzdHIgIiIKKyJFNDk3OiBJbmdlbiBhdXRva29tbWFuZG9uYXZuIHRpbGdqZW5nZWxpZyBzb20gZXJzdGF0bmluZyBmb3IgXCI8YW1hdGNoPlwiIgorCisjOiBleF9kb2NtZC5jOjgzNzUKK21zZ2lkICJFNDk4OiBubyA6c291cmNlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxzZmlsZT5cIiIKK21zZ3N0ciAiIgorIkU0OTg6IEluZ2VuICc6c291cmNlJy1maWxuYXZuIHRpbGdqZW5nZWxpZyBzb20gZXJzdGF0bmluZyBmb3IgXCI8c2ZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6ODQxNgorIywgbm8tYy1mb3JtYXQKK21zZ2lkICJFNDk5OiBFbXB0eSBmaWxlIG5hbWUgZm9yICclJyBvciAnIycsIG9ubHkgd29ya3Mgd2l0aCBcIjpwOmhcIiIKK21zZ3N0ciAiRTQ5OTogVG9tdCBmaWxuYXZuIGZvciAnJScgZWxsZXIgJyMnLCB2aXJrZXIgYmFyZSBtZWQgXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6ODQxOAorbXNnaWQgIkU1MDA6IEV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1MDA6IFJlc3VsdGVyZXIgaSBlbiB0b20gc3RyZW5nIgorCisjOiBleF9kb2NtZC5jOjkzODkKK21zZ2lkICJFMTk1OiBDYW5ub3Qgb3BlbiB2aW1pbmZvIGZpbGUgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxOTU6IEthbiBpa2tlIOVwbmUgdmltaW5mby1maWwgZm9yIGxlc2luZyIKKworIzogZXhfZG9jbWQuYzo5NTYyCittc2dpZCAiRTE5NjogTm8gZGlncmFwaHMgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMTk2OiBJbmdlbiBzcGVzaWFsdGVnbiBpIGRlbm5lIHZlcnNqb25lbiIKKworIzogZXhfZXZhbC5jOjQ0MAorbXNnaWQgIkU2MDg6IENhbm5vdCA6dGhyb3cgZXhjZXB0aW9ucyB3aXRoICdWaW0nIHByZWZpeCIKK21zZ3N0ciAiRTYwODogS2FuIGlra2UgOnRocm93IHVubnRhayBtZWQgJ1ZpbSctZm9yc3RhdmVsc2UiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjUyOQorIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJFeGNlcHRpb24gdGhyb3duOiAlcyIKKyN+IG1zZ3N0ciAiIgorCisjOiBleF9ldmFsLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBmaW5pc2hlZDogJXMiCittc2dzdHIgIlVubnRhayBmdWxsZvhydDogJXMiCisKKyM6IGV4X2V2YWwuYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGRpc2NhcmRlZDogJXMiCittc2dzdHIgIlVubnRhayBmb3JrYXN0ZXQ6ICVzIgorCisjOiBleF9ldmFsLmM6NjIwIGV4X2V2YWwuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIGxpbmUgJWxkIgorbXNnc3RyICIlcywgbGluamUgJWxkIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV4X2V2YWwuYzo2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGNhdWdodDogJXMiCittc2dzdHIgIlVubnRhayBmYW5nZXQgb3BwOiAlcyIKKworIzogZXhfZXZhbC5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtYWRlIHBlbmRpbmciCittc2dzdHIgIiVzIHNhdHQgcOUgdmVudGluZyIKKworIzogZXhfZXZhbC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXN1bWVkIgorbXNnc3RyICIlcyBnamVub3BwdGF0dCIKKworIzogZXhfZXZhbC5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNjYXJkZWQiCittc2dzdHIgIiVzIGZvcmthc3RldCIKKworIzogZXhfZXZhbC5jOjc0NgorbXNnaWQgIkV4Y2VwdGlvbiIKK21zZ3N0ciAiVW5udGFrIgorCisjOiBleF9ldmFsLmM6NzUyCittc2dpZCAiRXJyb3IgYW5kIGludGVycnVwdCIKK21zZ3N0ciAiRmVpbCBvZyBhdmJydWRkIgorCisjOiBleF9ldmFsLmM6NzU0IGd1aS5jOjQzODQKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiRmVpbCIKKworIy4gaWYgKHBlbmRpbmcgJiBDU1RQX0lOVEVSUlVQVCkKKyM6IGV4X2V2YWwuYzo3NTYKK21zZ2lkICJJbnRlcnJ1cHQiCittc2dzdHIgIkF2YnJ1ZGQiCisKKyM6IGV4X2V2YWwuYzo4MzAKK21zZ2lkICJFNTc5OiA6aWYgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTU3OTogTvhzdGluZyBhdiA6aWYgZm9yIGR5cCIKKworIzogZXhfZXZhbC5jOjg2NworbXNnaWQgIkU1ODA6IDplbmRpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MDogOmVuZGlmIHV0ZW4gOmlmIgorCisjOiBleF9ldmFsLmM6OTExCittc2dpZCAiRTU4MTogOmVsc2Ugd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODE6IDplbHNlIHV0ZW4gOmlmIgorCisjOiBleF9ldmFsLmM6OTE0Cittc2dpZCAiRTU4MjogOmVsc2VpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MjogOmVsc2VpZiB1dGVuIDppZiIKKworIzogZXhfZXZhbC5jOjkyMQorbXNnaWQgIkU1ODM6IG11bHRpcGxlIDplbHNlIgorbXNnc3RyICJFNTgzOiBGbGVyZSBmb3Jla29tc3RlciBhdiA6ZWxzZSIKKworIzogZXhfZXZhbC5jOjkyNAorbXNnaWQgIkU1ODQ6IDplbHNlaWYgYWZ0ZXIgOmVsc2UiCittc2dzdHIgIkU1ODQ6IDplbHNlaWYgZXR0ZXIgOmVsc2UiCisKKyM6IGV4X2V2YWwuYzo5OTEKK21zZ2lkICJFNTg1OiA6d2hpbGUgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTU4NTogTvhzdGluZyBhdiA6d2hpbGUgZm9yIGR5cCIKKworIzogZXhfZXZhbC5jOjEwNDcKK21zZ2lkICJFNTg2OiA6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODY6IDpjb250aW51ZSB1dGVuIDp3aGlsZSIKKworIzogZXhfZXZhbC5jOjEwODcKK21zZ2lkICJFNTg3OiA6YnJlYWsgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODc6IDpicmVhayB1dGVuIDp3aGlsZSIKKworIzogZXhfZXZhbC5jOjEyODYKK21zZ2lkICJFNjAxOiA6dHJ5IG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU2MDE6IE74c3RpbmcgYXYgOnRyeSBmb3IgZHlwIgorCisjOiBleF9ldmFsLmM6MTM2NgorbXNnaWQgIkU2MDM6IDpjYXRjaCB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDM6IDpjYXRjaCB1dGVuIDp0cnkiCisKKyMuIEdpdmUgdXAgZm9yIGEgIjpjYXRjaCIgYWZ0ZXIgIjpmaW5hbGx5IiBhbmQgaWdub3JlIGl0LgorIy4gKiBKdXN0IHBhcnNlLgorIzogZXhfZXZhbC5jOjEzODgKK21zZ2lkICJFNjA0OiA6Y2F0Y2ggYWZ0ZXIgOmZpbmFsbHkiCittc2dzdHIgIkU2MDQ6IDpjYXRjaCBldHRlciA6ZmluYWxseSIKKworIzogZXhfZXZhbC5jOjE1MjEKK21zZ2lkICJFNjA2OiA6ZmluYWxseSB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDY6IDpmaW5hbGx5IHV0ZW4gOnRyeSIKKworIy4gR2l2ZSB1cCBmb3IgYSBtdWx0aXBsZSAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjOiBleF9ldmFsLmM6MTU0NQorbXNnaWQgIkU2MDc6IG11bHRpcGxlIDpmaW5hbGx5IgorbXNnc3RyICJFNjA3OiBGbGVyZSBmb3Jla29tc3RlciBhdiA6ZmluYWxseSIKKworIzogZXhfZXZhbC5jOjE2NTQKK21zZ2lkICJFNjAyOiA6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIKK21zZ3N0ciAiRTYwMjogOmVuZHRyeSB1dGVuIDp0cnkiCisKKyM6IGV4X2V2YWwuYzoxOTg2Cittc2dpZCAiRTE5MzogOmVuZGZ1bmN0aW9uIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTE5MzogOmVuZGZ1bmN0aW9uIGVyIGlra2UgaW5uZW5mb3IgZW4gZnVua3Nqb24iCisKKyM6IGV4X2dldGxuLmM6MzI5OQorbXNnaWQgInRhZ25hbWUiCittc2dzdHIgIm5hdm4gcOUgdGFnIgorCisjOiBleF9nZXRsbi5jOjMzMDIKKyN+IG1zZ2lkICIga2luZCBmaWxlXG4iCisjfiBtc2dzdHIgIiIKKworIzogZXhfZ2V0bG4uYzo0NzY4Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICInaGlzdG9yeSctdmFsZ2V0IGVyIG51bGwiCisKKyM6IGV4X2dldGxuLmM6NTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyAlcyBIaXN0b3J5IChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgJXMtaGlzdG9yaWUgKG55ZXN0ZSB0aWwgZWxkc3RlKTpcbiIKKworIzogZXhfZ2V0bG4uYzo1MDQwCittc2dpZCAiQ29tbWFuZCBMaW5lIgorbXNnc3RyICJLb21tYW5kb2xpbmplIgorCisjOiBleF9nZXRsbi5jOjUwNDEKK21zZ2lkICJTZWFyY2ggU3RyaW5nIgorbXNnc3RyICJT+Gtlc3RyZW5nIgorCisjOiBleF9nZXRsbi5jOjUwNDIKK21zZ2lkICJFeHByZXNzaW9uIgorbXNnc3RyICJVdHRyeWtrIgorCisjOiBleF9nZXRsbi5jOjUwNDMKK21zZ2lkICJJbnB1dCBMaW5lIgorbXNnc3RyICJJbm5kYXRhbGluamUiCisKKyM6IGV4X2dldGxuLmM6NTA4MQorbXNnaWQgIkUxOTg6IGNtZF9wY2hhciBiZXlvbmQgdGhlIGNvbW1hbmQgbGVuZ3RoIgorbXNnc3RyICJFMTk4OiBjbWRfcGNoYXIgdXRlbmZvciBrb21tYW5kb2xlbmdkZW4iCisKKyM6IGV4X2dldGxuLmM6NTI1OAorbXNnaWQgIkUxOTk6IEFjdGl2ZSB3aW5kb3cgb3IgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIkUxOTk6IEFrdGl2dCB2aW5kdSBlbGxlciBidWZmZXIgc2xldHRldCIKKworIzogZmlsZWlvLmM6Mzc4Cittc2dpZCAiSWxsZWdhbCBmaWxlIG5hbWUiCittc2dzdHIgIlVsb3ZsaWcgZmlsbmF2biIKKworIzogZmlsZWlvLmM6NDAyIGZpbGVpby5jOjU0MCBmaWxlaW8uYzoyOTI1IGZpbGVpby5jOjI5NjYKK21zZ2lkICJpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiZXIgZW4ga2F0YWxvZyIKKworIzogZmlsZWlvLmM6NDA0Cittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAiZXIgaWtrZSBlbiBmaWwiCisKKyM6IGZpbGVpby5jOjU2MiBmaWxlaW8uYzo0MTQzCittc2dpZCAiW05ldyBGaWxlXSIKK21zZ3N0ciAiW055IGZpbF0iCisKKyM6IGZpbGVpby5jOjU5NQorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIltUaWxnYW5nIG5la3RldF0iCisKKyM6IGZpbGVpby5jOjcwNgorbXNnaWQgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtYWRlIHRoZSBmaWxlIHVucmVhZGFibGUiCittc2dzdHIgIkUyMDA6IFwiKlJlYWRQcmVcIi1hdXRva29tbWFuZG9lciBnam9yZGUgZmlsZW4gdWxlc2VsaWciCisKKyM6IGZpbGVpby5jOjcwOAorbXNnaWQgIkUyMDE6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUyMDE6IFwiKlJlYWRQcmVcIi1hdXRva29tbWFuZG9lciBt5SBpa2tlIGZvcmFuZHJlIG7lduZyZW5kZSBidWZmZXIiCisKKyM6IGZpbGVpby5jOjcyOQorbXNnaWQgIlZpbTogUmVhZGluZyBmcm9tIHN0ZGluLi4uXG4iCittc2dzdHIgIlZpbTogTGVzZXIgZnJhIHN0ZGluoC4uLlxuIgorCisjOiBmaWxlaW8uYzo3MzUKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIkxlc2VyIGZyYSBzdGRpbqAuLi4iCisKKyMuIFJlLW9wZW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgZmFpbGVkIQorIzogZmlsZWlvLmM6MTAxMgorbXNnaWQgIkUyMDI6IENvbnZlcnNpb24gbWFkZSBmaWxlIHVucmVhZGFibGUhIgorbXNnc3RyICJFMjAyOiBLb252ZXJ0ZXJpbmdlbiBnam9yZGUgZmlsZW4gdWxlc2VsaWchIgorCisjOiBmaWxlaW8uYzoyMTAyCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2ZpZm8vc29ja2V0XSIKKworIzogZmlsZWlvLmM6MjEwOQorbXNnaWQgIltmaWZvXSIKK21zZ3N0ciAiW2ZpZm9dIgorCisjOiBmaWxlaW8uYzoyMTE2Cittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIltzb2NrZXRdIgorCisjOiBmaWxlaW8uYzoyMTI0Cittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW1NCXSIKKworIzogZmlsZWlvLmM6MjEzNAorbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW0NSIG1hbmdsZXJdIgorCisjOiBmaWxlaW8uYzoyMTM5Cittc2dpZCAiW05MIGZvdW5kXSIKK21zZ3N0ciAiW05MIGZ1bm5ldF0iCisKKyM6IGZpbGVpby5jOjIxNDQKK21zZ2lkICJbbG9uZyBsaW5lcyBzcGxpdF0iCittc2dzdHIgIltsYW5nZSBsaW5qZXIgc3BsaXR0ZXNdIgorCisjOiBmaWxlaW8uYzoyMTUwIGZpbGVpby5jOjQxMjcKK21zZ2lkICJbTk9UIGNvbnZlcnRlZF0iCittc2dzdHIgIltJS0tFIGtvbnZlcnRlcnRdIgorCisjOiBmaWxlaW8uYzoyMTU1IGZpbGVpby5jOjQxMzIKK21zZ2lkICJbY29udmVydGVkXSIKK21zZ3N0ciAiW2tvbnZlcnRlcnRdIgorCisjOiBmaWxlaW8uYzoyMTYyIGZpbGVpby5jOjQxNTcKK21zZ2lkICJbY3J5cHRlZF0iCittc2dzdHIgIltrcnlwdGVydF0iCisKKyM6IGZpbGVpby5jOjIxNjkKK21zZ2lkICJbQ09OVkVSU0lPTiBFUlJPUl0iCittc2dzdHIgIltLT05WRVJURVJJTkdTRkVJTF0iCisKKyM6IGZpbGVpby5jOjIxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiW0lMTEVHQUwgQllURSBpbiBsaW5lICVsZF0iCittc2dzdHIgIltVTE9WTElHIEJZVEUgaSBsaW5qZSAlbGRdIgorCisjOiBmaWxlaW8uYzoyMTgyCittc2dpZCAiW1JFQUQgRVJST1JTXSIKK21zZ3N0ciAiW0xFU0VGRUlMXSIKKworIzogZmlsZWlvLmM6MjM5OAorbXNnaWQgIkNhbid0IGZpbmQgdGVtcCBmaWxlIGZvciBjb252ZXJzaW9uIgorbXNnc3RyICJLYW4gaWtrZSBmaW5uZSBtaWRsZXJ0aWRpZyBmaWwgZm9yIGtvbnZlcnRlcmluZyIKKworIzogZmlsZWlvLmM6MjQwNQorbXNnaWQgIkNvbnZlcnNpb24gd2l0aCAnY2hhcmNvbnZlcnQnIGZhaWxlZCIKK21zZ3N0ciAiS29udmVydGVyaW5nIG1lZCAnY2hhcmNvbnZlcnQnIGZlaWxldCIKKworIzogZmlsZWlvLmM6MjQwOAorbXNnaWQgImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciCittc2dzdHIgIkthbiBpa2tlIGxlc2UgdXRkYXRhIGZyYSAnY2hhcmNvbnZlcnQnIgorCisjOiBmaWxlaW8uYzoyODA4Cittc2dpZCAiRTIwMzogQXV0b2NvbW1hbmRzIGRlbGV0ZWQgb3IgdW5sb2FkZWQgYnVmZmVyIHRvIGJlIHdyaXR0ZW4iCittc2dzdHIgIkUyMDM6IEF1dG9rb21tYW5kb2VyIHNsZXR0ZXQgZWxsZXIgbGFzdGV0IHV0IGJ1ZmZlciBzb20gc2t1bGxlIGxhZ3JlcyIKKworIzogZmlsZWlvLmM6MjgzMQorbXNnaWQgIkUyMDQ6IEF1dG9jb21tYW5kIGNoYW5nZWQgbnVtYmVyIG9mIGxpbmVzIGluIHVuZXhwZWN0ZWQgd2F5IgorbXNnc3RyICJFMjA0OiBBdXRva29tbWFuZG8gZm9yYW5kcmV0IGxpbmplYW50YWxsIHDlIGVuIHV2ZW50ZXQgbeV0ZSIKKworIzogZmlsZWlvLmM6Mjg2OQorbXNnaWQgIk5ldEJlYW5zIGRpc3NhbGxvd3Mgd3JpdGVzIG9mIHVubW9kaWZpZWQgYnVmZmVycyIKK21zZ3N0ciAiTmV0QmVhbnMgZm9yYnlyIGxhZ3JpbmcgYXYgYnVmZmVyZSBzb20gaWtrZSBlciBmb3JhbmRyZXQiCisKKyM6IGZpbGVpby5jOjI4NzcKK21zZ2lkICJQYXJ0aWFsIHdyaXRlcyBkaXNhbGxvd2VkIGZvciBOZXRCZWFucyBidWZmZXJzIgorbXNnc3RyICJEZWx2aXMgbGFncmluZyBpa2tlIHRpbGxhdHQgZm9yIE5ldEJlYW5zLWJ1ZmZlcmUiCisKKyM6IGZpbGVpby5jOjI5MzEgZmlsZWlvLmM6Mjk0OQorbXNnaWQgImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIgorbXNnc3RyICJlciBpa2tlIGVuIGZpbCBlbGxlciBza3JpdmJhciBlbmhldCIKKworIzogZmlsZWlvLmM6MzAwMQorbXNnaWQgImlzIHJlYWQtb25seSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJlciBza3JpdmViZXNreXR0ZXQgKGxlZ2cgdGlsICEgZm9yIOUgb3ZlcnN0eXJlKSIKKworIzogZmlsZWlvLmM6MzM0NworbXNnaWQgIkU1MDY6IENhbid0IHdyaXRlIHRvIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDY6IEthbiBpa2tlIHNrcml2ZSB0aWwgYmFja3VwZmlsIChsZWdnIHRpbCAhIGZvciDlIG92ZXJzdHlyZSkiCisKKyM6IGZpbGVpby5jOjMzNTkKK21zZ2lkICJFNTA3OiBDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwNzogRmVpbCB1bmRlciBsdWtraW5nIGF2IGJhY2t1cGZpbCAobGVnZyB0aWwgISBmb3Ig5SBvdmVyc3R5cmUpIgorCisjOiBmaWxlaW8uYzozMzYxCittc2dpZCAiRTUwODogQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwODogS2FuIGlra2UgbGVzZSBmaWwgZm9yIGJhY2t1cCAobGVnZyB0aWwgISBmb3Ig5SBvdmVyc3R5cmUpIgorCisjOiBmaWxlaW8uYzozMzc3Cittc2dpZCAiRTUwOTogQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA5OiBLYW4gaWtrZSBsZXNlIGJhY2t1cGZpbCAobGVnZyB0aWwgISBmb3Ig5SBvdmVyc3R5cmUpIgorCisjOiBmaWxlaW8uYzozNDgwCittc2dpZCAiRTUxMDogQ2FuJ3QgbWFrZSBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTEwOiBLYW4gaWtrZSBsYWdlIGJhY2t1cGZpbCAobGVnZyB0aWwgISBmb3Ig5SBvdmVyc3R5cmUpIgorCisjOiBmaWxlaW8uYzozNTQyCittc2dpZCAiRTQ2MDogVGhlIHJlc291cmNlIGZvcmsgd291bGQgYmUgbG9zdCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDYwOiBSZXNzdXJzZm9yZ3JlbmluZ2VuIHZpbGxlIGfldHQgdGFwdCAobGVnZyB0aWwgISBmb3Ig5SBvdmVyc3R5cmUpIgorCisjOiBmaWxlaW8uYzozNjUyCittc2dpZCAiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTQ6IEthbiBpa2tlIGZpbm5lIG1pZGxlcnRpZGlnIGZpbCBmb3Igc2tyaXZpbmciCisKKyM6IGZpbGVpby5jOjM2NzAKK21zZ2lkICJFMjEzOiBDYW5ub3QgY29udmVydCAoYWRkICEgdG8gd3JpdGUgd2l0aG91dCBjb252ZXJzaW9uKSIKK21zZ3N0ciAiRTIxMzogS2FuIGlra2Uga29udmVydGVyZSAobGVnZyB0aWwgISBmb3Ig5SBsYWdyZSB1dGVuIGtvbnZlcnRlcmluZykiCisKKyM6IGZpbGVpby5jOjM3MDUKK21zZ2lkICJFMTY2OiBDYW4ndCBvcGVuIGxpbmtlZCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTY2OiBLYW4gaWtrZSDlcG5lIGxlbmtldCBmaWwgZm9yIHNrcml2aW5nIgorCisjOiBmaWxlaW8uYzozNzA5Cittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiBLYW4gaWtrZSDlcG5lIGZpbCBmb3Igc2tyaXZpbmciCisKKyM6IGZpbGVpby5jOjM5NzEKK21zZ2lkICJFNjY3OiBGc3luYyBmYWlsZWQiCittc2dzdHIgIkU2Njc6IEZzeW5jIGZlaWxldCIKKworIzogZmlsZWlvLmM6Mzk3OAorbXNnaWQgIkU1MTI6IENsb3NlIGZhaWxlZCIKK21zZ3N0ciAiRTUxMjogTHVra2luZyBmZWlsZXQiCisKKyM6IGZpbGVpby5jOjQwNDkKK21zZ2lkICJFNTEzOiB3cml0ZSBlcnJvciwgY29udmVyc2lvbiBmYWlsZWQiCittc2dzdHIgIkU1MTM6IEZlaWwgdW5kZXIgc2tyaXZpbmcsIGtvbnZlcnRlcmluZyBmZWlsZXQiCisKKyM6IGZpbGVpby5jOjQwNTUKK21zZ2lkICJFNTE0OiB3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICJFNTE0OiBGZWlsIHVuZGVyIGxhZ3JpbmcgKGZ1bGwgZGlzaz8pIgorCisjOiBmaWxlaW8uYzo0MTIyCittc2dpZCAiIENPTlZFUlNJT04gRVJST1IiCittc2dzdHIgIiBLT05WRVJURVJJTkdTRkVJTCIKKworIzogZmlsZWlvLmM6NDEzOAorbXNnaWQgIltEZXZpY2VdIgorbXNnc3RyICJbRW5oZXRdIgorCisjOiBmaWxlaW8uYzo0MTQzCittc2dpZCAiW05ld10iCittc2dzdHIgIltOeV0iCisKKyM6IGZpbGVpby5jOjQxNjUKK21zZ2lkICIgW2FdIgorbXNnc3RyICIgW2xdIgorCisjOiBmaWxlaW8uYzo0MTY1Cittc2dpZCAiIGFwcGVuZGVkIgorbXNnc3RyICIgbGFndCB0aWwiCisKKyM6IGZpbGVpby5jOjQxNjcKK21zZ2lkICIgW3ddIgorbXNnc3RyICIgW3NdIgorCisjOiBmaWxlaW8uYzo0MTY3Cittc2dpZCAiIHdyaXR0ZW4iCittc2dzdHIgIiBza3JldmV0IgorCisjOiBmaWxlaW8uYzo0MjE3Cittc2dpZCAiRTIwNTogUGF0Y2htb2RlOiBjYW4ndCBzYXZlIG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDU6IFBhdGNobW9kZTogS2FuIGlra2UgbGFncmUgb3JpZ2luYWxmaWwiCisKKyM6IGZpbGVpby5jOjQyMzkKK21zZ2lkICJFMjA2OiBwYXRjaG1vZGU6IGNhbid0IHRvdWNoIGVtcHR5IG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDY6IHBhdGNobW9kZTogS2FuIGlra2Ugb3BwZGF0ZXJlIHRvbSBvcmlnaW5hbGZpbCIKKworIzogZmlsZWlvLmM6NDI1NAorbXNnaWQgIkUyMDc6IENhbid0IGRlbGV0ZSBiYWNrdXAgZmlsZSIKK21zZ3N0ciAiRTIwNzogS2FuIGlra2Ugc2xldHRlIGJhY2t1cGZpbCIKKworIzogZmlsZWlvLmM6NDMxOAorbXNnaWQgIiIKKyJcbiIKKyJXQVJOSU5HOiBPcmlnaW5hbCBmaWxlIG1heSBiZSBsb3N0IG9yIGRhbWFnZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFEVkFSU0VMOiBPcmlnaW5hbGZpbGVuIGthbiBibGkgdGFwdCBlbGxlciD4ZGVsYWd0XG4iCisKKyM6IGZpbGVpby5jOjQzMjAKK21zZ2lkICJkb24ndCBxdWl0IHRoZSBlZGl0b3IgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorbXNnc3RyICJpa2tlIGF2c2x1dHQgZWRpdG9yZW4gZvhyIGZpbGVuIGVyIHNraWtrZWxpZyBsYWdyZXQhIgorCisjOiBmaWxlaW8uYzo0NDA5Cittc2dpZCAiW2Rvc10iCittc2dzdHIgIltkb3NdIgorCisjOiBmaWxlaW8uYzo0NDA5Cittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbZG9zLWZvcm1hdF0iCisKKyM6IGZpbGVpby5jOjQ0MTYKK21zZ2lkICJbbWFjXSIKK21zZ3N0ciAiW21hY10iCisKKyM6IGZpbGVpby5jOjQ0MTYKK21zZ2lkICJbbWFjIGZvcm1hdF0iCittc2dzdHIgIlttYWMtZm9ybWF0XSIKKworIzogZmlsZWlvLmM6NDQyMworbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzo0NDIzCittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW3VuaXgtZm9ybWF0XSIKKworIzogZmlsZWlvLmM6NDQ1MAorbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxIGxpbmplLCAiCisKKyM6IGZpbGVpby5jOjQ0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzLCAiCittc2dzdHIgIiVsZCBsaW5qZXIsICIKKworIzogZmlsZWlvLmM6NDQ1NQorbXNnaWQgIjEgY2hhcmFjdGVyIgorbXNnc3RyICIxIHRlZ24iCisKKyM6IGZpbGVpby5jOjQ0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYXJhY3RlcnMiCittc2dzdHIgIiVsZCB0ZWduIgorCisjOiBmaWxlaW8uYzo0NDY3Cittc2dpZCAiW25vZW9sXSIKK21zZ3N0ciAiW2luZ2VubGluamVzbHV0dF0iCisKKyM6IGZpbGVpby5jOjQ0NjcKK21zZ2lkICJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIgorbXNnc3RyICJbVWZ1bGxzdGVuZGlnIHNpc3RlbGluamVdIgorCisjLiBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIy4gbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjLiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyM6IGZpbGVpby5jOjQ0ODYKK21zZ2lkICJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiCittc2dzdHIgIkFEVkFSU0VMOiBGaWxlbiBlciBibGl0dCBmb3JhbmRyZXQgc2lkZW4gZGVuIGJsZSBsZXN0ISEhIgorCisjOiBmaWxlaW8uYzo0NDg4Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0IgorbXNnc3RyICJWaWwgZHUgdmlya2VsaWcgc2tyaXZlIHRpbCBkZW4iCisKKyM6IGZpbGVpby5jOjU3MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiCittc2dzdHIgIkUyMDg6IEZlaWwgdW5kZXIgc2tyaXZpbmcgdGlsIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA5OiBFcnJvciBjbG9zaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIwOTogRmVpbCB1bmRlciBsdWtraW5nIGF2IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTc0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogRmVpbCB1bmRlciBsZXNpbmcgYXYgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1OTgyCittc2dpZCAiRTI0NjogRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTI0NjogQXV0b2tvbW1hbmRvZW4gXCJGaWxlQ2hhbmdlZFNoZWxsXCIgc2xldHRldCBidWZmZXIiCisKKyM6IGZpbGVpby5jOjU5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMTogV2FybmluZzogRmlsZSBcIiVzXCIgbm8gbG9uZ2VyIGF2YWlsYWJsZSIKK21zZ3N0ciAiRTIxMTogQWR2YXJzZWw6IEZpbGVuIFwiJXNcIiBlciBpa2tlIGxlbmdlciB0aWxnamVuZ2VsaWciCisKKyM6IGZpbGVpby5jOjYwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlcxMjogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgYW5kIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQgaW4gVmltIGFzICIKKyJ3ZWxsIgorbXNnc3RyICIiCisiVzEyOiBBZHZhcnNlbDogRmlsZW4gXCIlc1wiIGVyIGZvcmFuZHJldCBvZyBidWZmZXJlbiB2YXIgb2dz5SBmb3JhbmRyZXQgaSBWaW0iCisKKyM6IGZpbGVpby5jOjYwMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMTogQWR2YXJzZWw6IEZpbGVuIFwiJXNcIiBlciBmb3JhbmRyZXQgc2lkZW4gcmVkaWdlcmluZ2VuIHN0YXJ0ZXQiCisKKyM6IGZpbGVpby5jOjYwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzE2OiBXYXJuaW5nOiBNb2RlIG9mIGZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiIgorIlcxNjogQWR2YXJzZWw6IFJldHRpZ2hldGVuZSB0aWwgZmlsZW4gXCIlc1wiIGVyIGZvcmFuZHJldCBzaWRlbiByZWRpZ2VyaW5nZW4gIgorInN0YXJ0ZXQiCisKKyM6IGZpbGVpby5jOjYwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiIgorIlcxMzogQWR2YXJzZWw6IEZpbGVuIFwiJXNcIiBlciBibGl0dCBvcHByZXR0ZXQgZXR0ZXIgYXQgcmVkaWdlcmluZ2VuIHN0YXJ0ZXQiCisKKyM6IGZpbGVpby5jOjYwMzEKK21zZ2lkICJTZWUgXCI6aGVscCBXMTFcIiBmb3IgbW9yZSBpbmZvLiIKK21zZ3N0ciAiU2UgXCI6aGVscCBXMTFcIiBmb3IgbWVyIGluZm9ybWFzam9uLiIKKworIzogZmlsZWlvLmM6NjA0NQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIkFkdmFyc2VsIgorCisjOiBmaWxlaW8uYzo2MDQ2Cittc2dpZCAiIgorIiZPS1xuIgorIiZMb2FkIEZpbGUiCittc2dzdHIgIiIKKyImT0tcbiIKKyImxXBuZSBmaWwiCisKKyM6IGZpbGVpby5jOjYxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2MjogQ291bGQgbm90IHByZXBhcmUgZm9yIHJlbG9hZGluZyBcIiVzXCIiCittc2dzdHIgIkU0NjI6IEt1bm5lIGlra2UgZm9yYmVyZWRlIGZvciByZWxhc3RpbmcgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjE6IENvdWxkIG5vdCByZWxvYWQgXCIlc1wiIgorbXNnc3RyICJFMzIxOiBLdW5uZSBpa2tlIGxhc3RlIFwiJXNcIiBw5SBueXR0IgorCisjOiBmaWxlaW8uYzo2NzUyCittc2dpZCAiLS1EZWxldGVkLS0iCittc2dzdHIgIi0tU2xldHRldC0tIgorCisjLiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdAorIzogZmlsZWlvLmM6NjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY3OiBObyBzdWNoIGdyb3VwOiBcIiVzXCIiCittc2dzdHIgIkUzNjc6IEdydXBwZW4gZmlubmVzIGlra2U6IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NzAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciAqOiAlcyIKK21zZ3N0ciAiRTIxNTogVWxvdmxpZyB0ZWduIGV0dGVyICo6ICVzIgorCisjOiBmaWxlaW8uYzo3MDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiBIYW5kbGluZ2VuIGZpbm5lcyBpa2tlOiAlcyIKKworIzogZmlsZWlvLmM6NzA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE2OiBObyBzdWNoIGdyb3VwIG9yIGV2ZW50OiAlcyIKK21zZ3N0ciAiRTIxNjogR3J1cHBlbiBlbGxlciBoYW5kbGluZ2VuIGZpbm5lcyBpa2tlOiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo3MjEwCittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRva29tbWFuZG9lciAtLS0iCisKKyM6IGZpbGVpby5jOjc0ODEKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiRTIxNzogS2FuIGlra2UgdXRm+HJlIGF1dG9rb21tYW5kb2VyIGZvciBBTExFIGhlbmRlbHNlciIKKworIzogZmlsZWlvLmM6NzUwNAorbXNnaWQgIk5vIG1hdGNoaW5nIGF1dG9jb21tYW5kcyIKK21zZ3N0ciAiSW5nZW4gc2Ftc3ZhcmVuZGUgYXV0b2tvbW1hbmRvZXIiCisKKyM6IGZpbGVpby5jOjc4MjUKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiBO+HN0aW5nIGF2IGF1dG9rb21tYW5kb2VyIGZvciBkeXAiCisKKyM6IGZpbGVpby5jOjgxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgQXV0byBjb21tYW5kcyBmb3IgXCIlc1wiIgorbXNnc3RyICIlcyBBdXRva29tbWFuZG9lciBmb3IgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo4MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAiVXRm+HJlciAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBmaWxlaW8uYzo4MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImF1dG9jb21tYW5kICVzIgorbXNnc3RyICJhdXRva29tbWFuZG8gJXMiCisKKyM6IGZpbGVpby5jOjg3NDMKK21zZ2lkICJFMjE5OiBNaXNzaW5nIHsuIgorbXNnc3RyICJFMjE5OiBNYW5nbGVyIHsuIgorCisjOiBmaWxlaW8uYzo4NzQ1Cittc2dpZCAiRTIyMDogTWlzc2luZyB9LiIKK21zZ3N0ciAiRTIyMDogTWFuZ2xlciB9LiIKKworIzogZm9sZC5jOjY4Cittc2dpZCAiRTQ5MDogTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAiRTQ5MDogSW5nZW4gZm9sZCBmdW5uZXQiCisKKyM6IGZvbGQuYzo1OTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogS2FuIGlra2UgbGFnZSBmb2xkIG1lZCBu5XbmcmVuZGUgJ2ZvbGRtZXRob2QnIgorCisjOiBmb2xkLmM6NTk1Cittc2dpZCAiRTM1MTogQ2Fubm90IGRlbGV0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTE6IEthbiBpa2tlIHNsZXR0ZSBmb2xkIG1lZCBu5XbmcmVuZGUgJ2ZvbGRtZXRob2QnIgorCisjOiBnZXRjaGFyLmM6MjQ4CisjfiBtc2dpZCAiRTIyMjogQWRkIHRvIHJlYWQgYnVmZmVyIgorI34gbXNnc3RyICIiCisKKyM6IGdldGNoYXIuYzoyMjA4Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6IFJla3Vyc2l2IG1hcHBpbmciCisKKyM6IGdldGNoYXIuYzozMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjQ6IGdsb2JhbCBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI0OiBHbG9iYWwgZm9ya29ydGVsc2UgZmlubmVzIGFsbGVyZWRlIGZvciAlcyIKKworIzogZ2V0Y2hhci5jOjMwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNTogZ2xvYmFsIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI1OiBHbG9iYWwgbWFwcGluZyBmaW5uZXMgYWxsZXJlZGUgZm9yICVzIgorCisjOiBnZXRjaGFyLmM6MzIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI2OiBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI2OiBGb3Jrb3J0ZWxzZSBmaW5uZXMgYWxsZXJlZGUgZm9yICVzIgorCisjOiBnZXRjaGFyLmM6MzIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI3OiBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNzogTWFwcGluZ2VuIGZpbm5lcyBhbGxlcmVkZSBmb3IgJXMiCisKKyM6IGdldGNoYXIuYzozMjg5Cittc2dpZCAiTm8gYWJicmV2aWF0aW9uIGZvdW5kIgorbXNnc3RyICJJbmdlbiBmb3Jrb3J0ZWxzZSBmdW5uZXQiCisKKyM6IGdldGNoYXIuYzozMjkxCittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAiSW5nZW4gbWFwcGluZyBmdW5uZXQiCisKKyM6IGdldGNoYXIuYzo0MTgzCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiBVbG92bGlnIG1vZHVzIgorCisjOiBndWkuYzoyMjAKK21zZ2lkICJFMjI5OiBDYW5ub3Qgc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiRTIyOTogS2FuIGlra2Ugc3RhcnRlIGdyYWZpc2sgYnJ1a2VyZ3JlbnNlc25pdHQgKEdVSSkiCisKKyM6IGd1aS5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogS2FuIGlra2UgbGVzZSBmcmEgXCIlc1wiIgorCisjOiBndWkuYzo0NzIKK21zZ2lkICJFNjY1OiBDYW5ub3Qgc3RhcnQgR1VJLCBubyB2YWxpZCBmb250IGZvdW5kIgorbXNnc3RyICIiCisiRTY2NTogS2FuIGlra2Ugc3RhcnRlIGdyYWZpc2sgYnJ1a2VyZ3JlbnNlc25pdHQsIGZhbnQgaW5nZW4gZ3lsZGlnIGZvbnQiCisKKyM6IGd1aS5jOjQ3NworbXNnaWQgIkUyMzE6ICdndWlmb250d2lkZScgaW52YWxpZCIKK21zZ3N0ciAiRTIzMTogJ2d1aWZvbnR3aWRlJyB1Z3lsZGlnIgorCisjOiBndWkuYzo1NDcKK21zZ2lkICJFNTk5OiBWYWx1ZSBvZiAnaW1hY3RpdmF0ZWtleScgaXMgaW52YWxpZCIKK21zZ3N0ciAiRTU5OTogVmVyZGllbiBmb3IgJ2ltYWN0aXZhdGVrZXknIGVyIHVneWxkaWciCisKKyM6IGd1aS5jOjQwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiBLYW4gaWtrZSByZXNlcnZlcmUgZmFyZ2UgJXMiCisKKyM6IGd1aV9hdF9mcy5jOjMwMAorbXNnaWQgIjxjYW5ub3Qgb3Blbj4gIgorbXNnc3RyICI8a2FuIGlra2Ug5XBuZT4gIgorCisjOiBndWlfYXRfZnMuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAiRTYxNjogdmltX1NlbEZpbGU6IEthbiBpa2tlIGJydWtlIHNrcmlmdHR5cGVuICVzIgorCisjOiBndWlfYXRfZnMuYzoyNzgxCittc2dpZCAiRTYxNDogdmltX1NlbEZpbGU6IGNhbid0IHJldHVybiB0byBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNDogdmltX1NlbEZpbGU6IEthbiBpa2tlIHJldHVybmVyZSB0aWwgbuV25nJlbmRlIGthdGFsb2ciCisKKyM6IGd1aV9hdF9mcy5jOjI4MDEKK21zZ2lkICJQYXRobmFtZToiCittc2dzdHIgIlN0aToiCisKKyM6IGd1aV9hdF9mcy5jOjI4MDcKK21zZ2lkICJFNjE1OiB2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJFNjE1OiB2aW1fU2VsRmlsZTogS2FuIGlra2UgZmlubmUgbuV25nJlbmRlIGthdGFsb2ciCisKKyM6IGd1aV9hdF9mcy5jOjI4MTUgZ3VpX21vdGlmLmM6MTYyMworbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfZ3RrLmM6MjczMSBndWlfbW90aWYuYzoxNjE4IGd1aV9tb3RpZi5jOjI4NDkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkF2YnJ5dCIKKworIzogZ3VpX2F0X3NiLmM6NDg2Cittc2dpZCAiU2Nyb2xsYmFyIFdpZGdldDogQ291bGQgbm90IGdldCBnZW9tZXRyeSBvZiB0aHVtYiBwaXhtYXAuIgorbXNnc3RyICJSdWxsZWZlbHRlbGVtZW50OiBLbGFydGUgaWtrZSBoZW50ZSBkaW1lbnNqb25lciBw5SBcInRodW1iIHBpeG1hcFwiLiIKKworIzogZ3VpX2F0aGVuYS5jOjIwNDcgZ3VpX21vdGlmLmM6MTg3MQorbXNnaWQgIlZpbSBkaWFsb2ciCittc2dzdHIgIkRpYWxvZ3ZpbmR1IGZvciBWaW0iCisKKyM6IGd1aV9iZXZhbC5jOjEwMSBndWlfdzMyLmM6Mzk3OAorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICJFMjMyOiBLYW4gaWtrZSBsYWdlIEJhbGxvb25FdmFsIG1lZCBi5WRlIG1lbGRpbmcgb2cgdGlsYmFrZWthbGwiCisKKyM6IGd1aV9ndGsuYzoxNjA3Cittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiVmltIGRpYWxvZ3ZpbmR1oC4uLiIKKworIzogZ3VpX2d0ay5jOjIwNjAgbWVzc2FnZS5jOjI5OTkKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImSmFcbiIKKyImTmVpXG4iCisiJkF2YnJ5dCIKKworIzogZ3VpX2d0ay5jOjIyNjgKKyN+IG1zZ2lkICJJbnB1dCBfTWV0aG9kcyIKKyN+IG1zZ3N0ciAiIgorCisjOiBndWlfZ3RrLmM6MjUzNCBndWlfbW90aWYuYzoyNzY4Cittc2dpZCAiVklNIC0gU2VhcmNoIGFuZCBSZXBsYWNlLi4uIgorbXNnc3RyICJWSU0gLSBT+Gsgb2cgZXJzdGF0dKAuLi4iCisKKyM6IGd1aV9ndGsuYzoyNTQyIGd1aV9tb3RpZi5jOjI3NzAKK21zZ2lkICJWSU0gLSBTZWFyY2guLi4iCittc2dzdHIgIlZJTSAtIFP4a6AuLi4iCisKKyM6IGd1aV9ndGsuYzoyNTc0IGd1aV9tb3RpZi5jOjI4ODgKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICJGaW5uIGh2YToiCisKKyM6IGd1aV9ndGsuYzoyNTkyIGd1aV9tb3RpZi5jOjI5MjAKK21zZ2lkICJSZXBsYWNlIHdpdGg6IgorbXNnc3RyICJFcnN0YXR0IG1lZDoiCisKKyMuIHdob2xlIHdvcmQgb25seSBidXR0b24KKyM6IGd1aV9ndGsuYzoyNjI0IGd1aV9tb3RpZi5jOjMwMzYKK21zZ2lkICJNYXRjaCB3aG9sZSB3b3JkIG9ubHkiCittc2dzdHIgIkZpbm4ga3VuIGhlbGUgb3JkIgorCisjLiBtYXRjaCBjYXNlIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI2MzUgZ3VpX21vdGlmLmM6MzA0OAorbXNnaWQgIk1hdGNoIGNhc2UiCittc2dzdHIgIkZvcnNramVsbCBw5SBzdG9yZS9zbeUgYm9rc3RhdmVyIgorCisjOiBndWlfZ3RrLmM6MjY0NSBndWlfbW90aWYuYzoyOTkwCittc2dpZCAiRGlyZWN0aW9uIgorbXNnc3RyICJSZXRuaW5nIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjI2NTcgZ3VpX21vdGlmLmM6MzAwMgorbXNnaWQgIlVwIgorbXNnc3RyICJPcHAiCisKKyM6IGd1aV9ndGsuYzoyNjYxIGd1aV9tb3RpZi5jOjMwMTAKK21zZ2lkICJEb3duIgorbXNnc3RyICJOZWQiCisKKyM6IGd1aV9ndGsuYzoyNjgzIGd1aV9ndGsuYzoyNjg1IGd1aV9tb3RpZi5jOjI3OTIKK21zZ2lkICJGaW5kIE5leHQiCittc2dzdHIgIkZpbm4gbmVzdGUiCisKKyM6IGd1aV9ndGsuYzoyNzAyIGd1aV9ndGsuYzoyNzA0IGd1aV9tb3RpZi5jOjI4MDkKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICJFcnN0YXR0IgorCisjOiBndWlfZ3RrLmM6MjcxNSBndWlfZ3RrLmM6MjcxNyBndWlfbW90aWYuYzoyODIyCittc2dpZCAiUmVwbGFjZSBBbGwiCittc2dzdHIgIkVyc3RhdHQgYWxsZSIKKworIzogZ3VpX2d0a194MTEuYzoyMzI3Cittc2dpZCAiVmltOiBSZWNlaXZlZCBcImRpZVwiIHJlcXVlc3QgZnJvbSBzZXNzaW9uIG1hbmFnZXJcbiIKK21zZ3N0ciAiVmltOiBNb3R0b2sgXCJk+FwiLWZvcmVzcPhyc2VsIGZyYSD4a3RiZWhhbmRsZXJlblxuIgorCisjOiBndWlfZ3RrX3gxMS5jOjM1MTkKK21zZ2lkICJWaW06IE1haW4gd2luZG93IHVuZXhwZWN0ZWRseSBkZXN0cm95ZWRcbiIKK21zZ3N0ciAiVmltOiBVdmVudGV0IPhkZWxlZ2dlbHNlIGF2IGhvdmVkdmluZHVldFxuIgorCisjOiBndWlfZ3RrX3gxMS5jOjQxMzgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAiVmVsZ2Ugc2tyaWZ0dHlwZSIKKworIzogZ3VpX2d0a194MTEuYzo2MDM1IHVpLmM6MjEyMAorbXNnaWQgIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iCittc2dzdHIgIkJydWt0ZSBDVVRfQlVGRkVSMCBpc3RlZGVuZm9yIHRvbXQgdmFsZyIKKworIzogZ3VpX21vdGlmLmM6MTYxNyBndWlfbW90aWYuYzoxNjIwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0ZXIiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTkKK21zZ2lkICJEaXJlY3RvcmllcyIKK21zZ3N0ciAiS2F0YWxvZ2VyIgorCisjOiBndWlfbW90aWYuYzoxNjIxCittc2dpZCAiSGVscCIKK21zZ3N0ciAiSGplbHAiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjIKK21zZ2lkICJGaWxlcyIKK21zZ3N0ciAiRmlsZXIiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjQKK21zZ2lkICJTZWxlY3Rpb24iCittc2dzdHIgIlZhbGciCisKKyM6IGd1aV9tb3RpZi5jOjI4MzUKK21zZ2lkICJVbmRvIgorbXNnc3RyICJBbmdyZSIKKworIzogZ3VpX3Jpc2Nvcy5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjEwOiBDYW4ndCBsb2FkIFphcCBmb250ICclcyciCittc2dzdHIgIkU2MTA6IEthbiBpa2tlIGxhc3RlIFphcC1za3JpZnR0eXBlICclcyciCisKKyM6IGd1aV9yaXNjb3MuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTE6IENhbid0IHVzZSBmb250ICVzIgorbXNnc3RyICJFNjExOiBLYW4gaWtrZSBicnVrZSBza3JpZnR0eXBlICVzIgorCisjOiBndWlfcmlzY29zLmM6MzI3MAorbXNnaWQgIiIKKyJcbiIKKyJTZW5kaW5nIG1lc3NhZ2UgdG8gdGVybWluYXRlIGNoaWxkIHByb2Nlc3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZW5kZXIgYmVza2plZCBvbSDlIGF2c2x1dHRlIGJhcm5lcHJvc2Vzcy5cbiIKKworIzogZ3VpX3czMi5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjcxOiBDYW5ub3QgZmluZCB3aW5kb3cgdGl0bGUgXCIlc1wiIgorbXNnc3RyICJFNjcxOiBGYW50IGlra2UgdmluZHV0aXR0ZWwgXCIlc1wiIgorCisjOiBndWlfdzMyLmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDM6IEFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQ6IFwiLSVzXCI7IFVzZSB0aGUgT0xFIHZlcnNpb24uIgorbXNnc3RyICJFMjQzOiBQYXJhbWV0ZXIgaWtrZSBzdPh0dGV0OiBcIi0lc1wiOyBCcnVrIE9MRS12ZXJzam9uZW4uIgorCisjOiBndWlfdzMyLmM6MTEwMAorbXNnaWQgIkU2NzI6IFVuYWJsZSB0byBvcGVuIHdpbmRvdyBpbnNpZGUgTURJIGFwcGxpY2F0aW9uIgorbXNnc3RyICJFNjcyOiBLbGFyZXIgaWtrZSDlcG5lIHZpbmR1IGlubmUgaSBNREktYXBwbGlrYXNqb24iCisKKyM6IGd1aV93NDguYzoyMTYzCittc2dpZCAiRmluZCBzdHJpbmcgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAiRmlubiBzdHJlbmcgKGJydWsgJ1xcXFwnIGZvciDlIGZpbm5lIGVuICdcXCcpIgorCisjOiBndWlfdzQ4LmM6MjE4OAorbXNnaWQgIkZpbmQgJiBSZXBsYWNlICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIlP4ayBvZyBlcnN0YXR0IChicnVrICdcXFxcJyBmb3Ig5SBmaW5uZSBlbiAnXFwnKSIKKworIzogZ3VpX3gxMS5jOjE1MzcKK21zZ2lkICJWaW0gRTQ1ODogQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0IgorbXNnc3RyICJWaW0gRTQ1ODogS2FuIGlra2UgcmVzZXJ2ZXJlIGZhcmdla2FydCwgbm9lbiBmYXJnZXIga2FuIHbmcmUgZmVpbCIKKworIzogZ3VpX3gxMS5jOjIxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MDogRm9udHMgZm9yIHRoZSBmb2xsb3dpbmcgY2hhcnNldHMgYXJlIG1pc3NpbmcgaW4gZm9udHNldCAlczoiCittc2dzdHIgIkUyNTA6IFNrcmlmdHR5cGVyIGZvciBkZSBm+GxnZW5kZSB0ZWduc2V0dCBtYW5nbGVyIGkgZm9udHNldHQgJXM6IgorCisjOiBndWlfeDExLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUyOiBGb250c2V0IG5hbWU6ICVzIgorbXNnc3RyICJFMjUyOiBOYXZuIHDlIHNrcmlmdHR5cGVzZXR0OiAlcyIKKworIzogZ3VpX3gxMS5jOjIxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCAnJXMnIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiU2tyaWZ0dHlwZW4gJyVzJyBoYXIgaWtrZSBrb25zdGFudCBicmVkZGUiCisKKyM6IGd1aV94MTEuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTM6IEZvbnRzZXQgbmFtZTogJXNcbiIKK21zZ3N0ciAiRTI1MzogTmF2biBw5SBza3JpZnR0eXBlc2V0dDogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDA6ICVzXG4iCittc2dzdHIgIkZvbnQwOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAiRm9udDE6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQlbGQgd2lkdGggaXMgbm90IHR3aWNlIHRoYXQgb2YgZm9udDBcbiIKK21zZ3N0ciAiRm9udCVsZC1icmVkZGUgZXIgaWtrZSB0byBnYW5nZXIgYnJlZGRlbiBhdiBmb250MFxuIgorCisjOiBndWlfeDExLmM6MjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MCB3aWR0aDogJWxkXG4iCittc2dzdHIgIkZvbnQwLWJyZWRkZTogJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyJGb250MS1icmVkZGU6ICVsZFxuIgorIlxuIgorCisjOiBoYW5ndWxpbi5jOjYxMAorI34gbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKKyN+IG1zZ3N0ciAiIgorCisjOiBpZl9jc2NvcGUuYzo3NworbXNnaWQgIkFkZCBhIG5ldyBkYXRhYmFzZSIKK21zZ3N0ciAiTGVnZyB0aWwgZW4gbnkgZGF0YWJhc2UiCisKKyM6IGlmX2NzY29wZS5jOjc5Cittc2dpZCAiUXVlcnkgZm9yIGEgcGF0dGVybiIKK21zZ3N0ciAiRm9yZXNw+HJzZWwgZXR0ZXIgc/hrZXN0cmVuZyIKKworIzogaWZfY3Njb3BlLmM6ODEKK21zZ2lkICJTaG93IHRoaXMgbWVzc2FnZSIKK21zZ3N0ciAiVmlzIGRlbm5lIG1lbGRpbmdlbiIKKworIzogaWZfY3Njb3BlLmM6ODMKK21zZ2lkICJLaWxsIGEgY29ubmVjdGlvbiIKK21zZ3N0ciAiRHJlcCBlbiBmb3JiaW5kZWxzZSIKKworIzogaWZfY3Njb3BlLmM6ODUKK21zZ2lkICJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIgorbXNnc3RyICJSZWluaXRpYWxpc2VyIGFsbGUgZm9yYmluZGVsc2VyIgorCisjOiBpZl9jc2NvcGUuYzo4NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIlZpcyBmb3JiaW5kZWxzZXIiCisKKyM6IGlmX2NzY29wZS5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjA6IFVzYWdlOiBjc1tjb3BlXSAlcyIKK21zZ3N0ciAiRTU2MDogQnJ1azogY3NbY29wZV0gJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNAorbXNnaWQgIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIKK21zZ3N0ciAiRGVubmUgY3Njb3BlLWtvbW1hbmRvZW4gc3T4dHRlciBpa2tlIHNwbGl0dGluZyBhdiB2aW5kdWV0LlxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzUKK21zZ2lkICJFNTYyOiBVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiRTU2MjogQnJ1azogY3N0YWcgPGlkZW50aWZpa2F0b3I+IgorCisjOiBpZl9jc2NvcGUuYzoyMzEKK21zZ2lkICJFMjU3OiBjc3RhZzogdGFnIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI1NzogY3N0YWc6IFRhZyBpa2tlIGZ1bm5ldCIKKworIzogaWZfY3Njb3BlLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjM6IHN0YXQoJXMpIGVycm9yOiAlZCIKK21zZ3N0ciAiRTU2Mzogc3RhdCglcykgZmVpbDogJWQiCisKKyM6IGlmX2NzY29wZS5jOjQxOQorbXNnaWQgIkU1NjM6IHN0YXQgZXJyb3IiCittc2dzdHIgIkU1NjM6IFwic3RhdFwiLWZlaWwiCisKKyM6IGlmX2NzY29wZS5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY0OiAlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIkU1NjQ6ICVzIGVyIGlra2UgZW4ga2F0YWxvZyBlbGxlciBneWxkaWcgY3Njb3BlLWRhdGFiYXNlIgorCisjOiBpZl9jc2NvcGUuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICJMYSB0aWwgY3Njb3BlLWRhdGFiYXNlICVzIgorCisjOiBpZl9jc2NvcGUuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlbGQiCittc2dzdHIgIkUyNjI6IEZlaWwgdW5kZXIgbGVzaW5nIGF2IGNzY29wZS1mb3JiaW5kZWxzZSAlbGQiCisKKyM6IGlmX2NzY29wZS5jOjY5NAorbXNnaWQgIkU1NjE6IHVua25vd24gY3Njb3BlIHNlYXJjaCB0eXBlIgorbXNnc3RyICJFNTYxOiBVa2plbnQgY3Njb3BlLXP4a2V0eXBlIgorCisjOiBpZl9jc2NvcGUuYzo3MzYKK21zZ2lkICJFNTY2OiBDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiRTU2NjogS3VubmUgaWtrZSBsYWdlIGNzY29wZS1y+HIgKFwicGlwZVwiKSIKKworIzogaWZfY3Njb3BlLmM6NzUzCittc2dpZCAiRTYyMjogQ291bGQgbm90IGZvcmsgZm9yIGNzY29wZSIKK21zZ3N0ciAiRTYyMjogS2xhcnRlIGlra2UgbGFnZSB0dmlsbGluZ3Byb3Nlc3MgZm9yIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6ODQ3IGlmX2NzY29wZS5jOjg5NworbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uIGV4ZWMgZmFpbGVkIgorbXNnc3RyICJVdGb4cmluZyBhdiBjc19jcmVhdGVfY29ubmVjdGlvbiBmZWlsZXQiCisKKyM6IGlmX2NzY29wZS5jOjg5OAorbXNnaWQgIkU2MjM6IENvdWxkIG5vdCBzcGF3biBjc2NvcGUgcHJvY2VzcyIKK21zZ3N0ciAiRTYyMzogS2xhcnRlIGlra2Ugc3RhcnRlIGNzY29wZS1wcm9zZXNzIgorCisjOiBpZl9jc2NvcGUuYzo5MTEKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciB0b19mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIHRvX2ZwIGZlaWxldCIKKworIzogaWZfY3Njb3BlLmM6OTEzCittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgZnJfZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciBmcl9mcCBmZWlsZXQiCisKKyM6IGlmX2NzY29wZS5jOjk1MQorbXNnaWQgIkU1Njc6IG5vIGNzY29wZSBjb25uZWN0aW9ucyIKK21zZ3N0ciAiRTU2NzogSW5nZW4gY3Njb3BlLWZvcmJpbmRlbHNlIgorCisjOiBpZl9jc2NvcGUuYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTk6IG5vIG1hdGNoZXMgZm91bmQgZm9yIGNzY29wZSBxdWVyeSAlcyBvZiAlcyIKK21zZ3N0ciAiRTI1OTogSW5nZW4gdHJlZmYgZnVubmV0IGZvciBjc2NvcGUtZm9yZXNw+HJzZWwgJXMgYXYgJXMiCisKKyM6IGlmX2NzY29wZS5jOjEwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OTogaW52YWxpZCBjc2NvcGVxdWlja2ZpeCBmbGFnICVjIGZvciAlYyIKK21zZ3N0ciAiRTQ2OTogVWd5bGRpZyBcImNzY29wZXF1aWNrZml4XCItZmxhZ2cgJWMgZm9yICVjIgorCisjOiBpZl9jc2NvcGUuYzoxMTUyCittc2dpZCAiY3Njb3BlIGNvbW1hbmRzOlxuIgorbXNnc3RyICJjc2NvcGUta29tbWFuZG9lcjpcbiIKKworIzogaWZfY3Njb3BlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLTVzOiAlLTMwcyAoVXNhZ2U6ICVzKSIKK21zZ3N0ciAiJS01czogJS0zMHMgKEJydWs6ICVzKSIKKworIzogaWZfY3Njb3BlLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjI1OiBjYW5ub3Qgb3BlbiBjc2NvcGUgZGF0YWJhc2U6ICVzIgorbXNnc3RyICJFNjI1OiBLYW4gaWtrZSDlcG5lIGNzY29wZS1kYXRhYmFzZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNzEKK21zZ2lkICJFNjI2OiBjYW5ub3QgZ2V0IGNzY29wZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRTYyNjogS2FuIGlra2UgaGVudGUgaW5mb3JtYXNqb24gb20gY3Njb3BlLWRhdGFiYXNlIgorCisjOiBpZl9jc2NvcGUuYzoxMjk2Cittc2dpZCAiRTU2ODogZHVwbGljYXRlIGNzY29wZSBkYXRhYmFzZSBub3QgYWRkZWQiCittc2dzdHIgIkU1Njg6IER1cGxpc2VydCBjc2NvcGUtZGF0YWJhc2UgaWtrZSBsYWd0IHRpbCIKKworIzogaWZfY3Njb3BlLmM6MTMwNworbXNnaWQgIkU1Njk6IG1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICJFNTY5OiBNYWtzaW11bSBhbnRhbGwgY3Njb3BlLWZvcmJpbmRlbHNlciBu5WRkIgorCisjOiBpZl9jc2NvcGUuYzoxNDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNjE6IGNzY29wZSBjb25uZWN0aW9uICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MTogY3Njb3BlLWZvcmJpbmRlbHNlICVzIGlra2UgZnVubmV0IgorCisjOiBpZl9jc2NvcGUuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNzY29wZSBjb25uZWN0aW9uICVzIGNsb3NlZCIKK21zZ3N0ciAiY3Njb3BlLWZvcmJpbmRlbHNlbiAlcyBzdGVuZ3QiCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTU5OAorbXNnaWQgIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJFNTcwOiBLcml0aXNrIGZlaWwgaSBjc19tYW5hZ2VfbWF0Y2hlcyIKKworIzogaWZfY3Njb3BlLmM6MTg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDc2NvcGUgdGFnOiAlcyIKK21zZ3N0ciAiQ3Njb3BlLXRhZzogJXMiCisKKyM6IGlmX2NzY29wZS5jOjE4NzAKK21zZ2lkICIiCisiXG4iCisiICAgIyAgIGxpbmUiCittc2dzdHIgIiIKKyJcbiIKKyIgICAjICAgbGluamUiCisKKyM6IGlmX2NzY29wZS5jOjE4NzIKK21zZ2lkICJmaWxlbmFtZSAvIGNvbnRleHQgLyBsaW5lXG4iCittc2dzdHIgImZpbG5hdm4gLyBrb250ZWtzdCAvIGxpbmplXG4iCisKKyM6IGlmX2NzY29wZS5jOjE5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwOTogQ3Njb3BlIGVycm9yOiAlcyIKK21zZ3N0ciAiRTYwOTogQ3Njb3BlLWZlaWw6ICVzIgorCisjOiBpZl9jc2NvcGUuYzoyMTc2Cittc2dpZCAiQWxsIGNzY29wZSBkYXRhYmFzZXMgcmVzZXQiCittc2dzdHIgIkFsbGUgY3Njb3BlLWRhdGFiYXNlciByZXNhdHQiCisKKyM6IGlmX2NzY29wZS5jOjIyNDQKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAiaW5nZW4gY3Njb3BlLWZvcmJpbmRlbHNlclxuIgorCisjOiBpZl9jc2NvcGUuYzoyMjQ4Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAgZGF0YWJhc2VuYXZuICAgICAgICAgICAgICAgICAgICAgICAgbGVnZyB0aWwgc3RpXG4iCisKKyM6IGlmX3B5dGhvbi5jOjQzNgorbXNnaWQgIiIKKyJFMjYzOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUHl0aG9uIGxpYnJhcnkgY291bGQgbm90IGJlICIKKyJsb2FkZWQuIgorbXNnc3RyICIiCisiRTI2MzogRGVubmUga29tbWFuZG9lbiBlciBkZWFrdGl2ZXJ0LCBQeXRob24tYmlibGlvdGVrZXQga3VubmUgaWtrZSBsYXN0ZXMuIgorCisjOiBpZl9weXRob24uYzo1MDAKK21zZ2lkICJFNjU5OiBDYW5ub3QgaW52b2tlIFB5dGhvbiByZWN1cnNpdmVseSIKK21zZ3N0ciAiRTY1OTogS2FuIGlra2Ugc3RhcnRlIFB5dGhvbiByZWt1cnNpdnQiCisKKyM6IGlmX3B5dGhvbi5jOjcwMQorbXNnaWQgImNhbid0IGRlbGV0ZSBPdXRwdXRPYmplY3QgYXR0cmlidXRlcyIKK21zZ3N0ciAiS2FuIGlra2Ugc2xldHRlIFwiT3V0cHV0T2JqZWN0XCItYXR0cmlidXR0ZXIiCisKKyM6IGlmX3B5dGhvbi5jOjcwOAorbXNnaWQgInNvZnRzcGFjZSBtdXN0IGJlIGFuIGludGVnZXIiCittc2dzdHIgIlwic29mdHNwYWNlXCIgbeUgduZyZSBldCBoZWx0YWxsIgorCisjOiBpZl9weXRob24uYzo3MTYKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAidWd5bGRpZyBhdHRyaWJ1dHQiCisKKyM6IGlmX3B5dGhvbi5jOjc1NSBpZl9weXRob24uYzo3NjkKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkga3JldmVyIGVuIGxpc3RlIGF2IHN0cmVuZ2VyIgorCisjOiBpZl9weXRob24uYzo4OTUKK21zZ2lkICJFMjY0OiBQeXRob246IEVycm9yIGluaXRpYWxpc2luZyBJL08gb2JqZWN0cyIKK21zZ3N0ciAiRTI2NDogUHl0aG9uOiBGZWlsIHVuZGVyIGluaXRpYWxpc2VyaW5nIGF2IEkvVS1vYmpla3RlciIKKworIzogaWZfcHl0aG9uLmM6MTA4MCBpZl90Y2wuYzoxNDAyCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICJ1Z3lsZGlnIHV0dHJ5a2siCisKKyM6IGlmX3B5dGhvbi5jOjEwOTQgaWZfdGNsLmM6MTQwNworbXNnaWQgImV4cHJlc3Npb25zIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAidXR0cnlrayBkZWFrdGl2ZXJ0IHDlIGtvbXBpbGVyaW5nc3N0YWRpZXQiCisKKyM6IGlmX3B5dGhvbi5jOjExMDcKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJmb3Jz+GsgcOUg5SByZWZlcmVyZSB0aWwgc2xldHRldCBidWZmZXIiCisKKyM6IGlmX3B5dGhvbi5jOjExMjIgaWZfcHl0aG9uLmM6MTE2MyBpZl9weXRob24uYzoxMjI3IGlmX3RjbC5jOjEyMTQKK21zZ2lkICJsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UiCittc2dzdHIgImxpbmplbnVtbWVyIHV0ZW5mb3Igb21y5WRlIgorCisjOiBpZl9weXRob24uYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIjxidWZmZXIgb2JqZWN0IChkZWxldGVkKSBhdCAlOGxYPiIKK21zZ3N0ciAiPGJ1ZmZlcm9iamVrdCAoc2xldHRldCkgdmVkICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxNDUzIGlmX3RjbC5jOjgzNgorbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICJ1Z3lsZGlnIG1lcmtlbmF2biIKKworIzogaWZfcHl0aG9uLmM6MTczMworbXNnaWQgIm5vIHN1Y2ggYnVmZmVyIgorbXNnc3RyICJidWZmZXJlbiBmaW5uZXMgaWtrZSIKKworIzogaWZfcHl0aG9uLmM6MTgyMQorbXNnaWQgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCB3aW5kb3ciCittc2dzdHIgImZvcnP4ayBw5SDlIHJlZmVyZXJlIHRpbCBzbGV0dGV0IHZpbmR1IgorCisjOiBpZl9weXRob24uYzoxODY2Cittc2dpZCAicmVhZG9ubHkgYXR0cmlidXRlIgorbXNnc3RyICJza3JpdmViZXNreXR0ZXQgYXR0cmlidXR0IgorCisjOiBpZl9weXRob24uYzoxODc5Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICJtYXJr+HJwb3Npc2pvbiB1dGVuZm9yIGJ1ZmZlciIKKworIzogaWZfcHl0aG9uLmM6MTk1NgorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAoZGVsZXRlZCkgYXQgJS44bFg+IgorbXNnc3RyICI8dmluZHVzb2JqZWt0IChzbGV0dGV0KSB2ZWQgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxOTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjx2aW5kdXNvYmpla3QgKHVramVudCkgdmVkICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93ICVkPiIKK21zZ3N0ciAiPHZpbmR1ICVkPiIKKworIzogaWZfcHl0aG9uLmM6MjA0NgorbXNnaWQgIm5vIHN1Y2ggd2luZG93IgorbXNnc3RyICJ2aW5kdWV0IGZpbm5lcyBpa2tlIgorCisjOiBpZl9weXRob24uYzoyMzA3IGlmX3B5dGhvbi5jOjIzNDEgaWZfcHl0aG9uLmM6MjM5NiBpZl9weXRob24uYzoyNDY0CisjOiBpZl9weXRob24uYzoyNTg2IGlmX3B5dGhvbi5jOjI2MzggaWZfdGNsLmM6Njg0IGlmX3RjbC5jOjcyOSBpZl90Y2wuYzo4MDMKKyM6IGlmX3RjbC5jOjg3MyBpZl90Y2wuYzoxOTk5Cittc2dpZCAiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAia2FuIGlra2UgbGFncmUgYW5ncmUtaW5mb3JtYXNqb24iCisKKyM6IGlmX3B5dGhvbi5jOjIzMDkgaWZfcHl0aG9uLmM6MjQwMyBpZl9weXRob24uYzoyNDc1Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBsaW5lIgorbXNnc3RyICJrYW4gaWtrZSBzbGV0dGUgbGluamUiCisKKyM6IGlmX3B5dGhvbi5jOjIzNDYgaWZfcHl0aG9uLmM6MjQ5MSBpZl90Y2wuYzo2OTAgaWZfdGNsLmM6MjAyMQorbXNnaWQgImNhbm5vdCByZXBsYWNlIGxpbmUiCittc2dzdHIgImthbiBpa2tlIGVyc3RhdHRlIGxpbmplIgorCisjOiBpZl9weXRob24uYzoyNTA5IGlmX3B5dGhvbi5jOjI1ODggaWZfcHl0aG9uLmM6MjY0NgorbXNnaWQgImNhbm5vdCBpbnNlcnQgbGluZSIKK21zZ3N0ciAia2FuIGlra2Ugc2V0dGUgaW5uIGxpbmplIgorCisjOiBpZl9weXRob24uYzoyNzUwCittc2dpZCAic3RyaW5nIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJzdHJlbmcga2FuIGlra2UgaW5uZWhvbGRlIGxpbmplc2tpZnQiCisKKyM6IGlmX3J1YnkuYzo0MjIKK21zZ2lkICIiCisiRTI2NjogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFJ1YnkgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjY6IERlbm5lIGtvbW1hbmRvZW4gZXIgZGVha3RpdmVydCwgUnVieS1iaWJsaW90ZWtldCBrdW5uZSBpa2tlIGxhc3Rlcy4iCisKKyM6IGlmX3J1YnkuYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIKK21zZ3N0ciAiRTI3MzogVWtqZW50IGxvbmdqbXAtc3RhdHVzICVkIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIkJ5dHQgbWVsbG9tIGltcGxlbWVudGFzam9uL2RlZmluaXNqb24iCisKKyM6IGlmX3NuaWZmLmM6NjgKK21zZ2lkICJTaG93IGJhc2UgY2xhc3Mgb2YiCittc2dzdHIgIlZpcyBiYXNpc2tsYXNzZSBhdiIKKworIzogaWZfc25pZmYuYzo2OQorbXNnaWQgIlNob3cgb3ZlcnJpZGRlbiBtZW1iZXIgZnVuY3Rpb24iCittc2dzdHIgIlZpcyBvdmVyc3R5cnQgbWVkbGVtc2Z1bmtzam9uIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICJIZW50IGZyYSBmaWwiCisKKyM6IGlmX3NuaWZmLmM6NzEKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIHByb2plY3QiCittc2dzdHIgIkhlbnQgZnJhIHByb3NqZWt0IgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIkhlbnQgZnJhIGFsbGUgcHJvc2pla3RlciIKKworIzogaWZfc25pZmYuYzo3NAorbXNnaWQgIlJldHJpZXZlIgorbXNnc3RyICJIZW50IgorCisjOiBpZl9zbmlmZi5jOjc1Cittc2dpZCAiU2hvdyBzb3VyY2Ugb2YiCittc2dzdHIgIlZpcyBraWxkZSB0aWwiCisKKyM6IGlmX3NuaWZmLmM6NzYKK21zZ2lkICJGaW5kIHN5bWJvbCIKK21zZ3N0ciAiRmlubiBzeW1ib2wiCisKKyM6IGlmX3NuaWZmLmM6NzcKK21zZ2lkICJCcm93c2UgY2xhc3MiCittc2dzdHIgIkJsYSBnamVubm9tIGtsYXNzZSIKKworIzogaWZfc25pZmYuYzo3OAorbXNnaWQgIlNob3cgY2xhc3MgaW4gaGllcmFyY2h5IgorbXNnc3RyICJWaXMga2xhc3NlIGkgaGllcmFya2kiCisKKyM6IGlmX3NuaWZmLmM6NzkKK21zZ2lkICJTaG93IGNsYXNzIGluIHJlc3RyaWN0ZWQgaGllcmFyY2h5IgorbXNnc3RyICJWaXMga2xhc3NlIGkgYmVncmVuc2V0IGhpZXJhcmtpIgorCisjOiBpZl9zbmlmZi5jOjgwCittc2dpZCAiWHJlZiByZWZlcnMgdG8iCittc2dzdHIgIlhyZWYgcmVmZXJlcmVyIHRpbCIKKworIzogaWZfc25pZmYuYzo4MQorbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCittc2dzdHIgIlhyZWYgcmVmZXJlcnQgYXYiCisKKyM6IGlmX3NuaWZmLmM6ODIKK21zZ2lkICJYcmVmIGhhcyBhIgorbXNnc3RyICJYcmVmIGhhciBlbiIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiBicnVrdCBhdiIKKworIzogaWZfc25pZmYuYzo4NAorbXNnaWQgIlNob3cgZG9jdSBvZiIKK21zZ3N0ciAiVmlzIGRvY3UgYXYiCisKKyM6IGlmX3NuaWZmLmM6ODUKK21zZ2lkICJHZW5lcmF0ZSBkb2N1IGZvciIKK21zZ3N0ciAiR2VuZXJlciBkb2N1IGZvciIKKworIzogaWZfc25pZmYuYzo5NworbXNnaWQgIiIKKyJDYW5ub3QgY29ubmVjdCB0byBTTmlGRisuIENoZWNrIGVudmlyb25tZW50IChzbmlmZmVtYWNzIG11c3QgYmUgZm91bmQgaW4gIgorIiRQQVRIKS5cbiIKK21zZ3N0ciAiIgorIkthbiBpa2tlIGtvYmxlIHRpbCBTTmlGRisuIFNqZWtrIG1pbGr4ZXQgKFwiZW52aXJvbm1lbnRcIikgKHNuaWZmZW1hY3MgbeUgIgorImJsaSBmdW5uZXQgaSAkUEFUSCkuXG4iCisKKyM6IGlmX3NuaWZmLmM6NDI1Cittc2dpZCAiRTI3NDogU25pZmY6IEVycm9yIGR1cmluZyByZWFkLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIkUyNzQ6IFNuaWZmOiBGZWlsIHVuZGVyIGxlc2luZy4gRnJha29ibGV0IgorCisjOiBpZl9zbmlmZi5jOjU1MworbXNnaWQgIlNOaUZGKyBpcyBjdXJyZW50bHkgIgorbXNnc3RyICJTTmlGRisgZXIgZm9yIPh5ZWJsaWtrZXQgIgorCisjOiBpZl9zbmlmZi5jOjU1NQorbXNnaWQgIm5vdCAiCittc2dzdHIgImlra2UgIgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAib3Bwa29ibGV0IgorCisjOiBpZl9zbmlmZi5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjc1OiBVbmtub3duIFNOaUZGKyByZXF1ZXN0OiAlcyIKK21zZ3N0ciAiRTI3NTogVWtqZW50IFNOaUZGKy1mb3Jlc3D4cnNlbDogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IEZlaWwgdmVkIG9wcGtvYmxpbmcgdGlsIFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDA5Cittc2dpZCAiRTI3ODogU05pRkYrIG5vdCBjb25uZWN0ZWQiCittc2dzdHIgIkUyNzg6IFNOaUZGKyBpa2tlIHRpbGtvYmxldCIKKworIzogaWZfc25pZmYuYzoxMDE4Cittc2dpZCAiRTI3OTogTm90IGEgU05pRkYrIGJ1ZmZlciIKK21zZ3N0ciAiRTI3OTogSWtrZSBlbiBTTmlGRistYnVmZmVyIgorCisjOiBpZl9zbmlmZi5jOjEwODMKK21zZ2lkICJTbmlmZjogRXJyb3IgZHVyaW5nIHdyaXRlLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIlNuaWZmOiBGZWlsIHVuZGVyIHNrcml2aW5nLiBGcmFrb2JsZXQiCisKKyM6IGlmX3RjbC5jOjQxOAorbXNnaWQgImludmFsaWQgYnVmZmVyIG51bWJlciIKK21zZ3N0ciAidWd5bGRpZyBidWZmZXJudW1tZXIiCisKKyM6IGlmX3RjbC5jOjQ2NCBpZl90Y2wuYzo5MzEgaWZfdGNsLmM6MTExMAorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgImlra2UgaW1wbGVtZW50ZXJ0IGVuZGEiCisKKyM6IGlmX3RjbC5jOjUwMQorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJ1a2plbnQgdmFsZyIKKworIy4gPz8/CisjOiBpZl90Y2wuYzo3NzQKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgImthbiBpa2tlIHNldHRlIGxpbmplKHIpIgorCisjOiBpZl90Y2wuYzo4NDUKK21zZ2lkICJtYXJrIG5vdCBzZXQiCittc2dzdHIgIm1lcmtlIGlra2Ugc2F0dCIKKworIzogaWZfdGNsLmM6ODUxIGlmX3RjbC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicm93ICVkIGNvbHVtbiAlZCIKK21zZ3N0ciAicmFkICVkIGtvbG9ubmUgJWQiCisKKyM6IGlmX3RjbC5jOjg4MQorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgImthbiBpa2tlIHNldHRlIGlubi9sZWdnZSB0aWwgbGluamUiCisKKyM6IGlmX3RjbC5jOjEyNjgKK21zZ2lkICJ1bmtub3duIGZsYWc6ICIKK21zZ3N0ciAidWtqZW50IGZsYWdnOiAiCisKKyM6IGlmX3RjbC5jOjEzMzgKK21zZ2lkICJ1bmtub3duIHZpbU9wdGlvbiIKK21zZ3N0ciAidWtqZW50IHZpbU9wdGlvbiIKKworIzogaWZfdGNsLmM6MTQyMworbXNnaWQgImtleWJvYXJkIGludGVycnVwdCIKK21zZ3N0ciAidGFzdGF0dXJhdmJydWRkIgorCisjOiBpZl90Y2wuYzoxNDI4Cittc2dpZCAidmltIGVycm9yIgorbXNnc3RyICJ2aW0tZmVpbCIKKworIzogaWZfdGNsLmM6MTQ3MQorbXNnaWQgImNhbm5vdCBjcmVhdGUgYnVmZmVyL3dpbmRvdyBjb21tYW5kOiBvYmplY3QgaXMgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAia2FuIGlra2Ugb3BwcmV0dGUgYnVmZmVyL3ZpbmR1a29tbWFuZG86IE9iamVrdGV0IHNsZXR0ZXMiCisKKyM6IGlmX3RjbC5jOjE1NDUKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICIiCisia2FuIGlra2UgcmVnaXN0cmVyZSBjYWxsYmFjay1rb21tYW5kbzogQnVmZmVyL3ZpbmR1IGVyIGFsbGVyZWRlIHNsZXR0ZXQiCisKKyMuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEZhbW91cyBsYXN0IHdvcmQ/CisjOiBpZl90Y2wuYzoxNTYyCittc2dpZCAiIgorIkUyODA6IFRDTCBGQVRBTCBFUlJPUjogcmVmbGlzdCBjb3JydXB0IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLiIKKyJvcmciCittc2dzdHIgIiIKKyJFMjgwOiBUQ0wgS1JJVElTSyBGRUlMOiByZWZsaXN0IHNrYWRldCE/IFZlbm5saWdzdCByYXBwb3J0ZXIgZGV0dGUgdGlsIHZpbS0iCisiZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjE1NjMKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisia2FuIGlra2UgcmVnaXN0cmVyZSBjYWxsYmFjay1rb21tYW5kbzogQnVmZmVyL3ZpbmR1cmVmZXJhbnNlIGlra2UgZnVubmV0IgorCisjOiBpZl90Y2wuYzoxNzI0Cittc2dpZCAiIgorIkU1NzE6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBUY2wgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkU1NzE6IERlbm5lIGtvbW1hbmRvZW4gZXIgZGVha3RpdmVydCwgVGNsLWJpYmxpb3Rla2V0IGt1bm5lIGlra2UgbGFzdGVzLiIKKworIzogaWZfdGNsLmM6MTg4NgorbXNnaWQgIiIKKyJFMjgxOiBUQ0wgRVJST1I6IGV4aXQgY29kZSBpcyBub3QgaW50IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLm9yZyIKK21zZ3N0ciAiIgorIkUyODE6IFRDTC1GRUlMOiBBdnNsdXRuaW5nc2tvZGUgZXIgaWtrZSBpbnQhPyBWZW5ubGlnc3QgcmFwcG9ydGVyIGRldHRlIHRpbCAiCisidmltLWRldkB2aW0ub3JnIgorCisjOiBpZl90Y2wuYzoyMDA3Cittc2dpZCAiY2Fubm90IGdldCBsaW5lIgorbXNnc3RyICJrYW4gaWtrZSBoZW50ZSBsaW5qZSIKKworIzogaWZfeGNtZHNydi5jOjIyNQorbXNnaWQgIlVuYWJsZSB0byByZWdpc3RlciBhIGNvbW1hbmQgc2VydmVyIG5hbWUiCittc2dzdHIgIktsYXJlciBpa2tlIHJlZ2lzdHJlcmUga29tbWFuZG90amVuZXJuYXZuIgorCisjOiBpZl94Y21kc3J2LmM6NDczCittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODogS2xhcnRlIGlra2Ugc2VuZGUga29tbWFuZG8gdGlsIGRlc3RpbmFzam9uc3Byb2dyYW1tZXQiCisKKyM6IGlmX3hjbWRzcnYuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3MzogSW52YWxpZCBzZXJ2ZXIgaWQgdXNlZDogJXMiCittc2dzdHIgIkU1NzM6IFVneWxkaWcgdGplbmVyLWlkIGJydWt0OiAlcyIKKworIzogaWZfeGNtZHNydi5jOjExMTAKKyN+IG1zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCisjfiBtc2dzdHIgIiIKKworIzogbWFpbi5jOjYwCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIlVramVudCB2YWxnIgorCisjOiBtYWluLmM6NjIKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAiRm9yIG1hbmdlIHJlZGlnZXJpbmdzcGFyYW1ldGVyZSIKKworIzogbWFpbi5jOjY0Cittc2dpZCAiQXJndW1lbnQgbWlzc2luZyBhZnRlciIKK21zZ3N0ciAiUGFyYW1ldGVyIG1hbmdsZXIgZXR0ZXIiCisKKyM6IG1haW4uYzo2NgorbXNnaWQgIkdhcmJhZ2UgYWZ0ZXIgb3B0aW9uIgorbXNnc3RyICJT+HBwZWwgZXR0ZXIgdmFsZyIKKworIzogbWFpbi5jOjY4Cittc2dpZCAiVG9vIG1hbnkgXCIrY29tbWFuZFwiLCBcIi1jIGNvbW1hbmRcIiBvciBcIi0tY21kIGNvbW1hbmRcIiBhcmd1bWVudHMiCittc2dzdHIgIiIKKyJGb3IgbWFuZ2UgXCIrY29tbWFuZFwiLSwgXCItYyBjb21tYW5kXCItIGVsbGVyIFwiLS1jbWQga29tbWFuZG9cIi1wYXJhbWV0ZXJlIgorCisjOiBtYWluLmM6NzAKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IGZvciIKK21zZ3N0ciAiVWd5bGRpZyBwYXJhbWV0ZXIgZm9yIgorCisjOiBtYWluLmM6NDY5Cittc2dpZCAiVGhpcyBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSBkaWZmIGZlYXR1cmUuIgorbXNnc3RyICJEZW5uZSBWaW0tdmVyc2pvbmVuIGVyIGtvbXBpbGVydCB1dGVuIGRpZmZlcmFuc2VmdW5rc2pvbmVuLiIKKworIzogbWFpbi5jOjkzNQorbXNnaWQgIkF0dGVtcHQgdG8gb3BlbiBzY3JpcHQgZmlsZSBhZ2FpbjogXCIiCittc2dzdHIgIkZvcnP4ayBw5SDlIOVwbmUgc2tyaXB0ZmlsZW4gaWdqZW46IFwiIgorCisjOiBtYWluLmM6OTQ0Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICJLYW4gaWtrZSDlcG5lIGZvciBsZXNpbmc6IFwiIgorCisjOiBtYWluLmM6OTg4Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICJLYW4gaWtrZSDlcG5lIGZvciBza3JpcHQtdXRkYXRhOiBcIiIKKworIzogbWFpbi5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmlsZXMgdG8gZWRpdFxuIgorbXNnc3RyICIlZCBmaWxlciDlIHJlZGlnZXJlXG4iCisKKyM6IG1haW4uYzoxMjM2Cittc2dpZCAiVmltOiBXYXJuaW5nOiBPdXRwdXQgaXMgbm90IHRvIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiBBZHZhcnNlbDogVXRkYXRhIGflciBpa2tlIHRpbCBlbiB0ZXJtaW5hbFxuIgorCisjOiBtYWluLmM6MTIzOAorbXNnaWQgIlZpbTogV2FybmluZzogSW5wdXQgaXMgbm90IGZyb20gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IEFkdmFyc2VsOiBJbm5kYXRhIGtvbW1lciBpa2tlIGZyYSBlbiB0ZXJtaW5hbFxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjEzMDYKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJwcmUtdmltcmMga29tbWFuZG9saW5qZSIKKworIzogbWFpbi5jOjEzNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IEthbiBpa2tlIGxlc2UgZnJhIFwiJXNcIiIKKworIzogbWFpbi5jOjI0MjAKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk1lciBpbmZvIG1lZDogXCJ2aW0gLWhcIlxuIgorCisjOiBtYWluLmM6MjQ1MworbXNnaWQgIltmaWxlIC4uXSAgICAgICBlZGl0IHNwZWNpZmllZCBmaWxlKHMpIgorbXNnc3RyICJbZmlsZSAuLl0gICAgICAgcmVkaWdlciBzcGVzaWZpc2VydChlKSBmaWwoZXIpIgorCisjOiBtYWluLmM6MjQ1NAorbXNnaWQgIi0gICAgICAgICAgICAgICByZWFkIHRleHQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiLSAgICAgICAgICAgICAgIGxlcyB0ZWtzdCBmcmEgc3RkaW4iCisKKyM6IG1haW4uYzoyNDU1Cittc2dpZCAiLXQgdGFnICAgICAgICAgIGVkaXQgZmlsZSB3aGVyZSB0YWcgaXMgZGVmaW5lZCIKK21zZ3N0ciAiLXQgdGFnICAgICAgICAgIHJlZGlnZXIgZmlsIGh2b3IgZW4gdGFnIGVyIGRlZmluZXJ0IgorCisjOiBtYWluLmM6MjQ1NworbXNnaWQgIi1xIFtlcnJvcmZpbGVdICBlZGl0IGZpbGUgd2l0aCBmaXJzdCBlcnJvciIKK21zZ3N0ciAiLXEgW2ZlaWxmaWxdICAgIHJlZGlnZXIgZmlsIG1lZCBm+HJzdGUgZmVpbCIKKworIzogbWFpbi5jOjI0NjYKK21zZ2lkICIiCisiXG4iCisiXG4iCisidXNhZ2U6IgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiYnJ1azoiCisKKyM6IG1haW4uYzoyNDY5Cittc2dpZCAiIHZpbSBbYXJndW1lbnRzXSAiCittc2dzdHIgIiB2aW0gW3BhcmFtZXRlcmVdICIKKworIzogbWFpbi5jOjI0NzMKK21zZ2lkICIiCisiXG4iCisiICAgb3I6IgorbXNnc3RyICIiCisiXG4iCisiICAgZWxsZXI6IgorCisjOiBtYWluLmM6MjQ3NgorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJQYXJhbWV0ZXJlOlxuIgorCisjOiBtYWluLmM6MjQ3NworbXNnaWQgIi0tXHRcdFx0T25seSBmaWxlIG5hbWVzIGFmdGVyIHRoaXMiCittc2dzdHIgIi0tXHRcdFx0QmFyZSBmaWxuYXZuIGV0dGVyIGRldHRlIgorCisjOiBtYWluLmM6MjQ3OQorbXNnaWQgIi0tbGl0ZXJhbFx0XHREb24ndCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICItLWxpdGVyYWxcdFx0SWtrZSB1dHZpZCBqb2tlcnRlZ24iCisKKyM6IG1haW4uYzoyNDgyCittc2dpZCAiLXJlZ2lzdGVyXHRcdFJlZ2lzdGVyIHRoaXMgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItcmVnaXN0ZXJcdFx0UmVnaXN0cmVyIGd2aW0gZm9yIE9MRSIKKworIzogbWFpbi5jOjI0ODMKK21zZ2lkICItdW5yZWdpc3Rlclx0XHRVbnJlZ2lzdGVyIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXVucmVnaXN0ZXJcdFx0Rmplcm4gT0xFLXJlZ2lzdHJlcmluZyBmb3IgZ3ZpbSIKKworIzogbWFpbi5jOjI0ODYKK21zZ2lkICItZ1x0XHRcdFJ1biB1c2luZyBHVUkgKGxpa2UgXCJndmltXCIpIgorbXNnc3RyICItZ1x0XHRcdEtq+HIgbWVkIEdVSSAoc29tIFwiZ3ZpbVwiKSIKKworIzogbWFpbi5jOjI0ODcKK21zZ2lkICItZiAgb3IgIC0tbm9mb3JrXHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZiAgZWxsZXIgIC0tbm9mb3JrXHRGb3JncnVubjogSWtrZSBmb3JrIG7lciBHVUktZXQgc3RhcnRlcyIKKworIzogbWFpbi5jOjI0ODkKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRWaS1tb2R1cyAoc29tIFwidmlcIikiCisKKyM6IG1haW4uYzoyNDkwCittc2dpZCAiLWVcdFx0XHRFeCBtb2RlIChsaWtlIFwiZXhcIikiCittc2dzdHIgIi1lXHRcdFx0RXgtbW9kdXMgKHNvbSBcImV4XCIpIgorCisjOiBtYWluLmM6MjQ5MQorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHRTdGlsbGUgKGJhdGNoKSBtb2R1cyAoYmFyZSBmb3IgXCJleFwiKSIKKworIzogbWFpbi5jOjI0OTMKK21zZ2lkICItZFx0XHRcdERpZmYgbW9kZSAobGlrZSBcInZpbWRpZmZcIikiCittc2dzdHIgIi1kXHRcdFx0RGlmZmVyYW5zZS1tb2R1cyAoc29tIFwidmltZGlmZlwiKSIKKworIzogbWFpbi5jOjI0OTUKK21zZ2lkICIteVx0XHRcdEVhc3kgbW9kZSAobGlrZSBcImV2aW1cIiwgbW9kZWxlc3MpIgorbXNnc3RyICIteVx0XHRcdExldHQgbW9kdXMgKHNvbSBcImV2aW1cIiwgdXRlbiBtb2R1cykiCisKKyM6IG1haW4uYzoyNDk2Cittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHRTa3JpdmViZXNreXR0ZXQgbW9kdXMgKHNvbSBcInZpZXdcIikiCisKKyM6IG1haW4uYzoyNDk3Cittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdEJlZ3JlbnNldCBtb2R1cyAoc29tIFwicnZpbVwiKSIKKworIzogbWFpbi5jOjI0OTgKK21zZ2lkICItbVx0XHRcdE1vZGlmaWNhdGlvbnMgKHdyaXRpbmcgZmlsZXMpIG5vdCBhbGxvd2VkIgorbXNnc3RyICItbVx0XHRcdE1vZGlmaXNlcmluZyAobGFncmluZyBhdiBmaWxlcikgaWtrZSB0aWxsYXR0IgorCisjOiBtYWluLmM6MjQ5OQorbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdE1vZGlmaXNlcmluZ2VyIGkgdGVrc3RlbiBpa2tlIHRpbGxhdHQiCisKKyM6IG1haW4uYzoyNTAwCittc2dpZCAiLWJcdFx0XHRCaW5hcnkgbW9kZSIKK21zZ3N0ciAiLWJcdFx0XHRCaW7mcm1vZHVzIgorCisjOiBtYWluLmM6MjUwMgorbXNnaWQgIi1sXHRcdFx0TGlzcCBtb2RlIgorbXNnc3RyICItbFx0XHRcdExpc3AtbW9kdXMiCisKKyM6IG1haW4uYzoyNTA0Cittc2dpZCAiLUNcdFx0XHRDb21wYXRpYmxlIHdpdGggVmk6ICdjb21wYXRpYmxlJyIKK21zZ3N0ciAiLUNcdFx0XHRLb21wYXRpYmVsIG1lZCBWaTogJ2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjUwNQorbXNnaWQgIi1OXHRcdFx0Tm90IGZ1bGx5IFZpIGNvbXBhdGlibGU6ICdub2NvbXBhdGlibGUnIgorbXNnc3RyICItTlx0XHRcdElra2UgaGVsdCBWaS1rb21wYXRpYmVsOiAnbm9jb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjI1MDYKK21zZ2lkICItVltOXVx0XHRWZXJib3NlIGxldmVsIgorbXNnc3RyICItVltOXVx0XHRJbmZvcm1hc2pvbnNuaXblIChcIlZlcmJvc2VcIikiCisKKyM6IG1haW4uYzoyNTA3Cittc2dpZCAiLURcdFx0XHREZWJ1Z2dpbmcgbW9kZSIKK21zZ3N0ciAiLURcdFx0XHREZWJ1Z2dpbmdzbW9kdXMiCisKKyM6IG1haW4uYzoyNTA4Cittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHRJbmdlbiBzd2FwZmlsLCBicnVrIGJhcmUgaHVrb21tZWxzZW4iCisKKyM6IG1haW4uYzoyNTA5Cittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0TGlzdCBzd2FwZmlsZXIgb2cgYXZzbHV0dCIKKworIzogbWFpbi5jOjI1MTAKK21zZ2lkICItciAod2l0aCBmaWxlIG5hbWUpXHRSZWNvdmVyIGNyYXNoZWQgc2Vzc2lvbiIKK21zZ3N0ciAiLXIgKG1lZCBmaWxuYXZuKVx0R2plbm9wcHJldHQga3Lmc2pldCD4a3QiCisKKyM6IG1haW4uYzoyNTExCittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRcdFNhbW1lIHNvbSAtciIKKworIzogbWFpbi5jOjI1MTMKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdFx0SWtrZSBicnVrIG5ld2NsaSBmb3Ig5SDlcG5lIHZpbmR1IgorCisjOiBtYWluLmM6MjUxNAorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPGVuaGV0Plx0XHRCcnVrIDxlbmhldD4gZm9yIEkvVSIKKworIzogbWFpbi5jOjI1MTcKK21zZ2lkICItQVx0XHRcdHN0YXJ0IGluIEFyYWJpYyBtb2RlIgorbXNnc3RyICItQVx0XHRcdFN0YXJ0IGkgYXJhYmlzayBtb2R1cyIKKworIzogbWFpbi5jOjI1MjAKK21zZ2lkICItSFx0XHRcdFN0YXJ0IGluIEhlYnJldyBtb2RlIgorbXNnc3RyICItSFx0XHRcdFN0YXJ0IGluIGhlYnJhaXNrIG1vZHVzIgorCisjOiBtYWluLmM6MjUyMworbXNnaWQgIi1GXHRcdFx0U3RhcnQgaW4gRmFyc2kgbW9kZSIKK21zZ3N0ciAiLUZcdFx0XHRTdGFydCBpIHBlcnNpc2sgKEZhcnNpKSBtb2R1cyIKKworIzogbWFpbi5jOjI1MjUKK21zZ2lkICItVCA8dGVybWluYWw+XHRTZXQgdGVybWluYWwgdHlwZSB0byA8dGVybWluYWw+IgorbXNnc3RyICItVCA8dGVybWluYWw+XHRTZXR0IHRlcm1pbmFsdHlwZW4gdGlsIDx0ZXJtaW5hbD4iCisKKyM6IG1haW4uYzoyNTI2Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0QnJ1ayA8dmltcmM+IGlzdGVkZW5mb3IgZXZlbnR1ZWxsIC52aW1yYyIKKworIzogbWFpbi5jOjI1MjgKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0QnJ1ayA8Z3ZpbXJjPiBpc3RlZGVuZm9yIGV2ZW50dWVsbCAuZ3ZpbXJjIgorCisjOiBtYWluLmM6MjUzMAorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHRJa2tlIGxhc3QgcGx1Z2luLXNrcmlwdHMiCisKKyM6IG1haW4uYzoyNTMxCittc2dpZCAiLW9bTl1cdFx0T3BlbiBOIHdpbmRvd3MgKGRlZmF1bHQ6IG9uZSBmb3IgZWFjaCBmaWxlKSIKK21zZ3N0ciAiLW9bTl1cdFx0xXBuZSBOIHZpbmR1ZXIgKHN0YW5kYXJkOiBFdHQgZm9yIGh2ZXIgZmlsKSIKKworIzogbWFpbi5jOjI1MzIKK21zZ2lkICItT1tOXVx0XHRMaWtlIC1vIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5IgorbXNnc3RyICItT1tOXVx0XHRTb20gLW8gbWVuIHNwbGl0dCBsb2RkcmV0dCIKKworIzogbWFpbi5jOjI1MzMKK21zZ2lkICIrXHRcdFx0U3RhcnQgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIitcdFx0XHRTdGFydCBw5SBzbHV0dGVuIGF2IGZpbGVuIgorCisjOiBtYWluLmM6MjUzNAorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8bG5yPlx0XHRTdGFydCBw5SBsaW5qZSA8bG5yPiIKKworIzogbWFpbi5jOjI1MzYKK21zZ2lkICItLWNtZCA8Y29tbWFuZD5cdEV4ZWN1dGUgPGNvbW1hbmQ+IGJlZm9yZSBsb2FkaW5nIGFueSB2aW1yYyBmaWxlIgorbXNnc3RyICItLWNtZCA8a29tbWFuZG8+XHRLavhyIDxrb21tYW5kbz4gZvhyIGxhc3RpbmcgYXYgdmltcmMtZmlsZXIiCisKKyM6IG1haW4uYzoyNTM4Cittc2dpZCAiLWMgPGNvbW1hbmQ+XHRcdEV4ZWN1dGUgPGNvbW1hbmQ+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1jIDxrb21tYW5kbz5cdFx0S2r4ciA8a29tbWFuZG8+IGV0dGVyIGxhc3RpbmcgYXYgZvhyc3RlIGZpbCIKKworIzogbWFpbi5jOjI1MzkKK21zZ2lkICItUyA8c2Vzc2lvbj5cdFx0U291cmNlIGZpbGUgPHNlc3Npb24+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1TIDz4a3Q+XHRcdEtq+HIgZmlsZW4gPPhrdD4gZXR0ZXIgbGFzdGluZyBhdiBm+HJzdGUgZmlsIgorCisjOiBtYWluLmM6MjU0MAorbXNnaWQgIi1zIDxzY3JpcHRpbj5cdFJlYWQgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBmaWxlIDxzY3JpcHRpbj4iCittc2dzdHIgIi1zIDxpbm5za3JpcHQ+XHRMZXMgbm9ybWFsbW9kdXMta29tbWFuZG9lciBmcmEgZmlsZW4gPGlubnNrcmlwdD4iCisKKyM6IG1haW4uYzoyNTQxCittc2dpZCAiLXcgPHNjcmlwdG91dD5cdEFwcGVuZCBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLXcgPHV0c2tyaXB0Plx0TGVnZyBhbGxlIHNrcmV2bmUga29tbWFuZG9lciB0aWwgZmlsZW4gPHV0c2tyaXB0PiIKKworIzogbWFpbi5jOjI1NDIKK21zZ2lkICItVyA8c2NyaXB0b3V0Plx0V3JpdGUgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi1XIDx1dHNrcmlwdD5cdFNrcml2IGFsbGUgc2tyZXZuZSBrb21tYW5kb2VyIHRpbCBmaWxlbiA8dXRza3JpcHQ+IgorCisjOiBtYWluLmM6MjU0NAorbXNnaWQgIi14XHRcdFx0RWRpdCBlbmNyeXB0ZWQgZmlsZXMiCittc2dzdHIgIi14XHRcdFx0UmVkaWdlciBrcnlwdGVydGUgZmlsZXIiCisKKyM6IG1haW4uYzoyNTQ4Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRDb25uZWN0IHZpbSB0byB0aGlzIHBhcnRpY3VsYXIgWC1zZXJ2ZXIiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0S29ibGUgdmltIHRpbCBkZW5uZSBzcGVzaWVsbGUgWC10amVuZXJlbiIKKworIzogbWFpbi5jOjI1NTAKK21zZ2lkICItWFx0XHRcdERvIG5vdCBjb25uZWN0IHRvIFggc2VydmVyIgorbXNnc3RyICItWFx0XHRcdFVubmflIG9wcGtvYmxpbmcgdGlsIFgtdGplbmVyIgorCisjOiBtYWluLmM6MjU1MworbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgaWYgcG9zc2libGUiCittc2dzdHIgIi0tcmVtb3RlIDxmaWxlcj5cdFJlZGlnZXIgPGZpbGVyPiBw5SBlbiBWaW0tdGplbmVyIGh2aXMgbXVsaWciCisKKyM6IG1haW4uYzoyNTU0Cittc2dpZCAiLS1yZW1vdGUtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiLS1yZW1vdGUtc2lsZW50IDxmaWxlcj4gIFNhbW1lLCBpa2tlIGtsYWcgaHZpcyB0amVuZXJlbiBtYW5nbGVyIgorCisjOiBtYWluLmM6MjU1NQorbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcz4gIEFzIC0tcmVtb3RlIGJ1dCB3YWl0IGZvciBmaWxlcyB0byBoYXZlIGJlZW4gZWRpdGVkIgorbXNnc3RyICIiCisiLS1yZW1vdGUtd2FpdCA8ZmlsZXI+ICBTb20gLS1yZW1vdGUgbWVuIHZlbnQgcOUgZmlsZXIgc29tIGJsaXIgcmVkaWdlcnQiCisKKyM6IG1haW4uYzoyNTU2Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiLS1yZW1vdGUtd2FpdC1zaWxlbnQgPGZpbGVzPiAgU2FtbWUsIGlra2Uga2xhZyBodmlzIHRqZW5lcmVuIG1hbmdsZXIiCisKKyM6IG1haW4uYzoyNTU3Cittc2dpZCAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFNlbmQgPGtleXM+IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUtc2VuZCA8bvhrbGVyPlx0U2VuZCA8bvhrbGVyPiB0aWwgZW4gVmltLXRqZW5lciBvZyBhdnNsdXR0IgorCisjOiBtYWluLmM6MjU1OAorbXNnaWQgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWF0ZSA8ZXhwcj4gaW4gYSBWaW0gc2VydmVyIGFuZCBwcmludCByZXN1bHQiCittc2dzdHIgIiIKKyItLXJlbW90ZS1leHByIDx1dHRyeWtrPlx0RXZhbHVlciA8dXR0cnlraz4gcOUgZW4gVmltLXRqZW5lciBvZyBza3JpdiAiCisicmVzdWx0YXRldCIKKworIzogbWFpbi5jOjI1NTkKK21zZ2lkICItLXNlcnZlcmxpc3RcdFx0TGlzdCBhdmFpbGFibGUgVmltIHNlcnZlciBuYW1lcyBhbmQgZXhpdCIKK21zZ3N0ciAiLS1zZXJ2ZXJsaXN0XHRcdExpc3QgbmF2biBw5SB0aWxnamVuZ2VsaWdlIFZpbS10amVuZXJlIG9nIGF2c2x1dHQiCisKKyM6IG1haW4uYzoyNTYwCittc2dpZCAiLS1zZXJ2ZXJuYW1lIDxuYW1lPlx0U2VuZCB0by9iZWNvbWUgdGhlIFZpbSBzZXJ2ZXIgPG5hbWU+IgorbXNnc3RyICItLXNlcnZlcm5hbWUgPG5hdm4+XHRTZW5kIHRpbC9ibGkgVmltLXRqZW5lcmVuIDxuYXZuPiIKKworIzogbWFpbi5jOjI1NjMKK21zZ2lkICItaSA8dmltaW5mbz5cdFx0VXNlIDx2aW1pbmZvPiBpbnN0ZWFkIG9mIC52aW1pbmZvIgorbXNnc3RyICItaSA8dmltaW5mbz5cdFx0QnJ1ayA8dmltaW5mbz4gaXN0ZWRlbmZvciAudmltaW5mbyIKKworIzogbWFpbi5jOjI1NjUKK21zZ2lkICItaCAgb3IgIC0taGVscFx0UHJpbnQgSGVscCAodGhpcyBtZXNzYWdlKSBhbmQgZXhpdCIKK21zZ3N0ciAiLWggIGVsbGVyICAtLWhlbHBcdFNrcml2IGhqZWxwZW4gKGRlbm5lIHRla3N0ZW4pIG9nIGF2c2x1dHQiCisKKyM6IG1haW4uYzoyNTY2Cittc2dpZCAiLS12ZXJzaW9uXHRcdFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQiCittc2dzdHIgIi0tdmVyc2lvblx0XHRTa3JpdiB2ZXJzam9uc2luZm9ybWFzam9uIG9nIGF2c2x1dHQiCisKKyM6IG1haW4uYzoyNTcwCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKE1vdGlmIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiUGFyYW1ldGVyZSBnamVua2plbnQgYXYgZ3ZpbSAoTW90aWYtdmVyc2pvbik6XG4iCisKKyM6IG1haW4uYzoyNTc0Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKG5lWHRhdyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBhcmFtZXRlcmUgZ2plbmtqZW50IGF2IGd2aW0gKG5lWHRhdy12ZXJzam9uKTpcbiIKKworIzogbWFpbi5jOjI1NzYKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoQXRoZW5hIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiUGFyYW1ldGVyZSBnamVua2plbnQgYXYgZ3ZpbSAoQXRoZW5hLXZlcnNqb24pOlxuIgorCisjOiBtYWluLmM6MjU4MAorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4iCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0S2r4ciB2aW0gcOUgPGRpc3BsYXk+IgorCisjOiBtYWluLmM6MjU4MQorbXNnaWQgIi1pY29uaWNcdFx0U3RhcnQgdmltIGljb25pZmllZCIKK21zZ3N0ciAiLWljb25pY1x0XHRTdGFydCB2aW0gc29tIGlrb24iCisKKyM6IG1haW4uYzoyNTgzCittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG5hdm4+XHRcdEJydWsgcmVzc3VycyBzb20gb20gVmltIHZhciA8bmF2bj4iCisKKyM6IG1haW4uYzoyNTg0Cittc2dpZCAiXHRcdFx0ICAoVW5pbXBsZW1lbnRlZClcbiIKK21zZ3N0ciAiXHRcdFx0ICAoSWtrZSBpbXBsZW1lbnRlcnQpXG4iCisKKyM6IG1haW4uYzoyNTg2Cittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8ZmFyZ2U+XHRCcnVrIDxmYXJnZT4gcOUgYmFrZ3J1bm5lbiAob2dz5TogLWJnKSIKKworIzogbWFpbi5jOjI1ODcKK21zZ2lkICItZm9yZWdyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mZykiCittc2dzdHIgIi1mb3JlZ3JvdW5kIDxmYXJnZT5cdEJydWsgPGZhcmdlPiBw5SBub3JtYWwgdGVrc3QgKG9nc+U6IC1mZykiCisKKyM6IG1haW4uYzoyNTg4IG1haW4uYzoyNjA4Cittc2dpZCAiLWZvbnQgPGZvbnQ+XHRcdFVzZSA8Zm9udD4gZm9yIG5vcm1hbCB0ZXh0IChhbHNvOiAtZm4pIgorbXNnc3RyICItZm9udCA8c2tyaWZ0dHlwZT5cdFx0QnJ1ayA8c2tyaWZ0dHlwZT4gcOUgbm9ybWFsIHRla3N0IChvZ3PlOiAtZm4pIgorCisjOiBtYWluLmM6MjU4OQorbXNnaWQgIi1ib2xkZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGJvbGQgdGV4dCIKK21zZ3N0ciAiLWJvbGRmb250IDxza3JpZnR0eXBlPlx0QnJ1ayA8c2tyaWZ0dHlwZT4gcOUgZmV0IHNrcmlmdCIKKworIzogbWFpbi5jOjI1OTAKK21zZ2lkICItaXRhbGljZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGl0YWxpYyB0ZXh0IgorbXNnc3RyICItaXRhbGljZm9udCA8c2tyaWZ0dHlwZT5cdEJydWsgPHNrcmlmdHR5cGU+IHDlIHNrcuUgdGVrc3QiCisKKyM6IG1haW4uYzoyNTkxIG1haW4uYzoyNjA5Cittc2dpZCAiLWdlb21ldHJ5IDxnZW9tPlx0VXNlIDxnZW9tPiBmb3IgaW5pdGlhbCBnZW9tZXRyeSAoYWxzbzogLWdlb20pIgorbXNnc3RyICIiCisiLWdlb21ldHJ5IDxnZW9tPlx0QnJ1ayA8Z2VvbT4gZm9yIGlubmxlZGVuZGUgdmluZHVzcGxhc3NlcmluZyAob2dz5TogLWdlb20pIgorCisjOiBtYWluLmM6MjU5MgorbXNnaWQgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHRVc2UgYSBib3JkZXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLWJ3KSIKK21zZ3N0ciAiIgorIi1ib3JkZXJ3aWR0aCA8YnJlZGRlPlx0QnJ1ayBlbiByYW1tZWJyZWRkZSB0aWxzdmFyZW5kZSA8YnJlZGRlPiAob2dz5TogLWJ3KSIKKworIzogbWFpbi5jOjI1OTMKK21zZ2lkICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgVXNlIGEgc2Nyb2xsYmFyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1zdykiCittc2dzdHIgIiIKKyItc2Nyb2xsYmFyd2lkdGggPGJyZWRkZT4gIEJydWsgZW4gcnVsbGVmZWx0YnJlZGRlIHRpbHN2YXJlbmRlIDxicmVkZGU+ICIKKyIob2dz5TogLXN3KSIKKworIzogbWFpbi5jOjI1OTUKK21zZ2lkICItbWVudWhlaWdodCA8aGVpZ2h0Plx0VXNlIGEgbWVudSBiYXIgaGVpZ2h0IG9mIDxoZWlnaHQ+IChhbHNvOiAtbWgpIgorbXNnc3RyICIiCisiLW1lbnVoZWlnaHQgPGj4eWRlPlx0QnJ1ayBlbiBtZW55Ymxva2to+HlkZSB0aWxzdmFyZW5kZSA8aPh5ZGU+IChvZ3PlOiAtbWgpIgorCisjOiBtYWluLmM6MjU5NyBtYWluLmM6MjYxMAorbXNnaWQgIi1yZXZlcnNlXHRcdFVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiAtcnYpIgorbXNnc3RyICItcmV2ZXJzZVx0XHRCcnVrIGludmVycyB2aWRlbyAob2dz5TogLXJ2KSIKKworIzogbWFpbi5jOjI1OTgKK21zZ2lkICIrcmV2ZXJzZVx0XHREb24ndCB1c2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogK3J2KSIKK21zZ3N0ciAiK3JldmVyc2VcdFx0SWtrZSBicnVrIGludmVycyB2aWRlbyAob2dz5TogK3J2KSIKKworIzogbWFpbi5jOjI1OTkKK21zZ2lkICIteHJtIDxyZXNvdXJjZT5cdFNldCB0aGUgc3BlY2lmaWVkIHJlc291cmNlIgorbXNnc3RyICIteHJtIDxyZXNzdXJzPlx0U2V0dCBkZW4gc3Blc2lmaXNlcnRlIHJlc3N1cnNlbiIKKworIzogbWFpbi5jOjI2MDIKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoUklTQyBPUyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBhcmFtZXRlcmUgZ2plbmtqZW50IGF2IGd2aW0gKFJJU0MgT1MtdmVyc2pvbik6XG4iCisKKyM6IG1haW4uYzoyNjAzCittc2dpZCAiLS1jb2x1bW5zIDxudW1iZXI+XHRJbml0aWFsIHdpZHRoIG9mIHdpbmRvdyBpbiBjb2x1bW5zIgorbXNnc3RyICItLWNvbHVtbnMgPGFudGFsbD5cdElubmxlZGVuZGUgYnJlZGRlIHDlIHZpbmR1IGkga29sb25uZXIiCisKKyM6IG1haW4uYzoyNjA0Cittc2dpZCAiLS1yb3dzIDxudW1iZXI+XHRJbml0aWFsIGhlaWdodCBvZiB3aW5kb3cgaW4gcm93cyIKK21zZ3N0ciAiLS1yb3dzIDxhbnRhbGw+XHRJbm5sZWRlbmRlIGj4eWRlIHDlIHZpbmR1IGkgcmFkZXIiCisKKyM6IG1haW4uYzoyNjA3Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEdUSysgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJQYXJhbWV0ZXJlIGdqZW5ramVudCBhdiBndmltIChHVEsrLXZlcnNqb24pOlxuIgorCisjOiBtYWluLmM6MjYxMQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4gKGFsc286IC0tZGlzcGxheSkiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0S2r4ciB2aW0gcOUgPGRpc3BsYXk+IChvZ3PlOiAtLWRpc3BsYXkpIgorCisjOiBtYWluLmM6MjYxMworbXNnaWQgIi0tcm9sZSA8cm9sZT5cdFNldCBhIHVuaXF1ZSByb2xlIHRvIGlkZW50aWZ5IHRoZSBtYWluIHdpbmRvdyIKK21zZ3N0ciAiLS1yb2xlIDxyb2xlPlx0U2V0dCBlbiB1bmlrIFwicm9sZVwiIGZvciDlIGlkZW50aWZpc2VyZSBob3ZlZHZpbmR1ZXQiCisKKyM6IG1haW4uYzoyNjE1Cittc2dpZCAiLS1zb2NrZXRpZCA8eGlkPlx0T3BlbiBWaW0gaW5zaWRlIGFub3RoZXIgR1RLIHdpZGdldCIKK21zZ3N0ciAiLS1zb2NrZXRpZCA8eGlkPlx0xXBuZSBWaW0gaW5uZW5mb3IgZXQgYW5uZXQgR1RLLXNramVybWVsZW1lbnQiCisKKyM6IG1haW4uYzoyNjE4Cittc2dpZCAiLVAgPHBhcmVudCB0aXRsZT5cdE9wZW4gVmltIGluc2lkZSBwYXJlbnQgYXBwbGljYXRpb24iCittc2dzdHIgIi1QIDxmb3JlbGRyZXRpdHRlbD5cdFN0YXJ0IFZpbSBpbm5lbmZvciBldCBmb3JlbGRyZXByb2dyYW0iCisKKyM6IG1haW4uYzoyODU2Cittc2dpZCAiTm8gZGlzcGxheSIKK21zZ3N0ciAiSW5nZW4gZGlzcGxheSIKKworIy4gRmFpbGVkIHRvIHNlbmQsIGFib3J0LgorIzogbWFpbi5jOjI4NzEKK21zZ2lkICI6IFNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICI6IFNlbmQgZmVpbGV0LlxuIgorCisjLiBMZXQgdmltIHN0YXJ0IG5vcm1hbGx5LgorIzogbWFpbi5jOjI4NzcKK21zZ2lkICI6IFNlbmQgZmFpbGVkLiBUcnlpbmcgdG8gZXhlY3V0ZSBsb2NhbGx5XG4iCittc2dzdHIgIjogU2VuZCBmZWlsZXQuIFBy+HZlciDlIHV0ZvhyZSBsb2thbHRcbiIKKworIzogbWFpbi5jOjI5MTUgbWFpbi5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgb2YgJWQgZWRpdGVkIgorbXNnc3RyICIlZCBhdiAlZCByZWRpZ2VydCIKKworIzogbWFpbi5jOjI5NTgKK21zZ2lkICJObyBkaXNwbGF5OiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICJJbmdlbiBkaXNwbGF5OiBTZW5kaW5nIGF2IHV0dHJ5a2sgZmVpbGV0LlxuIgorCisjOiBtYWluLmM6Mjk3MAorbXNnaWQgIjogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiBTZW5kaW5nIGF2IHV0dHJ5a2sgZmVpbGV0LlxuIgorCisjOiBtYXJrLmM6NzA5Cittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICJJbmdlbiBtZXJrZXIgc2F0dCIKKworIzogbWFyay5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgzOiBObyBtYXJrcyBtYXRjaGluZyBcIiVzXCIiCittc2dzdHIgIkUyODM6IEluZ2VuIG1lcmtlciBzYW1zdmFyZXIgbWVkIFwiJXNcIiIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzIyCittc2dpZCAiIgorIlxuIgorIm1hcmsgbGluZSAgY29sIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIm1lcmsgbGluamUga29sIGZpbC90ZWtzdCIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzYwCittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgaG9wcCBsaW5qZSBrb2wgZmlsL3Rla3N0IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo4MDUKK21zZ2lkICIiCisiXG4iCisiY2hhbmdlIGxpbmUgIGNvbCB0ZXh0IgorbXNnc3RyICIiCisiXG4iCisiZm9yYW5kIGxpbmplIGtvbCB0ZWtzdCIKKworIzogbWFyay5jOjEyODEKK21zZ2lkICIiCisiXG4iCisiIyBGaWxlIG1hcmtzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBGaWxtZXJrZXI6XG4iCisKKyMuIFdyaXRlIHRoZSBqdW1wbGlzdCB3aXRoIC0nCisjOiBtYXJrLmM6MTMxNgorbXNnaWQgIiIKKyJcbiIKKyIjIEp1bXBsaXN0IChuZXdlc3QgZmlyc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBIb3BwbGlzdGUgKG55ZXN0ZSBm+HJzdCk6XG4iCisKKyM6IG1hcmsuYzoxNDEyCittc2dpZCAiIgorIlxuIgorIiMgSGlzdG9yeSBvZiBtYXJrcyB3aXRoaW4gZmlsZXMgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBIaXN0b3JpZSBmb3IgbWVya2VyIGlubmUgaSBmaWxlciAoeW5nc3QgdGlsIGVsZHN0KTpcbiIKKworIzogbWFyay5jOjE1MDEKK21zZ2lkICJNaXNzaW5nICc+JyIKK21zZ3N0ciAiTWFuZ2xlciAnPiciCisKKyM6IG1ieXRlLmM6NDY3Cittc2dpZCAiRTU0MzogTm90IGEgdmFsaWQgY29kZXBhZ2UiCittc2dzdHIgIkU1NDM6IEVyIGlra2UgZW4gZ3lsZGlnIGNvZGVwYWdlIgorCisjOiBtYnl0ZS5jOjQ0MzEKK21zZ2lkICJFMjg0OiBDYW5ub3Qgc2V0IElDIHZhbHVlcyIKK21zZ3N0ciAiRTI4NDogS2FuIGlra2Ugc2V0dGUgSUMtdmVyZGllciAoXCJJbnB1dCBDb250ZXh0XCIpIgorCisjOiBtYnl0ZS5jOjQ1ODMKKyN+IG1zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCisjfiBtc2dzdHIgIiIKKworIzogbWJ5dGUuYzo0NzQxCittc2dpZCAiRTI4NjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgbWV0aG9kIgorbXNnc3RyICJFMjg2OiBLbGFydGUgaWtrZSDlcG5lIGlubmRhdGFtZXRvZGUiCisKKyM6IG1ieXRlLmM6NDc1MgorbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiIgorIkUyODc6IEFkdmFyc2VsOiBLbGFydGUgaWtrZSBzZXR0ZSBcImRlc3Ryb3kgY2FsbGJhY2tcIiB0aWwgaW5uZGF0YW1ldG9kZSIKKworIzogbWJ5dGUuYzo0NzU4CisjfiBtc2dpZCAiRTI4ODogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgc3R5bGUiCisjfiBtc2dzdHIgIiIKKworIzogbWJ5dGUuYzo0ODE1CisjfiBtc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCisjfiBtc2dzdHIgIiIKKworIzogbWJ5dGUuYzo0ODg5Cittc2dpZCAiRTI5MDogb3Zlci10aGUtc3BvdCBzdHlsZSByZXF1aXJlcyBmb250c2V0IgorbXNnc3RyICJFMjkwOiBcIm92ZXItdGhlLXNwb3RcIi1zdGlsIHRyZW5nZXIgZXQgc2tyaWZ0dHlwZXNldHQiCisKKyM6IG1ieXRlLmM6NDkyNQorbXNnaWQgIkUyOTE6IFlvdXIgR1RLKyBpcyBvbGRlciB0aGFuIDEuMi4zLiBTdGF0dXMgYXJlYSBkaXNhYmxlZCIKK21zZ3N0ciAiRTI5MTogRGluIEdUSysgZXIgZWxkcmUgZW5uIDEuMi4zLiBTdGF0dXNvbXLlZGUgZGVha3RpdmVydCIKKworIzogbWJ5dGUuYzo1MjMyCittc2dpZCAiRTI5MjogSW5wdXQgTWV0aG9kIFNlcnZlciBpcyBub3QgcnVubmluZyIKK21zZ3N0ciAiRTI5MjogSW5uZGF0YW1ldG9kZXRqZW5lciBravhyZXIgaWtrZSIKKworIzogbWVtZmlsZS5jOjQ4OAorbXNnaWQgIkUyOTM6IGJsb2NrIHdhcyBub3QgbG9ja2VkIgorbXNnc3RyICJFMjkzOiBCbG9ra2VuIHZhciBpa2tlIGzlc3QiCisKKyM6IG1lbWZpbGUuYzoxMDEwCittc2dpZCAiRTI5NDogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgcmVhZCIKK21zZ3N0ciAiRTI5NDogU/hrZWZlaWwgaSBsZXNpbmcgYXYgc3dhcGZpbCIKKworIzogbWVtZmlsZS5jOjEwMTUKK21zZ2lkICJFMjk1OiBSZWFkIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5NTogTGVzZWZlaWwgaSBzd2FwZmlsIgorCisjOiBtZW1maWxlLmM6MTA2NworbXNnaWQgIkUyOTY6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHdyaXRlIgorbXNnc3RyICJFMjk2OiBT+GtlZmVpbCBpIHNrcml2aW5nIHRpbCBzd2FwZmlsIgorCisjOiBtZW1maWxlLmM6MTA4NQorbXNnaWQgIkUyOTc6IFdyaXRlIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5NzogU2tyaXZlZmVpbCBpIHN3YXBmaWwiCisKKyM6IG1lbWZpbGUuYzoxMjgyCittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiBTd2FwZmlsZW4gZmlubmVzIGFsbGVyZWRlIChzeW1sZW5rZS1hbmdyZXA/KSIKKworIzogbWVtbGluZS5jOjI3NQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMD8iCittc2dzdHIgIkUyOTg6IEhlbnRldCBpa2tlIGJsb2trIG51bW1lciAwPyIKKworIzogbWVtbGluZS5jOjMxNQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMT8iCittc2dzdHIgIkUyOTg6IEhlbnRldCBpa2tlIGJsb2trIG51bW1lciAxPyIKKworIzogbWVtbGluZS5jOjMzMworbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMj8iCittc2dzdHIgIkUyOTg6IEhlbnRldCBpa2tlIGJsb2trIG51bW1lciAyPyIKKworIy4gY291bGQgbm90IChyZSlvcGVuIHRoZSBzd2FwIGZpbGUsIHdoYXQgY2FuIHdlIGRvPz8/PworIzogbWVtbGluZS5jOjQ0NAorbXNnaWQgIkUzMDE6IE9vcHMsIGxvc3QgdGhlIHN3YXAgZmlsZSEhISIKK21zZ3N0ciAiRTMwMTogT3BwcywgbWlzdGV0IHN3YXBmaWxlbiEhISIKKworIzogbWVtbGluZS5jOjQ0OQorbXNnaWQgIkUzMDI6IENvdWxkIG5vdCByZW5hbWUgc3dhcCBmaWxlIgorbXNnc3RyICJFMzAyOiBLbGFydGUgaWtrZSBza2lmdGUgbmF2biBw5SBzd2FwZmlsIgorCisjOiBtZW1saW5lLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDM6IFVuYWJsZSB0byBvcGVuIHN3YXAgZmlsZSBmb3IgXCIlc1wiLCByZWNvdmVyeSBpbXBvc3NpYmxlIgorbXNnc3RyICJFMzAzOiBLbGFydGUgaWtrZSDlcG5lIHN3YXBmaWwgZm9yIFwiJXNcIiwgZ2plbm9wcHJldHRpbmcgdW11bGlnIgorCisjOiBtZW1saW5lLmM6NjE4Cittc2dpZCAiRTMwNDogbWxfdGltZXN0YW1wOiBEaWRuJ3QgZ2V0IGJsb2NrIDA/PyIKK21zZ3N0ciAiRTMwNDogbWxfdGltZXN0YW1wOiBIZW50ZXQgaWtrZSBibG9rayAwPz8iCisKKyM6IG1lbWxpbmUuYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNTogTm8gc3dhcCBmaWxlIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiRTMwNTogSW5nZW4gc3dhcGZpbCBmdW5uZXQgZm9yICVzIgorCisjOiBtZW1saW5lLmM6NzY4Cittc2dpZCAiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIKK21zZ3N0ciAiU2tyaXYgbnVtbWVyZXQgcOUgc3dhcGZpbCBzb20gc2thbCBicnVrZXMgKDAgZm9yIOUgYXZzbHV0dGUpOiAiCisKKyM6IG1lbWxpbmUuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNjogQ2Fubm90IG9wZW4gJXMiCittc2dzdHIgIkUzMDY6IEthbiBpa2tlIOVwbmUgJXMiCisKKyM6IG1lbWxpbmUuYzo4MzUKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBibG9jayAwIGZyb20gIgorbXNnc3RyICJLbGFydGUgaWtrZSBsZXNlIGJsb2trIDAgZnJhICIKKworIzogbWVtbGluZS5jOjgzOAorbXNnaWQgIiIKKyJcbiIKKyJNYXliZSBubyBjaGFuZ2VzIHdlcmUgbWFkZSBvciBWaW0gZGlkIG5vdCB1cGRhdGUgdGhlIHN3YXAgZmlsZS4iCittc2dzdHIgIiIKKyJcbiIKKyJEZXQgZXIgbXVsaWcgaW5nZW4gZm9yYW5kcmluZ2VyIGJsZSBnam9ydCwgZWxsZXIgVmltIG9wcGRhdGVydGUgaWtrZSAiCisic3dhcGZpbGVuLiIKKworIzogbWVtbGluZS5jOjg0OCBtZW1saW5lLmM6ODY1Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiIGthbiBpa2tlIGJydWtlcyBtZWQgZGVubmUgVmltLXZlcnNqb25lbi5cbiIKKworIzogbWVtbGluZS5jOjg1MAorbXNnaWQgIlVzZSBWaW0gdmVyc2lvbiAzLjAuXG4iCittc2dzdHIgIkJydWsgVmltIHZlcnNqb24gMy4wLlxuIgorCisjOiBtZW1saW5lLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDc6ICVzIHNlciBpa2tlIHV0IHNvbSBlbiBWaW0tc3dhcGZpbCIKKworIzogbWVtbGluZS5jOjg2OQorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIga2FuIGlra2UgYnJ1a2VzIHDlIGRlbm5lIG1hc2tpbmVuLlxuIgorCisjOiBtZW1saW5lLmM6ODcxCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICJGaWxlbiBibGUgbGFnZXQgcOUgIgorCisjOiBtZW1saW5lLmM6ODc1Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyJlbGxlciBmaWxlbiBlciBibGl0dCD4ZGVsYWd0LiIKKworIzogbWVtbGluZS5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIgorbXNnc3RyICJCcnVrZXIgc3dhcGZpbGVuIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJPcmlnaW5hbCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiT3JpZ2luYWxmaWwgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTIzCittc2dpZCAiRTMwODogV2FybmluZzogT3JpZ2luYWwgZmlsZSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQiCittc2dzdHIgIkUzMDg6IEFkdmFyc2VsOiBPcmlnaW5hbGZpbGVuIGthbiBoYSBibGl0dCBmb3JhbmRyZXQiCisKKyM6IG1lbWxpbmUuYzo5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwOTogVW5hYmxlIHRvIHJlYWQgYmxvY2sgMSBmcm9tICVzIgorbXNnc3RyICJFMzA5OiBLbGFydGUgaWtrZSBsZXNlIGJsb2trIDEgZnJhICVzIgorCisjOiBtZW1saW5lLmM6OTgwCittc2dpZCAiPz8/TUFOWSBMSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz9NQU5HRSBMSU5KRVIgTUFOR0xFUiIKKworIzogbWVtbGluZS5jOjk5NgorbXNnaWQgIj8/P0xJTkUgQ09VTlQgV1JPTkciCittc2dzdHIgIj8/P0ZFSUwgTElOSkVBTlRBTEwiCisKKyM6IG1lbWxpbmUuYzoxMDAzCittc2dpZCAiPz8/RU1QVFkgQkxPQ0siCittc2dzdHIgIj8/P1RPTSBCTE9LSyIKKworIzogbWVtbGluZS5jOjEwMjkKK21zZ2lkICI/Pz9MSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz9MSU5KRVIgTUFOR0xFUiIKKworIzogbWVtbGluZS5jOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxMDogQmxvY2sgMSBJRCB3cm9uZyAoJXMgbm90IGEgLnN3cCBmaWxlPykiCittc2dzdHIgIkUzMTA6IElEIHRpbCBibG9rayAxIGVyIGZlaWwgKCVzIGlra2UgZW4gXCIuc3dwXCItZmlsPykiCisKKyM6IG1lbWxpbmUuYzoxMDY2Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/QkxPS0sgTUFOR0xFUiIKKworIzogbWVtbGluZS5jOjEwODIKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgYmUgbWVzc2VkIHVwIgorbXNnc3RyICI/Pz8gSGVyZnJhIHRpbCA/Pz9TTFVUVCBrYW4gbGluamVyIHbmcmUgcm90ZXQgdGlsIgorCisjOiBtZW1saW5lLmM6MTA5OAorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBoYXZlIGJlZW4gaW5zZXJ0ZWQvZGVsZXRlZCIKK21zZ3N0ciAiPz8/IEhlcmZyYSB0aWwgPz8/U0xVVFQga2FuIGxpbmplciBoYSBibGl0dCBsYWd0IHRpbCBlbGxlciBzbGV0dGV0IgorCisjOiBtZW1saW5lLmM6MTExOAorbXNnaWQgIj8/P0VORCIKK21zZ3N0ciAiPz8/U0xVVFQiCisKKyM6IG1lbWxpbmUuYzoxMTQ0Cittc2dpZCAiRTMxMTogUmVjb3ZlcnkgSW50ZXJydXB0ZWQiCittc2dzdHIgIkUzMTE6IEdqZW5vcHByZXR0aW5nIGF2YnJ1dHQiCisKKyM6IG1lbWxpbmUuYzoxMTQ5Cittc2dpZCAiIgorIkUzMTI6IEVycm9ycyBkZXRlY3RlZCB3aGlsZSByZWNvdmVyaW5nOyBsb29rIGZvciBsaW5lcyBzdGFydGluZyB3aXRoID8/PyIKK21zZ3N0ciAiIgorIkUzMTI6IEZlaWwgb3BwZGFnZXQgdW5kZXIgZ2plbm9wcHJldHRpbmc7IHNlIGV0dGVyIGxpbmplciBzb20gc3RhcnRlciBtZWQgPz8/IgorCisjOiBtZW1saW5lLmM6MTE1MQorbXNnaWQgIlNlZSBcIjpoZWxwIEUzMTJcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIlNlIFwiOmhlbHAgRTMxMlwiIGZvciBtZXIgaW5mb3JtYXNqb24uIgorCisjOiBtZW1saW5lLmM6MTE1NgorbXNnaWQgIlJlY292ZXJ5IGNvbXBsZXRlZC4gWW91IHNob3VsZCBjaGVjayBpZiBldmVyeXRoaW5nIGlzIE9LLiIKK21zZ3N0ciAiR2plbm9wcHJldHRpbmcga29tcGxldHQuIER1IGL4ciBzamVra2UgYXQgYWx0IGVyIGkgb3JkZW4uIgorCisjOiBtZW1saW5lLmM6MTE1NworbXNnaWQgIiIKKyJcbiIKKyIoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWVcbiIKK21zZ3N0ciAiIgorIlxuIgorIihEdSB2aWwga2Fuc2tqZSBsYWdyZSBkZW5uZSBmaWxlbiB1bmRlciBldCBhbm5ldCBuYXZuXG4iCisKKyM6IG1lbWxpbmUuYzoxMTU4Cittc2dpZCAiYW5kIHJ1biBkaWZmIHdpdGggdGhlIG9yaWdpbmFsIGZpbGUgdG8gY2hlY2sgZm9yIGNoYW5nZXMpXG4iCittc2dzdHIgIm9nIHNhbW1lbmxpZ25lIGRlbiBtb3QgZGVuIG9yaWdpbmFsZSBmaWxlbiBmb3Ig5SBmaW5uZSBmb3JhbmRyaW5nZXIpXG4iCisKKyM6IG1lbWxpbmUuYzoxMTU5Cittc2dpZCAiIgorIkRlbGV0ZSB0aGUgLnN3cCBmaWxlIGFmdGVyd2FyZHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTbGV0dCBcIi5zd3BcIi1maWxlbiBldHRlcnDlLlxuIgorIlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMTUKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAiU3dhcGZpbGVyIGZ1bm5ldDoiCisKKyM6IG1lbWxpbmUuYzoxMzkzCittc2dpZCAiICAgSW4gY3VycmVudCBkaXJlY3Rvcnk6XG4iCittc2dzdHIgIiAgIEkgbuV25nJlbmRlIGthdGFsb2c6XG4iCisKKyM6IG1lbWxpbmUuYzoxMzk1Cittc2dpZCAiICAgVXNpbmcgc3BlY2lmaWVkIG5hbWU6XG4iCittc2dzdHIgIiAgIEJydWtlciBzcGVzaWZpc2VydCBuYXZuOlxuIgorCisjOiBtZW1saW5lLmM6MTM5OQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIEkga2F0YWxvZyAiCisKKyM6IG1lbWxpbmUuYzoxNDE3Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgICAtLSBpbmdlbiAtLVxuIgorCisjOiBtZW1saW5lLmM6MTQ4OQorbXNnaWQgIiAgICAgICAgICBvd25lZCBieTogIgorbXNnc3RyICIgICAgICAgICAgZWllcyBhdjogIgorCisjOiBtZW1saW5lLmM6MTQ5MQorbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgIGRhdGVydDogIgorCisjOiBtZW1saW5lLmM6MTQ5NSBtZW1saW5lLmM6MzY4NQorbXNnaWQgIiAgICAgICAgICAgICBkYXRlZDogIgorbXNnc3RyICIgICAgICAgICAgICAgZGF0ZXJ0OiAiCisKKyM6IG1lbWxpbmUuYzoxNTExCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgICAgW2ZyYSBWaW0gdmVyc2pvbiAzLjBdIgorCisjOiBtZW1saW5lLmM6MTUxNQorbXNnaWQgIiAgICAgICAgIFtkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlXSIKK21zZ3N0ciAiICAgICAgICAgW3NlciBpa2tlIHV0IHNvbSBlbiBWaW0tc3dhcGZpbF0iCisKKyM6IG1lbWxpbmUuYzoxNTE5Cittc2dpZCAiICAgICAgICAgZmlsZSBuYW1lOiAiCittc2dzdHIgIiAgICAgICAgIGZpbG5hdm46ICIKKworIzogbWVtbGluZS5jOjE1MjUKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgIG1vZGlmaWVkOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgbW9kaWZpc2VydDogIgorCisjOiBtZW1saW5lLmM6MTUyNgorbXNnaWQgIllFUyIKK21zZ3N0ciAiSkEiCisKKyM6IG1lbWxpbmUuYzoxNTI2Cittc2dpZCAibm8iCittc2dzdHIgIm5laSIKKworIzogbWVtbGluZS5jOjE1MzAKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgdXNlciBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBicnVrZXJuYXZuOiAiCisKKyM6IG1lbWxpbmUuYzoxNTM3Cittc2dpZCAiICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIiAgIHZlcnRzbmF2bjogIgorCisjOiBtZW1saW5lLmM6MTUzOQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIHZlcnRzbmF2bjogIgorCisjOiBtZW1saW5lLmM6MTU0NQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgcHJvc2Vzcy1JRDogIgorCisjOiBtZW1saW5lLmM6MTU1MQorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAoa2r4cmVyIGZvcnRzYXR0KSIKKworIzogbWVtbGluZS5jOjE1NjMKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFtpa2tlIGJydWtiYXIgbWVkIGRlbm5lIFZpbS12ZXJzam9uZW5dIgorCisjOiBtZW1saW5lLmM6MTU2NgorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSBvbiB0aGlzIGNvbXB1dGVyXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFtpa2tlIGJydWtiYXIgcOUgZGVubmUgbWFza2luZW5dIgorCisjOiBtZW1saW5lLmM6MTU3MQorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iCittc2dzdHIgIiAgICAgICAgIFtrYW4gaWtrZSBsZXNlc10iCisKKyM6IG1lbWxpbmUuYzoxNTc1Cittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSBvcGVuZWRdIgorbXNnc3RyICIgICAgICAgICBba2FuIGlra2Ug5XBuZXNdIgorCisjOiBtZW1saW5lLmM6MTc2NQorbXNnaWQgIkUzMTM6IENhbm5vdCBwcmVzZXJ2ZSwgdGhlcmUgaXMgbm8gc3dhcCBmaWxlIgorbXNnc3RyICJFMzEzOiBLYW4gaWtrZSBiZXZhcmUsIHN3YXBmaWwgbWFuZ2xlciIKKworIzogbWVtbGluZS5jOjE4MTgKK21zZ2lkICJGaWxlIHByZXNlcnZlZCIKK21zZ3N0ciAiRmlsIGJldmFydCIKKworIzogbWVtbGluZS5jOjE4MjAKK21zZ2lkICJFMzE0OiBQcmVzZXJ2ZSBmYWlsZWQiCittc2dzdHIgIkUzMTQ6IEJldmFyaW5nIGZlaWxldCIKKworIzogbWVtbGluZS5jOjE4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNTogbWxfZ2V0OiBpbnZhbGlkIGxudW06ICVsZCIKK21zZ3N0ciAiRTMxNTogbWxfZ2V0OiBVZ3lsZGlnIGxudW06ICVsZCIKKworIzogbWVtbGluZS5jOjE5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNjogbWxfZ2V0OiBjYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMxNjogbWxfZ2V0OiBLYW4gaWtrZSBmaW5uZSBsaW5qZSAlbGQiCisKKyM6IG1lbWxpbmUuYzoyMzA3Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAzIgorbXNnc3RyICJFMzE3OiBQZWtlcmJsb2trLWlkIGZlaWwgMyIKKworIzogbWVtbGluZS5jOjIzODcKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCBza3VsbGUgduZyZSAwIgorCisjOiBtZW1saW5lLmM6MjQ0OQorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODogT3BwZGF0ZXJ0ZSBmb3IgbWFuZ2UgYmxva2tlcj8iCisKKyM6IG1lbWxpbmUuYzoyNjMxCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiBQZWtlcmJsb2trLWlkIGZlaWwgNCIKKworIzogbWVtbGluZS5jOjI2NTgKK21zZ2lkICJkZWxldGVkIGJsb2NrIDE/IgorbXNnc3RyICJzbGV0dGV0IGJsb2trIDE/IgorCisjOiBtZW1saW5lLmM6Mjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIwOiBDYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMyMDogS2FuIGlra2UgZmlubmUgbGluamUgJWxkIgorCisjOiBtZW1saW5lLmM6MzEwMQorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmciCittc2dzdHIgIkUzMTc6IFBla2VyYmxva2staWQgZmVpbCIKKworIzogbWVtbGluZS5jOjMxMTcKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgInBlX2xpbmVfY291bnQgZXIgbnVsbCIKKworIzogbWVtbGluZS5jOjMxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMjogbGluZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlbGQgcGFzdCB0aGUgZW5kIgorbXNnc3RyICJFMzIyOiBMaW5qZW51bW1lciB1dGVuZm9yIG9tcuVkZTogJWxkIGZvcmJpIHNsdXR0ZW4iCisKKyM6IG1lbWxpbmUuYzozMTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjM6IGxpbmUgY291bnQgd3JvbmcgaW4gYmxvY2sgJWxkIgorbXNnc3RyICJFMzIzOiBMaW5qZWFudGFsbCBmZWlsIGkgYmxva2sgJWxkIgorCisjOiBtZW1saW5lLmM6MzE5OQorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICJTdGFja3N0+HJyZWxzZSD4a2VyIgorCisjOiBtZW1saW5lLmM6MzI0NQorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMiIKK21zZ3N0ciAiRTMxNzogUGVrZXJibG9ray1pZCBmZWlsIDIiCisKKyM6IG1lbWxpbmUuYzozNjc1Cittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiBWSUtUSUciCisKKyM6IG1lbWxpbmUuYzozNjc2Cittc2dpZCAiIgorIlxuIgorIkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIgorbXNnc3RyICIiCisiXG4iCisiRmFudCBlbiBzd2FwZmlsIHZlZCBuYXZuIFwiIgorCisjOiBtZW1saW5lLmM6MzY4MAorbXNnaWQgIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIKK21zZ3N0ciAiVW5kZXIg5XBuaW5nIGF2IGZpbGVuIFwiIgorCisjOiBtZW1saW5lLmM6MzY4OQorbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICAgICBOWUVSRSBlbm4gc3dhcGZpbCFcbiIKKworIy4gU29tZSBvZiB0aGVzZSBtZXNzYWdlcyBhcmUgbG9uZyB0byBhbGxvdyB0cmFuc2xhdGlvbiB0bworIy4gKiBvdGhlciBsYW5ndWFnZXMuCisjOiBtZW1saW5lLmM6MzY5MworbXNnaWQgIiIKKyJcbiIKKyIoMSkgQW5vdGhlciBwcm9ncmFtIG1heSBiZSBlZGl0aW5nIHRoZSBzYW1lIGZpbGUuXG4iCisiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIGJlIGNhcmVmdWwgbm90IHRvIGVuZCB1cCB3aXRoIHR3b1xuIgorIiAgICBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGZpbGUgd2hlbiBtYWtpbmcgY2hhbmdlcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigxKSBEZXQgZXIgbXVsaWcgZXQgYW5uZXQgcHJvZ3JhbSByZWRpZ2VyZXIgZGVuIHNhbW1lIGZpbGVuLlxuIgorIiAgICBIdmlzIGRldCBlciB0aWxmZWxsZSwgduZyIGZvcnNpa3RpZyBz5SBkdSBpa2tlIGVuZGVyIG9wcCBtZWQgdG9cbiIKKyIgICAgZm9yc2tqZWxsaWdlIHV0Z2F2ZXIgYXYgZGVuIHNhbW1lIGZpbGVuIG7lciBkdSBnavhyIGZvcmFuZHJpbmdlci5cbiIKKworIzogbWVtbGluZS5jOjM2OTQKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgQXZzbHV0dCwgZWxsZXIgZm9ydHNldHQgbWVkIHZhcnNvbWhldC5cbiIKKworIzogbWVtbGluZS5jOjM2OTUKK21zZ2lkICIiCisiXG4iCisiKDIpIEFuIGVkaXQgc2Vzc2lvbiBmb3IgdGhpcyBmaWxlIGNyYXNoZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMikgRW4g+Gt0IGZvciBkZW5uZSBmaWxlbiBrcuZzamV0LlxuIgorCisjOiBtZW1saW5lLmM6MzY5NgorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIEh2aXMgZGV0IGVyIHRpbGZlbGxlLCBicnVrIFwiOnJlY292ZXJcIiBlbGxlciBcInZpbSAtciAiCisKKyM6IG1lbWxpbmUuYzozNjk4Cittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgZm9yIOUgZ2plbm9wcHJldHRlIGZvcmFuZHJpbmdlbmUgKHNlIFwiOmhlbHAgcmVjb3ZlcnlcIikuXG4iCisKKyM6IG1lbWxpbmUuYzozNjk5Cittc2dpZCAiICAgIElmIHlvdSBkaWQgdGhpcyBhbHJlYWR5LCBkZWxldGUgdGhlIHN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiICAgIEh2aXMgZHUgaGFyIGdqb3J0IGRldHRlIGFsbGVyZWRlLCBzbGV0dCBzd2FwZmlsZW4gXCIiCisKKyM6IG1lbWxpbmUuYzozNzAxCittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIGF2b2lkIHRoaXMgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIGZvciDlIHVubmflIGRlbm5lIG1lbGRpbmdlbi5cbiIKKworIzogbWVtbGluZS5jOjM3MTUgbWVtbGluZS5jOjM3MTkKK21zZ2lkICJTd2FwIGZpbGUgXCIiCittc2dzdHIgIlN3YXBmaWxlbiBcIiIKKworIzogbWVtbGluZS5jOjM3MTYgbWVtbGluZS5jOjM3MjIKK21zZ2lkICJcIiBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlwiIGZpbm5lcyBhbGxlcmVkZSEiCisKKyM6IG1lbWxpbmUuYzozNzI1Cittc2dpZCAiVklNIC0gQVRURU5USU9OIgorbXNnc3RyICJWSU0gLSBWSUtUSUciCisKKyM6IG1lbWxpbmUuYzozNzI3Cittc2dpZCAiU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiU3dhcGZpbGVuIGVrc2lzdGVyZXIgYWxsZXJlZGUhIgorCisjOiBtZW1saW5lLmM6MzczMQorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0XG4iCisiJkFib3J0IgorbXNnc3RyICIiCisiJsVwbmUgc2tyaXZlYmVza3l0dGV0XG4iCisiJlJlZGlnZXIgbGlrZXZlbFxuIgorIiZHamVub3BwcmV0dFxuIgorIiZBdnNsdXR0XG4iCisiQXYmYnJ5dCIKKworIzogbWVtbGluZS5jOjM3MzMKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZBYm9ydFxuIgorIiZEZWxldGUgaXQiCittc2dzdHIgIiIKKyImxXBuZSBza3JpdmViZXNreXR0ZXRcbiIKKyImUmVkaWdlciBsaWtldmVsXG4iCisiJkdqZW5vcHByZXR0XG4iCisiJkF2c2x1dHRcbiIKKyJBdiZicnl0XG4iCisiJlNsZXR0ZSBkZW4iCisKKyM6IG1lbWxpbmUuYzozNzkwCittc2dpZCAiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIKK21zZ3N0ciAiRTMyNjogRm9yIG1hbmdlIHN3YXBmaWxlciBmdW5uZXQiCisKKyM6IG1lbnUuYzo2NAorbXNnaWQgIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51IgorbXNnc3RyICJFMzI3OiBEZWwgYXYgbWVueWVsZW1lbnQgZXIgaWtrZSB1bmRlcm1lbnkiCisKKyM6IG1lbnUuYzo2NQorbXNnaWQgIkUzMjg6IE1lbnUgb25seSBleGlzdHMgaW4gYW5vdGhlciBtb2RlIgorbXNnc3RyICJFMzI4OiBNZW55ZW4gZWtzaXN0ZXJlciBiYXJlIGkgZW4gYW5uZW4gbW9kdXMiCisKKyM6IG1lbnUuYzo2NgorbXNnaWQgIkUzMjk6IE5vIG1lbnUgb2YgdGhhdCBuYW1lIgorbXNnc3RyICJFMzI5OiBJbmdlbiBtZW55IG1lZCBkZXR0ZSBuYXZuZXQiCisKKyM6IG1lbnUuYzo1MjUKK21zZ2lkICJFMzMwOiBNZW51IHBhdGggbXVzdCBub3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzMwOiBNZW55c3RpIGthbiBpa2tlIGxlZGUgdGlsIGVuIHVuZGVybWVueSIKKworIzogbWVudS5jOjU2NAorbXNnaWQgIkUzMzE6IE11c3Qgbm90IGFkZCBtZW51IGl0ZW1zIGRpcmVjdGx5IHRvIG1lbnUgYmFyIgorbXNnc3RyICJFMzMxOiBLYW4gaWtrZSBsZWdnZSB0aWwgbWVueWVsZW1lbnRlciBkaXJla3RlIHDlIG1lbnlsaW5qZW4iCisKKyM6IG1lbnUuYzo1NzAKK21zZ2lkICJFMzMyOiBTZXBhcmF0b3IgY2Fubm90IGJlIHBhcnQgb2YgYSBtZW51IHBhdGgiCittc2dzdHIgIkUzMzI6IFNraWxsZXRlZ24ga2FuIGlra2UgduZyZSBkZWwgYXYgZW4gbWVueXN0aSIKKworIy4gTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtZW51LmM6MTA5NworbXNnaWQgIiIKKyJcbiIKKyItLS0gTWVudXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE1lbnllciAtLS0iCisKKyM6IG1lbnUuYzoyMDE5Cittc2dpZCAiVGVhciBvZmYgdGhpcyBtZW51IgorbXNnc3RyICJSaXYgYXYgZGVubmUgbWVueWVuIgorCisjOiBtZW51LmM6MjA4NAorbXNnaWQgIkUzMzM6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBtZW51IGl0ZW0iCittc2dzdHIgIkUzMzM6IE1lbnlzdGllbiBt5SBsZWRlIHRpbCBldCBtZW55dmFsZyIKKworIzogbWVudS5jOjIxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNDogTWVudSBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMzM0OiBGYW50IGlra2UgbWVueWVuOiAlcyIKKworIzogbWVudS5jOjIxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNTogTWVudSBub3QgZGVmaW5lZCBmb3IgJXMgbW9kZSIKK21zZ3N0ciAiRTMzNTogTWVueWVuIGVyIGlra2UgZGVmaW5lcnQgZm9yICVzLW1vZHVzIgorCisjOiBtZW51LmM6MjIxMQorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogTWVueXN0aWVuIG3lIGxlZGUgdGlsIGVuIHVuZGVybWVueSIKKworIzogbWVudS5jOjIyMzIKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IEZhbnQgaWtrZSBtZW55ZW4gLSBzamVrayBtZW55bmF2bmV0IgorCisjOiBtZXNzYWdlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVjdGVkIHdoaWxlIHByb2Nlc3NpbmcgJXM6IgorbXNnc3RyICJGZWlsIG9wcGRhZ2V0IHVuZGVyIHByb3Nlc3NlcmluZyBhdiAlczoiCisKKyM6IG1lc3NhZ2UuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlNGxkOiIKK21zZ3N0ciAibGluamUgJTRsZDoiCisKKyM6IG1lc3NhZ2UuYzo2NDcKK21zZ2lkICJbc3RyaW5nIHRvbyBsb25nXSIKK21zZ3N0ciAiW3N0cmVuZ2VuIGVyIGZvciBsYW5nXSIKKworIzogbWVzc2FnZS5jOjc5NworbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorbXNnc3RyICIiCisiVmVkbGlrZWhvbGRlciBmb3Igbm9yc2sgb3ZlcnNldHRlbHNlOiDYeXZpbmQgQS4gSG9sbSA8c3VubnlAc3VuYmFzZS5vcmc+IgorCisjOiBtZXNzYWdlLmM6MTAyNQorbXNnaWQgIkludGVycnVwdDogIgorbXNnc3RyICJBdmJyeXQ6ICIKKworIzogbWVzc2FnZS5jOjEwMjgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIlRyeWtrIEVOVEVSIGZvciDlIGZvcnRzZXR0ZSIKKworIzogbWVzc2FnZS5jOjEwMzAKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICJUcnlrayBFTlRFUiBlbGxlciBza3JpdiBlbiBrb21tYW5kbyBmb3Ig5SBmb3J0c2V0dGUiCisKKyM6IG1lc3NhZ2UuYzoyMzUxCittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0gTWVyIC0tIgorCisjOiBtZXNzYWdlLmM6MjM1NAorbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiIKKyIgKEVOVEVSL0JBQ0tTUEFDRTogTGluamUsIE1FTExPTVJPTS9iOiBTaWRlLCBQaWwgbmVkL1BpbCBvcHA6IEhhbHYgc2lkZSwgcTogIgorIkF2c2x1dHQpIgorCisjOiBtZXNzYWdlLmM6MjM1NQorbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChFTlRFUjogTGluamUsIE1FTExPTVJPTTogU2lkZSwgZDogSGFsdiBzaWRlLCBxOiBBdnNsdXR0KSIKKworIzogbWVzc2FnZS5jOjI5ODIgbWVzc2FnZS5jOjI5OTcKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAiU3D4cnNt5WwiCisKKyM6IG1lc3NhZ2UuYzoyOTg0Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm8iCittc2dzdHIgIiIKKyImSmFcbiIKKyImTmVpIgorCisjOiBtZXNzYWdlLmM6MzAxNworbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZKYVxuIgorIiZOZWlcbiIKKyImTGFncmUgYWxsZVxuIgorIiZGb3JrYXN0IGFsbGVcbiIKKyImQXZicnl0IgorCisjOiBtZXNzYWdlLmM6MzA1OAorbXNnaWQgIlNhdmUgRmlsZSBkaWFsb2ciCittc2dzdHIgIlwiTGFncmUgZmlsXCItZGlhbG9ndmluZHUiCisKKyM6IG1lc3NhZ2UuYzozMDYwCittc2dpZCAiT3BlbiBGaWxlIGRpYWxvZyIKK21zZ3N0ciAiXCLFcG5lIGZpbFwiLWRpYWxvZ3ZpbmR1IgorCisjLiBUT0RPOiBub24tR1VJIGZpbGUgc2VsZWN0b3IgaGVyZQorIzogbWVzc2FnZS5jOjMxMzEKK21zZ2lkICJFMzM4OiBTb3JyeSwgbm8gZmlsZSBicm93c2VyIGluIGNvbnNvbGUgbW9kZSIKK21zZ3N0ciAiRTMzODogRGVzc3ZlcnJlIGluZ2VuIGZpbGJlaGFuZGxlciBpIGtvbnNvbGxtb2R1cyIKKworIzogbWlzYzEuYzoyNzczCittc2dpZCAiVzEwOiBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiCittc2dzdHIgIlcxMDogQWR2YXJzZWw6IEZvcmFuZHJlciBlbiBza3JpdmViZXNreXR0ZXQgZmlsIgorCisjOiBtaXNjMS5jOjMwMjEKK21zZ2lkICIxIG1vcmUgbGluZSIKK21zZ3N0ciAiMSBsaW5qZSBsYWd0IHRpbCIKKworIzogbWlzYzEuYzozMDIzCittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgIjEgbGluamUgZmplcm5ldCIKKworIzogbWlzYzEuYzozMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgorbXNnc3RyICIlbGQgbGluamVyIGxhZ3QgdGlsIgorCisjOiBtaXNjMS5jOjMwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGZld2VyIGxpbmVzIgorbXNnc3RyICIlbGQgbGluamVyIGZqZXJuZXQiCisKKyM6IG1pc2MxLmM6MzAzMworbXNnaWQgIiAoSW50ZXJydXB0ZWQpIgorbXNnc3RyICIgKEF2YnJ1dHQpIgorCisjOiBtaXNjMS5jOjc1ODgKK21zZ2lkICJWaW06IHByZXNlcnZpbmcgZmlsZXMuLi5cbiIKK21zZ3N0ciAiVmltOiBCZXZhcmVyIGZpbGVyoC4uLlxuIgorCisjLiBjbG9zZSBhbGwgbWVtZmlsZXMsIHdpdGhvdXQgZGVsZXRpbmcKKyM6IG1pc2MxLmM6NzU5OAorbXNnaWQgIlZpbTogRmluaXNoZWQuXG4iCittc2dzdHIgIlZpbTogRmVyZGlnLlxuIgorCisjOiBtaXNjMi5jOjY5NSBtaXNjMi5jOjcxMQorbXNnaWQgIkVSUk9SOiAiCittc2dzdHIgIkZFSUw6ICIKKworIzogbWlzYzIuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJbYnl0ZXNdIHRvdGFsdCBhbGxvYy1mcmlnam9ydCAlbHUtJWx1LCBpIGJydWsgJWx1LCB0b3BwLWJydWsgJWx1XG4iCisKKyM6IG1pc2MyLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJbY2FsbHNdIHRvdGFsIHJlL21hbGxvYygpJ3MgJWx1LCB0b3RhbCBmcmVlKCkncyAlbHVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIltrYWxsXSB0b3RhbGUgXCJyZS9tYWxsb2MoKVwiLWVyICVsdSwgdG90YWxlIFwiZnJlZSgpXCItZXIgJWx1XG4iCisiXG4iCisKKyM6IG1pc2MyLmM6NzcyCittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDogTGluamVuIGJsaXIgZm9yIGxhbmciCisKKyM6IG1pc2MyLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDE6IEludGVybmFsIGVycm9yOiBsYWxsb2MoJWxkLCApIgorbXNnc3RyICJFMzQxOiBJbnRlcm4gZmVpbDogbGFsbG9jKCVsZCwgKSIKKworIzogbWlzYzIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MjogT3V0IG9mIG1lbW9yeSEgIChhbGxvY2F0aW5nICVsdSBieXRlcykiCittc2dzdHIgIkUzNDI6IElra2UgbWVyIGxlZGlnIGh1a29tbWVsc2UhIChSZXNlcnZlcmVyICVsdSBieXRlcykiCisKKyM6IG1pc2MyLmM6MjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAiS2FsbGVyIHNrYWxsIGZvciDlIHV0ZvhyZSBcIiVzXCIiCisKKyM6IG1pc2MyLmM6MjgxNgorbXNnaWQgIkU1NDU6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1NDU6IE1hbmdsZXIga29sb24iCisKKyM6IG1pc2MyLmM6MjgxOCBtaXNjMi5jOjI4NDUKK21zZ2lkICJFNTQ2OiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkU1NDY6IFVsb3ZsaWcgbW9kdXMiCisKKyM6IG1pc2MyLmM6Mjg4NAorbXNnaWQgIkU1NDc6IElsbGVnYWwgbW91c2VzaGFwZSIKK21zZ3N0ciAiRTU0NzogVWxvdmxpZyB1dHNlZW5kZSBw5SBtdXNlcGVrZXJlbiIKKworIzogbWlzYzIuYzoyOTI0Cittc2dpZCAiRTU0ODogZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgIkU1NDg6IFNpZmZlciBmb3J2ZW50ZXQiCisKKyM6IG1pc2MyLmM6MjkyOQorbXNnaWQgIkU1NDk6IElsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAiRTU0OTogVWxvdmxpZyBwcm9zZW50IgorCisjOiBtaXNjMi5jOjMyMzkKK21zZ2lkICJFbnRlciBlbmNyeXB0aW9uIGtleTogIgorbXNnc3RyICJTa3JpdiBrcnlwdGVyaW5nc274a2tlbDogIgorCisjOiBtaXNjMi5jOjMyNDAKK21zZ2lkICJFbnRlciBzYW1lIGtleSBhZ2FpbjogIgorbXNnc3RyICJHamVudGEga3J5cHRlcmluZ3Nu+GtrZWxlbjogIgorCisjOiBtaXNjMi5jOjMyNTAKK21zZ2lkICJLZXlzIGRvbid0IG1hdGNoISIKK21zZ3N0ciAiS3J5cHRlcmluZ3Nu+GtsZW5lIHN0ZW1tZXIgaWtrZSBvdmVyZW5zISIKKworIzogbWlzYzIuYzozNzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICIiCisiRTM0MzogVWd5bGRpZyBzdGk6ICcqKltudW1tZXJdJyBt5SB25nJlIHDlIHNsdXR0ZW4gYXYgc3RpZW4gZWxsZXIgYmxpICIKKyJldHRlcmZ1bGd0IGF2ICclcycuIgorCisjOiBtaXNjMi5jOjUwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NDogQ2FuJ3QgZmluZCBkaXJlY3RvcnkgXCIlc1wiIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NDogS2FuIGlra2UgZmlubmUga2F0YWxvZ2VuIFwiJXNcIiBpIFwiY2RwYXRoXCIiCisKKyM6IG1pc2MyLmM6NTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ1OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkUzNDU6IEthbiBpa2tlIGZpbm5lIGZpbGVuIFwiJXNcIiBpIHN0aWVuIgorCisjOiBtaXNjMi5jOjUwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NjogTm8gbW9yZSBkaXJlY3RvcnkgXCIlc1wiIGZvdW5kIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NjogSW5nZW4gZmxlcmUga2F0YWxvZy1cIiVzXCIgZnVubmV0IGkgXCJjZHBhdGhcIiIKKworIzogbWlzYzIuYzo1MDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDc6IE5vIG1vcmUgZmlsZSBcIiVzXCIgZm91bmQgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NzogSW5nZW4gZmxlcmUgZmlsLVwiJXNcIiBmdW5uZXQgaSBzdGllbiIKKworIzogbWlzYzIuYzo1MzI0Cittc2dpZCAiRTU1MDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU1MDogTWFuZ2xlciBrb2xvbiIKKworIzogbWlzYzIuYzo1MzM2Cittc2dpZCAiRTU1MTogSWxsZWdhbCBjb21wb25lbnQiCittc2dzdHIgIkU1NTE6IFVsb3ZsaWcga29tcG9uZW50IgorCisjOiBtaXNjMi5jOjUzNDQKK21zZ2lkICJFNTUyOiBkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAiRTU1MjogU2lmZmVyIGZvcnZlbnRldCIKKworIy4gR2V0IGhlcmUgd2hlbiB0aGUgc2VydmVyIGNhbid0IGJlIGZvdW5kLgorIzogbmV0YmVhbnMuYzozOTYKK21zZ2lkICJDYW5ub3QgY29ubmVjdCB0byBOZXRiZWFucyAjMiIKK21zZ3N0ciAiS2FuIGlra2Uga29ibGUgdGlsIE5ldGJlYW5zICMyIgorCisjOiBuZXRiZWFucy5jOjQwNAorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zIgorbXNnc3RyICJLYW4gaWtrZSBrb2JsZSB0aWwgTmV0YmVhbnMiCisKKyM6IG5ldGJlYW5zLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2Njg6IFdyb25nIGFjY2VzcyBtb2RlIGZvciBOZXRCZWFucyBjb25uZWN0aW9uIGluZm8gZmlsZTogXCIlc1wiIgorbXNnc3RyICIiCisiRTY2ODogRmVpbCB0aWxnYW5nc21vZHVzIGZvciBpbmZvZmlsZW4gdGlsIE5ldEJlYW5zLWZvcmJpbmRlbHNlOiBcIiVzXCIiCisKKyM6IG5ldGJlYW5zLmM6NzQ5Cittc2dpZCAicmVhZCBmcm9tIE5ldGJlYW5zIHNvY2tldCIKK21zZ3N0ciAibGVzIGZyYSBOZXRiZWFucy1zb2NrZXQiCisKKyM6IG5ldGJlYW5zLmM6MTY0MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjU4OiBOZXRCZWFucyBjb25uZWN0aW9uIGxvc3QgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU2NTg6IE1pc3RldCBOZXRCZWFucy1mb3JiaW5kZWxzZSBmb3IgYnVmZmVyICVsZCIKKworIzogbm9ybWFsLmM6Mjk4MworbXNnaWQgIldhcm5pbmc6IHRlcm1pbmFsIGNhbm5vdCBoaWdobGlnaHQiCittc2dzdHIgIkFkdmFyc2VsOiBUZXJtaW5hbGVuIGthbiBpa2tlIHV0aGV2ZSIKKworIzogbm9ybWFsLmM6MzI3OQorbXNnaWQgIkUzNDg6IE5vIHN0cmluZyB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDg6IEluZ2VuIHN0cmVuZyB1bmRlciBtYXJr+HIiCisKKyM6IG5vcm1hbC5jOjMyODEKK21zZ2lkICJFMzQ5OiBObyBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0OTogSW5nZW4gaWRlbnRpZmlrYXRvciB1bmRlciBtYXJr+HIiCisKKyM6IG5vcm1hbC5jOjQ1MjIKK21zZ2lkICJFMzUyOiBDYW5ub3QgZXJhc2UgZm9sZHMgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MjogS2FuIGlra2Ugc2xldHRlIGZvbGRlciBtZWQgbuV25nJlbmRlICdmb2xkbWV0aG9kJyIKKworIzogbm9ybWFsLmM6Njc0MworbXNnaWQgIkU2NjQ6IGNoYW5nZWxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkU2NjQ6IEZvcmFuZHJpbmdzbGlzdGVuIGVyIHRvbSIKKworIzogbm9ybWFsLmM6Njc0NQorbXNnaWQgIkU2NjI6IEF0IHN0YXJ0IG9mIGNoYW5nZWxpc3QiCittc2dzdHIgIkU2NjI6IFZlZCBzdGFydGVuIGF2IGZvcmFuZHJpbmdzbGlzdGUiCisKKyM6IG5vcm1hbC5jOjY3NDcKK21zZ2lkICJFNjYzOiBBdCBlbmQgb2YgY2hhbmdlbGlzdCIKK21zZ3N0ciAiRTY2MzogVmVkIHNsdXR0ZW4gYXYgZm9yYW5kcmluZ3NsaXN0ZSIKKworIzogbm9ybWFsLmM6ODAwOQorbXNnaWQgIlR5cGUgIDpxdWl0PEVudGVyPiAgdG8gZXhpdCBWaW0iCittc2dzdHIgIlNrcml2ICA6cXVpdDxFbnRlcj4gIGZvciDlIGF2c2x1dHRlIFZpbSIKKworIzogb3BzLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkIDEgdGltZSIKK21zZ3N0ciAiMSBsaW5qZSBcIiVzXCItZXQgMSBnYW5nIgorCisjOiBvcHMuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgJWQgdGltZXMiCittc2dzdHIgIjEgbGluamUgXCIlc1wiLWV0ICVkIGdhbmdlciIKKworIzogb3BzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkIDEgdGltZSIKK21zZ3N0ciAiJWxkIGxpbmplciBcIiVzXCItZXQgMSBnYW5nIgorCisjOiBvcHMuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgJWQgdGltZXMiCittc2dzdHIgIiVsZCBsaW5qZXIgXCIlc1wiLWV0ICVkIGdhbmdlciIKKworIzogb3BzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB0byBpbmRlbnQuLi4gIgorbXNnc3RyICIlbGQgbGluamVyIOUgcnlra2UgaW5uoC4uLiAiCisKKyM6IG9wcy5jOjcxMgorbXNnaWQgIjEgbGluZSBpbmRlbnRlZCAiCittc2dzdHIgIjEgbGluamUgcnlra2V0IGlubiAiCisKKyM6IG9wcy5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgaW5kZW50ZWQgIgorbXNnc3RyICIlbGQgbGluamVyIHJ5a2tldCBpbm4gIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogb3BzLmM6MTY4OAorbXNnaWQgImNhbm5vdCB5YW5rOyBkZWxldGUgYW55d2F5IgorbXNnc3RyICJrYW4gaWtrZSBrb3BpZXJlIHRpbCB1dGtsaXBwc3RhdmxlOyBzbGV0dCBsaWtldmVsIgorCisjOiBvcHMuYzoyMjc0Cittc2dpZCAiMSBsaW5lIGNoYW5nZWQiCittc2dzdHIgIjEgbGluamUgZm9yYW5kcmV0IgorCisjOiBvcHMuYzoyMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBjaGFuZ2VkIgorbXNnc3RyICIlbGQgbGluamVyIGZvcmFuZHJldCIKKworIzogb3BzLmM6MjY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmcmVlaW5nICVsZCBsaW5lcyIKK21zZ3N0ciAiZnJpZ2r4ciAlbGQgbGluamVyIgorCisjOiBvcHMuYzoyOTQxCittc2dpZCAiMSBsaW5lIHlhbmtlZCIKK21zZ3N0ciAiMSBsaW5qZSBrb3BpZXJ0IHRpbCB1dGtsaXBwc3RhdmxlbiIKKworIzogb3BzLmM6Mjk0MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgeWFua2VkIgorbXNnc3RyICIlbGQgbGluamVyIGtvcGllcnQgdGlsIHV0a2xpcHBzdGF2bGVuIgorCisjOiBvcHMuYzozMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTM6IE5vdGhpbmcgaW4gcmVnaXN0ZXIgJXMiCittc2dzdHIgIkUzNTM6IEluZ2VudGluZyBpIHJlZ2lzdGVyICVzIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG9wcy5jOjM3NzkKK21zZ2lkICIiCisiXG4iCisiLS0tIFJlZ2lzdGVycyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJlIC0tLSIKKworIzogb3BzLmM6NTA4OAorbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAiVWxvdmxpZyByZWdpc3Rlcm5hdm4iCisKKyM6IG9wcy5jOjUxNzYKK21zZ2lkICIiCisiXG4iCisiIyBSZWdpc3RlcnM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIFJlZ2lzdGVyZTpcbiIKKworIzogb3BzLmM6NTIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTc0OiBVbmtub3duIHJlZ2lzdGVyIHR5cGUgJWQiCittc2dzdHIgIkU1NzQ6IFVramVudCByZWdpc3RlcnR5cGUgJWQiCisKKyM6IG9wcy5jOjU3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NDogSW52YWxpZCByZWdpc3RlciBuYW1lOiAnJXMnIgorbXNnc3RyICJFMzU0OiBVZ3lsZGlnIHJlZ2lzdGVybmF2bjogJyVzJyIKKworIzogb3BzLmM6NjA3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgQ29sczsgIgorbXNnc3RyICIlbGQgS29sOyAiCisKKyM6IG9wcy5jOjYwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VsZWN0ZWQgJXMlbGQgb2YgJWxkIExpbmVzOyAlbGQgb2YgJWxkIFdvcmRzOyAlbGQgb2YgJWxkIEJ5dGVzIgorbXNnc3RyICJWYWxndGUgJXMlbGQgYXYgJWxkIGxpbmplcjsgJWxkIGF2ICVsZCBvcmQ7ICVsZCBhdiAlbGQgYnl0ZXMiCisKKyM6IG9wcy5jOjYwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQnl0ZSAlbGQgb2YgJWxkIgorbXNnc3RyICJLb2wgJXMgYXYgJXM7IExpbmplICVsZCBhdiAlbGQ7IE9yZCAlbGQgYXYgJWxkOyBCeXRlICVsZCBhdiAlbGQiCisKKyM6IG9wcy5jOjYxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCslbGQgZm9yIEJPTSkiCittc2dzdHIgIigrJWxkIGZvciBCT00pIgorCisjOiBvcHRpb24uYzoxNjQzCittc2dpZCAiJTwlZiVoJW0lPVBhZ2UgJU4iCittc2dzdHIgIiU8JWYlaCVtJT1TaWRlICVOIgorCisjOiBvcHRpb24uYzoyMDkyCittc2dpZCAiVGhhbmtzIGZvciBmbHlpbmcgVmltIgorbXNnc3RyICJUYWtrIGZvciBhdCBkdSBmbPh5IFZpbSIKKworIzogb3B0aW9uLmM6MzQxOSBvcHRpb24uYzozNTM1Cittc2dpZCAiRTUxODogVW5rbm93biBvcHRpb24iCittc2dzdHIgIkU1MTg6IFVramVudCB2YWxnIgorCisjOiBvcHRpb24uYzozNDMyCittc2dpZCAiRTUxOTogT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkU1MTk6IFZhbGdldCBlciBpa2tlIHN0+HR0ZXQiCisKKyM6IG9wdGlvbi5jOjM0NTcKK21zZ2lkICJFNTIwOiBOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIgorbXNnc3RyICJFNTIwOiBJa2tlIHRpbGxhdHQgaSBtb2R1c2xpbmplIgorCisjOiBvcHRpb24uYzozNTIyCittc2dpZCAiIgorIlxuIgorIlx0TGFzdCBzZXQgZnJvbSAiCittc2dzdHIgIiIKKyJcbiIKKyJcdFNpc3Qgc2F0dCBmcmEgIgorCisjOiBvcHRpb24uYzozNjYxCittc2dpZCAiRTUyMTogTnVtYmVyIHJlcXVpcmVkIGFmdGVyID0iCittc2dzdHIgIkU1MjE6IE51bW1lciBu+GR2ZW5kaWcgZXR0ZXIgPSIKKworIzogb3B0aW9uLmM6Mzk4OSBvcHRpb24uYzo0NjE5Cittc2dpZCAiRTUyMjogTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1MjI6IElra2UgZnVubmV0IGkgdGVybWNhcCIKKworIzogb3B0aW9uLmM6NDA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM5OiBJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IgorbXNnc3RyICJFNTM5OiBVbG92bGlnIHRlZ24gPCVzPiIKKworIzogb3B0aW9uLmM6NDYxMQorbXNnaWQgIkU1Mjk6IENhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiRTUyOTogS2FuIGlra2Ugc2V0dGUgJ3Rlcm0nIHRpbCB0b20gc3RyZW5nIgorCisjOiBvcHRpb24uYzo0NjE0Cittc2dpZCAiRTUzMDogQ2Fubm90IGNoYW5nZSB0ZXJtIGluIEdVSSIKK21zZ3N0ciAiRTUzMDogS2FuIGlra2UgZm9yYW5kcmUgXCJ0ZXJtXCIgaSBncmFmaXNrIGJydWtlcmdyZW5zZXNuaXR0IgorCisjOiBvcHRpb24uYzo0NjE2Cittc2dpZCAiRTUzMTogVXNlIFwiOmd1aVwiIHRvIHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkU1MzE6IEJydWsgXCI6Z3VpXCIgZm9yIOUgc3RhcnRlIG1lZCBncmFmaXNrIGJydWtlcmdyZW5zZXNuaXR0IgorCisjOiBvcHRpb24uYzo0NjQ1Cittc2dpZCAiRTU4OTogJ2JhY2t1cGV4dCcgYW5kICdwYXRjaG1vZGUnIGFyZSBlcXVhbCIKK21zZ3N0ciAiRTU4OTogJ2JhY2t1cGV4dCcgb2cgJ3BhdGNobW9kZScgZXIgbGlrZSIKKworIzogb3B0aW9uLmM6NDg2MAorbXNnaWQgIkU2MTc6IENhbm5vdCBiZSBjaGFuZ2VkIGluIHRoZSBHVEsrIDIgR1VJIgorbXNnc3RyICJFNjE3OiBLYW4gaWtrZSBmb3JhbmRyZXMgaSBHVEsrIDIgR1VJIgorCisjOiBvcHRpb24uYzo1MDE2Cittc2dpZCAiRTUyNDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTUyNDogTWFuZ2xlciBrb2xvbiIKKworIzogb3B0aW9uLmM6NTAxOAorbXNnaWQgIkU1MjU6IFplcm8gbGVuZ3RoIHN0cmluZyIKK21zZ3N0ciAiRTUyNTogVG9tIHN0cmVuZyIKKworIzogb3B0aW9uLmM6NTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTI2OiBNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICJFNTI2OiBNYW5nbGVyIG51bW1lciBldHRlciA8JXM+IgorCisjOiBvcHRpb24uYzo1MTAwCittc2dpZCAiRTUyNzogTWlzc2luZyBjb21tYSIKK21zZ3N0ciAiRTUyNzogTWFuZ2xlciBrb21tYSIKKworIzogb3B0aW9uLmM6NTEwNworbXNnaWQgIkU1Mjg6IE11c3Qgc3BlY2lmeSBhICcgdmFsdWUiCittc2dzdHIgIkU1Mjg6IE3lIHNwZXNpZmlzZXJlIGVuIFwiJ1wiLXZlcmRpIgorCisjOiBvcHRpb24uYzo1MTQ4Cittc2dpZCAiRTU5NTogY29udGFpbnMgdW5wcmludGFibGUgb3Igd2lkZSBjaGFyYWN0ZXIiCittc2dzdHIgIkU1OTU6IElubmVob2xkZXIgdXNrcml2ZWxpZ2UgZWxsZXIgYnJlZGUgdGVnbiIKKworIzogb3B0aW9uLmM6NTE5NworbXNnaWQgIkU1OTY6IEludmFsaWQgZm9udChzKSIKK21zZ3N0ciAiRTU5NjogVWd5bGRpZyhlKSBza3JpZnR0eXBlKHIpIgorCisjOiBvcHRpb24uYzo1MjA1Cittc2dpZCAiRTU5NzogY2FuJ3Qgc2VsZWN0IGZvbnRzZXQiCittc2dzdHIgIkU1OTc6IEthbiBpa2tlIHZlbGdlIHNrcmlmdHR5cGVzZXR0IgorCisjOiBvcHRpb24uYzo1MjA3Cittc2dpZCAiRTU5ODogSW52YWxpZCBmb250c2V0IgorbXNnc3RyICJFNTk4OiBVZ3lsZGlnIHNrcmlmdHR5cGVzZXR0IgorCisjOiBvcHRpb24uYzo1MjE0Cittc2dpZCAiRTUzMzogY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAiRTUzMzogS2FuIGlra2UgdmVsZ2UgYnJlZCBza3JpZnR0eXBlIgorCisjOiBvcHRpb24uYzo1MjE2Cittc2dpZCAiRTUzNDogSW52YWxpZCB3aWRlIGZvbnQiCittc2dzdHIgIkU1MzQ6IFVneWxkaWcgYnJlZCBza3JpZnR0eXBlIgorCisjOiBvcHRpb24uYzo1NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIDwlYz4iCittc2dzdHIgIkU1MzU6IFVsb3ZsaWcgdGVnbiBldHRlciA8JWM+IgorCisjOiBvcHRpb24uYzo1NTk3Cittc2dpZCAiRTUzNjogY29tbWEgcmVxdWlyZWQiCittc2dzdHIgIkU1MzY6IEtvbW1hIG74ZHZlbmRpZyIKKworIzogb3B0aW9uLmM6NTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJFNTM3OiAnY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIgorbXNnc3RyICJFNTM3OiAnY29tbWVudHN0cmluZycgbeUgduZyZSB0b20gZWxsZXIgaW5uZWhvbGRlICVzIgorCisjOiBvcHRpb24uYzo1NjgyCittc2dpZCAiRTUzODogTm8gbW91c2Ugc3VwcG9ydCIKK21zZ3N0ciAiRTUzODogSW5nZW4gc3T4dHRlIGZvciBtdXMiCisKKyM6IG9wdGlvbi5jOjU5NTAKK21zZ2lkICJFNTQwOiBVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJFNTQwOiBVdHRyeWtrc3Nla3ZlbnMgc29tIGlra2UgZXIgbHVra2V0IgorCisjOiBvcHRpb24uYzo1OTU0Cittc2dpZCAiRTU0MTogdG9vIG1hbnkgaXRlbXMiCittc2dzdHIgIkU1NDE6IEZvciBtYW5nZSBlbGVtZW50ZXIiCisKKyM6IG9wdGlvbi5jOjU5NTYKK21zZ2lkICJFNTQyOiB1bmJhbGFuY2VkIGdyb3VwcyIKK21zZ3N0ciAiRTU0MjogVWJhbGFuc2VydGUgZ3J1cHBlciIKKworIzogb3B0aW9uLmM6NjE5NgorbXNnaWQgIkU1OTA6IEEgcHJldmlldyB3aW5kb3cgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU1OTA6IERldCBmaW5uZXMgYWxsZXJlZGUgZXQgZm9yaOVuZHN2aXNuaW5nc3ZpbmR1IgorCisjOiBvcHRpb24uYzo2NDUzCittc2dpZCAiVzE3OiBBcmFiaWMgcmVxdWlyZXMgVVRGLTgsIGRvICc6c2V0IGVuY29kaW5nPXV0Zi04JyIKK21zZ3N0ciAiVzE3OiBBcmFiaXNrIHRyZW5nZXIgVVRGLTgsIHV0ZvhyICc6c2V0IGVuY29kaW5nPXV0Zi04JyIKKworIzogb3B0aW9uLmM6Njc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTkzOiBOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJFNTkzOiBUcmVuZ2VyIG1pbnN0ICVkIGxpbmplciIKKworIzogb3B0aW9uLmM6Njc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk0OiBOZWVkIGF0IGxlYXN0ICVkIGNvbHVtbnMiCittc2dzdHIgIkU1OTQ6IFRyZW5nZXIgbWluc3QgJWQga29sb25uZXIiCisKKyM6IG9wdGlvbi5jOjcxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NTogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMzU1OiBVa2plbnQgdmFsZzogJXMiCisKKyM6IG9wdGlvbi5jOjcyMjMKK21zZ2lkICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIGNvZGVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBUZXJtaW5hbGtvZGVyIC0tLSIKKworIzogb3B0aW9uLmM6NzIyNQorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEdsb2JhbGUgdmFsZ3ZlcmRpZXIgLS0tIgorCisjOiBvcHRpb24uYzo3MjI3Cittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBMb2thbGUgdmFsZ3ZlcmRpZXIgLS0tIgorCisjOiBvcHRpb24uYzo3MjI5Cittc2dpZCAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBWYWxnIC0tLSIKKworIzogb3B0aW9uLmM6NzkzNQorbXNnaWQgIkUzNTY6IGdldF92YXJwIEVSUk9SIgorbXNnc3RyICJFMzU2OiBcImdldF92YXJwXCItRkVJTCIKKworIzogb3B0aW9uLmM6ODkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU3OiAnbGFuZ21hcCc6IE1hdGNoaW5nIGNoYXJhY3RlciBtaXNzaW5nIGZvciAlcyIKK21zZ3N0ciAiRTM1NzogJ2xhbmdtYXAnOiBTYW1zdmFyZW5kZSB0ZWduIG1hbmdsZXIgZm9yICVzIgorCisjOiBvcHRpb24uYzo4OTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTg6ICdsYW5nbWFwJzogRXh0cmEgY2hhcmFjdGVycyBhZnRlciBzZW1pY29sb246ICVzIgorbXNnc3RyICJFMzU4OiAnbGFuZ21hcCc6IEVrc3RyYSB0ZWduIGV0dGVyIHNlbWlrb2xvbjogJXMiCisKKyM6IG9zX2FtaWdhLmM6MjgwCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICJrYW4gaWtrZSDlcG5lICIKKworIzogb3NfYW1pZ2EuYzozMTQKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06IEthbiBpa2tlIOVwbmUgdmluZHUhXG4iCisKKyM6IG9zX2FtaWdhLmM6MzM4Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAiVHJlbmdlciBBbWlnYWRvcyB2ZXJzam9uIDIuMDQgZWxsZXIgbnllcmVcbiIKKworIzogb3NfYW1pZ2EuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICJUcmVuZ2VyICVzIHZlcnNqb24gJWxkXG4iCisKKyM6IG9zX2FtaWdhLmM6NDE2Cittc2dpZCAiQ2Fubm90IG9wZW4gTklMOlxuIgorbXNnc3RyICJLYW4gaWtrZSDlcG5lIE5JTDpcbiIKKworIzogb3NfYW1pZ2EuYzo0MjcKK21zZ2lkICJDYW5ub3QgY3JlYXRlICIKK21zZ3N0ciAiS2FuIGlra2Ugb3BwcmV0dGUgIgorCisjOiBvc19hbWlnYS5jOjkwNQorIywgYy1mb3JtYXQKK21zZ2lkICJWaW0gZXhpdGluZyB3aXRoICVkXG4iCittc2dzdHIgIlZpbSBhdnNsdXR0ZXIgbWVkICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTQxCittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAia2FuIGlra2UgZm9yYW5kcmUga29uc29sbG1vZHVzID8hXG4iCisKKyM6IG9zX2FtaWdhLmM6MTAxMgorbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAibWNoX2dldF9zaGVsbHNpemU6IElra2UgZXQga29uc29sbD8/XG4iCisKKyMuIGlmIFZpbSBvcGVuZWQgYSB3aW5kb3c6IEV4ZWN1dGluZyBhIHNoZWxsIG1heSBjYXVzZSBjcmFzaGVzCisjOiBvc19hbWlnYS5jOjExNjEKK21zZ2lkICJFMzYwOiBDYW5ub3QgZXhlY3V0ZSBzaGVsbCB3aXRoIC1mIG9wdGlvbiIKK21zZ3N0ciAiRTM2MDogS2FuIGlra2Uga2r4cmUgc2thbGwgbWVkIFwiLWZcIi12YWxnIgorCisjOiBvc19hbWlnYS5jOjEyMDIgb3NfYW1pZ2EuYzoxMjkyCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICJLYW4gaWtrZSB1dGb4cmUgIgorCisjOiBvc19hbWlnYS5jOjEyMDUgb3NfYW1pZ2EuYzoxMzAyCittc2dpZCAic2hlbGwgIgorbXNnc3RyICJza2FsbCAiCisKKyM6IG9zX2FtaWdhLmM6MTIyNSBvc19hbWlnYS5jOjEzMjcKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiIHJldHVybmVydGVcbiIKKworIzogb3NfYW1pZ2EuYzoxNDY4Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSBmb3IgbGl0ZW4uIgorCisjOiBvc19hbWlnYS5jOjE0NzIKK21zZ2lkICJJL08gRVJST1IiCittc2dzdHIgIkkvVS1GRUlMIgorCisjOiBvc19tc3dpbi5jOjU0OAorbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICKgLi4uKGt1dHRldCkiCisKKyM6IG9zX21zd2luLmM6NjUwCittc2dpZCAiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIidjb2x1bW5zJyBlciBpa2tlIDgwLCBrYW4gaWtrZSB1dGb4cmUgZWtzdGVybmUga29tbWFuZG9lciIKKworIzogb3NfbXN3aW4uYzoxOTgyCittc2dpZCAiRTIzNzogUHJpbnRlciBzZWxlY3Rpb24gZmFpbGVkIgorbXNnc3RyICJFMjM3OiBWYWxnIGF2IHNrcml2ZXIgZmVpbGV0IgorCisjOiBvc19tc3dpbi5jOjIwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidG8gJXMgb24gJXMiCittc2dzdHIgInRpbCAlcyBw5SAlcyIKKworIzogb3NfbXN3aW4uYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTM6IFVua25vd24gcHJpbnRlciBmb250OiAlcyIKK21zZ3N0ciAiRTYxMzogVWtqZW50IHNrcmlmdHR5cGUgZm9yIHNrcml2ZXI6ICVzIgorCisjOiBvc19tc3dpbi5jOjIwODYgb3NfbXN3aW4uYzoyMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogRmVpbCB1bmRlciB1dHNrcmlmdDogJXMiCisKKyM6IG9zX21zd2luLmM6MjA5NworbXNnaWQgIlVua25vd24iCittc2dzdHIgIlVramVudCIKKworIzogb3NfbXN3aW4uYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nICclcyciCittc2dzdHIgIlNrcml2ZXIgdXQgJyVzJyIKKworIzogb3NfbXN3aW4uYzozMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDQ6IElsbGVnYWwgY2hhcnNldCBuYW1lIFwiJXNcIiBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ0OiBVbG92bGlnIG5hdm4gcOUgdGVnbnNldHQgXCIlc1wiIGkgc2tyaWZ0dHlwZW5hdm4gXCIlc1wiIgorCisjOiBvc19tc3dpbi5jOjMyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTogVWxvdmxpZyB0ZWduICclYycgaSBza3JpZnR0eXBlbmF2biBcIiVzXCIiCisKKyM6IG9zX3Jpc2Nvcy5jOjEyNTkKK21zZ2lkICJFMzY2OiBJbnZhbGlkICdvc2ZpbGV0eXBlJyBvcHRpb24gLSB1c2luZyBUZXh0IgorbXNnc3RyICJFMzY2OiBVZ3lsZGlnICdvc2ZpbGV0eXBlJy12YWxnIC0gYnJ1a2VyIFRleHQiCisKKyM6IG9zX3VuaXguYzo5MjcKK21zZ2lkICJWaW06IERvdWJsZSBzaWduYWwsIGV4aXRpbmdcbiIKK21zZ3N0ciAiVmltOiBEb2JiZWx0IHNpZ25hbCwgYXZzbHV0dGVyXG4iCisKKyM6IG9zX3VuaXguYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IE1vdHRvayBk+GRlbGlnIHNpZ25hbCAlc1xuIgorCisjOiBvc191bml4LmM6OTM2Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIgorbXNnc3RyICJWaW06IE1vdHRvayBk+GRlbGlnIHNpZ25hbFxuIgorCisjOiBvc191bml4LmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAixXBuaW5nIGF2IFgtZGlzcGxheSB0b2sgJWxkIG1pbGxpc2VrdW5kZXIiCisKKyM6IG9zX3VuaXguYzoxMjI2Cittc2dpZCAiIgorIlxuIgorIlZpbTogR290IFggZXJyb3JcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZpbTogTW90dG9rIFgtZmVpbFxuIgorCisjOiBvc191bml4LmM6MTMzOAorbXNnaWQgIlRlc3RpbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIlRlc3QgYXYgWC1kaXNwbGF5IGZlaWxldCIKKworIzogb3NfdW5peC5jOjE0NzcKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IgorbXNnc3RyICJUaWRzYXZicnVkZCBmb3Ig5XBuaW5nIGF2IFgtZGlzcGxheSIKKworIzogb3NfdW5peC5jOjMyMzQgb3NfdW5peC5jOjM5MTQKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgIgorbXNnc3RyICIiCisiXG4iCisiS2FuIGlra2Uga2r4cmUgc2thbGwgIgorCisjOiBvc191bml4LmM6MzI4MgorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCBzaFxuIgorbXNnc3RyICIiCisiXG4iCisiS2FuIGlra2Uga2r4cmUgc2thbGxldCBzaFxuIgorCisjOiBvc191bml4LmM6MzI4NiBvc191bml4LmM6MzkyMAorbXNnaWQgIiIKKyJcbiIKKyJzaGVsbCByZXR1cm5lZCAiCittc2dzdHIgIiIKKyJcbiIKKyJza2FsbGV0IHJldHVybmVydGUgIgorCisjOiBvc191bml4LmM6MzQyMQorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgY3JlYXRlIHBpcGVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLYW4gaWtrZSBvcHByZXR0ZSBy+HIgKFwicGlwZVwiKVxuIgorCisjOiBvc191bml4LmM6MzQzNgorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZm9ya1xuIgorbXNnc3RyICIiCisiXG4iCisiS2FuIGlra2Ugb3BwcmV0dGUgdHZpbGxpbmdwcm9zZXNzIChcImZvcmtcIilcbiIKKworIzogb3NfdW5peC5jOjM5MjcKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLb21tYW5kbyBhdnNsdXR0ZXRcbiIKKworIzogb3NfdW5peC5jOjQxOTEgb3NfdW5peC5jOjQzMTYgb3NfdW5peC5jOjU5ODIKK21zZ2lkICJYU01QIGxvc3QgSUNFIGNvbm5lY3Rpb24iCittc2dzdHIgIlhTTVAgbWlzdGV0IElDRS1mb3JiaW5kZWxzZW4iCisKKyM6IG9zX3VuaXguYzo1NTY1Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAixXBuaW5nIGF2IFgtZGlzcGxheSBmZWlsZXQiCisKKyM6IG9zX3VuaXguYzo1ODg3Cittc2dpZCAiWFNNUCBoYW5kbGluZyBzYXZlLXlvdXJzZWxmIHJlcXVlc3QiCittc2dzdHIgIlhTTVAgaOVuZHRlcmVyIFwicmVkZC1kZWctc2VsdlwiLWZvcmVzcPhyc2VsIgorCisjOiBvc191bml4LmM6NjAwNgorbXNnaWQgIlhTTVAgb3BlbmluZyBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QIOVwbmVyIGZvcmJpbmRlbHNlIgorCisjOiBvc191bml4LmM6NjAyNQorbXNnaWQgIlhTTVAgSUNFIGNvbm5lY3Rpb24gd2F0Y2ggZmFpbGVkIgorbXNnc3RyICJPdmVyduVrbmluZyBhdiBYU01QIElDRS1mb3JiaW5kZWxzZSBmZWlsZXQiCisKKyM6IG9zX3VuaXguYzo2MDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlhTTVAgU21jT3BlbkNvbm5lY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBmZWlsZXQ6ICVzIgorCisjOiBvc192bXNfbW1zLmM6NTkKK21zZ2lkICJBdCBsaW5lIgorbXNnc3RyICJQ5SBsaW5qZSIKKworIzogb3NfdzMyZXhlLmM6NjUKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjb21tYW5kIGxpbmUuIgorbXNnc3RyICJLbGFydGUgaWtrZSByZXNlcnZlcmUgaHVrb21tZWxzZSBmb3Iga29tbWFuZG9saW5qZW4uIgorCisjOiBvc193MzJleGUuYzo2NiBvc193MzJleGUuYzo4OSBvc193MzJleGUuYzoxMDAKK21zZ2lkICJWSU0gRXJyb3IiCittc2dzdHIgIlZJTS1mZWlsIgorCisjOiBvc193MzJleGUuYzo4OQorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHZpbTMyLmRsbCEiCittc2dzdHIgIktsYXJ0ZSBpa2tlIGxhc3RlIHZpbTMyLmRsbCEiCisKKyM6IG9zX3czMmV4ZS5jOjk5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAiS2xhcnRlIGlra2Ugb3JkbmUgb3BwIGkgZnVua3Nqb25zcGVrZXJlIHRpbCBETEwtZW4hIgorCisjOiBvc193aW4xNi5jOjM0MiBvc193aW4zMi5jOjMyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hlbGwgcmV0dXJuZWQgJWQiCittc2dzdHIgInNrYWxsZXQgcmV0dXJuZXJ0ZSAlZCIKKworIzogb3Nfd2luMzIuYzoyNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0ICVzIGV2ZW50XG4iCittc2dzdHIgIlZpbTogTW90dG9rIFwiJXNcIi1oZW5kZWxzZVxuIgorCisjOiBvc193aW4zMi5jOjI3MDgKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAibHVrayIKKworIzogb3Nfd2luMzIuYzoyNzEwCittc2dpZCAibG9nb2ZmIgorbXNnc3RyICJsb2dnIGF2IgorCisjOiBvc193aW4zMi5jOjI3MTEKK21zZ2lkICJzaHV0ZG93biIKK21zZ3N0ciAia2r4ciBuZWQiCisKKyM6IG9zX3dpbjMyLmM6MzIwMQorbXNnaWQgIkUzNzE6IENvbW1hbmQgbm90IGZvdW5kIgorbXNnc3RyICJFMzcxOiBLb21tYW5kbyBpa2tlIGZ1bm5ldCIKKworIzogb3Nfd2luMzIuYzozMjE0Cittc2dpZCAiIgorIlZJTVJVTi5FWEUgbm90IGZvdW5kIGluIHlvdXIgJFBBVEguXG4iCisiRXh0ZXJuYWwgY29tbWFuZHMgd2lsbCBub3QgcGF1c2UgYWZ0ZXIgY29tcGxldGlvbi5cbiIKKyJTZWUgIDpoZWxwIHdpbjMyLXZpbXJ1biAgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiVklNUlVOLkVYRSBpa2tlIGZ1bm5ldCBpICRQQVRILlxuIgorIkVrc3Rlcm5lIGtvbW1hbmRvZXIga29tbWVyIGlra2UgdGlsIOUgdmVudGUgZXR0ZXIgZnVsbGb4cmluZy5cbiIKKyJTZSBcIjpoZWxwIHdpbjMyLXZpbXJ1blwiIGZvciBtZXIgaW5mb3JtYXNqb24uIgorCisjOiBvc193aW4zMi5jOjMyMTcKK21zZ2lkICJWaW0gV2FybmluZyIKK21zZ3N0ciAiVmltLWFkdmFyc2VsIgorCisjOiBxdWlja2ZpeC5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcyOiBUb28gbWFueSAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzI6IEZvciBtYW5nZSAlJSVjIGkgZm9ybWF0c3RyZW5nIgorCisjOiBxdWlja2ZpeC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MzogVXZlbnRldCAlJSVjIGkgZm9ybWF0c3RyZW5nIgorCisjOiBxdWlja2ZpeC5jOjMyNQorbXNnaWQgIkUzNzQ6IE1pc3NpbmcgXSBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc0OiBNYW5nbGVyIF0gaSBmb3JtYXRzdHJlbmciCisKKyM6IHF1aWNrZml4LmM6MzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogJSUlYyBpa2tlIHN0+HR0ZXQgaSBmb3JtYXRzdHJlbmciCisKKyM6IHF1aWNrZml4LmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzY6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIHByZWZpeCIKK21zZ3N0ciAiRTM3NjogVWd5bGRpZyAlJSVjIGkgZm9ybWF0c3RyZW5nLXByZWZpa3MiCisKKyM6IHF1aWNrZml4LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzc6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc3OiBVZ3lsZGlnICUlJWMgaSBmb3JtYXRzdHJlbmciCisKKyM6IHF1aWNrZml4LmM6MzkxCittc2dpZCAiRTM3ODogJ2Vycm9yZm9ybWF0JyBjb250YWlucyBubyBwYXR0ZXJuIgorbXNnc3RyICJFMzc4OiAnZXJyb3Jmb3JtYXQnIGlubmVob2xkZXIgaWtrZSBz+Gtlc3RyZW5nIgorCisjOiBxdWlja2ZpeC5jOjUwMQorbXNnaWQgIkUzNzk6IE1pc3Npbmcgb3IgZW1wdHkgZGlyZWN0b3J5IG5hbWUiCittc2dzdHIgIkUzNzk6IE1hbmdsZW5kZSBlbGxlciB0b210IGthdGFsb2duYXZuIgorCisjOiBxdWlja2ZpeC5jOjk5MAorbXNnaWQgIkU1NTM6IE5vIG1vcmUgaXRlbXMiCittc2dzdHIgIkU1NTM6IEluZ2VuIGZsZXJlIGVsZW1lbnRlciIKKworIzogcXVpY2tmaXguYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiglZCBvZiAlZCklcyVzOiAiCittc2dzdHIgIiglZCBhdiAlZCklcyVzOiAiCisKKyM6IHF1aWNrZml4LmM6MTIzMQorbXNnaWQgIiAobGluZSBkZWxldGVkKSIKK21zZ3N0ciAiIChsaW5qZW4gc2xldHRldCkiCisKKyM6IHF1aWNrZml4LmM6MTQ0NAorbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDogUOUgYnVubmVuIGF2IHF1aWNrZml4LXN0YWNrIgorCisjOiBxdWlja2ZpeC5jOjE0NTMKK21zZ2lkICJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODE6IFDlIHRvcHBlbiBhdiBxdWlja2ZpeC1zdGFjayIKKworIzogcXVpY2tmaXguYzoxNDY1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAiZmVpbGxpc3RlICVkIGF2ICVkOyAlZCBmZWlsIgorCisjOiBxdWlja2ZpeC5jOjE5NDMKK21zZ2lkICJFMzgyOiBDYW5ub3Qgd3JpdGUsICdidWZ0eXBlJyBvcHRpb24gaXMgc2V0IgorbXNnc3RyICJFMzgyOiBLYW4gaWtrZSBsYWdyZSwgJ2J1ZnR5cGUnLXZhbGdldCBlciBzYXR0IgorCisjOiByZWdleHAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2OTogaW52YWxpZCBpdGVtIGluICVzJSVbXSIKK21zZ3N0ciAiRTM2OTogVWd5bGRpZyBlbGVtZW50IGkgJXMlJVtdIgorCisjOiByZWdleHAuYzo4MzgKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiBT+Gtlc3RyZW5nZW4gZXIgZm9yIGxhbmciCisKKyM6IHJlZ2V4cC5jOjEwMDkKK21zZ2lkICJFNTA6IFRvbyBtYW55IFxceigiCittc2dzdHIgIkU1MDogRm9yIG1hbmdlIFxceigiCisKKyM6IHJlZ2V4cC5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUxOiBUb28gbWFueSAlcygiCittc2dzdHIgIkU1MTogRm9yIG1hbmdlICVzKCIKKworIzogcmVnZXhwLmM6MTA3NworbXNnaWQgIkU1MjogVW5tYXRjaGVkIFxceigiCittc2dzdHIgIkU1MjogVXNhbXN2YXJlbmRlIFxceigiCisKKyM6IHJlZ2V4cC5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOiBVbm1hdGNoZWQgJXMlJSgiCittc2dzdHIgIkU1MzogVXNhbXN2YXJlbmRlICVzJSUoIgorCisjOiByZWdleHAuYzoxMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NDogVW5tYXRjaGVkICVzKCIKK21zZ3N0ciAiRTU0OiBVc2Ftc3ZhcmVuZGUgJXMoIgorCisjOiByZWdleHAuYzoxMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTogVW5tYXRjaGVkICVzKSIKK21zZ3N0ciAiRTU1OiBVc2Ftc3ZhcmVuZGUgJXMpIgorCisjOiByZWdleHAuYzoxMjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjogJXMqIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1NjogXCIlcypcIi1vcGVyYXRvcmVuIGt1bm5lIHbmcmUgdG9tIgorCisjOiByZWdleHAuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzogJXMrIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1NzogXCIlcytcIi1vcGVyYXRvcmVuIGt1bm5lIHbmcmUgdG9tIgorCisjOiByZWdleHAuYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTogaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXNAIgorbXNnc3RyICJFNTk6IFVneWxkaWcgdGVnbiBldHRlciAlc0AiCisKKyM6IHJlZ2V4cC5jOjEzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU4OiAlc3sgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU4OiBcIiVze1wiLW9wZXJhdG9yZW4ga3VubmUgduZyZSB0b20iCisKKyM6IHJlZ2V4cC5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwOiBUb28gbWFueSBjb21wbGV4ICVzey4uLn1zIgorbXNnc3RyICJFNjA6IEZvciBtYW5nZSBrb21wbGVrc2UgJXN7Li4ufXMiCisKKyM6IHJlZ2V4cC5jOjEzNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOiBOZXN0ZWQgJXMqIgorbXNnc3RyICJFNjE6IE74c3RlZGUgJXMqIgorCisjOiByZWdleHAuYzoxMzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjogTmVzdGVkICVzJWMiCittc2dzdHIgIkU2MjogTvhzdGVkZSAlcyVjIgorCisjOiByZWdleHAuYzoxNDkxCittc2dpZCAiRTYzOiBpbnZhbGlkIHVzZSBvZiBcXF8iCittc2dzdHIgIkU2MzogVWd5bGRpZyBicnVrIGF2IFxcXyIKKworIzogcmVnZXhwLmM6MTUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjQ6ICVzJWMgZm9sbG93cyBub3RoaW5nIgorbXNnc3RyICJFNjQ6ICVzJWMgZXR0ZXJm+GxnZXIgaW5nZW50aW5nIgorCisjOiByZWdleHAuYzoxNTkyCittc2dpZCAiRTY1OiBJbGxlZ2FsIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICJFNjU6IFVsb3ZsaWcgdGlsYmFrZXJlZmVyYW5zZSIKKworIzogcmVnZXhwLmM6MTYwNQorbXNnaWQgIkU2NjogXFx6KCBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNjY6IFxceiggaWtrZSB0aWxsYXR0IGhlciIKKworIzogcmVnZXhwLmM6MTYyNAorbXNnaWQgIkU2NzogXFx6MSBldCBhbC4gbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY3OiBcXHoxIG1lZCB2ZW5uZXIgZXIgaWtrZSB0aWxsYXR0IGhlciIKKworIzogcmVnZXhwLmM6MTYzNQorbXNnaWQgIkU2ODogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFx6IgorbXNnc3RyICJFNjg6IFVneWxkaWcgdGVnbiBldHRlciBcXHoiCisKKyM6IHJlZ2V4cC5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY5OiBNaXNzaW5nIF0gYWZ0ZXIgJXMlJVsiCittc2dzdHIgIkU2OTogTWFuZ2xlciBdIGV0dGVyICVzJSVbIgorCisjOiByZWdleHAuYzoxNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MDogRW1wdHkgJXMlJVtdIgorbXNnc3RyICJFNzA6IFRvbSAlcyUlW10iCisKKyM6IHJlZ2V4cC5jOjE3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTcxOiBJbnZhbGlkIGNoYXJhY3RlciBhZnRlciAlcyUlIgorbXNnc3RyICJFNzE6IFVneWxkaWcgdGVnbiBldHRlciAlcyUlIgorCisjOiByZWdleHAuYzoyNTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTQ6IFN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICJFNTU0OiBTeW50YWtzZmVpbCBpICVzey4uLn0iCisKKyM6IHJlZ2V4cC5jOjI4NjMgcmVnZXhwLmM6MzAxNgorbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiBLcuZzaiBmYW5nZXQgb3BwOyByZWd1bOZydCB1dHRyeWtrIGZvciBrb21wbGVrc3Q/IgorCisjOiByZWdleHAuYzozMDA0IHJlZ2V4cC5jOjMwMTMKK21zZ2lkICJFMzYzOiBwYXR0ZXJuIGNhdXNlZCBvdXQtb2Ytc3RhY2sgZXJyb3IiCittc2dzdHIgIkUzNjM6IFP4a2VzdHJlbmcgZm9y5XJzYWtldCB1dC1hdi1zdGFjay1mZWlsIgorCisjOiByZWdleHAuYzozMjU4Cittc2dpZCAiRXh0ZXJuYWwgc3VibWF0Y2hlczpcbiIKK21zZ3N0ciAiRWtzdGVybmUgZGVsdHJlZmY6XG4iCisKKyM6IHNjcmVlbi5jOjIxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0tJTNsZCBsaW5lcyBmb2xkZWQgIgorbXNnc3RyICIrLS0lM2xkIGxpbmplciBmb2xkZXQgIgorCisjOiBzY3JlZW4uYzo4MDAwCittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgVi1FUlNUQVRUIgorCisjOiBzY3JlZW4uYzo4MDA0Cittc2dpZCAiIFJFUExBQ0UiCittc2dzdHIgIiBFUlNUQVRUIgorCisjOiBzY3JlZW4uYzo4MDA5Cittc2dpZCAiIFJFVkVSU0UiCittc2dzdHIgIiBPTVZFTkRUIgorCisjOiBzY3JlZW4uYzo4MDExCittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIFNFVFQgSU5OIgorCisjOiBzY3JlZW4uYzo4MDE0Cittc2dpZCAiIChpbnNlcnQpIgorbXNnc3RyICIgKHNldHQgaW5uKSIKKworIzogc2NyZWVuLmM6ODAxNgorbXNnaWQgIiAocmVwbGFjZSkiCittc2dzdHIgIiAoZXJzdGF0dCkiCisKKyM6IHNjcmVlbi5jOjgwMTgKK21zZ2lkICIgKHZyZXBsYWNlKSIKK21zZ3N0ciAiICh2LWVyc3RhdHQpIgorCisjOiBzY3JlZW4uYzo4MDIxCittc2dpZCAiIEhlYnJldyIKK21zZ3N0ciAiIGhlYnJhaXNrIgorCisjOiBzY3JlZW4uYzo4MDMyCittc2dpZCAiIEFyYWJpYyIKK21zZ3N0ciAiIGFyYWJpc2siCisKKyM6IHNjcmVlbi5jOjgwMzUKK21zZ2lkICIgKGxhbmcpIgorbXNnc3RyICIgKGxhbmcpIgorCisjOiBzY3JlZW4uYzo4MDM5Cittc2dpZCAiIChwYXN0ZSkiCittc2dzdHIgIiAobGltIGlubikiCisKKyM6IHNjcmVlbi5jOjgwNTIKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgVklTVUVMTCIKKworIzogc2NyZWVuLmM6ODA1MworbXNnaWQgIiBWSVNVQUwgTElORSIKK21zZ3N0ciAiIFZJU1VFTEwgTElOSkUiCisKKyM6IHNjcmVlbi5jOjgwNTQKK21zZ2lkICIgVklTVUFMIEJMT0NLIgorbXNnc3RyICIgVklTVUVMTCBCTE9LSyIKKworIzogc2NyZWVuLmM6ODA1NQorbXNnaWQgIiBTRUxFQ1QiCittc2dzdHIgIiBWRUxHIgorCisjOiBzY3JlZW4uYzo4MDU2Cittc2dpZCAiIFNFTEVDVCBMSU5FIgorbXNnc3RyICIgVkVMRyBMSU5KRSIKKworIzogc2NyZWVuLmM6ODA1NworbXNnaWQgIiBTRUxFQ1QgQkxPQ0siCittc2dzdHIgIiBWRUxHIEJMT0tLIgorCisjOiBzY3JlZW4uYzo4MDcyIHNjcmVlbi5jOjgxMzUKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgInNwaWxsZXIgaW5uIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIKK21zZ3N0ciAiU/hrZXQgdHJhZmYgVE9QUEVOLCBmb3J0c2V0dGVyIGZyYSBCVU5ORU4iCisKKyM6IHNlYXJjaC5jOjM4Cittc2dpZCAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIgorbXNnc3RyICJT+GtldCB0cmFmZiBCVU5ORU4sIGZvcnRzZXR0ZXIgZnJhIFRPUFBFTiIKKworIzogc2VhcmNoLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IFVneWxkaWcgc/hrZXN0cmVuZzogJXMiCisKKyM6IHNlYXJjaC5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzg0OiBzZWFyY2ggaGl0IFRPUCB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODQ6IFP4a2V0IGtvbSB0aWwgVE9QUEVOIHV0ZW4gdHJlZmYgcOU6ICVzIgorCisjOiBzZWFyY2guYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NTogc2VhcmNoIGhpdCBCT1RUT00gd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg1OiBT+GtldCBrb20gdGlsIEJVTk5FTiB1dGVuIHRyZWZmIHDlOiAlcyIKKworIzogc2VhcmNoLmM6MTI0OQorbXNnaWQgIkUzODY6IEV4cGVjdGVkICc/JyBvciAnLycgIGFmdGVyICc7JyIKK21zZ3N0ciAiRTM4NjogRm9ydmVudGV0ICc/JyBlbGxlciAnLycgZXR0ZXIgJzsnIgorCisjOiBzZWFyY2guYzozNzY4Cittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAoaW5rbHVkZXJlciB0aWRsaWdlcmUgdXRsaXN0ZWRlIHRyZWZmKSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNzg4Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIElua2x1ZGVydGUgZmlsZXIgIgorCisjOiBzZWFyY2guYzozNzkwCittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAiaWtrZSBmdW5uZXQgIgorCisjOiBzZWFyY2guYzozNzkxCittc2dpZCAiaW4gcGF0aCAtLS1cbiIKK21zZ3N0ciAiaSBzdGkgLS0tXG4iCisKKyM6IHNlYXJjaC5jOjM4NDgKK21zZ2lkICIgIChBbHJlYWR5IGxpc3RlZCkiCittc2dzdHIgIiAgKEFsbGVyZWRlIGxpc3RldCkiCisKKyM6IHNlYXJjaC5jOjM4NTAKK21zZ2lkICIgIE5PVCBGT1VORCIKK21zZ3N0ciAiICBJS0tFIEZVTk5FVCIKKworIzogc2VhcmNoLmM6MzkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBpbmNsdWRlZCBmaWxlOiAlcyIKK21zZ3N0ciAiTGV0ZXIgZ2plbm5vbSBpbmtsdWRlcnQgZmlsOiAlcyIKKworIzogc2VhcmNoLmM6NDEyMAorbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4NzogVHJlZmZldCBlciBw5SBu5XbmcmVuZGUgbGluamUiCisKKyM6IHNlYXJjaC5jOjQyNjMKK21zZ2lkICJBbGwgaW5jbHVkZWQgZmlsZXMgd2VyZSBmb3VuZCIKK21zZ3N0ciAiQWxsZSBpbmtsdWRlcnRlIGZpbGVyIGJsZSBmdW5uZXQiCisKKyM6IHNlYXJjaC5jOjQyNjUKK21zZ2lkICJObyBpbmNsdWRlZCBmaWxlcyIKK21zZ3N0ciAiSW5nZW4gaW5rbHVkZXJ0ZSBmaWxlciIKKworIzogc2VhcmNoLmM6NDI4MQorbXNnaWQgIkUzODg6IENvdWxkbid0IGZpbmQgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRTM4ODogRmFudCBpa2tlIGRlZmluaXNqb25lbiIKKworIzogc2VhcmNoLmM6NDI4MworbXNnaWQgIkUzODk6IENvdWxkbid0IGZpbmQgcGF0dGVybiIKK21zZ3N0ciAiRTM4OTogRmFudCBpa2tlIHP4a2V0ZWtzdGVuIgorCisjOiBzeW50YXguYzozMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTA6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMzkwOiBVbG92bGlnIHBhcmFtZXRlcjogJXMiCisKKyM6IHN5bnRheC5jOjMyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTE6IFN5bnRha3NrbHluZ2VuIGZpbm5lcyBpa2tlOiAlcyIKKworIzogc3ludGF4LmM6MzM5NAorbXNnaWQgIk5vIFN5bnRheCBpdGVtcyBkZWZpbmVkIGZvciB0aGlzIGJ1ZmZlciIKK21zZ3N0ciAiSW5nZW4gc3ludGFrc2VsZW1lbnRlciBlciBkZWZpbmVydCBmb3IgZGVubmUgYnVmZmVyZW4iCisKKyM6IHN5bnRheC5jOjM0MDIKK21zZ2lkICJzeW5jaW5nIG9uIEMtc3R5bGUgY29tbWVudHMiCittc2dzdHIgInN5bmtyb25pc2VyZXIgQy1saWduZW5kZSBrb21tZW50YXJlciIKKworIzogc3ludGF4LmM6MzQxMAorbXNnaWQgIm5vIHN5bmNpbmciCittc2dzdHIgImluZ2VuIHN5bmtyb25pc2VyaW5nIgorCisjOiBzeW50YXguYzozNDEzCittc2dpZCAic3luY2luZyBzdGFydHMgIgorbXNnc3RyICJzeW5rcm9uaXNlcmluZyBzdGFydGVyICIKKworIzogc3ludGF4LmM6MzQxNSBzeW50YXguYzozNDkwCittc2dpZCAiIGxpbmVzIGJlZm9yZSB0b3AgbGluZSIKK21zZ3N0ciAiIGxpbmplciBm+HIgdG9wcGxpbmplIgorCisjOiBzeW50YXguYzozNDIwCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggc3luYyBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gXCJTeW50YXggc3luY1wiLWVsZW1lbnRlciAtLS0iCisKKyM6IHN5bnRheC5jOjM0MjUKK21zZ2lkICIiCisiXG4iCisic3luY2luZyBvbiBpdGVtcyIKK21zZ3N0ciAiIgorIlxuIgorInN5bmtyb25pc2VyZXIgcOUgZWxlbWVudGVyIgorCisjOiBzeW50YXguYzozNDMxCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFN5bnRha3NlbGVtZW50ZXIgLS0tIgorCisjOiBzeW50YXguYzozNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTI6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkyOiBTeW50YWtza2x5bmdlbiBmaW5uZXMgaWtrZTogJXMiCisKKyM6IHN5bnRheC5jOjM0ODAKK21zZ2lkICJtaW5pbWFsICIKK21zZ3N0ciAibWluaW1hbCAiCisKKyM6IHN5bnRheC5jOjM0ODcKK21zZ2lkICJtYXhpbWFsICIKK21zZ3N0ciAibWFrc2ltYWwgIgorCisjOiBzeW50YXguYzozNDk5Cittc2dpZCAiOyBtYXRjaCAiCittc2dzdHIgIjsgc2Ftc3ZhcmVyIG1lZCAiCisKKyM6IHN5bnRheC5jOjM1MDEKK21zZ2lkICIgbGluZSBicmVha3MiCittc2dzdHIgIiBsaW5qZXNraWZ0IgorCisjOiBzeW50YXguYzo0MTM1Cittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzkzOiBcImdyb3VwW3RdaGVyZVwiIGFrc2VwdGVyZXMgaWtrZSBoZXIiCisKKyM6IHN5bnRheC5jOjQxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiBGYW50IGlra2UgcmVnaW9uZWxlbWVudCBmb3IgJXMiCisKKyM6IHN5bnRheC5jOjQxODcKK21zZ2lkICJFMzk1OiBjb250YWlucyBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NTogXCJjb250YWluc1wiLXBhcmFtZXRlciBha3NlcHRlcmVzIGlra2UgaGVyIgorCisjOiBzeW50YXguYzo0MTk4Cittc2dpZCAiRTM5NjogY29udGFpbmVkaW4gYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTY6IFwiY29udGFpbmVkaW5cIi1wYXJhbWV0ZXIgYWtzZXB0ZXJlcyBpa2tlIGhlciIKKworIzogc3ludGF4LmM6NDI3NgorbXNnaWQgIkUzOTc6IEZpbGVuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMzk3OiBUcmVuZ2VyIGZpbG5hdm4iCisKKyM6IHN5bnRheC5jOjQ2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiBNYW5nbGVyICc9JzogJXMiCisKKyM6IHN5bnRheC5jOjQ3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5OTogTm90IGVub3VnaCBhcmd1bWVudHM6IHN5bnRheCByZWdpb24gJXMiCittc2dzdHIgIkUzOTk6IElra2Ugbm9rIHBhcmFtZXRlcmU6IHN5bnRheCByZWdpb24gJXMiCisKKyM6IHN5bnRheC5jOjUxMDMKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDogSW5nZW4ga2x5bmdlIGVyIHNwZXNpZmlzZXJ0IgorCisjOiBzeW50YXguYzo1MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDE6IFBhdHRlcm4gZGVsaW1pdGVyIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MDE6IFNraWxsZXRlZ24gZm9yIHP4a2V0ZWtzdCBibGUgaWtrZSBmdW5uZXQ6ICVzIgorCisjOiBzeW50YXguYzo1MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDI6IEdhcmJhZ2UgYWZ0ZXIgcGF0dGVybjogJXMiCittc2dzdHIgIkU0MDI6IFP4cHBlbCBldHRlciBz+GtldGVrc3Q6ICVzIgorCisjOiBzeW50YXguYzo1MzA1Cittc2dpZCAiRTQwMzogc3ludGF4IHN5bmM6IGxpbmUgY29udGludWF0aW9ucyBwYXR0ZXJuIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiIgorIkU0MDM6IHN5bnRheCBzeW5jOiBT+Gtlc3RyZW5nIGZvciBsaW5qZWZvcnRzZXR0ZWxzZXIgZXIgc3Blc2lmaXNlcnQgdG8gZ2FuZ2VyIgorCisjOiBzeW50YXguYzo1MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDQ6IElsbGVnYWwgYXJndW1lbnRzOiAlcyIKK21zZ3N0ciAiRTQwNDogVWxvdmxpZ2UgcGFyYW1ldGVyZTogJXMiCisKKyM6IHN5bnRheC5jOjU0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNTogTWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQwNTogTWFuZ2xlciBcImVyIGxpa1wiLXRlZ246ICVzIgorCisjOiBzeW50YXguYzo1NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDY6IEVtcHR5IGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQwNjogVG9tdCBwYXJhbWV0ZXI6ICVzIgorCisjOiBzeW50YXguYzo1NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDc6ICVzIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU0MDc6ICVzIGVyIGlra2UgdGlsbGF0dCBoZXIiCisKKyM6IHN5bnRheC5jOjU0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwODogJXMgbXVzdCBiZSBmaXJzdCBpbiBjb250YWlucyBsaXN0IgorbXNnc3RyICJFNDA4OiAlcyBt5SB25nJlIGb4cnN0IGkgXCJjb250YWluc1wiLWxpc3RlIgorCisjOiBzeW50YXguYzo1NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDk6IFVua25vd24gZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkU0MDk6IFVramVudCBncnVwcGVuYXZuOiAlcyIKKworIzogc3ludGF4LmM6NTc1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEwOiBJbnZhbGlkIDpzeW50YXggc3ViY29tbWFuZDogJXMiCittc2dzdHIgIkU0MTA6IFVneWxkaWcgXCI6c3ludGF4XCItZGVsa29tbWFuZG86ICVzIgorCisjOiBzeW50YXguYzo2MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTE6IGhpZ2hsaWdodCBncm91cCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDExOiBGYW50IGlra2UgdXRoZXZpbmdzZ3J1cHBlOiAlcyIKKworIzogc3ludGF4LmM6NjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEyOiBOb3QgZW5vdWdoIGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMjogSWtrZSBub2sgcGFyYW1ldGVyZTogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDEzOiBUb28gbWFueSBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTM6IEZvciBtYW5nZSBwYXJhbWV0ZXJlOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTg3Cittc2dpZCAiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIgorbXNnc3RyICJFNDE0OiBTeW50YXhncnVwcGVuIGhhciBvcHBzZXR0LCB1dGhldmluZ3NsZW5rZSBpZ25vcmVyZXMiCisKKyM6IHN5bnRheC5jOjYzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNTogdW5leHBlY3RlZCBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNTogVXZlbnRldCBcImVyIGxpa1wiLXRlZ246ICVzIgorCisjOiBzeW50YXguYzo2MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IE1hbmdsZXIgXCJlciBsaWtcIi10ZWduOiAlcyIKKworIzogc3ludGF4LmM6NjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE3OiBtaXNzaW5nIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQxNzogTWFuZ2xlciBwYXJhbWV0ZXI6ICVzIgorCisjOiBzeW50YXguYzo2NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTg6IElsbGVnYWwgdmFsdWU6ICVzIgorbXNnc3RyICJFNDE4OiBVbG92bGlnIHZlcmRpOiAlcyIKKworIzogc3ludGF4LmM6NjUzNgorbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6IFVramVudCBmb3JncnVubnNmYXJnZSIKKworIzogc3ludGF4LmM6NjU0NworbXNnaWQgIkU0MjA6IEJHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MjA6IFVramVudCBiYWtncnVubnNmYXJnZSIKKworIzogc3ludGF4LmM6NjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6IEtqZW5uZXIgaWtrZSB0aWwgZmFyZ2VuYXZuZXQgZWxsZXIgLW51bW1lcmV0OiAlcyIKKworIzogc3ludGF4LmM6NjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIyOiB0ZXJtaW5hbCBjb2RlIHRvbyBsb25nOiAlcyIKK21zZ3N0ciAiRTQyMjogVGVybWluYWxrb2RlbiBlciBmb3IgbGFuZzogJXMiCisKKyM6IHN5bnRheC5jOjY4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMzogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MjM6IFVsb3ZsaWcgcGFyYW1ldGVyOiAlcyIKKworIzogc3ludGF4LmM6NzM5MAorbXNnaWQgIkU0MjQ6IFRvbyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBpbiB1c2UiCittc2dzdHIgIkU0MjQ6IEZvciBtYW5nZSBmb3Jza2plbGxpZ2UgdXRoZXZpbmdzYXR0cmlidXR0ZXIgaSBicnVrIgorCisjOiBzeW50YXguYzo3OTExCittc2dpZCAiRTY2OTogVW5wcmludGFibGUgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUiCittc2dzdHIgIkU2Njk6IElra2Utc2tyaXZiYXJ0IHRlZ24gaSBncnVwcGVuYXZuIgorCisjLiBUaGlzIGlzIGFuIGVycm9yLCBidXQgc2luY2UgdGhlcmUgcHJldmlvdXNseSB3YXMgbm8gY2hlY2sgb25seQorIy4gKiBnaXZlIGEgd2FybmluZy4KKyM6IHN5bnRheC5jOjc5MTgKK21zZ2lkICJXMTg6IEludmFsaWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUiCittc2dzdHIgIlcxODogVWd5bGRpZyB0ZWduIGkgZ3J1cHBlbmF2biIKKworIzogdGFnLmM6OTAKK21zZ2lkICJFNTU1OiBhdCBib3R0b20gb2YgdGFnIHN0YWNrIgorbXNnc3RyICJFNTU1OiBQ5SBidW5uZW4gYXYgdGFnLXN0YWNrIgorCisjOiB0YWcuYzo5MQorbXNnaWQgIkU1NTY6IGF0IHRvcCBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTY6IFDlIHRvcHBlbiBhdiB0YWctc3RhY2siCisKKyM6IHRhZy5jOjQxMgorbXNnaWQgIkU0MjU6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI1OiBLYW4gaWtrZSBn5SBm+HIgZvhyc3RlIHNhbXN2YXJlbmRlIHRhZyIKKworIzogdGFnLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjY6IHRhZyBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDI2OiBGYW50IGlra2UgdGFnOiAlcyIKKworIzogdGFnLmM6NTgzCisjfiBtc2dpZCAiICAjIHByaSBraW5kIHRhZyIKKyN+IG1zZ3N0ciAiIgorCisjOiB0YWcuYzo1ODYKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgImZpbFxuIgorCisjLgorIy4gKiBBc2sgdG8gc2VsZWN0IGEgdGFnIGZyb20gdGhlIGxpc3QuCisjLiAqIFdoZW4gdXNpbmcgIjpzaWxlbnQiIGFzc3VtZSB0aGF0IDxDUj4gd2FzIGVudGVyZWQuCisjLgorIzogdGFnLmM6NzQ0Cittc2dpZCAiRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KTogIgorbXNnc3RyICJWZWxnIHRhZyBmcmEgbGlzdGVuICg8Q1I+IGZvciDlIGF2YnJ5dGUpOiAiCisKKyM6IHRhZy5jOjc4NAorbXNnaWQgIkU0Mjc6IFRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNzogRGV0IGZpbm5lcyBiYXJlIGVuIHNhbXN2YXJlbmRlIHRhZyIKKworIzogdGFnLmM6Nzg2Cittc2dpZCAiRTQyODogQ2Fubm90IGdvIGJleW9uZCBsYXN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyODogS2FuIGlra2UgZ+UgYmFrIHNpc3RlIHNhbXN2YXJlbmRlIHRhZyIKKworIzogdGFnLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJGaWxlbiBcIiVzXCIgZmlubmVzIGlra2UiCisKKyMuIEdpdmUgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIHRhZ3MKKyM6IHRhZy5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJWQgb2YgJWQlcyIKK21zZ3N0ciAidGFnICVkIGF2ICVkJXMiCisKKyM6IHRhZy5jOjgyNgorbXNnaWQgIiBvciBtb3JlIgorbXNnc3RyICIgZWxsZXIgbWVyIgorCisjOiB0YWcuYzo4MjgKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiIEJydWtlciB0YWcgbWVkIGZvcnNramVsbGlnIGJva3N0YXZzdPhycmVsc2UhIgorCisjOiB0YWcuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyOTogRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkU0Mjk6IEZpbGVuIFwiJXNcIiBmaW5uZXMgaWtrZSIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0YWcuYzo5NDEKK21zZ2lkICIiCisiXG4iCisiICAjIFRPIHRhZyAgICAgICAgIEZST00gbGluZSAgaW4gZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiICAjIFRJTCB0YWcgICAgICAgIEZSQSAgbGluamUgaSBmaWwvdGVrc3QiCisKKyM6IHRhZy5jOjEzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIHRhZ3MgZmlsZSAlcyIKK21zZ3N0ciAiTGV0ZXIgaSB0YWdmaWwgJXMiCisKKyM6IHRhZy5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IFN0aSB0aWwgdGFnZmlsIGt1dHRldCBmb3IgJXNcbiIKKworIzogdGFnLmM6MjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogRm9ybWF0ZmVpbCBpIHRhZ2ZpbCBcIiVzXCIiCisKKyM6IHRhZy5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICJG+HIgYnl0ZSAlbGQiCisKKyM6IHRhZy5jOjIyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMjogVGFncyBmaWxlIG5vdCBzb3J0ZWQ6ICVzIgorbXNnc3RyICJFNDMyOiBUYWdmaWwgaWtrZSBzb3J0ZXJ0OiAlcyIKKworIy4gbmV2ZXIgb3BlbmVkIGFueSB0YWdzIGZpbGUKKyM6IHRhZy5jOjIyODAKK21zZ2lkICJFNDMzOiBObyB0YWdzIGZpbGUiCittc2dzdHIgIkU0MzM6IEluZ2VuIHRhZ2ZpbCIKKworIzogdGFnLmM6MzAxNgorbXNnaWQgIkU0MzQ6IENhbid0IGZpbmQgdGFnIHBhdHRlcm4iCittc2dzdHIgIkU0MzQ6IEthbiBpa2tlIGZpbm5lIHRhZ3P4a2VzdHJlbmciCisKKyM6IHRhZy5jOjMwMjcKK21zZ2lkICJFNDM1OiBDb3VsZG4ndCBmaW5kIHRhZywganVzdCBndWVzc2luZyEiCittc2dzdHIgIkU0MzU6IEt1bm5lIGlra2UgZmlubmUgdGFnLCBiYXJlIGdqZXR0ZXIhIgorCisjOiB0ZXJtLmM6MTc1OQorbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiJyBpa2tlIGtqZW50LiBUaWxnamVuZ2VsaWdlIGlubmVieWdkZSB0ZXJtaW5hbGVyIGVyOiIKKworIzogdGVybS5jOjE3ODMKK21zZ2lkICJkZWZhdWx0aW5nIHRvICciCittc2dzdHIgImZhbGxlciB0aWxiYWtlIHDlICciCisKKyM6IHRlcm0uYzoyMTQxCittc2dpZCAiRTU1NzogQ2Fubm90IG9wZW4gdGVybWNhcCBmaWxlIgorbXNnc3RyICJFNTU3OiBLYW4gaWtrZSDlcG5lIHRlcm1jYXAtZmlsIgorCisjOiB0ZXJtLmM6MjE0NQorbXNnaWQgIkU1NTg6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtaW5mbyIKK21zZ3N0ciAiRTU1ODogRmFudCBpa2tlIHRlcm1pbmFsb3BwZvhyaW5nIGkgdGVybWluZm8iCisKKyM6IHRlcm0uYzoyMTQ3Cittc2dpZCAiRTU1OTogVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1NTk6IEZhbnQgaWtrZSB0ZXJtaW5hbG9wcGb4cmluZyBpIHRlcm1jYXAiCisKKyM6IHRlcm0uYzoyMzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzY6IE5vIFwiJXNcIiBlbnRyeSBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNDM2OiBJbmdlbiBcIiVzXCItb3BwZvhyaW5nIGkgdGVybWNhcCIKKworIzogdGVybS5jOjI3ODAKK21zZ2lkICJFNDM3OiB0ZXJtaW5hbCBjYXBhYmlsaXR5IFwiY21cIiByZXF1aXJlZCIKK21zZ3N0ciAiRTQzNzogVGVybWluYWxmdW5rc2pvbmVuIFwiY21cIiBu+GR2ZW5kaWciCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGVybS5jOjQ5OTAKK21zZ2lkICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIGtleXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFRlcm1pbmFsdGFzdGVyIC0tLSIKKworIzogdWkuYzoyNTgKK21zZ2lkICJuZXcgc2hlbGwgc3RhcnRlZFxuIgorbXNnc3RyICJueXR0IHNrYWxsIHN0YXJ0ZXRcbiIKKworIzogdWkuYzoxODQxCittc2dpZCAiVmltOiBFcnJvciByZWFkaW5nIGlucHV0LCBleGl0aW5nLi4uXG4iCittc2dzdHIgIlZpbTogRmVpbCB1bmRlciBsZXNpbmcgYXYgaW5uZGF0YSwgYXZzbHV0dGVyoC4uLlxuIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogdW5kby5jOjQwNQorbXNnaWQgIk5vIHVuZG8gcG9zc2libGU7IGNvbnRpbnVlIGFueXdheSIKK21zZ3N0ciAiSW5nZW4gYW5ncmVtdWxpZ2hldGVyOyBmb3J0c2V0dCBsaWtldmVsIgorCisjOiB1bmRvLmM6NTYxCittc2dpZCAiRTQzODogdV91bmRvOiBsaW5lIG51bWJlcnMgd3JvbmciCittc2dzdHIgIkU0Mzg6IHVfdW5kbzogR2FsZSBsaW5qZW51bW1lciIKKworIzogdW5kby5jOjc1NworbXNnaWQgIjEgY2hhbmdlIgorbXNnc3RyICIxIGZvcmFuZHJpbmciCisKKyM6IHVuZG8uYzo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYW5nZXMiCittc2dzdHIgIiVsZCBmb3JhbmRyaW5nZXIiCisKKyM6IHVuZG8uYzo4MTIKK21zZ2lkICJFNDM5OiB1bmRvIGxpc3QgY29ycnVwdCIKK21zZ3N0ciAiRTQzOTogQW5ncmVsaXN0ZW4gZXIgc2thZGV0IgorCisjOiB1bmRvLmM6ODQ0Cittc2dpZCAiRTQ0MDogdW5kbyBsaW5lIG1pc3NpbmciCittc2dzdHIgIkU0NDA6IEFuZ3JlbGlzdGVuIG1hbmdsZXIiCisKKyMuIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMKKyM6IHZlcnNpb24uYzo3MTEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyLWJpdHMgR1VJLXZlcnNqb24iCisKKyM6IHZlcnNpb24uYzo3MTMKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyLWJpdHMgR1VJLXZlcnNqb24iCisKKyM6IHZlcnNpb24uYzo3MTYKK21zZ2lkICIgaW4gV2luMzJzIG1vZGUiCittc2dzdHIgIiBpIFdpbjMycy1tb2R1cyIKKworIzogdmVyc2lvbi5jOjcxOAorbXNnaWQgIiB3aXRoIE9MRSBzdXBwb3J0IgorbXNnc3RyICIgbWVkIE9MRS1zdPh0dGUiCisKKyM6IHZlcnNpb24uYzo3MjEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgY29uc29sZSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMi1iaXRzIGtvbnNvbGx2ZXJzam9uIgorCisjOiB2ZXJzaW9uLmM6NzI1Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYgYml0IHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LWJpdHMgdmVyc2pvbiIKKworIzogdmVyc2lvbi5jOjcyOQorbXNnaWQgIiIKKyJcbiIKKyIzMiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMi1iaXRzIE1TLURPUy12ZXJzam9uIgorCisjOiB2ZXJzaW9uLmM6NzMxCittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2LWJpdHMgTVMtRE9TLXZlcnNqb24iCisKKyM6IHZlcnNpb24uYzo3MzcKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpLXZlcnNqb24iCisKKyM6IHZlcnNpb24uYzo3MzkKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgWC12ZXJzam9uIgorCisjOiB2ZXJzaW9uLmM6NzQyCittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUy12ZXJzam9uIgorCisjOiB2ZXJzaW9uLmM6NzQ3Cittc2dpZCAiIgorIlxuIgorIlJJU0MgT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlJJU0MgT1MtdmVyc2pvbiIKKworIzogdmVyc2lvbi5jOjc1NworbXNnaWQgIiIKKyJcbiIKKyJJbmNsdWRlZCBwYXRjaGVzOiAiCittc2dzdHIgIiIKKyJcbiIKKyJJbmtsdWRlcnRlIHBhdGNoZXI6ICIKKworIzogdmVyc2lvbi5jOjc4MyB2ZXJzaW9uLmM6MTE1MQorbXNnaWQgIk1vZGlmaWVkIGJ5ICIKK21zZ3N0ciAiTW9kaWZpc2VydCBhdiAiCisKKyM6IHZlcnNpb24uYzo3OTAKK21zZ2lkICIiCisiXG4iCisiQ29tcGlsZWQgIgorbXNnc3RyICIiCisiXG4iCisiS29tcGlsZXJ0ICIKKworIzogdmVyc2lvbi5jOjc5MworbXNnaWQgImJ5ICIKK21zZ3N0ciAiYXYgIgorCisjOiB2ZXJzaW9uLmM6ODA1Cittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJEaWdlciAoXCJodWdlXCIpIHZlcnNqb24gIgorCisjOiB2ZXJzaW9uLmM6ODA4Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlN0b3IgKFwiYmlnXCIpIHZlcnNqb24gIgorCisjOiB2ZXJzaW9uLmM6ODExCittc2dpZCAiIgorIlxuIgorIk5vcm1hbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIk5vcm1hbCB2ZXJzam9uICIKKworIzogdmVyc2lvbi5jOjgxNAorbXNnaWQgIiIKKyJcbiIKKyJTbWFsbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIkxpdGVuIChcInNtYWxsXCIpIHZlcnNqb24gIgorCisjOiB2ZXJzaW9uLmM6ODE2Cittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJTcGlua2VsIChcInRpbnlcIikgdmVyc2pvbiAiCisKKyM6IHZlcnNpb24uYzo4MjIKK21zZ2lkICJ3aXRob3V0IEdVSS4iCittc2dzdHIgInV0ZW4gR1VJLiIKKworIzogdmVyc2lvbi5jOjgyNworbXNnaWQgIndpdGggR1RLMi1HTk9NRSBHVUkuIgorbXNnc3RyICJtZWQgR1RLMi1HTk9NRSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODI5Cittc2dpZCAid2l0aCBHVEstR05PTUUgR1VJLiIKK21zZ3N0ciAibWVkIEdUSy1HTk9NRSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODMzCittc2dpZCAid2l0aCBHVEsyIEdVSS4iCittc2dzdHIgIm1lZCBHVEsyIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4MzUKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICJtZWQgR1RLIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4NDAKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICJtZWQgWDExLU1vdGlmIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4NDQKK21zZ2lkICJ3aXRoIFgxMS1uZVh0YXcgR1VJLiIKK21zZ3N0ciAibWVkIFgxMS1uZVh0YXcgR1VJLiIKKworIzogdmVyc2lvbi5jOjg0NgorbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICJtZWQgWDExLUF0aGVuYSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODUwCittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgIm1lZCBCZU9TIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4NTMKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICJtZWQgUGhvdG9uIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4NTYKK21zZ2lkICJ3aXRoIEdVSS4iCittc2dzdHIgIm1lZCBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODU5Cittc2dpZCAid2l0aCBDYXJib24gR1VJLiIKK21zZ3N0ciAibWVkIENhcmJvbiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6ODYyCittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICJtZWQgQ29jb2EgR1VJLiIKKworIzogdmVyc2lvbi5jOjg2NQorbXNnaWQgIndpdGggKGNsYXNzaWMpIEdVSS4iCittc2dzdHIgIm1lZCAoa2xhc3Npc2spIEdVSS4iCisKKyM6IHZlcnNpb24uYzo4NzYKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIgIEZ1bmtzam9uZXIgaW5rbHVkZXJ0ICgrKSBlbGxlciBpa2tlICgtKTpcbiIKKworIzogdmVyc2lvbi5jOjg4OAorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICB2aW1yYy1maWwgcOUgc3lzdGVtZXQ6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODkzCittc2dpZCAiICAgICB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgIHZpbXJjLWZpbCBmb3IgYnJ1a2VyZTogXCIiCisKKyM6IHZlcnNpb24uYzo4OTgKK21zZ2lkICIgMm5kIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgdmltcmMtZmlsIG5yLiAyIGZvciBicnVrZXJlOiBcIiIKKworIzogdmVyc2lvbi5jOjkwMworbXNnaWQgIiAzcmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICB2aW1yYy1maWwgbnIuIDMgZm9yIGJydWtlcmU6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTA4Cittc2dpZCAiICAgICAgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgICBleHJjLWZpbCBmb3IgYnJ1a2VyZTogXCIiCisKKyM6IHZlcnNpb24uYzo5MTMKK21zZ2lkICIgIDJuZCB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgIGV4cmMtZmlsIG5yLiAyIGZvciBicnVrZXJlOiBcIiIKKworIzogdmVyc2lvbi5jOjkxOQorbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgIGd2aW1yYy1maWwgcOUgc3lzdGVtZXQ6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTIzCittc2dpZCAiICAgIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgZ3ZpbXJjLWZpbCBmb3IgYnJ1a2VyZTogXCIiCisKKyM6IHZlcnNpb24uYzo5MjcKK21zZ2lkICIybmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiBndmltcmMtZmlsIG5yLiAyIGZvciBicnVrZXJlOiBcIiIKKworIzogdmVyc2lvbi5jOjkzMgorbXNnaWQgIjNyZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIGd2aW1yYy1maWwgbnIuIDMgZm9yIGJydWtlcmU6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTM5Cittc2dpZCAiICAgIHN5c3RlbSBtZW51IGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgICAgbWVueWZpbCBw5SBzeXN0ZW1ldDogXCIiCisKKyM6IHZlcnNpb24uYzo5NDcKK21zZ2lkICIgIGZhbGwtYmFjayBmb3IgJFZJTTogXCIiCittc2dzdHIgIiAgICAgICAkVklNIGZhbGxlciB0aWxiYWtlIHDlOiBcIiIKKworIzogdmVyc2lvbi5jOjk1MworbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiJFZJTVJVTlRJTUUgZmFsbGVyIHRpbGJha2UgcOU6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTU3Cittc2dpZCAiQ29tcGlsYXRpb246ICIKK21zZ3N0ciAiS29tcGlsZXJpbmc6ICIKKworIzogdmVyc2lvbi5jOjk2MworbXNnaWQgIkNvbXBpbGVyOiAiCittc2dzdHIgIktvbXBpbGF0b3I6ICIKKworIzogdmVyc2lvbi5jOjk2OAorbXNnaWQgIkxpbmtpbmc6ICIKK21zZ3N0ciAiTGlua2luZzogIgorCisjOiB2ZXJzaW9uLmM6OTczCittc2dpZCAiICBERUJVRyBCVUlMRCIKK21zZ3N0ciAiICBERUJVR0dJTkdTVkVSU0pPTiIKKworIzogdmVyc2lvbi5jOjEwMTIKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVmkgSU1wcm92ZWQgLSBGb3JiZWRyZXQgVmkiCisKKyM6IHZlcnNpb24uYzoxMDE0Cittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgInZlcnNqb24gIgorCisjOiB2ZXJzaW9uLmM6MTAxNQorbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAiYXYgQnJhbSBNb29sZW5hYXIgbWVkIGZsZXJlIgorCisjOiB2ZXJzaW9uLmM6MTAxOQorbXNnaWQgIlZpbSBpcyBvcGVuIHNvdXJjZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUiCittc2dzdHIgIlZpbSBlciDlcGVuIGtpbGRla29kZSBvZyBrYW4gZnJpdHQgZGlzdHJpYnVlcmVzIgorCisjOiB2ZXJzaW9uLmM6MTAyMQorbXNnaWQgIkhlbHAgcG9vciBjaGlsZHJlbiBpbiBVZ2FuZGEhIgorbXNnc3RyICJIamVscCBmYXR0aWdlIGJhcm4gaSBVZ2FuZGEhIgorCisjOiB2ZXJzaW9uLmM6MTAyMgorbXNnaWQgInR5cGUgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgInNrcml2ICA6aGVscCBpY2NmPEVudGVyPiAgICAgICAgICBmb3IgaW5mb3JtYXNqb24gICIKKworIzogdmVyc2lvbi5jOjEwMjQKK21zZ2lkICJ0eXBlICA6cTxFbnRlcj4gICAgICAgICAgICAgICB0byBleGl0ICAgICAgICAgIgorbXNnc3RyICJza3JpdiAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgICAgZm9yIOUgYXZzbHV0dGUgICAiCisKKyM6IHZlcnNpb24uYzoxMDI1Cittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAic2tyaXYgIDpoZWxwPEVudGVyPiAgZWxsZXIgIDxGMT4gIGZvciBvbi1saW5lIGhqZWxwIgorCisjOiB2ZXJzaW9uLmM6MTAyNgorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgInNrcml2ICA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICAgICBmb3IgdmVyc2pvbnNpbmZvICIKKworIzogdmVyc2lvbi5jOjEwMjkKK21zZ2lkICJSdW5uaW5nIGluIFZpIGNvbXBhdGlibGUgbW9kZSIKK21zZ3N0ciAiS2r4cmVyIGkgVmkta29tcGF0aWJlbCBtb2R1cyIKKworIzogdmVyc2lvbi5jOjEwMzAKK21zZ2lkICJ0eXBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBmb3IgVmltIGRlZmF1bHRzIgorbXNnc3RyICJza3JpdiAgOnNldCBub2NwPEVudGVyPiAgICAgICAgICAgZm9yIHN0YW5kYXJkIFZpbSAiCisKKyM6IHZlcnNpb24uYzoxMDMxCittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAic2tyaXYgIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+ICAgIGZvciBpbmZvcm1hc2pvbiAgIgorCisjOiB2ZXJzaW9uLmM6MTA0NgorbXNnaWQgIm1lbnUgIEhlbHAtPk9ycGhhbnMgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIm1lbnk6ICBIamVscC0+Rm9yZWxkcmVs+HNlICAgICAgICBmb3IgaW5mb3JtYXNqb24gICIKKworIzogdmVyc2lvbi5jOjEwNDgKK21zZ2lkICJSdW5uaW5nIG1vZGVsZXNzLCB0eXBlZCB0ZXh0IGlzIGluc2VydGVkIgorbXNnc3RyICJLavhyZXIgdXRlbiBtb2R1cywgdGFzdGV0cnlrayBibGlyIGxhZ3QgaW5uIGkgdGVrc3RlbiIKKworIzogdmVyc2lvbi5jOjEwNDkKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBJbnNlcnQgTW9kZSAgIgorbXNnc3RyICJtZW55OiAgUmVkaWdlci0+R2xvYmFsZSBpbm5zdGlsbGluZ2VyLT5Jbm5zZXR0aW5nc21vZHVzIGF2L3DlIgorCisjOiB2ZXJzaW9uLmM6MTA1MAorbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0d28gbW9kZXMgICAgICAiCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdG8gbW9kdXNlciAgICIKKworIzogdmVyc2lvbi5jOjEwNTQKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBWaSBDb21wYXRpYmxlIgorbXNnc3RyICJtZW55OiAgUmVkaWdlci0+R2xvYmFsZSBpbm5zdGlsbGluZ2VyLT5WaS1rb21wYXRpYmlsaXRldCBhdi9w5SIKKworIzogdmVyc2lvbi5jOjEwNTUKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgVmltIGRlZmF1bHRzICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN0YW5kYXJkIFZpbSAiCisKKyM6IHZlcnNpb24uYzoxMTAyCittc2dpZCAiU3BvbnNvciBWaW0gZGV2ZWxvcG1lbnQhIgorbXNnc3RyICJTdPh0dCB1dHZpa2xpbmdlbiBhdiBWaW0hIgorCisjOiB2ZXJzaW9uLmM6MTEwMworbXNnaWQgIkJlY29tZSBhIHJlZ2lzdGVyZWQgVmltIHVzZXIhIgorbXNnc3RyICJCbGkgcmVnaXN0cmVydCBicnVrZXIgYXYgVmltISIKKworIzogdmVyc2lvbi5jOjExMDYKK21zZ2lkICJ0eXBlICA6aGVscCBzcG9uc29yPEVudGVyPiAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJza3JpdiAgOmhlbHAgc3BvbnNvcjxFbnRlcj4gICAgICAgZm9yIGluZm9ybWFzam9uICAiCisKKyM6IHZlcnNpb24uYzoxMTA3Cittc2dpZCAidHlwZSAgOmhlbHAgcmVnaXN0ZXI8RW50ZXI+ICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAic2tyaXYgIDpoZWxwIHJlZ2lzdGVyPEVudGVyPiAgICAgIGZvciBpbmZvcm1hc2pvbiAgIgorCisjOiB2ZXJzaW9uLmM6MTEwOQorbXNnaWQgIm1lbnUgIEhlbHAtPlNwb25zb3IvUmVnaXN0ZXIgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIm1lbnk6ICBIamVscC0+U3T4dHRlL1JlZ2lzdHJlcmluZyAgZm9yIGluZm9ybWFzam9uICIKKworIzogdmVyc2lvbi5jOjExMTkKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICJBRFZBUlNFTDogV2luZG93cyA5NS85OC9NRSBvcHBkYWdldCIKKworIzogdmVyc2lvbi5jOjExMjIKK21zZ2lkICJ0eXBlICA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJza3JpdiAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgICAgZm9yIGluZm9ybWFzam9uICAiCisKKyM6IHdpbmRvdy5jOjIwMworbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiBWaW5kdSBmb3IgZm9yaOVuZHN2aXNuaW5nIGZpbm5lcyBpa2tlIgorCisjOiB3aW5kb3cuYzo1ODEKK21zZ2lkICJFNDQyOiBDYW4ndCBzcGxpdCB0b3BsZWZ0IGFuZCBib3RyaWdodCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJFNDQyOiBLYW4gaWtrZSBzcGxpdHRlIFwidG9wbGVmdFwiIG9nIFwiYm90cmlnaHRcIiBw5SBlbiBnYW5nIgorCisjOiB3aW5kb3cuYzoxMzQwCittc2dpZCAiRTQ0MzogQ2Fubm90IHJvdGF0ZSB3aGVuIGFub3RoZXIgd2luZG93IGlzIHNwbGl0IgorbXNnc3RyICJFNDQzOiBLYW4gaWtrZSByb3RlcmUgbuVyIGV0IGFubmV0IHZpbmR1IGVyIHNwbGl0dGV0IgorCisjOiB3aW5kb3cuYzoxODM2Cittc2dpZCAiRTQ0NDogQ2Fubm90IGNsb3NlIGxhc3Qgd2luZG93IgorbXNnc3RyICJFNDQ0OiBLYW4gaWtrZSBsdWtrZSBkZXQgc2lzdGUgdmluZHVldCIKKworIzogd2luZG93LmM6MjU2NworbXNnaWQgIkFscmVhZHkgb25seSBvbmUgd2luZG93IgorbXNnc3RyICJBbGxlcmVkZSBiYXJlIGV0dCB2aW5kdSIKKworIzogd2luZG93LmM6MjYxNAorbXNnaWQgIkU0NDU6IE90aGVyIHdpbmRvdyBjb250YWlucyBjaGFuZ2VzIgorbXNnc3RyICJFNDQ1OiBBbm5ldCB2aW5kdSBpbm5laG9sZGVyIGZvcmFuZHJpbmdlciIKKworIzogd2luZG93LmM6NDQ4MAorbXNnaWQgIkU0NDY6IE5vIGZpbGUgbmFtZSB1bmRlciBjdXJzb3IiCittc2dzdHIgIkU0NDY6IEluZ2VuIGZpbG5hdm4gdW5kZXIgbWFya/hyZW4iCisKKyM6IHdpbmRvdy5jOjQ1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0NzogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFNDQ3OiBLYW4gaWtrZSBmaW5uZSBmaWxlbiBcIiVzXCIgaSBzdGllbiIKKworIzogZ2xvYmFscy5oOjEyNDEgaWZfcGVybC54czozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MDogQ291bGQgbm90IGxvYWQgbGlicmFyeSAlcyIKK21zZ3N0ciAiRTM3MDogS2xhcnRlIGlra2UgbGFzdGUgYmlibGlvdGVrICVzIgorCisjOiBpZl9wZXJsLnhzOjU1NAorbXNnaWQgIlNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBQZXJsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIkRlbm5lIGtvbW1hbmRvZW4gZXIgZGVha3RpdmVydCwgUGVybC1iaWJsaW90ZWtldCBrdW5uZSBpa2tlIGxhc3Rlcy4iCisKKyM6IGlmX3BlcmwueHM6NjA3Cittc2dpZCAiRTI5OTogUGVybCBldmFsdWF0aW9uIGZvcmJpZGRlbiBpbiBzYW5kYm94IHdpdGhvdXQgdGhlIFNhZmUgbW9kdWxlIgorbXNnc3RyICIiCisiRTI5OTogRXZhbHVlcmluZyBhdiBQZXJsIGVyIGlra2UgdGlsbGF0dCBpIHNhbmRrYXNzZW4gdXRlbiBcIlNhZmVcIi1tb2R1bGVuIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjU4MworbXNnaWQgIkVkaXQgd2l0aCAmbXVsdGlwbGUgVmltcyIKK21zZ3N0ciAiUmVkaWdlciBtZWQgJmZsZXJlIFZpbS1lciIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODkKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgIlJlZGlnZXIgbWVkIGVua2VsICZWaW0iCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTk4Cittc2dpZCAiJkRpZmYgd2l0aCBWaW0iCittc2dzdHIgIiZEaWZmZXJhbnNlIG1lZCBWaW0iCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NjExCittc2dpZCAiRWRpdCB3aXRoICZWaW0iCittc2dzdHIgIlJlZGlnZXIgbWVkICZWaW0iCisKKyMuIE5vdyBjb25jYXRlbmF0ZQorIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo2MzMKK21zZ2lkICJFZGl0IHdpdGggZXhpc3RpbmcgVmltIC0gJiIKK21zZ3N0ciAiUmVkaWdlciBtZWQgZWtzaXN0ZXJlbmRlIFZpbSAtICYiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NzQ2Cittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgIlJlZGlnZXJlciBkZShuKSB2YWxndGUgZmlsZW4oZSkgbWVkIFZpbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4ODUgR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjYKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwcm9jZXNzOiBDaGVjayBpZiBndmltIGlzIGluIHlvdXIgcGF0aCEiCittc2dzdHIgIktsYXJ0ZSBpa2tlIGxhZ2UgcHJvc2VzczogU2pla2sgYXQgZ3ZpbSBlciBpIHN0aWVuISIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4ODYgR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDAgR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjcKK21zZ2lkICJndmltZXh0LmRsbCBlcnJvciIKK21zZ3N0ciAiRmVpbCBpIGd2aW1leHQuZGxsIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg5OQorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAiTGVuZ2RlbiBw5SBzdGllbiBlciBmb3IgbGFuZyEiCisKKyM6IGdsb2JhbHMuaDoxMDMxCittc2dpZCAiLS1ObyBsaW5lcyBpbiBidWZmZXItLSIKK21zZ3N0ciAiLS1JbmdlbiBsaW5qZXIgaSBidWZmZXJlbi0tIgorCisjLgorIy4gKiBUaGUgZXJyb3IgbWVzc2FnZXMgdGhhdCBjYW4gYmUgc2hhcmVkIGFyZSBpbmNsdWRlZCBoZXJlLgorIy4gKiBFeGNsdWRlZCBhcmUgZXJyb3JzIHRoYXQgYXJlIG9ubHkgdXNlZCBvbmNlIGFuZCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisjLgorIzogZ2xvYmFscy5oOjExOTQKK21zZ2lkICJFNDcwOiBDb21tYW5kIGFib3J0ZWQiCittc2dzdHIgIkU0NzA6IEtvbW1hbmRvZW4gYXZicnV0dCIKKworIzogZ2xvYmFscy5oOjExOTUKK21zZ2lkICJFNDcxOiBBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAiRTQ3MTogUGFyYW1ldGVyIG74ZHZlbmRpZyIKKworIzogZ2xvYmFscy5oOjExOTYKK21zZ2lkICJFMTA6IFxcIHNob3VsZCBiZSBmb2xsb3dlZCBieSAvLCA/IG9yICYiCittc2dzdHIgIkUxMDogXFwgc2t1bGxlIGhhIHbmcnQgZnVsZ3QgYXYgLywgPyBlbGxlciAmIgorCisjOiBnbG9iYWxzLmg6MTE5OAorbXNnaWQgIkUxMTogSW52YWxpZCBpbiBjb21tYW5kLWxpbmUgd2luZG93OyA8Q1I+IGV4ZWN1dGVzLCBDVFJMLUMgcXVpdHMiCittc2dzdHIgIkUxMTogVWd5bGRpZyBpIGtvbW1hbmRvbGluamV2aW5kdTsgPEVOVEVSPiB1dGb4cmVyLCBDVFJMLUMgYXZzbHV0dGVyIgorCisjOiBnbG9iYWxzLmg6MTIwMAorbXNnaWQgIkUxMjogQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaCIKK21zZ3N0ciAiIgorIkUxMjogS29tbWFuZG9lbiBlciBpa2tlIHRpbGxhdHQgZnJhIGV4cmMvdmltcmMgaSBu5XbmcmVuZGUga2F0YWxvZyBlbGxlciAiCisidGFnc/hrIgorCisjOiBnbG9iYWxzLmg6MTIwMgorbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiBNYW5nbGVyIDplbmRpZiIKKworIzogZ2xvYmFscy5oOjEyMDMKK21zZ2lkICJFNjAwOiBNaXNzaW5nIDplbmR0cnkiCittc2dzdHIgIkU2MDA6IE1hbmdsZXIgOmVuZHRyeSIKKworIzogZ2xvYmFscy5oOjEyMDQKK21zZ2lkICJFMTcwOiBNaXNzaW5nIDplbmR3aGlsZSIKK21zZ3N0ciAiRTE3MDogTWFuZ2xlciA6ZW5kd2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMjA1Cittc2dpZCAiRTU4ODogOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg4OiA6ZW5kd2hpbGUgdXRlbiA6d2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMjA3Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IEZpbGVuIGZpbm5lcyAobGVnZyB0aWwgISBmb3Ig5SBvdmVyc3R5cmUpIgorCisjOiBnbG9iYWxzLmg6MTIwOAorbXNnaWQgIkU0NzI6IENvbW1hbmQgZmFpbGVkIgorbXNnc3RyICJFNDcyOiBLb21tYW5kb2VuIGZlaWxldCIKKworIzogZ2xvYmFscy5oOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNDogVW5rbm93biBmb250c2V0OiAlcyIKK21zZ3N0ciAiRTIzNDogVWtqZW50IHNrcmlmdHR5cGVzZXR0OiAlcyIKKworIzogZ2xvYmFscy5oOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogVW5rbm93biBmb250OiAlcyIKK21zZ3N0ciAiRTIzNTogVWtqZW50IHNrcmlmdHR5cGU6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IFNrcmlmdHR5cGVuIFwiJXNcIiBoYXIgaWtrZSBmYXN0IGJyZWRkZSIKKworIzogZ2xvYmFscy5oOjEyMTkKK21zZ2lkICJFNDczOiBJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiRTQ3MzogSW50ZXJuIGZlaWwiCisKKyM6IGdsb2JhbHMuaDoxMjIwCittc2dpZCAiSW50ZXJydXB0ZWQiCittc2dzdHIgIkF2YnJ1dHQiCisKKyM6IGdsb2JhbHMuaDoxMjIxCittc2dpZCAiRTE0OiBJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIkUxNDogVWd5bGRpZyBhZHJlc3NlIgorCisjOiBnbG9iYWxzLmg6MTIyMgorbXNnaWQgIkU0NzQ6IEludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkU0NzQ6IFVneWxkaWcgcGFyYW1ldGVyIgorCisjOiBnbG9iYWxzLmg6MTIyMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDc1OiBJbnZhbGlkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQ3NTogVWd5bGRpZyBwYXJhbXRlcjogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTogSW52YWxpZCBleHByZXNzaW9uOiAlcyIKK21zZ3N0ciAiRTE1OiBVZ3lsZGlnIHV0dHJ5a2s6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIyNworbXNnaWQgIkUxNjogSW52YWxpZCByYW5nZSIKK21zZ3N0ciAiRTE2OiBVZ3lsZGlnIG9tcuVkZSIKKworIzogZ2xvYmFscy5oOjEyMjgKK21zZ2lkICJFNDc2OiBJbnZhbGlkIGNvbW1hbmQiCittc2dzdHIgIkU0NzY6IFVneWxkaWcga29tbWFuZG8iCisKKyM6IGdsb2JhbHMuaDoxMjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzogXCIlc1wiIGlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJFMTc6IFwiJXNcIiBlciBlbiBrYXRhbG9nIgorCisjOiBnbG9iYWxzLmg6MTIzMworbXNnaWQgIkUxODogVW5leHBlY3RlZCBjaGFyYWN0ZXJzIGJlZm9yZSAnPSciCittc2dzdHIgIkUxODogVXZlbnRlZGUgdGVnbiBm+HIgJz0nIgorCisjOiBnbG9iYWxzLmg6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY0OiBMaWJyYXJ5IGNhbGwgZmFpbGVkIGZvciBcIiVzKClcIiIKK21zZ3N0ciAiRTM2NDogQmlibGlvdGVrLWthbGwgZmVpbGV0IGZvciBcIiVzKClcIiIKKworIzogZ2xvYmFscy5oOjEyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0ODogQ291bGQgbm90IGxvYWQgbGlicmFyeSBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTQ0ODogS2xhcnRlIGlra2UgbGFzdGUgYmlibGlvdGVrc2Z1bmtzam9uICVzIgorCisjOiBnbG9iYWxzLmg6MTI0NAorbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiBNZXJrZXQgaGFyIGV0IHVneWxkaWcgbGluamVudW1tZXIiCisKKyM6IGdsb2JhbHMuaDoxMjQ1Cittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIkUyMDogTWVya2V0IGJsZSBpa2tlIHNhdHQiCisKKyM6IGdsb2JhbHMuaDoxMjQ2Cittc2dpZCAiRTIxOiBDYW5ub3QgbWFrZSBjaGFuZ2VzLCAnbW9kaWZpYWJsZScgaXMgb2ZmIgorbXNnc3RyICJFMjE6IEthbiBpa2tlIGdq+HJlIGZvcmFuZHJpbmdlciwgJ21vZGlmaWFibGUnIGVyIGF2IgorCisjOiBnbG9iYWxzLmg6MTI0NworbXNnaWQgIkUyMjogU2NyaXB0cyBuZXN0ZWQgdG9vIGRlZXAiCittc2dzdHIgIkUyMjogU2tyaXB0cyBu+HN0ZXQgZm9yIGR5cHQiCisKKyM6IGdsb2JhbHMuaDoxMjQ4Cittc2dpZCAiRTIzOiBObyBhbHRlcm5hdGUgZmlsZSIKK21zZ3N0ciAiRTIzOiBJbmdlbiBhbHRlcm5hdGl2IGZpbCIKKworIzogZ2xvYmFscy5oOjEyNDkKK21zZ2lkICJFMjQ6IE5vIHN1Y2ggYWJicmV2aWF0aW9uIgorbXNnc3RyICJFMjQ6IEZvcmtvcnRlbHNlbiBmaW5uZXMgaWtrZSIKKworIzogZ2xvYmFscy5oOjEyNTAKK21zZ2lkICJFNDc3OiBObyAhIGFsbG93ZWQiCittc2dzdHIgIkU0Nzc6IEluZ2VuICEgdGlsbGF0dCIKKworIzogZ2xvYmFscy5oOjEyNTIKK21zZ2lkICJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICJFMjU6IEdVSSBrYW4gaWtrZSBicnVrZXM6IElra2Ugc2zldHQgcOUgdW5kZXIga29tcGlsZXJpbmciCisKKyM6IGdsb2JhbHMuaDoxMjU1Cittc2dpZCAiRTI2OiBIZWJyZXcgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjY6IEhlYnJhaXNrIGthbiBpa2tlIGJydWtlczogSWtrZSBzbOV0dCBw5SB1bmRlciBrb21waWxlcmluZ1xuIgorCisjOiBnbG9iYWxzLmg6MTI1OAorbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICIiCisiRTI3OiBQZXJzaXNrIChGYXJzaSkga2FuIGlra2UgYnJ1a2VzOiBJa2tlIHNs5XR0IHDlIHVuZGVyIGtvbXBpbGVyaW5nXG4iCisKKyM6IGdsb2JhbHMuaDoxMjYxCittc2dpZCAiRTgwMDogQXJhYmljIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTgwMDogQXJhYmlzayBrYW4gaWtrZSBicnVrZXM6IElra2Ugc2zldHQgcOUgdW5kZXIga29tcGlsZXJpbmdcbiIKKworIzogZ2xvYmFscy5oOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBVdGhldmluZ3NncnVwcGUgZmlubmVzIGlra2U6ICVzIgorCisjOiBnbG9iYWxzLmg6MTI2NgorbXNnaWQgIkUyOTogTm8gaW5zZXJ0ZWQgdGV4dCB5ZXQiCittc2dzdHIgIkUyOTogSW5nZW4gaW5ubGFndCB0ZWtzdCBlbmRhIgorCisjOiBnbG9iYWxzLmg6MTI2NworbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6IEluZ2VuIHRpZGxpZ2VyZSBrb21tYW5kb2xpbmplIgorCisjOiBnbG9iYWxzLmg6MTI2OAorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IE1hcHBpbmdlbiBmaW5uZXMgaWtrZSIKKworIzogZ2xvYmFscy5oOjEyNjkKK21zZ2lkICJFNDc5OiBObyBtYXRjaCIKK21zZ3N0ciAiRTQ3OTogSW5nZW4gdHJlZmYiCisKKyM6IGdsb2JhbHMuaDoxMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODA6IE5vIG1hdGNoOiAlcyIKK21zZ3N0ciAiRTQ4MDogSW5nZW4gdHJlZmY6ICVzIgorCisjOiBnbG9iYWxzLmg6MTI3MQorbXNnaWQgIkUzMjogTm8gZmlsZSBuYW1lIgorbXNnc3RyICJFMzI6IE1hbmdsZXIgZmlsbmF2biIKKworIzogZ2xvYmFscy5oOjEyNzIKK21zZ2lkICJFMzM6IE5vIHByZXZpb3VzIHN1YnN0aXR1dGUgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzM6IEluZ2VuIHRpZGxpZ2VyZSBlcnN0YXRuaW5nZXIgbWVkIHJlZ3Vs5nJlIHV0dHJ5a2siCisKKyM6IGdsb2JhbHMuaDoxMjczCittc2dpZCAiRTM0OiBObyBwcmV2aW91cyBjb21tYW5kIgorbXNnc3RyICJFMzQ6IEluZ2VuIHRpZGxpZ2VyZSBrb21tYW5kbyIKKworIzogZ2xvYmFscy5oOjEyNzQKK21zZ2lkICJFMzU6IE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTM1OiBJbmdlbiB0aWRsaWdlcmUgcmVndWzmcmUgdXR0cnlrayIKKworIzogZ2xvYmFscy5oOjEyNzUKK21zZ2lkICJFNDgxOiBObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICJFNDgxOiBPbXLlZGUgZXIgaWtrZSB0aWxsYXR0IgorCisjOiBnbG9iYWxzLmg6MTI3NworbXNnaWQgIkUzNjogTm90IGVub3VnaCByb29tIgorbXNnc3RyICJFMzY6IElra2Ugbm9rIHBsYXNzIgorCisjOiBnbG9iYWxzLmg6MTI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6IEluZ2VuIHJlZ2lzdHJlcnQgdGplbmVyIGthbHQgXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDgyOiBDYW4ndCBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiRTQ4MjogS2FuIGlra2Ugb3BwcmV0dGUgZmlsZW4gJXMiCisKKyM6IGdsb2JhbHMuaDoxMjgzCittc2dpZCAiRTQ4MzogQ2FuJ3QgZ2V0IHRlbXAgZmlsZSBuYW1lIgorbXNnc3RyICJFNDgzOiBLYW4gaWtrZSBoZW50ZSBuYXZuIHDlIG1pZGxlcnRpZGlnIGZpbCIKKworIzogZ2xvYmFscy5oOjEyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NDogQ2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJFNDg0OiBLYW4gaWtrZSDlcG5lIGZpbGVuICVzIgorCisjOiBnbG9iYWxzLmg6MTI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg1OiBDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIkU0ODU6IEthbiBpa2tlIGxlc2UgZmlsZW4gJXMiCisKKyM6IGdsb2JhbHMuaDoxMjg2Cittc2dpZCAiRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMzc6IElra2UgbGFncmV0IHNpZGVuIGZvcnJpZ2UgZm9yYW5kcmluZyAobGVnZyB0aWwgISBmb3Ig5SBvdmVyc3R5cmUpIgorCisjOiBnbG9iYWxzLmg6MTI4NworbXNnaWQgIkUzODogTnVsbCBhcmd1bWVudCIKK21zZ3N0ciAiRTM4OiBOdWxscGFyYW1ldGVyIgorCisjOiBnbG9iYWxzLmg6MTI4OQorbXNnaWQgIkUzOTogTnVtYmVyIGV4cGVjdGVkIgorbXNnc3RyICJFMzk6IE51bW1lciBmb3J2ZW50ZXQiCisKKyM6IGdsb2JhbHMuaDoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDogS2FuIGlra2Ug5XBuZSBmZWlsZmlsZW4gJXMiCisKKyM6IGdsb2JhbHMuaDoxMjk1Cittc2dpZCAiRTIzMzogY2Fubm90IG9wZW4gZGlzcGxheSIKK21zZ3N0ciAiRTIzMzogS2FuIGlra2Ug5XBuZSBkaXNwbGF5IgorCisjOiBnbG9iYWxzLmg6MTI5NworbXNnaWQgIkU0MTogT3V0IG9mIG1lbW9yeSEiCittc2dzdHIgIkU0MTogSWtrZSBtZXIgbGVkaWcgaHVrb21tZWxzZSEiCisKKyM6IGdsb2JhbHMuaDoxMjk5Cittc2dpZCAiUGF0dGVybiBub3QgZm91bmQiCittc2dzdHIgIkZhbnQgaWtrZSBz+GtldGVrc3RlbiIKKworIzogZ2xvYmFscy5oOjEzMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NjogUGF0dGVybiBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDg2OiBGYW50IGlra2Ugc/hrZXRla3N0ZW46ICVzIgorCisjOiBnbG9iYWxzLmg6MTMwMgorbXNnaWQgIkU0ODc6IEFyZ3VtZW50IG11c3QgYmUgcG9zaXRpdmUiCittc2dzdHIgIkU0ODc6IFBhcmFtZXRlcmV0IG3lIHbmcmUgcG9zaXRpdnQiCisKKyM6IGdsb2JhbHMuaDoxMzA0Cittc2dpZCAiRTQ1OTogQ2Fubm90IGdvIGJhY2sgdG8gcHJldmlvdXMgZGlyZWN0b3J5IgorbXNnc3RyICJFNDU5OiBLYW4gaWtrZSBn5SB0aWxiYWtlIHRpbCB0aWRsaWdlcmUga2F0YWxvZyIKKworIzogZ2xvYmFscy5oOjEzMDgKK21zZ2lkICJFNDI6IE5vIEVycm9ycyIKK21zZ3N0ciAiRTQyOiBJbmdlbiBmZWlsIgorCisjOiBnbG9iYWxzLmg6MTMxMAorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0Mzog2GRlbGFndCBz+Gtlc3RyZW5nIgorCisjOiBnbG9iYWxzLmg6MTMxMQorbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6IFNrYWRldCBwcm9ncmFtIG1lZCByZWd1bOZydCB1dHRyeWtrIgorCisjOiBnbG9iYWxzLmg6MTMxMgorbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU0NTogJ3JlYWRvbmx5Jy12YWxnZXQgZXIgc2F0dCAobGVnZyB0aWwgISBmb3Ig5SBvdmVyc3R5cmUpIgorCisjOiBnbG9iYWxzLmg6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDY6IENhbm5vdCBzZXQgcmVhZC1vbmx5IHZhcmlhYmxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ2OiBLYW4gaWtrZSBzZXR0ZSBza3JpdmViZXNreXR0ZXQgdmFyaWFiZWwgXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTMxNworbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0NzogRmVpbCB1bmRlciBsZXNpbmcgYXYgZmVpbGZpbGVuIgorCisjOiBnbG9iYWxzLmg6MTMyMAorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiBJa2tlIHRpbGxhdHQgaSBzYW5ka2Fzc2VuIgorCisjOiBnbG9iYWxzLmg6MTMyMgorbXNnaWQgIkU1MjM6IE5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU1MjM6IElra2UgdGlsbGF0dCBoZXIiCisKKyM6IGdsb2JhbHMuaDoxMzI1Cittc2dpZCAiRTM1OTogU2NyZWVuIG1vZGUgc2V0dGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFMzU5OiBGb3JhbmRyaW5nIGF2IHNramVybW1vZHVzIGVyIGlra2Ugc3T4dHRldCIKKworIzogZ2xvYmFscy5oOjEzMjcKK21zZ2lkICJFNDk6IEludmFsaWQgc2Nyb2xsIHNpemUiCittc2dzdHIgIkU0OTogVWd5bGRpZyBcInNjcm9sbFwiLXZlcmRpIgorCisjOiBnbG9iYWxzLmg6MTMyOAorbXNnaWQgIkU5MTogJ3NoZWxsJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIkU5MTogJ3NoZWxsJy12YWxnZXQgZXIgdG9tdCIKKworIzogZ2xvYmFscy5oOjEzMzAKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IEt1bm5lIGlra2UgbGVzZSBpbm4gc2tpbHRkYXRhISIKKworIzogZ2xvYmFscy5oOjEzMzIKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiBGZWlsIHVuZGVyIGx1a2tpbmcgYXYgc3dhcGZpbCIKKworIzogZ2xvYmFscy5oOjEzMzMKK21zZ2lkICJFNzM6IHRhZyBzdGFjayBlbXB0eSIKK21zZ3N0ciAiRTczOiBUYWctc3RhY2sgdG9tIgorCisjOiBnbG9iYWxzLmg6MTMzNAorbXNnaWQgIkU3NDogQ29tbWFuZCB0b28gY29tcGxleCIKK21zZ3N0ciAiRTc0OiBLb21tYW5kb2VuIGVyIGZvciBrb21wbGVrcyIKKworIzogZ2xvYmFscy5oOjEzMzUKK21zZ2lkICJFNzU6IE5hbWUgdG9vIGxvbmciCittc2dzdHIgIkU3NTogTmF2bmV0IGVyIGZvciBsYW5ndCIKKworIzogZ2xvYmFscy5oOjEzMzYKK21zZ2lkICJFNzY6IFRvbyBtYW55IFsiCittc2dzdHIgIkU3NjogRm9yIG1hbmdlIFsiCisKKyM6IGdsb2JhbHMuaDoxMzM3Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IEZvciBtYW5nZSBmaWxuYXZuIgorCisjOiBnbG9iYWxzLmg6MTMzOAorbXNnaWQgIkU0ODg6IFRyYWlsaW5nIGNoYXJhY3RlcnMiCittc2dzdHIgIkU0ODg6IEV0dGVyZvhsZ2VuZGUgdGVnbiIKKworIzogZ2xvYmFscy5oOjEzMzkKK21zZ2lkICJFNzg6IFVua25vd24gbWFyayIKK21zZ3N0ciAiRTc4OiBVa2plbnQgbWVya2UiCisKKyM6IGdsb2JhbHMuaDoxMzQwCittc2dpZCAiRTc5OiBDYW5ub3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiRTc5OiBLbGFydGUgaWtrZSB1dHZpZGUgam9rZXJ0ZWduIgorCisjOiBnbG9iYWxzLmg6MTM0MgorbXNnaWQgIkU1OTE6ICd3aW5oZWlnaHQnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbmhlaWdodCciCittc2dzdHIgIkU1OTE6ICd3aW5oZWlnaHQnIGthbiBpa2tlIHbmcmUgbWluZHJlIGVubiAnd2lubWluaGVpZ2h0JyIKKworIzogZ2xvYmFscy5oOjEzNDQKK21zZ2lkICJFNTkyOiAnd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiRTU5MjogJ3dpbndpZHRoJyBrYW4gaWtrZSB25nJlIG1pbmRyZSBlbm4gJ3dpbm1pbndpZHRoJyIKKworIzogZ2xvYmFscy5oOjEzNDcKK21zZ2lkICJFODA6IEVycm9yIHdoaWxlIHdyaXRpbmciCittc2dzdHIgIkU4MDogRmVpbCB1bmRlciBza3JpdmluZyIKKworIzogZ2xvYmFscy5oOjEzNDgKK21zZ2lkICJaZXJvIGNvdW50IgorbXNnc3RyICJBbnRhbGwgcmVwZXRlcmluZ2VyIGVyIG51bGwiCisKKyM6IGdsb2JhbHMuaDoxMzUwCittc2dpZCAiRTgxOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dCIKK21zZ3N0ciAiRTgxOiBCcnVrZXIgPFNJRD4gdXRlbm9tIHNrcmlwdC1rb250ZWtzdCIKKworIzogZ2xvYmFscy5oOjEzNTMKK21zZ2lkICJFNDQ5OiBJbnZhbGlkIGV4cHJlc3Npb24gcmVjZWl2ZWQiCittc2dzdHIgIkU0NDk6IFVneWxkaWcgdXR0cnlrayBtb3R0YXR0IgorCisjOiBnbG9iYWxzLmg6MTM1NgorbXNnaWQgIkU0NjM6IFJlZ2lvbiBpcyBndWFyZGVkLCBjYW5ub3QgbW9kaWZ5IgorbXNnc3RyICJFNDYzOiBSZWdpb25lbiBlciBiZXNreXR0ZXQgb2cga2FuIGlra2UgbW9kaWZpc2VyZXMiCmRpZmYgLS1naXQgYS9zcmMvcG8vcGwuY3AxMjUwLnBvIGIvc3JjL3BvL3BsLmNwMTI1MC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTY5YWU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL3BsLmNwMTI1MC5wbwpAQCAtMCwwICsxLDY1NzYgQEAKKyMgdHJhbnNsYXRpb24gb2YgcGwucG8gdG8gUG9saXNoCisjIFBvbGlzaCBUcmFuc2xhdGlvbiBmb3IgVmltCisjCisjIHVwZGF0ZWQgMjAwMSBmb3IgdmltLTYuMAorIyBGSVJTVCBBVVRIT1IgTWFyY2luIERhbGVja2kgPGRhbGVja2lAY3liZXIuY3MubmV0LnBsPiwgMjAwMC4KKyMgTWlrb2xhaiBNYWNob3dza2kgPG1pa21hY2hAd3AucGw+LCAyMDA0LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcGxcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwNC0wNS0yMyAyMTo0MSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNC0wNS0yMyAyMjowMCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNaWtvbGFqIE1hY2hvd3NraSA8bWlrbWFjaEB3cC5wbD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBQb2xpc2ggPHBsQGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1jcDEyNTBcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjlcbiIKKworIzogYnVmZmVyLmM6MTAyCittc2dpZCAiRTgyOiBDYW5ub3QgYWxsb2NhdGUgYW55IGJ1ZmZlciwgZXhpdGluZy4uLiIKK21zZ3N0ciAiRTgyOiBOaWUgbW9n6iB6YXJlemVyd293YeYgYnVmb3JhOyB6YWtv8WN6ZW5pZS4uLiIKKworIzogYnVmZmVyLmM6MTA1Cittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4MzogTmllIG1vZ+ogemFyZXplcndvd2HmIGJ1Zm9yYTsgdb95d2FtIGlubmVnby4uLiIKKworIzogYnVmZmVyLmM6ODA1Cittc2dpZCAiRTUxNTogTm8gYnVmZmVycyB3ZXJlIHVubG9hZGVkIgorbXNnc3RyICJFNTE1OiBOaWUgd3mzYWRvd2FubyC/YWRuZWdvIGJ1Zm9yYSIKKworIzogYnVmZmVyLmM6ODA3Cittc2dpZCAiRTUxNjogTm8gYnVmZmVycyB3ZXJlIGRlbGV0ZWQiCittc2dzdHIgIkU1MTY6IE5pZSBza2Fzb3dhbm8gv2FkbmVnbyBidWZvcmEiCisKKyM6IGJ1ZmZlci5jOjgwOQorbXNnaWQgIkU1MTc6IE5vIGJ1ZmZlcnMgd2VyZSB3aXBlZCBvdXQiCittc2dzdHIgIkU1MTc6IE5pZSB3eXJ6dWNvbm8gv2FkbmVnbyBidWZvcmEiCisKKyM6IGJ1ZmZlci5jOjgxNworbXNnaWQgIjEgYnVmZmVyIHVubG9hZGVkIgorbXNnc3RyICIxIGJ1Zm9yIHd5s2Fkb3dhbnkiCisKKyM6IGJ1ZmZlci5jOjgxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHVubG9hZGVkIgorbXNnc3RyICJ3ebNhZG93YW5vICVkIGJ1Zm9y83ciCisKKyM6IGJ1ZmZlci5jOjgyNAorbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIjEgYnVmb3Igc2thc293YW55IgorCisjOiBidWZmZXIuYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICIlZCBidWZvcvN3IHNrYXNvd2FubyIKKworIzogYnVmZmVyLmM6ODMxCittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICJ3eXJ6dWNvbm8gMSBidWZvciAiCisKKyM6IGJ1ZmZlci5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHdpcGVkIG91dCIKK21zZ3N0ciAid3lyenVjb25vICVkIGJ1Zm9y83ciCisKKyM6IGJ1ZmZlci5jOjg5NAorbXNnaWQgIkU4NDogTm8gbW9kaWZpZWQgYnVmZmVyIGZvdW5kIgorbXNnc3RyICJFODQ6IE5pZSB6bmFsZXppb25vIHptaWVuaW9ueWNoIGJ1Zm9y83ciCisKKyMuIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCwgZGlkbid0IGZpbmQgYW55dGhpbmcuCisjOiBidWZmZXIuYzo5MzMKK21zZ2lkICJFODU6IFRoZXJlIGlzIG5vIGxpc3RlZCBidWZmZXIiCittc2dzdHIgIkU4NTogTmllIG1hIHd5bGlzdG93YW55Y2ggYnVmb3LzdyIKKworIzogYnVmZmVyLmM6OTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQnVmZmVyICVsZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTg2OiBCdWZvciBcIiVsZFwiIG5pZSBpc3RuaWVqZSIKKworIzogYnVmZmVyLmM6OTQ4Cittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6IE5pZSBtb2fqIHByemVqnOYgcG96YSBvc3RhdG5pIGJ1Zm9yIgorCisjOiBidWZmZXIuYzo5NTAKK21zZ2lkICJFODg6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgYnVmZmVyIgorbXNnc3RyICJFODg6IE5pZSBtb2fqIHByemVqnOYgcHJ6ZWQgcGllcndzenkgYnVmb3IiCisKKyM6IGJ1ZmZlci5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFODk6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgJWxkIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU4OSBOaWUgemFwaXNhbm8gem1pYW4gdyBidWZvcnplICVsZCAod3ltdZwgcHJ6ZXogISkiCisKKyM6IGJ1ZmZlci5jOjEwMDUKK21zZ2lkICJFOTA6IENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU5MDogTmllIG1vZ+ogd3mzYWRvd2HmIG9zdGF0bmllZ28gYnVmb3JhIgorCisjOiBidWZmZXIuYzoxNTM4Cittc2dpZCAiVzE0OiBXYXJuaW5nOiBMaXN0IG9mIGZpbGUgbmFtZXMgb3ZlcmZsb3ciCittc2dzdHIgIlcxNDogT1NUUlpFr0VOSUU6IFByemVwZbNuaWVuaWUgbGlzdHkgbmF6dyBwbGlr83ciCisKKyM6IGJ1ZmZlci5jOjE3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkyOiBCdWZmZXIgJWxkIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTkyOiBOaWUgem5hbGV6aW9ubyBidWZvcmEgJWxkIgorCisjOiBidWZmZXIuYzoxOTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5MzogV2llbG9rcm90bmUgZG9wYXNvd2FuaWEgZGxhICVzIgorCisjOiBidWZmZXIuYzoxOTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiCvYWRlbiBidWZvciBuaWUgcGFzdWplIGRvICVzIgorCisjOiBidWZmZXIuYzoyMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIgorbXNnc3RyICJ3aWVyc3ogJWxkIgorCisjOiBidWZmZXIuYzoyNDIwCittc2dpZCAiRTk1OiBCdWZmZXIgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU5NTogQnVmb3IgbyB0ZWogbmF6d2llIGp1vyBpc3RuaWVqZSIKKworIzogYnVmZmVyLmM6MjcxMworbXNnaWQgIiBbTW9kaWZpZWRdIgorbXNnc3RyICIgW1ptaWVuaW9ueV0iCisKKyM6IGJ1ZmZlci5jOjI3MTgKK21zZ2lkICJbTm90IGVkaXRlZF0iCittc2dzdHIgIltOaWUgZWR5dG93YW55XSIKKworIzogYnVmZmVyLmM6MjcyMworbXNnaWQgIltOZXcgZmlsZV0iCittc2dzdHIgIltOb3d5IFBsaWtdIgorCisjOiBidWZmZXIuYzoyNzI0Cittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW0KzuWQgb2Rjenl0dV0iCisKKyM6IGJ1ZmZlci5jOjI3MjYgZmlsZWlvLmM6MjExMgorbXNnaWQgIltyZWFkb25seV0iCittc2dzdHIgIlt0eWxrbyBvZGN6eXRdIgorCisjOiBidWZmZXIuYzoyNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAtLSVkJSUtLSIKK21zZ3N0ciAiMSB3aWVyc3ogLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIC0tJWQlJS0tIgorbXNnc3RyICIlbGQgd2llcnN6ZSAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6Mjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCBvZiAlbGQgLS0lZCUlLS0gY29sICIKK21zZ3N0ciAid2llcnN6ICVsZCB6ICVsZCAtLSVkJSUtLSBrb2wgIgorCisjOiBidWZmZXIuYzoyODY0Cittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJbQnJhayBwbGlrdV0iCisKKyMuIG11c3QgYmUgYSBoZWxwIGJ1ZmZlcgorIzogYnVmZmVyLmM6MjkwNAorbXNnaWQgImhlbHAiCittc2dzdHIgInBvbW9jIgorCisjOiBidWZmZXIuYzozNDYzIHNjcmVlbi5jOjUwNzUKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIltwb21vY10iCisKKyM6IGJ1ZmZlci5jOjM0OTUgc2NyZWVuLmM6NTA4MQorbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW1BvZGdsuWRdIgorCisjOiBidWZmZXIuYzozNzc1Cittc2dpZCAiQWxsIgorbXNnc3RyICJXc3p5c3RrbyIKKworIzogYnVmZmVyLmM6Mzc3NQorbXNnaWQgIkJvdCIKK21zZ3N0ciAiRPOzIgorCisjOiBidWZmZXIuYzozNzc3Cittc2dpZCAiVG9wIgorbXNnc3RyICJH83JhIgorCisjOiBidWZmZXIuYzo0NTIzCittc2dpZCAiIgorIlxuIgorIiMgQnVmZmVyIGxpc3Q6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIExpc3RhIGJ1Zm9y83c6XG4iCisKKyM6IGJ1ZmZlci5jOjQ1NTYKK21zZ2lkICJbRXJyb3IgTGlzdF0iCittc2dzdHIgIltMaXN0YSBCs+pk83ddIgorCisjOiBidWZmZXIuYzo0NTY5IG1lbWxpbmUuYzoxNTIwCittc2dpZCAiW05vIEZpbGVdIgorbXNnc3RyICJbQnJhayBQbGlrdV0iCisKKyM6IGJ1ZmZlci5jOjQ4ODIKK21zZ2lkICIiCisiXG4iCisiLS0tIFNpZ25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBabmFraSAtLS0iCisKKyM6IGJ1ZmZlci5jOjQ5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2lnbnMgZm9yICVzOiIKK21zZ3N0ciAiWm5ha2kgZGxhICVzOiIKKworIzogYnVmZmVyLmM6NDkwNworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgbGluZT0lbGQgIGlkPSVkICBuYW1lPSVzIgorbXNnc3RyICIgICAgd2llcnN6PSVsZCAgaWQ9JWQgIG5hendhPSVzIgorCisjOiBkaWZmLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NjogQ2FuIG5vdCBkaWZmIG1vcmUgdGhhbiAlbGQgYnVmZmVycyIKK21zZ3N0ciAiRTk2OiBOaWUgbW9n6iB6cvO/bmljb3dh5iB3aepjZWogbmm/ICVsZCBidWZvcvN3IgorCisjOiBkaWZmLmM6NzA5Cittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6IE5pZSBtb2fqIHN0d29yennmIHLzv25pYyIKKworIzogZGlmZi5jOjgxNAorbXNnaWQgIlBhdGNoIGZpbGUiCittc2dzdHIgIlBsaWsgs2F0YSIKKworIzogZGlmZi5jOjEwNjUKK21zZ2lkICJFOTg6IENhbm5vdCByZWFkIGRpZmYgb3V0cHV0IgorbXNnc3RyICJFOTg6IE5pZSBtb2fqIHdjenl0YeYgd3lqnGNpYSBy879uaWN5IgorCisjOiBkaWZmLmM6MTgxNQorbXNnaWQgIkU5OTogQ3VycmVudCBidWZmZXIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTk5OiBCaWW/uWN5IGJ1Zm9yIG5pZSBqZXN0IHcgdHJ5YmllIHLzv25pYyIKKworIzogZGlmZi5jOjE4MjcKK21zZ2lkICJFMTAwOiBObyBvdGhlciBidWZmZXIgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAwOiBCcmFrIGlubmVnbyBidWZvcmEgdyB0cnliaWUgcvO/bmljIgorCisjOiBkaWZmLmM6MTgzNQorbXNnaWQgIkUxMDE6IE1vcmUgdGhhbiB0d28gYnVmZmVycyBpbiBkaWZmIG1vZGUsIGRvbid0IGtub3cgd2hpY2ggb25lIHRvIHVzZSIKK21zZ3N0ciAiRTEwMTogV2nqY2VqIG5pvyBqZWRlbiBidWZvciB3IHRyeWJpZSBy879uaWNvd2FuaWEsIG5pZSB3aWVtIGt083JlZ28gdb955iIKKworIzogZGlmZi5jOjE4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMjogQ2FuJ3QgZmluZCBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTAyOiBOaWUgbW9n6iB6bmFsZZ/mIGJ1Zm9yYSBcIiVzXCIiCisKKyM6IGRpZmYuYzoxODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzogQnVmb3IgXCIlc1wiIG5pZSBqZXN0IHcgdHJ5YmllIHLzv25pY293YW5pYSIKKworIzogZGlncmFwaC5jOjIxOTkKK21zZ2lkICJFMTA0OiBFc2NhcGUgbm90IGFsbG93ZWQgaW4gZGlncmFwaCIKK21zZ3N0ciAiRTEwNDogRXNjYXBlIGplc3QgbmllZG96d29sb25lIHcgZHd1Z3JhZmllIgorCisjOiBkaWdyYXBoLmM6MjM4NAorbXNnaWQgIkU1NDQ6IEtleW1hcCBmaWxlIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTU0NDogTmllIHpuYWxlemlvbm8gcGxpa3Ugcm96a7NhZHUga2xhd2lzenkiCisKKyM6IGRpZ3JhcGguYzoyNDExCittc2dpZCAiRTEwNTogVXNpbmcgOmxvYWRrZXltYXAgbm90IGluIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTA1OiBaYXN0b3Nvd2FubyA6bG9hZGtleW1hcCB3IG5pZXdjenl0YW55bSBwbGlrdSIKKworIzogZWRpdC5jOjQwCittc2dpZCAiIEtleXdvcmQgY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiBEb3Bls25pYW5pZSBzs/N3IGtsdWN6b3d5Y2ggKF5OXlApIgorCisjLiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4KKyM6IGVkaXQuYzo0MQorbXNnaWQgIiBeWCBtb2RlICheRV5ZXkxeXV5GXkleS15EXlZeTl5QKSIKK21zZ3N0ciAiIF5YIHRyeWIgKF5FXlleTF5dXkZeSV5LXkReVl5OXlApIgorCisjLiBTY3JvbGwgaGFzIGl0J3Mgb3duIG1zZ3MsIGluIGl0J3MgcGxhY2UgdGhlcmUgaXMgdGhlIG1zZyBmb3IgbG9jYWwKKyMuICogY3RybF94X21vZGUgPSAwIChlZyBjb250aW51ZV9zdGF0dXMgJiBDT05UX0xPQ0FMKSAgLS0gQWNldmVkbworIzogZWRpdC5jOjQ0Cittc2dpZCAiIEtleXdvcmQgTG9jYWwgY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiBMb2thbG5lIGRvcGWzbmlhbmllIHOz83cga2x1Y3pvd3ljaCAoXk5eUCkiCisKKyM6IGVkaXQuYzo0NQorbXNnaWQgIiBXaG9sZSBsaW5lIGNvbXBsZXRpb24gKF5MXk5eUCkiCittc2dzdHIgIiBEb3Bls25pYW5pZSBwZbNueWNoIHdpZXJzenkgKF5MXk5eUCkiCisKKyM6IGVkaXQuYzo0NgorbXNnaWQgIiBGaWxlIG5hbWUgY29tcGxldGlvbiAoXkZeTl5QKSIKK21zZ3N0ciAiIERvcGWzbmlhbmllIG5hencgcGxpa/N3ICheRl5OXlApIgorCisjOiBlZGl0LmM6NDcKK21zZ2lkICIgVGFnIGNvbXBsZXRpb24gKF5dXk5eUCkiCittc2dzdHIgIiBEb3Bls25pYW5pZSB6bmFjem5pa/N3ICheXV5OXlApIgorCisjOiBlZGl0LmM6NDgKK21zZ2lkICIgUGF0aCBwYXR0ZXJuIGNvbXBsZXRpb24gKF5OXlApIgorbXNnc3RyICIgRG9wZbNuaWFuaWUgd3pvcmPzdyB0cm9w83cgKF5OXlApIgorCisjOiBlZGl0LmM6NDkKK21zZ2lkICIgRGVmaW5pdGlvbiBjb21wbGV0aW9uICheRF5OXlApIgorbXNnc3RyICIgRG9wZbNuaWFuaWUgZGVmaW5pY2ppICheRF5OXlApIgorCisjOiBlZGl0LmM6NTEKK21zZ2lkICIgRGljdGlvbmFyeSBjb21wbGV0aW9uICheS15OXlApIgorbXNnc3RyICIgRG9wZbNuaWFuaWUgemUgc7Nvd25pa/N3ICheS15OXlApIgorCisjOiBlZGl0LmM6NTIKK21zZ2lkICIgVGhlc2F1cnVzIGNvbXBsZXRpb24gKF5UXk5eUCkiCittc2dzdHIgIiBEb3Bls25pYW5pZSB6IHRlemF1cnVzYSAoXlReTl5QKSIKKworIzogZWRpdC5jOjUzCittc2dpZCAiIENvbW1hbmQtbGluZSBjb21wbGV0aW9uICheVl5OXlApIgorbXNnc3RyICIgRG9wZbNuaWFuaWUgd2llcnN6YSBwb2xlY2XxICheVl5OXlApIgorCisjOiBlZGl0LmM6NTYKK21zZ2lkICJIaXQgZW5kIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAiRG9iabNlbSBkbyBrb/FjYSBha2FwaXR1IgorCisjOiBlZGl0LmM6OTYyCittc2dpZCAiJ3RoZXNhdXJ1cycgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJvcGNqYSAndGhlc2F1cnVzJyBqZXN0IHB1c3RhIgorCisjOiBlZGl0LmM6MTE2NgorbXNnaWQgIidkaWN0aW9uYXJ5JyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIm9wY2phICdkaWN0aW9uYXJ5JyBqZXN0IHB1c3RhIgorCisjOiBlZGl0LmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAiUHJ6ZWdsuWRhbSBzs293bmlrOiAlcyIKKworIzogZWRpdC5jOjIzNjgKK21zZ2lkICIgKGluc2VydCkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAod3Byb3dhZHphbmllKSBQcnpld2lqYW5pZSAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjM3MAorbXNnaWQgIiAocmVwbGFjZSkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoemFtaWFuYSkgUHJ6ZXdpamFuaWUgKF5FL15ZKSIKKworIzogZWRpdC5jOjI2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmc6ICVzIgorbXNnc3RyICJQcnplZ2y5ZGFtOiAlcyIKKworIzogZWRpdC5jOjI3MTkKK21zZ2lkICJTY2FubmluZyB0YWdzLiIKK21zZ3N0ciAiUHJ6ZWdsuWRhbSB6bmFjem5pa2kuIgorCisjOiBlZGl0LmM6MzM4MQorbXNnaWQgIiBBZGRpbmciCittc2dzdHIgIiBEb2RhauoiCisKKyMuIHNob3dtb2RlIG1pZ2h0IHJlc2V0IHRoZSBpbnRlcm5hbCBsaW5lIHBvaW50ZXJzLCBzbyBpdCBtdXN0CisjLiAqIGJlIGNhbGxlZCBiZWZvcmUgbGluZSA9IG1sX2dldCgpLCBvciB3aGVuIHRoaXMgYWRkcmVzcyBpcyBubworIy4gKiBsb25nZXIgbmVlZGVkLiAgLS0gQWNldmVkby4KKyMuCisjOiBlZGl0LmM6MzQzMAorbXNnaWQgIi0tIFNlYXJjaGluZy4uLiIKK21zZ3N0ciAiLS0gU3p1a2FtLi4uIgorCisjOiBlZGl0LmM6MzQ4NgorbXNnaWQgIkJhY2sgYXQgb3JpZ2luYWwiCittc2dzdHIgIlogcG93cm90ZW0gbmEgcGllcndvdG55bSIKKworIzogZWRpdC5jOjM0OTEKK21zZ2lkICJXb3JkIGZyb20gb3RoZXIgbGluZSIKK21zZ3N0ciAiV3lyYXogeiBpbm5lZ28gd2llcnN6YSIKKworIzogZWRpdC5jOjM0OTYKK21zZ2lkICJUaGUgb25seSBtYXRjaCIKK21zZ3N0ciAiSmVkeW5lIGRvcGFzb3dhbmllIgorCisjOiBlZGl0LmM6MzU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYXRjaCAlZCBvZiAlZCIKK21zZ3N0ciAicGFzdWplICVkIHogJWQiCisKKyM6IGVkaXQuYzozNTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIgorbXNnc3RyICJwYXN1amUgJWQiCisKKyMuIFNraXAgZnVydGhlciBhcmd1bWVudHMgYnV0IGRvIGNvbnRpbnVlIHRvCisjLiAqIHNlYXJjaCBmb3IgYSB0cmFpbGluZyBjb21tYW5kLgorIzogZXZhbC5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNjogVW5rbm93biB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA2OiBOaWV6bmFuYSB6bWllbm5hOiBcIiVzXCIiCisKKyM6IGV2YWwuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDc6IE1pc3NpbmcgYnJhY2VzOiAlcyIKK21zZ3N0ciAiRTEwNzogQnJhayBuYXdpYXPzdzogJXMiCisKKyM6IGV2YWwuYzoxNDM1IGV2YWwuYzoxNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDg6IE5vIHN1Y2ggdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwODogTmllIGlzdG5pZWplIHptaWVubmE6IFwiJXNcIiIKKworIzogZXZhbC5jOjE3MDUKK21zZ2lkICJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciCittc2dzdHIgIkUxMDk6IEJyYWsgJzonIHBvICc/JyIKKworIzogZXZhbC5jOjIzMjcKK21zZ2lkICJFMTEwOiBNaXNzaW5nICcpJyIKK21zZ3N0ciAiRTExMDogQnJhayAnKSciCisKKyM6IGV2YWwuYzoyMzg5Cittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6IEJyYWsgJ10nIgorCisjOiBldmFsLmM6MjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEyOiBPcHRpb24gbmFtZSBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiRTExMjogQnJhayBuYXp3eSBvcGNqaTogJXMiCisKKyM6IGV2YWwuYzoyNDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTM6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTExMzogTmllem5hbmEgb3BjamE6ICVzIgorCisjOiBldmFsLmM6MjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE0OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNDogQnJhayBjdWR6eXOzb3d1OiAlcyIKKworIzogZXZhbC5jOjI2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNTogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTU6IEJyYWsgY3Vkenlzs293dTogJXMiCisKKyM6IGV2YWwuYzozMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTExNjogTmlld7NhnGNpd2UgYXJndW1lbnR5IGRsYSBmdW5rY2ppICVzIgorCisjOiBldmFsLmM6MzA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE3OiBVbmtub3duIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExNzogTmllem5hbmEgZnVua2NqYTogJXMiCisKKyM6IGV2YWwuYzozMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTg6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE4OiBaYnl0IHdpZWxlIGFyZ3VtZW5083cgZGxhIGZ1bmtjamk6ICVzIgorCisjOiBldmFsLmM6MzA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE5OiBOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE5OiBaYSBtYbNvIGFyZ3VtZW5083cgZGxhIGZ1bmtjamk6ICVzIgorCisjOiBldmFsLmM6MzA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIwOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dDogJXMiCittc2dzdHIgIkUxMjA6IFphc3Rvc293YW5vIDxTSUQ+IHBvemEgc2tyeXB0ZW06ICVzIgorCisjLgorIy4gKiBZZXMgdGhpcyBpcyB1Z2x5LCBJIGRvbid0IHBhcnRpY3VsYXJseSBsaWtlIGl0IGVpdGhlci4gIEJ1dCBkb2luZyBpdAorIy4gKiB0aGlzIHdheSBoYXMgdGhlIGNvbXBlbGxpbmcgYWR2YW50YWdlIHRoYXQgdHJhbnNsYXRpb25zIG5lZWQgbm90IHRvCisjLiAqIGJlIHRvdWNoZWQgYXQgYWxsLiAgU2VlIGJlbG93IHdoYXQgJ29rJyBhbmQgJ3luYycgYXJlIHVzZWQgZm9yLgorIy4KKyM6IGV2YWwuYzozNjg3IGd1aS5jOjQzNzYgZ3VpX2d0ay5jOjIwNTkKK21zZ2lkICImT2siCittc2dzdHIgIiZPayIKKworIzogZXZhbC5jOjQyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQgd2llcnN6eTogIgorCisjOiBldmFsLmM6NTQ3NworbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJk9LXG4iCisiJlpha2/xY3oiCisKKyM6IGV2YWwuYzo1NTE3Cittc2dpZCAiY2FsbGVkIGlucHV0cmVzdG9yZSgpIG1vcmUgb2Z0ZW4gdGhhbiBpbnB1dHNhdmUoKSIKK21zZ3N0ciAid3l3b7Nhbm8gaW5wdXRyZXN0b3JlKCkgd2nqY2VqIHJhenkgbmm/IGlucHV0c2F2ZSgpIgorCisjOiBldmFsLmM6NTk3NworbXNnaWQgIkU2NTU6IFRvbyBtYW55IHN5bWJvbGljIGxpbmtzIChjeWNsZT8pIgorbXNnc3RyICJFNjU1OiBaYSBkdb9vIGRvd2m5emHxIHN5bWJvbGljem55Y2ggKHDqdGxhPykiCisKKyM6IGV2YWwuYzo2NjA5Cittc2dpZCAiRTI0MDogTm8gY29ubmVjdGlvbiB0byBWaW0gc2VydmVyIgorbXNnc3RyICJFMjQwOiBCcmFrIHBvs7ljemVuaWEgeiBzZXJ3ZXJlbSBWaW0iCisKKyM6IGV2YWwuYzo2NzA2Cittc2dpZCAiRTI3NzogVW5hYmxlIHRvIHJlYWQgYSBzZXJ2ZXIgcmVwbHkiCittc2dzdHIgIkUyNzc6IE5pZSBtb2fqIGN6eXRh5iBvZHBvd2llZHppIHNlcndlcmEiCisKKyM6IGV2YWwuYzo2NzM0Cittc2dpZCAiRTI1ODogVW5hYmxlIHRvIHNlbmQgdG8gY2xpZW50IgorbXNnc3RyICJFMjU4OiBOaWUgbW9n6iB3eXOzYeYgZG8ga2xpZW50YSIKKworIzogZXZhbC5jOjY3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MTogVW5hYmxlIHRvIHNlbmQgdG8gJXMiCittc2dzdHIgIkUyNDE6IE5pZSBtb2fqIHd5c7Nh5iBkbyAlcyIKKworIzogZXZhbC5jOjY4ODIKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIihOaWV3s2GcY2l3ZSkiCisKKyM6IGV2YWwuYzo4MDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogJXMiCittc2dzdHIgIkUxMjE6IE5pZW9rcmWcbG9uYSB6bWllbm5hOiAlcyIKKworIzogZXZhbC5jOjg0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2MTogSWxsZWdhbCB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAiRTQxODogTmllZG96d29sb25hIG5hendhIHptaWVubmVqOiAlcyIKKworIzogZXZhbC5jOjg3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMjogRnVuY3Rpb24gJXMgYWxyZWFkeSBleGlzdHMsIGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxMjI6IEZ1bmtjamEgJXMganW/IGlzdG5pZWplOyBhYnkgarkgemFtaWVuaeYgdb95aiAhIgorCisjOiBldmFsLmM6ODg1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiBOaWVva3JlnGxvbmEgZnVua2NqYTogJXMiCisKKyM6IGV2YWwuYzo4ODcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjQ6IE1pc3NpbmcgJygnOiAlcyIKK21zZ3N0ciAiRTEyNDogQnJhayAnKCc6ICVzIgorCisjOiBldmFsLmM6ODkwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNTogTmllZG96d29sb255IGFyZ3VtZW50OiAlcyIKKworIzogZXZhbC5jOjg5ODIKK21zZ2lkICJFMTI2OiBNaXNzaW5nIDplbmRmdW5jdGlvbiIKK21zZ3N0ciAiRTEyNjogQnJhayA6ZW5kZnVuY3Rpb24iCisKKyM6IGV2YWwuYzo5MDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjc6IENhbm5vdCByZWRlZmluZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTI3OiBOaWUgbW9n6iBwcnplZGVmaW5pb3dh5iBmdW5rY2ppICVzOiBqZXN0IHcgdb95Y2l1IgorCisjOiBldmFsLmM6OTE1OQorbXNnaWQgIkUxMjk6IEZ1bmN0aW9uIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUxMjk6IFd5bWFnYW5hIGplc3QgbmF6d2EgZnVua2NqaSIKKworIzogZXZhbC5jOjkyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODogTmF6d2EgZnVua2NqaSBtdXNpIHJvenBvY3p5bmHmIHNp6iBkdb+5IGxpdGVyuTogJXMiCisKKyM6IGV2YWwuYzo5NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzA6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMzA6IE5pZW9rcmWcbG9uYSBmdW5rY2phOiAlcyIKKworIzogZXZhbC5jOjk0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMTogQ2Fubm90IGRlbGV0ZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTMxOiBOaWUgbW9n6iBza2Fzb3dh5iBmdW5rY2ppICVzOiBqZXN0IHcgdb95Y2l1IgorCisjOiBldmFsLmM6OTQ1NQorbXNnaWQgIkUxMzI6IEZ1bmN0aW9uIGNhbGwgZGVwdGggaXMgaGlnaGVyIHRoYW4gJ21heGZ1bmNkZXB0aCciCittc2dzdHIgIkUxMzI6IFphZ25pZb9kv2VuaWUgd3l3b7Nh8SBmdW5rY2ppIHBvbmFkICdtYXhmdW5jZGVwdGgnIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV2YWwuYzo5NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbGxpbmcgJXMiCittc2dzdHIgInd5d2+zdWrqICVzIgorCisjOiBldmFsLmM6OTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhYm9ydGVkIgorbXNnc3RyICJwb3J6dWNvbm8gJXMiCisKKyM6IGV2YWwuYzo5NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyAjJWxkIgorbXNnc3RyICIlcyB6d3JhY2EgIyVsZCIKKworIzogZXZhbC5jOjk1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nIFwiJXNcIiIKK21zZ3N0ciAiJXMgendyYWNhIFwiJXNcIiIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6OTU5NSBleF9jbWRzMi5jOjIzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAia29udHludWFjamEgdyAlcyIKKworIzogZXZhbC5jOjk2MjEKK21zZ2lkICJFMTMzOiA6cmV0dXJuIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTEzMzogOnJldHVybiBwb3phIGZ1bmtjarkiCisKKyM6IGV2YWwuYzo5OTUyCittc2dpZCAiIgorIlxuIgorIiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgem1pZW5uZSBnbG9iYWxuZTpcbiIKKworIzogZXhfY21kczIuYzo5MgorbXNnaWQgIkVudGVyaW5nIERlYnVnIG1vZGUuICBUeXBlIFwiY29udFwiIHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiV2Nob2R66iB3IHRyeWIgb2RwbHVza3dpYW5pYS4gV3Byb3dhZJ8gXCJjb250XCIgYWJ5IGtvbnR5bnVvd2HmLiIKKworIzogZXhfY21kczIuYzo5NiBleF9kb2NtZC5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogJXMiCittc2dzdHIgIndpZXJzeiAlbGQ6ICVzIgorCisjOiBleF9jbWRzMi5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNtZDogJXMiCittc2dzdHIgImNtZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyZWFrcG9pbnQgaW4gXCIlcyVzXCIgbGluZSAlbGQiCittc2dzdHIgIlB1bmt0IGtvbnRyb2xueSB3IFwiJXMlc1wiIHdpZXJzeiAlbGQiCisKKyM6IGV4X2NtZHMyLmM6NTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjE6IEJyZWFrcG9pbnQgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTE2MTogTmllIHpuYWxlemlvbm8gcHVua3R1IGtvbnRyb2xuZWdvOiAlcyIKKworIzogZXhfY21kczIuYzo1NjYKK21zZ2lkICJObyBicmVha3BvaW50cyBkZWZpbmVkIgorbXNnc3RyICJOaWUgb2tyZZxsb25vIL9hZG55Y2ggcHVua3TzdyBrb250cm9sbnljaCIKKworIzogZXhfY21kczIuYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgIHdpZXJzeiAlbGQiCisKKyM6IGV4X2NtZHMyLmM6NzYzIGV4X2NtZHMuYzoyMDk3IGV4X2NtZHMuYzoyMzYyCittc2dpZCAiU2F2ZSBBcyIKK21zZ3N0ciAiWmFwaXN6IGpha28iCisKKyM6IGV4X2NtZHMyLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmUgY2hhbmdlcyB0byBcIiUuKnNcIj8iCittc2dzdHIgIlphY2hvd2FqIHptaWFueSB3IFwiJS4qc1wiPyIKKworIzogZXhfY21kczIuYzo3ODggZXhfZG9jbWQuYzo5MzgwCittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIkJleiBUeXR1s3UiCisKKyM6IGV4X2NtZHMyLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiBOaWUgemFwaXNhbm8gem1pYW4gdyBidWZvcnplIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo5ODQKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIk9TVFJaRa9FTklFOiBOaWVvY3pla2l3YW5lIHdlapxjaWUgdyBpbm55IGJ1Zm9yIChzcHJhd2SfIGF1dG9rb21lbmR5KSIKKworIzogZXhfY21kczIuYzoxMzg3Cittc2dpZCAiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTYzOiBUeWxrbyBqZWRlbiBwbGlrIHcgZWR5Y2ppIgorCisjOiBleF9jbWRzMi5jOjEzODkKK21zZ2lkICJFMTY0OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGZpbGUiCittc2dzdHIgIkUxNjQ6IE5pZSBtb79uYSBwcnplapzmIHByemVkIHBpZXJ3c3p5IHBsaWsiCisKKyM6IGV4X2NtZHMyLmM6MTM5MQorbXNnaWQgIkUxNjU6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBmaWxlIgorbXNnc3RyICJFMTY1OiBOaWUgbW+/bmEgcHJ6ZWqc5iB6YSBvc3RhdG5pIHBsaWsiCisKKyM6IGV4X2NtZHMyLmM6MTgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY2OiBjb21waWxlciBub3Qgc3VwcG9ydGVkOiAlcyIKK21zZ3N0ciAiRTY2NjogbmllIHdzcGllcmFueSBrb21waWxhdG9yOiAlcyIKKworIzogZXhfY21kczIuYzoxODk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIGluIFwiJXNcIiIKK21zZ3N0ciAiU3p1a2FuaWUgXCIlc1wiIHcgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIlN6dWthbmllIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgIm5pZSB6bmFsZXppb25vIHcgJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE5NzQKK21zZ2lkICJTb3VyY2UgVmltIHNjcmlwdCIKK21zZ3N0ciAiV2N6eXRhaiBza3J5cHQgVmltYSIKKworIzogZXhfY21kczIuYzoyMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAiTmllIG1vv25hIHdjenl0YeYga2F0YWxvZ3U6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICJuaWUgbW9ns2VtIHdjenl0YeYgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IGNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICJ3aWVyc3o6ICVsZCBuaWUgbW9ns2VtIHdjenl0YeYgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJ3Y3p5dHl3YW5pZSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogc291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJ3aWVyc3ogJWxkOiB3Y3p5dHl3YW5pZSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzb3VyY2luZyAlcyIKK21zZ3N0ciAic2tv8WN6b25vIHdjenl0eXdhbmllICVzIgorCisjOiBleF9jbWRzMi5jOjI3MDcKK21zZ2lkICJXMTU6IFdhcm5pbmc6IFdyb25nIGxpbmUgc2VwYXJhdG9yLCBeTSBtYXkgYmUgbWlzc2luZyIKK21zZ3N0ciAiVzE1OiBPU1RSWkWvRU5JRTogTmlld7NhnGNpd3kgc2VwYXJhdG9yIHdpZXJzenksIHBld25pZSBicmFrIF5NIgorCisjOiBleF9jbWRzMi5jOjI3NTYKK21zZ2lkICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY3OiB1v3l0byA6c2NyaXB0ZW5jb2RpbmcgcG96YSB3Y3p5dHl3YW55bSBwbGlraWVtIgorCisjOiBleF9jbWRzMi5jOjI3ODkKK21zZ2lkICJFMTY4OiA6ZmluaXNoIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2ODogdb95dG8gOmZpbmlzaCBwb3phIHdjenl0eXdhbnltIHBsaWtpZW0iCisKKyM6IGV4X2NtZHMyLmM6MzIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYWdlICVkIgorbXNnc3RyICJTdHJvbmEgJWQiCisKKyM6IGV4X2NtZHMyLmM6MzM5NAorbXNnaWQgIk5vIHRleHQgdG8gYmUgcHJpbnRlZCIKK21zZ3N0ciAiQnJhayB0ZWtzdHUgZG8gZHJ1a293YW5pYSIKKworIzogZXhfY21kczIuYzozNDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nIHBhZ2UgJWQgKCVkJSUpIgorbXNnc3RyICJEcnVrdWrqIHN0cm9u6iAlZCAoJWQlJSkiCisKKyM6IGV4X2NtZHMyLmM6MzQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgQ29weSAlZCBvZiAlZCIKK21zZ3N0ciAiIEtvcGlhICVkIHogJWQiCisKKyM6IGV4X2NtZHMyLmM6MzU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGVkOiAlcyIKK21zZ3N0ciAiV3lkcnVrb3dhbm86ICVzIgorCisjOiBleF9jbWRzMi5jOjM1NDkKK21zZ2lkICJQcmludGluZyBhYm9ydGVkIgorbXNnc3RyICJEcnVrb3dhbmllIG9kd2+zYW5lIgorCisjOiBleF9jbWRzMi5jOjM5MTQKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IE5pZSBtb79uYSB6YXBpc2HmIGRvIHd5apxjaW93ZWdvIHBsaWt1IFBvc3RTY3JpcHR1IgorCisjOiBleF9jbWRzMi5jOjQxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyNDogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTYyNDogTmllIG1vZ+ogb3R3b3J6eeYgcGxpa3UgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQxOTkgZXhfY21kczIuYzo0ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTc6IENhbid0IHJlYWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NzogTmllIG1vv25hIG9kY3p5dGHmIHBsaWt1IHphc29i83cgUG9zdFNjcmlwdHUgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxODogZmlsZSBcIiVzXCIgaXMgbm90IGEgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE4OiBwbGlrIFwiJXNcIiBuaWUgamVzdCBwbGlraWVtIHphc29i83cgUG9zdFNjcmlwdHUiCisKKyM6IGV4X2NtZHMyLmM6NDIyMiBleF9jbWRzMi5jOjQyNDIgZXhfY21kczIuYzo0MjU3IGV4X2NtZHMyLmM6NDI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE5OiBmaWxlIFwiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE5OiBwbGlrIFwiJXNcIiBuaWUgamVzdCB3c3BpZXJhbnltIHBsaWtpZW0gemFzb2LzdyBQb3N0U2NyaXB0dSIKKworIzogZXhfY21kczIuYzo0MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjE6IFwiJXNcIiByZXNvdXJjZSBmaWxlIGhhcyB3cm9uZyB2ZXJzaW9uIgorbXNnc3RyICJFNjIxOiBcIiVzXCIgbmllcHJhd2lks293YSB3ZXJzamEgcGxpa3UgemFzb2LzdyIKKworIzogZXhfY21kczIuYzo0Nzc2Cittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiBOaWUgbW+/bmEgb3R3b3J6eeYgcGxpa3UgUG9zdFNjcmlwdCBkbyB3eWqcY2lhIgorCisjOiBleF9jbWRzMi5jOjQ4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogTmllIG1vZ+ogb3R3b3J6eeYgcGxpa3UgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ5MjgKK21zZ2lkICJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcInByb2xvZy5wc1wiIgorbXNnc3RyICJFNDU2OiBOaWUgbW+/bmEgem5hbGWf5iBwbGlrdSB6YXNvYvN3IFBvc3RTY3JpcHR1IFwicHJvbG9nLnBzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU2OiBDYW4ndCBmaW5kIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzLnBzXCIiCittc2dzdHIgIkU0NTY6IE5pZSBtb79uYSB6bmFsZZ/mIHBsaWt1IHphc29i83cgUG9zdFNjcmlwdHUgXCIlcy5wc1wiIgorCisjOiBleF9jbWRzMi5jOjQ5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyMDogVW5hYmxlIHRvIGNvbnZlcnQgZnJvbSBtdWx0aS1ieXRlIHRvIFwiJXNcIiBlbmNvZGluZyIKK21zZ3N0ciAiRTYyMDogTmllIG1vv25hIHByemVrb253ZXJ0b3dh5iB6IG11bHRpLWJ5dGUgZG8ga29kb3dhbmlhIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo1MTAyCittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICJQcnplc3mzYW0gZG8gZHJ1a2Fya2kuLi4iCisKKyM6IGV4X2NtZHMyLmM6NTEwNgorbXNnaWQgIkUzNjU6IEZhaWxlZCB0byBwcmludCBQb3N0U2NyaXB0IGZpbGUiCittc2dzdHIgIkUzNjU6IERydWtvd2FuaWUgcGxpa3UgUG9zdFNjcmlwdCBuaWUgcG93aW9ks28gc2nqIgorCisjOiBleF9jbWRzMi5jOjUxMDgKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIlphZGFuaWUgZHJ1a293YW5pZSBwcnplc7NhbmUuIgorCisjOiBleF9jbWRzMi5jOjU2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCAlc2xhbmd1YWdlOiBcIiVzXCIiCittc2dzdHIgIkJpZb+5Y3kgJXNq6np5azogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjU2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6IE5pZSBtb2fqIHVzdGF3aeYgaup6eWthIG5hIFwiJXNcIiIKKworIzogZXhfY21kcy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2N0YWwgJTAzbyIKK21zZ3N0ciAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPa3RhbCAlMDNvIgorCisjOiBleF9jbWRzLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIj4gJWQsIEhleCAlMDR4LCBPY3RhbCAlbyIKK21zZ3N0ciAiPiAlZCwgSGV4ICUwNHgsICBPa3RhbCAlbyIKKworIzogZXhfY21kcy5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICI+ICVkLCBIZXggJTA4eCwgT2N0YWwgJW8iCittc2dzdHIgIj4gJWQsIEhleCAlMDh4LCBPa3RhbCAlbyIKKworIzogZXhfY21kcy5jOjQzMAorbXNnaWQgIkUxMzQ6IE1vdmUgbGluZXMgaW50byB0aGVtc2VsdmVzIgorbXNnc3RyICJFMTM0OiBQcnplbmllc2llbmllIHdpZXJzenkgbmEgc2llYmllIHNhbXljaCIKKworIzogZXhfY21kcy5jOjQ5OQorbXNnaWQgIjEgbGluZSBtb3ZlZCIKK21zZ3N0ciAiMSB3aWVyc3ogcHJ6ZW5pZXNpb255IgorCisjOiBleF9jbWRzLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBtb3ZlZCIKK21zZ3N0ciAiJWxkIHdpZXJzemUgcHJ6ZW5pZXNpb25lIgorCisjOiBleF9jbWRzLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBmaWx0ZXJlZCIKK21zZ3N0ciAiJWxkIHdpZXJzenkgcHJ6ZWZpbHRyb3dhbnljaCIKKworIzogZXhfY21kcy5jOjk1MgorbXNnaWQgIkUxMzU6ICpGaWx0ZXIqIEF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUxMzU6IEF1dG9rb21lbmR5ICpGaWx0ZXIqIG5pZSBtb2e5IHptaWVuaWHmIGJpZb+5Y2VnbyBidWZvcmEiCisKKyM6IGV4X2NtZHMuYzoxMDM3Cittc2dpZCAiW05vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlXVxuIgorbXNnc3RyICJbQnJhayB6YXBpc3Ugb2QgY3phc3Ugb3N0YXRuaWVqIHptaWFueV1cbiIKKworIzogZXhfY21kcy5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXN2aW1pbmZvOiAlcyBpbiBsaW5lOiAiCittc2dzdHIgIiVzdmltaW5mbzogJXMgdyB3aWVyc3p1OiAiCisKKyM6IGV4X2NtZHMuYzoxMjg4Cittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIkUxMzY6IHZpbWluZm86IFpieXQgd2llbGUgYrPqZPN3OyBwb21pamFtIHJlc3p06iBwbGlrdSIKKworIzogZXhfY21kcy5jOjEzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiJXMlcyVzIgorbXNnc3RyICJXY3p5dHVq6iBwbGlrIHZpbWluZm8gXCIlc1wiJXMlcyVzIgorCisjOiBleF9jbWRzLmM6MTMyNAorbXNnaWQgIiBpbmZvIgorbXNnc3RyICIgaW5mb3JtYWNqYSIKKworIzogZXhfY21kcy5jOjEzMjUKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiB6YWuzYWRraSIKKworIzogZXhfY21kcy5jOjEzMjYKK21zZ2lkICIgRkFJTEVEIgorbXNnc3RyICIgTklFIFBPV0lPRKNPIFNJyiIKKworIzogZXhfY21kcy5jOjE0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IFBsaWsgdmltaW5mbyBqZXN0IG5pZXphcGlzeXdhbG55OiAlcyIKKworIzogZXhfY21kcy5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzODogQ2FuJ3Qgd3JpdGUgdmltaW5mbyBmaWxlICVzISIKK21zZ3N0ciAiRTEzODogTmllIG1vZ+ogemFwaXNh5iBwbGlrdSB2aW1pbmZvICVzISIKKworIzogZXhfY21kcy5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiIgorbXNnc3RyICJaYXBpc3Vq6iBwbGlrIHZpbWluZm8gXCIlc1wiIgorCisjLiBXcml0ZSB0aGUgaW5mbzoKKyM6IGV4X2NtZHMuYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVGhpcyB2aW1pbmZvIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBWaW0gJXMuXG4iCittc2dzdHIgIiMgVGVuIHBsaWsgdmltaW5mbyB6b3N0YbMgd3lnZW5lcm93YW55IHByemV6IFZpbWEgJXMuXG4iCisKKyM6IGV4X2NtZHMuYzoxNjUxCittc2dpZCAiIgorIiMgWW91IG1heSBlZGl0IGl0IGlmIHlvdSdyZSBjYXJlZnVsIVxuIgorIlxuIgorbXNnc3RyICIiCisiIyBNb79lc3ogZ28gb3N0cm+/bmllIGVkeXRvd2HmIVxuIgorIlxuIgorCisjOiBleF9jbWRzLmM6MTY1MworbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjIFdhcnRvnOYgJ2VuY29kaW5nJyB3IGN6YXNpZSB6YXBzdSB0ZWdvIHBsaWt1XG4iCisKKyM6IGV4X2NtZHMuYzoxNzUyCittc2dpZCAiSWxsZWdhbCBzdGFydGluZyBjaGFyIgorbXNnc3RyICJOaWVkb3B1c3pjemFsbnkgcG9jerl0a293eSB6bmFrIgorCisjLiBPdmVyd3JpdGluZyBhIGZpbGUgdGhhdCBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIgaXMgbm90IGEKKyMuICogZ29vZCBpZGVhLgorIzogZXhfY21kcy5jOjIxNDAKK21zZ2lkICJFMTM5OiBGaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciIKK21zZ3N0ciAiRTEzOTogUGxpayBqZXN0IHphs2Fkb3dhbnkgdyBpbm55bSBidWZvcnplIgorCisjOiBleF9jbWRzLmM6MjE3NAorbXNnaWQgIldyaXRlIHBhcnRpYWwgZmlsZT8iCittc2dzdHIgIlphcGlzYeYgY3rqnGNpb3dvIHBsaWs/IgorCisjOiBleF9jbWRzLmM6MjE4MQorbXNnaWQgIkUxNDA6IFVzZSAhIHRvIHdyaXRlIHBhcnRpYWwgYnVmZmVyIgorbXNnc3RyICJFMTQwOiBTdG9zdWogISBkbyB6YXBpc2FuaWEgY3rqnGNpb3dvIGJ1Zm9yYSIKKworIzogZXhfY21kcy5jOjIyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUgXCIlLipzXCI/IgorbXNnc3RyICJOYWRwaXNh5iBpc3RuaWVquWN5IHBsaWsgXCIlLipzXCI/IgorCisjOiBleF9jbWRzLmM6MjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTQxOiBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkUxNDE6IEJyYWsgbmF6d3kgcGxpa3UgZGxhIGJ1Zm9yYSAlbGQiCisKKyM6IGV4X2NtZHMuYzoyNDA1Cittc2dpZCAiRTE0MjogRmlsZSBub3Qgd3JpdHRlbjogV3JpdGluZyBpcyBkaXNhYmxlZCBieSAnd3JpdGUnIG9wdGlvbiIKK21zZ3N0ciAiRTE0MjogUGxpayBuaWV6YXBpc2FueTogWmFwaXMgamVzdCB3ebO5Y3pvbnkgb3BjarkgJ3dyaXRlJyIKKworIzogZXhfY21kcy5jOjI0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIidyZWFkb25seScgb3B0aW9uIGlzIHNldCBmb3IgXCIlLipzXCIuXG4iCisiRG8geW91IHdpc2ggdG8gd3JpdGUgYW55d2F5PyIKK21zZ3N0ciAiIgorIm9wY2phICdyZWFkb25seScgbmFzdGF3aW9uYSBkbGEgXCIlLipzXCIuXG4iCisiQ3p5IGNoY2VzeiBnbyBwb21pbW8gdGVnbyB6YXBpc2HmPyIKKworIzogZXhfY21kcy5jOjI1OTcKK21zZ2lkICJFZGl0IEZpbGUiCittc2dzdHIgIkVkeXR1aiBQbGlrIgorCisjOiBleF9jbWRzLmM6MzIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQzOiBBdXRvY29tbWFuZHMgdW5leHBlY3RlZGx5IGRlbGV0ZWQgbmV3IGJ1ZmZlciAlcyIKK21zZ3N0ciAiRTE0MzogQXV0b2tvbWVuZHkgbmllb2N6ZWtpd2FuaWUgc2thc293YbN5IG5vd3kgYnVmb3IgJXMiCisKKyM6IGV4X2NtZHMuYzozMzM5Cittc2dpZCAiRTE0NDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gOnoiCittc2dzdHIgIkUxNDQ6IG5pZW51bWVyeWN6bnkgYXJndW1lbnQgZGxhIDp6IgorCisjOiBleF9jbWRzLmM6MzQyNAorbXNnaWQgIkUxNDU6IFNoZWxsIGNvbW1hbmRzIG5vdCBhbGxvd2VkIGluIHJ2aW0iCittc2dzdHIgIkUxNDU6IEtvbWVuZHkgcG93s29raSBzuSBuaWVkb3p3b2xvbmUgdyBydmltIgorCisjOiBleF9jbWRzLmM6MzUzMQorbXNnaWQgIkUxNDY6IFJlZ3VsYXIgZXhwcmVzc2lvbnMgY2FuJ3QgYmUgZGVsaW1pdGVkIGJ5IGxldHRlcnMiCittc2dzdHIgIkUxNDY6IFd6b3JjZSByZWd1bGFybmUgbmllIG1vZ7kgYnnmIHJvemdyYW5pY3phbmUgbGl0ZXJhbWkiCisKKyM6IGV4X2NtZHMuYzozODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2Ugd2l0aCAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCittc2dzdHIgInphbWll8SBuYSAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCisKKyM6IGV4X2NtZHMuYzo0MjY2Cittc2dpZCAiKEludGVycnVwdGVkKSAiCittc2dzdHIgIihQcnplcndhbmUpICIKKworIzogZXhfY21kcy5jOjQyNzAKK21zZ2lkICIxIHN1YnN0aXR1dGlvbiIKK21zZ3N0ciAiMSBwb2RzdGF3aWVuaWUgIgorCisjOiBleF9jbWRzLmM6NDI3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgc3Vic3RpdHV0aW9ucyIKK21zZ3N0ciAiJWxkIHBvZHN0YXdpZfEiCisKKyM6IGV4X2NtZHMuYzo0Mjc1Cittc2dpZCAiIG9uIDEgbGluZSIKK21zZ3N0ciAiIHcgMSB3aWVyc3p1IgorCisjOiBleF9jbWRzLmM6NDI3NworIywgYy1mb3JtYXQKK21zZ2lkICIgb24gJWxkIGxpbmVzIgorbXNnc3RyICIgdyAlbGQgd2llcnN6YWNoIgorCisjOiBleF9jbWRzLmM6NDMyOAorbXNnaWQgIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE0NzogTmllIG1vZ+ogd3lrb25h5iA6Z2xvYmFsIHJla3Vyc3l3bmllIgorCisjOiBleF9jbWRzLmM6NDM2MworbXNnaWQgIkUxNDg6IFJlZ3VsYXIgZXhwcmVzc2lvbiBtaXNzaW5nIGZyb20gZ2xvYmFsIgorbXNnc3RyICJFMTQ4OiBCcmFrIHd6b3JjYSByZWd1bGFybmVnbyB3IDpnbG9iYWwiCisKKyMgYy1mb3JtYXQKKyM6IGV4X2NtZHMuYzo0NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIld6b3J6ZWMgem5hbGV6aW9ubyB3IGthv2R5bSB3aWVyc3p1OiAlcyIKKworIzogZXhfY21kcy5jOjQ0OTMKK21zZ2lkICIiCisiXG4iCisiIyBMYXN0IFN1YnN0aXR1dGUgU3RyaW5nOlxuIgorIiQiCittc2dzdHIgIiIKKyJcbiIKKyIjIE9zdGF0bmkgcG9kc3Rhd2lhbnkgY2m5ZzpcbiIKKyIkIgorCisjOiBleF9jbWRzLmM6NDU5NCBleF9kb2NtZC5jOjIwMTEKK21zZ2lkICJFNDc4OiBEb24ndCBwYW5pYyEiCittc2dzdHIgIkU0Nzg6IE5pZSBwYW5pa3VqISIKKworIzogZXhfY21kcy5jOjQ2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY2MTogU29ycnksIG5vICclcycgaGVscCBmb3IgJXMiCittc2dzdHIgIkU2NjE6IFByenlrcm8gbWksIGJyYWsgJyVzJyBwb21vY3kgZGxhICVzIgorCisjOiBleF9jbWRzLmM6NDY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQ5OiBTb3JyeSwgbm8gaGVscCBmb3IgJXMiCittc2dzdHIgIkUxNDk6IFByenlrcm8gbWksIGFsZSBicmFrIHBvbW9jeSBvICVzIgorCisjOiBleF9jbWRzLmM6NDY4MworIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiCittc2dzdHIgIlByenlrcm8gbWksIG5pZSBtYSBwbGlrdSBwb21vY3kgXCIlc1wiIgorCisjOiBleF9jbWRzLmM6NTE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiBOaWUgamVzdCBrYXRhbG9naWVtOiAlcyIKKworIzogZXhfY21kcy5jOjUzMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MjogQ2Fubm90IG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNTI6IE5pZSBtb2fqIG90d29yennmICVzIGRvIHphcGlzdSIKKworIzogZXhfY21kcy5jOjUzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MzogVW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxNTM6IE5pZSBtb2fqIG90d29yennmICVzIGRvIG9kY3p5dHUiCisKKyM6IGV4X2NtZHMuYzo1MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NzA6IE1peCBvZiBoZWxwIGZpbGUgZW5jb2RpbmdzIHdpdGhpbiBhIGxhbmd1YWdlOiAlcyIKK21zZ3N0ciAiRTY3MDogTWllc3phbmthIGtvZG93YfEgdyBwbGlrdSBwb21vY3kgdyByYW1hY2ggaup6eWthOiAlcyIKKworIzogZXhfY21kcy5jOjU0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcyIKK21zZ3N0ciAiRTE1NDogRHd1a3JvdG55IHpuYWN6bmlrIFwiJXNcIiB3IHBsaWt1ICVzIgorCisjOiBleF9jbWRzLmM6NTU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTYwOiBVbmtub3duIHNpZ24gY29tbWFuZDogJXMiCittc2dzdHIgIkUxNjA6IE5pZXpuYW5hIGtvbWVuZGEgem5ha3U6ICVzIgorCisjOiBleF9jbWRzLmM6NTU3MworbXNnaWQgIkUxNTY6IE1pc3Npbmcgc2lnbiBuYW1lIgorbXNnc3RyICJFMTU2OiBCcmFrIG5hend5IHpuYWt1IgorCisjOiBleF9jbWRzLmM6NTYxOQorbXNnaWQgIkU2MTI6IFRvbyBtYW55IHNpZ25zIGRlZmluZWQiCittc2dzdHIgIkUyNTU6IFpieXQgd2llbGUgbmF6dyB6bmFr83ciCisKKyM6IGV4X2NtZHMuYzo1Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTogTmlld7NhnGNpd3kgdGVrc3Qgem5ha3U6ICVzIgorCisjOiBleF9jbWRzLmM6NTcxOCBleF9jbWRzLmM6NTkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiBOaWV6bmFueSB6bmFrOiAlcyIKKworIzogZXhfY21kcy5jOjU3NjcKK21zZ2lkICJFMTU5OiBNaXNzaW5nIHNpZ24gbnVtYmVyIgorbXNnc3RyICJFMTU5OiBCcmFrIG51bWVydSB6bmFrdSIKKworIzogZXhfY21kcy5jOjU4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1ODogSW52YWxpZCBidWZmZXIgbmFtZTogJXMiCittc2dzdHIgIkUxNTg6IE5pZXezYZxjaXdhIG5hendhIGJ1Zm9yYTogJXMiCisKKyM6IGV4X2NtZHMuYzo1ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiBOaWV3s2GcY2l3ZSBJRCB6bmFrdTogJWxkIgorCisjOiBleF9jbWRzLmM6NTk1OAorbXNnaWQgIiAoTk9UIEZPVU5EKSIKK21zZ3N0ciAiIChOSUUgWk5BTEVaSU9OTykiCisKKyM6IGV4X2NtZHMuYzo1OTYwCittc2dpZCAiIChub3Qgc3VwcG9ydGVkKSIKK21zZ3N0ciAiKG5pZSB3c3BvbWFnYW5lKSIKKworIzogZXhfY21kcy5jOjYwNTkKK21zZ2lkICJbRGVsZXRlZF0iCittc2dzdHIgIltTa2Fzb3dhbm9dIgorCisjOiBleF9kb2NtZC5jOjUyNQorbXNnaWQgIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIgorbXNnc3RyICJXY2hvZHrqIHcgdHJ5YiBFeC4gV3Byb3dhZJ8gXCJ2aXN1YWxcIiBhYnkgcHJ6ZWqc5iBkbyB0cnlidSBOb3JtYWwuIgorCisjLiBtdXN0IGJlIGF0IEVPRgorIzogZXhfZG9jbWQuYzo1NjEKK21zZ2lkICJFNTAxOiBBdCBlbmQtb2YtZmlsZSIKK21zZ3N0ciAiRTUwMTogTmEga2/xY3UgcGxpa3UiCisKKyM6IGV4X2RvY21kLmM6NjY5Cittc2dpZCAiRTE2OTogQ29tbWFuZCB0b28gcmVjdXJzaXZlIgorbXNnc3RyICJFMTY5OiBLb21lbmRhIHpieXQgcmVrdXJzeXduYSIKKworIzogZXhfZG9jbWQuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDU6IEV4Y2VwdGlvbiBub3QgY2F1Z2h0OiAlcyIKK21zZ3N0ciAiRTYwNTogTmllIHpuYWxlemlvbm8gd3lquXRrdTogJXMiCisKKyM6IGV4X2RvY21kLmM6MTMxNworbXNnaWQgIkVuZCBvZiBzb3VyY2VkIGZpbGUiCittc2dzdHIgIktvbmllYyB3Y3p5dHl3YW5lZ28gcGxpa3UiCisKKyM6IGV4X2RvY21kLmM6MTMxOAorbXNnaWQgIkVuZCBvZiBmdW5jdGlvbiIKK21zZ3N0ciAiS29uaWVjIGZ1bmtjamkiCisKKyM6IGV4X2RvY21kLmM6MTkwNworbXNnaWQgIkU0NjQ6IEFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgIkU0NjQ6IE5pZWplZG5vem5hY3puZSB6YXN0b3Nvd2FuaWUga29tZW5keSB6ZGVmaW5pb3dhbmVqIHByemV6IHW/eXRrb3duaWthIgorCisjOiBleF9kb2NtZC5jOjE5MjEKK21zZ2lkICJFNDkyOiBOb3QgYW4gZWRpdG9yIGNvbW1hbmQiCittc2dzdHIgIkU0OTI6IE5pZSBqZXN0IGtvbWVuZLkgZWR5dG9yYSIKKworIzogZXhfZG9jbWQuYzoyMDMwCittc2dpZCAiRTQ5MzogQmFja3dhcmRzIHJhbmdlIGdpdmVuIgorbXNnc3RyICJFNDkzOiBEYW5vIHdzdGVjem55IHpha3JlcyIKKworIzogZXhfZG9jbWQuYzoyMDM5Cittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuLCBPSyB0byBzd2FwIgorbXNnc3RyICJEYW5vIHdzdGVjem55IHpha3JlczsgemFtaWFuYSBqZXN0IG1vv2xpd2EiCisKKyM6IGV4X2RvY21kLmM6MjE2MgorbXNnaWQgIkU0OTQ6IFVzZSB3IG9yIHc+PiIKK21zZ3N0ciAiRTQ5NDogU3Rvc3VqIHcgbHViIHc+PiIKKworIzogZXhfZG9jbWQuYzozNzg4Cittc2dpZCAiRTMxOTogU29ycnksIHRoZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMzE5OiBQcnp5a3JvIG1pLCBhbGUgdGEga29tZW5kYSBuaWUgamVzdCBkb3N06nBuYSB3IHRlaiB3ZXJzamkiCisKKyM6IGV4X2RvY21kLmM6Mzk5MQorbXNnaWQgIkUxNzI6IE9ubHkgb25lIGZpbGUgbmFtZSBhbGxvd2VkIgorbXNnc3RyICJFMTcyOiBUeWxrbyBwb2plZHluY3phIG5hendhIHBsaWt1IGRvendvbG9uYSIKKworIzogZXhfZG9jbWQuYzo0NTcxCittc2dpZCAiMSBtb3JlIGZpbGUgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIKK21zZ3N0ciAiMSB3aepjZWogcGxpayBkbyBlZHljamkuICBNaW1vIHRvIHd5apzmPyIKKworIzogZXhfZG9jbWQuYzo0NTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG1vcmUgZmlsZXMgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIKK21zZ3N0ciAiamVzemN6ZSAlZCBwbGlr83cgZG8gZWR5Y2ppLiAgTWltbyB0byB3eWqc5j8iCisKKyM6IGV4X2RvY21kLmM6NDU4MQorbXNnaWQgIkUxNzM6IDEgbW9yZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6IDEgd2nqY2VqIHBsaWsgZG8gZWR5Y2ppIgorCisjOiBleF9kb2NtZC5jOjQ1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3MzogJWxkIG1vcmUgZmlsZXMgdG8gZWRpdCIKK21zZ3N0ciAiRTE3MzogamVzemN6ZSAlbGQgcGxpa/N3IGRvIGVkeWNqaSIKKworIzogZXhfZG9jbWQuYzo0Njc4Cittc2dpZCAiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogYWRkICEgdG8gcmVwbGFjZSBpdCIKK21zZ3N0ciAiRTE3NDogS29tZW5kYSBqdb8gaXN0bmllamU7IGFieSBquSBwcnplZGVmaW5pb3dh5iBzdG9zdWogISIKKworIzogZXhfZG9jbWQuYzo0Nzg5Cittc2dpZCAiIgorIlxuIgorIiAgICBOYW1lICAgICAgICBBcmdzIFJhbmdlIENvbXBsZXRlICBEZWZpbml0aW9uIgorbXNnc3RyICIiCisiXG4iCisiICAgIE5hendhICAgICAgIEFyZy4gWmFrLiAgR290b3dvnOYgIERlZmluaWNqYSIKKworIzogZXhfZG9jbWQuYzo0ODc4Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyBrb21lbmQgemRlZmluaW93YW55Y2ggcHJ6ZXogdb95dGtvd25pa2EiCisKKyM6IGV4X2RvY21kLmM6NDkxMAorbXNnaWQgIkUxNzU6IE5vIGF0dHJpYnV0ZSBzcGVjaWZpZWQiCittc2dzdHIgIkUxNzU6IE5pZSBva3JlnGxvbm8gYXRyeWJ1dHUiCisKKyM6IGV4X2RvY21kLmM6NDk2MgorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3NjogTmlld7NhnGNpd2EgaWxvnOYgYXJndW1lbnTzdyIKKworIzogZXhfZG9jbWQuYzo0OTc3Cittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3NzogTW5vv25payBuaWUgbW+/ZSBieeYgcG9kYW55IGR3dWtyb3RuaWUiCisKKyM6IGV4X2RvY21kLmM6NDk4NworbXNnaWQgIkUxNzg6IEludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgY291bnQiCittc2dzdHIgIkUxNzg6IE5pZXezYZxjaXdhIGRvbXmcbG5hIHdhcnRvnOYgbW5vv25pa2EiCisKKyM6IGV4X2RvY21kLmM6NTAxOAorbXNnaWQgIkUxNzk6IGFyZ3VtZW50IHJlcXVpcmVkIGZvciBjb21wbGV0ZSIKK21zZ3N0ciAiRTE3OTogYXJndW1lbnQgd3ltYWdhbnkgZG8gZG9wZbNuaWFuaWEiCisKKyM6IGV4X2RvY21kLmM6NTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgwOiBJbnZhbGlkIGNvbXBsZXRlIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTE4MDogTmlld7NhnGNpd2Egd2FydG+c5iBkb3Bls25pYW5pYTogJXMiCisKKyM6IGV4X2RvY21kLmM6NTA1OQorbXNnaWQgIkU0Njg6IENvbXBsZXRpb24gYXJndW1lbnQgb25seSBhbGxvd2VkIGZvciBjdXN0b20gY29tcGxldGlvbiIKK21zZ3N0ciAiRTQ2ODogQXJndW1lbnQgZGVwZbNuaWFuaWEgZG96d29sb255IHd5s7ljem5pZSBkbGEgZG9wZbNuaWFuaWEgdb95dGtvd25pa2EiCisKKyM6IGV4X2RvY21kLmM6NTA2NQorbXNnaWQgIkU0Njc6IEN1c3RvbSBjb21wbGV0aW9uIHJlcXVpcmVzIGEgZnVuY3Rpb24gYXJndW1lbnQiCittc2dzdHIgIkU0Njc6IERvcGWzbmlhbmllIHW/eXRrb3duaWthIHd5bWFnYSBmdW5rY2ppIGpha28gYXJndW1lbnR1IgorCisjOiBleF9kb2NtZC5jOjUwNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MTogSW52YWxpZCBhdHRyaWJ1dGU6ICVzIgorbXNnc3RyICJFMTgxOiBOaWV3s2GcY2l3eSBhdHJ5YnV0OiAlcyIKKworIzogZXhfZG9jbWQuYzo1MTE5Cittc2dpZCAiRTE4MjogSW52YWxpZCBjb21tYW5kIG5hbWUiCittc2dzdHIgIkUxODI6IE5pZXezYZxjaXdhIG5hendhIGtvbWVuZHkiCisKKyM6IGV4X2RvY21kLmM6NTEzNAorbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiIgorIkUxODM6IEtvbWVuZHkgemRlZmluaW93YW5lIHByemV6IHW/eXRrb3duaWthIG11c3q5IHJvenBvY3p5bmHmIHNp6iBkdb+5ICIKKyJsaXRlcrkiCisKKyM6IGV4X2RvY21kLmM6NTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg0OiBObyBzdWNoIHVzZXItZGVmaW5lZCBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE4NDogTmllIG1hIHRha2llaiBrb21lbmR5IHW/eXRrb3duaWthOiAlcyIKKworIzogZXhfZG9jbWQuYzo1NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTogTmllIG1vZ+ogem5hbGWf5iB6ZXN0YXd1IGtvbG9y83cgJXMiCisKKyM6IGV4X2RvY21kLmM6NTY3NAorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICJXaXRhaiB1v3l0a293bmlrdSBWaW1hISIKKworIzogZXhfZG9jbWQuYzo2MzkxCittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgIkVkeXR1aiBwbGlrIHcgbm93eW0gb2tuaWUiCisKKyM6IGV4X2RvY21kLmM6NjY4NgorbXNnaWQgIk5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiQnJhayBwbGlrdSB3eW1pYW55IgorCisjOiBleF9kb2NtZC5jOjY3OTAKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAiRG+zuWN6IHBsaWsiCisKKyM6IGV4X2RvY21kLmM6Njg1NAorbXNnaWQgIkUxODY6IE5vIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE4NjogTmllIG1hIHBvcHJ6ZWRuaWVnbyBrYXRhbG9ndSIKKworIzogZXhfZG9jbWQuYzo2OTM2Cittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4NzogTmllem5hbnkiCisKKyM6IGV4X2RvY21kLmM6NzAyMQorbXNnaWQgIkU0NjU6IDp3aW5zaXplIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY1OiA6d2luc2l6ZSB3eW1hZ2EgZHfzY2ggYXJndW1lbnTzdyBudW1lcnljem55Y2giCisKKyM6IGV4X2RvY21kLmM6NzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIlBvenljamEgb2tuYTogWCAlZCwgWSAlZCIKKworIzogZXhfZG9jbWQuYzo3MDgyCittc2dpZCAiRTE4ODogT2J0YWluaW5nIHdpbmRvdyBwb3NpdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIkUxODg6IFBvenlza2l3YW5pZSBwb3p5Y2ppIG9rbmEgbmllIGplc3QgemFpbXBsZW1lbnRvd2FuZSBkbGEgdGVnbyBzeXN0ZW11IgorCisjOiBleF9kb2NtZC5jOjcwOTIKK21zZ2lkICJFNDY2OiA6d2lucG9zIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY2OiA6d2lucG9zIHd5bWFnYSBkd/NjaCBhcmd1bWVudPN3IG51bWVyeWN6bnljaCIKKworIzogZXhfZG9jbWQuYzo3MzcwCittc2dpZCAiU2F2ZSBSZWRpcmVjdGlvbiIKK21zZ3N0ciAiWmFwaXN6IHByemVraWVyb3dhbmllIgorCisjOiBleF9kb2NtZC5jOjc1NjAKK21zZ2lkICJTYXZlIFZpZXciCittc2dzdHIgIlphcGlzeiB3aWRvayIKKworIzogZXhfZG9jbWQuYzo3NTYxCittc2dpZCAiU2F2ZSBTZXNzaW9uIgorbXNnc3RyICJaYXBpc3ogc2VzauoiCisKKyM6IGV4X2RvY21kLmM6NzU2MworbXNnaWQgIlNhdmUgU2V0dXAiCittc2dzdHIgIlphcGlzeiB1c3Rhd2llbmlhIgorCisjOiBleF9kb2NtZC5jOjc3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4OTogXCIlc1wiIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTg5OiBcIiVzXCIgaXN0bmllamUgKHd5bXWcIHBvcHJ6ZXogISkiCisKKyM6IGV4X2RvY21kLmM6NzcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxOTA6IE5pZSBtb2fqIG90d29yennmIFwiJXNcIiBkbyB6YXBpc3UiCisKKyMuIHNldCBtYXJrCisjOiBleF9kb2NtZC5jOjc3NDQKK21zZ2lkICJFMTkxOiBBcmd1bWVudCBtdXN0IGJlIGEgbGV0dGVyIG9yIGZvcndhcmQvYmFja3dhcmQgcXVvdGUiCittc2dzdHIgIkUxOTE6IEFyZ3VtZW50IG11c2kgYnnmIGxpdGVyuSBhbGJvIGN1ZHp5c7Nvd2VtIHcgcHJ682QvdHmzIgorCisjOiBleF9kb2NtZC5jOjc3ODYKK21zZ2lkICJFMTkyOiBSZWN1cnNpdmUgdXNlIG9mIDpub3JtYWwgdG9vIGRlZXAiCittc2dzdHIgIkUxOTI6IFJla3Vyc3l3bmUgemFzdG9zb3dhbmllIDpub3JtYWwgemEgZ7PqYm9raWUiCisKKyM6IGV4X2RvY21kLmM6ODMwNAorbXNnaWQgIkUxOTQ6IE5vIGFsdGVybmF0ZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgJyMnIgorbXNnc3RyICJFMTk0OiBCcmFrIG5hend5IHphbWllbm5lZ28gcGxpa3UgZG8gcG9kc3Rhd2llbmlhIHBvZCAnIyciCisKKyM6IGV4X2RvY21kLmM6ODMzNQorbXNnaWQgIkU0OTU6IG5vIGF1dG9jb21tYW5kIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhZmlsZT5cIiIKK21zZ3N0ciAiRTQ5NTogYnJhayBuYXp3eSBwbGlrdSBhdXRva29tZW5kIGRvIHBvZHN0YXdpZW5pYSBwb2QgXCI8YWZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6ODM0MworbXNnaWQgIkU0OTY6IG5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAiRTQ5NjogYnJhayBudW1lcnUgYnVmb3JhIGF1dG9rb21lbmQgZG8gcG9kc3Rhd2llbmlhIHBvZCAgXCI8YWJ1Zj5cIiIKKworIzogZXhfZG9jbWQuYzo4MzU0Cittc2dpZCAiRTQ5Nzogbm8gYXV0b2NvbW1hbmQgbWF0Y2ggbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhbWF0Y2g+XCIiCittc2dzdHIgIkU0OTc6IGJyYWsgbmF6d3kgZG9wYXNvd2FuaWEgYXV0b2tvbWVuZCBwb2QgXCI8YW1hdGNoPlwiIgorCisjOiBleF9kb2NtZC5jOjgzNjQKK21zZ2lkICJFNDk4OiBubyA6c291cmNlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxzZmlsZT5cIiIKK21zZ3N0ciAiRTQ5ODogYnJhayBuYXp3eSBwbGlrdSA6c291cmNlIGRvIHBvc3Rhd2llbmlhIHBvZCBcIjxzZmlsZT5cIiIKKworIzogZXhfZG9jbWQuYzo4NDA1CisjLCBuby1jLWZvcm1hdAorbXNnaWQgIkU0OTk6IEVtcHR5IGZpbGUgbmFtZSBmb3IgJyUnIG9yICcjJywgb25seSB3b3JrcyB3aXRoIFwiOnA6aFwiIgorbXNnc3RyICJFNDk5OiBQdXN0YSBuYXp3YSBwbGlrdSBkbGEgJyUnIGx1YiAnIycsIGR6aWGzYSB0eWxrbyB6IFwiOnA6aFwiIgorCisjOiBleF9kb2NtZC5jOjg0MDcKK21zZ2lkICJFNTAwOiBFdmFsdWF0ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJFNTAwOiBXeW5pa2llbSBqZXN0IHB1c3R5IGNpuWciCisKKyM6IGV4X2RvY21kLmM6OTM2MgorbXNnaWQgIkUxOTU6IENhbm5vdCBvcGVuIHZpbWluZm8gZmlsZSBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE5NTogTmllIG1vZ+ogb3R3b3J6eeYgcGxpa3UgdmltaW5mbyBkbyBvZGN6eXR1IgorCisjOiBleF9kb2NtZC5jOjk1MzUKK21zZ2lkICJFMTk2OiBObyBkaWdyYXBocyBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUxOTY6IEJyYWsgZHd1Z3JhZvN3IHcgdGVqIHdlcnNqaSIKKworIzogZXhfZXZhbC5jOjQ0MAorbXNnaWQgIkU2MDg6IENhbm5vdCA6dGhyb3cgZXhjZXB0aW9ucyB3aXRoICdWaW0nIHByZWZpeCIKK21zZ3N0ciAiRTYwODogTmllIG1vv25hICc6dGhyb3cnIHd5arl0a/N3IHogcHJlZmlrc2VtICdWaW0nIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV4X2V2YWwuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIHRocm93bjogJXMiCittc2dzdHIgIld5arl0ZWs6ICVzIgorCisjOiBleF9ldmFsLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBmaW5pc2hlZDogJXMiCittc2dzdHIgIld5arl0ZWsgemFrb/Fjem9ueTogJXMiCisKKyM6IGV4X2V2YWwuYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGRpc2NhcmRlZDogJXMiCittc2dzdHIgIld5arl0ZWsgb2RyenVjb255OiAlcyIKKworIzogZXhfZXZhbC5jOjYyMCBleF9ldmFsLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBsaW5lICVsZCIKK21zZ3N0ciAiJXMsIHdpZXJzeiAlbGQiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gY2F1Z2h0OiAlcyIKK21zZ3N0ciAiV3lquXRlayBwcnplY2h3eWNvbnk6ICVzIgorCisjOiBleF9ldmFsLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG1hZGUgcGVuZGluZyIKK21zZ3N0ciAiJXMgem9zdGGzIHphd2llc3pvbnkiCisKKyM6IGV4X2V2YWwuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzdW1lZCIKK21zZ3N0ciAiJXMgcHJ6eXdy82NvbnkiCisKKyM6IGV4X2V2YWwuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzY2FyZGVkIgorbXNnc3RyICIlcyBvZHJ6dWNvbnkiCisKKyM6IGV4X2V2YWwuYzo3NDYKK21zZ2lkICJFeGNlcHRpb24iCittc2dzdHIgIld5arl0ZWsiCisKKyM6IGV4X2V2YWwuYzo3NTIKK21zZ2lkICJFcnJvciBhbmQgaW50ZXJydXB0IgorbXNnc3RyICJCs7lkIGkgcHJ6ZXJ3YW5pZSIKKworIzogZXhfZXZhbC5jOjc1NCBndWkuYzo0Mzc1Cittc2dpZCAiRXJyb3IiCittc2dzdHIgIkKzuWQiCisKKyMuIGlmIChwZW5kaW5nICYgQ1NUUF9JTlRFUlJVUFQpCisjOiBleF9ldmFsLmM6NzU2Cittc2dpZCAiSW50ZXJydXB0IgorbXNnc3RyICJQcnplcndhbmllIgorCisjOiBleF9ldmFsLmM6ODMwCittc2dpZCAiRTU3OTogOmlmIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU1Nzk6IHpieXQgZ7PqYm9raWUgemFnbmllv2S/ZW5pZSA6aWYiCisKKyM6IGV4X2V2YWwuYzo4NjcKK21zZ2lkICJFNTgwOiA6ZW5kaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODA6IDplbmRpZiBiZXogOmlmIgorCisjOiBleF9ldmFsLmM6OTExCittc2dpZCAiRTU4MTogOmVsc2Ugd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODE6IDplbHNlIGJleiA6aWYiCisKKyM6IGV4X2V2YWwuYzo5MTQKK21zZ2lkICJFNTgyOiA6ZWxzZWlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgyOiA6ZWxzZWlmIGJleiA6aWYiCisKKyM6IGV4X2V2YWwuYzo5MjEKK21zZ2lkICJFNTgzOiBtdWx0aXBsZSA6ZWxzZSIKK21zZ3N0ciAiRTU4Mzogd2llbG9rcm90bmUgOmVsc2UiCisKKyM6IGV4X2V2YWwuYzo5MjQKK21zZ2lkICJFNTg0OiA6ZWxzZWlmIGFmdGVyIDplbHNlIgorbXNnc3RyICJFNTg0OiA6ZWxzZWlmIHBvIDplbHNlIgorCisjOiBleF9ldmFsLmM6OTkxCittc2dpZCAiRTU4NTogOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU1ODU6IHpieXQgZ7PqYm9raWUgemFnbmllv2S/ZW5pZSA6d2hpbGUiCisKKyM6IGV4X2V2YWwuYzoxMDQ3Cittc2dpZCAiRTU4NjogOmNvbnRpbnVlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg2OiA6Y29udGludWUgYmV6IDp3aGlsZSIKKworIzogZXhfZXZhbC5jOjEwODcKK21zZ2lkICJFNTg3OiA6YnJlYWsgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODc6IDpicmVhayBiZXogOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTI4NgorbXNnaWQgIkU2MDE6IDp0cnkgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTYwMTogemJ5dCBns+pib2tpZSB6YWduaWW/ZL9lbmllIDp0cnkiCisKKyM6IGV4X2V2YWwuYzoxMzY2Cittc2dpZCAiRTYwMzogOmNhdGNoIHdpdGhvdXQgOnRyeSIKK21zZ3N0ciAiRTYwMzogOmNhdGNoIGJleiA6dHJ5IgorCisjLiBHaXZlIHVwIGZvciBhICI6Y2F0Y2giIGFmdGVyICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKyMuICogSnVzdCBwYXJzZS4KKyM6IGV4X2V2YWwuYzoxMzg4Cittc2dpZCAiRTYwNDogOmNhdGNoIGFmdGVyIDpmaW5hbGx5IgorbXNnc3RyICJFNjA0OiA6Y2F0Y2ggemEgOmZpbmFsbHkiCisKKyM6IGV4X2V2YWwuYzoxNTIxCittc2dpZCAiRTYwNjogOmZpbmFsbHkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjA2OiA6ZmluYWxseSBiZXogOnRyeSIKKworIy4gR2l2ZSB1cCBmb3IgYSBtdWx0aXBsZSAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjOiBleF9ldmFsLmM6MTU0NQorbXNnaWQgIkU2MDc6IG11bHRpcGxlIDpmaW5hbGx5IgorbXNnc3RyICJFNjA3OiB3aWVsb2tyb3RuZSA6ZmluYWxseSIKKworIzogZXhfZXZhbC5jOjE2NTQKK21zZ2lkICJFNjAyOiA6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIKK21zZ3N0ciAiRTYwMjogOmVuZHRyeSBiZXogOnRyeSIKKworIzogZXhfZXZhbC5jOjE5ODYKK21zZ2lkICJFMTkzOiA6ZW5kZnVuY3Rpb24gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTkzOiA6ZW5kZnVuY3Rpb24gcG96YSBmdW5rY2q5IgorCisjOiBleF9nZXRsbi5jOjMyOTYKK21zZ2lkICJ0YWduYW1lIgorbXNnc3RyICJuYXp3YSB6bmFjem5pa2EiCisKKyM6IGV4X2dldGxuLmM6MzI5OQorbXNnaWQgIiBraW5kIGZpbGVcbiIKK21zZ3N0ciAiIHBva3Jld255IHBsaWtcbiIKKworIzogZXhfZ2V0bG4uYzo0NzUyCittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICJvcGNqYSAnaGlzdG9yeScgamVzdCB6ZXJvd2EiCisKKyM6IGV4X2dldGxuLmM6NTAyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyAlcyBIaXN0b3J5IChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgJXMgSGlzdG9yaWEgKG9kIG5ham5vd3N6eWNoIHBvIG5hanN0YXJzemUpOlxuIgorCisjOiBleF9nZXRsbi5jOjUwMjQKK21zZ2lkICJDb21tYW5kIExpbmUiCittc2dzdHIgIldpZXJzeiBwb2xlY2XxIgorCisjOiBleF9nZXRsbi5jOjUwMjUKK21zZ2lkICJTZWFyY2ggU3RyaW5nIgorbXNnc3RyICJTenVrYW55IGNpuWciCisKKyM6IGV4X2dldGxuLmM6NTAyNgorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgIld5cmG/ZW5pZSIKKworIzogZXhfZ2V0bG4uYzo1MDI3Cittc2dpZCAiSW5wdXQgTGluZSIKK21zZ3N0ciAiV2llcnN6IHdwcm93YWR6ZfEiCisKKyM6IGV4X2dldGxuLmM6NTA2NQorbXNnaWQgIkUxOTg6IGNtZF9wY2hhciBiZXlvbmQgdGhlIGNvbW1hbmQgbGVuZ3RoIgorbXNnc3RyICJFMTk4OiBjbWRfcGNoYXIgcHJ6ZWtyYWN6YSBks3Vnb5zmIHBvbGVjZW5pYSIKKworIzogZXhfZ2V0bG4uYzo1MjQyCittc2dpZCAiRTE5OTogQWN0aXZlIHdpbmRvdyBvciBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiRTE5OTogQWt0eXdueSB3aWRvayBsdWIgYnVmb3Igc2thc293YW55IgorCisjOiBmaWxlaW8uYzozNzcKK21zZ2lkICJJbGxlZ2FsIGZpbGUgbmFtZSIKK21zZ3N0ciAiTmllZG9wdXN6Y3phbG5hIG5hendhIHBsaWt1IgorCisjOiBmaWxlaW8uYzo0MDEgZmlsZWlvLmM6NTM1IGZpbGVpby5jOjI5MTMgZmlsZWlvLmM6Mjk1NAorbXNnaWQgImlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJqZXN0IGthdGFsb2dpZW0iCisKKyM6IGZpbGVpby5jOjQwMworbXNnaWQgImlzIG5vdCBhIGZpbGUiCittc2dzdHIgIm5pZSBqZXN0IHBsaWtpZW0iCisKKyM6IGZpbGVpby5jOjU1NyBmaWxlaW8uYzo0MTMxCittc2dpZCAiW05ldyBGaWxlXSIKK21zZ3N0ciAiW05vd3kgUGxpa10iCisKKyM6IGZpbGVpby5jOjU5MAorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIltOaWUgZG96d29sb25vXSIKKworIzogZmlsZWlvLmM6Njk0Cittc2dpZCAiRTIwMDogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG1hZGUgdGhlIGZpbGUgdW5yZWFkYWJsZSIKK21zZ3N0ciAiRTIwMDogQXV0b2tvbWVuZHkgKlJlYWRQcmUgenJvYmmzeSBwbGlrIG5pZW9kY3p5dHl3YWxueW0iCisKKyM6IGZpbGVpby5jOjY5NgorbXNnaWQgIkUyMDE6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUyMDE6IEF1dG9rb21lbmR5ICpSZWFkUHJlIG5pZSBtb2e5IHptaWVuaWHmIGJpZb+5Y2VnbyBidWZvcmEiCisKKyM6IGZpbGVpby5jOjcxNworbXNnaWQgIlZpbTogUmVhZGluZyBmcm9tIHN0ZGluLi4uXG4iCittc2dzdHIgIlZpbTogV2N6eXR5d2FuaWUgemUgc3RkaW4uLi5cbiIKKworIzogZmlsZWlvLmM6NzIzCittc2dpZCAiUmVhZGluZyBmcm9tIHN0ZGluLi4uIgorbXNnc3RyICJXY3p5dHl3YW5pZSB6ZSBzdGRpbi4uLiIKKworIy4gUmUtb3BlbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBmYWlsZWQhCisjOiBmaWxlaW8uYzoxMDAwCittc2dpZCAiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiCittc2dzdHIgIkUyMDI6IFBsaWsgc3R3b3J6b255IHBvcHJ6ZXogcHJ6ZW1pYW7qIGplc3Qgbmllb2Rjenl0eXdhbG55ISIKKworIzogZmlsZWlvLmM6MjA5MAorbXNnaWQgIltmaWZvL3NvY2tldF0iCittc2dzdHIgIltmaWZvL3NvY2tldF0iCisKKyM6IGZpbGVpby5jOjIwOTcKK21zZ2lkICJbZmlmb10iCittc2dzdHIgIltmaWZvXSIKKworIzogZmlsZWlvLmM6MjEwNAorbXNnaWQgIltzb2NrZXRdIgorbXNnc3RyICJbc29ja2V0XSIKKworIzogZmlsZWlvLmM6MjExMgorbXNnaWQgIltST10iCittc2dzdHIgIltST10iCisKKyM6IGZpbGVpby5jOjIxMjIKK21zZ2lkICJbQ1IgbWlzc2luZ10iCittc2dzdHIgIlticmFrIENSXSciCisKKyM6IGZpbGVpby5jOjIxMjcKK21zZ2lkICJbTkwgZm91bmRdIgorbXNnc3RyICJbem5hbGV6aW9ubyBOTF0iCisKKyM6IGZpbGVpby5jOjIxMzIKK21zZ2lkICJbbG9uZyBsaW5lcyBzcGxpdF0iCittc2dzdHIgIltks3VnaWUgd2llcnN6ZSByb3pkemllbGFuZV0iCisKKyM6IGZpbGVpby5jOjIxMzggZmlsZWlvLmM6NDExNQorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW05JRSBwcnplbWllbmlvbmVdIgorCisjOiBmaWxlaW8uYzoyMTQzIGZpbGVpby5jOjQxMjAKK21zZ2lkICJbY29udmVydGVkXSIKK21zZ3N0ciAiW3ByemVtaWVuaW9uZV0iCisKKyM6IGZpbGVpby5jOjIxNTAgZmlsZWlvLmM6NDE0NQorbXNnaWQgIltjcnlwdGVkXSIKK21zZ3N0ciAiW3pha29kb3dhbmVdIgorCisjOiBmaWxlaW8uYzoyMTU3Cittc2dpZCAiW0NPTlZFUlNJT04gRVJST1JdIgorbXNnc3RyICJbQqOlRCBXIFBSWkVNSUFOSUVdIgorCisjOiBmaWxlaW8uYzoyMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIltJTExFR0FMIEJZVEUgaW4gbGluZSAlbGRdIgorbXNnc3RyICJbTklFRE9aV09MT05ZIEJBSlQgdyB3aWVyc3p1ICVsZF0iCisKKyM6IGZpbGVpby5jOjIxNzAKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbQqPKRFkgVyBPRENaWUNJRV0iCisKKyM6IGZpbGVpby5jOjIzODYKK21zZ2lkICJDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3IgY29udmVyc2lvbiIKK21zZ3N0ciAiTmllIG1vZ+ogem5hbGWf5iBwbGlrdSB0eW1jemFzb3dlZ28gdyBjZWx1IHByemVtaWFueSIKKworIzogZmlsZWlvLmM6MjM5MworbXNnaWQgIkNvbnZlcnNpb24gd2l0aCAnY2hhcmNvbnZlcnQnIGZhaWxlZCIKK21zZ3N0ciAiTmlldWRhbmEgcHJ6ZW1pYW5hIHogJ2NoYXJjb252ZXJ0JyIKKworIzogZmlsZWlvLmM6MjM5NgorbXNnaWQgImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciCittc2dzdHIgIm5pZSBtb2fqIG9kY3p5dGHmIHd5apxjaWEgeiAnY2hhcmNvbnZlcnQnIgorCisjOiBmaWxlaW8uYzoyNzk2Cittc2dpZCAiRTIwMzogQXV0b2NvbW1hbmRzIGRlbGV0ZWQgb3IgdW5sb2FkZWQgYnVmZmVyIHRvIGJlIHdyaXR0ZW4iCittc2dzdHIgIkUyMDM6IEF1dG9rb21lbmR5IHNrYXNvd2GzeSBsdWIgd3mzYWRvd2GzeSBidWZvciBwcnplem5hY3pvbnkgZG8gemFwaXN1IgorCisjOiBmaWxlaW8uYzoyODE5Cittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IEF1dG9rb21lbmRhIHptaWVuabNhIGxpY3pi6iB3aWVyc3p5IHcgbmllb2N6ZWtpd2FueSBzcG9z82IiCisKKyM6IGZpbGVpby5jOjI4NTcKK21zZ2lkICJOZXRCZWFucyBkaXNzYWxsb3dzIHdyaXRlcyBvZiB1bm1vZGlmaWVkIGJ1ZmZlcnMiCittc2dzdHIgIk5ldEJlYW5zIG5pZSBwb3p3YWxhIG5hIHphcGlzIG5pZXptb2R5Zmlrb3dhbnljaCBidWZvcvN3IgorCisjOiBmaWxlaW8uYzoyODY1Cittc2dpZCAiUGFydGlhbCB3cml0ZXMgZGlzYWxsb3dlZCBmb3IgTmV0QmVhbnMgYnVmZmVycyIKK21zZ3N0ciAiQ3rqnGNpb3d5IHphcGlzIG5pZW1vv2xpd3kgZGxhIGJ1Zm9y83cgTmV0QmVhbnMiCisKKyM6IGZpbGVpby5jOjI5MTkgZmlsZWlvLmM6MjkzNworbXNnaWQgImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIgorbXNnc3RyICJuaWUgamVzdCBwbGlraWVtIGx1YiB6YXBpc3l3YWxueW0gcHJ6eXJ6uWRlbSIKKworIzogZmlsZWlvLmM6Mjk4OQorbXNnaWQgImlzIHJlYWQtb25seSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJqZXN0IHR5bGtvIGRvIG9kY3p5dHUgKHd5bXWcIHBvcHJ6ZXogISkiCisKKyM6IGZpbGVpby5jOjMzMzUKK21zZ2lkICJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA2OiBOaWUgbW9n6iB6YXBpc2HmIGRvIHBsaWt1IHphYmV6cGllY3plbmlhICh3eW11nCBwcnpleiAhKSIKKworIzogZmlsZWlvLmM6MzM0NworbXNnaWQgIkU1MDc6IENsb3NlIGVycm9yIGZvciBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA3OiBCs7lkIHBvZGN6YXMgemFteWthbmlhIHBsaWt1IHphYmV6cGllY3plbmlhICh3eW11nCBwcnpleiAhKSIKKworIzogZmlsZWlvLmM6MzM0OQorbXNnaWQgIkU1MDg6IENhbid0IHJlYWQgZmlsZSBmb3IgYmFja3VwIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDg6IE5pZSBtb2fqIG9kY3p5dGHmIHBsaWt1IHcgY2VsdSB6YWJlenBpZWN6ZW5pYSAod3ltdZwgcHJ6ZXogISkiCisKKyM6IGZpbGVpby5jOjMzNjUKK21zZ2lkICJFNTA5OiBDYW5ub3QgY3JlYXRlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDk6IE5pZSBtb2fqIHN0d29yennmIHBsaWt1IHphYmV6cGllY3plbmlhICh3eW11nCBwcnpleiAhKSIKKworIzogZmlsZWlvLmM6MzQ2OAorbXNnaWQgIkU1MTA6IENhbid0IG1ha2UgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUxMDogTmllIG1vZ+ogenJvYmnmIHBsaWt1IHphYmV6cGllY3plbmlhICh3eW11nCBwcnpleiAhKSIKKworIzogZmlsZWlvLmM6MzUzMAorbXNnaWQgIkU0NjA6IFRoZSByZXNvdXJjZSBmb3JrIHdvdWxkIGJlIGxvc3QgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ2MDogUm96ZHppYbMgemFzb2LzdyB6b3N0YW5pZSB1dHJhY29ueSAod3ltdZwgcHJ6ZXogISkiCisKKyM6IGZpbGVpby5jOjM2NDAKK21zZ2lkICJFMjE0OiBDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxNDogTmllIG1vZ+ogem5hbGWf5iBwbGlrdSB0eW1jemFzb3dlZ28gZG8gemFwaXNhbmlhIgorCisjOiBmaWxlaW8uYzozNjU4Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKGFkZCAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIkUyMTM6IE5pZSBtb2fqIHByemVtaWVuaeYgKHW/eWogISBieSB6YXBpc2HmIGJleiBwcnplbWlhbnkpIgorCisjOiBmaWxlaW8uYzozNjkzCittc2dpZCAiRTE2NjogQ2FuJ3Qgb3BlbiBsaW5rZWQgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE2NjogTmllIG1vZ+ogb3R3b3J6eeYgcG9ks7ljem9uZWdvIHBsaWt1IGRvIHphcGlzdSIKKworIzogZmlsZWlvLmM6MzY5NworbXNnaWQgIkUyMTI6IENhbid0IG9wZW4gZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxMjogTmllIG1vZ+ogb3R3b3J6eeYgcGxpa3UgZG8gemFwaXN1IgorCisjOiBmaWxlaW8uYzozOTU5Cittc2dpZCAiRTY2NzogRnN5bmMgZmFpbGVkIgorbXNnc3RyICJFNjY3OiBGc3luYyBuaWUgcG93afNksyBzaeoiCisKKyM6IGZpbGVpby5jOjM5NjYKK21zZ2lkICJFNTEyOiBDbG9zZSBmYWlsZWQiCittc2dzdHIgIkU1MTI6IFphbWtuaepjaWUgc2nqIG5pZSBwb3dpb2SzbyIKKworIzogZmlsZWlvLmM6NDAzNworbXNnaWQgIkU1MTM6IHdyaXRlIGVycm9yLCBjb252ZXJzaW9uIGZhaWxlZCIKK21zZ3N0ciAiRTUxMzogYrO5ZCB3IHphcGlzaWUsIHByemVtaWFuYSBzaeogbmllIHBvd2lvZLNhIgorCisjOiBmaWxlaW8uYzo0MDQzCittc2dpZCAiRTUxNDogd3JpdGUgZXJyb3IgKGZpbGUgc3lzdGVtIGZ1bGw/KSIKK21zZ3N0ciAiRTUxNDogYrO5ZCB3IHphcGlzaWUgKG1vv2Ugc3lzdGVtIHBsaWvzdyBqZXN0IHByemVwZbNuaW9ueT8pIgorCisjOiBmaWxlaW8uYzo0MTEwCittc2dpZCAiIENPTlZFUlNJT04gRVJST1IiCittc2dzdHIgIiBCo6VEIFcgUFJaRU1JQU5JRSIKKworIzogZmlsZWlvLmM6NDEyNgorbXNnaWQgIltEZXZpY2VdIgorbXNnc3RyICJbVXJ6uWR6ZW5pZV0iCisKKyM6IGZpbGVpby5jOjQxMzEKK21zZ2lkICJbTmV3XSIKK21zZ3N0ciAiW05vd3ldIgorCisjOiBmaWxlaW8uYzo0MTUzCittc2dpZCAiIFthXSIKK21zZ3N0ciAiIFthXSIKKworIzogZmlsZWlvLmM6NDE1MworbXNnaWQgIiBhcHBlbmRlZCIKK21zZ3N0ciAiIGRvs7ljem9ubyIKKworIzogZmlsZWlvLmM6NDE1NQorbXNnaWQgIiBbd10iCittc2dzdHIgIiBbd10iCisKKyM6IGZpbGVpby5jOjQxNTUKK21zZ2lkICIgd3JpdHRlbiIKK21zZ3N0ciAiIHphcGlzYW5vIgorCisjOiBmaWxlaW8uYzo0MjA1Cittc2dpZCAiRTIwNTogUGF0Y2htb2RlOiBjYW4ndCBzYXZlIG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDU6IFBhdGNobW9kZTogbmllIG1vZ+ogemFwaXNh5iBvcnlnaW5hbG5lZ28gcGxpa3UiCisKKyM6IGZpbGVpby5jOjQyMjcKK21zZ2lkICJFMjA2OiBwYXRjaG1vZGU6IGNhbid0IHRvdWNoIGVtcHR5IG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDY6IHBhdGNobW9kZTogbmllIG1vZ+ogc3R3b3J6eeYgcHVzdGVnbyBvcnlnaW5hbG5lZ28gcGxpa3UiCisKKyM6IGZpbGVpby5jOjQyNDIKK21zZ2lkICJFMjA3OiBDYW4ndCBkZWxldGUgYmFja3VwIGZpbGUiCittc2dzdHIgIkUyMDc6IE5pZSBtb2fqIHNrYXNvd2HmIHBsaWt1IHphYmV6cGllY3plbmlhIgorCisjOiBmaWxlaW8uYzo0MzA2Cittc2dpZCAiIgorIlxuIgorIldBUk5JTkc6IE9yaWdpbmFsIGZpbGUgbWF5IGJlIGxvc3Qgb3IgZGFtYWdlZFxuIgorbXNnc3RyICIiCisiXG4iCisiT1NUUlpFr0VOSUU6IE9yeWdpbmFsbnkgcGxpayBtb79lIHpvc3Rh5iB1dHJhY29ueSBsdWIgdXN6a29kem9ueVxuIgorCisjOiBmaWxlaW8uYzo0MzA4Cittc2dpZCAiZG9uJ3QgcXVpdCB0aGUgZWRpdG9yIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIKK21zZ3N0ciAibmllIHd5Y2hvZJ8gZWR5dG9yYSwgZG9w82tpIHBsaWsgbmllIHpvc3RhsyBwb3ByYXduaWUgemFwaXNhbnkhIgorCisjOiBmaWxlaW8uYzo0Mzk3Cittc2dpZCAiW2Rvc10iCittc2dzdHIgIltkb3NdIgorCisjOiBmaWxlaW8uYzo0Mzk3Cittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbZm9ybWF0IGRvcy1hXSIKKworIzogZmlsZWlvLmM6NDQwNAorbXNnaWQgIlttYWNdIgorbXNnc3RyICJbbWFjXSIKKworIzogZmlsZWlvLmM6NDQwNAorbXNnaWQgIlttYWMgZm9ybWF0XSIKK21zZ3N0ciAiW2Zvcm1hdCBtYWMtYV0iCisKKyM6IGZpbGVpby5jOjQ0MTEKK21zZ2lkICJbdW5peF0iCittc2dzdHIgIlt1bml4XSIKKworIzogZmlsZWlvLmM6NDQxMQorbXNnaWQgIlt1bml4IGZvcm1hdF0iCittc2dzdHIgIltmb3JtYXQgdW5peC1hXSIKKworIzogZmlsZWlvLmM6NDQzOAorbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxIHdpZXJzeiwgIgorCisjOiBmaWxlaW8uYzo0NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcywgIgorbXNnc3RyICIlbGQgd2llcnN6eSwgIgorCisjOiBmaWxlaW8uYzo0NDQzCittc2dpZCAiMSBjaGFyYWN0ZXIiCittc2dzdHIgIjEgem5hayIKKworIzogZmlsZWlvLmM6NDQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxkIHpuYWvzdyIKKworIzogZmlsZWlvLmM6NDQ1NQorbXNnaWQgIltub2VvbF0iCittc2dzdHIgIltub2VvbF0iCisKKyM6IGZpbGVpby5jOjQ0NTUKK21zZ2lkICJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIgorbXNnc3RyICJbTmlla29tcGxldG55IG9zdGF0bmkgd2llcnN6XSIKKworIy4gZG9uJ3Qgb3ZlcndyaXRlIG1lc3NhZ2VzIGhlcmUKKyMuIG11c3QgZ2l2ZSB0aGlzIHByb21wdAorIy4gZG9uJ3QgdXNlIGVtc2coKSBoZXJlLCBkb24ndCB3YW50IHRvIGZsdXNoIHRoZSBidWZmZXJzCisjOiBmaWxlaW8uYzo0NDc0Cittc2dpZCAiV0FSTklORzogVGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSByZWFkaW5nIGl0ISEhIgorbXNnc3RyICJPU1RSWkWvRU5JRTogUGxpayB6bWllbmmzIHNp6iBvZCBjemFzdSBvc3RhdG5pZWdvIG9kY3p5dHUhISEiCisKKyM6IGZpbGVpby5jOjQ0NzYKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQiCittc2dzdHIgIkN6eSBuYXByYXdk6iBjaGNlc3ogZ28gemFwaXNh5iIKKworIzogZmlsZWlvLmM6NTcyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogQrO5ZCB6YXBpc3l3YW5pYSBkbyBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwOTogRXJyb3IgY2xvc2luZyBcIiVzXCIiCittc2dzdHIgIkUyMDk6IEKzuWQgdyB0cmFrY2llIHphbXlrYW5pYSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMDogRXJyb3IgcmVhZGluZyBcIiVzXCIiCittc2dzdHIgIkUyMTA6IEKzuWQgb2Rjenl0dSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU5NzAKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBBdXRva29tZW5kYSBGaWxlQ2hhbmdlZFNoZWxsIHNrYXNvd2GzYSBidWZvciIKKworIzogZmlsZWlvLmM6NTk3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBubyBsb25nZXIgYXZhaWxhYmxlIgorbXNnc3RyICJFMjExOiBPU1RSWkWvRU5JRTogUGxpayBcIiVzXCIgbmllIGplc3QgZLN1v2VqIGRvc3TqcG55IgorCisjOiBmaWxlaW8uYzo1OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiIgorIlcxMjogT1NUUlpFr0VOSUU6IFBsaWsgXCIlc1wiIHptaWVuabMgc2nqIG9kIGN6YXN1IHJvenBvY3rqY2lhIGVkeWNqaSwgYnVmb3IgIgorIncgVmltaWUgcvN3bmllvyB6b3N0YbMgem1pZW5pb255IgorCisjOiBmaWxlaW8uYzo1OTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMTogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTE6IE9TVFJaRa9FTklFOiBQbGlrIFwiJXNcIiB6bWllbmmzIHNp6iBvZCBjemFzdSByb3pwb2N66mNpYSBlZHljamkiCisKKyM6IGZpbGVpby5jOjU5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzE2OiBXYXJuaW5nOiBNb2RlIG9mIGZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzE2OiBPU1RSWkWvRU5JRTogVHJ5YiBwbGlrdSBcIiVzXCIgem1pZW5psyBzaeogb2QgY3phc3Ugcm96cG9jeupjaWEgZWR5Y2ppIgorCisjOiBmaWxlaW8uYzo2MDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMzogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGJlZW4gY3JlYXRlZCBhZnRlciBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMzogT1NUUlpFr0VOSUU6IFBsaWsgXCIlc1wiIHpvc3RhsyBzdHdvcnpvbnkgcG8gcm96cG9jeupjaXUgZWR5Y2ppIgorCisjOiBmaWxlaW8uYzo2MDE5Cittc2dpZCAiU2VlIFwiOmhlbHAgVzExXCIgZm9yIG1vcmUgaW5mby4iCittc2dzdHIgIlBhdHJ6IFwiOmhlbHAgVzExXCIgIGRsYSBkYWxzenljaCBpbmZvcm1hY2ppLiIKKworIzogZmlsZWlvLmM6NjAzMworbXNnaWQgIldhcm5pbmciCittc2dzdHIgIk9TVFJaRa9FTklFIgorCisjOiBmaWxlaW8uYzo2MDM0Cittc2dpZCAiIgorIiZPS1xuIgorIiZMb2FkIEZpbGUiCittc2dzdHIgIiIKKyImT0tcbiIKKyImWmGzYWR1aiBQbGlrIgorCisjOiBmaWxlaW8uYzo2MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjI6IENvdWxkIG5vdCBwcmVwYXJlIGZvciByZWxvYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFNDYyOiBOaWUgbW+/bmEgcHJ6eWdvdG93YeYgcHJ6ZbNhZG93YW5pYSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjYxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IE5pZSBtb79uYSBwcnpls2Fkb3dh5iBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjY3NDAKK21zZ2lkICItLURlbGV0ZWQtLSIKK21zZ3N0ciAiLS1Ta2Fzb3dhbm8tLSIKKworIy4gdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3QKKyM6IGZpbGVpby5jOjY5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NzogTm8gc3VjaCBncm91cDogXCIlc1wiIgorbXNnc3RyICJFMzY3OiBOaWUgbWEgdGFraWVqIGdydXB5OiBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjcwMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgKjogJXMiCittc2dzdHIgIkUyMTU6IE5pZWRvcHVzemN6YWxueSB6bmFrIHBvICo6ICVzIgorCisjOiBmaWxlaW8uYzo3MDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiBOaWUgbWEgdGFraWVnbyB3eWRhcnplbmlhOiAlcyIKKworIzogZmlsZWlvLmM6NzA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE2OiBObyBzdWNoIGdyb3VwIG9yIGV2ZW50OiAlcyIKK21zZ3N0ciAiRTIxNjogTmllIG1hIHRha2llaiBncnVweSBsdWIgd3lkYXJ6ZW5pYTogJXMiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogZmlsZWlvLmM6NzE5OAorbXNnaWQgIiIKKyJcbiIKKyItLS0gQXV0by1Db21tYW5kcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gQXV0b2tvbWVuZHkgLS0tIgorCisjOiBmaWxlaW8uYzo3NDY5Cittc2dpZCAiRTIxNzogQ2FuJ3QgZXhlY3V0ZSBhdXRvY29tbWFuZHMgZm9yIEFMTCBldmVudHMiCittc2dzdHIgIkUyMTc6IE5pZSBtb79uYSB3eWtvbnl3YeYgYXV0b2tvbWVuZCBkbGEgd3lkYXJ6ZfEgQUxMIgorCisjOiBmaWxlaW8uYzo3NDkyCittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICJCcmFrIHBhc3VquWN5Y2ggYXV0b2tvbWVuZCIKKworIzogZmlsZWlvLmM6NzgxMworbXNnaWQgIkUyMTg6IGF1dG9jb21tYW5kIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkUyMTg6IHpieXQgZ7PqYm9raWUgemFnbmllv2S/ZW5pZSBhdXRva29tZW5kIgorCisjOiBmaWxlaW8uYzo4MDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIEF1dG8gY29tbWFuZHMgZm9yIFwiJXNcIiIKK21zZ3N0ciAiJXMgQXV0b2tvbWVuZCBkbGEgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo4MDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAiV3lrb251auogJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZmlsZWlvLmM6ODE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdXRvY29tbWFuZCAlcyIKK21zZ3N0ciAiYXV0b2tvbWVuZGEgJXMiCisKKyM6IGZpbGVpby5jOjg3MzEKK21zZ2lkICJFMjE5OiBNaXNzaW5nIHsuIgorbXNnc3RyICJFMjE5OiBCcmFrIHsuIgorCisjOiBmaWxlaW8uYzo4NzMzCittc2dpZCAiRTIyMDogTWlzc2luZyB9LiIKK21zZ3N0ciAiRTIyMDogQnJhayB9LiIKKworIzogZm9sZC5jOjY4Cittc2dpZCAiRTQ5MDogTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAiRTQ5MDogTmllIHpuYWxlemlvbm8gendpbmnqY2lhIgorCisjOiBmb2xkLmM6NTkzCittc2dpZCAiRTM1MDogQ2Fubm90IGNyZWF0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTA6IE5pZSBtb79uYSB1dHdvcnp55iB6d2luaepjaWEgcHJ6eSBiaWW/uWNlaiAnZm9sZG1ldGhvZCciCisKKyM6IGZvbGQuYzo1OTUKK21zZ2lkICJFMzUxOiBDYW5ub3QgZGVsZXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MTogTmllIG1vv25hIHNrYXNvd2HmIHp3aW5p6mNpYSBwcnp5IGJpZb+5Y2VqICdmb2xkbWV0aG9kJyIKKworIzogZ2V0Y2hhci5jOjI0OAorbXNnaWQgIkUyMjI6IEFkZCB0byByZWFkIGJ1ZmZlciIKK21zZ3N0ciAiRTIyMjogRG9kYWogZG8gYnVmb3JhIG9kY3p5dHUiCisKKyM6IGdldGNoYXIuYzoyMTk4Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6IHJla3Vyc3l3bmUgcHJ6eXBvcnq5ZGtvd2FuaWUiCisKKyM6IGdldGNoYXIuYzozMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjQ6IGdsb2JhbCBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI0OiBpc3RuaWVqZSBqdb8gZ2xvYmFsbnkgc2ty83QgZGxhICVzIgorCisjOiBnZXRjaGFyLmM6MzA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI1OiBnbG9iYWwgbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjU6IGlzdG5pZWplIGp1vyBnbG9iYWxuZSBwcnp5cG9yerlka293YW5pZSBkbGEgJXMiCisKKyM6IGdldGNoYXIuYzozMjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjY6IGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjY6IGlzdG5pZWplIGp1vyBza3LzdCBkbGEgJXMiCisKKyM6IGdldGNoYXIuYzozMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI3OiBpc3RuaWVqZSBqdb8gcHJ6eXBvcnq5ZGtvd2FuaWUgZGxhICVzIgorCisjOiBnZXRjaGFyLmM6MzI3OQorbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAiTmllIHpuYWxlemlvbm8gc2ty83R1IgorCisjOiBnZXRjaGFyLmM6MzI4MQorbXNnaWQgIk5vIG1hcHBpbmcgZm91bmQiCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHByenlwb3J6uWRrb3dhbmlhIgorCisjOiBnZXRjaGFyLmM6NDE3MworbXNnaWQgIkUyMjg6IG1ha2VtYXA6IElsbGVnYWwgbW9kZSIKK21zZ3N0ciAiRTIyODogbWFrZW1hcDogTmllZG9wdXN6Y3phbG55IHRyeWIiCisKKyM6IGd1aV9hdF9mcy5jOjMwMAorbXNnaWQgIjxjYW5ub3Qgb3Blbj4gIgorbXNnc3RyICI8bmllIG1vZ+ogb3R3b3J6eeY+ICIKKworIzogZ3VpX2F0X2ZzLmM6MTEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE2OiB2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGZvbnQgJXMiCittc2dzdHIgIkU2MTY6IHZpbV9TZWxGaWxlOiBuaWUgbW9n6iBvdHJ6eW1h5iBjemNpb25raSAlcyIKKworIzogZ3VpX2F0X2ZzLmM6Mjc4MQorbXNnaWQgIkU2MTQ6IHZpbV9TZWxGaWxlOiBjYW4ndCByZXR1cm4gdG8gY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgIkU2MTQ6IHZpbV9TZWxGaWxlOiBuaWUgbW9n6iBwb3dy82Np5iBkbyBiaWW/uWNlZ28ga2F0YWxvZ3UiCisKKyM6IGd1aV9hdF9mcy5jOjI4MDEKK21zZ2lkICJQYXRobmFtZToiCittc2dzdHIgIlRyb3A6IgorCisjOiBndWlfYXRfZnMuYzoyODA3Cittc2dpZCAiRTYxNTogdmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNTogdmltX1NlbEZpbGU6IG5pZSBtb2fqIG90cnp5bWHmIGJpZb+5Y2VnbyBrYXRhbG9ndSIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfbW90aWYuYzoxNjIzCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBndWlfYXRfZnMuYzoyODE1IGd1aV9ndGsuYzoyNzMxIGd1aV9tb3RpZi5jOjE2MTggZ3VpX21vdGlmLmM6Mjg0OQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiWmFrb/FjeiIKKworIzogZ3VpX2F0aGVuYS5jOjIwNDcgZ3VpX21vdGlmLmM6MTg3MQorbXNnaWQgIlZpbSBkaWFsb2ciCittc2dzdHIgIlZJTSAtIERpYWxvZyIKKworIzogZ3VpX2F0X3NiLmM6NDg2Cittc2dpZCAiU2Nyb2xsYmFyIFdpZGdldDogQ291bGQgbm90IGdldCBnZW9tZXRyeSBvZiB0aHVtYiBwaXhtYXAuIgorbXNnc3RyICJTY3JvbGxiYXIgV2lkZ2V0OiBOaWUgbW9ns2VtIG90cnp5bWHmIHJvem1pYXLzdyByeXN1bmt1IG5hIHByenljaXNrdS4iCisKKyM6IGd1aV9iZXZhbC5jOjEwMSBndWlfdzMyLmM6MzgzMAorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICJFMjMyOiBOaWUgbW9n6iBzdHdvcnp55iBCYWxsb29uRXZhbCB6IHBvd2lhZG9taWVuaWVtIGkgd3l3b7NhbmllbSIKKworIzogZ3VpLmM6MjIwCittc2dpZCAiRTIyOTogQ2Fubm90IHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkUyMjk6IE5pZSBtb2fqIG9kcGFsaeYgR1VJIgorCisjOiBndWkuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzMDogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyMzA6IE5pZSBtb2fqIGN6eXRh5iB6IFwiJXNcIiIKKworIzogZ3VpLmM6NDcyCittc2dpZCAiRTY2NTogQ2Fubm90IHN0YXJ0IEdVSSwgbm8gdmFsaWQgZm9udCBmb3VuZCIKK21zZ3N0ciAiRTY2NTogTmllIG1vv25hIHVydWNob21p5iBHVUksIGJyYWsgcHJhd2lks293ZWogY3pjaW9ua2kiCisKKyM6IGd1aS5jOjQ3NworbXNnaWQgIkUyMzE6ICdndWlmb250d2lkZScgaW52YWxpZCIKK21zZ3N0ciAiRTIzMTogTmlld7NhnGNpd2UgJ2d1aWZvbnR3aWRlJyIKKworIzogZ3VpLmM6NTQ3Cittc2dpZCAiRTU5OTogVmFsdWUgb2YgJ2ltYWN0aXZhdGVrZXknIGlzIGludmFsaWQiCittc2dzdHIgIkU1OTk6IE5pZXByYXdpZLNvd2Egd2FydG+c5iAnaW1hY3RpdmF0ZWtleSciCisKKyM6IGd1aS5jOjQwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiBOaWUgbW9n6iB6YXJlemVyd293YeYga29sb3J1ICVzIgorCisjOiBndWlfZ3RrLmM6MTYwNworbXNnaWQgIlZpbSBkaWFsb2cuLi4iCittc2dzdHIgIkRpYWxvZyBWaW1hLi4uIgorCisjOiBndWlfZ3RrLmM6MjA2MCBtZXNzYWdlLmM6Mjk5MworbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZUYWtcbiIKKyImTmllXG4iCisiJlpha2/xY3oiCisKKyM6IGd1aV9ndGsuYzoyMjY4Cittc2dpZCAiSW5wdXQgX01ldGhvZHMiCittc2dzdHIgIklucHV0IF9NZXRob2RzIgorCisjOiBndWlfZ3RrLmM6MjUzNCBndWlfbW90aWYuYzoyNzY4Cittc2dpZCAiVklNIC0gU2VhcmNoIGFuZCBSZXBsYWNlLi4uIgorbXNnc3RyICJWSU0gLSBTenVrYWogaSBaYW1pZW5pYWouLi4iCisKKyM6IGd1aV9ndGsuYzoyNTQyIGd1aV9tb3RpZi5jOjI3NzAKK21zZ2lkICJWSU0gLSBTZWFyY2guLi4iCittc2dzdHIgIlZJTSAtIFN6dWthai4uLiIKKworIzogZ3VpX2d0ay5jOjI1NzQgZ3VpX21vdGlmLmM6Mjg4OAorbXNnaWQgIkZpbmQgd2hhdDoiCittc2dzdHIgIlpuYWpknzoiCisKKyM6IGd1aV9ndGsuYzoyNTkyIGd1aV9tb3RpZi5jOjI5MjAKK21zZ2lkICJSZXBsYWNlIHdpdGg6IgorbXNnc3RyICJaYW1pZfEgbmE6IgorCisjLiB3aG9sZSB3b3JkIG9ubHkgYnV0dG9uCisjOiBndWlfZ3RrLmM6MjYyNCBndWlfbW90aWYuYzozMDM2Cittc2dpZCAiTWF0Y2ggd2hvbGUgd29yZCBvbmx5IgorbXNnc3RyICJEb3Bhc3VqIHR5bGtvIGNhs2Ugd3lyYXp5IgorCisjLiBtYXRjaCBjYXNlIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI2MzUgZ3VpX21vdGlmLmM6MzA0OAorbXNnaWQgIk1hdGNoIGNhc2UiCittc2dzdHIgIkRvcGFzdWogd2llbGtvnOYgbGl0ZXIiCisKKyM6IGd1aV9ndGsuYzoyNjQ1IGd1aV9tb3RpZi5jOjI5OTAKK21zZ2lkICJEaXJlY3Rpb24iCittc2dzdHIgIktpZXJ1bmVrIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjI2NTcgZ3VpX21vdGlmLmM6MzAwMgorbXNnaWQgIlVwIgorbXNnc3RyICJXIGfzcuoiCisKKyM6IGd1aV9ndGsuYzoyNjYxIGd1aV9tb3RpZi5jOjMwMTAKK21zZ2lkICJEb3duIgorbXNnc3RyICJXIGTzsyIKKworIzogZ3VpX2d0ay5jOjI2ODMgZ3VpX2d0ay5jOjI2ODUgZ3VpX21vdGlmLmM6Mjc5MgorbXNnaWQgIkZpbmQgTmV4dCIKK21zZ3N0ciAiWm5hamSfIG5hc3TqcG5lIgorCisjOiBndWlfZ3RrLmM6MjcwMiBndWlfZ3RrLmM6MjcwNCBndWlfbW90aWYuYzoyODA5Cittc2dpZCAiUmVwbGFjZSIKK21zZ3N0ciAiWmFtaWXxIgorCisjOiBndWlfZ3RrLmM6MjcxNSBndWlfZ3RrLmM6MjcxNyBndWlfbW90aWYuYzoyODIyCittc2dpZCAiUmVwbGFjZSBBbGwiCittc2dzdHIgIlphbWll8SB3c3p5c3RraWUiCisKKyM6IGd1aV9ndGtfeDExLmM6MjMyNworbXNnaWQgIlZpbTogUmVjZWl2ZWQgXCJkaWVcIiByZXF1ZXN0IGZyb20gc2Vzc2lvbiBtYW5hZ2VyXG4iCittc2dzdHIgIlZpbTogb3RyenltYW5vIL+5ZGFuaWUgXCJkaWVcIiBvZCBtYW5hZL9lcmEgc2VzamlcbiIKKworIzogZ3VpX2d0a194MTEuYzozNTE5Cittc2dpZCAiVmltOiBNYWluIHdpbmRvdyB1bmV4cGVjdGVkbHkgZGVzdHJveWVkXG4iCittc2dzdHIgIlZpbTogR7Pzd25lIG9rbm8gbmllb2N6ZWtpd2FuaWUgem5pc3pjem9uZVxuIgorCisjOiBndWlfZ3RrX3gxMS5jOjQxMzgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAiV3li83IgY3pjaW9ua2kiCisKKyM6IGd1aV9ndGtfeDExLmM6NjAzNSB1aS5jOjIxMTcKK21zZ2lkICJVc2VkIENVVF9CVUZGRVIwIGluc3RlYWQgb2YgZW1wdHkgc2VsZWN0aW9uIgorbXNnc3RyICJVv3l3YW0gQ1VUX0JVRkZFUjAgemFtaWFzdCBwdXN0ZWdvIHd5Ym9ydSIKKworIzogZ3VpX21vdGlmLmM6MTYxNyBndWlfbW90aWYuYzoxNjIwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0ciIKKworIzogZ3VpX21vdGlmLmM6MTYxOQorbXNnaWQgIkRpcmVjdG9yaWVzIgorbXNnc3RyICJLYXRhbG9naSIKKworIzogZ3VpX21vdGlmLmM6MTYyMQorbXNnaWQgIkhlbHAiCittc2dzdHIgIlBvbW9jIgorCisjOiBndWlfbW90aWYuYzoxNjIyCittc2dpZCAiRmlsZXMiCittc2dzdHIgIlBsaWtpIgorCisjOiBndWlfbW90aWYuYzoxNjI0Cittc2dpZCAiU2VsZWN0aW9uIgorbXNnc3RyICJXeWLzciIKKworIzogZ3VpX21vdGlmLmM6MjgzNQorbXNnaWQgIlVuZG8iCittc2dzdHIgIkNvZm5paiIKKworIzogZ3VpX3Jpc2Nvcy5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjEwOiBDYW4ndCBsb2FkIFphcCBmb250ICclcyciCittc2dzdHIgIkU2MTA6IE5pZSBtb2fqIHphs2Fkb3dh5iBjemNpb25raSBaYXAgJyVzJyIKKworIzogZ3VpX3Jpc2Nvcy5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMTogQ2FuJ3QgdXNlIGZvbnQgJXMiCittc2dzdHIgIkU2MTE6IE5pZSBtb2fqIHW/eeYgY3pjaW9ua2kgJXMiCisKKyM6IGd1aV9yaXNjb3MuYzozMjcwCittc2dpZCAiIgorIlxuIgorIlNlbmRpbmcgbWVzc2FnZSB0byB0ZXJtaW5hdGUgY2hpbGQgcHJvY2Vzcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIld5c3mzYW0gemF3aWFkb21pZW5pZSBrb/FjerljZSBwcm9jZXMgcG9jaG9kbnkuXG4iCisKKyM6IGd1aV93MzIuYzo4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MzogQXJndW1lbnQgbm90IHN1cHBvcnRlZDogXCItJXNcIjsgVXNlIHRoZSBPTEUgdmVyc2lvbi4iCittc2dzdHIgIkUyNDM6IEFyZ3VtZW50IG5pZSBqZXN0IHdzcG9tYWdhbnk6IFwiLSVzXCI7IFW/eXdhaiB3ZXJzamkgT0xFLiIKKworIzogZ3VpX3c0OC5jOjIwOTAKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJabmFqZJ8gY2m5ZyAodb95aiAnXFxcXCcgZG8gc3p1a2FuaWEgJ1xcJykiCisKKyM6IGd1aV93NDguYzoyMTE1Cittc2dpZCAiRmluZCAmIFJlcGxhY2UgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAiU3p1a2FuaWUgaSBaYW1pYW5hICh1v3lqICdcXFxcJyBkbyBzenVrYW5pYSAnXFwnKSIKKworIzogZ3VpX3gxMS5jOjE1MzcKK21zZ2lkICJWaW0gRTQ1ODogQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0IgorbXNnc3RyICIiCisiVmltIEU0NTg6IE5pZSBtb2fqIHphcmV6ZXJ3b3dh5iBtYXB5IGtvbG9y83csIHBld25lIGtvbG9yeSBtb2e5IGJ55iAiCisibmllcHJhd2lks293ZSIKKworIzogZ3VpX3gxMS5jOjIxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MDogRm9udHMgZm9yIHRoZSBmb2xsb3dpbmcgY2hhcnNldHMgYXJlIG1pc3NpbmcgaW4gZm9udHNldCAlczoiCittc2dzdHIgIkUyNTA6IEJyYWsgY3pjaW9uZWsgZGxhIG5hc3TqcHVquWN5Y2ggemVzdGF383cgem5ha/N3IHcgemVzdGF3aWUgY3pjaW9uZWsgJXM6IgorCisjOiBndWlfeDExLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUyOiBGb250c2V0IG5hbWU6ICVzIgorbXNnc3RyICJFMjUyOiBOYXp3YSB6ZXN0YXd1IGN6Y2lvbmVrOiAlcyIKKworIzogZ3VpX3gxMS5jOjIxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCAnJXMnIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiQ3pjaW9ua2EgJyVzJyBuaWUgcG9zaWFkYSB6bmFr83cgamVkbm9saXRlaiBzemVyb2tvnGNpIgorCisjOiBndWlfeDExLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTM6IE5hendhIHplc3Rhd3UgY3pjaW9uZWs6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwOiAlc1xuIgorbXNnc3RyICJGb250MDogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDE6ICVzXG4iCittc2dzdHIgIkZvbnQxOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250JWQgd2lkdGggaXMgbm90IHR3aWNlIHRoYXQgb2YgZm9udDBcbiIKK21zZ3N0ciAic3plcm9rb5zmIGZvbnQlZCBuaWUgamVzdCBwb2R382puuSBzemVyb2tvnGNpuSBmb250MFxuIgorCisjOiBndWlfeDExLmM6MjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MCB3aWR0aDogJWxkXG4iCittc2dzdHIgIlN6ZXJva2+c5iBmb250MDogJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyJTemVyb2tvnOYgZm9udDE6ICVsZFxuIgorIlxuIgorCisjOiBoYW5ndWxpbi5jOjYxMAorbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKK21zZ3N0ciAiRTI1NjogQqOlRCB3IGF1dG9tYWNpZSBIYW5ndWwiCisKKyM6IGlmX2NzY29wZS5jOjc3Cittc2dpZCAiQWRkIGEgbmV3IGRhdGFiYXNlIgorbXNnc3RyICJEb2RhaiBub3e5IGJheuogZGFueWNoIgorCisjOiBpZl9jc2NvcGUuYzo3OQorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIlphcHl0YW5lIG8gd3pvcnplYyIKKworIzogaWZfY3Njb3BlLmM6ODEKK21zZ2lkICJTaG93IHRoaXMgbWVzc2FnZSIKK21zZ3N0ciAiUG9rYb8gdGVuIGtvbXVuaWthdCIKKworIzogaWZfY3Njb3BlLmM6ODMKK21zZ2lkICJLaWxsIGEgY29ubmVjdGlvbiIKK21zZ3N0ciAiWmFiaWogcG+zuWN6ZW5pZSIKKworIzogaWZfY3Njb3BlLmM6ODUKK21zZ2lkICJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIgorbXNnc3RyICJQb27zdyB3c3plbGtpZSBwb7O5Y3plbmlhIgorCisjOiBpZl9jc2NvcGUuYzo4NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIlBva2G/IHBvs7ljemVuaWEiCisKKyM6IGlmX2NzY29wZS5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjA6IFVzYWdlOiBjc1tjb3BlXSAlcyIKK21zZ3N0ciAiRTU2MDogWmFzdG9zb3dhbmllOiBjc1tjb3BlXSAlcyIKKworIzogaWZfY3Njb3BlLmM6MTI0Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICJUYSBrb21lbmRhIGNzY29wZSBuaWUgd3Nwb21hZ2EgcG9kemllbGVuaWEgb2tuYS5cbiIKKworIzogaWZfY3Njb3BlLmM6MTc1Cittc2dpZCAiRTU2MjogVXNhZ2U6IGNzdGFnIDxpZGVudD4iCittc2dzdHIgIkU1NjI6IFphc3Rvc293YW5pZTogY3N0YWcgPGlkZW50PiIKKworIzogaWZfY3Njb3BlLmM6MjMxCittc2dpZCAiRTI1NzogY3N0YWc6IHRhZyBub3QgZm91bmQiCittc2dzdHIgIkUyNTc6IGNzdGFnOiBuaWUgem5hbGV6aW9ubyB6bmFjem5pa2EiCisKKyM6IGlmX2NzY29wZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTYzOiBzdGF0KCVzKSBlcnJvcjogJWQiCittc2dzdHIgIkU1NjM6IHN0YXQoJXMpIGKzuWQ6ICVkIgorCisjOiBpZl9jc2NvcGUuYzo0MTkKK21zZ2lkICJFNTYzOiBzdGF0IGVycm9yIgorbXNnc3RyICJFNTYzOiBis7lkIHN0YXQiCisKKyM6IGlmX2NzY29wZS5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY0OiAlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIkU1NjQ6ICVzIG5pZSBqZXN0IGthdGFsb2dpZW0gbHViIHBvcHJhd265IGJherkgZGFueWNoIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGVkIGNzY29wZSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAiRG9kYW5vIGJheuogZGFueWNoIGNzY29wZSAlcyIKKworIzogaWZfY3Njb3BlLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNjI6IGVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWxkIgorbXNnc3RyICJFMjYyOiBis7lkIG9kY3p5dHUgcG+zuWN6ZW5pYSB6IGNzY29wZSAlbGQiCisKKyM6IGlmX2NzY29wZS5jOjY5NAorbXNnaWQgIkU1NjE6IHVua25vd24gY3Njb3BlIHNlYXJjaCB0eXBlIgorbXNnc3RyICJFNTYxOiBuaWV6bmFueSB0eXAgc3p1a2FuaWEgY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo3MzYKK21zZ2lkICJFNTY2OiBDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiRTU2NjogTmllIG1vZ7NlbSBzdHdvcnp55iBwb3Rva3UgZG8gY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo3NTMKK21zZ2lkICJFNjIyOiBDb3VsZCBub3QgZm9yayBmb3IgY3Njb3BlIgorbXNnc3RyICJFNjIyOiBOaWUgbW9ns2VtIHV0d29yennmIHJvendpZGxlbmlhIGRsYSBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjg0NyBpZl9jc2NvcGUuYzo4OTcKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIKK21zZ3N0ciAid3lrb25hbmllIGNzX2NyZWF0ZV9jb25uZWN0aW9uIG5pZSBwb3dpb2SzbyBzaeoiCisKKyM6IGlmX2NzY29wZS5jOjg5OAorbXNnaWQgIkU2MjM6IENvdWxkIG5vdCBzcGF3biBjc2NvcGUgcHJvY2VzcyIKK21zZ3N0ciAiRTYyMzogTmllIG1vZ7NlbSBzdHdvcnp55iBwcm9jZXN1IGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6OTExCittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGRsYSB0b19mcCBuaWUgcG93aW9ks28gc2nqIgorCisjOiBpZl9jc2NvcGUuYzo5MTMKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciBmcl9mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZGxhIGZyX2ZwIG5pZSBwb3dpb2SzbyBzaeoiCisKKyM6IGlmX2NzY29wZS5jOjk1MQorbXNnaWQgIkU1Njc6IG5vIGNzY29wZSBjb25uZWN0aW9ucyIKK21zZ3N0ciAiRTU2NzogYnJhayBwb7O5Y3plbmlhIHogY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTk6IG5vIG1hdGNoZXMgZm91bmQgZm9yIGNzY29wZSBxdWVyeSAlcyBvZiAlcyIKK21zZ3N0ciAiRTI1OTogYnJhayBkb3Bhc293YfEgZGxhIHphcHl0YW5pYSBjc2NvcGUgJXMgbyAlcyIKKworIzogaWZfY3Njb3BlLmM6MTA4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDY5OiBpbnZhbGlkIGNzY29wZXF1aWNrZml4IGZsYWcgJWMgZm9yICVjIgorbXNnc3RyICJFNDY5OiBuaWVwcmF3aWSzb3dhIGZsYWdhIGNzY29wZXF1aWNrZml4ICVjIGRsYSAlYyIKKworIzogaWZfY3Njb3BlLmM6MTE1MgorbXNnaWQgImNzY29wZSBjb21tYW5kczpcbiIKK21zZ3N0ciAia29tZW5keSBjc2NvcGU6XG4iCisKKyM6IGlmX2NzY29wZS5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS01czogJS0zMHMgKFVzYWdlOiAlcykiCittc2dzdHIgIiUtNXM6ICUtMzBzIChVv3ljaWU6ICVzKSIKKworIzogaWZfY3Njb3BlLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjI1OiBjYW5ub3Qgb3BlbiBjc2NvcGUgZGF0YWJhc2U6ICVzIgorbXNnc3RyICJFNjI1OiBuaWUgbW9n6iBvdHdvcnp55iBiYXp5IGRhbnljaCBjc2NvcGU6ICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMjcxCittc2dpZCAiRTYyNjogY2Fubm90IGdldCBjc2NvcGUgZGF0YWJhc2UgaW5mb3JtYXRpb24iCittc2dzdHIgIkU2MjY6IG5pZSBtb2fqIHV6eXNrYeYgaW5mb3JtYWNqaSB6IGJhenkgZGFueWNoIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MTI5NgorbXNnaWQgIkU1Njg6IGR1cGxpY2F0ZSBjc2NvcGUgZGF0YWJhc2Ugbm90IGFkZGVkIgorbXNnc3RyICJFNTY4OiBuaWUgZG9kYW5vIGR1cGxpa2F0dSBiYXp5IGRhbnljaCBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjEzMDcKK21zZ2lkICJFNTY5OiBtYXhpbXVtIG51bWJlciBvZiBjc2NvcGUgY29ubmVjdGlvbnMgcmVhY2hlZCIKK21zZ3N0ciAiRTU2OTogd3ljemVycGFubyBtYWtzeW1hbG65IGxpY3pi6iBwb7O5Y3pl8SBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjE0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiBuaWUgbWEgcG+zuWN6ZW5pYSAlcyB6IGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWQiCittc2dzdHIgInBvs7ljemVuaWUgJXMgeiBjc2NvcGUgem9zdGGzbyB6YW1rbmnqdGUiCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTU5OAorbXNnaWQgIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJFNTcwOiBis7lkIGtyeXR5Y3pueSB3IGNzX21hbmFnZV9tYXRjaGVzIgorCisjOiBpZl9jc2NvcGUuYzoxODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzIgorbXNnc3RyICJabmFjem5payBjc2NvcGU6ICVzIgorCisjOiBpZl9jc2NvcGUuYzoxODcwCittc2dpZCAiIgorIlxuIgorIiAgICMgICBsaW5lIgorbXNnc3RyICIiCisiXG4iCisiICAgIyAgIHdpZXJzeiIKKworIzogaWZfY3Njb3BlLmM6MTg3MgorbXNnaWQgImZpbGVuYW1lIC8gY29udGV4dCAvIGxpbmVcbiIKK21zZ3N0ciAibmF6d2EgcGxpa3UgIC8ga29udGVrc3QgLyB3aWVyc3pcbiIKKworIzogaWZfY3Njb3BlLmM6MTk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA5OiBDc2NvcGUgZXJyb3I6ICVzIgorbXNnc3RyICJFNjA5OiBCs7lkIGNzY29wZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjIxNzYKK21zZ2lkICJBbGwgY3Njb3BlIGRhdGFiYXNlcyByZXNldCIKK21zZ3N0ciAiV3N6eXN0a2llIGJhenkgZGFueWNoIGNzY29wZSBwcnpls2Fkb3dhbm8iCisKKyM6IGlmX2NzY29wZS5jOjIyNDQKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAiYnJhayBwb7O5Y3pl8SB6IGNzY29wZVxuIgorCisjOiBpZl9jc2NvcGUuYzoyMjQ4Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICBuYXp3YSBiYXp5IGRhbnljaCAgICAgICAgICAgICAgIHByemVkc2lvbmVrIHRyb3B1XG4iCisKKyM6IGlmX3B5dGhvbi5jOjQzNgorbXNnaWQgIiIKKyJFMjYzOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUHl0aG9uIGxpYnJhcnkgY291bGQgbm90IGJlICIKKyJsb2FkZWQuIgorbXNnc3RyICIiCisiRTI2MzogUHJ6eWtybyBtaSwgdGEga29tZW5kYSBqZXN0IHd5s7ljem9uYSwgYm8gbmllIG1vv25hIHphs2Fkb3dh5iAiCisiYmlibGlvdGVraSBQeXRob25hIgorCisjOiBpZl9weXRob24uYzo1MDAKK21zZ2lkICJFNjU5OiBDYW5ub3QgaW52b2tlIFB5dGhvbiByZWN1cnNpdmVseSIKK21zZ3N0ciAiRTY1OTogTmllIG1vv25hIHd5d2+zYeYgUHl0aG9uYSByZWt1cnN5d25pZSIKKworIzogaWZfcHl0aG9uLmM6NzAxCittc2dpZCAiY2FuJ3QgZGVsZXRlIE91dHB1dE9iamVjdCBhdHRyaWJ1dGVzIgorbXNnc3RyICJuaWUgbW9n6iBza2Fzb3dh5iBhdHJ5YnV083cgT3V0cHV0T2JqZWN0IgorCisjOiBpZl9weXRob24uYzo3MDgKK21zZ2lkICJzb2Z0c3BhY2UgbXVzdCBiZSBhbiBpbnRlZ2VyIgorbXNnc3RyICJzb2Z0c3BhY2UgbXVzaSBieeYgbGljemK5IGNhs2tvd2l0uSIKKworIzogaWZfcHl0aG9uLmM6NzE2Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUiCittc2dzdHIgIm5pZXBvcHJhd255IGF0cnlidXQiCisKKyM6IGlmX3B5dGhvbi5jOjc1NSBpZl9weXRob24uYzo3NjkKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkgd3ltYWdhIGxpc3R5IGNpuWfzdyIKKworIzogaWZfcHl0aG9uLmM6ODk1Cittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjogQrO5ZCB3IGluaWNqYWxpemFjamkgb2JpZWt083cgSS9PIgorCisjOiBpZl9weXRob24uYzoxMDgwIGlmX3RjbC5jOjE0MDIKK21zZ2lkICJpbnZhbGlkIGV4cHJlc3Npb24iCittc2dzdHIgIm5pZXBvcHJhd25lIHd5cmG/ZW5pZSIKKworIzogaWZfcHl0aG9uLmM6MTA5NCBpZl90Y2wuYzoxNDA3Cittc2dpZCAiZXhwcmVzc2lvbnMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICJ3eXJhv2VuaWEgd3mzuWN6b25lIHBvZGN6YXMga29tcGlsYWNqaSIKKworIzogaWZfcHl0aG9uLmM6MTEwNworbXNnaWQgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCBidWZmZXIiCittc2dzdHIgInBy82JhIG9kbmllc2llbmlhIGRvIHNrYXNvd2FuZWdvIGJ1Zm9yYSIKKworIzogaWZfcHl0aG9uLmM6MTEyMiBpZl9weXRob24uYzoxMTYzIGlmX3B5dGhvbi5jOjEyMjcgaWZfdGNsLmM6MTIxNAorbXNnaWQgImxpbmUgbnVtYmVyIG91dCBvZiByYW5nZSIKK21zZ3N0ciAibnVtZXIgd2llcnN6YSBwb3phIHpha3Jlc2VtIgorCisjOiBpZl9weXRob24uYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIjxidWZmZXIgb2JqZWN0IChkZWxldGVkKSBhdCAlOGxYPiIKK21zZ3N0ciAiPG9iaWVrdCBidWZvcmEgKHNrYXNvd2FueSkgdyAlOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTQ1MyBpZl90Y2wuYzo4MzYKK21zZ2lkICJpbnZhbGlkIG1hcmsgbmFtZSIKK21zZ3N0ciAibmllcG9wcmF3bmEgbmF6d2EgemFrs2Fka2kiCisKKyM6IGlmX3B5dGhvbi5jOjE3MzMKK21zZ2lkICJubyBzdWNoIGJ1ZmZlciIKK21zZ3N0ciAibmllIG1hIHRha2llZ28gYnVmb3JhIgorCisjOiBpZl9weXRob24uYzoxODIxCittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIHdpbmRvdyIKK21zZ3N0ciAicHLzYmEgb2RuaWVzaWVuaWEgZG8gc2thc293YW5lZ28gb2tuYSIKKworIzogaWZfcHl0aG9uLmM6MTg2NgorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXRyeWJ1dCB0eWxrbyBkbyBvZGN6eXR1IgorCisjOiBpZl9weXRob24uYzoxODc5Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICJwb3p5Y2phIGt1cnNvcmEgcG96YSBidWZvcmVtIgorCisjOiBpZl9weXRob24uYzoxOTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0IChkZWxldGVkKSBhdCAlLjhsWD4iCittc2dzdHIgIjxvYmlla3Qgb2tuYSAoc2thc293YW55KSB3ICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTk2OAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IgorbXNnc3RyICI8b2JpZWt0IG9rbmEgKG5pZXpuYW55KSB3ICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93ICVkPiIKK21zZ3N0ciAiPG9rbm8gJWQ+IgorCisjOiBpZl9weXRob24uYzoyMDQ2Cittc2dpZCAibm8gc3VjaCB3aW5kb3ciCittc2dzdHIgIm5pZSBtYSB0YWtpZWdvIG9rbmEiCisKKyM6IGlmX3B5dGhvbi5jOjIzMDcgaWZfcHl0aG9uLmM6MjM0MSBpZl9weXRob24uYzoyMzk2IGlmX3B5dGhvbi5jOjI0NjQKKyM6IGlmX3B5dGhvbi5jOjI1ODYgaWZfcHl0aG9uLmM6MjYzOCBpZl90Y2wuYzo2ODQgaWZfdGNsLmM6NzI5IGlmX3RjbC5jOjgwMworIzogaWZfdGNsLmM6ODczIGlmX3RjbC5jOjE5OTkKK21zZ2lkICJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICJuaWUgbW9n6iB6YWNob3dh5iBpbmZvcm1hY2ppIGNvZmFuaWEiCisKKyM6IGlmX3B5dGhvbi5jOjIzMDkgaWZfcHl0aG9uLmM6MjQwMyBpZl9weXRob24uYzoyNDc1Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBsaW5lIgorbXNnc3RyICJuaWUgbW9n6iBza2Fzb3dh5iB3aWVyc3phIgorCisjOiBpZl9weXRob24uYzoyMzQ2IGlmX3B5dGhvbi5jOjI0OTEgaWZfdGNsLmM6NjkwIGlmX3RjbC5jOjIwMjEKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICJuaWUgbW9n6iB6YW1pZW5p5iB3aWVyc3phIgorCisjOiBpZl9weXRob24uYzoyNTA5IGlmX3B5dGhvbi5jOjI1ODggaWZfcHl0aG9uLmM6MjY0NgorbXNnaWQgImNhbm5vdCBpbnNlcnQgbGluZSIKK21zZ3N0ciAibmllIG1vZ+ogd3Byb3dhZHpp5iB3aWVyc3phIgorCisjOiBpZl9weXRob24uYzoyNzUwCittc2dpZCAic3RyaW5nIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJjablnIG5pZSBtb79lIHphd2llcmHmIHpuYWvzdyBub3dlZ28gd2llcnN6YSIKKworIzogaWZfcnVieS5jOjQyMgorbXNnaWQgIkUyNjY6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBSdWJ5IGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjYzOiBQcnp5a3JvIG1pLCB0YSBrb21lbmRhIGplc3Qgd3mzuWN6b25hLCBibyBuaWUgbW+/bmEgemGzYWRvd2HmICIKKyJiaWJsaW90ZWtpIFJ1YnkuIgorCisjOiBpZl9ydWJ5LmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzM6IHVua25vd24gbG9uZ2ptcCBzdGF0dXMgJWQiCittc2dzdHIgIkUyNzM6IE5pZXpuYW55IHN0YXR1cyBsb25nam1wICVkIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIlByemWzuWN6IG1p6mR6eSBpbXBsZW1lbnRhY2q5L29rcmWcbGVuaWVtIgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICJQb2thvyBiYXrqIGtsYXN5IgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAiUG9rYb8gcHJ6ZXBpc2FuuSBmdW5rY2rqIGN6s29ua293uSIKKworIzogaWZfc25pZmYuYzo3MAorbXNnaWQgIlJldHJpZXZlIGZyb20gZmlsZSIKK21zZ3N0ciAiUG9iaWVyYWogeiBwbGlrdSIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAiUG9iaWVyYWogeiBwcm9qZWt0dSIKKworIzogaWZfc25pZmYuYzo3MworbXNnaWQgIlJldHJpZXZlIGZyb20gYWxsIHByb2plY3RzIgorbXNnc3RyICJQb2JpZXJhaiB6IHdzenlzdGtpY2ggcHJvamVrdPN3IgorCisjOiBpZl9zbmlmZi5jOjc0Cittc2dpZCAiUmV0cmlldmUiCittc2dzdHIgIlBvYmllcnoiCisKKyM6IGlmX3NuaWZmLmM6NzUKK21zZ2lkICJTaG93IHNvdXJjZSBvZiIKK21zZ3N0ciAiUG9rYb8gn3LzZLNvIGRsYSIKKworIzogaWZfc25pZmYuYzo3NgorbXNnaWQgIkZpbmQgc3ltYm9sIgorbXNnc3RyICJabmFqZJ8gc3ltYm9sIgorCisjOiBpZl9zbmlmZi5jOjc3Cittc2dpZCAiQnJvd3NlIGNsYXNzIgorbXNnc3RyICJQcnplanJ6eWoga2xhc+oiCisKKyM6IGlmX3NuaWZmLmM6NzgKK21zZ2lkICJTaG93IGNsYXNzIGluIGhpZXJhcmNoeSIKK21zZ3N0ciAiUG9rYb8ga2xhc+ogdyBoaWVyYXJjaGlpIgorCisjOiBpZl9zbmlmZi5jOjc5Cittc2dpZCAiU2hvdyBjbGFzcyBpbiByZXN0cmljdGVkIGhpZXJhcmNoeSIKK21zZ3N0ciAiUG9rYb8ga2xhc+ogdyBvZ3Jhbmljem9uZWogaGllcmFyY2hpaSIKKworIzogaWZfc25pZmYuYzo4MAorbXNnaWQgIlhyZWYgcmVmZXJzIHRvIgorbXNnc3RyICJYcmVmIG9kbm9zaSBzaeogZG8iCisKKyM6IGlmX3NuaWZmLmM6ODEKK21zZ2lkICJYcmVmIHJlZmVycmVkIGJ5IgorbXNnc3RyICJYcmVmIG1hIG9kbmllc2llbmlhIG9kIgorCisjOiBpZl9zbmlmZi5jOjgyCittc2dpZCAiWHJlZiBoYXMgYSIKK21zZ3N0ciAiWHJlZiBtYSIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiB1v3l0ZSBwcnpleiIKKworIzogaWZfc25pZmYuYzo4NAorbXNnaWQgIlNob3cgZG9jdSBvZiIKK21zZ3N0ciAiUG9rYb8gZG9rdW1lbnRhY2rqIGRsYSIKKworIzogaWZfc25pZmYuYzo4NQorbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgorbXNnc3RyICJXeWdlbmVydWogZG9rdW1lbnRhY2rqIGRsYSIKKworIzogaWZfc25pZmYuYzo5NworbXNnaWQgIiIKKyJDYW5ub3QgY29ubmVjdCB0byBTTmlGRisuIENoZWNrIGVudmlyb25tZW50IChzbmlmZmVtYWNzIG11c3QgYmUgZm91bmQgaW4gIgorIiRQQVRIKS5cbiIKK21zZ3N0ciAiIgorIk5pZSBtb2fqIHBvZLO5Y3p55iBkbyBTTmlGRisuIFNwcmF3ZJ8gnHJvZG93aXNrbyAoc25pZmZlbWFjcyBtdXNpIGJ55iAiCisib2RuYWxlemlvbnkgdyAkUEFUSCkuXG4iCisKKyM6IGlmX3NuaWZmLmM6NDI1Cittc2dpZCAiRTI3NDogU25pZmY6IEVycm9yIGR1cmluZyByZWFkLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIkUyNzQ6IFNuaWZmOiBCs7lkIHBvZGN6YXMgY3p5dGFuaWEuIFJverO5Y3plbmllIgorCisjOiBpZl9zbmlmZi5jOjU1MworbXNnaWQgIlNOaUZGKyBpcyBjdXJyZW50bHkgIgorbXNnc3RyICJTTmlGRisgamVzdCBvYmVjbmllICIKKworIzogaWZfc25pZmYuYzo1NTUKK21zZ2lkICJub3QgIgorbXNnc3RyICJuaWUgIgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAicG9ks7ljem9ueSIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6IE5pZXpuYW5lIHphcHl0YW5pZSBTTmlGRis6ICVzIgorCisjOiBpZl9zbmlmZi5jOjYwNQorbXNnaWQgIkUyNzY6IEVycm9yIGNvbm5lY3RpbmcgdG8gU05pRkYrIgorbXNnc3RyICJFMjc2OiBCs7lkIHcgdHJha2NpZSBwb2SzuWN6YW5pYSBkbyBTTmlGRisiCisKKyM6IGlmX3NuaWZmLmM6MTAwOQorbXNnaWQgIkUyNzg6IFNOaUZGKyBub3QgY29ubmVjdGVkIgorbXNnc3RyICJFMjc4OiBTTmlGRisgbmllcG9ks7ljem9ueSIKKworIzogaWZfc25pZmYuYzoxMDE4Cittc2dpZCAiRTI3OTogTm90IGEgU05pRkYrIGJ1ZmZlciIKK21zZ3N0ciAiRTI3OTogTmllIGplc3QgYnVmb3JlbSBTTmlGRisiCisKKyM6IGlmX3NuaWZmLmM6MTA4MworbXNnaWQgIlNuaWZmOiBFcnJvciBkdXJpbmcgd3JpdGUuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiU25pZmY6IEKzuWQgdyB0cmFrY2llIHphcGlzdS4gUm96s7ljem9ueSIKKworIzogaWZfdGNsLmM6NDE4Cittc2dpZCAiaW52YWxpZCBidWZmZXIgbnVtYmVyIgorbXNnc3RyICJuaWV3s2GcY2l3eSBudW1lciBidWZvcmEiCisKKyM6IGlmX3RjbC5jOjQ2NCBpZl90Y2wuYzo5MzEgaWZfdGNsLmM6MTExMAorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIm9iZWNuaWUgbmllIHphaW1wbGVtZW50b3dhbm8iCisKKyM6IGlmX3RjbC5jOjUwMQorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJuaWV6bmFuYSBvcGNqYSIKKworIy4gPz8/CisjOiBpZl90Y2wuYzo3NzQKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgIm5pZSBtb2fqIHVzdGF3aeYgd2llcnN6YSh5KSIKKworIzogaWZfdGNsLmM6ODQ1Cittc2dpZCAibWFyayBub3Qgc2V0IgorbXNnc3RyICJ6YWuzYWRrYSBuaWUgdXN0YXdpb25hIgorCisjOiBpZl90Y2wuYzo4NTEgaWZfdGNsLmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJyb3cgJWQgY29sdW1uICVkIgorbXNnc3RyICJ3aWVyc3ogJWQga29sdW1uYSAlZCIKKworIzogaWZfdGNsLmM6ODgxCittc2dpZCAiY2Fubm90IGluc2VydC9hcHBlbmQgbGluZSIKK21zZ3N0ciAibmllIG1vZ+ogd3Byb3dhZHpp5i9kb7O5Y3p55iB3aWVyc3phIgorCisjOiBpZl90Y2wuYzoxMjY4Cittc2dpZCAidW5rbm93biBmbGFnOiAiCittc2dzdHIgIm5pZXpuYW5hIGZsYWdhOiAiCisKKyM6IGlmX3RjbC5jOjEzMzgKK21zZ2lkICJ1bmtub3duIHZpbU9wdGlvbiIKK21zZ3N0ciAibmllem5hbmUgdmltT3B0aW9uIgorCisjOiBpZl90Y2wuYzoxNDIzCittc2dpZCAia2V5Ym9hcmQgaW50ZXJydXB0IgorbXNnc3RyICJwcnplcndhbmllIGtsYXdpYXR1cnkiCisKKyM6IGlmX3RjbC5jOjE0MjgKK21zZ2lkICJ2aW0gZXJyb3IiCittc2dzdHIgImKzuWQgdmltYSIKKworIzogaWZfdGNsLmM6MTQ3MQorbXNnaWQgImNhbm5vdCBjcmVhdGUgYnVmZmVyL3dpbmRvdyBjb21tYW5kOiBvYmplY3QgaXMgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAibmllIG1vZ+ogc3R3b3J6eeYgYnVmb3JhL29rbmEga29tZW5keTogb2JpZWt0IGplc3Qga2Fzb3dhbnkiCisKKyM6IGlmX3RjbC5jOjE1NDUKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyBpcyBhbHJlYWR5IGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIiIKKyJuaWUgbW9n6iB6YXJlamVzdHJvd2HmIHdzdGVjem5lZ28gd3l3b7NhbmlhIGtvbWVuZHk6IGJ1Zm9yL29rbm8ganW/IHpvc3Rhs2EgIgorInNrYXNvd2FuYSIKKworIy4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgRmFtb3VzIGxhc3Qgd29yZD8KKyM6IGlmX3RjbC5jOjE1NjIKK21zZ2lkICIiCisiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IGNvcnJ1cHQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0uIgorIm9yZyIKK21zZ3N0ciAiIgorIkUyODA6IFRDTCBGQVRBTE5ZIEKjpUQ6IHJlZmxpc3QgemVwc3V0YSE/IFByb3N66iB6s2+/eeYgcmFwb3J0IG8gdHltIG5hIHZpbS0iCisiZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjE1NjMKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisibmllIG1vZ+ogemFyZWplc3Ryb3dh5iB3c3RlY3puZWdvIHd5d2+zYW5pYSBrb21lbmR5OiBicmFrIG9kbmllc2llbmlhIGRvICIKKyJidWZvcmEvb2tuYSIKKworIzogaWZfdGNsLmM6MTcyNAorbXNnaWQgIkU1NzE6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBUY2wgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiUHJ6eWtybyBtaSwgdGEga29tZW5kYSBqZXN0IHd5s7ljem9uYSwgYm8gbmllIG1vv25hIHphs2Fkb3dh5iBiaWJsaW90ZWtpIFRjbC4iCisKKyM6IGlmX3RjbC5jOjE4ODYKK21zZ2lkICJFMjgxOiBUQ0wgRVJST1I6IGV4aXQgY29kZSBpcyBub3QgaW50IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLm9yZyIKK21zZ3N0ciAiIgorIkUyODE6IEKjpUQgVENMOiBrb2QgemFrb/FjemVuaW93eSBuaWUgamVzdCBjYbNrb3dpdHkhPyBQcm9zeuogerNvv3nmIHJhcG9ydCAiCisibyB0eW0gbmEgdmltLWRldkB2aW0ub3JnIgorCisjOiBpZl90Y2wuYzoyMDA3Cittc2dpZCAiY2Fubm90IGdldCBsaW5lIgorbXNnc3RyICJuaWUgbW9n6iBkb3N0YeYgd2llcnN6YSIKKworIzogaWZfeGNtZHNydi5jOjIyNQorbXNnaWQgIlVuYWJsZSB0byByZWdpc3RlciBhIGNvbW1hbmQgc2VydmVyIG5hbWUiCittc2dzdHIgIk5pZSBtb2fqIHphcmVqZXN0cm93YeYgbmF6d3kgc2Vyd2VyYSBrb21lbmQiCisKKyM6IGlmX3hjbWRzcnYuYzo0NzMKK21zZ2lkICJFMjQ4OiBGYWlsZWQgdG8gc2VuZCBjb21tYW5kIHRvIHRoZSBkZXN0aW5hdGlvbiBwcm9ncmFtIgorbXNnc3RyICJFMjQ4OiBXeXOzYW5pZSBrb21lbmR5IGRvIHByb2dyYW11IGRvY2Vsb3dlZ28gbmllIHBvd2lvZLNvIHNp6iIKKworIzogaWZfeGNtZHNydi5jOjc0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNTczOiBJbnZhbGlkIHNlcnZlciBpZCB1c2VkOiAlcyIKK21zZ3N0ciAiRTU3MzogVb95dG8gbmlld7NhnGNpd2VnbyBpZCBzZXJ3ZXJhOiAlcyIKKworIzogaWZfeGNtZHNydi5jOjExMTAKK21zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCittc2dzdHIgIkUyNTE6IHdjaWVsZW5pYSBpbnN0YW5jamkgcmVqZXN0cnUgVmltYSBqZXN0IJ9sZSBzZm9ybW93YW5lLiAgU2thc293YW5vISIKKworIzogbWFpbi5jOjYwCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk5pZXpuYW5hIG9wY2phIgorCisjOiBtYWluLmM6NjIKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAiWmJ5dCB3aWVsZSBhcmd1bWVudPN3IgorCisjOiBtYWluLmM6NjQKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICJCcmFrIGFyZ3VtZW50dSBwbyIKKworIzogbWFpbi5jOjY2Cittc2dpZCAiR2FyYmFnZSBhZnRlciBvcHRpb24iCittc2dzdHIgIoxtaWVjaWUgcG8gb3BjamkiCisKKyM6IG1haW4uYzo2OAorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiwgXCItYyBjb21tYW5kXCIgb3IgXCItLWNtZCBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICJaYnl0IHdpZWxlIGFyZ3VtZW5083cgXCIra29tZW5kYVwiLCBcIi1jIGtvbWVuZGFcIiBsdWIgXCItLWNtZCBrb21lbmRhXCIiCisKKyM6IG1haW4uYzo3MAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgZm9yIgorbXNnc3RyICJOaWV3s2GcY2l3eSBhcmd1bWVudCBkbGEiCisKKyM6IG1haW4uYzo0NjYKK21zZ2lkICJUaGlzIFZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlIGRpZmYgZmVhdHVyZS4iCittc2dzdHIgIlRhIHdlcnNqYSBWaW1hIG5pZSBiebNhIHNrb21waWxvd2FuZWdvIHogb3BjarkgcvO/bmljIChkaWZmKS4iCisKKyM6IG1haW4uYzo5MzIKK21zZ2lkICJBdHRlbXB0IHRvIG9wZW4gc2NyaXB0IGZpbGUgYWdhaW46IFwiIgorbXNnc3RyICJQcvNiYSBwb25vd25lZ28gb3R3b3J6ZW5pYSBwbGlrdSBza3J5cHR1OiBcIiIKKworIzogbWFpbi5jOjk0MQorbXNnaWQgIkNhbm5vdCBvcGVuIGZvciByZWFkaW5nOiBcIiIKK21zZ3N0ciAiTmllIG1vZ+ogb3R3b3J6eeYgZG8gb2Rjenl0dTogXCIiCisKKyM6IG1haW4uYzo5ODUKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIk5pZSBtb2fqIG90d29yennmIGRsYSB3eWqcY2lhIHNrcnlwdHU6IFwiIgorCisjOiBtYWluLmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmaWxlcyB0byBlZGl0XG4iCittc2dzdHIgIiVkIHBsaWvzdyBkbyBlZHljamlcbiIKKworIzogbWFpbi5jOjEyMzMKK21zZ2lkICJWaW06IFdhcm5pbmc6IE91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IE9TVFJaRa9FTklFOiBXeWqcY2llIG5pZSBqZXN0IHRlcm1pbmFsZW1cbiIKKworIzogbWFpbi5jOjEyMzUKK21zZ2lkICJWaW06IFdhcm5pbmc6IElucHV0IGlzIG5vdCBmcm9tIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiBPU1RSWkWvRU5JRTogV2VqnGNpZSBuaWUgcG9jaG9kemkgeiB0ZXJtaW5hbGFcbiIKKworIy4ganVzdCBpbiBjYXNlLi4KKyM6IG1haW4uYzoxMjk3Cittc2dpZCAicHJlLXZpbXJjIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAibGluaWEgcG9sZWNl8SBwcmUtdmltcmMiCisKKyM6IG1haW4uYzoxMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODI6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjgyOiBOaWUgbW9n6iBjenl0YeYgeiBcIiVzXCIiCisKKyM6IG1haW4uYzoyNDExCittc2dpZCAiIgorIlxuIgorIk1vcmUgaW5mbyB3aXRoOiBcInZpbSAtaFwiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEYWxzemUgaW5mb3JtYWNqZSBwb3ByemV6OiBcInZpbSAtaFwiXG4iCisKKyM6IG1haW4uYzoyNDQ0Cittc2dpZCAiW2ZpbGUgLi5dICAgICAgIGVkaXQgc3BlY2lmaWVkIGZpbGUocykiCittc2dzdHIgIltwbGlrIC4uXSAgICAgICBlZHl0dWogemFkYW5lIHBsaWtpIgorCisjOiBtYWluLmM6MjQ0NQorbXNnaWQgIi0gICAgICAgICAgICAgICByZWFkIHRleHQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiLSAgICAgICAgICAgICAgIGN6eXRhaiB0ZWtzdCB6ZSBzdGRpbiIKKworIzogbWFpbi5jOjI0NDYKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCB6bmFjem5payAgIGVkeXR1aiBwbGlrLCB3IGt083J5bSBkYW55IHpuYWN6bmlrIGplc3QgemRlZmluaW93YW55IgorCisjOiBtYWluLmM6MjQ0OAorbXNnaWQgIi1xIFtlcnJvcmZpbGVdICBlZGl0IGZpbGUgd2l0aCBmaXJzdCBlcnJvciIKK21zZ3N0ciAiLXEgW2Vycm9yZmlsZV0gIGVkeXR1aiBwbGlrLCB6YXdpZXJharljeSBwaWVyd3N6eSBis7lkIgorCisjOiBtYWluLmM6MjQ1NworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJ1c2FnZToiCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJ1v3ljaWU6IgorCisjOiBtYWluLmM6MjQ2MAorbXNnaWQgIiB2aW0gW2FyZ3VtZW50c10gIgorbXNnc3RyICIgdmltIFthcmd1bWVudHldIgorCisjOiBtYWluLmM6MjQ2NAorbXNnaWQgIiIKKyJcbiIKKyIgICBvcjoiCittc2dzdHIgIiIKKyJcbiIKKyIgICBsdWI6IgorCisjOiBtYWluLmM6MjQ2NworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHk6XG4iCisKKyM6IG1haW4uYzoyNDY4Cittc2dpZCAiLS1cdFx0XHRPbmx5IGZpbGUgbmFtZXMgYWZ0ZXIgdGhpcyIKK21zZ3N0ciAiLS1cdFx0XHRUeWxrbyBuYXp3eSBwbGlr83cgcG8gdHltIgorCisjOiBtYWluLmM6MjQ3MAorbXNnaWQgIi0tbGl0ZXJhbFx0XHREb24ndCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICItLWxpdGVyYWxcdFx0TmllIHJvendpamFqIHpuYWvzdyBzcGVjamFsbnljaCIKKworIzogbWFpbi5jOjI0NzMKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHRaYXJlamVzdHJ1aiB0ZWdvIGd2aW1hIHcgT0xFIgorCisjOiBtYWluLmM6MjQ3NAorbXNnaWQgIi11bnJlZ2lzdGVyXHRcdFVucmVnaXN0ZXIgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItdW5yZWdpc3Rlclx0XHRXeXJlamVzdHJ1aiBndmltYSB6IE9MRSIKKworIzogbWFpbi5jOjI0NzcKK21zZ2lkICItZ1x0XHRcdFJ1biB1c2luZyBHVUkgKGxpa2UgXCJndmltXCIpIgorbXNnc3RyICItZ1x0XHRcdFN0YXJ0dWogdyBHVUkgKHRhayBqYWsgXCJndmltXCIpIgorCisjOiBtYWluLmM6MjQ3OAorbXNnaWQgIi1mICBvciAgLS1ub2ZvcmtcdEZvcmVncm91bmQ6IERvbid0IGZvcmsgd2hlbiBzdGFydGluZyBHVUkiCittc2dzdHIgIi1mICBsdWIgLS1ub2ZvcmtcdFBpZXJ3c3p5IHBsYW46IE5pZSB3eWR6aWVsYWogcHJ6eSBvZHBhbGFuaXUgR1VJIgorCisjOiBtYWluLmM6MjQ4MAorbXNnaWQgIi12XHRcdFx0VmkgbW9kZSAobGlrZSBcInZpXCIpIgorbXNnc3RyICItdlx0XHRcdFRyeWIgdmkgKGphayBcInZpXCIpIgorCisjOiBtYWluLmM6MjQ4MQorbXNnaWQgIi1lXHRcdFx0RXggbW9kZSAobGlrZSBcImV4XCIpIgorbXNnc3RyICItZVx0XHRcdFRyeWIgZXggKGphayBcImV4XCIpIgorCisjOiBtYWluLmM6MjQ4MgorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHRDaWNoeSB0cnliICh0s2EpICh0eWxrbyBkbGEgXCJleFwiKSIKKworIzogbWFpbi5jOjI0ODQKK21zZ2lkICItZFx0XHRcdERpZmYgbW9kZSAobGlrZSBcInZpbWRpZmZcIikiCittc2dzdHIgIi1kXHRcdFx0VHJ5YiBy879uaWMgKGphayBcInZpbWRpZmZcIikiCisKKyM6IG1haW4uYzoyNDg2Cittc2dpZCAiLXlcdFx0XHRFYXN5IG1vZGUgKGxpa2UgXCJldmltXCIsIG1vZGVsZXNzKSIKK21zZ3N0ciAiLXlcdFx0XHRUcnliILNhdHd5IChqYWsgXCJldmltXCIsIGJleiB0cnli83cpIgorCisjOiBtYWluLmM6MjQ4NworbXNnaWQgIi1SXHRcdFx0UmVhZG9ubHkgbW9kZSAobGlrZSBcInZpZXdcIikiCittc2dzdHIgIi1SXHRcdFx0VHJ5YiB3ebO5Y3puaWUgZG8gb2Rjenl0dSAoamFrIFwidmlld1wiKSIKKworIzogbWFpbi5jOjI0ODgKK21zZ2lkICItWlx0XHRcdFJlc3RyaWN0ZWQgbW9kZSAobGlrZSBcInJ2aW1cIikiCittc2dzdHIgIi1aXHRcdFx0VHJ5YiBvZ3JhbmljemVuaWEgKGphayBcInJ2aW1cIikiCisKKyM6IG1haW4uYzoyNDg5Cittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHRNb2R5ZmlrYWNqZSAoemFwaXN5d2FuaWUgcGxpa/N3KSBuaWVkb3p3b2xvbmUiCisKKyM6IG1haW4uYzoyNDkwCittc2dpZCAiLU1cdFx0XHRNb2RpZmljYXRpb25zIGluIHRleHQgbm90IGFsbG93ZWQiCittc2dzdHIgIi1NXHRcdFx0WmFrYXogbW9keWZpa2FjamkgdGVrc3R1IgorCisjOiBtYWluLmM6MjQ5MQorbXNnaWQgIi1iXHRcdFx0QmluYXJ5IG1vZGUiCittc2dzdHIgIi1iXHRcdFx0VHJ5YiBiaW5hcm55IgorCisjOiBtYWluLmM6MjQ5MworbXNnaWQgIi1sXHRcdFx0TGlzcCBtb2RlIgorbXNnc3RyICItbFx0XHRcdFRyeWIgbGlzcCIKKworIzogbWFpbi5jOjI0OTUKK21zZ2lkICItQ1x0XHRcdENvbXBhdGlibGUgd2l0aCBWaTogJ2NvbXBhdGlibGUnIgorbXNnc3RyICItQ1x0XHRcdEK5ZJ8gemdvZG55IHogVmk6ICdjb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjI0OTYKK21zZ2lkICItTlx0XHRcdE5vdCBmdWxseSBWaSBjb21wYXRpYmxlOiAnbm9jb21wYXRpYmxlJyIKK21zZ3N0ciAiLU5cdFx0XHRCuWSfIG5pZXp1cGWzbmllIHpnb2RueSB6IFZpOiAnbm9jb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjI0OTcKK21zZ2lkICItVltOXVx0XHRWZXJib3NlIGxldmVsIgorbXNnc3RyICItVltOXVx0XHRTdG9waWXxIGdhZGF0bGl3b5xjaSIKKworIzogbWFpbi5jOjI0OTgKK21zZ2lkICItRFx0XHRcdERlYnVnZ2luZyBtb2RlIgorbXNnc3RyICItRFx0XHRcdFRyeWIgb2RwbHVza3dpYW5pYSIKKworIzogbWFpbi5jOjI0OTkKK21zZ2lkICItblx0XHRcdE5vIHN3YXAgZmlsZSwgdXNlIG1lbW9yeSBvbmx5IgorbXNnc3RyICItblx0XHRcdFphbWlhc3QgcGxpa3Ugd3ltaWFueSwgdb95d2FqIHR5bGtvIHBhbWnqY2kiCisKKyM6IG1haW4uYzoyNTAwCittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0V3lsaWN6IHBsaWtpIHd5bWlhbnkgaSB6YWtv8WN6IgorCisjOiBtYWluLmM6MjUwMQorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciAoeiBuYXp3uSBwbGlrdSlcdE9kdHfzcnogemGzYW1hbrkgc2VzauoiCisKKyM6IG1haW4uYzoyNTAyCittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRcdFRvv3NhbWUgeiAtciIKKworIzogbWFpbi5jOjI1MDQKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdFx0TmllIHN0b3N1aiBuZXdjbGkgZG8gb3R3aWVyYW5pYSBva2llbiIKKworIzogbWFpbi5jOjI1MDUKK21zZ2lkICItZGV2IDxkZXZpY2U+XHRcdFVzZSA8ZGV2aWNlPiBmb3IgSS9PIgorbXNnc3RyICItZGV2IDxkZXZpY2U+XHRcdFW/eXdhaiA8ZGV2aWNlPiBkbyBJL08iCisKKyM6IG1haW4uYzoyNTA4Cittc2dpZCAiLUFcdFx0XHRzdGFydCBpbiBBcmFiaWMgbW9kZSIKK21zZ3N0ciAiLUFcdFx0XHRyb3pwb2N6bmlqIHcgdHJ5YmllIGFyYWJza2ltIgorCisjOiBtYWluLmM6MjUxMQorbXNnaWQgIi1IXHRcdFx0U3RhcnQgaW4gSGVicmV3IG1vZGUiCittc2dzdHIgIi1IXHRcdFx0cm96cG9jem5paiB3IHRyeWJpZSBoZWJyYWpza2ltIgorCisjOiBtYWluLmM6MjUxNAorbXNnaWQgIi1GXHRcdFx0U3RhcnQgaW4gRmFyc2kgbW9kZSIKK21zZ3N0ciAiLUZcdFx0XHRyb3pwb2N6bmlqIHcgdHJ5YmllIGZhcnNpIgorCisjOiBtYWluLmM6MjUxNgorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW5hbD5cdFVzdGF3IHR5cCB0ZXJtaW5hbGEgbmEgPHRlcm1pbmFsPiIKKworIzogbWFpbi5jOjI1MTcKK21zZ2lkICItdSA8dmltcmM+XHRcdFVzZSA8dmltcmM+IGluc3RlYWQgb2YgYW55IC52aW1yYyIKK21zZ3N0ciAiLXUgPHZpbXJjPlx0XHRVv3lqIDx2aW1yYz4gemFtaWFzdCBqYWtpZWdva29sd2llayAudmltcmMiCisKKyM6IG1haW4uYzoyNTE5Cittc2dpZCAiLVUgPGd2aW1yYz5cdFx0VXNlIDxndmltcmM+IGluc3RlYWQgb2YgYW55IC5ndmltcmMiCittc2dzdHIgIi1VIDxndmltcmM+XHRcdFW/eWogPGd2aW1yYz4gemFtaWFzdCBqYWtpZWdva29sd2llayAuZ3ZpbXJjIgorCisjOiBtYWluLmM6MjUyMQorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHROaWUgs2FkdWogc2tyeXB083cgd3R5Y3playIKKworIzogbWFpbi5jOjI1MjIKK21zZ2lkICItb1tOXVx0XHRPcGVuIE4gd2luZG93cyAoZGVmYXVsdDogb25lIGZvciBlYWNoIGZpbGUpIgorbXNnc3RyICItb1tOXVx0XHRPdHfzcnogTiBva2llbiAoZG9teZxsbmllOiBwbyBqZWRueW0gZGxhIGthv2RlZ28gcGxpa3UpIgorCisjOiBtYWluLmM6MjUyMworbXNnaWQgIi1PW05dXHRcdExpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdHRhayBzYW1vIGphayAtbyB0eWxrbyBkemllbCBva25vIHBpb25vd28iCisKKyM6IG1haW4uYzoyNTI0Cittc2dpZCAiK1x0XHRcdFN0YXJ0IGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICIrXHRcdFx0WmFjem5paiBuYSBrb/FjdSBwbGlrdSIKKworIzogbWFpbi5jOjI1MjUKK21zZ2lkICIrPGxudW0+XHRcdFN0YXJ0IGF0IGxpbmUgPGxudW0+IgorbXNnc3RyICIrPGxudW0+XHRcdFphY3puaWogdyB3aWVyc3p1IDxsbnVtPiIKKworIzogbWFpbi5jOjI1MjcKK21zZ2lkICItLWNtZCA8Y29tbWFuZD5cdEV4ZWN1dGUgPGNvbW1hbmQ+IGJlZm9yZSBsb2FkaW5nIGFueSB2aW1yYyBmaWxlIgorbXNnc3RyICIiCisiLWNtZCA8Y29tbWFuZD5cdFx0V3lrb25haiBrb21lbmTqIDxjb21tYW5kPiBwcnplZCB6YbNhZG93YW5pZW0gIgorImpha2llZ29rb2x3aWVrIHBsaWt1IHZpbXJjIgorCisjOiBtYWluLmM6MjUyOQorbXNnaWQgIi1jIDxjb21tYW5kPlx0XHRFeGVjdXRlIDxjb21tYW5kPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItYyA8Y29tbWFuZD5cdFx0V3lrb25haiBrb21lbmTqIDxjb21tYW5kPiBwbyB6YbNhZG93YW5pdSBwaWVyd3N6ZWdvIHBsaWt1IgorCisjOiBtYWluLmM6MjUzMAorbXNnaWQgIi1TIDxzZXNzaW9uPlx0XHRTb3VyY2UgZmlsZSA8c2Vzc2lvbj4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLVMgPHNlc2phPlx0XHRXY3p5dGFqIHBsaWsgPHNlc2phPiBwbyB6YbNhZG93YW5pdSBwaWVyd3N6ZWdvIHBsaWt1IgorCisjOiBtYWluLmM6MjUzMQorbXNnaWQgIi1zIDxzY3JpcHRpbj5cdFJlYWQgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBmaWxlIDxzY3JpcHRpbj4iCittc2dzdHIgIi1zIDxzY3JpcHRpbj5cdFdjenl0dWoga29tZW5keSB0cnlidSBub3JtYWxuZWdvIHogcGxpa3UgPHNjcmlwdGluPiIKKworIzogbWFpbi5jOjI1MzIKK21zZ2lkICItdyA8c2NyaXB0b3V0Plx0QXBwZW5kIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItdyA8c2NyaXB0b3V0Plx0RG+zuWN6IHdzenlzdGtpZSB3cHJvd2FkemFuZSBrb21lbmR5IGRvIHBsaWt1IDxzY3JpcHRvdXQ+IgorCisjOiBtYWluLmM6MjUzMworbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLVcgPHNjcmlwdG91dD5cdFphcGlzdWogd3N6eXN0a2llIHdwcm93YWR6YW5lIGtvbWVuZHkgZG8gcGxpa3UgPHNjcmlwdG91dD4iCisKKyM6IG1haW4uYzoyNTM1Cittc2dpZCAiLXhcdFx0XHRFZGl0IGVuY3J5cHRlZCBmaWxlcyIKK21zZ3N0ciAiLXhcdFx0XHRFZHl0dWogemFrb2Rvd2FuZSBwbGlraSIKKworIzogbWFpbi5jOjI1MzkKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdENvbm5lY3QgdmltIHRvIHRoaXMgcGFydGljdWxhciBYLXNlcnZlciIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHRQb2SzuWN6IHZpbWEgdG8gZGFuZWdvIFgtc2Vyd2VyYSIKKworIzogbWFpbi5jOjI1NDEKK21zZ2lkICItWFx0XHRcdERvIG5vdCBjb25uZWN0IHRvIFggc2VydmVyIgorbXNnc3RyICItWFx0XHRcdE5pZSCzuWN6IHogc2Vyd2VyZW0gWCIKKworIzogbWFpbi5jOjI1NDQKK21zZ2lkICItLXJlbW90ZSA8ZmlsZXM+XHRFZGl0IDxmaWxlcz4gaW4gYSBWaW0gc2VydmVyIGlmIHBvc3NpYmxlIgorbXNnc3RyICItLXJlbW90ZSA8cGxpa2k+XHRFZHl0dWogcGxpa2kgdyBzZXJ3ZXJ6ZSBWaW1hIGplnGxpIG1vv2xpd2UiCisKKyM6IG1haW4uYzoyNTQ1Cittc2dpZCAiLS1yZW1vdGUtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiLS1yZW1vdGUtc2lsZW50IDxwbGlraT4gVG8gc2FtbywgbmllIG5hcnpla2FqIGplnGxpIG5pZSBtYSBzZXJ3ZXJhIgorCisjOiBtYWluLmM6MjU0NgorbXNnaWQgIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgQXMgLS1yZW1vdGUgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQiCittc2dzdHIgIi0tcmVtb3RlLXdhaXQgPHBsaWtpPlx0VGFrIGphayAtLXJlbW90ZSwgbGVjeiBjemVrYWogbmEgcGxpa2kgcHJ6ZWQgZWR5Y2q5IgorCisjOiBtYWluLmM6MjU0NworbXNnaWQgIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiLS1yZW1vdGUtd2FpdC1zaWxlbnQgPHBsaWtpPiAgVG8gc2FtbywgbmllIG5hcnpla2FqIGplnGxpIG5pZSBtYSBzZXJ3ZXJhIgorCisjOiBtYWluLmM6MjU0OAorbXNnaWQgIi0tcmVtb3RlLXNlbmQgPGtleXM+XHRTZW5kIDxrZXlzPiB0byBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQiCittc2dzdHIgIi0tcmVtb3RlLXNlbmQgPGtsYXdpc3plPlx0V3mcbGlqIDxrbGF3aXN6ZT4gZG8gc2Vyd2VyYSBWaW1hIGkgemFrb/FjeiIKKworIzogbWFpbi5jOjI1NDkKK21zZ2lkICItLXJlbW90ZS1leHByIDxleHByPlx0RXZhbHVhdGUgPGV4cHI+IGluIGEgVmltIHNlcnZlciBhbmQgcHJpbnQgcmVzdWx0IgorbXNnc3RyICItLXJlbW90ZS1leHByIDx3eXI+XHRXeWtvbmFqIDx3eXJhv2VuaWU+IHcgc2Vyd2VyemUgaSB3eXBpc3ogd3luaWsiCisKKyM6IG1haW4uYzoyNTUwCittc2dpZCAiLS1zZXJ2ZXJsaXN0XHRcdExpc3QgYXZhaWxhYmxlIFZpbSBzZXJ2ZXIgbmFtZXMgYW5kIGV4aXQiCittc2dzdHIgIi0tc2VydmVybGlzdFx0XHRXeW1pZfEgbmF6d3kgZG9zdOpwbnljaCBzZXJ3ZXLzdyBWaW1hIGkgemFrb/FjeiIKKworIzogbWFpbi5jOjI1NTEKK21zZ2lkICItLXNlcnZlcm5hbWUgPG5hbWU+XHRTZW5kIHRvL2JlY29tZSB0aGUgVmltIHNlcnZlciA8bmFtZT4iCittc2dzdHIgIi0tc2VydmVybmFtZSA8bmF6d2E+XHRcdE9kc3mzYWogZG8vc3Rh8SBzaeogc2Vyd2VyZW0gVmltIDxuYXp3YT4iCisKKyM6IG1haW4uYzoyNTU0Cittc2dpZCAiLWkgPHZpbWluZm8+XHRcdFVzZSA8dmltaW5mbz4gaW5zdGVhZCBvZiAudmltaW5mbyIKK21zZ3N0ciAiLWkgPHZpbWluZm8+XHRcdFW/eXdhaiA8dmltaW5mbz4gemFtaWFzdCAudmltaW5mbyIKKworIzogbWFpbi5jOjI1NTYKK21zZ2lkICItaCAgb3IgIC0taGVscFx0UHJpbnQgSGVscCAodGhpcyBtZXNzYWdlKSBhbmQgZXhpdCIKK21zZ3N0ciAiLWggIGx1YiAgLS1oZWxwXHR3eZx3aWV0bCBQb21vYyAoY3p5bGkgdOogd2lhZG9tb5zmKSBpIHpha2/xY3oiCisKKyM6IG1haW4uYzoyNTU3Cittc2dpZCAiLS12ZXJzaW9uXHRcdFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQiCittc2dzdHIgIi0tdmVyc2lvblx0XHR3eZx3aWV0bCBpbmZvcm1hY2rqIG8gd2Vyc2ppIGkgemFrb/FjeiIKKworIzogbWFpbi5jOjI1NjEKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoTW90aWYgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudHkgcm96cG96bmF3YW5lIHByemV6IGd2aW0gKHdlcnNqYSBNb3RpZik6XG4iCisKKyM6IG1haW4uYzoyNTY1Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKG5lWHRhdyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ3VtZW50eSByb3pwb3puYXdhbmUgcHJ6ZXogZ3ZpbSAod2Vyc2phIG5lWHRhdyk6XG4iCisKKyM6IG1haW4uYzoyNTY3Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEF0aGVuYSB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ3VtZW50eSByb3pwb3puYXdhbmUgcHJ6ZXogZ3ZpbSAod2Vyc2phIEF0aGVuYSk6XG4iCisKKyM6IG1haW4uYzoyNTcxCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHRaYbNhZHVqIHZpbSBuYSA8ZGlzcGxheT4iCisKKyM6IG1haW4uYzoyNTcyCittc2dpZCAiLWljb25pY1x0XHRTdGFydCB2aW0gaWNvbmlmaWVkIgorbXNnc3RyICItaWNvbmljXHRcdFphY3puaWogVmltIGpha28gaWtvbuoiCisKKyM6IG1haW4uYzoyNTc0Cittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG5hendhPlx0XHRVv3l3YWogemFzb2LzdyB0YWsgamFrIGJ5IFZpbSBiebMgPG5hendhPiIKKworIzogbWFpbi5jOjI1NzUKK21zZ2lkICJcdFx0XHQgIChVbmltcGxlbWVudGVkKVxuIgorbXNnc3RyICJcdFx0XHQgIChOaWV6YWltcGxlbWVudG93YW5lKVxuIgorCisjOiBtYWluLmM6MjU3NworbXNnaWQgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciB0aGUgYmFja2dyb3VuZCAoYWxzbzogLWJnKSIKK21zZ3N0ciAiLWJhY2tncm91bmQgPGtvbG9yPlx0Vb95d2FqIDxrb2xvcj4gZGxhIHSzYSAocvN3bmllvzogLWJnKSIKKworIzogbWFpbi5jOjI1NzgKK21zZ2lkICItZm9yZWdyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mZykiCittc2dzdHIgIi1mb3JlZ3JvdW5kIDxrb2xvcj5cdFW/eXdhaiA8a29sb3I+IGRsYSBub3JtYWxuZWdvIHRla3N0dSAocvN3bmllvzogLWZnKSIKKworIzogbWFpbi5jOjI1NzkgbWFpbi5jOjI1OTkKK21zZ2lkICItZm9udCA8Zm9udD5cdFx0VXNlIDxmb250PiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mbikiCittc2dzdHIgIi1mb250IDxmb250Plx0XHRVv3l3YWogPGZvbnQ+IGRsYSBub3JtYWxuZWdvIHRla3N0dSAocvN3bmllvzogLWZuKSIKKworIzogbWFpbi5jOjI1ODAKK21zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCittc2dzdHIgIi1ib2xkZm9udCA8Zm9udD5cdFW/eXdhaiA8Zm9udD4gZGxhIHd5dLN1c3pjem9uZWdvIHRla3N0dSIKKworIzogbWFpbi5jOjI1ODEKK21zZ2lkICItaXRhbGljZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGl0YWxpYyB0ZXh0IgorbXNnc3RyICItaXRhbGljZm9udCA8Zm9udD5cdFW/eXdhaiA8Zm9udD4gZGxhIHBvY2h5s2VnbyIKKworIzogbWFpbi5jOjI1ODIgbWFpbi5jOjI2MDAKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIi1nZW9tZXRyeSA8Z2VvbT5cdFW/eXdhaiA8Z2VvbT4gZGxhIHBvY3q5dGtvd3ljaCByb3ptaWFy83cgKHLzd25pZb86IC1nZW9tKSIKKworIzogbWFpbi5jOjI1ODMKK21zZ2lkICItYm9yZGVyd2lkdGggPHdpZHRoPlx0VXNlIGEgYm9yZGVyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1idykiCittc2dzdHIgIi1ib3JkZXJ3aWR0aCA8c3plcj5cdFW/eWogcmFta2kgbyBncnVib5xjaSA8c3plcj4gKHLzd25pZb86IC1idykiCisKKyM6IG1haW4uYzoyNTg0Cittc2dpZCAiLXNjcm9sbGJhcndpZHRoIDx3aWR0aD4gIFVzZSBhIHNjcm9sbGJhciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtc3cpIgorbXNnc3RyICItc2Nyb2xsYmFyd2lkdGggPHN6ZXI+ICBVv3l3YWogcHJ6ZXdpamFjemEgbyBzemVyb2tvnGNpIDxzemVyPiAocvN3bmllvzogLXN3KSIKKworIzogbWFpbi5jOjI1ODYKK21zZ2lkICItbWVudWhlaWdodCA8aGVpZ2h0Plx0VXNlIGEgbWVudSBiYXIgaGVpZ2h0IG9mIDxoZWlnaHQ+IChhbHNvOiAtbWgpIgorbXNnc3RyICItbWVudWhlaWdodCA8aGVpZ2h0Plx0U3Rvc3VqIGJlbGvqIG1lbnUgbyB3eXNva2+cY2kgPGhlaWdodD4gKHLzd25pZb86IC1taCkiCisKKyM6IG1haW4uYzoyNTg4IG1haW4uYzoyNjAxCittc2dpZCAiLXJldmVyc2VcdFx0VXNlIHJldmVyc2UgdmlkZW8gKGFsc286IC1ydikiCittc2dzdHIgIi1yZXZlcnNlXHRcdFN0b3N1aiBuZWdhdHl3IGtvbG9y83cgKHLzd25pZb86IC1ydikiCisKKyM6IG1haW4uYzoyNTg5Cittc2dpZCAiK3JldmVyc2VcdFx0RG9uJ3QgdXNlIHJldmVyc2UgdmlkZW8gKGFsc286ICtydikiCittc2dzdHIgIityZXZlcnNlXHRcdE5pZSBzdG9zdWogbmVnYXR5d3Uga29sb3LzdyAocvN3bmllvzogK3J2KSIKKworIzogbWFpbi5jOjI1OTAKK21zZ2lkICIteHJtIDxyZXNvdXJjZT5cdFNldCB0aGUgc3BlY2lmaWVkIHJlc291cmNlIgorbXNnc3RyICIteHJtIDxyZXNvdXJjZT5cdFVzdGF3IG9rcmWcbG9ueSB6YXPzYiIKKworIzogbWFpbi5jOjI1OTMKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoUklTQyBPUyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ3VtZW50eSByb3pwb3puYXdhbmUgcHJ6ZXogZ3ZpbSAod2Vyc2phIFJJU0MgT1MpOlxuIgorCisjOiBtYWluLmM6MjU5NAorbXNnaWQgIi0tY29sdW1ucyA8bnVtYmVyPlx0SW5pdGlhbCB3aWR0aCBvZiB3aW5kb3cgaW4gY29sdW1ucyIKK21zZ3N0ciAiLS1jb2x1bW5zIDxudW1iZXI+XHRQb2N6uXRrb3dhIHN6ZXJva2+c5iBva25hIHcga29sdW1uYWNoIgorCisjOiBtYWluLmM6MjU5NQorbXNnaWQgIi0tcm93cyA8bnVtYmVyPlx0SW5pdGlhbCBoZWlnaHQgb2Ygd2luZG93IGluIHJvd3MiCittc2dzdHIgIi0tcm93cyA8bnVtYmVyPlx0UG9jerl0a293YSB3eXNva2+c5iBva25hIHcgd2llcnN6YWNoIgorCisjOiBtYWluLmM6MjU5OAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnR5IHJvenBvem5hd2FuZSBwcnpleiBndmltICh3ZXJzamEgR1RLKyk6XG4iCisKKyM6IG1haW4uYzoyNjAyCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiAoYWxzbzogLS1kaXNwbGF5KSIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHRaYXN0YXJ0dWogdmltIG5hIDxkaXNwbGF5PiAocvN3bmllvzogLS1kaXNwbGF5KSIKKworIzogbWFpbi5jOjI2MDQKK21zZ2lkICItLXJvbGUgPHJvbGU+XHRTZXQgYSB1bmlxdWUgcm9sZSB0byBpZGVudGlmeSB0aGUgbWFpbiB3aW5kb3ciCittc2dzdHIgIi0tcm9sZSA8cm9sZT5cdFVzdGF3IHVuaWthdG93uSByb2zqIGRvIGlkZW50eWZpa2FjamkgZ7Pzd25lZ28gb2tuYSIKKworIzogbWFpbi5jOjI2MDYKK21zZ2lkICItLXNvY2tldGlkIDx4aWQ+XHRPcGVuIFZpbSBpbnNpZGUgYW5vdGhlciBHVEsgd2lkZ2V0IgorbXNnc3RyICItLXNvY2tldGlkIDx4aWQ+XHRPdHfzcnogVmltIHdld265dHJ6IGlubmVnbyB3aWRnZXR1IEdUSyIKKworIzogbWFpbi5jOjI2MDkKK21zZ2lkICItUCA8cGFyZW50IHRpdGxlPlx0T3BlbiBWaW0gaW5zaWRlIHBhcmVudCBhcHBsaWNhdGlvbiIKK21zZ3N0ciAiLVAgPHR5dHWzIHJvZHppY2E+XHRPdHfzcnogVmltYSB3ZXduuXRyeiByb2R6aWNpZWxza2llaiBhcGxpa2FjamkiCisKKyM6IG1haW4uYzoyODQ3Cittc2dpZCAiTm8gZGlzcGxheSIKK21zZ3N0ciAiQnJhayBkaXNwbGF5IgorCisjLiBGYWlsZWQgdG8gc2VuZCwgYWJvcnQuCisjOiBtYWluLmM6Mjg2MgorbXNnaWQgIjogU2VuZCBmYWlsZWQuXG4iCittc2dzdHIgIjogV3lzs2FuaWUgbmllIHBvd2lvZLNvIHNp6i5cbiIKKworIy4gTGV0IHZpbSBzdGFydCBub3JtYWxseS4KKyM6IG1haW4uYzoyODY4Cittc2dpZCAiOiBTZW5kIGZhaWxlZC4gVHJ5aW5nIHRvIGV4ZWN1dGUgbG9jYWxseVxuIgorbXNnc3RyICI6IFd5c7NhbmllIG5pZSBwb3dpb2SzbyBzaeouIFBy82J1auogd3lrb25h5iBuYSBtaWVqc2N1XG4iCisKKyM6IG1haW4uYzoyOTA2IG1haW4uYzoyOTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG9mICVkIGVkaXRlZCIKK21zZ3N0ciAib3R3b3J6b25vICVkIHogJWQiCisKKyM6IG1haW4uYzoyOTQ5Cittc2dpZCAiTm8gZGlzcGxheTogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiQnJhayB0ZXJtaW5hbGE6IFd5c7NhbmllIHd5cmG/ZW5pYSBuaWUgcG93aW9ks28gc2nqLlxuIgorCisjOiBtYWluLmM6Mjk2MQorbXNnaWQgIjogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiBXeXOzYW5pZSB3eXJhv2VuaWEgbmllIHBvd2lvZLNvIHNp6i5cbiIKKworIzogbWFyay5jOjcwOQorbXNnaWQgIk5vIG1hcmtzIHNldCIKK21zZ3N0ciAiQnJhayB6YWuzYWRlayIKKworIzogbWFyay5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgzOiBObyBtYXJrcyBtYXRjaGluZyBcIiVzXCIiCittc2dzdHIgIkUyODM6IK9hZG5hIHpha7NhZGthIG5pZSBwYXN1amUgZG8gXCIlc1wiIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo3MjIKK21zZ2lkICIiCisiXG4iCisibWFyayBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiemFrsy4gd2llcnN6IGtvbCBwbGlrL3Rla3N0IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo3NjAKK21zZ2lkICIiCisiXG4iCisiIGp1bXAgbGluZSAgY29sIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiBza29rIHdpZXJzeiBrb2wgcGxpay90ZWtzdCIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6ODA1Cittc2dpZCAiIgorIlxuIgorImNoYW5nZSBsaW5lICBjb2wgdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorInptaWXxIHdyc3ouIGtvbCB0ZWtzdCIKKworIzogbWFyay5jOjEyODEKK21zZ2lkICIiCisiXG4iCisiIyBGaWxlIG1hcmtzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBaYWuzYWRraSB3IHBsaWthY2g6XG4iCisKKyMuIFdyaXRlIHRoZSBqdW1wbGlzdCB3aXRoIC0nCisjOiBtYXJrLmM6MTMxNgorbXNnaWQgIiIKKyJcbiIKKyIjIEp1bXBsaXN0IChuZXdlc3QgZmlyc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBMaXN0YSBvZG5pZXNpZfEgKHBvY3q5d3N6eSBvZCBuYWpub3dzenljaCk6XG4iCisKKyM6IG1hcmsuYzoxNDEyCittc2dpZCAiIgorIlxuIgorIiMgSGlzdG9yeSBvZiBtYXJrcyB3aXRoaW4gZmlsZXMgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBIaXN0b3JpYSB6YWuzYWRlayB3IHBsaWthY2ggKG9kIG5ham5vd3N6eWNoIHBvIG5hanN0YXJzemUpOlxuIgorCisjOiBtYXJrLmM6MTUwMQorbXNnaWQgIk1pc3NpbmcgJz4nIgorbXNnc3RyICJCcmFrICc+JyIKKworIzogbWJ5dGUuYzo0NjcKK21zZ2lkICJFNTQzOiBOb3QgYSB2YWxpZCBjb2RlcGFnZSIKK21zZ3N0ciAiRTU0MzogVG8gbmllIGplc3Qgd2G/bmEgc3Ryb25hIGtvZG93YSIKKworIzogbWJ5dGUuYzo0NDMxCittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IE5pZSBtb2fqIG5hc3Rhd2nmIHdhcnRvnGNpIElDIgorCisjOiBtYnl0ZS5jOjQ1ODMKK21zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCittc2dzdHIgIkUyODU6IE5pZSBtb2ezZW0gc3R3b3J6eeYga29udGVrc3R1IHdwcm93YWR6ZfEiCisKKyM6IG1ieXRlLmM6NDc0MQorbXNnaWQgIkUyODY6IEZhaWxlZCB0byBvcGVuIGlucHV0IG1ldGhvZCIKK21zZ3N0ciAiRTI4NjogTmllIG1vZ7NlbSBvdHdvcnp55iBzcG9zb2J1IHdwcm93YWR6ZfEiCisKKyM6IG1ieXRlLmM6NDc1MgorbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4NzogT1NUUlpFr0VOSUU6IE5pZSBtb2ezZW0gemxpa3dpZG93YeYgd3l3b7NhbmlhIGRsYSBJTSIKKworIzogbWJ5dGUuYzo0NzU4Cittc2dpZCAiRTI4ODogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgc3R5bGUiCittc2dzdHIgIkUyODg6IG1ldG9kYSB3cHJvd2FkemXxIG5pZSB3c3BvbWFnYSC/YWRuZWdvIHN0eWx1IgorCisjOiBtYnl0ZS5jOjQ4MTUKK21zZ2lkICJFMjg5OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IG15IHByZWVkaXQgdHlwZSIKK21zZ3N0ciAiRTI4OTogbWV0b2RhIHdwcm93YWR6ZfEgbmllIHdzcG9tYWdhIG1vamVnbyB0eXB1IHByZWVkaXQiCisKKyM6IG1ieXRlLmM6NDg4OQorbXNnaWQgIkUyOTA6IG92ZXItdGhlLXNwb3Qgc3R5bGUgcmVxdWlyZXMgZm9udHNldCIKK21zZ3N0ciAiRTI5MDogc3R5bCBuYWRwdW5rdG93eSB3eW1hZ2EgK2ZvbnRzZXQiCisKKyM6IG1ieXRlLmM6NDkyNQorbXNnaWQgIkUyOTE6IFlvdXIgR1RLKyBpcyBvbGRlciB0aGFuIDEuMi4zLiBTdGF0dXMgYXJlYSBkaXNhYmxlZCIKK21zZ3N0ciAiRTI5MTogVHfzaiBHVEsrIGplc3Qgc3RhcnN6eSBuab8gMS4yLjMuIFBvbGUgc3RhdHVzdSB3ebO5Y3pvbm8iCisKKyM6IG1ieXRlLmM6NTIzMgorbXNnaWQgIkUyOTI6IElucHV0IE1ldGhvZCBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmciCittc2dzdHIgIkUyOTI6IFNlcndlciBtZXRvZCB3cHJvd2FkemXxIG5pZSBqZXN0IHVydWNob21pb255IgorCisjOiBtZW1maWxlLmM6NDg4Cittc2dpZCAiRTI5MzogYmxvY2sgd2FzIG5vdCBsb2NrZWQiCittc2dzdHIgIkUyOTM6IGJsb2sgbmllIGJ5syB6YWJsb2tvd2FueSIKKworIzogbWVtZmlsZS5jOjEwMDUKK21zZ2lkICJFMjk0OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSByZWFkIgorbXNnc3RyICJFMjk0OiBCs7lkIHcgdHJha2NpZSBjenl0YW5pYSBwbGlrdSB3eW1pYW55IgorCisjOiBtZW1maWxlLmM6MTAxMAorbXNnaWQgIkUyOTU6IFJlYWQgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk1OiBCs7lkIG9kY3p5dHUgcGxpa3Ugd3ltaWFueSIKKworIzogbWVtZmlsZS5jOjEwNjIKK21zZ2lkICJFMjk2OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIKK21zZ3N0ciAiRTI5NjogQrO5ZCBzenVrYW5pYSB3IHBsaWt1IHd5bWlhbnkiCisKKyM6IG1lbWZpbGUuYzoxMDgwCittc2dpZCAiRTI5NzogV3JpdGUgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk3OiBCs7lkIHphcGlzdSB3IHBsaWt1IHd5bWlhbnkiCisKKyM6IG1lbWZpbGUuYzoxMjc3Cittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiBQbGlrIHd5bWlhbnkganW/IGlzdG5pZWplIChhdGFrIHN5bWxpbms/KSIKKworIzogbWVtbGluZS5jOjI3NQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMD8iCittc2dzdHIgIkUyOTg6IE5pZSBvdHJ6eW1hs2VtIGJsb2t1IG5yIDA/IgorCisjOiBtZW1saW5lLmM6MzE1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAxPyIKK21zZ3N0ciAiRTI5ODogTmllIG90cnp5bWGzZW0gYmxva3UgbnIgMT8iCisKKyM6IG1lbWxpbmUuYzozMzMKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDI/IgorbXNnc3RyICJFMjk4OiBOaWUgb3RyenltYbNlbSBibG9rdSBuciAyPyIKKworIy4gY291bGQgbm90IChyZSlvcGVuIHRoZSBzd2FwIGZpbGUsIHdoYXQgY2FuIHdlIGRvPz8/PworIzogbWVtbGluZS5jOjQ0MworbXNnaWQgIkUzMDE6IE9vcHMsIGxvc3QgdGhlIHN3YXAgZmlsZSEhISIKK21zZ3N0ciAiRTMwMTogT2plaiwgemd1YmmzZW0gcGxpayB3eW1pYW55ISEhIgorCisjOiBtZW1saW5lLmM6NDQ4Cittc2dpZCAiRTMwMjogQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDI6IE5pZSBtb2ezZW0gem1pZW5p5iBuYXp3eSBwbGlrdSB3eW1pYW55IgorCisjOiBtZW1saW5lLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDM6IFVuYWJsZSB0byBvcGVuIHN3YXAgZmlsZSBmb3IgXCIlc1wiLCByZWNvdmVyeSBpbXBvc3NpYmxlIgorbXNnc3RyICJFMzAzOiBOaWUgbW9n6iBvdHdvcnp55iBwbGlrdSB3eW1pYW55IGRsYSBcIiVzXCI7IG9kdHdvcnplbmllIG5pZW1vv2xpd2UiCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiBtbF90aW1lc3RhbXA6IE5pZSBvdHJ6eW1hs2VtIGJsb2t1IDA/PyIKKworIzogbWVtbGluZS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA1OiBObyBzd2FwIGZpbGUgZm91bmQgZm9yICVzIgorbXNnc3RyICJFMzA1OiBOaWUgem5hbGV6aW9ubyBwbGlrdSB3eW1pYW55IGRsYSAlcyIKKworIzogbWVtbGluZS5jOjc2NworbXNnaWQgIkVudGVyIG51bWJlciBvZiBzd2FwIGZpbGUgdG8gdXNlICgwIHRvIHF1aXQpOiAiCittc2dzdHIgIldwcm93YWSfIG51bWVyIHBsaWt1IHd5bWlhbnksIGt083JlZ28gdb955iAoMCBieSB3eWqc5ik6ICIKKworIzogbWVtbGluZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA2OiBDYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiRTMwNjogTmllIG1vZ+ogb3R3b3J6eeYgJXMiCisKKyM6IG1lbWxpbmUuYzo4MzQKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBibG9jayAwIGZyb20gIgorbXNnc3RyICJOaWUgbW9n6iBvZGN6eXRh5iBibG9rdSAwIHogIgorCisjOiBtZW1saW5lLmM6ODM3Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIk1vv2UgbmllIHd5a29uYW5vIHptaWFuIGFsYm8gVmltIG5pZSB6YWt0dWFsaXpvd2GzIHBsaWt1IHd5bWlhbnkuIgorCisjOiBtZW1saW5lLmM6ODQ3IG1lbWxpbmUuYzo4NjQKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltLlxuIgorbXNnc3RyICIgbmllIG1vv2UgYnnmIHN0b3Nvd2FueSB6IHS5IHdlcnNquSBWaW1hLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAiVb95aiBWaW1hIHcgd2Vyc2ppIDMuMC5cbiIKKworIzogbWVtbGluZS5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA3OiAlcyBkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlIgorbXNnc3RyICJFMzA3OiAlcyBuaWUgd3lnbLlkYSBuYSBwbGlrIHd5bWlhbnkgVmltYSIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIgbmllIG1vv2UgYnnmIHN0b3Nvd2FueSBuYSB0eW0ga29tcHV0ZXJ6ZS5cbiIKKworIzogbWVtbGluZS5jOjg3MAorbXNnaWQgIlRoZSBmaWxlIHdhcyBjcmVhdGVkIG9uICIKK21zZ3N0ciAiVGVuIHBsaWsgem9zdGGzIHN0d29yem9ueSBuYSAiCisKKyM6IG1lbWxpbmUuYzo4NzQKK21zZ2lkICIiCisiLFxuIgorIm9yIHRoZSBmaWxlIGhhcyBiZWVuIGRhbWFnZWQuIgorbXNnc3RyICIiCisiLFxuIgorImx1YiBwbGlrIHpvc3RhsyB1c3prb2R6b255LiIKKworIzogbWVtbGluZS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIgorbXNnc3RyICJVv3l3YW0gcGxpa3Ugd3ltaWFueSBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3JpZ2luYWwgZmlsZSBcIiVzXCIiCittc2dzdHIgIk9yeWdpbmFsbnkgcGxpayBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MjIKK21zZ2lkICJFMzA4OiBXYXJuaW5nOiBPcmlnaW5hbCBmaWxlIG1heSBoYXZlIGJlZW4gY2hhbmdlZCIKK21zZ3N0ciAiRTMwODogT1NUUlpFr0VOSUU6IE9yeWdpbmFsbnkgcGxpayBt82ezIGJ55iB6bWllbmlvbnkiCisKKyM6IG1lbWxpbmUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwOTogVW5hYmxlIHRvIHJlYWQgYmxvY2sgMSBmcm9tICVzIgorbXNnc3RyICJFMzA5OiBOaWUgbW9n6iBvZGN6eXRh5iBibG9rdSAxIHogJXMiCisKKyM6IG1lbWxpbmUuYzo5NzkKK21zZ2lkICI/Pz9NQU5ZIExJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P0JSQUtVSkUgV0lFTFUgV0lFUlNaWSIKKworIzogbWVtbGluZS5jOjk5NQorbXNnaWQgIj8/P0xJTkUgQ09VTlQgV1JPTkciCittc2dzdHIgIj8/P0xJQ1pOSUsgV0lFUlNaWSBOSUVaR09ETlkiCisKKyM6IG1lbWxpbmUuYzoxMDAyCittc2dpZCAiPz8/RU1QVFkgQkxPQ0siCittc2dzdHIgIj8/P1BVU1RZIEJMT0siCisKKyM6IG1lbWxpbmUuYzoxMDI4Cittc2dpZCAiPz8/TElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/QlJBS1VKRSBXSUVSU1pZIgorCisjOiBtZW1saW5lLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzEwOiBCbG9jayAxIElEIHdyb25nICglcyBub3QgYSAuc3dwIGZpbGU/KSIKK21zZ3N0ciAiRTMxMDogTmlld7NhnGNpd2UgSUQgYmxva3UgMSAobW+/ZSAlcyBuaWUgamVzdCBwbGlraWVtIC5zd3A/KSIKKworIzogbWVtbGluZS5jOjEwNjUKK21zZ2lkICI/Pz9CTE9DSyBNSVNTSU5HIgorbXNnc3RyICI/Pz9CUkFLIEJMT0tVIgorCisjOiBtZW1saW5lLmM6MTA4MQorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBiZSBtZXNzZWQgdXAiCittc2dzdHIgIj8/PyBvZCB0ZWdvIG1pZWpzY2EgcG8gPz8/S09OSUVDIHdpZXJzemUgbW9nuSBieeYgcG9taWVzemFuZSIKKworIzogbWVtbGluZS5jOjEwOTcKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiCittc2dzdHIgIj8/PyBvZCB0ZWdvIG1pZWpzY2EgcG8gPz8/S09OSUVDIHdpZXJzemUgbW9nuSBieeYgd7Nvv29uZS9za2Fzb3dhbmUiCisKKyM6IG1lbWxpbmUuYzoxMTE3Cittc2dpZCAiPz8/RU5EIgorbXNnc3RyICI/Pz9LT05JRUMiCisKKyM6IG1lbWxpbmUuYzoxMTQzCittc2dpZCAiRTMxMTogUmVjb3ZlcnkgSW50ZXJydXB0ZWQiCittc2dzdHIgIkUzMTE6IFByemVyd2FuaWUgb2R0d2FyemFuaWEiCisKKyM6IG1lbWxpbmUuYzoxMTQ4Cittc2dpZCAiRTMxMjogRXJyb3JzIGRldGVjdGVkIHdoaWxlIHJlY292ZXJpbmc7IGxvb2sgZm9yIGxpbmVzIHN0YXJ0aW5nIHdpdGggPz8/IgorbXNnc3RyICJFMzEyOiBXeWtyeXRvIGKz6mR5IHBvZGN6YXMgb2R0d2FyemFuaWE7IG9kIGt083J5Y2ggd2llcnN6eSB6YWN6ueYgPz8/IgorCisjOiBtZW1saW5lLmM6MTE1MAorbXNnaWQgIlNlZSBcIjpoZWxwIEUzMTJcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIlBhdHJ6IFwiOmhlbHAgRTMxMlwiIGRsYSBkYWxzenljaCBpbmZvcm1hY2ppLiIKKworIzogbWVtbGluZS5jOjExNTUKK21zZ2lkICJSZWNvdmVyeSBjb21wbGV0ZWQuIFlvdSBzaG91bGQgY2hlY2sgaWYgZXZlcnl0aGluZyBpcyBPSy4iCittc2dzdHIgIk9kdHdhcnphbmllIHpha2/xY3pvbm8uIFBvd2luaWVuZZwgc3ByYXdkemnmIGN6eSB3c3p5c3RrbyBqZXN0IHcgcG9yerlka3UuIgorCisjOiBtZW1saW5lLmM6MTE1NgorbXNnaWQgIiIKKyJcbiIKKyIoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWVcbiIKK21zZ3N0ciAiIgorIlxuIgorIihNb79lc3ogY2hjaWXmIHphcGlzYeYgdGVuIHBsaWsgcG9kIGlubrkgbmF6d7lcbiIKKworIzogbWVtbGluZS5jOjExNTcKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAiaSB3eWtvbmHmIGRpZmYgeiBvcnlnaW5hbG55bSBwbGlraWVtIGFieSBzcHJhd2R6aeYgem1pYW55KVxuIgorCisjOiBtZW1saW5lLmM6MTE1OAorbXNnaWQgIiIKKyJEZWxldGUgdGhlIC5zd3AgZmlsZSBhZnRlcndhcmRzLlxuIgorIlxuIgorbXNnc3RyICIiCisiU2thc3VqIHBvdGVtIHBsaWsgLnN3cC5cbiIKKyJcbiIKKworIy4gdXNlIG1zZygpIHRvIHN0YXJ0IHRoZSBzY3JvbGxpbmcgcHJvcGVybHkKKyM6IG1lbWxpbmUuYzoxMjE0Cittc2dpZCAiU3dhcCBmaWxlcyBmb3VuZDoiCittc2dzdHIgIlpuYWxlemlvbmUgcGxpa2kgd3ltaWFueToiCisKKyM6IG1lbWxpbmUuYzoxMzkyCittc2dpZCAiICAgSW4gY3VycmVudCBkaXJlY3Rvcnk6XG4iCittc2dzdHIgIiAgIFcgYmllv7ljeW0ga2F0YWxvZ3U6XG4iCisKKyM6IG1lbWxpbmUuYzoxMzk0Cittc2dpZCAiICAgVXNpbmcgc3BlY2lmaWVkIG5hbWU6XG4iCittc2dzdHIgIiAgIFW/eXdhbSBwb2RhbmVqIG5hend5OlxuIgorCisjOiBtZW1saW5lLmM6MTM5OAorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIFcga2F0YWxvZ3UgIgorCisjOiBtZW1saW5lLmM6MTQxNgorbXNnaWQgIiAgICAgIC0tIG5vbmUgLS1cbiIKK21zZ3N0ciAiICAgICAtLSC/YWRlbiAtLVxuIgorCisjOiBtZW1saW5lLmM6MTQ4OAorbXNnaWQgIiAgICAgICAgICBvd25lZCBieTogIgorbXNnc3RyICIgICBwb3NpYWRhbnkgcHJ6ZXo6ICIKKworIzogbWVtbGluZS5jOjE0OTAKK21zZ2lkICIgICBkYXRlZDogIgorbXNnc3RyICIgICBkYXRhOiAiCisKKyM6IG1lbWxpbmUuYzoxNDk0IG1lbWxpbmUuYzozNjg0Cittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICAgZGF0YTogIgorCisjOiBtZW1saW5lLmM6MTUxMAorbXNnaWQgIiAgICAgICAgIFtmcm9tIFZpbSB2ZXJzaW9uIDMuMF0iCittc2dzdHIgIiAgICAgICAgIFtwbyBWaW1pZSB3ZXJzamEgMy4wXSIKKworIzogbWVtbGluZS5jOjE1MTQKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgIFtuaWUgd3lnbLlkYSBuYSBwbGlrIHd5bWlhbnkgVmltYV0iCisKKyM6IG1lbWxpbmUuYzoxNTE4Cittc2dpZCAiICAgICAgICAgZmlsZSBuYW1lOiAiCittc2dzdHIgIiAgICAgICBuYXp3YSBwbGlrdTogIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICAgbW9kaWZpZWQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIHptaWVuaW9ubzogIgorCisjOiBtZW1saW5lLmM6MTUyNQorbXNnaWQgIllFUyIKK21zZ3N0ciAiVEFLIgorCisjOiBtZW1saW5lLmM6MTUyNQorbXNnaWQgIm5vIgorbXNnc3RyICJuaWUiCisKKyM6IG1lbWxpbmUuYzoxNTI5Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIHVzZXIgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICB1v3l0a293bmlrOiAiCisKKyM6IG1lbWxpbmUuYzoxNTM2Cittc2dpZCAiICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIiAgIG5hendhIGhvc3RhOiAiCisKKyM6IG1lbWxpbmUuYzoxNTM4Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgbmF6d2EgaG9zdGE6ICIKKworIzogbWVtbGluZS5jOjE1NDQKK21zZ2lkICIiCisiXG4iCisiICAgICAgICBwcm9jZXNzIElEOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgIElEIHByb2Nlc3U6ICIKKworIzogbWVtbGluZS5jOjE1NTAKK21zZ2lkICIgKHN0aWxsIHJ1bm5pbmcpIgorbXNnc3RyICIgKGRhbGVqIGR6aWGzYSkiCisKKyM6IG1lbWxpbmUuYzoxNTYyCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbbmllIG5hZGFqZSBzaeogZGxhIHRlaiB3ZXJzamkgVmltYV0iCisKKyM6IG1lbWxpbmUuYzoxNTY1Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIG9uIHRoaXMgY29tcHV0ZXJdIgorbXNnc3RyICIiCisiXG4iCisiICAgICBbbmllIGRvIHW/eXRrdSBuYSB0eW0ga29tcHV0ZXJ6ZV0iCisKKyM6IG1lbWxpbmUuYzoxNTcwCittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSByZWFkXSIKK21zZ3N0ciAiICAgICAgICBbbmllb2Rjenl0eXdhbG55XSIKKworIzogbWVtbGluZS5jOjE1NzQKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIG9wZW5lZF0iCittc2dzdHIgIiAgICAgICAgICAgIFtuaWVvdHdpZXJhbG55XSIKKworIzogbWVtbGluZS5jOjE3NjQKK21zZ2lkICJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMxMzogTmllIG1vZ+ogemFiZXpwaWVjennmLCBibyBicmFrIHBsaWt1IHd5bWlhbnkiCisKKyM6IG1lbWxpbmUuYzoxODE3Cittc2dpZCAiRmlsZSBwcmVzZXJ2ZWQiCittc2dzdHIgIlBsaWsgemFiZXpwaWVjem9ubyIKKworIzogbWVtbGluZS5jOjE4MTkKK21zZ2lkICJFMzE0OiBQcmVzZXJ2ZSBmYWlsZWQiCittc2dzdHIgIkUzMTQ6IE5pZXVkYW5lIHphYmV6cGllY3plbmllIgorCisjOiBtZW1saW5lLmM6MTg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE1OiBtbF9nZXQ6IGludmFsaWQgbG51bTogJWxkIgorbXNnc3RyICJFMzE1OiBtbF9nZXQ6IG5pZXezYZxjaXd5IGxudW06ICVsZCIKKworIzogbWVtbGluZS5jOjE5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNjogbWxfZ2V0OiBjYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMxNjogbWxfZ2V0OiBuaWUgem5hbGV6aW9ubyB3aWVyc3phICVsZCIKKworIzogbWVtbGluZS5jOjIzMDYKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDMiCittc2dzdHIgIkUzMTc6IG5pZXBvcHJhd25lIGlkIHdza2GfbmlrYSBibG9rdSAzIgorCisjOiBtZW1saW5lLmM6MjM4NgorbXNnaWQgInN0YWNrX2lkeCBzaG91bGQgYmUgMCIKK21zZ3N0ciAic3RhY2tfaWR4IHBvd2luaWVuIGJ55iAwIgorCisjOiBtZW1saW5lLmM6MjQ0OAorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODogWmFrdHVhbGl6b3dhbm8gemJ5dCB3aWVsZSBibG9r83c/IgorCisjOiBtZW1saW5lLmM6MjYzMAorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgNCIKK21zZ3N0ciAiRTMxNzogbmllcG9wcmF3bmUgaWQgd3NrYZ9uaWthIGJsb2t1IDQiCisKKyM6IG1lbWxpbmUuYzoyNjU3Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAiYmxvayBuciAxIHNrYXNvd2FueT8iCisKKyM6IG1lbWxpbmUuYzoyODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjA6IENhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzIwOiBOaWUgbW9n6iB6bmFsZZ/mIHdpZXJzemEgJWxkIgorCisjOiBtZW1saW5lLmM6MzEwMAorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmciCittc2dzdHIgIkUzMTc6IG5pZXBvcHJhd25lIGlkIGJsb2t1IG9kbmllc2llbmlhIgorCisjOiBtZW1saW5lLmM6MzExNgorbXNnaWQgInBlX2xpbmVfY291bnQgaXMgemVybyIKK21zZ3N0ciAicGVfbGluZV9jb3VudCB3eW5vc2kgemVybyIKKworIzogbWVtbGluZS5jOjMxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMjogbGluZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlbGQgcGFzdCB0aGUgZW5kIgorbXNnc3RyICJFMzIyOiBudW1lciB3aWVyc3phIHBvemEgemFrcmVzZW06ICVsZCBqZXN0IHBvemEga2/xY2VtIgorCisjOiBtZW1saW5lLmM6MzE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIzOiBsaW5lIGNvdW50IHdyb25nIGluIGJsb2NrICVsZCIKK21zZ3N0ciAiRTMyMzogbGljemJhIHdpZXJzenkgbmllcG9wcmF3bmEgdyBibG9rdSAlbGQiCisKKyM6IG1lbWxpbmUuYzozMTk4Cittc2dpZCAiU3RhY2sgc2l6ZSBpbmNyZWFzZXMiCittc2dzdHIgIldpZWxrb5zmIHN0b3N1IHd6cmFzdGEiCisKKyM6IG1lbWxpbmUuYzozMjQ0Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAyIgorbXNnc3RyICJFMzE3OiBuaWVwb3ByYXduZSBpZCBibG9rdSBvZG5pZXNpZW5pYSAyIgorCisjOiBtZW1saW5lLmM6MzY3NAorbXNnaWQgIkUzMjU6IEFUVEVOVElPTiIKK21zZ3N0ciAiRTMyNTogVVdBR0EiCisKKyM6IG1lbWxpbmUuYzozNjc1Cittc2dpZCAiIgorIlxuIgorIkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIgorbXNnc3RyICIiCisiXG4iCisiWm5hbGF6s2VtIHBsaWsgd3ltaWFueSBvIG5hendpZSBcIiIKKworIzogbWVtbGluZS5jOjM2NzkKK21zZ2lkICJXaGlsZSBvcGVuaW5nIGZpbGUgXCIiCittc2dzdHIgIlBvZGN6YXMgb3R3aWVyYW5pYSBwbGlrdSBcIiIKKworIzogbWVtbGluZS5jOjM2ODgKK21zZ2lkICIgICAgICBORVdFUiB0aGFuIHN3YXAgZmlsZSFcbiIKK21zZ3N0ciAiICAgICAgTk9XU1pFIG9kIHBsaWt1IHd5bWlhbnkhXG4iCisKKyMuIFNvbWUgb2YgdGhlc2UgbWVzc2FnZXMgYXJlIGxvbmcgdG8gYWxsb3cgdHJhbnNsYXRpb24gdG8KKyMuICogb3RoZXIgbGFuZ3VhZ2VzLgorIzogbWVtbGluZS5jOjM2OTIKK21zZ2lkICIiCisiXG4iCisiKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLlxuIgorIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d29cbiIKKyIgICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMSkgUGV3bmllIGlubnkgcHJvZ3JhbSBvYnJhYmlhIHRlbiBzYW0gcGxpay5cbiIKKyIgICAgSmWcbGkgdGFrLCBiuWSfIG9zdHJvv255LCBhYnkgbmllIHNrb/FjennmIHogZHdvbWFcbiIKKyIgICAgcvO/bnltaSB3ZXJzamFtaSBqZWRuZWdvIHRlZ28gc2FtZWdvIHBsaWt1IHBvIHptaWFuYWNoLlxuIgorCisjOiBtZW1saW5lLmM6MzY5MworbXNnaWQgIiAgICBRdWl0LCBvciBjb250aW51ZSB3aXRoIGNhdXRpb24uXG4iCittc2dzdHIgIiAgICBaYWtv8WN6IGx1YiBvc3Ryb79uaWUga29udHludXVqLlxuIgorCisjOiBtZW1saW5lLmM6MzY5NAorbXNnaWQgIiIKKyJcbiIKKyIoMikgQW4gZWRpdCBzZXNzaW9uIGZvciB0aGlzIGZpbGUgY3Jhc2hlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigyKSBTZXNqYSBlZHljamkgZGxhIHBsaWt1IHphs2FtYbNhIHNp6i5cbiIKKworIzogbWVtbGluZS5jOjM2OTUKK21zZ2lkICIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdXNlIFwiOnJlY292ZXJcIiBvciBcInZpbSAtciAiCittc2dzdHIgIiAgICBKZZxsaSB0YWssIHRvIHW/eWogXCI6cmVjb3ZlclwiIGx1YiBcInZpbSAtciAiCisKKyM6IG1lbWxpbmUuYzozNjk3Cittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgYWJ5IG9kenlza2HmIHptaWFueSAocGF0cnogXCI6aGVscCByZWNvdmVyeSlcIikuXG4iCisKKyM6IG1lbWxpbmUuYzozNjk4Cittc2dpZCAiICAgIElmIHlvdSBkaWQgdGhpcyBhbHJlYWR5LCBkZWxldGUgdGhlIHN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiICAgIEplnGxpIGp1vyB0byB6cm9iabNlnCwgdXN18SBwbGlrIHd5bWlhbnkgXCIiCisKKyM6IG1lbWxpbmUuYzozNzAwCittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIGF2b2lkIHRoaXMgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIGFieSB1bmlrbrnmIHRlaiB3aWFkb21vnGNpLlxuIgorCisjOiBtZW1saW5lLmM6MzcxNCBtZW1saW5lLmM6MzcxOAorbXNnaWQgIlN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiUGxpayB3eW1pYW55IFwiIgorCisjOiBtZW1saW5lLmM6MzcxNSBtZW1saW5lLmM6MzcyMQorbXNnaWQgIlwiIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiXCIganW/IGlzdG5pZWplISIKKworIzogbWVtbGluZS5jOjM3MjQKK21zZ2lkICJWSU0gLSBBVFRFTlRJT04iCittc2dzdHIgIlZJTSAtIFVXQUdBIgorCisjOiBtZW1saW5lLmM6MzcyNgorbXNnaWQgIlN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlBsaWsgd3ltaWFueSBqdb8gaXN0bmllamUhIgorCisjOiBtZW1saW5lLmM6MzczMAorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0XG4iCisiJkFib3J0IgorbXNnc3RyICIiCisiJk90d/NyeiBSZWFkLU9ubHlcbiIKKyImRWR5dHVqIHBvbWltb1xuIgorIk8mZHR383J6XG4iCisiJlpha2/xY3pcbiIKKyImUG9yenXmIgorCisjOiBtZW1saW5lLmM6MzczMgorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0XG4iCisiJkFib3J0XG4iCisiJkRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorIiZPdHfzcnogUmVhZC1Pbmx5XG4iCisiJkVkeXR1aiBwb21pbW9cbiIKKyJPJmR0d/NyelxuIgorIiZaYWtv8WN6XG4iCisiJlBvcnp15lxuIgorIiZTa2FzdWogZ28iCisKKyM6IG1lbWxpbmUuYzozNzg5Cittc2dpZCAiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIKK21zZ3N0ciAiRTMyNjogWm5hbGV6aW9ubyB6Ynl0IHdpZWxlIHBsaWvzdyB3eW1pYW55IgorCisjOiBtZW51LmM6NjQKK21zZ2lkICJFMzI3OiBQYXJ0IG9mIG1lbnUtaXRlbSBwYXRoIGlzIG5vdCBzdWItbWVudSIKK21zZ3N0ciAiRTMyNzogQ3rqnOYgdHJvcHUgcHVua3R1IG1lbnUgbmllIG9rcmWcbGEgcG9kbWVudSIKKworIzogbWVudS5jOjY1Cittc2dpZCAiRTMyODogTWVudSBvbmx5IGV4aXN0cyBpbiBhbm90aGVyIG1vZGUiCittc2dzdHIgIkUzMjg6IE1lbnUgaXN0bmllamUgdHlsa28gdyBpbm55bSB0cnliaWUiCisKKyM6IG1lbnUuYzo2NgorbXNnaWQgIkUzMjk6IE5vIG1lbnUgb2YgdGhhdCBuYW1lIgorbXNnc3RyICJFMzI5OiBOaWUgbWEgbWVudSBvIHRlaiBuYXp3aWUiCisKKyM6IG1lbnUuYzo1MjUKK21zZ2lkICJFMzMwOiBNZW51IHBhdGggbXVzdCBub3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzMwOiBUcm9wIG1lbnUgbmllIG1vv2UgcHJvd2FkemnmIGRvIHBvZG1lbnUiCisKKyM6IG1lbnUuYzo1NjQKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTogTmllIHdvbG5vIGRvZGF3YeYgcHVua3TzdyBtZW51IHdwcm9zdCBkbyBwYXNrYSBtZW51IgorCisjOiBtZW51LmM6NTcwCittc2dpZCAiRTMzMjogU2VwYXJhdG9yIGNhbm5vdCBiZSBwYXJ0IG9mIGEgbWVudSBwYXRoIgorbXNnc3RyICJFMzMyOiBTZXBhcmF0b3IgbmllIG1vv2UgYnnmIGN66pxjabkgdHJvcHUgbWVudSIKKworIy4gTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtZW51LmM6MTA5NworbXNnaWQgIiIKKyJcbiIKKyItLS0gTWVudXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE1lbnUgLS0tIgorCisjOiBtZW51LmM6MjAxOQorbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAiT2RlcndpaiB0byBtZW51IgorCisjOiBtZW51LmM6MjA4NAorbXNnaWQgIkUzMzM6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBtZW51IGl0ZW0iCittc2dzdHIgIkUzMzM6IFRyb3AgbWVudSBtdXNpIHByb3dhZHpp5iBkbyBwdW5rdHUgbWVudSIKKworIzogbWVudS5jOjIxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNDogTWVudSBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMzM0OiBOaWUgem5hbGV6aW9ubyBtZW51OiAlcyIKKworIzogbWVudS5jOjIxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNTogTWVudSBub3QgZGVmaW5lZCBmb3IgJXMgbW9kZSIKK21zZ3N0ciAiRTMzNTogTWVudSBuaWUgamVzdCB6ZGVmaW5pb3dhbmUgZGxhIHRyeWJ1ICVzIgorCisjOiBtZW51LmM6MjIxMQorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogVHJvcCBtZW51IG11c2kgcHJvd2FkemnmIGRvIHBvZG1lbnUiCisKKyM6IG1lbnUuYzoyMjMyCittc2dpZCAiRTMzNzogTWVudSBub3QgZm91bmQgLSBjaGVjayBtZW51IG5hbWVzIgorbXNnc3RyICJFMzM3OiBOaWUgem5hbGV6aW9ubyBtZW51IC0gc3ByYXdknyBuYXp3eSBtZW51IgorCisjOiBtZXNzYWdlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVjdGVkIHdoaWxlIHByb2Nlc3NpbmcgJXM6IgorbXNnc3RyICJXeWtyeXRvIGKzuWQgcG9kY3phcyBwcnpldHdhcnphbmlhICVzOiIKKworIzogbWVzc2FnZS5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICU0bGQ6IgorbXNnc3RyICJ3aWVyc3ogJTRsZDoiCisKKyM6IG1lc3NhZ2UuYzo2NDcKK21zZ2lkICJbc3RyaW5nIHRvbyBsb25nXSIKK21zZ3N0ciAiW2NpuWcgemJ5dCBks3VnaV0iCisKKyM6IG1lc3NhZ2UuYzo3OTcKK21zZ2lkICJNZXNzYWdlcyBtYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiIKK21zZ3N0ciAiIgorIk9waWVrdW4ga29tdW5pa2F083c6IE1hcmNpbiBEYWxlY2tpIDxkYWxlY2tpQGNzLm5ldC5wbD4sIE1pa2+zYWogTWFjaG93c2tpICIKKyI8bWlrbWFjaEB3cC5wbD4iCisKKyM6IG1lc3NhZ2UuYzoxMDI1Cittc2dpZCAiSW50ZXJydXB0OiAiCittc2dzdHIgIlByemVyd2FuaWU6ICIKKworIzogbWVzc2FnZS5jOjEwMjgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIk5hY2mcbmlqIEVOVEVSIGFieSBrb250eW51b3dh5iIKKworIzogbWVzc2FnZS5jOjEwMzAKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICJOYWNpnG5paiBFTlRFUiBsdWIgd3Byb3dhZJ8ga29tZW5k6iBhYnkga29udHludW93YeYiCisKKyM6IG1lc3NhZ2UuYzoyMzUxCittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0gV2nqY2VqIC0tIgorCisjOiBtZXNzYWdlLmM6MjM1NAorbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiB3aWVyc3osIFNQQUNFL2I6IHN0cm9u6iwgZC91OiBw87Mgc3Ryb255LCBxOiB6YWtv8WN6KSIKKworIzogbWVzc2FnZS5jOjIzNTUKK21zZ2lkICIgKFJFVDogbGluZSwgU1BBQ0U6IHBhZ2UsIGQ6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUOiB3aWVyc3osIFNQQUNFOiBzdHJvbuosIGQ6IHDzsyBzdHJvbnksIHE6IHpha2/xY3plbmllKSIKKworIzogbWVzc2FnZS5jOjI5NzYgbWVzc2FnZS5jOjI5OTEKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAiUHl0YW5pZSIKKworIzogbWVzc2FnZS5jOjI5NzgKK21zZ2lkICIiCisiJlllc1xuIgorIiZObyIKK21zZ3N0ciAiIgorIiZUYWtcbiIKKyImTmllIgorCisjOiBtZXNzYWdlLmM6MzAxMQorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZUYWtcbiIKKyImTmllXG4iCisiWmFwaXN6ICZ3c3p5c3RraWVcbiIKKyImT2RyenXmIHdzenlzdGtpZVxuIgorIiZaYWtv8WN6IgorCisjOiBtZXNzYWdlLmM6MzA1MgorbXNnaWQgIlNhdmUgRmlsZSBkaWFsb2ciCittc2dzdHIgIkRpYWxvZyB6YXBpc3l3YW5pYSBwbGlrdSIKKworIzogbWVzc2FnZS5jOjMwNTQKK21zZ2lkICJPcGVuIEZpbGUgZGlhbG9nIgorbXNnc3RyICJEaWFsb2cgb3R3aWVyYW5pYSBwbGlrdSIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzozMTI1Cittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIkUzMzg6IFByenlrcm8gbWksIG5pZSBtYSBwcnplZ2y5ZGFya2kgcGxpa/N3IHcgdHJ5YmllIGtvbnNvbGkiCisKKyM6IG1pc2MxLmM6Mjc1NAorbXNnaWQgIlcxMDogV2FybmluZzogQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlIgorbXNnc3RyICJXMTA6IE9TVFJaRa9FTklFOiBabWlhbnkgdyBwbGlrdSB0eWxrbyBkbyBvZGN6eXR1IgorCisjOiBtaXNjMS5jOjMwMDIKK21zZ2lkICIxIG1vcmUgbGluZSIKK21zZ3N0ciAiMSB3aWVyc3ogd2nqY2VqIgorCisjOiBtaXNjMS5jOjMwMDQKK21zZ2lkICIxIGxpbmUgbGVzcyIKK21zZ3N0ciAiMSB3aWVyc3ogbW5pZWoiCisKKyM6IG1pc2MxLmM6MzAwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbW9yZSBsaW5lcyIKK21zZ3N0ciAiZG9kYW5vICVsZCB3aWVyc3p5IgorCisjOiBtaXNjMS5jOjMwMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGZld2VyIGxpbmVzIgorbXNnc3RyICJ1c3Vuaep0byAlbGQgd2llcnN6eSIKKworIzogbWlzYzEuYzozMDE0Cittc2dpZCAiIChJbnRlcnJ1cHRlZCkiCittc2dzdHIgIiAoUHJ6ZXJ3YW5lKSIKKworIzogbWlzYzEuYzo3NTYzCittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTogemFjaG93dWrqIHBsaWsuLi5cbiIKKworIy4gY2xvc2UgYWxsIG1lbWZpbGVzLCB3aXRob3V0IGRlbGV0aW5nCisjOiBtaXNjMS5jOjc1NzMKK21zZ2lkICJWaW06IEZpbmlzaGVkLlxuIgorbXNnc3RyICJWaW06IFpha2/xY3pvbm8uXG4iCisKKyM6IG1pc2MyLmM6Njk1IG1pc2MyLmM6NzExCittc2dpZCAiRVJST1I6ICIKK21zZ3N0ciAiQqOlRDogIgorCisjOiBtaXNjMi5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiW2J5dGVzXSB0b3RhbCBhbGxvYy1mcmVlZCAlbHUtJWx1LCBpbiB1c2UgJWx1LCBwZWFrIHVzZSAlbHVcbiIKK21zZ3N0ciAiIgorIlxuIgorIltiYWp083ddIHRvdGFsbmUgYWxva2FjamUtendvbG5pZW5pYSAlbHUtJWx1LCB3IHW/eXRrdSAlbHUsIG1ha3N5bWFsbmUgIgorInW/eWNpZSAlbHVcbiIKKworIzogbWlzYzIuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW3d5d2+zYW5pYV0gd3N6eXN0a2ljaCByZS9tYWxsb2MoKS3zdyAlbHUsIHdzenlzdGtpY2ggZnJlZSgpLfN3ICVsdVxuIgorIlxuIgorCisjOiBtaXNjMi5jOjc3MgorbXNnaWQgIkUzNDA6IExpbmUgaXMgYmVjb21pbmcgdG9vIGxvbmciCittc2dzdHIgIkUzNDA6IFdpZXJzeiBzdGFqZSBzaeogemJ5dCBks3VnaSIKKworIzogbWlzYzIuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MTogSW50ZXJuYWwgZXJyb3I6IGxhbGxvYyglbGQsICkiCittc2dzdHIgIkUzNDE6IFdld27qdHJ6bnkgYrO5ZDogbGFsbG9jKCVsZCwgKSIKKworIzogbWlzYzIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MjogT3V0IG9mIG1lbW9yeSEgIChhbGxvY2F0aW5nICVsdSBieXRlcykiCittc2dzdHIgIkUzNDI6IEJyYWsgcGFtaepjaSEgIChyZXplcndhY2phICVsdSBiYWp083cpIgorCisjOiBtaXNjMi5jOjI1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FsbGluZyBzaGVsbCB0byBleGVjdXRlOiBcIiVzXCIiCittc2dzdHIgIld5d2+zdWrqIHBvd7Nva+ogZG8gd3lrb25hbmlhOiBcIiVzXCIiCisKKyM6IG1pc2MyLmM6MjgxNQorbXNnaWQgIkU1NDU6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1NDU6IEJyYWsgZHd1a3JvcGthIgorCisjOiBtaXNjMi5jOjI4MTcgbWlzYzIuYzoyODQ0Cittc2dpZCAiRTU0NjogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFNTQ2OiBOaWVkb3p3b2xvbnkgdHJ5YiIKKworIzogbWlzYzIuYzoyODgzCittc2dpZCAiRTU0NzogSWxsZWdhbCBtb3VzZXNoYXBlIgorbXNnc3RyICJFNTQ3OiBOaWVkb3p3b2xvbnkgb2JyeXMgbXlzemtpIgorCisjOiBtaXNjMi5jOjI5MjMKK21zZ2lkICJFNTQ4OiBkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAiRTU0ODogb2N6ZWtpd2FubyBjeWZyeSIKKworIzogbWlzYzIuYzoyOTI4Cittc2dpZCAiRTU0OTogSWxsZWdhbCBwZXJjZW50YWdlIgorbXNnc3RyICJFNDU5OiBOaWVkb3p3b2xvbnkgcHJvY2VudCIKKworIzogbWlzYzIuYzozMjM4Cittc2dpZCAiRW50ZXIgZW5jcnlwdGlvbiBrZXk6ICIKK21zZ3N0ciAiV3Byb3dhZJ8ga2x1Y3ogZG8gb2Rrb2Rvd2FuaWE6ICIKKworIzogbWlzYzIuYzozMjM5Cittc2dpZCAiRW50ZXIgc2FtZSBrZXkgYWdhaW46ICIKK21zZ3N0ciAiV3Byb3dhZJ8gcG9ub3duaWUgdGVuIHNhbSBrbHVjejogIgorCisjOiBtaXNjMi5jOjMyNDkKK21zZ2lkICJLZXlzIGRvbid0IG1hdGNoISIKK21zZ3N0ciAiS2x1Y3plIG5pZSBwYXN1arkgZG8gc2llYmllISIKKworIzogbWlzYzIuYzozNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICIiCisiRTM0MzogTmlld7NhnGNpd3kgdHJvcDogJyoqW251bWVyXScgbXVzaSBieeYgbmEga2/xY3UgdHJvcHUgbHViIHBvIG5pbSBtdXNpICIKKyJieeYgJyVzJy4iCisKKyM6IG1pc2MyLmM6NTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ0OiBDYW4ndCBmaW5kIGRpcmVjdG9yeSBcIiVzXCIgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ0OiBOaWUgbW9n6iB6bmFsZZ/mIGthdGFsb2d1IFwiJXNcIiB3IGNkcGF0aCIKKworIzogbWlzYzIuYzo1MDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDU6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NTogTmllIG1vZ+ogem5hbGWf5iBwbGlrdSBcIiVzXCIgdyB0cm9waWUiCisKKyM6IG1pc2MyLmM6NTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ2OiBObyBtb3JlIGRpcmVjdG9yeSBcIiVzXCIgZm91bmQgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ2OiBLYXRhbG9ndSBcIiVzXCIgbmllIG1hIHdp6mNlaiB3IGNkcGF0aCIKKworIzogbWlzYzIuYzo1MDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDc6IE5vIG1vcmUgZmlsZSBcIiVzXCIgZm91bmQgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NzogUGxpa3UgXCIlc1wiIG5pZSBtYSB3aepjZWogdyB0cm9waWUiCisKKyM6IG1pc2MyLmM6NTMyMworbXNnaWQgIkU1NTA6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1NTA6IEJyYWsgZHd1a3JvcGthIgorCisjOiBtaXNjMi5jOjUzMzUKK21zZ2lkICJFNTUxOiBJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAiRTU1MTogTmllZG96d29sb25hIGN66pzmIgorCisjOiBtaXNjMi5jOjUzNDMKK21zZ2lkICJFNTUyOiBkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAiRTU1Mjogb2N6ZWtpd2FubyBjeWZyeSIKKworIy4gR2V0IGhlcmUgd2hlbiB0aGUgc2VydmVyIGNhbid0IGJlIGZvdW5kLgorIzogbmV0YmVhbnMuYzozOTYKK21zZ2lkICJDYW5ub3QgY29ubmVjdCB0byBOZXRiZWFucyAjMiIKK21zZ3N0ciAiTmllIG1vv25hIHBvs7ljennmIHogTmV0YmVhbnMgIzIiCisKKyM6IG5ldGJlYW5zLmM6NDA0Cittc2dpZCAiQ2Fubm90IGNvbm5lY3QgdG8gTmV0YmVhbnMiCittc2dzdHIgIk5pZSBtb79uYSBwb7O5Y3p55iB6IE5ldGJlYW5zIgorCisjOiBuZXRiZWFucy5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY4OiBXcm9uZyBhY2Nlc3MgbW9kZSBmb3IgTmV0QmVhbnMgY29ubmVjdGlvbiBpbmZvIGZpbGU6IFwiJXNcIiIKK21zZ3N0ciAiRTY2ODogQrPqZG55IHRyeWIgZG9zdOpwdSBwbGlrdSBpbmZvIHBvs7ljemVuaWEgTmV0QmVhbnM6IFwiJXNcIiIKKworIzogbmV0YmVhbnMuYzo3NDkKK21zZ2lkICJyZWFkIGZyb20gTmV0YmVhbnMgc29ja2V0IgorbXNnc3RyICJvZGN6eXQgeiBnbmlhemRhIE5ldGJlYW5zIgorCisjOiBuZXRiZWFucy5jOjE2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY1ODogTmV0QmVhbnMgY29ubmVjdGlvbiBsb3N0IGZvciBidWZmZXIgJWxkIgorbXNnc3RyICJFNjU4OiBCdWZvciAlbGQgdXRyYWNpsyBwb7O5Y3plbmllIHogTmV0QmVhbnMiCisKKyM6IG5vcm1hbC5jOjI5ODAKK21zZ2lkICJXYXJuaW5nOiB0ZXJtaW5hbCBjYW5ub3QgaGlnaGxpZ2h0IgorbXNnc3RyICJPU1RSWkWvRU5JRTogdGVybWluYWwgbmllIHd5a29udWplIHBvZJx3aWV0bGFuaWEiCisKKyM6IG5vcm1hbC5jOjMyNzYKK21zZ2lkICJFMzQ4OiBObyBzdHJpbmcgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ4OiBCcmFrIGNpuWd1IHBvZCBrdXJzb3JlbSIKKworIzogbm9ybWFsLmM6MzI3OAorbXNnaWQgIkUzNDk6IE5vIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ5OiBCcmFrIGlkZW50eWZpa2F0b3JhIHBvZCBrdXJzb3JlbSIKKworIzogbm9ybWFsLmM6NDUxOQorbXNnaWQgIkUzNTI6IENhbm5vdCBlcmFzZSBmb2xkcyB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUyOiBOaWUgbW9n6iBza2Fzb3dh5iB6d2luaepjaWEgeiBiaWW/uWO5ICdmb2xkbWV0aG9kJyIKKworIzogbm9ybWFsLmM6Njc0MAorbXNnaWQgIkU2NjI6IEF0IHN0YXJ0IG9mIGNoYW5nZWxpc3QiCittc2dzdHIgIkU2NjI6IE5hIHBvY3q5dGt1IGxpc3R5IHptaWFuIgorCisjOiBub3JtYWwuYzo2NzQyCittc2dpZCAiRTY2MzogQXQgZW5kIG9mIGNoYW5nZWxpc3QiCittc2dzdHIgIkU2NjM6IE5hIGtv8WN1IGxpc3R5IHptaWFuIgorCisjOiBub3JtYWwuYzo4MDAzCittc2dpZCAiVHlwZSAgOnF1aXQ8RW50ZXI+ICB0byBleGl0IFZpbSIKK21zZ3N0ciAid3Byb3dhZJ8gIDpxdWl0PEVudGVyPiAgICB6YWtv8WN6ZW5pZSBwcm9ncmFtdSIKKworIzogb3BzLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkIDEgdGltZSIKK21zZ3N0ciAiMSB3aWVyc3ogJXNlZCAxIHJheiIKKworIzogb3BzLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIxIHdpZXJzeiAlc2VkICVkIHJhenkiCisKKyM6IG9wcy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAxIHRpbWUiCittc2dzdHIgIiVsZCB3aWVyc3p5ICVzZWQgMSByYXoiCisKKyM6IG9wcy5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiJWxkIHdpZXJzenkgJXNlZCAlZCByYXp5IgorCisjOiBvcHMuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHRvIGluZGVudC4uLiAiCittc2dzdHIgIiVsZCB3aWVyc3p5IGRvIHdjaepjaWEuLi4gIgorCisjOiBvcHMuYzo3MTIKK21zZ2lkICIxIGxpbmUgaW5kZW50ZWQgIgorbXNnc3RyICIxIHdpZXJzeiB3Y2nqdHkgIgorCisjOiBvcHMuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAiJWxkIHdpZXJzenkgd2Np6nR5Y2ggIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogb3BzLmM6MTY3NQorbXNnaWQgImNhbm5vdCB5YW5rOyBkZWxldGUgYW55d2F5IgorbXNnc3RyICJuaWUgbW9n6iBza29waW93YeYsIG1pbW8gdG8ga2FzdWrqIgorCisjOiBvcHMuYzoyMjYxCittc2dpZCAiMSBsaW5lIGNoYW5nZWQiCittc2dzdHIgIjEgd2llcnN6IHptaWVuaW9ubyIKKworIzogb3BzLmM6MjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgY2hhbmdlZCIKK21zZ3N0ciAiJWxkIHdpZXJzenkgem1pZW5pb25vIgorCisjOiBvcHMuYzoyNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImZyZWVpbmcgJWxkIGxpbmVzIgorbXNnc3RyICJ6d2FsbmlhbSAlbGQgd2llcnN6eSIKKworIzogb3BzLmM6MjkyOAorbXNnaWQgIjEgbGluZSB5YW5rZWQiCittc2dzdHIgIjEgd2llcnN6IHByemVrb3Bpb3dhbm8iCisKKyM6IG9wcy5jOjI5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHlhbmtlZCIKK21zZ3N0ciAiJWxkIHdpZXJzenkgcHJ6ZWtvcGlvd2FueWNoIgorCisjOiBvcHMuYzozMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTM6IE5vdGhpbmcgaW4gcmVnaXN0ZXIgJXMiCittc2dzdHIgIkUzNTM6IFB1c3R5IHJlamVzdHIgJXMiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogb3BzLmM6Mzc2NgorbXNnaWQgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBSZWplc3RyeSAtLS0iCisKKyM6IG9wcy5jOjUwNzMKK21zZ2lkICJJbGxlZ2FsIHJlZ2lzdGVyIG5hbWUiCittc2dzdHIgIk5pZWRvendvbG9uYSBuYXp3YSByZWplc3RydSIKKworIzogb3BzLmM6NTE2MQorbXNnaWQgIiIKKyJcbiIKKyIjIFJlZ2lzdGVyczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgUmVqZXN0cnk6XG4iCisKKyM6IG9wcy5jOjUyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3NDogVW5rbm93biByZWdpc3RlciB0eXBlICVkIgorbXNnc3RyICJFNTc0OiBOaWV6bmFueSB0eXAgcmVqZXN0cnUgJWQiCisKKyM6IG9wcy5jOjU2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NDogSW52YWxpZCByZWdpc3RlciBuYW1lOiAnJXMnIgorbXNnc3RyICJFMzU0OiBOaWV3s2GcY2l3YSBuYXp3YSByZWplc3RydTogJyVzJyIKKworIzogb3BzLmM6NjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgQ29sczsgIgorbXNnc3RyICIlbGQgS29sdW1uOyAiCisKKyM6IG9wcy5jOjYwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VsZWN0ZWQgJXMlbGQgb2YgJWxkIExpbmVzOyAlbGQgb2YgJWxkIFdvcmRzOyAlbGQgb2YgJWxkIEJ5dGVzIgorbXNnc3RyICJXeWJyYW5vICVzJWxkIHogJWxkIFdpZXJzenk7ICVsZCB6ICVsZCBTs/N3OyAlbGQgeiAlbGQgQmFqdPN3IgorCisjOiBvcHMuYzo2MDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbCAlcyBvZiAlczsgTGluZSAlbGQgb2YgJWxkOyBXb3JkICVsZCBvZiAlbGQ7IEJ5dGUgJWxkIG9mICVsZCIKK21zZ3N0ciAiS29sICVzIHogJXM7IFdpZXJzeiAlbGQgeiAlbGQ7IFOzb3dvICVsZCB6ICVsZDsgQmFqdCAlbGQgeiAlbGQiCisKKyM6IG9wcy5jOjYwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCslbGQgZm9yIEJPTSkiCittc2dzdHIgIigrJWxkIGRsYSBCT00pIgorCisjOiBvcHRpb24uYzoxNjQzCittc2dpZCAiJTwlZiVoJW0lPVBhZ2UgJU4iCittc2dzdHIgIiU8JWYlaCVtJT1TdHJvbmEgJU4iCisKKyM6IG9wdGlvbi5jOjIwOTIKK21zZ2lkICJUaGFua3MgZm9yIGZseWluZyBWaW0iCittc2dzdHIgIkR6aepraSB6YSBsb3QgVmltZW0iCisKKyM6IG9wdGlvbi5jOjM0MTkgb3B0aW9uLmM6MzUzNQorbXNnaWQgIkU1MTg6IFVua25vd24gb3B0aW9uIgorbXNnc3RyICJFNTE4OiBOaWV6bmFuYSBvcGNqYSIKKworIzogb3B0aW9uLmM6MzQzMgorbXNnaWQgIkU1MTk6IE9wdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFNTE5OiBPcGNqYSBuaWUgamVzdCB3c3BvbWFnYW5hIgorCisjOiBvcHRpb24uYzozNDU3Cittc2dpZCAiRTUyMDogTm90IGFsbG93ZWQgaW4gYSBtb2RlbGluZSIKK21zZ3N0ciAiRTUyMDogTmllZG96d29sb25lIHcgbW9kZWxpbmUiCisKKyM6IG9wdGlvbi5jOjM1MjIKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0T3N0YXRuaWUgdXN0YXdpZW5pZSBwcnpleiAiCisKKyM6IG9wdGlvbi5jOjM2NjEKK21zZ2lkICJFNTIxOiBOdW1iZXIgcmVxdWlyZWQgYWZ0ZXIgPSIKK21zZ3N0ciAiRTUyMTogUG8gPSB3eW1hZ2FueSBqZXN0IG51bWVyIgorCisjOiBvcHRpb24uYzozOTg5IG9wdGlvbi5jOjQ2MTkKK21zZ2lkICJFNTIyOiBOb3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTUyMjogTmllIHpuYWxlemlvbm8gdyB0ZXJtY2FwIgorCisjOiBvcHRpb24uYzo0MDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1Mzk6IElsbGVnYWwgY2hhcmFjdGVyIDwlcz4iCittc2dzdHIgIkU1Mzk6IE5pZWRvendvbG9ueSB6bmFrIDwlcz4iCisKKyM6IG9wdGlvbi5jOjQ2MTEKK21zZ2lkICJFNTI5OiBDYW5ub3Qgc2V0ICd0ZXJtJyB0byBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1Mjk6IE5pZSBtb2fqIHVzdGF3aeYgJ3Rlcm0nIG5hIHB1c3R5IGNpuWciCisKKyM6IG9wdGlvbi5jOjQ2MTQKK21zZ2lkICJFNTMwOiBDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICJFNTMwOiBOaWUgbW9n6iB6bWllbmnmIHRlcm0gdyBHVUkiCisKKyM6IG9wdGlvbi5jOjQ2MTYKK21zZ2lkICJFNTMxOiBVc2UgXCI6Z3VpXCIgdG8gc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiRTUzMTogVb95aiBcIjpndWlcIiBkbyBvZHBhbGVuaWEgR1VJIgorCisjOiBvcHRpb24uYzo0NjQ1Cittc2dpZCAiRTU4OTogJ2JhY2t1cGV4dCcgYW5kICdwYXRjaG1vZGUnIGFyZSBlcXVhbCIKK21zZ3N0ciAiRTU4OTogJ2JhY2t1cGV4dCcgaSAncGF0Y2htb2RlJyBzuSB0b79zYW1lIgorCisjOiBvcHRpb24uYzo0ODYwCittc2dpZCAiRTYxNzogQ2Fubm90IGJlIGNoYW5nZWQgaW4gdGhlIEdUSysgMiBHVUkiCittc2dzdHIgIkU2MTc6IE5pZSBtb2fqIHptaWVuaeYgdyBHVEsrMiBHVUkiCisKKyM6IG9wdGlvbi5jOjUwMTYKK21zZ2lkICJFNTI0OiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTI0OiBCcmFrIGR3dWtyb3BrYSIKKworIzogb3B0aW9uLmM6NTAxOAorbXNnaWQgIkU1MjU6IFplcm8gbGVuZ3RoIHN0cmluZyIKK21zZ3N0ciAiRTUyNTogQ2m5ZyBvIHplcm93ZWogZLN1Z2+cY2kiCisKKyM6IG9wdGlvbi5jOjUwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUyNjogTWlzc2luZyBudW1iZXIgYWZ0ZXIgPCVzPiIKK21zZ3N0ciAiRTUyNjogQnJhayBudW1lcnUgcG8gPCVzPiIKKworIzogb3B0aW9uLmM6NTEwMAorbXNnaWQgIkU1Mjc6IE1pc3NpbmcgY29tbWEiCittc2dzdHIgIkU1Mjc6IEJyYWsgcHJ6ZWNpbmthIgorCisjOiBvcHRpb24uYzo1MTA3Cittc2dpZCAiRTUyODogTXVzdCBzcGVjaWZ5IGEgJyB2YWx1ZSIKK21zZ3N0ciAiRTUyODogTXVzaSBva3JlnGxh5iB3YXJ0b5zmICciCisKKyM6IG9wdGlvbi5jOjUxNDgKK21zZ2lkICJFNTk1OiBjb250YWlucyB1bnByaW50YWJsZSBvciB3aWRlIGNoYXJhY3RlciIKK21zZ3N0ciAiRTU5NTogemF3aWVyYSBuaWV3eZx3aWV0bGFsbnkgbHViIHN6ZXJva2kgem5hayIKKworIzogb3B0aW9uLmM6NTE5NworbXNnaWQgIkU1OTY6IEludmFsaWQgZm9udChzKSIKK21zZ3N0ciAiRTU5NjogTmllZG96d29sb25hIGN6Y2lvbmthL2tpIgorCisjOiBvcHRpb24uYzo1MjA1Cittc2dpZCAiRTU5NzogY2FuJ3Qgc2VsZWN0IGZvbnRzZXQiCittc2dzdHIgIkU1OTc6IG5pZSBtb2fqIHd5YnJh5iB6ZXN0YXd1IGN6Y2lvbmVrIgorCisjOiBvcHRpb24uYzo1MjA3Cittc2dpZCAiRTU5ODogSW52YWxpZCBmb250c2V0IgorbXNnc3RyICJFNTk4OiBOaWVkb3p3b2xvbnkgemVzdGF3IGN6Y2lvbmVrIgorCisjOiBvcHRpb24uYzo1MjE0Cittc2dpZCAiRTUzMzogY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAiRTUzMzogbmllIG1vZ+ogd3licmHmIHN6ZXJva2llaiBjemNpb25raSIKKworIzogb3B0aW9uLmM6NTIxNgorbXNnaWQgIkU1MzQ6IEludmFsaWQgd2lkZSBmb250IgorbXNnc3RyICJFNTM0OiBOaWVkb3p3b2xvbmEgc3plcm9rYSBjemNpb25rYSIKKworIzogb3B0aW9uLmM6NTQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciA8JWM+IgorbXNnc3RyICJFNTM1OiBOaWVkb3p3b2xvbnkgem5hayBwbyA8JWM+IgorCisjOiBvcHRpb24uYzo1NTk3Cittc2dpZCAiRTUzNjogY29tbWEgcmVxdWlyZWQiCittc2dzdHIgIkU1MzY6IHd5bWFnYW55IHByemVjaW5layIKKworIzogb3B0aW9uLmM6NTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJFNTM3OiAnY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIgorbXNnc3RyICJFNTM3OiAnY29tbWVudHN0cmluZycgbXVzaSBieeYgcHVzdHkgbHViIHphd2llcmHmICVzIgorCisjOiBvcHRpb24uYzo1Njc5Cittc2dpZCAiRTUzODogTm8gbW91c2Ugc3VwcG9ydCIKK21zZ3N0ciAiRTUzODogQnJhayB3c3BvbWFnYW5pYSBteXN6a2kiCisKKyM6IG9wdGlvbi5jOjU5NDcKK21zZ2lkICJFNTQwOiBVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJFNTQwOiBOaWVkb21rbmnqdHkgY2m5ZyB3eXJhv2XxIgorCisjOiBvcHRpb24uYzo1OTUxCittc2dpZCAiRTU0MTogdG9vIG1hbnkgaXRlbXMiCittc2dzdHIgIkU1NDE6IHpieXQgd2llbGUgZWxlbWVudPN3IgorCisjOiBvcHRpb24uYzo1OTUzCittc2dpZCAiRTU0MjogdW5iYWxhbmNlZCBncm91cHMiCittc2dzdHIgIkU1NDI6IG5pZXpiYWxhbnNvd2FuZSBncnVweSIKKworIzogb3B0aW9uLmM6NjE5MworbXNnaWQgIkU1OTA6IEEgcHJldmlldyB3aW5kb3cgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU1OTA6IG9rbm8gcG9kZ2y5ZHUganW/IGlzdG5pZWplIgorCisjOiBvcHRpb24uYzo2NDUwCittc2dpZCAiVzE3OiBBcmFiaWMgcmVxdWlyZXMgVVRGLTgsIGRvICc6c2V0IGVuY29kaW5nPXV0Zi04JyIKK21zZ3N0ciAiVzE3OiBBcmFic2tpIHd5bWFnYSBVVEYtOCwgenLzYiAnOnNldCBlbmNvZGluZz11dGYtOCciCisKKyM6IG9wdGlvbi5jOjY3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU5MzogTmVlZCBhdCBsZWFzdCAlZCBsaW5lcyIKK21zZ3N0ciAiRTU5MzogUG90cnplYnVq6iBwcnp5bmFqbW5pZWogJWQgd2llcnN6eSIKKworIzogb3B0aW9uLmM6Njc5MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTk0OiBOZWVkIGF0IGxlYXN0ICVkIGNvbHVtbnMiCittc2dzdHIgIkU1OTQ6IFBvdHJ6ZWJ1auogcHJ6eW5ham1uaWVqICVkIGtvbHVtbiIKKworIzogb3B0aW9uLmM6NzEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU1OiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUzNTU6IE5pZXpuYW5hIG9wY2phOiAlcyIKKworIzogb3B0aW9uLmM6NzIyMAorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEtvZHkgdGVybWluYWxhIC0tLSIKKworIzogb3B0aW9uLmM6NzIyMgorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEdsb2JhbG5lIHdhcnRvnGNpIG9wY2ppIC0tLSIKKworIzogb3B0aW9uLmM6NzIyNAorbXNnaWQgIiIKKyJcbiIKKyItLS0gTG9jYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTG9rYWxuZSB3YXJ0b5xjaSBvcGNqaSAtLS0iCisKKyM6IG9wdGlvbi5jOjcyMjYKK21zZ2lkICIiCisiXG4iCisiLS0tIE9wdGlvbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE9wY2plIC0tLSIKKworIzogb3B0aW9uLmM6NzkzMgorbXNnaWQgIkUzNTY6IGdldF92YXJwIEVSUk9SIgorbXNnc3RyICJFMzU2OiBCo6VEIGdldF92YXJwIgorCisjOiBvcHRpb24uYzo4OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTc6ICdsYW5nbWFwJzogTWF0Y2hpbmcgY2hhcmFjdGVyIG1pc3NpbmcgZm9yICVzIgorbXNnc3RyICJFMzU3OiAnbGFuZ21hcCc6IEJyYWsgcGFzdWq5Y2VnbyB6bmFrdSBkbGEgJXMiCisKKyM6IG9wdGlvbi5jOjg5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1ODogJ2xhbmdtYXAnOiBFeHRyYSBjaGFyYWN0ZXJzIGFmdGVyIHNlbWljb2xvbjogJXMiCittc2dzdHIgIkUzNTg6ICdsYW5nbWFwJzogRG9kYXRrb3dlIHpuYWtpIHBvIJxyZWRuaWt1OiAlcyIKKworIzogb3NfYW1pZ2EuYzoyODAKK21zZ2lkICJjYW5ub3Qgb3BlbiAiCittc2dzdHIgIm5pZSBtb2fqIG90d29yennmICIKKworIzogb3NfYW1pZ2EuYzozMTQKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06IE5pZSBtb2fqIG90d29yennmIG9rbmEhXG4iCisKKyM6IG9zX2FtaWdhLmM6MzM4Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAiUG90cnplYnVq6iBBbWlnYWRvcyB3IHdlcnNqaSAyLjA0IGx1YiBw859uaWVqc3q5XG4iCisKKyM6IG9zX2FtaWdhLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgJXMgdmVyc2lvbiAlbGRcbiIKK21zZ3N0ciAiUG90cnplYnVq6iAlcyB3IHdlcnNqaSAlbGRcbiIKKworIzogb3NfYW1pZ2EuYzo0MTYKK21zZ2lkICJDYW5ub3Qgb3BlbiBOSUw6XG4iCittc2dzdHIgIk5pZSBtb2fqIG90d29yennmIE5JTDpcbiIKKworIzogb3NfYW1pZ2EuYzo0MjcKK21zZ2lkICJDYW5ub3QgY3JlYXRlICIKK21zZ3N0ciAiTmllIG1vZ+ogc3R3b3J6eeYgIgorCisjOiBvc19hbWlnYS5jOjkwNQorIywgYy1mb3JtYXQKK21zZ2lkICJWaW0gZXhpdGluZyB3aXRoICVkXG4iCittc2dzdHIgIlZpbSBrb/FjenkgcHJhY+ogeiAlZFxuIgorCisjOiBvc19hbWlnYS5jOjkzNworbXNnaWQgImNhbm5vdCBjaGFuZ2UgY29uc29sZSBtb2RlID8hXG4iCittc2dzdHIgIm5pZSBtb2fqIHptaWVuaeYgdHJ5YnUga29uc29saSA/IVxuIgorCisjOiBvc19hbWlnYS5jOjEwMDMKK21zZ2lkICJtY2hfZ2V0X3NoZWxsc2l6ZTogbm90IGEgY29uc29sZT8/XG4iCittc2dzdHIgIm1jaF9nZXRfc2hlbGxzaXplOiBuaWUgamVzdCBrb25zb2y5Pz9cbiIKKworIy4gaWYgVmltIG9wZW5lZCBhIHdpbmRvdzogRXhlY3V0aW5nIGEgc2hlbGwgbWF5IGNhdXNlIGNyYXNoZXMKKyM6IG9zX2FtaWdhLmM6MTE1MgorbXNnaWQgIkUzNjA6IENhbm5vdCBleGVjdXRlIHNoZWxsIHdpdGggLWYgb3B0aW9uIgorbXNnc3RyICJFMzYwOiBOaWUgbW9n6iB3eWtvbmHmIHBvd7Nva2kgeiBvcGNquSAtZiIKKworIzogb3NfYW1pZ2EuYzoxMTkzIG9zX2FtaWdhLmM6MTI4MworbXNnaWQgIkNhbm5vdCBleGVjdXRlICIKK21zZ3N0ciAiTmllIG1vZ+ogd3lrb25h5iAiCisKKyM6IG9zX2FtaWdhLmM6MTE5NiBvc19hbWlnYS5jOjEyOTMKK21zZ2lkICJzaGVsbCAiCittc2dzdHIgInBvd7Nva2EgIgorCisjOiBvc19hbWlnYS5jOjEyMTYgb3NfYW1pZ2EuYzoxMzE4Cittc2dpZCAiIHJldHVybmVkXG4iCittc2dzdHIgIiB6d3LzY2mzXG4iCisKKyM6IG9zX2FtaWdhLmM6MTQ1OQorbXNnaWQgIkFOQ0hPUl9CVUZfU0laRSB0b28gc21hbGwuIgorbXNnc3RyICJBTkNIT1JfQlVGX1NJWkUgemJ5dCBuaXNraWUuIgorCisjOiBvc19hbWlnYS5jOjE0NjMKK21zZ2lkICJJL08gRVJST1IiCittc2dzdHIgIkKjpUQgSS9PIgorCisjOiBvc19tc3dpbi5jOjUzOQorbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICIuLi4ob2Jjaep0eSkiCisKKyM6IG9zX21zd2luLmM6NjQxCittc2dpZCAiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIidjb2x1bW5zJyBuaWUgd3lub3NpIDgwLCBuaWUgbW9n6iB3eWtvbmHmIHpld27qdHJ6bnljaCBrb21lbmQiCisKKyM6IG9zX21zd2luLmM6MTk3MworbXNnaWQgIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRTIzNzogV3li83IgZHJ1a2Fya2kgbmllIHBvd2nzZLMgc2nqIgorCisjOiBvc19tc3dpbi5jOjIwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG8gJXMgb24gJXMiCittc2dzdHIgImRvICVzIHogJXMiCisKKyM6IG9zX21zd2luLmM6MjAyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjEzOiBVbmtub3duIHByaW50ZXIgZm9udDogJXMiCittc2dzdHIgIkU2MTM6IE5pZXpuYW5hIGN6Y2lvbmthIGRydWthcmtpOiAlcyIKKworIzogb3NfbXN3aW4uYzoyMDc3IG9zX21zd2luLmM6MjA4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM4OiBQcmludCBlcnJvcjogJXMiCittc2dzdHIgIkUyMzg6IEKzuWQgZHJ1a2Fya2k6ICVzIgorCisjOiBvc19tc3dpbi5jOjIwODgKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJOaWV6bmFuZSIKKworIzogb3NfbXN3aW4uYzoyMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nICclcyciCittc2dzdHIgIld5ZHJ1a293YW5vICclcyciCisKKyM6IG9zX21zd2luLmM6MzIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDogTmllZG96d29sb25hIG5hendhIHplc3Rhd3Ugem5ha/N3IFwiJXNcIiB3IG5hendpZSBjemNpb25raSBcIiVzXCIiCisKKyM6IG9zX21zd2luLmM6MzIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ1OiBJbGxlZ2FsIGNoYXIgJyVjJyBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ1OiBOaWVkb3p3b2xvbnkgem5hayAnJWMnIHcgbmF6d2llIGN6Y2lvbmtpIFwiJXNcIiIKKworIzogb3NfcmlzY29zLmM6MTI1OQorbXNnaWQgIkUzNjY6IEludmFsaWQgJ29zZmlsZXR5cGUnIG9wdGlvbiAtIHVzaW5nIFRleHQiCittc2dzdHIgIkUzNjY6IE5pZXezYZxjaXdhIG9wY2phICdvc2ZpbGV0eXBlJyAtIHW/eXdhbSBUZXh0IgorCisjOiBvc191bml4LmM6OTI3Cittc2dpZCAiVmltOiBEb3VibGUgc2lnbmFsLCBleGl0aW5nXG4iCittc2dzdHIgIlZpbTogUG9kd/Nqbnkgc3lnbmGzLCB3eWNob2R66lxuIgorCisjOiBvc191bml4LmM6OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWwgJXNcbiIKK21zZ3N0ciAiVmltOiBaYbNhcGGzIJxtaWVydGVsbnkgc3lnbmGzICVzXG4iCisKKyM6IG9zX3VuaXguYzo5MzYKK21zZ2lkICJWaW06IENhdWdodCBkZWFkbHkgc2lnbmFsXG4iCittc2dzdHIgIlZpbTogWmGzYXBhsyCcbWllcnRlbG55IHN5Z25hs1xuIgorCisjOiBvc191bml4LmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAiT3R3aWVyYW5pZSBla3JhbnUgWCB0cndhs28gJWxkIG1zZWMiCisKKyM6IG9zX3VuaXguYzoxMjI2Cittc2dpZCAiIgorIlxuIgorIlZpbTogR290IFggZXJyb3JcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZpbTogRG9zdGGzIGKzuWQgWFxuIgorCisjOiBvc191bml4LmM6MTMzNAorbXNnaWQgIlRlc3RpbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIlRlc3QgZWtyYW51IFggbmllIHBvd2nzZLMgc2nqIgorCisjOiBvc191bml4LmM6MTQ3MworbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0aW1lZCBvdXQiCittc2dzdHIgIlBy82JhIG90d2FyY2lhIGVrcmFudSBYIHRyd2GzYSB6Ynl0IGSzdWdvIgorCisjOiBvc191bml4LmM6MzIyNyBvc191bml4LmM6MzkwNworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCAiCittc2dzdHIgIiIKKyJcbiIKKyJOaWUgbW9n6iB3eWtvbmHmIHBvd7Nva2kgIgorCisjOiBvc191bml4LmM6MzI3NQorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCBzaFxuIgorbXNnc3RyICIiCisiXG4iCisiTmllIG1vZ+ogd3lrb25h5iBwb3ezb2tpIHNoXG4iCisKKyM6IG9zX3VuaXguYzozMjc5IG9zX3VuaXguYzozOTEzCittc2dpZCAiIgorIlxuIgorInNoZWxsIHJldHVybmVkICIKK21zZ3N0ciAiIgorIlxuIgorInBvd7Nva2Egendy82Nps2EgIgorCisjOiBvc191bml4LmM6MzQxNAorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgY3JlYXRlIHBpcGVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOaWUgbW9n6iBzdHdvcnp55iBwb3Rva/N3XG4iCisKKyM6IG9zX3VuaXguYzozNDI5Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBmb3JrXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOaWUgbW9n6iByb3pkemllbGnmIHNp6lxuIgorCisjOiBvc191bml4LmM6MzkyMAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIktvbWVuZGEgemFrb/Fjem9uYVxuIgorCisjOiBvc191bml4LmM6NDE4NCBvc191bml4LmM6NDMwOSBvc191bml4LmM6NTk3NQorbXNnaWQgIlhTTVAgbG9zdCBJQ0UgY29ubmVjdGlvbiIKK21zZ3N0ciAiWFNNUCBzdHJhY2mzIHBvs7ljemVuaWUgSUNFIgorCisjOiBvc191bml4LmM6NTU1OAorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIk90d2FyY2llIGVrcmFudSBYIG5pZSBwb3dpb2SzbyBzaeoiCisKKyM6IG9zX3VuaXguYzo1ODgwCittc2dpZCAiWFNNUCBoYW5kbGluZyBzYXZlLXlvdXJzZWxmIHJlcXVlc3QiCittc2dzdHIgIlhTTVAgb2Jzs3VndWplIL+5ZGFuaWUgc2Ftb3phcGlzdSIKKworIzogb3NfdW5peC5jOjU5OTkKK21zZ2lkICJYU01QIG9wZW5pbmcgY29ubmVjdGlvbiIKK21zZ3N0ciAiWFNNUCBvdHdpZXJhIHBvs7ljemVuaWUiCisKKyM6IG9zX3VuaXguYzo2MDE4Cittc2dpZCAiWFNNUCBJQ0UgY29ubmVjdGlvbiB3YXRjaCBmYWlsZWQiCittc2dzdHIgIk9ic2Vyd2FjamEgcG+zuWN6ZW5pYSBYU01QIElDRSBuaWUgcG93aW9ks2Egc2nqIgorCisjOiBvc191bml4LmM6NjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJYU01QIFNtY09wZW5Db25uZWN0aW9uIGZhaWxlZDogJXMiCittc2dzdHIgIlhTTVAgU21jT3BlbkNvbm5lY3Rpb24gbmllIHBvd2lvZLNvIHNp6jogJXMiCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgIlcgd2llcnN6dSIKKworIzogb3NfdzMyZXhlLmM6NjUKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjb21tYW5kIGxpbmUuIgorbXNnc3RyICJOaWUgbW9n6iB6YXJlemVyd293YeYgcGFtaepjaSBkbGEgbGluaWkgcG9sZWNl8S4iCisKKyM6IG9zX3czMmV4ZS5jOjY2IG9zX3czMmV4ZS5jOjg5IG9zX3czMmV4ZS5jOjEwMAorbXNnaWQgIlZJTSBFcnJvciIKK21zZ3N0ciAiQrO5ZCBWSU0iCisKKyM6IG9zX3czMmV4ZS5jOjg5Cittc2dpZCAiQ291bGQgbm90IGxvYWQgdmltMzIuZGxsISIKK21zZ3N0ciAiTmllIG1vZ+ogemGzYWRvd2HmIHZpbTMyLmRsbCEiCisKKyM6IG9zX3czMmV4ZS5jOjk5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAiTmllIHpkb7Nhs2VtIHBvcHJhd2nmIHdza2Gfbmlr83cgZnVua2NqaSB3IERMTCEiCisKKyM6IG9zX3dpbjE2LmM6MzQyIG9zX3dpbjMyLmM6MzE5NworIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAicG93s29rYSB6d3LzY2mzYSAlZCIKKworIzogb3Nfd2luMzIuYzoyNjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0ICVzIGV2ZW50XG4iCittc2dzdHIgIlZpbTogWmGzYXBhsyB3eWRhcnplbmllICVzXG4iCisKKyM6IG9zX3dpbjMyLmM6MjY1NworbXNnaWQgImNsb3NlIgorbXNnc3RyICJ6YW1rbmlqIgorCisjOiBvc193aW4zMi5jOjI2NTkKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgInd5bG9ndWoiCisKKyM6IG9zX3dpbjMyLmM6MjY2MAorbXNnaWQgInNodXRkb3duIgorbXNnc3RyICJ6YWtv8WN6IgorCisjOiBvc193aW4zMi5jOjMxNTAKK21zZ2lkICJFMzcxOiBDb21tYW5kIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTM3MTogTmllIHpuYWxlemlvbm8ga29tZW5keSIKKworIzogb3Nfd2luMzIuYzozMTYzCittc2dpZCAiIgorIlZJTVJVTi5FWEUgbm90IGZvdW5kIGluIHlvdXIgJFBBVEguXG4iCisiRXh0ZXJuYWwgY29tbWFuZHMgd2lsbCBub3QgcGF1c2UgYWZ0ZXIgY29tcGxldGlvbi5cbiIKKyJTZWUgIDpoZWxwIHdpbjMyLXZpbXJ1biAgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiVklNUlVOLkVYRSBuaWUgem5hbGV6aW9ubyB3IHR3b2ltICRQQVRILlxuIgorIlpld27qdHJ6bmUga29tZW5keSBuaWUgYupkuSB3c3RyenltYW5lIHBvIHd5a29uYW5pdS5cbiIKKyJQYXRyeiAgOmhlbHAgd2ltMzItdmltcnVuICBhYnkgb3RyenltYeYgd2nqY2VqIGluZm9ybWFjamkuIgorCisjOiBvc193aW4zMi5jOjMxNjYKK21zZ2lkICJWaW0gV2FybmluZyIKK21zZ3N0ciAiVmltIE9zdHJ6Zb9lbmllIgorCisjOiBxdWlja2ZpeC5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcyOiBUb28gbWFueSAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzI6IFpieXQgd2llbGUgJSUlYyB3IGNpuWd1IGZvcm1hdHVquWN5bSIKKworIzogcXVpY2tmaXguYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MzogVW5leHBlY3RlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzM6IE5pZW9jemVraXdhbmUgJSUlYyB3IGNpuWd1IGZvcm1hdHVquWN5bSIKKworIzogcXVpY2tmaXguYzozMjUKK21zZ2lkICJFMzc0OiBNaXNzaW5nIF0gaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NDogQnJhayBdIHcgY2m5Z3UgZm9ybWF0dWq5Y3ltIgorCisjOiBxdWlja2ZpeC5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc1OiBVbnN1cHBvcnRlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzU6IE5pZXdzcG9tYWdhbmUgJSUlYyB3IGNpuWd1IGZvcm1hdHVquWN5bSIKKworIzogcXVpY2tmaXguYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NjogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmcgcHJlZml4IgorbXNnc3RyICJFMzc2OiBOaWVwb3ByYXduZSAlJSVjIHcgcHJlZmlrc2llIGNpuWd1IGZvcm1hdHVquWNlZ28iCisKKyM6IHF1aWNrZml4LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzc6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc3OiBOaWVwb3ByYXduZSAlJSVjIHcgY2m5Z3UgZm9ybWF0dWq5Y3ltIgorCisjOiBxdWlja2ZpeC5jOjM5MQorbXNnaWQgIkUzNzg6ICdlcnJvcmZvcm1hdCcgY29udGFpbnMgbm8gcGF0dGVybiIKK21zZ3N0ciAiRTM3ODogJ2Vycm9yZm9ybWF0JyBuaWUgemF3aWVyYSB3em9yY2EiCisKKyM6IHF1aWNrZml4LmM6NTAxCittc2dpZCAiRTM3OTogTWlzc2luZyBvciBlbXB0eSBkaXJlY3RvcnkgbmFtZSIKK21zZ3N0ciAiRTM3OTogUHVzdGEgbmF6d2Ega2F0YWxvZ3UgbHViIGplaiBicmFrIgorCisjOiBxdWlja2ZpeC5jOjk5MAorbXNnaWQgIkU1NTM6IE5vIG1vcmUgaXRlbXMiCittc2dzdHIgIkU1NTM6IE5pZSBtYSB3aepjZWogZWxlbWVudPN3IgorCisjOiBxdWlja2ZpeC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCVkIG9mICVkKSVzJXM6ICIKK21zZ3N0ciAiKCVkIHogJWQpJXMlczogIgorCisjOiBxdWlja2ZpeC5jOjEyMzEKK21zZ2lkICIgKGxpbmUgZGVsZXRlZCkiCittc2dzdHIgIiAod2llcnN6IHNrYXNvd2FueSkiCisKKyM6IHF1aWNrZml4LmM6MTQ0NAorbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDogTmEgZG9sZSBzdG9zdSBxdWlja2ZpeCIKKworIzogcXVpY2tmaXguYzoxNDUzCittc2dpZCAiRTM4MTogQXQgdG9wIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgxOiBOYSBn83J6ZSBzdG9zdSBxdWlja2ZpeCIKKworIzogcXVpY2tmaXguYzoxNDY1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAibGlzdGEgYrPqZPN3ICVkIHogJWQ7ICVkIGKz6mTzdyIKKworIzogcXVpY2tmaXguYzoxOTQzCittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4MjogTmllIG1vZ+ogemFwaXNh5iwgb3BjamEgJ2J1ZnR5cGUnIGplc3QgdXN0YXdpb25hIgorCisjOiByZWdleHAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2OTogaW52YWxpZCBpdGVtIGluICVzJSVbXSIKK21zZ3N0ciAiRTM2OTogTmlld7NhnGNpd3kgZWxlbWVudCB3ICVzJSVbXSIKKworIzogcmVnZXhwLmM6ODQwCittc2dpZCAiRTMzOTogUGF0dGVybiB0b28gbG9uZyIKK21zZ3N0ciAiRTMzOTogWmJ5dCBks3VnaSB3em9yemVjIgorCisjOiByZWdleHAuYzoxMDExCittc2dpZCAiRTUwOiBUb28gbWFueSBcXHooIgorbXNnc3RyICJFNTA6IFpieXQgd2llbGUgXFx6KCIKKworIzogcmVnZXhwLmM6MTAyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTE6IFRvbyBtYW55ICVzKCIKK21zZ3N0ciAiRTUxOiBaYnl0IHdpZWxlICVzKCIKKworIzogcmVnZXhwLmM6MTA3OQorbXNnaWQgIkU1MjogVW5tYXRjaGVkIFxceigiCittc2dzdHIgIkU1MjogTmllc3Bhcm93YW55IFxceigiCisKKyM6IHJlZ2V4cC5jOjEwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOiBVbm1hdGNoZWQgJXMlJSgiCittc2dzdHIgIkU1MzogTmllc3Bhcm93YW55ICVzJSUoIgorCisjOiByZWdleHAuYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NDogVW5tYXRjaGVkICVzKCIKK21zZ3N0ciAiRTU0OiBOaWVzcGFyb3dhbnkgJXMoIgorCisjOiByZWdleHAuYzoxMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTogVW5tYXRjaGVkICVzKSIKK21zZ3N0ciAiRTU1OiBOaWVzcGFyb3dhbnkgJXMpIgorCisjOiByZWdleHAuYzoxMjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjogJXMqIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1Njogb3BlcmFuZCAlcyogbfNnsyBieeYgcHVzdHkiCisKKyM6IHJlZ2V4cC5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3OiAlcysgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU3OiBvcGVyYW5kICVzKyBt82ezIGJ55iBwdXN0eSIKKworIzogcmVnZXhwLmM6MTMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzQCIKK21zZ3N0ciAiRTU5OiBuaWVkb3p3b2xvbnkgem5hayBwbyAlc0AiCisKKyM6IHJlZ2V4cC5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU4OiAlc3sgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU4OiBvcGVyYW5kICVzeyBt82ezIGJ55iBwdXN0eSIKKworIzogcmVnZXhwLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA6IFRvbyBtYW55IGNvbXBsZXggJXN7Li4ufXMiCittc2dzdHIgIkU2MDogWmJ5dCB3aWVsZSB6s2+/b255Y2ggJXN7Li4ufSIKKworIzogcmVnZXhwLmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE6IE5lc3RlZCAlcyoiCittc2dzdHIgIkU2MTogWmFnbmllv2S/b25lICVzKiIKKworIzogcmVnZXhwLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI6IE5lc3RlZCAlcyVjIgorbXNnc3RyICJFNjI6IFphZ25pZb9kv29uZSAlcyVjIgorCisjOiByZWdleHAuYzoxNDkzCittc2dpZCAiRTYzOiBpbnZhbGlkIHVzZSBvZiBcXF8iCittc2dzdHIgIkU2MzogTmllZG96d29sb25lIHW/eWNpZSBcXF8iCisKKyM6IHJlZ2V4cC5jOjE1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY0OiAlcyVjIGZvbGxvd3Mgbm90aGluZyIKK21zZ3N0ciAiRTY0OiAlcyVjIHBvIG5pY3p5bSIKKworIzogcmVnZXhwLmM6MTU5NAorbXNnaWQgIkU2NTogSWxsZWdhbCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiRTY1OiBOaWV3s2GcY2l3ZSBvZHdvs2FuaWUgd3N0ZWN6bmUiCisKKyM6IHJlZ2V4cC5jOjE2MDcKK21zZ2lkICJFNjY6IFxceiggbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY2OiBcXHooIGplc3QgbmllZG96d29sb25lIHcgdHltIG1pZWpzY3UiCisKKyM6IHJlZ2V4cC5jOjE2MjYKK21zZ2lkICJFNjc6IFxcejEgZXQgYWwuIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU2NzogXFx6MSBpIHBvZG9ibmUgc7kgbmllZG96d29sb25lIHcgdHltIG1pZWpzY3UiCisKKyM6IHJlZ2V4cC5jOjE2MzcKK21zZ2lkICJFNjg6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxceiIKK21zZ3N0ciAiRTY4OiBuaWVkb3B1c3pjemFsbnkgem5hayBwbyBcXHoiCisKKyM6IHJlZ2V4cC5jOjE2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY5OiBNaXNzaW5nIF0gYWZ0ZXIgJXMlJVsiCittc2dzdHIgIkU2OTogQnJhayBdIHBvICVzJSVbIgorCisjOiByZWdleHAuYzoxNzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MDogRW1wdHkgJXMlJVtdIgorbXNnc3RyICJFNzA6IFB1c3R5ICVzJSVbXSIKKworIzogcmVnZXhwLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNzE6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzJSUiCittc2dzdHIgIkU3MTogTmllZG96d29sb255IHpuYWsgcG8gJXMlJSIKKworIzogcmVnZXhwLmM6MjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTU0OiBTeW50YXggZXJyb3IgaW4gJXN7Li4ufSIKK21zZ3N0ciAiRTU1NDogQrO5ZCBza7NhZG5pIHcgJXN7Li4ufSIKKworIzogcmVnZXhwLmM6Mjg2NSByZWdleHAuYzozMDE4Cittc2dpZCAiRTM2MTogQ3Jhc2ggaW50ZXJjZXB0ZWQ7IHJlZ2V4cCB0b28gY29tcGxleD8iCittc2dzdHIgIkUzNjE6IFByemVjaHd5Y29ubyB6YbNhbWFuaWU7IHJlZ2V4cCB6Ynl0IHqzb79vbnk/IgorCisjOiByZWdleHAuYzozMDA2IHJlZ2V4cC5jOjMwMTUKK21zZ2lkICJFMzYzOiBwYXR0ZXJuIGNhdXNlZCBvdXQtb2Ytc3RhY2sgZXJyb3IiCittc2dzdHIgIkUzNjM6IHd6b3J6ZWMgc3Bvd29kb3dhsyBis7lkIG91dC1vZi1zdGFjayIKKworIzogcmVnZXhwLmM6MzI2MAorbXNnaWQgIkV4dGVybmFsIHN1Ym1hdGNoZXM6XG4iCittc2dzdHIgIlpld27qdHJ6bmUgcG9kZG9wYXNvd2FuaWE6XG4iCisKKyM6IHNjcmVlbi5jOjIxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0tJTNsZCBsaW5lcyBmb2xkZWQgIgorbXNnc3RyICIrLS0lM2xkIHdpZXJzenkgendpbmnqdG8gIgorCisjOiBzY3JlZW4uYzo3OTk2Cittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgVi1aQU1JQU5BIgorCisjOiBzY3JlZW4uYzo4MDAwCittc2dpZCAiIFJFUExBQ0UiCittc2dzdHIgIiBaQU1JQU5BIgorCisjOiBzY3JlZW4uYzo4MDA1Cittc2dpZCAiIFJFVkVSU0UiCittc2dzdHIgIiBORUdBVFlXIgorCisjOiBzY3JlZW4uYzo4MDA3Cittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIFdQUk9XQURaQU5JRSIKKworIzogc2NyZWVuLmM6ODAxMAorbXNnaWQgIiAoaW5zZXJ0KSIKK21zZ3N0ciAiICh3cHJvd2FkemFuaWUpIgorCisjOiBzY3JlZW4uYzo4MDEyCittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiICh6YW1pYW5hKSIKKworIzogc2NyZWVuLmM6ODAxNAorbXNnaWQgIiAodnJlcGxhY2UpIgorbXNnc3RyICIgKHYtemFtaWFuYSkiCisKKyM6IHNjcmVlbi5jOjgwMTcKK21zZ2lkICIgSGVicmV3IgorbXNnc3RyICIgSGVicmFqc2tpIgorCisjOiBzY3JlZW4uYzo4MDI4Cittc2dpZCAiIEFyYWJpYyIKK21zZ3N0ciAiIEFyYWJza2kiCisKKyM6IHNjcmVlbi5jOjgwMzEKK21zZ2lkICIgKGxhbmcpIgorbXNnc3RyICIgKGrqenlrKSIKKworIzogc2NyZWVuLmM6ODAzNQorbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKHdrbGVqYW5pZSkiCisKKyM6IHNjcmVlbi5jOjgwNDgKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgV0laVUFMTlkiCisKKyM6IHNjcmVlbi5jOjgwNDkKK21zZ2lkICIgVklTVUFMIExJTkUiCittc2dzdHIgIiBXSVpVQUxOWSBMSU5JT1dZIgorCisjOiBzY3JlZW4uYzo4MDUwCittc2dpZCAiIFZJU1VBTCBCTE9DSyIKK21zZ3N0ciAiIFdJWlVBTE5ZIEJMT0tPV1kiCisKKyM6IHNjcmVlbi5jOjgwNTEKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIgWkFaTkFDWkFOSUUiCisKKyM6IHNjcmVlbi5jOjgwNTIKK21zZ2lkICIgU0VMRUNUIExJTkUiCittc2dzdHIgIiBaQVpOQUNaQU5JRSBMSU5JT1dFIgorCisjOiBzY3JlZW4uYzo4MDUzCittc2dpZCAiIFNFTEVDVCBCTE9DSyIKK21zZ3N0ciAiIFpBWk5BQ1pBTklFIEJMT0tPV0UiCisKKyM6IHNjcmVlbi5jOjgwNjggc2NyZWVuLmM6ODEzMQorbXNnaWQgInJlY29yZGluZyIKK21zZ3N0ciAiemFwaXMiCisKKyM6IHNlYXJjaC5jOjM3Cittc2dpZCAic2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIgorbXNnc3RyICJzenVrYW5pZSBkb2Jps28gR9NSWTsga29udHludWFjamEgb2QgS0/RQ0EiCisKKyM6IHNlYXJjaC5jOjM4Cittc2dpZCAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIgorbXNnc3RyICJzenVrYW5pZSBkb2Jps28gS0/RQ0E7IGtvbnR5bnVhY2phIG9kIEfTUlkiCisKKyM6IHNlYXJjaC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzgzOiBJbnZhbGlkIHNlYXJjaCBzdHJpbmc6ICVzIgorbXNnc3RyICJFMzgzOiBOaWV3s2GcY2l3eSBjablnIGRvIHN6dWthbmlhOiAlcyIKKworIzogc2VhcmNoLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODQ6IHNlYXJjaCBoaXQgVE9QIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NDogc3p1a2FuaWUgZG9iabNvIEfTUlkgYmV6IHpuYWxlemllbmlhOiAlcyIKKworIzogc2VhcmNoLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODU6IHNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NTogc3p1a2FuaWUgZG9iabNvIEtP0UNBIGJleiB6bmFsZXppZW5pYSA6ICVzIgorCisjOiBzZWFyY2guYzoxMjQ5Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiBPY3pla3Vq6iAnPycgbHViICcvJyBwbyAnOyciCisKKyM6IHNlYXJjaC5jOjM3NTgKK21zZ2lkICIgKGluY2x1ZGVzIHByZXZpb3VzbHkgbGlzdGVkIG1hdGNoKSIKK21zZ3N0ciAiICh6YXdpZXJhIHBvcHJ6ZWRuaW8gd3ltaWVuaW9uZSBkb3Bhc293YW5pZSkiCisKKyMuIGN1cnNvciBhdCBzdGF0dXMgbGluZQorIzogc2VhcmNoLmM6Mzc3OAorbXNnaWQgIi0tLSBJbmNsdWRlZCBmaWxlcyAiCittc2dzdHIgIi0tLSBaYXdhcnRlIHBsaWtpICIKKworIzogc2VhcmNoLmM6Mzc4MAorbXNnaWQgIm5vdCBmb3VuZCAiCittc2dzdHIgIm5pZSB6bmFsZXppb25vIgorCisjOiBzZWFyY2guYzozNzgxCittc2dpZCAiaW4gcGF0aCAtLS1cbiIKK21zZ3N0ciAidyB0cm9waWUgLS0tXG4iCisKKyM6IHNlYXJjaC5jOjM4MjAKK21zZ2lkICIgIChBbHJlYWR5IGxpc3RlZCkiCittc2dzdHIgIiAgKEp1vyB3eW1pZW5pb25lKSIKKworIzogc2VhcmNoLmM6MzgyMgorbXNnaWQgIiAgTk9UIEZPVU5EIgorbXNnc3RyICIgIE5JRSBaTkFMRVpJT05PIgorCisjOiBzZWFyY2guYzozODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGluY2x1ZGVkIGZpbGU6ICVzIgorbXNnc3RyICJQcnplZ2y5ZCB3s7ljem9uZWdvIHBsaWt1OiAlcyIKKworIzogc2VhcmNoLmM6NDA5MgorbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4NzogV3pvcnplYyBwYXN1amUgdyBiaWW/uWN5bSB3aWVyc3p1IgorCisjOiBzZWFyY2guYzo0MjM1Cittc2dpZCAiQWxsIGluY2x1ZGVkIGZpbGVzIHdlcmUgZm91bmQiCittc2dzdHIgIldzemVsa2llIHezuWN6YW5lIHBsaWtpIG9kbmFsZXppb25vIgorCisjOiBzZWFyY2guYzo0MjM3Cittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIkJyYWsgd7O5Y3phbnljaCBwbGlr83ciCisKKyM6IHNlYXJjaC5jOjQyNTMKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IE5pZSB6bmFsYXqzZW0gZGVmaW5pY2ppIgorCisjOiBzZWFyY2guYzo0MjU1Cittc2dpZCAiRTM4OTogQ291bGRuJ3QgZmluZCBwYXR0ZXJuIgorbXNnc3RyICJFMzg5OiBOaWUgem5hbGF6s2VtIHd6b3JjYSIKKworIzogc3ludGF4LmM6MzA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkwOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTM5MDogTmllZG96d29sb255IGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6MzIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkxOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MTogTmllIG1hIHRha2llZ28ga2xhc3RyYSBza7NhZG5pOiAlcyIKKworIzogc3ludGF4LmM6MzM5NAorbXNnaWQgIk5vIFN5bnRheCBpdGVtcyBkZWZpbmVkIGZvciB0aGlzIGJ1ZmZlciIKK21zZ3N0ciAiQnJhayBlbGVtZW5083cgc2uzYWRuaSBva3JlnGxvbnljaCBkbGEgdGVnbyBidWZvcmEiCisKKyM6IHN5bnRheC5jOjM0MDIKK21zZ2lkICJzeW5jaW5nIG9uIEMtc3R5bGUgY29tbWVudHMiCittc2dzdHIgInN5bmNocm9uaXphY2phIGtvbWVudGFyenkgdyBzdHlsdSBDIgorCisjOiBzeW50YXguYzozNDEwCittc2dpZCAibm8gc3luY2luZyIKK21zZ3N0ciAiYnJhayBzeW5jaHJvbml6YWNqaSIKKworIzogc3ludGF4LmM6MzQxMworbXNnaWQgInN5bmNpbmcgc3RhcnRzICIKK21zZ3N0ciAicG9jerl0ZWsgc3luY2hyb25pemFjamkiCisKKyM6IHN5bnRheC5jOjM0MTUgc3ludGF4LmM6MzQ5MAorbXNnaWQgIiBsaW5lcyBiZWZvcmUgdG9wIGxpbmUiCittc2dzdHIgIiB3aWVyc3p5IHByemVkIGfzcm65IGxpbmm5IgorCisjOiBzeW50YXguYzozNDIwCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggc3luYyBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gRWxlbWVudHkgc3luY2hyb25pemFjamkgc2uzYWRuaSAtLS0iCisKKyM6IHN5bnRheC5jOjM0MjUKK21zZ2lkICIiCisiXG4iCisic3luY2luZyBvbiBpdGVtcyIKK21zZ3N0ciAiIgorIlxuIgorInN5bmNocm9uaXp1auogbmEgZWxlbWVudGFjaCIKKworIzogc3ludGF4LmM6MzQzMQorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBFbGVtZW50eSBza7NhZG5pIC0tLSIKKworIzogc3ludGF4LmM6MzQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MjogTmllIG1hIHRha2llZ28ga2xhc3RyYSBza7NhZG5pOiAlcyIKKworIzogc3ludGF4LmM6MzQ4MAorbXNnaWQgIm1pbmltYWwgIgorbXNnc3RyICJtaW5pbWFsbmllICIKKworIzogc3ludGF4LmM6MzQ4NworbXNnaWQgIm1heGltYWwgIgorbXNnc3RyICJtYWtzeW1hbG5pZSAiCisKKyM6IHN5bnRheC5jOjM0OTkKK21zZ2lkICI7IG1hdGNoICIKK21zZ3N0ciAiOyBwYXN1amUgIgorCisjOiBzeW50YXguYzozNTAxCittc2dpZCAiIGxpbmUgYnJlYWtzIgorbXNnc3RyICJ6bmFr83cgbm93ZWdvIHdpZXJzemEiCisKKyM6IHN5bnRheC5jOjQxMzUKK21zZ2lkICJFMzkzOiBncm91cFt0XWhlcmUgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTM6IGdyb3VwW3RdaGVyZSBuaWVkb3p3b2xvbmUgdyB0eW0gbWllanNjdSIKKworIzogc3ludGF4LmM6NDE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk0OiBEaWRuJ3QgZmluZCByZWdpb24gaXRlbSBmb3IgJXMiCittc2dzdHIgIkUzOTQ6IE5pZSB6bmFsYXqzZW0gZWxlbWVudPN3IHJlZ2lvbnUgZGxhICVzIgorCisjOiBzeW50YXguYzo0MTg3Cittc2dpZCAiRTM5NTogY29udGFpbnMgYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTU6IGFyZ3VtZW50IGNvbnRhaW5zIG5pZWRvendvbG9ueSB3IHR5bSBtaWVqc2N1IgorCisjOiBzeW50YXguYzo0MTk4Cittc2dpZCAiRTM5NjogY29udGFpbmVkaW4gYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTY6IGFyZ3VtZW50IGNvbnRhaW5lZGluIG5pZWRvendvbG9ueSB3IHR5bSBtaWVqc2N1IgorCisjOiBzeW50YXguYzo0Mjc2Cittc2dpZCAiRTM5NzogRmlsZW5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUzOTc6IFd5bWFnYW5hIG5hendhIHBsaWt1IgorCisjOiBzeW50YXguYzo0NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODogQnJhayAnPSc6ICVzIgorCisjOiBzeW50YXguYzo0NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBzeW50YXggcmVnaW9uICVzIgorbXNnc3RyICJFMzk5OiBaYSBtYbNvIGFyZ3VtZW5083c6IHN5bnRheCByZWdpb24gJXMiCisKKyM6IHN5bnRheC5jOjUxMDMKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDogQnJhayBzcGVjeWZpa2Fjamkga2xhc3RyYSIKKworIzogc3ludGF4LmM6NTE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDAxOiBQYXR0ZXJuIGRlbGltaXRlciBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDAxOiBCcmFrIG9ncmFuaWN6bmlrYSB3em9yY2E6ICVzIgorCisjOiBzeW50YXguYzo1MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDI6IEdhcmJhZ2UgYWZ0ZXIgcGF0dGVybjogJXMiCittc2dzdHIgIkU0MDI6IIxtaWVjaSBwbyB3em9yY3U6ICVzIgorCisjOiBzeW50YXguYzo1MzA1Cittc2dpZCAiRTQwMzogc3ludGF4IHN5bmM6IGxpbmUgY29udGludWF0aW9ucyBwYXR0ZXJuIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTQwMzogc3ludGF4IHN5bmM6IHdpZWxva3JvdG5pZSBwb2RhbmUgd3pvcmNlIGtvbnR5bnVhY2ppIHdpZXJzemEiCisKKyM6IHN5bnRheC5jOjUzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNDogSWxsZWdhbCBhcmd1bWVudHM6ICVzIgorbXNnc3RyICJFNDA0OiBOaWVkb3p3b2xvbmUgYXJndW1lbnR5OiAlcyIKKworIzogc3ludGF4LmM6NTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiBCcmFrIHpuYWt1IHLzd25vnGNpOiAlcyIKKworIzogc3ludGF4LmM6NTQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA2OiBFbXB0eSBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MDY6IFB1c3R5IGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6NTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA3OiAlcyBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNDA3OiAlcyBqZXN0IG5pZWRvendvbG9uZSB3IHR5bSBtaWVqc2N1IgorCisjOiBzeW50YXguYzo1NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDg6ICVzIG11c3QgYmUgZmlyc3QgaW4gY29udGFpbnMgbGlzdCIKK21zZ3N0ciAiRTQwODogJXMgbXVzaSBieeYgcGllcndzemUgdyBsaZxjaWUgY29udGFpbnMiCisKKyM6IHN5bnRheC5jOjU1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwOTogVW5rbm93biBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTQwOTogTmllem5hbmEgbmF6d2EgZ3J1cHk6ICVzIgorCisjOiBzeW50YXguYzo1NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTA6IEludmFsaWQgOnN5bnRheCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTQxMDogTmlld7NhnGNpd2EgcG9ka29tZW5kYSA6c3ludGF4IDogJXMiCisKKyM6IHN5bnRheC5jOjYxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMTogaGlnaGxpZ2h0IGdyb3VwIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MTE6IG5pZSB6bmFsZXppb25vIGdydXB5IHBvZJx3aWV0bGFuaWE6ICVzIgorCisjOiBzeW50YXguYzo2MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTI6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEyOiBaYnl0IG1hs28gYXJndW1lbnTzdzogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDEzOiBUb28gbWFueSBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTM6IFpieXQgd2llbGUgYXJndW1lbnTzdzogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjE4NworbXNnaWQgIkU0MTQ6IGdyb3VwIGhhcyBzZXR0aW5ncywgaGlnaGxpZ2h0IGxpbmsgaWdub3JlZCIKK21zZ3N0ciAiRTQxNDogZ3J1cGEgbWEgdXN0YXdpZW5pYTsgemlnbm9yb3dhbmUgcG9ks7ljemVuaWUgcG9knHdpZXRsYW5pYSIKKworIzogc3ludGF4LmM6NjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE1OiB1bmV4cGVjdGVkIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE1OiBuaWVvY3pla2l3YW55IHpuYWsgcvN3bm+cY2k6ICVzIgorCisjOiBzeW50YXguYzo2MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IGJyYWsgem5ha3UgcvN3bm+cY2k6ICVzIgorCisjOiBzeW50YXguYzo2MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTc6IG1pc3NpbmcgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDE3OiBicmFrIGFyZ3VtZW50dTogJXMiCisKKyM6IHN5bnRheC5jOjY0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6IE5pZWRvendvbG9uYSB3YXJ0b5zmOiAlcyIKKworIzogc3ludGF4LmM6NjUzNgorbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6IEtvbG9yIEZHIG5pZXpuYW55IgorCisjOiBzeW50YXguYzo2NTQ3Cittc2dpZCAiRTQyMDogQkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQyMDogS29sb3IgQkcgbmllem5hbnkiCisKKyM6IHN5bnRheC5jOjY2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMTogQ29sb3IgbmFtZSBvciBudW1iZXIgbm90IHJlY29nbml6ZWQ6ICVzIgorbXNnc3RyICJFNDIxOiBOYXp3YSBsdWIgbGljemJhIGtvbG9ydSBuaWVyb3pwb3puYW5hOiAlcyIKKworIzogc3ludGF4LmM6NjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIyOiB0ZXJtaW5hbCBjb2RlIHRvbyBsb25nOiAlcyIKK21zZ3N0ciAiRTQyMjogemEgZLN1Z2kga29kIHRlcm1pbmFsYTogJXMiCisKKyM6IHN5bnRheC5jOjY4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMzogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MjM6IE5pZWRvendvbG9ueSBhcmd1bWVudDogJXMiCisKKyM6IHN5bnRheC5jOjczOTAKK21zZ2lkICJFNDI0OiBUb28gbWFueSBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIGF0dHJpYnV0ZXMgaW4gdXNlIgorbXNnc3RyICJFNDI0OiBaYnl0IHdpZWxlIHLzv255Y2ggYXRyeWJ1dPN3IHBvZGtyZZxsYW5pYSB3IHW/eWNpdSIKKworIzogc3ludGF4LmM6NzkxMQorbXNnaWQgIkU2Njk6IFVucHJpbnRhYmxlIGNoYXJhY3RlciBpbiBncm91cCBuYW1lIgorbXNnc3RyICJFNjY5OiBOaWVkcnVrb3dhbG55IHpuYWsgdyBuYXp3aWUgZ3J1cHkiCisKKyMuIFRoaXMgaXMgYW4gZXJyb3IsIGJ1dCBzaW5jZSB0aGVyZSBwcmV2aW91c2x5IHdhcyBubyBjaGVjayBvbmx5CisjLiAqIGdpdmUgYSB3YXJuaW5nLgorIzogc3ludGF4LmM6NzkxOAorbXNnaWQgIlcxODogSW52YWxpZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSIKK21zZ3N0ciAiVzE4OiBuaWVwcmF3aWSzb3d5IHpuYWsgdyBuYXp3aWUgZ3J1cHkiCisKKyM6IHRhZy5jOjkwCittc2dpZCAiRTU1NTogYXQgYm90dG9tIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiRTU1NTogbmEgZG9sZSBzdG9zdSB6bmFjem5pa/N3IgorCisjOiB0YWcuYzo5MQorbXNnaWQgIkU1NTY6IGF0IHRvcCBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTY6IG5hIGfzcnplIHN0b3N1IHpuYWN6bmlr83ciCisKKyM6IHRhZy5jOjQxMgorbXNnaWQgIkU0MjU6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI1OiBOaWUgbW+/bmEgcHJ6ZWqc5iBwcnplZCBwaWVyd3N6eSBwYXN1arljeSB6bmFjem5payIKKworIzogdGFnLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjY6IHRhZyBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDI2OiBuaWUgem5hbGV6aW9ubyB6bmFjem5pa2E6ICVzIgorCisjOiB0YWcuYzo1ODMKK21zZ2lkICIgICMgcHJpIGtpbmQgdGFnIgorbXNnc3RyICIgICMgcHJpIHJvZHphaiB6bmFjem5payIKKworIzogdGFnLmM6NTg2Cittc2dpZCAiZmlsZVxuIgorbXNnc3RyICJwbGlrXG4iCisKKyMuCisjLiAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMuICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjOiB0YWcuYzo3NDQKK21zZ2lkICJFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOiAiCittc2dzdHIgIldwcm93YWSfIG5yIHd5Ym9ydSAoPENSPiBwcnplcnl3YSk6ICIKKworIzogdGFnLmM6Nzg0Cittc2dpZCAiRTQyNzogVGhlcmUgaXMgb25seSBvbmUgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI3OiBQYXN1amUgdHlsa28gamVkZW4gem5hY3puaWsiCisKKyM6IHRhZy5jOjc4NgorbXNnaWQgIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjg6IE5pZSBtb79uYSBwcnplapzmIHphIG9zdGF0bmkgcGFzdWq5Y3kgem5hY3puaWsiCisKKyM6IHRhZy5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiUGxpayBcIiVzXCIgbmllIGlzdG5pZWplIgorCisjLiBHaXZlIGFuIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiBtYXRjaGluZyB0YWdzCisjOiB0YWcuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICVkIG9mICVkJXMiCittc2dzdHIgInpuYWN6bmlrICVkIHogJWQlcyIKKworIzogdGFnLmM6ODI2Cittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiBsdWIgd2nqY2VqIgorCisjOiB0YWcuYzo4MjgKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiICBVv3l3YW0gem5hY3puaWthIG8gb2RtaWVubmVqIHdpZWxrb5xjaSBsaXRlciEiCisKKyM6IHRhZy5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTQyOTogUGxpayBcIiVzXCIgbmllIGlzdG5pZWplIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRhZy5jOjk0MQorbXNnaWQgIiIKKyJcbiIKKyIgICMgVE8gdGFnICAgICAgICAgRlJPTSBsaW5lICBpbiBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgICMgRE8gem5hY3puaWsgIE9EIHdpZXJzemEgICAgICB3IHBsaWt1L3Rla5xjaWUiCisKKyM6IHRhZy5jOjEzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIHRhZ3MgZmlsZSAlcyIKK21zZ3N0ciAiU3p1a2FtIHcgcGxpa3Ugem5hY3puaWvzdyAlcyIKKworIzogdGFnLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMwOiBUYWcgZmlsZSBwYXRoIHRydW5jYXRlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRTQzMDogVHJvcCBzenVrYW5pYSBwbGlrdSB6bmFjem5pa/N3IG9iY2nqdHkgZGxhICVzXG4iCisKKyM6IHRhZy5jOjIyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMTogRm9ybWF0IGVycm9yIGluIHRhZ3MgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0MzE6IEKzuWQgZm9ybWF0dSB3IHBsaWt1IHpuYWN6bmlr83cgXCIlc1wiIgorCisjOiB0YWcuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZm9yZSBieXRlICVsZCIKK21zZ3N0ciAiUHJ6ZWQgYmFqdGVtICVsZCIKKworIzogdGFnLmM6MjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMyOiBUYWdzIGZpbGUgbm90IHNvcnRlZDogJXMiCittc2dzdHIgIkU0MzI6IFBsaWsgem5hY3puaWvzdyBuaWV1cG9yerlka293YW55OiAlcyIKKworIy4gbmV2ZXIgb3BlbmVkIGFueSB0YWdzIGZpbGUKKyM6IHRhZy5jOjIyODAKK21zZ2lkICJFNDMzOiBObyB0YWdzIGZpbGUiCittc2dzdHIgIkU0MzM6IEJyYWsgcGxpa3Ugem5hY3puaWvzdyIKKworIzogdGFnLmM6MzAxNgorbXNnaWQgIkU0MzQ6IENhbid0IGZpbmQgdGFnIHBhdHRlcm4iCittc2dzdHIgIkU0MzQ6IE5pZSBtb2fqIHpuYWxln+Ygd3pvcmNhIHpuYWN6bmlrYSIKKworIzogdGFnLmM6MzAyNworbXNnaWQgIkU0MzU6IENvdWxkbid0IGZpbmQgdGFnLCBqdXN0IGd1ZXNzaW5nISIKK21zZ3N0ciAiRTQzNTogTmllIHpuYWxherNlbSB6bmFjem5pa2EgLSB0eWxrbyB6Z2FkdWrqISIKKworIzogdGVybS5jOjE3NTkKK21zZ2lkICInIG5vdCBrbm93bi4gQXZhaWxhYmxlIGJ1aWx0aW4gdGVybWluYWxzIGFyZToiCittc2dzdHIgIicgbmllem5hbnkuIE1vv2xpd2UgdHlweSB3YnVkb3dhbnljaCB0ZXJtaW5hbGk6IgorCisjOiB0ZXJtLmM6MTc4MworbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAiZG9teZxsbmllIGplc3QgJyIKKworIzogdGVybS5jOjIxNDEKK21zZ2lkICJFNTU3OiBDYW5ub3Qgb3BlbiB0ZXJtY2FwIGZpbGUiCittc2dzdHIgIkU1NTc6IE5pZSBtb2fqIG90d29yennmIHBsaWt1IHRlcm1jYXAiCisKKyM6IHRlcm0uYzoyMTQ1Cittc2dpZCAiRTU1ODogVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1pbmZvIgorbXNnc3RyICJFNTU4OiBOaWUgbWEgb3Bpc3UgdGFraWVnbyB0ZXJtaW5hbGEgdyB0ZXJtaW5mbyIKKworIzogdGVybS5jOjIxNDcKK21zZ2lkICJFNTU5OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTU1OTogTmllIG1hIG9waXN1IHRha2llZ28gdGVybWluYWxhIHcgdGVybWNhcCIKKworIzogdGVybS5jOjIzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzNjogTm8gXCIlc1wiIGVudHJ5IGluIHRlcm1jYXAiCittc2dzdHIgIkU0MzY6IEJyYWsgb3Bpc3UgXCIlc1wiIHcgdGVybWNhcCIKKworIzogdGVybS5jOjI3ODAKK21zZ2lkICJFNDM3OiB0ZXJtaW5hbCBjYXBhYmlsaXR5IFwiY21cIiByZXF1aXJlZCIKK21zZ3N0ciAiRTQzNzogd3ltYWdhbmEgemRvbG5vnOYgXCJjbVwiIHRlcm1pbmFsYSIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0ZXJtLmM6NDk5MAorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwga2V5cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gS2xhd2lzemUgdGVybWluYWxhIC0tLSIKKworIzogdWkuYzoyNTgKK21zZ2lkICJuZXcgc2hlbGwgc3RhcnRlZFxuIgorbXNnc3RyICJ1cnVjaG9taW9ubyBub3e5IHBvd7Nva+pcbiIKKworIzogdWkuYzoxODQxCittc2dpZCAiVmltOiBFcnJvciByZWFkaW5nIGlucHV0LCBleGl0aW5nLi4uXG4iCittc2dzdHIgIlZpbTogQrO5ZCBwb2RjemFzIHdjenl0eXdhbmlhIHdlapxjaWEsIGtv8WN66i4uLlxuIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogdW5kby5jOjQwNQorbXNnaWQgIk5vIHVuZG8gcG9zc2libGU7IGNvbnRpbnVlIGFueXdheSIKK21zZ3N0ciAiQ29mbmnqY2llIG5pZW1vv2xpd2U7IG1pbW8gdG8ga29udHludXVq6iIKKworIzogdW5kby5jOjU2MQorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IG5pZXezYZxjaXdlIG51bWVyeSB3aWVyc3p5IgorCisjOiB1bmRvLmM6NzU3Cittc2dpZCAiMSBjaGFuZ2UiCittc2dzdHIgIjEgem1pYW5hIgorCisjOiB1bmRvLmM6NzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFuZ2VzIgorbXNnc3RyICIlbGQgem1pYW4iCisKKyM6IHVuZG8uYzo4MTIKK21zZ2lkICJFNDM5OiB1bmRvIGxpc3QgY29ycnVwdCIKK21zZ3N0ciAiRTQzOTogdXN6a29kem9uYSBsaXN0YSBjb2ZhbmlhIgorCisjOiB1bmRvLmM6ODQ0Cittc2dpZCAiRTQ0MDogdW5kbyBsaW5lIG1pc3NpbmciCittc2dzdHIgIkU0NDA6IGJyYWsgd2llcnN6YSBjb2ZhbmlhIgorCisjLiBPbmx5IE1TIFZDIDQuMSBhbmQgZWFybGllciBjYW4gZG8gV2luMzJzCisjOiB2ZXJzaW9uLmM6MTc2OQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2LzMyIGJpdG93YSB3ZXJzamEgR1VJIGRsYSBNUy1XaW5kb3dzIgorCisjOiB2ZXJzaW9uLmM6MTc3MQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjMyIGJpdG93YSB3ZXJzamEgR1VJIGRsYSBNUy1XaW5kb3dzIgorCisjOiB2ZXJzaW9uLmM6MTc3NAorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiIHcgdHJ5YmllIFdpbjMycyIKKworIzogdmVyc2lvbi5jOjE3NzYKK21zZ2lkICIgd2l0aCBPTEUgc3VwcG9ydCIKK21zZ3N0ciAiIHplIHdzcG9tYWdhbmllbSBPTEUiCisKKyM6IHZlcnNpb24uYzoxNzc5Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IGNvbnNvbGUgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjMyIGJpdG93YSB3ZXJzamEgbmEga29uc29s6iBkbGEgTVMtV2luZG93cyIKKworIzogdmVyc2lvbi5jOjE3ODMKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNiBiaXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2IGJpdG93YSB3ZXJzamEgZGxhIE1TLVdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzoxNzg3Cittc2dpZCAiIgorIlxuIgorIjMyIGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjMyIGJpdG93YSB3ZXJzamEgZGxhIE1TLURPUyIKKworIzogdmVyc2lvbi5jOjE3ODkKK21zZ2lkICIiCisiXG4iCisiMTYgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMTYgYml0b3dhIHdlcnNqYSBkbGEgTVMtRE9TIgorCisjOiB2ZXJzaW9uLmM6MTc5NQorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisid2Vyc2phIGRsYSBNYWNPUyBYICh1bml4KSIKKworIzogdmVyc2lvbi5jOjE3OTcKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisid2Vyc2phIGRsYSBNYWNPUyBYIgorCisjOiB2ZXJzaW9uLmM6MTgwMAorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisid2Vyc2phIGRsYSBNYWNPUyIKKworIzogdmVyc2lvbi5jOjE4MDUKK21zZ2lkICIiCisiXG4iCisiUklTQyBPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisid2Vyc2phIGRsYSBSSVNDIE9TIgorCisjOiB2ZXJzaW9uLmM6MTgxNQorbXNnaWQgIiIKKyJcbiIKKyJJbmNsdWRlZCBwYXRjaGVzOiAiCittc2dzdHIgIiIKKyJcbiIKKyJaYWRhbmUgs2F0eTogIgorCisjOiB2ZXJzaW9uLmM6MTg0MSB2ZXJzaW9uLmM6MjIwOQorbXNnaWQgIk1vZGlmaWVkIGJ5ICIKK21zZ3N0ciAiWm1pZW5pb255IHByemV6ICIKKworIzogdmVyc2lvbi5jOjE4NDgKK21zZ2lkICIiCisiXG4iCisiQ29tcGlsZWQgIgorbXNnc3RyICIiCisiXG4iCisiU2tvbXBpbG93YW55ICIKKworIzogdmVyc2lvbi5jOjE4NTEKK21zZ2lkICJieSAiCittc2dzdHIgInByemV6ICIKKworIzogdmVyc2lvbi5jOjE4NjMKK21zZ2lkICIiCisiXG4iCisiSHVnZSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIk9sYnJ6eW1pYSB3ZXJzamEgIgorCisjOiB2ZXJzaW9uLmM6MTg2NgorbXNnaWQgIiIKKyJcbiIKKyJCaWcgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJEdb9hIHdlcnNqYSAiCisKKyM6IHZlcnNpb24uYzoxODY5Cittc2dpZCAiIgorIlxuIgorIk5vcm1hbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIk5vcm1hbG5hIHdlcnNqYSAiCisKKyM6IHZlcnNpb24uYzoxODcyCittc2dpZCAiIgorIlxuIgorIlNtYWxsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiTWGzYSB3ZXJzamEgIgorCisjOiB2ZXJzaW9uLmM6MTg3NAorbXNnaWQgIiIKKyJcbiIKKyJUaW55IHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiTWFsdXRrYSB3ZXJzamEgIgorCisjOiB2ZXJzaW9uLmM6MTg4MAorbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAiYmV6IEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODg1Cittc2dpZCAid2l0aCBHVEsyLUdOT01FIEdVSS4iCittc2dzdHIgInogR1RLMi1HTk9NRSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTg4NworbXNnaWQgIndpdGggR1RLLUdOT01FIEdVSS4iCittc2dzdHIgInogR1RLLUdOT01FIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODkxCittc2dpZCAid2l0aCBHVEsyIEdVSS4iCittc2dzdHIgInogR1RLMiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTg5MworbXNnaWQgIndpdGggR1RLIEdVSS4iCittc2dzdHIgInogR1RLIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODk4Cittc2dpZCAid2l0aCBYMTEtTW90aWYgR1VJLiIKK21zZ3N0ciAieiBYMTEtTW90aWYgR1VJLiIKKworIzogdmVyc2lvbi5jOjE5MDIKK21zZ2lkICJ3aXRoIFgxMS1uZVh0YXcgR1VJLiIKK21zZ3N0ciAieiBYMTEtbmVYdGF3IEdVSS4iCisKKyM6IHZlcnNpb24uYzoxOTA0Cittc2dpZCAid2l0aCBYMTEtQXRoZW5hIEdVSS4iCittc2dzdHIgInogWDExLUF0aGVuYSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTkwOAorbXNnaWQgIndpdGggQmVPUyBHVUkuIgorbXNnc3RyICJ6IEJlT1MgR1VJLiIKKworIzogdmVyc2lvbi5jOjE5MTEKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICJ6IFBob3RvbiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTkxNAorbXNnaWQgIndpdGggR1VJLiIKK21zZ3N0ciAieiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTkxNworbXNnaWQgIndpdGggQ2FyYm9uIEdVSS4iCittc2dzdHIgInogQ2FyYm9uIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxOTIwCittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICJ6IENvY29hIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxOTIzCittc2dpZCAid2l0aCAoY2xhc3NpYykgR1VJLiIKK21zZ3N0ciAieiAoa2xhc3ljem55bSkgR1VJLiIKKworIzogdmVyc2lvbi5jOjE5MzQKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIgIE9wY2plIHezuWN6b25lICgrKSBsdWIgbmllICgtKTpcbiIKKworIzogdmVyc2lvbi5jOjE5NDYKK21zZ2lkICIgICBzeXN0ZW0gdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICB2aW1yYyBzeXN0ZW11OiBcIiIKKworIzogdmVyc2lvbi5jOjE5NTEKK21zZ2lkICIgICAgIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgIHZpbXJjIHW/eXRrb3duaWthOiBcIiIKKworIzogdmVyc2lvbi5jOjE5NTYKK21zZ2lkICIgMm5kIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAyLWdpIHBsaWsgdmltcmMgdb95dGtvd25pa2E6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk2MQorbXNnaWQgIiAzcmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIDMtY2kgcGxpayB2aW1yYyB1v3l0a293bmlrYTogXCIiCisKKyM6IHZlcnNpb24uYzoxOTY2Cittc2dpZCAiICAgICAgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgZXhyYyB1v3l0a293bmlrYTogXCIiCisKKyM6IHZlcnNpb24uYzoxOTcxCittc2dpZCAiICAybmQgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgIDItZ2kgcGxpayBleHJjIHW/eXRrb3duaWthOiBcIiIKKworIzogdmVyc2lvbi5jOjE5NzcKK21zZ2lkICIgIHN5c3RlbSBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgZ3ZpbXJjIHN5c3RlbXU6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk4MQorbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICBndmltcmMgdb95dGtvd25pa2E6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk4NQorbXNnaWQgIjJuZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiMi1naSBwbGlrIGd2aW1yYyB1v3l0a293bmlrYTogXCIiCisKKyM6IHZlcnNpb24uYzoxOTkwCittc2dpZCAiM3JkIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIzLWNpIHBsaWsgZ3ZpbXJjIHW/eXRrb3duaWthOiBcIiIKKworIzogdmVyc2lvbi5jOjE5OTcKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiBzeXN0ZW1vd3kgcGxpayBtZW51OiBcIiIKKworIzogdmVyc2lvbi5jOjIwMDUKK21zZ2lkICIgIGZhbGwtYmFjayBmb3IgJFZJTTogXCIiCittc2dzdHIgIiAgIG9kd2V0IGRsYSAkVklNLWE6IFwiIgorCisjOiB2ZXJzaW9uLmM6MjAxMQorbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiZi1iIGRsYSAkVklNUlVOVElNRTogXCIiCisKKyM6IHZlcnNpb24uYzoyMDE1Cittc2dpZCAiQ29tcGlsYXRpb246ICIKK21zZ3N0ciAiS29tcGlsYWNqYTogIgorCisjOiB2ZXJzaW9uLmM6MjAyMQorbXNnaWQgIkNvbXBpbGVyOiAiCittc2dzdHIgIktvbXBpbGF0b3I6ICIKKworIzogdmVyc2lvbi5jOjIwMjYKK21zZ2lkICJMaW5raW5nOiAiCittc2dzdHIgIktvbnNvbGlkYWNqYTogIgorCisjOiB2ZXJzaW9uLmM6MjAzMQorbXNnaWQgIiAgREVCVUcgQlVJTEQiCittc2dzdHIgIiAgS09NUElMQUNKQSBERUJVRyIKKworIzogdmVyc2lvbi5jOjIwNzAKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVmkgcm96YnVkb3dhbnkiCisKKyM6IHZlcnNpb24uYzoyMDcyCittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgIndlcnNqYSAiCisKKyM6IHZlcnNpb24uYzoyMDczCittc2dpZCAiYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorbXNnc3RyICJBdXRvcjogQnJhbSBNb29sZW5hYXIgaSBJbm5pLiIKKworIzogdmVyc2lvbi5jOjIwNzcKK21zZ2lkICJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIgorbXNnc3RyICJWaW0gamVzdCBvcGVuIHNvdXJjZSBpIHJvenByb3dhZHphbnkgZGFybW93byIKKworIzogdmVyc2lvbi5jOjIwNzkKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAiUG9t878gYmllZG55bSBkemllY2lvbSB3IFVnYW5kemllISIKKworIzogdmVyc2lvbi5jOjIwODAKK21zZ2lkICJ0eXBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJ3cHJvd2FknyA6aGVscCBpY2NmPEVudGVyPiAgICAgICAgZGxhIGluZm9ybWFjamkgbyB0eW0gICIKKworIzogdmVyc2lvbi5jOjIwODIKK21zZ2lkICJ0eXBlICA6cTxFbnRlcj4gICAgICAgICAgICAgICB0byBleGl0ICAgICAgICAgIgorbXNnc3RyICJ3cHJvd2FknyA6cTxFbnRlcj4gICAgICAgICAgICAgICAgemFrb/FjemVuaWUgcHJvZ3JhbXUgICAiCisKKyM6IHZlcnNpb24uYzoyMDgzCittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAid3Byb3dhZJ8gOmhlbHA8RW50ZXI+ICBsdWIgIDxGMT4gIHBvbW9jIG5hIGJpZb+5Y28gICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MjA4NAorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgIndwcm93YWSfIDpoZWxwIHZlcnNpb242PEVudGVyPiAgICBkbGEgaW5mb3JtYWNqaSBvIHdlcnNqaSIKKworIzogdmVyc2lvbi5jOjIwODcKK21zZ2lkICJSdW5uaW5nIGluIFZpIGNvbXBhdGlibGUgbW9kZSIKK21zZ3N0ciAiRHppYbNhbSB3IHRyeWJpZSB6Z29kbm+cY2kgeiBWaSIKKworIzogdmVyc2lvbi5jOjIwODgKK21zZ2lkICJ0eXBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBmb3IgVmltIGRlZmF1bHRzIgorbXNnc3RyICJ3cHJvd2FknyA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICAgd2FydG+cY2kgZG9teZxsbmUgVmltLWEiCisKKyM6IHZlcnNpb24uYzoyMDg5Cittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAid3Byb3dhZJ8gOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gIGRsYSBpbmZvcm1hY2ppIHRvIHR5bSAgIgorCisjOiB2ZXJzaW9uLmM6MjEwNAorbXNnaWQgIm1lbnUgIEhlbHAtPk9ycGhhbnMgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIndwcm93YWSfIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgICBkbGEgaW5mb3JtYWNqaSB0byB0eW0gICIKKworIzogdmVyc2lvbi5jOjIxMDYKK21zZ2lkICJSdW5uaW5nIG1vZGVsZXNzLCB0eXBlZCB0ZXh0IGlzIGluc2VydGVkIgorbXNnc3RyICJVcnVjaG9taW9ueSBiZXogdHJ5YvN3LCB3cGlzYW55IHRla3N0IGplc3Qgd3Byb3dhZHphbnkiCisKKyM6IHZlcnNpb24uYzoyMTA3Cittc2dpZCAibWVudSAgRWRpdC0+R2xvYmFsIFNldHRpbmdzLT5Ub2dnbGUgSW5zZXJ0IE1vZGUgICIKK21zZ3N0ciAibWVudSAgRWR5dHVqLT5Vc3Rhd2llbmlhIGdsb2JhbG5lLT5UcnliIHdzdGF3aWFuaWEiCisKKyM6IHZlcnNpb24uYzoyMTA4Cittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHR3byBtb2RlcyAgICAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgZGxhIGR382NoIHRyeWLzdyAgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MjExMgorbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIFZpIENvbXBhdGlibGUiCittc2dzdHIgIm1lbnUgRWR5dHVqLT5Vc3Rhd2llbmlhIGdsb2JhbG5lLT5Lb21wYXR5Ymlsbm+c5iB6IFZpIgorCisjOiB2ZXJzaW9uLmM6MjExMworbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBWaW0gZGVmYXVsdHMgICAiCittc2dzdHIgIiAgICAgZGxhIGRvbXmcbG55Y2ggdXN0YXdpZfEgVmltYSAgICIKKworIzogdmVyc2lvbi5jOjIxNjAKK21zZ2lkICJTcG9uc29yIFZpbSBkZXZlbG9wbWVudCEiCittc2dzdHIgIlNwb25zb3J1aiByb3p382ogVmltYSEiCisKKyM6IHZlcnNpb24uYzoyMTYxCittc2dpZCAiQmVjb21lIGEgcmVnaXN0ZXJlZCBWaW0gdXNlciEiCittc2dzdHIgIlpvc3Rh8SB6YXJlamVzdHJvd2FueW0gdb95dGtvd25pa2llbSBWaW1hISIKKworIzogdmVyc2lvbi5jOjIxNjQKK21zZ2lkICJ0eXBlICA6aGVscCBzcG9uc29yPEVudGVyPiAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJ3cHJvd2FknyA6aGVscCBzcG9uc29yPEVudGVyPiAgICAgICAgZGxhIGluZm9ybWFjamkiCisKKyM6IHZlcnNpb24uYzoyMTY1Cittc2dpZCAidHlwZSAgOmhlbHAgcmVnaXN0ZXI8RW50ZXI+ICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAid3Byb3dhZJ8gOmhlbHAgcmVnaXN0ZXI8RW50ZXI+ICAgICAgICBkbGEgaW5mb3JtYWNqaSIKKworIzogdmVyc2lvbi5jOjIxNjcKK21zZ2lkICJtZW51ICBIZWxwLT5TcG9uc29yL1JlZ2lzdGVyICBmb3IgaW5mb3JtYXRpb24gICAgIgorbXNnc3RyICJtZW51IFBvbW9jLT5TcG9uc29ydWovWmFyZWplc3RydWogc2nqIGRsYSBpbmZvcm1hY2ppIgorCisjOiB2ZXJzaW9uLmM6MjE3NworbXNnaWQgIldBUk5JTkc6IFdpbmRvd3MgOTUvOTgvTUUgZGV0ZWN0ZWQiCittc2dzdHIgIk9TVFJaRa9FTklFOiB3eWtyeXRvIFdpbmRvd3MgOTUvOTgvTUUiCisKKyM6IHZlcnNpb24uYzoyMTgwCittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAid3Byb3dhZJ8gOmhlbHAgd2luZG93czk1PEVudGVyPiAgIGRsYSBpbmZvcm1hY2ppIHRvIHR5bSAgIgorCisjOiB3aW5kb3cuYzoyMDMKK21zZ2lkICJFNDQxOiBUaGVyZSBpcyBubyBwcmV2aWV3IHdpbmRvdyIKK21zZ3N0ciAiRTQ0MTogTmllIG1hIG9rbmEgcG9kZ2y5ZHUiCisKKyM6IHdpbmRvdy5jOjU4MQorbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IE5pZSBtb2fqIHJvemR6aWVsaeYgbGV3by1n83JuZWdvIGkgcHJhd28tZG9sbmVnbyBqZWRub2N6ZZxuaWUiCisKKyM6IHdpbmRvdy5jOjEzNDAKK21zZ2lkICJFNDQzOiBDYW5ub3Qgcm90YXRlIHdoZW4gYW5vdGhlciB3aW5kb3cgaXMgc3BsaXQiCittc2dzdHIgIkU0NDM6IE5pZSBtb2fqIHByemVrcupjaeYsIGdkeSBpbm5lIG9rbm8gamVzdCByb3pkemllbG9uZSIKKworIzogd2luZG93LmM6MTgzNgorbXNnaWQgIkU0NDQ6IENhbm5vdCBjbG9zZSBsYXN0IHdpbmRvdyIKK21zZ3N0ciAiRTQ0NDogTmllIG1vZ+ogemFta2655iBvc3RhdG5pZWdvIG9rbmEiCisKKyM6IHdpbmRvdy5jOjI1NjcKK21zZ2lkICJBbHJlYWR5IG9ubHkgb25lIHdpbmRvdyIKK21zZ3N0ciAiSnW/IGplc3QgdHlsa28gamVkZW4gd2lkb2siCisKKyM6IHdpbmRvdy5jOjI2MTQKK21zZ2lkICJFNDQ1OiBPdGhlciB3aW5kb3cgY29udGFpbnMgY2hhbmdlcyIKK21zZ3N0ciAiRTQ0NTogSW5uZSBva25vIHphd2llcmEgem1pYW55IgorCisjOiB3aW5kb3cuYzo0NDgwCittc2dpZCAiRTQ0NjogTm8gZmlsZSBuYW1lIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTQ0NjogQnJhayBuYXp3eSBwbGlrdSBwb2Qga3Vyc29yZW0iCisKKyM6IHdpbmRvdy5jOjQ1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0NzogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFNDQ3OiBOaWUgbW9n6iB6bmFsZZ/mIHBsaWt1IFwiJXNcIiB3IHRyb3BpZSIKKworIzogaWZfcGVybC54czozMjYgZ2xvYmFscy5oOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MDogQ291bGQgbm90IGxvYWQgbGlicmFyeSAlcyIKK21zZ3N0ciAiRTM3MDogTmllIG1vZ7NlbSB6YbNhZG93YeYgYmlibGlvdGVraSAlcyIKKworIzogaWZfcGVybC54czo1NTQKK21zZ2lkICJTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgUGVybCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJQcnp5a3JvIG1pLCB0YSBrb21lbmRhIGplc3Qgd3mzuWN6b25hOiBuaWUgbW9ns2VtIHphs2Fkb3dh5iBiaWJsaW90ZWtpIFBlcmxhLiIKKworIzogaWZfcGVybC54czo2MDcKK21zZ2lkICJFMjk5OiBQZXJsIGV2YWx1YXRpb24gZm9yYmlkZGVuIGluIHNhbmRib3ggd2l0aG91dCB0aGUgU2FmZSBtb2R1bGUiCittc2dzdHIgIkUyOTk6IHd5bGljemVuaWUgUGVybGEgemFicm9uaW9uZSB3IHBpYXNrb3duaWN5IGJleiBtb2R1s3UgU2FmZSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODMKK21zZ2lkICJFZGl0IHdpdGggJm11bHRpcGxlIFZpbXMiCittc2dzdHIgIkVkeXR1aiB3ICZ3aWVsdSBWaW1hY2giCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTg5Cittc2dpZCAiRWRpdCB3aXRoIHNpbmdsZSAmVmltIgorbXNnc3RyICJFZHl0dWogdyBwb2plZHluY3p5bSAmVmltaWUiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTk4Cittc2dpZCAiJkRpZmYgd2l0aCBWaW0iCittc2dzdHIgIiZEaWZmIHogVmltZW0iCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NjExCittc2dpZCAiRWRpdCB3aXRoICZWaW0iCittc2dzdHIgIkVkeXR1aiB3ICZWaW1pZSIKKworIy4gTm93IGNvbmNhdGVuYXRlCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjYzMworbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICJFZHl0dWogeiBpc3RuaWVquWN5bSBWaW1lbSAtICYiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NzQ2Cittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgIkVkeXR1aiB3eWJyYW5lIHBsaWtpIHcgVmltaWUiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg1IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcHJvY2VzczogQ2hlY2sgaWYgZ3ZpbSBpcyBpbiB5b3VyIHBhdGghIgorbXNnc3RyICJCs7lkIHR3b3J6ZW5pYSBwcm9jZXN1OiBTcHJhd2SfIGN6eSBndmltIGplc3QgdyB0d29qZWognGNpZb9jZSEiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg2IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTAwIEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY3Cittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgImKzuWQgZ3ZpbWV4dC5kbGwiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODk5Cittc2dpZCAiUGF0aCBsZW5ndGggdG9vIGxvbmchIgorbXNnc3RyICJaYSBks3VnYSCcY2llv2thISIKKworIzogZ2xvYmFscy5oOjEwMjIKK21zZ2lkICItLU5vIGxpbmVzIGluIGJ1ZmZlci0tIgorbXNnc3RyICItLUJyYWsgd2llcnN6eSB3IGJ1Zm9yemUtLSIKKworIy4KKyMuICogVGhlIGVycm9yIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHNoYXJlZCBhcmUgaW5jbHVkZWQgaGVyZS4KKyMuICogRXhjbHVkZWQgYXJlIGVycm9ycyB0aGF0IGFyZSBvbmx5IHVzZWQgb25jZSBhbmQgZGVidWdnaW5nIG1lc3NhZ2VzLgorIy4KKyM6IGdsb2JhbHMuaDoxMTg1Cittc2dpZCAiRTQ3MDogQ29tbWFuZCBhYm9ydGVkIgorbXNnc3RyICJFNDcwOiBQcnplcndhbmllIGtvbWVuZHkiCisKKyM6IGdsb2JhbHMuaDoxMTg2Cittc2dpZCAiRTQ3MTogQXJndW1lbnQgcmVxdWlyZWQiCittc2dzdHIgIkU0NzE6IHd5bWFnYW55IGFyZ3VtZW50IgorCisjOiBnbG9iYWxzLmg6MTE4NworbXNnaWQgIkUxMDogXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJiIKK21zZ3N0ciAiRTEwOiBwbyBcXCBwb3dpbm5vIGJ55iAvLCA/IGx1YiAmIgorCisjOiBnbG9iYWxzLmg6MTE4OQorbXNnaWQgIkUxMTogSW52YWxpZCBpbiBjb21tYW5kLWxpbmUgd2luZG93OyA8Q1I+IGV4ZWN1dGVzLCBDVFJMLUMgcXVpdHMiCittc2dzdHIgIkUxMTogTmllZG96d29sb25lIHcgb2tuaWUgd2llcnN6YSBwb2xlY2XxOyA8Q1I+IHd5a29udWplLCBDVFJMLUMgb3B1c3pjemEiCisKKyM6IGdsb2JhbHMuaDoxMTkxCittc2dpZCAiRTEyOiBDb21tYW5kIG5vdCBhbGxvd2VkIGZyb20gZXhyYy92aW1yYyBpbiBjdXJyZW50IGRpciBvciB0YWcgc2VhcmNoIgorbXNnc3RyICIiCisiRTEyOiBLb21lbmRhIG5pZWRvendvbG9uYSB6IGV4cmMvdmltcmMgdyBiaWW/uWN5bSBzenVrYW5pdSBrYXRhbG9ndSBsdWIgIgorInpuYWN6bmlrYSIKKworIzogZ2xvYmFscy5oOjExOTMKK21zZ2lkICJFMTcxOiBNaXNzaW5nIDplbmRpZiIKK21zZ3N0ciAiRTE3MTogQnJhayA6ZW5kaWYiCisKKyM6IGdsb2JhbHMuaDoxMTk0Cittc2dpZCAiRTYwMDogTWlzc2luZyA6ZW5kdHJ5IgorbXNnc3RyICJFNjAwOiBCcmFrIDplbmR0cnkiCisKKyM6IGdsb2JhbHMuaDoxMTk1Cittc2dpZCAiRTE3MDogTWlzc2luZyA6ZW5kd2hpbGUiCittc2dzdHIgIkUxNzA6IEJyYWsgOmVuZHdoaWxlIgorCisjOiBnbG9iYWxzLmg6MTE5NgorbXNnaWQgIkU1ODg6IDplbmR3aGlsZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4ODogOmVuZHdoaWxlIGJleiA6d2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMTk4Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IFBsaWsgaXN0bmllamUgKHd5bXWcIHBvcHJ6ZXogISkiCisKKyM6IGdsb2JhbHMuaDoxMTk5Cittc2dpZCAiRTQ3MjogQ29tbWFuZCBmYWlsZWQiCittc2dzdHIgIkU0NzI6IEtvbWVuZGEgbmllIHBvd2lvZLNhIHNp6iIKKworIzogZ2xvYmFscy5oOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNDogVW5rbm93biBmb250c2V0OiAlcyIKK21zZ3N0ciAiRTIzNDogTmllem5hbnkgemVzdGF3IGN6Y2lvbmVrOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogVW5rbm93biBmb250OiAlcyIKK21zZ3N0ciAiRTIzNTogTmllem5hbmEgY3pjaW9ua2E6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IEN6Y2lvbmthIFwiJXNcIiBuaWUgbWEgc3Rhs2VqIHN6ZXJva2+cY2kgem5ha/N3IgorCisjOiBnbG9iYWxzLmg6MTIxMAorbXNnaWQgIkU0NzM6IEludGVybmFsIGVycm9yIgorbXNnc3RyICJFNDczOiBCs7lkIHdld27qdHJ6bnkiCisKKyM6IGdsb2JhbHMuaDoxMjExCittc2dpZCAiSW50ZXJydXB0ZWQiCittc2dzdHIgIlByemVyd2FuZSIKKworIzogZ2xvYmFscy5oOjEyMTIKK21zZ2lkICJFMTQ6IEludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiRTE0OiBOaWV3s2GcY2l3eSBhZHJlcyIKKworIzogZ2xvYmFscy5oOjEyMTMKK21zZ2lkICJFNDc0OiBJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJFNDc0OiBOaWV3s2GcY2l3eSBhcmd1bWVudCIKKworIzogZ2xvYmFscy5oOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ3NTogSW52YWxpZCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0NzU6IE5pZXezYZxjaXd5IGFyZ3VtZW50OiAlcyIKKworIzogZ2xvYmFscy5oOjEyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246ICVzIgorbXNnc3RyICJFMTU6IE5pZXezYZxjaXdlIHd5cmG/ZW5pZTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjE4Cittc2dpZCAiRTE2OiBJbnZhbGlkIHJhbmdlIgorbXNnc3RyICJFMTY6IE5pZXezYZxjaXd5IHpha3JlcyIKKworIzogZ2xvYmFscy5oOjEyMTkKK21zZ2lkICJFNDc2OiBJbnZhbGlkIGNvbW1hbmQiCittc2dzdHIgIkU0NzY6IE5pZXezYZxjaXdhIGtvbWVuZGEiCisKKyM6IGdsb2JhbHMuaDoxMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzogXCIlc1wiIGlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJFMTc6IFwiJXNcIiBqZXN0IGthdGFsb2dpZW0iCisKKyM6IGdsb2JhbHMuaDoxMjI0Cittc2dpZCAiRTE4OiBVbmV4cGVjdGVkIGNoYXJhY3RlcnMgYmVmb3JlICc9JyIKK21zZ3N0ciAiRTE4OiBOaWVvY3pla2l3YW5lIHpuYWtpIHByemVkICc9JyIKKworIzogZ2xvYmFscy5oOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NDogTGlicmFyeSBjYWxsIGZhaWxlZCBmb3IgXCIlcygpXCIiCittc2dzdHIgIkUzNjQ6IFd5d2+zYW5pZSB6IGJpYmxpb3Rla2kgbmllIHBvd2lvZLNvIHNp6iBkbGEgXCIlcygpXCIiCisKKyM6IGdsb2JhbHMuaDoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDg6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgZnVuY3Rpb24gJXMiCittc2dzdHIgIkU0NDg6IE5pZSBtb79uYSB6YbNhZG93YeYgZnVua2NqaSBiaWJsaW90ZWtpICVzIgorCisjOiBnbG9iYWxzLmg6MTIzNQorbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiBaYWuzYWRrYSBtYSBuaWV3s2GcY2l3eSBudW1lciB3aWVyc3phIgorCisjOiBnbG9iYWxzLmg6MTIzNgorbXNnaWQgIkUyMDogTWFyayBub3Qgc2V0IgorbXNnc3RyICJFMjA6IFpha7NhZGthIG5pZW5hc3Rhd2lvbmEiCisKKyM6IGdsb2JhbHMuaDoxMjM3Cittc2dpZCAiRTIxOiBDYW5ub3QgbWFrZSBjaGFuZ2VzLCAnbW9kaWZpYWJsZScgaXMgb2ZmIgorbXNnc3RyICJFMjE6IE5pZSBtb2fqIHd5a29uYeYgem1pYW4sICdtb2RpZmlhYmxlJyBqZXN0IHd5s7ljem9uZSIKKworIzogZ2xvYmFscy5oOjEyMzgKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IFpieXQgZ7PqYm9raWUgemFnbmllv2S/ZW5pZSBza3J5cHTzdyIKKworIzogZ2xvYmFscy5oOjEyMzkKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6IEJyYWsgcGxpa3UgemFtaWFueSIKKworIzogZ2xvYmFscy5oOjEyNDAKK21zZ2lkICJFMjQ6IE5vIHN1Y2ggYWJicmV2aWF0aW9uIgorbXNnc3RyICJFMjQ6IE5pZSBtYSB0YWtpZWdvIHNrcvN0dSIKKworIzogZ2xvYmFscy5oOjEyNDEKK21zZ2lkICJFNDc3OiBObyAhIGFsbG93ZWQiCittc2dzdHIgIkU0Nzc6IE5pZWRvendvbG9uZSAhIgorCisjOiBnbG9iYWxzLmg6MTI0MworbXNnaWQgIkUyNTogR1VJIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIkUyNTogR1VJIG5pZSBtb79lIGJ55iB1v3l0ZTogTmllIHezuWN6b25vIHBvZGN6YXMga29tcGlsYWNqaSIKKworIzogZ2xvYmFscy5oOjEyNDYKK21zZ2lkICJFMjY6IEhlYnJldyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNjogSGVicmFqc2tpIG5pZSBtb79lIGJ55iB1v3l0eTogTmllIHezuWN6b25vIHBvZGN6YXMga29tcGlsYWNqaVxuIgorCisjOiBnbG9iYWxzLmg6MTI0OQorbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjc6IEZhcnNpIG5pZSBtb79lIGJ55iB1v3l0eTogTmllIHezuWN6b25vIHBvZGN6YXMga29tcGlsYWNqaVxuIgorCisjOiBnbG9iYWxzLmg6MTI1MgorbXNnaWQgIkU4MDA6IEFyYWJpYyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkU4MDA6IEFyYWJza2kgbmllIG1vv2UgYnnmIHW/eXR5OiBOaWUgd7O5Y3pvbm8gcG9kY3phcyBrb21waWxhY2ppXG4iCisKKyM6IGdsb2JhbHMuaDoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODogTm8gc3VjaCBoaWdobGlnaHQgZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkUyODogQnJhayB0YWtpZWogbmF6d3kgZ3J1cHkgcG9knHdpZXRsYW5pYTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjU3Cittc2dpZCAiRTI5OiBObyBpbnNlcnRlZCB0ZXh0IHlldCIKK21zZ3N0ciAiRTI5OiBOaWUgd3Byb3dhZHpvbm8gamVzemN6ZSC/YWRuZWdvIHRla3N0dSIKKworIzogZ2xvYmFscy5oOjEyNTgKK21zZ2lkICJFMzA6IE5vIHByZXZpb3VzIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiRTMwOiBOaWUgbWEgcG9wcnplZG5pZWdvIHdpZXJzemEgcG9sZWNl8SIKKworIzogZ2xvYmFscy5oOjEyNTkKK21zZ2lkICJFMzE6IE5vIHN1Y2ggbWFwcGluZyIKK21zZ3N0ciAiRTMxOiBOaWUgbWEgdGFraWVnbyBwcnp5cG9yerlka293YW5pYSIKKworIzogZ2xvYmFscy5oOjEyNjAKK21zZ2lkICJFNDc5OiBObyBtYXRjaCIKK21zZ3N0ciAiRTQ3OTogQnJhayBkb3Bhc293YfEiCisKKyM6IGdsb2JhbHMuaDoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODA6IE5vIG1hdGNoOiAlcyIKK21zZ3N0ciAiRTQ4MDogQnJhayBkb3Bhc293YfE6ICVzIgorCisjOiBnbG9iYWxzLmg6MTI2MgorbXNnaWQgIkUzMjogTm8gZmlsZSBuYW1lIgorbXNnc3RyICJFMzI6IEJyYWsgbmF6d3kgcGxpa3UiCisKKyM6IGdsb2JhbHMuaDoxMjYzCittc2dpZCAiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTMzOiBCcmFrIHBvcHJ6ZWRuaWVnbyBwb2RzdGF3aWVuaW93ZWdvIHd5cmG/ZW5pYSByZWd1bGFybmVnbyIKKworIzogZ2xvYmFscy5oOjEyNjQKK21zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCittc2dzdHIgIkUzNDogQnJhayBwb3ByemVkbmllaiBrb21lbmR5IgorCisjOiBnbG9iYWxzLmg6MTI2NQorbXNnaWQgIkUzNTogTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzU6IEJyYWsgcG9wcnplZG5pZWdvIHd5cmG/ZW5pYSByZWd1bGFybmVnbyIKKworIzogZ2xvYmFscy5oOjEyNjYKK21zZ2lkICJFNDgxOiBObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICJFNDgxOiBaYWtyZXMgbmllZG96d29sb255IgorCisjOiBnbG9iYWxzLmg6MTI2OAorbXNnaWQgIkUzNjogTm90IGVub3VnaCByb29tIgorbXNnc3RyICJFMzY6IEJyYWsgbWllanNjYSIKKworIzogZ2xvYmFscy5oOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0Nzogbm8gcmVnaXN0ZXJlZCBzZXJ2ZXIgbmFtZWQgXCIlc1wiIgorbXNnc3RyICJFMjQ3OiBicmFrIHphcmVqZXN0cm93YW5lZ28gc2Vyd2VyYSBvIG5hendpZSBcIiVzXCIiCisKKyM6IGdsb2JhbHMuaDoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODI6IENhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJFNDgyOiBOaWUgbW9n6iBzdHdvcnp55iBwbGlrdSAlcyIKKworIzogZ2xvYmFscy5oOjEyNzQKK21zZ2lkICJFNDgzOiBDYW4ndCBnZXQgdGVtcCBmaWxlIG5hbWUiCittc2dzdHIgIkU0ODM6IE5pZSBtb2fqIHBvYnJh5iBuYXp3eSBwbGlrdSB0eW1jemFzb3dlZ28iCisKKyM6IGdsb2JhbHMuaDoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODQ6IENhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiRTQ4NDogTmllIG1vZ+ogb3R3b3J6eeYgcGxpa3UgJXMiCisKKyM6IGdsb2JhbHMuaDoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODU6IENhbid0IHJlYWQgZmlsZSAlcyIKK21zZ3N0ciAiRTQ4NTogTmllIG1vZ+ogb2Rjenl0YeYgcGxpa3UgJXMiCisKKyM6IGdsb2JhbHMuaDoxMjc3Cittc2dpZCAiRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMzc6IE5pZSB6YXBpc2FubyBvZCBvc3RhdG5pZWogem1pYW55ICh3eW11nCBwcnpleiAhKSIKKworIzogZ2xvYmFscy5oOjEyNzgKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODogWmVyb3d5IGFyZ3VtZW50IgorCisjOiBnbG9iYWxzLmg6MTI4MAorbXNnaWQgIkUzOTogTnVtYmVyIGV4cGVjdGVkIgorbXNnc3RyICJFMzk6IE9jemVrdWrqIGxpY3pieSIKKworIzogZ2xvYmFscy5oOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwOiBDYW4ndCBvcGVuIGVycm9yZmlsZSAlcyIKK21zZ3N0ciAiRTQwOiBOaWUgbW9n6iBvdHdvcnp55iBwbGlrdSBis+pk83cgJXMiCisKKyM6IGdsb2JhbHMuaDoxMjg2Cittc2dpZCAiRTIzMzogY2Fubm90IG9wZW4gZGlzcGxheSIKK21zZ3N0ciAiRTIzMzogbmllIG1vZ+ogb3R3b3J6eeYgZWtyYW51IgorCisjOiBnbG9iYWxzLmg6MTI4OAorbXNnaWQgIkU0MTogT3V0IG9mIG1lbW9yeSEiCittc2dzdHIgIkU0MTogUGFtaermIHd5Y3plcnBhbmEhIgorCisjOiBnbG9iYWxzLmg6MTI5MAorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyB3em9yY2EiCisKKyM6IGdsb2JhbHMuaDoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODY6IFBhdHRlcm4gbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQ4NjogTmllIHpuYWxlemlvbm8gd3pvcmNhOiAlcyIKKworIzogZ2xvYmFscy5oOjEyOTMKK21zZ2lkICJFNDg3OiBBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJFNDg3OiBBcmd1bWVudCBtdXNpIGJ55iBkb2RhdG5pIgorCisjOiBnbG9iYWxzLmg6MTI5NQorbXNnaWQgIkU0NTk6IENhbm5vdCBnbyBiYWNrIHRvIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTQ1OTogTmllIG1vv25hIHByemVqnOYgZG8gcG9wcnplZG5pZWdvIGthdGFsb2d1IgorCisjOiBnbG9iYWxzLmg6MTI5OQorbXNnaWQgIkU0MjogTm8gRXJyb3JzIgorbXNnc3RyICJFNDI6IEJyYWsgQrPqZPN3IgorCisjOiBnbG9iYWxzLmg6MTMwMQorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0MzogUG9wc3V0eSBjablnIHd6b3JjYSIKKworIzogZ2xvYmFscy5oOjEzMDIKK21zZ2lkICJFNDQ6IENvcnJ1cHRlZCByZWdleHAgcHJvZ3JhbSIKK21zZ3N0ciAiRTQ0OiBaZXBzdXR5IHByb2dyYW0gd3lyYb9l8SByZWd1bGFybnljaCIKKworIzogZ2xvYmFscy5oOjEzMDMKK21zZ2lkICJFNDU6ICdyZWFkb25seScgb3B0aW9uIGlzIHNldCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDU6IG9wY2phICdyZWFkb25seScgamVzdCB1c3Rhd2lvbmEgKHd5bXWcIHBvcHJ6ZXogISkiCisKKyM6IGdsb2JhbHMuaDoxMzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjogQ2Fubm90IHNldCByZWFkLW9ubHkgdmFyaWFibGUgXCIlc1wiIgorbXNnc3RyICJFNDY6IE5pZSBtb2fqIHVzdGF3aeYgem1pZW5uZWogdHlsa28gZG8gb2Rjenl0dSBcIiVzXCIiCisKKyM6IGdsb2JhbHMuaDoxMzA4Cittc2dpZCAiRTQ3OiBFcnJvciB3aGlsZSByZWFkaW5nIGVycm9yZmlsZSIKK21zZ3N0ciAiRTQ3OiBCs7lkIHcgdHJha2NpZSBjenl0YW5pYSBwbGlrdSBis+pk83ciCisKKyM6IGdsb2JhbHMuaDoxMzExCittc2dpZCAiRTQ4OiBOb3QgYWxsb3dlZCBpbiBzYW5kYm94IgorbXNnc3RyICJFNDg6IE5pZWRvendvbG9uZSB3IHBpYXNrb3duaWN5IgorCisjOiBnbG9iYWxzLmg6MTMxMworbXNnaWQgIkU1MjM6IE5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU1MjM6IE5pZWRvendvbG9uZSB3IHR5bSBtaWVqc2N1IgorCisjOiBnbG9iYWxzLmg6MTMxNgorbXNnaWQgIkUzNTk6IFNjcmVlbiBtb2RlIHNldHRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTM1OTogVXN0YXdpYW5pZSB0cnlidSBla3JhbnUgbmlld3Nwb21hZ2FuZSIKKworIzogZ2xvYmFscy5oOjEzMTgKK21zZ2lkICJFNDk6IEludmFsaWQgc2Nyb2xsIHNpemUiCittc2dzdHIgIkU0OTogTmlld7NhnGNpd2Egd2llbGtvnOYgcHJ6ZXdpbmnqY2lhIgorCisjOiBnbG9iYWxzLmg6MTMxOQorbXNnaWQgIkU5MTogJ3NoZWxsJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIkU5MTogb3BjamEgJ3NoZWxsJyBqZXN0IHB1c3RhIgorCisjOiBnbG9iYWxzLmg6MTMyMQorbXNnaWQgIkUyNTU6IENvdWxkbid0IHJlYWQgaW4gc2lnbiBkYXRhISIKK21zZ3N0ciAiRTI1NTogTmllIG1vZ7NlbSB3Y3p5dGHmIGRhbnljaCB6bmFrdSEiCisKKyM6IGdsb2JhbHMuaDoxMzIzCittc2dpZCAiRTcyOiBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUiCittc2dzdHIgIkU3MjogQrO5ZCBwb2RjemFzIHphbXlrYW5pYSBwbGlrdSB3eW1pYW55IgorCisjOiBnbG9iYWxzLmg6MTMyNAorbXNnaWQgIkU3MzogdGFnIHN0YWNrIGVtcHR5IgorbXNnc3RyICJFNzM6IHN0b3Mgem5hY3puaWvzdyBqZXN0IHB1c3R5IgorCisjOiBnbG9iYWxzLmg6MTMyNQorbXNnaWQgIkU3NDogQ29tbWFuZCB0b28gY29tcGxleCIKK21zZ3N0ciAiRTc0OiBLb21lbmRhIGplc3QgemJ5dCBza29tcGxpa293YW5hIgorCisjOiBnbG9iYWxzLmg6MTMyNgorbXNnaWQgIkU3NTogTmFtZSB0b28gbG9uZyIKK21zZ3N0ciAiRTc1OiBaYnl0IGSzdWdhIG5hendhIgorCisjOiBnbG9iYWxzLmg6MTMyNworbXNnaWQgIkU3NjogVG9vIG1hbnkgWyIKK21zZ3N0ciAiRTc2OiBaYnl0IHdpZWxlIFsiCisKKyM6IGdsb2JhbHMuaDoxMzI4Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IFpieXQgd2llbGUgbmF6dyBwbGlr83ciCisKKyM6IGdsb2JhbHMuaDoxMzI5Cittc2dpZCAiRTQ4ODogVHJhaWxpbmcgY2hhcmFjdGVycyIKK21zZ3N0ciAiRTQ4ODogTmFkc3TqcG5lIHpuYWN6a2kiCisKKyM6IGdsb2JhbHMuaDoxMzMwCittc2dpZCAiRTc4OiBVbmtub3duIG1hcmsiCittc2dzdHIgIkU3ODogTmllem5hbmEgemFrs2Fka2EiCisKKyM6IGdsb2JhbHMuaDoxMzMxCittc2dpZCAiRTc5OiBDYW5ub3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiRTc5OiBOaWUgbW9nuSByb3p3aW655iB6bmFr83cgd2llbG96bmFjem55Y2giCisKKyM6IGdsb2JhbHMuaDoxMzMzCittc2dpZCAiRTU5MTogJ3dpbmhlaWdodCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWluaGVpZ2h0JyIKK21zZ3N0ciAiRTU5MTogJ3dpbmhlaWdodCcgbmllIG1vv2UgYnnmIG1uaWVqc3plIG5pvyAnd2lubWluaGVpZ2h0JyIKKworIzogZ2xvYmFscy5oOjEzMzUKK21zZ2lkICJFNTkyOiAnd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiRTU5MjogJ3dpbndpZHRoJyBuaWUgbW+/ZSBieeYgbW5pZWpzemUgbmm/ICd3aW5taW53aWR0aCciCisKKyM6IGdsb2JhbHMuaDoxMzM4Cittc2dpZCAiRTgwOiBFcnJvciB3aGlsZSB3cml0aW5nIgorbXNnc3RyICJFODA6IEKzuWQgdyB0cmFrY2llIHphcGlzdSIKKworIzogZ2xvYmFscy5oOjEzMzkKK21zZ2lkICJaZXJvIGNvdW50IgorbXNnc3RyICJaZXJvd3kgbGljem5payIKKworIzogZ2xvYmFscy5oOjEzNDEKK21zZ2lkICJFODE6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0IgorbXNnc3RyICJFODE6IFW/eWNpZSA8U0lEPiBwb3phIGtvbnRla3N0ZW0gc2tyeXB0dSIKKworIzogZ2xvYmFscy5oOjEzNDQKK21zZ2lkICJFNDQ5OiBJbnZhbGlkIGV4cHJlc3Npb24gcmVjZWl2ZWQiCittc2dzdHIgIkU0NDk6IE9kZWJyYbNlbSBuaWV3s2GcY2l3ZSB3eXJhv2VuaWUiCisKKyM6IGdsb2JhbHMuaDoxMzQ3Cittc2dpZCAiRTQ2MzogUmVnaW9uIGlzIGd1YXJkZWQsIGNhbm5vdCBtb2RpZnkiCittc2dzdHIgIkU0NjM6IFJlZ2lvbiBqZXN0IGNocm9uaW9ueSwgbmllIG1vZ+ogem1pZW5p5iIKKwpkaWZmIC0tZ2l0IGEvc3JjL3BvL3BsLnBvIGIvc3JjL3BvL3BsLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwM2QzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vcGwucG8KQEAgLTAsMCArMSw2NTc2IEBACisjIHRyYW5zbGF0aW9uIG9mIHBsLnBvIHRvIFBvbGlzaAorIyBQb2xpc2ggVHJhbnNsYXRpb24gZm9yIFZpbQorIworIyB1cGRhdGVkIDIwMDEgZm9yIHZpbS02LjAKKyMgRklSU1QgQVVUSE9SIE1hcmNpbiBEYWxlY2tpIDxkYWxlY2tpQGN5YmVyLmNzLm5ldC5wbD4sIDIwMDAuCisjIE1pa29sYWogTWFjaG93c2tpIDxtaWttYWNoQHdwLnBsPiwgMjAwNC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBsXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDQtMDUtMjMgMjE6NDErMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMDUtMjMgMjI6MDArMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWlrb2xhaiBNYWNob3dza2kgPG1pa21hY2hAd3AucGw+XG4iCisiTGFuZ3VhZ2UtVGVhbTogUG9saXNoIDxwbEBsaS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMlxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUdlbmVyYXRvcjogS0JhYmVsIDEuOVxuIgorCisjOiBidWZmZXIuYzoxMDIKK21zZ2lkICJFODI6IENhbm5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLCBleGl0aW5nLi4uIgorbXNnc3RyICJFODI6IE5pZSBtb2fqIHphcmV6ZXJ3b3dh5iBidWZvcmE7IHpha2/xY3plbmllLi4uIgorCisjOiBidWZmZXIuYzoxMDUKK21zZ2lkICJFODM6IENhbm5vdCBhbGxvY2F0ZSBidWZmZXIsIHVzaW5nIG90aGVyIG9uZS4uLiIKK21zZ3N0ciAiRTgzOiBOaWUgbW9n6iB6YXJlemVyd293YeYgYnVmb3JhOyB1v3l3YW0gaW5uZWdvLi4uIgorCisjOiBidWZmZXIuYzo4MDUKK21zZ2lkICJFNTE1OiBObyBidWZmZXJzIHdlcmUgdW5sb2FkZWQiCittc2dzdHIgIkU1MTU6IE5pZSB3ebNhZG93YW5vIL9hZG5lZ28gYnVmb3JhIgorCisjOiBidWZmZXIuYzo4MDcKK21zZ2lkICJFNTE2OiBObyBidWZmZXJzIHdlcmUgZGVsZXRlZCIKK21zZ3N0ciAiRTUxNjogTmllIHNrYXNvd2FubyC/YWRuZWdvIGJ1Zm9yYSIKKworIzogYnVmZmVyLmM6ODA5Cittc2dpZCAiRTUxNzogTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAiRTUxNzogTmllIHd5cnp1Y29ubyC/YWRuZWdvIGJ1Zm9yYSIKKworIzogYnVmZmVyLmM6ODE3Cittc2dpZCAiMSBidWZmZXIgdW5sb2FkZWQiCittc2dzdHIgIjEgYnVmb3Igd3mzYWRvd2FueSIKKworIzogYnVmZmVyLmM6ODE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgdW5sb2FkZWQiCittc2dzdHIgInd5s2Fkb3dhbm8gJWQgYnVmb3LzdyIKKworIzogYnVmZmVyLmM6ODI0Cittc2dpZCAiMSBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiMSBidWZvciBza2Fzb3dhbnkiCisKKyM6IGJ1ZmZlci5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIGRlbGV0ZWQiCittc2dzdHIgIiVkIGJ1Zm9y83cgc2thc293YW5vIgorCisjOiBidWZmZXIuYzo4MzEKK21zZ2lkICIxIGJ1ZmZlciB3aXBlZCBvdXQiCittc2dzdHIgInd5cnp1Y29ubyAxIGJ1Zm9yICIKKworIzogYnVmZmVyLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgd2lwZWQgb3V0IgorbXNnc3RyICJ3eXJ6dWNvbm8gJWQgYnVmb3LzdyIKKworIzogYnVmZmVyLmM6ODk0Cittc2dpZCAiRTg0OiBObyBtb2RpZmllZCBidWZmZXIgZm91bmQiCittc2dzdHIgIkU4NDogTmllIHpuYWxlemlvbm8gem1pZW5pb255Y2ggYnVmb3LzdyIKKworIy4gYmFjayB3aGVyZSB3ZSBzdGFydGVkLCBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyM6IGJ1ZmZlci5jOjkzMworbXNnaWQgIkU4NTogVGhlcmUgaXMgbm8gbGlzdGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTg1OiBOaWUgbWEgd3lsaXN0b3dhbnljaCBidWZvcvN3IgorCisjOiBidWZmZXIuYzo5NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg2OiBCdWZmZXIgJWxkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFODY6IEJ1Zm9yIFwiJWxkXCIgbmllIGlzdG5pZWplIgorCisjOiBidWZmZXIuYzo5NDgKK21zZ2lkICJFODc6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU4NzogTmllIG1vZ+ogcHJ6ZWq25iBwb3phIG9zdGF0bmkgYnVmb3IiCisKKyM6IGJ1ZmZlci5jOjk1MAorbXNnaWQgIkU4ODogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBidWZmZXIiCittc2dzdHIgIkU4ODogTmllIG1vZ+ogcHJ6ZWq25iBwcnplZCBwaWVyd3N6eSBidWZvciIKKworIzogYnVmZmVyLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4OTogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciAlbGQgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTg5IE5pZSB6YXBpc2FubyB6bWlhbiB3IGJ1Zm9yemUgJWxkICh3eW11tiBwcnpleiAhKSIKKworIzogYnVmZmVyLmM6MTAwNQorbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiBOaWUgbW9n6iB3ebNhZG93YeYgb3N0YXRuaWVnbyBidWZvcmEiCisKKyM6IGJ1ZmZlci5jOjE1MzgKK21zZ2lkICJXMTQ6IFdhcm5pbmc6IExpc3Qgb2YgZmlsZSBuYW1lcyBvdmVyZmxvdyIKK21zZ3N0ciAiVzE0OiBPU1RSWkWvRU5JRTogUHJ6ZXBls25pZW5pZSBsaXN0eSBuYXp3IHBsaWvzdyIKKworIzogYnVmZmVyLmM6MTcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFOTI6IEJ1ZmZlciAlbGQgbm90IGZvdW5kIgorbXNnc3RyICJFOTI6IE5pZSB6bmFsZXppb25vIGJ1Zm9yYSAlbGQiCisKKyM6IGJ1ZmZlci5jOjE5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkzOiBNb3JlIHRoYW4gb25lIG1hdGNoIGZvciAlcyIKK21zZ3N0ciAiRTkzOiBXaWVsb2tyb3RuZSBkb3Bhc293YW5pYSBkbGEgJXMiCisKKyM6IGJ1ZmZlci5jOjE5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIgorbXNnc3RyICJFOTQ6IK9hZGVuIGJ1Zm9yIG5pZSBwYXN1amUgZG8gJXMiCisKKyM6IGJ1ZmZlci5jOjIzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQiCittc2dzdHIgIndpZXJzeiAlbGQiCisKKyM6IGJ1ZmZlci5jOjI0MjAKK21zZ2lkICJFOTU6IEJ1ZmZlciB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTk1OiBCdWZvciBvIHRlaiBuYXp3aWUganW/IGlzdG5pZWplIgorCisjOiBidWZmZXIuYzoyNzEzCittc2dpZCAiIFtNb2RpZmllZF0iCittc2dzdHIgIiBbWm1pZW5pb255XSIKKworIzogYnVmZmVyLmM6MjcxOAorbXNnaWQgIltOb3QgZWRpdGVkXSIKK21zZ3N0ciAiW05pZSBlZHl0b3dhbnldIgorCisjOiBidWZmZXIuYzoyNzIzCittc2dpZCAiW05ldyBmaWxlXSIKK21zZ3N0ciAiW05vd3kgUGxpa10iCisKKyM6IGJ1ZmZlci5jOjI3MjQKK21zZ2lkICJbUmVhZCBlcnJvcnNdIgorbXNnc3RyICJbQrOxZCBvZGN6eXR1XSIKKworIzogYnVmZmVyLmM6MjcyNiBmaWxlaW8uYzoyMTEyCittc2dpZCAiW3JlYWRvbmx5XSIKK21zZ3N0ciAiW3R5bGtvIG9kY3p5dF0iCisKKyM6IGJ1ZmZlci5jOjI3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lIC0tJWQlJS0tIgorbXNnc3RyICIxIHdpZXJzeiAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6Mjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgLS0lZCUlLS0iCittc2dzdHIgIiVsZCB3aWVyc3plIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICJ3aWVyc3ogJWxkIHogJWxkIC0tJWQlJS0tIGtvbCAiCisKKyM6IGJ1ZmZlci5jOjI4NjQKK21zZ2lkICJbTm8gZmlsZV0iCittc2dzdHIgIltCcmFrIHBsaWt1XSIKKworIy4gbXVzdCBiZSBhIGhlbHAgYnVmZmVyCisjOiBidWZmZXIuYzoyOTA0Cittc2dpZCAiaGVscCIKK21zZ3N0ciAicG9tb2MiCisKKyM6IGJ1ZmZlci5jOjM0NjMgc2NyZWVuLmM6NTA3NQorbXNnaWQgIltoZWxwXSIKK21zZ3N0ciAiW3BvbW9jXSIKKworIzogYnVmZmVyLmM6MzQ5NSBzY3JlZW4uYzo1MDgxCittc2dpZCAiW1ByZXZpZXddIgorbXNnc3RyICJbUG9kZ2yxZF0iCisKKyM6IGJ1ZmZlci5jOjM3NzUKK21zZ2lkICJBbGwiCittc2dzdHIgIldzenlzdGtvIgorCisjOiBidWZmZXIuYzozNzc1Cittc2dpZCAiQm90IgorbXNnc3RyICJE87MiCisKKyM6IGJ1ZmZlci5jOjM3NzcKK21zZ2lkICJUb3AiCittc2dzdHIgIkfzcmEiCisKKyM6IGJ1ZmZlci5jOjQ1MjMKK21zZ2lkICIiCisiXG4iCisiIyBCdWZmZXIgbGlzdDpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgTGlzdGEgYnVmb3LzdzpcbiIKKworIzogYnVmZmVyLmM6NDU1NgorbXNnaWQgIltFcnJvciBMaXN0XSIKK21zZ3N0ciAiW0xpc3RhIEKz6mTzd10iCisKKyM6IGJ1ZmZlci5jOjQ1NjkgbWVtbGluZS5jOjE1MjAKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIltCcmFrIFBsaWt1XSIKKworIzogYnVmZmVyLmM6NDg4MgorbXNnaWQgIiIKKyJcbiIKKyItLS0gU2lnbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFpuYWtpIC0tLSIKKworIzogYnVmZmVyLmM6NDkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJTaWducyBmb3IgJXM6IgorbXNnc3RyICJabmFraSBkbGEgJXM6IgorCisjOiBidWZmZXIuYzo0OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBsaW5lPSVsZCAgaWQ9JWQgIG5hbWU9JXMiCittc2dzdHIgIiAgICB3aWVyc3o9JWxkICBpZD0lZCAgbmF6d2E9JXMiCisKKyM6IGRpZmYuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6IE5pZSBtb2fqIHpy879uaWNvd2HmIHdp6mNlaiBuab8gJWxkIGJ1Zm9y83ciCisKKyM6IGRpZmYuYzo3MDkKK21zZ2lkICJFOTc6IENhbm5vdCBjcmVhdGUgZGlmZnMiCittc2dzdHIgIkU5NzogTmllIG1vZ+ogc3R3b3J6eeYgcvO/bmljIgorCisjOiBkaWZmLmM6ODE0Cittc2dpZCAiUGF0Y2ggZmlsZSIKK21zZ3N0ciAiUGxpayCzYXRhIgorCisjOiBkaWZmLmM6MTA2NQorbXNnaWQgIkU5ODogQ2Fubm90IHJlYWQgZGlmZiBvdXRwdXQiCittc2dzdHIgIkU5ODogTmllIG1vZ+ogd2N6eXRh5iB3eWq2Y2lhIHLzv25pY3kiCisKKyM6IGRpZmYuYzoxODE1Cittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IEJpZb+xY3kgYnVmb3IgbmllIGplc3QgdyB0cnliaWUgcvO/bmljIgorCisjOiBkaWZmLmM6MTgyNworbXNnaWQgIkUxMDA6IE5vIG90aGVyIGJ1ZmZlciBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDA6IEJyYWsgaW5uZWdvIGJ1Zm9yYSB3IHRyeWJpZSBy879uaWMiCisKKyM6IGRpZmYuYzoxODM1Cittc2dpZCAiRTEwMTogTW9yZSB0aGFuIHR3byBidWZmZXJzIGluIGRpZmYgbW9kZSwgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlIgorbXNnc3RyICJFMTAxOiBXaepjZWogbmm/IGplZGVuIGJ1Zm9yIHcgdHJ5YmllIHLzv25pY293YW5pYSwgbmllIHdpZW0ga3TzcmVnbyB1v3nmIgorCisjOiBkaWZmLmM6MTg1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAyOiBDYW4ndCBmaW5kIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxMDI6IE5pZSBtb2fqIHpuYWxlvOYgYnVmb3JhIFwiJXNcIiIKKworIzogZGlmZi5jOjE4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMzogQnVmZmVyIFwiJXNcIiBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAzOiBCdWZvciBcIiVzXCIgbmllIGplc3QgdyB0cnliaWUgcvO/bmljb3dhbmlhIgorCisjOiBkaWdyYXBoLmM6MjE5OQorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiBFc2NhcGUgamVzdCBuaWVkb3p3b2xvbmUgdyBkd3VncmFmaWUiCisKKyM6IGRpZ3JhcGguYzoyMzg0Cittc2dpZCAiRTU0NDogS2V5bWFwIGZpbGUgbm90IGZvdW5kIgorbXNnc3RyICJFNTQ0OiBOaWUgem5hbGV6aW9ubyBwbGlrdSByb3prs2FkdSBrbGF3aXN6eSIKKworIzogZGlncmFwaC5jOjI0MTEKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IFphc3Rvc293YW5vIDpsb2Fka2V5bWFwIHcgbmlld2N6eXRhbnltIHBsaWt1IgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiIERvcGWzbmlhbmllIHOz83cga2x1Y3pvd3ljaCAoXk5eUCkiCisKKyMuIGN0cmxfeF9tb2RlID09IDAsIF5QL15OIGNvbXBsLgorIzogZWRpdC5jOjQxCittc2dpZCAiIF5YIG1vZGUgKF5FXlleTF5dXkZeSV5LXkReVl5OXlApIgorbXNnc3RyICIgXlggdHJ5YiAoXkVeWV5MXl1eRl5JXkteRF5WXk5eUCkiCisKKyMuIFNjcm9sbCBoYXMgaXQncyBvd24gbXNncywgaW4gaXQncyBwbGFjZSB0aGVyZSBpcyB0aGUgbXNnIGZvciBsb2NhbAorIy4gKiBjdHJsX3hfbW9kZSA9IDAgKGVnIGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfTE9DQUwpICAtLSBBY2V2ZWRvCisjOiBlZGl0LmM6NDQKK21zZ2lkICIgS2V5d29yZCBMb2NhbCBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiIExva2FsbmUgZG9wZbNuaWFuaWUgc7PzdyBrbHVjem93eWNoICheTl5QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkxeTl5QKSIKK21zZ3N0ciAiIERvcGWzbmlhbmllIHBls255Y2ggd2llcnN6eSAoXkxeTl5QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRl5OXlApIgorbXNnc3RyICIgRG9wZbNuaWFuaWUgbmF6dyBwbGlr83cgKF5GXk5eUCkiCisKKyM6IGVkaXQuYzo0NworbXNnaWQgIiBUYWcgY29tcGxldGlvbiAoXl1eTl5QKSIKK21zZ3N0ciAiIERvcGWzbmlhbmllIHpuYWN6bmlr83cgKF5dXk5eUCkiCisKKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiBEb3Bls25pYW5pZSB3em9yY/N3IHRyb3DzdyAoXk5eUCkiCisKKyM6IGVkaXQuYzo0OQorbXNnaWQgIiBEZWZpbml0aW9uIGNvbXBsZXRpb24gKF5EXk5eUCkiCittc2dzdHIgIiBEb3Bls25pYW5pZSBkZWZpbmljamkgKF5EXk5eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LXk5eUCkiCittc2dzdHIgIiBEb3Bls25pYW5pZSB6ZSBzs293bmlr83cgKF5LXk5eUCkiCisKKyM6IGVkaXQuYzo1MgorbXNnaWQgIiBUaGVzYXVydXMgY29tcGxldGlvbiAoXlReTl5QKSIKK21zZ3N0ciAiIERvcGWzbmlhbmllIHogdGV6YXVydXNhICheVF5OXlApIgorCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WXk5eUCkiCittc2dzdHIgIiBEb3Bls25pYW5pZSB3aWVyc3phIHBvbGVjZfEgKF5WXk5eUCkiCisKKyM6IGVkaXQuYzo1NgorbXNnaWQgIkhpdCBlbmQgb2YgcGFyYWdyYXBoIgorbXNnc3RyICJEb2Jps2VtIGRvIGtv8WNhIGFrYXBpdHUiCisKKyM6IGVkaXQuYzo5NjIKK21zZ2lkICIndGhlc2F1cnVzJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIm9wY2phICd0aGVzYXVydXMnIGplc3QgcHVzdGEiCisKKyM6IGVkaXQuYzoxMTY2Cittc2dpZCAiJ2RpY3Rpb25hcnknIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAib3BjamEgJ2RpY3Rpb25hcnknIGplc3QgcHVzdGEiCisKKyM6IGVkaXQuYzoyMTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGRpY3Rpb25hcnk6ICVzIgorbXNnc3RyICJQcnplZ2yxZGFtIHOzb3duaWs6ICVzIgorCisjOiBlZGl0LmM6MjM2OAorbXNnaWQgIiAoaW5zZXJ0KSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiICh3cHJvd2FkemFuaWUpIFByemV3aWphbmllICheRS9eWSkiCisKKyM6IGVkaXQuYzoyMzcwCittc2dpZCAiIChyZXBsYWNlKSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiICh6YW1pYW5hKSBQcnpld2lqYW5pZSAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIlByemVnbLFkYW06ICVzIgorCisjOiBlZGl0LmM6MjcxOQorbXNnaWQgIlNjYW5uaW5nIHRhZ3MuIgorbXNnc3RyICJQcnplZ2yxZGFtIHpuYWN6bmlraS4iCisKKyM6IGVkaXQuYzozMzgxCittc2dpZCAiIEFkZGluZyIKK21zZ3N0ciAiIERvZGFq6iIKKworIy4gc2hvd21vZGUgbWlnaHQgcmVzZXQgdGhlIGludGVybmFsIGxpbmUgcG9pbnRlcnMsIHNvIGl0IG11c3QKKyMuICogYmUgY2FsbGVkIGJlZm9yZSBsaW5lID0gbWxfZ2V0KCksIG9yIHdoZW4gdGhpcyBhZGRyZXNzIGlzIG5vCisjLiAqIGxvbmdlciBuZWVkZWQuICAtLSBBY2V2ZWRvLgorIy4KKyM6IGVkaXQuYzozNDMwCittc2dpZCAiLS0gU2VhcmNoaW5nLi4uIgorbXNnc3RyICItLSBTenVrYW0uLi4iCisKKyM6IGVkaXQuYzozNDg2Cittc2dpZCAiQmFjayBhdCBvcmlnaW5hbCIKK21zZ3N0ciAiWiBwb3dyb3RlbSBuYSBwaWVyd290bnltIgorCisjOiBlZGl0LmM6MzQ5MQorbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICJXeXJheiB6IGlubmVnbyB3aWVyc3phIgorCisjOiBlZGl0LmM6MzQ5NgorbXNnaWQgIlRoZSBvbmx5IG1hdGNoIgorbXNnc3RyICJKZWR5bmUgZG9wYXNvd2FuaWUiCisKKyM6IGVkaXQuYzozNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICJwYXN1amUgJWQgeiAlZCIKKworIzogZWRpdC5jOjM1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgInBhc3VqZSAlZCIKKworIy4gU2tpcCBmdXJ0aGVyIGFyZ3VtZW50cyBidXQgZG8gY29udGludWUgdG8KKyMuICogc2VhcmNoIGZvciBhIHRyYWlsaW5nIGNvbW1hbmQuCisjOiBldmFsLmM6MTAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA2OiBVbmtub3duIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDY6IE5pZXpuYW5hIHptaWVubmE6IFwiJXNcIiIKKworIzogZXZhbC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNzogTWlzc2luZyBicmFjZXM6ICVzIgorbXNnc3RyICJFMTA3OiBCcmFrIG5hd2lhc/N3OiAlcyIKKworIzogZXZhbC5jOjE0MzUgZXZhbC5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiBOaWUgaXN0bmllamUgem1pZW5uYTogXCIlc1wiIgorCisjOiBldmFsLmM6MTcwNQorbXNnaWQgIkUxMDk6IE1pc3NpbmcgJzonIGFmdGVyICc/JyIKK21zZ3N0ciAiRTEwOTogQnJhayAnOicgcG8gJz8nIgorCisjOiBldmFsLmM6MjMyNworbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiBCcmFrICcpJyIKKworIzogZXZhbC5jOjIzODkKK21zZ2lkICJFMTExOiBNaXNzaW5nICddJyIKK21zZ3N0ciAiRTExMTogQnJhayAnXSciCisKKyM6IGV2YWwuYzoyNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIgorbXNnc3RyICJFMTEyOiBCcmFrIG5hend5IG9wY2ppOiAlcyIKKworIzogZXZhbC5jOjI0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMzogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMTEzOiBOaWV6bmFuYSBvcGNqYTogJXMiCisKKyM6IGV2YWwuYzoyNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTQ6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE0OiBCcmFrIGN1ZHp5c7Nvd3U6ICVzIgorCisjOiBldmFsLmM6MjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE1OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNTogQnJhayBjdWR6eXOzb3d1OiAlcyIKKworIzogZXZhbC5jOjMwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNjogSW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICVzIgorbXNnc3RyICJFMTE2OiBOaWV3s2G2Y2l3ZSBhcmd1bWVudHkgZGxhIGZ1bmtjamkgJXMiCisKKyM6IGV2YWwuYzozMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiBOaWV6bmFuYSBmdW5rY2phOiAlcyIKKworIzogZXZhbC5jOjMwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExODogVG9vIG1hbnkgYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTg6IFpieXQgd2llbGUgYXJndW1lbnTzdyBkbGEgZnVua2NqaTogJXMiCisKKyM6IGV2YWwuYzozMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTk6IFphIG1hs28gYXJndW1lbnTzdyBkbGEgZnVua2NqaTogJXMiCisKKyM6IGV2YWwuYzozMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjA6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0OiAlcyIKK21zZ3N0ciAiRTEyMDogWmFzdG9zb3dhbm8gPFNJRD4gcG96YSBza3J5cHRlbTogJXMiCisKKyMuCisjLiAqIFllcyB0aGlzIGlzIHVnbHksIEkgZG9uJ3QgcGFydGljdWxhcmx5IGxpa2UgaXQgZWl0aGVyLiAgQnV0IGRvaW5nIGl0CisjLiAqIHRoaXMgd2F5IGhhcyB0aGUgY29tcGVsbGluZyBhZHZhbnRhZ2UgdGhhdCB0cmFuc2xhdGlvbnMgbmVlZCBub3QgdG8KKyMuICogYmUgdG91Y2hlZCBhdCBhbGwuICBTZWUgYmVsb3cgd2hhdCAnb2snIGFuZCAneW5jJyBhcmUgdXNlZCBmb3IuCisjLgorIzogZXZhbC5jOjM2ODcgZ3VpLmM6NDM3NiBndWlfZ3RrLmM6MjA1OQorbXNnaWQgIiZPayIKK21zZ3N0ciAiJk9rIgorCisjOiBldmFsLmM6NDIyNgorIywgYy1mb3JtYXQKK21zZ2lkICIrLSVzJTNsZCBsaW5lczogIgorbXNnc3RyICIrLSVzJTNsZCB3aWVyc3p5OiAiCisKKyM6IGV2YWwuYzo1NDc3Cittc2dpZCAiIgorIiZPS1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImT0tcbiIKKyImWmFrb/FjeiIKKworIzogZXZhbC5jOjU1MTcKK21zZ2lkICJjYWxsZWQgaW5wdXRyZXN0b3JlKCkgbW9yZSBvZnRlbiB0aGFuIGlucHV0c2F2ZSgpIgorbXNnc3RyICJ3eXdvs2FubyBpbnB1dHJlc3RvcmUoKSB3aepjZWogcmF6eSBuab8gaW5wdXRzYXZlKCkiCisKKyM6IGV2YWwuYzo1OTc3Cittc2dpZCAiRTY1NTogVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgKGN5Y2xlPykiCittc2dzdHIgIkU2NTU6IFphIGR1v28gZG93abF6YfEgc3ltYm9saWN6bnljaCAocOp0bGE/KSIKKworIzogZXZhbC5jOjY2MDkKK21zZ2lkICJFMjQwOiBObyBjb25uZWN0aW9uIHRvIFZpbSBzZXJ2ZXIiCittc2dzdHIgIkUyNDA6IEJyYWsgcG+zsWN6ZW5pYSB6IHNlcndlcmVtIFZpbSIKKworIzogZXZhbC5jOjY3MDYKK21zZ2lkICJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIKK21zZ3N0ciAiRTI3NzogTmllIG1vZ+ogY3p5dGHmIG9kcG93aWVkemkgc2Vyd2VyYSIKKworIzogZXZhbC5jOjY3MzQKK21zZ2lkICJFMjU4OiBVbmFibGUgdG8gc2VuZCB0byBjbGllbnQiCittc2dzdHIgIkUyNTg6IE5pZSBtb2fqIHd5c7Nh5iBkbyBrbGllbnRhIgorCisjOiBldmFsLmM6Njc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQxOiBVbmFibGUgdG8gc2VuZCB0byAlcyIKK21zZ3N0ciAiRTI0MTogTmllIG1vZ+ogd3lzs2HmIGRvICVzIgorCisjOiBldmFsLmM6Njg4MgorbXNnaWQgIihJbnZhbGlkKSIKK21zZ3N0ciAiKE5pZXezYbZjaXdlKSIKKworIzogZXZhbC5jOjgwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMTogVW5kZWZpbmVkIHZhcmlhYmxlOiAlcyIKK21zZ3N0ciAiRTEyMTogTmllb2tyZbZsb25hIHptaWVubmE6ICVzIgorCisjOiBldmFsLmM6ODQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJFNDE4OiBOaWVkb3p3b2xvbmEgbmF6d2Egem1pZW5uZWo6ICVzIgorCisjOiBldmFsLmM6ODc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgYWRkICEgdG8gcmVwbGFjZSBpdCIKK21zZ3N0ciAiRTEyMjogRnVua2NqYSAlcyBqdb8gaXN0bmllamU7IGFieSBqsSB6YW1pZW5p5iB1v3lqICEiCisKKyM6IGV2YWwuYzo4ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjM6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMjM6IE5pZW9rcmW2bG9uYSBmdW5rY2phOiAlcyIKKworIzogZXZhbC5jOjg4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNDogTWlzc2luZyAnKCc6ICVzIgorbXNnc3RyICJFMTI0OiBCcmFrICcoJzogJXMiCisKKyM6IGV2YWwuYzo4OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiBOaWVkb3p3b2xvbnkgYXJndW1lbnQ6ICVzIgorCisjOiBldmFsLmM6ODk4MgorbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiBCcmFrIDplbmRmdW5jdGlvbiIKKworIzogZXZhbC5jOjkwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNzogQ2Fubm90IHJlZGVmaW5lIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMjc6IE5pZSBtb2fqIHByemVkZWZpbmlvd2HmIGZ1bmtjamkgJXM6IGplc3QgdyB1v3ljaXUiCisKKyM6IGV2YWwuYzo5MTU5Cittc2dpZCAiRTEyOTogRnVuY3Rpb24gbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTEyOTogV3ltYWdhbmEgamVzdCBuYXp3YSBmdW5rY2ppIgorCisjOiBldmFsLmM6OTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI4OiBGdW5jdGlvbiBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWw6ICVzIgorbXNnc3RyICJFMTI4OiBOYXp3YSBmdW5rY2ppIG11c2kgcm96cG9jenluYeYgc2nqIGR1v7EgbGl0ZXKxOiAlcyIKKworIzogZXZhbC5jOjk0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMDogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEzMDogTmllb2tyZbZsb25hIGZ1bmtjamE6ICVzIgorCisjOiBldmFsLmM6OTQwNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTMxOiBDYW5ub3QgZGVsZXRlIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMzE6IE5pZSBtb2fqIHNrYXNvd2HmIGZ1bmtjamkgJXM6IGplc3QgdyB1v3ljaXUiCisKKyM6IGV2YWwuYzo5NDU1Cittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiRTEzMjogWmFnbmllv2S/ZW5pZSB3eXdvs2HxIGZ1bmtjamkgcG9uYWQgJ21heGZ1bmNkZXB0aCciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjk1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAid3l3b7N1auogJXMiCisKKyM6IGV2YWwuYzo5NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFib3J0ZWQiCittc2dzdHIgInBvcnp1Y29ubyAlcyIKKworIzogZXZhbC5jOjk1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgIiVzIHp3cmFjYSAjJWxkIgorCisjOiBldmFsLmM6OTU3OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICIlcyB6d3JhY2EgXCIlc1wiIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV2YWwuYzo5NTk1IGV4X2NtZHMyLmM6MjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb250aW51aW5nIGluICVzIgorbXNnc3RyICJrb250eW51YWNqYSB3ICVzIgorCisjOiBldmFsLmM6OTYyMQorbXNnaWQgIkUxMzM6IDpyZXR1cm4gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTMzOiA6cmV0dXJuIHBvemEgZnVua2NqsSIKKworIzogZXZhbC5jOjk5NTIKK21zZ2lkICIiCisiXG4iCisiIyBnbG9iYWwgdmFyaWFibGVzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyB6bWllbm5lIGdsb2JhbG5lOlxuIgorCisjOiBleF9jbWRzMi5jOjkyCittc2dpZCAiRW50ZXJpbmcgRGVidWcgbW9kZS4gIFR5cGUgXCJjb250XCIgdG8gY29udGludWUuIgorbXNnc3RyICJXY2hvZHrqIHcgdHJ5YiBvZHBsdXNrd2lhbmlhLiBXcHJvd2FkvCBcImNvbnRcIiBhYnkga29udHludW93YeYuIgorCisjOiBleF9jbWRzMi5jOjk2IGV4X2RvY21kLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiAlcyIKK21zZ3N0ciAid2llcnN6ICVsZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY21kOiAlcyIKK21zZ3N0ciAiY21kOiAlcyIKKworIzogZXhfY21kczIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJlYWtwb2ludCBpbiBcIiVzJXNcIiBsaW5lICVsZCIKK21zZ3N0ciAiUHVua3Qga29udHJvbG55IHcgXCIlcyVzXCIgd2llcnN6ICVsZCIKKworIzogZXhfY21kczIuYzo1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MTogQnJlYWtwb2ludCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMTYxOiBOaWUgem5hbGV6aW9ubyBwdW5rdHUga29udHJvbG5lZ286ICVzIgorCisjOiBleF9jbWRzMi5jOjU2NgorbXNnaWQgIk5vIGJyZWFrcG9pbnRzIGRlZmluZWQiCittc2dzdHIgIk5pZSBva3Jltmxvbm8gv2FkbnljaCBwdW5rdPN3IGtvbnRyb2xueWNoIgorCisjOiBleF9jbWRzMi5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlM2QgICVzICVzICBsaW5lICVsZCIKK21zZ3N0ciAiJTNkICAlcyAlcyAgd2llcnN6ICVsZCIKKworIzogZXhfY21kczIuYzo3NjMgZXhfY21kcy5jOjIwOTcgZXhfY21kcy5jOjIzNjIKK21zZ2lkICJTYXZlIEFzIgorbXNnc3RyICJaYXBpc3ogamFrbyIKKworIzogZXhfY21kczIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZSBjaGFuZ2VzIHRvIFwiJS4qc1wiPyIKK21zZ3N0ciAiWmFjaG93YWogem1pYW55IHcgXCIlLipzXCI/IgorCisjOiBleF9jbWRzMi5jOjc4OCBleF9kb2NtZC5jOjkzODAKK21zZ2lkICJVbnRpdGxlZCIKK21zZ3N0ciAiQmV6IFR5dHWzdSIKKworIzogZXhfY21kczIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MjogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxNjI6IE5pZSB6YXBpc2FubyB6bWlhbiB3IGJ1Zm9yemUgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjk4NAorbXNnaWQgIldhcm5pbmc6IEVudGVyZWQgb3RoZXIgYnVmZmVyIHVuZXhwZWN0ZWRseSAoY2hlY2sgYXV0b2NvbW1hbmRzKSIKK21zZ3N0ciAiT1NUUlpFr0VOSUU6IE5pZW9jemVraXdhbmUgd2VqtmNpZSB3IGlubnkgYnVmb3IgKHNwcmF3ZLwgYXV0b2tvbWVuZHkpIgorCisjOiBleF9jbWRzMi5jOjEzODcKK21zZ2lkICJFMTYzOiBUaGVyZSBpcyBvbmx5IG9uZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNjM6IFR5bGtvIGplZGVuIHBsaWsgdyBlZHljamkiCisKKyM6IGV4X2NtZHMyLmM6MTM4OQorbXNnaWQgIkUxNjQ6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiRTE2NDogTmllIG1vv25hIHByemVqtuYgcHJ6ZWQgcGllcndzenkgcGxpayIKKworIzogZXhfY21kczIuYzoxMzkxCittc2dpZCAiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiCittc2dzdHIgIkUxNjU6IE5pZSBtb79uYSBwcnplarbmIHphIG9zdGF0bmkgcGxpayIKKworIzogZXhfY21kczIuYzoxODA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NjY6IGNvbXBpbGVyIG5vdCBzdXBwb3J0ZWQ6ICVzIgorbXNnc3RyICJFNjY2OiBuaWUgd3NwaWVyYW55IGtvbXBpbGF0b3I6ICVzIgorCisjOiBleF9jbWRzMi5jOjE4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIgaW4gXCIlc1wiIgorbXNnc3RyICJTenVrYW5pZSBcIiVzXCIgdyBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiIKK21zZ3N0ciAiU3p1a2FuaWUgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGZvdW5kIGluICdydW50aW1lcGF0aCc6IFwiJXNcIiIKK21zZ3N0ciAibmllIHpuYWxlemlvbm8gdyAncnVudGltZXBhdGgnOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTk3NAorbXNnaWQgIlNvdXJjZSBWaW0gc2NyaXB0IgorbXNnc3RyICJXY3p5dGFqIHNrcnlwdCBWaW1hIgorCisjOiBleF9jbWRzMi5jOjIxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNvdXJjZSBhIGRpcmVjdG9yeTogXCIlc1wiIgorbXNnc3RyICJOaWUgbW+/bmEgd2N6eXRh5iBrYXRhbG9ndTogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIm5pZSBtb2ezZW0gd2N6eXRh5iBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIndpZXJzejogJWxkIG5pZSBtb2ezZW0gd2N6eXRh5iBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgIndjenl0eXdhbmllIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgIndpZXJzeiAlbGQ6IHdjenl0eXdhbmllIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNvdXJjaW5nICVzIgorbXNnc3RyICJza2/xY3pvbm8gd2N6eXR5d2FuaWUgJXMiCisKKyM6IGV4X2NtZHMyLmM6MjcwNworbXNnaWQgIlcxNTogV2FybmluZzogV3JvbmcgbGluZSBzZXBhcmF0b3IsIF5NIG1heSBiZSBtaXNzaW5nIgorbXNnc3RyICJXMTU6IE9TVFJaRa9FTklFOiBOaWV3s2G2Y2l3eSBzZXBhcmF0b3Igd2llcnN6eSwgcGV3bmllIGJyYWsgXk0iCisKKyM6IGV4X2NtZHMyLmM6Mjc1NgorbXNnaWQgIkUxNjc6IDpzY3JpcHRlbmNvZGluZyB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjc6IHW/eXRvIDpzY3JpcHRlbmNvZGluZyBwb3phIHdjenl0eXdhbnltIHBsaWtpZW0iCisKKyM6IGV4X2NtZHMyLmM6Mjc4OQorbXNnaWQgIkUxNjg6IDpmaW5pc2ggdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY4OiB1v3l0byA6ZmluaXNoIHBvemEgd2N6eXR5d2FueW0gcGxpa2llbSIKKworIzogZXhfY21kczIuYzozMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhZ2UgJWQiCittc2dzdHIgIlN0cm9uYSAlZCIKKworIzogZXhfY21kczIuYzozMzk0Cittc2dpZCAiTm8gdGV4dCB0byBiZSBwcmludGVkIgorbXNnc3RyICJCcmFrIHRla3N0dSBkbyBkcnVrb3dhbmlhIgorCisjOiBleF9jbWRzMi5jOjM0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgcGFnZSAlZCAoJWQlJSkiCittc2dzdHIgIkRydWt1auogc3Ryb27qICVkICglZCUlKSIKKworIzogZXhfY21kczIuYzozNDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiBDb3B5ICVkIG9mICVkIgorbXNnc3RyICIgS29waWEgJWQgeiAlZCIKKworIzogZXhfY21kczIuYzozNTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50ZWQ6ICVzIgorbXNnc3RyICJXeWRydWtvd2FubzogJXMiCisKKyM6IGV4X2NtZHMyLmM6MzU0OQorbXNnaWQgIlByaW50aW5nIGFib3J0ZWQiCittc2dzdHIgIkRydWtvd2FuaWUgb2R3b7NhbmUiCisKKyM6IGV4X2NtZHMyLmM6MzkxNAorbXNnaWQgIkU0NTU6IEVycm9yIHdyaXRpbmcgdG8gUG9zdFNjcmlwdCBvdXRwdXQgZmlsZSIKK21zZ3N0ciAiRTQ1NTogTmllIG1vv25hIHphcGlzYeYgZG8gd3lqtmNpb3dlZ28gcGxpa3UgUG9zdFNjcmlwdHUiCisKKyM6IGV4X2NtZHMyLmM6NDE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI0OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNjI0OiBOaWUgbW9n6iBvdHdvcnp55iBwbGlrdSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDE5OSBleF9jbWRzMi5jOjQ4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NzogQ2FuJ3QgcmVhZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU3OiBOaWUgbW+/bmEgb2Rjenl0YeYgcGxpa3UgemFzb2LzdyBQb3N0U2NyaXB0dSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDIwNworIywgYy1mb3JtYXQKK21zZ2lkICJFNjE4OiBmaWxlIFwiJXNcIiBpcyBub3QgYSBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUiCittc2dzdHIgIkU2MTg6IHBsaWsgXCIlc1wiIG5pZSBqZXN0IHBsaWtpZW0gemFzb2LzdyBQb3N0U2NyaXB0dSIKKworIzogZXhfY21kczIuYzo0MjIyIGV4X2NtZHMyLmM6NDI0MiBleF9jbWRzMi5jOjQyNTcgZXhfY21kczIuYzo0Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTk6IGZpbGUgXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUiCittc2dzdHIgIkU2MTk6IHBsaWsgXCIlc1wiIG5pZSBqZXN0IHdzcGllcmFueW0gcGxpa2llbSB6YXNvYvN3IFBvc3RTY3JpcHR1IgorCisjOiBleF9jbWRzMi5jOjQzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyMTogXCIlc1wiIHJlc291cmNlIGZpbGUgaGFzIHdyb25nIHZlcnNpb24iCittc2dzdHIgIkU2MjE6IFwiJXNcIiBuaWVwcmF3aWSzb3dhIHdlcnNqYSBwbGlrdSB6YXNvYvN3IgorCisjOiBleF9jbWRzMi5jOjQ3NzYKK21zZ2lkICJFMzI0OiBDYW4ndCBvcGVuIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkUzMjQ6IE5pZSBtb79uYSBvdHdvcnp55iBwbGlrdSBQb3N0U2NyaXB0IGRvIHd5arZjaWEiCisKKyM6IGV4X2NtZHMyLmM6NDgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU2OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU2OiBOaWUgbW9n6iBvdHdvcnp55iBwbGlrdSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDkyOAorbXNnaWQgIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwicHJvbG9nLnBzXCIiCittc2dzdHIgIkU0NTY6IE5pZSBtb79uYSB6bmFsZbzmIHBsaWt1IHphc29i83cgUG9zdFNjcmlwdHUgXCJwcm9sb2cucHNcIiIKKworIzogZXhfY21kczIuYzo0OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXMucHNcIiIKK21zZ3N0ciAiRTQ1NjogTmllIG1vv25hIHpuYWxlvOYgcGxpa3UgemFzb2LzdyBQb3N0U2NyaXB0dSBcIiVzLnBzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDk3NworIywgYy1mb3JtYXQKK21zZ2lkICJFNjIwOiBVbmFibGUgdG8gY29udmVydCBmcm9tIG11bHRpLWJ5dGUgdG8gXCIlc1wiIGVuY29kaW5nIgorbXNnc3RyICJFNjIwOiBOaWUgbW+/bmEgcHJ6ZWtvbndlcnRvd2HmIHogbXVsdGktYnl0ZSBkbyBrb2Rvd2FuaWEgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjUxMDIKK21zZ2lkICJTZW5kaW5nIHRvIHByaW50ZXIuLi4iCittc2dzdHIgIlByemVzebNhbSBkbyBkcnVrYXJraS4uLiIKKworIzogZXhfY21kczIuYzo1MTA2Cittc2dpZCAiRTM2NTogRmFpbGVkIHRvIHByaW50IFBvc3RTY3JpcHQgZmlsZSIKK21zZ3N0ciAiRTM2NTogRHJ1a293YW5pZSBwbGlrdSBQb3N0U2NyaXB0IG5pZSBwb3dpb2SzbyBzaeoiCisKKyM6IGV4X2NtZHMyLmM6NTEwOAorbXNnaWQgIlByaW50IGpvYiBzZW50LiIKK21zZ3N0ciAiWmFkYW5pZSBkcnVrb3dhbmllIHByemVzs2FuZS4iCisKKyM6IGV4X2NtZHMyLmM6NTYxOAorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50ICVzbGFuZ3VhZ2U6IFwiJXNcIiIKK21zZ3N0ciAiQmllv7FjeSAlc2rqenlrOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NTYyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTk3OiBDYW5ub3Qgc2V0IGxhbmd1YWdlIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTE5NzogTmllIG1vZ+ogdXN0YXdp5iBq6np5a2EgbmEgXCIlc1wiIgorCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9rdGFsICUwM28iCisKKyM6IGV4X2NtZHMuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiPiAlZCwgSGV4ICUwNHgsIE9jdGFsICVvIgorbXNnc3RyICI+ICVkLCBIZXggJTA0eCwgIE9rdGFsICVvIgorCisjOiBleF9jbWRzLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIj4gJWQsIEhleCAlMDh4LCBPY3RhbCAlbyIKK21zZ3N0ciAiPiAlZCwgSGV4ICUwOHgsIE9rdGFsICVvIgorCisjOiBleF9jbWRzLmM6NDMwCittc2dpZCAiRTEzNDogTW92ZSBsaW5lcyBpbnRvIHRoZW1zZWx2ZXMiCittc2dzdHIgIkUxMzQ6IFByemVuaWVzaWVuaWUgd2llcnN6eSBuYSBzaWViaWUgc2FteWNoIgorCisjOiBleF9jbWRzLmM6NDk5Cittc2dpZCAiMSBsaW5lIG1vdmVkIgorbXNnc3RyICIxIHdpZXJzeiBwcnplbmllc2lvbnkiCisKKyM6IGV4X2NtZHMuYzo1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIG1vdmVkIgorbXNnc3RyICIlbGQgd2llcnN6ZSBwcnplbmllc2lvbmUiCisKKyM6IGV4X2NtZHMuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICIlbGQgd2llcnN6eSBwcnplZmlsdHJvd2FueWNoIgorCisjOiBleF9jbWRzLmM6OTUyCittc2dpZCAiRTEzNTogKkZpbHRlciogQXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTEzNTogQXV0b2tvbWVuZHkgKkZpbHRlciogbmllIG1vZ7Egem1pZW5pYeYgYmllv7FjZWdvIGJ1Zm9yYSIKKworIzogZXhfY21kcy5jOjEwMzcKK21zZ2lkICJbTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2VdXG4iCittc2dzdHIgIltCcmFrIHphcGlzdSBvZCBjemFzdSBvc3RhdG5pZWogem1pYW55XVxuIgorCisjOiBleF9jbWRzLmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICIlc3ZpbWluZm86ICVzIGluIGxpbmU6ICIKK21zZ3N0ciAiJXN2aW1pbmZvOiAlcyB3IHdpZXJzenU6ICIKKworIzogZXhfY21kcy5jOjEyODgKK21zZ2lkICJFMTM2OiB2aW1pbmZvOiBUb28gbWFueSBlcnJvcnMsIHNraXBwaW5nIHJlc3Qgb2YgZmlsZSIKK21zZ3N0ciAiRTEzNjogdmltaW5mbzogWmJ5dCB3aWVsZSBis+pk83c7IHBvbWlqYW0gcmVzenTqIHBsaWt1IgorCisjOiBleF9jbWRzLmM6MTMyMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkaW5nIHZpbWluZm8gZmlsZSBcIiVzXCIlcyVzJXMiCittc2dzdHIgIldjenl0dWrqIHBsaWsgdmltaW5mbyBcIiVzXCIlcyVzJXMiCisKKyM6IGV4X2NtZHMuYzoxMzI0Cittc2dpZCAiIGluZm8iCittc2dzdHIgIiBpbmZvcm1hY2phIgorCisjOiBleF9jbWRzLmM6MTMyNQorbXNnaWQgIiBtYXJrcyIKK21zZ3N0ciAiIHpha7NhZGtpIgorCisjOiBleF9jbWRzLmM6MTMyNgorbXNnaWQgIiBGQUlMRUQiCittc2dzdHIgIiBOSUUgUE9XSU9Eo08gU0nKIgorCisjOiBleF9jbWRzLmM6MTQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM3OiBWaW1pbmZvIGZpbGUgaXMgbm90IHdyaXRhYmxlOiAlcyIKK21zZ3N0ciAiRTEzNzogUGxpayB2aW1pbmZvIGplc3QgbmllemFwaXN5d2Fsbnk6ICVzIgorCisjOiBleF9jbWRzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiBOaWUgbW9n6iB6YXBpc2HmIHBsaWt1IHZpbWluZm8gJXMhIgorCisjOiBleF9jbWRzLmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiCittc2dzdHIgIlphcGlzdWrqIHBsaWsgdmltaW5mbyBcIiVzXCIiCisKKyMuIFdyaXRlIHRoZSBpbmZvOgorIzogZXhfY21kcy5jOjE2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIyBUaGlzIHZpbWluZm8gZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFZpbSAlcy5cbiIKK21zZ3N0ciAiIyBUZW4gcGxpayB2aW1pbmZvIHpvc3RhsyB3eWdlbmVyb3dhbnkgcHJ6ZXogVmltYSAlcy5cbiIKKworIzogZXhfY21kcy5jOjE2NTEKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIE1vv2VzeiBnbyBvc3Ryb79uaWUgZWR5dG93YeYhXG4iCisiXG4iCisKKyM6IGV4X2NtZHMuYzoxNjUzCittc2dpZCAiIyBWYWx1ZSBvZiAnZW5jb2RpbmcnIHdoZW4gdGhpcyBmaWxlIHdhcyB3cml0dGVuXG4iCittc2dzdHIgIiMgV2FydG+25iAnZW5jb2RpbmcnIHcgY3phc2llIHphcHN1IHRlZ28gcGxpa3VcbiIKKworIzogZXhfY21kcy5jOjE3NTIKK21zZ2lkICJJbGxlZ2FsIHN0YXJ0aW5nIGNoYXIiCittc2dzdHIgIk5pZWRvcHVzemN6YWxueSBwb2N6sXRrb3d5IHpuYWsiCisKKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjE0MAorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiBQbGlrIGplc3QgemGzYWRvd2FueSB3IGlubnltIGJ1Zm9yemUiCisKKyM6IGV4X2NtZHMuYzoyMTc0Cittc2dpZCAiV3JpdGUgcGFydGlhbCBmaWxlPyIKK21zZ3N0ciAiWmFwaXNh5iBjeuq2Y2lvd28gcGxpaz8iCisKKyM6IGV4X2NtZHMuYzoyMTgxCittc2dpZCAiRTE0MDogVXNlICEgdG8gd3JpdGUgcGFydGlhbCBidWZmZXIiCittc2dzdHIgIkUxNDA6IFN0b3N1aiAhIGRvIHphcGlzYW5pYSBjeuq2Y2lvd28gYnVmb3JhIgorCisjOiBleF9jbWRzLmM6MjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGUgZXhpc3RpbmcgZmlsZSBcIiUuKnNcIj8iCittc2dzdHIgIk5hZHBpc2HmIGlzdG5pZWqxY3kgcGxpayBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMuYzoyMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDE6IE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTE0MTogQnJhayBuYXp3eSBwbGlrdSBkbGEgYnVmb3JhICVsZCIKKworIzogZXhfY21kcy5jOjI0MDUKK21zZ2lkICJFMTQyOiBGaWxlIG5vdCB3cml0dGVuOiBXcml0aW5nIGlzIGRpc2FibGVkIGJ5ICd3cml0ZScgb3B0aW9uIgorbXNnc3RyICJFMTQyOiBQbGlrIG5pZXphcGlzYW55OiBaYXBpcyBqZXN0IHd5s7Fjem9ueSBvcGNqsSAnd3JpdGUnIgorCisjOiBleF9jbWRzLmM6MjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IGZvciBcIiUuKnNcIi5cbiIKKyJEbyB5b3Ugd2lzaCB0byB3cml0ZSBhbnl3YXk/IgorbXNnc3RyICIiCisib3BjamEgJ3JlYWRvbmx5JyBuYXN0YXdpb25hIGRsYSBcIiUuKnNcIi5cbiIKKyJDenkgY2hjZXN6IGdvIHBvbWltbyB0ZWdvIHphcGlzYeY/IgorCisjOiBleF9jbWRzLmM6MjU5NworbXNnaWQgIkVkaXQgRmlsZSIKK21zZ3N0ciAiRWR5dHVqIFBsaWsiCisKKyM6IGV4X2NtZHMuYzozMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiBBdXRva29tZW5keSBuaWVvY3pla2l3YW5pZSBza2Fzb3dhs3kgbm93eSBidWZvciAlcyIKKworIzogZXhfY21kcy5jOjMzMzkKK21zZ2lkICJFMTQ0OiBub24tbnVtZXJpYyBhcmd1bWVudCB0byA6eiIKK21zZ3N0ciAiRTE0NDogbmllbnVtZXJ5Y3pueSBhcmd1bWVudCBkbGEgOnoiCisKKyM6IGV4X2NtZHMuYzozNDI0Cittc2dpZCAiRTE0NTogU2hlbGwgY29tbWFuZHMgbm90IGFsbG93ZWQgaW4gcnZpbSIKK21zZ3N0ciAiRTE0NTogS29tZW5keSBwb3ezb2tpIHOxIG5pZWRvendvbG9uZSB3IHJ2aW0iCisKKyM6IGV4X2NtZHMuYzozNTMxCittc2dpZCAiRTE0NjogUmVndWxhciBleHByZXNzaW9ucyBjYW4ndCBiZSBkZWxpbWl0ZWQgYnkgbGV0dGVycyIKK21zZ3N0ciAiRTE0NjogV3pvcmNlIHJlZ3VsYXJuZSBuaWUgbW9nsSBieeYgcm96Z3JhbmljemFuZSBsaXRlcmFtaSIKKworIzogZXhfY21kcy5jOjM4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKK21zZ3N0ciAiemFtaWXxIG5hICVzICh5L24vYS9xL2wvXkUvXlkpPyIKKworIzogZXhfY21kcy5jOjQyNjYKK21zZ2lkICIoSW50ZXJydXB0ZWQpICIKK21zZ3N0ciAiKFByemVyd2FuZSkgIgorCisjOiBleF9jbWRzLmM6NDI3MAorbXNnaWQgIjEgc3Vic3RpdHV0aW9uIgorbXNnc3RyICIxIHBvZHN0YXdpZW5pZSAiCisKKyM6IGV4X2NtZHMuYzo0MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICIlbGQgcG9kc3Rhd2ll8SIKKworIzogZXhfY21kcy5jOjQyNzUKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIgdyAxIHdpZXJzenUiCisKKyM6IGV4X2NtZHMuYzo0Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiAlbGQgbGluZXMiCittc2dzdHIgIiB3ICVsZCB3aWVyc3phY2giCisKKyM6IGV4X2NtZHMuYzo0MzI4Cittc2dpZCAiRTE0NzogQ2Fubm90IGRvIDpnbG9iYWwgcmVjdXJzaXZlIgorbXNnc3RyICJFMTQ3OiBOaWUgbW9n6iB3eWtvbmHmIDpnbG9iYWwgcmVrdXJzeXduaWUiCisKKyM6IGV4X2NtZHMuYzo0MzYzCittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IEJyYWsgd3pvcmNhIHJlZ3VsYXJuZWdvIHcgOmdsb2JhbCIKKworIyBjLWZvcm1hdAorIzogZXhfY21kcy5jOjQ0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0dGVybiBmb3VuZCBpbiBldmVyeSBsaW5lOiAlcyIKK21zZ3N0ciAiV3pvcnplYyB6bmFsZXppb25vIHcga2G/ZHltIHdpZXJzenU6ICVzIgorCisjOiBleF9jbWRzLmM6NDQ5MworbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMgT3N0YXRuaSBwb2RzdGF3aWFueSBjabFnOlxuIgorIiQiCisKKyM6IGV4X2NtZHMuYzo0NTk0IGV4X2RvY21kLmM6MjAxMQorbXNnaWQgIkU0Nzg6IERvbid0IHBhbmljISIKK21zZ3N0ciAiRTQ3ODogTmllIHBhbmlrdWohIgorCisjOiBleF9jbWRzLmM6NDY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjYxOiBTb3JyeSwgbm8gJyVzJyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTY2MTogUHJ6eWtybyBtaSwgYnJhayAnJXMnIHBvbW9jeSBkbGEgJXMiCisKKyM6IGV4X2NtZHMuYzo0NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTogUHJ6eWtybyBtaSwgYWxlIGJyYWsgcG9tb2N5IG8gJXMiCisKKyM6IGV4X2NtZHMuYzo0NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAiUHJ6eWtybyBtaSwgbmllIG1hIHBsaWt1IHBvbW9jeSBcIiVzXCIiCisKKyM6IGV4X2NtZHMuYzo1MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTA6IE5vdCBhIGRpcmVjdG9yeTogJXMiCittc2dzdHIgIkUxNTA6IE5pZSBqZXN0IGthdGFsb2dpZW06ICVzIgorCisjOiBleF9jbWRzLmM6NTMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUyOiBDYW5ub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE1MjogTmllIG1vZ+ogb3R3b3J6eeYgJXMgZG8gemFwaXN1IgorCisjOiBleF9jbWRzLmM6NTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE1MzogTmllIG1vZ+ogb3R3b3J6eeYgJXMgZG8gb2Rjenl0dSIKKworIzogZXhfY21kcy5jOjUzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY3MDogTWl4IG9mIGhlbHAgZmlsZSBlbmNvZGluZ3Mgd2l0aGluIGEgbGFuZ3VhZ2U6ICVzIgorbXNnc3RyICJFNjcwOiBNaWVzemFua2Ega29kb3dh8SB3IHBsaWt1IHBvbW9jeSB3IHJhbWFjaCBq6np5a2E6ICVzIgorCisjOiBleF9jbWRzLmM6NTQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU0OiBEdXBsaWNhdGUgdGFnIFwiJXNcIiBpbiBmaWxlICVzIgorbXNnc3RyICJFMTU0OiBEd3Vrcm90bnkgem5hY3puaWsgXCIlc1wiIHcgcGxpa3UgJXMiCisKKyM6IGV4X2NtZHMuYzo1NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjA6IFVua25vd24gc2lnbiBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE2MDogTmllem5hbmEga29tZW5kYSB6bmFrdTogJXMiCisKKyM6IGV4X2NtZHMuYzo1NTczCittc2dpZCAiRTE1NjogTWlzc2luZyBzaWduIG5hbWUiCittc2dzdHIgIkUxNTY6IEJyYWsgbmF6d3kgem5ha3UiCisKKyM6IGV4X2NtZHMuYzo1NjE5Cittc2dpZCAiRTYxMjogVG9vIG1hbnkgc2lnbnMgZGVmaW5lZCIKK21zZ3N0ciAiRTI1NTogWmJ5dCB3aWVsZSBuYXp3IHpuYWvzdyIKKworIzogZXhfY21kcy5jOjU2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzOTogSW52YWxpZCBzaWduIHRleHQ6ICVzIgorbXNnc3RyICJFMjM5OiBOaWV3s2G2Y2l3eSB0ZWtzdCB6bmFrdTogJXMiCisKKyM6IGV4X2NtZHMuYzo1NzE4IGV4X2NtZHMuYzo1OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTU6IFVua25vd24gc2lnbjogJXMiCittc2dzdHIgIkUxNTU6IE5pZXpuYW55IHpuYWs6ICVzIgorCisjOiBleF9jbWRzLmM6NTc2NworbXNnaWQgIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiCittc2dzdHIgIkUxNTk6IEJyYWsgbnVtZXJ1IHpuYWt1IgorCisjOiBleF9jbWRzLmM6NTg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU4OiBJbnZhbGlkIGJ1ZmZlciBuYW1lOiAlcyIKK21zZ3N0ciAiRTE1ODogTmlld7NhtmNpd2EgbmF6d2EgYnVmb3JhOiAlcyIKKworIzogZXhfY21kcy5jOjU4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NzogSW52YWxpZCBzaWduIElEOiAlbGQiCittc2dzdHIgIkUxNTc6IE5pZXezYbZjaXdlIElEIHpuYWt1OiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1OTU4Cittc2dpZCAiIChOT1QgRk9VTkQpIgorbXNnc3RyICIgKE5JRSBaTkFMRVpJT05PKSIKKworIzogZXhfY21kcy5jOjU5NjAKK21zZ2lkICIgKG5vdCBzdXBwb3J0ZWQpIgorbXNnc3RyICIobmllIHdzcG9tYWdhbmUpIgorCisjOiBleF9jbWRzLmM6NjA1OQorbXNnaWQgIltEZWxldGVkXSIKK21zZ3N0ciAiW1NrYXNvd2Fub10iCisKKyM6IGV4X2RvY21kLmM6NTI1Cittc2dpZCAiRW50ZXJpbmcgRXggbW9kZS4gIFR5cGUgXCJ2aXN1YWxcIiB0byBnbyB0byBOb3JtYWwgbW9kZS4iCittc2dzdHIgIldjaG9keuogdyB0cnliIEV4LiBXcHJvd2FkvCBcInZpc3VhbFwiIGFieSBwcnplarbmIGRvIHRyeWJ1IE5vcm1hbC4iCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjU2MQorbXNnaWQgIkU1MDE6IEF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJFNTAxOiBOYSBrb/FjdSBwbGlrdSIKKworIzogZXhfZG9jbWQuYzo2NjkKK21zZ2lkICJFMTY5OiBDb21tYW5kIHRvbyByZWN1cnNpdmUiCittc2dzdHIgIkUxNjk6IEtvbWVuZGEgemJ5dCByZWt1cnN5d25hIgorCisjOiBleF9kb2NtZC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwNTogRXhjZXB0aW9uIG5vdCBjYXVnaHQ6ICVzIgorbXNnc3RyICJFNjA1OiBOaWUgem5hbGV6aW9ubyB3eWqxdGt1OiAlcyIKKworIzogZXhfZG9jbWQuYzoxMzE3Cittc2dpZCAiRW5kIG9mIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiS29uaWVjIHdjenl0eXdhbmVnbyBwbGlrdSIKKworIzogZXhfZG9jbWQuYzoxMzE4Cittc2dpZCAiRW5kIG9mIGZ1bmN0aW9uIgorbXNnc3RyICJLb25pZWMgZnVua2NqaSIKKworIzogZXhfZG9jbWQuYzoxOTA3Cittc2dpZCAiRTQ2NDogQW1iaWd1b3VzIHVzZSBvZiB1c2VyLWRlZmluZWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ2NDogTmllamVkbm96bmFjem5lIHphc3Rvc293YW5pZSBrb21lbmR5IHpkZWZpbmlvd2FuZWogcHJ6ZXogdb95dGtvd25pa2EiCisKKyM6IGV4X2RvY21kLmM6MTkyMQorbXNnaWQgIkU0OTI6IE5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAiRTQ5MjogTmllIGplc3Qga29tZW5ksSBlZHl0b3JhIgorCisjOiBleF9kb2NtZC5jOjIwMzAKK21zZ2lkICJFNDkzOiBCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4iCittc2dzdHIgIkU0OTM6IERhbm8gd3N0ZWN6bnkgemFrcmVzIgorCisjOiBleF9kb2NtZC5jOjIwMzkKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4sIE9LIHRvIHN3YXAiCittc2dzdHIgIkRhbm8gd3N0ZWN6bnkgemFrcmVzOyB6YW1pYW5hIGplc3QgbW+/bGl3YSIKKworIzogZXhfZG9jbWQuYzoyMTYyCittc2dpZCAiRTQ5NDogVXNlIHcgb3Igdz4+IgorbXNnc3RyICJFNDk0OiBTdG9zdWogdyBsdWIgdz4+IgorCisjOiBleF9kb2NtZC5jOjM3ODgKK21zZ2lkICJFMzE5OiBTb3JyeSwgdGhlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUzMTk6IFByenlrcm8gbWksIGFsZSB0YSBrb21lbmRhIG5pZSBqZXN0IGRvc3TqcG5hIHcgdGVqIHdlcnNqaSIKKworIzogZXhfZG9jbWQuYzozOTkxCittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6IFR5bGtvIHBvamVkeW5jemEgbmF6d2EgcGxpa3UgZG96d29sb25hIgorCisjOiBleF9kb2NtZC5jOjQ1NzEKK21zZ2lkICIxIG1vcmUgZmlsZSB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICIxIHdp6mNlaiBwbGlrIGRvIGVkeWNqaS4gIE1pbW8gdG8gd3lqtuY/IgorCisjOiBleF9kb2NtZC5jOjQ1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICJqZXN6Y3plICVkIHBsaWvzdyBkbyBlZHljamkuICBNaW1vIHRvIHd5arbmPyIKKworIzogZXhfZG9jbWQuYzo0NTgxCittc2dpZCAiRTE3MzogMSBtb3JlIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE3MzogMSB3aepjZWogcGxpayBkbyBlZHljamkiCisKKyM6IGV4X2RvY21kLmM6NDU4MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiBqZXN6Y3plICVsZCBwbGlr83cgZG8gZWR5Y2ppIgorCisjOiBleF9kb2NtZC5jOjQ2NzgKK21zZ2lkICJFMTc0OiBDb21tYW5kIGFscmVhZHkgZXhpc3RzOiBhZGQgISB0byByZXBsYWNlIGl0IgorbXNnc3RyICJFMTc0OiBLb21lbmRhIGp1vyBpc3RuaWVqZTsgYWJ5IGqxIHByemVkZWZpbmlvd2HmIHN0b3N1aiAhIgorCisjOiBleF9kb2NtZC5jOjQ3ODkKK21zZ2lkICIiCisiXG4iCisiICAgIE5hbWUgICAgICAgIEFyZ3MgUmFuZ2UgQ29tcGxldGUgIERlZmluaXRpb24iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgTmF6d2EgICAgICAgQXJnLiBaYWsuICBHb3Rvd2+25iAgRGVmaW5pY2phIgorCisjOiBleF9kb2NtZC5jOjQ4NzgKK21zZ2lkICJObyB1c2VyLWRlZmluZWQgY29tbWFuZHMgZm91bmQiCittc2dzdHIgIk5pZSB6bmFsZXppb25vIGtvbWVuZCB6ZGVmaW5pb3dhbnljaCBwcnpleiB1v3l0a293bmlrYSIKKworIzogZXhfZG9jbWQuYzo0OTEwCittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTogTmllIG9rcmW2bG9ubyBhdHJ5YnV0dSIKKworIzogZXhfZG9jbWQuYzo0OTYyCittc2dpZCAiRTE3NjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJFMTc2OiBOaWV3s2G2Y2l3YSBpbG+25iBhcmd1bWVudPN3IgorCisjOiBleF9kb2NtZC5jOjQ5NzcKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiBNbm+/bmlrIG5pZSBtb79lIGJ55iBwb2RhbnkgZHd1a3JvdG5pZSIKKworIzogZXhfZG9jbWQuYzo0OTg3Cittc2dpZCAiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIKK21zZ3N0ciAiRTE3ODogTmlld7NhtmNpd2EgZG9tebZsbmEgd2FydG+25iBtbm+/bmlrYSIKKworIzogZXhfZG9jbWQuYzo1MDE4Cittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiBhcmd1bWVudCB3eW1hZ2FueSBkbyBkb3Bls25pYW5pYSIKKworIzogZXhfZG9jbWQuYzo1MDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiBOaWV3s2G2Y2l3YSB3YXJ0b7bmIGRvcGWzbmlhbmlhOiAlcyIKKworIzogZXhfZG9jbWQuYzo1MDU5Cittc2dpZCAiRTQ2ODogQ29tcGxldGlvbiBhcmd1bWVudCBvbmx5IGFsbG93ZWQgZm9yIGN1c3RvbSBjb21wbGV0aW9uIgorbXNnc3RyICJFNDY4OiBBcmd1bWVudCBkZXBls25pYW5pYSBkb3p3b2xvbnkgd3mzsWN6bmllIGRsYSBkb3Bls25pYW5pYSB1v3l0a293bmlrYSIKKworIzogZXhfZG9jbWQuYzo1MDY1Cittc2dpZCAiRTQ2NzogQ3VzdG9tIGNvbXBsZXRpb24gcmVxdWlyZXMgYSBmdW5jdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiRTQ2NzogRG9wZbNuaWFuaWUgdb95dGtvd25pa2Egd3ltYWdhIGZ1bmtjamkgamFrbyBhcmd1bWVudHUiCisKKyM6IGV4X2RvY21kLmM6NTA3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgxOiBJbnZhbGlkIGF0dHJpYnV0ZTogJXMiCittc2dzdHIgIkUxODE6IE5pZXezYbZjaXd5IGF0cnlidXQ6ICVzIgorCisjOiBleF9kb2NtZC5jOjUxMTkKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4MjogTmlld7NhtmNpd2EgbmF6d2Ega29tZW5keSIKKworIzogZXhfZG9jbWQuYzo1MTM0Cittc2dpZCAiRTE4MzogVXNlciBkZWZpbmVkIGNvbW1hbmRzIG11c3Qgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIgorbXNnc3RyICIiCisiRTE4MzogS29tZW5keSB6ZGVmaW5pb3dhbmUgcHJ6ZXogdb95dGtvd25pa2EgbXVzerEgcm96cG9jenluYeYgc2nqIGR1v7EgIgorImxpdGVysSIKKworIzogZXhfZG9jbWQuYzo1MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODQ6IE5vIHN1Y2ggdXNlci1kZWZpbmVkIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTg0OiBOaWUgbWEgdGFraWVqIGtvbWVuZHkgdb95dGtvd25pa2E6ICVzIgorCisjOiBleF9kb2NtZC5jOjU2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NTogQ2Fubm90IGZpbmQgY29sb3Igc2NoZW1lICVzIgorbXNnc3RyICJFMTg1OiBOaWUgbW9n6iB6bmFsZbzmIHplc3Rhd3Uga29sb3LzdyAlcyIKKworIzogZXhfZG9jbWQuYzo1Njc0Cittc2dpZCAiR3JlZXRpbmdzLCBWaW0gdXNlciEiCittc2dzdHIgIldpdGFqIHW/eXRrb3duaWt1IFZpbWEhIgorCisjOiBleF9kb2NtZC5jOjYzOTEKK21zZ2lkICJFZGl0IEZpbGUgaW4gbmV3IHdpbmRvdyIKK21zZ3N0ciAiRWR5dHVqIHBsaWsgdyBub3d5bSBva25pZSIKKworIzogZXhfZG9jbWQuYzo2Njg2Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICJCcmFrIHBsaWt1IHd5bWlhbnkiCisKKyM6IGV4X2RvY21kLmM6Njc5MAorbXNnaWQgIkFwcGVuZCBGaWxlIgorbXNnc3RyICJEb7OxY3ogcGxpayIKKworIzogZXhfZG9jbWQuYzo2ODU0Cittc2dpZCAiRTE4NjogTm8gcHJldmlvdXMgZGlyZWN0b3J5IgorbXNnc3RyICJFMTg2OiBOaWUgbWEgcG9wcnplZG5pZWdvIGthdGFsb2d1IgorCisjOiBleF9kb2NtZC5jOjY5MzYKK21zZ2lkICJFMTg3OiBVbmtub3duIgorbXNnc3RyICJFMTg3OiBOaWV6bmFueSIKKworIzogZXhfZG9jbWQuYzo3MDIxCittc2dpZCAiRTQ2NTogOndpbnNpemUgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiCittc2dzdHIgIkU0NjU6IDp3aW5zaXplIHd5bWFnYSBkd/NjaCBhcmd1bWVudPN3IG51bWVyeWN6bnljaCIKKworIzogZXhfZG9jbWQuYzo3MDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldpbmRvdyBwb3NpdGlvbjogWCAlZCwgWSAlZCIKK21zZ3N0ciAiUG96eWNqYSBva25hOiBYICVkLCBZICVkIgorCisjOiBleF9kb2NtZC5jOjcwODIKK21zZ2lkICJFMTg4OiBPYnRhaW5pbmcgd2luZG93IHBvc2l0aW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiRTE4ODogUG96eXNraXdhbmllIHBvenljamkgb2tuYSBuaWUgamVzdCB6YWltcGxlbWVudG93YW5lIGRsYSB0ZWdvIHN5c3RlbXUiCisKKyM6IGV4X2RvY21kLmM6NzA5MgorbXNnaWQgIkU0NjY6IDp3aW5wb3MgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiCittc2dzdHIgIkU0NjY6IDp3aW5wb3Mgd3ltYWdhIGR382NoIGFyZ3VtZW5083cgbnVtZXJ5Y3pueWNoIgorCisjOiBleF9kb2NtZC5jOjczNzAKK21zZ2lkICJTYXZlIFJlZGlyZWN0aW9uIgorbXNnc3RyICJaYXBpc3ogcHJ6ZWtpZXJvd2FuaWUiCisKKyM6IGV4X2RvY21kLmM6NzU2MAorbXNnaWQgIlNhdmUgVmlldyIKK21zZ3N0ciAiWmFwaXN6IHdpZG9rIgorCisjOiBleF9kb2NtZC5jOjc1NjEKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIlphcGlzeiBzZXNq6iIKKworIzogZXhfZG9jbWQuYzo3NTYzCittc2dpZCAiU2F2ZSBTZXR1cCIKK21zZ3N0ciAiWmFwaXN6IHVzdGF3aWVuaWEiCisKKyM6IGV4X2RvY21kLmM6NzcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg5OiBcIiVzXCIgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxODk6IFwiJXNcIiBpc3RuaWVqZSAod3ltdbYgcG9wcnpleiAhKSIKKworIzogZXhfZG9jbWQuYzo3NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTA6IENhbm5vdCBvcGVuIFwiJXNcIiBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE5MDogTmllIG1vZ+ogb3R3b3J6eeYgXCIlc1wiIGRvIHphcGlzdSIKKworIy4gc2V0IG1hcmsKKyM6IGV4X2RvY21kLmM6Nzc0NAorbXNnaWQgIkUxOTE6IEFyZ3VtZW50IG11c3QgYmUgYSBsZXR0ZXIgb3IgZm9yd2FyZC9iYWNrd2FyZCBxdW90ZSIKK21zZ3N0ciAiRTE5MTogQXJndW1lbnQgbXVzaSBieeYgbGl0ZXKxIGFsYm8gY3Vkenlzs293ZW0gdyBwcnrzZC90ebMiCisKKyM6IGV4X2RvY21kLmM6Nzc4NgorbXNnaWQgIkUxOTI6IFJlY3Vyc2l2ZSB1c2Ugb2YgOm5vcm1hbCB0b28gZGVlcCIKK21zZ3N0ciAiRTE5MjogUmVrdXJzeXduZSB6YXN0b3Nvd2FuaWUgOm5vcm1hbCB6YSBns+pib2tpZSIKKworIzogZXhfZG9jbWQuYzo4MzA0Cittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6IEJyYWsgbmF6d3kgemFtaWVubmVnbyBwbGlrdSBkbyBwb2RzdGF3aWVuaWEgcG9kICcjJyIKKworIzogZXhfZG9jbWQuYzo4MzM1Cittc2dpZCAiRTQ5NTogbm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIgorbXNnc3RyICJFNDk1OiBicmFrIG5hend5IHBsaWt1IGF1dG9rb21lbmQgZG8gcG9kc3Rhd2llbmlhIHBvZCBcIjxhZmlsZT5cIiIKKworIzogZXhfZG9jbWQuYzo4MzQzCittc2dpZCAiRTQ5Njogbm8gYXV0b2NvbW1hbmQgYnVmZmVyIG51bWJlciB0byBzdWJzdGl0dXRlIGZvciBcIjxhYnVmPlwiIgorbXNnc3RyICJFNDk2OiBicmFrIG51bWVydSBidWZvcmEgYXV0b2tvbWVuZCBkbyBwb2RzdGF3aWVuaWEgcG9kICBcIjxhYnVmPlwiIgorCisjOiBleF9kb2NtZC5jOjgzNTQKK21zZ2lkICJFNDk3OiBubyBhdXRvY29tbWFuZCBtYXRjaCBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFtYXRjaD5cIiIKK21zZ3N0ciAiRTQ5NzogYnJhayBuYXp3eSBkb3Bhc293YW5pYSBhdXRva29tZW5kIHBvZCBcIjxhbWF0Y2g+XCIiCisKKyM6IGV4X2RvY21kLmM6ODM2NAorbXNnaWQgIkU0OTg6IG5vIDpzb3VyY2UgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPHNmaWxlPlwiIgorbXNnc3RyICJFNDk4OiBicmFrIG5hend5IHBsaWt1IDpzb3VyY2UgZG8gcG9zdGF3aWVuaWEgcG9kIFwiPHNmaWxlPlwiIgorCisjOiBleF9kb2NtZC5jOjg0MDUKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiRTQ5OTogRW1wdHkgZmlsZSBuYW1lIGZvciAnJScgb3IgJyMnLCBvbmx5IHdvcmtzIHdpdGggXCI6cDpoXCIiCittc2dzdHIgIkU0OTk6IFB1c3RhIG5hendhIHBsaWt1IGRsYSAnJScgbHViICcjJywgZHppYbNhIHR5bGtvIHogXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6ODQwNworbXNnaWQgIkU1MDA6IEV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1MDA6IFd5bmlraWVtIGplc3QgcHVzdHkgY2mxZyIKKworIzogZXhfZG9jbWQuYzo5MzYyCittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiBOaWUgbW9n6iBvdHdvcnp55iBwbGlrdSB2aW1pbmZvIGRvIG9kY3p5dHUiCisKKyM6IGV4X2RvY21kLmM6OTUzNQorbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5NjogQnJhayBkd3VncmFm83cgdyB0ZWogd2Vyc2ppIgorCisjOiBleF9ldmFsLmM6NDQwCittc2dpZCAiRTYwODogQ2Fubm90IDp0aHJvdyBleGNlcHRpb25zIHdpdGggJ1ZpbScgcHJlZml4IgorbXNnc3RyICJFNjA4OiBOaWUgbW+/bmEgJzp0aHJvdycgd3lqsXRr83cgeiBwcmVmaWtzZW0gJ1ZpbSciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gdGhyb3duOiAlcyIKK21zZ3N0ciAiV3lqsXRlazogJXMiCisKKyM6IGV4X2V2YWwuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIGZpbmlzaGVkOiAlcyIKK21zZ3N0ciAiV3lqsXRlayB6YWtv8WN6b255OiAlcyIKKworIzogZXhfZXZhbC5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZGlzY2FyZGVkOiAlcyIKK21zZ3N0ciAiV3lqsXRlayBvZHJ6dWNvbnk6ICVzIgorCisjOiBleF9ldmFsLmM6NjIwIGV4X2V2YWwuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIGxpbmUgJWxkIgorbXNnc3RyICIlcywgd2llcnN6ICVsZCIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBleF9ldmFsLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBjYXVnaHQ6ICVzIgorbXNnc3RyICJXeWqxdGVrIHByemVjaHd5Y29ueTogJXMiCisKKyM6IGV4X2V2YWwuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbWFkZSBwZW5kaW5nIgorbXNnc3RyICIlcyB6b3N0YbMgemF3aWVzem9ueSIKKworIzogZXhfZXZhbC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXN1bWVkIgorbXNnc3RyICIlcyBwcnp5d3LzY29ueSIKKworIzogZXhfZXZhbC5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNjYXJkZWQiCittc2dzdHIgIiVzIG9kcnp1Y29ueSIKKworIzogZXhfZXZhbC5jOjc0NgorbXNnaWQgIkV4Y2VwdGlvbiIKK21zZ3N0ciAiV3lqsXRlayIKKworIzogZXhfZXZhbC5jOjc1MgorbXNnaWQgIkVycm9yIGFuZCBpbnRlcnJ1cHQiCittc2dzdHIgIkKzsWQgaSBwcnplcndhbmllIgorCisjOiBleF9ldmFsLmM6NzU0IGd1aS5jOjQzNzUKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiQrOxZCIKKworIy4gaWYgKHBlbmRpbmcgJiBDU1RQX0lOVEVSUlVQVCkKKyM6IGV4X2V2YWwuYzo3NTYKK21zZ2lkICJJbnRlcnJ1cHQiCittc2dzdHIgIlByemVyd2FuaWUiCisKKyM6IGV4X2V2YWwuYzo4MzAKK21zZ2lkICJFNTc5OiA6aWYgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTU3OTogemJ5dCBns+pib2tpZSB6YWduaWW/ZL9lbmllIDppZiIKKworIzogZXhfZXZhbC5jOjg2NworbXNnaWQgIkU1ODA6IDplbmRpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MDogOmVuZGlmIGJleiA6aWYiCisKKyM6IGV4X2V2YWwuYzo5MTEKK21zZ2lkICJFNTgxOiA6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MTogOmVsc2UgYmV6IDppZiIKKworIzogZXhfZXZhbC5jOjkxNAorbXNnaWQgIkU1ODI6IDplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODI6IDplbHNlaWYgYmV6IDppZiIKKworIzogZXhfZXZhbC5jOjkyMQorbXNnaWQgIkU1ODM6IG11bHRpcGxlIDplbHNlIgorbXNnc3RyICJFNTgzOiB3aWVsb2tyb3RuZSA6ZWxzZSIKKworIzogZXhfZXZhbC5jOjkyNAorbXNnaWQgIkU1ODQ6IDplbHNlaWYgYWZ0ZXIgOmVsc2UiCittc2dzdHIgIkU1ODQ6IDplbHNlaWYgcG8gOmVsc2UiCisKKyM6IGV4X2V2YWwuYzo5OTEKK21zZ2lkICJFNTg1OiA6d2hpbGUgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTU4NTogemJ5dCBns+pib2tpZSB6YWduaWW/ZL9lbmllIDp3aGlsZSIKKworIzogZXhfZXZhbC5jOjEwNDcKK21zZ2lkICJFNTg2OiA6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODY6IDpjb250aW51ZSBiZXogOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTA4NworbXNnaWQgIkU1ODc6IDpicmVhayB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4NzogOmJyZWFrIGJleiA6d2hpbGUiCisKKyM6IGV4X2V2YWwuYzoxMjg2Cittc2dpZCAiRTYwMTogOnRyeSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNjAxOiB6Ynl0IGez6mJva2llIHphZ25pZb9kv2VuaWUgOnRyeSIKKworIzogZXhfZXZhbC5jOjEzNjYKK21zZ2lkICJFNjAzOiA6Y2F0Y2ggd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAzOiA6Y2F0Y2ggYmV6IDp0cnkiCisKKyMuIEdpdmUgdXAgZm9yIGEgIjpjYXRjaCIgYWZ0ZXIgIjpmaW5hbGx5IiBhbmQgaWdub3JlIGl0LgorIy4gKiBKdXN0IHBhcnNlLgorIzogZXhfZXZhbC5jOjEzODgKK21zZ2lkICJFNjA0OiA6Y2F0Y2ggYWZ0ZXIgOmZpbmFsbHkiCittc2dzdHIgIkU2MDQ6IDpjYXRjaCB6YSA6ZmluYWxseSIKKworIzogZXhfZXZhbC5jOjE1MjEKK21zZ2lkICJFNjA2OiA6ZmluYWxseSB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDY6IDpmaW5hbGx5IGJleiA6dHJ5IgorCisjLiBHaXZlIHVwIGZvciBhIG11bHRpcGxlICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKyM6IGV4X2V2YWwuYzoxNTQ1Cittc2dpZCAiRTYwNzogbXVsdGlwbGUgOmZpbmFsbHkiCittc2dzdHIgIkU2MDc6IHdpZWxva3JvdG5lIDpmaW5hbGx5IgorCisjOiBleF9ldmFsLmM6MTY1NAorbXNnaWQgIkU2MDI6IDplbmR0cnkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAyOiA6ZW5kdHJ5IGJleiA6dHJ5IgorCisjOiBleF9ldmFsLmM6MTk4NgorbXNnaWQgIkUxOTM6IDplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxOTM6IDplbmRmdW5jdGlvbiBwb3phIGZ1bmtjarEiCisKKyM6IGV4X2dldGxuLmM6MzI5NgorbXNnaWQgInRhZ25hbWUiCittc2dzdHIgIm5hendhIHpuYWN6bmlrYSIKKworIzogZXhfZ2V0bG4uYzozMjk5Cittc2dpZCAiIGtpbmQgZmlsZVxuIgorbXNnc3RyICIgcG9rcmV3bnkgcGxpa1xuIgorCisjOiBleF9nZXRsbi5jOjQ3NTIKK21zZ2lkICInaGlzdG9yeScgb3B0aW9uIGlzIHplcm8iCittc2dzdHIgIm9wY2phICdoaXN0b3J5JyBqZXN0IHplcm93YSIKKworIzogZXhfZ2V0bG4uYzo1MDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjICVzIEhpc3RvcnkgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyAlcyBIaXN0b3JpYSAob2QgbmFqbm93c3p5Y2ggcG8gbmFqc3RhcnN6ZSk6XG4iCisKKyM6IGV4X2dldGxuLmM6NTAyNAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAiV2llcnN6IHBvbGVjZfEiCisKKyM6IGV4X2dldGxuLmM6NTAyNQorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgIlN6dWthbnkgY2mxZyIKKworIzogZXhfZ2V0bG4uYzo1MDI2Cittc2dpZCAiRXhwcmVzc2lvbiIKK21zZ3N0ciAiV3lyYb9lbmllIgorCisjOiBleF9nZXRsbi5jOjUwMjcKK21zZ2lkICJJbnB1dCBMaW5lIgorbXNnc3RyICJXaWVyc3ogd3Byb3dhZHpl8SIKKworIzogZXhfZ2V0bG4uYzo1MDY1Cittc2dpZCAiRTE5ODogY21kX3BjaGFyIGJleW9uZCB0aGUgY29tbWFuZCBsZW5ndGgiCittc2dzdHIgIkUxOTg6IGNtZF9wY2hhciBwcnpla3JhY3phIGSzdWdvtuYgcG9sZWNlbmlhIgorCisjOiBleF9nZXRsbi5jOjUyNDIKK21zZ2lkICJFMTk5OiBBY3RpdmUgd2luZG93IG9yIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICJFMTk5OiBBa3R5d255IHdpZG9rIGx1YiBidWZvciBza2Fzb3dhbnkiCisKKyM6IGZpbGVpby5jOjM3NworbXNnaWQgIklsbGVnYWwgZmlsZSBuYW1lIgorbXNnc3RyICJOaWVkb3B1c3pjemFsbmEgbmF6d2EgcGxpa3UiCisKKyM6IGZpbGVpby5jOjQwMSBmaWxlaW8uYzo1MzUgZmlsZWlvLmM6MjkxMyBmaWxlaW8uYzoyOTU0Cittc2dpZCAiaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgImplc3Qga2F0YWxvZ2llbSIKKworIzogZmlsZWlvLmM6NDAzCittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAibmllIGplc3QgcGxpa2llbSIKKworIzogZmlsZWlvLmM6NTU3IGZpbGVpby5jOjQxMzEKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJbTm93eSBQbGlrXSIKKworIzogZmlsZWlvLmM6NTkwCittc2dpZCAiW1Blcm1pc3Npb24gRGVuaWVkXSIKK21zZ3N0ciAiW05pZSBkb3p3b2xvbm9dIgorCisjOiBmaWxlaW8uYzo2OTQKK21zZ2lkICJFMjAwOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbWFkZSB0aGUgZmlsZSB1bnJlYWRhYmxlIgorbXNnc3RyICJFMjAwOiBBdXRva29tZW5keSAqUmVhZFByZSB6cm9iabN5IHBsaWsgbmllb2Rjenl0eXdhbG55bSIKKworIzogZmlsZWlvLmM6Njk2Cittc2dpZCAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTIwMTogQXV0b2tvbWVuZHkgKlJlYWRQcmUgbmllIG1vZ7Egem1pZW5pYeYgYmllv7FjZWdvIGJ1Zm9yYSIKKworIzogZmlsZWlvLmM6NzE3Cittc2dpZCAiVmltOiBSZWFkaW5nIGZyb20gc3RkaW4uLi5cbiIKK21zZ3N0ciAiVmltOiBXY3p5dHl3YW5pZSB6ZSBzdGRpbi4uLlxuIgorCisjOiBmaWxlaW8uYzo3MjMKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIldjenl0eXdhbmllIHplIHN0ZGluLi4uIgorCisjLiBSZS1vcGVuaW5nIHRoZSBvcmlnaW5hbCBmaWxlIGZhaWxlZCEKKyM6IGZpbGVpby5jOjEwMDAKK21zZ2lkICJFMjAyOiBDb252ZXJzaW9uIG1hZGUgZmlsZSB1bnJlYWRhYmxlISIKK21zZ3N0ciAiRTIwMjogUGxpayBzdHdvcnpvbnkgcG9wcnpleiBwcnplbWlhbuogamVzdCBuaWVvZGN6eXR5d2FsbnkhIgorCisjOiBmaWxlaW8uYzoyMDkwCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2ZpZm8vc29ja2V0XSIKKworIzogZmlsZWlvLmM6MjA5NworbXNnaWQgIltmaWZvXSIKK21zZ3N0ciAiW2ZpZm9dIgorCisjOiBmaWxlaW8uYzoyMTA0Cittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIltzb2NrZXRdIgorCisjOiBmaWxlaW8uYzoyMTEyCittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW1JPXSIKKworIzogZmlsZWlvLmM6MjEyMgorbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW2JyYWsgQ1JdJyIKKworIzogZmlsZWlvLmM6MjEyNworbXNnaWQgIltOTCBmb3VuZF0iCittc2dzdHIgIlt6bmFsZXppb25vIE5MXSIKKworIzogZmlsZWlvLmM6MjEzMgorbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW2SzdWdpZSB3aWVyc3plIHJvemR6aWVsYW5lXSIKKworIzogZmlsZWlvLmM6MjEzOCBmaWxlaW8uYzo0MTE1Cittc2dpZCAiW05PVCBjb252ZXJ0ZWRdIgorbXNnc3RyICJbTklFIHByemVtaWVuaW9uZV0iCisKKyM6IGZpbGVpby5jOjIxNDMgZmlsZWlvLmM6NDEyMAorbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJbcHJ6ZW1pZW5pb25lXSIKKworIzogZmlsZWlvLmM6MjE1MCBmaWxlaW8uYzo0MTQ1Cittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJbemFrb2Rvd2FuZV0iCisKKyM6IGZpbGVpby5jOjIxNTcKK21zZ2lkICJbQ09OVkVSU0lPTiBFUlJPUl0iCittc2dzdHIgIltCo6FEIFcgUFJaRU1JQU5JRV0iCisKKyM6IGZpbGVpby5jOjIxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiW0lMTEVHQUwgQllURSBpbiBsaW5lICVsZF0iCittc2dzdHIgIltOSUVET1pXT0xPTlkgQkFKVCB3IHdpZXJzenUgJWxkXSIKKworIzogZmlsZWlvLmM6MjE3MAorbXNnaWQgIltSRUFEIEVSUk9SU10iCittc2dzdHIgIltCo8pEWSBXIE9EQ1pZQ0lFXSIKKworIzogZmlsZWlvLmM6MjM4NgorbXNnaWQgIkNhbid0IGZpbmQgdGVtcCBmaWxlIGZvciBjb252ZXJzaW9uIgorbXNnc3RyICJOaWUgbW9n6iB6bmFsZbzmIHBsaWt1IHR5bWN6YXNvd2VnbyB3IGNlbHUgcHJ6ZW1pYW55IgorCisjOiBmaWxlaW8uYzoyMzkzCittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICJOaWV1ZGFuYSBwcnplbWlhbmEgeiAnY2hhcmNvbnZlcnQnIgorCisjOiBmaWxlaW8uYzoyMzk2Cittc2dpZCAiY2FuJ3QgcmVhZCBvdXRwdXQgb2YgJ2NoYXJjb252ZXJ0JyIKK21zZ3N0ciAibmllIG1vZ+ogb2Rjenl0YeYgd3lqtmNpYSB6ICdjaGFyY29udmVydCciCisKKyM6IGZpbGVpby5jOjI3OTYKK21zZ2lkICJFMjAzOiBBdXRvY29tbWFuZHMgZGVsZXRlZCBvciB1bmxvYWRlZCBidWZmZXIgdG8gYmUgd3JpdHRlbiIKK21zZ3N0ciAiRTIwMzogQXV0b2tvbWVuZHkgc2thc293YbN5IGx1YiB3ebNhZG93YbN5IGJ1Zm9yIHByemV6bmFjem9ueSBkbyB6YXBpc3UiCisKKyM6IGZpbGVpby5jOjI4MTkKK21zZ2lkICJFMjA0OiBBdXRvY29tbWFuZCBjaGFuZ2VkIG51bWJlciBvZiBsaW5lcyBpbiB1bmV4cGVjdGVkIHdheSIKK21zZ3N0ciAiRTIwNDogQXV0b2tvbWVuZGEgem1pZW5ps2EgbGljemLqIHdpZXJzenkgdyBuaWVvY3pla2l3YW55IHNwb3PzYiIKKworIzogZmlsZWlvLmM6Mjg1NworbXNnaWQgIk5ldEJlYW5zIGRpc3NhbGxvd3Mgd3JpdGVzIG9mIHVubW9kaWZpZWQgYnVmZmVycyIKK21zZ3N0ciAiTmV0QmVhbnMgbmllIHBvendhbGEgbmEgemFwaXMgbmllem1vZHlmaWtvd2FueWNoIGJ1Zm9y83ciCisKKyM6IGZpbGVpby5jOjI4NjUKK21zZ2lkICJQYXJ0aWFsIHdyaXRlcyBkaXNhbGxvd2VkIGZvciBOZXRCZWFucyBidWZmZXJzIgorbXNnc3RyICJDeuq2Y2lvd3kgemFwaXMgbmllbW+/bGl3eSBkbGEgYnVmb3LzdyBOZXRCZWFucyIKKworIzogZmlsZWlvLmM6MjkxOSBmaWxlaW8uYzoyOTM3Cittc2dpZCAiaXMgbm90IGEgZmlsZSBvciB3cml0YWJsZSBkZXZpY2UiCittc2dzdHIgIm5pZSBqZXN0IHBsaWtpZW0gbHViIHphcGlzeXdhbG55bSBwcnp5cnqxZGVtIgorCisjOiBmaWxlaW8uYzoyOTg5Cittc2dpZCAiaXMgcmVhZC1vbmx5IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgImplc3QgdHlsa28gZG8gb2Rjenl0dSAod3ltdbYgcG9wcnpleiAhKSIKKworIzogZmlsZWlvLmM6MzMzNQorbXNnaWQgIkU1MDY6IENhbid0IHdyaXRlIHRvIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDY6IE5pZSBtb2fqIHphcGlzYeYgZG8gcGxpa3UgemFiZXpwaWVjemVuaWEgKHd5bXW2IHByemV6ICEpIgorCisjOiBmaWxlaW8uYzozMzQ3Cittc2dpZCAiRTUwNzogQ2xvc2UgZXJyb3IgZm9yIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDc6IEKzsWQgcG9kY3phcyB6YW15a2FuaWEgcGxpa3UgemFiZXpwaWVjemVuaWEgKHd5bXW2IHByemV6ICEpIgorCisjOiBmaWxlaW8uYzozMzQ5Cittc2dpZCAiRTUwODogQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwODogTmllIG1vZ+ogb2Rjenl0YeYgcGxpa3UgdyBjZWx1IHphYmV6cGllY3plbmlhICh3eW11tiBwcnpleiAhKSIKKworIzogZmlsZWlvLmM6MzM2NQorbXNnaWQgIkU1MDk6IENhbm5vdCBjcmVhdGUgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwOTogTmllIG1vZ+ogc3R3b3J6eeYgcGxpa3UgemFiZXpwaWVjemVuaWEgKHd5bXW2IHByemV6ICEpIgorCisjOiBmaWxlaW8uYzozNDY4Cittc2dpZCAiRTUxMDogQ2FuJ3QgbWFrZSBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTEwOiBOaWUgbW9n6iB6cm9iaeYgcGxpa3UgemFiZXpwaWVjemVuaWEgKHd5bXW2IHByemV6ICEpIgorCisjOiBmaWxlaW8uYzozNTMwCittc2dpZCAiRTQ2MDogVGhlIHJlc291cmNlIGZvcmsgd291bGQgYmUgbG9zdCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDYwOiBSb3pkemlhsyB6YXNvYvN3IHpvc3RhbmllIHV0cmFjb255ICh3eW11tiBwcnpleiAhKSIKKworIzogZmlsZWlvLmM6MzY0MAorbXNnaWQgIkUyMTQ6IENhbid0IGZpbmQgdGVtcCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjE0OiBOaWUgbW9n6iB6bmFsZbzmIHBsaWt1IHR5bWN6YXNvd2VnbyBkbyB6YXBpc2FuaWEiCisKKyM6IGZpbGVpby5jOjM2NTgKK21zZ2lkICJFMjEzOiBDYW5ub3QgY29udmVydCAoYWRkICEgdG8gd3JpdGUgd2l0aG91dCBjb252ZXJzaW9uKSIKK21zZ3N0ciAiRTIxMzogTmllIG1vZ+ogcHJ6ZW1pZW5p5iAodb95aiAhIGJ5IHphcGlzYeYgYmV6IHByemVtaWFueSkiCisKKyM6IGZpbGVpby5jOjM2OTMKK21zZ2lkICJFMTY2OiBDYW4ndCBvcGVuIGxpbmtlZCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTY2OiBOaWUgbW9n6iBvdHdvcnp55iBwb2SzsWN6b25lZ28gcGxpa3UgZG8gemFwaXN1IgorCisjOiBmaWxlaW8uYzozNjk3Cittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiBOaWUgbW9n6iBvdHdvcnp55iBwbGlrdSBkbyB6YXBpc3UiCisKKyM6IGZpbGVpby5jOjM5NTkKK21zZ2lkICJFNjY3OiBGc3luYyBmYWlsZWQiCittc2dzdHIgIkU2Njc6IEZzeW5jIG5pZSBwb3dp82SzIHNp6iIKKworIzogZmlsZWlvLmM6Mzk2NgorbXNnaWQgIkU1MTI6IENsb3NlIGZhaWxlZCIKK21zZ3N0ciAiRTUxMjogWmFta25p6mNpZSBzaeogbmllIHBvd2lvZLNvIgorCisjOiBmaWxlaW8uYzo0MDM3Cittc2dpZCAiRTUxMzogd3JpdGUgZXJyb3IsIGNvbnZlcnNpb24gZmFpbGVkIgorbXNnc3RyICJFNTEzOiBis7FkIHcgemFwaXNpZSwgcHJ6ZW1pYW5hIHNp6iBuaWUgcG93aW9ks2EiCisKKyM6IGZpbGVpby5jOjQwNDMKK21zZ2lkICJFNTE0OiB3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICJFNTE0OiBis7FkIHcgemFwaXNpZSAobW+/ZSBzeXN0ZW0gcGxpa/N3IGplc3QgcHJ6ZXBls25pb255PykiCisKKyM6IGZpbGVpby5jOjQxMTAKK21zZ2lkICIgQ09OVkVSU0lPTiBFUlJPUiIKK21zZ3N0ciAiIEKjoUQgVyBQUlpFTUlBTklFIgorCisjOiBmaWxlaW8uYzo0MTI2Cittc2dpZCAiW0RldmljZV0iCittc2dzdHIgIltVcnqxZHplbmllXSIKKworIzogZmlsZWlvLmM6NDEzMQorbXNnaWQgIltOZXddIgorbXNnc3RyICJbTm93eV0iCisKKyM6IGZpbGVpby5jOjQxNTMKK21zZ2lkICIgW2FdIgorbXNnc3RyICIgW2FdIgorCisjOiBmaWxlaW8uYzo0MTUzCittc2dpZCAiIGFwcGVuZGVkIgorbXNnc3RyICIgZG+zsWN6b25vIgorCisjOiBmaWxlaW8uYzo0MTU1Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiIFt3XSIKKworIzogZmlsZWlvLmM6NDE1NQorbXNnaWQgIiB3cml0dGVuIgorbXNnc3RyICIgemFwaXNhbm8iCisKKyM6IGZpbGVpby5jOjQyMDUKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTogUGF0Y2htb2RlOiBuaWUgbW9n6iB6YXBpc2HmIG9yeWdpbmFsbmVnbyBwbGlrdSIKKworIzogZmlsZWlvLmM6NDIyNworbXNnaWQgIkUyMDY6IHBhdGNobW9kZTogY2FuJ3QgdG91Y2ggZW1wdHkgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNjogcGF0Y2htb2RlOiBuaWUgbW9n6iBzdHdvcnp55iBwdXN0ZWdvIG9yeWdpbmFsbmVnbyBwbGlrdSIKKworIzogZmlsZWlvLmM6NDI0MgorbXNnaWQgIkUyMDc6IENhbid0IGRlbGV0ZSBiYWNrdXAgZmlsZSIKK21zZ3N0ciAiRTIwNzogTmllIG1vZ+ogc2thc293YeYgcGxpa3UgemFiZXpwaWVjemVuaWEiCisKKyM6IGZpbGVpby5jOjQzMDYKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPU1RSWkWvRU5JRTogT3J5Z2luYWxueSBwbGlrIG1vv2Ugem9zdGHmIHV0cmFjb255IGx1YiB1c3prb2R6b255XG4iCisKKyM6IGZpbGVpby5jOjQzMDgKK21zZ2lkICJkb24ndCBxdWl0IHRoZSBlZGl0b3IgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorbXNnc3RyICJuaWUgd3ljaG9kvCBlZHl0b3JhLCBkb3Dza2kgcGxpayBuaWUgem9zdGGzIHBvcHJhd25pZSB6YXBpc2FueSEiCisKKyM6IGZpbGVpby5jOjQzOTcKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW2Rvc10iCisKKyM6IGZpbGVpby5jOjQzOTcKK21zZ2lkICJbZG9zIGZvcm1hdF0iCittc2dzdHIgIltmb3JtYXQgZG9zLWFdIgorCisjOiBmaWxlaW8uYzo0NDA0Cittc2dpZCAiW21hY10iCittc2dzdHIgIlttYWNdIgorCisjOiBmaWxlaW8uYzo0NDA0Cittc2dpZCAiW21hYyBmb3JtYXRdIgorbXNnc3RyICJbZm9ybWF0IG1hYy1hXSIKKworIzogZmlsZWlvLmM6NDQxMQorbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzo0NDExCittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW2Zvcm1hdCB1bml4LWFdIgorCisjOiBmaWxlaW8uYzo0NDM4Cittc2dpZCAiMSBsaW5lLCAiCittc2dzdHIgIjEgd2llcnN6LCAiCisKKyM6IGZpbGVpby5jOjQ0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzLCAiCittc2dzdHIgIiVsZCB3aWVyc3p5LCAiCisKKyM6IGZpbGVpby5jOjQ0NDMKK21zZ2lkICIxIGNoYXJhY3RlciIKK21zZ3N0ciAiMSB6bmFrIgorCisjOiBmaWxlaW8uYzo0NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlbGQgem5ha/N3IgorCisjOiBmaWxlaW8uYzo0NDU1Cittc2dpZCAiW25vZW9sXSIKK21zZ3N0ciAiW25vZW9sXSIKKworIzogZmlsZWlvLmM6NDQ1NQorbXNnaWQgIltJbmNvbXBsZXRlIGxhc3QgbGluZV0iCittc2dzdHIgIltOaWVrb21wbGV0bnkgb3N0YXRuaSB3aWVyc3pdIgorCisjLiBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIy4gbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjLiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyM6IGZpbGVpby5jOjQ0NzQKK21zZ2lkICJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiCittc2dzdHIgIk9TVFJaRa9FTklFOiBQbGlrIHptaWVuabMgc2nqIG9kIGN6YXN1IG9zdGF0bmllZ28gb2Rjenl0dSEhISIKKworIzogZmlsZWlvLmM6NDQ3NgorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byB3cml0ZSB0byBpdCIKK21zZ3N0ciAiQ3p5IG5hcHJhd2TqIGNoY2VzeiBnbyB6YXBpc2HmIgorCisjOiBmaWxlaW8uYzo1NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDg6IEVycm9yIHdyaXRpbmcgdG8gXCIlc1wiIgorbXNnc3RyICJFMjA4OiBCs7FkIHphcGlzeXdhbmlhIGRvIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTczMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjA5OiBFcnJvciBjbG9zaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIwOTogQrOxZCB3IHRyYWtjaWUgemFteWthbmlhIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTczNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogQrOxZCBvZGN6eXR1IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTk3MAorbXNnaWQgIkUyNDY6IEZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQgZGVsZXRlZCBidWZmZXIiCittc2dzdHIgIkUyNDY6IEF1dG9rb21lbmRhIEZpbGVDaGFuZ2VkU2hlbGwgc2thc293YbNhIGJ1Zm9yIgorCisjOiBmaWxlaW8uYzo1OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIG5vIGxvbmdlciBhdmFpbGFibGUiCittc2dzdHIgIkUyMTE6IE9TVFJaRa9FTklFOiBQbGlrIFwiJXNcIiBuaWUgamVzdCBks3W/ZWogZG9zdOpwbnkiCisKKyM6IGZpbGVpby5jOjU5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlcxMjogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgYW5kIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQgaW4gVmltIGFzICIKKyJ3ZWxsIgorbXNnc3RyICIiCisiVzEyOiBPU1RSWkWvRU5JRTogUGxpayBcIiVzXCIgem1pZW5psyBzaeogb2QgY3phc3Ugcm96cG9jeupjaWEgZWR5Y2ppLCBidWZvciAiCisidyBWaW1pZSBy83duaWW/IHpvc3RhsyB6bWllbmlvbnkiCisKKyM6IGZpbGVpby5jOjU5OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMTogT1NUUlpFr0VOSUU6IFBsaWsgXCIlc1wiIHptaWVuabMgc2nqIG9kIGN6YXN1IHJvenBvY3rqY2lhIGVkeWNqaSIKKworIzogZmlsZWlvLmM6NTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTY6IE9TVFJaRa9FTklFOiBUcnliIHBsaWt1IFwiJXNcIiB6bWllbmmzIHNp6iBvZCBjemFzdSByb3pwb2N66mNpYSBlZHljamkiCisKKyM6IGZpbGVpby5jOjYwMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzEzOiBPU1RSWkWvRU5JRTogUGxpayBcIiVzXCIgem9zdGGzIHN0d29yem9ueSBwbyByb3pwb2N66mNpdSBlZHljamkiCisKKyM6IGZpbGVpby5jOjYwMTkKK21zZ2lkICJTZWUgXCI6aGVscCBXMTFcIiBmb3IgbW9yZSBpbmZvLiIKK21zZ3N0ciAiUGF0cnogXCI6aGVscCBXMTFcIiAgZGxhIGRhbHN6eWNoIGluZm9ybWFjamkuIgorCisjOiBmaWxlaW8uYzo2MDMzCittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAiT1NUUlpFr0VOSUUiCisKKyM6IGZpbGVpby5jOjYwMzQKK21zZ2lkICIiCisiJk9LXG4iCisiJkxvYWQgRmlsZSIKK21zZ3N0ciAiIgorIiZPS1xuIgorIiZaYbNhZHVqIFBsaWsiCisKKyM6IGZpbGVpby5jOjYxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2MjogQ291bGQgbm90IHByZXBhcmUgZm9yIHJlbG9hZGluZyBcIiVzXCIiCittc2dzdHIgIkU0NjI6IE5pZSBtb79uYSBwcnp5Z290b3dh5iBwcnpls2Fkb3dhbmlhIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIxOiBDb3VsZCBub3QgcmVsb2FkIFwiJXNcIiIKK21zZ3N0ciAiRTMyMTogTmllIG1vv25hIHByemWzYWRvd2HmIFwiJXNcIiIKKworIzogZmlsZWlvLmM6Njc0MAorbXNnaWQgIi0tRGVsZXRlZC0tIgorbXNnc3RyICItLVNrYXNvd2Fuby0tIgorCisjLiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdAorIzogZmlsZWlvLmM6NjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY3OiBObyBzdWNoIGdyb3VwOiBcIiVzXCIiCittc2dzdHIgIkUzNjc6IE5pZSBtYSB0YWtpZWogZ3J1cHk6IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NzAyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciAqOiAlcyIKK21zZ3N0ciAiRTIxNTogTmllZG9wdXN6Y3phbG55IHpuYWsgcG8gKjogJXMiCisKKyM6IGZpbGVpby5jOjcwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IE5pZSBtYSB0YWtpZWdvIHd5ZGFyemVuaWE6ICVzIgorCisjOiBmaWxlaW8uYzo3MDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZ3JvdXAgb3IgZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiBOaWUgbWEgdGFraWVqIGdydXB5IGx1YiB3eWRhcnplbmlhOiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo3MTk4Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRva29tZW5keSAtLS0iCisKKyM6IGZpbGVpby5jOjc0NjkKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiRTIxNzogTmllIG1vv25hIHd5a29ueXdh5iBhdXRva29tZW5kIGRsYSB3eWRhcnpl8SBBTEwiCisKKyM6IGZpbGVpby5jOjc0OTIKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgIkJyYWsgcGFzdWqxY3ljaCBhdXRva29tZW5kIgorCisjOiBmaWxlaW8uYzo3ODEzCittc2dpZCAiRTIxODogYXV0b2NvbW1hbmQgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTIxODogemJ5dCBns+pib2tpZSB6YWduaWW/ZL9lbmllIGF1dG9rb21lbmQiCisKKyM6IGZpbGVpby5jOjgwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgQXV0byBjb21tYW5kcyBmb3IgXCIlc1wiIgorbXNnc3RyICIlcyBBdXRva29tZW5kIGRsYSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjgwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nICVzIgorbXNnc3RyICJXeWtvbnVq6iAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBmaWxlaW8uYzo4MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImF1dG9jb21tYW5kICVzIgorbXNnc3RyICJhdXRva29tZW5kYSAlcyIKKworIzogZmlsZWlvLmM6ODczMQorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IEJyYWsgey4iCisKKyM6IGZpbGVpby5jOjg3MzMKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiBCcmFrIH0uIgorCisjOiBmb2xkLmM6NjgKK21zZ2lkICJFNDkwOiBObyBmb2xkIGZvdW5kIgorbXNnc3RyICJFNDkwOiBOaWUgem5hbGV6aW9ubyB6d2luaepjaWEiCisKKyM6IGZvbGQuYzo1OTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogTmllIG1vv25hIHV0d29yennmIHp3aW5p6mNpYSBwcnp5IGJpZb+xY2VqICdmb2xkbWV0aG9kJyIKKworIzogZm9sZC5jOjU5NQorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiBOaWUgbW+/bmEgc2thc293YeYgendpbmnqY2lhIHByenkgYmllv7FjZWogJ2ZvbGRtZXRob2QnIgorCisjOiBnZXRjaGFyLmM6MjQ4Cittc2dpZCAiRTIyMjogQWRkIHRvIHJlYWQgYnVmZmVyIgorbXNnc3RyICJFMjIyOiBEb2RhaiBkbyBidWZvcmEgb2Rjenl0dSIKKworIzogZ2V0Y2hhci5jOjIxOTgKK21zZ2lkICJFMjIzOiByZWN1cnNpdmUgbWFwcGluZyIKK21zZ3N0ciAiRTIyMzogcmVrdXJzeXduZSBwcnp5cG9yerFka293YW5pZSIKKworIzogZ2V0Y2hhci5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNDogZ2xvYmFsIGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjQ6IGlzdG5pZWplIGp1vyBnbG9iYWxueSBza3LzdCBkbGEgJXMiCisKKyM6IGdldGNoYXIuYzozMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTogaXN0bmllamUganW/IGdsb2JhbG5lIHByenlwb3J6sWRrb3dhbmllIGRsYSAlcyIKKworIzogZ2V0Y2hhci5jOjMyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogaXN0bmllamUganW/IHNrcvN0IGRsYSAlcyIKKworIzogZ2V0Y2hhci5jOjMyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNzogbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjc6IGlzdG5pZWplIGp1vyBwcnp5cG9yerFka293YW5pZSBkbGEgJXMiCisKKyM6IGdldGNoYXIuYzozMjc5Cittc2dpZCAiTm8gYWJicmV2aWF0aW9uIGZvdW5kIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyBza3LzdHUiCisKKyM6IGdldGNoYXIuYzozMjgxCittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAiTmllIHpuYWxlemlvbm8gcHJ6eXBvcnqxZGtvd2FuaWEiCisKKyM6IGdldGNoYXIuYzo0MTczCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiBOaWVkb3B1c3pjemFsbnkgdHJ5YiIKKworIzogZ3VpX2F0X2ZzLmM6MzAwCittc2dpZCAiPGNhbm5vdCBvcGVuPiAiCittc2dzdHIgIjxuaWUgbW9n6iBvdHdvcnp55j4gIgorCisjOiBndWlfYXRfZnMuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAiRTYxNjogdmltX1NlbEZpbGU6IG5pZSBtb2fqIG90cnp5bWHmIGN6Y2lvbmtpICVzIgorCisjOiBndWlfYXRfZnMuYzoyNzgxCittc2dpZCAiRTYxNDogdmltX1NlbEZpbGU6IGNhbid0IHJldHVybiB0byBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNDogdmltX1NlbEZpbGU6IG5pZSBtb2fqIHBvd3LzY2nmIGRvIGJpZb+xY2VnbyBrYXRhbG9ndSIKKworIzogZ3VpX2F0X2ZzLmM6MjgwMQorbXNnaWQgIlBhdGhuYW1lOiIKK21zZ3N0ciAiVHJvcDoiCisKKyM6IGd1aV9hdF9mcy5jOjI4MDcKK21zZ2lkICJFNjE1OiB2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJFNjE1OiB2aW1fU2VsRmlsZTogbmllIG1vZ+ogb3RyenltYeYgYmllv7FjZWdvIGthdGFsb2d1IgorCisjOiBndWlfYXRfZnMuYzoyODE1IGd1aV9tb3RpZi5jOjE2MjMKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGd1aV9hdF9mcy5jOjI4MTUgZ3VpX2d0ay5jOjI3MzEgZ3VpX21vdGlmLmM6MTYxOCBndWlfbW90aWYuYzoyODQ5Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJaYWtv8WN6IgorCisjOiBndWlfYXRoZW5hLmM6MjA0NyBndWlfbW90aWYuYzoxODcxCittc2dpZCAiVmltIGRpYWxvZyIKK21zZ3N0ciAiVklNIC0gRGlhbG9nIgorCisjOiBndWlfYXRfc2IuYzo0ODYKK21zZ2lkICJTY3JvbGxiYXIgV2lkZ2V0OiBDb3VsZCBub3QgZ2V0IGdlb21ldHJ5IG9mIHRodW1iIHBpeG1hcC4iCittc2dzdHIgIlNjcm9sbGJhciBXaWRnZXQ6IE5pZSBtb2ezZW0gb3RyenltYeYgcm96bWlhcvN3IHJ5c3Vua3UgbmEgcHJ6eWNpc2t1LiIKKworIzogZ3VpX2JldmFsLmM6MTAxIGd1aV93MzIuYzozODMwCittc2dpZCAiRTIzMjogQ2Fubm90IGNyZWF0ZSBCYWxsb29uRXZhbCB3aXRoIGJvdGggbWVzc2FnZSBhbmQgY2FsbGJhY2siCittc2dzdHIgIkUyMzI6IE5pZSBtb2fqIHN0d29yennmIEJhbGxvb25FdmFsIHogcG93aWFkb21pZW5pZW0gaSB3eXdvs2FuaWVtIgorCisjOiBndWkuYzoyMjAKK21zZ2lkICJFMjI5OiBDYW5ub3Qgc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiRTIyOTogTmllIG1vZ+ogb2RwYWxp5iBHVUkiCisKKyM6IGd1aS5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogTmllIG1vZ+ogY3p5dGHmIHogXCIlc1wiIgorCisjOiBndWkuYzo0NzIKK21zZ2lkICJFNjY1OiBDYW5ub3Qgc3RhcnQgR1VJLCBubyB2YWxpZCBmb250IGZvdW5kIgorbXNnc3RyICJFNjY1OiBOaWUgbW+/bmEgdXJ1Y2hvbWnmIEdVSSwgYnJhayBwcmF3aWSzb3dlaiBjemNpb25raSIKKworIzogZ3VpLmM6NDc3Cittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiBOaWV3s2G2Y2l3ZSAnZ3VpZm9udHdpZGUnIgorCisjOiBndWkuYzo1NDcKK21zZ2lkICJFNTk5OiBWYWx1ZSBvZiAnaW1hY3RpdmF0ZWtleScgaXMgaW52YWxpZCIKK21zZ3N0ciAiRTU5OTogTmllcHJhd2lks293YSB3YXJ0b7bmICdpbWFjdGl2YXRla2V5JyIKKworIzogZ3VpLmM6NDA2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU0OiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgJXMiCittc2dzdHIgIkUyNTQ6IE5pZSBtb2fqIHphcmV6ZXJ3b3dh5iBrb2xvcnUgJXMiCisKKyM6IGd1aV9ndGsuYzoxNjA3Cittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiRGlhbG9nIFZpbWEuLi4iCisKKyM6IGd1aV9ndGsuYzoyMDYwIG1lc3NhZ2UuYzoyOTkzCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJlRha1xuIgorIiZOaWVcbiIKKyImWmFrb/FjeiIKKworIzogZ3VpX2d0ay5jOjIyNjgKK21zZ2lkICJJbnB1dCBfTWV0aG9kcyIKK21zZ3N0ciAiSW5wdXQgX01ldGhvZHMiCisKKyM6IGd1aV9ndGsuYzoyNTM0IGd1aV9tb3RpZi5jOjI3NjgKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIlZJTSAtIFN6dWthaiBpIFphbWllbmlhai4uLiIKKworIzogZ3VpX2d0ay5jOjI1NDIgZ3VpX21vdGlmLmM6Mjc3MAorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiVklNIC0gU3p1a2FqLi4uIgorCisjOiBndWlfZ3RrLmM6MjU3NCBndWlfbW90aWYuYzoyODg4Cittc2dpZCAiRmluZCB3aGF0OiIKK21zZ3N0ciAiWm5hamS8OiIKKworIzogZ3VpX2d0ay5jOjI1OTIgZ3VpX21vdGlmLmM6MjkyMAorbXNnaWQgIlJlcGxhY2Ugd2l0aDoiCittc2dzdHIgIlphbWll8SBuYToiCisKKyMuIHdob2xlIHdvcmQgb25seSBidXR0b24KKyM6IGd1aV9ndGsuYzoyNjI0IGd1aV9tb3RpZi5jOjMwMzYKK21zZ2lkICJNYXRjaCB3aG9sZSB3b3JkIG9ubHkiCittc2dzdHIgIkRvcGFzdWogdHlsa28gY2GzZSB3eXJhenkiCisKKyMuIG1hdGNoIGNhc2UgYnV0dG9uCisjOiBndWlfZ3RrLmM6MjYzNSBndWlfbW90aWYuYzozMDQ4Cittc2dpZCAiTWF0Y2ggY2FzZSIKK21zZ3N0ciAiRG9wYXN1aiB3aWVsa2+25iBsaXRlciIKKworIzogZ3VpX2d0ay5jOjI2NDUgZ3VpX21vdGlmLmM6Mjk5MAorbXNnaWQgIkRpcmVjdGlvbiIKK21zZ3N0ciAiS2llcnVuZWsiCisKKyMuICdVcCcgYW5kICdEb3duJyBidXR0b25zCisjOiBndWlfZ3RrLmM6MjY1NyBndWlfbW90aWYuYzozMDAyCittc2dpZCAiVXAiCittc2dzdHIgIlcgZ/Ny6iIKKworIzogZ3VpX2d0ay5jOjI2NjEgZ3VpX21vdGlmLmM6MzAxMAorbXNnaWQgIkRvd24iCittc2dzdHIgIlcgZPOzIgorCisjOiBndWlfZ3RrLmM6MjY4MyBndWlfZ3RrLmM6MjY4NSBndWlfbW90aWYuYzoyNzkyCittc2dpZCAiRmluZCBOZXh0IgorbXNnc3RyICJabmFqZLwgbmFzdOpwbmUiCisKKyM6IGd1aV9ndGsuYzoyNzAyIGd1aV9ndGsuYzoyNzA0IGd1aV9tb3RpZi5jOjI4MDkKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICJaYW1pZfEiCisKKyM6IGd1aV9ndGsuYzoyNzE1IGd1aV9ndGsuYzoyNzE3IGd1aV9tb3RpZi5jOjI4MjIKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAiWmFtaWXxIHdzenlzdGtpZSIKKworIzogZ3VpX2d0a194MTEuYzoyMzI3Cittc2dpZCAiVmltOiBSZWNlaXZlZCBcImRpZVwiIHJlcXVlc3QgZnJvbSBzZXNzaW9uIG1hbmFnZXJcbiIKK21zZ3N0ciAiVmltOiBvdHJ6eW1hbm8gv7FkYW5pZSBcImRpZVwiIG9kIG1hbmFkv2VyYSBzZXNqaVxuIgorCisjOiBndWlfZ3RrX3gxMS5jOjM1MTkKK21zZ2lkICJWaW06IE1haW4gd2luZG93IHVuZXhwZWN0ZWRseSBkZXN0cm95ZWRcbiIKK21zZ3N0ciAiVmltOiBHs/N3bmUgb2tubyBuaWVvY3pla2l3YW5pZSB6bmlzemN6b25lXG4iCisKKyM6IGd1aV9ndGtfeDExLmM6NDEzOAorbXNnaWQgIkZvbnQgU2VsZWN0aW9uIgorbXNnc3RyICJXeWLzciBjemNpb25raSIKKworIzogZ3VpX2d0a194MTEuYzo2MDM1IHVpLmM6MjExNworbXNnaWQgIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iCittc2dzdHIgIlW/eXdhbSBDVVRfQlVGRkVSMCB6YW1pYXN0IHB1c3RlZ28gd3lib3J1IgorCisjOiBndWlfbW90aWYuYzoxNjE3IGd1aV9tb3RpZi5jOjE2MjAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRyIgorCisjOiBndWlfbW90aWYuYzoxNjE5Cittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIkthdGFsb2dpIgorCisjOiBndWlfbW90aWYuYzoxNjIxCittc2dpZCAiSGVscCIKK21zZ3N0ciAiUG9tb2MiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjIKK21zZ2lkICJGaWxlcyIKK21zZ3N0ciAiUGxpa2kiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjQKK21zZ2lkICJTZWxlY3Rpb24iCittc2dzdHIgIld5YvNyIgorCisjOiBndWlfbW90aWYuYzoyODM1Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAiQ29mbmlqIgorCisjOiBndWlfcmlzY29zLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTA6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTYxMDogTmllIG1vZ+ogemGzYWRvd2HmIGN6Y2lvbmtpIFphcCAnJXMnIgorCisjOiBndWlfcmlzY29zLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjExOiBDYW4ndCB1c2UgZm9udCAlcyIKK21zZ3N0ciAiRTYxMTogTmllIG1vZ+ogdb955iBjemNpb25raSAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNzAKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisiV3lzebNhbSB6YXdpYWRvbWllbmllIGtv8WN6sWNlIHByb2NlcyBwb2Nob2RueS5cbiIKKworIzogZ3VpX3czMi5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiRTI0MzogQXJndW1lbnQgbmllIGplc3Qgd3Nwb21hZ2FueTogXCItJXNcIjsgVb95d2FqIHdlcnNqaSBPTEUuIgorCisjOiBndWlfdzQ4LmM6MjA5MAorbXNnaWQgIkZpbmQgc3RyaW5nICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIlpuYWpkvCBjabFnICh1v3lqICdcXFxcJyBkbyBzenVrYW5pYSAnXFwnKSIKKworIzogZ3VpX3c0OC5jOjIxMTUKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJTenVrYW5pZSBpIFphbWlhbmEgKHW/eWogJ1xcXFwnIGRvIHN6dWthbmlhICdcXCcpIgorCisjOiBndWlfeDExLmM6MTUzNworbXNnaWQgIlZpbSBFNDU4OiBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnksIHNvbWUgY29sb3JzIG1heSBiZSBpbmNvcnJlY3QiCittc2dzdHIgIiIKKyJWaW0gRTQ1ODogTmllIG1vZ+ogemFyZXplcndvd2HmIG1hcHkga29sb3LzdywgcGV3bmUga29sb3J5IG1vZ7EgYnnmICIKKyJuaWVwcmF3aWSzb3dlIgorCisjOiBndWlfeDExLmM6MjExOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUwOiBGb250cyBmb3IgdGhlIGZvbGxvd2luZyBjaGFyc2V0cyBhcmUgbWlzc2luZyBpbiBmb250c2V0ICVzOiIKK21zZ3N0ciAiRTI1MDogQnJhayBjemNpb25layBkbGEgbmFzdOpwdWqxY3ljaCB6ZXN0YXfzdyB6bmFr83cgdyB6ZXN0YXdpZSBjemNpb25layAlczoiCisKKyM6IGd1aV94MTEuYzoyMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTI6IEZvbnRzZXQgbmFtZTogJXMiCittc2dzdHIgIkUyNTI6IE5hendhIHplc3Rhd3UgY3pjaW9uZWs6ICVzIgorCisjOiBndWlfeDExLmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJDemNpb25rYSAnJXMnIG5pZSBwb3NpYWRhIHpuYWvzdyBqZWRub2xpdGVqIHN6ZXJva2+2Y2kiCisKKyM6IGd1aV94MTEuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTM6IEZvbnRzZXQgbmFtZTogJXNcbiIKK21zZ3N0ciAiRTI1MzogTmF6d2EgemVzdGF3dSBjemNpb25lazogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDA6ICVzXG4iCittc2dzdHIgIkZvbnQwOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAiRm9udDE6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQlZCB3aWR0aCBpcyBub3QgdHdpY2UgdGhhdCBvZiBmb250MFxuIgorbXNnc3RyICJzemVyb2tvtuYgZm9udCVkIG5pZSBqZXN0IHBvZHfzam6xIHN6ZXJva2+2Y2mxIGZvbnQwXG4iCisKKyM6IGd1aV94MTEuYzoyMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwIHdpZHRoOiAlbGRcbiIKK21zZ3N0ciAiU3plcm9rb7bmIGZvbnQwOiAlbGRcbiIKKworIzogZ3VpX3gxMS5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvbnQxIHdpZHRoOiAlbGRcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlN6ZXJva2+25iBmb250MTogJWxkXG4iCisiXG4iCisKKyM6IGhhbmd1bGluLmM6NjEwCittc2dpZCAiRTI1NjogSGFuZ3VsIGF1dG9tYXRhIEVSUk9SIgorbXNnc3RyICJFMjU2OiBCo6FEIHcgYXV0b21hY2llIEhhbmd1bCIKKworIzogaWZfY3Njb3BlLmM6NzcKK21zZ2lkICJBZGQgYSBuZXcgZGF0YWJhc2UiCittc2dzdHIgIkRvZGFqIG5vd7EgYmF66iBkYW55Y2giCisKKyM6IGlmX2NzY29wZS5jOjc5Cittc2dpZCAiUXVlcnkgZm9yIGEgcGF0dGVybiIKK21zZ3N0ciAiWmFweXRhbmUgbyB3em9yemVjIgorCisjOiBpZl9jc2NvcGUuYzo4MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICJQb2thvyB0ZW4ga29tdW5pa2F0IgorCisjOiBpZl9jc2NvcGUuYzo4MworbXNnaWQgIktpbGwgYSBjb25uZWN0aW9uIgorbXNnc3RyICJaYWJpaiBwb7OxY3plbmllIgorCisjOiBpZl9jc2NvcGUuYzo4NQorbXNnaWQgIlJlaW5pdCBhbGwgY29ubmVjdGlvbnMiCittc2dzdHIgIlBvbvN3IHdzemVsa2llIHBvs7FjemVuaWEiCisKKyM6IGlmX2NzY29wZS5jOjg3Cittc2dpZCAiU2hvdyBjb25uZWN0aW9ucyIKK21zZ3N0ciAiUG9rYb8gcG+zsWN6ZW5pYSIKKworIzogaWZfY3Njb3BlLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2MDogVXNhZ2U6IGNzW2NvcGVdICVzIgorbXNnc3RyICJFNTYwOiBaYXN0b3Nvd2FuaWU6IGNzW2NvcGVdICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMjQKK21zZ2lkICJUaGlzIGNzY29wZSBjb21tYW5kIGRvZXMgbm90IHN1cHBvcnQgc3BsaXR0aW5nIHRoZSB3aW5kb3cuXG4iCittc2dzdHIgIlRhIGtvbWVuZGEgY3Njb3BlIG5pZSB3c3BvbWFnYSBwb2R6aWVsZW5pYSBva25hLlxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzUKK21zZ2lkICJFNTYyOiBVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiRTU2MjogWmFzdG9zb3dhbmllOiBjc3RhZyA8aWRlbnQ+IgorCisjOiBpZl9jc2NvcGUuYzoyMzEKK21zZ2lkICJFMjU3OiBjc3RhZzogdGFnIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI1NzogY3N0YWc6IG5pZSB6bmFsZXppb25vIHpuYWN6bmlrYSIKKworIzogaWZfY3Njb3BlLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjM6IHN0YXQoJXMpIGVycm9yOiAlZCIKK21zZ3N0ciAiRTU2Mzogc3RhdCglcykgYrOxZDogJWQiCisKKyM6IGlmX2NzY29wZS5jOjQxOQorbXNnaWQgIkU1NjM6IHN0YXQgZXJyb3IiCittc2dzdHIgIkU1NjM6IGKzsWQgc3RhdCIKKworIzogaWZfY3Njb3BlLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjQ6ICVzIGlzIG5vdCBhIGRpcmVjdG9yeSBvciBhIHZhbGlkIGNzY29wZSBkYXRhYmFzZSIKK21zZ3N0ciAiRTU2NDogJXMgbmllIGplc3Qga2F0YWxvZ2llbSBsdWIgcG9wcmF3brEgYmF6sSBkYW55Y2ggY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICJEb2Rhbm8gYmF66iBkYW55Y2ggY3Njb3BlICVzIgorCisjOiBpZl9jc2NvcGUuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlbGQiCittc2dzdHIgIkUyNjI6IGKzsWQgb2Rjenl0dSBwb7OxY3plbmlhIHogY3Njb3BlICVsZCIKKworIzogaWZfY3Njb3BlLmM6Njk0Cittc2dpZCAiRTU2MTogdW5rbm93biBjc2NvcGUgc2VhcmNoIHR5cGUiCittc2dzdHIgIkU1NjE6IG5pZXpuYW55IHR5cCBzenVrYW5pYSBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjczNgorbXNnaWQgIkU1NjY6IENvdWxkIG5vdCBjcmVhdGUgY3Njb3BlIHBpcGVzIgorbXNnc3RyICJFNTY2OiBOaWUgbW9ns2VtIHN0d29yennmIHBvdG9rdSBkbyBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjc1MworbXNnaWQgIkU2MjI6IENvdWxkIG5vdCBmb3JrIGZvciBjc2NvcGUiCittc2dzdHIgIkU2MjI6IE5pZSBtb2ezZW0gdXR3b3J6eeYgcm96d2lkbGVuaWEgZGxhIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6ODQ3IGlmX2NzY29wZS5jOjg5NworbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uIGV4ZWMgZmFpbGVkIgorbXNnc3RyICJ3eWtvbmFuaWUgY3NfY3JlYXRlX2Nvbm5lY3Rpb24gbmllIHBvd2lvZLNvIHNp6iIKKworIzogaWZfY3Njb3BlLmM6ODk4Cittc2dpZCAiRTYyMzogQ291bGQgbm90IHNwYXduIGNzY29wZSBwcm9jZXNzIgorbXNnc3RyICJFNjIzOiBOaWUgbW9ns2VtIHN0d29yennmIHByb2Nlc3UgY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo5MTEKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciB0b19mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZGxhIHRvX2ZwIG5pZSBwb3dpb2SzbyBzaeoiCisKKyM6IGlmX2NzY29wZS5jOjkxMworbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIGZyX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBkbGEgZnJfZnAgbmllIHBvd2lvZLNvIHNp6iIKKworIzogaWZfY3Njb3BlLmM6OTUxCittc2dpZCAiRTU2Nzogbm8gY3Njb3BlIGNvbm5lY3Rpb25zIgorbXNnc3RyICJFNTY3OiBicmFrIHBvs7FjemVuaWEgeiBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjEwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiBicmFrIGRvcGFzb3dh8SBkbGEgemFweXRhbmlhIGNzY29wZSAlcyBvICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Njk6IGludmFsaWQgY3Njb3BlcXVpY2tmaXggZmxhZyAlYyBmb3IgJWMiCittc2dzdHIgIkU0Njk6IG5pZXByYXdpZLNvd2EgZmxhZ2EgY3Njb3BlcXVpY2tmaXggJWMgZGxhICVjIgorCisjOiBpZl9jc2NvcGUuYzoxMTUyCittc2dpZCAiY3Njb3BlIGNvbW1hbmRzOlxuIgorbXNnc3RyICJrb21lbmR5IGNzY29wZTpcbiIKKworIzogaWZfY3Njb3BlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLTVzOiAlLTMwcyAoVXNhZ2U6ICVzKSIKK21zZ3N0ciAiJS01czogJS0zMHMgKFW/eWNpZTogJXMpIgorCisjOiBpZl9jc2NvcGUuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjU6IGNhbm5vdCBvcGVuIGNzY29wZSBkYXRhYmFzZTogJXMiCittc2dzdHIgIkU2MjU6IG5pZSBtb2fqIG90d29yennmIGJhenkgZGFueWNoIGNzY29wZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNzEKK21zZ2lkICJFNjI2OiBjYW5ub3QgZ2V0IGNzY29wZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRTYyNjogbmllIG1vZ+ogdXp5c2th5iBpbmZvcm1hY2ppIHogYmF6eSBkYW55Y2ggY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzoxMjk2Cittc2dpZCAiRTU2ODogZHVwbGljYXRlIGNzY29wZSBkYXRhYmFzZSBub3QgYWRkZWQiCittc2dzdHIgIkU1Njg6IG5pZSBkb2Rhbm8gZHVwbGlrYXR1IGJhenkgZGFueWNoIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MTMwNworbXNnaWQgIkU1Njk6IG1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICJFNTY5OiB3eWN6ZXJwYW5vIG1ha3N5bWFsbrEgbGljemLqIHBvs7FjemXxIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MTQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYxOiBjc2NvcGUgY29ubmVjdGlvbiAlcyBub3QgZm91bmQiCittc2dzdHIgIkUyNjE6IG5pZSBtYSBwb7OxY3plbmlhICVzIHogY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNzY29wZSBjb25uZWN0aW9uICVzIGNsb3NlZCIKK21zZ3N0ciAicG+zsWN6ZW5pZSAlcyB6IGNzY29wZSB6b3N0YbNvIHphbWtuaep0ZSIKKworIy4gc2hvdWxkIG5vdCByZWFjaCBoZXJlCisjOiBpZl9jc2NvcGUuYzoxNTk4Cittc2dpZCAiRTU3MDogZmF0YWwgZXJyb3IgaW4gY3NfbWFuYWdlX21hdGNoZXMiCittc2dzdHIgIkU1NzA6IGKzsWQga3J5dHljem55IHcgY3NfbWFuYWdlX21hdGNoZXMiCisKKyM6IGlmX2NzY29wZS5jOjE4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3Njb3BlIHRhZzogJXMiCittc2dzdHIgIlpuYWN6bmlrIGNzY29wZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjE4NzAKK21zZ2lkICIiCisiXG4iCisiICAgIyAgIGxpbmUiCittc2dzdHIgIiIKKyJcbiIKKyIgICAjICAgd2llcnN6IgorCisjOiBpZl9jc2NvcGUuYzoxODcyCittc2dpZCAiZmlsZW5hbWUgLyBjb250ZXh0IC8gbGluZVxuIgorbXNnc3RyICJuYXp3YSBwbGlrdSAgLyBrb250ZWtzdCAvIHdpZXJzelxuIgorCisjOiBpZl9jc2NvcGUuYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDk6IENzY29wZSBlcnJvcjogJXMiCittc2dzdHIgIkU2MDk6IEKzsWQgY3Njb3BlOiAlcyIKKworIzogaWZfY3Njb3BlLmM6MjE3NgorbXNnaWQgIkFsbCBjc2NvcGUgZGF0YWJhc2VzIHJlc2V0IgorbXNnc3RyICJXc3p5c3RraWUgYmF6eSBkYW55Y2ggY3Njb3BlIHByemWzYWRvd2FubyIKKworIzogaWZfY3Njb3BlLmM6MjI0NAorbXNnaWQgIm5vIGNzY29wZSBjb25uZWN0aW9uc1xuIgorbXNnc3RyICJicmFrIHBvs7FjemXxIHogY3Njb3BlXG4iCisKKyM6IGlmX2NzY29wZS5jOjIyNDgKK21zZ2lkICIgIyBwaWQgICAgZGF0YWJhc2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iCittc2dzdHIgIiAjIHBpZCAgIG5hendhIGJhenkgZGFueWNoICAgICAgICAgICAgICAgcHJ6ZWRzaW9uZWsgdHJvcHVcbiIKKworIzogaWZfcHl0aG9uLmM6NDM2Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjYzOiBQcnp5a3JvIG1pLCB0YSBrb21lbmRhIGplc3Qgd3mzsWN6b25hLCBibyBuaWUgbW+/bmEgemGzYWRvd2HmICIKKyJiaWJsaW90ZWtpIFB5dGhvbmEiCisKKyM6IGlmX3B5dGhvbi5jOjUwMAorbXNnaWQgIkU2NTk6IENhbm5vdCBpbnZva2UgUHl0aG9uIHJlY3Vyc2l2ZWx5IgorbXNnc3RyICJFNjU5OiBOaWUgbW+/bmEgd3l3b7Nh5iBQeXRob25hIHJla3Vyc3l3bmllIgorCisjOiBpZl9weXRob24uYzo3MDEKK21zZ2lkICJjYW4ndCBkZWxldGUgT3V0cHV0T2JqZWN0IGF0dHJpYnV0ZXMiCittc2dzdHIgIm5pZSBtb2fqIHNrYXNvd2HmIGF0cnlidXTzdyBPdXRwdXRPYmplY3QiCisKKyM6IGlmX3B5dGhvbi5jOjcwOAorbXNnaWQgInNvZnRzcGFjZSBtdXN0IGJlIGFuIGludGVnZXIiCittc2dzdHIgInNvZnRzcGFjZSBtdXNpIGJ55iBsaWN6YrEgY2Gza293aXSxIgorCisjOiBpZl9weXRob24uYzo3MTYKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAibmllcG9wcmF3bnkgYXRyeWJ1dCIKKworIzogaWZfcHl0aG9uLmM6NzU1IGlmX3B5dGhvbi5jOjc2OQorbXNnaWQgIndyaXRlbGluZXMoKSByZXF1aXJlcyBsaXN0IG9mIHN0cmluZ3MiCittc2dzdHIgIndyaXRlbGluZXMoKSB3eW1hZ2EgbGlzdHkgY2mxZ/N3IgorCisjOiBpZl9weXRob24uYzo4OTUKK21zZ2lkICJFMjY0OiBQeXRob246IEVycm9yIGluaXRpYWxpc2luZyBJL08gb2JqZWN0cyIKK21zZ3N0ciAiRTI2NDogUHl0aG9uOiBCs7FkIHcgaW5pY2phbGl6YWNqaSBvYmlla3TzdyBJL08iCisKKyM6IGlmX3B5dGhvbi5jOjEwODAgaWZfdGNsLmM6MTQwMgorbXNnaWQgImludmFsaWQgZXhwcmVzc2lvbiIKK21zZ3N0ciAibmllcG9wcmF3bmUgd3lyYb9lbmllIgorCisjOiBpZl9weXRob24uYzoxMDk0IGlmX3RjbC5jOjE0MDcKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgInd5cmG/ZW5pYSB3ebOxY3pvbmUgcG9kY3phcyBrb21waWxhY2ppIgorCisjOiBpZl9weXRob24uYzoxMTA3Cittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAicHLzYmEgb2RuaWVzaWVuaWEgZG8gc2thc293YW5lZ28gYnVmb3JhIgorCisjOiBpZl9weXRob24uYzoxMTIyIGlmX3B5dGhvbi5jOjExNjMgaWZfcHl0aG9uLmM6MTIyNyBpZl90Y2wuYzoxMjE0Cittc2dpZCAibGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIgorbXNnc3RyICJudW1lciB3aWVyc3phIHBvemEgemFrcmVzZW0iCisKKyM6IGlmX3B5dGhvbi5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IgorbXNnc3RyICI8b2JpZWt0IGJ1Zm9yYSAoc2thc293YW55KSB3ICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxNDUzIGlmX3RjbC5jOjgzNgorbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICJuaWVwb3ByYXduYSBuYXp3YSB6YWuzYWRraSIKKworIzogaWZfcHl0aG9uLmM6MTczMworbXNnaWQgIm5vIHN1Y2ggYnVmZmVyIgorbXNnc3RyICJuaWUgbWEgdGFraWVnbyBidWZvcmEiCisKKyM6IGlmX3B5dGhvbi5jOjE4MjEKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICJwcvNiYSBvZG5pZXNpZW5pYSBkbyBza2Fzb3dhbmVnbyBva25hIgorCisjOiBpZl9weXRob24uYzoxODY2Cittc2dpZCAicmVhZG9ubHkgYXR0cmlidXRlIgorbXNnc3RyICJhdHJ5YnV0IHR5bGtvIGRvIG9kY3p5dHUiCisKKyM6IGlmX3B5dGhvbi5jOjE4NzkKK21zZ2lkICJjdXJzb3IgcG9zaXRpb24gb3V0c2lkZSBidWZmZXIiCittc2dzdHIgInBvenljamEga3Vyc29yYSBwb3phIGJ1Zm9yZW0iCisKKyM6IGlmX3B5dGhvbi5jOjE5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKGRlbGV0ZWQpIGF0ICUuOGxYPiIKK21zZ3N0ciAiPG9iaWVrdCBva25hIChza2Fzb3dhbnkpIHcgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxOTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjxvYmlla3Qgb2tuYSAobmllem5hbnkpIHcgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxOTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8b2tubyAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjIwNDYKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAibmllIG1hIHRha2llZ28gb2tuYSIKKworIzogaWZfcHl0aG9uLmM6MjMwNyBpZl9weXRob24uYzoyMzQxIGlmX3B5dGhvbi5jOjIzOTYgaWZfcHl0aG9uLmM6MjQ2NAorIzogaWZfcHl0aG9uLmM6MjU4NiBpZl9weXRob24uYzoyNjM4IGlmX3RjbC5jOjY4NCBpZl90Y2wuYzo3MjkgaWZfdGNsLmM6ODAzCisjOiBpZl90Y2wuYzo4NzMgaWZfdGNsLmM6MTk5OQorbXNnaWQgImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIm5pZSBtb2fqIHphY2hvd2HmIGluZm9ybWFjamkgY29mYW5pYSIKKworIzogaWZfcHl0aG9uLmM6MjMwOSBpZl9weXRob24uYzoyNDAzIGlmX3B5dGhvbi5jOjI0NzUKK21zZ2lkICJjYW5ub3QgZGVsZXRlIGxpbmUiCittc2dzdHIgIm5pZSBtb2fqIHNrYXNvd2HmIHdpZXJzemEiCisKKyM6IGlmX3B5dGhvbi5jOjIzNDYgaWZfcHl0aG9uLmM6MjQ5MSBpZl90Y2wuYzo2OTAgaWZfdGNsLmM6MjAyMQorbXNnaWQgImNhbm5vdCByZXBsYWNlIGxpbmUiCittc2dzdHIgIm5pZSBtb2fqIHphbWllbmnmIHdpZXJzemEiCisKKyM6IGlmX3B5dGhvbi5jOjI1MDkgaWZfcHl0aG9uLmM6MjU4OCBpZl9weXRob24uYzoyNjQ2Cittc2dpZCAiY2Fubm90IGluc2VydCBsaW5lIgorbXNnc3RyICJuaWUgbW9n6iB3cHJvd2FkemnmIHdpZXJzemEiCisKKyM6IGlmX3B5dGhvbi5jOjI3NTAKK21zZ2lkICJzdHJpbmcgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgImNpsWcgbmllIG1vv2UgemF3aWVyYeYgem5ha/N3IG5vd2VnbyB3aWVyc3phIgorCisjOiBpZl9ydWJ5LmM6NDIyCittc2dpZCAiRTI2NjogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFJ1YnkgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjM6IFByenlrcm8gbWksIHRhIGtvbWVuZGEgamVzdCB3ebOxY3pvbmEsIGJvIG5pZSBtb79uYSB6YbNhZG93YeYgIgorImJpYmxpb3Rla2kgUnVieS4iCisKKyM6IGlmX3J1YnkuYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIKK21zZ3N0ciAiRTI3MzogTmllem5hbnkgc3RhdHVzIGxvbmdqbXAgJWQiCisKKyM6IGlmX3NuaWZmLmM6NjcKK21zZ2lkICJUb2dnbGUgaW1wbGVtZW50YXRpb24vZGVmaW5pdGlvbiIKK21zZ3N0ciAiUHJ6ZbOxY3ogbWnqZHp5IGltcGxlbWVudGFjarEvb2tyZbZsZW5pZW0iCisKKyM6IGlmX3NuaWZmLmM6NjgKK21zZ2lkICJTaG93IGJhc2UgY2xhc3Mgb2YiCittc2dzdHIgIlBva2G/IGJheuoga2xhc3kiCisKKyM6IGlmX3NuaWZmLmM6NjkKK21zZ2lkICJTaG93IG92ZXJyaWRkZW4gbWVtYmVyIGZ1bmN0aW9uIgorbXNnc3RyICJQb2thvyBwcnplcGlzYW6xIGZ1bmtjauogY3qzb25rb3exIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICJQb2JpZXJhaiB6IHBsaWt1IgorCisjOiBpZl9zbmlmZi5jOjcxCittc2dpZCAiUmV0cmlldmUgZnJvbSBwcm9qZWN0IgorbXNnc3RyICJQb2JpZXJhaiB6IHByb2pla3R1IgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIlBvYmllcmFqIHogd3N6eXN0a2ljaCBwcm9qZWt083ciCisKKyM6IGlmX3NuaWZmLmM6NzQKK21zZ2lkICJSZXRyaWV2ZSIKK21zZ3N0ciAiUG9iaWVyeiIKKworIzogaWZfc25pZmYuYzo3NQorbXNnaWQgIlNob3cgc291cmNlIG9mIgorbXNnc3RyICJQb2thvyC8cvNks28gZGxhIgorCisjOiBpZl9zbmlmZi5jOjc2Cittc2dpZCAiRmluZCBzeW1ib2wiCittc2dzdHIgIlpuYWpkvCBzeW1ib2wiCisKKyM6IGlmX3NuaWZmLmM6NzcKK21zZ2lkICJCcm93c2UgY2xhc3MiCittc2dzdHIgIlByemVqcnp5aiBrbGFz6iIKKworIzogaWZfc25pZmYuYzo3OAorbXNnaWQgIlNob3cgY2xhc3MgaW4gaGllcmFyY2h5IgorbXNnc3RyICJQb2thvyBrbGFz6iB3IGhpZXJhcmNoaWkiCisKKyM6IGlmX3NuaWZmLmM6NzkKK21zZ2lkICJTaG93IGNsYXNzIGluIHJlc3RyaWN0ZWQgaGllcmFyY2h5IgorbXNnc3RyICJQb2thvyBrbGFz6iB3IG9ncmFuaWN6b25laiBoaWVyYXJjaGlpIgorCisjOiBpZl9zbmlmZi5jOjgwCittc2dpZCAiWHJlZiByZWZlcnMgdG8iCittc2dzdHIgIlhyZWYgb2Rub3NpIHNp6iBkbyIKKworIzogaWZfc25pZmYuYzo4MQorbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCittc2dzdHIgIlhyZWYgbWEgb2RuaWVzaWVuaWEgb2QiCisKKyM6IGlmX3NuaWZmLmM6ODIKK21zZ2lkICJYcmVmIGhhcyBhIgorbXNnc3RyICJYcmVmIG1hIgorCisjOiBpZl9zbmlmZi5jOjgzCittc2dpZCAiWHJlZiB1c2VkIGJ5IgorbXNnc3RyICJYcmVmIHW/eXRlIHByemV6IgorCisjOiBpZl9zbmlmZi5jOjg0Cittc2dpZCAiU2hvdyBkb2N1IG9mIgorbXNnc3RyICJQb2thvyBkb2t1bWVudGFjauogZGxhIgorCisjOiBpZl9zbmlmZi5jOjg1Cittc2dpZCAiR2VuZXJhdGUgZG9jdSBmb3IiCittc2dzdHIgIld5Z2VuZXJ1aiBkb2t1bWVudGFjauogZGxhIgorCisjOiBpZl9zbmlmZi5jOjk3Cittc2dpZCAiIgorIkNhbm5vdCBjb25uZWN0IHRvIFNOaUZGKy4gQ2hlY2sgZW52aXJvbm1lbnQgKHNuaWZmZW1hY3MgbXVzdCBiZSBmb3VuZCBpbiAiCisiJFBBVEgpLlxuIgorbXNnc3RyICIiCisiTmllIG1vZ+ogcG9ks7FjennmIGRvIFNOaUZGKy4gU3ByYXdkvCC2cm9kb3dpc2tvIChzbmlmZmVtYWNzIG11c2kgYnnmICIKKyJvZG5hbGV6aW9ueSB3ICRQQVRIKS5cbiIKKworIzogaWZfc25pZmYuYzo0MjUKK21zZ2lkICJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiRTI3NDogU25pZmY6IEKzsWQgcG9kY3phcyBjenl0YW5pYS4gUm96s7FjemVuaWUiCisKKyM6IGlmX3NuaWZmLmM6NTUzCittc2dpZCAiU05pRkYrIGlzIGN1cnJlbnRseSAiCittc2dzdHIgIlNOaUZGKyBqZXN0IG9iZWNuaWUgIgorCisjOiBpZl9zbmlmZi5jOjU1NQorbXNnaWQgIm5vdCAiCittc2dzdHIgIm5pZSAiCisKKyM6IGlmX3NuaWZmLmM6NTU2Cittc2dpZCAiY29ubmVjdGVkIgorbXNnc3RyICJwb2SzsWN6b255IgorCisjOiBpZl9zbmlmZi5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjc1OiBVbmtub3duIFNOaUZGKyByZXF1ZXN0OiAlcyIKK21zZ3N0ciAiRTI3NTogTmllem5hbmUgemFweXRhbmllIFNOaUZGKzogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IEKzsWQgdyB0cmFrY2llIHBvZLOxY3phbmlhIGRvIFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDA5Cittc2dpZCAiRTI3ODogU05pRkYrIG5vdCBjb25uZWN0ZWQiCittc2dzdHIgIkUyNzg6IFNOaUZGKyBuaWVwb2SzsWN6b255IgorCisjOiBpZl9zbmlmZi5jOjEwMTgKK21zZ2lkICJFMjc5OiBOb3QgYSBTTmlGRisgYnVmZmVyIgorbXNnc3RyICJFMjc5OiBOaWUgamVzdCBidWZvcmVtIFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDgzCittc2dpZCAiU25pZmY6IEVycm9yIGR1cmluZyB3cml0ZS4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJTbmlmZjogQrOxZCB3IHRyYWtjaWUgemFwaXN1LiBSb3qzsWN6b255IgorCisjOiBpZl90Y2wuYzo0MTgKK21zZ2lkICJpbnZhbGlkIGJ1ZmZlciBudW1iZXIiCittc2dzdHIgIm5pZXezYbZjaXd5IG51bWVyIGJ1Zm9yYSIKKworIzogaWZfdGNsLmM6NDY0IGlmX3RjbC5jOjkzMSBpZl90Y2wuYzoxMTEwCittc2dpZCAibm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAib2JlY25pZSBuaWUgemFpbXBsZW1lbnRvd2FubyIKKworIzogaWZfdGNsLmM6NTAxCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIm5pZXpuYW5hIG9wY2phIgorCisjLiA/Pz8KKyM6IGlmX3RjbC5jOjc3NAorbXNnaWQgImNhbm5vdCBzZXQgbGluZShzKSIKK21zZ3N0ciAibmllIG1vZ+ogdXN0YXdp5iB3aWVyc3phKHkpIgorCisjOiBpZl90Y2wuYzo4NDUKK21zZ2lkICJtYXJrIG5vdCBzZXQiCittc2dzdHIgInpha7NhZGthIG5pZSB1c3Rhd2lvbmEiCisKKyM6IGlmX3RjbC5jOjg1MSBpZl90Y2wuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdyAlZCBjb2x1bW4gJWQiCittc2dzdHIgIndpZXJzeiAlZCBrb2x1bW5hICVkIgorCisjOiBpZl90Y2wuYzo4ODEKK21zZ2lkICJjYW5ub3QgaW5zZXJ0L2FwcGVuZCBsaW5lIgorbXNnc3RyICJuaWUgbW9n6iB3cHJvd2FkemnmL2Rvs7FjennmIHdpZXJzemEiCisKKyM6IGlmX3RjbC5jOjEyNjgKK21zZ2lkICJ1bmtub3duIGZsYWc6ICIKK21zZ3N0ciAibmllem5hbmEgZmxhZ2E6ICIKKworIzogaWZfdGNsLmM6MTMzOAorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICJuaWV6bmFuZSB2aW1PcHRpb24iCisKKyM6IGlmX3RjbC5jOjE0MjMKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgInByemVyd2FuaWUga2xhd2lhdHVyeSIKKworIzogaWZfdGNsLmM6MTQyOAorbXNnaWQgInZpbSBlcnJvciIKK21zZ3N0ciAiYrOxZCB2aW1hIgorCisjOiBpZl90Y2wuYzoxNDcxCittc2dpZCAiY2Fubm90IGNyZWF0ZSBidWZmZXIvd2luZG93IGNvbW1hbmQ6IG9iamVjdCBpcyBiZWluZyBkZWxldGVkIgorbXNnc3RyICJuaWUgbW9n6iBzdHdvcnp55iBidWZvcmEvb2tuYSBrb21lbmR5OiBvYmlla3QgamVzdCBrYXNvd2FueSIKKworIzogaWZfdGNsLmM6MTU0NQorbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IGlzIGFscmVhZHkgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAiIgorIm5pZSBtb2fqIHphcmVqZXN0cm93YeYgd3N0ZWN6bmVnbyB3eXdvs2FuaWEga29tZW5keTogYnVmb3Ivb2tubyBqdb8gem9zdGGzYSAiCisic2thc293YW5hIgorCisjLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIzogaWZfdGNsLmM6MTU2MgorbXNnaWQgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgY29ycnVwdCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS4iCisib3JnIgorbXNnc3RyICIiCisiRTI4MDogVENMIEZBVEFMTlkgQqOhRDogcmVmbGlzdCB6ZXBzdXRhIT8gUHJvc3rqIHqzb7955iByYXBvcnQgbyB0eW0gbmEgdmltLSIKKyJkZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTU2MworbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIiIKKyJuaWUgbW9n6iB6YXJlamVzdHJvd2HmIHdzdGVjem5lZ28gd3l3b7NhbmlhIGtvbWVuZHk6IGJyYWsgb2RuaWVzaWVuaWEgZG8gIgorImJ1Zm9yYS9va25hIgorCisjOiBpZl90Y2wuYzoxNzI0Cittc2dpZCAiRTU3MTogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFRjbCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJQcnp5a3JvIG1pLCB0YSBrb21lbmRhIGplc3Qgd3mzsWN6b25hLCBibyBuaWUgbW+/bmEgemGzYWRvd2HmIGJpYmxpb3Rla2kgVGNsLiIKKworIzogaWZfdGNsLmM6MTg4NgorbXNnaWQgIkUyODE6IFRDTCBFUlJPUjogZXhpdCBjb2RlIGlzIG5vdCBpbnQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MTogQqOhRCBUQ0w6IGtvZCB6YWtv8WN6ZW5pb3d5IG5pZSBqZXN0IGNhs2tvd2l0eSE/IFByb3N66iB6s2+/eeYgcmFwb3J0ICIKKyJvIHR5bSBuYSB2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjIwMDcKK21zZ2lkICJjYW5ub3QgZ2V0IGxpbmUiCittc2dzdHIgIm5pZSBtb2fqIGRvc3Rh5iB3aWVyc3phIgorCisjOiBpZl94Y21kc3J2LmM6MjI1Cittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAiTmllIG1vZ+ogemFyZWplc3Ryb3dh5iBuYXp3eSBzZXJ3ZXJhIGtvbWVuZCIKKworIzogaWZfeGNtZHNydi5jOjQ3MworbXNnaWQgIkUyNDg6IEZhaWxlZCB0byBzZW5kIGNvbW1hbmQgdG8gdGhlIGRlc3RpbmF0aW9uIHByb2dyYW0iCittc2dzdHIgIkUyNDg6IFd5c7NhbmllIGtvbWVuZHkgZG8gcHJvZ3JhbXUgZG9jZWxvd2VnbyBuaWUgcG93aW9ks28gc2nqIgorCisjOiBpZl94Y21kc3J2LmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzM6IEludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICJFNTczOiBVv3l0byBuaWV3s2G2Y2l3ZWdvIGlkIHNlcndlcmE6ICVzIgorCisjOiBpZl94Y21kc3J2LmM6MTExMAorbXNnaWQgIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBpcyBiYWRseSBmb3JtZWQuICBEZWxldGVkISIKK21zZ3N0ciAiRTI1MTogd2NpZWxlbmlhIGluc3RhbmNqaSByZWplc3RydSBWaW1hIGplc3QgvGxlIHNmb3Jtb3dhbmUuICBTa2Fzb3dhbm8hIgorCisjOiBtYWluLmM6NjAKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiTmllem5hbmEgb3BjamEiCisKKyM6IG1haW4uYzo2MgorbXNnaWQgIlRvbyBtYW55IGVkaXQgYXJndW1lbnRzIgorbXNnc3RyICJaYnl0IHdpZWxlIGFyZ3VtZW5083ciCisKKyM6IG1haW4uYzo2NAorbXNnaWQgIkFyZ3VtZW50IG1pc3NpbmcgYWZ0ZXIiCittc2dzdHIgIkJyYWsgYXJndW1lbnR1IHBvIgorCisjOiBtYWluLmM6NjYKK21zZ2lkICJHYXJiYWdlIGFmdGVyIG9wdGlvbiIKK21zZ3N0ciAipm1pZWNpZSBwbyBvcGNqaSIKKworIzogbWFpbi5jOjY4Cittc2dpZCAiVG9vIG1hbnkgXCIrY29tbWFuZFwiLCBcIi1jIGNvbW1hbmRcIiBvciBcIi0tY21kIGNvbW1hbmRcIiBhcmd1bWVudHMiCittc2dzdHIgIlpieXQgd2llbGUgYXJndW1lbnTzdyBcIitrb21lbmRhXCIsIFwiLWMga29tZW5kYVwiIGx1YiBcIi0tY21kIGtvbWVuZGFcIiIKKworIzogbWFpbi5jOjcwCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBmb3IiCittc2dzdHIgIk5pZXezYbZjaXd5IGFyZ3VtZW50IGRsYSIKKworIzogbWFpbi5jOjQ2NgorbXNnaWQgIlRoaXMgVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgZGlmZiBmZWF0dXJlLiIKK21zZ3N0ciAiVGEgd2Vyc2phIFZpbWEgbmllIGJ5s2Egc2tvbXBpbG93YW5lZ28geiBvcGNqsSBy879uaWMgKGRpZmYpLiIKKworIzogbWFpbi5jOjkzMgorbXNnaWQgIkF0dGVtcHQgdG8gb3BlbiBzY3JpcHQgZmlsZSBhZ2FpbjogXCIiCittc2dzdHIgIlBy82JhIHBvbm93bmVnbyBvdHdvcnplbmlhIHBsaWt1IHNrcnlwdHU6IFwiIgorCisjOiBtYWluLmM6OTQxCittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICJOaWUgbW9n6iBvdHdvcnp55iBkbyBvZGN6eXR1OiBcIiIKKworIzogbWFpbi5jOjk4NQorbXNnaWQgIkNhbm5vdCBvcGVuIGZvciBzY3JpcHQgb3V0cHV0OiBcIiIKK21zZ3N0ciAiTmllIG1vZ+ogb3R3b3J6eeYgZGxhIHd5arZjaWEgc2tyeXB0dTogXCIiCisKKyM6IG1haW4uYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZpbGVzIHRvIGVkaXRcbiIKK21zZ3N0ciAiJWQgcGxpa/N3IGRvIGVkeWNqaVxuIgorCisjOiBtYWluLmM6MTIzMworbXNnaWQgIlZpbTogV2FybmluZzogT3V0cHV0IGlzIG5vdCB0byBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTogT1NUUlpFr0VOSUU6IFd5arZjaWUgbmllIGplc3QgdGVybWluYWxlbVxuIgorCisjOiBtYWluLmM6MTIzNQorbXNnaWQgIlZpbTogV2FybmluZzogSW5wdXQgaXMgbm90IGZyb20gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IE9TVFJaRa9FTklFOiBXZWq2Y2llIG5pZSBwb2Nob2R6aSB6IHRlcm1pbmFsYVxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjEyOTcKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJsaW5pYSBwb2xlY2XxIHByZS12aW1yYyIKKworIzogbWFpbi5jOjEzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IE5pZSBtb2fqIGN6eXRh5iB6IFwiJXNcIiIKKworIzogbWFpbi5jOjI0MTEKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkRhbHN6ZSBpbmZvcm1hY2plIHBvcHJ6ZXo6IFwidmltIC1oXCJcbiIKKworIzogbWFpbi5jOjI0NDQKK21zZ2lkICJbZmlsZSAuLl0gICAgICAgZWRpdCBzcGVjaWZpZWQgZmlsZShzKSIKK21zZ3N0ciAiW3BsaWsgLi5dICAgICAgIGVkeXR1aiB6YWRhbmUgcGxpa2kiCisKKyM6IG1haW4uYzoyNDQ1Cittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAgY3p5dGFqIHRla3N0IHplIHN0ZGluIgorCisjOiBtYWluLmM6MjQ0NgorbXNnaWQgIi10IHRhZyAgICAgICAgICBlZGl0IGZpbGUgd2hlcmUgdGFnIGlzIGRlZmluZWQiCittc2dzdHIgIi10IHpuYWN6bmlrICAgZWR5dHVqIHBsaWssIHcga3TzcnltIGRhbnkgem5hY3puaWsgamVzdCB6ZGVmaW5pb3dhbnkiCisKKyM6IG1haW4uYzoyNDQ4Cittc2dpZCAiLXEgW2Vycm9yZmlsZV0gIGVkaXQgZmlsZSB3aXRoIGZpcnN0IGVycm9yIgorbXNnc3RyICItcSBbZXJyb3JmaWxlXSAgZWR5dHVqIHBsaWssIHphd2llcmFqsWN5IHBpZXJ3c3p5IGKzsWQiCisKKyM6IG1haW4uYzoyNDU3Cittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorInW/eWNpZToiCisKKyM6IG1haW4uYzoyNDYwCittc2dpZCAiIHZpbSBbYXJndW1lbnRzXSAiCittc2dzdHIgIiB2aW0gW2FyZ3VtZW50eV0iCisKKyM6IG1haW4uYzoyNDY0Cittc2dpZCAiIgorIlxuIgorIiAgIG9yOiIKK21zZ3N0ciAiIgorIlxuIgorIiAgIGx1YjoiCisKKyM6IG1haW4uYzoyNDY3Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50czpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50eTpcbiIKKworIzogbWFpbi5jOjI0NjgKK21zZ2lkICItLVx0XHRcdE9ubHkgZmlsZSBuYW1lcyBhZnRlciB0aGlzIgorbXNnc3RyICItLVx0XHRcdFR5bGtvIG5hend5IHBsaWvzdyBwbyB0eW0iCisKKyM6IG1haW4uYzoyNDcwCittc2dpZCAiLS1saXRlcmFsXHRcdERvbid0IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIi0tbGl0ZXJhbFx0XHROaWUgcm96d2lqYWogem5ha/N3IHNwZWNqYWxueWNoIgorCisjOiBtYWluLmM6MjQ3MworbXNnaWQgIi1yZWdpc3Rlclx0XHRSZWdpc3RlciB0aGlzIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXJlZ2lzdGVyXHRcdFphcmVqZXN0cnVqIHRlZ28gZ3ZpbWEgdyBPTEUiCisKKyM6IG1haW4uYzoyNDc0Cittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi11bnJlZ2lzdGVyXHRcdFd5cmVqZXN0cnVqIGd2aW1hIHogT0xFIgorCisjOiBtYWluLmM6MjQ3NworbXNnaWQgIi1nXHRcdFx0UnVuIHVzaW5nIEdVSSAobGlrZSBcImd2aW1cIikiCittc2dzdHIgIi1nXHRcdFx0U3RhcnR1aiB3IEdVSSAodGFrIGphayBcImd2aW1cIikiCisKKyM6IG1haW4uYzoyNDc4Cittc2dpZCAiLWYgIG9yICAtLW5vZm9ya1x0Rm9yZWdyb3VuZDogRG9uJ3QgZm9yayB3aGVuIHN0YXJ0aW5nIEdVSSIKK21zZ3N0ciAiLWYgIGx1YiAtLW5vZm9ya1x0UGllcndzenkgcGxhbjogTmllIHd5ZHppZWxhaiBwcnp5IG9kcGFsYW5pdSBHVUkiCisKKyM6IG1haW4uYzoyNDgwCittc2dpZCAiLXZcdFx0XHRWaSBtb2RlIChsaWtlIFwidmlcIikiCittc2dzdHIgIi12XHRcdFx0VHJ5YiB2aSAoamFrIFwidmlcIikiCisKKyM6IG1haW4uYzoyNDgxCittc2dpZCAiLWVcdFx0XHRFeCBtb2RlIChsaWtlIFwiZXhcIikiCittc2dzdHIgIi1lXHRcdFx0VHJ5YiBleCAoamFrIFwiZXhcIikiCisKKyM6IG1haW4uYzoyNDgyCittc2dpZCAiLXNcdFx0XHRTaWxlbnQgKGJhdGNoKSBtb2RlIChvbmx5IGZvciBcImV4XCIpIgorbXNnc3RyICItc1x0XHRcdENpY2h5IHRyeWIgKHSzYSkgKHR5bGtvIGRsYSBcImV4XCIpIgorCisjOiBtYWluLmM6MjQ4NAorbXNnaWQgIi1kXHRcdFx0RGlmZiBtb2RlIChsaWtlIFwidmltZGlmZlwiKSIKK21zZ3N0ciAiLWRcdFx0XHRUcnliIHLzv25pYyAoamFrIFwidmltZGlmZlwiKSIKKworIzogbWFpbi5jOjI0ODYKK21zZ2lkICIteVx0XHRcdEVhc3kgbW9kZSAobGlrZSBcImV2aW1cIiwgbW9kZWxlc3MpIgorbXNnc3RyICIteVx0XHRcdFRyeWIgs2F0d3kgKGphayBcImV2aW1cIiwgYmV6IHRyeWLzdykiCisKKyM6IG1haW4uYzoyNDg3Cittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHRUcnliIHd5s7Fjem5pZSBkbyBvZGN6eXR1IChqYWsgXCJ2aWV3XCIpIgorCisjOiBtYWluLmM6MjQ4OAorbXNnaWQgIi1aXHRcdFx0UmVzdHJpY3RlZCBtb2RlIChsaWtlIFwicnZpbVwiKSIKK21zZ3N0ciAiLVpcdFx0XHRUcnliIG9ncmFuaWN6ZW5pYSAoamFrIFwicnZpbVwiKSIKKworIzogbWFpbi5jOjI0ODkKK21zZ2lkICItbVx0XHRcdE1vZGlmaWNhdGlvbnMgKHdyaXRpbmcgZmlsZXMpIG5vdCBhbGxvd2VkIgorbXNnc3RyICItbVx0XHRcdE1vZHlmaWthY2plICh6YXBpc3l3YW5pZSBwbGlr83cpIG5pZWRvendvbG9uZSIKKworIzogbWFpbi5jOjI0OTAKK21zZ2lkICItTVx0XHRcdE1vZGlmaWNhdGlvbnMgaW4gdGV4dCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLU1cdFx0XHRaYWtheiBtb2R5ZmlrYWNqaSB0ZWtzdHUiCisKKyM6IG1haW4uYzoyNDkxCittc2dpZCAiLWJcdFx0XHRCaW5hcnkgbW9kZSIKK21zZ3N0ciAiLWJcdFx0XHRUcnliIGJpbmFybnkiCisKKyM6IG1haW4uYzoyNDkzCittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0VHJ5YiBsaXNwIgorCisjOiBtYWluLmM6MjQ5NQorbXNnaWQgIi1DXHRcdFx0Q29tcGF0aWJsZSB3aXRoIFZpOiAnY29tcGF0aWJsZSciCittc2dzdHIgIi1DXHRcdFx0QrFkvCB6Z29kbnkgeiBWaTogJ2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjQ5NgorbXNnaWQgIi1OXHRcdFx0Tm90IGZ1bGx5IFZpIGNvbXBhdGlibGU6ICdub2NvbXBhdGlibGUnIgorbXNnc3RyICItTlx0XHRcdEKxZLwgbmllenVwZbNuaWUgemdvZG55IHogVmk6ICdub2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjQ5NworbXNnaWQgIi1WW05dXHRcdFZlcmJvc2UgbGV2ZWwiCittc2dzdHIgIi1WW05dXHRcdFN0b3BpZfEgZ2FkYXRsaXdvtmNpIgorCisjOiBtYWluLmM6MjQ5OAorbXNnaWQgIi1EXHRcdFx0RGVidWdnaW5nIG1vZGUiCittc2dzdHIgIi1EXHRcdFx0VHJ5YiBvZHBsdXNrd2lhbmlhIgorCisjOiBtYWluLmM6MjQ5OQorbXNnaWQgIi1uXHRcdFx0Tm8gc3dhcCBmaWxlLCB1c2UgbWVtb3J5IG9ubHkiCittc2dzdHIgIi1uXHRcdFx0WmFtaWFzdCBwbGlrdSB3eW1pYW55LCB1v3l3YWogdHlsa28gcGFtaepjaSIKKworIzogbWFpbi5jOjI1MDAKK21zZ2lkICItclx0XHRcdExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdCIKK21zZ3N0ciAiLXJcdFx0XHRXeWxpY3ogcGxpa2kgd3ltaWFueSBpIHpha2/xY3oiCisKKyM6IG1haW4uYzoyNTAxCittc2dpZCAiLXIgKHdpdGggZmlsZSBuYW1lKVx0UmVjb3ZlciBjcmFzaGVkIHNlc3Npb24iCittc2dzdHIgIi1yICh6IG5henexIHBsaWt1KVx0T2R0d/NyeiB6YbNhbWFusSBzZXNq6iIKKworIzogbWFpbi5jOjI1MDIKK21zZ2lkICItTFx0XHRcdFNhbWUgYXMgLXIiCittc2dzdHIgIi1MXHRcdFx0VG+/c2FtZSB6IC1yIgorCisjOiBtYWluLmM6MjUwNAorbXNnaWQgIi1mXHRcdFx0RG9uJ3QgdXNlIG5ld2NsaSB0byBvcGVuIHdpbmRvdyIKK21zZ3N0ciAiLWZcdFx0XHROaWUgc3Rvc3VqIG5ld2NsaSBkbyBvdHdpZXJhbmlhIG9raWVuIgorCisjOiBtYWluLmM6MjUwNQorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPGRldmljZT5cdFx0Vb95d2FqIDxkZXZpY2U+IGRvIEkvTyIKKworIzogbWFpbi5jOjI1MDgKK21zZ2lkICItQVx0XHRcdHN0YXJ0IGluIEFyYWJpYyBtb2RlIgorbXNnc3RyICItQVx0XHRcdHJvenBvY3puaWogdyB0cnliaWUgYXJhYnNraW0iCisKKyM6IG1haW4uYzoyNTExCittc2dpZCAiLUhcdFx0XHRTdGFydCBpbiBIZWJyZXcgbW9kZSIKK21zZ3N0ciAiLUhcdFx0XHRyb3pwb2N6bmlqIHcgdHJ5YmllIGhlYnJhanNraW0iCisKKyM6IG1haW4uYzoyNTE0Cittc2dpZCAiLUZcdFx0XHRTdGFydCBpbiBGYXJzaSBtb2RlIgorbXNnc3RyICItRlx0XHRcdHJvenBvY3puaWogdyB0cnliaWUgZmFyc2kiCisKKyM6IG1haW4uYzoyNTE2Cittc2dpZCAiLVQgPHRlcm1pbmFsPlx0U2V0IHRlcm1pbmFsIHR5cGUgdG8gPHRlcm1pbmFsPiIKK21zZ3N0ciAiLVQgPHRlcm1pbmFsPlx0VXN0YXcgdHlwIHRlcm1pbmFsYSBuYSA8dGVybWluYWw+IgorCisjOiBtYWluLmM6MjUxNworbXNnaWQgIi11IDx2aW1yYz5cdFx0VXNlIDx2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLnZpbXJjIgorbXNnc3RyICItdSA8dmltcmM+XHRcdFW/eWogPHZpbXJjPiB6YW1pYXN0IGpha2llZ29rb2x3aWVrIC52aW1yYyIKKworIzogbWFpbi5jOjI1MTkKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0Vb95aiA8Z3ZpbXJjPiB6YW1pYXN0IGpha2llZ29rb2x3aWVrIC5ndmltcmMiCisKKyM6IG1haW4uYzoyNTIxCittc2dpZCAiLS1ub3BsdWdpblx0XHREb24ndCBsb2FkIHBsdWdpbiBzY3JpcHRzIgorbXNnc3RyICItLW5vcGx1Z2luXHRcdE5pZSCzYWR1aiBza3J5cHTzdyB3dHljemVrIgorCisjOiBtYWluLmM6MjUyMgorbXNnaWQgIi1vW05dXHRcdE9wZW4gTiB3aW5kb3dzIChkZWZhdWx0OiBvbmUgZm9yIGVhY2ggZmlsZSkiCittc2dzdHIgIi1vW05dXHRcdE90d/NyeiBOIG9raWVuIChkb215tmxuaWU6IHBvIGplZG55bSBkbGEga2G/ZGVnbyBwbGlrdSkiCisKKyM6IG1haW4uYzoyNTIzCittc2dpZCAiLU9bTl1cdFx0TGlrZSAtbyBidXQgc3BsaXQgdmVydGljYWxseSIKK21zZ3N0ciAiLU9bTl1cdFx0dGFrIHNhbW8gamFrIC1vIHR5bGtvIGR6aWVsIG9rbm8gcGlvbm93byIKKworIzogbWFpbi5jOjI1MjQKK21zZ2lkICIrXHRcdFx0U3RhcnQgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIitcdFx0XHRaYWN6bmlqIG5hIGtv8WN1IHBsaWt1IgorCisjOiBtYWluLmM6MjUyNQorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8bG51bT5cdFx0WmFjem5paiB3IHdpZXJzenUgPGxudW0+IgorCisjOiBtYWluLmM6MjUyNworbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIiIKKyItY21kIDxjb21tYW5kPlx0XHRXeWtvbmFqIGtvbWVuZOogPGNvbW1hbmQ+IHByemVkIHphs2Fkb3dhbmllbSAiCisiamFraWVnb2tvbHdpZWsgcGxpa3UgdmltcmMiCisKKyM6IG1haW4uYzoyNTI5Cittc2dpZCAiLWMgPGNvbW1hbmQ+XHRcdEV4ZWN1dGUgPGNvbW1hbmQ+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1jIDxjb21tYW5kPlx0XHRXeWtvbmFqIGtvbWVuZOogPGNvbW1hbmQ+IHBvIHphs2Fkb3dhbml1IHBpZXJ3c3plZ28gcGxpa3UiCisKKyM6IG1haW4uYzoyNTMwCittc2dpZCAiLVMgPHNlc3Npb24+XHRcdFNvdXJjZSBmaWxlIDxzZXNzaW9uPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItUyA8c2VzamE+XHRcdFdjenl0YWogcGxpayA8c2VzamE+IHBvIHphs2Fkb3dhbml1IHBpZXJ3c3plZ28gcGxpa3UiCisKKyM6IG1haW4uYzoyNTMxCittc2dpZCAiLXMgPHNjcmlwdGluPlx0UmVhZCBOb3JtYWwgbW9kZSBjb21tYW5kcyBmcm9tIGZpbGUgPHNjcmlwdGluPiIKK21zZ3N0ciAiLXMgPHNjcmlwdGluPlx0V2N6eXR1aiBrb21lbmR5IHRyeWJ1IG5vcm1hbG5lZ28geiBwbGlrdSA8c2NyaXB0aW4+IgorCisjOiBtYWluLmM6MjUzMgorbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDxzY3JpcHRvdXQ+XHREb7OxY3ogd3N6eXN0a2llIHdwcm93YWR6YW5lIGtvbWVuZHkgZG8gcGxpa3UgPHNjcmlwdG91dD4iCisKKyM6IG1haW4uYzoyNTMzCittc2dpZCAiLVcgPHNjcmlwdG91dD5cdFdyaXRlIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItVyA8c2NyaXB0b3V0Plx0WmFwaXN1aiB3c3p5c3RraWUgd3Byb3dhZHphbmUga29tZW5keSBkbyBwbGlrdSA8c2NyaXB0b3V0PiIKKworIzogbWFpbi5jOjI1MzUKK21zZ2lkICIteFx0XHRcdEVkaXQgZW5jcnlwdGVkIGZpbGVzIgorbXNnc3RyICIteFx0XHRcdEVkeXR1aiB6YWtvZG93YW5lIHBsaWtpIgorCisjOiBtYWluLmM6MjUzOQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0Q29ubmVjdCB2aW0gdG8gdGhpcyBwYXJ0aWN1bGFyIFgtc2VydmVyIgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdFBvZLOxY3ogdmltYSB0byBkYW5lZ28gWC1zZXJ3ZXJhIgorCisjOiBtYWluLmM6MjU0MQorbXNnaWQgIi1YXHRcdFx0RG8gbm90IGNvbm5lY3QgdG8gWCBzZXJ2ZXIiCittc2dzdHIgIi1YXHRcdFx0TmllILOxY3ogeiBzZXJ3ZXJlbSBYIgorCisjOiBtYWluLmM6MjU0NAorbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgaWYgcG9zc2libGUiCittc2dzdHIgIi0tcmVtb3RlIDxwbGlraT5cdEVkeXR1aiBwbGlraSB3IHNlcndlcnplIFZpbWEgamW2bGkgbW+/bGl3ZSIKKworIzogbWFpbi5jOjI1NDUKK21zZ2lkICItLXJlbW90ZS1zaWxlbnQgPGZpbGVzPiAgU2FtZSwgZG9uJ3QgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm8gc2VydmVyIgorbXNnc3RyICItLXJlbW90ZS1zaWxlbnQgPHBsaWtpPiBUbyBzYW1vLCBuaWUgbmFyemVrYWogamW2bGkgbmllIG1hIHNlcndlcmEiCisKKyM6IG1haW4uYzoyNTQ2Cittc2dpZCAiLS1yZW1vdGUtd2FpdCA8ZmlsZXM+ICBBcyAtLXJlbW90ZSBidXQgd2FpdCBmb3IgZmlsZXMgdG8gaGF2ZSBiZWVuIGVkaXRlZCIKK21zZ3N0ciAiLS1yZW1vdGUtd2FpdCA8cGxpa2k+XHRUYWsgamFrIC0tcmVtb3RlLCBsZWN6IGN6ZWthaiBuYSBwbGlraSBwcnplZCBlZHljarEiCisKKyM6IG1haW4uYzoyNTQ3Cittc2dpZCAiLS1yZW1vdGUtd2FpdC1zaWxlbnQgPGZpbGVzPiAgU2FtZSwgZG9uJ3QgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm8gc2VydmVyIgorbXNnc3RyICItLXJlbW90ZS13YWl0LXNpbGVudCA8cGxpa2k+ICBUbyBzYW1vLCBuaWUgbmFyemVrYWogamW2bGkgbmllIG1hIHNlcndlcmEiCisKKyM6IG1haW4uYzoyNTQ4Cittc2dpZCAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFNlbmQgPGtleXM+IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUtc2VuZCA8a2xhd2lzemU+XHRXebZsaWogPGtsYXdpc3plPiBkbyBzZXJ3ZXJhIFZpbWEgaSB6YWtv8WN6IgorCisjOiBtYWluLmM6MjU0OQorbXNnaWQgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWF0ZSA8ZXhwcj4gaW4gYSBWaW0gc2VydmVyIGFuZCBwcmludCByZXN1bHQiCittc2dzdHIgIi0tcmVtb3RlLWV4cHIgPHd5cj5cdFd5a29uYWogPHd5cmG/ZW5pZT4gdyBzZXJ3ZXJ6ZSBpIHd5cGlzeiB3eW5payIKKworIzogbWFpbi5jOjI1NTAKK21zZ2lkICItLXNlcnZlcmxpc3RcdFx0TGlzdCBhdmFpbGFibGUgVmltIHNlcnZlciBuYW1lcyBhbmQgZXhpdCIKK21zZ3N0ciAiLS1zZXJ2ZXJsaXN0XHRcdFd5bWll8SBuYXp3eSBkb3N06nBueWNoIHNlcndlcvN3IFZpbWEgaSB6YWtv8WN6IgorCisjOiBtYWluLmM6MjU1MQorbXNnaWQgIi0tc2VydmVybmFtZSA8bmFtZT5cdFNlbmQgdG8vYmVjb21lIHRoZSBWaW0gc2VydmVyIDxuYW1lPiIKK21zZ3N0ciAiLS1zZXJ2ZXJuYW1lIDxuYXp3YT5cdFx0T2RzebNhaiBkby9zdGHxIHNp6iBzZXJ3ZXJlbSBWaW0gPG5hendhPiIKKworIzogbWFpbi5jOjI1NTQKK21zZ2lkICItaSA8dmltaW5mbz5cdFx0VXNlIDx2aW1pbmZvPiBpbnN0ZWFkIG9mIC52aW1pbmZvIgorbXNnc3RyICItaSA8dmltaW5mbz5cdFx0Vb95d2FqIDx2aW1pbmZvPiB6YW1pYXN0IC52aW1pbmZvIgorCisjOiBtYWluLmM6MjU1NgorbXNnaWQgIi1oICBvciAgLS1oZWxwXHRQcmludCBIZWxwICh0aGlzIG1lc3NhZ2UpIGFuZCBleGl0IgorbXNnc3RyICItaCAgbHViICAtLWhlbHBcdHd5tndpZXRsIFBvbW9jIChjenlsaSB06iB3aWFkb21vtuYpIGkgemFrb/FjeiIKKworIzogbWFpbi5jOjI1NTcKK21zZ2lkICItLXZlcnNpb25cdFx0UHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKK21zZ3N0ciAiLS12ZXJzaW9uXHRcdHd5tndpZXRsIGluZm9ybWFjauogbyB3ZXJzamkgaSB6YWtv8WN6IgorCisjOiBtYWluLmM6MjU2MQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChNb3RpZiB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ3VtZW50eSByb3pwb3puYXdhbmUgcHJ6ZXogZ3ZpbSAod2Vyc2phIE1vdGlmKTpcbiIKKworIzogbWFpbi5jOjI1NjUKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAobmVYdGF3IHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnR5IHJvenBvem5hd2FuZSBwcnpleiBndmltICh3ZXJzamEgbmVYdGF3KTpcbiIKKworIzogbWFpbi5jOjI1NjcKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoQXRoZW5hIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnR5IHJvenBvem5hd2FuZSBwcnpleiBndmltICh3ZXJzamEgQXRoZW5hKTpcbiIKKworIzogbWFpbi5jOjI1NzEKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdFphs2FkdWogdmltIG5hIDxkaXNwbGF5PiIKKworIzogbWFpbi5jOjI1NzIKK21zZ2lkICItaWNvbmljXHRcdFN0YXJ0IHZpbSBpY29uaWZpZWQiCittc2dzdHIgIi1pY29uaWNcdFx0WmFjem5paiBWaW0gamFrbyBpa29u6iIKKworIzogbWFpbi5jOjI1NzQKK21zZ2lkICItbmFtZSA8bmFtZT5cdFx0VXNlIHJlc291cmNlIGFzIGlmIHZpbSB3YXMgPG5hbWU+IgorbXNnc3RyICItbmFtZSA8bmF6d2E+XHRcdFW/eXdhaiB6YXNvYvN3IHRhayBqYWsgYnkgVmltIGJ5syA8bmF6d2E+IgorCisjOiBtYWluLmM6MjU3NQorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgKE5pZXphaW1wbGVtZW50b3dhbmUpXG4iCisKKyM6IG1haW4uYzoyNTc3Cittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8a29sb3I+XHRVv3l3YWogPGtvbG9yPiBkbGEgdLNhIChy83duaWW/OiAtYmcpIgorCisjOiBtYWluLmM6MjU3OAorbXNnaWQgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZnKSIKK21zZ3N0ciAiLWZvcmVncm91bmQgPGtvbG9yPlx0Vb95d2FqIDxrb2xvcj4gZGxhIG5vcm1hbG5lZ28gdGVrc3R1IChy83duaWW/OiAtZmcpIgorCisjOiBtYWluLmM6MjU3OSBtYWluLmM6MjU5OQorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPGZvbnQ+XHRcdFW/eXdhaiA8Zm9udD4gZGxhIG5vcm1hbG5lZ28gdGVrc3R1IChy83duaWW/OiAtZm4pIgorCisjOiBtYWluLmM6MjU4MAorbXNnaWQgIi1ib2xkZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGJvbGQgdGV4dCIKK21zZ3N0ciAiLWJvbGRmb250IDxmb250Plx0Vb95d2FqIDxmb250PiBkbGEgd3l0s3VzemN6b25lZ28gdGVrc3R1IgorCisjOiBtYWluLmM6MjU4MQorbXNnaWQgIi1pdGFsaWNmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgaXRhbGljIHRleHQiCittc2dzdHIgIi1pdGFsaWNmb250IDxmb250Plx0Vb95d2FqIDxmb250PiBkbGEgcG9jaHmzZWdvIgorCisjOiBtYWluLmM6MjU4MiBtYWluLmM6MjYwMAorbXNnaWQgIi1nZW9tZXRyeSA8Z2VvbT5cdFVzZSA8Z2VvbT4gZm9yIGluaXRpYWwgZ2VvbWV0cnkgKGFsc286IC1nZW9tKSIKK21zZ3N0ciAiLWdlb21ldHJ5IDxnZW9tPlx0Vb95d2FqIDxnZW9tPiBkbGEgcG9jerF0a293eWNoIHJvem1pYXLzdyAocvN3bmllvzogLWdlb20pIgorCisjOiBtYWluLmM6MjU4MworbXNnaWQgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHRVc2UgYSBib3JkZXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLWJ3KSIKK21zZ3N0ciAiLWJvcmRlcndpZHRoIDxzemVyPlx0Vb95aiByYW1raSBvIGdydWJvtmNpIDxzemVyPiAocvN3bmllvzogLWJ3KSIKKworIzogbWFpbi5jOjI1ODQKK21zZ2lkICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgVXNlIGEgc2Nyb2xsYmFyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1zdykiCittc2dzdHIgIi1zY3JvbGxiYXJ3aWR0aCA8c3plcj4gIFW/eXdhaiBwcnpld2lqYWN6YSBvIHN6ZXJva2+2Y2kgPHN6ZXI+IChy83duaWW/OiAtc3cpIgorCisjOiBtYWluLmM6MjU4NgorbXNnaWQgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHRVc2UgYSBtZW51IGJhciBoZWlnaHQgb2YgPGhlaWdodD4gKGFsc286IC1taCkiCittc2dzdHIgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHRTdG9zdWogYmVsa+ogbWVudSBvIHd5c29rb7ZjaSA8aGVpZ2h0PiAocvN3bmllvzogLW1oKSIKKworIzogbWFpbi5jOjI1ODggbWFpbi5jOjI2MDEKK21zZ2lkICItcmV2ZXJzZVx0XHRVc2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogLXJ2KSIKK21zZ3N0ciAiLXJldmVyc2VcdFx0U3Rvc3VqIG5lZ2F0eXcga29sb3LzdyAocvN3bmllvzogLXJ2KSIKKworIzogbWFpbi5jOjI1ODkKK21zZ2lkICIrcmV2ZXJzZVx0XHREb24ndCB1c2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogK3J2KSIKK21zZ3N0ciAiK3JldmVyc2VcdFx0TmllIHN0b3N1aiBuZWdhdHl3dSBrb2xvcvN3IChy83duaWW/OiArcnYpIgorCisjOiBtYWluLmM6MjU5MAorbXNnaWQgIi14cm0gPHJlc291cmNlPlx0U2V0IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UiCittc2dzdHIgIi14cm0gPHJlc291cmNlPlx0VXN0YXcgb2tyZbZsb255IHphc/NiIgorCisjOiBtYWluLmM6MjU5MworbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChSSVNDIE9TIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnR5IHJvenBvem5hd2FuZSBwcnpleiBndmltICh3ZXJzamEgUklTQyBPUyk6XG4iCisKKyM6IG1haW4uYzoyNTk0Cittc2dpZCAiLS1jb2x1bW5zIDxudW1iZXI+XHRJbml0aWFsIHdpZHRoIG9mIHdpbmRvdyBpbiBjb2x1bW5zIgorbXNnc3RyICItLWNvbHVtbnMgPG51bWJlcj5cdFBvY3qxdGtvd2Egc3plcm9rb7bmIG9rbmEgdyBrb2x1bW5hY2giCisKKyM6IG1haW4uYzoyNTk1Cittc2dpZCAiLS1yb3dzIDxudW1iZXI+XHRJbml0aWFsIGhlaWdodCBvZiB3aW5kb3cgaW4gcm93cyIKK21zZ3N0ciAiLS1yb3dzIDxudW1iZXI+XHRQb2N6sXRrb3dhIHd5c29rb7bmIG9rbmEgdyB3aWVyc3phY2giCisKKyM6IG1haW4uYzoyNTk4Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEdUSysgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudHkgcm96cG96bmF3YW5lIHByemV6IGd2aW0gKHdlcnNqYSBHVEsrKTpcbiIKKworIzogbWFpbi5jOjI2MDIKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IChhbHNvOiAtLWRpc3BsYXkpIgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdFphc3RhcnR1aiB2aW0gbmEgPGRpc3BsYXk+IChy83duaWW/OiAtLWRpc3BsYXkpIgorCisjOiBtYWluLmM6MjYwNAorbXNnaWQgIi0tcm9sZSA8cm9sZT5cdFNldCBhIHVuaXF1ZSByb2xlIHRvIGlkZW50aWZ5IHRoZSBtYWluIHdpbmRvdyIKK21zZ3N0ciAiLS1yb2xlIDxyb2xlPlx0VXN0YXcgdW5pa2F0b3exIHJvbOogZG8gaWRlbnR5ZmlrYWNqaSBns/N3bmVnbyBva25hIgorCisjOiBtYWluLmM6MjYwNgorbXNnaWQgIi0tc29ja2V0aWQgPHhpZD5cdE9wZW4gVmltIGluc2lkZSBhbm90aGVyIEdUSyB3aWRnZXQiCittc2dzdHIgIi0tc29ja2V0aWQgPHhpZD5cdE90d/NyeiBWaW0gd2V3brF0cnogaW5uZWdvIHdpZGdldHUgR1RLIgorCisjOiBtYWluLmM6MjYwOQorbXNnaWQgIi1QIDxwYXJlbnQgdGl0bGU+XHRPcGVuIFZpbSBpbnNpZGUgcGFyZW50IGFwcGxpY2F0aW9uIgorbXNnc3RyICItUCA8dHl0dbMgcm9kemljYT5cdE90d/NyeiBWaW1hIHdld26xdHJ6IHJvZHppY2llbHNraWVqIGFwbGlrYWNqaSIKKworIzogbWFpbi5jOjI4NDcKK21zZ2lkICJObyBkaXNwbGF5IgorbXNnc3RyICJCcmFrIGRpc3BsYXkiCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyODYyCittc2dpZCAiOiBTZW5kIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiBXeXOzYW5pZSBuaWUgcG93aW9ks28gc2nqLlxuIgorCisjLiBMZXQgdmltIHN0YXJ0IG5vcm1hbGx5LgorIzogbWFpbi5jOjI4NjgKK21zZ2lkICI6IFNlbmQgZmFpbGVkLiBUcnlpbmcgdG8gZXhlY3V0ZSBsb2NhbGx5XG4iCittc2dzdHIgIjogV3lzs2FuaWUgbmllIHBvd2lvZLNvIHNp6i4gUHLzYnVq6iB3eWtvbmHmIG5hIG1pZWpzY3VcbiIKKworIzogbWFpbi5jOjI5MDYgbWFpbi5jOjI5MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgb2YgJWQgZWRpdGVkIgorbXNnc3RyICJvdHdvcnpvbm8gJWQgeiAlZCIKKworIzogbWFpbi5jOjI5NDkKK21zZ2lkICJObyBkaXNwbGF5OiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICJCcmFrIHRlcm1pbmFsYTogV3lzs2FuaWUgd3lyYb9lbmlhIG5pZSBwb3dpb2SzbyBzaeouXG4iCisKKyM6IG1haW4uYzoyOTYxCittc2dpZCAiOiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICI6IFd5c7NhbmllIHd5cmG/ZW5pYSBuaWUgcG93aW9ks28gc2nqLlxuIgorCisjOiBtYXJrLmM6NzA5Cittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICJCcmFrIHpha7NhZGVrIgorCisjOiBtYXJrLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4Mzogr2FkbmEgemFrs2Fka2EgbmllIHBhc3VqZSBkbyBcIiVzXCIiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjcyMgorbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyJ6YWuzLiB3aWVyc3oga29sIHBsaWsvdGVrc3QiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjc2MAorbXNnaWQgIiIKKyJcbiIKKyIganVtcCBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiIHNrb2sgd2llcnN6IGtvbCBwbGlrL3Rla3N0IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo4MDUKK21zZ2lkICIiCisiXG4iCisiY2hhbmdlIGxpbmUgIGNvbCB0ZXh0IgorbXNnc3RyICIiCisiXG4iCisiem1pZfEgd3Jzei4ga29sIHRla3N0IgorCisjOiBtYXJrLmM6MTI4MQorbXNnaWQgIiIKKyJcbiIKKyIjIEZpbGUgbWFya3M6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIFpha7NhZGtpIHcgcGxpa2FjaDpcbiIKKworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMzE2Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIExpc3RhIG9kbmllc2ll8SAocG9jerF3c3p5IG9kIG5ham5vd3N6eWNoKTpcbiIKKworIzogbWFyay5jOjE0MTIKK21zZ2lkICIiCisiXG4iCisiIyBIaXN0b3J5IG9mIG1hcmtzIHdpdGhpbiBmaWxlcyAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIEhpc3RvcmlhIHpha7NhZGVrIHcgcGxpa2FjaCAob2QgbmFqbm93c3p5Y2ggcG8gbmFqc3RhcnN6ZSk6XG4iCisKKyM6IG1hcmsuYzoxNTAxCittc2dpZCAiTWlzc2luZyAnPiciCittc2dzdHIgIkJyYWsgJz4nIgorCisjOiBtYnl0ZS5jOjQ2NworbXNnaWQgIkU1NDM6IE5vdCBhIHZhbGlkIGNvZGVwYWdlIgorbXNnc3RyICJFNTQzOiBUbyBuaWUgamVzdCB3Yb9uYSBzdHJvbmEga29kb3dhIgorCisjOiBtYnl0ZS5jOjQ0MzEKK21zZ2lkICJFMjg0OiBDYW5ub3Qgc2V0IElDIHZhbHVlcyIKK21zZ3N0ciAiRTI4NDogTmllIG1vZ+ogbmFzdGF3aeYgd2FydG+2Y2kgSUMiCisKKyM6IG1ieXRlLmM6NDU4MworbXNnaWQgIkUyODU6IEZhaWxlZCB0byBjcmVhdGUgaW5wdXQgY29udGV4dCIKK21zZ3N0ciAiRTI4NTogTmllIG1vZ7NlbSBzdHdvcnp55iBrb250ZWtzdHUgd3Byb3dhZHpl8SIKKworIzogbWJ5dGUuYzo0NzQxCittc2dpZCAiRTI4NjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgbWV0aG9kIgorbXNnc3RyICJFMjg2OiBOaWUgbW9ns2VtIG90d29yennmIHNwb3NvYnUgd3Byb3dhZHpl8SIKKworIzogbWJ5dGUuYzo0NzUyCittc2dpZCAiRTI4NzogV2FybmluZzogQ291bGQgbm90IHNldCBkZXN0cm95IGNhbGxiYWNrIHRvIElNIgorbXNnc3RyICJFMjg3OiBPU1RSWkWvRU5JRTogTmllIG1vZ7NlbSB6bGlrd2lkb3dh5iB3eXdvs2FuaWEgZGxhIElNIgorCisjOiBtYnl0ZS5jOjQ3NTgKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODogbWV0b2RhIHdwcm93YWR6ZfEgbmllIHdzcG9tYWdhIL9hZG5lZ28gc3R5bHUiCisKKyM6IG1ieXRlLmM6NDgxNQorbXNnaWQgIkUyODk6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgbXkgcHJlZWRpdCB0eXBlIgorbXNnc3RyICJFMjg5OiBtZXRvZGEgd3Byb3dhZHpl8SBuaWUgd3Nwb21hZ2EgbW9qZWdvIHR5cHUgcHJlZWRpdCIKKworIzogbWJ5dGUuYzo0ODg5Cittc2dpZCAiRTI5MDogb3Zlci10aGUtc3BvdCBzdHlsZSByZXF1aXJlcyBmb250c2V0IgorbXNnc3RyICJFMjkwOiBzdHlsIG5hZHB1bmt0b3d5IHd5bWFnYSArZm9udHNldCIKKworIzogbWJ5dGUuYzo0OTI1Cittc2dpZCAiRTI5MTogWW91ciBHVEsrIGlzIG9sZGVyIHRoYW4gMS4yLjMuIFN0YXR1cyBhcmVhIGRpc2FibGVkIgorbXNnc3RyICJFMjkxOiBUd/NqIEdUSysgamVzdCBzdGFyc3p5IG5pvyAxLjIuMy4gUG9sZSBzdGF0dXN1IHd5s7Fjem9ubyIKKworIzogbWJ5dGUuYzo1MjMyCittc2dpZCAiRTI5MjogSW5wdXQgTWV0aG9kIFNlcnZlciBpcyBub3QgcnVubmluZyIKK21zZ3N0ciAiRTI5MjogU2Vyd2VyIG1ldG9kIHdwcm93YWR6ZfEgbmllIGplc3QgdXJ1Y2hvbWlvbnkiCisKKyM6IG1lbWZpbGUuYzo0ODgKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5MzogYmxvayBuaWUgYnmzIHphYmxva293YW55IgorCisjOiBtZW1maWxlLmM6MTAwNQorbXNnaWQgIkUyOTQ6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHJlYWQiCittc2dzdHIgIkUyOTQ6IEKzsWQgdyB0cmFrY2llIGN6eXRhbmlhIHBsaWt1IHd5bWlhbnkiCisKKyM6IG1lbWZpbGUuYzoxMDEwCittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IEKzsWQgb2Rjenl0dSBwbGlrdSB3eW1pYW55IgorCisjOiBtZW1maWxlLmM6MTA2MgorbXNnaWQgIkUyOTY6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHdyaXRlIgorbXNnc3RyICJFMjk2OiBCs7FkIHN6dWthbmlhIHcgcGxpa3Ugd3ltaWFueSIKKworIzogbWVtZmlsZS5jOjEwODAKK21zZ2lkICJFMjk3OiBXcml0ZSBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTc6IEKzsWQgemFwaXN1IHcgcGxpa3Ugd3ltaWFueSIKKworIzogbWVtZmlsZS5jOjEyNzcKK21zZ2lkICJFMzAwOiBTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMgKHN5bWxpbmsgYXR0YWNrPykiCittc2dzdHIgIkUzMDA6IFBsaWsgd3ltaWFueSBqdb8gaXN0bmllamUgKGF0YWsgc3ltbGluaz8pIgorCisjOiBtZW1saW5lLmM6Mjc1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIKK21zZ3N0ciAiRTI5ODogTmllIG90cnp5bWGzZW0gYmxva3UgbnIgMD8iCisKKyM6IG1lbWxpbmUuYzozMTUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDE/IgorbXNnc3RyICJFMjk4OiBOaWUgb3RyenltYbNlbSBibG9rdSBuciAxPyIKKworIzogbWVtbGluZS5jOjMzMworbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMj8iCittc2dzdHIgIkUyOTg6IE5pZSBvdHJ6eW1hs2VtIGJsb2t1IG5yIDI/IgorCisjLiBjb3VsZCBub3QgKHJlKW9wZW4gdGhlIHN3YXAgZmlsZSwgd2hhdCBjYW4gd2UgZG8/Pz8/CisjOiBtZW1saW5lLmM6NDQzCittc2dpZCAiRTMwMTogT29wcywgbG9zdCB0aGUgc3dhcCBmaWxlISEhIgorbXNnc3RyICJFMzAxOiBPamVqLCB6Z3ViabNlbSBwbGlrIHd5bWlhbnkhISEiCisKKyM6IG1lbWxpbmUuYzo0NDgKK21zZ2lkICJFMzAyOiBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwMjogTmllIG1vZ7NlbSB6bWllbmnmIG5hend5IHBsaWt1IHd5bWlhbnkiCisKKyM6IG1lbWxpbmUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwMzogVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciBcIiVzXCIsIHJlY292ZXJ5IGltcG9zc2libGUiCittc2dzdHIgIkUzMDM6IE5pZSBtb2fqIG90d29yennmIHBsaWt1IHd5bWlhbnkgZGxhIFwiJXNcIjsgb2R0d29yemVuaWUgbmllbW+/bGl3ZSIKKworIzogbWVtbGluZS5jOjYxNworbXNnaWQgIkUzMDQ6IG1sX3RpbWVzdGFtcDogRGlkbid0IGdldCBibG9jayAwPz8iCittc2dzdHIgIkUzMDQ6IG1sX3RpbWVzdGFtcDogTmllIG90cnp5bWGzZW0gYmxva3UgMD8/IgorCisjOiBtZW1saW5lLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDU6IE5vIHN3YXAgZmlsZSBmb3VuZCBmb3IgJXMiCittc2dzdHIgIkUzMDU6IE5pZSB6bmFsZXppb25vIHBsaWt1IHd5bWlhbnkgZGxhICVzIgorCisjOiBtZW1saW5lLmM6NzY3Cittc2dpZCAiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIKK21zZ3N0ciAiV3Byb3dhZLwgbnVtZXIgcGxpa3Ugd3ltaWFueSwga3TzcmVnbyB1v3nmICgwIGJ5IHd5arbmKTogIgorCisjOiBtZW1saW5lLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDY6IENhbm5vdCBvcGVuICVzIgorbXNnc3RyICJFMzA2OiBOaWUgbW9n6iBvdHdvcnp55iAlcyIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIk5pZSBtb2fqIG9kY3p5dGHmIGJsb2t1IDAgeiAiCisKKyM6IG1lbWxpbmUuYzo4MzcKK21zZ2lkICIiCisiXG4iCisiTWF5YmUgbm8gY2hhbmdlcyB3ZXJlIG1hZGUgb3IgVmltIGRpZCBub3QgdXBkYXRlIHRoZSBzd2FwIGZpbGUuIgorbXNnc3RyICIiCisiXG4iCisiTW+/ZSBuaWUgd3lrb25hbm8gem1pYW4gYWxibyBWaW0gbmllIHpha3R1YWxpem93YbMgcGxpa3Ugd3ltaWFueS4iCisKKyM6IG1lbWxpbmUuYzo4NDcgbWVtbGluZS5jOjg2NAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW0uXG4iCittc2dzdHIgIiBuaWUgbW+/ZSBieeYgc3Rvc293YW55IHogdLEgd2Vyc2qxIFZpbWEuXG4iCisKKyM6IG1lbWxpbmUuYzo4NDkKK21zZ2lkICJVc2UgVmltIHZlcnNpb24gMy4wLlxuIgorbXNnc3RyICJVv3lqIFZpbWEgdyB3ZXJzamkgMy4wLlxuIgorCisjOiBtZW1saW5lLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDc6ICVzIG5pZSB3eWdssWRhIG5hIHBsaWsgd3ltaWFueSBWaW1hIgorCisjOiBtZW1saW5lLmM6ODY4Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIG9uIHRoaXMgY29tcHV0ZXIuXG4iCittc2dzdHIgIiBuaWUgbW+/ZSBieeYgc3Rvc293YW55IG5hIHR5bSBrb21wdXRlcnplLlxuIgorCisjOiBtZW1saW5lLmM6ODcwCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICJUZW4gcGxpayB6b3N0YbMgc3R3b3J6b255IG5hICIKKworIzogbWVtbGluZS5jOjg3NAorbXNnaWQgIiIKKyIsXG4iCisib3IgdGhlIGZpbGUgaGFzIGJlZW4gZGFtYWdlZC4iCittc2dzdHIgIiIKKyIsXG4iCisibHViIHBsaWsgem9zdGGzIHVzemtvZHpvbnkuIgorCisjOiBtZW1saW5lLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHN3YXAgZmlsZSBcIiVzXCIiCittc2dzdHIgIlW/eXdhbSBwbGlrdSB3eW1pYW55IFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJPcmlnaW5hbCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiT3J5Z2luYWxueSBwbGlrIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkyMgorbXNnaWQgIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIgorbXNnc3RyICJFMzA4OiBPU1RSWkWvRU5JRTogT3J5Z2luYWxueSBwbGlrIG3zZ7MgYnnmIHptaWVuaW9ueSIKKworIzogbWVtbGluZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6IE5pZSBtb2fqIG9kY3p5dGHmIGJsb2t1IDEgeiAlcyIKKworIzogbWVtbGluZS5jOjk3OQorbXNnaWQgIj8/P01BTlkgTElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/QlJBS1VKRSBXSUVMVSBXSUVSU1pZIgorCisjOiBtZW1saW5lLmM6OTk1Cittc2dpZCAiPz8/TElORSBDT1VOVCBXUk9ORyIKK21zZ3N0ciAiPz8/TElDWk5JSyBXSUVSU1pZIE5JRVpHT0ROWSIKKworIzogbWVtbGluZS5jOjEwMDIKK21zZ2lkICI/Pz9FTVBUWSBCTE9DSyIKK21zZ3N0ciAiPz8/UFVTVFkgQkxPSyIKKworIzogbWVtbGluZS5jOjEwMjgKK21zZ2lkICI/Pz9MSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz9CUkFLVUpFIFdJRVJTWlkiCisKKyM6IG1lbWxpbmUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTA6IEJsb2NrIDEgSUQgd3JvbmcgKCVzIG5vdCBhIC5zd3AgZmlsZT8pIgorbXNnc3RyICJFMzEwOiBOaWV3s2G2Y2l3ZSBJRCBibG9rdSAxIChtb79lICVzIG5pZSBqZXN0IHBsaWtpZW0gLnN3cD8pIgorCisjOiBtZW1saW5lLmM6MTA2NQorbXNnaWQgIj8/P0JMT0NLIE1JU1NJTkciCittc2dzdHIgIj8/P0JSQUsgQkxPS1UiCisKKyM6IG1lbWxpbmUuYzoxMDgxCittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGJlIG1lc3NlZCB1cCIKK21zZ3N0ciAiPz8/IG9kIHRlZ28gbWllanNjYSBwbyA/Pz9LT05JRUMgd2llcnN6ZSBtb2exIGJ55iBwb21pZXN6YW5lIgorCisjOiBtZW1saW5lLmM6MTA5NworbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBoYXZlIGJlZW4gaW5zZXJ0ZWQvZGVsZXRlZCIKK21zZ3N0ciAiPz8/IG9kIHRlZ28gbWllanNjYSBwbyA/Pz9LT05JRUMgd2llcnN6ZSBtb2exIGJ55iB3s2+/b25lL3NrYXNvd2FuZSIKKworIzogbWVtbGluZS5jOjExMTcKK21zZ2lkICI/Pz9FTkQiCittc2dzdHIgIj8/P0tPTklFQyIKKworIzogbWVtbGluZS5jOjExNDMKK21zZ2lkICJFMzExOiBSZWNvdmVyeSBJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiRTMxMTogUHJ6ZXJ3YW5pZSBvZHR3YXJ6YW5pYSIKKworIzogbWVtbGluZS5jOjExNDgKK21zZ2lkICJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIkUzMTI6IFd5a3J5dG8gYrPqZHkgcG9kY3phcyBvZHR3YXJ6YW5pYTsgb2Qga3TzcnljaCB3aWVyc3p5IHphY3qx5iA/Pz8iCisKKyM6IG1lbWxpbmUuYzoxMTUwCittc2dpZCAiU2VlIFwiOmhlbHAgRTMxMlwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiUGF0cnogXCI6aGVscCBFMzEyXCIgZGxhIGRhbHN6eWNoIGluZm9ybWFjamkuIgorCisjOiBtZW1saW5lLmM6MTE1NQorbXNnaWQgIlJlY292ZXJ5IGNvbXBsZXRlZC4gWW91IHNob3VsZCBjaGVjayBpZiBldmVyeXRoaW5nIGlzIE9LLiIKK21zZ3N0ciAiT2R0d2FyemFuaWUgemFrb/Fjem9uby4gUG93aW5pZW5ltiBzcHJhd2R6aeYgY3p5IHdzenlzdGtvIGplc3QgdyBwb3J6sWRrdS4iCisKKyM6IG1lbWxpbmUuYzoxMTU2Cittc2dpZCAiIgorIlxuIgorIihZb3UgbWlnaHQgd2FudCB0byB3cml0ZSBvdXQgdGhpcyBmaWxlIHVuZGVyIGFub3RoZXIgbmFtZVxuIgorbXNnc3RyICIiCisiXG4iCisiKE1vv2VzeiBjaGNpZeYgemFwaXNh5iB0ZW4gcGxpayBwb2QgaW5usSBuYXp3sVxuIgorCisjOiBtZW1saW5lLmM6MTE1NworbXNnaWQgImFuZCBydW4gZGlmZiB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIHRvIGNoZWNrIGZvciBjaGFuZ2VzKVxuIgorbXNnc3RyICJpIHd5a29uYeYgZGlmZiB6IG9yeWdpbmFsbnltIHBsaWtpZW0gYWJ5IHNwcmF3ZHpp5iB6bWlhbnkpXG4iCisKKyM6IG1lbWxpbmUuYzoxMTU4Cittc2dpZCAiIgorIkRlbGV0ZSB0aGUgLnN3cCBmaWxlIGFmdGVyd2FyZHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTa2FzdWogcG90ZW0gcGxpayAuc3dwLlxuIgorIlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMTQKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAiWm5hbGV6aW9uZSBwbGlraSB3eW1pYW55OiIKKworIzogbWVtbGluZS5jOjEzOTIKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAgVyBiaWW/sWN5bSBrYXRhbG9ndTpcbiIKKworIzogbWVtbGluZS5jOjEzOTQKK21zZ2lkICIgICBVc2luZyBzcGVjaWZpZWQgbmFtZTpcbiIKK21zZ3N0ciAiICAgVb95d2FtIHBvZGFuZWogbmF6d3k6XG4iCisKKyM6IG1lbWxpbmUuYzoxMzk4Cittc2dpZCAiICAgSW4gZGlyZWN0b3J5ICIKK21zZ3N0ciAiICAgVyBrYXRhbG9ndSAiCisKKyM6IG1lbWxpbmUuYzoxNDE2Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgIC0tIL9hZGVuIC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDg4Cittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgIHBvc2lhZGFueSBwcnplejogIgorCisjOiBtZW1saW5lLmM6MTQ5MAorbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgIGRhdGE6ICIKKworIzogbWVtbGluZS5jOjE0OTQgbWVtbGluZS5jOjM2ODQKK21zZ2lkICIgICAgICAgICAgICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgICAgICAgICAgICBkYXRhOiAiCisKKyM6IG1lbWxpbmUuYzoxNTEwCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgICAgW3BvIFZpbWllIHdlcnNqYSAzLjBdIgorCisjOiBtZW1saW5lLmM6MTUxNAorbXNnaWQgIiAgICAgICAgIFtkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlXSIKK21zZ3N0ciAiICAgICAgICAgW25pZSB3eWdssWRhIG5hIHBsaWsgd3ltaWFueSBWaW1hXSIKKworIzogbWVtbGluZS5jOjE1MTgKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgIG5hendhIHBsaWt1OiAiCisKKyM6IG1lbWxpbmUuYzoxNTI0Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgICBtb2RpZmllZDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgem1pZW5pb25vOiAiCisKKyM6IG1lbWxpbmUuYzoxNTI1Cittc2dpZCAiWUVTIgorbXNnc3RyICJUQUsiCisKKyM6IG1lbWxpbmUuYzoxNTI1Cittc2dpZCAibm8iCittc2dzdHIgIm5pZSIKKworIzogbWVtbGluZS5jOjE1MjkKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgdXNlciBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgIHW/eXRrb3duaWs6ICIKKworIzogbWVtbGluZS5jOjE1MzYKK21zZ2lkICIgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiICAgbmF6d2EgaG9zdGE6ICIKKworIzogbWVtbGluZS5jOjE1MzgKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICBuYXp3YSBob3N0YTogIgorCisjOiBtZW1saW5lLmM6MTU0NAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgSUQgcHJvY2VzdTogIgorCisjOiBtZW1saW5lLmM6MTU1MAorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAoZGFsZWogZHppYbNhKSIKKworIzogbWVtbGluZS5jOjE1NjIKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFtuaWUgbmFkYWplIHNp6iBkbGEgdGVqIHdlcnNqaSBWaW1hXSIKKworIzogbWVtbGluZS5jOjE1NjUKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgb24gdGhpcyBjb21wdXRlcl0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgIFtuaWUgZG8gdb95dGt1IG5hIHR5bSBrb21wdXRlcnplXSIKKworIzogbWVtbGluZS5jOjE1NzAKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIHJlYWRdIgorbXNnc3RyICIgICAgICAgIFtuaWVvZGN6eXR5d2FsbnldIgorCisjOiBtZW1saW5lLmM6MTU3NAorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgb3BlbmVkXSIKK21zZ3N0ciAiICAgICAgICAgICAgW25pZW90d2llcmFsbnldIgorCisjOiBtZW1saW5lLmM6MTc2NAorbXNnaWQgIkUzMTM6IENhbm5vdCBwcmVzZXJ2ZSwgdGhlcmUgaXMgbm8gc3dhcCBmaWxlIgorbXNnc3RyICJFMzEzOiBOaWUgbW9n6iB6YWJlenBpZWN6eeYsIGJvIGJyYWsgcGxpa3Ugd3ltaWFueSIKKworIzogbWVtbGluZS5jOjE4MTcKK21zZ2lkICJGaWxlIHByZXNlcnZlZCIKK21zZ3N0ciAiUGxpayB6YWJlenBpZWN6b25vIgorCisjOiBtZW1saW5lLmM6MTgxOQorbXNnaWQgIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIKK21zZ3N0ciAiRTMxNDogTmlldWRhbmUgemFiZXpwaWVjemVuaWUiCisKKyM6IG1lbWxpbmUuYzoxODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTU6IG1sX2dldDogaW52YWxpZCBsbnVtOiAlbGQiCittc2dzdHIgIkUzMTU6IG1sX2dldDogbmlld7NhtmNpd3kgbG51bTogJWxkIgorCisjOiBtZW1saW5lLmM6MTkxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE2OiBtbF9nZXQ6IGNhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzE2OiBtbF9nZXQ6IG5pZSB6bmFsZXppb25vIHdpZXJzemEgJWxkIgorCisjOiBtZW1saW5lLmM6MjMwNgorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAiRTMxNzogbmllcG9wcmF3bmUgaWQgd3NrYbxuaWthIGJsb2t1IDMiCisKKyM6IG1lbWxpbmUuYzoyMzg2Cittc2dpZCAic3RhY2tfaWR4IHNob3VsZCBiZSAwIgorbXNnc3RyICJzdGFja19pZHggcG93aW5pZW4gYnnmIDAiCisKKyM6IG1lbWxpbmUuYzoyNDQ4Cittc2dpZCAiRTMxODogVXBkYXRlZCB0b28gbWFueSBibG9ja3M/IgorbXNnc3RyICJFMzE4OiBaYWt0dWFsaXpvd2FubyB6Ynl0IHdpZWxlIGJsb2vzdz8iCisKKyM6IG1lbWxpbmUuYzoyNjMwCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiBuaWVwb3ByYXduZSBpZCB3c2thvG5pa2EgYmxva3UgNCIKKworIzogbWVtbGluZS5jOjI2NTcKK21zZ2lkICJkZWxldGVkIGJsb2NrIDE/IgorbXNnc3RyICJibG9rIG5yIDEgc2thc293YW55PyIKKworIzogbWVtbGluZS5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6IE5pZSBtb2fqIHpuYWxlvOYgd2llcnN6YSAlbGQiCisKKyM6IG1lbWxpbmUuYzozMTAwCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyIKK21zZ3N0ciAiRTMxNzogbmllcG9wcmF3bmUgaWQgYmxva3Ugb2RuaWVzaWVuaWEiCisKKyM6IG1lbWxpbmUuYzozMTE2Cittc2dpZCAicGVfbGluZV9jb3VudCBpcyB6ZXJvIgorbXNnc3RyICJwZV9saW5lX2NvdW50IHd5bm9zaSB6ZXJvIgorCisjOiBtZW1saW5lLmM6MzE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIyOiBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVsZCBwYXN0IHRoZSBlbmQiCittc2dzdHIgIkUzMjI6IG51bWVyIHdpZXJzemEgcG96YSB6YWtyZXNlbTogJWxkIGplc3QgcG96YSBrb/FjZW0iCisKKyM6IG1lbWxpbmUuYzozMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjM6IGxpbmUgY291bnQgd3JvbmcgaW4gYmxvY2sgJWxkIgorbXNnc3RyICJFMzIzOiBsaWN6YmEgd2llcnN6eSBuaWVwb3ByYXduYSB3IGJsb2t1ICVsZCIKKworIzogbWVtbGluZS5jOjMxOTgKK21zZ2lkICJTdGFjayBzaXplIGluY3JlYXNlcyIKK21zZ3N0ciAiV2llbGtvtuYgc3Rvc3Ugd3pyYXN0YSIKKworIzogbWVtbGluZS5jOjMyNDQKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDIiCittc2dzdHIgIkUzMTc6IG5pZXBvcHJhd25lIGlkIGJsb2t1IG9kbmllc2llbmlhIDIiCisKKyM6IG1lbWxpbmUuYzozNjc0Cittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiBVV0FHQSIKKworIzogbWVtbGluZS5jOjM2NzUKK21zZ2lkICIiCisiXG4iCisiRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgXCIiCittc2dzdHIgIiIKKyJcbiIKKyJabmFsYXqzZW0gcGxpayB3eW1pYW55IG8gbmF6d2llIFwiIgorCisjOiBtZW1saW5lLmM6MzY3OQorbXNnaWQgIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIKK21zZ3N0ciAiUG9kY3phcyBvdHdpZXJhbmlhIHBsaWt1IFwiIgorCisjOiBtZW1saW5lLmM6MzY4OAorbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICAgICBOT1dTWkUgb2QgcGxpa3Ugd3ltaWFueSFcbiIKKworIy4gU29tZSBvZiB0aGVzZSBtZXNzYWdlcyBhcmUgbG9uZyB0byBhbGxvdyB0cmFuc2xhdGlvbiB0bworIy4gKiBvdGhlciBsYW5ndWFnZXMuCisjOiBtZW1saW5lLmM6MzY5MgorbXNnaWQgIiIKKyJcbiIKKyIoMSkgQW5vdGhlciBwcm9ncmFtIG1heSBiZSBlZGl0aW5nIHRoZSBzYW1lIGZpbGUuXG4iCisiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIGJlIGNhcmVmdWwgbm90IHRvIGVuZCB1cCB3aXRoIHR3b1xuIgorIiAgICBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGZpbGUgd2hlbiBtYWtpbmcgY2hhbmdlcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigxKSBQZXduaWUgaW5ueSBwcm9ncmFtIG9icmFiaWEgdGVuIHNhbSBwbGlrLlxuIgorIiAgICBKZbZsaSB0YWssIGKxZLwgb3N0cm+/bnksIGFieSBuaWUgc2tv8WN6eeYgeiBkd29tYVxuIgorIiAgICBy879ueW1pIHdlcnNqYW1pIGplZG5lZ28gdGVnbyBzYW1lZ28gcGxpa3UgcG8gem1pYW5hY2guXG4iCisKKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiICAgIFF1aXQsIG9yIGNvbnRpbnVlIHdpdGggY2F1dGlvbi5cbiIKK21zZ3N0ciAiICAgIFpha2/xY3ogbHViIG9zdHJvv25pZSBrb250eW51dWouXG4iCisKKyM6IG1lbWxpbmUuYzozNjk0Cittc2dpZCAiIgorIlxuIgorIigyKSBBbiBlZGl0IHNlc3Npb24gZm9yIHRoaXMgZmlsZSBjcmFzaGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDIpIFNlc2phIGVkeWNqaSBkbGEgcGxpa3UgemGzYW1hs2Egc2nqLlxuIgorCisjOiBtZW1saW5lLmM6MzY5NQorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIEpltmxpIHRhaywgdG8gdb95aiBcIjpyZWNvdmVyXCIgbHViIFwidmltIC1yICIKKworIzogbWVtbGluZS5jOjM2OTcKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gcmVjb3ZlciB0aGUgY2hhbmdlcyAoc2VlIFwiOmhlbHAgcmVjb3ZlcnlcIikuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICBhYnkgb2R6eXNrYeYgem1pYW55IChwYXRyeiBcIjpoZWxwIHJlY292ZXJ5KVwiKS5cbiIKKworIzogbWVtbGluZS5jOjM2OTgKK21zZ2lkICIgICAgSWYgeW91IGRpZCB0aGlzIGFscmVhZHksIGRlbGV0ZSB0aGUgc3dhcCBmaWxlIFwiIgorbXNnc3RyICIgICAgSmW2bGkganW/IHRvIHpyb2Jps2W2LCB1c3XxIHBsaWsgd3ltaWFueSBcIiIKKworIzogbWVtbGluZS5jOjM3MDAKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgYWJ5IHVuaWtuseYgdGVqIHdpYWRvbW+2Y2kuXG4iCisKKyM6IG1lbWxpbmUuYzozNzE0IG1lbWxpbmUuYzozNzE4Cittc2dpZCAiU3dhcCBmaWxlIFwiIgorbXNnc3RyICJQbGlrIHd5bWlhbnkgXCIiCisKKyM6IG1lbWxpbmUuYzozNzE1IG1lbWxpbmUuYzozNzIxCittc2dpZCAiXCIgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICJcIiBqdb8gaXN0bmllamUhIgorCisjOiBtZW1saW5lLmM6MzcyNAorbXNnaWQgIlZJTSAtIEFUVEVOVElPTiIKK21zZ3N0ciAiVklNIC0gVVdBR0EiCisKKyM6IG1lbWxpbmUuYzozNzI2Cittc2dpZCAiU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiUGxpayB3eW1pYW55IGp1vyBpc3RuaWVqZSEiCisKKyM6IG1lbWxpbmUuYzozNzMwCittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImQWJvcnQiCittc2dzdHIgIiIKKyImT3R383J6IFJlYWQtT25seVxuIgorIiZFZHl0dWogcG9taW1vXG4iCisiTyZkdHfzcnpcbiIKKyImWmFrb/FjelxuIgorIiZQb3J6deYiCisKKyM6IG1lbWxpbmUuYzozNzMyCittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImQWJvcnRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisiJk90d/NyeiBSZWFkLU9ubHlcbiIKKyImRWR5dHVqIHBvbWltb1xuIgorIk8mZHR383J6XG4iCisiJlpha2/xY3pcbiIKKyImUG9yenXmXG4iCisiJlNrYXN1aiBnbyIKKworIzogbWVtbGluZS5jOjM3ODkKK21zZ2lkICJFMzI2OiBUb28gbWFueSBzd2FwIGZpbGVzIGZvdW5kIgorbXNnc3RyICJFMzI2OiBabmFsZXppb25vIHpieXQgd2llbGUgcGxpa/N3IHd5bWlhbnkiCisKKyM6IG1lbnUuYzo2NAorbXNnaWQgIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51IgorbXNnc3RyICJFMzI3OiBDeuq25iB0cm9wdSBwdW5rdHUgbWVudSBuaWUgb2tyZbZsYSBwb2RtZW51IgorCisjOiBtZW51LmM6NjUKK21zZ2lkICJFMzI4OiBNZW51IG9ubHkgZXhpc3RzIGluIGFub3RoZXIgbW9kZSIKK21zZ3N0ciAiRTMyODogTWVudSBpc3RuaWVqZSB0eWxrbyB3IGlubnltIHRyeWJpZSIKKworIzogbWVudS5jOjY2Cittc2dpZCAiRTMyOTogTm8gbWVudSBvZiB0aGF0IG5hbWUiCittc2dzdHIgIkUzMjk6IE5pZSBtYSBtZW51IG8gdGVqIG5hendpZSIKKworIzogbWVudS5jOjUyNQorbXNnaWQgIkUzMzA6IE1lbnUgcGF0aCBtdXN0IG5vdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzA6IFRyb3AgbWVudSBuaWUgbW+/ZSBwcm93YWR6aeYgZG8gcG9kbWVudSIKKworIzogbWVudS5jOjU2NAorbXNnaWQgIkUzMzE6IE11c3Qgbm90IGFkZCBtZW51IGl0ZW1zIGRpcmVjdGx5IHRvIG1lbnUgYmFyIgorbXNnc3RyICJFMzMxOiBOaWUgd29sbm8gZG9kYXdh5iBwdW5rdPN3IG1lbnUgd3Byb3N0IGRvIHBhc2thIG1lbnUiCisKKyM6IG1lbnUuYzo1NzAKK21zZ2lkICJFMzMyOiBTZXBhcmF0b3IgY2Fubm90IGJlIHBhcnQgb2YgYSBtZW51IHBhdGgiCittc2dzdHIgIkUzMzI6IFNlcGFyYXRvciBuaWUgbW+/ZSBieeYgY3rqtmNpsSB0cm9wdSBtZW51IgorCisjLiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgbWVudSwgYW5kIHdlIGxpc3QgdGhlIG1hcHBpbmdzCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1lbnUuYzoxMDk3Cittc2dpZCAiIgorIlxuIgorIi0tLSBNZW51cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTWVudSAtLS0iCisKKyM6IG1lbnUuYzoyMDE5Cittc2dpZCAiVGVhciBvZmYgdGhpcyBtZW51IgorbXNnc3RyICJPZGVyd2lqIHRvIG1lbnUiCisKKyM6IG1lbnUuYzoyMDg0Cittc2dpZCAiRTMzMzogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIG1lbnUgaXRlbSIKK21zZ3N0ciAiRTMzMzogVHJvcCBtZW51IG11c2kgcHJvd2FkemnmIGRvIHB1bmt0dSBtZW51IgorCisjOiBtZW51LmM6MjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzM0OiBNZW51IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUzMzQ6IE5pZSB6bmFsZXppb25vIG1lbnU6ICVzIgorCisjOiBtZW51LmM6MjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzM1OiBNZW51IG5vdCBkZWZpbmVkIGZvciAlcyBtb2RlIgorbXNnc3RyICJFMzM1OiBNZW51IG5pZSBqZXN0IHpkZWZpbmlvd2FuZSBkbGEgdHJ5YnUgJXMiCisKKyM6IG1lbnUuYzoyMjExCittc2dpZCAiRTMzNjogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzM2OiBUcm9wIG1lbnUgbXVzaSBwcm93YWR6aeYgZG8gcG9kbWVudSIKKworIzogbWVudS5jOjIyMzIKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IE5pZSB6bmFsZXppb25vIG1lbnUgLSBzcHJhd2S8IG5hend5IG1lbnUiCisKKyM6IG1lc3NhZ2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZyAlczoiCittc2dzdHIgIld5a3J5dG8gYrOxZCBwb2RjemFzIHByemV0d2FyemFuaWEgJXM6IgorCisjOiBtZXNzYWdlLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJTRsZDoiCittc2dzdHIgIndpZXJzeiAlNGxkOiIKKworIzogbWVzc2FnZS5jOjY0NworbXNnaWQgIltzdHJpbmcgdG9vIGxvbmddIgorbXNnc3RyICJbY2mxZyB6Ynl0IGSzdWdpXSIKKworIzogbWVzc2FnZS5jOjc5NworbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorbXNnc3RyICIiCisiT3BpZWt1biBrb211bmlrYXTzdzogTWFyY2luIERhbGVja2kgPGRhbGVja2lAY3MubmV0LnBsPiwgTWlrb7NhaiBNYWNob3dza2kgIgorIjxtaWttYWNoQHdwLnBsPiIKKworIzogbWVzc2FnZS5jOjEwMjUKK21zZ2lkICJJbnRlcnJ1cHQ6ICIKK21zZ3N0ciAiUHJ6ZXJ3YW5pZTogIgorCisjOiBtZXNzYWdlLmM6MTAyOAorbXNnaWQgIkhpdCBFTlRFUiB0byBjb250aW51ZSIKK21zZ3N0ciAiTmFjabZuaWogRU5URVIgYWJ5IGtvbnR5bnVvd2HmIgorCisjOiBtZXNzYWdlLmM6MTAzMAorbXNnaWQgIkhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUiCittc2dzdHIgIk5hY2m2bmlqIEVOVEVSIGx1YiB3cHJvd2FkvCBrb21lbmTqIGFieSBrb250eW51b3dh5iIKKworIzogbWVzc2FnZS5jOjIzNTEKK21zZ2lkICItLSBNb3JlIC0tIgorbXNnc3RyICItLSBXaepjZWogLS0iCisKKyM6IG1lc3NhZ2UuYzoyMzU0Cittc2dpZCAiIChSRVQvQlM6IGxpbmUsIFNQQUNFL2I6IHBhZ2UsIGQvdTogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQvQlM6IHdpZXJzeiwgU1BBQ0UvYjogc3Ryb27qLCBkL3U6IHDzsyBzdHJvbnksIHE6IHpha2/xY3opIgorCisjOiBtZXNzYWdlLmM6MjM1NQorbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQ6IHdpZXJzeiwgU1BBQ0U6IHN0cm9u6iwgZDogcPOzIHN0cm9ueSwgcTogemFrb/FjemVuaWUpIgorCisjOiBtZXNzYWdlLmM6Mjk3NiBtZXNzYWdlLmM6Mjk5MQorbXNnaWQgIlF1ZXN0aW9uIgorbXNnc3RyICJQeXRhbmllIgorCisjOiBtZXNzYWdlLmM6Mjk3OAorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vIgorbXNnc3RyICIiCisiJlRha1xuIgorIiZOaWUiCisKKyM6IG1lc3NhZ2UuYzozMDExCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyJTYXZlICZBbGxcbiIKKyImRGlzY2FyZCBBbGxcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJlRha1xuIgorIiZOaWVcbiIKKyJaYXBpc3ogJndzenlzdGtpZVxuIgorIiZPZHJ6deYgd3N6eXN0a2llXG4iCisiJlpha2/xY3oiCisKKyM6IG1lc3NhZ2UuYzozMDUyCittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAiRGlhbG9nIHphcGlzeXdhbmlhIHBsaWt1IgorCisjOiBtZXNzYWdlLmM6MzA1NAorbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIkRpYWxvZyBvdHdpZXJhbmlhIHBsaWt1IgorCisjLiBUT0RPOiBub24tR1VJIGZpbGUgc2VsZWN0b3IgaGVyZQorIzogbWVzc2FnZS5jOjMxMjUKK21zZ2lkICJFMzM4OiBTb3JyeSwgbm8gZmlsZSBicm93c2VyIGluIGNvbnNvbGUgbW9kZSIKK21zZ3N0ciAiRTMzODogUHJ6eWtybyBtaSwgbmllIG1hIHByemVnbLFkYXJraSBwbGlr83cgdyB0cnliaWUga29uc29saSIKKworIzogbWlzYzEuYzoyNzU0Cittc2dpZCAiVzEwOiBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiCittc2dzdHIgIlcxMDogT1NUUlpFr0VOSUU6IFptaWFueSB3IHBsaWt1IHR5bGtvIGRvIG9kY3p5dHUiCisKKyM6IG1pc2MxLmM6MzAwMgorbXNnaWQgIjEgbW9yZSBsaW5lIgorbXNnc3RyICIxIHdpZXJzeiB3aepjZWoiCisKKyM6IG1pc2MxLmM6MzAwNAorbXNnaWQgIjEgbGluZSBsZXNzIgorbXNnc3RyICIxIHdpZXJzeiBtbmllaiIKKworIzogbWlzYzEuYzozMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgorbXNnc3RyICJkb2Rhbm8gJWxkIHdpZXJzenkiCisKKyM6IG1pc2MxLmM6MzAxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgZmV3ZXIgbGluZXMiCittc2dzdHIgInVzdW5p6nRvICVsZCB3aWVyc3p5IgorCisjOiBtaXNjMS5jOjMwMTQKK21zZ2lkICIgKEludGVycnVwdGVkKSIKK21zZ3N0ciAiIChQcnplcndhbmUpIgorCisjOiBtaXNjMS5jOjc1NjMKK21zZ2lkICJWaW06IHByZXNlcnZpbmcgZmlsZXMuLi5cbiIKK21zZ3N0ciAiVmltOiB6YWNob3d1auogcGxpay4uLlxuIgorCisjLiBjbG9zZSBhbGwgbWVtZmlsZXMsIHdpdGhvdXQgZGVsZXRpbmcKKyM6IG1pc2MxLmM6NzU3MworbXNnaWQgIlZpbTogRmluaXNoZWQuXG4iCittc2dzdHIgIlZpbTogWmFrb/Fjem9uby5cbiIKKworIzogbWlzYzIuYzo2OTUgbWlzYzIuYzo3MTEKK21zZ2lkICJFUlJPUjogIgorbXNnc3RyICJCo6FEOiAiCisKKyM6IG1pc2MyLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJbYnl0ZXNdIHRvdGFsIGFsbG9jLWZyZWVkICVsdS0lbHUsIGluIHVzZSAlbHUsIHBlYWsgdXNlICVsdVxuIgorbXNnc3RyICIiCisiXG4iCisiW2JhanTzd10gdG90YWxuZSBhbG9rYWNqZS16d29sbmllbmlhICVsdS0lbHUsIHcgdb95dGt1ICVsdSwgbWFrc3ltYWxuZSAiCisidb95Y2llICVsdVxuIgorCisjOiBtaXNjMi5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiW2NhbGxzXSB0b3RhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWwgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCittc2dzdHIgIiIKKyJbd3l3b7NhbmlhXSB3c3p5c3RraWNoIHJlL21hbGxvYygpLfN3ICVsdSwgd3N6eXN0a2ljaCBmcmVlKCkt83cgJWx1XG4iCisiXG4iCisKKyM6IG1pc2MyLmM6NzcyCittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDogV2llcnN6IHN0YWplIHNp6iB6Ynl0IGSzdWdpIgorCisjOiBtaXNjMi5jOjgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQxOiBJbnRlcm5hbCBlcnJvcjogbGFsbG9jKCVsZCwgKSIKK21zZ3N0ciAiRTM0MTogV2V3bup0cnpueSBis7FkOiBsYWxsb2MoJWxkLCApIgorCisjOiBtaXNjMi5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQyOiBPdXQgb2YgbWVtb3J5ISAgKGFsbG9jYXRpbmcgJWx1IGJ5dGVzKSIKK21zZ3N0ciAiRTM0MjogQnJhayBwYW1p6mNpISAgKHJlemVyd2FjamEgJWx1IGJhanTzdykiCisKKyM6IG1pc2MyLmM6MjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAiV3l3b7N1auogcG93s29r6iBkbyB3eWtvbmFuaWE6IFwiJXNcIiIKKworIzogbWlzYzIuYzoyODE1Cittc2dpZCAiRTU0NTogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU0NTogQnJhayBkd3Vrcm9wa2EiCisKKyM6IG1pc2MyLmM6MjgxNyBtaXNjMi5jOjI4NDQKK21zZ2lkICJFNTQ2OiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkU1NDY6IE5pZWRvendvbG9ueSB0cnliIgorCisjOiBtaXNjMi5jOjI4ODMKK21zZ2lkICJFNTQ3OiBJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIkU1NDc6IE5pZWRvendvbG9ueSBvYnJ5cyBteXN6a2kiCisKKyM6IG1pc2MyLmM6MjkyMworbXNnaWQgIkU1NDg6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTQ4OiBvY3pla2l3YW5vIGN5ZnJ5IgorCisjOiBtaXNjMi5jOjI5MjgKK21zZ2lkICJFNTQ5OiBJbGxlZ2FsIHBlcmNlbnRhZ2UiCittc2dzdHIgIkU0NTk6IE5pZWRvendvbG9ueSBwcm9jZW50IgorCisjOiBtaXNjMi5jOjMyMzgKK21zZ2lkICJFbnRlciBlbmNyeXB0aW9uIGtleTogIgorbXNnc3RyICJXcHJvd2FkvCBrbHVjeiBkbyBvZGtvZG93YW5pYTogIgorCisjOiBtaXNjMi5jOjMyMzkKK21zZ2lkICJFbnRlciBzYW1lIGtleSBhZ2FpbjogIgorbXNnc3RyICJXcHJvd2FkvCBwb25vd25pZSB0ZW4gc2FtIGtsdWN6OiAiCisKKyM6IG1pc2MyLmM6MzI0OQorbXNnaWQgIktleXMgZG9uJ3QgbWF0Y2ghIgorbXNnc3RyICJLbHVjemUgbmllIHBhc3VqsSBkbyBzaWViaWUhIgorCisjOiBtaXNjMi5jOjM3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUzNDM6IEludmFsaWQgcGF0aDogJyoqW251bWJlcl0nIG11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCBvciBiZSAiCisiZm9sbG93ZWQgYnkgJyVzJy4iCittc2dzdHIgIiIKKyJFMzQzOiBOaWV3s2G2Y2l3eSB0cm9wOiAnKipbbnVtZXJdJyBtdXNpIGJ55iBuYSBrb/FjdSB0cm9wdSBsdWIgcG8gbmltIG11c2kgIgorImJ55iAnJXMnLiIKKworIzogbWlzYzIuYzo1MDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IE5pZSBtb2fqIHpuYWxlvOYga2F0YWxvZ3UgXCIlc1wiIHcgY2RwYXRoIgorCisjOiBtaXNjMi5jOjUwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NTogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFMzQ1OiBOaWUgbW9n6iB6bmFsZbzmIHBsaWt1IFwiJXNcIiB3IHRyb3BpZSIKKworIzogbWlzYzIuYzo1MDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDY6IE5vIG1vcmUgZGlyZWN0b3J5IFwiJXNcIiBmb3VuZCBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDY6IEthdGFsb2d1IFwiJXNcIiBuaWUgbWEgd2nqY2VqIHcgY2RwYXRoIgorCisjOiBtaXNjMi5jOjUwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiBQbGlrdSBcIiVzXCIgbmllIG1hIHdp6mNlaiB3IHRyb3BpZSIKKworIzogbWlzYzIuYzo1MzIzCittc2dpZCAiRTU1MDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU1MDogQnJhayBkd3Vrcm9wa2EiCisKKyM6IG1pc2MyLmM6NTMzNQorbXNnaWQgIkU1NTE6IElsbGVnYWwgY29tcG9uZW50IgorbXNnc3RyICJFNTUxOiBOaWVkb3p3b2xvbmEgY3rqtuYiCisKKyM6IG1pc2MyLmM6NTM0MworbXNnaWQgIkU1NTI6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTUyOiBvY3pla2l3YW5vIGN5ZnJ5IgorCisjLiBHZXQgaGVyZSB3aGVuIHRoZSBzZXJ2ZXIgY2FuJ3QgYmUgZm91bmQuCisjOiBuZXRiZWFucy5jOjM5NgorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zICMyIgorbXNnc3RyICJOaWUgbW+/bmEgcG+zsWN6eeYgeiBOZXRiZWFucyAjMiIKKworIzogbmV0YmVhbnMuYzo0MDQKK21zZ2lkICJDYW5ub3QgY29ubmVjdCB0byBOZXRiZWFucyIKK21zZ3N0ciAiTmllIG1vv25hIHBvs7FjennmIHogTmV0YmVhbnMiCisKKyM6IG5ldGJlYW5zLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2Njg6IFdyb25nIGFjY2VzcyBtb2RlIGZvciBOZXRCZWFucyBjb25uZWN0aW9uIGluZm8gZmlsZTogXCIlc1wiIgorbXNnc3RyICJFNjY4OiBCs+pkbnkgdHJ5YiBkb3N06nB1IHBsaWt1IGluZm8gcG+zsWN6ZW5pYSBOZXRCZWFuczogXCIlc1wiIgorCisjOiBuZXRiZWFucy5jOjc0OQorbXNnaWQgInJlYWQgZnJvbSBOZXRiZWFucyBzb2NrZXQiCittc2dzdHIgIm9kY3p5dCB6IGduaWF6ZGEgTmV0YmVhbnMiCisKKyM6IG5ldGJlYW5zLmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjU4OiBOZXRCZWFucyBjb25uZWN0aW9uIGxvc3QgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU2NTg6IEJ1Zm9yICVsZCB1dHJhY2mzIHBvs7FjemVuaWUgeiBOZXRCZWFucyIKKworIzogbm9ybWFsLmM6Mjk4MAorbXNnaWQgIldhcm5pbmc6IHRlcm1pbmFsIGNhbm5vdCBoaWdobGlnaHQiCittc2dzdHIgIk9TVFJaRa9FTklFOiB0ZXJtaW5hbCBuaWUgd3lrb251amUgcG9ktndpZXRsYW5pYSIKKworIzogbm9ybWFsLmM6MzI3NgorbXNnaWQgIkUzNDg6IE5vIHN0cmluZyB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDg6IEJyYWsgY2mxZ3UgcG9kIGt1cnNvcmVtIgorCisjOiBub3JtYWwuYzozMjc4Cittc2dpZCAiRTM0OTogTm8gaWRlbnRpZmllciB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDk6IEJyYWsgaWRlbnR5ZmlrYXRvcmEgcG9kIGt1cnNvcmVtIgorCisjOiBub3JtYWwuYzo0NTE5Cittc2dpZCAiRTM1MjogQ2Fubm90IGVyYXNlIGZvbGRzIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTI6IE5pZSBtb2fqIHNrYXNvd2HmIHp3aW5p6mNpYSB6IGJpZb+xY7EgJ2ZvbGRtZXRob2QnIgorCisjOiBub3JtYWwuYzo2NzQwCittc2dpZCAiRTY2MjogQXQgc3RhcnQgb2YgY2hhbmdlbGlzdCIKK21zZ3N0ciAiRTY2MjogTmEgcG9jerF0a3UgbGlzdHkgem1pYW4iCisKKyM6IG5vcm1hbC5jOjY3NDIKK21zZ2lkICJFNjYzOiBBdCBlbmQgb2YgY2hhbmdlbGlzdCIKK21zZ3N0ciAiRTY2MzogTmEga2/xY3UgbGlzdHkgem1pYW4iCisKKyM6IG5vcm1hbC5jOjgwMDMKK21zZ2lkICJUeXBlICA6cXVpdDxFbnRlcj4gIHRvIGV4aXQgVmltIgorbXNnc3RyICJ3cHJvd2FkvCAgOnF1aXQ8RW50ZXI+ICAgIHpha2/xY3plbmllIHByb2dyYW11IgorCisjOiBvcHMuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgMSB0aW1lIgorbXNnc3RyICIxIHdpZXJzeiAlc2VkIDEgcmF6IgorCisjOiBvcHMuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgJWQgdGltZXMiCittc2dzdHIgIjEgd2llcnN6ICVzZWQgJWQgcmF6eSIKKworIzogb3BzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkIDEgdGltZSIKK21zZ3N0ciAiJWxkIHdpZXJzenkgJXNlZCAxIHJheiIKKworIzogb3BzLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIlbGQgd2llcnN6eSAlc2VkICVkIHJhenkiCisKKyM6IG9wcy5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgdG8gaW5kZW50Li4uICIKK21zZ3N0ciAiJWxkIHdpZXJzenkgZG8gd2Np6mNpYS4uLiAiCisKKyM6IG9wcy5jOjcxMgorbXNnaWQgIjEgbGluZSBpbmRlbnRlZCAiCittc2dzdHIgIjEgd2llcnN6IHdjaep0eSAiCisKKyM6IG9wcy5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgaW5kZW50ZWQgIgorbXNnc3RyICIlbGQgd2llcnN6eSB3Y2nqdHljaCAiCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNjc1Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgIm5pZSBtb2fqIHNrb3Bpb3dh5iwgbWltbyB0byBrYXN1auoiCisKKyM6IG9wcy5jOjIyNjEKK21zZ2lkICIxIGxpbmUgY2hhbmdlZCIKK21zZ3N0ciAiMSB3aWVyc3ogem1pZW5pb25vIgorCisjOiBvcHMuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBjaGFuZ2VkIgorbXNnc3RyICIlbGQgd2llcnN6eSB6bWllbmlvbm8iCisKKyM6IG9wcy5jOjI2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnJlZWluZyAlbGQgbGluZXMiCittc2dzdHIgInp3YWxuaWFtICVsZCB3aWVyc3p5IgorCisjOiBvcHMuYzoyOTI4Cittc2dpZCAiMSBsaW5lIHlhbmtlZCIKK21zZ3N0ciAiMSB3aWVyc3ogcHJ6ZWtvcGlvd2FubyIKKworIzogb3BzLmM6MjkzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgeWFua2VkIgorbXNnc3RyICIlbGQgd2llcnN6eSBwcnpla29waW93YW55Y2giCisKKyM6IG9wcy5jOjMyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1MzogTm90aGluZyBpbiByZWdpc3RlciAlcyIKK21zZ3N0ciAiRTM1MzogUHVzdHkgcmVqZXN0ciAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBvcHMuYzozNzY2Cittc2dpZCAiIgorIlxuIgorIi0tLSBSZWdpc3RlcnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFJlamVzdHJ5IC0tLSIKKworIzogb3BzLmM6NTA3MworbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAiTmllZG96d29sb25hIG5hendhIHJlamVzdHJ1IgorCisjOiBvcHMuYzo1MTYxCittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBSZWplc3RyeTpcbiIKKworIzogb3BzLmM6NTIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTc0OiBVbmtub3duIHJlZ2lzdGVyIHR5cGUgJWQiCittc2dzdHIgIkU1NzQ6IE5pZXpuYW55IHR5cCByZWplc3RydSAlZCIKKworIzogb3BzLmM6NTY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU0OiBJbnZhbGlkIHJlZ2lzdGVyIG5hbWU6ICclcyciCittc2dzdHIgIkUzNTQ6IE5pZXezYbZjaXdhIG5hendhIHJlamVzdHJ1OiAnJXMnIgorCisjOiBvcHMuYzo2MDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBDb2xzOyAiCittc2dzdHIgIiVsZCBLb2x1bW47ICIKKworIzogb3BzLmM6NjA2MworIywgYy1mb3JtYXQKK21zZ2lkICJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiCittc2dzdHIgIld5YnJhbm8gJXMlbGQgeiAlbGQgV2llcnN6eTsgJWxkIHogJWxkIFOz83c7ICVsZCB6ICVsZCBCYWp083ciCisKKyM6IG9wcy5jOjYwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQnl0ZSAlbGQgb2YgJWxkIgorbXNnc3RyICJLb2wgJXMgeiAlczsgV2llcnN6ICVsZCB6ICVsZDsgU7Nvd28gJWxkIHogJWxkOyBCYWp0ICVsZCB6ICVsZCIKKworIzogb3BzLmM6NjA5MAorIywgYy1mb3JtYXQKK21zZ2lkICIoKyVsZCBmb3IgQk9NKSIKK21zZ3N0ciAiKCslbGQgZGxhIEJPTSkiCisKKyM6IG9wdGlvbi5jOjE2NDMKK21zZ2lkICIlPCVmJWglbSU9UGFnZSAlTiIKK21zZ3N0ciAiJTwlZiVoJW0lPVN0cm9uYSAlTiIKKworIzogb3B0aW9uLmM6MjA5MgorbXNnaWQgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIKK21zZ3N0ciAiRHpp6mtpIHphIGxvdCBWaW1lbSIKKworIzogb3B0aW9uLmM6MzQxOSBvcHRpb24uYzozNTM1Cittc2dpZCAiRTUxODogVW5rbm93biBvcHRpb24iCittc2dzdHIgIkU1MTg6IE5pZXpuYW5hIG9wY2phIgorCisjOiBvcHRpb24uYzozNDMyCittc2dpZCAiRTUxOTogT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkU1MTk6IE9wY2phIG5pZSBqZXN0IHdzcG9tYWdhbmEiCisKKyM6IG9wdGlvbi5jOjM0NTcKK21zZ2lkICJFNTIwOiBOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIgorbXNnc3RyICJFNTIwOiBOaWVkb3p3b2xvbmUgdyBtb2RlbGluZSIKKworIzogb3B0aW9uLmM6MzUyMgorbXNnaWQgIiIKKyJcbiIKKyJcdExhc3Qgc2V0IGZyb20gIgorbXNnc3RyICIiCisiXG4iCisiXHRPc3RhdG5pZSB1c3Rhd2llbmllIHByemV6ICIKKworIzogb3B0aW9uLmM6MzY2MQorbXNnaWQgIkU1MjE6IE51bWJlciByZXF1aXJlZCBhZnRlciA9IgorbXNnc3RyICJFNTIxOiBQbyA9IHd5bWFnYW55IGplc3QgbnVtZXIiCisKKyM6IG9wdGlvbi5jOjM5ODkgb3B0aW9uLmM6NDYxOQorbXNnaWQgIkU1MjI6IE5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNTIyOiBOaWUgem5hbGV6aW9ubyB3IHRlcm1jYXAiCisKKyM6IG9wdGlvbi5jOjQwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOTogSWxsZWdhbCBjaGFyYWN0ZXIgPCVzPiIKK21zZ3N0ciAiRTUzOTogTmllZG96d29sb255IHpuYWsgPCVzPiIKKworIzogb3B0aW9uLmM6NDYxMQorbXNnaWQgIkU1Mjk6IENhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiRTUyOTogTmllIG1vZ+ogdXN0YXdp5iAndGVybScgbmEgcHVzdHkgY2mxZyIKKworIzogb3B0aW9uLmM6NDYxNAorbXNnaWQgIkU1MzA6IENhbm5vdCBjaGFuZ2UgdGVybSBpbiBHVUkiCittc2dzdHIgIkU1MzA6IE5pZSBtb2fqIHptaWVuaeYgdGVybSB3IEdVSSIKKworIzogb3B0aW9uLmM6NDYxNgorbXNnaWQgIkU1MzE6IFVzZSBcIjpndWlcIiB0byBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFNTMxOiBVv3lqIFwiOmd1aVwiIGRvIG9kcGFsZW5pYSBHVUkiCisKKyM6IG9wdGlvbi5jOjQ2NDUKK21zZ2lkICJFNTg5OiAnYmFja3VwZXh0JyBhbmQgJ3BhdGNobW9kZScgYXJlIGVxdWFsIgorbXNnc3RyICJFNTg5OiAnYmFja3VwZXh0JyBpICdwYXRjaG1vZGUnIHOxIHRvv3NhbWUiCisKKyM6IG9wdGlvbi5jOjQ4NjAKK21zZ2lkICJFNjE3OiBDYW5ub3QgYmUgY2hhbmdlZCBpbiB0aGUgR1RLKyAyIEdVSSIKK21zZ3N0ciAiRTYxNzogTmllIG1vZ+ogem1pZW5p5iB3IEdUSysyIEdVSSIKKworIzogb3B0aW9uLmM6NTAxNgorbXNnaWQgIkU1MjQ6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1MjQ6IEJyYWsgZHd1a3JvcGthIgorCisjOiBvcHRpb24uYzo1MDE4Cittc2dpZCAiRTUyNTogWmVybyBsZW5ndGggc3RyaW5nIgorbXNnc3RyICJFNTI1OiBDabFnIG8gemVyb3dlaiBks3Vnb7ZjaSIKKworIzogb3B0aW9uLmM6NTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTI2OiBNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICJFNTI2OiBCcmFrIG51bWVydSBwbyA8JXM+IgorCisjOiBvcHRpb24uYzo1MTAwCittc2dpZCAiRTUyNzogTWlzc2luZyBjb21tYSIKK21zZ3N0ciAiRTUyNzogQnJhayBwcnplY2lua2EiCisKKyM6IG9wdGlvbi5jOjUxMDcKK21zZ2lkICJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJFNTI4OiBNdXNpIG9rcmW2bGHmIHdhcnRvtuYgJyIKKworIzogb3B0aW9uLmM6NTE0OAorbXNnaWQgIkU1OTU6IGNvbnRhaW5zIHVucHJpbnRhYmxlIG9yIHdpZGUgY2hhcmFjdGVyIgorbXNnc3RyICJFNTk1OiB6YXdpZXJhIG5pZXd5tndpZXRsYWxueSBsdWIgc3plcm9raSB6bmFrIgorCisjOiBvcHRpb24uYzo1MTk3Cittc2dpZCAiRTU5NjogSW52YWxpZCBmb250KHMpIgorbXNnc3RyICJFNTk2OiBOaWVkb3p3b2xvbmEgY3pjaW9ua2Eva2kiCisKKyM6IG9wdGlvbi5jOjUyMDUKK21zZ2lkICJFNTk3OiBjYW4ndCBzZWxlY3QgZm9udHNldCIKK21zZ3N0ciAiRTU5NzogbmllIG1vZ+ogd3licmHmIHplc3Rhd3UgY3pjaW9uZWsiCisKKyM6IG9wdGlvbi5jOjUyMDcKK21zZ2lkICJFNTk4OiBJbnZhbGlkIGZvbnRzZXQiCittc2dzdHIgIkU1OTg6IE5pZWRvendvbG9ueSB6ZXN0YXcgY3pjaW9uZWsiCisKKyM6IG9wdGlvbi5jOjUyMTQKK21zZ2lkICJFNTMzOiBjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICJFNTMzOiBuaWUgbW9n6iB3eWJyYeYgc3plcm9raWVqIGN6Y2lvbmtpIgorCisjOiBvcHRpb24uYzo1MjE2Cittc2dpZCAiRTUzNDogSW52YWxpZCB3aWRlIGZvbnQiCittc2dzdHIgIkU1MzQ6IE5pZWRvendvbG9uYSBzemVyb2thIGN6Y2lvbmthIgorCisjOiBvcHRpb24uYzo1NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIDwlYz4iCittc2dzdHIgIkU1MzU6IE5pZWRvendvbG9ueSB6bmFrIHBvIDwlYz4iCisKKyM6IG9wdGlvbi5jOjU1OTcKK21zZ2lkICJFNTM2OiBjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAiRTUzNjogd3ltYWdhbnkgcHJ6ZWNpbmVrIgorCisjOiBvcHRpb24uYzo1NjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1Mzc6ICdjb21tZW50c3RyaW5nJyBtdXN0IGJlIGVtcHR5IG9yIGNvbnRhaW4gJXMiCittc2dzdHIgIkU1Mzc6ICdjb21tZW50c3RyaW5nJyBtdXNpIGJ55iBwdXN0eSBsdWIgemF3aWVyYeYgJXMiCisKKyM6IG9wdGlvbi5jOjU2NzkKK21zZ2lkICJFNTM4OiBObyBtb3VzZSBzdXBwb3J0IgorbXNnc3RyICJFNTM4OiBCcmFrIHdzcG9tYWdhbmlhIG15c3praSIKKworIzogb3B0aW9uLmM6NTk0NworbXNnaWQgIkU1NDA6IFVuY2xvc2VkIGV4cHJlc3Npb24gc2VxdWVuY2UiCittc2dzdHIgIkU1NDA6IE5pZWRvbWtuaep0eSBjabFnIHd5cmG/ZfEiCisKKyM6IG9wdGlvbi5jOjU5NTEKK21zZ2lkICJFNTQxOiB0b28gbWFueSBpdGVtcyIKK21zZ3N0ciAiRTU0MTogemJ5dCB3aWVsZSBlbGVtZW5083ciCisKKyM6IG9wdGlvbi5jOjU5NTMKK21zZ2lkICJFNTQyOiB1bmJhbGFuY2VkIGdyb3VwcyIKK21zZ3N0ciAiRTU0MjogbmllemJhbGFuc293YW5lIGdydXB5IgorCisjOiBvcHRpb24uYzo2MTkzCittc2dpZCAiRTU5MDogQSBwcmV2aWV3IHdpbmRvdyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTU5MDogb2tubyBwb2RnbLFkdSBqdb8gaXN0bmllamUiCisKKyM6IG9wdGlvbi5jOjY0NTAKK21zZ2lkICJXMTc6IEFyYWJpYyByZXF1aXJlcyBVVEYtOCwgZG8gJzpzZXQgZW5jb2Rpbmc9dXRmLTgnIgorbXNnc3RyICJXMTc6IEFyYWJza2kgd3ltYWdhIFVURi04LCB6cvNiICc6c2V0IGVuY29kaW5nPXV0Zi04JyIKKworIzogb3B0aW9uLmM6Njc4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTkzOiBOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJFNTkzOiBQb3RyemVidWrqIHByenluYWptbmllaiAlZCB3aWVyc3p5IgorCisjOiBvcHRpb24uYzo2NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTQ6IE5lZWQgYXQgbGVhc3QgJWQgY29sdW1ucyIKK21zZ3N0ciAiRTU5NDogUG90cnplYnVq6iBwcnp5bmFqbW5pZWogJWQga29sdW1uIgorCisjOiBvcHRpb24uYzo3MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTU6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTM1NTogTmllem5hbmEgb3BjamE6ICVzIgorCisjOiBvcHRpb24uYzo3MjIwCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBjb2RlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gS29keSB0ZXJtaW5hbGEgLS0tIgorCisjOiBvcHRpb24uYzo3MjIyCittc2dpZCAiIgorIlxuIgorIi0tLSBHbG9iYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gR2xvYmFsbmUgd2FydG+2Y2kgb3BjamkgLS0tIgorCisjOiBvcHRpb24uYzo3MjI0Cittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBMb2thbG5lIHdhcnRvtmNpIG9wY2ppIC0tLSIKKworIzogb3B0aW9uLmM6NzIyNgorbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gT3BjamUgLS0tIgorCisjOiBvcHRpb24uYzo3OTMyCittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6IEKjoUQgZ2V0X3ZhcnAiCisKKyM6IG9wdGlvbi5jOjg5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NzogJ2xhbmdtYXAnOiBNYXRjaGluZyBjaGFyYWN0ZXIgbWlzc2luZyBmb3IgJXMiCittc2dzdHIgIkUzNTc6ICdsYW5nbWFwJzogQnJhayBwYXN1arFjZWdvIHpuYWt1IGRsYSAlcyIKKworIzogb3B0aW9uLmM6ODkzNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzU4OiAnbGFuZ21hcCc6IEV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgc2VtaWNvbG9uOiAlcyIKK21zZ3N0ciAiRTM1ODogJ2xhbmdtYXAnOiBEb2RhdGtvd2Ugem5ha2kgcG8gtnJlZG5pa3U6ICVzIgorCisjOiBvc19hbWlnYS5jOjI4MAorbXNnaWQgImNhbm5vdCBvcGVuICIKK21zZ3N0ciAibmllIG1vZ+ogb3R3b3J6eeYgIgorCisjOiBvc19hbWlnYS5jOjMxNAorbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIlZJTTogTmllIG1vZ+ogb3R3b3J6eeYgb2tuYSFcbiIKKworIzogb3NfYW1pZ2EuYzozMzgKK21zZ2lkICJOZWVkIEFtaWdhZG9zIHZlcnNpb24gMi4wNCBvciBsYXRlclxuIgorbXNnc3RyICJQb3RyemVidWrqIEFtaWdhZG9zIHcgd2Vyc2ppIDIuMDQgbHViIHDzvG5pZWpzerFcbiIKKworIzogb3NfYW1pZ2EuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICJQb3RyemVidWrqICVzIHcgd2Vyc2ppICVsZFxuIgorCisjOiBvc19hbWlnYS5jOjQxNgorbXNnaWQgIkNhbm5vdCBvcGVuIE5JTDpcbiIKK21zZ3N0ciAiTmllIG1vZ+ogb3R3b3J6eeYgTklMOlxuIgorCisjOiBvc19hbWlnYS5jOjQyNworbXNnaWQgIkNhbm5vdCBjcmVhdGUgIgorbXNnc3RyICJOaWUgbW9n6iBzdHdvcnp55iAiCisKKyM6IG9zX2FtaWdhLmM6OTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbSBleGl0aW5nIHdpdGggJWRcbiIKK21zZ3N0ciAiVmltIGtv8WN6eSBwcmFj6iB6ICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTM3Cittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAibmllIG1vZ+ogem1pZW5p5iB0cnlidSBrb25zb2xpID8hXG4iCisKKyM6IG9zX2FtaWdhLmM6MTAwMworbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAibWNoX2dldF9zaGVsbHNpemU6IG5pZSBqZXN0IGtvbnNvbLE/P1xuIgorCisjLiBpZiBWaW0gb3BlbmVkIGEgd2luZG93OiBFeGVjdXRpbmcgYSBzaGVsbCBtYXkgY2F1c2UgY3Jhc2hlcworIzogb3NfYW1pZ2EuYzoxMTUyCittc2dpZCAiRTM2MDogQ2Fubm90IGV4ZWN1dGUgc2hlbGwgd2l0aCAtZiBvcHRpb24iCittc2dzdHIgIkUzNjA6IE5pZSBtb2fqIHd5a29uYeYgcG93s29raSB6IG9wY2qxIC1mIgorCisjOiBvc19hbWlnYS5jOjExOTMgb3NfYW1pZ2EuYzoxMjgzCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICJOaWUgbW9n6iB3eWtvbmHmICIKKworIzogb3NfYW1pZ2EuYzoxMTk2IG9zX2FtaWdhLmM6MTI5MworbXNnaWQgInNoZWxsICIKK21zZ3N0ciAicG93s29rYSAiCisKKyM6IG9zX2FtaWdhLmM6MTIxNiBvc19hbWlnYS5jOjEzMTgKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiIHp3cvNjabNcbiIKKworIzogb3NfYW1pZ2EuYzoxNDU5Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSB6Ynl0IG5pc2tpZS4iCisKKyM6IG9zX2FtaWdhLmM6MTQ2MworbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAiQqOhRCBJL08iCisKKyM6IG9zX21zd2luLmM6NTM5Cittc2dpZCAiLi4uKHRydW5jYXRlZCkiCittc2dzdHIgIi4uLihvYmNp6nR5KSIKKworIzogb3NfbXN3aW4uYzo2NDEKK21zZ2lkICInY29sdW1ucycgaXMgbm90IDgwLCBjYW5ub3QgZXhlY3V0ZSBleHRlcm5hbCBjb21tYW5kcyIKK21zZ3N0ciAiJ2NvbHVtbnMnIG5pZSB3eW5vc2kgODAsIG5pZSBtb2fqIHd5a29uYeYgemV3bup0cnpueWNoIGtvbWVuZCIKKworIzogb3NfbXN3aW4uYzoxOTczCittc2dpZCAiRTIzNzogUHJpbnRlciBzZWxlY3Rpb24gZmFpbGVkIgorbXNnc3RyICJFMjM3OiBXeWLzciBkcnVrYXJraSBuaWUgcG93afNksyBzaeoiCisKKyM6IG9zX21zd2luLmM6MjAxMworIywgYy1mb3JtYXQKK21zZ2lkICJ0byAlcyBvbiAlcyIKK21zZ3N0ciAiZG8gJXMgeiAlcyIKKworIzogb3NfbXN3aW4uYzoyMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTM6IFVua25vd24gcHJpbnRlciBmb250OiAlcyIKK21zZ3N0ciAiRTYxMzogTmllem5hbmEgY3pjaW9ua2EgZHJ1a2Fya2k6ICVzIgorCisjOiBvc19tc3dpbi5jOjIwNzcgb3NfbXN3aW4uYzoyMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogQrOxZCBkcnVrYXJraTogJXMiCisKKyM6IG9zX21zd2luLmM6MjA4OAorbXNnaWQgIlVua25vd24iCittc2dzdHIgIk5pZXpuYW5lIgorCisjOiBvc19tc3dpbi5jOjIxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAiV3lkcnVrb3dhbm8gJyVzJyIKKworIzogb3NfbXN3aW4uYzozMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDQ6IElsbGVnYWwgY2hhcnNldCBuYW1lIFwiJXNcIiBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ0OiBOaWVkb3p3b2xvbmEgbmF6d2EgemVzdGF3dSB6bmFr83cgXCIlc1wiIHcgbmF6d2llIGN6Y2lvbmtpIFwiJXNcIiIKKworIzogb3NfbXN3aW4uYzozMjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDU6IElsbGVnYWwgY2hhciAnJWMnIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDU6IE5pZWRvendvbG9ueSB6bmFrICclYycgdyBuYXp3aWUgY3pjaW9ua2kgXCIlc1wiIgorCisjOiBvc19yaXNjb3MuYzoxMjU5Cittc2dpZCAiRTM2NjogSW52YWxpZCAnb3NmaWxldHlwZScgb3B0aW9uIC0gdXNpbmcgVGV4dCIKK21zZ3N0ciAiRTM2NjogTmlld7NhtmNpd2Egb3BjamEgJ29zZmlsZXR5cGUnIC0gdb95d2FtIFRleHQiCisKKyM6IG9zX3VuaXguYzo5MjcKK21zZ2lkICJWaW06IERvdWJsZSBzaWduYWwsIGV4aXRpbmdcbiIKK21zZ3N0ciAiVmltOiBQb2R382pueSBzeWduYbMsIHd5Y2hvZHrqXG4iCisKKyM6IG9zX3VuaXguYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IFphs2FwYbMgtm1pZXJ0ZWxueSBzeWduYbMgJXNcbiIKKworIzogb3NfdW5peC5jOjkzNgorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWxcbiIKK21zZ3N0ciAiVmltOiBaYbNhcGGzILZtaWVydGVsbnkgc3lnbmGzXG4iCisKKyM6IG9zX3VuaXguYzoxMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0b29rICVsZCBtc2VjIgorbXNnc3RyICJPdHdpZXJhbmllIGVrcmFudSBYIHRyd2GzbyAlbGQgbXNlYyIKKworIzogb3NfdW5peC5jOjEyMjYKK21zZ2lkICIiCisiXG4iCisiVmltOiBHb3QgWCBlcnJvclxuIgorbXNnc3RyICIiCisiXG4iCisiVmltOiBEb3N0YbMgYrOxZCBYXG4iCisKKyM6IG9zX3VuaXguYzoxMzM0Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiVGVzdCBla3JhbnUgWCBuaWUgcG93afNksyBzaeoiCisKKyM6IG9zX3VuaXguYzoxNDczCittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRpbWVkIG91dCIKK21zZ3N0ciAiUHLzYmEgb3R3YXJjaWEgZWtyYW51IFggdHJ3YbNhIHpieXQgZLN1Z28iCisKKyM6IG9zX3VuaXguYzozMjI3IG9zX3VuaXguYzozOTA3Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsICIKK21zZ3N0ciAiIgorIlxuIgorIk5pZSBtb2fqIHd5a29uYeYgcG93s29raSAiCisKKyM6IG9zX3VuaXguYzozMjc1Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsIHNoXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOaWUgbW9n6iB3eWtvbmHmIHBvd7Nva2kgc2hcbiIKKworIzogb3NfdW5peC5jOjMyNzkgb3NfdW5peC5jOjM5MTMKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisicG93s29rYSB6d3LzY2mzYSAiCisKKyM6IG9zX3VuaXguYzozNDE0Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5pZSBtb2fqIHN0d29yennmIHBvdG9r83dcbiIKKworIzogb3NfdW5peC5jOjM0MjkKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGZvcmtcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5pZSBtb2fqIHJvemR6aWVsaeYgc2nqXG4iCisKKyM6IG9zX3VuaXguYzozOTIwCittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgdGVybWluYXRlZFxuIgorbXNnc3RyICIiCisiXG4iCisiS29tZW5kYSB6YWtv8WN6b25hXG4iCisKKyM6IG9zX3VuaXguYzo0MTg0IG9zX3VuaXguYzo0MzA5IG9zX3VuaXguYzo1OTc1Cittc2dpZCAiWFNNUCBsb3N0IElDRSBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QIHN0cmFjabMgcG+zsWN6ZW5pZSBJQ0UiCisKKyM6IG9zX3VuaXguYzo1NTU4Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiT3R3YXJjaWUgZWtyYW51IFggbmllIHBvd2lvZLNvIHNp6iIKKworIzogb3NfdW5peC5jOjU4ODAKK21zZ2lkICJYU01QIGhhbmRsaW5nIHNhdmUteW91cnNlbGYgcmVxdWVzdCIKK21zZ3N0ciAiWFNNUCBvYnOzdWd1amUgv7FkYW5pZSBzYW1vemFwaXN1IgorCisjOiBvc191bml4LmM6NTk5OQorbXNnaWQgIlhTTVAgb3BlbmluZyBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QIG90d2llcmEgcG+zsWN6ZW5pZSIKKworIzogb3NfdW5peC5jOjYwMTgKK21zZ2lkICJYU01QIElDRSBjb25uZWN0aW9uIHdhdGNoIGZhaWxlZCIKK21zZ3N0ciAiT2JzZXJ3YWNqYSBwb7OxY3plbmlhIFhTTVAgSUNFIG5pZSBwb3dpb2SzYSBzaeoiCisKKyM6IG9zX3VuaXguYzo2MDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlhTTVAgU21jT3BlbkNvbm5lY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBuaWUgcG93aW9ks28gc2nqOiAlcyIKKworIzogb3Nfdm1zX21tcy5jOjU5Cittc2dpZCAiQXQgbGluZSIKK21zZ3N0ciAiVyB3aWVyc3p1IgorCisjOiBvc193MzJleGUuYzo2NQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIk5pZSBtb2fqIHphcmV6ZXJ3b3dh5iBwYW1p6mNpIGRsYSBsaW5paSBwb2xlY2XxLiIKKworIzogb3NfdzMyZXhlLmM6NjYgb3NfdzMyZXhlLmM6ODkgb3NfdzMyZXhlLmM6MTAwCittc2dpZCAiVklNIEVycm9yIgorbXNnc3RyICJCs7FkIFZJTSIKKworIzogb3NfdzMyZXhlLmM6ODkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICJOaWUgbW9n6iB6YbNhZG93YeYgdmltMzIuZGxsISIKKworIzogb3NfdzMyZXhlLmM6OTkKK21zZ2lkICJDb3VsZCBub3QgZml4IHVwIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHRoZSBETEwhIgorbXNnc3RyICJOaWUgemRvs2GzZW0gcG9wcmF3aeYgd3NrYbxuaWvzdyBmdW5rY2ppIHcgRExMISIKKworIzogb3Nfd2luMTYuYzozNDIgb3Nfd2luMzIuYzozMTk3CisjLCBjLWZvcm1hdAorbXNnaWQgInNoZWxsIHJldHVybmVkICVkIgorbXNnc3RyICJwb3ezb2thIHp3cvNjabNhICVkIgorCisjOiBvc193aW4zMi5jOjI2NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgJXMgZXZlbnRcbiIKK21zZ3N0ciAiVmltOiBaYbNhcGGzIHd5ZGFyemVuaWUgJXNcbiIKKworIzogb3Nfd2luMzIuYzoyNjU3Cittc2dpZCAiY2xvc2UiCittc2dzdHIgInphbWtuaWoiCisKKyM6IG9zX3dpbjMyLmM6MjY1OQorbXNnaWQgImxvZ29mZiIKK21zZ3N0ciAid3lsb2d1aiIKKworIzogb3Nfd2luMzIuYzoyNjYwCittc2dpZCAic2h1dGRvd24iCittc2dzdHIgInpha2/xY3oiCisKKyM6IG9zX3dpbjMyLmM6MzE1MAorbXNnaWQgIkUzNzE6IENvbW1hbmQgbm90IGZvdW5kIgorbXNnc3RyICJFMzcxOiBOaWUgem5hbGV6aW9ubyBrb21lbmR5IgorCisjOiBvc193aW4zMi5jOjMxNjMKK21zZ2lkICIiCisiVklNUlVOLkVYRSBub3QgZm91bmQgaW4geW91ciAkUEFUSC5cbiIKKyJFeHRlcm5hbCBjb21tYW5kcyB3aWxsIG5vdCBwYXVzZSBhZnRlciBjb21wbGV0aW9uLlxuIgorIlNlZSAgOmhlbHAgd2luMzItdmltcnVuICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJWSU1SVU4uRVhFIG5pZSB6bmFsZXppb25vIHcgdHdvaW0gJFBBVEguXG4iCisiWmV3bup0cnpuZSBrb21lbmR5IG5pZSBi6mSxIHdzdHJ6eW1hbmUgcG8gd3lrb25hbml1LlxuIgorIlBhdHJ6ICA6aGVscCB3aW0zMi12aW1ydW4gIGFieSBvdHJ6eW1h5iB3aepjZWogaW5mb3JtYWNqaS4iCisKKyM6IG9zX3dpbjMyLmM6MzE2NgorbXNnaWQgIlZpbSBXYXJuaW5nIgorbXNnc3RyICJWaW0gT3N0cnplv2VuaWUiCisKKyM6IHF1aWNrZml4LmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzI6IFRvbyBtYW55ICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MjogWmJ5dCB3aWVsZSAlJSVjIHcgY2mxZ3UgZm9ybWF0dWqxY3ltIgorCisjOiBxdWlja2ZpeC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MzogTmllb2N6ZWtpd2FuZSAlJSVjIHcgY2mxZ3UgZm9ybWF0dWqxY3ltIgorCisjOiBxdWlja2ZpeC5jOjMyNQorbXNnaWQgIkUzNzQ6IE1pc3NpbmcgXSBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc0OiBCcmFrIF0gdyBjabFndSBmb3JtYXR1arFjeW0iCisKKyM6IHF1aWNrZml4LmM6MzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogTmlld3Nwb21hZ2FuZSAlJSVjIHcgY2mxZ3UgZm9ybWF0dWqxY3ltIgorCisjOiBxdWlja2ZpeC5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiCittc2dzdHIgIkUzNzY6IE5pZXBvcHJhd25lICUlJWMgdyBwcmVmaWtzaWUgY2mxZ3UgZm9ybWF0dWqxY2VnbyIKKworIzogcXVpY2tmaXguYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6IE5pZXBvcHJhd25lICUlJWMgdyBjabFndSBmb3JtYXR1arFjeW0iCisKKyM6IHF1aWNrZml4LmM6MzkxCittc2dpZCAiRTM3ODogJ2Vycm9yZm9ybWF0JyBjb250YWlucyBubyBwYXR0ZXJuIgorbXNnc3RyICJFMzc4OiAnZXJyb3Jmb3JtYXQnIG5pZSB6YXdpZXJhIHd6b3JjYSIKKworIzogcXVpY2tmaXguYzo1MDEKK21zZ2lkICJFMzc5OiBNaXNzaW5nIG9yIGVtcHR5IGRpcmVjdG9yeSBuYW1lIgorbXNnc3RyICJFMzc5OiBQdXN0YSBuYXp3YSBrYXRhbG9ndSBsdWIgamVqIGJyYWsiCisKKyM6IHF1aWNrZml4LmM6OTkwCittc2dpZCAiRTU1MzogTm8gbW9yZSBpdGVtcyIKK21zZ3N0ciAiRTU1MzogTmllIG1hIHdp6mNlaiBlbGVtZW5083ciCisKKyM6IHF1aWNrZml4LmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICIoJWQgb2YgJWQpJXMlczogIgorbXNnc3RyICIoJWQgeiAlZCklcyVzOiAiCisKKyM6IHF1aWNrZml4LmM6MTIzMQorbXNnaWQgIiAobGluZSBkZWxldGVkKSIKK21zZ3N0ciAiICh3aWVyc3ogc2thc293YW55KSIKKworIzogcXVpY2tmaXguYzoxNDQ0Cittc2dpZCAiRTM4MDogQXQgYm90dG9tIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgwOiBOYSBkb2xlIHN0b3N1IHF1aWNrZml4IgorCisjOiBxdWlja2ZpeC5jOjE0NTMKK21zZ2lkICJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODE6IE5hIGfzcnplIHN0b3N1IHF1aWNrZml4IgorCisjOiBxdWlja2ZpeC5jOjE0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgbGlzdCAlZCBvZiAlZDsgJWQgZXJyb3JzIgorbXNnc3RyICJsaXN0YSBis+pk83cgJWQgeiAlZDsgJWQgYrPqZPN3IgorCisjOiBxdWlja2ZpeC5jOjE5NDMKK21zZ2lkICJFMzgyOiBDYW5ub3Qgd3JpdGUsICdidWZ0eXBlJyBvcHRpb24gaXMgc2V0IgorbXNnc3RyICJFMzgyOiBOaWUgbW9n6iB6YXBpc2HmLCBvcGNqYSAnYnVmdHlwZScgamVzdCB1c3Rhd2lvbmEiCisKKyM6IHJlZ2V4cC5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY5OiBpbnZhbGlkIGl0ZW0gaW4gJXMlJVtdIgorbXNnc3RyICJFMzY5OiBOaWV3s2G2Y2l3eSBlbGVtZW50IHcgJXMlJVtdIgorCisjOiByZWdleHAuYzo4NDAKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiBaYnl0IGSzdWdpIHd6b3J6ZWMiCisKKyM6IHJlZ2V4cC5jOjEwMTEKK21zZ2lkICJFNTA6IFRvbyBtYW55IFxceigiCittc2dzdHIgIkU1MDogWmJ5dCB3aWVsZSBcXHooIgorCisjOiByZWdleHAuYzoxMDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MTogVG9vIG1hbnkgJXMoIgorbXNnc3RyICJFNTE6IFpieXQgd2llbGUgJXMoIgorCisjOiByZWdleHAuYzoxMDc5Cittc2dpZCAiRTUyOiBVbm1hdGNoZWQgXFx6KCIKK21zZ3N0ciAiRTUyOiBOaWVzcGFyb3dhbnkgXFx6KCIKKworIzogcmVnZXhwLmM6MTA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTM6IFVubWF0Y2hlZCAlcyUlKCIKK21zZ3N0ciAiRTUzOiBOaWVzcGFyb3dhbnkgJXMlJSgiCisKKyM6IHJlZ2V4cC5jOjEwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU0OiBVbm1hdGNoZWQgJXMoIgorbXNnc3RyICJFNTQ6IE5pZXNwYXJvd2FueSAlcygiCisKKyM6IHJlZ2V4cC5jOjEwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU1OiBVbm1hdGNoZWQgJXMpIgorbXNnc3RyICJFNTU6IE5pZXNwYXJvd2FueSAlcykiCisKKyM6IHJlZ2V4cC5jOjEyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2OiAlcyogb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU2OiBvcGVyYW5kICVzKiBt82ezIGJ55iBwdXN0eSIKKworIzogcmVnZXhwLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTc6ICVzKyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTc6IG9wZXJhbmQgJXMrIG3zZ7MgYnnmIHB1c3R5IgorCisjOiByZWdleHAuYzoxMzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTogaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXNAIgorbXNnc3RyICJFNTk6IG5pZWRvendvbG9ueSB6bmFrIHBvICVzQCIKKworIzogcmVnZXhwLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTg6ICVzeyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTg6IG9wZXJhbmQgJXN7IG3zZ7MgYnnmIHB1c3R5IgorCisjOiByZWdleHAuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDogVG9vIG1hbnkgY29tcGxleCAlc3suLi59cyIKK21zZ3N0ciAiRTYwOiBaYnl0IHdpZWxlIHqzb79vbnljaCAlc3suLi59IgorCisjOiByZWdleHAuYzoxMzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTogTmVzdGVkICVzKiIKK21zZ3N0ciAiRTYxOiBaYWduaWW/ZL9vbmUgJXMqIgorCisjOiByZWdleHAuYzoxMzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjogTmVzdGVkICVzJWMiCittc2dzdHIgIkU2MjogWmFnbmllv2S/b25lICVzJWMiCisKKyM6IHJlZ2V4cC5jOjE0OTMKK21zZ2lkICJFNjM6IGludmFsaWQgdXNlIG9mIFxcXyIKK21zZ3N0ciAiRTYzOiBOaWVkb3p3b2xvbmUgdb95Y2llIFxcXyIKKworIzogcmVnZXhwLmM6MTUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjQ6ICVzJWMgZm9sbG93cyBub3RoaW5nIgorbXNnc3RyICJFNjQ6ICVzJWMgcG8gbmljenltIgorCisjOiByZWdleHAuYzoxNTk0Cittc2dpZCAiRTY1OiBJbGxlZ2FsIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICJFNjU6IE5pZXezYbZjaXdlIG9kd2+zYW5pZSB3c3RlY3puZSIKKworIzogcmVnZXhwLmM6MTYwNworbXNnaWQgIkU2NjogXFx6KCBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNjY6IFxceiggamVzdCBuaWVkb3p3b2xvbmUgdyB0eW0gbWllanNjdSIKKworIzogcmVnZXhwLmM6MTYyNgorbXNnaWQgIkU2NzogXFx6MSBldCBhbC4gbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY3OiBcXHoxIGkgcG9kb2JuZSBzsSBuaWVkb3p3b2xvbmUgdyB0eW0gbWllanNjdSIKKworIzogcmVnZXhwLmM6MTYzNworbXNnaWQgIkU2ODogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFx6IgorbXNnc3RyICJFNjg6IG5pZWRvcHVzemN6YWxueSB6bmFrIHBvIFxceiIKKworIzogcmVnZXhwLmM6MTY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjk6IE1pc3NpbmcgXSBhZnRlciAlcyUlWyIKK21zZ3N0ciAiRTY5OiBCcmFrIF0gcG8gJXMlJVsiCisKKyM6IHJlZ2V4cC5jOjE3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTcwOiBFbXB0eSAlcyUlW10iCittc2dzdHIgIkU3MDogUHVzdHkgJXMlJVtdIgorCisjOiByZWdleHAuYzoxNzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MTogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXMlJSIKK21zZ3N0ciAiRTcxOiBOaWVkb3p3b2xvbnkgem5hayBwbyAlcyUlIgorCisjOiByZWdleHAuYzoyNTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTQ6IFN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICJFNTU0OiBCs7FkIHNrs2FkbmkgdyAlc3suLi59IgorCisjOiByZWdleHAuYzoyODY1IHJlZ2V4cC5jOjMwMTgKK21zZ2lkICJFMzYxOiBDcmFzaCBpbnRlcmNlcHRlZDsgcmVnZXhwIHRvbyBjb21wbGV4PyIKK21zZ3N0ciAiRTM2MTogUHJ6ZWNod3ljb25vIHphs2FtYW5pZTsgcmVnZXhwIHpieXQgerNvv29ueT8iCisKKyM6IHJlZ2V4cC5jOjMwMDYgcmVnZXhwLmM6MzAxNQorbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2Mzogd3pvcnplYyBzcG93b2Rvd2GzIGKzsWQgb3V0LW9mLXN0YWNrIgorCisjOiByZWdleHAuYzozMjYwCittc2dpZCAiRXh0ZXJuYWwgc3VibWF0Y2hlczpcbiIKK21zZ3N0ciAiWmV3bup0cnpuZSBwb2Rkb3Bhc293YW5pYTpcbiIKKworIzogc2NyZWVuLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIrLS0lM2xkIGxpbmVzIGZvbGRlZCAiCittc2dzdHIgIistLSUzbGQgd2llcnN6eSB6d2luaep0byAiCisKKyM6IHNjcmVlbi5jOjc5OTYKK21zZ2lkICIgVlJFUExBQ0UiCittc2dzdHIgIiBWLVpBTUlBTkEiCisKKyM6IHNjcmVlbi5jOjgwMDAKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIFpBTUlBTkEiCisKKyM6IHNjcmVlbi5jOjgwMDUKK21zZ2lkICIgUkVWRVJTRSIKK21zZ3N0ciAiIE5FR0FUWVciCisKKyM6IHNjcmVlbi5jOjgwMDcKK21zZ2lkICIgSU5TRVJUIgorbXNnc3RyICIgV1BST1dBRFpBTklFIgorCisjOiBzY3JlZW4uYzo4MDEwCittc2dpZCAiIChpbnNlcnQpIgorbXNnc3RyICIgKHdwcm93YWR6YW5pZSkiCisKKyM6IHNjcmVlbi5jOjgwMTIKK21zZ2lkICIgKHJlcGxhY2UpIgorbXNnc3RyICIgKHphbWlhbmEpIgorCisjOiBzY3JlZW4uYzo4MDE0Cittc2dpZCAiICh2cmVwbGFjZSkiCittc2dzdHIgIiAodi16YW1pYW5hKSIKKworIzogc2NyZWVuLmM6ODAxNworbXNnaWQgIiBIZWJyZXciCittc2dzdHIgIiBIZWJyYWpza2kiCisKKyM6IHNjcmVlbi5jOjgwMjgKK21zZ2lkICIgQXJhYmljIgorbXNnc3RyICIgQXJhYnNraSIKKworIzogc2NyZWVuLmM6ODAzMQorbXNnaWQgIiAobGFuZykiCittc2dzdHIgIiAoaup6eWspIgorCisjOiBzY3JlZW4uYzo4MDM1Cittc2dpZCAiIChwYXN0ZSkiCittc2dzdHIgIiAod2tsZWphbmllKSIKKworIzogc2NyZWVuLmM6ODA0OAorbXNnaWQgIiBWSVNVQUwiCittc2dzdHIgIiBXSVpVQUxOWSIKKworIzogc2NyZWVuLmM6ODA0OQorbXNnaWQgIiBWSVNVQUwgTElORSIKK21zZ3N0ciAiIFdJWlVBTE5ZIExJTklPV1kiCisKKyM6IHNjcmVlbi5jOjgwNTAKK21zZ2lkICIgVklTVUFMIEJMT0NLIgorbXNnc3RyICIgV0laVUFMTlkgQkxPS09XWSIKKworIzogc2NyZWVuLmM6ODA1MQorbXNnaWQgIiBTRUxFQ1QiCittc2dzdHIgIiBaQVpOQUNaQU5JRSIKKworIzogc2NyZWVuLmM6ODA1MgorbXNnaWQgIiBTRUxFQ1QgTElORSIKK21zZ3N0ciAiIFpBWk5BQ1pBTklFIExJTklPV0UiCisKKyM6IHNjcmVlbi5jOjgwNTMKK21zZ2lkICIgU0VMRUNUIEJMT0NLIgorbXNnc3RyICIgWkFaTkFDWkFOSUUgQkxPS09XRSIKKworIzogc2NyZWVuLmM6ODA2OCBzY3JlZW4uYzo4MTMxCittc2dpZCAicmVjb3JkaW5nIgorbXNnc3RyICJ6YXBpcyIKKworIzogc2VhcmNoLmM6MzcKK21zZ2lkICJzZWFyY2ggaGl0IFRPUCwgY29udGludWluZyBhdCBCT1RUT00iCittc2dzdHIgInN6dWthbmllIGRvYmmzbyBH01JZOyBrb250eW51YWNqYSBvZCBLT9FDQSIKKworIzogc2VhcmNoLmM6MzgKK21zZ2lkICJzZWFyY2ggaGl0IEJPVFRPTSwgY29udGludWluZyBhdCBUT1AiCittc2dzdHIgInN6dWthbmllIGRvYmmzbyBLT9FDQTsga29udHludWFjamEgb2QgR9NSWSIKKworIzogc2VhcmNoLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IE5pZXezYbZjaXd5IGNpsWcgZG8gc3p1a2FuaWE6ICVzIgorCisjOiBzZWFyY2guYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg0OiBzenVrYW5pZSBkb2Jps28gR9NSWSBiZXogem5hbGV6aWVuaWE6ICVzIgorCisjOiBzZWFyY2guYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NTogc2VhcmNoIGhpdCBCT1RUT00gd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg1OiBzenVrYW5pZSBkb2Jps28gS0/RQ0EgYmV6IHpuYWxlemllbmlhIDogJXMiCisKKyM6IHNlYXJjaC5jOjEyNDkKK21zZ2lkICJFMzg2OiBFeHBlY3RlZCAnPycgb3IgJy8nICBhZnRlciAnOyciCittc2dzdHIgIkUzODY6IE9jemVrdWrqICc/JyBsdWIgJy8nIHBvICc7JyIKKworIzogc2VhcmNoLmM6Mzc1OAorbXNnaWQgIiAoaW5jbHVkZXMgcHJldmlvdXNseSBsaXN0ZWQgbWF0Y2gpIgorbXNnc3RyICIgKHphd2llcmEgcG9wcnplZG5pbyB3eW1pZW5pb25lIGRvcGFzb3dhbmllKSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNzc4Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIFphd2FydGUgcGxpa2kgIgorCisjOiBzZWFyY2guYzozNzgwCittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAibmllIHpuYWxlemlvbm8iCisKKyM6IHNlYXJjaC5jOjM3ODEKK21zZ2lkICJpbiBwYXRoIC0tLVxuIgorbXNnc3RyICJ3IHRyb3BpZSAtLS1cbiIKKworIzogc2VhcmNoLmM6MzgyMAorbXNnaWQgIiAgKEFscmVhZHkgbGlzdGVkKSIKK21zZ3N0ciAiICAoSnW/IHd5bWllbmlvbmUpIgorCisjOiBzZWFyY2guYzozODIyCittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiAgTklFIFpOQUxFWklPTk8iCisKKyM6IHNlYXJjaC5jOjM4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiCittc2dzdHIgIlByemVnbLFkIHezsWN6b25lZ28gcGxpa3U6ICVzIgorCisjOiBzZWFyY2guYzo0MDkyCittc2dpZCAiRTM4NzogTWF0Y2ggaXMgb24gY3VycmVudCBsaW5lIgorbXNnc3RyICJFMzg3OiBXem9yemVjIHBhc3VqZSB3IGJpZb+xY3ltIHdpZXJzenUiCisKKyM6IHNlYXJjaC5jOjQyMzUKK21zZ2lkICJBbGwgaW5jbHVkZWQgZmlsZXMgd2VyZSBmb3VuZCIKK21zZ3N0ciAiV3N6ZWxraWUgd7OxY3phbmUgcGxpa2kgb2RuYWxlemlvbm8iCisKKyM6IHNlYXJjaC5jOjQyMzcKK21zZ2lkICJObyBpbmNsdWRlZCBmaWxlcyIKK21zZ3N0ciAiQnJhayB3s7FjemFueWNoIHBsaWvzdyIKKworIzogc2VhcmNoLmM6NDI1MworbXNnaWQgIkUzODg6IENvdWxkbid0IGZpbmQgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRTM4ODogTmllIHpuYWxherNlbSBkZWZpbmljamkiCisKKyM6IHNlYXJjaC5jOjQyNTUKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IE5pZSB6bmFsYXqzZW0gd3pvcmNhIgorCisjOiBzeW50YXguYzozMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTA6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMzkwOiBOaWVkb3p3b2xvbnkgYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzozMjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTE6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkxOiBOaWUgbWEgdGFraWVnbyBrbGFzdHJhIHNrs2Fkbmk6ICVzIgorCisjOiBzeW50YXguYzozMzk0Cittc2dpZCAiTm8gU3ludGF4IGl0ZW1zIGRlZmluZWQgZm9yIHRoaXMgYnVmZmVyIgorbXNnc3RyICJCcmFrIGVsZW1lbnTzdyBza7NhZG5pIG9rcmW2bG9ueWNoIGRsYSB0ZWdvIGJ1Zm9yYSIKKworIzogc3ludGF4LmM6MzQwMgorbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAic3luY2hyb25pemFjamEga29tZW50YXJ6eSB3IHN0eWx1IEMiCisKKyM6IHN5bnRheC5jOjM0MTAKK21zZ2lkICJubyBzeW5jaW5nIgorbXNnc3RyICJicmFrIHN5bmNocm9uaXphY2ppIgorCisjOiBzeW50YXguYzozNDEzCittc2dpZCAic3luY2luZyBzdGFydHMgIgorbXNnc3RyICJwb2N6sXRlayBzeW5jaHJvbml6YWNqaSIKKworIzogc3ludGF4LmM6MzQxNSBzeW50YXguYzozNDkwCittc2dpZCAiIGxpbmVzIGJlZm9yZSB0b3AgbGluZSIKK21zZ3N0ciAiIHdpZXJzenkgcHJ6ZWQgZ/NybrEgbGluabEiCisKKyM6IHN5bnRheC5jOjM0MjAKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBFbGVtZW50eSBzeW5jaHJvbml6YWNqaSBza7NhZG5pIC0tLSIKKworIzogc3ludGF4LmM6MzQyNQorbXNnaWQgIiIKKyJcbiIKKyJzeW5jaW5nIG9uIGl0ZW1zIgorbXNnc3RyICIiCisiXG4iCisic3luY2hyb25penVq6iBuYSBlbGVtZW50YWNoIgorCisjOiBzeW50YXguYzozNDMxCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEVsZW1lbnR5IHNrs2FkbmkgLS0tIgorCisjOiBzeW50YXguYzozNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTI6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkyOiBOaWUgbWEgdGFraWVnbyBrbGFzdHJhIHNrs2Fkbmk6ICVzIgorCisjOiBzeW50YXguYzozNDgwCittc2dpZCAibWluaW1hbCAiCittc2dzdHIgIm1pbmltYWxuaWUgIgorCisjOiBzeW50YXguYzozNDg3Cittc2dpZCAibWF4aW1hbCAiCittc2dzdHIgIm1ha3N5bWFsbmllICIKKworIzogc3ludGF4LmM6MzQ5OQorbXNnaWQgIjsgbWF0Y2ggIgorbXNnc3RyICI7IHBhc3VqZSAiCisKKyM6IHN5bnRheC5jOjM1MDEKK21zZ2lkICIgbGluZSBicmVha3MiCittc2dzdHIgInpuYWvzdyBub3dlZ28gd2llcnN6YSIKKworIzogc3ludGF4LmM6NDEzNQorbXNnaWQgIkUzOTM6IGdyb3VwW3RdaGVyZSBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5MzogZ3JvdXBbdF1oZXJlIG5pZWRvendvbG9uZSB3IHR5bSBtaWVqc2N1IgorCisjOiBzeW50YXguYzo0MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTQ6IERpZG4ndCBmaW5kIHJlZ2lvbiBpdGVtIGZvciAlcyIKK21zZ3N0ciAiRTM5NDogTmllIHpuYWxherNlbSBlbGVtZW5083cgcmVnaW9udSBkbGEgJXMiCisKKyM6IHN5bnRheC5jOjQxODcKK21zZ2lkICJFMzk1OiBjb250YWlucyBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NTogYXJndW1lbnQgY29udGFpbnMgbmllZG96d29sb255IHcgdHltIG1pZWpzY3UiCisKKyM6IHN5bnRheC5jOjQxOTgKK21zZ2lkICJFMzk2OiBjb250YWluZWRpbiBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NjogYXJndW1lbnQgY29udGFpbmVkaW4gbmllZG96d29sb255IHcgdHltIG1pZWpzY3UiCisKKyM6IHN5bnRheC5jOjQyNzYKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5NzogV3ltYWdhbmEgbmF6d2EgcGxpa3UiCisKKyM6IHN5bnRheC5jOjQ2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiBCcmFrICc9JzogJXMiCisKKyM6IHN5bnRheC5jOjQ3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5OTogTm90IGVub3VnaCBhcmd1bWVudHM6IHN5bnRheCByZWdpb24gJXMiCittc2dzdHIgIkUzOTk6IFphIG1hs28gYXJndW1lbnTzdzogc3ludGF4IHJlZ2lvbiAlcyIKKworIzogc3ludGF4LmM6NTEwMworbXNnaWQgIkU0MDA6IE5vIGNsdXN0ZXIgc3BlY2lmaWVkIgorbXNnc3RyICJFNDAwOiBCcmFrIHNwZWN5ZmlrYWNqaSBrbGFzdHJhIgorCisjOiBzeW50YXguYzo1MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDE6IFBhdHRlcm4gZGVsaW1pdGVyIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MDE6IEJyYWsgb2dyYW5pY3puaWthIHd6b3JjYTogJXMiCisKKyM6IHN5bnRheC5jOjUyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMjogR2FyYmFnZSBhZnRlciBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRTQwMjogpm1pZWNpIHBvIHd6b3JjdTogJXMiCisKKyM6IHN5bnRheC5jOjUzMDUKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiBzeW50YXggc3luYzogd2llbG9rcm90bmllIHBvZGFuZSB3em9yY2Uga29udHludWFjamkgd2llcnN6YSIKKworIzogc3ludGF4LmM6NTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA0OiBJbGxlZ2FsIGFyZ3VtZW50czogJXMiCittc2dzdHIgIkU0MDQ6IE5pZWRvendvbG9uZSBhcmd1bWVudHk6ICVzIgorCisjOiBzeW50YXguYzo1NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDU6IE1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MDU6IEJyYWsgem5ha3UgcvN3bm+2Y2k6ICVzIgorCisjOiBzeW50YXguYzo1NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDY6IEVtcHR5IGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQwNjogUHVzdHkgYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzo1NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDc6ICVzIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU0MDc6ICVzIGplc3QgbmllZG96d29sb25lIHcgdHltIG1pZWpzY3UiCisKKyM6IHN5bnRheC5jOjU0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwODogJXMgbXVzdCBiZSBmaXJzdCBpbiBjb250YWlucyBsaXN0IgorbXNnc3RyICJFNDA4OiAlcyBtdXNpIGJ55iBwaWVyd3N6ZSB3IGxptmNpZSBjb250YWlucyIKKworIzogc3ludGF4LmM6NTUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA5OiBVbmtub3duIGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFNDA5OiBOaWV6bmFuYSBuYXp3YSBncnVweTogJXMiCisKKyM6IHN5bnRheC5jOjU3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiBOaWV3s2G2Y2l3YSBwb2Rrb21lbmRhIDpzeW50YXggOiAlcyIKKworIzogc3ludGF4LmM6NjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDExOiBoaWdobGlnaHQgZ3JvdXAgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQxMTogbmllIHpuYWxlemlvbm8gZ3J1cHkgcG9ktndpZXRsYW5pYTogJXMiCisKKyM6IHN5bnRheC5jOjYxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMjogTm90IGVub3VnaCBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTI6IFpieXQgbWGzbyBhcmd1bWVudPN3OiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTM6IFRvbyBtYW55IGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMzogWmJ5dCB3aWVsZSBhcmd1bWVudPN3OiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTg3Cittc2dpZCAiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIgorbXNnc3RyICJFNDE0OiBncnVwYSBtYSB1c3Rhd2llbmlhOyB6aWdub3Jvd2FuZSBwb2SzsWN6ZW5pZSBwb2S2d2lldGxhbmlhIgorCisjOiBzeW50YXguYzo2MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTU6IHVuZXhwZWN0ZWQgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTU6IG5pZW9jemVraXdhbnkgem5hayBy83dub7ZjaTogJXMiCisKKyM6IHN5bnRheC5jOjYzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNjogbWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNjogYnJhayB6bmFrdSBy83dub7ZjaTogJXMiCisKKyM6IHN5bnRheC5jOjYzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MTc6IGJyYWsgYXJndW1lbnR1OiAlcyIKKworIzogc3ludGF4LmM6NjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJFNDE4OiBJbGxlZ2FsIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTQxODogTmllZG96d29sb25hIHdhcnRvtuY6ICVzIgorCisjOiBzeW50YXguYzo2NTM2Cittc2dpZCAiRTQxOTogRkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQxOTogS29sb3IgRkcgbmllem5hbnkiCisKKyM6IHN5bnRheC5jOjY1NDcKK21zZ2lkICJFNDIwOiBCRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDIwOiBLb2xvciBCRyBuaWV6bmFueSIKKworIzogc3ludGF4LmM6NjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6IE5hendhIGx1YiBsaWN6YmEga29sb3J1IG5pZXJvenBvem5hbmE6ICVzIgorCisjOiBzeW50YXguYzo2ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjI6IHRlcm1pbmFsIGNvZGUgdG9vIGxvbmc6ICVzIgorbXNnc3RyICJFNDIyOiB6YSBks3VnaSBrb2QgdGVybWluYWxhOiAlcyIKKworIzogc3ludGF4LmM6Njg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzogTmllZG96d29sb255IGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6NzM5MAorbXNnaWQgIkU0MjQ6IFRvbyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBpbiB1c2UiCittc2dzdHIgIkU0MjQ6IFpieXQgd2llbGUgcvO/bnljaCBhdHJ5YnV083cgcG9ka3JltmxhbmlhIHcgdb95Y2l1IgorCisjOiBzeW50YXguYzo3OTExCittc2dpZCAiRTY2OTogVW5wcmludGFibGUgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUiCittc2dzdHIgIkU2Njk6IE5pZWRydWtvd2Fsbnkgem5hayB3IG5hendpZSBncnVweSIKKworIy4gVGhpcyBpcyBhbiBlcnJvciwgYnV0IHNpbmNlIHRoZXJlIHByZXZpb3VzbHkgd2FzIG5vIGNoZWNrIG9ubHkKKyMuICogZ2l2ZSBhIHdhcm5pbmcuCisjOiBzeW50YXguYzo3OTE4Cittc2dpZCAiVzE4OiBJbnZhbGlkIGNoYXJhY3RlciBpbiBncm91cCBuYW1lIgorbXNnc3RyICJXMTg6IG5pZXByYXdpZLNvd3kgem5hayB3IG5hendpZSBncnVweSIKKworIzogdGFnLmM6OTAKK21zZ2lkICJFNTU1OiBhdCBib3R0b20gb2YgdGFnIHN0YWNrIgorbXNnc3RyICJFNTU1OiBuYSBkb2xlIHN0b3N1IHpuYWN6bmlr83ciCisKKyM6IHRhZy5jOjkxCittc2dpZCAiRTU1NjogYXQgdG9wIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiRTU1NjogbmEgZ/NyemUgc3Rvc3Ugem5hY3puaWvzdyIKKworIzogdGFnLmM6NDEyCittc2dpZCAiRTQyNTogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0MjU6IE5pZSBtb79uYSBwcnplarbmIHByemVkIHBpZXJ3c3p5IHBhc3VqsWN5IHpuYWN6bmlrIgorCisjOiB0YWcuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6IG5pZSB6bmFsZXppb25vIHpuYWN6bmlrYTogJXMiCisKKyM6IHRhZy5jOjU4MworbXNnaWQgIiAgIyBwcmkga2luZCB0YWciCittc2dzdHIgIiAgIyBwcmkgcm9kemFqIHpuYWN6bmlrIgorCisjOiB0YWcuYzo1ODYKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgInBsaWtcbiIKKworIy4KKyMuICogQXNrIHRvIHNlbGVjdCBhIHRhZyBmcm9tIHRoZSBsaXN0LgorIy4gKiBXaGVuIHVzaW5nICI6c2lsZW50IiBhc3N1bWUgdGhhdCA8Q1I+IHdhcyBlbnRlcmVkLgorIy4KKyM6IHRhZy5jOjc0NAorbXNnaWQgIkVudGVyIG5yIG9mIGNob2ljZSAoPENSPiB0byBhYm9ydCk6ICIKK21zZ3N0ciAiV3Byb3dhZLwgbnIgd3lib3J1ICg8Q1I+IHByemVyeXdhKTogIgorCisjOiB0YWcuYzo3ODQKK21zZ2lkICJFNDI3OiBUaGVyZSBpcyBvbmx5IG9uZSBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjc6IFBhc3VqZSB0eWxrbyBqZWRlbiB6bmFjem5payIKKworIzogdGFnLmM6Nzg2Cittc2dpZCAiRTQyODogQ2Fubm90IGdvIGJleW9uZCBsYXN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyODogTmllIG1vv25hIHByemVqtuYgemEgb3N0YXRuaSBwYXN1arFjeSB6bmFjem5payIKKworIzogdGFnLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJQbGlrIFwiJXNcIiBuaWUgaXN0bmllamUiCisKKyMuIEdpdmUgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIHRhZ3MKKyM6IHRhZy5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJWQgb2YgJWQlcyIKK21zZ3N0ciAiem5hY3puaWsgJWQgeiAlZCVzIgorCisjOiB0YWcuYzo4MjYKK21zZ2lkICIgb3IgbW9yZSIKK21zZ3N0ciAiIGx1YiB3aepjZWoiCisKKyM6IHRhZy5jOjgyOAorbXNnaWQgIiAgVXNpbmcgdGFnIHdpdGggZGlmZmVyZW50IGNhc2UhIgorbXNnc3RyICIgIFW/eXdhbSB6bmFjem5pa2EgbyBvZG1pZW5uZWogd2llbGtvtmNpIGxpdGVyISIKKworIzogdGFnLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Mjk6IEZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFNDI5OiBQbGlrIFwiJXNcIiBuaWUgaXN0bmllamUiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6OTQxCittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyBETyB6bmFjem5payAgT0Qgd2llcnN6YSAgICAgIHcgcGxpa3UvdGVrtmNpZSIKKworIzogdGFnLmM6MTM2MworIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICJTenVrYW0gdyBwbGlrdSB6bmFjem5pa/N3ICVzIgorCisjOiB0YWcuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzA6IFRhZyBmaWxlIHBhdGggdHJ1bmNhdGVkIGZvciAlc1xuIgorbXNnc3RyICJFNDMwOiBUcm9wIHN6dWthbmlhIHBsaWt1IHpuYWN6bmlr83cgb2Jjaep0eSBkbGEgJXNcbiIKKworIzogdGFnLmM6MjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogQrOxZCBmb3JtYXR1IHcgcGxpa3Ugem5hY3puaWvzdyBcIiVzXCIiCisKKyM6IHRhZy5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICJQcnplZCBiYWp0ZW0gJWxkIgorCisjOiB0YWcuYzoyMjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzI6IFRhZ3MgZmlsZSBub3Qgc29ydGVkOiAlcyIKK21zZ3N0ciAiRTQzMjogUGxpayB6bmFjem5pa/N3IG5pZXVwb3J6sWRrb3dhbnk6ICVzIgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MjI4MAorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzogQnJhayBwbGlrdSB6bmFjem5pa/N3IgorCisjOiB0YWcuYzozMDE2Cittc2dpZCAiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIKK21zZ3N0ciAiRTQzNDogTmllIG1vZ+ogem5hbGW85iB3em9yY2Egem5hY3puaWthIgorCisjOiB0YWcuYzozMDI3Cittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiBOaWUgem5hbGF6s2VtIHpuYWN6bmlrYSAtIHR5bGtvIHpnYWR1auohIgorCisjOiB0ZXJtLmM6MTc1OQorbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiJyBuaWV6bmFueS4gTW+/bGl3ZSB0eXB5IHdidWRvd2FueWNoIHRlcm1pbmFsaToiCisKKyM6IHRlcm0uYzoxNzgzCittc2dpZCAiZGVmYXVsdGluZyB0byAnIgorbXNnc3RyICJkb215tmxuaWUgamVzdCAnIgorCisjOiB0ZXJtLmM6MjE0MQorbXNnaWQgIkU1NTc6IENhbm5vdCBvcGVuIHRlcm1jYXAgZmlsZSIKK21zZ3N0ciAiRTU1NzogTmllIG1vZ+ogb3R3b3J6eeYgcGxpa3UgdGVybWNhcCIKKworIzogdGVybS5jOjIxNDUKK21zZ2lkICJFNTU4OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWluZm8iCittc2dzdHIgIkU1NTg6IE5pZSBtYSBvcGlzdSB0YWtpZWdvIHRlcm1pbmFsYSB3IHRlcm1pbmZvIgorCisjOiB0ZXJtLmM6MjE0NworbXNnaWQgIkU1NTk6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNTU5OiBOaWUgbWEgb3Bpc3UgdGFraWVnbyB0ZXJtaW5hbGEgdyB0ZXJtY2FwIgorCisjOiB0ZXJtLmM6MjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDM2OiBObyBcIiVzXCIgZW50cnkgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTQzNjogQnJhayBvcGlzdSBcIiVzXCIgdyB0ZXJtY2FwIgorCisjOiB0ZXJtLmM6Mjc4MAorbXNnaWQgIkU0Mzc6IHRlcm1pbmFsIGNhcGFiaWxpdHkgXCJjbVwiIHJlcXVpcmVkIgorbXNnc3RyICJFNDM3OiB3eW1hZ2FuYSB6ZG9sbm+25iBcImNtXCIgdGVybWluYWxhIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0OTkwCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBLbGF3aXN6ZSB0ZXJtaW5hbGEgLS0tIgorCisjOiB1aS5jOjI1OAorbXNnaWQgIm5ldyBzaGVsbCBzdGFydGVkXG4iCittc2dzdHIgInVydWNob21pb25vIG5vd7EgcG93s29r6lxuIgorCisjOiB1aS5jOjE4NDEKK21zZ2lkICJWaW06IEVycm9yIHJlYWRpbmcgaW5wdXQsIGV4aXRpbmcuLi5cbiIKK21zZ3N0ciAiVmltOiBCs7FkIHBvZGN6YXMgd2N6eXR5d2FuaWEgd2VqtmNpYSwga2/xY3rqLi4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6NDA1Cittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICJDb2ZuaepjaWUgbmllbW+/bGl3ZTsgbWltbyB0byBrb250eW51dWrqIgorCisjOiB1bmRvLmM6NTYxCittc2dpZCAiRTQzODogdV91bmRvOiBsaW5lIG51bWJlcnMgd3JvbmciCittc2dzdHIgIkU0Mzg6IHVfdW5kbzogbmlld7NhtmNpd2UgbnVtZXJ5IHdpZXJzenkiCisKKyM6IHVuZG8uYzo3NTcKK21zZ2lkICIxIGNoYW5nZSIKK21zZ3N0ciAiMSB6bWlhbmEiCisKKyM6IHVuZG8uYzo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYW5nZXMiCittc2dzdHIgIiVsZCB6bWlhbiIKKworIzogdW5kby5jOjgxMgorbXNnaWQgIkU0Mzk6IHVuZG8gbGlzdCBjb3JydXB0IgorbXNnc3RyICJFNDM5OiB1c3prb2R6b25hIGxpc3RhIGNvZmFuaWEiCisKKyM6IHVuZG8uYzo4NDQKK21zZ2lkICJFNDQwOiB1bmRvIGxpbmUgbWlzc2luZyIKK21zZ3N0ciAiRTQ0MDogYnJhayB3aWVyc3phIGNvZmFuaWEiCisKKyMuIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMKKyM6IHZlcnNpb24uYzoxNzY5Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYvMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMTYvMzIgYml0b3dhIHdlcnNqYSBHVUkgZGxhIE1TLVdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzoxNzcxCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzIgYml0b3dhIHdlcnNqYSBHVUkgZGxhIE1TLVdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzoxNzc0Cittc2dpZCAiIGluIFdpbjMycyBtb2RlIgorbXNnc3RyICIgdyB0cnliaWUgV2luMzJzIgorCisjOiB2ZXJzaW9uLmM6MTc3NgorbXNnaWQgIiB3aXRoIE9MRSBzdXBwb3J0IgorbXNnc3RyICIgemUgd3Nwb21hZ2FuaWVtIE9MRSIKKworIzogdmVyc2lvbi5jOjE3NzkKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgY29uc29sZSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzIgYml0b3dhIHdlcnNqYSBuYSBrb25zb2zqIGRsYSBNUy1XaW5kb3dzIgorCisjOiB2ZXJzaW9uLmM6MTc4MworbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2IGJpdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMTYgYml0b3dhIHdlcnNqYSBkbGEgTVMtV2luZG93cyIKKworIzogdmVyc2lvbi5jOjE3ODcKK21zZ2lkICIiCisiXG4iCisiMzIgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzIgYml0b3dhIHdlcnNqYSBkbGEgTVMtRE9TIgorCisjOiB2ZXJzaW9uLmM6MTc4OQorbXNnaWQgIiIKKyJcbiIKKyIxNiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIxNiBiaXRvd2Egd2Vyc2phIGRsYSBNUy1ET1MiCisKKyM6IHZlcnNpb24uYzoxNzk1Cittc2dpZCAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJ3ZXJzamEgZGxhIE1hY09TIFggKHVuaXgpIgorCisjOiB2ZXJzaW9uLmM6MTc5NworbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJ3ZXJzamEgZGxhIE1hY09TIFgiCisKKyM6IHZlcnNpb24uYzoxODAwCittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJ3ZXJzamEgZGxhIE1hY09TIgorCisjOiB2ZXJzaW9uLmM6MTgwNQorbXNnaWQgIiIKKyJcbiIKKyJSSVNDIE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJ3ZXJzamEgZGxhIFJJU0MgT1MiCisKKyM6IHZlcnNpb24uYzoxODE1Cittc2dpZCAiIgorIlxuIgorIkluY2x1ZGVkIHBhdGNoZXM6ICIKK21zZ3N0ciAiIgorIlxuIgorIlphZGFuZSCzYXR5OiAiCisKKyM6IHZlcnNpb24uYzoxODQxIHZlcnNpb24uYzoyMjA5Cittc2dpZCAiTW9kaWZpZWQgYnkgIgorbXNnc3RyICJabWllbmlvbnkgcHJ6ZXogIgorCisjOiB2ZXJzaW9uLmM6MTg0OAorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyJTa29tcGlsb3dhbnkgIgorCisjOiB2ZXJzaW9uLmM6MTg1MQorbXNnaWQgImJ5ICIKK21zZ3N0ciAicHJ6ZXogIgorCisjOiB2ZXJzaW9uLmM6MTg2MworbXNnaWQgIiIKKyJcbiIKKyJIdWdlIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiT2xicnp5bWlhIHdlcnNqYSAiCisKKyM6IHZlcnNpb24uYzoxODY2Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIkR1v2Egd2Vyc2phICIKKworIzogdmVyc2lvbi5jOjE4NjkKK21zZ2lkICIiCisiXG4iCisiTm9ybWFsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiTm9ybWFsbmEgd2Vyc2phICIKKworIzogdmVyc2lvbi5jOjE4NzIKK21zZ2lkICIiCisiXG4iCisiU21hbGwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJNYbNhIHdlcnNqYSAiCisKKyM6IHZlcnNpb24uYzoxODc0Cittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJNYWx1dGthIHdlcnNqYSAiCisKKyM6IHZlcnNpb24uYzoxODgwCittc2dpZCAid2l0aG91dCBHVUkuIgorbXNnc3RyICJiZXogR1VJLiIKKworIzogdmVyc2lvbi5jOjE4ODUKK21zZ2lkICJ3aXRoIEdUSzItR05PTUUgR1VJLiIKK21zZ3N0ciAieiBHVEsyLUdOT01FIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODg3Cittc2dpZCAid2l0aCBHVEstR05PTUUgR1VJLiIKK21zZ3N0ciAieiBHVEstR05PTUUgR1VJLiIKKworIzogdmVyc2lvbi5jOjE4OTEKK21zZ2lkICJ3aXRoIEdUSzIgR1VJLiIKK21zZ3N0ciAieiBHVEsyIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxODkzCittc2dpZCAid2l0aCBHVEsgR1VJLiIKK21zZ3N0ciAieiBHVEsgR1VJLiIKKworIzogdmVyc2lvbi5jOjE4OTgKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICJ6IFgxMS1Nb3RpZiBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTkwMgorbXNnaWQgIndpdGggWDExLW5lWHRhdyBHVUkuIgorbXNnc3RyICJ6IFgxMS1uZVh0YXcgR1VJLiIKKworIzogdmVyc2lvbi5jOjE5MDQKK21zZ2lkICJ3aXRoIFgxMS1BdGhlbmEgR1VJLiIKK21zZ3N0ciAieiBYMTEtQXRoZW5hIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxOTA4Cittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgInogQmVPUyBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTkxMQorbXNnaWQgIndpdGggUGhvdG9uIEdVSS4iCittc2dzdHIgInogUGhvdG9uIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxOTE0Cittc2dpZCAid2l0aCBHVUkuIgorbXNnc3RyICJ6IEdVSS4iCisKKyM6IHZlcnNpb24uYzoxOTE3Cittc2dpZCAid2l0aCBDYXJib24gR1VJLiIKK21zZ3N0ciAieiBDYXJib24gR1VJLiIKKworIzogdmVyc2lvbi5jOjE5MjAKK21zZ2lkICJ3aXRoIENvY29hIEdVSS4iCittc2dzdHIgInogQ29jb2EgR1VJLiIKKworIzogdmVyc2lvbi5jOjE5MjMKK21zZ2lkICJ3aXRoIChjbGFzc2ljKSBHVUkuIgorbXNnc3RyICJ6IChrbGFzeWN6bnltKSBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTkzNAorbXNnaWQgIiAgRmVhdHVyZXMgaW5jbHVkZWQgKCspIG9yIG5vdCAoLSk6XG4iCittc2dzdHIgIiAgT3BjamUgd7OxY3pvbmUgKCspIGx1YiBuaWUgKC0pOlxuIgorCisjOiB2ZXJzaW9uLmM6MTk0NgorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgIHZpbXJjIHN5c3RlbXU6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk1MQorbXNnaWQgIiAgICAgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgdmltcmMgdb95dGtvd25pa2E6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk1NgorbXNnaWQgIiAybmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIDItZ2kgcGxpayB2aW1yYyB1v3l0a293bmlrYTogXCIiCisKKyM6IHZlcnNpb24uYzoxOTYxCittc2dpZCAiIDNyZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgMy1jaSBwbGlrIHZpbXJjIHW/eXRrb3duaWthOiBcIiIKKworIzogdmVyc2lvbi5jOjE5NjYKK21zZ2lkICIgICAgICB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgICBleHJjIHW/eXRrb3duaWthOiBcIiIKKworIzogdmVyc2lvbi5jOjE5NzEKK21zZ2lkICIgIDJuZCB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgMi1naSBwbGlrIGV4cmMgdb95dGtvd25pa2E6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk3NworbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICBndmltcmMgc3lzdGVtdTogXCIiCisKKyM6IHZlcnNpb24uYzoxOTgxCittc2dpZCAiICAgIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgIGd2aW1yYyB1v3l0a293bmlrYTogXCIiCisKKyM6IHZlcnNpb24uYzoxOTg1Cittc2dpZCAiMm5kIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIyLWdpIHBsaWsgZ3ZpbXJjIHW/eXRrb3duaWthOiBcIiIKKworIzogdmVyc2lvbi5jOjE5OTAKK21zZ2lkICIzcmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIjMtY2kgcGxpayBndmltcmMgdb95dGtvd25pa2E6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTk5NworbXNnaWQgIiAgICBzeXN0ZW0gbWVudSBmaWxlOiBcIiIKK21zZ3N0ciAiIHN5c3RlbW93eSBwbGlrIG1lbnU6IFwiIgorCisjOiB2ZXJzaW9uLmM6MjAwNQorbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICAgb2R3ZXQgZGxhICRWSU0tYTogXCIiCisKKyM6IHZlcnNpb24uYzoyMDExCittc2dpZCAiIGYtYiBmb3IgJFZJTVJVTlRJTUU6IFwiIgorbXNnc3RyICJmLWIgZGxhICRWSU1SVU5USU1FOiBcIiIKKworIzogdmVyc2lvbi5jOjIwMTUKK21zZ2lkICJDb21waWxhdGlvbjogIgorbXNnc3RyICJLb21waWxhY2phOiAiCisKKyM6IHZlcnNpb24uYzoyMDIxCittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAiS29tcGlsYXRvcjogIgorCisjOiB2ZXJzaW9uLmM6MjAyNgorbXNnaWQgIkxpbmtpbmc6ICIKK21zZ3N0ciAiS29uc29saWRhY2phOiAiCisKKyM6IHZlcnNpb24uYzoyMDMxCittc2dpZCAiICBERUJVRyBCVUlMRCIKK21zZ3N0ciAiICBLT01QSUxBQ0pBIERFQlVHIgorCisjOiB2ZXJzaW9uLmM6MjA3MAorbXNnaWQgIlZJTSAtIFZpIElNcHJvdmVkIgorbXNnc3RyICJWSU0gLSBWaSByb3pidWRvd2FueSIKKworIzogdmVyc2lvbi5jOjIwNzIKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAid2Vyc2phICIKKworIzogdmVyc2lvbi5jOjIwNzMKK21zZ2lkICJieSBCcmFtIE1vb2xlbmFhciBldCBhbC4iCittc2dzdHIgIkF1dG9yOiBCcmFtIE1vb2xlbmFhciBpIElubmkuIgorCisjOiB2ZXJzaW9uLmM6MjA3NworbXNnaWQgIlZpbSBpcyBvcGVuIHNvdXJjZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUiCittc2dzdHIgIlZpbSBqZXN0IG9wZW4gc291cmNlIGkgcm96cHJvd2FkemFueSBkYXJtb3dvIgorCisjOiB2ZXJzaW9uLmM6MjA3OQorbXNnaWQgIkhlbHAgcG9vciBjaGlsZHJlbiBpbiBVZ2FuZGEhIgorbXNnc3RyICJQb23zvyBiaWVkbnltIGR6aWVjaW9tIHcgVWdhbmR6aWUhIgorCisjOiB2ZXJzaW9uLmM6MjA4MAorbXNnaWQgInR5cGUgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgIndwcm93YWS8IDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgICBkbGEgaW5mb3JtYWNqaSBvIHR5bSAgIgorCisjOiB2ZXJzaW9uLmM6MjA4MgorbXNnaWQgInR5cGUgIDpxPEVudGVyPiAgICAgICAgICAgICAgIHRvIGV4aXQgICAgICAgICAiCittc2dzdHIgIndwcm93YWS8IDpxPEVudGVyPiAgICAgICAgICAgICAgICB6YWtv8WN6ZW5pZSBwcm9ncmFtdSAgICIKKworIzogdmVyc2lvbi5jOjIwODMKK21zZ2lkICJ0eXBlICA6aGVscDxFbnRlcj4gIG9yICA8RjE+ICBmb3Igb24tbGluZSBoZWxwIgorbXNnc3RyICJ3cHJvd2FkvCA6aGVscDxFbnRlcj4gIGx1YiAgPEYxPiAgcG9tb2MgbmEgYmllv7FjbyAgICAgICAiCisKKyM6IHZlcnNpb24uYzoyMDg0Cittc2dpZCAidHlwZSAgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICAgZm9yIHZlcnNpb24gaW5mbyIKK21zZ3N0ciAid3Byb3dhZLwgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICAgIGRsYSBpbmZvcm1hY2ppIG8gd2Vyc2ppIgorCisjOiB2ZXJzaW9uLmM6MjA4NworbXNnaWQgIlJ1bm5pbmcgaW4gVmkgY29tcGF0aWJsZSBtb2RlIgorbXNnc3RyICJEemlhs2FtIHcgdHJ5YmllIHpnb2Rub7ZjaSB6IFZpIgorCisjOiB2ZXJzaW9uLmM6MjA4OAorbXNnaWQgInR5cGUgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIGZvciBWaW0gZGVmYXVsdHMiCittc2dzdHIgIndwcm93YWS8IDpzZXQgbm9jcDxFbnRlcj4gICAgICAgICB3YXJ0b7ZjaSBkb215tmxuZSBWaW0tYSIKKworIzogdmVyc2lvbi5jOjIwODkKK21zZ2lkICJ0eXBlICA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJ3cHJvd2FkvCA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiAgZGxhIGluZm9ybWFjamkgdG8gdHltICAiCisKKyM6IHZlcnNpb24uYzoyMTA0Cittc2dpZCAibWVudSAgSGVscC0+T3JwaGFucyAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uICAgICIKK21zZ3N0ciAid3Byb3dhZLwgOmhlbHAgaWNjZjxFbnRlcj4gICAgICAgIGRsYSBpbmZvcm1hY2ppIHRvIHR5bSAgIgorCisjOiB2ZXJzaW9uLmM6MjEwNgorbXNnaWQgIlJ1bm5pbmcgbW9kZWxlc3MsIHR5cGVkIHRleHQgaXMgaW5zZXJ0ZWQiCittc2dzdHIgIlVydWNob21pb255IGJleiB0cnli83csIHdwaXNhbnkgdGVrc3QgamVzdCB3cHJvd2FkemFueSIKKworIzogdmVyc2lvbi5jOjIxMDcKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBJbnNlcnQgTW9kZSAgIgorbXNnc3RyICJtZW51ICBFZHl0dWotPlVzdGF3aWVuaWEgZ2xvYmFsbmUtPlRyeWIgd3N0YXdpYW5pYSIKKworIzogdmVyc2lvbi5jOjIxMDgKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHdvIG1vZGVzICAgICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICBkbGEgZHfzY2ggdHJ5YvN3ICAgICAgICAgICAiCisKKyM6IHZlcnNpb24uYzoyMTEyCittc2dpZCAibWVudSAgRWRpdC0+R2xvYmFsIFNldHRpbmdzLT5Ub2dnbGUgVmkgQ29tcGF0aWJsZSIKK21zZ3N0ciAibWVudSBFZHl0dWotPlVzdGF3aWVuaWEgZ2xvYmFsbmUtPktvbXBhdHliaWxub7bmIHogVmkiCisKKyM6IHZlcnNpb24uYzoyMTEzCittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyAgICIKK21zZ3N0ciAiICAgICBkbGEgZG9tebZsbnljaCB1c3Rhd2ll8SBWaW1hICAgIgorCisjOiB2ZXJzaW9uLmM6MjE2MAorbXNnaWQgIlNwb25zb3IgVmltIGRldmVsb3BtZW50ISIKK21zZ3N0ciAiU3BvbnNvcnVqIHJvenfzaiBWaW1hISIKKworIzogdmVyc2lvbi5jOjIxNjEKK21zZ2lkICJCZWNvbWUgYSByZWdpc3RlcmVkIFZpbSB1c2VyISIKK21zZ3N0ciAiWm9zdGHxIHphcmVqZXN0cm93YW55bSB1v3l0a293bmlraWVtIFZpbWEhIgorCisjOiB2ZXJzaW9uLmM6MjE2NAorbXNnaWQgInR5cGUgIDpoZWxwIHNwb25zb3I8RW50ZXI+ICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgIndwcm93YWS8IDpoZWxwIHNwb25zb3I8RW50ZXI+ICAgICAgICBkbGEgaW5mb3JtYWNqaSIKKworIzogdmVyc2lvbi5jOjIxNjUKK21zZ2lkICJ0eXBlICA6aGVscCByZWdpc3RlcjxFbnRlcj4gICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJ3cHJvd2FkvCA6aGVscCByZWdpc3RlcjxFbnRlcj4gICAgICAgIGRsYSBpbmZvcm1hY2ppIgorCisjOiB2ZXJzaW9uLmM6MjE2NworbXNnaWQgIm1lbnUgIEhlbHAtPlNwb25zb3IvUmVnaXN0ZXIgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIm1lbnUgUG9tb2MtPlNwb25zb3J1ai9aYXJlamVzdHJ1aiBzaeogZGxhIGluZm9ybWFjamkiCisKKyM6IHZlcnNpb24uYzoyMTc3Cittc2dpZCAiV0FSTklORzogV2luZG93cyA5NS85OC9NRSBkZXRlY3RlZCIKK21zZ3N0ciAiT1NUUlpFr0VOSUU6IHd5a3J5dG8gV2luZG93cyA5NS85OC9NRSIKKworIzogdmVyc2lvbi5jOjIxODAKK21zZ2lkICJ0eXBlICA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJ3cHJvd2FkvCA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICAgZGxhIGluZm9ybWFjamkgdG8gdHltICAiCisKKyM6IHdpbmRvdy5jOjIwMworbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiBOaWUgbWEgb2tuYSBwb2RnbLFkdSIKKworIzogd2luZG93LmM6NTgxCittc2dpZCAiRTQ0MjogQ2FuJ3Qgc3BsaXQgdG9wbGVmdCBhbmQgYm90cmlnaHQgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiRTQ0MjogTmllIG1vZ+ogcm96ZHppZWxp5iBsZXdvLWfzcm5lZ28gaSBwcmF3by1kb2xuZWdvIGplZG5vY3pltm5pZSIKKworIzogd2luZG93LmM6MTM0MAorbXNnaWQgIkU0NDM6IENhbm5vdCByb3RhdGUgd2hlbiBhbm90aGVyIHdpbmRvdyBpcyBzcGxpdCIKK21zZ3N0ciAiRTQ0MzogTmllIG1vZ+ogcHJ6ZWty6mNp5iwgZ2R5IGlubmUgb2tubyBqZXN0IHJvemR6aWVsb25lIgorCisjOiB3aW5kb3cuYzoxODM2Cittc2dpZCAiRTQ0NDogQ2Fubm90IGNsb3NlIGxhc3Qgd2luZG93IgorbXNnc3RyICJFNDQ0OiBOaWUgbW9n6iB6YW1rbrHmIG9zdGF0bmllZ28gb2tuYSIKKworIzogd2luZG93LmM6MjU2NworbXNnaWQgIkFscmVhZHkgb25seSBvbmUgd2luZG93IgorbXNnc3RyICJKdb8gamVzdCB0eWxrbyBqZWRlbiB3aWRvayIKKworIzogd2luZG93LmM6MjYxNAorbXNnaWQgIkU0NDU6IE90aGVyIHdpbmRvdyBjb250YWlucyBjaGFuZ2VzIgorbXNnc3RyICJFNDQ1OiBJbm5lIG9rbm8gemF3aWVyYSB6bWlhbnkiCisKKyM6IHdpbmRvdy5jOjQ0ODAKK21zZ2lkICJFNDQ2OiBObyBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFNDQ2OiBCcmFrIG5hend5IHBsaWt1IHBvZCBrdXJzb3JlbSIKKworIzogd2luZG93LmM6NDU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ3OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkU0NDc6IE5pZSBtb2fqIHpuYWxlvOYgcGxpa3UgXCIlc1wiIHcgdHJvcGllIgorCisjOiBpZl9wZXJsLnhzOjMyNiBnbG9iYWxzLmg6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcwOiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5ICVzIgorbXNnc3RyICJFMzcwOiBOaWUgbW9ns2VtIHphs2Fkb3dh5iBiaWJsaW90ZWtpICVzIgorCisjOiBpZl9wZXJsLnhzOjU1NAorbXNnaWQgIlNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBQZXJsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIlByenlrcm8gbWksIHRhIGtvbWVuZGEgamVzdCB3ebOxY3pvbmE6IG5pZSBtb2ezZW0gemGzYWRvd2HmIGJpYmxpb3Rla2kgUGVybGEuIgorCisjOiBpZl9wZXJsLnhzOjYwNworbXNnaWQgIkUyOTk6IFBlcmwgZXZhbHVhdGlvbiBmb3JiaWRkZW4gaW4gc2FuZGJveCB3aXRob3V0IHRoZSBTYWZlIG1vZHVsZSIKK21zZ3N0ciAiRTI5OTogd3lsaWN6ZW5pZSBQZXJsYSB6YWJyb25pb25lIHcgcGlhc2tvd25pY3kgYmV6IG1vZHWzdSBTYWZlIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjU4MworbXNnaWQgIkVkaXQgd2l0aCAmbXVsdGlwbGUgVmltcyIKK21zZ3N0ciAiRWR5dHVqIHcgJndpZWx1IFZpbWFjaCIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODkKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgIkVkeXR1aiB3IHBvamVkeW5jenltICZWaW1pZSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1OTgKK21zZ2lkICImRGlmZiB3aXRoIFZpbSIKK21zZ3N0ciAiJkRpZmYgeiBWaW1lbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo2MTEKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAiRWR5dHVqIHcgJlZpbWllIgorCisjLiBOb3cgY29uY2F0ZW5hdGUKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NjMzCittc2dpZCAiRWRpdCB3aXRoIGV4aXN0aW5nIFZpbSAtICYiCittc2dzdHIgIkVkeXR1aiB6IGlzdG5pZWqxY3ltIFZpbWVtIC0gJiIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo3NDYKK21zZ2lkICJFZGl0cyB0aGUgc2VsZWN0ZWQgZmlsZShzKSB3aXRoIFZpbSIKK21zZ3N0ciAiRWR5dHVqIHd5YnJhbmUgcGxpa2kgdyBWaW1pZSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4ODUgR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjYKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwcm9jZXNzOiBDaGVjayBpZiBndmltIGlzIGluIHlvdXIgcGF0aCEiCittc2dzdHIgIkKzsWQgdHdvcnplbmlhIHByb2Nlc3U6IFNwcmF3ZLwgY3p5IGd2aW0gamVzdCB3IHR3b2plaiC2Y2llv2NlISIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4ODYgR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDAgR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjcKK21zZ2lkICJndmltZXh0LmRsbCBlcnJvciIKK21zZ3N0ciAiYrOxZCBndmltZXh0LmRsbCIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTkKK21zZ2lkICJQYXRoIGxlbmd0aCB0b28gbG9uZyEiCittc2dzdHIgIlphIGSzdWdhILZjaWW/a2EhIgorCisjOiBnbG9iYWxzLmg6MTAyMgorbXNnaWQgIi0tTm8gbGluZXMgaW4gYnVmZmVyLS0iCittc2dzdHIgIi0tQnJhayB3aWVyc3p5IHcgYnVmb3J6ZS0tIgorCisjLgorIy4gKiBUaGUgZXJyb3IgbWVzc2FnZXMgdGhhdCBjYW4gYmUgc2hhcmVkIGFyZSBpbmNsdWRlZCBoZXJlLgorIy4gKiBFeGNsdWRlZCBhcmUgZXJyb3JzIHRoYXQgYXJlIG9ubHkgdXNlZCBvbmNlIGFuZCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisjLgorIzogZ2xvYmFscy5oOjExODUKK21zZ2lkICJFNDcwOiBDb21tYW5kIGFib3J0ZWQiCittc2dzdHIgIkU0NzA6IFByemVyd2FuaWUga29tZW5keSIKKworIzogZ2xvYmFscy5oOjExODYKK21zZ2lkICJFNDcxOiBBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAiRTQ3MTogd3ltYWdhbnkgYXJndW1lbnQiCisKKyM6IGdsb2JhbHMuaDoxMTg3Cittc2dpZCAiRTEwOiBcXCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgLywgPyBvciAmIgorbXNnc3RyICJFMTA6IHBvIFxcIHBvd2lubm8gYnnmIC8sID8gbHViICYiCisKKyM6IGdsb2JhbHMuaDoxMTg5Cittc2dpZCAiRTExOiBJbnZhbGlkIGluIGNvbW1hbmQtbGluZSB3aW5kb3c7IDxDUj4gZXhlY3V0ZXMsIENUUkwtQyBxdWl0cyIKK21zZ3N0ciAiRTExOiBOaWVkb3p3b2xvbmUgdyBva25pZSB3aWVyc3phIHBvbGVjZfE7IDxDUj4gd3lrb251amUsIENUUkwtQyBvcHVzemN6YSIKKworIzogZ2xvYmFscy5oOjExOTEKK21zZ2lkICJFMTI6IENvbW1hbmQgbm90IGFsbG93ZWQgZnJvbSBleHJjL3ZpbXJjIGluIGN1cnJlbnQgZGlyIG9yIHRhZyBzZWFyY2giCittc2dzdHIgIiIKKyJFMTI6IEtvbWVuZGEgbmllZG96d29sb25hIHogZXhyYy92aW1yYyB3IGJpZb+xY3ltIHN6dWthbml1IGthdGFsb2d1IGx1YiAiCisiem5hY3puaWthIgorCisjOiBnbG9iYWxzLmg6MTE5MworbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiBCcmFrIDplbmRpZiIKKworIzogZ2xvYmFscy5oOjExOTQKK21zZ2lkICJFNjAwOiBNaXNzaW5nIDplbmR0cnkiCittc2dzdHIgIkU2MDA6IEJyYWsgOmVuZHRyeSIKKworIzogZ2xvYmFscy5oOjExOTUKK21zZ2lkICJFMTcwOiBNaXNzaW5nIDplbmR3aGlsZSIKK21zZ3N0ciAiRTE3MDogQnJhayA6ZW5kd2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMTk2Cittc2dpZCAiRTU4ODogOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg4OiA6ZW5kd2hpbGUgYmV6IDp3aGlsZSIKKworIzogZ2xvYmFscy5oOjExOTgKK21zZ2lkICJFMTM6IEZpbGUgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxMzogUGxpayBpc3RuaWVqZSAod3ltdbYgcG9wcnpleiAhKSIKKworIzogZ2xvYmFscy5oOjExOTkKK21zZ2lkICJFNDcyOiBDb21tYW5kIGZhaWxlZCIKK21zZ3N0ciAiRTQ3MjogS29tZW5kYSBuaWUgcG93aW9ks2Egc2nqIgorCisjOiBnbG9iYWxzLmg6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM0OiBVbmtub3duIGZvbnRzZXQ6ICVzIgorbXNnc3RyICJFMjM0OiBOaWV6bmFueSB6ZXN0YXcgY3pjaW9uZWs6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBVbmtub3duIGZvbnQ6ICVzIgorbXNnc3RyICJFMjM1OiBOaWV6bmFuYSBjemNpb25rYTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzY6IEZvbnQgXCIlc1wiIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiRTIzNjogQ3pjaW9ua2EgXCIlc1wiIG5pZSBtYSBzdGGzZWogc3plcm9rb7ZjaSB6bmFr83ciCisKKyM6IGdsb2JhbHMuaDoxMjEwCittc2dpZCAiRTQ3MzogSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIkU0NzM6IEKzsWQgd2V3bup0cnpueSIKKworIzogZ2xvYmFscy5oOjEyMTEKK21zZ2lkICJJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiUHJ6ZXJ3YW5lIgorCisjOiBnbG9iYWxzLmg6MTIxMgorbXNnaWQgIkUxNDogSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFMTQ6IE5pZXezYbZjaXd5IGFkcmVzIgorCisjOiBnbG9iYWxzLmg6MTIxMworbXNnaWQgIkU0NzQ6IEludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkU0NzQ6IE5pZXezYbZjaXd5IGFyZ3VtZW50IgorCisjOiBnbG9iYWxzLmg6MTIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDc1OiBJbnZhbGlkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQ3NTogTmlld7NhtmNpd3kgYXJndW1lbnQ6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogJXMiCittc2dzdHIgIkUxNTogTmlld7NhtmNpd2Ugd3lyYb9lbmllOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMTgKK21zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCittc2dzdHIgIkUxNjogTmlld7NhtmNpd3kgemFrcmVzIgorCisjOiBnbG9iYWxzLmg6MTIxOQorbXNnaWQgIkU0NzY6IEludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ3NjogTmlld7NhtmNpd2Ega29tZW5kYSIKKworIzogZ2xvYmFscy5oOjEyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3OiBcIiVzXCIgaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIkUxNzogXCIlc1wiIGplc3Qga2F0YWxvZ2llbSIKKworIzogZ2xvYmFscy5oOjEyMjQKK21zZ2lkICJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIgorbXNnc3RyICJFMTg6IE5pZW9jemVraXdhbmUgem5ha2kgcHJ6ZWQgJz0nIgorCisjOiBnbG9iYWxzLmg6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzY0OiBMaWJyYXJ5IGNhbGwgZmFpbGVkIGZvciBcIiVzKClcIiIKK21zZ3N0ciAiRTM2NDogV3l3b7NhbmllIHogYmlibGlvdGVraSBuaWUgcG93aW9ks28gc2nqIGRsYSBcIiVzKClcIiIKKworIzogZ2xvYmFscy5oOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0ODogQ291bGQgbm90IGxvYWQgbGlicmFyeSBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTQ0ODogTmllIG1vv25hIHphs2Fkb3dh5iBmdW5rY2ppIGJpYmxpb3Rla2kgJXMiCisKKyM6IGdsb2JhbHMuaDoxMjM1Cittc2dpZCAiRTE5OiBNYXJrIGhhcyBpbnZhbGlkIGxpbmUgbnVtYmVyIgorbXNnc3RyICJFMTk6IFpha7NhZGthIG1hIG5pZXezYbZjaXd5IG51bWVyIHdpZXJzemEiCisKKyM6IGdsb2JhbHMuaDoxMjM2Cittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIkUyMDogWmFrs2Fka2EgbmllbmFzdGF3aW9uYSIKKworIzogZ2xvYmFscy5oOjEyMzcKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTogTmllIG1vZ+ogd3lrb25h5iB6bWlhbiwgJ21vZGlmaWFibGUnIGplc3Qgd3mzsWN6b25lIgorCisjOiBnbG9iYWxzLmg6MTIzOAorbXNnaWQgIkUyMjogU2NyaXB0cyBuZXN0ZWQgdG9vIGRlZXAiCittc2dzdHIgIkUyMjogWmJ5dCBns+pib2tpZSB6YWduaWW/ZL9lbmllIHNrcnlwdPN3IgorCisjOiBnbG9iYWxzLmg6MTIzOQorbXNnaWQgIkUyMzogTm8gYWx0ZXJuYXRlIGZpbGUiCittc2dzdHIgIkUyMzogQnJhayBwbGlrdSB6YW1pYW55IgorCisjOiBnbG9iYWxzLmg6MTI0MAorbXNnaWQgIkUyNDogTm8gc3VjaCBhYmJyZXZpYXRpb24iCittc2dzdHIgIkUyNDogTmllIG1hIHRha2llZ28gc2ty83R1IgorCisjOiBnbG9iYWxzLmg6MTI0MQorbXNnaWQgIkU0Nzc6IE5vICEgYWxsb3dlZCIKK21zZ3N0ciAiRTQ3NzogTmllZG96d29sb25lICEiCisKKyM6IGdsb2JhbHMuaDoxMjQzCittc2dpZCAiRTI1OiBHVUkgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAiRTI1OiBHVUkgbmllIG1vv2UgYnnmIHW/eXRlOiBOaWUgd7OxY3pvbm8gcG9kY3phcyBrb21waWxhY2ppIgorCisjOiBnbG9iYWxzLmg6MTI0NgorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI2OiBIZWJyYWpza2kgbmllIG1vv2UgYnnmIHW/eXR5OiBOaWUgd7OxY3pvbm8gcG9kY3phcyBrb21waWxhY2ppXG4iCisKKyM6IGdsb2JhbHMuaDoxMjQ5Cittc2dpZCAiRTI3OiBGYXJzaSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNzogRmFyc2kgbmllIG1vv2UgYnnmIHW/eXR5OiBOaWUgd7OxY3pvbm8gcG9kY3phcyBrb21waWxhY2ppXG4iCisKKyM6IGdsb2JhbHMuaDoxMjUyCittc2dpZCAiRTgwMDogQXJhYmljIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTgwMDogQXJhYnNraSBuaWUgbW+/ZSBieeYgdb95dHk6IE5pZSB3s7Fjem9ubyBwb2RjemFzIGtvbXBpbGFjamlcbiIKKworIzogZ2xvYmFscy5oOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBCcmFrIHRha2llaiBuYXp3eSBncnVweSBwb2S2d2lldGxhbmlhOiAlcyIKKworIzogZ2xvYmFscy5oOjEyNTcKK21zZ2lkICJFMjk6IE5vIGluc2VydGVkIHRleHQgeWV0IgorbXNnc3RyICJFMjk6IE5pZSB3cHJvd2Fkem9ubyBqZXN6Y3plIL9hZG5lZ28gdGVrc3R1IgorCisjOiBnbG9iYWxzLmg6MTI1OAorbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6IE5pZSBtYSBwb3ByemVkbmllZ28gd2llcnN6YSBwb2xlY2XxIgorCisjOiBnbG9iYWxzLmg6MTI1OQorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IE5pZSBtYSB0YWtpZWdvIHByenlwb3J6sWRrb3dhbmlhIgorCisjOiBnbG9iYWxzLmg6MTI2MAorbXNnaWQgIkU0Nzk6IE5vIG1hdGNoIgorbXNnc3RyICJFNDc5OiBCcmFrIGRvcGFzb3dh8SIKKworIzogZ2xvYmFscy5oOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4MDogTm8gbWF0Y2g6ICVzIgorbXNnc3RyICJFNDgwOiBCcmFrIGRvcGFzb3dh8TogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjYyCittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjogQnJhayBuYXp3eSBwbGlrdSIKKworIzogZ2xvYmFscy5oOjEyNjMKK21zZ2lkICJFMzM6IE5vIHByZXZpb3VzIHN1YnN0aXR1dGUgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzM6IEJyYWsgcG9wcnplZG5pZWdvIHBvZHN0YXdpZW5pb3dlZ28gd3lyYb9lbmlhIHJlZ3VsYXJuZWdvIgorCisjOiBnbG9iYWxzLmg6MTI2NAorbXNnaWQgIkUzNDogTm8gcHJldmlvdXMgY29tbWFuZCIKK21zZ3N0ciAiRTM0OiBCcmFrIHBvcHJ6ZWRuaWVqIGtvbWVuZHkiCisKKyM6IGdsb2JhbHMuaDoxMjY1Cittc2dpZCAiRTM1OiBObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzNTogQnJhayBwb3ByemVkbmllZ28gd3lyYb9lbmlhIHJlZ3VsYXJuZWdvIgorCisjOiBnbG9iYWxzLmg6MTI2NgorbXNnaWQgIkU0ODE6IE5vIHJhbmdlIGFsbG93ZWQiCittc2dzdHIgIkU0ODE6IFpha3JlcyBuaWVkb3p3b2xvbnkiCisKKyM6IGdsb2JhbHMuaDoxMjY4Cittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjogQnJhayBtaWVqc2NhIgorCisjOiBnbG9iYWxzLmg6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6IGJyYWsgemFyZWplc3Ryb3dhbmVnbyBzZXJ3ZXJhIG8gbmF6d2llIFwiJXNcIiIKKworIzogZ2xvYmFscy5oOjEyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4MjogQ2FuJ3QgY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgIkU0ODI6IE5pZSBtb2fqIHN0d29yennmIHBsaWt1ICVzIgorCisjOiBnbG9iYWxzLmg6MTI3NAorbXNnaWQgIkU0ODM6IENhbid0IGdldCB0ZW1wIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTQ4MzogTmllIG1vZ+ogcG9icmHmIG5hend5IHBsaWt1IHR5bWN6YXNvd2VnbyIKKworIzogZ2xvYmFscy5oOjEyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NDogQ2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJFNDg0OiBOaWUgbW9n6iBvdHdvcnp55iBwbGlrdSAlcyIKKworIzogZ2xvYmFscy5oOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NTogQ2FuJ3QgcmVhZCBmaWxlICVzIgorbXNnc3RyICJFNDg1OiBOaWUgbW9n6iBvZGN6eXRh5iBwbGlrdSAlcyIKKworIzogZ2xvYmFscy5oOjEyNzcKK21zZ2lkICJFMzc6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUzNzogTmllIHphcGlzYW5vIG9kIG9zdGF0bmllaiB6bWlhbnkgKHd5bXW2IHByemV6ICEpIgorCisjOiBnbG9iYWxzLmg6MTI3OAorbXNnaWQgIkUzODogTnVsbCBhcmd1bWVudCIKK21zZ3N0ciAiRTM4OiBaZXJvd3kgYXJndW1lbnQiCisKKyM6IGdsb2JhbHMuaDoxMjgwCittc2dpZCAiRTM5OiBOdW1iZXIgZXhwZWN0ZWQiCittc2dzdHIgIkUzOTogT2N6ZWt1auogbGljemJ5IgorCisjOiBnbG9iYWxzLmg6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA6IENhbid0IG9wZW4gZXJyb3JmaWxlICVzIgorbXNnc3RyICJFNDA6IE5pZSBtb2fqIG90d29yennmIHBsaWt1IGKz6mTzdyAlcyIKKworIzogZ2xvYmFscy5oOjEyODYKK21zZ2lkICJFMjMzOiBjYW5ub3Qgb3BlbiBkaXNwbGF5IgorbXNnc3RyICJFMjMzOiBuaWUgbW9n6iBvdHdvcnp55iBla3JhbnUiCisKKyM6IGdsb2JhbHMuaDoxMjg4Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiBQYW1p6uYgd3ljemVycGFuYSEiCisKKyM6IGdsb2JhbHMuaDoxMjkwCittc2dpZCAiUGF0dGVybiBub3QgZm91bmQiCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHd6b3JjYSIKKworIzogZ2xvYmFscy5oOjEyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NjogUGF0dGVybiBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDg2OiBOaWUgem5hbGV6aW9ubyB3em9yY2E6ICVzIgorCisjOiBnbG9iYWxzLmg6MTI5MworbXNnaWQgIkU0ODc6IEFyZ3VtZW50IG11c3QgYmUgcG9zaXRpdmUiCittc2dzdHIgIkU0ODc6IEFyZ3VtZW50IG11c2kgYnnmIGRvZGF0bmkiCisKKyM6IGdsb2JhbHMuaDoxMjk1Cittc2dpZCAiRTQ1OTogQ2Fubm90IGdvIGJhY2sgdG8gcHJldmlvdXMgZGlyZWN0b3J5IgorbXNnc3RyICJFNDU5OiBOaWUgbW+/bmEgcHJ6ZWq25iBkbyBwb3ByemVkbmllZ28ga2F0YWxvZ3UiCisKKyM6IGdsb2JhbHMuaDoxMjk5Cittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0MjogQnJhayBCs+pk83ciCisKKyM6IGdsb2JhbHMuaDoxMzAxCittc2dpZCAiRTQzOiBEYW1hZ2VkIG1hdGNoIHN0cmluZyIKK21zZ3N0ciAiRTQzOiBQb3BzdXR5IGNpsWcgd3pvcmNhIgorCisjOiBnbG9iYWxzLmg6MTMwMgorbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6IFplcHN1dHkgcHJvZ3JhbSB3eXJhv2XxIHJlZ3VsYXJueWNoIgorCisjOiBnbG9iYWxzLmg6MTMwMworbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU0NTogb3BjamEgJ3JlYWRvbmx5JyBqZXN0IHVzdGF3aW9uYSAod3ltdbYgcG9wcnpleiAhKSIKKworIzogZ2xvYmFscy5oOjEzMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiCittc2dzdHIgIkU0NjogTmllIG1vZ+ogdXN0YXdp5iB6bWllbm5laiB0eWxrbyBkbyBvZGN6eXR1IFwiJXNcIiIKKworIzogZ2xvYmFscy5oOjEzMDgKK21zZ2lkICJFNDc6IEVycm9yIHdoaWxlIHJlYWRpbmcgZXJyb3JmaWxlIgorbXNnc3RyICJFNDc6IEKzsWQgdyB0cmFrY2llIGN6eXRhbmlhIHBsaWt1IGKz6mTzdyIKKworIzogZ2xvYmFscy5oOjEzMTEKK21zZ2lkICJFNDg6IE5vdCBhbGxvd2VkIGluIHNhbmRib3giCittc2dzdHIgIkU0ODogTmllZG96d29sb25lIHcgcGlhc2tvd25pY3kiCisKKyM6IGdsb2JhbHMuaDoxMzEzCittc2dpZCAiRTUyMzogTm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTUyMzogTmllZG96d29sb25lIHcgdHltIG1pZWpzY3UiCisKKyM6IGdsb2JhbHMuaDoxMzE2Cittc2dpZCAiRTM1OTogU2NyZWVuIG1vZGUgc2V0dGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFMzU5OiBVc3Rhd2lhbmllIHRyeWJ1IGVrcmFudSBuaWV3c3BvbWFnYW5lIgorCisjOiBnbG9iYWxzLmg6MTMxOAorbXNnaWQgIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIKK21zZ3N0ciAiRTQ5OiBOaWV3s2G2Y2l3YSB3aWVsa2+25iBwcnpld2luaepjaWEiCisKKyM6IGdsb2JhbHMuaDoxMzE5Cittc2dpZCAiRTkxOiAnc2hlbGwnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiRTkxOiBvcGNqYSAnc2hlbGwnIGplc3QgcHVzdGEiCisKKyM6IGdsb2JhbHMuaDoxMzIxCittc2dpZCAiRTI1NTogQ291bGRuJ3QgcmVhZCBpbiBzaWduIGRhdGEhIgorbXNnc3RyICJFMjU1OiBOaWUgbW9ns2VtIHdjenl0YeYgZGFueWNoIHpuYWt1ISIKKworIzogZ2xvYmFscy5oOjEzMjMKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiBCs7FkIHBvZGN6YXMgemFteWthbmlhIHBsaWt1IHd5bWlhbnkiCisKKyM6IGdsb2JhbHMuaDoxMzI0Cittc2dpZCAiRTczOiB0YWcgc3RhY2sgZW1wdHkiCittc2dzdHIgIkU3Mzogc3RvcyB6bmFjem5pa/N3IGplc3QgcHVzdHkiCisKKyM6IGdsb2JhbHMuaDoxMzI1Cittc2dpZCAiRTc0OiBDb21tYW5kIHRvbyBjb21wbGV4IgorbXNnc3RyICJFNzQ6IEtvbWVuZGEgamVzdCB6Ynl0IHNrb21wbGlrb3dhbmEiCisKKyM6IGdsb2JhbHMuaDoxMzI2Cittc2dpZCAiRTc1OiBOYW1lIHRvbyBsb25nIgorbXNnc3RyICJFNzU6IFpieXQgZLN1Z2EgbmF6d2EiCisKKyM6IGdsb2JhbHMuaDoxMzI3Cittc2dpZCAiRTc2OiBUb28gbWFueSBbIgorbXNnc3RyICJFNzY6IFpieXQgd2llbGUgWyIKKworIzogZ2xvYmFscy5oOjEzMjgKK21zZ2lkICJFNzc6IFRvbyBtYW55IGZpbGUgbmFtZXMiCittc2dzdHIgIkU3NzogWmJ5dCB3aWVsZSBuYXp3IHBsaWvzdyIKKworIzogZ2xvYmFscy5oOjEzMjkKK21zZ2lkICJFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJFNDg4OiBOYWRzdOpwbmUgem5hY3praSIKKworIzogZ2xvYmFscy5oOjEzMzAKK21zZ2lkICJFNzg6IFVua25vd24gbWFyayIKK21zZ3N0ciAiRTc4OiBOaWV6bmFuYSB6YWuzYWRrYSIKKworIzogZ2xvYmFscy5oOjEzMzEKK21zZ2lkICJFNzk6IENhbm5vdCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICJFNzk6IE5pZSBtb2exIHJvendpbrHmIHpuYWvzdyB3aWVsb3puYWN6bnljaCIKKworIzogZ2xvYmFscy5oOjEzMzMKK21zZ2lkICJFNTkxOiAnd2luaGVpZ2h0JyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW5oZWlnaHQnIgorbXNnc3RyICJFNTkxOiAnd2luaGVpZ2h0JyBuaWUgbW+/ZSBieeYgbW5pZWpzemUgbmm/ICd3aW5taW5oZWlnaHQnIgorCisjOiBnbG9iYWxzLmg6MTMzNQorbXNnaWQgIkU1OTI6ICd3aW53aWR0aCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWlud2lkdGgnIgorbXNnc3RyICJFNTkyOiAnd2lud2lkdGgnIG5pZSBtb79lIGJ55iBtbmllanN6ZSBuab8gJ3dpbm1pbndpZHRoJyIKKworIzogZ2xvYmFscy5oOjEzMzgKK21zZ2lkICJFODA6IEVycm9yIHdoaWxlIHdyaXRpbmciCittc2dzdHIgIkU4MDogQrOxZCB3IHRyYWtjaWUgemFwaXN1IgorCisjOiBnbG9iYWxzLmg6MTMzOQorbXNnaWQgIlplcm8gY291bnQiCittc2dzdHIgIlplcm93eSBsaWN6bmlrIgorCisjOiBnbG9iYWxzLmg6MTM0MQorbXNnaWQgIkU4MTogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQiCittc2dzdHIgIkU4MTogVb95Y2llIDxTSUQ+IHBvemEga29udGVrc3RlbSBza3J5cHR1IgorCisjOiBnbG9iYWxzLmg6MTM0NAorbXNnaWQgIkU0NDk6IEludmFsaWQgZXhwcmVzc2lvbiByZWNlaXZlZCIKK21zZ3N0ciAiRTQ0OTogT2RlYnJhs2VtIG5pZXezYbZjaXdlIHd5cmG/ZW5pZSIKKworIzogZ2xvYmFscy5oOjEzNDcKK21zZ2lkICJFNDYzOiBSZWdpb24gaXMgZ3VhcmRlZCwgY2Fubm90IG1vZGlmeSIKK21zZ3N0ciAiRTQ2MzogUmVnaW9uIGplc3QgY2hyb25pb255LCBuaWUgbW9n6iB6bWllbmnmIgorCmRpZmYgLS1naXQgYS9zcmMvcG8vcnUuY3AxMjUxLnBvIGIvc3JjL3BvL3J1LmNwMTI1MS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGIwYWMyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL3J1LmNwMTI1MS5wbwpAQCAtMCwwICsxLDY2NTggQEAKKyMgUnVzc2lhbiB0cmFuc2xhdGlvbiBmb3IgVmltCisjIAorIyDO4SDz8evu4uj/9SDo8e/u6/zn7uLg7ej/IPfo8uDp8uUg4iDw5eTg6vLu8OUgVmltICI6aGVscCB1Z2FuZGEiCisjIM4g6/7k//UsIOTl6+D++ej1IFZpbSD36PLg6fLlIOIg8OXk4Ory7vDlICI6aGVscCDg4vLu8PsiCisjCisjIHZhc3NpbHkgInZyIiByYWdvc2luIDx2cnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgMjAwNAorIworIyBHZW5lcmF0ZWQgZnJvbSBydS5wbywgRE8gTk9UIEVESVQuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBWaW0gNi4zYVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwNC0wNS0xMCAyMTozNyswNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNC0wNS0xMCAyMTozNyswNDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiB2YXNzaWx5IHJhZ29zaW4gPHZyckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogdmFzc2lseSByYWdvc2luIDx2cnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWNwMTI1MVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogYnVmZmVyLmM6MTAyCittc2dpZCAiRTgyOiBDYW5ub3QgYWxsb2NhdGUgYW55IGJ1ZmZlciwgZXhpdGluZy4uLiIKK21zZ3N0ciAiRTgyOiDN5eLu5+zu5u3uIOL75OXr6PL8IO/g7P/y/CDk4OblIOTr/yDu5O3u4+4g4fP05fDgLCDi+/Xu5C4uLiIKKworIzogYnVmZmVyLmM6MTA1Cittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4MzogzeXi7ufs7ubt7iDi++Tl6+jy/CDv4Oz/8vwg5Ov/IOHz9OXw4Cwg6PHv7uv85/Pl7CDk8PPj7ukg4fP05fAuLi4iCisKKyM6IGJ1ZmZlci5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTE1OiBObyBidWZmZXJzIHdlcmUgdW5sb2FkZWQiCittc2dzdHIgIkU1MTU6IM3oIO7k6O0g4fP05fAg7eUg4fvrIOL74/Dz5uXtIOjnIO/g7P/y6CIKKworIzogYnVmZmVyLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MTY6IE5vIGJ1ZmZlcnMgd2VyZSBkZWxldGVkIgorbXNnc3RyICJFNTE2OiDN6CDu5OjtIOHz9OXwIO3lIOH76yDz5ODruO0iCisKKyM6IGJ1ZmZlci5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTE3OiBObyBidWZmZXJzIHdlcmUgd2lwZWQgb3V0IgorbXNnc3RyICJFNTE3OiDN6CDu5OjtIOHz9OXwIO3lIOH76yDu9+j55e0iCisKKyM6IGJ1ZmZlci5jOjgxNworbXNnaWQgIjEgYnVmZmVyIHVubG9hZGVkIgorbXNnc3RyICLO5OjtIOHz9OXwIOL74/Dz5uXtIOjnIO/g7P/y6CIKKworIzogYnVmZmVyLmM6ODE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgdW5sb2FkZWQiCittc2dzdHIgIsLx5ePuIOL74/Dz5uXt7iDh8/Tl8O7iIOjnIO/g7P/y6DogJWQiCisKKyM6IGJ1ZmZlci5jOjgyNAorbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIs7k6O0g4fP05fAg8+Tg67jtIgorCisjOiBidWZmZXIuYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICLC8eXj7iDz5ODr5e3uIOHz9OXw7uI6ICVkIgorCisjOiBidWZmZXIuYzo4MzEKK21zZ2lkICIxIGJ1ZmZlciB3aXBlZCBvdXQiCittc2dzdHIgIs7k6O0g4fP05fAg7vfo+eXtIgorCisjOiBidWZmZXIuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB3aXBlZCBvdXQiCittc2dzdHIgIsLx5ePuIO736Pnl7e4g4fP05fDu4jogJWQiCisKKyM6IGJ1ZmZlci5jOjg5NAorbXNnaWQgIkU4NDogTm8gbW9kaWZpZWQgYnVmZmVyIGZvdW5kIgorbXNnc3RyICJFODQ6IMjn7OXtuO3t+/Ug4fP05fDu4iDt5SDu4e3g8PPm5e3uIgorCisjLiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorIzogYnVmZmVyLmM6OTMzCittc2dpZCAiRTg1OiBUaGVyZSBpcyBubyBsaXN0ZWQgYnVmZmVyIgorbXNnc3RyICJFODU6IMHz9OXw+yDiIPHv6PHq5SDu8vHz8vHy4vP+8iIKKworIzogYnVmZmVyLmM6OTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQnVmZmVyICVsZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTg2OiDB8/Tl8CAlbGQg7eUg8fP55fHy4vPl8iIKKworIzogYnVmZmVyLmM6OTQ4Cittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6IN3y7iDv7vHr5eTt6Okg4fP05fAiCisKKyM6IGJ1ZmZlci5jOjk1MAorbXNnaWQgIkU4ODogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBidWZmZXIiCittc2dzdHIgIkU4ODog3fLuIO/l8OL76SDh8/Tl8CIKKworIzogYnVmZmVyLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4OTogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciAlbGQgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTg5OiDI5+zl7eXt6P8g4iDh8/Tl8OUgJWxkIO3lIPHu9fDg7eXt+yAoISwg9/Lu4fsg7uHu6fLoIO/w7uLl8OrzKSIKKworIzogYnVmZmVyLmM6MTAwNQorbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiDN5eLu5+zu5u3uIOL74/Dz5+jy/CDo5yDv4Oz/8ugg7+7x6+Xk7ejpIOHz9OXwIgorCisjOiBidWZmZXIuYzoxNTM4Cittc2dpZCAiVzE0OiBXYXJuaW5nOiBMaXN0IG9mIGZpbGUgbmFtZXMgb3ZlcmZsb3ciCittc2dzdHIgIlcxNDogz/Dl5PPv8OXm5OXt6OU6IO/l8OXv7uvt5e3o5SDx7+jx6uAg6Oy47SD04Onr7uIiCisKKyM6IGJ1ZmZlci5jOjE3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkyOiBCdWZmZXIgJWxkIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTkyOiDB8/Tl8CAlbGQg7eUg7eDp5OXtIgorCisjOiBidWZmZXIuYzoxOTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5MzogzeXx6u7r/OruIPHu7vLi5fLx8uLo6SDk6/8gJXMiCisKKyM6IGJ1ZmZlci5jOjE5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIgorbXNnc3RyICJFOTQ6IM3l8iDx7u7y4uXy8fLi8/755ePuICVzIOHz9OXw4CIKKworIzogYnVmZmVyLmM6MjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCIKK21zZ3N0ciAi8fLw7urgICVsZCIKKworIzogYnVmZmVyLmM6MjQyMAorbXNnaWQgIkU5NTogQnVmZmVyIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFOTU6IMHz9OXwIPEg8uDq6Owg6Ozl7eXsIPPm5SDx8/nl8fLi8+XyIgorCisjOiBidWZmZXIuYzoyNzEzCittc2dpZCAiIFtNb2RpZmllZF0iCittc2dzdHIgIiBbyOfs5e247V0iCisKKyM6IGJ1ZmZlci5jOjI3MTgKK21zZ2lkICJbTm90IGVkaXRlZF0iCittc2dzdHIgIlvN5SDw5eTg6vLo8O7i4Ovx/10iCisKKyM6IGJ1ZmZlci5jOjI3MjMKK21zZ2lkICJbTmV3IGZpbGVdIgorbXNnc3RyICJbze7i++kg9ODp610iCisKKyM6IGJ1ZmZlci5jOjI3MjQKK21zZ2lkICJbUmVhZCBlcnJvcnNdIgorbXNnc3RyICJbzvjo4eroIPfy5e3o/10iCisKKyM6IGJ1ZmZlci5jOjI3MjYgZmlsZWlvLmM6MjExMgorbXNnaWQgIltyZWFkb25seV0iCittc2dzdHIgIlvy7uv86u4g5Ov/IPfy5e3o/10iCisKKyM6IGJ1ZmZlci5jOjI3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lIC0tJWQlJS0tIgorbXNnc3RyICLO5O3gIPHy8O7q4CAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6Mjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgLS0lZCUlLS0iCittc2dzdHIgIiVsZCDx8vAuIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICLx8vAuICVsZCDo5yAlbGQgLS0lZCUlLS0g6u7rLiAiCisKKyM6IGJ1ZmZlci5jOjI4NjQKK21zZ2lkICJbTm8gZmlsZV0iCittc2dzdHIgIlvN5fIg9ODp6+BdIgorCisjLiBtdXN0IGJlIGEgaGVscCBidWZmZXIKKyM6IGJ1ZmZlci5jOjI5MDQKK21zZ2lkICJoZWxwIgorbXNnc3RyICLx7/Dg4urgIgorCisjOiBidWZmZXIuYzozNDYzIHNjcmVlbi5jOjUwNzUKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIlvx7/Dg4urgXSIKKworIzogYnVmZmVyLmM6MzQ5NSBzY3JlZW4uYzo1MDgxCittc2dpZCAiW1ByZXZpZXddIgorbXNnc3RyICJbz/Dl5O/w7vHs7vLwXSIKKworIzogYnVmZmVyLmM6Mzc3NQorbXNnaWQgIkFsbCIKK21zZ3N0ciAiwuXx/CIKKworIzogYnVmZmVyLmM6Mzc3NQorbXNnaWQgIkJvdCIKK21zZ3N0ciAiwu3o5/MiCisKKyM6IGJ1ZmZlci5jOjM3NzcKK21zZ2lkICJUb3AiCittc2dzdHIgIs3g4uXw9fMiCisKKyM6IGJ1ZmZlci5jOjQ1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgQnVmZmVyIGxpc3Q6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjINHv6PHu6iDh8/Tl8O7iOlxuIgorCisjOiBidWZmZXIuYzo0NTU2Cittc2dpZCAiW0Vycm9yIExpc3RdIgorbXNnc3RyICJb0e/o8e7qIO746OHu6l0iCisKKyM6IGJ1ZmZlci5jOjQ1NjkgbWVtbGluZS5jOjE1MjAKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIlvN5fIg9ODp6+BdIgorCisjOiBidWZmZXIuYzo0ODgyCittc2dpZCAiIgorIlxuIgorIi0tLSBTaWducyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gx+3g9+roIC0tLSIKKworIzogYnVmZmVyLmM6NDkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJTaWducyBmb3IgJXM6IgorbXNnc3RyICLH7eD36ugg5Ov/ICVzOiIKKworIzogYnVmZmVyLmM6NDkwNworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgbGluZT0lbGQgIGlkPSVkICBuYW1lPSVzIgorbXNnc3RyICIgICAg8fLw7urgPSVsZCAgaWQ9JWQgIOjs/z0lcyIKKworIzogZGlmZi5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFOTY6IENhbiBub3QgZGlmZiBtb3JlIHRoYW4gJWxkIGJ1ZmZlcnMiCittc2dzdHIgIkU5Njog0evl5Ojy/CDn4CDu8uvo9+j/7Ogg7O7m7e4g7eUg4e7r5eUg9+XsIOIgJWxkIOHz9OXw4PUiCisKKyM6IGRpZmYuYzo3MTMKK21zZ2lkICJFOTc6IENhbm5vdCBjcmVhdGUgZGlmZnMiCittc2dzdHIgIkU5NzogzeXi7ufs7ubt7iDx7ufk4PL8IPTg6ev7IO7y6+j36OkiCisKKyM6IGRpZmYuYzo4MTgKK21zZ2lkICJQYXRjaCBmaWxlIgorbXNnc3RyICLU4OnrLefg7+vg8urgIgorCisjOiBkaWZmLmM6MTA2OQorbXNnaWQgIkU5ODogQ2Fubm90IHJlYWQgZGlmZiBvdXRwdXQiCittc2dzdHIgIkU5ODogzeXi7ufs7ubt7iDv8O736PLg8vwg4vvi7uQg6u7s4O3k+yBkaWZmIgorCisjOiBkaWZmLmM6MTgxOQorbXNnaWQgIkU5OTogQ3VycmVudCBidWZmZXIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTk5OiDA6vLo4u376SDh8/Tl8CDt5SDt4PXu5Ojy8f8g4iDw5ebo7OUg7vLr6Pfo6SIKKworIzogZGlmZi5jOjE4MzEKK21zZ2lkICJFMTAwOiBObyBvdGhlciBidWZmZXIgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAwOiDB7uv8+OUg7eXyIOHz9OXw7uIg4iDw5ebo7OUg7vLr6Pfo6SIKKworIzogZGlmZi5jOjE4MzkKK21zZ2lkICJFMTAxOiBNb3JlIHRoYW4gdHdvIGJ1ZmZlcnMgaW4gZGlmZiBtb2RlLCBkb24ndCBrbm93IHdoaWNoIG9uZSB0byB1c2UiCittc2dzdHIgIkUxMDE6IMIg8OXm6OzlIO7y6+j36Okg4e7r5eUg5OLz9SDh8/Tl8O7iLCDt5SDs7uPzIOL74fDg8vwiCisKKyM6IGRpZmYuYzoxODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDI6IENhbid0IGZpbmQgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTEwMjogzeUg7O7j8yDt4Ony6CDh8/Tl8CBcIiVzXCIiCisKKyM6IGRpZmYuYzoxODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzogwfP05fAgXCIlc1wiIO3lIO3g9e7k6PLx/yDiIPDl5ujs5SDu8uvo9+jpIgorCisjOiBkaWdyYXBoLmM6MjE5OQorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiDd6vDg7ejw8/756Okg8ejs4u7rIEVzY2FwZSDt5ev85/8g6PHv7uv85+7i4PL8IOIg5Ojj8OD05SIKKworIzogZGlncmFwaC5jOjIzODQKK21zZ2lkICJFNTQ0OiBLZXltYXAgZmlsZSBub3QgZm91bmQiCittc2dzdHIgIkU1NDQ6INTg6esg8SDw4PHq6+Dk6u7pIOrr4OLo4PLz8Psg7eUg7eDp5OXtIgorCisjOiBkaWdyYXBoLmM6MjQxMQorbXNnaWQgIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTEwNTogyu7s4O3k4CA6bG9hZGtleW1hcCDv8Ojs5e3l7eAg4u3lIPTg6evgIPH25e3g8Oj/IgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiIMDi8u7k7u/u6+3l7ejlIOrr/vfl4u7j7iDx6+7i4CAoXk5eUCkiCisKKyMuIGN0cmxfeF9tb2RlID09IDAsIF5QL15OIGNvbXBsLgorIzogZWRpdC5jOjQxCittc2dpZCAiIF5YIG1vZGUgKF5FXlleTF5dXkZeSV5LXkReVl5OXlApIgorbXNnc3RyICIgwOLy7uTu7+7r7eXt6OUgXlggKF5FXlleTF5dXkZeSV5LXkReVl5OXlApIgorCisjLiBTY3JvbGwgaGFzIGl0J3Mgb3duIG1zZ3MsIGluIGl0J3MgcGxhY2UgdGhlcmUgaXMgdGhlIG1zZyBmb3IgbG9jYWwKKyMuICogY3RybF94X21vZGUgPSAwIChlZyBjb250aW51ZV9zdGF0dXMgJiBDT05UX0xPQ0FMKSAgLS0gQWNldmVkbworIzogZWRpdC5jOjQ0Cittc2dpZCAiIEtleXdvcmQgTG9jYWwgY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiDM5fHy7e7lIODi8u7k7u/u6+3l7ejlIOrr/vfl4u7j7iDx6+7i4CAoXk5eUCkiCisKKyM6IGVkaXQuYzo0NQorbXNnaWQgIiBXaG9sZSBsaW5lIGNvbXBsZXRpb24gKF5MXk5eUCkiCittc2dzdHIgIiDA4vLu5O7v7uvt5e3o5SD25evu6SDx8vDu6uggKF5MXk5eUCkiCisKKyM6IGVkaXQuYzo0NgorbXNnaWQgIiBGaWxlIG5hbWUgY29tcGxldGlvbiAoXkZeTl5QKSIKK21zZ3N0ciAiIMDi8u7k7u/u6+3l7ejlIOjs5e3oIPTg6evgICheRl5OXlApIgorCisjOiBlZGl0LmM6NDcKK21zZ2lkICIgVGFnIGNvbXBsZXRpb24gKF5dXk5eUCkiCittc2dzdHIgIiDA4vLu5O7v7uvt5e3o5SDs5fLq6CAoXl1eTl5QKSIKKworIzogZWRpdC5jOjQ4Cittc2dpZCAiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTl5QKSIKK21zZ3N0ciAiIMDi8u7k7u/u6+3l7ejlIPjg4evu7eAg7/Py6CAoXk5eUCkiCisKKyM6IGVkaXQuYzo0OQorbXNnaWQgIiBEZWZpbml0aW9uIGNvbXBsZXRpb24gKF5EXk5eUCkiCittc2dzdHIgIiDA4vLu5O7v7uvt5e3o5SDu7/Dl5OXr5e3o/yAoXkReTl5QKSIKKworIzogZWRpdC5jOjUxCittc2dpZCAiIERpY3Rpb25hcnkgY29tcGxldGlvbiAoXkteTl5QKSIKK21zZ3N0ciAiIMDi8u7k7u/u6+3l7ejlIO/uIPHr7uLg8P4gKF5LXk5eUCkiCisKKyM6IGVkaXQuYzo1MgorbXNnaWQgIiBUaGVzYXVydXMgY29tcGxldGlvbiAoXlReTl5QKSIKK21zZ3N0ciAiIMDi8u7k7u/u6+3l7ejlIPHo7e7t6Ozu4iAoXlReTl5QKSIKKworIzogZWRpdC5jOjUzCittc2dpZCAiIENvbW1hbmQtbGluZSBjb21wbGV0aW9uICheVl5OXlApIgorbXNnc3RyICIgwOLy7uTu7+7r7eXt6OUg6u7s4O3k7e7pIPHy8O7q6CAoXlZeTl5QKSIKKworIzogZWRpdC5jOjU2Cittc2dpZCAiSGl0IGVuZCBvZiBwYXJhZ3JhcGgiCittc2dzdHIgIsru7eX2IODh5+D24CIKKworIzogZWRpdC5jOjk2MgorbXNnaWQgIid0aGVzYXVydXMnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAizeUg5+Dk4O3uIOft4Pfl7ejlIO7v9ujoICd0aGVzYXVydXMnIgorCisjOiBlZGl0LmM6MTE2NgorbXNnaWQgIidkaWN0aW9uYXJ5JyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIs3lIOfg5ODt7iDn7eD35e3o5SDu7/bo6CAnZGljdGlvbmFyeSciCisKKyM6IGVkaXQuYzoyMTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGRpY3Rpb25hcnk6ICVzIgorbXNnc3RyICLP8O7x7O7y8CDx6+7i4PD/OiAlcyIKKworIzogZWRpdC5jOjIzNjgKK21zZ2lkICIgKGluc2VydCkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAo4vHy4OLq4Ckgz/Du6vDz8urgICheRS9eWSkiCisKKyM6IGVkaXQuYzoyMzcwCittc2dpZCAiIChyZXBsYWNlKSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiICjn4Ozl7eApIM/w7urw8/Lq4CAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIs/w7vHs7vLwOiAlcyIKKworIzogZWRpdC5jOjI3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgdGFncy4iCittc2dzdHIgIsL77+7r7f/l8vH/IO/u6PHqIPHw5eToIOzl8u7qLiIKKworIzogZWRpdC5jOjMzODEKK21zZ2lkICIgQWRkaW5nIgorbXNnc3RyICIgxO7h4OLr5e3o5SIKKworIy4gc2hvd21vZGUgbWlnaHQgcmVzZXQgdGhlIGludGVybmFsIGxpbmUgcG9pbnRlcnMsIHNvIGl0IG11c3QKKyMuICogYmUgY2FsbGVkIGJlZm9yZSBsaW5lID0gbWxfZ2V0KCksIG9yIHdoZW4gdGhpcyBhZGRyZXNzIGlzIG5vCisjLiAqIGxvbmdlciBuZWVkZWQuICAtLSBBY2V2ZWRvLgorIy4KKyM6IGVkaXQuYzozNDMwCittc2dpZCAiLS0gU2VhcmNoaW5nLi4uIgorbXNnc3RyICItLSDP7ujx6i4uLiIKKworIzogZWRpdC5jOjM0ODYKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICLI8fXu5O3u5SDx6+7i7iIKKworIzogZWRpdC5jOjM0OTEKK21zZ2lkICJXb3JkIGZyb20gb3RoZXIgbGluZSIKK21zZ3N0ciAi0evu4u4g6Ocg5PDz4+7pIPHy8O7q6CIKKworIzogZWRpdC5jOjM0OTYKK21zZ2lkICJUaGUgb25seSBtYXRjaCIKK21zZ3N0ciAixeTo7fHy4uXt7e7lIPHu7vLi5fLx8uLo5SIKKworIzogZWRpdC5jOjM1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQgb2YgJWQiCittc2dzdHIgIvHu7vLi5fLx8uLo5SAlZCDo5yAlZCIKKworIzogZWRpdC5jOjM1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgIvHu7vLi5fLx8uLo5SAlZCIKKworIy4gU2tpcCBmdXJ0aGVyIGFyZ3VtZW50cyBidXQgZG8gY29udGludWUgdG8KKyMuICogc2VhcmNoIGZvciBhIHRyYWlsaW5nIGNvbW1hbmQuCisjOiBldmFsLmM6MTAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA2OiBVbmtub3duIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDY6IM3l6Ofi5fHy7eD/IO/l8OXs5e3t4P86IFwiJXNcIiIKKworIzogZXZhbC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNzogTWlzc2luZyBicmFjZXM6ICVzIgorbXNnc3RyICJFMTA3OiDP8O7v8/nl7fsg8eru4eroOiAlcyIKKworIzogZXZhbC5jOjE0MzUgZXZhbC5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiDN5fIg8uDq7ukg7+Xw5ezl7e3u6TogXCIlc1wiIgorCisjOiBldmFsLmM6MTcwNQorbXNnaWQgIkUxMDk6IE1pc3NpbmcgJzonIGFmdGVyICc/JyIKK21zZ3N0ciAiRTEwOTogz/Du7/P55e3uICc6JyDv7vHr5SAnPyciCisKKyM6IGV2YWwuYzoyMzI3Cittc2dpZCAiRTExMDogTWlzc2luZyAnKSciCittc2dzdHIgIkUxMTA6IM/w7u/z+eXt4CAnKSciCisKKyM6IGV2YWwuYzoyMzg5Cittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6IM/w7u/z+eXt4CAnXSciCisKKyM6IGV2YWwuYzoyNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIgorbXNnc3RyICJFMTEyOiDN5SDz6uDn4O3uIOjs/yDu7/bo6DogJXMiCisKKyM6IGV2YWwuYzoyNDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTM6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTExMzogzeXo5+Ll8fLt4P8g7u/26P86ICVzIgorCisjOiBldmFsLmM6MjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE0OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNDogz/Du7/P55e3gIOrg4vv36uA6ICVzIgorCisjOiBldmFsLmM6MjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE1OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNTogz/Du7/P55e3gIOrg4vv36uA6ICVzIgorCisjOiBldmFsLmM6MzA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE2OiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJXMiCittc2dzdHIgIkUxMTY6IM/g8ODs5fLw+yDk6/8g9PPt6vbo6CAlcyDn4OTg7fsg7eXi5fDt7iIKKworIzogZXZhbC5jOjMwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNzogVW5rbm93biBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTc6IM3l6Ofi5fHy7eD/IPTz7er26P86ICVzIgorCisjOiBldmFsLmM6MzA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODog0evo+Oru7CDs7e7j7iDv4PDg7OXy8O7iIOTr/yD08+3q9ujoICVzIgorCisjOiBldmFsLmM6MzA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE5OiBOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE5OiDN5eTu8fLg8u737e4g7+Dw4Ozl8vDu4iDk6/8g9PPt6vbo6CAlcyIKKworIzogZXZhbC5jOjMwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMDogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQ6ICVzIgorbXNnc3RyICJFMTIwOiA8U0lEPiDo8e/u6/zn8+Xy8f8g4u3lIPH25e3g8Oj/OiAlcyIKKworIy4KKyMuICogWWVzIHRoaXMgaXMgdWdseSwgSSBkb24ndCBwYXJ0aWN1bGFybHkgbGlrZSBpdCBlaXRoZXIuICBCdXQgZG9pbmcgaXQKKyMuICogdGhpcyB3YXkgaGFzIHRoZSBjb21wZWxsaW5nIGFkdmFudGFnZSB0aGF0IHRyYW5zbGF0aW9ucyBuZWVkIG5vdCB0bworIy4gKiBiZSB0b3VjaGVkIGF0IGFsbC4gIFNlZSBiZWxvdyB3aGF0ICdvaycgYW5kICd5bmMnIGFyZSB1c2VkIGZvci4KKyMuCisjOiBldmFsLmM6MzY4NyBndWkuYzo0MzgyIGd1aV9ndGsuYzoyMDU5Cittc2dpZCAiJk9rIgorbXNnc3RyICImT2siCisKKyM6IGV2YWwuYzo0MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIistJXMlM2xkIGxpbmVzOiAiCittc2dzdHIgIistJXMlM2xkIPHy8O7qOiAiCisKKyM6IGV2YWwuYzo1NDc3Cittc2dpZCAiIgorIiZPS1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImT0tcbiIKKyLOJvLs5e3gIgorCisjOiBldmFsLmM6NTUxNworbXNnaWQgImNhbGxlZCBpbnB1dHJlc3RvcmUoKSBtb3JlIG9mdGVuIHRoYW4gaW5wdXRzYXZlKCkiCittc2dzdHIgItTz7er26P8gaW5wdXRyZXN0b3JlKCkg4vvn++Lg5fLx/yD34PnlLCD35ewg9PPt6vbo/yBpbnB1dHNhdmUoKSIKKworIzogZXZhbC5jOjU5NzcKK21zZ2lkICJFNjU1OiBUb28gbWFueSBzeW1ib2xpYyBsaW5rcyAoY3ljbGU/KSIKK21zZ3N0ciAiRTY1Njog0evo+Oru7CDs7e7j7iDx6Ozi7uvo9+Xx6uj1IPHx++vu6iAo9ujq6z8pIgorCisjOiBldmFsLmM6NjYwOQorbXNnaWQgIkUyNDA6IE5vIGNvbm5lY3Rpb24gdG8gVmltIHNlcnZlciIKK21zZ3N0ciAiRTI0MDogzeXyIPHi/+foIPEg8eXw4uXw7uwgVmltIgorCisjOiBldmFsLmM6NjcwNgorbXNnaWQgIkUyNzc6IFVuYWJsZSB0byByZWFkIGEgc2VydmVyIHJlcGx5IgorbXNnc3RyICJFMjI3OiDR5fDi5fAg7eUg7vLi5ffg5fIiCisKKyM6IGV2YWwuYzo2NzM0Cittc2dpZCAiRTI1ODogVW5hYmxlIHRvIHNlbmQgdG8gY2xpZW50IgorbXNnc3RyICJFMjU4OiDN5SDs7uPzIO7y4uXy6PL8IOrr6OXt8vMiCisKKyM6IGV2YWwuYzo2NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiDN5SDs7uPzIO7y7/Dg4ujy/CDx7u7h+eXt6OUg5Ov/ICVzIgorCisjOiBldmFsLmM6Njg4MgorbXNnaWQgIihJbnZhbGlkKSIKK21zZ3N0ciAiKM3l7/Dg4ujr/O3uKSIKKworIzogZXZhbC5jOjgwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMTogVW5kZWZpbmVkIHZhcmlhYmxlOiAlcyIKK21zZ3N0ciAiRTEyMTogzeXu7/Dl5OXr5e3t4P8g7+Xw5ezl7e3g/zogJXMiCisKKyM6IGV2YWwuYzo4NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjE6IElsbGVnYWwgdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgIkU0NjE6IM3l5O7v8/Hy6Ozu5SDo7P8g7+Xw5ezl7e3u6TogJXMiCisKKyM6IGV2YWwuYzo4Nzg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjI6IEZ1bmN0aW9uICVzIGFscmVhZHkgZXhpc3RzLCBhZGQgISB0byByZXBsYWNlIGl0IgorbXNnc3RyICJFMTIyOiDU8+3q9uj/ICVzIPPm5SDx8/nl8fLi8+XyLiDE7uHg4vzy5SAhLCD38u7h+yDn4Ozl7ejy/CDluC4iCisKKyM6IGV2YWwuYzo4ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjM6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMjM6IM3l7u/w5eTl6+Xt7eD/IPTz7er26P86ICVzIgorCisjOiBldmFsLmM6ODg3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6IM/w7u/z+eXt4CAnKCc6ICVzIgorCisjOiBldmFsLmM6ODkwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNTogzeXk7u/z8fLo7PvpIO/g8ODs5fLwOiAlcyIKKworIzogZXZhbC5jOjg5ODIKK21zZ2lkICJFMTI2OiBNaXNzaW5nIDplbmRmdW5jdGlvbiIKK21zZ3N0ciAiRTEyNjogz/Du7/P55e3gIOru7ODt5OAgOmVuZGZ1bmN0aW9uIgorCisjOiBldmFsLmM6OTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzogzeXi7ufs7ubt7iDv5fDl7u/w5eTl6+jy/CD08+3q9uj+ICVzLCDu7eAg6PHv7uv85/Pl8vH/IgorCisjOiBldmFsLmM6OTE1OQorbXNnaWQgIkUxMjk6IEZ1bmN0aW9uIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUxMjk6INLw5eHz5fLx/yDo7P8g9PPt6vbo6CIKKworIzogZXZhbC5jOjkyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODogyOz/IPTz7er26Ogg5O7r5u3uIO3g9+jt4PL88f8g8SDv8O7v6PHt7ukg4fPq4vs6ICVzIgorCisjOiBldmFsLmM6OTQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTMwOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTMwOiDU8+3q9uj/ICVzIO3lIO7v8OXk5evl7eAiCisKKyM6IGV2YWwuYzo5NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzE6IENhbm5vdCBkZWxldGUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEzMTogzeXi7ufs7ubt7iDz5ODr6PL8IPTz7er26P4gJXMsIO7t4CDo8e/u6/zn8+Xy8f8iCisKKyM6IGV2YWwuYzo5NDU1Cittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiRTEzMjogw+vz4ejt4CDi++fu4uAg9PPt6vbo6CDh7uv8+OUsIPfl7CDn7eD35e3o5SAnbWF4ZnVuY2RlcHRoJyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6OTUwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYWxsaW5nICVzIgorbXNnc3RyICLi++fu4iAlcyIKKworIzogZXZhbC5jOjk1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWJvcnRlZCIKK21zZ3N0ciAiJXMg7/Dl8OLg7eAiCisKKyM6IGV2YWwuYzo5NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyAjJWxkIgorbXNnc3RyICIlcyDi7ufi8OD54OXyICMlbGQiCisKKyM6IGV2YWwuYzo5NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyBcIiVzXCIiCittc2dzdHIgIiVzIOLu5+Lw4Png5fIgXCIlc1wiIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV2YWwuYzo5NTk1IGV4X2NtZHMyLmM6MjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb250aW51aW5nIGluICVzIgorbXNnc3RyICLv8O7k7uvm5e3o5SDiICVzIgorCisjOiBldmFsLmM6OTYyMQorbXNnaWQgIkUxMzM6IDpyZXR1cm4gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTMzOiDq7uzg7eTgIDpyZXR1cm4g4u3lIPTz7er26OgiCisKKyM6IGV2YWwuYzo5OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjIGdsb2JhbCB2YXJpYWJsZXM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIOPr7uHg6/zt++Ug7+Xw5ezl7e375TpcbiIKKworIzogZXhfY21kcy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2N0YWwgJTAzbyIKK21zZ3N0ciAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorCisjOiBleF9jbWRzLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIj4gJWQsIEhleCAlMDR4LCBPY3RhbCAlbyIKK21zZ3N0ciAiPiAlZCwgSGV4ICUwNHgsIE9jdGFsICVvIgorCisjOiBleF9jbWRzLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIj4gJWQsIEhleCAlMDh4LCBPY3RhbCAlbyIKK21zZ3N0ciAiPiAlZCwgSGV4ICUwOHgsIE9jdGFsICVvIgorCisjOiBleF9jbWRzLmM6NDMwCittc2dpZCAiRTEzNDogTW92ZSBsaW5lcyBpbnRvIHRoZW1zZWx2ZXMiCittc2dzdHIgIkUxMzQ6INHy8O7q6CDv5fDl7OX54P7y8f8g8eDs6CDt4CDx5eH/IgorCisjOiBleF9jbWRzLmM6NDk5Cittc2dpZCAiMSBsaW5lIG1vdmVkIgorbXNnc3RyICLP5fDl7OX55e3gIO7k7eAg8fLw7urgIgorCisjOiBleF9jbWRzLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBtb3ZlZCIKK21zZ3N0ciAiz+Xw5ezl+eXt7iDx8vDu6jogJWxkIgorCisjOiBleF9jbWRzLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBmaWx0ZXJlZCIKK21zZ3N0ciAiz/Du7/P55e3uIPfl8OXnIPTo6/zy8CDx8vDu6jogJWxkIgorCisjOiBleF9jbWRzLmM6OTUyCittc2dpZCAiRTEzNTogKkZpbHRlciogQXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTEzNTogwOLy7uru7ODt5PsgKkZpbHRlciog7eUg5O7r5u37IOjn7OXt//L8IODq8uji7fvpIOHz9OXwIgorCisjOiBleF9jbWRzLmM6MTAzNworbXNnaWQgIltObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZV1cbiIKK21zZ3N0ciAiW8jn7OXt5e3o/yDt5SDx7vXw4O3l7ftdXG4iCisKKyM6IGV4X2NtZHMuYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzdmltaW5mbzogJXMgaW4gbGluZTogIgorbXNnc3RyICIlc3ZpbWluZm86ICVzIOIg8fLw7urlOiAiCisKKyM6IGV4X2NtZHMuYzoxMjg4Cittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIiIKKyJFMTM2OiB2aW1pbmZvOiDR6+j46u7sIOzt7uPuIO746OHu6iwg7vHy4Ov87eD/IPfg8fL8IPTg6evgIOHz5OXyIO/w7u/z+eXt4CIKKworIzogZXhfY21kcy5jOjEzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiJXMlcyVzIgorbXNnc3RyICLX8uXt6OUg9ODp6+AgdmltaW5mbyBcIiVzXCIlcyVzJXMiCisKKyM6IGV4X2NtZHMuYzoxMzI0Cittc2dpZCAiIGluZm8iCittc2dzdHIgIiDo7fTuIgorCisjOiBleF9jbWRzLmM6MTMyNQorbXNnaWQgIiBtYXJrcyIKK21zZ3N0ciAiIO7y7OXy7uoiCisKKyM6IGV4X2NtZHMuYzoxMzI2Cittc2dpZCAiIEZBSUxFRCIKK21zZ3N0ciAiIM3F08TA183OIgorCisjOiBleF9jbWRzLmM6MTQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM3OiBWaW1pbmZvIGZpbGUgaXMgbm90IHdyaXRhYmxlOiAlcyIKK21zZ3N0ciAiRTEzNzogz/Dg4uAg7eAg5+Dv6PH8IPTg6evgIHZpbWluZm8g7vLx8/Lx8uLz/vI6ICVzIgorCisjOiBleF9jbWRzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiDN5eLu5+zu5u3uIOfg7+jx4PL8IPTg6esgdmltaW5mbyAlcyEiCisKKyM6IGV4X2NtZHMuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAix+Dv6PH8IPTg6evgIHZpbWluZm8gXCIlc1wiIgorCisjLiBXcml0ZSB0aGUgaW5mbzoKKyM6IGV4X2NtZHMuYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVGhpcyB2aW1pbmZvIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBWaW0gJXMuXG4iCittc2dzdHIgIiMg3fLu8iD04OnrIHZpbWluZm8g4OLy7uzg8uj35fHq6CDx7ufk4O0gVmltICVzLlxuIgorCisjOiBleF9jbWRzLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIMXj7iDs7ubt7iAo7vHy7vDu5u3uISkg8OXk4Ory6PDu4uDy/C5cbiIKKyJcbiIKKworIzogZXhfY21kcy5jOjE2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIyBWYWx1ZSBvZiAnZW5jb2RpbmcnIHdoZW4gdGhpcyBmaWxlIHdhcyB3cml0dGVuXG4iCittc2dzdHIgIiMgx+3g9+Xt6OUg7u/26OggJ2VuY29kaW5nJyDiIOzu7OXt8iDn4O/o8egg9ODp6+BcbiIKKworIzogZXhfY21kcy5jOjE3NTIKK21zZ2lkICJJbGxlZ2FsIHN0YXJ0aW5nIGNoYXIiCittc2dzdHIgIs3l5O7v8/Hy6Oz76SDt4Pfg6/zt++kg8ejs4u7rIgorCisjOiBleF9jbWRzLmM6MjA5NyBleF9jbWRzLmM6MjM2MiBleF9jbWRzMi5jOjc2MworbXNnaWQgIlNhdmUgQXMiCittc2dzdHIgItHu9fDg7ejy/CDq4OoiCisKKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjE0MAorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiDU4OnrIOfg4/Dz5uXtIOIg5PDz4+7sIOHz9OXw5SIKKworIzogZXhfY21kcy5jOjIxNzQKK21zZ2lkICJXcml0ZSBwYXJ0aWFsIGZpbGU/IgorbXNnc3RyICLH4O/o8eDy/CD04OnrIPfg8fLo9+3uPyIKKworIzogZXhfY21kcy5jOjIxODEKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiRTE0MDogxOv/IOfg7+jx6CD34PHy6CDh8/Tl8OAg6PHv7uv85/Pp8uUgISIKKworIzogZXhfY21kcy5jOjIyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUgXCIlLipzXCI/IgorbXNnc3RyICLP5fDl7+jx4PL8IPHz+eXx8uLz/vno6SD04OnrIFwiJS4qc1wiPyIKKworIzogZXhfY21kcy5jOjIzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MTogTm8gZmlsZSBuYW1lIGZvciBidWZmZXIgJWxkIgorbXNnc3RyICJFMTQxOiDB8/Tl8CAlbGQg7eUg8eL/5+DtIPEg6Ozl7eXsIPTg6evgIgorCisjOiBleF9jbWRzLmM6MjQwNQorbXNnaWQgIkUxNDI6IEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24iCittc2dzdHIgIkUxNDI6INTg6esg7eUg8e718ODtuO06IOfg7+jx/CDu8urr/vfl7eAg7u/26OXpICd3cml0ZSciCisKKyM6IGV4X2NtZHMuYzoyNDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgZm9yIFwiJS4qc1wiLlxuIgorIkRvIHlvdSB3aXNoIHRvIHdyaXRlIGFueXdheT8iCittc2dzdHIgIiIKKyLE6/8gXCIlLipzXCIg4urr/vfl7eAg7u/26P8gJ3JlYWRvbmx5Jy5cbiIKKyLH4O/o8eDy/D8iCisKKyM6IGV4X2NtZHMuYzoyNTk3Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICLQ5eTg6vLo8O7i4O3o5SD04Onr4CIKKworIzogZXhfY21kcy5jOjMyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MzogQXV0b2NvbW1hbmRzIHVuZXhwZWN0ZWRseSBkZWxldGVkIG5ldyBidWZmZXIgJXMiCittc2dzdHIgIkUxNDM6IMDi8u7q7uzg7eT7IO3l7ubo5ODt7e4g8+Ho6+gg7e7i++kg4fP05fAgJXMiCisKKyM6IGV4X2NtZHMuYzozMzM5Cittc2dpZCAiRTE0NDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gOnoiCittc2dzdHIgIkUxNDQ6IM/g8ODs5fLwIOru7ODt5PsgOnog5O7r5uXtIOH78vwg9+jx6+7sIgorCisjOiBleF9jbWRzLmM6MzQyNAorbXNnaWQgIkUxNDU6IFNoZWxsIGNvbW1hbmRzIG5vdCBhbGxvd2VkIGluIHJ2aW0iCittc2dzdHIgIkUxNDU6IMjx7+7r/Ofu4uDt6OUg6u7s4O3kIO7h7uvu9+roIO3lIOTu7/Px6uDl8vH/IOIgcnZpbS4iCisKKyM6IGV4X2NtZHMuYzozNTMxCittc2dpZCAiRTE0NjogUmVndWxhciBleHByZXNzaW9ucyBjYW4ndCBiZSBkZWxpbWl0ZWQgYnkgbGV0dGVycyIKK21zZ3N0ciAiRTE0Njog0OXj8+v/8O375SDi+/Dg5uXt6P8g7eUg7O7j8/Ig8ODn5OXr//L88f8g4fPq4uDs6CIKKworIzogZXhfY21kcy5jOjM4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKK21zZ3N0ciAi5+Ds5e3o8vwg7eAgJXM/ICh5L24vYS9xL2wvXkUvXlkpIgorCisjOiBleF9jbWRzLmM6NDI3MAorbXNnaWQgIihJbnRlcnJ1cHRlZCkgIgorbXNnc3RyICIoz/Dl8OLg7e4pIgorCisjOiBleF9jbWRzLmM6NDI3NAorbXNnaWQgIjEgc3Vic3RpdHV0aW9uIgorbXNnc3RyICLO5O3gIOfg7OXt4CIKKworIzogZXhfY21kcy5jOjQyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIHN1YnN0aXR1dGlvbnMiCittc2dzdHIgIiVsZCDn4Ozl7SIKKworIzogZXhfY21kcy5jOjQyNzkKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIg4iDu5O3u6SDx8vDu6uUiCisKKyM6IGV4X2NtZHMuYzo0MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiAlbGQgbGluZXMiCittc2dzdHIgIiDiICVsZCDx8vAuIgorCisjOiBleF9jbWRzLmM6NDMzMgorbXNnaWQgIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE0Nzogyu7s4O3k4CA6Z2xvYmFsIO3lIOzu5uXyIOH78vwg8OXq8/Dx6OLt7ukiCisKKyM6IGV4X2NtZHMuYzo0MzY3Cittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IMIg6u7s4O3k5SA6Z2xvYmFsIO/w7u/z+eXt7iDw5ePz6//w7e7lIOL78ODm5e3o5SIKKworIzogZXhfY21kcy5jOjQ0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0dGVybiBmb3VuZCBpbiBldmVyeSBsaW5lOiAlcyIKK21zZ3N0ciAi0e7u8uLl8vHy4ujlIPjg4evu7fMg7eDp5OXt7iDt4CDq4Obk7ukg8fLw7urlOiAlcyIKKworIzogZXhfY21kcy5jOjQ0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgTGFzdCBTdWJzdGl0dXRlIFN0cmluZzpcbiIKKyIkIgorbXNnc3RyICIiCisiXG4iCisiIyDP7vHr5eTt//8g8fLw7urgIOTr/yDn4Ozl7fs6XG4iCisiJCIKKworIzogZXhfY21kcy5jOjQ1OTgKK21zZ2lkICJFNDc4OiBEb24ndCBwYW5pYyEiCittc2dzdHIgIkU0Nzg6INHv7uru6fHy4ujlLCDy7uv86u4g8e/u6u7p8fLi6OUhIgorCisjOiBleF9jbWRzLmM6NDY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjYxOiBTb3JyeSwgbm8gJyVzJyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTY2MTog6iDx7ubg6+Xt6P4sIPHv8ODi6uAgJyVzJyDk6/8gJXMg7vLx8/Lx8uLz5fIiCisKKyM6IGV4X2NtZHMuYzo0NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTogyiDx7ubg6+Xt6P4g8e/w4OLq4CDk6/8gJXMg7vLx8/Lx8uLz5fIiCisKKyM6IGV4X2NtZHMuYzo0Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAiyOfi6O3o8uUsIPTg6esg8e/w4OLq6CBcIiVzXCIg7eUg7eDp5OXtIgorCisjOiBleF9jbWRzLmM6NTE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiAlcyDt5SD/4uv/5fLx/yDq4PLg6+7j7uwiCisKKyM6IGV4X2NtZHMuYzo1MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTI6IENhbm5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTUyOiDN5eLu5+zu5u3uIO7y6vD78vwgJXMg5Ov/IOfg7+jx6CIKKworIzogZXhfY21kcy5jOjUzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MzogVW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxNTM6IM3l4u7n7O7m7e4g7vLq8Pvy/CAlcyDk6/8g9/Ll7ej/IgorCisjOiBleF9jbWRzLmM6NTM2NworIywgYy1mb3JtYXQKK21zZ2lkICJFNjcwOiBNaXggb2YgaGVscCBmaWxlIGVuY29kaW5ncyB3aXRoaW4gYSBsYW5ndWFnZTogJXMiCittc2dzdHIgIkU2NzA6INTg6ev7IPHv8ODi6ugg6PHv7uv85/P+8iDw4Oft++Ug6u7k6PDu4uroIOTr/yDu5O3u4+4g/+f76uA6ICVzIgorCisjOiBleF9jbWRzLmM6NTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU0OiBEdXBsaWNhdGUgdGFnIFwiJXNcIiBpbiBmaWxlICVzIgorbXNnc3RyICJFMTU0OiDP7uLy7vD//vng//H/IOzl8urgIFwiJXNcIiDiIPTg6evlICVzIgorCisjOiBleF9jbWRzLmM6NTU1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTYwOiBVbmtub3duIHNpZ24gY29tbWFuZDogJXMiCittc2dzdHIgIkUxNjA6IM3l6Ofi5fHy7eD/IOru7ODt5OAg5+3g9+rgICVzIgorCisjOiBleF9jbWRzLmM6NTU3NworbXNnaWQgIkUxNTY6IE1pc3Npbmcgc2lnbiBuYW1lIgorbXNnc3RyICJFMTU2OiDP8O7v8/nl7e4g6Oz/IOft4Pfq4CIKKworIzogZXhfY21kcy5jOjU2MjMKK21zZ2lkICJFNjEyOiBUb28gbWFueSBzaWducyBkZWZpbmVkIgorbXNnc3RyICJFNjEyOiDO7/Dl5OXr5e3uIPHr6Pjq7uwg7O3u4+4g5+3g9+ru4iIKKworIzogZXhfY21kcy5jOjU2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzOTogSW52YWxpZCBzaWduIHRleHQ6ICVzIgorbXNnc3RyICJFMjM5OiDN5e/w4OLo6/zt++kg8uXq8fIg5+3g9+rgOiAlcyIKKworIzogZXhfY21kcy5jOjU3MjIgZXhfY21kcy5jOjU5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NTogVW5rbm93biBzaWduOiAlcyIKK21zZ3N0ciAiRTE1NTogzeXo5+Ll8fLt++kg5+3g9+7qOiAlcyIKKworIzogZXhfY21kcy5jOjU3NzEKK21zZ2lkICJFMTU5OiBNaXNzaW5nIHNpZ24gbnVtYmVyIgorbXNnc3RyICJFMTU5OiDP8O7v8/nl7SDt7uzl8CDn7eD36uAiCisKKyM6IGV4X2NtZHMuYzo1ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTg6IEludmFsaWQgYnVmZmVyIG5hbWU6ICVzIgorbXNnc3RyICJFMTU4OiDN5e/w4OLo6/zt7uUg6Oz/IOHz9OXw4DogJXMiCisKKyM6IGV4X2NtZHMuYzo1ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiDN5e/w4OLo6/zt++kgSUQg5+3g9+rgOiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1OTYyCittc2dpZCAiIChOT1QgRk9VTkQpIgorbXNnc3RyICIgKM3FIM3AycTFzc4pIgorCisjOiBleF9jbWRzLmM6NTk2NAorbXNnaWQgIiAobm90IHN1cHBvcnRlZCkiCittc2dzdHIgIiAo7eUg7+7k5OXw5uji4OXy8f8pIgorCisjOiBleF9jbWRzLmM6NjA2MworbXNnaWQgIltEZWxldGVkXSIKK21zZ3N0ciAiW9Pk4Ovl7e5dIgorCisjOiBleF9jbWRzMi5jOjkyCittc2dpZCAiRW50ZXJpbmcgRGVidWcgbW9kZS4gIFR5cGUgXCJjb250XCIgdG8gY29udGludWUuIgorbXNnc3RyICLC6uv+97jtIPDl5ujsIO7y6+Dk6uguIMTr/yDv8O7k7uvm5e3o/yDt4OHl8Ojy5SBcImNvbnRcIiIKKworIzogZXhfY21kczIuYzo5NiBleF9kb2NtZC5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogJXMiCittc2dzdHIgIvHy8O7q4CAlbGQ6ICVzIgorCisjOiBleF9jbWRzMi5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNtZDogJXMiCittc2dzdHIgIuru7ODt5OA6ICVzIgorCisjOiBleF9jbWRzMi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIgorbXNnc3RyICLS7vfq4CDu8fLg7e7i6ugg4iBcIiVzJXNcIiDx8vAuICVsZCIKKworIzogZXhfY21kczIuYzo1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MTogQnJlYWtwb2ludCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMTYxOiDS7vfq4CDu8fLg7e7i6ugg7eUg7eDp5OXt4DogJXMiCisKKyM6IGV4X2NtZHMyLmM6NTY2Cittc2dpZCAiTm8gYnJlYWtwb2ludHMgZGVmaW5lZCIKK21zZ3N0ciAi0u736ugg7vHy4O3u4uroIO3lIO7v8OXk5evl7fsiCisKKyM6IGV4X2NtZHMyLmM6NTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUzZCAgJXMgJXMgIGxpbmUgJWxkIgorbXNnc3RyICIlM2QgICVzICVzIPHy8C4gJWxkIgorCisjOiBleF9jbWRzMi5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlIGNoYW5nZXMgdG8gXCIlLipzXCI/IgorbXNnc3RyICLR7vXw4O3o8vwg6Ofs5e3l7ej/IOIgXCIlLipzXCI/IgorCisjOiBleF9jbWRzMi5jOjc4OCBleF9kb2NtZC5jOjkzNzgKK21zZ2lkICJVbnRpdGxlZCIKK21zZ3N0ciAiweXnIOjs5e3oIgorCisjOiBleF9jbWRzMi5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYyOiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTE2MjogzeXx7vXw4O247e375SDo5+zl7eXt6P8g4iDh8/Tl8OUgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjk4NAorbXNnaWQgIldhcm5pbmc6IEVudGVyZWQgb3RoZXIgYnVmZmVyIHVuZXhwZWN0ZWRseSAoY2hlY2sgYXV0b2NvbW1hbmRzKSIKK21zZ3N0ciAiIgorIs/w5eTz7/Dl5uTl7ejlOiDN5e7m6OTg7e376SDv5fDl9e7kIOIg5PDz4+7pIOHz9OXwICjv8O7i5fD88uUg4OLy7uru7ODt5PspIgorCisjOiBleF9jbWRzMi5jOjEzODcKK21zZ2lkICJFMTYzOiBUaGVyZSBpcyBvbmx5IG9uZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNjM6IMTr/yDw5eTg6vLo8O7i4O3o/yDk7vHy8+/l7SDy7uv86u4g7uTo7SD04OnrIgorCisjOiBleF9jbWRzMi5jOjEzODkKK21zZ2lkICJFMTY0OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGZpbGUiCittc2dzdHIgIkUxNjQ6IN3y7iDv5fDi++kg9ODp6yIKKworIzogZXhfY21kczIuYzoxMzkxCittc2dpZCAiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiCittc2dzdHIgIkUxNjU6IN3y7iDv7vHr5eTt6Okg9ODp6yIKKworIzogZXhfY21kczIuYzoxODA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NjY6IGNvbXBpbGVyIG5vdCBzdXBwb3J0ZWQ6ICVzIgorbXNnc3RyICJFNjY2OiDq7uzv6Ov/8u7wIO3lIO/u5OTl8Obo4uDl8vH/OiAlcyIKKworIzogZXhfY21kczIuYzoxODk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIGluIFwiJXNcIiIKK21zZ3N0ciAiz+7o8eogXCIlc1wiIOIgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIs/u6PHqIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgIu3lIO3g6eTl7e4g4iAncnVudGltZXBhdGgnOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTk3NAorbXNnaWQgIlNvdXJjZSBWaW0gc2NyaXB0IgorbXNnc3RyICLC++/u6+3o8vwg8fbl7eDw6OkgVmltIgorCisjOiBleF9jbWRzMi5jOjIxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNvdXJjZSBhIGRpcmVjdG9yeTogXCIlc1wiIgorbXNnc3RyICLN5ev85/8g8ffo8uDy/CDq4PLg6+7jOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAi7eXi7ufs7ubt7iDx9+jy4PL8IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAi8fLw7urgICVsZDog7eXi7ufs7ubt7iDx9+jy4PL8IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAi8ffo8vvi4O3o5SDx9uXt4PDo/yBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogc291cmNpbmcgXCIlc1wiIgorbXNnc3RyICLx8vDu6uAgJWxkOiDx9+jy++Lg7ejlIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNvdXJjaW5nICVzIgorbXNnc3RyICLx9+jy++Lg7ejlIPH25e3g8Oj/ICVzIOfg4uXw+OXt7iIKKworIzogZXhfY21kczIuYzoyNzA3Cittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIiIKKyJXMTU6IM/w5eTz7/Dl5uTl7ejlOiDt5e/w4OLo6/zt++kg8ODn5OXr6PLl6/wg8fLw7uroLiDC7ufs7ubt7iDv8O7v8/nl7e4gXk0iCisKKyM6IGV4X2NtZHMyLmM6Mjc1NgorbXNnaWQgIkUxNjc6IDpzY3JpcHRlbmNvZGluZyB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjc6IMru7ODt5OAgOnNjcmlwdGVuY29kaW5nIOjx7+7r/Ofz5fLx/yDi7eUg9ODp6+Ag8fbl7eDw6P8iCisKKyM6IGV4X2NtZHMyLmM6Mjc4OQorbXNnaWQgIkUxNjg6IDpmaW5pc2ggdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY4OiDK7uzg7eTgIDpmaW5pc2gg6PHv7uv85/Pl8vH/IOLt5SD04Onr4CDx9uXt4PDo/yIKKworIzogZXhfY21kczIuYzozMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhZ2UgJWQiCittc2dzdHIgItHy8ODt6PbgICVkIgorCisjOiBleF9jbWRzMi5jOjMzOTQKK21zZ2lkICJObyB0ZXh0IHRvIGJlIHByaW50ZWQiCittc2dzdHIgIs/l9+Dy4PL8IO3l9+Xj7iIKKworIzogZXhfY21kczIuYzozNDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nIHBhZ2UgJWQgKCVkJSUpIgorbXNnc3RyICLP5ffg8vwg8fLwLiAlZCAoJWQlJSkiCisKKyM6IGV4X2NtZHMyLmM6MzQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgQ29weSAlZCBvZiAlZCIKK21zZ3N0ciAiIMru7+j/ICVkIOjnICVkIgorCisjOiBleF9jbWRzMi5jOjM1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRlZDogJXMiCittc2dzdHIgIs3g7+X34PLg7e46ICVzIgorCisjOiBleF9jbWRzMi5jOjM1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgYWJvcnRlZCIKK21zZ3N0ciAiz+X34PL8IO/w5erw4Pnl7eAiCisKKyM6IGV4X2NtZHMyLmM6MzkxNAorbXNnaWQgIkU0NTU6IEVycm9yIHdyaXRpbmcgdG8gUG9zdFNjcmlwdCBvdXRwdXQgZmlsZSIKK21zZ3N0ciAiRTQ1NTogzvjo4ergIOfg7+jx6CDiIPTg6esgUG9zdFNjcmlwdCIKKworIzogZXhfY21kczIuYzo0MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjQ6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU2MjQ6IM3l4u7n7O7m7e4g7vLq8Pvy/CD04OnrIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MTk5IGV4X2NtZHMyLmM6NDgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6IM3l4u7n7O7m7e4g7/Du9+jy4PL8IPTg6esg8OXx8/Dx7uIgUG9zdFNjcmlwdCBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDIwNworIywgYy1mb3JtYXQKK21zZ2lkICJFNjE4OiBmaWxlIFwiJXNcIiBpcyBub3QgYSBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUiCittc2dzdHIgIkU2MTg6IPTg6esgXCIlc1wiIO3lIP/i6//l8vH/IPTg6evu7CDw5fHz8PHu4iBQb3N0U2NyaXB0IgorCisjOiBleF9jbWRzMi5jOjQyMjIgZXhfY21kczIuYzo0MjQyIGV4X2NtZHMyLmM6NDI1NyBleF9jbWRzMi5jOjQyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOTogZmlsZSBcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIKK21zZ3N0ciAiRTYxOTog9ODp6yBcIiVzXCIg7eUg/+Lr/+Xy8f8g5O7v8/Hy6Oz77CD04Onr7uwg8OXx8/Dx7uIgUG9zdFNjcmlwdCIKKworIzogZXhfY21kczIuYzo0MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjE6IFwiJXNcIiByZXNvdXJjZSBmaWxlIGhhcyB3cm9uZyB2ZXJzaW9uIgorbXNnc3RyICJFNjIxOiD04OnrIPDl8fPw8e7iIFwiJXNcIiDt5ejn4uXx8u3u6SDi5fDx6OgiCisKKyM6IGV4X2NtZHMyLmM6NDc3NgorbXNnaWQgIkUzMjQ6IENhbid0IG9wZW4gUG9zdFNjcmlwdCBvdXRwdXQgZmlsZSIKK21zZ3N0ciAiRTMyNDogzeXi7ufs7ubt7iDu8urw+/L8IPTg6esgUG9zdFNjcmlwdCIKKworIzogZXhfY21kczIuYzo0ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTY6IM3l4u7n7O7m7e4g7vLq8Pvy/CD04OnrIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0OTI4Cittc2dpZCAiRTQ1NjogQ2FuJ3QgZmluZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCJwcm9sb2cucHNcIiIKK21zZ3N0ciAiRTQ1Njog1ODp6yDw5fHz8PHu4iBQb3N0U2NyaXB0IFwicHJvbG9nLnBzXCIg7eUg7eDp5OXtIgorCisjOiBleF9jbWRzMi5jOjQ5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3QgZmluZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlcy5wc1wiIgorbXNnc3RyICJFNDU2OiDU4OnrIPDl8fPw8e7iIFBvc3RTY3JpcHQgXCIlcy5wc1wiIO3lIO3g6eTl7SIKKworIzogZXhfY21kczIuYzo0OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjA6IFVuYWJsZSB0byBjb252ZXJ0IGZyb20gbXVsdGktYnl0ZSB0byBcIiVzXCIgZW5jb2RpbmciCittc2dzdHIgIiIKKyJFNjIwOiDP8OXu4fDg5+7i4O3o5SDo5yDs8+v88ujh4Ony7fv1IPHo7OLu6+7iIOIg6u7k6PDu4urzIFwiJXNcIiDt5eLu5+zu5u3uIgorCisjOiBleF9jbWRzMi5jOjUxMDIKK21zZ2lkICJTZW5kaW5nIHRvIHByaW50ZXIuLi4iCittc2dzdHIgIs7y7/Dg4urgIO3gIO/l9+Dy/C4uLiIKKworIzogZXhfY21kczIuYzo1MTA2Cittc2dpZCAiRTM2NTogRmFpbGVkIHRvIHByaW50IFBvc3RTY3JpcHQgZmlsZSIKK21zZ3N0ciAiRTM2NTogzeUg8+Tg6+7x/CDi++/u6+3o8vwg7+X34PL8IPTg6evgIFBvc3RTY3JpcHQiCisKKyM6IGV4X2NtZHMyLmM6NTEwOAorbXNnaWQgIlByaW50IGpvYiBzZW50LiIKK21zZ3N0ciAix+Dk4O3o5SDt4CDv5ffg8vwg7vLv8ODi6+Xt7i4iCisKKyM6IGV4X2NtZHMyLmM6NTYxOAorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50ICVzbGFuZ3VhZ2U6IFwiJXNcIiIKK21zZ3N0ciAiwOry6OLt++kgJXP/5/vqOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NTYyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTk3OiBDYW5ub3Qgc2V0IGxhbmd1YWdlIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTE5NzogzeXi7ufs7ubt7iDx7OXt6PL8IP/n++og7eAgXCIlc1wiIgorCisjOiBleF9kb2NtZC5jOjUyNQorbXNnaWQgIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIgorbXNnc3RyICLP5fDl9e7kIOIg8OXm6OwgRXguIMTr/yDv5fDl9e7k4CDiIM7h+/ft++kg8OXm6Owg7eDh5fDo8uUgXCJ2aXN1YWxcIiIKKworIy4gbXVzdCBiZSBhdCBFT0YKKyM6IGV4X2RvY21kLmM6NTYxCittc2dpZCAiRTUwMTogQXQgZW5kLW9mLWZpbGUiCittc2dzdHIgIkU1MDE6IMIg6u7t9uUg9ODp6+AiCisKKyM6IGV4X2RvY21kLmM6NjY5Cittc2dpZCAiRTE2OTogQ29tbWFuZCB0b28gcmVjdXJzaXZlIgorbXNnc3RyICJFMTY5OiBD6+j46u7sIPDl6vPw8eji7eD/IOru7ODt5OAiCisKKyM6IGV4X2RvY21kLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA1OiBFeGNlcHRpb24gbm90IGNhdWdodDogJXMiCittc2dzdHIgIkU2MDU6IMjx6uv+9+jy5ev87eD/IPHo8vPg9uj/IO3lIO7h8ODh7vLg7eA6ICVzIgorCisjOiBleF9kb2NtZC5jOjEzMTcKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICLK7u3l9iDx9+jy4O3t7uPuIPTg6evgIgorCisjOiBleF9kb2NtZC5jOjEzMTgKK21zZ2lkICJFbmQgb2YgZnVuY3Rpb24iCittc2dzdHIgIsru7eX2IPTz7er26OgiCisKKyM6IGV4X2RvY21kLmM6MTkwNworbXNnaWQgIkU0NjQ6IEFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgIkU0NjQ6IM3l7uTt7uft4Pft7uUg6PHv7uv85+7i4O3o5SDq7uzg7eT7IO/u6/zn7uLg8uXr/yIKKworIzogZXhfZG9jbWQuYzoxOTIxCittc2dpZCAiRTQ5MjogTm90IGFuIGVkaXRvciBjb21tYW5kIgorbXNnc3RyICJFNDkyOiDd8u4g7eUg6u7s4O3k4CDw5eTg6vLu8OAiCisKKyM6IGV4X2RvY21kLmM6MjAyOAorbXNnaWQgIkU0OTM6IEJhY2t3YXJkcyByYW5nZSBnaXZlbiIKK21zZ3N0ciAiRTQ5Mzogx+Dk4O0g7uHw4PLt++kg5Ojg7+Dn7u0iCisKKyM6IGV4X2RvY21kLmM6MjAzNworbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiwgT0sgdG8gc3dhcCIKK21zZ3N0ciAix+Dk4O0g7uHw4PLt++kg5Ojg7+Dn7u0sIOzl7f/l7CDj8ODt6Pb7IOzl8fLg7OgiCisKKyM6IGV4X2RvY21kLmM6MjE2MAorbXNnaWQgIkU0OTQ6IFVzZSB3IG9yIHc+PiIKK21zZ3N0ciAiRTQ5NDogyPHv7uv85/Pp8uUgdyDo6+ggdz4+IgorCisjOiBleF9kb2NtZC5jOjM3ODYKK21zZ2lkICJFMzE5OiBTb3JyeSwgdGhlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUzMTk6IMjn4ujt6PLlLCD98uAg6u7s4O3k4CDt5eTu8fLz7+3gIOIg5ODt7e7pIOLl8PHo6CIKKworIzogZXhfZG9jbWQuYzozOTg5Cittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6INDg5/Dl+OXt7iDo8e/u6/zn7uLg8vwg8u7r/OruIO7k7e4g6Oz/IPTg6evgIgorCisjOiBleF9kb2NtZC5jOjQ1NjkKK21zZ2lkICIxIG1vcmUgZmlsZSB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICIxIPTg6esg7ubo5ODl8iDw5eTg6vLo8O7i4O3o/y4gwvvp8ug/IgorCisjOiBleF9kb2NtZC5jOjQ1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICLF8fL8IO3l7vLw5eTg6vLo8O7i4O3t++Ug9ODp6/sgKCVkKS4gwvvp8ug/IgorCisjOiBleF9kb2NtZC5jOjQ1NzkKK21zZ2lkICJFMTczOiAxIG1vcmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTczOiAxIPTg6esg7ubo5ODl8iDw5eTg6vLo8O7i4O3o/y4iCisKKyM6IGV4X2RvY21kLmM6NDU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiDF8fL8IO3l7vLw5eTg6vLo8O7i4O3t++Ug9ODp6/sgKCVkKS4iCisKKyM6IGV4X2RvY21kLmM6NDY3NgorbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxNzQ6IMru7ODt5OAg8+blIPHz+eXx8uLz5fIuIMTu4eDi/PLlICEg5Ov/IOfg7OXt+y4iCisKKyM6IGV4X2RvY21kLmM6NDc4NworbXNnaWQgIiIKKyJcbiIKKyIgICAgTmFtZSAgICAgICAgQXJncyBSYW5nZSBDb21wbGV0ZSAgRGVmaW5pdGlvbiIKK21zZ3N0ciAiIgorIlxuIgorIiAgICDI7P8gICAgICDP4PDg7C4gxOjg7y4gxO7v7uvtLiAgICDO7/Dl5OXr5e3o5SIKKworIzogZXhfZG9jbWQuYzo0ODc2Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICLK7uzg7eT7LCDu7/Dl5OXruO3t++Ug7+7r/Ofu4uDy5evl7Cwg7eUg7uHt4PDz5uXt+y4iCisKKyM6IGV4X2RvY21kLmM6NDkwOAorbXNnaWQgIkUxNzU6IE5vIGF0dHJpYnV0ZSBzcGVjaWZpZWQiCittc2dzdHIgIkUxNzU6IO/g8ODs5fLwIO3lIOfg5ODtIgorCisjOiBleF9kb2NtZC5jOjQ5NjAKK21zZ2lkICJFMTc2OiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIkUxNzY6IM3l7/Dg4ujr/O3u5SDq7uvo9+Xx8uLuIO/g8ODs5fLw7uIiCisKKyM6IGV4X2RvY21kLmM6NDk3NQorbXNnaWQgIkUxNzc6IENvdW50IGNhbm5vdCBiZSBzcGVjaWZpZWQgdHdpY2UiCittc2dzdHIgIkUxNzc6INfo8evuLe/w6PHy4OLq8yDt5ev85/8g8+rg5/vi4PL8IOTi4Obk+yIKKworIzogZXhfZG9jbWQuYzo0OTg1Cittc2dpZCAiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIKK21zZ3N0ciAiRTE3ODogzeXv8ODi6Ov87e7lIOft4Pfl7ejlIPfo8evgLe/w6PHy4OLq6CDv7iDz7O7r9+Dt6P4iCisKKyM6IGV4X2RvY21kLmM6NTAxNgorbXNnaWQgIkUxNzk6IGFyZ3VtZW50IHJlcXVpcmVkIGZvciBjb21wbGV0ZSIKK21zZ3N0ciAiRTE3OTog5Ov/IOfg4uXw+OXt6P8g8vDl4fPl8vH/IPPq4Ofg8vwg7+Dw4Ozl8vAiCisKKyM6IGV4X2RvY21kLmM6NTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgwOiBJbnZhbGlkIGNvbXBsZXRlIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTE4MDogzeXv8ODi6Ov87e7lIOft4Pfl7ejlIOTu7+7r7eXt6P86ICVzIgorCisjOiBleF9kb2NtZC5jOjUwNTcKK21zZ2lkICJFNDY4OiBDb21wbGV0aW9uIGFyZ3VtZW50IG9ubHkgYWxsb3dlZCBmb3IgY3VzdG9tIGNvbXBsZXRpb24iCittc2dzdHIgIiIKKyJFNDY4OiDP4PDg7OXy8CDg4vLu5O7v7uvt5e3o/yDs7ubt7iDo8e/u6/zn7uLg8vwg8u7r/OruIPEg7vHu4fvsIOTu7+7r7eXt6OXsIgorCisjOiBleF9kb2NtZC5jOjUwNjMKK21zZ2lkICJFNDY3OiBDdXN0b20gY29tcGxldGlvbiByZXF1aXJlcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IgorbXNnc3RyICJFNDY3OiDO8e7h7uUg5O7v7uvt5e3o5SDy8OXh8+XyIPPq4Ofg7ej/IO/g8ODs5fLw4CD08+3q9ujoIgorCisjOiBleF9kb2NtZC5jOjUwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MTogSW52YWxpZCBhdHRyaWJ1dGU6ICVzIgorbXNnc3RyICJFMTgxOiDN5e/w4OLo6/zt++kg4PLw6OHz8jogJXMiCisKKyM6IGV4X2RvY21kLmM6NTExNworbXNnaWQgIkUxODI6IEludmFsaWQgY29tbWFuZCBuYW1lIgorbXNnc3RyICJFMTgyOiDN5e/w4OLo6/zt7uUg6Oz/IOru7ODt5PsiCisKKyM6IGV4X2RvY21kLmM6NTEzMgorbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4Mzogyu7s4O3k4CDv7uv85+7i4PLl6/8g5O7r5u3gIO3g9+jt4PL88f8g8SDn4OPr4OLt7ukg4fPq4vsiCisKKyM6IGV4X2RvY21kLmM6NTIwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTg0OiBObyBzdWNoIHVzZXItZGVmaW5lZCBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE4NDogzeXyIPLg6u7pIOru7ODt5Psg7+7r/Ofu4uDy5ev/OiAlcyIKKworIzogZXhfZG9jbWQuYzo1NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTog1uLl8u7i4P8g8fXl7OAgJXMg7eUg7eDp5OXt4CIKKworIzogZXhfZG9jbWQuYzo1NjcyCittc2dpZCAiR3JlZXRpbmdzLCBWaW0gdXNlciEiCittc2dzdHIgIs/w6OLl8iwg7+7r/Ofu4uDy5ev8IFZpbSEiCisKKyM6IGV4X2RvY21kLmM6NjM4OQorbXNnaWQgIkVkaXQgRmlsZSBpbiBuZXcgd2luZG93IgorbXNnc3RyICLQ5eTg6vLo8O7i4PL8IPTg6esg4iDt7uLu7CDu6u3lIgorCisjOiBleF9kb2NtZC5jOjY2ODQKK21zZ2lkICJObyBzd2FwIGZpbGUiCittc2dzdHIgIsHl5yDx4u7vLfTg6evgIgorCisjOiBleF9kb2NtZC5jOjY3ODgKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAixO7h4OLo8vwg9ODp6yIKKworIzogZXhfZG9jbWQuYzo2ODUyCittc2dpZCAiRTE4NjogTm8gcHJldmlvdXMgZGlyZWN0b3J5IgorbXNnc3RyICJFMTg2OiDN5fIg7/Dl5Pvk8/nl4+4g6uDy4Ovu4+AiCisKKyM6IGV4X2RvY21kLmM6NjkzNAorbXNnaWQgIkUxODc6IFVua25vd24iCittc2dzdHIgIkUxODc6IM3l6Ofi5fHy7e4iCisKKyM6IGV4X2RvY21kLmM6NzAxOQorbXNnaWQgIkU0NjU6IDp3aW5zaXplIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY1OiDq7uzg7eTgIDp3aW5zaXplIPLw5eHz5fIg8+rg5+Dt6P8g5OLz9SD36PHr7uL79SDv4PDg7OXy8O7iIgorCisjOiBleF9kb2NtZC5jOjcwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2luZG93IHBvc2l0aW9uOiBYICVkLCBZICVkIgorbXNnc3RyICLP7uvu5uXt6OUg7urt4DogWCAlZCwgWSAlZCIKKworIzogZXhfZG9jbWQuYzo3MDgwCittc2dpZCAiRTE4ODogT2J0YWluaW5nIHdpbmRvdyBwb3NpdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIkUxODg6IMIg5ODt7e7pIPHo8fLl7OUg7u/w5eTl6+Xt6OUg7+7r7ubl7ej/IO7q7eAg7eUg8ODh7vLg5fIiCisKKyM6IGV4X2RvY21kLmM6NzA5MAorbXNnaWQgIkU0NjY6IDp3aW5wb3MgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiCittc2dzdHIgIkU0NjY6IOru7ODt5OAgOndpbnBvcyDy8OXh8+XyIPPq4Ofg7ej/IOTi8/Ug9+jx6+7i+/Ug7+Dw4Ozl8vDu4iIKKworIzogZXhfZG9jbWQuYzo3MzY4Cittc2dpZCAiU2F2ZSBSZWRpcmVjdGlvbiIKK21zZ3N0ciAiz+Xw5e3g7/Dg4uvl7ejlIOfg7+jx6CIKKworIzogZXhfZG9jbWQuYzo3NTU4Cittc2dpZCAiU2F2ZSBWaWV3IgorbXNnc3RyICLR7vXw4O3l7ejlIOLo5OAiCisKKyM6IGV4X2RvY21kLmM6NzU1OQorbXNnaWQgIlNhdmUgU2Vzc2lvbiIKK21zZ3N0ciAi0e718ODt5e3o5SDx5eDt8eAiCisKKyM6IGV4X2RvY21kLmM6NzU2MQorbXNnaWQgIlNhdmUgU2V0dXAiCittc2dzdHIgItHu9fDg7eXt6OUg7eDx8vDu5eoiCisKKyM6IGV4X2RvY21kLmM6NzcxMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTg5OiBcIiVzXCIgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxODk6IFwiJXNcIiDx8/nl8fLi8+XyICghLCD38u7h+yDu4e7p8ugg7/Du4uXw6vMpIgorCisjOiBleF9kb2NtZC5jOjc3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5MDogQ2Fubm90IG9wZW4gXCIlc1wiIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTkwOiDN5eLu5+zu5u3uIO7y6vD78vwg5Ov/IOfg7+jx6CBcIiVzXCIiCisKKyMuIHNldCBtYXJrCisjOiBleF9kb2NtZC5jOjc3NDIKK21zZ2lkICJFMTkxOiBBcmd1bWVudCBtdXN0IGJlIGEgbGV0dGVyIG9yIGZvcndhcmQvYmFja3dhcmQgcXVvdGUiCittc2dzdHIgIkUxOTE6IM/g8ODs5fLwIOTu6+bl7SDh+/L8IO/w/+zu6S/u4fDg8u3u6SDq4OL79+ru6SDo6+gg4fPq4u7pIgorCisjOiBleF9kb2NtZC5jOjc3ODQKK21zZ2lkICJFMTkyOiBSZWN1cnNpdmUgdXNlIG9mIDpub3JtYWwgdG9vIGRlZXAiCittc2dzdHIgIkUxOTI6INHr6Pjq7uwg4+vz4e7q4P8g8OXq8/Dx6P8g7/DoIOjx7+7r/Ofu4uDt6Ogg6u7s4O3k+yA6bm9ybWFsIgorCisjOiBleF9kb2NtZC5jOjgzMDIKK21zZ2lkICJFMTk0OiBObyBhbHRlcm5hdGUgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yICcjJyIKK21zZ3N0ciAiRTE5NDogzeXyIPHu8eXk7eXj7iDo7OXt6CD04Onr4CDk6/8g5+Ds5e37ICcjJyIKKworIzogZXhfZG9jbWQuYzo4MzMzCittc2dpZCAiRTQ5NTogbm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIgorbXNnc3RyICJFNDk1OiDN5fIg4OLy7uru7ODt5O3u4+4g6Ozl7egg9ODp6+Ag5Ov/IOfg7OXt+yBcIjxhZmlsZT5cIiIKKworIzogZXhfZG9jbWQuYzo4MzQxCittc2dpZCAiRTQ5Njogbm8gYXV0b2NvbW1hbmQgYnVmZmVyIG51bWJlciB0byBzdWJzdGl0dXRlIGZvciBcIjxhYnVmPlwiIgorbXNnc3RyICJFNDk2OiDN5fIg4OLy7uru7ODt5O3u4+4g7e7s5fDgIOHz9OXw4CDk6/8g5+Ds5e37IFwiPGFidWY+XCIiCisKKyM6IGV4X2RvY21kLmM6ODM1MgorbXNnaWQgIkU0OTc6IG5vIGF1dG9jb21tYW5kIG1hdGNoIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YW1hdGNoPlwiIgorbXNnc3RyICJFNDk3OiDN5fIg4OLy7uru7ODt5O3u4+4g6Ozl7egg8e7u8uLl8vHy4uj/IOTr/yDn4Ozl7fsgXCI8YW1hdGNoPlwiIgorCisjOiBleF9kb2NtZC5jOjgzNjIKK21zZ2lkICJFNDk4OiBubyA6c291cmNlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxzZmlsZT5cIiIKK21zZ3N0ciAiRTQ5ODog7eXyIOjs5e3oIPTg6evgIDpzb3VyY2Ug5Ov/IOfg7OXt+yBcIjxzZmlsZT5cIiIKKworIzogZXhfZG9jbWQuYzo4NDAzCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIkU0OTk6IEVtcHR5IGZpbGUgbmFtZSBmb3IgJyUnIG9yICcjJywgb25seSB3b3JrcyB3aXRoIFwiOnA6aFwiIgorbXNnc3RyICJFNDk5OiDP8/Hy7uUg6Oz/IPTg6evgIOTr/yAnJScg6OvoICcjJywg4u7n7O7m7e4g8u7r/OruIGMgXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6ODQwNQorbXNnaWQgIkU1MDA6IEV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1MDA6INDl5/Pr/PLg8u7sIOL78ODm5e3o/yD/4uv/5fLx/yDv8/Hy4P8g8fLw7urgIgorCisjOiBleF9kb2NtZC5jOjkzNjAKK21zZ2lkICJFMTk1OiBDYW5ub3Qgb3BlbiB2aW1pbmZvIGZpbGUgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxOTU6IM3l4u7n7O7m7e4g7vLq8Pvy/CD04OnrIHZpbWluZm8g5Ov/IPfy5e3o/yIKKworIzogZXhfZG9jbWQuYzo5NTMzCittc2dpZCAiRTE5NjogTm8gZGlncmFwaHMgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMTk2OiDCIP3y7ukg4uXw8ejoIOTo4/Dg9Psg7eUg8ODh7vLg/vIiCisKKyM6IGV4X2V2YWwuYzo0NDAKK21zZ2lkICJFNjA4OiBDYW5ub3QgOnRocm93IGV4Y2VwdGlvbnMgd2l0aCAnVmltJyBwcmVmaXgiCittc2dzdHIgIiIKKyJFNjA4OiDN5eLu5+zu5u3uIOL77+7r7ejy/CDq7uzg7eTzIDp0aHJvdyDk6/8g6PHq6/735e3o6SDxIO/w6PHy4OLq7ukgJ1ZpbSciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gdGhyb3duOiAlcyIKK21zZ3N0ciAiyPHq6/736PLl6/zt4P8g8ejy8+D26P86ICVzIgorCisjOiBleF9ldmFsLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBmaW5pc2hlZDogJXMiCittc2dzdHIgIsfg4uXw+OXt4CDu4fDg4e7y6uAg6PHq6/736PLl6/zt7ukg8ejy8+D26Og6ICVzIgorCisjOiBleF9ldmFsLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBkaXNjYXJkZWQ6ICVzIgorbXNnc3RyICLI8err/vfo8uXr/O3g/yDx6PLz4Pbo/yDv8O7o4+3u8Ojw7uLg7eA6ICVzIgorCisjOiBleF9ldmFsLmM6NjIwIGV4X2V2YWwuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIGxpbmUgJWxkIgorbXNnc3RyICIlcywg8fLw7urgICVsZCIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBleF9ldmFsLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBjYXVnaHQ6ICVzIgorbXNnc3RyICLO4fDg4e7y6uAg6PHq6/736PLl6/zt7ukg8ejy8+D26Og6ICVzIgorCisjOiBleF9ldmFsLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG1hZGUgcGVuZGluZyIKK21zZ3N0ciAiJXMg4vvv7uvt/+XyIO7m6OTg7ejlIgorCisjOiBleF9ldmFsLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc3VtZWQiCittc2dzdHIgIiVzIOLu5+7h7e7i6+Xt7iIKKworIzogZXhfZXZhbC5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNjYXJkZWQiCittc2dzdHIgIiVzIO/w7u/z+eXt7iIKKworIzogZXhfZXZhbC5jOjc0NgorbXNnaWQgIkV4Y2VwdGlvbiIKK21zZ3N0ciAiyPHq6/736PLl6/zt4P8g8ejy8+D26P8iCisKKyM6IGV4X2V2YWwuYzo3NTIKK21zZ2lkICJFcnJvciBhbmQgaW50ZXJydXB0IgorbXNnc3RyICLO+Ojh6uAg6CDv8OXw++Lg7ejlIgorCisjOiBleF9ldmFsLmM6NzU0IGd1aS5jOjQzODEKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAizvjo4ergIgorCisjLiBpZiAocGVuZGluZyAmIENTVFBfSU5URVJSVVBUKQorIzogZXhfZXZhbC5jOjc1NgorbXNnaWQgIkludGVycnVwdCIKK21zZ3N0ciAiz/Dl8Pvi4O3o5SIKKworIzogZXhfZXZhbC5jOjgzMAorbXNnaWQgIkU1Nzk6IDppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTc5OiDx6+j46u7sIOPr8+Hu6u4g4uvu5uXt7fvpIDppZiIKKworIzogZXhfZXZhbC5jOjg2NworbXNnaWQgIkU1ODA6IDplbmRpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MDogOmVuZGlmIOHl5yA6aWYiCisKKyM6IGV4X2V2YWwuYzo5MTEKK21zZ2lkICJFNTgxOiA6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MTogOmVsc2Ug4eXnIDppZiIKKworIzogZXhfZXZhbC5jOjkxNAorbXNnaWQgIkU1ODI6IDplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODI6IDplbHNlaWYg4eXnIDppZiIKKworIzogZXhfZXZhbC5jOjkyMQorbXNnaWQgIkU1ODM6IG11bHRpcGxlIDplbHNlIgorbXNnc3RyICJFNTgzOiDu4e3g8PPm5e3uIO3l8eru6/zq7iA6ZWxzZSIKKworIzogZXhfZXZhbC5jOjkyNAorbXNnaWQgIkU1ODQ6IDplbHNlaWYgYWZ0ZXIgOmVsc2UiCittc2dzdHIgIkU1ODQ6IDplbHNlaWYg7+7x6+UgOmVsc2UiCisKKyM6IGV4X2V2YWwuYzo5OTEKK21zZ2lkICJFNTg1OiA6d2hpbGUgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTU4NTog8evo+Oru7CDj6/Ph7uruIOLr7ubl7e376SA6d2hpbGUiCisKKyM6IGV4X2V2YWwuYzoxMDQ3Cittc2dpZCAiRTU4NjogOmNvbnRpbnVlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg2OiA6Y29udGludWUg4eXnIDp3aGlsZSIKKworIzogZXhfZXZhbC5jOjEwODcKK21zZ2lkICJFNTg3OiA6YnJlYWsgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODc6IDpicmVhayDh5ecgOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTI4NgorbXNnaWQgIkU2MDE6IDp0cnkgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTYwMTog8evo+Oru7CDj6/Ph7uruIOLr7ubl7e376SA6dHJ5IgorCisjOiBleF9ldmFsLmM6MTM2NgorbXNnaWQgIkU2MDM6IDpjYXRjaCB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDM6IDpjYXRjaCDh5ecgOnRyeSIKKworIy4gR2l2ZSB1cCBmb3IgYSAiOmNhdGNoIiBhZnRlciAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjLiAqIEp1c3QgcGFyc2UuCisjOiBleF9ldmFsLmM6MTM4OAorbXNnaWQgIkU2MDQ6IDpjYXRjaCBhZnRlciA6ZmluYWxseSIKK21zZ3N0ciAiRTYwNDogOmNhdGNoIOHl5yA6ZmluYWxseSIKKworIzogZXhfZXZhbC5jOjE1MjEKK21zZ2lkICJFNjA2OiA6ZmluYWxseSB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDY6IDpmaW5hbGx5IOHl5yA6dHJ5IgorCisjLiBHaXZlIHVwIGZvciBhIG11bHRpcGxlICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKyM6IGV4X2V2YWwuYzoxNTQ1Cittc2dpZCAiRTYwNzogbXVsdGlwbGUgOmZpbmFsbHkiCittc2dzdHIgIkU2MDc6IO7h7eDw8+bl7e4g7eXx6u7r/OruIDpmaW5hbGx5IgorCisjOiBleF9ldmFsLmM6MTY1NAorbXNnaWQgIkU2MDI6IDplbmR0cnkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAyOiA6ZW5kdHJ5IOHl5yA6dHJ5IgorCisjOiBleF9ldmFsLmM6MTk4NgorbXNnaWQgIkUxOTM6IDplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxOTM6IOru7ODt5OAgOmVuZGZ1bmN0aW9uIOzu5uXyIOjx7+7r/Ofu4uDy/PH/IPLu6/zq7iDi7fPy8Ogg9PPt6vbo6CIKKworIzogZXhfZ2V0bG4uYzozMjk2Cittc2dpZCAidGFnbmFtZSIKK21zZ3N0ciAi6Oz/IOzl8uroIgorCisjOiBleF9nZXRsbi5jOjMyOTkKK21zZ2lkICIga2luZCBmaWxlXG4iCittc2dzdHIgIiDy6O8g9ODp6+BcbiIKKworIzogZXhfZ2V0bG4uYzo0NzUyCittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICLn7eD35e3o5SDu7/bo6CAnaGlzdG9yeScg8ODi7e4g7fPr/iIKKworIzogZXhfZ2V0bG4uYzo1MDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjICVzIEhpc3RvcnkgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyAlcywg6PHy7vDo/yAo7eD36O3g/yDu8iDx4uXm5ePuIOog8fLg8O7s8yk6XG4iCisKKyM6IGV4X2dldGxuLmM6NTAyNAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAiyu7s4O3k7eD/IPHy8O7q4CIKKworIzogZXhfZ2V0bG4uYzo1MDI1Cittc2dpZCAiU2VhcmNoIFN0cmluZyIKK21zZ3N0ciAi0fLw7urgIO/u6PHq4CIKKworIzogZXhfZ2V0bG4uYzo1MDI2Cittc2dpZCAiRXhwcmVzc2lvbiIKK21zZ3N0ciAiwvvw4Obl7ejlIgorCisjOiBleF9nZXRsbi5jOjUwMjcKK21zZ2lkICJJbnB1dCBMaW5lIgorbXNnc3RyICLR8vDu6uAg4uLu5OAiCisKKyM6IGV4X2dldGxuLmM6NTA2NQorbXNnaWQgIkUxOTg6IGNtZF9wY2hhciBiZXlvbmQgdGhlIGNvbW1hbmQgbGVuZ3RoIgorbXNnc3RyICJFMTk4OiBjbWRfcGNoYXIg4e7r/PjlIOTr6O37IOru7ODt5PsiCisKKyM6IGV4X2dldGxuLmM6NTI0MgorbXNnaWQgIkUxOTk6IEFjdGl2ZSB3aW5kb3cgb3IgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIkUxOTk6INPk4Ovl7e4g4Ory6OLt7uUg7urt7iDo6+gg4fP05fAiCisKKyM6IGZpbGVpby5jOjM3NworbXNnaWQgIklsbGVnYWwgZmlsZSBuYW1lIgorbXNnc3RyICLN5eTu7/Px8ujs7uUg6Oz/IPTg6evgIgorCisjOiBmaWxlaW8uYzo0MDEgZmlsZWlvLmM6NTM1IGZpbGVpby5jOjI5MTMgZmlsZWlvLmM6Mjk1NAorbXNnaWQgImlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICL/4uv/5fLx/yDq4PLg6+7j7uwiCisKKyM6IGZpbGVpby5jOjQwMworbXNnaWQgImlzIG5vdCBhIGZpbGUiCittc2dzdHIgIu3lIP/i6//l8vH/IPTg6evu7CIKKworIzogZmlsZWlvLmM6NTU3IGZpbGVpby5jOjQxMzEKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJbze7i++kg9ODp610iCisKKyM6IGZpbGVpby5jOjU5MAorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIlvE7vHy8+8g5+Dv8OX5uO1dIgorCisjOiBmaWxlaW8uYzo2OTQKK21zZ2lkICJFMjAwOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbWFkZSB0aGUgZmlsZSB1bnJlYWRhYmxlIgorbXNnc3RyICJFMjAwOiDCIPDl5/Pr/PLg8uUg4vvv7uvt5e3o/yDg4vLu6u7s4O3kICpSZWFkUHJlIPTg6esg8fLg6yDt5ffo8uDl7PvsIgorCisjOiBmaWxlaW8uYzo2OTYKK21zZ2lkICJFMjAxOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMjAxOiDg4vLu6u7s4O3k+yAqUmVhZFByZSDt5SDk7uvm7fsg6Ofs5e3/8vwg4Ory6OLt++kg4fP05fAiCisKKyM6IGZpbGVpby5jOjcxNworbXNnaWQgIlZpbTogUmVhZGluZyBmcm9tIHN0ZGluLi4uXG4iCittc2dzdHIgIlZpbTog4vvv7uvt/+Xy8f8g9/Ll7ejlIOjnIPHy4O3k4PDy7e7j7iDv7vLu6uAg4uLu5OAgc3RkaW4uLi5cbiIKKworIzogZmlsZWlvLmM6NzIzCittc2dpZCAiUmVhZGluZyBmcm9tIHN0ZGluLi4uIgorbXNnc3RyICLC++/u6+3/5fLx/yD38uXt6OUg6Ocg8fLg7eTg8PLt7uPuIO/u8u7q4CDi4u7k4CBzdGRpbi4uLiIKKworIy4gUmUtb3BlbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBmYWlsZWQhCisjOiBmaWxlaW8uYzoxMDAwCittc2dpZCAiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiCittc2dzdHIgIkUyMDI6IMIg8OXn8+v88uDy5SDv8OXu4fDg5+7i4O3o/yD04OnrIPHy4Osg7eX36PLg5ez77CEiCisKKyM6IGZpbGVpby5jOjIwOTAKK21zZ2lkICJbZmlmby9zb2NrZXRdIgorbXNnc3RyICJbZmlmby/j7eXn5O5dIgorCisjOiBmaWxlaW8uYzoyMDk3Cittc2dpZCAiW2ZpZm9dIgorbXNnc3RyICJbZmlmb10iCisKKyM6IGZpbGVpby5jOjIxMDQKK21zZ2lkICJbc29ja2V0XSIKK21zZ3N0ciAiW+Pt5efk7l0iCisKKyM6IGZpbGVpby5jOjIxMTIKK21zZ2lkICJbUk9dIgorbXNnc3RyICJbUk9dIgorCisjOiBmaWxlaW8uYzoyMTIyCittc2dpZCAiW0NSIG1pc3NpbmddIgorbXNnc3RyICJb7/Du7/P55e37IPHo7OLu6/sgQ1JdIgorCisjOiBmaWxlaW8uYzoyMTI3Cittc2dpZCAiW05MIGZvdW5kXSIKK21zZ3N0ciAiW87h7eDw8+bl7fsg8ejs4u7r+yBOTF0iCisKKyM6IGZpbGVpby5jOjIxMzIKK21zZ2lkICJbbG9uZyBsaW5lcyBzcGxpdF0iCittc2dzdHIgIlvk6+jt7fvlIPHy8O7q6CDw4Ofh6PL7XSIKKworIzogZmlsZWlvLmM6MjEzOCBmaWxlaW8uYzo0MTE1Cittc2dpZCAiW05PVCBjb252ZXJ0ZWRdIgorbXNnc3RyICJbwcXHIO/w5e7h8ODn7uLg7ejpXSIKKworIzogZmlsZWlvLmM6MjE0MyBmaWxlaW8uYzo0MTIwCittc2dpZCAiW2NvbnZlcnRlZF0iCittc2dzdHIgIlvv5fDl6u7k6PDu4uDt7l0iCisKKyM6IGZpbGVpby5jOjIxNTAgZmlsZWlvLmM6NDE0NQorbXNnaWQgIltjcnlwdGVkXSIKK21zZ3N0ciAiW+fg+Oj08O7i4O3uXSIKKworIzogZmlsZWlvLmM6MjE1NworbXNnaWQgIltDT05WRVJTSU9OIEVSUk9SXSIKK21zZ3N0ciAiW87YyMHKwCDP0MXOwdDAx87CwM3I310iCisKKyM6IGZpbGVpby5jOjIxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiW0lMTEVHQUwgQllURSBpbiBsaW5lICVsZF0iCittc2dzdHIgIlvNxcTOz9PR0sjM28kgwcDJ0iDiIPHy8O7q5SAlbGRdIgorCisjOiBmaWxlaW8uYzoyMTcwCittc2dpZCAiW1JFQUQgRVJST1JTXSIKK21zZ3N0ciAiW87YyMHKyCDX0sXNyN9dIgorCisjOiBmaWxlaW8uYzoyMzg2Cittc2dpZCAiQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIGNvbnZlcnNpb24iCittc2dzdHIgIsLw5ezl7e376SD04OnrIOTr/yDv5fDl6u7k6PDu4uDt6P8g7eUg7eDp5OXtIgorCisjOiBmaWxlaW8uYzoyMzkzCittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICLP8OXu4fDg5+7i4O3o5SDxIO/u7O75/P4gJ2NoYXJjb252ZXJ0JyDt5SDi++/u6+3l7e4iCisKKyM6IGZpbGVpby5jOjIzOTYKK21zZ2lkICJjYW4ndCByZWFkIG91dHB1dCBvZiAnY2hhcmNvbnZlcnQnIgorbXNnc3RyICLt5eLu5+zu5u3uIO/w7vfo8uDy/CDi++Lu5CAnY2hhcmNvbnZlcnQnIgorCisjOiBmaWxlaW8uYzoyNzk2Cittc2dpZCAiRTIwMzogQXV0b2NvbW1hbmRzIGRlbGV0ZWQgb3IgdW5sb2FkZWQgYnVmZmVyIHRvIGJlIHdyaXR0ZW4iCittc2dzdHIgIiIKKyJFMjAzOiDB8/Tl8Cwg6u7y7vD76SDy8OXh7uLg6+7x/CDn4O/o8eDy/Cwg8+Tg67jtIOjr6CDi++Pw8+bl7SDg4vLu6u7s4O3k7ukiCisKKyM6IGZpbGVpby5jOjI4MTkKK21zZ2lkICJFMjA0OiBBdXRvY29tbWFuZCBjaGFuZ2VkIG51bWJlciBvZiBsaW5lcyBpbiB1bmV4cGVjdGVkIHdheSIKK21zZ3N0ciAiRTIwNDogyu7r6Pfl8fLi7iDx8vDu6iDo5+zl7eXt7iDg4vLu6u7s4O3k7ukg7eXu5ujk4O3t++wg7uHw4Ofu7CIKKworIzogZmlsZWlvLmM6Mjg1NworbXNnaWQgIk5ldEJlYW5zIGRpc3NhbGxvd3Mgd3JpdGVzIG9mIHVubW9kaWZpZWQgYnVmZmVycyIKK21zZ3N0ciAiTmV0QmVhbnMg7eUg7+7n4u7r/+XyIOL77+7r7f/y/CDn4O/o8fwg7eXo5+zl7bjt7fv1IOHz9OXw7uIiCisKKyM6IGZpbGVpby5jOjI4NjUKK21zZ2lkICJQYXJ0aWFsIHdyaXRlcyBkaXNhbGxvd2VkIGZvciBOZXRCZWFucyBidWZmZXJzIgorbXNnc3RyICLX4PHy6Pft4P8g5+Dv6PH8IOHz9OXw7uIgTmV0QmVhbnMg7eUg5O7v8/Hq4OXy8f8iCisKKyM6IGZpbGVpby5jOjI5MTkgZmlsZWlvLmM6MjkzNworbXNnaWQgImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIgorbXNnc3RyICLt5SD/4uv/5fLx/yD04Onr7uwg6OvoIPPx8vDu6fHy4u7sLCDk7vHy8+/t++wg5Ov/IOfg7+jx6CIKKworIzogZmlsZWlvLmM6Mjk4OQorbXNnaWQgImlzIHJlYWQtb25seSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICLu8urw+/Ig8u7r/OruIOTr/yD38uXt6P8gKCEsIPfy7uH7IO7h7uny6CDv8O7i5fDq8ykiCisKKyM6IGZpbGVpby5jOjMzMzUKK21zZ2lkICJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA2OiDH4O/o8fwg4iDw5efl8OLt++kg9ODp6yDt5eLu5+zu5u3gICghLCD38u7h+yDu4e7p8ugg7/Du4uXw6vMpIgorCisjOiBmaWxlaW8uYzozMzQ3Cittc2dpZCAiRTUwNzogQ2xvc2UgZXJyb3IgZm9yIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDc6IM746OHq4CDn4Orw+/Lo/yDw5efl8OLt7uPuIPTg6evgICghLCD38u7h+yDu4e7p8ugg7/Du4uXw6vMpIgorCisjOiBmaWxlaW8uYzozMzQ5Cittc2dpZCAiRTUwODogQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwODogzeXi7ufs7ubt7iDv8O736PLg8vwg8OXn5fDi7fvpIPTg6esgKCEsIPfy7uH7IO7h7uny6CDv8O7i5fDq8ykiCisKKyM6IGZpbGVpby5jOjMzNjUKK21zZ2lkICJFNTA5OiBDYW5ub3QgY3JlYXRlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDk6IM3l4u7n7O7m7e4g8e7n5ODy/CDw5efl8OLt++kg9ODp6yAoISwg9/Lu4fsg7uHu6fLoIO/w7uLl8OrzKSIKKworIzogZmlsZWlvLmM6MzQ2OAorbXNnaWQgIkU1MTA6IENhbid0IG1ha2UgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUxMDogzeXi7ufs7ubt7iDx7ufk4PL8IPDl5+Xw4u376SD04OnrICghLCD38u7h+yDu4e7p8ugg7/Du4uXw6vMpIgorCisjOiBmaWxlaW8uYzozNTMwCittc2dpZCAiRTQ2MDogVGhlIHJlc291cmNlIGZvcmsgd291bGQgYmUgbG9zdCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDYwOiDC6Ovq4CDw5fHz8PHgIOHz5OXyIO/u8uXw/+3gICghLCD38u7h+yDu4e7p8ugg7/Du4uXw6vMpIgorCisjOiBmaWxlaW8uYzozNjQwCittc2dpZCAiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTQ6IMLw5ezl7e376SD04OnrIOTr/yDn4O/o8egg7eUg7eDp5OXtIgorCisjOiBmaWxlaW8uYzozNjU4Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKGFkZCAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIkUyMTM6IM/l8OXq7uTo8O7i6uAg7eXi7ufs7ubt4CAoISDk6/8g5+Dv6PHoIOHl5yDv5fDl6u7k6PDu4uroKSIKKworIzogZmlsZWlvLmM6MzY5MworbXNnaWQgIkUxNjY6IENhbid0IG9wZW4gbGlua2VkIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNjY6IM3l4u7n7O7m7e4g7vLq8Pvy/CDx4v/n4O3t++kg9ODp6yDk6/8g5+Dv6PHoIgorCisjOiBmaWxlaW8uYzozNjk3Cittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiDN5eLu5+zu5u3uIO7y6vD78vwg9ODp6yDk6/8g5+Dv6PHoIgorCisjOiBmaWxlaW8uYzozOTU5Cittc2dpZCAiRTY2NzogRnN5bmMgZmFpbGVkIgorbXNnc3RyICJFNjY3OiDN5SDz5ODr7vH8IOL77+7r7ejy/CD08+3q9uj+IGZzeW5jKCkiCisKKyM6IGZpbGVpby5jOjM5NjYKK21zZ2lkICJFNTEyOiBDbG9zZSBmYWlsZWQiCittc2dzdHIgIkU1MTI6IM7v5fDg9uj/IOfg6vD78uj/IO3lIPPk4Ovg8fwiCisKKyM6IGZpbGVpby5jOjQwMzcKK21zZ2lkICJFNTEzOiB3cml0ZSBlcnJvciwgY29udmVyc2lvbiBmYWlsZWQiCittc2dzdHIgIkU1MTM6IM746OHq4CDn4O/o8egsIO/w5e7h8ODn7uLg7ejlIO3lIPPk4Ovu8fwiCisKKyM6IGZpbGVpby5jOjQwNDMKK21zZ2lkICJFNTE0OiB3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICJFNTE0OiDu+Ojh6uAg5+Dv6PHoICjt5fIg8eLu4e7k7e7j7iDs5fHy4D8pIgorCisjOiBmaWxlaW8uYzo0MTEwCittc2dpZCAiIENPTlZFUlNJT04gRVJST1IiCittc2dzdHIgIiDO2MjBysAgz9DFzsHQwMfOwsDNyN8iCisKKyM6IGZpbGVpby5jOjQxMjYKK21zZ2lkICJbRGV2aWNlXSIKK21zZ3N0ciAiW9Px8vDu6fHy4u5dIgorCisjOiBmaWxlaW8uYzo0MTMxCittc2dpZCAiW05ld10iCittc2dzdHIgIlvN7uL76V0iCisKKyM6IGZpbGVpby5jOjQxNTMKK21zZ2lkICIgW2FdIgorbXNnc3RyICIgW2FdIgorCisjOiBmaWxlaW8uYzo0MTUzCittc2dpZCAiIGFwcGVuZGVkIgorbXNnc3RyICIg5O7h4OLr5e3uIgorCisjOiBmaWxlaW8uYzo0MTU1Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiIFt3XSIKKworIzogZmlsZWlvLmM6NDE1NQorbXNnaWQgIiB3cml0dGVuIgorbXNnc3RyICIg5+Dv6PHg7e4iCisKKyM6IGZpbGVpby5jOjQyMDUKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTog0OXm6Owg5+Dv6+Dy6ug6IO3l4u7n7O7m7e4g8e718ODt5e3o5SDo8fXu5O3u4+4g9ODp6+AiCisKKyM6IGZpbGVpby5jOjQyMjcKK21zZ2lkICJFMjA2OiBwYXRjaG1vZGU6IGNhbid0IHRvdWNoIGVtcHR5IG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIiIKKyJFMjA2OiDQ5ebo7CDn4O/r4PLq6Dog7eXi7ufs7ubt7iDx7OXt6PL8IO/g8ODs5fLw+yDv8/Hy7uPuIOjx9e7k7e7j7iD04Onr4CIKKworIzogZmlsZWlvLmM6NDI0MgorbXNnaWQgIkUyMDc6IENhbid0IGRlbGV0ZSBiYWNrdXAgZmlsZSIKK21zZ3N0ciAiRTIwNzogzeXi7ufs7ubt7iDz5ODr6PL8IPDl5+Xw4u376SD04OnrIgorCisjOiBmaWxlaW8uYzo0MzA2Cittc2dpZCAiIgorIlxuIgorIldBUk5JTkc6IE9yaWdpbmFsIGZpbGUgbWF5IGJlIGxvc3Qgb3IgZGFtYWdlZFxuIgorbXNnc3RyICIiCisiXG4iCisiz9DFxNPP0MXGxMXNyMU6IMjx9e7k7fvpIPTg6esg7O7m5fIg4fvy/CDz8vDg9+XtIOjr6CDv7uLw5ebkuO1cbiIKKworIzogZmlsZWlvLmM6NDMwOAorbXNnaWQgImRvbid0IHF1aXQgdGhlIGVkaXRvciB1bnRpbCB0aGUgZmlsZSBpcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiEiCittc2dzdHIgIu3lIOL79e7k6PLlIOjnIPDl5ODq8u7w4Cwg7+7q4CD04OnrIO3lIOHz5OXyIPPx7+X47e4g5+Dv6PHg7SEiCisKKyM6IGZpbGVpby5jOjQzOTcKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW2Rvc10iCisKKyM6IGZpbGVpby5jOjQzOTcKK21zZ2lkICJbZG9zIGZvcm1hdF0iCittc2dzdHIgIlv07vDs4PIgZG9zXSIKKworIzogZmlsZWlvLmM6NDQwNAorbXNnaWQgIlttYWNdIgorbXNnc3RyICJbbWFjXSIKKworIzogZmlsZWlvLmM6NDQwNAorbXNnaWQgIlttYWMgZm9ybWF0XSIKK21zZ3N0ciAiW/Tu8Ozg8iBtYWNdIgorCisjOiBmaWxlaW8uYzo0NDExCittc2dpZCAiW3VuaXhdIgorbXNnc3RyICJbdW5peF0iCisKKyM6IGZpbGVpby5jOjQ0MTEKK21zZ2lkICJbdW5peCBmb3JtYXRdIgorbXNnc3RyICJb9O7w7ODyIHVuaXhdIgorCisjOiBmaWxlaW8uYzo0NDM4Cittc2dpZCAiMSBsaW5lLCAiCittc2dzdHIgIjEg8fLw7urgLCAiCisKKyM6IGZpbGVpby5jOjQ0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzLCAiCittc2dzdHIgIvHy8O7qOiAlbGQsICIKKworIzogZmlsZWlvLmM6NDQ0MworbXNnaWQgIjEgY2hhcmFjdGVyIgorbXNnc3RyICIxIPHo7OLu6yIKKworIzogZmlsZWlvLmM6NDQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAi8ejs4u7r7uI6ICVsZCIKKworIzogZmlsZWlvLmM6NDQ1NQorbXNnaWQgIltub2VvbF0iCittc2dzdHIgIltub2VvbF0iCisKKyM6IGZpbGVpby5jOjQ0NTUKK21zZ2lkICJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIgorbXNnc3RyICJbzeXn4OLl8Pi47e3g/yDv7vHr5eTt//8g8fLw7urgXSIKKworIy4gZG9uJ3Qgb3ZlcndyaXRlIG1lc3NhZ2VzIGhlcmUKKyMuIG11c3QgZ2l2ZSB0aGlzIHByb21wdAorIy4gZG9uJ3QgdXNlIGVtc2coKSBoZXJlLCBkb24ndCB3YW50IHRvIGZsdXNoIHRoZSBidWZmZXJzCisjOiBmaWxlaW8uYzo0NDc0Cittc2dpZCAiV0FSTklORzogVGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSByZWFkaW5nIGl0ISEhIgorbXNnc3RyICLP0MXE08/QxcbExc3IxTog1ODp6yDo5+zl7bjtIPEg7O7s5e3y4CD38uXt6P8hISEiCisKKyM6IGZpbGVpby5jOjQ0NzYKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQiCittc2dzdHIgItHl8Py45+3uIPXu8ujy5SDn4O/o8eDy/CDiIP3y7vIg9ODp6yIKKworIzogZmlsZWlvLmM6NTcyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogzvjo4ergIOfg7+jx6CDiIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTczMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjA5OiBFcnJvciBjbG9zaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIwOTogzvjo4ergIOfg6vD78uj/IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTczNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogzvjo4ergIPfy5e3o/yBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU5NzAKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiDB8/Tl8CDz5ODruO0g7/DoIOL77+7r7eXt6Ogg4OLy7uru7ODt5PsgRmlsZUNoYW5nZWRTaGVsbCIKKworIzogZmlsZWlvLmM6NTk3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBubyBsb25nZXIgYXZhaWxhYmxlIgorbXNnc3RyICJFMjExOiDP8OXk8+/w5ebk5e3o5Tog9ODp6yBcIiVzXCIg4e7r/PjlIO3lIOTu8fLz7+XtIgorCisjOiBmaWxlaW8uYzo1OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiIgorIlcxMjogz/Dl5PPv8OXm5OXt6OU6IPTg6esgXCIlc1wiIOgg4fP05fAgVmltIOH76+gg6Ofs5e3l7fsg7eXn4OLo8ejs7iDk8PPjICIKKyLu8iDk8PPj4CIKKworIzogZmlsZWlvLmM6NTk5NAorIywgYy1mb3JtYXQKK21zZ2lkICJXMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiIgorIlcxMTogz/Dl5PPv8OXm5OXt6OU6IPTg6esgXCIlc1wiIOH76yDo5+zl7bjtIO/u8evlIO3g9+Dr4CDw5eTg6vLo8O7i4O3o/yIKKworIzogZmlsZWlvLmM6NTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICIiCisiVzE2OiDP8OXk8+/w5ebk5e3o5Tog8OXm6Owg5O7x8vPv4CDqIPTg6evzIFwiJXNcIiDh++sg6Ofs5e247SDv7vHr5SDt4Pfg6+AgIgorIvDl5ODq8ujw7uLg7ej/IgorCisjOiBmaWxlaW8uYzo2MDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMzogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGJlZW4gY3JlYXRlZCBhZnRlciBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIiIKKyJXMTM6IM/w5eTz7/Dl5uTl7ejlOiD04OnrIFwiJXNcIiDh++sg8e7n5ODtIO/u8evlIO3g9+Dr4CDw5eTg6vLo8O7i4O3o/yIKKworIzogZmlsZWlvLmM6NjAxOQorbXNnaWQgIlNlZSBcIjpoZWxwIFcxMVwiIGZvciBtb3JlIGluZm8uIgorbXNnc3RyICLR7C4g5O7v7uvt6PLl6/zt8/4g6O307vDs4Pbo/iDiIFwiOmhlbHAgVzExXCIuIgorCisjOiBmaWxlaW8uYzo2MDMzCittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAiz/Dl5PPv8OXm5OXt6OUiCisKKyM6IGZpbGVpby5jOjYwMzQKK21zZ2lkICIiCisiJk9LXG4iCisiJkxvYWQgRmlsZSIKK21zZ3N0ciAiIgorIiZPS1xuIgorIibH4OPw8+fo8vwg9ODp6yIKKworIzogZmlsZWlvLmM6NjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYyOiBDb3VsZCBub3QgcHJlcGFyZSBmb3IgcmVsb2FkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTQ2MjogzeXi7ufs7ubt7iDv7uTj7vLu4ujy/PH/IOog7+Xw5efg4/Dz5+rlIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIxOiBDb3VsZCBub3QgcmVsb2FkIFwiJXNcIiIKK21zZ3N0ciAiRTMyMTogzeXi7ufs7ubt7iDi++/u6+3o8vwg7+Xw5efg4/Dz5+rzIFwiJXNcIiIKKworIzogZmlsZWlvLmM6Njc0MAorbXNnaWQgIi0tRGVsZXRlZC0tIgorbXNnc3RyICItLdPk4Ovl7e4tLSIKKworIy4gdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3QKKyM6IGZpbGVpby5jOjY5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NzogTm8gc3VjaCBncm91cDogXCIlc1wiIgorbXNnc3RyICJFMzY3OiDD8PPv7+AgXCIlc1wiIO3lIPHz+eXx8uLz5fIiCisKKyM6IGZpbGVpby5jOjcwMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgKjogJXMiCittc2dzdHIgIkUyMTU6IM3l5O7v8/Hy6Oz75SDx6Ozi7uv7IO/u8evlICo6ICVzIgorCisjOiBmaWxlaW8uYzo3MDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiDN5fHz+eXx8uLz/vnl5SDx7uH78ujlOiAlcyIKKworIzogZmlsZWlvLmM6NzA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE2OiBObyBzdWNoIGdyb3VwIG9yIGV2ZW50OiAlcyIKK21zZ3N0ciAiRTIxNjogzeXx8/nl8fLi8/754P8g4/Dz7+/gIOjr6CDx7uH78ujlOiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo3MTk4Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDA4vLu6u7s4O3k+yAtLS0iCisKKyM6IGZpbGVpby5jOjc0NjkKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiRTIxNzogzeXi7ufs7ubt7iDi++/u6+3o8vwg4OLy7uru7ODt5Psg5Ov/IMLRxdUg8e7h+/Lo6SIKKworIzogZmlsZWlvLmM6NzQ5MgorbXNnaWQgIk5vIG1hdGNoaW5nIGF1dG9jb21tYW5kcyIKK21zZ3N0ciAizeXyIO/u5PXu5P/56PUg4OLy7uru7ODt5CIKKworIzogZmlsZWlvLmM6NzgxMworbXNnaWQgIkUyMTg6IGF1dG9jb21tYW5kIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkUyMTg6IPHr6Pjq7uwg4+vz4e7q7iDi6+7m5e3t++Ug4OLy7uru7ODt5PsiCisKKyM6IGZpbGVpby5jOjgwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgQXV0byBjb21tYW5kcyBmb3IgXCIlc1wiIgorbXNnc3RyICIlcyDA4vLu6u7s4O3k+yDk6/8gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo4MDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAiwvvv7uvt5e3o5SAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBmaWxlaW8uYzo4MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImF1dG9jb21tYW5kICVzIgorbXNnc3RyICLg4vLu6u7s4O3k4CAlcyIKKworIzogZmlsZWlvLmM6ODczMQorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IM/w7u/z+eXt4CB7LiIKKworIzogZmlsZWlvLmM6ODczMworbXNnaWQgIkUyMjA6IE1pc3NpbmcgfS4iCittc2dzdHIgIkUyMjA6IM/w7u/z+eXt4CB9LiIKKworIzogZm9sZC5jOjY4Cittc2dpZCAiRTQ5MDogTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAiRTQ5MDog0err4OTu6iDt5SDu4e3g8PPm5e3uIgorCisjOiBmb2xkLmM6NTkzCittc2dpZCAiRTM1MDogQ2Fubm90IGNyZWF0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIiIKKyJFMzUwOiDR6uvg5OrgIO3lIOzu5uXyIOH78vwg8e7n5ODt4CDxIPLl6vP56Owg5+3g9+Xt6OXsIO7v9ujoICdmb2xkbWV0aG9kJyIKKworIzogZm9sZC5jOjU5NQorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICIiCisiRTM1MTog0err4OTq4CDt5SDs7ubl8iDh+/L8IPPk4Ovl7eAg8SDy5erz+ejsIOft4Pfl7ejl7CDu7/bo6CAnZm9sZG1ldGhvZCciCisKKyM6IGdldGNoYXIuYzoyNDgKK21zZ2lkICJFMjIyOiBBZGQgdG8gcmVhZCBidWZmZXIiCittc2dzdHIgIkUyMjI6IMTu4eDi6+Xt6OUg4iDh8/Tl8CD38uXt6P8iCisKKyM6IGdldGNoYXIuYzoyMTk4Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6IPDl6vPw8eji7eD/IO/w6OL/5+rgIgorCisjOiBnZXRjaGFyLmM6MzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjI0OiBnbG9iYWwgYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNDog8+blIOXx8vwg4+vu4eDr/O3u5SDx7urw4Pnl7ejlIOTr/yAlcyIKKworIzogZ2V0Y2hhci5jOjMwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNTogZ2xvYmFsIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI1OiDz5uUg5fHy/CDj6+7h4Ov87eD/IO/w6OL/5+rgIOTr/yAlcyIKKworIzogZ2V0Y2hhci5jOjMyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjog8+blIOXx8vwg8e7q8OD55e3o5SDk6/8gJXMiCisKKyM6IGdldGNoYXIuYzozMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI3OiDz5uUg5fHy/CDv8Oji/+fq4CDk6/8gJXMiCisKKyM6IGdldGNoYXIuYzozMjc5Cittc2dpZCAiTm8gYWJicmV2aWF0aW9uIGZvdW5kIgorbXNnc3RyICLR7urw4Pnl7ej/IO3lIO3g6eTl7fsiCisKKyM6IGdldGNoYXIuYzozMjgxCittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAiz/Do4v/n6ugg7eUg7eDp5OXt+yIKKworIzogZ2V0Y2hhci5jOjQxNzMKK21zZ2lkICJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkUyMjg6IG1ha2VtYXA6IO3l5O7v8/Hy6Oz76SDw5ebo7CIKKworIzogZ3VpLmM6MjIwCittc2dpZCAiRTIyOTogQ2Fubm90IHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkUyMjk6IM3l4u7n7O7m7e4g7+Xw5eny6CDiIPDl5ujsIOPw4PTo9+Xx6u7j7iDo7fLl8PTl6fHgIgorCisjOiBndWkuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzMDogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyMzA6IM3l4u7n7O7m7e4g4vvv7uvt6PL8IPfy5e3o5SBcIiVzXCIiCisKKyM6IGd1aS5jOjQ3MgorbXNnaWQgIkU2NjU6IENhbm5vdCBzdGFydCBHVUksIG5vIHZhbGlkIGZvbnQgZm91bmQiCittc2dzdHIgIiIKKyJFNjY1OiDN5eLu5+zu5u3uIO/l8OXp8ugg4iDw5ebo7CDj8OD0LiDo7fLl8PTl6fHgLCDt5e/w4OLo6/zt7iDn4OTg7fsg+PDo9PL7IgorCisjOiBndWkuYzo0NzcKK21zZ2lkICJFMjMxOiAnZ3VpZm9udHdpZGUnIGludmFsaWQiCittc2dzdHIgIkUyMzE6IO3l7/Dg4ujr/O3u5SDn7eD35e3o5SDu7/bo6CAnZ3VpZm9udHdpZGUnIgorCisjOiBndWkuYzo1NDcKK21zZ2lkICJFNTk5OiBWYWx1ZSBvZiAnaW1hY3RpdmF0ZWtleScgaXMgaW52YWxpZCIKK21zZ3N0ciAiRTU5OTog7eXv8ODi6Ov87e7lIOft4Pfl7ejlIO7v9ujoICdpbWFjdGl2YXRla2V5JyIKKworIzogZ3VpLmM6NDA2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU0OiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgJXMiCittc2dzdHIgIkUyNTQ6IM3l4u7n7O7m7e4g7eDn7eD36PL8IPbi5fIgJXMiCisKKyM6IGd1aV9hdF9mcy5jOjMwMAorbXNnaWQgIjxjYW5ub3Qgb3Blbj4gIgorbXNnc3RyICI87eXr/Of/IO7y6vD78vw+ICIKKworIzogZ3VpX2F0X2ZzLmM6MTEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE2OiB2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGZvbnQgJXMiCittc2dzdHIgIkU2MTY6IHZpbV9TZWxGaWxlOiD48Oj08iAlcyDt5SDt4Onk5e0iCisKKyM6IGd1aV9hdF9mcy5jOjI3ODEKK21zZ2lkICJFNjE0OiB2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJFNjE0OiB2aW1fU2VsRmlsZTog4u7n4vDg8iDiIPLl6vP56Okg6uDy4Ovu4yDt5eLu5+zu5uXtIgorCisjOiBndWlfYXRfZnMuYzoyODAxCittc2dpZCAiUGF0aG5hbWU6IgorbXNnc3RyICLP8/L8IOog9ODp6/M6IgorCisjOiBndWlfYXRfZnMuYzoyODA3Cittc2dpZCAiRTYxNTogdmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNTogdmltX1NlbEZpbGU6IO3lIOzu4/Mg7eDp8ugg8uXq8/no6SDq4PLg6+7jIgorCisjOiBndWlfYXRfZnMuYzoyODE1IGd1aV9tb3RpZi5jOjE2MjMKK21zZ2lkICJPSyIKK21zZ3N0ciAixOAiCisKKyM6IGd1aV9hdF9mcy5jOjI4MTUgZ3VpX2d0ay5jOjI3MzEgZ3VpX21vdGlmLmM6MTYxOCBndWlfbW90aWYuYzoyODQ5Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICLO8uzl7eAiCisKKyM6IGd1aV9hdF9zYi5jOjQ4NgorbXNnaWQgIlNjcm9sbGJhciBXaWRnZXQ6IENvdWxkIG5vdCBnZXQgZ2VvbWV0cnkgb2YgdGh1bWIgcGl4bWFwLiIKK21zZ3N0ciAiz+7r7vHgIO/w7urw8/Lq6Dog7eUg7O7j8yDu7/Dl5OXr6PL8IOPl7uzl8vDo/iDv7uvn8+3q4CIKKworIzogZ3VpX2F0aGVuYS5jOjIwNDcgZ3VpX21vdGlmLmM6MTg3MQorbXNnaWQgIlZpbSBkaWFsb2ciCittc2dzdHIgIsTo4Ovu4+7i7uUg7urt7iBWaW0iCisKKyM6IGd1aV9iZXZhbC5jOjEwMSBndWlfdzMyLmM6MzgyOQorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICIiCisiRTIzMjogXCLP8+f78PxcIiDk6/8g4vv36PHr5e3o6Swg4urr/vfg/vno6SDoIPHu7uH55e3o5Swg6CDu4fDg8u376SDi++fu4iwgIgorIu3lIOzu5uXyIOH78vwg8e7n5ODtIgorCisjOiBndWlfZ3RrLmM6MTYwNworbXNnaWQgIlZpbSBkaWFsb2cuLi4iCittc2dzdHIgIsTo4Ovu4+7i7uUg7urt7iBWaW0uLi4iCisKKyM6IGd1aV9ndGsuYzoyMDYwIG1lc3NhZ2UuYzoyOTkzCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJsTgXG4iCisiJs3l8lxuIgorIs4m8uzl7eAiCisKKyM6IGd1aV9ndGsuYzoyMjY4Cittc2dpZCAiSW5wdXQgX01ldGhvZHMiCittc2dzdHIgIszl8u7k+yDC4u7k4CIKKworIzogZ3VpX2d0ay5jOjI1MzQgZ3VpX21vdGlmLmM6Mjc2OAorbXNnaWQgIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIKK21zZ3N0ciAiVklNIC0gz+7o8eog6CDn4Ozl7eAuLi4iCisKKyM6IGd1aV9ndGsuYzoyNTQyIGd1aV9tb3RpZi5jOjI3NzAKK21zZ2lkICJWSU0gLSBTZWFyY2guLi4iCittc2dzdHIgIlZJTSAtIM/u6PHqLi4uIgorCisjOiBndWlfZ3RrLmM6MjU3NCBndWlfbW90aWYuYzoyODg4Cittc2dpZCAiRmluZCB3aGF0OiIKK21zZ3N0ciAi1/LuIOj55ew6IgorCisjOiBndWlfZ3RrLmM6MjU5MiBndWlfbW90aWYuYzoyOTIwCittc2dpZCAiUmVwbGFjZSB3aXRoOiIKK21zZ3N0ciAizeAg9/LuIOfg7OXt/+XsOiIKKworIy4gd2hvbGUgd29yZCBvbmx5IGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI2MjQgZ3VpX21vdGlmLmM6MzAzNgorbXNnaWQgIk1hdGNoIHdob2xlIHdvcmQgb25seSIKK21zZ3N0ciAi0u7r/OruIPLu9+375SDx7u7y4uXy8fLi6P8iCisKKyMuIG1hdGNoIGNhc2UgYnV0dG9uCisjOiBndWlfZ3RrLmM6MjYzNSBndWlfbW90aWYuYzozMDQ4Cittc2dpZCAiTWF0Y2ggY2FzZSIKK21zZ3N0ciAi0OXj6PHy8O7n4OLo8ejs++Ug8e7u8uLl8vHy4uj/IgorCisjOiBndWlfZ3RrLmM6MjY0NSBndWlfbW90aWYuYzoyOTkwCittc2dpZCAiRGlyZWN0aW9uIgorbXNnc3RyICLN4O/w4OLr5e3o5SIKKworIy4gJ1VwJyBhbmQgJ0Rvd24nIGJ1dHRvbnMKKyM6IGd1aV9ndGsuYzoyNjU3IGd1aV9tb3RpZi5jOjMwMDIKK21zZ2lkICJVcCIKK21zZ3N0ciAiwuLl8PUiCisKKyM6IGd1aV9ndGsuYzoyNjYxIGd1aV9tb3RpZi5jOjMwMTAKK21zZ2lkICJEb3duIgorbXNnc3RyICLC7ejnIgorCisjOiBndWlfZ3RrLmM6MjY4MyBndWlfZ3RrLmM6MjY4NSBndWlfbW90aWYuYzoyNzkyCittc2dpZCAiRmluZCBOZXh0IgorbXNnc3RyICLN4Ony6CDx6+Xk8/755eUiCisKKyM6IGd1aV9ndGsuYzoyNzAyIGd1aV9ndGsuYzoyNzA0IGd1aV9tb3RpZi5jOjI4MDkKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICLH4Ozl7eAiCisKKyM6IGd1aV9ndGsuYzoyNzE1IGd1aV9ndGsuYzoyNzE3IGd1aV9tb3RpZi5jOjI4MjIKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAix+Ds5e3o8vwg4vHlIgorCisjOiBndWlfZ3RrX3gxMS5jOjIzMjcKK21zZ2lkICJWaW06IFJlY2VpdmVkIFwiZGllXCIgcmVxdWVzdCBmcm9tIHNlc3Npb24gbWFuYWdlclxuIgorbXNnc3RyICJWaW06IM/u6/P35e0g5+Dv8O7xIO3gIO/w5erw4Pnl7ejlIPDg4e7y+yDu8iDk6PHv5fL35fDgIPHl4O3x7uJcbiIKKworIzogZ3VpX2d0a194MTEuYzozNTE5Cittc2dpZCAiVmltOiBNYWluIHdpbmRvdyB1bmV4cGVjdGVkbHkgZGVzdHJveWVkXG4iCittc2dzdHIgIlZpbTogzvHt7uLt7uUg7urt7iDh++vuIO3l7ubo5ODt7e4g5+Dq8Pvy7lxuIgorCisjOiBndWlfZ3RrX3gxMS5jOjQxMzgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAiwvvh7vAg+PDo9PLgIgorCisjOiBndWlfZ3RrX3gxMS5jOjYwMzUgdWkuYzoyMTIwCittc2dpZCAiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIKK21zZ3N0ciAiwuzl8fLuIO/z8fLu4+4g4vvk5evl7ej/IOjx7+7r/Ofz5fLx/yBDVVRfQlVGRkVSMCIKKworIzogZ3VpX21vdGlmLmM6MTYxNyBndWlfbW90aWYuYzoxNjIwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICLU6Ov88vAiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTkKK21zZ2lkICJEaXJlY3RvcmllcyIKK21zZ3N0ciAiyuDy4Ovu4+giCisKKyM6IGd1aV9tb3RpZi5jOjE2MjEKK21zZ2lkICJIZWxwIgorbXNnc3RyICLR7/Dg4urgIgorCisjOiBndWlfbW90aWYuYzoxNjIyCittc2dpZCAiRmlsZXMiCittc2dzdHIgItTg6ev7IgorCisjOiBndWlfbW90aWYuYzoxNjI0Cittc2dpZCAiU2VsZWN0aW9uIgorbXNnc3RyICLC++Tl6+Xt6OUiCisKKyM6IGd1aV9tb3RpZi5jOjI4MzUKK21zZ2lkICJVbmRvIgorbXNnc3RyICLO8uzl7eAiCisKKyM6IGd1aV9yaXNjb3MuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMDogQ2FuJ3QgbG9hZCBaYXAgZm9udCAnJXMnIgorbXNnc3RyICJFNjEwOiDN5eLu5+zu5u3uIOfg4/Dz5+jy/CD48Oj08iBaYXAgJyVzJyIKKworIzogZ3VpX3Jpc2Nvcy5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMTogQ2FuJ3QgdXNlIGZvbnQgJXMiCittc2dzdHIgIkU2MTE6IM3l4u7n7O7m7e4g6PHv7uv85+7i4PL8IPjw6PTyICVzIgorCisjOiBndWlfcmlzY29zLmM6MzI3MAorbXNnaWQgIiIKKyJcbiIKKyJTZW5kaW5nIG1lc3NhZ2UgdG8gdGVybWluYXRlIGNoaWxkIHByb2Nlc3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLO8u/w4OLq4CDx7u7h+eXt6P8g5Ov/IPPt6Pfy7ubl7ej/IO/w7vbl8fHgLe/u8u7s6uAuXG4iCisKKyM6IGd1aV93MzIuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MzogQXJndW1lbnQgbm90IHN1cHBvcnRlZDogXCItJXNcIjsgVXNlIHRoZSBPTEUgdmVyc2lvbi4iCittc2dzdHIgIkUyNDM6IM/g8ODs5fLwIO3lIO/u5OTl8Obo4uDl8vH/OiBcIi0lc1wiOyDo8e/u6/zn8+ny5SDi5fDx6P4gT0xFLiIKKworIzogZ3VpX3c0OC5jOjIwOTAKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICLP7ujx6iDx8vDu6uggKOjx7+7r/Ofz6fLlICdcXFxcJyDk6/8g7+7o8ergICdcXCcpIgorCisjOiBndWlfdzQ4LmM6MjExNQorbXNnaWQgIkZpbmQgJiBSZXBsYWNlICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIs/u6PHqIOgg5+Ds5e3gICjo8e/u6/zn8+ny5SAnXFxcXCcg5Ov/IO/u6PHq4CAnXFwnKSIKKworIzogZ3VpX3gxMS5jOjE1MzcKK21zZ2lkICJWaW0gRTQ1ODogQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0IgorbXNnc3RyICIiCisiVmltIEU0NTg6IO3l4u7n7O7m7e4g4vvk5evo8vwg5+Dv6PH8IOIg8uDh6+j25SD24uXy4Cwg7eXq7vLu8PvlIPbi5fLg7O7j8/IgIgorIu7y7uHw4Obg8vzx/yDt5e/w4OLo6/zt7iIKKworIzogZ3VpX3gxMS5jOjIxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MDogRm9udHMgZm9yIHRoZSBmb2xsb3dpbmcgY2hhcnNldHMgYXJlIG1pc3NpbmcgaW4gZm9udHNldCAlczoiCittc2dzdHIgIkUyNTA6IOIg7eDh7vDlIPjw6PTy7uIgJXMg7vLx8/Lx8uLz/vIg+PDo9PL7IOTr/yDx6+Xk8/756PUg6u7k6PDu4u7qOiIKKworIzogZ3VpX3gxMS5jOjIxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MjogRm9udHNldCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI1MjogzeDh7vAg+PDo9PLu4jogJXMiCisKKyM6IGd1aV94MTEuYzoyMTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQgJyVzJyBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgItjw6PTyICclcycg7eUg/+Lr/+Xy8f8g7O7t7vjo8Ojt7fvsIgorCisjOiBndWlfeDExLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTM6IM3g4e7wIPjw6PTy7uI6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwOiAlc1xuIgorbXNnc3RyICJGb250MDogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDE6ICVzXG4iCittc2dzdHIgIkZvbnQxOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE4NAorbXNnaWQgIkZvbnQlbGQgd2lkdGggaXMgbm90IHR3aWNlIHRoYXQgb2YgZm9udDBcbiIKK21zZ3N0ciAi2Ojw6O3gIPjw6PTy4CBmb250JWxkIOTu6+bt4CDh+/L8IOLk4u7lIOHu6/z45SD46PDo7fsg+PDo9PLgIGZvbnQwXG4iCisKKyM6IGd1aV94MTEuYzoyMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwIHdpZHRoOiAlbGRcbiIKK21zZ3N0ciAi2Ojw6O3gIPjw6PTy4CBmb250MDogJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyLY6PDo7eAg+PDo9PLgIGZvbnQxOiAlbGRcbiIKKyJcbiIKKworIzogaGFuZ3VsaW4uYzo2MTAKK21zZ2lkICJFMjU2OiBIYW5ndWwgYXV0b21hdGEgRVJST1IiCittc2dzdHIgItMyNTbGIM7YyMHKwCDg4vLu7ODy6OroINXg7eP76yIKKworIzogaWZfY3Njb3BlLmM6NzcKK21zZ2lkICJBZGQgYSBuZXcgZGF0YWJhc2UiCittc2dzdHIgIsTu4eDi6PL8IO3u4vP+IOHg5/Mg5ODt7fv1IgorCisjOiBpZl9jc2NvcGUuYzo3OQorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIsfg7/Du8SDv7iD44OHr7u3zIgorCisjOiBpZl9jc2NvcGUuYzo4MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICLP7urg5+Dy/CD98u4g8e7u4fnl7ejlIgorCisjOiBpZl9jc2NvcGUuYzo4MworbXNnaWQgIktpbGwgYSBjb25uZWN0aW9uIgorbXNnc3RyICLT4ejy/CDx7uXk6O3l7ejlIgorCisjOiBpZl9jc2NvcGUuYzo4NQorbXNnaWQgIlJlaW5pdCBhbGwgY29ubmVjdGlvbnMiCittc2dzdHIgIsfg7e7i7iDo7ej26ODr6Ofo8O7i4PL8IOLx5SDx7uXk6O3l7ej/IgorCisjOiBpZl9jc2NvcGUuYzo4NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIs/u6uDn4PL8IPHu5eTo7eXt6P8iCisKKyM6IGlmX2NzY29wZS5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjA6IFVzYWdlOiBjc1tjb3BlXSAlcyIKK21zZ3N0ciAiRTU2MDogyPHv7uv85+7i4O3o5TogY3NbY29wZV0gJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNAorbXNnaWQgIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIKK21zZ3N0ciAi3fLgIOru7ODt5OAgY3Njb3BlIO3lIO/u5OTl8Obo4uDl8iDw4Ofk5evl7ejlIO7q7eAuXG4iCisKKyM6IGlmX2NzY29wZS5jOjE3NQorbXNnaWQgIkU1NjI6IFVzYWdlOiBjc3RhZyA8aWRlbnQ+IgorbXNnc3RyICJFNTYyOiDI8e/u6/zn7uLg7ejlOiBjc3RhZyA86Oz/PiIKKworIzogaWZfY3Njb3BlLmM6MjMxCittc2dpZCAiRTI1NzogY3N0YWc6IHRhZyBub3QgZm91bmQiCittc2dzdHIgIkUyNTc6IGNzdGFnOiDs5fLq4CDt5SDt4Onk5e3gIgorCisjOiBpZl9jc2NvcGUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2Mzogc3RhdCglcykgZXJyb3I6ICVkIgorbXNnc3RyICLu+Ojh6uAgc3RhdCglcyk6ICVkIgorCisjOiBpZl9jc2NvcGUuYzo0MTkKK21zZ2lkICJFNTYzOiBzdGF0IGVycm9yIgorbXNnc3RyICJFNTYzOiDu+Ojh6uAgc3RhdCIKKworIzogaWZfY3Njb3BlLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjQ6ICVzIGlzIG5vdCBhIGRpcmVjdG9yeSBvciBhIHZhbGlkIGNzY29wZSBkYXRhYmFzZSIKK21zZ3N0ciAiRTU2NDogJXMg7eUg/+Lr/+Xy8f8g6uDy4Ovu4+7sIOjr6CDo7OXt5ewg4eDn+yBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRlZCBjc2NvcGUgZGF0YWJhc2UgJXMiCittc2dzdHIgIsTu4eDi6+Xt4CDh4OfgIOTg7e379SBjc2NvcGUgJXMiCisKKyM6IGlmX2NzY29wZS5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVsZCIKK21zZ3N0ciAiRTI2Mjog7vjo4ergIO/u6/P35e3o/yDo7fTu8Ozg9ujoIO7yIPHu5eTo7eXt6P8gY3Njb3BlICVkIgorCisjOiBpZl9jc2NvcGUuYzo2OTQKK21zZ2lkICJFNTYxOiB1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAiRTU2MTog7eXo5+Ll8fLt++kg8ujvIO/u6PHq4CBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjczNgorbXNnaWQgIkU1NjY6IENvdWxkIG5vdCBjcmVhdGUgY3Njb3BlIHBpcGVzIgorbXNnc3RyICJFNTY2OiDN5eLu5+zu5u3uIPHu5+Tg8vwg8vDz4fMg5Ov/IGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6NzUzCittc2dpZCAiRTYyMjogQ291bGQgbm90IGZvcmsgZm9yIGNzY29wZSIKK21zZ3N0ciAiRTYyMjogzeXi7ufs7ubt7iDi++/u6+3o8vwgZm9yaygpIOTr/yBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjg0NyBpZl9jc2NvcGUuYzo4OTcKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIKK21zZ3N0ciAi7eUg8+Tg6+7x/CDi++/u6+3o8vwgY3NfY3JlYXRlX2Nvbm5lY3Rpb24iCisKKyM6IGlmX2NzY29wZS5jOjg5OAorbXNnaWQgIkU2MjM6IENvdWxkIG5vdCBzcGF3biBjc2NvcGUgcHJvY2VzcyIKK21zZ3N0ciAiRTYyMzogzeUg8+Tg6+7x/CDn4O/z8fLo8vwg7/Du9uXx8SBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjkxMQorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIHRvX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IO3lIPPk4Ovu8fwg4vvv7uvt6PL8IGZkb3BlbiDk6/8gdG9fZnAiCisKKyM6IGlmX2NzY29wZS5jOjkxMworbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIGZyX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IO3lIPPk4Ovu8fwg4vvv7uvt6PL8IGZkb3BlbiDk6/8gZnJfZnAiCisKKyM6IGlmX2NzY29wZS5jOjk1MQorbXNnaWQgIkU1Njc6IG5vIGNzY29wZSBjb25uZWN0aW9ucyIKK21zZ3N0ciAiRTU2Nzog8e7l5Ojt5e3o6SDxIGNzY29wZSDt5SDx7ufk4O3uIgorCisjOiBpZl9jc2NvcGUuYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTk6IG5vIG1hdGNoZXMgZm91bmQgZm9yIGNzY29wZSBxdWVyeSAlcyBvZiAlcyIKK21zZ3N0ciAiRTI1OTog7eUg7eDp5OXt7iDx7u7y4uXy8fLi6Okg7+4g5+Dv8O7x8yBjc2NvcGUgJXMg5Ov/ICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Njk6IGludmFsaWQgY3Njb3BlcXVpY2tmaXggZmxhZyAlYyBmb3IgJWMiCittc2dzdHIgIkU0Njk6IO3l7/Dg4ujr/O376SD06+DjIGNzY29wZXF1aWNrZml4ICVjIOTr/yAlYyIKKworIzogaWZfY3Njb3BlLmM6MTE1MgorbXNnaWQgImNzY29wZSBjb21tYW5kczpcbiIKK21zZ3N0ciAi6u7s4O3k+yBjc2NvcGU6XG4iCisKKyM6IGlmX2NzY29wZS5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS01czogJS0zMHMgKFVzYWdlOiAlcykiCittc2dzdHIgIiUtNXM6ICUtMzBzICjI8e/u6/zn7uLg7ejlOiAlcykiCisKKyM6IGlmX2NzY29wZS5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyNTogY2Fubm90IG9wZW4gY3Njb3BlIGRhdGFiYXNlOiAlcyIKK21zZ3N0ciAiRTYyNTog7eXi7ufs7ubt7iDu8urw+/L8IOHg5/Mg5ODt7fv1IGNzY29wZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjEyNzEKK21zZ2lkICJFNjI2OiBjYW5ub3QgZ2V0IGNzY29wZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRTYyNjog6O307vDs4Pbo/yDuIOHg5+Ug5ODt7fv1IGNzY29wZSDt5SDk7vHy8+/t4CIKKworIzogaWZfY3Njb3BlLmM6MTI5NgorbXNnaWQgIkU1Njg6IGR1cGxpY2F0ZSBjc2NvcGUgZGF0YWJhc2Ugbm90IGFkZGVkIgorbXNnc3RyICJFNTY4OiDk4O3t4P8g4eDn4CDk4O3t+/UgY3Njb3BlIPPm5SDv7uTx7uXk6O3l7eAiCisKKyM6IGlmX2NzY29wZS5jOjEzMDcKK21zZ2lkICJFNTY5OiBtYXhpbXVtIG51bWJlciBvZiBjc2NvcGUgY29ubmVjdGlvbnMgcmVhY2hlZCIKK21zZ3N0ciAiRTU2OTog5O7x8ujj7fPy7iDs4Orx6Ozg6/zt7uUg5+3g9+Xt6OUg7vLq8Pvy+/Ug8e7l5Ojt5e3o6SDxIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MTQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYxOiBjc2NvcGUgY29ubmVjdGlvbiAlcyBub3QgZm91bmQiCittc2dzdHIgIkUyNjE6IPHu5eTo7eXt6OUg8SBjc2NvcGUgJXMg7eUg7uHt4PDz5uXt7iIKKworIzogaWZfY3Njb3BlLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWQiCittc2dzdHIgIvHu5eTo7eXt6OUg8SBjc2NvcGUg5+Dq8Pvy7iIKKworIy4gc2hvdWxkIG5vdCByZWFjaCBoZXJlCisjOiBpZl9jc2NvcGUuYzoxNTk4Cittc2dpZCAiRTU3MDogZmF0YWwgZXJyb3IgaW4gY3NfbWFuYWdlX21hdGNoZXMiCittc2dzdHIgIkU1NzA6IOrw6PLo9+Xx6uD/IO746OHq4CDiIGNzX21hbmFnZV9tYXRjaGVzIgorCisjOiBpZl9jc2NvcGUuYzoxODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzIgorbXNnc3RyICLM5fLq4CBjc2NvcGU6ICVzIgorCisjOiBpZl9jc2NvcGUuYzoxODcwCittc2dpZCAiIgorIlxuIgorIiAgICMgICBsaW5lIgorbXNnc3RyICIiCisiXG4iCisiICAgIyAgIPHy8O7q4CIKKworIzogaWZfY3Njb3BlLmM6MTg3MgorbXNnaWQgImZpbGVuYW1lIC8gY29udGV4dCAvIGxpbmVcbiIKK21zZ3N0ciAi6Oz/IPTg6evgIC8g6u7t8uXq8fIgLyDx8vDu6uBcbiIKKworIzogaWZfY3Njb3BlLmM6MTk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA5OiBDc2NvcGUgZXJyb3I6ICVzIgorbXNnc3RyICJFNjA5OiDO+Ojh6uAgY3Njb3BlOiAlcyIKKworIzogaWZfY3Njb3BlLmM6MjE3NgorbXNnaWQgIkFsbCBjc2NvcGUgZGF0YWJhc2VzIHJlc2V0IgorbXNnc3RyICLP5fDl5+Dj8PPn6uAg4vHl9SDh4Ocg5ODt7fv1IGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6MjI0NAorbXNnaWQgIm5vIGNzY29wZSBjb25uZWN0aW9uc1xuIgorbXNnc3RyICLx7uXk6O3l7ej/IPEgY3Njb3BlIO7y8fPy8fLi8/7yXG4iCisKKyM6IGlmX2NzY29wZS5jOjIyNDgKK21zZ2lkICIgIyBwaWQgICAgZGF0YWJhc2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iCittc2dzdHIgIiAjIHBpZCAgICDh4OfgIOTg7e379SAgICAgICAgICAgICAgICAgICAgICAgICDt4Pfg6/zt++kg7/Py/FxuIgorCisjOiBpZl9weXRob24uYzo0MzYKK21zZ2lkICIiCisiRTI2MzogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFB5dGhvbiBsaWJyYXJ5IGNvdWxkIG5vdCBiZSAiCisibG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjM6IMog8e7m4Ovl7ej+IP3y4CDq7uzg7eTgIO3lIPDg4e7y4OXyLCDv7vHq7uv86vMg7eUg5+Dj8PPm5e3gIOHo4evo7vLl6uAgIgorIlB5dGhvbiIKKworIzogaWZfcHl0aG9uLmM6NTAwCittc2dpZCAiRTY1OTogQ2Fubm90IGludm9rZSBQeXRob24gcmVjdXJzaXZlbHkiCittc2dzdHIgIkU2NTk6IM3l4u7n7O7m7e4g4vvv7uvt6PL8IPDl6vPw8eji7fvpIOL75+7iIFB5dGhvbiIKKworIzogaWZfcHl0aG9uLmM6NzAxCittc2dpZCAiY2FuJ3QgZGVsZXRlIE91dHB1dE9iamVjdCBhdHRyaWJ1dGVzIgorbXNnc3RyICLt5eLu5+zu5u3uIPPk4Ovo8vwg4PLw6OHz8vsgT3V0cHV0T2JqZWN0IgorCisjOiBpZl9weXRob24uYzo3MDgKK21zZ2lkICJzb2Z0c3BhY2UgbXVzdCBiZSBhbiBpbnRlZ2VyIgorbXNnc3RyICLn7eD35e3o5SBzb2Z0c3BhY2Ug5O7r5u3uIOH78vwg9uXr++wg9+jx6+7sIgorCisjOiBpZl9weXRob24uYzo3MTYKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAi7eXv8ODi6Ov87fvpIODy8Ojh8/IiCisKKyM6IGlmX3B5dGhvbi5jOjc1NSBpZl9weXRob24uYzo3NjkKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkg8vDl4fPl8iDz6uDn4O3o/yDx7+jx6uAg8fLw7uoiCisKKyM6IGlmX3B5dGhvbi5jOjg5NQorbXNnaWQgIkUyNjQ6IFB5dGhvbjogRXJyb3IgaW5pdGlhbGlzaW5nIEkvTyBvYmplY3RzIgorbXNnc3RyICJFMjY0OiBQeXRob246IM746OHq4CDo7ej26ODr6Ofg9ujoIO7h+uXq8u7iIEkvTyIKKworIzogaWZfcHl0aG9uLmM6MTA4MCBpZl90Y2wuYzoxNDAyCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICLt5e/w4OLo6/zt7uUg4vvw4Obl7ejlIgorCisjOiBpZl9weXRob24uYzoxMDk0IGlmX3RjbC5jOjE0MDcKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIuL78ODm5e3o/yDu8urr/vfl7fsg7/DoIOru7O/o6//26OgiCisKKyM6IGlmX3B5dGhvbi5jOjExMDcKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICLv7u/78urgIPHu8evg8vzx/yDt4CDz7ej38u7m5e3t++kg4fP05fAiCisKKyM6IGlmX3B5dGhvbi5jOjExMjIgaWZfcHl0aG9uLmM6MTE2MyBpZl9weXRob24uYzoxMjI3IGlmX3RjbC5jOjEyMTQKK21zZ2lkICJsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UiCittc2dzdHIgIufg7/Dl5OXr/O376SDt7uzl8CDx8vDu6ugiCisKKyM6IGlmX3B5dGhvbi5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IgorbXNnc3RyICI87uH65eryIOHz9OXw4CAo8+Tg6+XtKSDiICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxNDUzIGlmX3RjbC5jOjgzNgorbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICLt5e/w4OLo6/zt7uUg6Oz/IO7y7OXy6ugiCisKKyM6IGlmX3B5dGhvbi5jOjE3MzMKK21zZ2lkICJubyBzdWNoIGJ1ZmZlciIKK21zZ3N0ciAi7eXyIPLg6u7j7iDh8/Tl8OAiCisKKyM6IGlmX3B5dGhvbi5jOjE4MjEKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICLv7u/78urgIPHu8evg8vzx/yDt4CDn4Orw+/Lu5SDu6u3uIgorCisjOiBpZl9weXRob24uYzoxODY2Cittc2dpZCAicmVhZG9ubHkgYXR0cmlidXRlIgorbXNnc3RyICLg8vDo4fPyIOTu8fLz7+XtIPLu6/zq7iDk6/8g9/Ll7ej/IgorCisjOiBpZl9weXRob24uYzoxODc5Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICLv7ufo9uj/IOrz8PHu8OAg7eD17uTo8vH/IOLt5SDh8/Tl8OAiCisKKyM6IGlmX3B5dGhvbi5jOjE5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKGRlbGV0ZWQpIGF0ICUuOGxYPiIKK21zZ3N0ciAiPO7h+uXq8iDu6u3gICjz5ODr5e0pIOIgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxOTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjzu4frl6vIg7urt4CAo7eXo5+Ll8fLl7Skg4iAlLjhsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyAlZD4iCittc2dzdHIgIjzu6u3uICVkPiIKKworIzogaWZfcHl0aG9uLmM6MjA0NgorbXNnaWQgIm5vIHN1Y2ggd2luZG93IgorbXNnc3RyICLt5fIg8uDq7uPuIO7q7eAiCisKKyM6IGlmX3B5dGhvbi5jOjIzMDcgaWZfcHl0aG9uLmM6MjM0MSBpZl9weXRob24uYzoyMzk2IGlmX3B5dGhvbi5jOjI0NjQKKyM6IGlmX3B5dGhvbi5jOjI1ODYgaWZfcHl0aG9uLmM6MjYzOCBpZl90Y2wuYzo2ODQgaWZfdGNsLmM6NzI5IGlmX3RjbC5jOjgwMworIzogaWZfdGNsLmM6ODczIGlmX3RjbC5jOjE5OTkKK21zZ2lkICJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICLt5eLu5+zu5u3uIPHu9fDg7ejy/CDo7fTu8Ozg9uj+IO7hIO7y7OXt5SDu7+Xw4Pbo6CIKKworIzogaWZfcHl0aG9uLmM6MjMwOSBpZl9weXRob24uYzoyNDAzIGlmX3B5dGhvbi5jOjI0NzUKK21zZ2lkICJjYW5ub3QgZGVsZXRlIGxpbmUiCittc2dzdHIgIu3l4u7n7O7m7e4g8+Tg6+jy/CDx8vDu6vMiCisKKyM6IGlmX3B5dGhvbi5jOjIzNDYgaWZfcHl0aG9uLmM6MjQ5MSBpZl90Y2wuYzo2OTAgaWZfdGNsLmM6MjAyMQorbXNnaWQgImNhbm5vdCByZXBsYWNlIGxpbmUiCittc2dzdHIgIu3l4u7n7O7m7e4g5+Ds5e3o8vwg8fLw7urzIgorCisjOiBpZl9weXRob24uYzoyNTA5IGlmX3B5dGhvbi5jOjI1ODggaWZfcHl0aG9uLmM6MjY0NgorbXNnaWQgImNhbm5vdCBpbnNlcnQgbGluZSIKK21zZ3N0ciAi7eXi7ufs7ubt7iDi8fLg4ujy/CDx8vDu6vMiCisKKyM6IGlmX3B5dGhvbi5jOjI3NTAKK21zZ2lkICJzdHJpbmcgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgIvHy8O7q4CDt5SDs7ubl8iDx7uTl8Obg8vwg8ejs4u7rIO3u4u7pIPHy8O7q6CIKKworIzogaWZfcnVieS5jOjQyMgorbXNnaWQgIiIKKyJFMjY2OiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUnVieSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisiRTI2NjogyiDx7ubg6+Xt6P4g/fLgIOru7ODt5OAg7eUg8ODh7vLg5fIsIO/u8eru6/zq8yDt5SDn4OPw8+bl7eAg4ejh6+ju8uXq4CAiCisiUnVieS4iCisKKyM6IGlmX3J1YnkuYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIKK21zZ3N0ciAiRTI3Mzog7eXo5+Ll8fLt7uUg8e7x8u7/7ejlIGxvbmdqbXAgJWQiCisKKyM6IGlmX3NuaWZmLmM6NjcKK21zZ2lkICJUb2dnbGUgaW1wbGVtZW50YXRpb24vZGVmaW5pdGlvbiIKK21zZ3N0ciAiz+Xw5err/vfl7ejlIOzl5uTzIPDl4Ovo5+D26OXpL+7v8OXk5evl7ejl7CIKKworIzogaWZfc25pZmYuYzo2OAorbXNnaWQgIlNob3cgYmFzZSBjbGFzcyBvZiIKK21zZ3N0ciAiz+7q4Ofg8vwg4eDn7uL76SDq6+Dx8SAiCisKKyM6IGlmX3NuaWZmLmM6NjkKK21zZ2lkICJTaG93IG92ZXJyaWRkZW4gbWVtYmVyIGZ1bmN0aW9uIgorbXNnc3RyICLP7urg5+Dy/CDv5fDl4/Dz5uXt7fvlIPTz7er26OgiCisKKyM6IGlmX3NuaWZmLmM6NzAKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGZpbGUiCittc2dzdHIgIs/u6/P35e3o5SDo5yD04Onr4CIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAiz+7r8/fl7ejlIOjnIO/w7uXq8uAiCisKKyM6IGlmX3NuaWZmLmM6NzMKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGFsbCBwcm9qZWN0cyIKK21zZ3N0ciAiz+7r8/fl7ejlIOjnIOLx5fUg7/Du5ery7uIiCisKKyM6IGlmX3NuaWZmLmM6NzQKK21zZ2lkICJSZXRyaWV2ZSIKK21zZ3N0ciAiz+7r8/fl7ejlIgorCisjOiBpZl9zbmlmZi5jOjc1Cittc2dpZCAiU2hvdyBzb3VyY2Ugb2YiCittc2dzdHIgIs/u6uDn4PL8IOjx9e7k7fvpIOru5CIKKworIzogaWZfc25pZmYuYzo3NgorbXNnaWQgIkZpbmQgc3ltYm9sIgorbXNnc3RyICLN4Ony6CDx6Ozi7usiCisKKyM6IGlmX3NuaWZmLmM6NzcKK21zZ2lkICJCcm93c2UgY2xhc3MiCittc2dzdHIgIs/w7vHs7vLwIOrr4PHx4CIKKworIzogaWZfc25pZmYuYzo3OAorbXNnaWQgIlNob3cgY2xhc3MgaW4gaGllcmFyY2h5IgorbXNnc3RyICLP7urg5+Dy/CDq6+Dx8SDiIOjl8ODw9ejoIgorCisjOiBpZl9zbmlmZi5jOjc5Cittc2dpZCAiU2hvdyBjbGFzcyBpbiByZXN0cmljdGVkIGhpZXJhcmNoeSIKK21zZ3N0ciAiz+7q4Ofg8vwg6uvg8fEg4iDu4/Dg7ej35e3t7ukg6OXw4PD16OgiCisKKyM6IGlmX3NuaWZmLmM6ODAKK21zZ2lkICJYcmVmIHJlZmVycyB0byIKK21zZ3N0ciAiWHJlZiDx8fvr4OXy8f8g7eAiCisKKyM6IGlmX3NuaWZmLmM6ODEKK21zZ2lkICJYcmVmIHJlZmVycmVkIGJ5IgorbXNnc3RyICLR8fvr6uAg7eAgeHJlZiDo5yIKKworIzogaWZfc25pZmYuYzo4MgorbXNnaWQgIlhyZWYgaGFzIGEiCittc2dzdHIgIlhyZWYg6Ozl5fIiCisKKyM6IGlmX3NuaWZmLmM6ODMKK21zZ2lkICJYcmVmIHVzZWQgYnkiCittc2dzdHIgIlhyZWYg6PHv7uv85/Pl8vH/IgorCisjOiBpZl9zbmlmZi5jOjg0Cittc2dpZCAiU2hvdyBkb2N1IG9mIgorbXNnc3RyICLP7urg5+Dy/CBkb2N1IgorCisjOiBpZl9zbmlmZi5jOjg1Cittc2dpZCAiR2VuZXJhdGUgZG9jdSBmb3IiCittc2dzdHIgItHu5+Tg8vwgZG9jdSIKKworIzogaWZfc25pZmYuYzo5NworbXNnaWQgIiIKKyJDYW5ub3QgY29ubmVjdCB0byBTTmlGRisuIENoZWNrIGVudmlyb25tZW50IChzbmlmZmVtYWNzIG11c3QgYmUgZm91bmQgaW4gIgorIiRQQVRIKS5cbiIKK21zZ3N0ciAiIgorIs3l4u7n7O7m7e4g7+7k8e7l5Ojt6PL88f8g6iBTTmlGRisuIM/w7uLl8Pzy5SDt4PHy8O7p6ugg7urw8+bl7ej/LiIKKyIoc25pZmZlbWFjcyDk7uvm7fsg4fvy/CDz6uDn4O37IOIg7+Xw5ezl7e3u6SAkUEFUSCkuXG4iCisKKyM6IGlmX3NuaWZmLmM6NDI1Cittc2dpZCAiRTI3NDogU25pZmY6IEVycm9yIGR1cmluZyByZWFkLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIkUyNzQ6IFNuaWZmOiDO+Ojh6uAg4u4g4vDl7P8g9/Ll7ej/LiDO8vHu5eTo7eXt6OUiCisKKyM6IGlmX3NuaWZmLmM6NTUzCittc2dpZCAiU05pRkYrIGlzIGN1cnJlbnRseSAiCittc2dzdHIgIsIg7eDx8u7/+ejpIOzu7OXt8iBTTmlGRisgIgorCisjOiBpZl9zbmlmZi5jOjU1NQorbXNnaWQgIm5vdCAiCittc2dzdHIgIu3lICIKKworIzogaWZfc25pZmYuYzo1NTYKK21zZ2lkICJjb25uZWN0ZWQiCittc2dzdHIgIu/u5PHu5eTo7bjtIgorCisjOiBpZl9zbmlmZi5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjc1OiBVbmtub3duIFNOaUZGKyByZXF1ZXN0OiAlcyIKK21zZ3N0ciAiRTI3NTogzeXo5+Ll8fLt++kg5+Dv8O7xIFNOaUZGKzogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IM746OHq4CDx7uXk6O3l7ej/IPHuIFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDA5Cittc2dpZCAiRTI3ODogU05pRkYrIG5vdCBjb25uZWN0ZWQiCittc2dzdHIgIkUyNzg6IFNOaUZGKyDt5SDv7uTx7uXk6O247SIKKworIzogaWZfc25pZmYuYzoxMDE4Cittc2dpZCAiRTI3OTogTm90IGEgU05pRkYrIGJ1ZmZlciIKK21zZ3N0ciAiRTI3OTog3fLuIO3lIOHz9OXwIFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDgzCittc2dpZCAiU25pZmY6IEVycm9yIGR1cmluZyB3cml0ZS4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJTbmlmZjogzvjo4ergIOLuIOLw5ez/IOfg7+jx6C4gzvLx7uXk6O3l7ejlIgorCisjOiBpZl90Y2wuYzo0MTgKK21zZ2lkICJpbnZhbGlkIGJ1ZmZlciBudW1iZXIiCittc2dzdHIgIu3l7/Dg4ujr/O376SDt7uzl8CDh8/Tl8OAiCisKKyM6IGlmX3RjbC5jOjQ2NCBpZl90Y2wuYzo5MzEgaWZfdGNsLmM6MTExMAorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIu/u6uAg7eUg8OXg6+jn7uLg7e4iCisKKyM6IGlmX3RjbC5jOjUwMQorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICLt5ejn4uXx8u3g/yDu7/bo/yIKKworIy4gPz8/CisjOiBpZl90Y2wuYzo3NzQKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgIu3l4u7n7O7m7e4g7eDn7eD36PL8IPHy8O7q8yDo6+gg8fLw7uroIgorCisjOiBpZl90Y2wuYzo4NDUKK21zZ2lkICJtYXJrIG5vdCBzZXQiCittc2dzdHIgIu7y7OXy6uAg7eUg8/Hy4O3u4uvl7eAiCisKKyM6IGlmX3RjbC5jOjg1MSBpZl90Y2wuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdyAlZCBjb2x1bW4gJWQiCittc2dzdHIgIvD/5CAlZCDq7uvu7ergICVkIgorCisjOiBpZl90Y2wuYzo4ODEKK21zZ2lkICJjYW5ub3QgaW5zZXJ0L2FwcGVuZCBsaW5lIgorbXNnc3RyICLt5eLu5+zu5u3uIOLx8uDi6PL8IOjr6CDk7uHg4ujy/CDx8vDu6vMiCisKKyM6IGlmX3RjbC5jOjEyNjgKK21zZ2lkICJ1bmtub3duIGZsYWc6ICIKK21zZ3N0ciAi7eXo5+Ll8fLt++kg9Ovg4zogIgorCisjOiBpZl90Y2wuYzoxMzM4Cittc2dpZCAidW5rbm93biB2aW1PcHRpb24iCittc2dzdHIgIu3l6Ofi5fHy7eD/IHZpbU9wdGlvbiIKKworIzogaWZfdGNsLmM6MTQyMworbXNnaWQgImtleWJvYXJkIGludGVycnVwdCIKK21zZ3N0ciAi6uvg4ujg8vPw7e7lIO/w5fD74uDt6OUiCisKKyM6IGlmX3RjbC5jOjE0MjgKK21zZ2lkICJ2aW0gZXJyb3IiCittc2dzdHIgIu746OHq4CB2aW0iCisKKyM6IGlmX3RjbC5jOjE0NzEKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIu3l4u7n7O7m7e4g8e7n5ODy/CDq7uzg7eTzIOHz9OXw4CDo6+gg7urt4Dog7uH65eryIOIg7/Du9uXx8eUg8+Tg6+Xt6P8iCisKKyM6IGlmX3RjbC5jOjE1NDUKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICIiCisi7eXi7ufs7ubt7iDn4PDl4+jx8vDo8O7i4PL8IOru7ODt5PMg8SDu4fDg8u377CDi++fu4u7sOiDh8/Tl8CDo6+gg7urt7iDiICIKKyLv8O725fHx5SDz5ODr5e3o/yIKKworIy4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgRmFtb3VzIGxhc3Qgd29yZD8KKyM6IGlmX3RjbC5jOjE1NjIKK21zZ2lkICIiCisiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IGNvcnJ1cHQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0uIgorIm9yZyIKK21zZ3N0ciAiIgorIkUyODA6IMrQyNLI18XRysDfIM7YyMHKwCBUQ0w6IO/u4vDl5uS47SDx7+jx7uog8fH76+7qPyEg0e7u4fno8uUg7uEg/fLu7CDv7iAiCisi4OTw5fHzIHZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTU2MworbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIiIKKyLt5eLu5+zu5u3uIOfg8OXj6PHy8Ojw7uLg8vwg6u7s4O3k8yDxIO7h8ODy7fvsIOL75+7i7uw6IPHx++vq4CDt4CDh8/Tl8CDo6+ggIgorIu7q7e4g7eUg7uHt4PDz5uXt4CIKKworIzogaWZfdGNsLmM6MTcyNAorbXNnaWQgIiIKKyJFNTcxOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgVGNsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFNTcxOiDKIPHu5uDr5e3o/iD98uAg6u7s4O3k4CDt5SDw4OHu8uDl8iwg7+7x6u7r/OrzIO3lIOfg4/Dz5uXt4CDh6OHr6O7y5ergICIKKyJUY2wiCisKKyM6IGlmX3RjbC5jOjE4ODYKK21zZ2lkICIiCisiRTI4MTogVENMIEVSUk9SOiBleGl0IGNvZGUgaXMgbm90IGludCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS5vcmciCittc2dzdHIgIiIKKyJFMjgxOiDO2MjBysAgVENMOiDK7uQg4vv17uTgIO3lIP/i6//l8vH/IPbl6/vsIPfo8evu7D8hINHu7uH56PLlIO7hIP3y7uwg4iAiCisidmltLWRldkB2aW0ub3JnIgorCisjOiBpZl90Y2wuYzoyMDA3Cittc2dpZCAiY2Fubm90IGdldCBsaW5lIgorbXNnc3RyICLt5eLu5+zu5u3uIO/u6/P36PL8IPHy8O7q8yIKKworIzogaWZfeGNtZHNydi5jOjIyNQorbXNnaWQgIlVuYWJsZSB0byByZWdpc3RlciBhIGNvbW1hbmQgc2VydmVyIG5hbWUiCittc2dzdHIgIs3l4u7n7O7m7e4g5+Dw5ePo8fLw6PDu4uDy/CDo7P8g8eXw4uXw4CDq7uzg7eQiCisKKyM6IGlmX3hjbWRzcnYuYzo0NzMKK21zZ2lkICJFMjQ4OiBGYWlsZWQgdG8gc2VuZCBjb21tYW5kIHRvIHRoZSBkZXN0aW5hdGlvbiBwcm9ncmFtIgorbXNnc3RyICJFMjQ4OiDO8u/w4OLq4CDq7uzg7eT7IOIg5PDz4/P+IO/w7uPw4Ozs8yDt5SDz5ODr4PH8IgorCisjOiBpZl94Y21kc3J2LmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzM6IEludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICJFNTczOiDI8e/u6/zn8+Xy8f8g7eXv8ODi6Ov87fvpIGlkIPHl8OLl8OA6ICVzIgorCisjOiBpZl94Y21kc3J2LmM6MTExMAorbXNnaWQgIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBpcyBiYWRseSBmb3JtZWQuICBEZWxldGVkISIKK21zZ3N0ciAiIgorIkUyNTE6IM3l7/Dg4ujr/O3uIPH07vDs6PDu4uDt7iDn7eD35e3o5SDk4O3t7uPuIO/w7vbl8fHgIFZJTSDiIPDl5fHy8OUuICIKKyLT5ODr5e3uISIKKworIzogbWFpbi5jOjYwCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIs3l6Ofi5fHy7fvpIODw4/Ps5e3yIgorCisjOiBtYWluLmM6NjIKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAi0evo+Oru7CDs7e7j7iDg8OPz7OXt8u7iIPDl5ODq8ujw7uLg7ej/IgorCisjOiBtYWluLmM6NjQKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICLP8O7v8/nl7SDg8OPz7OXt8iDv7vHr5SIKKworIzogbWFpbi5jOjY2Cittc2dpZCAiR2FyYmFnZSBhZnRlciBvcHRpb24iCittc2dzdHIgIszz8e7wIO/u8evlIODw4/Ps5e3y4CIKKworIzogbWFpbi5jOjY4Cittc2dpZCAiVG9vIG1hbnkgXCIrY29tbWFuZFwiLCBcIi1jIGNvbW1hbmRcIiBvciBcIi0tY21kIGNvbW1hbmRcIiBhcmd1bWVudHMiCittc2dzdHIgIiIKKyLR6+j46u7sIOzt7uPuIODw4/Ps5e3y7uIgXCIr6u7s4O3k4FwiLCBcIi1jIOru7ODt5OBcIiDo6+ggXCItLWNtZCDq7uzg7eTgXCIiCisKKyM6IG1haW4uYzo3MAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgZm9yIgorbXNnc3RyICLN5eTu7/Px8ujs++Ug4PDj8+zl7fL7IOTr/yIKKworIzogbWFpbi5jOjQ2NgorbXNnaWQgIlRoaXMgVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgZGlmZiBmZWF0dXJlLiIKK21zZ3N0ciAiIgorIsTg7e376SBWaW0g4fvrIPHq7uzv6Ovo8O7i4O0g8SDi++rr/vfl7e3u6SDu8e7h5e3t7vHy/P4g7/Du8ezu8vDgIO7y6+j36OkiCisKKyM6IG1haW4uYzo5MzIKK21zZ2lkICJBdHRlbXB0IHRvIG9wZW4gc2NyaXB0IGZpbGUgYWdhaW46IFwiIgorbXNnc3RyICLP7u/78urgIO/u4vLu8O3u4+4g7vLq8Pvy6P8g9ODp6+Ag8fbl7eDw6P86IFwiIgorCisjOiBtYWluLmM6OTQxCittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICLN5eLu5+zu5u3uIO7y6vD78vwg5Ov/IPfy5e3o/zogXCIiCisKKyM6IG1haW4uYzo5ODUKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIs3l4u7n7O7m7e4g7vLq8Pvy/CDk6/8g4vvi7uTgIPH25e3g8Oj/OiBcIiIKKworIzogbWFpbi5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmlsZXMgdG8gZWRpdFxuIgorbXNnc3RyICLU4Onr7uIg5Ov/IPDl5ODq8ujw7uLg7ej/OiAlZFxuIgorCisjOiBtYWluLmM6MTIzMworbXNnaWQgIlZpbTogV2FybmluZzogT3V0cHV0IGlzIG5vdCB0byBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTogz/Dl5PPv8OXm5OXt6OU6IML74u7kIO7x8/nl8fLi6//l8vH/IO3lIO3gIPLl8Ozo7eDrXG4iCisKKyM6IG1haW4uYzoxMjM1Cittc2dpZCAiVmltOiBXYXJuaW5nOiBJbnB1dCBpcyBub3QgZnJvbSBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTogz/Dl5PPv8OXm5OXt6OU6IMLi7uQg7/Du6PH17uTo8iDt5SDxIPLl8Ozo7eDr4FxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjEyOTcKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICLq7uzg7eTt4P8g8fLw7urgIO/l8OXkIOL77+7r7eXt6OXsIHZpbXJjIgorCisjOiBtYWluLmM6MTMzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgyOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTI4MjogzeXi7ufs7ubt7iDi++/u6+3o8vwg9/Ll7ejlIOjnIFwiJXNcIiIKKworIzogbWFpbi5jOjI0MTEKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIsTu7+7r7ejy5ev87eD/IOjt9O7w7OD26P86IFwidmltIC1oXCJcbiIKKworIzogbWFpbi5jOjI0NDQKK21zZ2lkICJbZmlsZSAuLl0gICAgICAgZWRpdCBzcGVjaWZpZWQgZmlsZShzKSIKK21zZ3N0ciAiW/Tg6esgLi5dIPDl5ODq8ujw7uLg7ejlIPPq4Ofg7e379SD04Onr7uIiCisKKyM6IG1haW4uYzoyNDQ1Cittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAgIPfy5e3o5SDy5erx8uAg6Ocg7+7y7urgIOLi7uTgIHN0ZGluIgorCisjOiBtYWluLmM6MjQ0NgorbXNnaWQgIi10IHRhZyAgICAgICAgICBlZGl0IGZpbGUgd2hlcmUgdGFnIGlzIGRlZmluZWQiCittc2dzdHIgIi10IOzl8urgICAgICAgICAg8OXk4Ory6PDu4uDt6OUg9ODp6+Ag8SDz6uDn4O3t7ukg7OXy6u7pIgorCisjOiBtYWluLmM6MjQ0OAorbXNnaWQgIi1xIFtlcnJvcmZpbGVdICBlZGl0IGZpbGUgd2l0aCBmaXJzdCBlcnJvciIKK21zZ3N0ciAiLXEgW/Tg6esg7vjo4e7qXSDw5eTg6vLo8O7i4O3o5SD04Onr4CDxIO/l8OLu6SDu+Ojh6u7pIgorCisjOiBtYWluLmM6MjQ1NworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJ1c2FnZToiCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyLI8e/u6/zn7uLg7ejlOiIKKworIzogbWFpbi5jOjI0NjAKK21zZ2lkICIgdmltIFthcmd1bWVudHNdICIKK21zZ3N0ciAiIHZpbSBb4PDj8+zl7fL7XSAiCisKKyM6IG1haW4uYzoyNDY0Cittc2dpZCAiIgorIlxuIgorIiAgIG9yOiIKK21zZ3N0ciAiIgorIlxuIgorIiAgIOjr6DoiCisKKyM6IG1haW4uYzoyNDY3Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50czpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIsDw4/Ps5e3y+zpcbiIKKworIzogbWFpbi5jOjI0NjgKK21zZ2lkICItLVx0XHRcdE9ubHkgZmlsZSBuYW1lcyBhZnRlciB0aGlzIgorbXNnc3RyICItLVx0XHRcdMTg6+XlIPPq4Of74uD+8vH/IPLu6/zq7iDo7OXt4CD04Onr7uIiCisKKyM6IG1haW4uYzoyNDcwCittc2dpZCAiLS1saXRlcmFsXHRcdERvbid0IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIi0tbGl0ZXJhbFx0XHTN5SDi++/u6+3/8vwg7+7k8fLg7e7i6vMg7+4g7ODx6uUiCisKKyM6IG1haW4uYzoyNDczCittc2dpZCAiLXJlZ2lzdGVyXHRcdFJlZ2lzdGVyIHRoaXMgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItcmVnaXN0ZXJcdFx0x+Dw5ePo8fLw6PDu4uDy/CD98u7yIGd2aW0g5Ov/IE9MRSIKKworIzogbWFpbi5jOjI0NzQKK21zZ2lkICItdW5yZWdpc3Rlclx0XHRVbnJlZ2lzdGVyIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXVucmVnaXN0ZXJcdFx0zvLq6/736PL8IPDl4+jx8vDg9uj+IOTg7e3u4+4gZ3ZpbSDk6/8gT0xFIgorCisjOiBtYWluLmM6MjQ3NworbXNnaWQgIi1nXHRcdFx0UnVuIHVzaW5nIEdVSSAobGlrZSBcImd2aW1cIikiCittc2dzdHIgIi1nXHRcdFx0x+Dv8/Hy6PL8IPEg4/Dg9Oj35fHq6Owg6O3y5fD05enx7uwgKOrg6iBcImd2aW1cIikiCisKKyM6IG1haW4uYzoyNDc4Cittc2dpZCAiLWYgIG9yICAtLW5vZm9ya1x0Rm9yZWdyb3VuZDogRG9uJ3QgZm9yayB3aGVuIHN0YXJ0aW5nIEdVSSIKK21zZ3N0ciAiLWYgIOjr6CAtLW5vZm9ya1x0wiDg6vLo4u3u6SDn4OTg9+U6IM3lIOL77+7r7f/y/CBmb3JrIO/w6CDn4O/z8erlIEdVSSIKKworIzogbWFpbi5jOjI0ODAKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHTQ5ebo7CBWaSAo6uDqIFwidmlcIikiCisKKyM6IG1haW4uYzoyNDgxCittc2dpZCAiLWVcdFx0XHRFeCBtb2RlIChsaWtlIFwiZXhcIikiCittc2dzdHIgIi1lXHRcdFx00OXm6OwgRXggKOrg6iBcImV4XCIpIgorCisjOiBtYWluLmM6MjQ4MgorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHTS6PXo6SAo7+Dq5fLt++kpIPDl5ujsICjy7uv86u4g5Ov/IFwiZXhcIikiCisKKyM6IG1haW4uYzoyNDg0Cittc2dpZCAiLWRcdFx0XHREaWZmIG1vZGUgKGxpa2UgXCJ2aW1kaWZmXCIpIgorbXNnc3RyICItZFx0XHRcdNDl5ujsIO7y6+j36OkgKOrg6iBcInZpbWRpZmZcIikiCisKKyM6IG1haW4uYzoyNDg2Cittc2dpZCAiLXlcdFx0XHRFYXN5IG1vZGUgKGxpa2UgXCJldmltXCIsIG1vZGVsZXNzKSIKK21zZ3N0ciAiLXlcdFx0XHTP8O7x8u7pIPDl5ujsICjq4OogXCJldmltXCIsIOHl5/Dl5ujs7fvpKSIKKworIzogbWFpbi5jOjI0ODcKK21zZ2lkICItUlx0XHRcdFJlYWRvbmx5IG1vZGUgKGxpa2UgXCJ2aWV3XCIpIgorbXNnc3RyICItUlx0XHRcdNLu6/zq7iDk6/8g9/Ll7ej/ICjq4OogXCJ2aWV3XCIpIgorCisjOiBtYWluLmM6MjQ4OAorbXNnaWQgIi1aXHRcdFx0UmVzdHJpY3RlZCBtb2RlIChsaWtlIFwicnZpbVwiKSIKK21zZ3N0ciAiLVpcdFx0XHTO4/Dg7ej35e3t++kg8OXm6OwgKOrg6iBcInJ2aW1cIikiCisKKyM6IG1haW4uYzoyNDg5Cittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHTB5ecg4u7n7O7m7e7x8ugg8e718ODt5e3o/yDo5+zl7eXt6OkgKOfg7+jx6CD04Onr7uIpIgorCisjOiBtYWluLmM6MjQ5MAorbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdMHl5yDi7ufs7ubt7vHy6CDi7eXx5e3o/yDo5+zl7eXt6Okg4iDy5erx8iIKKworIzogbWFpbi5jOjI0OTEKK21zZ2lkICItYlx0XHRcdEJpbmFyeSBtb2RlIgorbXNnc3RyICItYlx0XHRcdMHo7eDw7fvpIPDl5ujsIgorCisjOiBtYWluLmM6MjQ5MworbXNnaWQgIi1sXHRcdFx0TGlzcCBtb2RlIgorbXNnc3RyICItbFx0XHRcdNDl5ujsIExpc3AiCisKKyM6IG1haW4uYzoyNDk1Cittc2dpZCAiLUNcdFx0XHRDb21wYXRpYmxlIHdpdGggVmk6ICdjb21wYXRpYmxlJyIKK21zZ3N0ciAiLUNcdFx0XHTQ5ebo7CDx7uLs5fHy6Ozu8fLoIPEgVmk6ICdjb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjI0OTYKK21zZ2lkICItTlx0XHRcdE5vdCBmdWxseSBWaSBjb21wYXRpYmxlOiAnbm9jb21wYXRpYmxlJyIKK21zZ3N0ciAiLU5cdFx0XHTQ5ebo7CDt5e/u6+3u6SDx7uLs5fHy6Ozu8fLoIPEgVmk6ICdub2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjQ5NworbXNnaWQgIi1WW05dXHRcdFZlcmJvc2UgbGV2ZWwiCittc2dzdHIgIi1WW05dXHRcdNPw7uLl7fwg7+7k8O7h7e7x8ugg8e7u4fnl7ejpIgorCisjOiBtYWluLmM6MjQ5OAorbXNnaWQgIi1EXHRcdFx0RGVidWdnaW5nIG1vZGUiCittc2dzdHIgIi1EXHRcdFx00OXm6Owg7vLr4OTq6CIKKworIzogbWFpbi5jOjI0OTkKK21zZ2lkICItblx0XHRcdE5vIHN3YXAgZmlsZSwgdXNlIG1lbW9yeSBvbmx5IgorbXNnc3RyICItblx0XHRcdMHl5yDx4u7vLfTg6evgLCDo8e/u6/zn8+Xy8f8g8u7r/OruIO/g7P/y/CIKKworIzogbWFpbi5jOjI1MDAKK21zZ2lkICItclx0XHRcdExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdCIKK21zZ3N0ciAiLXJcdFx0XHTC++Ll8fLoIPHv6PHu6iDx4u7vLfTg6evu4iDoIOfg4uXw+Ojy/CDw4OHu8vMiCisKKyM6IG1haW4uYzoyNTAxCittc2dpZCAiLXIgKHdpdGggZmlsZSBuYW1lKVx0UmVjb3ZlciBjcmFzaGVkIHNlc3Npb24iCittc2dzdHIgIi1yICjxIOjs5e3l7CD04Onr4ClcdMLu8fHy4O3u4ujy/CDg4uDw6Ont7iDn4OLl8Pi47e376SDx5eDt8SIKKworIzogbWFpbi5jOjI1MDIKK21zZ2lkICItTFx0XHRcdFNhbWUgYXMgLXIiCittc2dzdHIgIi1MXHRcdFx00u4g5uUsIPfy7iDoIC1yIgorCisjOiBtYWluLmM6MjUwNAorbXNnaWQgIi1mXHRcdFx0RG9uJ3QgdXNlIG5ld2NsaSB0byBvcGVuIHdpbmRvdyIKK21zZ3N0ciAiLWZcdFx0XHTN5SDo8e/u6/zn7uLg8vwgbmV3Y2xpIOTr/yDu8urw+/Lo/yDu6u3gIgorCisjOiBtYWluLmM6MjUwNQorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPPPx8vDu6fHy4u4+XHRcdMjx7+7r/Ofu4uDy/CDk6/8gSS9PIPPq4Ofg7e3u5SA88/Hy8O7p8fLi7j4iCisKKyM6IG1haW4uYzoyNTA4Cittc2dpZCAiLUFcdFx0XHRzdGFydCBpbiBBcmFiaWMgbW9kZSIKK21zZ3N0ciAiLUFcdFx0XHTH4O/z8eog4iDA8ODh8eru7CDw5ebo7OUiCisKKyM6IG1haW4uYzoyNTExCittc2dpZCAiLUhcdFx0XHRTdGFydCBpbiBIZWJyZXcgbW9kZSIKK21zZ3N0ciAiLUhcdFx0XHTH4O/z8eog4iDw5ebo7OUgXCLI4vDo8lwiIgorCisjOiBtYWluLmM6MjUxNAorbXNnaWQgIi1GXHRcdFx0U3RhcnQgaW4gRmFyc2kgbW9kZSIKK21zZ3N0ciAiLUZcdFx0XHTH4O/z8eog4iDw5ebo7OUgXCLU4PDx6FwiIgorCisjOiBtYWluLmM6MjUxNgorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDzy5fDs6O3g6z5cdM3g5+3g9+jy/CDz6uDn4O3t++kg8ujvIDzy5fDs6O3g6+A+IgorCisjOiBtYWluLmM6MjUxNworbXNnaWQgIi11IDx2aW1yYz5cdFx0VXNlIDx2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLnZpbXJjIgorbXNnc3RyICItdSA8dmltcmM+XHRcdMjx7+7r/Ofu4uDy/CA8dmltcmM+IOLs5fHy7iDr/uH79SD04Onr7uIgLnZpbXJjIgorCisjOiBtYWluLmM6MjUxOQorbXNnaWQgIi1VIDxndmltcmM+XHRcdFVzZSA8Z3ZpbXJjPiBpbnN0ZWFkIG9mIGFueSAuZ3ZpbXJjIgorbXNnc3RyICItVSA8Z3ZpbXJjPlx0XHTI8e/u6/zn7uLg8vwgPGd2aW1yYz4g4uzl8fLuIOv+4fv1IPTg6evu4iAuZ3ZpbXJjIgorCisjOiBtYWluLmM6MjUyMQorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHTN5SDn4OPw8+bg8vwg8fbl7eDw6Ogg7O7k8+vl6SIKKworIzogbWFpbi5jOjI1MjIKK21zZ2lkICItb1tOXVx0XHRPcGVuIE4gd2luZG93cyAoZGVmYXVsdDogb25lIGZvciBlYWNoIGZpbGUpIgorbXNnc3RyICItb1tOXVx0XHTO8urw+/L8IE4g7uru7SAo7+4g8+zu6/fg7ej+OiDv7iDu5O3u7PMg7eAg6uDm5PvpIPTg6espIgorCisjOiBtYWluLmM6MjUyMworbXNnaWQgIi1PW05dXHRcdExpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdNLuIOblLCD38u4g6CAtbywg7e4g8SDi5fDy6Org6/zt++wg8ODn5OXr5e3o5ewg7uru7SIKKworIzogbWFpbi5jOjI1MjQKK21zZ2lkICIrXHRcdFx0U3RhcnQgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIitcdFx0XHTN4Pfg8vwg8OXk4Ory6PDu4uDt6OUg4iDq7u325SD04Onr4CIKKworIzogbWFpbi5jOjI1MjUKK21zZ2lkICIrPGxudW0+XHRcdFN0YXJ0IGF0IGxpbmUgPGxudW0+IgorbXNnc3RyICIrPGxudW0+XHRcdM3g9+Dy/CDw5eTg6vLo8O7i4O3o5SDiIPHy8O7q5SDxIO3u7OXw7uwgPGxudW0+IgorCisjOiBtYWluLmM6MjUyNworbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIi0tY21kIDzq7uzg7eTgPlx0wvvv7uvt6PL8IDzq7uzg7eTzPiDv5fDl5CDn4OPw8+fq7ukg9ODp6+AgdmltcmMiCisKKyM6IG1haW4uYzoyNTI5Cittc2dpZCAiLWMgPGNvbW1hbmQ+XHRcdEV4ZWN1dGUgPGNvbW1hbmQ+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1jIDzq7uzg7eTgPlx0XHTC++/u6+3o8vwgPOru7ODt5PM+IO/u8evlIOfg4/Dz5+roIO/l8OLu4+4g9ODp6+AiCisKKyM6IG1haW4uYzoyNTMwCittc2dpZCAiLVMgPHNlc3Npb24+XHRcdFNvdXJjZSBmaWxlIDxzZXNzaW9uPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItUyA88eXg7fE+XHRcdM/w7vfo8uDy/CDx9uXt4PDo6SA88eXg7fHgPiDv7vHr5SDn4OPw8+fq6CDv5fDi7uPuIPTg6evgIgorCisjOiBtYWluLmM6MjUzMQorbXNnaWQgIi1zIDxzY3JpcHRpbj5cdFJlYWQgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBmaWxlIDxzY3JpcHRpbj4iCittc2dzdHIgIi1zIDzx9uXt4PDo6T5cdM/w7vfo8uDy/CDq7uzg7eT7IM7h+/ft7uPuIPDl5ujs4CDo5yD04Onr4CA88fbl7eDw6P8+IgorCisjOiBtYWluLmM6MjUzMgorbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDzx9uXt4PDo6T5cdMTu4eDi6//y/CDi8eUg4uLl5Ljt7fvlIOru7ODt5Psg4iD04OnrIDzx9uXt4PDo/z4iCisKKyM6IG1haW4uYzoyNTMzCittc2dpZCAiLVcgPHNjcmlwdG91dD5cdFdyaXRlIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItVyA88fbl7eDw6Ok+XHTH4O/o8eDy/CDi8eUg4uLl5Ljt7fvlIOru7ODt5Psg4iD04OnrIDzx9uXt4PDo/z4iCisKKyM6IG1haW4uYzoyNTM1Cittc2dpZCAiLXhcdFx0XHRFZGl0IGVuY3J5cHRlZCBmaWxlcyIKK21zZ3N0ciAiLXhcdFx0XHTQ5eTg6vLo8O7i4O3o5SDn4Pjo9PDu4uDt7fv1IPTg6evu4iIKKworIzogbWFpbi5jOjI1MzkKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdENvbm5lY3QgdmltIHRvIHRoaXMgcGFydGljdWxhciBYLXNlcnZlciIKK21zZ3N0ciAiLWRpc3BsYXkgPP3q8ODtPlx0z+7k8e7l5Ojt6PL8IHZpbSDqIPPq4Ofg7e3u7PMg8eXw4uXw8yBYIgorCisjOiBtYWluLmM6MjU0MQorbXNnaWQgIi1YXHRcdFx0RG8gbm90IGNvbm5lY3QgdG8gWCBzZXJ2ZXIiCittc2dzdHIgIi1YXHRcdFx0zeUg4vvv7uvt//L8IPHu5eTo7eXt6OUg8SDx5fDi5fDu7CBYIgorCisjOiBtYWluLmM6MjU0NAorbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgaWYgcG9zc2libGUiCittc2dzdHIgIi0tcmVtb3RlIDz04Onr+z5cdM/uIOLu5+zu5u3u8fLoIPDl5ODq8ujw7uLg8vwgPPTg6ev7PiDt4CDx5fDi5fDlIFZpbSIKKworIzogbWFpbi5jOjI1NDUKK21zZ2lkICItLXJlbW90ZS1zaWxlbnQgPGZpbGVzPiAgU2FtZSwgZG9uJ3QgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm8gc2VydmVyIgorbXNnc3RyICItLXJlbW90ZS1zaWxlbnQgPPTg6ev7PiAg0u4g5uUsIO3uIOHl5yDm4Ovu4SDt4CDu8vHz8vHy4ujlIPHl8OLl8OAiCisKKyM6IG1haW4uYzoyNTQ2Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgQXMgLS1yZW1vdGUgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQiCittc2dzdHIgIiIKKyItLXJlbW90ZS13YWl0IDz04Onr+z4gINLuIOblLCD38u4g6CAtLXJlbW90ZSwg7e4g8SDu5ujk4O3o5ewg5+Di5fD45e3o/yIKKworIzogbWFpbi5jOjI1NDcKK21zZ2lkICIiCisiLS1yZW1vdGUtd2FpdC1zaWxlbnQgPGZpbGVzPiAgU2FtZSwgZG9uJ3QgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm8gc2VydmVyIgorbXNnc3RyICIiCisiLS1yZW1vdGUtd2FpdC1zaWxlbnQgPPTg6ev7PiAg0u4g5uUsIO3uIOHl5yDm4Ovu4SDt4CDu8vHz8vHy4ujlIPHl8OLl8OAiCisKKyM6IG1haW4uYzoyNTQ4Cittc2dpZCAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFNlbmQgPGtleXM+IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUtc2VuZCA86u3u7+roPlx0zvLv8ODi6PL8IDzq7e7v6ug+IO3gIPHl8OLl8CBWaW0g6CDi++ny6CIKKworIzogbWFpbi5jOjI1NDkKK21zZ2lkICItLXJlbW90ZS1leHByIDxleHByPlx0RXZhbHVhdGUgPGV4cHI+IGluIGEgVmltIHNlcnZlciBhbmQgcHJpbnQgcmVzdWx0IgorbXNnc3RyICItLXJlbW90ZS1leHByIDzi+/Dg5j5cdML79+jx6+jy/CA84vvw4OY+IO3gIPHl8OLl8OUgVmltIOgg7eDv5ffg8uDy/CIKKworIzogbWFpbi5jOjI1NTAKK21zZ2lkICItLXNlcnZlcmxpc3RcdFx0TGlzdCBhdmFpbGFibGUgVmltIHNlcnZlciBuYW1lcyBhbmQgZXhpdCIKK21zZ3N0ciAiLS1zZXJ2ZXJsaXN0XHRcdM/u6uDn4PL8IPHv6PHu6iDo7LjtIPHl8OLl8O7iIFZpbSDoIOfg4uXw+Ojy/CDw4OHu8vMiCisKKyM6IG1haW4uYzoyNTUxCittc2dpZCAiLS1zZXJ2ZXJuYW1lIDxuYW1lPlx0U2VuZCB0by9iZWNvbWUgdGhlIFZpbSBzZXJ2ZXIgPG5hbWU+IgorbXNnc3RyICIiCisiLS1zZXJ2ZXJuYW1lIDzo7P8+XHTO8u/w4OLo8vwg7eAv8fLg8vwg8eXw4uXw7uwgVmltIPEg8+rg5+Dt7fvsIDzo7OXt5ew+IgorCisjOiBtYWluLmM6MjU1NAorbXNnaWQgIi1pIDx2aW1pbmZvPlx0XHRVc2UgPHZpbWluZm8+IGluc3RlYWQgb2YgLnZpbWluZm8iCittc2dzdHIgIi1pIDx2aW1pbmZvPlx0XHTI8e/u6/zn7uLg8vwg4uzl8fLuIC52aW1pbmZvIPTg6esgPHZpbWluZm8+IgorCisjOiBtYWluLmM6MjU1NgorbXNnaWQgIi1oICBvciAgLS1oZWxwXHRQcmludCBIZWxwICh0aGlzIG1lc3NhZ2UpIGFuZCBleGl0IgorbXNnc3RyICItaCDo6+ggLS1oZWxwXHTC++Ll8fLoIPHv8ODi6vMgKP3y7iDx7u7h+eXt6OUpIOgg5+Di5fD46PL8IPDg4e7y8yIKKworIzogbWFpbi5jOjI1NTcKK21zZ2lkICItLXZlcnNpb25cdFx0UHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKK21zZ3N0ciAiLS12ZXJzaW9uXHRcdML74uXx8ugg6O307vDs4Pbo/iDuIOLl8PHo6CBWaW0g6CDn4OLl8Pjo8vwg8ODh7vLzIgorCisjOiBtYWluLmM6MjU2MQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChNb3RpZiB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIsDw4/Ps5e3y+yDk6/8gZ3ZpbSAo4uXw8ej/IE1vdGlmKTpcbiIKKworIzogbWFpbi5jOjI1NjUKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAobmVYdGF3IHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiwPDj8+zl7fL7IOTr/yBndmltICji5fDx6P8gbmVYdGF3KTpcbiIKKworIzogbWFpbi5jOjI1NjcKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoQXRoZW5hIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiwPDj8+zl7fL7IOTr/yBndmltICji5fDx6P8gQXRoZW5hKTpcbiIKKworIzogbWFpbi5jOjI1NzEKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IgorbXNnc3RyICItZGlzcGxheSA85Ojx7+vl6T5cdMfg7/Px8ujy/CB2aW0g7eAg8+rg5+Dt7e7sIDzk6PHv6+XlPiIKKworIzogbWFpbi5jOjI1NzIKK21zZ2lkICItaWNvbmljXHRcdFN0YXJ0IHZpbSBpY29uaWZpZWQiCittc2dzdHIgIi1pY29uaWNcdFx0x+Dv8/Hy6PL8IHZpbSDiIPHiuPDt8/Lu7CDi6OTlIgorCisjOiBtYWluLmM6MjU3NAorbXNnaWQgIi1uYW1lIDxuYW1lPlx0XHRVc2UgcmVzb3VyY2UgYXMgaWYgdmltIHdhcyA8bmFtZT4iCittc2dzdHIgIi1uYW1lIDzo7P8+XHRcdMjx7+7r/Ofu4uDy/CDw5fHz8PEsIOrg6iDl8evoIOH7IHZpbSDh++sgPOjs5e3l7D4iCisKKyM6IG1haW4uYzoyNTc1Cittc2dpZCAiXHRcdFx0ICAoVW5pbXBsZW1lbnRlZClcbiIKK21zZ3N0ciAiXHRcdFx0ICAozeUg8OXg6+jn7uLg7e4pXG4iCisKKyM6IG1haW4uYzoyNTc3Cittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICIiCisiLWJhY2tncm91bmQgPPbi5fI+XHTI8e/u6/zn7uLg8vwg8+rg5+Dt7fvpIDz24uXyPiDk6/8g9O7t4CAo8uDq5uU6IC1iZykiCisKKyM6IG1haW4uYzoyNTc4Cittc2dpZCAiLWZvcmVncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIG5vcm1hbCB0ZXh0IChhbHNvOiAtZmcpIgorbXNnc3RyICIiCisiLWZvcmVncm91bmQgPPbi5fI+XHTI8e/u6/zn7uLg8vwgPPbi5fI+IOTr/yDu4fv37e7j7iDy5erx8uAgKPLg6ublOiAtZmcpIgorCisjOiBtYWluLmM6MjU3OSBtYWluLmM6MjU5OQorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPPjw6PTyPlx0XHTI8e/u6/zn7uLg8vwgPPjw6PTyPiDk6/8g7uH79+3u4+4g8uXq8fLgICjy4Orm5TogLWZuKSIKKworIzogbWFpbi5jOjI1ODAKK21zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCittc2dzdHIgIi1ib2xkZm9udCA8+PDo9PI+XHTI8e/u6/zn7uLg8vwgPPjw6PTyPiDk6/8g5ujw7e7j7iDy5erx8uAiCisKKyM6IG1haW4uYzoyNTgxCittc2dpZCAiLWl0YWxpY2ZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBpdGFsaWMgdGV4dCIKK21zZ3N0ciAiLWl0YWxpY2ZvbnQgPPjw6PTyPlx0yPHv7uv85+7i4PL8IDz48Oj08j4g5Ov/IO3g6uvu7e3u4+4g8uXq8fLgIgorCisjOiBtYWluLmM6MjU4MiBtYWluLmM6MjYwMAorbXNnaWQgIi1nZW9tZXRyeSA8Z2VvbT5cdFVzZSA8Z2VvbT4gZm9yIGluaXRpYWwgZ2VvbWV0cnkgKGFsc286IC1nZW9tKSIKK21zZ3N0ciAiIgorIi1nZW9tZXRyeSA84+Xu7OXy8Oj/Plx0yPHv7uv85+7i4PL8IO3g9+Dr/O3z/iA84+Xu7OXy8Oj+PiAo8uDq5uU6IC1nZW9tKSIKKworIzogbWFpbi5jOjI1ODMKK21zZ2lkICItYm9yZGVyd2lkdGggPHdpZHRoPlx0VXNlIGEgYm9yZGVyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1idykiCittc2dzdHIgIi1ib3JkZXJ3aWR0aCA8+Ojw6O3gPlx0yPHv7uv85+7i4PL8IDz46PDo7fM+IOHu8OT+8OAgKPLg6ublOiAtYncpIgorCisjOiBtYWluLmM6MjU4NAorbXNnaWQgIi1zY3JvbGxiYXJ3aWR0aCA8d2lkdGg+ICBVc2UgYSBzY3JvbGxiYXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLXN3KSIKK21zZ3N0ciAiIgorIi1zY3JvbGxiYXJ3aWR0aCA8+Ojw6O3gPiDI8e/u6/zn7uLg8vwg+Ojw6O3zIO/u6+7x+yDv8O7q8PPy6uggKPLg6ublOiAtc3cpIgorCisjOiBtYWluLmM6MjU4NgorbXNnaWQgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHRVc2UgYSBtZW51IGJhciBoZWlnaHQgb2YgPGhlaWdodD4gKGFsc286IC1taCkiCittc2dzdHIgIi1tZW51aGVpZ2h0IDzi+/Hu8uA+XHTI8e/u6/zn7uLg8vwgPOL78e7y8z4g7OXt/iAo8uDq5uU6IC1taCkiCisKKyM6IG1haW4uYzoyNTg4IG1haW4uYzoyNjAxCittc2dpZCAiLXJldmVyc2VcdFx0VXNlIHJldmVyc2UgdmlkZW8gKGFsc286IC1ydikiCittc2dzdHIgIi1yZXZlcnNlXHRcdMjx7+7r/Ofu4uDy/CDo7eLl8PHt++kg4ujk5e7w5ebo7CAo8uDq5uU6IC1ydikiCisKKyM6IG1haW4uYzoyNTg5Cittc2dpZCAiK3JldmVyc2VcdFx0RG9uJ3QgdXNlIHJldmVyc2UgdmlkZW8gKGFsc286ICtydikiCittc2dzdHIgIityZXZlcnNlXHRcdM3lIOjx7+7r/Ofu4uDy/CDo7eLl8PHt++kg4ujk5e7w5ebo7CAo8uDq5uU6ICtydikiCisKKyM6IG1haW4uYzoyNTkwCittc2dpZCAiLXhybSA8cmVzb3VyY2U+XHRTZXQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSIKK21zZ3N0ciAiLXhybSA88OXx8/DxPlx00/Hy4O3u4ujy/CDz6uDn4O3t++kgPPDl8fPw8T4iCisKKyM6IG1haW4uYzoyNTkzCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKFJJU0MgT1MgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyLA8OPz7OXt8vsg5Ov/IGd2aW0gKOLl8PHo/yBSSVNDIE9TKTpcbiIKKworIzogbWFpbi5jOjI1OTQKK21zZ2lkICItLWNvbHVtbnMgPG51bWJlcj5cdEluaXRpYWwgd2lkdGggb2Ygd2luZG93IGluIGNvbHVtbnMiCittc2dzdHIgIi0tY29sdW1ucyA89+jx6+4+XHTP5fDi7u3g9+Dr/O3g/yD46PDo7eAg7urt4CDiIOru6+7t6uD1IgorCisjOiBtYWluLmM6MjU5NQorbXNnaWQgIi0tcm93cyA8bnVtYmVyPlx0SW5pdGlhbCBoZWlnaHQgb2Ygd2luZG93IGluIHJvd3MiCittc2dzdHIgIi0tcm93cyA89+jx6+4+XHTP5fDi7u3g9+Dr/O3g/yDi+/Hu8uAg7urt4CDiIPHy8O7q4PUiCisKKyM6IG1haW4uYzoyNTk4Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEdUSysgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyLA8OPz7OXt8vsg5Ov/IGd2aW0gKOLl8PHo/yBHVEsrKTpcbiIKKworIzogbWFpbi5jOjI2MDIKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IChhbHNvOiAtLWRpc3BsYXkpIgorbXNnc3RyICIiCisiLWRpc3BsYXkgPOTo8e/r5ek+XHTH4O/z8fLo8vwgdmltIO3gIPPq4Ofg7e3u7CA85Ojx7+vl5T4gKPLg6ublOiAtLWRpc3BsYXkpIgorCisjOiBtYWluLmM6MjYwNAorbXNnaWQgIi0tcm9sZSA8cm9sZT5cdFNldCBhIHVuaXF1ZSByb2xlIHRvIGlkZW50aWZ5IHRoZSBtYWluIHdpbmRvdyIKK21zZ3N0ciAiIgorIi0tcm9sZSA88O7r/D5cdNPx8uDt7uLo8vwg8+3o6uDr/O3z/iA88O7r/D4g5Ov/IOjk5e3y6PTo6uD26Ogg4+vg4u3u4+4g7urt4CIKKworIzogbWFpbi5jOjI2MDYKK21zZ2lkICItLXNvY2tldGlkIDx4aWQ+XHRPcGVuIFZpbSBpbnNpZGUgYW5vdGhlciBHVEsgd2lkZ2V0IgorbXNnc3RyICItLXNvY2tldGlkIDx4aWQ+XHTO8urw+/L8IFZpbSDi7fPy8Ogg5PDz4+7j7iDq7uzv7u3l7fLgIEdUSyIKKworIzogbWFpbi5jOjI2MDkKK21zZ2lkICItUCA8cGFyZW50IHRpdGxlPlx0T3BlbiBWaW0gaW5zaWRlIHBhcmVudCBhcHBsaWNhdGlvbiIKK21zZ3N0ciAiLVAgPOfg4+7r7uLu6iDw7uTo8uXr/z5cdM7y6vD78vwgVmltIOIg8O7k6PLl6/zx6u7sIO/w6Ovu5uXt6OgiCisKKyM6IG1haW4uYzoyODQ3Cittc2dpZCAiTm8gZGlzcGxheSIKK21zZ3N0ciAizeXyIOTo8e/r5f8iCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyODYyCittc2dpZCAiOiBTZW5kIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiDO8u/w4OLq4CDt5SDz5ODr4PH8LlxuIgorCisjLiBMZXQgdmltIHN0YXJ0IG5vcm1hbGx5LgorIzogbWFpbi5jOjI4NjgKK21zZ2lkICI6IFNlbmQgZmFpbGVkLiBUcnlpbmcgdG8gZXhlY3V0ZSBsb2NhbGx5XG4iCittc2dzdHIgIjogzvLv8ODi6uAg7eUg8+Tg6+Dx/C4gz+7v+/Lq4CDs5fHy7e7j7iDi++/u6+3l7ej/XG4iCisKKyM6IG1haW4uYzoyOTA2IG1haW4uYzoyOTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG9mICVkIGVkaXRlZCIKK21zZ3N0ciAi7vLw5eTg6vLo8O7i4O3uICVkIOjnICVkIgorCisjOiBtYWluLmM6Mjk0OQorbXNnaWQgIk5vIGRpc3BsYXk6IFNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIs3l8iDk6PHv6+X/OiDu8u/w4OLq4CDi+/Dg5uXt6P8g7eUg8+Tg6+Dx/C5cbiIKKworIzogbWFpbi5jOjI5NjEKK21zZ2lkICI6IFNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIjogzvLv8ODi6uAg4vvw4Obl7ej/IO3lIPPk4Ovg8fwuXG4iCisKKyM6IG1hcmsuYzo3MDkKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIs3l8iDz8fLg7e7i6+Xt7fv1IO7y7OXy7uoiCisKKyM6IG1hcmsuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MzogTm8gbWFya3MgbWF0Y2hpbmcgXCIlc1wiIgorbXNnc3RyICJFMjgzOiDN5fIg7vLs5fLu6iwg8e7i7+Dk4P756PUg8SBcIiVzXCIiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjcyMgorbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyLu8uzl8iDx8vAgIOru6yD04OnrL/Ll6vHyIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo3NjAKK21zZ2lkICIiCisiXG4iCisiIGp1bXAgbGluZSAgY29sIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIu/w++bu6iDx8vAgIOru6yD04OnrL/Ll6vHyIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo4MDUKK21zZ2lkICIiCisiXG4iCisiY2hhbmdlIGxpbmUgIGNvbCB0ZXh0IgorbXNnc3RyICIiCisiXG4iCisi6Ofs5e0uICDx8vAgIOru6yDy5erx8iIKKworIzogbWFyay5jOjEyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgRmlsZSBtYXJrczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgw+vu4eDr/O375SDu8uzl8uroOlxuIgorCisjLiBXcml0ZSB0aGUganVtcGxpc3Qgd2l0aCAtJworIzogbWFyay5jOjEzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjINHv6PHu6iDv8Pvm6u7iICjx7eD34OvgIOHu6+XlIPHi5ebo5Sk6XG4iCisKKyM6IG1hcmsuYzoxNDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjIEhpc3Rvcnkgb2YgbWFya3Mgd2l0aGluIGZpbGVzIChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgyPHy7vDo/yDs5fHy7fv1IO7y7OXy7uogKO7yIOHu6+XlIPHi5ebo9SDqIPHy4PD77Ck6XG4iCisKKyM6IG1hcmsuYzoxNTAxCittc2dpZCAiTWlzc2luZyAnPiciCittc2dzdHIgIs/w7u/z+eXt4CAnPiciCisKKyM6IG1ieXRlLmM6NDY3Cittc2dpZCAiRTU0MzogTm90IGEgdmFsaWQgY29kZXBhZ2UiCittc2dzdHIgIkU1NDM6IM3l5O7v8/Hy6Ozu5SDo7P8g6u7k6PDu4uroIgorCisjOiBtYnl0ZS5jOjQ0MzEKK21zZ2lkICJFMjg0OiBDYW5ub3Qgc2V0IElDIHZhbHVlcyIKK21zZ3N0ciAiRTI4NDogzeXi7ufs7ubt7iDt4Oft4Pfo8vwg5+3g9+Xt6P8g6u7t8uXq8fLgIOLi7uTgIgorCisjOiBtYnl0ZS5jOjQ1ODMKK21zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCittc2dzdHIgIkUyODU6IM3l4u7n7O7m7e4g8e7n5ODy/CDq7u3y5erx8iDi4u7k4CIKKworIzogbWJ5dGUuYzo0NzQxCittc2dpZCAiRTI4NjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgbWV0aG9kIgorbXNnc3RyICJFMjg2OiDN5fPk4Pft4P8g7+7v+/Lq4CDu8urw+/L8IOzl8u7kIOLi7uTgIgorCisjOiBtYnl0ZS5jOjQ3NTIKK21zZ2lkICJFMjg3OiBXYXJuaW5nOiBDb3VsZCBub3Qgc2V0IGRlc3Ryb3kgY2FsbGJhY2sgdG8gSU0iCittc2dzdHIgIiIKKyJFMjg3OiDP8OXk8+/w5ebk5e3o5Tog7eXi7ufs7ubt7iDt4Oft4Pfo8vwg7uHwLiDi++fu4iDz7ej38u7m5e3o/yDs5fLu5OAgIgorIuLi7uTgIgorCisjOiBtYnl0ZS5jOjQ3NTgKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODog7OXy7uQg4uLu5OAg7eUg7+7k5OXw5uji4OXyIPHy6OvoIgorCisjOiBtYnl0ZS5jOjQ4MTUKK21zZ2lkICJFMjg5OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IG15IHByZWVkaXQgdHlwZSIKK21zZ3N0ciAiIgorIkUyODk6IOzl8u7kIOLi7uTgIO3lIO/u5OTl8Obo4uDl8iDs7ukg8ujvIO/w5eTi4PDo8uXr/O3u4+4g8OXk4Ory6PDu4uDt6P8iCisKKyM6IG1ieXRlLmM6NDg4OQorbXNnaWQgIkUyOTA6IG92ZXItdGhlLXNwb3Qgc3R5bGUgcmVxdWlyZXMgZm9udHNldCIKK21zZ3N0ciAiRTI5MDog8fLo6/wgXCLt4OQg7OXx8u7sXCIg8vDl4fPl8iDz6uDn4O3o/yD48Oj08u7i7uPuIO3g4e7w4CIKKworIzogbWJ5dGUuYzo0OTI1Cittc2dpZCAiRTI5MTogWW91ciBHVEsrIGlzIG9sZGVyIHRoYW4gMS4yLjMuIFN0YXR1cyBhcmVhIGRpc2FibGVkIgorbXNnc3RyICIiCisiRTI5MTogR1RLKyDh7uvl5SDw4O3t5ekg4uXw8ejoLCD35ewgMS4yLjMuIM7h6+Dx8vwg8e7x8u7/7ej/IO3lIPDg4e7y4OXyLiIKKworIzogbWJ5dGUuYzo1MjMyCittc2dpZCAiRTI5MjogSW5wdXQgTWV0aG9kIFNlcnZlciBpcyBub3QgcnVubmluZyIKK21zZ3N0ciAiRTI5Mjog0eXw4uXwIOzl8u7k4CDi4u7k4CDt5SDn4O/z+eXtIgorCisjOiBtZW1maWxlLmM6NDg4Cittc2dpZCAiRTI5MzogYmxvY2sgd2FzIG5vdCBsb2NrZWQiCittc2dzdHIgIkUyOTM6IOHr7uog7eUg5+Dh6+7q6PDu4uDtIgorCisjOiBtZW1maWxlLmM6MTAwNQorbXNnaWQgIkUyOTQ6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHJlYWQiCittc2dzdHIgIkUyOTQ6IM746OHq4CDv7ujx6uAg7/DoIPfy5e3o6CDx4u7vLfTg6evgIgorCisjOiBtZW1maWxlLmM6MTAxMAorbXNnaWQgIkUyOTU6IFJlYWQgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk1OiDO+Ojh6uAg9/Ll7ej/IPHi7u8t9ODp6+AiCisKKyM6IG1lbWZpbGUuYzoxMDYyCittc2dpZCAiRTI5NjogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgd3JpdGUiCittc2dzdHIgIkUyOTY6IM746OHq4CDv7ujx6uAg7/DoIOfg7+jx6CDx4u7vLfTg6evgIgorCisjOiBtZW1maWxlLmM6MTA4MAorbXNnaWQgIkUyOTc6IFdyaXRlIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5Nzogzvjo4ergIO/w6CDn4O/o8egg8eLu7y304Onr4CIKKworIzogbWVtZmlsZS5jOjEyNzcKK21zZ2lkICJFMzAwOiBTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMgKHN5bWxpbmsgYXR0YWNrPykiCittc2dzdHIgIiIKKyJFMzAwOiDR4u7vLfTg6esg8+blIPHz+eXx8uLz5fIgKODy4OrgIPEg6PHv7uv85+7i4O3o5ewg8ejs4u7r/O3u6SDx8fvr6ug/KSIKKworIzogbWVtbGluZS5jOjI3NQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMD8iCittc2dzdHIgIkUyOTg6IM3lIO/u6/P35e0g4evu6iDt7uzl8CAwPyIKKworIzogbWVtbGluZS5jOjMxNQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMT8iCittc2dzdHIgIkUyOTg6IM3lIO/u6/P35e0g4evu6iDt7uzl8CAxPyIKKworIzogbWVtbGluZS5jOjMzMworbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMj8iCittc2dzdHIgIkUyOTg6IM3lIO/u6/P35e0g4evu6iDt7uzl8CAyPyIKKworIy4gY291bGQgbm90IChyZSlvcGVuIHRoZSBzd2FwIGZpbGUsIHdoYXQgY2FuIHdlIGRvPz8/PworIzogbWVtbGluZS5jOjQ0MworbXNnaWQgIkUzMDE6IE9vcHMsIGxvc3QgdGhlIHN3YXAgZmlsZSEhISIKK21zZ3N0ciAiRTMwMTogzuksIO/u8uXw/+vx/yDx4u7vLfTg6eshISEiCisKKyM6IG1lbWxpbmUuYzo0NDgKK21zZ2lkICJFMzAyOiBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwMjogzeXi7ufs7ubt7iDv5fDl6Ozl7e7i4PL8IPHi7u8t9ODp6yIKKworIzogbWVtbGluZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIKK21zZ3N0ciAiIgorIkUzMDM6IM3lIPPk4Ovu8fwg7vLq8Pvy/CDx4u7vLfTg6esg5Ov/IFwiJXNcIiwg4u7x8fLg7e7i6+Xt6OUg7eXi7ufs7ubt7iIKKworIzogbWVtbGluZS5jOjYxNworbXNnaWQgIkUzMDQ6IG1sX3RpbWVzdGFtcDogRGlkbid0IGdldCBibG9jayAwPz8iCittc2dzdHIgIkUzMDQ6IG1sX3RpbWVzdGFtcDogzeUg7+7r8/fl7SDh6+7qIDA/PyIKKworIzogbWVtbGluZS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA1OiBObyBzd2FwIGZpbGUgZm91bmQgZm9yICVzIgorbXNnc3RyICJFMzA1OiDR4u7vLfTg6esg5Ov/ICVzIO3lIO3g6eTl7SIKKworIzogbWVtbGluZS5jOjc2NworbXNnaWQgIkVudGVyIG51bWJlciBvZiBzd2FwIGZpbGUgdG8gdXNlICgwIHRvIHF1aXQpOiAiCittc2dzdHIgIiIKKyLC4uXk6PLlIO3u7OXwIPHi7u8t9ODp6+AsIOru8u7w++kg8evl5PPl8iDo8e/u6/zn7uLg8vwgKDAg5Ov/IOL79e7k4Ck6ICIKKworIzogbWVtbGluZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA2OiBDYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiRTMwNjogzeUg7O7j8yDu8urw+/L8ICVzIgorCisjOiBtZW1saW5lLmM6ODM0Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgYmxvY2sgMCBmcm9tICIKK21zZ3N0ciAizeXi7ufs7ubt7iDv8O736PLg8vwg4evu6iAwIOjnICIKKworIzogbWVtbGluZS5jOjgzNworbXNnaWQgIiIKKyJcbiIKKyJNYXliZSBubyBjaGFuZ2VzIHdlcmUgbWFkZSBvciBWaW0gZGlkIG5vdCB1cGRhdGUgdGhlIHN3YXAgZmlsZS4iCittc2dzdHIgIiIKKyJcbiIKKyLN5fIg6Ofs5e3l7ejpLCDo6+ggVmltIO3lIPHs7uMg7uHt7uLo8vwg8eLu7y304OnrIgorCisjOiBtZW1saW5lLmM6ODQ3IG1lbWxpbmUuYzo4NjQKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltLlxuIgorbXNnc3RyICIg7eXr/Of/IOjx7+7r/Ofu4uDy/CDiIOTg7e3u6SDi5fDx6OggVmltLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAiyPHv7uv85/Pp8uUgVmltIOLl8PHo6CAzLjAuXG4iCisKKyM6IG1lbWxpbmUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNzogJXMgZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwNzogJXMg7eUg/+Lr/+Xy8f8g8eLu7y304Onr7uwgVmltIgorCisjOiBtZW1saW5lLmM6ODY4Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIG9uIHRoaXMgY29tcHV0ZXIuXG4iCittc2dzdHIgIiDt5ev85/8g6PHv7uv85+7i4PL8IO3gIP3y7uwg6u7s7/z+8uXw5S5cbiIKKworIzogbWVtbGluZS5jOjg3MAorbXNnaWQgIlRoZSBmaWxlIHdhcyBjcmVhdGVkIG9uICIKK21zZ3N0ciAi1ODp6yDh++sg8e7n5ODtICIKKworIzogbWVtbGluZS5jOjg3NAorbXNnaWQgIiIKKyIsXG4iCisib3IgdGhlIGZpbGUgaGFzIGJlZW4gZGFtYWdlZC4iCittc2dzdHIgIiIKKyIsXG4iCisi6+jh7iD04OnrIOH76yDv7uLw5ebkuO0uIgorCisjOiBtZW1saW5lLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHN3YXAgZmlsZSBcIiVzXCIiCittc2dzdHIgIsjx7+7r/Ofz5fLx/yDx4u7vLfTg6esgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk9yaWdpbmFsIGZpbGUgXCIlc1wiIgorbXNnc3RyICLI8fXu5O376SD04OnrIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkyMgorbXNnaWQgIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIgorbXNnc3RyICJFMzA4OiDP8OXk8+/w5ebk5e3o5Tog6PH17uTt++kg9ODp6yDs7uMg4fvy/CDo5+zl7bjtIgorCisjOiBtZW1saW5lLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDk6IFVuYWJsZSB0byByZWFkIGJsb2NrIDEgZnJvbSAlcyIKK21zZ3N0ciAiRTMwOTogzeXi7ufs7ubt7iDv8O736PLg8vwg4evu6iAxIOjnICVzIgorCisjOiBtZW1saW5lLmM6OTc5Cittc2dpZCAiPz8/TUFOWSBMSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz/O0tHT0tHSwtPF0iDMzc7DziDR0tDOyiIKKworIzogbWVtbGluZS5jOjk5NQorbXNnaWQgIj8/P0xJTkUgQ09VTlQgV1JPTkciCittc2dzdHIgIj8/P83Fz9DAwsjL3M3OxSDHzcDXxc3IxSDR18XS18jKwCDR0tDOyiIKKworIzogbWVtbGluZS5jOjEwMDIKK21zZ2lkICI/Pz9FTVBUWSBCTE9DSyIKK21zZ3N0ciAiPz8/z9PR0s7JIMHLzsoiCisKKyM6IG1lbWxpbmUuYzoxMDI4Cittc2dpZCAiPz8/TElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/ztLR09LR0sLT3tIg0dLQzsrIIgorCisjOiBtZW1saW5lLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzEwOiBCbG9jayAxIElEIHdyb25nICglcyBub3QgYSAuc3dwIGZpbGU/KSIKK21zZ3N0ciAiRTMxMDog7eXv8ODi6Ov87fvpIOHr7uogMSBJRCAoJXMg7eUg/+Lr/+Xy8f8g9ODp6+7sIC5zd3A/KSIKKworIzogbWVtbGluZS5jOjEwNjUKK21zZ2lkICI/Pz9CTE9DSyBNSVNTSU5HIgorbXNnc3RyICI/Pz/P0M7P09nFzSDBy87KIgorCisjOiBtZW1saW5lLmM6MTA4MQorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBiZSBtZXNzZWQgdXAiCittc2dzdHIgIj8/P/Hy8O7q6CDs7uPz8iDh+/L8IOjx7+7w9+Xt+yDu8vH+5OAg5O4gPz8/ys7N1sAiCisKKyM6IG1lbWxpbmUuYzoxMDk3Cittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGhhdmUgYmVlbiBpbnNlcnRlZC9kZWxldGVkIgorbXNnc3RyICI/Pz/x8vDu6ugg7O7j6+gg4fvy/CDi8fLg4uvl7fsg6OvoIPPk4Ovl7fsg7vLx/uTgIOTuID8/P8rOzdbAIgorCisjOiBtZW1saW5lLmM6MTExNworbXNnaWQgIj8/P0VORCIKK21zZ3N0ciAiPz8/ys7NxdYiCisKKyM6IG1lbWxpbmUuYzoxMTQzCittc2dpZCAiRTMxMTogUmVjb3ZlcnkgSW50ZXJydXB0ZWQiCittc2dzdHIgIkUzMTE6IMLu8fHy4O3u4uvl7ejlIO/w5fDi4O3uIgorCisjOiBtZW1saW5lLmM6MTE0OAorbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIiIKKyJFMzEyOiDC7iDi8OXs/yDi7vHx8uDt7uLr5e3o/yDu4e3g8PPm5e37IO746OHq6Dsg8ewuIPHy8O7q6Cwg7eD36O3g/vno5fH/ICIKKyLxID8/PyIKKworIzogbWVtbGluZS5jOjExNTAKK21zZ2lkICJTZWUgXCI6aGVscCBFMzEyXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICLR7C4g5O7v7uvt6PLl6/zt8/4g6O307vDs4Pbo/iDiIPHv8ODi7vft6OrlIChcIjpoZWxwIEUzMTJcIikiCisKKyM6IG1lbWxpbmUuYzoxMTU1Cittc2dpZCAiUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIgorbXNnc3RyICLC7vHx8uDt7uLr5e3o5SDn4OLl8Pjl7e4uIM/w7uLl8Pzy5Swg4vG4IOvoIOIg7+7w/+Tq5S4iCisKKyM6IG1lbWxpbmUuYzoxMTU2Cittc2dpZCAiIgorIlxuIgorIihZb3UgbWlnaHQgd2FudCB0byB3cml0ZSBvdXQgdGhpcyBmaWxlIHVuZGVyIGFub3RoZXIgbmFtZVxuIgorbXNnc3RyICIiCisiXG4iCisiKMzu5uXy5SDn4O/o8eDy/CD04OnrIO/u5CDk8PPj6Owg6Ozl7eXsIOgg8fDg4u3o8vwg5ePuIPEg6PH17uTt++xcbiIKKworIzogbWVtbGluZS5jOjExNTcKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAi9ODp6+7sIO/w6CDv7uzu+egg7/Du4/Dg7Oz7IGRpZmYpLlxuIgorCisjOiBtZW1saW5lLmM6MTE1OAorbXNnaWQgIiIKKyJEZWxldGUgdGhlIC5zd3AgZmlsZSBhZnRlcndhcmRzLlxuIgorIlxuIgorbXNnc3RyICIiCisix+Dy5ewg8+Tg6+jy5SD04OnrIC5zd3AuXG4iCisiXG4iCisKKyMuIHVzZSBtc2coKSB0byBzdGFydCB0aGUgc2Nyb2xsaW5nIHByb3Blcmx5CisjOiBtZW1saW5lLmM6MTIxNAorbXNnaWQgIlN3YXAgZmlsZXMgZm91bmQ6IgorbXNnc3RyICLO4e3g8PPm5e37IPHi7u8t9ODp6/s6IgorCisjOiBtZW1saW5lLmM6MTM5MgorbXNnaWQgIiAgIEluIGN1cnJlbnQgZGlyZWN0b3J5OlxuIgorbXNnc3RyICIgICDCIPLl6vP55ewg6uDy4Ovu4+U6XG4iCisKKyM6IG1lbWxpbmUuYzoxMzk0Cittc2dpZCAiICAgVXNpbmcgc3BlY2lmaWVkIG5hbWU6XG4iCittc2dzdHIgIiAgINEg8+rg5+Dt7fvsIOjs5e3l7DpcbiIKKworIzogbWVtbGluZS5jOjEzOTgKK21zZ2lkICIgICBJbiBkaXJlY3RvcnkgIgorbXNnc3RyICIgICDCIOrg8uDr7uPlICAgIgorCisjOiBtZW1saW5lLmM6MTQxNgorbXNnaWQgIiAgICAgIC0tIG5vbmUgLS1cbiIKK21zZ3N0ciAiICAgICAgLS0g7eXyIC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDg4Cittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgICAgICDi6+Dk5evl9jogIgorCisjOiBtZW1saW5lLmM6MTQ5MAorbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgICDk4PLgOiAiCisKKyM6IG1lbWxpbmUuYzoxNDk0IG1lbWxpbmUuYzozNjg0Cittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICAg5ODy4DogIgorCisjOiBtZW1saW5lLmM6MTUxMAorbXNnaWQgIiAgICAgICAgIFtmcm9tIFZpbSB2ZXJzaW9uIDMuMF0iCittc2dzdHIgIiAgICAgICAgIFvu8iBWaW0g4uXw8ejoIDMuMF0iCisKKyM6IG1lbWxpbmUuYzoxNTE0Cittc2dpZCAiICAgICAgICAgW2RvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGVdIgorbXNnc3RyICIgICAgICAgICBb7eUg/+Lr/+Xy8f8g8eLu7y304Onr7uwgVmltXSIKKworIzogbWVtbGluZS5jOjE1MTgKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgICAg6Oz/IPTg6evgOiAiCisKKyM6IG1lbWxpbmUuYzoxNTI0Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgICBtb2RpZmllZDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgICDo5+zl7bjtOiAiCisKKyM6IG1lbWxpbmUuYzoxNTI1Cittc2dpZCAiWUVTIgorbXNnc3RyICLEwCIKKworIzogbWVtbGluZS5jOjE1MjUKK21zZ2lkICJubyIKK21zZ3N0ciAi7eXyIgorCisjOiBtZW1saW5lLmM6MTUyOQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICB1c2VyIG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgIO/u6/zn7uLg8uXr/DogIgorCisjOiBtZW1saW5lLmM6MTUzNgorbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgIOru7O/8/vLl8DogIgorCisjOiBtZW1saW5lLmM6MTUzOAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIOru7O/8/vLl8DogIgorCisjOiBtZW1saW5lLmM6MTU0NAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICAg7/Du9uXx8TogIgorCisjOiBtZW1saW5lLmM6MTU1MAorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAo5fm4IOL77+7r7f/l8vH/KSIKKworIzogbWVtbGluZS5jOjE1NjIKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFvt5SDv8Ojj7uTl7SDk6/8g6PHv7uv85+7i4O3o/yDxIOTg7e3u6SDi5fDx6OXpIFZpbV0iCisKKyM6IG1lbWxpbmUuYzoxNTY1Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIG9uIHRoaXMgY29tcHV0ZXJdIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgW+3lIO/w6OPu5OXtIOTr/yDo8e/u6/zn7uLg7ej/IO3gIP3y7uwg6u7s7/z+8uXw5V0iCisKKyM6IG1lbWxpbmUuYzoxNTcwCittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSByZWFkXSIKK21zZ3N0ciAiICAgICAgICAgW+3lIPfo8uDl8vH/XSIKKworIzogbWVtbGluZS5jOjE1NzQKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIG9wZW5lZF0iCittc2dzdHIgIiAgICAgICAgIFvt5SDu8urw++Lg5fLx/10iCisKKyM6IG1lbWxpbmUuYzoxNzY0Cittc2dpZCAiRTMxMzogQ2Fubm90IHByZXNlcnZlLCB0aGVyZSBpcyBubyBzd2FwIGZpbGUiCittc2dzdHIgIkUzMTM6IM3l4u7n7O7m7e4g7uHt7uLo8vwg8eLu7y304OnrLCDv7vHq7uv86vMg7u0g7eUg7uHt4PDz5uXtIgorCisjOiBtZW1saW5lLmM6MTgxNworbXNnaWQgIkZpbGUgcHJlc2VydmVkIgorbXNnc3RyICLR4u7vLfTg6esg7uHt7uLruO0iCisKKyM6IG1lbWxpbmUuYzoxODE5Cittc2dpZCAiRTMxNDogUHJlc2VydmUgZmFpbGVkIgorbXNnc3RyICJFMzE0OiDN5fPk4Pft4P8g7+7v+/Lq4CDu4e3u4uvl7ej/IPHi7u8t9ODp6+AiCisKKyM6IG1lbWxpbmUuYzoxODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTU6IG1sX2dldDogaW52YWxpZCBsbnVtOiAlbGQiCittc2dzdHIgIkUzMTU6IG1sX2dldDog7eXv8ODi6Ov87e7lIOft4Pfl7ejlIGxudW06ICVsZCIKKworIzogbWVtbGluZS5jOjE5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNjogbWxfZ2V0OiBjYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMxNjogbWxfZ2V0OiDt5eLu5+zu5u3uIO3g6fLoIPHy8O7q8yAlbGQiCisKKyM6IG1lbWxpbmUuYzoyMzA2Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAzIgorbXNnc3RyICLt5e/w4OLo6/zt7uUg5+3g9+Xt6OUg8+rg5+Dy5ev/IOHr7urgIDMiCisKKyM6IG1lbWxpbmUuYzoyMzg2Cittc2dpZCAic3RhY2tfaWR4IHNob3VsZCBiZSAwIgorbXNnc3RyICLn7eD35e3o5SBzdGFja19pZHgg5O7r5u3uIOH78vwg8ODi7e4gMCIKKworIzogbWVtbGluZS5jOjI0NDgKK21zZ2lkICJFMzE4OiBVcGRhdGVkIHRvbyBtYW55IGJsb2Nrcz8iCittc2dzdHIgIkUzMTg6IM7h7e7i6+Xt7iDx6+j46u7sIOzt7uPuIOHr7uru4j8iCisKKyM6IG1lbWxpbmUuYzoyNjMwCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiDt5e/w4OLo6/zt7uUg5+3g9+Xt6OUg8+rg5+Dy5ev/IOHr7urgIDQiCisKKyM6IG1lbWxpbmUuYzoyNjU3Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAi8+Tg67jtIOHr7uogMT8iCisKKyM6IG1lbWxpbmUuYzoyODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjA6IENhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzIwOiDR8vDu6uAgJWxkIO3lIO7h7eDw8+bl7eAiCisKKyM6IG1lbWxpbmUuYzozMTAwCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyIKK21zZ3N0ciAiRTMxNzog7eXv8ODi6Ov87e7lIOft4Pfl7ejlIPPq4Ofg8uXr/yDh6+7q4CIKKworIzogbWVtbGluZS5jOjMxMTYKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgIuft4Pfl7ejlIHBlX2xpbmVfY291bnQg8ODi7e4g7fPr/iIKKworIzogbWVtbGluZS5jOjMxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMjogbGluZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlbGQgcGFzdCB0aGUgZW5kIgorbXNnc3RyICJFMzIyOiDt7uzl8CDx8vDu6ugg5+Ag7/Dl5OXr4OzoIOTo4O/g5+7t4DogJWxkIgorCisjOiBtZW1saW5lLmM6MzE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIzOiBsaW5lIGNvdW50IHdyb25nIGluIGJsb2NrICVsZCIKK21zZ3N0ciAiRTMyMzog7eXv8ODi6Ov87e7lIOft4Pfl7ejlIPH3uPL36OrgIPHy8O7qIOIg4evu6uUgJWxkIgorCisjOiBtZW1saW5lLmM6MzE5OAorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICLQ4Ofs5fAg8fLl6uAg8+Ll6+j35e0iCisKKyM6IG1lbWxpbmUuYzozMjQ0Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAyIgorbXNnc3RyICJFMzE3OiDt5e/w4OLo6/zt7uUg5+3g9+Xt6OUg8+rg5+Dy5ev/IOHr7urgIDIiCisKKyM6IG1lbWxpbmUuYzozNjc0Cittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiDCzcjMwM3IxSIKKworIzogbWVtbGluZS5jOjM2NzUKK21zZ2lkICIiCisiXG4iCisiRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgXCIiCittc2dzdHIgIiIKKyJcbiIKKyLO4e3g8PPm5e0g8eLu7y304OnrIPEg6Ozl7eXsIFwiIgorCisjOiBtZW1saW5lLmM6MzY3OQorbXNnaWQgIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIKK21zZ3N0ciAiz/DoIO7y6vD78ujoIPTg6evgOiBcIiIKKworIzogbWVtbGluZS5jOjM2ODgKK21zZ2lkICIgICAgICBORVdFUiB0aGFuIHN3YXAgZmlsZSFcbiIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICDB7uvl5SDRwsXGyMksIPfl7CDx4u7vLfTg6eshXG4iCisKKyMuIFNvbWUgb2YgdGhlc2UgbWVzc2FnZXMgYXJlIGxvbmcgdG8gYWxsb3cgdHJhbnNsYXRpb24gdG8KKyMuICogb3RoZXIgbGFuZ3VhZ2VzLgorIzogbWVtbGluZS5jOjM2OTIKK21zZ2lkICIiCisiXG4iCisiKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLlxuIgorIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d29cbiIKKyIgICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMSkgwu7n7O7m7e4sIPDl5ODq8ujw7uLg7ejlIPTg6evgIOL77+7r7f/l8vH/IOIg5PDz4+7pIO/w7uPw4Ozs5S5cbiIKKyIgICAgxfHr6CD98u4g8uDqLCDy7iDh8+T88uUg4u3o7ODy5ev87fsg7/DoIOLt5fHl7ejoIOjn7OXt5e3o6SxcbiIKKyIgICAg9/Lu4fsg8yDi4PEg7eUg7+7/4ujr7vH8IOTi4CDw4Oft+/Ug4uDw6ODt8uAg7uTt7uPuIOgg8u7j7iDm5SD04Onr4C5cbiIKKworIzogbWVtbGluZS5jOjM2OTMKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgx+Di5fD46PLlIPDg4e7y8yDo6+gg7/Du5O7r5uDp8uUg8SDu8fLu8O7m7e7x8vz+LlxuIgorCisjOiBtZW1saW5lLmM6MzY5NAorbXNnaWQgIiIKKyJcbiIKKyIoMikgQW4gZWRpdCBzZXNzaW9uIGZvciB0aGlzIGZpbGUgY3Jhc2hlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigyKSDP8OXk++Tz+ejpIPHl4O3xIPDl5ODq8ujw7uLg7ej/IP3y7uPuIPTg6evgIOfg4uXw+LjtIODi4PDo6e3uLlxuIgorCisjOiBtZW1saW5lLmM6MzY5NQorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIMIg/fLu7CDx6/P34OUsIOjx7+7r/Ofz6fLlIOru7ODt5PMgXCI6cmVjb3ZlclwiIOjr6CBcInZpbSAtciAiCisKKyM6IG1lbWxpbmUuYzozNjk3Cittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAg5Ov/IOLu8fHy4O3u4uvl7ej/IOjn7OXt5e3o6SAo8ewuIFwiOmhlbHAg4u7x8fLg7e7i6+Xt6OVcIikuXG4iCisKKyM6IG1lbWxpbmUuYzozNjk4Cittc2dpZCAiICAgIElmIHlvdSBkaWQgdGhpcyBhbHJlYWR5LCBkZWxldGUgdGhlIHN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiICAgIMXx6+gg4vsg8+blIOL77+7r7f/r6CD98vMg7u/l8OD26P4sIPPk4Ovo8uUg8eLu7y304OnrIFwiIgorCisjOiBtZW1saW5lLmM6MzcwMAorbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byBhdm9pZCB0aGlzIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICD38u7h+yDo5+Hl5uDy/CDv7v/i6+Xt6P8g/fLu4+4g8e7u4fnl7ej/IOIg4fPk8/nl7C5cbiIKKworIzogbWVtbGluZS5jOjM3MTQgbWVtbGluZS5jOjM3MTgKK21zZ2lkICJTd2FwIGZpbGUgXCIiCittc2dzdHIgItHi7u8t9ODp6yBcIiIKKworIzogbWVtbGluZS5jOjM3MTUgbWVtbGluZS5jOjM3MjEKK21zZ2lkICJcIiBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlwiIPPm5SDx8/nl8fLi8+XyISIKKworIzogbWVtbGluZS5jOjM3MjQKK21zZ2lkICJWSU0gLSBBVFRFTlRJT04iCittc2dzdHIgIlZJTSAtIMLNyMzAzcjFIgorCisjOiBtZW1saW5lLmM6MzcyNgorbXNnaWQgIlN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgItHi7u8t9ODp6yDz5uUg8fP55fHy4vPl8iEiCisKKyM6IG1lbWxpbmUuYzozNzMwCittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImQWJvcnQiCittc2dzdHIgIiIKKyImTyDO8urw+/L8IOTr/yD38uXt6P9cbiIKKyImRSDQ5eTg6vLo8O7i4PL8XG4iCisiJlIgwu7x8fLg7e7i6PL8XG4iCisiJlEgwvv17uRcbiIKKyImQSDP8OXw4uDy/CIKKworIzogbWVtbGluZS5jOjM3MzIKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZBYm9ydFxuIgorIiZEZWxldGUgaXQiCittc2dzdHIgIiIKKyImTyDO8urw+/L8IOTr/yD38uXt6P9cbiIKKyImRSDQ5eTg6vLo8O7i4PL8XG4iCisiJlIgwu7x8fLg7e7i6PL8XG4iCisiJlEgwvv17uRcbiIKKyImQSDP8OXw4uDy/FxuIgorIiZEINPk4Ovo8vwiCisKKyM6IG1lbWxpbmUuYzozNzg5Cittc2dpZCAiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIKK21zZ3N0ciAiRTMyNjogzuHt4PDz5uXt7iDx6+j46u7sIOzt7uPuIPHi7u8t9ODp6+7iIgorCisjOiBtZW51LmM6NjQKK21zZ2lkICJFMzI3OiBQYXJ0IG9mIG1lbnUtaXRlbSBwYXRoIGlzIG5vdCBzdWItbWVudSIKK21zZ3N0ciAiRTMyNzogyu7s7+7t5e3yIO/z8ugg6iD96+Xs5e3y8yDs5e3+IO3lIP/i6//l8vH/IO/u5Ozl7f4iCisKKyM6IG1lbnUuYzo2NQorbXNnaWQgIkUzMjg6IE1lbnUgb25seSBleGlzdHMgaW4gYW5vdGhlciBtb2RlIgorbXNnc3RyICJFMzI4OiDM5e3+IOIg/fLu7CDw5ebo7OUg7eUg8fP55fHy4vPl8iIKKworIzogbWVudS5jOjY2Cittc2dpZCAiRTMyOTogTm8gbWVudSBvZiB0aGF0IG5hbWUiCittc2dzdHIgIkUzMjk6IM3l8iDs5e3+IPEg8uDq6Owg6Ozl7eXsIgorCisjOiBtZW51LmM6NTI1Cittc2dpZCAiRTMzMDogTWVudSBwYXRoIG11c3Qgbm90IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzMDogz/Py/CDqIOzl7f4g7eUg5O7r5uXtIOLl8fLoIOog7+7k7OXt/iIKKworIzogbWVudS5jOjU2NAorbXNnaWQgIkUzMzE6IE11c3Qgbm90IGFkZCBtZW51IGl0ZW1zIGRpcmVjdGx5IHRvIG1lbnUgYmFyIgorbXNnc3RyICJFMzMxOiDd6+Xs5e3y+yDs5e3+IO3l6/zn/yDk7uHg4uv/8vwg7eXv7vHw5eTx8uLl7e3uIOIg7+7r7vHq8yDs5e3+IgorCisjOiBtZW51LmM6NTcwCittc2dpZCAiRTMzMjogU2VwYXJhdG9yIGNhbm5vdCBiZSBwYXJ0IG9mIGEgbWVudSBwYXRoIgorbXNnc3RyICJFMzMyOiDQ4Ofk5evo8uXr6CDt5SDs7uPz8iDh+/L8IOru7O/u7eXt8u7sIO/z8ugg6iDs5e3+IgorCisjLiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgbWVudSwgYW5kIHdlIGxpc3QgdGhlIG1hcHBpbmdzCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1lbnUuYzoxMDk3Cittc2dpZCAiIgorIlxuIgorIi0tLSBNZW51cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gzOXt/iAtLS0iCisKKyM6IG1lbnUuYzoyMDE5Cittc2dpZCAiVGVhciBvZmYgdGhpcyBtZW51IgorbXNnc3RyICLO8u7w4uDy/CD98u4g7OXt/iIKKworIzogbWVudS5jOjIwODQKK21zZ2lkICJFMzMzOiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgbWVudSBpdGVtIgorbXNnc3RyICJFMzMzOiDP8/L8IOog7OXt/iDk7uvm5e0g4uXx8ugg6iD96+Xs5e3y8yDs5e3+IgorCisjOiBtZW51LmM6MjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzM0OiBNZW51IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUzMzQ6IMzl7f4g7eUg7eDp5OXt7jogJXMiCisKKyM6IG1lbnUuYzoyMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzU6IE1lbnUgbm90IGRlZmluZWQgZm9yICVzIG1vZGUiCittc2dzdHIgIkUzMzU6IMzl7f4g7eUg7u/w5eTl6+Xt7iDk6/8g8OXm6OzgICVzIgorCisjOiBtZW51LmM6MjIxMQorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogz/Py/CDqIOzl7f4g5O7r5uXtIOLl8fLoIOog7+7k7OXt/iIKKworIzogbWVudS5jOjIyMzIKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IMzl7f4g7eUg7eDp5OXt7iAtLSDv8O7i5fD88uUg6Ozl7eAg7OXt/iIKKworIzogbWVzc2FnZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlY3RlZCB3aGlsZSBwcm9jZXNzaW5nICVzOiIKK21zZ3N0ciAizuHt4PDz5uXt4CDu+Ojh6uAg7/DoIO7h8ODh7vLq5SAlczoiCisKKyM6IG1lc3NhZ2UuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlNGxkOiIKK21zZ3N0ciAi8fLw7urgICU0bGQ6IgorCisjOiBtZXNzYWdlLmM6NjQ3Cittc2dpZCAiW3N0cmluZyB0b28gbG9uZ10iCittc2dzdHIgIlvx6+j46u7sIOTr6O3t4P8g8fLw7urgXSIKKworIzogbWVzc2FnZS5jOjc5NworbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorbXNnc3RyICIiCisiz+Xw5eLu5CDx7u7h+eXt6Okg7eAg8PPx8ero6SD/5/vqOiDC4PHo6+jpINDg4+7n6O0gPHZyckB1c2Vycy5zb3VyY2Vmb3JnZS4iCisibmV0PiIKKworIzogbWVzc2FnZS5jOjEwMjUKK21zZ2lkICJJbnRlcnJ1cHQ6ICIKK21zZ3N0ciAiz/Dl8Pvi4O3o5TogIgorCisjOiBtZXNzYWdlLmM6MTAyOAorbXNnaWQgIkhpdCBFTlRFUiB0byBjb250aW51ZSIKK21zZ3N0ciAixOv/IO/w7uTu6+bl7ej/IO3g5uzo8uUgRU5URVIiCisKKyM6IG1lc3NhZ2UuYzoxMDMwCittc2dpZCAiSGl0IEVOVEVSIG9yIHR5cGUgY29tbWFuZCB0byBjb250aW51ZSIKK21zZ3N0ciAixOv/IO/w7uTu6+bl7ej/IO3g5uzo8uUgRU5URVIg6OvoIOLi5eTo8uUg6u7s4O3k8yIKKworIzogbWVzc2FnZS5jOjIzNTEKK21zZ2lkICItLSBNb3JlIC0tIgorbXNnc3RyICItLSDP8O7k7uvm5e3o5SDx6+Xk8+XyIC0tIgorCisjOiBtZXNzYWdlLmM6MjM1NAorbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiDx8vDu6uAsIFNQQUNFL2I6IPHy8ODt6PbgLCBkL3U6IO/u6/Hy8ODt6Pb7LCBxOiDi+/Xu5CkiCisKKyM6IG1lc3NhZ2UuYzoyMzU1Cittc2dpZCAiIChSRVQ6IGxpbmUsIFNQQUNFOiBwYWdlLCBkOiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVDog8fLw7urgLCBTUEFDRTog8fLw4O3o9uAsIGQ6IO/u6/Hy8ODt6Pb7LCBxOiDi+/Xu5CkiCisKKyM6IG1lc3NhZ2UuYzoyOTc2IG1lc3NhZ2UuYzoyOTkxCittc2dpZCAiUXVlc3Rpb24iCittc2dzdHIgIsLu7/Du8SIKKworIzogbWVzc2FnZS5jOjI5NzgKK21zZ2lkICIiCisiJlllc1xuIgorIiZObyIKK21zZ3N0ciAiIgorIibE4FxuIgorIibN5fIiCisKKyM6IG1lc3NhZ2UuYzozMDExCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyJTYXZlICZBbGxcbiIKKyImRGlzY2FyZCBBbGxcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJsTgXG4iCisiJs3l8lxuIgorItHu9fDg7ejy/CAm4vHlXG4iCisiJs/u8uXw//L8IOLx5VxuIgorIs4m8uzl7eAiCisKKyM6IG1lc3NhZ2UuYzozMDUyCittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAi0e718ODt5e3o5SD04Onr4CIKKworIzogbWVzc2FnZS5jOjMwNTQKK21zZ2lkICJPcGVuIEZpbGUgZGlhbG9nIgorbXNnc3RyICLO8urw+/Lo5SD04Onr4CIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzozMTI1Cittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIiIKKyJFMzM4OiDI5+Lo7ejy5Swg7e4g4iDq7u3x7uv87e7sIPDl5ujs5SDt5fIg7/Du4u7k7ejq4CDv7iD04Onr7uLu6SDx6PHy5ezlIgorCisjOiBtaXNjMS5jOjI3NzMKK21zZ2lkICJXMTA6IFdhcm5pbmc6IENoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSIKK21zZ3N0ciAiVzEwOiDP8OXk8+/w5ebk5e3o5TogyOfs5e3l7ejlIPTg6evgIPEg7/Dg4uDs6CDy7uv86u4g5Ov/IPfy5e3o/yIKKworIzogbWlzYzEuYzozMDIxCittc2dpZCAiMSBtb3JlIGxpbmUiCittc2dzdHIgIsTu4eDi6+Xt4CDu5O3gIPHy8O7q4CIKKworIzogbWlzYzEuYzozMDIzCittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgItPk4Ovl7eAg7uTt4CDx8vDu6uAiCisKKyM6IG1pc2MxLmM6MzAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbW9yZSBsaW5lcyIKK21zZ3N0ciAixO7h4OLr5e3uIPHy8O7qOiAlbGQiCisKKyM6IG1pc2MxLmM6MzAzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgZmV3ZXIgbGluZXMiCittc2dzdHIgItPk4Ovl7e4g8fLw7uo6ICVsZCIKKworIzogbWlzYzEuYzozMDMzCittc2dpZCAiIChJbnRlcnJ1cHRlZCkiCittc2dzdHIgIiAoz/Dl8OLg7e4pIgorCisjOiBtaXNjMS5jOjc1ODgKK21zZ2lkICJWaW06IHByZXNlcnZpbmcgZmlsZXMuLi5cbiIKK21zZ3N0ciAiVmltOiDx7vXw4O3//vLx/yD04Onr+y4uLlxuIgorCisjLiBjbG9zZSBhbGwgbWVtZmlsZXMsIHdpdGhvdXQgZGVsZXRpbmcKKyM6IG1pc2MxLmM6NzU5OAorbXNnaWQgIlZpbTogRmluaXNoZWQuXG4iCittc2dzdHIgIlZpbTogw+7y7uLuLlxuIgorCisjOiBtaXNjMi5jOjY5NSBtaXNjMi5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogIgorbXNnc3RyICLO2MjBysA6ICIKKworIzogbWlzYzIuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJb4eDp8l0g4vHl4+4g4vvk5esuLe7x4u7hLiAlbHUtJWx1LCDo8e/u6/znLiAlbHUsIOzg6vEuIOjx7+7r/OcuICVsdVxuIgorCisjOiBtaXNjMi5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiW2NhbGxzXSB0b3RhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWwgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCittc2dzdHIgIiIKKyJb4vvn7uL7XSByZS9tYWxsb2MoKSDi8eXj7iAlbHUsIGZyZWUoKSDi8eXj7iAlbHVcbiIKKyJcbiIKKworIzogbWlzYzIuYzo3NzIKK21zZ2lkICJFMzQwOiBMaW5lIGlzIGJlY29taW5nIHRvbyBsb25nIgorbXNnc3RyICJFMzQwOiDR8vDu6uAg8fLg7e7i6PLx/yDx6+j46u7sIOTr6O3t7ukiCisKKyM6IG1pc2MyLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDE6IEludGVybmFsIGVycm9yOiBsYWxsb2MoJWxkLCApIgorbXNnc3RyICJFMzQxOiDC7fPy8OXt7f//IO746OHq4DogbGFsbG9jKCVsZCwgKSIKKworIzogbWlzYzIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MjogT3V0IG9mIG1lbW9yeSEgIChhbGxvY2F0aW5nICVsdSBieXRlcykiCittc2dzdHIgIkUzNDI6IM3lIPXi4PLg5fIg7+Ds//LoISAo4vvk5ev/5fLx/yAlbHUg4eDp8ikiCisKKyM6IG1pc2MyLmM6MjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAiwvvn7uIg7uHu6+736ugg5Ov/IOjx7+7r7eXt6P86IFwiJXNcIiIKKworIzogbWlzYzIuYzoyODE2Cittc2dpZCAiRTU0NTogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU0NTogz/Du7/P55e3uIOTi7uXy7vfo5SIKKworIzogbWlzYzIuYzoyODE4IG1pc2MyLmM6Mjg0NQorbXNnaWQgIkU1NDY6IElsbGVnYWwgbW9kZSIKK21zZ3N0ciAiRTU0NjogzeXk7u/z8fLo7PvpIPDl5ujsIgorCisjOiBtaXNjMi5jOjI4ODQKK21zZ2lkICJFNTQ3OiBJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIkU1NDc6IM3l5O7v8/Hy6Ozg/yD07vDs4CDq8/Dx7vDgIgorCisjOiBtaXNjMi5jOjI5MjQKK21zZ2lkICJFNTQ4OiBkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAiRTU0ODog8vDl4fPl8vH/IOLi5fHy6CD26PTw8yIKKworIzogbWlzYzIuYzoyOTI5Cittc2dpZCAiRTU0OTogSWxsZWdhbCBwZXJjZW50YWdlIgorbXNnc3RyICJFNTQ5OiDN5eTu7/Px8ujs7uUg5+3g9+Xt6OUg7/Du9uXt8u7iIgorCisjOiBtaXNjMi5jOjMyMzkKK21zZ2lkICJFbnRlciBlbmNyeXB0aW9uIGtleTogIgorbXNnc3RyICLC4uXk6PLlIO/g8O7r/CDk6/8g+Oj08O7i4O3o/zogIgorCisjOiBtaXNjMi5jOjMyNDAKK21zZ2lkICJFbnRlciBzYW1lIGtleSBhZ2FpbjogIgorbXNnc3RyICIgICAgICAgIM/u4vLu8Ojy5SDi4u7kIO/g8O7r/zoiCisKKyM6IG1pc2MyLmM6MzI1MAorbXNnaWQgIktleXMgZG9uJ3QgbWF0Y2ghIgorbXNnc3RyICLC4uXkuO3t++Ug7+Dw7uvoIO3lIPHu4u/g5OD+8iEiCisKKyM6IG1pc2MyLmM6Mzc5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTM0MzogSW52YWxpZCBwYXRoOiAnKipbbnVtYmVyXScgbXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIG9yIGJlICIKKyJmb2xsb3dlZCBieSAnJXMnLiIKK21zZ3N0ciAiIgorIkUzNDM6IM3l7/Dg4ujr/O3uIOfg5ODtIO/z8vw6ICcqKlv36PHr7l0nIOTu6+bt7iDh+/L8IOvo4e4g4iDq7u325SDv8/LoLCAiCisi6+jh7iDn4CDt6Owg5O7r5u3uIPHr5eTu4uDy/CAnJXMnIgorCisjOiBtaXNjMi5jOjUwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NDogQ2FuJ3QgZmluZCBkaXJlY3RvcnkgXCIlc1wiIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NDogyuDy4Ovu4yBcIiVzXCIg7eUg7eDp5OXtIOIg7/Py6CDk6/8g8ezl7fsg6uDy4Ovu4+AiCisKKyM6IG1pc2MyLmM6NTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ1OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkUzNDU6INTg6esgXCIlc1wiIOIg6Ofi5fHy7fv1IOrg8uDr7uPg9SDt5SDt4Onk5e0iCisKKyM6IG1pc2MyLmM6NTA4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ2OiBObyBtb3JlIGRpcmVjdG9yeSBcIiVzXCIgZm91bmQgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ2OiDCIO/z8ugg8ezl7fsg6uDy4Ovu4+Ag4e7r/PjlIO3l8iDq4PLg6+7j7uIgXCIlc1wiIgorCisjOiBtaXNjMi5jOjUwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiDCIOjn4uXx8u379SDq4PLg6+7j4PUg4e7r/PjlIO3l8iD04Onr7uIgXCIlc1wiIgorCisjOiBtaXNjMi5jOjUzMjQKK21zZ2lkICJFNTUwOiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTUwOiDP8O7v8/nl7e4g5OLu5fLu9+jlIgorCisjOiBtaXNjMi5jOjUzMzYKK21zZ2lkICJFNTUxOiBJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAiRTU1MTogzeXk7u/z8fLo7PvpIOru7O/u7eXt8iIKKworIzogbWlzYzIuYzo1MzQ0Cittc2dpZCAiRTU1MjogZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgIkU1NTI6INLw5eHz5fLx/yDz6uDn4PL8IPbo9PDzIgorCisjLiBHZXQgaGVyZSB3aGVuIHRoZSBzZXJ2ZXIgY2FuJ3QgYmUgZm91bmQuCisjOiBuZXRiZWFucy5jOjM5NgorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zICMyIgorbXNnc3RyICLN5eLu5+zu5u3uIPHu5eTo7ejy/PH/IPEgTmV0YmVhbnMgIzIiCisKKyM6IG5ldGJlYW5zLmM6NDA0Cittc2dpZCAiQ2Fubm90IGNvbm5lY3QgdG8gTmV0YmVhbnMiCittc2dzdHIgIs3l4u7n7O7m7e4g8e7l5Ojt6PL88f8g8SBOZXRCZWFucyIKKworIzogbmV0YmVhbnMuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY2ODogV3JvbmcgYWNjZXNzIG1vZGUgZm9yIE5ldEJlYW5zIGNvbm5lY3Rpb24gaW5mbyBmaWxlOiBcIiVzXCIiCittc2dzdHIgIiIKKyJFNjY4OiDN5e/w4OLo6/zt++kg8OXm6Owg5O7x8vPv4CDqIOjt9O7w7OD26Ogg7iDx7uXk6O3l7ejoIPEgTmV0QmVhbnM6IFwiJXNcIiIKKworIzogbmV0YmVhbnMuYzo3NDkKK21zZ2lkICJyZWFkIGZyb20gTmV0YmVhbnMgc29ja2V0IgorbXNnc3RyICL38uXt6OUg6Ocg4+3l5+TgIE5ldEJlYW5zIgorCisjOiBuZXRiZWFucy5jOjE2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY1ODogTmV0QmVhbnMgY29ubmVjdGlvbiBsb3N0IGZvciBidWZmZXIgJWxkIgorbXNnc3RyICJFNjU4OiDP7vLl8P/t7iDx7uXk6O3l7ejlIPEgTmV0QmVhbnMg5Ov/IOHz9OXw4CAlbGQiCisKKyM6IG5vcm1hbC5jOjI5ODAKK21zZ2lkICJXYXJuaW5nOiB0ZXJtaW5hbCBjYW5ub3QgaGlnaGxpZ2h0IgorbXNnc3RyICLP8OXk8+/w5ebk5e3o5Tog8uXw7Ojt4Osg7eUg7O7m5fIg4vvv7uvt//L8IO/u5PHi5fLq8yIKKworIzogbm9ybWFsLmM6MzI3NgorbXNnaWQgIkUzNDg6IE5vIHN0cmluZyB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDg6IM3l8iDx8vDu6ugg4iDv7ufo9ujoIOrz8PHu8OAiCisKKyM6IG5vcm1hbC5jOjMyNzgKK21zZ2lkICJFMzQ5OiBObyBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0OTogzeXyIOjs5e3oIOIg7+7n6Pbo6CDq8/Dx7vDgIgorCisjOiBub3JtYWwuYzo0NTE5Cittc2dpZCAiRTM1MjogQ2Fubm90IGVyYXNlIGZvbGRzIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIiIKKyJFMzUyOiDN5eLu5+zu5u3uIPHy5fDl8vwg8err4OTq6CDxIPLl6vP56Owg5+3g9+Xt6OXsIO7v9ujoICdmb2xkbWV0aG9kJyIKKworIzogbm9ybWFsLmM6Njc0MAorbXNnaWQgIkU2NjQ6IGNoYW5nZWxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkU2NjQ6IPHv6PHu6iDo5+zl7eXt6Okg7/Px8u7pIgorCisjOiBub3JtYWwuYzo2NzQyCittc2dpZCAiRTY2MjogQXQgc3RhcnQgb2YgY2hhbmdlbGlzdCIKK21zZ3N0ciAiRTY2MjogwiDt4Pfg6+Ug8e/o8ergIOjn7OXt5e3o6SIKKworIzogbm9ybWFsLmM6Njc0NAorbXNnaWQgIkU2NjM6IEF0IGVuZCBvZiBjaGFuZ2VsaXN0IgorbXNnc3RyICJFNjYyOiDCIOru7fblIPHv6PHq4CDo5+zl7eXt6OkiCisKKyM6IG5vcm1hbC5jOjgwMDUKK21zZ2lkICJUeXBlICA6cXVpdDxFbnRlcj4gIHRvIGV4aXQgVmltIgorbXNnc3RyICLC4uXk6PLlIDpxdWl0PEVudGVyPiAg5Ov/IOL79e7k4CDo5yBWaW0iCisKKyM6IG9wcy5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAxIHRpbWUiCittc2dzdHIgIsjn7OXt5e37IO7y8fLz7/sg4iAxIPHy8O7q5SAoJXMgMSDw4OcpIgorCisjOiBvcHMuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgJWQgdGltZXMiCittc2dzdHIgIsjn7OXt5e37IO7y8fLz7/sg4iAxIPHy8O7q5SAoJXMgJWQg8ODnKSIKKworIzogb3BzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkIDEgdGltZSIKK21zZ3N0ciAiyOfs5e3l7fsg7vLx8vPv+ywgJWxkIPHy8O7qICglcyAxIPDg5ykiCisKKyM6IG9wcy5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiyOfs5e3l7fsg7vLx8vPv+ywgJWxkIPHy8O7qICglcyAlZCDw4OcpIgorCisjOiBvcHMuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHRvIGluZGVudC4uLiAiCittc2dzdHIgIsjn7OXt//7y8f8g7vLx8vPv+yDx8vDu6uD1ICglbGQpLi4uIgorCisjOiBvcHMuYzo3MTIKK21zZ2lkICIxIGxpbmUgaW5kZW50ZWQgIgorbXNnc3RyICLI5+zl7bjtIO7y8fLz7yDiIO7k7e7pIPHy8O7q5SAiCisKKyM6IG9wcy5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgaW5kZW50ZWQgIgorbXNnc3RyICLI5+zl7eXt+yDu8vHy8+/7IOIg8fLw7urg9SAoJWxkKSAiCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNjc1Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgIvHq7u/o8O7i4PL8IO3lIPPk4Ovu8fwsIPPk4Ovl7ejlIOL77+7r7eXt7iIKKworIzogb3BzLmM6MjI2MQorbXNnaWQgIjEgbGluZSBjaGFuZ2VkIgorbXNnc3RyICLo5+zl7eXt4CAxIPHy8O7q4CIKKworIzogb3BzLmM6MjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgY2hhbmdlZCIKK21zZ3N0ciAi6Ofs5e3l7e4g8fLw7uo6ICVsZCIKKworIzogb3BzLmM6MjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJmcmVlaW5nICVsZCBsaW5lcyIKK21zZ3N0ciAi7vfo+eXt7iDx8vDu6jogJWxkIgorCisjOiBvcHMuYzoyOTI4Cittc2dpZCAiMSBsaW5lIHlhbmtlZCIKK21zZ3N0ciAi8eru7+jw7uLg7eAg7uTt4CDx8vDu6uAiCisKKyM6IG9wcy5jOjI5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHlhbmtlZCIKK21zZ3N0ciAi8eru7+jw7uLg7e4g8fLw7uo6ICVsZCIKKworIzogb3BzLmM6MzIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiDCIPDl4+jx8vDlICVzIO3o9+Xj7iDt5fIiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogb3BzLmM6Mzc2NgorbXNnaWQgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDQ5ePo8fLw+yAtLS0iCisKKyM6IG9wcy5jOjUwNzUKK21zZ2lkICJJbGxlZ2FsIHJlZ2lzdGVyIG5hbWUiCittc2dzdHIgIs3l5O7v8/Hy6Ozu5SDo7P8g8OXj6PHy8OAiCisKKyM6IG9wcy5jOjUxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDQ5ePo8fLw+zpcbiIKKworIzogb3BzLmM6NTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJFNTc0OiBVbmtub3duIHJlZ2lzdGVyIHR5cGUgJWQiCittc2dzdHIgIkU1NzQ6IM3l6Ofi5fHy7fvpIPLo7yDw5ePo8fLw4CAlZCIKKworIzogb3BzLmM6NTY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU0OiBJbnZhbGlkIHJlZ2lzdGVyIG5hbWU6ICclcyciCittc2dzdHIgIkUzNTQ6IM3l5O7v8/Hy6Ozu5SDo7P8g8OXj6PHy8OA6ICclcyciCisKKyM6IG9wcy5jOjYwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIENvbHM7ICIKK21zZ3N0ciAiyu7r7u3u6jogJWxkOyAiCisKKyM6IG9wcy5jOjYwNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VsZWN0ZWQgJXMlbGQgb2YgJWxkIExpbmVzOyAlbGQgb2YgJWxkIFdvcmRzOyAlbGQgb2YgJWxkIEJ5dGVzIgorbXNnc3RyICLC++Tl6+Xt7iAlcyVsZCDo5yAlbGQg8fLw7uo7ICVsZCDo5yAlbGQg8evu4jsgJWxkIOjnICVsZCDh4OnyIgorCisjOiBvcHMuYzo2MDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbCAlcyBvZiAlczsgTGluZSAlbGQgb2YgJWxkOyBXb3JkICVsZCBvZiAlbGQ7IEJ5dGUgJWxkIG9mICVsZCIKK21zZ3N0ciAiyu7rLiAlcyDo5yAlczsgIPHy8C4gJWxkIOjnICVsZDsg8evu4u4gJWxkIOjnICVsZDsg4eDp8iAlbGQg6OcgJWxkIgorCisjOiBvcHMuYzo2MDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCDxIPP3uPLu7CBCT00pIgorCisjOiBvcHRpb24uYzoxNjQzCittc2dpZCAiJTwlZiVoJW0lPVBhZ2UgJU4iCittc2dzdHIgIiU8JWYlaCVtJT3R8vAuICVOIgorCisjOiBvcHRpb24uYzoyMDkyCittc2dpZCAiVGhhbmtzIGZvciBmbHlpbmcgVmltIgorbXNnc3RyICLB6+Dj7uTg8OjsIOfgIOjx7+7r/Ofu4uDt6OUgVmltIgorCisjOiBvcHRpb24uYzozNDE5IG9wdGlvbi5jOjM1MzUKK21zZ2lkICJFNTE4OiBVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiRTUxODogzeXo5+Ll8fLt4P8g7u/26P8iCisKKyM6IG9wdGlvbi5jOjM0MzIKK21zZ2lkICJFNTE5OiBPcHRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTUxOTogzu/26P8g7eUg7+7k5OXw5uji4OXy8f8iCisKKyM6IG9wdGlvbi5jOjM0NTcKK21zZ2lkICJFNTIwOiBOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIgorbXNnc3RyICJFNTIwOiDN5SDk7u/z8erg5fLx/yDiIPDl5ujs7e7pIPHy8O7q5SIKKworIzogb3B0aW9uLmM6MzUyMgorbXNnaWQgIiIKKyJcbiIKKyJcdExhc3Qgc2V0IGZyb20gIgorbXNnc3RyICIiCisiXG4iCisiXHTCIO/u8evl5O3o6SDw4Ocg7u/26P8g6Ofs5e3l7eAg4iAiCisKKyM6IG9wdGlvbi5jOjM2NjEKK21zZ2lkICJFNTIxOiBOdW1iZXIgcmVxdWlyZWQgYWZ0ZXIgPSIKK21zZ3N0ciAiRTUyMTogz+7x6+UgPSDy8OXh8+Xy8f8g8+rg5+Dy/CD36PHr7iIKKworIzogb3B0aW9uLmM6Mzk4OSBvcHRpb24uYzo0NjE5Cittc2dpZCAiRTUyMjogTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1MjI6IM3lIO7h7eDw8+bl7e4g4iB0ZXJtY2FwIgorCisjOiBvcHRpb24uYzo0MDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1Mzk6IElsbGVnYWwgY2hhcmFjdGVyIDwlcz4iCittc2dzdHIgIkU1Mzk6IM3l5O7v8/Hy6Oz76SDx6Ozi7usgPCVzPiIKKworIzogb3B0aW9uLmM6NDYxMQorbXNnaWQgIkU1Mjk6IENhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiRTUyOTogx+3g9+Xt6OUg7u/26OggJ3Rlcm0nIO3lIOzu5uXyIOH78vwg7/Px8u7pIPHy8O7q7ukiCisKKyM6IG9wdGlvbi5jOjQ2MTQKK21zZ2lkICJFNTMwOiBDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICJFNTMwOiDCIOPw4PTo9+Xx6u7sIOjt8uXw9OXp8eUg6Ofs5e3/8vwg8uXw7Ojt4Osg7eXi7ufs7ubt7iIKKworIzogb3B0aW9uLmM6NDYxNgorbXNnaWQgIkU1MzE6IFVzZSBcIjpndWlcIiB0byBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFNTMxOiDE6/8g5+Dv8/Hq4CDj8OD06Pfl8eru4+4g6O3y5fD05enx4CDo8e/u6/zn8+ny5SBcIjpndWlcIiIKKworIzogb3B0aW9uLmM6NDY0NQorbXNnaWQgIkU1ODk6ICdiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiCittc2dzdHIgIkU1ODk6IOft4Pfl7ej/IO7v9ujpICdiYWNrdXBleHQnIOggJ3BhdGNobW9kZScg8ODi7fsiCisKKyM6IG9wdGlvbi5jOjQ4NjAKK21zZ2lkICJFNjE3OiBDYW5ub3QgYmUgY2hhbmdlZCBpbiB0aGUgR1RLKyAyIEdVSSIKK21zZ3N0ciAiRTYxNzogzeUg7O7m5fIg4fvy/CDo5+zl7eXt7iDiIOPw4PTo9+Xx6u7sIOjt8uXw9OXp8eUgR1RLKyAyIgorCisjOiBvcHRpb24uYzo1MDE2Cittc2dpZCAiRTUyNDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTUyNDogz/Du7/P55e3uIOTi7uXy7vfo5SIKKworIzogb3B0aW9uLmM6NTAxOAorbXNnaWQgIkU1MjU6IFplcm8gbGVuZ3RoIHN0cmluZyIKK21zZ3N0ciAiRTUyNTog0fLw7urgIPEg7fPr5eLu6SDk6+jt7ukiCisKKyM6IG9wdGlvbi5jOjUwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUyNjogTWlzc2luZyBudW1iZXIgYWZ0ZXIgPCVzPiIKK21zZ3N0ciAiRTUyNjogz/Du7/P55e3uIPfo8evuIO/u8evlIDwlcz4iCisKKyM6IG9wdGlvbi5jOjUxMDAKK21zZ2lkICJFNTI3OiBNaXNzaW5nIGNvbW1hIgorbXNnc3RyICJFNTI3OiDP8O7v8/nl7eAg5+Dv//Lg/yIKKworIzogb3B0aW9uLmM6NTEwNworbXNnaWQgIkU1Mjg6IE11c3Qgc3BlY2lmeSBhICcgdmFsdWUiCittc2dzdHIgIkU1Mjg6IM3l7uH17uTo7O4g8+rg5+Dy/CDn7eD35e3o5SDk6/8gJyIKKworIzogb3B0aW9uLmM6NTE0OAorbXNnaWQgIkU1OTU6IGNvbnRhaW5zIHVucHJpbnRhYmxlIG9yIHdpZGUgY2hhcmFjdGVyIgorbXNnc3RyICJFNTk1OiDx7uTl8Obo8iDt5e/l9+Dy7fvpIPHo7OLu6yDo6+gg8ejs4u7rIOTi7unt7ukg+Ojw6O37IgorCisjOiBvcHRpb24uYzo1MTk3Cittc2dpZCAiRTU5NjogSW52YWxpZCBmb250KHMpIgorbXNnc3RyICJFNTk2OiDN5e/w4OLo6/zt++Ug+PDo9PL7IgorCisjOiBvcHRpb24uYzo1MjA1Cittc2dpZCAiRTU5NzogY2FuJ3Qgc2VsZWN0IGZvbnRzZXQiCittc2dzdHIgIkU1OTc6IO3l4u7n7O7m7e4g4vvh8ODy/CD48Oj08u7i7ukg7eDh7vAiCisKKyM6IG9wdGlvbi5jOjUyMDcKK21zZ2lkICJFNTk4OiBJbnZhbGlkIGZvbnRzZXQiCittc2dzdHIgIkU1OTg6IM3l7/Dg4ujr/O376SD48Oj08u7i7ukg7eDh7vAiCisKKyM6IG9wdGlvbi5jOjUyMTQKK21zZ2lkICJFNTMzOiBjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICJFNTMzOiDt5eLu5+zu5u3uIOL74fDg8vwg+PDo9PIg8SDx6Ozi7uvg7Ogg5OLu6e3u6SD46PDo7fsiCisKKyM6IG9wdGlvbi5jOjUyMTYKK21zZ2lkICJFNTM0OiBJbnZhbGlkIHdpZGUgZm9udCIKK21zZ3N0ciAiRTUzNDogzeXv8ODi6Ov87fvpIPjw6PTyIPEg8ejs4u7r4OzoIOTi7unt7ukg+Ojw6O37IgorCisjOiBvcHRpb24uYzo1NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIDwlYz4iCittc2dzdHIgIkU1MzU6IM3l7/Dg4ujr/O376SDx6Ozi7usg7+7x6+UgPCVjPiIKKworIzogb3B0aW9uLmM6NTU5NworbXNnaWQgIkU1MzY6IGNvbW1hIHJlcXVpcmVkIgorbXNnc3RyICJFNTM2OiDy8OXh8+Xy8f8g5+Dv//Lg/yIKKworIzogb3B0aW9uLmM6NTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJFNTM3OiAnY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIgorbXNnc3RyICIiCisiRTUzNzogx+3g9+Xt6OUg7u/26P8gJ2NvbW1lbnRzdHJpbmcnIOTu6+bt7iDh+/L8IO/z8fLu6SDx8vDu6u7pIOjr6CAiCisi8e7k5fDm4PL8ICVzIgorCisjOiBvcHRpb24uYzo1Njc5Cittc2dpZCAiRTUzODogTm8gbW91c2Ugc3VwcG9ydCIKK21zZ3N0ciAiRTUzODogzPv4/CDt5SDv7uTk5fDm6OLg5fLx/yIKKworIzogb3B0aW9uLmM6NTk0NworbXNnaWQgIkU1NDA6IFVuY2xvc2VkIGV4cHJlc3Npb24gc2VxdWVuY2UiCittc2dzdHIgIkU1NDA6IM3l5+Dq8Pvy4P8g7+7x6+Xk7uLg8uXr/O3u8fL8IOL78ODm5e3o/yIKKworIzogb3B0aW9uLmM6NTk1MQorbXNnaWQgIkU1NDE6IHRvbyBtYW55IGl0ZW1zIgorbXNnc3RyICJFNTQxOiDx6+j46u7sIOzt7uPuIP3r5ezl7fLu4iIKKworIzogb3B0aW9uLmM6NTk1MworbXNnaWQgIkU1NDI6IHVuYmFsYW5jZWQgZ3JvdXBzIgorbXNnc3RyICJFNTQyOiDt5fHh4Ovg7fHo8O7i4O3t++Ug4/Dz7+/7IgorCisjOiBvcHRpb24uYzo2MTkzCittc2dpZCAiRTU5MDogQSBwcmV2aWV3IHdpbmRvdyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTU5MDogzurt7iDv8OXk7/Du8ezu8vDgIPPm5SDl8fL8IgorCisjOiBvcHRpb24uYzo2NDUwCittc2dpZCAiVzE3OiBBcmFiaWMgcmVxdWlyZXMgVVRGLTgsIGRvICc6c2V0IGVuY29kaW5nPXV0Zi04JyIKK21zZ3N0ciAiIgorIlcxNzogwPDg4fHq6Okg8vDl4fPl8iDo8e/u6/zn7uLg7ej/IFVURi04LCDi4uXk6PLlICc6c2V0IGVuY29kaW5nPXV0Zi04JyIKKworIzogb3B0aW9uLmM6Njc4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTkzOiBOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJFNTkzOiDN8+bt7iD17vL/IOH7ICVkIPHy8O7qIgorCisjOiBvcHRpb24uYzo2NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTQ6IE5lZWQgYXQgbGVhc3QgJWQgY29sdW1ucyIKK21zZ3N0ciAiRTU5NDogzfPm7e4g9e7y/yDh+yAlZCDq7uvu7e7qIgorCisjOiBvcHRpb24uYzo3MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTU6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTM1NTogzeXo5+Ll8fLt4P8g7u/26P86ICVzIgorCisjOiBvcHRpb24uYzo3MjIwCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBjb2RlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g0uXw7Ojt4Ov87fvlIOru5PsgLS0tIgorCisjOiBvcHRpb24uYzo3MjIyCittc2dpZCAiIgorIlxuIgorIi0tLSBHbG9iYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gw+vu4eDr/O375SDn7eD35e3o/yDu7/bo6SAtLS0iCisKKyM6IG9wdGlvbi5jOjcyMjQKK21zZ2lkICIiCisiXG4iCisiLS0tIExvY2FsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIMzl8fLt++Ug5+3g9+Xt6P8g7u/26OkgLS0tIgorCisjOiBvcHRpb24uYzo3MjI2Cittc2dpZCAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDO7/bo6CAtLS0iCisKKyM6IG9wdGlvbi5jOjc5MzIKK21zZ2lkICJFMzU2OiBnZXRfdmFycCBFUlJPUiIKK21zZ3N0ciAiRTM1NjogztjIwcrAIGdldF92YXJwIgorCisjOiBvcHRpb24uYzo4OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTc6ICdsYW5nbWFwJzogTWF0Y2hpbmcgY2hhcmFjdGVyIG1pc3NpbmcgZm9yICVzIgorbXNnc3RyICJFMzU3OiAnbGFuZ21hcCc6IM3l8iDx7u7y4uXy8fLi8/755ePuIPHo7OLu6+Ag5Ov/ICVzIgorCisjOiBvcHRpb24uYzo4OTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTg6ICdsYW5nbWFwJzogRXh0cmEgY2hhcmFjdGVycyBhZnRlciBzZW1pY29sb246ICVzIgorbXNnc3RyICJFMzU4OiAnbGFuZ21hcCc6IMvo+O3o5SDx6Ozi7uv7IO/u8evlIPLu9+roIPEg5+Dv//Lu6TogJXMiCisKKyM6IG9zX2FtaWdhLmM6MjgwCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICLt5eLu5+zu5u3uIO7y6vD78vwgIgorCisjOiBvc19hbWlnYS5jOjMxNAorbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIlZJTTogzeXi7ufs7ubt7iDu8urw+/L8IO7q7e4hXG4iCisKKyM6IG9zX2FtaWdhLmM6MzM4Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAizeXu4fXu5Ojs4CBBbWlnYWRvcyDi5fDx6OggMi4wNCDo6+gg4e7r5eUg7+7n5O3l6VxuIgorCisjOiBvc19hbWlnYS5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJOZWVkICVzIHZlcnNpb24gJWxkXG4iCittc2dzdHIgIs3l7uH17uTo7OAgJXMg4uXw8ejoICVsZFxuIgorCisjOiBvc19hbWlnYS5jOjQxNgorbXNnaWQgIkNhbm5vdCBvcGVuIE5JTDpcbiIKK21zZ3N0ciAizeXi7ufs7ubt7iDu8urw+/L8IE5JTDpcbiIKKworIzogb3NfYW1pZ2EuYzo0MjcKK21zZ2lkICJDYW5ub3QgY3JlYXRlICIKK21zZ3N0ciAizeXi7ufs7ubt7iDx7ufk4PL8ICIKKworIzogb3NfYW1pZ2EuYzo5MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltIGV4aXRpbmcgd2l0aCAlZFxuIgorbXNnc3RyICLP8OXq8OD55e3o5SDw4OHu8vsgVmltIPEg6u7k7uwgJWRcbiIKKworIzogb3NfYW1pZ2EuYzo5MzcKK21zZ2lkICJjYW5ub3QgY2hhbmdlIGNvbnNvbGUgbW9kZSA/IVxuIgorbXNnc3RyICLt5eLu5+zu5u3uIPHs5e3o8vwg8OXm6Owg6u7t8e7r6D8hXG4iCisKKyM6IG9zX2FtaWdhLmM6MTAwMworbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAibWNoX2dldF9zaGVsbHNpemU6IO3lIOIg6u7t8e7r6D8/XG4iCisKKyMuIGlmIFZpbSBvcGVuZWQgYSB3aW5kb3c6IEV4ZWN1dGluZyBhIHNoZWxsIG1heSBjYXVzZSBjcmFzaGVzCisjOiBvc19hbWlnYS5jOjExNTIKK21zZ2lkICJFMzYwOiBDYW5ub3QgZXhlY3V0ZSBzaGVsbCB3aXRoIC1mIG9wdGlvbiIKK21zZ3N0ciAiRTM2MDogzeXi7ufs7ubt7iDi++/u6+3o8vwg7uHu6+736vMg8SDg8OPz7OXt8u7sIC1mIgorCisjOiBvc19hbWlnYS5jOjExOTMgb3NfYW1pZ2EuYzoxMjgzCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICLN5eLu5+zu5u3uIOL77+7r7ejy/CAiCisKKyM6IG9zX2FtaWdhLmM6MTE5NiBvc19hbWlnYS5jOjEyOTMKK21zZ2lkICJzaGVsbCAiCittc2dzdHIgIu7h7uvu9+rgICIKKworIzogb3NfYW1pZ2EuYzoxMjE2IG9zX2FtaWdhLmM6MTMxOAorbXNnaWQgIiByZXR1cm5lZFxuIgorbXNnc3RyICIg5+Di5fD46OvgIPDg4e7y81xuIgorCisjOiBvc19hbWlnYS5jOjE0NTkKK21zZ2lkICJBTkNIT1JfQlVGX1NJWkUgdG9vIHNtYWxsLiIKK21zZ3N0ciAi8evo+Oru7CDs4Ovg/yDi5evo9+jt4CBBTkNIT1JfQlVGX1NJWkUuIgorCisjOiBvc19hbWlnYS5jOjE0NjMKK21zZ2lkICJJL08gRVJST1IiCittc2dzdHIgIs7YyMHKwCDCws7EwC/C28LOxMAiCisKKyM6IG9zX21zd2luLmM6NTM5Cittc2dpZCAiLi4uKHRydW5jYXRlZCkiCittc2dzdHIgIi4uLiju4fDl5+Dt7ikiCisKKyM6IG9zX21zd2luLmM6NjQxCittc2dpZCAiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIsft4Pfl7ejlIO7v9ujoICdjb2x1bW5zJyDt5SDw4OLt7iA4MCwg4u3l+O3o5SDv8O7j8ODs7Psg7eUg4vvv7uvt//7y8f8iCisKKyM6IG9zX21zd2luLmM6MTk3MworbXNnaWQgIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRTMyNzogzeXz5OD37e7lIOfg4uXw+OXt6OUg4vvh7vDgIO/w6O3y5fDgIgorCisjOiBvc19tc3dpbi5jOjIwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG8gJXMgb24gJXMiCittc2dzdHIgIuIgJXMg7eAgJXMiCisKKyM6IG9zX21zd2luLmM6MjAyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjEzOiBVbmtub3duIHByaW50ZXIgZm9udDogJXMiCittc2dzdHIgIkU2MTM6IM3l6Ofi5fHy7fvpIPjw6PTyIO/w6O3y5fDgOiAlcyIKKworIzogb3NfbXN3aW4uYzoyMDc3IG9zX21zd2luLmM6MjA4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM4OiBQcmludCBlcnJvcjogJXMiCittc2dzdHIgIkUyMzg6IM746OHq4CDv5ffg8ug6ICVzIgorCisjOiBvc19tc3dpbi5jOjIwODgKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICLN5ejn4uXx8u3uIgorCisjOiBvc19tc3dpbi5jOjIxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAiz+X34PL8ICclcyciCisKKyM6IG9zX21zd2luLmM6MzIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDogzeXk7u/z8fLo7O7lIOjs/yDq7uTo8O7i6uggXCIlc1wiIOIg6Ozl7egg+PDo9PLgIFwiJXNcIiIKKworIzogb3NfbXN3aW4uYzozMjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDU6IElsbGVnYWwgY2hhciAnJWMnIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDU6IM3l5O7v8/Hy6Oz76SDx6Ozi7usgJyVjJyDiIOjs5e3oIPjw6PTy4CBcIiVzXCIiCisKKyM6IG9zX3Jpc2Nvcy5jOjEyNTkKK21zZ2lkICJFMzY2OiBJbnZhbGlkICdvc2ZpbGV0eXBlJyBvcHRpb24gLSB1c2luZyBUZXh0IgorbXNnc3RyICJFMzY2OiDN5eTu7/Px8ujs7uUg5+3g9+Xt6OUg7u/26OggJ29zZmlsZXR5cGUnIC0tIOjx7+7r/Ofz5fLx/yBUZXh0IgorCisjOiBvc191bml4LmM6OTI3Cittc2dpZCAiVmltOiBEb3VibGUgc2lnbmFsLCBleGl0aW5nXG4iCittc2dzdHIgIlZpbTogxOLu6e3u6SDx6OPt4OssIOfg4uXw+OXt6OUg8ODh7vL7XG4iCisKKyM6IG9zX3VuaXguYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IM/u6/P35e0g8+Ho6fHy4uXt7fvpIPHo4+3g6yAlc1xuIgorCisjOiBvc191bml4LmM6OTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWxcbiIKK21zZ3N0ciAiVmltOiDP7uvz9+XtIPPh6Onx8uLl7e376SDx6OPt4OtcbiIKKworIzogb3NfdW5peC5jOjExOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRvb2sgJWxkIG1zZWMiCittc2dzdHIgIs7y6vD78ujlIOTo8e/r5f8gWCDn4O3/6+4gJWxkIG1zZWMiCisKKyM6IG9zX3VuaXguYzoxMjI2Cittc2dpZCAiIgorIlxuIgorIlZpbTogR290IFggZXJyb3JcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZpbTogzvjo4ergIFhcbiIKKworIzogb3NfdW5peC5jOjEzMzQKK21zZ2lkICJUZXN0aW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICLP8O7i5fDq4CDk6PHv6+X/IFgg5+Di5fD45e3gIO3l8+Tg9+3uIgorCisjOiBvc191bml4LmM6MTQ3MworbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0aW1lZCBvdXQiCittc2dzdHIgIs7y6vD78ujlIOTo8e/r5f8gWCDt5SDi++/u6+3l7e4g4iDu8uLl5Ljt7e7lIOLw5ez/IgorCisjOiBvc191bml4LmM6MzIyNyBvc191bml4LmM6MzkwNworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCAiCittc2dzdHIgIiIKKyJcbiIKKyLN5eLu5+zu5u3uIOfg7/Px8ujy/CDu4e7r7vfq8yAiCisKKyM6IG9zX3VuaXguYzozMjc1Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsIHNoXG4iCittc2dzdHIgIiIKKyJcbiIKKyLN5eLu5+zu5u3uIOfg7/Px8ujy/CDu4e7r7vfq8yBzaFxuIgorCisjOiBvc191bml4LmM6MzI3OSBvc191bml4LmM6MzkxMworbXNnaWQgIiIKKyJcbiIKKyJzaGVsbCByZXR1cm5lZCAiCittc2dzdHIgIiIKKyJcbiIKKyLO4e7r7vfq4CDn4OLl8Pjo6+Ag8ODh7vLzICIKKworIzogb3NfdW5peC5jOjM0MTQKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGNyZWF0ZSBwaXBlc1xuIgorbXNnc3RyICIiCisiXG4iCisizeXi7ufs7ubt7iDx7ufk4PL8IPLw8+H7XG4iCisKKyM6IG9zX3VuaXguYzozNDI5Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBmb3JrXG4iCittc2dzdHIgIiIKKyJcbiIKKyLN5eLu5+zu5u3uIOL77+7r7ejy/CBmb3JrKClcbiIKKworIzogb3NfdW5peC5jOjM5MjAKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKyJcbiIKKyLC++/u6+3l7ejlIOru7ODt5Psg7/Dl8OLg7e5cbiIKKworIzogb3NfdW5peC5jOjQxODQgb3NfdW5peC5jOjQzMDkgb3NfdW5peC5jOjU5NzUKK21zZ2lkICJYU01QIGxvc3QgSUNFIGNvbm5lY3Rpb24iCittc2dzdHIgIlhTTVAg8/Ll8P/t7iDx7uXk6O3l7ejlIElDRSIKKworIzogb3NfdW5peC5jOjU1NTgKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICLN5fPk4Pft7uUg7vLq8Pvy6OUg5Ojx7+vl/yBYIgorCisjOiBvc191bml4LmM6NTg4MAorbXNnaWQgIlhTTVAgaGFuZGxpbmcgc2F2ZS15b3Vyc2VsZiByZXF1ZXN0IgorbXNnc3RyICJYU01QIO7h8ODh4PL74uDl8iDn4O/w7vEg8eDs7vHu9fDg7eXt6P8iCisKKyM6IG9zX3VuaXguYzo1OTk5Cittc2dpZCAiWFNNUCBvcGVuaW5nIGNvbm5lY3Rpb24iCittc2dzdHIgIlhTTVAg7vLq8Pvi4OXyIPHu5eTo7eXt6OUiCisKKyM6IG9zX3VuaXguYzo2MDE4Cittc2dpZCAiWFNNUCBJQ0UgY29ubmVjdGlvbiB3YXRjaCBmYWlsZWQiCittc2dzdHIgIlhTTVAg7+7y5fD/7e4g8evl5uXt6OUg5+Ag8e7l5Ojt5e3o5ewgSUNFIgorCisjOiBvc191bml4LmM6NjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJYU01QIFNtY09wZW5Db25uZWN0aW9uIGZhaWxlZDogJXMiCittc2dzdHIgIlhTTVAg7eXz5OD37e4g4vvv7uvt5e3uIFNtY09wZW5Db25uZWN0aW9uOiAlcyIKKworIzogb3Nfdm1zX21tcy5jOjU5Cittc2dpZCAiQXQgbGluZSIKK21zZ3N0ciAiwiDx8vDu6uUiCisKKyM6IG9zX3czMmV4ZS5jOjY1Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAizeXi7ufs7ubt7iDi++Tl6+jy/CDv4Oz/8vwg5Ov/IOru7ODt5O3u6SDx8vDu6uguIgorCisjOiBvc193MzJleGUuYzo2NiBvc193MzJleGUuYzo4OSBvc193MzJleGUuYzoxMDAKK21zZ2lkICJWSU0gRXJyb3IiCittc2dzdHIgIs746OHq4CBWSU0iCisKKyM6IG9zX3czMmV4ZS5jOjg5Cittc2dpZCAiQ291bGQgbm90IGxvYWQgdmltMzIuZGxsISIKK21zZ3N0ciAizeXi7ufs7ubt7iDn4OPw8+fo8vwgdmltMzIuZGxsISIKKworIzogb3NfdzMyZXhlLmM6OTkKK21zZ2lkICJDb3VsZCBub3QgZml4IHVwIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHRoZSBETEwhIgorbXNnc3RyICLN5eLu5+zu5u3uIOjx7/Dg4ujy/CDz6uDn4PLl6+gg9PPt6vbo6SDk6/8gRExMISIKKworIzogb3Nfd2luMTYuYzozNDIgb3Nfd2luMzIuYzozMjE2CisjLCBjLWZvcm1hdAorbXNnaWQgInNoZWxsIHJldHVybmVkICVkIgorbXNnc3RyICLn4OLl8Pjl7ejlIPDg4e7y+yDu4e7r7vfq6CDxIOru5O7sICVkIgorCisjOiBvc193aW4zMi5jOjI2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgJXMgZXZlbnRcbiIKK21zZ3N0ciAiVmltOiDP5fDl9eLg9+Xt7iDx7uH78ujlICVzXG4iCisKKyM6IG9zX3dpbjMyLmM6MjY3NgorbXNnaWQgImNsb3NlIgorbXNnc3RyICLn4Orw+/Lo5SIKKworIzogb3Nfd2luMzIuYzoyNjc4Cittc2dpZCAibG9nb2ZmIgorbXNnc3RyICLu8urr/vfl7ejlIgorCisjOiBvc193aW4zMi5jOjI2NzkKK21zZ2lkICJzaHV0ZG93biIKK21zZ3N0ciAi5+Di5fD45e3o5SIKKworIzogb3Nfd2luMzIuYzozMTY5Cittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6IMru7ODt5OAg7eUg7eDp5OXt4CIKKworIzogb3Nfd2luMzIuYzozMTgyCittc2dpZCAiIgorIlZJTVJVTi5FWEUgbm90IGZvdW5kIGluIHlvdXIgJFBBVEguXG4iCisiRXh0ZXJuYWwgY29tbWFuZHMgd2lsbCBub3QgcGF1c2UgYWZ0ZXIgY29tcGxldGlvbi5cbiIKKyJTZWUgIDpoZWxwIHdpbjMyLXZpbXJ1biAgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiVklNUlVOLkVYRSDt5SDt4Onk5e0g4iDv8/LoLCDn4OTg7e3u7CDiICRQQVRILlxuIgorIsLt5fjt6OUg6u7s4O3k+yDt5SDh8+Tz8iDu8fLg7eDi6+ji4PL88f8g7+7x6+Ug4vvv7uvt5e3o/y5cbiIKKyLE7u/u6+3o8uXr/O3g/yDo7fTu8Ozg9uj/IOIgOmhlbHAgd2luMzItdmltcnVuIgorCisjOiBvc193aW4zMi5jOjMxODUKK21zZ2lkICJWaW0gV2FybmluZyIKK21zZ3N0ciAiz/Dl5PPv8OXm5OXt6OUgVmltIgorCisjOiBxdWlja2ZpeC5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcyOiBUb28gbWFueSAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzI6IMIg8fLw7urlIPTu8Ozg8uAg8evo+Oru7CDs7e7j7iAlJSVjIgorCisjOiBxdWlja2ZpeC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MzogzeXu5ujk4O3t++kg/evl7OXt8iAlJSVjIOIg8fLw7urlIPTu8Ozg8uAiCisKKyM6IHF1aWNrZml4LmM6MzI1Cittc2dpZCAiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzQ6IMIg8fLw7urlIPTu8Ozg8uAg7/Du7/P55e3gIF0iCisKKyM6IHF1aWNrZml4LmM6MzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogJSUlYyDt5SDv7uTk5fDm6OLg5fLx/yDiIPHy8O7q5SD07vDs4PLgIgorCisjOiBxdWlja2ZpeC5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiCittc2dzdHIgIkUzNzY6IM3l5O7v8/Hy6Oz76SAlJSVjIOIg7/Do8fLg4urlIOIg8fLw7urlIPTu8Ozg8uAiCisKKyM6IHF1aWNrZml4LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzc6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc3OiDN5eTu7/Px8ujs++kgJSUlYyDiIPHy8O7q5SD07vDs4PLgIgorCisjOiBxdWlja2ZpeC5jOjM5MQorbXNnaWQgIkUzNzg6ICdlcnJvcmZvcm1hdCcgY29udGFpbnMgbm8gcGF0dGVybiIKK21zZ3N0ciAiRTM3ODogwiDn7eD35e3o6CDu7/bo6CAnZXJyb3Jmb3JtYXQnIO7y8fPy8fLi8+XyIPjg4evu7SIKKworIzogcXVpY2tmaXguYzo1MDEKK21zZ2lkICJFMzc5OiBNaXNzaW5nIG9yIGVtcHR5IGRpcmVjdG9yeSBuYW1lIgorbXNnc3RyICJFMzc5OiDo7P8g6uDy4Ovu4+Ag7eUg5+Dk4O3uIOjr6CDw4OLt7iDv8/Hy7ukg8fLw7urlIgorCisjOiBxdWlja2ZpeC5jOjk5MAorbXNnaWQgIkU1NTM6IE5vIG1vcmUgaXRlbXMiCittc2dzdHIgIkU1NTM6IMHu6/z45SDt5fIg/evl7OXt8u7iIgorCisjOiBxdWlja2ZpeC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCVkIG9mICVkKSVzJXM6ICIKK21zZ3N0ciAiKCVkIOjnICVkKSVzJXM6ICIKKworIzogcXVpY2tmaXguYzoxMjMxCittc2dpZCAiIChsaW5lIGRlbGV0ZWQpIgorbXNnc3RyICIgKPHy8O7q4CDz5ODr5e3gKSIKKworIzogcXVpY2tmaXguYzoxNDQ0Cittc2dpZCAiRTM4MDogQXQgYm90dG9tIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgwOiDC7ejn8yDx8uXq4CDh+/Hy8Pv1IOjx7/Dg4uvl7ejpIgorCisjOiBxdWlja2ZpeC5jOjE0NTMKK21zZ2lkICJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODE6IM3g4uXw9fMg8fLl6uAg4fvx8vD79SDo8e/w4OLr5e3o6SIKKworIzogcXVpY2tmaXguYzoxNDY1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAi8e/o8e7qIO746OHu6iAlZCDo5yAlZDsgJWQg7vjo4e7qIgorCisjOiBxdWlja2ZpeC5jOjE5NDMKK21zZ2lkICJFMzgyOiBDYW5ub3Qgd3JpdGUsICdidWZ0eXBlJyBvcHRpb24gaXMgc2V0IgorbXNnc3RyICIiCisiRTM4Mjogx+Dv6PH8IO3l4u7n7O7m7eAsIOft4Pfl7ejlIO7v9ujoICdidWZ0eXBlJyDt5SD/4uv/5fLx/yDv8/Hy7ukg8fLw7uru6SIKKworIzogcmVnZXhwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjk6IGludmFsaWQgaXRlbSBpbiAlcyUlW10iCittc2dzdHIgIkUzNjk6IO3l5O7v8/Hy6Oz76SD96+Xs5e3yIOIgJXMlJVtdIgorCisjOiByZWdleHAuYzo4MzgKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiDR6+j46u7sIOTr6O3t++kg+ODh6+7tIgorCisjOiByZWdleHAuYzoxMDA5Cittc2dpZCAiRTUwOiBUb28gbWFueSBcXHooIgorbXNnc3RyICJFNTA6INHr6Pjq7uwg7O3u4+4gXFx6KCIKKworIzogcmVnZXhwLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTE6IFRvbyBtYW55ICVzKCIKK21zZ3N0ciAiRTUxOiDR6+j46u7sIOzt7uPuICVzKCIKKworIzogcmVnZXhwLmM6MTA3NworbXNnaWQgIkU1MjogVW5tYXRjaGVkIFxceigiCittc2dzdHIgIkU1MjogzeXyIO/g8Psg5Ov/IFxceigiCisKKyM6IHJlZ2V4cC5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzOiBVbm1hdGNoZWQgJXMlJSgiCittc2dzdHIgIkU1MzogzeXyIO/g8Psg5Ov/ICVzJSUoIgorCisjOiByZWdleHAuYzoxMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NDogVW5tYXRjaGVkICVzKCIKK21zZ3N0ciAiRTU0OiDN5fIg7+Dw+yDk6/8gJXMoIgorCisjOiByZWdleHAuYzoxMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTogVW5tYXRjaGVkICVzKSIKK21zZ3N0ciAiRTU1OiDN5fIg7+Dw+yDk6/8gJXMpIgorCisjOiByZWdleHAuYzoxMjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjogJXMqIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1Njog4u7n7O7m7e4g7/Px8u7pIO7v5fDg7eQgJXMqIgorCisjOiByZWdleHAuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzogJXMrIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1Nzog4u7n7O7m7e4g7/Px8u7pIO7v5fDg7eQgJXMrIgorCisjOiByZWdleHAuYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTogaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXNAIgorbXNnc3RyICJFNTk6IO3l5O7v8/Hy6Oz76SDx6Ozi7usg7+7x6+UgJXNAIgorCisjOiByZWdleHAuYzoxMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1ODogJXN7IG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1ODog4u7n7O7m7e4g7/Px8u7pIO7v5fDg7eQgJXN7IgorCisjOiByZWdleHAuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDogVG9vIG1hbnkgY29tcGxleCAlc3suLi59cyIKK21zZ3N0ciAiRTYwOiDR6+j46u7sIOzt7uPuIPHr7ubt+/Ug6u7t8fLw8+r26OkgJXN7Li4ufSIKKworIzogcmVnZXhwLmM6MTM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE6IE5lc3RlZCAlcyoiCittc2dzdHIgIkU2MTogwuvu5uXt7fvlICVzKiIKKworIzogcmVnZXhwLmM6MTM3MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjI6IE5lc3RlZCAlcyVjIgorbXNnc3RyICJFNjI6IMLr7ubl7e375SAlcyVjIgorCisjOiByZWdleHAuYzoxNDkxCittc2dpZCAiRTYzOiBpbnZhbGlkIHVzZSBvZiBcXF8iCittc2dzdHIgIkU2Mzog7eXk7u/z8fLo7O7lIOjx7+7r/Ofu4uDt6OUgXFxfIgorCisjOiByZWdleHAuYzoxNTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDogJXMlYyDt6CDn4CD35ewg7eUg8evl5PPl8iIKKworIzogcmVnZXhwLmM6MTU5MgorbXNnaWQgIkU2NTogSWxsZWdhbCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiRTY1OiDN5eTu7/Px8ujs4P8g7uHw4PLt4P8g8fH76+rgIgorCisjOiByZWdleHAuYzoxNjA1Cittc2dpZCAiRTY2OiBcXHooIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU2NjogXFx6KCDt5SDs7ubl8iDh+/L8IOjx7+7r/Ofu4uDt7iDn5OXx/CIKKworIzogcmVnZXhwLmM6MTYyNAorbXNnaWQgIkU2NzogXFx6MSBldCBhbC4gbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY3OiBcXHoxIOgg8i7vLiDt5SDs7uPz8iDh+/L8IOjx7+7r/Ofu4uDt+yDn5OXx/CIKKworIzogcmVnZXhwLmM6MTYzNQorbXNnaWQgIkU2ODogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgXFx6IgorbXNnc3RyICJFNjg6IM3l5O7v8/Hy6Oz76SDx6Ozi7usg7+7x6+UgXFx6IgorCisjOiByZWdleHAuYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2OTogTWlzc2luZyBdIGFmdGVyICVzJSVbIgorbXNnc3RyICJFNjk6IM/w7u/z+eXt4CBdIO/u8evlICVzJSVbIgorCisjOiByZWdleHAuYzoxNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MDogRW1wdHkgJXMlJVtdIgorbXNnc3RyICJFNzA6IM/z8fLu5SAlcyUlW10iCisKKyM6IHJlZ2V4cC5jOjE3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTcxOiBJbnZhbGlkIGNoYXJhY3RlciBhZnRlciAlcyUlIgorbXNnc3RyICJFNzE6IM3l5O7v8/Hy6Oz76SDx6Ozi7usg7+7x6+UgJXMlJSIKKworIzogcmVnZXhwLmM6MjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJFNTU0OiBTeW50YXggZXJyb3IgaW4gJXN7Li4ufSIKK21zZ3N0ciAiRTU1NDog0ejt8uDq8ej35fHq4P8g7vjo4ergIOIgJXN7Li4ufSIKKworIzogcmVnZXhwLmM6Mjg2MyByZWdleHAuYzozMDE2Cittc2dpZCAiRTM2MTogQ3Jhc2ggaW50ZXJjZXB0ZWQ7IHJlZ2V4cCB0b28gY29tcGxleD8iCittc2dzdHIgIiIKKyJFMzYxOiDP8OXk7vLi8OD55e3uIODi4PDo6e3u5SDn4OLl8Pjl7ejlOiDx6+j46u7sIPHr7ubt7uUg8OXj8+v/8O3u5SAiCisi4vvw4Obl7ejlPyIKKworIzogcmVnZXhwLmM6MzAwNCByZWdleHAuYzozMDEzCittc2dpZCAiRTM2MzogcGF0dGVybiBjYXVzZWQgb3V0LW9mLXN0YWNrIGVycm9yIgorbXNnc3RyICJFMzYzOiDv8Ojs5e3l7ejlIPjg4evu7eAg7/Do4uXr7iDqIO746OHq5SDi+/Xu5OAg5+Ag7/Dl5OXr+yDx8uXq4CIKKworIzogcmVnZXhwLmM6MzI1OAorbXNnaWQgIkV4dGVybmFsIHN1Ym1hdGNoZXM6XG4iCittc2dzdHIgIsLt5fjt6OUg7+7k8e7u8uLl8vHy4uj/OlxuIgorCisjOiBzY3JlZW4uYzoyMTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIistLSUzbGQgbGluZXMgZm9sZGVkICIKK21zZ3N0ciAiKy0tJTNsZCDx8vDu6iDiIPHq6+Dk6uUiCisKKyM6IHNjcmVlbi5jOjc5OTYKK21zZ2lkICIgVlJFUExBQ0UiCittc2dzdHIgIiDCyNDS08DL3M3A3yDHwMzFzcAiCisKKyM6IHNjcmVlbi5jOjgwMDAKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIMfAzMXNwCIKKworIzogc2NyZWVuLmM6ODAwNQorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIgzsHQwNLNwN8iCisKKyM6IHNjcmVlbi5jOjgwMDcKK21zZ2lkICIgSU5TRVJUIgorbXNnc3RyICIgwtHSwMLKwCIKKworIzogc2NyZWVuLmM6ODAxMAorbXNnaWQgIiAoaW5zZXJ0KSIKK21zZ3N0ciAiICji8fLg4urgKSIKKworIzogc2NyZWVuLmM6ODAxMgorbXNnaWQgIiAocmVwbGFjZSkiCittc2dzdHIgIiAo5+Ds5e3gKSIKKworIzogc2NyZWVuLmM6ODAxNAorbXNnaWQgIiAodnJlcGxhY2UpIgorbXNnc3RyICIgKOLo8PLz4Ov87eD/IOfg7OXt4CkiCisKKyM6IHNjcmVlbi5jOjgwMTcKK21zZ2lkICIgSGVicmV3IgorbXNnc3RyICIgyOLw6PIiCisKKyM6IHNjcmVlbi5jOjgwMjgKK21zZ2lkICIgQXJhYmljIgorbXNnc3RyICIgwPDg4fHq6OkiCisKKyM6IHNjcmVlbi5jOjgwMzEKK21zZ2lkICIgKGxhbmcpIgorbXNnc3RyICIgKP/n++opIgorCisjOiBzY3JlZW4uYzo4MDM1Cittc2dpZCAiIChwYXN0ZSkiCittc2dzdHIgIiAo4urr5enq4CkiCisKKyM6IHNjcmVlbi5jOjgwNDgKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgwsjH08DL3M3bySDQxcbIzCIKKworIzogc2NyZWVuLmM6ODA0OQorbXNnaWQgIiBWSVNVQUwgTElORSIKK21zZ3N0ciAiIMLIx9PAy9zNwN8g0dLQzsrAIgorCisjOiBzY3JlZW4uYzo4MDUwCittc2dpZCAiIFZJU1VBTCBCTE9DSyIKK21zZ3N0ciAiIMLIx9PAy9zN28kgwcvOyiIKKworIzogc2NyZWVuLmM6ODA1MQorbXNnaWQgIiBTRUxFQ1QiCittc2dzdHIgIiDC28TFy8XNyMUiCisKKyM6IHNjcmVlbi5jOjgwNTIKK21zZ2lkICIgU0VMRUNUIExJTkUiCittc2dzdHIgIiDC28TFy8XNyMUg0dLQzsrIIgorCisjOiBzY3JlZW4uYzo4MDUzCittc2dpZCAiIFNFTEVDVCBCTE9DSyIKK21zZ3N0ciAiIMLbxMXLxc3IxSDBy87KwCIKKworIzogc2NyZWVuLmM6ODA2OCBzY3JlZW4uYzo4MTMxCittc2dpZCAicmVjb3JkaW5nIgorbXNnc3RyICLn4O/o8fwiCisKKyM6IHNlYXJjaC5jOjM3Cittc2dpZCAic2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIgorbXNnc3RyICLv7ujx6iDh8+Tl8iDv8O7k7uvm5e0g8SDKzs3WwCDk7urz7OXt8uAiCisKKyM6IHNlYXJjaC5jOjM4Cittc2dpZCAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIgorbXNnc3RyICLv7ujx6iDh8+Tl8iDv8O7k7uvm5e0g8SDNwNfAy8Ag5O7q8+zl7fLgIgorCisjOiBzZWFyY2guYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4MzogSW52YWxpZCBzZWFyY2ggc3RyaW5nOiAlcyIKK21zZ3N0ciAiRTM4MzogzeXv8ODi6Ov87eD/IPHy8O7q4CDv7ujx6uA6ICVzIgorCisjOiBzZWFyY2guYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg0OiDv7ujx6iDn4Oru7ffl7SDiIM3A18DLxSDk7urz7OXt8uA7ICVzIO3lIO3g6eTl7e4iCisKKyM6IHNlYXJjaC5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg1OiBzZWFyY2ggaGl0IEJPVFRPTSB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODU6IO/u6PHqIOfg6u7t9+XtIOIgys7N1sUg5O7q8+zl7fLgOyAlcyDt5SDt4Onk5e3uIgorCisjOiBzZWFyY2guYzoxMjQ5Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiDP7vHr5SAnOycg7ubo5ODl8vH/IOLi7uQgJz8nIOjr6CAnLyciCisKKyM6IHNlYXJjaC5jOjM3NTkKK21zZ2lkICIgKGluY2x1ZGVzIHByZXZpb3VzbHkgbGlzdGVkIG1hdGNoKSIKK21zZ3N0ciAiICji6uv+9+Dl8iDw4O3t5eUg7+7q4Ofg7e375SDx7u7y4uXy8fLi6P8pIgorCisjLiBjdXJzb3IgYXQgc3RhdHVzIGxpbmUKKyM6IHNlYXJjaC5jOjM3NzkKK21zZ2lkICItLS0gSW5jbHVkZWQgZmlsZXMgIgorbXNnc3RyICItLS0gwurr/ve47e375SD04Onr+yAiCisKKyM6IHNlYXJjaC5jOjM3ODEKK21zZ2lkICJub3QgZm91bmQgIgorbXNnc3RyICLt5SDt4Onk5e3uICIKKworIzogc2VhcmNoLmM6Mzc4MgorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgIu/uIO/z8uggLS0tXG4iCisKKyM6IHNlYXJjaC5jOjM4MzkKK21zZ2lkICIgIChBbHJlYWR5IGxpc3RlZCkiCittc2dzdHIgIiAo0+blIO/u6uDn4O3uKSIKKworIzogc2VhcmNoLmM6Mzg0MQorbXNnaWQgIiAgTk9UIEZPVU5EIgorbXNnc3RyICIgzcUgzcDJxMXNziIKKworIzogc2VhcmNoLmM6Mzg5MworIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBpbmNsdWRlZCBmaWxlOiAlcyIKK21zZ3N0ciAiz/Du8ezu8vAg4urr/ve47e379SD04Onr7uI6ICVzIgorCisjOiBzZWFyY2guYzo0MTExCittc2dpZCAiRTM4NzogTWF0Y2ggaXMgb24gY3VycmVudCBsaW5lIgorbXNnc3RyICJFMzg3OiDR7u7y4uXy8fLi6OUg4iDy5erz+eXpIPHy8O7q5SIKKworIzogc2VhcmNoLmM6NDI1NAorbXNnaWQgIkFsbCBpbmNsdWRlZCBmaWxlcyB3ZXJlIGZvdW5kIgorbXNnc3RyICLN4Onk5e37IOLx5SDi6uv+97jt7fvlIPTg6ev7IgorCisjOiBzZWFyY2guYzo0MjU2Cittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIsLq6/73uO3t+/Ug9ODp6+7iIO3l8iIKKworIzogc2VhcmNoLmM6NDI3MgorbXNnaWQgIkUzODg6IENvdWxkbid0IGZpbmQgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRTM4ODogzu/w5eTl6+Xt6OUg7eUg7eDp5OXt7iIKKworIzogc2VhcmNoLmM6NDI3NAorbXNnaWQgIkUzODk6IENvdWxkbid0IGZpbmQgcGF0dGVybiIKK21zZ3N0ciAiRTM4OTog2ODh6+7tIO3lIO3g6eTl7SIKKworIzogc3ludGF4LmM6MzA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkwOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTM5MDogzeXk7u/z8fLo7PvpIODw4/Ps5e3yOiAlcyIKKworIzogc3ludGF4LmM6MzIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkxOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MTog0ejt8uDq8ej35fHq6Okg6uvg8fLl8CAlcyDt5SDt4Onk5e0iCisKKyM6IHN5bnRheC5jOjMzOTQKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgItHo7fLg6vHo9+Xx6ujlIP3r5ezl7fL7IOTr/yDk4O3t7uPuIOHz9OXw4CDt5SDu7/Dl5OXr5e37IgorCisjOiBzeW50YXguYzozNDAyCittc2dpZCAic3luY2luZyBvbiBDLXN0eWxlIGNvbW1lbnRzIgorbXNnc3RyICLR6O318O7t6Ofg9uj/IO/uIOru7Ozl7fLg8Oj/7CDiIPHy6OvlIP/n++rgIEMiCisKKyM6IHN5bnRheC5jOjM0MTAKK21zZ2lkICJubyBzeW5jaW5nIgorbXNnc3RyICLh5ecg8ejt9fDu7ejn4Pbo6CIKKworIzogc3ludGF4LmM6MzQxMworbXNnaWQgInN5bmNpbmcgc3RhcnRzICIKK21zZ3N0ciAi8ejt9fDu7ejn4Pbo/yDt4Pfg8uAgIgorCisjOiBzeW50YXguYzozNDE1IHN5bnRheC5jOjM0OTAKK21zZ2lkICIgbGluZXMgYmVmb3JlIHRvcCBsaW5lIgorbXNnc3RyICIg8fLw7uog7+Xw5eQg4uXw9e3l6SDx8vDu6u7pIgorCisjOiBzeW50YXguYzozNDIwCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggc3luYyBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g3evl7OXt8vsg8ejt9fDu7ejn4Pbo6CDx6O3y4Orx6PHgIC0tLSIKKworIzogc3ludGF4LmM6MzQyNQorbXNnaWQgIiIKKyJcbiIKKyJzeW5jaW5nIG9uIGl0ZW1zIgorbXNnc3RyICIiCisiXG4iCisi8ejt9fDu7ejn4Pbo/yDv7iD96+Xs5e3y4OwiCisKKyM6IHN5bnRheC5jOjM0MzEKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g0ejt8uDq8ej35fHq6OUg/evl7OXt8vsgLS0tIgorCisjOiBzeW50YXguYzozNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTI6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkyOiDR6O3y4Orx6Pfl8ero6SDq6+Dx8uXwICVzIO3lIO3g6eTl7SIKKworIzogc3ludGF4LmM6MzQ4MAorbXNnaWQgIm1pbmltYWwgIgorbXNnc3RyICLs6O3o7PPsICIKKworIzogc3ludGF4LmM6MzQ4NworbXNnaWQgIm1heGltYWwgIgorbXNnc3RyICLs4Orx6Ozz7CAiCisKKyM6IHN5bnRheC5jOjM0OTkKK21zZ2lkICI7IG1hdGNoICIKK21zZ3N0ciAiOyDx7u7y4uXy8fLi6OUgIgorCisjOiBzeW50YXguYzozNTAxCittc2dpZCAiIGxpbmUgYnJlYWtzIgorbXNnc3RyICIg7+Xw5e3u8e7iIPHy8O7qIgorCisjOiBzeW50YXguYzo0MTM1Cittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzkzOiDn5OXx/CDt5ev85/8g6PHv7uv85+7i4PL8IGdyb3VwW3RdaGVyZSIKKworIzogc3ludGF4LmM6NDE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk0OiBEaWRuJ3QgZmluZCByZWdpb24gaXRlbSBmb3IgJXMiCittc2dzdHIgIkUzOTQ6IN3r5ezl7fIg7uHr4PHy6CDk6/8gJXMg7eUg7eDp5OXtIgorCisjOiBzeW50YXguYzo0MTg3Cittc2dpZCAiRTM5NTogY29udGFpbnMgYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTU6IOfk5fH8IO3l6/zn/yDo8e/u6/zn7uLg8vwg4PDj8+zl7fIgY29udGFpbnMiCisKKyM6IHN5bnRheC5jOjQxOTgKK21zZ2lkICJFMzk2OiBjb250YWluZWRpbiBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5Njog5+Tl8fwg7eXr/Of/IOjx7+7r/Ofu4uDy/CDg8OPz7OXt8iBjb250YWluZWRpbiIKKworIzogc3ludGF4LmM6NDI3NgorbXNnaWQgIkUzOTc6IEZpbGVuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMzk3OiDS8OXh8+Xy8f8g8+rg5+Dy/CDo7P8g9ODp6+AiCisKKyM6IHN5bnRheC5jOjQ2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiDP8O7v8/nl7e4gJz0nOiAlcyIKKworIzogc3ludGF4LmM6NDc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogzeUg9eLg8uDl8iDg8OPz7OXt8u7iOiDx6O3y4Orx6Pfl8ero6SDw5ePo7u0gJXMiCisKKyM6IHN5bnRheC5jOjUxMDMKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDogyuvg8fLl8CDt5SDz6uDn4O0iCisKKyM6IHN5bnRheC5jOjUxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMTogUGF0dGVybiBkZWxpbWl0ZXIgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQwMTogzeUg7eDp5OXtIPDg5+Tl6+jy5ev8IPjg4evu7e7iOiAlcyIKKworIzogc3ludGF4LmM6NTIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDAyOiBHYXJiYWdlIGFmdGVyIHBhdHRlcm46ICVzIgorbXNnc3RyICJFNDAyOiDM8/Hu8CDv7vHr5SD44OHr7u3gOiAlcyIKKworIzogc3ludGF4LmM6NTMwNQorbXNnaWQgIkU0MDM6IHN5bnRheCBzeW5jOiBsaW5lIGNvbnRpbnVhdGlvbnMgcGF0dGVybiBzcGVjaWZpZWQgdHdpY2UiCittc2dzdHIgIiIKKyJFNDAzOiDx6O318O7t6Ofg9uj/IPHo7fLg6vHo8eA6IPjg4evu7SDv8O7k7uvm5e3o6SDx8vDu6ugg8+rg5+DtIOTi4Obk+yIKKworIzogc3ludGF4LmM6NTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA0OiBJbGxlZ2FsIGFyZ3VtZW50czogJXMiCittc2dzdHIgIkU0MDQ6IM3l5O7v8/Hy6Oz75SDg8OPz7OXt8vs6ICVzIgorCisjOiBzeW50YXguYzo1NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDU6IE1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MDU6IM/w7u/z+eXtIOft4Oog8ODi5e3x8uLgOiAlcyIKKworIzogc3ludGF4LmM6NTQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA2OiBFbXB0eSBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MDY6IM/z8fLu6SDg8OPz7OXt8jogJXMiCisKKyM6IHN5bnRheC5jOjU0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNzogJXMgbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTQwNzogJXMg7eUg5O7v8/Hq4OXy8f8g4iD98u7sIOzl8fLlIgorCisjOiBzeW50YXguYzo1NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDg6ICVzIG11c3QgYmUgZmlyc3QgaW4gY29udGFpbnMgbGlzdCIKK21zZ3N0ciAiRTQwODogJXMg5O7r5u3uIOH78vwg7+Xw4vvsIOIg8e/o8erlIGNvbnRhaW5zIgorCisjOiBzeW50YXguYzo1NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDk6IFVua25vd24gZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkU0MDk6IM3l6Ofi5fHy7eD/IOPw8+/v4DogJXMiCisKKyM6IHN5bnRheC5jOjU3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiDN5e/w4OLo6/zt4P8g7+7k6u7s4O3k4CA6c3ludGF4OiAlcyIKKworIzogc3ludGF4LmM6NjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDExOiBoaWdobGlnaHQgZ3JvdXAgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQxMTog4/Dz7+/gIO/u5PHi5fLq6CDx6O3y4Orx6PHgICVzIO3lIO3g6eTl7eAiCisKKyM6IHN5bnRheC5jOjYxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMjogTm90IGVub3VnaCBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTI6IM3lIPXi4PLg5fIg4PDj8+zl7fLu4jogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDEzOiBUb28gbWFueSBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTM6INHr6Pjq7uwg7O3u4+4g4PDj8+zl7fLu4jogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjE4NworbXNnaWQgIkU0MTQ6IGdyb3VwIGhhcyBzZXR0aW5ncywgaGlnaGxpZ2h0IGxpbmsgaWdub3JlZCIKK21zZ3N0ciAiRTQxNDog8yDj8PPv7/sg5fHy/CDx7uHx8uLl7e375SDt4PHy8O7p6ugsIPHx++vq4CDo4+3u8Ojw8+Xy8f8iCisKKyM6IHN5bnRheC5jOjYzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNTogdW5leHBlY3RlZCBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNTog7eXu5ujk4O3t++kg5+3g6iDw4OLl7fHy4uA6ICVzIgorCisjOiBzeW50YXguYzo2MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IO/w7u/z+eXtIOft4Oog8ODi5e3x8uLgOiAlcyIKKworIzogc3ludGF4LmM6NjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE3OiBtaXNzaW5nIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQxNzog7/Du7/P55e0g4PDj8+zl7fI6ICVzIgorCisjOiBzeW50YXguYzo2NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTg6IElsbGVnYWwgdmFsdWU6ICVzIgorbXNnc3RyICJFNDE4OiDN5eTu7/Px8ujs7uUg5+3g9+Xt6OU6ICVzIgorCisjOiBzeW50YXguYzo2NTM2Cittc2dpZCAiRTQxOTogRkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQxOTogzeXo5+Ll8fLt++kg9uLl8iDy5erx8uAiCisKKyM6IHN5bnRheC5jOjY1NDcKK21zZ2lkICJFNDIwOiBCRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDIwOiDN5ejn4uXx8u376SD24uXyIPTu7eAiCisKKyM6IHN5bnRheC5jOjY2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMTogQ29sb3IgbmFtZSBvciBudW1iZXIgbm90IHJlY29nbml6ZWQ6ICVzIgorbXNnc3RyICJFNDIxOiDI7P8g6OvoIO3u7OXwIPbi5fLgIO3lIOjn4uXx8u3uOiAlcyIKKworIzogc3ludGF4LmM6NjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIyOiB0ZXJtaW5hbCBjb2RlIHRvbyBsb25nOiAlcyIKK21zZ3N0ciAiRTQyMjog8evo+Oru7CDk6+jt7fvpIOru5CDy5fDs6O3g6+A6ICVzIgorCisjOiBzeW50YXguYzo2ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjM6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDIzOiDN5eTu7/Px8ujs++kg4PDj8+zl7fI6ICVzIgorCisjOiBzeW50YXguYzo3MzkwCittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDogyPHv7uv85/Pl8vH/IPHr6Pjq7uwg7O3u4+4g8ODn7fv1IODy8Ojh8/Lu4iDv7uTx4uXy6ugg8ejt8uDq8ejx4CIKKworIzogc3ludGF4LmM6NzkxMQorbXNnaWQgIkU2Njk6IFVucHJpbnRhYmxlIGNoYXJhY3RlciBpbiBncm91cCBuYW1lIgorbXNnc3RyICJFNjY5OiDN5e/l9+Dy7fvpIPHo7OLu6yDiIOjs5e3oIOPw8+/v+yIKKworIy4gVGhpcyBpcyBhbiBlcnJvciwgYnV0IHNpbmNlIHRoZXJlIHByZXZpb3VzbHkgd2FzIG5vIGNoZWNrIG9ubHkKKyMuICogZ2l2ZSBhIHdhcm5pbmcuCisjOiBzeW50YXguYzo3OTE4Cittc2dpZCAiVzE4OiBJbnZhbGlkIGNoYXJhY3RlciBpbiBncm91cCBuYW1lIgorbXNnc3RyICJXMTg6IM3l5O7v8/Hy6Oz76SDx6Ozi7usg4iDo7OXt6CDj8PPv7/siCisKKyM6IHRhZy5jOjkwCittc2dpZCAiRTU1NTogYXQgYm90dG9tIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiRTU1NTog4u3o5/Mg8fLl6uAg7OXy7uoiCisKKyM6IHRhZy5jOjkxCittc2dpZCAiRTU1NjogYXQgdG9wIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiRTU1Njog7eDi5fD18yDx8uXq4CDs5fLu6iIKKworIzogdGFnLmM6NDEyCittc2dpZCAiRTQyNTogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0MjU6IM3l4u7n7O7m7e4g7+Xw5eny6CDiIO/u5+j26P4g5O4g7+Xw4u7pIPHu4u/g5OD++eXpIOzl8uroIgorCisjOiB0YWcuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6IMzl8urgIO3lIO3g6eTl7eA6ICVzIgorCisjOiB0YWcuYzo1ODMKK21zZ2lkICIgICMgcHJpIGtpbmQgdGFnIgorbXNnc3RyICIgICMg7/DoIPLo7yAg7OXy6uAiCisKKyM6IHRhZy5jOjU4NgorbXNnaWQgImZpbGVcbiIKK21zZ3N0ciAi9ODp61xuIgorCisjLgorIy4gKiBBc2sgdG8gc2VsZWN0IGEgdGFnIGZyb20gdGhlIGxpc3QuCisjLiAqIFdoZW4gdXNpbmcgIjpzaWxlbnQiIGFzc3VtZSB0aGF0IDxDUj4gd2FzIGVudGVyZWQuCisjLgorIzogdGFnLmM6NzQ0Cittc2dpZCAiRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KTogIgorbXNnc3RyICLC++Hl8Ojy5SDt8+bt++kg7e7s5fAgKDxDUj4g5Ov/IO7y6uDn4Ck6IgorCisjOiB0YWcuYzo3ODQKK21zZ2lkICJFNDI3OiBUaGVyZSBpcyBvbmx5IG9uZSBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjc6IMXx8vwg8u7r/OruIO7k7eAg8e7i7+Dk4P754P8g7OXy6uAiCisKKyM6IHRhZy5jOjc4NgorbXNnaWQgIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjg6IM3l4u7n7O7m7e4g7+Xw5eny6CDiIO/u5+j26P4g5+Ag7+7x6+Xk7eXpIPHu4u/g5OD++eXpIOzl8uru6SIKKworIzogdGFnLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLU4OnrIFwiJXNcIiDt5SDx8/nl8fLi8+XyIgorCisjLiBHaXZlIGFuIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiBtYXRjaGluZyB0YWdzCisjOiB0YWcuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICVkIG9mICVkJXMiCittc2dzdHIgIuzl8urgICVkIOjnICVkJXMiCisKKyM6IHRhZy5jOjgyNgorbXNnaWQgIiBvciBtb3JlIgorbXNnc3RyICIg6CDh7uvl5SIKKworIzogdGFnLmM6ODI4Cittc2dpZCAiICBVc2luZyB0YWcgd2l0aCBkaWZmZXJlbnQgY2FzZSEiCittc2dzdHIgIiDI8e/u6/zn8+Xy8f8g7OXy6uAg8SDx6Ozi7uvg7Ogg4iDk8PPj7uwg8OXj6PHy8OUhIgorCisjOiB0YWcuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyOTogRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkU0Mjk6INTg6esgXCIlc1wiIO3lIPHz+eXx8uLz5fIiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6OTQxCittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyDKICDs5fLq5SAgICAgICDO0iAgIPHy8C4gIOIg9ODp6+Uv8uXq8fLlIgorCisjOiB0YWcuYzoxMzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyB0YWdzIGZpbGUgJXMiCittc2dzdHIgIs/u6PHqIOIg9ODp6+Ug7OXy7uogJXMiCisKKyM6IHRhZy5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IM/z8vwg6iD04Onr8yDs5fLu6iAlcyDu4fDl5+DtXG4iCisKKyM6IHRhZy5jOjIyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMTogRm9ybWF0IGVycm9yIGluIHRhZ3MgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0MzE6IM746OHq4CD07vDs4PLgIOIg9ODp6+Ug7OXy7uogXCIlc1wiIgorCisjOiB0YWcuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZm9yZSBieXRlICVsZCIKK21zZ3N0ciAiz+Xw5eQg4eDp8u7sICVsZCIKKworIzogdGFnLmM6MjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMyOiBUYWdzIGZpbGUgbm90IHNvcnRlZDogJXMiCittc2dzdHIgIkU0MzI6INTg6esg7OXy7uog7eUg7vLx7vDy6PDu4uDtOiAlcyIKKworIy4gbmV2ZXIgb3BlbmVkIGFueSB0YWdzIGZpbGUKKyM6IHRhZy5jOjIyODAKK21zZ2lkICJFNDMzOiBObyB0YWdzIGZpbGUiCittc2dzdHIgIkU0MzM6INTg6esg7OXy7uog7eUg7uHt4PDz5uXtIgorCisjOiB0YWcuYzozMDE2Cittc2dpZCAiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIKK21zZ3N0ciAiRTQzNDogzeUg7eDp5OXtIPjg4evu7SDs5fLq6CIKKworIzogdGFnLmM6MzAyNworbXNnaWQgIkU0MzU6IENvdWxkbid0IGZpbmQgdGFnLCBqdXN0IGd1ZXNzaW5nISIKK21zZ3N0ciAiRTQzNTogzOXy6uAg7eUg7eDp5OXt4Cwg7/vy4OXs8f8g8+Pg5ODy/CEiCisKKyM6IHRlcm0uYzoxNzU5Cittc2dpZCAiJyBub3Qga25vd24uIEF2YWlsYWJsZSBidWlsdGluIHRlcm1pbmFscyBhcmU6IgorbXNnc3RyICInIO3lIOjn4uXx8uXtLiDE7vHy8+/t+yDi8fLw7uXt7fvlIPLl8Ozo7eDr+zoiCisKKyM6IHRlcm0uYzoxNzgzCittc2dpZCAiZGVmYXVsdGluZyB0byAnIgorbXNnc3RyICLv7iDz7O7r9+Dt6P4gJyIKKworIzogdGVybS5jOjIxNDEKK21zZ2lkICJFNTU3OiBDYW5ub3Qgb3BlbiB0ZXJtY2FwIGZpbGUiCittc2dzdHIgIkU1NTc6IM3l4u7n7O7m7e4g7vLq8Pvy/CD04OnrIHRlcm1jYXAiCisKKyM6IHRlcm0uYzoyMTQ1Cittc2dpZCAiRTU1ODogVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1pbmZvIgorbXNnc3RyICJFNTU4OiDCIHRlcm1pbmZvIO3l8iDn4O/o8egg7uEg/fLu7CDy5fDs6O3g6+UiCisKKyM6IHRlcm0uYzoyMTQ3Cittc2dpZCAiRTU1OTogVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1NTk6IMIgdGVybWNhcCDt5fIg5+Dv6PHoIO7hIP3y7uwg8uXw7Ojt4OvlIgorCisjOiB0ZXJtLmM6MjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDM2OiBObyBcIiVzXCIgZW50cnkgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTQzNjogwiB0ZXJtY2FwIO3l8iDn4O/o8eggXCIlc1wiIgorCisjOiB0ZXJtLmM6Mjc4MAorbXNnaWQgIkU0Mzc6IHRlcm1pbmFsIGNhcGFiaWxpdHkgXCJjbVwiIHJlcXVpcmVkIgorbXNnc3RyICJFNDM3OiDy8OXh8+Xy8f8g8e/u8e7h7e7x8vwg8uXw7Ojt4OvgIFwiY21cIiIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0ZXJtLmM6NDk5MAorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwga2V5cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gyu3u7+roIPLl8Ozo7eDr4CAtLS0iCisKKyM6IHVpLmM6MjU4Cittc2dpZCAibmV3IHNoZWxsIHN0YXJ0ZWRcbiIKK21zZ3N0ciAi5+Dv8/HqIO3u4u7pIO7h7uvu9+roXG4iCisKKyM6IHVpLmM6MTg0MQorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICJWaW06IM746OHq4CD38uXt6P8g4uLu5OAsIOL79e7kLi4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6NDA1Cittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICLO8uzl7eAg7eXi7ufs7ubt4Dsg7/Du5O7r5uDy/CDi++/u6+3l7ejlIgorCisjOiB1bmRvLmM6NTYxCittc2dpZCAiRTQzODogdV91bmRvOiBsaW5lIG51bWJlcnMgd3JvbmciCittc2dzdHIgIkU0Mzg6IHVfdW5kbzog7eXv8ODi6Ov87fvlIO3u7OXw4CDx8vDu6iIKKworIzogdW5kby5jOjc1NworbXNnaWQgIjEgY2hhbmdlIgorbXNnc3RyICLF5Ojt8fLi5e3t7uUg6Ofs5e3l7ejlIgorCisjOiB1bmRvLmM6NzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFuZ2VzIgorbXNnc3RyICLI5+zl7eXt6Ok6ICVsZCIKKworIzogdW5kby5jOjgxMgorbXNnaWQgIkU0Mzk6IHVuZG8gbGlzdCBjb3JydXB0IgorbXNnc3RyICJFNDM5OiDP7uLw5ebkuO0g8e/o8e7qIO7y7OXt+yIKKworIzogdW5kby5jOjg0NAorbXNnaWQgIkU0NDA6IHVuZG8gbGluZSBtaXNzaW5nIgorbXNnc3RyICJFNDQwOiDv7vLl8P/t4CDx8vDu6uAg7vLs5e37IgorCisjLiBPbmx5IE1TIFZDIDQuMSBhbmQgZWFybGllciBjYW4gZG8gV2luMzJzCisjOiB2ZXJzaW9uLmM6NzIxCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYvMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiwuXw8ej/IPEg4/Dg9Oj35fHq6Owg6O3y5fD05enx7uwg5Ov/IE1TLVdpbmRvd3MgMTYvMzIg4ejyIgorCisjOiB2ZXJzaW9uLmM6NzIzCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiwuXw8ej/IPEg4/Dg9Oj35fHq6Owg6O3y5fD05enx7uwg5Ov/IE1TLVdpbmRvd3MgMzIg4ejyIgorCisjOiB2ZXJzaW9uLmM6NzI2Cittc2dpZCAiIGluIFdpbjMycyBtb2RlIgorbXNnc3RyICIg4iDw5ebo7OUgV2luMzJzIgorCisjOiB2ZXJzaW9uLmM6NzI4Cittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIiDxIO/u5OTl8Obq7ukgT0xFIgorCisjOiB2ZXJzaW9uLmM6NzMxCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IGNvbnNvbGUgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIsru7fHu6/zt4P8g4uXw8ej/IOTr/yBNUy1XaW5kb3dzIDMyIOHo8iIKKworIzogdmVyc2lvbi5jOjczNQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2IGJpdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiwuXw8ej/IOTr/yBNUy1XaW5kb3dzIDE2IOHo8iIKKworIzogdmVyc2lvbi5jOjczOQorbXNnaWQgIiIKKyJcbiIKKyIzMiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyLC5fDx6P8g5Ov/IE1TLURPUyAzMiDh6PIiCisKKyM6IHZlcnNpb24uYzo3NDEKK21zZ2lkICIiCisiXG4iCisiMTYgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiwuXw8ej/IOTr/yBNUy1ET1MgMTYg4ejyIgorCisjOiB2ZXJzaW9uLmM6NzQ3Cittc2dpZCAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyLC5fDx6P8g5Ov/IE1hY09TIFggKHVuaXgpIgorCisjOiB2ZXJzaW9uLmM6NzQ5Cittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIsLl8PHo/yDk6/8gTWFjT1MgWCIKKworIzogdmVyc2lvbi5jOjc1MgorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiwuXw8ej/IOTr/yBNYWNPUyIKKworIzogdmVyc2lvbi5jOjc1NworbXNnaWQgIiIKKyJcbiIKKyJSSVNDIE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyLC5fDx6P8g5Ov/IFJJU0MgT1MiCisKKyM6IHZlcnNpb24uYzo3NjcKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisix+Dv6+Dy6ug6ICIKKworIzogdmVyc2lvbi5jOjc5MyB2ZXJzaW9uLmM6MTE2MQorbXNnaWQgIk1vZGlmaWVkIGJ5ICIKK21zZ3N0ciAi0SDo5+zl7eXt6P/s6Cwg4u3l8bjt7fvs6CAiCisKKyM6IHZlcnNpb24uYzo4MDAKK21zZ2lkICIiCisiXG4iCisiQ29tcGlsZWQgIgorbXNnc3RyICIiCisiXG4iCisi0eru7O/o6+jw7uLg7SAiCisKKyM6IHZlcnNpb24uYzo4MDMKK21zZ2lkICJieSAiCittc2dzdHIgIiAiCisKKyM6IHZlcnNpb24uYzo4MTUKK21zZ2lkICIiCisiXG4iCisiSHVnZSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIs7j8O7s7eD/IOLl8PHo/yAiCisKKyM6IHZlcnNpb24uYzo4MTgKK21zZ2lkICIiCisiXG4iCisiQmlnIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiwe7r/Pjg/yDi5fDx6P8gIgorCisjOiB2ZXJzaW9uLmM6ODIxCittc2dpZCAiIgorIlxuIgorIk5vcm1hbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIs7h+/ft4P8g4uXw8ej/ICIKKworIzogdmVyc2lvbi5jOjgyNAorbXNnaWQgIiIKKyJcbiIKKyJTbWFsbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIszg6+D/IOLl8PHo/yAiCisKKyM6IHZlcnNpb24uYzo4MjYKK21zZ2lkICIiCisiXG4iCisiVGlueSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIsLl8PHo/yBcIsrw7vXgXCIgIgorCisjOiB2ZXJzaW9uLmM6ODMyCittc2dpZCAid2l0aG91dCBHVUkuIgorbXNnc3RyICLh5ecg4/Dg9Oj35fHq7uPuIOjt8uXw9OXp8eAuIgorCisjOiB2ZXJzaW9uLmM6ODM3Cittc2dpZCAid2l0aCBHVEsyLUdOT01FIEdVSS4iCittc2dzdHIgIvEg4/Dg9Oj35fHq6Owg6O3y5fD05enx7uwgR1RLMi1HTk9NRS4iCisKKyM6IHZlcnNpb24uYzo4MzkKK21zZ2lkICJ3aXRoIEdUSy1HTk9NRSBHVUkuIgorbXNnc3RyICLxIOPw4PTo9+Xx6ujsIOjt8uXw9OXp8e7sIEdUSy1HTk9NRS4iCisKKyM6IHZlcnNpb24uYzo4NDMKK21zZ2lkICJ3aXRoIEdUSzIgR1VJLiIKK21zZ3N0ciAi8SDj8OD06Pfl8ero7CDo7fLl8PTl6fHu7CBHVEsyLiIKKworIzogdmVyc2lvbi5jOjg0NQorbXNnaWQgIndpdGggR1RLIEdVSS4iCittc2dzdHIgIvEg4/Dg9Oj35fHq6Owg6O3y5fD05enx7uwgR1RLLiIKKworIzogdmVyc2lvbi5jOjg1MAorbXNnaWQgIndpdGggWDExLU1vdGlmIEdVSS4iCittc2dzdHIgIvEg4/Dg9Oj35fHq6Owg6O3y5fD05enx7uwgWDExLU1vdGlmLiIKKworIzogdmVyc2lvbi5jOjg1NAorbXNnaWQgIndpdGggWDExLW5lWHRhdyBHVUkuIgorbXNnc3RyICLxIOPw4PTo9+Xx6ujsIOjt8uXw9OXp8e7sIFgxMS1uZVh0YXcuIgorCisjOiB2ZXJzaW9uLmM6ODU2Cittc2dpZCAid2l0aCBYMTEtQXRoZW5hIEdVSS4iCittc2dzdHIgIvEg4/Dg9Oj35fHq6Owg6O3y5fD05enx7uwgWDExLUF0aGVuYS4iCisKKyM6IHZlcnNpb24uYzo4NjAKK21zZ2lkICJ3aXRoIEJlT1MgR1VJLiIKK21zZ3N0ciAi8SDj8OD06Pfl8ero7CDo7fLl8PTl6fHu7CBCZU9TLiIKKworIzogdmVyc2lvbi5jOjg2MworbXNnaWQgIndpdGggUGhvdG9uIEdVSS4iCittc2dzdHIgIvEg4/Dg9Oj35fHq6Owg6O3y5fD05enx7uwgUGhvdG9uLiIKKworIzogdmVyc2lvbi5jOjg2NgorbXNnaWQgIndpdGggR1VJLiIKK21zZ3N0ciAi8SDj8OD06Pfl8ero7CDo7fLl8PTl6fHu7C4iCisKKyM6IHZlcnNpb24uYzo4NjkKK21zZ2lkICJ3aXRoIENhcmJvbiBHVUkuIgorbXNnc3RyICLxIOPw4PTo9+Xx6ujsIOjt8uXw9OXp8e7sIENhcmJvbi4iCisKKyM6IHZlcnNpb24uYzo4NzIKK21zZ2lkICJ3aXRoIENvY29hIEdVSS4iCittc2dzdHIgIvEg4/Dg9Oj35fHq6Owg6O3y5fD05enx7uwgQ29jb2EuIgorCisjOiB2ZXJzaW9uLmM6ODc1Cittc2dpZCAid2l0aCAoY2xhc3NpYykgR1VJLiIKK21zZ3N0ciAi8SDq6+Dx8ej35fHq6Owg4/Dg9Oj35fHq6Owg6O3y5fD05enx7uwuIgorCisjOiB2ZXJzaW9uLmM6ODg2Cittc2dpZCAiICBGZWF0dXJlcyBpbmNsdWRlZCAoKykgb3Igbm90ICgtKTpcbiIKK21zZ3N0ciAiICDC6uv+97jt7fvlICgrKSDoIO7y6uv+97jt7fvlICgtKSDu8e7h5e3t7vHy6DpcbiIKKworIzogdmVyc2lvbi5jOjg5OAorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICAgICAg7uH55fHo8fLl7O376SD04OnrIHZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjkwMworbXNnaWQgIiAgICAgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICAg7+7r/Ofu4uDy5ev88ero6SD04OnrIHZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjkwOAorbXNnaWQgIiAybmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICDi8u7w7ukg7+7r/Ofu4uDy5ev88ero6SD04OnrIHZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjkxMworbXNnaWQgIiAzcmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICDy8OXy6Okg7+7r/Ofu4uDy5ev88ero6SD04OnrIHZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjkxOAorbXNnaWQgIiAgICAgIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICAgIO/u6/zn7uLg8uXr/PHq6Okg9ODp6yBleHJjOiBcIiIKKworIzogdmVyc2lvbi5jOjkyMworbXNnaWQgIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAg4vLu8O7pIO/u6/zn7uLg8uXr/PHq6Okg9ODp6yBleHJjOiBcIiIKKworIzogdmVyc2lvbi5jOjkyOQorbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICAgICDu4fnl8ejx8uXs7fvpIPTg6esgZ3ZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjkzMworbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICDv7uv85+7i4PLl6/zx6ujpIPTg6esgZ3ZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjkzNworbXNnaWQgIjJuZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIOLy7vDu6SDv7uv85+7i4PLl6/zx6ujpIPTg6esgZ3ZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjk0MgorbXNnaWQgIjNyZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIPLw5fLo6SDv7uv85+7i4PLl6/zx6ujpIPTg6esgZ3ZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjk0OQorbXNnaWQgIiAgICBzeXN0ZW0gbWVudSBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICAgICAgIO7h+eXx6PHy5ezt++kg9ODp6yDs5e3+OiBcIiIKKworIzogdmVyc2lvbi5jOjk1NworbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICAgICAgICAgIOft4Pfl7ejlICRWSU0g7+4g8+zu6/fg7ej+OiBcIiIKKworIzogdmVyc2lvbi5jOjk2MworbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiICAg5+3g9+Xt6OUgJFZJTVJVTlRJTUUg7+4g8+zu6/fg7ej+OiBcIiIKKworIzogdmVyc2lvbi5jOjk2NworbXNnaWQgIkNvbXBpbGF0aW9uOiAiCittc2dzdHIgIs/g8ODs5fLw+yDq7uzv6Ov/9ujoOiAiCisKKyM6IHZlcnNpb24uYzo5NzMKK21zZ2lkICJDb21waWxlcjogIgorbXNnc3RyICLK7uzv6Ov/8u7wOiAiCisKKyM6IHZlcnNpb24uYzo5NzgKK21zZ2lkICJMaW5raW5nOiAiCittc2dzdHIgItHh7vDq4DogIgorCisjOiB2ZXJzaW9uLmM6OTgzCittc2dpZCAiICBERUJVRyBCVUlMRCIKK21zZ3N0ciAiICDO0svAxM7XzcDfINHBztDKwCIKKworIzogdmVyc2lvbi5jOjEwMjIKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIDo6OiBWaSBJTXByb3ZlZCAo0+vz9/jl7e376SBWaSkgOjo6INDz8fHq4P8g4uXw8ej/IgorCisjOiB2ZXJzaW9uLmM6MTAyNAorbXNnaWQgInZlcnNpb24gIgorbXNnc3RyICLi5fDx6P8gIgorCisjOiB2ZXJzaW9uLmM6MTAyNQorbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAiwfDg7CDM7u7r5e3g4PAg6CDk8PPj6OUiCisKKyM6IHZlcnNpb24uYzoxMDI5Cittc2dpZCAiVmltIGlzIG9wZW4gc291cmNlIGFuZCBmcmVlbHkgZGlzdHJpYnV0YWJsZSIKK21zZ3N0ciAiVmltIP3y7iDx4u7h7uTt7iDw4PHv8O7x8vDg7f/l7OD/IO/w7uPw4Ozs4CDxIO7y6vD78vvsIOru5O7sIgorCisjOiB2ZXJzaW9uLmM6MTAzMQorbXNnaWQgIkhlbHAgcG9vciBjaGlsZHJlbiBpbiBVZ2FuZGEhIgorbXNnc3RyICLB5eTt++wg5OXy/+wg4iDT4+Dt5OUg7fPm7eAg4uD44CDv7uzu+fwhIgorCisjOiB2ZXJzaW9uLmM6MTAzMgorbXNnaWQgInR5cGUgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgIu3g4eXw6PLlIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIOTr/yDk7u/u6+3o8uXr/O3u6SDo7fTu8Ozg9ujoIgorCisjOiB2ZXJzaW9uLmM6MTAzNAorbXNnaWQgInR5cGUgIDpxPEVudGVyPiAgICAgICAgICAgICAgIHRvIGV4aXQgICAgICAgICAiCittc2dzdHIgIu3g4eXw6PLlIDpxPEVudGVyPiAgICAgICAgICAgICAgIPfy7uH7IOL76fLoIOjnIO/w7uPw4Ozs+yAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTAzNQorbXNnaWQgInR5cGUgIDpoZWxwPEVudGVyPiAgb3IgIDxGMT4gIGZvciBvbi1saW5lIGhlbHAiCittc2dzdHIgIu3g4eXw6PLlIDpoZWxwPEVudGVyPiDo6+ggPEYxPiAgIOTr/yDv7uvz9+Xt6P8g8e/w4OLq6CAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTAzNgorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgIu3g4eXw6PLlIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIPfy7uH7IPPn7eDy/CDu4SD98u7pIOLl8PHo6CAgIgorCisjOiB2ZXJzaW9uLmM6MTAzOQorbXNnaWQgIlJ1bm5pbmcgaW4gVmkgY29tcGF0aWJsZSBtb2RlIgorbXNnc3RyICLQ4OHu8uAg4iBWaS3x7uLs5fHy6Ozu7CDw5ebo7OUiCisKKyM6IHZlcnNpb24uYzoxMDQwCittc2dpZCAidHlwZSAgOnNldCBub2NwPEVudGVyPiAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyIKK21zZ3N0ciAi7eDh5fDo8uUgOnNldCBub2NwPEVudGVyPiAgICAgICAg5Ov/IO/l8OX17uTgIOIg8OXm6OwgVmltICAgICAiCisKKyM6IHZlcnNpb24uYzoxMDQxCittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAi7eDh5fDo8uUgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4g5Ov/IOTu7+7r7ejy5ev87e7pIOjt9O7w7OD26OgiCisKKyM6IHZlcnNpb24uYzoxMDU2Cittc2dpZCAibWVudSAgSGVscC0+T3JwaGFucyAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uICAgICIKK21zZ3N0ciAi7OXt/iDR7/Dg4urgLT7R6PDu8vsgICAgICAgICAgICAg5Ov/IO/u6/P35e3o/yDo7fTu8Ozg9ujoICAgICAiCisKKyM6IHZlcnNpb24uYzoxMDU4Cittc2dpZCAiUnVubmluZyBtb2RlbGVzcywgdHlwZWQgdGV4dCBpcyBpbnNlcnRlZCIKK21zZ3N0ciAiweXn8OXm6Ozt4P8g8ODh7vL7LCDi8fLg4urgIOLi5eS47e3u4+4g8uXq8fLgIgorCisjOiB2ZXJzaW9uLmM6MTA1OQorbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIEluc2VydCBNb2RlICAiCittc2dzdHIgIuzl7f4gz/Dg4urgLT7O4fno5SDN4PHy8O7p6ugtPtDl5ujsIMLx8uDi6uggICAgICAgICAgICAgICAgICAgICAiCisKKyM6IHZlcnNpb24uYzoxMDYwCittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHR3byBtb2RlcyAgICAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5Ov/IOTi8/Ug8OXm6Ozu4iAgICAgICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjEwNjQKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBWaSBDb21wYXRpYmxlIgorbXNnc3RyICLs5e3+IM/w4OLq4C0+zuH56OUgzeDx8vDu6eroLT7R7uLs5fHy6Ozu8fL8IPEgVmkgICAgICAgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTA2NQorbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBWaW0gZGVmYXVsdHMgICAiCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOTr/yDv5fDl9e7k4CDiIPDl5ujsIFZpbSAgICAgICAiCisKKyM6IHZlcnNpb24uYzoxMTEyCittc2dpZCAiU3BvbnNvciBWaW0gZGV2ZWxvcG1lbnQhIgorbXNnc3RyICLP7uzu4+jy5SDiIPDg5/Dg4e7y6uUgVmltISIKKworIzogdmVyc2lvbi5jOjExMTMKK21zZ2lkICJCZWNvbWUgYSByZWdpc3RlcmVkIFZpbSB1c2VyISIKK21zZ3N0ciAi0fLg7fzy5SDn4PDl4+jx8vDo8O7i4O3t++wg7+7r/Ofu4uDy5evl7CBWaW0hIgorCisjOiB2ZXJzaW9uLmM6MTExNgorbXNnaWQgInR5cGUgIDpoZWxwIHNwb25zb3I8RW50ZXI+ICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgIu3g4eXw6PLlIDpoZWxwIHNwb25zb3I8RW50ZXI+ICAgIOTr/yDv7uvz9+Xt6P8g6O307vDs4Pbo6CAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTExNworbXNnaWQgInR5cGUgIDpoZWxwIHJlZ2lzdGVyPEVudGVyPiAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgIu3g4eXw6PLlIDpoZWxwIHJlZ2lzdGVyPEVudGVyPiAgIOTr/yDv7uvz9+Xt6P8g6O307vDs4Pbo6CAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTExOQorbXNnaWQgIm1lbnUgIEhlbHAtPlNwb25zb3IvUmVnaXN0ZXIgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIuzl7f4g0e/w4OLq4C0+z+7s7vn8L9Dl4+jx8vDg9uj/IOTr/yDv7uvz9+Xt6P8g6O307vDs4Pbo6CAgICAgICAiCisKKyM6IHZlcnNpb24uYzoxMTI5Cittc2dpZCAiV0FSTklORzogV2luZG93cyA5NS85OC9NRSBkZXRlY3RlZCIKK21zZ3N0ciAiz9DFxNPP0MXGxMXNyMU6IO7h7eDw8+bl7eAgV2luZG93cyA5NS85OC9NRSIKKworIzogdmVyc2lvbi5jOjExMzIKK21zZ2lkICJ0eXBlICA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICLt4OHl8Ojy5SA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICDk6/8g7+7r8/fl7ej/IOjt9O7w7OD26OggICAgICIKKworIzogd2luZG93LmM6MjAzCittc2dpZCAiRTQ0MTogVGhlcmUgaXMgbm8gcHJldmlldyB3aW5kb3ciCittc2dzdHIgIkU0NDE6IM7q7e4g7/Dl5O/w7vHs7vLw4CDu8vHz8vHy4vPl8iIKKworIzogd2luZG93LmM6NTgxCittc2dpZCAiRTQ0MjogQ2FuJ3Qgc3BsaXQgdG9wbGVmdCBhbmQgYm90cmlnaHQgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiRTQ0Mjogzurt7iDt5SDs7ubl8iDh+/L8IO7k7e7i8OXs5e3t7iDx6+Xi4CDi4uXw9fMg6CDx7/Dg4uAg4u3o5/MiCisKKyM6IHdpbmRvdy5jOjEzNDAKK21zZ2lkICJFNDQzOiBDYW5ub3Qgcm90YXRlIHdoZW4gYW5vdGhlciB3aW5kb3cgaXMgc3BsaXQiCittc2dzdHIgIkU0NDM6IM3l4u7n7O7m7e4g7+7s5e3/8vwg7OXx8uDs6Cwg7+7q4CDk8PPj7uUg7urt7iDw4Ofk5evl7e4iCisKKyM6IHdpbmRvdy5jOjE4MzYKK21zZ2lkICJFNDQ0OiBDYW5ub3QgY2xvc2UgbGFzdCB3aW5kb3ciCittc2dzdHIgIkU0NDQ6IM3l6/zn/yDn4Orw+/L8IO/u8evl5O3l5SDu6u3uIgorCisjOiB3aW5kb3cuYzoyNTY3Cittc2dpZCAiQWxyZWFkeSBvbmx5IG9uZSB3aW5kb3ciCittc2dzdHIgIs3gIP3q8ODt5SDi8eXj7iDu5O3uIO7q7e4iCisKKyM6IHdpbmRvdy5jOjI2MTQKK21zZ2lkICJFNDQ1OiBPdGhlciB3aW5kb3cgY29udGFpbnMgY2hhbmdlcyIKK21zZ3N0ciAiRTQ0NTogwiDk8PPj7uwg7urt5SDl8fL8IO3l8e718ODtuO3t++Ug6Ofs5e3l7ej/IgorCisjOiB3aW5kb3cuYzo0NDgwCittc2dpZCAiRTQ0NjogTm8gZmlsZSBuYW1lIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTQ0NjogzeXyIOjs5e3oIPTg6evgIOIg7+7n6Pbo6CDq8/Dx7vDgIgorCisjOiB3aW5kb3cuYzo0NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDc6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTQ0Nzog1ODp6yBcIiVzXCIg7eUg7eDp5OXtIO/uIOjn4uXx8u377CDv8/L/7CIKKworIzogaWZfcGVybC54czozMjYgZ2xvYmFscy5oOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MDogQ291bGQgbm90IGxvYWQgbGlicmFyeSAlcyIKK21zZ3N0ciAiRTM3MDogzeXi7ufs7ubt7iDn4OPw8+fo8vwg4ejh6+ju8uXq8yAlcyIKKworIzogaWZfcGVybC54czo1NTQKK21zZ2lkICJTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgUGVybCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisiyOfi6O3o8uUsIOTg7e3g/yDq7uzg7eTgIO7y6uv+9+Xt4Dog7eXi7ufs7ubt7iDn4OPw8+fo8vwg4ejh6+ju8uXq8yBQZXJsIgorCisjOiBpZl9wZXJsLnhzOjYwNworbXNnaWQgIkUyOTk6IFBlcmwgZXZhbHVhdGlvbiBmb3JiaWRkZW4gaW4gc2FuZGJveCB3aXRob3V0IHRoZSBTYWZlIG1vZHVsZSIKK21zZ3N0ciAiIgorIkUyOTk6IM3lIOTu7/Px6uDl8vH/IOL79+jx6+Xt6OUgUGVybCDiIO/l8e737ej25SDh5ecg7O7k8+v/IOHl5+7v4PHt7vHy6CIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODMKK21zZ2lkICJFZGl0IHdpdGggJm11bHRpcGxlIFZpbXMiCittc2dzdHIgItDl5ODq8ujw7uLg8vwg4iAm8ODn7fv1IFZpbS3g9SIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODkKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgItDl5ODq8ujw7uLg8vwg4iAm7uTt7uwgVmltIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjU5OAorbXNnaWQgIiZEaWZmIHdpdGggVmltIgorbXNnc3RyICIm0fDg4u3o8vwg8SDv7uzu+fz+IFZpbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo2MTEKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAi0OUm5ODq8ujw7uLg8vwg8SDv7uzu+fz+IFZpbSIKKworIy4gTm93IGNvbmNhdGVuYXRlCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjYzMworbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICLQ5eTg6vLo8O7i4PL8IOIg5+Dv8/nl7e3u7CBWaW0gLSAmIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjc0NgorbXNnaWQgIkVkaXRzIHRoZSBzZWxlY3RlZCBmaWxlKHMpIHdpdGggVmltIgorbXNnc3RyICLQ5eTg6vLo8O7i4PL8IOL75OXr5e3t++Ug9ODp6/sg8SDv7uzu+fz+IFZpbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4ODUgR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjYKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwcm9jZXNzOiBDaGVjayBpZiBndmltIGlzIGluIHlvdXIgcGF0aCEiCittc2dzdHIgIs746OHq4CDx7ufk4O3o/yDv8O725fHx4Dog7/Du4uXw/PLlIOTu8fLz7+3u8fL8IGd2aW0g4iDv8/LoISIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4ODYgR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDAgR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjcKK21zZ2lkICJndmltZXh0LmRsbCBlcnJvciIKK21zZ3N0ciAi7vjo4ergIGd2aW1leHQuZGxsIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjg5OQorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAi0evo+Oru7CDk6+jt7fvpIO/z8vwhIgorCisjOiBnbG9iYWxzLmg6MTAyMgorbXNnaWQgIi0tTm8gbGluZXMgaW4gYnVmZmVyLS0iCittc2dzdHIgIi0tIM3l8iDx8vDu6iDiIOHz9OXw5SAtLSIKKworIy4KKyMuICogVGhlIGVycm9yIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHNoYXJlZCBhcmUgaW5jbHVkZWQgaGVyZS4KKyMuICogRXhjbHVkZWQgYXJlIGVycm9ycyB0aGF0IGFyZSBvbmx5IHVzZWQgb25jZSBhbmQgZGVidWdnaW5nIG1lc3NhZ2VzLgorIy4KKyM6IGdsb2JhbHMuaDoxMTg1Cittc2dpZCAiRTQ3MDogQ29tbWFuZCBhYm9ydGVkIgorbXNnc3RyICJFNDcwOiDC++/u6+3l7ejlIOru7ODt5Psg7/Dl8OLg7e4iCisKKyM6IGdsb2JhbHMuaDoxMTg2Cittc2dpZCAiRTQ3MTogQXJndW1lbnQgcmVxdWlyZWQiCittc2dzdHIgIkU0NzE6INLw5eHz5fLx/yDz6uDn4PL8IO/g8ODs5fLwIgorCisjOiBnbG9iYWxzLmg6MTE4NworbXNnaWQgIkUxMDogXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJiIKK21zZ3N0ciAiRTEwOiDP7vHr5SBcXCDk7uvm5e0g6OTy6CDx6Ozi7usgLywgPyDo6+ggJiIKKworIzogZ2xvYmFscy5oOjExODkKK21zZ2lkICJFMTE6IEludmFsaWQgaW4gY29tbWFuZC1saW5lIHdpbmRvdzsgPENSPiBleGVjdXRlcywgQ1RSTC1DIHF1aXRzIgorbXNnc3RyICIiCisiRTExOiDN5eTu7/Px8ujs7iDiIO7q7eUg6u7s4O3k7e7pIPHy8O7q6DsgPENSPiDi++/u6+3l7ejlLCBDVFJMLUMg4vv17uQiCisKKyM6IGdsb2JhbHMuaDoxMTkxCittc2dpZCAiRTEyOiBDb21tYW5kIG5vdCBhbGxvd2VkIGZyb20gZXhyYy92aW1yYyBpbiBjdXJyZW50IGRpciBvciB0YWcgc2VhcmNoIgorbXNnc3RyICIiCisiRTEyOiDK7uzg7eTgIO3lIOTu7/Px6uDl8vH/IOIgZXhyYy92aW1yYyDiIPLl6vP55ewg6uDy4Ovu4+Ug6OvoIO/u6PHq5SDs5fLu6iIKKworIzogZ2xvYmFscy5oOjExOTMKK21zZ2lkICJFMTcxOiBNaXNzaW5nIDplbmRpZiIKK21zZ3N0ciAiRTE3MTogzvLx8/Lx8uLz5fIg6u7s4O3k4CA6ZW5kaWYiCisKKyM6IGdsb2JhbHMuaDoxMTk0Cittc2dpZCAiRTYwMDogTWlzc2luZyA6ZW5kdHJ5IgorbXNnc3RyICJFNjAwOiDO8vHz8vHy4vPl8iDq7uzg7eTgIDplbmR0cnkiCisKKyM6IGdsb2JhbHMuaDoxMTk1Cittc2dpZCAiRTE3MDogTWlzc2luZyA6ZW5kd2hpbGUiCittc2dzdHIgIkUxNzA6IM7y8fPy8fLi8+XyIOru7ODt5OAgOmVuZHdoaWxlIgorCisjOiBnbG9iYWxzLmg6MTE5NgorbXNnaWQgIkU1ODg6IDplbmR3aGlsZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4ODogyu7s4O3k4CA6ZW5kd2hpbGUg4eXnIO/g8O3u6SDq7uzg7eT7IDp3aGlsZSIKKworIzogZ2xvYmFscy5oOjExOTgKK21zZ2lkICJFMTM6IEZpbGUgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxMzog1ODp6yDx8/nl8fLi8+XyICjk6/8g7+Xw5efg7+jx6CDk7uHg4vzy5SAhKSIKKworIzogZ2xvYmFscy5oOjExOTkKK21zZ2lkICJFNDcyOiBDb21tYW5kIGZhaWxlZCIKK21zZ3N0ciAiRTQ3MjogzeUg8+Tg6+7x/CDi++/u6+3o8vwg6u7s4O3k8yIKKworIzogZ2xvYmFscy5oOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNDogVW5rbm93biBmb250c2V0OiAlcyIKK21zZ3N0ciAiRTIzNDogzeXo5+Ll8fLt++kg+PDo9PLu4u7pIO3g4e7wOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogVW5rbm93biBmb250OiAlcyIKK21zZ3N0ciAiRTIzNTogzeXo5+Ll8fLt++kg+PDo9PI6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6INjw6PTyIFwiJXNcIiDt5SD/4uv/5fLx/yDs7u3u+Ojw6O3t++wg+PDo9PLu7CIKKworIzogZ2xvYmFscy5oOjEyMTAKK21zZ2lkICJFNDczOiBJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiRTQ3Mzogwu3z8vDl7e3//yDu+Ojh6uAiCisKKyM6IGdsb2JhbHMuaDoxMjExCittc2dpZCAiSW50ZXJydXB0ZWQiCittc2dzdHIgIs/w5fDi4O3uIgorCisjOiBnbG9iYWxzLmg6MTIxMgorbXNnaWQgIkUxNDogSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFMTQ6IM3l5O7v8/Hy6Oz76SDg5PDl8SIKKworIzogZ2xvYmFscy5oOjEyMTMKK21zZ2lkICJFNDc0OiBJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJFNDc0OiDN5eTu7/Px8ujs++kg4PDj8+zl7fIiCisKKyM6IGdsb2JhbHMuaDoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NzU6IEludmFsaWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDc1OiDN5eTu7/Px8ujs++kg4PDj8+zl7fI6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogJXMiCittc2dzdHIgIkUxNTogzeXk7u/z8fLo7O7lIOL78ODm5e3o5TogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjE4Cittc2dpZCAiRTE2OiBJbnZhbGlkIHJhbmdlIgorbXNnc3RyICJFMTY6IM3l5O7v8/Hy6Oz76SDk6ODv4Ofu7SIKKworIzogZ2xvYmFscy5oOjEyMTkKK21zZ2lkICJFNDc2OiBJbnZhbGlkIGNvbW1hbmQiCittc2dzdHIgIkU0NzY6IM3l5O7v8/Hy6Ozg/yDq7uzg7eTgIgorCisjOiBnbG9iYWxzLmg6MTIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCIg/+Lr/+Xy8f8g6uDy4Ovu4+7sIgorCisjOiBnbG9iYWxzLmg6MTIyNAorbXNnaWQgIkUxODogVW5leHBlY3RlZCBjaGFyYWN0ZXJzIGJlZm9yZSAnPSciCittc2dzdHIgIkUxODogz+Xw5eQgJz0nIO7h7eDw8+bl7fsg7eXu5ujk4O3t++Ug8ejs4u7r+yIKKworIzogZ2xvYmFscy5oOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NDogTGlicmFyeSBjYWxsIGZhaWxlZCBmb3IgXCIlcygpXCIiCittc2dzdHIgIkUzNjQ6IM3l8+Tg9+376SDi++fu4iD08+3q9ujoIFwiJXMoKVwiIOjnIOHo4evo7vLl6ugiCisKKyM6IGdsb2JhbHMuaDoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDg6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgZnVuY3Rpb24gJXMiCittc2dzdHIgIkU0NDg6IM3lIPPk4Ovu8fwg5+Dj8PPn6PL8IPTz7er26P4gJXMg6Ocg4ejh6+ju8uXq6CIKKworIzogZ2xvYmFscy5oOjEyMzUKK21zZ2lkICJFMTk6IE1hcmsgaGFzIGludmFsaWQgbGluZSBudW1iZXIiCittc2dzdHIgIkUxOTogzvLs5fLq4CDz6uDn++Lg5fIg7eAg7eXv8ODi6Ov87fvpIO3u7OXwIPHy8O7q6CIKKworIzogZ2xvYmFscy5oOjEyMzYKK21zZ2lkICJFMjA6IE1hcmsgbm90IHNldCIKK21zZ3N0ciAizvLs5fLq4CDt5SDu7/Dl5OXr5e3gIgorCisjOiBnbG9iYWxzLmg6MTIzNworbXNnaWQgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIKK21zZ3N0ciAiRTIxOiDI5+zl7eXt6P8g7eXi7ufs7ubt+ywg8uDqIOrg6iDu8urr/vfl7eAg7u/26P8gJ21vZGlmaWFibGUnIgorCisjOiBnbG9iYWxzLmg6MTIzOAorbXNnaWQgIkUyMjogU2NyaXB0cyBuZXN0ZWQgdG9vIGRlZXAiCittc2dzdHIgIkUyMjog0evo+Oru7CDj6/Ph7uruIOLr7ubl7e375SDx9uXt4PDo6CIKKworIzogZ2xvYmFscy5oOjEyMzkKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6INHu8eXk7ejpIPTg6esg7eUg8fP55fHy4vPl8iIKKworIzogZ2xvYmFscy5oOjEyNDAKK21zZ2lkICJFMjQ6IE5vIHN1Y2ggYWJicmV2aWF0aW9uIgorbXNnc3RyICJFMjQ6IM3l8iDy4Oru4+4g8e7q8OD55e3o/yIKKworIzogZ2xvYmFscy5oOjEyNDEKK21zZ2lkICJFNDc3OiBObyAhIGFsbG93ZWQiCittc2dzdHIgIkU0Nzc6ICEg7eUg5O7v8/Hq4OXy8f8iCisKKyM6IGdsb2JhbHMuaDoxMjQzCittc2dpZCAiRTI1OiBHVUkgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAiIgorIkUyNTogwu7n7O7m7e7x8vwg6PHv7uv85+7i4O3o/yDj8OD06Pfl8eru4+4g6O3y5fD05enx4CDi++rr/vfl7eAg7/DoICIKKyLq7uzv6Ov/9ujoIgorCisjOiBnbG9iYWxzLmg6MTI0NgorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI2OiDI4vDo8iDi++rr/vfl7SDv8Ogg6u7s7+jr//bo6FxuIgorCisjOiBnbG9iYWxzLmg6MTI0OQorbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjc6INTg8PHoIOL76uv+9+Xt7iDv8Ogg6u7s7+jr//bo6FxuIgorCisjOiBnbG9iYWxzLmg6MTI1MgorbXNnaWQgIkU4MDA6IEFyYWJpYyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkU4MDA6IMDw4OHx6ujpIOL76uv+9+XtIO/w6CDq7uzv6Ov/9ujoXG4iCisKKyM6IGdsb2JhbHMuaDoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODogTm8gc3VjaCBoaWdobGlnaHQgZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkUyODogw/Dz7+/gIO/u5PHi5fLq6CDx6O3y4Orx6PHgICVzIO3lIPHz+eXx8uLz5fIiCisKKyM6IGdsb2JhbHMuaDoxMjU3Cittc2dpZCAiRTI5OiBObyBpbnNlcnRlZCB0ZXh0IHlldCIKK21zZ3N0ciAiRTI5OiDP7urgIO3l8iDi8fLg4uvl7e3u4+4g8uXq8fLgIgorCisjOiBnbG9iYWxzLmg6MTI1OAorbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6IM/w5eT75PP55ekg6u7s4O3k7e7pIPHy8O7q6CDt5fIiCisKKyM6IGdsb2JhbHMuaDoxMjU5Cittc2dpZCAiRTMxOiBObyBzdWNoIG1hcHBpbmciCittc2dzdHIgIkUzMTog0uDq7ukg7/Do4v/n6ugg7eUg8fP55fHy4vPl8iIKKworIzogZ2xvYmFscy5oOjEyNjAKK21zZ2lkICJFNDc5OiBObyBtYXRjaCIKK21zZ3N0ciAiRTQ3OTogzeXyIPHu7vLi5fLx8uLo/yIKKworIzogZ2xvYmFscy5oOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4MDogTm8gbWF0Y2g6ICVzIgorbXNnc3RyICJFNDgwOiDN5fIg8e7u8uLl8vHy4uj/OiAlcyIKKworIzogZ2xvYmFscy5oOjEyNjIKK21zZ2lkICJFMzI6IE5vIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTMyOiDN5fIg6Ozl7egg9ODp6+AiCisKKyM6IGdsb2JhbHMuaDoxMjYzCittc2dpZCAiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTMzOiDN5fIg7/Dl5Pvk8/nl4+4g8OXj8+v/8O3u4+4g4vvw4Obl7ej/IOTr/yDn4Ozl7fsiCisKKyM6IGdsb2JhbHMuaDoxMjY0Cittc2dpZCAiRTM0OiBObyBwcmV2aW91cyBjb21tYW5kIgorbXNnc3RyICJFMzQ6IM3l8iDv8OXk++Tz+eXpIOru7ODt5PsiCisKKyM6IGdsb2JhbHMuaDoxMjY1Cittc2dpZCAiRTM1OiBObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzNTogzeXyIO/w5eT75PP55ePuIPDl4/Pr//Dt7uPuIOL78ODm5e3o/yIKKworIzogZ2xvYmFscy5oOjEyNjYKK21zZ2lkICJFNDgxOiBObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICJFNDgxOiDI8e/u6/zn7uLg7ejlIOTo4O/g5+7t4CDt5SDk7u/z8erg5fLx/yIKKworIzogZ2xvYmFscy5oOjEyNjgKK21zZ2lkICJFMzY6IE5vdCBlbm91Z2ggcm9vbSIKK21zZ3N0ciAiRTM2OiDN5eTu8fLg8u737e4g7OXx8uAiCisKKyM6IGdsb2JhbHMuaDoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDc6IG5vIHJlZ2lzdGVyZWQgc2VydmVyIG5hbWVkIFwiJXNcIiIKK21zZ3N0ciAiRTI0Nzog8eXw4uXwIFwiJXNcIiDt5SDn4PDl4+jx8vDo8O7i4O0iCisKKyM6IGdsb2JhbHMuaDoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODI6IENhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJFNDgyOiDN5eLu5+zu5u3uIPHu5+Tg8vwg9ODp6yAlcyIKKworIzogZ2xvYmFscy5oOjEyNzQKK21zZ2lkICJFNDgzOiBDYW4ndCBnZXQgdGVtcCBmaWxlIG5hbWUiCittc2dzdHIgIkU0ODM6IM3l4u7n7O7m7e4g7+7r8/fo8vwg6Oz/IOLw5ezl7e3u4+4g9ODp6+AiCisKKyM6IGdsb2JhbHMuaDoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODQ6IENhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiRTQ4NDogzeXi7ufs7ubt7iDu8urw+/L8IPTg6esgJXMiCisKKyM6IGdsb2JhbHMuaDoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODU6IENhbid0IHJlYWQgZmlsZSAlcyIKK21zZ3N0ciAiRTQ4NTogzeXi7ufs7ubt7iDv8O736PLg8vwg9ODp6yAlcyIKKworIzogZ2xvYmFscy5oOjEyNzcKK21zZ2lkICJFMzc6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUzNzogyOfs5e3l7ej/IO3lIPHu9fDg7eXt+yAo5O7h4OL88uUgISwg9/Lu4fsg7uHu6fLoIO/w7uLl8OrzKSIKKworIzogZ2xvYmFscy5oOjEyNzgKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODogzfPr5eLu6SDg8OPz7OXt8iIKKworIzogZ2xvYmFscy5oOjEyODAKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiDS8OXh8+Xy8f8g9+jx6+4iCisKKyM6IGdsb2JhbHMuaDoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDogzeUg8+Tg6+7x/CDu8urw+/L8IPTg6esg7vjo4e7qICVzIgorCisjOiBnbG9iYWxzLmg6MTI4NgorbXNnaWQgIkUyMzM6IGNhbm5vdCBvcGVuIGRpc3BsYXkiCittc2dzdHIgIkUyMzM6IO3l4u7n7O7m7e4g7vLq8Pvy/CDk6PHv6+XpIgorCisjOiBnbG9iYWxzLmg6MTI4OAorbXNnaWQgIkU0MTogT3V0IG9mIG1lbW9yeSEiCittc2dzdHIgIkU0MTogzeUg9eLg8uDl8iDv4Oz/8ughIgorCisjOiBnbG9iYWxzLmg6MTI5MAorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kIgorbXNnc3RyICLY4OHr7u0g7eUg7eDp5OXtIgorCisjOiBnbG9iYWxzLmg6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg2OiBQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0ODY6INjg4evu7SDt5SDt4Onk5e06ICVzIgorCisjOiBnbG9iYWxzLmg6MTI5MworbXNnaWQgIkU0ODc6IEFyZ3VtZW50IG11c3QgYmUgcG9zaXRpdmUiCittc2dzdHIgIkU0ODc6IM/g8ODs5fLwIOTu6+bl7SDh+/L8IO/u6+7m6PLl6/zt++wg9+jx6+7sIgorCisjOiBnbG9iYWxzLmg6MTI5NQorbXNnaWQgIkU0NTk6IENhbm5vdCBnbyBiYWNrIHRvIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTQ1OTogwu7n4vDg8iDiIO/w5eT75PP56Okg6uDy4Ovu4yDt5eLu5+zu5uXtIgorCisjOiBnbG9iYWxzLmg6MTI5OQorbXNnaWQgIkU0MjogTm8gRXJyb3JzIgorbXNnc3RyICJFNDI6IM746OHu6iDt5fIiCisKKyM6IGdsb2JhbHMuaDoxMzAxCittc2dpZCAiRTQzOiBEYW1hZ2VkIG1hdGNoIHN0cmluZyIKK21zZ3N0ciAiRTQzOiDP7uLw5ebk5e3gIPHy8O7q4CDx7u7y4uXy8fLi6P8iCisKKyM6IGdsb2JhbHMuaDoxMzAyCittc2dpZCAiRTQ0OiBDb3JydXB0ZWQgcmVnZXhwIHByb2dyYW0iCittc2dzdHIgIkU0NDogz/Du4/Dg7OzgIO7h8ODh7vLq6CDw5ePz6//w7fv1IOL78ODm5e3o6SDv7uLw5ebk5e3gIgorCisjOiBnbG9iYWxzLmg6MTMwMworbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIiIKKyJFNDU6IMLq6/735e3gIO7v9uj/ICdyZWFkb25seScgKOTu4eDi/PLlICEsIPfy7uH7IO3lIO7h8OD54PL8IOLt6Ozg7ej/KSIKKworIzogZ2xvYmFscy5oOjEzMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiCittc2dzdHIgIkU0NjogzeXi7ufs7ubt7iDo5+zl7ejy/CDk7vHy8+/t8/4g8u7r/OruIOTr/yD38uXt6P8g7+Xw5ezl7e3z/iBcIiVzXCIiCisKKyM6IGdsb2JhbHMuaDoxMzA4Cittc2dpZCAiRTQ3OiBFcnJvciB3aGlsZSByZWFkaW5nIGVycm9yZmlsZSIKK21zZ3N0ciAiRTQ3OiDO+Ojh6uAg7/DoIPfy5e3o6CD04Onr4CDu+Ojh7uoiCisKKyM6IGdsb2JhbHMuaDoxMzExCittc2dpZCAiRTQ4OiBOb3QgYWxsb3dlZCBpbiBzYW5kYm94IgorbXNnc3RyICJFNDg6IM3lIOTu7/Px6uDl8vH/IOIg7+Xx7vft6PblIgorCisjOiBnbG9iYWxzLmg6MTMxMworbXNnaWQgIkU1MjM6IE5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU1MjM6IMfk5fH8IO3lIPDg5/Dl+OXt7iIKKworIzogZ2xvYmFscy5oOjEzMTYKK21zZ2lkICJFMzU5OiBTY3JlZW4gbW9kZSBzZXR0aW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkUzNTk6IMTg7e376SDw5ebo7CD96vDg7eAg7eUg7+7k5OXw5uji4OXy8f8iCisKKyM6IGdsb2JhbHMuaDoxMzE4Cittc2dpZCAiRTQ5OiBJbnZhbGlkIHNjcm9sbCBzaXplIgorbXNnc3RyICJFNDk6IM3l5O7v8/Hy6Oz76SDw4Ofs5fAg7/Du6vDz8uroIgorCisjOiBnbG9iYWxzLmg6MTMxOQorbXNnaWQgIkU5MTogJ3NoZWxsJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIkU5MTogx+3g9+Xt6OXsIO7v9ujoICdzaGVsbCcg/+Lr/+Xy8f8g7/Px8uD/IPHy8O7q4CIKKworIzogZ2xvYmFscy5oOjEzMjEKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IM3l4u7n7O7m7e4g7/Du9+jy4PL8IOTg7e375SDuIOft4Pfq4PUhIgorCisjOiBnbG9iYWxzLmg6MTMyMworbXNnaWQgIkU3MjogQ2xvc2UgZXJyb3Igb24gc3dhcCBmaWxlIgorbXNnc3RyICJFNzI6IM746OHq4CDn4Orw+/Lo/yDx4u7vLfTg6evgIgorCisjOiBnbG9iYWxzLmg6MTMyNAorbXNnaWQgIkU3MzogdGFnIHN0YWNrIGVtcHR5IgorbXNnc3RyICJFNzM6INHy5eog7OXy7uog7/Px8u7pIgorCisjOiBnbG9iYWxzLmg6MTMyNQorbXNnaWQgIkU3NDogQ29tbWFuZCB0b28gY29tcGxleCIKK21zZ3N0ciAiRTc0OiDR6+j46u7sIPHr7ubt4P8g6u7s4O3k4CIKKworIzogZ2xvYmFscy5oOjEzMjYKK21zZ2lkICJFNzU6IE5hbWUgdG9vIGxvbmciCittc2dzdHIgIkU3NTog0evo+Oru7CDk6+jt7e7lIOjs/yIKKworIzogZ2xvYmFscy5oOjEzMjcKK21zZ2lkICJFNzY6IFRvbyBtYW55IFsiCittc2dzdHIgIkU3Njog0evo+Oru7CDs7e7j7iDx6Ozi7uvu4iBbIgorCisjOiBnbG9iYWxzLmg6MTMyOAorbXNnaWQgIkU3NzogVG9vIG1hbnkgZmlsZSBuYW1lcyIKK21zZ3N0ciAiRTc3OiDR6+j46u7sIOzt7uPuIOjsuO0g9ODp6+7iIgorCisjOiBnbG9iYWxzLmg6MTMyOQorbXNnaWQgIkU0ODg6IFRyYWlsaW5nIGNoYXJhY3RlcnMiCittc2dzdHIgIkU0ODg6IMvo+O3o5SDx6Ozi7uv7IO3gIPXi7vHy5SIKKworIzogZ2xvYmFscy5oOjEzMzAKK21zZ2lkICJFNzg6IFVua25vd24gbWFyayIKK21zZ3N0ciAiRTc4OiDN5ejn4uXx8u3g/yDu8uzl8urgIgorCisjOiBnbG9iYWxzLmg6MTMzMQorbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTogzeXi7ufs7ubt7iDi++/u6+3o8vwg7+7k8fLg7e7i6vMg7+4g7ODx6uUiCisKKyM6IGdsb2JhbHMuaDoxMzMzCittc2dpZCAiRTU5MTogJ3dpbmhlaWdodCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWluaGVpZ2h0JyIKK21zZ3N0ciAiIgorIkU1OTE6IMft4Pfl7ejlIO7v9ujoICd3aW5oZWlnaHQnIO3lIOzu5uXyIOH78vwg7OXt/PjlIOft4Pfl7ej/ICd3aW5taW5oZWlnaHQnIgorCisjOiBnbG9iYWxzLmg6MTMzNQorbXNnaWQgIkU1OTI6ICd3aW53aWR0aCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWlud2lkdGgnIgorbXNnc3RyICIiCisiRTU5Mjogx+3g9+Xt6OUg7u/26OggJ3dpbndpZHRoJyDt5SDs7ubl8iDh+/L8IOzl7fz45SDn7eD35e3o/yAnd2lubWlud2lkdGgnIgorCisjOiBnbG9iYWxzLmg6MTMzOAorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiDO+Ojh6uAg7/DoIOfg7+jx6CIKKworIzogZ2xvYmFscy5oOjEzMzkKK21zZ2lkICJaZXJvIGNvdW50IgorbXNnc3RyICLN8+vl4u7lIOft4Pfl7ejlIPH3uPL36OrgIgorCisjOiBnbG9iYWxzLmg6MTM0MQorbXNnaWQgIkU4MTogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQiCittc2dzdHIgIkU4MTogyPHv7uv85+7i4O3o5SA8U0lEPiDi7eUg6u7t8uXq8fLgIPH25e3g8Oj/IgorCisjOiBnbG9iYWxzLmg6MTM0NAorbXNnaWQgIkU0NDk6IEludmFsaWQgZXhwcmVzc2lvbiByZWNlaXZlZCIKK21zZ3N0ciAiRTQ0OTogz+7r8/fl7e4g7eXk7u/z8fLo7O7lIOL78ODm5e3o5SIKKworIzogZ2xvYmFscy5oOjEzNDcKK21zZ2lkICJFNDYzOiBSZWdpb24gaXMgZ3VhcmRlZCwgY2Fubm90IG1vZGlmeSIKK21zZ3N0ciAiRTQ2MzogzeXi7ufs7ubt7iDo5+zl7ejy/CDu9fDg7f/l7PP+IO7h6+Dx8vwiCisKKyN+IG1zZ2lkICJcIlxuIgorI34gbXNnc3RyICJcIlxuIgpkaWZmIC0tZ2l0IGEvc3JjL3BvL3J1LnBvIGIvc3JjL3BvL3J1LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOGJjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vcnUucG8KQEAgLTAsMCArMSw2NjU4IEBACisjIFJ1c3NpYW4gdHJhbnNsYXRpb24gZm9yIFZpbQorIyAKKyMg78Ig1dPMz9fJ0cggydPQz8zY2s/Xwc7J0SDeydTBytTFINcg0sXEwcvUz9LFIFZpbSAiOmhlbHAgdWdhbmRhIgorIyDvIMzAxNHILCDExczBwN3JyCBWaW0g3snUwcrUxSDXINLFxMHL1M/SxSAiOmhlbHAgwdfUz9LZIgorIworIyB2YXNzaWx5ICJ2ciIgcmFnb3NpbiA8dnJyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4sIDIwMDQKKyMKKyMgT3JpZ2luYWwgdHJhbnNsYXRpb25zLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogVmltIDYuM2FcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDQtMDUtMTAgMjE6MzcrMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMDUtMTAgMjE6MzcrMDQwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogdmFzc2lseSByYWdvc2luIDx2cnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlLVRlYW06IHZhc3NpbHkgcmFnb3NpbiA8dnJyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1rb2k4LXJcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGJ1ZmZlci5jOjEwMgorbXNnaWQgIkU4MjogQ2Fubm90IGFsbG9jYXRlIGFueSBidWZmZXIsIGV4aXRpbmcuLi4iCittc2dzdHIgIkU4Mjog7sXXz9rNz9bOzyDX2cTFzMnU2CDQwc3R1NggxMHWxSDEzNEgz8TOz8fPIMLVxsXSwSwg19nIz8QuLi4iCisKKyM6IGJ1ZmZlci5jOjEwNQorbXNnaWQgIkU4MzogQ2Fubm90IGFsbG9jYXRlIGJ1ZmZlciwgdXNpbmcgb3RoZXIgb25lLi4uIgorbXNnc3RyICJFODM6IO7F18/azc/Wzs8g19nExczJ1Ngg0MHN0dTYIMTM0SDC1cbF0sEsIMnT0M/M2NrVxc0gxNLVx8/KIMLVxsXSLi4uIgorCisjOiBidWZmZXIuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUxNTogTm8gYnVmZmVycyB3ZXJlIHVubG9hZGVkIgorbXNnc3RyICJFNTE1OiDuySDPxMnOIMLVxsXSIM7FIMLZzCDX2cfS1dbFziDJ2iDQwc3R1MkiCisKKyM6IGJ1ZmZlci5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJFNTE2OiBObyBidWZmZXJzIHdlcmUgZGVsZXRlZCIKK21zZ3N0ciAiRTUxNjog7skgz8TJziDC1cbF0iDOxSDC2cwg1cTBzKPOIgorCisjOiBidWZmZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUxNzogTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAiRTUxNzog7skgz8TJziDC1cbF0iDOxSDC2cwgz97J3cXOIgorCisjOiBidWZmZXIuYzo4MTcKK21zZ2lkICIxIGJ1ZmZlciB1bmxvYWRlZCIKK21zZ3N0ciAi78TJziDC1cbF0iDX2cfS1dbFziDJ2iDQwc3R1MkiCisKKyM6IGJ1ZmZlci5jOjgxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHVubG9hZGVkIgorbXNnc3RyICL308XHzyDX2cfS1dbFzs8gwtXGxdLP1yDJ2iDQwc3R1Mk6ICVkIgorCisjOiBidWZmZXIuYzo4MjQKK21zZ2lkICIxIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICLvxMnOIMLVxsXSINXEwcyjziIKKworIzogYnVmZmVyLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgZGVsZXRlZCIKK21zZ3N0ciAi99PFx88g1cTBzMXOzyDC1cbF0s/XOiAlZCIKKworIzogYnVmZmVyLmM6ODMxCittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICLvxMnOIMLVxsXSIM/eyd3FziIKKworIzogYnVmZmVyLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgd2lwZWQgb3V0IgorbXNnc3RyICL308XHzyDP3sndxc7PIMLVxsXSz9c6ICVkIgorCisjOiBidWZmZXIuYzo4OTQKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiDp2s3FzqPOztnIIMLVxsXSz9cgzsUgz8LOwdLV1sXOzyIKKworIy4gYmFjayB3aGVyZSB3ZSBzdGFydGVkLCBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyM6IGJ1ZmZlci5jOjkzMworbXNnaWQgIkU4NTogVGhlcmUgaXMgbm8gbGlzdGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTg1OiDi1cbF0tkg1yDT0MnTy8Ugz9TT1dTT1NfVwNQiCisKKyM6IGJ1ZmZlci5jOjk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFODY6IEJ1ZmZlciAlbGQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkU4Njog4tXGxdIgJWxkIM7FINPV3cXT1NfVxdQiCisKKyM6IGJ1ZmZlci5jOjk0OAorbXNnaWQgIkU4NzogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg3OiD81M8g0M/TzMXEzsnKIMLVxsXSIgorCisjOiBidWZmZXIuYzo5NTAKK21zZ2lkICJFODg6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgYnVmZmVyIgorbXNnc3RyICJFODg6IPzUzyDQxdLX2cogwtXGxdIiCisKKyM6IGJ1ZmZlci5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFODk6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgJWxkIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU4OTog6drNxc7FzsnRINcgwtXGxdLFICVsZCDOxSDTz8jSwc7FztkgKCEsIN7Uz8LZIM/Cz8rUySDQ0s/XxdLL1SkiCisKKyM6IGJ1ZmZlci5jOjEwMDUKK21zZ2lkICJFOTA6IENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU5MDog7sXXz9rNz9bOzyDX2cfS1drJ1Nggydog0MHN0dTJINDP08zFxM7JyiDC1cbF0iIKKworIzogYnVmZmVyLmM6MTUzOAorbXNnaWQgIlcxNDogV2FybmluZzogTGlzdCBvZiBmaWxlIG5hbWVzIG92ZXJmbG93IgorbXNnc3RyICJXMTQ6IPDSxcTV0NLF1sTFzsnFOiDQxdLF0M/MzsXOycUg09DJ08vBIMnNo84gxsHKzM/XIgorCisjOiBidWZmZXIuYzoxNzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MjogQnVmZmVyICVsZCBub3QgZm91bmQiCittc2dzdHIgIkU5Mjog4tXGxdIgJWxkIM7FIM7BysTFziIKKworIzogYnVmZmVyLmM6MTk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFOTM6IE1vcmUgdGhhbiBvbmUgbWF0Y2ggZm9yICVzIgorbXNnc3RyICJFOTM6IO7F08vPzNjLzyDTz8/U18XU09TXycogxMzRICVzIgorCisjOiBidWZmZXIuYzoxOTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiDuxdQg08/P1NfF1NPU19XA3cXHzyAlcyDC1cbF0sEiCisKKyM6IGJ1ZmZlci5jOjIzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQiCittc2dzdHIgItPU0s/LwSAlbGQiCisKKyM6IGJ1ZmZlci5jOjI0MjAKK21zZ2lkICJFOTU6IEJ1ZmZlciB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTk1OiDi1cbF0iDTINTBy8nNIMnNxc7FzSDV1sUg09XdxdPU19XF1CIKKworIzogYnVmZmVyLmM6MjcxMworbXNnaWQgIiBbTW9kaWZpZWRdIgorbXNnc3RyICIgW+nazcXOo85dIgorCisjOiBidWZmZXIuYzoyNzE4Cittc2dpZCAiW05vdCBlZGl0ZWRdIgorbXNnc3RyICJb7sUg0sXEwcvUydLP18HM09FdIgorCisjOiBidWZmZXIuYzoyNzIzCittc2dpZCAiW05ldyBmaWxlXSIKK21zZ3N0ciAiW+7P19nKIMbBysxdIgorCisjOiBidWZmZXIuYzoyNzI0Cittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW+/bycLLySDe1MXOydFdIgorCisjOiBidWZmZXIuYzoyNzI2IGZpbGVpby5jOjIxMTIKK21zZ2lkICJbcmVhZG9ubHldIgorbXNnc3RyICJb1M/M2MvPIMTM0SDe1MXOydFdIgorCisjOiBidWZmZXIuYzoyNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAtLSVkJSUtLSIKK21zZ3N0ciAi78TOwSDT1NLPy8EgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIC0tJWQlJS0tIgorbXNnc3RyICIlbGQg09TSLiAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6Mjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCBvZiAlbGQgLS0lZCUlLS0gY29sICIKK21zZ3N0ciAi09TSLiAlbGQgydogJWxkIC0tJWQlJS0tIMvPzC4gIgorCisjOiBidWZmZXIuYzoyODY0Cittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJb7sXUIMbByszBXSIKKworIy4gbXVzdCBiZSBhIGhlbHAgYnVmZmVyCisjOiBidWZmZXIuYzoyOTA0Cittc2dpZCAiaGVscCIKK21zZ3N0ciAi09DSwdfLwSIKKworIzogYnVmZmVyLmM6MzQ2MyBzY3JlZW4uYzo1MDc1Cittc2dpZCAiW2hlbHBdIgorbXNnc3RyICJb09DSwdfLwV0iCisKKyM6IGJ1ZmZlci5jOjM0OTUgc2NyZWVuLmM6NTA4MQorbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW/DSxcTQ0s/Tzc/U0l0iCisKKyM6IGJ1ZmZlci5jOjM3NzUKK21zZ2lkICJBbGwiCittc2dzdHIgIvfF09giCisKKyM6IGJ1ZmZlci5jOjM3NzUKK21zZ2lkICJCb3QiCittc2dzdHIgIvfOydrVIgorCisjOiBidWZmZXIuYzozNzc3Cittc2dpZCAiVG9wIgorbXNnc3RyICLuwdfF0sjVIgorCisjOiBidWZmZXIuYzo0NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjIEJ1ZmZlciBsaXN0OlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDz0MnTz8sgwtXGxdLP1zpcbiIKKworIzogYnVmZmVyLmM6NDU1NgorbXNnaWQgIltFcnJvciBMaXN0XSIKK21zZ3N0ciAiW/PQydPPyyDP28nCz8tdIgorCisjOiBidWZmZXIuYzo0NTY5IG1lbWxpbmUuYzoxNTIwCittc2dpZCAiW05vIEZpbGVdIgorbXNnc3RyICJb7sXUIMbByszBXSIKKworIzogYnVmZmVyLmM6NDg4MgorbXNnaWQgIiIKKyJcbiIKKyItLS0gU2lnbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIPrOwd7LySAtLS0iCisKKyM6IGJ1ZmZlci5jOjQ5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2lnbnMgZm9yICVzOiIKK21zZ3N0ciAi+s7B3svJIMTM0SAlczoiCisKKyM6IGJ1ZmZlci5jOjQ5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgINPU0s/LwT0lbGQgIGlkPSVkICDJzdE9JXMiCisKKyM6IGRpZmYuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6IPPMxcTJ1Ngg2sEgz9TMyd7J0c3JIM3P1s7PIM7FIMLPzMXFIN7FzSDXICVsZCDC1cbF0sHIIgorCisjOiBkaWZmLmM6NzEzCittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6IO7F18/azc/Wzs8g08/axMHU2CDGwcrM2SDP1MzJ3snKIgorCisjOiBkaWZmLmM6ODE4Cittc2dpZCAiUGF0Y2ggZmlsZSIKK21zZ3N0ciAi5sHKzC3awdDMwdTLwSIKKworIzogZGlmZi5jOjEwNjkKK21zZ2lkICJFOTg6IENhbm5vdCByZWFkIGRpZmYgb3V0cHV0IgorbXNnc3RyICJFOTg6IO7F18/azc/Wzs8g0NLP3snUwdTYINfZ18/EIMvPzcHOxNkgZGlmZiIKKworIzogZGlmZi5jOjE4MTkKK21zZ2lkICJFOTk6IEN1cnJlbnQgYnVmZmVyIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkU5OTog4cvUydfO2cogwtXGxdIgzsUgzsHIz8TJ1NPRINcg0sXWyc3FIM/UzMneycoiCisKKyM6IGRpZmYuYzoxODMxCittc2dpZCAiRTEwMDogTm8gb3RoZXIgYnVmZmVyIGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMDog4s/M2NvFIM7F1CDC1cbF0s/XINcg0sXWyc3FIM/UzMneycoiCisKKyM6IGRpZmYuYzoxODM5Cittc2dpZCAiRTEwMTogTW9yZSB0aGFuIHR3byBidWZmZXJzIGluIGRpZmYgbW9kZSwgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlIgorbXNnc3RyICJFMTAxOiD3INLF1snNxSDP1MzJ3snKIMLPzMXFIMTX1cggwtXGxdLP1ywgzsUgzc/H1SDX2cLSwdTYIgorCisjOiBkaWZmLmM6MTg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAyOiBDYW4ndCBmaW5kIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxMDI6IO7FIM3Px9UgzsHK1MkgwtXGxdIgXCIlc1wiIgorCisjOiBkaWZmLmM6MTg2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAzOiBCdWZmZXIgXCIlc1wiIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDM6IOLVxsXSIFwiJXNcIiDOxSDOwcjPxMnU09Eg1yDSxdbJzcUgz9TMyd7JyiIKKworIzogZGlncmFwaC5jOjIxOTkKK21zZ2lkICJFMTA0OiBFc2NhcGUgbm90IGFsbG93ZWQgaW4gZGlncmFwaCIKK21zZ3N0ciAiRTEwNDog/MvSwc7J0tXA3cnKINPJzdfPzCBFc2NhcGUgzsXM2NrRIMnT0M/M2NrP18HU2CDXIMTJx9LBxsUiCisKKyM6IGRpZ3JhcGguYzoyMzg0Cittc2dpZCAiRTU0NDogS2V5bWFwIGZpbGUgbm90IGZvdW5kIgorbXNnc3RyICJFNTQ0OiDmwcrMINMg0sHTy8zBxMvPyiDLzMHXycHU1dLZIM7FIM7BysTFziIKKworIzogZGlncmFwaC5jOjI0MTEKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IOvPzcHOxMEgOmxvYWRrZXltYXAg0NLJzcXOxc7BINfOxSDGwcrMwSDTw8XOwdLJ0SIKKworIzogZWRpdC5jOjQwCittc2dpZCAiIEtleXdvcmQgY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiDh19TPxM/Qz8zOxc7JxSDLzMDexdfPx88g08zP18EgKF5OXlApIgorCisjLiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4KKyM6IGVkaXQuYzo0MQorbXNnaWQgIiBeWCBtb2RlICheRV5ZXkxeXV5GXkleS15EXlZeTl5QKSIKK21zZ3N0ciAiIOHX1M/Ez9DPzM7FzsnFIF5YICheRV5ZXkxeXV5GXkleS15EXlZeTl5QKSIKKworIy4gU2Nyb2xsIGhhcyBpdCdzIG93biBtc2dzLCBpbiBpdCdzIHBsYWNlIHRoZXJlIGlzIHRoZSBtc2cgZm9yIGxvY2FsCisjLiAqIGN0cmxfeF9tb2RlID0gMCAoZWcgY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCkgIC0tIEFjZXZlZG8KKyM6IGVkaXQuYzo0NAorbXNnaWQgIiBLZXl3b3JkIExvY2FsIGNvbXBsZXRpb24gKF5OXlApIgorbXNnc3RyICIg7cXT1M7PxSDB19TPxM/Qz8zOxc7JxSDLzMDexdfPx88g08zP18EgKF5OXlApIgorCisjOiBlZGl0LmM6NDUKK21zZ2lkICIgV2hvbGUgbGluZSBjb21wbGV0aW9uICheTF5OXlApIgorbXNnc3RyICIg4dfUz8TP0M/MzsXOycUgw8XMz8og09TSz8vJICheTF5OXlApIgorCisjOiBlZGl0LmM6NDYKK21zZ2lkICIgRmlsZSBuYW1lIGNvbXBsZXRpb24gKF5GXk5eUCkiCittc2dzdHIgIiDh19TPxM/Qz8zOxc7JxSDJzcXOySDGwcrMwSAoXkZeTl5QKSIKKworIzogZWRpdC5jOjQ3Cittc2dpZCAiIFRhZyBjb21wbGV0aW9uICheXV5OXlApIgorbXNnc3RyICIg4dfUz8TP0M/MzsXOycUgzcXUy8kgKF5dXk5eUCkiCisKKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk5eUCkiCittc2dzdHIgIiDh19TPxM/Qz8zOxc7JxSDbwcLMz87BINDV1MkgKF5OXlApIgorCisjOiBlZGl0LmM6NDkKK21zZ2lkICIgRGVmaW5pdGlvbiBjb21wbGV0aW9uICheRF5OXlApIgorbXNnc3RyICIg4dfUz8TP0M/MzsXOycUgz9DSxcTFzMXOydEgKF5EXk5eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LXk5eUCkiCittc2dzdHIgIiDh19TPxM/Qz8zOxc7JxSDQzyDTzM/XwdLAICheS15OXlApIgorCisjOiBlZGl0LmM6NTIKK21zZ2lkICIgVGhlc2F1cnVzIGNvbXBsZXRpb24gKF5UXk5eUCkiCittc2dzdHIgIiDh19TPxM/Qz8zOxc7JxSDTyc7PzsnNz9cgKF5UXk5eUCkiCisKKyM6IGVkaXQuYzo1MworbXNnaWQgIiBDb21tYW5kLWxpbmUgY29tcGxldGlvbiAoXlZeTl5QKSIKK21zZ3N0ciAiIOHX1M/Ez9DPzM7FzsnFIMvPzcHOxM7PyiDT1NLPy8kgKF5WXk5eUCkiCisKKyM6IGVkaXQuYzo1NgorbXNnaWQgIkhpdCBlbmQgb2YgcGFyYWdyYXBoIgorbXNnc3RyICLrz87FwyDBwtrBw8EiCisKKyM6IGVkaXQuYzo5NjIKK21zZ2lkICIndGhlc2F1cnVzJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIu7FINrBxMHOzyDazsHexc7JxSDP0MPJySAndGhlc2F1cnVzJyIKKworIzogZWRpdC5jOjExNjYKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICLuxSDawcTBzs8g2s7B3sXOycUgz9DDyckgJ2RpY3Rpb25hcnknIgorCisjOiBlZGl0LmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAi8NLP083P1NIg08zP18HS0TogJXMiCisKKyM6IGVkaXQuYzoyMzY4Cittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKNfT1MHXy8EpIPDSz8vS1dTLwSAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjM3MAorbXNnaWQgIiAocmVwbGFjZSkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAo2sHNxc7BKSDw0s/L0tXUy8EgKF5FL15ZKSIKKworIzogZWRpdC5jOjI2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmc6ICVzIgorbXNnc3RyICLw0s/Tzc/U0jogJXMiCisKKyM6IGVkaXQuYzoyNzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIHRhZ3MuIgorbXNnc3RyICL32dDPzM7RxdTT0SDQz8nTyyDT0sXEySDNxdTPyy4iCisKKyM6IGVkaXQuYzozMzgxCittc2dpZCAiIEFkZGluZyIKK21zZ3N0ciAiIOTPwsHXzMXOycUiCisKKyMuIHNob3dtb2RlIG1pZ2h0IHJlc2V0IHRoZSBpbnRlcm5hbCBsaW5lIHBvaW50ZXJzLCBzbyBpdCBtdXN0CisjLiAqIGJlIGNhbGxlZCBiZWZvcmUgbGluZSA9IG1sX2dldCgpLCBvciB3aGVuIHRoaXMgYWRkcmVzcyBpcyBubworIy4gKiBsb25nZXIgbmVlZGVkLiAgLS0gQWNldmVkby4KKyMuCisjOiBlZGl0LmM6MzQzMAorbXNnaWQgIi0tIFNlYXJjaGluZy4uLiIKK21zZ3N0ciAiLS0g8M/J08suLi4iCisKKyM6IGVkaXQuYzozNDg2Cittc2dpZCAiQmFjayBhdCBvcmlnaW5hbCIKK21zZ3N0ciAi6dPIz8TOz8Ug08zP188iCisKKyM6IGVkaXQuYzozNDkxCittc2dpZCAiV29yZCBmcm9tIG90aGVyIGxpbmUiCittc2dzdHIgIvPMz9fPIMnaIMTS1cfPyiDT1NLPy8kiCisKKyM6IGVkaXQuYzozNDk2Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIuXEyc7T1NfFzs7PxSDTz8/U18XU09TXycUiCisKKyM6IGVkaXQuYzozNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICLTz8/U18XU09TXycUgJWQgydogJWQiCisKKyM6IGVkaXQuYzozNTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIgorbXNnc3RyICLTz8/U18XU09TXycUgJWQiCisKKyMuIFNraXAgZnVydGhlciBhcmd1bWVudHMgYnV0IGRvIGNvbnRpbnVlIHRvCisjLiAqIHNlYXJjaCBmb3IgYSB0cmFpbGluZyBjb21tYW5kLgorIzogZXZhbC5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNjogVW5rbm93biB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA2OiDuxcna18XT1M7B0SDQxdLFzcXOzsHROiBcIiVzXCIiCisKKyM6IGV2YWwuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDc6IE1pc3NpbmcgYnJhY2VzOiAlcyIKK21zZ3N0ciAiRTEwNzog8NLP0NXdxc7ZINPLz8LLyTogJXMiCisKKyM6IGV2YWwuYzoxNDM1IGV2YWwuYzoxNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDg6IE5vIHN1Y2ggdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwODog7sXUINTBy8/KINDF0sXNxc7Oz8o6IFwiJXNcIiIKKworIzogZXZhbC5jOjE3MDUKK21zZ2lkICJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciCittc2dzdHIgIkUxMDk6IPDSz9DV3cXOzyAnOicg0M/TzMUgJz8nIgorCisjOiBldmFsLmM6MjMyNworbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiDw0s/Q1d3FzsEgJyknIgorCisjOiBldmFsLmM6MjM4OQorbXNnaWQgIkUxMTE6IE1pc3NpbmcgJ10nIgorbXNnc3RyICJFMTExOiDw0s/Q1d3FzsEgJ10nIgorCisjOiBldmFsLmM6MjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEyOiBPcHRpb24gbmFtZSBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiRTExMjog7sUg1cvB2sHOzyDJzdEgz9DDyck6ICVzIgorCisjOiBldmFsLmM6MjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEzOiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUxMTM6IO7FydrXxdPUzsHRIM/Qw8nROiAlcyIKKworIzogZXZhbC5jOjI1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IPDSz9DV3cXOwSDLwdfZ3svBOiAlcyIKKworIzogZXZhbC5jOjI2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNTogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTU6IPDSz9DV3cXOwSDLwdfZ3svBOiAlcyIKKworIzogZXZhbC5jOjMwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNjogSW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICVzIgorbXNnc3RyICJFMTE2OiDwwdLBzcXU0tkgxMzRIMbVzsvDyckgJXMg2sHEwc7ZIM7F18XSzs8iCisKKyM6IGV2YWwuYzozMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiDuxcna18XT1M7B0SDG1c7Lw8nROiAlcyIKKworIzogZXZhbC5jOjMwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExODogVG9vIG1hbnkgYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTg6IPPMydvLz80gzc7Px88g0MHSwc3F1NLP1yDEzNEgxtXOy8PJySAlcyIKKworIzogZXZhbC5jOjMwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOTog7sXEz9PUwdTP3s7PINDB0sHNxdTSz9cgxMzRIMbVzsvDyckgJXMiCisKKyM6IGV2YWwuYzozMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjA6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0OiAlcyIKK21zZ3N0ciAiRTEyMDogPFNJRD4gydPQz8zY2tXF1NPRINfOxSDTw8XOwdLJ0TogJXMiCisKKyMuCisjLiAqIFllcyB0aGlzIGlzIHVnbHksIEkgZG9uJ3QgcGFydGljdWxhcmx5IGxpa2UgaXQgZWl0aGVyLiAgQnV0IGRvaW5nIGl0CisjLiAqIHRoaXMgd2F5IGhhcyB0aGUgY29tcGVsbGluZyBhZHZhbnRhZ2UgdGhhdCB0cmFuc2xhdGlvbnMgbmVlZCBub3QgdG8KKyMuICogYmUgdG91Y2hlZCBhdCBhbGwuICBTZWUgYmVsb3cgd2hhdCAnb2snIGFuZCAneW5jJyBhcmUgdXNlZCBmb3IuCisjLgorIzogZXZhbC5jOjM2ODcgZ3VpLmM6NDM4MiBndWlfZ3RrLmM6MjA1OQorbXNnaWQgIiZPayIKK21zZ3N0ciAiJk9rIgorCisjOiBldmFsLmM6NDIyNgorIywgYy1mb3JtYXQKK21zZ2lkICIrLSVzJTNsZCBsaW5lczogIgorbXNnc3RyICIrLSVzJTNsZCDT1NLPyzogIgorCisjOiBldmFsLmM6NTQ3NworbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJk9LXG4iCisi7ybUzcXOwSIKKworIzogZXZhbC5jOjU1MTcKK21zZ2lkICJjYWxsZWQgaW5wdXRyZXN0b3JlKCkgbW9yZSBvZnRlbiB0aGFuIGlucHV0c2F2ZSgpIgorbXNnc3RyICLm1c7Lw8nRIGlucHV0cmVzdG9yZSgpINfZ2tnXwcXU09Eg3sHdxSwg3sXNIMbVzsvDydEgaW5wdXRzYXZlKCkiCisKKyM6IGV2YWwuYzo1OTc3Cittc2dpZCAiRTY1NTogVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgKGN5Y2xlPykiCittc2dzdHIgIkU2NTY6IPPMydvLz80gzc7Px88g08nN18/Myd7F08vJyCDT09nMz8sgKMPJy8w/KSIKKworIzogZXZhbC5jOjY2MDkKK21zZ2lkICJFMjQwOiBObyBjb25uZWN0aW9uIHRvIFZpbSBzZXJ2ZXIiCittc2dzdHIgIkUyNDA6IO7F1CDT19HaySDTINPF0tfF0s/NIFZpbSIKKworIzogZXZhbC5jOjY3MDYKK21zZ2lkICJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIKK21zZ3N0ciAiRTIyNzog88XS18XSIM7FIM/U18XewcXUIgorCisjOiBldmFsLmM6NjczNAorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODog7sUgzc/H1SDP1NfF1MnU2CDLzMnFztTVIgorCisjOiBldmFsLmM6Njc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQxOiBVbmFibGUgdG8gc2VuZCB0byAlcyIKK21zZ3N0ciAiRTI0MTog7sUgzc/H1SDP1NDSwdfJ1Ngg08/Pwt3FzsnFIMTM0SAlcyIKKworIzogZXZhbC5jOjY4ODIKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIijuxdDSwdfJzNjOzykiCisKKyM6IGV2YWwuYzo4MDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogJXMiCittc2dzdHIgIkUxMjE6IO7Fz9DSxcTFzMXOzsHRINDF0sXNxc7OwdE6ICVzIgorCisjOiBldmFsLmM6ODQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJFNDYxOiDuxcTP0NXT1MnNz8Ugyc3RINDF0sXNxc7Oz8o6ICVzIgorCisjOiBldmFsLmM6ODc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgYWRkICEgdG8gcmVwbGFjZSBpdCIKK21zZ3N0ciAiRTEyMjog5tXOy8PJ0SAlcyDV1sUg09XdxdPU19XF1C4g5M/CwdfY1MUgISwg3tTPwtkg2sHNxc7J1NggxaMuIgorCisjOiBldmFsLmM6ODg1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiDuxc/Q0sXExczFzs7B0SDG1c7Lw8nROiAlcyIKKworIzogZXZhbC5jOjg4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNDogTWlzc2luZyAnKCc6ICVzIgorbXNnc3RyICJFMTI0OiDw0s/Q1d3FzsEgJygnOiAlcyIKKworIzogZXZhbC5jOjg5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNTogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUxMjU6IO7FxM/Q1dPUyc3ZyiDQwdLBzcXU0jogJXMiCisKKyM6IGV2YWwuYzo4OTgyCittc2dpZCAiRTEyNjogTWlzc2luZyA6ZW5kZnVuY3Rpb24iCittc2dzdHIgIkUxMjY6IPDSz9DV3cXOwSDLz83BzsTBIDplbmRmdW5jdGlvbiIKKworIzogZXZhbC5jOjkwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNzogQ2Fubm90IHJlZGVmaW5lIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMjc6IO7F18/azc/Wzs8g0MXSxc/Q0sXExczJ1NggxtXOy8PJwCAlcywgz87BIMnT0M/M2NrVxdTT0SIKKworIzogZXZhbC5jOjkxNTkKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiD00sXC1cXU09Egyc3RIMbVzsvDyckiCisKKyM6IGV2YWwuYzo5MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6IOnN0SDG1c7Lw8nJIMTPzNbOzyDOwd7JzsHU2NPRINMg0NLP0MnTzs/KIMLVy9fZOiAlcyIKKworIzogZXZhbC5jOjk0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMDogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEzMDog5tXOy8PJ0SAlcyDOxSDP0NLFxMXMxc7BIgorCisjOiBldmFsLmM6OTQwNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTMxOiBDYW5ub3QgZGVsZXRlIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMzE6IO7F18/azc/Wzs8g1cTBzMnU2CDG1c7Lw8nAICVzLCDPzsEgydPQz8zY2tXF1NPRIgorCisjOiBldmFsLmM6OTQ1NQorbXNnaWQgIkUxMzI6IEZ1bmN0aW9uIGNhbGwgZGVwdGggaXMgaGlnaGVyIHRoYW4gJ21heGZ1bmNkZXB0aCciCittc2dzdHIgIkUxMzI6IOfM1cLJzsEg19naz9fBIMbVzsvDyckgws/M2NvFLCDexc0g2s7B3sXOycUgJ21heGZ1bmNkZXB0aCciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjk1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAi19naz9cgJXMiCisKKyM6IGV2YWwuYzo5NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFib3J0ZWQiCittc2dzdHIgIiVzINDSxdLXwc7BIgorCisjOiBldmFsLmM6OTU3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgIyVsZCIKK21zZ3N0ciAiJXMg18/a19LB3cHF1CAjJWxkIgorCisjOiBldmFsLmM6OTU3OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICIlcyDXz9rX0sHdwcXUIFwiJXNcIiIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6OTU5NSBleF9jbWRzMi5jOjIzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAi0NLPxM/M1sXOycUg1yAlcyIKKworIzogZXZhbC5jOjk2MjEKK21zZ2lkICJFMTMzOiA6cmV0dXJuIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTEzMzogy8/Nwc7EwSA6cmV0dXJuINfOxSDG1c7Lw8nJIgorCisjOiBldmFsLmM6OTk1MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyBnbG9iYWwgdmFyaWFibGVzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDHzM/CwczYztnFINDF0sXNxc7O2cU6XG4iCisKKyM6IGV4X2NtZHMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iCittc2dzdHIgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2N0YWwgJTAzbyIKKworIzogZXhfY21kcy5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI+ICVkLCBIZXggJTA0eCwgT2N0YWwgJW8iCittc2dzdHIgIj4gJWQsIEhleCAlMDR4LCBPY3RhbCAlbyIKKworIzogZXhfY21kcy5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICI+ICVkLCBIZXggJTA4eCwgT2N0YWwgJW8iCittc2dzdHIgIj4gJWQsIEhleCAlMDh4LCBPY3RhbCAlbyIKKworIzogZXhfY21kcy5jOjQzMAorbXNnaWQgIkUxMzQ6IE1vdmUgbGluZXMgaW50byB0aGVtc2VsdmVzIgorbXNnc3RyICJFMTM0OiDz1NLPy8kg0MXSxc3F3cHA1NPRINPBzckgzsEg08XC0SIKKworIzogZXhfY21kcy5jOjQ5OQorbXNnaWQgIjEgbGluZSBtb3ZlZCIKK21zZ3N0ciAi8MXSxc3F3cXOwSDPxM7BINPU0s/LwSIKKworIzogZXhfY21kcy5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgbW92ZWQiCittc2dzdHIgIvDF0sXNxd3Fzs8g09TSz8s6ICVsZCIKKworIzogZXhfY21kcy5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgZmlsdGVyZWQiCittc2dzdHIgIvDSz9DV3cXOzyDexdLF2iDGyczY1NIg09TSz8s6ICVsZCIKKworIzogZXhfY21kcy5jOjk1MgorbXNnaWQgIkUxMzU6ICpGaWx0ZXIqIEF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUxMzU6IOHX1M/Lz83BzsTZICpGaWx0ZXIqIM7FIMTPzNbO2SDJ2s3FztHU2CDBy9TJ187ZyiDC1cbF0iIKKworIzogZXhfY21kcy5jOjEwMzcKK21zZ2lkICJbTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2VdXG4iCittc2dzdHIgIlvp2s3FzsXOydEgzsUg08/I0sHOxc7ZXVxuIgorCisjOiBleF9jbWRzLmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICIlc3ZpbWluZm86ICVzIGluIGxpbmU6ICIKK21zZ3N0ciAiJXN2aW1pbmZvOiAlcyDXINPU0s/LxTogIgorCisjOiBleF9jbWRzLmM6MTI4OAorbXNnaWQgIkUxMzY6IHZpbWluZm86IFRvbyBtYW55IGVycm9ycywgc2tpcHBpbmcgcmVzdCBvZiBmaWxlIgorbXNnc3RyICIiCisiRTEzNjogdmltaW5mbzog88zJ28vPzSDNzs/HzyDP28nCz8ssIM/T1MHM2M7B0SDewdPU2CDGwcrMwSDC1cTF1CDQ0s/Q1d3FzsEiCisKKyM6IGV4X2NtZHMuYzoxMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAi/tTFzsnFIMbByszBIHZpbWluZm8gXCIlc1wiJXMlcyVzIgorCisjOiBleF9jbWRzLmM6MTMyNAorbXNnaWQgIiBpbmZvIgorbXNnc3RyICIgyc7GzyIKKworIzogZXhfY21kcy5jOjEzMjUKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiDP1M3F1M/LIgorCisjOiBleF9jbWRzLmM6MTMyNgorbXNnaWQgIiBGQUlMRUQiCittc2dzdHIgIiDu5fXk4f7u7yIKKworIzogZXhfY21kcy5jOjE0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IPDSwdfBIM7BINrB0MnT2CDGwcrMwSB2aW1pbmZvIM/U09XU09TX1cDUOiAlcyIKKworIzogZXhfY21kcy5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzODogQ2FuJ3Qgd3JpdGUgdmltaW5mbyBmaWxlICVzISIKK21zZ3N0ciAiRTEzODog7sXXz9rNz9bOzyDawdDJ08HU2CDGwcrMIHZpbWluZm8gJXMhIgorCisjOiBleF9jbWRzLmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiCittc2dzdHIgIvrB0MnT2CDGwcrMwSB2aW1pbmZvIFwiJXNcIiIKKworIy4gV3JpdGUgdGhlIGluZm86CisjOiBleF9jbWRzLmM6MTY0OQorIywgYy1mb3JtYXQKK21zZ2lkICIjIFRoaXMgdmltaW5mbyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVmltICVzLlxuIgorbXNnc3RyICIjIPzUz9QgxsHKzCB2aW1pbmZvIMHX1M/NwdTJ3sXTy8kg08/axMHOIFZpbSAlcy5cbiIKKworIzogZXhfY21kcy5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiMgWW91IG1heSBlZGl0IGl0IGlmIHlvdSdyZSBjYXJlZnVsIVxuIgorIlxuIgorbXNnc3RyICIiCisiIyDlx88gzc/Wzs8gKM/T1M/Sz9bOzyEpINLFxMHL1MnSz9fB1NguXG4iCisiXG4iCisKKyM6IGV4X2NtZHMuYzoxNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjIPrOwd7FzsnFIM/Qw8nJICdlbmNvZGluZycg1yDNz83FztQg2sHQydPJIMbByszBXG4iCisKKyM6IGV4X2NtZHMuYzoxNzUyCittc2dpZCAiSWxsZWdhbCBzdGFydGluZyBjaGFyIgorbXNnc3RyICLuxcTP0NXT1MnN2cogzsHewczYztnKINPJzdfPzCIKKworIzogZXhfY21kcy5jOjIwOTcgZXhfY21kcy5jOjIzNjIgZXhfY21kczIuYzo3NjMKK21zZ2lkICJTYXZlIEFzIgorbXNnc3RyICLzz8jSwc7J1Nggy8HLIgorCisjLiBPdmVyd3JpdGluZyBhIGZpbGUgdGhhdCBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIgaXMgbm90IGEKKyMuICogZ29vZCBpZGVhLgorIzogZXhfY21kcy5jOjIxNDAKK21zZ2lkICJFMTM5OiBGaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciIKK21zZ3N0ciAiRTEzOTog5sHKzCDawcfS1dbFziDXIMTS1cfPzSDC1cbF0sUiCisKKyM6IGV4X2NtZHMuYzoyMTc0Cittc2dpZCAiV3JpdGUgcGFydGlhbCBmaWxlPyIKK21zZ3N0ciAi+sHQydPB1NggxsHKzCDewdPUyd7Ozz8iCisKKyM6IGV4X2NtZHMuYzoyMTgxCittc2dpZCAiRTE0MDogVXNlICEgdG8gd3JpdGUgcGFydGlhbCBidWZmZXIiCittc2dzdHIgIkUxNDA6IOTM0SDawdDJ08kg3sHT1MkgwtXGxdLBIMnT0M/M2NrVytTFICEiCisKKyM6IGV4X2NtZHMuYzoyMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAi8MXSxdDJ08HU2CDT1d3F09TX1cDdycogxsHKzCBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMuYzoyMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDE6IE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTE0MTog4tXGxdIgJWxkIM7FINPX0drBziDTIMnNxc7FzSDGwcrMwSIKKworIzogZXhfY21kcy5jOjI0MDUKK21zZ2lkICJFMTQyOiBGaWxlIG5vdCB3cml0dGVuOiBXcml0aW5nIGlzIGRpc2FibGVkIGJ5ICd3cml0ZScgb3B0aW9uIgorbXNnc3RyICJFMTQyOiDmwcrMIM7FINPPyNLBzqPOOiDawdDJ09ggz9TLzMDexc7BIM/Qw8nFyiAnd3JpdGUnIgorCisjOiBleF9jbWRzLmM6MjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IGZvciBcIiUuKnNcIi5cbiIKKyJEbyB5b3Ugd2lzaCB0byB3cml0ZSBhbnl3YXk/IgorbXNnc3RyICIiCisi5MzRIFwiJS4qc1wiINfLzMDexc7BIM/Qw8nRICdyZWFkb25seScuXG4iCisi+sHQydPB1Ng/IgorCisjOiBleF9jbWRzLmM6MjU5NworbXNnaWQgIkVkaXQgRmlsZSIKK21zZ3N0ciAi8sXEwcvUydLP18HOycUgxsHKzMEiCisKKyM6IGV4X2NtZHMuYzozMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiDh19TPy8/Nwc7E2SDOxc/WycTBzs7PINXCyczJIM7P19nKIMLVxsXSICVzIgorCisjOiBleF9jbWRzLmM6MzMzOQorbXNnaWQgIkUxNDQ6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIDp6IgorbXNnc3RyICJFMTQ0OiDwwdLBzcXU0iDLz83BzsTZIDp6IMTPzNbFziDC2dTYIN7J08zPzSIKKworIzogZXhfY21kcy5jOjM0MjQKK21zZ2lkICJFMTQ1OiBTaGVsbCBjb21tYW5kcyBub3QgYWxsb3dlZCBpbiBydmltIgorbXNnc3RyICJFMTQ1OiDp09DPzNjaz9fBzsnFIMvPzcHOxCDPws/Mz97LySDOxSDEz9DV08vBxdTT0SDXIHJ2aW0uIgorCisjOiBleF9jbWRzLmM6MzUzMQorbXNnaWQgIkUxNDY6IFJlZ3VsYXIgZXhwcmVzc2lvbnMgY2FuJ3QgYmUgZGVsaW1pdGVkIGJ5IGxldHRlcnMiCittc2dzdHIgIkUxNDY6IPLFx9XM0dLO2cUg19nSwdbFzsnRIM7FIM3Px9XUINLB2sTFzNHU2NPRIMLVy9fBzckiCisKKyM6IGV4X2NtZHMuYzozODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2Ugd2l0aCAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCittc2dzdHIgItrBzcXOydTYIM7BICVzPyAoeS9uL2EvcS9sL15FL15ZKSIKKworIzogZXhfY21kcy5jOjQyNzAKK21zZ2lkICIoSW50ZXJydXB0ZWQpICIKK21zZ3N0ciAiKPDSxdLXwc7PKSIKKworIzogZXhfY21kcy5jOjQyNzQKK21zZ2lkICIxIHN1YnN0aXR1dGlvbiIKK21zZ3N0ciAi78TOwSDawc3FzsEiCisKKyM6IGV4X2NtZHMuYzo0Mjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICIlbGQg2sHNxc4iCisKKyM6IGV4X2NtZHMuYzo0Mjc5Cittc2dpZCAiIG9uIDEgbGluZSIKK21zZ3N0ciAiINcgz8TOz8og09TSz8vFIgorCisjOiBleF9jbWRzLmM6NDI4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gJWxkIGxpbmVzIgorbXNnc3RyICIg1yAlbGQg09TSLiIKKworIzogZXhfY21kcy5jOjQzMzIKK21zZ2lkICJFMTQ3OiBDYW5ub3QgZG8gOmdsb2JhbCByZWN1cnNpdmUiCittc2dzdHIgIkUxNDc6IOvPzcHOxMEgOmdsb2JhbCDOxSDNz9bF1CDC2dTYINLFy9XS08nXzs/KIgorCisjOiBleF9jbWRzLmM6NDM2NworbXNnaWQgIkUxNDg6IFJlZ3VsYXIgZXhwcmVzc2lvbiBtaXNzaW5nIGZyb20gZ2xvYmFsIgorbXNnc3RyICJFMTQ4OiD3IMvPzcHOxMUgOmdsb2JhbCDQ0s/Q1d3Fzs8g0sXH1czR0s7PxSDX2dLB1sXOycUiCisKKyM6IGV4X2NtZHMuYzo0NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIvPPz9TXxdTT1NfJxSDbwcLMz87VIM7BysTFzs8gzsEgy8HWxM/KINPU0s/LxTogJXMiCisKKyM6IGV4X2NtZHMuYzo0NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMg8M/TzMXEztHRINPU0s/LwSDEzNEg2sHNxc7ZOlxuIgorIiQiCisKKyM6IGV4X2NtZHMuYzo0NTk4Cittc2dpZCAiRTQ3ODogRG9uJ3QgcGFuaWMhIgorbXNnc3RyICJFNDc4OiDz0M/Lz8rT1NfJxSwg1M/M2MvPINPQz8vPytPU18nFISIKKworIzogZXhfY21kcy5jOjQ2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY2MTogU29ycnksIG5vICclcycgaGVscCBmb3IgJXMiCittc2dzdHIgIkU2NjE6IMsg08/WwczFzsnALCDT0NLB18vBICclcycgxMzRICVzIM/U09XU09TX1cXUIgorCisjOiBleF9jbWRzLmM6NDY1MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTQ5OiBTb3JyeSwgbm8gaGVscCBmb3IgJXMiCittc2dzdHIgIkUxNDk6IOsg08/WwczFzsnAINPQ0sHXy8EgxMzRICVzIM/U09XU09TX1cXUIgorCisjOiBleF9jbWRzLmM6NDY4NworIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiCittc2dzdHIgIuna18nOydTFLCDGwcrMINPQ0sHXy8kgXCIlc1wiIM7FIM7BysTFziIKKworIzogZXhfY21kcy5jOjUxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MDogTm90IGEgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiRTE1MDogJXMgzsUg0dfM0cXU09Egy8HUwczPx8/NIgorCisjOiBleF9jbWRzLmM6NTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUyOiBDYW5ub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE1Mjog7sXXz9rNz9bOzyDP1MvS2dTYICVzIMTM0SDawdDJ08kiCisKKyM6IGV4X2NtZHMuYzo1MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTM6IFVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTUzOiDuxdfP2s3P1s7PIM/Uy9LZ1NggJXMgxMzRIN7Uxc7J0SIKKworIzogZXhfY21kcy5jOjUzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY3MDogTWl4IG9mIGhlbHAgZmlsZSBlbmNvZGluZ3Mgd2l0aGluIGEgbGFuZ3VhZ2U6ICVzIgorbXNnc3RyICJFNjcwOiDmwcrM2SDT0NLB18vJIMnT0M/M2NrVwNQg0sHaztnFIMvPxMnSz9fLySDEzNEgz8TOz8fPINHa2cvBOiAlcyIKKworIzogZXhfY21kcy5jOjU0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcyIKK21zZ3N0ciAiRTE1NDog8M/X1M/S0cDdwdHT0SDNxdTLwSBcIiVzXCIg1yDGwcrMxSAlcyIKKworIzogZXhfY21kcy5jOjU1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiDuxcna18XT1M7B0SDLz83BzsTBINrOwd7LwSAlcyIKKworIzogZXhfY21kcy5jOjU1NzcKK21zZ2lkICJFMTU2OiBNaXNzaW5nIHNpZ24gbmFtZSIKK21zZ3N0ciAiRTE1Njog8NLP0NXdxc7PIMnN0SDazsHey8EiCisKKyM6IGV4X2NtZHMuYzo1NjIzCittc2dpZCAiRTYxMjogVG9vIG1hbnkgc2lnbnMgZGVmaW5lZCIKK21zZ3N0ciAiRTYxMjog79DSxcTFzMXOzyDTzMnby8/NIM3Oz8fPINrOwd7Lz9ciCisKKyM6IGV4X2NtZHMuYzo1NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTog7sXQ0sHXyczYztnKINTFy9PUINrOwd7LwTogJXMiCisKKyM6IGV4X2NtZHMuYzo1NzIyIGV4X2NtZHMuYzo1OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTU6IFVua25vd24gc2lnbjogJXMiCittc2dzdHIgIkUxNTU6IO7FydrXxdPUztnKINrOwd7PyzogJXMiCisKKyM6IGV4X2NtZHMuYzo1NzcxCittc2dpZCAiRTE1OTogTWlzc2luZyBzaWduIG51bWJlciIKK21zZ3N0ciAiRTE1OTog8NLP0NXdxc4gzs/NxdIg2s7B3svBIgorCisjOiBleF9jbWRzLmM6NTg1MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU4OiBJbnZhbGlkIGJ1ZmZlciBuYW1lOiAlcyIKK21zZ3N0ciAiRTE1ODog7sXQ0sHXyczYzs/FIMnN0SDC1cbF0sE6ICVzIgorCisjOiBleF9jbWRzLmM6NTg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU3OiBJbnZhbGlkIHNpZ24gSUQ6ICVsZCIKK21zZ3N0ciAiRTE1Nzog7sXQ0sHXyczYztnKIElEINrOwd7LwTogJWxkIgorCisjOiBleF9jbWRzLmM6NTk2MgorbXNnaWQgIiAoTk9UIEZPVU5EKSIKK21zZ3N0ciAiICju5SDu4erk5e7vKSIKKworIzogZXhfY21kcy5jOjU5NjQKK21zZ2lkICIgKG5vdCBzdXBwb3J0ZWQpIgorbXNnc3RyICIgKM7FINDPxMTF0tbJ18HF1NPRKSIKKworIzogZXhfY21kcy5jOjYwNjMKK21zZ2lkICJbRGVsZXRlZF0iCittc2dzdHIgIlv1xMHMxc7PXSIKKworIzogZXhfY21kczIuYzo5MgorbXNnaWQgIkVudGVyaW5nIERlYnVnIG1vZGUuICBUeXBlIFwiY29udFwiIHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAi98vMwN6jziDSxdbJzSDP1MzBxMvJLiDkzNEg0NLPxM/M1sXOydEgzsHCxdLJ1MUgXCJjb250XCIiCisKKyM6IGV4X2NtZHMyLmM6OTYgZXhfZG9jbWQuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6ICVzIgorbXNnc3RyICLT1NLPy8EgJWxkOiAlcyIKKworIzogZXhfY21kczIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjbWQ6ICVzIgorbXNnc3RyICLLz83BzsTBOiAlcyIKKworIzogZXhfY21kczIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJlYWtwb2ludCBpbiBcIiVzJXNcIiBsaW5lICVsZCIKK21zZ3N0ciAi9M/ey8Egz9PUwc7P18vJINcgXCIlcyVzXCIg09TSLiAlbGQiCisKKyM6IGV4X2NtZHMyLmM6NTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjE6IEJyZWFrcG9pbnQgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTE2MTog9M/ey8Egz9PUwc7P18vJIM7FIM7BysTFzsE6ICVzIgorCisjOiBleF9jbWRzMi5jOjU2NgorbXNnaWQgIk5vIGJyZWFrcG9pbnRzIGRlZmluZWQiCittc2dzdHIgIvTP3svJIM/T1MHOz9fLySDOxSDP0NLFxMXMxc7ZIgorCisjOiBleF9jbWRzMi5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlM2QgICVzICVzICBsaW5lICVsZCIKK21zZ3N0ciAiJTNkICAlcyAlcyDT1NIuICVsZCIKKworIzogZXhfY21kczIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZSBjaGFuZ2VzIHRvIFwiJS4qc1wiPyIKK21zZ3N0ciAi88/I0sHOydTYIMnazcXOxc7J0SDXIFwiJS4qc1wiPyIKKworIzogZXhfY21kczIuYzo3ODggZXhfZG9jbWQuYzo5Mzc4Cittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIuLF2iDJzcXOySIKKworIzogZXhfY21kczIuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MjogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxNjI6IO7F08/I0sHOo87O2cUgydrNxc7FzsnRINcgwtXGxdLFIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo5ODQKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIiIKKyLw0sXE1dDSxdbExc7JxTog7sXP1snEwc7O2cog0MXSxcjPxCDXIMTS1cfPyiDC1cbF0iAo0NLP18XS2NTFIMHX1M/Lz83BzsTZKSIKKworIzogZXhfY21kczIuYzoxMzg3Cittc2dpZCAiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTYzOiDkzNEg0sXEwcvUydLP18HOydEgxM/T1NXQxc4g1M/M2MvPIM/Eyc4gxsHKzCIKKworIzogZXhfY21kczIuYzoxMzg5Cittc2dpZCAiRTE2NDogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBmaWxlIgorbXNnc3RyICJFMTY0OiD81M8g0MXS19nKIMbByswiCisKKyM6IGV4X2NtZHMyLmM6MTM5MQorbXNnaWQgIkUxNjU6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBmaWxlIgorbXNnc3RyICJFMTY1OiD81M8g0M/TzMXEzsnKIMbByswiCisKKyM6IGV4X2NtZHMyLmM6MTgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjY2OiBjb21waWxlciBub3Qgc3VwcG9ydGVkOiAlcyIKK21zZ3N0ciAiRTY2Njogy8/N0MnM0dTP0iDOxSDQz8TExdLWydfBxdTT0TogJXMiCisKKyM6IGV4X2NtZHMyLmM6MTg5NworIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiCittc2dzdHIgIvDPydPLIFwiJXNcIiDXIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIgorbXNnc3RyICLwz8nTyyBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorbXNnc3RyICLOxSDOwcrExc7PINcgJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE5NzQKK21zZ2lkICJTb3VyY2UgVmltIHNjcmlwdCIKK21zZ3N0ciAi99nQz8zOydTYINPDxc7B0snKIFZpbSIKKworIzogZXhfY21kczIuYzoyMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAi7sXM2NrRINPeydTB1Nggy8HUwczPxzogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIs7F18/azc/Wzs8g097J1MHU2CBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgItPU0s/LwSAlbGQ6IM7F18/azc/Wzs8g097J1MHU2CBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgItPeydTZ18HOycUg08PFzsHSydEgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IHNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAi09TSz8vBICVsZDog097J1NnXwc7JxSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzb3VyY2luZyAlcyIKK21zZ3N0ciAi097J1NnXwc7JxSDTw8XOwdLJ0SAlcyDawdfF0tvFzs8iCisKKyM6IGV4X2NtZHMyLmM6MjcwNworbXNnaWQgIlcxNTogV2FybmluZzogV3JvbmcgbGluZSBzZXBhcmF0b3IsIF5NIG1heSBiZSBtaXNzaW5nIgorbXNnc3RyICIiCisiVzE1OiDw0sXE1dDSxdbExc7JxTogzsXQ0sHXyczYztnKINLB2sTFzMnUxczYINPU0s/LyS4g98/azc/Wzs8g0NLP0NXdxc7PIF5NIgorCisjOiBleF9jbWRzMi5jOjI3NTYKK21zZ2lkICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY3OiDrz83BzsTBIDpzY3JpcHRlbmNvZGluZyDJ09DPzNja1cXU09Eg187FIMbByszBINPDxc7B0snRIgorCisjOiBleF9jbWRzMi5jOjI3ODkKK21zZ2lkICJFMTY4OiA6ZmluaXNoIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2ODog68/Nwc7EwSA6ZmluaXNoIMnT0M/M2NrVxdTT0SDXzsUgxsHKzMEg08PFzsHSydEiCisKKyM6IGV4X2NtZHMyLmM6MzIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYWdlICVkIgorbXNnc3RyICLz1NLBzsnDwSAlZCIKKworIzogZXhfY21kczIuYzozMzk0Cittc2dpZCAiTm8gdGV4dCB0byBiZSBwcmludGVkIgorbXNnc3RyICLwxd7B1MHU2CDOxd7Fx88iCisKKyM6IGV4X2NtZHMyLmM6MzQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyBwYWdlICVkICglZCUlKSIKK21zZ3N0ciAi8MXewdTYINPU0i4gJWQgKCVkJSUpIgorCisjOiBleF9jbWRzMi5jOjM0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIENvcHkgJWQgb2YgJWQiCittc2dzdHIgIiDrz9DJ0SAlZCDJ2iAlZCIKKworIzogZXhfY21kczIuYzozNTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50ZWQ6ICVzIgorbXNnc3RyICLuwdDF3sHUwc7POiAlcyIKKworIzogZXhfY21kczIuYzozNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nIGFib3J0ZWQiCittc2dzdHIgIvDF3sHU2CDQ0sXL0sHdxc7BIgorCisjOiBleF9jbWRzMi5jOjM5MTQKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IO/bycLLwSDawdDJ08kg1yDGwcrMIFBvc3RTY3JpcHQiCisKKyM6IGV4X2NtZHMyLmM6NDE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI0OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNjI0OiDuxdfP2s3P1s7PIM/Uy9LZ1NggxsHKzCBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDE5OSBleF9jbWRzMi5jOjQ4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NzogQ2FuJ3QgcmVhZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU3OiDuxdfP2s3P1s7PINDSz97J1MHU2CDGwcrMINLF09XS08/XIFBvc3RTY3JpcHQgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxODogZmlsZSBcIiVzXCIgaXMgbm90IGEgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIgorbXNnc3RyICJFNjE4OiDGwcrMIFwiJXNcIiDOxSDR18zRxdTT0SDGwcrMz80g0sXT1dLTz9cgUG9zdFNjcmlwdCIKKworIzogZXhfY21kczIuYzo0MjIyIGV4X2NtZHMyLmM6NDI0MiBleF9jbWRzMi5jOjQyNTcgZXhfY21kczIuYzo0Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTk6IGZpbGUgXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUiCittc2dzdHIgIkU2MTk6IMbByswgXCIlc1wiIM7FINHXzNHF1NPRIMTP0NXT1MnN2c0gxsHKzM/NINLF09XS08/XIFBvc3RTY3JpcHQiCisKKyM6IGV4X2NtZHMyLmM6NDMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjIxOiBcIiVzXCIgcmVzb3VyY2UgZmlsZSBoYXMgd3JvbmcgdmVyc2lvbiIKK21zZ3N0ciAiRTYyMTogxsHKzCDSxdPV0tPP1yBcIiVzXCIgzsXJ2tfF09TOz8og18XS08nJIgorCisjOiBleF9jbWRzMi5jOjQ3NzYKK21zZ2lkICJFMzI0OiBDYW4ndCBvcGVuIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkUzMjQ6IO7F18/azc/Wzs8gz9TL0tnU2CDGwcrMIFBvc3RTY3JpcHQiCisKKyM6IGV4X2NtZHMyLmM6NDgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU2OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU2OiDuxdfP2s3P1s7PIM/Uy9LZ1NggxsHKzCBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDkyOAorbXNnaWQgIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwicHJvbG9nLnBzXCIiCittc2dzdHIgIkU0NTY6IObByswg0sXT1dLTz9cgUG9zdFNjcmlwdCBcInByb2xvZy5wc1wiIM7FIM7BysTFziIKKworIzogZXhfY21kczIuYzo0OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXMucHNcIiIKK21zZ3N0ciAiRTQ1Njog5sHKzCDSxdPV0tPP1yBQb3N0U2NyaXB0IFwiJXMucHNcIiDOxSDOwcrExc4iCisKKyM6IGV4X2NtZHMyLmM6NDk3NworIywgYy1mb3JtYXQKK21zZ2lkICJFNjIwOiBVbmFibGUgdG8gY29udmVydCBmcm9tIG11bHRpLWJ5dGUgdG8gXCIlc1wiIGVuY29kaW5nIgorbXNnc3RyICIiCisiRTYyMDog8NLFz8LSwdrP18HOycUgydogzdXM2NTJwsHK1M7ZyCDTyc3Xz8zP1yDXIMvPxMnSz9fL1SBcIiVzXCIgzsXXz9rNz9bOzyIKKworIzogZXhfY21kczIuYzo1MTAyCittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICLv1NDSwdfLwSDOwSDQxd7B1NguLi4iCisKKyM6IGV4X2NtZHMyLmM6NTEwNgorbXNnaWQgIkUzNjU6IEZhaWxlZCB0byBwcmludCBQb3N0U2NyaXB0IGZpbGUiCittc2dzdHIgIkUzNjU6IO7FINXEwczP09gg19nQz8zOydTYINDF3sHU2CDGwcrMwSBQb3N0U2NyaXB0IgorCisjOiBleF9jbWRzMi5jOjUxMDgKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIvrBxMHOycUgzsEg0MXewdTYIM/U0NLB18zFzs8uIgorCisjOiBleF9jbWRzMi5jOjU2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCAlc2xhbmd1YWdlOiBcIiVzXCIiCittc2dzdHIgIuHL1MnXztnKICVz0drZyzogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjU2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6IO7F18/azc/Wzs8g083FzsnU2CDR2tnLIM7BIFwiJXNcIiIKKworIzogZXhfZG9jbWQuYzo1MjUKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAi8MXSxcjPxCDXINLF1snNIEV4LiDkzNEg0MXSxcjPxMEg1yDvwtneztnKINLF1snNIM7BwsXSydTFIFwidmlzdWFsXCIiCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjU2MQorbXNnaWQgIkU1MDE6IEF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJFNTAxOiD3IMvPzsPFIMbByszBIgorCisjOiBleF9kb2NtZC5jOjY2OQorbXNnaWQgIkUxNjk6IENvbW1hbmQgdG9vIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE2OTogQ8zJ28vPzSDSxcvV0tPJ187B0SDLz83BzsTBIgorCisjOiBleF9kb2NtZC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwNTogRXhjZXB0aW9uIG5vdCBjYXVnaHQ6ICVzIgorbXNnc3RyICJFNjA1OiDp08vMwN7J1MXM2M7B0SDTydTVwcPJ0SDOxSDPwtLBws/Uwc7BOiAlcyIKKworIzogZXhfZG9jbWQuYzoxMzE3Cittc2dpZCAiRW5kIG9mIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAi68/OxcMg097J1MHOzs/HzyDGwcrMwSIKKworIzogZXhfZG9jbWQuYzoxMzE4Cittc2dpZCAiRW5kIG9mIGZ1bmN0aW9uIgorbXNnc3RyICLrz87FwyDG1c7Lw8nJIgorCisjOiBleF9kb2NtZC5jOjE5MDcKK21zZ2lkICJFNDY0OiBBbWJpZ3VvdXMgdXNlIG9mIHVzZXItZGVmaW5lZCBjb21tYW5kIgorbXNnc3RyICJFNDY0OiDuxc/Ezs/azsHezs/FIMnT0M/M2NrP18HOycUgy8/Nwc7E2SDQz8zY2s/XwdTFzNEiCisKKyM6IGV4X2RvY21kLmM6MTkyMQorbXNnaWQgIkU0OTI6IE5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAiRTQ5Mjog/NTPIM7FIMvPzcHOxMEg0sXEwcvUz9LBIgorCisjOiBleF9kb2NtZC5jOjIwMjgKK21zZ2lkICJFNDkzOiBCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4iCittc2dzdHIgIkU0OTM6IPrBxMHOIM/C0sHUztnKIMTJwdDB2s/OIgorCisjOiBleF9kb2NtZC5jOjIwMzcKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4sIE9LIHRvIHN3YXAiCittc2dzdHIgIvrBxMHOIM/C0sHUztnKIMTJwdDB2s/OLCDNxc7Rxc0gx9LBzsnD2SDNxdPUwc3JIgorCisjOiBleF9kb2NtZC5jOjIxNjAKK21zZ2lkICJFNDk0OiBVc2UgdyBvciB3Pj4iCittc2dzdHIgIkU0OTQ6IOnT0M/M2NrVytTFIHcgyczJIHc+PiIKKworIzogZXhfZG9jbWQuYzozNzg2Cittc2dpZCAiRTMxOTogU29ycnksIHRoZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMzE5OiDp2tfJzsnUxSwg3NTBIMvPzcHOxMEgzsXEz9PU1dDOwSDXIMTBzs7PyiDXxdLTyckiCisKKyM6IGV4X2RvY21kLmM6Mzk4OQorbXNnaWQgIkUxNzI6IE9ubHkgb25lIGZpbGUgbmFtZSBhbGxvd2VkIgorbXNnc3RyICJFMTcyOiDywdrSxdvFzs8gydPQz8zY2s/XwdTYINTPzNjLzyDPxM7PIMnN0SDGwcrMwSIKKworIzogZXhfZG9jbWQuYzo0NTY5Cittc2dpZCAiMSBtb3JlIGZpbGUgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIKK21zZ3N0ciAiMSDGwcrMIM/WycTBxdQg0sXEwcvUydLP18HOydEuIPfZytTJPyIKKworIzogZXhfZG9jbWQuYzo0NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG1vcmUgZmlsZXMgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIKK21zZ3N0ciAi5dPU2CDOxc/U0sXEwcvUydLP18HOztnFIMbByszZICglZCkuIPfZytTJPyIKKworIzogZXhfZG9jbWQuYzo0NTc5Cittc2dpZCAiRTE3MzogMSBtb3JlIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE3MzogMSDGwcrMIM/WycTBxdQg0sXEwcvUydLP18HOydEuIgorCisjOiBleF9kb2NtZC5jOjQ1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3MzogJWxkIG1vcmUgZmlsZXMgdG8gZWRpdCIKK21zZ3N0ciAiRTE3Mzog5dPU2CDOxc/U0sXEwcvUydLP18HOztnFIMbByszZICglZCkuIgorCisjOiBleF9kb2NtZC5jOjQ2NzYKK21zZ2lkICJFMTc0OiBDb21tYW5kIGFscmVhZHkgZXhpc3RzOiBhZGQgISB0byByZXBsYWNlIGl0IgorbXNnc3RyICJFMTc0OiDrz83BzsTBINXWxSDT1d3F09TX1cXULiDkz8LB19jUxSAhIMTM0SDawc3FztkuIgorCisjOiBleF9kb2NtZC5jOjQ3ODcKK21zZ2lkICIiCisiXG4iCisiICAgIE5hbWUgICAgICAgIEFyZ3MgUmFuZ2UgQ29tcGxldGUgIERlZmluaXRpb24iCittc2dzdHIgIiIKKyJcbiIKKyIgICAg6c3RICAgICAg8MHSwc0uIOTJwdAuIOTP0M/Mzi4gICAg79DSxcTFzMXOycUiCisKKyM6IGV4X2RvY21kLmM6NDg3NgorbXNnaWQgIk5vIHVzZXItZGVmaW5lZCBjb21tYW5kcyBmb3VuZCIKK21zZ3N0ciAi68/Nwc7E2Swgz9DSxcTFzKPOztnFINDPzNjaz9fB1MXMxc0sIM7FIM/CzsHS1dbFztkuIgorCisjOiBleF9kb2NtZC5jOjQ5MDgKK21zZ2lkICJFMTc1OiBObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIgorbXNnc3RyICJFMTc1OiDQwdLBzcXU0iDOxSDawcTBziIKKworIzogZXhfZG9jbWQuYzo0OTYwCittc2dpZCAiRTE3NjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJFMTc2OiDuxdDSwdfJzNjOz8Ugy8/Myd7F09TXzyDQwdLBzcXU0s/XIgorCisjOiBleF9kb2NtZC5jOjQ5NzUKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiD+ydPMzy3Q0snT1MHXy9UgzsXM2NrRINXLwdrZ18HU2CDE18HWxNkiCisKKyM6IGV4X2RvY21kLmM6NDk4NQorbXNnaWQgIkUxNzg6IEludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgY291bnQiCittc2dzdHIgIkUxNzg6IO7F0NLB18nM2M7PxSDazsHexc7JxSDeydPMwS3Q0snT1MHXy8kg0M8g1c3PzN7BzsnAIgorCisjOiBleF9kb2NtZC5jOjUwMTYKK21zZ2lkICJFMTc5OiBhcmd1bWVudCByZXF1aXJlZCBmb3IgY29tcGxldGUiCittc2dzdHIgIkUxNzk6IMTM0SDawdfF0tvFzsnRINTSxcLVxdTT0SDVy8HawdTYINDB0sHNxdTSIgorCisjOiBleF9kb2NtZC5jOjUwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MDogSW52YWxpZCBjb21wbGV0ZSB2YWx1ZTogJXMiCittc2dzdHIgIkUxODA6IO7F0NLB18nM2M7PxSDazsHexc7JxSDEz9DPzM7FzsnROiAlcyIKKworIzogZXhfZG9jbWQuYzo1MDU3Cittc2dpZCAiRTQ2ODogQ29tcGxldGlvbiBhcmd1bWVudCBvbmx5IGFsbG93ZWQgZm9yIGN1c3RvbSBjb21wbGV0aW9uIgorbXNnc3RyICIiCisiRTQ2ODog8MHSwc3F1NIgwdfUz8TP0M/MzsXOydEgzc/Wzs8gydPQz8zY2s/XwdTYINTPzNjLzyDTIM/Tz8LZzSDEz9DPzM7FzsnFzSIKKworIzogZXhfZG9jbWQuYzo1MDYzCittc2dpZCAiRTQ2NzogQ3VzdG9tIGNvbXBsZXRpb24gcmVxdWlyZXMgYSBmdW5jdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiRTQ2Nzog79PPws/FIMTP0M/MzsXOycUg1NLFwtXF1CDVy8Hawc7J0SDQwdLBzcXU0sEgxtXOy8PJySIKKworIzogZXhfZG9jbWQuYzo1MDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MTog7sXQ0sHXyczYztnKIMHU0snC1dQ6ICVzIgorCisjOiBleF9kb2NtZC5jOjUxMTcKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4Mjog7sXQ0sHXyczYzs/FIMnN0SDLz83BzsTZIgorCisjOiBleF9kb2NtZC5jOjUxMzIKK21zZ2lkICJFMTgzOiBVc2VyIGRlZmluZWQgY29tbWFuZHMgbXVzdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIiCittc2dzdHIgIkUxODM6IOvPzcHOxMEg0M/M2NrP18HUxczRIMTPzNbOwSDOwd7JzsHU2NPRINMg2sHHzMHXzs/KIMLVy9fZIgorCisjOiBleF9kb2NtZC5jOjUyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NDogTm8gc3VjaCB1c2VyLWRlZmluZWQgY29tbWFuZDogJXMiCittc2dzdHIgIkUxODQ6IO7F1CDUwcvPyiDLz83BzsTZINDPzNjaz9fB1MXM0TogJXMiCisKKyM6IGV4X2RvY21kLmM6NTY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg1OiBDYW5ub3QgZmluZCBjb2xvciBzY2hlbWUgJXMiCittc2dzdHIgIkUxODU6IOPXxdTP18HRINPIxc3BICVzIM7FIM7BysTFzsEiCisKKyM6IGV4X2RvY21kLmM6NTY3MgorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICLw0snXxdQsINDPzNjaz9fB1MXM2CBWaW0hIgorCisjOiBleF9kb2NtZC5jOjYzODkKK21zZ2lkICJFZGl0IEZpbGUgaW4gbmV3IHdpbmRvdyIKK21zZ3N0ciAi8sXEwcvUydLP18HU2CDGwcrMINcgzs/Xz80gz8vOxSIKKworIzogZXhfZG9jbWQuYzo2Njg0Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICLixdog09fP0C3GwcrMwSIKKworIzogZXhfZG9jbWQuYzo2Nzg4Cittc2dpZCAiQXBwZW5kIEZpbGUiCittc2dzdHIgIuTPwsHXydTYIMbByswiCisKKyM6IGV4X2RvY21kLmM6Njg1MgorbXNnaWQgIkUxODY6IE5vIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE4Njog7sXUINDSxcTZxNXdxcfPIMvB1MHMz8fBIgorCisjOiBleF9kb2NtZC5jOjY5MzQKK21zZ2lkICJFMTg3OiBVbmtub3duIgorbXNnc3RyICJFMTg3OiDuxcna18XT1M7PIgorCisjOiBleF9kb2NtZC5jOjcwMTkKK21zZ2lkICJFNDY1OiA6d2luc2l6ZSByZXF1aXJlcyB0d28gbnVtYmVyIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTQ2NTogy8/Nwc7EwSA6d2luc2l6ZSDU0sXC1cXUINXLwdrBzsnRIMTX1cgg3snTzM/X2cgg0MHSwc3F1NLP1yIKKworIzogZXhfZG9jbWQuYzo3MDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIldpbmRvdyBwb3NpdGlvbjogWCAlZCwgWSAlZCIKK21zZ3N0ciAi8M/Mz9bFzsnFIM/LzsE6IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NzA4MAorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICJFMTg4OiD3IMTBzs7PyiDTydPUxc3FIM/Q0sXExczFzsnFINDPzM/Wxc7J0SDPy87BIM7FINLBws/UwcXUIgorCisjOiBleF9kb2NtZC5jOjcwOTAKK21zZ2lkICJFNDY2OiA6d2lucG9zIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY2OiDLz83BzsTBIDp3aW5wb3Mg1NLFwtXF1CDVy8Hawc7J0SDE19XIIN7J08zP19nIINDB0sHNxdTSz9ciCisKKyM6IGV4X2RvY21kLmM6NzM2OAorbXNnaWQgIlNhdmUgUmVkaXJlY3Rpb24iCittc2dzdHIgIvDF0sXOwdDSwdfMxc7JxSDawdDJ08kiCisKKyM6IGV4X2RvY21kLmM6NzU1OAorbXNnaWQgIlNhdmUgVmlldyIKK21zZ3N0ciAi88/I0sHOxc7JxSDXycTBIgorCisjOiBleF9kb2NtZC5jOjc1NTkKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIvPPyNLBzsXOycUg08XBztPBIgorCisjOiBleF9kb2NtZC5jOjc1NjEKK21zZ2lkICJTYXZlIFNldHVwIgorbXNnc3RyICLzz8jSwc7FzsnFIM7B09TSz8XLIgorCisjOiBleF9kb2NtZC5jOjc3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4OTogXCIlc1wiIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTg5OiBcIiVzXCIg09XdxdPU19XF1CAoISwg3tTPwtkgz8LPytTJINDSz9fF0svVKSIKKworIzogZXhfZG9jbWQuYzo3NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTA6IENhbm5vdCBvcGVuIFwiJXNcIiBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE5MDog7sXXz9rNz9bOzyDP1MvS2dTYIMTM0SDawdDJ08kgXCIlc1wiIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo3NzQyCittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICJFMTkxOiDwwdLBzcXU0iDEz8zWxc4gwtnU2CDQ0tHNz8ovz8LSwdTOz8ogy8HX2d7Lz8ogyczJIMLVy9fPyiIKKworIzogZXhfZG9jbWQuYzo3Nzg0Cittc2dpZCAiRTE5MjogUmVjdXJzaXZlIHVzZSBvZiA6bm9ybWFsIHRvbyBkZWVwIgorbXNnc3RyICJFMTkyOiDzzMnby8/NIMfM1cLPy8HRINLFy9XS08nRINDSySDJ09DPzNjaz9fBzsnJIMvPzcHOxNkgOm5vcm1hbCIKKworIzogZXhfZG9jbWQuYzo4MzAyCittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6IO7F1CDTz9PFxM7Fx88gyc3FzskgxsHKzMEgxMzRINrBzcXO2SAnIyciCisKKyM6IGV4X2RvY21kLmM6ODMzMworbXNnaWQgIkU0OTU6IG5vIGF1dG9jb21tYW5kIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhZmlsZT5cIiIKK21zZ3N0ciAiRTQ5NTog7sXUIMHX1M/Lz83BzsTOz8fPIMnNxc7JIMbByszBIMTM0SDawc3FztkgXCI8YWZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6ODM0MQorbXNnaWQgIkU0OTY6IG5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAiRTQ5Njog7sXUIMHX1M/Lz83BzsTOz8fPIM7PzcXSwSDC1cbF0sEgxMzRINrBzcXO2SBcIjxhYnVmPlwiIgorCisjOiBleF9kb2NtZC5jOjgzNTIKK21zZ2lkICJFNDk3OiBubyBhdXRvY29tbWFuZCBtYXRjaCBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFtYXRjaD5cIiIKK21zZ3N0ciAiRTQ5Nzog7sXUIMHX1M/Lz83BzsTOz8fPIMnNxc7JINPPz9TXxdTT1NfJ0SDEzNEg2sHNxc7ZIFwiPGFtYXRjaD5cIiIKKworIzogZXhfZG9jbWQuYzo4MzYyCittc2dpZCAiRTQ5ODogbm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIkU0OTg6IM7F1CDJzcXOySDGwcrMwSA6c291cmNlIMTM0SDawc3FztkgXCI8c2ZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6ODQwMworIywgbm8tYy1mb3JtYXQKK21zZ2lkICJFNDk5OiBFbXB0eSBmaWxlIG5hbWUgZm9yICclJyBvciAnIycsIG9ubHkgd29ya3Mgd2l0aCBcIjpwOmhcIiIKK21zZ3N0ciAiRTQ5OTog8NXT1M/FIMnN0SDGwcrMwSDEzNEgJyUnIMnMySAnIycsINfP2s3P1s7PINTPzNjLzyBjIFwiOnA6aFwiIgorCisjOiBleF9kb2NtZC5jOjg0MDUKK21zZ2lkICJFNTAwOiBFdmFsdWF0ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJFNTAwOiDyxdrVzNjUwdTPzSDX2dLB1sXOydEg0dfM0cXU09Eg0NXT1MHRINPU0s/LwSIKKworIzogZXhfZG9jbWQuYzo5MzYwCittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiDuxdfP2s3P1s7PIM/Uy9LZ1NggxsHKzCB2aW1pbmZvIMTM0SDe1MXOydEiCisKKyM6IGV4X2RvY21kLmM6OTUzMworbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5Njog9yDc1M/KINfF0tPJySDEycfSwcbZIM7FINLBws/UwcDUIgorCisjOiBleF9ldmFsLmM6NDQwCittc2dpZCAiRTYwODogQ2Fubm90IDp0aHJvdyBleGNlcHRpb25zIHdpdGggJ1ZpbScgcHJlZml4IgorbXNnc3RyICIiCisiRTYwODog7sXXz9rNz9bOzyDX2dDPzM7J1Nggy8/Nwc7E1SA6dGhyb3cgxMzRIMnTy8zA3sXOycog0yDQ0snT1MHXy8/KICdWaW0nIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV4X2V2YWwuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIHRocm93bjogJXMiCittc2dzdHIgIunTy8zA3snUxczYzsHRINPJ1NXBw8nROiAlcyIKKworIzogZXhfZXZhbC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZmluaXNoZWQ6ICVzIgorbXNnc3RyICL6wdfF0tvFzsEgz8LSwcLP1MvBIMnTy8zA3snUxczYzs/KINPJ1NXBw8nJOiAlcyIKKworIzogZXhfZXZhbC5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZGlzY2FyZGVkOiAlcyIKK21zZ3N0ciAi6dPLzMDeydTFzNjOwdEg08nU1cHDydEg0NLPycfOz9LJ0s/Xwc7BOiAlcyIKKworIzogZXhfZXZhbC5jOjYyMCBleF9ldmFsLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBsaW5lICVsZCIKK21zZ3N0ciAiJXMsINPU0s/LwSAlbGQiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gY2F1Z2h0OiAlcyIKK21zZ3N0ciAi78LSwcLP1MvBIMnTy8zA3snUxczYzs/KINPJ1NXBw8nJOiAlcyIKKworIzogZXhfZXZhbC5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtYWRlIHBlbmRpbmciCittc2dzdHIgIiVzINfZ0M/MztHF1CDP1snEwc7JxSIKKworIzogZXhfZXZhbC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXN1bWVkIgorbXNnc3RyICIlcyDXz9rPws7P18zFzs8iCisKKyM6IGV4X2V2YWwuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzY2FyZGVkIgorbXNnc3RyICIlcyDQ0s/Q1d3Fzs8iCisKKyM6IGV4X2V2YWwuYzo3NDYKK21zZ2lkICJFeGNlcHRpb24iCittc2dzdHIgIunTy8zA3snUxczYzsHRINPJ1NXBw8nRIgorCisjOiBleF9ldmFsLmM6NzUyCittc2dpZCAiRXJyb3IgYW5kIGludGVycnVwdCIKK21zZ3N0ciAi79vJwsvBIMkg0NLF0tnXwc7JxSIKKworIzogZXhfZXZhbC5jOjc1NCBndWkuYzo0MzgxCittc2dpZCAiRXJyb3IiCittc2dzdHIgIu/bycLLwSIKKworIy4gaWYgKHBlbmRpbmcgJiBDU1RQX0lOVEVSUlVQVCkKKyM6IGV4X2V2YWwuYzo3NTYKK21zZ2lkICJJbnRlcnJ1cHQiCittc2dzdHIgIvDSxdLZ18HOycUiCisKKyM6IGV4X2V2YWwuYzo4MzAKK21zZ2lkICJFNTc5OiA6aWYgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTU3OTog08zJ28vPzSDHzNXCz8vPINfMz9bFzs7ZyiA6aWYiCisKKyM6IGV4X2V2YWwuYzo4NjcKK21zZ2lkICJFNTgwOiA6ZW5kaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODA6IDplbmRpZiDCxdogOmlmIgorCisjOiBleF9ldmFsLmM6OTExCittc2dpZCAiRTU4MTogOmVsc2Ugd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODE6IDplbHNlIMLF2iA6aWYiCisKKyM6IGV4X2V2YWwuYzo5MTQKK21zZ2lkICJFNTgyOiA6ZWxzZWlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgyOiA6ZWxzZWlmIMLF2iA6aWYiCisKKyM6IGV4X2V2YWwuYzo5MjEKK21zZ2lkICJFNTgzOiBtdWx0aXBsZSA6ZWxzZSIKK21zZ3N0ciAiRTU4Mzogz8LOwdLV1sXOzyDOxdPLz8zYy88gOmVsc2UiCisKKyM6IGV4X2V2YWwuYzo5MjQKK21zZ2lkICJFNTg0OiA6ZWxzZWlmIGFmdGVyIDplbHNlIgorbXNnc3RyICJFNTg0OiA6ZWxzZWlmINDP08zFIDplbHNlIgorCisjOiBleF9ldmFsLmM6OTkxCittc2dpZCAiRTU4NTogOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU1ODU6INPMydvLz80gx8zVws/LzyDXzM/Wxc7O2cogOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTA0NworbXNnaWQgIkU1ODY6IDpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4NjogOmNvbnRpbnVlIMLF2iA6d2hpbGUiCisKKyM6IGV4X2V2YWwuYzoxMDg3Cittc2dpZCAiRTU4NzogOmJyZWFrIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg3OiA6YnJlYWsgwsXaIDp3aGlsZSIKKworIzogZXhfZXZhbC5jOjEyODYKK21zZ2lkICJFNjAxOiA6dHJ5IG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU2MDE6INPMydvLz80gx8zVws/LzyDXzM/Wxc7O2cogOnRyeSIKKworIzogZXhfZXZhbC5jOjEzNjYKK21zZ2lkICJFNjAzOiA6Y2F0Y2ggd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAzOiA6Y2F0Y2ggwsXaIDp0cnkiCisKKyMuIEdpdmUgdXAgZm9yIGEgIjpjYXRjaCIgYWZ0ZXIgIjpmaW5hbGx5IiBhbmQgaWdub3JlIGl0LgorIy4gKiBKdXN0IHBhcnNlLgorIzogZXhfZXZhbC5jOjEzODgKK21zZ2lkICJFNjA0OiA6Y2F0Y2ggYWZ0ZXIgOmZpbmFsbHkiCittc2dzdHIgIkU2MDQ6IDpjYXRjaCDCxdogOmZpbmFsbHkiCisKKyM6IGV4X2V2YWwuYzoxNTIxCittc2dpZCAiRTYwNjogOmZpbmFsbHkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjA2OiA6ZmluYWxseSDCxdogOnRyeSIKKworIy4gR2l2ZSB1cCBmb3IgYSBtdWx0aXBsZSAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjOiBleF9ldmFsLmM6MTU0NQorbXNnaWQgIkU2MDc6IG11bHRpcGxlIDpmaW5hbGx5IgorbXNnc3RyICJFNjA3OiDPws7B0tXWxc7PIM7F08vPzNjLzyA6ZmluYWxseSIKKworIzogZXhfZXZhbC5jOjE2NTQKK21zZ2lkICJFNjAyOiA6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIKK21zZ3N0ciAiRTYwMjogOmVuZHRyeSDCxdogOnRyeSIKKworIzogZXhfZXZhbC5jOjE5ODYKK21zZ2lkICJFMTkzOiA6ZW5kZnVuY3Rpb24gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTkzOiDLz83BzsTBIDplbmRmdW5jdGlvbiDNz9bF1CDJ09DPzNjaz9fB1NjT0SDUz8zYy88g187V1NLJIMbVzsvDyckiCisKKyM6IGV4X2dldGxuLmM6MzI5NgorbXNnaWQgInRhZ25hbWUiCittc2dzdHIgIsnN0SDNxdTLySIKKworIzogZXhfZ2V0bG4uYzozMjk5Cittc2dpZCAiIGtpbmQgZmlsZVxuIgorbXNnc3RyICIg1MnQIMbByszBXG4iCisKKyM6IGV4X2dldGxuLmM6NDc1MgorbXNnaWQgIidoaXN0b3J5JyBvcHRpb24gaXMgemVybyIKK21zZ3N0ciAi2s7B3sXOycUgz9DDyckgJ2hpc3RvcnknINLB187PIM7VzMAiCisKKyM6IGV4X2dldGxuLmM6NTAyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyAlcyBIaXN0b3J5IChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgJXMsIMnT1M/SydEgKM7B3snOwdEgz9Qg09fF1sXHzyDLINPUwdLPzdUpOlxuIgorCisjOiBleF9nZXRsbi5jOjUwMjQKK21zZ2lkICJDb21tYW5kIExpbmUiCittc2dzdHIgIuvPzcHOxM7B0SDT1NLPy8EiCisKKyM6IGV4X2dldGxuLmM6NTAyNQorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgIvPU0s/LwSDQz8nTy8EiCisKKyM6IGV4X2dldGxuLmM6NTAyNgorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgIvfZ0sHWxc7JxSIKKworIzogZXhfZ2V0bG4uYzo1MDI3Cittc2dpZCAiSW5wdXQgTGluZSIKK21zZ3N0ciAi89TSz8vBINfXz8TBIgorCisjOiBleF9nZXRsbi5jOjUwNjUKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyIMLPzNjbxSDEzMnO2SDLz83BzsTZIgorCisjOiBleF9nZXRsbi5jOjUyNDIKK21zZ2lkICJFMTk5OiBBY3RpdmUgd2luZG93IG9yIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICJFMTk5OiD1xMHMxc7PIMHL1MnXzs/FIM/Lzs8gyczJIMLVxsXSIgorCisjOiBmaWxlaW8uYzozNzcKK21zZ2lkICJJbGxlZ2FsIGZpbGUgbmFtZSIKK21zZ3N0ciAi7sXEz9DV09TJzc/FIMnN0SDGwcrMwSIKKworIzogZmlsZWlvLmM6NDAxIGZpbGVpby5jOjUzNSBmaWxlaW8uYzoyOTEzIGZpbGVpby5jOjI5NTQKK21zZ2lkICJpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAi0dfM0cXU09Egy8HUwczPx8/NIgorCisjOiBmaWxlaW8uYzo0MDMKK21zZ2lkICJpcyBub3QgYSBmaWxlIgorbXNnc3RyICLOxSDR18zRxdTT0SDGwcrMz80iCisKKyM6IGZpbGVpby5jOjU1NyBmaWxlaW8uYzo0MTMxCittc2dpZCAiW05ldyBGaWxlXSIKK21zZ3N0ciAiW+7P19nKIMbBysxdIgorCisjOiBmaWxlaW8uYzo1OTAKK21zZ2lkICJbUGVybWlzc2lvbiBEZW5pZWRdIgorbXNnc3RyICJb5M/T1NXQINrB0NLF3aPOXSIKKworIzogZmlsZWlvLmM6Njk0Cittc2dpZCAiRTIwMDogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG1hZGUgdGhlIGZpbGUgdW5yZWFkYWJsZSIKK21zZ3N0ciAiRTIwMDog9yDSxdrVzNjUwdTFINfZ0M/MzsXOydEgwdfUz8vPzcHOxCAqUmVhZFByZSDGwcrMINPUwcwgzsXeydTBxc3ZzSIKKworIzogZmlsZWlvLmM6Njk2Cittc2dpZCAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTIwMTogwdfUz8vPzcHOxNkgKlJlYWRQcmUgzsUgxM/M1s7ZIMnazcXO0dTYIMHL1MnXztnKIMLVxsXSIgorCisjOiBmaWxlaW8uYzo3MTcKK21zZ2lkICJWaW06IFJlYWRpbmcgZnJvbSBzdGRpbi4uLlxuIgorbXNnc3RyICJWaW06INfZ0M/MztHF1NPRIN7Uxc7JxSDJ2iDT1MHOxMHS1M7Px88g0M/Uz8vBINfXz8TBIHN0ZGluLi4uXG4iCisKKyM6IGZpbGVpby5jOjcyMworbXNnaWQgIlJlYWRpbmcgZnJvbSBzdGRpbi4uLiIKK21zZ3N0ciAi99nQz8zO0cXU09Eg3tTFzsnFIMnaINPUwc7EwdLUzs/HzyDQz9TPy8Eg19fPxMEgc3RkaW4uLi4iCisKKyMuIFJlLW9wZW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgZmFpbGVkIQorIzogZmlsZWlvLmM6MTAwMAorbXNnaWQgIkUyMDI6IENvbnZlcnNpb24gbWFkZSBmaWxlIHVucmVhZGFibGUhIgorbXNnc3RyICJFMjAyOiD3INLF2tXM2NTB1MUg0NLFz8LSwdrP18HOydEgxsHKzCDT1MHMIM7F3snUwcXN2c0hIgorCisjOiBmaWxlaW8uYzoyMDkwCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2ZpZm8vx87F2sTPXSIKKworIzogZmlsZWlvLmM6MjA5NworbXNnaWQgIltmaWZvXSIKK21zZ3N0ciAiW2ZpZm9dIgorCisjOiBmaWxlaW8uYzoyMTA0Cittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIlvHzsXaxM9dIgorCisjOiBmaWxlaW8uYzoyMTEyCittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW1JPXSIKKworIzogZmlsZWlvLmM6MjEyMgorbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW9DSz9DV3cXO2SDTyc3Xz8zZIENSXSIKKworIzogZmlsZWlvLmM6MjEyNworbXNnaWQgIltOTCBmb3VuZF0iCittc2dzdHIgIlvvws7B0tXWxc7ZINPJzdfPzNkgTkxdIgorCisjOiBmaWxlaW8uYzoyMTMyCittc2dpZCAiW2xvbmcgbGluZXMgc3BsaXRdIgorbXNnc3RyICJbxMzJzs7ZxSDT1NLPy8kg0sHawsnU2V0iCisKKyM6IGZpbGVpby5jOjIxMzggZmlsZWlvLmM6NDExNQorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW+Ll+iDQ0sXPwtLB2s/Xwc7Jyl0iCisKKyM6IGZpbGVpby5jOjIxNDMgZmlsZWlvLmM6NDEyMAorbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJb0MXSxcvPxMnSz9fBzs9dIgorCisjOiBmaWxlaW8uYzoyMTUwIGZpbGVpby5jOjQxNDUKK21zZ2lkICJbY3J5cHRlZF0iCittc2dzdHIgIlvawdvJxtLP18HOz10iCisKKyM6IGZpbGVpby5jOjIxNTcKK21zZ2lkICJbQ09OVkVSU0lPTiBFUlJPUl0iCittc2dzdHIgIlvv++ni6+Eg8PLl7+Ly4frv9+Hu6fFdIgorCisjOiBmaWxlaW8uYzoyMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIltJTExFR0FMIEJZVEUgaW4gbGluZSAlbGRdIgorbXNnc3RyICJb7uXk7/D18/Tp7fnqIOLh6vQg1yDT1NLPy8UgJWxkXSIKKworIzogZmlsZWlvLmM6MjE3MAorbXNnaWQgIltSRUFEIEVSUk9SU10iCittc2dzdHIgIlvv++ni6+kg/vTl7unxXSIKKworIzogZmlsZWlvLmM6MjM4NgorbXNnaWQgIkNhbid0IGZpbmQgdGVtcCBmaWxlIGZvciBjb252ZXJzaW9uIgorbXNnc3RyICL30sXNxc7O2cogxsHKzCDEzNEg0MXSxcvPxMnSz9fBzsnRIM7FIM7BysTFziIKKworIzogZmlsZWlvLmM6MjM5MworbXNnaWQgIkNvbnZlcnNpb24gd2l0aCAnY2hhcmNvbnZlcnQnIGZhaWxlZCIKK21zZ3N0ciAi8NLFz8LSwdrP18HOycUg0yDQz83P3djAICdjaGFyY29udmVydCcgzsUg19nQz8zOxc7PIgorCisjOiBmaWxlaW8uYzoyMzk2Cittc2dpZCAiY2FuJ3QgcmVhZCBvdXRwdXQgb2YgJ2NoYXJjb252ZXJ0JyIKK21zZ3N0ciAizsXXz9rNz9bOzyDQ0s/eydTB1Ngg19nXz8QgJ2NoYXJjb252ZXJ0JyIKKworIzogZmlsZWlvLmM6Mjc5NgorbXNnaWQgIkUyMDM6IEF1dG9jb21tYW5kcyBkZWxldGVkIG9yIHVubG9hZGVkIGJ1ZmZlciB0byBiZSB3cml0dGVuIgorbXNnc3RyICIiCisiRTIwMzog4tXGxdIsIMvP1M/S2cog1NLFws/XwczP09gg2sHQydPB1NgsINXEwcyjziDJzMkg19nH0tXWxc4gwdfUz8vPzcHOxM/KIgorCisjOiBmaWxlaW8uYzoyODE5Cittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IOvPzMnexdPU188g09TSz8sgydrNxc7Fzs8gwdfUz8vPzcHOxM/KIM7Fz9bJxMHOztnNIM/C0sHaz80iCisKKyM6IGZpbGVpby5jOjI4NTcKK21zZ2lkICJOZXRCZWFucyBkaXNzYWxsb3dzIHdyaXRlcyBvZiB1bm1vZGlmaWVkIGJ1ZmZlcnMiCittc2dzdHIgIk5ldEJlYW5zIM7FINDP2tfPzNHF1CDX2dDPzM7R1Ngg2sHQydPYIM7FydrNxc6jzs7ZyCDC1cbF0s/XIgorCisjOiBmaWxlaW8uYzoyODY1Cittc2dpZCAiUGFydGlhbCB3cml0ZXMgZGlzYWxsb3dlZCBmb3IgTmV0QmVhbnMgYnVmZmVycyIKK21zZ3N0ciAi/sHT1MnezsHRINrB0MnT2CDC1cbF0s/XIE5ldEJlYW5zIM7FIMTP0NXTy8HF1NPRIgorCisjOiBmaWxlaW8uYzoyOTE5IGZpbGVpby5jOjI5MzcKK21zZ2lkICJpcyBub3QgYSBmaWxlIG9yIHdyaXRhYmxlIGRldmljZSIKK21zZ3N0ciAizsUg0dfM0cXU09EgxsHKzM/NIMnMySDV09TSz8rT1NfPzSwgxM/T1NXQztnNIMTM0SDawdDJ08kiCisKKyM6IGZpbGVpby5jOjI5ODkKK21zZ2lkICJpcyByZWFkLW9ubHkgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiz9TL0tnUINTPzNjLzyDEzNEg3tTFzsnRICghLCDe1M/C2SDPws/K1Mkg0NLP18XSy9UpIgorCisjOiBmaWxlaW8uYzozMzM1Cittc2dpZCAiRTUwNjogQ2FuJ3Qgd3JpdGUgdG8gYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwNjog+sHQydPYINcg0sXaxdLXztnKIMbByswgzsXXz9rNz9bOwSAoISwg3tTPwtkgz8LPytTJINDSz9fF0svVKSIKKworIzogZmlsZWlvLmM6MzM0NworbXNnaWQgIkU1MDc6IENsb3NlIGVycm9yIGZvciBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA3OiDv28nCy8Eg2sHL0tnUydEg0sXaxdLXzs/HzyDGwcrMwSAoISwg3tTPwtkgz8LPytTJINDSz9fF0svVKSIKKworIzogZmlsZWlvLmM6MzM0OQorbXNnaWQgIkU1MDg6IENhbid0IHJlYWQgZmlsZSBmb3IgYmFja3VwIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDg6IO7F18/azc/Wzs8g0NLP3snUwdTYINLF2sXS187ZyiDGwcrMICghLCDe1M/C2SDPws/K1Mkg0NLP18XSy9UpIgorCisjOiBmaWxlaW8uYzozMzY1Cittc2dpZCAiRTUwOTogQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA5OiDuxdfP2s3P1s7PINPP2sTB1Ngg0sXaxdLXztnKIMbByswgKCEsIN7Uz8LZIM/Cz8rUySDQ0s/XxdLL1SkiCisKKyM6IGZpbGVpby5jOjM0NjgKK21zZ2lkICJFNTEwOiBDYW4ndCBtYWtlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MTA6IO7F18/azc/Wzs8g08/axMHU2CDSxdrF0tfO2cogxsHKzCAoISwg3tTPwtkgz8LPytTJINDSz9fF0svVKSIKKworIzogZmlsZWlvLmM6MzUzMAorbXNnaWQgIkU0NjA6IFRoZSByZXNvdXJjZSBmb3JrIHdvdWxkIGJlIGxvc3QgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ2MDog98nMy8Eg0sXT1dLTwSDC1cTF1CDQz9TF0tHOwSAoISwg3tTPwtkgz8LPytTJINDSz9fF0svVKSIKKworIzogZmlsZWlvLmM6MzY0MAorbXNnaWQgIkUyMTQ6IENhbid0IGZpbmQgdGVtcCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjE0OiD30sXNxc7O2cogxsHKzCDEzNEg2sHQydPJIM7FIM7BysTFziIKKworIzogZmlsZWlvLmM6MzY1OAorbXNnaWQgIkUyMTM6IENhbm5vdCBjb252ZXJ0IChhZGQgISB0byB3cml0ZSB3aXRob3V0IGNvbnZlcnNpb24pIgorbXNnc3RyICJFMjEzOiDwxdLFy8/EydLP18vBIM7F18/azc/WzsEgKCEgxMzRINrB0MnTySDCxdog0MXSxcvPxMnSz9fLySkiCisKKyM6IGZpbGVpby5jOjM2OTMKK21zZ2lkICJFMTY2OiBDYW4ndCBvcGVuIGxpbmtlZCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTY2OiDuxdfP2s3P1s7PIM/Uy9LZ1Ngg09fR2sHOztnKIMbByswgxMzRINrB0MnTySIKKworIzogZmlsZWlvLmM6MzY5NworbXNnaWQgIkUyMTI6IENhbid0IG9wZW4gZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxMjog7sXXz9rNz9bOzyDP1MvS2dTYIMbByswgxMzRINrB0MnTySIKKworIzogZmlsZWlvLmM6Mzk1OQorbXNnaWQgIkU2Njc6IEZzeW5jIGZhaWxlZCIKK21zZ3N0ciAiRTY2Nzog7sUg1cTBzM/T2CDX2dDPzM7J1NggxtXOy8PJwCBmc3luYygpIgorCisjOiBmaWxlaW8uYzozOTY2Cittc2dpZCAiRTUxMjogQ2xvc2UgZmFpbGVkIgorbXNnc3RyICJFNTEyOiDv0MXSwcPJ0SDawcvS2dTJ0SDOxSDVxMHMwdPYIgorCisjOiBmaWxlaW8uYzo0MDM3Cittc2dpZCAiRTUxMzogd3JpdGUgZXJyb3IsIGNvbnZlcnNpb24gZmFpbGVkIgorbXNnc3RyICJFNTEzOiDv28nCy8Eg2sHQydPJLCDQ0sXPwtLB2s/Xwc7JxSDOxSDVxMHMz9PYIgorCisjOiBmaWxlaW8uYzo0MDQzCittc2dpZCAiRTUxNDogd3JpdGUgZXJyb3IgKGZpbGUgc3lzdGVtIGZ1bGw/KSIKK21zZ3N0ciAiRTUxNDogz9vJwsvBINrB0MnTySAozsXUINPXz8LPxM7Px88gzcXT1ME/KSIKKworIzogZmlsZWlvLmM6NDExMAorbXNnaWQgIiBDT05WRVJTSU9OIEVSUk9SIgorbXNnc3RyICIg7/vp4uvhIPDy5e/i8uH67/fh7unxIgorCisjOiBmaWxlaW8uYzo0MTI2Cittc2dpZCAiW0RldmljZV0iCittc2dzdHIgIlv109TSz8rT1NfPXSIKKworIzogZmlsZWlvLmM6NDEzMQorbXNnaWQgIltOZXddIgorbXNnc3RyICJb7s/X2cpdIgorCisjOiBmaWxlaW8uYzo0MTUzCittc2dpZCAiIFthXSIKK21zZ3N0ciAiIFthXSIKKworIzogZmlsZWlvLmM6NDE1MworbXNnaWQgIiBhcHBlbmRlZCIKK21zZ3N0ciAiIMTPwsHXzMXOzyIKKworIzogZmlsZWlvLmM6NDE1NQorbXNnaWQgIiBbd10iCittc2dzdHIgIiBbd10iCisKKyM6IGZpbGVpby5jOjQxNTUKK21zZ2lkICIgd3JpdHRlbiIKK21zZ3N0ciAiINrB0MnTwc7PIgorCisjOiBmaWxlaW8uYzo0MjA1Cittc2dpZCAiRTIwNTogUGF0Y2htb2RlOiBjYW4ndCBzYXZlIG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDU6IPLF1snNINrB0MzB1MvJOiDOxdfP2s3P1s7PINPPyNLBzsXOycUgydPIz8TOz8fPIMbByszBIgorCisjOiBmaWxlaW8uYzo0MjI3Cittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICIiCisiRTIwNjog8sXWyc0g2sHQzMHUy8k6IM7F18/azc/Wzs8g083FzsnU2CDQwdLBzcXU0tkg0NXT1M/HzyDJ08jPxM7Px88gxsHKzMEiCisKKyM6IGZpbGVpby5jOjQyNDIKK21zZ2lkICJFMjA3OiBDYW4ndCBkZWxldGUgYmFja3VwIGZpbGUiCittc2dzdHIgIkUyMDc6IO7F18/azc/Wzs8g1cTBzMnU2CDSxdrF0tfO2cogxsHKzCIKKworIzogZmlsZWlvLmM6NDMwNgorbXNnaWQgIiIKKyJcbiIKKyJXQVJOSU5HOiBPcmlnaW5hbCBmaWxlIG1heSBiZSBsb3N0IG9yIGRhbWFnZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIvDy5eT18PLl9uTl7unlOiDp08jPxM7ZyiDGwcrMIM3P1sXUIMLZ1Ngg1dTSwd7FziDJzMkg0M/X0sXWxKPOXG4iCisKKyM6IGZpbGVpby5jOjQzMDgKK21zZ2lkICJkb24ndCBxdWl0IHRoZSBlZGl0b3IgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorbXNnc3RyICLOxSDX2cjPxMnUxSDJ2iDSxcTBy9TP0sEsINDPy8EgxsHKzCDOxSDC1cTF1CDV09DF287PINrB0MnTwc4hIgorCisjOiBmaWxlaW8uYzo0Mzk3Cittc2dpZCAiW2Rvc10iCittc2dzdHIgIltkb3NdIgorCisjOiBmaWxlaW8uYzo0Mzk3Cittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbxs/SzcHUIGRvc10iCisKKyM6IGZpbGVpby5jOjQ0MDQKK21zZ2lkICJbbWFjXSIKK21zZ3N0ciAiW21hY10iCisKKyM6IGZpbGVpby5jOjQ0MDQKK21zZ2lkICJbbWFjIGZvcm1hdF0iCittc2dzdHIgIlvGz9LNwdQgbWFjXSIKKworIzogZmlsZWlvLmM6NDQxMQorbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzo0NDExCittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW8bP0s3B1CB1bml4XSIKKworIzogZmlsZWlvLmM6NDQzOAorbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxINPU0s/LwSwgIgorCisjOiBmaWxlaW8uYzo0NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcywgIgorbXNnc3RyICLT1NLPyzogJWxkLCAiCisKKyM6IGZpbGVpby5jOjQ0NDMKK21zZ2lkICIxIGNoYXJhY3RlciIKK21zZ3N0ciAiMSDTyc3Xz8wiCisKKyM6IGZpbGVpby5jOjQ0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYXJhY3RlcnMiCittc2dzdHIgItPJzdfPzM/XOiAlbGQiCisKKyM6IGZpbGVpby5jOjQ0NTUKK21zZ2lkICJbbm9lb2xdIgorbXNnc3RyICJbbm9lb2xdIgorCisjOiBmaWxlaW8uYzo0NDU1Cittc2dpZCAiW0luY29tcGxldGUgbGFzdCBsaW5lXSIKK21zZ3N0ciAiW+7F2sHXxdLbo87OwdEg0M/TzMXEztHRINPU0s/LwV0iCisKKyMuIGRvbid0IG92ZXJ3cml0ZSBtZXNzYWdlcyBoZXJlCisjLiBtdXN0IGdpdmUgdGhpcyBwcm9tcHQKKyMuIGRvbid0IHVzZSBlbXNnKCkgaGVyZSwgZG9uJ3Qgd2FudCB0byBmbHVzaCB0aGUgYnVmZmVycworIzogZmlsZWlvLmM6NDQ3NAorbXNnaWQgIldBUk5JTkc6IFRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgcmVhZGluZyBpdCEhISIKK21zZ3N0ciAi8PLl5PXw8uX25OXu6eU6IObByswgydrNxc6jziDTIM3PzcXO1MEg3tTFzsnRISEhIgorCisjOiBmaWxlaW8uYzo0NDc2Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0IgorbXNnc3RyICLzxdLYo9rOzyDIz9TJ1MUg2sHQydPB1Ngg1yDc1M/UIMbByswiCisKKyM6IGZpbGVpby5jOjU3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiCittc2dzdHIgIkUyMDg6IO/bycLLwSDawdDJ08kg1yBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwOTogRXJyb3IgY2xvc2luZyBcIiVzXCIiCittc2dzdHIgIkUyMDk6IO/bycLLwSDawcvS2dTJ0SBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMDogRXJyb3IgcmVhZGluZyBcIiVzXCIiCittc2dzdHIgIkUyMTA6IO/bycLLwSDe1MXOydEgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1OTcwCittc2dpZCAiRTI0NjogRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTI0Njog4tXGxdIg1cTBzKPOINDSySDX2dDPzM7FzsnJIMHX1M/Lz83BzsTZIEZpbGVDaGFuZ2VkU2hlbGwiCisKKyM6IGZpbGVpby5jOjU5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMTogV2FybmluZzogRmlsZSBcIiVzXCIgbm8gbG9uZ2VyIGF2YWlsYWJsZSIKK21zZ3N0ciAiRTIxMTog8NLFxNXQ0sXWxMXOycU6IMbByswgXCIlc1wiIMLPzNjbxSDOxSDEz9PU1dDFziIKKworIzogZmlsZWlvLmM6NTk5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVzEyOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBhbmQgdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCBpbiBWaW0gYXMgIgorIndlbGwiCittc2dzdHIgIiIKKyJXMTI6IPDSxcTV0NLF1sTFzsnFOiDGwcrMIFwiJXNcIiDJIMLVxsXSIFZpbSDC2czJIMnazcXOxc7ZIM7F2sHXydPJzc8gxNLVxyAiCisiz9QgxNLVx8EiCisKKyM6IGZpbGVpby5jOjU5OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIiIKKyJXMTE6IPDSxcTV0NLF1sTFzsnFOiDGwcrMIFwiJXNcIiDC2cwgydrNxc6jziDQz9PMxSDOwd7BzMEg0sXEwcvUydLP18HOydEiCisKKyM6IGZpbGVpby5jOjU5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzE2OiBXYXJuaW5nOiBNb2RlIG9mIGZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiIgorIlcxNjog8NLFxNXQ0sXWxMXOycU6INLF1snNIMTP09TV0MEgyyDGwcrM1SBcIiVzXCIgwtnMIMnazcXOo84g0M/TzMUgzsHewczBICIKKyLSxcTBy9TJ0s/Xwc7J0SIKKworIzogZmlsZWlvLmM6NjAwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTM6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICIiCisiVzEzOiDw0sXE1dDSxdbExc7JxTogxsHKzCBcIiVzXCIgwtnMINPP2sTBziDQz9PMxSDOwd7BzMEg0sXEwcvUydLP18HOydEiCisKKyM6IGZpbGVpby5jOjYwMTkKK21zZ2lkICJTZWUgXCI6aGVscCBXMTFcIiBmb3IgbW9yZSBpbmZvLiIKK21zZ3N0ciAi880uIMTP0M/MzsnUxczYztXAIMnOxs/SzcHDycAg1yBcIjpoZWxwIFcxMVwiLiIKKworIzogZmlsZWlvLmM6NjAzMworbXNnaWQgIldhcm5pbmciCittc2dzdHIgIvDSxcTV0NLF1sTFzsnFIgorCisjOiBmaWxlaW8uYzo2MDM0Cittc2dpZCAiIgorIiZPS1xuIgorIiZMb2FkIEZpbGUiCittc2dzdHIgIiIKKyImT0tcbiIKKyIm+sHH0tXaydTYIMbByswiCisKKyM6IGZpbGVpby5jOjYxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2MjogQ291bGQgbm90IHByZXBhcmUgZm9yIHJlbG9hZGluZyBcIiVzXCIiCittc2dzdHIgIkU0NjI6IO7F18/azc/Wzs8g0M/Ex8/Uz9fJ1NjT0SDLINDF0sXawcfS1drLxSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjYxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IO7F18/azc/Wzs8g19nQz8zOydTYINDF0sXawcfS1drL1SBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjY3NDAKK21zZ2lkICItLURlbGV0ZWQtLSIKK21zZ3N0ciAiLS31xMHMxc7PLS0iCisKKyMuIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0CisjOiBmaWxlaW8uYzo2OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjc6IE5vIHN1Y2ggZ3JvdXA6IFwiJXNcIiIKK21zZ3N0ciAiRTM2Nzog59LV0NDBIFwiJXNcIiDOxSDT1d3F09TX1cXUIgorCisjOiBmaWxlaW8uYzo3MDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyICo6ICVzIgorbXNnc3RyICJFMjE1OiDuxcTP0NXT1MnN2cUg08nN18/M2SDQz9PMxSAqOiAlcyIKKworIzogZmlsZWlvLmM6NzAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE2OiBObyBzdWNoIGV2ZW50OiAlcyIKK21zZ3N0ciAiRTIxNjog7sXT1d3F09TX1cDdxcUg08/C2dTJxTogJXMiCisKKyM6IGZpbGVpby5jOjcwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBncm91cCBvciBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IO7F09XdxdPU19XA3cHRIMfS1dDQwSDJzMkg08/C2dTJxTogJXMiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogZmlsZWlvLmM6NzE5OAorbXNnaWQgIiIKKyJcbiIKKyItLS0gQXV0by1Db21tYW5kcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g4dfUz8vPzcHOxNkgLS0tIgorCisjOiBmaWxlaW8uYzo3NDY5Cittc2dpZCAiRTIxNzogQ2FuJ3QgZXhlY3V0ZSBhdXRvY29tbWFuZHMgZm9yIEFMTCBldmVudHMiCittc2dzdHIgIkUyMTc6IO7F18/azc/Wzs8g19nQz8zOydTYIMHX1M/Lz83BzsTZIMTM0SD38+XoINPPwtnUycoiCisKKyM6IGZpbGVpby5jOjc0OTIKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgIu7F1CDQz8TIz8TR3cnIIMHX1M/Lz83BzsQiCisKKyM6IGZpbGVpby5jOjc4MTMKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiDTzMnby8/NIMfM1cLPy88g18zP1sXOztnFIMHX1M/Lz83BzsTZIgorCisjOiBmaWxlaW8uYzo4MDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIEF1dG8gY29tbWFuZHMgZm9yIFwiJXNcIiIKK21zZ3N0ciAiJXMg4dfUz8vPzcHOxNkgxMzRIFwiJXNcIiIKKworIzogZmlsZWlvLmM6ODA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmcgJXMiCittc2dzdHIgIvfZ0M/MzsXOycUgJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZmlsZWlvLmM6ODE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdXRvY29tbWFuZCAlcyIKK21zZ3N0ciAiwdfUz8vPzcHOxMEgJXMiCisKKyM6IGZpbGVpby5jOjg3MzEKK21zZ2lkICJFMjE5OiBNaXNzaW5nIHsuIgorbXNnc3RyICJFMjE5OiDw0s/Q1d3FzsEgey4iCisKKyM6IGZpbGVpby5jOjg3MzMKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiDw0s/Q1d3FzsEgfS4iCisKKyM6IGZvbGQuYzo2OAorbXNnaWQgIkU0OTA6IE5vIGZvbGQgZm91bmQiCittc2dzdHIgIkU0OTA6IPPLzMHEz8sgzsUgz8LOwdLV1sXOzyIKKworIzogZm9sZC5jOjU5MworbXNnaWQgIkUzNTA6IENhbm5vdCBjcmVhdGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICIiCisiRTM1MDog88vMwcTLwSDOxSDNz9bF1CDC2dTYINPP2sTBzsEg0yDUxcvV3cnNINrOwd7FzsnFzSDP0MPJySAnZm9sZG1ldGhvZCciCisKKyM6IGZvbGQuYzo1OTUKK21zZ2lkICJFMzUxOiBDYW5ub3QgZGVsZXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiIgorIkUzNTE6IPPLzMHEy8EgzsUgzc/WxdQgwtnU2CDVxMHMxc7BINMg1MXL1d3JzSDazsHexc7Jxc0gz9DDyckgJ2ZvbGRtZXRob2QnIgorCisjOiBnZXRjaGFyLmM6MjQ4Cittc2dpZCAiRTIyMjogQWRkIHRvIHJlYWQgYnVmZmVyIgorbXNnc3RyICJFMjIyOiDkz8LB18zFzsnFINcgwtXGxdIg3tTFzsnRIgorCisjOiBnZXRjaGFyLmM6MjE5OAorbXNnaWQgIkUyMjM6IHJlY3Vyc2l2ZSBtYXBwaW5nIgorbXNnc3RyICJFMjIzOiDSxcvV0tPJ187B0SDQ0snX0drLwSIKKworIzogZ2V0Y2hhci5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNDogZ2xvYmFsIGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjQ6INXWxSDF09TYIMfMz8LBzNjOz8Ug08/L0sHdxc7JxSDEzNEgJXMiCisKKyM6IGdldGNoYXIuYzozMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTog1dbFIMXT1Nggx8zPwsHM2M7B0SDQ0snX0drLwSDEzNEgJXMiCisKKyM6IGdldGNoYXIuYzozMjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjY6IGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjY6INXWxSDF09TYINPPy9LB3cXOycUgxMzRICVzIgorCisjOiBnZXRjaGFyLmM6MzIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI3OiBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNzog1dbFIMXT1Ngg0NLJ19Hay8EgxMzRICVzIgorCisjOiBnZXRjaGFyLmM6MzI3OQorbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAi88/L0sHdxc7J0SDOxSDOwcrExc7ZIgorCisjOiBnZXRjaGFyLmM6MzI4MQorbXNnaWQgIk5vIG1hcHBpbmcgZm91bmQiCittc2dzdHIgIvDSydfR2svJIM7FIM7BysTFztkiCisKKyM6IGdldGNoYXIuYzo0MTczCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiDOxcTP0NXT1MnN2cog0sXWyc0iCisKKyM6IGd1aS5jOjIyMAorbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiDuxdfP2s3P1s7PINDF0sXK1Mkg1yDSxdbJzSDH0sHGyd7F08vPx88gyc7UxdLGxcrTwSIKKworIzogZ3VpLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzA6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjMwOiDuxdfP2s3P1s7PINfZ0M/MzsnU2CDe1MXOycUgXCIlc1wiIgorCisjOiBndWkuYzo0NzIKK21zZ2lkICJFNjY1OiBDYW5ub3Qgc3RhcnQgR1VJLCBubyB2YWxpZCBmb250IGZvdW5kIgorbXNnc3RyICIiCisiRTY2NTog7sXXz9rNz9bOzyDQxdLFytTJINcg0sXWyc0gx9LBxi4gyc7UxdLGxcrTwSwgzsXQ0sHXyczYzs8g2sHEwc7ZINvSycbU2SIKKworIzogZ3VpLmM6NDc3Cittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiDOxdDSwdfJzNjOz8Ug2s7B3sXOycUgz9DDyckgJ2d1aWZvbnR3aWRlJyIKKworIzogZ3VpLmM6NTQ3Cittc2dpZCAiRTU5OTogVmFsdWUgb2YgJ2ltYWN0aXZhdGVrZXknIGlzIGludmFsaWQiCittc2dzdHIgIkU1OTk6IM7F0NLB18nM2M7PxSDazsHexc7JxSDP0MPJySAnaW1hY3RpdmF0ZWtleSciCisKKyM6IGd1aS5jOjQwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiDuxdfP2s3P1s7PIM7B2s7B3snU2CDD18XUICVzIgorCisjOiBndWlfYXRfZnMuYzozMDAKK21zZ2lkICI8Y2Fubm90IG9wZW4+ICIKK21zZ3N0ciAiPM7FzNja0SDP1MvS2dTYPiAiCisKKyM6IGd1aV9hdF9mcy5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxNjogdmltX1NlbEZpbGU6IGNhbid0IGdldCBmb250ICVzIgorbXNnc3RyICJFNjE2OiB2aW1fU2VsRmlsZTog29LJxtQgJXMgzsUgzsHKxMXOIgorCisjOiBndWlfYXRfZnMuYzoyNzgxCittc2dpZCAiRTYxNDogdmltX1NlbEZpbGU6IGNhbid0IHJldHVybiB0byBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNDogdmltX1NlbEZpbGU6INfP2tfSwdQg1yDUxcvV3cnKIMvB1MHMz8cgzsXXz9rNz9bFziIKKworIzogZ3VpX2F0X2ZzLmM6MjgwMQorbXNnaWQgIlBhdGhuYW1lOiIKK21zZ3N0ciAi8NXU2CDLIMbByszVOiIKKworIzogZ3VpX2F0X2ZzLmM6MjgwNworbXNnaWQgIkU2MTU6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgIkU2MTU6IHZpbV9TZWxGaWxlOiDOxSDNz8fVIM7BytTJINTFy9Xdycogy8HUwczPxyIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfbW90aWYuYzoxNjIzCittc2dpZCAiT0siCittc2dzdHIgIuTBIgorCisjOiBndWlfYXRfZnMuYzoyODE1IGd1aV9ndGsuYzoyNzMxIGd1aV9tb3RpZi5jOjE2MTggZ3VpX21vdGlmLmM6Mjg0OQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi79TNxc7BIgorCisjOiBndWlfYXRfc2IuYzo0ODYKK21zZ2lkICJTY3JvbGxiYXIgV2lkZ2V0OiBDb3VsZCBub3QgZ2V0IGdlb21ldHJ5IG9mIHRodW1iIHBpeG1hcC4iCittc2dzdHIgIvDPzM/TwSDQ0s/L0tXUy8k6IM7FIM3Px9Ugz9DSxcTFzMnU2CDHxc/NxdTSycAg0M/M2tXOy8EiCisKKyM6IGd1aV9hdGhlbmEuYzoyMDQ3IGd1aV9tb3RpZi5jOjE4NzEKK21zZ2lkICJWaW0gZGlhbG9nIgorbXNnc3RyICLkycHMz8fP18/FIM/Lzs8gVmltIgorCisjOiBndWlfYmV2YWwuYzoxMDEgZ3VpX3czMi5jOjM4MjkKK21zZ2lkICJFMjMyOiBDYW5ub3QgY3JlYXRlIEJhbGxvb25FdmFsIHdpdGggYm90aCBtZXNzYWdlIGFuZCBjYWxsYmFjayIKK21zZ3N0ciAiIgorIkUyMzI6IFwi8NXa2dLYXCIgxMzRINfZ3snTzMXOycosINfLzMDewcDdycogySDTz8/C3cXOycUsIMkgz8LSwdTO2cog19naz9csICIKKyLOxSDNz9bF1CDC2dTYINPP2sTBziIKKworIzogZ3VpX2d0ay5jOjE2MDcKK21zZ2lkICJWaW0gZGlhbG9nLi4uIgorbXNnc3RyICLkycHMz8fP18/FIM/Lzs8gVmltLi4uIgorCisjOiBndWlfZ3RrLmM6MjA2MCBtZXNzYWdlLmM6Mjk5MworbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIibkwVxuIgorIibuxdRcbiIKKyLvJtTNxc7BIgorCisjOiBndWlfZ3RrLmM6MjI2OAorbXNnaWQgIklucHV0IF9NZXRob2RzIgorbXNnc3RyICLtxdTPxNkg99fPxMEiCisKKyM6IGd1aV9ndGsuYzoyNTM0IGd1aV9tb3RpZi5jOjI3NjgKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIlZJTSAtIPDPydPLIMkg2sHNxc7BLi4uIgorCisjOiBndWlfZ3RrLmM6MjU0MiBndWlfbW90aWYuYzoyNzcwCittc2dpZCAiVklNIC0gU2VhcmNoLi4uIgorbXNnc3RyICJWSU0gLSDwz8nTyy4uLiIKKworIzogZ3VpX2d0ay5jOjI1NzQgZ3VpX21vdGlmLmM6Mjg4OAorbXNnaWQgIkZpbmQgd2hhdDoiCittc2dzdHIgIv7UzyDJ3cXNOiIKKworIzogZ3VpX2d0ay5jOjI1OTIgZ3VpX21vdGlmLmM6MjkyMAorbXNnaWQgIlJlcGxhY2Ugd2l0aDoiCittc2dzdHIgIu7BIN7UzyDawc3FztHFzToiCisKKyMuIHdob2xlIHdvcmQgb25seSBidXR0b24KKyM6IGd1aV9ndGsuYzoyNjI0IGd1aV9tb3RpZi5jOjMwMzYKK21zZ2lkICJNYXRjaCB3aG9sZSB3b3JkIG9ubHkiCittc2dzdHIgIvTPzNjLzyDUz97O2cUg08/P1NfF1NPU18nRIgorCisjLiBtYXRjaCBjYXNlIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI2MzUgZ3VpX21vdGlmLmM6MzA0OAorbXNnaWQgIk1hdGNoIGNhc2UiCittc2dzdHIgIvLFx8nT1NLP2sHXydPJzdnFINPPz9TXxdTT1NfJ0SIKKworIzogZ3VpX2d0ay5jOjI2NDUgZ3VpX21vdGlmLmM6Mjk5MAorbXNnaWQgIkRpcmVjdGlvbiIKK21zZ3N0ciAi7sHQ0sHXzMXOycUiCisKKyMuICdVcCcgYW5kICdEb3duJyBidXR0b25zCisjOiBndWlfZ3RrLmM6MjY1NyBndWlfbW90aWYuYzozMDAyCittc2dpZCAiVXAiCittc2dzdHIgIvfXxdLIIgorCisjOiBndWlfZ3RrLmM6MjY2MSBndWlfbW90aWYuYzozMDEwCittc2dpZCAiRG93biIKK21zZ3N0ciAi987J2iIKKworIzogZ3VpX2d0ay5jOjI2ODMgZ3VpX2d0ay5jOjI2ODUgZ3VpX21vdGlmLmM6Mjc5MgorbXNnaWQgIkZpbmQgTmV4dCIKK21zZ3N0ciAi7sHK1Mkg08zFxNXA3cXFIgorCisjOiBndWlfZ3RrLmM6MjcwMiBndWlfZ3RrLmM6MjcwNCBndWlfbW90aWYuYzoyODA5Cittc2dpZCAiUmVwbGFjZSIKK21zZ3N0ciAi+sHNxc7BIgorCisjOiBndWlfZ3RrLmM6MjcxNSBndWlfZ3RrLmM6MjcxNyBndWlfbW90aWYuYzoyODIyCittc2dpZCAiUmVwbGFjZSBBbGwiCittc2dzdHIgIvrBzcXOydTYINfTxSIKKworIzogZ3VpX2d0a194MTEuYzoyMzI3Cittc2dpZCAiVmltOiBSZWNlaXZlZCBcImRpZVwiIHJlcXVlc3QgZnJvbSBzZXNzaW9uIG1hbmFnZXJcbiIKK21zZ3N0ciAiVmltOiDwz8zV3sXOINrB0NLP0yDOwSDQ0sXL0sHdxc7JxSDSwcLP1Nkgz9QgxMnT0MXU3sXSwSDTxcHO08/XXG4iCisKKyM6IGd1aV9ndGtfeDExLmM6MzUxOQorbXNnaWQgIlZpbTogTWFpbiB3aW5kb3cgdW5leHBlY3RlZGx5IGRlc3Ryb3llZFxuIgorbXNnc3RyICJWaW06IO/Tzs/Xzs/FIM/Lzs8gwtnMzyDOxc/WycTBzs7PINrBy9LZ1M9cbiIKKworIzogZ3VpX2d0a194MTEuYzo0MTM4Cittc2dpZCAiRm9udCBTZWxlY3Rpb24iCittc2dzdHIgIvfZws/SINvSycbUwSIKKworIzogZ3VpX2d0a194MTEuYzo2MDM1IHVpLmM6MjEyMAorbXNnaWQgIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iCittc2dzdHIgIvfNxdPUzyDQ1dPUz8fPINfZxMXMxc7J0SDJ09DPzNja1cXU09EgQ1VUX0JVRkZFUjAiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTcgZ3VpX21vdGlmLmM6MTYyMAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAi5snM2NTSIgorCisjOiBndWlfbW90aWYuYzoxNjE5Cittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIuvB1MHMz8fJIgorCisjOiBndWlfbW90aWYuYzoxNjIxCittc2dpZCAiSGVscCIKK21zZ3N0ciAi89DSwdfLwSIKKworIzogZ3VpX21vdGlmLmM6MTYyMgorbXNnaWQgIkZpbGVzIgorbXNnc3RyICLmwcrM2SIKKworIzogZ3VpX21vdGlmLmM6MTYyNAorbXNnaWQgIlNlbGVjdGlvbiIKK21zZ3N0ciAi99nExczFzsnFIgorCisjOiBndWlfbW90aWYuYzoyODM1Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAi79TNxc7BIgorCisjOiBndWlfcmlzY29zLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTA6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTYxMDog7sXXz9rNz9bOzyDawcfS1drJ1Ngg29LJxtQgWmFwICclcyciCisKKyM6IGd1aV9yaXNjb3MuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTE6IENhbid0IHVzZSBmb250ICVzIgorbXNnc3RyICJFNjExOiDuxdfP2s3P1s7PIMnT0M/M2NrP18HU2CDb0snG1CAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNzAKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisi79TQ0sHXy8Eg08/Pwt3FzsnRIMTM0SDVzsne1M/Wxc7J0SDQ0s/DxdPTwS3Qz9TPzcvBLlxuIgorCisjOiBndWlfdzMyLmM6ODI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDM6IEFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQ6IFwiLSVzXCI7IFVzZSB0aGUgT0xFIHZlcnNpb24uIgorbXNnc3RyICJFMjQzOiDwwdLBzcXU0iDOxSDQz8TExdLWydfBxdTT0TogXCItJXNcIjsgydPQz8zY2tXK1MUg18XS08nAIE9MRS4iCisKKyM6IGd1aV93NDguYzoyMDkwCittc2dpZCAiRmluZCBzdHJpbmcgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAi8M/J08sg09TSz8vJICjJ09DPzNja1crUxSAnXFxcXCcgxMzRINDPydPLwSAnXFwnKSIKKworIzogZ3VpX3c0OC5jOjIxMTUKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICLwz8nTyyDJINrBzcXOwSAoydPQz8zY2tXK1MUgJ1xcXFwnIMTM0SDQz8nTy8EgJ1xcJykiCisKKyM6IGd1aV94MTEuYzoxNTM3Cittc2dpZCAiVmltIEU0NTg6IENhbm5vdCBhbGxvY2F0ZSBjb2xvcm1hcCBlbnRyeSwgc29tZSBjb2xvcnMgbWF5IGJlIGluY29ycmVjdCIKK21zZ3N0ciAiIgorIlZpbSBFNDU4OiDOxdfP2s3P1s7PINfZxMXMydTYINrB0MnT2CDXINTBwszJw8Ugw9fF1MEsIM7Fy8/Uz9LZxSDD18XUwc3Px9XUICIKKyLP1M/C0sHWwdTY09EgzsXQ0sHXyczYzs8iCisKKyM6IGd1aV94MTEuYzoyMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICJFMjUwOiDXIM7Bws/SxSDb0snG1M/XICVzIM/U09XU09TX1cDUINvSycbU2SDEzNEg08zFxNXA3cnIIMvPxMnSz9fPyzoiCisKKyM6IGd1aV94MTEuYzoyMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTI6IEZvbnRzZXQgbmFtZTogJXMiCittc2dzdHIgIkUyNTI6IO7Bws/SINvSycbUz9c6ICVzIgorCisjOiBndWlfeDExLmM6MjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICL70snG1CAnJXMnIM7FINHXzNHF1NPRIM3Pzs/bydLJzs7ZzSIKKworIzogZ3VpX3gxMS5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MzogRm9udHNldCBuYW1lOiAlc1xuIgorbXNnc3RyICJFMjUzOiDuwcLP0iDb0snG1M/XOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MDogJXNcbiIKK21zZ3N0ciAiRm9udDA6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQxOiAlc1xuIgorbXNnc3RyICJGb250MTogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIxODQKK21zZ2lkICJGb250JWxkIHdpZHRoIGlzIG5vdCB0d2ljZSB0aGF0IG9mIGZvbnQwXG4iCittc2dzdHIgIvvJ0snOwSDb0snG1MEgZm9udCVsZCDEz8zWzsEgwtnU2CDXxNfPxSDCz8zY28Ug28nSyc7ZINvSycbUwSBmb250MFxuIgorCisjOiBndWlfeDExLmM6MjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MCB3aWR0aDogJWxkXG4iCittc2dzdHIgIvvJ0snOwSDb0snG1MEgZm9udDA6ICVsZFxuIgorCisjOiBndWlfeDExLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9udDEgd2lkdGg6ICVsZFxuIgorIlxuIgorbXNnc3RyICIiCisi+8nSyc7BINvSycbUwSBmb250MTogJWxkXG4iCisiXG4iCisKKyM6IGhhbmd1bGluLmM6NjEwCittc2dpZCAiRTI1NjogSGFuZ3VsIGF1dG9tYXRhIEVSUk9SIgorbXNnc3RyICL1MjU29iDv++ni6+EgwdfUz83B1MnLySDowc7H2cwiCisKKyM6IGlmX2NzY29wZS5jOjc3Cittc2dpZCAiQWRkIGEgbmV3IGRhdGFiYXNlIgorbXNnc3RyICLkz8LB18nU2CDOz9fVwCDCwdrVIMTBzs7ZyCIKKworIzogaWZfY3Njb3BlLmM6NzkKK21zZ2lkICJRdWVyeSBmb3IgYSBwYXR0ZXJuIgorbXNnc3RyICL6wdDSz9Mg0M8g28HCzM/O1SIKKworIzogaWZfY3Njb3BlLmM6ODEKK21zZ2lkICJTaG93IHRoaXMgbWVzc2FnZSIKK21zZ3N0ciAi8M/LwdrB1Ngg3NTPINPPz8Ldxc7JxSIKKworIzogaWZfY3Njb3BlLmM6ODMKK21zZ2lkICJLaWxsIGEgY29ubmVjdGlvbiIKK21zZ3N0ciAi9cLJ1Ngg08/FxMnOxc7JxSIKKworIzogaWZfY3Njb3BlLmM6ODUKK21zZ2lkICJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIgorbXNnc3RyICL6wc7P188gyc7Jw8nBzMnaydLP18HU2CDX08Ug08/FxMnOxc7J0SIKKworIzogaWZfY3Njb3BlLmM6ODcKK21zZ2lkICJTaG93IGNvbm5lY3Rpb25zIgorbXNnc3RyICLwz8vB2sHU2CDTz8XEyc7FzsnRIgorCisjOiBpZl9jc2NvcGUuYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTYwOiBVc2FnZTogY3NbY29wZV0gJXMiCittc2dzdHIgIkU1NjA6IOnT0M/M2NrP18HOycU6IGNzW2NvcGVdICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMjQKK21zZ2lkICJUaGlzIGNzY29wZSBjb21tYW5kIGRvZXMgbm90IHN1cHBvcnQgc3BsaXR0aW5nIHRoZSB3aW5kb3cuXG4iCittc2dzdHIgIvzUwSDLz83BzsTBIGNzY29wZSDOxSDQz8TExdLWydfBxdQg0sHaxMXMxc7JxSDPy87BLlxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzUKK21zZ2lkICJFNTYyOiBVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiRTU2Mjog6dPQz8zY2s/Xwc7JxTogY3N0YWcgPMnN0T4iCisKKyM6IGlmX2NzY29wZS5jOjIzMQorbXNnaWQgIkUyNTc6IGNzdGFnOiB0YWcgbm90IGZvdW5kIgorbXNnc3RyICJFMjU3OiBjc3RhZzogzcXUy8EgzsUgzsHKxMXOwSIKKworIzogaWZfY3Njb3BlLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjM6IHN0YXQoJXMpIGVycm9yOiAlZCIKK21zZ3N0ciAiz9vJwsvBIHN0YXQoJXMpOiAlZCIKKworIzogaWZfY3Njb3BlLmM6NDE5Cittc2dpZCAiRTU2Mzogc3RhdCBlcnJvciIKK21zZ3N0ciAiRTU2Mzogz9vJwsvBIHN0YXQiCisKKyM6IGlmX2NzY29wZS5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY0OiAlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIkU1NjQ6ICVzIM7FINHXzNHF1NPRIMvB1MHMz8fPzSDJzMkgyc3FzsXNIMLB2tkgY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICLkz8LB18zFzsEgwsHawSDEwc7O2cggY3Njb3BlICVzIgorCisjOiBpZl9jc2NvcGUuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlbGQiCittc2dzdHIgIkUyNjI6IM/bycLLwSDQz8zV3sXOydEgyc7Gz9LNwcPJySDP1CDTz8XEyc7FzsnRIGNzY29wZSAlZCIKKworIzogaWZfY3Njb3BlLmM6Njk0Cittc2dpZCAiRTU2MTogdW5rbm93biBjc2NvcGUgc2VhcmNoIHR5cGUiCittc2dzdHIgIkU1NjE6IM7FydrXxdPUztnKINTJ0CDQz8nTy8EgY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo3MzYKK21zZ2lkICJFNTY2OiBDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiRTU2Njog7sXXz9rNz9bOzyDTz9rEwdTYINTS1cLVIMTM0SBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjc1MworbXNnaWQgIkU2MjI6IENvdWxkIG5vdCBmb3JrIGZvciBjc2NvcGUiCittc2dzdHIgIkU2MjI6IO7F18/azc/Wzs8g19nQz8zOydTYIGZvcmsoKSDEzNEgY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo4NDcgaWZfY3Njb3BlLmM6ODk3Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb24gZXhlYyBmYWlsZWQiCittc2dzdHIgIs7FINXEwczP09gg19nQz8zOydTYIGNzX2NyZWF0ZV9jb25uZWN0aW9uIgorCisjOiBpZl9jc2NvcGUuYzo4OTgKK21zZ2lkICJFNjIzOiBDb3VsZCBub3Qgc3Bhd24gY3Njb3BlIHByb2Nlc3MiCittc2dzdHIgIkU2MjM6IO7FINXEwczP09gg2sHQ1dPUydTYINDSz8PF09MgY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo5MTEKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciB0b19mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiDOxSDVxMHMz9PYINfZ0M/MzsnU2CBmZG9wZW4gxMzRIHRvX2ZwIgorCisjOiBpZl9jc2NvcGUuYzo5MTMKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciBmcl9mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiDOxSDVxMHMz9PYINfZ0M/MzsnU2CBmZG9wZW4gxMzRIGZyX2ZwIgorCisjOiBpZl9jc2NvcGUuYzo5NTEKK21zZ2lkICJFNTY3OiBubyBjc2NvcGUgY29ubmVjdGlvbnMiCittc2dzdHIgIkU1Njc6INPPxcTJzsXOycog0yBjc2NvcGUgzsUg08/axMHOzyIKKworIzogaWZfY3Njb3BlLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU5OiBubyBtYXRjaGVzIGZvdW5kIGZvciBjc2NvcGUgcXVlcnkgJXMgb2YgJXMiCittc2dzdHIgIkUyNTk6IM7FIM7BysTFzs8g08/P1NfF1NPU18nKINDPINrB0NLP09UgY3Njb3BlICVzIMTM0SAlcyIKKworIzogaWZfY3Njb3BlLmM6MTA4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDY5OiBpbnZhbGlkIGNzY29wZXF1aWNrZml4IGZsYWcgJWMgZm9yICVjIgorbXNnc3RyICJFNDY5OiDOxdDSwdfJzNjO2cogxszBxyBjc2NvcGVxdWlja2ZpeCAlYyDEzNEgJWMiCisKKyM6IGlmX2NzY29wZS5jOjExNTIKK21zZ2lkICJjc2NvcGUgY29tbWFuZHM6XG4iCittc2dzdHIgIsvPzcHOxNkgY3Njb3BlOlxuIgorCisjOiBpZl9jc2NvcGUuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtNXM6ICUtMzBzIChVc2FnZTogJXMpIgorbXNnc3RyICIlLTVzOiAlLTMwcyAo6dPQz8zY2s/Xwc7JxTogJXMpIgorCisjOiBpZl9jc2NvcGUuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjU6IGNhbm5vdCBvcGVuIGNzY29wZSBkYXRhYmFzZTogJXMiCittc2dzdHIgIkU2MjU6IM7F18/azc/Wzs8gz9TL0tnU2CDCwdrVIMTBzs7ZyCBjc2NvcGU6ICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMjcxCittc2dpZCAiRTYyNjogY2Fubm90IGdldCBjc2NvcGUgZGF0YWJhc2UgaW5mb3JtYXRpb24iCittc2dzdHIgIkU2MjY6IMnOxs/SzcHDydEgzyDCwdrFIMTBzs7ZyCBjc2NvcGUgzsUgxM/T1NXQzsEiCisKKyM6IGlmX2NzY29wZS5jOjEyOTYKK21zZ2lkICJFNTY4OiBkdXBsaWNhdGUgY3Njb3BlIGRhdGFiYXNlIG5vdCBhZGRlZCIKK21zZ3N0ciAiRTU2ODogxMHOzsHRIMLB2sEgxMHOztnIIGNzY29wZSDV1sUg0M/E08/FxMnOxc7BIgorCisjOiBpZl9jc2NvcGUuYzoxMzA3Cittc2dpZCAiRTU2OTogbWF4aW11bSBudW1iZXIgb2YgY3Njb3BlIGNvbm5lY3Rpb25zIHJlYWNoZWQiCittc2dzdHIgIkU1Njk6IMTP09TJx87V1M8gzcHL08nNwczYzs/FINrOwd7FzsnFIM/Uy9LZ1NnIINPPxcTJzsXOycog0yBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjE0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiDTz8XEyc7FzsnFINMgY3Njb3BlICVzIM7FIM/CzsHS1dbFzs8iCisKKyM6IGlmX2NzY29wZS5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gJXMgY2xvc2VkIgorbXNnc3RyICLTz8XEyc7FzsnFINMgY3Njb3BlINrBy9LZ1M8iCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTU5OAorbXNnaWQgIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJFNTcwOiDL0snUyd7F08vB0SDP28nCy8Eg1yBjc19tYW5hZ2VfbWF0Y2hlcyIKKworIzogaWZfY3Njb3BlLmM6MTg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDc2NvcGUgdGFnOiAlcyIKK21zZ3N0ciAi7cXUy8EgY3Njb3BlOiAlcyIKKworIzogaWZfY3Njb3BlLmM6MTg3MAorbXNnaWQgIiIKKyJcbiIKKyIgICAjICAgbGluZSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICMgICDT1NLPy8EiCisKKyM6IGlmX2NzY29wZS5jOjE4NzIKK21zZ2lkICJmaWxlbmFtZSAvIGNvbnRleHQgLyBsaW5lXG4iCittc2dzdHIgIsnN0SDGwcrMwSAvIMvPztTFy9PUIC8g09TSz8vBXG4iCisKKyM6IGlmX2NzY29wZS5jOjE5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwOTogQ3Njb3BlIGVycm9yOiAlcyIKK21zZ3N0ciAiRTYwOTog79vJwsvBIGNzY29wZTogJXMiCisKKyM6IGlmX2NzY29wZS5jOjIxNzYKK21zZ2lkICJBbGwgY3Njb3BlIGRhdGFiYXNlcyByZXNldCIKK21zZ3N0ciAi8MXSxdrBx9LV2svBINfTxcggwsHaIMTBzs7ZyCBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjIyNDQKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAi08/FxMnOxc7J0SDTIGNzY29wZSDP1NPV1NPU19XA1FxuIgorCisjOiBpZl9jc2NvcGUuYzoyMjQ4Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAgwsHawSDEwc7O2cggICAgICAgICAgICAgICAgICAgICAgICAgzsHewczYztnKINDV1NhcbiIKKworIzogaWZfcHl0aG9uLmM6NDM2Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjYzOiDrINPP1sHMxc7JwCDc1MEgy8/Nwc7EwSDOxSDSwcLP1MHF1Cwg0M/Ty8/M2MvVIM7FINrBx9LV1sXOwSDCycLMyc/UxcvBICIKKyJQeXRob24iCisKKyM6IGlmX3B5dGhvbi5jOjUwMAorbXNnaWQgIkU2NTk6IENhbm5vdCBpbnZva2UgUHl0aG9uIHJlY3Vyc2l2ZWx5IgorbXNnc3RyICJFNjU5OiDuxdfP2s3P1s7PINfZ0M/MzsnU2CDSxcvV0tPJ187ZyiDX2drP1yBQeXRob24iCisKKyM6IGlmX3B5dGhvbi5jOjcwMQorbXNnaWQgImNhbid0IGRlbGV0ZSBPdXRwdXRPYmplY3QgYXR0cmlidXRlcyIKK21zZ3N0ciAizsXXz9rNz9bOzyDVxMHMydTYIMHU0snC1dTZIE91dHB1dE9iamVjdCIKKworIzogaWZfcHl0aG9uLmM6NzA4Cittc2dpZCAic29mdHNwYWNlIG11c3QgYmUgYW4gaW50ZWdlciIKK21zZ3N0ciAi2s7B3sXOycUgc29mdHNwYWNlIMTPzNbOzyDC2dTYIMPFzNnNIN7J08zPzSIKKworIzogaWZfcHl0aG9uLmM6NzE2Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUiCittc2dzdHIgIs7F0NLB18nM2M7ZyiDB1NLJwtXUIgorCisjOiBpZl9weXRob24uYzo3NTUgaWZfcHl0aG9uLmM6NzY5Cittc2dpZCAid3JpdGVsaW5lcygpIHJlcXVpcmVzIGxpc3Qgb2Ygc3RyaW5ncyIKK21zZ3N0ciAid3JpdGVsaW5lcygpINTSxcLVxdQg1cvB2sHOydEg09DJ08vBINPU0s/LIgorCisjOiBpZl9weXRob24uYzo4OTUKK21zZ2lkICJFMjY0OiBQeXRob246IEVycm9yIGluaXRpYWxpc2luZyBJL08gb2JqZWN0cyIKK21zZ3N0ciAiRTI2NDogUHl0aG9uOiDv28nCy8Egyc7Jw8nBzMnawcPJySDPwt/Fy9TP1yBJL08iCisKKyM6IGlmX3B5dGhvbi5jOjEwODAgaWZfdGNsLmM6MTQwMgorbXNnaWQgImludmFsaWQgZXhwcmVzc2lvbiIKK21zZ3N0ciAizsXQ0sHXyczYzs/FINfZ0sHWxc7JxSIKKworIzogaWZfcHl0aG9uLmM6MTA5NCBpZl90Y2wuYzoxNDA3Cittc2dpZCAiZXhwcmVzc2lvbnMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICLX2dLB1sXOydEgz9TLzMDexc7ZINDSySDLz83QyczRw8nJIgorCisjOiBpZl9weXRob24uYzoxMTA3Cittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAi0M/Q2dTLwSDTz9PMwdTY09EgzsEg1c7J3tTP1sXOztnKIMLVxsXSIgorCisjOiBpZl9weXRob24uYzoxMTIyIGlmX3B5dGhvbi5jOjExNjMgaWZfcHl0aG9uLmM6MTIyNyBpZl90Y2wuYzoxMjE0Cittc2dpZCAibGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIgorbXNnc3RyICLawdDSxcTFzNjO2cogzs/NxdIg09TSz8vJIgorCisjOiBpZl9weXRob24uYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIjxidWZmZXIgb2JqZWN0IChkZWxldGVkKSBhdCAlOGxYPiIKK21zZ3N0ciAiPM/C38XL1CDC1cbF0sEgKNXEwczFzikg1yAlOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTQ1MyBpZl90Y2wuYzo4MzYKK21zZ2lkICJpbnZhbGlkIG1hcmsgbmFtZSIKK21zZ3N0ciAizsXQ0sHXyczYzs/FIMnN0SDP1M3F1MvJIgorCisjOiBpZl9weXRob24uYzoxNzMzCittc2dpZCAibm8gc3VjaCBidWZmZXIiCittc2dzdHIgIs7F1CDUwcvPx88gwtXGxdLBIgorCisjOiBpZl9weXRob24uYzoxODIxCittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIHdpbmRvdyIKK21zZ3N0ciAi0M/Q2dTLwSDTz9PMwdTY09EgzsEg2sHL0tnUz8Ugz8vOzyIKKworIzogaWZfcHl0aG9uLmM6MTg2NgorbXNnaWQgInJlYWRvbmx5IGF0dHJpYnV0ZSIKK21zZ3N0ciAiwdTSycLV1CDEz9PU1dDFziDUz8zYy88gxMzRIN7Uxc7J0SIKKworIzogaWZfcHl0aG9uLmM6MTg3OQorbXNnaWQgImN1cnNvciBwb3NpdGlvbiBvdXRzaWRlIGJ1ZmZlciIKK21zZ3N0ciAi0M/aycPJ0SDL1dLTz9LBIM7ByM/EydTT0SDXzsUgwtXGxdLBIgorCisjOiBpZl9weXRob24uYzoxOTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0IChkZWxldGVkKSBhdCAlLjhsWD4iCittc2dzdHIgIjzPwt/Fy9Qgz8vOwSAo1cTBzMXOKSDXICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTk2OAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IgorbXNnc3RyICI8z8LfxcvUIM/LzsEgKM7FydrXxdPUxc4pINcgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxOTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8z8vOzyAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjIwNDYKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAizsXUINTBy8/HzyDPy87BIgorCisjOiBpZl9weXRob24uYzoyMzA3IGlmX3B5dGhvbi5jOjIzNDEgaWZfcHl0aG9uLmM6MjM5NiBpZl9weXRob24uYzoyNDY0CisjOiBpZl9weXRob24uYzoyNTg2IGlmX3B5dGhvbi5jOjI2MzggaWZfdGNsLmM6Njg0IGlmX3RjbC5jOjcyOSBpZl90Y2wuYzo4MDMKKyM6IGlmX3RjbC5jOjg3MyBpZl90Y2wuYzoxOTk5Cittc2dpZCAiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAizsXXz9rNz9bOzyDTz8jSwc7J1Nggyc7Gz9LNwcPJwCDPwiDP1M3FzsUgz9DF0sHDyckiCisKKyM6IGlmX3B5dGhvbi5jOjIzMDkgaWZfcHl0aG9uLmM6MjQwMyBpZl9weXRob24uYzoyNDc1Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBsaW5lIgorbXNnc3RyICLOxdfP2s3P1s7PINXEwczJ1Ngg09TSz8vVIgorCisjOiBpZl9weXRob24uYzoyMzQ2IGlmX3B5dGhvbi5jOjI0OTEgaWZfdGNsLmM6NjkwIGlmX3RjbC5jOjIwMjEKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICLOxdfP2s3P1s7PINrBzcXOydTYINPU0s/L1SIKKworIzogaWZfcHl0aG9uLmM6MjUwOSBpZl9weXRob24uYzoyNTg4IGlmX3B5dGhvbi5jOjI2NDYKK21zZ2lkICJjYW5ub3QgaW5zZXJ0IGxpbmUiCittc2dzdHIgIs7F18/azc/Wzs8g19PUwdfJ1Ngg09TSz8vVIgorCisjOiBpZl9weXRob24uYzoyNzUwCittc2dpZCAic3RyaW5nIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICLT1NLPy8EgzsUgzc/WxdQg08/ExdLWwdTYINPJzdfPzCDOz9fPyiDT1NLPy8kiCisKKyM6IGlmX3J1YnkuYzo0MjIKK21zZ2lkICIiCisiRTI2NjogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFJ1YnkgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjY6IOsg08/WwczFzsnAINzUwSDLz83BzsTBIM7FINLBws/UwcXULCDQz9PLz8zYy9UgzsUg2sHH0tXWxc7BIMLJwszJz9TFy8EgIgorIlJ1YnkuIgorCisjOiBpZl9ydWJ5LmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzM6IHVua25vd24gbG9uZ2ptcCBzdGF0dXMgJWQiCittc2dzdHIgIkUyNzM6IM7FydrXxdPUzs/FINPP09TP0c7JxSBsb25nam1wICVkIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIvDF0sXLzMDexc7JxSDNxdbE1SDSxcHMydrBw8nFyi/P0NLFxMXMxc7Jxc0iCisKKyM6IGlmX3NuaWZmLmM6NjgKK21zZ2lkICJTaG93IGJhc2UgY2xhc3Mgb2YiCittc2dzdHIgIvDPy8HawdTYIMLB2s/X2cogy8zB09MgIgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAi8M/LwdrB1Ngg0MXSxcfS1dbFzs7ZxSDG1c7Lw8nJIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICLwz8zV3sXOycUgydogxsHKzMEiCisKKyM6IGlmX3NuaWZmLmM6NzEKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIHByb2plY3QiCittc2dzdHIgIvDPzNXexc7JxSDJ2iDQ0s/Fy9TBIgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIvDPzNXexc7JxSDJ2iDX08XIINDSz8XL1M/XIgorCisjOiBpZl9zbmlmZi5jOjc0Cittc2dpZCAiUmV0cmlldmUiCittc2dzdHIgIvDPzNXexc7JxSIKKworIzogaWZfc25pZmYuYzo3NQorbXNnaWQgIlNob3cgc291cmNlIG9mIgorbXNnc3RyICLwz8vB2sHU2CDJ08jPxM7ZyiDLz8QiCisKKyM6IGlmX3NuaWZmLmM6NzYKK21zZ2lkICJGaW5kIHN5bWJvbCIKK21zZ3N0ciAi7sHK1Mkg08nN18/MIgorCisjOiBpZl9zbmlmZi5jOjc3Cittc2dpZCAiQnJvd3NlIGNsYXNzIgorbXNnc3RyICLw0s/Tzc/U0iDLzMHT08EiCisKKyM6IGlmX3NuaWZmLmM6NzgKK21zZ2lkICJTaG93IGNsYXNzIGluIGhpZXJhcmNoeSIKK21zZ3N0ciAi8M/LwdrB1Nggy8zB09Mg1yDJxdLB0sjJySIKKworIzogaWZfc25pZmYuYzo3OQorbXNnaWQgIlNob3cgY2xhc3MgaW4gcmVzdHJpY3RlZCBoaWVyYXJjaHkiCittc2dzdHIgIvDPy8HawdTYIMvMwdPTINcgz8fSwc7J3sXOzs/KIMnF0sHSyMnJIgorCisjOiBpZl9zbmlmZi5jOjgwCittc2dpZCAiWHJlZiByZWZlcnMgdG8iCittc2dzdHIgIlhyZWYg09PZzMHF1NPRIM7BIgorCisjOiBpZl9zbmlmZi5jOjgxCittc2dpZCAiWHJlZiByZWZlcnJlZCBieSIKK21zZ3N0ciAi89PZzMvBIM7BIHhyZWYgydoiCisKKyM6IGlmX3NuaWZmLmM6ODIKK21zZ2lkICJYcmVmIGhhcyBhIgorbXNnc3RyICJYcmVmIMnNxcXUIgorCisjOiBpZl9zbmlmZi5jOjgzCittc2dpZCAiWHJlZiB1c2VkIGJ5IgorbXNnc3RyICJYcmVmIMnT0M/M2NrVxdTT0SIKKworIzogaWZfc25pZmYuYzo4NAorbXNnaWQgIlNob3cgZG9jdSBvZiIKK21zZ3N0ciAi8M/LwdrB1NggZG9jdSIKKworIzogaWZfc25pZmYuYzo4NQorbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgorbXNnc3RyICLzz9rEwdTYIGRvY3UiCisKKyM6IGlmX3NuaWZmLmM6OTcKK21zZ2lkICIiCisiQ2Fubm90IGNvbm5lY3QgdG8gU05pRkYrLiBDaGVjayBlbnZpcm9ubWVudCAoc25pZmZlbWFjcyBtdXN0IGJlIGZvdW5kIGluICIKKyIkUEFUSCkuXG4iCittc2dzdHIgIiIKKyLuxdfP2s3P1s7PINDPxNPPxcTJzsnU2NPRIMsgU05pRkYrLiDw0s/XxdLY1MUgzsHT1NLPysvJIM/L0tXWxc7J0S4iCisiKHNuaWZmZW1hY3MgxM/M1s7ZIMLZ1Ngg1cvB2sHO2SDXINDF0sXNxc7Oz8ogJFBBVEgpLlxuIgorCisjOiBpZl9zbmlmZi5jOjQyNQorbXNnaWQgIkUyNzQ6IFNuaWZmOiBFcnJvciBkdXJpbmcgcmVhZC4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJFMjc0OiBTbmlmZjog79vJwsvBINfPINfSxc3RIN7Uxc7J0S4g79TTz8XEyc7FzsnFIgorCisjOiBpZl9zbmlmZi5jOjU1MworbXNnaWQgIlNOaUZGKyBpcyBjdXJyZW50bHkgIgorbXNnc3RyICL3IM7B09TP0d3JyiDNz83FztQgU05pRkYrICIKKworIzogaWZfc25pZmYuYzo1NTUKK21zZ2lkICJub3QgIgorbXNnc3RyICLOxSAiCisKKyM6IGlmX3NuaWZmLmM6NTU2Cittc2dpZCAiY29ubmVjdGVkIgorbXNnc3RyICLQz8TTz8XEyc6jziIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6IO7FydrXxdPUztnKINrB0NLP0yBTTmlGRis6ICVzIgorCisjOiBpZl9zbmlmZi5jOjYwNQorbXNnaWQgIkUyNzY6IEVycm9yIGNvbm5lY3RpbmcgdG8gU05pRkYrIgorbXNnc3RyICJFMjc2OiDv28nCy8Eg08/FxMnOxc7J0SDTzyBTTmlGRisiCisKKyM6IGlmX3NuaWZmLmM6MTAwOQorbXNnaWQgIkUyNzg6IFNOaUZGKyBub3QgY29ubmVjdGVkIgorbXNnc3RyICJFMjc4OiBTTmlGRisgzsUg0M/E08/FxMnOo84iCisKKyM6IGlmX3NuaWZmLmM6MTAxOAorbXNnaWQgIkUyNzk6IE5vdCBhIFNOaUZGKyBidWZmZXIiCittc2dzdHIgIkUyNzk6IPzUzyDOxSDC1cbF0iBTTmlGRisiCisKKyM6IGlmX3NuaWZmLmM6MTA4MworbXNnaWQgIlNuaWZmOiBFcnJvciBkdXJpbmcgd3JpdGUuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiU25pZmY6IO/bycLLwSDXzyDX0sXN0SDawdDJ08kuIO/U08/FxMnOxc7JxSIKKworIzogaWZfdGNsLmM6NDE4Cittc2dpZCAiaW52YWxpZCBidWZmZXIgbnVtYmVyIgorbXNnc3RyICLOxdDSwdfJzNjO2cogzs/NxdIgwtXGxdLBIgorCisjOiBpZl90Y2wuYzo0NjQgaWZfdGNsLmM6OTMxIGlmX3RjbC5jOjExMTAKK21zZ2lkICJub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICLQz8vBIM7FINLFwczJ2s/Xwc7PIgorCisjOiBpZl90Y2wuYzo1MDEKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAizsXJ2tfF09TOwdEgz9DDydEiCisKKyMuID8/PworIzogaWZfdGNsLmM6Nzc0Cittc2dpZCAiY2Fubm90IHNldCBsaW5lKHMpIgorbXNnc3RyICLOxdfP2s3P1s7PIM7B2s7B3snU2CDT1NLPy9UgyczJINPU0s/LySIKKworIzogaWZfdGNsLmM6ODQ1Cittc2dpZCAibWFyayBub3Qgc2V0IgorbXNnc3RyICLP1M3F1MvBIM7FINXT1MHOz9fMxc7BIgorCisjOiBpZl90Y2wuYzo4NTEgaWZfdGNsLmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJyb3cgJWQgY29sdW1uICVkIgorbXNnc3RyICLS0cQgJWQgy8/Mz87LwSAlZCIKKworIzogaWZfdGNsLmM6ODgxCittc2dpZCAiY2Fubm90IGluc2VydC9hcHBlbmQgbGluZSIKK21zZ3N0ciAizsXXz9rNz9bOzyDX09TB18nU2CDJzMkgxM/CwdfJ1Ngg09TSz8vVIgorCisjOiBpZl90Y2wuYzoxMjY4Cittc2dpZCAidW5rbm93biBmbGFnOiAiCittc2dzdHIgIs7FydrXxdPUztnKIMbMwcc6ICIKKworIzogaWZfdGNsLmM6MTMzOAorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICLOxcna18XT1M7B0SB2aW1PcHRpb24iCisKKyM6IGlmX3RjbC5jOjE0MjMKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgIsvMwdfJwdTV0s7PxSDQ0sXS2dfBzsnFIgorCisjOiBpZl90Y2wuYzoxNDI4Cittc2dpZCAidmltIGVycm9yIgorbXNnc3RyICLP28nCy8EgdmltIgorCisjOiBpZl90Y2wuYzoxNDcxCittc2dpZCAiY2Fubm90IGNyZWF0ZSBidWZmZXIvd2luZG93IGNvbW1hbmQ6IG9iamVjdCBpcyBiZWluZyBkZWxldGVkIgorbXNnc3RyICLOxdfP2s3P1s7PINPP2sTB1Nggy8/Nwc7E1SDC1cbF0sEgyczJIM/LzsE6IM/C38XL1CDXINDSz8PF09PFINXEwczFzsnRIgorCisjOiBpZl90Y2wuYzoxNTQ1Cittc2dpZCAiIgorImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IGlzIGFscmVhZHkgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAiIgorIs7F18/azc/Wzs8g2sHSxcfJ09TSydLP18HU2CDLz83BzsTVINMgz8LSwdTO2c0g19naz9fPzTogwtXGxdIgyczJIM/Lzs8g1yAiCisi0NLPw8XT08Ug1cTBzMXOydEiCisKKyMuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEZhbW91cyBsYXN0IHdvcmQ/CisjOiBpZl90Y2wuYzoxNTYyCittc2dpZCAiIgorIkUyODA6IFRDTCBGQVRBTCBFUlJPUjogcmVmbGlzdCBjb3JydXB0IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLiIKKyJvcmciCittc2dzdHIgIiIKKyJFMjgwOiDr8un06f7l8+vh8SDv++ni6+EgVENMOiDQz9fSxdbEo84g09DJ08/LINPT2czPyz8hIPPPz8LdydTFIM/CINzUz80g0M8gIgorIsHE0sXT1SB2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjE1NjMKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisizsXXz9rNz9bOzyDawdLFx8nT1NLJ0s/XwdTYIMvPzcHOxNUg0yDPwtLB1M7ZzSDX2drP18/NOiDT09nMy8EgzsEgwtXGxdIgyczJICIKKyLPy87PIM7FIM/CzsHS1dbFzsEiCisKKyM6IGlmX3RjbC5jOjE3MjQKK21zZ2lkICIiCisiRTU3MTogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFRjbCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisiRTU3MTog6yDTz9bBzMXOycAg3NTBIMvPzcHOxMEgzsUg0sHCz9TBxdQsINDP08vPzNjL1SDOxSDawcfS1dbFzsEgwsnCzMnP1MXLwSAiCisiVGNsIgorCisjOiBpZl90Y2wuYzoxODg2Cittc2dpZCAiIgorIkUyODE6IFRDTCBFUlJPUjogZXhpdCBjb2RlIGlzIG5vdCBpbnQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MTog7/vp4uvhIFRDTDog68/EINfZyM/EwSDOxSDR18zRxdTT0SDDxczZzSDeydPMz80/ISDzz8/C3cnUxSDPwiDc1M/NINcgIgorInZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MjAwNworbXNnaWQgImNhbm5vdCBnZXQgbGluZSIKK21zZ3N0ciAizsXXz9rNz9bOzyDQz8zV3snU2CDT1NLPy9UiCisKKyM6IGlmX3hjbWRzcnYuYzoyMjUKK21zZ2lkICJVbmFibGUgdG8gcmVnaXN0ZXIgYSBjb21tYW5kIHNlcnZlciBuYW1lIgorbXNnc3RyICLuxdfP2s3P1s7PINrB0sXHydPU0snSz9fB1Nggyc3RINPF0tfF0sEgy8/Nwc7EIgorCisjOiBpZl94Y21kc3J2LmM6NDczCittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODog79TQ0sHXy8Egy8/Nwc7E2SDXIMTS1cfVwCDQ0s/H0sHNzdUgzsUg1cTBzMHT2CIKKworIzogaWZfeGNtZHNydi5jOjc0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNTczOiBJbnZhbGlkIHNlcnZlciBpZCB1c2VkOiAlcyIKK21zZ3N0ciAiRTU3Mzog6dPQz8zY2tXF1NPRIM7F0NLB18nM2M7ZyiBpZCDTxdLXxdLBOiAlcyIKKworIzogaWZfeGNtZHNydi5jOjExMTAKK21zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCittc2dzdHIgIiIKKyJFMjUxOiDuxdDSwdfJzNjOzyDTxs/SzcnSz9fBzs8g2s7B3sXOycUgxMHOzs/HzyDQ0s/DxdPTwSBWSU0g1yDSxcXT1NLFLiAiCisi9cTBzMXOzyEiCisKKyM6IG1haW4uYzo2MAorbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICLuxcna18XT1M7ZyiDB0sfVzcXO1CIKKworIzogbWFpbi5jOjYyCittc2dpZCAiVG9vIG1hbnkgZWRpdCBhcmd1bWVudHMiCittc2dzdHIgIvPMydvLz80gzc7Px88gwdLH1c3FztTP1yDSxcTBy9TJ0s/Xwc7J0SIKKworIzogbWFpbi5jOjY0Cittc2dpZCAiQXJndW1lbnQgbWlzc2luZyBhZnRlciIKK21zZ3N0ciAi8NLP0NXdxc4gwdLH1c3FztQg0M/TzMUiCisKKyM6IG1haW4uYzo2NgorbXNnaWQgIkdhcmJhZ2UgYWZ0ZXIgb3B0aW9uIgorbXNnc3RyICLt1dPP0iDQz9PMxSDB0sfVzcXO1MEiCisKKyM6IG1haW4uYzo2OAorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiwgXCItYyBjb21tYW5kXCIgb3IgXCItLWNtZCBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICIiCisi88zJ28vPzSDNzs/HzyDB0sfVzcXO1M/XIFwiK8vPzcHOxMFcIiwgXCItYyDLz83BzsTBXCIgyczJIFwiLS1jbWQgy8/Nwc7EwVwiIgorCisjOiBtYWluLmM6NzAKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IGZvciIKK21zZ3N0ciAi7sXEz9DV09TJzdnFIMHSx9XNxc7U2SDEzNEiCisKKyM6IG1haW4uYzo0NjYKK21zZ2lkICJUaGlzIFZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlIGRpZmYgZmVhdHVyZS4iCittc2dzdHIgIiIKKyLkwc7O2cogVmltIMLZzCDTy8/N0MnMydLP18HOINMg19nLzMDexc7Oz8ogz9PPwsXOzs/T1NjAINDSz9PNz9TSwSDP1MzJ3snKIgorCisjOiBtYWluLmM6OTMyCittc2dpZCAiQXR0ZW1wdCB0byBvcGVuIHNjcmlwdCBmaWxlIGFnYWluOiBcIiIKK21zZ3N0ciAi8M/Q2dTLwSDQz9fUz9LOz8fPIM/Uy9LZ1MnRIMbByszBINPDxc7B0snROiBcIiIKKworIzogbWFpbi5jOjk0MQorbXNnaWQgIkNhbm5vdCBvcGVuIGZvciByZWFkaW5nOiBcIiIKK21zZ3N0ciAi7sXXz9rNz9bOzyDP1MvS2dTYIMTM0SDe1MXOydE6IFwiIgorCisjOiBtYWluLmM6OTg1Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICLuxdfP2s3P1s7PIM/Uy9LZ1NggxMzRINfZ18/EwSDTw8XOwdLJ0TogXCIiCisKKyM6IG1haW4uYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZpbGVzIHRvIGVkaXRcbiIKK21zZ3N0ciAi5sHKzM/XIMTM0SDSxcTBy9TJ0s/Xwc7J0TogJWRcbiIKKworIzogbWFpbi5jOjEyMzMKK21zZ2lkICJWaW06IFdhcm5pbmc6IE91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IPDSxcTV0NLF1sTFzsnFOiD32dfPxCDP09XdxdPU18zRxdTT0SDOxSDOwSDUxdLNyc7BzFxuIgorCisjOiBtYWluLmM6MTIzNQorbXNnaWQgIlZpbTogV2FybmluZzogSW5wdXQgaXMgbm90IGZyb20gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IPDSxcTV0NLF1sTFzsnFOiD318/EINDSz8nTyM/EydQgzsUg0yDUxdLNyc7BzMFcbiIKKworIy4ganVzdCBpbiBjYXNlLi4KKyM6IG1haW4uYzoxMjk3Cittc2dpZCAicHJlLXZpbXJjIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiy8/Nwc7EzsHRINPU0s/LwSDQxdLFxCDX2dDPzM7FzsnFzSB2aW1yYyIKKworIzogbWFpbi5jOjEzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IO7F18/azc/Wzs8g19nQz8zOydTYIN7Uxc7JxSDJ2iBcIiVzXCIiCisKKyM6IG1haW4uYzoyNDExCittc2dpZCAiIgorIlxuIgorIk1vcmUgaW5mbyB3aXRoOiBcInZpbSAtaFwiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLkz9DPzM7J1MXM2M7B0SDJzsbP0s3Bw8nROiBcInZpbSAtaFwiXG4iCisKKyM6IG1haW4uYzoyNDQ0Cittc2dpZCAiW2ZpbGUgLi5dICAgICAgIGVkaXQgc3BlY2lmaWVkIGZpbGUocykiCittc2dzdHIgIlvGwcrMIC4uXSDSxcTBy9TJ0s/Xwc7JxSDVy8Hawc7O2cggxsHKzM/XIgorCisjOiBtYWluLmM6MjQ0NQorbXNnaWQgIi0gICAgICAgICAgICAgICByZWFkIHRleHQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiLSAgICAgICAgICAgICAgICDe1MXOycUg1MXL09TBIMnaINDP1M/LwSDX18/EwSBzdGRpbiIKKworIzogbWFpbi5jOjI0NDYKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCDNxdTLwSAgICAgICAgINLFxMHL1MnSz9fBzsnFIMbByszBINMg1cvB2sHOzs/KIM3F1MvPyiIKKworIzogbWFpbi5jOjI0NDgKK21zZ2lkICItcSBbZXJyb3JmaWxlXSAgZWRpdCBmaWxlIHdpdGggZmlyc3QgZXJyb3IiCittc2dzdHIgIi1xIFvGwcrMIM/bycLPy10g0sXEwcvUydLP18HOycUgxsHKzMEg0yDQxdLXz8ogz9vJwsvPyiIKKworIzogbWFpbi5jOjI0NTcKK21zZ2lkICIiCisiXG4iCisiXG4iCisidXNhZ2U6IgorbXNnc3RyICIiCisiXG4iCisiXG4iCisi6dPQz8zY2s/Xwc7JxToiCisKKyM6IG1haW4uYzoyNDYwCittc2dpZCAiIHZpbSBbYXJndW1lbnRzXSAiCittc2dzdHIgIiB2aW0gW8HSx9XNxc7U2V0gIgorCisjOiBtYWluLmM6MjQ2NAorbXNnaWQgIiIKKyJcbiIKKyIgICBvcjoiCittc2dzdHIgIiIKKyJcbiIKKyIgICDJzMk6IgorCisjOiBtYWluLmM6MjQ2NworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyLh0sfVzcXO1Nk6XG4iCisKKyM6IG1haW4uYzoyNDY4Cittc2dpZCAiLS1cdFx0XHRPbmx5IGZpbGUgbmFtZXMgYWZ0ZXIgdGhpcyIKK21zZ3N0ciAiLS1cdFx0XHTkwczFxSDVy8Ha2dfBwNTT0SDUz8zYy88gyc3FzsEgxsHKzM/XIgorCisjOiBtYWluLmM6MjQ3MAorbXNnaWQgIi0tbGl0ZXJhbFx0XHREb24ndCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICItLWxpdGVyYWxcdFx07sUg19nQz8zO0dTYINDPxNPUwc7P18vVINDPIM3B08vFIgorCisjOiBtYWluLmM6MjQ3MworbXNnaWQgIi1yZWdpc3Rlclx0XHRSZWdpc3RlciB0aGlzIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXJlZ2lzdGVyXHRcdPrB0sXHydPU0snSz9fB1Ngg3NTP1CBndmltIMTM0SBPTEUiCisKKyM6IG1haW4uYzoyNDc0Cittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi11bnJlZ2lzdGVyXHRcdO/Uy8zA3snU2CDSxcfJ09TSwcPJwCDEwc7Oz8fPIGd2aW0gxMzRIE9MRSIKKworIzogbWFpbi5jOjI0NzcKK21zZ2lkICItZ1x0XHRcdFJ1biB1c2luZyBHVUkgKGxpa2UgXCJndmltXCIpIgorbXNnc3RyICItZ1x0XHRcdPrB0NXT1MnU2CDTIMfSwcbJ3sXTy8nNIMnO1MXSxsXK08/NICjLwcsgXCJndmltXCIpIgorCisjOiBtYWluLmM6MjQ3OAorbXNnaWQgIi1mICBvciAgLS1ub2ZvcmtcdEZvcmVncm91bmQ6IERvbid0IGZvcmsgd2hlbiBzdGFydGluZyBHVUkiCittc2dzdHIgIi1mICDJzMkgLS1ub2ZvcmtcdPcgwcvUydfOz8og2sHEwd7FOiDuxSDX2dDPzM7R1NggZm9yayDQ0skg2sHQ1dPLxSBHVUkiCisKKyM6IG1haW4uYzoyNDgwCittc2dpZCAiLXZcdFx0XHRWaSBtb2RlIChsaWtlIFwidmlcIikiCittc2dzdHIgIi12XHRcdFx08sXWyc0gVmkgKMvByyBcInZpXCIpIgorCisjOiBtYWluLmM6MjQ4MQorbXNnaWQgIi1lXHRcdFx0RXggbW9kZSAobGlrZSBcImV4XCIpIgorbXNnc3RyICItZVx0XHRcdPLF1snNIEV4ICjLwcsgXCJleFwiKSIKKworIzogbWFpbi5jOjI0ODIKK21zZ2lkICItc1x0XHRcdFNpbGVudCAoYmF0Y2gpIG1vZGUgKG9ubHkgZm9yIFwiZXhcIikiCittc2dzdHIgIi1zXHRcdFx09MnIycogKNDBy8XUztnKKSDSxdbJzSAo1M/M2MvPIMTM0SBcImV4XCIpIgorCisjOiBtYWluLmM6MjQ4NAorbXNnaWQgIi1kXHRcdFx0RGlmZiBtb2RlIChsaWtlIFwidmltZGlmZlwiKSIKK21zZ3N0ciAiLWRcdFx0XHTyxdbJzSDP1MzJ3snKICjLwcsgXCJ2aW1kaWZmXCIpIgorCisjOiBtYWluLmM6MjQ4NgorbXNnaWQgIi15XHRcdFx0RWFzeSBtb2RlIChsaWtlIFwiZXZpbVwiLCBtb2RlbGVzcykiCittc2dzdHIgIi15XHRcdFx08NLP09TPyiDSxdbJzSAoy8HLIFwiZXZpbVwiLCDCxdrSxdbJzc7ZyikiCisKKyM6IG1haW4uYzoyNDg3Cittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHT0z8zYy88gxMzRIN7Uxc7J0SAoy8HLIFwidmlld1wiKSIKKworIzogbWFpbi5jOjI0ODgKK21zZ2lkICItWlx0XHRcdFJlc3RyaWN0ZWQgbW9kZSAobGlrZSBcInJ2aW1cIikiCittc2dzdHIgIi1aXHRcdFx078fSwc7J3sXOztnKINLF1snNICjLwcsgXCJydmltXCIpIgorCisjOiBtYWluLmM6MjQ4OQorbXNnaWQgIi1tXHRcdFx0TW9kaWZpY2F0aW9ucyAod3JpdGluZyBmaWxlcykgbm90IGFsbG93ZWQiCittc2dzdHIgIi1tXHRcdFx04sXaINfP2s3P1s7P09TJINPPyNLBzsXOydEgydrNxc7FzsnKICjawdDJ08kgxsHKzM/XKSIKKworIzogbWFpbi5jOjI0OTAKK21zZ2lkICItTVx0XHRcdE1vZGlmaWNhdGlvbnMgaW4gdGV4dCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLU1cdFx0XHTixdog18/azc/Wzs/T1Mkg187F08XOydEgydrNxc7FzsnKINcg1MXL09QiCisKKyM6IG1haW4uYzoyNDkxCittc2dpZCAiLWJcdFx0XHRCaW5hcnkgbW9kZSIKK21zZ3N0ciAiLWJcdFx0XHTiyc7B0s7ZyiDSxdbJzSIKKworIzogbWFpbi5jOjI0OTMKK21zZ2lkICItbFx0XHRcdExpc3AgbW9kZSIKK21zZ3N0ciAiLWxcdFx0XHTyxdbJzSBMaXNwIgorCisjOiBtYWluLmM6MjQ5NQorbXNnaWQgIi1DXHRcdFx0Q29tcGF0aWJsZSB3aXRoIFZpOiAnY29tcGF0aWJsZSciCittc2dzdHIgIi1DXHRcdFx08sXWyc0g08/XzcXT1MnNz9PUySDTIFZpOiAnY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyNDk2Cittc2dpZCAiLU5cdFx0XHROb3QgZnVsbHkgVmkgY29tcGF0aWJsZTogJ25vY29tcGF0aWJsZSciCittc2dzdHIgIi1OXHRcdFx08sXWyc0gzsXQz8zOz8og08/XzcXT1MnNz9PUySDTIFZpOiAnbm9jb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjI0OTcKK21zZ2lkICItVltOXVx0XHRWZXJib3NlIGxldmVsIgorbXNnc3RyICItVltOXVx0XHT10s/Xxc7YINDPxNLPws7P09TJINPPz8Ldxc7JyiIKKworIzogbWFpbi5jOjI0OTgKK21zZ2lkICItRFx0XHRcdERlYnVnZ2luZyBtb2RlIgorbXNnc3RyICItRFx0XHRcdPLF1snNIM/UzMHEy8kiCisKKyM6IG1haW4uYzoyNDk5Cittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHTixdog09fP0C3GwcrMwSwgydPQz8zY2tXF1NPRINTPzNjLzyDQwc3R1NgiCisKKyM6IG1haW4uYzoyNTAwCittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx099nXxdPUySDT0MnTz8sg09fP0C3GwcrMz9cgySDawdfF0tvJ1Ngg0sHCz9TVIgorCisjOiBtYWluLmM6MjUwMQorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciAo0yDJzcXOxc0gxsHKzMEpXHT3z9PT1MHOz9fJ1NggwdfB0snKzs8g2sHXxdLbo87O2cog08XBztMiCisKKyM6IG1haW4uYzoyNTAyCittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRcdPTPINbFLCDe1M8gySAtciIKKworIzogbWFpbi5jOjI1MDQKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdFx07sUgydPQz8zY2s/XwdTYIG5ld2NsaSDEzNEgz9TL0tnUydEgz8vOwSIKKworIzogbWFpbi5jOjI1MDUKK21zZ2lkICItZGV2IDxkZXZpY2U+XHRcdFVzZSA8ZGV2aWNlPiBmb3IgSS9PIgorbXNnc3RyICItZGV2IDzV09TSz8rT1NfPPlx0XHTp09DPzNjaz9fB1NggxMzRIEkvTyDVy8Hawc7Oz8UgPNXT1NLPytPU188+IgorCisjOiBtYWluLmM6MjUwOAorbXNnaWQgIi1BXHRcdFx0c3RhcnQgaW4gQXJhYmljIG1vZGUiCittc2dzdHIgIi1BXHRcdFx0+sHQ1dPLINcg4dLBwtPLz80g0sXWyc3FIgorCisjOiBtYWluLmM6MjUxMQorbXNnaWQgIi1IXHRcdFx0U3RhcnQgaW4gSGVicmV3IG1vZGUiCittc2dzdHIgIi1IXHRcdFx0+sHQ1dPLINcg0sXWyc3FIFwi6dfSydRcIiIKKworIzogbWFpbi5jOjI1MTQKK21zZ2lkICItRlx0XHRcdFN0YXJ0IGluIEZhcnNpIG1vZGUiCittc2dzdHIgIi1GXHRcdFx0+sHQ1dPLINcg0sXWyc3FIFwi5sHS08lcIiIKKworIzogbWFpbi5jOjI1MTYKK21zZ2lkICItVCA8dGVybWluYWw+XHRTZXQgdGVybWluYWwgdHlwZSB0byA8dGVybWluYWw+IgorbXNnc3RyICItVCA81MXSzcnOwcw+XHTuwdrOwd7J1Ngg1cvB2sHOztnKINTJ0CA81MXSzcnOwczBPiIKKworIzogbWFpbi5jOjI1MTcKK21zZ2lkICItdSA8dmltcmM+XHRcdFVzZSA8dmltcmM+IGluc3RlYWQgb2YgYW55IC52aW1yYyIKK21zZ3N0ciAiLXUgPHZpbXJjPlx0XHTp09DPzNjaz9fB1NggPHZpbXJjPiDXzcXT1M8gzMDC2cggxsHKzM/XIC52aW1yYyIKKworIzogbWFpbi5jOjI1MTkKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx06dPQz8zY2s/XwdTYIDxndmltcmM+INfNxdPUzyDMwMLZyCDGwcrMz9cgLmd2aW1yYyIKKworIzogbWFpbi5jOjI1MjEKK21zZ2lkICItLW5vcGx1Z2luXHRcdERvbid0IGxvYWQgcGx1Z2luIHNjcmlwdHMiCittc2dzdHIgIi0tbm9wbHVnaW5cdFx07sUg2sHH0tXWwdTYINPDxc7B0snJIM3PxNXMxcoiCisKKyM6IG1haW4uYzoyNTIyCittc2dpZCAiLW9bTl1cdFx0T3BlbiBOIHdpbmRvd3MgKGRlZmF1bHQ6IG9uZSBmb3IgZWFjaCBmaWxlKSIKK21zZ3N0ciAiLW9bTl1cdFx079TL0tnU2CBOIM/Lz84gKNDPINXNz8zewc7JwDog0M8gz8TOz83VIM7BIMvB1sTZyiDGwcrMKSIKKworIzogbWFpbi5jOjI1MjMKK21zZ2lkICItT1tOXVx0XHRMaWtlIC1vIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5IgorbXNnc3RyICItT1tOXVx0XHT0zyDWxSwg3tTPIMkgLW8sIM7PINMg18XS1MnLwczYztnNINLB2sTFzMXOycXNIM/Lz84iCisKKyM6IG1haW4uYzoyNTI0Cittc2dpZCAiK1x0XHRcdFN0YXJ0IGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICIrXHRcdFx07sHewdTYINLFxMHL1MnSz9fBzsnFINcgy8/Ow8UgxsHKzMEiCisKKyM6IG1haW4uYzoyNTI1Cittc2dpZCAiKzxsbnVtPlx0XHRTdGFydCBhdCBsaW5lIDxsbnVtPiIKK21zZ3N0ciAiKzxsbnVtPlx0XHTuwd7B1Ngg0sXEwcvUydLP18HOycUg1yDT1NLPy8Ug0yDOz83F0s/NIDxsbnVtPiIKKworIzogbWFpbi5jOjI1MjcKK21zZ2lkICItLWNtZCA8Y29tbWFuZD5cdEV4ZWN1dGUgPGNvbW1hbmQ+IGJlZm9yZSBsb2FkaW5nIGFueSB2aW1yYyBmaWxlIgorbXNnc3RyICItLWNtZCA8y8/Nwc7EwT5cdPfZ0M/MzsnU2CA8y8/Nwc7E1T4g0MXSxcQg2sHH0tXay8/KIMbByszBIHZpbXJjIgorCisjOiBtYWluLmM6MjUyOQorbXNnaWQgIi1jIDxjb21tYW5kPlx0XHRFeGVjdXRlIDxjb21tYW5kPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItYyA8y8/Nwc7EwT5cdFx099nQz8zOydTYIDzLz83BzsTVPiDQz9PMxSDawcfS1drLySDQxdLXz8fPIMbByszBIgorCisjOiBtYWluLmM6MjUzMAorbXNnaWQgIi1TIDxzZXNzaW9uPlx0XHRTb3VyY2UgZmlsZSA8c2Vzc2lvbj4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLVMgPNPFwc7TPlx0XHTw0s/eydTB1Ngg08PFzsHSycogPNPFwc7TwT4g0M/TzMUg2sHH0tXay8kg0MXS18/HzyDGwcrMwSIKKworIzogbWFpbi5jOjI1MzEKK21zZ2lkICItcyA8c2NyaXB0aW4+XHRSZWFkIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGZyb20gZmlsZSA8c2NyaXB0aW4+IgorbXNnc3RyICItcyA808PFzsHSyco+XHTw0s/eydTB1Nggy8/Nwc7E2SDvwtnezs/HzyDSxdbJzcEgydogxsHKzMEgPNPDxc7B0snRPiIKKworIzogbWFpbi5jOjI1MzIKK21zZ2lkICItdyA8c2NyaXB0b3V0Plx0QXBwZW5kIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItdyA808PFzsHSyco+XHTkz8LB18zR1Ngg19PFINfXxcSjzs7ZxSDLz83BzsTZINcgxsHKzCA808PFzsHSydE+IgorCisjOiBtYWluLmM6MjUzMworbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLVcgPNPDxc7B0snKPlx0+sHQydPB1Ngg19PFINfXxcSjzs7ZxSDLz83BzsTZINcgxsHKzCA808PFzsHSydE+IgorCisjOiBtYWluLmM6MjUzNQorbXNnaWQgIi14XHRcdFx0RWRpdCBlbmNyeXB0ZWQgZmlsZXMiCittc2dzdHIgIi14XHRcdFx08sXEwcvUydLP18HOycUg2sHbycbSz9fBzs7ZyCDGwcrMz9ciCisKKyM6IG1haW4uYzoyNTM5Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRDb25uZWN0IHZpbSB0byB0aGlzIHBhcnRpY3VsYXIgWC1zZXJ2ZXIiCittc2dzdHIgIi1kaXNwbGF5IDzcy9LBzj5cdPDPxNPPxcTJzsnU2CB2aW0gyyDVy8Hawc7Oz83VINPF0tfF0tUgWCIKKworIzogbWFpbi5jOjI1NDEKK21zZ2lkICItWFx0XHRcdERvIG5vdCBjb25uZWN0IHRvIFggc2VydmVyIgorbXNnc3RyICItWFx0XHRcdO7FINfZ0M/MztHU2CDTz8XEyc7FzsnFINMg08XS18XSz80gWCIKKworIzogbWFpbi5jOjI1NDQKK21zZ2lkICItLXJlbW90ZSA8ZmlsZXM+XHRFZGl0IDxmaWxlcz4gaW4gYSBWaW0gc2VydmVyIGlmIHBvc3NpYmxlIgorbXNnc3RyICItLXJlbW90ZSA8xsHKzNk+XHTwzyDXz9rNz9bOz9PUySDSxcTBy9TJ0s/XwdTYIDzGwcrM2T4gzsEg08XS18XSxSBWaW0iCisKKyM6IG1haW4uYzoyNTQ1Cittc2dpZCAiLS1yZW1vdGUtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiLS1yZW1vdGUtc2lsZW50IDzGwcrM2T4gIPTPINbFLCDOzyDCxdog1sHMz8IgzsEgz9TT1dTT1NfJxSDTxdLXxdLBIgorCisjOiBtYWluLmM6MjU0NgorbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcz4gIEFzIC0tcmVtb3RlIGJ1dCB3YWl0IGZvciBmaWxlcyB0byBoYXZlIGJlZW4gZWRpdGVkIgorbXNnc3RyICIiCisiLS1yZW1vdGUtd2FpdCA8xsHKzNk+ICD0zyDWxSwg3tTPIMkgLS1yZW1vdGUsIM7PINMgz9bJxMHOycXNINrB18XS28XOydEiCisKKyM6IG1haW4uYzoyNTQ3Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDzGwcrM2T4gIPTPINbFLCDOzyDCxdog1sHMz8IgzsEgz9TT1dTT1NfJxSDTxdLXxdLBIgorCisjOiBtYWluLmM6MjU0OAorbXNnaWQgIi0tcmVtb3RlLXNlbmQgPGtleXM+XHRTZW5kIDxrZXlzPiB0byBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQiCittc2dzdHIgIi0tcmVtb3RlLXNlbmQgPMvOz9DLyT5cdO/U0NLB18nU2CA8y87P0MvJPiDOwSDTxdLXxdIgVmltIMkg19nK1MkiCisKKyM6IG1haW4uYzoyNTQ5Cittc2dpZCAiLS1yZW1vdGUtZXhwciA8ZXhwcj5cdEV2YWx1YXRlIDxleHByPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIHByaW50IHJlc3VsdCIKK21zZ3N0ciAiLS1yZW1vdGUtZXhwciA819nSwdY+XHT32d7J08zJ1NggPNfZ0sHWPiDOwSDTxdLXxdLFIFZpbSDJIM7B0MXewdTB1NgiCisKKyM6IG1haW4uYzoyNTUwCittc2dpZCAiLS1zZXJ2ZXJsaXN0XHRcdExpc3QgYXZhaWxhYmxlIFZpbSBzZXJ2ZXIgbmFtZXMgYW5kIGV4aXQiCittc2dzdHIgIi0tc2VydmVybGlzdFx0XHTwz8vB2sHU2CDT0MnTz8sgyc2jziDTxdLXxdLP1yBWaW0gySDawdfF0tvJ1Ngg0sHCz9TVIgorCisjOiBtYWluLmM6MjU1MQorbXNnaWQgIi0tc2VydmVybmFtZSA8bmFtZT5cdFNlbmQgdG8vYmVjb21lIHRoZSBWaW0gc2VydmVyIDxuYW1lPiIKK21zZ3N0ciAiIgorIi0tc2VydmVybmFtZSA8yc3RPlx079TQ0sHXydTYIM7BL9PUwdTYINPF0tfF0s/NIFZpbSDTINXLwdrBzs7ZzSA8yc3FzsXNPiIKKworIzogbWFpbi5jOjI1NTQKK21zZ2lkICItaSA8dmltaW5mbz5cdFx0VXNlIDx2aW1pbmZvPiBpbnN0ZWFkIG9mIC52aW1pbmZvIgorbXNnc3RyICItaSA8dmltaW5mbz5cdFx06dPQz8zY2s/XwdTYINfNxdPUzyAudmltaW5mbyDGwcrMIDx2aW1pbmZvPiIKKworIzogbWFpbi5jOjI1NTYKK21zZ2lkICItaCAgb3IgIC0taGVscFx0UHJpbnQgSGVscCAodGhpcyBtZXNzYWdlKSBhbmQgZXhpdCIKK21zZ3N0ciAiLWggyczJIC0taGVscFx099nXxdPUySDT0NLB18vVICjc1M8g08/Pwt3FzsnFKSDJINrB18XS28nU2CDSwcLP1NUiCisKKyM6IG1haW4uYzoyNTU3Cittc2dpZCAiLS12ZXJzaW9uXHRcdFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQiCittc2dzdHIgIi0tdmVyc2lvblx0XHT32dfF09TJIMnOxs/SzcHDycAgzyDXxdLTyckgVmltIMkg2sHXxdLbydTYINLBws/U1SIKKworIzogbWFpbi5jOjI1NjEKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoTW90aWYgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyLh0sfVzcXO1NkgxMzRIGd2aW0gKNfF0tPJ0SBNb3RpZik6XG4iCisKKyM6IG1haW4uYzoyNTY1Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKG5lWHRhdyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIuHSx9XNxc7U2SDEzNEgZ3ZpbSAo18XS08nRIG5lWHRhdyk6XG4iCisKKyM6IG1haW4uYzoyNTY3Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEF0aGVuYSB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIuHSx9XNxc7U2SDEzNEgZ3ZpbSAo18XS08nRIEF0aGVuYSk6XG4iCisKKyM6IG1haW4uYzoyNTcxCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiIKK21zZ3N0ciAiLWRpc3BsYXkgPMTJ09DMxco+XHT6wdDV09TJ1NggdmltIM7BINXLwdrBzs7PzSA8xMnT0MzFxT4iCisKKyM6IG1haW4uYzoyNTcyCittc2dpZCAiLWljb25pY1x0XHRTdGFydCB2aW0gaWNvbmlmaWVkIgorbXNnc3RyICItaWNvbmljXHRcdPrB0NXT1MnU2CB2aW0g1yDT16PSztXUz80g18nExSIKKworIzogbWFpbi5jOjI1NzQKK21zZ2lkICItbmFtZSA8bmFtZT5cdFx0VXNlIHJlc291cmNlIGFzIGlmIHZpbSB3YXMgPG5hbWU+IgorbXNnc3RyICItbmFtZSA8yc3RPlx0XHTp09DPzNjaz9fB1Ngg0sXT1dLTLCDLwcsgxdPMySDC2SB2aW0gwtnMIDzJzcXOxc0+IgorCisjOiBtYWluLmM6MjU3NQorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgKO7FINLFwczJ2s/Xwc7PKVxuIgorCisjOiBtYWluLmM6MjU3NworbXNnaWQgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciB0aGUgYmFja2dyb3VuZCAoYWxzbzogLWJnKSIKK21zZ3N0ciAiIgorIi1iYWNrZ3JvdW5kIDzD18XUPlx06dPQz8zY2s/XwdTYINXLwdrBzs7ZyiA8w9fF1D4gxMzRIMbPzsEgKNTBy9bFOiAtYmcpIgorCisjOiBtYWluLmM6MjU3OAorbXNnaWQgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZnKSIKK21zZ3N0ciAiIgorIi1mb3JlZ3JvdW5kIDzD18XUPlx06dPQz8zY2s/XwdTYIDzD18XUPiDEzNEgz8LZ3s7Px88g1MXL09TBICjUwcvWxTogLWZnKSIKKworIzogbWFpbi5jOjI1NzkgbWFpbi5jOjI1OTkKK21zZ2lkICItZm9udCA8Zm9udD5cdFx0VXNlIDxmb250PiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mbikiCittc2dzdHIgIi1mb250IDzb0snG1D5cdFx06dPQz8zY2s/XwdTYIDzb0snG1D4gxMzRIM/C2d7Oz8fPINTFy9PUwSAo1MHL1sU6IC1mbikiCisKKyM6IG1haW4uYzoyNTgwCittc2dpZCAiLWJvbGRmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgYm9sZCB0ZXh0IgorbXNnc3RyICItYm9sZGZvbnQgPNvSycbUPlx06dPQz8zY2s/XwdTYIDzb0snG1D4gxMzRINbJ0s7Px88g1MXL09TBIgorCisjOiBtYWluLmM6MjU4MQorbXNnaWQgIi1pdGFsaWNmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgaXRhbGljIHRleHQiCittc2dzdHIgIi1pdGFsaWNmb250IDzb0snG1D5cdOnT0M/M2NrP18HU2CA829LJxtQ+IMTM0SDOwcvMz87Oz8fPINTFy9PUwSIKKworIzogbWFpbi5jOjI1ODIgbWFpbi5jOjI2MDAKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIiIKKyItZ2VvbWV0cnkgPMfFz83F1NLJ0T5cdOnT0M/M2NrP18HU2CDOwd7BzNjO1cAgPMfFz83F1NLJwD4gKNTBy9bFOiAtZ2VvbSkiCisKKyM6IG1haW4uYzoyNTgzCittc2dpZCAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdFVzZSBhIGJvcmRlciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtYncpIgorbXNnc3RyICItYm9yZGVyd2lkdGggPNvJ0snOwT5cdOnT0M/M2NrP18HU2CA828nSyc7VPiDCz9LEwNLBICjUwcvWxTogLWJ3KSIKKworIzogbWFpbi5jOjI1ODQKK21zZ2lkICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgVXNlIGEgc2Nyb2xsYmFyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1zdykiCittc2dzdHIgIiIKKyItc2Nyb2xsYmFyd2lkdGggPNvJ0snOwT4g6dPQz8zY2s/XwdTYINvJ0snO1SDQz8zP09kg0NLPy9LV1MvJICjUwcvWxTogLXN3KSIKKworIzogbWFpbi5jOjI1ODYKK21zZ2lkICItbWVudWhlaWdodCA8aGVpZ2h0Plx0VXNlIGEgbWVudSBiYXIgaGVpZ2h0IG9mIDxoZWlnaHQ+IChhbHNvOiAtbWgpIgorbXNnc3RyICItbWVudWhlaWdodCA819nTz9TBPlx06dPQz8zY2s/XwdTYIDzX2dPP1NU+IM3FzsAgKNTBy9bFOiAtbWgpIgorCisjOiBtYWluLmM6MjU4OCBtYWluLmM6MjYwMQorbXNnaWQgIi1yZXZlcnNlXHRcdFVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiAtcnYpIgorbXNnc3RyICItcmV2ZXJzZVx0XHTp09DPzNjaz9fB1Nggyc7XxdLTztnKINfJxMXP0sXWyc0gKNTBy9bFOiAtcnYpIgorCisjOiBtYWluLmM6MjU4OQorbXNnaWQgIityZXZlcnNlXHRcdERvbid0IHVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiArcnYpIgorbXNnc3RyICIrcmV2ZXJzZVx0XHTuxSDJ09DPzNjaz9fB1Nggyc7XxdLTztnKINfJxMXP0sXWyc0gKNTBy9bFOiArcnYpIgorCisjOiBtYWluLmM6MjU5MAorbXNnaWQgIi14cm0gPHJlc291cmNlPlx0U2V0IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UiCittc2dzdHIgIi14cm0gPNLF09XS0z5cdPXT1MHOz9fJ1Ngg1cvB2sHOztnKIDzSxdPV0tM+IgorCisjOiBtYWluLmM6MjU5MworbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChSSVNDIE9TIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisi4dLH1c3FztTZIMTM0SBndmltICjXxdLTydEgUklTQyBPUyk6XG4iCisKKyM6IG1haW4uYzoyNTk0Cittc2dpZCAiLS1jb2x1bW5zIDxudW1iZXI+XHRJbml0aWFsIHdpZHRoIG9mIHdpbmRvdyBpbiBjb2x1bW5zIgorbXNnc3RyICItLWNvbHVtbnMgPN7J08zPPlx08MXS18/Owd7BzNjOwdEg28nSyc7BIM/LzsEg1yDLz8zPzsvByCIKKworIzogbWFpbi5jOjI1OTUKK21zZ2lkICItLXJvd3MgPG51bWJlcj5cdEluaXRpYWwgaGVpZ2h0IG9mIHdpbmRvdyBpbiByb3dzIgorbXNnc3RyICItLXJvd3MgPN7J08zPPlx08MXS18/Owd7BzNjOwdEg19nTz9TBIM/LzsEg1yDT1NLPy8HIIgorCisjOiBtYWluLmM6MjU5OAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisi4dLH1c3FztTZIMTM0SBndmltICjXxdLTydEgR1RLKyk6XG4iCisKKyM6IG1haW4uYzoyNjAyCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiAoYWxzbzogLS1kaXNwbGF5KSIKK21zZ3N0ciAiIgorIi1kaXNwbGF5IDzEydPQzMXKPlx0+sHQ1dPUydTYIHZpbSDOwSDVy8Hawc7Oz80gPMTJ09DMxcU+ICjUwcvWxTogLS1kaXNwbGF5KSIKKworIzogbWFpbi5jOjI2MDQKK21zZ2lkICItLXJvbGUgPHJvbGU+XHRTZXQgYSB1bmlxdWUgcm9sZSB0byBpZGVudGlmeSB0aGUgbWFpbiB3aW5kb3ciCittc2dzdHIgIiIKKyItLXJvbGUgPNLPzNg+XHT109TBzs/XydTYINXOycvBzNjO1cAgPNLPzNg+IMTM0SDJxMXO1MnGycvBw8nJIMfMwdfOz8fPIM/LzsEiCisKKyM6IG1haW4uYzoyNjA2Cittc2dpZCAiLS1zb2NrZXRpZCA8eGlkPlx0T3BlbiBWaW0gaW5zaWRlIGFub3RoZXIgR1RLIHdpZGdldCIKK21zZ3N0ciAiLS1zb2NrZXRpZCA8eGlkPlx079TL0tnU2CBWaW0g187V1NLJIMTS1cfPx88gy8/N0M/Oxc7UwSBHVEsiCisKKyM6IG1haW4uYzoyNjA5Cittc2dpZCAiLVAgPHBhcmVudCB0aXRsZT5cdE9wZW4gVmltIGluc2lkZSBwYXJlbnQgYXBwbGljYXRpb24iCittc2dzdHIgIi1QIDzawcfPzM/Xz8sg0s/EydTFzNE+XHTv1MvS2dTYIFZpbSDXINLPxMnUxczY08vPzSDQ0snMz9bFzsnJIgorCisjOiBtYWluLmM6Mjg0NworbXNnaWQgIk5vIGRpc3BsYXkiCittc2dzdHIgIu7F1CDEydPQzMXRIgorCisjLiBGYWlsZWQgdG8gc2VuZCwgYWJvcnQuCisjOiBtYWluLmM6Mjg2MgorbXNnaWQgIjogU2VuZCBmYWlsZWQuXG4iCittc2dzdHIgIjog79TQ0sHXy8EgzsUg1cTBzMHT2C5cbiIKKworIy4gTGV0IHZpbSBzdGFydCBub3JtYWxseS4KKyM6IG1haW4uYzoyODY4Cittc2dpZCAiOiBTZW5kIGZhaWxlZC4gVHJ5aW5nIHRvIGV4ZWN1dGUgbG9jYWxseVxuIgorbXNnc3RyICI6IO/U0NLB18vBIM7FINXEwczB09guIPDP0NnUy8EgzcXT1M7Px88g19nQz8zOxc7J0VxuIgorCisjOiBtYWluLmM6MjkwNiBtYWluLmM6MjkyNworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBvZiAlZCBlZGl0ZWQiCittc2dzdHIgIs/U0sXEwcvUydLP18HOzyAlZCDJ2iAlZCIKKworIzogbWFpbi5jOjI5NDkKK21zZ2lkICJObyBkaXNwbGF5OiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICLuxdQgxMnT0MzF0Togz9TQ0sHXy8Eg19nSwdbFzsnRIM7FINXEwczB09guXG4iCisKKyM6IG1haW4uYzoyOTYxCittc2dpZCAiOiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICI6IO/U0NLB18vBINfZ0sHWxc7J0SDOxSDVxMHMwdPYLlxuIgorCisjOiBtYXJrLmM6NzA5Cittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICLuxdQg1dPUwc7P18zFzs7ZyCDP1M3F1M/LIgorCisjOiBtYXJrLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4Mzog7sXUIM/UzcXUz8ssINPP19DBxMHA3cnIINMgXCIlc1wiIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo3MjIKK21zZ2lkICIiCisiXG4iCisibWFyayBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiz9TNxdQg09TSICDLz8wgxsHKzC/UxcvT1CIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzYwCittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyLQ0tnWz8sg09TSICDLz8wgxsHKzC/UxcvT1CIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6ODA1Cittc2dpZCAiIgorIlxuIgorImNoYW5nZSBsaW5lICBjb2wgdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIsnazcXOLiAg09TSICDLz8wg1MXL09QiCisKKyM6IG1hcmsuYzoxMjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjIEZpbGUgbWFya3M6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIOfMz8LBzNjO2cUgz9TNxdTLyTpcbiIKKworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjIEp1bXBsaXN0IChuZXdlc3QgZmlyc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDz0MnTz8sg0NLZ1svP1yAo087B3sHMwSDCz8zFxSDT18XWycUpOlxuIgorCisjOiBtYXJrLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyBIaXN0b3J5IG9mIG1hcmtzIHdpdGhpbiBmaWxlcyAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIOnT1M/SydEgzcXT1M7ZyCDP1M3F1M/LICjP1CDCz8zFxSDT18XWycggyyDT1MHS2c0pOlxuIgorCisjOiBtYXJrLmM6MTUwMQorbXNnaWQgIk1pc3NpbmcgJz4nIgorbXNnc3RyICLw0s/Q1d3FzsEgJz4nIgorCisjOiBtYnl0ZS5jOjQ2NworbXNnaWQgIkU1NDM6IE5vdCBhIHZhbGlkIGNvZGVwYWdlIgorbXNnc3RyICJFNTQzOiDuxcTP0NXT1MnNz8Ugyc3RIMvPxMnSz9fLySIKKworIzogbWJ5dGUuYzo0NDMxCittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IO7F18/azc/Wzs8gzsHazsHeydTYINrOwd7FzsnRIMvPztTFy9PUwSDX18/EwSIKKworIzogbWJ5dGUuYzo0NTgzCittc2dpZCAiRTI4NTogRmFpbGVkIHRvIGNyZWF0ZSBpbnB1dCBjb250ZXh0IgorbXNnc3RyICJFMjg1OiDuxdfP2s3P1s7PINPP2sTB1Nggy8/O1MXL09Qg19fPxMEiCisKKyM6IG1ieXRlLmM6NDc0MQorbXNnaWQgIkUyODY6IEZhaWxlZCB0byBvcGVuIGlucHV0IG1ldGhvZCIKK21zZ3N0ciAiRTI4Njog7sXVxMHezsHRINDP0NnUy8Egz9TL0tnU2CDNxdTPxCDX18/EwSIKKworIzogbWJ5dGUuYzo0NzUyCittc2dpZCAiRTI4NzogV2FybmluZzogQ291bGQgbm90IHNldCBkZXN0cm95IGNhbGxiYWNrIHRvIElNIgorbXNnc3RyICIiCisiRTI4Nzog8NLFxNXQ0sXWxMXOycU6IM7F18/azc/Wzs8gzsHazsHeydTYIM/C0i4g19naz9cg1c7J3tTP1sXOydEgzcXUz8TBICIKKyLX18/EwSIKKworIzogbWJ5dGUuYzo0NzU4Cittc2dpZCAiRTI4ODogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgc3R5bGUiCittc2dzdHIgIkUyODg6IM3F1M/EINfXz8TBIM7FINDPxMTF0tbJ18HF1CDT1MnMySIKKworIzogbWJ5dGUuYzo0ODE1Cittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIiIKKyJFMjg5OiDNxdTPxCDX18/EwSDOxSDQz8TExdLWydfBxdQgzc/KINTJ0CDQ0sXE18HSydTFzNjOz8fPINLFxMHL1MnSz9fBzsnRIgorCisjOiBtYnl0ZS5jOjQ4ODkKK21zZ2lkICJFMjkwOiBvdmVyLXRoZS1zcG90IHN0eWxlIHJlcXVpcmVzIGZvbnRzZXQiCittc2dzdHIgIkUyOTA6INPUyczYIFwizsHEIM3F09TPzVwiINTSxcLVxdQg1cvB2sHOydEg29LJxtTP18/HzyDOwcLP0sEiCisKKyM6IG1ieXRlLmM6NDkyNQorbXNnaWQgIkUyOTE6IFlvdXIgR1RLKyBpcyBvbGRlciB0aGFuIDEuMi4zLiBTdGF0dXMgYXJlYSBkaXNhYmxlZCIKK21zZ3N0ciAiIgorIkUyOTE6IEdUSysgws/MxcUg0sHOzsXKINfF0tPJySwg3sXNIDEuMi4zLiDvwszB09TYINPP09TP0c7J0SDOxSDSwcLP1MHF1C4iCisKKyM6IG1ieXRlLmM6NTIzMgorbXNnaWQgIkUyOTI6IElucHV0IE1ldGhvZCBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmciCittc2dzdHIgIkUyOTI6IPPF0tfF0iDNxdTPxMEg19fPxMEgzsUg2sHQ1d3FziIKKworIzogbWVtZmlsZS5jOjQ4OAorbXNnaWQgIkUyOTM6IGJsb2NrIHdhcyBub3QgbG9ja2VkIgorbXNnc3RyICJFMjkzOiDCzM/LIM7FINrBwszPy8nSz9fBziIKKworIzogbWVtZmlsZS5jOjEwMDUKK21zZ2lkICJFMjk0OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSByZWFkIgorbXNnc3RyICJFMjk0OiDv28nCy8Eg0M/J08vBINDSySDe1MXOyckg09fP0C3GwcrMwSIKKworIzogbWVtZmlsZS5jOjEwMTAKK21zZ2lkICJFMjk1OiBSZWFkIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5NTog79vJwsvBIN7Uxc7J0SDT18/QLcbByszBIgorCisjOiBtZW1maWxlLmM6MTA2MgorbXNnaWQgIkUyOTY6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHdyaXRlIgorbXNnc3RyICJFMjk2OiDv28nCy8Eg0M/J08vBINDSySDawdDJ08kg09fP0C3GwcrMwSIKKworIzogbWVtZmlsZS5jOjEwODAKK21zZ2lkICJFMjk3OiBXcml0ZSBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTc6IO/bycLLwSDQ0skg2sHQydPJINPXz9AtxsHKzMEiCisKKyM6IG1lbWZpbGUuYzoxMjc3Cittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICIiCisiRTMwMDog89fP0C3GwcrMINXWxSDT1d3F09TX1cXUICjB1MHLwSDTIMnT0M/M2NrP18HOycXNINPJzdfPzNjOz8og09PZzMvJPykiCisKKyM6IG1lbWxpbmUuYzoyNzUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDA/IgorbXNnc3RyICJFMjk4OiDuxSDQz8zV3sXOIMLMz8sgzs/NxdIgMD8iCisKKyM6IG1lbWxpbmUuYzozMTUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDE/IgorbXNnc3RyICJFMjk4OiDuxSDQz8zV3sXOIMLMz8sgzs/NxdIgMT8iCisKKyM6IG1lbWxpbmUuYzozMzMKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDI/IgorbXNnc3RyICJFMjk4OiDuxSDQz8zV3sXOIMLMz8sgzs/NxdIgMj8iCisKKyMuIGNvdWxkIG5vdCAocmUpb3BlbiB0aGUgc3dhcCBmaWxlLCB3aGF0IGNhbiB3ZSBkbz8/Pz8KKyM6IG1lbWxpbmUuYzo0NDMKK21zZ2lkICJFMzAxOiBPb3BzLCBsb3N0IHRoZSBzd2FwIGZpbGUhISEiCittc2dzdHIgIkUzMDE6IO/KLCDQz9TF0tHM09Eg09fP0C3GwcrMISEhIgorCisjOiBtZW1saW5lLmM6NDQ4Cittc2dpZCAiRTMwMjogQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDI6IO7F18/azc/Wzs8g0MXSxcnNxc7P18HU2CDT18/QLcbByswiCisKKyM6IG1lbWxpbmUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwMzogVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciBcIiVzXCIsIHJlY292ZXJ5IGltcG9zc2libGUiCittc2dzdHIgIiIKKyJFMzAzOiDuxSDVxMHMz9PYIM/Uy9LZ1Ngg09fP0C3GwcrMIMTM0SBcIiVzXCIsINfP09PUwc7P18zFzsnFIM7F18/azc/Wzs8iCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiBtbF90aW1lc3RhbXA6IO7FINDPzNXexc4gwszPyyAwPz8iCisKKyM6IG1lbWxpbmUuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNTogTm8gc3dhcCBmaWxlIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiRTMwNTog89fP0C3GwcrMIMTM0SAlcyDOxSDOwcrExc4iCisKKyM6IG1lbWxpbmUuYzo3NjcKK21zZ2lkICJFbnRlciBudW1iZXIgb2Ygc3dhcCBmaWxlIHRvIHVzZSAoMCB0byBxdWl0KTogIgorbXNnc3RyICIiCisi99fFxMnUxSDOz83F0iDT18/QLcbByszBLCDLz9TP0tnKINPMxcTVxdQgydPQz8zY2s/XwdTYICgwIMTM0SDX2cjPxMEpOiAiCisKKyM6IG1lbWxpbmUuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNjogQ2Fubm90IG9wZW4gJXMiCittc2dzdHIgIkUzMDY6IO7FIM3Px9Ugz9TL0tnU2CAlcyIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIu7F18/azc/Wzs8g0NLP3snUwdTYIMLMz8sgMCDJ2iAiCisKKyM6IG1lbWxpbmUuYzo4MzcKK21zZ2lkICIiCisiXG4iCisiTWF5YmUgbm8gY2hhbmdlcyB3ZXJlIG1hZGUgb3IgVmltIGRpZCBub3QgdXBkYXRlIHRoZSBzd2FwIGZpbGUuIgorbXNnc3RyICIiCisiXG4iCisi7sXUIMnazcXOxc7JyiwgyczJIFZpbSDOxSDTzc/HIM/Czs/XydTYINPXz9AtxsHKzCIKKworIzogbWVtbGluZS5jOjg0NyBtZW1saW5lLmM6ODY0Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiIM7FzNja0SDJ09DPzNjaz9fB1Ngg1yDEwc7Oz8og18XS08nJIFZpbS5cbiIKKworIzogbWVtbGluZS5jOjg0OQorbXNnaWQgIlVzZSBWaW0gdmVyc2lvbiAzLjAuXG4iCittc2dzdHIgIunT0M/M2NrVytTFIFZpbSDXxdLTyckgMy4wLlxuIgorCisjOiBtZW1saW5lLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDc6ICVzIM7FINHXzNHF1NPRINPXz9AtxsHKzM/NIFZpbSIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIgzsXM2NrRIMnT0M/M2NrP18HU2CDOwSDc1M/NIMvPzdDYwNTF0sUuXG4iCisKKyM6IG1lbWxpbmUuYzo4NzAKK21zZ2lkICJUaGUgZmlsZSB3YXMgY3JlYXRlZCBvbiAiCittc2dzdHIgIubByswgwtnMINPP2sTBziAiCisKKyM6IG1lbWxpbmUuYzo4NzQKK21zZ2lkICIiCisiLFxuIgorIm9yIHRoZSBmaWxlIGhhcyBiZWVuIGRhbWFnZWQuIgorbXNnc3RyICIiCisiLFxuIgorIszJws8gxsHKzCDC2cwg0M/X0sXWxKPOLiIKKworIzogbWVtbGluZS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIgorbXNnc3RyICLp09DPzNja1cXU09Eg09fP0C3GwcrMIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJPcmlnaW5hbCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAi6dPIz8TO2cogxsHKzCBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MjIKK21zZ2lkICJFMzA4OiBXYXJuaW5nOiBPcmlnaW5hbCBmaWxlIG1heSBoYXZlIGJlZW4gY2hhbmdlZCIKK21zZ3N0ciAiRTMwODog8NLFxNXQ0sXWxMXOycU6IMnTyM/EztnKIMbByswgzc/HIMLZ1NggydrNxc6jziIKKworIzogbWVtbGluZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6IO7F18/azc/Wzs8g0NLP3snUwdTYIMLMz8sgMSDJ2iAlcyIKKworIzogbWVtbGluZS5jOjk3OQorbXNnaWQgIj8/P01BTlkgTElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/7/Tz9fTz9Pf15fQg7e7v5+8g8/Ty7+siCisKKyM6IG1lbWxpbmUuYzo5OTUKK21zZ2lkICI/Pz9MSU5FIENPVU5UIFdST05HIgorbXNnc3RyICI/Pz/u5fDy4ffp7Pju7+Ug+u7h/uXu6eUg8/7l9P7p6+Eg8/Ty7+siCisKKyM6IG1lbWxpbmUuYzoxMDAyCittc2dpZCAiPz8/RU1QVFkgQkxPQ0siCittc2dzdHIgIj8/P/D18/Tv6iDi7O/rIgorCisjOiBtZW1saW5lLmM6MTAyOAorbXNnaWQgIj8/P0xJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P+/08/X08/T39eD0IPP08u/r6SIKKworIzogbWVtbGluZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxMDogQmxvY2sgMSBJRCB3cm9uZyAoJXMgbm90IGEgLnN3cCBmaWxlPykiCittc2dzdHIgIkUzMTA6IM7F0NLB18nM2M7ZyiDCzM/LIDEgSUQgKCVzIM7FINHXzNHF1NPRIMbByszPzSAuc3dwPykiCisKKyM6IG1lbWxpbmUuYzoxMDY1Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/8PLv8PX95e4g4uzv6yIKKworIzogbWVtbGluZS5jOjEwODEKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgYmUgbWVzc2VkIHVwIgorbXNnc3RyICI/Pz/T1NLPy8kgzc/H1dQgwtnU2CDJ09DP0t7Fztkgz9TTwMTBIMTPID8/P+vv7uPhIgorCisjOiBtZW1saW5lLmM6MTA5NworbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBoYXZlIGJlZW4gaW5zZXJ0ZWQvZGVsZXRlZCIKK21zZ3N0ciAiPz8/09TSz8vJIM3Px8zJIMLZ1Ngg19PUwdfMxc7ZIMnMySDVxMHMxc7ZIM/U08DEwSDEzyA/Pz/r7+7j4SIKKworIzogbWVtbGluZS5jOjExMTcKK21zZ2lkICI/Pz9FTkQiCittc2dzdHIgIj8/P+vv7uXjIgorCisjOiBtZW1saW5lLmM6MTE0MworbXNnaWQgIkUzMTE6IFJlY292ZXJ5IEludGVycnVwdGVkIgorbXNnc3RyICJFMzExOiD3z9PT1MHOz9fMxc7JxSDQ0sXS18HOzyIKKworIzogbWVtbGluZS5jOjExNDgKK21zZ2lkICIiCisiRTMxMjogRXJyb3JzIGRldGVjdGVkIHdoaWxlIHJlY292ZXJpbmc7IGxvb2sgZm9yIGxpbmVzIHN0YXJ0aW5nIHdpdGggPz8/IgorbXNnc3RyICIiCisiRTMxMjog988g19LFzdEg18/T09TBzs/XzMXOydEgz8LOwdLV1sXO2SDP28nCy8k7INPNLiDT1NLPy8ksIM7B3snOwcDdycXT0SAiCisi0yA/Pz8iCisKKyM6IG1lbWxpbmUuYzoxMTUwCittc2dpZCAiU2VlIFwiOmhlbHAgRTMxMlwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAi880uIMTP0M/MzsnUxczYztXAIMnOxs/SzcHDycAg1yDT0NLB18/ezsnLxSAoXCI6aGVscCBFMzEyXCIpIgorCisjOiBtZW1saW5lLmM6MTE1NQorbXNnaWQgIlJlY292ZXJ5IGNvbXBsZXRlZC4gWW91IHNob3VsZCBjaGVjayBpZiBldmVyeXRoaW5nIGlzIE9LLiIKK21zZ3N0ciAi98/T09TBzs/XzMXOycUg2sHXxdLbxc7PLiDw0s/XxdLY1MUsINfToyDMySDXINDP0tHEy8UuIgorCisjOiBtZW1saW5lLmM6MTE1NgorbXNnaWQgIiIKKyJcbiIKKyIoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWVcbiIKK21zZ3N0ciAiIgorIlxuIgorIijtz9bF1MUg2sHQydPB1NggxsHKzCDQz8QgxNLVx8nNIMnNxc7FzSDJINPSwdfOydTYIMXHzyDTIMnTyM/EztnNXG4iCisKKyM6IG1lbWxpbmUuYzoxMTU3Cittc2dpZCAiYW5kIHJ1biBkaWZmIHdpdGggdGhlIG9yaWdpbmFsIGZpbGUgdG8gY2hlY2sgZm9yIGNoYW5nZXMpXG4iCittc2dzdHIgIsbByszPzSDQ0skg0M/Nz93JINDSz8fSwc3N2SBkaWZmKS5cbiIKKworIzogbWVtbGluZS5jOjExNTgKK21zZ2lkICIiCisiRGVsZXRlIHRoZSAuc3dwIGZpbGUgYWZ0ZXJ3YXJkcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIvrB1MXNINXEwczJ1MUgxsHKzCAuc3dwLlxuIgorIlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMTQKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAi78LOwdLV1sXO2SDT18/QLcbByszZOiIKKworIzogbWVtbGluZS5jOjEzOTIKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAg9yDUxcvV3cXNIMvB1MHMz8fFOlxuIgorCisjOiBtZW1saW5lLmM6MTM5NAorbXNnaWQgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorbXNnc3RyICIgICDzINXLwdrBzs7ZzSDJzcXOxc06XG4iCisKKyM6IG1lbWxpbmUuYzoxMzk4Cittc2dpZCAiICAgSW4gZGlyZWN0b3J5ICIKK21zZ3N0ciAiICAg9yDLwdTBzM/HxSAgICIKKworIzogbWVtbGluZS5jOjE0MTYKK21zZ2lkICIgICAgICAtLSBub25lIC0tXG4iCittc2dzdHIgIiAgICAgIC0tIM7F1CAtLVxuIgorCisjOiBtZW1saW5lLmM6MTQ4OAorbXNnaWQgIiAgICAgICAgICBvd25lZCBieTogIgorbXNnc3RyICIgICAgICAgICAg18zBxMXMxcM6ICIKKworIzogbWVtbGluZS5jOjE0OTAKK21zZ2lkICIgICBkYXRlZDogIgorbXNnc3RyICIgICAgxMHUwTogIgorCisjOiBtZW1saW5lLmM6MTQ5NCBtZW1saW5lLmM6MzY4NAorbXNnaWQgIiAgICAgICAgICAgICBkYXRlZDogIgorbXNnc3RyICIgICAgICAgICAgICAgIMTB1ME6ICIKKworIzogbWVtbGluZS5jOjE1MTAKK21zZ2lkICIgICAgICAgICBbZnJvbSBWaW0gdmVyc2lvbiAzLjBdIgorbXNnc3RyICIgICAgICAgICBbz9QgVmltINfF0tPJySAzLjBdIgorCisjOiBtZW1saW5lLmM6MTUxNAorbXNnaWQgIiAgICAgICAgIFtkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlXSIKK21zZ3N0ciAiICAgICAgICAgW87FINHXzNHF1NPRINPXz9AtxsHKzM/NIFZpbV0iCisKKyM6IG1lbWxpbmUuYzoxNTE4Cittc2dpZCAiICAgICAgICAgZmlsZSBuYW1lOiAiCittc2dzdHIgIiAgICAgICAgIMnN0SDGwcrMwTogIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICAgbW9kaWZpZWQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICAgydrNxc6jzjogIgorCisjOiBtZW1saW5lLmM6MTUyNQorbXNnaWQgIllFUyIKK21zZ3N0ciAi5OEiCisKKyM6IG1lbWxpbmUuYzoxNTI1Cittc2dpZCAibm8iCittc2dzdHIgIs7F1CIKKworIzogbWVtbGluZS5jOjE1MjkKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgdXNlciBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICDQz8zY2s/XwdTFzNg6ICIKKworIzogbWVtbGluZS5jOjE1MzYKK21zZ2lkICIgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiICDLz83Q2MDUxdI6ICIKKworIzogbWVtbGluZS5jOjE1MzgKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICDLz83Q2MDUxdI6ICIKKworIzogbWVtbGluZS5jOjE1NDQKK21zZ2lkICIiCisiXG4iCisiICAgICAgICBwcm9jZXNzIElEOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgINDSz8PF09M6ICIKKworIzogbWVtbGluZS5jOjE1NTAKK21zZ2lkICIgKHN0aWxsIHJ1bm5pbmcpIgorbXNnc3RyICIgKMXdoyDX2dDPzM7RxdTT0SkiCisKKyM6IG1lbWxpbmUuYzoxNTYyCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbzsUg0NLJx8/Exc4gxMzRIMnT0M/M2NrP18HOydEg0yDEwc7Oz8og18XS08nFyiBWaW1dIgorCisjOiBtZW1saW5lLmM6MTU2NQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSBvbiB0aGlzIGNvbXB1dGVyXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFvOxSDQ0snHz8TFziDEzNEgydPQz8zY2s/Xwc7J0SDOwSDc1M/NIMvPzdDYwNTF0sVdIgorCisjOiBtZW1saW5lLmM6MTU3MAorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iCittc2dzdHIgIiAgICAgICAgIFvOxSDeydTBxdTT0V0iCisKKyM6IG1lbWxpbmUuYzoxNTc0Cittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSBvcGVuZWRdIgorbXNnc3RyICIgICAgICAgICBbzsUgz9TL0tnXwcXU09FdIgorCisjOiBtZW1saW5lLmM6MTc2NAorbXNnaWQgIkUzMTM6IENhbm5vdCBwcmVzZXJ2ZSwgdGhlcmUgaXMgbm8gc3dhcCBmaWxlIgorbXNnc3RyICJFMzEzOiDuxdfP2s3P1s7PIM/Czs/XydTYINPXz9AtxsHKzCwg0M/Ty8/M2MvVIM/OIM7FIM/CzsHS1dbFziIKKworIzogbWVtbGluZS5jOjE4MTcKK21zZ2lkICJGaWxlIHByZXNlcnZlZCIKK21zZ3N0ciAi89fP0C3GwcrMIM/Czs/XzKPOIgorCisjOiBtZW1saW5lLmM6MTgxOQorbXNnaWQgIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIKK21zZ3N0ciAiRTMxNDog7sXVxMHezsHRINDP0NnUy8Egz8LOz9fMxc7J0SDT18/QLcbByszBIgorCisjOiBtZW1saW5lLmM6MTg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE1OiBtbF9nZXQ6IGludmFsaWQgbG51bTogJWxkIgorbXNnc3RyICJFMzE1OiBtbF9nZXQ6IM7F0NLB18nM2M7PxSDazsHexc7JxSBsbnVtOiAlbGQiCisKKyM6IG1lbWxpbmUuYzoxOTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTY6IG1sX2dldDogY2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMTY6IG1sX2dldDogzsXXz9rNz9bOzyDOwcrUySDT1NLPy9UgJWxkIgorCisjOiBtZW1saW5lLmM6MjMwNgorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAizsXQ0sHXyczYzs/FINrOwd7FzsnFINXLwdrB1MXM0SDCzM/LwSAzIgorCisjOiBtZW1saW5lLmM6MjM4NgorbXNnaWQgInN0YWNrX2lkeCBzaG91bGQgYmUgMCIKK21zZ3N0ciAi2s7B3sXOycUgc3RhY2tfaWR4IMTPzNbOzyDC2dTYINLB187PIDAiCisKKyM6IG1lbWxpbmUuYzoyNDQ4Cittc2dpZCAiRTMxODogVXBkYXRlZCB0b28gbWFueSBibG9ja3M/IgorbXNnc3RyICJFMzE4OiDvws7P18zFzs8g08zJ28vPzSDNzs/HzyDCzM/Lz9c/IgorCisjOiBtZW1saW5lLmM6MjYzMAorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgNCIKK21zZ3N0ciAiRTMxNzogzsXQ0sHXyczYzs/FINrOwd7FzsnFINXLwdrB1MXM0SDCzM/LwSA0IgorCisjOiBtZW1saW5lLmM6MjY1NworbXNnaWQgImRlbGV0ZWQgYmxvY2sgMT8iCittc2dzdHIgItXEwcyjziDCzM/LIDE/IgorCisjOiBtZW1saW5lLmM6Mjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzIwOiBDYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMyMDog89TSz8vBICVsZCDOxSDPws7B0tXWxc7BIgorCisjOiBtZW1saW5lLmM6MzEwMAorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmciCittc2dzdHIgIkUzMTc6IM7F0NLB18nM2M7PxSDazsHexc7JxSDVy8HawdTFzNEgwszPy8EiCisKKyM6IG1lbWxpbmUuYzozMTE2Cittc2dpZCAicGVfbGluZV9jb3VudCBpcyB6ZXJvIgorbXNnc3RyICLazsHexc7JxSBwZV9saW5lX2NvdW50INLB187PIM7VzMAiCisKKyM6IG1lbWxpbmUuYzozMTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjI6IGxpbmUgbnVtYmVyIG91dCBvZiByYW5nZTogJWxkIHBhc3QgdGhlIGVuZCIKK21zZ3N0ciAiRTMyMjogzs/NxdIg09TSz8vJINrBINDSxcTFzMHNySDEycHQwdrPzsE6ICVsZCIKKworIzogbWVtbGluZS5jOjMxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMzogbGluZSBjb3VudCB3cm9uZyBpbiBibG9jayAlbGQiCittc2dzdHIgIkUzMjM6IM7F0NLB18nM2M7PxSDazsHexc7JxSDT3qPU3snLwSDT1NLPyyDXIMLMz8vFICVsZCIKKworIzogbWVtbGluZS5jOjMxOTgKK21zZ2lkICJTdGFjayBzaXplIGluY3JlYXNlcyIKK21zZ3N0ciAi8sHazcXSINPUxcvBINXXxczJ3sXOIgorCisjOiBtZW1saW5lLmM6MzI0NAorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMiIKK21zZ3N0ciAiRTMxNzogzsXQ0sHXyczYzs/FINrOwd7FzsnFINXLwdrB1MXM0SDCzM/LwSAyIgorCisjOiBtZW1saW5lLmM6MzY3NAorbXNnaWQgIkUzMjU6IEFUVEVOVElPTiIKK21zZ3N0ciAiRTMyNTog9+7p7eHu6eUiCisKKyM6IG1lbWxpbmUuYzozNjc1Cittc2dpZCAiIgorIlxuIgorIkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIgorbXNnc3RyICIiCisiXG4iCisi78LOwdLV1sXOINPXz9AtxsHKzCDTIMnNxc7FzSBcIiIKKworIzogbWVtbGluZS5jOjM2NzkKK21zZ2lkICJXaGlsZSBvcGVuaW5nIGZpbGUgXCIiCittc2dzdHIgIvDSySDP1MvS2dTJySDGwcrMwTogXCIiCisKKyM6IG1lbWxpbmUuYzozNjg4Cittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAg4s/MxcUg8/fl9unqLCDexc0g09fP0C3GwcrMIVxuIgorCisjLiBTb21lIG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSBsb25nIHRvIGFsbG93IHRyYW5zbGF0aW9uIHRvCisjLiAqIG90aGVyIGxhbmd1YWdlcy4KKyM6IG1lbWxpbmUuYzozNjkyCittc2dpZCAiIgorIlxuIgorIigxKSBBbm90aGVyIHByb2dyYW0gbWF5IGJlIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS5cbiIKKyIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgYmUgY2FyZWZ1bCBub3QgdG8gZW5kIHVwIHdpdGggdHdvXG4iCisiICAgIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZmlsZSB3aGVuIG1ha2luZyBjaGFuZ2VzLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDEpIPfP2s3P1s7PLCDSxcTBy9TJ0s/Xwc7JxSDGwcrMwSDX2dDPzM7RxdTT0SDXIMTS1cfPyiDQ0s/H0sHNzcUuXG4iCisiICAgIOXTzMkg3NTPINTByywg1M8gwtXE2NTFINfOyc3B1MXM2M7ZINDSySDXzsXTxc7JySDJ2s3FzsXOycosXG4iCisiICAgIN7Uz8LZINUg18HTIM7FINDP0dfJzM/T2CDE18Eg0sHaztnIINfB0snBztTBIM/Ezs/HzyDJINTPx88g1sUgxsHKzMEuXG4iCisKKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiICAgIFF1aXQsIG9yIGNvbnRpbnVlIHdpdGggY2F1dGlvbi5cbiIKK21zZ3N0ciAiICAgIPrB18XS28nUxSDSwcLP1NUgyczJINDSz8TPzNbBytTFINMgz9PUz9LP1s7P09TYwC5cbiIKKworIzogbWVtbGluZS5jOjM2OTQKK21zZ2lkICIiCisiXG4iCisiKDIpIEFuIGVkaXQgc2Vzc2lvbiBmb3IgdGhpcyBmaWxlIGNyYXNoZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMikg8NLFxNnE1d3JyiDTxcHO0yDSxcTBy9TJ0s/Xwc7J0SDc1M/HzyDGwcrMwSDawdfF0tujziDB18HSycrOzy5cbiIKKworIzogbWVtbGluZS5jOjM2OTUKK21zZ2lkICIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdXNlIFwiOnJlY292ZXJcIiBvciBcInZpbSAtciAiCittc2dzdHIgIiAgICD3INzUz80g08zV3sHFLCDJ09DPzNja1crUxSDLz83BzsTVIFwiOnJlY292ZXJcIiDJzMkgXCJ2aW0gLXIgIgorCisjOiBtZW1saW5lLmM6MzY5NworbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byByZWNvdmVyIHRoZSBjaGFuZ2VzIChzZWUgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIMTM0SDXz9PT1MHOz9fMxc7J0SDJ2s3FzsXOycogKNPNLiBcIjpoZWxwINfP09PUwc7P18zFzsnFXCIpLlxuIgorCisjOiBtZW1saW5lLmM6MzY5OAorbXNnaWQgIiAgICBJZiB5b3UgZGlkIHRoaXMgYWxyZWFkeSwgZGVsZXRlIHRoZSBzd2FwIGZpbGUgXCIiCittc2dzdHIgIiAgICDl08zJINfZINXWxSDX2dDPzM7RzMkg3NTVIM/QxdLBw8nALCDVxMHMydTFINPXz9AtxsHKzCBcIiIKKworIzogbWVtbGluZS5jOjM3MDAKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAg3tTPwtkgydrCxdbB1Ngg0M/R18zFzsnRINzUz8fPINPPz8Ldxc7J0SDXIMLVxNXdxc0uXG4iCisKKyM6IG1lbWxpbmUuYzozNzE0IG1lbWxpbmUuYzozNzE4Cittc2dpZCAiU3dhcCBmaWxlIFwiIgorbXNnc3RyICLz18/QLcbByswgXCIiCisKKyM6IG1lbWxpbmUuYzozNzE1IG1lbWxpbmUuYzozNzIxCittc2dpZCAiXCIgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICJcIiDV1sUg09XdxdPU19XF1CEiCisKKyM6IG1lbWxpbmUuYzozNzI0Cittc2dpZCAiVklNIC0gQVRURU5USU9OIgorbXNnc3RyICJWSU0gLSD37unt4e7p5SIKKworIzogbWVtbGluZS5jOjM3MjYKK21zZ2lkICJTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICLz18/QLcbByswg1dbFINPV3cXT1NfVxdQhIgorCisjOiBtZW1saW5lLmM6MzczMAorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0XG4iCisiJkFib3J0IgorbXNnc3RyICIiCisiJk8g79TL0tnU2CDEzNEg3tTFzsnRXG4iCisiJkUg8sXEwcvUydLP18HU2FxuIgorIiZSIPfP09PUwc7P18nU2FxuIgorIiZRIPfZyM/EXG4iCisiJkEg8NLF0tfB1NgiCisKKyM6IG1lbWxpbmUuYzozNzMyCittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImQWJvcnRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisiJk8g79TL0tnU2CDEzNEg3tTFzsnRXG4iCisiJkUg8sXEwcvUydLP18HU2FxuIgorIiZSIPfP09PUwc7P18nU2FxuIgorIiZRIPfZyM/EXG4iCisiJkEg8NLF0tfB1NhcbiIKKyImRCD1xMHMydTYIgorCisjOiBtZW1saW5lLmM6Mzc4OQorbXNnaWQgIkUzMjY6IFRvbyBtYW55IHN3YXAgZmlsZXMgZm91bmQiCittc2dzdHIgIkUzMjY6IO/CzsHS1dbFzs8g08zJ28vPzSDNzs/HzyDT18/QLcbByszP1yIKKworIzogbWVudS5jOjY0Cittc2dpZCAiRTMyNzogUGFydCBvZiBtZW51LWl0ZW0gcGF0aCBpcyBub3Qgc3ViLW1lbnUiCittc2dzdHIgIkUzMjc6IOvPzdDPzsXO1CDQ1dTJIMsg3MzFzcXO1NUgzcXOwCDOxSDR18zRxdTT0SDQz8TNxc7AIgorCisjOiBtZW51LmM6NjUKK21zZ2lkICJFMzI4OiBNZW51IG9ubHkgZXhpc3RzIGluIGFub3RoZXIgbW9kZSIKK21zZ3N0ciAiRTMyODog7cXOwCDXINzUz80g0sXWyc3FIM7FINPV3cXT1NfVxdQiCisKKyM6IG1lbnUuYzo2NgorbXNnaWQgIkUzMjk6IE5vIG1lbnUgb2YgdGhhdCBuYW1lIgorbXNnc3RyICJFMzI5OiDuxdQgzcXOwCDTINTBy8nNIMnNxc7FzSIKKworIzogbWVudS5jOjUyNQorbXNnaWQgIkUzMzA6IE1lbnUgcGF0aCBtdXN0IG5vdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzA6IPDV1NggyyDNxc7AIM7FIMTPzNbFziDXxdPUySDLINDPxM3FzsAiCisKKyM6IG1lbnUuYzo1NjQKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTog/MzFzcXO1NkgzcXOwCDOxczY2tEgxM/CwdfM0dTYIM7F0M/T0sXE09TXxc7OzyDXINDPzM/Ty9UgzcXOwCIKKworIzogbWVudS5jOjU3MAorbXNnaWQgIkUzMzI6IFNlcGFyYXRvciBjYW5ub3QgYmUgcGFydCBvZiBhIG1lbnUgcGF0aCIKK21zZ3N0ciAiRTMzMjog8sHaxMXMydTFzMkgzsUgzc/H1dQgwtnU2CDLz83Qz87FztTPzSDQ1dTJIMsgzcXOwCIKKworIy4gTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtZW51LmM6MTA5NworbXNnaWQgIiIKKyJcbiIKKyItLS0gTWVudXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIO3FzsAgLS0tIgorCisjOiBtZW51LmM6MjAxOQorbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAi79TP0tfB1Ngg3NTPIM3FzsAiCisKKyM6IG1lbnUuYzoyMDg0Cittc2dpZCAiRTMzMzogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIG1lbnUgaXRlbSIKK21zZ3N0ciAiRTMzMzog8NXU2CDLIM3FzsAgxM/M1sXOINfF09TJIMsg3MzFzcXO1NUgzcXOwCIKKworIzogbWVudS5jOjIxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNDogTWVudSBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMzM0OiDtxc7AIM7FIM7BysTFzs86ICVzIgorCisjOiBtZW51LmM6MjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzM1OiBNZW51IG5vdCBkZWZpbmVkIGZvciAlcyBtb2RlIgorbXNnc3RyICJFMzM1OiDtxc7AIM7FIM/Q0sXExczFzs8gxMzRINLF1snNwSAlcyIKKworIzogbWVudS5jOjIyMTEKK21zZ2lkICJFMzM2OiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzY6IPDV1NggyyDNxc7AIMTPzNbFziDXxdPUySDLINDPxM3FzsAiCisKKyM6IG1lbnUuYzoyMjMyCittc2dpZCAiRTMzNzogTWVudSBub3QgZm91bmQgLSBjaGVjayBtZW51IG5hbWVzIgorbXNnc3RyICJFMzM3OiDtxc7AIM7FIM7BysTFzs8gLS0g0NLP18XS2NTFIMnNxc7BIM3FzsAiCisKKyM6IG1lc3NhZ2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZyAlczoiCittc2dzdHIgIu/CzsHS1dbFzsEgz9vJwsvBINDSySDPwtLBws/Uy8UgJXM6IgorCisjOiBtZXNzYWdlLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJTRsZDoiCittc2dzdHIgItPU0s/LwSAlNGxkOiIKKworIzogbWVzc2FnZS5jOjY0NworbXNnaWQgIltzdHJpbmcgdG9vIGxvbmddIgorbXNnc3RyICJb08zJ28vPzSDEzMnOzsHRINPU0s/LwV0iCisKKyM6IG1lc3NhZ2UuYzo3OTcKK21zZ2lkICJNZXNzYWdlcyBtYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiIKK21zZ3N0ciAiIgorIvDF0sXXz8Qg08/Pwt3FzsnKIM7BINLV09PLycog0drZyzog98HTyczJyiDywcfP2snOIDx2cnJAdXNlcnMuc291cmNlZm9yZ2UuIgorIm5ldD4iCisKKyM6IG1lc3NhZ2UuYzoxMDI1Cittc2dpZCAiSW50ZXJydXB0OiAiCittc2dzdHIgIvDSxdLZ18HOycU6ICIKKworIzogbWVzc2FnZS5jOjEwMjgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIuTM0SDQ0s/Ez8zWxc7J0SDOwdbNydTFIEVOVEVSIgorCisjOiBtZXNzYWdlLmM6MTAzMAorbXNnaWQgIkhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUiCittc2dzdHIgIuTM0SDQ0s/Ez8zWxc7J0SDOwdbNydTFIEVOVEVSIMnMySDX18XEydTFIMvPzcHOxNUiCisKKyM6IG1lc3NhZ2UuYzoyMzUxCittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0g8NLPxM/M1sXOycUg08zFxNXF1CAtLSIKKworIzogbWVzc2FnZS5jOjIzNTQKK21zZ2lkICIgKFJFVC9CUzogbGluZSwgU1BBQ0UvYjogcGFnZSwgZC91OiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVC9CUzog09TSz8vBLCBTUEFDRS9iOiDT1NLBzsnDwSwgZC91OiDQz8zT1NLBzsnD2SwgcTog19nIz8QpIgorCisjOiBtZXNzYWdlLmM6MjM1NQorbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQ6INPU0s/LwSwgU1BBQ0U6INPU0sHOycPBLCBkOiDQz8zT1NLBzsnD2SwgcTog19nIz8QpIgorCisjOiBtZXNzYWdlLmM6Mjk3NiBtZXNzYWdlLmM6Mjk5MQorbXNnaWQgIlF1ZXN0aW9uIgorbXNnc3RyICL3z9DSz9MiCisKKyM6IG1lc3NhZ2UuYzoyOTc4Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm8iCittc2dzdHIgIiIKKyIm5MFcbiIKKyIm7sXUIgorCisjOiBtZXNzYWdlLmM6MzAxMQorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIibkwVxuIgorIibuxdRcbiIKKyLzz8jSwc7J1NggJtfTxVxuIgorIibwz9TF0tHU2CDX08VcbiIKKyLvJtTNxc7BIgorCisjOiBtZXNzYWdlLmM6MzA1MgorbXNnaWQgIlNhdmUgRmlsZSBkaWFsb2ciCittc2dzdHIgIvPPyNLBzsXOycUgxsHKzMEiCisKKyM6IG1lc3NhZ2UuYzozMDU0Cittc2dpZCAiT3BlbiBGaWxlIGRpYWxvZyIKK21zZ3N0ciAi79TL0tnUycUgxsHKzMEiCisKKyMuIFRPRE86IG5vbi1HVUkgZmlsZSBzZWxlY3RvciBoZXJlCisjOiBtZXNzYWdlLmM6MzEyNQorbXNnaWQgIkUzMzg6IFNvcnJ5LCBubyBmaWxlIGJyb3dzZXIgaW4gY29uc29sZSBtb2RlIgorbXNnc3RyICIiCisiRTMzODog6drXyc7J1MUsIM7PINcgy8/O08/M2M7PzSDSxdbJzcUgzsXUINDSz9fPxM7Jy8Eg0M8gxsHKzM/Xz8og08nT1MXNxSIKKworIzogbWlzYzEuYzoyNzczCittc2dpZCAiVzEwOiBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiCittc2dzdHIgIlcxMDog8NLFxNXQ0sXWxMXOycU6IOnazcXOxc7JxSDGwcrMwSDTINDSwdfBzckg1M/M2MvPIMTM0SDe1MXOydEiCisKKyM6IG1pc2MxLmM6MzAyMQorbXNnaWQgIjEgbW9yZSBsaW5lIgorbXNnc3RyICLkz8LB18zFzsEgz8TOwSDT1NLPy8EiCisKKyM6IG1pc2MxLmM6MzAyMworbXNnaWQgIjEgbGluZSBsZXNzIgorbXNnc3RyICL1xMHMxc7BIM/EzsEg09TSz8vBIgorCisjOiBtaXNjMS5jOjMwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIG1vcmUgbGluZXMiCittc2dzdHIgIuTPwsHXzMXOzyDT1NLPyzogJWxkIgorCisjOiBtaXNjMS5jOjMwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGZld2VyIGxpbmVzIgorbXNnc3RyICL1xMHMxc7PINPU0s/LOiAlbGQiCisKKyM6IG1pc2MxLmM6MzAzMworbXNnaWQgIiAoSW50ZXJydXB0ZWQpIgorbXNnc3RyICIgKPDSxdLXwc7PKSIKKworIzogbWlzYzEuYzo3NTg4Cittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTog08/I0sHO0cDU09EgxsHKzNkuLi5cbiIKKworIy4gY2xvc2UgYWxsIG1lbWZpbGVzLCB3aXRob3V0IGRlbGV0aW5nCisjOiBtaXNjMS5jOjc1OTgKK21zZ2lkICJWaW06IEZpbmlzaGVkLlxuIgorbXNnc3RyICJWaW06IOfP1M/Xzy5cbiIKKworIzogbWlzYzIuYzo2OTUgbWlzYzIuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6ICIKK21zZ3N0ciAi7/vp4uvhOiAiCisKKyM6IG1pc2MyLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJbYnl0ZXNdIHRvdGFsIGFsbG9jLWZyZWVkICVsdS0lbHUsIGluIHVzZSAlbHUsIHBlYWsgdXNlICVsdVxuIgorbXNnc3RyICIiCisiXG4iCisiW8LBytRdINfTxcfPINfZxMXMLi3P09fPwi4gJWx1LSVsdSwgydPQz8zY2i4gJWx1LCDNwcvTLiDJ09DPzNjaLiAlbHVcbiIKKworIzogbWlzYzIuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW9fZ2s/X2V0gcmUvbWFsbG9jKCkg19PFx88gJWx1LCBmcmVlKCkg19PFx88gJWx1XG4iCisiXG4iCisKKyM6IG1pc2MyLmM6NzcyCittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDog89TSz8vBINPUwc7P18nU09Eg08zJ28vPzSDEzMnOzs/KIgorCisjOiBtaXNjMi5jOjgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQxOiBJbnRlcm5hbCBlcnJvcjogbGFsbG9jKCVsZCwgKSIKK21zZ3N0ciAiRTM0MTog987V1NLFzs7R0SDP28nCy8E6IGxhbGxvYyglbGQsICkiCisKKyM6IG1pc2MyLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDI6IE91dCBvZiBtZW1vcnkhICAoYWxsb2NhdGluZyAlbHUgYnl0ZXMpIgorbXNnc3RyICJFMzQyOiDuxSDI18HUwcXUINDBzdHUySEgKNfZxMXM0cXU09EgJWx1IMLBytQpIgorCisjOiBtaXNjMi5jOjI1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FsbGluZyBzaGVsbCB0byBleGVjdXRlOiBcIiVzXCIiCittc2dzdHIgIvfZ2s/XIM/Cz8zP3svJIMTM0SDJ09DPzM7FzsnROiBcIiVzXCIiCisKKyM6IG1pc2MyLmM6MjgxNgorbXNnaWQgIkU1NDU6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1NDU6IPDSz9DV3cXOzyDE18/F1M/eycUiCisKKyM6IG1pc2MyLmM6MjgxOCBtaXNjMi5jOjI4NDUKK21zZ2lkICJFNTQ2OiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkU1NDY6IO7FxM/Q1dPUyc3ZyiDSxdbJzSIKKworIzogbWlzYzIuYzoyODg0Cittc2dpZCAiRTU0NzogSWxsZWdhbCBtb3VzZXNoYXBlIgorbXNnc3RyICJFNTQ3OiDuxcTP0NXT1MnNwdEgxs/SzcEgy9XS08/SwSIKKworIzogbWlzYzIuYzoyOTI0Cittc2dpZCAiRTU0ODogZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgIkU1NDg6INTSxcLVxdTT0SDX18XT1Mkgw8nG0tUiCisKKyM6IG1pc2MyLmM6MjkyOQorbXNnaWQgIkU1NDk6IElsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAiRTU0OTog7sXEz9DV09TJzc/FINrOwd7FzsnFINDSz8PFztTP1yIKKworIzogbWlzYzIuYzozMjM5Cittc2dpZCAiRW50ZXIgZW5jcnlwdGlvbiBrZXk6ICIKK21zZ3N0ciAi99fFxMnUxSDQwdLPzNggxMzRINvJxtLP18HOydE6ICIKKworIzogbWlzYzIuYzozMjQwCittc2dpZCAiRW50ZXIgc2FtZSBrZXkgYWdhaW46ICIKK21zZ3N0ciAiICAgICAgICDwz9fUz9LJ1MUg19fPxCDQwdLPzNE6IgorCisjOiBtaXNjMi5jOjMyNTAKK21zZ2lkICJLZXlzIGRvbid0IG1hdGNoISIKK21zZ3N0ciAi99fFxKPOztnFINDB0s/MySDOxSDTz9fQwcTBwNQhIgorCisjOiBtaXNjMi5jOjM3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUzNDM6IEludmFsaWQgcGF0aDogJyoqW251bWJlcl0nIG11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCBvciBiZSAiCisiZm9sbG93ZWQgYnkgJyVzJy4iCittc2dzdHIgIiIKKyJFMzQzOiDuxdDSwdfJzNjOzyDawcTBziDQ1dTYOiAnKipb3snTzM9dJyDEz8zWzs8gwtnU2CDMycLPINcgy8/Ow8Ug0NXUySwgIgorIszJws8g2sEgzsnNIMTPzNbOzyDTzMXEz9fB1NggJyVzJyIKKworIzogbWlzYzIuYzo1MDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IOvB1MHMz8cgXCIlc1wiIM7FIM7BysTFziDXINDV1MkgxMzRINPNxc7ZIMvB1MHMz8fBIgorCisjOiBtaXNjMi5jOjUwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NTogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFMzQ1OiDmwcrMIFwiJXNcIiDXIMna18XT1M7ZyCDLwdTBzM/HwcggzsUgzsHKxMXOIgorCisjOiBtaXNjMi5jOjUwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NjogTm8gbW9yZSBkaXJlY3RvcnkgXCIlc1wiIGZvdW5kIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0Njog9yDQ1dTJINPNxc7ZIMvB1MHMz8fBIMLPzNjbxSDOxdQgy8HUwczPx8/XIFwiJXNcIiIKKworIzogbWlzYzIuYzo1MDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDc6IE5vIG1vcmUgZmlsZSBcIiVzXCIgZm91bmQgaW4gcGF0aCIKK21zZ3N0ciAiRTM0Nzog9yDJ2tfF09TO2cggy8HUwczPx8HIIMLPzNjbxSDOxdQgxsHKzM/XIFwiJXNcIiIKKworIzogbWlzYzIuYzo1MzI0Cittc2dpZCAiRTU1MDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU1MDog8NLP0NXdxc7PIMTXz8XUz97JxSIKKworIzogbWlzYzIuYzo1MzM2Cittc2dpZCAiRTU1MTogSWxsZWdhbCBjb21wb25lbnQiCittc2dzdHIgIkU1NTE6IO7FxM/Q1dPUyc3ZyiDLz83Qz87FztQiCisKKyM6IG1pc2MyLmM6NTM0NAorbXNnaWQgIkU1NTI6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTUyOiD00sXC1cXU09Eg1cvB2sHU2CDDycbS1SIKKworIy4gR2V0IGhlcmUgd2hlbiB0aGUgc2VydmVyIGNhbid0IGJlIGZvdW5kLgorIzogbmV0YmVhbnMuYzozOTYKK21zZ2lkICJDYW5ub3QgY29ubmVjdCB0byBOZXRiZWFucyAjMiIKK21zZ3N0ciAi7sXXz9rNz9bOzyDTz8XEyc7J1NjT0SDTIE5ldGJlYW5zICMyIgorCisjOiBuZXRiZWFucy5jOjQwNAorbXNnaWQgIkNhbm5vdCBjb25uZWN0IHRvIE5ldGJlYW5zIgorbXNnc3RyICLuxdfP2s3P1s7PINPPxcTJzsnU2NPRINMgTmV0QmVhbnMiCisKKyM6IG5ldGJlYW5zLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2Njg6IFdyb25nIGFjY2VzcyBtb2RlIGZvciBOZXRCZWFucyBjb25uZWN0aW9uIGluZm8gZmlsZTogXCIlc1wiIgorbXNnc3RyICIiCisiRTY2ODog7sXQ0sHXyczYztnKINLF1snNIMTP09TV0MEgyyDJzsbP0s3Bw8nJIM8g08/FxMnOxc7JySDTIE5ldEJlYW5zOiBcIiVzXCIiCisKKyM6IG5ldGJlYW5zLmM6NzQ5Cittc2dpZCAicmVhZCBmcm9tIE5ldGJlYW5zIHNvY2tldCIKK21zZ3N0ciAi3tTFzsnFIMnaIMfOxdrEwSBOZXRCZWFucyIKKworIzogbmV0YmVhbnMuYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NTg6IE5ldEJlYW5zIGNvbm5lY3Rpb24gbG9zdCBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTY1ODog8M/UxdLRzs8g08/FxMnOxc7JxSDTIE5ldEJlYW5zIMTM0SDC1cbF0sEgJWxkIgorCisjOiBub3JtYWwuYzoyOTgwCittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAi8NLFxNXQ0sXWxMXOycU6INTF0s3JzsHMIM7FIM3P1sXUINfZ0M/MztHU2CDQz8TT18XUy9UiCisKKyM6IG5vcm1hbC5jOjMyNzYKK21zZ2lkICJFMzQ4OiBObyBzdHJpbmcgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ4OiDuxdQg09TSz8vJINcg0M/aycPJySDL1dLTz9LBIgorCisjOiBub3JtYWwuYzozMjc4Cittc2dpZCAiRTM0OTogTm8gaWRlbnRpZmllciB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDk6IO7F1CDJzcXOySDXINDP2snDyckgy9XS08/SwSIKKworIzogbm9ybWFsLmM6NDUxOQorbXNnaWQgIkUzNTI6IENhbm5vdCBlcmFzZSBmb2xkcyB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICIiCisiRTM1Mjog7sXXz9rNz9bOzyDT1MXSxdTYINPLzMHEy8kg0yDUxcvV3cnNINrOwd7FzsnFzSDP0MPJySAnZm9sZG1ldGhvZCciCisKKyM6IG5vcm1hbC5jOjY3NDAKK21zZ2lkICJFNjY0OiBjaGFuZ2VsaXN0IGlzIGVtcHR5IgorbXNnc3RyICJFNjY0OiDT0MnTz8sgydrNxc7FzsnKINDV09TPyiIKKworIzogbm9ybWFsLmM6Njc0MgorbXNnaWQgIkU2NjI6IEF0IHN0YXJ0IG9mIGNoYW5nZWxpc3QiCittc2dzdHIgIkU2NjI6IPcgzsHewczFINPQydPLwSDJ2s3FzsXOycoiCisKKyM6IG5vcm1hbC5jOjY3NDQKK21zZ2lkICJFNjYzOiBBdCBlbmQgb2YgY2hhbmdlbGlzdCIKK21zZ3N0ciAiRTY2Mjog9yDLz87DxSDT0MnTy8EgydrNxc7FzsnKIgorCisjOiBub3JtYWwuYzo4MDA1Cittc2dpZCAiVHlwZSAgOnF1aXQ8RW50ZXI+ICB0byBleGl0IFZpbSIKK21zZ3N0ciAi99fFxMnUxSA6cXVpdDxFbnRlcj4gIMTM0SDX2cjPxMEgydogVmltIgorCisjOiBvcHMuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgMSB0aW1lIgorbXNnc3RyICLp2s3FzsXO2SDP1NPU1dDZINcgMSDT1NLPy8UgKCVzIDEg0sHaKSIKKworIzogb3BzLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICLp2s3FzsXO2SDP1NPU1dDZINcgMSDT1NLPy8UgKCVzICVkINLB2ikiCisKKyM6IG9wcy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAxIHRpbWUiCittc2dzdHIgIunazcXOxc7ZIM/U09TV0NksICVsZCDT1NLPyyAoJXMgMSDSwdopIgorCisjOiBvcHMuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgJWQgdGltZXMiCittc2dzdHIgIunazcXOxc7ZIM/U09TV0NksICVsZCDT1NLPyyAoJXMgJWQg0sHaKSIKKworIzogb3BzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB0byBpbmRlbnQuLi4gIgorbXNnc3RyICLp2s3FztHA1NPRIM/U09TV0Nkg09TSz8vByCAoJWxkKS4uLiIKKworIzogb3BzLmM6NzEyCittc2dpZCAiMSBsaW5lIGluZGVudGVkICIKK21zZ3N0ciAi6drNxc6jziDP1NPU1dAg1yDPxM7PyiDT1NLPy8UgIgorCisjOiBvcHMuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAi6drNxc7Fztkgz9TT1NXQ2SDXINPU0s/LwcggKCVsZCkgIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogb3BzLmM6MTY3NQorbXNnaWQgImNhbm5vdCB5YW5rOyBkZWxldGUgYW55d2F5IgorbXNnc3RyICLTy8/QydLP18HU2CDOxSDVxMHMz9PYLCDVxMHMxc7JxSDX2dDPzM7Fzs8iCisKKyM6IG9wcy5jOjIyNjEKK21zZ2lkICIxIGxpbmUgY2hhbmdlZCIKK21zZ3N0ciAiydrNxc7FzsEgMSDT1NLPy8EiCisKKyM6IG9wcy5jOjIyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGNoYW5nZWQiCittc2dzdHIgIsnazcXOxc7PINPU0s/LOiAlbGQiCisKKyM6IG9wcy5jOjI2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnJlZWluZyAlbGQgbGluZXMiCittc2dzdHIgIs/eyd3Fzs8g09TSz8s6ICVsZCIKKworIzogb3BzLmM6MjkyOAorbXNnaWQgIjEgbGluZSB5YW5rZWQiCittc2dzdHIgItPLz9DJ0s/Xwc7BIM/EzsEg09TSz8vBIgorCisjOiBvcHMuYzoyOTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgItPLz9DJ0s/Xwc7PINPU0s/LOiAlbGQiCisKKyM6IG9wcy5jOjMyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1MzogTm90aGluZyBpbiByZWdpc3RlciAlcyIKK21zZ3N0ciAiRTM1Mzog9yDSxcfJ09TSxSAlcyDOyd7Fx88gzsXUIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG9wcy5jOjM3NjYKK21zZ2lkICIiCisiXG4iCisiLS0tIFJlZ2lzdGVycyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g8sXHydPU0tkgLS0tIgorCisjOiBvcHMuYzo1MDc1Cittc2dpZCAiSWxsZWdhbCByZWdpc3RlciBuYW1lIgorbXNnc3RyICLuxcTP0NXT1MnNz8Ugyc3RINLFx8nT1NLBIgorCisjOiBvcHMuYzo1MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjIFJlZ2lzdGVyczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMg8sXHydPU0tk6XG4iCisKKyM6IG9wcy5jOjUyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3NDogVW5rbm93biByZWdpc3RlciB0eXBlICVkIgorbXNnc3RyICJFNTc0OiDuxcna18XT1M7ZyiDUydAg0sXHydPU0sEgJWQiCisKKyM6IG9wcy5jOjU2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NDogSW52YWxpZCByZWdpc3RlciBuYW1lOiAnJXMnIgorbXNnc3RyICJFMzU0OiDuxcTP0NXT1MnNz8Ugyc3RINLFx8nT1NLBOiAnJXMnIgorCisjOiBvcHMuYzo2MDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBDb2xzOyAiCittc2dzdHIgIuvPzM/Oz8s6ICVsZDsgIgorCisjOiBvcHMuYzo2MDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlbGVjdGVkICVzJWxkIG9mICVsZCBMaW5lczsgJWxkIG9mICVsZCBXb3JkczsgJWxkIG9mICVsZCBCeXRlcyIKK21zZ3N0ciAi99nExczFzs8gJXMlbGQgydogJWxkINPU0s/LOyAlbGQgydogJWxkINPMz9c7ICVsZCDJ2iAlbGQgwsHK1CIKKworIzogb3BzLmM6NjA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiCittc2dzdHIgIuvPzC4gJXMgydogJXM7ICDT1NIuICVsZCDJ2iAlbGQ7INPMz9fPICVsZCDJ2iAlbGQ7IMLBytQgJWxkIMnaICVsZCIKKworIzogb3BzLmM6NjA5MgorIywgYy1mb3JtYXQKK21zZ2lkICIoKyVsZCBmb3IgQk9NKSIKK21zZ3N0ciAiKCslbGQg0yDV3qPUz80gQk9NKSIKKworIzogb3B0aW9uLmM6MTY0MworbXNnaWQgIiU8JWYlaCVtJT1QYWdlICVOIgorbXNnc3RyICIlPCVmJWglbSU989TSLiAlTiIKKworIzogb3B0aW9uLmM6MjA5MgorbXNnaWQgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIKK21zZ3N0ciAi4szBx8/EwdLJzSDawSDJ09DPzNjaz9fBzsnFIFZpbSIKKworIzogb3B0aW9uLmM6MzQxOSBvcHRpb24uYzozNTM1Cittc2dpZCAiRTUxODogVW5rbm93biBvcHRpb24iCittc2dzdHIgIkU1MTg6IO7FydrXxdPUzsHRIM/Qw8nRIgorCisjOiBvcHRpb24uYzozNDMyCittc2dpZCAiRTUxOTogT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkU1MTk6IO/Qw8nRIM7FINDPxMTF0tbJ18HF1NPRIgorCisjOiBvcHRpb24uYzozNDU3Cittc2dpZCAiRTUyMDogTm90IGFsbG93ZWQgaW4gYSBtb2RlbGluZSIKK21zZ3N0ciAiRTUyMDog7sUgxM/Q1dPLwcXU09Eg1yDSxdbJzc7PyiDT1NLPy8UiCisKKyM6IG9wdGlvbi5jOjM1MjIKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx09yDQz9PMxcTOycog0sHaIM/Qw8nRIMnazcXOxc7BINcgIgorCisjOiBvcHRpb24uYzozNjYxCittc2dpZCAiRTUyMTogTnVtYmVyIHJlcXVpcmVkIGFmdGVyID0iCittc2dzdHIgIkU1MjE6IPDP08zFID0g1NLFwtXF1NPRINXLwdrB1Ngg3snTzM8iCisKKyM6IG9wdGlvbi5jOjM5ODkgb3B0aW9uLmM6NDYxOQorbXNnaWQgIkU1MjI6IE5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNTIyOiDuxSDPws7B0tXWxc7PINcgdGVybWNhcCIKKworIzogb3B0aW9uLmM6NDA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM5OiBJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IgorbXNnc3RyICJFNTM5OiDuxcTP0NXT1MnN2cog08nN18/MIDwlcz4iCisKKyM6IG9wdGlvbi5jOjQ2MTEKK21zZ2lkICJFNTI5OiBDYW5ub3Qgc2V0ICd0ZXJtJyB0byBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1Mjk6IPrOwd7FzsnFIM/Qw8nJICd0ZXJtJyDOxSDNz9bF1CDC2dTYINDV09TPyiDT1NLPy8/KIgorCisjOiBvcHRpb24uYzo0NjE0Cittc2dpZCAiRTUzMDogQ2Fubm90IGNoYW5nZSB0ZXJtIGluIEdVSSIKK21zZ3N0ciAiRTUzMDog9yDH0sHGyd7F08vPzSDJztTF0sbFytPFIMnazcXO0dTYINTF0s3JzsHMIM7F18/azc/Wzs8iCisKKyM6IG9wdGlvbi5jOjQ2MTYKK21zZ2lkICJFNTMxOiBVc2UgXCI6Z3VpXCIgdG8gc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiRTUzMTog5MzRINrB0NXTy8Egx9LBxsnexdPLz8fPIMnO1MXSxsXK08EgydPQz8zY2tXK1MUgXCI6Z3VpXCIiCisKKyM6IG9wdGlvbi5jOjQ2NDUKK21zZ2lkICJFNTg5OiAnYmFja3VwZXh0JyBhbmQgJ3BhdGNobW9kZScgYXJlIGVxdWFsIgorbXNnc3RyICJFNTg5OiDazsHexc7J0SDP0MPJyiAnYmFja3VwZXh0JyDJICdwYXRjaG1vZGUnINLB187ZIgorCisjOiBvcHRpb24uYzo0ODYwCittc2dpZCAiRTYxNzogQ2Fubm90IGJlIGNoYW5nZWQgaW4gdGhlIEdUSysgMiBHVUkiCittc2dzdHIgIkU2MTc6IO7FIM3P1sXUIMLZ1NggydrNxc7Fzs8g1yDH0sHGyd7F08vPzSDJztTF0sbFytPFIEdUSysgMiIKKworIzogb3B0aW9uLmM6NTAxNgorbXNnaWQgIkU1MjQ6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1MjQ6IPDSz9DV3cXOzyDE18/F1M/eycUiCisKKyM6IG9wdGlvbi5jOjUwMTgKK21zZ2lkICJFNTI1OiBaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIkU1MjU6IPPU0s/LwSDTIM7VzMXXz8ogxMzJzs/KIgorCisjOiBvcHRpb24uYzo1MDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MjY6IE1pc3NpbmcgbnVtYmVyIGFmdGVyIDwlcz4iCittc2dzdHIgIkU1MjY6IPDSz9DV3cXOzyDeydPMzyDQz9PMxSA8JXM+IgorCisjOiBvcHRpb24uYzo1MTAwCittc2dpZCAiRTUyNzogTWlzc2luZyBjb21tYSIKK21zZ3N0ciAiRTUyNzog8NLP0NXdxc7BINrB0NHUwdEiCisKKyM6IG9wdGlvbi5jOjUxMDcKK21zZ2lkICJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJFNTI4OiDuxc/CyM/Eyc3PINXLwdrB1Ngg2s7B3sXOycUgxMzRICciCisKKyM6IG9wdGlvbi5jOjUxNDgKK21zZ2lkICJFNTk1OiBjb250YWlucyB1bnByaW50YWJsZSBvciB3aWRlIGNoYXJhY3RlciIKK21zZ3N0ciAiRTU5NTog08/ExdLWydQgzsXQxd7B1M7ZyiDTyc3Xz8wgyczJINPJzdfPzCDE18/Kzs/KINvJ0snO2SIKKworIzogb3B0aW9uLmM6NTE5NworbXNnaWQgIkU1OTY6IEludmFsaWQgZm9udChzKSIKK21zZ3N0ciAiRTU5Njog7sXQ0sHXyczYztnFINvSycbU2SIKKworIzogb3B0aW9uLmM6NTIwNQorbXNnaWQgIkU1OTc6IGNhbid0IHNlbGVjdCBmb250c2V0IgorbXNnc3RyICJFNTk3OiDOxdfP2s3P1s7PINfZwtLB1Ngg29LJxtTP18/KIM7Bws/SIgorCisjOiBvcHRpb24uYzo1MjA3Cittc2dpZCAiRTU5ODogSW52YWxpZCBmb250c2V0IgorbXNnc3RyICJFNTk4OiDuxdDSwdfJzNjO2cog29LJxtTP18/KIM7Bws/SIgorCisjOiBvcHRpb24uYzo1MjE0Cittc2dpZCAiRTUzMzogY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAiRTUzMzogzsXXz9rNz9bOzyDX2cLSwdTYINvSycbUINMg08nN18/Mwc3JIMTXz8rOz8og28nSyc7ZIgorCisjOiBvcHRpb24uYzo1MjE2Cittc2dpZCAiRTUzNDogSW52YWxpZCB3aWRlIGZvbnQiCittc2dzdHIgIkU1MzQ6IO7F0NLB18nM2M7ZyiDb0snG1CDTINPJzdfPzMHNySDE18/Kzs/KINvJ0snO2SIKKworIzogb3B0aW9uLmM6NTQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciA8JWM+IgorbXNnc3RyICJFNTM1OiDuxdDSwdfJzNjO2cog08nN18/MINDP08zFIDwlYz4iCisKKyM6IG9wdGlvbi5jOjU1OTcKK21zZ2lkICJFNTM2OiBjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAiRTUzNjog1NLFwtXF1NPRINrB0NHUwdEiCisKKyM6IG9wdGlvbi5jOjU2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzNzogJ2NvbW1lbnRzdHJpbmcnIG11c3QgYmUgZW1wdHkgb3IgY29udGFpbiAlcyIKK21zZ3N0ciAiIgorIkU1Mzc6IPrOwd7FzsnFIM/Qw8nRICdjb21tZW50c3RyaW5nJyDEz8zWzs8gwtnU2CDQ1dPUz8og09TSz8vPyiDJzMkgIgorItPPxMXS1sHU2CAlcyIKKworIzogb3B0aW9uLmM6NTY3OQorbXNnaWQgIkU1Mzg6IE5vIG1vdXNlIHN1cHBvcnQiCittc2dzdHIgIkU1Mzg6IO3Z29ggzsUg0M/ExMXS1snXwcXU09EiCisKKyM6IG9wdGlvbi5jOjU5NDcKK21zZ2lkICJFNTQwOiBVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJFNTQwOiDuxdrBy9LZ1MHRINDP08zFxM/XwdTFzNjOz9PU2CDX2dLB1sXOydEiCisKKyM6IG9wdGlvbi5jOjU5NTEKK21zZ2lkICJFNTQxOiB0b28gbWFueSBpdGVtcyIKK21zZ3N0ciAiRTU0MTog08zJ28vPzSDNzs/HzyDczMXNxc7Uz9ciCisKKyM6IG9wdGlvbi5jOjU5NTMKK21zZ2lkICJFNTQyOiB1bmJhbGFuY2VkIGdyb3VwcyIKK21zZ3N0ciAiRTU0MjogzsXTwsHMwc7TydLP18HOztnFIMfS1dDQ2SIKKworIzogb3B0aW9uLmM6NjE5MworbXNnaWQgIkU1OTA6IEEgcHJldmlldyB3aW5kb3cgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU1OTA6IO/Lzs8g0NLFxNDSz9PNz9TSwSDV1sUgxdPU2CIKKworIzogb3B0aW9uLmM6NjQ1MAorbXNnaWQgIlcxNzogQXJhYmljIHJlcXVpcmVzIFVURi04LCBkbyAnOnNldCBlbmNvZGluZz11dGYtOCciCittc2dzdHIgIiIKKyJXMTc6IOHSwcLTy8nKINTSxcLVxdQgydPQz8zY2s/Xwc7J0SBVVEYtOCwg19fFxMnUxSAnOnNldCBlbmNvZGluZz11dGYtOCciCisKKyM6IG9wdGlvbi5jOjY3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU5MzogTmVlZCBhdCBsZWFzdCAlZCBsaW5lcyIKK21zZ3N0ciAiRTU5Mzog7tXWzs8gyM/U0SDC2SAlZCDT1NLPyyIKKworIzogb3B0aW9uLmM6Njc5MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTk0OiBOZWVkIGF0IGxlYXN0ICVkIGNvbHVtbnMiCittc2dzdHIgIkU1OTQ6IO7V1s7PIMjP1NEgwtkgJWQgy8/Mz87PyyIKKworIzogb3B0aW9uLmM6NzEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU1OiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUzNTU6IO7FydrXxdPUzsHRIM/Qw8nROiAlcyIKKworIzogb3B0aW9uLmM6NzIyMAorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIPTF0s3JzsHM2M7ZxSDLz8TZIC0tLSIKKworIzogb3B0aW9uLmM6NzIyMgorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIOfMz8LBzNjO2cUg2s7B3sXOydEgz9DDycogLS0tIgorCisjOiBvcHRpb24uYzo3MjI0Cittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDtxdPUztnFINrOwd7FzsnRIM/Qw8nKIC0tLSIKKworIzogb3B0aW9uLmM6NzIyNgorbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g79DDyckgLS0tIgorCisjOiBvcHRpb24uYzo3OTMyCittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6IO/76eLr4SBnZXRfdmFycCIKKworIzogb3B0aW9uLmM6ODkwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMzU3OiAnbGFuZ21hcCc6IE1hdGNoaW5nIGNoYXJhY3RlciBtaXNzaW5nIGZvciAlcyIKK21zZ3N0ciAiRTM1NzogJ2xhbmdtYXAnOiDuxdQg08/P1NfF1NPU19XA3cXHzyDTyc3Xz8zBIMTM0SAlcyIKKworIzogb3B0aW9uLmM6ODkzNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzU4OiAnbGFuZ21hcCc6IEV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgc2VtaWNvbG9uOiAlcyIKK21zZ3N0ciAiRTM1ODogJ2xhbmdtYXAnOiDsydvOycUg08nN18/M2SDQz9PMxSDUz97LySDTINrB0NHUz8o6ICVzIgorCisjOiBvc19hbWlnYS5jOjI4MAorbXNnaWQgImNhbm5vdCBvcGVuICIKK21zZ3N0ciAizsXXz9rNz9bOzyDP1MvS2dTYICIKKworIzogb3NfYW1pZ2EuYzozMTQKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06IO7F18/azc/Wzs8gz9TL0tnU2CDPy87PIVxuIgorCisjOiBvc19hbWlnYS5jOjMzOAorbXNnaWQgIk5lZWQgQW1pZ2Fkb3MgdmVyc2lvbiAyLjA0IG9yIGxhdGVyXG4iCittc2dzdHIgIu7Fz8LIz8TJzcEgQW1pZ2Fkb3Mg18XS08nJIDIuMDQgyczJIMLPzMXFINDP2sTOxcpcbiIKKworIzogb3NfYW1pZ2EuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICLuxc/CyM/Eyc3BICVzINfF0tPJySAlbGRcbiIKKworIzogb3NfYW1pZ2EuYzo0MTYKK21zZ2lkICJDYW5ub3Qgb3BlbiBOSUw6XG4iCittc2dzdHIgIu7F18/azc/Wzs8gz9TL0tnU2CBOSUw6XG4iCisKKyM6IG9zX2FtaWdhLmM6NDI3Cittc2dpZCAiQ2Fubm90IGNyZWF0ZSAiCittc2dzdHIgIu7F18/azc/Wzs8g08/axMHU2CAiCisKKyM6IG9zX2FtaWdhLmM6OTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbSBleGl0aW5nIHdpdGggJWRcbiIKK21zZ3N0ciAi8NLFy9LB3cXOycUg0sHCz9TZIFZpbSDTIMvPxM/NICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTM3Cittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAizsXXz9rNz9bOzyDTzcXOydTYINLF1snNIMvPztPPzMk/IVxuIgorCisjOiBvc19hbWlnYS5jOjEwMDMKK21zZ2lkICJtY2hfZ2V0X3NoZWxsc2l6ZTogbm90IGEgY29uc29sZT8/XG4iCittc2dzdHIgIm1jaF9nZXRfc2hlbGxzaXplOiDOxSDXIMvPztPPzMk/P1xuIgorCisjLiBpZiBWaW0gb3BlbmVkIGEgd2luZG93OiBFeGVjdXRpbmcgYSBzaGVsbCBtYXkgY2F1c2UgY3Jhc2hlcworIzogb3NfYW1pZ2EuYzoxMTUyCittc2dpZCAiRTM2MDogQ2Fubm90IGV4ZWN1dGUgc2hlbGwgd2l0aCAtZiBvcHRpb24iCittc2dzdHIgIkUzNjA6IO7F18/azc/Wzs8g19nQz8zOydTYIM/Cz8zP3svVINMgwdLH1c3FztTPzSAtZiIKKworIzogb3NfYW1pZ2EuYzoxMTkzIG9zX2FtaWdhLmM6MTI4MworbXNnaWQgIkNhbm5vdCBleGVjdXRlICIKK21zZ3N0ciAi7sXXz9rNz9bOzyDX2dDPzM7J1NggIgorCisjOiBvc19hbWlnYS5jOjExOTYgb3NfYW1pZ2EuYzoxMjkzCittc2dpZCAic2hlbGwgIgorbXNnc3RyICLPws/Mz97LwSAiCisKKyM6IG9zX2FtaWdhLmM6MTIxNiBvc19hbWlnYS5jOjEzMTgKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiINrB18XS28nMwSDSwcLP1NVcbiIKKworIzogb3NfYW1pZ2EuYzoxNDU5Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgItPMydvLz80gzcHMwdEg18XMyd7JzsEgQU5DSE9SX0JVRl9TSVpFLiIKKworIzogb3NfYW1pZ2EuYzoxNDYzCittc2dpZCAiSS9PIEVSUk9SIgorbXNnc3RyICLv++ni6+Eg9/fv5OEv9/n37+ThIgorCisjOiBvc19tc3dpbi5jOjUzOQorbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICIuLi4oz8LSxdrBzs8pIgorCisjOiBvc19tc3dpbi5jOjY0MQorbXNnaWQgIidjb2x1bW5zJyBpcyBub3QgODAsIGNhbm5vdCBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICL6zsHexc7JxSDP0MPJySAnY29sdW1ucycgzsUg0sHXzs8gODAsINfOxdvOycUg0NLPx9LBzc3ZIM7FINfZ0M/MztHA1NPRIgorCisjOiBvc19tc3dpbi5jOjE5NzMKK21zZ2lkICJFMjM3OiBQcmludGVyIHNlbGVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkUzMjc6IO7F1cTB3s7PxSDawdfF0tvFzsnFINfZws/SwSDQ0snO1MXSwSIKKworIzogb3NfbXN3aW4uYzoyMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvICVzIG9uICVzIgorbXNnc3RyICLXICVzIM7BICVzIgorCisjOiBvc19tc3dpbi5jOjIwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMzogVW5rbm93biBwcmludGVyIGZvbnQ6ICVzIgorbXNnc3RyICJFNjEzOiDuxcna18XT1M7ZyiDb0snG1CDQ0snO1MXSwTogJXMiCisKKyM6IG9zX21zd2luLmM6MjA3NyBvc19tc3dpbi5jOjIwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzODogUHJpbnQgZXJyb3I6ICVzIgorbXNnc3RyICJFMjM4OiDv28nCy8Eg0MXewdTJOiAlcyIKKworIzogb3NfbXN3aW4uYzoyMDg4Cittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAi7sXJ2tfF09TOzyIKKworIzogb3NfbXN3aW4uYzoyMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nICclcyciCittc2dzdHIgIvDF3sHU2CAnJXMnIgorCisjOiBvc19tc3dpbi5jOjMyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NDogSWxsZWdhbCBjaGFyc2V0IG5hbWUgXCIlc1wiIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDQ6IO7FxM/Q1dPUyc3PxSDJzdEgy8/EydLP18vJIFwiJXNcIiDXIMnNxc7JINvSycbUwSBcIiVzXCIiCisKKyM6IG9zX21zd2luLmM6MzIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ1OiBJbGxlZ2FsIGNoYXIgJyVjJyBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ1OiDuxcTP0NXT1MnN2cog08nN18/MICclYycg1yDJzcXOySDb0snG1MEgXCIlc1wiIgorCisjOiBvc19yaXNjb3MuYzoxMjU5Cittc2dpZCAiRTM2NjogSW52YWxpZCAnb3NmaWxldHlwZScgb3B0aW9uIC0gdXNpbmcgVGV4dCIKK21zZ3N0ciAiRTM2Njog7sXEz9DV09TJzc/FINrOwd7FzsnFIM/Qw8nJICdvc2ZpbGV0eXBlJyAtLSDJ09DPzNja1cXU09EgVGV4dCIKKworIzogb3NfdW5peC5jOjkyNworbXNnaWQgIlZpbTogRG91YmxlIHNpZ25hbCwgZXhpdGluZ1xuIgorbXNnc3RyICJWaW06IOTXz8rOz8og08nHzsHMLCDawdfF0tvFzsnFINLBws/U2VxuIgorCisjOiBvc191bml4LmM6OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWwgJXNcbiIKK21zZ3N0ciAiVmltOiDwz8zV3sXOINXCycrT1NfFzs7ZyiDTycfOwcwgJXNcbiIKKworIzogb3NfdW5peC5jOjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCBkZWFkbHkgc2lnbmFsXG4iCittc2dzdHIgIlZpbTog8M/M1d7FziDVwsnK09TXxc7O2cog08nHzsHMXG4iCisKKyM6IG9zX3VuaXguYzoxMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0b29rICVsZCBtc2VjIgorbXNnc3RyICLv1MvS2dTJxSDEydPQzMXRIFgg2sHO0czPICVsZCBtc2VjIgorCisjOiBvc191bml4LmM6MTIyNgorbXNnaWQgIiIKKyJcbiIKKyJWaW06IEdvdCBYIGVycm9yXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWaW06IO/bycLLwSBYXG4iCisKKyM6IG9zX3VuaXguYzoxMzM0Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAi8NLP18XSy8EgxMnT0MzF0SBYINrB18XS28XOwSDOxdXEwd7OzyIKKworIzogb3NfdW5peC5jOjE0NzMKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IgorbXNnc3RyICLv1MvS2dTJxSDEydPQzMXRIFggzsUg19nQz8zOxc7PINcgz9TXxcSjzs7PxSDX0sXN0SIKKworIzogb3NfdW5peC5jOjMyMjcgb3NfdW5peC5jOjM5MDcKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgIgorbXNnc3RyICIiCisiXG4iCisi7sXXz9rNz9bOzyDawdDV09TJ1Nggz8LPzM/ey9UgIgorCisjOiBvc191bml4LmM6MzI3NQorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCBzaFxuIgorbXNnc3RyICIiCisiXG4iCisi7sXXz9rNz9bOzyDawdDV09TJ1Nggz8LPzM/ey9Ugc2hcbiIKKworIzogb3NfdW5peC5jOjMyNzkgb3NfdW5peC5jOjM5MTMKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisi78LPzM/ey8Eg2sHXxdLbyczBINLBws/U1SAiCisKKyM6IG9zX3VuaXguYzozNDE0Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIu7F18/azc/Wzs8g08/axMHU2CDU0tXC2VxuIgorCisjOiBvc191bml4LmM6MzQyOQorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZm9ya1xuIgorbXNnc3RyICIiCisiXG4iCisi7sXXz9rNz9bOzyDX2dDPzM7J1NggZm9yaygpXG4iCisKKyM6IG9zX3VuaXguYzozOTIwCittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgdGVybWluYXRlZFxuIgorbXNnc3RyICIiCisiXG4iCisi99nQz8zOxc7JxSDLz83BzsTZINDSxdLXwc7PXG4iCisKKyM6IG9zX3VuaXguYzo0MTg0IG9zX3VuaXguYzo0MzA5IG9zX3VuaXguYzo1OTc1Cittc2dpZCAiWFNNUCBsb3N0IElDRSBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QINXUxdLRzs8g08/FxMnOxc7JxSBJQ0UiCisKKyM6IG9zX3VuaXguYzo1NTU4Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAi7sXVxMHezs/FIM/Uy9LZ1MnFIMTJ09DMxdEgWCIKKworIzogb3NfdW5peC5jOjU4ODAKK21zZ2lkICJYU01QIGhhbmRsaW5nIHNhdmUteW91cnNlbGYgcmVxdWVzdCIKK21zZ3N0ciAiWFNNUCDPwtLBwsHU2dfBxdQg2sHQ0s/TINPBzc/Tz8jSwc7FzsnRIgorCisjOiBvc191bml4LmM6NTk5OQorbXNnaWQgIlhTTVAgb3BlbmluZyBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QIM/Uy9LZ18HF1CDTz8XEyc7FzsnFIgorCisjOiBvc191bml4LmM6NjAxOAorbXNnaWQgIlhTTVAgSUNFIGNvbm5lY3Rpb24gd2F0Y2ggZmFpbGVkIgorbXNnc3RyICJYU01QINDP1MXS0c7PINPMxdbFzsnFINrBINPPxcTJzsXOycXNIElDRSIKKworIzogb3NfdW5peC5jOjYwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICJYU01QIM7F1cTB3s7PINfZ0M/MzsXOzyBTbWNPcGVuQ29ubmVjdGlvbjogJXMiCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgIvcg09TSz8vFIgorCisjOiBvc193MzJleGUuYzo2NQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIu7F18/azc/Wzs8g19nExczJ1Ngg0MHN0dTYIMTM0SDLz83BzsTOz8og09TSz8vJLiIKKworIzogb3NfdzMyZXhlLmM6NjYgb3NfdzMyZXhlLmM6ODkgb3NfdzMyZXhlLmM6MTAwCittc2dpZCAiVklNIEVycm9yIgorbXNnc3RyICLv28nCy8EgVklNIgorCisjOiBvc193MzJleGUuYzo4OQorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHZpbTMyLmRsbCEiCittc2dzdHIgIu7F18/azc/Wzs8g2sHH0tXaydTYIHZpbTMyLmRsbCEiCisKKyM6IG9zX3czMmV4ZS5jOjk5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAi7sXXz9rNz9bOzyDJ09DSwdfJ1Ngg1cvB2sHUxczJIMbVzsvDycogxMzRIERMTCEiCisKKyM6IG9zX3dpbjE2LmM6MzQyIG9zX3dpbjMyLmM6MzIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAi2sHXxdLbxc7JxSDSwcLP1Nkgz8LPzM/ey8kg0yDLz8TPzSAlZCIKKworIzogb3Nfd2luMzIuYzoyNjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0ICVzIGV2ZW50XG4iCittc2dzdHIgIlZpbTog8MXSxcjXwd7Fzs8g08/C2dTJxSAlc1xuIgorCisjOiBvc193aW4zMi5jOjI2NzYKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAi2sHL0tnUycUiCisKKyM6IG9zX3dpbjMyLmM6MjY3OAorbXNnaWQgImxvZ29mZiIKK21zZ3N0ciAiz9TLzMDexc7JxSIKKworIzogb3Nfd2luMzIuYzoyNjc5Cittc2dpZCAic2h1dGRvd24iCittc2dzdHIgItrB18XS28XOycUiCisKKyM6IG9zX3dpbjMyLmM6MzE2OQorbXNnaWQgIkUzNzE6IENvbW1hbmQgbm90IGZvdW5kIgorbXNnc3RyICJFMzcxOiDrz83BzsTBIM7FIM7BysTFzsEiCisKKyM6IG9zX3dpbjMyLmM6MzE4MgorbXNnaWQgIiIKKyJWSU1SVU4uRVhFIG5vdCBmb3VuZCBpbiB5b3VyICRQQVRILlxuIgorIkV4dGVybmFsIGNvbW1hbmRzIHdpbGwgbm90IHBhdXNlIGFmdGVyIGNvbXBsZXRpb24uXG4iCisiU2VlICA6aGVscCB3aW4zMi12aW1ydW4gIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlZJTVJVTi5FWEUgzsUgzsHKxMXOINcg0NXUySwg2sHEwc7Oz80g1yAkUEFUSC5cbiIKKyL3zsXbzsnFIMvPzcHOxNkgzsUgwtXE1dQgz9PUwc7B18zJ18HU2NPRINDP08zFINfZ0M/MzsXOydEuXG4iCisi5M/Qz8zOydTFzNjOwdEgyc7Gz9LNwcPJ0SDXIDpoZWxwIHdpbjMyLXZpbXJ1biIKKworIzogb3Nfd2luMzIuYzozMTg1Cittc2dpZCAiVmltIFdhcm5pbmciCittc2dzdHIgIvDSxcTV0NLF1sTFzsnFIFZpbSIKKworIzogcXVpY2tmaXguYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MjogVG9vIG1hbnkgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzcyOiD3INPU0s/LxSDGz9LNwdTBINPMydvLz80gzc7Px88gJSUlYyIKKworIzogcXVpY2tmaXguYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MzogVW5leHBlY3RlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzM6IO7Fz9bJxMHOztnKINzMxc3FztQgJSUlYyDXINPU0s/LxSDGz9LNwdTBIgorCisjOiBxdWlja2ZpeC5jOjMyNQorbXNnaWQgIkUzNzQ6IE1pc3NpbmcgXSBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc0OiD3INPU0s/LxSDGz9LNwdTBINDSz9DV3cXOwSBdIgorCisjOiBxdWlja2ZpeC5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc1OiBVbnN1cHBvcnRlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzU6ICUlJWMgzsUg0M/ExMXS1snXwcXU09Eg1yDT1NLPy8Ugxs/SzcHUwSIKKworIzogcXVpY2tmaXguYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NjogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmcgcHJlZml4IgorbXNnc3RyICJFMzc2OiDuxcTP0NXT1MnN2cogJSUlYyDXINDSydPUwdfLxSDXINPU0s/LxSDGz9LNwdTBIgorCisjOiBxdWlja2ZpeC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc3OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3Nzog7sXEz9DV09TJzdnKICUlJWMg1yDT1NLPy8Ugxs/SzcHUwSIKKworIzogcXVpY2tmaXguYzozOTEKK21zZ2lkICJFMzc4OiAnZXJyb3Jmb3JtYXQnIGNvbnRhaW5zIG5vIHBhdHRlcm4iCittc2dzdHIgIkUzNzg6IPcg2s7B3sXOyckgz9DDyckgJ2Vycm9yZm9ybWF0JyDP1NPV1NPU19XF1CDbwcLMz84iCisKKyM6IHF1aWNrZml4LmM6NTAxCittc2dpZCAiRTM3OTogTWlzc2luZyBvciBlbXB0eSBkaXJlY3RvcnkgbmFtZSIKK21zZ3N0ciAiRTM3OTogyc3RIMvB1MHMz8fBIM7FINrBxMHOzyDJzMkg0sHXzs8g0NXT1M/KINPU0s/LxSIKKworIzogcXVpY2tmaXguYzo5OTAKK21zZ2lkICJFNTUzOiBObyBtb3JlIGl0ZW1zIgorbXNnc3RyICJFNTUzOiDiz8zY28UgzsXUINzMxc3FztTP1yIKKworIzogcXVpY2tmaXguYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiglZCBvZiAlZCklcyVzOiAiCittc2dzdHIgIiglZCDJ2iAlZCklcyVzOiAiCisKKyM6IHF1aWNrZml4LmM6MTIzMQorbXNnaWQgIiAobGluZSBkZWxldGVkKSIKK21zZ3N0ciAiICjT1NLPy8Eg1cTBzMXOwSkiCisKKyM6IHF1aWNrZml4LmM6MTQ0NAorbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDog987J2tUg09TFy8EgwtnT1NLZyCDJ09DSwdfMxc7JyiIKKworIzogcXVpY2tmaXguYzoxNDUzCittc2dpZCAiRTM4MTogQXQgdG9wIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgxOiDuwdfF0sjVINPUxcvBIMLZ09TS2cggydPQ0sHXzMXOycoiCisKKyM6IHF1aWNrZml4LmM6MTQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBsaXN0ICVkIG9mICVkOyAlZCBlcnJvcnMiCittc2dzdHIgItPQydPPyyDP28nCz8sgJWQgydogJWQ7ICVkIM/bycLPyyIKKworIzogcXVpY2tmaXguYzoxOTQzCittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiIgorIkUzODI6IPrB0MnT2CDOxdfP2s3P1s7BLCDazsHexc7JxSDP0MPJySAnYnVmdHlwZScgzsUg0dfM0cXU09Eg0NXT1M/KINPU0s/Lz8oiCisKKyM6IHJlZ2V4cC5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY5OiBpbnZhbGlkIGl0ZW0gaW4gJXMlJVtdIgorbXNnc3RyICJFMzY5OiDOxcTP0NXT1MnN2cog3MzFzcXO1CDXICVzJSVbXSIKKworIzogcmVnZXhwLmM6ODM4Cittc2dpZCAiRTMzOTogUGF0dGVybiB0b28gbG9uZyIKK21zZ3N0ciAiRTMzOTog88zJ28vPzSDEzMnOztnKINvBwszPziIKKworIzogcmVnZXhwLmM6MTAwOQorbXNnaWQgIkU1MDogVG9vIG1hbnkgXFx6KCIKK21zZ3N0ciAiRTUwOiDzzMnby8/NIM3Oz8fPIFxceigiCisKKyM6IHJlZ2V4cC5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUxOiBUb28gbWFueSAlcygiCittc2dzdHIgIkU1MTog88zJ28vPzSDNzs/HzyAlcygiCisKKyM6IHJlZ2V4cC5jOjEwNzcKK21zZ2lkICJFNTI6IFVubWF0Y2hlZCBcXHooIgorbXNnc3RyICJFNTI6IO7F1CDQwdLZIMTM0SBcXHooIgorCisjOiByZWdleHAuYzoxMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzogVW5tYXRjaGVkICVzJSUoIgorbXNnc3RyICJFNTM6IO7F1CDQwdLZIMTM0SAlcyUlKCIKKworIzogcmVnZXhwLmM6MTA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTQ6IFVubWF0Y2hlZCAlcygiCittc2dzdHIgIkU1NDog7sXUINDB0tkgxMzRICVzKCIKKworIzogcmVnZXhwLmM6MTA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTU6IFVubWF0Y2hlZCAlcykiCittc2dzdHIgIkU1NTog7sXUINDB0tkgxMzRICVzKSIKKworIzogcmVnZXhwLmM6MTI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY6ICVzKiBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTY6INfP2s3P1s7PINDV09TPyiDP0MXSwc7EICVzKiIKKworIzogcmVnZXhwLmM6MTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTc6ICVzKyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTc6INfP2s3P1s7PINDV09TPyiDP0MXSwc7EICVzKyIKKworIzogcmVnZXhwLmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzQCIKK21zZ3N0ciAiRTU5OiDOxcTP0NXT1MnN2cog08nN18/MINDP08zFICVzQCIKKworIzogcmVnZXhwLmM6MTM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTg6ICVzeyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTg6INfP2s3P1s7PINDV09TPyiDP0MXSwc7EICVzeyIKKworIzogcmVnZXhwLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA6IFRvbyBtYW55IGNvbXBsZXggJXN7Li4ufXMiCittc2dzdHIgIkU2MDog88zJ28vPzSDNzs/HzyDTzM/WztnIIMvPztPU0tXLw8nKICVzey4uLn0iCisKKyM6IHJlZ2V4cC5jOjEzNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOiBOZXN0ZWQgJXMqIgorbXNnc3RyICJFNjE6IPfMz9bFzs7ZxSAlcyoiCisKKyM6IHJlZ2V4cC5jOjEzNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyOiBOZXN0ZWQgJXMlYyIKK21zZ3N0ciAiRTYyOiD3zM/Wxc7O2cUgJXMlYyIKKworIzogcmVnZXhwLmM6MTQ5MQorbXNnaWQgIkU2MzogaW52YWxpZCB1c2Ugb2YgXFxfIgorbXNnc3RyICJFNjM6IM7FxM/Q1dPUyc3PxSDJ09DPzNjaz9fBzsnFIFxcXyIKKworIzogcmVnZXhwLmM6MTUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjQ6ICVzJWMgZm9sbG93cyBub3RoaW5nIgorbXNnc3RyICJFNjQ6ICVzJWMgzskg2sEg3sXNIM7FINPMxcTVxdQiCisKKyM6IHJlZ2V4cC5jOjE1OTIKK21zZ2lkICJFNjU6IElsbGVnYWwgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIkU2NTog7sXEz9DV09TJzcHRIM/C0sHUzsHRINPT2czLwSIKKworIzogcmVnZXhwLmM6MTYwNQorbXNnaWQgIkU2NjogXFx6KCBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNjY6IFxceiggzsUgzc/WxdQgwtnU2CDJ09DPzNjaz9fBzs8g2sTF09giCisKKyM6IHJlZ2V4cC5jOjE2MjQKK21zZ2lkICJFNjc6IFxcejEgZXQgYWwuIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU2NzogXFx6MSDJINQu0C4gzsUgzc/H1dQgwtnU2CDJ09DPzNjaz9fBztkg2sTF09giCisKKyM6IHJlZ2V4cC5jOjE2MzUKK21zZ2lkICJFNjg6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxceiIKK21zZ3N0ciAiRTY4OiDuxcTP0NXT1MnN2cog08nN18/MINDP08zFIFxceiIKKworIzogcmVnZXhwLmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjk6IE1pc3NpbmcgXSBhZnRlciAlcyUlWyIKK21zZ3N0ciAiRTY5OiDw0s/Q1d3FzsEgXSDQz9PMxSAlcyUlWyIKKworIzogcmVnZXhwLmM6MTcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNzA6IEVtcHR5ICVzJSVbXSIKK21zZ3N0ciAiRTcwOiDw1dPUz8UgJXMlJVtdIgorCisjOiByZWdleHAuYzoxNzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MTogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXMlJSIKK21zZ3N0ciAiRTcxOiDuxcTP0NXT1MnN2cog08nN18/MINDP08zFICVzJSUiCisKKyM6IHJlZ2V4cC5jOjI1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU1NDogU3ludGF4IGVycm9yIGluICVzey4uLn0iCittc2dzdHIgIkU1NTQ6IPPJztTBy9PJ3sXTy8HRIM/bycLLwSDXICVzey4uLn0iCisKKyM6IHJlZ2V4cC5jOjI4NjMgcmVnZXhwLmM6MzAxNgorbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICIiCisiRTM2MTog8NLFxM/U19LB3cXOzyDB18HSycrOz8Ug2sHXxdLbxc7JxTog08zJ28vPzSDTzM/Wzs/FINLFx9XM0dLOz8UgIgorItfZ0sHWxc7JxT8iCisKKyM6IHJlZ2V4cC5jOjMwMDQgcmVnZXhwLmM6MzAxMworbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2Mzog0NLJzcXOxc7JxSDbwcLMz87BINDSydfFzM8gyyDP28nCy8Ug19nIz8TBINrBINDSxcTFzNkg09TFy8EiCisKKyM6IHJlZ2V4cC5jOjMyNTgKK21zZ2lkICJFeHRlcm5hbCBzdWJtYXRjaGVzOlxuIgorbXNnc3RyICL3zsXbzsnFINDPxNPPz9TXxdTT1NfJ0TpcbiIKKworIzogc2NyZWVuLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIrLS0lM2xkIGxpbmVzIGZvbGRlZCAiCittc2dzdHIgIistLSUzbGQg09TSz8sg1yDTy8zBxMvFIgorCisjOiBzY3JlZW4uYzo3OTk2Cittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIg9+ny9PXh7Pju4fEg+uHt5e7hIgorCisjOiBzY3JlZW4uYzo4MDAwCittc2dpZCAiIFJFUExBQ0UiCittc2dzdHIgIiD64e3l7uEiCisKKyM6IHNjcmVlbi5jOjgwMDUKK21zZ2lkICIgUkVWRVJTRSIKK21zZ3N0ciAiIO/i8uH07uHxIgorCisjOiBzY3JlZW4uYzo4MDA3Cittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIPfz9OH36+EiCisKKyM6IHNjcmVlbi5jOjgwMTAKK21zZ2lkICIgKGluc2VydCkiCittc2dzdHIgIiAo19PUwdfLwSkiCisKKyM6IHNjcmVlbi5jOjgwMTIKK21zZ2lkICIgKHJlcGxhY2UpIgorbXNnc3RyICIgKNrBzcXOwSkiCisKKyM6IHNjcmVlbi5jOjgwMTQKK21zZ2lkICIgKHZyZXBsYWNlKSIKK21zZ3N0ciAiICjXydLU1cHM2M7B0SDawc3FzsEpIgorCisjOiBzY3JlZW4uYzo4MDE3Cittc2dpZCAiIEhlYnJldyIKK21zZ3N0ciAiIOnX0snUIgorCisjOiBzY3JlZW4uYzo4MDI4Cittc2dpZCAiIEFyYWJpYyIKK21zZ3N0ciAiIOHSwcLTy8nKIgorCisjOiBzY3JlZW4uYzo4MDMxCittc2dpZCAiIChsYW5nKSIKK21zZ3N0ciAiICjR2tnLKSIKKworIzogc2NyZWVuLmM6ODAzNQorbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKNfLzMXKy8EpIgorCisjOiBzY3JlZW4uYzo4MDQ4Cittc2dpZCAiIFZJU1VBTCIKK21zZ3N0ciAiIPfp+vXh7Pju+eog8uX26e0iCisKKyM6IHNjcmVlbi5jOjgwNDkKK21zZ2lkICIgVklTVUFMIExJTkUiCittc2dzdHIgIiD36fr14ez47uHxIPP08u/r4SIKKworIzogc2NyZWVuLmM6ODA1MAorbXNnaWQgIiBWSVNVQUwgQkxPQ0siCittc2dzdHIgIiD36fr14ez47vnqIOLs7+siCisKKyM6IHNjcmVlbi5jOjgwNTEKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIg9/nk5ezl7unlIgorCisjOiBzY3JlZW4uYzo4MDUyCittc2dpZCAiIFNFTEVDVCBMSU5FIgorbXNnc3RyICIg9/nk5ezl7unlIPP08u/r6SIKKworIzogc2NyZWVuLmM6ODA1MworbXNnaWQgIiBTRUxFQ1QgQkxPQ0siCittc2dzdHIgIiD3+eTl7OXu6eUg4uzv6+EiCisKKyM6IHNjcmVlbi5jOjgwNjggc2NyZWVuLmM6ODEzMQorbXNnaWQgInJlY29yZGluZyIKK21zZ3N0ciAi2sHQydPYIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIKK21zZ3N0ciAi0M/J08sgwtXExdQg0NLPxM/M1sXOINMg6+/u4+EgxM/L1c3FztTBIgorCisjOiBzZWFyY2guYzozOAorbXNnaWQgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIKK21zZ3N0ciAi0M/J08sgwtXExdQg0NLPxM/M1sXOINMg7uH+4ezhIMTPy9XNxc7UwSIKKworIzogc2VhcmNoLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IO7F0NLB18nM2M7B0SDT1NLPy8Eg0M/J08vBOiAlcyIKKworIzogc2VhcmNoLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODQ6IHNlYXJjaCBoaXQgVE9QIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NDog0M/J08sg2sHLz87exc4g1yDu4f7h7OUgxM/L1c3FztTBOyAlcyDOxSDOwcrExc7PIgorCisjOiBzZWFyY2guYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NTogc2VhcmNoIGhpdCBCT1RUT00gd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg1OiDQz8nTyyDawcvPzt7FziDXIOvv7uPlIMTPy9XNxc7UwTsgJXMgzsUgzsHKxMXOzyIKKworIzogc2VhcmNoLmM6MTI0OQorbXNnaWQgIkUzODY6IEV4cGVjdGVkICc/JyBvciAnLycgIGFmdGVyICc7JyIKK21zZ3N0ciAiRTM4Njog8M/TzMUgJzsnIM/WycTBxdTT0SDX18/EICc/JyDJzMkgJy8nIgorCisjOiBzZWFyY2guYzozNzU5Cittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAo18vMwN7BxdQg0sHOzsXFINDPy8Hawc7O2cUg08/P1NfF1NPU18nRKSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNzc5Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIPfLzMDeo87O2cUgxsHKzNkgIgorCisjOiBzZWFyY2guYzozNzgxCittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAizsUgzsHKxMXOzyAiCisKKyM6IHNlYXJjaC5jOjM3ODIKK21zZ2lkICJpbiBwYXRoIC0tLVxuIgorbXNnc3RyICLQzyDQ1dTJIC0tLVxuIgorCisjOiBzZWFyY2guYzozODM5Cittc2dpZCAiICAoQWxyZWFkeSBsaXN0ZWQpIgorbXNnc3RyICIgKPXWxSDQz8vB2sHOzykiCisKKyM6IHNlYXJjaC5jOjM4NDEKK21zZ2lkICIgIE5PVCBGT1VORCIKK21zZ3N0ciAiIO7lIO7h6uTl7u8iCisKKyM6IHNlYXJjaC5jOjM4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiCittc2dzdHIgIvDSz9PNz9TSINfLzMDeo87O2cggxsHKzM/XOiAlcyIKKworIzogc2VhcmNoLmM6NDExMQorbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4Nzog88/P1NfF1NPU18nFINcg1MXL1d3FyiDT1NLPy8UiCisKKyM6IHNlYXJjaC5jOjQyNTQKK21zZ2lkICJBbGwgaW5jbHVkZWQgZmlsZXMgd2VyZSBmb3VuZCIKK21zZ3N0ciAi7sHKxMXO2SDX08Ug18vMwN6jzs7ZxSDGwcrM2SIKKworIzogc2VhcmNoLmM6NDI1NgorbXNnaWQgIk5vIGluY2x1ZGVkIGZpbGVzIgorbXNnc3RyICL3y8zA3qPOztnIIMbByszP1yDOxdQiCisKKyM6IHNlYXJjaC5jOjQyNzIKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IO/Q0sXExczFzsnFIM7FIM7BysTFzs8iCisKKyM6IHNlYXJjaC5jOjQyNzQKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IPvBwszPziDOxSDOwcrExc4iCisKKyM6IHN5bnRheC5jOjMwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MDogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUzOTA6IO7FxM/Q1dPUyc3ZyiDB0sfVzcXO1DogJXMiCisKKyM6IHN5bnRheC5jOjMyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTE6IPPJztTBy9PJ3sXTy8nKIMvMwdPUxdIgJXMgzsUgzsHKxMXOIgorCisjOiBzeW50YXguYzozMzk0Cittc2dpZCAiTm8gU3ludGF4IGl0ZW1zIGRlZmluZWQgZm9yIHRoaXMgYnVmZmVyIgorbXNnc3RyICLzyc7UwcvTyd7F08vJxSDczMXNxc7U2SDEzNEgxMHOzs/HzyDC1cbF0sEgzsUgz9DSxcTFzMXO2SIKKworIzogc3ludGF4LmM6MzQwMgorbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAi88nOyNLPzsnawcPJ0SDQzyDLz83Nxc7UwdLJ0c0g1yDT1MnMxSDR2tnLwSBDIgorCisjOiBzeW50YXguYzozNDEwCittc2dpZCAibm8gc3luY2luZyIKK21zZ3N0ciAiwsXaINPJzsjSz87J2sHDyckiCisKKyM6IHN5bnRheC5jOjM0MTMKK21zZ2lkICJzeW5jaW5nIHN0YXJ0cyAiCittc2dzdHIgItPJzsjSz87J2sHDydEgzsHewdTBICIKKworIzogc3ludGF4LmM6MzQxNSBzeW50YXguYzozNDkwCittc2dpZCAiIGxpbmVzIGJlZm9yZSB0b3AgbGluZSIKK21zZ3N0ciAiINPU0s/LINDF0sXEINfF0sjOxcog09TSz8vPyiIKKworIzogc3ludGF4LmM6MzQyMAorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IHN5bmMgaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIPzMxc3FztTZINPJzsjSz87J2sHDyckg08nO1MHL08nTwSAtLS0iCisKKyM6IHN5bnRheC5jOjM0MjUKK21zZ2lkICIiCisiXG4iCisic3luY2luZyBvbiBpdGVtcyIKK21zZ3N0ciAiIgorIlxuIgorItPJzsjSz87J2sHDydEg0M8g3MzFzcXO1MHNIgorCisjOiBzeW50YXguYzozNDMxCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIPPJztTBy9PJ3sXTy8nFINzMxc3FztTZIC0tLSIKKworIzogc3ludGF4LmM6MzQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5Mjog88nO1MHL08nexdPLycogy8zB09TF0iAlcyDOxSDOwcrExc4iCisKKyM6IHN5bnRheC5jOjM0ODAKK21zZ2lkICJtaW5pbWFsICIKK21zZ3N0ciAizcnOyc3VzSAiCisKKyM6IHN5bnRheC5jOjM0ODcKK21zZ2lkICJtYXhpbWFsICIKK21zZ3N0ciAizcHL08nN1c0gIgorCisjOiBzeW50YXguYzozNDk5Cittc2dpZCAiOyBtYXRjaCAiCittc2dzdHIgIjsg08/P1NfF1NPU18nFICIKKworIzogc3ludGF4LmM6MzUwMQorbXNnaWQgIiBsaW5lIGJyZWFrcyIKK21zZ3N0ciAiINDF0sXOz9PP1yDT1NLPyyIKKworIzogc3ludGF4LmM6NDEzNQorbXNnaWQgIkUzOTM6IGdyb3VwW3RdaGVyZSBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5Mzog2sTF09ggzsXM2NrRIMnT0M/M2NrP18HU2CBncm91cFt0XWhlcmUiCisKKyM6IHN5bnRheC5jOjQxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiD8zMXNxc7UIM/CzMHT1MkgxMzRICVzIM7FIM7BysTFziIKKworIzogc3ludGF4LmM6NDE4NworbXNnaWQgIkUzOTU6IGNvbnRhaW5zIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk1OiDaxMXT2CDOxczY2tEgydPQz8zY2s/XwdTYIMHSx9XNxc7UIGNvbnRhaW5zIgorCisjOiBzeW50YXguYzo0MTk4Cittc2dpZCAiRTM5NjogY29udGFpbmVkaW4gYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTY6INrExdPYIM7FzNja0SDJ09DPzNjaz9fB1NggwdLH1c3FztQgY29udGFpbmVkaW4iCisKKyM6IHN5bnRheC5jOjQyNzYKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5Nzog9NLFwtXF1NPRINXLwdrB1Nggyc3RIMbByszBIgorCisjOiBzeW50YXguYzo0NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODog8NLP0NXdxc7PICc9JzogJXMiCisKKyM6IHN5bnRheC5jOjQ3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5OTogTm90IGVub3VnaCBhcmd1bWVudHM6IHN5bnRheCByZWdpb24gJXMiCittc2dzdHIgIkUzOTk6IO7FIMjXwdTBxdQgwdLH1c3FztTP1zog08nO1MHL08nexdPLycog0sXHyc/OICVzIgorCisjOiBzeW50YXguYzo1MTAzCittc2dpZCAiRTQwMDogTm8gY2x1c3RlciBzcGVjaWZpZWQiCittc2dzdHIgIkU0MDA6IOvMwdPUxdIgzsUg1cvB2sHOIgorCisjOiBzeW50YXguYzo1MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDE6IFBhdHRlcm4gZGVsaW1pdGVyIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MDE6IO7FIM7BysTFziDSwdrExczJ1MXM2CDbwcLMz87P1zogJXMiCisKKyM6IHN5bnRheC5jOjUyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMjogR2FyYmFnZSBhZnRlciBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRTQwMjog7dXTz9Ig0M/TzMUg28HCzM/OwTogJXMiCisKKyM6IHN5bnRheC5jOjUzMDUKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICIiCisiRTQwMzog08nOyNLPzsnawcPJ0SDTyc7UwcvTydPBOiDbwcLMz84g0NLPxM/M1sXOycog09TSz8vJINXLwdrBziDE18HWxNkiCisKKyM6IHN5bnRheC5jOjUzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNDogSWxsZWdhbCBhcmd1bWVudHM6ICVzIgorbXNnc3RyICJFNDA0OiDuxcTP0NXT1MnN2cUgwdLH1c3FztTZOiAlcyIKKworIzogc3ludGF4LmM6NTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiDw0s/Q1d3FziDazsHLINLB18XO09TXwTogJXMiCisKKyM6IHN5bnRheC5jOjU0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNjogRW1wdHkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDA2OiDw1dPUz8ogwdLH1c3FztQ6ICVzIgorCisjOiBzeW50YXguYzo1NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDc6ICVzIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU0MDc6ICVzIM7FIMTP0NXTy8HF1NPRINcg3NTPzSDNxdPUxSIKKworIzogc3ludGF4LmM6NTQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA4OiAlcyBtdXN0IGJlIGZpcnN0IGluIGNvbnRhaW5zIGxpc3QiCittc2dzdHIgIkU0MDg6ICVzIMTPzNbOzyDC2dTYINDF0tfZzSDXINPQydPLxSBjb250YWlucyIKKworIzogc3ludGF4LmM6NTUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA5OiBVbmtub3duIGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFNDA5OiDuxcna18XT1M7B0SDH0tXQ0ME6ICVzIgorCisjOiBzeW50YXguYzo1NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTA6IEludmFsaWQgOnN5bnRheCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTQxMDog7sXQ0sHXyczYzsHRINDPxMvPzcHOxMEgOnN5bnRheDogJXMiCisKKyM6IHN5bnRheC5jOjYxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMTogaGlnaGxpZ2h0IGdyb3VwIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MTE6IMfS1dDQwSDQz8TT18XUy8kg08nO1MHL08nTwSAlcyDOxSDOwcrExc7BIgorCisjOiBzeW50YXguYzo2MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTI6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEyOiDuxSDI18HUwcXUIMHSx9XNxc7Uz9c6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMzogVG9vIG1hbnkgYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEzOiDzzMnby8/NIM3Oz8fPIMHSx9XNxc7Uz9c6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYxODcKK21zZ2lkICJFNDE0OiBncm91cCBoYXMgc2V0dGluZ3MsIGhpZ2hsaWdodCBsaW5rIGlnbm9yZWQiCittc2dzdHIgIkU0MTQ6INUgx9LV0NDZIMXT1Ngg08/C09TXxc7O2cUgzsHT1NLPysvJLCDT09nMy8EgycfOz9LJ0tXF1NPRIgorCisjOiBzeW50YXguYzo2MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTU6IHVuZXhwZWN0ZWQgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTU6IM7Fz9bJxMHOztnKINrOwcsg0sHXxc7T1NfBOiAlcyIKKworIzogc3ludGF4LmM6NjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE2OiBtaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE2OiDQ0s/Q1d3FziDazsHLINLB18XO09TXwTogJXMiCisKKyM6IHN5bnRheC5jOjYzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MTc6INDSz9DV3cXOIMHSx9XNxc7UOiAlcyIKKworIzogc3ludGF4LmM6NjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJFNDE4OiBJbGxlZ2FsIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTQxODog7sXEz9DV09TJzc/FINrOwd7FzsnFOiAlcyIKKworIzogc3ludGF4LmM6NjUzNgorbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6IO7FydrXxdPUztnKIMPXxdQg1MXL09TBIgorCisjOiBzeW50YXguYzo2NTQ3Cittc2dpZCAiRTQyMDogQkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQyMDog7sXJ2tfF09TO2cogw9fF1CDGz87BIgorCisjOiBzeW50YXguYzo2NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjE6IENvbG9yIG5hbWUgb3IgbnVtYmVyIG5vdCByZWNvZ25pemVkOiAlcyIKK21zZ3N0ciAiRTQyMTog6c3RIMnMySDOz83F0iDD18XUwSDOxSDJ2tfF09TOzzogJXMiCisKKyM6IHN5bnRheC5jOjY4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6INPMydvLz80gxMzJzs7ZyiDLz8Qg1MXSzcnOwczBOiAlcyIKKworIzogc3ludGF4LmM6Njg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzog7sXEz9DV09TJzdnKIMHSx9XNxc7UOiAlcyIKKworIzogc3ludGF4LmM6NzM5MAorbXNnaWQgIkU0MjQ6IFRvbyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBpbiB1c2UiCittc2dzdHIgIkU0MjQ6IOnT0M/M2NrVxdTT0SDTzMnby8/NIM3Oz8fPINLB2s7ZyCDB1NLJwtXUz9cg0M/E09fF1MvJINPJztTBy9PJ08EiCisKKyM6IHN5bnRheC5jOjc5MTEKK21zZ2lkICJFNjY5OiBVbnByaW50YWJsZSBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSIKK21zZ3N0ciAiRTY2OTog7sXQxd7B1M7ZyiDTyc3Xz8wg1yDJzcXOySDH0tXQ0NkiCisKKyMuIFRoaXMgaXMgYW4gZXJyb3IsIGJ1dCBzaW5jZSB0aGVyZSBwcmV2aW91c2x5IHdhcyBubyBjaGVjayBvbmx5CisjLiAqIGdpdmUgYSB3YXJuaW5nLgorIzogc3ludGF4LmM6NzkxOAorbXNnaWQgIlcxODogSW52YWxpZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSIKK21zZ3N0ciAiVzE4OiDuxcTP0NXT1MnN2cog08nN18/MINcgyc3Fzskgx9LV0NDZIgorCisjOiB0YWcuYzo5MAorbXNnaWQgIkU1NTU6IGF0IGJvdHRvbSBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTU6INfOydrVINPUxcvBIM3F1M/LIgorCisjOiB0YWcuYzo5MQorbXNnaWQgIkU1NTY6IGF0IHRvcCBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTY6IM7B18XSyNUg09TFy8EgzcXUz8siCisKKyM6IHRhZy5jOjQxMgorbXNnaWQgIkU0MjU6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI1OiDuxdfP2s3P1s7PINDF0sXK1Mkg1yDQz9rJw8nAIMTPINDF0tfPyiDTz9fQwcTBwN3FyiDNxdTLySIKKworIzogdGFnLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjY6IHRhZyBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDI2OiDtxdTLwSDOxSDOwcrExc7BOiAlcyIKKworIzogdGFnLmM6NTgzCittc2dpZCAiICAjIHByaSBraW5kIHRhZyIKK21zZ3N0ciAiICAjINDSySDUydAgIM3F1MvBIgorCisjOiB0YWcuYzo1ODYKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgIsbBysxcbiIKKworIy4KKyMuICogQXNrIHRvIHNlbGVjdCBhIHRhZyBmcm9tIHRoZSBsaXN0LgorIy4gKiBXaGVuIHVzaW5nICI6c2lsZW50IiBhc3N1bWUgdGhhdCA8Q1I+IHdhcyBlbnRlcmVkLgorIy4KKyM6IHRhZy5jOjc0NAorbXNnaWQgIkVudGVyIG5yIG9mIGNob2ljZSAoPENSPiB0byBhYm9ydCk6ICIKK21zZ3N0ciAi99nCxdLJ1MUgztXWztnKIM7PzcXSICg8Q1I+IMTM0SDP1MvB2sEpOiIKKworIzogdGFnLmM6Nzg0Cittc2dpZCAiRTQyNzogVGhlcmUgaXMgb25seSBvbmUgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI3OiDl09TYINTPzNjLzyDPxM7BINPP19DBxMHA3cHRIM3F1MvBIgorCisjOiB0YWcuYzo3ODYKK21zZ2lkICJFNDI4OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI4OiDuxdfP2s3P1s7PINDF0sXK1Mkg1yDQz9rJw8nAINrBINDP08zFxM7FyiDTz9fQwcTBwN3FyiDNxdTLz8oiCisKKyM6IHRhZy5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi5sHKzCBcIiVzXCIgzsUg09XdxdPU19XF1CIKKworIy4gR2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgdGFncworIzogdGFnLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAlZCBvZiAlZCVzIgorbXNnc3RyICLNxdTLwSAlZCDJ2iAlZCVzIgorCisjOiB0YWcuYzo4MjYKK21zZ2lkICIgb3IgbW9yZSIKK21zZ3N0ciAiIMkgws/MxcUiCisKKyM6IHRhZy5jOjgyOAorbXNnaWQgIiAgVXNpbmcgdGFnIHdpdGggZGlmZmVyZW50IGNhc2UhIgorbXNnc3RyICIg6dPQz8zY2tXF1NPRIM3F1MvBINMg08nN18/Mwc3JINcgxNLVx8/NINLFx8nT1NLFISIKKworIzogdGFnLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Mjk6IEZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFNDI5OiDmwcrMIFwiJXNcIiDOxSDT1d3F09TX1cXUIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRhZy5jOjk0MQorbXNnaWQgIiIKKyJcbiIKKyIgICMgVE8gdGFnICAgICAgICAgRlJPTSBsaW5lICBpbiBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgICMg6yAgzcXUy8UgICAgICAg7/QgICDT1NIuICDXIMbByszFL9TFy9PUxSIKKworIzogdGFnLmM6MTM2MworIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICLwz8nTyyDXIMbByszFIM3F1M/LICVzIgorCisjOiB0YWcuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzA6IFRhZyBmaWxlIHBhdGggdHJ1bmNhdGVkIGZvciAlc1xuIgorbXNnc3RyICJFNDMwOiDw1dTYIMsgxsHKzNUgzcXUz8sgJXMgz8LSxdrBzlxuIgorCisjOiB0YWcuYzoyMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzE6IEZvcm1hdCBlcnJvciBpbiB0YWdzIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDMxOiDv28nCy8Egxs/SzcHUwSDXIMbByszFIM3F1M/LIFwiJXNcIiIKKworIzogdGFnLmM6MjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJCZWZvcmUgYnl0ZSAlbGQiCittc2dzdHIgIvDF0sXEIMLBytTPzSAlbGQiCisKKyM6IHRhZy5jOjIyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMjogVGFncyBmaWxlIG5vdCBzb3J0ZWQ6ICVzIgorbXNnc3RyICJFNDMyOiDmwcrMIM3F1M/LIM7FIM/U08/S1MnSz9fBzjogJXMiCisKKyMuIG5ldmVyIG9wZW5lZCBhbnkgdGFncyBmaWxlCisjOiB0YWcuYzoyMjgwCittc2dpZCAiRTQzMzogTm8gdGFncyBmaWxlIgorbXNnc3RyICJFNDMzOiDmwcrMIM3F1M/LIM7FIM/CzsHS1dbFziIKKworIzogdGFnLmM6MzAxNgorbXNnaWQgIkU0MzQ6IENhbid0IGZpbmQgdGFnIHBhdHRlcm4iCittc2dzdHIgIkU0MzQ6IO7FIM7BysTFziDbwcLMz84gzcXUy8kiCisKKyM6IHRhZy5jOjMwMjcKK21zZ2lkICJFNDM1OiBDb3VsZG4ndCBmaW5kIHRhZywganVzdCBndWVzc2luZyEiCittc2dzdHIgIkU0MzU6IO3F1MvBIM7FIM7BysTFzsEsINDZ1MHFzdPRINXHwcTB1NghIgorCisjOiB0ZXJtLmM6MTc1OQorbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiJyDOxSDJ2tfF09TFzi4g5M/T1NXQztkg19PU0s/Fzs7ZxSDUxdLNyc7BzNk6IgorCisjOiB0ZXJtLmM6MTc4MworbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAi0M8g1c3PzN7BzsnAICciCisKKyM6IHRlcm0uYzoyMTQxCittc2dpZCAiRTU1NzogQ2Fubm90IG9wZW4gdGVybWNhcCBmaWxlIgorbXNnc3RyICJFNTU3OiDuxdfP2s3P1s7PIM/Uy9LZ1NggxsHKzCB0ZXJtY2FwIgorCisjOiB0ZXJtLmM6MjE0NQorbXNnaWQgIkU1NTg6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtaW5mbyIKK21zZ3N0ciAiRTU1ODog9yB0ZXJtaW5mbyDOxdQg2sHQydPJIM/CINzUz80g1MXSzcnOwczFIgorCisjOiB0ZXJtLmM6MjE0NworbXNnaWQgIkU1NTk6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNTU5OiD3IHRlcm1jYXAgzsXUINrB0MnTySDPwiDc1M/NINTF0s3JzsHMxSIKKworIzogdGVybS5jOjIzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzNjogTm8gXCIlc1wiIGVudHJ5IGluIHRlcm1jYXAiCittc2dzdHIgIkU0MzY6IPcgdGVybWNhcCDOxdQg2sHQydPJIFwiJXNcIiIKKworIzogdGVybS5jOjI3ODAKK21zZ2lkICJFNDM3OiB0ZXJtaW5hbCBjYXBhYmlsaXR5IFwiY21cIiByZXF1aXJlZCIKK21zZ3N0ciAiRTQzNzog1NLFwtXF1NPRINPQz9PPws7P09TYINTF0s3JzsHMwSBcImNtXCIiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGVybS5jOjQ5OTAKK21zZ2lkICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIGtleXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIOvOz9DLySDUxdLNyc7BzMEgLS0tIgorCisjOiB1aS5jOjI1OAorbXNnaWQgIm5ldyBzaGVsbCBzdGFydGVkXG4iCittc2dzdHIgItrB0NXTyyDOz9fPyiDPws/Mz97LyVxuIgorCisjOiB1aS5jOjE4NDEKK21zZ2lkICJWaW06IEVycm9yIHJlYWRpbmcgaW5wdXQsIGV4aXRpbmcuLi5cbiIKK21zZ3N0ciAiVmltOiDv28nCy8Eg3tTFzsnRINfXz8TBLCDX2cjPxC4uLlxuIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogdW5kby5jOjQwNQorbXNnaWQgIk5vIHVuZG8gcG9zc2libGU7IGNvbnRpbnVlIGFueXdheSIKK21zZ3N0ciAi79TNxc7BIM7F18/azc/WzsE7INDSz8TPzNbB1Ngg19nQz8zOxc7JxSIKKworIzogdW5kby5jOjU2MQorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IM7F0NLB18nM2M7ZxSDOz83F0sEg09TSz8siCisKKyM6IHVuZG8uYzo3NTcKK21zZ2lkICIxIGNoYW5nZSIKK21zZ3N0ciAi5cTJztPU18XOzs/FIMnazcXOxc7JxSIKKworIzogdW5kby5jOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhbmdlcyIKK21zZ3N0ciAi6drNxc7FzsnKOiAlbGQiCisKKyM6IHVuZG8uYzo4MTIKK21zZ2lkICJFNDM5OiB1bmRvIGxpc3QgY29ycnVwdCIKK21zZ3N0ciAiRTQzOTog8M/X0sXWxKPOINPQydPPyyDP1M3FztkiCisKKyM6IHVuZG8uYzo4NDQKK21zZ2lkICJFNDQwOiB1bmRvIGxpbmUgbWlzc2luZyIKK21zZ3N0ciAiRTQ0MDog0M/UxdLRzsEg09TSz8vBIM/UzcXO2SIKKworIy4gT25seSBNUyBWQyA0LjEgYW5kIGVhcmxpZXIgY2FuIGRvIFdpbjMycworIzogdmVyc2lvbi5jOjcyMQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIvfF0tPJ0SDTIMfSwcbJ3sXTy8nNIMnO1MXSxsXK08/NIMTM0SBNUy1XaW5kb3dzIDE2LzMyIMLJ1CIKKworIzogdmVyc2lvbi5jOjcyMworbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIvfF0tPJ0SDTIMfSwcbJ3sXTy8nNIMnO1MXSxsXK08/NIMTM0SBNUy1XaW5kb3dzIDMyIMLJ1CIKKworIzogdmVyc2lvbi5jOjcyNgorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiINcg0sXWyc3FIFdpbjMycyIKKworIzogdmVyc2lvbi5jOjcyOAorbXNnaWQgIiB3aXRoIE9MRSBzdXBwb3J0IgorbXNnc3RyICIg0yDQz8TExdLWy8/KIE9MRSIKKworIzogdmVyc2lvbi5jOjczMQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBjb25zb2xlIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyLrz87Tz8zYzsHRINfF0tPJ0SDEzNEgTVMtV2luZG93cyAzMiDCydQiCisKKyM6IHZlcnNpb24uYzo3MzUKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNiBiaXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIvfF0tPJ0SDEzNEgTVMtV2luZG93cyAxNiDCydQiCisKKyM6IHZlcnNpb24uYzo3MzkKK21zZ2lkICIiCisiXG4iCisiMzIgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisi98XS08nRIMTM0SBNUy1ET1MgMzIgwsnUIgorCisjOiB2ZXJzaW9uLmM6NzQxCittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIvfF0tPJ0SDEzNEgTVMtRE9TIDE2IMLJ1CIKKworIzogdmVyc2lvbi5jOjc0NworbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisi98XS08nRIMTM0SBNYWNPUyBYICh1bml4KSIKKworIzogdmVyc2lvbi5jOjc0OQorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyL3xdLTydEgxMzRIE1hY09TIFgiCisKKyM6IHZlcnNpb24uYzo3NTIKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIvfF0tPJ0SDEzNEgTWFjT1MiCisKKyM6IHZlcnNpb24uYzo3NTcKK21zZ2lkICIiCisiXG4iCisiUklTQyBPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisi98XS08nRIMTM0SBSSVNDIE9TIgorCisjOiB2ZXJzaW9uLmM6NzY3Cittc2dpZCAiIgorIlxuIgorIkluY2x1ZGVkIHBhdGNoZXM6ICIKK21zZ3N0ciAiIgorIlxuIgorIvrB0MzB1MvJOiAiCisKKyM6IHZlcnNpb24uYzo3OTMgdmVyc2lvbi5jOjExNjEKK21zZ2lkICJNb2RpZmllZCBieSAiCittc2dzdHIgIvMgydrNxc7FzsnRzcksINfOxdOjzs7ZzckgIgorCisjOiB2ZXJzaW9uLmM6ODAwCittc2dpZCAiIgorIlxuIgorIkNvbXBpbGVkICIKK21zZ3N0ciAiIgorIlxuIgorIvPLz83QyczJ0s/Xwc4gIgorCisjOiB2ZXJzaW9uLmM6ODAzCittc2dpZCAiYnkgIgorbXNnc3RyICIgIgorCisjOiB2ZXJzaW9uLmM6ODE1Cittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyLvx9LPzc7B0SDXxdLTydEgIgorCisjOiB2ZXJzaW9uLmM6ODE4Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIuLPzNjbwdEg18XS08nRICIKKworIzogdmVyc2lvbi5jOjgyMQorbXNnaWQgIiIKKyJcbiIKKyJOb3JtYWwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyLvwtnezsHRINfF0tPJ0SAiCisKKyM6IHZlcnNpb24uYzo4MjQKK21zZ2lkICIiCisiXG4iCisiU21hbGwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyLtwczB0SDXxdLTydEgIgorCisjOiB2ZXJzaW9uLmM6ODI2Cittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyL3xdLTydEgXCLr0s/IwVwiICIKKworIzogdmVyc2lvbi5jOjgzMgorbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAiwsXaIMfSwcbJ3sXTy8/HzyDJztTF0sbFytPBLiIKKworIzogdmVyc2lvbi5jOjgzNworbXNnaWQgIndpdGggR1RLMi1HTk9NRSBHVUkuIgorbXNnc3RyICLTIMfSwcbJ3sXTy8nNIMnO1MXSxsXK08/NIEdUSzItR05PTUUuIgorCisjOiB2ZXJzaW9uLmM6ODM5Cittc2dpZCAid2l0aCBHVEstR05PTUUgR1VJLiIKK21zZ3N0ciAi0yDH0sHGyd7F08vJzSDJztTF0sbFytPPzSBHVEstR05PTUUuIgorCisjOiB2ZXJzaW9uLmM6ODQzCittc2dpZCAid2l0aCBHVEsyIEdVSS4iCittc2dzdHIgItMgx9LBxsnexdPLyc0gyc7UxdLGxcrTz80gR1RLMi4iCisKKyM6IHZlcnNpb24uYzo4NDUKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICLTIMfSwcbJ3sXTy8nNIMnO1MXSxsXK08/NIEdUSy4iCisKKyM6IHZlcnNpb24uYzo4NTAKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICLTIMfSwcbJ3sXTy8nNIMnO1MXSxsXK08/NIFgxMS1Nb3RpZi4iCisKKyM6IHZlcnNpb24uYzo4NTQKK21zZ2lkICJ3aXRoIFgxMS1uZVh0YXcgR1VJLiIKK21zZ3N0ciAi0yDH0sHGyd7F08vJzSDJztTF0sbFytPPzSBYMTEtbmVYdGF3LiIKKworIzogdmVyc2lvbi5jOjg1NgorbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICLTIMfSwcbJ3sXTy8nNIMnO1MXSxsXK08/NIFgxMS1BdGhlbmEuIgorCisjOiB2ZXJzaW9uLmM6ODYwCittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgItMgx9LBxsnexdPLyc0gyc7UxdLGxcrTz80gQmVPUy4iCisKKyM6IHZlcnNpb24uYzo4NjMKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICLTIMfSwcbJ3sXTy8nNIMnO1MXSxsXK08/NIFBob3Rvbi4iCisKKyM6IHZlcnNpb24uYzo4NjYKK21zZ2lkICJ3aXRoIEdVSS4iCittc2dzdHIgItMgx9LBxsnexdPLyc0gyc7UxdLGxcrTz80uIgorCisjOiB2ZXJzaW9uLmM6ODY5Cittc2dpZCAid2l0aCBDYXJib24gR1VJLiIKK21zZ3N0ciAi0yDH0sHGyd7F08vJzSDJztTF0sbFytPPzSBDYXJib24uIgorCisjOiB2ZXJzaW9uLmM6ODcyCittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICLTIMfSwcbJ3sXTy8nNIMnO1MXSxsXK08/NIENvY29hLiIKKworIzogdmVyc2lvbi5jOjg3NQorbXNnaWQgIndpdGggKGNsYXNzaWMpIEdVSS4iCittc2dzdHIgItMgy8zB09PJ3sXTy8nNIMfSwcbJ3sXTy8nNIMnO1MXSxsXK08/NLiIKKworIzogdmVyc2lvbi5jOjg4NgorbXNnaWQgIiAgRmVhdHVyZXMgaW5jbHVkZWQgKCspIG9yIG5vdCAoLSk6XG4iCittc2dzdHIgIiAg98vMwN6jzs7ZxSAoKykgySDP1MvMwN6jzs7ZxSAoLSkgz9PPwsXOzs/T1Mk6XG4iCisKKyM6IHZlcnNpb24uYzo4OTgKK21zZ2lkICIgICBzeXN0ZW0gdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgICAgIM/C3cXTydPUxc3O2cogxsHKzCB2aW1yYzogXCIiCisKKyM6IHZlcnNpb24uYzo5MDMKK21zZ2lkICIgICAgIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgINDPzNjaz9fB1MXM2NPLycogxsHKzCB2aW1yYzogXCIiCisKKyM6IHZlcnNpb24uYzo5MDgKK21zZ2lkICIgMm5kIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAg19TP0s/KINDPzNjaz9fB1MXM2NPLycogxsHKzCB2aW1yYzogXCIiCisKKyM6IHZlcnNpb24uYzo5MTMKK21zZ2lkICIgM3JkIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAg1NLF1MnKINDPzNjaz9fB1MXM2NPLycogxsHKzCB2aW1yYzogXCIiCisKKyM6IHZlcnNpb24uYzo5MTgKK21zZ2lkICIgICAgICB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgICDQz8zY2s/XwdTFzNjTy8nKIMbByswgZXhyYzogXCIiCisKKyM6IHZlcnNpb24uYzo5MjMKK21zZ2lkICIgIDJuZCB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgINfUz9LPyiDQz8zY2s/XwdTFzNjTy8nKIMbByswgZXhyYzogXCIiCisKKyM6IHZlcnNpb24uYzo5MjkKK21zZ2lkICIgIHN5c3RlbSBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgICAgz8LdxdPJ09TFzc7ZyiDGwcrMIGd2aW1yYzogXCIiCisKKyM6IHZlcnNpb24uYzo5MzMKK21zZ2lkICIgICAgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAg0M/M2NrP18HUxczY08vJyiDGwcrMIGd2aW1yYzogXCIiCisKKyM6IHZlcnNpb24uYzo5MzcKK21zZ2lkICIybmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiDX1M/Sz8og0M/M2NrP18HUxczY08vJyiDGwcrMIGd2aW1yYzogXCIiCisKKyM6IHZlcnNpb24uYzo5NDIKK21zZ2lkICIzcmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiDU0sXUycog0M/M2NrP18HUxczY08vJyiDGwcrMIGd2aW1yYzogXCIiCisKKyM6IHZlcnNpb24uYzo5NDkKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgICAgICDPwt3F08nT1MXNztnKIMbByswgzcXOwDogXCIiCisKKyM6IHZlcnNpb24uYzo5NTcKK21zZ2lkICIgIGZhbGwtYmFjayBmb3IgJFZJTTogXCIiCittc2dzdHIgIiAgICAgICAgICDazsHexc7JxSAkVklNINDPINXNz8zewc7JwDogXCIiCisKKyM6IHZlcnNpb24uYzo5NjMKK21zZ2lkICIgZi1iIGZvciAkVklNUlVOVElNRTogXCIiCittc2dzdHIgIiAgINrOwd7FzsnFICRWSU1SVU5USU1FINDPINXNz8zewc7JwDogXCIiCisKKyM6IHZlcnNpb24uYzo5NjcKK21zZ2lkICJDb21waWxhdGlvbjogIgorbXNnc3RyICLwwdLBzcXU0tkgy8/N0MnM0cPJyTogIgorCisjOiB2ZXJzaW9uLmM6OTczCittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAi68/N0MnM0dTP0jogIgorCisjOiB2ZXJzaW9uLmM6OTc4Cittc2dpZCAiTGlua2luZzogIgorbXNnc3RyICLzws/Sy8E6ICIKKworIzogdmVyc2lvbi5jOjk4MworbXNnaWQgIiAgREVCVUcgQlVJTEQiCittc2dzdHIgIiAg7/Ts4eTv/u7h8SDz4u/y6+EiCisKKyM6IHZlcnNpb24uYzoxMDIyCittc2dpZCAiVklNIC0gVmkgSU1wcm92ZWQiCittc2dzdHIgIlZJTSA6OjogVmkgSU1wcm92ZWQgKPXM1d7bxc7O2cogVmkpIDo6OiDy1dPTy8HRINfF0tPJ0SIKKworIzogdmVyc2lvbi5jOjEwMjQKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAi18XS08nRICIKKworIzogdmVyc2lvbi5jOjEwMjUKK21zZ2lkICJieSBCcmFtIE1vb2xlbmFhciBldCBhbC4iCittc2dzdHIgIuLSwc0g7c/PzMXOwcHSIMkgxNLVx8nFIgorCisjOiB2ZXJzaW9uLmM6MTAyOQorbXNnaWQgIlZpbSBpcyBvcGVuIHNvdXJjZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUiCittc2dzdHIgIlZpbSDc1M8g09fPws/Ezs8g0sHT0NLP09TSwc7Rxc3B0SDQ0s/H0sHNzcEg0yDP1MvS2dTZzSDLz8TPzSIKKworIzogdmVyc2lvbi5jOjEwMzEKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAi4sXEztnNIMTF1NHNINcg9cfBzsTFIM7V1s7BINfB28Eg0M/Nz93YISIKKworIzogdmVyc2lvbi5jOjEwMzIKK21zZ2lkICJ0eXBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICLOwcLF0snUxSA6aGVscCBpY2NmPEVudGVyPiAgICAgICDEzNEgxM/Qz8zOydTFzNjOz8ogyc7Gz9LNwcPJySIKKworIzogdmVyc2lvbi5jOjEwMzQKK21zZ2lkICJ0eXBlICA6cTxFbnRlcj4gICAgICAgICAgICAgICB0byBleGl0ICAgICAgICAgIgorbXNnc3RyICLOwcLF0snUxSA6cTxFbnRlcj4gICAgICAgICAgICAgICDe1M/C2SDX2crUySDJ2iDQ0s/H0sHNzdkgICAgICIKKworIzogdmVyc2lvbi5jOjEwMzUKK21zZ2lkICJ0eXBlICA6aGVscDxFbnRlcj4gIG9yICA8RjE+ICBmb3Igb24tbGluZSBoZWxwIgorbXNnc3RyICLOwcLF0snUxSA6aGVscDxFbnRlcj4gyczJIDxGMT4gICDEzNEg0M/M1d7FzsnRINPQ0sHXy8kgICAgICAgICIKKworIzogdmVyc2lvbi5jOjEwMzYKK21zZ2lkICJ0eXBlICA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICBmb3IgdmVyc2lvbiBpbmZvIgorbXNnc3RyICLOwcLF0snUxSA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICDe1M/C2SDV2s7B1Nggz8Ig3NTPyiDXxdLTyckgICIKKworIzogdmVyc2lvbi5jOjEwMzkKK21zZ2lkICJSdW5uaW5nIGluIFZpIGNvbXBhdGlibGUgbW9kZSIKK21zZ3N0ciAi8sHCz9TBINcgVmkt08/XzcXT1MnNz80g0sXWyc3FIgorCisjOiB2ZXJzaW9uLmM6MTA0MAorbXNnaWQgInR5cGUgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIGZvciBWaW0gZGVmYXVsdHMiCittc2dzdHIgIs7BwsXSydTFIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIMTM0SDQxdLFyM/EwSDXINLF1snNIFZpbSAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTA0MQorbXNnaWQgInR5cGUgIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IGZvciBpbmZvIG9uIHRoaXMiCittc2dzdHIgIs7BwsXSydTFIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IMTM0SDEz9DPzM7J1MXM2M7PyiDJzsbP0s3Bw8nJIgorCisjOiB2ZXJzaW9uLmM6MTA1NgorbXNnaWQgIm1lbnUgIEhlbHAtPk9ycGhhbnMgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIs3FzsAg89DSwdfLwS0+88nSz9TZICAgICAgICAgICAgIMTM0SDQz8zV3sXOydEgyc7Gz9LNwcPJySAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTA1OAorbXNnaWQgIlJ1bm5pbmcgbW9kZWxlc3MsIHR5cGVkIHRleHQgaXMgaW5zZXJ0ZWQiCittc2dzdHIgIuLF2tLF1snNzsHRINLBws/U2Swg19PUwdfLwSDX18XEo87Oz8fPINTFy9PUwSIKKworIzogdmVyc2lvbi5jOjEwNTkKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBJbnNlcnQgTW9kZSAgIgorbXNnc3RyICLNxc7AIPDSwdfLwS0+78LdycUg7sHT1NLPysvJLT7yxdbJzSD309TB18vJICAgICAgICAgICAgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTA2MAorbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0d28gbW9kZXMgICAgICAiCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMTM0SDE19XIINLF1snNz9cgICAgICAgICAgICAgICAiCisKKyM6IHZlcnNpb24uYzoxMDY0Cittc2dpZCAibWVudSAgRWRpdC0+R2xvYmFsIFNldHRpbmdzLT5Ub2dnbGUgVmkgQ29tcGF0aWJsZSIKK21zZ3N0ciAizcXOwCDw0sHXy8EtPu/C3cnFIO7B09TSz8rLyS0+88/XzcXT1MnNz9PU2CDTIFZpICAgICAgICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjEwNjUKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgVmltIGRlZmF1bHRzICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDEzNEg0MXSxcjPxMEg1yDSxdbJzSBWaW0gICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTExMgorbXNnaWQgIlNwb25zb3IgVmltIGRldmVsb3BtZW50ISIKK21zZ3N0ciAi8M/Nz8fJ1MUg1yDSwdrSwcLP1MvFIFZpbSEiCisKKyM6IHZlcnNpb24uYzoxMTEzCittc2dpZCAiQmVjb21lIGEgcmVnaXN0ZXJlZCBWaW0gdXNlciEiCittc2dzdHIgIvPUwc7Y1MUg2sHSxcfJ09TSydLP18HOztnNINDPzNjaz9fB1MXMxc0gVmltISIKKworIzogdmVyc2lvbi5jOjExMTYKK21zZ2lkICJ0eXBlICA6aGVscCBzcG9uc29yPEVudGVyPiAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICLOwcLF0snUxSA6aGVscCBzcG9uc29yPEVudGVyPiAgICDEzNEg0M/M1d7FzsnRIMnOxs/SzcHDyckgICAgICIKKworIzogdmVyc2lvbi5jOjExMTcKK21zZ2lkICJ0eXBlICA6aGVscCByZWdpc3RlcjxFbnRlcj4gICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICLOwcLF0snUxSA6aGVscCByZWdpc3RlcjxFbnRlcj4gICDEzNEg0M/M1d7FzsnRIMnOxs/SzcHDyckgICAgICIKKworIzogdmVyc2lvbi5jOjExMTkKK21zZ2lkICJtZW51ICBIZWxwLT5TcG9uc29yL1JlZ2lzdGVyICBmb3IgaW5mb3JtYXRpb24gICAgIgorbXNnc3RyICLNxc7AIPPQ0sHXy8EtPvDPzc/d2C/yxcfJ09TSwcPJ0SDEzNEg0M/M1d7FzsnRIMnOxs/SzcHDyckgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTEyOQorbXNnaWQgIldBUk5JTkc6IFdpbmRvd3MgOTUvOTgvTUUgZGV0ZWN0ZWQiCittc2dzdHIgIvDy5eT18PLl9uTl7unlOiDPws7B0tXWxc7BIFdpbmRvd3MgOTUvOTgvTUUiCisKKyM6IHZlcnNpb24uYzoxMTMyCittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAizsHCxdLJ1MUgOmhlbHAgd2luZG93czk1PEVudGVyPiAgxMzRINDPzNXexc7J0SDJzsbP0s3Bw8nJICAgICAiCisKKyM6IHdpbmRvdy5jOjIwMworbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiDvy87PINDSxcTQ0s/Tzc/U0sEgz9TT1dTT1NfVxdQiCisKKyM6IHdpbmRvdy5jOjU4MQorbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IO/Lzs8gzsUgzc/WxdQgwtnU2CDPxM7P19LFzcXOzs8g08zF18Eg19fF0sjVIMkg09DSwdfBINfOydrVIgorCisjOiB3aW5kb3cuYzoxMzQwCittc2dpZCAiRTQ0MzogQ2Fubm90IHJvdGF0ZSB3aGVuIGFub3RoZXIgd2luZG93IGlzIHNwbGl0IgorbXNnc3RyICJFNDQzOiDuxdfP2s3P1s7PINDPzcXO0dTYIM3F09TBzcksINDPy8EgxNLVx8/FIM/Lzs8g0sHaxMXMxc7PIgorCisjOiB3aW5kb3cuYzoxODM2Cittc2dpZCAiRTQ0NDogQ2Fubm90IGNsb3NlIGxhc3Qgd2luZG93IgorbXNnc3RyICJFNDQ0OiDuxczY2tEg2sHL0tnU2CDQz9PMxcTOxcUgz8vOzyIKKworIzogd2luZG93LmM6MjU2NworbXNnaWQgIkFscmVhZHkgb25seSBvbmUgd2luZG93IgorbXNnc3RyICLuwSDcy9LBzsUg19PFx88gz8TOzyDPy87PIgorCisjOiB3aW5kb3cuYzoyNjE0Cittc2dpZCAiRTQ0NTogT3RoZXIgd2luZG93IGNvbnRhaW5zIGNoYW5nZXMiCittc2dzdHIgIkU0NDU6IPcgxNLVx8/NIM/LzsUgxdPU2CDOxdPPyNLBzqPOztnFIMnazcXOxc7J0SIKKworIzogd2luZG93LmM6NDQ4MAorbXNnaWQgIkU0NDY6IE5vIGZpbGUgbmFtZSB1bmRlciBjdXJzb3IiCittc2dzdHIgIkU0NDY6IO7F1CDJzcXOySDGwcrMwSDXINDP2snDyckgy9XS08/SwSIKKworIzogd2luZG93LmM6NDU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ3OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkU0NDc6IObByswgXCIlc1wiIM7FIM7BysTFziDQzyDJ2tfF09TO2c0g0NXU0c0iCisKKyM6IGlmX3BlcmwueHM6MzI2IGdsb2JhbHMuaDoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzA6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgJXMiCittc2dzdHIgIkUzNzA6IO7F18/azc/Wzs8g2sHH0tXaydTYIMLJwszJz9TFy9UgJXMiCisKKyM6IGlmX3BlcmwueHM6NTU0Cittc2dpZCAiU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFBlcmwgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIuna18nOydTFLCDEwc7OwdEgy8/Nwc7EwSDP1MvMwN7FzsE6IM7F18/azc/Wzs8g2sHH0tXaydTYIMLJwszJz9TFy9UgUGVybCIKKworIzogaWZfcGVybC54czo2MDcKK21zZ2lkICJFMjk5OiBQZXJsIGV2YWx1YXRpb24gZm9yYmlkZGVuIGluIHNhbmRib3ggd2l0aG91dCB0aGUgU2FmZSBtb2R1bGUiCittc2dzdHIgIiIKKyJFMjk5OiDuxSDEz9DV08vBxdTT0SDX2d7J08zFzsnFIFBlcmwg1yDQxdPP3s7Jw8UgwsXaIM3PxNXM0SDCxdrP0MHTzs/T1MkiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTgzCittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICLyxcTBy9TJ0s/XwdTYINcgJtLB2s7ZyCBWaW0twcgiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NTg5Cittc2dpZCAiRWRpdCB3aXRoIHNpbmdsZSAmVmltIgorbXNnc3RyICLyxcTBy9TJ0s/XwdTYINcgJs/Ezs/NIFZpbSIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1OTgKK21zZ2lkICImRGlmZiB3aXRoIFZpbSIKK21zZ3N0ciAiJvPSwdfOydTYINMg0M/Nz93YwCBWaW0iCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NjExCittc2dpZCAiRWRpdCB3aXRoICZWaW0iCittc2dzdHIgIvLFJsTBy9TJ0s/XwdTYINMg0M/Nz93YwCBWaW0iCisKKyMuIE5vdyBjb25jYXRlbmF0ZQorIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo2MzMKK21zZ2lkICJFZGl0IHdpdGggZXhpc3RpbmcgVmltIC0gJiIKK21zZ3N0ciAi8sXEwcvUydLP18HU2CDXINrB0NXdxc7Oz80gVmltIC0gJiIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo3NDYKK21zZ2lkICJFZGl0cyB0aGUgc2VsZWN0ZWQgZmlsZShzKSB3aXRoIFZpbSIKK21zZ3N0ciAi8sXEwcvUydLP18HU2CDX2cTFzMXOztnFIMbByszZINMg0M/Nz93YwCBWaW0iCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg1IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcHJvY2VzczogQ2hlY2sgaWYgZ3ZpbSBpcyBpbiB5b3VyIHBhdGghIgorbXNnc3RyICLv28nCy8Eg08/axMHOydEg0NLPw8XT08E6INDSz9fF0tjUxSDEz9PU1dDOz9PU2CBndmltINcg0NXUySEiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg2IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTAwIEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY3Cittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgIs/bycLLwSBndmltZXh0LmRsbCIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTkKK21zZ2lkICJQYXRoIGxlbmd0aCB0b28gbG9uZyEiCittc2dzdHIgIvPMydvLz80gxMzJzs7ZyiDQ1dTYISIKKworIzogZ2xvYmFscy5oOjEwMjIKK21zZ2lkICItLU5vIGxpbmVzIGluIGJ1ZmZlci0tIgorbXNnc3RyICItLSDuxdQg09TSz8sg1yDC1cbF0sUgLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTE4NQorbXNnaWQgIkU0NzA6IENvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiRTQ3MDog99nQz8zOxc7JxSDLz83BzsTZINDSxdLXwc7PIgorCisjOiBnbG9iYWxzLmg6MTE4NgorbXNnaWQgIkU0NzE6IEFyZ3VtZW50IHJlcXVpcmVkIgorbXNnc3RyICJFNDcxOiD00sXC1cXU09Eg1cvB2sHU2CDQwdLBzcXU0iIKKworIzogZ2xvYmFscy5oOjExODcKK21zZ2lkICJFMTA6IFxcIHNob3VsZCBiZSBmb2xsb3dlZCBieSAvLCA/IG9yICYiCittc2dzdHIgIkUxMDog8M/TzMUgXFwgxM/M1sXOIMnE1Mkg08nN18/MIC8sID8gyczJICYiCisKKyM6IGdsb2JhbHMuaDoxMTg5Cittc2dpZCAiRTExOiBJbnZhbGlkIGluIGNvbW1hbmQtbGluZSB3aW5kb3c7IDxDUj4gZXhlY3V0ZXMsIENUUkwtQyBxdWl0cyIKK21zZ3N0ciAiIgorIkUxMTog7sXEz9DV09TJzc8g1yDPy87FIMvPzcHOxM7PyiDT1NLPy8k7IDxDUj4g19nQz8zOxc7JxSwgQ1RSTC1DINfZyM/EIgorCisjOiBnbG9iYWxzLmg6MTE5MQorbXNnaWQgIkUxMjogQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaCIKK21zZ3N0ciAiIgorIkUxMjog68/Nwc7EwSDOxSDEz9DV08vBxdTT0SDXIGV4cmMvdmltcmMg1yDUxcvV3cXNIMvB1MHMz8fFIMnMySDQz8nTy8UgzcXUz8siCisKKyM6IGdsb2JhbHMuaDoxMTkzCittc2dpZCAiRTE3MTogTWlzc2luZyA6ZW5kaWYiCittc2dzdHIgIkUxNzE6IO/U09XU09TX1cXUIMvPzcHOxMEgOmVuZGlmIgorCisjOiBnbG9iYWxzLmg6MTE5NAorbXNnaWQgIkU2MDA6IE1pc3NpbmcgOmVuZHRyeSIKK21zZ3N0ciAiRTYwMDog79TT1dTT1NfVxdQgy8/Nwc7EwSA6ZW5kdHJ5IgorCisjOiBnbG9iYWxzLmg6MTE5NQorbXNnaWQgIkUxNzA6IE1pc3NpbmcgOmVuZHdoaWxlIgorbXNnc3RyICJFMTcwOiDv1NPV1NPU19XF1CDLz83BzsTBIDplbmR3aGlsZSIKKworIzogZ2xvYmFscy5oOjExOTYKK21zZ2lkICJFNTg4OiA6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODg6IOvPzcHOxMEgOmVuZHdoaWxlIMLF2iDQwdLOz8ogy8/Nwc7E2SA6d2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMTk4Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IObByswg09XdxdPU19XF1CAoxMzRINDF0sXawdDJ08kgxM/CwdfY1MUgISkiCisKKyM6IGdsb2JhbHMuaDoxMTk5Cittc2dpZCAiRTQ3MjogQ29tbWFuZCBmYWlsZWQiCittc2dzdHIgIkU0NzI6IO7FINXEwczP09gg19nQz8zOydTYIMvPzcHOxNUiCisKKyM6IGdsb2JhbHMuaDoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzQ6IFVua25vd24gZm9udHNldDogJXMiCittc2dzdHIgIkUyMzQ6IO7FydrXxdPUztnKINvSycbUz9fPyiDOwcLP0jogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IFVua25vd24gZm9udDogJXMiCittc2dzdHIgIkUyMzU6IO7FydrXxdPUztnKINvSycbUOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNjogRm9udCBcIiVzXCIgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJFMjM2OiD70snG1CBcIiVzXCIgzsUg0dfM0cXU09Egzc/Oz9vJ0snOztnNINvSycbUz80iCisKKyM6IGdsb2JhbHMuaDoxMjEwCittc2dpZCAiRTQ3MzogSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIkU0NzM6IPfO1dTSxc7O0dEgz9vJwsvBIgorCisjOiBnbG9iYWxzLmg6MTIxMQorbXNnaWQgIkludGVycnVwdGVkIgorbXNnc3RyICLw0sXS18HOzyIKKworIzogZ2xvYmFscy5oOjEyMTIKK21zZ2lkICJFMTQ6IEludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiRTE0OiDuxcTP0NXT1MnN2cogwcTSxdMiCisKKyM6IGdsb2JhbHMuaDoxMjEzCittc2dpZCAiRTQ3NDogSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAiRTQ3NDog7sXEz9DV09TJzdnKIMHSx9XNxc7UIgorCisjOiBnbG9iYWxzLmg6MTIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDc1OiBJbnZhbGlkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQ3NTog7sXEz9DV09TJzdnKIMHSx9XNxc7UOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246ICVzIgorbXNnc3RyICJFMTU6IO7FxM/Q1dPUyc3PxSDX2dLB1sXOycU6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIxOAorbXNnaWQgIkUxNjogSW52YWxpZCByYW5nZSIKK21zZ3N0ciAiRTE2OiDuxcTP0NXT1MnN2cogxMnB0MHaz84iCisKKyM6IGdsb2JhbHMuaDoxMjE5Cittc2dpZCAiRTQ3NjogSW52YWxpZCBjb21tYW5kIgorbXNnc3RyICJFNDc2OiDuxcTP0NXT1MnNwdEgy8/Nwc7EwSIKKworIzogZ2xvYmFscy5oOjEyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3OiBcIiVzXCIgaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIkUxNzogXCIlc1wiINHXzNHF1NPRIMvB1MHMz8fPzSIKKworIzogZ2xvYmFscy5oOjEyMjQKK21zZ2lkICJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIgorbXNnc3RyICJFMTg6IPDF0sXEICc9JyDPws7B0tXWxc7ZIM7Fz9bJxMHOztnFINPJzdfPzNkiCisKKyM6IGdsb2JhbHMuaDoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjQ6IExpYnJhcnkgY2FsbCBmYWlsZWQgZm9yIFwiJXMoKVwiIgorbXNnc3RyICJFMzY0OiDuxdXEwd7O2cog19naz9cgxtXOy8PJySBcIiVzKClcIiDJ2iDCycLMyc/UxcvJIgorCisjOiBnbG9iYWxzLmg6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ4OiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5IGZ1bmN0aW9uICVzIgorbXNnc3RyICJFNDQ4OiDuxSDVxMHMz9PYINrBx9LV2snU2CDG1c7Lw8nAICVzIMnaIMLJwszJz9TFy8kiCisKKyM6IGdsb2JhbHMuaDoxMjM1Cittc2dpZCAiRTE5OiBNYXJrIGhhcyBpbnZhbGlkIGxpbmUgbnVtYmVyIgorbXNnc3RyICJFMTk6IO/UzcXUy8Eg1cvB2tnXwcXUIM7BIM7F0NLB18nM2M7ZyiDOz83F0iDT1NLPy8kiCisKKyM6IGdsb2JhbHMuaDoxMjM2Cittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIu/UzcXUy8EgzsUgz9DSxcTFzMXOwSIKKworIzogZ2xvYmFscy5oOjEyMzcKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTog6drNxc7FzsnRIM7F18/azc/WztksINTByyDLwcsgz9TLzMDexc7BIM/Qw8nRICdtb2RpZmlhYmxlJyIKKworIzogZ2xvYmFscy5oOjEyMzgKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IPPMydvLz80gx8zVws/LzyDXzM/Wxc7O2cUg08PFzsHSyckiCisKKyM6IGdsb2JhbHMuaDoxMjM5Cittc2dpZCAiRTIzOiBObyBhbHRlcm5hdGUgZmlsZSIKK21zZ3N0ciAiRTIzOiDzz9PFxM7JyiDGwcrMIM7FINPV3cXT1NfVxdQiCisKKyM6IGdsb2JhbHMuaDoxMjQwCittc2dpZCAiRTI0OiBObyBzdWNoIGFiYnJldmlhdGlvbiIKK21zZ3N0ciAiRTI0OiDuxdQg1MHLz8fPINPPy9LB3cXOydEiCisKKyM6IGdsb2JhbHMuaDoxMjQxCittc2dpZCAiRTQ3NzogTm8gISBhbGxvd2VkIgorbXNnc3RyICJFNDc3OiAhIM7FIMTP0NXTy8HF1NPRIgorCisjOiBnbG9iYWxzLmg6MTI0MworbXNnaWQgIkUyNTogR1VJIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIiIKKyJFMjU6IPfP2s3P1s7P09TYIMnT0M/M2NrP18HOydEgx9LBxsnexdPLz8fPIMnO1MXSxsXK08Eg19nLzMDexc7BINDSySAiCisiy8/N0MnM0cPJySIKKworIzogZ2xvYmFscy5oOjEyNDYKK21zZ2lkICJFMjY6IEhlYnJldyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNjog6dfSydQg19nLzMDexc4g0NLJIMvPzdDJzNHDyclcbiIKKworIzogZ2xvYmFscy5oOjEyNDkKK21zZ2lkICJFMjc6IEZhcnNpIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI3OiDmwdLTySDX2cvMwN7Fzs8g0NLJIMvPzdDJzNHDyclcbiIKKworIzogZ2xvYmFscy5oOjEyNTIKK21zZ2lkICJFODAwOiBBcmFiaWMgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFODAwOiDh0sHC08vJyiDX2cvMwN7FziDQ0skgy8/N0MnM0cPJyVxuIgorCisjOiBnbG9iYWxzLmg6MTI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjg6IE5vIHN1Y2ggaGlnaGxpZ2h0IGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFMjg6IOfS1dDQwSDQz8TT18XUy8kg08nO1MHL08nTwSAlcyDOxSDT1d3F09TX1cXUIgorCisjOiBnbG9iYWxzLmg6MTI1NworbXNnaWQgIkUyOTogTm8gaW5zZXJ0ZWQgdGV4dCB5ZXQiCittc2dzdHIgIkUyOTog8M/LwSDOxdQg19PUwdfMxc7Oz8fPINTFy9PUwSIKKworIzogZ2xvYmFscy5oOjEyNTgKK21zZ2lkICJFMzA6IE5vIHByZXZpb3VzIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiRTMwOiDw0sXE2cTV3cXKIMvPzcHOxM7PyiDT1NLPy8kgzsXUIgorCisjOiBnbG9iYWxzLmg6MTI1OQorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IPTBy8/KINDSydfR2svJIM7FINPV3cXT1NfVxdQiCisKKyM6IGdsb2JhbHMuaDoxMjYwCittc2dpZCAiRTQ3OTogTm8gbWF0Y2giCittc2dzdHIgIkU0Nzk6IO7F1CDTz8/U18XU09TXydEiCisKKyM6IGdsb2JhbHMuaDoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODA6IE5vIG1hdGNoOiAlcyIKK21zZ3N0ciAiRTQ4MDog7sXUINPPz9TXxdTT1NfJ0TogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjYyCittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjog7sXUIMnNxc7JIMbByszBIgorCisjOiBnbG9iYWxzLmg6MTI2MworbXNnaWQgIkUzMzogTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzMzog7sXUINDSxcTZxNXdxcfPINLFx9XM0dLOz8fPINfZ0sHWxc7J0SDEzNEg2sHNxc7ZIgorCisjOiBnbG9iYWxzLmg6MTI2NAorbXNnaWQgIkUzNDogTm8gcHJldmlvdXMgY29tbWFuZCIKK21zZ3N0ciAiRTM0OiDuxdQg0NLFxNnE1d3FyiDLz83BzsTZIgorCisjOiBnbG9iYWxzLmg6MTI2NQorbXNnaWQgIkUzNTogTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzU6IO7F1CDQ0sXE2cTV3cXHzyDSxcfVzNHSzs/HzyDX2dLB1sXOydEiCisKKyM6IGdsb2JhbHMuaDoxMjY2Cittc2dpZCAiRTQ4MTogTm8gcmFuZ2UgYWxsb3dlZCIKK21zZ3N0ciAiRTQ4MTog6dPQz8zY2s/Xwc7JxSDEycHQwdrPzsEgzsUgxM/Q1dPLwcXU09EiCisKKyM6IGdsb2JhbHMuaDoxMjY4Cittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjog7sXEz9PUwdTP3s7PIM3F09TBIgorCisjOiBnbG9iYWxzLmg6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6INPF0tfF0iBcIiVzXCIgzsUg2sHSxcfJ09TSydLP18HOIgorCisjOiBnbG9iYWxzLmg6MTI3MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDgyOiBDYW4ndCBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiRTQ4Mjog7sXXz9rNz9bOzyDTz9rEwdTYIMbByswgJXMiCisKKyM6IGdsb2JhbHMuaDoxMjc0Cittc2dpZCAiRTQ4MzogQ2FuJ3QgZ2V0IHRlbXAgZmlsZSBuYW1lIgorbXNnc3RyICJFNDgzOiDuxdfP2s3P1s7PINDPzNXeydTYIMnN0SDX0sXNxc7Oz8fPIMbByszBIgorCisjOiBnbG9iYWxzLmg6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg0OiBDYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIkU0ODQ6IO7F18/azc/Wzs8gz9TL0tnU2CDGwcrMICVzIgorCisjOiBnbG9iYWxzLmg6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg1OiBDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIkU0ODU6IO7F18/azc/Wzs8g0NLP3snUwdTYIMbByswgJXMiCisKKyM6IGdsb2JhbHMuaDoxMjc3Cittc2dpZCAiRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMzc6IOnazcXOxc7J0SDOxSDTz8jSwc7FztkgKMTPwsHX2NTFICEsIN7Uz8LZIM/Cz8rUySDQ0s/XxdLL1SkiCisKKyM6IGdsb2JhbHMuaDoxMjc4Cittc2dpZCAiRTM4OiBOdWxsIGFyZ3VtZW50IgorbXNnc3RyICJFMzg6IO7VzMXXz8ogwdLH1c3FztQiCisKKyM6IGdsb2JhbHMuaDoxMjgwCittc2dpZCAiRTM5OiBOdW1iZXIgZXhwZWN0ZWQiCittc2dzdHIgIkUzOTog9NLFwtXF1NPRIN7J08zPIgorCisjOiBnbG9iYWxzLmg6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA6IENhbid0IG9wZW4gZXJyb3JmaWxlICVzIgorbXNnc3RyICJFNDA6IO7FINXEwczP09ggz9TL0tnU2CDGwcrMIM/bycLPyyAlcyIKKworIzogZ2xvYmFscy5oOjEyODYKK21zZ2lkICJFMjMzOiBjYW5ub3Qgb3BlbiBkaXNwbGF5IgorbXNnc3RyICJFMjMzOiDOxdfP2s3P1s7PIM/Uy9LZ1NggxMnT0MzFyiIKKworIzogZ2xvYmFscy5oOjEyODgKK21zZ2lkICJFNDE6IE91dCBvZiBtZW1vcnkhIgorbXNnc3RyICJFNDE6IO7FIMjXwdTBxdQg0MHN0dTJISIKKworIzogZ2xvYmFscy5oOjEyOTAKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZCIKK21zZ3N0ciAi+8HCzM/OIM7FIM7BysTFziIKKworIzogZ2xvYmFscy5oOjEyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NjogUGF0dGVybiBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDg2OiD7wcLMz84gzsUgzsHKxMXOOiAlcyIKKworIzogZ2xvYmFscy5oOjEyOTMKK21zZ2lkICJFNDg3OiBBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJFNDg3OiDwwdLBzcXU0iDEz8zWxc4gwtnU2CDQz8zP1snUxczYztnNIN7J08zPzSIKKworIzogZ2xvYmFscy5oOjEyOTUKK21zZ2lkICJFNDU5OiBDYW5ub3QgZ28gYmFjayB0byBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkU0NTk6IPfP2tfSwdQg1yDQ0sXE2cTV3cnKIMvB1MHMz8cgzsXXz9rNz9bFziIKKworIzogZ2xvYmFscy5oOjEyOTkKK21zZ2lkICJFNDI6IE5vIEVycm9ycyIKK21zZ3N0ciAiRTQyOiDv28nCz8sgzsXUIgorCisjOiBnbG9iYWxzLmg6MTMwMQorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0Mzog8M/X0sXWxMXOwSDT1NLPy8Eg08/P1NfF1NPU18nRIgorCisjOiBnbG9iYWxzLmg6MTMwMgorbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6IPDSz8fSwc3NwSDPwtLBws/Uy8kg0sXH1czR0s7ZyCDX2dLB1sXOycog0M/X0sXWxMXOwSIKKworIzogZ2xvYmFscy5oOjEzMDMKK21zZ2lkICJFNDU6ICdyZWFkb25seScgb3B0aW9uIGlzIHNldCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICIiCisiRTQ1OiD3y8zA3sXOwSDP0MPJ0SAncmVhZG9ubHknICjEz8LB19jUxSAhLCDe1M/C2SDOxSDPwtLB3cHU2CDXzsnNwc7J0SkiCisKKyM6IGdsb2JhbHMuaDoxMzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjogQ2Fubm90IHNldCByZWFkLW9ubHkgdmFyaWFibGUgXCIlc1wiIgorbXNnc3RyICJFNDY6IO7F18/azc/Wzs8gydrNxc7J1NggxM/T1NXQztXAINTPzNjLzyDEzNEg3tTFzsnRINDF0sXNxc7O1cAgXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTMwOAorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0Nzog79vJwsvBINDSySDe1MXOyckgxsHKzMEgz9vJws/LIgorCisjOiBnbG9iYWxzLmg6MTMxMQorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiDuxSDEz9DV08vBxdTT0SDXINDF08/ezsnDxSIKKworIzogZ2xvYmFscy5oOjEzMTMKK21zZ2lkICJFNTIzOiBOb3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNTIzOiD6xMXT2CDOxSDSwdrSxdvFzs8iCisKKyM6IGdsb2JhbHMuaDoxMzE2Cittc2dpZCAiRTM1OTogU2NyZWVuIG1vZGUgc2V0dGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFMzU5OiDkwc7O2cog0sXWyc0g3MvSwc7BIM7FINDPxMTF0tbJ18HF1NPRIgorCisjOiBnbG9iYWxzLmg6MTMxOAorbXNnaWQgIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIKK21zZ3N0ciAiRTQ5OiDuxcTP0NXT1MnN2cog0sHazcXSINDSz8vS1dTLySIKKworIzogZ2xvYmFscy5oOjEzMTkKK21zZ2lkICJFOTE6ICdzaGVsbCcgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJFOTE6IPrOwd7FzsnFzSDP0MPJySAnc2hlbGwnINHXzNHF1NPRINDV09TB0SDT1NLPy8EiCisKKyM6IGdsb2JhbHMuaDoxMzIxCittc2dpZCAiRTI1NTogQ291bGRuJ3QgcmVhZCBpbiBzaWduIGRhdGEhIgorbXNnc3RyICJFMjU1OiDuxdfP2s3P1s7PINDSz97J1MHU2CDEwc7O2cUgzyDazsHey8HIISIKKworIzogZ2xvYmFscy5oOjEzMjMKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiDv28nCy8Eg2sHL0tnUydEg09fP0C3GwcrMwSIKKworIzogZ2xvYmFscy5oOjEzMjQKK21zZ2lkICJFNzM6IHRhZyBzdGFjayBlbXB0eSIKK21zZ3N0ciAiRTczOiDz1MXLIM3F1M/LINDV09TPyiIKKworIzogZ2xvYmFscy5oOjEzMjUKK21zZ2lkICJFNzQ6IENvbW1hbmQgdG9vIGNvbXBsZXgiCittc2dzdHIgIkU3NDog88zJ28vPzSDTzM/WzsHRIMvPzcHOxMEiCisKKyM6IGdsb2JhbHMuaDoxMzI2Cittc2dpZCAiRTc1OiBOYW1lIHRvbyBsb25nIgorbXNnc3RyICJFNzU6IPPMydvLz80gxMzJzs7PxSDJzdEiCisKKyM6IGdsb2JhbHMuaDoxMzI3Cittc2dpZCAiRTc2OiBUb28gbWFueSBbIgorbXNnc3RyICJFNzY6IPPMydvLz80gzc7Px88g08nN18/Mz9cgWyIKKworIzogZ2xvYmFscy5oOjEzMjgKK21zZ2lkICJFNzc6IFRvbyBtYW55IGZpbGUgbmFtZXMiCittc2dzdHIgIkU3Nzog88zJ28vPzSDNzs/HzyDJzaPOIMbByszP1yIKKworIzogZ2xvYmFscy5oOjEzMjkKK21zZ2lkICJFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJFNDg4OiDsydvOycUg08nN18/M2SDOwSDI18/T1MUiCisKKyM6IGdsb2JhbHMuaDoxMzMwCittc2dpZCAiRTc4OiBVbmtub3duIG1hcmsiCittc2dzdHIgIkU3ODog7sXJ2tfF09TOwdEgz9TNxdTLwSIKKworIzogZ2xvYmFscy5oOjEzMzEKK21zZ2lkICJFNzk6IENhbm5vdCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICJFNzk6IO7F18/azc/Wzs8g19nQz8zOydTYINDPxNPUwc7P18vVINDPIM3B08vFIgorCisjOiBnbG9iYWxzLmg6MTMzMworbXNnaWQgIkU1OTE6ICd3aW5oZWlnaHQnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbmhlaWdodCciCittc2dzdHIgIiIKKyJFNTkxOiD6zsHexc7JxSDP0MPJySAnd2luaGVpZ2h0JyDOxSDNz9bF1CDC2dTYIM3FztjbxSDazsHexc7J0SAnd2lubWluaGVpZ2h0JyIKKworIzogZ2xvYmFscy5oOjEzMzUKK21zZ2lkICJFNTkyOiAnd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiIgorIkU1OTI6IPrOwd7FzsnFIM/Qw8nJICd3aW53aWR0aCcgzsUgzc/WxdQgwtnU2CDNxc7Y28Ug2s7B3sXOydEgJ3dpbm1pbndpZHRoJyIKKworIzogZ2xvYmFscy5oOjEzMzgKK21zZ2lkICJFODA6IEVycm9yIHdoaWxlIHdyaXRpbmciCittc2dzdHIgIkU4MDog79vJwsvBINDSySDawdDJ08kiCisKKyM6IGdsb2JhbHMuaDoxMzM5Cittc2dpZCAiWmVybyBjb3VudCIKK21zZ3N0ciAi7tXMxdfPxSDazsHexc7JxSDT3qPU3snLwSIKKworIzogZ2xvYmFscy5oOjEzNDEKK21zZ2lkICJFODE6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0IgorbXNnc3RyICJFODE6IOnT0M/M2NrP18HOycUgPFNJRD4g187FIMvPztTFy9PUwSDTw8XOwdLJ0SIKKworIzogZ2xvYmFscy5oOjEzNDQKK21zZ2lkICJFNDQ5OiBJbnZhbGlkIGV4cHJlc3Npb24gcmVjZWl2ZWQiCittc2dzdHIgIkU0NDk6IPDPzNXexc7PIM7FxM/Q1dPUyc3PxSDX2dLB1sXOycUiCisKKyM6IGdsb2JhbHMuaDoxMzQ3Cittc2dpZCAiRTQ2MzogUmVnaW9uIGlzIGd1YXJkZWQsIGNhbm5vdCBtb2RpZnkiCittc2dzdHIgIkU0NjM6IO7F18/azc/Wzs8gydrNxc7J1Nggz8jSwc7Rxc3VwCDPwszB09TYIgorCisjfiBtc2dpZCAiXCJcbiIKKyN+IG1zZ3N0ciAiXCJcbiIKZGlmZiAtLWdpdCBhL3NyYy9wby9zamlzY29yci5jIGIvc3JjL3BvL3NqaXNjb3JyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3MDZiYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wby9zamlzY29yci5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBTaW1wbGlzdGljIHByb2dyYW0gdG8gY29ycmVjdCBTSklTIGluc2lkZSBzdHJpbmdzLiAgV2hlbiBhIHRyYWlsIGJ5dGUgaXMgYQorICogYmFja3NsYXNoIGl0IG5lZWRzIHRvIGJlIGRvdWJsZWQuCisgKiBQdWJsaWMgZG9tYWluLgorICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworCWludAorbWFpbihhcmdjLCBhcmd2KQorCWludAlhcmdjOworCWNoYXIJKiphcmd2OworeworCWNoYXIgYnVmZmVyW0JVRlNJWl07CisJY2hhciAqcDsKKworCXdoaWxlIChmZ2V0cyhidWZmZXIsIEJVRlNJWiwgc3RkaW4pICE9IE5VTEwpCisJeworCQlmb3IgKHAgPSBidWZmZXI7ICpwICE9IDA7IHArKykKKwkJeworCQkJaWYgKHN0cm5jbXAocCwgImNoYXJzZXQ9ZXVjLWpwIiwgMTQpID09IDApCisJCQl7CisJCQkJZnB1dHMoImNoYXJzZXQ9Y3A5MzIiLCBzdGRvdXQpOworCQkJCXAgKz0gMTM7CisJCQl9CisJCQllbHNlIGlmIChzdHJuY21wKHAsICJqYS5wbyAtIEphcGFuZXNlIG1lc3NhZ2UgZmlsZSIsIDI5KSA9PSAwKQorCQkJeworCQkJCWZwdXRzKCJqYS5zamlzLnBvIC0gSmFwYW5lc2UgbWVzc2FnZSBmaWxlIGZvciBWaW0gKHZlcnNpb24gNi54KVxuIiwgc3Rkb3V0KTsKKwkJCQlmcHV0cygiIyBnZW5lcmF0ZWQgZnJvbSBqYS5wbywgRE8gTk9UIEVESVQiLCBzdGRvdXQpOworCQkJCXdoaWxlIChwWzFdICE9ICdcbicpCisJCQkJCSsrcDsKKwkJCX0KKwkJCWVsc2UgaWYgKCoodW5zaWduZWQgY2hhciAqKXAgPT0gMHg4MSAmJiBwWzFdID09ICdfJykKKwkJCXsKKwkJCQlwdXRjaGFyKCdcXCcpOworCQkJCSsrcDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoKnAgJiAweDgwKQorCQkJCXsKKwkJCQkJcHV0Y2hhcigqcCsrKTsKKwkJCQkJaWYgKCpwID09ICdcXCcpCisJCQkJCQlwdXRjaGFyKCpwKTsKKwkJCQl9CisJCQkJcHV0Y2hhcigqcCk7CisJCQl9CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvcG8vc2suY3AxMjUwLnBvIGIvc3JjL3BvL3NrLmNwMTI1MC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTkxYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL3NrLmNwMTI1MC5wbwpAQCAtMCwwICsxLDU5OTggQEAKKyMgU2xvdmFrIHRyYW5zbGF0aW9uIG9mIHZpbQorIyBNYXJ0aW4gTGFja28gPGxhY2tvQGhvc3Quc2s+LCAyMDAxLgorIworIyBHZW5lcmF0ZWQgZnJvbSBzay5wbywgRE8gTk9UIEVESVQuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiB2aW1cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwMi0wMy0yNiAyMTo1NCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMi0wMy0yNiAyMTo1OENFU1RcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1hcnRpbiBMYWNrbyA8bGFja29AaG9zdC5zaz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTbG92YWsgPHNrLWkxOG5AbGlzdHMubGludXguc2s+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Y3AxMjUwXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtR2VuZXJhdG9yOiBLQmFiZWwgMC45LjVcbiIKKworIzogYnVmZmVyLmM6OTcKK21zZ2lkICJFODI6IENhbm5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLCBleGl0aW5nLi4uIgorbXNnc3RyICJFODI6IE5lZOEgc2EgYWxva292YZ0gYnVmZmVyLCBrb27o7W0uLi4iCisKKyM6IGJ1ZmZlci5jOjEwMAorbXNnaWQgIkU4MzogQ2Fubm90IGFsbG9jYXRlIGJ1ZmZlciwgdXNpbmcgb3RoZXIgb25lLi4uIgorbXNnc3RyICJFODM6IE5lZOEgc2EgYWxva292YZ0gYnVmZmVyLCBwb3WeaWplbSBpbv0uLi4iCisKKyM6IGJ1ZmZlci5jOjcwNgorbXNnaWQgIk5vIGJ1ZmZlcnMgd2VyZSB1bmxvYWRlZCIKK21zZ3N0ciAijmlhZG55IGJ1ZmZlciBuZWJvbCBu4WpkZW79IgorCisjOiBidWZmZXIuYzo3MDgKK21zZ2lkICJObyBidWZmZXJzIHdlcmUgZGVsZXRlZCIKK21zZ3N0ciAijmlhZG55IGJ1ZmZlciBuZWJvbCB2eW1hemFu/SIKKworIzogYnVmZmVyLmM6NzEwCittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAijmlhZG55IGJ1ZmZlciBuZWJvbCB2eW1hemFu/SIKKworIzogYnVmZmVyLmM6NzE4Cittc2dpZCAiMSBidWZmZXIgdW5sb2FkZWQiCittc2dzdHIgInBv6GV0IGRlYWt0aXZvdmFu/WNoIGJ1ZmZlcm92OiAxIgorCisjOiBidWZmZXIuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB1bmxvYWRlZCIKK21zZ3N0ciAicG/oZXQgZGVha3Rpdm92YW79Y2ggYnVmZmVyb3Y6ICVkIgorCisjOiBidWZmZXIuYzo3MjUKK21zZ2lkICIxIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICJwb+hldCB2eW1hemFu/WNoIGJ1ZmZlcm92OiAxIgorCisjOiBidWZmZXIuYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICJwb+hldCB2eW1hemFu/WNoIGJ1ZmZlcm92OiAlZCIKKworIzogYnVmZmVyLmM6NzMyCittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICJwb+hldCB2eW1hemFu/WNoIGJ1ZmZlcm92OiAxIgorCisjOiBidWZmZXIuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB3aXBlZCBvdXQiCittc2dzdHIgInBv6GV0IHZ5bWF6YW79Y2ggYnVmZmVyb3Y6ICVkIgorCisjOiBidWZmZXIuYzo3OTEKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiBOZWJvbCBu4WpkZW79IJ5pYWRueSB6bWVuZW79IGJ1ZmZlciIKKworIy4gYmFjayB3aGVyZSB3ZSBzdGFydGVkLCBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyM6IGJ1ZmZlci5jOjgzMAorbXNnaWQgIkU4NTogVGhlcmUgaXMgbm8gbGlzdGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTg1OiBOZW5hmmllbCBzb20gnmlhZG55IGJ1ZmZlciIKKworIzogYnVmZmVyLmM6ODQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQ2Fubm90IGdvIHRvIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU4NjogTmVk4SBzYSBwcmVza2/oaZ0gbmEgYnVmZmVyICVsZCIKKworIzogYnVmZmVyLmM6ODQ1Cittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6IFphIHBvc2xlZG79IGJ1ZmZlciBzYSBuZWThIHByZXNrb+hpnSIKKworIzogYnVmZmVyLmM6ODQ3Cittc2dpZCAiRTg4OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg4OiBQcmVkIHBydv0gYnVmZmVyIHNhIG5lZOEgcHJlc2tv6GmdIgorCisjOiBidWZmZXIuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg5OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyICVsZCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFODk6IFptZW55IHYgYnVmZmVyaSAlbGQgbmVib2x5IHVsb55lbukgKCEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGJ1ZmZlci5jOjg4NworbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiBQb3NsZWRu/SBidWZmZXIgc2EgbmVk4SBvZHN0cuFuaZ0iCisKKyM6IGJ1ZmZlci5jOjEzMzcKK21zZ2lkICJXMTQ6IFdhcm5pbmc6IExpc3Qgb2YgZmlsZSBuYW1lcyBvdmVyZmxvdyIKK21zZ3N0ciAiVzE0OiBWYXJvdmFuaWU6IHByZXRl6GVuaWUgem96bmFtdSBzIG7henZhbWkgc/pib3JvdiIKKworIzogYnVmZmVyLmM6MTUwMworIywgYy1mb3JtYXQKK21zZ2lkICJFOTI6IEJ1ZmZlciAlbGQgbm90IGZvdW5kIgorbXNnc3RyICJFOTI6IGJ1ZmZlciAlbGQgbmVu4WpkZW79IgorCisjOiBidWZmZXIuYzoxNzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5MzogVnpvcnUgJXMgdnlob3Z1amUgdmlhYyBidWZmZXJvdiIKKworIzogYnVmZmVyLmM6MTczMQorIywgYy1mb3JtYXQKK21zZ2lkICJFOTQ6IE5vIG1hdGNoaW5nIGJ1ZmZlciBmb3IgJXMiCittc2dzdHIgIkU5NDogVnpvcnUgJXMgbmV2eWhvdnVqZSCeaWFkbnkgYnVmZmVyIgorCisjOiBidWZmZXIuYzoyMTM2IGV4X2RvY21kLmM6NjA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCIKK21zZ3N0ciAicmlhZG9rICVsZCIKKworIzogYnVmZmVyLmM6MjIxOQorbXNnaWQgIkU5NTogQnVmZmVyIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFOTU6IEJ1ZmZlciB0YWvpaG90byBtZW5hIHWeIGV4aXN0dWplIgorCisjOiBidWZmZXIuYzoyNTEyCittc2dpZCAiIFtNb2RpZmllZF0iCittc2dzdHIgIiBbem1lbmVu/V0iCisKKyM6IGJ1ZmZlci5jOjI1MTcKK21zZ2lkICJbTm90IGVkaXRlZF0iCittc2dzdHIgIltuZXVwcmF2b3Zhbv1dIgorCisjOiBidWZmZXIuYzoyNTIyCittc2dpZCAiW05ldyBmaWxlXSIKK21zZ3N0ciAiW25vdv0gc/pib3JdIgorCisjOiBidWZmZXIuYzoyNTIzCittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW2NoeWJ5IHByaSDo7XRhbu1dIgorCisjOiBidWZmZXIuYzoyNTI1IGZpbGVpby5jOjE3NzcKK21zZ2lkICJbcmVhZG9ubHldIgorbXNnc3RyICJbaWJhIHByZSDo7XRhbmllXSIKKworIzogYnVmZmVyLmM6MjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgLS0lZCUlLS0iCittc2dzdHIgIjEgcmlhZG9rIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAtLSVkJSUtLSIKK21zZ3N0ciAicmlhZGtvdjogJWxkIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICJyaWFkb2sgJWxkIHogJWxkIC0tJWQlJS0tIHN05XBlYyIKKworIzogYnVmZmVyLmM6MjYzNworbXNnaWQgIltObyBmaWxlXSIKK21zZ3N0ciAiW55pYWRueSBz+mJvcl0iCisKKyMuIG11c3QgYmUgYSBoZWxwIGJ1ZmZlcgorIzogYnVmZmVyLmM6MjY3NworbXNnaWQgImhlbHAiCittc2dzdHIgInBvbW9jbu1rIgorCisjOiBidWZmZXIuYzozMTg2IHNjcmVlbi5jOjQ3NDMKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIltwb21vY27ta10iCisKKyM6IGJ1ZmZlci5jOjMyMTggc2NyZWVuLmM6NDc0OQorbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW27haL5hZF0iCisKKyM6IGJ1ZmZlci5jOjM0MjQKK21zZ2lkICJBbGwiCittc2dzdHIgIlaaZXRrbyIKKworIzogYnVmZmVyLmM6MzQyNAorbXNnaWQgIkJvdCIKK21zZ3N0ciAiS29uaWVjIgorCisjOiBidWZmZXIuYzozNDI2Cittc2dpZCAiVG9wIgorbXNnc3RyICJaYehpYXRvayIKKworIzogYnVmZmVyLmM6NDE2MgorbXNnaWQgIiIKKyJcbiIKKyIjIEJ1ZmZlciBsaXN0OlxuIgorbXNnc3RyICIiCisiXG4iCisiIyB6b3puYW0gYnVmZmVyb3Y6XG4iCisKKyM6IGJ1ZmZlci5jOjQxOTUKK21zZ2lkICJbRXJyb3IgTGlzdF0iCittc2dzdHIgIlt6b3puYW0gY2j9Yl0iCisKKyM6IGJ1ZmZlci5jOjQyMDggbWVtbGluZS5jOjE1MTMKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIlueaWFkbnkgc/pib3JdIgorCisjOiBidWZmZXIuYzo0NDI4Cittc2dpZCAiIgorIlxuIgorIi0tLSBTaWducyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gWm5ha3kgLS0tIgorCisjOiBidWZmZXIuYzo0NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNpZ25zIGZvciAlczoiCittc2dzdHIgIlpuYWt5IHByZSAlczoiCisKKyM6IGJ1ZmZlci5jOjQ0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgIGxpbmU9JWxkICBpZD0lZCAgbWVubz0lcyIKKworIzogZGlmZi5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJFOTY6IENhbiBub3QgZGlmZiBtb3JlIHRoYW4gJWxkIGJ1ZmZlcnMiCittc2dzdHIgIkU5NjogTmVt9J5lbSBwb3Jvdm5hnSB2aWFjIGFrbyAlbGQgYnVmZmVyb3YiCisKKyM6IGRpZmYuYzo2NDgKK21zZ2lkICJFOTc6IENhbm5vdCBjcmVhdGUgZGlmZnMiCittc2dzdHIgIkU5NzogTmVkYWr6IHNhIHZ5dHZvcmmdIHBvcm92bmFuaWEiCisKKyM6IGRpZmYuYzo3NDcKK21zZ2lkICJQYXRjaCBmaWxlIgorbXNnc3RyICJPcHJhdm79IHP6Ym9yIgorCisjOiBkaWZmLmM6OTkxCittc2dpZCAiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIKK21zZ3N0ciAiRTk4OiBOZWThIHNhIOjtdGGdIHb9c3R1cCBwb3Jvdm5hbmlhIgorCisjOiBkaWZmLmM6MTczMgorbXNnaWQgIkU5OTogQ3VycmVudCBidWZmZXIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTk5OiBBa3R14WxueSBidWZmZXIgbmllIGplIHYgcG9yb3ZuYWNvbSBt82RlIgorCisjOiBkaWZmLmM6MTc0NAorbXNnaWQgIkUxMDA6IE5vIG90aGVyIGJ1ZmZlciBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDA6IFYgcG9yb3Zu4XZhY29tIG3zZGUgc2EgbmVuYWNo4WR6YSBpbv0gYnVmZmVyIgorCisjOiBkaWZmLmM6MTc1MgorbXNnaWQgIkUxMDE6IE1vcmUgdGhhbiB0d28gYnVmZmVycyBpbiBkaWZmIG1vZGUsIGRvbid0IGtub3cgd2hpY2ggb25lIHRvIHVzZSIKK21zZ3N0ciAiRTEwMTogVmlhYyBha28gZHZhIGJ1ZmZlcnkgdiBwb3Jvdm7hdmFjb20gbfNkZTsgbmV2aWVtLCBrdG9y/SBwb3WeaZ0iCisKKyM6IGRpZmYuYzoxNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDI6IENhbid0IGZpbmQgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTEwMjogTmVk4SBzYSBu4WpznSBidWZmZXIgXCIlc1wiIgorCisjOiBkaWZmLmM6MTc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAzOiBCdWZmZXIgXCIlc1wiIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgbmllIGplIHYgcG9yb3Zu4XZhY29tIG3zZGUiCisKKyM6IGRpZ3JhcGguYzoyMTcyCittc2dpZCAiRTEwNDogRXNjYXBlIG5vdCBhbGxvd2VkIGluIGRpZ3JhcGgiCittc2dzdHIgIkUxMDQ6IGRpYWdyYXBoIG5lc21pZSBvYnNhaG92YZ0gRXNjYXBlIgorCisjOiBkaWdyYXBoLmM6MjM0NAorbXNnaWQgIktleW1hcCBmaWxlIG5vdCBmb3VuZCIKK21zZ3N0ciAiTWFwYSBrbOF2ZXMgbmVu4WpkZW7hIgorCisjOiBkaWdyYXBoLmM6MjM3MQorbXNnaWQgIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTEwNTogUG91nml0ZSA6bG9hZGtleW1hcCB2IHP6Ym9yZSwga3Rvcv0gbmllIGplIHpkcm9qb3b9IgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBEb3Bs8m92YW5pZSBrvvrob3b9Y2ggc2xvdiAoXk4vXlApIgorCisjLiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4KKyM6IGVkaXQuYzo0MQorbXNnaWQgIiBeWCBtb2RlICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eVi9eTi9eUCkiCittc2dzdHIgIiBeWCByZZ5pbSAoXkUvXlkvXkwvXl0vXkYvXkkvXksvXkQvXlYvXk4vXlApIgorCisjLiBTY3JvbGwgaGFzIGl0J3Mgb3duIG1zZ3MsIGluIGl0J3MgcGxhY2UgdGhlcmUgaXMgdGhlIG1zZyBmb3IgbG9jYWwKKyMuICogY3RybF94X21vZGUgPSAwIChlZyBjb250aW51ZV9zdGF0dXMgJiBDT05UX0xPQ0FMKSAgLS0gQWNldmVkbworIzogZWRpdC5jOjQ0Cittc2dpZCAiIEtleXdvcmQgTG9jYWwgY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIgTWllc3RuZSBkb3Dl8mFuaWUga7766G92/WNoIHNsb3YgKF5OL15QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkwvXk4vXlApIgorbXNnc3RyICIgRG9wbPJvdmFuaWUgY2Vs/WNoIHJpYWRrb3YgKF5ML15OL15QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRi9eTi9eUCkiCittc2dzdHIgIiBEb3Bs8m92YW5pZSBu4Xp2b3Ygc/pib3JvdiAoXkYvXk4vXlApIgorCisjOiBlZGl0LmM6NDcKK21zZ2lkICIgVGFnIGNvbXBsZXRpb24gKF5dL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3ZhbmllIHRhZ292ICheXS9eTi9eUCkiCisKKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIgRG9wbPJvdmFuaWUgdnpvcnUgY2llc3QgKF5OL15QKSIKKworIzogZWRpdC5jOjQ5Cittc2dpZCAiIERlZmluaXRpb24gY29tcGxldGlvbiAoXkQvXk4vXlApIgorbXNnc3RyICIgRG9wbPJvdmFuaWUgZGVmaW7tY2ntICheRC9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3ZhbmllIHBvZL5hIHNsb3Zu7WthICheSy9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MgorbXNnaWQgIiBUaGVzYXVydXMgY29tcGxldGlvbiAoXlQvXk4vXlApIgorbXNnc3RyICIgRG9wbPJvdmFuaWUgcG9kvmEgdGV6YXVydSAoXlQvXk4vXlApIgorCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3byb3ZhbmllIHBy7Wthem926WhvIHJpYWRrYSAoXlYvXk4vXlApIgorCisjOiBlZGl0LmM6NTYKK21zZ2lkICJIaXQgZW5kIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAiS29uaWVjIG9kc3RhdmNhIgorCisjOiBlZGl0LmM6OTA3Cittc2dpZCAiJ3RoZXNhdXJ1cycgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJ2b75iYSAndGhlc2F1cnVzJyBqZSBwcuF6ZG5hIgorCisjOiBlZGl0LmM6MTA4MworbXNnaWQgIidkaWN0aW9uYXJ5JyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgInZvvmJhICdkaWN0aW9uYXJ5JyBqZSBwcuF6ZG5hIgorCisjOiBlZGl0LmM6MjAwNworIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAicHJlaL5hZOF2YW0gc2xvdm7tayAlcyIKKworIzogZWRpdC5jOjIxOTgKK21zZ2lkICIgKGluc2VydCkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoaW5zZXJ0KSBSb2xvdmFuaWUgKF5FL15ZKSIKKworIzogZWRpdC5jOjIyMDAKK21zZ2lkICIgKHJlcGxhY2UpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKHJlcGxhY2UpIFJvbG92YW5pZSAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIlByZWi+YWThdmFtOiAlcyIKKworIzogZWRpdC5jOjI1NDcKK21zZ2lkICJTY2FubmluZyB0YWdzLiIKK21zZ3N0ciAiUHJlaL5hZOF2YW0gdGFneS4iCisKKyM6IGVkaXQuYzozMjA3Cittc2dpZCAiIEFkZGluZyIKK21zZ3N0ciAiIFByaWThdmFtIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjMyNTYKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIEi+YWThbS4uLiIKKworIzogZWRpdC5jOjMzMTIKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICJW/WNob2R6aWEgcG9kb2JhIgorCisjOiBlZGl0LmM6MzMxNworbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICJTbG92byB6IGlu6WhvIHJpYWRrdSIKKworIzogZWRpdC5jOjMzMjIKK21zZ2lkICJUaGUgb25seSBtYXRjaCIKK21zZ3N0ciAiSmVkaW7hIHpob2RhIgorCisjOiBlZGl0LmM6MzM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYXRjaCAlZCBvZiAlZCIKK21zZ3N0ciAiemhvZGEgJWQgeiAlZCIKKworIzogZWRpdC5jOjMzODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgInpob2RhICVkIgorCisjOiBldmFsLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDY6IFVua25vd24gdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwNjogTmV6buFtYSBwcmVtZW5u4TogXCIlc1wiIgorCisjOiBldmFsLmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDc6IE1pc3NpbmcgYnJhY2VzOiAlcyIKK21zZ3N0ciAiRTEwNzogQ2j9Ymr6IHrhdm9ya3k6ICVzIgorCisjOiBldmFsLmM6MTA1NyBldmFsLmM6MTA3MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTA4OiBObyBzdWNoIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDg6IFByZW1lbm7hIFwiJXNcIiBuZWV4aXN0dWplIgorCisjOiBldmFsLmM6MTMxNQorbXNnaWQgIkUxMDk6IE1pc3NpbmcgJzonIGFmdGVyICc/JyIKK21zZ3N0ciAiRTEwOTogUG8gJz8nIGNo/WJhICc6JyIKKworIzogZXZhbC5jOjE5MjkKK21zZ2lkICJFMTEwOiBNaXNzaW5nICcpJyIKK21zZ3N0ciAiRTExMDogQ2j9YmEgJyknIgorCisjOiBldmFsLmM6MTk3OQorbXNnaWQgIkUxMTE6IE1pc3NpbmcgJ10nIgorbXNnc3RyICJFMTExOiBDaP1iYSAnXSciCisKKyM6IGV2YWwuYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIgorbXNnc3RyICJFMTEyOiBDaP1iYSBtZW5vIHZvvmJ5OiAlcyIKKworIzogZXZhbC5jOjIwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMzogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMTEzOiBOZXpu4W1hIHZvvmJhOiAlcyIKKworIzogZXZhbC5jOjIxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IENo/WJq+iB1dm9kem92a3k6ICVzIgorCisjOiBldmFsLmM6MjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE1OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNTogQ2j9Ymr6IHV2b2R6b3ZreTogJXMiCisKKyM6IGV2YWwuYzoyNTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTExNjogQ2h5Ym7pIGFyZ3VtZW50eSBwcmUgZnVua2NpdSAlcyIKKworIzogZXZhbC5jOjI1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNzogVW5rbm93biBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTc6IE5lem7hbWEgZnVua2NpYTogJXMiCisKKyM6IGV2YWwuYzoyNTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTg6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE4OiBQcu1saZogbW5vaG8gYXJndW1lbnRvdiBwcmUgZnVua2NpdSAlcyIKKworIzogZXZhbC5jOjI1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOTogUHLtbGmaIG3hbG8gYXJndW1lbnRvdiBwcmUgZnVua2NpdSAlcyIKKworIzogZXZhbC5jOjI1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMDogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQ6ICVzIgorbXNnc3RyICJFMTIwOiBQb3WeaXRpZSA8U0lEPiBtaW1vIGtvbnRleHQgc2tyaXB0dTogJXMiCisKKyM6IGV2YWwuYzozMTcyIGd1aS5jOjM5ODQKK21zZ2lkICImT2siCittc2dzdHIgIiZPayIKKworIzogZXZhbC5jOjM2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQgcmlhZGt5OiAiCisKKyM6IGV2YWwuYzo0Nzk0Cittc2dpZCAiIgorIiZPS1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImT2tcbiIKKyImWnJ1mmmdIgorCisjOiBldmFsLmM6NTYyNgorbXNnaWQgIkUyNDA6IE5vIGNvbm5lY3Rpb24gdG8gVmltIHNlcnZlciIKK21zZ3N0ciAiRTI0MDogTmVleGlzdHVqZSBwcmlwb2plbmllIGsgVmltIHNlcnZlcnUiCisKKyM6IGV2YWwuYzo1NzE2Cittc2dpZCAiRTI3NzogVW5hYmxlIHRvIHJlYWQgYSBzZXJ2ZXIgcmVwbHkiCittc2dzdHIgIkUyMjc6IE5lbfSeZW0g6O10YZ0gb2Rwb3Zl7yBzZXJ2cmEiCisKKyM6IGV2YWwuYzo1NzQxCittc2dpZCAiRTI1ODogVW5hYmxlIHRvIHNlbmQgdG8gY2xpZW50IgorbXNnc3RyICJFMjU4OiBOZW30nmVtIHBvc2xhnSBrbGllbnRvdmkiCisKKyM6IGV2YWwuYzo1Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiBOZW30nmVtIHBvc2xhnSBuYSAlcyIKKworIzogZXZhbC5jOjU4ODQKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIihDaHlibv0pIgorCisjOiBldmFsLmM6Njg5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgorbXNnc3RyICJFMTIxOiBOZWRlZmlub3ZhbuEgcHJlbWVubuE6ICVzIgorCisjOiBldmFsLmM6NzU5MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgdXNlICEgdG8gcmVwbGFjZSIKK21zZ3N0ciAiRTExMjogRnVua2NpYSAlcyB1niBleGlzdHVqZS4gUG91nml0ZSAhIHByZSBqZWogbmFocmFkZW5pZS4iCisKKyM6IGV2YWwuYzo3NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjM6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMjM6IE5lZGVmaW5vdmFu4SBmdW5rY2lhOiAlcyIKKworIzogZXZhbC5jOjc2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNDogTWlzc2luZyAnKCc6ICVzIgorbXNnc3RyICJFMTI0OiBDaP1iYSAnKCc6ICVzIgorCisjOiBldmFsLmM6NzY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNTogTmVwcu1zdHVwbv0gYXJndW1lbnQ6ICVzIgorCisjOiBldmFsLmM6Nzc2NgorbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiBDaP1iYSA6ZW5kZnVuY3Rpb24iCisKKyM6IGV2YWwuYzo3ODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjc6IENhbm5vdCByZWRlZmluZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTI3OiBOZWThIHNhIHByZWRlZmlub3ZhnSBmdW5rY2lhICVzOiBqZSBwb3We7XZhbuEiCisKKyM6IGV2YWwuYzo3OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6IE7hem92IGZ1bmtjaWUgbXVz7SB6YejtbmGdIHZlvmv9bSBw7XNtZW5vbTogJXMiCisKKyM6IGV2YWwuYzo3OTA5Cittc2dpZCAiRTEyOTogRnVuY3Rpb24gbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTEyOTogSmUgdnmeYWRvdmFu6SBtZW5vIGZ1bmtjaWUiCisKKyM6IGV2YWwuYzo4MDAyCittc2dpZCAiZnVuY3Rpb24gIgorbXNnc3RyICJmdW5rY2lhICIKKworIzogZXZhbC5jOjgxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMDogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEzMDogTmVkZWZpbm92YW7hIGZ1bmtjaWE6ICVzIgorCisjOiBldmFsLmM6ODEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTMxOiBDYW5ub3QgZGVsZXRlIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMzE6IE5lZOEgc2EgdnltYXphnSBmdW5rY2lhICVzOiBqZSB1niBwb3We7XZhbuEiCisKKyM6IGV2YWwuYzo4MTY5Cittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiRTEzMjogWmFub3JlbmllIGZ1bmtjae0gamUgaGximmllIG5lniAnbWF4ZnVuY2RlcHRoJyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYWxsaW5nICVzIgorbXNnc3RyICJ2b2zhbSAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODI0NSBleF9jbWRzMi5jOjE5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAicG9rcmHodWplbSB2ICVzIgorCisjOiBldmFsLmM6ODI5OQorbXNnaWQgIkUxMzM6IDpyZXR1cm4gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTMzOiA6cmV0dXJuIG1pbW8gZnVua2NpdSIKKworIzogZXZhbC5jOjgzNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgImRva29u6GVu6SAlcy4gTuF2cmF0b3bhIGhvZG5vdGEgJWxkIgorCisjOiBldmFsLmM6ODM4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICJkb2tvbuhlbukgJXMuIE7hdnJhdG924SBob2Rub3RhIFwiJXNcIiIKKworIzogZXZhbC5jOjg1MjEKK21zZ2lkICIiCisiXG4iCisiIyBnbG9iYWwgdmFyaWFibGVzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBnbG9i4WxuZSBwcmVtZW5u6TpcbiIKKworIzogZXhfY21kcy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2N0YWwgJTAzbyIKK21zZ3N0ciAiPCVzPiVzJXMgICVkLCAgmmVzdG7hc3Rrb3ZvICUwMngsICBvc21p6Gtvdm8gJTAzbyIKKworIzogZXhfY21kcy5jOjQyOAorbXNnaWQgIkUxMzQ6IE1vdmUgbGluZXMgaW50byB0aGVtc2VsdmVzIgorbXNnc3RyICJFMTM0OiBQcmVrcnl0aWUgcmlhZGtvdiBzZWJvdSBzYW39bWkiCisKKyM6IGV4X2NtZHMuYzo0OTcKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgInBv6GV0IHByZXJ1mmVu/WNoIHJpYWRrb3Y6IDEiCisKKyM6IGV4X2NtZHMuYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIG1vdmVkIgorbXNnc3RyICJwb+hldCBwcmVydZplbv1jaCByaWFka292OiAlbGQiCisKKyM6IGV4X2NtZHMuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICJwb+hldCBmaWx0cm92YW79Y2ggcmlhZGtvdjogJWxkIgorCisjOiBleF9jbWRzLmM6OTE4Cittc2dpZCAiRTEzNTogKkZpbHRlciogQXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTEzNTogQXV0b21hdGlja+kgcHLta2F6eSAqRmlsdGVyKiBuZXNtaWUgbWVuaZ0gYWt0deFsbnkgYnVmZmVyIgorCisjOiBleF9jbWRzLmM6MTAwMworbXNnaWQgIltObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZV1cbiIKK21zZ3N0ciAiW05ldWxvnmVu6SB6bWVueV1cbiIKKworIzogZXhfY21kcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmltaW5mbzogJXMgaW4gbGluZTogIgorbXNnc3RyICJ2aW1pbmZvOiAlcyBuYSByaWFka3U6ICIKKworIzogZXhfY21kcy5jOjEyNTMKK21zZ2lkICJFMTM2OiB2aW1pbmZvOiBUb28gbWFueSBlcnJvcnMsIHNraXBwaW5nIHJlc3Qgb2YgZmlsZSIKK21zZ3N0ciAiRTEzNjogdmltaW5mbzogcHLtbGmaIG1ub2hvIGNo/WIsIHByZXNrYWt1amVtIHpieXRvayBz+mJvcnUiCisKKyM6IGV4X2NtZHMuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAiyO10YW0gdmltaW5mbyBz+mJvciBcIiVzXCIlcyVzJXMiCisKKyM6IGV4X2NtZHMuYzoxMjgzCittc2dpZCAiIGluZm8iCittc2dzdHIgIiBpbmZvcm3hY2llIgorCisjOiBleF9jbWRzLmM6MTI4NAorbXNnaWQgIiBtYXJrcyIKK21zZ3N0ciAiIHpuYehreSIKKworIzogZXhfY21kcy5jOjEyODUKK21zZ2lkICIgRkFJTEVEIgorbXNnc3RyICIgWkxZSEFMTyIKKworIzogZXhfY21kcy5jOjEzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IERvIHZpbWluZm8gc/pib3J1ICVzIHNhIG5lZOEgemFwaXNvdmGdIgorCisjOiBleF9jbWRzLmM6MTUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiBOZWThIHNhIHVsb55pnSB2aW1pbmZvIHP6Ym9yICVzISIKKworIzogZXhfY21kcy5jOjE1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiIgorbXNnc3RyICJVa2zhZOFtIHZpbWluZm8gc/pib3J1IFwiJXNcIiIKKworIy4gV3JpdGUgdGhlIGluZm86CisjOiBleF9jbWRzLmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICIjIFRoaXMgdmltaW5mbyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVmltICVzLlxuIgorbXNnc3RyICIjIFRlbnRvIHZpbWluZm8gc/pib3IgYm9sIHZ5dHZvcmVu/SBlZGl0b3JvbSBWaW0gJXMuXG4iCisKKyM6IGV4X2NtZHMuYzoxNjEyCittc2dpZCAiIgorIiMgWW91IG1heSBlZGl0IGl0IGlmIHlvdSdyZSBjYXJlZnVsIVxuIgorIlxuIgorbXNnc3RyICIiCisiIyBQb2tpYb4gYnVkZXRlIG9wYXRybm79LCBt9J5ldGUgaG8gdXByYXZvdmGdLlxuIgorIlxuIgorCisjOiBleF9jbWRzLmM6MTYxNAorbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjIEhvZG5vdGEgJ2VuY29kaW5nJyBwb+hhcyB64XBpc3UgdG9ob3RvIHP6Ym9ydVxuIgorCisjOiBleF9jbWRzLmM6MTcxMworbXNnaWQgIklsbGVnYWwgc3RhcnRpbmcgY2hhciIKK21zZ3N0ciAiTmVwcu1zdHVwbv0gemHoaWF0b+hu/SB6bmFrIgorCisjOiBleF9jbWRzLmM6MjA1MyBleF9jbWRzLmM6MjMxMCBleF9jbWRzMi5jOjYwMgorbXNnaWQgIlNhdmUgQXMiCittc2dzdHIgIlVsb55pnSBha28iCisKKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjA5NgorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiBT+mJvciBqZSBuYejtdGFu/SB2IGlub2IgYnVmZmVyZSIKKworIzogZXhfY21kcy5jOjIxMzAKK21zZ2lkICJXcml0ZSBwYXJ0aWFsIGZpbGU/IgorbXNnc3RyICJVbG+eaZ0gbmX6cGxu/SBz+mJvcj8iCisKKyM6IGV4X2NtZHMuYzoyMTM3Cittc2dpZCAiRTE0MDogVXNlICEgdG8gd3JpdGUgcGFydGlhbCBidWZmZXIiCittc2dzdHIgIkUxNDA6IFBvdZ5pdGUgISBwcmUgdWxvnmVuaWUgbmX6cGxu6WhvIGJ1ZmZlcnUiCisKKyM6IGV4X2NtZHMuYzoyMjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAiUHJlcO1zYZ0gc/pib3IgXCIlLipzXCI/IgorCisjOiBleF9jbWRzLmM6MjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQxOiBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkUxNDE6II5pYWRueSBu4XpvdiBz+mJvcnUgcHJlIGJ1ZmZlciAlbGQiCisKKyM6IGV4X2NtZHMuYzoyMzUzCittc2dpZCAiRTE0MjogRmlsZSBub3Qgd3JpdHRlbjogV3JpdGluZyBpcyBkaXNhYmxlZCBieSAnd3JpdGUnIG9wdGlvbiIKK21zZ3N0ciAiRTE0MjogU/pib3IgbmVib2wgdWxvnmVu/TogdWtsYWRhbmllIGplIHpha+F6YW7pIHZvvmJvdSAnd3JpdGUnIgorCisjOiBleF9jbWRzLmM6MjM3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IGZvciBcIiUuKnNcIi5cbiIKKyJEbyB5b3Ugd2lzaCB0byB3cml0ZSBhbnl3YXk/IgorbXNnc3RyICIiCisiUHJlIFwiJS4qc1wiIGplIG5hc3RhdmVu4SB2b75iYSAncmVhZG9ubHknIChpYmEgbmEg6O10YW5pZSkuXG4iCisiUHJhamV0ZSBzaSBqdSBwb3RsYehpnT8iCisKKyM6IGV4X2NtZHMuYzoyNTM4Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICJVcHJhdm92YZ0gc/pib3IiCisKKyM6IGV4X2NtZHMuYzozMDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiBBdXRvbWF0aWNr6SBwcu1rYXp5IG5lb+hha+F2YW5lIHptYXphbGkgbm92/SBidWZmZXIgJXMiCisKKyM6IGV4X2NtZHMuYzozMTkzCittc2dpZCAiRTE0NDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gOnoiCittc2dzdHIgIkUxNDQ6IG5l6O1zZWxu/SBhcmd1bWVudCBwcmUgOnoiCisKKyM6IGV4X2NtZHMuYzozMjc4Cittc2dpZCAiRTE0NTogU2hlbGwgY29tbWFuZHMgbm90IGFsbG93ZWQgaW4gcnZpbSIKK21zZ3N0ciAiRTE0NTogcnZpbSBuZXBvdm9sdWplIHBvdZ5pdGllIHBy7Wthem92IHNoZWxsdSIKKworIzogZXhfY21kcy5jOjMzODUKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiBSZWd1bOFybmUgdv1yYXp5IG5lc236IGJ5nSBvZGRlbGVu6SBw7XNtZW5hbWkiCisKKyM6IGV4X2NtZHMuYzozNzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2Ugd2l0aCAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCittc2dzdHIgIm5haHJhZGmdICVzICh5L24vYS9xL0kvXkUvXlkpPyIKKworIzogZXhfY21kcy5jOjQwOTIKK21zZ2lkICIoSW50ZXJydXB0ZWQpICIKK21zZ3N0ciAiKHByZXJ1mmVu/SkgIgorCisjOiBleF9jbWRzLmM6NDA5NgorbXNnaWQgIjEgc3Vic3RpdHV0aW9uIgorbXNnc3RyICJwb+hldCBuYWhyYWRlbu0gbmEgcmlhZG9rOiAxIgorCisjOiBleF9jbWRzLmM6NDA5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgc3Vic3RpdHV0aW9ucyIKK21zZ3N0ciAicG/oZXQgbmFocmFkZW7tIG5hIHJpYWRvazogJWxkIgorCisjOiBleF9jbWRzLmM6NDEwMQorbXNnaWQgIiBvbiAxIGxpbmUiCittc2dzdHIgIiBuYSAxIHJpYWRrdSIKKworIzogZXhfY21kcy5jOjQxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uICVsZCBsaW5lcyIKK21zZ3N0ciAiIG5hICVsZCByaWFka292IgorCisjOiBleF9jbWRzLmM6NDE1NAorbXNnaWQgIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE0NzogZ2xvYmFsIG5lZOEgc2Egdm9sYZ0gcmVrdXJ67XZuZSIKKworIzogZXhfY21kcy5jOjQxODkKK21zZ2lkICJFMTQ4OiBSZWd1bGFyIGV4cHJlc3Npb24gbWlzc2luZyBmcm9tIGdsb2JhbCIKK21zZ3N0ciAiRTE0ODogUHJpIHBy7WthemUgZ2xvYmFsIGNo/WJhIHJlZ3Vs4XJueSB2/XJheiIKKworIzogZXhfY21kcy5jOjQyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0dGVybiBmb3VuZCBpbiBldmVyeSBsaW5lOiAlcyIKK21zZ3N0ciAiVnpvciBu4WpkZW79IG5hIGthnmRvbSByaWFka3U6ICVzIgorCisjOiBleF9jbWRzLmM6NDMxOQorbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMgUG9zbGVkbv0gUmWdYXplYyBQb2RuYWRwaXN1OlxuIgorIiQiCisKKyM6IGV4X2NtZHMuYzo0NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTogvHV0dWplbSwgcHJlICVzIG5pZSBqZSCeaWFkbnkgcG9tb2Nu7WsiCisKKyM6IGV4X2NtZHMuYzo0NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAivHV0dWplbSwgc/pib3IgXCIlc1wiIHMgcG9tb2Nu7WtvbSBuZWJvbCBu4WpkZW79IgorCisjOiBleF9jbWRzLmM6NDkxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiAlcyBuaWUgamUgYWRyZXPhcm9tIgorCisjOiBleF9jbWRzLmM6NDk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUyOiBDYW5ub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE1MjogTmVk4SBzYSBvdHZvcmmdICVzIHByZSB64XBpcyIKKworIzogZXhfY21kcy5jOjQ5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MzogVW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxNTM6IE5lZOEgc2Egb3R2b3JpnSAlcyBwcmUgeuFwaXMiCisKKyM6IGV4X2NtZHMuYzo1MDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTQ6IER1cGxpY2F0ZSB0YWcgXCIlc1wiIGluIGZpbGUgJXMiCittc2dzdHIgIkUxNTQ6IER1cGxpY2l0bv0gdGFnIFwiJXNcIiB2IHP6Ym9yZSAlcyIKKworIzogZXhfY21kcy5jOjUxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiBOZXpu4W1hIGZ1bmtjaWE6ICVzIgorCisjOiBleF9jbWRzLmM6NTE1OQorbXNnaWQgIkUxNTY6IE1pc3Npbmcgc2lnbiBuYW1lIgorbXNnc3RyICJFMTU2OiBDaP1iYSBpZGVudGlmaWvhdG9yIHByZSBzaWduIgorCisjOiBleF9jbWRzLmM6NTIwNQorbXNnaWQgIkUyNTU6IFRvbyBtYW55IHNpZ25zIGRlZmluZWQiCittc2dzdHIgIkUyNTU6IFBy7WxpmiBtbm9obyBkZWZpbm92YW79Y2ggb3puYehlbu0iCisKKyM6IGV4X2NtZHMuYzo1MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTogQ2h5Ym5lIG96bmHoZW79IHRleHQ6ICVzIgorCisjOiBleF9jbWRzLmM6NTI3MSBleF9jbWRzLmM6NTQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiBOZXpu4W1lIG96bmHoZW5pZTogJXMiCisKKyM6IGV4X2NtZHMuYzo1MzE3Cittc2dpZCAiRTE1OTogTWlzc2luZyBzaWduIG51bWJlciIKK21zZ3N0ciAiRTE1OTogQ2j9YmEg6GlzbG8gb3puYehlbmlhIgorCisjOiBleF9jbWRzLmM6NTM5NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU4OiBJbnZhbGlkIGJ1ZmZlciBuYW1lOiAlcyIKK21zZ3N0ciAiRTE1ODogQ2h5Ym7pIG1lbm8gYnVmZmVydTogJXMiCisKKyM6IGV4X2NtZHMuYzo1NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiBDaHlibukgSUQgb3puYehlbmlhOiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1NjA3Cittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJbdnltYXphbv1dIgorCisjOiBleF9jbWRzMi5jOjcwCittc2dpZCAiRW50ZXJpbmcgRGVidWcgbW9kZS4gIFR5cGUgXCJjb250XCIgdG8gbGVhdmUuIgorbXNnc3RyICJTcPqanWFtIHJlnmltIGxhZGVuaWEuIFByZSB1a29u6GVuaWUgbmFw7Zp0ZSBcImNvbnRcIi4iCisKKyM6IGV4X2NtZHMyLmM6NzQgZXhfZG9jbWQuYzo3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6ICVzIgorbXNnc3RyICJyaWFkb2sgJWxkOiAlcyIKKworIzogZXhfY21kczIuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjbWQ6ICVzIgorbXNnc3RyICJwcu1rYXo6ICVzIgorCisjOiBleF9jbWRzMi5jOjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIgorbXNnc3RyICJCb2QgcHJlcnWaZW5pYSB2IFwiJXMlc1wiIG5hIHJpYWRrdSAlbGQiCisKKyM6IGV4X2NtZHMyLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjE6IEJyZWFrcG9pbnQgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTE2MTogQm9kIHByZXJ1mmVuaWEgbmVu4WpkZW79OiAlcyIKKworIzogZXhfY21kczIuYzo0MTQKK21zZ2lkICJObyBicmVha3BvaW50cyBkZWZpbmVkIgorbXNnc3RyICJOZWJvbGkgZGVmaW5vdm7pIJ5pYWRuZSBib2R5IHByZXJ1mmVuaWEiCisKKyM6IGV4X2NtZHMyLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUzZCAgJXMgJXMgIGxpbmUgJWxkIgorbXNnc3RyICIlM2QgICVzICVzICByaWFkb2sgJWxkIgorCisjOiBleF9jbWRzMi5jOjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlIGNoYW5nZXMgdG8gXCIlLipzXCI/IgorbXNnc3RyICJVbG+eaZ0gem1lbnkgZG8gXCIlLipzXCI/IgorCisjOiBleF9jbWRzMi5jOjYyNyBleF9kb2NtZC5jOjg2NjcKK21zZ2lkICJVbnRpdGxlZCIKK21zZ3N0ciAiQmV6IG1lbmEiCisKKyM6IGV4X2NtZHMyLmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiBCdWZmZXIgXCIlc1wiIG9ic2FodWplIG5ldWxvnmVu6SB6bWVueSIKKworIzogZXhfY21kczIuYzo4MzIKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIlZhcm92YW5pZTogTmXoYWthbv0gdnN0dXAgZG8gaW7paG8gYnVmZmVydSAoc2tvbnRyb2x1anRlIGF1dG9tYXRpY2vpIHBy7WthenkpIgorCisjOiBleF9jbWRzMi5jOjEyMDgKK21zZ2lkICJFMTYzOiBUaGVyZSBpcyBvbmx5IG9uZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNjM6IFByZSD6cHJhdnUgYm9sIHphZGFu/SBpYmEgamVkZW4gc/pib3IiCisKKyM6IGV4X2NtZHMyLmM6MTIxMAorbXNnaWQgIkUxNjQ6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiRTE2NDogUHJlZCBwcnb9IHP6Ym9yIHNhIG5lZOEgcHJlc2tv6GmdIgorCisjOiBleF9jbWRzMi5jOjEyMTIKK21zZ2lkICJFMTY1OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgZmlsZSIKK21zZ3N0ciAiRTE2NTogWmEgcG9zbGVkbv0gc/pib3Igc2EgbmVk4SBwcmVza2/oaZ0iCisKKyM6IGV4X2NtZHMyLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiCittc2dzdHIgIki+YWThbSBcIiVzXCIgdiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiIKK21zZ3N0ciAiSL5hZOFtIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgInP6Ym9yIFwiJXNcIiBuZWJvbCBu4WpkZW79IHYgJ3J1bnRpbWVwYXRoJyIKKworIzogZXhfY21kczIuYzoxNzE0Cittc2dpZCAiU291cmNlIFZpbSBzY3JpcHQiCittc2dzdHIgIlpkcm9qb3b9IHNrcmlwdCBWaW0iCisKKyM6IGV4X2NtZHMyLmM6MTgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc291cmNlIGEgZGlyZWN0b3J5OiBcIiVzXCIiCittc2dzdHIgIlwiJXNcIiBuaWUgamUgYWRyZXPhcm9tIgorCisjOiBleF9jbWRzMi5jOjE4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIm5lZOEgc2EgaW50ZXJwcmV0b3ZhnSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgInJpYWRvayAlbGQ6IG5lbfSeZSBieZ0gemRyb2ogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJpbnRlcnByZXR1amVtIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxODgwCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgInJpYWRvayAlbGQgamUgemRyb2pvbSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTk4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzb3VyY2luZyAlcyIKK21zZ3N0ciAiZG9rb27oZW7hIGludGVycHJldOFjaWEgJXMiCisKKyM6IGV4X2NtZHMyLmM6MjI4NworbXNnaWQgIlcxNTogV2FybmluZzogV3JvbmcgbGluZSBzZXBhcmF0b3IsIF5NIG1heSBiZSBtaXNzaW5nIgorbXNnc3RyICJXMTU6IFZhcm92YW5pZTogY2h5Ym79IG9kZGW+b3Zh6CByaWFka292LiBNb55u4SBjaP1iYSBeTS4iCisKKyM6IGV4X2NtZHMyLmM6MjMzNgorbXNnaWQgIkUxNjc6IDpzY3JpcHRlbmNvZGluZyB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjc6IDpmaW5pc2ggcG91nml06SBtaW1vIGludGVycHJldG92YW79IHP6Ym9yIgorCisjOiBleF9jbWRzMi5jOjIzNjkKK21zZ2lkICJFMTY4OiA6ZmluaXNoIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2ODogOmZpbmlzaCBwb3WeaXTpIG1pbW8gaW50ZXJwcmV0b3Zhbv0gc/pib3IiCisKKyM6IGV4X2NtZHMyLmM6MjgzOAorbXNnaWQgIk5vIHRleHQgdG8gYmUgcHJpbnRlZCIKK21zZ3N0ciAiz2Fsmu0gbmEgdGxh6CIKKworIzogZXhfY21kczIuYzoyOTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nIHBhZ2UgJWQgKCVkJSUpIgorbXNnc3RyICJUbGHo7W0gc3RyYW51ICVkICglZCUlKSIKKworIzogZXhfY21kczIuYzoyOTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBDb3B5ICVkIG9mICVkIgorbXNnc3RyICJL83BpYSAlZCB6ICVkIgorCisjOiBleF9jbWRzMi5jOjI5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRlZDogJXMiCittc2dzdHIgIlZ5dGxh6GVu6TogJXMiCisKKyM6IGV4X2NtZHMyLmM6Mjk4NAorbXNnaWQgIlByaW50aW5nIGFib3J0ZWQiCittc2dzdHIgIlRsYeggYm9sYSB6cnWaZW7hIgorCisjOiBleF9jbWRzMi5jOjMzNjcKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IE5lZOEgc2EgemFwaXNvdmGdIGRvIHb9c3R1cG7paG8gUG9zdFNjcmlwdG926WhvIHP6Ym9ydSIKKworIzogZXhfY21kczIuYzo0MDQyCittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiBOZWThIHNhIG90dm9yaZ0gdv1zdHVwbv0gUG9zdFNjcmlwdG92/SBz+mJvciIKKworIzogZXhfY21kczIuYzo0MDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTY6IE5lZOEgc2Egb3R2b3JpnSBz+mJvciBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6IE5lZOEgc2Eg6O10YZ0gUG9zdFNjcmlwdG92/SBz+mJvciBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDI4OQorbXNnaWQgIlNlbmRpbmcgdG8gcHJpbnRlci4uLiIKK21zZ3N0ciAiUG9zaWVsYW0gbmEgdGxh6GlhcmXyLi4uIgorCisjOiBleF9jbWRzMi5jOjQyOTMKK21zZ2lkICJFMzY1OiBGYWlsZWQgdG8gcHJpbnQgUG9zdFNjcmlwdCBmaWxlIgorbXNnc3RyICJFMzY1OiBQb3N0U2NyaXB0b3b9IHP6Ym9yIHNhIG5lcG9kYXJpbG8gdnl0bGHoaZ0iCisKKyM6IGV4X2NtZHMyLmM6NDI5NQorbXNnaWQgIlByaW50IGpvYiBzZW50LiIKK21zZ3N0ciAiVGxh6G924SD6bG9oYSBib2xhIG9kb3NsYW7hLiIKKworIzogZXhfY21kczIuYzo0NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICJBa3R14WxueSAlcyBqYXp5azogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6IE5lZOEgc2EgbmFzdGF2aZ0gamF6eWsgbmEgXCIlc1wiIgorCisjOiBleF9kb2NtZC5jOjQ5MAorbXNnaWQgIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIgorbXNnc3RyICJTcPqanWFtIEV4IHJlnmltLiBOYXBpmnRlIFwidmlzdWFsXCIgcHJlIG7hdnJhdCBkbyBOb3Jt4Wxu7WhvIHJlnmltdS4iCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjUyNgorbXNnaWQgIkF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJLb25pZWMgc/pib3J1IgorCisjOiBleF9kb2NtZC5jOjYwMQorbXNnaWQgIkUxNjk6IENvbW1hbmQgdG9vIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE2OTogUHLta2F6IGplIHBy7WxpmiB6bG+eaXT9IgorCisjOiBleF9kb2NtZC5jOjkxMQorbXNnaWQgIkUxNzA6IE1pc3NpbmcgOmVuZHdoaWxlIgorbXNnc3RyICJFMTcwOiBDaP1iYSA6ZW5kd2hpbGUiCisKKyM6IGV4X2RvY21kLmM6OTEzCittc2dpZCAiRTE3MTogTWlzc2luZyA6ZW5kaWYiCittc2dzdHIgIkUxNzE6IENo/WJhIDplbmRpZiIKKworIzogZXhfZG9jbWQuYzo5MjMKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICJLb25pZWMgemRyb2pvdulobyBz+mJvcnUiCisKKyM6IGV4X2RvY21kLmM6OTI0Cittc2dpZCAiRW5kIG9mIGZ1bmN0aW9uIgorbXNnc3RyICJLb25pZWMgZnVua2NpZSIKKworIzogZXhfZG9jbWQuYzoxMzQ0Cittc2dpZCAiQW1iaWd1b3VzIHVzZSBvZiB1c2VyLWRlZmluZWQgY29tbWFuZCIKK21zZ3N0ciAiTmVqZWRub3puYehu6SBwb3WeaXRpZSBwb3We7XZhdGW+b20gZGVmaW5vdmFu6WhvIHBy7WthenUiCisKKyM6IGV4X2RvY21kLmM6MTM1OAorbXNnaWQgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAiTmllIGplIHBy7Wthem9tIGVkaXRvcnUiCisKKyM6IGV4X2RvY21kLmM6MTQ0MQorbXNnaWQgIkRvbid0IHBhbmljISIKK21zZ3N0ciAijmlhZG51IHBhbmlrdSEiCisKKyM6IGV4X2RvY21kLmM6MTQ2MAorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiIKK21zZ3N0ciAiWmFkYW79IHNw5HRu/SByb3pzYWgiCisKKyM6IGV4X2RvY21kLmM6MTQ2OQorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiwgT0sgdG8gc3dhcCIKK21zZ3N0ciAiWmFkYW79IHNw5HRu/SByb3pzYWguIE9LIG9kbG+eaZ0iCisKKyM6IGV4X2RvY21kLmM6MTU4MAorbXNnaWQgIlVzZSB3IG9yIHc+PiIKK21zZ3N0ciAiUG91nml0ZSB3IOhpIHc+PiIKKworIzogZXhfZG9jbWQuYzozMDk3Cittc2dpZCAiRTMxOTogU29ycnksIHRoZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMzE5OiC8dXR1amVtLCBhbGUgdGVudG8gcHLta2F6IG5pZSBqZSBpbXBsZW1lbnRvdmFu/SIKKworIzogZXhfZG9jbWQuYzozMjY3Cittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6IFBy7XB1c3Ru/SBqZSBpYmEgamVkZW4gbuF6b3Ygc/pib3J1IgorCisjOiBleF9kb2NtZC5jOjM4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICJFmnRlIHpvc3ThdmFq+iAlZCBz+mJvcm92IGsg+nByYXZlLiBDaGNldGUgbmFwcmllayB0b211IHVrb27oaZ0gZWRpdG9yPyIKKworIzogZXhfZG9jbWQuYzozODMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzM6ICVsZCBtb3JlIGZpbGVzIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6IEWadGUgem9zdOF2YWphavogJWxkIHP6Ym9yeSBrIPpwcmF2ZS4iCisKKyM6IGV4X2RvY21kLmM6MzkyNAorbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IHVzZSAhIHRvIHJlZGVmaW5lIgorbXNnc3RyICJFMTc0OiBQcu1rYXogdZ4gZXhpc3R1amU6IHBvdZ5pdGUgISBwcmUgcHJlZGVmaW5vdmFuaWUiCisKKyM6IGV4X2RvY21kLmM6NDAyOQorbXNnaWQgIiIKKyJcbiIKKyIgICAgTmFtZSAgICAgICAgQXJncyBSYW5nZSBDb21wbGV0ZSAgRGVmaW5pdGlvbiIKK21zZ3N0ciAiIgorIlxuIgorIiAgICBNZW5vICAgICAgIEFyZ3MgUm96c2FoINpwbG5vc50gIERlZmlu7WNpYSIKKworIzogZXhfZG9jbWQuYzo0MTE4Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICJOZWJvbGkgbuFqZGVu6SCeaWFkbmUgcG91nml2YXRlvm9tIGRlZmlub3ZhbukgcHLta2F6eSIKKworIzogZXhfZG9jbWQuYzo0MTQ5Cittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTogTmVib2xpIHphZGFu6SCeaWFkbmUgdmxhc3Rub3N0aSIKKworIzogZXhfZG9jbWQuYzo0MjAxCittc2dpZCAiRTE3NjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJFMTc2OiBDaHlibv0gcG/oZXQgYXJndW1lbnRvdiIKKworIzogZXhfZG9jbWQuYzo0MjE2Cittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3NzogUG/oZXQgbmVt9J5lIGJ5nSB6YWRhbv0gZHZha3LhdCIKKworIzogZXhfZG9jbWQuYzo0MjI2Cittc2dpZCAiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIKK21zZ3N0ciAiRTE3ODogQ2h5Ym7hIGltcGxpY2l0buEgaG9kbm90YSBwcmUgcG/oZXQiCisKKyM6IGV4X2RvY21kLmM6NDI1NAorbXNnaWQgIkUxNzk6IGFyZ3VtZW50IHJlcXVpcmVkIGZvciBjb21wbGV0ZSIKK21zZ3N0ciAiRTE3OTogcHJlIGRvcGxuZW5pZSBqZSBwb3RyZWJu/SBhcmd1bWVudCIKKworIzogZXhfZG9jbWQuYzo0MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiBDaHlibuEgaG9kbm90YSBkb3BsbmVuaWE6ICVzIgorCisjOiBleF9kb2NtZC5jOjQyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MTogSW52YWxpZCBhdHRyaWJ1dGU6ICVzIgorbXNnc3RyICJFMTgxOiBDaHlibuEgdmxhc3Rub3OdOiAlcyIKKworIzogZXhfZG9jbWQuYzo0MzIyCittc2dpZCAiRTE4MjogSW52YWxpZCBjb21tYW5kIG5hbWUiCittc2dzdHIgIkUxODI6IENoeWJu6SBtZW5vIHBy7WthenUiCisKKyM6IGV4X2RvY21kLmM6NDMzNworbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4MzogUG91nu12YXRlvm9tIGRlZmlub3ZhbukgcHLta2F6eSBtdXNpYSB6YejtbmGdIHZlvmv9bSBw7XNtZW5vbSIKKworIzogZXhfZG9jbWQuYzo0NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODQ6IE5vIHN1Y2ggdXNlci1kZWZpbmVkIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTg0OiBQb3We7XZhdGW+b20gZGVmaW5vdmFu/SBwcu1rYXogJXMgbmVleGlzdHVqZSIKKworIzogZXhfZG9jbWQuYzo0ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTogU2No6W1hIGZhcmllYiAlcyBuZW7hamRlbuEiCisKKyM6IGV4X2RvY21kLmM6NDg2NQorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICJQb3pkcmF1amVtLCBWaW0gcG91nu12YXRlviEiCisKKyM6IGV4X2RvY21kLmM6NTU2OQorbXNnaWQgIkVkaXQgRmlsZSBpbiBuZXcgd2luZG93IgorbXNnc3RyICJVcHJhdmmdIHP6Ym9yIHYgbm92b20gb2tuZSIKKworIzogZXhfZG9jbWQuYzo1ODM5Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICKOaWFkbnkgb2RrbGFkYWPtIHP6Ym9yIgorCisjOiBleF9kb2NtZC5jOjU5NDMKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAiUHJpcG9qaZ0gc/pib3IiCisKKyM6IGV4X2RvY21kLmM6NjAwMgorbXNnaWQgIkUxODY6IE5vIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE4NjogjmlhZG55IHByZWRjaOFkemFq+mNpIGFkcmVz4XIiCisKKyM6IGV4X2RvY21kLmM6NjA3OQorbXNnaWQgIkUxODc6IFVua25vd24iCittc2dzdHIgIkUxODc6IE5lem7hbXkiCisKKyM6IGV4X2RvY21kLmM6NjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIlVtaWVzdGVuaWUgb2tuYTogWCAlZCwgWSAlZCIKKworIzogZXhfZG9jbWQuYzo2MjAyCittc2dpZCAiRTE4ODogT2J0YWluaW5nIHdpbmRvdyBwb3NpdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIkUxODg6IE5hIHRlanRvIHBsYXRmb3JtZSBzYSBuZWThIHVtaWVzdG5lbmllIG9rbmEgemlzdGmdIgorCisjOiBleF9kb2NtZC5jOjY0NjgKK21zZ2lkICJTYXZlIFJlZGlyZWN0aW9uIgorbXNnc3RyICJVbG+eaZ0gcHJlc21lcm92YW5pZSIKKworIzogZXhfZG9jbWQuYzo2NjE3Cittc2dpZCAiU2F2ZSBWaWV3IgorbXNnc3RyICJVbG+eaZ0gcG9ovmFkIgorCisjOiBleF9kb2NtZC5jOjY2MTgKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIlVsb55pnSBzZWRlbmllIgorCisjOiBleF9kb2NtZC5jOjY2MjAKK21zZ2lkICJTYXZlIFNldHVwIgorbXNnc3RyICJVbG+eaZ0gbmFzdGF2ZW5pZSIKKworIzogZXhfZG9jbWQuYzo2NzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODk6IFwiJXNcIiBleGlzdHMgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTE4OTogXCIlc1wiIGV4aXN0dWplIChwb3WeaXRlICEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGV4X2RvY21kLmM6Njc3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxOTA6IE5lZOEgc2Egb3R2b3JpnSBcIiVzXCIgcHJlIHrhcGlzIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo2Nzk4Cittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICJFMTkxOiBBcmd1bWVudGVtIG30nmUgYnmdIGliYSBw7XNpZW1vIGFsZWJvIHByYXb9IOhpIL5hdv0gYXBvc3Ryb2YiCisKKyM6IGV4X2RvY21kLmM6Njg0MQorbXNnaWQgIkUxOTI6IFJlY3Vyc2l2ZSB1c2Ugb2YgOm5vcm1hbCB0b28gZGVlcCIKK21zZ3N0ciAiRTE5MjogVm5vcmVuaWUgOm5vcm1hbCBqZSBwcu1saZogaGxib2vpIgorCisjOiBleF9kb2NtZC5jOjcyMDIKK21zZ2lkICI6aWYgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAidm5vcmVuaWUgOmlmIGplIHBy7WxpmiBobGJva+kiCisKKyM6IGV4X2RvY21kLmM6NzIzNworbXNnaWQgIjplbmRpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVuZGlmIGJleiB6b2Rwb3ZlZGFq+mNlaG8gOmlmIgorCisjOiBleF9kb2NtZC5jOjcyNTcKK21zZ2lkICI6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVsc2UgYmV6IHpvZHBvdmVkYWr6Y2VobyA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzI1OQorbXNnaWQgIjplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIjplbHNlaWYgYmV6IHpvZHBvdmVkYWr6Y2VobyA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzMxMQorbXNnaWQgIjp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJ2bm9yZW5pZSA6d2hpbGUgamUgcHLtbGmaIGhsYm9r6SIKKworIzogZXhfZG9jbWQuYzo3MzU3Cittc2dpZCAiOmNvbnRpbnVlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICI6Y29udGludWUgYmV6IHpvZHBvdmVkYWr6Y2VobyA6d2hpbGUiCisKKyM6IGV4X2RvY21kLmM6NzM4NAorbXNnaWQgIjpicmVhayB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiOmJyZWFrIGJleiB6b2Rwb3ZlZGFq+mNlaG8gOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjc0MDcgZXhfZG9jbWQuYzo3NDEyCittc2dpZCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICI6ZW5kd2hpbGUgYmV6IHpvZHBvdmVkYWr6Y2VobyA6d2hpbGUiCisKKyM6IGV4X2RvY21kLmM6NzQzMworbXNnaWQgIkUxOTM6IDplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxOTM6IDplbmRmdW5jdGlvbiBtaW1vIGZ1bmtjaXUiCisKKyM6IGV4X2RvY21kLmM6NzYxMworbXNnaWQgIkUxOTQ6IE5vIGFsdGVybmF0ZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgJyMnIgorbXNnc3RyICJFMTk0OiCOaWFkbnkgYWx0ZXJuYXTtdm55IG7hem92IHP6Ym9ydSwga3Rvcv1tIGJ5IGJvbG8gbW+ebukgbmFocmFkaZ0gJyMnIgorCisjOiBleF9kb2NtZC5jOjc2NDQKK21zZ2lkICJubyBhdXRvY29tbWFuZCBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWZpbGU+XCIiCittc2dzdHIgIp5pYWRueSBu4XpvdiBz+mJvcnUsIGt0b3L9bSBieSBib2xvIG1vnm7pIG5haHJhZGmdIFwiPGFmaWxlPlwiIgorCisjOiBleF9kb2NtZC5jOjc2NTIKK21zZ2lkICJubyBhdXRvY29tbWFuZCBidWZmZXIgbnVtYmVyIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFidWY+XCIiCittc2dzdHIgIp5pYWRuZSDo7XNsbyBidWZmZXJ1LCBrdG9y/W0gYnkgYm9sbyBtb55u6SBuYWhyYWRpnSBcIjxhYnVmPlwiIgorCisjOiBleF9kb2NtZC5jOjc2NjMKK21zZ2lkICJubyBhdXRvY29tbWFuZCBtYXRjaCBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFtYXRjaD5cIiIKK21zZ3N0ciAiIgorIp5pYWRuYSB6aG9kYSBhdXRvbWF0aWNr/WNoIHBy7Wthem92LCBrdG9yb3UgYnkgYm9sbyBtb55u6SBuYWhyYWRpnSBcIjxhbWF0Y2g+IgorIlwiIgorCisjOiBleF9kb2NtZC5jOjc2NzMKK21zZ2lkICJubyA6c291cmNlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxzZmlsZT5cIiIKK21zZ3N0ciAinmlhZG55IDpzb3VyY2Ugc/pib3IsIGt0b3L9bSBieSBib2xvIG1vnm7pIG5haHJhZGmdIFwiPHNmaWxlPlwiIgorCisjOiBleF9kb2NtZC5jOjc3MTQKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZmlsZSBuYW1lIGZvciAnJScgb3IgJyMnLCBvbmx5IHdvcmtzIHdpdGggXCI6cDpoXCIiCittc2dzdHIgIlBy4Xpkbv0gbuF6b3Ygc/pib3J1IHByZSAnJScg6GkgJyMnIGZ1bmd1amUgaWJhIHMgXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6NzcxNgorbXNnaWQgIkV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIlb9c2xlZGtvbSB2eWhvZG5vdGVuaWEgamUgcHLhemRueSByZZ1hemVjIgorCisjOiBleF9kb2NtZC5jOjg2NDkKK21zZ2lkICJFMTk1OiBDYW5ub3Qgb3BlbiB2aW1pbmZvIGZpbGUgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxOTU6IE5lZOEgc2Egb3R2b3JpnSBwcmUg6O10YW7tIHZpbWluZm8gc/pib3IiCisKKyM6IGV4X2RvY21kLmM6ODgyMgorbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5NjogViB0ZWp0byB2ZXJ6aSBuaWUgc/ogZGlhZ3JhcGh5IHBvZHBvcm92YW7pIgorCisjOiBleF9nZXRsbi5jOjI4MzMKK21zZ2lkICJ0YWduYW1lIgorbXNnc3RyICJtZW5vIHRhZ3UiCisKKyM6IGV4X2dldGxuLmM6MjgzNgorbXNnaWQgIiBraW5kIGZpbGVcbiIKK21zZ3N0ciAiIHR5cCBz+mJvcnVcbiIKKworIzogZXhfZ2V0bG4uYzo0MDQ5Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICIndm++YmEgJ2hpc3RvcnknIGplIG5hc3RhdmVu4SBuYSBudWx1IgorCisjOiBleF9nZXRsbi5jOjQyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgJXMgSGlzdG9yeSAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIEhpc3TzcmlhICVzICh6YejtbmFq+mNpIG5ham5vdppvdSBwb2xvnmtvdSk6XG4iCisKKyM6IGV4X2dldGxuLmM6NDI5MAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAiUHLta2F6b3bpIFJpYWRreSIKKworIzogZXhfZ2V0bG4uYzo0MjkxCittc2dpZCAiU2VhcmNoIFN0cmluZyIKK21zZ3N0ciAiVnlovmFk4XZhbv0gUmWdYXplYyIKKworIzogZXhfZ2V0bG4uYzo0MjkyCittc2dpZCAiRXhwcmVzc2lvbiIKK21zZ3N0ciAiVv1yYXoiCisKKyM6IGV4X2dldGxuLmM6NDI5MworbXNnaWQgIklucHV0IExpbmUiCittc2dzdHIgIlZzdHVwbv0gUmlhZG9rIgorCisjOiBleF9nZXRsbi5jOjQzMjMKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyIHByZXZ5mnVqZSBk5Z5rdSBwcu1rYXp1IgorCisjOiBleF9nZXRsbi5jOjQ0OTEKK21zZ2lkICJFMTk5OiBBY3RpdmUgd2luZG93IG9yIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICJFMTk5OiBBa3Ttdm5lIG9rbm8gYWxlYm8gYnVmZmVyIGJvbCB2eW1hemFu/SIKKworIzogZmlsZWlvLmM6MzUxCittc2dpZCAiSWxsZWdhbCBmaWxlIG5hbWUiCittc2dzdHIgIk5lcHLtc3R1cG79IG7hem92IHP6Ym9ydSIKKworIzogZmlsZWlvLmM6Mzc1IGZpbGVpby5jOjUwMCBmaWxlaW8uYzoyNTE2IGZpbGVpby5jOjI1NTQKK21zZ2lkICJpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiamUgYWRyZXPhcm9tIgorCisjOiBmaWxlaW8uYzozNzcKK21zZ2lkICJpcyBub3QgYSBmaWxlIgorbXNnc3RyICJuaWUgamUgc/pib3JvbSIKKworIzogZmlsZWlvLmM6NTIyIGZpbGVpby5jOjM2NDYKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJbbm92/SBz+mJvcl0iCisKKyM6IGZpbGVpby5jOjU0MAorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIltwcu1zdHVwIG9kbWlldG51dP1dIgorCisjOiBmaWxlaW8uYzo2MzQKK21zZ2lkICJFMjAwOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbWFkZSB0aGUgZmlsZSB1bnJlYWRhYmxlIgorbXNnc3RyICJFMjAwOiAqUmVhZFByZSBhdXRvbWF0aWNr6SBwcu1rYXp5IHVyb2JpbGkgc/pib3IgbmXoaXRhdGW+bv1tIgorCisjOiBmaWxlaW8uYzo2MzYKK21zZ2lkICJFMjAxOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMjAxOiAqUmVhZFByZSBhdXRvbWF0aWNr6SBwcu1rYXp5IG5lc236IG1lbmmdIGFrdHXhbG55IGJ1ZmZlciIKKworIzogZmlsZWlvLmM6NjU3Cittc2dpZCAiVmltOiBSZWFkaW5nIGZyb20gc3RkaW4uLi5cbiIKK21zZ3N0ciAiVmltOiDo7XRhbSB6IJp0YW5kYXJkbulobyB2c3R1cHUuLi5cbiIKKworIzogZmlsZWlvLmM6NjYzCittc2dpZCAiUmVhZGluZyBmcm9tIHN0ZGluLi4uIgorbXNnc3RyICLI7XRhbSB6IJp0YW5kYXJkbulobyB2c3R1cHUuLi4iCisKKyMuIFJlLW9wZW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgZmFpbGVkIQorIzogZmlsZWlvLmM6ODkyCittc2dpZCAiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiCittc2dzdHIgIkUyMDI6IFBvIGtvbnZlcnppaSBqZSBz+mJvciBuZehpdHRhdGW+bv0hIgorCisjOiBmaWxlaW8uYzoxNzU1Cittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2Zwb21lbm92YW7hIHL6cmEvc29rZXRdIgorCisjOiBmaWxlaW8uYzoxNzYyCittc2dpZCAiW2ZpZm9dIgorbXNnc3RyICJbcG9tZW5vdmFu4SBy+nJhXSIKKworIzogZmlsZWlvLmM6MTc2OQorbXNnaWQgIltzb2NrZXRdIgorbXNnc3RyICJbc29rZXRdIgorCisjOiBmaWxlaW8uYzoxNzc3Cittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW1JPXSIKKworIzogZmlsZWlvLmM6MTc4NworbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW2No/WJhIENSXSIKKworIzogZmlsZWlvLmM6MTc5MgorbXNnaWQgIltOTCBmb3VuZF0iCittc2dzdHIgIltu4WpkZW7pIE5MXSIKKworIzogZmlsZWlvLmM6MTc5NworbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW2RsaOkgcmlhZGt5IHphbG9tZW7pXSIKKworIzogZmlsZWlvLmM6MTgwMyBmaWxlaW8uYzozNjMwCittc2dpZCAiW05PVCBjb252ZXJ0ZWRdIgorbXNnc3RyICJbbmVza29udmVydG92YW79XSIKKworIzogZmlsZWlvLmM6MTgwOCBmaWxlaW8uYzozNjM1Cittc2dpZCAiW2NvbnZlcnRlZF0iCittc2dzdHIgIltza29udmVydG92YW79XSIKKworIzogZmlsZWlvLmM6MTgxNSBmaWxlaW8uYzozNjYwCittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJbemGaaWZyb3Zhbv1dIgorCisjOiBmaWxlaW8uYzoxODIyCittc2dpZCAiW0NPTlZFUlNJT04gRVJST1JdIgorbXNnc3RyICJbQ0hZQkEgUFJFVk9EVV0iCisKKyM6IGZpbGVpby5jOjE4MjkKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbQ0hZQlkgyM1UQU5JQV0iCisKKyM6IGZpbGVpby5jOjIwMzYKK21zZ2lkICJDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3IgY29udmVyc2lvbiIKK21zZ3N0ciAiTmVk4SBzYSBu4WpznSBkb+hhc279IHP6Ym9yIHByZSBrb252ZXJ6aXUiCisKKyM6IGZpbGVpby5jOjIwNDMKK21zZ2lkICJDb252ZXJzaW9uIHdpdGggJ2NoYXJjb252ZXJ0JyBmYWlsZWQiCittc2dzdHIgIktvbnZlcnppYSBzICdjaGFyY29udmVydCcgc2EgbmVwb2RhcmlsYSIKKworIzogZmlsZWlvLmM6MjA0NgorbXNnaWQgImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciCittc2dzdHIgIm5lZOEgc2Eg6O10YZ0gdv1zdHVwICdjaGFyY29udmVydCciCisKKyM6IGZpbGVpby5jOjI0MzIKK21zZ2lkICJFMjAzOiBBdXRvY29tbWFuZHMgZGVsZXRlZCBvciB1bmxvYWRlZCBidWZmZXIgdG8gYmUgd3JpdHRlbiIKK21zZ3N0ciAiIgorIkUyMDM6IEF1dG9tYXRpY2vpIHBy7Wthenkgem1hemFsaSDoaSBkZWFrdGl2b3ZhbGkgYnVmZmVyLCBrdG9y/SBtYWwgYnmdICIKKyJ1bG+eZW79IgorCisjOiBmaWxlaW8uYzoyNDU1Cittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IEF1dG9tYXRpY2v9IHBy7WtheiBuZW/oYWvhdmFu/W0gc3D0c29ib20gem1lbmlsIHBv6GV0IHJpYWRrb3YiCisKKyM6IGZpbGVpby5jOjI1MjEgZmlsZWlvLmM6MjUzOAorbXNnaWQgImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIgorbXNnc3RyICJuaWUgamUgc/pib3JvbSBhbmkgemFyaWFkZW7tbSBuYSBrdG9y6SBzYSBk4SB6YXBpc292YZ0iCisKKyM6IGZpbGVpby5jOjI1ODQKK21zZ2lkICJpcyByZWFkLW9ubHkgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiamUgaWJhIHByZSDo7XRhbu1pZShwb3WeaXRlICEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGZpbGVpby5jOjI4ODYKK21zZ2lkICJDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJOZWThIHNhIHphcGlzb3ZhnSBkbyB64Wxvnm7paG8gc/pib3J1IChwb3WeaXRlICEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGZpbGVpby5jOjI4OTgKK21zZ2lkICJDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiQ2h5YmEgcHJpIHV6YXR24XJhbu0geuFsb55u6WhvIHP6Ym9ydSAocG91nml0ZSAhIHByZSB2eW76dGVuaWUpIgorCisjOiBmaWxlaW8uYzoyOTAwCittc2dpZCAiQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiTmVk4SBzYSBuYejtdGGdIHP6Ym9yIHByZSB64WxvaHUgKHBvdZ5pdGUgISBwcmUgdnlu+nRlbmllKSIKKworIzogZmlsZWlvLmM6MjkxNgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiTmVk4SBzYSB2eXR2b3JpnSB64Wxvnm79IHP6Ym9yIChwb3WeaXRlICEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGZpbGVpby5jOjMwMTgKK21zZ2lkICJDYW4ndCBtYWtlIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIk5lZOEgc2Egdnl0dm9yaZ0geuFsb55u/SBz+mJvciAocG91nml0ZSAhIHByZSB2eW76dGVuaWUpIgorCisjIHJlc291cmNlIGZvcmsgPyEKKyM6IGZpbGVpby5jOjMwODAKK21zZ2lkICJUaGUgcmVzb3VyY2UgZm9yayB3aWxsIGJlIGxvc3QgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiJ1Jlc291cmNlIGZvcmsnIGJ1ZGUgc3RyYXRlbv0gKHBvdZ5pdGUgISBwcmUgdnlu+nRlbmllKSIKKworIzogZmlsZWlvLmM6MzE2OQorbXNnaWQgIkUyMTQ6IENhbid0IGZpbmQgdGVtcCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjE0OiBOZWThIHNhIG7hanOdIGRv6GFzbv0gc/pib3IgcHJlIHVrbGFkYW5pZSIKKworIzogZmlsZWlvLmM6MzE4NworbXNnaWQgIkUyMTM6IENhbm5vdCBjb252ZXJ0ICh1c2UgISB0byB3cml0ZSB3aXRob3V0IGNvbnZlcnNpb24pIgorbXNnc3RyICJFMjEzOiBOZWThIHNhIHByZXZpZXOdIChwb3WeaXRlICEgcHJlIHZ5bvp0ZW5pZSBwcmV2b2R1KSIKKworIzogZmlsZWlvLmM6MzIyMgorbXNnaWQgIkUxNjY6IENhbid0IG9wZW4gbGlua2VkIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNjY6IFP6Ym9yIHNhIG5lZOEgb3R2b3JpnSBwcmUgdWtsYWRhbmllIgorCisjOiBmaWxlaW8uYzozMjI2Cittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiBT+mJvciBzYSBuZWThIG90dm9yaZ0gcHJlIHVrbGFkYW5pZSIKKworIzogZmlsZWlvLmM6MzQ3NQorbXNnaWQgIkNsb3NlIGZhaWxlZCIKK21zZ3N0ciAiWmF0dm9yZW5pZSB6bHloYWxvIgorCisjOiBmaWxlaW8uYzozNTQ2Cittc2dpZCAid3JpdGUgZXJyb3IsIGNvbnZlcnNpb24gZmFpbGVkIgorbXNnc3RyICJjaHliYSBwcmkgeuFwaXNlLCBwcmV2b2Qgc2EgbmVwb2RhcmlsIgorCisjOiBmaWxlaW8uYzozNTUyCittc2dpZCAid3JpdGUgZXJyb3IgKGZpbGUgc3lzdGVtIGZ1bGw/KSIKK21zZ3N0ciAiY2h5YmEgcHJpIHVrbGFkYW7tIChqZSB2b75u6SBtaWVzdG8gbmEgZGlza3U/KSIKKworIzogZmlsZWlvLmM6MzYyNQorbXNnaWQgIiBDT05WRVJTSU9OIEVSUk9SIgorbXNnc3RyICIgQ0hZQkEgUFJFVk9EVSIKKworIzogZmlsZWlvLmM6MzY0MQorbXNnaWQgIltEZXZpY2VdIgorbXNnc3RyICJbemFyaWFkZW5pZV0iCisKKyM6IGZpbGVpby5jOjM2NDYKK21zZ2lkICJbTmV3XSIKK21zZ3N0ciAiW25vdv1dIgorCisjOiBmaWxlaW8uYzozNjY4Cittc2dpZCAiIFthXSIKK21zZ3N0ciAiIFtwXSIKKworIzogZmlsZWlvLmM6MzY2OAorbXNnaWQgIiBhcHBlbmRlZCIKK21zZ3N0ciAiIHByaXBvamVu/SIKKworIzogZmlsZWlvLmM6MzY3MAorbXNnaWQgIiBbd10iCittc2dzdHIgIiBbdV0iCisKKyM6IGZpbGVpby5jOjM2NzAKK21zZ2lkICIgd3JpdHRlbiIKK21zZ3N0ciAiIHVsb55lbv0iCisKKyM6IGZpbGVpby5jOjM3MjAKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTogcGF0Y2htb2RlOiBuZWThIHNhIHVsb55pnSBw9HZvZG79IHP6Ym9yIgorCisjOiBmaWxlaW8uYzozNzQyCittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBwYXRjaG1vZGU6IG5lZOEgc2EgemFwaXNvdmGdIGRvIHBy4XpkbmVobyBw9HZvZG7paG8gc/pib3J1IgorCisjOiBmaWxlaW8uYzozNzU3Cittc2dpZCAiRTIwNzogQ2FuJ3QgZGVsZXRlIGJhY2t1cCBmaWxlIgorbXNnc3RyICJFMjA3OiBOZWThIHNhIHZ5bWF6YZ0geuFsb55u/SBz+mJvciIKKworIzogZmlsZWlvLmM6MzgwOQorbXNnaWQgIiIKKyJcbiIKKyJXQVJOSU5HOiBPcmlnaW5hbCBmaWxlIG1heSBiZSBsb3N0IG9yIGRhbWFnZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZBUk9WQU5JRTogT2JzYWggcPR2b2Ru6WhvIHP6Ym9ydSBt9J5lIGJ5nSBzdHJhdGVu/SBhbGVibyBwb5prb2Rlbv1cbiIKKworIzogZmlsZWlvLmM6MzgxMQorbXNnaWQgImRvbid0IHF1aXQgdGhlIGVkaXRvciB1bnRpbCB0aGUgZmlsZSBpcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiEiCittc2dzdHIgIm5ldWtvbuh1anRlIGVkaXRvciBza/RyLCBuZZ4gYnVkZSBz+mJvciD6c3Blmm5lIHVsb55lbv0hIgorCisjOiBmaWxlaW8uYzozODkxCittc2dpZCAiW2Rvc10iCittc2dzdHIgIltkb3NdIgorCisjOiBmaWxlaW8uYzozODkxCittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbZG9zIGZvcm3hdF0iCisKKyM6IGZpbGVpby5jOjM4OTgKK21zZ2lkICJbbWFjXSIKK21zZ3N0ciAiW21hY10iCisKKyM6IGZpbGVpby5jOjM4OTgKK21zZ2lkICJbbWFjIGZvcm1hdF0iCittc2dzdHIgIlttYWMgZm9ybeF0XSIKKworIzogZmlsZWlvLmM6MzkwNQorbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzozOTA1Cittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW3VuaXggZm9ybeF0XSIKKworIzogZmlsZWlvLmM6MzkzMgorbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxIHJpYWRvaywgIgorCisjOiBmaWxlaW8uYzozOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcywgIgorbXNnc3RyICIlbGQgcmlhZGtvdiwgIgorCisjOiBmaWxlaW8uYzozOTM3Cittc2dpZCAiMSBjaGFyYWN0ZXIiCittc2dzdHIgIjEgem5hayIKKworIzogZmlsZWlvLmM6MzkzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxkIHpuYWtvdiIKKworIzogZmlsZWlvLmM6Mzk0OQorbXNnaWQgIltub2VvbF0iCittc2dzdHIgIlueaWFkbnkga29uaWVjIHJpYWRrdV0iCisKKyM6IGZpbGVpby5jOjM5NDkKK21zZ2lkICJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIgorbXNnc3RyICJbbmX6cGxu/SBwb3NsZWRu/SByaWFkb2tdIgorCisjLiBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIy4gbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjLiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyM6IGZpbGVpby5jOjM5NjgKK21zZ2lkICJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiCittc2dzdHIgIlZBUk9WQU5JRTogb2QgamVobyBuYejtdGFuaWEgYm9sIG9ic2FoIHP6Ym9ydSB6bWVuZW79ISEhISIKKworIzogZmlsZWlvLmM6Mzk3MAorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byB3cml0ZSB0byBpdCIKK21zZ3N0ciAiQ2hjZXRlIGhvIG5hb3phaiB1bG+eaZ0iCisKKyM6IGZpbGVpby5jOjQ5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiCittc2dzdHIgIkUyMDg6IENoeWJhIHByaSB64XBpc2UgZG8gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo0OTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDk6IEVycm9yIGNsb3NpbmcgXCIlc1wiIgorbXNnc3RyICJFMjA5OiBDaHliIHByaSB1emF0duFyYW7tIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NDk0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogQ2h5YmEgcHJpIOjtdGFu7SBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjUxMTUKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9tYXRpY2v9IHBy7WtheiB2eW1hemFsIGJ1ZmZlciIKKworIzogZmlsZWlvLmM6NTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBubyBsb25nZXIgYXZhaWxhYmxlIgorbXNnc3RyICJFMjExOiBWYXJvdmFuaWU6IHP6Ym9yIFwiJXNcIiB1niBuaWUgamUgZG9zdHVwbv0iCisKKyM6IGZpbGVpby5jOjUxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlcxMjogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgYW5kIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQgaW4gVmltIGFzICIKKyJ3ZWxsIgorbXNnc3RyICIiCisiVzEyOiBWYXJvdmFuaWU6IHP6Ym9yIFwiJXNcIiBib2wgcG8gemHoYXTtIPpwcmF2eSB6bWVuZW79IGEgVmltIHRpZZ4gem1lbmlsICIKKyJidWZmZXIiCisKKyM6IGZpbGVpby5jOjUxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMTogVmFyb3ZhbmllOiBz+mJvciBcIiVzXCIgYm9sIHBvIHph6GF07SD6cHJhdnkgem1lbmVu/SIKKworIzogZmlsZWlvLmM6NTE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTY6IFZhcm92YW5pZTogUmWeaW0gc/pib3J1IFwiJXNcIiBib2wgcG8gemHoYXTtIPpwcmF2IHptZW5lbv0iCisKKyM6IGZpbGVpby5jOjUxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzEzOiBWYXJvdmFuaWU6IHBvIHph6GF07SD6cHJhdnkgdnl0dm9yZW79IHP6Ym9yIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTE2OAorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIlZhcm92YW5pZSIKKworIzogZmlsZWlvLmM6NTE2OQorbXNnaWQgIiIKKyImT0tcbiIKKyImTG9hZCBGaWxlIgorbXNnc3RyICIiCisiJk9LXG4iCisiJk5h6O10YZ0gc/pib3IiCisKKyM6IGZpbGVpby5jOjUyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IG5lZOEgc2Egb2Jub3ZpnSBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU3NzkKK21zZ2lkICItLURlbGV0ZWQtLSIKK21zZ3N0ciAiLS1WeW1hemFu/S0tIgorCisjLiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdAorIzogZmlsZWlvLmM6NTkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY3OiBObyBzdWNoIGdyb3VwOiBcIiVzXCIiCittc2dzdHIgIkUzNjc6IFNrdXBpbmEgXCIlc1wiIG5lZXhpc3R1amUiCisKKyM6IGZpbGVpby5jOjYwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgKjogJXMiCittc2dzdHIgIkUyMTU6IE5lcHLtc3R1cG79IHpuYWsgcG8gKjogJXMiCisKKyM6IGZpbGVpby5jOjYwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IFVkYWxvc50gJXMgbmVleGlzdHVqZSIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo2MjI0Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRvbWF0aWNr6SBwcu1rYXp5IC0tLSIKKworIzogZmlsZWlvLmM6NjQ5NQorbXNnaWQgIkUyMTc6IENhbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZXZlbnRzIgorbXNnc3RyICJFMjE3OiBBdXRvbWF0aWNr6SBwcu1rYXp5IHNhIG5lZGFq+iBzcHVzdGmdIHByZSBWikVUS1kgdWRhbG9znWkiCisKKyM6IGZpbGVpby5jOjY1MTgKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgIo5pYWRuZSB2eWhvdnVq+mNlIGF1dG9tYXRpY2vpIHBy7WthenkiCisKKyM6IGZpbGVpby5jOjY3OTAKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiB2bm9yZW5pYSBhdXRvbWF0aWNr6WhvIHBy7WthenUgc/ogcHLtbGmaIGhsYm9r6SIKKworIzogZmlsZWlvLmM6NzA3NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBBdXRvIGNvbW1hbmRzIGZvciBcIiVzXCIiCittc2dzdHIgIiVzIGF1dG9tYXRpY2vpIHBy7WthenkgcHJlIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NzA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmcgJXMiCittc2dzdHIgIlNw+pqdYW0gJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZmlsZWlvLmM6NzE1MworIywgYy1mb3JtYXQKK21zZ2lkICJhdXRvY29tbWFuZCAlcyIKK21zZ3N0ciAiQXV0b21hdGlja/0gcHLta2F6ICVzIgorCisjOiBmaWxlaW8uYzo3Njc1Cittc2dpZCAiRTIxOTogTWlzc2luZyB7LiIKK21zZ3N0ciAiRTIxOTogQ2j9YmEgey4iCisKKyM6IGZpbGVpby5jOjc2NzcKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiBDaP1iYSB9LiIKKworIzogZm9sZC5jOjY2Cittc2dpZCAiTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAijmlhZG55IHrhaHliIG5lYm9sIG7hamRlbv0iCisKKyM6IGZvbGQuYzo1NTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogUG9tb2NvdSAnZm9sZG1ldGhvZCcgc2EgbmVk4SB2eXR2b3JpnSB64Wh5YiIKKworIzogZm9sZC5jOjU1NQorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiBQb21vY291ICdmb2xkbWV0aG9kJyBzYSBuZWThIG9kc3Ry4W5pnSB64Wh5YiIKKworIzogZ2V0Y2hhci5jOjI0NworbXNnaWQgIkUyMjI6IEFkZCB0byByZWFkIGJ1ZmZlciIKK21zZ3N0ciAiRTIyMjogUHJpZGGdIGRvIGJ1ZmZlcnUgcHJlIOjtdGFuaWUiCisKKyM6IGdldGNoYXIuYzoyMTA2Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6IHJla3Vyeu12bmUgbWFwb3ZhbmllIgorCisjOiBnZXRjaGFyLmM6Mjk0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI0OiBnbG9iYWwgYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNDogcHJlICVzIHWeIGdsb2LhbG5hIHNrcmF0a2EgZXhpc3R1amUiCisKKyM6IGdldGNoYXIuYzoyOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTogcHJlICVzIHWeIGdsb2LhbG5lIG1hcG92YW5pZSBleGlzdHVqZSIKKworIzogZ2V0Y2hhci5jOjMwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogcHJlICVzIHWeIHNrcmF0a2EgZXhpc3R1amUiCisKKyM6IGdldGNoYXIuYzozMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI3OiBwcmUgJXMgdZ4gbWFwb3ZhbmllIGV4aXN0dWplIgorCisjOiBnZXRjaGFyLmM6MzE0NQorbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAijmlhZG5hIHNrcmF0a2EgbmVib2xhIG7hamRlbuEiCisKKyM6IGdldGNoYXIuYzozMTQ3Cittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAijmlhZG5lIG1hcG92YW5pZSBuZWJvbG8gbuFqZGVu6SIKKworIzogZ2V0Y2hhci5jOjM5OTIKK21zZ2lkICJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkUyMjg6IG1ha2VtYXA6IG5lcHLtc3R1cG79IG3zZCIKKworIzogZ3VpX2F0X2ZzLmM6MjkwCittc2dpZCAiPGNhbm5vdCBvcGVuPiAiCittc2dzdHIgIjxuZWThIHNhIG90dm9yaZ0+ICIKKworIzogZ3VpX2F0X2ZzLmM6MTExNQorIywgYy1mb3JtYXQKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGZvbnQgJXMiCittc2dzdHIgInZpbV9TZWxGaWxlOiBw7XNtbyAlcyBuaWUgamUgZG9zdHVwbukiCisKKyM6IGd1aV9hdF9mcy5jOjI1MzgKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJ2aW1fU2VsRmlsZTogbmVk4SBzYSB2cuF0aZ0gZG8gYWt0deFsbmVobyBhZHJlc+FyYSIKKworIzogZ3VpX2F0X2ZzLmM6MjU1NworbXNnaWQgIlBhdGhuYW1lOiIKK21zZ3N0ciAiTuF6b3YgY2VzdHk6IgorCisjOiBndWlfYXRfZnMuYzoyNTYzCittc2dpZCAidmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAidmltX1NlbEZpbGU6IG5lZOEgc2EgemlzdGmdIGFrdHXhbG55IGFkcmVz4XIiCisKKyM6IGd1aV9hdF9mcy5jOjI1NzEgZ3VpX21vdGlmLmM6MTYxOQorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIy4gJ0NhbmNlbCcgYnV0dG9uCisjOiBndWlfYXRfZnMuYzoyNTcxIGd1aV9ndGsuYzoxNzQwIGd1aV9tb3RpZi5jOjE2MTQgZ3VpX21vdGlmLmM6MjgzNQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiWnJ1mmmdIgorCisjOiBndWlfYXRoZW5hLmM6MTk1NiBndWlfbW90aWYuYzoxODY3Cittc2dpZCAiVmltIGRpYWxvZyIKK21zZ3N0ciAiVmltIGRpYWzzZyIKKworIzogZ3VpX2F0X3NiLmM6NDg2Cittc2dpZCAiU2Nyb2xsYmFyIFdpZGdldDogQ291bGQgbm90IGdldCBnZW9tZXRyeSBvZiB0aHVtYiBwaXhtYXAuIgorbXNnc3RyICJQcu1wcmF2b2sgcG9zdXZuZWogbGmadHk6IG5lZOEgc2EgemlzdGmdIGdlb21ldHJpYSBvYnLhemt1IgorCisjOiBndWlfYmV2YWwuYzo2OAorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICJFMjMyOiBCYWxsb29uRXZhbCBuZWThIHNhIHZ5dHZvcmmdIHNwcuF2b3UgYSB64XJvdmXyIHNw5HRu/W0gdm9sYW7tbSIKKworIzogZ3VpLmM6MjAzCittc2dpZCAiRTIyOTogQ2Fubm90IHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkUyMjk6IE5lZOEgc2Egc3B1c3RpnSBHVUkiCisKKyM6IGd1aS5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogTmVk4SBzYSDo7XRhnSB6IFwiJXNcIiIKKworIzogZ3VpLmM6NDUzCittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiB2b75iYSAnZ3VpZm9udHdpZGUnIGplIGNoeWJuZSBuYXN0YXZlbuEiCisKKyM6IGd1aS5jOjM2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiBOZWThIHNhIGFsb2tvdmGdIGZhcmJhICVzIgorCisjOiBndWkuYzozOTgzCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkNoeWJhIgorCisjOiBndWlfZ3RrLmM6MTE5MAorbXNnaWQgIlZpbSBkaWFsb2cuLi4iCittc2dzdHIgIlZpbSBkaWFs82cuLiIKKworIzogZ3VpX2d0ay5jOjE1NzYgZ3VpX21vdGlmLmM6Mjc1NAorbXNnaWQgIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIKK21zZ3N0ciAiVklNIC0gTuFqc50gYSBuYWhyYWRpnS4uLiIKKworIzogZ3VpX2d0ay5jOjE1ODEgZ3VpX21vdGlmLmM6Mjc1NgorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiVklNIC0gTuFqc50uLi4iCisKKyM6IGd1aV9ndGsuYzoxNjA0IGd1aV9tb3RpZi5jOjI4NzQKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICJWeWi+YWRhnToiCisKKyM6IGd1aV9ndGsuYzoxNjIyIGd1aV9tb3RpZi5jOjI5MDYKK21zZ2lkICJSZXBsYWNlIHdpdGg6IgorbXNnc3RyICJOb3b9IHRleHQ6IgorCisjLiBleGFjdCBtYXRjaCBvbmx5IGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE2NTQgZ3VpX21vdGlmLmM6MzAwOAorbXNnaWQgIk1hdGNoIGV4YWN0IHdvcmQgb25seSIKK21zZ3N0ciAiSL5hZGGdIGxlbiBjZWzpIHNsb3bhIgorCisjOiBndWlfZ3RrLmM6MTY2NiBndWlfbW90aWYuYzoyOTc2Cittc2dpZCAiRGlyZWN0aW9uIgorbXNnc3RyICJTbWVyIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjE2NzggZ3VpX21vdGlmLmM6Mjk4OAorbXNnaWQgIlVwIgorbXNnc3RyICJIb3JlIgorCisjOiBndWlfZ3RrLmM6MTY4MiBndWlfbW90aWYuYzoyOTk2Cittc2dpZCAiRG93biIKK21zZ3N0ciAiRG9sdSIKKworIy4gJ0ZpbmQgTmV4dCcgYnV0dG9uCisjOiBndWlfZ3RrLmM6MTcwNCBndWlfbW90aWYuYzoyNzc4Cittc2dpZCAiRmluZCBOZXh0IgorbXNnc3RyICJO4WpznSDvYWyaaWUiCisKKyMuICdSZXBsYWNlJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNzIxIGd1aV9tb3RpZi5jOjI3OTUKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICJOYWhyYWRpnSIKKworIy4gJ1JlcGxhY2UgQWxsJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNzMwIGd1aV9tb3RpZi5jOjI4MDgKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAiTmFocmFkaZ0gVppldGtvIgorCisjOiBndWlfZ3RrX3gxMS5jOjEwNzkgZ3VpX3gxMS5jOjExOTkKK21zZ2lkICJFMjMzOiBjYW5ub3Qgb3BlbiBkaXNwbGF5IgorbXNnc3RyICJFMjMzOiBuZWThIHNhIG90dm9yaZ0gZGlzcGxlaiIKKworIzogZ3VpX2d0a194MTEuYzoyNDk0IGd1aV94MTEuYzoxOTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzQ6IFVua25vd24gZm9udHNldDogJXMiCittc2dzdHIgIkUyMzQ6IE5lem7hbWEgc2FkYSBw7XNpZW06ICVzIgorCisjOiBndWlfZ3RrX3gxMS5jOjI1MTgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAiVv1iZXIgUO1zbWEiCisKKyM6IGd1aV9ndGtfeDExLmM6Mjc2NCBndWlfbWFjLmM6Mjk4MiBndWlfdzQ4LmM6MTE5NyBndWlfeDExLmM6MTgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBVbmtub3duIGZvbnQ6ICVzIgorbXNnc3RyICJFMjM1OiBOZXpu4W1lIHDtc21vOiAlcyIKKworIzogZ3VpX2d0a194MTEuYzoyNzc1IGd1aV94MTEuYzoxODU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzY6IEZvbnQgXCIlc1wiIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiRTIzNjogUO1zbW8gXCIlc1wiIG5lbeEgcGV2bvogmu1ya3UiCisKKyM6IGd1aV9ndGtfeDExLmM6MzU4MCB1aS5jOjE5NzEKK21zZ2lkICJVc2VkIENVVF9CVUZGRVIwIGluc3RlYWQgb2YgZW1wdHkgc2VsZWN0aW9uIgorbXNnc3RyICJQb3WeaXT9IENVVF9CVUZGRVIwIG5hbWllc3RvIHBy4XpkbmVobyB2/WJlcnUiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTMgZ3VpX21vdGlmLmM6MTYxNgorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdGVyIgorCisjOiBndWlfbW90aWYuYzoxNjE1Cittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIkFkcmVz4XJlIgorCisjOiBndWlfbW90aWYuYzoxNjE3Cittc2dpZCAiSGVscCIKK21zZ3N0ciAiUG9tb2Nu7WsiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTgKK21zZ2lkICJGaWxlcyIKK21zZ3N0ciAiU/pib3J5IgorCisjOiBndWlfbW90aWYuYzoxNjIwCittc2dpZCAiU2VsZWN0aW9uIgorbXNnc3RyICJW/WJlciIKKworIzogZ3VpX21vdGlmLmM6MjgyMQorbXNnaWQgIlVuZG8iCittc2dzdHIgIlNw5J0iCisKKyM6IGd1aV9yaXNjb3MuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogQ2FuJ3QgbG9hZCBaYXAgZm9udCAnJXMnIgorbXNnc3RyICJFMjM1OiBOZW30nmVtIG5h6O10YZ0gY2h5Ym79IGZvbnQgJyVzJyIKKworIzogZ3VpX3Jpc2Nvcy5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogQ2FuJ3QgdXNlIGZvbnQgJXMiCittc2dzdHIgIkUyMzU6IE5lZOEgc2EgcG91nu2dIHDtc21vICVzIgorCisjOiBndWlfcmlzY29zLmM6MzI2OQorbXNnaWQgIiIKKyJcbiIKKyJTZW5kaW5nIG1lc3NhZ2UgdG8gdGVybWluYXRlIGNoaWxkIHByb2Nlc3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQb3NpZWxhbSBzcHLhdnUgbmEgdWtvbuhlbmllIHN5bm92c2vpaG8gcHJvY2VzdS5cbiIKKworIzogZ3VpX3czMi5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiIgorIkUyNDM6IEFyZ3VtZW50IG5pZSBqZSBwb2Rwb3JvdmFu/TogXG4iCisiLSVzXCI7IFBvdZ5pdGUgT0xFIHZlcnppdS4iCisKKyMuIFRPRE86IE1heSBiZSBjaGFuZ2VkIHRoaXMgbWVzc2FnZQorIzogZ3VpX3czMi5jOjM0OTkgZ3VpX3czMi5jOjM1MzIgZ3VpX3gxMS5jOjMyNTIKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IENoeWJhIC0tIG5lZOFq+iBzYSBwcmXo7XRhnSBvem5h6G92YWNpZSBk4XRhISIKKworIzogZ3VpX3c0OC5jOjIwODEKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJO4WpznSByZZ1hemVjIChwb3WeaXRlICdcXFxcJyBhayBjaGV0ZSBu4WpznSAnXFwnKSIKKworIzogZ3VpX3c0OC5jOjIxMDYKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJO4WpznSBhIE5haHJhZGmdIChwb3WeaXRlICdcXFxcJyBhayBjaGNldGUgbuFqc50gJ1xcJykiCisKKyM6IGd1aV94MTEuYzoxNDE5Cittc2dpZCAiVmltIEU0NTg6IENhbm5vdCBhbGxvY2F0ZSBjb2xvcm1hcCBlbnRyeSwgc29tZSBjb2xvcnMgbWF5IGJlIGluY29ycmVjdCIKK21zZ3N0ciAiIgorIlZpbSBFNDU4OiBOZWThIHNhIGFsb2tvdmGdIHBvbG+ea2EgbWFweSBmYXJpZWIuIE5pZWt0b3LpIGZhcmJ5IG30nnUgYnmdICIKKyJuZXNwcuF2bmUiCisKKyM6IGd1aV94MTEuYzoxOTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICJFMjUwOiBDaP1iYSBw7XNtbyBwcmUgbmFzbGVkdWr6Y2Ugem5ha2926SBzYWR5ICVzOiIKKworIzogZ3VpX3gxMS5jOjIwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MjogRm9udHNldCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI1MjogTuF6b3Ygc2FkeSBw7XNpZW06ICVzIgorCisjOiBndWlfeDExLmM6MjAzMworIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJQ7XNtbyAnJXMnIG5lbeEgcGV2bm91IJrtcmt1IgorCisjOiBndWlfeDExLmM6MjA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTM6IE7hem92IHNhZHkgcO1zaWVtOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1MworIywgYy1mb3JtYXQKK21zZ2lkICJGb250MDogJXNcbiIKK21zZ3N0ciAiUO1zbW8wOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAiUO1zbW8xOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250JWQgd2lkdGggaXMgbm90IHR3aWNlIHRoYXQgb2YgZm9udDBcbiIKK21zZ3N0ciAiUO1zbW8lZCBuaWUgamUgZHZha3LhdCCaaXKaaWUgYWtvIHDtc21vMFxuIgorCisjOiBndWlfeDExLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MCB3aWR0aDogJWxkXG4iCittc2dzdHIgIortcmthIHDtc21hMDogJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyKK7XJrYSBw7XNtYTE6ICVsZFxuIgorIlxuIgorCisjOiBoYW5ndWxpbi5jOjYxMAorbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKK21zZ3N0ciAiRTI1NjogSGFuZ3VsIGF1dG9tYXRhIEVSUk9SIgorCisjOiBpZl9jc2NvcGUuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3NbY29wZV0gJXMiCittc2dzdHIgIlBvdZ5pdGllOiBjc1tjb3BlXSAlcyIKKworIzogaWZfY3Njb3BlLmM6NjcKK21zZ2lkICJBZGQgYSBuZXcgZGF0YWJhc2UiCittc2dzdHIgIlByaWRhnSBub3b6IGRhdGFi4Xp1IgorCisjOiBpZl9jc2NvcGUuYzo2OQorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIki+YWRhbmllIHZ6b3J1IgorCisjOiBpZl9jc2NvcGUuYzo3MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICJab2JyYXppnSB0+nRvIHNwcuF2dSIKKworIzogaWZfY3Njb3BlLmM6NzMKK21zZ2lkICJLaWxsIGEgY29ubmVjdGlvbiIKK21zZ3N0ciAiVWtvbuhpnSBzcG9qZW5pZSIKKworIzogaWZfY3Njb3BlLmM6NzUKK21zZ2lkICJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIgorbXNnc3RyICJabm92dSBpbmljaWFsaXpvdmGdIHaaZXRreSBzcG9qZW5pYSIKKworIzogaWZfY3Njb3BlLmM6NzcKK21zZ2lkICJTaG93IGNvbm5lY3Rpb25zIgorbXNnc3RyICJab2JyYXppnSBzcG9qZW5pYSIKKworIzogaWZfY3Njb3BlLmM6MTA4Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICJU4XRvIGNzY29wZSBwcu1rYXogbmVwb2Rwb3J1amUgcm96ZGW+b3ZhbmllIG9rbmEuXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0MworbXNnaWQgIlVzYWdlOiBjc3RhZyA8aWRlbnQ+IgorbXNnc3RyICJQb3WeaXRpZTogY3N0YWcgPG9kc2FkZW5pZT4iCisKKyM6IGlmX2NzY29wZS5jOjE5OQorbXNnaWQgIkUyNTc6IGNzdGFnOiB0YWcgbm90IGZvdW5kIgorbXNnc3RyICJFMjU3OiBjc3RhZzogdGFnIG5lbuFqZGVu/SIKKworIzogaWZfY3Njb3BlLmM6NDA3IGlmX2NzY29wZS5jOjQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGF0KCVzKSBlcnJvcjogJWQiCittc2dzdHIgInN0YXQoJXMpIGNoeWJhOiAlZCIKKworIzogaWZfY3Njb3BlLmM6NDYwIGlmX2NzY29wZS5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRlZCBjc2NvcGUgZGF0YWJhc2UgJXMiCittc2dzdHIgIlByaWRhbuEgY3Njb3BlIGRhdGFi4XphICVzIgorCisjOiBpZl9jc2NvcGUuYzo0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgZGlyZWN0b3J5IG9yIGEgdmFsaWQgY3Njb3BlIGRhdGFiYXNlIgorbXNnc3RyICIlcyBuaWUgamUgYW5pIGFkcmVz4XJvbSBhbmkgc3By4XZub3UgY3Njb3BlIGRhdGFi4XpvdSIKKworIzogaWZfY3Njb3BlLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWQiCittc2dzdHIgImNoeWJhIHByaSDo7XRhbu0gY3Njb3BlIHNwb2plbmlhICVkIgorCisjOiBpZl9jc2NvcGUuYzo2MzMKK21zZ2lkICJ1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAibmV6buFteSB0eXAgY3Njb3BlIGi+YWRhbmlhIgorCisjOiBpZl9jc2NvcGUuYzo2ODAKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiTmVkYWr6IHNhIHZ5dHZvcmmdIGNzY29wZSBy+nJ5IgorCisjOiBpZl9jc2NvcGUuYzo3NDUKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIKK21zZ3N0ciAic3B1c3RlbmllIGNzX2NyZWF0ZV9jb25uZWN0aW9uIHpseWhhbG8iCisKKyM6IGlmX2NzY29wZS5jOjc1NQorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIHRvX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IHZvbGFuaWUgZmRvcGVuIHByZSB0b19mcCB6bHloYWxvIgorCisjOiBpZl9jc2NvcGUuYzo3NTcKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciBmcl9mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiB2b2xhbmllIGZkb3BlbiBwcmUgZnJfZnAgemx5aGFsbyIKKworIzogaWZfY3Njb3BlLmM6Nzg1Cittc2dpZCAibm8gY3Njb3BlIGNvbm5lY3Rpb25zIgorbXNnc3RyICKeaWFkbmUgY3Njb3BlIHNwb2plbmlhIgorCisjOiBpZl9jc2NvcGUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiBjc2NvcGUgaL5hZGFuaWUgJXMgdm8gdnpvcmUgJXMgbmVuYZpsbyCeaWFkbnUgemhvZHUiCisKKyM6IGlmX2NzY29wZS5jOjg5OQorbXNnaWQgImNzY29wZSBjb21tYW5kczpcbiIKK21zZ3N0ciAicHLta2F6eSBjc2NvcGU6XG4iCisKKyM6IGlmX2NzY29wZS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLTVzOiAlLTMwcyAoVXNhZ2U6ICVzKVxuIgorbXNnc3RyICIlLTVzOiAlLTMwcyAoUG91nml0aWU6ICVzKVxuIgorCisjOiBpZl9jc2NvcGUuYzo5NzAKK21zZ2lkICJkdXBsaWNhdGUgY3Njb3BlIGRhdGFiYXNlIG5vdCBhZGRlZCIKK21zZ3N0ciAiZHVwbGljaXRu4SBjc2NvcGUgZGF0YWLhemEgbmVib2xhIHByaWRhbuEiCisKKyM6IGlmX2NzY29wZS5jOjk4MQorbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICJkb3NpYWhudXT9IG1heGlt4WxueSBwb+hldCBjc2NvcGUgc3BvamVu7SIKKworIzogaWZfY3Njb3BlLmM6MTEwMgorbXNnaWQgIkUyNjA6IGNzY29wZSBjb25uZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MDogY3Njb3BlIHNwb2plbmllIG5lbuFqZGVu6SIKKworIzogaWZfY3Njb3BlLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYxOiBjc2NvcGUgY29ubmVjdGlvbiAlcyBub3QgZm91bmQiCittc2dzdHIgIkUyNjE6IGNzY29wZSBzcG9qZW5pZSAlcyBuZW7hamRlbukiCisKKyM6IGlmX2NzY29wZS5jOjExNDEKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiBjbG9zZWQiCittc2dzdHIgImNzY29wZSBzcG9qZW5pZSB1a29u6GVu6SIKKworIzogaWZfY3Njb3BlLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWRcbiIKK21zZ3N0ciAiY3Njb3BlIHNwb2plbmllICVzIHVrb27oZW7pXG4iCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTI5MAorbXNnaWQgImZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJvc3Vkb3bhIGNoeWJhIHYgY3NfbWFuYWdlX21hdGNoZXMiCisKKyM6IGlmX2NzY29wZS5jOjEzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKK21zZ3N0ciAiRTI2MjogY2h5YmEgcHJpIOjtdGFu7SBjc2NvcGUgc3BvamVuaWEgJWQiCisKKyM6IGlmX2NzY29wZS5jOjE0NDkKK21zZ2lkICJjb3VsZG4ndCBtYWxsb2NcbiIKK21zZ3N0ciAidm9sYW5pZSBtYWxsb2Mgemx5aGFsb1xuIgorCisjOiBpZl9jc2NvcGUuYzoxNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzXG4iCittc2dzdHIgIkNzY29wZSB0YWc6ICVzXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0NTgKK21zZ2lkICIgICAjICAgbGluZSIKK21zZ3N0ciAiICAgIyAgIHJpYWRvayIKKworIzogaWZfY3Njb3BlLmM6MTQ2MAorbXNnaWQgImZpbGVuYW1lIC8gY29udGV4dCAvIGxpbmVcbiIKK21zZ3N0ciAibuF6b3Ygc/pib3J1LyBrb250ZXh0LyByaWFkb2tcbiIKKworIzogaWZfY3Njb3BlLmM6MTcxOAorbXNnaWQgIkFsbCBjc2NvcGUgZGF0YWJhc2VzIHJlc2V0IgorbXNnc3RyICJWmmV0a3kgY3Njb3BlIGRhdGFi4XplIHJlc2V0b3ZhbukiCisKKyM6IGlmX2NzY29wZS5jOjE3ODUKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAinmlhZG5lIGNzY29wZSBzcG9qZW5pYVxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzg5Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAgbuF6b3YgZGF0YWLhemUgICAgICAgICAgICAgICAgICAgICAgcHJlZHBvbmEgY2VzdHlcbiIKKworIzogaWZfY3Njb3BlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMmQgJS01bGQgICUtMzRzICA8bm9uZT5cbiIKK21zZ3N0ciAiJTJkICUtNWxkICAlLTM0cyAgPJ5pYWRueT5cbiIKKworIzogaWZfcHl0aG9uLmM6MjU1IGlmX3J1YnkuYzoyNjAgaWZfdGNsLmM6MTk1IG1ieXRlLmM6MjYyOSBvc193aW4zMi5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcwOiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5ICVzIgorbXNnc3RyICJFMzcwOiBOZXBvZGFyaWxvIHNhIG5haHJhnSBrbmmebmljdSAlcyIKKworIzogaWZfcHl0aG9uLmM6MjY3IGlmX3J1YnkuYzoyNzIgaWZfdGNsLmM6MjA2IG1ieXRlLmM6MjY0NSBvc193aW4zMi5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ4OiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5IGZ1bmN0aW9uICVzIgorbXNnc3RyICJFNDQ4OiBOZXBvZGFyaWxvIHNhIG5haHJhnSBmdW5rY2l1IGtuaZ5uaWNlICVzIgorCisjOiBpZl9weXRob24uYzozOTIKK21zZ2lkICIiCisiRTI2MzogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFB5dGhvbiBsaWJyYXJ5IGNvdWxkIG5vdCBiZSAiCisibG9hZGVkLiIKK21zZ3N0ciAiRTI2MjogUHJlcOHodGUsIHRlbnRvIHBy7WtheiBqZSB2eXBudXT9LCBQeXRob24ga25pnm5pY2EgbmVt9J5lIGJ5nW5h6O10YW7hLiIKKworIzogaWZfcHl0aG9uLmM6NTkyCittc2dpZCAiY2FuJ3QgZGVsZXRlIE91dHB1dE9iamVjdCBhdHRyaWJ1dGVzIgorbXNnc3RyICJuZWThIHNhIHZ5bWF6YZ0gdmxhc3Rub3OdIE91dHB1dE9iamVjdCIKKworIzogaWZfcHl0aG9uLmM6NTk5Cittc2dpZCAic29mdHNwYWNlIG11c3QgYmUgYW4gaW50ZWdlciIKK21zZ3N0ciAic29mdHNwYWNlIG11c+0gYnmdIGtsYWRu6SBjZWzpIOjtc2xvIgorCisjOiBpZl9weXRob24uYzo2MDcKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiY2h5Ym7hIHZsYXN0bm9znSIKKworIzogaWZfcHl0aG9uLmM6NjQ2IGlmX3B5dGhvbi5jOjY2MAorbXNnaWQgIndyaXRlbGluZXMoKSByZXF1aXJlcyBsaXN0IG9mIHN0cmluZ3MiCittc2dzdHIgIndyaXRlbGluZXMoKSB2eZ5hZHVqZSB6b3puYW0gcmWdYXpjb3YiCisKKyM6IGlmX3B5dGhvbi5jOjc4NgorbXNnaWQgIkUyNjQ6IFB5dGhvbjogRXJyb3IgaW5pdGlhbGlzaW5nIEkvTyBvYmplY3RzIgorbXNnc3RyICJFMjY0OiBQeXRob246IENoeWJhIHByaSBpbmljaWFsaXrhY2lpIEkvTyBvYmpla3RvdiIKKworIzogaWZfcHl0aG9uLmM6OTcxIGlmX3RjbC5jOjE0MDMKK21zZ2lkICJpbnZhbGlkIGV4cHJlc3Npb24iCittc2dzdHIgImNoeWJu/SB2/XJheiIKKworIzogaWZfcHl0aG9uLmM6OTg1IGlmX3RjbC5jOjE0MDgKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgInBvZHBvcmEgdv1yYXpvdiBib2xhIHZ5cG51dOEgcHJpIHByZWtsYWRlIHByb2dyYW11IgorCisjOiBpZl9weXRob24uYzo5OTgKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJwb2t1cyBvIG9ka2F6IG5hIHZ5bWF6YW79IGJ1ZmZlciIKKworIzogaWZfcHl0aG9uLmM6MTAxMyBpZl9weXRob24uYzoxMDU0IGlmX3B5dGhvbi5jOjExMTggaWZfdGNsLmM6MTIxNQorbXNnaWQgImxpbmUgbnVtYmVyIG91dCBvZiByYW5nZSIKK21zZ3N0ciAi6O1zbG8gcmlhZGthIG1pbW8gcm96c2FoIgorCisjOiBpZl9weXRob24uYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIjxidWZmZXIgb2JqZWN0IChkZWxldGVkKSBhdCAlOGxYPiIKK21zZ3N0ciAiPG9iamVrdCBidWZmZXJ1ICh2eW1hemFu/SkgbmEgJThsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjEzNDIgaWZfdGNsLmM6ODM3Cittc2dpZCAiaW52YWxpZCBtYXJrIG5hbWUiCittc2dzdHIgImNoeWJu6SBtZW5vIHpuYehreSIKKworIzogaWZfcHl0aG9uLmM6MTYxNworbXNnaWQgIm5vIHN1Y2ggYnVmZmVyIgorbXNnc3RyICKeaWFkbnkgdGFr/SBidWZmZXIiCisKKyM6IGlmX3B5dGhvbi5jOjE3MDUKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICJwb2t1cyBvIG9ka2F6IG5hIHZ5bWF6YW7pIG9rbm8iCisKKyM6IGlmX3B5dGhvbi5jOjE3NTAKK21zZ2lkICJyZWFkb25seSBhdHRyaWJ1dGUiCittc2dzdHIgInZsYXN0bm9znSBpYmEgcHJlIOjtdGFuaWUiCisKKyM6IGlmX3B5dGhvbi5jOjE3NjMKK21zZ2lkICJjdXJzb3IgcG9zaXRpb24gb3V0c2lkZSBidWZmZXIiCittc2dzdHIgInVtaWVzdG5lbmllIGt1cnpvcnUgbWltbyBidWZmZXIiCisKKyM6IGlmX3B5dGhvbi5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKGRlbGV0ZWQpIGF0ICUuOGxYPiIKK21zZ3N0ciAiPG9iamVrdCBva25hICh2eW1hemFu/SkgbmEgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODUyCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjxvYmpla3Qgb2tuYSAobmV6buFteSkgbmEgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8b2tubyAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5MzAKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAinmlhZG5lIHRha+kgb2tubyIKKworIzogaWZfcHl0aG9uLmM6MjE4NyBpZl9weXRob24uYzoyMjIyIGlmX3B5dGhvbi5jOjIyNzIgaWZfcHl0aG9uLmM6MjMzNQorIzogaWZfcHl0aG9uLmM6MjQ1NSBpZl9weXRob24uYzoyNTA3IGlmX3RjbC5jOjY4NSBpZl90Y2wuYzo3MzAgaWZfdGNsLmM6ODA0CisjOiBpZl90Y2wuYzo4NzQgaWZfdGNsLmM6MTk5OQorbXNnaWQgImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIm5lZGFq+iBzYSB1bG+eaZ0gc3DkdG7pIGluZm9ybeFjaWUiCisKKyM6IGlmX3B5dGhvbi5jOjIxODkgaWZfcHl0aG9uLmM6MjI3OSBpZl9weXRob24uYzoyMzQ2Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBsaW5lIgorbXNnc3RyICJuZWThIHNhIHZ5bWF6YZ0gcmlhZG9rIgorCisjOiBpZl9weXRob24uYzoyMjI0IGlmX3B5dGhvbi5jOjIzNjIgaWZfdGNsLmM6NjkxIGlmX3RjbC5jOjIwMjEKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICJuZWThIHNhIG5haHJhZGmdIHJpYWRvayIKKworIzogaWZfcHl0aG9uLmM6MjM3OCBpZl9weXRob24uYzoyNDU3IGlmX3B5dGhvbi5jOjI1MTUKK21zZ2lkICJjYW5ub3QgaW5zZXJ0IGxpbmUiCittc2dzdHIgIm5lZOEgc2EgdmxvnmmdIHJpYWRvayIKKworIzogaWZfcHl0aG9uLmM6MjYxOQorbXNnaWQgInN0cmluZyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAicmWdYXplYyBuZXNtaWUgb2JzYWhvdmGdIHpuYWt5IG5vdulobyByaWFka3UiCisKKyM6IGlmX3J1YnkuYzo0MDEKK21zZ2lkICJFMjY2OiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUnVieSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJFMjY2OiBQcmVw4eh0ZSwgdGVudG8gcHLta2F6IGplIHZ5cG51dP0sIFJ1Ynkga25pnm5pY2EgbmVt9J5lIGJ5nSBuYejtdGFu4S4iCisKKyM6IGlmX3J1YnkuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIKK21zZ3N0ciAiRTI3MzogTmV6buFteSAnbG9uZ2ptcCcgc3RhdiAlZCIKKworIzogaWZfc25pZmYuYzo2NworbXNnaWQgIlRvZ2dsZSBpbXBsZW1lbnRhdGlvbi9kZWZpbml0aW9uIgorbXNnc3RyICJQcmVwbvqdIGltcGxlbWVudOFjaXUvZGVmaW7tY2l1IgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICJVa+F6YZ0geuFrbGFkbvogdHJpZWR1IgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAiVWvhemGdIHByZZ1hnmVu+iDobGVuc2v6IGZ1bmtjaXUiCisKKyM6IGlmX3NuaWZmLmM6NzAKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGZpbGUiCittc2dzdHIgIk9ibm92aZ0gem8gc/pib3J1IgorCisjOiBpZl9zbmlmZi5jOjcxCittc2dpZCAiUmV0cmlldmUgZnJvbSBwcm9qZWN0IgorbXNnc3RyICJPYm5vdmmdIHogcHJvamVrdHUiCisKKyM6IGlmX3NuaWZmLmM6NzMKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGFsbCBwcm9qZWN0cyIKK21zZ3N0ciAiT2Jub3ZpnSB6byB2mmV0a/1jaCBwcm9qZWt0b3YiCisKKyM6IGlmX3NuaWZmLmM6NzQKK21zZ2lkICJSZXRyaWV2ZSIKK21zZ3N0ciAiT2Jub3ZpnSIKKworIzogaWZfc25pZmYuYzo3NQorbXNnaWQgIlNob3cgc291cmNlIG9mIgorbXNnc3RyICJVa+F6YZ0gemRyb2oiCisKKyM6IGlmX3NuaWZmLmM6NzYKK21zZ2lkICJGaW5kIHN5bWJvbCIKK21zZ3N0ciAiTuFqc50gem5hayIKKworIzogaWZfc25pZmYuYzo3NworbXNnaWQgIkJyb3dzZSBjbGFzcyIKK21zZ3N0ciAiUHJlenJpZZ0gdHJpZWR1IgorCisjOiBpZl9zbmlmZi5jOjc4Cittc2dpZCAiU2hvdyBjbGFzcyBpbiBoaWVyYXJjaHkiCittc2dzdHIgIlVr4XphnSB0cmllZHUgdiBoaWVyYXJjaGlpIgorCisjOiBpZl9zbmlmZi5jOjc5Cittc2dpZCAiU2hvdyBjbGFzcyBpbiByZXN0cmljdGVkIGhpZXJhcmNoeSIKK21zZ3N0ciAiVWvhemGdIHRyaWVkdSB2IG9ibWVkemVuZWogaGllcmFyY2hpaSIKKworIzogaWZfc25pZmYuYzo4MAorbXNnaWQgIlhyZWYgcmVmZXJzIHRvIgorbXNnc3RyICJYcmVmIG9ka2F6dWplIG5hIgorCisjOiBpZl9zbmlmZi5jOjgxCittc2dpZCAiWHJlZiByZWZlcnJlZCBieSIKK21zZ3N0ciAiWHJlZiBvZGvhemFu/SB6IgorCisjOiBpZl9zbmlmZi5jOjgyCittc2dpZCAiWHJlZiBoYXMgYSIKK21zZ3N0ciAiWHJlZiBt4SIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiBwb3WeaXT9IgorCisjOiBpZl9zbmlmZi5jOjg0Cittc2dpZCAiU2hvdyBkb2N1IG9mIgorbXNnc3RyICJVa+F6YZ0gZG9rdW1lbnThY2l1IgorCisjOiBpZl9zbmlmZi5jOjg1Cittc2dpZCAiR2VuZXJhdGUgZG9jdSBmb3IiCittc2dzdHIgIlZ5dHZvcmmdIGRva3VtZW504WNpdSBwcmUiCisKKyM6IGlmX3NuaWZmLmM6OTcKK21zZ2lkICIiCisiQ2Fubm90IGNvbm5lY3QgdG8gU05pRkYrLiBDaGVjayBlbnZpcm9ubWVudCAoc25pZmZlbWFjcyBtdXN0IGJlIGZvdW5kIGluICIKKyIkUEFUSCkuXG4iCittc2dzdHIgIiIKKyJabGloYWxvIHByaXBvamVuaWUgbmEgU05pRkYrLCBQcmV2ZXJ0ZSBwcm9zdHJlZGllIChzbmlmZmVtYWNzIHNhIG11c+0gIgorIm5hY2jhZHphnSB2ICRQQVRIKS5cbiIKKworIzogaWZfc25pZmYuYzo0MjUKK21zZ2lkICJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiRTI3NDogU25pZmY6IENoeWJhIHBv6GFzIOjtdGFuaWEuIE9kcG9qZW7pIgorCisjOiBpZl9zbmlmZi5jOjU1MworbXNnaWQgIlNOaUZGKyBpcyBjdXJyZW50bHkgIgorbXNnc3RyICJTTmlGRisgamUgYWt0deFsbmUgIgorCisjOiBpZl9zbmlmZi5jOjU1NQorbXNnaWQgIm5vdCAiCittc2dzdHIgIm5lIgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAicHJpcG9qZW79IgorCisjOiBpZl9zbmlmZi5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjc1OiBVbmtub3duIFNOaUZGKyByZXF1ZXN0OiAlcyIKK21zZ3N0ciAiRTI3NTogTmV6buFtYSBTTmlGRisgcG+eaWFkYXZrYTogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IENoeWJhIHByaXBvamVuaWEgbmEgU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwMDkKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODogU05pRkYrIG5pZSBqZSBwcmlwb2plbv0iCisKKyM6IGlmX3NuaWZmLmM6MTAxOAorbXNnaWQgIkUyNzk6IE5vdCBhIFNOaUZGKyBidWZmZXIiCittc2dzdHIgIkUyNzk6IE5pZSBqZSBTTmlGRisgYnVmZmVyb20iCisKKyM6IGlmX3NuaWZmLmM6MTA4MworbXNnaWQgIlNuaWZmOiBFcnJvciBkdXJpbmcgd3JpdGUuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiU25pZmY6IENoeWJhIHrhcGlzdS4gT2Rwb2plbukiCisKKyM6IGlmX3RjbC5jOjQxOQorbXNnaWQgImludmFsaWQgYnVmZmVyIG51bWJlciIKK21zZ3N0ciAiY2h5Ym7pIOjtc2xvIGJ1ZmZlcnUiCisKKyM6IGlmX3RjbC5jOjQ2NSBpZl90Y2wuYzo5MzIgaWZfdGNsLmM6MTExMQorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIm5pZSBqZSBlmnRlIHBvZHBvcm92YW7pIgorCisjOiBpZl90Y2wuYzo1MDIKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAibmV6buFtYSB2b75iYSIKKworIy4gPz8/CisjOiBpZl90Y2wuYzo3NzUKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgIm5lZGFq+iBzYSBuYXN0YXZpnSByaWFka3kiCisKKyM6IGlmX3RjbC5jOjg0NgorbXNnaWQgIm1hcmsgbm90IHNldCIKK21zZ3N0ciAiem5h6GthIG5pZSBqZSBuYXN0YXZlbuEiCisKKyM6IGlmX3RjbC5jOjg1MiBpZl90Y2wuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdyAlZCBjb2x1bW4gJWQiCittc2dzdHIgInJpYWRvayAlZCBzdOVwZWMgJWQiCisKKyM6IGlmX3RjbC5jOjg4MgorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgIm5lZOEgc2EgdmxvnmmdL3ByaXBvammdIHJpYWRvayIKKworIzogaWZfdGNsLmM6MTI2OQorbXNnaWQgInVua25vd24gZmxhZzogIgorbXNnc3RyICJuZXpu4W15IHBy7XpuYWs6ICIKKworIzogaWZfdGNsLmM6MTMzOQorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICJuZXpu4W1hIHZpbU1vnm5vc50iCisKKyM6IGlmX3RjbC5jOjE0MjQKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgInByZXJ1mmVuaWUgeiBrbOF2ZXNuaWNlIgorCisjOiBpZl90Y2wuYzoxNDI5Cittc2dpZCAidmltIGVycm9yIgorbXNnc3RyICJjaHliYSB2aW0iCisKKyM6IGlmX3RjbC5jOjE0NzIKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIm5lZOEgc2Egdnl0dm9yaZ0gcHLta2F6IGJ1ZmZlcnUvb2tuYTogb2JqZWt0IHZ5bWF6YW79IgorCisjOiBpZl90Y2wuYzoxNTQ2Cittc2dpZCAiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICJuZWThIHNhIHphcmVnaXN0cm92YZ0gcHLta2F6IHNw5HRu6WhvIHZvbGFuaWE6IGJ1ZmZlci9va25vIHWeIGJvbCB2eW1hemFu/SIKKworIy4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgRmFtb3VzIGxhc3Qgd29yZD8KKyM6IGlmX3RjbC5jOjE1NjMKK21zZ2lkICIiCisiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IGNvcnJ1cHQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0uIgorIm9yZyIKK21zZ3N0ciAiIgorIkUyODA6IFRDTCBGQVRBTCBFUlJPUjogcmVmbGlzdCBwb5prb2Rlbv0hPyBPem7hbXRlLCBwcm9z7W0sIHT6dG8gY2h5YnUgbmEgIgorInZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTU2NAorbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIm5lZOEgc2EgemFyZWdpc3Ryb3ZhnSBwcu1rYXogc3DkdG7paG8gdm9sYW5pYTogb2RrYXogbmEgYnVmZmVyL29rbm8gbmVu4WpkZW79IgorCisjOiBpZl90Y2wuYzoxNzI1Cittc2dpZCAiU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFRjbCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJQcmVw4eh0ZSwgdGVudG8gcHLta2F6IGplIHZ5cG51dP0sIFRjbCBrbmmebmljYSBuZW30nmUgYnmdIG5h6O10YW7hLiIKKworIzogaWZfdGNsLmM6MTg4NworbXNnaWQgIkUyODE6IFRDTCBFUlJPUjogZXhpdCBjb2RlIGlzIG5vdCBpbnQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MTogVENMIENIWUJBOiBu4XZyYXRvdv0ga/NkIG5pZSBqZSBjZWzpIOjtc2xvIT8gT3puYW10ZSwgcHJlc+1tLCB0dXRvICIKKyJjaHlidSBuYSB2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjIwMDcKK21zZ2lkICJjYW5ub3QgZ2V0IGxpbmUiCittc2dzdHIgIm5lZOEgc2EgcHJl6O10YZ0gcmlhZG9rIgorCisjOiBpZl94Y21kc3J2LmM6MjEzCittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAiTmVt9J5lbSB6YXJlZ2lzdHJvdmGdIG1lbm8gcHLta2F6b3bpaG8gc2VydnJhIgorCisjOiBpZl94Y21kc3J2LmM6NDM0IG9zX21zd2luLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6IG1lbm8gcmVnaXN0cm92YW7paG8gc2VydnJhIFwiJXNcIiBuZWV4aXN0dWplIgorCisjOiBpZl94Y21kc3J2LmM6NDYzCittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODogQ2h5YmEgcG/oYXMgcHJlbm9zdSBwcu1rYXp1IGRvIGNpZb5vdulobyBwcm9ncmFtdSIKKworIzogaWZfeGNtZHNydi5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNlcnZlciBpZCB1c2VkOiAlcyIKK21zZ3N0ciAiUG91nu106SBjaHlibukgaWQgc2VydnJhOiAlcyIKKworIzogaWZfeGNtZHNydi5jOjEwNzkKK21zZ2lkICJFMjQ5OiBjb3VsZG4ndCByZWFkIFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSIKK21zZ3N0ciAiRTI0OTogbmVt9J5lbSDo7XRhnSBWSU0gcmVnaXN0cm92+iB2bGFzdG5vc50iCisKKyM6IGlmX3hjbWRzcnYuYzoxMDkwCittc2dpZCAiRTI1MTogVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IGlzIGJhZGx5IGZvcm1lZC4gIERlbGV0ZWQhIgorbXNnc3RyICJFMjUxOiBWSU0gcmVnaXN0cm924SCeaWFkb3OdIGplIHpsZSBmb3JtdWxvdmFu4S4gIFZ5bWF6YW7pISIKKworIzogbWFpbi5jOjUzIG9wdGlvbi5jOjMxNjIgb3B0aW9uLmM6MzI2OQorbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJOZXpu4W1hIHZvvmJhIgorCisjOiBtYWluLmM6NTUKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAiUHLtbGmaIG1ub2hvIHVwcmF2b3ZhY+1jaCBhcmd1bWVudG92IgorCisjOiBtYWluLmM6NTcKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICJDaP1iYSBhcmd1bWVudCBwbyIKKworIzogbWFpbi5jOjU5Cittc2dpZCAiR2FyYmFnZSBhZnRlciBvcHRpb24iCittc2dzdHIgIkNoeWJ5IHphIHZvvmJvdSIKKworIzogbWFpbi5jOjYxCittc2dpZCAiVG9vIG1hbnkgXCIrY29tbWFuZFwiIG9yIFwiLWMgY29tbWFuZFwiIGFyZ3VtZW50cyIKK21zZ3N0ciAiUHLtbGmaIG1ub2hvIFwiK3By7WthelwiIOhpIFwiLWMgcHLta2F6XCIgYXJndW1lbnRvdiIKKworIzogbWFpbi5jOjYzCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBmb3IiCittc2dzdHIgIkNoeWJu/SBhcmd1bWVudCBwcmUiCisKKyM6IG1haW4uYzo0NTAKK21zZ2lkICJUaGlzIFZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlIGRpZmYgZmVhdHVyZS4iCittc2dzdHIgIlRlbnRvIFZpbSBuZWJvbCBrb21waWxvdmFu/SBzIHBvcm92buF2YWPtbWkgZnVua2NpYW1pLiIKKworIzogbWFpbi5jOjg3NQorbXNnaWQgIkF0dGVtcHQgdG8gb3BlbiBzY3JpcHQgZmlsZSBhZ2FpbjogXCIiCittc2dzdHIgIlBva3VzIG8gb3DkdG92bukgb3R2b3JlbmllIHNrcmlwdHU6IFwiIgorCisjOiBtYWluLmM6ODc5IG1haW4uYzo4ODYgbWFpbi5jOjkzMCBtZW1saW5lLmM6MzY3MyBtZW1saW5lLmM6MzY3NworIzogdmVyc2lvbi5jOjg5MiB2ZXJzaW9uLmM6ODk3IHZlcnNpb24uYzo5MDIgdmVyc2lvbi5jOjkwNyB2ZXJzaW9uLmM6OTEyCisjOiB2ZXJzaW9uLmM6OTE3IHZlcnNpb24uYzo5MjMgdmVyc2lvbi5jOjkyNyB2ZXJzaW9uLmM6OTMxIHZlcnNpb24uYzo5MzYKKyM6IHZlcnNpb24uYzo5NDMgdmVyc2lvbi5jOjk1MSB2ZXJzaW9uLmM6OTU3Cittc2dpZCAiXCJcbiIKK21zZ3N0ciAiXCJcbiIKKworIzogbWFpbi5jOjg4NAorbXNnaWQgIkNhbm5vdCBvcGVuIGZvciByZWFkaW5nOiBcIiIKK21zZ3N0ciAiTmVk4SBzYSBvdHZvcmmdIHByZSB64XBpczogXCIiCisKKyM6IG1haW4uYzo5MjgKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIk5lZOEgc2Egb3R2b3JpnSBwcmUgdv1zdHVwIHNrcmlwdHU6IFwiIgorCisjOiBtYWluLmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmaWxlcyB0byBlZGl0XG4iCittc2dzdHIgInBv6GV0IHP6Ym9yb3YgcHJlIPpwcmF2dTogJWRcbiIKKworIzogbWFpbi5jOjExMTgKK21zZ2lkICJWaW06IFdhcm5pbmc6IE91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IFZhcm92YW5pZTogVv1zdHVwIG5lc21lcnVqZSBuYSB0ZXJtaW7hbFxuIgorCisjOiBtYWluLmM6MTEyMAorbXNnaWQgIlZpbTogV2FybmluZzogSW5wdXQgaXMgbm90IGZyb20gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IFZhcm92YW5pZTogVnN0dXAgbmVwb2No4WR6YSB6IHRlcm1pbuFsdVxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjExOTUKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJwcmUtdmltcmMgcHLta2F6b3b9IHJpYWRvayIKKworIzogbWFpbi5jOjEyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IE5lZOEgc2Eg6O10YZ0geiBcIiVzXCIiCisKKyM6IG1haW4uYzoyMjA1Cittc2dpZCAiIgorIlxuIgorIk1vcmUgaW5mbyB3aXRoOiBcInZpbSAtaFwiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQb2Ryb2JuZWqaaWUgaW5mb3Jt4WNpZSB67XNr4XRlIHBvbW9jb3UgXCJ2aW0gLWhcIlxuIgorCisjOiBtYWluLmM6MjIzOAorbXNnaWQgIltmaWxlIC4uXSAgICAgICBlZGl0IHNwZWNpZmllZCBmaWxlKHMpIgorbXNnc3RyICJbc/pib3IgLi5dIC4uICAgICAgICAgIHVwcmF2aZ0gc/pib3IoeSkiCisKKyM6IG1haW4uYzoyMjM5Cittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAgICAgICDo7XRhnSB0ZXh0IHogmnRhbmRhcmRu6WhvIHZzdHVwdSIKKworIzogbWFpbi5jOjIyNDAKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCB0YWcgICAgICAgICAgdXByYXZpnSBz+mJvciBuYSBtaWVzdGUgZGVmaW7tY2llIHRhZ3UiCisKKyM6IG1haW4uYzoyMjQyCittc2dpZCAiLXEgW2Vycm9yZmlsZV0gIGVkaXQgZmlsZSB3aXRoIGZpcnN0IGVycm9yIgorbXNnc3RyICItcSBbY2h5Ym92/SBz+mJvcl0gIHVwcmF2aZ0gc/pib3IgbmEgbWllc3RlIHb9c2t5dHUgcHJ2ZWogY2h5YnkiCisKKyM6IG1haW4uYzoyMjUxCittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorInBvdZ5pdGllOiIKKworIzogbWFpbi5jOjIyNTQKK21zZ2lkICIgdmltIFthcmd1bWVudHNdICIKK21zZ3N0ciAidmltIFthcmd1bWVudHldICIKKworIzogbWFpbi5jOjIyNTgKK21zZ2lkICIiCisiXG4iCisiICAgb3I6IgorbXNnc3RyICIiCisiXG4iCisiICAgYWxlYm8iCisKKyM6IG1haW4uYzoyMjYxCittc2dpZCAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50czpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50eTpcbiIKKworIzogbWFpbi5jOjIyNjIKK21zZ2lkICItLVx0XHRcdE9ubHkgZmlsZSBuYW1lcyBhZnRlciB0aGlzIgorbXNnc3RyICItLVx0XHRcdE30nnUgbmFzbGVkb3ZhnSBpYmEgbuF6dnkgc/pib3JvdiIKKworIzogbWFpbi5jOjIyNjQKK21zZ2lkICItLWxpdGVyYWxcdFx0RG9uJ3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiLS1saXRlcmFsXHRcdG5lcG9kYXJpbG8gc2EgZXhwYW5kb3ZhnSCeb2zta2926SB6bmFreSAod2lsZGNhcmRzKSIKKworIzogbWFpbi5jOjIyNjcKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHRwcmlobOFzaZ0gZ3ZpbSBuYSBPTEUiCisKKyM6IG1haW4uYzoyMjY4Cittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHRvZGhs4XNpnSBndmltIHogT0xFIgorCisjOiBtYWluLmM6MjI3MQorbXNnaWQgIi1nXHRcdFx0UnVuIHVzaW5nIEdVSSAobGlrZSBcImd2aW1cIikiCittc2dzdHIgIi1nXHRcdFx0c3B1c3RpnSB2IEdVSSBt82RlIChyb3ZuYWvpIGFrbyBcImd2aW1cIikiCisKKyM6IG1haW4uYzoyMjcyCittc2dpZCAiLWZcdFx0XHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZlx0XHRcdFBvcHJlZGllOiBwcmkgc3B1c3Rlbu0gR1VJIHNhIG5lb2RkZWztIG9kIHNoZWxsdSIKKworIzogbWFpbi5jOjIyNzQKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRWaSBt82QgKHJvdm5ha+kgYWtvIFwidmlcIikiCisKKyM6IG1haW4uYzoyMjc1Cittc2dpZCAiLWVcdFx0XHRFeCBtb2RlIChsaWtlIFwiZXhcIikiCittc2dzdHIgIi1lXHRcdFx0RXggbfNkIChyb3ZuYWvpIGFrbyBcImV4XCIpIgorCisjOiBtYWluLmM6MjI3NgorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHRUaWNo/SAoZOF2a292/SkgbfNkIChpYmEgcHJlIFwiZXhcIikiCisKKyM6IG1haW4uYzoyMjc4Cittc2dpZCAiLWRcdFx0XHREaWZmIG1vZGUgKGxpa2UgXCJ2aW1kaWZmXCIpIgorbXNnc3RyICItZFx0XHRcdFBvcm92buF2YWPtIG3zZCAocm92bmFr6SBha28gXCJ2aW1kaWZmXCIpIgorCisjOiBtYWluLmM6MjI4MAorbXNnaWQgIi15XHRcdFx0RWFzeSBtb2RlIChsaWtlIFwiZXZpbVwiLCBtb2RlbGVzcykiCittc2dzdHIgIi15XHRcdFx0SmVkbm9kdWNo/SBt82QgKHJvdm5ha+kgYWtvIFwiZXZpbVwiLCBtb2RlbGVzcykiCisKKyM6IG1haW4uYzoyMjgxCittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHRN82QgaWJhX3ByZV/o7XRhbmllIChha28gXCJ2aWV3XCIpIgorCisjOiBtYWluLmM6MjI4MgorbXNnaWQgIi1aXHRcdFx0UmVzdHJpY3RlZCBtb2RlIChsaWtlIFwicnZpbVwiKSIKK21zZ3N0ciAiLVpcdFx0XHRPYm1lZHplbv0gbfNkIChyb3ZuYWvpIGFrbyBcInJ2aW1cIikiCisKKyM6IG1haW4uYzoyMjgzCittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHRabWVueSAodWtsYWRhbmllIHP6Ym9yb3YpIHpha+F6YW7pIgorCisjOiBtYWluLmM6MjI4NAorbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdFptZW55IHYgdGV4dGUgbmllIHP6IHBvdm9sZW7pIgorCisjOiBtYWluLmM6MjI4NQorbXNnaWQgIi1iXHRcdFx0QmluYXJ5IG1vZGUiCittc2dzdHIgIi1iXHRcdFx0Qmlu4XJueSBt82QiCisKKyM6IG1haW4uYzoyMjg3Cittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0TGlzcCBt82QiCisKKyM6IG1haW4uYzoyMjg5Cittc2dpZCAiLUNcdFx0XHRDb21wYXRpYmxlIHdpdGggVmk6ICdjb21wYXRpYmxlJyIKK21zZ3N0ciAiLUNcdFx0XHRLb21wYXRhYmlsbv0gcyBWaTogJ2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjI5MAorbXNnaWQgIi1OXHRcdFx0Tm90IGZ1bGx5IFZpIGNvbXBhdGlibGU6ICdub2NvbXBhdGlibGUnIgorbXNnc3RyICItTlx0XHRcdEtvbXBhdGliaWxpdGEgcyBWaSB2eXBudXThOiAnbm9jb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjIyOTEKK21zZ2lkICItVltOXVx0XHRWZXJib3NlIGxldmVsIgorbXNnc3RyICItVltOXVx0XHTacm92ZfIgdv1waXN1IGhs4ZpvayIKKworIzogbWFpbi5jOjIyOTIKK21zZ2lkICItRFx0XHRcdERlYnVnZ2luZyBtb2RlIgorbXNnc3RyICItRFx0XHRcdExhZGlhY2kgbfNkIgorCisjOiBtYWluLmM6MjI5MworbXNnaWQgIi1uXHRcdFx0Tm8gc3dhcCBmaWxlLCB1c2UgbWVtb3J5IG9ubHkiCittc2dzdHIgIi1uXHRcdFx0TmVidWRlIHZ5dHbhcmGdIG9ka2xhZGFj7SBz+mJvciwgYnVkZSBwb3We7XZhnSBpYmEgcGFt5J0iCisKKyM6IG1haW4uYzoyMjk0Cittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0Vnlw7ZplIHpvem5hbSBvZGtsYWRhY+1jaCBz+mJvcm92IGEgc2tvbujtIgorCisjOiBtYWluLmM6MjI5NQorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciBu4XpvdiBz+mJvcnVcdE9ibm927SBwcmVydZplbukgc2VkZW5pZSIKKworIzogbWFpbi5jOjIyOTYKK21zZ2lkICItTFx0XHRcdFNhbWUgYXMgLXIiCittc2dzdHIgIi1MXHRcdFx0Um92bmFr6SBha28gLXIiCisKKyM6IG1haW4uYzoyMjk4Cittc2dpZCAiLWZcdFx0XHREb24ndCB1c2UgbmV3Y2xpIHRvIG9wZW4gd2luZG93IgorbXNnc3RyICItZlx0XHRcdE5lYnVkZSBwb3We7XZhnSBuZXdjbGkgcHJlIG90dm9yZW5pZSBva25hIgorCisjOiBtYWluLmM6MjI5OQorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPHphcmlhZGVuaWU+XHRcdFBvdZ5pnSA8emFyaWFkZW5pZT4gcHJlIEkvTyIKKworIzogbWFpbi5jOjIzMDIKK21zZ2lkICItSFx0XHRcdHN0YXJ0IGluIEhlYnJldyBtb2RlIgorbXNnc3RyICItSFx0XHRcdG5hIHNwdXN0ZW7tZSB2IGhlYnJlanNrb20gbfNkZSIKKworIzogbWFpbi5jOjIzMDUKK21zZ2lkICItRlx0XHRcdHN0YXJ0IGluIEZhcnNpIG1vZGUiCittc2dzdHIgIi1GXHRcdFx0bmEgc3B1c3Rlbu1lIHZvIEZhcnNpIG3zZGUiCisKKyM6IG1haW4uYzoyMzA3Cittc2dpZCAiLVQgPHRlcm1pbmFsPlx0U2V0IHRlcm1pbmFsIHR5cGUgdG8gPHRlcm1pbmFsPiIKK21zZ3N0ciAiLVQgPHRlcm1pbuFsPlx0TmFzdGF27SB0eXAgdGVybWlu4Wx1IG5hIDx0ZXJtaW7hbD4iCisKKyM6IG1haW4uYzoyMzA4Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0UG91nmlqZSA8dmltcmM+IG5hbWllc3RvIGFr6Whva2++dmVrIC52aW1yYyIKKworIzogbWFpbi5jOjIzMTAKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0UG91nmlqZSA8Z3ZpbXJjPiBuYW1pZXN0byBha+lob2tvvnZlayAuZ3ZpbXJjIgorCisjOiBtYWluLmM6MjMxMgorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHROZW5haHLhICdwbHVnaW4nIHNrcmlwdHkiCisKKyM6IG1haW4uYzoyMzEzCittc2dpZCAiLW9bTl1cdFx0T3BlbiBOIHdpbmRvd3MgKGRlZmF1bHQ6IG9uZSBmb3IgZWFjaCBmaWxlKSIKK21zZ3N0ciAiLW9bTl1cdFx0T3R2b3LtIE4gb2tpZW4gKGltcGxpY2l0bmUgamVkbm8gcHJlIGthnmT9IHP6Ym9yKSIKKworIzogbWFpbi5jOjIzMTQKK21zZ2lkICItT1tOXVx0XHRsaWtlIC1vIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5IgorbXNnc3RyICItT1tOXVx0XHRha28gLW8gYWxlIHJvemRlbO0gdmVydGlr4WxuZSIKKworIzogbWFpbi5jOjIzMTUKK21zZ2lkICIrXHRcdFx0U3RhcnQgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIitcdFx0XHROYXN0YXbtIGt1cnpvciBuYSBrb25pZWMgc/pib3J1IgorCisjOiBtYWluLmM6MjMxNgorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8cmlhZG9rPlx0XHROYXN0YXbtIGt1cnpvciBuYSA8cmlhZG9rPiIKKworIzogbWFpbi5jOjIzMTgKK21zZ2lkICItLWNtZCA8Y29tbWFuZD5cdEV4ZWN1dGUgPGNvbW1hbmQ+IGJlZm9yZSBsb2FkaW5nIGFueSB2aW1yYyBmaWxlIgorbXNnc3RyICItLWNtZCA8cHLta2F6Plx0XHRWeWtvbuEgPHBy7Wthej4gcHJlZCBuYWhyYW7tbSB2aW1yYyBz+mJvcnUiCisKKyM6IG1haW4uYzoyMzIwCittc2dpZCAiLWMgPGNvbW1hbmQ+XHRcdEV4ZWN1dGUgPGNvbW1hbmQ+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1jIDxwcu1rYXo+XHRcdFBvIG5haHJhbu0gcHJ26WhvIHP6Ym9ydSB2eWtvbuEgPHBy7Wthej4iCisKKyM6IG1haW4uYzoyMzIxCittc2dpZCAiLVMgPHNlc3Npb24+XHRcdFNvdXJjZSBmaWxlIDxzZXNzaW9uPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItUyA8c2VkZW5pZT5cdFx0UG8gbmFocuFu7SBwcnbpaG8gc/pib3J1IHZ5a29u4SBwcu1rYXp5IHYgc/pib3JlIDxzZWRlbmllPiIKKworIzogbWFpbi5jOjIzMjIKK21zZ2lkICItcyA8c2NyaXB0aW4+XHRSZWFkIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGZyb20gZmlsZSA8c2NyaXB0aW4+IgorbXNnc3RyICItcyA8c2tyaXB0Plx0XHROYejtdGEgcHLta2F6eSBub3Jt4WxuZWhvIG3zZHUgem8gPHNrcmlwdHU+IgorCisjOiBtYWluLmM6MjMyMworbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDxza3JpcHQ+XHRcdFByaXBvau0gdppldGt5IG5hcO1zYW7pIHBy7WthenkgZG8gc/pib3J1IDxza3JpcHQ+IgorCisjOiBtYWluLmM6MjMyNAorbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLVcgPHNrcmlwdD5cdFx0VWxvnu0gdppldGt5IG5hcO1zYW7pIHBy7WthenkgZG8gc/pib3J1IDxza3JpcHQ+IgorCisjOiBtYWluLmM6MjMyNgorbXNnaWQgIi14XHRcdFx0RWRpdCBlbmNyeXB0ZWQgZmlsZXMiCittc2dzdHIgIi14XHRcdFx02nByYXZhIHphmmlmcm92YW79Y2ggc/pib3JvdiIKKworIzogbWFpbi5jOjIzMzAKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdENvbm5lY3QgdmltIHRvIHRoaXMgcGFydGljdWxhciBYLXNlcnZlciIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsZWo+XHRTcHVzdO0gdmltIG5hIDxkaXNwbGVqPiIKKworIzogbWFpbi5jOjIzMzIKK21zZ2lkICItWFx0XHRcdERvIG5vdCBjb25uZWN0IHRvIFggc2VydmVyIgorbXNnc3RyICItWFx0XHRcdE5lcHJpcG9q7SBzYSBrIFggc2VydmVydSIKKworIzogbWFpbi5jOjIzMzQKK21zZ2lkICItLXNvY2tldGlkIDx4aWQ+XHRPcGVuIFZpbSBpbnNpZGUgYW5vdGhlciBHVEsgd2lkZ2V0IgorbXNnc3RyICItLXNvY2tldGlkIDx4aWQ+XHRPdHZvcu0gVmltIHZu+nRyaSBpbulobyBHVEsgcHJvZ3JhbXUuIgorCisjOiBtYWluLmM6MjMzOAorbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQiCittc2dzdHIgIi0tcmVtb3RlIDxz+mJvcnk+XHRVcHJhdmmdIDxz+mJvcnk+IG5hIFZpbSBzZXJ2cmkgYSBza29u6GmdIgorCisjOiBtYWluLmM6MjMzOQorbXNnaWQgIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgQXMgLS1yZW1vdGUgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQiCittc2dzdHIgIi0tcmVtb3RlLXdhaXQgPHP6Ym9yeT5cdEFrbyAtLXJlbW90ZSBhbGUg6GFr4SBuYSBz+mJvcnkgcHJlIHVrb27oZW5pZSD6cHJhdiIKKworIzogbWFpbi5jOjIzNDAKK21zZ2lkICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0U2VuZCA8a2V5cz4gdG8gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZS1zZW5kIDx2b75ieT5cdE9kb5psZSA8dm++Ynk+IG5hIFZpbSBzZXJ2ZXIgYSBza29u6O0iCisKKyM6IG1haW4uYzoyMzQxCittc2dpZCAiLS1yZW1vdGUtZXhwciA8ZXhwcj5cdEV2YWx1YXRlIDxleHByPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIHByaW50IHJlc3VsdCIKK21zZ3N0ciAiLS1yZW1vdGUtZXhwciA8dv1yYXo+XHRTcHVzdGkgPHb9cmF6PiBuYSBzZXJ2cmkgYSB2eXRsYejtIHb9c2xlZG9rIgorCisjOiBtYWluLmM6MjM0MgorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICItLXNlcnZlcmxpc3RcdFx0Vnlw7ZplIHpvem5hbSBtaWVuIGRvc3R1cG79Y2ggVmltIHNlcnZyb3YgYSBza29u6O0iCisKKyM6IG1haW4uYzoyMzQzCittc2dpZCAiLS1zZXJ2ZXJuYW1lIDxuYW1lPlx0U2VuZCB0by9iZWNvbWUgdGhlIFZpbSBzZXJ2ZXIgPG5hbWU+IgorbXNnc3RyICItLXNlcnZlcm5hbWUgPG7hem92Plx0T2RvmmxlIG5hIFZpbSBzZXJ2ZXIgPG7hem92PiIKKworIzogbWFpbi5jOjIzNDYKK21zZ2lkICItaSA8dmltaW5mbz5cdFx0VXNlIDx2aW1pbmZvPiBpbnN0ZWFkIG9mIC52aW1pbmZvIgorbXNnc3RyICItaSA8dmltaW5mbz5cdFx0UG91nmlqZSA8dmltaW5mbz4gbmFtaWVzdG8gYWvpaG9rb752ZWsgLnZpbWluZm8iCisKKyM6IG1haW4uYzoyMzQ4Cittc2dpZCAiLWhcdFx0XHRwcmludCBIZWxwICh0aGlzIG1lc3NhZ2UpIGFuZCBleGl0IgorbXNnc3RyICItaFx0XHRcdFZ5cO2aZSB0+nRvIG7hcG92ZWR1IGEgc2tvbujtIgorCisjOiBtYWluLmM6MjM0OQorbXNnaWQgIi0tdmVyc2lvblx0XHRwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IgorbXNnc3RyICItLXZlcnNpb25cdFx0dnlw7ZplIGluZm9ybeFjaWUgbyB2ZXJ6aWkgYSBza29u6O0iCisKKyM6IG1haW4uYzoyMzUzCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKE1vdGlmIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnR5IHByZSBndmltIChNb3RpZiB2ZXJ6aWEpOlxuIgorCisjOiBtYWluLmM6MjM1NgorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChBdGhlbmEgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudHkgcHJlIGd2aW0gKEF0aGVuYSB2ZXJ6aWEpOlxuIgorCisjOiBtYWluLmM6MjM1OQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4iCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGVqPlx0U3B1c3TtIHZpbSBuYSA8ZGlzcGxlaj4iCisKKyM6IG1haW4uYzoyMzYwCittc2dpZCAiLWljb25pY1x0XHRTdGFydCB2aW0gaWNvbmlmaWVkIgorbXNnc3RyICItaWNvbmljXHRcdFNwdXN07SB2aW0gbWluaW1hbGl6b3ZhbukiCisKKyM6IG1haW4uYzoyMzYyCittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG7hem92Plx0XHRQb3WeaWplIHJlc291cmNlIGFrbyBieSB2aW0gbWFsIDxu4Xpvdj4iCisKKyM6IG1haW4uYzoyMzYzCittc2dpZCAiXHRcdFx0ICAoVW5pbXBsZW1lbnRlZClcbiIKK21zZ3N0ciAiXHRcdFx0ICAobmllIGplIGltcGxlbWVudG92YW7pKVxuIgorCisjOiBtYWluLmM6MjM2NQorbXNnaWQgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciB0aGUgYmFja2dyb3VuZCAoYWxzbzogLWJnKSIKK21zZ3N0ciAiLWJhY2tncm91bmQgPGZhcmJhPlx0TmFzdGF27SBzYSA8ZmFyYmE+IHBvemFkaWEgKHRpZZ4gLWJnKSIKKworIzogbWFpbi5jOjIzNjYKK21zZ2lkICItZm9yZWdyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mZykiCittc2dzdHIgIi1mb3JlZ3JvdW5kIDxmYXJiYT5cdE5hc3Rhdu0gc2EgPGZhcmJhPiBwb3ByZWRpYSAodGllniAtZmcpIgorCisjOiBtYWluLmM6MjM2NyBtYWluLmM6MjM4NworbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPHDtc21vPlx0XHROYXN0YXbtIDxw7XNtbz4gbm9ybeFsbmVobyB0ZXh0dSAodGllniAtZm4pIgorCisjOiBtYWluLmM6MjM2OAorbXNnaWQgIi1ib2xkZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGJvbGQgdGV4dCIKK21zZ3N0ciAiLWJvbGRmb250IDxw7XNtbz5cdE5hc3Rhdu0gPHDtc21vPiBwcmUgenb9cmF6bmVu/SB0ZXh0IgorCisjOiBtYWluLmM6MjM2OQorbXNnaWQgIi1pdGFsaWNmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgaXRhbGljIHRleHQiCittc2dzdHIgIi1pdGFsaWNmb250IDxw7XNtbz5cdE5hc3Rhdu0gPHDtc21vPiBwcmUga3Vyeu12dSIKKworIzogbWFpbi5jOjIzNzAgbWFpbi5jOjIzODgKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIi1nZW9tZXRyeSA8Z2VvbWV0cmllPlx0TmFzdGF27SBzYSA8Z2VvbWV0cmlhPiAodGllniAtZ2VvbSkiCisKKyM6IG1haW4uYzoyMzcxCittc2dpZCAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdFVzZSBhIGJvcmRlciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtYncpIgorbXNnc3RyICItYm9yZGVyd2lkdGggPJrtcmthPlx0TmFzdGF27SA8mu1ya3U+IG9rcmFqb3YgKHRpZZ4gLWJ3KSIKKworIzogbWFpbi5jOjIzNzIKK21zZ2lkICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgVXNlIGEgc2Nyb2xsYmFyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1zdykiCittc2dzdHIgIi1zY3JvbGxiYXJ3aWR0aCA8mu1ya2E+ICBOYXN0YXbtIDya7XJrdT4gcG9zdXZuZWogbGmadHkgKHRpZZ4gLXN3KSIKKworIzogbWFpbi5jOjIzNzQKK21zZ2lkICItbWVudWhlaWdodCA8aGVpZ2h0Plx0VXNlIGEgbWVudSBiYXIgaGVpZ2h0IG9mIDxoZWlnaHQ+IChhbHNvOiAtbWgpIgorbXNnc3RyICItbWVudWhlaWdodCA8dv2aa2E+XHROYXN0YXbtIDx2/ZprdT4gcG9udWt5ICh0aWWeIC1taCkiCisKKyM6IG1haW4uYzoyMzc2IG1haW4uYzoyMzg5Cittc2dpZCAiLXJldmVyc2VcdFx0VXNlIHJldmVyc2UgdmlkZW8gKGFsc286IC1ydikiCittc2dzdHIgIi1yZXZlcnNlXHRcdFBvdZ5pamUgcmV2ZXJ6bukgZmFyYnkgKHRpZZ4gLXJ2KSIKKworIzogbWFpbi5jOjIzNzcKK21zZ2lkICIrcmV2ZXJzZVx0XHREb24ndCB1c2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogK3J2KSIKK21zZ3N0ciAiK3JldmVyc2VcdFx0TmVwb3WeaWplIHJldmVyem7pIGZhcmJ5ICh0aWWeICtydikiCisKKyM6IG1haW4uYzoyMzc4Cittc2dpZCAiLXhybSA8cmVzb3VyY2U+XHRTZXQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSIKK21zZ3N0ciAiLXhybSA8cmVzb3VyY2U+XHROYXN0YXbtIHphZGFu/SA8cmVzb3VyY2U+IgorCisjOiBtYWluLmM6MjM4MQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChSSVNDIE9TIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnR5IHByZSBndmltIChSSVNDIE9TIHZlcnppYSk6XG4iCisKKyM6IG1haW4uYzoyMzgyCittc2dpZCAiLS1jb2x1bW5zIDxudW1iZXI+XHRJbml0aWFsIHdpZHRoIG9mIHdpbmRvdyBpbiBjb2x1bW5zIgorbXNnc3RyICItLWNvbHVtbnMgPHBv6GV0Plx0PHBv6GV0PiBzdOVwY292IG5hIG9rbm8iCisKKyM6IG1haW4uYzoyMzgzCittc2dpZCAiLS1yb3dzIDxudW1iZXI+XHRJbml0aWFsIGhlaWdodCBvZiB3aW5kb3cgaW4gcm93cyIKK21zZ3N0ciAiLS1yb3dzIDxwb+hldD5cdDxwb+hldD4gcmlhZGtvdiBuYSBva25vIgorCisjOiBtYWluLmM6MjM4NgorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnR5IHByZSBndmltIChHVEsrIHZlcnppYSk6XG4iCisKKyM6IG1haW4uYzoyMzkwCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiAoYWxzbzogLS1kaXNwbGF5KSIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsZWo+XHRzcHVzdO0gdmltIG5hIDxkaXNwbGVqPiAodGllniAtLWRpc3BsYXkpIgorCisjOiBtYWluLmM6MjM5MgorbXNnaWQgIi0taGVscFx0XHRTaG93IEdub21lIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1oZWxwXHRcdFZ5cO2aZSBHbm9tZSBhcmd1bWVudHkiCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyNjM0Cittc2dpZCAiIgorIlxuIgorIlNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiT2Rvc2xhbmllIHpseWhhbG8uXG4iCisKKyMuIExldCB2aW0gc3RhcnQgbm9ybWFsbHkuCisjOiBtYWluLmM6MjYzOQorbXNnaWQgIiIKKyJcbiIKKyJTZW5kIGZhaWxlZC4gVHJ5aW5nIHRvIGV4ZWN1dGUgbG9jYWxseVxuIgorbXNnc3RyICIiCisiXG4iCisiT2Rvc2xhbmllIHpseWhhbG8uIFBva/qaYW0gc2Egc3B1c3RpnSBsb2vhbG5lXG4iCisKKyM6IG1haW4uYzoyNjcyIG1haW4uYzoyNjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG9mICVkIGVkaXRlZCIKK21zZ3N0ciAiJWQgdXByYXZlbv1jaCBz+mJvcm92IHogJWQiCisKKyM6IG1haW4uYzoyNzE2Cittc2dpZCAiU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiT2Rvc2xhbmllIHb9cmF6dSB6bHloYWxvLlxuIgorCisjOiBtYXJrLmM6NjYwCittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICJOaWUgc/ogbmFzdGF2ZW7pIJ5pYWRuZSB6bmHoa3kiCisKKyM6IG1hcmsuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MzogTm8gbWFya3MgbWF0Y2hpbmcgXCIlc1wiIgorbXNnc3RyICJFMjgzOlwiJXNcIiBuZXZ5aG92dWr6IJ5pYWRuZSB6bmHoa3kiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjY3MworbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyJ6bmHoa2EgcmlhZG9rICBzdOVwZWMgc/pib3IvdGV4dCIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzExCittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgc2tvayByaWFkb2sgc3TlcGVjIHP6Ym9yL3RleHQiCisKKyM6IG1hcmsuYzoxMDczCittc2dpZCAiIgorIlxuIgorIiMgRmlsZSBtYXJrczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgU/pib3Jvdukgem5h6Gt5OlxuIgorCisjLiBXcml0ZSB0aGUganVtcGxpc3Qgd2l0aCAtJworIzogbWFyay5jOjExMDgKK21zZ2lkICIiCisiXG4iCisiIyBKdW1wbGlzdCAobmV3ZXN0IGZpcnN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgWm96bmFtIHNrb2tvdiAoemHo7W5havpjaSBuYWpub3aab3UgcG9sb55rb3UpOlxuIgorCisjOiBtYXJrLmM6MTIwMworbXNnaWQgIiIKKyJcbiIKKyIjIEhpc3Rvcnkgb2YgbWFya3Mgd2l0aGluIGZpbGVzIChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgSGlzdPNyaWEgem5h6GllayB2IHP6Ym9yb2NoICh6YejtbmFq+mNpIG5ham5vdppvdSBwb2xvnmtvdSk6XG4iCisKKyM6IG1hcmsuYzoxMjg2Cittc2dpZCAiTWlzc2luZyAnPiciCittc2dzdHIgIkNo/WJhICc+JyIKKworIzogbWJ5dGUuYzozOTUKK21zZ2lkICJOb3QgYSB2YWxpZCBjb2RlcGFnZSIKK21zZ3N0ciAiQ2h5Ym7hIGvzZG924SBzdHLhbmthIgorCisjOiBtYnl0ZS5jOjMxMDMKK21zZ2lkICJFMjg0OiBDYW5ub3Qgc2V0IElDIHZhbHVlcyIKK21zZ3N0ciAiRTI4NDogTmVkavogc2EgbmFzdGF2aZ0gSUMgaG9kbm90eSIKKworIzogbWJ5dGUuYzozMjU1Cittc2dpZCAiRTI4NTogRmFpbGVkIHRvIGNyZWF0ZSBpbnB1dCBjb250ZXh0IgorbXNnc3RyICJFMjg1OiBOZXBvZGFyaWxvIHNhIHZ5dHZvcmmdIHZzdHVwbv0ga29udGV4dCIKKworIzogbWJ5dGUuYzozNDAyCittc2dpZCAiRTI4NjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgbWV0aG9kIgorbXNnc3RyICJFMjg2OiBOZXBvZGFyaWxvIHNhIG90dm9yaZ0gdnN0dXBu+iBtZXTzZHUiCisKKyM6IG1ieXRlLmM6MzQxMworbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4NzogVmFyb3ZhbmllOiBsaWt2aWRh6G7pIHNw5HRu6SB2b2xhbmllIHNhIG5lZOEgbmFzdGF2aZ0gbmEgSU0iCisKKyM6IG1ieXRlLmM6MzQxOQorbXNnaWQgIkUyODg6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgYW55IHN0eWxlIgorbXNnc3RyICJFMjg4OiB2c3R1cG7hIG1ldPNkYSBuZXBvZHBvcnVqZSCeaWFkbnkgmnT9bCIKKworIzogbWJ5dGUuYzozNDc2Cittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IHZzdHVwbuEgbWV082RhIG5lcG9kcG9ydWplIG30aiAncHJlZWRpdCcgdHlwIgorCisjOiBtYnl0ZS5jOjM1NTAKK21zZ2lkICJFMjkwOiBvdmVyLXRoZS1zcG90IHN0eWxlIHJlcXVpcmVzIGZvbnRzZXQiCittc2dzdHIgIkUyOTA6IE5hZGJvZG92/SCadP1sIHZ5nmFkdWplIGZvbnRzZXQiCisKKyM6IG1ieXRlLmM6MzU3OAorbXNnaWQgIkUyOTE6IFlvdXIgR1RLKyBpcyBvbGRlciB0aGFuIDEuMi4zLiBTdGF0dXMgYXJlYSBkaXNhYmxlZCIKK21zZ3N0ciAiRTI5MTogTeF0ZSBHVEsrIHZlcnppdSBzdGFymml1IG5lniAxLjIuMy4gU3Rhdm924SBwbG9jaGEgdnlwbnV04S4iCisKKyM6IG1ieXRlLmM6Mzg0MworbXNnaWQgIkUyOTI6IElucHV0IE1ldGhvZCBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmciCittc2dzdHIgIkUyOTI6IFNlcnZlciB2c3R1cG79Y2ggbWV082QgbmViZZ7tIgorCisjOiBtZW1maWxlLmM6NDg4Cittc2dpZCAiRTI5MzogYmxvY2sgd2FzIG5vdCBsb2NrZWQiCittc2dzdHIgIkUyOTM6IGJsb2sgbmVib2wgemFta251dP0iCisKKyM6IG1lbWZpbGUuYzo5ODkKK21zZ2lkICJFMjk0OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSByZWFkIgorbXNnc3RyICJFMjk0OiBDaHliYSBwb3N1bnUgcHJpIOjtdGFu7SBvZGtsYWRhY2llaG8gc/pib3J1IgorCisjOiBtZW1maWxlLmM6OTk0Cittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IENoeWJhIHByaSDo7XRhbu0gb2RrbGFkYWNpZWhvIHP6Ym9ydSIKKworIzogbWVtZmlsZS5jOjEwNDYKK21zZ2lkICJFMjk2OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIKK21zZ3N0ciAiRTI5NjogQ2h5YmEgcG9zdW51IHByaSB1a2xhZGFu7SBkbyBvZGtsYWRhY2llaG8gc/pib3J1IgorCisjOiBtZW1maWxlLmM6MTA2NAorbXNnaWQgIkUyOTc6IFdyaXRlIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5NzogQ2h5YmEgcHJpIHVrbGFkYW7tIGRvIG9ka2xhZGFjaWVobyBz+mJvcnUiCisKKyM6IG1lbWZpbGUuYzoxMjYxCittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiBPZGtsYWRhY+0gc/pib3IgdZ4gZXhpc3R1amUhIgorCisjOiBtZW1saW5lLmM6Mjc1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIKK21zZ3N0ciAiRTI5ODogTmVk4SBzYSB67XNrYZ0gYmxvayAwPyIKKworIzogbWVtbGluZS5jOjMxNQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMT8iCittc2dzdHIgIkUyOTg6IE5lZOEgc2Egeu1za2GdIGJsb2sgMT8iCisKKyM6IG1lbWxpbmUuYzozMzMKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDI/IgorbXNnc3RyICJFMjk4OiBOZWThIHNhIHrtc2thnSBibG9rIDI/IgorCisjLiBjb3VsZCBub3QgKHJlKW9wZW4gdGhlIHN3YXAgZmlsZSwgd2hhdCBjYW4gd2UgZG8/Pz8/CisjOiBtZW1saW5lLmM6NDQzCittc2dpZCAiRTMwMTogT29wcywgbG9zdCB0aGUgc3dhcCBmaWxlISEhIgorbXNnc3RyICJFMzAxOiBVcHMsIG9ka2xhZGFj7SBz+mJvciBib2wgc3RyYXRlbv0hISEiCisKKyM6IG1lbWxpbmUuYzo0NDgKK21zZ2lkICJFMzAyOiBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwMjogTmVk4SBzYSBwcmVtZW5vdmGdIG9ka2xhZGFj7SBz+mJvciIKKworIzogbWVtbGluZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIKK21zZ3N0ciAiRTMwMzogTmVk4SBzYSBvdHZvcmmdIG9ka2xhZGFj7SBz+mJvciBwcmUgXCIlc1wiLCBvcHJhdmEgbmllIGplIG5lbW+ebuEiCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiBtbF90aW1lc3RhbXA6IG5lZOEgc2Egeu1za2GdIGJsb2sgMD8/IgorCisjOiBtZW1saW5lLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDU6IE5vIHN3YXAgZmlsZSBmb3VuZCBmb3IgJXMiCittc2dzdHIgIkUzMDU6IE9ka2xhZGFj7SBz+mJvciBwcmUgJXMgbmVib2wgbuFqZGVu/SIKKworIzogbWVtbGluZS5jOjc2NworbXNnaWQgIkVudGVyIG51bWJlciBvZiBzd2FwIGZpbGUgdG8gdXNlICgwIHRvIHF1aXQpOiAiCittc2dzdHIgIlphZGFqdGUg6O1zbG8gb2RrbGFkYWNpZWhvIHP6Ym9ydSwga3Rvcv0gc2EgbeEgcG91nml0ICgwIHByZSB1a29u6GVuaWUpOiAiCisKKyM6IG1lbWxpbmUuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNjogQ2Fubm90IG9wZW4gJXMiCittc2dzdHIgIkUzMDY6IE5lZOEgc2Egb3R2b3JpnSAlcyIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIk5lZOEgc2Eg6O10YZ0gYmxvayAwIHogIgorCisjOiBtZW1saW5lLmM6ODM3Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIk1vnm5vIG5lZG+abG8gayCeaWFkbnltIHptZW7hbSwgYWxlYm8gVmltIG5lYWt0dWFsaXpvdmFsIG9ka2xhZGFj7SBz+mJvci4iCisKKyM6IG1lbWxpbmUuYzo4NDcgbWVtbGluZS5jOjg2NAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW0uXG4iCittc2dzdHIgIiBuZWThIHNhIHBvdZ5pnSBzIHRvdXRvIHZlcnppb3UgVmltLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAiUG91nml0ZSBWaW0gdmVyeml1IDMuMC5cbiIKKworIzogbWVtbGluZS5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA3OiAlcyBkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlIgorbXNnc3RyICJFMzA3OiAlcyBzYSBuZXpk4SBieZ0gb2RrbGFkYWPtbSBz+mJvcm9tIFZpbSIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIgbmVk4SBzYSBwb3We7Z0gbmEgdG9tdG8gcG/o7XRh6GkuXG4iCisKKyM6IG1lbWxpbmUuYzo4NzAKK21zZ2lkICJUaGUgZmlsZSB3YXMgY3JlYXRlZCBvbiAiCittc2dzdHIgIlP6Ym9yIGJvbCB2eXR2b3Jlbv0gIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyJhbGVibyBib2wgc/pib3IgcG+aa29kZW79LiIKKworIzogbWVtbGluZS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIgorbXNnc3RyICJQb3We7XbhbSBvZGtsYWRhY+0gc/pib3IgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9yaWdpbmFsIGZpbGUgXCIlc1wiIgorbXNnc3RyICJQ9HZvZG79IHP6Ym9yIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkzNAorbXNnaWQgIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIgorbXNnc3RyICJFMzA4OiBWYXJvdmFuaWU6IFD0dm9kbv0gc/pib3IgbW9obCBieZ0gem1lbmVu/SIKKworIzogbWVtbGluZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6IE5lZOEgc2Eg6O10YZ0gYmxvayAxIHogJXMiCisKKyM6IG1lbWxpbmUuYzo5NzkKK21zZ2lkICI/Pz9NQU5ZIExJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P0NI3UJBIE1OT0hPIFJJQURLT1YiCisKKyM6IG1lbWxpbmUuYzo5OTUKK21zZ2lkICI/Pz9MSU5FIENPVU5UIFdST05HIgorbXNnc3RyICI/Pz9DSFlCTt0gUE/IRVQgUklBREtPViIKKworIzogbWVtbGluZS5jOjEwMDIKK21zZ2lkICI/Pz9FTVBUWSBCTE9DSyIKK21zZ3N0ciAiPz8/UFLBWkROWSBCTE9LIgorCisjOiBtZW1saW5lLmM6MTAyOAorbXNnaWQgIj8/P0xJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P0NI3UJBStpDRSBSSUFES1kiCisKKyM6IG1lbWxpbmUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTA6IEJsb2NrIDEgSUQgd3JvbmcgKCVzIG5vdCBhIC5zd3AgZmlsZT8pIgorbXNnc3RyICJFMzEwOiBJRCBibG9rdSAxIGplIGNoeWJu6SAoamUgJXMgb2RrbGFkYWPtbSBz+mJvcm9tPykiCisKKyM6IG1lbWxpbmUuYzoxMDY1Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/Q0jdQkEgQkxPSyIKKworIzogbWVtbGluZS5jOjEwODEKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgYmUgbWVzc2VkIHVwIgorbXNnc3RyICJvZCA/Pz8gcG8gPz8/RU5EIG30nnUgYnmdIHJpYWRreSBwb21pZZphbukiCisKKyM6IG1lbWxpbmUuYzoxMDk3Cittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGhhdmUgYmVlbiBpbnNlcnRlZC9kZWxldGVkIgorbXNnc3RyICJvZCA/Pz8gcG8gPz8/RU5EIG30nnUgYnmdIHZsb55lbukvdnltYXphbukgcmlhZGt5IgorCisjOiBtZW1saW5lLmM6MTExNworbXNnaWQgIj8/P0VORCIKK21zZ3N0ciAiPz8/S09OSUVDIgorCisjOiBtZW1saW5lLmM6MTE0MworbXNnaWQgIkUzMTE6IFJlY292ZXJ5IEludGVycnVwdGVkIgorbXNnc3RyICJFMzExOiBPYm5vdmEgcHJlcnWaZW7hIgorCisjOiBtZW1saW5lLmM6MTE0NQorbXNnaWQgIkUzMTI6IEVycm9ycyBkZXRlY3RlZCB3aGlsZSByZWNvdmVyaW5nOyBsb29rIGZvciBsaW5lcyBzdGFydGluZyB3aXRoID8/PyIKK21zZ3N0ciAiRTMxMjogViBwcmllYmVodSBvYm5vdnkgZG+abG8gayBjaHli4W07IHNrb250cm9sdWp0ZSByaWFka3kgemHo7W5havpjZSBuYSA/Pz8iCisKKyM6IG1lbWxpbmUuYzoxMTQ4Cittc2dpZCAiUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIgorbXNnc3RyICJPYm5vdmEgZG9rb27oZW7hLiBTa29udHJvbHVqdGUsIOhpIGplIHaaZXRrbyB2IHBvcmlhZGt1LiIKKworIzogbWVtbGluZS5jOjExNDkKK21zZ2lkICIiCisiXG4iCisiKFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIG91dCB0aGlzIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoWnbhnnRlIHVsb55lbmllIHRvaG90byBz+mJvcnUgcG9kIGlu/W0gbWVub21cbiIKKworIzogbWVtbGluZS5jOjExNTAKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAiYSBwb21vY291IHByb2dyYW11IGRpZmYgemlzdGl0ZSB6bWVueSBvcHJvdGkgcPR2b2Ru6W11IHP6Ym9ydS4pXG4iCisKKyM6IG1lbWxpbmUuYzoxMTUxCittc2dpZCAiIgorIkRlbGV0ZSB0aGUgLnN3cCBmaWxlIGFmdGVyd2FyZHMuXG4iCisiXG4iCittc2dzdHIgIlBvdG9tIHZ5bWGedGUgb2RrbGFkYWPtIHP6Ym9yLlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMDcKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAiTuFqZGVu6SBvZGtsYWRhY2llIHP6Ym9yeToiCisKKyM6IG1lbWxpbmUuYzoxMzg1Cittc2dpZCAiICAgSW4gY3VycmVudCBkaXJlY3Rvcnk6XG4iCittc2dzdHIgIiAgIFYgYWt0deFsbm9tIGFkcmVz4XJpOlxuIgorCisjOiBtZW1saW5lLmM6MTM4NworbXNnaWQgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorbXNnc3RyICIgICBTbyB6YWRhbv1tIG1lbm9tOlxuIgorCisjOiBtZW1saW5lLmM6MTM5MQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIFYgYWRyZXPhcmkgIgorCisjOiBtZW1saW5lLmM6MTQwOQorbXNnaWQgIiAgICAgIC0tIG5vbmUgLS1cbiIKK21zZ3N0ciAiICAgICAgLS0gnmlhZG5lIC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDgxCittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgICAgICB2bGFzdG7tazogIgorCisjOiBtZW1saW5lLmM6MTQ4MworbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICBk4XR1bSB2eXR2b3JlbmlhOiAiCisKKyM6IG1lbWxpbmUuYzoxNDg3IG1lbWxpbmUuYzozNjgwCittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICBk4XR1bSB2eXR2b3JlbmlhOiAiCisKKyM6IG1lbWxpbmUuYzoxNTAzCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgICAgW29kIFZpbSB2ZXJ6aWUgMy4wXSIKKworIzogbWVtbGluZS5jOjE1MDcKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgIFtuZXZ5cGFk4SBha28gb2RrbGFkYWPtIHP6Ym9yIFZpbV0iCisKKyM6IG1lbWxpbmUuYzoxNTExCittc2dpZCAiICAgICAgICAgZmlsZSBuYW1lOiAiCittc2dzdHIgIiAgICAgICAgIG7hem92IHP6Ym9ydTogIgorCisjOiBtZW1saW5lLmM6MTUyMworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICAgbW9kaWZpZWQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICBk4XR1bSB6bWVueTogIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIllFUyIKK21zZ3N0ciAiwU5PIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIm5vIgorbXNnc3RyICJuaWUiCisKKyM6IG1lbWxpbmUuYzoxNTI4Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIHVzZXIgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgdZ7tdmF0Zb5za+kgbWVubzogIgorCisjOiBtZW1saW5lLmM6MTUzNQorbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgICAgICAgICBu4XpvdiBwb+jtdGHoYTogIgorCisjOiBtZW1saW5lLmM6MTUzNworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIG7hem92IHBv6O10YehhOiAiCisKKyM6IG1lbWxpbmUuYzoxNTQzCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICBJRCBwcm9jZXN1IDogIgorCisjOiBtZW1saW5lLmM6MTU0OQorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAoc3ThbGUgYWt07XZueSkiCisKKyM6IG1lbWxpbmUuYzoxNTYxCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbbmVwb3WeaXRlvm7pIHMgdG91dG8gdmVyemlvdSBWaW1dIgorCisjOiBtZW1saW5lLmM6MTU2NAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSBvbiB0aGlzIGNvbXB1dGVyXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFtuZXBvdZ5pdGVsbukgbmEgdG9tdG8gcG/o7XRh6GldIgorCisjOiBtZW1saW5lLmM6MTU2OQorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iCittc2dzdHIgIiAgICAgICAgIFtuZWThIHNhIHByZejtdGGdXSIKKworIzogbWVtbGluZS5jOjE1NzMKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIG9wZW5lZF0iCittc2dzdHIgIiAgICAgICAgIFtuZWThIHNhIG90dm9yaZ1dIgorCisjOiBtZW1saW5lLmM6MTc2MworbXNnaWQgIkUzMTM6IENhbm5vdCBwcmVzZXJ2ZSwgdGhlcmUgaXMgbm8gc3dhcCBmaWxlIgorbXNnc3RyICJFMzEzOiBOZWThIHNhIHphY2hvdmGdIC0gb2RrbGFkYWPtIHP6Ym9yIG5lZXhpc3R1amUuIgorCisjOiBtZW1saW5lLmM6MTgxNgorbXNnaWQgIkZpbGUgcHJlc2VydmVkIgorbXNnc3RyICJT+mJvciB6YWNob3Zhbv0iCisKKyM6IG1lbWxpbmUuYzoxODE4Cittc2dpZCAiRTMxNDogUHJlc2VydmUgZmFpbGVkIgorbXNnc3RyICJFMzE0OiBVY2hvdmFuaWUgc2EgbmVwb2RhcmlsbyIKKworIzogbWVtbGluZS5jOjE4ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNTogbWxfZ2V0OiBpbnZhbGlkIGxudW06ICVsZCIKK21zZ3N0ciAiRTMxNTogbWxfZ2V0OiBjaHlibukg6O1zbG8gcmlhZGt1OiAlbGQiCisKKyM6IG1lbWxpbmUuYzoxOTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTY6IG1sX2dldDogY2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMTY6IG1sX2dldDogbmVk4SBzYSBu4WpznSByaWFkb2sgJWxkIgorCisjOiBtZW1saW5lLmM6MjMwMworbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAiRTMxNzogY2h5Ym7pIGlkIHVrYXpvdmF0Zb5hIG5hIGJsb2sgMyIKKworIzogbWVtbGluZS5jOjIzODMKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCBieSBtYWxvIG1hnSBob2Rub3R1IDMiCisKKyM6IG1lbWxpbmUuYzoyNDQ1Cittc2dpZCAiRTMxODogVXBkYXRlZCB0b28gbWFueSBibG9ja3M/IgorbXNnc3RyICJFMzE4OiBBa3R1YWxpem92YW79Y2ggcHLtbGmaIHZlvmEgYmxva292PyIKKworIzogbWVtbGluZS5jOjI2MDIKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDQiCittc2dzdHIgIkUzMTc6IGNoeWJu6SBpZCB1a2F6b3ZhdGW+YSBuYSBibG9rIDQiCisKKyM6IG1lbWxpbmUuYzoyNjI5Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAidnltYXphbv0gYmxvayAxPyIKKworIzogbWVtbGluZS5jOjI4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6IE5lZOEgc2EgbuFqc50gcmlhZG9rICVsZCIKKworIzogbWVtbGluZS5jOjMwNzIKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIgorbXNnc3RyICJFMzE3OiBjaHlibukgaWQgdWthem92YXRlvmEgbmEgYmxvayIKKworIzogbWVtbGluZS5jOjMwODgKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgInBlX2xpbmVfY291bnQgbeEgbnVsb3b6IGhvZG5vdHUiCisKKyM6IG1lbWxpbmUuYzozMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjI6IGxpbmUgbnVtYmVyIG91dCBvZiByYW5nZTogJWxkIHBhc3QgdGhlIGVuZCIKK21zZ3N0ciAiRTMyMjog6O1zbG8gcmlhZGt1IGplIG1pbW8gcm96c2FoOiAlbGQgKHphIGtvbmNvbSkiCisKKyM6IG1lbWxpbmUuYzozMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjM6IGxpbmUgY291bnQgd3JvbmcgaW4gYmxvY2sgJWxkIgorbXNnc3RyICJFMzIzOiBjaHlibv0gcG/oZXQgcmlhZGtvdiB2IGJsb2t1ICVsZCIKKworIzogbWVtbGluZS5jOjMxNzAKK21zZ2lkICJTdGFjayBzaXplIGluY3JlYXNlcyIKK21zZ3N0ciAiTuFyYXN0IHZlvmtvc3RpIHrhc29ibu1rdSIKKworIzogbWVtbGluZS5jOjMyMTYKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDIiCittc2dzdHIgIkUzMTc6IGNoeWJu/SBpZCB1a2F6b3ZhdGW+YSBuYSBibG9rIDIiCisKKyM6IG1lbWxpbmUuYzozNjcwCittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiBQT1pPUiIKKworIzogbWVtbGluZS5jOjM2NzEKK21zZ2lkICIiCisiXG4iCisiRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgXCIiCittc2dzdHIgIiIKKyJcbiIKKyJO4WpkZW79IG9ka2xhZGFj7SBz+mJvciBzIG1lbm9tIFwiIgorCisjOiBtZW1saW5lLmM6MzY3NQorbXNnaWQgIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIKK21zZ3N0ciAiUHJpIG90duFyYW7tIHP6Ym9ydVwiIgorCisjOiBtZW1saW5lLmM6MzY4NAorbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICAgICBOT1aKzSBha28gb2RrbGFkYWPtIHP6Ym9yIVxuIgorCisjLiBTb21lIG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSBsb25nIHRvIGFsbG93IHRyYW5zbGF0aW9uIHRvCisjLiAqIG90aGVyIGxhbmd1YWdlcy4KKyM6IG1lbWxpbmUuYzozNjg4Cittc2dpZCAiIgorIlxuIgorIigxKSBBbm90aGVyIHByb2dyYW0gbWF5IGJlIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS5cbiIKKyIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgYmUgY2FyZWZ1bCBub3QgdG8gZW5kIHVwIHdpdGggdHdvXG4iCisiICAgIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZmlsZSB3aGVuIG1ha2luZyBjaGFuZ2VzLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDEpIFP6Ym9yIG30nmUgYnmdIHVwcmF2b3Zhbv0gaW79bSBwcm9ncmFtb20uXG4iCisiICAgIEFrIGplIHRvbXUgdGFrLCBwb3RvbSBzaSBkYWp0ZSBwb3pvciwgYWJ5IHN0ZSBwbyB1bG+eZW7tIHptaWVuXG4iCisiICAgIG5lbWFsaSBkdmUgcvR6bmUgdmVyemllIHRvaG8gaXN06WhvIHP6Ym9ydS5cbiIKKworIzogbWVtbGluZS5jOjM2ODkKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgVWtvbuhpdGUgcHJvZ3JhbSwgYWxlYm8gb3BhdHJubmUgcG9rcmHodWp0ZSB2IPpwcmF24WNoLlxuIgorCisjOiBtZW1saW5lLmM6MzY5MAorbXNnaWQgIiIKKyJcbiIKKyIoMikgQW4gZWRpdCBzZXNzaW9uIGZvciB0aGlzIGZpbGUgY3Jhc2hlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigyKSDacHJhdmEgdG9ob3RvIHP6Ym9ydSBib2xhIHByZXJ1mmVu4SBuZW/oYWvhdmFu/W0gdWtvbuhlbu1tIHByb2dyYW11LlxuIgorCisjOiBtZW1saW5lLmM6MzY5MQorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIEFrIGplIHRvbXUgdGFrLCBwb3RvbSBwb3WeaXRlIFwiOnJlY292ZXJcIiBhbGVibyBcInZpbSAtciAiCisKKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgcHJlIG9ibm92ZW5pZSB6bWllbiAodml6IFwiOmhlbHAgcmVjb3ZlcnkpXCIuXG4iCisKKyM6IG1lbWxpbmUuYzozNjk0Cittc2dpZCAiICAgIElmIHlvdSBkaWQgdGhpcyBhbHJlYWR5LCBkZWxldGUgdGhlIHN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiICAgIFBva2lhviBzdGUgdGFrIHWeIHVyb2JpbGksIHRhayB2eW1hnnRlIG9ka2xhZGFj7SBz+mJvciBcIiIKKworIzogbWVtbGluZS5jOjM2OTYKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgYSB04XRvIHNwcuF2YSBzYSB1niBuZWJ1ZGUgb2JqYXZvdmGdLlxuIgorCisjOiBtZW1saW5lLmM6MzcxMCBtZW1saW5lLmM6MzcxNAorbXNnaWQgIlN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiT2RrbGFkYWPtIHP6Ym9yIFwiIgorCisjOiBtZW1saW5lLmM6MzcxMSBtZW1saW5lLmM6MzcxNworbXNnaWQgIlwiIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiXCIgdZ4gZXhpc3R1amUhIgorCisjOiBtZW1saW5lLmM6MzcyMAorbXNnaWQgIlZJTSAtIEFUVEVOVElPTiIKK21zZ3N0ciAiVklNIC0gUE9aT1IiCisKKyM6IG1lbWxpbmUuYzozNzIyCittc2dpZCAiU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiT2RrbGFkYWPtIHP6Ym9yIHWeIGV4aXN0dWplISIKKworIzogbWVtbGluZS5jOjM3MjYKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdCIKK21zZ3N0ciAiIgorIiZPdHZvcmmdIGliYSBwcmUg6O10YW5pZVxuIgorIiZQb2tyYehvdmGdIHYg+nByYXbhY2hcbiIKKyJPJmJub3ZpnSBz+mJvclxuIgorIiZLb25pZWMiCisKKyM6IG1lbWxpbmUuYzozNzI4Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisiJk90dm9yaZ0gaWJhIHByZSDo7XRhbmllXG4iCisiJlBva3Jh6G92YXQgdiD6cHJhduFjaFxuIgorIk8mYm5vdmmdIHP6Ym9yXG4iCisiJktvbmllY1xuIgorIiZabWF6YZ0iCisKKyM6IG1lbWxpbmUuYzozNzgxCittc2dpZCAiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIKK21zZ3N0ciAiRTMyNjogUHLtbGmaIG1ub2hvIG9ka2xhZGFj7WNoIHP6Ym9yb3YiCisKKyM6IG1lbnUuYzo2NAorbXNnaWQgIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51IgorbXNnc3RyICJFMzI3OiDIYXOdIGNlc3R5IGsgcHJlZG1ldHUgcG9udWt5IG5pZSBqZSBwb2Rwb251a291IgorCisjOiBtZW51LmM6NjUKK21zZ2lkICJFMzI4OiBNZW51IG9ubHkgZXhpc3RzIGluIGFub3RoZXIgbW9kZSIKK21zZ3N0ciAiRTMyODogUG9udWthIGV4aXN0dWplIGliYSB2IGlub20gbfNkZSIKKworIzogbWVudS5jOjY2Cittc2dpZCAiRTMyOTogTm8gbWVudSBvZiB0aGF0IG5hbWUiCittc2dzdHIgIkUzMjk6IFBvbnVrYSB0b2hvdG8gbWVuYSBuZWV4aXN0dWplIgorCisjOiBtZW51LmM6NTA5Cittc2dpZCAiRTMzMDogTWVudSBwYXRoIG11c3Qgbm90IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzMDogQ2VzdGEgcG9udWt5IG5lc21pZSB2aWVznSBkbyBwb2Rwb251a3kiCisKKyM6IG1lbnUuYzo1NDgKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTogUG9sb55reSBwb251a3kgc2EgbmVkavogcHJpZOF2YZ0gcHJpYW1vIG5hIGxpmnR1IgorCisjOiBtZW51LmM6NTU0Cittc2dpZCAiRTMzMjogU2VwYXJhdG9yIGNhbm5vdCBiZSBwYXJ0IG9mIGEgbWVudSBwYXRoIgorbXNnc3RyICJFMzMyOiBPZGRlvm92YeggbmVzbWllIGJ5nSDoYXOdb3UgY2VzdHkgcG9udWt5IgorCisjLiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgbWVudSwgYW5kIHdlIGxpc3QgdGhlIG1hcHBpbmdzCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1lbnUuYzoxMDcwCittc2dpZCAiIgorIlxuIgorIi0tLSBNZW51cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gUG9udWt5IC0tLSIKKworIzogbWVudS5jOjE5ODcKK21zZ2lkICJUZWFyIG9mZiB0aGlzIG1lbnUiCittc2dzdHIgIk9kdHJobvqdIHR1dG8gcG9udWt1IgorCisjOiBtZW51LmM6MjA1MgorbXNnaWQgIkUzMzM6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBtZW51IGl0ZW0iCittc2dzdHIgIkUzMzM6IENlc3RhIHBvbnVreSBtdXPtIHZpZXOdIGsgcG9sb55rZSBwb251a3kiCisKKyM6IG1lbnUuYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzQ6IE1lbnUgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTMzNDogVnpvciBuZW7hamRlbv06ICVzIgorCisjOiBtZW51LmM6MjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzM1OiBNZW51IG5vdCBkZWZpbmVkIGZvciAlcyBtb2RlIgorbXNnc3RyICJFMzM1OiBWICVzIG3zZGUgbmllIGplIHBvbnVrYSBkZWZpbm92YW7hIgorCisjOiBtZW51LmM6MjE3OQorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogQ2VzdGEgcG9udWt5IG11c+0gdmllc50gZG8gcG9kcG9udWt5IgorCisjOiBtZW51LmM6MjIwMAorbXNnaWQgIkUzMzc6IE1lbnUgbm90IGZvdW5kIC0gY2hlY2sgbWVudSBuYW1lcyIKK21zZ3N0ciAiRTMzNzogUG9udWthIG5lbuFqZGVu4SAtIHNrb250cm9sdWp0ZSBu4Xp2eSBwb276ayIKKworIzogbWVzc2FnZS5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlY3RlZCB3aGlsZSBwcm9jZXNzaW5nICVzOiIKK21zZ3N0ciAiQ2h5YmEgcHJpIHNwcmFjb3Zhbu0gJXM6IgorCisjOiBtZXNzYWdlLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJTRsZDoiCittc2dzdHIgInJpYWRvayAlNGxkOiIKKworIzogbWVzc2FnZS5jOjUyNgorbXNnaWQgIltzdHJpbmcgdG9vIGxvbmddIgorbXNnc3RyICJbcHLtbGmaIGRsaP0gcmWdYXplY10iCisKKyM6IG1lc3NhZ2UuYzo2NzIKK21zZ2lkICJNZXNzYWdlcyBtYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiIKK21zZ3N0ciAiU3By4XZjYSBzcHLhdjogTWFydGluIExhY2tvIDxsYWNrb0Bob3N0LnNrPiIKKworIzogbWVzc2FnZS5jOjg4NQorbXNnaWQgIkludGVycnVwdDogIgorbXNnc3RyICJQcmVydZplbmllOiAiCisKKyM6IG1lc3NhZ2UuYzo4ODgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIlBva3Jh6G92YW5pZSBzdGxh6GVu7W0gRU5URVIiCisKKyM6IG1lc3NhZ2UuYzo4OTAKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICJQcmUgcG9rcmHob3ZhbmllIHN0bGHodGUgRU5URVIgYWxlYm8gemFkYWp0ZSBwcu1rYXoiCisKKyM6IG1lc3NhZ2UuYzoxOTYxCittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0gUG9rcmHob3ZhbmllIC0tIgorCisjOiBtZXNzYWdlLmM6MTk2NAorbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiByaWFkb2ssIE1FRFpFUk7NSy9iOiBzdHLhbmthLCBkL3U6IDAuNSBzdHLhbmt5LCBxOiBrb25pZWMpIgorCisjOiBtZXNzYWdlLmM6MTk2NQorbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQ6IHJpYWRvaywgTUVEWkVSTs1LOiBzdHLhbmthLCBkOiAwLjUgc3Ry4W5reSwgcToga29uaWVjKSIKKworIzogbWVzc2FnZS5jOjI0NDEgbWVzc2FnZS5jOjI0NTYKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAiT3ThemthIgorCisjOiBtZXNzYWdlLmM6MjQ0MworbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vIgorbXNnc3RyICIiCisiwW4mb1xuIgorIiZOaWUiCisKKyM6IG1lc3NhZ2UuYzoyNDU4Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiwW4mb1xuIgorIiZOaWVcbiIKKyImWnJ1mmmdIgorCisjOiBtZXNzYWdlLmM6MjQ3NgorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIsFuJm9cbiIKKyImTmllXG4iCisiJlVsb55pnSB2mmV0a29cbiIKKyJaYWhvZGmdICZ2mmV0a29cbiIKKyImWnJ1mmmdIgorCisjOiBtZXNzYWdlLmM6MjUxNworbXNnaWQgIlNhdmUgRmlsZSBkaWFsb2ciCittc2dzdHIgIkRpYWzzZyBwcmUgdWtsYWRhbmllIHP6Ym9yb3YiCisKKyM6IG1lc3NhZ2UuYzoyNTE5Cittc2dpZCAiT3BlbiBGaWxlIGRpYWxvZyIKK21zZ3N0ciAiRGlhbPNnIHByZSBvdHbhcmFuaWUgc/pib3JvdiIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzoyNTkwCittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIkUzMzg6ILx1dHVqZW0sIGFsZSBrb256b2xvduEgdmVyemlhIG5lcG9kcG9ydWplIHByZWhsaWFkYeggc/pib3JvdiIKKworIzogbWlzYzEuYzoyNDU3Cittc2dpZCAiVzEwOiBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiCittc2dzdHIgIlcxMDogVmFyb3ZhbmllOiBtZW7tbSBz+mJvciBpYmEgcHJlIOjtdGFuaWUiCisKKyM6IG1pc2MxLmM6MjY4NgorbXNnaWQgIjEgbW9yZSBsaW5lIgorbXNnc3RyICJwb+hldCBub3b9Y2ggcmlhZGtvdjogMSIKKworIzogbWlzYzEuYzoyNjg4Cittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgInBv6GV0IHZ5bWF6YW79Y2ggcmlhZGtvdjogMSIKKworIzogbWlzYzEuYzoyNjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgorbXNnc3RyICJwb+hldCBub3b9Y2ggcmlhZGtvdjogJWxkIgorCisjOiBtaXNjMS5jOjI2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGZld2VyIGxpbmVzIgorbXNnc3RyICJwb+hldCB2eW1hemFu/WNoIHJpYWRrb3Y6ICVsZCIKKworIzogbWlzYzEuYzoyNjk4Cittc2dpZCAiIChJbnRlcnJ1cHRlZCkiCittc2dzdHIgIiAoUHJlcnWaZW7pKSIKKworIzogbWlzYzEuYzo2MzE2Cittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTogemFjaG924XZhbSBz+mJvcnkuLi5cbiIKKworIy4gY2xvc2UgYWxsIG1lbWZpbGVzLCB3aXRob3V0IGRlbGV0aW5nCisjOiBtaXNjMS5jOjYzMjYKK21zZ2lkICJWaW06IEZpbmlzaGVkLlxuIgorbXNnc3RyICJWaW06IHVrb27oZW79XG4iCisKKyM6IG1pc2MyLmM6NjYxIG1pc2MyLmM6Njc3Cittc2dpZCAiRVJST1I6ICIKK21zZ3N0ciAiQ0hZQkE6ICIKKworIzogbWlzYzIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJbYmFqdG92XSBjZWxrb20gdXZvbG5lbuktYWxva292YW7pICVsdS0lbHUsIHZ5dZ5pdOkgJWx1LCBtYXhpbeFsbmUgdnl1nml0aWUgJSIKKyJsdVxuIgorCisjOiBtaXNjMi5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiW2NhbGxzXSB0b3RhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWwgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCittc2dzdHIgIiIKKyJbdm9sYW5pZV0gY2Vsa29tIHJlL21hbGxvYygpOiAlbHUsIGNlbGtvbSBmcmVlKCkgJWx1XG4iCisiXG4iCisKKyM6IG1pc2MyLmM6NzM4Cittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDogUmlhZG9rIHNhIHN04XZhIHBy7WxpmiBkbGj9bSIKKworIzogbWlzYzIuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MTogSW50ZXJuYWwgZXJyb3I6IGxhbGxvYyglbGQsICkiCittc2dzdHIgIkUzNDE6IFZu+nRvcm7hIGNoeWJhOiBsYWxsb2MoJWxkLCApIgorCisjOiBtaXNjMi5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQyOiBPdXQgb2YgbWVtb3J5ISAgKGFsbG9jYXRpbmcgJWx1IGJ5dGVzKSIKK21zZ3N0ciAiRTM0MjogTmVkb3N0YXRvayBwYW3kdGUhIChhbG9rdWplbSAlbHUgYnl0b3YpIgorCisjOiBtaXNjMi5jOjI1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FsbGluZyBzaGVsbCB0byBleGVjdXRlOiBcIiVzXCIiCittc2dzdHIgIlZvbOFtIHNoZWxsIG5hIHNwdXN0ZW5pZTogXCIlc1wiIgorCisjOiBtaXNjMi5jOjI3NDAgbWlzYzIuYzo1MjI1IG9wdGlvbi5jOjQ2MzYKK21zZ2lkICJNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJDaP1iYSBkdm9qYm9ka2EiCisKKyM6IG1pc2MyLmM6Mjc0MiBtaXNjMi5jOjI3NjkKK21zZ2lkICJJbGxlZ2FsIG1vZGUiCittc2dzdHIgIk5lcHLtc3R1cG79IG3zZCIKKworIzogbWlzYzIuYzoyODA4Cittc2dpZCAiSWxsZWdhbCBtb3VzZXNoYXBlIgorbXNnc3RyICJDaHlibv0gdHZhciBteZppIgorCisjOiBtaXNjMi5jOjI4NDggbWlzYzIuYzo1MjQ1Cittc2dpZCAiZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgIm/oYWvhdmFu4SDo7XNsaWNhIgorCisjOiBtaXNjMi5jOjI4NTMKK21zZ2lkICJJbGxlZ2FsIHBlcmNlbnRhZ2UiCittc2dzdHIgIk5lcHLtc3R1cG7pIHByZWNlbnRvIgorCisjOiBtaXNjMi5jOjMxNTcKK21zZ2lkICJFbnRlciBlbmNyeXB0aW9uIGtleTogIgorbXNnc3RyICJaYWRhanRlIJppZnJvdmFj7SBrvvroOiAiCisKKyM6IG1pc2MyLmM6MzE1OAorbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIlZsb550ZSBrvvroIHpub3ZhOiAiCisKKyM6IG1pc2MyLmM6MzE2OAorbXNnaWQgIktleXMgZG9uJ3QgbWF0Y2ghIgorbXNnc3RyICJLvvroIG5pZSBqZSBzcHLhdm55ISIKKworIzogbWlzYzIuYzozNzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICIiCisiRTM0MzogQ2h5Ym7hIGNlc3RhOiAnKipb6O1zbG9dIG11c+0gYnmdIGJ17yBuYSBrb25jaSBjZXN0eSwgYWxlYm8gbXVz7SBieZ1cbiIKKyJuYXNsZWRvdmFu6SAnJXMuIFZpeiA6aGVscCBwYXRoLiIKKworIzogbWlzYzIuYzo0OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IEFkcmVz4XIgXCIlc1wiIHNhIG5lZOEgdiBjZHBhdGggbuFqc50iCisKKyM6IG1pc2MyLmM6NDk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ1OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkUzNDU6IFP6Ym9yIFwiJXNcIiBzYSBuZXBvZGFyaWxvIG7hanOdIgorCisjOiBtaXNjMi5jOjQ5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NjogTm8gbW9yZSBkaXJlY3RvcnkgXCIlc1wiIGZvdW5kIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NjogjmlhZG55IO9hbJrtIGFkcmVz4XIgXCIlc1wiIG5lYm9sIHYgY2RwYXRoIG7hamRlbv0iCisKKyM6IG1pc2MyLmM6NDk5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ3OiBObyBtb3JlIGZpbGUgXCIlc1wiIGZvdW5kIGluIHBhdGgiCittc2dzdHIgIkUzNDc6II5pYWRueSDvYWya7SBz+mJvciBcIiVzXCIgbmVib2wgdiBjZXN0ZSBu4WpkZW79IgorCisjOiBtaXNjMi5jOjUyMzcKK21zZ2lkICJJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAiTmVwcu1zdHVwbv0ga29tcG9uZW50IgorCisjOiBub3JtYWwuYzoyODQzCittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAiVmFyb3ZhbmllOiB0ZXJtaW7hbCBuZXBvZHBvcnVqZSB6dv1yYXryb3ZhbmllIgorCisjOiBub3JtYWwuYzozMDM4Cittc2dpZCAiRTM0ODogTm8gc3RyaW5nIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0ODogUG9kIGt1cnpvcm9tIG5pZSBqZSCeaWFkbnkgcmWdYXplYyIKKworIzogbm9ybWFsLmM6MzA0MAorbXNnaWQgIkUzNDk6IE5vIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ5OiBQb2Qga3Vyem9yb20gbmllIGplIJ5pYWRueSBpZGVudGlmaWvhdG9yIgorCisjOiBub3JtYWwuYzo0MjExCittc2dpZCAiRTM1MjogQ2Fubm90IGVyYXNlIGZvbGRzIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTI6IFBvbW9jb3UgJ2ZvbGRtZXRob2QnIHNhIG5lZOEgdnltYXphnSB64Wh5YiIKKworIzogb3BzLmM6MjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkIDEgdGltZSIKK21zZ3N0ciAicG/oZXQgcmlhZGtvdiBwb3N1bnV0/WNoIG5hcmF6IHBvbW9jb3UgJXMgOiAxIgorCisjOiBvcHMuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgJWQgdGltZXMiCittc2dzdHIgInBv6GV0IHJpYWRrb3YgcG9zdW51dP1jaCAlcyBrcuF0IHBvbW9jb3UgJWQgcyA6IDEiCisKKyM6IG9wcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAxIHRpbWUiCittc2dzdHIgIiVsZCByaWFka292IHBvc3VudXT9Y2ggbmFyYXogcG9tb2NvdSAlcyIKKworIzogb3BzLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIlbGQgcmlhZGtvdiBwb3N1bnV0/WNoIHBvbW9jb3UgJXMgJWQga3LhdCIKKworIzogb3BzLmM6NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB0byBpbmRlbnQuLi4gIgorbXNnc3RyICJwb+hldCByaWFka292IHByZSBvZHNhZGVuaWU6ICVsZCIKKworIzogb3BzLmM6NzAxCittc2dpZCAiMSBsaW5lIGluZGVudGVkICIKK21zZ3N0ciAicG/oZXQgcmlhZGtvdiBwcmUgb2RzYWRlbmllOiAxICIKKworIzogb3BzLmM6NzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBpbmRlbnRlZCAiCittc2dzdHIgInBv6GV0IG9kc2FkZW79Y2ggcmlhZGtvdjogJWxkIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogb3BzLmM6MTU0NgorbXNnaWQgImNhbm5vdCB5YW5rOyBkZWxldGUgYW55d2F5IgorbXNnc3RyICJuZWThIHNhIGtvcO1yb3ZhnTsgbmFwcmllayB0b211IHZ5bWF6YW7pIgorCisjOiBvcHMuYzoyMDgwCittc2dpZCAiMSBsaW5lIGNoYW5nZWQiCittc2dzdHIgInBv6GV0IHptZW5lbv1jaCByaWFka292OiAxIgorCisjOiBvcHMuYzoyMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBjaGFuZ2VkIgorbXNnc3RyICJwb+hldCB6bWVuZW79Y2ggcmlhZGtvdjogJWxkIgorCisjOiBvcHMuYzoyNDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImZyZWVpbmcgJWxkIGxpbmVzIgorbXNnc3RyICJwb+hldCB1dm9s8m92YW79Y2ggcmlhZGtvdjogJWxkIgorCisjOiBvcHMuYzoyNzIwCittc2dpZCAiMSBsaW5lIHlhbmtlZCIKK21zZ3N0ciAicG/oZXQgc2tvcO1yb3Zhbv1jaCByaWFka292OiAxIgorCisjOiBvcHMuYzoyNzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgInBv6GV0IHNrb3Dtcm92YW79Y2ggcmlhZGtvdjogJWxkIgorCisjOiBvcHMuYzoyOTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTM6IE5vdGhpbmcgaW4gcmVnaXN0ZXIgJXMiCittc2dzdHIgIkUzNTM6IFJlZ2lzdGVyICVzIGplIHBy4XpkbnkiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogb3BzLmM6MzU1MworbXNnaWQgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBSZWdpc3RyZSAtLS0iCisKKyM6IG9wcy5jOjQ3MTEKK21zZ2lkICJJbGxlZ2FsIHJlZ2lzdGVyIG5hbWUiCittc2dzdHIgIk5lcHLtc3R1cG79IG7hem92IHJlZ2lzdHJ1IgorCisjOiBvcHMuYzo0Nzk3Cittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBSZWdpc3RyZTpcbiIKKworIzogb3BzLmM6NDgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHJlZ2lzdGVyIHR5cGUgJWQiCittc2dzdHIgIiVkIG5pZSBqZSB6buFt/W0gdHlwb20gcmVnaXN0cnUiCisKKyM6IG9wcy5jOjUyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NDogSW52YWxpZCByZWdpc3RlciBuYW1lOiAnJXMnIgorbXNnc3RyICJFMzU0OiAnJXMnIG5pZSBqZSBwcu1zdHVwbukgbWVubyByZWdpc3RydSIKKworIzogb3BzLmM6NTU2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgQ29sczsgIgorbXNnc3RyICIlbGQgQnVuaWVrOyAiCisKKyM6IG9wcy5jOjU1NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VsZWN0ZWQgJXMlbGQgb2YgJWxkIExpbmVzOyAlbGQgb2YgJWxkIFdvcmRzOyAlbGQgb2YgJWxkIEJ5dGVzIgorbXNnc3RyICJWeWJyYW79Y2ggJXMlbGQgeiAlbGQgcmlhZGtvdjsgJWxkIHpvICVsZCBzbG92OyAlbGQgeiAlbGQgQnl0b3YiCisKKyM6IG9wcy5jOjU1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQnl0ZSAlbGQgb2YgJWxkIgorbXNnc3RyICJCdW5rYSAlcyB6ICVzOyBSaWFkb2sgJWxkIHogJWxkOyBTbG92byAlbGQgeiAlbGQ7IEJ5dGUgJWxkIHogJWxkIgorCisjOiBvcHMuYzo1NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCBwcmUgQk9NKSIKKworIzogb3B0aW9uLmM6MTk4OQorbXNnaWQgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIKK21zZ3N0ciAiz2FrdWplbSB6YSBwb3WeaXRpZSBWaW0iCisKKyM6IG9wdGlvbi5jOjMxNzUKK21zZ2lkICJPcHRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiVm++YmEgbmllIGplIHBvZHBvcm92YW7hIgorCisjOiBvcHRpb24uYzozMjAwCittc2dpZCAiTm90IGFsbG93ZWQgaW4gYSBtb2RlbGluZSIKK21zZ3N0ciAiTmllIGplIHYgbW9kZWxpbmUgcG92b2xlbukiCisKKyM6IG9wdGlvbi5jOjMyNTYKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0T3N0YXRu6SBuYXN0YXZlbmllIHogIgorCisjOiBvcHRpb24uYzozMzk1Cittc2dpZCAiTnVtYmVyIHJlcXVpcmVkIGFmdGVyID0iCittc2dzdHIgIlBvID0gamUgdnmeYWRvdmFu6SDo7XNsbyIKKworIzogb3B0aW9uLmM6MzcxNCBvcHRpb24uYzo0MzIyCittc2dpZCAiTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIk5lbuFqZGVu/SB2IHRlcm1jYXB1IgorCisjOiBvcHRpb24uYzozNzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgY2hhcmFjdGVyIDwlcz4iCittc2dzdHIgIk5lcHLtc3R1cG79IHpuYWsgPCVzPiIKKworIzogb3B0aW9uLmM6NDMwNyBvcHRpb24uYzo1NTcwCittc2dpZCAiTm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiVG90byBuaWUgamUgbmEgdG9tdG8gbWllc3RlIHBvdm9sZW7pIgorCisjOiBvcHRpb24uYzo0MzE0Cittc2dpZCAiQ2Fubm90IHNldCAndGVybScgdG8gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJWb75iYSAndGVybScgbmVt9J5lIGJ5nSBwcuF6ZG5hIgorCisjOiBvcHRpb24uYzo0MzE3Cittc2dpZCAiQ2Fubm90IGNoYW5nZSB0ZXJtIGluIEdVSSIKK21zZ3N0ciAiViBHVUkgc2EgbmVk4SBtZW5pnSB0ZXJtIgorCisjOiBvcHRpb24uYzo0MzE5Cittc2dpZCAiVXNlIFwiOmd1aVwiIHRvIHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIlBvdZ5pdGUgXCJndWlcIiBwcmUgc3B1c3RlbmllIEdVSSIKKworIzogb3B0aW9uLmM6NDM0MAorbXNnaWQgIidiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiCittc2dzdHIgInZvvmJ5ICdiYWNrdXBleHQnIGEgJ3BhdGNobW9kZScgbWFq+iByb3ZuYWv6IGhvZG5vdHUiCisKKyM6IG9wdGlvbi5jOjQ2MzgKK21zZ2lkICJaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIlJlnWF6ZWMgcyBudWxvdm91IGTlnmtvdSIKKworIzogb3B0aW9uLmM6NDcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICJQbyA8JXM+IGNo/WJhIOjtc2xvIgorCisjOiBvcHRpb24uYzo0NzIwCittc2dpZCAiTWlzc2luZyBjb21tYSIKK21zZ3N0ciAiQ2j9YmEg6GlhcmthIgorCisjOiBvcHRpb24uYzo0NzI3Cittc2dpZCAiTXVzdCBzcGVjaWZ5IGEgJyB2YWx1ZSIKK21zZ3N0ciAiSmUgbnV0bukgemFkYZ0gaG9kbm90dSAnIgorCisjOiBvcHRpb24uYzo0NzY3Cittc2dpZCAiY29udGFpbnMgdW5wcmludGFibGUgY2hhcmFjdGVyIgorbXNnc3RyICJvYnNhaHVqZSBuZXRsYehpdGW+bukgem5ha3kiCisKKyM6IG9wdGlvbi5jOjQ4MDAKK21zZ2lkICJJbnZhbGlkIGZvbnQocykiCittc2dzdHIgIkNoeWJu6SBw7XNtYSIKKworIzogb3B0aW9uLmM6NDgwNworbXNnaWQgImNhbid0IHNlbGVjdCBmb250c2V0IgorbXNnc3RyICJuZWThIHNhIHZ5YnJhnSBzYWRhIHDtc2llbSIKKworIzogb3B0aW9uLmM6NDgwOQorbXNnaWQgIkludmFsaWQgZm9udHNldCIKK21zZ3N0ciAiQ2h5Ym7hIHNhZGEgcO1zaWVtIgorCisjOiBvcHRpb24uYzo0ODE2Cittc2dpZCAiY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAibmVk4SBzYSB2eWJyYZ0gmmlyb2v9IGZvbnQiCisKKyM6IG9wdGlvbi5jOjQ4MTgKK21zZ2lkICJJbnZhbGlkIHdpZGUgZm9udCIKK21zZ3N0ciAiQ2h5Ym7pIJppcm9r6SBw7XNtbyIKKworIzogb3B0aW9uLmM6NTA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciA8JWM+IgorbXNnc3RyICJOZXBy7XN0dXBu/SB6bmFrIHBvIDwlYz4iCisKKyM6IG9wdGlvbi5jOjUxNzEKK21zZ2lkICJjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAiamUgbnV0buEg6GlhcmthIgorCisjOiBvcHRpb24uYzo1MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIidjb21tZW50c3RyaW5nJyBtdXN0IGJlIGVtcHR5IG9yIGNvbnRhaW4gJXMiCittc2dzdHIgIidrb21lbnThcicgbXVz7SBieZ0gcHLhemRueSBhbGVibyBtdXPtIG9ic2Fob3ZhnSAlcyIKKworIzogb3B0aW9uLmM6NTIyNgorbXNnaWQgIk5vIG1vdXNlIHN1cHBvcnQiCittc2dzdHIgIkJleiBwb2Rwb3J5IG15mmkiCisKKyM6IG9wdGlvbi5jOjU0NzIKK21zZ2lkICJVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJOZXV6YXR2b3Jlbukgem9za3VwZW5pZSB2/XJhem92IgorCisjOiBvcHRpb24uYzo1NDc2Cittc2dpZCAidG9vIG1hbnkgaXRlbXMiCittc2dzdHIgInBy7WxpmiBtbm9obyBwb2xvnmllayIKKworIzogb3B0aW9uLmM6NTQ3OAorbXNnaWQgInVuYmFsYW5jZWQgZ3JvdXBzIgorbXNnc3RyICJuZXZ5duGeZW7pIHNrdXBpbnkiCisKKyM6IG9wdGlvbi5jOjU2OTMKK21zZ2lkICJBIHByZXZpZXcgd2luZG93IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJPa25vIG7haL5hZHUgdZ4gZXhpc3R1amUiCisKKyM6IG9wdGlvbi5jOjU5NTQgb3B0aW9uLmM6NTk4MworbXNnaWQgIid3aW5oZWlnaHQnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbmhlaWdodCciCittc2dzdHIgImhvZG5vdGEgdm++YnkgJ3dpbmhlaWdodCcgbmVzbWllIGJ5nSBtZW6aaWEgbmWeIGhvZG5vdGEgdm++YnkgJ3dpbm1pbmhlaWdodCciCisKKyM6IG9wdGlvbi5jOjU5OTkgb3B0aW9uLmM6NjAxOAorbXNnaWQgIid3aW53aWR0aCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWlud2lkdGgnIgorbXNnc3RyICJob2Rub3RhIHZvvmJ5ICd3aW53aWR0aCcgbmVzbWllIGJ5nSBtZW6aaWEgbmWeIGhvZG5vdGEgdm9svnkgJ3dpbm1pbndpZHRoJyIKKworIzogb3B0aW9uLmM6NjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJNaW5pbeFsbmUgcG90cmVibv0gcG/oZXQgcmlhZGtvdjogJWQiCisKKyM6IG9wdGlvbi5jOjYxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIgorbXNnc3RyICJNaW5pbeFsbmUgcG90cmVibv0gcG/oZXQgc3TlcGNvdjogJWQiCisKKyM6IG9wdGlvbi5jOjY0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NTogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMzU1OiBOZXpu4W1hIHZvvmJhOiAlcyIKKworIzogb3B0aW9uLmM6NjU3NAorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEvzZHkgdGVybWlu4Wx1IC0tLSIKKworIzogb3B0aW9uLmM6NjU3NgorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE5hc3RhdmVuaWUgZ2xvYuFsbnljaCB2b2xpZWIgLS0tIgorCisjOiBvcHRpb24uYzo2NTc4Cittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBOYXN0YXZlbmllIGdsb2LhbG55Y2ggdm9saWViIC0tLSIKKworIzogb3B0aW9uLmM6NjU4MAorbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTW+ebm9zdGkgLS0tIgorCisjOiBvcHRpb24uYzo3MjY5Cittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6IGdldF92YXJwIENIWUJBIgorCisjOiBvcHRpb24uYzo4MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTc6ICdsYW5nbWFwJzogTWF0Y2hpbmcgY2hhcmFjdGVyIG1pc3NpbmcgZm9yICVzIgorbXNnc3RyICJFMzU3OiAnbGFuZ21hcCc6IHByZSAlcyBjaP1iYSB2eWhvdnVq+mNpIHpuYWsiCisKKyM6IG9wdGlvbi5jOjgyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1ODogJ2xhbmdtYXAnOiBFeHRyYSBjaGFyYWN0ZXJzIGFmdGVyIHNlbWljb2xvbjogJXMiCittc2dzdHIgIkUzNTg6ICdsYW5nbWFwJzogbmFkYnl0b+hu6SB6bmFreSBwbyBib2Rrb+hpYXJrZTogJXMiCisKKyM6IG9zX2FtaWdhLmM6MjczCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICJuZWThIHNhIG90dm9yaZ0gIgorCisjOiBvc19hbWlnYS5jOjMwNworbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIlZJTTogTmVk4SBzYSBvdHZvcmmdIG9rbm8hXG4iCisKKyM6IG9zX2FtaWdhLmM6MzI5Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAiSmUgcG90cmVibuEgQW1pZ2Fkb3MgdmVyemlhIDIuMDQgYWxlYm8gbm92mmlhXG4iCisKKyM6IG9zX2FtaWdhLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgJXMgdmVyc2lvbiAlbGRcbiIKK21zZ3N0ciAiUG90cmVibv0gJXMgIHZlcnppYSAlbGRcbiIKKworIzogb3NfYW1pZ2EuYzo0MDcKK21zZ2lkICJDYW5ub3Qgb3BlbiBOSUw6XG4iCittc2dzdHIgIk5lZOEgc2Egb3R2b3JpnSBOSUw6XG4iCisKKyM6IG9zX2FtaWdhLmM6NDE4Cittc2dpZCAiQ2Fubm90IGNyZWF0ZSAiCittc2dzdHIgIk5lZOEgc2Egdnl0dm9yaZ0gIgorCisjOiBvc19hbWlnYS5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJWaW0gZXhpdGluZyB3aXRoICVkXG4iCittc2dzdHIgIlZpbSB1a29u6GVu/SBzICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTI4Cittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAibmVt9J5lbSB6bWVuaZ0ga29uem9sb3b9IG3zZCA/IVxuIgorCisjOiBvc19hbWlnYS5jOjkzOCBvc19tYWMuYzoxMTc3IG9zX21zd2luLmM6NjI5IG9zX3Jpc2Nvcy5jOjc1NyBvc191bml4LmM6MjgwMworbXNnaWQgIkUzNTk6IFNjcmVlbiBtb2RlIHNldHRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTM1OTogTmFzdGF2b3ZhbmllIHJlnmltdSBvYnJhem92a3kgbmllIGplIHBvZHBvcm92YW7pIgorCisjOiBvc19hbWlnYS5jOjk5NAorbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAibWNoX2dldF9zaGVsbHNpemU6IG5pZSBqZSBrb256b2xvdT8/XG4iCisKKyMuIGlmIFZpbSBvcGVuZWQgYSB3aW5kb3c6IEV4ZWN1dGluZyBhIHNoZWxsIG1heSBjYXVzZSBjcmFzaGVzCisjOiBvc19hbWlnYS5jOjExNDIKK21zZ2lkICJFMzYwOiBDYW5ub3QgZXhlY3V0ZSBzaGVsbCB3aXRoIC1mIG9wdGlvbiIKK21zZ3N0ciAiRTM2MDogTmVk4SBzYSBzcHVzdGmdIHNoZWxsIHMgLWYgdm++Ym91IgorCisjOiBvc19hbWlnYS5jOjExODMgb3NfYW1pZ2EuYzoxMjczCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICJOZWThIHNhIHNwdXN0aZ0gIgorCisjOiBvc19hbWlnYS5jOjExODYgb3NfYW1pZ2EuYzoxMjgzCittc2dpZCAic2hlbGwgIgorbXNnc3RyICJzaGVsbCAiCisKKyM6IG9zX2FtaWdhLmM6MTIwNiBvc19hbWlnYS5jOjEzMDgKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiIHZy4XRlbulcbiIKKworIzogb3NfYW1pZ2EuYzoxNDQ4Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSBwcu1saZogbWFs4S4iCisKKyM6IG9zX2FtaWdhLmM6MTQ1MgorbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAiSS9PIENIWUJBIgorCisjOiBvc19tc3dpbi5jOjUwMworbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICIuLi4oc2ty4XRlbukpIgorCisjOiBvc19tc3dpbi5jOjYwNAorbXNnaWQgIidjb2x1bW5zJyBpcyBub3QgODAsIGNhbm5vdCBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICInc3TlcGNlJyBuaWUgamUgODAsIG5lbfSeZW0gc3B1c3RpnSBleHRlcm79IHBy7WtheiIKKworIzogb3NfbXN3aW4uYzo3MTYgb3NfdW5peC5jOjUxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NDogTGlicmFyeSBjYWxsIGZhaWxlZCBmb3IgXCIlcygpXCIiCittc2dzdHIgIkUzNjQ6IFZ5dm9sYW5pZSBrbmmebmnobmVqIGZ1bmtjaWEgemx5aGFsbyBwcmUgXCIlcygpXCIiCisKKyM6IG9zX21zd2luLmM6MTM2NQorbXNnaWQgIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRTIzNzogWmx5aGFsIHb9YmVyIHRsYehpYXJuZSIKKworIzogb3NfbXN3aW4uYzoxNDA1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvICVzIG9uICVzIgorbXNnc3RyICIlcyBuYSAlcyIKKworIzogb3NfbXN3aW4uYzoxNDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDg6IFVua25vd24gZm9udDogJXMiCittc2dzdHIgIkU0NDg6IE5lem7hbWUgcO1zbW86ICVzIgorCisjOiBvc19tc3dpbi5jOjE0NzAgb3NfbXN3aW4uYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogQ2h5YmEgdGxh6GU6ICVzIgorCisjOiBvc19tc3dpbi5jOjE0ODEKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJOZXpu4W15IgorCisjOiBvc19tc3dpbi5jOjE1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAiVGxh6O1tICclcyciCisKKyM6IG9zX21zd2luLmM6MjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDogQ2h5Ym79IG7hem92IHpuYWtvdmVqIHNhZHkgXCIlc1wiIHYgbuF6dmUgcO1zbWEgXCIlc1wiIgorCisjOiBvc19tc3dpbi5jOjI2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTogQ2h5Ym79IHpuYWsgJyVjJyB2IG7henZlIHDtc21hIFwiJXNcIiIKKworIzogb3NfcmlzY29zLmM6MTI1NgorbXNnaWQgIkUzNjY6IEludmFsaWQgJ29zZmlsZXR5cGUnIG9wdGlvbiAtIHVzaW5nIFRleHQiCittc2dzdHIgIkUzNjY6IENoeWJu4SAnb3NmaWxldHlwZScgdm++YmEgLSBwb3WeaXRpZSBUZXh0dSIKKworIzogb3NfdW5peC5jOjg2MgorbXNnaWQgIlZpbTogRG91YmxlIHNpZ25hbCwgZXhpdGluZ1xuIgorbXNnc3RyICJWSW06IGR2b2ppdP0gc2lnbuFsLCBrb27o7W1cbiIKKworIzogb3NfdW5peC5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCBkZWFkbHkgc2lnbmFsICVzXG4iCittc2dzdHIgIlZpbTogWmFjaHl0ZW79IHNtcnRpYWNpIHNpZ27hbCAlc1xuIgorCisjOiBvc191bml4LmM6ODcxCittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIgorbXNnc3RyICJWaW06IFphY2h5dGVu/SBzbXJ0aWFjaSBzaWdu4WxcbiIKKworIzogb3NfdW5peC5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRvb2sgJWxkIG1zZWMiCittc2dzdHIgIk90duFyYW0gWCBkaXNwbGVqIC0gemFiZXJpZSAlbGQgbXNlYyIKKworIzogb3NfdW5peC5jOjExNTIKK21zZ2lkICIiCisiXG4iCisiVmltOiBHb3QgWCBlcnJvclxuIgorbXNnc3RyICIiCisiXG4iCisiVmltOiBjaHliYSBYXG4iCisKKyM6IG9zX3VuaXguYzoxMjE5Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiVGVzdG92YW5pZSBYIGRpc3BsZWphIHpseWhhbG8iCisKKyM6IG9zX3VuaXguYzoxMzYzCittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRpbWVkIG91dCIKK21zZ3N0ciAiVXBseW51bCDoYXMgb3R2b3JlbmlhIFggZGlzcGxlamEiCisKKyM6IG9zX3VuaXguYzoyOTc2IG9zX3VuaXguYzozNjM0Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsICIKK21zZ3N0ciAiIgorIlxuIgorIk5lZOEgc2Egc3B1c3RpnSBzaGVsbCAiCisKKyM6IG9zX3VuaXguYzozMDIxCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsIHNoXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOZWThIHNhIHNwdXN0aZ0gc2ggc2hlbGxcbiIKKworIzogb3NfdW5peC5jOjMwMjUgb3NfdW5peC5jOjM2NDAKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisiIG7hdnJhdG924SBob2Rub3RhIHNoZWxsdSAiCisKKyM6IG9zX3VuaXguYzozMTU5Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5lZGr6IHNhIHZ5dHZvcmmdIHL6cnlcbiIKKworIzogb3NfdW5peC5jOjMxNzQKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGZvcmtcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZ5dm9sYW5pZSBmb3JrIHpseWhhbG9cbiIKKworIzogb3NfdW5peC5jOjM2NDcKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQcu1rYXogdWtvbuhlbv1cbiIKKworIzogb3NfdW5peC5jOjUxNjQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICJPdHZvcmVuaWUgWCBkaXNwbGVqYSB6bHloYWxvIgorCisjOiBvc192bXNfbW1zLmM6NTkKK21zZ2lkICJBdCBsaW5lIgorbXNnc3RyICJOYSByaWFka3UiCisKKyM6IG9zX3dpbjE2LmM6NTc4IG9zX3dpbjMyLmM6MzAzNworIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAibuF2cmF0b3bhIGhvZG5vdGEgc2hlbGx1ICVkIgorCisjOiBvc193aW4zMi5jOjI1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgJXMgZXZlbnRcbiIKK21zZ3N0ciAiVmltOiBaYWNoeXRlbuEgdWRhbG9znSAlc1xuIgorCisjOiBvc193aW4zMi5jOjI1MDcKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAiemF2cmllnSIKKworIzogb3Nfd2luMzIuYzoyNTA5Cittc2dpZCAibG9nb2ZmIgorbXNnc3RyICJvZGhs4XNpnSIKKworIzogb3Nfd2luMzIuYzoyNTEwCittc2dpZCAic2h1dGRvd24iCittc2dzdHIgInZ5cG76nSIKKworIzogb3Nfd2luMzIuYzoyOTkxCittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6IFBy7WtheiBuZW7hamRlbv0iCisKKyM6IG9zX3dpbjMyLmM6MzAwNAorbXNnaWQgIiIKKyJWSU1SVU4uRVhFIG5vdCBmb3VuZCBpbiB5b3VyICRQQVRILlxuIgorIkV4dGVybmFsIGNvbW1hbmRzIHdpbGwgbm90IHBhdXNlIGFmdGVyIGNvbXBsZXRpb24uXG4iCisiU2VlICA6aGVscCB3aW4zMi12aW1ydW4gIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlZJTVJVTi5FWEUgbmVu4WpkZW79IHYgJFBBVEguXG4iCisiUG8gZG9rb27oZW7tIGV4dGVybv1jaCBwcu1rYXpvdiBuZWJ1ZGUgdv1zdHVwIHBvemFzdGF2ZW79LlxuIgorIlBvenJpdGUgIDpoZWxwIHdpbjMyLXZpbXJ1biAgcHJlIHZpYWMgaW5mb3Jt4WNp7S4iCisKKyM6IG9zX3dpbjMyLmM6MzAwNworbXNnaWQgIlZpbSBXYXJuaW5nIgorbXNnc3RyICJWaW0gVmFyb3ZhbmllIgorCisjOiBvc193MzJleGUuYzoxNjkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICJOZW30nmVtIG5haHJhnSB2aW0zMi5kbGwhIgorCisjOiBvc193MzJleGUuYzoxNjkgb3NfdzMyZXhlLmM6MTc5Cittc2dpZCAiVklNIEVycm9yIgorbXNnc3RyICJWSU0gQ2h5YmEiCisKKyM6IG9zX3czMmV4ZS5jOjE3OQorbXNnaWQgIkNvdWxkIG5vdCBmaXggdXAgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIERMTCEiCittc2dzdHIgIk5lbfSeZW0gb3ByYXZpnSBvZGthenkgZnVua2NpZSBuYSBETEwhIgorCisjOiBxdWlja2ZpeC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcyOiBUb28gbWFueSAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzI6IFBy7WxpmiBtbm9obyAlJSVjIHZvIGZvcm3hdG92YWNvbSByZZ1hemNpIgorCisjOiBxdWlja2ZpeC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MzogTmVv6GFr4XZhbv0gdv1za3l0ICUlJWMgdm8gZm9ybeF0b3ZhY29tIHJlnWF6Y2kiCisKKyM6IHF1aWNrZml4LmM6MzQ4Cittc2dpZCAiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzQ6IFZvIGZvcm3hdG92YWNvbSByZZ1hemNpIGNo/WJhIF0iCisKKyM6IHF1aWNrZml4LmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogTmVwb2Rwb3JvdmFu4SBmb3Jt4XRvduEgmnBlY2lmaWvhY2lhICUlJWMgdm8gZm9ybeF0b3ZhY29tIHJlnWF6Y2kiCisKKyM6IHF1aWNrZml4LmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzY6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIHByZWZpeCIKK21zZ3N0ciAiRTM3NjogTmVwcu1zdHVwbukgJSUlYyB2IHByZWZpeGUgZm9ybeF0b3ZhY2llaG8gcmWdYXpjYSIKKworIzogcXVpY2tmaXguYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6IE5lcHLtc3R1cG7pICUlJWMgdm8gZm9ybeF0b3ZhY29tIHJlnWF6Y2kiCisKKyM6IHF1aWNrZml4LmM6NDE0Cittc2dpZCAiRTM3ODogJ2Vycm9yZm9ybWF0JyBjb250YWlucyBubyBwYXR0ZXJuIgorbXNnc3RyICJFMzc4OiAnZXJyb3Jmb3JtYXQnIG5lb2JzYWh1amUgnmlhZG55IHZ6b3IiCisKKyM6IHF1aWNrZml4LmM6NTIwCittc2dpZCAiRTM3OTogTWlzc2luZyBvciBlbXB0eSBkaXJlY3RvcnkgbmFtZSIKK21zZ3N0ciAiRTM3OTogQ2j9YmFq+mNpIGFsZWJvIHBy4XpkbnkgbuF6b3YgYWRyZXPhcmEiCisKKyM6IHF1aWNrZml4LmM6OTMxCittc2dpZCAiTm8gbW9yZSBpdGVtcyIKK21zZ3N0ciAijmlhZG5lIO9hbJppZSBwb2xvnmt5IgorCisjOiBxdWlja2ZpeC5jOjExNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCVkIG9mICVkKSVzJXM6ICIKK21zZ3N0ciAiKCVkLyVkKSVzJXM6ICIKKworIzogcXVpY2tmaXguYzoxMTU0Cittc2dpZCAiIChsaW5lIGRlbGV0ZWQpIgorbXNnc3RyICIgKHJpYWRvayB2eW1hemFu/SkiCisKKyM6IHF1aWNrZml4LmM6MTM2MAorbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDogS29uaWVjIHF1aWNrZml4IHpvem5hbXUiCisKKyM6IHF1aWNrZml4LmM6MTM2OQorbXNnaWQgIkUzODE6IEF0IHRvcCBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MTogWmHoaWF0b2sgcXVpY2tmaXggem96bmFtdSIKKworIzogcXVpY2tmaXguYzoxMzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAiem96bmFtIGNo/WIgJWQgeiAlZDsgcG/oZXQgY2j9YjogJWQiCisKKyM6IHF1aWNrZml4LmM6MTg0MgorbXNnaWQgIkUzODI6IENhbm5vdCB3cml0ZSwgJ2J1ZnR5cGUnIG9wdGlvbiBpcyBzZXQiCittc2dzdHIgIkUzODI6IE5lZOEgc2EgdWxvnmmdLCBqZSBuYXN0YXZlbuEgdm++YmEgJ2J1ZnR5cGUnIgorCisjOiByZWdleHAuYzo4MDIKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiBWem9yIGplIHBy7WxpmiBkbGj9IgorCisjOiByZWdleHAuYzoxMzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTogTmVzdGVkICVzKiIKK21zZ3N0ciAiRTYxOiBWaG5pZXpkZW79ICVzKiIKKworIzogcmVnZXhwLmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI6IE5lc3RlZCAlcyVjIgorbXNnc3RyICJFNjI6IFZobmllemRlbukgJXMlYyIKKworIzogcmVnZXhwLmM6MTQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjQ6ICVzJWMgZm9sbG93cyBub3RoaW5nIgorbXNnc3RyICJFNjQ6ICVzJWMgbmnoIG5lbmFzbGVkdWplIgorCisjOiByZWdleHAuYzoyNDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICJDaHliYSBzeW50YXhlIHYgJXN7Li4ufSIKKworIzogcmVnZXhwLmM6MjczNworbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiBaYWNoeXRlbukgcHJldGXoZW5pZSB64XNvYm7ta3U6IHBy7WxpmiB6bG+eaXT9IHJlZ3Vs4XJueSB2/XJhej8iCisKKyM6IHJlZ2V4cC5jOjI4NzIKK21zZ2lkICJFMzYzOiBwYXR0ZXJuIGNhdXNlZCBvdXQtb2Ytc3RhY2sgZXJyb3IiCittc2dzdHIgIkUzNjM6IHZ6b3Igc3D0c29iaWwgcHJldGXoZW5pZSB64XNvYm7ta3UiCisKKyM6IHJlZ2V4cC5jOjMxMDgKK21zZ2lkICJFeHRlcm5hbCBzdWJtYXRjaGVzOlxuIgorbXNnc3RyICJWbvp0b3Ju6SBwb2RyYWRlbukgemhvZHk6XG4iCisKKyM6IHNjcmVlbi5jOjIwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0tJTNsZCBsaW5lcyBmb2xkZWQgIgorbXNnc3RyICIrLS0lM2xkIHJpYWRrb3YgemFobnV0/WNoICIKKworIzogc2NyZWVuLmM6NzUxNworbXNnaWQgIiBWUkVQTEFDRSIKK21zZ3N0ciAiIE5BSFJBREmNIFZFUlRJS8FMTkUiCisKKyM6IHNjcmVlbi5jOjc1MjEKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIE5BSFJBREmNIgorCisjOiBzY3JlZW4uYzo3NTI2Cittc2dpZCAiIFJFVkVSU0UiCittc2dzdHIgIiBPQlLBVEmNIgorCisjOiBzY3JlZW4uYzo3NTI4Cittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIFZMT45JjSIKKworIzogc2NyZWVuLmM6NzUzMQorbXNnaWQgIiAoaW5zZXJ0KSIKK21zZ3N0ciAiICh2bG+eaZ0pIgorCisjOiBzY3JlZW4uYzo3NTMzCittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiIChuYWhyYWRpnSkiCisKKyM6IHNjcmVlbi5jOjc1MzUKK21zZ2lkICIgKHZyZXBsYWNlKSIKK21zZ3N0ciAiIChuYWhyYWRpnSB2ZXJ0aWvhbG5lKSIKKworIzogc2NyZWVuLmM6NzUzOAorbXNnaWQgIiBIZWJyZXciCittc2dzdHIgIiBoZWJyZWpza/0iCisKKyM6IHNjcmVlbi5jOjc1NDYKK21zZ2lkICIgKGxhbmcpIgorbXNnc3RyICIgKGphenlrKSIKKworIzogc2NyZWVuLmM6NzU0OQorbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKHZsb55pnSkiCisKKyM6IHNjcmVlbi5jOjc1NTUKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIgWkhPRFkiCisKKyM6IHNjcmVlbi5jOjc1NTcKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgVklaVcFMTkUiCisKKyM6IHNjcmVlbi5jOjc1NTkKK21zZ2lkICIgQkxPQ0siCittc2dzdHIgIiBCTE9LIgorCisjOiBzY3JlZW4uYzo3NTYxCittc2dpZCAiIExJTkUiCittc2dzdHIgIiBSSUFET0siCisKKyM6IHNjcmVlbi5jOjc1NzQgc2NyZWVuLmM6NzYzNAorbXNnaWQgInJlY29yZGluZyIKK21zZ3N0ciAibmFocuF2YW0iCisKKyM6IHNlYXJjaC5jOjM2Cittc2dpZCAic2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIgorbXNnc3RyICJovmFkYW5pZSBkb3NpYWhsbyB6YehpYXRvaywgcG9rcmHob3ZhbmllIG9kIGtvbmNhIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIKK21zZ3N0ciAiaL5hZGFuaWUgZG9zaWFobG8ga29uaWVjLCBwb2tyYehvdmFuaWUgb2QgemHoaWF0a3UiCisKKyM6IHNlYXJjaC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzgzOiBJbnZhbGlkIHNlYXJjaCBzdHJpbmc6ICVzIgorbXNnc3RyICJFMzgzOiBOZXBy7XN0dXBu/SBovmFkYW79IHJlnWF6ZWM6ICVzIgorCisjOiBzZWFyY2guYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg0OiBovmFkYW5pZSBkb3NpYWhsbyB6YehpYXRvayBiZXogbuFqZGVuaWEgJXMiCisKKyM6IHNlYXJjaC5jOjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg1OiBzZWFyY2ggaGl0IEJPVFRPTSB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODU6IGi+YWRhbmllIGRvc2lhaGxvIGtvbmllYyBiZXogbuFqZGVuaWEgJXMiCisKKyM6IHNlYXJjaC5jOjExNDQKK21zZ2lkICJFMzg2OiBFeHBlY3RlZCAnPycgb3IgJy8nICBhZnRlciAnOyciCittc2dzdHIgIkUzODY6IFBvICc7JyBv6GFr4XZhbSAnPycgYWxlYm8gJy8nIgorCisjOiBzZWFyY2guYzozNTIzCittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAodnLhdGFuZSB1niB2eXDtc2Fu/WNoIHpo9GQpIgorCisjLiBjdXJzb3IgYXQgc3RhdHVzIGxpbmUKKyM6IHNlYXJjaC5jOjM1NDMKK21zZ2lkICItLS0gSW5jbHVkZWQgZmlsZXMgIgorbXNnc3RyICItLS0gVmxvnmVu6SBz+mJvcnkiCisKKyM6IHNlYXJjaC5jOjM1NDUKK21zZ2lkICJub3QgZm91bmQgIgorbXNnc3RyICJuZW7hamRlbukgIgorCisjOiBzZWFyY2guYzozNTQ2Cittc2dpZCAiaW4gcGF0aCAtLS1cbiIKK21zZ3N0ciAidiBjZXN0ZSAtLS1cbiIKKworIzogc2VhcmNoLmM6MzU4NQorbXNnaWQgIiAgKEFscmVhZHkgbGlzdGVkKSIKK21zZ3N0ciAiICAoVZ4gdnlw7XNhbukpIgorCisjOiBzZWFyY2guYzozNTg3Cittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiBORU7BSkRFTskiCisKKyM6IHNlYXJjaC5jOjM2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiCittc2dzdHIgIlByZWi+YWThdmFtIHZsb55lbukgc/pib3J5OiAlcyIKKworIzogc2VhcmNoLmM6Mzg1NworbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4NzogWmhvZGEgamUgbmEgYWt0deFsbm9tIHJpYWRrdSIKKworIzogc2VhcmNoLmM6Mzk5NworbXNnaWQgIkFsbCBpbmNsdWRlZCBmaWxlcyB3ZXJlIGZvdW5kIgorbXNnc3RyICJWmmV0a3kgdmxvnmVu6SBz+mJvcnkgYm9saSBu4WpkZW7pIgorCisjOiBzZWFyY2guYzozOTk5Cittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIo5pYWRuZSB2bG+eZW7pIHP6Ym9yeSIKKworIzogc2VhcmNoLmM6NDAxNQorbXNnaWQgIkUzODg6IENvdWxkbid0IGZpbmQgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRTM4ODogTmVk4SBzYSBu4WpznSBkZWZpbu1jaWEiCisKKyM6IHNlYXJjaC5jOjQwMTcKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IE5lZOEgc2EgbuFqc50gdnpvciIKKworIzogc3ludGF4LmM6Mjk5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkwOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTM5MDogTmVwcu1zdHVwbv0gYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzozMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTE6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkxOiBTeW50YWt0aWNr4SB6b3N0YXZhICVzIG5lZXhpc3R1amUiCisKKyM6IHN5bnRheC5jOjMzNDMKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgIlByZSB0ZW50byBidWZmZXIgbmllIHP6IGRlZmlub3ZhbukgnmlhZG5lIHBvbG+ea3kgc3ludGF4ZSIKKworIzogc3ludGF4LmM6MzM1MQorbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAic3luY2hyb25penVqZW0ga29tZW504XJlIHYgQyCadP1sZSIKKworIzogc3ludGF4LmM6MzM1OQorbXNnaWQgIm5vIHN5bmNpbmciCittc2dzdHIgIp5pYWRuZSBzeW5jaHJvbml64WNpZSIKKworIzogc3ludGF4LmM6MzM2MgorbXNnaWQgInN5bmNpbmcgc3RhcnRzICIKK21zZ3N0ciAic3luY2hyb25peuFjaWEgemHo7W5hICIKKworIzogc3ludGF4LmM6MzM2NCBzeW50YXguYzozNDM5Cittc2dpZCAiIGxpbmVzIGJlZm9yZSB0b3AgbGluZSIKK21zZ3N0ciAiIHJpYWRrb3YgcHJlZCB6YehpYXRrb20iCisKKyM6IHN5bnRheC5jOjMzNjkKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBQb2xvnmt5IHN5bmNocm9uaXrhY2llIHN5bnRheGUgLS0tIgorCisjOiBzeW50YXguYzozMzc0Cittc2dpZCAiIgorIlxuIgorInN5bmNpbmcgb24gaXRlbXMiCittc2dzdHIgIiIKKyJcbiIKKyJzeW5jaHJvbml6dWplbSBwb2xvnmt5IgorCisjOiBzeW50YXguYzozMzgwCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFBvbG+ea3kgc3ludGF4ZSAtLS0iCisKKyM6IHN5bnRheC5jOjM0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MjogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTI6IFN5bnRha3RpY2vhIHpvc3RhdmEgJXMgbmVleGlzdHVqZSIKKworIzogc3ludGF4LmM6MzQyOQorbXNnaWQgIm1pbmltYWwgIgorbXNnc3RyICJtaW5pbeFsbmUgIgorCisjOiBzeW50YXguYzozNDM2Cittc2dpZCAibWF4aW1hbCAiCittc2dzdHIgIm1heGlt4WxuZSAiCisKKyM6IHN5bnRheC5jOjM0NDgKK21zZ2lkICI7IG1hdGNoICIKK21zZ3N0ciAiOyB6aG9kYSAiCisKKyM6IHN5bnRheC5jOjM0NTAKK21zZ2lkICIgbGluZSBicmVha3MiCittc2dzdHIgIiByaWFka292IgorCisjOiBzeW50YXguYzo0MDc4Cittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzkzOiBncm91cFt0XWhlcmUgbmVzbWllIGJ5nSBuYSB0b210byBtaWVzdGUiCisKKyM6IHN5bnRheC5jOjQxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiBQcmUgJXMgY2j9YmEgcG9sb55rYSByZWdp8251IgorCisjOiBzeW50YXguYzo0MTMwCittc2dpZCAiRTM5NTogY29udGFpbnMgYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTU6IG9ic2FodWplIGFyZ3VtZW50eSwga3RvcukgdHUgbmllIHP6IHBvdm9sZW7pIgorCisjOiBzeW50YXguYzo0MTQxCittc2dpZCAiRTM5NjogY29udGFpbmVkaW4gYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTY6IG9ic2FodWplIGFyZ3VtZW50eSwga3RvcukgdHUgbmllIHP6IHBvdm9sZW7pIgorCisjOiBzeW50YXguYzo0MjE5Cittc2dpZCAiRTM5NzogRmlsZW5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUzOTc6IFZ5nmFkb3Zhbv0gbuF6b3Ygc/pib3J1IgorCisjOiBzeW50YXguYzo0NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODogQ2j9YmEgJz0nOiAlcyIKKworIzogc3ludGF4LmM6NDcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogUHLtbGmaIG3hbG8gYXJndW1lbnRvdjogb2JsYXOdIHN5bnRheGUgJXMiCisKKyM6IHN5bnRheC5jOjUwNDYKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDogTmVib2xhIHphZGFu4SCeaWFkbmEgem9zdGF2YSIKKworIzogc3ludGF4LmM6NTA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDAxOiBQYXR0ZXJuIGRlbGltaXRlciBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDAxOiBPZGRlvm92YeggdnpvcnUgJXMgbmVu4WpkZW79IgorCisjOiBzeW50YXguYzo1MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDI6IEdhcmJhZ2UgYWZ0ZXIgcGF0dGVybjogJXMiCittc2dzdHIgIkU0MDI6IENoeWJhIHphIHZ6b3JvbSAlcyIKKworIzogc3ludGF4LmM6NTI0NQorbXNnaWQgIkU0MDM6IHN5bnRheCBzeW5jOiBsaW5lIGNvbnRpbnVhdGlvbnMgcGF0dGVybiBzcGVjaWZpZWQgdHdpY2UiCittc2dzdHIgIkU0MDM6IHN5bmNocm9uaXrhY2lhIHN5bnRheGU6IHZ6b3IgcG9rcmHob3ZhbmlhIHJpYWRrb3YgemFkYW79IGR2YWty4XQiCisKKyM6IHN5bnRheC5jOjUzMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNDogSWxsZWdhbCBhcmd1bWVudHM6ICVzIgorbXNnc3RyICJFNDA0OiBDaHlibukgYXJndW1lbnR5OiAlcyIKKworIzogc3ludGF4LmM6NTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiBDaP1iYSB6bmFtaWVua28gcm92buFzYTogJXMiCisKKyM6IHN5bnRheC5jOjUzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNjogRW1wdHkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDA2OiBQcuF6ZG55IGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6NTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA3OiAlcyBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNDA3OiAlcyB0dSBuaWUgamUgcG92b2xlbukiCisKKyM6IHN5bnRheC5jOjUzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwODogJXMgbXVzdCBiZSBmaXJzdCBpbiBjb250YWlucyBsaXN0IgorbXNnc3RyICJFNDA4OiAlcyBtdXPtIGJ5nSBwcnb9IHYgJ2NvbnRhaW5zJyB6b3puYW1lIgorCisjOiBzeW50YXguYzo1NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDk6IFVua25vd24gZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkU0MDk6IE5lem7hbXkgbuF6b3Ygc2t1cGlueTogJXMiCisKKyM6IHN5bnRheC5jOjU2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiBDaHlibv0gcG9kcmFkZW79IHBy7WtheiA6c3ludGF4IDogJXMgIgorCisjOiBzeW50YXguYzo2MDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTE6IGhpZ2hsaWdodCBncm91cCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDExOiBza3VwaW5hIHp27XJhem5lbmlhICVzIG5lYm9sYSBu4WpkZW7hIgorCisjOiBzeW50YXguYzo2MDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTI6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEyOiBQcu1saZogbeFsbyBhcmd1bWVudG92OiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTM6IFRvbyBtYW55IGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMzogUHLtbGmaIG1ub2hvIGFyZ3VtZW50b3Y6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYxMjIKK21zZ2lkICJFNDE0OiBncm91cCBoYXMgc2V0dGluZ3MsIGhpZ2hsaWdodCBsaW5rIGlnbm9yZWQiCittc2dzdHIgIkU0MTQ6IHNrdXBpbmEgamUgbmFzdGF2ZW7hLCBvZGtheiBuYSB6dv1yYXryb3ZhY2l1IHNrdXBpbnUgaWdub3JvdmFu/SIKKworIzogc3ludGF4LmM6NjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE1OiB1bmV4cGVjdGVkIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE1OiBuZW/oYWvhdmFu6SB6bmFtaWVua28gcm92buFzYSA6ICVzIgorCisjOiBzeW50YXguYzo2Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IGNo/WJhIHpuYW1pZW5rbyByb3Zu4XNhOiAlcyIKKworIzogc3ludGF4LmM6NjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE3OiBtaXNzaW5nIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQxNzogY2j9YmEgYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzo2MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTg6IElsbGVnYWwgdmFsdWU6ICVzIgorbXNnc3RyICJFNDE4OiBOZXBy7XB1c3Ru4SBob2Rub3RhOiAlcyIKKworIzogc3ludGF4LmM6NjQ2NQorbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6IGZhcmJhIHBvcHJlZGlhIG5pZSBqZSB6buFtYSIKKworIzogc3ludGF4LmM6NjQ3NgorbXNnaWQgIkU0MjA6IEJHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MjA6IGZhcmJhIHBvemFkaWEgbmllIGplIHpu4W1hIgorCisjOiBzeW50YXguYzo2NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjE6IENvbG9yIG5hbWUgb3IgbnVtYmVyIG5vdCByZWNvZ25pemVkOiAlcyIKK21zZ3N0ciAiRTQyMTogTuF6b3YgYWxlYm8g6O1zbG8gZmFyYnkgJXMgbmVib2xvIHJvenBvem5hbukiCisKKyM6IHN5bnRheC5jOjY3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6IHRlcm1pbuFsb3b9IGvzZCAlcyBqZSBwcu1saZogZGxo/SIKKworIzogc3ludGF4LmM6Njc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzogTmVwcu1zdHVwbv0gYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzo3MzIxCittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDogSmUgcG91nu12YW7pIHBy7WxpmiB2ZWxr6SBtbm+ec3R2byBvZGxpmm79Y2ggenb9cmF68m92YWPtY2ggdmxhc3Rub3N07SIKKworIzogdGFnLmM6OTAKK21zZ2lkICJhdCBib3R0b20gb2YgdGFnIHN0YWNrIgorbXNnc3RyICJrb25pZWMgem96bmFtdSB0YWdvdiIKKworIzogdGFnLmM6OTEKK21zZ2lkICJhdCB0b3Agb2YgdGFnIHN0YWNrIgorbXNnc3RyICJ6YehpYXRvayB6b3puYW11IHRhZ292IgorCisjOiB0YWcuYzozOTIKK21zZ2lkICJFNDI1OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNTogTmVk4SBzYSBza2/oaZ0gcHJlZCBwcnb9IHZ5aG92dWr6Y2kgdGFnIgorCisjOiB0YWcuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6IHRhZyAlcyBuZW7hamRlbv0iCisKKyM6IHRhZy5jOjU0NQorbXNnaWQgIiAgIyBwcmkga2luZCB0YWciCittc2dzdHIgIiAgIyBwcmkgdGFnIgorCisjOiB0YWcuYzo1NDgKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgInP6Ym9yXG4iCisKKyMuCisjLiAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMuICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjOiB0YWcuYzo3MDYKK21zZ2lkICJFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOiAiCittc2dzdHIgIlphZGFqdGUg6O1zbG8gKDxDUj4gcHJlIHVrb27oZW5pZSk6ICIKKworIzogdGFnLmM6NzQ2Cittc2dpZCAiRTQyNzogVGhlcmUgaXMgb25seSBvbmUgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI3OiBWeWhvdnVqZSBpYmEgamVkZW4gdGFnIgorCisjOiB0YWcuYzo3NDgKK21zZ2lkICJFNDI4OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI4OiBaYSBwb3NsZWRu/SB2eWhvdnVq+mNpIHRhZyBzYSBuZWThIHByZXNrb+hpnSIKKworIzogdGFnLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJT+mJvciBcIiVzXCIgbmVleGlzdHVqZSIKKworIy4gR2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgdGFncworIzogdGFnLmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAlZCBvZiAlZCVzIgorbXNnc3RyICJ0YWcgJWQgeiBjZWxrb3bpaG8gcG/odHUgJWQlcyIKKworIzogdGFnLmM6NzgzCittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiBhbGVibyB2aWFjIgorCisjOiB0YWcuYzo3ODUKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiICBQb3We7XZhbSB0YWcgcyBw7XNtb20gaW5laiB2Zb5rb3N0aSEiCisKKyM6IHRhZy5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTQyOTogU/pib3IgXCIlc1wiIG5lZXhpc3R1amUiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6ODk3Cittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyBDSUW8IHRhZyAgICAgICAgilRBUlQgcmlhZG9rICB2IHP6Ym9yZS90ZXh0ZSIKKworIzogdGFnLmM6MTE0NAorbXNnaWQgIkxpbmVhciB0YWcgc2VhcmNoIgorbXNnc3RyICJMaW5l4XJuZSBovmFkYW5pZSB0YWd1IgorCisjOiB0YWcuYzoxMTQ2Cittc2dpZCAiQmluYXJ5IHRhZyBzZWFyY2giCittc2dzdHIgIkJpbuFybmUgaL5hZGFuaWUgdGFndSIKKworIzogdGFnLmM6MTE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICJQcmVovmFk4XZhbSBz+mJvciB0YWdvdiAlcyIKKworIzogdGFnLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMwOiBUYWcgZmlsZSBwYXRoIHRydW5jYXRlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRTQzMDogU/pib3IgdGFnb3YgJXMgYm9sIG9yZXphbv1cbiIKKworIzogdGFnLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogQ2h5YmEgZm9ybeF0dSB2IHP6Ym9yZSB0YWdvdiBcIiVzXCIiCisKKyM6IHRhZy5jOjE4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICJQcmVkIGJhanRvbSAlbGQiCisKKyM6IHRhZy5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMjogVGFncyBmaWxlIG5vdCBzb3J0ZWQ6ICVzIgorbXNnc3RyICJFNDMyOiBPYnNhaCBz+mJvcnUgdGFnb3YgJXMgbmllIGplIHpvcmFkZW79IgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MTkxMQorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzogjmlhZG55IHP6Ym9yIHRhZ292IgorCisjOiB0YWcuYzoyNTgzCittc2dpZCAiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIKK21zZ3N0ciAiRTQzNDogTmVk4SBzYSBu4WpznSB2em9yIHRhZ292IgorCisjOiB0YWcuYzoyNTk0Cittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiBUYWcgc2EgbmVk4SBu4WpznSwgaWJhIGjhZGFtISIKKworIzogdGVybS5jOjE3MzcKK21zZ2lkICInIG5vdCBrbm93bi4gQXZhaWxhYmxlIGJ1aWx0aW4gdGVybWluYWxzIGFyZToiCittc2dzdHIgIicgbmllIGplIHpu4W15LiBEb3N0dXBu6SB2c3RhdmFu6SB0ZXJtaW7hbHk6IgorCisjOiB0ZXJtLmM6MTc2MQorbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAibmFzdGF2dWplbSBuYSAnIgorCisjOiB0ZXJtLmM6MjExNAorbXNnaWQgIkNhbm5vdCBvcGVuIHRlcm1jYXAgZmlsZSIKK21zZ3N0ciAiTmVk4SBzYSBvdHZvcmmdIHRlcm1jYXAgc/pib3IiCisKKyM6IHRlcm0uYzoyMTE3Cittc2dpZCAiVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1pbmZvIgorbXNnc3RyICJUZXJtaW5mbyBuZW9ic2FodWplIHBvbG+ea3UgcHJlIHRlbnRvIHRlcm1pbuFsIgorCisjOiB0ZXJtLmM6MjExOQorbXNnaWQgIlRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJUZXJtY2FwIG5lb2JzYWh1amUgcG9sb55rdSBwcmUgdGVudG8gdGVybWlu4WwiCisKKyM6IHRlcm0uYzoyMjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzY6IE5vIFwiJXNcIiBlbnRyeSBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNDM2OiBUZXJtY2FwIG5lb2JzYWh1amUgcG9sb55rdSBwcmUgXCIlc1wiIgorCisjOiB0ZXJtLmM6Mjc1MgorbXNnaWQgIkU0Mzc6IHRlcm1pbmFsIGNhcGFiaWxpdHkgXCJjbVwiIHJlcXVpcmVkIgorbXNnc3RyICJFNDM3OiBUZXJtaW7hbCBtdXPtIG1hnSBcImNtXCIgc2Nob3Bub3OdIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0ODkxCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBLbOF2ZXN5IHRlcm1pbuFsdSAtLS0iCisKKyM6IHVpLmM6MjUxCittc2dpZCAibmV3IHNoZWxsIHN0YXJ0ZWRcbiIKK21zZ3N0ciAic3B1c3Rlbv0gbm92/SBzaGVsbFxuIgorCisjOiB1aS5jOjE3NDcKK21zZ2lkICJWaW06IEVycm9yIHJlYWRpbmcgaW5wdXQsIGV4aXRpbmcuLi5cbiIKK21zZ3N0ciAiVmltOiBDaHliYSBwcmkg6O10YW7tIHZzdHVwdSwga29u6O1tLi4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6MzgzCittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICJPZHN0cuFuZW5pZSB6bWllbiBuaWUgamUgbW+ebuk7IGNoY2V0ZSBuYXByaWVrIHRvbXUgcG9rcmHob3ZhnSIKKworIzogdW5kby5jOjUzOAorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IOjtc2xhIHJpYWRrb3Ygc/ogY2h5Ym7pIgorCisjOiB1bmRvLmM6NzA3Cittc2dpZCAiMSBjaGFuZ2UiCittc2dzdHIgInBv6GV0IHptaWVuOiAxIgorCisjOiB1bmRvLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFuZ2VzIgorbXNnc3RyICJwb+hldCB6bWllbjogJWxkIgorCisjOiB1bmRvLmM6NzUzCittc2dpZCAiRTQzOTogdW5kbyBsaXN0IGNvcnJ1cHQiCittc2dzdHIgIkU0Mzk6IHrhem5hbSBvIHptZW7hY2ggcG+aa29kZW79IgorCisjOiB1bmRvLmM6Nzg1Cittc2dpZCAiRTQ0MDogdW5kbyBsaW5lIG1pc3NpbmciCittc2dzdHIgIkU0NDA6IGNo/WJhIHJpYWRvayBzcOSdIgorCisjLiBPbmx5IE1TIFZDIDQuMSBhbmQgZWFybGllciBjYW4gZG8gV2luMzJzCisjOiB2ZXJzaW9uLmM6NzI1Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYvMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMTYvMzIgYml0b3bhIEdVSSB2ZXJ6aWEgcHJlIE1TIFdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzo3MjcKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMiBiaXRvduEgR1VJIHZlcnppYSBwcmUgTVMgV2luZG93cyIKKworIzogdmVyc2lvbi5jOjczMAorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiIHYgV2luMzIgcmWeaW1lIgorCisjOiB2ZXJzaW9uLmM6NzMyCittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIiBzIE9MRSBwb2Rwb3JvdSIKKworIzogdmVyc2lvbi5jOjczNQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBjb25zb2xlIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMiBiaXRvduEgdmVyemlhIHByZSBNUyBXaW5kb3dzIGtvbnpvbHUiCisKKyM6IHZlcnNpb24uYzo3MzkKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNiBiaXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2IGJpdG924SB2ZXJ6aWEgcHJlIE1TIFdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzo3NDMKK21zZ2lkICIiCisiXG4iCisiMzIgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzIgYml0b3bhIHZlcnppYSBwcmUgTVMtRE9TIgorCisjOiB2ZXJzaW9uLmM6NzQ1Cittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2IGJpdG924SBNUy1ET1MgdmVyemlhIgorCisjOiB2ZXJzaW9uLmM6NzUxCittc2dpZCAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB2ZXJ6aWEiCisKKyM6IHZlcnNpb24uYzo3NTMKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgWCB2ZXJ6aWEiCisKKyM6IHZlcnNpb24uYzo3NTYKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIHZlcnppYSIKKworIzogdmVyc2lvbi5jOjc2MQorbXNnaWQgIiIKKyJcbiIKKyJSSVNDIE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJSSVNDIE9TIHZlcnppYSIKKworIzogdmVyc2lvbi5jOjc3MQorbXNnaWQgIiIKKyJcbiIKKyJJbmNsdWRlZCBwYXRjaGVzOiAiCittc2dzdHIgIiIKKyJcbiIKKyJQb3WeaXTpIHrhcGxhdHk6ICIKKworIzogdmVyc2lvbi5jOjc5NyB2ZXJzaW9uLmM6MTEzMgorbXNnaWQgIk1vZGlmaWVkIGJ5ICIKK21zZ3N0ciAiWm1lbmlsICIKKworIzogdmVyc2lvbi5jOjgwNAorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyJQcmVsb55lbuEgIgorCisjOiB2ZXJzaW9uLmM6ODA3Cittc2dpZCAiYnkgIgorbXNnc3RyICIgIgorCisjOiB2ZXJzaW9uLmM6ODE5Cittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJNYXhpbeFsbmEgdmVyemlhIgorCisjOiB2ZXJzaW9uLmM6ODIyCittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlZlvmvhIHZlcnppYSAiCisKKyM6IHZlcnNpb24uYzo4MjUKK21zZ2lkICIiCisiXG4iCisiTm9ybWFsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiTm9ybeFsbmEgdmVyemlhIgorCisjOiB2ZXJzaW9uLmM6ODI4Cittc2dpZCAiIgorIlxuIgorIlNtYWxsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiTWFs4SB2ZXJ6aWEgIgorCisjOiB2ZXJzaW9uLmM6ODMwCittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJNaW5pbeFsbmEgdmVyemlhICIKKworIzogdmVyc2lvbi5jOjgzNgorbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAiYmV6IGdyYWZpY2vpaG8gcm96aHJhbmlhLiIKKworIzogdmVyc2lvbi5jOjg0MAorbXNnaWQgIndpdGggR1RLLUdOT01FIEdVSS4iCittc2dzdHIgInMgcm96aHJhbu1tIEdUSy1HTk9NRS4iCisKKyM6IHZlcnNpb24uYzo4NDIKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBHVEsuIgorCisjOiB2ZXJzaW9uLmM6ODQ2Cittc2dpZCAid2l0aCBYMTEtTW90aWYgR1VJLiIKK21zZ3N0ciAicyByb3pocmFu7W0gWDExLU1vdGlmLiIKKworIzogdmVyc2lvbi5jOjg0OQorbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBYMTEtQXRoZW5hLiIKKworIzogdmVyc2lvbi5jOjg1MgorbXNnaWQgIndpdGggQmVPUyBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBCZU9TLiIKKworIzogdmVyc2lvbi5jOjg1NQorbXNnaWQgIndpdGggUGhvdG9uIEdVSS4iCittc2dzdHIgInMgcm96aHJhbu1tIFBob3Rvbi4iCisKKyM6IHZlcnNpb24uYzo4NTgKK21zZ2lkICJ3aXRoIEdVSS4iCittc2dzdHIgInMgZ3JhZmlja/1tIHJvemhyYW7tbS4iCisKKyM6IHZlcnNpb24uYzo4NjEKK21zZ2lkICJ3aXRoIENhcmJvbiBHVUkuIgorbXNnc3RyICJzIENhcmJvbiBncmFmaWNr/W0gcm96aHJhbu1tLiIKKworIzogdmVyc2lvbi5jOjg2NAorbXNnaWQgIndpdGggQ29jb2EgR1VJLiIKK21zZ3N0ciAicyBDb2NvYSBncmFmaWNr/W0gcm96aHJhbu1tLiIKKworIzogdmVyc2lvbi5jOjg2NworbXNnaWQgIndpdGggKGNsYXNzaWMpIEdVSS4iCittc2dzdHIgInMgKGtsYXNpY2v9bSkgZ3JhZmlja/1tIHJvemhyYW7tbS4iCisKKyM6IHZlcnNpb24uYzo4NzgKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIgIFZsYXN0bm9zdGkgemFocm51dOkgKCspIGEgbmV6YWhybnV06SAoLSk6XG4iCisKKyM6IHZlcnNpb24uYzo4OTAKK21zZ2lkICIgICBzeXN0ZW0gdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgIHN5c3TpbW92/SB2aW1yYyBz+mJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo4OTUKK21zZ2lkICIgICAgIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgdZ7tdmF0Zb5za/0gdmltcmMgc/pib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTAwCittc2dpZCAiIDJuZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgZHJ1aP0gdZ7tdmF0Zb5za/0gdmltcmMgc/pib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTA1Cittc2dpZCAiIDNyZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgdHJldO0gdZ7tdmF0Zb5za/0gdmltcmMgc/pib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTEwCittc2dpZCAiICAgICAgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICB1nu12YXRlvnNr/SBleHJjIHP6Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjkxNQorbXNnaWQgIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICBkcnVo/SB1nu12YXRlvnNr/SBleHJjIHP6Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjkyMQorbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICBzeXN06W1vdv0gZ3ZpbXJjIHP6Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjkyNQorbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIHWe7XZhdGW+c2v9IGd2aW1yYyBz+mJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo5MjkKK21zZ2lkICIybmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgImRydWj9IHWe7XZhdGW+c2v9IGd2aW1yYyBz+mJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo5MzQKK21zZ2lkICIzcmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgInRyZXTtIHWe7XZhdGW+c2v9IGd2aW1yYyBz+mJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo5NDEKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiAgICBzeXN06W1vdv0gc/pib3IgcyBwb251a291OiBcIiIKKworIzogdmVyc2lvbi5jOjk0OQorbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICBpbXBsaWNpdG7hIGhvZG5vdGEgJFZJTTpcIiIKKworIzogdmVyc2lvbi5jOjk1NQorbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiIGYtYiBwcmUgJFZJTVJVTlRJTUU6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTU5Cittc2dpZCAiQ29tcGlsYXRpb246ICIKK21zZ3N0ciAiUHJla2xhZDogIgorCisjOiB2ZXJzaW9uLmM6OTY1Cittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAiUHJla2xhZGHoOiAiCisKKyM6IHZlcnNpb24uYzo5NzAKK21zZ2lkICJMaW5raW5nOiAiCittc2dzdHIgIkxpbmt1amVtOiAiCisKKyM6IHZlcnNpb24uYzo5NzUKK21zZ2lkICIgIERFQlVHIEJVSUxEIgorbXNnc3RyICIgIFBPRFBPUkEgTEFERU5JQSIKKworIzogdmVyc2lvbi5jOjEwMTEKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVmkgSU1wcmV2ZWQiCisKKyM6IHZlcnNpb24uYzoxMDEzCittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgInZlcnppYSAiCisKKyM6IHZlcnNpb24uYzoxMDE0Cittc2dpZCAiYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorbXNnc3RyICJBdXRvcjogQnJhbSBNb29sZW5hYXIgYSDvYWya7SIKKworIzogdmVyc2lvbi5jOjEwMTgKK21zZ2lkICJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIgorbXNnc3RyICJWaW0gamUgdm++bmUgmu1yaXRlvm79IHByb2dyYW0iCisKKyM6IHZlcnNpb24uYzoxMDIwCittc2dpZCAiSGVscCBwb29yIGNoaWxkcmVuIGluIFVnYW5kYSEiCittc2dzdHIgIlBvbfSedGUgY2h1ZG9ibv1tIGRlnW9tIHYgVWdhbmRlISIKKworIzogdmVyc2lvbi5jOjEwMjEKK21zZ2lkICJ0eXBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJwb2Ryb2JuZWqaaWUgaW5mb3Jt4WNpZSB67XNrYXRlIHBvbW9jb3UgOmhlbHAgaWNjZjxFbnRlcj4iCisKKyM6IHZlcnNpb24uYzoxMDIzCittc2dpZCAidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIKK21zZ3N0ciAiemFkYWp0ZSA6cTxFbnRlcj4gICAgICAgICAgICAgcHJlIHVrb27oZW5pZSBwcm9ncmFtdSIKKworIzogdmVyc2lvbi5jOjEwMjQKK21zZ2lkICJ0eXBlICA6aGVscDxFbnRlcj4gIG9yICA8RjE+ICBmb3Igb24tbGluZSBoZWxwIgorbXNnc3RyICJ6YWRhanRlIDpoZWxwPEVudGVyPiAgYWxlYm8gPEYxPiBwcmUgcG9tb2Nu7WthIgorCisjOiB2ZXJzaW9uLmM6MTAyNQorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgInphZGFqdGUgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICBwcmUgaW5mb3Jt4WNpZSBvIHZlcnppaSIKKworIzogdmVyc2lvbi5jOjEwMjgKK21zZ2lkICJSdW5uaW5nIGluIFZpIGNvbXBhdGlibGUgbW9kZSIKK21zZ3N0ciAiQmWe7W0gdiByZZ5pbWUga29tcGF0aWJpbGl0eSBzIFZpIgorCisjOiB2ZXJzaW9uLmM6MTAyOQorbXNnaWQgInR5cGUgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIGZvciBWaW0gZGVmYXVsdHMiCittc2dzdHIgInphZGFqdGUgOnNldCBub2NwPEVudGVyPiAgICAgcHJlIGltcGxpY2l0bukgbmFzdGF2ZW5pZSBWaW0iCisKKyM6IHZlcnNpb24uYzoxMDMwCittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAicG9kcm9ibmVqmmllIGluZm9ybeFjaWUgeu1za2F0ZSBwb21vY291IDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6MTA0NQorbXNnaWQgIm1lbnUgIEhlbHAtPk9ycGhhbnMgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgImJsaZ6aaWUgaW5mb3Jt4WNpZSB2IG1lbnUgIFBvbW9jbu1rLT5TYW1vc3RhdG7pIgorCisjOiB2ZXJzaW9uLmM6MTA0NworbXNnaWQgIlJ1bm5pbmcgbW9kZWxlc3MsIHR5cGVkIHRleHQgaXMgaW5zZXJ0ZWQiCittc2dzdHIgIlNw+pqdYW0gbW9kZWxlc3MsIHDtc2Fu/SB0ZXh0IGplIHZsb55lbv0iCisKKyM6IHZlcnNpb24uYzoxMDQ4Cittc2dpZCAibWVudSAgRWRpdC0+R2xvYmFsIFNldHRpbmdzLT5Ub2dnbGUgSW5zZXJ0IE1vZGUgICIKK21zZ3N0ciAibWVudSDacHJhdnktPkdsb2LhbG5lIG1vnm5vc3RpLT5QcmVwbvqdIHJlnmltIHZsb55lbmlhICIKKworIzogdmVyc2lvbi5jOjEwNDkKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHdvIG1vZGVzICAgICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlIGR2YSByZZ5pbXkgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTA1MworbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIFZpIENvbXBhdGlibGUiCittc2dzdHIgIm1lbnUg2nByYXZ5LT5HbG9i4WxuZSBtb55ub3N0dC0+UHJlcG76nSBWaSBrb21wYXRpYmlsbv0gcmWe7W0iCisKKyM6IHZlcnNpb24uYzoxMDU0Cittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICBwcmUgcHJlZHZvbGVu6SB2bGFzdG5vc3RpIFZpbSAgICIKKworIzogdmVyc2lvbi5jOjExMDAKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICJWQVJPVkFOSUU6IGRldGVrb3ZhbukgV2luZG93cyA5NS85OC9NRSIKKworIzogdmVyc2lvbi5jOjExMDMKK21zZ2lkICJ0eXBlICA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJ6YWRhanRlIDpoZWxwIHdpbmRvd3M5NTxFbnRlcj4gcHJlIHBvZHJvYm5lapppZSBpbmZvcm3hY2llIgorCisjOiB3aW5kb3cuYzoyMDEKK21zZ2lkICJFNDQxOiBUaGVyZSBpcyBubyBwcmV2aWV3IHdpbmRvdyIKK21zZ3N0ciAiRTQ0MTogTmVu4WpkZW7pIJ5pYWRuZSBva25vIG7haL5hZHUiCisKKyM6IHdpbmRvdy5jOjU4MAorbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IE9rbm8gc2EgbmVk4SByb3pkZWxpnSB64XJvdmXyIHRvcGxlZnQgYSBib3RyaWdodCIKKworIzogd2luZG93LmM6MTMzOQorbXNnaWQgIkU0NDM6IENhbm5vdCByb3RhdGUgd2hlbiBhbm90aGVyIHdpbmRvdyBpcyBzcGxpdCIKK21zZ3N0ciAiRTQ0MzogTmVk4SBzYSByb3RvdmGdLCBhayBqZSBpbukgb2tubyByb3pkZWxlbukiCisKKyM6IHdpbmRvdy5jOjE4NDEKK21zZ2lkICJFNDQ0OiBDYW5ub3QgY2xvc2UgbGFzdCB3aW5kb3ciCittc2dzdHIgIkU0NDQ6IFBvc2xlZG7pIG9rbm8gc2EgbmVk4SB6YXR2b3JpnSIKKworIzogd2luZG93LmM6MjUwNQorbXNnaWQgIkFscmVhZHkgb25seSBvbmUgd2luZG93IgorbXNnc3RyICJVniBleGlzdHVqZSBpYmEgamVkbm8gb2tubyIKKworIzogd2luZG93LmM6MjU1MgorbXNnaWQgIkU0NDU6IE90aGVyIHdpbmRvdyBjb250YWlucyBjaGFuZ2VzIgorbXNnc3RyICJFNDQ1OiBJbukgb2tubyBvYnNhaHVqZSB6bWVueSIKKworIzogd2luZG93LmM6NDM3OQorbXNnaWQgIkU0NDY6IE5vIGZpbGUgbmFtZSB1bmRlciBjdXJzb3IiCittc2dzdHIgIkU0NDY6IFBvZCBrdXJ6b3JvbSBzYSBuZW5hY2jhZHphIG7hem92IHP6Ym9ydSIKKworIzogd2luZG93LmM6NDQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ3OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkU0NDc6IFP6Ym9yIFwiJXNcIiBzYSBuZWThIHYgY2RwYXRoIG7hanOdIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjU4NgorbXNnaWQgIkVkaXQgd2l0aCAmbXVsdGlwbGUgVmltcyIKK21zZ3N0ciAiVXByYXZpnSBzIHZpYWNu4XNvYm79Jm0gVmltb20iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NTkyCittc2dpZCAiRWRpdCB3aXRoIHNpbmdsZSAmVmltIgorbXNnc3RyICJVcHJhdmmdIHMgamVkbv1tICZWaW1vbSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo2MDQKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAiVXByYXZpnSBzICZWaW1vbSIKKworIy4gTm93IGNvbmNhdGVuYXRlCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjYyOAorbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICJVcHJhdmmdIHMgZXhpc3R1avpjaW0gVmltb20gLSAmIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjc1MgorbXNnaWQgIkVkaXRzIHRoZSBzZWxlY3RlZCBmaWxlKHMpIHdpdGggVmltIgorbXNnc3RyICJVcHJhdmmdIHZ5YnJhbukgc/pib3J5IHMgVmltb20iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6ODkxIC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY5Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcHJvY2VzczogQ2hlY2sgaWYgZ3ZpbSBpcyBpbiB5b3VyIHBhdGghIgorbXNnc3RyICJDaHliYSB2eXR24XJhY2llaG8gcHJvY2VzdTogU2tvbnRyb2x1anRlLCDoaSBqZSBndmltIHZvIHZhmmVqIGNlc3RlISIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTIgLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDYKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTcwCittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgImNoeWJhIGd2aW1leHQuZGxsIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjkwNQorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAiUHLtbGmaIGRsaOEgY2VzdGEhIgorCisjOiBnbG9iYWxzLmg6OTAwCittc2dpZCAiLS1ObyBsaW5lcyBpbiBidWZmZXItLSIKK21zZ3N0ciAiLS1CdWZmZXIgbmVvYnNhaHVqZSCeaWFkbnkgcmlhZG9rLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTA0MgorbXNnaWQgIkNvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiUHLta2F6IHByZXJ1mmVu/SIKKworIzogZ2xvYmFscy5oOjEwNDMKK21zZ2lkICJBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAiSmUgdnmeYWRvdmFu/SBhcmd1bWVudCIKKworIzogZ2xvYmFscy5oOjEwNDQKK21zZ2lkICJFMTA6IFxcIHNob3VsZCBiZSBmb2xsb3dlZCBieSAvLCA/IG9yICYiCittc2dzdHIgIkUxMDogcG8gXFwgYnkgbWFsbyBuYXNsZWRvdmGdIC8uID8gYWxlYm8gJiIKKworIzogZ2xvYmFscy5oOjEwNDYKK21zZ2lkICJFMTE6IEludmFsaWQgaW4gY29tbWFuZC1saW5lIHdpbmRvdzsgPENSPiBleGVjdXRlcywgQ1RSTC1DIHF1aXRzIgorbXNnc3RyICIiCisiRTExOiBDaHlibv0gcHLta2F6IHYgb2tuZSBwcu1rYXpvdulobyByaWFka3U7IDxFbnRlcj4gc3B1c3TtdGUsIENUUkwtQyAiCisidnlwbmV0ZSIKKworIzogZ2xvYmFscy5oOjEwNDgKK21zZ2lkICJFMTI6IENvbW1hbmQgbm90IGFsbG93ZWQgZnJvbSBleHJjL3ZpbXJjIGluIGN1cnJlbnQgZGlyIG9yIHRhZyBzZWFyY2giCittc2dzdHIgIiIKKyJFMTI6IFBy7WtheiBuaWUgamUgeiBleHJjL3ZpbXJjIHYgYWt0deFsbm9tIGFkcmVz4XJpIGFsZWJvIHByaSBovmFkYW7tIHRhZ3UgIgorInBvdm9sZW79LiIKKworIzogZ2xvYmFscy5oOjEwNDkKK21zZ2lkICJFMTM6IEZpbGUgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxMzogU/pib3IgZXhpc3R1amUgKHBvdZ5pdGUgISBwcmUgdnlu+nRlbmllKSIKKworIzogZ2xvYmFscy5oOjEwNTAKK21zZ2lkICJDb21tYW5kIGZhaWxlZCIKK21zZ3N0ciAiUHLta2F6IHpseWhhbCIKKworIzogZ2xvYmFscy5oOjEwNTEKK21zZ2lkICJJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiVm76dG9ybuEgY2h5YmEiCisKKyM6IGdsb2JhbHMuaDoxMDUyCittc2dpZCAiSW50ZXJydXB0ZWQiCittc2dzdHIgIlByZXJ1mmVu6SIKKworIzogZ2xvYmFscy5oOjEwNTMKK21zZ2lkICJFMTQ6IEludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiRTE0OiBDaHlibuEgYWRyZXNhIgorCisjOiBnbG9iYWxzLmg6MTA1NAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkNoeWJu/SBhcmd1bWVudCIKKworIzogZ2xvYmFscy5oOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBhcmd1bWVudDogJXMiCittc2dzdHIgIkNoeWJu/SBhcmd1bWVudDogJXMiCisKKyM6IGdsb2JhbHMuaDoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTogSW52YWxpZCBleHByZXNzaW9uOiAlcyIKK21zZ3N0ciAiRTE1OiBDaHlibv0gdv1yYXo6ICVzIgorCisjOiBnbG9iYWxzLmg6MTA1OQorbXNnaWQgIkUxNjogSW52YWxpZCByYW5nZSIKK21zZ3N0ciAiRTE2OiBDaHlibv0gcm96c2FoIgorCisjOiBnbG9iYWxzLmg6MTA2MAorbXNnaWQgIkludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAiQ2h5Ym79IHBy7WtheiIKKworIzogZ2xvYmFscy5oOjEwNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3OiBcIiVzXCIgaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIkUxNzogXCIlc1wiIGplIGFkcmVz4XJvbSIKKworIzogZ2xvYmFscy5oOjEwNjUKK21zZ2lkICJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIgorbXNnc3RyICJFMTg6IE5lb+hla+F2YW7pIHpuYWt5IHByZWQgJz0nIgorCisjOiBnbG9iYWxzLmg6MTA2NworbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiBabmHoa2EgbeEgY2h5Ym7pIOjtc2xvIHJpYWRrdSIKKworIzogZ2xvYmFscy5oOjEwNjgKK21zZ2lkICJFMjA6IE1hcmsgbm90IHNldCIKK21zZ3N0ciAiRTIwOiBabmHoa2EgbmllIGplIG5hc3RhdmVu4SIKKworIzogZ2xvYmFscy5oOjEwNjkKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTogTmVk4SBzYSBtZW5pnSwgamUgbmFzdGF2ZW7hIHZvvmJhICdtb2RpZmlhYmxlJyIKKworIzogZ2xvYmFscy5oOjEwNzAKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IFNrcmlwdCB2bm9yZW79IHBy7WxpmiBobGJva28iCisKKyM6IGdsb2JhbHMuaDoxMDcxCittc2dpZCAiRTIzOiBObyBhbHRlcm5hdGUgZmlsZSIKK21zZ3N0ciAiRTIzOiCOaWFkbnkgYWx0ZXJuYXTtdm55IHP6Ym9yIgorCisjOiBnbG9iYWxzLmg6MTA3MgorbXNnaWQgIkUyNDogTm8gc3VjaCBhYmJyZXZpYXRpb24iCittc2dzdHIgIkUyNDogVGFr4SBza3JhdGthIG5lZXhpc3R1amUiCisKKyM6IGdsb2JhbHMuaDoxMDczCittc2dpZCAiTm8gISBhbGxvd2VkIgorbXNnc3RyICIhIG5pZSBqZSBwb3ZvbGVu6SIKKworIzogZ2xvYmFscy5oOjEwNzUKK21zZ2lkICJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICJFMjU6IE5lZOEgc2EgcG91nu2dIEdVSTogbmVib2xvIHphcG51dOkgcHJpIHByZWtsYWRlIHByb2dyYW11IgorCisjOiBnbG9iYWxzLmg6MTA3OAorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI2OiBOZWThIHNhIHBvdZ7tnSBoZWJyZWpza/0gcmWeaW06ICBuZWJvbCB6YXBudXT9IHByaSBwcmVrbGFkZSBwcm9ncmFtdVxuIgorCisjOiBnbG9iYWxzLmg6MTA4MQorbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjc6IE5lZOEgc2EgcG91nu2dIGZhcnNpIHJlnmltOiAgbmVib2wgemFwbnV0/SBwcmkgcHJla2xhZGUgcHJvZ3JhbXVcbiIKKworIzogZ2xvYmFscy5oOjEwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBTa3VwaW5hIHp27XJhem5lbmlhICVzIG5lZXhpc3R1amUiCisKKyM6IGdsb2JhbHMuaDoxMDg2Cittc2dpZCAiRTI5OiBObyBpbnNlcnRlZCB0ZXh0IHlldCIKK21zZ3N0ciAiRTI5OiBaYXRpYb4gbmllIGplIJ5pYWRueSB2bG+eZW79IHRleHQiCisKKyM6IGdsb2JhbHMuaDoxMDg3Cittc2dpZCAiRTMwOiBObyBwcmV2aW91cyBjb21tYW5kIGxpbmUiCittc2dzdHIgIkUzMDogjmlhZG55IHByZWRjaOFkemFq+mNpIHBy7Wthem92/SByaWFkb2siCisKKyM6IGdsb2JhbHMuaDoxMDg4Cittc2dpZCAiRTMxOiBObyBzdWNoIG1hcHBpbmciCittc2dzdHIgIkUzMTogjmlhZG5lIHRha+kgbWFwb3ZhbmllIgorCisjOiBnbG9iYWxzLmg6MTA4OQorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICKOaWFkbmEgemhvZGEiCisKKyM6IGdsb2JhbHMuaDoxMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoOiAlcyIKK21zZ3N0ciAijmlhZG5hIHpob2RhOiAlcyIKKworIzogZ2xvYmFscy5oOjEwOTEKK21zZ2lkICJFMzI6IE5vIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTMyOiCOaWFkbnkgbuF6b3Ygc/pib3J1IgorCisjOiBnbG9iYWxzLmg6MTA5MgorbXNnaWQgIkUzMzogTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzMzogjmlhZG55IHByZWRjaOFkemFq+mNpIHByaXNs+mNoYWr6Y2kgc3By4XZueSB2/XJheiIKKworIzogZ2xvYmFscy5oOjEwOTMKK21zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCittc2dzdHIgIkUzNDogjmlhZG55IHByZWRjaOFkemFq+mNpIHBy7WtheiIKKworIzogZ2xvYmFscy5oOjEwOTQKK21zZ2lkICJFMzU6IE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTM1OiCOaWFkbnkgcHJlZGNo4WR6YWr6Y2kgcmVndWzhcm55IHb9cmF6IgorCisjOiBnbG9iYWxzLmg6MTA5NQorbXNnaWQgIk5vIHJhbmdlIGFsbG93ZWQiCittc2dzdHIgIlJvenNhaCBuaWUgamUgcG92b2xlbv0iCisKKyM6IGdsb2JhbHMuaDoxMDk3Cittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjogTmVkb3N0YXRvayBtaWVzdGEiCisKKyM6IGdsb2JhbHMuaDoxMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJOZWThIHNhIHZ5dHZvcmmdIHP6Ym9yICVzIgorCisjOiBnbG9iYWxzLmg6MTEwMAorbXNnaWQgIkNhbid0IGdldCB0ZW1wIGZpbGUgbmFtZSIKK21zZ3N0ciAiTmVk4SBzYSB67XNrYZ0gbuF6b3YgZG/oYXNu6WhvIHP6Ym9ydSIKKworIzogZ2xvYmFscy5oOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJOZWThIHNhIG90dm9yaZ0gc/pib3IgJXMiCisKKyM6IGdsb2JhbHMuaDoxMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHJlYWQgZmlsZSAlcyIKK21zZ3N0ciAiTmVk4SBzYSDo7XRhnSBz+mJvciAlcyIKKworIzogZ2xvYmFscy5oOjExMDMKK21zZ2lkICJFMzc6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUzNzogTmV1bG+eZW7pIHptZW55IChwb3WeaXRlICEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGdsb2JhbHMuaDoxMTA0Cittc2dpZCAiRTM4OiBOdWxsIGFyZ3VtZW50IgorbXNnc3RyICJFMzg6IE51bG92/SBhcmd1bWVudCIKKworIzogZ2xvYmFscy5oOjExMDYKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiBP6GFr4XZhbukg6O1zbG8iCisKKyM6IGdsb2JhbHMuaDoxMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDogTmVk4SBzYSBvdHZvcmmdIGNoeWJvdv0gc/pib3IgJXMiCisKKyM6IGdsb2JhbHMuaDoxMTEyCittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiBOZWRvc3RhdG9rIHBhbeR0aSEiCisKKyM6IGdsb2JhbHMuaDoxMTE1Cittc2dpZCAiUGF0dGVybiBub3QgZm91bmQiCittc2dzdHIgIlZ6b3IgbmVu4WpkZW79IgorCisjOiBnbG9iYWxzLmg6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIlZ6b3IgbmVu4WpkZW79OiAlcyIKKworIzogZ2xvYmFscy5oOjExMTgKK21zZ2lkICJBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJBcmd1bWVudCBtdXPtIGJ5nSBrbGFkbv0iCisKKyM6IGdsb2JhbHMuaDoxMTIwCittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0MjogjmlhZG5lIGNoeWJ5IgorCisjOiBnbG9iYWxzLmg6MTEyMgorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0MzogUG+aa29kZW79IHJlnWF6YWMgcHJlIHZ5aL5hZOF2YW5pZSIKKworIzogZ2xvYmFscy5oOjExMjMKK21zZ2lkICJFNDQ6IENvcnJ1cHRlZCByZWdleHAgcHJvZ3JhbSIKK21zZ3N0ciAiRTQ0OiBQb5prb2Rlbv0gcmVnZXhwIHByb2dyYW0iCisKKyM6IGdsb2JhbHMuaDoxMTI0Cittc2dpZCAiRTQ1OiAncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ1OiBuYXN0YXZlbuEgdm++YmEgJ2liYV9wcmVf6O10YW5pZScgKHBvdZ5pdGUgISBwcmUgdnlu+nRlbmllKSIKKworIzogZ2xvYmFscy5oOjExMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiCittc2dzdHIgIkU0NjogTmVk4SBzYSBuYXN0YXZpnSBwcmVtZW5u4SBpYmFfcHJlX+jtdGFuaWUgXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTEyOQorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0NzogQ2h5YmEgcHJpIOjtdGFu7SBjaHlib3bpaG8gc/pib3J1IgorCisjOiBnbG9iYWxzLmg6MTEzMgorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiBOaWUgamUgdiBiZXpwZehub3N0bmVqIHNjaHLhbmtlIHBvdm9sZW7pIgorCisjOiBnbG9iYWxzLmg6MTEzNAorbXNnaWQgIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIKK21zZ3N0ciAiRTQ5OiBDaHlibuEgaG9kbm90YSBwcmVtZW5uZWogJ3Njcm9sbCciCisKKyM6IGdsb2JhbHMuaDoxMTM1Cittc2dpZCAiRTkxOiAnc2hlbGwnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiRTkxOiB2b75iYSAnc2hlbGwnIGplIHBy4XpkbmEiCisKKyM6IGdsb2JhbHMuaDoxMTM2Cittc2dpZCAiRTcyOiBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUiCittc2dzdHIgIkU3MjogQ2h5YmEgcHJpIHV6YXR24XJhbu0gb2RrbGFkYWNpZWhvIHP6Ym9ydSIKKworIzogZ2xvYmFscy5oOjExMzcKK21zZ2lkICJFNzM6IHRhZyBzdGFjayBlbXB0eSIKK21zZ3N0ciAiRTczOiB6b3puYW0gdGFnb3YgamUgcHLhemRueSIKKworIzogZ2xvYmFscy5oOjExMzgKK21zZ2lkICJFNzQ6IENvbW1hbmQgdG9vIGNvbXBsZXgiCittc2dzdHIgIkU3NDogUHLta2F6IGplIHBy7WxpmiB6bG+eaXT9IgorCisjOiBnbG9iYWxzLmg6MTEzOQorbXNnaWQgIkU3NTogTmFtZSB0b28gbG9uZyIKK21zZ3N0ciAiRTc1OiBO4XpvdiBqZSBwcu1saZogZGxo/SIKKworIzogZ2xvYmFscy5oOjExNDAKK21zZ2lkICJFNzY6IFRvbyBtYW55IFsiCittc2dzdHIgIkU3NjogUHLtbGmaIG1ub2hvIFsiCisKKyM6IGdsb2JhbHMuaDoxMTQxCittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IFBy7WxpmiBtbm9obyBu4Xp2b3Ygc/pib3JvdiIKKworIzogZ2xvYmFscy5oOjExNDIKK21zZ2lkICJUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJOYWRieXRv6G7pIHpuYWt5IG5hIGtvbmNpIgorCisjOiBnbG9iYWxzLmg6MTE0MworbXNnaWQgIkU3ODogVW5rbm93biBtYXJrIgorbXNnc3RyICJFNzg6IE5lem7hbWEgem5h6GthIgorCisjOiBnbG9iYWxzLmg6MTE0NAorbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTogTmVk4SBzYSBleHBhbmRvdmGdIJ5vbO1rb3bpIHpuYWt5ICh3aWxkY2FyZHMpIgorCisjOiBnbG9iYWxzLmg6MTE0NQorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiBDaHliYSBwcmkgdWtsYWRhbu0iCisKKyM6IGdsb2JhbHMuaDoxMTQ2Cittc2dpZCAiWmVybyBjb3VudCIKK21zZ3N0ciAiTnVsb3b9IHBv6GV0IgorCisjOiBnbG9iYWxzLmg6MTE0OAorbXNnaWQgIkU4MTogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQiCittc2dzdHIgIkU4MTogUG91nml0aWUgPFNJRD4gbWltbyBrb250ZXh0IHNrcmlwdHUiCisKKyM6IGdsb2JhbHMuaDoxMTUxCittc2dpZCAiRTQ0OTogSW52YWxpZCBleHByZXNzaW9uIHJlY2VpdmVkIgorbXNnc3RyICJFNDQ5OiBCb2wgcHJpamF0/SBjaHlibv0gdv1yYXoiCisKZGlmZiAtLWdpdCBhL3NyYy9wby9zay5wbyBiL3NyYy9wby9zay5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGZlODdjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL3NrLnBvCkBAIC0wLDAgKzEsNTk5OCBAQAorIyBTbG92YWsgdHJhbnNsYXRpb24gb2YgdmltCisjIE1hcnRpbiBMYWNrbyA8bGFja29AaG9zdC5zaz4sIDIwMDEuCisjCisjIE9yaWdpbmFsIHRyYW5zbGF0aW9ucy4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHZpbVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDAyLTAzLTI2IDIxOjU0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAyLTAzLTI2IDIxOjU4Q0VTVFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWFydGluIExhY2tvIDxsYWNrb0Bob3N0LnNrPlxuIgorIkxhbmd1YWdlLVRlYW06IFNsb3ZhayA8c2staTE4bkBsaXN0cy5saW51eC5zaz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0yXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtR2VuZXJhdG9yOiBLQmFiZWwgMC45LjVcbiIKKworIzogYnVmZmVyLmM6OTcKK21zZ2lkICJFODI6IENhbm5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLCBleGl0aW5nLi4uIgorbXNnc3RyICJFODI6IE5lZOEgc2EgYWxva292YbsgYnVmZmVyLCBrb27o7W0uLi4iCisKKyM6IGJ1ZmZlci5jOjEwMAorbXNnaWQgIkU4MzogQ2Fubm90IGFsbG9jYXRlIGJ1ZmZlciwgdXNpbmcgb3RoZXIgb25lLi4uIgorbXNnc3RyICJFODM6IE5lZOEgc2EgYWxva292YbsgYnVmZmVyLCBwb3W+aWplbSBpbv0uLi4iCisKKyM6IGJ1ZmZlci5jOjcwNgorbXNnaWQgIk5vIGJ1ZmZlcnMgd2VyZSB1bmxvYWRlZCIKK21zZ3N0ciAirmlhZG55IGJ1ZmZlciBuZWJvbCBu4WpkZW79IgorCisjOiBidWZmZXIuYzo3MDgKK21zZ2lkICJObyBidWZmZXJzIHdlcmUgZGVsZXRlZCIKK21zZ3N0ciAirmlhZG55IGJ1ZmZlciBuZWJvbCB2eW1hemFu/SIKKworIzogYnVmZmVyLmM6NzEwCittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAirmlhZG55IGJ1ZmZlciBuZWJvbCB2eW1hemFu/SIKKworIzogYnVmZmVyLmM6NzE4Cittc2dpZCAiMSBidWZmZXIgdW5sb2FkZWQiCittc2dzdHIgInBv6GV0IGRlYWt0aXZvdmFu/WNoIGJ1ZmZlcm92OiAxIgorCisjOiBidWZmZXIuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB1bmxvYWRlZCIKK21zZ3N0ciAicG/oZXQgZGVha3Rpdm92YW79Y2ggYnVmZmVyb3Y6ICVkIgorCisjOiBidWZmZXIuYzo3MjUKK21zZ2lkICIxIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICJwb+hldCB2eW1hemFu/WNoIGJ1ZmZlcm92OiAxIgorCisjOiBidWZmZXIuYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICJwb+hldCB2eW1hemFu/WNoIGJ1ZmZlcm92OiAlZCIKKworIzogYnVmZmVyLmM6NzMyCittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICJwb+hldCB2eW1hemFu/WNoIGJ1ZmZlcm92OiAxIgorCisjOiBidWZmZXIuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB3aXBlZCBvdXQiCittc2dzdHIgInBv6GV0IHZ5bWF6YW79Y2ggYnVmZmVyb3Y6ICVkIgorCisjOiBidWZmZXIuYzo3OTEKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiBOZWJvbCBu4WpkZW79IL5pYWRueSB6bWVuZW79IGJ1ZmZlciIKKworIy4gYmFjayB3aGVyZSB3ZSBzdGFydGVkLCBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyM6IGJ1ZmZlci5jOjgzMAorbXNnaWQgIkU4NTogVGhlcmUgaXMgbm8gbGlzdGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTg1OiBOZW5huWllbCBzb20gvmlhZG55IGJ1ZmZlciIKKworIzogYnVmZmVyLmM6ODQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQ2Fubm90IGdvIHRvIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU4NjogTmVk4SBzYSBwcmVza2/oabsgbmEgYnVmZmVyICVsZCIKKworIzogYnVmZmVyLmM6ODQ1Cittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6IFphIHBvc2xlZG79IGJ1ZmZlciBzYSBuZWThIHByZXNrb+hpuyIKKworIzogYnVmZmVyLmM6ODQ3Cittc2dpZCAiRTg4OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg4OiBQcmVkIHBydv0gYnVmZmVyIHNhIG5lZOEgcHJlc2tv6Gm7IgorCisjOiBidWZmZXIuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg5OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyICVsZCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFODk6IFptZW55IHYgYnVmZmVyaSAlbGQgbmVib2x5IHVsb75lbukgKCEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGJ1ZmZlci5jOjg4NworbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiBQb3NsZWRu/SBidWZmZXIgc2EgbmVk4SBvZHN0cuFuabsiCisKKyM6IGJ1ZmZlci5jOjEzMzcKK21zZ2lkICJXMTQ6IFdhcm5pbmc6IExpc3Qgb2YgZmlsZSBuYW1lcyBvdmVyZmxvdyIKK21zZ3N0ciAiVzE0OiBWYXJvdmFuaWU6IHByZXRl6GVuaWUgem96bmFtdSBzIG7henZhbWkgc/pib3JvdiIKKworIzogYnVmZmVyLmM6MTUwMworIywgYy1mb3JtYXQKK21zZ2lkICJFOTI6IEJ1ZmZlciAlbGQgbm90IGZvdW5kIgorbXNnc3RyICJFOTI6IGJ1ZmZlciAlbGQgbmVu4WpkZW79IgorCisjOiBidWZmZXIuYzoxNzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5MzogVnpvcnUgJXMgdnlob3Z1amUgdmlhYyBidWZmZXJvdiIKKworIzogYnVmZmVyLmM6MTczMQorIywgYy1mb3JtYXQKK21zZ2lkICJFOTQ6IE5vIG1hdGNoaW5nIGJ1ZmZlciBmb3IgJXMiCittc2dzdHIgIkU5NDogVnpvcnUgJXMgbmV2eWhvdnVqZSC+aWFkbnkgYnVmZmVyIgorCisjOiBidWZmZXIuYzoyMTM2IGV4X2RvY21kLmM6NjA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCIKK21zZ3N0ciAicmlhZG9rICVsZCIKKworIzogYnVmZmVyLmM6MjIxOQorbXNnaWQgIkU5NTogQnVmZmVyIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFOTU6IEJ1ZmZlciB0YWvpaG90byBtZW5hIHW+IGV4aXN0dWplIgorCisjOiBidWZmZXIuYzoyNTEyCittc2dpZCAiIFtNb2RpZmllZF0iCittc2dzdHIgIiBbem1lbmVu/V0iCisKKyM6IGJ1ZmZlci5jOjI1MTcKK21zZ2lkICJbTm90IGVkaXRlZF0iCittc2dzdHIgIltuZXVwcmF2b3Zhbv1dIgorCisjOiBidWZmZXIuYzoyNTIyCittc2dpZCAiW05ldyBmaWxlXSIKK21zZ3N0ciAiW25vdv0gc/pib3JdIgorCisjOiBidWZmZXIuYzoyNTIzCittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW2NoeWJ5IHByaSDo7XRhbu1dIgorCisjOiBidWZmZXIuYzoyNTI1IGZpbGVpby5jOjE3NzcKK21zZ2lkICJbcmVhZG9ubHldIgorbXNnc3RyICJbaWJhIHByZSDo7XRhbmllXSIKKworIzogYnVmZmVyLmM6MjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgLS0lZCUlLS0iCittc2dzdHIgIjEgcmlhZG9rIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAtLSVkJSUtLSIKK21zZ3N0ciAicmlhZGtvdjogJWxkIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICJyaWFkb2sgJWxkIHogJWxkIC0tJWQlJS0tIHN05XBlYyIKKworIzogYnVmZmVyLmM6MjYzNworbXNnaWQgIltObyBmaWxlXSIKK21zZ3N0ciAiW75pYWRueSBz+mJvcl0iCisKKyMuIG11c3QgYmUgYSBoZWxwIGJ1ZmZlcgorIzogYnVmZmVyLmM6MjY3NworbXNnaWQgImhlbHAiCittc2dzdHIgInBvbW9jbu1rIgorCisjOiBidWZmZXIuYzozMTg2IHNjcmVlbi5jOjQ3NDMKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIltwb21vY27ta10iCisKKyM6IGJ1ZmZlci5jOjMyMTggc2NyZWVuLmM6NDc0OQorbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW27haLVhZF0iCisKKyM6IGJ1ZmZlci5jOjM0MjQKK21zZ2lkICJBbGwiCittc2dzdHIgIla5ZXRrbyIKKworIzogYnVmZmVyLmM6MzQyNAorbXNnaWQgIkJvdCIKK21zZ3N0ciAiS29uaWVjIgorCisjOiBidWZmZXIuYzozNDI2Cittc2dpZCAiVG9wIgorbXNnc3RyICJaYehpYXRvayIKKworIzogYnVmZmVyLmM6NDE2MgorbXNnaWQgIiIKKyJcbiIKKyIjIEJ1ZmZlciBsaXN0OlxuIgorbXNnc3RyICIiCisiXG4iCisiIyB6b3puYW0gYnVmZmVyb3Y6XG4iCisKKyM6IGJ1ZmZlci5jOjQxOTUKK21zZ2lkICJbRXJyb3IgTGlzdF0iCittc2dzdHIgIlt6b3puYW0gY2j9Yl0iCisKKyM6IGJ1ZmZlci5jOjQyMDggbWVtbGluZS5jOjE1MTMKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIlu+aWFkbnkgc/pib3JdIgorCisjOiBidWZmZXIuYzo0NDI4Cittc2dpZCAiIgorIlxuIgorIi0tLSBTaWducyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gWm5ha3kgLS0tIgorCisjOiBidWZmZXIuYzo0NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNpZ25zIGZvciAlczoiCittc2dzdHIgIlpuYWt5IHByZSAlczoiCisKKyM6IGJ1ZmZlci5jOjQ0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgIGxpbmU9JWxkICBpZD0lZCAgbWVubz0lcyIKKworIzogZGlmZi5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJFOTY6IENhbiBub3QgZGlmZiBtb3JlIHRoYW4gJWxkIGJ1ZmZlcnMiCittc2dzdHIgIkU5NjogTmVt9L5lbSBwb3Jvdm5huyB2aWFjIGFrbyAlbGQgYnVmZmVyb3YiCisKKyM6IGRpZmYuYzo2NDgKK21zZ2lkICJFOTc6IENhbm5vdCBjcmVhdGUgZGlmZnMiCittc2dzdHIgIkU5NzogTmVkYWr6IHNhIHZ5dHZvcmm7IHBvcm92bmFuaWEiCisKKyM6IGRpZmYuYzo3NDcKK21zZ2lkICJQYXRjaCBmaWxlIgorbXNnc3RyICJPcHJhdm79IHP6Ym9yIgorCisjOiBkaWZmLmM6OTkxCittc2dpZCAiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIKK21zZ3N0ciAiRTk4OiBOZWThIHNhIOjtdGG7IHb9c3R1cCBwb3Jvdm5hbmlhIgorCisjOiBkaWZmLmM6MTczMgorbXNnaWQgIkU5OTogQ3VycmVudCBidWZmZXIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTk5OiBBa3R14WxueSBidWZmZXIgbmllIGplIHYgcG9yb3ZuYWNvbSBt82RlIgorCisjOiBkaWZmLmM6MTc0NAorbXNnaWQgIkUxMDA6IE5vIG90aGVyIGJ1ZmZlciBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDA6IFYgcG9yb3Zu4XZhY29tIG3zZGUgc2EgbmVuYWNo4WR6YSBpbv0gYnVmZmVyIgorCisjOiBkaWZmLmM6MTc1MgorbXNnaWQgIkUxMDE6IE1vcmUgdGhhbiB0d28gYnVmZmVycyBpbiBkaWZmIG1vZGUsIGRvbid0IGtub3cgd2hpY2ggb25lIHRvIHVzZSIKK21zZ3N0ciAiRTEwMTogVmlhYyBha28gZHZhIGJ1ZmZlcnkgdiBwb3Jvdm7hdmFjb20gbfNkZTsgbmV2aWVtLCBrdG9y/SBwb3W+absiCisKKyM6IGRpZmYuYzoxNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDI6IENhbid0IGZpbmQgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTEwMjogTmVk4SBzYSBu4WpzuyBidWZmZXIgXCIlc1wiIgorCisjOiBkaWZmLmM6MTc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAzOiBCdWZmZXIgXCIlc1wiIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgbmllIGplIHYgcG9yb3Zu4XZhY29tIG3zZGUiCisKKyM6IGRpZ3JhcGguYzoyMTcyCittc2dpZCAiRTEwNDogRXNjYXBlIG5vdCBhbGxvd2VkIGluIGRpZ3JhcGgiCittc2dzdHIgIkUxMDQ6IGRpYWdyYXBoIG5lc21pZSBvYnNhaG92YbsgRXNjYXBlIgorCisjOiBkaWdyYXBoLmM6MjM0NAorbXNnaWQgIktleW1hcCBmaWxlIG5vdCBmb3VuZCIKK21zZ3N0ciAiTWFwYSBrbOF2ZXMgbmVu4WpkZW7hIgorCisjOiBkaWdyYXBoLmM6MjM3MQorbXNnaWQgIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTEwNTogUG91vml0ZSA6bG9hZGtleW1hcCB2IHP6Ym9yZSwga3Rvcv0gbmllIGplIHpkcm9qb3b9IgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiBEb3Bs8m92YW5pZSBrtfrob3b9Y2ggc2xvdiAoXk4vXlApIgorCisjLiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4KKyM6IGVkaXQuYzo0MQorbXNnaWQgIiBeWCBtb2RlICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eVi9eTi9eUCkiCittc2dzdHIgIiBeWCByZb5pbSAoXkUvXlkvXkwvXl0vXkYvXkkvXksvXkQvXlYvXk4vXlApIgorCisjLiBTY3JvbGwgaGFzIGl0J3Mgb3duIG1zZ3MsIGluIGl0J3MgcGxhY2UgdGhlcmUgaXMgdGhlIG1zZyBmb3IgbG9jYWwKKyMuICogY3RybF94X21vZGUgPSAwIChlZyBjb250aW51ZV9zdGF0dXMgJiBDT05UX0xPQ0FMKSAgLS0gQWNldmVkbworIzogZWRpdC5jOjQ0Cittc2dpZCAiIEtleXdvcmQgTG9jYWwgY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIgTWllc3RuZSBkb3Dl8mFuaWUga7X66G92/WNoIHNsb3YgKF5OL15QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkwvXk4vXlApIgorbXNnc3RyICIgRG9wbPJvdmFuaWUgY2Vs/WNoIHJpYWRrb3YgKF5ML15OL15QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRi9eTi9eUCkiCittc2dzdHIgIiBEb3Bs8m92YW5pZSBu4Xp2b3Ygc/pib3JvdiAoXkYvXk4vXlApIgorCisjOiBlZGl0LmM6NDcKK21zZ2lkICIgVGFnIGNvbXBsZXRpb24gKF5dL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3ZhbmllIHRhZ292ICheXS9eTi9eUCkiCisKKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIgRG9wbPJvdmFuaWUgdnpvcnUgY2llc3QgKF5OL15QKSIKKworIzogZWRpdC5jOjQ5Cittc2dpZCAiIERlZmluaXRpb24gY29tcGxldGlvbiAoXkQvXk4vXlApIgorbXNnc3RyICIgRG9wbPJvdmFuaWUgZGVmaW7tY2ntICheRC9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3ZhbmllIHBvZLVhIHNsb3Zu7WthICheSy9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MgorbXNnaWQgIiBUaGVzYXVydXMgY29tcGxldGlvbiAoXlQvXk4vXlApIgorbXNnc3RyICIgRG9wbPJvdmFuaWUgcG9ktWEgdGV6YXVydSAoXlQvXk4vXlApIgorCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WL15OL15QKSIKK21zZ3N0ciAiIERvcGzyb3byb3ZhbmllIHBy7Wthem926WhvIHJpYWRrYSAoXlYvXk4vXlApIgorCisjOiBlZGl0LmM6NTYKK21zZ2lkICJIaXQgZW5kIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAiS29uaWVjIG9kc3RhdmNhIgorCisjOiBlZGl0LmM6OTA3Cittc2dpZCAiJ3RoZXNhdXJ1cycgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJ2b7ViYSAndGhlc2F1cnVzJyBqZSBwcuF6ZG5hIgorCisjOiBlZGl0LmM6MTA4MworbXNnaWQgIidkaWN0aW9uYXJ5JyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgInZvtWJhICdkaWN0aW9uYXJ5JyBqZSBwcuF6ZG5hIgorCisjOiBlZGl0LmM6MjAwNworIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAicHJlaLVhZOF2YW0gc2xvdm7tayAlcyIKKworIzogZWRpdC5jOjIxOTgKK21zZ2lkICIgKGluc2VydCkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoaW5zZXJ0KSBSb2xvdmFuaWUgKF5FL15ZKSIKKworIzogZWRpdC5jOjIyMDAKK21zZ2lkICIgKHJlcGxhY2UpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKHJlcGxhY2UpIFJvbG92YW5pZSAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIlByZWi1YWThdmFtOiAlcyIKKworIzogZWRpdC5jOjI1NDcKK21zZ2lkICJTY2FubmluZyB0YWdzLiIKK21zZ3N0ciAiUHJlaLVhZOF2YW0gdGFneS4iCisKKyM6IGVkaXQuYzozMjA3Cittc2dpZCAiIEFkZGluZyIKK21zZ3N0ciAiIFByaWThdmFtIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjMyNTYKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIEi1YWThbS4uLiIKKworIzogZWRpdC5jOjMzMTIKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICJW/WNob2R6aWEgcG9kb2JhIgorCisjOiBlZGl0LmM6MzMxNworbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICJTbG92byB6IGlu6WhvIHJpYWRrdSIKKworIzogZWRpdC5jOjMzMjIKK21zZ2lkICJUaGUgb25seSBtYXRjaCIKK21zZ3N0ciAiSmVkaW7hIHpob2RhIgorCisjOiBlZGl0LmM6MzM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYXRjaCAlZCBvZiAlZCIKK21zZ3N0ciAiemhvZGEgJWQgeiAlZCIKKworIzogZWRpdC5jOjMzODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgInpob2RhICVkIgorCisjOiBldmFsLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDY6IFVua25vd24gdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwNjogTmV6buFtYSBwcmVtZW5u4TogXCIlc1wiIgorCisjOiBldmFsLmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDc6IE1pc3NpbmcgYnJhY2VzOiAlcyIKK21zZ3N0ciAiRTEwNzogQ2j9Ymr6IHrhdm9ya3k6ICVzIgorCisjOiBldmFsLmM6MTA1NyBldmFsLmM6MTA3MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTA4OiBObyBzdWNoIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDg6IFByZW1lbm7hIFwiJXNcIiBuZWV4aXN0dWplIgorCisjOiBldmFsLmM6MTMxNQorbXNnaWQgIkUxMDk6IE1pc3NpbmcgJzonIGFmdGVyICc/JyIKK21zZ3N0ciAiRTEwOTogUG8gJz8nIGNo/WJhICc6JyIKKworIzogZXZhbC5jOjE5MjkKK21zZ2lkICJFMTEwOiBNaXNzaW5nICcpJyIKK21zZ3N0ciAiRTExMDogQ2j9YmEgJyknIgorCisjOiBldmFsLmM6MTk3OQorbXNnaWQgIkUxMTE6IE1pc3NpbmcgJ10nIgorbXNnc3RyICJFMTExOiBDaP1iYSAnXSciCisKKyM6IGV2YWwuYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIgorbXNnc3RyICJFMTEyOiBDaP1iYSBtZW5vIHZvtWJ5OiAlcyIKKworIzogZXZhbC5jOjIwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMzogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMTEzOiBOZXpu4W1hIHZvtWJhOiAlcyIKKworIzogZXZhbC5jOjIxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IENo/WJq+iB1dm9kem92a3k6ICVzIgorCisjOiBldmFsLmM6MjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE1OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNTogQ2j9Ymr6IHV2b2R6b3ZreTogJXMiCisKKyM6IGV2YWwuYzoyNTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTExNjogQ2h5Ym7pIGFyZ3VtZW50eSBwcmUgZnVua2NpdSAlcyIKKworIzogZXZhbC5jOjI1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNzogVW5rbm93biBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTc6IE5lem7hbWEgZnVua2NpYTogJXMiCisKKyM6IGV2YWwuYzoyNTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTg6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE4OiBQcu1sabkgbW5vaG8gYXJndW1lbnRvdiBwcmUgZnVua2NpdSAlcyIKKworIzogZXZhbC5jOjI1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOTogUHLtbGm5IG3hbG8gYXJndW1lbnRvdiBwcmUgZnVua2NpdSAlcyIKKworIzogZXZhbC5jOjI1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMDogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQ6ICVzIgorbXNnc3RyICJFMTIwOiBQb3W+aXRpZSA8U0lEPiBtaW1vIGtvbnRleHQgc2tyaXB0dTogJXMiCisKKyM6IGV2YWwuYzozMTcyIGd1aS5jOjM5ODQKK21zZ2lkICImT2siCittc2dzdHIgIiZPayIKKworIzogZXZhbC5jOjM2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQgcmlhZGt5OiAiCisKKyM6IGV2YWwuYzo0Nzk0Cittc2dpZCAiIgorIiZPS1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImT2tcbiIKKyImWnJ1uWm7IgorCisjOiBldmFsLmM6NTYyNgorbXNnaWQgIkUyNDA6IE5vIGNvbm5lY3Rpb24gdG8gVmltIHNlcnZlciIKK21zZ3N0ciAiRTI0MDogTmVleGlzdHVqZSBwcmlwb2plbmllIGsgVmltIHNlcnZlcnUiCisKKyM6IGV2YWwuYzo1NzE2Cittc2dpZCAiRTI3NzogVW5hYmxlIHRvIHJlYWQgYSBzZXJ2ZXIgcmVwbHkiCittc2dzdHIgIkUyMjc6IE5lbfS+ZW0g6O10Ybsgb2Rwb3Zl7yBzZXJ2cmEiCisKKyM6IGV2YWwuYzo1NzQxCittc2dpZCAiRTI1ODogVW5hYmxlIHRvIHNlbmQgdG8gY2xpZW50IgorbXNnc3RyICJFMjU4OiBOZW30vmVtIHBvc2xhuyBrbGllbnRvdmkiCisKKyM6IGV2YWwuYzo1Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiBOZW30vmVtIHBvc2xhuyBuYSAlcyIKKworIzogZXZhbC5jOjU4ODQKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIihDaHlibv0pIgorCisjOiBldmFsLmM6Njg5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgorbXNnc3RyICJFMTIxOiBOZWRlZmlub3ZhbuEgcHJlbWVubuE6ICVzIgorCisjOiBldmFsLmM6NzU5MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgdXNlICEgdG8gcmVwbGFjZSIKK21zZ3N0ciAiRTExMjogRnVua2NpYSAlcyB1viBleGlzdHVqZS4gUG91vml0ZSAhIHByZSBqZWogbmFocmFkZW5pZS4iCisKKyM6IGV2YWwuYzo3NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjM6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMjM6IE5lZGVmaW5vdmFu4SBmdW5rY2lhOiAlcyIKKworIzogZXZhbC5jOjc2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyNDogTWlzc2luZyAnKCc6ICVzIgorbXNnc3RyICJFMTI0OiBDaP1iYSAnKCc6ICVzIgorCisjOiBldmFsLmM6NzY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNTogTmVwcu1zdHVwbv0gYXJndW1lbnQ6ICVzIgorCisjOiBldmFsLmM6Nzc2NgorbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiBDaP1iYSA6ZW5kZnVuY3Rpb24iCisKKyM6IGV2YWwuYzo3ODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjc6IENhbm5vdCByZWRlZmluZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTI3OiBOZWThIHNhIHByZWRlZmlub3ZhuyBmdW5rY2lhICVzOiBqZSBwb3W+7XZhbuEiCisKKyM6IGV2YWwuYzo3OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6IE7hem92IGZ1bmtjaWUgbXVz7SB6YejtbmG7IHZltWv9bSBw7XNtZW5vbTogJXMiCisKKyM6IGV2YWwuYzo3OTA5Cittc2dpZCAiRTEyOTogRnVuY3Rpb24gbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTEyOTogSmUgdnm+YWRvdmFu6SBtZW5vIGZ1bmtjaWUiCisKKyM6IGV2YWwuYzo4MDAyCittc2dpZCAiZnVuY3Rpb24gIgorbXNnc3RyICJmdW5rY2lhICIKKworIzogZXZhbC5jOjgxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMDogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEzMDogTmVkZWZpbm92YW7hIGZ1bmtjaWE6ICVzIgorCisjOiBldmFsLmM6ODEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTMxOiBDYW5ub3QgZGVsZXRlIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMzE6IE5lZOEgc2EgdnltYXphuyBmdW5rY2lhICVzOiBqZSB1viBwb3W+7XZhbuEiCisKKyM6IGV2YWwuYzo4MTY5Cittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiRTEzMjogWmFub3JlbmllIGZ1bmtjae0gamUgaGxiuWllIG5lviAnbWF4ZnVuY2RlcHRoJyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYWxsaW5nICVzIgorbXNnc3RyICJ2b2zhbSAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODI0NSBleF9jbWRzMi5jOjE5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAicG9rcmHodWplbSB2ICVzIgorCisjOiBldmFsLmM6ODI5OQorbXNnaWQgIkUxMzM6IDpyZXR1cm4gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTMzOiA6cmV0dXJuIG1pbW8gZnVua2NpdSIKKworIzogZXZhbC5jOjgzNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgImRva29u6GVu6SAlcy4gTuF2cmF0b3bhIGhvZG5vdGEgJWxkIgorCisjOiBldmFsLmM6ODM4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICJkb2tvbuhlbukgJXMuIE7hdnJhdG924SBob2Rub3RhIFwiJXNcIiIKKworIzogZXZhbC5jOjg1MjEKK21zZ2lkICIiCisiXG4iCisiIyBnbG9iYWwgdmFyaWFibGVzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBnbG9i4WxuZSBwcmVtZW5u6TpcbiIKKworIzogZXhfY21kcy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2N0YWwgJTAzbyIKK21zZ3N0ciAiPCVzPiVzJXMgICVkLCAguWVzdG7hc3Rrb3ZvICUwMngsICBvc21p6Gtvdm8gJTAzbyIKKworIzogZXhfY21kcy5jOjQyOAorbXNnaWQgIkUxMzQ6IE1vdmUgbGluZXMgaW50byB0aGVtc2VsdmVzIgorbXNnc3RyICJFMTM0OiBQcmVrcnl0aWUgcmlhZGtvdiBzZWJvdSBzYW39bWkiCisKKyM6IGV4X2NtZHMuYzo0OTcKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgInBv6GV0IHByZXJ1uWVu/WNoIHJpYWRrb3Y6IDEiCisKKyM6IGV4X2NtZHMuYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIG1vdmVkIgorbXNnc3RyICJwb+hldCBwcmVydbllbv1jaCByaWFka292OiAlbGQiCisKKyM6IGV4X2NtZHMuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICJwb+hldCBmaWx0cm92YW79Y2ggcmlhZGtvdjogJWxkIgorCisjOiBleF9jbWRzLmM6OTE4Cittc2dpZCAiRTEzNTogKkZpbHRlciogQXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTEzNTogQXV0b21hdGlja+kgcHLta2F6eSAqRmlsdGVyKiBuZXNtaWUgbWVuabsgYWt0deFsbnkgYnVmZmVyIgorCisjOiBleF9jbWRzLmM6MTAwMworbXNnaWQgIltObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZV1cbiIKK21zZ3N0ciAiW05ldWxvvmVu6SB6bWVueV1cbiIKKworIzogZXhfY21kcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmltaW5mbzogJXMgaW4gbGluZTogIgorbXNnc3RyICJ2aW1pbmZvOiAlcyBuYSByaWFka3U6ICIKKworIzogZXhfY21kcy5jOjEyNTMKK21zZ2lkICJFMTM2OiB2aW1pbmZvOiBUb28gbWFueSBlcnJvcnMsIHNraXBwaW5nIHJlc3Qgb2YgZmlsZSIKK21zZ3N0ciAiRTEzNjogdmltaW5mbzogcHLtbGm5IG1ub2hvIGNo/WIsIHByZXNrYWt1amVtIHpieXRvayBz+mJvcnUiCisKKyM6IGV4X2NtZHMuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAiyO10YW0gdmltaW5mbyBz+mJvciBcIiVzXCIlcyVzJXMiCisKKyM6IGV4X2NtZHMuYzoxMjgzCittc2dpZCAiIGluZm8iCittc2dzdHIgIiBpbmZvcm3hY2llIgorCisjOiBleF9jbWRzLmM6MTI4NAorbXNnaWQgIiBtYXJrcyIKK21zZ3N0ciAiIHpuYehreSIKKworIzogZXhfY21kcy5jOjEyODUKK21zZ2lkICIgRkFJTEVEIgorbXNnc3RyICIgWkxZSEFMTyIKKworIzogZXhfY21kcy5jOjEzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IERvIHZpbWluZm8gc/pib3J1ICVzIHNhIG5lZOEgemFwaXNvdmG7IgorCisjOiBleF9jbWRzLmM6MTUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiBOZWThIHNhIHVsb75puyB2aW1pbmZvIHP6Ym9yICVzISIKKworIzogZXhfY21kcy5jOjE1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiIgorbXNnc3RyICJVa2zhZOFtIHZpbWluZm8gc/pib3J1IFwiJXNcIiIKKworIy4gV3JpdGUgdGhlIGluZm86CisjOiBleF9jbWRzLmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICIjIFRoaXMgdmltaW5mbyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVmltICVzLlxuIgorbXNnc3RyICIjIFRlbnRvIHZpbWluZm8gc/pib3IgYm9sIHZ5dHZvcmVu/SBlZGl0b3JvbSBWaW0gJXMuXG4iCisKKyM6IGV4X2NtZHMuYzoxNjEyCittc2dpZCAiIgorIiMgWW91IG1heSBlZGl0IGl0IGlmIHlvdSdyZSBjYXJlZnVsIVxuIgorIlxuIgorbXNnc3RyICIiCisiIyBQb2tpYbUgYnVkZXRlIG9wYXRybm79LCBt9L5ldGUgaG8gdXByYXZvdmG7LlxuIgorIlxuIgorCisjOiBleF9jbWRzLmM6MTYxNAorbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjIEhvZG5vdGEgJ2VuY29kaW5nJyBwb+hhcyB64XBpc3UgdG9ob3RvIHP6Ym9ydVxuIgorCisjOiBleF9jbWRzLmM6MTcxMworbXNnaWQgIklsbGVnYWwgc3RhcnRpbmcgY2hhciIKK21zZ3N0ciAiTmVwcu1zdHVwbv0gemHoaWF0b+hu/SB6bmFrIgorCisjOiBleF9jbWRzLmM6MjA1MyBleF9jbWRzLmM6MjMxMCBleF9jbWRzMi5jOjYwMgorbXNnaWQgIlNhdmUgQXMiCittc2dzdHIgIlVsb75puyBha28iCisKKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjA5NgorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiBT+mJvciBqZSBuYejtdGFu/SB2IGlub2IgYnVmZmVyZSIKKworIzogZXhfY21kcy5jOjIxMzAKK21zZ2lkICJXcml0ZSBwYXJ0aWFsIGZpbGU/IgorbXNnc3RyICJVbG++absgbmX6cGxu/SBz+mJvcj8iCisKKyM6IGV4X2NtZHMuYzoyMTM3Cittc2dpZCAiRTE0MDogVXNlICEgdG8gd3JpdGUgcGFydGlhbCBidWZmZXIiCittc2dzdHIgIkUxNDA6IFBvdb5pdGUgISBwcmUgdWxvvmVuaWUgbmX6cGxu6WhvIGJ1ZmZlcnUiCisKKyM6IGV4X2NtZHMuYzoyMjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAiUHJlcO1zYbsgc/pib3IgXCIlLipzXCI/IgorCisjOiBleF9jbWRzLmM6MjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQxOiBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkUxNDE6IK5pYWRueSBu4XpvdiBz+mJvcnUgcHJlIGJ1ZmZlciAlbGQiCisKKyM6IGV4X2NtZHMuYzoyMzUzCittc2dpZCAiRTE0MjogRmlsZSBub3Qgd3JpdHRlbjogV3JpdGluZyBpcyBkaXNhYmxlZCBieSAnd3JpdGUnIG9wdGlvbiIKK21zZ3N0ciAiRTE0MjogU/pib3IgbmVib2wgdWxvvmVu/TogdWtsYWRhbmllIGplIHpha+F6YW7pIHZvtWJvdSAnd3JpdGUnIgorCisjOiBleF9jbWRzLmM6MjM3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IGZvciBcIiUuKnNcIi5cbiIKKyJEbyB5b3Ugd2lzaCB0byB3cml0ZSBhbnl3YXk/IgorbXNnc3RyICIiCisiUHJlIFwiJS4qc1wiIGplIG5hc3RhdmVu4SB2b7ViYSAncmVhZG9ubHknIChpYmEgbmEg6O10YW5pZSkuXG4iCisiUHJhamV0ZSBzaSBqdSBwb3RsYehpuz8iCisKKyM6IGV4X2NtZHMuYzoyNTM4Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICJVcHJhdm92Ybsgc/pib3IiCisKKyM6IGV4X2NtZHMuYzozMDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiBBdXRvbWF0aWNr6SBwcu1rYXp5IG5lb+hha+F2YW5lIHptYXphbGkgbm92/SBidWZmZXIgJXMiCisKKyM6IGV4X2NtZHMuYzozMTkzCittc2dpZCAiRTE0NDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gOnoiCittc2dzdHIgIkUxNDQ6IG5l6O1zZWxu/SBhcmd1bWVudCBwcmUgOnoiCisKKyM6IGV4X2NtZHMuYzozMjc4Cittc2dpZCAiRTE0NTogU2hlbGwgY29tbWFuZHMgbm90IGFsbG93ZWQgaW4gcnZpbSIKK21zZ3N0ciAiRTE0NTogcnZpbSBuZXBvdm9sdWplIHBvdb5pdGllIHBy7Wthem92IHNoZWxsdSIKKworIzogZXhfY21kcy5jOjMzODUKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiBSZWd1bOFybmUgdv1yYXp5IG5lc236IGJ5uyBvZGRlbGVu6SBw7XNtZW5hbWkiCisKKyM6IGV4X2NtZHMuYzozNzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2Ugd2l0aCAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCittc2dzdHIgIm5haHJhZGm7ICVzICh5L24vYS9xL0kvXkUvXlkpPyIKKworIzogZXhfY21kcy5jOjQwOTIKK21zZ2lkICIoSW50ZXJydXB0ZWQpICIKK21zZ3N0ciAiKHByZXJ1uWVu/SkgIgorCisjOiBleF9jbWRzLmM6NDA5NgorbXNnaWQgIjEgc3Vic3RpdHV0aW9uIgorbXNnc3RyICJwb+hldCBuYWhyYWRlbu0gbmEgcmlhZG9rOiAxIgorCisjOiBleF9jbWRzLmM6NDA5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgc3Vic3RpdHV0aW9ucyIKK21zZ3N0ciAicG/oZXQgbmFocmFkZW7tIG5hIHJpYWRvazogJWxkIgorCisjOiBleF9jbWRzLmM6NDEwMQorbXNnaWQgIiBvbiAxIGxpbmUiCittc2dzdHIgIiBuYSAxIHJpYWRrdSIKKworIzogZXhfY21kcy5jOjQxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uICVsZCBsaW5lcyIKK21zZ3N0ciAiIG5hICVsZCByaWFka292IgorCisjOiBleF9jbWRzLmM6NDE1NAorbXNnaWQgIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE0NzogZ2xvYmFsIG5lZOEgc2Egdm9sYbsgcmVrdXJ67XZuZSIKKworIzogZXhfY21kcy5jOjQxODkKK21zZ2lkICJFMTQ4OiBSZWd1bGFyIGV4cHJlc3Npb24gbWlzc2luZyBmcm9tIGdsb2JhbCIKK21zZ3N0ciAiRTE0ODogUHJpIHBy7WthemUgZ2xvYmFsIGNo/WJhIHJlZ3Vs4XJueSB2/XJheiIKKworIzogZXhfY21kcy5jOjQyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0dGVybiBmb3VuZCBpbiBldmVyeSBsaW5lOiAlcyIKK21zZ3N0ciAiVnpvciBu4WpkZW79IG5hIGthvmRvbSByaWFka3U6ICVzIgorCisjOiBleF9jbWRzLmM6NDMxOQorbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMgUG9zbGVkbv0gUmW7YXplYyBQb2RuYWRwaXN1OlxuIgorIiQiCisKKyM6IGV4X2NtZHMuYzo0NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTogpXV0dWplbSwgcHJlICVzIG5pZSBqZSC+aWFkbnkgcG9tb2Nu7WsiCisKKyM6IGV4X2NtZHMuYzo0NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAipXV0dWplbSwgc/pib3IgXCIlc1wiIHMgcG9tb2Nu7WtvbSBuZWJvbCBu4WpkZW79IgorCisjOiBleF9jbWRzLmM6NDkxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiAlcyBuaWUgamUgYWRyZXPhcm9tIgorCisjOiBleF9jbWRzLmM6NDk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUyOiBDYW5ub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE1MjogTmVk4SBzYSBvdHZvcmm7ICVzIHByZSB64XBpcyIKKworIzogZXhfY21kcy5jOjQ5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MzogVW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxNTM6IE5lZOEgc2Egb3R2b3JpuyAlcyBwcmUgeuFwaXMiCisKKyM6IGV4X2NtZHMuYzo1MDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTQ6IER1cGxpY2F0ZSB0YWcgXCIlc1wiIGluIGZpbGUgJXMiCittc2dzdHIgIkUxNTQ6IER1cGxpY2l0bv0gdGFnIFwiJXNcIiB2IHP6Ym9yZSAlcyIKKworIzogZXhfY21kcy5jOjUxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiBOZXpu4W1hIGZ1bmtjaWE6ICVzIgorCisjOiBleF9jbWRzLmM6NTE1OQorbXNnaWQgIkUxNTY6IE1pc3Npbmcgc2lnbiBuYW1lIgorbXNnc3RyICJFMTU2OiBDaP1iYSBpZGVudGlmaWvhdG9yIHByZSBzaWduIgorCisjOiBleF9jbWRzLmM6NTIwNQorbXNnaWQgIkUyNTU6IFRvbyBtYW55IHNpZ25zIGRlZmluZWQiCittc2dzdHIgIkUyNTU6IFBy7WxpuSBtbm9obyBkZWZpbm92YW79Y2ggb3puYehlbu0iCisKKyM6IGV4X2NtZHMuYzo1MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTogQ2h5Ym5lIG96bmHoZW79IHRleHQ6ICVzIgorCisjOiBleF9jbWRzLmM6NTI3MSBleF9jbWRzLmM6NTQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiBOZXpu4W1lIG96bmHoZW5pZTogJXMiCisKKyM6IGV4X2NtZHMuYzo1MzE3Cittc2dpZCAiRTE1OTogTWlzc2luZyBzaWduIG51bWJlciIKK21zZ3N0ciAiRTE1OTogQ2j9YmEg6GlzbG8gb3puYehlbmlhIgorCisjOiBleF9jbWRzLmM6NTM5NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU4OiBJbnZhbGlkIGJ1ZmZlciBuYW1lOiAlcyIKK21zZ3N0ciAiRTE1ODogQ2h5Ym7pIG1lbm8gYnVmZmVydTogJXMiCisKKyM6IGV4X2NtZHMuYzo1NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiBDaHlibukgSUQgb3puYehlbmlhOiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1NjA3Cittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJbdnltYXphbv1dIgorCisjOiBleF9jbWRzMi5jOjcwCittc2dpZCAiRW50ZXJpbmcgRGVidWcgbW9kZS4gIFR5cGUgXCJjb250XCIgdG8gbGVhdmUuIgorbXNnc3RyICJTcPq5u2FtIHJlvmltIGxhZGVuaWEuIFByZSB1a29u6GVuaWUgbmFw7bl0ZSBcImNvbnRcIi4iCisKKyM6IGV4X2NtZHMyLmM6NzQgZXhfZG9jbWQuYzo3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6ICVzIgorbXNnc3RyICJyaWFkb2sgJWxkOiAlcyIKKworIzogZXhfY21kczIuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjbWQ6ICVzIgorbXNnc3RyICJwcu1rYXo6ICVzIgorCisjOiBleF9jbWRzMi5jOjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIgorbXNnc3RyICJCb2QgcHJlcnW5ZW5pYSB2IFwiJXMlc1wiIG5hIHJpYWRrdSAlbGQiCisKKyM6IGV4X2NtZHMyLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjE6IEJyZWFrcG9pbnQgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTE2MTogQm9kIHByZXJ1uWVuaWEgbmVu4WpkZW79OiAlcyIKKworIzogZXhfY21kczIuYzo0MTQKK21zZ2lkICJObyBicmVha3BvaW50cyBkZWZpbmVkIgorbXNnc3RyICJOZWJvbGkgZGVmaW5vdm7pIL5pYWRuZSBib2R5IHByZXJ1uWVuaWEiCisKKyM6IGV4X2NtZHMyLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUzZCAgJXMgJXMgIGxpbmUgJWxkIgorbXNnc3RyICIlM2QgICVzICVzICByaWFkb2sgJWxkIgorCisjOiBleF9jbWRzMi5jOjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlIGNoYW5nZXMgdG8gXCIlLipzXCI/IgorbXNnc3RyICJVbG++absgem1lbnkgZG8gXCIlLipzXCI/IgorCisjOiBleF9jbWRzMi5jOjYyNyBleF9kb2NtZC5jOjg2NjcKK21zZ2lkICJVbnRpdGxlZCIKK21zZ3N0ciAiQmV6IG1lbmEiCisKKyM6IGV4X2NtZHMyLmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiBCdWZmZXIgXCIlc1wiIG9ic2FodWplIG5ldWxvvmVu6SB6bWVueSIKKworIzogZXhfY21kczIuYzo4MzIKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIlZhcm92YW5pZTogTmXoYWthbv0gdnN0dXAgZG8gaW7paG8gYnVmZmVydSAoc2tvbnRyb2x1anRlIGF1dG9tYXRpY2vpIHBy7WthenkpIgorCisjOiBleF9jbWRzMi5jOjEyMDgKK21zZ2lkICJFMTYzOiBUaGVyZSBpcyBvbmx5IG9uZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNjM6IFByZSD6cHJhdnUgYm9sIHphZGFu/SBpYmEgamVkZW4gc/pib3IiCisKKyM6IGV4X2NtZHMyLmM6MTIxMAorbXNnaWQgIkUxNjQ6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiRTE2NDogUHJlZCBwcnb9IHP6Ym9yIHNhIG5lZOEgcHJlc2tv6Gm7IgorCisjOiBleF9jbWRzMi5jOjEyMTIKK21zZ2lkICJFMTY1OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgZmlsZSIKK21zZ3N0ciAiRTE2NTogWmEgcG9zbGVkbv0gc/pib3Igc2EgbmVk4SBwcmVza2/oabsiCisKKyM6IGV4X2NtZHMyLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiCittc2dzdHIgIki1YWThbSBcIiVzXCIgdiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiIKK21zZ3N0ciAiSLVhZOFtIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgInP6Ym9yIFwiJXNcIiBuZWJvbCBu4WpkZW79IHYgJ3J1bnRpbWVwYXRoJyIKKworIzogZXhfY21kczIuYzoxNzE0Cittc2dpZCAiU291cmNlIFZpbSBzY3JpcHQiCittc2dzdHIgIlpkcm9qb3b9IHNrcmlwdCBWaW0iCisKKyM6IGV4X2NtZHMyLmM6MTgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc291cmNlIGEgZGlyZWN0b3J5OiBcIiVzXCIiCittc2dzdHIgIlwiJXNcIiBuaWUgamUgYWRyZXPhcm9tIgorCisjOiBleF9jbWRzMi5jOjE4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIm5lZOEgc2EgaW50ZXJwcmV0b3ZhuyBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgInJpYWRvayAlbGQ6IG5lbfS+ZSBiebsgemRyb2ogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICJpbnRlcnByZXR1amVtIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxODgwCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgInJpYWRvayAlbGQgamUgemRyb2pvbSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTk4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzb3VyY2luZyAlcyIKK21zZ3N0ciAiZG9rb27oZW7hIGludGVycHJldOFjaWEgJXMiCisKKyM6IGV4X2NtZHMyLmM6MjI4NworbXNnaWQgIlcxNTogV2FybmluZzogV3JvbmcgbGluZSBzZXBhcmF0b3IsIF5NIG1heSBiZSBtaXNzaW5nIgorbXNnc3RyICJXMTU6IFZhcm92YW5pZTogY2h5Ym79IG9kZGW1b3Zh6CByaWFka292LiBNb75u4SBjaP1iYSBeTS4iCisKKyM6IGV4X2NtZHMyLmM6MjMzNgorbXNnaWQgIkUxNjc6IDpzY3JpcHRlbmNvZGluZyB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjc6IDpmaW5pc2ggcG91vml06SBtaW1vIGludGVycHJldG92YW79IHP6Ym9yIgorCisjOiBleF9jbWRzMi5jOjIzNjkKK21zZ2lkICJFMTY4OiA6ZmluaXNoIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2ODogOmZpbmlzaCBwb3W+aXTpIG1pbW8gaW50ZXJwcmV0b3Zhbv0gc/pib3IiCisKKyM6IGV4X2NtZHMyLmM6MjgzOAorbXNnaWQgIk5vIHRleHQgdG8gYmUgcHJpbnRlZCIKK21zZ3N0ciAiz2Fsue0gbmEgdGxh6CIKKworIzogZXhfY21kczIuYzoyOTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nIHBhZ2UgJWQgKCVkJSUpIgorbXNnc3RyICJUbGHo7W0gc3RyYW51ICVkICglZCUlKSIKKworIzogZXhfY21kczIuYzoyOTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBDb3B5ICVkIG9mICVkIgorbXNnc3RyICJL83BpYSAlZCB6ICVkIgorCisjOiBleF9jbWRzMi5jOjI5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRlZDogJXMiCittc2dzdHIgIlZ5dGxh6GVu6TogJXMiCisKKyM6IGV4X2NtZHMyLmM6Mjk4NAorbXNnaWQgIlByaW50aW5nIGFib3J0ZWQiCittc2dzdHIgIlRsYeggYm9sYSB6cnW5ZW7hIgorCisjOiBleF9jbWRzMi5jOjMzNjcKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IE5lZOEgc2EgemFwaXNvdmG7IGRvIHb9c3R1cG7paG8gUG9zdFNjcmlwdG926WhvIHP6Ym9ydSIKKworIzogZXhfY21kczIuYzo0MDQyCittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiBOZWThIHNhIG90dm9yabsgdv1zdHVwbv0gUG9zdFNjcmlwdG92/SBz+mJvciIKKworIzogZXhfY21kczIuYzo0MDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTY6IE5lZOEgc2Egb3R2b3JpuyBz+mJvciBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6IE5lZOEgc2Eg6O10YbsgUG9zdFNjcmlwdG92/SBz+mJvciBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDI4OQorbXNnaWQgIlNlbmRpbmcgdG8gcHJpbnRlci4uLiIKK21zZ3N0ciAiUG9zaWVsYW0gbmEgdGxh6GlhcmXyLi4uIgorCisjOiBleF9jbWRzMi5jOjQyOTMKK21zZ2lkICJFMzY1OiBGYWlsZWQgdG8gcHJpbnQgUG9zdFNjcmlwdCBmaWxlIgorbXNnc3RyICJFMzY1OiBQb3N0U2NyaXB0b3b9IHP6Ym9yIHNhIG5lcG9kYXJpbG8gdnl0bGHoabsiCisKKyM6IGV4X2NtZHMyLmM6NDI5NQorbXNnaWQgIlByaW50IGpvYiBzZW50LiIKK21zZ3N0ciAiVGxh6G924SD6bG9oYSBib2xhIG9kb3NsYW7hLiIKKworIzogZXhfY21kczIuYzo0NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICJBa3R14WxueSAlcyBqYXp5azogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6IE5lZOEgc2EgbmFzdGF2absgamF6eWsgbmEgXCIlc1wiIgorCisjOiBleF9kb2NtZC5jOjQ5MAorbXNnaWQgIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIgorbXNnc3RyICJTcPq5u2FtIEV4IHJlvmltLiBOYXBpuXRlIFwidmlzdWFsXCIgcHJlIG7hdnJhdCBkbyBOb3Jt4Wxu7WhvIHJlvmltdS4iCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjUyNgorbXNnaWQgIkF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJLb25pZWMgc/pib3J1IgorCisjOiBleF9kb2NtZC5jOjYwMQorbXNnaWQgIkUxNjk6IENvbW1hbmQgdG9vIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE2OTogUHLta2F6IGplIHBy7WxpuSB6bG++aXT9IgorCisjOiBleF9kb2NtZC5jOjkxMQorbXNnaWQgIkUxNzA6IE1pc3NpbmcgOmVuZHdoaWxlIgorbXNnc3RyICJFMTcwOiBDaP1iYSA6ZW5kd2hpbGUiCisKKyM6IGV4X2RvY21kLmM6OTEzCittc2dpZCAiRTE3MTogTWlzc2luZyA6ZW5kaWYiCittc2dzdHIgIkUxNzE6IENo/WJhIDplbmRpZiIKKworIzogZXhfZG9jbWQuYzo5MjMKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICJLb25pZWMgemRyb2pvdulobyBz+mJvcnUiCisKKyM6IGV4X2RvY21kLmM6OTI0Cittc2dpZCAiRW5kIG9mIGZ1bmN0aW9uIgorbXNnc3RyICJLb25pZWMgZnVua2NpZSIKKworIzogZXhfZG9jbWQuYzoxMzQ0Cittc2dpZCAiQW1iaWd1b3VzIHVzZSBvZiB1c2VyLWRlZmluZWQgY29tbWFuZCIKK21zZ3N0ciAiTmVqZWRub3puYehu6SBwb3W+aXRpZSBwb3W+7XZhdGW1b20gZGVmaW5vdmFu6WhvIHBy7WthenUiCisKKyM6IGV4X2RvY21kLmM6MTM1OAorbXNnaWQgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAiTmllIGplIHBy7Wthem9tIGVkaXRvcnUiCisKKyM6IGV4X2RvY21kLmM6MTQ0MQorbXNnaWQgIkRvbid0IHBhbmljISIKK21zZ3N0ciAirmlhZG51IHBhbmlrdSEiCisKKyM6IGV4X2RvY21kLmM6MTQ2MAorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiIKK21zZ3N0ciAiWmFkYW79IHNw5HRu/SByb3pzYWgiCisKKyM6IGV4X2RvY21kLmM6MTQ2OQorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiwgT0sgdG8gc3dhcCIKK21zZ3N0ciAiWmFkYW79IHNw5HRu/SByb3pzYWguIE9LIG9kbG++absiCisKKyM6IGV4X2RvY21kLmM6MTU4MAorbXNnaWQgIlVzZSB3IG9yIHc+PiIKK21zZ3N0ciAiUG91vml0ZSB3IOhpIHc+PiIKKworIzogZXhfZG9jbWQuYzozMDk3Cittc2dpZCAiRTMxOTogU29ycnksIHRoZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMzE5OiCldXR1amVtLCBhbGUgdGVudG8gcHLta2F6IG5pZSBqZSBpbXBsZW1lbnRvdmFu/SIKKworIzogZXhfZG9jbWQuYzozMjY3Cittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6IFBy7XB1c3Ru/SBqZSBpYmEgamVkZW4gbuF6b3Ygc/pib3J1IgorCisjOiBleF9kb2NtZC5jOjM4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICJFuXRlIHpvc3ThdmFq+iAlZCBz+mJvcm92IGsg+nByYXZlLiBDaGNldGUgbmFwcmllayB0b211IHVrb27oabsgZWRpdG9yPyIKKworIzogZXhfZG9jbWQuYzozODMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzM6ICVsZCBtb3JlIGZpbGVzIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6IEW5dGUgem9zdOF2YWphavogJWxkIHP6Ym9yeSBrIPpwcmF2ZS4iCisKKyM6IGV4X2RvY21kLmM6MzkyNAorbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IHVzZSAhIHRvIHJlZGVmaW5lIgorbXNnc3RyICJFMTc0OiBQcu1rYXogdb4gZXhpc3R1amU6IHBvdb5pdGUgISBwcmUgcHJlZGVmaW5vdmFuaWUiCisKKyM6IGV4X2RvY21kLmM6NDAyOQorbXNnaWQgIiIKKyJcbiIKKyIgICAgTmFtZSAgICAgICAgQXJncyBSYW5nZSBDb21wbGV0ZSAgRGVmaW5pdGlvbiIKK21zZ3N0ciAiIgorIlxuIgorIiAgICBNZW5vICAgICAgIEFyZ3MgUm96c2FoINpwbG5vc7sgIERlZmlu7WNpYSIKKworIzogZXhfZG9jbWQuYzo0MTE4Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICJOZWJvbGkgbuFqZGVu6SC+aWFkbmUgcG91vml2YXRltW9tIGRlZmlub3ZhbukgcHLta2F6eSIKKworIzogZXhfZG9jbWQuYzo0MTQ5Cittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTogTmVib2xpIHphZGFu6SC+aWFkbmUgdmxhc3Rub3N0aSIKKworIzogZXhfZG9jbWQuYzo0MjAxCittc2dpZCAiRTE3NjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJFMTc2OiBDaHlibv0gcG/oZXQgYXJndW1lbnRvdiIKKworIzogZXhfZG9jbWQuYzo0MjE2Cittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3NzogUG/oZXQgbmVt9L5lIGJ5uyB6YWRhbv0gZHZha3LhdCIKKworIzogZXhfZG9jbWQuYzo0MjI2Cittc2dpZCAiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIKK21zZ3N0ciAiRTE3ODogQ2h5Ym7hIGltcGxpY2l0buEgaG9kbm90YSBwcmUgcG/oZXQiCisKKyM6IGV4X2RvY21kLmM6NDI1NAorbXNnaWQgIkUxNzk6IGFyZ3VtZW50IHJlcXVpcmVkIGZvciBjb21wbGV0ZSIKK21zZ3N0ciAiRTE3OTogcHJlIGRvcGxuZW5pZSBqZSBwb3RyZWJu/SBhcmd1bWVudCIKKworIzogZXhfZG9jbWQuYzo0MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiBDaHlibuEgaG9kbm90YSBkb3BsbmVuaWE6ICVzIgorCisjOiBleF9kb2NtZC5jOjQyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MTogSW52YWxpZCBhdHRyaWJ1dGU6ICVzIgorbXNnc3RyICJFMTgxOiBDaHlibuEgdmxhc3Rub3O7OiAlcyIKKworIzogZXhfZG9jbWQuYzo0MzIyCittc2dpZCAiRTE4MjogSW52YWxpZCBjb21tYW5kIG5hbWUiCittc2dzdHIgIkUxODI6IENoeWJu6SBtZW5vIHBy7WthenUiCisKKyM6IGV4X2RvY21kLmM6NDMzNworbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4MzogUG91vu12YXRltW9tIGRlZmlub3ZhbukgcHLta2F6eSBtdXNpYSB6YejtbmG7IHZltWv9bSBw7XNtZW5vbSIKKworIzogZXhfZG9jbWQuYzo0NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODQ6IE5vIHN1Y2ggdXNlci1kZWZpbmVkIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTg0OiBQb3W+7XZhdGW1b20gZGVmaW5vdmFu/SBwcu1rYXogJXMgbmVleGlzdHVqZSIKKworIzogZXhfZG9jbWQuYzo0ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTogU2No6W1hIGZhcmllYiAlcyBuZW7hamRlbuEiCisKKyM6IGV4X2RvY21kLmM6NDg2NQorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICJQb3pkcmF1amVtLCBWaW0gcG91vu12YXRltSEiCisKKyM6IGV4X2RvY21kLmM6NTU2OQorbXNnaWQgIkVkaXQgRmlsZSBpbiBuZXcgd2luZG93IgorbXNnc3RyICJVcHJhdmm7IHP6Ym9yIHYgbm92b20gb2tuZSIKKworIzogZXhfZG9jbWQuYzo1ODM5Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICKuaWFkbnkgb2RrbGFkYWPtIHP6Ym9yIgorCisjOiBleF9kb2NtZC5jOjU5NDMKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAiUHJpcG9qabsgc/pib3IiCisKKyM6IGV4X2RvY21kLmM6NjAwMgorbXNnaWQgIkUxODY6IE5vIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE4NjogrmlhZG55IHByZWRjaOFkemFq+mNpIGFkcmVz4XIiCisKKyM6IGV4X2RvY21kLmM6NjA3OQorbXNnaWQgIkUxODc6IFVua25vd24iCittc2dzdHIgIkUxODc6IE5lem7hbXkiCisKKyM6IGV4X2RvY21kLmM6NjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIlVtaWVzdGVuaWUgb2tuYTogWCAlZCwgWSAlZCIKKworIzogZXhfZG9jbWQuYzo2MjAyCittc2dpZCAiRTE4ODogT2J0YWluaW5nIHdpbmRvdyBwb3NpdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIkUxODg6IE5hIHRlanRvIHBsYXRmb3JtZSBzYSBuZWThIHVtaWVzdG5lbmllIG9rbmEgemlzdGm7IgorCisjOiBleF9kb2NtZC5jOjY0NjgKK21zZ2lkICJTYXZlIFJlZGlyZWN0aW9uIgorbXNnc3RyICJVbG++absgcHJlc21lcm92YW5pZSIKKworIzogZXhfZG9jbWQuYzo2NjE3Cittc2dpZCAiU2F2ZSBWaWV3IgorbXNnc3RyICJVbG++absgcG9otWFkIgorCisjOiBleF9kb2NtZC5jOjY2MTgKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIlVsb75puyBzZWRlbmllIgorCisjOiBleF9kb2NtZC5jOjY2MjAKK21zZ2lkICJTYXZlIFNldHVwIgorbXNnc3RyICJVbG++absgbmFzdGF2ZW5pZSIKKworIzogZXhfZG9jbWQuYzo2NzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODk6IFwiJXNcIiBleGlzdHMgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTE4OTogXCIlc1wiIGV4aXN0dWplIChwb3W+aXRlICEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGV4X2RvY21kLmM6Njc3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxOTA6IE5lZOEgc2Egb3R2b3JpuyBcIiVzXCIgcHJlIHrhcGlzIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo2Nzk4Cittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICJFMTkxOiBBcmd1bWVudGVtIG30vmUgYnm7IGliYSBw7XNpZW1vIGFsZWJvIHByYXb9IOhpILVhdv0gYXBvc3Ryb2YiCisKKyM6IGV4X2RvY21kLmM6Njg0MQorbXNnaWQgIkUxOTI6IFJlY3Vyc2l2ZSB1c2Ugb2YgOm5vcm1hbCB0b28gZGVlcCIKK21zZ3N0ciAiRTE5MjogVm5vcmVuaWUgOm5vcm1hbCBqZSBwcu1sabkgaGxib2vpIgorCisjOiBleF9kb2NtZC5jOjcyMDIKK21zZ2lkICI6aWYgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAidm5vcmVuaWUgOmlmIGplIHBy7WxpuSBobGJva+kiCisKKyM6IGV4X2RvY21kLmM6NzIzNworbXNnaWQgIjplbmRpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVuZGlmIGJleiB6b2Rwb3ZlZGFq+mNlaG8gOmlmIgorCisjOiBleF9kb2NtZC5jOjcyNTcKK21zZ2lkICI6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVsc2UgYmV6IHpvZHBvdmVkYWr6Y2VobyA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzI1OQorbXNnaWQgIjplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIjplbHNlaWYgYmV6IHpvZHBvdmVkYWr6Y2VobyA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzMxMQorbXNnaWQgIjp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJ2bm9yZW5pZSA6d2hpbGUgamUgcHLtbGm5IGhsYm9r6SIKKworIzogZXhfZG9jbWQuYzo3MzU3Cittc2dpZCAiOmNvbnRpbnVlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICI6Y29udGludWUgYmV6IHpvZHBvdmVkYWr6Y2VobyA6d2hpbGUiCisKKyM6IGV4X2RvY21kLmM6NzM4NAorbXNnaWQgIjpicmVhayB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiOmJyZWFrIGJleiB6b2Rwb3ZlZGFq+mNlaG8gOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjc0MDcgZXhfZG9jbWQuYzo3NDEyCittc2dpZCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICI6ZW5kd2hpbGUgYmV6IHpvZHBvdmVkYWr6Y2VobyA6d2hpbGUiCisKKyM6IGV4X2RvY21kLmM6NzQzMworbXNnaWQgIkUxOTM6IDplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxOTM6IDplbmRmdW5jdGlvbiBtaW1vIGZ1bmtjaXUiCisKKyM6IGV4X2RvY21kLmM6NzYxMworbXNnaWQgIkUxOTQ6IE5vIGFsdGVybmF0ZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgJyMnIgorbXNnc3RyICJFMTk0OiCuaWFkbnkgYWx0ZXJuYXTtdm55IG7hem92IHP6Ym9ydSwga3Rvcv1tIGJ5IGJvbG8gbW++bukgbmFocmFkabsgJyMnIgorCisjOiBleF9kb2NtZC5jOjc2NDQKK21zZ2lkICJubyBhdXRvY29tbWFuZCBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWZpbGU+XCIiCittc2dzdHIgIr5pYWRueSBu4XpvdiBz+mJvcnUsIGt0b3L9bSBieSBib2xvIG1vvm7pIG5haHJhZGm7IFwiPGFmaWxlPlwiIgorCisjOiBleF9kb2NtZC5jOjc2NTIKK21zZ2lkICJubyBhdXRvY29tbWFuZCBidWZmZXIgbnVtYmVyIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFidWY+XCIiCittc2dzdHIgIr5pYWRuZSDo7XNsbyBidWZmZXJ1LCBrdG9y/W0gYnkgYm9sbyBtb75u6SBuYWhyYWRpuyBcIjxhYnVmPlwiIgorCisjOiBleF9kb2NtZC5jOjc2NjMKK21zZ2lkICJubyBhdXRvY29tbWFuZCBtYXRjaCBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFtYXRjaD5cIiIKK21zZ3N0ciAiIgorIr5pYWRuYSB6aG9kYSBhdXRvbWF0aWNr/WNoIHBy7Wthem92LCBrdG9yb3UgYnkgYm9sbyBtb75u6SBuYWhyYWRpuyBcIjxhbWF0Y2g+IgorIlwiIgorCisjOiBleF9kb2NtZC5jOjc2NzMKK21zZ2lkICJubyA6c291cmNlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxzZmlsZT5cIiIKK21zZ3N0ciAivmlhZG55IDpzb3VyY2Ugc/pib3IsIGt0b3L9bSBieSBib2xvIG1vvm7pIG5haHJhZGm7IFwiPHNmaWxlPlwiIgorCisjOiBleF9kb2NtZC5jOjc3MTQKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZmlsZSBuYW1lIGZvciAnJScgb3IgJyMnLCBvbmx5IHdvcmtzIHdpdGggXCI6cDpoXCIiCittc2dzdHIgIlBy4Xpkbv0gbuF6b3Ygc/pib3J1IHByZSAnJScg6GkgJyMnIGZ1bmd1amUgaWJhIHMgXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6NzcxNgorbXNnaWQgIkV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIlb9c2xlZGtvbSB2eWhvZG5vdGVuaWEgamUgcHLhemRueSByZbthemVjIgorCisjOiBleF9kb2NtZC5jOjg2NDkKK21zZ2lkICJFMTk1OiBDYW5ub3Qgb3BlbiB2aW1pbmZvIGZpbGUgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxOTU6IE5lZOEgc2Egb3R2b3JpuyBwcmUg6O10YW7tIHZpbWluZm8gc/pib3IiCisKKyM6IGV4X2RvY21kLmM6ODgyMgorbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5NjogViB0ZWp0byB2ZXJ6aSBuaWUgc/ogZGlhZ3JhcGh5IHBvZHBvcm92YW7pIgorCisjOiBleF9nZXRsbi5jOjI4MzMKK21zZ2lkICJ0YWduYW1lIgorbXNnc3RyICJtZW5vIHRhZ3UiCisKKyM6IGV4X2dldGxuLmM6MjgzNgorbXNnaWQgIiBraW5kIGZpbGVcbiIKK21zZ3N0ciAiIHR5cCBz+mJvcnVcbiIKKworIzogZXhfZ2V0bG4uYzo0MDQ5Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICIndm+1YmEgJ2hpc3RvcnknIGplIG5hc3RhdmVu4SBuYSBudWx1IgorCisjOiBleF9nZXRsbi5jOjQyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiMgJXMgSGlzdG9yeSAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIEhpc3TzcmlhICVzICh6YejtbmFq+mNpIG5ham5vdrlvdSBwb2xvvmtvdSk6XG4iCisKKyM6IGV4X2dldGxuLmM6NDI5MAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAiUHLta2F6b3bpIFJpYWRreSIKKworIzogZXhfZ2V0bG4uYzo0MjkxCittc2dpZCAiU2VhcmNoIFN0cmluZyIKK21zZ3N0ciAiVnlotWFk4XZhbv0gUmW7YXplYyIKKworIzogZXhfZ2V0bG4uYzo0MjkyCittc2dpZCAiRXhwcmVzc2lvbiIKK21zZ3N0ciAiVv1yYXoiCisKKyM6IGV4X2dldGxuLmM6NDI5MworbXNnaWQgIklucHV0IExpbmUiCittc2dzdHIgIlZzdHVwbv0gUmlhZG9rIgorCisjOiBleF9nZXRsbi5jOjQzMjMKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyIHByZXZ5uXVqZSBk5b5rdSBwcu1rYXp1IgorCisjOiBleF9nZXRsbi5jOjQ0OTEKK21zZ2lkICJFMTk5OiBBY3RpdmUgd2luZG93IG9yIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICJFMTk5OiBBa3Ttdm5lIG9rbm8gYWxlYm8gYnVmZmVyIGJvbCB2eW1hemFu/SIKKworIzogZmlsZWlvLmM6MzUxCittc2dpZCAiSWxsZWdhbCBmaWxlIG5hbWUiCittc2dzdHIgIk5lcHLtc3R1cG79IG7hem92IHP6Ym9ydSIKKworIzogZmlsZWlvLmM6Mzc1IGZpbGVpby5jOjUwMCBmaWxlaW8uYzoyNTE2IGZpbGVpby5jOjI1NTQKK21zZ2lkICJpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiamUgYWRyZXPhcm9tIgorCisjOiBmaWxlaW8uYzozNzcKK21zZ2lkICJpcyBub3QgYSBmaWxlIgorbXNnc3RyICJuaWUgamUgc/pib3JvbSIKKworIzogZmlsZWlvLmM6NTIyIGZpbGVpby5jOjM2NDYKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJbbm92/SBz+mJvcl0iCisKKyM6IGZpbGVpby5jOjU0MAorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIltwcu1zdHVwIG9kbWlldG51dP1dIgorCisjOiBmaWxlaW8uYzo2MzQKK21zZ2lkICJFMjAwOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbWFkZSB0aGUgZmlsZSB1bnJlYWRhYmxlIgorbXNnc3RyICJFMjAwOiAqUmVhZFByZSBhdXRvbWF0aWNr6SBwcu1rYXp5IHVyb2JpbGkgc/pib3IgbmXoaXRhdGW1bv1tIgorCisjOiBmaWxlaW8uYzo2MzYKK21zZ2lkICJFMjAxOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMjAxOiAqUmVhZFByZSBhdXRvbWF0aWNr6SBwcu1rYXp5IG5lc236IG1lbmm7IGFrdHXhbG55IGJ1ZmZlciIKKworIzogZmlsZWlvLmM6NjU3Cittc2dpZCAiVmltOiBSZWFkaW5nIGZyb20gc3RkaW4uLi5cbiIKK21zZ3N0ciAiVmltOiDo7XRhbSB6ILl0YW5kYXJkbulobyB2c3R1cHUuLi5cbiIKKworIzogZmlsZWlvLmM6NjYzCittc2dpZCAiUmVhZGluZyBmcm9tIHN0ZGluLi4uIgorbXNnc3RyICLI7XRhbSB6ILl0YW5kYXJkbulobyB2c3R1cHUuLi4iCisKKyMuIFJlLW9wZW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgZmFpbGVkIQorIzogZmlsZWlvLmM6ODkyCittc2dpZCAiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiCittc2dzdHIgIkUyMDI6IFBvIGtvbnZlcnppaSBqZSBz+mJvciBuZehpdHRhdGW1bv0hIgorCisjOiBmaWxlaW8uYzoxNzU1Cittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2Zwb21lbm92YW7hIHL6cmEvc29rZXRdIgorCisjOiBmaWxlaW8uYzoxNzYyCittc2dpZCAiW2ZpZm9dIgorbXNnc3RyICJbcG9tZW5vdmFu4SBy+nJhXSIKKworIzogZmlsZWlvLmM6MTc2OQorbXNnaWQgIltzb2NrZXRdIgorbXNnc3RyICJbc29rZXRdIgorCisjOiBmaWxlaW8uYzoxNzc3Cittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW1JPXSIKKworIzogZmlsZWlvLmM6MTc4NworbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW2No/WJhIENSXSIKKworIzogZmlsZWlvLmM6MTc5MgorbXNnaWQgIltOTCBmb3VuZF0iCittc2dzdHIgIltu4WpkZW7pIE5MXSIKKworIzogZmlsZWlvLmM6MTc5NworbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW2RsaOkgcmlhZGt5IHphbG9tZW7pXSIKKworIzogZmlsZWlvLmM6MTgwMyBmaWxlaW8uYzozNjMwCittc2dpZCAiW05PVCBjb252ZXJ0ZWRdIgorbXNnc3RyICJbbmVza29udmVydG92YW79XSIKKworIzogZmlsZWlvLmM6MTgwOCBmaWxlaW8uYzozNjM1Cittc2dpZCAiW2NvbnZlcnRlZF0iCittc2dzdHIgIltza29udmVydG92YW79XSIKKworIzogZmlsZWlvLmM6MTgxNSBmaWxlaW8uYzozNjYwCittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJbemG5aWZyb3Zhbv1dIgorCisjOiBmaWxlaW8uYzoxODIyCittc2dpZCAiW0NPTlZFUlNJT04gRVJST1JdIgorbXNnc3RyICJbQ0hZQkEgUFJFVk9EVV0iCisKKyM6IGZpbGVpby5jOjE4MjkKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbQ0hZQlkgyM1UQU5JQV0iCisKKyM6IGZpbGVpby5jOjIwMzYKK21zZ2lkICJDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3IgY29udmVyc2lvbiIKK21zZ3N0ciAiTmVk4SBzYSBu4WpzuyBkb+hhc279IHP6Ym9yIHByZSBrb252ZXJ6aXUiCisKKyM6IGZpbGVpby5jOjIwNDMKK21zZ2lkICJDb252ZXJzaW9uIHdpdGggJ2NoYXJjb252ZXJ0JyBmYWlsZWQiCittc2dzdHIgIktvbnZlcnppYSBzICdjaGFyY29udmVydCcgc2EgbmVwb2RhcmlsYSIKKworIzogZmlsZWlvLmM6MjA0NgorbXNnaWQgImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciCittc2dzdHIgIm5lZOEgc2Eg6O10Ybsgdv1zdHVwICdjaGFyY29udmVydCciCisKKyM6IGZpbGVpby5jOjI0MzIKK21zZ2lkICJFMjAzOiBBdXRvY29tbWFuZHMgZGVsZXRlZCBvciB1bmxvYWRlZCBidWZmZXIgdG8gYmUgd3JpdHRlbiIKK21zZ3N0ciAiIgorIkUyMDM6IEF1dG9tYXRpY2vpIHBy7Wthenkgem1hemFsaSDoaSBkZWFrdGl2b3ZhbGkgYnVmZmVyLCBrdG9y/SBtYWwgYnm7ICIKKyJ1bG++ZW79IgorCisjOiBmaWxlaW8uYzoyNDU1Cittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IEF1dG9tYXRpY2v9IHBy7WtheiBuZW/oYWvhdmFu/W0gc3D0c29ib20gem1lbmlsIHBv6GV0IHJpYWRrb3YiCisKKyM6IGZpbGVpby5jOjI1MjEgZmlsZWlvLmM6MjUzOAorbXNnaWQgImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIgorbXNnc3RyICJuaWUgamUgc/pib3JvbSBhbmkgemFyaWFkZW7tbSBuYSBrdG9y6SBzYSBk4SB6YXBpc292YbsiCisKKyM6IGZpbGVpby5jOjI1ODQKK21zZ2lkICJpcyByZWFkLW9ubHkgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiamUgaWJhIHByZSDo7XRhbu1pZShwb3W+aXRlICEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGZpbGVpby5jOjI4ODYKK21zZ2lkICJDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJOZWThIHNhIHphcGlzb3ZhuyBkbyB64Wxvvm7paG8gc/pib3J1IChwb3W+aXRlICEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGZpbGVpby5jOjI4OTgKK21zZ2lkICJDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiQ2h5YmEgcHJpIHV6YXR24XJhbu0geuFsb75u6WhvIHP6Ym9ydSAocG91vml0ZSAhIHByZSB2eW76dGVuaWUpIgorCisjOiBmaWxlaW8uYzoyOTAwCittc2dpZCAiQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiTmVk4SBzYSBuYejtdGG7IHP6Ym9yIHByZSB64WxvaHUgKHBvdb5pdGUgISBwcmUgdnlu+nRlbmllKSIKKworIzogZmlsZWlvLmM6MjkxNgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiTmVk4SBzYSB2eXR2b3JpuyB64Wxvvm79IHP6Ym9yIChwb3W+aXRlICEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGZpbGVpby5jOjMwMTgKK21zZ2lkICJDYW4ndCBtYWtlIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIk5lZOEgc2Egdnl0dm9yabsgeuFsb75u/SBz+mJvciAocG91vml0ZSAhIHByZSB2eW76dGVuaWUpIgorCisjIHJlc291cmNlIGZvcmsgPyEKKyM6IGZpbGVpby5jOjMwODAKK21zZ2lkICJUaGUgcmVzb3VyY2UgZm9yayB3aWxsIGJlIGxvc3QgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiJ1Jlc291cmNlIGZvcmsnIGJ1ZGUgc3RyYXRlbv0gKHBvdb5pdGUgISBwcmUgdnlu+nRlbmllKSIKKworIzogZmlsZWlvLmM6MzE2OQorbXNnaWQgIkUyMTQ6IENhbid0IGZpbmQgdGVtcCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjE0OiBOZWThIHNhIG7hanO7IGRv6GFzbv0gc/pib3IgcHJlIHVrbGFkYW5pZSIKKworIzogZmlsZWlvLmM6MzE4NworbXNnaWQgIkUyMTM6IENhbm5vdCBjb252ZXJ0ICh1c2UgISB0byB3cml0ZSB3aXRob3V0IGNvbnZlcnNpb24pIgorbXNnc3RyICJFMjEzOiBOZWThIHNhIHByZXZpZXO7IChwb3W+aXRlICEgcHJlIHZ5bvp0ZW5pZSBwcmV2b2R1KSIKKworIzogZmlsZWlvLmM6MzIyMgorbXNnaWQgIkUxNjY6IENhbid0IG9wZW4gbGlua2VkIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNjY6IFP6Ym9yIHNhIG5lZOEgb3R2b3JpuyBwcmUgdWtsYWRhbmllIgorCisjOiBmaWxlaW8uYzozMjI2Cittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiBT+mJvciBzYSBuZWThIG90dm9yabsgcHJlIHVrbGFkYW5pZSIKKworIzogZmlsZWlvLmM6MzQ3NQorbXNnaWQgIkNsb3NlIGZhaWxlZCIKK21zZ3N0ciAiWmF0dm9yZW5pZSB6bHloYWxvIgorCisjOiBmaWxlaW8uYzozNTQ2Cittc2dpZCAid3JpdGUgZXJyb3IsIGNvbnZlcnNpb24gZmFpbGVkIgorbXNnc3RyICJjaHliYSBwcmkgeuFwaXNlLCBwcmV2b2Qgc2EgbmVwb2RhcmlsIgorCisjOiBmaWxlaW8uYzozNTUyCittc2dpZCAid3JpdGUgZXJyb3IgKGZpbGUgc3lzdGVtIGZ1bGw/KSIKK21zZ3N0ciAiY2h5YmEgcHJpIHVrbGFkYW7tIChqZSB2b7Vu6SBtaWVzdG8gbmEgZGlza3U/KSIKKworIzogZmlsZWlvLmM6MzYyNQorbXNnaWQgIiBDT05WRVJTSU9OIEVSUk9SIgorbXNnc3RyICIgQ0hZQkEgUFJFVk9EVSIKKworIzogZmlsZWlvLmM6MzY0MQorbXNnaWQgIltEZXZpY2VdIgorbXNnc3RyICJbemFyaWFkZW5pZV0iCisKKyM6IGZpbGVpby5jOjM2NDYKK21zZ2lkICJbTmV3XSIKK21zZ3N0ciAiW25vdv1dIgorCisjOiBmaWxlaW8uYzozNjY4Cittc2dpZCAiIFthXSIKK21zZ3N0ciAiIFtwXSIKKworIzogZmlsZWlvLmM6MzY2OAorbXNnaWQgIiBhcHBlbmRlZCIKK21zZ3N0ciAiIHByaXBvamVu/SIKKworIzogZmlsZWlvLmM6MzY3MAorbXNnaWQgIiBbd10iCittc2dzdHIgIiBbdV0iCisKKyM6IGZpbGVpby5jOjM2NzAKK21zZ2lkICIgd3JpdHRlbiIKK21zZ3N0ciAiIHVsb75lbv0iCisKKyM6IGZpbGVpby5jOjM3MjAKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTogcGF0Y2htb2RlOiBuZWThIHNhIHVsb75puyBw9HZvZG79IHP6Ym9yIgorCisjOiBmaWxlaW8uYzozNzQyCittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBwYXRjaG1vZGU6IG5lZOEgc2EgemFwaXNvdmG7IGRvIHBy4XpkbmVobyBw9HZvZG7paG8gc/pib3J1IgorCisjOiBmaWxlaW8uYzozNzU3Cittc2dpZCAiRTIwNzogQ2FuJ3QgZGVsZXRlIGJhY2t1cCBmaWxlIgorbXNnc3RyICJFMjA3OiBOZWThIHNhIHZ5bWF6YbsgeuFsb75u/SBz+mJvciIKKworIzogZmlsZWlvLmM6MzgwOQorbXNnaWQgIiIKKyJcbiIKKyJXQVJOSU5HOiBPcmlnaW5hbCBmaWxlIG1heSBiZSBsb3N0IG9yIGRhbWFnZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZBUk9WQU5JRTogT2JzYWggcPR2b2Ru6WhvIHP6Ym9ydSBt9L5lIGJ5uyBzdHJhdGVu/SBhbGVibyBwb7lrb2Rlbv1cbiIKKworIzogZmlsZWlvLmM6MzgxMQorbXNnaWQgImRvbid0IHF1aXQgdGhlIGVkaXRvciB1bnRpbCB0aGUgZmlsZSBpcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiEiCittc2dzdHIgIm5ldWtvbuh1anRlIGVkaXRvciBza/RyLCBuZb4gYnVkZSBz+mJvciD6c3BluW5lIHVsb75lbv0hIgorCisjOiBmaWxlaW8uYzozODkxCittc2dpZCAiW2Rvc10iCittc2dzdHIgIltkb3NdIgorCisjOiBmaWxlaW8uYzozODkxCittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbZG9zIGZvcm3hdF0iCisKKyM6IGZpbGVpby5jOjM4OTgKK21zZ2lkICJbbWFjXSIKK21zZ3N0ciAiW21hY10iCisKKyM6IGZpbGVpby5jOjM4OTgKK21zZ2lkICJbbWFjIGZvcm1hdF0iCittc2dzdHIgIlttYWMgZm9ybeF0XSIKKworIzogZmlsZWlvLmM6MzkwNQorbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzozOTA1Cittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW3VuaXggZm9ybeF0XSIKKworIzogZmlsZWlvLmM6MzkzMgorbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxIHJpYWRvaywgIgorCisjOiBmaWxlaW8uYzozOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcywgIgorbXNnc3RyICIlbGQgcmlhZGtvdiwgIgorCisjOiBmaWxlaW8uYzozOTM3Cittc2dpZCAiMSBjaGFyYWN0ZXIiCittc2dzdHIgIjEgem5hayIKKworIzogZmlsZWlvLmM6MzkzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxkIHpuYWtvdiIKKworIzogZmlsZWlvLmM6Mzk0OQorbXNnaWQgIltub2VvbF0iCittc2dzdHIgIlu+aWFkbnkga29uaWVjIHJpYWRrdV0iCisKKyM6IGZpbGVpby5jOjM5NDkKK21zZ2lkICJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIgorbXNnc3RyICJbbmX6cGxu/SBwb3NsZWRu/SByaWFkb2tdIgorCisjLiBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIy4gbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjLiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyM6IGZpbGVpby5jOjM5NjgKK21zZ2lkICJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiCittc2dzdHIgIlZBUk9WQU5JRTogb2QgamVobyBuYejtdGFuaWEgYm9sIG9ic2FoIHP6Ym9ydSB6bWVuZW79ISEhISIKKworIzogZmlsZWlvLmM6Mzk3MAorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byB3cml0ZSB0byBpdCIKK21zZ3N0ciAiQ2hjZXRlIGhvIG5hb3phaiB1bG++absiCisKKyM6IGZpbGVpby5jOjQ5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiCittc2dzdHIgIkUyMDg6IENoeWJhIHByaSB64XBpc2UgZG8gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo0OTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDk6IEVycm9yIGNsb3NpbmcgXCIlc1wiIgorbXNnc3RyICJFMjA5OiBDaHliIHByaSB1emF0duFyYW7tIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NDk0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogQ2h5YmEgcHJpIOjtdGFu7SBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjUxMTUKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9tYXRpY2v9IHBy7WtheiB2eW1hemFsIGJ1ZmZlciIKKworIzogZmlsZWlvLmM6NTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBubyBsb25nZXIgYXZhaWxhYmxlIgorbXNnc3RyICJFMjExOiBWYXJvdmFuaWU6IHP6Ym9yIFwiJXNcIiB1viBuaWUgamUgZG9zdHVwbv0iCisKKyM6IGZpbGVpby5jOjUxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlcxMjogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgYW5kIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQgaW4gVmltIGFzICIKKyJ3ZWxsIgorbXNnc3RyICIiCisiVzEyOiBWYXJvdmFuaWU6IHP6Ym9yIFwiJXNcIiBib2wgcG8gemHoYXTtIPpwcmF2eSB6bWVuZW79IGEgVmltIHRpZb4gem1lbmlsICIKKyJidWZmZXIiCisKKyM6IGZpbGVpby5jOjUxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMTogVmFyb3ZhbmllOiBz+mJvciBcIiVzXCIgYm9sIHBvIHph6GF07SD6cHJhdnkgem1lbmVu/SIKKworIzogZmlsZWlvLmM6NTE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTY6IFZhcm92YW5pZTogUmW+aW0gc/pib3J1IFwiJXNcIiBib2wgcG8gemHoYXTtIPpwcmF2IHptZW5lbv0iCisKKyM6IGZpbGVpby5jOjUxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzEzOiBWYXJvdmFuaWU6IHBvIHph6GF07SD6cHJhdnkgdnl0dm9yZW79IHP6Ym9yIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTE2OAorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIlZhcm92YW5pZSIKKworIzogZmlsZWlvLmM6NTE2OQorbXNnaWQgIiIKKyImT0tcbiIKKyImTG9hZCBGaWxlIgorbXNnc3RyICIiCisiJk9LXG4iCisiJk5h6O10Ybsgc/pib3IiCisKKyM6IGZpbGVpby5jOjUyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6IG5lZOEgc2Egb2Jub3ZpuyBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU3NzkKK21zZ2lkICItLURlbGV0ZWQtLSIKK21zZ3N0ciAiLS1WeW1hemFu/S0tIgorCisjLiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdAorIzogZmlsZWlvLmM6NTkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY3OiBObyBzdWNoIGdyb3VwOiBcIiVzXCIiCittc2dzdHIgIkUzNjc6IFNrdXBpbmEgXCIlc1wiIG5lZXhpc3R1amUiCisKKyM6IGZpbGVpby5jOjYwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgKjogJXMiCittc2dzdHIgIkUyMTU6IE5lcHLtc3R1cG79IHpuYWsgcG8gKjogJXMiCisKKyM6IGZpbGVpby5jOjYwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IFVkYWxvc7sgJXMgbmVleGlzdHVqZSIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo2MjI0Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRvbWF0aWNr6SBwcu1rYXp5IC0tLSIKKworIzogZmlsZWlvLmM6NjQ5NQorbXNnaWQgIkUyMTc6IENhbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZXZlbnRzIgorbXNnc3RyICJFMjE3OiBBdXRvbWF0aWNr6SBwcu1rYXp5IHNhIG5lZGFq+iBzcHVzdGm7IHByZSBWqUVUS1kgdWRhbG9zu2kiCisKKyM6IGZpbGVpby5jOjY1MTgKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgIq5pYWRuZSB2eWhvdnVq+mNlIGF1dG9tYXRpY2vpIHBy7WthenkiCisKKyM6IGZpbGVpby5jOjY3OTAKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiB2bm9yZW5pYSBhdXRvbWF0aWNr6WhvIHBy7WthenUgc/ogcHLtbGm5IGhsYm9r6SIKKworIzogZmlsZWlvLmM6NzA3NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBBdXRvIGNvbW1hbmRzIGZvciBcIiVzXCIiCittc2dzdHIgIiVzIGF1dG9tYXRpY2vpIHBy7WthenkgcHJlIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NzA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmcgJXMiCittc2dzdHIgIlNw+rm7YW0gJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZmlsZWlvLmM6NzE1MworIywgYy1mb3JtYXQKK21zZ2lkICJhdXRvY29tbWFuZCAlcyIKK21zZ3N0ciAiQXV0b21hdGlja/0gcHLta2F6ICVzIgorCisjOiBmaWxlaW8uYzo3Njc1Cittc2dpZCAiRTIxOTogTWlzc2luZyB7LiIKK21zZ3N0ciAiRTIxOTogQ2j9YmEgey4iCisKKyM6IGZpbGVpby5jOjc2NzcKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiBDaP1iYSB9LiIKKworIzogZm9sZC5jOjY2Cittc2dpZCAiTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAirmlhZG55IHrhaHliIG5lYm9sIG7hamRlbv0iCisKKyM6IGZvbGQuYzo1NTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogUG9tb2NvdSAnZm9sZG1ldGhvZCcgc2EgbmVk4SB2eXR2b3JpuyB64Wh5YiIKKworIzogZm9sZC5jOjU1NQorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiBQb21vY291ICdmb2xkbWV0aG9kJyBzYSBuZWThIG9kc3Ry4W5puyB64Wh5YiIKKworIzogZ2V0Y2hhci5jOjI0NworbXNnaWQgIkUyMjI6IEFkZCB0byByZWFkIGJ1ZmZlciIKK21zZ3N0ciAiRTIyMjogUHJpZGG7IGRvIGJ1ZmZlcnUgcHJlIOjtdGFuaWUiCisKKyM6IGdldGNoYXIuYzoyMTA2Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6IHJla3Vyeu12bmUgbWFwb3ZhbmllIgorCisjOiBnZXRjaGFyLmM6Mjk0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI0OiBnbG9iYWwgYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNDogcHJlICVzIHW+IGdsb2LhbG5hIHNrcmF0a2EgZXhpc3R1amUiCisKKyM6IGdldGNoYXIuYzoyOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTogcHJlICVzIHW+IGdsb2LhbG5lIG1hcG92YW5pZSBleGlzdHVqZSIKKworIzogZ2V0Y2hhci5jOjMwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogcHJlICVzIHW+IHNrcmF0a2EgZXhpc3R1amUiCisKKyM6IGdldGNoYXIuYzozMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI3OiBwcmUgJXMgdb4gbWFwb3ZhbmllIGV4aXN0dWplIgorCisjOiBnZXRjaGFyLmM6MzE0NQorbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAirmlhZG5hIHNrcmF0a2EgbmVib2xhIG7hamRlbuEiCisKKyM6IGdldGNoYXIuYzozMTQ3Cittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAirmlhZG5lIG1hcG92YW5pZSBuZWJvbG8gbuFqZGVu6SIKKworIzogZ2V0Y2hhci5jOjM5OTIKK21zZ2lkICJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkUyMjg6IG1ha2VtYXA6IG5lcHLtc3R1cG79IG3zZCIKKworIzogZ3VpX2F0X2ZzLmM6MjkwCittc2dpZCAiPGNhbm5vdCBvcGVuPiAiCittc2dzdHIgIjxuZWThIHNhIG90dm9yabs+ICIKKworIzogZ3VpX2F0X2ZzLmM6MTExNQorIywgYy1mb3JtYXQKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGZvbnQgJXMiCittc2dzdHIgInZpbV9TZWxGaWxlOiBw7XNtbyAlcyBuaWUgamUgZG9zdHVwbukiCisKKyM6IGd1aV9hdF9mcy5jOjI1MzgKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJ2aW1fU2VsRmlsZTogbmVk4SBzYSB2cuF0absgZG8gYWt0deFsbmVobyBhZHJlc+FyYSIKKworIzogZ3VpX2F0X2ZzLmM6MjU1NworbXNnaWQgIlBhdGhuYW1lOiIKK21zZ3N0ciAiTuF6b3YgY2VzdHk6IgorCisjOiBndWlfYXRfZnMuYzoyNTYzCittc2dpZCAidmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAidmltX1NlbEZpbGU6IG5lZOEgc2EgemlzdGm7IGFrdHXhbG55IGFkcmVz4XIiCisKKyM6IGd1aV9hdF9mcy5jOjI1NzEgZ3VpX21vdGlmLmM6MTYxOQorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIy4gJ0NhbmNlbCcgYnV0dG9uCisjOiBndWlfYXRfZnMuYzoyNTcxIGd1aV9ndGsuYzoxNzQwIGd1aV9tb3RpZi5jOjE2MTQgZ3VpX21vdGlmLmM6MjgzNQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiWnJ1uWm7IgorCisjOiBndWlfYXRoZW5hLmM6MTk1NiBndWlfbW90aWYuYzoxODY3Cittc2dpZCAiVmltIGRpYWxvZyIKK21zZ3N0ciAiVmltIGRpYWzzZyIKKworIzogZ3VpX2F0X3NiLmM6NDg2Cittc2dpZCAiU2Nyb2xsYmFyIFdpZGdldDogQ291bGQgbm90IGdldCBnZW9tZXRyeSBvZiB0aHVtYiBwaXhtYXAuIgorbXNnc3RyICJQcu1wcmF2b2sgcG9zdXZuZWogbGm5dHk6IG5lZOEgc2EgemlzdGm7IGdlb21ldHJpYSBvYnLhemt1IgorCisjOiBndWlfYmV2YWwuYzo2OAorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICJFMjMyOiBCYWxsb29uRXZhbCBuZWThIHNhIHZ5dHZvcmm7IHNwcuF2b3UgYSB64XJvdmXyIHNw5HRu/W0gdm9sYW7tbSIKKworIzogZ3VpLmM6MjAzCittc2dpZCAiRTIyOTogQ2Fubm90IHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkUyMjk6IE5lZOEgc2Egc3B1c3RpuyBHVUkiCisKKyM6IGd1aS5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogTmVk4SBzYSDo7XRhuyB6IFwiJXNcIiIKKworIzogZ3VpLmM6NDUzCittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiB2b7ViYSAnZ3VpZm9udHdpZGUnIGplIGNoeWJuZSBuYXN0YXZlbuEiCisKKyM6IGd1aS5jOjM2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1NDogQ2Fubm90IGFsbG9jYXRlIGNvbG9yICVzIgorbXNnc3RyICJFMjU0OiBOZWThIHNhIGFsb2tvdmG7IGZhcmJhICVzIgorCisjOiBndWkuYzozOTgzCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkNoeWJhIgorCisjOiBndWlfZ3RrLmM6MTE5MAorbXNnaWQgIlZpbSBkaWFsb2cuLi4iCittc2dzdHIgIlZpbSBkaWFs82cuLiIKKworIzogZ3VpX2d0ay5jOjE1NzYgZ3VpX21vdGlmLmM6Mjc1NAorbXNnaWQgIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIKK21zZ3N0ciAiVklNIC0gTuFqc7sgYSBuYWhyYWRpuy4uLiIKKworIzogZ3VpX2d0ay5jOjE1ODEgZ3VpX21vdGlmLmM6Mjc1NgorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiVklNIC0gTuFqc7suLi4iCisKKyM6IGd1aV9ndGsuYzoxNjA0IGd1aV9tb3RpZi5jOjI4NzQKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICJWeWi1YWRhuzoiCisKKyM6IGd1aV9ndGsuYzoxNjIyIGd1aV9tb3RpZi5jOjI5MDYKK21zZ2lkICJSZXBsYWNlIHdpdGg6IgorbXNnc3RyICJOb3b9IHRleHQ6IgorCisjLiBleGFjdCBtYXRjaCBvbmx5IGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE2NTQgZ3VpX21vdGlmLmM6MzAwOAorbXNnaWQgIk1hdGNoIGV4YWN0IHdvcmQgb25seSIKK21zZ3N0ciAiSLVhZGG7IGxlbiBjZWzpIHNsb3bhIgorCisjOiBndWlfZ3RrLmM6MTY2NiBndWlfbW90aWYuYzoyOTc2Cittc2dpZCAiRGlyZWN0aW9uIgorbXNnc3RyICJTbWVyIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjE2NzggZ3VpX21vdGlmLmM6Mjk4OAorbXNnaWQgIlVwIgorbXNnc3RyICJIb3JlIgorCisjOiBndWlfZ3RrLmM6MTY4MiBndWlfbW90aWYuYzoyOTk2Cittc2dpZCAiRG93biIKK21zZ3N0ciAiRG9sdSIKKworIy4gJ0ZpbmQgTmV4dCcgYnV0dG9uCisjOiBndWlfZ3RrLmM6MTcwNCBndWlfbW90aWYuYzoyNzc4Cittc2dpZCAiRmluZCBOZXh0IgorbXNnc3RyICJO4WpzuyDvYWy5aWUiCisKKyMuICdSZXBsYWNlJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNzIxIGd1aV9tb3RpZi5jOjI3OTUKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICJOYWhyYWRpuyIKKworIy4gJ1JlcGxhY2UgQWxsJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNzMwIGd1aV9tb3RpZi5jOjI4MDgKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAiTmFocmFkabsgVrlldGtvIgorCisjOiBndWlfZ3RrX3gxMS5jOjEwNzkgZ3VpX3gxMS5jOjExOTkKK21zZ2lkICJFMjMzOiBjYW5ub3Qgb3BlbiBkaXNwbGF5IgorbXNnc3RyICJFMjMzOiBuZWThIHNhIG90dm9yabsgZGlzcGxlaiIKKworIzogZ3VpX2d0a194MTEuYzoyNDk0IGd1aV94MTEuYzoxOTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzQ6IFVua25vd24gZm9udHNldDogJXMiCittc2dzdHIgIkUyMzQ6IE5lem7hbWEgc2FkYSBw7XNpZW06ICVzIgorCisjOiBndWlfZ3RrX3gxMS5jOjI1MTgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAiVv1iZXIgUO1zbWEiCisKKyM6IGd1aV9ndGtfeDExLmM6Mjc2NCBndWlfbWFjLmM6Mjk4MiBndWlfdzQ4LmM6MTE5NyBndWlfeDExLmM6MTgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBVbmtub3duIGZvbnQ6ICVzIgorbXNnc3RyICJFMjM1OiBOZXpu4W1lIHDtc21vOiAlcyIKKworIzogZ3VpX2d0a194MTEuYzoyNzc1IGd1aV94MTEuYzoxODU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzY6IEZvbnQgXCIlc1wiIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiRTIzNjogUO1zbW8gXCIlc1wiIG5lbeEgcGV2bvogue1ya3UiCisKKyM6IGd1aV9ndGtfeDExLmM6MzU4MCB1aS5jOjE5NzEKK21zZ2lkICJVc2VkIENVVF9CVUZGRVIwIGluc3RlYWQgb2YgZW1wdHkgc2VsZWN0aW9uIgorbXNnc3RyICJQb3W+aXT9IENVVF9CVUZGRVIwIG5hbWllc3RvIHBy4XpkbmVobyB2/WJlcnUiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTMgZ3VpX21vdGlmLmM6MTYxNgorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdGVyIgorCisjOiBndWlfbW90aWYuYzoxNjE1Cittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIkFkcmVz4XJlIgorCisjOiBndWlfbW90aWYuYzoxNjE3Cittc2dpZCAiSGVscCIKK21zZ3N0ciAiUG9tb2Nu7WsiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTgKK21zZ2lkICJGaWxlcyIKK21zZ3N0ciAiU/pib3J5IgorCisjOiBndWlfbW90aWYuYzoxNjIwCittc2dpZCAiU2VsZWN0aW9uIgorbXNnc3RyICJW/WJlciIKKworIzogZ3VpX21vdGlmLmM6MjgyMQorbXNnaWQgIlVuZG8iCittc2dzdHIgIlNw5LsiCisKKyM6IGd1aV9yaXNjb3MuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogQ2FuJ3QgbG9hZCBaYXAgZm9udCAnJXMnIgorbXNnc3RyICJFMjM1OiBOZW30vmVtIG5h6O10YbsgY2h5Ym79IGZvbnQgJyVzJyIKKworIzogZ3VpX3Jpc2Nvcy5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogQ2FuJ3QgdXNlIGZvbnQgJXMiCittc2dzdHIgIkUyMzU6IE5lZOEgc2EgcG91vu27IHDtc21vICVzIgorCisjOiBndWlfcmlzY29zLmM6MzI2OQorbXNnaWQgIiIKKyJcbiIKKyJTZW5kaW5nIG1lc3NhZ2UgdG8gdGVybWluYXRlIGNoaWxkIHByb2Nlc3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQb3NpZWxhbSBzcHLhdnUgbmEgdWtvbuhlbmllIHN5bm92c2vpaG8gcHJvY2VzdS5cbiIKKworIzogZ3VpX3czMi5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiIgorIkUyNDM6IEFyZ3VtZW50IG5pZSBqZSBwb2Rwb3JvdmFu/TogXG4iCisiLSVzXCI7IFBvdb5pdGUgT0xFIHZlcnppdS4iCisKKyMuIFRPRE86IE1heSBiZSBjaGFuZ2VkIHRoaXMgbWVzc2FnZQorIzogZ3VpX3czMi5jOjM0OTkgZ3VpX3czMi5jOjM1MzIgZ3VpX3gxMS5jOjMyNTIKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IENoeWJhIC0tIG5lZOFq+iBzYSBwcmXo7XRhuyBvem5h6G92YWNpZSBk4XRhISIKKworIzogZ3VpX3c0OC5jOjIwODEKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJO4WpzuyByZbthemVjIChwb3W+aXRlICdcXFxcJyBhayBjaGV0ZSBu4WpzuyAnXFwnKSIKKworIzogZ3VpX3c0OC5jOjIxMDYKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJO4WpzuyBhIE5haHJhZGm7IChwb3W+aXRlICdcXFxcJyBhayBjaGNldGUgbuFqc7sgJ1xcJykiCisKKyM6IGd1aV94MTEuYzoxNDE5Cittc2dpZCAiVmltIEU0NTg6IENhbm5vdCBhbGxvY2F0ZSBjb2xvcm1hcCBlbnRyeSwgc29tZSBjb2xvcnMgbWF5IGJlIGluY29ycmVjdCIKK21zZ3N0ciAiIgorIlZpbSBFNDU4OiBOZWThIHNhIGFsb2tvdmG7IHBvbG++a2EgbWFweSBmYXJpZWIuIE5pZWt0b3LpIGZhcmJ5IG30vnUgYnm7ICIKKyJuZXNwcuF2bmUiCisKKyM6IGd1aV94MTEuYzoxOTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICJFMjUwOiBDaP1iYSBw7XNtbyBwcmUgbmFzbGVkdWr6Y2Ugem5ha2926SBzYWR5ICVzOiIKKworIzogZ3VpX3gxMS5jOjIwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MjogRm9udHNldCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI1MjogTuF6b3Ygc2FkeSBw7XNpZW06ICVzIgorCisjOiBndWlfeDExLmM6MjAzMworIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJQ7XNtbyAnJXMnIG5lbeEgcGV2bm91ILntcmt1IgorCisjOiBndWlfeDExLmM6MjA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTM6IE7hem92IHNhZHkgcO1zaWVtOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1MworIywgYy1mb3JtYXQKK21zZ2lkICJGb250MDogJXNcbiIKK21zZ3N0ciAiUO1zbW8wOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAiUO1zbW8xOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250JWQgd2lkdGggaXMgbm90IHR3aWNlIHRoYXQgb2YgZm9udDBcbiIKK21zZ3N0ciAiUO1zbW8lZCBuaWUgamUgZHZha3LhdCC5aXK5aWUgYWtvIHDtc21vMFxuIgorCisjOiBndWlfeDExLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MCB3aWR0aDogJWxkXG4iCittc2dzdHIgIqntcmthIHDtc21hMDogJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyKp7XJrYSBw7XNtYTE6ICVsZFxuIgorIlxuIgorCisjOiBoYW5ndWxpbi5jOjYxMAorbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKK21zZ3N0ciAiRTI1NjogSGFuZ3VsIGF1dG9tYXRhIEVSUk9SIgorCisjOiBpZl9jc2NvcGUuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3NbY29wZV0gJXMiCittc2dzdHIgIlBvdb5pdGllOiBjc1tjb3BlXSAlcyIKKworIzogaWZfY3Njb3BlLmM6NjcKK21zZ2lkICJBZGQgYSBuZXcgZGF0YWJhc2UiCittc2dzdHIgIlByaWRhuyBub3b6IGRhdGFi4Xp1IgorCisjOiBpZl9jc2NvcGUuYzo2OQorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIki1YWRhbmllIHZ6b3J1IgorCisjOiBpZl9jc2NvcGUuYzo3MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICJab2JyYXppuyB0+nRvIHNwcuF2dSIKKworIzogaWZfY3Njb3BlLmM6NzMKK21zZ2lkICJLaWxsIGEgY29ubmVjdGlvbiIKK21zZ3N0ciAiVWtvbuhpuyBzcG9qZW5pZSIKKworIzogaWZfY3Njb3BlLmM6NzUKK21zZ2lkICJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIgorbXNnc3RyICJabm92dSBpbmljaWFsaXpvdmG7IHa5ZXRreSBzcG9qZW5pYSIKKworIzogaWZfY3Njb3BlLmM6NzcKK21zZ2lkICJTaG93IGNvbm5lY3Rpb25zIgorbXNnc3RyICJab2JyYXppuyBzcG9qZW5pYSIKKworIzogaWZfY3Njb3BlLmM6MTA4Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICJU4XRvIGNzY29wZSBwcu1rYXogbmVwb2Rwb3J1amUgcm96ZGW1b3ZhbmllIG9rbmEuXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0MworbXNnaWQgIlVzYWdlOiBjc3RhZyA8aWRlbnQ+IgorbXNnc3RyICJQb3W+aXRpZTogY3N0YWcgPG9kc2FkZW5pZT4iCisKKyM6IGlmX2NzY29wZS5jOjE5OQorbXNnaWQgIkUyNTc6IGNzdGFnOiB0YWcgbm90IGZvdW5kIgorbXNnc3RyICJFMjU3OiBjc3RhZzogdGFnIG5lbuFqZGVu/SIKKworIzogaWZfY3Njb3BlLmM6NDA3IGlmX2NzY29wZS5jOjQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGF0KCVzKSBlcnJvcjogJWQiCittc2dzdHIgInN0YXQoJXMpIGNoeWJhOiAlZCIKKworIzogaWZfY3Njb3BlLmM6NDYwIGlmX2NzY29wZS5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRlZCBjc2NvcGUgZGF0YWJhc2UgJXMiCittc2dzdHIgIlByaWRhbuEgY3Njb3BlIGRhdGFi4XphICVzIgorCisjOiBpZl9jc2NvcGUuYzo0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgZGlyZWN0b3J5IG9yIGEgdmFsaWQgY3Njb3BlIGRhdGFiYXNlIgorbXNnc3RyICIlcyBuaWUgamUgYW5pIGFkcmVz4XJvbSBhbmkgc3By4XZub3UgY3Njb3BlIGRhdGFi4XpvdSIKKworIzogaWZfY3Njb3BlLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWQiCittc2dzdHIgImNoeWJhIHByaSDo7XRhbu0gY3Njb3BlIHNwb2plbmlhICVkIgorCisjOiBpZl9jc2NvcGUuYzo2MzMKK21zZ2lkICJ1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAibmV6buFteSB0eXAgY3Njb3BlIGi1YWRhbmlhIgorCisjOiBpZl9jc2NvcGUuYzo2ODAKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAiTmVkYWr6IHNhIHZ5dHZvcmm7IGNzY29wZSBy+nJ5IgorCisjOiBpZl9jc2NvcGUuYzo3NDUKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbiBleGVjIGZhaWxlZCIKK21zZ3N0ciAic3B1c3RlbmllIGNzX2NyZWF0ZV9jb25uZWN0aW9uIHpseWhhbG8iCisKKyM6IGlmX2NzY29wZS5jOjc1NQorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIHRvX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IHZvbGFuaWUgZmRvcGVuIHByZSB0b19mcCB6bHloYWxvIgorCisjOiBpZl9jc2NvcGUuYzo3NTcKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciBmcl9mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiB2b2xhbmllIGZkb3BlbiBwcmUgZnJfZnAgemx5aGFsbyIKKworIzogaWZfY3Njb3BlLmM6Nzg1Cittc2dpZCAibm8gY3Njb3BlIGNvbm5lY3Rpb25zIgorbXNnc3RyICK+aWFkbmUgY3Njb3BlIHNwb2plbmlhIgorCisjOiBpZl9jc2NvcGUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiBjc2NvcGUgaLVhZGFuaWUgJXMgdm8gdnpvcmUgJXMgbmVuYblsbyC+aWFkbnUgemhvZHUiCisKKyM6IGlmX2NzY29wZS5jOjg5OQorbXNnaWQgImNzY29wZSBjb21tYW5kczpcbiIKK21zZ3N0ciAicHLta2F6eSBjc2NvcGU6XG4iCisKKyM6IGlmX2NzY29wZS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLTVzOiAlLTMwcyAoVXNhZ2U6ICVzKVxuIgorbXNnc3RyICIlLTVzOiAlLTMwcyAoUG91vml0aWU6ICVzKVxuIgorCisjOiBpZl9jc2NvcGUuYzo5NzAKK21zZ2lkICJkdXBsaWNhdGUgY3Njb3BlIGRhdGFiYXNlIG5vdCBhZGRlZCIKK21zZ3N0ciAiZHVwbGljaXRu4SBjc2NvcGUgZGF0YWLhemEgbmVib2xhIHByaWRhbuEiCisKKyM6IGlmX2NzY29wZS5jOjk4MQorbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICJkb3NpYWhudXT9IG1heGlt4WxueSBwb+hldCBjc2NvcGUgc3BvamVu7SIKKworIzogaWZfY3Njb3BlLmM6MTEwMgorbXNnaWQgIkUyNjA6IGNzY29wZSBjb25uZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MDogY3Njb3BlIHNwb2plbmllIG5lbuFqZGVu6SIKKworIzogaWZfY3Njb3BlLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYxOiBjc2NvcGUgY29ubmVjdGlvbiAlcyBub3QgZm91bmQiCittc2dzdHIgIkUyNjE6IGNzY29wZSBzcG9qZW5pZSAlcyBuZW7hamRlbukiCisKKyM6IGlmX2NzY29wZS5jOjExNDEKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiBjbG9zZWQiCittc2dzdHIgImNzY29wZSBzcG9qZW5pZSB1a29u6GVu6SIKKworIzogaWZfY3Njb3BlLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWRcbiIKK21zZ3N0ciAiY3Njb3BlIHNwb2plbmllICVzIHVrb27oZW7pXG4iCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTI5MAorbXNnaWQgImZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJvc3Vkb3bhIGNoeWJhIHYgY3NfbWFuYWdlX21hdGNoZXMiCisKKyM6IGlmX2NzY29wZS5jOjEzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKK21zZ3N0ciAiRTI2MjogY2h5YmEgcHJpIOjtdGFu7SBjc2NvcGUgc3BvamVuaWEgJWQiCisKKyM6IGlmX2NzY29wZS5jOjE0NDkKK21zZ2lkICJjb3VsZG4ndCBtYWxsb2NcbiIKK21zZ3N0ciAidm9sYW5pZSBtYWxsb2Mgemx5aGFsb1xuIgorCisjOiBpZl9jc2NvcGUuYzoxNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzXG4iCittc2dzdHIgIkNzY29wZSB0YWc6ICVzXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0NTgKK21zZ2lkICIgICAjICAgbGluZSIKK21zZ3N0ciAiICAgIyAgIHJpYWRvayIKKworIzogaWZfY3Njb3BlLmM6MTQ2MAorbXNnaWQgImZpbGVuYW1lIC8gY29udGV4dCAvIGxpbmVcbiIKK21zZ3N0ciAibuF6b3Ygc/pib3J1LyBrb250ZXh0LyByaWFkb2tcbiIKKworIzogaWZfY3Njb3BlLmM6MTcxOAorbXNnaWQgIkFsbCBjc2NvcGUgZGF0YWJhc2VzIHJlc2V0IgorbXNnc3RyICJWuWV0a3kgY3Njb3BlIGRhdGFi4XplIHJlc2V0b3ZhbukiCisKKyM6IGlmX2NzY29wZS5jOjE3ODUKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAivmlhZG5lIGNzY29wZSBzcG9qZW5pYVxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzg5Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAgbuF6b3YgZGF0YWLhemUgICAgICAgICAgICAgICAgICAgICAgcHJlZHBvbmEgY2VzdHlcbiIKKworIzogaWZfY3Njb3BlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMmQgJS01bGQgICUtMzRzICA8bm9uZT5cbiIKK21zZ3N0ciAiJTJkICUtNWxkICAlLTM0cyAgPL5pYWRueT5cbiIKKworIzogaWZfcHl0aG9uLmM6MjU1IGlmX3J1YnkuYzoyNjAgaWZfdGNsLmM6MTk1IG1ieXRlLmM6MjYyOSBvc193aW4zMi5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcwOiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5ICVzIgorbXNnc3RyICJFMzcwOiBOZXBvZGFyaWxvIHNhIG5haHJhuyBrbmm+bmljdSAlcyIKKworIzogaWZfcHl0aG9uLmM6MjY3IGlmX3J1YnkuYzoyNzIgaWZfdGNsLmM6MjA2IG1ieXRlLmM6MjY0NSBvc193aW4zMi5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ4OiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5IGZ1bmN0aW9uICVzIgorbXNnc3RyICJFNDQ4OiBOZXBvZGFyaWxvIHNhIG5haHJhuyBmdW5rY2l1IGtuab5uaWNlICVzIgorCisjOiBpZl9weXRob24uYzozOTIKK21zZ2lkICIiCisiRTI2MzogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFB5dGhvbiBsaWJyYXJ5IGNvdWxkIG5vdCBiZSAiCisibG9hZGVkLiIKK21zZ3N0ciAiRTI2MjogUHJlcOHodGUsIHRlbnRvIHBy7WtheiBqZSB2eXBudXT9LCBQeXRob24ga25pvm5pY2EgbmVt9L5lIGJ5u25h6O10YW7hLiIKKworIzogaWZfcHl0aG9uLmM6NTkyCittc2dpZCAiY2FuJ3QgZGVsZXRlIE91dHB1dE9iamVjdCBhdHRyaWJ1dGVzIgorbXNnc3RyICJuZWThIHNhIHZ5bWF6Ybsgdmxhc3Rub3O7IE91dHB1dE9iamVjdCIKKworIzogaWZfcHl0aG9uLmM6NTk5Cittc2dpZCAic29mdHNwYWNlIG11c3QgYmUgYW4gaW50ZWdlciIKK21zZ3N0ciAic29mdHNwYWNlIG11c+0gYnm7IGtsYWRu6SBjZWzpIOjtc2xvIgorCisjOiBpZl9weXRob24uYzo2MDcKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiY2h5Ym7hIHZsYXN0bm9zuyIKKworIzogaWZfcHl0aG9uLmM6NjQ2IGlmX3B5dGhvbi5jOjY2MAorbXNnaWQgIndyaXRlbGluZXMoKSByZXF1aXJlcyBsaXN0IG9mIHN0cmluZ3MiCittc2dzdHIgIndyaXRlbGluZXMoKSB2eb5hZHVqZSB6b3puYW0gcmW7YXpjb3YiCisKKyM6IGlmX3B5dGhvbi5jOjc4NgorbXNnaWQgIkUyNjQ6IFB5dGhvbjogRXJyb3IgaW5pdGlhbGlzaW5nIEkvTyBvYmplY3RzIgorbXNnc3RyICJFMjY0OiBQeXRob246IENoeWJhIHByaSBpbmljaWFsaXrhY2lpIEkvTyBvYmpla3RvdiIKKworIzogaWZfcHl0aG9uLmM6OTcxIGlmX3RjbC5jOjE0MDMKK21zZ2lkICJpbnZhbGlkIGV4cHJlc3Npb24iCittc2dzdHIgImNoeWJu/SB2/XJheiIKKworIzogaWZfcHl0aG9uLmM6OTg1IGlmX3RjbC5jOjE0MDgKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgInBvZHBvcmEgdv1yYXpvdiBib2xhIHZ5cG51dOEgcHJpIHByZWtsYWRlIHByb2dyYW11IgorCisjOiBpZl9weXRob24uYzo5OTgKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJwb2t1cyBvIG9ka2F6IG5hIHZ5bWF6YW79IGJ1ZmZlciIKKworIzogaWZfcHl0aG9uLmM6MTAxMyBpZl9weXRob24uYzoxMDU0IGlmX3B5dGhvbi5jOjExMTggaWZfdGNsLmM6MTIxNQorbXNnaWQgImxpbmUgbnVtYmVyIG91dCBvZiByYW5nZSIKK21zZ3N0ciAi6O1zbG8gcmlhZGthIG1pbW8gcm96c2FoIgorCisjOiBpZl9weXRob24uYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIjxidWZmZXIgb2JqZWN0IChkZWxldGVkKSBhdCAlOGxYPiIKK21zZ3N0ciAiPG9iamVrdCBidWZmZXJ1ICh2eW1hemFu/SkgbmEgJThsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjEzNDIgaWZfdGNsLmM6ODM3Cittc2dpZCAiaW52YWxpZCBtYXJrIG5hbWUiCittc2dzdHIgImNoeWJu6SBtZW5vIHpuYehreSIKKworIzogaWZfcHl0aG9uLmM6MTYxNworbXNnaWQgIm5vIHN1Y2ggYnVmZmVyIgorbXNnc3RyICK+aWFkbnkgdGFr/SBidWZmZXIiCisKKyM6IGlmX3B5dGhvbi5jOjE3MDUKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICJwb2t1cyBvIG9ka2F6IG5hIHZ5bWF6YW7pIG9rbm8iCisKKyM6IGlmX3B5dGhvbi5jOjE3NTAKK21zZ2lkICJyZWFkb25seSBhdHRyaWJ1dGUiCittc2dzdHIgInZsYXN0bm9zuyBpYmEgcHJlIOjtdGFuaWUiCisKKyM6IGlmX3B5dGhvbi5jOjE3NjMKK21zZ2lkICJjdXJzb3IgcG9zaXRpb24gb3V0c2lkZSBidWZmZXIiCittc2dzdHIgInVtaWVzdG5lbmllIGt1cnpvcnUgbWltbyBidWZmZXIiCisKKyM6IGlmX3B5dGhvbi5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKGRlbGV0ZWQpIGF0ICUuOGxYPiIKK21zZ3N0ciAiPG9iamVrdCBva25hICh2eW1hemFu/SkgbmEgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODUyCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjxvYmpla3Qgb2tuYSAobmV6buFteSkgbmEgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8b2tubyAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5MzAKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAivmlhZG5lIHRha+kgb2tubyIKKworIzogaWZfcHl0aG9uLmM6MjE4NyBpZl9weXRob24uYzoyMjIyIGlmX3B5dGhvbi5jOjIyNzIgaWZfcHl0aG9uLmM6MjMzNQorIzogaWZfcHl0aG9uLmM6MjQ1NSBpZl9weXRob24uYzoyNTA3IGlmX3RjbC5jOjY4NSBpZl90Y2wuYzo3MzAgaWZfdGNsLmM6ODA0CisjOiBpZl90Y2wuYzo4NzQgaWZfdGNsLmM6MTk5OQorbXNnaWQgImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIm5lZGFq+iBzYSB1bG++absgc3DkdG7pIGluZm9ybeFjaWUiCisKKyM6IGlmX3B5dGhvbi5jOjIxODkgaWZfcHl0aG9uLmM6MjI3OSBpZl9weXRob24uYzoyMzQ2Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBsaW5lIgorbXNnc3RyICJuZWThIHNhIHZ5bWF6YbsgcmlhZG9rIgorCisjOiBpZl9weXRob24uYzoyMjI0IGlmX3B5dGhvbi5jOjIzNjIgaWZfdGNsLmM6NjkxIGlmX3RjbC5jOjIwMjEKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICJuZWThIHNhIG5haHJhZGm7IHJpYWRvayIKKworIzogaWZfcHl0aG9uLmM6MjM3OCBpZl9weXRob24uYzoyNDU3IGlmX3B5dGhvbi5jOjI1MTUKK21zZ2lkICJjYW5ub3QgaW5zZXJ0IGxpbmUiCittc2dzdHIgIm5lZOEgc2Egdmxvvmm7IHJpYWRvayIKKworIzogaWZfcHl0aG9uLmM6MjYxOQorbXNnaWQgInN0cmluZyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAicmW7YXplYyBuZXNtaWUgb2JzYWhvdmG7IHpuYWt5IG5vdulobyByaWFka3UiCisKKyM6IGlmX3J1YnkuYzo0MDEKK21zZ2lkICJFMjY2OiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUnVieSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJFMjY2OiBQcmVw4eh0ZSwgdGVudG8gcHLta2F6IGplIHZ5cG51dP0sIFJ1Ynkga25pvm5pY2EgbmVt9L5lIGJ5uyBuYejtdGFu4S4iCisKKyM6IGlmX3J1YnkuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIKK21zZ3N0ciAiRTI3MzogTmV6buFteSAnbG9uZ2ptcCcgc3RhdiAlZCIKKworIzogaWZfc25pZmYuYzo2NworbXNnaWQgIlRvZ2dsZSBpbXBsZW1lbnRhdGlvbi9kZWZpbml0aW9uIgorbXNnc3RyICJQcmVwbvq7IGltcGxlbWVudOFjaXUvZGVmaW7tY2l1IgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICJVa+F6YbsgeuFrbGFkbvogdHJpZWR1IgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAiVWvhemG7IHByZbthvmVu+iDobGVuc2v6IGZ1bmtjaXUiCisKKyM6IGlmX3NuaWZmLmM6NzAKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGZpbGUiCittc2dzdHIgIk9ibm92absgem8gc/pib3J1IgorCisjOiBpZl9zbmlmZi5jOjcxCittc2dpZCAiUmV0cmlldmUgZnJvbSBwcm9qZWN0IgorbXNnc3RyICJPYm5vdmm7IHogcHJvamVrdHUiCisKKyM6IGlmX3NuaWZmLmM6NzMKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGFsbCBwcm9qZWN0cyIKK21zZ3N0ciAiT2Jub3ZpuyB6byB2uWV0a/1jaCBwcm9qZWt0b3YiCisKKyM6IGlmX3NuaWZmLmM6NzQKK21zZ2lkICJSZXRyaWV2ZSIKK21zZ3N0ciAiT2Jub3ZpuyIKKworIzogaWZfc25pZmYuYzo3NQorbXNnaWQgIlNob3cgc291cmNlIG9mIgorbXNnc3RyICJVa+F6YbsgemRyb2oiCisKKyM6IGlmX3NuaWZmLmM6NzYKK21zZ2lkICJGaW5kIHN5bWJvbCIKK21zZ3N0ciAiTuFqc7sgem5hayIKKworIzogaWZfc25pZmYuYzo3NworbXNnaWQgIkJyb3dzZSBjbGFzcyIKK21zZ3N0ciAiUHJlenJpZbsgdHJpZWR1IgorCisjOiBpZl9zbmlmZi5jOjc4Cittc2dpZCAiU2hvdyBjbGFzcyBpbiBoaWVyYXJjaHkiCittc2dzdHIgIlVr4XphuyB0cmllZHUgdiBoaWVyYXJjaGlpIgorCisjOiBpZl9zbmlmZi5jOjc5Cittc2dpZCAiU2hvdyBjbGFzcyBpbiByZXN0cmljdGVkIGhpZXJhcmNoeSIKK21zZ3N0ciAiVWvhemG7IHRyaWVkdSB2IG9ibWVkemVuZWogaGllcmFyY2hpaSIKKworIzogaWZfc25pZmYuYzo4MAorbXNnaWQgIlhyZWYgcmVmZXJzIHRvIgorbXNnc3RyICJYcmVmIG9ka2F6dWplIG5hIgorCisjOiBpZl9zbmlmZi5jOjgxCittc2dpZCAiWHJlZiByZWZlcnJlZCBieSIKK21zZ3N0ciAiWHJlZiBvZGvhemFu/SB6IgorCisjOiBpZl9zbmlmZi5jOjgyCittc2dpZCAiWHJlZiBoYXMgYSIKK21zZ3N0ciAiWHJlZiBt4SIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiBwb3W+aXT9IgorCisjOiBpZl9zbmlmZi5jOjg0Cittc2dpZCAiU2hvdyBkb2N1IG9mIgorbXNnc3RyICJVa+F6YbsgZG9rdW1lbnThY2l1IgorCisjOiBpZl9zbmlmZi5jOjg1Cittc2dpZCAiR2VuZXJhdGUgZG9jdSBmb3IiCittc2dzdHIgIlZ5dHZvcmm7IGRva3VtZW504WNpdSBwcmUiCisKKyM6IGlmX3NuaWZmLmM6OTcKK21zZ2lkICIiCisiQ2Fubm90IGNvbm5lY3QgdG8gU05pRkYrLiBDaGVjayBlbnZpcm9ubWVudCAoc25pZmZlbWFjcyBtdXN0IGJlIGZvdW5kIGluICIKKyIkUEFUSCkuXG4iCittc2dzdHIgIiIKKyJabGloYWxvIHByaXBvamVuaWUgbmEgU05pRkYrLCBQcmV2ZXJ0ZSBwcm9zdHJlZGllIChzbmlmZmVtYWNzIHNhIG11c+0gIgorIm5hY2jhZHphuyB2ICRQQVRIKS5cbiIKKworIzogaWZfc25pZmYuYzo0MjUKK21zZ2lkICJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiRTI3NDogU25pZmY6IENoeWJhIHBv6GFzIOjtdGFuaWEuIE9kcG9qZW7pIgorCisjOiBpZl9zbmlmZi5jOjU1MworbXNnaWQgIlNOaUZGKyBpcyBjdXJyZW50bHkgIgorbXNnc3RyICJTTmlGRisgamUgYWt0deFsbmUgIgorCisjOiBpZl9zbmlmZi5jOjU1NQorbXNnaWQgIm5vdCAiCittc2dzdHIgIm5lIgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAicHJpcG9qZW79IgorCisjOiBpZl9zbmlmZi5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjc1OiBVbmtub3duIFNOaUZGKyByZXF1ZXN0OiAlcyIKK21zZ3N0ciAiRTI3NTogTmV6buFtYSBTTmlGRisgcG++aWFkYXZrYTogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IENoeWJhIHByaXBvamVuaWEgbmEgU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwMDkKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODogU05pRkYrIG5pZSBqZSBwcmlwb2plbv0iCisKKyM6IGlmX3NuaWZmLmM6MTAxOAorbXNnaWQgIkUyNzk6IE5vdCBhIFNOaUZGKyBidWZmZXIiCittc2dzdHIgIkUyNzk6IE5pZSBqZSBTTmlGRisgYnVmZmVyb20iCisKKyM6IGlmX3NuaWZmLmM6MTA4MworbXNnaWQgIlNuaWZmOiBFcnJvciBkdXJpbmcgd3JpdGUuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiU25pZmY6IENoeWJhIHrhcGlzdS4gT2Rwb2plbukiCisKKyM6IGlmX3RjbC5jOjQxOQorbXNnaWQgImludmFsaWQgYnVmZmVyIG51bWJlciIKK21zZ3N0ciAiY2h5Ym7pIOjtc2xvIGJ1ZmZlcnUiCisKKyM6IGlmX3RjbC5jOjQ2NSBpZl90Y2wuYzo5MzIgaWZfdGNsLmM6MTExMQorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIm5pZSBqZSBluXRlIHBvZHBvcm92YW7pIgorCisjOiBpZl90Y2wuYzo1MDIKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAibmV6buFtYSB2b7ViYSIKKworIy4gPz8/CisjOiBpZl90Y2wuYzo3NzUKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgIm5lZGFq+iBzYSBuYXN0YXZpuyByaWFka3kiCisKKyM6IGlmX3RjbC5jOjg0NgorbXNnaWQgIm1hcmsgbm90IHNldCIKK21zZ3N0ciAiem5h6GthIG5pZSBqZSBuYXN0YXZlbuEiCisKKyM6IGlmX3RjbC5jOjg1MiBpZl90Y2wuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdyAlZCBjb2x1bW4gJWQiCittc2dzdHIgInJpYWRvayAlZCBzdOVwZWMgJWQiCisKKyM6IGlmX3RjbC5jOjg4MgorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgIm5lZOEgc2Egdmxvvmm7L3ByaXBvamm7IHJpYWRvayIKKworIzogaWZfdGNsLmM6MTI2OQorbXNnaWQgInVua25vd24gZmxhZzogIgorbXNnc3RyICJuZXpu4W15IHBy7XpuYWs6ICIKKworIzogaWZfdGNsLmM6MTMzOQorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICJuZXpu4W1hIHZpbU1vvm5vc7siCisKKyM6IGlmX3RjbC5jOjE0MjQKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgInByZXJ1uWVuaWUgeiBrbOF2ZXNuaWNlIgorCisjOiBpZl90Y2wuYzoxNDI5Cittc2dpZCAidmltIGVycm9yIgorbXNnc3RyICJjaHliYSB2aW0iCisKKyM6IGlmX3RjbC5jOjE0NzIKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIm5lZOEgc2Egdnl0dm9yabsgcHLta2F6IGJ1ZmZlcnUvb2tuYTogb2JqZWt0IHZ5bWF6YW79IgorCisjOiBpZl90Y2wuYzoxNTQ2Cittc2dpZCAiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICJuZWThIHNhIHphcmVnaXN0cm92YbsgcHLta2F6IHNw5HRu6WhvIHZvbGFuaWE6IGJ1ZmZlci9va25vIHW+IGJvbCB2eW1hemFu/SIKKworIy4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgRmFtb3VzIGxhc3Qgd29yZD8KKyM6IGlmX3RjbC5jOjE1NjMKK21zZ2lkICIiCisiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IGNvcnJ1cHQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0uIgorIm9yZyIKK21zZ3N0ciAiIgorIkUyODA6IFRDTCBGQVRBTCBFUlJPUjogcmVmbGlzdCBwb7lrb2Rlbv0hPyBPem7hbXRlLCBwcm9z7W0sIHT6dG8gY2h5YnUgbmEgIgorInZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTU2NAorbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIm5lZOEgc2EgemFyZWdpc3Ryb3ZhuyBwcu1rYXogc3DkdG7paG8gdm9sYW5pYTogb2RrYXogbmEgYnVmZmVyL29rbm8gbmVu4WpkZW79IgorCisjOiBpZl90Y2wuYzoxNzI1Cittc2dpZCAiU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFRjbCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJQcmVw4eh0ZSwgdGVudG8gcHLta2F6IGplIHZ5cG51dP0sIFRjbCBrbmm+bmljYSBuZW30vmUgYnm7IG5h6O10YW7hLiIKKworIzogaWZfdGNsLmM6MTg4NworbXNnaWQgIkUyODE6IFRDTCBFUlJPUjogZXhpdCBjb2RlIGlzIG5vdCBpbnQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MTogVENMIENIWUJBOiBu4XZyYXRvdv0ga/NkIG5pZSBqZSBjZWzpIOjtc2xvIT8gT3puYW10ZSwgcHJlc+1tLCB0dXRvICIKKyJjaHlidSBuYSB2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjIwMDcKK21zZ2lkICJjYW5ub3QgZ2V0IGxpbmUiCittc2dzdHIgIm5lZOEgc2EgcHJl6O10YbsgcmlhZG9rIgorCisjOiBpZl94Y21kc3J2LmM6MjEzCittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAiTmVt9L5lbSB6YXJlZ2lzdHJvdmG7IG1lbm8gcHLta2F6b3bpaG8gc2VydnJhIgorCisjOiBpZl94Y21kc3J2LmM6NDM0IG9zX21zd2luLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6IG1lbm8gcmVnaXN0cm92YW7paG8gc2VydnJhIFwiJXNcIiBuZWV4aXN0dWplIgorCisjOiBpZl94Y21kc3J2LmM6NDYzCittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODogQ2h5YmEgcG/oYXMgcHJlbm9zdSBwcu1rYXp1IGRvIGNpZbVvdulobyBwcm9ncmFtdSIKKworIzogaWZfeGNtZHNydi5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNlcnZlciBpZCB1c2VkOiAlcyIKK21zZ3N0ciAiUG91vu106SBjaHlibukgaWQgc2VydnJhOiAlcyIKKworIzogaWZfeGNtZHNydi5jOjEwNzkKK21zZ2lkICJFMjQ5OiBjb3VsZG4ndCByZWFkIFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSIKK21zZ3N0ciAiRTI0OTogbmVt9L5lbSDo7XRhuyBWSU0gcmVnaXN0cm92+iB2bGFzdG5vc7siCisKKyM6IGlmX3hjbWRzcnYuYzoxMDkwCittc2dpZCAiRTI1MTogVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IGlzIGJhZGx5IGZvcm1lZC4gIERlbGV0ZWQhIgorbXNnc3RyICJFMjUxOiBWSU0gcmVnaXN0cm924SC+aWFkb3O7IGplIHpsZSBmb3JtdWxvdmFu4S4gIFZ5bWF6YW7pISIKKworIzogbWFpbi5jOjUzIG9wdGlvbi5jOjMxNjIgb3B0aW9uLmM6MzI2OQorbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJOZXpu4W1hIHZvtWJhIgorCisjOiBtYWluLmM6NTUKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAiUHLtbGm5IG1ub2hvIHVwcmF2b3ZhY+1jaCBhcmd1bWVudG92IgorCisjOiBtYWluLmM6NTcKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICJDaP1iYSBhcmd1bWVudCBwbyIKKworIzogbWFpbi5jOjU5Cittc2dpZCAiR2FyYmFnZSBhZnRlciBvcHRpb24iCittc2dzdHIgIkNoeWJ5IHphIHZvtWJvdSIKKworIzogbWFpbi5jOjYxCittc2dpZCAiVG9vIG1hbnkgXCIrY29tbWFuZFwiIG9yIFwiLWMgY29tbWFuZFwiIGFyZ3VtZW50cyIKK21zZ3N0ciAiUHLtbGm5IG1ub2hvIFwiK3By7WthelwiIOhpIFwiLWMgcHLta2F6XCIgYXJndW1lbnRvdiIKKworIzogbWFpbi5jOjYzCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBmb3IiCittc2dzdHIgIkNoeWJu/SBhcmd1bWVudCBwcmUiCisKKyM6IG1haW4uYzo0NTAKK21zZ2lkICJUaGlzIFZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlIGRpZmYgZmVhdHVyZS4iCittc2dzdHIgIlRlbnRvIFZpbSBuZWJvbCBrb21waWxvdmFu/SBzIHBvcm92buF2YWPtbWkgZnVua2NpYW1pLiIKKworIzogbWFpbi5jOjg3NQorbXNnaWQgIkF0dGVtcHQgdG8gb3BlbiBzY3JpcHQgZmlsZSBhZ2FpbjogXCIiCittc2dzdHIgIlBva3VzIG8gb3DkdG92bukgb3R2b3JlbmllIHNrcmlwdHU6IFwiIgorCisjOiBtYWluLmM6ODc5IG1haW4uYzo4ODYgbWFpbi5jOjkzMCBtZW1saW5lLmM6MzY3MyBtZW1saW5lLmM6MzY3NworIzogdmVyc2lvbi5jOjg5MiB2ZXJzaW9uLmM6ODk3IHZlcnNpb24uYzo5MDIgdmVyc2lvbi5jOjkwNyB2ZXJzaW9uLmM6OTEyCisjOiB2ZXJzaW9uLmM6OTE3IHZlcnNpb24uYzo5MjMgdmVyc2lvbi5jOjkyNyB2ZXJzaW9uLmM6OTMxIHZlcnNpb24uYzo5MzYKKyM6IHZlcnNpb24uYzo5NDMgdmVyc2lvbi5jOjk1MSB2ZXJzaW9uLmM6OTU3Cittc2dpZCAiXCJcbiIKK21zZ3N0ciAiXCJcbiIKKworIzogbWFpbi5jOjg4NAorbXNnaWQgIkNhbm5vdCBvcGVuIGZvciByZWFkaW5nOiBcIiIKK21zZ3N0ciAiTmVk4SBzYSBvdHZvcmm7IHByZSB64XBpczogXCIiCisKKyM6IG1haW4uYzo5MjgKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIk5lZOEgc2Egb3R2b3JpuyBwcmUgdv1zdHVwIHNrcmlwdHU6IFwiIgorCisjOiBtYWluLmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmaWxlcyB0byBlZGl0XG4iCittc2dzdHIgInBv6GV0IHP6Ym9yb3YgcHJlIPpwcmF2dTogJWRcbiIKKworIzogbWFpbi5jOjExMTgKK21zZ2lkICJWaW06IFdhcm5pbmc6IE91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IFZhcm92YW5pZTogVv1zdHVwIG5lc21lcnVqZSBuYSB0ZXJtaW7hbFxuIgorCisjOiBtYWluLmM6MTEyMAorbXNnaWQgIlZpbTogV2FybmluZzogSW5wdXQgaXMgbm90IGZyb20gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IFZhcm92YW5pZTogVnN0dXAgbmVwb2No4WR6YSB6IHRlcm1pbuFsdVxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjExOTUKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJwcmUtdmltcmMgcHLta2F6b3b9IHJpYWRvayIKKworIzogbWFpbi5jOjEyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IE5lZOEgc2Eg6O10YbsgeiBcIiVzXCIiCisKKyM6IG1haW4uYzoyMjA1Cittc2dpZCAiIgorIlxuIgorIk1vcmUgaW5mbyB3aXRoOiBcInZpbSAtaFwiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQb2Ryb2JuZWq5aWUgaW5mb3Jt4WNpZSB67XNr4XRlIHBvbW9jb3UgXCJ2aW0gLWhcIlxuIgorCisjOiBtYWluLmM6MjIzOAorbXNnaWQgIltmaWxlIC4uXSAgICAgICBlZGl0IHNwZWNpZmllZCBmaWxlKHMpIgorbXNnc3RyICJbc/pib3IgLi5dIC4uICAgICAgICAgIHVwcmF2absgc/pib3IoeSkiCisKKyM6IG1haW4uYzoyMjM5Cittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAgICAgICDo7XRhuyB0ZXh0IHoguXRhbmRhcmRu6WhvIHZzdHVwdSIKKworIzogbWFpbi5jOjIyNDAKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCB0YWcgICAgICAgICAgdXByYXZpuyBz+mJvciBuYSBtaWVzdGUgZGVmaW7tY2llIHRhZ3UiCisKKyM6IG1haW4uYzoyMjQyCittc2dpZCAiLXEgW2Vycm9yZmlsZV0gIGVkaXQgZmlsZSB3aXRoIGZpcnN0IGVycm9yIgorbXNnc3RyICItcSBbY2h5Ym92/SBz+mJvcl0gIHVwcmF2absgc/pib3IgbmEgbWllc3RlIHb9c2t5dHUgcHJ2ZWogY2h5YnkiCisKKyM6IG1haW4uYzoyMjUxCittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorInBvdb5pdGllOiIKKworIzogbWFpbi5jOjIyNTQKK21zZ2lkICIgdmltIFthcmd1bWVudHNdICIKK21zZ3N0ciAidmltIFthcmd1bWVudHldICIKKworIzogbWFpbi5jOjIyNTgKK21zZ2lkICIiCisiXG4iCisiICAgb3I6IgorbXNnc3RyICIiCisiXG4iCisiICAgYWxlYm8iCisKKyM6IG1haW4uYzoyMjYxCittc2dpZCAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50czpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50eTpcbiIKKworIzogbWFpbi5jOjIyNjIKK21zZ2lkICItLVx0XHRcdE9ubHkgZmlsZSBuYW1lcyBhZnRlciB0aGlzIgorbXNnc3RyICItLVx0XHRcdE30vnUgbmFzbGVkb3ZhuyBpYmEgbuF6dnkgc/pib3JvdiIKKworIzogbWFpbi5jOjIyNjQKK21zZ2lkICItLWxpdGVyYWxcdFx0RG9uJ3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiLS1saXRlcmFsXHRcdG5lcG9kYXJpbG8gc2EgZXhwYW5kb3ZhuyC+b2zta2926SB6bmFreSAod2lsZGNhcmRzKSIKKworIzogbWFpbi5jOjIyNjcKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHRwcmlobOFzabsgZ3ZpbSBuYSBPTEUiCisKKyM6IG1haW4uYzoyMjY4Cittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHRvZGhs4XNpuyBndmltIHogT0xFIgorCisjOiBtYWluLmM6MjI3MQorbXNnaWQgIi1nXHRcdFx0UnVuIHVzaW5nIEdVSSAobGlrZSBcImd2aW1cIikiCittc2dzdHIgIi1nXHRcdFx0c3B1c3RpuyB2IEdVSSBt82RlIChyb3ZuYWvpIGFrbyBcImd2aW1cIikiCisKKyM6IG1haW4uYzoyMjcyCittc2dpZCAiLWZcdFx0XHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZlx0XHRcdFBvcHJlZGllOiBwcmkgc3B1c3Rlbu0gR1VJIHNhIG5lb2RkZWztIG9kIHNoZWxsdSIKKworIzogbWFpbi5jOjIyNzQKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRWaSBt82QgKHJvdm5ha+kgYWtvIFwidmlcIikiCisKKyM6IG1haW4uYzoyMjc1Cittc2dpZCAiLWVcdFx0XHRFeCBtb2RlIChsaWtlIFwiZXhcIikiCittc2dzdHIgIi1lXHRcdFx0RXggbfNkIChyb3ZuYWvpIGFrbyBcImV4XCIpIgorCisjOiBtYWluLmM6MjI3NgorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHRUaWNo/SAoZOF2a292/SkgbfNkIChpYmEgcHJlIFwiZXhcIikiCisKKyM6IG1haW4uYzoyMjc4Cittc2dpZCAiLWRcdFx0XHREaWZmIG1vZGUgKGxpa2UgXCJ2aW1kaWZmXCIpIgorbXNnc3RyICItZFx0XHRcdFBvcm92buF2YWPtIG3zZCAocm92bmFr6SBha28gXCJ2aW1kaWZmXCIpIgorCisjOiBtYWluLmM6MjI4MAorbXNnaWQgIi15XHRcdFx0RWFzeSBtb2RlIChsaWtlIFwiZXZpbVwiLCBtb2RlbGVzcykiCittc2dzdHIgIi15XHRcdFx0SmVkbm9kdWNo/SBt82QgKHJvdm5ha+kgYWtvIFwiZXZpbVwiLCBtb2RlbGVzcykiCisKKyM6IG1haW4uYzoyMjgxCittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHRN82QgaWJhX3ByZV/o7XRhbmllIChha28gXCJ2aWV3XCIpIgorCisjOiBtYWluLmM6MjI4MgorbXNnaWQgIi1aXHRcdFx0UmVzdHJpY3RlZCBtb2RlIChsaWtlIFwicnZpbVwiKSIKK21zZ3N0ciAiLVpcdFx0XHRPYm1lZHplbv0gbfNkIChyb3ZuYWvpIGFrbyBcInJ2aW1cIikiCisKKyM6IG1haW4uYzoyMjgzCittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHRabWVueSAodWtsYWRhbmllIHP6Ym9yb3YpIHpha+F6YW7pIgorCisjOiBtYWluLmM6MjI4NAorbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdFptZW55IHYgdGV4dGUgbmllIHP6IHBvdm9sZW7pIgorCisjOiBtYWluLmM6MjI4NQorbXNnaWQgIi1iXHRcdFx0QmluYXJ5IG1vZGUiCittc2dzdHIgIi1iXHRcdFx0Qmlu4XJueSBt82QiCisKKyM6IG1haW4uYzoyMjg3Cittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0TGlzcCBt82QiCisKKyM6IG1haW4uYzoyMjg5Cittc2dpZCAiLUNcdFx0XHRDb21wYXRpYmxlIHdpdGggVmk6ICdjb21wYXRpYmxlJyIKK21zZ3N0ciAiLUNcdFx0XHRLb21wYXRhYmlsbv0gcyBWaTogJ2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjI5MAorbXNnaWQgIi1OXHRcdFx0Tm90IGZ1bGx5IFZpIGNvbXBhdGlibGU6ICdub2NvbXBhdGlibGUnIgorbXNnc3RyICItTlx0XHRcdEtvbXBhdGliaWxpdGEgcyBWaSB2eXBudXThOiAnbm9jb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjIyOTEKK21zZ2lkICItVltOXVx0XHRWZXJib3NlIGxldmVsIgorbXNnc3RyICItVltOXVx0XHTacm92ZfIgdv1waXN1IGhs4blvayIKKworIzogbWFpbi5jOjIyOTIKK21zZ2lkICItRFx0XHRcdERlYnVnZ2luZyBtb2RlIgorbXNnc3RyICItRFx0XHRcdExhZGlhY2kgbfNkIgorCisjOiBtYWluLmM6MjI5MworbXNnaWQgIi1uXHRcdFx0Tm8gc3dhcCBmaWxlLCB1c2UgbWVtb3J5IG9ubHkiCittc2dzdHIgIi1uXHRcdFx0TmVidWRlIHZ5dHbhcmG7IG9ka2xhZGFj7SBz+mJvciwgYnVkZSBwb3W+7XZhuyBpYmEgcGFt5LsiCisKKyM6IG1haW4uYzoyMjk0Cittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0Vnlw7bllIHpvem5hbSBvZGtsYWRhY+1jaCBz+mJvcm92IGEgc2tvbujtIgorCisjOiBtYWluLmM6MjI5NQorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciBu4XpvdiBz+mJvcnVcdE9ibm927SBwcmVydbllbukgc2VkZW5pZSIKKworIzogbWFpbi5jOjIyOTYKK21zZ2lkICItTFx0XHRcdFNhbWUgYXMgLXIiCittc2dzdHIgIi1MXHRcdFx0Um92bmFr6SBha28gLXIiCisKKyM6IG1haW4uYzoyMjk4Cittc2dpZCAiLWZcdFx0XHREb24ndCB1c2UgbmV3Y2xpIHRvIG9wZW4gd2luZG93IgorbXNnc3RyICItZlx0XHRcdE5lYnVkZSBwb3W+7XZhuyBuZXdjbGkgcHJlIG90dm9yZW5pZSBva25hIgorCisjOiBtYWluLmM6MjI5OQorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPHphcmlhZGVuaWU+XHRcdFBvdb5puyA8emFyaWFkZW5pZT4gcHJlIEkvTyIKKworIzogbWFpbi5jOjIzMDIKK21zZ2lkICItSFx0XHRcdHN0YXJ0IGluIEhlYnJldyBtb2RlIgorbXNnc3RyICItSFx0XHRcdG5hIHNwdXN0ZW7tZSB2IGhlYnJlanNrb20gbfNkZSIKKworIzogbWFpbi5jOjIzMDUKK21zZ2lkICItRlx0XHRcdHN0YXJ0IGluIEZhcnNpIG1vZGUiCittc2dzdHIgIi1GXHRcdFx0bmEgc3B1c3Rlbu1lIHZvIEZhcnNpIG3zZGUiCisKKyM6IG1haW4uYzoyMzA3Cittc2dpZCAiLVQgPHRlcm1pbmFsPlx0U2V0IHRlcm1pbmFsIHR5cGUgdG8gPHRlcm1pbmFsPiIKK21zZ3N0ciAiLVQgPHRlcm1pbuFsPlx0TmFzdGF27SB0eXAgdGVybWlu4Wx1IG5hIDx0ZXJtaW7hbD4iCisKKyM6IG1haW4uYzoyMzA4Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0UG91vmlqZSA8dmltcmM+IG5hbWllc3RvIGFr6Whva2+1dmVrIC52aW1yYyIKKworIzogbWFpbi5jOjIzMTAKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0UG91vmlqZSA8Z3ZpbXJjPiBuYW1pZXN0byBha+lob2tvtXZlayAuZ3ZpbXJjIgorCisjOiBtYWluLmM6MjMxMgorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHROZW5haHLhICdwbHVnaW4nIHNrcmlwdHkiCisKKyM6IG1haW4uYzoyMzEzCittc2dpZCAiLW9bTl1cdFx0T3BlbiBOIHdpbmRvd3MgKGRlZmF1bHQ6IG9uZSBmb3IgZWFjaCBmaWxlKSIKK21zZ3N0ciAiLW9bTl1cdFx0T3R2b3LtIE4gb2tpZW4gKGltcGxpY2l0bmUgamVkbm8gcHJlIGthvmT9IHP6Ym9yKSIKKworIzogbWFpbi5jOjIzMTQKK21zZ2lkICItT1tOXVx0XHRsaWtlIC1vIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5IgorbXNnc3RyICItT1tOXVx0XHRha28gLW8gYWxlIHJvemRlbO0gdmVydGlr4WxuZSIKKworIzogbWFpbi5jOjIzMTUKK21zZ2lkICIrXHRcdFx0U3RhcnQgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIitcdFx0XHROYXN0YXbtIGt1cnpvciBuYSBrb25pZWMgc/pib3J1IgorCisjOiBtYWluLmM6MjMxNgorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8cmlhZG9rPlx0XHROYXN0YXbtIGt1cnpvciBuYSA8cmlhZG9rPiIKKworIzogbWFpbi5jOjIzMTgKK21zZ2lkICItLWNtZCA8Y29tbWFuZD5cdEV4ZWN1dGUgPGNvbW1hbmQ+IGJlZm9yZSBsb2FkaW5nIGFueSB2aW1yYyBmaWxlIgorbXNnc3RyICItLWNtZCA8cHLta2F6Plx0XHRWeWtvbuEgPHBy7Wthej4gcHJlZCBuYWhyYW7tbSB2aW1yYyBz+mJvcnUiCisKKyM6IG1haW4uYzoyMzIwCittc2dpZCAiLWMgPGNvbW1hbmQ+XHRcdEV4ZWN1dGUgPGNvbW1hbmQ+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1jIDxwcu1rYXo+XHRcdFBvIG5haHJhbu0gcHJ26WhvIHP6Ym9ydSB2eWtvbuEgPHBy7Wthej4iCisKKyM6IG1haW4uYzoyMzIxCittc2dpZCAiLVMgPHNlc3Npb24+XHRcdFNvdXJjZSBmaWxlIDxzZXNzaW9uPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItUyA8c2VkZW5pZT5cdFx0UG8gbmFocuFu7SBwcnbpaG8gc/pib3J1IHZ5a29u4SBwcu1rYXp5IHYgc/pib3JlIDxzZWRlbmllPiIKKworIzogbWFpbi5jOjIzMjIKK21zZ2lkICItcyA8c2NyaXB0aW4+XHRSZWFkIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGZyb20gZmlsZSA8c2NyaXB0aW4+IgorbXNnc3RyICItcyA8c2tyaXB0Plx0XHROYejtdGEgcHLta2F6eSBub3Jt4WxuZWhvIG3zZHUgem8gPHNrcmlwdHU+IgorCisjOiBtYWluLmM6MjMyMworbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDxza3JpcHQ+XHRcdFByaXBvau0gdrlldGt5IG5hcO1zYW7pIHBy7WthenkgZG8gc/pib3J1IDxza3JpcHQ+IgorCisjOiBtYWluLmM6MjMyNAorbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLVcgPHNrcmlwdD5cdFx0VWxvvu0gdrlldGt5IG5hcO1zYW7pIHBy7WthenkgZG8gc/pib3J1IDxza3JpcHQ+IgorCisjOiBtYWluLmM6MjMyNgorbXNnaWQgIi14XHRcdFx0RWRpdCBlbmNyeXB0ZWQgZmlsZXMiCittc2dzdHIgIi14XHRcdFx02nByYXZhIHphuWlmcm92YW79Y2ggc/pib3JvdiIKKworIzogbWFpbi5jOjIzMzAKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdENvbm5lY3QgdmltIHRvIHRoaXMgcGFydGljdWxhciBYLXNlcnZlciIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsZWo+XHRTcHVzdO0gdmltIG5hIDxkaXNwbGVqPiIKKworIzogbWFpbi5jOjIzMzIKK21zZ2lkICItWFx0XHRcdERvIG5vdCBjb25uZWN0IHRvIFggc2VydmVyIgorbXNnc3RyICItWFx0XHRcdE5lcHJpcG9q7SBzYSBrIFggc2VydmVydSIKKworIzogbWFpbi5jOjIzMzQKK21zZ2lkICItLXNvY2tldGlkIDx4aWQ+XHRPcGVuIFZpbSBpbnNpZGUgYW5vdGhlciBHVEsgd2lkZ2V0IgorbXNnc3RyICItLXNvY2tldGlkIDx4aWQ+XHRPdHZvcu0gVmltIHZu+nRyaSBpbulobyBHVEsgcHJvZ3JhbXUuIgorCisjOiBtYWluLmM6MjMzOAorbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQiCittc2dzdHIgIi0tcmVtb3RlIDxz+mJvcnk+XHRVcHJhdmm7IDxz+mJvcnk+IG5hIFZpbSBzZXJ2cmkgYSBza29u6Gm7IgorCisjOiBtYWluLmM6MjMzOQorbXNnaWQgIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgQXMgLS1yZW1vdGUgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQiCittc2dzdHIgIi0tcmVtb3RlLXdhaXQgPHP6Ym9yeT5cdEFrbyAtLXJlbW90ZSBhbGUg6GFr4SBuYSBz+mJvcnkgcHJlIHVrb27oZW5pZSD6cHJhdiIKKworIzogbWFpbi5jOjIzNDAKK21zZ2lkICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0U2VuZCA8a2V5cz4gdG8gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZS1zZW5kIDx2b7VieT5cdE9kb7lsZSA8dm+1Ynk+IG5hIFZpbSBzZXJ2ZXIgYSBza29u6O0iCisKKyM6IG1haW4uYzoyMzQxCittc2dpZCAiLS1yZW1vdGUtZXhwciA8ZXhwcj5cdEV2YWx1YXRlIDxleHByPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIHByaW50IHJlc3VsdCIKK21zZ3N0ciAiLS1yZW1vdGUtZXhwciA8dv1yYXo+XHRTcHVzdGkgPHb9cmF6PiBuYSBzZXJ2cmkgYSB2eXRsYejtIHb9c2xlZG9rIgorCisjOiBtYWluLmM6MjM0MgorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICItLXNlcnZlcmxpc3RcdFx0Vnlw7bllIHpvem5hbSBtaWVuIGRvc3R1cG79Y2ggVmltIHNlcnZyb3YgYSBza29u6O0iCisKKyM6IG1haW4uYzoyMzQzCittc2dpZCAiLS1zZXJ2ZXJuYW1lIDxuYW1lPlx0U2VuZCB0by9iZWNvbWUgdGhlIFZpbSBzZXJ2ZXIgPG5hbWU+IgorbXNnc3RyICItLXNlcnZlcm5hbWUgPG7hem92Plx0T2RvuWxlIG5hIFZpbSBzZXJ2ZXIgPG7hem92PiIKKworIzogbWFpbi5jOjIzNDYKK21zZ2lkICItaSA8dmltaW5mbz5cdFx0VXNlIDx2aW1pbmZvPiBpbnN0ZWFkIG9mIC52aW1pbmZvIgorbXNnc3RyICItaSA8dmltaW5mbz5cdFx0UG91vmlqZSA8dmltaW5mbz4gbmFtaWVzdG8gYWvpaG9rb7V2ZWsgLnZpbWluZm8iCisKKyM6IG1haW4uYzoyMzQ4Cittc2dpZCAiLWhcdFx0XHRwcmludCBIZWxwICh0aGlzIG1lc3NhZ2UpIGFuZCBleGl0IgorbXNnc3RyICItaFx0XHRcdFZ5cO25ZSB0+nRvIG7hcG92ZWR1IGEgc2tvbujtIgorCisjOiBtYWluLmM6MjM0OQorbXNnaWQgIi0tdmVyc2lvblx0XHRwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IgorbXNnc3RyICItLXZlcnNpb25cdFx0dnlw7bllIGluZm9ybeFjaWUgbyB2ZXJ6aWkgYSBza29u6O0iCisKKyM6IG1haW4uYzoyMzUzCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKE1vdGlmIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnR5IHByZSBndmltIChNb3RpZiB2ZXJ6aWEpOlxuIgorCisjOiBtYWluLmM6MjM1NgorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChBdGhlbmEgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudHkgcHJlIGd2aW0gKEF0aGVuYSB2ZXJ6aWEpOlxuIgorCisjOiBtYWluLmM6MjM1OQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4iCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGVqPlx0U3B1c3TtIHZpbSBuYSA8ZGlzcGxlaj4iCisKKyM6IG1haW4uYzoyMzYwCittc2dpZCAiLWljb25pY1x0XHRTdGFydCB2aW0gaWNvbmlmaWVkIgorbXNnc3RyICItaWNvbmljXHRcdFNwdXN07SB2aW0gbWluaW1hbGl6b3ZhbukiCisKKyM6IG1haW4uYzoyMzYyCittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG7hem92Plx0XHRQb3W+aWplIHJlc291cmNlIGFrbyBieSB2aW0gbWFsIDxu4Xpvdj4iCisKKyM6IG1haW4uYzoyMzYzCittc2dpZCAiXHRcdFx0ICAoVW5pbXBsZW1lbnRlZClcbiIKK21zZ3N0ciAiXHRcdFx0ICAobmllIGplIGltcGxlbWVudG92YW7pKVxuIgorCisjOiBtYWluLmM6MjM2NQorbXNnaWQgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciB0aGUgYmFja2dyb3VuZCAoYWxzbzogLWJnKSIKK21zZ3N0ciAiLWJhY2tncm91bmQgPGZhcmJhPlx0TmFzdGF27SBzYSA8ZmFyYmE+IHBvemFkaWEgKHRpZb4gLWJnKSIKKworIzogbWFpbi5jOjIzNjYKK21zZ2lkICItZm9yZWdyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mZykiCittc2dzdHIgIi1mb3JlZ3JvdW5kIDxmYXJiYT5cdE5hc3Rhdu0gc2EgPGZhcmJhPiBwb3ByZWRpYSAodGllviAtZmcpIgorCisjOiBtYWluLmM6MjM2NyBtYWluLmM6MjM4NworbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPHDtc21vPlx0XHROYXN0YXbtIDxw7XNtbz4gbm9ybeFsbmVobyB0ZXh0dSAodGllviAtZm4pIgorCisjOiBtYWluLmM6MjM2OAorbXNnaWQgIi1ib2xkZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGJvbGQgdGV4dCIKK21zZ3N0ciAiLWJvbGRmb250IDxw7XNtbz5cdE5hc3Rhdu0gPHDtc21vPiBwcmUgenb9cmF6bmVu/SB0ZXh0IgorCisjOiBtYWluLmM6MjM2OQorbXNnaWQgIi1pdGFsaWNmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgaXRhbGljIHRleHQiCittc2dzdHIgIi1pdGFsaWNmb250IDxw7XNtbz5cdE5hc3Rhdu0gPHDtc21vPiBwcmUga3Vyeu12dSIKKworIzogbWFpbi5jOjIzNzAgbWFpbi5jOjIzODgKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIi1nZW9tZXRyeSA8Z2VvbWV0cmllPlx0TmFzdGF27SBzYSA8Z2VvbWV0cmlhPiAodGllviAtZ2VvbSkiCisKKyM6IG1haW4uYzoyMzcxCittc2dpZCAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdFVzZSBhIGJvcmRlciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtYncpIgorbXNnc3RyICItYm9yZGVyd2lkdGggPLntcmthPlx0TmFzdGF27SA8ue1ya3U+IG9rcmFqb3YgKHRpZb4gLWJ3KSIKKworIzogbWFpbi5jOjIzNzIKK21zZ2lkICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgVXNlIGEgc2Nyb2xsYmFyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1zdykiCittc2dzdHIgIi1zY3JvbGxiYXJ3aWR0aCA8ue1ya2E+ICBOYXN0YXbtIDy57XJrdT4gcG9zdXZuZWogbGm5dHkgKHRpZb4gLXN3KSIKKworIzogbWFpbi5jOjIzNzQKK21zZ2lkICItbWVudWhlaWdodCA8aGVpZ2h0Plx0VXNlIGEgbWVudSBiYXIgaGVpZ2h0IG9mIDxoZWlnaHQ+IChhbHNvOiAtbWgpIgorbXNnc3RyICItbWVudWhlaWdodCA8dv25a2E+XHROYXN0YXbtIDx2/blrdT4gcG9udWt5ICh0aWW+IC1taCkiCisKKyM6IG1haW4uYzoyMzc2IG1haW4uYzoyMzg5Cittc2dpZCAiLXJldmVyc2VcdFx0VXNlIHJldmVyc2UgdmlkZW8gKGFsc286IC1ydikiCittc2dzdHIgIi1yZXZlcnNlXHRcdFBvdb5pamUgcmV2ZXJ6bukgZmFyYnkgKHRpZb4gLXJ2KSIKKworIzogbWFpbi5jOjIzNzcKK21zZ2lkICIrcmV2ZXJzZVx0XHREb24ndCB1c2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogK3J2KSIKK21zZ3N0ciAiK3JldmVyc2VcdFx0TmVwb3W+aWplIHJldmVyem7pIGZhcmJ5ICh0aWW+ICtydikiCisKKyM6IG1haW4uYzoyMzc4Cittc2dpZCAiLXhybSA8cmVzb3VyY2U+XHRTZXQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSIKK21zZ3N0ciAiLXhybSA8cmVzb3VyY2U+XHROYXN0YXbtIHphZGFu/SA8cmVzb3VyY2U+IgorCisjOiBtYWluLmM6MjM4MQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChSSVNDIE9TIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnR5IHByZSBndmltIChSSVNDIE9TIHZlcnppYSk6XG4iCisKKyM6IG1haW4uYzoyMzgyCittc2dpZCAiLS1jb2x1bW5zIDxudW1iZXI+XHRJbml0aWFsIHdpZHRoIG9mIHdpbmRvdyBpbiBjb2x1bW5zIgorbXNnc3RyICItLWNvbHVtbnMgPHBv6GV0Plx0PHBv6GV0PiBzdOVwY292IG5hIG9rbm8iCisKKyM6IG1haW4uYzoyMzgzCittc2dpZCAiLS1yb3dzIDxudW1iZXI+XHRJbml0aWFsIGhlaWdodCBvZiB3aW5kb3cgaW4gcm93cyIKK21zZ3N0ciAiLS1yb3dzIDxwb+hldD5cdDxwb+hldD4gcmlhZGtvdiBuYSBva25vIgorCisjOiBtYWluLmM6MjM4NgorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnR5IHByZSBndmltIChHVEsrIHZlcnppYSk6XG4iCisKKyM6IG1haW4uYzoyMzkwCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiAoYWxzbzogLS1kaXNwbGF5KSIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsZWo+XHRzcHVzdO0gdmltIG5hIDxkaXNwbGVqPiAodGllviAtLWRpc3BsYXkpIgorCisjOiBtYWluLmM6MjM5MgorbXNnaWQgIi0taGVscFx0XHRTaG93IEdub21lIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1oZWxwXHRcdFZ5cO25ZSBHbm9tZSBhcmd1bWVudHkiCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyNjM0Cittc2dpZCAiIgorIlxuIgorIlNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiT2Rvc2xhbmllIHpseWhhbG8uXG4iCisKKyMuIExldCB2aW0gc3RhcnQgbm9ybWFsbHkuCisjOiBtYWluLmM6MjYzOQorbXNnaWQgIiIKKyJcbiIKKyJTZW5kIGZhaWxlZC4gVHJ5aW5nIHRvIGV4ZWN1dGUgbG9jYWxseVxuIgorbXNnc3RyICIiCisiXG4iCisiT2Rvc2xhbmllIHpseWhhbG8uIFBva/q5YW0gc2Egc3B1c3RpuyBsb2vhbG5lXG4iCisKKyM6IG1haW4uYzoyNjcyIG1haW4uYzoyNjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG9mICVkIGVkaXRlZCIKK21zZ3N0ciAiJWQgdXByYXZlbv1jaCBz+mJvcm92IHogJWQiCisKKyM6IG1haW4uYzoyNzE2Cittc2dpZCAiU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiT2Rvc2xhbmllIHb9cmF6dSB6bHloYWxvLlxuIgorCisjOiBtYXJrLmM6NjYwCittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICJOaWUgc/ogbmFzdGF2ZW7pIL5pYWRuZSB6bmHoa3kiCisKKyM6IG1hcmsuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MzogTm8gbWFya3MgbWF0Y2hpbmcgXCIlc1wiIgorbXNnc3RyICJFMjgzOlwiJXNcIiBuZXZ5aG92dWr6IL5pYWRuZSB6bmHoa3kiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjY3MworbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyJ6bmHoa2EgcmlhZG9rICBzdOVwZWMgc/pib3IvdGV4dCIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzExCittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgc2tvayByaWFkb2sgc3TlcGVjIHP6Ym9yL3RleHQiCisKKyM6IG1hcmsuYzoxMDczCittc2dpZCAiIgorIlxuIgorIiMgRmlsZSBtYXJrczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgU/pib3Jvdukgem5h6Gt5OlxuIgorCisjLiBXcml0ZSB0aGUganVtcGxpc3Qgd2l0aCAtJworIzogbWFyay5jOjExMDgKK21zZ2lkICIiCisiXG4iCisiIyBKdW1wbGlzdCAobmV3ZXN0IGZpcnN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgWm96bmFtIHNrb2tvdiAoemHo7W5havpjaSBuYWpub3a5b3UgcG9sb75rb3UpOlxuIgorCisjOiBtYXJrLmM6MTIwMworbXNnaWQgIiIKKyJcbiIKKyIjIEhpc3Rvcnkgb2YgbWFya3Mgd2l0aGluIGZpbGVzIChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgSGlzdPNyaWEgem5h6GllayB2IHP6Ym9yb2NoICh6YejtbmFq+mNpIG5ham5vdrlvdSBwb2xvvmtvdSk6XG4iCisKKyM6IG1hcmsuYzoxMjg2Cittc2dpZCAiTWlzc2luZyAnPiciCittc2dzdHIgIkNo/WJhICc+JyIKKworIzogbWJ5dGUuYzozOTUKK21zZ2lkICJOb3QgYSB2YWxpZCBjb2RlcGFnZSIKK21zZ3N0ciAiQ2h5Ym7hIGvzZG924SBzdHLhbmthIgorCisjOiBtYnl0ZS5jOjMxMDMKK21zZ2lkICJFMjg0OiBDYW5ub3Qgc2V0IElDIHZhbHVlcyIKK21zZ3N0ciAiRTI4NDogTmVkavogc2EgbmFzdGF2absgSUMgaG9kbm90eSIKKworIzogbWJ5dGUuYzozMjU1Cittc2dpZCAiRTI4NTogRmFpbGVkIHRvIGNyZWF0ZSBpbnB1dCBjb250ZXh0IgorbXNnc3RyICJFMjg1OiBOZXBvZGFyaWxvIHNhIHZ5dHZvcmm7IHZzdHVwbv0ga29udGV4dCIKKworIzogbWJ5dGUuYzozNDAyCittc2dpZCAiRTI4NjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgbWV0aG9kIgorbXNnc3RyICJFMjg2OiBOZXBvZGFyaWxvIHNhIG90dm9yabsgdnN0dXBu+iBtZXTzZHUiCisKKyM6IG1ieXRlLmM6MzQxMworbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4NzogVmFyb3ZhbmllOiBsaWt2aWRh6G7pIHNw5HRu6SB2b2xhbmllIHNhIG5lZOEgbmFzdGF2absgbmEgSU0iCisKKyM6IG1ieXRlLmM6MzQxOQorbXNnaWQgIkUyODg6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgYW55IHN0eWxlIgorbXNnc3RyICJFMjg4OiB2c3R1cG7hIG1ldPNkYSBuZXBvZHBvcnVqZSC+aWFkbnkguXT9bCIKKworIzogbWJ5dGUuYzozNDc2Cittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IHZzdHVwbuEgbWV082RhIG5lcG9kcG9ydWplIG30aiAncHJlZWRpdCcgdHlwIgorCisjOiBtYnl0ZS5jOjM1NTAKK21zZ2lkICJFMjkwOiBvdmVyLXRoZS1zcG90IHN0eWxlIHJlcXVpcmVzIGZvbnRzZXQiCittc2dzdHIgIkUyOTA6IE5hZGJvZG92/SC5dP1sIHZ5vmFkdWplIGZvbnRzZXQiCisKKyM6IG1ieXRlLmM6MzU3OAorbXNnaWQgIkUyOTE6IFlvdXIgR1RLKyBpcyBvbGRlciB0aGFuIDEuMi4zLiBTdGF0dXMgYXJlYSBkaXNhYmxlZCIKK21zZ3N0ciAiRTI5MTogTeF0ZSBHVEsrIHZlcnppdSBzdGFyuWl1IG5lviAxLjIuMy4gU3Rhdm924SBwbG9jaGEgdnlwbnV04S4iCisKKyM6IG1ieXRlLmM6Mzg0MworbXNnaWQgIkUyOTI6IElucHV0IE1ldGhvZCBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmciCittc2dzdHIgIkUyOTI6IFNlcnZlciB2c3R1cG79Y2ggbWV082QgbmViZb7tIgorCisjOiBtZW1maWxlLmM6NDg4Cittc2dpZCAiRTI5MzogYmxvY2sgd2FzIG5vdCBsb2NrZWQiCittc2dzdHIgIkUyOTM6IGJsb2sgbmVib2wgemFta251dP0iCisKKyM6IG1lbWZpbGUuYzo5ODkKK21zZ2lkICJFMjk0OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSByZWFkIgorbXNnc3RyICJFMjk0OiBDaHliYSBwb3N1bnUgcHJpIOjtdGFu7SBvZGtsYWRhY2llaG8gc/pib3J1IgorCisjOiBtZW1maWxlLmM6OTk0Cittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IENoeWJhIHByaSDo7XRhbu0gb2RrbGFkYWNpZWhvIHP6Ym9ydSIKKworIzogbWVtZmlsZS5jOjEwNDYKK21zZ2lkICJFMjk2OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIKK21zZ3N0ciAiRTI5NjogQ2h5YmEgcG9zdW51IHByaSB1a2xhZGFu7SBkbyBvZGtsYWRhY2llaG8gc/pib3J1IgorCisjOiBtZW1maWxlLmM6MTA2NAorbXNnaWQgIkUyOTc6IFdyaXRlIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5NzogQ2h5YmEgcHJpIHVrbGFkYW7tIGRvIG9ka2xhZGFjaWVobyBz+mJvcnUiCisKKyM6IG1lbWZpbGUuYzoxMjYxCittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiBPZGtsYWRhY+0gc/pib3Igdb4gZXhpc3R1amUhIgorCisjOiBtZW1saW5lLmM6Mjc1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIKK21zZ3N0ciAiRTI5ODogTmVk4SBzYSB67XNrYbsgYmxvayAwPyIKKworIzogbWVtbGluZS5jOjMxNQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMT8iCittc2dzdHIgIkUyOTg6IE5lZOEgc2Egeu1za2G7IGJsb2sgMT8iCisKKyM6IG1lbWxpbmUuYzozMzMKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDI/IgorbXNnc3RyICJFMjk4OiBOZWThIHNhIHrtc2thuyBibG9rIDI/IgorCisjLiBjb3VsZCBub3QgKHJlKW9wZW4gdGhlIHN3YXAgZmlsZSwgd2hhdCBjYW4gd2UgZG8/Pz8/CisjOiBtZW1saW5lLmM6NDQzCittc2dpZCAiRTMwMTogT29wcywgbG9zdCB0aGUgc3dhcCBmaWxlISEhIgorbXNnc3RyICJFMzAxOiBVcHMsIG9ka2xhZGFj7SBz+mJvciBib2wgc3RyYXRlbv0hISEiCisKKyM6IG1lbWxpbmUuYzo0NDgKK21zZ2lkICJFMzAyOiBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwMjogTmVk4SBzYSBwcmVtZW5vdmG7IG9ka2xhZGFj7SBz+mJvciIKKworIzogbWVtbGluZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIKK21zZ3N0ciAiRTMwMzogTmVk4SBzYSBvdHZvcmm7IG9ka2xhZGFj7SBz+mJvciBwcmUgXCIlc1wiLCBvcHJhdmEgbmllIGplIG5lbW++buEiCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiBtbF90aW1lc3RhbXA6IG5lZOEgc2Egeu1za2G7IGJsb2sgMD8/IgorCisjOiBtZW1saW5lLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDU6IE5vIHN3YXAgZmlsZSBmb3VuZCBmb3IgJXMiCittc2dzdHIgIkUzMDU6IE9ka2xhZGFj7SBz+mJvciBwcmUgJXMgbmVib2wgbuFqZGVu/SIKKworIzogbWVtbGluZS5jOjc2NworbXNnaWQgIkVudGVyIG51bWJlciBvZiBzd2FwIGZpbGUgdG8gdXNlICgwIHRvIHF1aXQpOiAiCittc2dzdHIgIlphZGFqdGUg6O1zbG8gb2RrbGFkYWNpZWhvIHP6Ym9ydSwga3Rvcv0gc2EgbeEgcG91vml0ICgwIHByZSB1a29u6GVuaWUpOiAiCisKKyM6IG1lbWxpbmUuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNjogQ2Fubm90IG9wZW4gJXMiCittc2dzdHIgIkUzMDY6IE5lZOEgc2Egb3R2b3JpuyAlcyIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIk5lZOEgc2Eg6O10YbsgYmxvayAwIHogIgorCisjOiBtZW1saW5lLmM6ODM3Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIk1vvm5vIG5lZG+5bG8gayC+aWFkbnltIHptZW7hbSwgYWxlYm8gVmltIG5lYWt0dWFsaXpvdmFsIG9ka2xhZGFj7SBz+mJvci4iCisKKyM6IG1lbWxpbmUuYzo4NDcgbWVtbGluZS5jOjg2NAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW0uXG4iCittc2dzdHIgIiBuZWThIHNhIHBvdb5puyBzIHRvdXRvIHZlcnppb3UgVmltLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAiUG91vml0ZSBWaW0gdmVyeml1IDMuMC5cbiIKKworIzogbWVtbGluZS5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA3OiAlcyBkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlIgorbXNnc3RyICJFMzA3OiAlcyBzYSBuZXpk4SBiebsgb2RrbGFkYWPtbSBz+mJvcm9tIFZpbSIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIgbmVk4SBzYSBwb3W+7bsgbmEgdG9tdG8gcG/o7XRh6GkuXG4iCisKKyM6IG1lbWxpbmUuYzo4NzAKK21zZ2lkICJUaGUgZmlsZSB3YXMgY3JlYXRlZCBvbiAiCittc2dzdHIgIlP6Ym9yIGJvbCB2eXR2b3Jlbv0gIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyJhbGVibyBib2wgc/pib3IgcG+5a29kZW79LiIKKworIzogbWVtbGluZS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIgorbXNnc3RyICJQb3W+7XbhbSBvZGtsYWRhY+0gc/pib3IgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9yaWdpbmFsIGZpbGUgXCIlc1wiIgorbXNnc3RyICJQ9HZvZG79IHP6Ym9yIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkzNAorbXNnaWQgIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIgorbXNnc3RyICJFMzA4OiBWYXJvdmFuaWU6IFD0dm9kbv0gc/pib3IgbW9obCBiebsgem1lbmVu/SIKKworIzogbWVtbGluZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6IE5lZOEgc2Eg6O10YbsgYmxvayAxIHogJXMiCisKKyM6IG1lbWxpbmUuYzo5NzkKK21zZ2lkICI/Pz9NQU5ZIExJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P0NI3UJBIE1OT0hPIFJJQURLT1YiCisKKyM6IG1lbWxpbmUuYzo5OTUKK21zZ2lkICI/Pz9MSU5FIENPVU5UIFdST05HIgorbXNnc3RyICI/Pz9DSFlCTt0gUE/IRVQgUklBREtPViIKKworIzogbWVtbGluZS5jOjEwMDIKK21zZ2lkICI/Pz9FTVBUWSBCTE9DSyIKK21zZ3N0ciAiPz8/UFLBWkROWSBCTE9LIgorCisjOiBtZW1saW5lLmM6MTAyOAorbXNnaWQgIj8/P0xJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P0NI3UJBStpDRSBSSUFES1kiCisKKyM6IG1lbWxpbmUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTA6IEJsb2NrIDEgSUQgd3JvbmcgKCVzIG5vdCBhIC5zd3AgZmlsZT8pIgorbXNnc3RyICJFMzEwOiBJRCBibG9rdSAxIGplIGNoeWJu6SAoamUgJXMgb2RrbGFkYWPtbSBz+mJvcm9tPykiCisKKyM6IG1lbWxpbmUuYzoxMDY1Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/Q0jdQkEgQkxPSyIKKworIzogbWVtbGluZS5jOjEwODEKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgYmUgbWVzc2VkIHVwIgorbXNnc3RyICJvZCA/Pz8gcG8gPz8/RU5EIG30vnUgYnm7IHJpYWRreSBwb21pZblhbukiCisKKyM6IG1lbWxpbmUuYzoxMDk3Cittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGhhdmUgYmVlbiBpbnNlcnRlZC9kZWxldGVkIgorbXNnc3RyICJvZCA/Pz8gcG8gPz8/RU5EIG30vnUgYnm7IHZsb75lbukvdnltYXphbukgcmlhZGt5IgorCisjOiBtZW1saW5lLmM6MTExNworbXNnaWQgIj8/P0VORCIKK21zZ3N0ciAiPz8/S09OSUVDIgorCisjOiBtZW1saW5lLmM6MTE0MworbXNnaWQgIkUzMTE6IFJlY292ZXJ5IEludGVycnVwdGVkIgorbXNnc3RyICJFMzExOiBPYm5vdmEgcHJlcnW5ZW7hIgorCisjOiBtZW1saW5lLmM6MTE0NQorbXNnaWQgIkUzMTI6IEVycm9ycyBkZXRlY3RlZCB3aGlsZSByZWNvdmVyaW5nOyBsb29rIGZvciBsaW5lcyBzdGFydGluZyB3aXRoID8/PyIKK21zZ3N0ciAiRTMxMjogViBwcmllYmVodSBvYm5vdnkgZG+5bG8gayBjaHli4W07IHNrb250cm9sdWp0ZSByaWFka3kgemHo7W5havpjZSBuYSA/Pz8iCisKKyM6IG1lbWxpbmUuYzoxMTQ4Cittc2dpZCAiUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIgorbXNnc3RyICJPYm5vdmEgZG9rb27oZW7hLiBTa29udHJvbHVqdGUsIOhpIGplIHa5ZXRrbyB2IHBvcmlhZGt1LiIKKworIzogbWVtbGluZS5jOjExNDkKK21zZ2lkICIiCisiXG4iCisiKFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIG91dCB0aGlzIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoWnbhvnRlIHVsb75lbmllIHRvaG90byBz+mJvcnUgcG9kIGlu/W0gbWVub21cbiIKKworIzogbWVtbGluZS5jOjExNTAKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAiYSBwb21vY291IHByb2dyYW11IGRpZmYgemlzdGl0ZSB6bWVueSBvcHJvdGkgcPR2b2Ru6W11IHP6Ym9ydS4pXG4iCisKKyM6IG1lbWxpbmUuYzoxMTUxCittc2dpZCAiIgorIkRlbGV0ZSB0aGUgLnN3cCBmaWxlIGFmdGVyd2FyZHMuXG4iCisiXG4iCittc2dzdHIgIlBvdG9tIHZ5bWG+dGUgb2RrbGFkYWPtIHP6Ym9yLlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMDcKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAiTuFqZGVu6SBvZGtsYWRhY2llIHP6Ym9yeToiCisKKyM6IG1lbWxpbmUuYzoxMzg1Cittc2dpZCAiICAgSW4gY3VycmVudCBkaXJlY3Rvcnk6XG4iCittc2dzdHIgIiAgIFYgYWt0deFsbm9tIGFkcmVz4XJpOlxuIgorCisjOiBtZW1saW5lLmM6MTM4NworbXNnaWQgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorbXNnc3RyICIgICBTbyB6YWRhbv1tIG1lbm9tOlxuIgorCisjOiBtZW1saW5lLmM6MTM5MQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIFYgYWRyZXPhcmkgIgorCisjOiBtZW1saW5lLmM6MTQwOQorbXNnaWQgIiAgICAgIC0tIG5vbmUgLS1cbiIKK21zZ3N0ciAiICAgICAgLS0gvmlhZG5lIC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDgxCittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgICAgICB2bGFzdG7tazogIgorCisjOiBtZW1saW5lLmM6MTQ4MworbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICBk4XR1bSB2eXR2b3JlbmlhOiAiCisKKyM6IG1lbWxpbmUuYzoxNDg3IG1lbWxpbmUuYzozNjgwCittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICBk4XR1bSB2eXR2b3JlbmlhOiAiCisKKyM6IG1lbWxpbmUuYzoxNTAzCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgICAgW29kIFZpbSB2ZXJ6aWUgMy4wXSIKKworIzogbWVtbGluZS5jOjE1MDcKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgIFtuZXZ5cGFk4SBha28gb2RrbGFkYWPtIHP6Ym9yIFZpbV0iCisKKyM6IG1lbWxpbmUuYzoxNTExCittc2dpZCAiICAgICAgICAgZmlsZSBuYW1lOiAiCittc2dzdHIgIiAgICAgICAgIG7hem92IHP6Ym9ydTogIgorCisjOiBtZW1saW5lLmM6MTUyMworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICAgbW9kaWZpZWQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICBk4XR1bSB6bWVueTogIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIllFUyIKK21zZ3N0ciAiwU5PIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIm5vIgorbXNnc3RyICJuaWUiCisKKyM6IG1lbWxpbmUuYzoxNTI4Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIHVzZXIgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgdb7tdmF0ZbVza+kgbWVubzogIgorCisjOiBtZW1saW5lLmM6MTUzNQorbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgICAgICAgICBu4XpvdiBwb+jtdGHoYTogIgorCisjOiBtZW1saW5lLmM6MTUzNworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIG7hem92IHBv6O10YehhOiAiCisKKyM6IG1lbWxpbmUuYzoxNTQzCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICBJRCBwcm9jZXN1IDogIgorCisjOiBtZW1saW5lLmM6MTU0OQorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAoc3ThbGUgYWt07XZueSkiCisKKyM6IG1lbWxpbmUuYzoxNTYxCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbbmVwb3W+aXRltW7pIHMgdG91dG8gdmVyemlvdSBWaW1dIgorCisjOiBtZW1saW5lLmM6MTU2NAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSBvbiB0aGlzIGNvbXB1dGVyXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFtuZXBvdb5pdGVsbukgbmEgdG9tdG8gcG/o7XRh6GldIgorCisjOiBtZW1saW5lLmM6MTU2OQorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iCittc2dzdHIgIiAgICAgICAgIFtuZWThIHNhIHByZejtdGG7XSIKKworIzogbWVtbGluZS5jOjE1NzMKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIG9wZW5lZF0iCittc2dzdHIgIiAgICAgICAgIFtuZWThIHNhIG90dm9yabtdIgorCisjOiBtZW1saW5lLmM6MTc2MworbXNnaWQgIkUzMTM6IENhbm5vdCBwcmVzZXJ2ZSwgdGhlcmUgaXMgbm8gc3dhcCBmaWxlIgorbXNnc3RyICJFMzEzOiBOZWThIHNhIHphY2hvdmG7IC0gb2RrbGFkYWPtIHP6Ym9yIG5lZXhpc3R1amUuIgorCisjOiBtZW1saW5lLmM6MTgxNgorbXNnaWQgIkZpbGUgcHJlc2VydmVkIgorbXNnc3RyICJT+mJvciB6YWNob3Zhbv0iCisKKyM6IG1lbWxpbmUuYzoxODE4Cittc2dpZCAiRTMxNDogUHJlc2VydmUgZmFpbGVkIgorbXNnc3RyICJFMzE0OiBVY2hvdmFuaWUgc2EgbmVwb2RhcmlsbyIKKworIzogbWVtbGluZS5jOjE4ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNTogbWxfZ2V0OiBpbnZhbGlkIGxudW06ICVsZCIKK21zZ3N0ciAiRTMxNTogbWxfZ2V0OiBjaHlibukg6O1zbG8gcmlhZGt1OiAlbGQiCisKKyM6IG1lbWxpbmUuYzoxOTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTY6IG1sX2dldDogY2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMTY6IG1sX2dldDogbmVk4SBzYSBu4WpzuyByaWFkb2sgJWxkIgorCisjOiBtZW1saW5lLmM6MjMwMworbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAiRTMxNzogY2h5Ym7pIGlkIHVrYXpvdmF0ZbVhIG5hIGJsb2sgMyIKKworIzogbWVtbGluZS5jOjIzODMKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCBieSBtYWxvIG1huyBob2Rub3R1IDMiCisKKyM6IG1lbWxpbmUuYzoyNDQ1Cittc2dpZCAiRTMxODogVXBkYXRlZCB0b28gbWFueSBibG9ja3M/IgorbXNnc3RyICJFMzE4OiBBa3R1YWxpem92YW79Y2ggcHLtbGm5IHZltWEgYmxva292PyIKKworIzogbWVtbGluZS5jOjI2MDIKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDQiCittc2dzdHIgIkUzMTc6IGNoeWJu6SBpZCB1a2F6b3ZhdGW1YSBuYSBibG9rIDQiCisKKyM6IG1lbWxpbmUuYzoyNjI5Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAidnltYXphbv0gYmxvayAxPyIKKworIzogbWVtbGluZS5jOjI4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6IE5lZOEgc2EgbuFqc7sgcmlhZG9rICVsZCIKKworIzogbWVtbGluZS5jOjMwNzIKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIgorbXNnc3RyICJFMzE3OiBjaHlibukgaWQgdWthem92YXRltWEgbmEgYmxvayIKKworIzogbWVtbGluZS5jOjMwODgKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgInBlX2xpbmVfY291bnQgbeEgbnVsb3b6IGhvZG5vdHUiCisKKyM6IG1lbWxpbmUuYzozMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjI6IGxpbmUgbnVtYmVyIG91dCBvZiByYW5nZTogJWxkIHBhc3QgdGhlIGVuZCIKK21zZ3N0ciAiRTMyMjog6O1zbG8gcmlhZGt1IGplIG1pbW8gcm96c2FoOiAlbGQgKHphIGtvbmNvbSkiCisKKyM6IG1lbWxpbmUuYzozMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjM6IGxpbmUgY291bnQgd3JvbmcgaW4gYmxvY2sgJWxkIgorbXNnc3RyICJFMzIzOiBjaHlibv0gcG/oZXQgcmlhZGtvdiB2IGJsb2t1ICVsZCIKKworIzogbWVtbGluZS5jOjMxNzAKK21zZ2lkICJTdGFjayBzaXplIGluY3JlYXNlcyIKK21zZ3N0ciAiTuFyYXN0IHZltWtvc3RpIHrhc29ibu1rdSIKKworIzogbWVtbGluZS5jOjMyMTYKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDIiCittc2dzdHIgIkUzMTc6IGNoeWJu/SBpZCB1a2F6b3ZhdGW1YSBuYSBibG9rIDIiCisKKyM6IG1lbWxpbmUuYzozNjcwCittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiBQT1pPUiIKKworIzogbWVtbGluZS5jOjM2NzEKK21zZ2lkICIiCisiXG4iCisiRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgXCIiCittc2dzdHIgIiIKKyJcbiIKKyJO4WpkZW79IG9ka2xhZGFj7SBz+mJvciBzIG1lbm9tIFwiIgorCisjOiBtZW1saW5lLmM6MzY3NQorbXNnaWQgIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIKK21zZ3N0ciAiUHJpIG90duFyYW7tIHP6Ym9ydVwiIgorCisjOiBtZW1saW5lLmM6MzY4NAorbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICAgICBOT1apzSBha28gb2RrbGFkYWPtIHP6Ym9yIVxuIgorCisjLiBTb21lIG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSBsb25nIHRvIGFsbG93IHRyYW5zbGF0aW9uIHRvCisjLiAqIG90aGVyIGxhbmd1YWdlcy4KKyM6IG1lbWxpbmUuYzozNjg4Cittc2dpZCAiIgorIlxuIgorIigxKSBBbm90aGVyIHByb2dyYW0gbWF5IGJlIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS5cbiIKKyIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgYmUgY2FyZWZ1bCBub3QgdG8gZW5kIHVwIHdpdGggdHdvXG4iCisiICAgIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZmlsZSB3aGVuIG1ha2luZyBjaGFuZ2VzLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDEpIFP6Ym9yIG30vmUgYnm7IHVwcmF2b3Zhbv0gaW79bSBwcm9ncmFtb20uXG4iCisiICAgIEFrIGplIHRvbXUgdGFrLCBwb3RvbSBzaSBkYWp0ZSBwb3pvciwgYWJ5IHN0ZSBwbyB1bG++ZW7tIHptaWVuXG4iCisiICAgIG5lbWFsaSBkdmUgcvR6bmUgdmVyemllIHRvaG8gaXN06WhvIHP6Ym9ydS5cbiIKKworIzogbWVtbGluZS5jOjM2ODkKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgVWtvbuhpdGUgcHJvZ3JhbSwgYWxlYm8gb3BhdHJubmUgcG9rcmHodWp0ZSB2IPpwcmF24WNoLlxuIgorCisjOiBtZW1saW5lLmM6MzY5MAorbXNnaWQgIiIKKyJcbiIKKyIoMikgQW4gZWRpdCBzZXNzaW9uIGZvciB0aGlzIGZpbGUgY3Jhc2hlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigyKSDacHJhdmEgdG9ob3RvIHP6Ym9ydSBib2xhIHByZXJ1uWVu4SBuZW/oYWvhdmFu/W0gdWtvbuhlbu1tIHByb2dyYW11LlxuIgorCisjOiBtZW1saW5lLmM6MzY5MQorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIEFrIGplIHRvbXUgdGFrLCBwb3RvbSBwb3W+aXRlIFwiOnJlY292ZXJcIiBhbGVibyBcInZpbSAtciAiCisKKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgcHJlIG9ibm92ZW5pZSB6bWllbiAodml6IFwiOmhlbHAgcmVjb3ZlcnkpXCIuXG4iCisKKyM6IG1lbWxpbmUuYzozNjk0Cittc2dpZCAiICAgIElmIHlvdSBkaWQgdGhpcyBhbHJlYWR5LCBkZWxldGUgdGhlIHN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiICAgIFBva2lhtSBzdGUgdGFrIHW+IHVyb2JpbGksIHRhayB2eW1hvnRlIG9ka2xhZGFj7SBz+mJvciBcIiIKKworIzogbWVtbGluZS5jOjM2OTYKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgYSB04XRvIHNwcuF2YSBzYSB1viBuZWJ1ZGUgb2JqYXZvdmG7LlxuIgorCisjOiBtZW1saW5lLmM6MzcxMCBtZW1saW5lLmM6MzcxNAorbXNnaWQgIlN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiT2RrbGFkYWPtIHP6Ym9yIFwiIgorCisjOiBtZW1saW5lLmM6MzcxMSBtZW1saW5lLmM6MzcxNworbXNnaWQgIlwiIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiXCIgdb4gZXhpc3R1amUhIgorCisjOiBtZW1saW5lLmM6MzcyMAorbXNnaWQgIlZJTSAtIEFUVEVOVElPTiIKK21zZ3N0ciAiVklNIC0gUE9aT1IiCisKKyM6IG1lbWxpbmUuYzozNzIyCittc2dpZCAiU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiT2RrbGFkYWPtIHP6Ym9yIHW+IGV4aXN0dWplISIKKworIzogbWVtbGluZS5jOjM3MjYKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdCIKK21zZ3N0ciAiIgorIiZPdHZvcmm7IGliYSBwcmUg6O10YW5pZVxuIgorIiZQb2tyYehvdmG7IHYg+nByYXbhY2hcbiIKKyJPJmJub3ZpuyBz+mJvclxuIgorIiZLb25pZWMiCisKKyM6IG1lbWxpbmUuYzozNzI4Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisiJk90dm9yabsgaWJhIHByZSDo7XRhbmllXG4iCisiJlBva3Jh6G92YXQgdiD6cHJhduFjaFxuIgorIk8mYm5vdmm7IHP6Ym9yXG4iCisiJktvbmllY1xuIgorIiZabWF6YbsiCisKKyM6IG1lbWxpbmUuYzozNzgxCittc2dpZCAiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIKK21zZ3N0ciAiRTMyNjogUHLtbGm5IG1ub2hvIG9ka2xhZGFj7WNoIHP6Ym9yb3YiCisKKyM6IG1lbnUuYzo2NAorbXNnaWQgIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51IgorbXNnc3RyICJFMzI3OiDIYXO7IGNlc3R5IGsgcHJlZG1ldHUgcG9udWt5IG5pZSBqZSBwb2Rwb251a291IgorCisjOiBtZW51LmM6NjUKK21zZ2lkICJFMzI4OiBNZW51IG9ubHkgZXhpc3RzIGluIGFub3RoZXIgbW9kZSIKK21zZ3N0ciAiRTMyODogUG9udWthIGV4aXN0dWplIGliYSB2IGlub20gbfNkZSIKKworIzogbWVudS5jOjY2Cittc2dpZCAiRTMyOTogTm8gbWVudSBvZiB0aGF0IG5hbWUiCittc2dzdHIgIkUzMjk6IFBvbnVrYSB0b2hvdG8gbWVuYSBuZWV4aXN0dWplIgorCisjOiBtZW51LmM6NTA5Cittc2dpZCAiRTMzMDogTWVudSBwYXRoIG11c3Qgbm90IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzMDogQ2VzdGEgcG9udWt5IG5lc21pZSB2aWVzuyBkbyBwb2Rwb251a3kiCisKKyM6IG1lbnUuYzo1NDgKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTogUG9sb75reSBwb251a3kgc2EgbmVkavogcHJpZOF2YbsgcHJpYW1vIG5hIGxpuXR1IgorCisjOiBtZW51LmM6NTU0Cittc2dpZCAiRTMzMjogU2VwYXJhdG9yIGNhbm5vdCBiZSBwYXJ0IG9mIGEgbWVudSBwYXRoIgorbXNnc3RyICJFMzMyOiBPZGRltW92YeggbmVzbWllIGJ5uyDoYXO7b3UgY2VzdHkgcG9udWt5IgorCisjLiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgbWVudSwgYW5kIHdlIGxpc3QgdGhlIG1hcHBpbmdzCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1lbnUuYzoxMDcwCittc2dpZCAiIgorIlxuIgorIi0tLSBNZW51cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gUG9udWt5IC0tLSIKKworIzogbWVudS5jOjE5ODcKK21zZ2lkICJUZWFyIG9mZiB0aGlzIG1lbnUiCittc2dzdHIgIk9kdHJobvq7IHR1dG8gcG9udWt1IgorCisjOiBtZW51LmM6MjA1MgorbXNnaWQgIkUzMzM6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBtZW51IGl0ZW0iCittc2dzdHIgIkUzMzM6IENlc3RhIHBvbnVreSBtdXPtIHZpZXO7IGsgcG9sb75rZSBwb251a3kiCisKKyM6IG1lbnUuYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzQ6IE1lbnUgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTMzNDogVnpvciBuZW7hamRlbv06ICVzIgorCisjOiBtZW51LmM6MjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzM1OiBNZW51IG5vdCBkZWZpbmVkIGZvciAlcyBtb2RlIgorbXNnc3RyICJFMzM1OiBWICVzIG3zZGUgbmllIGplIHBvbnVrYSBkZWZpbm92YW7hIgorCisjOiBtZW51LmM6MjE3OQorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogQ2VzdGEgcG9udWt5IG11c+0gdmllc7sgZG8gcG9kcG9udWt5IgorCisjOiBtZW51LmM6MjIwMAorbXNnaWQgIkUzMzc6IE1lbnUgbm90IGZvdW5kIC0gY2hlY2sgbWVudSBuYW1lcyIKK21zZ3N0ciAiRTMzNzogUG9udWthIG5lbuFqZGVu4SAtIHNrb250cm9sdWp0ZSBu4Xp2eSBwb276ayIKKworIzogbWVzc2FnZS5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlY3RlZCB3aGlsZSBwcm9jZXNzaW5nICVzOiIKK21zZ3N0ciAiQ2h5YmEgcHJpIHNwcmFjb3Zhbu0gJXM6IgorCisjOiBtZXNzYWdlLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJTRsZDoiCittc2dzdHIgInJpYWRvayAlNGxkOiIKKworIzogbWVzc2FnZS5jOjUyNgorbXNnaWQgIltzdHJpbmcgdG9vIGxvbmddIgorbXNnc3RyICJbcHLtbGm5IGRsaP0gcmW7YXplY10iCisKKyM6IG1lc3NhZ2UuYzo2NzIKK21zZ2lkICJNZXNzYWdlcyBtYWludGFpbmVyOiBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPiIKK21zZ3N0ciAiU3By4XZjYSBzcHLhdjogTWFydGluIExhY2tvIDxsYWNrb0Bob3N0LnNrPiIKKworIzogbWVzc2FnZS5jOjg4NQorbXNnaWQgIkludGVycnVwdDogIgorbXNnc3RyICJQcmVydbllbmllOiAiCisKKyM6IG1lc3NhZ2UuYzo4ODgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIlBva3Jh6G92YW5pZSBzdGxh6GVu7W0gRU5URVIiCisKKyM6IG1lc3NhZ2UuYzo4OTAKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICJQcmUgcG9rcmHob3ZhbmllIHN0bGHodGUgRU5URVIgYWxlYm8gemFkYWp0ZSBwcu1rYXoiCisKKyM6IG1lc3NhZ2UuYzoxOTYxCittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0gUG9rcmHob3ZhbmllIC0tIgorCisjOiBtZXNzYWdlLmM6MTk2NAorbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiByaWFkb2ssIE1FRFpFUk7NSy9iOiBzdHLhbmthLCBkL3U6IDAuNSBzdHLhbmt5LCBxOiBrb25pZWMpIgorCisjOiBtZXNzYWdlLmM6MTk2NQorbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQ6IHJpYWRvaywgTUVEWkVSTs1LOiBzdHLhbmthLCBkOiAwLjUgc3Ry4W5reSwgcToga29uaWVjKSIKKworIzogbWVzc2FnZS5jOjI0NDEgbWVzc2FnZS5jOjI0NTYKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAiT3ThemthIgorCisjOiBtZXNzYWdlLmM6MjQ0MworbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vIgorbXNnc3RyICIiCisiwW4mb1xuIgorIiZOaWUiCisKKyM6IG1lc3NhZ2UuYzoyNDU4Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiwW4mb1xuIgorIiZOaWVcbiIKKyImWnJ1uWm7IgorCisjOiBtZXNzYWdlLmM6MjQ3NgorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIsFuJm9cbiIKKyImTmllXG4iCisiJlVsb75puyB2uWV0a29cbiIKKyJaYWhvZGm7ICZ2uWV0a29cbiIKKyImWnJ1uWm7IgorCisjOiBtZXNzYWdlLmM6MjUxNworbXNnaWQgIlNhdmUgRmlsZSBkaWFsb2ciCittc2dzdHIgIkRpYWzzZyBwcmUgdWtsYWRhbmllIHP6Ym9yb3YiCisKKyM6IG1lc3NhZ2UuYzoyNTE5Cittc2dpZCAiT3BlbiBGaWxlIGRpYWxvZyIKK21zZ3N0ciAiRGlhbPNnIHByZSBvdHbhcmFuaWUgc/pib3JvdiIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzoyNTkwCittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIkUzMzg6IKV1dHVqZW0sIGFsZSBrb256b2xvduEgdmVyemlhIG5lcG9kcG9ydWplIHByZWhsaWFkYeggc/pib3JvdiIKKworIzogbWlzYzEuYzoyNDU3Cittc2dpZCAiVzEwOiBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiCittc2dzdHIgIlcxMDogVmFyb3ZhbmllOiBtZW7tbSBz+mJvciBpYmEgcHJlIOjtdGFuaWUiCisKKyM6IG1pc2MxLmM6MjY4NgorbXNnaWQgIjEgbW9yZSBsaW5lIgorbXNnc3RyICJwb+hldCBub3b9Y2ggcmlhZGtvdjogMSIKKworIzogbWlzYzEuYzoyNjg4Cittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgInBv6GV0IHZ5bWF6YW79Y2ggcmlhZGtvdjogMSIKKworIzogbWlzYzEuYzoyNjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgorbXNnc3RyICJwb+hldCBub3b9Y2ggcmlhZGtvdjogJWxkIgorCisjOiBtaXNjMS5jOjI2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGZld2VyIGxpbmVzIgorbXNnc3RyICJwb+hldCB2eW1hemFu/WNoIHJpYWRrb3Y6ICVsZCIKKworIzogbWlzYzEuYzoyNjk4Cittc2dpZCAiIChJbnRlcnJ1cHRlZCkiCittc2dzdHIgIiAoUHJlcnW5ZW7pKSIKKworIzogbWlzYzEuYzo2MzE2Cittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTogemFjaG924XZhbSBz+mJvcnkuLi5cbiIKKworIy4gY2xvc2UgYWxsIG1lbWZpbGVzLCB3aXRob3V0IGRlbGV0aW5nCisjOiBtaXNjMS5jOjYzMjYKK21zZ2lkICJWaW06IEZpbmlzaGVkLlxuIgorbXNnc3RyICJWaW06IHVrb27oZW79XG4iCisKKyM6IG1pc2MyLmM6NjYxIG1pc2MyLmM6Njc3Cittc2dpZCAiRVJST1I6ICIKK21zZ3N0ciAiQ0hZQkE6ICIKKworIzogbWlzYzIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJbYmFqdG92XSBjZWxrb20gdXZvbG5lbuktYWxva292YW7pICVsdS0lbHUsIHZ5db5pdOkgJWx1LCBtYXhpbeFsbmUgdnl1vml0aWUgJSIKKyJsdVxuIgorCisjOiBtaXNjMi5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiW2NhbGxzXSB0b3RhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWwgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCittc2dzdHIgIiIKKyJbdm9sYW5pZV0gY2Vsa29tIHJlL21hbGxvYygpOiAlbHUsIGNlbGtvbSBmcmVlKCkgJWx1XG4iCisiXG4iCisKKyM6IG1pc2MyLmM6NzM4Cittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDogUmlhZG9rIHNhIHN04XZhIHBy7WxpuSBkbGj9bSIKKworIzogbWlzYzIuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MTogSW50ZXJuYWwgZXJyb3I6IGxhbGxvYyglbGQsICkiCittc2dzdHIgIkUzNDE6IFZu+nRvcm7hIGNoeWJhOiBsYWxsb2MoJWxkLCApIgorCisjOiBtaXNjMi5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQyOiBPdXQgb2YgbWVtb3J5ISAgKGFsbG9jYXRpbmcgJWx1IGJ5dGVzKSIKK21zZ3N0ciAiRTM0MjogTmVkb3N0YXRvayBwYW3kdGUhIChhbG9rdWplbSAlbHUgYnl0b3YpIgorCisjOiBtaXNjMi5jOjI1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FsbGluZyBzaGVsbCB0byBleGVjdXRlOiBcIiVzXCIiCittc2dzdHIgIlZvbOFtIHNoZWxsIG5hIHNwdXN0ZW5pZTogXCIlc1wiIgorCisjOiBtaXNjMi5jOjI3NDAgbWlzYzIuYzo1MjI1IG9wdGlvbi5jOjQ2MzYKK21zZ2lkICJNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJDaP1iYSBkdm9qYm9ka2EiCisKKyM6IG1pc2MyLmM6Mjc0MiBtaXNjMi5jOjI3NjkKK21zZ2lkICJJbGxlZ2FsIG1vZGUiCittc2dzdHIgIk5lcHLtc3R1cG79IG3zZCIKKworIzogbWlzYzIuYzoyODA4Cittc2dpZCAiSWxsZWdhbCBtb3VzZXNoYXBlIgorbXNnc3RyICJDaHlibv0gdHZhciBteblpIgorCisjOiBtaXNjMi5jOjI4NDggbWlzYzIuYzo1MjQ1Cittc2dpZCAiZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgIm/oYWvhdmFu4SDo7XNsaWNhIgorCisjOiBtaXNjMi5jOjI4NTMKK21zZ2lkICJJbGxlZ2FsIHBlcmNlbnRhZ2UiCittc2dzdHIgIk5lcHLtc3R1cG7pIHByZWNlbnRvIgorCisjOiBtaXNjMi5jOjMxNTcKK21zZ2lkICJFbnRlciBlbmNyeXB0aW9uIGtleTogIgorbXNnc3RyICJaYWRhanRlILlpZnJvdmFj7SBrtfroOiAiCisKKyM6IG1pc2MyLmM6MzE1OAorbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIlZsb750ZSBrtfroIHpub3ZhOiAiCisKKyM6IG1pc2MyLmM6MzE2OAorbXNnaWQgIktleXMgZG9uJ3QgbWF0Y2ghIgorbXNnc3RyICJLtfroIG5pZSBqZSBzcHLhdm55ISIKKworIzogbWlzYzIuYzozNzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICIiCisiRTM0MzogQ2h5Ym7hIGNlc3RhOiAnKipb6O1zbG9dIG11c+0gYnm7IGJ17yBuYSBrb25jaSBjZXN0eSwgYWxlYm8gbXVz7SBiebtcbiIKKyJuYXNsZWRvdmFu6SAnJXMuIFZpeiA6aGVscCBwYXRoLiIKKworIzogbWlzYzIuYzo0OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IEFkcmVz4XIgXCIlc1wiIHNhIG5lZOEgdiBjZHBhdGggbuFqc7siCisKKyM6IG1pc2MyLmM6NDk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ1OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkUzNDU6IFP6Ym9yIFwiJXNcIiBzYSBuZXBvZGFyaWxvIG7hanO7IgorCisjOiBtaXNjMi5jOjQ5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NjogTm8gbW9yZSBkaXJlY3RvcnkgXCIlc1wiIGZvdW5kIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NjogrmlhZG55IO9hbLntIGFkcmVz4XIgXCIlc1wiIG5lYm9sIHYgY2RwYXRoIG7hamRlbv0iCisKKyM6IG1pc2MyLmM6NDk5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ3OiBObyBtb3JlIGZpbGUgXCIlc1wiIGZvdW5kIGluIHBhdGgiCittc2dzdHIgIkUzNDc6IK5pYWRueSDvYWy57SBz+mJvciBcIiVzXCIgbmVib2wgdiBjZXN0ZSBu4WpkZW79IgorCisjOiBtaXNjMi5jOjUyMzcKK21zZ2lkICJJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAiTmVwcu1zdHVwbv0ga29tcG9uZW50IgorCisjOiBub3JtYWwuYzoyODQzCittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAiVmFyb3ZhbmllOiB0ZXJtaW7hbCBuZXBvZHBvcnVqZSB6dv1yYXryb3ZhbmllIgorCisjOiBub3JtYWwuYzozMDM4Cittc2dpZCAiRTM0ODogTm8gc3RyaW5nIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0ODogUG9kIGt1cnpvcm9tIG5pZSBqZSC+aWFkbnkgcmW7YXplYyIKKworIzogbm9ybWFsLmM6MzA0MAorbXNnaWQgIkUzNDk6IE5vIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ5OiBQb2Qga3Vyem9yb20gbmllIGplIL5pYWRueSBpZGVudGlmaWvhdG9yIgorCisjOiBub3JtYWwuYzo0MjExCittc2dpZCAiRTM1MjogQ2Fubm90IGVyYXNlIGZvbGRzIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTI6IFBvbW9jb3UgJ2ZvbGRtZXRob2QnIHNhIG5lZOEgdnltYXphuyB64Wh5YiIKKworIzogb3BzLmM6MjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkIDEgdGltZSIKK21zZ3N0ciAicG/oZXQgcmlhZGtvdiBwb3N1bnV0/WNoIG5hcmF6IHBvbW9jb3UgJXMgOiAxIgorCisjOiBvcHMuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgJWQgdGltZXMiCittc2dzdHIgInBv6GV0IHJpYWRrb3YgcG9zdW51dP1jaCAlcyBrcuF0IHBvbW9jb3UgJWQgcyA6IDEiCisKKyM6IG9wcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAxIHRpbWUiCittc2dzdHIgIiVsZCByaWFka292IHBvc3VudXT9Y2ggbmFyYXogcG9tb2NvdSAlcyIKKworIzogb3BzLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIlbGQgcmlhZGtvdiBwb3N1bnV0/WNoIHBvbW9jb3UgJXMgJWQga3LhdCIKKworIzogb3BzLmM6NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB0byBpbmRlbnQuLi4gIgorbXNnc3RyICJwb+hldCByaWFka292IHByZSBvZHNhZGVuaWU6ICVsZCIKKworIzogb3BzLmM6NzAxCittc2dpZCAiMSBsaW5lIGluZGVudGVkICIKK21zZ3N0ciAicG/oZXQgcmlhZGtvdiBwcmUgb2RzYWRlbmllOiAxICIKKworIzogb3BzLmM6NzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBpbmRlbnRlZCAiCittc2dzdHIgInBv6GV0IG9kc2FkZW79Y2ggcmlhZGtvdjogJWxkIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogb3BzLmM6MTU0NgorbXNnaWQgImNhbm5vdCB5YW5rOyBkZWxldGUgYW55d2F5IgorbXNnc3RyICJuZWThIHNhIGtvcO1yb3ZhuzsgbmFwcmllayB0b211IHZ5bWF6YW7pIgorCisjOiBvcHMuYzoyMDgwCittc2dpZCAiMSBsaW5lIGNoYW5nZWQiCittc2dzdHIgInBv6GV0IHptZW5lbv1jaCByaWFka292OiAxIgorCisjOiBvcHMuYzoyMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBjaGFuZ2VkIgorbXNnc3RyICJwb+hldCB6bWVuZW79Y2ggcmlhZGtvdjogJWxkIgorCisjOiBvcHMuYzoyNDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImZyZWVpbmcgJWxkIGxpbmVzIgorbXNnc3RyICJwb+hldCB1dm9s8m92YW79Y2ggcmlhZGtvdjogJWxkIgorCisjOiBvcHMuYzoyNzIwCittc2dpZCAiMSBsaW5lIHlhbmtlZCIKK21zZ3N0ciAicG/oZXQgc2tvcO1yb3Zhbv1jaCByaWFka292OiAxIgorCisjOiBvcHMuYzoyNzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgInBv6GV0IHNrb3Dtcm92YW79Y2ggcmlhZGtvdjogJWxkIgorCisjOiBvcHMuYzoyOTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTM6IE5vdGhpbmcgaW4gcmVnaXN0ZXIgJXMiCittc2dzdHIgIkUzNTM6IFJlZ2lzdGVyICVzIGplIHBy4XpkbnkiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogb3BzLmM6MzU1MworbXNnaWQgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBSZWdpc3RyZSAtLS0iCisKKyM6IG9wcy5jOjQ3MTEKK21zZ2lkICJJbGxlZ2FsIHJlZ2lzdGVyIG5hbWUiCittc2dzdHIgIk5lcHLtc3R1cG79IG7hem92IHJlZ2lzdHJ1IgorCisjOiBvcHMuYzo0Nzk3Cittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBSZWdpc3RyZTpcbiIKKworIzogb3BzLmM6NDgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHJlZ2lzdGVyIHR5cGUgJWQiCittc2dzdHIgIiVkIG5pZSBqZSB6buFt/W0gdHlwb20gcmVnaXN0cnUiCisKKyM6IG9wcy5jOjUyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NDogSW52YWxpZCByZWdpc3RlciBuYW1lOiAnJXMnIgorbXNnc3RyICJFMzU0OiAnJXMnIG5pZSBqZSBwcu1zdHVwbukgbWVubyByZWdpc3RydSIKKworIzogb3BzLmM6NTU2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgQ29sczsgIgorbXNnc3RyICIlbGQgQnVuaWVrOyAiCisKKyM6IG9wcy5jOjU1NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VsZWN0ZWQgJXMlbGQgb2YgJWxkIExpbmVzOyAlbGQgb2YgJWxkIFdvcmRzOyAlbGQgb2YgJWxkIEJ5dGVzIgorbXNnc3RyICJWeWJyYW79Y2ggJXMlbGQgeiAlbGQgcmlhZGtvdjsgJWxkIHpvICVsZCBzbG92OyAlbGQgeiAlbGQgQnl0b3YiCisKKyM6IG9wcy5jOjU1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQnl0ZSAlbGQgb2YgJWxkIgorbXNnc3RyICJCdW5rYSAlcyB6ICVzOyBSaWFkb2sgJWxkIHogJWxkOyBTbG92byAlbGQgeiAlbGQ7IEJ5dGUgJWxkIHogJWxkIgorCisjOiBvcHMuYzo1NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCBwcmUgQk9NKSIKKworIzogb3B0aW9uLmM6MTk4OQorbXNnaWQgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIKK21zZ3N0ciAiz2FrdWplbSB6YSBwb3W+aXRpZSBWaW0iCisKKyM6IG9wdGlvbi5jOjMxNzUKK21zZ2lkICJPcHRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiVm+1YmEgbmllIGplIHBvZHBvcm92YW7hIgorCisjOiBvcHRpb24uYzozMjAwCittc2dpZCAiTm90IGFsbG93ZWQgaW4gYSBtb2RlbGluZSIKK21zZ3N0ciAiTmllIGplIHYgbW9kZWxpbmUgcG92b2xlbukiCisKKyM6IG9wdGlvbi5jOjMyNTYKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0T3N0YXRu6SBuYXN0YXZlbmllIHogIgorCisjOiBvcHRpb24uYzozMzk1Cittc2dpZCAiTnVtYmVyIHJlcXVpcmVkIGFmdGVyID0iCittc2dzdHIgIlBvID0gamUgdnm+YWRvdmFu6SDo7XNsbyIKKworIzogb3B0aW9uLmM6MzcxNCBvcHRpb24uYzo0MzIyCittc2dpZCAiTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIk5lbuFqZGVu/SB2IHRlcm1jYXB1IgorCisjOiBvcHRpb24uYzozNzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgY2hhcmFjdGVyIDwlcz4iCittc2dzdHIgIk5lcHLtc3R1cG79IHpuYWsgPCVzPiIKKworIzogb3B0aW9uLmM6NDMwNyBvcHRpb24uYzo1NTcwCittc2dpZCAiTm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiVG90byBuaWUgamUgbmEgdG9tdG8gbWllc3RlIHBvdm9sZW7pIgorCisjOiBvcHRpb24uYzo0MzE0Cittc2dpZCAiQ2Fubm90IHNldCAndGVybScgdG8gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJWb7ViYSAndGVybScgbmVt9L5lIGJ5uyBwcuF6ZG5hIgorCisjOiBvcHRpb24uYzo0MzE3Cittc2dpZCAiQ2Fubm90IGNoYW5nZSB0ZXJtIGluIEdVSSIKK21zZ3N0ciAiViBHVUkgc2EgbmVk4SBtZW5puyB0ZXJtIgorCisjOiBvcHRpb24uYzo0MzE5Cittc2dpZCAiVXNlIFwiOmd1aVwiIHRvIHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIlBvdb5pdGUgXCJndWlcIiBwcmUgc3B1c3RlbmllIEdVSSIKKworIzogb3B0aW9uLmM6NDM0MAorbXNnaWQgIidiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiCittc2dzdHIgInZvtWJ5ICdiYWNrdXBleHQnIGEgJ3BhdGNobW9kZScgbWFq+iByb3ZuYWv6IGhvZG5vdHUiCisKKyM6IG9wdGlvbi5jOjQ2MzgKK21zZ2lkICJaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIlJlu2F6ZWMgcyBudWxvdm91IGTlvmtvdSIKKworIzogb3B0aW9uLmM6NDcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICJQbyA8JXM+IGNo/WJhIOjtc2xvIgorCisjOiBvcHRpb24uYzo0NzIwCittc2dpZCAiTWlzc2luZyBjb21tYSIKK21zZ3N0ciAiQ2j9YmEg6GlhcmthIgorCisjOiBvcHRpb24uYzo0NzI3Cittc2dpZCAiTXVzdCBzcGVjaWZ5IGEgJyB2YWx1ZSIKK21zZ3N0ciAiSmUgbnV0bukgemFkYbsgaG9kbm90dSAnIgorCisjOiBvcHRpb24uYzo0NzY3Cittc2dpZCAiY29udGFpbnMgdW5wcmludGFibGUgY2hhcmFjdGVyIgorbXNnc3RyICJvYnNhaHVqZSBuZXRsYehpdGW1bukgem5ha3kiCisKKyM6IG9wdGlvbi5jOjQ4MDAKK21zZ2lkICJJbnZhbGlkIGZvbnQocykiCittc2dzdHIgIkNoeWJu6SBw7XNtYSIKKworIzogb3B0aW9uLmM6NDgwNworbXNnaWQgImNhbid0IHNlbGVjdCBmb250c2V0IgorbXNnc3RyICJuZWThIHNhIHZ5YnJhuyBzYWRhIHDtc2llbSIKKworIzogb3B0aW9uLmM6NDgwOQorbXNnaWQgIkludmFsaWQgZm9udHNldCIKK21zZ3N0ciAiQ2h5Ym7hIHNhZGEgcO1zaWVtIgorCisjOiBvcHRpb24uYzo0ODE2Cittc2dpZCAiY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAibmVk4SBzYSB2eWJyYbsguWlyb2v9IGZvbnQiCisKKyM6IG9wdGlvbi5jOjQ4MTgKK21zZ2lkICJJbnZhbGlkIHdpZGUgZm9udCIKK21zZ3N0ciAiQ2h5Ym7pILlpcm9r6SBw7XNtbyIKKworIzogb3B0aW9uLmM6NTA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciA8JWM+IgorbXNnc3RyICJOZXBy7XN0dXBu/SB6bmFrIHBvIDwlYz4iCisKKyM6IG9wdGlvbi5jOjUxNzEKK21zZ2lkICJjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAiamUgbnV0buEg6GlhcmthIgorCisjOiBvcHRpb24uYzo1MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIidjb21tZW50c3RyaW5nJyBtdXN0IGJlIGVtcHR5IG9yIGNvbnRhaW4gJXMiCittc2dzdHIgIidrb21lbnThcicgbXVz7SBiebsgcHLhemRueSBhbGVibyBtdXPtIG9ic2Fob3ZhuyAlcyIKKworIzogb3B0aW9uLmM6NTIyNgorbXNnaWQgIk5vIG1vdXNlIHN1cHBvcnQiCittc2dzdHIgIkJleiBwb2Rwb3J5IG15uWkiCisKKyM6IG9wdGlvbi5jOjU0NzIKK21zZ2lkICJVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJOZXV6YXR2b3Jlbukgem9za3VwZW5pZSB2/XJhem92IgorCisjOiBvcHRpb24uYzo1NDc2Cittc2dpZCAidG9vIG1hbnkgaXRlbXMiCittc2dzdHIgInBy7WxpuSBtbm9obyBwb2xvvmllayIKKworIzogb3B0aW9uLmM6NTQ3OAorbXNnaWQgInVuYmFsYW5jZWQgZ3JvdXBzIgorbXNnc3RyICJuZXZ5duG+ZW7pIHNrdXBpbnkiCisKKyM6IG9wdGlvbi5jOjU2OTMKK21zZ2lkICJBIHByZXZpZXcgd2luZG93IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJPa25vIG7haLVhZHUgdb4gZXhpc3R1amUiCisKKyM6IG9wdGlvbi5jOjU5NTQgb3B0aW9uLmM6NTk4MworbXNnaWQgIid3aW5oZWlnaHQnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbmhlaWdodCciCittc2dzdHIgImhvZG5vdGEgdm+1YnkgJ3dpbmhlaWdodCcgbmVzbWllIGJ5uyBtZW65aWEgbmW+IGhvZG5vdGEgdm+1YnkgJ3dpbm1pbmhlaWdodCciCisKKyM6IG9wdGlvbi5jOjU5OTkgb3B0aW9uLmM6NjAxOAorbXNnaWQgIid3aW53aWR0aCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWlud2lkdGgnIgorbXNnc3RyICJob2Rub3RhIHZvtWJ5ICd3aW53aWR0aCcgbmVzbWllIGJ5uyBtZW65aWEgbmW+IGhvZG5vdGEgdm9stXkgJ3dpbm1pbndpZHRoJyIKKworIzogb3B0aW9uLmM6NjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJNaW5pbeFsbmUgcG90cmVibv0gcG/oZXQgcmlhZGtvdjogJWQiCisKKyM6IG9wdGlvbi5jOjYxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIgorbXNnc3RyICJNaW5pbeFsbmUgcG90cmVibv0gcG/oZXQgc3TlcGNvdjogJWQiCisKKyM6IG9wdGlvbi5jOjY0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NTogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMzU1OiBOZXpu4W1hIHZvtWJhOiAlcyIKKworIzogb3B0aW9uLmM6NjU3NAorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEvzZHkgdGVybWlu4Wx1IC0tLSIKKworIzogb3B0aW9uLmM6NjU3NgorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE5hc3RhdmVuaWUgZ2xvYuFsbnljaCB2b2xpZWIgLS0tIgorCisjOiBvcHRpb24uYzo2NTc4Cittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBOYXN0YXZlbmllIGdsb2LhbG55Y2ggdm9saWViIC0tLSIKKworIzogb3B0aW9uLmM6NjU4MAorbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTW++bm9zdGkgLS0tIgorCisjOiBvcHRpb24uYzo3MjY5Cittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6IGdldF92YXJwIENIWUJBIgorCisjOiBvcHRpb24uYzo4MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTc6ICdsYW5nbWFwJzogTWF0Y2hpbmcgY2hhcmFjdGVyIG1pc3NpbmcgZm9yICVzIgorbXNnc3RyICJFMzU3OiAnbGFuZ21hcCc6IHByZSAlcyBjaP1iYSB2eWhvdnVq+mNpIHpuYWsiCisKKyM6IG9wdGlvbi5jOjgyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1ODogJ2xhbmdtYXAnOiBFeHRyYSBjaGFyYWN0ZXJzIGFmdGVyIHNlbWljb2xvbjogJXMiCittc2dzdHIgIkUzNTg6ICdsYW5nbWFwJzogbmFkYnl0b+hu6SB6bmFreSBwbyBib2Rrb+hpYXJrZTogJXMiCisKKyM6IG9zX2FtaWdhLmM6MjczCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICJuZWThIHNhIG90dm9yabsgIgorCisjOiBvc19hbWlnYS5jOjMwNworbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIlZJTTogTmVk4SBzYSBvdHZvcmm7IG9rbm8hXG4iCisKKyM6IG9zX2FtaWdhLmM6MzI5Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAiSmUgcG90cmVibuEgQW1pZ2Fkb3MgdmVyemlhIDIuMDQgYWxlYm8gbm92uWlhXG4iCisKKyM6IG9zX2FtaWdhLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgJXMgdmVyc2lvbiAlbGRcbiIKK21zZ3N0ciAiUG90cmVibv0gJXMgIHZlcnppYSAlbGRcbiIKKworIzogb3NfYW1pZ2EuYzo0MDcKK21zZ2lkICJDYW5ub3Qgb3BlbiBOSUw6XG4iCittc2dzdHIgIk5lZOEgc2Egb3R2b3JpuyBOSUw6XG4iCisKKyM6IG9zX2FtaWdhLmM6NDE4Cittc2dpZCAiQ2Fubm90IGNyZWF0ZSAiCittc2dzdHIgIk5lZOEgc2Egdnl0dm9yabsgIgorCisjOiBvc19hbWlnYS5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJWaW0gZXhpdGluZyB3aXRoICVkXG4iCittc2dzdHIgIlZpbSB1a29u6GVu/SBzICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTI4Cittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAibmVt9L5lbSB6bWVuabsga29uem9sb3b9IG3zZCA/IVxuIgorCisjOiBvc19hbWlnYS5jOjkzOCBvc19tYWMuYzoxMTc3IG9zX21zd2luLmM6NjI5IG9zX3Jpc2Nvcy5jOjc1NyBvc191bml4LmM6MjgwMworbXNnaWQgIkUzNTk6IFNjcmVlbiBtb2RlIHNldHRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTM1OTogTmFzdGF2b3ZhbmllIHJlvmltdSBvYnJhem92a3kgbmllIGplIHBvZHBvcm92YW7pIgorCisjOiBvc19hbWlnYS5jOjk5NAorbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAibWNoX2dldF9zaGVsbHNpemU6IG5pZSBqZSBrb256b2xvdT8/XG4iCisKKyMuIGlmIFZpbSBvcGVuZWQgYSB3aW5kb3c6IEV4ZWN1dGluZyBhIHNoZWxsIG1heSBjYXVzZSBjcmFzaGVzCisjOiBvc19hbWlnYS5jOjExNDIKK21zZ2lkICJFMzYwOiBDYW5ub3QgZXhlY3V0ZSBzaGVsbCB3aXRoIC1mIG9wdGlvbiIKK21zZ3N0ciAiRTM2MDogTmVk4SBzYSBzcHVzdGm7IHNoZWxsIHMgLWYgdm+1Ym91IgorCisjOiBvc19hbWlnYS5jOjExODMgb3NfYW1pZ2EuYzoxMjczCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICJOZWThIHNhIHNwdXN0absgIgorCisjOiBvc19hbWlnYS5jOjExODYgb3NfYW1pZ2EuYzoxMjgzCittc2dpZCAic2hlbGwgIgorbXNnc3RyICJzaGVsbCAiCisKKyM6IG9zX2FtaWdhLmM6MTIwNiBvc19hbWlnYS5jOjEzMDgKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiIHZy4XRlbulcbiIKKworIzogb3NfYW1pZ2EuYzoxNDQ4Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSBwcu1sabkgbWFs4S4iCisKKyM6IG9zX2FtaWdhLmM6MTQ1MgorbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAiSS9PIENIWUJBIgorCisjOiBvc19tc3dpbi5jOjUwMworbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICIuLi4oc2ty4XRlbukpIgorCisjOiBvc19tc3dpbi5jOjYwNAorbXNnaWQgIidjb2x1bW5zJyBpcyBub3QgODAsIGNhbm5vdCBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICInc3TlcGNlJyBuaWUgamUgODAsIG5lbfS+ZW0gc3B1c3RpuyBleHRlcm79IHBy7WtheiIKKworIzogb3NfbXN3aW4uYzo3MTYgb3NfdW5peC5jOjUxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NDogTGlicmFyeSBjYWxsIGZhaWxlZCBmb3IgXCIlcygpXCIiCittc2dzdHIgIkUzNjQ6IFZ5dm9sYW5pZSBrbmm+bmnobmVqIGZ1bmtjaWEgemx5aGFsbyBwcmUgXCIlcygpXCIiCisKKyM6IG9zX21zd2luLmM6MTM2NQorbXNnaWQgIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRTIzNzogWmx5aGFsIHb9YmVyIHRsYehpYXJuZSIKKworIzogb3NfbXN3aW4uYzoxNDA1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvICVzIG9uICVzIgorbXNnc3RyICIlcyBuYSAlcyIKKworIzogb3NfbXN3aW4uYzoxNDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDg6IFVua25vd24gZm9udDogJXMiCittc2dzdHIgIkU0NDg6IE5lem7hbWUgcO1zbW86ICVzIgorCisjOiBvc19tc3dpbi5jOjE0NzAgb3NfbXN3aW4uYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogQ2h5YmEgdGxh6GU6ICVzIgorCisjOiBvc19tc3dpbi5jOjE0ODEKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJOZXpu4W15IgorCisjOiBvc19tc3dpbi5jOjE1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAiVGxh6O1tICclcyciCisKKyM6IG9zX21zd2luLmM6MjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDogQ2h5Ym79IG7hem92IHpuYWtvdmVqIHNhZHkgXCIlc1wiIHYgbuF6dmUgcO1zbWEgXCIlc1wiIgorCisjOiBvc19tc3dpbi5jOjI2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTogQ2h5Ym79IHpuYWsgJyVjJyB2IG7henZlIHDtc21hIFwiJXNcIiIKKworIzogb3NfcmlzY29zLmM6MTI1NgorbXNnaWQgIkUzNjY6IEludmFsaWQgJ29zZmlsZXR5cGUnIG9wdGlvbiAtIHVzaW5nIFRleHQiCittc2dzdHIgIkUzNjY6IENoeWJu4SAnb3NmaWxldHlwZScgdm+1YmEgLSBwb3W+aXRpZSBUZXh0dSIKKworIzogb3NfdW5peC5jOjg2MgorbXNnaWQgIlZpbTogRG91YmxlIHNpZ25hbCwgZXhpdGluZ1xuIgorbXNnc3RyICJWSW06IGR2b2ppdP0gc2lnbuFsLCBrb27o7W1cbiIKKworIzogb3NfdW5peC5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCBkZWFkbHkgc2lnbmFsICVzXG4iCittc2dzdHIgIlZpbTogWmFjaHl0ZW79IHNtcnRpYWNpIHNpZ27hbCAlc1xuIgorCisjOiBvc191bml4LmM6ODcxCittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIgorbXNnc3RyICJWaW06IFphY2h5dGVu/SBzbXJ0aWFjaSBzaWdu4WxcbiIKKworIzogb3NfdW5peC5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRvb2sgJWxkIG1zZWMiCittc2dzdHIgIk90duFyYW0gWCBkaXNwbGVqIC0gemFiZXJpZSAlbGQgbXNlYyIKKworIzogb3NfdW5peC5jOjExNTIKK21zZ2lkICIiCisiXG4iCisiVmltOiBHb3QgWCBlcnJvclxuIgorbXNnc3RyICIiCisiXG4iCisiVmltOiBjaHliYSBYXG4iCisKKyM6IG9zX3VuaXguYzoxMjE5Cittc2dpZCAiVGVzdGluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAiVGVzdG92YW5pZSBYIGRpc3BsZWphIHpseWhhbG8iCisKKyM6IG9zX3VuaXguYzoxMzYzCittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRpbWVkIG91dCIKK21zZ3N0ciAiVXBseW51bCDoYXMgb3R2b3JlbmlhIFggZGlzcGxlamEiCisKKyM6IG9zX3VuaXguYzoyOTc2IG9zX3VuaXguYzozNjM0Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsICIKK21zZ3N0ciAiIgorIlxuIgorIk5lZOEgc2Egc3B1c3RpuyBzaGVsbCAiCisKKyM6IG9zX3VuaXguYzozMDIxCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsIHNoXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOZWThIHNhIHNwdXN0absgc2ggc2hlbGxcbiIKKworIzogb3NfdW5peC5jOjMwMjUgb3NfdW5peC5jOjM2NDAKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisiIG7hdnJhdG924SBob2Rub3RhIHNoZWxsdSAiCisKKyM6IG9zX3VuaXguYzozMTU5Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5lZGr6IHNhIHZ5dHZvcmm7IHL6cnlcbiIKKworIzogb3NfdW5peC5jOjMxNzQKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGZvcmtcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZ5dm9sYW5pZSBmb3JrIHpseWhhbG9cbiIKKworIzogb3NfdW5peC5jOjM2NDcKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQcu1rYXogdWtvbuhlbv1cbiIKKworIzogb3NfdW5peC5jOjUxNjQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICJPdHZvcmVuaWUgWCBkaXNwbGVqYSB6bHloYWxvIgorCisjOiBvc192bXNfbW1zLmM6NTkKK21zZ2lkICJBdCBsaW5lIgorbXNnc3RyICJOYSByaWFka3UiCisKKyM6IG9zX3dpbjE2LmM6NTc4IG9zX3dpbjMyLmM6MzAzNworIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAibuF2cmF0b3bhIGhvZG5vdGEgc2hlbGx1ICVkIgorCisjOiBvc193aW4zMi5jOjI1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgJXMgZXZlbnRcbiIKK21zZ3N0ciAiVmltOiBaYWNoeXRlbuEgdWRhbG9zuyAlc1xuIgorCisjOiBvc193aW4zMi5jOjI1MDcKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAiemF2cmlluyIKKworIzogb3Nfd2luMzIuYzoyNTA5Cittc2dpZCAibG9nb2ZmIgorbXNnc3RyICJvZGhs4XNpuyIKKworIzogb3Nfd2luMzIuYzoyNTEwCittc2dpZCAic2h1dGRvd24iCittc2dzdHIgInZ5cG76uyIKKworIzogb3Nfd2luMzIuYzoyOTkxCittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6IFBy7WtheiBuZW7hamRlbv0iCisKKyM6IG9zX3dpbjMyLmM6MzAwNAorbXNnaWQgIiIKKyJWSU1SVU4uRVhFIG5vdCBmb3VuZCBpbiB5b3VyICRQQVRILlxuIgorIkV4dGVybmFsIGNvbW1hbmRzIHdpbGwgbm90IHBhdXNlIGFmdGVyIGNvbXBsZXRpb24uXG4iCisiU2VlICA6aGVscCB3aW4zMi12aW1ydW4gIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlZJTVJVTi5FWEUgbmVu4WpkZW79IHYgJFBBVEguXG4iCisiUG8gZG9rb27oZW7tIGV4dGVybv1jaCBwcu1rYXpvdiBuZWJ1ZGUgdv1zdHVwIHBvemFzdGF2ZW79LlxuIgorIlBvenJpdGUgIDpoZWxwIHdpbjMyLXZpbXJ1biAgcHJlIHZpYWMgaW5mb3Jt4WNp7S4iCisKKyM6IG9zX3dpbjMyLmM6MzAwNworbXNnaWQgIlZpbSBXYXJuaW5nIgorbXNnc3RyICJWaW0gVmFyb3ZhbmllIgorCisjOiBvc193MzJleGUuYzoxNjkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICJOZW30vmVtIG5haHJhuyB2aW0zMi5kbGwhIgorCisjOiBvc193MzJleGUuYzoxNjkgb3NfdzMyZXhlLmM6MTc5Cittc2dpZCAiVklNIEVycm9yIgorbXNnc3RyICJWSU0gQ2h5YmEiCisKKyM6IG9zX3czMmV4ZS5jOjE3OQorbXNnaWQgIkNvdWxkIG5vdCBmaXggdXAgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIERMTCEiCittc2dzdHIgIk5lbfS+ZW0gb3ByYXZpuyBvZGthenkgZnVua2NpZSBuYSBETEwhIgorCisjOiBxdWlja2ZpeC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcyOiBUb28gbWFueSAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzI6IFBy7WxpuSBtbm9obyAlJSVjIHZvIGZvcm3hdG92YWNvbSByZbthemNpIgorCisjOiBxdWlja2ZpeC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MzogTmVv6GFr4XZhbv0gdv1za3l0ICUlJWMgdm8gZm9ybeF0b3ZhY29tIHJlu2F6Y2kiCisKKyM6IHF1aWNrZml4LmM6MzQ4Cittc2dpZCAiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzQ6IFZvIGZvcm3hdG92YWNvbSByZbthemNpIGNo/WJhIF0iCisKKyM6IHF1aWNrZml4LmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogTmVwb2Rwb3JvdmFu4SBmb3Jt4XRvduEguXBlY2lmaWvhY2lhICUlJWMgdm8gZm9ybeF0b3ZhY29tIHJlu2F6Y2kiCisKKyM6IHF1aWNrZml4LmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzY6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIHByZWZpeCIKK21zZ3N0ciAiRTM3NjogTmVwcu1zdHVwbukgJSUlYyB2IHByZWZpeGUgZm9ybeF0b3ZhY2llaG8gcmW7YXpjYSIKKworIzogcXVpY2tmaXguYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6IE5lcHLtc3R1cG7pICUlJWMgdm8gZm9ybeF0b3ZhY29tIHJlu2F6Y2kiCisKKyM6IHF1aWNrZml4LmM6NDE0Cittc2dpZCAiRTM3ODogJ2Vycm9yZm9ybWF0JyBjb250YWlucyBubyBwYXR0ZXJuIgorbXNnc3RyICJFMzc4OiAnZXJyb3Jmb3JtYXQnIG5lb2JzYWh1amUgvmlhZG55IHZ6b3IiCisKKyM6IHF1aWNrZml4LmM6NTIwCittc2dpZCAiRTM3OTogTWlzc2luZyBvciBlbXB0eSBkaXJlY3RvcnkgbmFtZSIKK21zZ3N0ciAiRTM3OTogQ2j9YmFq+mNpIGFsZWJvIHBy4XpkbnkgbuF6b3YgYWRyZXPhcmEiCisKKyM6IHF1aWNrZml4LmM6OTMxCittc2dpZCAiTm8gbW9yZSBpdGVtcyIKK21zZ3N0ciAirmlhZG5lIO9hbLlpZSBwb2xvvmt5IgorCisjOiBxdWlja2ZpeC5jOjExNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCVkIG9mICVkKSVzJXM6ICIKK21zZ3N0ciAiKCVkLyVkKSVzJXM6ICIKKworIzogcXVpY2tmaXguYzoxMTU0Cittc2dpZCAiIChsaW5lIGRlbGV0ZWQpIgorbXNnc3RyICIgKHJpYWRvayB2eW1hemFu/SkiCisKKyM6IHF1aWNrZml4LmM6MTM2MAorbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDogS29uaWVjIHF1aWNrZml4IHpvem5hbXUiCisKKyM6IHF1aWNrZml4LmM6MTM2OQorbXNnaWQgIkUzODE6IEF0IHRvcCBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MTogWmHoaWF0b2sgcXVpY2tmaXggem96bmFtdSIKKworIzogcXVpY2tmaXguYzoxMzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAiem96bmFtIGNo/WIgJWQgeiAlZDsgcG/oZXQgY2j9YjogJWQiCisKKyM6IHF1aWNrZml4LmM6MTg0MgorbXNnaWQgIkUzODI6IENhbm5vdCB3cml0ZSwgJ2J1ZnR5cGUnIG9wdGlvbiBpcyBzZXQiCittc2dzdHIgIkUzODI6IE5lZOEgc2EgdWxvvmm7LCBqZSBuYXN0YXZlbuEgdm+1YmEgJ2J1ZnR5cGUnIgorCisjOiByZWdleHAuYzo4MDIKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiBWem9yIGplIHBy7WxpuSBkbGj9IgorCisjOiByZWdleHAuYzoxMzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTogTmVzdGVkICVzKiIKK21zZ3N0ciAiRTYxOiBWaG5pZXpkZW79ICVzKiIKKworIzogcmVnZXhwLmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI6IE5lc3RlZCAlcyVjIgorbXNnc3RyICJFNjI6IFZobmllemRlbukgJXMlYyIKKworIzogcmVnZXhwLmM6MTQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJFNjQ6ICVzJWMgZm9sbG93cyBub3RoaW5nIgorbXNnc3RyICJFNjQ6ICVzJWMgbmnoIG5lbmFzbGVkdWplIgorCisjOiByZWdleHAuYzoyNDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICJDaHliYSBzeW50YXhlIHYgJXN7Li4ufSIKKworIzogcmVnZXhwLmM6MjczNworbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiBaYWNoeXRlbukgcHJldGXoZW5pZSB64XNvYm7ta3U6IHBy7WxpuSB6bG++aXT9IHJlZ3Vs4XJueSB2/XJhej8iCisKKyM6IHJlZ2V4cC5jOjI4NzIKK21zZ2lkICJFMzYzOiBwYXR0ZXJuIGNhdXNlZCBvdXQtb2Ytc3RhY2sgZXJyb3IiCittc2dzdHIgIkUzNjM6IHZ6b3Igc3D0c29iaWwgcHJldGXoZW5pZSB64XNvYm7ta3UiCisKKyM6IHJlZ2V4cC5jOjMxMDgKK21zZ2lkICJFeHRlcm5hbCBzdWJtYXRjaGVzOlxuIgorbXNnc3RyICJWbvp0b3Ju6SBwb2RyYWRlbukgemhvZHk6XG4iCisKKyM6IHNjcmVlbi5jOjIwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0tJTNsZCBsaW5lcyBmb2xkZWQgIgorbXNnc3RyICIrLS0lM2xkIHJpYWRrb3YgemFobnV0/WNoICIKKworIzogc2NyZWVuLmM6NzUxNworbXNnaWQgIiBWUkVQTEFDRSIKK21zZ3N0ciAiIE5BSFJBREmrIFZFUlRJS8FMTkUiCisKKyM6IHNjcmVlbi5jOjc1MjEKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIE5BSFJBREmrIgorCisjOiBzY3JlZW4uYzo3NTI2Cittc2dpZCAiIFJFVkVSU0UiCittc2dzdHIgIiBPQlLBVEmrIgorCisjOiBzY3JlZW4uYzo3NTI4Cittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIFZMT65JqyIKKworIzogc2NyZWVuLmM6NzUzMQorbXNnaWQgIiAoaW5zZXJ0KSIKK21zZ3N0ciAiICh2bG++abspIgorCisjOiBzY3JlZW4uYzo3NTMzCittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiIChuYWhyYWRpuykiCisKKyM6IHNjcmVlbi5jOjc1MzUKK21zZ2lkICIgKHZyZXBsYWNlKSIKK21zZ3N0ciAiIChuYWhyYWRpuyB2ZXJ0aWvhbG5lKSIKKworIzogc2NyZWVuLmM6NzUzOAorbXNnaWQgIiBIZWJyZXciCittc2dzdHIgIiBoZWJyZWpza/0iCisKKyM6IHNjcmVlbi5jOjc1NDYKK21zZ2lkICIgKGxhbmcpIgorbXNnc3RyICIgKGphenlrKSIKKworIzogc2NyZWVuLmM6NzU0OQorbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKHZsb75puykiCisKKyM6IHNjcmVlbi5jOjc1NTUKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIgWkhPRFkiCisKKyM6IHNjcmVlbi5jOjc1NTcKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgVklaVcFMTkUiCisKKyM6IHNjcmVlbi5jOjc1NTkKK21zZ2lkICIgQkxPQ0siCittc2dzdHIgIiBCTE9LIgorCisjOiBzY3JlZW4uYzo3NTYxCittc2dpZCAiIExJTkUiCittc2dzdHIgIiBSSUFET0siCisKKyM6IHNjcmVlbi5jOjc1NzQgc2NyZWVuLmM6NzYzNAorbXNnaWQgInJlY29yZGluZyIKK21zZ3N0ciAibmFocuF2YW0iCisKKyM6IHNlYXJjaC5jOjM2Cittc2dpZCAic2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIgorbXNnc3RyICJotWFkYW5pZSBkb3NpYWhsbyB6YehpYXRvaywgcG9rcmHob3ZhbmllIG9kIGtvbmNhIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIKK21zZ3N0ciAiaLVhZGFuaWUgZG9zaWFobG8ga29uaWVjLCBwb2tyYehvdmFuaWUgb2QgemHoaWF0a3UiCisKKyM6IHNlYXJjaC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzgzOiBJbnZhbGlkIHNlYXJjaCBzdHJpbmc6ICVzIgorbXNnc3RyICJFMzgzOiBOZXBy7XN0dXBu/SBotWFkYW79IHJlu2F6ZWM6ICVzIgorCisjOiBzZWFyY2guYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg0OiBotWFkYW5pZSBkb3NpYWhsbyB6YehpYXRvayBiZXogbuFqZGVuaWEgJXMiCisKKyM6IHNlYXJjaC5jOjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg1OiBzZWFyY2ggaGl0IEJPVFRPTSB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODU6IGi1YWRhbmllIGRvc2lhaGxvIGtvbmllYyBiZXogbuFqZGVuaWEgJXMiCisKKyM6IHNlYXJjaC5jOjExNDQKK21zZ2lkICJFMzg2OiBFeHBlY3RlZCAnPycgb3IgJy8nICBhZnRlciAnOyciCittc2dzdHIgIkUzODY6IFBvICc7JyBv6GFr4XZhbSAnPycgYWxlYm8gJy8nIgorCisjOiBzZWFyY2guYzozNTIzCittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAodnLhdGFuZSB1viB2eXDtc2Fu/WNoIHpo9GQpIgorCisjLiBjdXJzb3IgYXQgc3RhdHVzIGxpbmUKKyM6IHNlYXJjaC5jOjM1NDMKK21zZ2lkICItLS0gSW5jbHVkZWQgZmlsZXMgIgorbXNnc3RyICItLS0gVmxvvmVu6SBz+mJvcnkiCisKKyM6IHNlYXJjaC5jOjM1NDUKK21zZ2lkICJub3QgZm91bmQgIgorbXNnc3RyICJuZW7hamRlbukgIgorCisjOiBzZWFyY2guYzozNTQ2Cittc2dpZCAiaW4gcGF0aCAtLS1cbiIKK21zZ3N0ciAidiBjZXN0ZSAtLS1cbiIKKworIzogc2VhcmNoLmM6MzU4NQorbXNnaWQgIiAgKEFscmVhZHkgbGlzdGVkKSIKK21zZ3N0ciAiICAoVb4gdnlw7XNhbukpIgorCisjOiBzZWFyY2guYzozNTg3Cittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiBORU7BSkRFTskiCisKKyM6IHNlYXJjaC5jOjM2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiCittc2dzdHIgIlByZWi1YWThdmFtIHZsb75lbukgc/pib3J5OiAlcyIKKworIzogc2VhcmNoLmM6Mzg1NworbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4NzogWmhvZGEgamUgbmEgYWt0deFsbm9tIHJpYWRrdSIKKworIzogc2VhcmNoLmM6Mzk5NworbXNnaWQgIkFsbCBpbmNsdWRlZCBmaWxlcyB3ZXJlIGZvdW5kIgorbXNnc3RyICJWuWV0a3kgdmxvvmVu6SBz+mJvcnkgYm9saSBu4WpkZW7pIgorCisjOiBzZWFyY2guYzozOTk5Cittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIq5pYWRuZSB2bG++ZW7pIHP6Ym9yeSIKKworIzogc2VhcmNoLmM6NDAxNQorbXNnaWQgIkUzODg6IENvdWxkbid0IGZpbmQgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRTM4ODogTmVk4SBzYSBu4WpzuyBkZWZpbu1jaWEiCisKKyM6IHNlYXJjaC5jOjQwMTcKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IE5lZOEgc2EgbuFqc7sgdnpvciIKKworIzogc3ludGF4LmM6Mjk5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkwOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTM5MDogTmVwcu1zdHVwbv0gYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzozMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTE6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkxOiBTeW50YWt0aWNr4SB6b3N0YXZhICVzIG5lZXhpc3R1amUiCisKKyM6IHN5bnRheC5jOjMzNDMKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgIlByZSB0ZW50byBidWZmZXIgbmllIHP6IGRlZmlub3ZhbukgvmlhZG5lIHBvbG++a3kgc3ludGF4ZSIKKworIzogc3ludGF4LmM6MzM1MQorbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAic3luY2hyb25penVqZW0ga29tZW504XJlIHYgQyC5dP1sZSIKKworIzogc3ludGF4LmM6MzM1OQorbXNnaWQgIm5vIHN5bmNpbmciCittc2dzdHIgIr5pYWRuZSBzeW5jaHJvbml64WNpZSIKKworIzogc3ludGF4LmM6MzM2MgorbXNnaWQgInN5bmNpbmcgc3RhcnRzICIKK21zZ3N0ciAic3luY2hyb25peuFjaWEgemHo7W5hICIKKworIzogc3ludGF4LmM6MzM2NCBzeW50YXguYzozNDM5Cittc2dpZCAiIGxpbmVzIGJlZm9yZSB0b3AgbGluZSIKK21zZ3N0ciAiIHJpYWRrb3YgcHJlZCB6YehpYXRrb20iCisKKyM6IHN5bnRheC5jOjMzNjkKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBQb2xvvmt5IHN5bmNocm9uaXrhY2llIHN5bnRheGUgLS0tIgorCisjOiBzeW50YXguYzozMzc0Cittc2dpZCAiIgorIlxuIgorInN5bmNpbmcgb24gaXRlbXMiCittc2dzdHIgIiIKKyJcbiIKKyJzeW5jaHJvbml6dWplbSBwb2xvvmt5IgorCisjOiBzeW50YXguYzozMzgwCittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFBvbG++a3kgc3ludGF4ZSAtLS0iCisKKyM6IHN5bnRheC5jOjM0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MjogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTI6IFN5bnRha3RpY2vhIHpvc3RhdmEgJXMgbmVleGlzdHVqZSIKKworIzogc3ludGF4LmM6MzQyOQorbXNnaWQgIm1pbmltYWwgIgorbXNnc3RyICJtaW5pbeFsbmUgIgorCisjOiBzeW50YXguYzozNDM2Cittc2dpZCAibWF4aW1hbCAiCittc2dzdHIgIm1heGlt4WxuZSAiCisKKyM6IHN5bnRheC5jOjM0NDgKK21zZ2lkICI7IG1hdGNoICIKK21zZ3N0ciAiOyB6aG9kYSAiCisKKyM6IHN5bnRheC5jOjM0NTAKK21zZ2lkICIgbGluZSBicmVha3MiCittc2dzdHIgIiByaWFka292IgorCisjOiBzeW50YXguYzo0MDc4Cittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzkzOiBncm91cFt0XWhlcmUgbmVzbWllIGJ5uyBuYSB0b210byBtaWVzdGUiCisKKyM6IHN5bnRheC5jOjQxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiBQcmUgJXMgY2j9YmEgcG9sb75rYSByZWdp8251IgorCisjOiBzeW50YXguYzo0MTMwCittc2dpZCAiRTM5NTogY29udGFpbnMgYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTU6IG9ic2FodWplIGFyZ3VtZW50eSwga3RvcukgdHUgbmllIHP6IHBvdm9sZW7pIgorCisjOiBzeW50YXguYzo0MTQxCittc2dpZCAiRTM5NjogY29udGFpbmVkaW4gYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTY6IG9ic2FodWplIGFyZ3VtZW50eSwga3RvcukgdHUgbmllIHP6IHBvdm9sZW7pIgorCisjOiBzeW50YXguYzo0MjE5Cittc2dpZCAiRTM5NzogRmlsZW5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUzOTc6IFZ5vmFkb3Zhbv0gbuF6b3Ygc/pib3J1IgorCisjOiBzeW50YXguYzo0NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODogQ2j9YmEgJz0nOiAlcyIKKworIzogc3ludGF4LmM6NDcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogUHLtbGm5IG3hbG8gYXJndW1lbnRvdjogb2JsYXO7IHN5bnRheGUgJXMiCisKKyM6IHN5bnRheC5jOjUwNDYKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDogTmVib2xhIHphZGFu4SC+aWFkbmEgem9zdGF2YSIKKworIzogc3ludGF4LmM6NTA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDAxOiBQYXR0ZXJuIGRlbGltaXRlciBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDAxOiBPZGRltW92YeggdnpvcnUgJXMgbmVu4WpkZW79IgorCisjOiBzeW50YXguYzo1MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDI6IEdhcmJhZ2UgYWZ0ZXIgcGF0dGVybjogJXMiCittc2dzdHIgIkU0MDI6IENoeWJhIHphIHZ6b3JvbSAlcyIKKworIzogc3ludGF4LmM6NTI0NQorbXNnaWQgIkU0MDM6IHN5bnRheCBzeW5jOiBsaW5lIGNvbnRpbnVhdGlvbnMgcGF0dGVybiBzcGVjaWZpZWQgdHdpY2UiCittc2dzdHIgIkU0MDM6IHN5bmNocm9uaXrhY2lhIHN5bnRheGU6IHZ6b3IgcG9rcmHob3ZhbmlhIHJpYWRrb3YgemFkYW79IGR2YWty4XQiCisKKyM6IHN5bnRheC5jOjUzMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNDogSWxsZWdhbCBhcmd1bWVudHM6ICVzIgorbXNnc3RyICJFNDA0OiBDaHlibukgYXJndW1lbnR5OiAlcyIKKworIzogc3ludGF4LmM6NTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiBDaP1iYSB6bmFtaWVua28gcm92buFzYTogJXMiCisKKyM6IHN5bnRheC5jOjUzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNjogRW1wdHkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDA2OiBQcuF6ZG55IGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6NTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA3OiAlcyBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNDA3OiAlcyB0dSBuaWUgamUgcG92b2xlbukiCisKKyM6IHN5bnRheC5jOjUzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwODogJXMgbXVzdCBiZSBmaXJzdCBpbiBjb250YWlucyBsaXN0IgorbXNnc3RyICJFNDA4OiAlcyBtdXPtIGJ5uyBwcnb9IHYgJ2NvbnRhaW5zJyB6b3puYW1lIgorCisjOiBzeW50YXguYzo1NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDk6IFVua25vd24gZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkU0MDk6IE5lem7hbXkgbuF6b3Ygc2t1cGlueTogJXMiCisKKyM6IHN5bnRheC5jOjU2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiBDaHlibv0gcG9kcmFkZW79IHBy7WtheiA6c3ludGF4IDogJXMgIgorCisjOiBzeW50YXguYzo2MDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTE6IGhpZ2hsaWdodCBncm91cCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDExOiBza3VwaW5hIHp27XJhem5lbmlhICVzIG5lYm9sYSBu4WpkZW7hIgorCisjOiBzeW50YXguYzo2MDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTI6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEyOiBQcu1sabkgbeFsbyBhcmd1bWVudG92OiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTM6IFRvbyBtYW55IGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMzogUHLtbGm5IG1ub2hvIGFyZ3VtZW50b3Y6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYxMjIKK21zZ2lkICJFNDE0OiBncm91cCBoYXMgc2V0dGluZ3MsIGhpZ2hsaWdodCBsaW5rIGlnbm9yZWQiCittc2dzdHIgIkU0MTQ6IHNrdXBpbmEgamUgbmFzdGF2ZW7hLCBvZGtheiBuYSB6dv1yYXryb3ZhY2l1IHNrdXBpbnUgaWdub3JvdmFu/SIKKworIzogc3ludGF4LmM6NjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE1OiB1bmV4cGVjdGVkIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE1OiBuZW/oYWvhdmFu6SB6bmFtaWVua28gcm92buFzYSA6ICVzIgorCisjOiBzeW50YXguYzo2Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IGNo/WJhIHpuYW1pZW5rbyByb3Zu4XNhOiAlcyIKKworIzogc3ludGF4LmM6NjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE3OiBtaXNzaW5nIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQxNzogY2j9YmEgYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzo2MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTg6IElsbGVnYWwgdmFsdWU6ICVzIgorbXNnc3RyICJFNDE4OiBOZXBy7XB1c3Ru4SBob2Rub3RhOiAlcyIKKworIzogc3ludGF4LmM6NjQ2NQorbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6IGZhcmJhIHBvcHJlZGlhIG5pZSBqZSB6buFtYSIKKworIzogc3ludGF4LmM6NjQ3NgorbXNnaWQgIkU0MjA6IEJHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MjA6IGZhcmJhIHBvemFkaWEgbmllIGplIHpu4W1hIgorCisjOiBzeW50YXguYzo2NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjE6IENvbG9yIG5hbWUgb3IgbnVtYmVyIG5vdCByZWNvZ25pemVkOiAlcyIKK21zZ3N0ciAiRTQyMTogTuF6b3YgYWxlYm8g6O1zbG8gZmFyYnkgJXMgbmVib2xvIHJvenBvem5hbukiCisKKyM6IHN5bnRheC5jOjY3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6IHRlcm1pbuFsb3b9IGvzZCAlcyBqZSBwcu1sabkgZGxo/SIKKworIzogc3ludGF4LmM6Njc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzogTmVwcu1zdHVwbv0gYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzo3MzIxCittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDogSmUgcG91vu12YW7pIHBy7WxpuSB2ZWxr6SBtbm++c3R2byBvZGxpuW79Y2ggenb9cmF68m92YWPtY2ggdmxhc3Rub3N07SIKKworIzogdGFnLmM6OTAKK21zZ2lkICJhdCBib3R0b20gb2YgdGFnIHN0YWNrIgorbXNnc3RyICJrb25pZWMgem96bmFtdSB0YWdvdiIKKworIzogdGFnLmM6OTEKK21zZ2lkICJhdCB0b3Agb2YgdGFnIHN0YWNrIgorbXNnc3RyICJ6YehpYXRvayB6b3puYW11IHRhZ292IgorCisjOiB0YWcuYzozOTIKK21zZ2lkICJFNDI1OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNTogTmVk4SBzYSBza2/oabsgcHJlZCBwcnb9IHZ5aG92dWr6Y2kgdGFnIgorCisjOiB0YWcuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6IHRhZyAlcyBuZW7hamRlbv0iCisKKyM6IHRhZy5jOjU0NQorbXNnaWQgIiAgIyBwcmkga2luZCB0YWciCittc2dzdHIgIiAgIyBwcmkgdGFnIgorCisjOiB0YWcuYzo1NDgKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgInP6Ym9yXG4iCisKKyMuCisjLiAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMuICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjOiB0YWcuYzo3MDYKK21zZ2lkICJFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOiAiCittc2dzdHIgIlphZGFqdGUg6O1zbG8gKDxDUj4gcHJlIHVrb27oZW5pZSk6ICIKKworIzogdGFnLmM6NzQ2Cittc2dpZCAiRTQyNzogVGhlcmUgaXMgb25seSBvbmUgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI3OiBWeWhvdnVqZSBpYmEgamVkZW4gdGFnIgorCisjOiB0YWcuYzo3NDgKK21zZ2lkICJFNDI4OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI4OiBaYSBwb3NsZWRu/SB2eWhvdnVq+mNpIHRhZyBzYSBuZWThIHByZXNrb+hpuyIKKworIzogdGFnLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJT+mJvciBcIiVzXCIgbmVleGlzdHVqZSIKKworIy4gR2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgdGFncworIzogdGFnLmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAlZCBvZiAlZCVzIgorbXNnc3RyICJ0YWcgJWQgeiBjZWxrb3bpaG8gcG/odHUgJWQlcyIKKworIzogdGFnLmM6NzgzCittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiBhbGVibyB2aWFjIgorCisjOiB0YWcuYzo3ODUKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiICBQb3W+7XZhbSB0YWcgcyBw7XNtb20gaW5laiB2ZbVrb3N0aSEiCisKKyM6IHRhZy5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTQyOTogU/pib3IgXCIlc1wiIG5lZXhpc3R1amUiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6ODk3Cittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyBDSUWlIHRhZyAgICAgICAgqVRBUlQgcmlhZG9rICB2IHP6Ym9yZS90ZXh0ZSIKKworIzogdGFnLmM6MTE0NAorbXNnaWQgIkxpbmVhciB0YWcgc2VhcmNoIgorbXNnc3RyICJMaW5l4XJuZSBotWFkYW5pZSB0YWd1IgorCisjOiB0YWcuYzoxMTQ2Cittc2dpZCAiQmluYXJ5IHRhZyBzZWFyY2giCittc2dzdHIgIkJpbuFybmUgaLVhZGFuaWUgdGFndSIKKworIzogdGFnLmM6MTE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICJQcmVotWFk4XZhbSBz+mJvciB0YWdvdiAlcyIKKworIzogdGFnLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMwOiBUYWcgZmlsZSBwYXRoIHRydW5jYXRlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRTQzMDogU/pib3IgdGFnb3YgJXMgYm9sIG9yZXphbv1cbiIKKworIzogdGFnLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogQ2h5YmEgZm9ybeF0dSB2IHP6Ym9yZSB0YWdvdiBcIiVzXCIiCisKKyM6IHRhZy5jOjE4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICJQcmVkIGJhanRvbSAlbGQiCisKKyM6IHRhZy5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMjogVGFncyBmaWxlIG5vdCBzb3J0ZWQ6ICVzIgorbXNnc3RyICJFNDMyOiBPYnNhaCBz+mJvcnUgdGFnb3YgJXMgbmllIGplIHpvcmFkZW79IgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MTkxMQorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzogrmlhZG55IHP6Ym9yIHRhZ292IgorCisjOiB0YWcuYzoyNTgzCittc2dpZCAiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIKK21zZ3N0ciAiRTQzNDogTmVk4SBzYSBu4WpzuyB2em9yIHRhZ292IgorCisjOiB0YWcuYzoyNTk0Cittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiBUYWcgc2EgbmVk4SBu4WpzuywgaWJhIGjhZGFtISIKKworIzogdGVybS5jOjE3MzcKK21zZ2lkICInIG5vdCBrbm93bi4gQXZhaWxhYmxlIGJ1aWx0aW4gdGVybWluYWxzIGFyZToiCittc2dzdHIgIicgbmllIGplIHpu4W15LiBEb3N0dXBu6SB2c3RhdmFu6SB0ZXJtaW7hbHk6IgorCisjOiB0ZXJtLmM6MTc2MQorbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAibmFzdGF2dWplbSBuYSAnIgorCisjOiB0ZXJtLmM6MjExNAorbXNnaWQgIkNhbm5vdCBvcGVuIHRlcm1jYXAgZmlsZSIKK21zZ3N0ciAiTmVk4SBzYSBvdHZvcmm7IHRlcm1jYXAgc/pib3IiCisKKyM6IHRlcm0uYzoyMTE3Cittc2dpZCAiVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1pbmZvIgorbXNnc3RyICJUZXJtaW5mbyBuZW9ic2FodWplIHBvbG++a3UgcHJlIHRlbnRvIHRlcm1pbuFsIgorCisjOiB0ZXJtLmM6MjExOQorbXNnaWQgIlRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJUZXJtY2FwIG5lb2JzYWh1amUgcG9sb75rdSBwcmUgdGVudG8gdGVybWlu4WwiCisKKyM6IHRlcm0uYzoyMjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzY6IE5vIFwiJXNcIiBlbnRyeSBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNDM2OiBUZXJtY2FwIG5lb2JzYWh1amUgcG9sb75rdSBwcmUgXCIlc1wiIgorCisjOiB0ZXJtLmM6Mjc1MgorbXNnaWQgIkU0Mzc6IHRlcm1pbmFsIGNhcGFiaWxpdHkgXCJjbVwiIHJlcXVpcmVkIgorbXNnc3RyICJFNDM3OiBUZXJtaW7hbCBtdXPtIG1huyBcImNtXCIgc2Nob3Bub3O7IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0ODkxCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBLbOF2ZXN5IHRlcm1pbuFsdSAtLS0iCisKKyM6IHVpLmM6MjUxCittc2dpZCAibmV3IHNoZWxsIHN0YXJ0ZWRcbiIKK21zZ3N0ciAic3B1c3Rlbv0gbm92/SBzaGVsbFxuIgorCisjOiB1aS5jOjE3NDcKK21zZ2lkICJWaW06IEVycm9yIHJlYWRpbmcgaW5wdXQsIGV4aXRpbmcuLi5cbiIKK21zZ3N0ciAiVmltOiBDaHliYSBwcmkg6O10YW7tIHZzdHVwdSwga29u6O1tLi4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6MzgzCittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICJPZHN0cuFuZW5pZSB6bWllbiBuaWUgamUgbW++buk7IGNoY2V0ZSBuYXByaWVrIHRvbXUgcG9rcmHob3ZhuyIKKworIzogdW5kby5jOjUzOAorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IOjtc2xhIHJpYWRrb3Ygc/ogY2h5Ym7pIgorCisjOiB1bmRvLmM6NzA3Cittc2dpZCAiMSBjaGFuZ2UiCittc2dzdHIgInBv6GV0IHptaWVuOiAxIgorCisjOiB1bmRvLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFuZ2VzIgorbXNnc3RyICJwb+hldCB6bWllbjogJWxkIgorCisjOiB1bmRvLmM6NzUzCittc2dpZCAiRTQzOTogdW5kbyBsaXN0IGNvcnJ1cHQiCittc2dzdHIgIkU0Mzk6IHrhem5hbSBvIHptZW7hY2ggcG+5a29kZW79IgorCisjOiB1bmRvLmM6Nzg1Cittc2dpZCAiRTQ0MDogdW5kbyBsaW5lIG1pc3NpbmciCittc2dzdHIgIkU0NDA6IGNo/WJhIHJpYWRvayBzcOS7IgorCisjLiBPbmx5IE1TIFZDIDQuMSBhbmQgZWFybGllciBjYW4gZG8gV2luMzJzCisjOiB2ZXJzaW9uLmM6NzI1Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYvMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMTYvMzIgYml0b3bhIEdVSSB2ZXJ6aWEgcHJlIE1TIFdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzo3MjcKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMiBiaXRvduEgR1VJIHZlcnppYSBwcmUgTVMgV2luZG93cyIKKworIzogdmVyc2lvbi5jOjczMAorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiIHYgV2luMzIgcmW+aW1lIgorCisjOiB2ZXJzaW9uLmM6NzMyCittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIiBzIE9MRSBwb2Rwb3JvdSIKKworIzogdmVyc2lvbi5jOjczNQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBjb25zb2xlIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMiBiaXRvduEgdmVyemlhIHByZSBNUyBXaW5kb3dzIGtvbnpvbHUiCisKKyM6IHZlcnNpb24uYzo3MzkKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNiBiaXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2IGJpdG924SB2ZXJ6aWEgcHJlIE1TIFdpbmRvd3MiCisKKyM6IHZlcnNpb24uYzo3NDMKK21zZ2lkICIiCisiXG4iCisiMzIgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzIgYml0b3bhIHZlcnppYSBwcmUgTVMtRE9TIgorCisjOiB2ZXJzaW9uLmM6NzQ1Cittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2IGJpdG924SBNUy1ET1MgdmVyemlhIgorCisjOiB2ZXJzaW9uLmM6NzUxCittc2dpZCAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB2ZXJ6aWEiCisKKyM6IHZlcnNpb24uYzo3NTMKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgWCB2ZXJ6aWEiCisKKyM6IHZlcnNpb24uYzo3NTYKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIHZlcnppYSIKKworIzogdmVyc2lvbi5jOjc2MQorbXNnaWQgIiIKKyJcbiIKKyJSSVNDIE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJSSVNDIE9TIHZlcnppYSIKKworIzogdmVyc2lvbi5jOjc3MQorbXNnaWQgIiIKKyJcbiIKKyJJbmNsdWRlZCBwYXRjaGVzOiAiCittc2dzdHIgIiIKKyJcbiIKKyJQb3W+aXTpIHrhcGxhdHk6ICIKKworIzogdmVyc2lvbi5jOjc5NyB2ZXJzaW9uLmM6MTEzMgorbXNnaWQgIk1vZGlmaWVkIGJ5ICIKK21zZ3N0ciAiWm1lbmlsICIKKworIzogdmVyc2lvbi5jOjgwNAorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyJQcmVsb75lbuEgIgorCisjOiB2ZXJzaW9uLmM6ODA3Cittc2dpZCAiYnkgIgorbXNnc3RyICIgIgorCisjOiB2ZXJzaW9uLmM6ODE5Cittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJNYXhpbeFsbmEgdmVyemlhIgorCisjOiB2ZXJzaW9uLmM6ODIyCittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlZltWvhIHZlcnppYSAiCisKKyM6IHZlcnNpb24uYzo4MjUKK21zZ2lkICIiCisiXG4iCisiTm9ybWFsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiTm9ybeFsbmEgdmVyemlhIgorCisjOiB2ZXJzaW9uLmM6ODI4Cittc2dpZCAiIgorIlxuIgorIlNtYWxsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiTWFs4SB2ZXJ6aWEgIgorCisjOiB2ZXJzaW9uLmM6ODMwCittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJNaW5pbeFsbmEgdmVyemlhICIKKworIzogdmVyc2lvbi5jOjgzNgorbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAiYmV6IGdyYWZpY2vpaG8gcm96aHJhbmlhLiIKKworIzogdmVyc2lvbi5jOjg0MAorbXNnaWQgIndpdGggR1RLLUdOT01FIEdVSS4iCittc2dzdHIgInMgcm96aHJhbu1tIEdUSy1HTk9NRS4iCisKKyM6IHZlcnNpb24uYzo4NDIKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBHVEsuIgorCisjOiB2ZXJzaW9uLmM6ODQ2Cittc2dpZCAid2l0aCBYMTEtTW90aWYgR1VJLiIKK21zZ3N0ciAicyByb3pocmFu7W0gWDExLU1vdGlmLiIKKworIzogdmVyc2lvbi5jOjg0OQorbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBYMTEtQXRoZW5hLiIKKworIzogdmVyc2lvbi5jOjg1MgorbXNnaWQgIndpdGggQmVPUyBHVUkuIgorbXNnc3RyICJzIHJvemhyYW7tbSBCZU9TLiIKKworIzogdmVyc2lvbi5jOjg1NQorbXNnaWQgIndpdGggUGhvdG9uIEdVSS4iCittc2dzdHIgInMgcm96aHJhbu1tIFBob3Rvbi4iCisKKyM6IHZlcnNpb24uYzo4NTgKK21zZ2lkICJ3aXRoIEdVSS4iCittc2dzdHIgInMgZ3JhZmlja/1tIHJvemhyYW7tbS4iCisKKyM6IHZlcnNpb24uYzo4NjEKK21zZ2lkICJ3aXRoIENhcmJvbiBHVUkuIgorbXNnc3RyICJzIENhcmJvbiBncmFmaWNr/W0gcm96aHJhbu1tLiIKKworIzogdmVyc2lvbi5jOjg2NAorbXNnaWQgIndpdGggQ29jb2EgR1VJLiIKK21zZ3N0ciAicyBDb2NvYSBncmFmaWNr/W0gcm96aHJhbu1tLiIKKworIzogdmVyc2lvbi5jOjg2NworbXNnaWQgIndpdGggKGNsYXNzaWMpIEdVSS4iCittc2dzdHIgInMgKGtsYXNpY2v9bSkgZ3JhZmlja/1tIHJvemhyYW7tbS4iCisKKyM6IHZlcnNpb24uYzo4NzgKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIgIFZsYXN0bm9zdGkgemFocm51dOkgKCspIGEgbmV6YWhybnV06SAoLSk6XG4iCisKKyM6IHZlcnNpb24uYzo4OTAKK21zZ2lkICIgICBzeXN0ZW0gdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgIHN5c3TpbW92/SB2aW1yYyBz+mJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo4OTUKK21zZ2lkICIgICAgIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgdb7tdmF0ZbVza/0gdmltcmMgc/pib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTAwCittc2dpZCAiIDJuZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgZHJ1aP0gdb7tdmF0ZbVza/0gdmltcmMgc/pib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTA1Cittc2dpZCAiIDNyZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgdHJldO0gdb7tdmF0ZbVza/0gdmltcmMgc/pib3I6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTEwCittc2dpZCAiICAgICAgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICB1vu12YXRltXNr/SBleHJjIHP6Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjkxNQorbXNnaWQgIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICBkcnVo/SB1vu12YXRltXNr/SBleHJjIHP6Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjkyMQorbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICBzeXN06W1vdv0gZ3ZpbXJjIHP6Ym9yOiBcIiIKKworIzogdmVyc2lvbi5jOjkyNQorbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIHW+7XZhdGW1c2v9IGd2aW1yYyBz+mJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo5MjkKK21zZ2lkICIybmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgImRydWj9IHW+7XZhdGW1c2v9IGd2aW1yYyBz+mJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo5MzQKK21zZ2lkICIzcmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgInRyZXTtIHW+7XZhdGW1c2v9IGd2aW1yYyBz+mJvcjogXCIiCisKKyM6IHZlcnNpb24uYzo5NDEKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiAgICBzeXN06W1vdv0gc/pib3IgcyBwb251a291OiBcIiIKKworIzogdmVyc2lvbi5jOjk0OQorbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICBpbXBsaWNpdG7hIGhvZG5vdGEgJFZJTTpcIiIKKworIzogdmVyc2lvbi5jOjk1NQorbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiIGYtYiBwcmUgJFZJTVJVTlRJTUU6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTU5Cittc2dpZCAiQ29tcGlsYXRpb246ICIKK21zZ3N0ciAiUHJla2xhZDogIgorCisjOiB2ZXJzaW9uLmM6OTY1Cittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAiUHJla2xhZGHoOiAiCisKKyM6IHZlcnNpb24uYzo5NzAKK21zZ2lkICJMaW5raW5nOiAiCittc2dzdHIgIkxpbmt1amVtOiAiCisKKyM6IHZlcnNpb24uYzo5NzUKK21zZ2lkICIgIERFQlVHIEJVSUxEIgorbXNnc3RyICIgIFBPRFBPUkEgTEFERU5JQSIKKworIzogdmVyc2lvbi5jOjEwMTEKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVmkgSU1wcmV2ZWQiCisKKyM6IHZlcnNpb24uYzoxMDEzCittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgInZlcnppYSAiCisKKyM6IHZlcnNpb24uYzoxMDE0Cittc2dpZCAiYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorbXNnc3RyICJBdXRvcjogQnJhbSBNb29sZW5hYXIgYSDvYWy57SIKKworIzogdmVyc2lvbi5jOjEwMTgKK21zZ2lkICJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIgorbXNnc3RyICJWaW0gamUgdm+1bmUgue1yaXRltW79IHByb2dyYW0iCisKKyM6IHZlcnNpb24uYzoxMDIwCittc2dpZCAiSGVscCBwb29yIGNoaWxkcmVuIGluIFVnYW5kYSEiCittc2dzdHIgIlBvbfS+dGUgY2h1ZG9ibv1tIGRlu29tIHYgVWdhbmRlISIKKworIzogdmVyc2lvbi5jOjEwMjEKK21zZ2lkICJ0eXBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICJwb2Ryb2JuZWq5aWUgaW5mb3Jt4WNpZSB67XNrYXRlIHBvbW9jb3UgOmhlbHAgaWNjZjxFbnRlcj4iCisKKyM6IHZlcnNpb24uYzoxMDIzCittc2dpZCAidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIKK21zZ3N0ciAiemFkYWp0ZSA6cTxFbnRlcj4gICAgICAgICAgICAgcHJlIHVrb27oZW5pZSBwcm9ncmFtdSIKKworIzogdmVyc2lvbi5jOjEwMjQKK21zZ2lkICJ0eXBlICA6aGVscDxFbnRlcj4gIG9yICA8RjE+ICBmb3Igb24tbGluZSBoZWxwIgorbXNnc3RyICJ6YWRhanRlIDpoZWxwPEVudGVyPiAgYWxlYm8gPEYxPiBwcmUgcG9tb2Nu7WthIgorCisjOiB2ZXJzaW9uLmM6MTAyNQorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgInphZGFqdGUgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICBwcmUgaW5mb3Jt4WNpZSBvIHZlcnppaSIKKworIzogdmVyc2lvbi5jOjEwMjgKK21zZ2lkICJSdW5uaW5nIGluIFZpIGNvbXBhdGlibGUgbW9kZSIKK21zZ3N0ciAiQmW+7W0gdiByZb5pbWUga29tcGF0aWJpbGl0eSBzIFZpIgorCisjOiB2ZXJzaW9uLmM6MTAyOQorbXNnaWQgInR5cGUgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIGZvciBWaW0gZGVmYXVsdHMiCittc2dzdHIgInphZGFqdGUgOnNldCBub2NwPEVudGVyPiAgICAgcHJlIGltcGxpY2l0bukgbmFzdGF2ZW5pZSBWaW0iCisKKyM6IHZlcnNpb24uYzoxMDMwCittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAicG9kcm9ibmVquWllIGluZm9ybeFjaWUgeu1za2F0ZSBwb21vY291IDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6MTA0NQorbXNnaWQgIm1lbnUgIEhlbHAtPk9ycGhhbnMgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgImJsab65aWUgaW5mb3Jt4WNpZSB2IG1lbnUgIFBvbW9jbu1rLT5TYW1vc3RhdG7pIgorCisjOiB2ZXJzaW9uLmM6MTA0NworbXNnaWQgIlJ1bm5pbmcgbW9kZWxlc3MsIHR5cGVkIHRleHQgaXMgaW5zZXJ0ZWQiCittc2dzdHIgIlNw+rm7YW0gbW9kZWxlc3MsIHDtc2Fu/SB0ZXh0IGplIHZsb75lbv0iCisKKyM6IHZlcnNpb24uYzoxMDQ4Cittc2dpZCAibWVudSAgRWRpdC0+R2xvYmFsIFNldHRpbmdzLT5Ub2dnbGUgSW5zZXJ0IE1vZGUgICIKK21zZ3N0ciAibWVudSDacHJhdnktPkdsb2LhbG5lIG1vvm5vc3RpLT5QcmVwbvq7IHJlvmltIHZsb75lbmlhICIKKworIzogdmVyc2lvbi5jOjEwNDkKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHdvIG1vZGVzICAgICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlIGR2YSByZb5pbXkgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTA1MworbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIFZpIENvbXBhdGlibGUiCittc2dzdHIgIm1lbnUg2nByYXZ5LT5HbG9i4WxuZSBtb75ub3N0dC0+UHJlcG76uyBWaSBrb21wYXRpYmlsbv0gcmW+7W0iCisKKyM6IHZlcnNpb24uYzoxMDU0Cittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICBwcmUgcHJlZHZvbGVu6SB2bGFzdG5vc3RpIFZpbSAgICIKKworIzogdmVyc2lvbi5jOjExMDAKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICJWQVJPVkFOSUU6IGRldGVrb3ZhbukgV2luZG93cyA5NS85OC9NRSIKKworIzogdmVyc2lvbi5jOjExMDMKK21zZ2lkICJ0eXBlICA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJ6YWRhanRlIDpoZWxwIHdpbmRvd3M5NTxFbnRlcj4gcHJlIHBvZHJvYm5larlpZSBpbmZvcm3hY2llIgorCisjOiB3aW5kb3cuYzoyMDEKK21zZ2lkICJFNDQxOiBUaGVyZSBpcyBubyBwcmV2aWV3IHdpbmRvdyIKK21zZ3N0ciAiRTQ0MTogTmVu4WpkZW7pIL5pYWRuZSBva25vIG7haLVhZHUiCisKKyM6IHdpbmRvdy5jOjU4MAorbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IE9rbm8gc2EgbmVk4SByb3pkZWxpuyB64XJvdmXyIHRvcGxlZnQgYSBib3RyaWdodCIKKworIzogd2luZG93LmM6MTMzOQorbXNnaWQgIkU0NDM6IENhbm5vdCByb3RhdGUgd2hlbiBhbm90aGVyIHdpbmRvdyBpcyBzcGxpdCIKK21zZ3N0ciAiRTQ0MzogTmVk4SBzYSByb3RvdmG7LCBhayBqZSBpbukgb2tubyByb3pkZWxlbukiCisKKyM6IHdpbmRvdy5jOjE4NDEKK21zZ2lkICJFNDQ0OiBDYW5ub3QgY2xvc2UgbGFzdCB3aW5kb3ciCittc2dzdHIgIkU0NDQ6IFBvc2xlZG7pIG9rbm8gc2EgbmVk4SB6YXR2b3JpuyIKKworIzogd2luZG93LmM6MjUwNQorbXNnaWQgIkFscmVhZHkgb25seSBvbmUgd2luZG93IgorbXNnc3RyICJVviBleGlzdHVqZSBpYmEgamVkbm8gb2tubyIKKworIzogd2luZG93LmM6MjU1MgorbXNnaWQgIkU0NDU6IE90aGVyIHdpbmRvdyBjb250YWlucyBjaGFuZ2VzIgorbXNnc3RyICJFNDQ1OiBJbukgb2tubyBvYnNhaHVqZSB6bWVueSIKKworIzogd2luZG93LmM6NDM3OQorbXNnaWQgIkU0NDY6IE5vIGZpbGUgbmFtZSB1bmRlciBjdXJzb3IiCittc2dzdHIgIkU0NDY6IFBvZCBrdXJ6b3JvbSBzYSBuZW5hY2jhZHphIG7hem92IHP6Ym9ydSIKKworIzogd2luZG93LmM6NDQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ3OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkU0NDc6IFP6Ym9yIFwiJXNcIiBzYSBuZWThIHYgY2RwYXRoIG7hanO7IgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjU4NgorbXNnaWQgIkVkaXQgd2l0aCAmbXVsdGlwbGUgVmltcyIKK21zZ3N0ciAiVXByYXZpuyBzIHZpYWNu4XNvYm79Jm0gVmltb20iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NTkyCittc2dpZCAiRWRpdCB3aXRoIHNpbmdsZSAmVmltIgorbXNnc3RyICJVcHJhdmm7IHMgamVkbv1tICZWaW1vbSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo2MDQKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAiVXByYXZpuyBzICZWaW1vbSIKKworIy4gTm93IGNvbmNhdGVuYXRlCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjYyOAorbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICJVcHJhdmm7IHMgZXhpc3R1avpjaW0gVmltb20gLSAmIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjc1MgorbXNnaWQgIkVkaXRzIHRoZSBzZWxlY3RlZCBmaWxlKHMpIHdpdGggVmltIgorbXNnc3RyICJVcHJhdmm7IHZ5YnJhbukgc/pib3J5IHMgVmltb20iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6ODkxIC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY5Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcHJvY2VzczogQ2hlY2sgaWYgZ3ZpbSBpcyBpbiB5b3VyIHBhdGghIgorbXNnc3RyICJDaHliYSB2eXR24XJhY2llaG8gcHJvY2VzdTogU2tvbnRyb2x1anRlLCDoaSBqZSBndmltIHZvIHZhuWVqIGNlc3RlISIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTIgLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDYKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTcwCittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgImNoeWJhIGd2aW1leHQuZGxsIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjkwNQorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAiUHLtbGm5IGRsaOEgY2VzdGEhIgorCisjOiBnbG9iYWxzLmg6OTAwCittc2dpZCAiLS1ObyBsaW5lcyBpbiBidWZmZXItLSIKK21zZ3N0ciAiLS1CdWZmZXIgbmVvYnNhaHVqZSC+aWFkbnkgcmlhZG9rLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTA0MgorbXNnaWQgIkNvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiUHLta2F6IHByZXJ1uWVu/SIKKworIzogZ2xvYmFscy5oOjEwNDMKK21zZ2lkICJBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAiSmUgdnm+YWRvdmFu/SBhcmd1bWVudCIKKworIzogZ2xvYmFscy5oOjEwNDQKK21zZ2lkICJFMTA6IFxcIHNob3VsZCBiZSBmb2xsb3dlZCBieSAvLCA/IG9yICYiCittc2dzdHIgIkUxMDogcG8gXFwgYnkgbWFsbyBuYXNsZWRvdmG7IC8uID8gYWxlYm8gJiIKKworIzogZ2xvYmFscy5oOjEwNDYKK21zZ2lkICJFMTE6IEludmFsaWQgaW4gY29tbWFuZC1saW5lIHdpbmRvdzsgPENSPiBleGVjdXRlcywgQ1RSTC1DIHF1aXRzIgorbXNnc3RyICIiCisiRTExOiBDaHlibv0gcHLta2F6IHYgb2tuZSBwcu1rYXpvdulobyByaWFka3U7IDxFbnRlcj4gc3B1c3TtdGUsIENUUkwtQyAiCisidnlwbmV0ZSIKKworIzogZ2xvYmFscy5oOjEwNDgKK21zZ2lkICJFMTI6IENvbW1hbmQgbm90IGFsbG93ZWQgZnJvbSBleHJjL3ZpbXJjIGluIGN1cnJlbnQgZGlyIG9yIHRhZyBzZWFyY2giCittc2dzdHIgIiIKKyJFMTI6IFBy7WtheiBuaWUgamUgeiBleHJjL3ZpbXJjIHYgYWt0deFsbm9tIGFkcmVz4XJpIGFsZWJvIHByaSBotWFkYW7tIHRhZ3UgIgorInBvdm9sZW79LiIKKworIzogZ2xvYmFscy5oOjEwNDkKK21zZ2lkICJFMTM6IEZpbGUgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxMzogU/pib3IgZXhpc3R1amUgKHBvdb5pdGUgISBwcmUgdnlu+nRlbmllKSIKKworIzogZ2xvYmFscy5oOjEwNTAKK21zZ2lkICJDb21tYW5kIGZhaWxlZCIKK21zZ3N0ciAiUHLta2F6IHpseWhhbCIKKworIzogZ2xvYmFscy5oOjEwNTEKK21zZ2lkICJJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiVm76dG9ybuEgY2h5YmEiCisKKyM6IGdsb2JhbHMuaDoxMDUyCittc2dpZCAiSW50ZXJydXB0ZWQiCittc2dzdHIgIlByZXJ1uWVu6SIKKworIzogZ2xvYmFscy5oOjEwNTMKK21zZ2lkICJFMTQ6IEludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiRTE0OiBDaHlibuEgYWRyZXNhIgorCisjOiBnbG9iYWxzLmg6MTA1NAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkNoeWJu/SBhcmd1bWVudCIKKworIzogZ2xvYmFscy5oOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBhcmd1bWVudDogJXMiCittc2dzdHIgIkNoeWJu/SBhcmd1bWVudDogJXMiCisKKyM6IGdsb2JhbHMuaDoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTogSW52YWxpZCBleHByZXNzaW9uOiAlcyIKK21zZ3N0ciAiRTE1OiBDaHlibv0gdv1yYXo6ICVzIgorCisjOiBnbG9iYWxzLmg6MTA1OQorbXNnaWQgIkUxNjogSW52YWxpZCByYW5nZSIKK21zZ3N0ciAiRTE2OiBDaHlibv0gcm96c2FoIgorCisjOiBnbG9iYWxzLmg6MTA2MAorbXNnaWQgIkludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAiQ2h5Ym79IHBy7WtheiIKKworIzogZ2xvYmFscy5oOjEwNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3OiBcIiVzXCIgaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIkUxNzogXCIlc1wiIGplIGFkcmVz4XJvbSIKKworIzogZ2xvYmFscy5oOjEwNjUKK21zZ2lkICJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIgorbXNnc3RyICJFMTg6IE5lb+hla+F2YW7pIHpuYWt5IHByZWQgJz0nIgorCisjOiBnbG9iYWxzLmg6MTA2NworbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiBabmHoa2EgbeEgY2h5Ym7pIOjtc2xvIHJpYWRrdSIKKworIzogZ2xvYmFscy5oOjEwNjgKK21zZ2lkICJFMjA6IE1hcmsgbm90IHNldCIKK21zZ3N0ciAiRTIwOiBabmHoa2EgbmllIGplIG5hc3RhdmVu4SIKKworIzogZ2xvYmFscy5oOjEwNjkKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTogTmVk4SBzYSBtZW5puywgamUgbmFzdGF2ZW7hIHZvtWJhICdtb2RpZmlhYmxlJyIKKworIzogZ2xvYmFscy5oOjEwNzAKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IFNrcmlwdCB2bm9yZW79IHBy7WxpuSBobGJva28iCisKKyM6IGdsb2JhbHMuaDoxMDcxCittc2dpZCAiRTIzOiBObyBhbHRlcm5hdGUgZmlsZSIKK21zZ3N0ciAiRTIzOiCuaWFkbnkgYWx0ZXJuYXTtdm55IHP6Ym9yIgorCisjOiBnbG9iYWxzLmg6MTA3MgorbXNnaWQgIkUyNDogTm8gc3VjaCBhYmJyZXZpYXRpb24iCittc2dzdHIgIkUyNDogVGFr4SBza3JhdGthIG5lZXhpc3R1amUiCisKKyM6IGdsb2JhbHMuaDoxMDczCittc2dpZCAiTm8gISBhbGxvd2VkIgorbXNnc3RyICIhIG5pZSBqZSBwb3ZvbGVu6SIKKworIzogZ2xvYmFscy5oOjEwNzUKK21zZ2lkICJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICJFMjU6IE5lZOEgc2EgcG91vu27IEdVSTogbmVib2xvIHphcG51dOkgcHJpIHByZWtsYWRlIHByb2dyYW11IgorCisjOiBnbG9iYWxzLmg6MTA3OAorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI2OiBOZWThIHNhIHBvdb7tuyBoZWJyZWpza/0gcmW+aW06ICBuZWJvbCB6YXBudXT9IHByaSBwcmVrbGFkZSBwcm9ncmFtdVxuIgorCisjOiBnbG9iYWxzLmg6MTA4MQorbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjc6IE5lZOEgc2EgcG91vu27IGZhcnNpIHJlvmltOiAgbmVib2wgemFwbnV0/SBwcmkgcHJla2xhZGUgcHJvZ3JhbXVcbiIKKworIzogZ2xvYmFscy5oOjEwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBTa3VwaW5hIHp27XJhem5lbmlhICVzIG5lZXhpc3R1amUiCisKKyM6IGdsb2JhbHMuaDoxMDg2Cittc2dpZCAiRTI5OiBObyBpbnNlcnRlZCB0ZXh0IHlldCIKK21zZ3N0ciAiRTI5OiBaYXRpYbUgbmllIGplIL5pYWRueSB2bG++ZW79IHRleHQiCisKKyM6IGdsb2JhbHMuaDoxMDg3Cittc2dpZCAiRTMwOiBObyBwcmV2aW91cyBjb21tYW5kIGxpbmUiCittc2dzdHIgIkUzMDogrmlhZG55IHByZWRjaOFkemFq+mNpIHBy7Wthem92/SByaWFkb2siCisKKyM6IGdsb2JhbHMuaDoxMDg4Cittc2dpZCAiRTMxOiBObyBzdWNoIG1hcHBpbmciCittc2dzdHIgIkUzMTogrmlhZG5lIHRha+kgbWFwb3ZhbmllIgorCisjOiBnbG9iYWxzLmg6MTA4OQorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICKuaWFkbmEgemhvZGEiCisKKyM6IGdsb2JhbHMuaDoxMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoOiAlcyIKK21zZ3N0ciAirmlhZG5hIHpob2RhOiAlcyIKKworIzogZ2xvYmFscy5oOjEwOTEKK21zZ2lkICJFMzI6IE5vIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTMyOiCuaWFkbnkgbuF6b3Ygc/pib3J1IgorCisjOiBnbG9iYWxzLmg6MTA5MgorbXNnaWQgIkUzMzogTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzMzogrmlhZG55IHByZWRjaOFkemFq+mNpIHByaXNs+mNoYWr6Y2kgc3By4XZueSB2/XJheiIKKworIzogZ2xvYmFscy5oOjEwOTMKK21zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCittc2dzdHIgIkUzNDogrmlhZG55IHByZWRjaOFkemFq+mNpIHBy7WtheiIKKworIzogZ2xvYmFscy5oOjEwOTQKK21zZ2lkICJFMzU6IE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTM1OiCuaWFkbnkgcHJlZGNo4WR6YWr6Y2kgcmVndWzhcm55IHb9cmF6IgorCisjOiBnbG9iYWxzLmg6MTA5NQorbXNnaWQgIk5vIHJhbmdlIGFsbG93ZWQiCittc2dzdHIgIlJvenNhaCBuaWUgamUgcG92b2xlbv0iCisKKyM6IGdsb2JhbHMuaDoxMDk3Cittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjogTmVkb3N0YXRvayBtaWVzdGEiCisKKyM6IGdsb2JhbHMuaDoxMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJOZWThIHNhIHZ5dHZvcmm7IHP6Ym9yICVzIgorCisjOiBnbG9iYWxzLmg6MTEwMAorbXNnaWQgIkNhbid0IGdldCB0ZW1wIGZpbGUgbmFtZSIKK21zZ3N0ciAiTmVk4SBzYSB67XNrYbsgbuF6b3YgZG/oYXNu6WhvIHP6Ym9ydSIKKworIzogZ2xvYmFscy5oOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJOZWThIHNhIG90dm9yabsgc/pib3IgJXMiCisKKyM6IGdsb2JhbHMuaDoxMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHJlYWQgZmlsZSAlcyIKK21zZ3N0ciAiTmVk4SBzYSDo7XRhuyBz+mJvciAlcyIKKworIzogZ2xvYmFscy5oOjExMDMKK21zZ2lkICJFMzc6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUzNzogTmV1bG++ZW7pIHptZW55IChwb3W+aXRlICEgcHJlIHZ5bvp0ZW5pZSkiCisKKyM6IGdsb2JhbHMuaDoxMTA0Cittc2dpZCAiRTM4OiBOdWxsIGFyZ3VtZW50IgorbXNnc3RyICJFMzg6IE51bG92/SBhcmd1bWVudCIKKworIzogZ2xvYmFscy5oOjExMDYKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiBP6GFr4XZhbukg6O1zbG8iCisKKyM6IGdsb2JhbHMuaDoxMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDogTmVk4SBzYSBvdHZvcmm7IGNoeWJvdv0gc/pib3IgJXMiCisKKyM6IGdsb2JhbHMuaDoxMTEyCittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiBOZWRvc3RhdG9rIHBhbeR0aSEiCisKKyM6IGdsb2JhbHMuaDoxMTE1Cittc2dpZCAiUGF0dGVybiBub3QgZm91bmQiCittc2dzdHIgIlZ6b3IgbmVu4WpkZW79IgorCisjOiBnbG9iYWxzLmg6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIlZ6b3IgbmVu4WpkZW79OiAlcyIKKworIzogZ2xvYmFscy5oOjExMTgKK21zZ2lkICJBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJBcmd1bWVudCBtdXPtIGJ5uyBrbGFkbv0iCisKKyM6IGdsb2JhbHMuaDoxMTIwCittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0MjogrmlhZG5lIGNoeWJ5IgorCisjOiBnbG9iYWxzLmg6MTEyMgorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0MzogUG+5a29kZW79IHJlu2F6YWMgcHJlIHZ5aLVhZOF2YW5pZSIKKworIzogZ2xvYmFscy5oOjExMjMKK21zZ2lkICJFNDQ6IENvcnJ1cHRlZCByZWdleHAgcHJvZ3JhbSIKK21zZ3N0ciAiRTQ0OiBQb7lrb2Rlbv0gcmVnZXhwIHByb2dyYW0iCisKKyM6IGdsb2JhbHMuaDoxMTI0Cittc2dpZCAiRTQ1OiAncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ1OiBuYXN0YXZlbuEgdm+1YmEgJ2liYV9wcmVf6O10YW5pZScgKHBvdb5pdGUgISBwcmUgdnlu+nRlbmllKSIKKworIzogZ2xvYmFscy5oOjExMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiCittc2dzdHIgIkU0NjogTmVk4SBzYSBuYXN0YXZpuyBwcmVtZW5u4SBpYmFfcHJlX+jtdGFuaWUgXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTEyOQorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0NzogQ2h5YmEgcHJpIOjtdGFu7SBjaHlib3bpaG8gc/pib3J1IgorCisjOiBnbG9iYWxzLmg6MTEzMgorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiBOaWUgamUgdiBiZXpwZehub3N0bmVqIHNjaHLhbmtlIHBvdm9sZW7pIgorCisjOiBnbG9iYWxzLmg6MTEzNAorbXNnaWQgIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIKK21zZ3N0ciAiRTQ5OiBDaHlibuEgaG9kbm90YSBwcmVtZW5uZWogJ3Njcm9sbCciCisKKyM6IGdsb2JhbHMuaDoxMTM1Cittc2dpZCAiRTkxOiAnc2hlbGwnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiRTkxOiB2b7ViYSAnc2hlbGwnIGplIHBy4XpkbmEiCisKKyM6IGdsb2JhbHMuaDoxMTM2Cittc2dpZCAiRTcyOiBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUiCittc2dzdHIgIkU3MjogQ2h5YmEgcHJpIHV6YXR24XJhbu0gb2RrbGFkYWNpZWhvIHP6Ym9ydSIKKworIzogZ2xvYmFscy5oOjExMzcKK21zZ2lkICJFNzM6IHRhZyBzdGFjayBlbXB0eSIKK21zZ3N0ciAiRTczOiB6b3puYW0gdGFnb3YgamUgcHLhemRueSIKKworIzogZ2xvYmFscy5oOjExMzgKK21zZ2lkICJFNzQ6IENvbW1hbmQgdG9vIGNvbXBsZXgiCittc2dzdHIgIkU3NDogUHLta2F6IGplIHBy7WxpuSB6bG++aXT9IgorCisjOiBnbG9iYWxzLmg6MTEzOQorbXNnaWQgIkU3NTogTmFtZSB0b28gbG9uZyIKK21zZ3N0ciAiRTc1OiBO4XpvdiBqZSBwcu1sabkgZGxo/SIKKworIzogZ2xvYmFscy5oOjExNDAKK21zZ2lkICJFNzY6IFRvbyBtYW55IFsiCittc2dzdHIgIkU3NjogUHLtbGm5IG1ub2hvIFsiCisKKyM6IGdsb2JhbHMuaDoxMTQxCittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IFBy7WxpuSBtbm9obyBu4Xp2b3Ygc/pib3JvdiIKKworIzogZ2xvYmFscy5oOjExNDIKK21zZ2lkICJUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJOYWRieXRv6G7pIHpuYWt5IG5hIGtvbmNpIgorCisjOiBnbG9iYWxzLmg6MTE0MworbXNnaWQgIkU3ODogVW5rbm93biBtYXJrIgorbXNnc3RyICJFNzg6IE5lem7hbWEgem5h6GthIgorCisjOiBnbG9iYWxzLmg6MTE0NAorbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTogTmVk4SBzYSBleHBhbmRvdmG7IL5vbO1rb3bpIHpuYWt5ICh3aWxkY2FyZHMpIgorCisjOiBnbG9iYWxzLmg6MTE0NQorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiBDaHliYSBwcmkgdWtsYWRhbu0iCisKKyM6IGdsb2JhbHMuaDoxMTQ2Cittc2dpZCAiWmVybyBjb3VudCIKK21zZ3N0ciAiTnVsb3b9IHBv6GV0IgorCisjOiBnbG9iYWxzLmg6MTE0OAorbXNnaWQgIkU4MTogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQiCittc2dzdHIgIkU4MTogUG91vml0aWUgPFNJRD4gbWltbyBrb250ZXh0IHNrcmlwdHUiCisKKyM6IGdsb2JhbHMuaDoxMTUxCittc2dpZCAiRTQ0OTogSW52YWxpZCBleHByZXNzaW9uIHJlY2VpdmVkIgorbXNnc3RyICJFNDQ5OiBCb2wgcHJpamF0/SBjaHlibv0gdv1yYXoiCisKZGlmZiAtLWdpdCBhL3NyYy9wby9zdi5wbyBiL3NyYy9wby9zdi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjg0YjIxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL3N2LnBvCkBAIC0wLDAgKzEsNjUxNiBAQAorIyBTd2VkaXNoIHRyYW5zbGF0aW9uIGZvciBWaW0uCisjIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgSm9oYW4gU3ZlZGJlcmcgPGpvaGFuQHN2ZWRiZXJnLnBwLnNlPiwgMjAwMy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IFZpbSA2LjJcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwNC0wMS0zMCAxMTo1NyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNC0wNC0yNCAyMTo1NCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKb2hhbiBTdmVkYmVyZyA8am9oYW5Ac3ZlZGJlcmcucHAuc2U+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8c3ZAbGkub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGJ1ZmZlci5jOjk3Cittc2dpZCAiRTgyOiBDYW5ub3QgYWxsb2NhdGUgYW55IGJ1ZmZlciwgZXhpdGluZy4uLiIKK21zZ3N0ciAiRTgyOiBLYW4gaW50ZSBhbGxva2VyYSBu5WdvbiBidWZmZXJ0LCBhdnNsdXRhci4uLiIKKworIzogYnVmZmVyLmM6MTAwCittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4MzogS2FuIGludGUgYWxsb2tlcmEgYnVmZmVydCwgYW525G5kZXIgZW4gYW5uYW4uLi4iCisKKyM6IGJ1ZmZlci5jOjc5NworbXNnaWQgIkU1MTU6IE5vIGJ1ZmZlcnMgd2VyZSB1bmxvYWRlZCIKK21zZ3N0ciAiRTUxNTogSW5nYSBidWZmZXJ0YXIgYmxldiB1cmxhZGRhZGUiCisKKyM6IGJ1ZmZlci5jOjc5OQorbXNnaWQgIkU1MTY6IE5vIGJ1ZmZlcnMgd2VyZSBkZWxldGVkIgorbXNnc3RyICJFNTE2OiBJbmdhIGJ1ZmZlcnRhciBibGV2IGJvcnR0YWduYSIKKworIzogYnVmZmVyLmM6ODAxCittc2dpZCAiRTUxNzogTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAiRTUxNzogSW5nYSBidWZmZXJ0YXIgYmxldiB1dHJhZGVyYWRlIgorCisjOiBidWZmZXIuYzo4MDkKK21zZ2lkICIxIGJ1ZmZlciB1bmxvYWRlZCIKK21zZ3N0ciAiMSBidWZmZXJ0IGxhZGRhZGVzIHVyIgorCisjOiBidWZmZXIuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB1bmxvYWRlZCIKK21zZ3N0ciAiJWQgYnVmZmVydGFyIGxhZGRhZGVzIHVyIgorCisjOiBidWZmZXIuYzo4MTYKK21zZ2lkICIxIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICIxIGJ1ZmZlcnQgYm9ydHRhZ2VuIgorCisjOiBidWZmZXIuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICIlZCBidWZmZXJ0YXIgYm9ydHRhZ25hIgorCisjOiBidWZmZXIuYzo4MjMKK21zZ2lkICIxIGJ1ZmZlciB3aXBlZCBvdXQiCittc2dzdHIgIjEgYnVmZmVydCB1dHJhZGVyYWQiCisKKyM6IGJ1ZmZlci5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHdpcGVkIG91dCIKK21zZ3N0ciAiJWQgYnVmZmVydGFyIHV0cmFkZXJhZGUiCisKKyM6IGJ1ZmZlci5jOjg4NgorbXNnaWQgIkU4NDogTm8gbW9kaWZpZWQgYnVmZmVyIGZvdW5kIgorbXNnc3RyICJFODQ6IEluZ2VuIG1vZGlmaWVyYWQgYnVmZmVydCBoaXR0YWQiCisKKyMuIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCwgZGlkbid0IGZpbmQgYW55dGhpbmcuCisjOiBidWZmZXIuYzo5MjUKK21zZ2lkICJFODU6IFRoZXJlIGlzIG5vIGxpc3RlZCBidWZmZXIiCittc2dzdHIgIkU4NTogRGV0IGZpbm5zIGluZ2EgbGlzdGFkZSBidWZmZXJ0YXIiCisKKyM6IGJ1ZmZlci5jOjkzNworbXNnaWQgIkU4NjogQnVmZmVyICVsZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTg2OiBCdWZmZXJ0ICVsZCBleGlzdGVyYXIgaW50ZSIKKworIzogYnVmZmVyLmM6OTQwCittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6IEthbiBpbnRlIGflIGJvcnRvbSBzaXN0YSBidWZmZXJ0IgorCisjOiBidWZmZXIuYzo5NDIKK21zZ2lkICJFODg6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgYnVmZmVyIgorbXNnc3RyICJFODg6IEthbiBpbnRlIGflIGb2cmUgZvZyc3RhIGJ1ZmZlcnQiCisKKyM6IGJ1ZmZlci5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFODk6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgJWxkIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIiIKKyJFODk6IEluZ2VuIHNrcml2bmluZyBzZWRhbiBzZW5hc3RlIORuZHJpbmcgZvZyIGJ1ZmZlcnQgJWxkIChs5GdnIHRpbGwgISBm9nIgIgorImF0dCB0dmluZ2EpIgorCisjOiBidWZmZXIuYzo5OTcKK21zZ2lkICJFOTA6IENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU5MDogS2FuIGludGUgbGFkZGEgdXIgc2VuYXN0ZSBidWZmZXJ0IgorCisjOiBidWZmZXIuYzoxNTMwCittc2dpZCAiVzE0OiBXYXJuaW5nOiBMaXN0IG9mIGZpbGUgbmFtZXMgb3ZlcmZsb3ciCittc2dzdHIgIlcxNDogVmFybmluZzogTGlzdGEg9nZlciBmaWxuYW1uIGZs9mRhciD2dmVyIgorCisjOiBidWZmZXIuYzoxNzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MjogQnVmZmVyICVsZCBub3QgZm91bmQiCittc2dzdHIgIkU5MjogQnVmZmVyICVsZCBoaXR0YWRlcyBpbnRlIgorCisjOiBidWZmZXIuYzoxOTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5MzogRmxlciDkbiBlbiB0cuRmZiBm9nIgJXMiCisKKyM6IGJ1ZmZlci5jOjE5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIgorbXNnc3RyICJFOTQ6IEluZ2VuIG1hdGNoYW5kZSBidWZmZXJ0IGb2ciAlcyIKKworIzogYnVmZmVyLmM6MjMyOSBleF9kb2NtZC5jOjY2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQiCittc2dzdHIgInJhZCAlbGQiCisKKyM6IGJ1ZmZlci5jOjI0MTIKK21zZ2lkICJFOTU6IEJ1ZmZlciB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTk1OiBCdWZmZXIgbWVkIGRldCBo5HIgbmFtbmV0IGV4aXN0ZXJhciByZWRhbiIKKworIzogYnVmZmVyLmM6MjcwNQorbXNnaWQgIiBbTW9kaWZpZWRdIgorbXNnc3RyICIgW01vZGlmaWVyYWRdIgorCisjOiBidWZmZXIuYzoyNzEwCittc2dpZCAiW05vdCBlZGl0ZWRdIgorbXNnc3RyICJbSW50ZSByZWRpZ2VyYWRdIgorCisjOiBidWZmZXIuYzoyNzE1Cittc2dpZCAiW05ldyBmaWxlXSIKK21zZ3N0ciAiW055IGZpbF0iCisKKyM6IGJ1ZmZlci5jOjI3MTYKK21zZ2lkICJbUmVhZCBlcnJvcnNdIgorbXNnc3RyICJbTORzZmVsXSIKKworIzogYnVmZmVyLmM6MjcxOCBmaWxlaW8uYzoxOTM5Cittc2dpZCAiW3JlYWRvbmx5XSIKK21zZ3N0ciAiW3Nrcml2c2t5ZGRhZF0iCisKKyM6IGJ1ZmZlci5jOjI3MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lIC0tJWQlJS0tIgorbXNnc3RyICIxIHJhZCAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6Mjc0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgLS0lZCUlLS0iCittc2dzdHIgIiVsZCByYWRlciAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6Mjc0OAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCBvZiAlbGQgLS0lZCUlLS0gY29sICIKK21zZ3N0ciAicmFkICVsZCBhdiAlbGQgLS0lZCUlLS0ga29sICIKKworIzogYnVmZmVyLmM6Mjg0OQorbXNnaWQgIltObyBmaWxlXSIKK21zZ3N0ciAiW0luZ2VuIGZpbF0iCisKKyMuIG11c3QgYmUgYSBoZWxwIGJ1ZmZlcgorIzogYnVmZmVyLmM6Mjg4OQorbXNnaWQgImhlbHAiCittc2dzdHIgImhq5GxwIgorCisjOiBidWZmZXIuYzozNDQ4IHNjcmVlbi5jOjQ5OTYKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIltoauRscF0iCisKKyM6IGJ1ZmZlci5jOjM0ODAgc2NyZWVuLmM6NTAwMgorbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW0b2cmhhbmRzdmlzbmluZ10iCisKKyM6IGJ1ZmZlci5jOjM3NjAKK21zZ2lkICJBbGwiCittc2dzdHIgIkFsbGEiCisKKyM6IGJ1ZmZlci5jOjM3NjAKK21zZ2lkICJCb3QiCittc2dzdHIgIkJvdHQiCisKKyM6IGJ1ZmZlci5jOjM3NjIKK21zZ2lkICJUb3AiCittc2dzdHIgIlRvcHAiCisKKyM6IGJ1ZmZlci5jOjQ1MDgKK21zZ2lkICIiCisiXG4iCisiIyBCdWZmZXIgbGlzdDpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgQnVmZmVydGxpc3RhOlxuIgorCisjOiBidWZmZXIuYzo0NTQxCittc2dpZCAiW0Vycm9yIExpc3RdIgorbXNnc3RyICJbRmVsbGlzdGFdIgorCisjOiBidWZmZXIuYzo0NTU0IG1lbWxpbmUuYzoxNTEzCittc2dpZCAiW05vIEZpbGVdIgorbXNnc3RyICJbSW5nZW4gZmlsXSIKKworIzogYnVmZmVyLmM6NDg1NworbXNnaWQgIiIKKyJcbiIKKyItLS0gU2lnbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFRlY2tlbiAtLS0iCisKKyM6IGJ1ZmZlci5jOjQ4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2lnbnMgZm9yICVzOiIKK21zZ3N0ciAiVGVja2VuIGb2ciAlczoiCisKKyM6IGJ1ZmZlci5jOjQ4ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtbiVzIgorCisjOiBkaWZmLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NjogQ2FuIG5vdCBkaWZmIG1vcmUgdGhhbiAlbGQgYnVmZmVycyIKK21zZ3N0ciAiRTk2OiBLYW4gaW50ZSBza2lsamEgZmxlciDkbiAlbGQgYnVmZmVydGFyIgorCisjOiBkaWZmLmM6NjUxCittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6IEthbiBpbnRlIHNrYXBhIHNraWxqYXJlIgorCisjOiBkaWZmLmM6NzUwCittc2dpZCAiUGF0Y2ggZmlsZSIKK21zZ3N0ciAiUGF0Y2hmaWwiCisKKyM6IGRpZmYuYzoxMDAxCittc2dpZCAiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIKK21zZ3N0ciAiRTk4OiBLYW4gaW50ZSBs5HNhIHNraWxqZXV0ZGF0YSIKKworIzogZGlmZi5jOjE3NDIKK21zZ2lkICJFOTk6IEN1cnJlbnQgYnVmZmVyIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkU5OTogQWt0dWVsbCBidWZmZXJ0IORyIGludGUgaSBza2lsamVs5GdlIgorCisjOiBkaWZmLmM6MTc1NAorbXNnaWQgIkUxMDA6IE5vIG90aGVyIGJ1ZmZlciBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDA6IEluZ2VuIGFubmFuIGJ1ZmZlcnQgaSBza2lsamVs5GdlIgorCisjOiBkaWZmLmM6MTc2MgorbXNnaWQgIkUxMDE6IE1vcmUgdGhhbiB0d28gYnVmZmVycyBpbiBkaWZmIG1vZGUsIGRvbid0IGtub3cgd2hpY2ggb25lIHRvIHVzZSIKK21zZ3N0ciAiIgorIkUxMDE6IEZsZXIg5G4gdHblIGJ1ZmZlcnRhciBpIHNraWxqZWzkZ2UsIHZldCBpbnRlIHZpbGtlbiBzb20gc2thIGFuduRuZGFzIgorCisjOiBkaWZmLmM6MTc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAyOiBDYW4ndCBmaW5kIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxMDI6IEthbiBpbnRlIGhpdHRhIGJ1ZmZlcnQgXCIlc1wiIgorCisjOiBkaWZmLmM6MTc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTAzOiBCdWZmZXIgXCIlc1wiIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDM6IEJ1ZmZlcnQgXCIlc1wiIORyIGludGUgaSBza2lsamVs5GdlIgorCisjOiBkaWdyYXBoLmM6MjE3MgorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiBFc2NhcGUgaW50ZSB0aWxs5XRldCBpIGRpZ3JhZiIKKworIzogZGlncmFwaC5jOjIzNDQKK21zZ2lkICJFNTQ0OiBLZXltYXAgZmlsZSBub3QgZm91bmQiCittc2dzdHIgIkU1NDQ6IEtleW1hcC1maWwgaGl0dGFkZXMgaW50ZSIKKworIzogZGlncmFwaC5jOjIzNzEKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IEFuduRuZG5pbmcgYXYgOmxvYWRrZXltYXAgdXRhbmb2ciBlbiBr9nJkIGZpbCIKKworIzogZWRpdC5jOjQwCittc2dpZCAiIEtleXdvcmQgY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIgTnlja2Vsb3Jkc2tvbXBsZXR0ZXJpbmcgKF5OL15QKSIKKworIy4gY3RybF94X21vZGUgPT0gMCwgXlAvXk4gY29tcGwuCisjOiBlZGl0LmM6NDEKK21zZ2lkICIgXlggbW9kZSAoXkUvXlkvXkwvXl0vXkYvXkkvXksvXkQvXlYvXk4vXlApIgorbXNnc3RyICIgXlgtbORnZSAoXkUvXlkvXkwvXl0vXkYvXkkvXksvXkQvXlYvXk4vXlApIgorCisjLiBTY3JvbGwgaGFzIGl0J3Mgb3duIG1zZ3MsIGluIGl0J3MgcGxhY2UgdGhlcmUgaXMgdGhlIG1zZyBmb3IgbG9jYWwKKyMuICogY3RybF94X21vZGUgPSAwIChlZyBjb250aW51ZV9zdGF0dXMgJiBDT05UX0xPQ0FMKSAgLS0gQWNldmVkbworIzogZWRpdC5jOjQ0Cittc2dpZCAiIEtleXdvcmQgTG9jYWwgY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIgTG9rYWwgbnlja2Vsb3Jkc2tvbXBsZXR0ZXJpbmcgKF5OL15QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkwvXk4vXlApIgorbXNnc3RyICIgSGVscmFkc2tvbXBsZXR0ZXJpbmcgKF5ML15OL15QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRi9eTi9eUCkiCittc2dzdHIgIiBGaWxuYW1uc2tvbXBsZXR0ZXJpbmcgKF5GL15OL15QKSIKKworIzogZWRpdC5jOjQ3Cittc2dpZCAiIFRhZyBjb21wbGV0aW9uICheXS9eTi9eUCkiCittc2dzdHIgIiBUYWdna29tcGxldHRlcmluZyAoXl0vXk4vXlApIgorCisjOiBlZGl0LmM6NDgKK21zZ2lkICIgUGF0aCBwYXR0ZXJuIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIFP2a3bkZ3Nt9m5zdGVya29tcGxldHRlcmluZyAoXk4vXlApIgorCisjOiBlZGl0LmM6NDkKK21zZ2lkICIgRGVmaW5pdGlvbiBjb21wbGV0aW9uICheRC9eTi9eUCkiCittc2dzdHIgIiBEZWZpbml0aW9uc2tvbXBsZXR0ZXJpbmcgKF5EL15OL15QKSIKKworIzogZWRpdC5jOjUxCittc2dpZCAiIERpY3Rpb25hcnkgY29tcGxldGlvbiAoXksvXk4vXlApIgorbXNnc3RyICIgT3JkYm9rc2tvbXBsZXR0ZXJpbmcgKF5LL15OL15QKSIKKworIzogZWRpdC5jOjUyCittc2dpZCAiIFRoZXNhdXJ1cyBjb21wbGV0aW9uICheVC9eTi9eUCkiCittc2dzdHIgIiBUZXNhdXJrb21wbGV0dGVyaW5nICheVC9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MworbXNnaWQgIiBDb21tYW5kLWxpbmUgY29tcGxldGlvbiAoXlYvXk4vXlApIgorbXNnc3RyICIgS29tbWFuZG9yYWRza29tcGxldHRlcmluZyAoXlYvXk4vXlApIgorCisjOiBlZGl0LmM6NTYKK21zZ2lkICJIaXQgZW5kIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAiU3T2dHRlIHDlIHNsdXRldCBw5SBzdHlja2V0IgorCisjOiBlZGl0LmM6OTUzCittc2dpZCAiJ3RoZXNhdXJ1cycgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICIndGhlc2F1cnVzJy1mbGFnZ2Eg5HIgdG9tIgorCisjOiBlZGl0LmM6MTE1NworbXNnaWQgIidkaWN0aW9uYXJ5JyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIidkaWN0aW9uYXJ5Jy1mbGFnZ2Eg5HIgdG9tIgorCisjOiBlZGl0LmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAiU/ZrZXIgaWdlbm9tIG9yZGJvazogJXMiCisKKyM6IGVkaXQuYzoyMzYwCittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKGluZm9nYSkgUnVsbGEgKF5FL15ZKSIKKworIzogZWRpdC5jOjIzNjIKK21zZ2lkICIgKHJlcGxhY2UpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKGVyc+R0dCkgUnVsbGEgKF5FL15ZKSIKKworIzogZWRpdC5jOjI2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmc6ICVzIgorbXNnc3RyICJT9mtlciBpZ2Vub206ICVzIgorCisjOiBlZGl0LmM6MjcxMQorbXNnaWQgIlNjYW5uaW5nIHRhZ3MuIgorbXNnc3RyICJT9mtlciBpZ2Vub20gdGFnZ2FyLiIKKworIzogZWRpdC5jOjMzNzMKK21zZ2lkICIgQWRkaW5nIgorbXNnc3RyICIgTORnZ2VyIHRpbGwiCisKKyMuIHNob3dtb2RlIG1pZ2h0IHJlc2V0IHRoZSBpbnRlcm5hbCBsaW5lIHBvaW50ZXJzLCBzbyBpdCBtdXN0CisjLiAqIGJlIGNhbGxlZCBiZWZvcmUgbGluZSA9IG1sX2dldCgpLCBvciB3aGVuIHRoaXMgYWRkcmVzcyBpcyBubworIy4gKiBsb25nZXIgbmVlZGVkLiAgLS0gQWNldmVkby4KKyMuCisjOiBlZGl0LmM6MzQyMgorbXNnaWQgIi0tIFNlYXJjaGluZy4uLiIKK21zZ3N0ciAiLS0gU/ZrZXIuLi4iCisKKyM6IGVkaXQuYzozNDc4Cittc2dpZCAiQmFjayBhdCBvcmlnaW5hbCIKK21zZ3N0ciAiVGlsbGJha2EgcOUgb3JnaW5hbGV0IgorCisjOiBlZGl0LmM6MzQ4MworbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICJPcmQgZnLlbiBhbm5hbiByYWQiCisKKyM6IGVkaXQuYzozNDg4Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIkRlbiBlbmRhIHRy5GZmZW4iCisKKyM6IGVkaXQuYzozNTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICJ0cuRmZiAlZCBhdiAlZCIKKworIzogZWRpdC5jOjM1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgInRy5GZmICVkIgorCisjLiBTa2lwIGZ1cnRoZXIgYXJndW1lbnRzIGJ1dCBkbyBjb250aW51ZSB0bworIy4gKiBzZWFyY2ggZm9yIGEgdHJhaWxpbmcgY29tbWFuZC4KKyM6IGV2YWwuYzoxMDExCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDY6IFVua25vd24gdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwNjogT2vkbmQgdmFyaWFiZWw6IFwiJXNcIiIKKworIzogZXZhbC5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNzogTWlzc2luZyBicmFjZXM6ICVzIgorbXNnc3RyICJFMTA3OiBTYWtuYXIgaGFrcGFyYW50ZXM6ICVzIgorCisjOiBldmFsLmM6MTQxMiBldmFsLmM6MTQyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA4OiBObyBzdWNoIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDg6IEluZ2VuIHPlZGFuIHZhcmlhYmVsOiBcIiVzXCIiCisKKyM6IGV2YWwuYzoxNjgyCittc2dpZCAiRTEwOTogTWlzc2luZyAnOicgYWZ0ZXIgJz8nIgorbXNnc3RyICJFMTA5OiBTYWtuYXIgJzonIGVmdGVyICc/JyIKKworIzogZXZhbC5jOjIyOTgKK21zZ2lkICJFMTEwOiBNaXNzaW5nICcpJyIKK21zZ3N0ciAiRTExMDogU2FrbmFyICcpJyIKKworIzogZXZhbC5jOjIzNTUKK21zZ2lkICJFMTExOiBNaXNzaW5nICddJyIKK21zZ3N0ciAiRTExMTogU2FrbmFyICddJyIKKworIzogZXZhbC5jOjI0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMjogT3B0aW9uIG5hbWUgbWlzc2luZzogJXMiCittc2dzdHIgIkUxMTI6IEZsYWdnbmFtbiBzYWtuYXM6ICVzIgorCisjOiBldmFsLmM6MjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEzOiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUxMTM6IE9r5G5kIGZsYWdnYTogJXMiCisKKyM6IGV2YWwuYzoyNTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTQ6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE0OiBTYWtuYXIgY2l0YXR0ZWNrZW46ICVzIgorCisjOiBldmFsLmM6MjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE1OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNTogU2FrbmFyIGNpdGF0dGVja2VuOiAlcyIKKworIzogZXZhbC5jOjMwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNjogSW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICVzIgorbXNnc3RyICJFMTE2OiBPZ2lsdGlnYSBhcmd1bWVudCBm9nIgZnVua3Rpb24gJXMiCisKKyM6IGV2YWwuYzozMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiBPa+RuZCBmdW5rdGlvbjogJXMiCisKKyM6IGV2YWwuYzozMDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTg6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE4OiBG9nIgbeVuZ2EgYXJndW1lbnQgdGlsbCBmdW5rdGlvbjogJXMiCisKKyM6IGV2YWwuYzozMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTk6IEludGUgdGlsbHLkY2tsaWd0IG1lZCBhcmd1bWVudCB0aWxsIGZ1bmt0aW9uOiAlcyIKKworIzogZXZhbC5jOjMwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMDogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQ6ICVzIgorbXNnc3RyICJFMTIwOiBBbnbkbmRlciA8U0lEPiBpbnRlIGkgc2tyaXB0c2FtbWFuaGFuZzogJXMiCisKKyMuCisjLiAqIFllcyB0aGlzIGlzIHVnbHksIEkgZG9uJ3QgcGFydGljdWxhcmx5IGxpa2UgaXQgZWl0aGVyLiAgQnV0IGRvaW5nIGl0CisjLiAqIHRoaXMgd2F5IGhhcyB0aGUgY29tcGVsbGluZyBhZHZhbnRhZ2UgdGhhdCB0cmFuc2xhdGlvbnMgbmVlZCBub3QgdG8KKyMuICogYmUgdG91Y2hlZCBhdCBhbGwuICBTZWUgYmVsb3cgd2hhdCAnb2snIGFuZCAneW5jJyBhcmUgdXNlZCBmb3IuCisjLgorIzogZXZhbC5jOjM2NDEgZ3VpLmM6NDI2MCBndWlfZ3RrLmM6MjAwMQorbXNnaWQgIiZPayIKK21zZ3N0ciAiJk9rIgorCisjOiBldmFsLmM6NDE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIrLSVzJTNsZCBsaW5lczogIgorbXNnc3RyICIrLSVzJTNsZCByYWRlcjogIgorCisjOiBldmFsLmM6NTQwNgorbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJk9LXG4iCisiJkF2YnJ5dCIKKworIzogZXZhbC5jOjU0NDYKK21zZ2lkICJjYWxsZWQgaW5wdXRyZXN0b3JlKCkgbW9yZSBvZnRlbiB0aGFuIGlucHV0c2F2ZSgpIgorbXNnc3RyICJhbnJvcGFkZSBpbnB1dHJlc3RvcmUoKSBvZnRhcmUg5G4gaW5wdXRzYXZlKCkiCisKKyM6IGV2YWwuYzo1OTA0Cittc2dpZCAiRTY1NTogVG9vIG11Y2ggc3ltYm9saWMgbGlua3MgKGN5Y2xlPykiCittc2dzdHIgIkU2NTU6IEb2ciBt5W5nYSBzeW1ib2xpc2thIGzkbmthciAoc2xpbmdhPykiCisKKyM6IGV2YWwuYzo2NTIzCittc2dpZCAiRTI0MDogTm8gY29ubmVjdGlvbiB0byBWaW0gc2VydmVyIgorbXNnc3RyICJFMjQwOiBJbmdlbiBhbnNsdXRuaW5nIHRpbGwgVmltLXNlcnZlciIKKworIzogZXZhbC5jOjY2MjAKK21zZ2lkICJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIKK21zZ3N0ciAiRTI3NzogS3VuZGUgaW50ZSBs5HNhIGV0dCBzZXJ2ZXJzdmFyIgorCisjOiBldmFsLmM6NjY0OAorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODogS3VuZGUgaW50ZSBz5G5kYSB0aWxsIGtsaWVudCIKKworIzogZXZhbC5jOjY2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MTogVW5hYmxlIHRvIHNlbmQgdG8gJXMiCittc2dzdHIgIkUyNDE6IEt1bmRlIGludGUgc+RuZGEgdGlsbCAlcyIKKworIzogZXZhbC5jOjY3OTYKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIihPZ2lsdGlnKSIKKworIzogZXZhbC5jOjc5NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMTogVW5kZWZpbmVkIHZhcmlhYmxlOiAlcyIKK21zZ3N0ciAiRTEyMTogT2RlZmluaWVyYWQgdmFyaWFiZWw6ICVzIgorCisjOiBldmFsLmM6ODM3NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJFNDYxOiBPdGlsbOV0ZXQgdmFyaWFiZWxuYW1uOiAlcyIKKworIzogZXZhbC5jOjg2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMjogRnVuY3Rpb24gJXMgYWxyZWFkeSBleGlzdHMsIGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxMjI6IEZ1bmt0aW9uZW4gJXMgZXhpc3RlcmFyIHJlZGFuLCBs5GdnIHRpbGwgISBm9nIgYXR0IGVyc+R0dGEgZGVuIgorCisjOiBldmFsLmM6ODczMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiBPZGVmaW5pZXJhZCBmdW5rdGlvbjogJXMiCisKKyM6IGV2YWwuYzo4NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjQ6IE1pc3NpbmcgJygnOiAlcyIKK21zZ3N0ciAiRTEyNDogU2FrbmFyICcoJzogJXMiCisKKyM6IGV2YWwuYzo4Nzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiBPdGlsbOV0ZXQgYXJndW1lbnQ6ICVzIgorCisjOiBldmFsLmM6ODg1NworbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiBTYWtuYXIgOmVuZGZ1bmN0aW9uIgorCisjOiBldmFsLmM6ODk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzogS2FuIGludGUgb21kZWZpbmllcmEgZnVua3Rpb24gJXM6IERlbiBhbnbkbmRzIgorCisjOiBldmFsLmM6OTAwOAorbXNnaWQgIkUxMjk6IEZ1bmN0aW9uIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUxMjk6IEZ1bmt0aW9uc25hbW4ga3LkdnMiCisKKyM6IGV2YWwuYzo5MDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6IEZ1bmt0aW9uc25hbW4gbeVzdGUgYvZyamEgbWVkIGVuIHZlcnNhbDogJXMiCisKKyM6IGV2YWwuYzo5MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzA6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMzA6IE9kZWZpbmllcmFkIGZ1bmt0aW9uOiAlcyIKKworIzogZXZhbC5jOjkyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMTogQ2Fubm90IGRlbGV0ZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTMxOiBLYW4gaW50ZSB0YSBib3J0IGZ1bmt0aW9uICVzOiBEZW4gYW525G5kcyIKKworIzogZXZhbC5jOjkzMDQKK21zZ2lkICJFMTMyOiBGdW5jdGlvbiBjYWxsIGRlcHRoIGlzIGhpZ2hlciB0aGFuICdtYXhmdW5jZGVwdGgnIgorbXNnc3RyICJFMTMyOiBEanVwZXQgcOUgZnVua3Rpb25zYW5yb3BldCDkciBo9mdyZSDkbiAnbWF4ZnVuY2RlcHRoJyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6OTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYWxsaW5nICVzIgorbXNnc3RyICJhbnJvcGFyICVzIgorCisjOiBldmFsLmM6OTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhYm9ydGVkIgorbXNnc3RyICIlcyBhdmJy9nRzIgorCisjOiBldmFsLmM6OTQyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgIyVsZCIKK21zZ3N0ciAiJXMgcmV0dXJuZXJhciAjJWxkIgorCisjOiBldmFsLmM6OTQyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXR1cm5pbmcgXCIlc1wiIgorbXNnc3RyICIlcyByZXR1cm5lcmFyIFwiJXNcIiIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6OTQ0NCBleF9jbWRzMi5jOjIyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAiZm9ydHPkdHRlciBpICVzIgorCisjOiBldmFsLmM6OTQ3MAorbXNnaWQgIkUxMzM6IDpyZXR1cm4gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTMzOiA6cmV0dXJuIGludGUgaW5vbSBlbiBmdW5rdGlvbiIKKworIzogZXZhbC5jOjk4MDEKK21zZ2lkICIiCisiXG4iCisiIyBnbG9iYWwgdmFyaWFibGVzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBnbG9iYWxhIHZhcmlhYmxlcjpcbiIKKworIzogZXhfY21kczIuYzo5MgorbXNnaWQgIkVudGVyaW5nIERlYnVnIG1vZGUuICBUeXBlIFwiY29udFwiIHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiR+VyIGluIGkgZmVsc/ZrbmluZ3Ns5GdlLiAgU2tyaXYgXCJjb250XCIgZvZyIGF0dCBmb3J0c+R0dGEuIgorCisjOiBleF9jbWRzMi5jOjk2IGV4X2RvY21kLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiAlcyIKK21zZ3N0ciAicmFkICVsZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY21kOiAlcyIKK21zZ3N0ciAia29tbWFuZG86ICVzIgorCisjOiBleF9jbWRzMi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIgorbXNnc3RyICJCcnl0cHVua3QgaSBcIiVzJXNcIiByYWQgJWxkIgorCisjOiBleF9jbWRzMi5jOjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYxOiBCcmVha3BvaW50IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUxNjE6IEJyeXRwdW5rdCBoaXR0YWRlcyBpbnRlOiAlcyIKKworIzogZXhfY21kczIuYzo1NjYKK21zZ2lkICJObyBicmVha3BvaW50cyBkZWZpbmVkIgorbXNnc3RyICJJbmdhIGJyeXRwdW5rdGVyIGRlZmluaWVyYWRlIgorCisjOiBleF9jbWRzMi5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlM2QgICVzICVzICBsaW5lICVsZCIKK21zZ3N0ciAiJTNkICAlcyAlcyAgcmFkICVsZCIKKworIzogZXhfY21kcy5jOjIwOTcgZXhfY21kcy5jOjIzNjIgZXhfY21kczIuYzo3NjMKK21zZ2lkICJTYXZlIEFzIgorbXNnc3RyICJTcGFyYSBzb20iCisKKyM6IGV4X2NtZHMyLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmUgY2hhbmdlcyB0byBcIiUuKnNcIj8iCittc2dzdHIgIlNwYXJhIORuZHJpbmdhciB0aWxsIFwiJS4qc1wiPyIKKworIzogZXhfY21kczIuYzo3ODggZXhfZG9jbWQuYzo5MDg1Cittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIk5hbW5s9nMiCisKKyM6IGV4X2NtZHMyLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiBJbmdlbiBza3Jpdm5pbmcgc2VkYW4gc2VuYXN0ZSDkbmRyaW5nIGb2ciBidWZmZXJ0IFwiJXNcIiIKKworIzogZXhfY21kczIuYzo5ODQKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIlZhcm5pbmc6IEdpY2sgaW4gaSBhbmRyYSBidWZmZXJ0YXIgb3bkbnRhdCAoa29udHJvbGxlcmEgYXV0b2tvbW1hbmRvbikiCisKKyM6IGV4X2NtZHMyLmM6MTM4NworbXNnaWQgIkUxNjM6IFRoZXJlIGlzIG9ubHkgb25lIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE2MzogRGV0IGZpbm5zIGJhcmEgZW4gZmlsIGF0dCByZWRpZ2VyYSIKKworIzogZXhfY21kczIuYzoxMzg5Cittc2dpZCAiRTE2NDogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBmaWxlIgorbXNnc3RyICJFMTY0OiBLYW4gaW50ZSBn5SBm9nJlIGb2cnN0YSBmaWxlbiIKKworIzogZXhfY21kczIuYzoxMzkxCittc2dpZCAiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiCittc2dzdHIgIkUxNjU6IEthbiBpbnRlIGflIGJvcnRvbSBzaXN0YSBmaWxlbiIKKworIzogZXhfY21kczIuYzoxODQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIGluIFwiJXNcIiIKK21zZ3N0ciAiU/ZrZXIgZWZ0ZXIgXCIlc1wiIGkgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIlP2a2VyIGVmdGVyIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgImhpdHRhZGVzIGludGUgaSAncnVudGltZXBhdGgnOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTkxOQorbXNnaWQgIlNvdXJjZSBWaW0gc2NyaXB0IgorbXNnc3RyICJM5HMgVmltLXNrcmlwdCIKKworIzogZXhfY21kczIuYzoyMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAiS2FuIGludGUgbORzYSBlbiBrYXRhbG9nOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAia3VuZGUgaW50ZSBs5HNhIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAicmFkICVsZDoga3VuZGUgaW50ZSBs5HNhIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgInNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAibORzZXIgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IHNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAicmFkICVsZDogbORzZXIgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc291cmNpbmcgJXMiCittc2dzdHIgImzkc3RlIGtsYXJ0ICVzIgorCisjOiBleF9jbWRzMi5jOjI2MzQKK21zZ2lkICJXMTU6IFdhcm5pbmc6IFdyb25nIGxpbmUgc2VwYXJhdG9yLCBeTSBtYXkgYmUgbWlzc2luZyIKK21zZ3N0ciAiVzE1OiBWYXJuaW5nOiBGZWwgcmFkYXZza2lsamFyZSwgXk0ga2FuIHNha25hcyIKKworIzogZXhfY21kczIuYzoyNjgzCittc2dpZCAiRTE2NzogOnNjcmlwdGVuY29kaW5nIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2NzogOnNjcmlwdGVuY29kaW5nIGFuduRuZHMgdXRhbmb2ciBlbiBr9nJkIGZpbCIKKworIzogZXhfY21kczIuYzoyNzE2Cittc2dpZCAiRTE2ODogOmZpbmlzaCB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjg6IDpmaW5pc2ggYW525G5kcyB1dGFuZvZyIGVuIGv2cmQgZmlsIgorCisjOiBleF9jbWRzMi5jOjMxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFnZSAlZCIKK21zZ3N0ciAiU2lkYSAlZCIKKworIzogZXhfY21kczIuYzozMzE1Cittc2dpZCAiTm8gdGV4dCB0byBiZSBwcmludGVkIgorbXNnc3RyICJJbmdlbiB0ZXh0IGF0dCBza3JpdmEgdXQiCisKKyM6IGV4X2NtZHMyLmM6MzM5MworIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyBwYWdlICVkICglZCUlKSIKK21zZ3N0ciAiU2tyaXZlciB1dCBzaWRhICVkICglZCUlKSIKKworIzogZXhfY21kczIuYzozNDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBDb3B5ICVkIG9mICVkIgorbXNnc3RyICIgS29waWEgJWQgYXYgJWQiCisKKyM6IGV4X2NtZHMyLmM6MzQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGVkOiAlcyIKK21zZ3N0ciAiU2tyZXYgdXQ6ICVzIgorCisjOiBleF9jbWRzMi5jOjM0NzAKK21zZ2lkICJQcmludGluZyBhYm9ydGVkIgorbXNnc3RyICJVdHNrcmlmdCBhdmJydXRlbiIKKworIzogZXhfY21kczIuYzozODM1Cittc2dpZCAiRTQ1NTogRXJyb3Igd3JpdGluZyB0byBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFNDU1OiBGZWwgdmlkIHNrcml2bmluZyBhdiB1dGRhdGEgdGlsbCBQb3N0U2NyaXB0LWZpbCIKKworIzogZXhfY21kczIuYzo0MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjQ6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU2MjQ6IEthbiBpbnRlIPZwcG5hIGZpbCBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDEyMCBleF9jbWRzMi5jOjQ3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NzogQ2FuJ3QgcmVhZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU3OiBLYW4gaW50ZSBs5HNhIFBvc3RTY3JpcHQtcmVzdXJzZmlsIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTg6IGZpbGUgXCIlc1wiIGlzIG5vdCBhIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIKK21zZ3N0ciAiRTYxODogZmlsIFwiJXNcIiDkciBpbnRlIGVuIFBvc3RTY3JpcHQtcmVzdXJzZmlsIgorCisjOiBleF9jbWRzMi5jOjQxNDMgZXhfY21kczIuYzo0MTYzIGV4X2NtZHMyLmM6NDE3OCBleF9jbWRzMi5jOjQyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOTogZmlsZSBcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIKK21zZ3N0ciAiRTYxOTogZmlsIFwiJXNcIiDkciBpbnRlIGVuIFBvc3RTY3JpcHQtcmVzdXJzZmlsIHNvbSBzdPZkcyIKKworIzogZXhfY21kczIuYzo0MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjE6IFwiJXNcIiByZXNvdXJjZSBmaWxlIGhhcyB3cm9uZyB2ZXJzaW9uIgorbXNnc3RyICJFNjIxOiBcIiVzXCIta+RsbGZpbGVuIGhhciBmZWwgdmVyc2lvbiIKKworIzogZXhfY21kczIuYzo0Njk3Cittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiBLYW4gaW50ZSD2cHBuYSBQb3N0U2NyaXB0LXV0ZmlsIgorCisjOiBleF9jbWRzMi5jOjQ3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogS2FuIGludGUg9nBwbmEgZmlsIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0ODQ5Cittc2dpZCAiRTQ1NjogQ2FuJ3QgZmluZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCJwcm9sb2cucHNcIiIKK21zZ3N0ciAiRTQ1NjogS2FuIGludGUgaGl0dGEgUG9zdFNjcmlwdC1r5GxsZmlsZW4gXCJwcm9sb2cucHNcIiIKKworIzogZXhfY21kczIuYzo0ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXMucHNcIiIKK21zZ3N0ciAiRTQ1NjogS2FuIGludGUgaGl0dGEgUG9zdFNjcmlwdC1r5GxsZmlsZW4gXCIlcy5wc1wiIgorCisjOiBleF9jbWRzMi5jOjQ4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyMDogVW5hYmxlIHRvIGNvbnZlcnQgZnJvbSBtdWx0aS1ieXRlIHRvIFwiJXNcIiBlbmNvZGluZyIKK21zZ3N0ciAiRTYyMDogS3VuZGUgaW50ZSBrb252ZXJ0ZXJhIGZy5W4gbXVsdGktYnl0ZSB0aWxsIFwiJXNcIiBlbmNvZGluZyIKKworIzogZXhfY21kczIuYzo1MDIzCittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICJTa2lja2FyIHRpbGwgc2tyaXZhcmUuLi4iCisKKyM6IGV4X2NtZHMyLmM6NTAyNworbXNnaWQgIkUzNjU6IEZhaWxlZCB0byBwcmludCBQb3N0U2NyaXB0IGZpbGUiCittc2dzdHIgIkUzNjU6IE1pc3NseWNrYWRlcyBtZWQgYXR0IHNrcml2YSB1dCBQb3N0U2NyaXB0LWZpbCIKKworIzogZXhfY21kczIuYzo1MDI5Cittc2dpZCAiUHJpbnQgam9iIHNlbnQuIgorbXNnc3RyICJTa3JpdmFyam9iYiBza2lja2F0LiIKKworIzogZXhfY21kczIuYzo1NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICJBa3R1ZWxsdCAlc3NwcuVrOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NTQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTk3OiBDYW5ub3Qgc2V0IGxhbmd1YWdlIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTE5NzogS2FuIGludGUgc+R0dGEgc3By5WsgdGlsbCBcIiVzXCIiCisKKyM6IGV4X2NtZHMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iCittc2dzdHIgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2t0YWx0ICUwM28iCisKKyM6IGV4X2NtZHMuYzoxMTgKK21zZ2lkICI+ICVkLCBIZXggJTA0eCwgT2N0YWwgJW8iCittc2dzdHIgIj4gJWQsIEhleCAlMDR4LCAgT2t0YWx0ICVvIgorCisjOiBleF9jbWRzLmM6MTE5Cittc2dpZCAiPiAlZCwgSGV4ICUwOHgsIE9jdGFsICVvIgorbXNnc3RyICI+ICVkLCBIZXggJTA4eCwgT2t0YWx0ICVvIgorCisjOiBleF9jbWRzLmM6NDMwCittc2dpZCAiRTEzNDogTW92ZSBsaW5lcyBpbnRvIHRoZW1zZWx2ZXMiCittc2dzdHIgIkUxMzQ6IEZseXR0YSByYWRlciBpbiBpIGRlbSBzauRsdmEiCisKKyM6IGV4X2NtZHMuYzo0OTkKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgIjEgcmFkIGZseXR0YWQiCisKKyM6IGV4X2NtZHMuYzo1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIG1vdmVkIgorbXNnc3RyICIlbGQgcmFkZXIgZmx5dHRhZGUiCisKKyM6IGV4X2NtZHMuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICIlbGQgcmFkZXIgZmlsdHJlcmFkZSIKKworIzogZXhfY21kcy5jOjk1MgorbXNnaWQgIkUxMzU6ICpGaWx0ZXIqIEF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUxMzU6ICpGaWx0ZXIqLUF1dG9rb21tYW5kb24gZuVyIGludGUg5G5kcmEgYWt0dWVsbCBidWZmZXJ0IgorCisjOiBleF9jbWRzLmM6MTAzNworbXNnaWQgIltObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZV1cbiIKK21zZ3N0ciAiW0luZ2VuIHNrcml2bmluZyBzZWRhbiBzZW5hc3RlIORuZHJpbmddXG4iCisKKyM6IGV4X2NtZHMuYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzdmltaW5mbzogJXMgaW4gbGluZTogIgorbXNnc3RyICIlc3ZpbWluZm86ICVzIHDlIHJhZDogIgorCisjOiBleF9jbWRzLmM6MTI4OAorbXNnaWQgIkUxMzY6IHZpbWluZm86IFRvbyBtYW55IGVycm9ycywgc2tpcHBpbmcgcmVzdCBvZiBmaWxlIgorbXNnc3RyICJFMTM2OiB2aW1pbmZvOiBG9nIgbeVuZ2EgZmVsLCBob3BwYXIg9nZlciByZXN0ZW4gYXYgZmlsZW4iCisKKyM6IGV4X2NtZHMuYzoxMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAiTORzZXIgdmltaW5mby1maWwgXCIlc1wiJXMlcyVzIgorCisjOiBleF9jbWRzLmM6MTMyNAorbXNnaWQgIiBpbmZvIgorbXNnc3RyICIgaW5mbyIKKworIzogZXhfY21kcy5jOjEzMjUKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiBt5HJrZW4iCisKKyM6IGV4X2NtZHMuYzoxMzI2Cittc2dpZCAiIEZBSUxFRCIKK21zZ3N0ciAiIE1JU1NMWUNLQURFUyIKKworIzogZXhfY21kcy5jOjE0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IFZpbWluZm8tZmlsIORyIGludGUgc2tyaXZiYXI6ICVzIgorCisjOiBleF9jbWRzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiBLYW4gaW50ZSBza3JpdmEgdmltaW5mby1maWwgJXMhIgorCisjOiBleF9jbWRzLmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiCittc2dzdHIgIlNrcml2ZXIgdmltaW5mby1maWwgXCIlc1wiIgorCisjLiBXcml0ZSB0aGUgaW5mbzoKKyM6IGV4X2NtZHMuYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVGhpcyB2aW1pbmZvIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBWaW0gJXMuXG4iCittc2dzdHIgIiMgRGVuIGjkciB2aW1pbmZvLWZpbGVuIGdlbmVyZXJhZGVzIGF2IFZpbSAlcy5cbiIKKworIzogZXhfY21kcy5jOjE2NTEKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIER1IGblciByZWRpZ2VyYSBkZW4gb20gZHUg5HIgZvZyc2lrdGlnIVxuIgorIlxuIgorCisjOiBleF9jbWRzLmM6MTY1MworbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjIFbkcmRlIGF2ICdlbmNvZGluZycgbuRyIGRlbiBo5HIgZmlsZW4gYmxldiBza3JpdmVuXG4iCisKKyM6IGV4X2NtZHMuYzoxNzUyCittc2dpZCAiSWxsZWdhbCBzdGFydGluZyBjaGFyIgorbXNnc3RyICJPdGlsbOV0ZXQgc3RhcnR0ZWNrZW4iCisKKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjE0MAorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiBGaWxlbiDkciBpbmzkc3QgaSBlbiBhbm5hbiBidWZmZXJ0IgorCisjOiBleF9jbWRzLmM6MjE3NAorbXNnaWQgIldyaXRlIHBhcnRpYWwgZmlsZT8iCittc2dzdHIgIlNrcml2IG9mdWxsc3TkbmRpZyBmaWw/IgorCisjOiBleF9jbWRzLmM6MjE4MQorbXNnaWQgIkUxNDA6IFVzZSAhIHRvIHdyaXRlIHBhcnRpYWwgYnVmZmVyIgorbXNnc3RyICJFMTQwOiBBbnbkbmQgISBm9nIgYXR0IHNrcml2YSBvZnVsbHN05G5kaWcgYnVmZmVydCIKKworIzogZXhfY21kcy5jOjIyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUgXCIlLipzXCI/IgorbXNnc3RyICJTa3JpdiD2dmVyIGJlZmludGxpZyBmaWwgXCIlLipzXCI/IgorCisjOiBleF9jbWRzLmM6MjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTQxOiBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkUxNDE6IEluZ2V0IGZpbG5hbW4gZvZyIGJ1ZmZlcnQgJWxkIgorCisjOiBleF9jbWRzLmM6MjQwNQorbXNnaWQgIkUxNDI6IEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24iCittc2dzdHIgIkUxNDI6IEZpbGVuIHNrcmV2cyBpbnRlOiBTa3Jpdm5pbmcg5HIgaW5ha3RpdmVyYXQgbWVkICd3cml0ZSctZmxhZ2dhbiIKKworIzogZXhfY21kcy5jOjI0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIidyZWFkb25seScgb3B0aW9uIGlzIHNldCBmb3IgXCIlLipzXCIuXG4iCisiRG8geW91IHdpc2ggdG8gd3JpdGUgYW55d2F5PyIKK21zZ3N0ciAiIgorIidyZWFkb25seScgZmxhZ2dhbiDkciBzYXR0IGb2ciBcIiUuKnNcIi5cbiIKKyLWbnNrYXIgZHUgYXR0IHNrcml2YSDkbmTlPyIKKworIzogZXhfY21kcy5jOjI1OTcKK21zZ2lkICJFZGl0IEZpbGUiCittc2dzdHIgIlJlZGlnZXJhIGZpbCIKKworIzogZXhfY21kcy5jOjMxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MzogQXV0b2NvbW1hbmRzIHVuZXhwZWN0ZWRseSBkZWxldGVkIG5ldyBidWZmZXIgJXMiCittc2dzdHIgIkUxNDM6IEF1dG9rb21tYW5kb24gdG9nIG925G50YXQgYm9ydCBueSBidWZmZXJ0ICVzIgorCisjOiBleF9jbWRzLmM6MzMwMgorbXNnaWQgIkUxNDQ6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIDp6IgorbXNnc3RyICJFMTQ0OiBpY2tlbnVtZXJpc2t0IGFyZ3VtZW50IHRpbGwgOnoiCisKKyM6IGV4X2NtZHMuYzozMzg3Cittc2dpZCAiRTE0NTogU2hlbGwgY29tbWFuZHMgbm90IGFsbG93ZWQgaW4gcnZpbSIKK21zZ3N0ciAiRTE0NTogU2thbGtvbW1hbmRvbiBpbnRlIHRpbGzldG5hIGkgcnZpbSIKKworIzogZXhfY21kcy5jOjM0OTQKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiBSZWd1bGrkcmEgdXR0cnljayBrYW4gaW50ZSB2YXJhIOV0c2tpbGRhIGF2IGJva3N05HZlciIKKworIzogZXhfY21kcy5jOjM4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKK21zZ3N0ciAiZXJz5HR0IG1lZCAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCisKKyM6IGV4X2NtZHMuYzo0MjE2Cittc2dpZCAiKEludGVycnVwdGVkKSAiCittc2dzdHIgIihBdmJydXRlbikgIgorCisjOiBleF9jbWRzLmM6NDIyMAorbXNnaWQgIjEgc3Vic3RpdHV0aW9uIgorbXNnc3RyICIxIGVyc+R0dG5pbmciCisKKyM6IGV4X2NtZHMuYzo0MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICIlbGQgZXJz5HR0bmluZ2FyIgorCisjOiBleF9jbWRzLmM6NDIyNQorbXNnaWQgIiBvbiAxIGxpbmUiCittc2dzdHIgIiBw5SAxIHJhZCIKKworIzogZXhfY21kcy5jOjQyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uICVsZCBsaW5lcyIKK21zZ3N0ciAiIHDlICVsZCByYWRlciIKKworIzogZXhfY21kcy5jOjQyNzgKK21zZ2lkICJFMTQ3OiBDYW5ub3QgZG8gOmdsb2JhbCByZWN1cnNpdmUiCittc2dzdHIgIkUxNDc6IEthbiBpbnRlIGf2cmEgOmdsb2JhbCByZWt1cnNpdnQiCisKKyM6IGV4X2NtZHMuYzo0MzEzCittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IFJlZ3VsauRydCB1dHRyeWNrIHNha25hcyBmcuVuIGdsb2JhbCIKKworIzogZXhfY21kcy5jOjQzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0dGVybiBmb3VuZCBpbiBldmVyeSBsaW5lOiAlcyIKK21zZ3N0ciAiTfZuc3RlciBmdW5uZXQgaSB2YXJqZSByYWQ6ICVzIgorCisjOiBleF9jbWRzLmM6NDQ0MworbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMgU2VuYXN0ZSBlcnPkdHRuaW5nc3N0cuRuZzpcbiIKKyIkIgorCisjOiBleF9jbWRzLmM6NDU1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQ5OiBTb3JyeSwgbm8gaGVscCBmb3IgJXMiCittc2dzdHIgIkUxNDk6IFR5duRyciwgaW5nZW4gaGrkbHAgZvZyICVzIgorCisjOiBleF9jbWRzLmM6NDU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiCittc2dzdHIgIlR5duRyciwgaGrkbHBmaWwgXCIlc1wiIGhpdHRhZGVzIGludGUiCisKKyM6IGV4X2NtZHMuYzo1MDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTA6IE5vdCBhIGRpcmVjdG9yeTogJXMiCittc2dzdHIgIkUxNTA6IEludGUgZW4ga2F0YWxvZzogJXMiCisKKyM6IGV4X2NtZHMuYzo1MDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTI6IENhbm5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTUyOiBLYW4gaW50ZSD2cHBuYSAlcyBm9nIgc2tyaXZuaW5nIgorCisjOiBleF9jbWRzLmM6NTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE1MzogS3VuZGUgaW50ZSD2cHBuYSAlcyBm9nIgbORzbmluZyIKKworIzogZXhfY21kcy5jOjUyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcyIKK21zZ3N0ciAiRTE1NDogRHVwbGljZXJhZCB0YWdnIFwiJXNcIiBpIGZpbCAlcyIKKworIzogZXhfY21kcy5jOjUzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiBPa+RudCBzaWduYXR1cmtvbW1hbmRvOiAlcyIKKworIzogZXhfY21kcy5jOjUzMzYKK21zZ2lkICJFMTU2OiBNaXNzaW5nIHNpZ24gbmFtZSIKK21zZ3N0ciAiRTE1NjogU2FrbmFyIHNpZ25hdHVybmFtbiIKKworIzogZXhfY21kcy5jOjUzODIKK21zZ2lkICJFNjEyOiBUb28gbWFueSBzaWducyBkZWZpbmVkIgorbXNnc3RyICJFNjEyOiBG9nIgbeVuZ2Egc2lnbmF0dXJlciBkZWZpbmllcmFkZSIKKworIzogZXhfY21kcy5jOjU0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzOTogSW52YWxpZCBzaWduIHRleHQ6ICVzIgorbXNnc3RyICJFMjM5OiBPZ2lsdGlnIHNpZ25hdHVydGV4dDogJXMiCisKKyM6IGV4X2NtZHMuYzo1NDgwIGV4X2NtZHMuYzo1NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTU6IFVua25vd24gc2lnbjogJXMiCittc2dzdHIgIkUxNTU6IE9r5G5kIHNpZ25hdHVyOiAlcyIKKworIzogZXhfY21kcy5jOjU1MjYKK21zZ2lkICJFMTU5OiBNaXNzaW5nIHNpZ24gbnVtYmVyIgorbXNnc3RyICJFMTU5OiBTYWtuYXIgc2lnbmF0dXJudW1tZXIiCisKKyM6IGV4X2NtZHMuYzo1NjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTg6IEludmFsaWQgYnVmZmVyIG5hbWU6ICVzIgorbXNnc3RyICJFMTU4OiBPZ2lsdGlndCBidWZmZXJ0bmFtbjogJXMiCisKKyM6IGV4X2NtZHMuYzo1NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiBPZ2lsdGlndCBzaWduYXR1ci1JRDogJWxkIgorCisjOiBleF9jbWRzLmM6NTcxNQorbXNnaWQgIiAoTk9UIEZPVU5EKSIKK21zZ3N0ciAiIChJTlRFIEhJVFRBREUpIgorCisjOiBleF9jbWRzLmM6NTcxNworbXNnaWQgIiAobm90IHN1cHBvcnRlZCkiCittc2dzdHIgIiAoc3T2ZHMgaW50ZSkiCisKKyM6IGV4X2NtZHMuYzo1ODE2Cittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJbQm9ydHRhZ2VuXSIKKworIzogZXhfZG9jbWQuYzo0OTAKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAiR+VyIGluIGkgRXgtbORnZS4gIFNrcml2IFwidmlzdWFsXCIgZvZyIGF0dCBn5SB0aWxsIE5vcm1hbC1s5GdlLiIKKworIy4gbXVzdCBiZSBhdCBFT0YKKyM6IGV4X2RvY21kLmM6NTI2Cittc2dpZCAiRTUwMTogQXQgZW5kLW9mLWZpbGUiCittc2dzdHIgIkU1MDE6IFZpZCBmaWxzbHV0IgorCisjOiBleF9kb2NtZC5jOjYzMgorbXNnaWQgIkUxNjk6IENvbW1hbmQgdG9vIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE2OTogS29tbWFuZG8gZvZyIHJla3Vyc2l2dCIKKworIzogZXhfZG9jbWQuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDU6IEV4Y2VwdGlvbiBub3QgY2F1Z2h0OiAlcyIKK21zZ3N0ciAiRTYwNTogVW5kYW50YWcgaW50ZSBm5W5nYXQ6ICVzIgorCisjOiBleF9kb2NtZC5jOjEyNDEKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICJTbHV0IHDlIGzkc3QgZmlsIgorCisjOiBleF9kb2NtZC5jOjEyNDIKK21zZ2lkICJFbmQgb2YgZnVuY3Rpb24iCittc2dzdHIgIlNsdXQgcOUgZnVua3Rpb24iCisKKyM6IGV4X2RvY21kLmM6MTcwNgorbXNnaWQgIkU0NjQ6IEFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgIkU0NjQ6IE90eWRsaWcgYW525G5kbmluZyBhdiBhbnbkbmRhcmRlZmluaWVyYXQga29tbWFuZG8iCisKKyM6IGV4X2RvY21kLmM6MTcyMAorbXNnaWQgIkU0OTI6IE5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAiRTQ5MjogSW50ZSBldHQgcmVkaWdlcmFya29tbWFuZG8iCisKKyM6IGV4X2RvY21kLmM6MTgxMAorbXNnaWQgIkU0Nzg6IERvbid0IHBhbmljISIKK21zZ3N0ciAiRTQ3ODogRuUgaW50ZSBwYW5payEiCisKKyM6IGV4X2RvY21kLmM6MTgyOQorbXNnaWQgIkU0OTM6IEJhY2t3YXJkcyByYW5nZSBnaXZlbiIKK21zZ3N0ciAiRTQ5MzogQmFr5XRvbXLlZGUgZ2l2ZXQiCisKKyM6IGV4X2RvY21kLmM6MTgzOAorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiwgT0sgdG8gc3dhcCIKK21zZ3N0ciAiQmFr5XRvbXLlZGUgZ2l2ZXQsIE9LIGF0dCB25HhsYSIKKworIzogZXhfZG9jbWQuYzoxOTYxCittc2dpZCAiRTQ5NDogVXNlIHcgb3Igdz4+IgorbXNnc3RyICJFNDk0OiBBbnbkbmQgdyBlbGxlciB3Pj4iCisKKyM6IGV4X2RvY21kLmM6MzU3MAorbXNnaWQgIkUzMTk6IFNvcnJ5LCB0aGUgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTMxOTogVHl25HJyLCBrb21tYW5kb3Qg5HIgaW50ZSB0aWxsZ+RuZ2xpZ3QgaSBkZW4gaORyIHZlcnNpb25lbiIKKworIzogZXhfZG9jbWQuYzozNzU2Cittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6IEJhcmEgZXR0IGZpbG5hbW4gdGlsbOV0ZXQiCisKKyM6IGV4X2RvY21kLmM6NDMyMAorbXNnaWQgIjEgbW9yZSBmaWxlIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIjEgZmlsIHRpbGwgYXR0IHJlZGlnZXJhLiAgQXZzbHV0YSDkbmTlPyIKKworIzogZXhfZG9jbWQuYzo0MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG1vcmUgZmlsZXMgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIKK21zZ3N0ciAiJWQgZmlsZXIgdGlsbCBhdHQgcmVkaWdlcmEuICBBdnNsdXRhIORuZOU/IgorCisjOiBleF9kb2NtZC5jOjQzMzAKK21zZ2lkICJFMTczOiAxIG1vcmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTczOiAxIGZpbCB0aWxsIGF0dCByZWRpZ2VyYSIKKworIzogZXhfZG9jbWQuYzo0MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzM6ICVsZCBtb3JlIGZpbGVzIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6ICVsZCBmaWxlciB0aWxsIGF0dCByZWRpZ2VyYSIKKworIzogZXhfZG9jbWQuYzo0NDI3Cittc2dpZCAiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogYWRkICEgdG8gcmVwbGFjZSBpdCIKK21zZ3N0ciAiRTE3NDogS29tbWFuZG8gZXhpc3RlcmFyIHJlZGFuOiBs5GdnIHRpbGwgISBm9nIgYXR0IGVyc+R0dGEgZGV0IgorCisjOiBleF9kb2NtZC5jOjQ1MzcKK21zZ2lkICIiCisiXG4iCisiICAgIE5hbWUgICAgICAgIEFyZ3MgUmFuZ2UgQ29tcGxldGUgIERlZmluaXRpb24iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgTmFtbiAgICAgICAgQXJnIE9tcuVkZSBG5HJkaWd0ICBEZWZpbml0aW9uIgorCisjOiBleF9kb2NtZC5jOjQ2MjYKK21zZ2lkICJObyB1c2VyLWRlZmluZWQgY29tbWFuZHMgZm91bmQiCittc2dzdHIgIkluZ2EgYW525G5kYXJkZWZpbmllcmFkZSBrb21tYW5kb24gaGl0dGFkZSIKKworIzogZXhfZG9jbWQuYzo0NjU4Cittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTogSW5nYSBhdHRyaWJ1dCBhbmdpdm5hIgorCisjOiBleF9kb2NtZC5jOjQ3MTAKK21zZ2lkICJFMTc2OiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIkUxNzY6IE9naWx0aWd0IGFudGFsIGFyZ3VtZW50IgorCisjOiBleF9kb2NtZC5jOjQ3MjUKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiBBbnRhbCBrYW4gaW50ZSBhbmdlcyB0duUgZ+VuZ2VyIgorCisjOiBleF9kb2NtZC5jOjQ3MzUKK21zZ2lkICJFMTc4OiBJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIGNvdW50IgorbXNnc3RyICJFMTc4OiBPZ2lsdGlndCBzdGFuZGFyZHbkcmRlIGb2ciBhbnRhbCIKKworIzogZXhfZG9jbWQuYzo0NzY2Cittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiBhcmd1bWVudCBrcuR2cyBm9nIga29tcGxldHRlcmluZyIKKworIzogZXhfZG9jbWQuYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiBPZ2lsdGlndCBrb21wbGV0dGVyaW5nc3bkcmRlOiAlcyIKKworIzogZXhfZG9jbWQuYzo0ODAzCittc2dpZCAiRTQ2NzogQ3VzdG9tIGNvbXBsZXRpb24gcmVxdWlyZXMgYSBmdW5jdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiRTQ2NzogU3BlY2lhbGtvbXBsZXR0ZXJpbmcga3LkdmVyIGV0dCBmdW5rdGlvbnNhcmd1bWVudCIKKworIzogZXhfZG9jbWQuYzo0ODA4Cittc2dpZCAiRTQ2ODogQ29tcGxldGlvbiBhcmd1bWVudCBvbmx5IGFsbG93ZWQgZm9yIGN1c3RvbSBjb21wbGV0aW9uIgorbXNnc3RyICJFNDY4OiBLb21wbGV0dGVyaW5nc2FyZ3VtZW50IGJhcmEgdGlsbOV0ZXQgZvZyIHNwZWNpYWxrb21wbGV0dGVyaW5nIgorCisjOiBleF9kb2NtZC5jOjQ4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MTogSW52YWxpZCBhdHRyaWJ1dGU6ICVzIgorbXNnc3RyICJFMTgxOiBPZ2lsdGlndCBhdHRyaWJ1dDogJXMiCisKKyM6IGV4X2RvY21kLmM6NDg2MQorbXNnaWQgIkUxODI6IEludmFsaWQgY29tbWFuZCBuYW1lIgorbXNnc3RyICJFMTgyOiBPZ2lsdGlndCBrb21tYW5kb25hbW4iCisKKyM6IGV4X2RvY21kLmM6NDg3NgorbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4MzogQW525G5kYXJkZWZpbmllcmFkZSBrb21tYW5kb24gbeVzdGUgYvZyamEgbWVkIGVuIHN0b3IgYm9rc3RhdiIKKworIzogZXhfZG9jbWQuYzo0OTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODQ6IE5vIHN1Y2ggdXNlci1kZWZpbmVkIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTg0OiBJbmdldCBz5WRhbnQgYW525G5kYXJkZWZpbmllcmF0IGtvbW1hbmRvOiAlcyIKKworIzogZXhfZG9jbWQuYzo1NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTogS2FuIGludGUgaGl0dGEgZuRyZ3NjaGVtYSAlcyIKKworIzogZXhfZG9jbWQuYzo1NDEzCittc2dpZCAiR3JlZXRpbmdzLCBWaW0gdXNlciEiCittc2dzdHIgIlbkbGtvbW1lbiwgVmltLWFuduRuZGFyZSEiCisKKyM6IGV4X2RvY21kLmM6NjEzNgorbXNnaWQgIkVkaXQgRmlsZSBpbiBuZXcgd2luZG93IgorbXNnc3RyICJSZWRpZ2VyYSBmaWwgaSBueXR0IGb2bnN0ZXIiCisKKyM6IGV4X2RvY21kLmM6NjQzMQorbXNnaWQgIk5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiSW5nZW4gduR4bGluZ3NmaWwiCisKKyM6IGV4X2RvY21kLmM6NjUzNQorbXNnaWQgIkFwcGVuZCBGaWxlIgorbXNnc3RyICJM5GdnIHRpbGwgZmlsIgorCisjOiBleF9kb2NtZC5jOjY1OTkKK21zZ2lkICJFMTg2OiBObyBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkUxODY6IEluZ2VuIHRpZGlnYXJlIGthdGFsb2ciCisKKyM6IGV4X2RvY21kLmM6NjY4MQorbXNnaWQgIkUxODc6IFVua25vd24iCittc2dzdHIgIkUxODc6IE9r5G50IgorCisjOiBleF9kb2NtZC5jOjY3NjYKK21zZ2lkICJFNDY1OiA6d2luc2l6ZSByZXF1aXJlcyB0d28gbnVtYmVyIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTQ2NTogOndpbnNpemUga3LkdmVyIHR25SBzaWZmZXJhcmd1bWVudCIKKworIzogZXhfZG9jbWQuYzo2ODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIldpbmRvdyBwb3NpdGlvbjogWCAlZCwgWSAlZCIKK21zZ3N0ciAiRvZuc3RlcnBvc2l0aW9uOiBYICVkLCBZICVkIgorCisjOiBleF9kb2NtZC5jOjY4MjIKK21zZ2lkICJFMTg4OiBPYnRhaW5pbmcgd2luZG93IHBvc2l0aW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiIgorIkUxODg6IEb2cnNrYWZmYSBm9m5zdGVycG9zaXRpb24gaW50ZSBpbXBsZW1lbnRlcmF0IGb2ciBkZW4gaORyIHBsYXR0Zm9ybWVuIgorCisjOiBleF9kb2NtZC5jOjY4MzIKK21zZ2lkICJFNDY2OiA6d2lucG9zIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY2OiA6d2lucG9zIGty5HZlciB0duUgc2lmZmVyYXJndW1lbnQiCisKKyM6IGV4X2RvY21kLmM6NzExMQorbXNnaWQgIlNhdmUgUmVkaXJlY3Rpb24iCittc2dzdHIgIlNwYXJhIG9tZGlyaWdlcmluZyIKKworIzogZXhfZG9jbWQuYzo3MjkyCittc2dpZCAiU2F2ZSBWaWV3IgorbXNnc3RyICJTcGFyYSB2eSIKKworIzogZXhfZG9jbWQuYzo3MjkzCittc2dpZCAiU2F2ZSBTZXNzaW9uIgorbXNnc3RyICJTcGFyYSBzZXNzaW9uIgorCisjOiBleF9kb2NtZC5jOjcyOTUKK21zZ2lkICJTYXZlIFNldHVwIgorbXNnc3RyICJTcGFyYSBrb25maWd1cmF0aW9uIgorCisjOiBleF9kb2NtZC5jOjc0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4OTogXCIlc1wiIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTg5OiBcIiVzXCIgZXhpc3RlcmFyIChs5GdnIHRpbGwgISBm9nIgYXR0IHR2aW5nYSkiCisKKyM6IGV4X2RvY21kLmM6NzQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxOTA6IEthbiBpbnRlIPZwcG5hIFwiJXNcIiBm9nIgc2tyaXZuaW5nIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo3NDc1Cittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICIiCisiRTE5MTogQXJndW1lbnQgbeVzdGUgdmFyYSBlbiBib2tzdGF2IGVsbGVyIGZyYW3ldC0vYmFr5XR25G50IGNpdGF0dGVja2VuIgorCisjOiBleF9kb2NtZC5jOjc1MTcKK21zZ2lkICJFMTkyOiBSZWN1cnNpdmUgdXNlIG9mIDpub3JtYWwgdG9vIGRlZXAiCittc2dzdHIgIkUxOTI6IFJla3Vyc2l2IGFuduRuZG5pbmcgYXYgOm5vcm1hbCBm9nIgZGp1cCIKKworIzogZXhfZG9jbWQuYzo4MDMzCittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6IEluZ2V0IGFsdGVybmF0aXZ0IGZpbG5hbW4gYXR0IGJ5dGEgdXQgJyMnIG1lZCIKKworIzogZXhfZG9jbWQuYzo4MDY0Cittc2dpZCAiRTQ5NTogbm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIgorbXNnc3RyICJFNDk1OiBpbmdldCBhdXRva29tbWFuZG8tZmlsbmFtbiBhdHQgZXJz5HR0YSBcIjxhZmlsZT5cIiBtZWQiCisKKyM6IGV4X2RvY21kLmM6ODA3MgorbXNnaWQgIkU0OTY6IG5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAiRTQ5NjogaW5nZXQgYXV0b2tvbW1hbmRvLWJ1ZmZlcm51bW1lciBhdHQgZXJz5HR0YSBcIjxhYnVmPlwiIG1lZCIKKworIzogZXhfZG9jbWQuYzo4MDgzCittc2dpZCAiRTQ5Nzogbm8gYXV0b2NvbW1hbmQgbWF0Y2ggbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhbWF0Y2g+XCIiCittc2dzdHIgIkU0OTc6IGluZ2V0IGF1dG9rb21tYW5kby10cuRmZm5hbW4gYXR0IGJ5dGEgdXQgXCI8YW1hdGNoPlwiIG1lZCIKKworIzogZXhfZG9jbWQuYzo4MDkzCittc2dpZCAiRTQ5ODogbm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIkU0OTg6IGluZ2V0IDpzb3VyY2UtZmlsbmFtbiBhdHQgYnl0YSB1dCBcIjxzZmlsZT5cIiBtZWQiCisKKyM6IGV4X2RvY21kLmM6ODEzNAorIywgbm8tYy1mb3JtYXQKK21zZ2lkICJFNDk5OiBFbXB0eSBmaWxlIG5hbWUgZm9yICclJyBvciAnIycsIG9ubHkgd29ya3Mgd2l0aCBcIjpwOmhcIiIKK21zZ3N0ciAiRTQ5OTogVG9tdCBmaWxuYW1uIGb2ciAnJScgb3IgJyMnLCBmdW5nZXJhciBiYXJhIG1lZCBcIjpwOmhcIiIKKworIzogZXhfZG9jbWQuYzo4MTM2Cittc2dpZCAiRTUwMDogRXZhbHVhdGVzIHRvIGFuIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiRTUwMDogRXZhbHVlcmFyIHRpbGwgZW4gdG9tIHN0cuRuZyIKKworIzogZXhfZG9jbWQuYzo5MDY3Cittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiBLYW4gaW50ZSD2cHBuYSB2aW1pbmZvLWZpbCBm9nIgbORzbmluZyIKKworIzogZXhfZG9jbWQuYzo5MjQwCittc2dpZCAiRTE5NjogTm8gZGlncmFwaHMgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMTk2OiBJbmdhIGRpZ3JhZmVyIGkgZGVuIGjkciB2ZXJzaW9uZW4iCisKKyM6IGV4X2V2YWwuYzo0MjMKK21zZ2lkICJFNjA4OiBDYW5ub3QgOnRocm93IGV4Y2VwdGlvbnMgd2l0aCAnVmltJyBwcmVmaXgiCittc2dzdHIgIkU2MDg6IEthbiBpbnRlIDp0aHJvdyB1bmRhbnRhZyBtZWQgJ1ZpbSctcHJlZml4IgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV4X2V2YWwuYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhjZXB0aW9uIHRocm93bjogJXMiCittc2dzdHIgIlVuZGFudGFnIGthc3RhZGU6ICVzIgorCisjOiBleF9ldmFsLmM6NTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBmaW5pc2hlZDogJXMiCittc2dzdHIgIlVuZGFudGFnIGbkcmRpZ2E6ICVzIgorCisjOiBleF9ldmFsLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBkaXNjYXJkZWQ6ICVzIgorbXNnc3RyICJVbmRhbnRhZyBm9nJrYXN0YWRlOiAlcyIKKworIzogZXhfZXZhbC5jOjYwMCBleF9ldmFsLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBsaW5lICVsZCIKK21zZ3N0ciAiJXMsIHJhZCAlbGQiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjYxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gY2F1Z2h0OiAlcyIKK21zZ3N0ciAiVW5kYW50YWcgZuVuZ2FkZTogJXMiCisKKyM6IGV4X2V2YWwuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbWFkZSBwZW5kaW5nIgorbXNnc3RyICIlcyBnam9yZGVzIGF2dmFrdGFuZGUiCisKKyM6IGV4X2V2YWwuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzdW1lZCIKK21zZ3N0ciAiJXMg5XRlcnVwcHRhZ2VuIgorCisjOiBleF9ldmFsLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2NhcmRlZCIKK21zZ3N0ciAiJXMgZvZya2FzdGFkIgorCisjOiBleF9ldmFsLmM6NzI2Cittc2dpZCAiRXhjZXB0aW9uIgorbXNnc3RyICJVbmRhbnRhZyIKKworIzogZXhfZXZhbC5jOjczMgorbXNnaWQgIkVycm9yIGFuZCBpbnRlcnJ1cHQiCittc2dzdHIgIkZlbCBvY2ggYXZicnl0ZXQiCisKKyM6IGV4X2V2YWwuYzo3MzQgZ3VpLmM6NDI1OQorbXNnaWQgIkVycm9yIgorbXNnc3RyICJGZWwiCisKKyMuIGlmIChwZW5kaW5nICYgQ1NUUF9JTlRFUlJVUFQpCisjOiBleF9ldmFsLmM6NzM2Cittc2dpZCAiSW50ZXJydXB0IgorbXNnc3RyICJBdmJyeXQiCisKKyM6IGV4X2V2YWwuYzo4MTAKK21zZ2lkICJFNTc5OiA6aWYgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTU3OTogOmlmIG7kc3RsYWQgZvZyIGRqdXB0IgorCisjOiBleF9ldmFsLmM6ODQ3Cittc2dpZCAiRTU4MDogOmVuZGlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgwOiA6ZW5kaWYgdXRhbiA6aWYiCisKKyM6IGV4X2V2YWwuYzo4OTEKK21zZ2lkICJFNTgxOiA6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiRTU4MTogOmVsc2UgdXRhbiA6aWYiCisKKyM6IGV4X2V2YWwuYzo4OTQKK21zZ2lkICJFNTgyOiA6ZWxzZWlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgyOiA6ZWxzZWlmIHV0YW4gOmlmIgorCisjOiBleF9ldmFsLmM6OTAxCittc2dpZCAiRTU4MzogbXVsdGlwbGUgOmVsc2UiCittc2dzdHIgIkU1ODM6IGZsZXJhIDplbHNlIgorCisjOiBleF9ldmFsLmM6OTA0Cittc2dpZCAiRTU4NDogOmVsc2VpZiBhZnRlciA6ZWxzZSIKK21zZ3N0ciAiRTU4NDogOmVsc2VpZiBlZnRlciA6ZWxzZSIKKworIzogZXhfZXZhbC5jOjk3MQorbXNnaWQgIkU1ODU6IDp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTg1OiA6d2hpbGUgbuRzdGxhZCBm9nIgZGp1cHQiCisKKyM6IGV4X2V2YWwuYzoxMDI3Cittc2dpZCAiRTU4NjogOmNvbnRpbnVlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg2OiA6Y29udGludWUgdXRhbiA6d2hpbGUiCisKKyM6IGV4X2V2YWwuYzoxMDY3Cittc2dpZCAiRTU4NzogOmJyZWFrIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg3OiA6YnJlYWsgdXRhbiA6d2hpbGUiCisKKyM6IGV4X2V2YWwuYzoxMjY2Cittc2dpZCAiRTYwMTogOnRyeSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNjAxOiA6dHJ5IG7kc3RsYWQgZvZyIGRqdXB0IgorCisjOiBleF9ldmFsLmM6MTM0NgorbXNnaWQgIkU2MDM6IDpjYXRjaCB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDM6IDpjYXRjaCB1dGFuIDp0cnkiCisKKyMuIEdpdmUgdXAgZm9yIGEgIjpjYXRjaCIgYWZ0ZXIgIjpmaW5hbGx5IiBhbmQgaWdub3JlIGl0LgorIy4gKiBKdXN0IHBhcnNlLgorIzogZXhfZXZhbC5jOjEzNjgKK21zZ2lkICJFNjA0OiA6Y2F0Y2ggYWZ0ZXIgOmZpbmFsbHkiCittc2dzdHIgIkU2MDQ6IDpjYXRjaCBlZnRlciA6ZmluYWxseSIKKworIzogZXhfZXZhbC5jOjE1MDEKK21zZ2lkICJFNjA2OiA6ZmluYWxseSB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDY6IDpmaW5hbGx5IHV0YW4gOnRyeSIKKworIy4gR2l2ZSB1cCBmb3IgYSBtdWx0aXBsZSAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjOiBleF9ldmFsLmM6MTUyNQorbXNnaWQgIkU2MDc6IG11bHRpcGxlIDpmaW5hbGx5IgorbXNnc3RyICJFNjA3OiBmbGVyYSA6ZmluYWxseSIKKworIzogZXhfZXZhbC5jOjE2MzQKK21zZ2lkICJFNjAyOiA6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIKK21zZ3N0ciAiRTYwMjogOmVuZHRyeSB1dGFuIDp0cnkiCisKKyM6IGV4X2V2YWwuYzoxOTY2Cittc2dpZCAiRTE5MzogOmVuZGZ1bmN0aW9uIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTE5MzogOmVuZGZ1bmN0aW9uIGludGUgaW5vbSBlbiBmdW5rdGlvbiIKKworIzogZXhfZ2V0bG4uYzozMjI5Cittc2dpZCAidGFnbmFtZSIKK21zZ3N0ciAidGFnZ25hbW4iCisKKyM6IGV4X2dldGxuLmM6MzIzMgorbXNnaWQgIiBraW5kIGZpbGVcbiIKK21zZ3N0ciAiIHNu5GxsIGZpbFxuIgorCisjOiBleF9nZXRsbi5jOjQ1OTEKK21zZ2lkICInaGlzdG9yeScgb3B0aW9uIGlzIHplcm8iCittc2dzdHIgIidoaXN0b3J5Jy1mbGFnZ2Eg5HIgbm9sbCIKKworIzogZXhfZ2V0bG4uYzo0ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjICVzIEhpc3RvcnkgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyAlcyBIaXN0b3JpYSAobnlhc3RlIHRpbGwg5Gxkc3RhKTpcbiIKKworIzogZXhfZ2V0bG4uYzo0ODU3Cittc2dpZCAiQ29tbWFuZCBMaW5lIgorbXNnc3RyICJLb21tYW5kb3JhZCIKKworIzogZXhfZ2V0bG4uYzo0ODU4Cittc2dpZCAiU2VhcmNoIFN0cmluZyIKK21zZ3N0ciAiU/Zrc3Ry5G5nIgorCisjOiBleF9nZXRsbi5jOjQ4NTkKK21zZ2lkICJFeHByZXNzaW9uIgorbXNnc3RyICJVdHRyeWNrIgorCisjOiBleF9nZXRsbi5jOjQ4NjAKK21zZ2lkICJJbnB1dCBMaW5lIgorbXNnc3RyICJJbm1hdG5pbmdzcmFkIgorCisjOiBleF9nZXRsbi5jOjQ4OTgKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyIGJvcnRvbSBrb21tYW5kb2zkbmdkZW4iCisKKyM6IGV4X2dldGxuLmM6NTA3NQorbXNnaWQgIkUxOTk6IEFjdGl2ZSB3aW5kb3cgb3IgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIkUxOTk6IEFrdGl2dCBm9m5zdGVyIGVsbGVyIGJ1ZmZlcnQgYm9ydHRhZ2VuIgorCisjOiBmaWxlaW8uYzozNjkKK21zZ2lkICJJbGxlZ2FsIGZpbGUgbmFtZSIKK21zZ3N0ciAiT3RpbGzldGV0IGZpbG5hbW4iCisKKyM6IGZpbGVpby5jOjM5MyBmaWxlaW8uYzo1MTggZmlsZWlvLmM6MjczMCBmaWxlaW8uYzoyNzcxCittc2dpZCAiaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIuRyIGVuIGthdGFsb2ciCisKKyM6IGZpbGVpby5jOjM5NQorbXNnaWQgImlzIG5vdCBhIGZpbGUiCittc2dzdHIgIuRyIGludGUgZW4gZmlsIgorCisjOiBmaWxlaW8uYzo1NDAgZmlsZWlvLmM6Mzg5MgorbXNnaWQgIltOZXcgRmlsZV0iCittc2dzdHIgIltOeSBmaWxdIgorCisjOiBmaWxlaW8uYzo1NzMKK21zZ2lkICJbUGVybWlzc2lvbiBEZW5pZWRdIgorbXNnc3RyICJbVGlsbOV0ZWxzZSBuZWthc10iCisKKyM6IGZpbGVpby5jOjY3NworbXNnaWQgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtYWRlIHRoZSBmaWxlIHVucmVhZGFibGUiCittc2dzdHIgIkUyMDA6ICpSZWFkUHJlIGF1dG9rb21tYW5kb24gZ2pvcmRlIGZpbGVuIG9s5HNiYXIiCisKKyM6IGZpbGVpby5jOjY3OQorbXNnaWQgIkUyMDE6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUyMDE6ICpSZWFkUHJlIGF1dG9rb21tYW5kb24gZuVyIGludGUg5G5kcmEgbnV2YXJhbmRlIGJ1ZmZlcnQiCisKKyM6IGZpbGVpby5jOjcwMAorbXNnaWQgIlZpbTogUmVhZGluZyBmcm9tIHN0ZGluLi4uXG4iCittc2dzdHIgIlZpbTogTORzZXIgZnLlbiBzdGFuZGFyZCBpbi4uLlxuIgorCisjOiBmaWxlaW8uYzo3MDYKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIkzkc2VyIGZy5W4gc3RhbmRhcmQgaW4uLi4iCisKKyMuIFJlLW9wZW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgZmFpbGVkIQorIzogZmlsZWlvLmM6OTUxCittc2dpZCAiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiCittc2dzdHIgIkUyMDI6IEtvbnZlcnRlcmluZyBnam9yZGUgZmlsZW4gb2zkc2JhciEiCisKKyM6IGZpbGVpby5jOjE5MTcKK21zZ2lkICJbZmlmby9zb2NrZXRdIgorbXNnc3RyICJbZmlmby91dHRhZ10iCisKKyM6IGZpbGVpby5jOjE5MjQKK21zZ2lkICJbZmlmb10iCittc2dzdHIgIltmaWZvXSIKKworIzogZmlsZWlvLmM6MTkzMQorbXNnaWQgIltzb2NrZXRdIgorbXNnc3RyICJbdXR0YWddIgorCisjOiBmaWxlaW8uYzoxOTM5Cittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW0VMXSIKKworIzogZmlsZWlvLmM6MTk0OQorbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW0NSIHNha25hc10iCisKKyM6IGZpbGVpby5jOjE5NTQKK21zZ2lkICJbTkwgZm91bmRdIgorbXNnc3RyICJbTkwgaGl0dGF0XSIKKworIzogZmlsZWlvLmM6MTk1OQorbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW2zlbmdhIHJhZGVyIGRlbGFkZV0iCisKKyM6IGZpbGVpby5jOjE5NjUgZmlsZWlvLmM6Mzg3NgorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW0lOVEUga29udmVydGVyYWRdIgorCisjOiBmaWxlaW8uYzoxOTcwIGZpbGVpby5jOjM4ODEKK21zZ2lkICJbY29udmVydGVkXSIKK21zZ3N0ciAiW2tvbnZlcnRlcmFkXSIKKworIzogZmlsZWlvLmM6MTk3NyBmaWxlaW8uYzozOTA2Cittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJba3J5cHRlcmFkXSIKKworIzogZmlsZWlvLmM6MTk4NAorbXNnaWQgIltDT05WRVJTSU9OIEVSUk9SXSIKK21zZ3N0ciAiW0tPTlZFUlRFUklOR1NGRUxdIgorCisjOiBmaWxlaW8uYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIltJTExFR0FMIEJZVEUgaW4gbGluZSAlbGRdIgorbXNnc3RyICJbT1RJTEzFVEVOIEJJVCBw5SByYWQgJWxkXSIKKworIzogZmlsZWlvLmM6MTk5NworbXNnaWQgIltSRUFEIEVSUk9SU10iCittc2dzdHIgIltMxFNGRUxdIgorCisjOiBmaWxlaW8uYzoyMjEzCittc2dpZCAiQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIGNvbnZlcnNpb24iCittc2dzdHIgIkthbiBpbnRlIGhpdHRhIHRlbXBvcuRyIGZpbCBm9nIga29udmVydGVyaW5nIgorCisjOiBmaWxlaW8uYzoyMjIwCittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICJLb252ZXJ0ZXJpbmcgbWVkICdjaGFyY29udmVydCcgbWlzc2x5Y2thZGVzIgorCisjOiBmaWxlaW8uYzoyMjIzCittc2dpZCAiY2FuJ3QgcmVhZCBvdXRwdXQgb2YgJ2NoYXJjb252ZXJ0JyIKK21zZ3N0ciAia2FuIGludGUgbORzYSB1dGRhdGEgYXYgJ2NoYXJjb252ZXJ0JyIKKworIzogZmlsZWlvLmM6MjYxNworbXNnaWQgIkUyMDM6IEF1dG9jb21tYW5kcyBkZWxldGVkIG9yIHVubG9hZGVkIGJ1ZmZlciB0byBiZSB3cml0dGVuIgorbXNnc3RyICIiCisiRTIwMzogQXV0b2tvbW1hbmRvbiB0b2cgYm9ydCBlbGxlciBsYWRkYWRlIHVyIGJ1ZmZlcnQgc29tIHNrdWxsZSBza3JpdmFzIgorCisjOiBmaWxlaW8uYzoyNjQwCittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IEF1dG9rb21tYWRvIORuZHJhZGUgYW50YWwgcmFkZXIgcOUgZXR0IG925G50YXQgc+R0dCIKKworIzogZmlsZWlvLmM6MjY3NAorbXNnaWQgIk5ldEJlYW5zIGRpc3NhbGxvd3Mgd3JpdGVzIG9mIHVubW9kaWZpZWQgYnVmZmVycyIKK21zZ3N0ciAiTmV0QmVhbnMgdGlsbOV0ZXIgaW50ZSBza3Jpdm5pbmcgYXYgb21vZGlmaWVyYWRlIGJ1ZmZlcnRhciIKKworIzogZmlsZWlvLmM6MjY4MgorbXNnaWQgIlBhcnRpYWwgd3JpdGVzIGRpc2FsbG93ZWQgZm9yIE5ldEJlYW5zIGJ1ZmZlcnMiCittc2dzdHIgIkRlbHZpc2Egc2tyaXZuaW5nYXIgdGlsbOV0cyBpbnRlIGkgTmV0QmVhbnMtYnVmZmVydGFyIgorCisjOiBmaWxlaW8uYzoyNzM2IGZpbGVpby5jOjI3NTQKK21zZ2lkICJpcyBub3QgYSBmaWxlIG9yIHdyaXRhYmxlIGRldmljZSIKK21zZ3N0ciAi5HIgaW50ZSBlbiBmaWwgZWxsZXIgc2tyaXZiYXIgZW5oZXQiCisKKyM6IGZpbGVpby5jOjI4MDYKK21zZ2lkICJpcyByZWFkLW9ubHkgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAi5HIgc2tyaXZza3lkZGFkIChs5GdnIHRpbGwgISBm9nIgYXR0IHR2aW5nYSkiCisKKyM6IGZpbGVpby5jOjMxMjQKK21zZ2lkICJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA2OiBLYW4gaW50ZSBza3JpdmEgdGlsbCBz5GtlcmhldHNrb3BpYSAobORnZyB0aWxsICEgZvZyIGF0dCB0dmluZ2EpIgorCisjOiBmaWxlaW8uYzozMTM2Cittc2dpZCAiRTUwNzogQ2xvc2UgZXJyb3IgZm9yIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDc6IFN05G5nbmluZ3NmZWwgZvZyIHPka2VyaGV0c2tvcGlhIChs5GdnIHRpbGwgISBm9nIgYXR0IHR2aW5nYSkiCisKKyM6IGZpbGVpby5jOjMxMzgKK21zZ2lkICJFNTA4OiBDYW4ndCByZWFkIGZpbGUgZm9yIGJhY2t1cCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICIiCisiRTUwODogS2FuIGludGUgbORzYSBmaWwgZvZyIHPka2VyaGV0c2tvcGlhIChs5GdnIHRpbGwgISBm9nIgYXR0IHR2aW5nYSkiCisKKyM6IGZpbGVpby5jOjMxNTQKK21zZ2lkICJFNTA5OiBDYW5ub3QgY3JlYXRlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDk6IEthbiBpbnRlIHNrYXBhIHPka2VyaGV0c2tvcGlhIChs5GdnIHRpbGwgISBm9nIgYXR0IHR2aW5nYSkiCisKKyM6IGZpbGVpby5jOjMyNTcKK21zZ2lkICJFNTEwOiBDYW4ndCBtYWtlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MTA6IEthbiBpbnRlIGf2cmEgc+RrZXJoZXRza29waWEgKGzkZ2cgdGlsbCAhIGb2ciBhdHQgdHZpbmdhKSIKKworIzogZmlsZWlvLmM6MzMxOQorbXNnaWQgIkU0NjA6IFRoZSByZXNvdXJjZSBmb3JrIHdvdWxkIGJlIGxvc3QgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ2MDogUmVzdXJzZ3JlbmVuIHNrdWxsZSB0YXBwYXMgYm9ydCAobORnZyB0aWxsICEgZvZyIGF0dCB0dmluZ2EpIgorCisjOiBmaWxlaW8uYzozNDIwCittc2dpZCAiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTQ6IEthbiBpbnRlIGhpdHRhIHRlbXBvcuRyIGZpbCBm9nIgc2tyaXZuaW5nIgorCisjOiBmaWxlaW8uYzozNDM4Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKGFkZCAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIiIKKyJFMjEzOiBLYW4gaW50ZSBrb252ZXJ0ZXJhIChs5GdnIHRpbGwgISBm9nIgYXR0IHNrcml2YSB1dGFuIGtvbnZlcnRlcmluZykiCisKKyM6IGZpbGVpby5jOjM0NzMKK21zZ2lkICJFMTY2OiBDYW4ndCBvcGVuIGxpbmtlZCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTY2OiBLYW4gaW50ZSD2cHBuYSBs5G5rYWQgZmlsIGb2ciBza3Jpdm5pbmciCisKKyM6IGZpbGVpby5jOjM0NzcKK21zZ2lkICJFMjEyOiBDYW4ndCBvcGVuIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTI6IEthbiBpbnRlIPZwcG5hIGZpbCBm9nIgc2tyaXZuaW5nIgorCisjOiBmaWxlaW8uYzozNzI3Cittc2dpZCAiRTUxMjogQ2xvc2UgZmFpbGVkIgorbXNnc3RyICJFNTEyOiBTdORuZ25pbmcgbWlzc2x5Y2thZGVzIgorCisjOiBmaWxlaW8uYzozNzk4Cittc2dpZCAiRTUxMzogd3JpdGUgZXJyb3IsIGNvbnZlcnNpb24gZmFpbGVkIgorbXNnc3RyICJFNTEzOiBza3JpdmZlbCwga29udmVydGVyaW5nIG1pc3NseWNrYWRlcyIKKworIzogZmlsZWlvLmM6MzgwNAorbXNnaWQgIkU1MTQ6IHdyaXRlIGVycm9yIChmaWxlIHN5c3RlbSBmdWxsPykiCittc2dzdHIgIkU1MTQ6IHNrcml2ZmVsIChmaWxzeXN0ZW0gZnVsbHQ/KSIKKworIzogZmlsZWlvLmM6Mzg3MQorbXNnaWQgIiBDT05WRVJTSU9OIEVSUk9SIgorbXNnc3RyICIgS09OVkVSVEVSSU5HU0ZFTCIKKworIzogZmlsZWlvLmM6Mzg4NworbXNnaWQgIltEZXZpY2VdIgorbXNnc3RyICJbRW5oZXRdIgorCisjOiBmaWxlaW8uYzozODkyCittc2dpZCAiW05ld10iCittc2dzdHIgIltOeV0iCisKKyM6IGZpbGVpby5jOjM5MTQKK21zZ2lkICIgW2FdIgorbXNnc3RyICIgW2xdIgorCisjOiBmaWxlaW8uYzozOTE0Cittc2dpZCAiIGFwcGVuZGVkIgorbXNnc3RyICIgbGFkZSB0aWxsIgorCisjOiBmaWxlaW8uYzozOTE2Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiIFtzXSIKKworIzogZmlsZWlvLmM6MzkxNgorbXNnaWQgIiB3cml0dGVuIgorbXNnc3RyICIgc2tyaXZlbiIKKworIzogZmlsZWlvLmM6Mzk2NgorbXNnaWQgIkUyMDU6IFBhdGNobW9kZTogY2FuJ3Qgc2F2ZSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA1OiBQYXRjaGzkZ2U6IGthbiBpbnRlIHNwYXJhIG9yZ2luYWxmaWwiCisKKyM6IGZpbGVpby5jOjM5ODgKK21zZ2lkICJFMjA2OiBwYXRjaG1vZGU6IGNhbid0IHRvdWNoIGVtcHR5IG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDY6IHBhdGNobORnZToga2FuIGludGUgc2thcGEgdG9tIG9yZ2luYWxmaWwiCisKKyM6IGZpbGVpby5jOjQwMDMKK21zZ2lkICJFMjA3OiBDYW4ndCBkZWxldGUgYmFja3VwIGZpbGUiCittc2dzdHIgIkUyMDc6IEthbiBpbnRlIHRhIGJvcnQgc+RrZXJoZXRza29waWEiCisKKyM6IGZpbGVpby5jOjQwNjcKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWQVJOSU5HOiBPcmdpbmFsZmlsZW4ga2FuIHZhcmEgZvZybG9yYWQgZWxsZXIgc2thZGFkXG4iCisKKyM6IGZpbGVpby5jOjQwNjkKK21zZ2lkICJkb24ndCBxdWl0IHRoZSBlZGl0b3IgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorbXNnc3RyICJhdnNsdXRhIGludGUgcmVkaWdlcmFyZW4gaW5uYW4gZmlsZW4g5HIgZnJhbWflbmdzcmlrdCBza3JpdmVuIgorCisjOiBmaWxlaW8uYzo0MTU4Cittc2dpZCAiW2Rvc10iCittc2dzdHIgIltkb3NdIgorCisjOiBmaWxlaW8uYzo0MTU4Cittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbZG9zLWZvcm1hdF0iCisKKyM6IGZpbGVpby5jOjQxNjUKK21zZ2lkICJbbWFjXSIKK21zZ3N0ciAiW21hY10iCisKKyM6IGZpbGVpby5jOjQxNjUKK21zZ2lkICJbbWFjIGZvcm1hdF0iCittc2dzdHIgIlttYWMtZm9ybWF0XSIKKworIzogZmlsZWlvLmM6NDE3MgorbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzo0MTcyCittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW3VuaXgtZm9ybWF0XSIKKworIzogZmlsZWlvLmM6NDE5OQorbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxIHJhZCwgIgorCisjOiBmaWxlaW8uYzo0MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcywgIgorbXNnc3RyICIlbGQgcmFkZXIsICIKKworIzogZmlsZWlvLmM6NDIwNAorbXNnaWQgIjEgY2hhcmFjdGVyIgorbXNnc3RyICIxIHRlY2tlbiIKKworIzogZmlsZWlvLmM6NDIwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxkIHRlY2tlbiIKKworIzogZmlsZWlvLmM6NDIxNgorbXNnaWQgIltub2VvbF0iCittc2dzdHIgIltpbmdldCByYWRzbHV0XSIKKworIzogZmlsZWlvLmM6NDIxNgorbXNnaWQgIltJbmNvbXBsZXRlIGxhc3QgbGluZV0iCittc2dzdHIgIltPZnVsbHN05G5kaWcgc2lzdGFyYWRdIgorCisjLiBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIy4gbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjLiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyM6IGZpbGVpby5jOjQyMzUKK21zZ2lkICJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiCittc2dzdHIgIlZBUk5JTkc6IEZpbGVuIGhhciDkbmRyYXRzIHNlZGFuIGRlbiBs5HN0ZXMgaW4hISEiCisKKyM6IGZpbGVpby5jOjQyMzcKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQiCittc2dzdHIgIlZpbGwgZHUgdmVya2xpZ2VuIHNrcml2YSB0aWxsIGRlbiIKKworIzogZmlsZWlvLmM6NTMxMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODogRmVsIHZpZCBza3Jpdm5pbmcgdGlsbCBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjUzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwOTogRXJyb3IgY2xvc2luZyBcIiVzXCIiCittc2dzdHIgIkUyMDk6IEZlbCB2aWQgc3TkbmduaW5nIGF2IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTMyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogRmVsIHZpZCBs5HNuaW5nIGF2IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTU0MworbXNnaWQgIkUyNDY6IEZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQgZGVsZXRlZCBidWZmZXIiCittc2dzdHIgIkUyNDY6IEZpbGVDaGFuZ2VkU2hlbGwtYXV0b2tvbW1hbmRvdCB0b2cgYm9ydCBidWZmZXJ0IgorCisjOiBmaWxlaW8uYzo1NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIG5vIGxvbmdlciBhdmFpbGFibGUiCittc2dzdHIgIkUyMTE6IFZhcm5pbmc6IEZpbGVuIFwiJXNcIiDkciBpbnRlIGzkbmdyZSB0aWxsZ+RuZ2xpZyIKKworIzogZmlsZWlvLmM6NTU2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVzEyOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBhbmQgdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCBpbiBWaW0gYXMgIgorIndlbGwiCittc2dzdHIgIiIKKyJXMTI6IFZhcm5pbmc6IEZpbGVuIFwiJXNcIiBoYXIg5G5kcmF0cyBvY2ggYnVmZmVydGVuIORuZHJhZGVzIGkgVmltIG9ja3PlIgorCisjOiBmaWxlaW8uYzo1NTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMTogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTE6IFZhcm5pbmc6IEZpbGVuIFwiJXNcIiBoYXIg5G5kcmF0cyBzZWRhbiByZWRpZ2VyaW5nZW4gYvZyamFkZSIKKworIzogZmlsZWlvLmM6NTU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICIiCisiVzE2OiBWYXJuaW5nOiBS5HR0aWdoZXRlcm5hIHDlIGZpbGVuIFwiJXNcIiBoYXIg5G5kcmF0cyBzZWRhbiByZWRpZ2VyaW5nZW4gIgorImL2cmphZGUiCisKKyM6IGZpbGVpby5jOjU1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzEzOiBWYXJuaW5nOiBGaWxlbiBcIiVzXCIgaGFyIHNrYXBhdHMgZWZ0ZXIgcmVkaWdlcmluZ2VuIGL2cmphZGUiCisKKyM6IGZpbGVpby5jOjU1OTYKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJWYXJuaW5nIgorCisjOiBmaWxlaW8uYzo1NTk3Cittc2dpZCAiIgorIiZPS1xuIgorIiZMb2FkIEZpbGUiCittc2dzdHIgIiIKKyImT0tcbiIKKyImTORzIGluIGZpbGVuIgorCisjOiBmaWxlaW8uYzo1Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjI6IENvdWxkIG5vdCBwcmVwYXJlIGZvciByZWxvYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFNDYyOiBLdW5kZSBpbnRlIGb2cmJlcmVkYSBm9nIgYXR0IGzkc2Egb20gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjE6IENvdWxkIG5vdCByZWxvYWQgXCIlc1wiIgorbXNnc3RyICJFMzIxOiBLdW5kZSBpbnRlIGzkc2Egb20gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2Mjk2Cittc2dpZCAiLS1EZWxldGVkLS0iCittc2dzdHIgIi0tQm9ydHRhZ2VuLS0iCisKKyMuIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0CisjOiBmaWxlaW8uYzo2NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjc6IE5vIHN1Y2ggZ3JvdXA6IFwiJXNcIiIKK21zZ3N0ciAiRTM2NzogSW5nZW4gc+VkYW4gZ3J1cHA6IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciAqOiAlcyIKK21zZ3N0ciAiRTIxNTogT3RpbGzldGV0IHRlY2tlbiBlZnRlciAqOiAlcyIKKworIzogZmlsZWlvLmM6NjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE2OiBObyBzdWNoIGV2ZW50OiAlcyIKK21zZ3N0ciAiRTIxNjogSW5nZW4gc+VkYW4gaORuZGVsc2U6ICVzIgorCisjOiBmaWxlaW8uYzo2NTk2Cittc2dpZCAiRTIxNjogTm8gc3VjaCBncm91cCBvciBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IEluZ2VuIHPlZGFuIGdydXBwIGVsbGVyIGjkbmRlbHNlOiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo2NzQ1Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRva29tbWFuZG9uIC0tLSIKKworIzogZmlsZWlvLmM6NzAxNgorbXNnaWQgIkUyMTc6IENhbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZXZlbnRzIgorbXNnc3RyICJFMjE3OiBLYW4gaW50ZSBr9nJhIGF1dG9rb21tYW5kb24gZvZyIEFMTEEgaORuZGVsc2VyIgorCisjOiBmaWxlaW8uYzo3MDM5Cittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICJJbmdhIG1hdGNoYW5kZSBhdXRva29tbWFuZG9uIgorCisjOiBmaWxlaW8uYzo3MzU5Cittc2dpZCAiRTIxODogYXV0b2NvbW1hbmQgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiRTIxODogYXV0b2tvbW1hbmRvIG7kc3RsYWQgZvZyIGRqdXB0IgorCisjOiBmaWxlaW8uYzo3NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIEF1dG8gY29tbWFuZHMgZm9yIFwiJXNcIiIKK21zZ3N0ciAiJXMgQXV0b2tvbW1hbmRvbiBm9nIgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo3NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAiS/ZyICVzIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGZpbGVpby5jOjc3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXV0b2NvbW1hbmQgJXMiCittc2dzdHIgImF1dG9rb21tYW5kbyAlcyIKKworIzogZmlsZWlvLmM6ODI3MAorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IFNha25hciB7LiIKKworIzogZmlsZWlvLmM6ODI3MgorbXNnaWQgIkUyMjA6IE1pc3NpbmcgfS4iCittc2dzdHIgIkUyMjA6IFNha25hciB9LiIKKworIzogZm9sZC5jOjY2Cittc2dpZCAiRTQ5MDogTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAiRTQ5MDogSW5nZXQgdmVjayBmdW5uZXQiCisKKyM6IGZvbGQuYzo1NjUKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogS2FuIGludGUgc2thcGEgdmVjayBtZWQgbnV2YXJhbmRlICdmb2xkbWV0aG9kJyIKKworIzogZm9sZC5jOjU2NworbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiBLYW4gaW50ZSB0YSBib3J0IHZlY2sgbWVkIG51dmFyYW5kZSAnZm9sZG1ldGhvZCciCisKKyM6IGdldGNoYXIuYzoyNDYKK21zZ2lkICJFMjIyOiBBZGQgdG8gcmVhZCBidWZmZXIiCittc2dzdHIgIkUyMjI6IEzkZ2cgdGlsbCBpIGzkc2J1ZmZlcnQiCisKKyM6IGdldGNoYXIuYzoyMTU3Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6IHJla3Vyc2l2IG1hcHBuaW5nIgorCisjOiBnZXRjaGFyLmM6MzAyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjI0OiBnbG9iYWwgYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNDogZ2xvYmFsIGb2cmtvcnRuaW5nIGV4aXN0ZXJhciByZWRhbiBm9nIgJXMiCisKKyM6IGdldGNoYXIuYzozMDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjU6IGdsb2JhbCBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNTogZ2xvYmFsIG1hcHBuaW5nIGV4aXN0ZXJhciByZWRhbiBm9nIgJXMiCisKKyM6IGdldGNoYXIuYzozMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjY6IGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjY6IGb2cmtvcnRuaW5nIGV4aXN0ZXJhciByZWRhbiBm9nIgJXMiCisKKyM6IGdldGNoYXIuYzozMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI3OiBtYXBwbmluZyBleGlzdGVyYXIgcmVkYW4gZvZyICVzIgorCisjOiBnZXRjaGFyLmM6MzIyMAorbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAiSW5nZW4gZvZya29ydG5pbmcgaGl0dGFkZXMiCisKKyM6IGdldGNoYXIuYzozMjIyCittc2dpZCAiTm8gbWFwcGluZyBmb3VuZCIKK21zZ3N0ciAiSW5nZW4gbWFwcG5pbmcgaGl0dGFkZXMiCisKKyM6IGdldGNoYXIuYzo0MTEyCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiBPdGlsbOV0ZXQgbORnZSIKKworIzogZ3VpX2F0X2ZzLmM6MzAwCittc2dpZCAiPGNhbm5vdCBvcGVuPiAiCittc2dzdHIgIjxrYW4gaW50ZSD2cHBuYT4gIgorCisjOiBndWlfYXRfZnMuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTY6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAiRTYxNjogdmltX1NlbEZpbGU6IGthbiBpbnRlIGjkbXRhIHR5cHNuaXR0ICVzIgorCisjOiBndWlfYXRfZnMuYzoyNzgxCittc2dpZCAiRTYxNDogdmltX1NlbEZpbGU6IGNhbid0IHJldHVybiB0byBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAiRTYxNDogdmltX1NlbEZpbGU6IEthbiBpbnRlIOV0ZXJ25G5kYSB0aWxsIGFrdHVlbGwga2F0YWxvZyIKKworIzogZ3VpX2F0X2ZzLmM6MjgwMQorbXNnaWQgIlBhdGhuYW1lOiIKK21zZ3N0ciAiU/ZrduRnOiIKKworIzogZ3VpX2F0X2ZzLmM6MjgwNworbXNnaWQgIkU2MTU6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgIkU2MTU6IHZpbV9TZWxGaWxlOiBrYW4gaW50ZSBo5G10YSBha3R1ZWxsIGthdGFsb2ciCisKKyM6IGd1aV9hdF9mcy5jOjI4MTUgZ3VpX21vdGlmLmM6MTYyMworbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ3VpX2F0X2ZzLmM6MjgxNSBndWlfZ3RrLmM6MjYzOCBndWlfbW90aWYuYzoxNjE4IGd1aV9tb3RpZi5jOjI4NDkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkF2YnJ5dCIKKworIzogZ3VpX2F0aGVuYS5jOjIwNDcgZ3VpX21vdGlmLmM6MTg3MQorbXNnaWQgIlZpbSBkaWFsb2ciCittc2dzdHIgIlZpbS1kaWFsb2ciCisKKyM6IGd1aV9hdF9zYi5jOjQ4NgorbXNnaWQgIlNjcm9sbGJhciBXaWRnZXQ6IENvdWxkIG5vdCBnZXQgZ2VvbWV0cnkgb2YgdGh1bWIgcGl4bWFwLiIKK21zZ3N0ciAiUnVsbG5pbmdzbGlzdDogS3VuZGUgaW50ZSBo5G10YSBnZW9tZXRyaW4gcOUgbWluaWF0eXJiaWxkLiIKKworIzogZ3VpX2JldmFsLmM6MTAxIGd1aV93MzIuYzozNzcyCittc2dpZCAiRTIzMjogQ2Fubm90IGNyZWF0ZSBCYWxsb29uRXZhbCB3aXRoIGJvdGggbWVzc2FnZSBhbmQgY2FsbGJhY2siCittc2dzdHIgIkUyMzI6IEthbiBpbnRlIHNrYXBhIEJhbGxvb25FdmFsIG1lZCBi5WRlIG1lZGRlbGFuZGUgb2NoIOV0ZXJrYWxsbmluZyIKKworIzogZ3VpLmM6MjE5Cittc2dpZCAiRTIyOTogQ2Fubm90IHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkUyMjk6IEthbiBpbnRlIHN0YXJ0YSBHVUkiCisKKyM6IGd1aS5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogS2FuIGludGUgbORzYSBmcuVuIFwiJXNcIiIKKworIzogZ3VpLmM6NDczCittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiAnZ3VpZm9udHdpZGUnIG9naWx0aWciCisKKyM6IGd1aS5jOjU0MworbXNnaWQgIkU1OTk6IFZhbHVlIG9mICdpbWFjdGl2YXRla2V5JyBpcyBpbnZhbGlkIgorbXNnc3RyICJFNTk5OiBW5HJkZXQgYXYgJ2ltYWN0aXZhdGVrZXknIORyIG9naWx0aWd0IgorCisjOiBndWkuYzozOTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTQ6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciAlcyIKK21zZ3N0ciAiRTI1NDogS2FuIGludGUgYWxsb2tlcmEgZuRyZyAlcyIKKworIzogZ3VpX2d0ay5jOjE1NjcKK21zZ2lkICJWaW0gZGlhbG9nLi4uIgorbXNnc3RyICJWaW0tZGlhbG9nLi4uIgorCisjOiBndWlfZ3RrLmM6MjAwMiBtZXNzYWdlLmM6Mjg4NgorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZKYVxuIgorIiZOZWpcbiIKKyImQXZicnl0IgorCisjOiBndWlfZ3RrLmM6MjE2NQorbXNnaWQgIklucHV0IF9NZXRob2RzIgorbXNnc3RyICJJbm1hdG5pbmdzX21ldG9kZXIiCisKKyM6IGd1aV9ndGsuYzoyNDMxIGd1aV9tb3RpZi5jOjI3NjgKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIlZJTSAtIFP2ayBvY2ggZXJz5HR0Li4uIgorCisjOiBndWlfZ3RrLmM6MjQzOSBndWlfbW90aWYuYzoyNzcwCittc2dpZCAiVklNIC0gU2VhcmNoLi4uIgorbXNnc3RyICJWSU0gLSBT9msuLi4iCisKKyM6IGd1aV9ndGsuYzoyNDcxIGd1aV9tb3RpZi5jOjI4ODgKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICJIaXR0YSB2YWQ6IgorCisjOiBndWlfZ3RrLmM6MjQ5MSBndWlfbW90aWYuYzoyOTIwCittc2dpZCAiUmVwbGFjZSB3aXRoOiIKK21zZ3N0ciAiRXJz5HR0IG1lZDoiCisKKyMuIHdob2xlIHdvcmQgb25seSBidXR0b24KKyM6IGd1aV9ndGsuYzoyNTIzIGd1aV9tb3RpZi5jOjMwMzYKK21zZ2lkICJNYXRjaCB3aG9sZSB3b3JkIG9ubHkiCittc2dzdHIgIk1hdGNoYSBlbmRhc3QgaGVsYSBvcmQiCisKKyMuIG1hdGNoIGNhc2UgYnV0dG9uCisjOiBndWlfZ3RrLmM6MjUzNiBndWlfbW90aWYuYzozMDQ4Cittc2dpZCAiTWF0Y2ggY2FzZSIKK21zZ3N0ciAiU2tpbGogcOUgc3RvcmEvc23lIGJva3N05HZlciIKKworIzogZ3VpX2d0ay5jOjI1NDggZ3VpX21vdGlmLmM6Mjk5MAorbXNnaWQgIkRpcmVjdGlvbiIKK21zZ3N0ciAiUmlrdG5pbmciCisKKyMuICdVcCcgYW5kICdEb3duJyBidXR0b25zCisjOiBndWlfZ3RrLmM6MjU2MCBndWlfbW90aWYuYzozMDAyCittc2dpZCAiVXAiCittc2dzdHIgIlVwcCIKKworIzogZ3VpX2d0ay5jOjI1NjQgZ3VpX21vdGlmLmM6MzAxMAorbXNnaWQgIkRvd24iCittc2dzdHIgIk5lZCIKKworIzogZ3VpX2d0ay5jOjI1OTAgZ3VpX2d0ay5jOjI1OTIgZ3VpX21vdGlmLmM6Mjc5MgorbXNnaWQgIkZpbmQgTmV4dCIKK21zZ3N0ciAiSGl0dGEgbuRzdGEiCisKKyM6IGd1aV9ndGsuYzoyNjA5IGd1aV9ndGsuYzoyNjExIGd1aV9tb3RpZi5jOjI4MDkKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICJFcnPkdHQiCisKKyM6IGd1aV9ndGsuYzoyNjIyIGd1aV9ndGsuYzoyNjI0IGd1aV9tb3RpZi5jOjI4MjIKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAiRXJz5HR0IGFsbGEiCisKKyM6IGd1aV9ndGtfeDExLmM6MjI0OAorbXNnaWQgIlZpbTogUmVjZWl2ZWQgXCJkaWVcIiByZXF1ZXN0IGZyb20gc2Vzc2lvbiBtYW5hZ2VyXG4iCittc2dzdHIgIlZpbTogVG9nIGVtb3QgXCJkaWVcIi1iZWfkcmFuIGZy5W4gc2Vzc2lvbnNoYW50ZXJhcmVuXG4iCisKKyM6IGd1aV9ndGtfeDExLmM6MzQzNworbXNnaWQgIlZpbTogTWFpbiB3aW5kb3cgdW5leHBlY3RlZGx5IGRlc3Ryb3llZFxuIgorbXNnc3RyICJWaW06IEh1dnVkZvZuc3RlciBvduRudGF0IGb2cnN09nJ0XG4iCisKKyM6IGd1aV9ndGtfeDExLmM6NDA1MQorbXNnaWQgIkZvbnQgU2VsZWN0aW9uIgorbXNnc3RyICJUeXBzbml0dHN2YWwiCisKKyM6IGd1aV9ndGtfeDExLmM6NTkwNyB1aS5jOjIwMTYKK21zZ2lkICJVc2VkIENVVF9CVUZGRVIwIGluc3RlYWQgb2YgZW1wdHkgc2VsZWN0aW9uIgorbXNnc3RyICJBbnbkbmQgQ1VUX0JVRkZFUjAgaXN05GxsZXQgZvZyIHRvbXQgdmFsIgorCisjOiBndWlfbW90aWYuYzoxNjE3IGd1aV9tb3RpZi5jOjE2MjAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRlciIKKworIzogZ3VpX21vdGlmLmM6MTYxOQorbXNnaWQgIkRpcmVjdG9yaWVzIgorbXNnc3RyICJLYXRhbG9nZXIiCisKKyM6IGd1aV9tb3RpZi5jOjE2MjEKK21zZ2lkICJIZWxwIgorbXNnc3RyICJIauRscCIKKworIzogZ3VpX21vdGlmLmM6MTYyMgorbXNnaWQgIkZpbGVzIgorbXNnc3RyICJGaWxlciIKKworIzogZ3VpX21vdGlmLmM6MTYyNAorbXNnaWQgIlNlbGVjdGlvbiIKK21zZ3N0ciAiVmFsIgorCisjOiBndWlfbW90aWYuYzoyODM1Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAixW5ncmEiCisKKyM6IGd1aV9yaXNjb3MuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMDogQ2FuJ3QgbG9hZCBaYXAgZm9udCAnJXMnIgorbXNnc3RyICJFNjEwOiBLYW4gaW50ZSBs5HNhIGluIFphcC10eXBzbml0dCAnJXMnIgorCisjOiBndWlfcmlzY29zLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjExOiBDYW4ndCB1c2UgZm9udCAlcyIKK21zZ3N0ciAiRTYxMTogS2FuIGludGUgYW525G5kYSB0eXBzbml0dCAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNzAKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2tpY2thciBtZWRkZWxhbmRlIGb2ciBhdHQgYXZzbHV0YSBiYXJucHJvY2Vzcy5cbiIKKworIzogZ3VpX3czMi5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiRTI0MzogQXJndW1lbnQgc3T2ZHMgaW50ZTogXCItJXNcIjsgQW525G5kcyBPTEUtdmVyc2lvbmVuLiIKKworIzogZ3VpX3c0OC5jOjIwNzkKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJT9msgc3Ry5G5nIChhbnbkbmQgJ1xcXFwnIGb2ciBhdHQgaGl0dGEgJ1xcJykiCisKKyM6IGd1aV93NDguYzoyMTA0Cittc2dpZCAiRmluZCAmIFJlcGxhY2UgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAiU/ZrICYgZXJz5HR0IChhbnbkbmQgJ1xcXFwnIGb2ciBhdHQgaGl0dGEgJ1xcJykiCisKKyM6IGd1aV94MTEuYzoxNTIzCittc2dpZCAiVmltIEU0NTg6IENhbm5vdCBhbGxvY2F0ZSBjb2xvcm1hcCBlbnRyeSwgc29tZSBjb2xvcnMgbWF5IGJlIGluY29ycmVjdCIKK21zZ3N0ciAiIgorIlZpbSBFNDU4OiBLYW4gaW50ZSBhbGxva2VyYSBwb3N0IGkgZuRyZ2thcnRhLCBu5WdyYSBm5HJnZXIga2FuIGJsaSBmZWxha3RpZ2EiCisKKyM6IGd1aV94MTEuYzoyMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICIiCisiRTI1MDogVHlwc25pdHQgZvZyIGb2bGphbmRlIHRlY2tlbmtvZGVyIHNha25hcyBpIHR5cHNuaXR0c3VwcHPkdHRuaW5nZW4gJXM6IgorCisjOiBndWlfeDExLmM6MjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjUyOiBGb250c2V0IG5hbWU6ICVzIgorbXNnc3RyICJFMjUyOiBUeXBzbml0dHN1cHBz5HR0bmluZ3NuYW1uOiAlcyIKKworIzogZ3VpX3gxMS5jOjIxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCAnJXMnIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiRm9udCAnJXMnIORyIGludGUgZmFzdCBicmVkZCIKKworIzogZ3VpX3gxMS5jOjIxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MzogRm9udHNldCBuYW1lOiAlc1xuIgorbXNnc3RyICJFMjUzOiBUeXBzbml0dHN1cHBz5HR0bmluZ3NuYW1uOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MDogJXNcbiIKK21zZ3N0ciAiVHlwc25pdHQwOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAiVHlwc25pdHQxOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250JWQgd2lkdGggaXMgbm90IHR3aWNlIHRoYXQgb2YgZm9udDBcbiIKK21zZ3N0ciAiVHlwc25pdHQlZCDkciBpbnRlIGR1YmJlbHQgc+UgYnJlZCBzb20gZm9udDBcbiIKKworIzogZ3VpX3gxMS5jOjIxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDAgd2lkdGg6ICVsZFxuIgorbXNnc3RyICJUeXBzbml0dDAgYnJlZGQ6ICVsZFxuIgorCisjOiBndWlfeDExLmM6MjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9udDEgd2lkdGg6ICVsZFxuIgorIlxuIgorbXNnc3RyICIiCisiVHlwc25pdHQxIGJyZWRkOiAlbGRcbiIKKyJcbiIKKworIzogaGFuZ3VsaW4uYzo2MTAKK21zZ2lkICJFMjU2OiBIYW5ndWwgYXV0b21hdGEgRVJST1IiCittc2dzdHIgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBGRUwiCisKKyM6IGlmX2NzY29wZS5jOjc3Cittc2dpZCAiQWRkIGEgbmV3IGRhdGFiYXNlIgorbXNnc3RyICJM5GdnIHRpbGwgZW4gbnkgZGF0YWJhcyIKKworIzogaWZfY3Njb3BlLmM6NzkKK21zZ2lkICJRdWVyeSBmb3IgYSBwYXR0ZXJuIgorbXNnc3RyICJGcuVnYSBlZnRlciBldHQgbfZuc3RlciIKKworIzogaWZfY3Njb3BlLmM6ODEKK21zZ2lkICJTaG93IHRoaXMgbWVzc2FnZSIKK21zZ3N0ciAiVmlzYSBkZXR0YSBtZWRkZWxhbmRlIgorCisjOiBpZl9jc2NvcGUuYzo4MworbXNnaWQgIktpbGwgYSBjb25uZWN0aW9uIgorbXNnc3RyICJE9mRhIGVuIGFuc2x1dG5pbmciCisKKyM6IGlmX2NzY29wZS5jOjg1Cittc2dpZCAiUmVpbml0IGFsbCBjb25uZWN0aW9ucyIKK21zZ3N0ciAiT21pbml0aWVyYSBhbGxhIGFuc2x1dG5pbmdhciIKKworIzogaWZfY3Njb3BlLmM6ODcKK21zZ2lkICJTaG93IGNvbm5lY3Rpb25zIgorbXNnc3RyICJWaXNhIGFuc2x1dG5pbmdhciIKKworIzogaWZfY3Njb3BlLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2MDogVXNhZ2U6IGNzW2NvcGVdICVzIgorbXNnc3RyICJFNTYwOiBBbnbkbmRuaW5nOiBjc1tjb3BlXSAlcyIKKworIzogaWZfY3Njb3BlLmM6MTI0Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICJEZXQgaORyIHNjb3BlLWtvbW1hbmRvdCBzdPZkZXIgaW50ZSBkZWxuaW5nIGF2IGb2bnN0cmV0LlxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzAKK21zZ2lkICJFNTYyOiBVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiRTU2MjogQW525G5kbmluZzogY3N0YWcgPGlkZW50aWZpZXJhcmU+IgorCisjOiBpZl9jc2NvcGUuYzoyMjYKK21zZ2lkICJFMjU3OiBjc3RhZzogdGFnIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI1NzogY3N0YWc6IHRhZ2cgaGl0dGFkZXMgaW50ZSIKKworIzogaWZfY3Njb3BlLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjM6IHN0YXQoJXMpIGVycm9yOiAlZCIKK21zZ3N0ciAiRTU2Mzogc3RhdCglcyktZmVsOiAlZCIKKworIzogaWZfY3Njb3BlLmM6NDE0Cittc2dpZCAiRTU2Mzogc3RhdCBlcnJvciIKK21zZ3N0ciAiRTU2Mzogc3RhdC1mZWwiCisKKyM6IGlmX2NzY29wZS5jOjUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY0OiAlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIkU1NjQ6ICVzIORyIGludGUgZW4ga2F0YWxvZyBlbGxlciBlbiBnb2Rr5G5kIGNzY29wZS1kYXRhYmFzIgorCisjOiBpZl9jc2NvcGUuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICJMYWRlIHRpbGwgY3Njb3BlLWRhdGFiYXMgJXMiCisKKyM6IGlmX2NzY29wZS5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVsZCIKK21zZ3N0ciAiRTI2MjogZmVsIHZpZCBs5HNuaW5nIGF2IGNzY29wZS1hbnNsdXRuaW5nICVsZCIKKworIzogaWZfY3Njb3BlLmM6Njg5Cittc2dpZCAiRTU2MTogdW5rbm93biBjc2NvcGUgc2VhcmNoIHR5cGUiCittc2dzdHIgIkU1NjE6IG9r5G5kIGNzY29wZS1z9mt0eXAiCisKKyM6IGlmX2NzY29wZS5jOjczMQorbXNnaWQgIkU1NjY6IENvdWxkIG5vdCBjcmVhdGUgY3Njb3BlIHBpcGVzIgorbXNnc3RyICJFNTY2OiBLdW5kZSBpbnRlIHNrYXBhIGNzY29wZS1y9nIiCisKKyM6IGlmX2NzY29wZS5jOjc0OAorbXNnaWQgIkU2MjI6IENvdWxkIG5vdCBmb3JrIGZvciBjc2NvcGUiCittc2dzdHIgIkU2MjI6IEt1bmRlIGludGUgZ3JlbmEgZvZyIGNzY29wZSIKKworIzogaWZfY3Njb3BlLmM6ODQyIGlmX2NzY29wZS5jOjg5MgorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uIGV4ZWMgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbi1leGVrdmVyaW5nIG1pc3NseWNrYWRlcyIKKworIzogaWZfY3Njb3BlLmM6ODkzCittc2dpZCAiRTYyMzogQ291bGQgbm90IHNwYXduIGNzY29wZSBwcm9jZXNzIgorbXNnc3RyICJFNjIzOiBLdW5kZSBpbnRlIHN0YXJ0YSBjc2NvcGUtcHJvY2VzcyIKKworIzogaWZfY3Njb3BlLmM6OTA2Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGb2ciB0b19mcCBtaXNzbHlja2FkZXMiCisKKyM6IGlmX2NzY29wZS5jOjkwOAorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIGZyX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBm9nIgZnJfZnAgbWlzc2x5Y2thZGVzIgorCisjOiBpZl9jc2NvcGUuYzo5NDYKK21zZ2lkICJFNTY3OiBubyBjc2NvcGUgY29ubmVjdGlvbnMiCittc2dzdHIgIkU1Njc6IGluZ2EgY3Njb3BlLWFuc2x1dG5pbmdhciIKKworIzogaWZfY3Njb3BlLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU5OiBubyBtYXRjaGVzIGZvdW5kIGZvciBjc2NvcGUgcXVlcnkgJXMgb2YgJXMiCittc2dzdHIgIkUyNTk6IGluZ2EgdHLkZmZhciBmdW5uYSBm9nIgY3Njb3BlLWb2cmZy5WdhbiAlcyBhdiAlcyIKKworIzogaWZfY3Njb3BlLmM6MTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDY5OiBpbnZhbGlkIGNzY29wZXF1aWNrZml4IGZsYWcgJWMgZm9yICVjIgorbXNnc3RyICJFNDY5OiBvZ2lsdGlnIGNzY29wZXF1aWNrZml4IGZsYWdnYSAlYyBm9nIgJWMiCisKKyM6IGlmX2NzY29wZS5jOjExNDYKK21zZ2lkICJjc2NvcGUgY29tbWFuZHM6XG4iCittc2dzdHIgImNzY29wZS1rb21tYW5kb246XG4iCisKKyM6IGlmX2NzY29wZS5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS01czogJS0zMHMgKFVzYWdlOiAlcykiCittc2dzdHIgIiUtNXM6ICUtMzBzIChBbnbkbmRuaW5nOiAlcykiCisKKyM6IGlmX2NzY29wZS5jOjEyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyNTogY2Fubm90IG9wZW4gY3Njb3BlIGRhdGFiYXNlOiAlcyIKK21zZ3N0ciAiRTYyNToga2FuIGludGUg9nBwbmEgY3Njb3BlLWRhdGFiYXM6ICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMjY1Cittc2dpZCAiRTYyNjogY2Fubm90IGdldCBjc2NvcGUgZGF0YWJhc2UgaW5mb3JtYXRpb24iCittc2dzdHIgIkU2MjY6IGthbiBpbnRlIGjkbXRhIGNzY29wZS1kYXRhYmFzaW5mb3JtYXRpb24iCisKKyM6IGlmX2NzY29wZS5jOjEyOTAKK21zZ2lkICJFNTY4OiBkdXBsaWNhdGUgY3Njb3BlIGRhdGFiYXNlIG5vdCBhZGRlZCIKK21zZ3N0ciAiRTU2ODogZHViYmxlcmFkIGNzY29wZS1kYXRhYmFzIGludGUgbGFnZCB0aWxsIgorCisjOiBpZl9jc2NvcGUuYzoxMzAxCittc2dpZCAiRTU2OTogbWF4aW11bSBudW1iZXIgb2YgY3Njb3BlIGNvbm5lY3Rpb25zIHJlYWNoZWQiCittc2dzdHIgIkU1Njk6IG1heGltYWx0IGFudGFsIGF2IGNzY29wZS1hbnNsdXRuaW5nYXIgbuV0dCIKKworIzogaWZfY3Njb3BlLmM6MTQxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMjYxOiBjc2NvcGUgY29ubmVjdGlvbiAlcyBub3QgZm91bmQiCittc2dzdHIgIkUyNjE6IGNzY29wZS1hbnNsdXRuaW5nICVzIGhpdHRhZGVzIGludGUiCisKKyM6IGlmX2NzY29wZS5jOjE0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gJXMgY2xvc2VkIgorbXNnc3RyICJjc2NvcGUtYW5zbHV0bmluZyAlcyBzdORuZ2QiCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTU5MQorbXNnaWQgIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJFNTcwOiD2ZGVzZGlnZXJ0IGZlbCBpIGNzX21hbmFnZV9tYXRjaGVzIgorCisjOiBpZl9jc2NvcGUuYzoxODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzIgorbXNnc3RyICJDc2NvcGUtdGFnZzogJXMiCisKKyM6IGlmX2NzY29wZS5jOjE4NjMKK21zZ2lkICIiCisiXG4iCisiICAgIyAgIGxpbmUiCittc2dzdHIgIiIKKyJcbiIKKyIgICAjICAgcmFkIgorCisjOiBpZl9jc2NvcGUuYzoxODY1Cittc2dpZCAiZmlsZW5hbWUgLyBjb250ZXh0IC8gbGluZVxuIgorbXNnc3RyICJmaWxuYW1uIC8gc2FtbWFuaGFuZyAvIHJhZFxuIgorCisjOiBpZl9jc2NvcGUuYzoxOTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDk6IENzY29wZSBlcnJvcjogJXMiCittc2dzdHIgIkU2MDk6IENzY29wZS1mZWw6ICVzIgorCisjOiBpZl9jc2NvcGUuYzoyMTQzCittc2dpZCAiQWxsIGNzY29wZSBkYXRhYmFzZXMgcmVzZXQiCittc2dzdHIgIkFsbGEgY3Njb3BlLWRhdGFiYXNlciDldGVyc3TkbGxkYSIKKworIzogaWZfY3Njb3BlLmM6MjIxMQorbXNnaWQgIm5vIGNzY29wZSBjb25uZWN0aW9uc1xuIgorbXNnc3RyICJpbmdhIGNzY29wZS1hbnNsdXRuaW5nYXJcbiIKKworIzogaWZfY3Njb3BlLmM6MjIxNQorbXNnaWQgIiAjIHBpZCAgICBkYXRhYmFzZSBuYW1lICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kIHBhdGhcbiIKK21zZ3N0ciAiICMgcGlkICAgIGRhdGFiYXNuYW1uICAgICAgICAgICAgICAgICAgICAgICAgZvZyc3QgaSBz9mt25GdcbiIKKworIzogaWZfcHl0aG9uLmM6NDEzCittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjYzOiBUeXbkcnIsIGRldHRhIGtvbW1hbmRvdCDkciBpbmFrdGl2ZXJhdCwgUHl0aG9uLWJpYmxpb3Rla2V0IGt1bmRlIGludGUgIgorImzkc2FzIGluLiIKKworIzogaWZfcHl0aG9uLmM6NjE1Cittc2dpZCAiY2FuJ3QgZGVsZXRlIE91dHB1dE9iamVjdCBhdHRyaWJ1dGVzIgorbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0IE91dHB1dE9iamVjdC1hdHRyaWJ1dCIKKworIzogaWZfcHl0aG9uLmM6NjIyCittc2dpZCAic29mdHNwYWNlIG11c3QgYmUgYW4gaW50ZWdlciIKK21zZ3N0ciAic29mdHNwYWNlIG3lc3RlIHZhcmEgZXR0IGhlbHRhbCIKKworIzogaWZfcHl0aG9uLmM6NjMwCittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUiCittc2dzdHIgIm9naWx0aWd0IGF0dHJpYnV0IgorCisjOiBpZl9weXRob24uYzo2NjkgaWZfcHl0aG9uLmM6NjgzCittc2dpZCAid3JpdGVsaW5lcygpIHJlcXVpcmVzIGxpc3Qgb2Ygc3RyaW5ncyIKK21zZ3N0ciAid3JpdGVsaW5lcygpIGty5HZlciBsaXN0YSBhdiBzdHLkbmdhciIKKworIzogaWZfcHl0aG9uLmM6ODA5Cittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjogRmVsIHZpZCBpbml0aWVyaW5nIGF2IEkvTy1vYmpla3QiCisKKyM6IGlmX3B5dGhvbi5jOjk5NCBpZl90Y2wuYzoxNDAyCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICJvZ2lsdGlndCB1dHRyeWNrIgorCisjOiBpZl9weXRob24uYzoxMDA4IGlmX3RjbC5jOjE0MDcKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgInV0dHJ5Y2sgaW5ha3RpdmVyYXQgdmlkIGtvbXBpbGVyaW5nIgorCisjOiBpZl9weXRob24uYzoxMDIxCittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAiZvZyc/ZrIGF0dCByZWZlcmVyYSB0aWxsIGJvcnR0YWdlbiBidWZmZXJ0IgorCisjOiBpZl9weXRob24uYzoxMDM2IGlmX3B5dGhvbi5jOjEwNzcgaWZfcHl0aG9uLmM6MTE0MSBpZl90Y2wuYzoxMjE0Cittc2dpZCAibGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIgorbXNnc3RyICJyYWRudW1tZXIgdXRhbmb2ciBvbXLlZGUiCisKKyM6IGlmX3B5dGhvbi5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IgorbXNnc3RyICI8YnVmZmVydG9iamVrdCAoYm9ydHRhZ2V0KSB2aWQgJThsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjEzNjcgaWZfdGNsLmM6ODM2Cittc2dpZCAiaW52YWxpZCBtYXJrIG5hbWUiCittc2dzdHIgIm9naWx0aWd0IG3kcmtuYW1uIgorCisjOiBpZl9weXRob24uYzoxNjQ3Cittc2dpZCAibm8gc3VjaCBidWZmZXIiCittc2dzdHIgImluZ2VuIHPlZGFuIGJ1ZmZlcnQiCisKKyM6IGlmX3B5dGhvbi5jOjE3MzUKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICJm9nJz9msgYXR0IHJlZmVyZXJhIHRpbGwgYm9ydHRhZ2V0IGb2bnN0ZXIiCisKKyM6IGlmX3B5dGhvbi5jOjE3ODAKK21zZ2lkICJyZWFkb25seSBhdHRyaWJ1dGUiCittc2dzdHIgInNrcml2c2t5ZGRhZCBhdHRyaWJ1dCIKKworIzogaWZfcHl0aG9uLmM6MTc5MworbXNnaWQgImN1cnNvciBwb3NpdGlvbiBvdXRzaWRlIGJ1ZmZlciIKK21zZ3N0ciAibWFya/ZycG9zaXRpb24gdXRhbmb2ciBidWZmZXJ0IgorCisjOiBpZl9weXRob24uYzoxODcwCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0IChkZWxldGVkKSBhdCAlLjhsWD4iCittc2dzdHIgIjxm9m5zdGVyb2JqZWt0IChib3J0dGFnZXQpIHZpZCAlLjhsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjE4ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKHVua25vd24pIGF0ICUuOGxYPiIKK21zZ3N0ciAiPGb2bnN0ZXJvYmpla3QgKG9r5G50KSB2aWQgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8ZvZuc3RlciAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5NjAKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAiaW5nZXQgc+VkYW50IGb2bnN0ZXIiCisKKyM6IGlmX3B5dGhvbi5jOjIyMjEgaWZfcHl0aG9uLmM6MjI1NSBpZl9weXRob24uYzoyMzEwIGlmX3B5dGhvbi5jOjIzNzgKKyM6IGlmX3B5dGhvbi5jOjI1MDAgaWZfcHl0aG9uLmM6MjU1MiBpZl90Y2wuYzo2ODQgaWZfdGNsLmM6NzI5IGlmX3RjbC5jOjgwMworIzogaWZfdGNsLmM6ODczIGlmX3RjbC5jOjE5OTgKK21zZ2lkICJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICJrYW4gaW50ZSBzcGFyYSDlbmdyYS1pbmZvcm1hdGlvbiIKKworIzogaWZfcHl0aG9uLmM6MjIyMyBpZl9weXRob24uYzoyMzE3IGlmX3B5dGhvbi5jOjIzODkKK21zZ2lkICJjYW5ub3QgZGVsZXRlIGxpbmUiCittc2dzdHIgImthbiBpbnRlIHRhIGJvcnQgcmFkIgorCisjOiBpZl9weXRob24uYzoyMjYwIGlmX3B5dGhvbi5jOjI0MDUgaWZfdGNsLmM6NjkwIGlmX3RjbC5jOjIwMjAKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICJrYW4gaW50ZSBlcnPkdHRhIHJhZCIKKworIzogaWZfcHl0aG9uLmM6MjQyMyBpZl9weXRob24uYzoyNTAyIGlmX3B5dGhvbi5jOjI1NjAKK21zZ2lkICJjYW5ub3QgaW5zZXJ0IGxpbmUiCittc2dzdHIgImthbiBpbnRlIGluZm9nYSByYWQiCisKKyM6IGlmX3B5dGhvbi5jOjI2NjQKK21zZ2lkICJzdHJpbmcgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgInN0cuRuZyBrYW4gaW50ZSBpbm5laOVsbGEgbnlyYWRlciIKKworIzogaWZfcnVieS5jOjQxMgorbXNnaWQgIiIKKyJFMjY2OiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUnVieSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisiRTI2NjogVHl25HJyLCBkZXR0YSBrb21tYW5kb3Qg5HIgaW5ha3RpdmVyYXQsIFJ1YnktYmlibGlvdGVrZXQga3VuZGUgaW50ZSAiCisibORzYXMgaW4uIgorCisjOiBpZl9ydWJ5LmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzM6IHVua25vd24gbG9uZ2ptcCBzdGF0dXMgJWQiCittc2dzdHIgIkUyNzM6IG9r5G50IGxvbmdqbXAtc3RhdHVzICVkIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIlbkeGxhIG1lbGxhbiBpbXBsZW1lbnRhdGlvbi9kZWZpbml0aW9uIgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICJWaXNhIGJhc2tsYXNzIGF2IgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAiVmlzYSDlc2lkb3NhdHQgbWVkbGVtc2Z1bmt0aW9uIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICJI5G10YSBmcuVuIGZpbCIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAiSORtdGEgZnLlbiBwcm9qZWt0IgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIkjkbXRhIGZy5W4gYWxsYSBwcm9qZWt0IgorCisjOiBpZl9zbmlmZi5jOjc0Cittc2dpZCAiUmV0cmlldmUiCittc2dzdHIgIkjkbXRhIgorCisjOiBpZl9zbmlmZi5jOjc1Cittc2dpZCAiU2hvdyBzb3VyY2Ugb2YiCittc2dzdHIgIlZpc2Ega+RsbGEgZvZyIgorCisjOiBpZl9zbmlmZi5jOjc2Cittc2dpZCAiRmluZCBzeW1ib2wiCittc2dzdHIgIkhpdHRhIHN5bWJvbCIKKworIzogaWZfc25pZmYuYzo3NworbXNnaWQgIkJyb3dzZSBjbGFzcyIKK21zZ3N0ciAiQmzkZGRyYSBpIGtsYXNzIgorCisjOiBpZl9zbmlmZi5jOjc4Cittc2dpZCAiU2hvdyBjbGFzcyBpbiBoaWVyYXJjaHkiCittc2dzdHIgIlZpc2Ega2xhc3MgaSBoaWVyYXJraSIKKworIzogaWZfc25pZmYuYzo3OQorbXNnaWQgIlNob3cgY2xhc3MgaW4gcmVzdHJpY3RlZCBoaWVyYXJjaHkiCittc2dzdHIgIlZpc2Ega2xhc3MgaSBiZWdy5G5zYWQgaGllcmFya2kiCisKKyM6IGlmX3NuaWZmLmM6ODAKK21zZ2lkICJYcmVmIHJlZmVycyB0byIKK21zZ3N0ciAiWHJlZiByZWZlcmVyYXIgdGlsbCIKKworIzogaWZfc25pZmYuYzo4MQorbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCittc2dzdHIgIlhyZWYgcmVmZXJlcmFzIGF2IgorCisjOiBpZl9zbmlmZi5jOjgyCittc2dpZCAiWHJlZiBoYXMgYSIKK21zZ3N0ciAiWHJlZiBoYXIgZW4iCisKKyM6IGlmX3NuaWZmLmM6ODMKK21zZ2lkICJYcmVmIHVzZWQgYnkiCittc2dzdHIgIlhyZWYgYW525G5kcyBhdiIKKworIzogaWZfc25pZmYuYzo4NAorbXNnaWQgIlNob3cgZG9jdSBvZiIKK21zZ3N0ciAiVmlzYSBkb2N1IGF2IgorCisjOiBpZl9zbmlmZi5jOjg1Cittc2dpZCAiR2VuZXJhdGUgZG9jdSBmb3IiCittc2dzdHIgIkdlbmVyZXJhIGRvY3UgZvZyIgorCisjOiBpZl9zbmlmZi5jOjk3Cittc2dpZCAiIgorIkNhbm5vdCBjb25uZWN0IHRvIFNOaUZGKy4gQ2hlY2sgZW52aXJvbm1lbnQgKHNuaWZmZW1hY3MgbXVzdCBiZSBmb3VuZCBpbiAiCisiJFBBVEgpLlxuIgorbXNnc3RyICIiCisiS2FuIGludGUgYW5zbHV0YSB0aWxsIFNOaUZGKy4gS29udHJvbGxlcmEgbWlsavYgKHNuaWZmZW1hY3MgbeVzdGUga3VubmEgIgorImhpdHRhcyBpICRQQVRIKS5cbiIKKworIzogaWZfc25pZmYuYzo0MjUKK21zZ2lkICJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiRTI3NDogU25pZmY6IEZlbCB2aWQgbORzbmluZy4gRnLlbmtvcHBsYWQiCisKKyM6IGlmX3NuaWZmLmM6NTUzCittc2dpZCAiU05pRkYrIGlzIGN1cnJlbnRseSAiCittc2dzdHIgIlNOaUZGKyDkciBm9nIgbuRydmFyYW5kZSAiCisKKyM6IGlmX3NuaWZmLmM6NTU1Cittc2dpZCAibm90ICIKK21zZ3N0ciAiaW50ZSAiCisKKyM6IGlmX3NuaWZmLmM6NTU2Cittc2dpZCAiY29ubmVjdGVkIgorbXNnc3RyICJhbnNsdXRlbiIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6IE9r5G5kIFNOaUZGKy1iZWfkcmFuOiAlcyIKKworIzogaWZfc25pZmYuYzo2MDUKK21zZ2lkICJFMjc2OiBFcnJvciBjb25uZWN0aW5nIHRvIFNOaUZGKyIKK21zZ3N0ciAiRTI3NjogRmVsIHZpZCBhbnNsdXRuaW5nIHRpbGwgU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwMDkKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODogU05pRkYrIGludGUgYW5zbHV0ZW4iCisKKyM6IGlmX3NuaWZmLmM6MTAxOAorbXNnaWQgIkUyNzk6IE5vdCBhIFNOaUZGKyBidWZmZXIiCittc2dzdHIgIkUyNzk6IEludGUgZW4gU05pRkYrLWJ1ZmZlcnQiCisKKyM6IGlmX3NuaWZmLmM6MTA4MworbXNnaWQgIlNuaWZmOiBFcnJvciBkdXJpbmcgd3JpdGUuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiU25pZmY6IEZlbCB2aWQgc2tyaXZuaW5nLiBGcuVua29wcGxhZCIKKworIzogaWZfdGNsLmM6NDE4Cittc2dpZCAiaW52YWxpZCBidWZmZXIgbnVtYmVyIgorbXNnc3RyICJvZ2lsdGlndCBidWZmZXJ0bnVtbWVyIgorCisjOiBpZl90Y2wuYzo0NjQgaWZfdGNsLmM6OTMxIGlmX3RjbC5jOjExMTAKK21zZ2lkICJub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICJpbnRlIGltcGxlbWVudGVyYXQg5G4iCisKKyM6IGlmX3RjbC5jOjUwMQorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJva+RuZCBmbGFnZ2EiCisKKyMuID8/PworIzogaWZfdGNsLmM6Nzc0Cittc2dpZCAiY2Fubm90IHNldCBsaW5lKHMpIgorbXNnc3RyICJrYW4gaW50ZSBzdORsbGEgaW4gcmFkKGVyKSIKKworIzogaWZfdGNsLmM6ODQ1Cittc2dpZCAibWFyayBub3Qgc2V0IgorbXNnc3RyICJt5HJrZSBpbnRlIHNhdHQiCisKKyM6IGlmX3RjbC5jOjg1MSBpZl90Y2wuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdyAlZCBjb2x1bW4gJWQiCittc2dzdHIgInJhZCAlZCBrb2x1bW4gJWQiCisKKyM6IGlmX3RjbC5jOjg4MQorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgImthbiBpbnRlIGluZm9nYS9s5GdnYSB0aWxsIHJhZCIKKworIzogaWZfdGNsLmM6MTI2OAorbXNnaWQgInVua25vd24gZmxhZzogIgorbXNnc3RyICJva+RuZCBmbGFnZ2E6ICIKKworIzogaWZfdGNsLmM6MTMzOAorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICJva+RuZCB2aW1PcHRpb24iCisKKyM6IGlmX3RjbC5jOjE0MjMKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgInRhbmdlbnRib3Jkc2F2YnJvdHQiCisKKyM6IGlmX3RjbC5jOjE0MjgKK21zZ2lkICJ2aW0gZXJyb3IiCittc2dzdHIgInZpbS1mZWwiCisKKyM6IGlmX3RjbC5jOjE0NzEKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgImthbiBpbnRlIHNrYXBhIGJ1ZmZlcnQvZvZuc3Rlci1rb21tYW5kbzogb2JqZWt0IGjlbGxlciBw5SBhdHQgdGFzIGJvcnQiCisKKyM6IGlmX3RjbC5jOjE1NDUKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICIiCisia2FuIGludGUgcmVnaXN0ZXJhIOV0ZXJrYWxsbmluZ3Nrb21tYW5kbzogYnVmZmVydC9m9m5zdGVyIGjlbGxlciByZWRhbiBw5SAiCisiYXR0IHRhcyBib3J0IgorCisjLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIzogaWZfdGNsLmM6MTU2MgorbXNnaWQgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgY29ycnVwdCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS4iCisib3JnIgorbXNnc3RyICIiCisiRTI4MDogVENMINZERVNESUdFUlQgRkVMOiByZWZsaXN0IHRyYXNpZyE/IFZhciBzbuRsbCBvY2ggcmFwcG9ydGVyYSBkZXR0YSAiCisidGlsbCB2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjE1NjMKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisia2FuIGludGUgcmVnaXN0cmVyYSDldGVya2FsbG5pbmdza29tbWFuZG86IGJ1ZmZlcnQtL2b2bnN0ZXJyZWZlcmVucyBoaXR0YWRlcyAiCisiaW50ZSIKKworIzogaWZfdGNsLmM6MTcyNAorbXNnaWQgIiIKKyJFNTcxOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgVGNsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJFNTcxOiBUeXbkcnIsIGRldHRhIGtvbW1hbmRvIORyIGluYWt0aXZlcmF0OiBUY2wtYmlibGlvdGVrZXQga3VuZGUgaW50ZSAiCisibORzYXMgaW4uIgorCisjOiBpZl90Y2wuYzoxODg2Cittc2dpZCAiIgorIkUyODE6IFRDTCBFUlJPUjogZXhpdCBjb2RlIGlzIG5vdCBpbnQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MTogVENMLUZFTDogQXZzbHV0bmluZ3Nrb2RlbiDkciBpbnRlIGludCE/IFZhciBzbuRsbCBvY2ggcmFwcG9ydGVyYSBkZXR0YSAiCisidGlsbCB2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjIwMDYKK21zZ2lkICJjYW5ub3QgZ2V0IGxpbmUiCittc2dzdHIgImthbiBpbnRlIGjkbXRhIHJhZCIKKworIzogaWZfeGNtZHNydi5jOjIxNQorbXNnaWQgIlVuYWJsZSB0byByZWdpc3RlciBhIGNvbW1hbmQgc2VydmVyIG5hbWUiCittc2dzdHIgIkt1bmRlIGludGUgcmVnaXN0cmVyYSBldHQga29tbWFuZG9zZXJ2ZXJuYW1uIgorCisjOiBpZl94Y21kc3J2LmM6NDY1Cittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODogTWlzc2x5Y2thZGVzIGF0dCBza2lja2Ega29tbWFuZG8gdGlsbCBt5Wxwcm9ncmFtbWV0IgorCisjOiBpZl94Y21kc3J2LmM6NzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzM6IEludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICJFNTczOiBPZ2lsdGlndCBzZXJ2ZXItaWQgYW525G50OiAlcyIKKworIzogaWZfeGNtZHNydi5jOjExMDIKK21zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCittc2dzdHIgIkUyNTE6IFZJTSBpbnN0YW5zcmVnaXN0ZXJlZ2Vuc2thcCDkciBk5WxpZ3QgZm9ybWF0LiAgQm9ydHRhZ2V0ISIKKworIzogbWFpbi5jOjYwCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk9r5G5kIGZsYWdnYSIKKworIzogbWFpbi5jOjYyCittc2dpZCAiVG9vIG1hbnkgZWRpdCBhcmd1bWVudHMiCittc2dzdHIgIkb2ciBt5W5nYSByZWRpZ2VyaW5nc2FyZ3VtZW50IgorCisjOiBtYWluLmM6NjQKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICJBcmd1bWVudCBzYWtuYXMgZWZ0ZXIiCisKKyM6IG1haW4uYzo2NgorbXNnaWQgIkdhcmJhZ2UgYWZ0ZXIgb3B0aW9uIgorbXNnc3RyICJTa3LkcCBlZnRlciBmbGFnZ2EiCisKKyM6IG1haW4uYzo2OAorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiwgXCItYyBjb21tYW5kXCIgb3IgXCItLWNtZCBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICIiCisiRvZyIG3lbmdhIFwiK2tvbW1hbmRvXCItLCBcIi1jIGtvbW1hbmRvXCItIGVsbGVyIFwiLS1jbWQga29tbWFuZG9cIi1hcmd1bWVudCIKKworIzogbWFpbi5jOjcwCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBmb3IiCittc2dzdHIgIk9naWx0aWd0IGFyZ3VtZW50IGb2ciIKKworIzogbWFpbi5jOjQ2NgorbXNnaWQgIlRoaXMgVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgZGlmZiBmZWF0dXJlLiIKK21zZ3N0ciAiRGVubmEgVmltIGJsZXYgaW50ZSBrb21waWxlcmFkIG1lZCBkaWZmLWZ1bmt0aW9uZW4uIgorCisjOiBtYWluLmM6OTI1Cittc2dpZCAiQXR0ZW1wdCB0byBvcGVuIHNjcmlwdCBmaWxlIGFnYWluOiBcIiIKK21zZ3N0ciAiRvZyc/ZrIGF0dCD2cHBuYSBza3JpcHRmaWwgaWdlbjogXCIiCisKKyM6IG1haW4uYzo5MjkgbWFpbi5jOjkzNiBtYWluLmM6OTgwIG1lbWxpbmUuYzozNjk0IG1lbWxpbmUuYzozNjk4Cittc2dpZCAiXCJcbiIKK21zZ3N0ciAiXCJcbiIKKworIzogbWFpbi5jOjkzNAorbXNnaWQgIkNhbm5vdCBvcGVuIGZvciByZWFkaW5nOiBcIiIKK21zZ3N0ciAiS2FuIGludGUg9nBwbmEgZvZyIGzkc25pbmc6IFwiIgorCisjOiBtYWluLmM6OTc4Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICJLYW4gaW50ZSD2cHBuYSBm9nIgc2tyaXB0dXRtYXRuaW5nOiBcIiIKKworIzogbWFpbi5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmlsZXMgdG8gZWRpdFxuIgorbXNnc3RyICIlZCBmaWxlciBhdHQgcmVkaWdlcmFcbiIKKworIzogbWFpbi5jOjEyMDIKK21zZ2lkICJWaW06IFdhcm5pbmc6IE91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IFZhcm5pbmc6IFV0bWF0bmluZyDkciBpbnRlIHRpbGwgZW4gdGVybWluYWxcbiIKKworIzogbWFpbi5jOjEyMDQKK21zZ2lkICJWaW06IFdhcm5pbmc6IElucHV0IGlzIG5vdCBmcm9tIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiBWYXJuaW5nOiBJbm1hdG5pbmcg5HIgaW50ZSBmcuVuIGVuIHRlcm1pbmFsXG4iCisKKyMuIGp1c3QgaW4gY2FzZS4uCisjOiBtYWluLmM6MTI2NgorbXNnaWQgInByZS12aW1yYyBjb21tYW5kIGxpbmUiCittc2dzdHIgInByZS12aW1yYyBrb21tYW5kb3JhZCIKKworIzogbWFpbi5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IEthbiBpbnRlIGzkc2EgZnLlbiBcIiVzXCIiCisKKyM6IG1haW4uYzoyMzY1Cittc2dpZCAiIgorIlxuIgorIk1vcmUgaW5mbyB3aXRoOiBcInZpbSAtaFwiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJNZXIgaW5mbyBtZWQ6IFwidmltIC1oXCJcbiIKKworIzogbWFpbi5jOjIzOTgKK21zZ2lkICJbZmlsZSAuLl0gICAgICAgZWRpdCBzcGVjaWZpZWQgZmlsZShzKSIKK21zZ3N0ciAiW2ZpbCAuLl0gICAgICAgcmVkaWdlcmEgYW5naXZuYSBmaWwoZXIpIgorCisjOiBtYWluLmM6MjM5OQorbXNnaWQgIi0gICAgICAgICAgICAgICByZWFkIHRleHQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiLSAgICAgICAgICAgICAgbORzIHRleHQgZnLlbiBzdGFuZGFyZCBpbiIKKworIzogbWFpbi5jOjI0MDAKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCB0YWdnICAgICAgICByZWRpZ2VyYSBmaWwgZORyIHRhZ2cg5HIgZGVmaW5pZXJhZCIKKworIzogbWFpbi5jOjI0MDIKK21zZ2lkICItcSBbZXJyb3JmaWxlXSAgZWRpdCBmaWxlIHdpdGggZmlyc3QgZXJyb3IiCittc2dzdHIgIi1xIFtmZWxmaWxdICAgIHJlZGlnZXJhIGZpbCBtZWQgZvZyc3RhIGZlbCIKKworIzogbWFpbi5jOjI0MTEKK21zZ2lkICIiCisiXG4iCisiXG4iCisidXNhZ2U6IgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiYW525G5kbmluZzoiCisKKyM6IG1haW4uYzoyNDE0Cittc2dpZCAiIHZpbSBbYXJndW1lbnRzXSAiCittc2dzdHIgIiB2aW0gW2FyZ3VtZW50XSAiCisKKyM6IG1haW4uYzoyNDE4Cittc2dpZCAiIgorIlxuIgorIiAgIG9yOiIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgZWxsZXI6IgorCisjOiBtYWluLmM6MjQyMQorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudDpcbiIKKworIzogbWFpbi5jOjI0MjIKK21zZ2lkICItLVx0XHRcdE9ubHkgZmlsZSBuYW1lcyBhZnRlciB0aGlzIgorbXNnc3RyICItLVx0XHRcdEJhcmEgZmlsbmFtbiBlZnRlciBkZXQgaORyIgorCisjOiBtYWluLmM6MjQyNAorbXNnaWQgIi0tbGl0ZXJhbFx0XHREb24ndCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICItLWxpdGVyYWxcdFx0RXhwYW5kZXJhIGludGUgam9rZXJ0ZWNrZW4iCisKKyM6IG1haW4uYzoyNDI3Cittc2dpZCAiLXJlZ2lzdGVyXHRcdFJlZ2lzdGVyIHRoaXMgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItcmVnaXN0ZXJcdFx0UmVnaXN0cmVyYSBndmltIGb2ciBPTEUiCisKKyM6IG1haW4uYzoyNDI4Cittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi11bnJlZ2lzdGVyXHRcdEF2cmVnaXN0cmVyYSBndmltIGb2ciBPTEUiCisKKyM6IG1haW4uYzoyNDMxCittc2dpZCAiLWdcdFx0XHRSdW4gdXNpbmcgR1VJIChsaWtlIFwiZ3ZpbVwiKSIKK21zZ3N0ciAiLWdcdFx0XHRL9nIgc29tIEdVSSAoc29tIFwiZ3ZpbVwiKSIKKworIzogbWFpbi5jOjI0MzIKK21zZ2lkICItZiAgb3IgIC0tbm9mb3JrXHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZiAgZWxsZXIgLS1ub2ZvcmtcdEb2cmdydW5kOiBHcmVuYSBpbnRlIHZpZCBzdGFydCBhdiBHVUkiCisKKyM6IG1haW4uYzoyNDM0Cittc2dpZCAiLXZcdFx0XHRWaSBtb2RlIChsaWtlIFwidmlcIikiCittc2dzdHIgIi12XHRcdFx0VmktbORnZSAoc29tIFwidmlcIikiCisKKyM6IG1haW4uYzoyNDM1Cittc2dpZCAiLWVcdFx0XHRFeCBtb2RlIChsaWtlIFwiZXhcIikiCittc2dzdHIgIi1lXHRcdFx0RXgtbORnZSAoc29tIFwiZXhcIikiCisKKyM6IG1haW4uYzoyNDM2Cittc2dpZCAiLXNcdFx0XHRTaWxlbnQgKGJhdGNoKSBtb2RlIChvbmx5IGZvciBcImV4XCIpIgorbXNnc3RyICItc1x0XHRcdFR5c3QgKGJhdGNoKSBs5GdlIChiYXJhIGb2ciBcImV4XCIpIgorCisjOiBtYWluLmM6MjQzOAorbXNnaWQgIi1kXHRcdFx0RGlmZiBtb2RlIChsaWtlIFwidmltZGlmZlwiKSIKK21zZ3N0ciAiLWRcdFx0XHREaWZmLWzkZ2UgKHNvbSBcInZpbWRpZmZcIikiCisKKyM6IG1haW4uYzoyNDQwCittc2dpZCAiLXlcdFx0XHRFYXN5IG1vZGUgKGxpa2UgXCJldmltXCIsIG1vZGVsZXNzKSIKK21zZ3N0ciAiLXlcdFx0XHRM5HR0IGzkZ2UgKHNvbSBcImV2aW1cIiwgbORnZXNs9nMpIgorCisjOiBtYWluLmM6MjQ0MQorbXNnaWQgIi1SXHRcdFx0UmVhZG9ubHkgbW9kZSAobGlrZSBcInZpZXdcIikiCittc2dzdHIgIi1SXHRcdFx0U2tyaXZza3lkZGF0IGzkZ2UgKHNvbSBcInZpZXdcIikiCisKKyM6IG1haW4uYzoyNDQyCittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdEJlZ3LkbnNhdCBs5GdlIChzb20gXCJydmltXCIpIgorCisjOiBtYWluLmM6MjQ0MworbXNnaWQgIi1tXHRcdFx0TW9kaWZpY2F0aW9ucyAod3JpdGluZyBmaWxlcykgbm90IGFsbG93ZWQiCittc2dzdHIgIi1tXHRcdFx0TW9kaWZpZXJpbmdhciAoc2tyaXZhIGZpbGVyKSBpbnRlIHRpbGzldGV0IgorCisjOiBtYWluLmM6MjQ0NAorbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdE1vZGlmaWVyaW5nYXIgaSB0ZXh0IGludGUgdGlsbOV0ZXQiCisKKyM6IG1haW4uYzoyNDQ1Cittc2dpZCAiLWJcdFx0XHRCaW5hcnkgbW9kZSIKK21zZ3N0ciAiLWJcdFx0XHRCaW7kcmzkZ2UiCisKKyM6IG1haW4uYzoyNDQ3Cittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0TGlzcC1s5GdlIgorCisjOiBtYWluLmM6MjQ0OQorbXNnaWQgIi1DXHRcdFx0Q29tcGF0aWJsZSB3aXRoIFZpOiAnY29tcGF0aWJsZSciCittc2dzdHIgIi1DXHRcdFx0S29tcGF0aWJlbHQgbWVkIFZpOiAnY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyNDUwCittc2dpZCAiLU5cdFx0XHROb3QgZnVsbHkgVmkgY29tcGF0aWJsZTogJ25vY29tcGF0aWJsZSciCittc2dzdHIgIi1OXHRcdFx0SW50ZSBmdWxsdCBWaS1rb21wYXRpYmVsOiAnbm9jb21wYXRpYmxlJyIKKworIzogbWFpbi5jOjI0NTEKK21zZ2lkICItVltOXVx0XHRWZXJib3NlIGxldmVsIgorbXNnc3RyICItVltOXVx0XHRN5W5nb3JkaWd0IGzkZ2UiCisKKyM6IG1haW4uYzoyNDUyCittc2dpZCAiLURcdFx0XHREZWJ1Z2dpbmcgbW9kZSIKK21zZ3N0ciAiLURcdFx0XHRGZWxz9mtuaW5nc2zkZ2UiCisKKyM6IG1haW4uYzoyNDUzCittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHRJbmdlbiB25HhsaW5nc2ZpbCwgYW525G5kIGVuZGFzdCBtaW5uZXQiCisKKyM6IG1haW4uYzoyNDU0Cittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0TGlzdGEgduR4bGluZ3NmaWxlciBvY2ggYXZzbHV0YSIKKworIzogbWFpbi5jOjI0NTUKK21zZ2lkICItciAod2l0aCBmaWxlIG5hbWUpXHRSZWNvdmVyIGNyYXNoZWQgc2Vzc2lvbiIKK21zZ3N0ciAiLXIgKG1lZCBmaWxuYW1uKVx0xXRlcnNrYXBhIGtyYXNjaGFkIHNlc3Npb24iCisKKyM6IG1haW4uYzoyNDU2Cittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRcdFNhbW1hIHNvbSAtciIKKworIzogbWFpbi5jOjI0NTgKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdFx0QW525G5kYSBpbnRlIG5ld2NsaSBm9nIgYXR0IPZwcG5hIGb2bnN0ZXIiCisKKyM6IG1haW4uYzoyNDU5Cittc2dpZCAiLWRldiA8ZGV2aWNlPlx0XHRVc2UgPGRldmljZT4gZm9yIEkvTyIKK21zZ3N0ciAiLWRldiA8ZW5oZXQ+XHRcdEFuduRuZCA8ZW5oZXQ+IGb2ciBJL08iCisKKyM6IG1haW4uYzoyNDYyCittc2dpZCAiLUFcdFx0XHRzdGFydCBpbiBBcmFiaWMgbW9kZSIKK21zZ3N0ciAiLUFcdFx0XHRzdGFydGEgaSBhcmFiaXNrdCBs5GdlIgorCisjOiBtYWluLmM6MjQ2NQorbXNnaWQgIi1IXHRcdFx0U3RhcnQgaW4gSGVicmV3IG1vZGUiCittc2dzdHIgIi1IXHRcdFx0U3RhcnRhIGkgaGVicmVpc2t0IGzkZ2UiCisKKyM6IG1haW4uYzoyNDY4Cittc2dpZCAiLUZcdFx0XHRTdGFydCBpbiBGYXJzaSBtb2RlIgorbXNnc3RyICItRlx0XHRcdFN0YXJ0YSBpIHBlcnNpc2t0IGzkZ2UgKEZhcnNpKSIKKworIzogbWFpbi5jOjI0NzAKK21zZ2lkICItVCA8dGVybWluYWw+XHRTZXQgdGVybWluYWwgdHlwZSB0byA8dGVybWluYWw+IgorbXNnc3RyICItVCA8dGVybWluYWw+XHRTdORsbCBpbiB0ZXJtaW5hbHR5cCB0aWxsIDx0ZXJtaW5hbD4iCisKKyM6IG1haW4uYzoyNDcxCittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0QW525G5kIDx2aW1yYz4gaXN05GxsZXQgZvZyIG7lZ29uIC52aW1yYyIKKworIzogbWFpbi5jOjI0NzMKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0QW525G5kIDxndmltcmM+IGlzdORsbGV0IGb2ciBu5WdvbiAuZ3ZpbXJjIgorCisjOiBtYWluLmM6MjQ3NQorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHRM5HMgaW50ZSBpbiBpbnN0aWNrc3NrcmlwdCIKKworIzogbWFpbi5jOjI0NzYKK21zZ2lkICItb1tOXVx0XHRPcGVuIE4gd2luZG93cyAoZGVmYXVsdDogb25lIGZvciBlYWNoIGZpbGUpIgorbXNnc3RyICItb1tOXVx0XHTWcHBuYSBOIGb2bnN0ZXIgKHN0YW5kYXJkOiBldHQgZvZyIHZhcmplIGZpbCkiCisKKyM6IG1haW4uYzoyNDc3Cittc2dpZCAiLU9bTl1cdFx0TGlrZSAtbyBidXQgc3BsaXQgdmVydGljYWxseSIKK21zZ3N0ciAiLU9bTl1cdFx0U29tIC1vIG1lbiBkZWxhIHZlcnRpa2FsdCIKKworIzogbWFpbi5jOjI0NzgKK21zZ2lkICIrXHRcdFx0U3RhcnQgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIitcdFx0XHRTdGFydGEgdmlkIHNsdXQgYXYgZmlsIgorCisjOiBtYWluLmM6MjQ3OQorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8bG5yPlx0XHRTdGFydGEgcOUgcmFkIDxybnI+IgorCisjOiBtYWluLmM6MjQ4MQorbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIi0tY21kIDxrb21tYW5kbz5cdEv2ciA8a29tbWFuZG8+IGb2cmUgaW5s5HNuaW5nIGF2IG7lZ29uIHZpbXJjIGZpbCIKKworIzogbWFpbi5jOjI0ODMKK21zZ2lkICItYyA8Y29tbWFuZD5cdFx0RXhlY3V0ZSA8Y29tbWFuZD4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLWMgPGtvbW1hbmRvPlx0S/ZyIDxrb21tYW5kbz4gZWZ0ZXIgaW5s5HNuaW5nIGF2IGRlbiBm9nJzdGEgZmlsZW4iCisKKyM6IG1haW4uYzoyNDg0Cittc2dpZCAiLVMgPHNlc3Npb24+XHRcdFNvdXJjZSBmaWxlIDxzZXNzaW9uPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItUyA8c2Vzc2lvbj5cdFx0S/ZyIGZpbCA8c2Vzc2lvbj4gZWZ0ZXIgaW5s5HNuaW5nIGF2IGRlbiBm9nJzdGEgZmlsZW4iCisKKyM6IG1haW4uYzoyNDg1Cittc2dpZCAiLXMgPHNjcmlwdGluPlx0UmVhZCBOb3JtYWwgbW9kZSBjb21tYW5kcyBmcm9tIGZpbGUgPHNjcmlwdGluPiIKK21zZ3N0ciAiLXMgPGluc2tyaXB0Plx0TORzIE5vcm1hbGzkZ2Vza29tbWFuZG9uIGZy5W4gZmlsIDxpbnNrcmlwdD4iCisKKyM6IG1haW4uYzoyNDg2Cittc2dpZCAiLXcgPHNjcmlwdG91dD5cdEFwcGVuZCBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLXcgPHV0c2tyaXB0Plx0TORnZyB0aWxsIGFsbGEgc2tyaXZuYSBrb21tYW5kb24gdGlsbCBmaWwgPHV0c2tyaXB0PiIKKworIzogbWFpbi5jOjI0ODcKK21zZ2lkICItVyA8c2NyaXB0b3V0Plx0V3JpdGUgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi1XIDx1dHNrcmlwdD5cdFNrcml2IGFsbGEgc2tyaXZuYSBrb21tYW5kb24gdGlsbCBmaWwgPHV0c2tyaXB0PiIKKworIzogbWFpbi5jOjI0ODkKK21zZ2lkICIteFx0XHRcdEVkaXQgZW5jcnlwdGVkIGZpbGVzIgorbXNnc3RyICIteFx0XHRcdFJlZGlnZXJhIGtyeXB0ZXJhZGUgZmlsZXIiCisKKyM6IG1haW4uYzoyNDkzCittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRDb25uZWN0IHZpbSB0byB0aGlzIHBhcnRpY3VsYXIgWC1zZXJ2ZXIiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0QW5zbHV0IHZpbSB0aWxsIGp1c3QgZGVubmEgWC1zZXJ2ZXIiCisKKyM6IG1haW4uYzoyNDk1Cittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHRBbnNsdXQgaW50ZSB0aWxsIFggc2VydmVyIgorCisjOiBtYWluLmM6MjQ5OAorbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgaWYgcG9zc2libGUiCittc2dzdHIgIi0tcmVtb3RlIDxmaWxlcj5cdFJlZGlnZXJhIDxmaWxlcj4gaSBlbiBWaW0tc2VydmVyIG9tIG32amxpZ3QiCisKKyM6IG1haW4uYzoyNDk5Cittc2dpZCAiLS1yZW1vdGUtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLXNpbGVudCA8ZmlsZXI+XHRTYW1tYSwga2xhZ2EgaW50ZSBvbSBkZXQgaW50ZSBmaW5ucyBu5WdvbiBzZXJ2ZXIiCisKKyM6IG1haW4uYzoyNTAwCittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgQXMgLS1yZW1vdGUgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQiCittc2dzdHIgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcj5cdFNvbSAtLXJlbW90ZSBtZW4gduRudGEgcOUgYXR0IGZpbGVyIGhhciBibGl2aXQgIgorInJlZGlnZXJhZGUiCisKKyM6IG1haW4uYzoyNTAxCittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcj5cdFNhbW1hLCBrbGFnYSBpbnRlIG9tIGRldCBpbnRlIGZpbm5zIG7lZ29uICIKKyJzZXJ2ZXIiCisKKyM6IG1haW4uYzoyNTAyCittc2dpZCAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFNlbmQgPGtleXM+IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLXNlbmQgPG55Y2tsYXI+XHRTa2lja2EgPG55Y2tsYXI+IHRpbGwgZW4gVmltLXNlcnZlciBvY2ggYXZzbHV0YSIKKworIzogbWFpbi5jOjI1MDMKK21zZ2lkICItLXJlbW90ZS1leHByIDxleHByPlx0RXZhbHVhdGUgPGV4cHI+IGluIGEgVmltIHNlcnZlciBhbmQgcHJpbnQgcmVzdWx0IgorbXNnc3RyICIiCisiLS1yZW1vdGUtZXhwciA8dXR0cnljaz5cdEV2YWx1ZXJhIDx1dHRyeWNrPiBpIGVuIFZpbS1zZXJ2ZXIgb2NoIHNrcml2IHV0ICIKKyJyZXN1bHRhdGV0IgorCisjOiBtYWluLmM6MjUwNAorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICItLXNlcnZlcmxpc3RcdFx0TGlzdGEgdGlsbGfkbmdsaWdhIFZpbS1zZXJ2ZXJuYW1uIG9jaCBhdnNsdXRhIgorCisjOiBtYWluLmM6MjUwNQorbXNnaWQgIi0tc2VydmVybmFtZSA8bmFtZT5cdFNlbmQgdG8vYmVjb21lIHRoZSBWaW0gc2VydmVyIDxuYW1lPiIKK21zZ3N0ciAiLS1zZXJ2ZXJuYW1lIDxuYW1uPlx0U2tpY2thIHRpbGwvZvZyIGF0dCBibGkgVmltLXNlcnZlcm4gPG5hbW4+IgorCisjOiBtYWluLmM6MjUwOAorbXNnaWQgIi1pIDx2aW1pbmZvPlx0XHRVc2UgPHZpbWluZm8+IGluc3RlYWQgb2YgLnZpbWluZm8iCittc2dzdHIgIi1pIDx2aW1pbmZvPlx0XHRBbnbkbmQgPHZpbWluZm8+IGlzdORsbGV0IGb2ciAudmltaW5mbyIKKworIzogbWFpbi5jOjI1MTAKK21zZ2lkICItaCAgb3IgIC0taGVscFx0UHJpbnQgSGVscCAodGhpcyBtZXNzYWdlKSBhbmQgZXhpdCIKK21zZ3N0ciAiLWggIGVsbGVyICAtLWhlbHBcdFNrcml2IHV0IEhq5GxwIChkZXQgaORyIG1lZGRlbGFuZGV0KSBvY2ggYXZzbHV0YSIKKworIzogbWFpbi5jOjI1MTEKK21zZ2lkICItLXZlcnNpb25cdFx0UHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKK21zZ3N0ciAiLS12ZXJzaW9uXHRcdFNrcml2IHV0IHZlcnNpb25zaW5mb3JtYXRpb24gb2NoIGF2c2x1dGEiCisKKyM6IG1haW4uYzoyNTE1Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKE1vdGlmIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnQgc29tIHN09mRzIGF2IGd2aW0gKE1vdGlmLXZlcnNpb24pOlxuIgorCisjOiBtYWluLmM6MjUxOQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChuZVh0YXcgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudCBzb20gc3T2ZHMgYXYgZ3ZpbSAobmVYdGF3LXZlcnNpb24pOlxuIgorCisjOiBtYWluLmM6MjUyMQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChBdGhlbmEgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudCBzb20gc3T2ZHMgYXYgZ3ZpbSAoQXRoZW5hLXZlcnNpb24pOlxuIgorCisjOiBtYWluLmM6MjUyNQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4iCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0S/ZyIHZpbSBw5SA8ZGlzcGxheT4iCisKKyM6IG1haW4uYzoyNTI2Cittc2dpZCAiLWljb25pY1x0XHRTdGFydCB2aW0gaWNvbmlmaWVkIgorbXNnc3RyICItaWNvbmljXHRcdFN0YXJ0YSB2aW0gc29tIGlrb24iCisKKyM6IG1haW4uYzoyNTI4Cittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG5hbW4+XHRcdEFuduRuZCByZXN1cnMgc29tIG9tIHZpbSB2YXIgPG5hbW4+IgorCisjOiBtYWluLmM6MjUyOQorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgIChPaW1wbGVtZW50ZXJhdClcbiIKKworIzogbWFpbi5jOjI1MzEKK21zZ2lkICItYmFja2dyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3IgdGhlIGJhY2tncm91bmQgKGFsc286IC1iZykiCittc2dzdHIgIi1iYWNrZ3JvdW5kIDxm5HJnPlx0QW525G5kIDxm5HJnPiBm9nIgYmFrZ3J1bmRlbiAo5HZlbjogLWJnKSIKKworIzogbWFpbi5jOjI1MzIKK21zZ2lkICItZm9yZWdyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mZykiCittc2dzdHIgIi1mb3JlZ3JvdW5kIDxm5HJnPlx0QW525G5kIDxm5HJnPiBm9nIgdmFubGlnIHRleHQgKOR2ZW46IC1mZykiCisKKyM6IG1haW4uYzoyNTMzIG1haW4uYzoyNTUzCittc2dpZCAiLWZvbnQgPGZvbnQ+XHRcdFVzZSA8Zm9udD4gZm9yIG5vcm1hbCB0ZXh0IChhbHNvOiAtZm4pIgorbXNnc3RyICItZm9udCA8dHlwc25pdHQ+XHRcdEFuduRuZCA8dHlwc25pdHQ+IGb2ciB2YW5saWcgdGV4dCAo5HZlbjogLWZuKSIKKworIzogbWFpbi5jOjI1MzQKK21zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCittc2dzdHIgIq1ib2xkZm9udCA8dHlwc25pdHQ+XHRBbnbkbmQgPHR5cHNuaXR0PiBm9nIgZmV0IHRleHQiCisKKyM6IG1haW4uYzoyNTM1Cittc2dpZCAiLWl0YWxpY2ZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBpdGFsaWMgdGV4dCIKK21zZ3N0ciAiLWl0YWxpY2ZvbnQgPHR5cHNuaXR0Plx0QW525G5kIDx0eXBzbml0dD4gZvZyIGt1cnNpdiB0ZXh0IgorCisjOiBtYWluLmM6MjUzNiBtYWluLmM6MjU1NAorbXNnaWQgIi1nZW9tZXRyeSA8Z2VvbT5cdFVzZSA8Z2VvbT4gZm9yIGluaXRpYWwgZ2VvbWV0cnkgKGFsc286IC1nZW9tKSIKK21zZ3N0ciAiIgorIi1nZW9tZXRyeSA8Z2VvbT5cdEFuduRuZCA8Z2VvbT4gZvZyIGlubGVkYW5kZSBm9m5zdGVycGxhY2VyaW5nICjkdmVuOiAtZ2VvbSkiCisKKyM6IG1haW4uYzoyNTM3Cittc2dpZCAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdFVzZSBhIGJvcmRlciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtYncpIgorbXNnc3RyICItYm9yZGVyd2lkdGggPGJyZWRkPlx0QW525G5kIGVuIHJhbWJyZWRkIG1lZCA8YnJlZGQ+ICjkdmVuOiAtYncpIgorCisjOiBtYWluLmM6MjUzOAorbXNnaWQgIi1zY3JvbGxiYXJ3aWR0aCA8d2lkdGg+ICBVc2UgYSBzY3JvbGxiYXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLXN3KSIKK21zZ3N0ciAiIgorIi1zY3JvbGxiYXJ3aWR0aCA8YnJlZGQ+ICBBbnbkbmQgZW4gcnVsbG5pbmdzbGlzdGJyZWRkIHDlIDxicmVkZD4gKOR2ZW46IC1zdykiCisKKyM6IG1haW4uYzoyNTQwCittc2dpZCAiLW1lbnVoZWlnaHQgPGhlaWdodD5cdFVzZSBhIG1lbnUgYmFyIGhlaWdodCBvZiA8aGVpZ2h0PiAoYWxzbzogLW1oKSIKK21zZ3N0ciAiLW1lbnVoZWlnaHQgPGj2amQ+XHRBbnbkbmQgZW4gbWVueXJhZHNo9mpkIG1lZCA8aPZqZD4gKOR2ZW46IC1taCkiCisKKyM6IG1haW4uYzoyNTQyIG1haW4uYzoyNTU1Cittc2dpZCAiLXJldmVyc2VcdFx0VXNlIHJldmVyc2UgdmlkZW8gKGFsc286IC1ydikiCittc2dzdHIgIi1yZXZlcnNlXHRcdEFuduRuZCBvbXbkbmQgdmlkZW8gKOR2ZW46IC1ydikiCisKKyM6IG1haW4uYzoyNTQzCittc2dpZCAiK3JldmVyc2VcdFx0RG9uJ3QgdXNlIHJldmVyc2UgdmlkZW8gKGFsc286ICtydikiCittc2dzdHIgIityZXZlcnNlXHRcdEFuduRuZCBpbnRlIG9tduRuZCB2aWRlbyAo5HZlbjogK3J2KSIKKworIzogbWFpbi5jOjI1NDQKK21zZ2lkICIteHJtIDxyZXNvdXJjZT5cdFNldCB0aGUgc3BlY2lmaWVkIHJlc291cmNlIgorbXNnc3RyICIteHJtIDx0aWxsZ+VuZz5cdFN05GxsIGluIGRlbiBhbmdpdm5hIHRpbGxn5W5nZW4iCisKKyM6IG1haW4uYzoyNTQ3Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKFJJU0MgT1MgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudCBpZ2Vua+RuZGEgYXYgZ3ZpbSAoUklTQyBPUy12ZXJzaW9uKTpcbiIKKworIzogbWFpbi5jOjI1NDgKK21zZ2lkICItLWNvbHVtbnMgPG51bWJlcj5cdEluaXRpYWwgd2lkdGggb2Ygd2luZG93IGluIGNvbHVtbnMiCittc2dzdHIgIi0tY29sdW1ucyA8YW50YWw+XHRJbmxlZGFuZGUgYnJlZGQgcOUgZvZuc3RlciBpIGtvbHVtbmVyIgorCisjOiBtYWluLmM6MjU0OQorbXNnaWQgIi0tcm93cyA8bnVtYmVyPlx0SW5pdGlhbCBoZWlnaHQgb2Ygd2luZG93IGluIHJvd3MiCittc2dzdHIgIi0tcm93cyA8YW50YWw+XHRJbmxlZGFuZGUgaPZqZCBw5SBm9m5zdGVyIGkgcmFkZXIiCisKKyM6IG1haW4uYzoyNTUyCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEdUSysgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudCBpZ2Vua+RuZGEgYXYgZ3ZpbSAoR1RLKy12ZXJzaW9uKTpcbiIKKworIzogbWFpbi5jOjI1NTYKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IChhbHNvOiAtLWRpc3BsYXkpIgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdEv2ciB2aW0gcOUgPGRpc3BsYXk+ICjkdmVuOiAtLWRpc3BsYXkpIgorCisjOiBtYWluLmM6MjU1OAorbXNnaWQgIi0tcm9sZSA8cm9sZT5cdFNldCBhIHVuaXF1ZSByb2xlIHRvIGlkZW50aWZ5IHRoZSBtYWluIHdpbmRvdyIKK21zZ3N0ciAiLS1yb2xlIDxyb2xsPlx0U3TkbGwgaW4gZW4gdW5payByb2xsIGb2ciBhdHQgaWRlbnRpZmllcmEgaHV2dWRm9m5zdHJldCIKKworIzogbWFpbi5jOjI1NjAKK21zZ2lkICItLXNvY2tldGlkIDx4aWQ+XHRPcGVuIFZpbSBpbnNpZGUgYW5vdGhlciBHVEsgd2lkZ2V0IgorbXNnc3RyICItLXNvY2tldGlkIDx4aWQ+XHTWcHBuYSBWaW0gaW5uYW5m9nIgZW4gYW5uYW4gR1RLLXdpZGdldCIKKworIzogbWFpbi5jOjI1NjIKK21zZ2lkICItLWhlbHBcdFx0U2hvdyBHbm9tZSBhcmd1bWVudHMiCittc2dzdHIgIi0taGVscFx0XHRWaXNhIEdub21lLWFyZ3VtZW50IgorCisjOiBtYWluLmM6Mjc5NAorbXNnaWQgIk5vIGRpc3BsYXkiCittc2dzdHIgIkluZ2VuIGRpc3BsYXkiCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyODA5Cittc2dpZCAiOiBTZW5kIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiDWdmVyZvZyaW5nIG1pc3NseWNrYWRlcy5cbiIKKworIy4gTGV0IHZpbSBzdGFydCBub3JtYWxseS4KKyM6IG1haW4uYzoyODE1Cittc2dpZCAiOiBTZW5kIGZhaWxlZC4gVHJ5aW5nIHRvIGV4ZWN1dGUgbG9jYWxseVxuIgorbXNnc3RyICI6INZ2ZXJm9nJpbmcgbWlzc2x5Y2thZGVzLiBG9nJz9mtlciBhdHQga/ZyYSBsb2thbHRcbiIKKworIzogbWFpbi5jOjI4NTMgbWFpbi5jOjI4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgb2YgJWQgZWRpdGVkIgorbXNnc3RyICIlZCBhdiAlZCByZWRpZ2VyYWRlIgorCisjOiBtYWluLmM6Mjg5NgorbXNnaWQgIk5vIGRpc3BsYXk6IFNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIkluZ2VuIGRpc3BsYXk6INZ2ZXJm9nJpbmdzdXR0cnljayBtaXNzbHlja2FkZXMuXG4iCisKKyM6IG1haW4uYzoyOTA4Cittc2dpZCAiOiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICI6INZ2ZXJm9nJpbmdzdXR0cnljayBtaXNzbHlja2FkZXMuXG4iCisKKyM6IG1hcmsuYzo2NjIKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIkluZ2EgbeRya2VuIHNhdHRhIgorCisjOiBtYXJrLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4MzogSW5nYSBt5HJrZW4gbWF0Y2hhZGUgXCIlc1wiIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1hcmsuYzo2NzUKK21zZ2lkICIiCisiXG4iCisibWFyayBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisibeRya2UgcmFkICBrb2wgZmlsL3RleHQiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjcxMworbXNnaWQgIiIKKyJcbiIKKyIganVtcCBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiIGhvcHAgcmFkIGtvbCBmaWwvdGV4dCIKKworIzogbWFyay5jOjEwODMKK21zZ2lkICIiCisiXG4iCisiIyBGaWxlIG1hcmtzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBGaWxt5HJrZW46XG4iCisKKyMuIFdyaXRlIHRoZSBqdW1wbGlzdCB3aXRoIC0nCisjOiBtYXJrLmM6MTExOAorbXNnaWQgIiIKKyJcbiIKKyIjIEp1bXBsaXN0IChuZXdlc3QgZmlyc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBIb3BwbGlzdGEgKG55YXN0ZSBm9nJzdCk6XG4iCisKKyM6IG1hcmsuYzoxMjE0Cittc2dpZCAiIgorIlxuIgorIiMgSGlzdG9yeSBvZiBtYXJrcyB3aXRoaW4gZmlsZXMgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBIaXN0b3JpYSBm9nIgbeRya2VuIGlubmUgaSBmaWxlciAobnlhc3RlIHRpbGwg5Gxkc3RhKTpcbiIKKworIzogbWFyay5jOjEyOTcKK21zZ2lkICJNaXNzaW5nICc+JyIKK21zZ3N0ciAiU2FrbmFyICc+JyIKKworIzogbWJ5dGUuYzo0MTUKK21zZ2lkICJFNTQzOiBOb3QgYSB2YWxpZCBjb2RlcGFnZSIKK21zZ3N0ciAiRTU0MzogSW50ZSBlbiBnb2Rr5G5kIHRlY2tlbnRhYmVsbCIKKworIzogbWJ5dGUuYzo0MDk5Cittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IEthbiBpbnRlIHN05GxsYSBpbiBJQy125HJkZW4iCisKKyM6IG1ieXRlLmM6NDI1MQorbXNnaWQgIkUyODU6IEZhaWxlZCB0byBjcmVhdGUgaW5wdXQgY29udGV4dCIKK21zZ3N0ciAiRTI4NTogTWlzc2x5Y2thZGVzIGF0dCBza2FwYSBpbm1hdG5pbmdzbWlsavYiCisKKyM6IG1ieXRlLmM6NDM5OAorbXNnaWQgIkUyODY6IEZhaWxlZCB0byBvcGVuIGlucHV0IG1ldGhvZCIKK21zZ3N0ciAiRTI4NjogTWlzc2x5Y2thZGVzIGF0dCD2cHBuYSBpbm1hdG5pbmdzbWV0b2QiCisKKyM6IG1ieXRlLmM6NDQwOQorbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4NzogVmFybmluZzogS3VuZGUgaW50ZSBzdORsbGEgaW4gZvZyc3T2cm5pbmdz5XRlcmthbGxuaW5nIHRpbGwgSU0iCisKKyM6IG1ieXRlLmM6NDQxNQorbXNnaWQgIkUyODg6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgYW55IHN0eWxlIgorbXNnc3RyICJFMjg4OiBpbm1hdG5pbmdzbWV0b2Qgc3T2ZGVyIGludGUgbuVnb24gc3RpbCIKKworIzogbWJ5dGUuYzo0NDcyCittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IGlubWF0bmluZ3NtZXRvZCBzdPZkZXIgaW50ZSBtaW4gZvZycmVkaWdlcmluZ3N0eXAiCisKKyM6IG1ieXRlLmM6NDU0NgorbXNnaWQgIkUyOTA6IG92ZXItdGhlLXNwb3Qgc3R5bGUgcmVxdWlyZXMgZm9udHNldCIKK21zZ3N0ciAiRTI5MDog9nZlci1wcmlja2VuLXN0aWwga3LkdmVyIHR5cHNuaXR0c3VwcHPkdHRuaW5nIgorCisjOiBtYnl0ZS5jOjQ1NzgKK21zZ2lkICJFMjkxOiBZb3VyIEdUSysgaXMgb2xkZXIgdGhhbiAxLjIuMy4gU3RhdHVzIGFyZWEgZGlzYWJsZWQiCittc2dzdHIgIkUyOTE6IERpbiBHVEsrIORyIORsZHJlIORuIDEuMi4zLiBTdGF0dXNvbXLlZGUgaW5ha3RpdmVyYXQiCisKKyM6IG1ieXRlLmM6NDg1NworbXNnaWQgIkUyOTI6IElucHV0IE1ldGhvZCBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmciCittc2dzdHIgIkUyOTI6IElubWF0bmluZ3NtZXRvZHNlcnZlciBr9nJzIGludGUiCisKKyM6IG1lbWZpbGUuYzo0ODgKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5MzogYmxvY2sgbOVzdGVzIGludGUiCisKKyM6IG1lbWZpbGUuYzo5OTUKK21zZ2lkICJFMjk0OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSByZWFkIgorbXNnc3RyICJFMjk0OiBT9mtmZWwgaSB25HhlbGZpbHNs5HNuaW5nIgorCisjOiBtZW1maWxlLmM6MTAwMAorbXNnaWQgIkUyOTU6IFJlYWQgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk1OiBM5HNmZWwgaSB25HhlbGZpbCIKKworIzogbWVtZmlsZS5jOjEwNTIKK21zZ2lkICJFMjk2OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIKK21zZ3N0ciAiRTI5NjogU/ZrZmVsIGkgduR4ZWxmaWxza3Jpdm5pbmciCisKKyM6IG1lbWZpbGUuYzoxMDcwCittc2dpZCAiRTI5NzogV3JpdGUgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk3OiBTa3JpdmZlbCBpIHbkeGVsZmlsIgorCisjOiBtZW1maWxlLmM6MTI2NworbXNnaWQgIkUzMDA6IFN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyAoc3ltbGluayBhdHRhY2s/KSIKK21zZ3N0ciAiRTMwMDogVuR4ZWxmaWwgZXhpc3RlcmFyIHJlZGFuIChzeW1s5G5rc2F0dGFjaz8pIgorCisjOiBtZW1saW5lLmM6Mjc1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIKK21zZ3N0ciAiRTI5ODogVG9nIGludGUgZW1vdCBibG9jayBuciAwPyIKKworIzogbWVtbGluZS5jOjMxNQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMT8iCittc2dzdHIgIkUyOTg6IFRvZyBpbnRlIGVtb3QgYmxvY2sgbnIgMT8iCisKKyM6IG1lbWxpbmUuYzozMzMKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDI/IgorbXNnc3RyICJFMjk4OiBUb2cgaW50ZSBlbW90IGJsb2NrIG5yIDI/IgorCisjLiBjb3VsZCBub3QgKHJlKW9wZW4gdGhlIHN3YXAgZmlsZSwgd2hhdCBjYW4gd2UgZG8/Pz8/CisjOiBtZW1saW5lLmM6NDQzCittc2dpZCAiRTMwMTogT29wcywgbG9zdCB0aGUgc3dhcCBmaWxlISEhIgorbXNnc3RyICJFMzAxOiBIb3Bwc2FuLCB0YXBwYXQgYm9ydCB25HhlbGZpbGVuISEhIgorCisjOiBtZW1saW5lLmM6NDQ4Cittc2dpZCAiRTMwMjogQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDI6IEt1bmRlIGludGUgZPZwYSBvbSB25HhlbGZpbCIKKworIzogbWVtbGluZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIKK21zZ3N0ciAiRTMwMzogS3VuZGUgaW50ZSD2cHBuYSB25HhlbGZpbCBm9nIgXCIlc1wiLCDldGVyc2thcG5pbmcgb232amxpZyIKKworIzogbWVtbGluZS5jOjYxNworbXNnaWQgIkUzMDQ6IG1sX3RpbWVzdGFtcDogRGlkbid0IGdldCBibG9jayAwPz8iCittc2dzdHIgIkUzMDQ6IG1sX3RpbWVzdGFtcDogVG9nIGludGUgZW1vdCBibG9jayAwPz8iCisKKyM6IG1lbWxpbmUuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNTogTm8gc3dhcCBmaWxlIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiRTMwNTogSW5nZW4gduR4ZWxmaWwgaGl0dGFkIGb2ciAlcyIKKworIzogbWVtbGluZS5jOjc2NworbXNnaWQgIkVudGVyIG51bWJlciBvZiBzd2FwIGZpbGUgdG8gdXNlICgwIHRvIHF1aXQpOiAiCittc2dzdHIgIkFuZ2UgbnVtbWVyIHDlIHbkeGVsZmlsIGF0dCBhbnbkbmRhICgwIGb2ciBhdHQgYXZzbHV0YSk6ICIKKworIzogbWVtbGluZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA2OiBDYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiRTMwNjogS2FuIGludGUg9nBwbmEgJXMiCisKKyM6IG1lbWxpbmUuYzo4MzQKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBibG9jayAwIGZyb20gIgorbXNnc3RyICJLdW5kZSBpbnRlIGzkc2EgYmxvY2sgMCBmcuVuICIKKworIzogbWVtbGluZS5jOjgzNworbXNnaWQgIiIKKyJcbiIKKyJNYXliZSBubyBjaGFuZ2VzIHdlcmUgbWFkZSBvciBWaW0gZGlkIG5vdCB1cGRhdGUgdGhlIHN3YXAgZmlsZS4iCittc2dzdHIgIiIKKyJcbiIKKyJLYW5za2UgZ2pvcmRlcyBpbnRlIG7lZ3JhIGb2cuRuZHJpbmdhciBlbGxlciBz5SB1cHBkYXRlcmFkZSBpbnRlIFZpbSAiCisiduR4bGluZ3NmaWxlbi4iCisKKyM6IG1lbWxpbmUuYzo4NDcgbWVtbGluZS5jOjg2NAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW0uXG4iCittc2dzdHIgIiBrYW4gaW50ZSBhbnbkbmRhcyBtZWQgZGVuIGjkciB2ZXJzaW9uZW4gYXYgVmltLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAiQW525G5kIFZpbSB2ZXJzaW9uIDMuMC5cbiIKKworIzogbWVtbGluZS5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA3OiAlcyBkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlIgorbXNnc3RyICJFMzA3OiAlcyBzZXIgaW50ZSB1dCBzb20gZW4gVmltLXbkeGxpbmdzZmlsIgorCisjOiBtZW1saW5lLmM6ODY4Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIG9uIHRoaXMgY29tcHV0ZXIuXG4iCittc2dzdHIgIiBrYW4gaW50ZSBhbnbkbmRhcyBw5SBkZW4gaORyIGRhdG9ybi5cbiIKKworIzogbWVtbGluZS5jOjg3MAorbXNnaWQgIlRoZSBmaWxlIHdhcyBjcmVhdGVkIG9uICIKK21zZ3N0ciAiRmlsZW4gc2thcGFkZXMgcOUgIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyJlbGxlciBz5SBoYXIgZmlsZW4gYmxpdml0IHNrYWRhZC4iCisKKyM6IG1lbWxpbmUuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgc3dhcCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiQW525G5kZXIgduR4bGluZ3NmaWwgXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk9yaWdpbmFsIGZpbGUgXCIlc1wiIgorbXNnc3RyICJPcmdpbmFsZmlsIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkyMgorbXNnaWQgIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIgorbXNnc3RyICJFMzA4OiBWYXJuaW5nOiBPcmdpbmFsZmlsZW4ga2FuIGhhIGJsaXZpdCBza2FkYWQiCisKKyM6IG1lbWxpbmUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwOTogVW5hYmxlIHRvIHJlYWQgYmxvY2sgMSBmcm9tICVzIgorbXNnc3RyICJFMzA5OiBLdW5kZSBpbnRlIGzkc2EgYmxvY2sgMSBmcuVuICVzIgorCisjOiBtZW1saW5lLmM6OTc5Cittc2dpZCAiPz8/TUFOWSBMSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz9NxU5HQSBSQURFUiBTQUtOQVMiCisKKyM6IG1lbWxpbmUuYzo5OTUKK21zZ2lkICI/Pz9MSU5FIENPVU5UIFdST05HIgorbXNnc3RyICI/Pz9SQURBTlRBTCBGRUwiCisKKyM6IG1lbWxpbmUuYzoxMDAyCittc2dpZCAiPz8/RU1QVFkgQkxPQ0siCittc2dzdHIgIj8/P1RPTVQgQkxPQ0siCisKKyM6IG1lbWxpbmUuYzoxMDI4Cittc2dpZCAiPz8/TElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/UkFERVIgU0FLTkFTIgorCisjOiBtZW1saW5lLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzEwOiBCbG9jayAxIElEIHdyb25nICglcyBub3QgYSAuc3dwIGZpbGU/KSIKK21zZ3N0ciAiRTMxMDogQmxvY2sgMSBJRCBmZWwgKCVzIGludGUgZW4gLnN3cC1maWw/KSIKKworIzogbWVtbGluZS5jOjEwNjUKK21zZ2lkICI/Pz9CTE9DSyBNSVNTSU5HIgorbXNnc3RyICI/Pz9CTE9DSyBTQUtOQVMiCisKKyM6IG1lbWxpbmUuYzoxMDgxCittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGJlIG1lc3NlZCB1cCIKK21zZ3N0ciAiPz8/IGZy5W4gaORyIHRpbGwgPz8/U0xVVCBrYW4gcmFkZXIgdmFyYSB0aWxsc3T2a2FkZSIKKworIzogbWVtbGluZS5jOjEwOTcKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiCittc2dzdHIgIj8/PyBmcuVuIGjkciB0aWxsID8/P1NMVVQga2FuIHJhZGVyIGhhIGJsaXZpdCBpbmZvZ2FkZS9ib3J0dGFnbmEiCisKKyM6IG1lbWxpbmUuYzoxMTE3Cittc2dpZCAiPz8/RU5EIgorbXNnc3RyICI/P1NMVVQiCisKKyM6IG1lbWxpbmUuYzoxMTQzCittc2dpZCAiRTMxMTogUmVjb3ZlcnkgSW50ZXJydXB0ZWQiCittc2dzdHIgIkUzMTE6IMV0ZXJza2FwbmluZyBhdmJydXRlbiIKKworIzogbWVtbGluZS5jOjExNDUKK21zZ2lkICIiCisiRTMxMjogRXJyb3JzIGRldGVjdGVkIHdoaWxlIHJlY292ZXJpbmc7IGxvb2sgZm9yIGxpbmVzIHN0YXJ0aW5nIHdpdGggPz8/IgorbXNnc3RyICIiCisiRTMxMjogRmVsIHVwcHTkY2t0IHZpZCDldGVyc2thcG5pbmc7IHRpdHRhIGVmdGVyIHJhZGVyIHNvbSBi9nJqYXIgbWVkID8/PyIKKworIzogbWVtbGluZS5jOjExNDgKK21zZ2lkICJSZWNvdmVyeSBjb21wbGV0ZWQuIFlvdSBzaG91bGQgY2hlY2sgaWYgZXZlcnl0aGluZyBpcyBPSy4iCittc2dzdHIgIsV0ZXJza2FwbmluZyBrbGFyLiBEdSBib3JkZSBrb250cm9sbGVyYSBvbSBhbGx0aW5nIORyIE9LLiIKKworIzogbWVtbGluZS5jOjExNDkKK21zZ2lkICIiCisiXG4iCisiKFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIG91dCB0aGlzIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoRHUga2Fuc2tlIHZpbGwgc3BhcmEgZGVuIGjkciBmaWxlbiB1bmRlciBldHQgYW5uYXQgbmFtblxuIgorCisjOiBtZW1saW5lLmM6MTE1MAorbXNnaWQgImFuZCBydW4gZGlmZiB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIHRvIGNoZWNrIGZvciBjaGFuZ2VzKVxuIgorbXNnc3RyICIiCisib2NoIGv2ciBkaWZmIG1lZCBvcmdpbmFsZmlsZW4gZvZyIGF0dCBrb250cm9sbGVyYSBlZnRlciBm9nLkbmRyaW5nYXIpXG4iCisKKyM6IG1lbWxpbmUuYzoxMTUxCittc2dpZCAiIgorIkRlbGV0ZSB0aGUgLnN3cCBmaWxlIGFmdGVyd2FyZHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJUYSBib3J0IC5zd3AtZmlsZW4gZWZ0ZXLldC5cbiIKKyJcbiIKKworIy4gdXNlIG1zZygpIHRvIHN0YXJ0IHRoZSBzY3JvbGxpbmcgcHJvcGVybHkKKyM6IG1lbWxpbmUuYzoxMjA3Cittc2dpZCAiU3dhcCBmaWxlcyBmb3VuZDoiCittc2dzdHIgIlbkeGxpbmdzZmlsZXIgaGl0dGFkZToiCisKKyM6IG1lbWxpbmUuYzoxMzg1Cittc2dpZCAiICAgSW4gY3VycmVudCBkaXJlY3Rvcnk6XG4iCittc2dzdHIgIiAgIEkgYWt0dWVsbCBrYXRhbG9nOlxuIgorCisjOiBtZW1saW5lLmM6MTM4NworbXNnaWQgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorbXNnc3RyICIgICBBbnbkbmRlciBhbmdpdmV0IG5hbW46XG4iCisKKyM6IG1lbWxpbmUuYzoxMzkxCittc2dpZCAiICAgSW4gZGlyZWN0b3J5ICIKK21zZ3N0ciAiICAgSSBrYXRhbG9nICIKKworIzogbWVtbGluZS5jOjE0MDkKK21zZ2lkICIgICAgICAtLSBub25lIC0tXG4iCittc2dzdHIgIiAgICAgIC0tIGluZ2V0IC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDgxCittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgICAgICDkZ2QgYXY6ICIKKworIzogbWVtbGluZS5jOjE0ODMKK21zZ2lkICIgICBkYXRlZDogIgorbXNnc3RyICIgICBkYXRlcmFkOiAiCisKKyM6IG1lbWxpbmUuYzoxNDg3IG1lbWxpbmUuYzozNzAxCittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICBkYXRlcmFkOiAiCisKKyM6IG1lbWxpbmUuYzoxNTAzCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgICAgW2Zy5W4gVmltIHZlcnNpb24gMy4wXSIKKworIzogbWVtbGluZS5jOjE1MDcKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgIFtzZXIgaW50ZSB1dCBzb20gZW4gVmltLXbkeGxpbmdzZmlsXSIKKworIzogbWVtbGluZS5jOjE1MTEKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgICAgZmlsbmFtbjogIgorCisjOiBtZW1saW5lLmM6MTUxNworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICAgbW9kaWZpZWQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICBtb2RpZmllcmFkOiAiCisKKyM6IG1lbWxpbmUuYzoxNTE4Cittc2dpZCAiWUVTIgorbXNnc3RyICJKQSIKKworIzogbWVtbGluZS5jOjE1MTgKK21zZ2lkICJubyIKK21zZ3N0ciAibmVqIgorCisjOiBtZW1saW5lLmM6MTUyMgorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICB1c2VyIG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIGFuduRuZGFybmFtbjogIgorCisjOiBtZW1saW5lLmM6MTUyOQorbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgICB25HJkbmFtbjogIgorCisjOiBtZW1saW5lLmM6MTUzMQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIHbkcmRuYW1uOiAiCisKKyM6IG1lbWxpbmUuYzoxNTM3Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICBwcm9jZXNzLUlEOiAiCisKKyM6IG1lbWxpbmUuYzoxNTQzCittc2dpZCAiIChzdGlsbCBydW5uaW5nKSIKK21zZ3N0ciAiIChr9nJzIGZvcnRmYXJhbmRlKSIKKworIzogbWVtbGluZS5jOjE1NTUKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFtpbnRlIGFuduRuZGJhciBtZWQgZGVuIGjkciB2ZXJzaW9uZW4gYXYgVmltXSIKKworIzogbWVtbGluZS5jOjE1NTgKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgb24gdGhpcyBjb21wdXRlcl0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbaW50ZSBhbnbkbmRiYXIgcOUgZGVuIGjkciBkYXRvcm5dIgorCisjOiBtZW1saW5lLmM6MTU2MworbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iCittc2dzdHIgIiAgICAgICAgIFtrYW4gaW50ZSBs5HNhc10iCisKKyM6IG1lbWxpbmUuYzoxNTY3Cittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSBvcGVuZWRdIgorbXNnc3RyICIgICAgICAgICBba2FuIGludGUg9nBwbmFzXSIKKworIzogbWVtbGluZS5jOjE3NTcKK21zZ2lkICJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMxMzogS2FuIGludGUgYmV2YXJhLCBkZXQgZmlubnMgaW5nZW4gduR4bGluZ3NmaWwiCisKKyM6IG1lbWxpbmUuYzoxODEwCittc2dpZCAiRmlsZSBwcmVzZXJ2ZWQiCittc2dzdHIgIkZpbCBiZXZhcmFkIgorCisjOiBtZW1saW5lLmM6MTgxMgorbXNnaWQgIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIKK21zZ3N0ciAiRTMxNDogQmV2YXJpbmcgbWlzc2x5Y2thZGVzIgorCisjOiBtZW1saW5lLmM6MTg4MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzE1OiBtbF9nZXQ6IGludmFsaWQgbG51bTogJWxkIgorbXNnc3RyICJFMzE1OiBtbF9nZXQ6IG9naWx0aWd0IGxudW06ICVsZCIKKworIzogbWVtbGluZS5jOjE5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNjogbWxfZ2V0OiBjYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMxNjogbWxfZ2V0OiBrYW4gaW50ZSBoaXR0YSByYWQgJWxkIgorCisjOiBtZW1saW5lLmM6MjI5OQorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAiRTMxNzogcGVrYXJibG9jay1pZCBmZWwgMyIKKworIzogbWVtbGluZS5jOjIzNzkKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCBza2EgdmFyYSAwIgorCisjOiBtZW1saW5lLmM6MjQ0MQorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODogVXBwZGF0ZXJhZGUgZvZyIG3lbmdhIGJsb2NrPyIKKworIzogbWVtbGluZS5jOjI2MjMKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDQiCittc2dzdHIgIkUzMTc6IHBla2FyYmxvY2staWQgZmVsIDQiCisKKyM6IG1lbWxpbmUuYzoyNjUwCittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAidGFnaXQgYm9ydCBibG9jayAxPyIKKworIzogbWVtbGluZS5jOjI4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6IEthbiBpbnRlIGhpdHRhIHJhZCAlbGQiCisKKyM6IG1lbWxpbmUuYzozMDkzCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyIKK21zZ3N0ciAiRTMxNzogcGVrYXJibG9jay1pZCBmZWwiCisKKyM6IG1lbWxpbmUuYzozMTA5Cittc2dpZCAicGVfbGluZV9jb3VudCBpcyB6ZXJvIgorbXNnc3RyICJwZV9saW5lX2NvdW50IORyIG5vbGwiCisKKyM6IG1lbWxpbmUuYzozMTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjI6IGxpbmUgbnVtYmVyIG91dCBvZiByYW5nZTogJWxkIHBhc3QgdGhlIGVuZCIKK21zZ3N0ciAiRTMyMjogcmFkbnVtbWVyIHV0YW5m9nIgb21y5WRlOiAlbGQgYmFrb20gc2x1dGV0IgorCisjOiBtZW1saW5lLmM6MzE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIzOiBsaW5lIGNvdW50IHdyb25nIGluIGJsb2NrICVsZCIKK21zZ3N0ciAiRTMyMzogcmFkYW50YWwgZmVsIGkgYmxvY2sgJWxkIgorCisjOiBtZW1saW5lLmM6MzE5MQorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICJTdGFja3N0b3JsZWsg9mthciIKKworIzogbWVtbGluZS5jOjMyMzcKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDIiCittc2dzdHIgIkUzMTc6IHBla2FyYmxvY2staWQgZmVsIDIiCisKKyM6IG1lbWxpbmUuYzozNjkxCittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiBMWVNUUklORyIKKworIzogbWVtbGluZS5jOjM2OTIKK21zZ2lkICIiCisiXG4iCisiRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgXCIiCittc2dzdHIgIiIKKyJcbiIKKyJIaXR0YWRlIGVuIHbkeGxpbmdzZmlsIG1lZCBuYW1uZXQgXCIiCisKKyM6IG1lbWxpbmUuYzozNjk2Cittc2dpZCAiV2hpbGUgb3BlbmluZyBmaWxlIFwiIgorbXNnc3RyICJWaWQg9nBwbmluZyBhdiBmaWwgXCIiCisKKyM6IG1lbWxpbmUuYzozNzA1Cittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgIE5ZQVJFIORuIHbkeGVsZmlsIVxuIgorCisjLiBTb21lIG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSBsb25nIHRvIGFsbG93IHRyYW5zbGF0aW9uIHRvCisjLiAqIG90aGVyIGxhbmd1YWdlcy4KKyM6IG1lbWxpbmUuYzozNzA5Cittc2dpZCAiIgorIlxuIgorIigxKSBBbm90aGVyIHByb2dyYW0gbWF5IGJlIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS5cbiIKKyIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgYmUgY2FyZWZ1bCBub3QgdG8gZW5kIHVwIHdpdGggdHdvXG4iCisiICAgIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZmlsZSB3aGVuIG1ha2luZyBjaGFuZ2VzLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDEpIEV0dCBhbm5hdCBwcm9ncmFtIGthbiByZWRpZ2VyYSBzYW1tYSBmaWwuXG4iCisiICAgIE9tIHPlIORyIGZhbGxldCwgdmFyIGb2cnNpa3RpZyBz5SBhdHQgZGV0IGludGUgc2x1dGFyIG1lZCB0duVcbiIKKyIgICAgdmVyc2lvbmVyIGF2IHNhbW1hIGZpbCB2aWQgZvZy5G5kcmluZ2FyLlxuIgorCisjOiBtZW1saW5lLmM6MzcxMAorbXNnaWQgIiAgICBRdWl0LCBvciBjb250aW51ZSB3aXRoIGNhdXRpb24uXG4iCittc2dzdHIgIiAgICBBdnNsdXRhLCBlbGxlciBmb3J0c+R0dCBw5SBlZ2VuIHJpc2suXG4iCisKKyM6IG1lbWxpbmUuYzozNzExCittc2dpZCAiIgorIlxuIgorIigyKSBBbiBlZGl0IHNlc3Npb24gZm9yIHRoaXMgZmlsZSBjcmFzaGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDIpIEVuIHJlZGlnZXJpbmdzc2Vzc2lvbiBm9nIgZGVuIGjkciBmaWxlbiBrcmFzY2hhZGUuXG4iCisKKyM6IG1lbWxpbmUuYzozNzEyCittc2dpZCAiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSBcIjpyZWNvdmVyXCIgb3IgXCJ2aW0gLXIgIgorbXNnc3RyICIgICAgT20gc+Ug5HIgZmFsbGV0LCBhbnbkbmQgXCI6cmVjb3ZlclwiIGVsbGVyIFwidmltIC1yICIKKworIzogbWVtbGluZS5jOjM3MTQKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gcmVjb3ZlciB0aGUgY2hhbmdlcyAoc2VlIFwiOmhlbHAgcmVjb3ZlcnlcIikuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICBm9nIgYXR0IOV0ZXJza2FwYSBm9nLkbmRyaW5nYXJuYSAoc2UgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKKworIzogbWVtbGluZS5jOjM3MTUKK21zZ2lkICIgICAgSWYgeW91IGRpZCB0aGlzIGFscmVhZHksIGRlbGV0ZSB0aGUgc3dhcCBmaWxlIFwiIgorbXNnc3RyICIgICAgT20gZHUgcmVkYW4gaGFyIGdqb3J0IGRldCwgdGEgYm9ydCB25HhsaW5nc2ZpbGVuIFwiIgorCisjOiBtZW1saW5lLmM6MzcxNworbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byBhdm9pZCB0aGlzIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICBm9nIgYXR0IHVuZHZpa2EgZGV0IGjkciBtZWRkZWxhbmRldC5cbiIKKworIzogbWVtbGluZS5jOjM3MzEgbWVtbGluZS5jOjM3MzUKK21zZ2lkICJTd2FwIGZpbGUgXCIiCittc2dzdHIgIlbkeGxpbmdzZmlsIFwiIgorCisjOiBtZW1saW5lLmM6MzczMiBtZW1saW5lLmM6MzczOAorbXNnaWQgIlwiIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiXCIgZXhpc3RlcmFyIHJlZGFuISIKKworIzogbWVtbGluZS5jOjM3NDEKK21zZ2lkICJWSU0gLSBBVFRFTlRJT04iCittc2dzdHIgIlZJTSAtIExZU1RSSU5HIgorCisjOiBtZW1saW5lLmM6Mzc0MworbXNnaWQgIlN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlbkeGxpbmdzZmlsIGV4aXN0ZXJhciByZWRhbiEiCisKKyM6IG1lbWxpbmUuYzozNzQ3Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXQiCittc2dzdHIgIiIKKyIm1nBwbmEgc2tyaXZza3lkZGFkXG4iCisiJlJlZGlnZXJhIORuZOVcbiIKKyImxXRlcnNrYXBhXG4iCisiJkF2c2x1dGEiCisKKyM6IG1lbWxpbmUuYzozNzQ5Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisiJtZwcG5hIHNrcml2c2t5ZGRhZFxuIgorIiZSZWRpZ2VyYSDkbmTlXG4iCisiJsV0ZXJza2FwYVxuIgorIiZBdnNsdXRhXG4iCisiJlRhIGJvcnQgZGVuIgorCisjOiBtZW1saW5lLmM6MzgwMgorbXNnaWQgIkUzMjY6IFRvbyBtYW55IHN3YXAgZmlsZXMgZm91bmQiCittc2dzdHIgIkUzMjY6IEb2ciBt5W5nYSB25HhsaW5nc2ZpbGVyIGhpdHRhZGUiCisKKyM6IG1lbnUuYzo2NAorbXNnaWQgIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51IgorbXNnc3RyICJFMzI3OiBEZWwgYXYgbWVueWb2cmVt5Wwgc/ZrduRnIORyIGludGUgdW5kZXJtZW55IgorCisjOiBtZW51LmM6NjUKK21zZ2lkICJFMzI4OiBNZW51IG9ubHkgZXhpc3RzIGluIGFub3RoZXIgbW9kZSIKK21zZ3N0ciAiRTMyODogTWVueSBleGlzdGVyYXIgYmFyYSBpIGV0dCBhbm5hdCBs5GdlIgorCisjOiBtZW51LmM6NjYKK21zZ2lkICJFMzI5OiBObyBtZW51IG9mIHRoYXQgbmFtZSIKK21zZ3N0ciAiRTMyOTogSW5nZW4gbWVueSBtZWQgZGV0IG5hbW5ldCIKKworIzogbWVudS5jOjUwOQorbXNnaWQgIkUzMzA6IE1lbnUgcGF0aCBtdXN0IG5vdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzA6IE1lbnlz9mt25GcgZuVyIGludGUgbGVkYSB0aWxsIGVuIHVuZGVybWVueSIKKworIzogbWVudS5jOjU0OAorbXNnaWQgIkUzMzE6IE11c3Qgbm90IGFkZCBtZW51IGl0ZW1zIGRpcmVjdGx5IHRvIG1lbnUgYmFyIgorbXNnc3RyICJFMzMxOiBG5XIgaW50ZSBs5GdnYSB0aWxsIG1lbnlm9nJlbeVsIGRpcmVrdCB0aWxsIG1lbnlyYWQiCisKKyM6IG1lbnUuYzo1NTQKK21zZ2lkICJFMzMyOiBTZXBhcmF0b3IgY2Fubm90IGJlIHBhcnQgb2YgYSBtZW51IHBhdGgiCittc2dzdHIgIkUzMzI6IEF2c2tpbGphcmUga2FtIGludGUgdmFyYSBlbiBkZWwgYXYgZW4gbWVueXP2a3bkZyIKKworIy4gTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtZW51LmM6MTA4MQorbXNnaWQgIiIKKyJcbiIKKyItLS0gTWVudXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIE1lbnllciAtLS0iCisKKyM6IG1lbnUuYzoxOTk4Cittc2dpZCAiVGVhciBvZmYgdGhpcyBtZW51IgorbXNnc3RyICJUYSBsb3NzIGRlbiBo5HIgbWVueW4iCisKKyM6IG1lbnUuYzoyMDYzCittc2dpZCAiRTMzMzogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIG1lbnUgaXRlbSIKK21zZ3N0ciAiRTMzMzogTWVueXP2a3bkZyBt5XN0ZSBsZWRhIHRpbGwgZXR0IG1lbnlm9nJlbeVsIgorCisjOiBtZW51LmM6MjA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzM0OiBNZW51IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUzMzQ6IE1lbnkgaGl0dGFkZXMgaW50ZTogJXMiCisKKyM6IG1lbnUuYzoyMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzU6IE1lbnUgbm90IGRlZmluZWQgZm9yICVzIG1vZGUiCittc2dzdHIgIkUzMzU6IE1lbnkgaW50ZSBkZWZpbmllcmFkIGb2ciAlcyBs5GdlIgorCisjOiBtZW51LmM6MjE5MAorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogTWVueXP2a3bkZyBt5XN0ZSBsZWRhIHRpbGwgZW4gdW5kZXJtZW55IgorCisjOiBtZW51LmM6MjIxMQorbXNnaWQgIkUzMzc6IE1lbnUgbm90IGZvdW5kIC0gY2hlY2sgbWVudSBuYW1lcyIKK21zZ3N0ciAiRTMzNzogTWVueSBoaXR0YWRlcyBpbnRlIC0ga29udHJvbGxlcmEgbWVueW5hbW4iCisKKyM6IG1lc3NhZ2UuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZyAlczoiCittc2dzdHIgIkZlbCB1cHB05GNrdGVzIHZpZCBiZWFyYmV0bmluZyBhdiAlczoiCisKKyM6IG1lc3NhZ2UuYzo1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlNGxkOiIKK21zZ3N0ciAicmFkICU0bGQ6IgorCisjOiBtZXNzYWdlLmM6NTc1Cittc2dpZCAiW3N0cmluZyB0b28gbG9uZ10iCittc2dzdHIgIltzdHLkbmcgZvZyIGzlbmddIgorCisjOiBtZXNzYWdlLmM6NzIxCittc2dpZCAiTWVzc2FnZXMgbWFpbnRhaW5lcjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4iCittc2dzdHIgIk1lZGRlbGFuZGVhbnN2YXJpZzogSm9oYW4gU3ZlZGJlcmcgPGpvaGFuQHN2ZWRiZXJnLnBwLnNlPiIKKworIzogbWVzc2FnZS5jOjk0NQorbXNnaWQgIkludGVycnVwdDogIgorbXNnc3RyICJBdmJyb3R0OiAiCisKKyM6IG1lc3NhZ2UuYzo5NDgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIlRyeWNrIFJFVFVSIGb2ciBhdHQgZm9ydHPkdHRhIgorCisjOiBtZXNzYWdlLmM6OTUwCittc2dpZCAiSGl0IEVOVEVSIG9yIHR5cGUgY29tbWFuZCB0byBjb250aW51ZSIKK21zZ3N0ciAiVHJ5Y2sgUkVUVVIgZWxsZXIgc2tyaXYga29tbWFuZG8gZvZyIGF0dCBmb3J0c+R0dGEiCisKKyM6IG1lc3NhZ2UuYzoyMjU4Cittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0gTWVyIC0tIgorCisjOiBtZXNzYWdlLmM6MjI2MQorbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoRU5UL0JTOiByYWQsIEJMQU5LU1RFRy9iOiBzaWRhLCBkL3U6IGhhbHYgc2lkYSBxOiBhdnNsdXRhIgorCisjOiBtZXNzYWdlLmM6MjI2MgorbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChFTlQ6IHJhZCwgQkxBTktTVEVHOiBzaWRhIGQ6IGhhbHYgc2lkYSBxOiBhdnNsdXRhKSIKKworIzogbWVzc2FnZS5jOjI4NjkgbWVzc2FnZS5jOjI4ODQKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAiRnLlZ2EiCisKKyM6IG1lc3NhZ2UuYzoyODcxCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm8iCittc2dzdHIgIiIKKyImSmFcbiIKKyImTmVqIgorCisjOiBtZXNzYWdlLmM6MjkwNAorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZKYVxuIgorIiZOZWpcbiIKKyImU3BhcmEgJmFsbGFcbiIKKyImS2FzdGEgYm9ydCBhbGxhXG4iCisiJkF2YnJ5dCIKKworIzogbWVzc2FnZS5jOjI5NDUKK21zZ2lkICJTYXZlIEZpbGUgZGlhbG9nIgorbXNnc3RyICJGaWxzcGFyYW5kZWRpYWxvZyIKKworIzogbWVzc2FnZS5jOjI5NDcKK21zZ2lkICJPcGVuIEZpbGUgZGlhbG9nIgorbXNnc3RyICJGaWz2cHBuYW5kZWRpYWxvZyIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzozMDE4Cittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIkUzMzg6IFR5duRyciwgaW5nZW4gZmlsYmzkZGRyYXJlIGkga29uc29sbC1s5GdlIgorCisjOiBtaXNjMS5jOjI2NzkKK21zZ2lkICJXMTA6IFdhcm5pbmc6IENoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSIKK21zZ3N0ciAiVzEwOiBWYXJuaW5nOiDEbmRyYXIgZW4gc2tyaXZza3lkZGFkIGZpbCIKKworIzogbWlzYzEuYzoyOTE4Cittc2dpZCAiMSBtb3JlIGxpbmUiCittc2dzdHIgIjEgcmFkIHRpbGwiCisKKyM6IG1pc2MxLmM6MjkyMAorbXNnaWQgIjEgbGluZSBsZXNzIgorbXNnc3RyICIxIHJhZCBtaW5kcmUiCisKKyM6IG1pc2MxLmM6MjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbW9yZSBsaW5lcyIKK21zZ3N0ciAiJWxkIHJhZCB0aWxsIgorCisjOiBtaXNjMS5jOjI5MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGZld2VyIGxpbmVzIgorbXNnc3RyICIlbGQgZuRycmUgcmFkZXIiCisKKyM6IG1pc2MxLmM6MjkzMAorbXNnaWQgIiAoSW50ZXJydXB0ZWQpIgorbXNnc3RyICIgKEF2YnJ1dGVuKSIKKworIzogbWlzYzEuYzo2NjAyCittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTogYmV2YXJhciBmaWxlci4uLlxuIgorCisjLiBjbG9zZSBhbGwgbWVtZmlsZXMsIHdpdGhvdXQgZGVsZXRpbmcKKyM6IG1pc2MxLmM6NjYxMgorbXNnaWQgIlZpbTogRmluaXNoZWQuXG4iCittc2dzdHIgIlZpbTogRuRyZGlnLlxuIgorCisjOiBtaXNjMi5jOjY3MCBtaXNjMi5jOjY4NgorbXNnaWQgIkVSUk9SOiAiCittc2dzdHIgIkZFTDogIgorCisjOiBtaXNjMi5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiW2J5dGVzXSB0b3RhbCBhbGxvYy1mcmVlZCAlbHUtJWx1LCBpbiB1c2UgJWx1LCBwZWFrIHVzZSAlbHVcbiIKK21zZ3N0ciAiIgorIlxuIgorIltiaXRhcl0gc2FtbWFubGFnZCBhbGxvay1mcmlnam9yZCAlbHUtJWx1LCBpIGFuduRuZG5pbmcgJWx1LCB0b3BwYW525G5kbmluZyAlIgorImx1XG4iCisKKyM6IG1pc2MyLmM6NjkyCittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW2Fucm9wXSBzYW1tYW5sYWdkYSBvbS9tYWxsb2MoKSdzICVsdSwgc2FtbWFubGFnZGEgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCisKKyM6IG1pc2MyLmM6NzQ3Cittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDogUmFkIGL2cmphciBibGkgZvZyIGzlbmciCisKKyM6IG1pc2MyLmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDE6IEludGVybmFsIGVycm9yOiBsYWxsb2MoJWxkLCApIgorbXNnc3RyICJFMzQxOiBJbnRlcm50IGZlbDogbGFsbG9jKCVsZCwgKSIKKworIzogbWlzYzIuYzo4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MjogT3V0IG9mIG1lbW9yeSEgIChhbGxvY2F0aW5nICVsdSBieXRlcykiCittc2dzdHIgIkUzNDI6IFNsdXQgcOUgbWlubmUhICAoYWxsb2tlcmFyICVsdSBiaXRhcikiCisKKyM6IG1pc2MyLmM6MjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAiQW5yb3BhciBza2FsIGF0dCBr9nJhOiBcIiVzXCIiCisKKyM6IG1pc2MyLmM6Mjc4NworbXNnaWQgIkU1NDU6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1NDU6IFNha25hciBrb2xvbiIKKworIzogbWlzYzIuYzoyNzg5IG1pc2MyLmM6MjgxNgorbXNnaWQgIkU1NDY6IElsbGVnYWwgbW9kZSIKK21zZ3N0ciAiRTU0NjogT3RpbGzldGV0IGzkZ2UiCisKKyM6IG1pc2MyLmM6Mjg1NQorbXNnaWQgIkU1NDc6IElsbGVnYWwgbW91c2VzaGFwZSIKK21zZ3N0ciAiRTU0NzogT3RpbGzldGVuIG11c2Zvcm0iCisKKyM6IG1pc2MyLmM6Mjg5NQorbXNnaWQgIkU1NDg6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTQ4OiBzaWZmcmEgZvZyduRudGFkZXMiCisKKyM6IG1pc2MyLmM6MjkwMAorbXNnaWQgIkU1NDk6IElsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAiRTU0OTogT3RpbGzldGVuIHByb2NlbnRzYXRzIgorCisjOiBtaXNjMi5jOjMyMTAKK21zZ2lkICJFbnRlciBlbmNyeXB0aW9uIGtleTogIgorbXNnc3RyICJBbmdlIGtyeXB0ZXJpbmdzbnlja2VsOiAiCisKKyM6IG1pc2MyLmM6MzIxMQorbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIkFuZ2Ugc2FtbWEgbnlja2VsIGlnZW46ICIKKworIzogbWlzYzIuYzozMjIxCittc2dpZCAiS2V5cyBkb24ndCBtYXRjaCEiCittc2dzdHIgIk55Y2tsYXIgbWF0Y2hhciBpbnRlISIKKworIzogbWlzYzIuYzozNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICIiCisiRTM0MzogT2dpbHRpZyBz9mt25Gc6ICcqKltudW1tZXJdJyBt5XN0ZSB2YXJhIGkgc2x1dGV0IHDlIHP2a3bkZ2VuIGVsbGVyICIKKyJm9mxqYXMgYXYgJyVzJy4iCisKKyM6IG1pc2MyLmM6NTA0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ0OiBDYW4ndCBmaW5kIGRpcmVjdG9yeSBcIiVzXCIgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ0OiBLYW4gaW50ZSBoaXR0YSBrYXRhbG9nIFwiJXNcIiBpIGNkcGF0aCIKKworIzogbWlzYzIuYzo1MDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDU6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NTogS2FuIGludGUgaGl0dGEgZmlsIFwiJXNcIiBpIHP2a3bkZyIKKworIzogbWlzYzIuYzo1MDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDY6IE5vIG1vcmUgZGlyZWN0b3J5IFwiJXNcIiBmb3VuZCBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDY6IEluZ2VuIGthdGFsb2cgXCIlc1wiIGhpdHRhZGVzIGkgY2RwYXRoIgorCisjOiBtaXNjMi5jOjUwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiBJbmdlbiBmaWwgXCIlc1wiIGhpdHRhZGVzIGkgc/ZrduRnZW4iCisKKyM6IG1pc2MyLmM6NTI5NQorbXNnaWQgIkU1NTA6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1NTA6IFNha25hciBrb2xvbiIKKworIzogbWlzYzIuYzo1MzA3Cittc2dpZCAiRTU1MTogSWxsZWdhbCBjb21wb25lbnQiCittc2dzdHIgIkU1NTE6IE90aWxs5XRlbiBrb21wb25lbnQiCisKKyM6IG1pc2MyLmM6NTMxNQorbXNnaWQgIkU1NTI6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTUyOiBzaWZmcmEgZvZyduRudGFkZXMiCisKKyMuIEdldCBoZXJlIHdoZW4gdGhlIHNlcnZlciBjYW4ndCBiZSBmb3VuZC4KKyM6IG5ldGJlYW5zLmM6MzQ2Cittc2dpZCAiQ2Fubm90IGNvbm5lY3QgdG8gTmV0YmVhbnMgIzIiCittc2dzdHIgIkthbiBpbnRlIGFuc2x1dGEgdGlsbCBOZXRiZWFucyAjMiIKKworIzogbmV0YmVhbnMuYzozNTQKK21zZ2lkICJDYW5ub3QgY29ubmVjdCB0byBOZXRiZWFucyIKK21zZ3N0ciAiS2FuIGludGUgYW5zbHV0YSB0aWxsIE5ldGJlYW5zIgorCisjOiBuZXRiZWFucy5jOjYzMworbXNnaWQgInJlYWQgZnJvbSBOZXRiZWFucyBzb2NrZXQiCittc2dzdHIgImzkcyBmcuVuIE5ldGJlYW5zLXV0dGFnIgorCisjOiBub3JtYWwuYzoyOTQ0Cittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAiVmFybmluZzogdGVybWluYWwga2FuIGludGUgZnJhbWjkdmEiCisKKyM6IG5vcm1hbC5jOjMxNTkKK21zZ2lkICJFMzQ4OiBObyBzdHJpbmcgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ4OiBJbmdlbiBzdHLkbmcgdW5kZXIgbWFya/ZyIgorCisjOiBub3JtYWwuYzozMTYxCittc2dpZCAiRTM0OTogTm8gaWRlbnRpZmllciB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDk6IEluZ2VuIGlkZW50aWZpZXJhcmUgdW5kZXIgbWFya/ZyIgorCisjOiBub3JtYWwuYzo0Mzc5Cittc2dpZCAiRTM1MjogQ2Fubm90IGVyYXNlIGZvbGRzIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTI6IEthbiBpbnRlIHRhIGJvcnQgdmVjayBtZWQgYWt0dWVsbCAnZm9sZG1ldGhvZCciCisKKyM6IG5vcm1hbC5jOjc4MDIKK21zZ2lkICJUeXBlICA6cXVpdDxFbnRlcj4gIHRvIGV4aXQgVmltIgorbXNnc3RyICJza3JpdiAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgIGb2ciBhdHQgYXZzbHV0YSBWaW0gICAgICAgICAiCisKKyM6IG9wcy5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAxIHRpbWUiCittc2dzdHIgIjEgcmFkICVzYWQgMSBn5W5nIgorCisjOiBvcHMuYzoyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgJWQgdGltZXMiCittc2dzdHIgIjEgcmFkICVzYWRlICVkIGflbmdlciIKKworIzogb3BzLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkIDEgdGltZSIKK21zZ3N0ciAiJWxkIHJhZGVyICVzYWQgMSBn5W5nIgorCisjOiBvcHMuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgJWQgdGltZXMiCittc2dzdHIgIiVsZCByYWRlciAlc2FkZSAlZCBn5W5nZXIiCisKKyM6IG9wcy5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgdG8gaW5kZW50Li4uICIKK21zZ3N0ciAiJWxkIHJhZGVyIGF0dCBpbmRlbnRlcmEuLi4gIgorCisjOiBvcHMuYzo3MTMKK21zZ2lkICIxIGxpbmUgaW5kZW50ZWQgIgorbXNnc3RyICIxIHJhZCBpbmRlbnRlcmFkICIKKworIzogb3BzLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBpbmRlbnRlZCAiCittc2dzdHIgIiVsZCByYWRlciBpbmRlbnRlcmFkZSAiCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNjQ3Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgImthbiBpbnRlIGtvcGllcmE7IHRhIGJvcnQg5G5k5SIKKworIzogb3BzLmM6MjE1NQorbXNnaWQgIjEgbGluZSBjaGFuZ2VkIgorbXNnc3RyICIxIHJhZCDkbmRyYWQiCisKKyM6IG9wcy5jOjIxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGNoYW5nZWQiCittc2dzdHIgIiVsZCByYWRlciDkbmRyYWRlIgorCisjOiBvcHMuYzoyNTQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZyZWVpbmcgJWxkIGxpbmVzIgorbXNnc3RyICJmcmln9nIgJWxkIHJhZGVyIgorCisjOiBvcHMuYzoyODIyCittc2dpZCAiMSBsaW5lIHlhbmtlZCIKK21zZ3N0ciAiMSByYWQga29waWVyYWQiCisKKyM6IG9wcy5jOjI4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHlhbmtlZCIKK21zZ3N0ciAiJWxkIHJhZGVyIGtvcGllcmFkZSIKKworIzogb3BzLmM6MzEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiBJbmdlbnRpbmcgaSByZWdpc3RlciAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBvcHMuYzozNjYwCittc2dpZCAiIgorIlxuIgorIi0tLSBSZWdpc3RlcnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFJlZ2lzdGVyIC0tLSIKKworIzogb3BzLmM6NDg3NQorbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAiT3RpbGzldGV0IHJlZ2lzdGVybmFtbiIKKworIzogb3BzLmM6NDk2MQorbXNnaWQgIiIKKyJcbiIKKyIjIFJlZ2lzdGVyczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgUmVnaXN0ZXI6XG4iCisKKyM6IG9wcy5jOjQ5OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3NDogVW5rbm93biByZWdpc3RlciB0eXBlICVkIgorbXNnc3RyICJFNTc0OiBPa+RuZCByZWdpc3RlcnR5cCAlZCIKKworIzogb3BzLmM6NTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU0OiBJbnZhbGlkIHJlZ2lzdGVyIG5hbWU6ICclcyciCittc2dzdHIgIkUzNTQ6IE90aWxs5XRldCByZWdpc3Rlcm5hbW46ICclcyciCisKKyM6IG9wcy5jOjU4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIENvbHM7ICIKK21zZ3N0ciAiJWxkIGtvbHVtbmVyOyAiCisKKyM6IG9wcy5jOjU4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VsZWN0ZWQgJXMlbGQgb2YgJWxkIExpbmVzOyAlbGQgb2YgJWxkIFdvcmRzOyAlbGQgb2YgJWxkIEJ5dGVzIgorbXNnc3RyICJNYXJrZXJhZGUgJXMlbGQgYXYgJWxkIHJhZGVyOyAlbGQgYXYgJWxkIG9yZDsgJWxkIGF2ICVsZCBiaXRhciIKKworIzogb3BzLmM6NTg2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiCittc2dzdHIgIktvbCAlcyBhdiAlczsgcmFkICVsZCBhdiAlbGQ7IG9yZCAlbGQgYXYgJWxkOyBiaXQgJWxkIGF2ICVsZCIKKworIzogb3BzLmM6NTg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIoKyVsZCBmb3IgQk9NKSIKK21zZ3N0ciAiKCslbGQgZvZyIEJPTSkiCisKKyM6IG9wdGlvbi5jOjE2MzMKK21zZ2lkICIlPCVmJWglbSU9UGFnZSAlTiIKK21zZ3N0ciAiJTwlZiVoJW0lPVNpZGEgJU4iCisKKyM6IG9wdGlvbi5jOjIwODIKK21zZ2lkICJUaGFua3MgZm9yIGZseWluZyBWaW0iCittc2dzdHIgIlRhY2sgZvZyIGF0dCBkdSBmbHlnZXIgbWVkIFZpbSIKKworIzogb3B0aW9uLmM6MzM1NCBvcHRpb24uYzozNDYxCittc2dpZCAiRTUxODogVW5rbm93biBvcHRpb24iCittc2dzdHIgIkU1MTg6IE9r5G5kIGZsYWdnYSIKKworIzogb3B0aW9uLmM6MzM2NworbXNnaWQgIkU1MTk6IE9wdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFNTE5OiBGbGFnZ2EgaW50ZSBzdPZkZCIKKworIzogb3B0aW9uLmM6MzM5MgorbXNnaWQgIkU1MjA6IE5vdCBhbGxvd2VkIGluIGEgbW9kZWxpbmUiCittc2dzdHIgIkU1MjA6IEludGUgdGlsbOV0ZXQgaSBlbiBs5Gdlc3JhZCIKKworIzogb3B0aW9uLmM6MzQ0OAorbXNnaWQgIiIKKyJcbiIKKyJcdExhc3Qgc2V0IGZyb20gIgorbXNnc3RyICIiCisiXG4iCisiXHRTZW5hc3Qgc2F0dCBmcuVuICIKKworIzogb3B0aW9uLmM6MzU4NworbXNnaWQgIkU1MjE6IE51bWJlciByZXF1aXJlZCBhZnRlciA9IgorbXNnc3RyICJFNTIxOiBOdW1tZXIga3LkdnMgZWZ0ZXIgPSIKKworIzogb3B0aW9uLmM6MzkxNCBvcHRpb24uYzo0NTMxCittc2dpZCAiRTUyMjogTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1MjI6IEludGUgaGl0dGF0IGkgdGVybWNhcCIKKworIzogb3B0aW9uLmM6Mzk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM5OiBJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IgorbXNnc3RyICJFNTM5OiBPdGlsbOV0ZXQgdGVja2VuIDwlcz4iCisKKyM6IG9wdGlvbi5jOjQ1MjMKK21zZ2lkICJFNTI5OiBDYW5ub3Qgc2V0ICd0ZXJtJyB0byBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1Mjk6IEthbiBpbnRlIHPkdHRhICd0ZXJtJyB0aWxsIHRvbSBzdHLkbmciCisKKyM6IG9wdGlvbi5jOjQ1MjYKK21zZ2lkICJFNTMwOiBDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICJFNTMwOiBLYW4gaW50ZSDkbmRyYSB0ZXJtIGkgR1VJIgorCisjOiBvcHRpb24uYzo0NTI4Cittc2dpZCAiRTUzMTogVXNlIFwiOmd1aVwiIHRvIHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkU1MzE6IEFuduRuZCBcIjpndWlcIiBm9nIgYXR0IHN0YXJ0YSBHVUkiCisKKyM6IG9wdGlvbi5jOjQ1NDkKK21zZ2lkICJFNTg5OiAnYmFja3VwZXh0JyBhbmQgJ3BhdGNobW9kZScgYXJlIGVxdWFsIgorbXNnc3RyICJFNTg5OiAnYmFja3VwdGV4dCcgb2NoICdwYXRjaG1vZGUnIORyIGxpa2EiCisKKyM6IG9wdGlvbi5jOjQ3MzQKK21zZ2lkICJFNjE3OiBDYW5ub3QgYmUgY2hhbmdlZCBpbiB0aGUgR1RLKyAyIEdVSSIKK21zZ3N0ciAiRTYxNzogS2FuIGludGUgYmxpIORuZHJhdCBpIEdUSysgMi1HVUkiCisKKyM6IG9wdGlvbi5jOjQ4OTAKK21zZ2lkICJFNTI0OiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTI0OiBTYWtuYXIga29sb24iCisKKyM6IG9wdGlvbi5jOjQ4OTIKK21zZ2lkICJFNTI1OiBaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIkU1MjU6IE5vbGzkbmdkc3N0cuRuZyIKKworIzogb3B0aW9uLmM6NDk2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTI2OiBNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICJFNTI2OiBTYWtuYXIgbnVtbWVyIGVmdGVyIDwlcz4iCisKKyM6IG9wdGlvbi5jOjQ5NzQKK21zZ2lkICJFNTI3OiBNaXNzaW5nIGNvbW1hIgorbXNnc3RyICJFNTI3OiBTYWtuYXIga29tbWEiCisKKyM6IG9wdGlvbi5jOjQ5ODEKK21zZ2lkICJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJFNTI4OiBN5XN0ZSBhbmdlIGV0dCAnLXbkcmRlIgorCisjOiBvcHRpb24uYzo1MDIyCittc2dpZCAiRTU5NTogY29udGFpbnMgdW5wcmludGFibGUgb3Igd2lkZSBjaGFyYWN0ZXIiCittc2dzdHIgIkU1OTU6IGlubmVo5WxsZXIgb3V0c2tyaXZiYXJhIGVsbGVyIGJyZWRhIHRlY2tlbiIKKworIzogb3B0aW9uLmM6NTA3MQorbXNnaWQgIkU1OTY6IEludmFsaWQgZm9udChzKSIKK21zZ3N0ciAiRTU5NjogT2dpbHRpZyhhKSB0eXBzbml0dCIKKworIzogb3B0aW9uLmM6NTA3OQorbXNnaWQgIkU1OTc6IGNhbid0IHNlbGVjdCBmb250c2V0IgorbXNnc3RyICJFNTk3OiBrYW4gaW50ZSB25GxqYSB0eXBzbml0dHN1cHBz5HR0bmluZyIKKworIzogb3B0aW9uLmM6NTA4MQorbXNnaWQgIkU1OTg6IEludmFsaWQgZm9udHNldCIKK21zZ3N0ciAiRTU5ODogT2dpbHRpZyB0eXBzbml0dHN1cHBz5HR0bmluZyIKKworIzogb3B0aW9uLmM6NTA4OAorbXNnaWQgIkU1MzM6IGNhbid0IHNlbGVjdCB3aWRlIGZvbnQiCittc2dzdHIgIkU1MzM6IGthbiBpbnRlIHbkbGphIGJyZXR0IHR5cHNuaXR0IgorCisjOiBvcHRpb24uYzo1MDkwCittc2dpZCAiRTUzNDogSW52YWxpZCB3aWRlIGZvbnQiCittc2dzdHIgIkU1MzQ6IE9naWx0aWd0IGJyZXR0IHR5cHNuaXR0IgorCisjOiBvcHRpb24uYzo1MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIDwlYz4iCittc2dzdHIgIkU1MzU6IE90aWxs5XRldCB0ZWNrZW4gZWZ0ZXIgPCVjPiIKKworIzogb3B0aW9uLmM6NTQ2NQorbXNnaWQgIkU1MzY6IGNvbW1hIHJlcXVpcmVkIgorbXNnc3RyICJFNTM2OiBrb21tYSBrcuR2cyIKKworIzogb3B0aW9uLmM6NTQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM3OiAnY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIgorbXNnc3RyICJFNTM3OiAnY29tbWVudHN0cmluZycgbeVzdGUgdmFyYSB0b20gZWxsZXIgaW5uZWjlbGxhICVzIgorCisjOiBvcHRpb24uYzo1NTQ4Cittc2dpZCAiRTUzODogTm8gbW91c2Ugc3VwcG9ydCIKK21zZ3N0ciAiRTUzODogSW5nZXQgbXVzc3T2ZCIKKworIzogb3B0aW9uLmM6NTgxNgorbXNnaWQgIkU1NDA6IFVuY2xvc2VkIGV4cHJlc3Npb24gc2VxdWVuY2UiCittc2dzdHIgIkU1NDA6IE9zdORuZ2QgdXR0cnlja3NzZWt2ZW5zIgorCisjOiBvcHRpb24uYzo1ODIwCittc2dpZCAiRTU0MTogdG9vIG1hbnkgaXRlbXMiCittc2dzdHIgIkU1NDE6IGb2ciBt5W5nYSBm9nJlbeVsIgorCisjOiBvcHRpb24uYzo1ODIyCittc2dpZCAiRTU0MjogdW5iYWxhbmNlZCBncm91cHMiCittc2dzdHIgIkU1NDI6IG9iYWxhbnNlcmFkZSBncnVwcGVyIgorCisjOiBvcHRpb24uYzo2MDYyCittc2dpZCAiRTU5MDogQSBwcmV2aWV3IHdpbmRvdyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTU5MDogRXR0IGb2cmhhbmRzdmlzbmluZ3Nm9m5zdGVyIGV4aXN0ZXJhciByZWRhbiIKKworIzogb3B0aW9uLmM6NjMxOQorbXNnaWQgIlcxNzogQXJhYmljIHJlcXVpcmVzIFVURi04LCBkbyAnOnNldCBlbmNvZGluZz11dGYtOCciCittc2dzdHIgIlcxNzogQXJhYmlza2Ega3LkdmVyIFVURi04LCBn9nIgJzpzZXQgZW5jb2Rpbmc9dXRmLTgnIgorCisjOiBvcHRpb24uYzo2NjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTM6IE5lZWQgYXQgbGVhc3QgJWQgbGluZXMiCittc2dzdHIgIkU1OTM6IEJlaPZ2ZXIg5XRtaW5zdG9uZSAlZCByYWRlciIKKworIzogb3B0aW9uLmM6NjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk0OiBOZWVkIGF0IGxlYXN0ICVkIGNvbHVtbnMiCittc2dzdHIgIkU1OTQ6IEJlaPZ2ZXIg5XRtaW5zdG9uZSAlZCBrb2x1bW5lciIKKworIzogb3B0aW9uLmM6Njk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU1OiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUzNTU6IE9r5G5kIGZsYWdnYTogJXMiCisKKyM6IG9wdGlvbi5jOjcwNjAKK21zZ2lkICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIGNvZGVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBUZXJtaW5hbGtvZGVyIC0tLSIKKworIzogb3B0aW9uLmM6NzA2MgorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEdsb2JhbGEgZmxhZ2d25HJkZW4gLS0tIgorCisjOiBvcHRpb24uYzo3MDY0Cittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBMb2thbGEgZmxhZ2d25HJkZW4gLS0tIgorCisjOiBvcHRpb24uYzo3MDY2Cittc2dpZCAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBGbGFnZ29yIC0tLSIKKworIzogb3B0aW9uLmM6Nzc2NworbXNnaWQgIkUzNTY6IGdldF92YXJwIEVSUk9SIgorbXNnc3RyICJFMzU2OiBnZXRfdmFycC1GRUwiCisKKyM6IG9wdGlvbi5jOjg3MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NzogJ2xhbmdtYXAnOiBNYXRjaGluZyBjaGFyYWN0ZXIgbWlzc2luZyBmb3IgJXMiCittc2dzdHIgIkUzNTc6ICdsYW5nbWFwJzogTWF0Y2hhbmRlIHRlY2tlbiBzYWtuYXMgZvZyICVzIgorCisjOiBvcHRpb24uYzo4NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTg6ICdsYW5nbWFwJzogRXh0cmEgY2hhcmFjdGVycyBhZnRlciBzZW1pY29sb246ICVzIgorbXNnc3RyICJFMzU4OiAnbGFuZ21hcCc6IEV4dHJhIHRlY2tlbiBlZnRlciBzZW1pa29sb246ICVzIgorCisjOiBvc19hbWlnYS5jOjI3NQorbXNnaWQgImNhbm5vdCBvcGVuICIKK21zZ3N0ciAia2FuIGludGUg9nBwbmEgIgorCisjOiBvc19hbWlnYS5jOjMwOQorbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIlZJTTogS2FuIGludGUg9nBwbmEgZvZuc3RlciFcbiIKKworIzogb3NfYW1pZ2EuYzozMzMKK21zZ2lkICJOZWVkIEFtaWdhZG9zIHZlcnNpb24gMi4wNCBvciBsYXRlclxuIgorbXNnc3RyICJCZWj2dmVyIEFtaWdhZG9zIHZlcnNpb24gMi4wNCBlbGxlciBzZW5hcmVcbiIKKworIzogb3NfYW1pZ2EuYzozMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICJCZWj2dmVyICVzIHZlcnNpb24gJWxkXG4iCisKKyM6IG9zX2FtaWdhLmM6NDExCittc2dpZCAiQ2Fubm90IG9wZW4gTklMOlxuIgorbXNnc3RyICJLYW4gaW50ZSD2cHBuYSBOSUw6XG4iCisKKyM6IG9zX2FtaWdhLmM6NDIyCittc2dpZCAiQ2Fubm90IGNyZWF0ZSAiCittc2dzdHIgIkthbiBpbnRlIHNrYXBhICIKKworIzogb3NfYW1pZ2EuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltIGV4aXRpbmcgd2l0aCAlZFxuIgorbXNnc3RyICJWaW0gYXZzbHV0YXIgbWVkICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTMyCittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAia2FuIGludGUg5G5kcmEga29uc29sbC1s5GdlID8hXG4iCisKKyM6IG9zX2FtaWdhLmM6OTk4Cittc2dpZCAibWNoX2dldF9zaGVsbHNpemU6IG5vdCBhIGNvbnNvbGU/P1xuIgorbXNnc3RyICJtY2hfZ2V0X3NoZWxsc2l6ZTogaW50ZSBlbiBrb25zb2xsPz9cbiIKKworIy4gaWYgVmltIG9wZW5lZCBhIHdpbmRvdzogRXhlY3V0aW5nIGEgc2hlbGwgbWF5IGNhdXNlIGNyYXNoZXMKKyM6IG9zX2FtaWdhLmM6MTE0NworbXNnaWQgIkUzNjA6IENhbm5vdCBleGVjdXRlIHNoZWxsIHdpdGggLWYgb3B0aW9uIgorbXNnc3RyICJFMzYwOiBLYW4gaW50ZSBr9nJhIHNrYWwgbWVkIC1mLWZsYWdnYSIKKworIzogb3NfYW1pZ2EuYzoxMTg4IG9zX2FtaWdhLmM6MTI3OAorbXNnaWQgIkNhbm5vdCBleGVjdXRlICIKK21zZ3N0ciAiS2FuIGludGUga/ZyYSAiCisKKyM6IG9zX2FtaWdhLmM6MTE5MSBvc19hbWlnYS5jOjEyODgKK21zZ2lkICJzaGVsbCAiCittc2dzdHIgInNrYWwgIgorCisjOiBvc19hbWlnYS5jOjEyMTEgb3NfYW1pZ2EuYzoxMzEzCittc2dpZCAiIHJldHVybmVkXG4iCittc2dzdHIgIiByZXR1cm5lcmFkZVxuIgorCisjOiBvc19hbWlnYS5jOjE0NTQKK21zZ2lkICJBTkNIT1JfQlVGX1NJWkUgdG9vIHNtYWxsLiIKK21zZ3N0ciAiQU5DSE9SX0JVRl9TSVpFIGb2ciBsaXRlbi4iCisKKyM6IG9zX2FtaWdhLmM6MTQ1OAorbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAiSS9PLUZFTCIKKworIzogb3NfbXN3aW4uYzo1MjUKK21zZ2lkICIuLi4odHJ1bmNhdGVkKSIKK21zZ3N0ciAiLi4uKHRydW5rZXJhZGUpIgorCisjOiBvc19tc3dpbi5jOjYyNworbXNnaWQgIidjb2x1bW5zJyBpcyBub3QgODAsIGNhbm5vdCBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICInY29sdW1ucycg5HIgaW50ZSA4MCwga2FuIGludGUga/ZyYSBleHRlcm5hIGtvbW1hbmRvbiIKKworIzogb3NfbXN3aW4uYzoxODY2Cittc2dpZCAiRTIzNzogUHJpbnRlciBzZWxlY3Rpb24gZmFpbGVkIgorbXNnc3RyICJFMjM3OiBTa3JpdmFydmFsIG1pc3NseWNrYWRlcyIKKworIzogb3NfbXN3aW4uYzoxOTA2CisjLCBjLWZvcm1hdAorbXNnaWQgInRvICVzIG9uICVzIgorbXNnc3RyICJ0aWxsICVzIHDlICVzIgorCisjOiBvc19tc3dpbi5jOjE5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMzogVW5rbm93biBwcmludGVyIGZvbnQ6ICVzIgorbXNnc3RyICJFNjEzOiBPa+RudCBza3JpdmFydHlwc25pdHQ6ICVzIgorCisjOiBvc19tc3dpbi5jOjE5NzEgb3NfbXN3aW4uYzoxOTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogU2tyaXZhcmZlbDogJXMiCisKKyM6IG9zX21zd2luLmM6MTk4MgorbXNnaWQgIlVua25vd24iCittc2dzdHIgIk9r5G5kIgorCisjOiBvc19tc3dpbi5jOjIwMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAiU2tyaXZlciB1dCAnJXMnIgorCisjOiBvc19tc3dpbi5jOjMwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NDogSWxsZWdhbCBjaGFyc2V0IG5hbWUgXCIlc1wiIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDQ6IE90aWxs5XRldCB0ZWNrZW5rb2RzbmFtbiBcIiVzXCIgaSB0eXBzbml0dHNuYW1uIFwiJXNcIiIKKworIzogb3NfbXN3aW4uYzozMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDU6IElsbGVnYWwgY2hhciAnJWMnIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDU6IE90aWxs5XRldCB0ZWNrZW4gJyVjJyBpIHR5cHNuaXR0c25hbW4gXCIlc1wiIgorCisjOiBvc19yaXNjb3MuYzoxMjU4Cittc2dpZCAiRTM2NjogSW52YWxpZCAnb3NmaWxldHlwZScgb3B0aW9uIC0gdXNpbmcgVGV4dCIKK21zZ3N0ciAiRTM2NjogT2dpbHRpZyAnb3NmaWxldHlwZSctZmxhZ2dhIC0gYW525G5kZXIgVGV4dCIKKworIzogb3NfdW5peC5jOjg5NworbXNnaWQgIlZpbTogRG91YmxlIHNpZ25hbCwgZXhpdGluZ1xuIgorbXNnc3RyICJWaW06IER1YmJlbHNpZ25hbCwgYXZzbHV0YXJcbiIKKworIzogb3NfdW5peC5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCBkZWFkbHkgc2lnbmFsICVzXG4iCittc2dzdHIgIlZpbTogRuVuZ2FkZSBk9mRsaWcgc2lnbmFsICVzXG4iCisKKyM6IG9zX3VuaXguYzo5MDYKK21zZ2lkICJWaW06IENhdWdodCBkZWFkbHkgc2lnbmFsXG4iCittc2dzdHIgIlZpbTogRuVuZ2FkZSBk9mRsaWcgc2lnbmFsXG4iCisKKyM6IG9zX3VuaXguYzoxMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0b29rICVsZCBtc2VjIgorbXNnc3RyICLWcHBuaW5nIGF2IFgtZGlzcGxheSB0b2cgJWxkIG1zIgorCisjOiBvc191bml4LmM6MTE5NgorbXNnaWQgIiIKKyJcbiIKKyJWaW06IEdvdCBYIGVycm9yXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWaW06IEZpY2sgWC1lcnJvclxuIgorCisjOiBvc191bml4LmM6MTMwNAorbXNnaWQgIlRlc3RpbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIlRlc3RuaW5nIGF2IFgtZGlzcGxheWVuIG1pc3NseWNrYWRlcyIKKworIzogb3NfdW5peC5jOjE0NDMKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IgorbXNnc3RyICLWcHBuaW5nIGF2IFgtZGlzcGxheWVuIHRvZyBm9nIgbOVuZyB0aWQiCisKKyM6IG9zX3VuaXguYzozMTkwIG9zX3VuaXguYzozODcwCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsICIKK21zZ3N0ciAiIgorIlxuIgorIkthbiBpbnRlIGv2cmEgc2thbCAiCisKKyM6IG9zX3VuaXguYzozMjM4Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsIHNoXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLYW4gaW50ZSBr9nJhIHNrYWwgc2hcbiIKKworIzogb3NfdW5peC5jOjMyNDIgb3NfdW5peC5jOjM4NzYKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisic2thbCByZXR1cm5lcmFkZSAiCisKKyM6IG9zX3VuaXguYzozMzc3Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkthbiBpbnRlIHNrYXBhIHL2clxuIgorCisjOiBvc191bml4LmM6MzM5MgorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZm9ya1xuIgorbXNnc3RyICIiCisiXG4iCisiS2FuIGludGUgZ3JlbmFcbiIKKworIzogb3NfdW5peC5jOjM4ODMKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLb21tYW5kbyBhdnNsdXRhZGVzXG4iCisKKyM6IG9zX3VuaXguYzo0MTQ3IG9zX3VuaXguYzo0MjcyIG9zX3VuaXguYzo1OTMzCittc2dpZCAiWFNNUCBsb3N0IElDRSBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QIHRhcHBhZGUgSUNFLWFuc2x1dG5pbmciCisKKyM6IG9zX3VuaXguYzo1NTE2Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAi1nBwbmluZyBhdiBYLWRpc3BsYXllbiBtaXNzbHlja2FkZXMiCisKKyM6IG9zX3VuaXguYzo1ODM4Cittc2dpZCAiWFNNUCBoYW5kbGluZyBzYXZlLXlvdXJzZWxmIHJlcXVlc3QiCittc2dzdHIgIlhTTVAgaGFudGVyYXIgc3BhcmEtc2rkbHYtZvZyZnLlZ2FuIgorCisjOiBvc191bml4LmM6NTk1NworbXNnaWQgIlhTTVAgb3BlbmluZyBjb25uZWN0aW9uIgorbXNnc3RyICJYU01QIPZwcG5hciBhbnNsdXRuaW5nIgorCisjOiBvc191bml4LmM6NTk3NgorbXNnaWQgIlhTTVAgSUNFIGNvbm5lY3Rpb24gd2F0Y2ggZmFpbGVkIgorbXNnc3RyICJYU01QIElDRS1hbnNsdXRuaW5nIPZ2ZXJ2YWtuaW5nIG1pc3NseWNrYWRlcyIKKworIzogb3NfdW5peC5jOjU5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWFNNUCBTbWNPcGVuQ29ubmVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICJYU01QIFNtY09wZW5Db25uZWN0aW9uIG1pc3NseWNrYWRlczogJXMiCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgIlDlIHJhZCIKKworIzogb3NfdzMyZXhlLmM6NjUKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjb21tYW5kIGxpbmUuIgorbXNnc3RyICJLdW5kZSBpbnRlIGFsbG9rZXJhIG1pbm5lIGb2ciBrb21tYW5kb3JhZC4iCisKKyM6IG9zX3czMmV4ZS5jOjY2IG9zX3czMmV4ZS5jOjg5IG9zX3czMmV4ZS5jOjEwMAorbXNnaWQgIlZJTSBFcnJvciIKK21zZ3N0ciAiVklNLWZlbCIKKworIzogb3NfdzMyZXhlLmM6ODkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICJLdW5kZSBpbnRlIGzkc2EgaW4gdmltMzIuZGxsISIKKworIzogb3NfdzMyZXhlLmM6OTkKK21zZ2lkICJDb3VsZCBub3QgZml4IHVwIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHRoZSBETEwhIgorbXNnc3RyICJLdW5kZSBpbnRlIG9yZG5hIHVwcCBmdW5rdGlvbnNwZWthcmUgdGlsbCBETEw6ZW4hIgorCisjOiBvc193aW4xNi5jOjM0MSBvc193aW4zMi5jOjMwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hlbGwgcmV0dXJuZWQgJWQiCittc2dzdHIgInNrYWwgcmV0dXJuZXJhZGUgJWQiCisKKyM6IG9zX3dpbjMyLmM6MjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCAlcyBldmVudFxuIgorbXNnc3RyICJWaW06IEblbmdhZGUgJXMtaORuZGVsc2VcbiIKKworIzogb3Nfd2luMzIuYzoyNTI0Cittc2dpZCAiY2xvc2UiCittc2dzdHIgInN05G5nIgorCisjOiBvc193aW4zMi5jOjI1MjYKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgImxvZ2dhIHV0IgorCisjOiBvc193aW4zMi5jOjI1MjcKK21zZ2lkICJzaHV0ZG93biIKK21zZ3N0ciAic3TkbmcgYXYiCisKKyM6IG9zX3dpbjMyLmM6MzAxNworbXNnaWQgIkUzNzE6IENvbW1hbmQgbm90IGZvdW5kIgorbXNnc3RyICJFMzcxOiBLb21tYW5kbyBoaXR0YWRlcyBpbnRlIgorCisjOiBvc193aW4zMi5jOjMwMzAKK21zZ2lkICIiCisiVklNUlVOLkVYRSBub3QgZm91bmQgaW4geW91ciAkUEFUSC5cbiIKKyJFeHRlcm5hbCBjb21tYW5kcyB3aWxsIG5vdCBwYXVzZSBhZnRlciBjb21wbGV0aW9uLlxuIgorIlNlZSAgOmhlbHAgd2luMzItdmltcnVuICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJWSU1SVU4uRVhFIGhpdHRhZGVzIGludGUgaSBkaW4gJFBBVEguXG4iCisiRXh0ZXJuYSBrb21tYW5kb24gdmlsbCBpbnRlIHN05SBzdGlsbGEgZWZ0ZXIgZuRyZGlnc3TkbGxuaW5nLlxuIgorIlNlICA6aGVscCB3aW4zMi12aW1ydW4gIGb2ciBtZXIgaW5mb3JtYXRpb24uIgorCisjOiBvc193aW4zMi5jOjMwMzMKK21zZ2lkICJWaW0gV2FybmluZyIKK21zZ3N0ciAiVmltLXZhcm5pbmciCisKKyM6IHF1aWNrZml4LmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzI6IFRvbyBtYW55ICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MjogRvZyIG3lbmdhICUlJWMgaSBmb3JtYXRzdHLkbmciCisKKyM6IHF1aWNrZml4LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzM6IFVuZXhwZWN0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzczOiBPduRudGFkICUlJWMgaSBmb3JtYXRzdHLkbmciCisKKyM6IHF1aWNrZml4LmM6MzI1Cittc2dpZCAiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzQ6IFNha25hciBdIGkgZm9ybWF0c3Ry5G5nIgorCisjOiBxdWlja2ZpeC5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc1OiBVbnN1cHBvcnRlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzU6IE9zdPZkZCAlJSVjIGkgZm9ybWF0c3Ry5G5nIgorCisjOiBxdWlja2ZpeC5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiCittc2dzdHIgIkUzNzY6IE9naWx0aWcgJSUlYyBpIGZvcm1hdHN0cuRuZ3ByZWZpeCIKKworIzogcXVpY2tmaXguYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6IE9naWx0aWcgJSUlYyBpIGZvcm1hdHN0cuRuZyIKKworIzogcXVpY2tmaXguYzozOTEKK21zZ2lkICJFMzc4OiAnZXJyb3Jmb3JtYXQnIGNvbnRhaW5zIG5vIHBhdHRlcm4iCittc2dzdHIgIkUzNzg6ICdlcnJvcmZvcm1hdCcgaW5uZWjlbGxlciBpbmdhIG32bnN0ZXIiCisKKyM6IHF1aWNrZml4LmM6NTAxCittc2dpZCAiRTM3OTogTWlzc2luZyBvciBlbXB0eSBkaXJlY3RvcnkgbmFtZSIKK21zZ3N0ciAiRTM3OTogU2FrbmFyIGVsbGVyIHRvbXQga2F0YWxvZ25hbW4iCisKKyM6IHF1aWNrZml4LmM6OTg4Cittc2dpZCAiRTU1MzogTm8gbW9yZSBpdGVtcyIKK21zZ3N0ciAiRTU1MzogSW5nYSBmbGVyIGb2cmVt5WwiCisKKyM6IHF1aWNrZml4LmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICIoJWQgb2YgJWQpJXMlczogIgorbXNnc3RyICIoJWQgYXYgJWQpJXMlczogIgorCisjOiBxdWlja2ZpeC5jOjEyMjcKK21zZ2lkICIgKGxpbmUgZGVsZXRlZCkiCittc2dzdHIgIiAocmFkIGJvcnR0YWdlbikiCisKKyM6IHF1aWNrZml4LmM6MTQ0MAorbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDogUOUgYm90dGVuIGF2IHF1aWNrZml4LXN0YWNrIgorCisjOiBxdWlja2ZpeC5jOjE0NDkKK21zZ2lkICJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODE6IFDlIHRvcHBlbiBhdiBxdWlja2ZpeC1zdGFjayIKKworIzogcXVpY2tmaXguYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAiZmVsbGlzdGEgJWQgYXYgJWQ7ICVkIGZlbCIKKworIzogcXVpY2tmaXguYzoxOTM5Cittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4MjogS2FuIGludGUgc2tyaXZhLCAnYnVmdHlwZSctZmxhZ2dhIORyIHNhdHQiCisKKyM6IHJlZ2V4cC5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY5OiBpbnZhbGlkIGl0ZW0gaW4gJXMlJVtdIgorbXNnc3RyICJFMzY5OiBvZ2lsdGlndCBm9nJlbeVsIGkgJXMlJVtdIgorCisjOiByZWdleHAuYzo4MjcKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiBN9m5zdGVyIGb2ciBs5W5ndCIKKworIzogcmVnZXhwLmM6OTk2Cittc2dpZCAiRTUwOiBUb28gbWFueSBcXHooIgorbXNnc3RyICJFNTA6IEb2ciBt5W5nYSBcXHooIgorCisjOiByZWdleHAuYzoxMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MTogVG9vIG1hbnkgJXMoIgorbXNnc3RyICJFNTE6IEb2ciBt5W5nYSAlcygiCisKKyM6IHJlZ2V4cC5jOjEwNjQKK21zZ2lkICJFNTI6IFVubWF0Y2hlZCBcXHooIgorbXNnc3RyICJFNTI6IE9tYXRjaGFkZSBcXHooIgorCisjOiByZWdleHAuYzoxMDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzogVW5tYXRjaGVkICVzJSUoIgorbXNnc3RyICJFNTM6IE9tYXRjaGFkZSAlcyUlKCIKKworIzogcmVnZXhwLmM6MTA3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTQ6IFVubWF0Y2hlZCAlcygiCittc2dzdHIgIkU1NDogT21hdGNoYWRlICVzKCIKKworIzogcmVnZXhwLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTU6IFVubWF0Y2hlZCAlcykiCittc2dzdHIgIkU1NTogT21hdGNoYWRlICVzKSIKKworIzogcmVnZXhwLmM6MTI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY6ICVzKiBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTY6ICVzKi1vcGVyYW5kIGthbiB2YXJhIHRvbSIKKworIzogcmVnZXhwLmM6MTI0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNTc6ICVzKyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTc6ICVzKy1vcGVyYW5kIGthbiB2YXJhIHRvbSIKKworIzogcmVnZXhwLmM6MTMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk6IGludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzQCIKK21zZ3N0ciAiRTU5OiBvZ2lsdGlndCB0ZWNrZW4gZWZ0ZXIgJXNAIgorCisjOiByZWdleHAuYzoxMzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1ODogJXN7IG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1ODogJXN7LW9wZXJhbmQga2FuIHZhcmEgdG9tIgorCisjOiByZWdleHAuYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MDogVG9vIG1hbnkgY29tcGxleCAlc3suLi59cyIKK21zZ3N0ciAiRTYwOiBG9nIgbeVuZ2Ega29tcGxleGEgJXN7Li4ufXMiCisKKyM6IHJlZ2V4cC5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOiBOZXN0ZWQgJXMqIgorbXNnc3RyICJFNjE6IE7kc3RsYWRlICVzKiIKKworIzogcmVnZXhwLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjI6IE5lc3RlZCAlcyVjIgorbXNnc3RyICJFNjI6IE7kc3RsYWRlICVzJWMiCisKKyM6IHJlZ2V4cC5jOjE0NzMKK21zZ2lkICJFNjM6IGludmFsaWQgdXNlIG9mIFxcXyIKK21zZ3N0ciAiRTYzOiBvZ2lsdGlnIGFuduRuZG5pbmcgYXYgXFxfIgorCisjOiByZWdleHAuYzoxNTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDogJXMlYyBm9mxqZXIgaW5nZW50aW5nIgorCisjOiByZWdleHAuYzoxNTc0Cittc2dpZCAiRTY1OiBJbGxlZ2FsIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICJFNjU6IE90aWxs5XRlbiBiYWvldHJlZmVyZW5zIgorCisjOiByZWdleHAuYzoxNTg3Cittc2dpZCAiRTY2OiBcXHooIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU2NjogXFx6eyBpbnRlIHRpbGzldGV0IGjkciIKKworIzogcmVnZXhwLmM6MTYwNgorbXNnaWQgIkU2NzogXFx6MSBldCBhbC4gbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY3OiBcXHoxIG0uZmwuIGludGUgdGlsbOV0ZXQgaORyIgorCisjOiByZWdleHAuYzoxNjE3Cittc2dpZCAiRTY4OiBJbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXHoiCittc2dzdHIgIkU2ODogT2dpbHRpZ3QgdGVja2VuIGVmdGVyIFxceiIKKworIzogcmVnZXhwLmM6MTY2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNjk6IE1pc3NpbmcgXSBhZnRlciAlcyUlWyIKK21zZ3N0ciAiRTY5OiBTYWtuYXIgXSBlZnRlciAlcyUlWyIKKworIzogcmVnZXhwLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNzA6IEVtcHR5ICVzJSVbXSIKK21zZ3N0ciAiRTcwOiBUb20gJXMlJVtdIgorCisjOiByZWdleHAuYzoxNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU3MTogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXMlJSIKK21zZ3N0ciAiRTcxOiBPZ2lsdGlndCB0ZWNrZW4gZWZ0ZXIgJXMlJSIKKworIzogcmVnZXhwLmM6MjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTU0OiBTeW50YXggZXJyb3IgaW4gJXN7Li4ufSIKK21zZ3N0ciAiRTU1NDogU3ludGF4ZmVsIGkgJXN7Li4ufSIKKworIzogcmVnZXhwLmM6MjgwMAorbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiBLcmFzY2ggaGVqZGFkOyByZWd1bGrkcnQgdXR0cnljayBm9nIga29tcGxleHQ/IgorCisjOiByZWdleHAuYzoyOTQxCittc2dpZCAiRTM2MzogcGF0dGVybiBjYXVzZWQgb3V0LW9mLXN0YWNrIGVycm9yIgorbXNnc3RyICJFMzYzOiBt9m5zdGVyIG9yc2FrYWRlIHNsdXQtcOUtc3RhY2stZmVsIgorCisjOiByZWdleHAuYzozMTgwCittc2dpZCAiRXh0ZXJuYWwgc3VibWF0Y2hlczpcbiIKK21zZ3N0ciAiRXh0ZXJuYSB1bmRlcnRy5GZmYXI6XG4iCisKKyM6IHNjcmVlbi5jOjIxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0tJTNsZCBsaW5lcyBmb2xkZWQgIgorbXNnc3RyICIrLS0lM2xkIHJhZGVyIHZpa3RhICIKKworIzogc2NyZWVuLmM6Nzg5MgorbXNnaWQgIiBWUkVQTEFDRSIKK21zZ3N0ciAiIFZFUlPEVFQiCisKKyM6IHNjcmVlbi5jOjc4OTYKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIEVSU8RUVCIKKworIzogc2NyZWVuLmM6NzkwMQorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIgT01WxE5EIgorCisjOiBzY3JlZW4uYzo3OTAzCittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIElORk9HQSIKKworIzogc2NyZWVuLmM6NzkwNgorbXNnaWQgIiAoaW5zZXJ0KSIKK21zZ3N0ciAiIChpbmZvZ2EpIgorCisjOiBzY3JlZW4uYzo3OTA4Cittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiIChlcnPkdHQpIgorCisjOiBzY3JlZW4uYzo3OTEwCittc2dpZCAiICh2cmVwbGFjZSkiCittc2dzdHIgIiAodmVyc+R0dCkiCisKKyM6IHNjcmVlbi5jOjc5MTMKK21zZ2lkICIgSGVicmV3IgorbXNnc3RyICIgSGVicmVpc2thIgorCisjOiBzY3JlZW4uYzo3OTI0Cittc2dpZCAiIEFyYWJpYyIKK21zZ3N0ciAiIEFyYWJpc2thIgorCisjOiBzY3JlZW4uYzo3OTI3Cittc2dpZCAiIChsYW5nKSIKK21zZ3N0ciAiIChzcHLlaykiCisKKyM6IHNjcmVlbi5jOjc5MzEKK21zZ2lkICIgKHBhc3RlKSIKK21zZ3N0ciAiIChrbGlzdHJhIGluKSIKKworIzogc2NyZWVuLmM6NzkzNworbXNnaWQgIiBTRUxFQ1QiCittc2dzdHIgIiBNQVJLRVJBIgorCisjOiBzY3JlZW4uYzo3OTM5Cittc2dpZCAiIFZJU1VBTCIKK21zZ3N0ciAiIFZJU1VFTEwiCisKKyM6IHNjcmVlbi5jOjc5NDEKK21zZ2lkICIgQkxPQ0siCittc2dzdHIgIiBCTE9DSyIKKworIzogc2NyZWVuLmM6Nzk0MworbXNnaWQgIiBMSU5FIgorbXNnc3RyICIgUkFEIgorCisjOiBzY3JlZW4uYzo3OTU2IHNjcmVlbi5jOjgwMTYKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgInNwZWxhciBpbiIKKworIzogc2VhcmNoLmM6MzYKK21zZ2lkICJzZWFyY2ggaGl0IFRPUCwgY29udGludWluZyBhdCBCT1RUT00iCittc2dzdHIgInP2a25pbmcgbuVkZGUgVE9QUEVOLCBmb3J0c+R0dGVyIHZpZCBCT1RURU4iCisKKyM6IHNlYXJjaC5jOjM3Cittc2dpZCAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIgorbXNnc3RyICJz9mtuaW5nIG7lZGRlIEJPVFRFTiwgZm9yc+R0dGVyIHZpZCBUT1BQRU4iCisKKyM6IHNlYXJjaC5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzgzOiBJbnZhbGlkIHNlYXJjaCBzdHJpbmc6ICVzIgorbXNnc3RyICJFMzgzOiBPZ2lsdGlnIHP2a3N0cuRuZzogJXMiCisKKyM6IHNlYXJjaC5jOjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg0OiBzZWFyY2ggaGl0IFRPUCB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODQ6IHP2a25pbmcgbuVkZGUgVE9QUEVOIHV0YW4gdHLkZmYgYXY6ICVzIgorCisjOiBzZWFyY2guYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NTogc2VhcmNoIGhpdCBCT1RUT00gd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg1OiBz9mtuaW5nIG7lZGRlIEJPVFRFTiB1dGFuIHRy5GZmIGF2OiAlcyIKKworIzogc2VhcmNoLmM6MTI0NworbXNnaWQgIkUzODY6IEV4cGVjdGVkICc/JyBvciAnLycgIGFmdGVyICc7JyIKK21zZ3N0ciAiRTM4NjogRvZyduRudGFkZSAnPycgZWxsZXIgJy8nIGVmdGVyICc7JyIKKworIzogc2VhcmNoLmM6MzcwOQorbXNnaWQgIiAoaW5jbHVkZXMgcHJldmlvdXNseSBsaXN0ZWQgbWF0Y2gpIgorbXNnc3RyICIgKGlua2x1ZGVyYXIgdGlkaWdhcmUgbGlzdGFkIHRy5GZmKSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNzI5Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIElua2x1ZGVyYWRlIGZpbGVyICIKKworIzogc2VhcmNoLmM6MzczMQorbXNnaWQgIm5vdCBmb3VuZCAiCittc2dzdHIgImhpdHRhZGVzIGludGUgIgorCisjOiBzZWFyY2guYzozNzMyCittc2dpZCAiaW4gcGF0aCAtLS1cbiIKK21zZ3N0ciAiaSBz9mt25GcgLS0tXG4iCisKKyM6IHNlYXJjaC5jOjM3NzEKK21zZ2lkICIgIChBbHJlYWR5IGxpc3RlZCkiCittc2dzdHIgIiAoUmVkYW4gbGlzdGFkZSkiCisKKyM6IHNlYXJjaC5jOjM3NzMKK21zZ2lkICIgIE5PVCBGT1VORCIKK21zZ3N0ciAiIElOVEUgSElUVEFERSIKKworIzogc2VhcmNoLmM6MzgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBpbmNsdWRlZCBmaWxlOiAlcyIKK21zZ3N0ciAiU/ZrZXIgaWdlbm9tIGlua2x1ZGVyYWQgZmlsOiAlcyIKKworIzogc2VhcmNoLmM6NDA0MworbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4NzogTWF0Y2huaW5nIORyIHDlIGFrdHVlbGwgcmFkIgorCisjOiBzZWFyY2guYzo0MTg2Cittc2dpZCAiQWxsIGluY2x1ZGVkIGZpbGVzIHdlcmUgZm91bmQiCittc2dzdHIgIkFsbGEgaW5rbHVkZXJhZGUgZmlsZXIgaGl0dGFkZXMiCisKKyM6IHNlYXJjaC5jOjQxODgKK21zZ2lkICJObyBpbmNsdWRlZCBmaWxlcyIKK21zZ3N0ciAiSW5nYSBpbmtsdWRlcmFkZSBmaWxlciIKKworIzogc2VhcmNoLmM6NDIwNAorbXNnaWQgIkUzODg6IENvdWxkbid0IGZpbmQgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRTM4ODogS3VuZGUgaW50ZSBoaXR0YSBkZWZpbml0aW9uIgorCisjOiBzZWFyY2guYzo0MjA2Cittc2dpZCAiRTM4OTogQ291bGRuJ3QgZmluZCBwYXR0ZXJuIgorbXNnc3RyICJFMzg5OiBLdW5kZSBpbnRlIGhpdHRhIG32bnN0ZXIiCisKKyM6IHN5bnRheC5jOjMwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MDogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUzOTA6IE90aWxs5XRldCBhcmd1bWVudDogJXMiCisKKyM6IHN5bnRheC5jOjMyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTE6IEluZ2V0IHPlZGFudCBzeW50YXgta2x1c3RlcjogJXMiCisKKyM6IHN5bnRheC5jOjMzNjcKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgIkluZ2Egc3ludGF4LWb2cmVt5WwgZGVmaW5pZXJhZGUgZvZyIGRlbiBo5HIgYnVmZmVydGVuIgorCisjOiBzeW50YXguYzozMzc1Cittc2dpZCAic3luY2luZyBvbiBDLXN0eWxlIGNvbW1lbnRzIgorbXNnc3RyICJzeW5rbmluZyBhdiBDLXN0aWwta29tbWVudGFyZXIiCisKKyM6IHN5bnRheC5jOjMzODMKK21zZ2lkICJubyBzeW5jaW5nIgorbXNnc3RyICJpbmdlbiBzeW5rbmluZyIKKworIzogc3ludGF4LmM6MzM4NgorbXNnaWQgInN5bmNpbmcgc3RhcnRzICIKK21zZ3N0ciAic3lua25pbmcgc3RhcnRhciIKKworIzogc3ludGF4LmM6MzM4OCBzeW50YXguYzozNDYzCittc2dpZCAiIGxpbmVzIGJlZm9yZSB0b3AgbGluZSIKK21zZ3N0ciAiIHJhZGVyIGb2cmUgdG9wcHJhZCIKKworIzogc3ludGF4LmM6MzM5MworbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IHN5bmMgaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIFN5bnRheC1zeW5rZvZyZW3lbCAtLS0iCisKKyM6IHN5bnRheC5jOjMzOTgKK21zZ2lkICIiCisiXG4iCisic3luY2luZyBvbiBpdGVtcyIKK21zZ3N0ciAiIgorIlxuIgorInN5bmtuaW5nIGF2IGb2cmVt5WwiCisKKyM6IHN5bnRheC5jOjM0MDQKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gU3ludGF4IGb2cmVt5WwgLS0tIgorCisjOiBzeW50YXguYzozNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTI6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkyOiBJbmdhIHPlZGFuYSBzeW50YXhrbHVzdGVyOiAlcyIKKworIzogc3ludGF4LmM6MzQ1MworbXNnaWQgIm1pbmltYWwgIgorbXNnc3RyICJtaW5pbWFsICIKKworIzogc3ludGF4LmM6MzQ2MAorbXNnaWQgIm1heGltYWwgIgorbXNnc3RyICJtYXhpbWFsICIKKworIzogc3ludGF4LmM6MzQ3MgorbXNnaWQgIjsgbWF0Y2ggIgorbXNnc3RyICI7IHRy5GZmICIKKworIzogc3ludGF4LmM6MzQ3NAorbXNnaWQgIiBsaW5lIGJyZWFrcyIKK21zZ3N0ciAiIHJhZGJyeXRuaW5nYXIiCisKKyM6IHN5bnRheC5jOjQxMDgKK21zZ2lkICJFMzkzOiBncm91cFt0XWhlcmUgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTM6IGdydXBwZXIgaW50ZSB0aWxs5XRuYSBo5HIiCisKKyM6IHN5bnRheC5jOjQxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiBIaXR0YWRlIGludGUgcmVnaW9uZvZyZW3lbCBm9nIgJXMiCisKKyM6IHN5bnRheC5jOjQxNjAKK21zZ2lkICJFMzk1OiBjb250YWlucyBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NTogaW5uZWjlbGxlciBhcmd1bWVudCBzb20gaW50ZSDkciB0aWxs5XRuYSBo5HIiCisKKyM6IHN5bnRheC5jOjQxNzEKK21zZ2lkICJFMzk2OiBjb250YWluZWRpbiBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NjogaW5uZWj2bGwgYXJndW1lbnQgc29tIGludGUg5HIgdGlsbOV0bmEgaORyIgorCisjOiBzeW50YXguYzo0MjQ5Cittc2dpZCAiRTM5NzogRmlsZW5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUzOTc6IEZpbG5hbW4ga3LkdnMiCisKKyM6IHN5bnRheC5jOjQ1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiBTYWtuYXIgJz0nOiAlcyIKKworIzogc3ludGF4LmM6NDc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogSW50ZSB0aWxscuRja2xpZ2EgYXJndW1lbnQ6IHN5bnRheHJlZ2lvbiAlcyIKKworIzogc3ludGF4LmM6NTA3NgorbXNnaWQgIkU0MDA6IE5vIGNsdXN0ZXIgc3BlY2lmaWVkIgorbXNnc3RyICJFNDAwOiBJbmdldCBrbHVzdGVyIGFuZ2l2ZXQiCisKKyM6IHN5bnRheC5jOjUxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMTogUGF0dGVybiBkZWxpbWl0ZXIgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQwMTogTfZuc3RlcmF2Z3LkbnNhcmUgaGl0dGFkZXMgaW50ZTogJXMiCisKKyM6IHN5bnRheC5jOjUxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMjogR2FyYmFnZSBhZnRlciBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRTQwMjogU2ty5HAgZWZ0ZXIgbfZuc3RlcjogJXMiCisKKyM6IHN5bnRheC5jOjUyNzgKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiBzeW50YXgtc3luazogcmFkZm9ydHPkdHRuaW5nc232bnN0ZXIgYW5naXZldCB0duUgZ+VuZ2VyIgorCisjOiBzeW50YXguYzo1MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDQ6IElsbGVnYWwgYXJndW1lbnRzOiAlcyIKK21zZ3N0ciAiRTQwNDogT3RpbGzldG5hIGFyZ3VtZW50OiAlcyIKKworIzogc3ludGF4LmM6NTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiBTYWtuYXIgbGlrYW1lZC10ZWNrZW46ICVzIgorCisjOiBzeW50YXguYzo1MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDY6IEVtcHR5IGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQwNjogVG9tdCBhcmd1bWVudDogJXMiCisKKyM6IHN5bnRheC5jOjU0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNzogJXMgbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTQwNzogJXMgaW50ZSB0aWxs5XRldCBo5HIiCisKKyM6IHN5bnRheC5jOjU0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwODogJXMgbXVzdCBiZSBmaXJzdCBpbiBjb250YWlucyBsaXN0IgorbXNnc3RyICJFNDA4OiAlcyBt5XN0ZSB2YXJhIGb2cnN0IGkgaW5uZWjlbGxzbGlzdGEiCisKKyM6IHN5bnRheC5jOjU0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwOTogVW5rbm93biBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTQwOTogT2vkbnQgZ3J1cHBuYW1uOiAlcyIKKworIzogc3ludGF4LmM6NTcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEwOiBJbnZhbGlkIDpzeW50YXggc3ViY29tbWFuZDogJXMiCittc2dzdHIgIkU0MTA6IE9naWx0aWd0IDpzeW50YXgtdW5kZXJrb21tYW5kbzogJXMiCisKKyM6IHN5bnRheC5jOjYxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMTogaGlnaGxpZ2h0IGdyb3VwIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MTE6IGZyYW1o5HZuaW5nc2dydXBwIGhpdHRhZGVzIGludGU6ICVzIgorCisjOiBzeW50YXguYzo2MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTI6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEyOiBJbnRlIHRpbGxy5GNrbGlnYSBhcmd1bWVudDogXCI6aGlnaGxpZ2h0IGzkbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEzOiBUb28gbWFueSBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTM6IEb2ciBt5W5nYSBhcmd1bWVudDogXCI6aGlnaGxpZ2h0IGzkbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjE1OAorbXNnaWQgIkU0MTQ6IGdyb3VwIGhhcyBzZXR0aW5ncywgaGlnaGxpZ2h0IGxpbmsgaWdub3JlZCIKK21zZ3N0ciAiRTQxNDogZ3J1cHAgaGFyIGluc3TkbGxuaW5nYXIsIGZyYW1o5HZuaW5nc2zkbmsgaWdub3JlcmFkIgorCisjOiBzeW50YXguYzo2Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTU6IHVuZXhwZWN0ZWQgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTU6IG925G50YXQgbGlrYW1lZC10ZWNrZW46ICVzIgorCisjOiBzeW50YXguYzo2MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IHNha25hciBsaWthbWVkLXRlY2tlbjogJXMiCisKKyM6IHN5bnRheC5jOjYzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MTc6IHNha25hciBhcmd1bWVudDogJXMiCisKKyM6IHN5bnRheC5jOjYzODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6IE90aWxs5XRldCB25HJkZTogJXMiCisKKyM6IHN5bnRheC5jOjY1MDEKK21zZ2lkICJFNDE5OiBGRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDE5OiBGRy1m5HJnIG9r5G5kIgorCisjOiBzeW50YXguYzo2NTEyCittc2dpZCAiRTQyMDogQkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQyMDogQkctZuRyZyBva+RuZCIKKworIzogc3ludGF4LmM6NjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6IEbkcmduYW1uIGVsbGVyIG51bW1lciBpbnRlIGlnZW5r5G50OiAlcyIKKworIzogc3ludGF4LmM6Njc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIyOiB0ZXJtaW5hbCBjb2RlIHRvbyBsb25nOiAlcyIKK21zZ3N0ciAiRTQyMjogdGVybWluYWxrb2QgZvZyIGzlbmc6ICVzIgorCisjOiBzeW50YXguYzo2ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjM6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDIzOiBPdGlsbOV0ZXQgYXJndW1lbnQ6ICVzIgorCisjOiBzeW50YXguYzo3MzU1Cittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDogRvZyIG3lbmdhIG9saWthIGZyYW1o5HZuaW5nc2F0dHJpYnV0IGkgYW525G5kbmluZyIKKworIzogdGFnLmM6OTAKK21zZ2lkICJFNTU1OiBhdCBib3R0b20gb2YgdGFnIHN0YWNrIgorbXNnc3RyICJFNTU1OiBw5SBib3R0ZW4gYXYgdGFnZ3N0YWNrIgorCisjOiB0YWcuYzo5MQorbXNnaWQgIkU1NTY6IGF0IHRvcCBvZiB0YWcgc3RhY2siCittc2dzdHIgIkU1NTY6IHDlIHRvcHBlbiBhdiB0YWdnc3RhY2siCisKKyM6IHRhZy5jOjM5NgorbXNnaWQgIkU0MjU6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI1OiBLYW4gaW50ZSBn5SBm9nJlIGb2cnN0YSBtYXRjaGFuZGUgdGFnZyIKKworIzogdGFnLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjY6IHRhZyBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDI2OiB0YWdnIGhpdHRhZGVzIGludGU6ICVzIgorCisjOiB0YWcuYzo1NDkKK21zZ2lkICIgICMgcHJpIGtpbmQgdGFnIgorbXNnc3RyICIgICMgcHJpLXR5cC10YWdnIgorCisjOiB0YWcuYzo1NTIKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgImZpbFxuIgorCisjLgorIy4gKiBBc2sgdG8gc2VsZWN0IGEgdGFnIGZyb20gdGhlIGxpc3QuCisjLiAqIFdoZW4gdXNpbmcgIjpzaWxlbnQiIGFzc3VtZSB0aGF0IDxDUj4gd2FzIGVudGVyZWQuCisjLgorIzogdGFnLmM6NzEwCittc2dpZCAiRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KTogIgorbXNnc3RyICJBbmdlIG5yIGF2IHZhbCAoPENSPiBm9nIgYXR0IGF2YnJ5dGEpOiAiCisKKyM6IHRhZy5jOjc1MAorbXNnaWQgIkU0Mjc6IFRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNzogRGV0IGZpbm5zIGJhcmEgZW4gbWF0Y2hhbmRlIHRhZ2ciCisKKyM6IHRhZy5jOjc1MgorbXNnaWQgIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjg6IEthbiBpbnRlIGflIGJvcnRvbSBzaXN0YSBtYXRjaGFuZGUgdGFnZyIKKworIzogdGFnLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJGaWwgXCIlc1wiIGV4aXN0ZXJhciBpbnRlIgorCisjLiBHaXZlIGFuIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiBtYXRjaGluZyB0YWdzCisjOiB0YWcuYzo3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICVkIG9mICVkJXMiCittc2dzdHIgInRhZ2cgJWQgYXYgJWQlcyIKKworIzogdGFnLmM6Nzg4Cittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiBlbGxlciBmbGVyIgorCisjOiB0YWcuYzo3OTAKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiICBBbnbkbmRlciB0YWdnIG1lZCBhbm5hbiBzdG9ybGVrISIKKworIzogdGFnLmM6ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Mjk6IEZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFNDI5OiBGaWwgXCIlc1wiIGV4aXN0ZXJhciBpbnRlIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRhZy5jOjkwMworbXNnaWQgIiIKKyJcbiIKKyIgICMgVE8gdGFnICAgICAgICAgRlJPTSBsaW5lICBpbiBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgICMgVElMTCB0YWdnICAgICAgICAgIEZSxU4gTElOSkUgIGkgZmlsL3RleHQiCisKKyM6IHRhZy5jOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIHRhZ3MgZmlsZSAlcyIKK21zZ3N0ciAiU/ZrZXIgdGFnZy1maWwgJXMiCisKKyM6IHRhZy5jOjEzOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IFRhZ2dmaWxz9mt25GcgdHJ1bmtlcmFkZXMgZvZyICVzXG4iCisKKyM6IHRhZy5jOjE5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMTogRm9ybWF0IGVycm9yIGluIHRhZ3MgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0MzE6IEZvcm1hdGVyaW5nc2ZlbCBpIHRhZ2ctZmlsIFwiJXNcIiIKKworIzogdGFnLmM6MTk3MworIywgYy1mb3JtYXQKK21zZ2lkICJCZWZvcmUgYnl0ZSAlbGQiCittc2dzdHIgIkb2cmUgYnl0ZSAlbGQiCisKKyM6IHRhZy5jOjE5OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMjogVGFncyBmaWxlIG5vdCBzb3J0ZWQ6ICVzIgorbXNnc3RyICJFNDMyOiBUYWdnLWZpbCBpbnRlIHNvcnRlcmFkOiAlcyIKKworIy4gbmV2ZXIgb3BlbmVkIGFueSB0YWdzIGZpbGUKKyM6IHRhZy5jOjIwMzQKK21zZ2lkICJFNDMzOiBObyB0YWdzIGZpbGUiCittc2dzdHIgIkU0MzM6IEluZ2VuIHRhZ2ctZmlsIgorCisjOiB0YWcuYzoyNzQyCittc2dpZCAiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIKK21zZ3N0ciAiRTQzNDogS2FuIGludGUgaGl0dGEgdGFnZ232bnN0ZXIiCisKKyM6IHRhZy5jOjI3NTMKK21zZ2lkICJFNDM1OiBDb3VsZG4ndCBmaW5kIHRhZywganVzdCBndWVzc2luZyEiCittc2dzdHIgIkU0MzU6IEt1bmRlIGludGUgaGl0dGEgdGFnZywgZ2lzc2FyIGJhcmEhIgorCisjOiB0ZXJtLmM6MTc0NQorbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiJyBpbnRlIGvkbmQuIFRpbGxn5G5nbGlnYSBpbmJ5Z2dkYSB0ZXJtaW5hbGVyIORyOiIKKworIzogdGVybS5jOjE3NjkKK21zZ2lkICJkZWZhdWx0aW5nIHRvICciCittc2dzdHIgImFuduRuZGVyIHN0YW5kYXJkICciCisKKyM6IHRlcm0uYzoyMTI3Cittc2dpZCAiRTU1NzogQ2Fubm90IG9wZW4gdGVybWNhcCBmaWxlIgorbXNnc3RyICJFNTU3OiBLYW4gaW50ZSD2cHBuYSB0ZXJtY2FwLWZpbCIKKworIzogdGVybS5jOjIxMzEKK21zZ2lkICJFNTU4OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWluZm8iCittc2dzdHIgIkU1NTg6IFRlcm1pbmFsbm90ZXJpbmcgaGl0dGFkZXMgaW50ZSBpIHRlcm1pbmZvIgorCisjOiB0ZXJtLmM6MjEzMworbXNnaWQgIkU1NTk6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNTU5OiBUZXJtaW5hbG5vdGVyaW5nIGhpdHRhZGVzIGludGUgaSB0ZXJtY2FwIgorCisjOiB0ZXJtLmM6MjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDM2OiBObyBcIiVzXCIgZW50cnkgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTQzNjogSW5nZW4gXCIlc1wiLW5vdGVyaW5nIGkgdGVybWNhcCIKKworIzogdGVybS5jOjI3NjYKK21zZ2lkICJFNDM3OiB0ZXJtaW5hbCBjYXBhYmlsaXR5IFwiY21cIiByZXF1aXJlZCIKK21zZ3N0ciAiRTQzNzogdGVybWluYWxrYXBhY2l0ZXQgXCJjbVwiIGty5HZzIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0OTczCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBUZXJtaW5hbG55Y2tsYXIgLS0tIgorCisjOiB1aS5jOjI1MgorbXNnaWQgIm5ldyBzaGVsbCBzdGFydGVkXG4iCittc2dzdHIgIm55dHQgc2thbCBzdGFydGF0XG4iCisKKyM6IHVpLmM6MTc5MQorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICJWaW06IEZlbCB2aWQgbORzbmluZyBhdiBpbm1hdG5pbmcsIGF2c2x1dGFyLi4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6Mzk0Cittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICJJbmdlbiDlbmdyaW5nIG32amxpZzsgZm9ydHPkdHRlciDkbmTlIgorCisjOiB1bmRvLmM6NTQ5Cittc2dpZCAiRTQzODogdV91bmRvOiBsaW5lIG51bWJlcnMgd3JvbmciCittc2dzdHIgIkU0Mzg6IHVfdW5kbzogcmFkbnVtbWVyIGZlbCIKKworIzogdW5kby5jOjcxOAorbXNnaWQgIjEgY2hhbmdlIgorbXNnc3RyICIxIORuZHJpbmciCisKKyM6IHVuZG8uYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYW5nZXMiCittc2dzdHIgIiVsZCDkbmRyaW5nYXIiCisKKyM6IHVuZG8uYzo3NjQKK21zZ2lkICJFNDM5OiB1bmRvIGxpc3QgY29ycnVwdCIKK21zZ3N0ciAiRTQzOTog5W5ncmEtbGlzdGEgdHJhc2lnIgorCisjOiB1bmRvLmM6Nzk2Cittc2dpZCAiRTQ0MDogdW5kbyBsaW5lIG1pc3NpbmciCittc2dzdHIgIkU0NDA6IOVuZ3JhLXJhZCBzYWtuYXMiCisKKyMuIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMKKyM6IHZlcnNpb24uYzoxMTMxCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYvMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMi1iaXRhcnMgR1VJLXZlcnNpb24iCisKKyM6IHZlcnNpb24uYzoxMTMzCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMi1iaXRhcnMgR1VJLXZlcnNpb24iCisKKyM6IHZlcnNpb24uYzoxMTM2Cittc2dpZCAiIGluIFdpbjMycyBtb2RlIgorbXNnc3RyICIgaSBXaW4zMnMtbORnZSIKKworIzogdmVyc2lvbi5jOjExMzgKK21zZ2lkICIgd2l0aCBPTEUgc3VwcG9ydCIKK21zZ3N0ciAiIG1lZCBPTEUtc3T2ZCIKKworIzogdmVyc2lvbi5jOjExNDEKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgY29uc29sZSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMi1iaXRhcnMga29uc29sbHZlcnNpb24iCisKKyM6IHZlcnNpb24uYzoxMTQ1Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYgYml0IHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LWJpdGFycyB2ZXJzaW9uIgorCisjOiB2ZXJzaW9uLmM6MTE0OQorbXNnaWQgIiIKKyJcbiIKKyIzMiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMi1iaXRhcnMgTVMtRE9TLXZlcnNpb24iCisKKyM6IHZlcnNpb24uYzoxMTUxCittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2LWJpdGFycyBNUy1ET1MtdmVyc2lvbiIKKworIzogdmVyc2lvbi5jOjExNTcKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFgtdmVyc2lvbiAodW5peCkiCisKKyM6IHZlcnNpb24uYzoxMTU5Cittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFgtdmVyc2lvbiIKKworIzogdmVyc2lvbi5jOjExNjIKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TLXZlcnNpb24iCisKKyM6IHZlcnNpb24uYzoxMTY3Cittc2dpZCAiIgorIlxuIgorIlJJU0MgT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlJJU0MgT1MtdmVyc2lvbiIKKworIzogdmVyc2lvbi5jOjExNzcKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisiSW5rbHVkZXJhZGUgcGF0Y2hhcjogIgorCisjOiB2ZXJzaW9uLmM6MTIwMyB2ZXJzaW9uLmM6MTU3MQorbXNnaWQgIk1vZGlmaWVkIGJ5ICIKK21zZ3N0ciAiTW9kaWZpZXJhZCBhdiAiCisKKyM6IHZlcnNpb24uYzoxMjEwCittc2dpZCAiIgorIlxuIgorIkNvbXBpbGVkICIKK21zZ3N0ciAiIgorIlxuIgorIktvbXBpbGVyYWQgIgorCisjOiB2ZXJzaW9uLmM6MTIxMworbXNnaWQgImJ5ICIKK21zZ3N0ciAiYXYgIgorCisjOiB2ZXJzaW9uLmM6MTIyNQorbXNnaWQgIiIKKyJcbiIKKyJIdWdlIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiRW5vcm0gdmVyc2lvbiAiCisKKyM6IHZlcnNpb24uYzoxMjI4Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIlN0b3IgdmVyc2lvbiAiCisKKyM6IHZlcnNpb24uYzoxMjMxCittc2dpZCAiIgorIlxuIgorIk5vcm1hbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIk5vcm1hbCB2ZXJzaW9uICIKKworIzogdmVyc2lvbi5jOjEyMzQKK21zZ2lkICIiCisiXG4iCisiU21hbGwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyJMaXRlbiB2ZXJzaW9uICIKKworIzogdmVyc2lvbi5jOjEyMzYKK21zZ2lkICIiCisiXG4iCisiVGlueSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIkrkdHRlbGl0ZW4gdmVyc2lvbiAiCisKKyM6IHZlcnNpb24uYzoxMjQyCittc2dpZCAid2l0aG91dCBHVUkuIgorbXNnc3RyICJ1dGFuIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxMjQ3Cittc2dpZCAid2l0aCBHVEsyLUdOT01FIEdVSS4iCittc2dzdHIgIm1lZCBHVEsyLUdOT01FLUdVSS4iCisKKyM6IHZlcnNpb24uYzoxMjQ5Cittc2dpZCAid2l0aCBHVEstR05PTUUgR1VJLiIKK21zZ3N0ciAibWVkIEdUSy1HTk9NRS1HVUkuIgorCisjOiB2ZXJzaW9uLmM6MTI1MworbXNnaWQgIndpdGggR1RLMiBHVUkuIgorbXNnc3RyICJtZWQgR1RLMi1HVUkuIgorCisjOiB2ZXJzaW9uLmM6MTI1NQorbXNnaWQgIndpdGggR1RLIEdVSS4iCittc2dzdHIgIm1lZCBHVEstR1VJLiIKKworIzogdmVyc2lvbi5jOjEyNjAKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICJtZWQgWDExLU1vdGlmLUdVSS4iCisKKyM6IHZlcnNpb24uYzoxMjY0Cittc2dpZCAid2l0aCBYMTEtbmVYdGF3IEdVSS4iCittc2dzdHIgIm1lZCBYMTEtbmVYdGF3LUdVSS4iCisKKyM6IHZlcnNpb24uYzoxMjY2Cittc2dpZCAid2l0aCBYMTEtQXRoZW5hIEdVSS4iCittc2dzdHIgIm1lZCBYMTEtQXRoZW5hLUdVSS4iCisKKyM6IHZlcnNpb24uYzoxMjcwCittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgIm1lZCBCZU9TLUdVSS4iCisKKyM6IHZlcnNpb24uYzoxMjczCittc2dpZCAid2l0aCBQaG90b24gR1VJLiIKK21zZ3N0ciAibWVkIFBob3Rvbi1HVUkuIgorCisjOiB2ZXJzaW9uLmM6MTI3NgorbXNnaWQgIndpdGggR1VJLiIKK21zZ3N0ciAibWVkIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxMjc5Cittc2dpZCAid2l0aCBDYXJib24gR1VJLiIKK21zZ3N0ciAibWVkIENhcmJvbi1HVUkuIgorCisjOiB2ZXJzaW9uLmM6MTI4MgorbXNnaWQgIndpdGggQ29jb2EgR1VJLiIKK21zZ3N0ciAibWVkIENvY29hLUdVSS4iCisKKyM6IHZlcnNpb24uYzoxMjg1Cittc2dpZCAid2l0aCAoY2xhc3NpYykgR1VJLiIKK21zZ3N0ciAibWVkIChrbGFzc2lza3QpIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxMjk2Cittc2dpZCAiICBGZWF0dXJlcyBpbmNsdWRlZCAoKykgb3Igbm90ICgtKTpcbiIKK21zZ3N0ciAiICBGdW5rdGlvbmVyIGlua2x1ZGVyYWRlICgrKSBlbGxlciBpbnRlICgtKTpcbiIKKworIzogdmVyc2lvbi5jOjEzMDgKK21zZ2lkICIgICBzeXN0ZW0gdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgIHN5c3RlbS12aW1yYy1maWw6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTMxMworbXNnaWQgIiAgICAgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICBhbnbkbmRhci12aW1yYy1maWw6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTMxOAorbXNnaWQgIiAybmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIEFuZHJhIGFuduRuZGFyLXZpbXJjLWZpbDogXCIiCisKKyM6IHZlcnNpb24uYzoxMzIzCittc2dpZCAiIDNyZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgVHJlZGplIGFuduRuZGFyLXZpbXJjLWZpbDogXCIiCisKKyM6IHZlcnNpb24uYzoxMzI4Cittc2dpZCAiICAgICAgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICBhbnbkbmRhci1leHJjLWZpbDogXCIiCisKKyM6IHZlcnNpb24uYzoxMzMzCittc2dpZCAiICAybmQgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgIEFuZHJhIGFuduRuZGFyLWV4cmMtZmlsOiBcIiIKKworIzogdmVyc2lvbi5jOjEzMzkKK21zZ2lkICIgIHN5c3RlbSBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgc3lzdGVtLWd2aW1yYy1maWw6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTM0MworbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIGFuduRuZGFyLWd2aW1yYy1maWw6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTM0NworbXNnaWQgIjJuZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiQW5kcmEgYW525G5kYXItZ3ZpbXJjLWZpbDogXCIiCisKKyM6IHZlcnNpb24uYzoxMzUyCittc2dpZCAiM3JkIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICJUcmVkamUgYW525G5kYXItZ3ZpbXJjLWZpbDogXCIiCisKKyM6IHZlcnNpb24uYzoxMzU5Cittc2dpZCAiICAgIHN5c3RlbSBtZW51IGZpbGU6IFwiIgorbXNnc3RyICIgICAgc3lzdGVtbWVueWZpbDogXCIiCisKKyM6IHZlcnNpb24uYzoxMzY3Cittc2dpZCAiICBmYWxsLWJhY2sgZm9yICRWSU06IFwiIgorbXNnc3RyICIgIHJlc2VydiBm9nIgJFZJTTogXCIiCisKKyM6IHZlcnNpb24uYzoxMzczCittc2dpZCAiIGYtYiBmb3IgJFZJTVJVTlRJTUU6IFwiIgorbXNnc3RyICIgcmVzZXJ2IGb2ciAkVklNUlVOVElNRTogXCIiCisKKyM6IHZlcnNpb24uYzoxMzc3Cittc2dpZCAiQ29tcGlsYXRpb246ICIKK21zZ3N0ciAiS29tcGlsZXJpbmc6ICIKKworIzogdmVyc2lvbi5jOjEzODMKK21zZ2lkICJDb21waWxlcjogIgorbXNnc3RyICJLb21waWxhdG9yOiAiCisKKyM6IHZlcnNpb24uYzoxMzg4Cittc2dpZCAiTGlua2luZzogIgorbXNnc3RyICJM5G5rbmluZzogIgorCisjOiB2ZXJzaW9uLmM6MTM5MworbXNnaWQgIiAgREVCVUcgQlVJTEQiCittc2dzdHIgIiAgRkVMU9ZLTklOR1NCWUdHRCIKKworIzogdmVyc2lvbi5jOjE0MzIKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVmkgSU1wcm92ZWQiCisKKyM6IHZlcnNpb24uYzoxNDM0Cittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgInZlcnNpb24gIgorCisjOiB2ZXJzaW9uLmM6MTQzNQorbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAiYXYgQnJhbSBNb29sZW5hYXIgbS5mbC4iCisKKyM6IHZlcnNpb24uYzoxNDM5Cittc2dpZCAiVmltIGlzIG9wZW4gc291cmNlIGFuZCBmcmVlbHkgZGlzdHJpYnV0YWJsZSIKK21zZ3N0ciAiVmltIORyIPZwcGVuIGvkbGxrb2Qgb2NoIGZyaSBhdHQgZGlzdHJpYnVlcmEiCisKKyM6IHZlcnNpb24uYzoxNDQxCittc2dpZCAiSGVscCBwb29yIGNoaWxkcmVuIGluIFVnYW5kYSEiCittc2dzdHIgIkhq5GxwIGZhdHRpZ2EgYmFybiBpIFVnYW5kYSEiCisKKyM6IHZlcnNpb24uYzoxNDQyCittc2dpZCAidHlwZSAgOmhlbHAgaWNjZjxFbnRlcj4gICAgICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAic2tyaXYgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgICBm9nIgaW5mb3JtYXRpb24gICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTQ0NAorbXNnaWQgInR5cGUgIDpxPEVudGVyPiAgICAgICAgICAgICAgIHRvIGV4aXQgICAgICAgICAiCittc2dzdHIgInNrcml2ICA6cTxFbnRlcj4gICAgICAgICAgICAgICAgZvZyIGF0dCBhdnNsdXRhICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjE0NDUKK21zZ2lkICJ0eXBlICA6aGVscDxFbnRlcj4gIG9yICA8RjE+ICBmb3Igb24tbGluZSBoZWxwIgorbXNnc3RyICJza3JpdiAgOmhlbHA8RW50ZXI+IGVsbGVyIDxGMT4gIGb2ciBvbmxpbmUtaGrkbHAgICAgICAgICAiCisKKyM6IHZlcnNpb24uYzoxNDQ2Cittc2dpZCAidHlwZSAgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICAgZm9yIHZlcnNpb24gaW5mbyIKK21zZ3N0ciAic2tyaXYgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgICBm9nIgdmVyc2lvbmluZm9ybWF0aW9uICAgIgorCisjOiB2ZXJzaW9uLmM6MTQ0OQorbXNnaWQgIlJ1bm5pbmcgaW4gVmkgY29tcGF0aWJsZSBtb2RlIgorbXNnc3RyICJL9nIgaSBWaS1rb21wYXRpYmVsdCBs5GdlIgorCisjOiB2ZXJzaW9uLmM6MTQ1MAorbXNnaWQgInR5cGUgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIGZvciBWaW0gZGVmYXVsdHMiCittc2dzdHIgInNrcml2ICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBm9nIgVmltLSBzdGFuZGFyZGVyICAgICAgICIKKworIzogdmVyc2lvbi5jOjE0NTEKK21zZ2lkICJ0eXBlICA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICJza3JpdiAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZvZyIGluZm9ybWF0aW9uIG9tIGRldCBo5HIiCisKKyM6IHZlcnNpb24uYzoxNDY2Cittc2dpZCAibWVudSAgSGVscC0+T3JwaGFucyAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uICAgICIKK21zZ3N0ciAibWVueSAgSGrkbHAtPkb2cuRsZHJhbPZzYSAgICAgICAgICAgZvZyIGluZm9ybWF0aW9uICAgICIKKworIzogdmVyc2lvbi5jOjE0NjgKK21zZ2lkICJSdW5uaW5nIG1vZGVsZXNzLCB0eXBlZCB0ZXh0IGlzIGluc2VydGVkIgorbXNnc3RyICJL9nIgbORnZXNs9nN0LCBza3JpdmVuIHRleHQgYmxpciBpbmZvZ2FkIgorCisjOiB2ZXJzaW9uLmM6MTQ2OQorbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIEluc2VydCBNb2RlICAiCittc2dzdHIgIm1lbnkgUmVkaWdlcmEtPkdsb2JhbGEgaW5zdORsbG5pbmdhci0+VuR4bGEgaW5mb2duaW5nc2zkZ2UgICIKKworIzogdmVyc2lvbi5jOjE0NzAKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHdvIG1vZGVzICAgICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm9nIgdHblIGzkZ2VuICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTQ3NAorbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIFZpIENvbXBhdGlibGUiCittc2dzdHIgIm1lbnkgIFJlZGlnZXJhLT5HbG9iYWxhIEluc3TkbGxuaW5nYXItPlbkeGxhIFZpIEtvbXB0YWliZWwiCisKKyM6IHZlcnNpb24uYzoxNDc1Cittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZvZyIHZpbS1zdGFuZGFyZGFsdGVybmF0aXYgICAiCisKKyM6IHZlcnNpb24uYzoxNTIyCittc2dpZCAiU3BvbnNvciBWaW0gZGV2ZWxvcG1lbnQhIgorbXNnc3RyICJTdPZkIHV0dmVja2xpbmdlbiBhdiBWaW0hIgorCisjOiB2ZXJzaW9uLmM6MTUyMworbXNnaWQgIkJlY29tZSBhIHJlZ2lzdGVyZWQgVmltIHVzZXIhIgorbXNnc3RyICJCbGkgZW4gcmVnaXN0cmVyYWQgVmltLWFuduRuZGFyZSEiCisKKyM6IHZlcnNpb24uYzoxNTI2Cittc2dpZCAidHlwZSAgOmhlbHAgc3BvbnNvcjxFbnRlcj4gICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAic2tyaXYgIDpoZWxwIHNwb25zb3I8RW50ZXI+ICAgICBm9nIgaW5mb3JtYXRpb24gICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTUyNworbXNnaWQgInR5cGUgIDpoZWxwIHJlZ2lzdGVyPEVudGVyPiAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgInNrcml2ICA6aGVscCByZWdpc3RlcjxFbnRlcj4gICAgZvZyIGluZm9ybWF0aW9uICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjE1MjkKK21zZ2lkICJtZW51ICBIZWxwLT5TcG9uc29yL1JlZ2lzdGVyICBmb3IgaW5mb3JtYXRpb24gICAgIgorbXNnc3RyICJtZW55ICBIauRscC0+U3T2ZC9SZWdpc3RyZXJhICAgICAgICAgICBm9nIgaW5mb3JtYXRpb24gICAgIgorCisjOiB2ZXJzaW9uLmM6MTUzOQorbXNnaWQgIldBUk5JTkc6IFdpbmRvd3MgOTUvOTgvTUUgZGV0ZWN0ZWQiCittc2dzdHIgIlZBUk5JTkc6IFdpbmRvd3MgOTUvOTgvTUUgdXBwdORja3QiCisKKyM6IHZlcnNpb24uYzoxNTQyCittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAic2tyaXYgIDpoZWxwIHdpbmRvd3M5NTxFbnRlcj4gIGb2ciBpbmZvIG9tIGRldCBo5HIiCisKKyM6IHdpbmRvdy5jOjIwMworbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiBEZXQgZmlubnMgaW5nZXQgZvZyaGFuZHN2aXNuaW5nc2b2bnN0ZXIiCisKKyM6IHdpbmRvdy5jOjU4MQorbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IEthbiBpbnRlIGRlbGEgdG9wcHbkbnN0ZXIgb2NoIGJvdHRlbmj2Z2VyIHNhbXRpZGlndCIKKworIzogd2luZG93LmM6MTM0MAorbXNnaWQgIkU0NDM6IENhbm5vdCByb3RhdGUgd2hlbiBhbm90aGVyIHdpbmRvdyBpcyBzcGxpdCIKK21zZ3N0ciAiRTQ0MzogS2FuIGludGUgcm90ZXJhIG7kciBldHQgYW5uYXQgZvZuc3RlciDkciBkZWxhdCIKKworIzogd2luZG93LmM6MTgzNQorbXNnaWQgIkU0NDQ6IENhbm5vdCBjbG9zZSBsYXN0IHdpbmRvdyIKK21zZ3N0ciAiRTQ0NDogS2FuIGludGUgc3TkbmdhIHNlbmFzdGUgZvZuc3RyZXQiCisKKyM6IHdpbmRvdy5jOjI1NjYKK21zZ2lkICJBbHJlYWR5IG9ubHkgb25lIHdpbmRvdyIKK21zZ3N0ciAiUmVkYW4gYmFyYSBldHQgZvZuc3RlciIKKworIzogd2luZG93LmM6MjYxMworbXNnaWQgIkU0NDU6IE90aGVyIHdpbmRvdyBjb250YWlucyBjaGFuZ2VzIgorbXNnc3RyICJFNDQ1OiBBbmRyYSBm9m5zdGVyIGlubmVo5WxsZXIg5G5kcmluZ2FyIgorCisjOiB3aW5kb3cuYzo0NDc0Cittc2dpZCAiRTQ0NjogTm8gZmlsZSBuYW1lIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTQ0NjogSW5nZXQgZmlsbmFtbiB1bmRlciBtYXJr9nIiCisKKyM6IHdpbmRvdy5jOjQ1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0NzogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFNDQ3OiBLYW4gaW50ZSBoaXR0YSBmaWwgXCIlc1wiIGkgc/ZrduRnIgorCisjOiBnbG9iYWxzLmg6MTIwOSBpZl9wZXJsLnhzOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcwOiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5ICVzIgorbXNnc3RyICJFMzcwOiBLdW5kZSBpbnRlIGzkc2EgaW4gYmlibGlvdGVrICVzIgorCisjOiBpZl9wZXJsLnhzOjU1NAorbXNnaWQgIlNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBQZXJsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKyJUeXbkcnIsIGRldCBo5HIga29tbWFuZG90IORyIGluYWt0aXZlcmF0OiBQZXJsLWJpYmxpb3Rla2V0IGt1bmRlIGludGUgbORzYXMgIgorImluLiIKKworIzogaWZfcGVybC54czo2MDAKK21zZ2lkICJFMjk5OiBQZXJsIGV2YWx1YXRpb24gZm9yYmlkZGVuIGluIHNhbmRib3ggd2l0aG91dCB0aGUgU2FmZSBtb2R1bGUiCittc2dzdHIgIkUyOTk6IFBlcmwtZXZhbHVlcmluZyBm9nJianVkZW4gaSBzYW5kbOVkYSB1dGFuIFNhZmUtbW9kdWxlbiIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODMKK21zZ2lkICJFZGl0IHdpdGggJm11bHRpcGxlIFZpbXMiCittc2dzdHIgIlJlZGlnZXJhIG1lZCAmZmxlcmEgVmltcyIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODkKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgIlJlZGlnZXJhIG1lZCBlbiAmVmltIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjU5OAorbXNnaWQgIiZEaWZmIHdpdGggVmltIgorbXNnc3RyICImRGlmZiBtZWQgVmltIgorCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjYxMQorbXNnaWQgIkVkaXQgd2l0aCAmVmltIgorbXNnc3RyICJSZWRpZ2VyYSBtZWQgJlZpbSIKKworIy4gTm93IGNvbmNhdGVuYXRlCisjOiBHdmltRXh0L2d2aW1leHQuY3BwOjYzMworbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICJSZWRpZ2VyYSBtZWQgYmVmaW50bGlnIFZpbSAtICYiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6NzQ2Cittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgIlJlZGlnZXJhciBtYXJrZXJhZGUgZmlsKGVybmEpIG1lZCBWaW0iCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg1IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcHJvY2VzczogQ2hlY2sgaWYgZ3ZpbSBpcyBpbiB5b3VyIHBhdGghIgorbXNnc3RyICJGZWxza2FwYW5kZSBwcm9jZXNzOiBLb250cm9sbGVyYSBvbSBndmltIORyIGkgZGluIHP2a3bkZyEiCisKKyM6IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg2IEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTAwIEd2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY3Cittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgImd2aW1leHQuZGxsLWZlbCIKKworIzogR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTkKK21zZ2lkICJQYXRoIGxlbmd0aCB0b28gbG9uZyEiCittc2dzdHIgIlP2a3bkZ3Ns5G5nZCBm9nIgbOVuZyEiCisKKyM6IGdsb2JhbHMuaDo5OTkKK21zZ2lkICItLU5vIGxpbmVzIGluIGJ1ZmZlci0tIgorbXNnc3RyICItLUluZ2EgcmFkZXIgaSBidWZmZXJ0LS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTE2MgorbXNnaWQgIkU0NzA6IENvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiRTQ3MDogS29tbWFuZG8gYXZicnV0ZXQiCisKKyM6IGdsb2JhbHMuaDoxMTYzCittc2dpZCAiRTQ3MTogQXJndW1lbnQgcmVxdWlyZWQiCittc2dzdHIgIkU0NzE6IEFyZ3VtZW50IGty5HZzIgorCisjOiBnbG9iYWxzLmg6MTE2NAorbXNnaWQgIkUxMDogXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJiIKK21zZ3N0ciAiRTEwOiBcXCBib3JkZSBm9mxqYXMgYXYgLywgPyBlbGxlciAmIgorCisjOiBnbG9iYWxzLmg6MTE2NgorbXNnaWQgIkUxMTogSW52YWxpZCBpbiBjb21tYW5kLWxpbmUgd2luZG93OyA8Q1I+IGV4ZWN1dGVzLCBDVFJMLUMgcXVpdHMiCittc2dzdHIgIkUxMTogRmVsYWt0aWdoZXQgaSBrb21tYW5kb3JhZHNm9m5zdGVyOyA8Q1I+IGv2ciwgQ1RSTC1DIGF2c2x1dGFyIgorCisjOiBnbG9iYWxzLmg6MTE2OAorbXNnaWQgIkUxMjogQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaCIKK21zZ3N0ciAiIgorIkUxMjogS29tbWFuZG8gaW50ZSB0aWxs5XRldCBmcuVuIGV4cmMvdmltcmMgaSBha3R1ZWxsIGthdGFsb2cgZWxsZXIgIgorInRhZ2dz9mtuaW5nIgorCisjOiBnbG9iYWxzLmg6MTE3MAorbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiBTYWtuYXIgOmVuZGlmIgorCisjOiBnbG9iYWxzLmg6MTE3MQorbXNnaWQgIkU2MDA6IE1pc3NpbmcgOmVuZHRyeSIKK21zZ3N0ciAiRTYwMDogU2FrbmFyIDplbmR0cnkiCisKKyM6IGdsb2JhbHMuaDoxMTcyCittc2dpZCAiRTE3MDogTWlzc2luZyA6ZW5kd2hpbGUiCittc2dzdHIgIkUxNzA6IFNha25hciA6ZW5kd2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMTczCittc2dpZCAiRTU4ODogOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg4OiA6ZW5kd2hpbGUgdXRhbiA6d2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMTc1Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IEZpbCBleGlzdGVyYXIgKGzkZ2cgdGlsbCAhIGb2ciBhdHQgdHZpbmdhKSIKKworIzogZ2xvYmFscy5oOjExNzYKK21zZ2lkICJFNDcyOiBDb21tYW5kIGZhaWxlZCIKK21zZ3N0ciAiRTQ3MjogS29tbWFuZG8gbWlzc2x5Y2thZGVzIgorCisjOiBnbG9iYWxzLmg6MTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM0OiBVbmtub3duIGZvbnRzZXQ6ICVzIgorbXNnc3RyICJFMjM0OiBPa+RuZCB0eXBzbml0dHN1cHBz5HR0bmluZzogJXMiCisKKyM6IGdsb2JhbHMuaDoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IFVua25vd24gZm9udDogJXMiCittc2dzdHIgIkUyMzU6IE9r5G50IHR5cHNuaXR0OiAlcyIKKworIzogZ2xvYmFscy5oOjExODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNjogRm9udCBcIiVzXCIgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJFMjM2OiBUeXBzbml0dCBcIiVzXCIg5HIgaW50ZSBicmVkZC1maXhlcmFkIgorCisjOiBnbG9iYWxzLmg6MTE4NworbXNnaWQgIkU0NzM6IEludGVybmFsIGVycm9yIgorbXNnc3RyICJFNDczOiBJbnRlcm50IGZlbCIKKworIzogZ2xvYmFscy5oOjExODgKK21zZ2lkICJJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiQXZicnV0ZW4iCisKKyM6IGdsb2JhbHMuaDoxMTg5Cittc2dpZCAiRTE0OiBJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIkUxNDogT2dpbHRpZyBhZGRyZXNzIgorCisjOiBnbG9iYWxzLmg6MTE5MAorbXNnaWQgIkU0NzQ6IEludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkU0NzQ6IE9naWx0aWd0IGFyZ3VtZW50IgorCisjOiBnbG9iYWxzLmg6MTE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDc1OiBJbnZhbGlkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQ3NTogT2dpbHRpZ3QgYXJndW1lbnQ6ICVzIgorCisjOiBnbG9iYWxzLmg6MTE5MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogJXMiCittc2dzdHIgIkUxNTogT2dpbHRpZ3QgdXR0cnljazogJXMiCisKKyM6IGdsb2JhbHMuaDoxMTk1Cittc2dpZCAiRTE2OiBJbnZhbGlkIHJhbmdlIgorbXNnc3RyICJFMTY6IE9naWx0aWd0IG9tcuVkZSIKKworIzogZ2xvYmFscy5oOjExOTYKK21zZ2lkICJFNDc2OiBJbnZhbGlkIGNvbW1hbmQiCittc2dzdHIgIkU0NzY6IE9naWx0aWd0IGtvbW1hbmRvIgorCisjOiBnbG9iYWxzLmg6MTE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCIg5HIgZW4ga2F0YWxvZyIKKworIzogZ2xvYmFscy5oOjEyMDEKK21zZ2lkICJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIgorbXNnc3RyICJFMTg6IE925G50YWRlIHRlY2tlbiBm9nJlICc9JyIKKworIzogZ2xvYmFscy5oOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NDogTGlicmFyeSBjYWxsIGZhaWxlZCBmb3IgXCIlcygpXCIiCittc2dzdHIgIkUzNjQ6IEJpYmxpb3Rla3NhbnJvcCBtaXNzbHlja2FkZXMgZvZyIFwiJXMoKVwiIgorCisjOiBnbG9iYWxzLmg6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ4OiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5IGZ1bmN0aW9uICVzIgorbXNnc3RyICJFNDQ4OiBLdW5kZSBpbnRlIGzkc2EgaW4gYmlibGlvdGVrc2Z1bmt0aW9uICVzIgorCisjOiBnbG9iYWxzLmg6MTIxMgorbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiBNYXJrZXJpbmcgaGFyIG9naWx0aWd0IHJhZG51bW1lciIKKworIzogZ2xvYmFscy5oOjEyMTMKK21zZ2lkICJFMjA6IE1hcmsgbm90IHNldCIKK21zZ3N0ciAiRTIwOiBNYXJrZXJpbmcgaW50ZSBzYXR0IgorCisjOiBnbG9iYWxzLmg6MTIxNAorbXNnaWQgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIKK21zZ3N0ciAiRTIxOiBLYW4gaW50ZSBn9nJhIORuZHJpbmdhciwgJ21vZGlmaWFibGUnIORyIGF2IgorCisjOiBnbG9iYWxzLmg6MTIxNQorbXNnaWQgIkUyMjogU2NyaXB0cyBuZXN0ZWQgdG9vIGRlZXAiCittc2dzdHIgIkUyMjogU2tyaXB0IG7kc3RsYWRlIGb2ciBkanVwdCIKKworIzogZ2xvYmFscy5oOjEyMTYKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6IEluZ2VuIGFsdGVybmF0aXYgZmlsIgorCisjOiBnbG9iYWxzLmg6MTIxNworbXNnaWQgIkUyNDogTm8gc3VjaCBhYmJyZXZpYXRpb24iCittc2dzdHIgIkUyNDogSW5nZW4gc+VkYW4gZvZya29ydG5pbmciCisKKyM6IGdsb2JhbHMuaDoxMjE4Cittc2dpZCAiRTQ3NzogTm8gISBhbGxvd2VkIgorbXNnc3RyICJFNDc3OiBJbmdldCAhIHRpbGzldGV0IgorCisjOiBnbG9iYWxzLmg6MTIyMAorbXNnaWQgIkUyNTogR1VJIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIkUyNTogR1VJIGthbiBpbnRlIGFuduRuZGFzOiBJbnRlIGFrdGl2ZXJhdCB2aWQga29tcGlsZXJpbmciCisKKyM6IGdsb2JhbHMuaDoxMjIzCittc2dpZCAiRTI2OiBIZWJyZXcgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjY6IEhlYnJlaXNrYSBrYW4gaW50ZSBhbnbkbmRhczogSW50ZSBha3RpdmVyYXQgdmlkIGtvbXBpbGVyaW5nXG4iCisKKyM6IGdsb2JhbHMuaDoxMjI2Cittc2dpZCAiRTI3OiBGYXJzaSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNzogUGVyc2lza2Ega2FuIGludGUgYW525G5kYXM6IEludGUgYWt0aXZlcmF0IHZpZCBrb21waWxlcmluZ1xuIgorCisjOiBnbG9iYWxzLmg6MTIyOQorbXNnaWQgIkU4MDA6IEFyYWJpYyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkU4MDA6IEFyYWJpc2thIGthbiBpbnRlIGFuduRuZGFzOiBJbnRlIGFrdGl2ZXJhdCB2aWQga29tcGlsZXJpbmdcbiIKKworIzogZ2xvYmFscy5oOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiBJbmdldCBz5WRhbnQgZnJhbWjkdm5pbmdzZ3J1cHBuYW1uOiAlcyIKKworIzogZ2xvYmFscy5oOjEyMzQKK21zZ2lkICJFMjk6IE5vIGluc2VydGVkIHRleHQgeWV0IgorbXNnc3RyICJFMjk6IEluZ2VuIGluZm9nYWQgdGV4dCDkbiIKKworIzogZ2xvYmFscy5oOjEyMzUKK21zZ2lkICJFMzA6IE5vIHByZXZpb3VzIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiRTMwOiBJbmdlbiB0aWRpZ2FyZSBrb21tYW5kb3JhZCIKKworIzogZ2xvYmFscy5oOjEyMzYKK21zZ2lkICJFMzE6IE5vIHN1Y2ggbWFwcGluZyIKK21zZ3N0ciAiRTMxOiBJbmdlbiBz5WRhbiBtYXBwbmluZyIKKworIzogZ2xvYmFscy5oOjEyMzcKK21zZ2lkICJFNDc5OiBObyBtYXRjaCIKK21zZ3N0ciAiRTQ3OTogSW5nZW4gdHLkZmYiCisKKyM6IGdsb2JhbHMuaDoxMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODA6IE5vIG1hdGNoOiAlcyIKK21zZ3N0ciAiRTQ4MDogSW5nZW4gdHLkZmY6ICVzIgorCisjOiBnbG9iYWxzLmg6MTIzOQorbXNnaWQgIkUzMjogTm8gZmlsZSBuYW1lIgorbXNnc3RyICJFMzI6IEluZ2V0IGZpbG5hbW4iCisKKyM6IGdsb2JhbHMuaDoxMjQwCittc2dpZCAiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTMzOiBJbmdldCB0aWRpZ2FyZSB1dGJ5dG5pbmdzcmVndWxq5HJ1dHRyeWNrIgorCisjOiBnbG9iYWxzLmg6MTI0MQorbXNnaWQgIkUzNDogTm8gcHJldmlvdXMgY29tbWFuZCIKK21zZ3N0ciAiRTM0OiBJbmdldCB0aWRpZ2FyZSBrb21tYW5kbyIKKworIzogZ2xvYmFscy5oOjEyNDIKK21zZ2lkICJFMzU6IE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTM1OiBJbmdldCB0aWRpZ2FyZSByZWd1bGrkcnQgdXR0cnljayIKKworIzogZ2xvYmFscy5oOjEyNDMKK21zZ2lkICJFNDgxOiBObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICJFNDgxOiBJbmdldCBvbXLlZGUgdGlsbOV0ZXQiCisKKyM6IGdsb2JhbHMuaDoxMjQ1Cittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjogSW50ZSB0aWxscuRja2xpZ3QgbWVkIHV0cnltbWUiCisKKyM6IGdsb2JhbHMuaDoxMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDc6IG5vIHJlZ2lzdGVyZWQgc2VydmVyIG5hbWVkIFwiJXNcIiIKK21zZ3N0ciAiRTI0NzogaW5nZW4gcmVnaXN0cmVyYWQgc2VydmVyIG1lZCBuYW1uZXQgXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDgyOiBDYW4ndCBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiRTQ4MjogS2FuIGludGUgc2thcGEgZmlsICVzIgorCisjOiBnbG9iYWxzLmg6MTI1MQorbXNnaWQgIkU0ODM6IENhbid0IGdldCB0ZW1wIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTQ4MzogS2FuIGludGUgaORtdGEgdGVtcG9y5HJ0IGZpbG5hbW4iCisKKyM6IGdsb2JhbHMuaDoxMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODQ6IENhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiRTQ4NDogS2FuIGludGUg9nBwbmEgZmlsICVzIgorCisjOiBnbG9iYWxzLmg6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDg1OiBDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIkU0ODU6IEthbiBpbnRlIGzkc2EgZmlsICVzIgorCisjOiBnbG9iYWxzLmg6MTI1NAorbXNnaWQgIkUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkUzNzogSW5nZW4gc2tyaXZuaW5nIHNlZGFuIHNlbmFzdGUg5G5kcmluZyAobORnZyB0aWxsICEgZvZyIGF0dCB0dmluZ2EpIgorCisjOiBnbG9iYWxzLmg6MTI1NQorbXNnaWQgIkUzODogTnVsbCBhcmd1bWVudCIKK21zZ3N0ciAiRTM4OiBOdWxsLWFyZ3VtZW50IgorCisjOiBnbG9iYWxzLmg6MTI1NworbXNnaWQgIkUzOTogTnVtYmVyIGV4cGVjdGVkIgorbXNnc3RyICJFMzk6IE51bW1lciB25G50YXQiCisKKyM6IGdsb2JhbHMuaDoxMjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDogS2FuIGludGUg9nBwbmEgZmVsZmlsICVzIgorCisjOiBnbG9iYWxzLmg6MTI2MworbXNnaWQgIkUyMzM6IGNhbm5vdCBvcGVuIGRpc3BsYXkiCittc2dzdHIgIkUyMzM6IGthbiBpbnRlIPZwcG5hIGRpc3BsYXkiCisKKyM6IGdsb2JhbHMuaDoxMjY1Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiBTbHV0IHDlIG1pbm5lISIKKworIzogZ2xvYmFscy5oOjEyNjcKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZCIKK21zZ3N0ciAiTfZuc3RlciBoaXR0YWRlcyBpbnRlIgorCisjOiBnbG9iYWxzLmg6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg2OiBQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0ODY6IE32bnN0ZXIgaGl0dGFkZXMgaW50ZTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjcwCittc2dpZCAiRTQ4NzogQXJndW1lbnQgbXVzdCBiZSBwb3NpdGl2ZSIKK21zZ3N0ciAiRTQ4NzogQXJndW1lbnQgbeVzdGUgdmFyYSBwb3NpdGl2dCIKKworIzogZ2xvYmFscy5oOjEyNzIKK21zZ2lkICJFNDU5OiBDYW5ub3QgZ28gYmFjayB0byBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkU0NTk6IEthbiBpbnRlIGflIHRpbGxiYWthIHRpbGwgdGlkaWdhcmUga2F0YWxvZyIKKworIzogZ2xvYmFscy5oOjEyNzYKK21zZ2lkICJFNDI6IE5vIEVycm9ycyIKK21zZ3N0ciAiRTQyOiBJbmdhIGZlbCIKKworIzogZ2xvYmFscy5oOjEyNzgKK21zZ2lkICJFNDM6IERhbWFnZWQgbWF0Y2ggc3RyaW5nIgorbXNnc3RyICJFNDM6IFNrYWRhZCB0cuRmZnN0cuRuZyIKKworIzogZ2xvYmFscy5oOjEyNzkKK21zZ2lkICJFNDQ6IENvcnJ1cHRlZCByZWdleHAgcHJvZ3JhbSIKK21zZ3N0ciAiRTQ0OiBUcmFzaWd0IHByb2dyYW0gZvZyIHJlZ3VsauRyYSB1dHRyeWNrIgorCisjOiBnbG9iYWxzLmg6MTI4MAorbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU0NTogJ3JlYWRvbmx5JyBmbGFnZ2Eg5HIgc2F0dCAobORnZyB0aWxsICEgZvZyIGF0dCB0dmluZ2EpIgorCisjOiBnbG9iYWxzLmg6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDY6IENhbm5vdCBzZXQgcmVhZC1vbmx5IHZhcmlhYmxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ2OiBLYW4gaW50ZSBz5HR0YSBza3JpdnNreWRkYWQgdmFyaWFiZWwgXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTI4NQorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0NzogRmVsIHZpZCBs5HNuaW5nIGF2IGZlbGZpbCIKKworIzogZ2xvYmFscy5oOjEyODgKK21zZ2lkICJFNDg6IE5vdCBhbGxvd2VkIGluIHNhbmRib3giCittc2dzdHIgIkU0ODogSW50ZSB0aWxs5XRldCBpIHNhbmRs5WRhIgorCisjOiBnbG9iYWxzLmg6MTI5MAorbXNnaWQgIkU1MjM6IE5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU1MjM6IEludGUgdGlsbOV0ZXQgaORyIgorCisjOiBnbG9iYWxzLmg6MTI5MworbXNnaWQgIkUzNTk6IFNjcmVlbiBtb2RlIHNldHRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTM1OTogU2vkcm1s5GdlIGluc3TkbGxuaW5nIGludGUgc3T2ZGQiCisKKyM6IGdsb2JhbHMuaDoxMjk1Cittc2dpZCAiRTQ5OiBJbnZhbGlkIHNjcm9sbCBzaXplIgorbXNnc3RyICJFNDk6IE9naWx0aWcgcnVsbG5pbmdzc3RvcmxlayIKKworIzogZ2xvYmFscy5oOjEyOTYKK21zZ2lkICJFOTE6ICdzaGVsbCcgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJFOTE6ICdzaGVsbCcgZmxhZ2dhIORyIHRvbSIKKworIzogZ2xvYmFscy5oOjEyOTgKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IEt1bmRlIGludGUgbORzYSBpbiB0ZWNrZW5kYXRhISIKKworIzogZ2xvYmFscy5oOjEzMDAKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiBTdORuZ25pbmdzZmVsIHDlIHbkeGxpbmdzZmlsIgorCisjOiBnbG9iYWxzLmg6MTMwMQorbXNnaWQgIkU3MzogdGFnIHN0YWNrIGVtcHR5IgorbXNnc3RyICJFNzM6IHRhZ2dzdGFjayB0b20iCisKKyM6IGdsb2JhbHMuaDoxMzAyCittc2dpZCAiRTc0OiBDb21tYW5kIHRvbyBjb21wbGV4IgorbXNnc3RyICJFNzQ6IEtvbW1hbmRvIGb2ciBrb21wbGV4dCIKKworIzogZ2xvYmFscy5oOjEzMDMKK21zZ2lkICJFNzU6IE5hbWUgdG9vIGxvbmciCittc2dzdHIgIkU3NTogTmFtbiBm9nIgbOVuZ3QiCisKKyM6IGdsb2JhbHMuaDoxMzA0Cittc2dpZCAiRTc2OiBUb28gbWFueSBbIgorbXNnc3RyICJFNzY6IEb2ciBt5W5nYSBbIgorCisjOiBnbG9iYWxzLmg6MTMwNQorbXNnaWQgIkU3NzogVG9vIG1hbnkgZmlsZSBuYW1lcyIKK21zZ3N0ciAiRTc3OiBG9nIgbeVuZ2EgZmlsbmFtbiIKKworIzogZ2xvYmFscy5oOjEzMDYKK21zZ2lkICJFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJFNDg4OiBFZnRlcnNs5HBhbmRlIHRlY2tlbiIKKworIzogZ2xvYmFscy5oOjEzMDcKK21zZ2lkICJFNzg6IFVua25vd24gbWFyayIKK21zZ3N0ciAiRTc4OiBPa+RudCBt5HJrZSIKKworIzogZ2xvYmFscy5oOjEzMDgKK21zZ2lkICJFNzk6IENhbm5vdCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICJFNzk6IEthbiBpbnRlIGV4cGFuZGVyYSBqb2tlcnRlY2tlbiIKKworIzogZ2xvYmFscy5oOjEzMTAKK21zZ2lkICJFNTkxOiAnd2luaGVpZ2h0JyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW5oZWlnaHQnIgorbXNnc3RyICJFNTkxOiAnd2luaGVpZ2h0JyBrYW4gaW50ZSB2YXJhIG1pbmRyZSDkbiAnd2lubWluaGVpZ2h0JyIKKworIzogZ2xvYmFscy5oOjEzMTIKK21zZ2lkICJFNTkyOiAnd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiRTU5MjogJ3dpbndpZHRoJyBrYW4gaW50ZSB2YXJhIG1pbmRyZSDkbiAnd2lubWlud2lkdGgnIgorCisjOiBnbG9iYWxzLmg6MTMxNQorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiBGZWwgdmlkIHNrcml2bmluZyIKKworIzogZ2xvYmFscy5oOjEzMTYKK21zZ2lkICJaZXJvIGNvdW50IgorbXNnc3RyICJOb2xsLWzkbmdkIgorCisjOiBnbG9iYWxzLmg6MTMxOAorbXNnaWQgIkU4MTogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQiCittc2dzdHIgIkU4MTogQW525G5kZXIgaW50ZSA8U0lEPiBpIGV0dCBza3JpcHRzYW1tYW5oYW5nIgorCisjOiBnbG9iYWxzLmg6MTMyMQorbXNnaWQgIkU0NDk6IEludmFsaWQgZXhwcmVzc2lvbiByZWNlaXZlZCIKK21zZ3N0ciAiRTQ0OTogT2dpbHRpZ3QgdXR0cnljayBtb3R0YWdldCIKKworIzogZ2xvYmFscy5oOjEzMjQKK21zZ2lkICJFNDYzOiBSZWdpb24gaXMgZ3VhcmRlZCwgY2Fubm90IG1vZGlmeSIKK21zZ3N0ciAiRTQ2MzogUmVnaW9uIORyIHZha3RhZCwga2FuIGludGUgbW9kaWZpZXJhIgorCisjfiBtc2dpZCAiRTg2OiBDYW5ub3QgZ28gdG8gYnVmZmVyICVsZCIKKyN+IG1zZ3N0ciAiRTg1OiBLYW4gaW50ZSBn5SB0aWxsIGJ1ZmZlcnQgJWxkIgpkaWZmIC0tZ2l0IGEvc3JjL3BvL3VrLnBvIGIvc3JjL3BvL3VrLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MjIzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vdWsucG8KQEAgLTAsMCArMSw2MjI1IEBACisjCisjIFVrcmFpbmlhbiBWaW0gdHJhbnNsYXRpb24gW3VrXQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDEgQm9oZGFuIFZsYXN5dWsgPGJvaGRhbkB2c3R1LmVkdS51YT4KKyMKKyMgVGhhbmtzIHRvOgorIyAgIERteXRybyBLb3ZhbG92IDxkbXl0cm8ua292YWxvdkBuc3NtYi5jb20+IGZvciB1c2VmdWwgc3VnZ2VzdGlvbnMKKyMJRG15dHJvIE8uIFJlZGNodWsgPGRvckBraWV2LW9ubGluZS5uZXQ+IGZvciB2aW1pbmZvIGJ1ZworIworIyBQbGVhc2UsIHNlZSByZWFkbWUgYXQgaHRwcDovL3d3dy52c3R1LmVkdS51YS9+Ym9oZGFuL3ZpbSBiZWZvcmUgYW55CisjIGNvbXBsYWlucywgYW5kIGV2ZW4gaWYgeW91IHdvbid0IGNvbXBsYWluLCByZWFkIGl0IGFueXdheS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHZpbSA2LjBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwMi0wMS0xMCAwOTowMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMS0xMC0xNiAxMzozNCswMzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBCb2hkYW4gVmxhc3l1ayA8Ym9oZGFuQHZzdHUuZWR1LnVhPlxuIgorIkxhbmd1YWdlLVRlYW06IEJvaGRhbiBWbGFzeXVrIDxib2hkYW5AdnN0dS5lZHUudWE+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9a29pOC11XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBidWZmZXIuYzo5NworbXNnaWQgIkU4MjogQ2Fubm90IGFsbG9jYXRlIGFueSBidWZmZXIsIGV4aXRpbmcuLi4iCittc2dzdHIgIkU4Mjog7sXNwaQgzc/WzMnXz9PUpiDSz9rNptPUydTJIMjP3iDPxMnOIMLVxsXSLCDawdfF0tvFzs7RINLPws/UyS4uLiIKKworIzogYnVmZmVyLmM6MTAwCittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4Mzog7sXNwaQgzc/WzMnXz9PUpiDSz9rNptPUydTJIMLVxsXSLCDC1cTFINfJy8/SydPUwc7PIKbO28nKLi4uIgorCisjOiBidWZmZXIuYzo2OTgKK21zZ2lkICJObyBidWZmZXJzIHdlcmUgdW5sb2FkZWQiCittc2dzdHIgIvbPxMXOINogwtXGxdKm1yDOxSDC1dcg18nXwc7UwdbFzsnKIgorCisjOiBidWZmZXIuYzo3MDAKK21zZ2lkICJObyBidWZmZXJzIHdlcmUgZGVsZXRlZCIKK21zZ3N0ciAi9s/Exc4g2iDC1cbF0qbXIM7FIMLV1yDXycTBzMXOycoiCisKKyM6IGJ1ZmZlci5jOjcwMgorbXNnaWQgIk5vIGJ1ZmZlcnMgd2VyZSB3aXBlZCBvdXQiCittc2dzdHIgIvbPxMXOINogwtXGxdKm1yDOxSDC1dcg18nUxdLUycoiCisKKyM6IGJ1ZmZlci5jOjcxMAorbXNnaWQgIjEgYnVmZmVyIHVubG9hZGVkIgorbXNnc3RyICL3ydfBztTB1sXOzyDPxMnOIMLVxsXSIgorCisjOiBidWZmZXIuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB1bmxvYWRlZCIKK21zZ3N0ciAi98nXwc7UwdbFzs8gwtXGxdKm1yAtLSAlZCIKKworIzogYnVmZmVyLmM6NzE3Cittc2dpZCAiMSBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAi98nEwczFzs8gz8TJziDC1cbF0iIKKworIzogYnVmZmVyLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgZGVsZXRlZCIKK21zZ3N0ciAi98nEwczFzs8gwtXGxdKm1yAtLSAlZCIKKworIzogYnVmZmVyLmM6NzI0Cittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICL3ydTF0tTPIM/Eyc4gwtXGxdIiCisKKyM6IGJ1ZmZlci5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHdpcGVkIG91dCIKK21zZ3N0ciAi98nUxdLUzyDC1cbF0qbXIC0tICVkIgorCisjOiBidWZmZXIuYzo3ODMKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiD2z8TFziDC1cbF0iDOxSDazabOxc7PIgorCisjLiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorIzogYnVmZmVyLmM6ODIyCittc2dpZCAiRTg1OiBUaGVyZSBpcyBubyBsaXN0ZWQgYnVmZmVyIgorbXNnc3RyICJFODU6IPUg09DJ08vVIM7FzcGkIMLVxsXSptciCisKKyM6IGJ1ZmZlci5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFODY6IENhbm5vdCBnbyB0byBidWZmZXIgJWxkIgorbXNnc3RyICJFODY6IO7FIM3P1tUg0MXSxcrUySDXIMLVxsXSICVsZCIKKworIzogYnVmZmVyLmM6ODM3Cittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6IO7FIM3P1tUg0MXSxcrUySDVIM7B09TV0M7JyiDC1cbF0iDaIM/T1MHOztjPx88iCisKKyM6IGJ1ZmZlci5jOjgzOQorbXNnaWQgIkU4ODogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBidWZmZXIiCittc2dzdHIgIkU4ODog7sUgzc/W1SDQxdLFytTJINUg0M/QxdLFxM6myiDC1cbF0iDaINDF0tvPx88iCisKKyM6IGJ1ZmZlci5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJFODk6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgJWxkICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIiIKKyJFODk6IOLVxsXSICVsZCDOxSDawdDJ08HOycog0KbTzNEgz9PUwc7O2M+nINrNps7JICjXycvP0snT1MHK1MUgISDdz8IgzsUgIgorItrXwdbB1MkpIgorCisjOiBidWZmZXIuYzo4NzkKK21zZ2lkICJFOTA6IENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU5MDog7sUgzc/W1SDXydfBztTB1snUySDP09TBzs6myiDC1cbF0iIKKworIzogYnVmZmVyLmM6MTMxNAorbXNnaWQgIlcxNDogV2FybmluZzogTGlzdCBvZiBmaWxlIG5hbWVzIG92ZXJmbG93IgorbXNnc3RyICJXMTQ6IO/CxdLF1s7POiDz0MnTz8sgps3FziDGwcrMptcg0MXSxdDP187Fzs8iCisKKyM6IGJ1ZmZlci5jOjE0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkyOiBCdWZmZXIgJWxkIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTkyOiDi1cbF0iAlbGQgzsUg2s7BysTFzs8iCisKKyM6IGJ1ZmZlci5jOjE3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkzOiBNb3JlIHRoYW4gb25lIG1hdGNoIGZvciAlcyIKK21zZ3N0ciAiRTkzOiD6zsHKxMXOzyDCpszY28UgzqbWIM/Eyc4g18HSpsHO1CDEzNEgJXMiCisKKyM6IGJ1ZmZlci5jOjE3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIgorbXNnc3RyICJFOTQ6IO7FINrOwcrExc7PINfB0qbBztSm1yDEzNEgJXMiCisKKyM6IGJ1ZmZlci5jOjIxMDUgZXhfZG9jbWQuYzo2MDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIgorbXNnc3RyICLS0cTPyyAlbGQiCisKKyM6IGJ1ZmZlci5jOjIxODgKK21zZ2lkICJFOTU6IEJ1ZmZlciB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTk1OiDi1cbF0iDaINTBy8/AIM7B2tfPwCDV1sUgptPO1aQiCisKKyM6IGJ1ZmZlci5jOjI0ODEKK21zZ2lkICIgW01vZGlmaWVkXSIKK21zZ3N0ciAiW/rNps7Fzs9dIgorCisjOiBidWZmZXIuYzoyNDg2Cittc2dpZCAiW05vdCBlZGl0ZWRdIgorbXNnc3RyICJb7sUgwtXMzyDSxcTBx8/Xwc7PXSIKKworIzogYnVmZmVyLmM6MjQ5MQorbXNnaWQgIltOZXcgZmlsZV0iCittc2dzdHIgIlvuz9fJyiDGwcrMXSIKKworIzogYnVmZmVyLmM6MjQ5MgorbXNnaWQgIltSZWFkIGVycm9yc10iCittc2dzdHIgIlvwz83JzMvBINreydTV18HOztFdIgorCisjOiBidWZmZXIuYzoyNDk0IGZpbGVpby5jOjE3NTQKK21zZ2lkICJbcmVhZG9ubHldIgorbXNnc3RyICJbzMnbxSDeydTB1MldIgorCisjOiBidWZmZXIuYzoyNTEwCittc2dpZCAiMSBsaW5lIC0tJWQlJS0tIgorbXNnc3RyICLPxMnOINLRxM/LIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNTEwCittc2dpZCAiJWxkIGxpbmVzIC0tJWQlJS0tIgorbXNnc3RyICIo0tHEy6bXOiAlbGQpIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNTE4Cittc2dpZCAibGluZSAlbGQgb2YgJWxkIC0tJWQlJS0tIGNvbCAiCittc2dzdHIgItLRxM/LICVsZCDaICVsZCAtLSVkJSUtLSDLz8zPzsvBIgorCisjOiBidWZmZXIuYzoyNjA2Cittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJb7s/XycogxsHKzF0iCisKKyMuIG11c3QgYmUgYSBoZWxwIGJ1ZmZlcgorIzogYnVmZmVyLmM6MjY0NgorbXNnaWQgImhlbHAiCittc2dzdHIgIsTP0M/Nz8fBIgorCisjOiBidWZmZXIuYzozMTUxIHNjcmVlbi5jOjQ2OTEKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIlvEz9DPzc/HwV0iCisKKyM6IGJ1ZmZlci5jOjMxODMgc2NyZWVuLmM6NDY5NworbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW9DF0sXHzNHEXSIKKworIzogYnVmZmVyLmM6MzM4OQorbXNnaWQgIkFsbCIKK21zZ3N0ciAi9dPFIgorCisjOiBidWZmZXIuYzozMzg5Cittc2dpZCAiQm90IgorbXNnc3RyICL1zsna1SIKKworIzogYnVmZmVyLmM6MzM5MQorbXNnaWQgIlRvcCIKK21zZ3N0ciAi98fP0qYiCisKKyM6IGJ1ZmZlci5jOjQxMjcKK21zZ2lkICIiCisiXG4iCisiIyBCdWZmZXIgbGlzdDpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMg89DJ08/LIMLVxsXSptc6XG4iCisKKyM6IGJ1ZmZlci5jOjQxNjAKK21zZ2lkICJbRXJyb3IgTGlzdF0iCittc2dzdHIgIlvz0MnTz8sg0M/NyczPy10iCisKKyM6IGJ1ZmZlci5jOjQxNzMgbWVtbGluZS5jOjE1MTMKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIlvuz9fJyiDGwcrMXSIKKworIzogYnVmZmVyLmM6NDM5MworbXNnaWQgIiIKKyJcbiIKKyItLS0gU2lnbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIPrOwcvJIC0tLSIKKworIzogYnVmZmVyLmM6NDQwMworIywgYy1mb3JtYXQKK21zZ2lkICJTaWducyBmb3IgJXM6IgorbXNnc3RyICL6zsHLySDEzNEgJXM6IgorCisjOiBidWZmZXIuYzo0NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBsaW5lPSVsZCAgaWQ9JWQgIG5hbWU9JXMiCittc2dzdHIgIiAgICDS0cTPyz0lbGQgIGlkPSVkIKbNJ9E9JXMiCisKKyM6IGRpZmYuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6IO7FIM3P1tUg0M/SptfOwNfB1Mkg0M/OwcQgJWxkIMLVxsXSptcgIgorCisjOiBkaWZmLmM6NjQ4Cittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6IO7Fzc/WzsEg09TXz9LJ1MkgZGlmZifJIgorCisjOiBkaWZmLmM6NzQ3Cittc2dpZCAiUGF0Y2ggZmlsZSIKK21zZ3N0ciAicGF0Y2gtxsHKzCIKKworIzogZGlmZi5jOjk5MQorbXNnaWQgIkU5ODogQ2Fubm90IHJlYWQgZGlmZiBvdXRwdXQiCittc2dzdHIgIkU5ODog7sUgzc/W1SDa3snUwdTJINLF2tXM2NTB1CBkaWZmJ9UiCisKKyM6IGRpZmYuYzoxNzA0Cittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IOPFyiDC1cbF0iDOxSDXINLF1snNpiBkaWZmIgorCisjOiBkaWZmLmM6MTcxNgorbXNnaWQgIkUxMDA6IE5vIG90aGVyIGJ1ZmZlciBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDA6IO7FzcHFIKbO28nIIMLVxsXSptcg1yDSxdbJzaYgZGlmZiIKKworIzogZGlmZi5jOjE3MjQKK21zZ2lkICJFMTAxOiBNb3JlIHRoYW4gdHdvIGJ1ZmZlcnMgaW4gZGlmZiBtb2RlLCBkb24ndCBrbm93IHdoaWNoIG9uZSB0byB1c2UiCittc2dzdHIgIiIKKyJFMTAxOiDwz87BxCDE18EgwtXGxdLBINrOwcjPxNHU2NPRINcg0sXWyc2mIGRpZmYsIM7FINrSz9rVzabMzyDRy8nKINogzsnIICIKKyLXycvP0snT1MHUySIKKworIzogZGlmZi5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwMjogQ2FuJ3QgZmluZCBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTAyOiDi1cbF0iBcIiVzXCIgzsUg2s7BysTFzs8iCisKKyM6IGRpZmYuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzog4tXGxdIgXCIlc1wiIM7FINcg0sXWyc2mIGRpZmYiCisKKyM6IGRpZ3JhcGguYzoyMTY4Cittc2dpZCAiRTEwNDogRXNjYXBlIG5vdCBhbGxvd2VkIGluIGRpZ3JhcGgiCittc2dzdHIgIkUxMDQ6IPUgxMnH0sHGwcggzsUgzc/WxSDNptPUydTJ09EgRXNjYXBlIgorCisjOiBkaWdyYXBoLmM6MjM0MAorbXNnaWQgIktleW1hcCBmaWxlIG5vdCBmb3VuZCIKK21zZ3N0ciAi5sHKzCDSz9rLzMHEy8kgy8zB16bB1NXSySDOxSDazsHKxMXOzyIKKworIzogZGlncmFwaC5jOjIzNjcKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IPfJy8/SydPUwc7O0SA6bG9hZGtleW1hcCDOxSDXIMbBysymIMvPzcHOxCIKKworIzogZWRpdC5jOjQwCittc2dpZCAiIEtleXdvcmQgY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIg5M/Qz9fOxc7O0SDLzMDez9fJyCDTzKbXICheTi9eUCkiCisKKyMuIGN0cmxfeF9tb2RlID09IDAsIF5QL15OIGNvbXBsLgorIzogZWRpdC5jOjQxCittc2dpZCAiIF5YIG1vZGUgKF5FL15ZL15ML15dL15GL15JL15LL15EL15WL15OL15QKSIKK21zZ3N0ciAiIPLF1snNIF5YICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eVi9eTi9eUCkiCisKKyMuIFNjcm9sbCBoYXMgaXQncyBvd24gbXNncywgaW4gaXQncyBwbGFjZSB0aGVyZSBpcyB0aGUgbXNnIGZvciBsb2NhbAorIy4gKiBjdHJsX3hfbW9kZSA9IDAgKGVnIGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfTE9DQUwpICAtLSBBY2V2ZWRvCisjOiBlZGl0LmM6NDQKK21zZ2lkICIgS2V5d29yZCBMb2NhbCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiDkz9fF0tvFzs7RIM2m08PF18nIIMvMwN7P18nIINPMptcgKF5OL15QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkwvXk4vXlApIgorbXNnc3RyICIg5M/XxdLbxc7O0SDV09jPx88g0tHEy8EgKF5ML15OL15QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRi9eTi9eUCkiCittc2dzdHIgIiDkz9fF0tvFzs7RIKbNxc6mIMbByszBICheRi9eTi9eUCkiCisKKyM6IGVkaXQuYzo0NworbXNnaWQgIiBUYWcgY29tcGxldGlvbiAoXl0vXk4vXlApIgorbXNnc3RyICIg5M/XxdLbxc7O0SDQz82m1M/LICheXS9eTi9eUCkiCisKKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIg5M/XxdLbxc7O0SDbzNHI1SDawSDa0sHay8/NICheTi9eUCkiCisKKyM6IGVkaXQuYzo0OQorbXNnaWQgIiBEZWZpbml0aW9uIGNvbXBsZXRpb24gKF5EL15OL15QKSIKK21zZ3N0ciAiIOTP18XS28XOztEg18nazsHexc7O0SAoXkQvXk4vXlApIgorCisjOiBlZGl0LmM6NTEKK21zZ2lkICIgRGljdGlvbmFyeSBjb21wbGV0aW9uICheSy9eTi9eUCkiCittc2dzdHIgIiDkz9fF0tvFzs7RINog08zP187Jy8EgKF5LL15OL15QKSIKKworIzogZWRpdC5jOjUyCittc2dpZCAiIFRoZXNhdXJ1cyBjb21wbGV0aW9uICheVC9eTi9eUCkiCittc2dzdHIgIiDkz9fF0tvFzs7RINogpsTFz8fSwc3B1Mnezs/HzyDTzM/XzsnLwSAoXlQvXk4vXlApIgorCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WL15OL15QKSIKK21zZ3N0ciAiIOTP18XS28XOztEgy8/Nwc7EICheVi9eTi9eUCkiCisKKyM6IGVkaXQuYzo1NgorbXNnaWQgIkhpdCBlbmQgb2YgcGFyYWdyYXBoIgorbXNnc3RyICLkz9PRx87V1M8gy6bOxcPYINDB0sHH0sHGwSIKKworIzogZWRpdC5jOjg5OQorbXNnaWQgIid0aGVzYXVydXMnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiz9DDptEgJ3RoZXNhdXJ1cycg0NXT1MEiCisKKyM6IGVkaXQuYzoxMDc1Cittc2dpZCAiJ2RpY3Rpb25hcnknIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAiz9DDptEgJ2RpY3Rpb25hcnknINDV09TBIgorCisjOiBlZGl0LmM6MTk5NworIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAi2t7J1NXFzc8gxMnSxcvUz9KmwDogJXMiCisKKyM6IGVkaXQuYzoyMTg4Cittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKNfT1MHXy8EpIPrT1dcgKF5FL15ZKSIKKworIzogZWRpdC5jOjIxOTAKK21zZ2lkICIgKHJlcGxhY2UpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKNrBzabOwSkg+tPV1yAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIvDP29XLINU6ICVzIgorCisjOiBlZGl0LmM6MjUzNgorbXNnaWQgIlNjYW5uaW5nIHRhZ3MuIgorbXNnc3RyICLwz9vVyyDTxdLFxCDQz82m1M/LLiIKKworIzogZWRpdC5jOjMxOTQKK21zZ2lkICIgQWRkaW5nIgorbXNnc3RyICIg5M/EwaTNzyIKKworIy4gc2hvd21vZGUgbWlnaHQgcmVzZXQgdGhlIGludGVybmFsIGxpbmUgcG9pbnRlcnMsIHNvIGl0IG11c3QKKyMuICogYmUgY2FsbGVkIGJlZm9yZSBsaW5lID0gbWxfZ2V0KCksIG9yIHdoZW4gdGhpcyBhZGRyZXNzIGlzIG5vCisjLiAqIGxvbmdlciBuZWVkZWQuICAtLSBBY2V2ZWRvLgorIy4KKyM6IGVkaXQuYzozMjQzCittc2dpZCAiLS0gU2VhcmNoaW5nLi4uIgorbXNnc3RyICItLSDwz9vVyy4uLiIKKworIzogZWRpdC5jOjMyOTkKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICLuwdrBxCDEzyDQz97B1MvP18/HzyDXwdKmwc7U1SIKKworIzogZWRpdC5jOjMzMDQKK21zZ2lkICJXb3JkIGZyb20gb3RoZXIgbGluZSIKK21zZ3N0ciAi88zP188g2iCmztvPx88g0tHEy8EiCisKKyM6IGVkaXQuYzozMzA5Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIuXEyc7JyiDXwdKmwc7UIgorCisjOiBlZGl0LmM6MzM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtYXRjaCAlZCBvZiAlZCIKK21zZ3N0ciAiINfB0qbBztQgJWQg2iAlZCIKKworIzogZWRpdC5jOjMzNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgItfB0qbBztQgJWQiCisKKyM6IGV2YWwuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNjogVW5rbm93biB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA2OiDuxdemxM/NwSDazabOzsE6IFwiJXNcIiIKKworIzogZXZhbC5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA3OiBNaXNzaW5nIGJyYWNlczogJXMiCittc2dzdHIgIkUxMDc6IO7FzcHFIMTV1s/LOiAlcyIKKworIzogZXZhbC5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiD6zabOzsEgzsUgptPO1aQ6IFwiJXNcIiIKKworIzogZXZhbC5jOjEyODQKK21zZ2lkICJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciCittc2dzdHIgIkUxMDk6IO7FzcHFICc6JyDQptPM0SAnPyciCisKKyM6IGV2YWwuYzoxODk4Cittc2dpZCAiRTExMDogTWlzc2luZyAnKSciCittc2dzdHIgIkUxMTA6IO7FzcGkICcpJyIKKworIzogZXZhbC5jOjE5NDgKK21zZ2lkICJFMTExOiBNaXNzaW5nICddJyIKK21zZ3N0ciAiRTExMTog7sXNwaQgJ10nIgorCisjOiBldmFsLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTEyOiBPcHRpb24gbmFtZSBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiRTExMjog7sXNwaQgzsHa18kgz9DDpqc6ICVzIgorCisjOiBldmFsLmM6MjA0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEzOiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUxMTM6IO7F16bEz83BIM/Qw6bROiAlcyIKKworIzogZXZhbC5jOjIxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IO7FINfJ09TB3sGkIMzB0MvJOiAlcyIKKworIzogZXZhbC5jOjIyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNTogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTU6IPfU0sHexc7JyiDTyc3Xz8wgJ1wiJzogJXMiCisKKyM6IGV2YWwuYzoyNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTExNjog7sXXptLOpiDB0sfVzcXO1MkgxMzRIMbVzsvDpqcgJXMiCisKKyM6IGV2YWwuYzoyNTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiDuxdemxM/NwSDG1c7Lw6bROiAlcyIKKworIzogZXZhbC5jOjI1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExODogVG9vIG1hbnkgYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTg6IPrBwsHHwdTPIMHSx9XNxc7UptcgxMzRIMbVzsvDpqcgJXMiCisKKyM6IGV2YWwuYzoyNTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTk6IPrBzcHMzyDB0sfVzcXO1KbXIMTM0SDG1c7Lw6anICVzIgorCisjOiBldmFsLmM6MjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIwOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dDogJXMiCittc2dzdHIgIkUxMjA6IDxTSUQ+INfJy8/SydPUz9fVpNTY09EgzsUg1SDGwcrMpiDLz83BzsQ6ICVzIgorCisjOiBldmFsLmM6MzU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIrLSVzJTNsZCBsaW5lczogIgorbXNnc3RyICIrLSVzJTNsZDogIgorCisjOiBldmFsLmM6NDY5MAorbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJk8658HSwdrEXG4iCisiJkM696bEzabOwSIKKworIzogZXZhbC5jOjU1MTQKK21zZ2lkICJFMjQwOiBObyBjb25uZWN0aW9uIHRvIFZpbSBzZXJ2ZXIiCittc2dzdHIgIkUyNDA6IO7FzcGkINonpMTOwc7O0SDaIFZpbS3TxdLXxdLPzSIKKworIzogZXZhbC5jOjU2MDQKK21zZ2lkICJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIKK21zZ3N0ciAiRTI3Nzog7sUgzc/W1SDa3snUwdTJINemxNDP16bE2CDTxdLXxdLBIgorCisjOiBldmFsLmM6NTYyOQorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODog7sUgzc/W1SDT0KbMy9XXwdTJ09Egy8ympM7Uz80iCisKKyM6IGV2YWwuYzo1NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiDuxSDNz9bVINPQpszL1dfB1MnT0SDaICVzIgorCisjOiBldmFsLmM6NTc2OAorbXNnaWQgIihJbnZhbGlkKSIKK21zZ3N0ciAiKO7Fzc/WzMnXzykiCisKKyM6IGV2YWwuYzo2NzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogJXMiCittc2dzdHIgIkUxMjE6IO7F18nazsHexc7BINrNps7OwTogJXMiCisKKyM6IGV2YWwuYzo3NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjI6IEZ1bmN0aW9uICVzIGFscmVhZHkgZXhpc3RzLCB1c2UgISB0byByZXBsYWNlIgorbXNnc3RyICJFMTIyOiDm1c7Lw6bRICVzINXWxSCm087VpCAo18nLz9LJ09TBytTFICEg3c/CINrBzabOydTJKSIKKworIzogZXZhbC5jOjc1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMzogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEyMzog7sXXydrOwd7FzsEgxtXOy8Om0TogJXMiCisKKyM6IGV2YWwuYzo3NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjQ6IE1pc3NpbmcgJygnOiAlcyIKK21zZ3N0ciAiRTEyNDog4tLBy9WkICcoJzogJXMiCisKKyM6IGV2YWwuYzo3NTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiDuxcTP2tfPzMXOycogwdLH1c3FztQ6ICVzIgorCisjOiBldmFsLmM6NzY0MgorbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiDi0sHL1aQgOmVuZGZ1bmN0aW9uIgorCisjOiBldmFsLmM6NzcyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzog7sUgzc/W1SDawc2mzsnUySDG1c7Lw6bAICVzOiD3z87BINfJy8/SydPUz9fVpNTY09EiCisKKyM6IGV2YWwuYzo3Nzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6IO7B2tfBIMbVzsvDpqcgzcGkINDP3snOwdTJ0SDaINfFzMnLz6cgzKbUxdLJOiAlcyIKKworIzogZXZhbC5jOjc3ODQKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiDuxSDXy8Hawc7BIM7B2tfBIMbVzsvDpqciCisKKyM6IGV2YWwuYzo3ODc3Cittc2dpZCAiZnVuY3Rpb24gIgorbXNnc3RyICLG1c7Lw6bRICIKKworIzogZXZhbC5jOjc5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMDogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEzMDog7sXXydrOwd7FzsEgxtXOy8Om0TogJXMiCisKKyM6IGV2YWwuYzo3OTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzE6IENhbm5vdCBkZWxldGUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEzMTog7sUgzc/W1SDXycTBzMnUySDG1c7Lw6bAICVzOiD3z87BINfJy8/SydPUz9fVpNTY09EiCisKKyM6IGV2YWwuYzo4MDQ0Cittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiRTEzMjog58zJwsnOwSDXycvMycum1yDG1c7Lw6anINDF0sXXyd3VpCAnbWF4ZnVuY2RlcHRoJyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYWxsaW5nICVzIgorbXNnc3RyICLXycvMycvBpNTY09EgJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjgxMjAgZXhfY21kczIuYzoxOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbnRpbnVpbmcgaW4gJXMiCittc2dzdHIgItDSz8TP19bFzs7RINcgJXMiCisKKyM6IGV2YWwuYzo4MTc0Cittc2dpZCAiRTEzMzogOnJldHVybiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxMzM6IDpyZXR1cm4g0M/awSDNxdbBzckgxtXOy8OmpyIKKworIzogZXZhbC5jOjgyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgIiVzINDP18XS1MGkICMlbGQiCisKKyM6IGV2YWwuYzo4MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyBcIiVzXCIiCittc2dzdHIgIiVzINDP18XS1MGkIFwiJXNcIiIKKworIzogZXZhbC5jOjgzOTYKK21zZ2lkICIiCisiXG4iCisiIyBnbG9iYWwgdmFyaWFibGVzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDawcfBzNjOpiDazabOzqY6XG4iCisKKyM6IGV4X2NtZHMyLmM6NzAKK21zZ2lkICJFbnRlcmluZyBEZWJ1ZyBtb2RlLiAgVHlwZSBcImNvbnRcIiB0byBsZWF2ZS4iCittc2dzdHIgIvDP3sHUz8sg0sXWyc3VIM7BzMHHz8TW1dfBzs7RLiD3ycvP0snT1M/X1crUxSBcImNvbnRcIiDEzNEg18nIz8TVLiIKKworIzogZXhfY21kczIuYzo3NCBleF9kb2NtZC5jOjc3MAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogJXMiCittc2dzdHIgItLRxM/LICVsZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY21kOiAlcyIKK21zZ3N0ciAiy8/Nwc7EwTogJXMiCisKKyM6IGV4X2NtZHMyLmM6MjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyZWFrcG9pbnQgaW4gXCIlcyVzXCIgbGluZSAlbGQiCittc2dzdHIgIvrV0MnOy8Eg1yBcIiVzJXNcIiDS0cTPyyAlbGQiCisKKyM6IGV4X2NtZHMyLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjE6IEJyZWFrcG9pbnQgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTE2MTog9M/ey9Ug2tXQyc7LySDOxSDazsHKxMXOzzogJXMiCisKKyM6IGV4X2NtZHMyLmM6NDE0Cittc2dpZCAiTm8gYnJlYWtwb2ludHMgZGVmaW5lZCIKK21zZ3N0ciAi9s/Ezs+nINTP3svJINrV0MnOy8kgzsUgwtXMzyDXydrOwd7Fzs8iCisKKyM6IGV4X2NtZHMyLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUzZCAgJXMgJXMgIGxpbmUgJWxkIgorbXNnc3RyICIlM2QgJXMgJXMgICDS0cTPyyAlbGQiCisKKyM6IGV4X2NtZHMuYzoyMDUzIGV4X2NtZHMuYzoyMzEwIGV4X2NtZHMyLmM6NjAyCittc2dpZCAiU2F2ZSBBcyIKK21zZ3N0ciAi+sHQwc0n0dTB1Mkg0csiCisKKyM6IGV4X2NtZHMyLmM6NjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmUgY2hhbmdlcyB0byBcIiUuKnNcIj8iCittc2dzdHIgIvrB0MHNJ9HUwdTJINrNps7JINcgXCIlLipzXCI/IgorCisjOiBleF9jbWRzMi5jOjYyNyBleF9kb2NtZC5jOjg2NDYKK21zZ2lkICJVbnRpdGxlZCIKK21zZ3N0ciAi7sXOwdrXwc7JyiIKKworIzogZXhfY21kczIuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MjogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxNjI6IPbPxM7Px88g2sHQydPVINCm08zRIM/T1MHOztjPpyDazabOySDEzNEgwtXGxdLBIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo4MzIKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIiIKKyLvwsXSxdbOzzog7sXT0M/EptfBzs8g0M/U0sHQ1MzFzs8g1yCmztvJyiDC1cbF0iAo0MXSxdem0tTFIMHX1M/Lz83BzsTJKSIKKworIzogZXhfY21kczIuYzoxMjA4Cittc2dpZCAiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTYzOiDsydvFIM/Eyc4gxsHKzCDSxcTBx9Wk1NjT0SIKKworIzogZXhfY21kczIuYzoxMjEwCittc2dpZCAiRTE2NDogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBmaWxlIgorbXNnc3RyICJFMTY0OiDuxSDNz9bVINDF0sXK1Mkg1SDQz9DF0sXEzqbKIMbByswg2iDQxdLbz8fPIgorCisjOiBleF9jbWRzMi5jOjEyMTIKK21zZ2lkICJFMTY1OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgZmlsZSIKK21zZ3N0ciAiRTE2NTog7sUgzc/W1SDQxdLFytTJINUgzsHT1NXQzsnKIMbByswg2iDP09TBzs7Yz8fPIgorCisjIG1zZ3N0ciAiRTE5NTogIgorIzogZXhfY21kczIuYzoxNjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIGluIFwiJXNcIiIKK21zZ3N0ciAi8M/b1csgXCIlc1wiINcgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIvDP29XLIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiCittc2dzdHIgIlwiJXNcIiDOxSDazsHKxMXOzyDXICdydW50aW1lcGF0aCciCisKKyM6IGV4X2NtZHMyLmM6MTcxNAorbXNnaWQgIlJ1biBNYWNybyIKK21zZ3N0ciAi98nLz87B1MkgxsHKzCDLz83BzsQiCisKKyM6IGV4X2NtZHMyLmM6MTgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc291cmNlIGEgZGlyZWN0b3J5OiBcIiVzXCIiCittc2dzdHIgIu7FIM3P1tUg18nLz87B1MkgxMnSxcvUz9KmwDogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIs7Fzc/WzMnXzyDXycvPzsHUySBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgItLRxM/LICVsZDogzsXNz9bMydfPINfJy8/OwdTJIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxODc4CisjLCBjLWZvcm1hdAorbXNnaWQgInNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAi18nLz87VxdTY09EgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IHNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAi0tHEz8sgJWxkOiDXycvPztWk1NjT0SBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTk4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzb3VyY2luZyAlcyIKK21zZ3N0ciAi18nLz87Bzs7RICVzINrBy6bO3sXOzyIKKworIzogZXhfY21kczIuYzoyMjg3Cittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIlcxNTog7sXXptLOycog0s/axKbM2M7JyyDS0cTLptcsIM3P1szJ188gwtLBy9WkIF5NIgorCisjOiBleF9jbWRzMi5jOjIzMzYKK21zZ2lkICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY3OiA6c2NyaXB0ZW5jb2Rpbmcg18nLz9LJ09TBzs8g0M/awSDXycvPztXXwc7JzSDGwcrMz80iCisKKyM6IGV4X2NtZHMyLmM6MjM2OQorbXNnaWQgIkUxNjg6IDpmaW5pc2ggdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY4OiA6ZmluaXNoINfJy8/SydPUwc7PINDP2sEg18nLz87V18HOyc0gxsHKzM/NIgorCisjOiBleF9jbWRzMi5jOjI4MzUKK21zZ2lkICJObyB0ZXh0IHRvIGJlIHByaW50ZWQiCittc2dzdHIgIu6m3s/HzyDE0tXL1dfB1MkiCisKKyM6IGV4X2NtZHMyLmM6MjkxMworbXNnaWQgIlByaW50aW5nIHBhZ2UgJWQgKCVkJSUpIgorbXNnc3RyICLk0tXL1aTU2NPRINPUz9KmzsvBICVkICglZCkiCisKKyM6IGV4X2NtZHMyLmM6MjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgQ29weSAlZCBvZiAlZCIKK21zZ3N0ciAiIOvP0KbRICVkLCDV09jPx88gJWQiCisKKyM6IGV4X2NtZHMyLmM6Mjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGVkOiAlcyIKK21zZ3N0ciAi7sHE0tXLz9fBzs86ICVzIgorCisjOiBleF9jbWRzMi5jOjI5ODEKK21zZ2lkICJQcmludGluZyBhYm9ydGVkIgorbXNnc3RyICLk0tXLINDF0sXS18HOzyIKKworIzogZXhfY21kczIuYzozMzU5Cittc2dpZCAiRTQ1NTogRXJyb3Igd3JpdGluZyB0byBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFNDU1OiDuxSDNz9bVINDJ08HUySDXINfJyKbEzsnKIMbByswgUG9zdFNjcmlwIgorCisjOiBleF9jbWRzMi5jOjQwMzQKK21zZ2lkICJFMzI0OiBDYW4ndCBvcGVuIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkUzMjQ6IO7FIM3P1tUg16bEy9LJ1Mkg0csg18imxM7JyiDGwcrMIFBvc3RTY3JpcCIKKworIzogZXhfY21kczIuYzo0MDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTY6IO7FIM3P1tUg16bEy9LJ1MkgxsHKzCBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDA4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6IO7FIM3P1tUg2t7J1MHUySDGwcrMINLF09XS06bXIFBvc3RTY3JpcCBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDI4MQorbXNnaWQgIlNlbmRpbmcgdG8gcHJpbnRlci4uLiIKK21zZ3N0ciAi96bE08nMwaTNzyDOwSDE0tXLptfOycsuLi4iCisKKyM6IGV4X2NtZHMyLmM6NDI4NQorbXNnaWQgIkUzNjU6IEZhaWxlZCB0byBwcmludCBQb3N0U2NyaXB0IGZpbGUiCittc2dzdHIgIkUzMjQ6IO7FIM3P1tUgzsHE0tXL1dfB1MkgxsHKzCBQb3N0U2NyaXAiCisKKyM6IGV4X2NtZHMyLmM6NDI4NworbXNnaWQgIlByaW50IGpvYiBzZW50LiIKK21zZ3N0ciAi+sHXxMHOztEgxNLVy9Ug16bEptPMwc7PLiIKKworIzogZXhfY21kczIuYzo0NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICLtz9fBICglcyk6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTc6IENhbm5vdCBzZXQgbGFuZ3VhZ2UgdG8gXCIlc1wiIgorbXNnc3RyICJFMTk3OiDuxSDNz9bVINfT1MHOz9fJ1Mkgzc/X1SBcIiVzXCIiCisKKyM6IGV4X2NtZHMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iCittc2dzdHIgIjwlcz4lcyVzICAlZCwgINum0yAlMDJ4LCDXptMgJTAzbyIKKworIzogZXhfY21kcy5jOjQyOAorbXNnaWQgIkUxMzQ6IE1vdmUgbGluZXMgaW50byB0aGVtc2VsdmVzIgorbXNnc3RyICJFMTM0OiDuxc3P1szJ188g2s2m09TJ1Mkg0tHEy8kg08HNpiDVINPFwsUiCisKKyM6IGV4X2NtZHMuYzo0OTcKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgIjEg0tHEz8sg2s2m3cXOzyIKKworIzogZXhfY21kcy5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgbW92ZWQiCittc2dzdHIgIiVsZCDS0cTLptcg2s2m3cXOzyIKKworIzogZXhfY21kcy5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgZmlsdGVyZWQiCittc2dzdHIgIiVsZCDS0cTLptcg16bExqbM2NTSz9fBzs8iCisKKyM6IGV4X2NtZHMuYzo5MTgKK21zZ2lkICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMTM1OiDh19TPy8/Nwc7EySAqRmlsdGVyKiDOxSDQz9fJzs7YINrNps7A18HUySDC1cbF0iIKKworIzogZXhfY21kcy5jOjEwMDMKK21zZ2lkICJbTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2VdXG4iCittc2dzdHIgIlvuxSDawdDJ08HOzyDQptPM0SDP09TBzs7Yz6cg2s2mzsldXG4iCisKKyM6IGV4X2NtZHMuYzoxMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInZpbWluZm86ICVzIGluIGxpbmU6ICIKK21zZ3N0ciAidmltaW5mbzogJXMg1yDS0cTL1SIKKworIzogZXhfY21kcy5jOjEyNTMKK21zZ2lkICJFMTM2OiB2aW1pbmZvOiBUb28gbWFueSBlcnJvcnMsIHNraXBwaW5nIHJlc3Qgb2YgZmlsZSIKK21zZ3N0ciAiRTEzNjogdmltaW5mbzog2sHCwcfB1M8g0M/NyczPyywg0sXb1MEgxsHKzMEgz9DV3cXOzyIKKworIzogZXhfY21kcy5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiJXMlcyVzIgorbXNnc3RyICL63snU1aTU2NPRIMbByswgdmltaW5mbzogXCIlc1wiJXMlcyVzIgorCisjOiBleF9jbWRzLmM6MTI4MworbXNnaWQgIiBpbmZvIgorbXNnc3RyICIgps7Gz9LNwcOm0SIKKworIzogZXhfY21kcy5jOjEyODQKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiDQz9rOwd7LySIKKworIzogZXhfY21kcy5jOjEyODUKK21zZ2lkICIgRkFJTEVEIgorbXNnc3RyICIg7uUg9+Th7O/z8SIKKworIzogZXhfY21kcy5jOjEzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IPUgxsHKzCB2aW1pbmZvIChcIiVzXCIpINrB0MnTIM7FIMTP2tfPzMXOzyIKKworIzogZXhfY21kcy5jOjE1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzODogQ2FuJ3Qgd3JpdGUgdmltaW5mbyBmaWxlICVzISIKK21zZ3N0ciAiRTEzODog7sUgzc/W1SDawdDJ08HUySB2aW1pbmZvIMbByswgJXMhIgorCisjOiBleF9jbWRzLmM6MTUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiCittc2dzdHIgIvrB0MnT1aTU2NPRIHZpbWluZm8gxsHKzCBcIiVzXCIiCisKKyMuIFdyaXRlIHRoZSBpbmZvOgorIzogZXhfY21kcy5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIyBUaGlzIHZpbWluZm8gZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFZpbSAlcy5cbiIKK21zZ3N0ciAiIyDjxcogxsHKzCDB19TPzcHUyd7OzyDT1NfP0snXIFZpbSAlcy5cbiIKKworIzogZXhfY21kcy5jOjE2MTIKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiMg7c/WxdTFINLFxMHH1dfB1MksIMHMxSDv4uXy5fbu7yFcbiIKKworIzogZXhfY21kcy5jOjE2MTQKK21zZ2lkICIjIFZhbHVlIG9mICdlbmNvZGluZycgd2hlbiB0aGlzIGZpbGUgd2FzIHdyaXR0ZW5cbiIKK21zZ3N0ciAiIyD6zsHexc7O0SAnZW5jb2RpbmcnIMvPzMkgw8XKIMbByswgwtXMzyDawdDJ08HOz1xuIgorCisjOiBleF9jbWRzLmM6MTcxMworbXNnaWQgIklsbGVnYWwgc3RhcnRpbmcgY2hhciIKK21zZ3N0ciAi7sXEz9rXz8zFzsnKINPJzdfPzCDOwSDQz97B1MvVINLRxMvBIgorCisjLiBPdmVyd3JpdGluZyBhIGZpbGUgdGhhdCBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIgaXMgbm90IGEKKyMuICogZ29vZCBpZGVhLgorIzogZXhfY21kcy5jOjIwOTYKK21zZ2lkICJFMTM5OiBGaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciIKK21zZ3N0ciAiRTEzOTog5sHKzCDV1sUg2sHXwc7UwdbFzs8g1SCmztvPzdUgwtXGxdKmIgorCisjOiBleF9jbWRzLmM6MjEzMAorbXNnaWQgIldyaXRlIHBhcnRpYWwgZmlsZT8iCittc2dzdHIgIvrB0MnTwdTJIN7B09TJztUgxsHKzME/IgorCisjOiBleF9jbWRzLmM6MjEzNworbXNnaWQgIkUxNDA6IFVzZSAhIHRvIHdyaXRlIHBhcnRpYWwgYnVmZmVyIgorbXNnc3RyICJFMTQwOiD3ycvP0snT1M/X1crUxSAhIMTM0SDawdDJ09Ug3sHT1MnOySDC1cbF0sEiCisKKyM6IGV4X2NtZHMuYzoyMjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAi8MXSxdrB0MnTwdTJIKbTztXA3snKIMbByswgXCIlKi5zXCI/IgorCisjOiBleF9jbWRzLmM6MjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQxOiBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkUxNDE6IO7FzcGkINfIpsTOz8fPIMbByszBIMTM0SDC1cbF0sEgJWxkIgorCisjOiBleF9jbWRzLmM6MjM1MworbXNnaWQgIkUxNDI6IEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24iCittc2dzdHIgIkUxNDI6IObByswgzsUg2sHQydPBzs86INrB0MnTINrBws/Sz87Fzs8gz9DDpqTAICd3cml0ZSciCisKKyM6IGV4X2NtZHMuYzoyMzczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgZm9yIFwiJS4qc1wiLlxuIgorIkRvIHlvdSB3aXNoIHRvIHdyaXRlIGFueXdheT8iCittc2dzdHIgIiIKKyLkzNEgXCIlLipzXCIg18vB2sHOzyDP0MOmwCAncmVhZG9ubHknLlxuIgorIvfJINfTxSDdxSDCwdbBpNTFINDSz8TP19bJ1Mkg2sHQydM/IgorCisjOiBleF9jbWRzLmM6MjUzOAorbXNnaWQgIkVkaXQgRmlsZSIKK21zZ3N0ciAi8sXEwcfV18HUySDmwcrMIgorCisjOiBleF9jbWRzLmM6MzA2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQzOiBBdXRvY29tbWFuZHMgdW5leHBlY3RlZGx5IGRlbGV0ZWQgbmV3IGJ1ZmZlciAlcyIKK21zZ3N0ciAiRTE0Mzog4dfUz8vPzcHOxMEgzsXT0M/EptfBzs8g18nEwczJzMEgzs/XycogwtXGxdIgJXMiCisKKyM6IGV4X2NtZHMuYzozMTkzCittc2dpZCAiRTE0NDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gOnoiCittc2dzdHIgIkUxNDQ6IM7F3snTzM/XycogwdLH1c3FztQgxMzRIDp6IgorCisjOiBleF9jbWRzLmM6MzI3OAorbXNnaWQgIkUxNDU6IFNoZWxsIGNvbW1hbmRzIG5vdCBhbGxvd2VkIGluIHJ2aW0iCittc2dzdHIgIkUxNDU6IPUgcnZpbSDOxSDEz9rXz8zFzqYgy8/Nwc7EySBzaGVsbCIKKworIzogZXhfY21kcy5jOjMzODUKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiDa0sHay8kgzsUgzc/W1dTYIMLV1Mkg0s/axKbMxc6mIMym1MXSwc3JIgorCisjOiBleF9jbWRzLmM6MzcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHdpdGggJXMgKHkvbi9hL3EvbC9eRS9eWSk/IgorbXNnc3RyICL6wc2mzsnUySDOwSAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCisKKyM6IGV4X2NtZHMuYzo0MDg3Cittc2dpZCAiKEludGVycnVwdGVkKSAiCittc2dzdHIgIijwxdLF0tfBzs8pICIKKworIzogZXhfY21kcy5jOjQwOTEKK21zZ2lkICIxIHN1YnN0aXR1dGlvbiIKK21zZ3N0ciAi78TOwSDawc2mzsEiCisKKyM6IGV4X2NtZHMuYzo0MDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICL6wc2mzsXOzyAtLSAlbGQiCisKKyM6IGV4X2NtZHMuYzo0MDk2Cittc2dpZCAiIG9uIDEgbGluZSIKK21zZ3N0ciAiINcgz8TOz83VINLRxMvVIgorCisjOiBleF9jbWRzLmM6NDA5OAorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gJWxkIGxpbmVzIgorbXNnc3RyICIg1yAlbGQg0tHEy8HIIgorCisjOiBleF9jbWRzLmM6NDE0OQorbXNnaWQgIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE0NzogOmdsb2JhbCDOxSDNz9bFINfJy8/SydPUz9fV18HUydPYINLFy9XS08nXzs8iCisKKyM6IGV4X2NtZHMuYzo0MTg0Cittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IOLSwcvVpCDa0sHay8EgxMzRIGdsb2JhbCIKKworIzogZXhfY21kcy5jOjQyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0dGVybiBmb3VuZCBpbiBldmVyeSBsaW5lOiAlcyIKK21zZ3N0ciAi+tLB2s/LIM7FINrOwcrExc7POiAlcyIKKworIzogZXhfY21kcy5jOjQzMTQKK21zZ2lkICIiCisiXG4iCisiIyBMYXN0IFN1YnN0aXR1dGUgU3RyaW5nOlxuIgorIiQiCittc2dzdHIgIiIKKyJcbiIKKyIjIO/T1MHOzqbKINrSwdrPyyDEzNEg2sHNps7JOlxuIgorIiQiCisKKyM6IGV4X2NtZHMuYzo0NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTog98nCwd7UxSwgxMzRICVzIM7FzcGkIMTP0M/Nz8fJIgorCisjOiBleF9jbWRzLmM6NDQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiCittc2dzdHIgIvfJwsHe1MUsIMbByswgxM/Qz83Px8kgXCIlc1wiIM7FINrOwcrExc7PIgorCisjOiBleF9jbWRzLmM6NDg5MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiAlczog7sUgpCDEydLFy9TP0qakwCIKKworIzogZXhfY21kcy5jOjQ5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MjogQ2Fubm90IG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNTI6IO7FIM3P1tUg16bEy9LJ1MkgJXMgxMzRINrB0MnT1SIKKworIzogZXhfY21kcy5jOjQ5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MzogVW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxNTM6IO7FIM3P1tUg16bEy9LJ1MkgJXMgxMzRIN7J1MHOztEiCisKKyM6IGV4X2NtZHMuYzo1MDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTQ6IER1cGxpY2F0ZSB0YWcgXCIlc1wiIGluIGZpbGUgJXMiCittc2dzdHIgIkUxNTQ6IPDPxNemys7BINDP2s7B3svBIFwiJXNcIiDXIMbBysymICVzIgorCisjOiBleF9jbWRzLmM6NTExNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYwOiBVbmtub3duIHNpZ24gY29tbWFuZDogJXMiCittc2dzdHIgIkUxNjA6IO7F16bEz83BIMvPzcHOxMEgc2lnbjogJXMiCisKKyM6IGV4X2NtZHMuYzo1MTM1Cittc2dpZCAiRTE1NjogTWlzc2luZyBzaWduIG5hbWUiCittc2dzdHIgIkUxNTY6IOLSwcvVpCDOwdrXySDOwdDJ09UiCisKKyM6IGV4X2NtZHMuYzo1MTgxCittc2dpZCAiRTI1NTogVG9vIG1hbnkgc2lnbnMgZGVmaW5lZCIKK21zZ3N0ciAiRTI1NTog98nazsHexc7PINrBwsHHwdTPIM7B0MnTptciCisKKyM6IGV4X2NtZHMuYzo1MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTog7sXXptLOycogzsHQydM6ICVzIgorCisjOiBleF9jbWRzLmM6NTI0NyBleF9jbWRzLmM6NTQzMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiDuxdemxM/NycogzsHQydM6ICVzIgorCisjOiBleF9jbWRzLmM6NTI5MworbXNnaWQgIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiCittc2dzdHIgIkUxNTk6IOLSwcvVpCDB0sfVzcXO1NUgzsHQydPVIgorCisjOiBleF9jbWRzLmM6NTM3MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU4OiBJbnZhbGlkIGJ1ZmZlciBuYW1lOiAlcyIKK21zZ3N0ciAiRTE1ODog7sXXptLOwSDOwdrXwSDC1cbF0sE6ICVzIgorCisjOiBleF9jbWRzLmM6NTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU3OiBJbnZhbGlkIHNpZ24gSUQ6ICVsZCIKK21zZ3N0ciAiRTE1Nzog7sXXptLOycogSUQgzsHQydPVOiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1NTgzCittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJb98nEwczFzs9dIgorCisjOiBleF9kb2NtZC5jOjQ5MAorbXNnaWQgIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIgorbXNnc3RyICIiCisi8M/ewdTPyyDSxdbJzdUgRXguIPfJy8/SydPUz9fVytTFIFwidmlzdWFsXCIgxMzRINDP18XSzsXOztEg1yDOz9LNwczYzsnKICIKKyLSxcjJzSIKKworIy4gbXVzdCBiZSBhdCBFT0YKKyM6IGV4X2RvY21kLmM6NTI2Cittc2dpZCAiQXQgZW5kLW9mLWZpbGUiCittc2dzdHIgIuKmzNEgy6bOw9EgxsHKzMEiCisKKyM6IGV4X2RvY21kLmM6NjAxCittc2dpZCAiRTE2OTogQ29tbWFuZCB0b28gcmVjdXJzaXZlIgorbXNnc3RyICJFMTY5OiDrz83BzsTBINrBzsHE1M8g0sXL1dLTydfOwSIKKworIzogZXhfZG9jbWQuYzo5MTAKK21zZ2lkICJFMTcwOiBNaXNzaW5nIDplbmR3aGlsZSIKK21zZ3N0ciAiRTE3MDog4tLBy9WkIDplbmR3aGlsZSIKKworIzogZXhfZG9jbWQuYzo5MTIKK21zZ2lkICJFMTcxOiBNaXNzaW5nIDplbmRpZiIKK21zZ3N0ciAiRTE3MTog4tLBy9WkIDplbmRpZiIKKworIzogZXhfZG9jbWQuYzo5MjIKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICLrps7Fw9gg18nLz87V18HOz8fPIMbByszBIgorCisjOiBleF9kb2NtZC5jOjkyMworbXNnaWQgIkVuZCBvZiBmdW5jdGlvbiIKK21zZ3N0ciAi66bOxcPYIMbVzsvDpqciCisKKyM6IGV4X2RvY21kLmM6MTM0MworbXNnaWQgIkFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgIuTXz9rOwd7Oycog19bJ1M/LIMvPzcHOxMkgy8/SydPU1dfB3sEiCisKKyM6IGV4X2RvY21kLmM6MTM1NworbXNnaWQgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIKK21zZ3N0ciAi7sUgpCDLz83BzsTPwCDSxcTBy9TP0sEiCisKKyM6IGV4X2RvY21kLmM6MTQ0MAorbXNnaWQgIkRvbid0IHBhbmljISIKK21zZ3N0ciAi7sUgzsXS19XK1MUhIgorCisjOiBleF9kb2NtZC5jOjE0NTkKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4iCittc2dzdHIgIu7FIMLVxNUg2sHEy9XXwdTJISIKKworIzogZXhfZG9jbWQuYzoxNDY4Cittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuLCBPSyB0byBzd2FwIgorbXNnc3RyICLuxSDC1cTVINrBxMvV18HUySwgwczFIM3P1tUgz8LF0s7V1MnT0S4uLiIKKworIzogZXhfZG9jbWQuYzoxNTc5Cittc2dpZCAiVXNlIHcgb3Igdz4+IgorbXNnc3RyICL3ycvP0snT1M/X1crUxSA6dyDBws8gOnc+PiIKKworIzogZXhfZG9jbWQuYzozMDg2Cittc2dpZCAiRTMxOTogU29ycnksIHRoZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMzE5OiD3ycLBytTFLCDD0SDLz83BzsTBIM7FIMSmpCIKKworIzogZXhfZG9jbWQuYzozMjU2Cittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6IPSmzNjLySDPxM7FIKbNJ9EgxsHKzMEgxM/a18/Mxc7PIgorCisjOiBleF9kb2NtZC5jOjM4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICL9xSCkICVkIM7F0sXEwcfP18HOycggxsHKzKbXLiD3ycrUyT8iCisKKyM6IGV4X2RvY21kLmM6MzgxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiD6wczJ28nMz9PRICVsZCDOxdLFxMHHz9fBzsnIIMbBysym1yIKKworIzogZXhfZG9jbWQuYzozOTEyCittc2dpZCAiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogdXNlICEgdG8gcmVkZWZpbmUiCittc2dzdHIgIkUxNzQ6IOvPzcHOxMEg19bFIKbTztWkLCDXycvP0snT1MHK1MUgISDdz8IgzsUg2tfB1sHUySIKKworIzogZXhfZG9jbWQuYzo0MDE3Cittc2dpZCAiIgorIlxuIgorIiAgICBOYW1lICAgICAgICBBcmdzIFJhbmdlIENvbXBsZXRlICBEZWZpbml0aW9uIgorbXNnc3RyICIiCisiXG4iCisiICAgIO7B2tfBICAgICAgIOHSxy4g7cXWwSAg5M/Qz9fOxc7RIPfJ2s7B3sXOztEiCisKKyM6IGV4X2RvY21kLmM6NDEwNgorbXNnaWQgIk5vIHVzZXItZGVmaW5lZCBjb21tYW5kcyBmb3VuZCIKK21zZ3N0ciAi7sUg2s7BysTFzs8gy8/Nwc7EIMvP0snT1NXXwd7BIgorCisjOiBleF9kb2NtZC5jOjQxMzcKK21zZ2lkICJFMTc1OiBObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIgorbXNnc3RyICJFMTc1OiDuxSDXy8Hawc7PIMHU0snC1dQiCisKKyM6IGV4X2RvY21kLmM6NDE4OQorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3Njog7sXXptLOwSDLpszYy6bT1NggwdLH1c3FztSm1yIKKworIzogZXhfZG9jbWQuYzo0MjA0Cittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3Nzog7KbeyczYzsnLIM7FIM3P1sUgwtXUySDXy8Hawc7PIMTXpt6mIgorCisjIG1zZ3N0ciAiRTE3NzogIgorIzogZXhfZG9jbWQuYzo0MjE0Cittc2dpZCAiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIKK21zZ3N0ciAiRTE3ODog7sXXptLOxSDQz97B1MvP18Ug2s7B3sXOztEgxMzRIGNvdW50IgorCisjIG1zZ3N0ciAiRTE3ODogIgorIzogZXhfZG9jbWQuYzo0MjQyCittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiDkzNEgxM/Qz9fOxc7O0SDOxc/CyKbExc4gwdLH1c3FztQiCisKKyMgbXNnc3RyICJFMTc5OiAiCisjOiBleF9kb2NtZC5jOjQyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MDogSW52YWxpZCBjb21wbGV0ZSB2YWx1ZTogJXMiCittc2dzdHIgIkUxODA6IO7F16bSzsEg18vB2qbXy8EgxMzRIMTP0M/XzsXOztE6ICVzIgorCisjIG1zZ3N0ciAiRTE4MDogIgorIzogZXhfZG9jbWQuYzo0MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MTog7sXXptLOycogwdTSycLV1DogJXMiCisKKyMgbXNnc3RyICJFMTgxOiAiCisjOiBleF9kb2NtZC5jOjQzMTAKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4Mjog7sXXptLOwSDOwdrXwSDLz83BzsTJIgorCisjIG1zZ3N0ciAiRTE4MjogIgorIzogZXhfZG9jbWQuYzo0MzI1Cittc2dpZCAiRTE4MzogVXNlciBkZWZpbmVkIGNvbW1hbmRzIG11c3Qgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIgorbXNnc3RyICJFMTgzOiDrz83BzsTJIMvP0snT1NXXwd7BINDP16bOzskg0M/eyc7B1MnT0SDaINfFzMnLz6cgzKbUxdLJIgorCisjIG1zZ3N0ciAiRTE4MzogIgorIzogZXhfZG9jbWQuYzo0Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODQ6IE5vIHN1Y2ggdXNlci1kZWZpbmVkIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTg0OiDrz83BzsTVIMvP0snT1NXXwd7BIM7FINrOwcrExc7POiAlcyIKKworIyBtc2dzdHIgIkUxODQ6ICIKKyM6IGV4X2RvY21kLmM6NDg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg1OiBDYW5ub3QgZmluZCBjb2xvciBzY2hlbWUgJXMiCittc2dzdHIgIkUxODU6IO7FIM3P1s7BINrOwcrUySDTyMXN1SDLz8zYz9Km1yAlcyIKKworIzogZXhfZG9jbWQuYzo0ODUzCittc2dpZCAiR3JlZXRpbmdzLCBWaW0gdXNlciEiCittc2dzdHIgIvHLINbJ18XU2NPRLCDLz9LJ09TV18HeIFZpbSA/IgorCisjIG1zZ3N0ciAiRTE4NTogIgorIzogZXhfZG9jbWQuYzo1NTUwCittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgIvLFxMHH1dfB1MkgxsHKzCDVIM7P18/N1SDXpsvOpiIKKworIzogZXhfZG9jbWQuYzo1ODE2Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICLuxc3BpCDGwcrMwSDPws2mztUiCisKKyM6IGV4X2RvY21kLmM6NTkyMAorbXNnaWQgIkFwcGVuZCBGaWxlIgorbXNnc3RyICLkz9DJ08HUySDGwcrMIgorCisjOiBleF9kb2NtZC5jOjU5NzkKK21zZ2lkICJFMTg2OiBObyBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkUxODY6IPbPxM7PpyDQz9DF0sXEztjPpyDEydLFy9TP0qanIgorCisjIG1zZ3N0ciAiRTE4NjogIgorIzogZXhfZG9jbWQuYzo2MDU2Cittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4Nzog7sXXpsTPzcEgxMnSxcvUz9Km0SIKKworIyBtc2dzdHIgIkUxODc6ICIKKyM6IGV4X2RvY21kLmM6NjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIvDP2snDptEg16bLzsE6IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NjE3OQorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICJFMTg4OiDm1c7Lw6bRIM/C0sHI1dfBzs7RINDP2snDpqcg16bLzsEgzsUgxKakIMTM0SDXwdvPpyDQzMHUxs/SzckiCisKKyMgbXNnc3RyICJFMTg4OiAiCisjOiBleF9kb2NtZC5jOjY0NDUKK21zZ2lkICJTYXZlIFJlZGlyZWN0aW9uIgorbXNnc3RyICL6wdDBzSfR1MHUySDQxdLFwcTSxdPP18HOycog18nXpsQiCisKKyM6IGV4X2RvY21kLmM6NjU5NAorbXNnaWQgIlNhdmUgVmlldyIKK21zZ3N0ciAi+sHQwc0n0dTB1Mkg18nHzNHEIgorCisjOiBleF9kb2NtZC5jOjY1OTUKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIvrB0MHNJ9HUwdTJINPFwc7TIgorCisjOiBleF9kb2NtZC5jOjY1OTcKK21zZ2lkICJTYXZlIFNldHVwIgorbXNnc3RyICL6wdDBzSfR1MHUySDOwczB29TV18HOztEiCisKKyM6IGV4X2RvY21kLmM6Njc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg5OiBcIiVzXCIgZXhpc3RzICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxODk6IObByswgXCIlc1wiIKbTztWkLCAo18nLz9LJ09TBytTFICEg3c/CIM7FINrXwdbB1MkpIgorCisjIG1zZ3N0ciAiRTE4OTogIgorIzogZXhfZG9jbWQuYzo2NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTA6IENhbm5vdCBvcGVuIFwiJXNcIiBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE5MDog7sUgzc/W1SDXpsTL0snUySBcIiVzXCIgxMzRIN7J1MHOztEiCisKKyMgbXNnc3RyICJFMTkwOiAiCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo2Nzc1Cittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICJFMTkxOiDh0sfVzcXO1CDNwaQgwtXUySDMptTF0s/ALCBgIMHCzyAnIgorCisjIG1zZ3N0ciAiRTE5MTogIgorIzogZXhfZG9jbWQuYzo2ODE4Cittc2dpZCAiRTE5MjogUmVjdXJzaXZlIHVzZSBvZiA6bm9ybWFsIHRvbyBkZWVwIgorbXNnc3RyICJFMTkyOiDyxcvV0tPJ187BIMfMycLJzsEg18XLz9LJ09TBzs7RIDpub3JtYWwg2sHOwcTSzyDXxczJy8EiCisKKyM6IGV4X2RvY21kLmM6NzE3OQorbXNnaWQgIjppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICL6wc7BxNTPINfFzMnLwSDLpszYy6bT1Ngg18vMwcTFzsnIIDppZiIKKworIzogZXhfZG9jbWQuYzo3MjE0Cittc2dpZCAiOmVuZGlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICLi0sHL1aQg16bE0M/XpsTOz8fPIDppZiDEzNEgOmVuZGlmIgorCisjOiBleF9kb2NtZC5jOjcyMzQKK21zZ2lkICI6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAi4tLBy9WkINemxNDP16bEzs/HzyA6aWYgxMzRIDplbHNlIgorCisjOiBleF9kb2NtZC5jOjcyMzYKK21zZ2lkICI6ZWxzZWlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICLi0sHL1aQg16bE0M/XpsTOz8fPIDppZiDEzNEgOmVsc2VpZiIKKworIzogZXhfZG9jbWQuYzo3Mjg4Cittc2dpZCAiOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIvrBzsHE1M8g18XMycvBIMumzNjLptPU2CDXy8zBxMXOycggOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjczMzQKK21zZ2lkICI6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIuLSwcvVpCDXpsTQz9emxM7Px88gOndoaWxlIMTM0SA6Y29udGludWUiCisKKyM6IGV4X2RvY21kLmM6NzM2MQorbXNnaWQgIjpicmVhayB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAi4tLBy9WkINemxNDP16bEzs/HzyA6d2hpbGUgxMzRIDpicmVhayIKKworIzogZXhfZG9jbWQuYzo3Mzg0IGV4X2RvY21kLmM6NzM4OQorbXNnaWQgIjplbmR3aGlsZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAi4tLBy9WkINemxNDP16bEzs/HzyA6d2hpbGUgxMzRIDplbmR3aGlsZSIKKworIzogZXhfZG9jbWQuYzo3NDEwCittc2dpZCAiRTE5MzogOmVuZGZ1bmN0aW9uIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTEzMzogOmVuZGZ1bmN0aW9uINDP2sEgzcXWwc3JIMbVzsvDpqciCisKKyMgbXNnc3RyICJFMTkzOiAiCisjOiBleF9kb2NtZC5jOjc1OTAKK21zZ2lkICJFMTk0OiBObyBhbHRlcm5hdGUgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yICcjJyIKK21zZ3N0ciAiRTE5NDog7sXNwaQg19TP0snOzs/HzyDGwcrMwSDEzNEg2sHNps7JICcjJyIKKworIzogZXhfZG9jbWQuYzo3NjIxCittc2dpZCAibm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIgorbXNnc3RyICLuxSDNz9bOwSDawc2mzsnUySBcIjxhZmlsZT5cIiDXIMHX1M/Lz83BzsSmLCCmzSfRIMbByszBINemxNPV1M6mpCIKKworIzogZXhfZG9jbWQuYzo3NjI5Cittc2dpZCAibm8gYXV0b2NvbW1hbmQgYnVmZmVyIG51bWJlciB0byBzdWJzdGl0dXRlIGZvciBcIjxhYnVmPlwiIgorbXNnc3RyICLuxSDNz9bOwSDawc2mzsnUySBcIjxhYnVmPlwiINcgwdfUz8vPzcHOxKYsIM7B2tfBIMLVxsXSwSDXpsTT1dTO0SIKKworIzogZXhfZG9jbWQuYzo3NjQwCittc2dpZCAibm8gYXV0b2NvbW1hbmQgbWF0Y2ggbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhbWF0Y2g+XCIiCittc2dzdHIgIiIKKyLuxSDNz9bOwSDawc2mzsnUySBcIjxhbWF0Y2g+XCIg1yDB19TPy8/Nwc7EpiwgxMzRINrCpsfVIM7FINfJy8/SydPUz9fBzM/T2CAiCisips0n0SIKKworIzogZXhfZG9jbWQuYzo3NjUwCittc2dpZCAibm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIu7FIM3P1s7BINrBzabOydTJIFwiPHNmaWxlPlwiINcgwdfUz8vPzcHOxKYsIKbNJ9EgxsHKzMEg16bE09XUzqakIgorCisjOiBleF9kb2NtZC5jOjc2OTEKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZmlsZSBuYW1lIGZvciAnJScgb3IgJyMnLCBvbmx5IHdvcmtzIHdpdGggXCI6cDpoXCIiCittc2dzdHIgIvDP0s/WzsUgps0n0SDGwcrMwSDEzNEgJyUnINTBICcjJyDQ0sHDwKQgzMnbxSDaIFwiOnA6aFwiIgorCisjOiBleF9kb2NtZC5jOjc2OTMKK21zZ2lkICJFdmFsdWF0ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIgorbXNnc3RyICLyxdrVzNjUwdQgLS0g0M/Sz9bOpsog0tHEz8siCisKKyM6IGV4X2RvY21kLmM6ODYyOAorbXNnaWQgIkUxOTU6IENhbm5vdCBvcGVuIHZpbWluZm8gZmlsZSBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE5NTog7sUgzc/W1SDXpsTL0snUySDGwcrMIHZpbWluZm8iCisKKyM6IGV4X2RvY21kLmM6ODgwMQorbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5Njog9SDDpsog18XS06anIM7FzcGkIMTJx9LBxqbXIgorCisjIG1zZ3N0ciAiRTE5NzogIgorIzogZXhfZ2V0bG4uYzoyNzg1Cittc2dpZCAidGFnbmFtZSIKK21zZ3N0ciAizsHa18Eg0M/NptTLySIKKworIzogZXhfZ2V0bG4uYzoyNzg4Cittc2dpZCAiIGtpbmQgZmlsZVxuIgorbXNnc3RyICIg1MnQIMbByszBXG4iCisKKyM6IGV4X2dldGxuLmM6Mzk5NworbXNnaWQgIidoaXN0b3J5JyBvcHRpb24gaXMgemVybyIKK21zZ3N0ciAi79DDptEgJ2hpc3RvcnknINDP0s/WztEiCisKKyM6IGV4X2dldGxuLmM6NDIzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyAlcyBIaXN0b3J5IChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMg8M/QxdLFxM6mICVzOlxuIgorCisjOiBleF9nZXRsbi5jOjQyMzgKK21zZ2lkICJDb21tYW5kIExpbmUiCittc2dzdHIgIsvPzcHOxMkiCisKKyM6IGV4X2dldGxuLmM6NDIzOQorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgItrSwdrLySDEzNEg0M/b1cvVIgorCisjOiBleF9nZXRsbi5jOjQyNDAKK21zZ2lkICJFeHByZXNzaW9uIgorbXNnc3RyICLXydLB2skiCisKKyM6IGV4X2dldGxuLmM6NDI0MQorbXNnaWQgIklucHV0IExpbmUiCittc2dzdHIgItfXxcTFzqYg0tHEy8kiCisKKyM6IGV4X2dldGxuLmM6NDI3MQorbXNnaWQgIkUxOTg6IGNtZF9wY2hhciBiZXlvbmQgdGhlIGNvbW1hbmQgbGVuZ3RoIgorbXNnc3RyICJFMTk4OiAiCisKKyM6IGV4X2dldGxuLmM6NDQzNQorbXNnaWQgIkUxOTk6IEFjdGl2ZSB3aW5kb3cgb3IgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIkUxOTk6IOHL1MnXzsUg16bLzs8gwcLPIMLVxsXSIMLVzM8g18nEwczFzs8iCisKKyMgbXNnc3RyICJFMTk5OiAiCisjOiBmaWxlaW8uYzozNDcKK21zZ2lkICJJbGxlZ2FsIGZpbGUgbmFtZSIKK21zZ3N0ciAi7sXEz9rXz8zFzsUgps0n0SDGwcrMwSIKKworIzogZmlsZWlvLmM6MzcxIGZpbGVpby5jOjQ5NSBmaWxlaW8uYzoyNDkzIGZpbGVpby5jOjI1MzEKK21zZ2lkICJpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiw8UgxMnSxcvUz9Km0SIKKworIzogZmlsZWlvLmM6MzczCittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAizsUgxsHKzCIKKworIzogZmlsZWlvLmM6NTE1IGZpbGVpby5jOjM2MDQKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJb7s/XycogxsHKzF0iCisKKyM6IGZpbGVpby5jOjUzMgorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIlv3psTNz9fMxc7PXSIKKworIzogZmlsZWlvLmM6NjI0Cittc2dpZCAiRTIwMDogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG1hZGUgdGhlIGZpbGUgdW5yZWFkYWJsZSIKK21zZ3N0ciAiRTIwMDog4dfUz8vPzcHOxMkgKlJlYWRQcmUg2tLPwsnMySDeydTBzs7RIMbByszBIM7Fzc/WzMnXyc0iCisKKyMgbXNnc3RyICJFMjAwOiAiCisjOiBmaWxlaW8uYzo2MjYKK21zZ2lkICJFMjAxOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMjAxOiDh19TPy8/Nwc7EySAqUmVhZFByZSDOxSDNwaTU2CDQ0sHXwSDazabOwNfB1MkgwtXGxdIiCisKKyMgbXNnc3RyICJFMjAxOiAiCisjOiBmaWxlaW8uYzo2NDYKK21zZ2lkICJWaW06IFJlYWRpbmcgZnJvbSBzdGRpbi4uLlxuIgorbXNnc3RyICJWaW06IP7J1MHFzc8g2iBzdGRpbi4uLlxuIgorCisjOiBmaWxlaW8uYzo2NTIKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIv7J1MHFzc8g2iBzdGRpbi4uLiIKKworIy4gUmUtb3BlbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBmYWlsZWQhCisjOiBmaWxlaW8uYzo4NzYKK21zZ2lkICJFMjAyOiBDb252ZXJzaW9uIG1hZGUgZmlsZSB1bnJlYWRhYmxlISIKK21zZ3N0ciAiRTIwMjog68/O18XS1NXXwc7O0SDa0s/CyczPIN7J1MHOztEgxsHKzMEgzsXNz9bMydfJzSEiCisKKyMgbXNnc3RyICJFMjAyOiAiCisjOiBmaWxlaW8uYzoxNzMyCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2ZpZm8v08/LxdRdIgorCisjOiBmaWxlaW8uYzoxNzM5Cittc2dpZCAiW2ZpZm9dIgorbXNnc3RyICJbZmlmb10iCisKKyM6IGZpbGVpby5jOjE3NDYKK21zZ2lkICJbc29ja2V0XSIKK21zZ3N0ciAiW9PPy8XUXSIKKworIzogZmlsZWlvLmM6MTc1NAorbXNnaWQgIltST10iCittc2dzdHIgIltST10iCisKKyM6IGZpbGVpby5jOjE3NjQKK21zZ2lkICJbQ1IgbWlzc2luZ10iCittc2dzdHIgIlv31NLB3sXOzyBDUl0iCisKKyM6IGZpbGVpby5jOjE3NjkKK21zZ2lkICJbTkwgZm91bmRdIgorbXNnc3RyICJb+s7BysTFzs8gTkxdIgorCisjOiBmaWxlaW8uYzoxNzc0Cittc2dpZCAiW2xvbmcgbGluZXMgc3BsaXRdIgorbXNnc3RyICJb5M/Xx6Yg0tHEy8kg0M/E0qbCzsXOz10iCisKKyM6IGZpbGVpby5jOjE3ODAgZmlsZWlvLmM6MzU4OAorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW+7lIMvPztfF0tTP18HOz10iCisKKyM6IGZpbGVpby5jOjE3ODUgZmlsZWlvLmM6MzU5MworbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJby8/O18XS1M/Xwc7PXSIKKworIzogZmlsZWlvLmM6MTc5MiBmaWxlaW8uYzozNjE4Cittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJb2sHbycbSz9fBzs9dIgorCisjOiBmaWxlaW8uYzoxNzk5Cittc2dpZCAiW0NPTlZFUlNJT04gRVJST1JdIgorbXNnc3RyICJb8O/t6ezr4SDr7+735fL09ffh7u7xXSIKKworIzogZmlsZWlvLmM6MTgwNgorbXNnaWQgIltSRUFEIEVSUk9SU10iCittc2dzdHIgIlvw7+3p7OvhIPr+6fT19+Hu7vFdIgorCisjOiBmaWxlaW8uYzoyMDEzCittc2dpZCAiQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIGNvbnZlcnNpb24iCittc2dzdHIgIu7FIM3P1tUg0KbE29XLwdTJINTJzd7B08/XycogxsHKzCDEzNEgy8/O18XS1NXXwc7O0SIKKworIzogZmlsZWlvLmM6MjAyMAorbXNnaWQgIkNvbnZlcnNpb24gd2l0aCAnY2hhcmNvbnZlcnQnIGZhaWxlZCIKK21zZ3N0ciAi68/XzsXS1NXXwc7O0SDaICdjaGFyY29udmVydCcgzsUg18TBzM/T0SIKKworIzogZmlsZWlvLmM6MjAyMworbXNnaWQgImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciCittc2dzdHIgIs7FIM3P1tUg2t7J1MHUySDXydemxCAnY2hhcmNvbnZlcnQnIgorCisjOiBmaWxlaW8uYzoyNDA5Cittc2dpZCAiRTIwMzogQXV0b2NvbW1hbmRzIGRlbGV0ZWQgb3IgdW5sb2FkZWQgYnVmZmVyIHRvIGJlIHdyaXR0ZW4iCittc2dzdHIgIkUyMDM6IOHX1M/Lz83BzsTBINfJxMHMyczBIMHCzyDXydfBztTB1snMwSDC1cbF0iDdzyDNwaQgwtXUySDawdDJ08HOycoiCisKKyM6IGZpbGVpby5jOjI0MzIKK21zZ2lkICJFMjA0OiBBdXRvY29tbWFuZCBjaGFuZ2VkIG51bWJlciBvZiBsaW5lcyBpbiB1bmV4cGVjdGVkIHdheSIKK21zZ3N0ciAiRTIwNDog4dfUz8vPzcHOxMEg2s2mzsnMwSDLpszYy9jT1Ngg0tHEy6bXIM7F09DPxKbXwc7JzSDeyc7PzSIKKworIzogZmlsZWlvLmM6MjQ5OCBmaWxlaW8uYzoyNTE1Cittc2dpZCAiaXMgbm90IGEgZmlsZSBvciB3cml0YWJsZSBkZXZpY2UiCittc2dzdHIgIs7FIKQgxsHKzM/NIN7JINDSydPU0s+kzSDaIM3P1szJ16bT1MAg2sHQydPVIgorCisjOiBmaWxlaW8uYzoyNTYxCittc2dpZCAiaXMgcmVhZC1vbmx5ICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIs3P1s7BIMzJ28Ug3snUwdTJICjXycvP0snT1MHK1MUgISDdz8IgzsUg2tfB1sHUySkiCisKKyM6IGZpbGVpby5jOjI4NTcKK21zZ2lkICJDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICLuxSDNz9bVINrB0MnTwdTJINLF2sXS187JyiDGwcrMICjXycvP0snT1MHK1MUgISDdz8IgzsUg2tfB1sHUySkiCisKKyM6IGZpbGVpby5jOjI4NjkKK21zZ2lkICJDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAi8M/NyczLwSDQpsQg3sHTINPQ0s/CySDawcvSydTJINLF2sXS187JyiDGwcrMIgorCisjOiBmaWxlaW8uYzoyODcxCittc2dpZCAiQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIu7FzcGkINrNz8fJINPU18/SydTJIMbByswgxMzRINLF2sXS187PpyDLz9CmpyAo18nLz9LJ09TBytTFICEg3c/CIM7FINrXwdbB1MkpIgorCisjOiBmaWxlaW8uYzoyODg3Cittc2dpZCAiQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICLuxc3BpCDazc/HySDT1NfP0snUySDSxdrF0tfO1SDLz9CmwCAo18nLz9LJ09TBytTFICEg3c/CIM7FINrXwdbB1MkpIgorCisjOiBmaWxlaW8uYzoyOTg5Cittc2dpZCAiQ2FuJ3QgbWFrZSBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICLuxc3BpCDazc/HySDT1NfP0snUySDSxdrF0tfO1SDLz9CmwCAo18nLz9LJ09TBytTFICEg3c/CIM7FINrXwdbB1MkpIgorCisjOiBmaWxlaW8uYzozMDUxCittc2dpZCAiVGhlIHJlc291cmNlIGZvcmsgd2lsbCBiZSBsb3N0ICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIvLF09XS087VIMemzMvVIMbByszBIMLVxMUg19TSwd7Fzs8gKCEg3c/CIM7FINrXwdbB1MkpIgorCisjOiBmaWxlaW8uYzozMTQwCittc2dpZCAiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTQ6IO7FIM3P1tUg0KbE29XLwdTJINTJzd7B08/XycogxsHKzCDEzNEg2sHQydPVIgorCisjOiBmaWxlaW8uYzozMTU4Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKHVzZSAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIiIKKyJFMjEzOiDuxSDNz9bVIMvPztfF0tTV18HUySAo18nLz9LJ09TBytTFICEg3c/CINrB0MnTwdTJIMLF2iDLz87XxdLU1dfBzs7RKSIKKworIzogZmlsZWlvLmM6MzE5MworbXNnaWQgIkUxNjY6IENhbid0IG9wZW4gbGlua2VkIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNjY6IO7FIM3P1tUg16bEy9LJ1MkgxMzRINrB0MnT1SDGwcrMIM7BINHLycog18vB2tWkINDP08nMwc7O0SIKKworIzogZmlsZWlvLmM6MzE5NworbXNnaWQgIkUyMTI6IENhbid0IG9wZW4gZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxMjog7sUgzc/W1SDXpsTL0snUySDGwcrMIMTM0SDawdDJ09UiCisKKyM6IGZpbGVpby5jOjM0NDYKK21zZ2lkICJDbG9zZSBmYWlsZWQiCittc2dzdHIgIu7FINfEwczP09Eg2sHL0snUySDGwcrMIgorCisjOiBmaWxlaW8uYzozNTA0Cittc2dpZCAid3JpdGUgZXJyb3IsIGNvbnZlcnNpb24gZmFpbGVkIgorbXNnc3RyICLQz83JzMvBINrB0MnT1Swgy8/O18XS1NXXwc7O0SDOxSDXxMHMz9PRIgorCisjOiBmaWxlaW8uYzozNTEwCittc2dpZCAid3JpdGUgZXJyb3IgKGZpbGUgc3lzdGVtIGZ1bGw/KSIKK21zZ3N0ciAi0M/NyczLwSDawdDJ09UgKNPLps7eyczP09gg16bM2M7FIM2m08PFPz8pIgorCisjOiBmaWxlaW8uYzozNTgzCittc2dpZCAiIENPTlZFUlNJT04gRVJST1IiCittc2dzdHIgIiDw7+3p7OvhIOvv7vfl8vT19+Hu7vEiCisKKyM6IGZpbGVpby5jOjM1OTkKK21zZ2lkICJbRGV2aWNlXSIKK21zZ3N0ciAiW/DSydPU0qbKXSIKKworIzogZmlsZWlvLmM6MzYwNAorbXNnaWQgIltOZXddIgorbXNnc3RyICJb7s/XycpdIgorCisjOiBmaWxlaW8uYzozNjI2Cittc2dpZCAiIFthXSIKK21zZ3N0ciAiW8RdIgorCisjOiBmaWxlaW8uYzozNjI2Cittc2dpZCAiIGFwcGVuZGVkIgorbXNnc3RyICIgxM/QydPBzsnKIgorCisjOiBmaWxlaW8uYzozNjI4Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiW9pdIgorCisjOiBmaWxlaW8uYzozNjI4Cittc2dpZCAiIHdyaXR0ZW4iCittc2dzdHIgIiDawdDJ08HOycoiCisKKyM6IGZpbGVpby5jOjM2NzgKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTog8sXWyc0gcGF0Y2g6IM7FIM3P1tUg2sHQydPB1Mkg0MXS18nOzsnKIMbByswiCisKKyM6IGZpbGVpby5jOjM3MDAKK21zZ2lkICJFMjA2OiBwYXRjaG1vZGU6IGNhbid0IHRvdWNoIGVtcHR5IG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDY6IPLF1snNIHBhdGNoOiDOxSDNz9bVINPU18/SydTJINDV09TJyiDQxdLXyc7OycogxsHKzCIKKworIzogZmlsZWlvLmM6MzcxNQorbXNnaWQgIkUyMDc6IENhbid0IGRlbGV0ZSBiYWNrdXAgZmlsZSIKK21zZ3N0ciAiRTIwNzog7sUgzc/W1SDXycTBzMnMwSDSxdrF0tfOycogxsHKzCIKKworIzogZmlsZWlvLmM6Mzc2NworbXNnaWQgIiIKKyJcbiIKKyJXQVJOSU5HOiBPcmlnaW5hbCBmaWxlIG1heSBiZSBsb3N0IG9yIGRhbWFnZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIvX34efhOiDwz97B1MvP18nKIMbByswgzc/WxSDC1dTJINfU0sHexc7JyiDBws8g18nEwczFzsnKXG4iCisKKyM6IGZpbGVpby5jOjM3NjkKK21zZ2lkICJkb24ndCBxdWl0IHRoZSBlZGl0b3IgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorbXNnc3RyICLuxSDXycjPxNjUxSDaINLFxMHL1M/SwSDEz9DPy8kgxsHKzCDOxSDC1cTFINrB0MnTwc7PIgorCisjOiBmaWxlaW8uYzozODQ5Cittc2dpZCAiW2Rvc10iCittc2dzdHIgIlvEz9NdIgorCisjOiBmaWxlaW8uYzozODQ5Cittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbxs/SzcHUIGRvc10iCisKKyM6IGZpbGVpby5jOjM4NTYKK21zZ2lkICJbbWFjXSIKK21zZ3N0ciAiW21hY10iCisKKyM6IGZpbGVpby5jOjM4NTYKK21zZ2lkICJbbWFjIGZvcm1hdF0iCittc2dzdHIgIlvGz9LNwdQgbWFjXSIKKworIzogZmlsZWlvLmM6Mzg2MworbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzozODYzCittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW3VuaXggxs/SzcHUXSIKKworIzogZmlsZWlvLmM6Mzg5MAorbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICLPxMnOINLRxM/LLCAiCisKKyM6IGZpbGVpby5jOjM4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzLCAiCittc2dzdHIgIiVsZCDS0cTLptcsICIKKworIzogZmlsZWlvLmM6Mzg5NQorbXNnaWQgIjEgY2hhcmFjdGVyIgorbXNnc3RyICLPxMnOINPJzdfPzCIKKworIzogZmlsZWlvLmM6Mzg5NworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxkINPJzdfPzKbXIgorCisjOiBmaWxlaW8uYzozOTA3Cittc2dpZCAiW25vZW9sXSIKK21zZ3N0ciAiW25vZW9sXSIKKworIzogZmlsZWlvLmM6MzkwNworbXNnaWQgIltJbmNvbXBsZXRlIGxhc3QgbGluZV0iCittc2dzdHIgIlvOxdDP187JyiDP09TBzqbKINLRxM/LXSIKKworIy4gZG9uJ3Qgb3ZlcndyaXRlIG1lc3NhZ2VzIGhlcmUKKyMuIG11c3QgZ2l2ZSB0aGlzIHByb21wdAorIy4gZG9uJ3QgdXNlIGVtc2coKSBoZXJlLCBkb24ndCB3YW50IHRvIGZsdXNoIHRoZSBidWZmZXJzCisjOiBmaWxlaW8uYzozOTI2Cittc2dpZCAiV0FSTklORzogVGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSByZWFkaW5nIGl0ISEhIgorbXNnc3RyICL19+Hn4Tog5sHKzCDC1czPINrNps7Fzs8g0KbTzNEg2t7J1MHOztEhISEiCisKKyM6IGZpbGVpby5jOjM5MjgKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQiCittc2dzdHIgIvfJIMSmytPOzyDIz97F1MUgys/HzyDQxdLF2sHQydPB1MkgPz8iCisKKyM6IGZpbGVpby5jOjQ4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiCittc2dzdHIgIkUyMDg6IPDPzcnMy8Eg2sHQydPVINcgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo0ODkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDk6IEVycm9yIGNsb3NpbmcgXCIlc1wiIgorbXNnc3RyICJFMjA5OiDwz83JzMvBINCmxCDewdMg2sHL0snU1NEgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo0ODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTA6IEVycm9yIHJlYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFMjEwOiDwz83JzMvBINCmxCDewdMg2t7J1NXXwc7O0SBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjUwNTgKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiDh19TPy8/Nwc7EwSBGaWxlQ2hhbmdlZFNoZWxsINfJxMHMyczBIMLVxsXSIgorCisjOiBmaWxlaW8uYzo1MDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIG5vIGxvbmdlciBhdmFpbGFibGUiCittc2dzdHIgIkUyMTE6IPXXwcfBOiDmwcrMIFwiJXNcIiDOxcTP09HWzsnKIgorCisjOiBmaWxlaW8uYzo1MDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiIgorIlcxMjog9dfBx8E6IObByswgXCIlc1wiIMLVzM8g2s2mzsXOzywgwczFIMogwtXGxdIg1SBWaW0g1MXWIMLVzM8g2s2mzsXOzyIKKworIzogZmlsZWlvLmM6NTA4MgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzExOiD118HHwTog5sHKzCBcIiVzXCIgwtXMzyDazabOxc7PINCm08zRINDP3sHUy9Ug0sXEwcfV18HOztEiCisKKyM6IGZpbGVpby5jOjUwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzE2OiBXYXJuaW5nOiBNb2RlIG9mIGZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzE2OiD118HHwTog8sXWyc0gxsHKzMEgXCIlc1wiIMLVzM8g2s2mzsXOzyDQptPM0SDQz97B1MvVINLFxMHH1dfBzs7RIgorCisjOiBmaWxlaW8uYzo1MDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMzogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGJlZW4gY3JlYXRlZCBhZnRlciBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMzog9dfBx8E6IObByswgXCIlc1wiIMLVzM8g09TXz9LFzs8g0KbTzNEg0M/exdTL1SDSxcTBx9XXwc7O0SIKKworIzogZmlsZWlvLmM6NTExMQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIvXXwcfBIgorCisjOiBmaWxlaW8uYzo1MTEyCittc2dpZCAiIgorIiZPS1xuIgorIiZMb2FkIEZpbGUiCittc2dzdHIgIiIKKyImTzrnwdLB2sRcbiIKKyImTDr6wdfBztTB1snUySDGwcrMIgorCisjOiBmaWxlaW8uYzo1MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjE6IENvdWxkIG5vdCByZWxvYWQgXCIlc1wiIgorbXNnc3RyICJFMzIxOiDuxSDNz9bVINDF0sXXwc7UwdbJ1MkgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1NzAzCittc2dpZCAiLS1EZWxldGVkLS0iCittc2dzdHIgIi0t98nEwczFzs8tLSIKKworIy4gdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3QKKyM6IGZpbGVpby5jOjU4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NzogTm8gc3VjaCBncm91cDogXCIlc1wiIgorbXNnc3RyICJFMzY3OiDn0tXQwSDOxSCm087VpDogXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyICo6ICVzIgorbXNnc3RyICJFMjE1OiDuxcTP2tfPzMXOycog08nN18/MINCm08zRICo6ICVzIgorCisjIG1zZ3N0ciAiRTIxNTogIgorIzogZmlsZWlvLmM6NTk5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE2OiBObyBzdWNoIGV2ZW50OiAlcyIKK21zZ3N0ciAiRTIxNjog8M/EptEgzsUgptPO1aQ6ICVzIgorCisjIG1zZ3N0ciAiRTIxNjogIgorIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo2MTQ4Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDh19TPy8/Nwc7EySAtLS0iCisKKyM6IGZpbGVpby5jOjY0MTkKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiRTIxNzog7sUgzc/W1SDXycvPztXXwdTJIMHX1M/Lz83BzsTJIMTM0SD187boINDPxKbKIgorCisjIG1zZ3N0ciAiRTIxNzogIgorIzogZmlsZWlvLmM6NjQ0MgorbXNnaWQgIk5vIG1hdGNoaW5nIGF1dG9jb21tYW5kcyIKK21zZ3N0ciAi7sUgptPO1aQg16bE0M/XpsTOycggwdfUz8vPzcHOxCIKKworIzogZmlsZWlvLmM6NjcxNAorbXNnaWQgIkUyMTg6IGF1dG9jb21tYW5kIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIvrBzsHE1M8g18XMycvBIMumzNjLptPU2CDXy8zBxMXOycggwdfUz8vPzcHOxCIKKworIyBtc2dzdHIgIkUyMTg6ICIKKyM6IGZpbGVpby5jOjcwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgQXV0byBjb21tYW5kcyBmb3IgXCIlc1wiIgorbXNnc3RyICIlcyDh19TPy8/Nwc7EySDEzNEgXCIlc1wiIgorCisjOiBmaWxlaW8uYzo3MDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAi98nLz87VxdTY09EgJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZmlsZWlvLmM6NzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJhdXRvY29tbWFuZCAlcyIKK21zZ3N0ciAiwdfUz8vPzcHOxMEgJXMiCisKKyM6IGZpbGVpby5jOjc1OTkKK21zZ2lkICJFMjE5OiBNaXNzaW5nIHsuIgorbXNnc3RyICL31NLB3sXOzyB7LiIKKworIyBtc2dzdHIgIkUyMTk6ICIKKyM6IGZpbGVpby5jOjc2MDEKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICL31NLB3sXOzyB9LiIKKworIyBtc2dzdHIgIkUyMjA6ICIKKyM6IGZvbGQuYzo2NgorbXNnaWQgIk5vIGZvbGQgZm91bmQiCittc2dzdHIgIvrHz9LUz8sgzsUg2s7BysTFzs8iCisKKyMgbXNnc3RyICJFMzQ5OiAiCisjOiBmb2xkLmM6NTU0Cittc2dpZCAiRTM1MDogQ2Fubm90IGNyZWF0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTA6IO7FIM3P1tUg09TXz9LJ1Mkg2sfP0tTPyyAo2tfB1sHA3skgzsEgJ2ZvbGRtZXRob2QnKSIKKworIzogZm9sZC5jOjU1NgorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiDuxSDNz9bVINfJxMHMydTJINrHz9LUz8sgKNrXwdbBwN7JIM7BICdmb2xkbWV0aG9kJykiCisKKyM6IGZvbGQuYzoxNzAxCittc2dpZCAiRTIyMTogJ2NvbW1lbnRzdHJpbmcnIGlzIGVtcHR5IgorbXNnc3RyICJFMjIxOiDP0MOm0SAnY29tbWVudHN0cmluZycg0M/Sz9bO0SIKKworIzogZ2V0Y2hhci5jOjI0NworbXNnaWQgIkUyMjI6IEFkZCB0byByZWFkIGJ1ZmZlciIKK21zZ3N0ciAiRTIyMjog4tXGxdIg1dbFIMLVzM8g2t7J1MHOzyBb0M/NyczLwSDQ0s/H0sHNyV0iCisKKyM6IGdldGNoYXIuYzoyMTA2Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUzMzI6IPrBzabOwSDawcPJy8zFzsEiCisKKyMgbXNnc3RyICJFMjIzOiAiCisjOiBnZXRjaGFyLmM6Mjk1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI0OiBnbG9iYWwgYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAi+sHHwczYzsUg08vP0s/exc7O0SDEzNEgJXMg19bFIKbTztWkIgorCisjIG1zZ3N0ciAiRTIyNDogIgorIzogZ2V0Y2hhci5jOjI5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNTogZ2xvYmFsIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICL6wcfBzNjOwSDawc2mzsEgxMzRICVzINfWxSCm087VpCIKKworIyBtc2dzdHIgIkUyMjU6ICIKKyM6IGdldGNoYXIuYzozMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjY6IGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIvPLz9LP3sXOztEgxMzRICVzINfTxSCm087VpCIKKworIyBtc2dzdHIgIkUyMjY6ICIKKyM6IGdldGNoYXIuYzozMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICL6wc2mzsEgxMzRICVzINfWxSCm087VpCIKKworIyBtc2dzdHIgIkUyMjc6ICIKKyM6IGdldGNoYXIuYzozMTU1Cittc2dpZCAiTm8gYWJicmV2aWF0aW9uIGZvdW5kIgorbXNnc3RyICLzy8/Sz97Fzs7RIM7FINrOwcrExc7PIgorCisjOiBnZXRjaGFyLmM6MzE1NworbXNnaWQgIk5vIG1hcHBpbmcgZm91bmQiCittc2dzdHIgIvrBzabOySDOxSDazsHKxMXOzyIKKworIzogZ2V0Y2hhci5jOjM5ODIKK21zZ2lkICJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkUyMjg6IG1ha2VtYXA6IPfO1dTSptvO0SDQz83JzMvBIgorCisjOiBndWlfYXRfZnMuYzoyOTAKK21zZ2lkICI8Y2Fubm90IG9wZW4+ICIKK21zZ3N0ciAiPM7Fzc/WzMnXzyDXpsTL0snUyT4gIgorCisjOiBndWlfYXRfZnMuYzoxMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAidmltX1NlbEZpbGU6IM7FIM3P1tUgz9TSyc3B1Mkg29LJxtQgJXMiCisKKyM6IGd1aV9hdF9mcy5jOjI1MzgKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJ2aW1fU2VsRmlsZTogzsUgzc/W1SDQz9fF0s7J1NXT0SDXINDP1M/eztUgxMnSxcvUz9KmwCIKKworIzogZ3VpX2F0X2ZzLmM6MjU1NworbXNnaWQgIlBhdGhuYW1lOiIKK21zZ3N0ciAi+8zRyDoiCisKKyM6IGd1aV9hdF9mcy5jOjI1NjMKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJ2aW1fU2VsRmlsZTogzsUgzc/W1SDEptPUwdTJINDP1M/eztUgxMnSxcvUz9KmwCIKKworIzogZ3VpX2F0X2ZzLmM6MjU3MSBndWlfbW90aWYuYzoxNjA3Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjLiAnQ2FuY2VsJyBidXR0b24KKyM6IGd1aV9hdF9mcy5jOjI1NzEgZ3VpX2d0ay5jOjE2ODkgZ3VpX21vdGlmLmM6MTYwMiBndWlfbW90aWYuYzoyODIzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJDYW5jZWwiCisKKyM6IGd1aV9hdGhlbmEuYzoxOTM4IGd1aV9tb3RpZi5jOjE4NTUKK21zZ2lkICJWaW0gZGlhbG9nIgorbXNnc3RyICLkpsHMz8cgVmltIgorCisjOiBndWlfYXRfc2IuYzo0ODYKK21zZ2lkICJTY3JvbGxiYXIgV2lkZ2V0OiBDb3VsZCBub3QgZ2V0IGdlb21ldHJ5IG9mIHRodW1iIHBpeG1hcC4iCittc2dzdHIgIlNjcm9sbGJhciBXaWRnZXQ6IM7FIM3P1tUg19rOwdTJINLP2s2m0iDTy8/Sz97Fzs+nIMvB0tTJzsvJLiIKKworIzogZ3VpX2JldmFsLmM6NjgKK21zZ2lkICJFMjMyOiBDYW5ub3QgY3JlYXRlIEJhbGxvb25FdmFsIHdpdGggYm90aCBtZXNzYWdlIGFuZCBjYWxsYmFjayIKK21zZ3N0ciAiIgorIkUyMzI6IO7FIM3P1tUg09TXz9LJ1MkgQmFsbG9vbkV2YWwg2iDQz9emxM/NzMXOztHNIKYgxtXOy8OmpMAgz8TOz97B087PIgorCisjIG1zZ3N0ciAiRTIyODogIgorIzogZ3VpLmM6MTgxCittc2dpZCAiRTIyOTogQ2Fubm90IHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkUyMjk6IO7FIM3P1tUg0s/a0M/ewdTJIEdVSSIKKworIyBtc2dzdHIgIkUyMjk6ICIKKyM6IGd1aS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDog7sUgzc/W1SDeydTB1Mkg2iBcIiVzXCIiCisKKyMgbXNnc3RyICJFMjMwOiAiCisjOiBndWkuYzo0MzEKK21zZ2lkICJFMjMxOiAnZ3VpZm9udHdpZGUnIGludmFsaWQiCittc2dzdHIgIkUyMzE6ICdndWlmb250d2lkZScg18nazsHexc7PIM7F16bSzs8iCisKKyMgbXNnc3RyICJFMjMxOiAiCisjOiBndWkuYzozOTI4Cittc2dpZCAiRXJyb3IiCittc2dzdHIgIvDPzcnMy8EiCisKKyM6IGd1aS5jOjM5MjkKK21zZ2lkICImT2siCittc2dzdHIgIiZPayIKKworIyBtc2dzdHIgIkUyMzI6ICIKKyM6IGd1aV9ndGsuYzoxMTQ4Cittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAi5KbBzM/HIFZpbS4uLiIKKworIzogZ3VpX2d0ay5jOjE1MjUgZ3VpX21vdGlmLmM6Mjc0MgorbXNnaWQgIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIKK21zZ3N0ciAiVklNIC0g+s7BytTJIKYg2sHNps7J1MkuLi4iCisKKyM6IGd1aV9ndGsuYzoxNTMwIGd1aV9tb3RpZi5jOjI3NDQKK21zZ2lkICJWSU0gLSBTZWFyY2guLi4iCittc2dzdHIgIlZJTSAtIPDP29XLIgorCisjOiBndWlfZ3RrLmM6MTU1MyBndWlfbW90aWYuYzoyODYyCittc2dpZCAiRmluZCB3aGF0OiIKK21zZ3N0ciAi+s7BytTJOiIKKworIzogZ3VpX2d0ay5jOjE1NzEgZ3VpX21vdGlmLmM6Mjg5NAorbXNnaWQgIlJlcGxhY2Ugd2l0aDoiCittc2dzdHIgIvrBzabOwToiCisKKyMuIGV4YWN0IG1hdGNoIG9ubHkgYnV0dG9uCisjOiBndWlfZ3RrLmM6MTYwMyBndWlfbW90aWYuYzoyOTk2Cittc2dpZCAiTWF0Y2ggZXhhY3Qgd29yZCBvbmx5IgorbXNnc3RyICL318HWwdTJINrBINrCpscgzMnbxSDQz9fOxSDTzM/XzyIKKworIzogZ3VpX2d0ay5jOjE2MTUgZ3VpX21vdGlmLmM6Mjk2NAorbXNnaWQgIkRpcmVjdGlvbiIKK21zZ3N0ciAi7sHQ0tHNIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjE2MjcgZ3VpX21vdGlmLmM6Mjk3NgorbXNnaWQgIlVwIgorbXNnc3RyICLkz8fP0skiCisKKyM6IGd1aV9ndGsuYzoxNjMxIGd1aV9tb3RpZi5jOjI5ODQKK21zZ2lkICJEb3duIgorbXNnc3RyICL1zsnaIgorCisjLiAnRmluZCBOZXh0JyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNjUzIGd1aV9tb3RpZi5jOjI3NjYKK21zZ2lkICJGaW5kIE5leHQiCittc2dzdHIgIvrOwcrUySDOwdPU1dDOycog18HSpsHO1CIKKworIy4gJ1JlcGxhY2UnIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE2NzAgZ3VpX21vdGlmLmM6Mjc4MworbXNnaWQgIlJlcGxhY2UiCittc2dzdHIgIvrBzabOydTJIgorCisjLiAnUmVwbGFjZSBBbGwnIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE2NzkgZ3VpX21vdGlmLmM6Mjc5NgorbXNnaWQgIlJlcGxhY2UgQWxsIgorbXNnc3RyICL6wc2mzsnUySDV06YiCisKKyM6IGd1aV9ndGtfeDExLmM6MTA3OCBndWlfeDExLmM6MTE5OQorbXNnaWQgIkUyMzM6IGNhbm5vdCBvcGVuIGRpc3BsYXkiCittc2dzdHIgIkUyMzM6IO7FIM3P1tUg16bEy9LJ1MkgxMnT0MzFyiIKKworIyBtc2dzdHIgIkUyMzM6ICIKKyM6IGd1aV9ndGtfeDExLmM6MjQzNSBndWlfeDExLmM6MjAwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM0OiBVbmtub3duIGZvbnRzZXQ6ICVzIgorbXNnc3RyICJFMjM0OiDuxdemxM/NycogZm9udHNldDogJXMiCisKKyMgbXNnc3RyICJFMjM0OiAiCisjOiBndWlfZ3RrX3gxMS5jOjI0NjIKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAi98nEpszFzs7RIgorCisjOiBndWlfZ3RrX3gxMS5jOjI3MDQgZ3VpX21hYy5jOjI3ODAgZ3VpX3c0OC5jOjExOTcgZ3VpX3gxMS5jOjE4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogVW5rbm93biBmb250OiAlcyIKK21zZ3N0ciAi7sXXpsTPzcnKINvSycbUOiAlcyIKKworIyBtc2dzdHIgIkUyMzU6ICIKKyM6IGd1aV9ndGtfeDExLmM6MjcxNSBndWlfeDExLmM6MTg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IPvSycbUIFwiJXNcIiDOxSDNz87P28nSyc7OycoiCisKKyMgbXNnc3RyICJFMjM2OiAiCisjOiBndWlfZ3RrX3gxMS5jOjI4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MjogQ29sb3IgbmFtZSBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkUyNDI6IO7F2tLP2tXNpszBIM7B2tfBIMvPzNjP0tU6ICVzIgorCisjIG1zZ3N0ciAiRTI0MjogIgorIzogZ3VpX2d0a194MTEuYzozNTIxIHVpLmM6MTkyOQorbXNnaWQgIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iCittc2dzdHIgIvfJy8/SydPUwc7PIENVVF9CVUZGRVIwINrBzabT1Ngg0M/Sz9bO2M/HzyDXycSmzMXOztEiCisKKyM6IGd1aV9tb3RpZi5jOjE2MDEgZ3VpX21vdGlmLmM6MTYwNAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAi5qbM2NTSIgorCisjOiBndWlfbW90aWYuYzoxNjAzCittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIsTJ0sXL1M/SpqciCisKKyM6IGd1aV9tb3RpZi5jOjE2MDUKK21zZ2lkICJIZWxwIgorbXNnc3RyICLkz9DPzc/HwSIKKworIzogZ3VpX21vdGlmLmM6MTYwNgorbXNnaWQgIkZpbGVzIgorbXNnc3RyICLmwcrMySIKKworIzogZ3VpX21vdGlmLmM6MTYwOAorbXNnaWQgIlNlbGVjdGlvbiIKK21zZ3N0ciAi98nCptIg29LJxtTBIgorCisjOiBndWlfbW90aWYuYzoyODA5Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAi96bEzabOwSIKKworIzogZ3VpX3Jpc2Nvcy5jOjk1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBDYW4ndCBsb2FkIFphcCBmb250ICclcyciCittc2dzdHIgIiIKKyJFMjM1OiDxIM7FINrOwcAg3c8g1MHLxSByaXNjb3MsINcg9cvSwafOpiDUwcvPx88gzsXNwaQuLiAowSDU1dQg3cUgyiDRy8nK09ggIgorItvSycbUIM7FIMjP3sUg18HO1MHWydTJ09E6ICVzKSIKKworIyBtc2dzdHIgIkUyMzU6ICIKKyM6IGd1aV9yaXNjb3MuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IENhbid0IHVzZSBmb250ICVzIgorbXNnc3RyICJFMjM1OiDuxSDNz9bVINfJy8/SydPUwdTJINvSycbUICVzIgorCisjIG1zZ3N0ciAiRTIzNTogIgorIzogZ3VpX3Jpc2Nvcy5jOjExNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MjogTWlzc2luZyBjb2xvcjogJXMiCittc2dzdHIgIkUyNDI6IPfU0sHexc7PIMvPzKbSOiAlcyIKKworIyBtc2dzdHIgIkUyNDI6ICIKKyM6IGd1aV9yaXNjb3MuYzozMjY5Cittc2dpZCAiIgorIlxuIgorIlNlbmRpbmcgbWVzc2FnZSB0byB0ZXJtaW5hdGUgY2hpbGQgcHJvY2Vzcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuzRy8Gkzc8gxKbUxcogzabMpsOmz87F0s/NLiA6LSlcbiIKKworIzogZ3VpX3czMi5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiIgorIkUyNDM6IOHSx9XNxc7UIM7FINCmxNTSyc3VpNjU2NPROiBcIi0lc1wiLCDXycvV0snT1M/X1crUxSDXxdLTpsAg2iBPTEUuIgorCisjIG1zZ3N0ciAiRTI0NTogIgorIzogZ3VpX3c0OC5jOjIwNjgKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJWSU0gLSDwz9vVyyIKKworIzogZ3VpX3c0OC5jOjIwOTMKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICJWSU0gLSD6zsHK1MkgpiDawc2mzsnUyS4uLiIKKworIzogZ3VpX3gxMS5jOjE0MTkKK21zZ2lkICJWaW0gRTQ1ODogQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0IgorbXNnc3RyICIiCisiVmltIEU0NTg6IO7FzcGkINemzNjOycgg08XLw6bKINUg1MHCzMnDpiDLz8zYz9Km1y4g5MXRy6Ygy8/M2M/SySDNz9bV1NggIgorIsLV1Mkg19TSwd7FzqYiCisKKyM6IGd1aV94MTEuYzoxOTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICJFMjUwOiD70snG1MkgxMzRIMPYz8fPIM7Bws/S1SDTyc3Xz8ym1yDXpsTT1dTOpiDVIGZvbnRzZXQgJXM6IgorCisjIG1zZ3N0ciAiRTI1MDogIgorIzogZ3VpX3gxMS5jOjIwMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MjogRm9udHNldCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI1Mjog7sHa18EgZm9udHNldDogJXMiCisKKyMgbXNnc3RyICJFMjUyOiAiCisjOiBndWlfeDExLmM6MjAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICL70snG1CAnJXMnIM7FIKQgzc/Oz9vJ0snOzsnNIgorCisjOiBndWlfeDExLmM6MjA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTI6IO7B2tfBIGZvbnRzZXQ6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwOiAlc1xuIgorbXNnc3RyICL70snG1DA6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQxOiAlc1xuIgorbXNnc3RyICL70snG1DE6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQlZCB3aWR0aCBpcyBub3QgdHdpY2UgdGhhdCBvZiBmb250MFxuIgorbXNnc3RyICL2ydLOptPU2CDb0snG1MEgJWQgzcGkIMLV1Mkg1yDE16bepiDCpszY28/AINrBINTP193JztUgZm9udDBcbiIKKworIzogZ3VpX3gxMS5jOjIwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDAgd2lkdGg6ICVsZFxuIgorbXNnc3RyICL2ydLOptPU2CBmb250MDogJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyL2ydLOptPU2CBmb250MTogJWxkXG4iCisiXG4iCisKKyM6IGd1aV94MTEuYzoyMjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTQ6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciAlcyIKK21zZ3N0ciAiRTI1NDog7sUgzc/W1SDSz9rNptPUydTJIMvPzKbSICVzIgorCisjIG1zZ3N0ciAiRTI1NDogIgorIzogZ3VpX3gxMS5jOjMyNTYKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IO7FIM3P1s7BINreydTB1MkgxMHOpiDOwdDJ09UhIgorCisjOiBoYW5ndWxpbi5jOjYxMAorbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKK21zZ3N0ciAiRTI1Njog8M/NyczLwSBgSGFuZ3VsIGF1dG9tYXRhJyBb0M/NyczLwSDQ0s/H0sHNyV0iCisKKyMgbXNnc3RyICJFMjU1OiAiCisjOiBpZl9jc2NvcGUuYzo2NworbXNnaWQgIkFkZCBhIG5ldyBkYXRhYmFzZSIKK21zZ3N0ciAi5M/EwdTJIM7P19UgwsHa1SDEwc7JyCIKKworIzogaWZfY3Njb3BlLmM6NjkKK21zZ2lkICJRdWVyeSBmb3IgYSBwYXR0ZXJuIgorbXNnc3RyICL6wdDJ1CDawSDa0sHay8/NIgorCisjOiBpZl9jc2NvcGUuYzo3MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICLwz8vB2sHUySDDxSDQz9emxM/NzMXOztEiCisKKyM6IGlmX2NzY29wZS5jOjczCittc2dpZCAiS2lsbCBhIGNvbm5lY3Rpb24iCittc2dzdHIgIvrOyd3J1Mkg2iekxM7Bzs7RIgorCisjOiBpZl9jc2NvcGUuYzo3NQorbXNnaWQgIlJlaW5pdCBhbGwgY29ubmVjdGlvbnMiCittc2dzdHIgIvLP2tDP3sHUySDaINDP3sHUy9Ug1dOmINonpMTOwc7O0SIKKworIzogaWZfY3Njb3BlLmM6NzcKK21zZ2lkICJTaG93IGNvbm5lY3Rpb25zIgorbXNnc3RyICLwz8vB2sHUySDaJ6TEzsHOztEiCisKKyM6IGlmX2NzY29wZS5jOjEwOAorbXNnaWQgIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIKK21zZ3N0ciAi49Egy8/Nwc7EwSBjc2NvcGUgzsUg1c2mpCDEpszJ1Mkg16bLzs8uXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0MworbXNnaWQgIlVzYWdlOiBjc3RhZyA8aWRlbnQ+IgorbXNnc3RyICL3ycvP0snT1M/X1crUxTogY3N0YWcgPNDPzabUy8E+IgorCisjOiBpZl9jc2NvcGUuYzoxOTkKK21zZ2lkICJFMjU3OiBjc3RhZzogdGFnIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI1NzogY3N0YWc6INDPzabUy9UgzsUg2s7BysTFzs8iCisKKyMgbXNnc3RyICJFMjU3OiAiCisjOiBpZl9jc2NvcGUuYzo0MDcgaWZfY3Njb3BlLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXQoJXMpIGVycm9yOiAlZCIKK21zZ3N0ciAic3RhdCglcykg0M/NyczLwTogJWQiCisKKyM6IGlmX2NzY29wZS5jOjQ2MCBpZl9jc2NvcGUuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICLkz8TBzs8gwsHa1SDEwc7JyCBjc2NvcGUgJXMiCisKKyM6IGlmX2NzY29wZS5jOjQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIiVzIM7FIKQgzqYgxMnSxcvUz9KmpMAgzqYgwsHaz8AgxMHOycggY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKK21zZ3N0ciAi8M/NyczLwSDeydTBzs7RINonpMTOwc7O0SBjc2NvcGUgIyVkIgorCisjOiBpZl9jc2NvcGUuYzo2MzMKK21zZ2lkICJ1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAi7sXXpsTPzabKINTJ0CDQz9vVy9UgY3Njb3BlIgorCisjOiBpZl9jc2NvcGUuYzo2ODAKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAi7sUgzc/W1SDT1NfP0snUySDLwc7BzCDEzyBjc2NvcGUiCisKKyM6IGlmX2NzY29wZS5jOjc0NQorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uIGV4ZWMgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjog0M/NyczLwSDQpsQg3sHTINfJy8/Owc7O0SIKKworIzogaWZfY3Njb3BlLmM6NzU1Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIMTM0SB0b19mcCDOxSDXxMHX09EiCisKKyM6IGlmX2NzY29wZS5jOjc1NworbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gZm9yIGZyX2ZwIGZhaWxlZCIKK21zZ3N0ciAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiDEzNEgZnJfZnAgzsUg18TB19PRIgorCisjOiBpZl9jc2NvcGUuYzo3ODUKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnMiCittc2dzdHIgItbPxM7Px88g2iekxM7BztEg2iBjc2NvcGUiCisKKyMgbXNnc3RyICJFMjU4OiAiCisjOiBpZl9jc2NvcGUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiDkzNEgJXMt2sHQydTVIGNzY29wZSDT1M/Tz9fOzyAlcyDOxSDazsHKxMXOzyDTptLOycum1yIKKworIyBtc2dzdHIgIkUyNTk6ICIKKyM6IGlmX2NzY29wZS5jOjg5OQorbXNnaWQgImNzY29wZSBjb21tYW5kczpcbiIKK21zZ3N0ciAiy8/Nwc7EySBjc2NvcGU6XG4iCisKKyM6IGlmX2NzY29wZS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLTVzOiAlLTMwcyAoVXNhZ2U6ICVzKVxuIgorbXNnc3RyICIlLTVzOiAlLTMwcyAo99bJ18HK1MU6ICVzKVxuIgorCisjOiBpZl9jc2NvcGUuYzo5NzAKK21zZ2lkICJkdXBsaWNhdGUgY3Njb3BlIGRhdGFiYXNlIG5vdCBhZGRlZCIKK21zZ3N0ciAi0M/X1M/SzsEgwsHawSDEwc7JyCBjc2NvcGUgzsUgxM/Ewc7BIgorCisjOiBpZl9jc2NvcGUuYzo5ODEKK21zZ2lkICJtYXhpbXVtIG51bWJlciBvZiBjc2NvcGUgY29ubmVjdGlvbnMgcmVhY2hlZCIKK21zZ3N0ciAiy6bM2Mum09TYINonpMTOwc7YINogY3Njb3BlIMTP09HHzMEgzcHL08nN1c3VIgorCisjOiBpZl9jc2NvcGUuYzoxMTAyCittc2dpZCAiRTI2MDogY3Njb3BlIGNvbm5lY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJFMjYwOiDaJ6TEzsHOztEg2iBjc2NvcGUgzsUg2s7BysTFzs8iCisKKyMgbXNnc3RyICJFMjYwOiAiCisjOiBpZl9jc2NvcGUuYzoxMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNjE6IGNzY29wZSBjb25uZWN0aW9uICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MTog2iekxM7Bzs7RINogY3Njb3BlICVzIM7FINrOwcrExc7PIgorCisjIG1zZ3N0ciAiRTI2MTogIgorIzogaWZfY3Njb3BlLmM6MTE0MQorbXNnaWQgImNzY29wZSBjb25uZWN0aW9uIGNsb3NlZCIKK21zZ3N0ciAi2iekxM7Bzs7RINogY3Njb3BlINrBy6bO3sXOzyIKKworIzogaWZfY3Njb3BlLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWRcbiIKK21zZ3N0ciAi2iekxM7Bzs7RINogY3Njb3BlICVzINrBy6bO3sXOz1xuIgorCisjLiBzaG91bGQgbm90IHJlYWNoIGhlcmUKKyM6IGlmX2NzY29wZS5jOjEyOTAKK21zZ2lkICJmYXRhbCBlcnJvciBpbiBjc19tYW5hZ2VfbWF0Y2hlcyIKK21zZ3N0ciAiY3NfbWFuYWdlX21hdGNoZXM6INOm0s7Jy6bXIMKmzNjbxSDOxc3BpCBb0M/NyczLwSDQ0s/H0sHNyV0iCisKKyM6IGlmX2NzY29wZS5jOjEzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKK21zZ3N0ciAiRTI2Mjog0M/NyczLwSDeydTBzs7RINog2iekxM7Bzs7RIGNzY29wZSAlZCIKKworIyBtc2dzdHIgIkUyNjI6ICIKKyM6IGlmX2NzY29wZS5jOjE0NDkKK21zZ2lkICJjb3VsZG4ndCBtYWxsb2NcbiIKK21zZ3N0ciAizsUgzc/W1SDXycSmzMnUySDQwc0n0dTYXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3Njb3BlIHRhZzogJXNcbiIKK21zZ3N0ciAi8M/NptTLwSBjc2NvcGU6ICVzXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0NTgKK21zZ2lkICIgICAjICAgbGluZSIKK21zZ3N0ciAiICAgIyAgINLRxM/LIgorCisjOiBpZl9jc2NvcGUuYzoxNDYwCittc2dpZCAiZmlsZW5hbWUgLyBjb250ZXh0IC8gbGluZVxuIgorbXNnc3RyICLGwcrMIC8gy8/O1MXL09QgLyDS0cTPy1xuIgorCisjOiBpZl9jc2NvcGUuYzoxNzE4Cittc2dpZCAiQWxsIGNzY29wZSBkYXRhYmFzZXMgcmVzZXQiCittc2dzdHIgIvXTpiDaJ6TEzsHOztEg2iBjc2NvcGUg0MXSxdrB18HO1MHWxc7PIgorCisjOiBpZl9jc2NvcGUuYzoxNzg1Cittc2dpZCAibm8gY3Njb3BlIGNvbm5lY3Rpb25zXG4iCittc2dzdHIgIvbPxM7Px88g2iekxM7Bzs7RINogY3Njb3BlXG4iCisKKyM6IGlmX2NzY29wZS5jOjE3ODkKK21zZ2lkICIgIyBwaWQgICAgZGF0YWJhc2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iCittc2dzdHIgIiAjIHBpZCAgICDOwdrXwSDCwdrJIMTBzsnIICAgICAgICAgICAgICAgICAgICDbzNHIXG4iCisKKyM6IGlmX2NzY29wZS5jOjE4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTJkICUtNWxkICAlLTM0cyAgPG5vbmU+XG4iCittc2dzdHIgIiUyZCAlLTVsZCAgJS0zNHMgPNbP1s7Px88+XG4iCisKKyM6IGlmX3B5dGhvbi5jOjI0NiBpZl9ydWJ5LmM6MjYwIGlmX3RjbC5jOjE5NSBtYnl0ZS5jOjI1Njggb3Nfd2luMzIuYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MDogQ291bGQgbm90IGxvYWQgbGlicmFyeSAlcyIKK21zZ3N0ciAiRTM3MDog7sUgzc/W1SDawdfBztTB1snUySDCpsLMps/UxcvVICVzIgorCisjOiBpZl9weXRob24uYzoyNTggaWZfcnVieS5jOjI3MiBpZl90Y2wuYzoyMDYgbWJ5dGUuYzoyNTg0IG9zX3dpbjMyLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDg6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgZnVuY3Rpb24gJXMiCittc2dzdHIgIkU0NDg6IO7FIM3P1tUg2sHXwc7UwdbJ1MkgwqbCzKbP1MXeztUgxtXOy8OmwCAlcyIKKworIzogaWZfcHl0aG9uLmM6MzgzCittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIiIKKyJFMjYzOiD3ycLB3tTFLCDD0SDLz83BzsTBINfJzcvO1dTBLCDCpsLMps/UxcvBIFB5dGhvbiDOxSDNz9bFIMLV1MkgIgorItrB18HO1MHWxc7BLiIKKworIzogaWZfcHl0aG9uLmM6NTgzCittc2dpZCAiY2FuJ3QgZGVsZXRlIE91dHB1dE9iamVjdCBhdHRyaWJ1dGVzIgorbXNnc3RyICLOxSDNz9bVINfJxMHMydTJIMHU0snC1dTJIE91dHB1dE9iamVjdCIKKworIzogaWZfcHl0aG9uLmM6NTkwCittc2dpZCAic29mdHNwYWNlIG11c3QgYmUgYW4gaW50ZWdlciIKK21zZ3N0ciAic29mdHNwYWNlIM3BpCDC1dTJIM7B1NXSwczYzsnNIgorCisjIG1zZ3N0ciAiRTE4MDogIgorIzogaWZfcHl0aG9uLmM6NTk4Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUiCittc2dzdHIgIs7F16bSzsnKIMHU0snC1dQiCisKKyM6IGlmX3B5dGhvbi5jOjYzNyBpZl9weXRob24uYzo2NTEKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkg0M/U0qbCxc4g09DJ08/LINLRxMum1yIKKworIzogaWZfcHl0aG9uLmM6Nzc3Cittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjog8M/NyczLwSCmzqbDptHMptrBw6anIM/CJ6TL1KbXINfXz8TVL9fJ18/E1SIKKworIzogaWZfcHl0aG9uLmM6OTYyIGlmX3RjbC5jOjE0MDMKK21zZ2lkICJpbnZhbGlkIGV4cHJlc3Npb24iCittc2dzdHIgIs7F16bSzsnKINfJ0sHaIgorCisjOiBpZl9weXRob24uYzo5NzYgaWZfdGNsLmM6MTQwOAorbXNnaWQgImV4cHJlc3Npb25zIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAiz8LSz8LL1SDXydLB2qbXINrBws/Sz87Fzs8g0M/EIN7B0yDLz83QpszRw6anIgorCisjOiBpZl9weXRob24uYzo5ODkKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICLT0NLPwsEg3snUwdTJINfJxMHMxc7JyiDC1cbF0iIKKworIzogaWZfcHl0aG9uLmM6MTAwNCBpZl9weXRob24uYzoxMDQ1IGlmX3B5dGhvbi5jOjExMDkgaWZfdGNsLmM6MTIxNQorbXNnaWQgImxpbmUgbnVtYmVyIG91dCBvZiByYW5nZSIKK21zZ3N0ciAizs/NxdIg0tHEy8Eg2sEgzcXWwc3JIMbByszBIgorCisjOiBpZl9weXRob24uYzoxMjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIjxidWZmZXIgb2JqZWN0IChkZWxldGVkKSBhdCAlOGxYPiIKK21zZ3N0ciAiPM/CJ6TL1CDC1cbF0sEgKNfJxMHMxc7PKSDXICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxMzMzIGlmX3RjbC5jOjgzNworbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICLOxdem0s7BIM7B2tfBINDPzabUy8kiCisKKyM6IGlmX3B5dGhvbi5jOjE2MDgKK21zZ2lkICJubyBzdWNoIGJ1ZmZlciIKK21zZ3N0ciAi1MHLz8fPIMLVxsXSwSDOxc3BpCIKKworIzogaWZfcHl0aG9uLmM6MTY5NgorbXNnaWQgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCB3aW5kb3ciCittc2dzdHIgItPU0s/CwSDa18XSztXUydPRIMTPINfJxMHMxc7Px88g16bLzsEiCisKKyM6IGlmX3B5dGhvbi5jOjE3NDEKK21zZ2lkICJyZWFkb25seSBhdHRyaWJ1dGUiCittc2dzdHIgIszJ28UgxMzRIN7J1MHOztEiCisKKyM6IGlmX3B5dGhvbi5jOjE3NTQKK21zZ2lkICJjdXJzb3IgcG9zaXRpb24gb3V0c2lkZSBidWZmZXIiCittc2dzdHIgIsvV0tPP0iDawSDNxdbBzckgwtXGxdLBIgorCisjOiBpZl9weXRob24uYzoxODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0IChkZWxldGVkKSBhdCAlLjhsWD4iCittc2dzdHIgIjzPwieky9Qg16bLzsEgKNfJxMHMxc7PKSDXICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTg0MworIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IgorbXNnc3RyICI8z8InpMvUINemy87BICjOxdemxM/NycopINcgJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI816bLzs8gJWQ+IgorCisjOiBpZl9weXRob24uYzoxOTIxCittc2dpZCAibm8gc3VjaCB3aW5kb3ciCittc2dzdHIgItTBy8/HzyDXpsvOwSDOxc3BpCIKKworIzogaWZfcHl0aG9uLmM6MjE3OCBpZl9weXRob24uYzoyMjEzIGlmX3B5dGhvbi5jOjIyNjMgaWZfcHl0aG9uLmM6MjMyNgorIzogaWZfcHl0aG9uLmM6MjQ0NiBpZl9weXRob24uYzoyNDk4IGlmX3RjbC5jOjY4NSBpZl90Y2wuYzo3MzAgaWZfdGNsLmM6ODA0CisjOiBpZl90Y2wuYzo4NzQgaWZfdGNsLmM6MTk5OQorbXNnaWQgImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIs7FIM3P1tUg2sLF0sXH1Mkgps7Gz9LNwcOmwCDEzNEg16bEzabOySIKKworIzogaWZfcHl0aG9uLmM6MjE4MCBpZl9weXRob24uYzoyMjcwIGlmX3B5dGhvbi5jOjIzMzcKK21zZ2lkICJjYW5ub3QgZGVsZXRlIGxpbmUiCittc2dzdHIgIs7Fzc/WzMnXzyDXycTBzMnUySDS0cTPyyIKKworIzogaWZfcHl0aG9uLmM6MjIxNSBpZl9weXRob24uYzoyMzUzIGlmX3RjbC5jOjY5MSBpZl90Y2wuYzoyMDIxCittc2dpZCAiY2Fubm90IHJlcGxhY2UgbGluZSIKK21zZ3N0ciAizsXNz9bMydfPINrBzabOydTJINLRxM/LIgorCisjOiBpZl9weXRob24uYzoyMzY5IGlmX3B5dGhvbi5jOjI0NDggaWZfcHl0aG9uLmM6MjUwNgorbXNnaWQgImNhbm5vdCBpbnNlcnQgbGluZSIKK21zZ3N0ciAizsUgzc/W1SDX09TB18nUySDS0cTPyyIKKworIzogaWZfcHl0aG9uLmM6MjYxMAorbXNnaWQgInN0cmluZyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAiwqbM2NsgzqbWIM/Eyc4g0tHEz8siCisKKyM6IGlmX3J1YnkuYzo0MDEKK21zZ2lkICIiCisiRTI2NjogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFJ1YnkgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkUyNjY6IPfJwsHe1MUsIMPRIMvPzcHOxMEg18nNy87V1MEsIMKmwsymz9TFy8EgUnVieSDOxSDNz9bFIMLV1Mkg2sHXwc7UwdbFzsEuIgorCisjIG1zZ3N0ciAiRTIzMzogIgorIzogaWZfcnVieS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjczOiB1bmtub3duIGxvbmdqbXAgc3RhdHVzICVkIgorbXNnc3RyICJFMjM0OiDuxdemxM/Nycog09TB1NXTIGxvbmdqbXA6ICVkIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIvDF0sXNy87V1MkgaW1wbGVtZW50YXRpb24vZGVmaW5pdGlvbiIKKworIzogaWZfc25pZmYuYzo2OAorbXNnaWQgIlNob3cgYmFzZSBjbGFzcyBvZiIKK21zZ3N0ciAi+s7BytTJIMLB2s/Xycogy8zB0yIKKworIzogaWZfc25pZmYuYzo2OQorbXNnaWQgIlNob3cgb3ZlcnJpZGRlbiBtZW1iZXIgZnVuY3Rpb24iCittc2dzdHIgIvDPy8HawdTJINrBzabOxc6mKG92ZXJyaWRkZW4pIMbVzsvDpqct3szFzskiCisKKyM6IGlmX3NuaWZmLmM6NzAKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGZpbGUiCittc2dzdHIgIvreydTB1Mkg2iDGwcrMwSIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAi+t7J1MHUySDaINDSz8XL1NUiCisKKyM6IGlmX3NuaWZmLmM6NzMKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGFsbCBwcm9qZWN0cyIKK21zZ3N0ciAi+t7J1MHUySDaINXTpsgg0NLPxcvUptciCisKKyM6IGlmX3NuaWZmLmM6NzQKK21zZ2lkICJSZXRyaWV2ZSIKK21zZ3N0ciAi+t7J1MHUySIKKworIzogaWZfc25pZmYuYzo3NQorbXNnaWQgIlNob3cgc291cmNlIG9mIgorbXNnc3RyICLk1sXSxczPIgorCisjOiBpZl9zbmlmZi5jOjc2Cittc2dpZCAiRmluZCBzeW1ib2wiCittc2dzdHIgIvrOwcrUySDTyc3Xz8wiCisKKyM6IGlmX3NuaWZmLmM6NzcKK21zZ2lkICJCcm93c2UgY2xhc3MiCittc2dzdHIgIvDSz8TJ18nUydPRIMvMwdMiCisKKyM6IGlmX3NuaWZmLmM6NzgKK21zZ2lkICJTaG93IGNsYXNzIGluIGhpZXJhcmNoeSIKK21zZ3N0ciAi+s7BytTJIMvMwdMg1yCmpNLB0simpyIKKworIzogaWZfc25pZmYuYzo3OQorbXNnaWQgIlNob3cgY2xhc3MgaW4gcmVzdHJpY3RlZCBoaWVyYXJjaHkiCittc2dzdHIgIvrOwcrUySDLzMHTINcg2sHCz9LPzsXOpsogp6TSwdLIpqciCisKKyM6IGlmX3NuaWZmLmM6ODAKK21zZ2lkICJYcmVmIHJlZmVycyB0byIKK21zZ3N0ciAiWHJlZiDXy8Ha1aQgzsEiCisKKyM6IGlmX3NuaWZmLmM6ODEKK21zZ2lkICJYcmVmIHJlZmVycmVkIGJ5IgorbXNnc3RyICLOwSBYcmVmINfLwdrBzs8g2iIKKworIzogaWZfc25pZmYuYzo4MgorbXNnaWQgIlhyZWYgaGFzIGEiCittc2dzdHIgIlhyZWYgzcGkIgorCisjOiBpZl9zbmlmZi5jOjgzCittc2dpZCAiWHJlZiB1c2VkIGJ5IgorbXNnc3RyICJYcmVmINfJy8/SydPUwc7PIgorCisjOiBpZl9zbmlmZi5jOjg0Cittc2dpZCAiU2hvdyBkb2N1IG9mIgorbXNnc3RyICLwz8vB2sHUySBkb2N1IgorCisjOiBpZl9zbmlmZi5jOjg1Cittc2dpZCAiR2VuZXJhdGUgZG9jdSBmb3IiCittc2dzdHIgIvPU18/SydTJIGRvY3UgxMzRIgorCisjOiBpZl9zbmlmZi5jOjk3Cittc2dpZCAiIgorIkNhbm5vdCBjb25uZWN0IHRvIFNOaUZGKy4gQ2hlY2sgZW52aXJvbm1lbnQgKHNuaWZmZW1hY3MgbXVzdCBiZSBmb3VuZCBpbiAiCisiJFBBVEgpLlxuIgorbXNnc3RyICIiCisi7sUgzc/W1SDapMTOwdTJ09Eg2iBTTmlGRisuIPDF0sXXptLUxSDP1M/exc7O0VxuIgorIihzbmlmZmVtYWNzIM7FIMLVzM8g2s7BysTFzs8g1SDbzNHI1SDQz9vVy9UpLlxuIgorCisjOiBpZl9zbmlmZi5jOjQyNQorbXNnaWQgIkUyNzQ6IFNuaWZmOiBFcnJvciBkdXJpbmcgcmVhZC4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJFMjc0OiBTbmlmZjog8M/NyczLwSDQwcQg3sHTINreydTV18HOztEuIPemxKTEzsHOzyIKKworIzogaWZfc25pZmYuYzo1NTMKK21zZ2lkICJTTmlGRisgaXMgY3VycmVudGx5ICIKK21zZ3N0ciAi2sHSwdogU05pRkYiCisKKyM6IGlmX3NuaWZmLmM6NTU1Cittc2dpZCAibm90ICIKK21zZ3N0ciAizsUgIgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAi0KbEpMTOwc7JyiIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6IO7F16bEz83FINrB0MnUwc7O0SDEzyBTTmlGRis6ICVzIgorCisjOiBpZl9zbmlmZi5jOjYwNQorbXNnaWQgIkUyNzY6IEVycm9yIGNvbm5lY3RpbmcgdG8gU05pRkYrIgorbXNnc3RyICJFMjc2OiDwz83JzMvBINCmxCDewdMg2qTEzsHOztEg2iBTTmlGRisiCisKKyM6IGlmX3NuaWZmLmM6MTAxMAorbXNnaWQgIkUyNzg6IFNOaUZGKyBub3QgY29ubmVjdGVkIgorbXNnc3RyICJFMjc4OiBTTmlGRisgzsUg0KbEpMTOwc7PIgorCisjOiBpZl9zbmlmZi5jOjEwMTkKK21zZ2lkICJFMjc5OiBOb3QgYSBTTmlGRisgYnVmZmVyIgorbXNnc3RyICJFMjc5OiDuxSCkIMLVxsXSz80gU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwODQKK21zZ2lkICJTbmlmZjogRXJyb3IgZHVyaW5nIHdyaXRlLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIlNuaWZmLiDQz83JzMvBINrB0MnT1S4g96bEpMTOwc7PIgorCisjOiBpZl90Y2wuYzo0MTkKK21zZ2lkICJpbnZhbGlkIGJ1ZmZlciBudW1iZXIiCittc2dzdHIgIs7F16bSzsEgzsHa18EgwtXGxdLBIgorCisjOiBpZl90Y2wuYzo0NjUgaWZfdGNsLmM6OTMyIGlmX3RjbC5jOjExMTEKK21zZ2lkICJub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICLOxSDEpqQgKNDPy8kg3c8pIgorCisjOiBpZl90Y2wuYzo1MDIKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAizsXXpsTPzcEgz9DDptEiCisKKyMuID8/PworIzogaWZfdGNsLmM6Nzc1Cittc2dpZCAiY2Fubm90IHNldCBsaW5lKHMpIgorbXNnc3RyICLOxSDNz9bVINrBxMHUySDS0cTLySIKKworIyBtc2dzdHIgIkUxOTogIgorIzogaWZfdGNsLmM6ODQ2Cittc2dpZCAibWFyayBub3Qgc2V0IgorbXNnc3RyICLQz82m1MvVIM7FINfLwdrBzs8iCisKKyM6IGlmX3RjbC5jOjg1MiBpZl90Y2wuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdyAlZCBjb2x1bW4gJWQiCittc2dzdHIgItLRxM/LICVkIMvPzM/Oy8EgJWQiCisKKyM6IGlmX3RjbC5jOjg4MgorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgIu7FIM3P1tUg19PUwdfJ1MkvxM/EwdTJINLRxM/LIgorCisjOiBpZl90Y2wuYzoxMjY5Cittc2dpZCAidW5rbm93biBmbGFnOiAiCittc2dzdHIgIs7F16bEz83JyiDQ0sHQz9LFw9g6ICIKKworIzogaWZfdGNsLmM6MTMzOQorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICLuxdemxM/NwSDP0MOm0SIKKworIzogaWZfdGNsLmM6MTQyNAorbXNnaWQgImtleWJvYXJkIGludGVycnVwdCIKK21zZ3N0ciAi0MXSxdLXwc7PIMvP0snT1NXXwd7FzSIKKworIzogaWZfdGNsLmM6MTQyOQorbXNnaWQgInZpbSBlcnJvciIKK21zZ3N0ciAi0M/NyczLwSBWaW0iCisKKyM6IGlmX3RjbC5jOjE0NzIKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIs7FIM3P1tUg09TXz9LJ1Mkgy8/Nwc7E1SDEzNEg16bLzsEvwtXGxdLBOiDPwifFy9Qg18nE0czRpNTY09EiCisKKyM6IGlmX3RjbC5jOjE1NDYKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICLuxSDNz9bVINrB0sWk09TS1dfB1Mkg0M/EpsA6IMLVxsXSL9emy87PINXWxSDazsnd1aTU2NPRIgorCisjLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIzogaWZfdGNsLmM6MTU2MworbXNnaWQgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgY29ycnVwdCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byAiCisidmltLWRldkB2aW0ub3JnIgorbXNnc3RyICIiCisiRTI4MDog8O/t6ezr4SDXIKbO1MXSxsXK06Yg2iBUQ0w6IM3P1szJ188g0M/by8/E1sXOzyDT0MnTz8sg0M/TyczBzs7YLi4gIgorIvDP16bEz83UxSwgwtXE2MzB08vBLCDOwSB2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjE1NjQKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIgorbXNnc3RyICLuxSDNz9bVINrB0sWk09TS1dfB1Mkg0M/EpsA6INDP08nMwc7O0SDOwSDC1cbF0i/XpsvOzyDOxSDazsHKxMXOzyIKKworIzogaWZfdGNsLmM6MTcyNQorbXNnaWQgIlNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBUY2wgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAi98nCwd7UxSwgw9Egy8/Nwc7EwSDXyc3LztXUwSwgwqbCzKbP1MXLwSBUY2wgzsUgzc/WxSDC1dTJINrB18HO1MHWxc7BLiIKKworIzogaWZfdGNsLmM6MTg4NworbXNnaWQgIiIKKyJFMjgxOiBUQ0wgRVJST1I6IGV4aXQgY29kZSBpcyBub3QgaW50IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLm9yZyIKK21zZ3N0ciAiIgorIkUyODA6IPDv7ens6+Eg1yCmztTF0sbFytOmINogVENMOiDNz9bMydfPINLF2tXM2NTB1CDOxSBpbnQuLiDwz9emxM/N1MUsICIKKyLC1cTYzMHTy8EsIM7BIHZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MjAwNworbXNnaWQgImNhbm5vdCBnZXQgbGluZSIKK21zZ3N0ciAizsUgzc/W1SDEptPUwdTJINLRxM/LIgorCisjOiBpZl94Y21kc3J2LmM6MjA5Cittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAi7sUgzc/W1SDawdLFpNPU0tXXwdTJIKbNJ9Eg08XS18XSwSIKKworIzogaWZfeGNtZHNydi5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUzNTQ6IO7FzcGkINrB0sXF09TSz9fBzsnIINPF0tfF0qbXIM7BIKbNJ9EgXCIlc1wiIgorCisjOiBpZl94Y21kc3J2LmM6NDUxCittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODog7sUg18TBzM/T0SDXpsSm08zB1Mkgy8/Nwc7E1SDEzyDLps7DxdfPpyDQ0s/H0sHNySIKKworIzogaWZfeGNtZHNydi5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNlcnZlciBpZCB1c2VkOiAlcyIKK21zZ3N0ciAi98nLz9LJ09TBzs8gzsXXptLO1SDOwdrX1SDTxdLXxdLBIDolcyIKKworIzogaWZfeGNtZHNydi5jOjEwNjYKK21zZ2lkICJFMjQ5OiBjb3VsZG4ndCByZWFkIFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSIKK21zZ3N0ciAiRTI0OTogzsUgzc/W1SDa3snUwdTJIN7B09TJztUg0sWk09TS1SDa0sHay8EgVmltIgorCisjOiBpZl94Y21kc3J2LmM6MTA3NworbXNnaWQgIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBpcyBiYWRseSBmb3JtZWQuICBEZWxldGVkISIKK21zZ3N0ciAiRTI1MTog3sHT1MnOwSDSxaTT1NLVINrSwdrLwSBWaW0gzsXXptLOzyDaxs/Szc/Xwc7BLiAg98nEwczFzs8hIgorCisjOiBtYWluLmM6NTMgb3B0aW9uLmM6MzE2MiBvcHRpb24uYzozMjY5Cittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIu7F16bEz83BIM/Qw6bRIgorCisjOiBtYWluLmM6NTUKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAi+sHCwcfB1M8gwdLH1c3FztSm1yIKKworIzogbWFpbi5jOjU3Cittc2dpZCAiQXJndW1lbnQgbWlzc2luZyBhZnRlciIKK21zZ3N0ciAi99TSwd7Fzs8gwdLH1c3FztTJINCm08zRIgorCisjOiBtYWluLmM6NTkKK21zZ2lkICJHYXJiYWdlIGFmdGVyIG9wdGlvbiIKK21zZ3N0ciAi882m1NTRINDP08zRIM/Qw6anIgorCisjOiBtYWluLmM6NjEKK21zZ2lkICJUb28gbWFueSBcIitjb21tYW5kXCIgb3IgXCItYyBjb21tYW5kXCIgYXJndW1lbnRzIgorbXNnc3RyICL6wcLBx8HUzyAnKycgwcLPICctYycgwdLH1c3FztSm1yIKKworIyBtc2dzdHIgIkUxNDogIgorIzogbWFpbi5jOjYzCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBmb3IiCittc2dzdHIgIu7F16bSzsnKIMHSx9XNxc7UIMTM0SIKKworIzogbWFpbi5jOjQzNgorbXNnaWQgIlRoaXMgVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgZGlmZiBmZWF0dXJlLiIKK21zZ3N0ciAi49Eg18XS06bRIFZpbSDOxSDC1czBINrLz83QpszYz9fBzsEg2iDQpsTU0snNy8/AIGRpZmYuIgorCisjOiBtYWluLmM6ODU4Cittc2dpZCAiQXR0ZW1wdCB0byBvcGVuIHNjcmlwdCBmaWxlIGFnYWluOiBcIiIKK21zZ3N0ciAi89DSz8LBINemxMvSydTJIN3FINLB2iDGwcrMIMvPzcHOxCBcIiIKKworIzogbWFpbi5jOjg2MiBtYWluLmM6ODY5IG1haW4uYzo5MTMgbWVtbGluZS5jOjM2NzMgbWVtbGluZS5jOjM2NzcKKyM6IHZlcnNpb24uYzoxMDU4IHZlcnNpb24uYzoxMDYzIHZlcnNpb24uYzoxMDY4IHZlcnNpb24uYzoxMDczIHZlcnNpb24uYzoxMDc4CisjOiB2ZXJzaW9uLmM6MTA4MyB2ZXJzaW9uLmM6MTA4OSB2ZXJzaW9uLmM6MTA5MyB2ZXJzaW9uLmM6MTA5NyB2ZXJzaW9uLmM6MTEwMgorIzogdmVyc2lvbi5jOjExMDkgdmVyc2lvbi5jOjExMTcgdmVyc2lvbi5jOjExMjMKK21zZ2lkICJcIlxuIgorbXNnc3RyICJcIlxuIgorCisjOiBtYWluLmM6ODY3Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICLuxSDNz9bVINDSz97J1MHUyTogXCIiCisKKyM6IG1haW4uYzo5MTEKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIu7FIM3P1tUg16bEy9LJ1Mkg0csg16bIpsTOycogxsHKzDogXCIiCisKKyM6IG1haW4uYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZpbGVzIHRvIGVkaXRcbiIKK21zZ3N0ciAiJWQgxsHKzKbXINrBzMnbyczP09hcbiIKKworIzogbWFpbi5jOjEwOTQKK21zZ2lkICJWaW06IFdhcm5pbmc6IE91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06IPXXwcfBOiD3ycimxCDKxMUgzsUgzsEg1MXSzabOwcxcbiIKKworIzogbWFpbi5jOjEwOTYKK21zZ2lkICJWaW06IFdhcm5pbmc6IElucHV0IGlzIG5vdCBmcm9tIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiD118HHwTog98imxM4gysTFIM7FINog1MXSzabOwczVXG4iCisKKyMuIGp1c3QgaW4gY2FzZS4uCisjOiBtYWluLmM6MTE3MQorbXNnaWQgInByZS12aW1yYyBjb21tYW5kIGxpbmUiCittc2dzdHIgIsvPzcHOxMkg0cumINfJy8/O1dfBzMnT0SDEzyB2aW1yYyIKKworIzogbWFpbi5jOjEyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6IO7FIM3P1tUg0NLP3snUwdTJIFwiJXNcIiIKKworIyBtc2dzdHIgIkUyODI6ICIKKyM6IG1haW4uYzoyMTc1Cittc2dpZCAiIgorIlxuIgorIk1vcmUgaW5mbyB3aXRoOiBcInZpbSAtaFwiXG4iCittc2dzdHIgIiIKKyJcbiIKKyL32s7BytTFIMKmzNjbxTogdmltIC1oXG4iCisKKyM6IG1haW4uYzoyMjA4Cittc2dpZCAiW2ZpbGUgLi5dICAgICAgIGVkaXQgc3BlY2lmaWVkIGZpbGUocykiCittc2dzdHIgIlvGwcrMIC4uXSAgICAgICDSxcTBx9XXwdTJINfLwdrBzsnKIMbByswiCisKKyM6IG1haW4uYzoyMjA5Cittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAg3snUwdTJINTFy9PUINogc3RkaW4iCisKKyM6IG1haW4uYzoyMjEwCittc2dpZCAiLXQgdGFnICAgICAgICAgIGVkaXQgZmlsZSB3aGVyZSB0YWcgaXMgZGVmaW5lZCIKK21zZ3N0ciAiLXQg0M/NptTLwSAgICAgINDF0sXUySDEzyDQz82m1MvJIgorCisjOiBtYWluLmM6MjIxMgorbXNnaWQgIi1xIFtlcnJvcmZpbGVdICBlZGl0IGZpbGUgd2l0aCBmaXJzdCBlcnJvciIKK21zZ3N0ciAiLXEgW8bBysxdICAgICAgINDF0sXK1MkgxM8g0MXS28+nINDPzcnMy8kiCisKKyM6IG1haW4uYzoyMjIxCittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIvfWydfBytTFOiIKKworIzogbWFpbi5jOjIyMjQKK21zZ2lkICIgdmltIFthcmd1bWVudHNdICIKK21zZ3N0ciAiIHZpbSBbwdLH1c3FztTJXSAiCisKKyM6IG1haW4uYzoyMjI4Cittc2dpZCAiIgorIlxuIgorIiAgIG9yOiIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgwcLPOiIKKworIzogbWFpbi5jOjIyMzEKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQXJndW1lbnRzOlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisi4dLH1c3FztTJOlxuIgorCisjOiBtYWluLmM6MjIzMgorbXNnaWQgIi0tXHRcdFx0T25seSBmaWxlIG5hbWVzIGFmdGVyIHRoaXMiCittc2dzdHIgIi0tXHRcdFx07MnbxSCmzcXOwSDGwcrMptcg0KbTzNEgw9jPx88iCisKKyM6IG1haW4uYzoyMjM0Cittc2dpZCAiLXJlZ2lzdGVyXHRcdFJlZ2lzdGVyIHRoaXMgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItcmVnaXN0ZXJcdFx0+sHSxaTT1NLV18HUySDDxcogZ3ZpbSDexdLF2iBPTEUiCisKKyM6IG1haW4uYzoyMjM1Cittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi11bnJlZ2lzdGVyXHRcdPemxM2mzsnUySDSxaTT1NLBw6bAIMPYz8fPIGd2aW0g3sXSxdogT0xFIgorCisjOiBtYWluLmM6MjIzOAorbXNnaWQgIi1nXHRcdFx0UnVuIHVzaW5nIEdVSSAobGlrZSBcImd2aW1cIikiCittc2dzdHIgIi1nXHRcdFx098nLz87B1Mkg18nLz9LJ09TP19XA3skgR1VJICjOpsLJIFwiZ3ZpbVwiKSIKKworIzogbWFpbi5jOjIyMzkKK21zZ2lkICItZlx0XHRcdEZvcmVncm91bmQ6IERvbid0IGZvcmsgd2hlbiBzdGFydGluZyBHVUkiCittc2dzdHIgIi1mXHRcdFx07sUg2sHMydvB1Mkg1MXSzabOwcwg0KbTzNEg2sHQ1dPL1SBHVUkiCisKKyM6IG1haW4uYzoyMjQxCittc2dpZCAiLXZcdFx0XHRWaSBtb2RlIChsaWtlIFwidmlcIikiCittc2dzdHIgIi12XHRcdFx08sXWyc0gVmkgKM6mwskgXCJ2aVwiKSIKKworIzogbWFpbi5jOjIyNDIKK21zZ2lkICItZVx0XHRcdEV4IG1vZGUgKGxpa2UgXCJleFwiKSIKK21zZ3N0ciAiLWVcdFx0XHTyxdbJzSBFeCAozqbCySBcImV4XCIpIgorCisjOiBtYWluLmM6MjI0MworbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHTw0sHDwNfB1Mkgzc/X3svJICjMydvFIMTM0SBcImV4XCIpIgorCisjOiBtYWluLmM6MjI0NQorbXNnaWQgIi1kXHRcdFx0RGlmZiBtb2RlIChsaWtlIFwidmltZGlmZlwiKSIKK21zZ3N0ciAiLWRcdFx0XHTyxdbJzSBkaWZmICjOpsLJIFwidmltZGlmZlwiKSIKKworIzogbWFpbi5jOjIyNDcKK21zZ2lkICIteVx0XHRcdEVhc3kgbW9kZSAobGlrZSBcImV2aW1cIiwgbW9kZWxlc3MpIgorbXNnc3RyICIteVx0XHRcdPDSz9PUycog0sXWyc0gKM6mwskgXCJldmltXCIpIgorCisjOiBtYWluLmM6MjI0OAorbXNnaWQgIi1SXHRcdFx0UmVhZG9ubHkgbW9kZSAobGlrZSBcInZpZXdcIikiCittc2dzdHIgIi1SXHRcdFx08sXWyc0g0MXSxcfM0cTVICjOpsLJIFwidmlld1wiKSIKKworIzogbWFpbi5jOjIyNDkKK21zZ2lkICItWlx0XHRcdFJlc3RyaWN0ZWQgbW9kZSAobGlrZSBcInJ2aW1cIikiCittc2dzdHIgIi1aXHRcdFx0+sHCz9LPzsXOycog0sXWyc0gKM6mwskgXCJydmltXCIpIgorCisjOiBtYWluLmM6MjI1MAorbXNnaWQgIi1tXHRcdFx0TW9kaWZpY2F0aW9ucyAod3JpdGluZyBmaWxlcykgbm90IGFsbG93ZWQiCittc2dzdHIgIi1tXHRcdFx0+s2mzskgKNrB0MnTIMbBysym1ykgzsUgxM/a18/Mxc7PIgorCisjOiBtYWluLmM6MjI1MQorbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdPrNps7JINcg1MXL09SmIMbBysym1yDOxSDEz9rXz8zFzs8iCisKKyM6IG1haW4uYzoyMjUyCittc2dpZCAiLWJcdFx0XHRCaW5hcnkgbW9kZSIKK21zZ3N0ciAiLWJcdFx0XHTk16bKy8/Xycog0sXWyc0iCisKKyM6IG1haW4uYzoyMjU0Cittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx08sXWzckgbGlzcCIKKworIzogbWFpbi5jOjIyNTYKK21zZ2lkICItQ1x0XHRcdENvbXBhdGlibGUgd2l0aCBWaTogJ2NvbXBhdGlibGUnIgorbXNnc3RyICItQ1x0XHRcdPLF1snNLCDT1c2m087JyiDaIFZpOiAnY29tcGF0aWJsZSciCisKKyM6IG1haW4uYzoyMjU3Cittc2dpZCAiLU5cdFx0XHROb3QgZnVsbHkgVmkgY29tcGF0aWJsZTogJ25vY29tcGF0aWJsZSciCittc2dzdHIgIi1OXHRcdFx07sUg2s/X06bNINPVzabTzsnKINogVmkg0sXWyc06ICdub2NvbXBhdGlibGUnIgorCisjOiBtYWluLmM6MjI1OAorbXNnaWQgIi1WW05dXHRcdFZlcmJvc2UgbGV2ZWwiCittc2dzdHIgIi1WW05dXHRcdPKm18XO2CDHwczB08zJ18/T1KYiCisKKyM6IG1haW4uYzoyMjU5Cittc2dpZCAiLURcdFx0XHREZWJ1Z2dpbmcgbW9kZSIKK21zZ3N0ciAiLURcdFx0XHTyxdbJzSDOwczBx8/E1tXXwc7O0SIKKworIzogbWFpbi5jOjIyNjAKK21zZ2lkICItblx0XHRcdE5vIHN3YXAgZmlsZSwgdXNlIG1lbW9yeSBvbmx5IgorbXNnc3RyICItblx0XHRcdO7FIMvP0snT1NXXwdTJ09EgxsHKzM/NIM/CzabO1Swg1NLJzcHUySDV08Ug1yDQwc0n0dSmIgorCisjOiBtYWluLmM6MjI2MQorbXNnaWQgIi1yXHRcdFx0TGlzdCBzd2FwIGZpbGVzIGFuZCBleGl0IgorbXNnc3RyICItclx0XHRcdPDPy8HawdTJIMbByszJIM/CzabO1SCmINfJytTJIgorCisjOiBtYWluLmM6MjI2MgorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciAops3RIMbByszBKVx096bEzs/XydTJIMHXwdKmys7PINrBy6bO3sXOycog08XBztMiCisKKyM6IG1haW4uYzoyMjYzCittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRcdPTFINPBzcUg3c8gyiAtciIKKworIzogbWFpbi5jOjIyNjUKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdFx08SDUwcsg0s/a1c2mwCDDxSDMydvFIMTM0SBBbWlnYS4g98nCwd4sIEJyYW0uIgorCisjOiBtYWluLmM6MjI2NgorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPNDSydPU0qbKPlx0XHRcdPfJy8/SydPUz9fV18HUySDQ0snT1NKmyiDEzNEg19fPxNUv18nXz8TVIgorCisjOiBtYWluLmM6MjI2OQorbXNnaWQgIi1IXHRcdFx0c3RhcnQgaW4gSGVicmV3IG1vZGUiCittc2dzdHIgIi1IXHRcdFx08s/a0M/ewdTJINLF1snNpiBIZWJyZXciCisKKyM6IG1haW4uYzoyMjcyCittc2dpZCAiLUZcdFx0XHRzdGFydCBpbiBGYXJzaSBtb2RlIgorbXNnc3RyICItRlx0XHRcdPLP2tDP3sHUySDXINDF0tPYy8/N1SDSxdbJzaYiCisKKyM6IG1haW4uYzoyMjc0Cittc2dpZCAiLVQgPHRlcm1pbmFsPlx0U2V0IHRlcm1pbmFsIHR5cGUgdG8gPHRlcm1pbmFsPiIKK21zZ3N0ciAiLVQgPNTF0s2mzsHMPlx098nazsneydTJINTJ0CDUxdLNps7BzNUiCisKKyM6IG1haW4uYzoyMjc1Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx098nLz9LJ09TB1Mkg0M/Ewc7JyiDGwcrMINHLIC52aW1yYyIKKworIzogbWFpbi5jOjIyNzcKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLXUgPGd2aW1yYz5cdFx098nLz9LJ09TB1Mkg0M/Ewc7JyiDGwcrMINHLIC5ndmltcmMiCisKKyM6IG1haW4uYzoyMjc5Cittc2dpZCAiLS1ub3BsdWdpblx0XHREb24ndCBsb2FkIHBsdWdpbiBzY3JpcHRzIgorbXNnc3RyICItLW5vcGx1Z2luXHRcdO7FINfBztTB1snUySDGwcrMyS3Ez9DP187Fzs7RIgorCisjOiBtYWluLmM6MjI4MAorbXNnaWQgIi1vW05dXHRcdE9wZW4gTiB3aW5kb3dzIChkZWZhdWx0OiBvbmUgZm9yIGVhY2ggZmlsZSkiCittc2dzdHIgIiIKKyItb1tOXVx0XHTyz9rL0snUySBOINemy8/OICjRy93PIM7FINfLwdrBzs8gLS0g0M9cbiIKKyJcdFx0XHTPxM7PzdUgxMzRIMvP1s7Px88gxsHKzMEpIgorCisjOiBtYWluLmM6MjI4MQorbXNnaWQgIi1PW05dXHRcdGxpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdM6mwskgLW8sIMHMxSDQz8SmzMnUySDXpsvOwSDXxdLUycvBzNjOzyIKKworIzogbWFpbi5jOjIyODIKK21zZ2lkICIrXHRcdFx0U3RhcnQgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIitcdFx0XHTyz9rQz97B1Mkg1yDLps7DpiDGwcrMwSIKKworIzogbWFpbi5jOjIyODMKK21zZ2lkICIrPGxudW0+XHRcdFN0YXJ0IGF0IGxpbmUgPGxudW0+IgorbXNnc3RyICIrPNLRxM/LPlx0XHTyz9rQz97B1MkgzsEg18vB2sHOz83VINLRxMvVIgorCisjOiBtYWluLmM6MjI4NQorbXNnaWQgIi0tY21kIDxjb21tYW5kPlx0RXhlY3V0ZSA8Y29tbWFuZD4gYmVmb3JlIGxvYWRpbmcgYW55IHZpbXJjIGZpbGUiCittc2dzdHIgIiIKKyItLWNtZCA8y8/Nwc7EwT5cdPfJy8/OwdTJIMvPzcHOxNUg0MXSxcQg18nLz87Bzs7RzSDC1cTYLdHLycggLipyYyDGwcrMptciCisKKyM6IG1haW4uYzoyMjg3Cittc2dpZCAiLWMgPGNvbW1hbmQ+XHRcdEV4ZWN1dGUgPGNvbW1hbmQ+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1jIDzLz83BzsTBPlx0XHT3ycvPzsHUySDLz83BzsTVINCm08zRINrB18HO1MHWxc7O0SDQxdLbz8fPIMbByszBIgorCisjOiBtYWluLmM6MjI4OAorbXNnaWQgIi1TIDxzZXNzaW9uPlx0XHRTb3VyY2UgZmlsZSA8c2Vzc2lvbj4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLVMgPNPFwc7TPlx0XHT3ycvPzsHUySDQz8TBzsnKIMbByswg0KbTzNEg0MXS28/HzyDawdfBztTB1sXOz8fPIMbByszBIgorCisjOiBtYWluLmM6MjI4OQorbXNnaWQgIi1zIDxzY3JpcHRpbj5cdFJlYWQgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBmaWxlIDxzY3JpcHRpbj4iCittc2dzdHIgIi1zIDzGwcrMPlx0XHT63snUwdTJIMvPzcHOxMkg2iDGwcrMwSA8c2NyaXB0aW4+IgorCisjOiBtYWluLmM6MjI5MAorbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDzGwcrMPlx0XHTkz9DJ08HUySDV06YgzsHC0sHOpiDLz83BzsTJIMTPINDPxMHOz8fPIMbByszBIgorCisjOiBtYWluLmM6MjI5MQorbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLXcgPMbBysw+XHRcdPrB0MnTwdTJINXTpiDOwcLSwc6mIMvPzcHOxMkg1SDQz8TBzsnKIMbByswiCisKKyM6IG1haW4uYzoyMjkzCittc2dpZCAiLXhcdFx0XHRFZGl0IGVuY3J5cHRlZCBmaWxlcyIKK21zZ3N0ciAiLXhcdFx0XHTyxcTBx9XXwdTJINrB28nG0s/Xwc7JyiDGwcrMIgorCisjOiBtYWluLmM6MjI5NworbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0Q29ubmVjdCB2aW0gdG8gdGhpcyBwYXJ0aWN1bGFyIFgtc2VydmVyIgorbXNnc3RyICItZGlzcGxheSA8xMnT0MzFyj5cdPfJy8/OwdTJIHZpbSDXycvP0snT1M/X1cDeySDQz8TBzsnKIMTJ09DMxcoiCisKKyM6IG1haW4uYzoyMjk5Cittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHTuxSDaJ6TEztXXwdTJ09Eg2iBYINPF0tfF0s/NIgorCisjOiBtYWluLmM6MjMwMQorbXNnaWQgIi0tc29ja2V0aWQgPHhpZD5cdE9wZW4gVmltIGluc2lkZSBhbm90aGVyIEdUSyB3aWRnZXQiCittc2dzdHIgIi0tc29ja2V0aWQgPHhpZD5cdPemxMvUydLJIFZpbSDXIKbO28/N1SDFzMXNxc7UpiCmztTF0sbFytPVIEdUSyIKKworIzogbWFpbi5jOjIzMDUKK21zZ2lkICItLXJlbW90ZSA8ZmlsZXM+XHRFZGl0IDxmaWxlcz4gaW4gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZSA8xsHKzMk+XHTyxcTBx9XXwdTJIMbByszJIM7BIFZpbSDTxdLXxdKmIKYg2sHXxdLbydTJINLPws/U1SIKKworIzogbWFpbi5jOjIzMDYKK21zZ2lkICIiCisiLS1yZW1vdGUtd2FpdCA8ZmlsZXM+ICBBcyAtLXJlbW90ZSBidXQgd2FpdCBmb3IgZmlsZXMgdG8gaGF2ZSBiZWVuIGVkaXRlZCIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLXdhaXQgPMbByszJPiAuLi4sIMHMxSDawd7Fy8HUySDQz8vJINXTpiDGwcrMySDC1cTFINemxNLFxMHHz9fBzs8iCisKKyM6IG1haW4uYzoyMzA3Cittc2dpZCAiLS1yZW1vdGUtc2VuZCA8a2V5cz5cdFNlbmQgPGtleXM+IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUtc2VuZCA808nN18/MyT4g96bEptPMwdTJIDzTyc3Xz8zJPiDTxdLXxdLVIKYg2sHXxdLbydTJINLPws/U1SIKKworIzogbWFpbi5jOjIzMDgKK21zZ2lkICItLXJlbW90ZS1leHByIDxleHByPlx0RXZhbHVhdGUgPGV4cHI+IGluIGEgVmltIHNlcnZlciBhbmQgcHJpbnQgcmVzdWx0IgorbXNnc3RyICIiCisiLS1yZW1vdGUtZXhwciA818nSwdo+IPfJy8/OwdTJINfJ0sHaIM7BINPF0tfF0qYsIKYgzsHE0tXL1dfB1Mkg0sXa1czY1MHUIgorCisjOiBtYWluLmM6MjMwOQorbXNnaWQgIi0tc2VydmVybGlzdFx0XHRMaXN0IGF2YWlsYWJsZSBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0IgorbXNnc3RyICIiCisiLS1zZXJ2ZXJsaXN0XHRcdPDPy8HawdTJINPQydPPyyDOwdHXzsnIINPF0tfF0qbXIFZpbSCmINrB18XS28nUySDSz8LP1NUiCisKKyM6IG1haW4uYzoyMzEwCittc2dpZCAiLS1zZXJ2ZXJuYW1lIDxuYW1lPlx0U2VuZCB0by9iZWNvbWUgdGhlIFZpbSBzZXJ2ZXIgPG5hbWU+IgorbXNnc3RyICItLXNlcnZlcm5hbWUgPKbNJ9E+XHTz0KbMy9XXwdTJ09Eg2i/T1MHUySBWaW0g08XS18XSz80g2iDQz8TBzsnNIKbNJ9HNIgorCisjOiBtYWluLmM6MjMxMworbXNnaWQgIi1pIDx2aW1pbmZvPlx0XHRVc2UgPHZpbWluZm8+IGluc3RlYWQgb2YgLnZpbWluZm8iCittc2dzdHIgIi1pIDx2aW1pbmZvPlx0XHT3ycvP0snT1MHUySDQz8TBzsnKIMbByswg0csgLnZpbWluZm8iCisKKyM6IG1haW4uYzoyMzE1Cittc2dpZCAiLWhcdFx0XHRwcmludCBIZWxwICh0aGlzIG1lc3NhZ2UpIGFuZCBleGl0IgorbXNnc3RyICItaFx0XHRcdO7BxNLVy9XXwdTJIMPFINDP16bEz83Mxc7O0SwgpiDXycrUySIKKworIzogbWFpbi5jOjIzMTYKK21zZ2lkICItLXZlcnNpb25cdFx0cHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKK21zZ3N0ciAiLS12ZXJzaW9uXHRcdM7BxNLVy9XXwdTJIKbOxs/SzcHDpsAg0NLPINfF0tOmwCDQ0s/H0sHNySIKKworIzogbWFpbi5jOjIzMjAKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoTW90aWYgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyLh0sfVzcXO1MkgxMzRIGd2aW0gKNfF0tOm0SBNb3RpZilcbiIKKworIzogbWFpbi5jOjIzMjMKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoQXRoZW5hIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisi4dLH1c3FztTJIMTM0SBndmltICjXxdLTptEgQXRoZW5hKVxuIgorCisjOiBtYWluLmM6MjMyNgorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4iCittc2dzdHIgIi1kaXNwbGF5IDzEydPQzMXKPlx098nLz87B1MkgdmltINfJy8/SydPUz9fVwN7JINDPxMHOycogxMnT0MzFyiIKKworIzogbWFpbi5jOjIzMjcKK21zZ2lkICItaWNvbmljXHRcdFN0YXJ0IHZpbSBpY29uaWZpZWQiCittc2dzdHIgIi1pY29uaWNcdFx0+sHQydPUydTJIFZpbSIKKworIzogbWFpbi5jOjIzMjkKK21zZ2lkICItbmFtZSA8bmFtZT5cdFx0VXNlIHJlc291cmNlIGFzIGlmIHZpbSB3YXMgPG5hbWU+IgorbXNnc3RyICItbmFtZSA8ps0n0T5cdFx098nLz9LJ09TB1Mkg0sXT1dLTySDEzNEgPKbNYNE+IgorCisjOiBtYWluLmM6MjMzMAorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgKO7FIMSmpClcbiIKKworIzogbWFpbi5jOjIzMzIKK21zZ2lkICItYmFja2dyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3IgdGhlIGJhY2tncm91bmQgKGFsc286IC1iZykiCittc2dzdHIgIi1iYWNrZ3JvdW5kIDzLz8ym0j5cdPfJy8/SydPUwdTJIDzLz8ym0j4gxMzRIMbPztUgKNTBy8/WOiAtYmcpIgorCisjOiBtYWluLmM6MjMzMworbXNnaWQgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZnKSIKK21zZ3N0ciAiIgorIi1mb3JlZ3JvdW5kIDzLz8ym0j5cdPfJy8/SydPUwdTJIDzLz8ym0j4gxMzRINrXyd7Bys7Px88g1MXL09TVICjUwcvP1jogLWZnKSIKKworIzogbWFpbi5jOjIzMzQgbWFpbi5jOjIzNTQKK21zZ2lkICItZm9udCA8Zm9udD5cdFx0VXNlIDxmb250PiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mbikiCittc2dzdHIgIi1mb250IDzb0snG1D5cdPfJy8/SydPUwdTJIDzb0snG1D4gxMzRINrXyd7Bys7Px88g1MXL09TVICjUwcvP1jogLWZuKSIKKworIzogbWFpbi5jOjIzMzUKK21zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCittc2dzdHIgIi1ib2xkZm9udCA829LJxtQ+XHT3ycvP0snT1MHUySA829LJxtQ+IMTM0SDWydLOz8fPINTFy9PU1SIKKworIzogbWFpbi5jOjIzMzYKK21zZ2lkICItaXRhbGljZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGl0YWxpYyB0ZXh0IgorbXNnc3RyICItaXRhbGljZm9udCA829LJxtQ+XHT3ycvP0snT1MHUySA829LJxtQ+IMTM0SDQz8jJzM/HzyDUxcvT1NUiCisKKyM6IG1haW4uYzoyMzM3IG1haW4uYzoyMzU1Cittc2dpZCAiLWdlb21ldHJ5IDxnZW9tPlx0VXNlIDxnZW9tPiBmb3IgaW5pdGlhbCBnZW9tZXRyeSAoYWxzbzogLWdlb20pIgorbXNnc3RyICItZ2VvbWV0cnkgPMfFz80+XHT6wcTB1Mkg0s/azabUySDUwSDQz8zP1sXOztEgKNTBy8/WOiAtZ2VvbSkiCisKKyM6IG1haW4uYzoyMzM4Cittc2dpZCAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdFVzZSBhIGJvcmRlciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtYncpIgorbXNnc3RyICItYm9yZGVyd2lkdGggPNTP190+XHT309TBzs/XydTJINTP193JztUgzcXWIDzUz9fdPiAo1MHLz9Y6IC1idykiCisKKyM6IG1haW4uYzoyMzM5Cittc2dpZCAiLXNjcm9sbGJhcndpZHRoIDx3aWR0aD4gIFVzZSBhIHNjcm9sbGJhciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtc3cpIgorbXNnc3RyICItc2Nyb2xsYmFyd2lkdGggPNTP190+ICD309TBzs/XydTJINTP193JztUgzKbOpsrLySDa09XX1SAo1MHLz9Y6IC1zdykiCisKKyM6IG1haW4uYzoyMzQxCittc2dpZCAiLW1lbnVoZWlnaHQgPGhlaWdodD5cdFVzZSBhIG1lbnUgYmFyIGhlaWdodCBvZiA8aGVpZ2h0PiAoYWxzbzogLW1oKSIKK21zZ3N0ciAiLW1lbnVoZWlnaHQgPNfJ08/UwT5cdPfT1MHOz9fJ1Mkg18nTz9TVIM3FzsAgPNfJ08/UwT4gKNTBy8/WOiAtbWgpIgorCisjOiBtYWluLmM6MjM0MyBtYWluLmM6MjM1NgorbXNnaWQgIi1yZXZlcnNlXHRcdFVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiAtcnYpIgorbXNnc3RyICItcmV2ZXJzZVx0XHTvwsXSztXUySDLz8zYz9LJICjUwcvP1jogLXJ2KSIKKworIzogbWFpbi5jOjIzNDQKK21zZ2lkICIrcmV2ZXJzZVx0XHREb24ndCB1c2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogK3J2KSIKK21zZ3N0ciAiK3JldmVyc2VcdFx07sUgz8LF0tTB1Mkgy8/M2M/SySAo1MHLz9Y6ICtydikiCisKKyM6IG1haW4uYzoyMzQ1Cittc2dpZCAiLXhybSA8cmVzb3VyY2U+XHRTZXQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSIKK21zZ3N0ciAiLXhybSA80sXT1dLTPlx099PUwc7P18nUySDXpsTQz9emxM7JyiDSxdPV0tMiCisKKyM6IG1haW4uYzoyMzQ4Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKFJJU0MgT1MgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyLh0tvVzcXO1MkgxM8gZ3ZpbSAo18XS06bRIFJJU0MgT1MpOlxuIgorCisjOiBtYWluLmM6MjM0OQorbXNnaWQgIi0tY29sdW1ucyA8bnVtYmVyPlx0SW5pdGlhbCB3aWR0aCBvZiB3aW5kb3cgaW4gY29sdW1ucyIKK21zZ3N0ciAiLS1jb2x1bW5zIDzLpszYy6bT1Ng+XHTwz97B1MvP18Eg28nSyc7BINemy87BINcg08nN18/MwcgiCisKKyM6IG1haW4uYzoyMzUwCittc2dpZCAiLS1yb3dzIDxudW1iZXI+XHRJbml0aWFsIGhlaWdodCBvZiB3aW5kb3cgaW4gcm93cyIKK21zZ3N0ciAiLS1yb3dzIDzLpszYy6bT1Ng+XHTwz97By8/XwSDXydPP1MEg16bLzsEg1yDS0cTLwcgiCisKKyM6IG1haW4uYzoyMzUzCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEdUSysgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyLh0sfVzcXO1MkgxMzRIGd2aW0gKNfF0tOm0SBHVEsrKVxuIgorCisjOiBtYWluLmM6MjM1NworbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4gKGFsc286IC0tZGlzcGxheSkiCittc2dzdHIgIiIKKyItZGlzcGxheSA8xMnT0MzFyj5cdPfJy8/OwdTJIHZpbSDOwSDQz8TBzs/N1SDEydPQzMWnICjUwcvP1jogLS1kaXNwbGF5KSIKKworIzogbWFpbi5jOjIzNTkKK21zZ2lkICItLWhlbHBcdFx0U2hvdyBHbm9tZSBhcmd1bWVudHMiCittc2dzdHIgIi0taGVscFx0XHTwz8vB2sHUySDB0sfVzcXO1MkgR25vbWUiCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyNTg0Cittc2dpZCAiIgorIlxuIgorIlNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisi89DSz8LBINemxKbTzMHUySDXydLB2iDOxSDXxMHMwdPRLlxuIgorCisjLiBMZXQgdmltIHN0YXJ0IG5vcm1hbGx5LgorIzogbWFpbi5jOjI1ODkKK21zZ2lkICIiCisiXG4iCisiU2VuZCBmYWlsZWQuIFRyeWluZyB0byBleGVjdXRlIGxvY2FsbHlcbiIKK21zZ3N0ciAiIgorIlxuIgorIu7FINfEwczP09Eg16bEptPMwdTJIMTBzqYuIPPQ0s/C1aTNzyDXycvPzsHUySDOwSDNptPDplxuIgorCisjOiBtYWluLmM6MjYyMiBtYWluLmM6MjY0MworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBvZiAlZCBlZGl0ZWQiCittc2dzdHIgIiVkINogJWQgxsHKzKbXINemxNLFxMHHz9fBzs8iCisKKyM6IG1haW4uYzoyNjY2Cittc2dpZCAiU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAi89DSz8LBINemxKbTzMHUySDXydLB2iDOxSDXxMHMwdPRLlxuIgorCisjOiBtYXJrLmM6NjYwCittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICL2z8TOycgg0M/NptTPyyDOxSDC1czPINfLwdrBzs8iCisKKyM6IG1hcmsuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MzogTm8gbWFya3MgbWF0Y2hpbmcgXCIlc1wiIgorbXNnc3RyICJFMjgzOiDwz82m1MvVIFwiJXNcIiDOxSDazsHKxMXOzyIKKworIyBtc2dzdHIgIkUyODM6ICIKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjY3MworbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyLQz80uINLRxC4gIMvPzC4gxsHKzC/UxcvT1CIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzExCittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKworIyBUT0RPCisjOiBtYXJrLmM6MTA3MworbXNnaWQgIiIKKyJcbiIKKyIjIEZpbGUgbWFya3M6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIPDPzabUy8k6XG4iCisKKyMuIFdyaXRlIHRoZSBqdW1wbGlzdCB3aXRoIC0nCisjOiBtYXJrLmM6MTEwOAorbXNnaWQgIiIKKyJcbiIKKyIjIEp1bXBsaXN0IChuZXdlc3QgZmlyc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDz0MnTz8sg0MXSxcjPxKbXXG4iCisKKyMgVE9ETworIzogbWFyay5jOjEyMDMKK21zZ2lkICIiCisiXG4iCisiIyBIaXN0b3J5IG9mIG1hcmtzIHdpdGhpbiBmaWxlcyAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIPDP0MXSxcTOpiDQz82m1MvJINcgxsHKzMHIICjT0M/ewdTL1SDOz9emKTpcbiIKKworIzogbWFyay5jOjEyODYKK21zZ2lkICJNaXNzaW5nICc+JyIKK21zZ3N0ciAi99TSwd7Fzs8gJz4nIgorCisjOiBtYnl0ZS5jOjM5NQorbXNnaWQgIk5vdCBhIHZhbGlkIGNvZGVwYWdlIgorbXNnc3RyICLrz8TP18Eg09TP0qbOy8EgzsUgptPO1aQiCisKKyM6IG1ieXRlLmM6MzAyOQorbXNnaWQgIkUyODQ6IENhbm5vdCBzZXQgSUMgdmFsdWVzIgorbXNnc3RyICJFMjg0OiDuxSDNz9bVINfT1MHOz9fJ1Mkg2s7B3sXOztEgSUMiCisKKyM6IG1ieXRlLmM6MzE4MQorbXNnaWQgIkUyODU6IEZhaWxlZCB0byBjcmVhdGUgaW5wdXQgY29udGV4dCIKK21zZ3N0ciAiRTI4NTog8M/NyczLwSDQpsQg3sHTINPU18/Sxc7O0SBgaW5wdXQgY29udGV4dCciCisKKyM6IG1ieXRlLmM6MzMyOAorbXNnaWQgIkUyODY6IEZhaWxlZCB0byBvcGVuIGlucHV0IG1ldGhvZCIKK21zZ3N0ciAiRTI4Njog8M/NyczLwSDQpsQg3sHTINPU18/Sxc7O0SBgaW5wdXQgbWV0aG9kJyIKKworIyBtc2dzdHIgIkUyODY6ICIKKyM6IG1ieXRlLmM6MzMzOQorbXNnaWQgIkUyODc6IFdhcm5pbmc6IENvdWxkIG5vdCBzZXQgZGVzdHJveSBjYWxsYmFjayB0byBJTSIKK21zZ3N0ciAiRTI4Nzog9dfBx8E6IM7FIM3P1tUg19PUwc7P18nUySDQz8SmwCDEzNEg2s7J3cXOztEgSU0iCisKKyMgbXNnc3RyICJFMjg3OiAiCisjOiBtYnl0ZS5jOjMzNDUKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODogYGlucHV0IG1ldGhvZCcgzsUg0KbE1NLJzdWkINPUycymIgorCisjIG1zZ3N0ciAiRTI4ODogIgorIzogbWJ5dGUuYzozNDAyCittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IGBpbnB1dCBtZXRob2QnIM7FINCmxNTSyc3VpCDSxcTBx8/Xwc6mINTJ0MkiCisKKyMgbXNnc3RyICJFMjg5OiAiCisjOiBtYnl0ZS5jOjM0NzYKK21zZ2lkICJFMjkwOiBvdmVyLXRoZS1zcG90IHN0eWxlIHJlcXVpcmVzIGZvbnRzZXQiCittc2dzdHIgIkUyOTA6INPUyczYINfJzcHHwaQgZm9udHNldCIKKworIyBtc2dzdHIgIkUyOTA6ICIKKyM6IG1ieXRlLmM6MzUwNAorbXNnaWQgIkUyOTE6IFlvdXIgR1RLKyBpcyBvbGRlciB0aGFuIDEuMi4zLiBTdGF0dXMgYXJlYSBkaXNhYmxlZCIKK21zZ3N0ciAiRTI5MTog98XS06bRIMKmwsymz9TFy8kgR1RLKyDNxc7bwSDawSAxLjIuMy4gYFN0YXR1cyBhcmVhJyDXyc3LztXUzyIKKworIyBtc2dzdHIgIkUyOTE6ICIKKyM6IG1ieXRlLmM6Mzc0MQorbXNnaWQgIkUyOTI6IElucHV0IE1ldGhvZCBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmciCittc2dzdHIgIkUyOTI6IElNINPF0tfF0iDOxSDG1c7Lw6bPztWkIgorCisjIG1zZ3N0ciAiRTI5MjogIgorIzogbWVtZmlsZS5jOjQ3MworbXNnaWQgIkUyOTM6IGJsb2NrIHdhcyBub3QgbG9ja2VkIgorbXNnc3RyICJFMjkzOiDCzM/LIM7FIMLVzM8g2sHGpsvTz9fBzs8iCisKKyMgbXNnc3RyICJFMjkzOiAiCisjOiBtZW1maWxlLmM6OTcyCittc2dpZCAiRTI5NDogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgcmVhZCIKK21zZ3N0ciAiRTI5NDog8M/NyczLwSDazabOySDQz9qmw8nJINUgxsHKzKYgz8LNps7VIgorCisjOiBtZW1maWxlLmM6OTc3Cittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IPDPzcnMy8Eg2t7J1NXXwc7O0SDGwcrMwSDPws2mztUiCisKKyM6IG1lbWZpbGUuYzoxMDI5Cittc2dpZCAiRTI5NjogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgd3JpdGUiCittc2dzdHIgIkUyOTY6IPDPzcnMy8Eg2s2mzskg0M/apsPJySDQpsQg3sHTINrB0MnT1SDGwcrMwSDPws2mztUiCisKKyM6IG1lbWZpbGUuYzoxMDQ3Cittc2dpZCAiRTI5NzogV3JpdGUgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk3OiDwz83JzMvBINrB0MnT1SDGwcrMwSDPws2mztUiCisKKyM6IG1lbWZpbGUuYzoxMjQ0Cittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiDmwcrMIM/CzabO1SDV1sUgptPO1aQhICjazM/XzcnTzsnLPz8pIgorCisjOiBtZW1saW5lLmM6Mjc1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIKK21zZ3N0ciAiRTI5ODog7sXNwaQgwszPy9UgMD8gW9DPzcnMy8Eg0NLPx9LBzcldIgorCisjOiBtZW1saW5lLmM6MzE1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAxPyIKK21zZ3N0ciAiRTI5ODog7sXNwaQgwszPy9UgMT8gW9DPzcnMy8Eg0NLPx9LBzcldIgorCisjIG1zZ3N0ciAiRTI5ODogIgorIzogbWVtbGluZS5jOjMzMworbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMj8iCittc2dzdHIgIkUyOTg6IO7FzcGkIMLMz8vVIDI/IFvQz83JzMvBINDSz8fSwc3JXSIKKworIy4gY291bGQgbm90IChyZSlvcGVuIHRoZSBzd2FwIGZpbGUsIHdoYXQgY2FuIHdlIGRvPz8/PworIzogbWVtbGluZS5jOjQ0MworbXNnaWQgIkUzMDE6IE9vcHMsIGxvc3QgdGhlIHN3YXAgZmlsZSEhISIKK21zZ3N0ciAiRTMwMTog5sHKzCDPws2mztUg19TSwd7Fzs8hISEiCisKKyMgbXNnc3RyICJFMzAxOiAiCisjOiBtZW1saW5lLmM6NDQ4Cittc2dpZCAiRTMwMjogQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDI6IO7FIM3P1tUg0MXSxcrNxc7V18HUySDGwcrMwSDPws2mztUiCisKKyMgbXNnc3RyICJFMzAyOiAiCisjOiBtZW1saW5lLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDM6IFVuYWJsZSB0byBvcGVuIHN3YXAgZmlsZSBmb3IgXCIlc1wiLCByZWNvdmVyeSBpbXBvc3NpYmxlIgorbXNnc3RyICJFMzAzOiDOxSDNz9bVINDSz97J1MHUySDGwcrMIM/CzabO1SDEzNEgXCIlc1wiLCDXpsTOz9fMxc7O0SDOxc3P1szJ18UiCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiBtbF90aW1lc3RhbXA6IO7FzcGkIMLMz8vVIDA/PyBb0M/NyczLwSDQ0s/H0sHNyV0iCisKKyM6IG1lbWxpbmUuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNTogTm8gc3dhcCBmaWxlIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiRTMwNTog7sUg2s7BysTFzs8gxsHKzNUgz8LNps7VIMTM0SAlcyIKKworIyBtc2dzdHIgIkUzMDU6ICIKKyM6IG1lbWxpbmUuYzo3NjcKK21zZ2lkICJFbnRlciBudW1iZXIgb2Ygc3dhcCBmaWxlIHRvIHVzZSAoMCB0byBxdWl0KTogIgorbXNnc3RyICLxy8nKINPBzcUgxsHKzCDPws2mztUg18nLz9LJ09TB1MkgKDAgxMzRINfJyM/E1Sk6IgorCisjOiBtZW1saW5lLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDY6IENhbm5vdCBvcGVuICVzIgorbXNnc3RyICJFMzA2OiDuxSDNz9bVINemxMvSydTJICVzIgorCisjOiBtZW1saW5lLmM6ODM0Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgYmxvY2sgMCBmcm9tICIKK21zZ3N0ciAi7sUgzc/W1SDa3snUwdTJIMLMz8sgMCDaICIKKworIzogbWVtbGluZS5jOjgzNworbXNnaWQgIiIKKyJcbiIKKyJNYXliZSBubyBjaGFuZ2VzIHdlcmUgbWFkZSBvciBWaW0gZGlkIG5vdCB1cGRhdGUgdGhlIHN3YXAgZmlsZS4iCittc2dzdHIgIiIKKyJcbiIKKyLuwdDF187PINrNps4gzsUgwtXMzywgwcLPIFZpbSDOxSDQz87P18nXIMbByswgz8LNps7VLiIKKworIzogbWVtbGluZS5jOjg0NyBtZW1saW5lLmM6ODY0Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiIM7F0NLJxMHUzsnKIMTM0SDXycvP0snT1MHOztEg2iDDpqTAINfF0tOmpMAgVmltLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAi+s7BysSm1NggVmltIDMuMFxuIgorCisjOiBtZW1saW5lLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDc6ICVzIM7FINPIz9bFIM7BIMbByswgz8LNps7VIFZpbSIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIgzsXQ0snEwdTOycogxM8g18nLz9LJ09TBzs7RIM7BINfB26bKIMHSyKbUxcvU1dKmLlxuIgorCisjOiBtZW1saW5lLmM6ODcwCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICLmwcrMIMLVzM8g09TXz9LFzs8gzsEgIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyLBws8gxsHKzCDC1czPINDP28vPxNbFzs8uIgorCisjOiBtZW1saW5lLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHN3YXAgZmlsZSBcIiVzXCIiCittc2dzdHIgIvfJy9XSz9PUz9fAIMbByswgz8LNps7VIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJPcmlnaW5hbCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAi8M/ewdTLz9fJyiDGwcrMIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkzNAorbXNnaWQgIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIgorbXNnc3RyICJFMzA4OiD118HHwTog7c/WzMnXzywg0M/ewdTLz9fJyiDGwcrMIMLVzM8g2s2mzsXOzyIKKworIyBtc2dzdHIgIkUzMDg6ICIKKyM6IG1lbWxpbmUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwOTogVW5hYmxlIHRvIHJlYWQgYmxvY2sgMSBmcm9tICVzIgorbXNnc3RyICJFMzA5OiDuxSDNz8TVINreydTB1MkgwszPyyAxINogJXMiCisKKyMgbXNnc3RyICJFMzA5OiAiCisjOiBtZW1saW5lLmM6OTc5Cittc2dpZCAiPz8/TUFOWSBMSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz8g4sHHwdTPINLRxMum1yDX1NLB3sXOzyIKKworIzogbWVtbGluZS5jOjk5NQorbXNnaWQgIj8/P0xJTkUgQ09VTlQgV1JPTkciCittc2dzdHIgIj8/PyDuxdem0s7BIMumzNjLptPU2CDS0cTLptciCisKKyM6IG1lbWxpbmUuYzoxMDAyCittc2dpZCAiPz8/RU1QVFkgQkxPQ0siCittc2dzdHIgIj8/PyDwz9LP1s6myiDCzM/LIgorCisjOiBtZW1saW5lLmM6MTAyOAorbXNnaWQgIj8/P0xJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/PyDy0cTLySDX1NLB3sXOzyIKKworIzogbWVtbGluZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxMDogQmxvY2sgMSBJRCB3cm9uZyAoJXMgbm90IGEgLnN3cCBmaWxlPykiCittc2dzdHIgIkUzMTA6IOnExc7Uycamy8HUz9IgwszPy9UgMSDOxdem0s7JyiAozc/WzMnXzyAlcyDOxSDGwcrMIM/CzabO1T8pIgorCisjIG1zZ3N0ciAiRTMxMDogIgorIzogbWVtbGluZS5jOjEwNjUKK21zZ2lkICI/Pz9CTE9DSyBNSVNTSU5HIgorbXNnc3RyICI/Pz8g4szPyyDX1NLB3sXOzyIKKworIzogbWVtbGluZS5jOjEwODEKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgYmUgbWVzc2VkIHVwIgorbXNnc3RyICI/Pz8g96bEIMPYz8fPINLRxMvBIKYgxM8gYD8/PyDrps7Fw9gnINLRxMvJIM3P1tXU2CDC1dTJINPQzNXUwc6mIgorCisjOiBtZW1saW5lLmM6MTA5NworbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBoYXZlIGJlZW4gaW5zZXJ0ZWQvZGVsZXRlZCIKK21zZ3N0ciAiIgorIj8/PyD3psQgw9jPx88g0tHEy8EgpiDEzyBgPz8/IOumzsXD2Ccg0tHEy8kgzc/W1dTYIMLV1MkgxM/Ewc6mL9fU0sHexc6mIgorCisjOiBtZW1saW5lLmM6MTExNworbXNnaWQgIj8/P0VORCIKK21zZ3N0ciAiPz8/IOumzsXD2CIKKworIzogbWVtbGluZS5jOjExNDMKK21zZ2lkICJFMzExOiBSZWNvdmVyeSBJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiRTMxMTog96bEzs/XzMXOztEg0MXSxdLXwc7PIgorCisjOiBtZW1saW5lLmM6MTE0NQorbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIiIKKyJFMzEyOiDwpsQg3sHTINemxM7P18zFzs7RINrOwcrExc4g0M/NyczLyS4uIPDJzNjO1crUxSDS0cTLySDdzyDQz97JzsHAydTY09EgIgorItogYD8/PyciCisKKyM6IG1lbWxpbmUuYzoxMTQ4Cittc2dpZCAiUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIgorbXNnc3RyICL3psTOz9fMxc7O0SDawcumzt7Fzs8sINDF0sXXptLUxSDeySDX08Ug0NLB18nM2M7PLiIKKworIzogbWVtbGluZS5jOjExNDkKK21zZ2lkICIiCisiXG4iCisiKFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIG91dCB0aGlzIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lXG4iCittc2dzdHIgIiIKKyJcbiIKKyIo8cvdzyDCwdbBpNTFLCDNz9bF1MUg2sHQwc0n0dTB1Mkgw8XKIMbByswg2iCmztvJzSCmzcXOxc1cbiIKKworIzogbWVtbGluZS5jOjExNTAKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAipiwg0M/SptfR19vJINogz9LJx6bOyczPzSwg0MXSxdem0tTFINrNps7JKVxuIgorCisjOiBtZW1saW5lLmM6MTE1MQorbXNnaWQgIiIKKyJEZWxldGUgdGhlIC5zd3AgZmlsZSBhZnRlcndhcmRzLlxuIgorIlxuIgorbXNnc3RyICIiCisi8KbTzNEgw9jPx88sINfJxMHMptTYIMbByswgz8LNps7VLlxuIgorIlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMDcKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAi+s7BysTFzs8gxsHKzMkgz8LNps7VOiIKKworIzogbWVtbGluZS5jOjEzODUKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAg9yDQz9TP3s6myiDEydLFy9TP0qanOlxuIgorCisjOiBtZW1saW5lLmM6MTM4NworbXNnaWQgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorbXNnc3RyICIgICD3ycvP0snT1M/X1cDWySDXy8Hawc7VIM7B2tfVOlxuIgorCisjOiBtZW1saW5lLmM6MTM5MQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIPUgxMnSxcvUz9KmpyAiCisKKyM6IG1lbWxpbmUuYzoxNDA5Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgICAtLSDWz8TOz8fPIC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDgxCittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgICAgICAg18zB087JyzogIgorCisjOiBtZW1saW5lLmM6MTQ4MworbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICDEwdTP18HOzzogIgorCisjOiBtZW1saW5lLmM6MTQ4NyBtZW1saW5lLmM6MzY4MAorbXNnaWQgIiAgICAgICAgICAgICBkYXRlZDogIgorbXNnc3RyICIgICAgICAgICAgxMHUz9fBzs86ICIKKworIzogbWVtbGluZS5jOjE1MDMKK21zZ2lkICIgICAgICAgICBbZnJvbSBWaW0gdmVyc2lvbiAzLjBdIgorbXNnc3RyICIgICAgICAgICBb16bEIFZpbSAzLjBdIgorCisjOiBtZW1saW5lLmM6MTUwNworbXNnaWQgIiAgICAgICAgIFtkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlXSIKK21zZ3N0ciAiICAgICAgICBbzsUg08jP1sUgzsEgxsHKzCDPws2mztVdIgorCisjOiBtZW1saW5lLmM6MTUxMQorbXNnaWQgIiAgICAgICAgIGZpbGUgbmFtZTogIgorbXNnc3RyICIgICAgICAgzsHa18EgxsHKzME6ICIKKworIzogbWVtbGluZS5jOjE1MjMKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgIG1vZGlmaWVkOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgINrNps7Fzs86ICIKKworIzogbWVtbGluZS5jOjE1MjQKK21zZ2lkICJZRVMiCittc2dzdHIgIvTh6yIKKworIzogbWVtbGluZS5jOjE1MjQKK21zZ2lkICJubyIKK21zZ3N0ciAizqYiCisKKyM6IG1lbWxpbmUuYzoxNTI4Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIHVzZXIgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICCmzSfRIMvP0snT1NXXwd7BOiAiCisKKyM6IG1lbWxpbmUuYzoxNTM1Cittc2dpZCAiICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIiAgICAgzsHa18Eg08nT1MXNyTogIgorCisjOiBtZW1saW5lLmM6MTUzNworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgzsHa18Eg08nT1MXNyTogIgorCisjOiBtZW1saW5lLmM6MTU0MworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgzs/NxdIg0NLPw8XT1TogIgorCisjOiBtZW1saW5lLmM6MTU0OQorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAo1dPFIN3FINfJy8/O1aTU2NPRKSIKKworIzogbWVtbGluZS5jOjE1NjEKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFvuxSDNz9bFIMLV1Mkg18nLz9LJ09TBzs8g2iDDpqTAINfF0tOmpMAgVmltXSIKKworIzogbWVtbGluZS5jOjE1NjQKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgb24gdGhpcyBjb21wdXRlcl0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbzsXQ0snEwdTOycogxM8g18nLz9LJ09TBzs7RIM7BINfB26bKIMHSyKbUxcvU1dKmXSIKKworIzogbWVtbGluZS5jOjE1NjkKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIHJlYWRdIgorbXNnc3RyICIgICAgICAgICBbzsUgzc/WxSDCptTYINDSz97J1MHOycpdIgorCisjOiBtZW1saW5lLmM6MTU3MworbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgb3BlbmVkXSIKK21zZ3N0ciAiICAgICAgICAgW87FIM3P1sUgwtXUySDXpsTL0snUycpdIgorCisjOiBtZW1saW5lLmM6MTc2MworbXNnaWQgIkUzMTM6IENhbm5vdCBwcmVzZXJ2ZSwgdGhlcmUgaXMgbm8gc3dhcCBmaWxlIgorbXNnc3RyICJFMzEzOiDuxSDNz9bVINrCxdKmx9TJLCDOxc3BpCDGwcrMwSDPws2mztUiCisKKyMgbXNnc3RyICJFMzEzOiAiCisjOiBtZW1saW5lLmM6MTgxNgorbXNnaWQgIkZpbGUgcHJlc2VydmVkIgorbXNnc3RyICLmwcrMINrCxdLF1sXOzyIKKworIzogbWVtbGluZS5jOjE4MTgKK21zZ2lkICJFMzE0OiBQcmVzZXJ2ZSBmYWlsZWQiCittc2dzdHIgIkUzMTQ6IPrCxdLF1sXOztEgzsUg18TBzM/T0SIKKworIyBtc2dzdHIgIkUzMTQ6ICIKKyM6IG1lbWxpbmUuYzoxODg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTU6IG1sX2dldDogaW52YWxpZCBsbnVtOiAlbGQiCittc2dzdHIgIkUzMTU6IG1sX2dldDogzsXXptLOycogbG51bTogJWxkIFvQz83JzMvBINDSz8fSwc3JXSIKKworIyBtc2dzdHIgIkUzMTU6ICIKKyM6IG1lbWxpbmUuYzoxOTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTY6IG1sX2dldDogY2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMTY6IG1sX2dldDog0tHEz8sgJWxkIM7FINrOwcrExc7PIFvQz83JzMvBINDSz8fSwc3JXSIKKworIyBtc2dzdHIgIkUzMTY6ICIKKyM6IG1lbWxpbmUuYzoyMzAzCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAzIgorbXNnc3RyICJFMzE3OiDXy8HaptfOycsgwszPy9Ug0M/NyczLz9fJyiAoMykgW9DPzcnMy8Eg0NLPx9LBzcldIgorCisjIG1zZ3N0ciAiRTMxNzogIgorIzogbWVtbGluZS5jOjIzODMKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCDNwaQgwtXUySDSptfOyc0gMCBb0M/NyczLwSDQ0s/H0sHNyV0iCisKKyM6IG1lbWxpbmUuYzoyNDQ1Cittc2dpZCAiRTMxODogVXBkYXRlZCB0b28gbWFueSBibG9ja3M/IgorbXNnc3RyICJFMzE4OiD6wcLBx8HUzyDCzM/Lptcg0M/Oz9fMxc7PPyBb0M/NyczLwSDQ0s/H0sHNyV0iCisKKyM6IG1lbWxpbmUuYzoyNjAyCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiDXy8HaptfOycsgwszPy9Ug0M/NyczLz9fJyiAoNCkgW9DPzcnMy8Eg0NLPx9LBzcldIgorCisjOiBtZW1saW5lLmM6MjYyOQorbXNnaWQgImRlbGV0ZWQgYmxvY2sgMT8iCittc2dzdHIgIsLMz8sgMSDXycTBzMXOzz8gW9DPzcnMy8Eg0NLPx9LBzcldIgorCisjOiBtZW1saW5lLmM6MjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIwOiBDYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMyMDog7sUgzc/W1SDazsHK1Mkg0tHEz8sgJWxkIFvQz83JzMvBINDSz8fSwc3JXSIKKworIzogbWVtbGluZS5jOjMwNzIKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIgorbXNnc3RyICJFMzE3OiDXy8HaptfOycsgwszPy9Ug0M/NyczLz9fJyiBb0M/NyczLwSDQ0s/H0sHNyV0iCisKKyMgbXNnc3RyICJFMzE3OiAiCisjOiBtZW1saW5lLmM6MzA4OAorbXNnaWQgInBlX2xpbmVfY291bnQgaXMgemVybyIKK21zZ3N0ciAicGVfbGluZV9jb3VudCDSptfFziAwIFvQz83JzMvBINDSz8fSwc3JXSIKKworIzogbWVtbGluZS5jOjMxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMjogbGluZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlbGQgcGFzdCB0aGUgZW5kIgorbXNnc3RyICJFMzIyOiDOz83F0iDS0cTLwSDXycrbz9cg2sEgzcXWpjogJWxkIFvQz83JzMvBINDSz8fSwc3JXSIKKworIyBtc2dzdHIgIkUzMjI6ICIKKyM6IG1lbWxpbmUuYzozMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjM6IGxpbmUgY291bnQgd3JvbmcgaW4gYmxvY2sgJWxkIgorbXNnc3RyICJFMzIzOiDrpszYy6bT1Ngg0tHEy6bXINUgwszPw6YgJWxkINDPzcnMy8/XwSIKKworIyBtc2dzdHIgIkUzMjM6ICIKKyM6IG1lbWxpbmUuYzozMTcwCittc2dpZCAiU3RhY2sgc2l6ZSBpbmNyZWFzZXMiCittc2dzdHIgIvLP2s2m0iDT1MXL1SDawqbM2NvVpNTY09EiCisKKyM6IG1lbWxpbmUuYzozMjE2Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAyIgorbXNnc3RyICJFMzE3OiDXy8HaptfOycsgwszPy9Ug0M/NyczLz9fJyiAoMikgW9DPzcnMy8Eg0NLPx9LBzcldIgorCisjIG1zZ3N0ciAiRTMxNzogIgorIzogbWVtbGluZS5jOjM2NzAKK21zZ2lkICJFMzI1OiBBVFRFTlRJT04iCittc2dzdHIgIkUzMjU6IPX34efhIgorCisjOiBtZW1saW5lLmM6MzY3MQorbXNnaWQgIiIKKyJcbiIKKyJGb3VuZCBhIHN3YXAgZmlsZSBieSB0aGUgbmFtZSBcIiIKK21zZ3N0ciAiIgorIlxuIgorIvrOwcrExc7PIMbByswgz8LNps7VIM7BIKbNJ9EgXCIiCisKKyM6IG1lbWxpbmUuYzozNjc1Cittc2dpZCAiV2hpbGUgb3BlbmluZyBmaWxlIFwiIgorbXNnc3RyICLuwc3Bx8HA3snT2CDXpsTL0snUySDGwcrMIFwiIgorCisjOiBtZW1saW5lLmM6MzY4NAorbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICDwz97B1MvPycogxsHKzCDOz9em3cnKINrBIMbByswgz8LNps7VXG4iCisKKyMuIFNvbWUgb2YgdGhlc2UgbWVzc2FnZXMgYXJlIGxvbmcgdG8gYWxsb3cgdHJhbnNsYXRpb24gdG8KKyMuICogb3RoZXIgbGFuZ3VhZ2VzLgorIzogbWVtbGluZS5jOjM2ODgKK21zZ2lkICIiCisiXG4iCisiKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLlxuIgorIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d29cbiIKKyIgICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMSkg7c/WzMnXzywgps7bycogVmltINXWxSDSxcTBx9WkIMPFyiDGwcrMLiDi1cTY1MUgz8LF0sXWzqYsXG4iCisiICAgINfJIM3P1sXUxSDawczJ26bU2NPRINogxNfPzcEg0qbazsnNySDXxdLTptHNySDGwcrM1S5cbiIKKworIzogbWVtbGluZS5jOjM2ODkKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAg98nKxKbU2CwgwcLPINDSz8TP19bVytTFINogz8LF0sXWzqbT1MAuXG4iCisKKyM6IG1lbWxpbmUuYzozNjkwCittc2dpZCAiIgorIlxuIgorIigyKSBBbiBlZGl0IHNlc3Npb24gZm9yIHRoaXMgZmlsZSBjcmFzaGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDIpIPDP0MXSxcTOpsog08XBztMg0sXEwcfV18HOztEgwdfB0qbKzs8g2sHXxdLbydfT0S5cbiIKKworIzogbWVtbGluZS5jOjM2OTEKK21zZ2lkICIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdXNlIFwiOnJlY292ZXJcIiBvciBcInZpbSAtciAiCittc2dzdHIgIiAgICD3ycvP0snT1MHK1MUgXCI6cmVjb3ZlclwiIMHCzyBcInZpbSAtclwiICIKKworIzogbWVtbGluZS5jOjM2OTMKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gcmVjb3ZlciB0aGUgY2hhbmdlcyAoc2VlIFwiOmhlbHAgcmVjb3ZlcnlcIikuXG4iCittc2dzdHIgIiIKKyLEzNFcbiIKKyIgICAg16bEzs/XzMXOztEg2s2mzi4gKMTJ1y4gXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKKworIzogbWVtbGluZS5jOjM2OTQKK21zZ2lkICIgICAgSWYgeW91IGRpZCB0aGlzIGFscmVhZHksIGRlbGV0ZSB0aGUgc3dhcCBmaWxlIFwiIgorbXNnc3RyICIgICAg8cvdzyDXySDDxSDX1sUg0s/CyczJLCDXycTBzKbU2CDGwcrMIM/CzabO1SBcIiIKKworIzogbWVtbGluZS5jOjM2OTYKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAg3c/CINDP2sLB18nUydPRIMPYz8fPINDP16bEz83Mxc7O0S5cbiIKKyJcbiIKKworIzogbWVtbGluZS5jOjM3MTAgbWVtbGluZS5jOjM3MTQKK21zZ2lkICJTd2FwIGZpbGUgXCIiCittc2dzdHIgIubByswgz8LNps7VIFwiIgorCisjOiBtZW1saW5lLmM6MzcxMSBtZW1saW5lLmM6MzcxNworbXNnaWQgIlwiIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiXCIg1dbFIKbTztWkISIKKworIzogbWVtbGluZS5jOjM3MjAKK21zZ2lkICJWSU0gLSBBVFRFTlRJT04iCittc2dzdHIgIlZpbSAtLSD118HHwSIKKworIzogbWVtbGluZS5jOjM3MjIKK21zZ2lkICJTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICLmwcrMIM/CzabO1SDV1sUgptPO1aQhIgorCisjOiBtZW1saW5lLmM6MzcyNgorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0IgorbXNnc3RyICIiCisiJk8696bEy9LJ1MkgzMnbxSDEzNEg3snUwc7O0VxuIgorIiZFOvXTxSDPxM7PINLFxMHH1dfB1MlcbiIKKyImUjr3psTOz9fJ1MlcbiIKKyImUTr3ycrUySIKKworIzogbWVtbGluZS5jOjM3MjgKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZEZWxldGUgaXQiCittc2dzdHIgIiIKKyImTzr3psTL0snUySDMydvFIMTM0SDeydTBzs7RXG4iCisiJkU69dPFIM/Ezs8g0sXEwcfV18HUyVxuIgorIiZSOvemxM7P18nUyVxuIgorIiZROvfJytTJXG4iCisiJkQ698nEwczJ1Mkgw8XKIMbByswiCisKKyM6IG1lbWxpbmUuYzozNzgxCittc2dpZCAiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIKK21zZ3N0ciAiRTMyNjog+sHCwcfB1M8gxsHKzKbXIM/CzabO1SDazsHKxMXOzyIKKworIyBtc2dzdHIgIkUzMjY6ICIKKyM6IG1lbnUuYzo2NAorbXNnaWQgIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51IgorbXNnc3RyICJFMzI3OiD7zNHI1SDEzyDFzMXNxc7UwSDNxc7RIM3BpCDNptPUydTJIMzJ28Ug0KbEzcXOwCIKKworIyBtc2dzdHIgIkUzMjc6ICIKKyM6IG1lbnUuYzo2NQorbXNnaWQgIkUzMjg6IE1lbnUgb25seSBleGlzdHMgaW4gYW5vdGhlciBtb2RlIgorbXNnc3RyICJFMzI4OiDtxc7AIM7FIKbTztWkINUg18vB2sHOycgg0sXWyc3ByCIKKworIyBtc2dzdHIgIkUzMjg6ICIKKyM6IG1lbnUuYzo2NgorbXNnaWQgIkUzMjk6IE5vIG1lbnUgb2YgdGhhdCBuYW1lIgorbXNnc3RyICJFMzI5OiDuxc3BpCDNxc7AINog1MHLz8AgzsHa18/AIgorCisjIG1zZ3N0ciAiRTMyOTogIgorIzogbWVudS5jOjUwMworbXNnaWQgIkUzMzA6IE1lbnUgcGF0aCBtdXN0IG5vdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzA6IPvM0cggxM8gzcXO0SDOxSDQz9fJzsXOINfF09TJIMTPINCmxM3FzsAiCisKKyMgbXNnc3RyICJFMzMwOiAiCisjOiBtZW51LmM6NTQyCittc2dpZCAiRTMzMTogTXVzdCBub3QgYWRkIG1lbnUgaXRlbXMgZGlyZWN0bHkgdG8gbWVudSBiYXIiCittc2dzdHIgIkUzMzE6IPemxM3P18zRwNPYIMTPxMHXwdTJICrFzMXNxc7UySogzcXOwCDQ0tHNzyDEzyBtZW51YmFyIgorCisjIG1zZ3N0ciAiRTMzMTogIgorIzogbWVudS5jOjU0OAorbXNnaWQgIkUzMzI6IFNlcGFyYXRvciBjYW5ub3QgYmUgcGFydCBvZiBhIG1lbnUgcGF0aCIKK21zZ3N0ciAiRTMzMjog8s/axKbM2M7JyyDOxSDNz9bOwSDEz8TB18HUySDXINvM0cggxM8gzcXOwCIKKworIyBtc2dzdHIgIkUzMzI6ICIKKyMuIE5vdyB3ZSBoYXZlIGZvdW5kIHRoZSBtYXRjaGluZyBtZW51LCBhbmQgd2UgbGlzdCB0aGUgbWFwcGluZ3MKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWVudS5jOjEwNjMKK21zZ2lkICIiCisiXG4iCisiLS0tIE1lbnVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDtxc7AIC0tLSIKKworIzogbWVudS5jOjE5ODkKK21zZ2lkICJUZWFyIG9mZiB0aGlzIG1lbnUiCittc2dzdHIgIvemxKbS18HUySDDxSDNxc7AIgorCisjOiBtZW51LmM6MjA1NAorbXNnaWQgIkUzMzM6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBtZW51IGl0ZW0iCittc2dzdHIgIkUzMzM6IPvM0cgg0M/Xyc7FziDXxdPUySDEzyDFzMXNxc7UwSDNxc7AIgorCisjIG1zZ3N0ciAiRTMzMzogIgorIzogbWVudS5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNDogTWVudSBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMzM0OiDtxc7AICVzIM7FINrOwcrExc7PIgorCisjIG1zZ3N0ciAiRTMzNDogIgorIzogbWVudS5jOjIxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNTogTWVudSBub3QgZGVmaW5lZCBmb3IgJXMgbW9kZSIKK21zZ3N0ciAiRTMzNTog9yDSxdbJzaYgYCVzJyDNxc7AIM7FIKbTztWkIgorCisjIG1zZ3N0ciAiRTMzNTogIgorIzogbWVudS5jOjIxODEKK21zZ2lkICJFMzM2OiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzY6IPvM0cgg0M/Xyc7FziDXxdPUySDEzyDQpsTNxc7AIgorCisjIG1zZ3N0ciAiRTMzNjogIgorIzogbWVudS5jOjIyMDIKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IO3FzsAgzsUg2s7BysTFzs8gLS0g0MXSxdem0tTFIM7B2tfVIgorCisjIG1zZ3N0ciAiRTMzNzogIgorIzogbWVzc2FnZS5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlY3RlZCB3aGlsZSBwcm9jZXNzaW5nICVzOiIKK21zZ3N0ciAi8M/NyczLwSDQpsQg3sHTINfJy8/Owc7O0SAlczoiCisKKyM6IG1lc3NhZ2UuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlNGxkOiIKK21zZ3N0ciAi0tHEz8sgJTRsZDoiCisKKyM6IG1lc3NhZ2UuYzo1MjMKK21zZ2lkICJbc3RyaW5nIHRvbyBsb25nXSIKK21zZ3N0ciAiW9LRxM/LINrBzsHEzs8gxM/Xx8nKXSIKKworIzogbWVzc2FnZS5jOjY2OQorbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorbXNnc3RyICL3psTQz9emxMHM2M7JyiDawSDQz9emxM/NzMXOztE6IOLPx8TBziD3zMHTwMsgPGJvZHFAeWFob28uY29tPiIKKworIzogbWVzc2FnZS5jOjg4MgorbXNnaWQgIkludGVycnVwdDogIgorbXNnc3RyICLwxdLF0tfBzs86ICIKKworIzogbWVzc2FnZS5jOjg4NQorbXNnaWQgIkhpdCBFTlRFUiB0byBjb250aW51ZSIKK21zZ3N0ciAi7sHUydPOptTYIEVOVEVSIMTM0SDQ0s/Ez9fWxc7O0SIKKworIzogbWVzc2FnZS5jOjg4NworbXNnaWQgIkhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUiCittc2dzdHIgIu7B1MnTzqbU2CBFTlRFUiDBws8g18vB1qbU2CDLz83BzsTVIMTM0SDQ0s/Ez9fWxc7O0SIKKworIzogbWVzc2FnZS5jOjE5NDIKK21zZ2lkICItLSBNb3JlIC0tIgorbXNnc3RyICItLSD9xSAtLSIKKworIzogbWVzc2FnZS5jOjE5NDUKK21zZ2lkICIgKFJFVC9CUzogbGluZSwgU1BBQ0UvYjogcGFnZSwgZC91OiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVC9CUzog0tHEz8ssIPDy7+K27C9iOiDMydPULCBkL3U6INCm1yDMydPUwSwgcTog18nIpsQpIgorCisjOiBtZXNzYWdlLmM6MTk0NgorbXNnaWQgIiAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQ6INLRxM/LLCDw8u/ituw6IMzJ09QsIGQ6INCm1yDMydPUwSwgcTog18nIpsQpIgorCisjOiBtZXNzYWdlLmM6MjQyMSBtZXNzYWdlLmM6MjQzNgorbXNnaWQgIlF1ZXN0aW9uIgorbXNnc3RyICL6wdDJ1MHOztEiCisKKyM6IG1lc3NhZ2UuYzoyNDIzCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm8iCittc2dzdHIgIiIKKyImWTr0wctcbiIKKyImTjrupiIKKworIzogbWVzc2FnZS5jOjI0MzgKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImWTr0wctcbiIKKyImTjruplxuIgorIiZDOvemxM2mzsnUySIKKworIzogbWVzc2FnZS5jOjI0NTYKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIlNhdmUgJkFsbFxuIgorIiZEaXNjYXJkIEFsbFxuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImWTr0wctcbiIKKyImTjruplxuIgorIiZBOvXTplxuIgorIiZEOvbPxM7Px89cbiIKKyImQzr3psTNps7J1MkiCisKKyM6IG1lc3NhZ2UuYzoyNDk2Cittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAi+sHQwc0n0dTB1MkgxsHKzCIKKworIzogbWVzc2FnZS5jOjI0OTgKK21zZ2lkICJPcGVuIEZpbGUgZGlhbG9nIgorbXNnc3RyICL3psTL0snUySDGwcrMIgorCisjLiBUT0RPOiBub24tR1VJIGZpbGUgc2VsZWN0b3IgaGVyZQorIzogbWVzc2FnZS5jOjI1NDkKK21zZ2lkICJFMzM4OiBTb3JyeSwgbm8gZmlsZSBicm93c2VyIGluIGNvbnNvbGUgbW9kZSIKK21zZ3N0ciAiRTMzODog98nCwd7UxSwgwczFINcgy8/O08/MpiDOxc3BpCDEpsHMz8fVINfJws/S1SDGwcrMwSIKKworIyBtc2dzdHIgIkUzMzg6ICIKKyM6IG1pc2MxLmM6MjQ1NQorbXNnaWQgIlcxMDogV2FybmluZzogQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlIgorbXNnc3RyICJXMTA6IPXXwcfBOiD6zabOwKTU2NPRIMbByswg0NLJ2s7B3sXOycogzMnbxSDEzNEg3snUwc7O0SIKKworIzogbWlzYzEuYzoyNjg0Cittc2dpZCAiMSBtb3JlIGxpbmUiCittc2dzdHIgItrOyd3Fzs8gz8TJziDS0cTPyyIKKworIzogbWlzYzEuYzoyNjg2Cittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgIsTPxMHOzyDPxMnOINLRxM/LIgorCisjOiBtaXNjMS5jOjI2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIG1vcmUgbGluZXMiCittc2dzdHIgIsTPxMHOzyDS0cTLptc6ICVsZCIKKworIzogbWlzYzEuYzoyNjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBmZXdlciBsaW5lcyIKK21zZ3N0ciAi2s7J3cXOzyDS0cTLptc6ICVsZCIKKworIzogbWlzYzEuYzoyNjk2Cittc2dpZCAiIChJbnRlcnJ1cHRlZCkiCittc2dzdHIgIiAo8MXSxdLXwc7PKSIKKworIzogbWlzYzEuYzo2Mjk2Cittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTog+sHCxdKmx8HAIMbByszJLi4uXG4iCisKKyMuIGNsb3NlIGFsbCBtZW1maWxlcywgd2l0aG91dCBkZWxldGluZworIzogbWlzYzEuYzo2MzA2Cittc2dpZCAiVmltOiBGaW5pc2hlZC5cbiIKK21zZ3N0ciAiVmltOiD6wdfF0tvFzs8uXG4iCisKKyM6IG1pc2MyLmM6NjQ3IG1pc2MyLmM6NjYzCittc2dpZCAiRVJST1I6ICIKK21zZ3N0ciAi8M/NyczLwTogIgorCisjOiBtaXNjMi5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiW2J5dGVzXSB0b3RhbCBhbGxvYy1mcmVlZCAlbHUtJWx1LCBpbiB1c2UgJWx1LCBwZWFrIHVzZSAlbHVcbiIKK21zZ3N0ciAiIgorIlxuIgorIlvCwcrUXSDX09jPx88g0s/azS/azsndLiAlbHUvJWx1LCDXycvP0i4gJWx1LCDNwcvTLiAlbHVcbiIKKworIzogbWlzYzIuYzo2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW9fJy8zJy8ldINXT2M/HzyByZS9tYWxsb2MoKSAtICVsdSwg1dPYz8fPIGZyZWUoKSAtICVsdVxuIgorIlxuIgorCisjOiBtaXNjMi5jOjcyNAorbXNnaWQgIkUzNDA6IExpbmUgaXMgYmVjb21pbmcgdG9vIGxvbmciCittc2dzdHIgIkUzNDA6IPLRxMvJINrBzsHE1M8gxM/Xx6YiCisKKyMgbXNnc3RyICJFMzQwOiAiCisjOiBtaXNjMi5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQxOiBJbnRlcm5hbCBlcnJvcjogbGFsbG9jKCVsZCwgKSIKK21zZ3N0ciAiRTM0MTog987V1NKm287RINDPzcnMy8E6IGxhbGxvYyglbGQsICkiCisKKyMgbXNnc3RyICJFMzQxOiAiCisjOiBtaXNjMi5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQyOiBPdXQgb2YgbWVtb3J5ISAgKGFsbG9jYXRpbmcgJWx1IGJ5dGVzKSIKK21zZ3N0ciAiRTM0Mjog+sHC0sHLzM8g0MHNJ9HUpiAgKNfJxKbM0czP09EgJWx1IMLBytSm1ykiCisKKyMgbXNnc3RyICJFMzQyOiAiCisjOiBtaXNjMi5jOjI1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FsbGluZyBzaGVsbCB0byBleGVjdXRlOiBcIiVzXCIiCittc2dzdHIgIvfJy8/O1aTNzyDaz9fOptvO1SDLz83BzsTVOiBcIiVzXCIiCisKKyM6IG1pc2MyLmM6MjcxMiBtaXNjMi5jOjUxODIgb3B0aW9uLmM6NDU4NAorbXNnaWQgIk1pc3NpbmcgY29sb24iCittc2dzdHIgIvfU0sHexc7PIMTXz8vSwdDL1SIKKworIzogbWlzYzIuYzoyNzE0IG1pc2MyLmM6Mjc0MQorbXNnaWQgIklsbGVnYWwgbW9kZSIKK21zZ3N0ciAi7sXQ0snKztHUzsnKINLF1snNIgorCisjOiBtaXNjMi5jOjI3ODAKK21zZ2lkICJJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIu7F0NLJys7R1M7JyiDXycfM0cQgzcnbpiIKKworIzogbWlzYzIuYzoyODIwIG1pc2MyLmM6NTIwMgorbXNnaWQgImRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICLQz9TSpsLOwSDDycbSwSIKKworIzogbWlzYzIuYzoyODI1Cittc2dpZCAiSWxsZWdhbCBwZXJjZW50YWdlIgorbXNnc3RyICLuxdDSwdfJzNjOycog16bE08/Uz8siCisKKyM6IG1pc2MyLmM6MzEyOQorbXNnaWQgIkVudGVyIGVuY3J5cHRpb24ga2V5OiAiCittc2dzdHIgIvfLwdam1Nggy8zA3iDbycbS1TogIgorCisjOiBtaXNjMi5jOjMxMzAKK21zZ2lkICJFbnRlciBzYW1lIGtleSBhZ2FpbjogIgorbXNnc3RyICL3y8HWptTYINTPyiDUwc3KIMvMwN46ICIKKworIzogbWlzYzIuYzozMTQwCittc2dpZCAiS2V5cyBkb24ndCBtYXRjaCEiCittc2dzdHIgIuvMwN6mIM7FINPQptfQwcTBwNTYISIKKworIzogbWlzYzIuYzozNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICIiCisiRTM0Mzog7sXQ0snKztHUzsUg18nazsHexc7O0SAncGF0aCcuIGAqKlvDycbSwV0nINDP18nOzs8g2s7ByM/EydTJ09Eg1yDLps7DpiAiCisi28zRyNUsIMHCzyDQxdLFxCAnJXMnLiIKKworIyBtc2dzdHIgIkUzNDM6ICIKKyM6IG1pc2MyLmM6NDkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ0OiBDYW4ndCBmaW5kIGRpcmVjdG9yeSBcIiVzXCIgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ0OiDuxSDNz9bVINrOwcrUySDEydLFy9TP0qbAIFwiJXNcIiDVICdjZHBhdGgnIgorCisjIG1zZ3N0ciAiRTM0NDogIgorIzogbWlzYzIuYzo0OTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDU6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NTog7sUgzc/W1SDazsHK1MkgxsHKzCBcIiVzXCIg1SAncGF0aCciCisKKyMgbXNnc3RyICJFMzQ1OiAiCisjOiBtaXNjMi5jOjQ5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NjogTm8gbW9yZSBkaXJlY3RvcnkgXCIlc1wiIGZvdW5kIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0Njog9SAnY2RwYXRoJyDOxSDazsHKxMXOzyCmztvJyCDEydLFy9TP0qbKIFwiJXNcIiIKKworIyBtc2dzdHIgIkUzNDY6ICIKKyM6IG1pc2MyLmM6NDk1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ3OiBObyBtb3JlIGZpbGUgXCIlc1wiIGZvdW5kIGluIHBhdGgiCittc2dzdHIgIkUzNDc6IPUg28zRyNUg0M/b1cvVIMKmzNjbxSDOxc3BpCDGwcrMptcgXCIlc1wiIgorCisjIG1zZ3N0ciAiRTM0NzogIgorIzogbWlzYzIuYzo1MTk0Cittc2dpZCAiSWxsZWdhbCBjb21wb25lbnQiCittc2dzdHIgIu7Fzc/WzMnXycogy8/N0M/Oxc7UIgorCisjOiBub3JtYWwuYzoyODI1Cittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAi9dfBx8E6INTF0s2mzsHMIM7FINCmxNTSyc3VpCDLz8zYz9LJIgorCisjOiBub3JtYWwuYzozMDIwCittc2dpZCAiRTM0ODogTm8gc3RyaW5nIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0ODog98kg09TPp9TFIM7BINDP0s/WztjPzdUg0tHEy9UiCisKKyMgbXNnc3RyICJFMzQ4OiAiCisjOiBub3JtYWwuYzozMDIyCittc2dpZCAiRTM0OTogTm8gaWRlbnRpZmllciB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDk6IPfJIM7FINPUz6bUxSDOwSDTzM/XpiIKKworIzogbm9ybWFsLmM6NDE4NworbXNnaWQgIkUzNTI6IENhbm5vdCBlcmFzZSBmb2xkcyB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUyOiDuxSDNz9bVINrOyd3J1Mkg2sfP0tTLySAo2tfB1sHA3skgzsEgJ2ZvbGRtZXRob2QnKSIKKworIzogb3BzLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkIDEgdGltZSIKK21zZ3N0ciAiz8TJziDS0cTPyyAlcy3OzyIKKworIzogb3BzLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICLPxMnOINLRxM/LICVzLc7PICVkINLB2qbXIgorCisjOiBvcHMuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgMSB0aW1lIgorbXNnc3RyICIlbGQg0tHEy6bXICVzLc7PIgorCisjOiBvcHMuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgJWQgdGltZXMiCittc2dzdHIgIiVsZCDS0cTLptcgJXMtzs8gJWQg0sHaptciCisKKyM6IG9wcy5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgdG8gaW5kZW50Li4uICIKK21zZ3N0ciAi+sHMydvJzM/T0SDXydKm187R1Mk6ICVsZCDS0cTLptciCisKKyM6IG9wcy5jOjY4OAorbXNnaWQgIjEgbGluZSBpbmRlbnRlZCAiCittc2dzdHIgIs/Eyc4g0tHEz8sg18nSptfO0c7PIgorCisjOiBvcHMuYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAi18nSptfO0c7PINLRxMum1zogJWxkIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogb3BzLmM6MTUzMQorbXNnaWQgImNhbm5vdCB5YW5rOyBkZWxldGUgYW55d2F5IgorbXNnc3RyICLQ0s/CzMXNySDaINrCxdLF1sXOztHNLCDX08Ugz8TOzyDXycTBzMnUyT8iCisKKyM6IG9wcy5jOjIwMjEKK21zZ2lkICIxIGxpbmUgY2hhbmdlZCIKK21zZ3N0ciAi78TJziDS0cTPyyDazabOxc7PIgorCisjOiBvcHMuYzoyMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBjaGFuZ2VkIgorbXNnc3RyICL6zabOxc7PINLRxMum1zogJWxkIgorCisjOiBvcHMuYzoyMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZyZWVpbmcgJWxkIGxpbmVzIgorbXNnc3RyICLa16bM2M7Fzs8g0tHEy6bXOiAlbGQiCisKKyM6IG9wcy5jOjI2NjAKK21zZ2lkICIxIGxpbmUgeWFua2VkIgorbXNnc3RyICLy0cTPyyDawsXSxdbFzs8iCisKKyM6IG9wcy5jOjI2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHlhbmtlZCIKK21zZ3N0ciAi+sLF0sXWxc7PINLRxMum1zogJWxkIgorCisjOiBvcHMuYzoyOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTM6IE5vdGhpbmcgaW4gcmVnaXN0ZXIgJXMiCittc2dzdHIgIkUzNTM6IPUg0sXHptPU0qYgJXMg0M/Sz9bO2M8iCisKKyMgbXNnc3RyICJFMzUzOiAiCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG9wcy5jOjM0NjUKK21zZ2lkICIiCisiXG4iCisiLS0tIFJlZ2lzdGVycyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g8sXHptPU0skgLS0tIgorCisjOiBvcHMuYzo0NTk3Cittc2dpZCAiSWxsZWdhbCByZWdpc3RlciBuYW1lIgorbXNnc3RyICLuxdDSwdfJzNjOwSDOwdrXwSDSxcem09TSwSIKKworIzogb3BzLmM6NDY3NworbXNnaWQgIiIKKyJcbiIKKyIjIFJlZ2lzdGVyczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMg8sXHptPU0sk6XG4iCisKKyM6IG9wcy5jOjQ3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biByZWdpc3RlciB0eXBlICVkIgorbXNnc3RyICLuxdemxM/Nycog1MXQINLFx6bT1NLBOiAlZCIKKworIzogb3BzLmM6NTA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU0OiBJbnZhbGlkIHJlZ2lzdGVyIG5hbWU6ICclcyciCittc2dzdHIgIkUzNTQ6IO7F0NLB18nM2M7BIM7B2tfBINLFx6bT1NLBOiAnJXMnIgorCisjOiBvcHMuYzo1NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBDb2xzOyAiCittc2dzdHIgIsTP19YuOiAlbGQ7ICIKKworIzogb3BzLmM6NTQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiCittc2dzdHIgIvfJwtLBzs8gLSAlcyVsZCDaICVsZCDy0cTLptc7ICVsZCDaICVsZCDzzKbXOyAlbGQg2iAlbGQg4sHK1KbXIgorCisjOiBvcHMuYzo1NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbCAlcyBvZiAlczsgTGluZSAlbGQgb2YgJWxkOyBXb3JkICVsZCBvZiAlbGQ7IEJ5dGUgJWxkIG9mICVsZCIKK21zZ3N0ciAi68/Mz87LwSAlcyDaICVzOyDy0cTPyyAlbGQg2iAlbGQ7IPPMz9fPICVsZCDaICVsZDsg4sHK1CAlbGQg2iAlbGQiCisKKyM6IG9wcy5jOjU0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCslbGQgZm9yIEJPTSkiCittc2dzdHIgIigrJWxkIMTM0SBCT00pIgorCisjOiBvcHRpb24uYzoxOTg5Cittc2dpZCAiVGhhbmtzIGZvciBmbHlpbmcgVmltIgorbXNnc3RyICLk0cvVpM3PINrBINemxNemxMHOztEgVmltIgorCisjOiBvcHRpb24uYzozMTc1Cittc2dpZCAiT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIu/Qw6bRIM7FINCmxNTSyc3VpNTY09EiCisKKyM6IG9wdGlvbi5jOjMyMDAKK21zZ2lkICJOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIgorbXNnc3RyICLuxSDEz9rXz8zFzs8g1SBtb2RlbGluZSIKKworIzogb3B0aW9uLmM6MzI1NgorbXNnaWQgIiIKKyJcbiIKKyJcdExhc3Qgc2V0IGZyb20gIgorbXNnc3RyICIiCisiXG4iCisiXHT3z9PUwc7OxSDazabOxc7VINUgIgorCisjOiBvcHRpb24uYzozMzk1Cittc2dpZCAiTnVtYmVyIHJlcXVpcmVkIGFmdGVyID0iCittc2dzdHIgIvCm08zRID0g0M/U0qbCzs8g18vB2sHUySDeydPMzyIKKworIzogb3B0aW9uLmM6MzcwMiBvcHRpb24uYzo0MzA5Cittc2dpZCAiTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIu7FINrOwcrMxc7PINPF0sXEIM3P1szJ18/T1MXKINTF0s2mzsHMptciCisKKyM6IG9wdGlvbi5jOjM3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBjaGFyYWN0ZXIgPCVzPiIKK21zZ3N0ciAi7sXEz9rXwczFzsnKINPJzdfPzCA8JXM+IgorCisjOiBvcHRpb24uYzo0Mjk0IG9wdGlvbi5jOjU0OTgKK21zZ2lkICJOb3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICL01dQg1MHLz8fPIM7FIMzAwszR1NgiCisKKyM6IG9wdGlvbi5jOjQzMDEKK21zZ2lkICJDYW5ub3Qgc2V0ICd0ZXJtJyB0byBlbXB0eSBzdHJpbmciCittc2dzdHIgIu7FIM3P1tUg09DP0s/WzsnUySAndGVybSciCisKKyM6IG9wdGlvbi5jOjQzMDQKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICLuxSDNz9bVINrNps7J1MkgJ3Rlcm0nINcgR1VJIgorCisjOiBvcHRpb24uYzo0MzA2Cittc2dpZCAiVXNlIFwiOmd1aVwiIHRvIHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIvfJy8/SydPUz9fVytTFIFwiOmd1aVwiIMTM0SDUz8fPIN3PwiDSz9rQz97B1MkgR1VJIgorCisjOiBvcHRpb24uYzo0MzI3Cittc2dpZCAiJ2JhY2t1cGV4dCcgYW5kICdwYXRjaG1vZGUnIGFyZSBlcXVhbCIKK21zZ3N0ciAi79DDpqcgJ2JhY2t1cGV4dCcg1MEgJ3BhdGNobW9kZScgz8TOwcvP16YiCisKKyM6IG9wdGlvbi5jOjQ1ODYKK21zZ2lkICJaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIvLRxM/LINDP0s/WzqbKIgorCisjOiBvcHRpb24uYzo0NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgbnVtYmVyIGFmdGVyIDwlcz4iCittc2dzdHIgIvCm08zRIDwlcz4g19TSwd7Fzs8gzs/NxdIiCisKKyM6IG9wdGlvbi5jOjQ2NjgKK21zZ2lkICJNaXNzaW5nIGNvbW1hIgorbXNnc3RyICL31NLB3sXOzyDLz83VIgorCisjOiBvcHRpb24uYzo0Njc1Cittc2dpZCAiTXVzdCBzcGVjaWZ5IGEgJyB2YWx1ZSIKK21zZ3N0ciAi+s7B3sXOztEgJyDOxSDXy8Hawc7PIgorCisjOiBvcHRpb24uYzo0NzE1Cittc2dpZCAiY29udGFpbnMgdW5wcmludGFibGUgY2hhcmFjdGVyIgorbXNnc3RyICLNptPUydTYIM7FxNLVy8/XzqYg08nN18/MySIKKworIzogb3B0aW9uLmM6NDcyOAorbXNnaWQgIkludmFsaWQgZm9udChzKSIKK21zZ3N0ciAi7sXXptLOzyDXy8Hawc7PINvSycbUKMkpIgorCisjOiBvcHRpb24uYzo0NzM0Cittc2dpZCAiY2FuJ3Qgc2VsZWN0IGZvbnRzZXQiCittc2dzdHIgIs7FIM3P1tUg18nC0sHUySBmb250c2V0IgorCisjOiBvcHRpb24uYzo0NzM2Cittc2dpZCAiSW52YWxpZCBmb250c2V0IgorbXNnc3RyICLuxdem0s7JyiBmb250c2V0IgorCisjOiBvcHRpb24uYzo0NzQzCittc2dpZCAiY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAi7sUgzc/W1SDXycvP0snT1MHUySDbydLPy8nKINvSycbUIgorCisjOiBvcHRpb24uYzo0NzQ1Cittc2dpZCAiSW52YWxpZCB3aWRlIGZvbnQiCittc2dzdHIgIu7F16bSzsnKINvJ0s/Lycog29LJxtQiCisKKyM6IG9wdGlvbi5jOjUwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgPCVjPiIKK21zZ3N0ciAi7sXEz9rXz8zFzsnKINPJzdfPzCDQptPM0SA8JWM+IgorCisjOiBvcHRpb24uYzo1MDk4Cittc2dpZCAiY29tbWEgcmVxdWlyZWQiCittc2dzdHIgItDP1NKmws7BIMvPzcEiCisKKyM6IG9wdGlvbi5jOjUxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJ2NvbW1lbnRzdHJpbmcnIG11c3QgYmUgZW1wdHkgb3IgY29udGFpbiAlcyIKK21zZ3N0ciAiJ2NvbW1lbnRzdHJpbmcnIM3BpCDNptPUydTJICVzIgorCisjOiBvcHRpb24uYzo1MTU0Cittc2dpZCAiTm8gbW91c2Ugc3VwcG9ydCIKK21zZ3N0ciAi7cnbwSDOxSDQpsTU0snN1cCk1NjT0SIKKworIzogb3B0aW9uLmM6NTQwMAorbXNnaWQgIlVuY2xvc2VkIGV4cHJlc3Npb24gc2VxdWVuY2UiCittc2dzdHIgIvDP08ymxM/XzqbT1Ngg18nSwdqm1yDOxSDawdfF0tvFzs8iCisKKyM6IG9wdGlvbi5jOjU0MDQKK21zZ2lkICJ0b28gbWFueSBpdGVtcyIKK21zZ3N0ciAi2sHCwcfB1M8g3sHT1MnOIgorCisjOiBvcHRpb24uYzo1NDA2Cittc2dpZCAidW5iYWxhbmNlZCBncm91cHMiCittc2dzdHIgIsfS1dDJIM7FINrCwczBztPP18HOzyIKKworIzogb3B0aW9uLmM6NTYyMQorbXNnaWQgIkEgcHJldmlldyB3aW5kb3cgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIvDP0MXSxcTOxSDXpsvOzyDV1sUgptPO1aQiCisKKyM6IG9wdGlvbi5jOjU4ODIgb3B0aW9uLmM6NTkxMQorbXNnaWQgIid3aW5oZWlnaHQnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbmhlaWdodCciCittc2dzdHIgIid3aW5oZWlnaHQnIM7FIM3P1sUgwtXUySDNxc7bxSDawSAnd2lubWluaGVpZ2h0JyIKKworIzogb3B0aW9uLmM6NTkyNyBvcHRpb24uYzo1OTQ2Cittc2dpZCAiJ3dpbndpZHRoJyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW53aWR0aCciCittc2dzdHIgIid3aW53aWR0aCcgzsUgzc/WxSDC1dTJIM3FztvFINrBICd3aW5taW53aWR0aCciCisKKyM6IG9wdGlvbi5jOjYwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCBhdCBsZWFzdCAlZCBsaW5lcyIKK21zZ3N0ciAi8M/U0qbCzs8g0tHEy6bXOiDOxSDNxc7bxSAlZCIKKworIzogb3B0aW9uLmM6NjA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJOZWVkIGF0IGxlYXN0ICVkIGNvbHVtbnMiCittc2dzdHIgIvDP1NKmws7PIMvPzM/Oz8s6IM7FIM3FztvFICVkIgorCisjOiBvcHRpb24uYzo2MzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTU6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTM1NTog7sXXpsTPzcEgz9DDptE6ICVzIgorCisjIG1zZ3N0ciAiRTM1NTogIgorIzogb3B0aW9uLmM6NjUwMQorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIOvPxMkg1MXSzabOwczBIC0tLSIKKworIzogb3B0aW9uLmM6NjUwMworbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIPrBx8HM2M6mINrOwd7Fzs7RINrNps7OycggLS0tIgorCisjOiBvcHRpb24uYzo2NTA1Cittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDtptPDxdemINrOwd7Fzs7RINrNps7OycggLS0tIgorCisjOiBvcHRpb24uYzo2NTA3Cittc2dpZCAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSD6zabOzqYgLS0tIgorCisjOiBvcHRpb24uYzo3MTk3Cittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6IPDPzcnMy8EgZ2V0X3ZhcnAgW9DPzcnMy8Eg0NLPx9LBzcldIgorCisjIG1zZ3N0ciAiRTM1NjogIgorIzogb3B0aW9uLmM6ODExMworIywgYy1mb3JtYXQKK21zZ2lkICJFMzU3OiAnbGFuZ21hcCc6IE1hdGNoaW5nIGNoYXJhY3RlciBtaXNzaW5nIGZvciAlcyIKK21zZ3N0ciAiRTM1NzogJ2xhbmdtYXAnOiDkzNEg08nN18/M1SAlcyDOxc3BpCDQwdLJIgorCisjIG1zZ3N0ciAiRTM1NzogIgorIzogb3B0aW9uLmM6ODE0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzU4OiAnbGFuZ21hcCc6IEV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgc2VtaWNvbG9uOiAlcyIKK21zZ3N0ciAiRTM1ODogJ2xhbmdtYXAnOiDuwcTMydvLz9emINPJzdfPzMkg0KbTzNEgYDsnOiAlcyIKKworIyBtc2dzdHIgIkUzNTg6ICIKKyM6IG9zX2FtaWdhLmM6MjczCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICLOxSDNz9bVINemxMvSydTJICIKKworIzogb3NfYW1pZ2EuYzozMDcKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06IO7FIM3P1tUg16bEy9LJ1Mkg16bLzs8hXG4iCisKKyM6IG9zX2FtaWdhLmM6MzI5Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAi8M/U0qbCzs8gQW1pZ2Fkb3MgMi4wNCDBws8g0KbazqbbpiDXxdLTpqdcbiIKKworIzogb3NfYW1pZ2EuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICLwz9TSpsLOzyAlcyDXxdLTpqcgJWxkXG4iCisKKyM6IG9zX2FtaWdhLmM6NDA3Cittc2dpZCAiQ2Fubm90IG9wZW4gTklMOlxuIgorbXNnc3RyICLuxSDNz9bVINemxMvSydTJIE5JTDpcbiIKKworIzogb3NfYW1pZ2EuYzo0MTgKK21zZ2lkICJDYW5ub3QgY3JlYXRlICIKK21zZ3N0ciAi7sUgzc/W1SDT1NfP0snUySAiCisKKyM6IG9zX2FtaWdhLmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbSBleGl0aW5nIHdpdGggJWRcbiIKK21zZ3N0ciAiVmltINrB18XS29WkINLPws/U1SDaICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTI4Cittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAizsUgzc/W1SDIzabOydTJINLF1snNIMvPztPPzKYgPyFcbiIKKworIzogb3NfYW1pZ2EuYzo5Mzggb3NfbWFjLmM6MTE2OCBvc19tc3dpbi5jOjYxOSBvc19yaXNjb3MuYzo3Mjggb3NfdW5peC5jOjI3MzMKK21zZ2lkICJFMzU5OiBTY3JlZW4gbW9kZSBzZXR0aW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkUzNTk6IPLF1snNIMXL0sHO1SDOxSDQpsTU0snN1aTU2NPRIgorCisjIG1zZ3N0ciAiRTM1OTogIgorIzogb3NfYW1pZ2EuYzo5OTQKK21zZ2lkICJtY2hfZ2V0X3NoZWxsc2l6ZTogbm90IGEgY29uc29sZT8/XG4iCittc2dzdHIgIm1jaF9nZXRfc2hlbGxzaXplOiDOxSDLz87Tz8zYPz9cbiIKKworIy4gaWYgVmltIG9wZW5lZCBhIHdpbmRvdzogRXhlY3V0aW5nIGEgc2hlbGwgbWF5IGNhdXNlIGNyYXNoZXMKKyM6IG9zX2FtaWdhLmM6MTE0MgorbXNnaWQgIkUzNjA6IENhbm5vdCBleGVjdXRlIHNoZWxsIHdpdGggLWYgb3B0aW9uIgorbXNnc3RyICJFMzYwOiDuxSDNz9bVINfJy8/OwdTJIGBzaGVsbCcg2iDP0MOmpMAgLWYiCisKKyMgbXNnc3RyICJFMzYwOiAiCisjOiBvc19hbWlnYS5jOjExODMgb3NfYW1pZ2EuYzoxMjczCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICLuxSDNz9bVINfJy8/OwdTJICIKKworIzogb3NfYW1pZ2EuYzoxMTg2IG9zX2FtaWdhLmM6MTI4MworbXNnaWQgInNoZWxsICIKK21zZ3N0ciAic2hlbGwgIgorCisjOiBvc19hbWlnYS5jOjEyMDYgb3NfYW1pZ2EuYzoxMzA4Cittc2dpZCAiIHJldHVybmVkXG4iCittc2dzdHIgIiDQz9fF0s7V1M9cbiIKKworIzogb3NfYW1pZ2EuYzoxNDQ4Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSDawc3BzMnKIgorCisjOiBvc19hbWlnYS5jOjE0NTIKK21zZ2lkICJJL08gRVJST1IiCittc2dzdHIgIvDPzcnMy8Eg19fPxNUv18nXz8TVIgorCisjOiBvc19tc3dpbi5jOjUwMworbXNnaWQgIi4uLih0cnVuY2F0ZWQpIgorbXNnc3RyICIuLi4o16bE0qbawc7PKSIKKworIzogb3NfbXN3aW4uYzo1OTQKK21zZ2lkICInY29sdW1ucycgaXMgbm90IDgwLCBjYW5ub3QgZXhlY3V0ZSBleHRlcm5hbCBjb21tYW5kcyIKK21zZ3N0ciAiJ2NvbW1hbmRzJyDOxSA4MCwgzsUgzc/W1SDXycvPztXXwdTJINrP186m286mIMvPzcHOxMkiCisKKyM6IG9zX21zd2luLmM6NzA2IG9zX3VuaXguYzo0OTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjQ6IExpYnJhcnkgY2FsbCBmYWlsZWQgZm9yIFwiJXMoKVwiIgorbXNnc3RyICJFMzY0OiD3ycvMycsg2iDCpsLMps/UxcvJIMTM0SBcIiVzKClcIs7FINfEwdfT0SIKKworIyBtc2dzdHIgIkUzNjQ6ICIKKyM6IG9zX21zd2luLmM6MTM0MAorbXNnaWQgIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRTIzNzog7sUg18TBzM/T0SDXycLSwdTJIMTS1cum187JyyIKKworIzogb3NfbXN3aW4uYzoxMzg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvICVzIG9uICVzIgorbXNnc3RyICLOwSAlcyDaICVzIgorCisjOiBvc19tc3dpbi5jOjE0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0ODogVW5rbm93biBmb250OiAlcyIKK21zZ3N0ciAiRTQ4ODog7sXXpsTPzcnKINvSycbUOiAlcyIKKworIzogb3NfbXN3aW4uYzoxNDUzIG9zX21zd2luLmM6MTQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM4OiBQcmludCBlcnJvcjogJXMiCittc2dzdHIgIkUyMzg6IPDPzcnMy8EgxNLVy9U6ICVzIgorCisjOiBvc19tc3dpbi5jOjE0NjQKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICLuxdemxM/NzyIKKworIzogb3NfbXN3aW4uYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nICclcyciCittc2dzdHIgIuTS1cvVpM3PICclcyciCisKKyM6IG9zX21zd2luLmM6MjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDog8M/NyczLz9fBIM7B2tfBIM7Bws/S1SDTyc3Xz8ym1yBcIiVzXCIg1SDOwdrXpiDb0snG1MEgXCIlc1wiIgorCisjOiBvc19tc3dpbi5jOjI1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTog8M/NyczLz9fJyiDTyc3Xz8wgJWMg1yDOwdrXpiDb0snG1MEgXCIlc1wiIgorCisjOiBvc19yaXNjb3MuYzoxMjI3Cittc2dpZCAiRTM2NjogSW52YWxpZCAnb3NmaWxldHlwZScgb3B0aW9uIC0gdXNpbmcgVGV4dCIKK21zZ3N0ciAiRTM2Njog7sXXptLOwSDP0MOm0SAnb3NmaWxldHlwZScgLS0g18nLz9LJ09TP19XAIGBUZXh0JyIKKworIyBtc2dzdHIgIkUzNjY6ICIKKyM6IG9zX3VuaXguYzo4MDMKK21zZ2lkICJWaW06IERvdWJsZSBzaWduYWwsIGV4aXRpbmdcbiIKK21zZ3N0ciAiVmltOiDv1NLJzcHOzyDTycfOwcwgxNem3qYsINrB18XS29XAXG4iCisKKyM6IG9zX3VuaXguYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IO/U0snNwc7PINPJx87BzCDawcumzt7J1Mkg0s/Cz9TVICglcylcbiIKKworIzogb3NfdW5peC5jOjgxMgorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWxcbiIKK21zZ3N0ciAiVmltOiDv1NLJzcHOzyDTycfOwcwg2sHLps7eydTJINLPws/U1VxuIgorCisjOiBvc191bml4LmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAi7sEg16bEy9LJ1NTRIFgtxMHT0MzFwCDQptvMzyAlbGQgzabMptPFy9XOxCIKKworIzogb3NfdW5peC5jOjEwOTMKK21zZ2lkICIiCisiXG4iCisiVmltOiBHb3QgWCBlcnJvclxuIgorbXNnc3RyICIiCisiXG4iCisiVmltOiDv1NLJzcHOzyDQz83JzMvVIFhcbiIKKworIzogb3NfdW5peC5jOjExNjAKK21zZ2lkICJUZXN0aW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICLuxSDXxMHMz9PRINDF0sXXptLJ1MkgxMnT0MzFyiBYIgorCisjOiBvc191bml4LmM6MTMwNAorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0aW1lZCBvdXQiCittc2dzdHIgIuTV1sUgxM/Xx88g16bEy9LJ16TU2NPRIMTJ09DMxcogWCwg0MXSxdLXwc7PIgorCisjOiBvc191bml4LmM6MjkwNiBvc191bml4LmM6MzQ5MAorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCAiCittc2dzdHIgIiIKKyJcbiIKKyLuxSDNz9bVINfJy8/OwdTJIGBzaGVsbCciCisKKyM6IG9zX3VuaXguYzoyOTUxCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsIHNoXG4iCittc2dzdHIgIiIKKyJcbiIKKyLuxSDNz9bVINfJy8/OwdTJIGBzaCdcbiIKKworIyBtc2dzdHIgIkUzNjI6ICIKKyM6IG9zX3VuaXguYzoyOTU1IG9zX3VuaXguYzozNDk2Cittc2dpZCAiIgorIlxuIgorInNoZWxsIHJldHVybmVkICIKK21zZ3N0ciAiIgorIlxuIgorInNoZWxsINDP18XS1MGkOiAiCisKKyM6IG9zX3VuaXguYzozMDg5Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIu7FIM3P1tUg09TXz9LJ1Mkgy8HOwczJXG4iCisKKyM6IG9zX3VuaXguYzozMTA0Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBmb3JrXG4iCittc2dzdHIgIiIKKyJcbiIKKyLuxSDNz9bVINLP2sTXz6fUySDXycvPzsHOztEgW2ZvcmsoKV1cbiIKKworIzogb3NfdW5peC5jOjM1MDMKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKyJcbiIKKyLrz83BzsTBINrBy6bO3snMwSDXycvPzsHOztFcbiIKKworIzogb3NfdW5peC5jOjUwMTAKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICLuxSDXxMHMz9PRINemxMvSydTJIMTJ09DMxcogWCIKKworIzogb3Nfdm1zX21tcy5jOjU5Cittc2dpZCAiQXQgbGluZSIKK21zZ3N0ciAi8tHEz8s6IgorCisjOiBvc193MzJleGUuYzoxNjkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICLuxSDXxMHMz9PRINrB18HO1MHWydTJIHZpbTMyLmRsbCIKKworIzogb3NfdzMyZXhlLmM6MTY5IG9zX3czMmV4ZS5jOjE3OQorbXNnaWQgIlZJTSBFcnJvciIKK21zZ3N0ciAi8M/NyczLwSBWaW0iCisKKyM6IG9zX3czMmV4ZS5jOjE3OQorbXNnaWQgIkNvdWxkIG5vdCBmaXggdXAgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIERMTCEiCittc2dzdHIgIu7FIM3P1tUg18nQ0sHXydTJINfLwdqm187Jy8kgzsEgxtXOy8OmpyBETEwhIgorCisjOiBvc193aW4xNi5jOjU3OCBvc193aW4zMi5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hlbGwgcmV0dXJuZWQgJWQiCittc2dzdHIgInNoZWxsINDP18XS1MGkICVkIgorCisjOiBvc193aW4zMi5jOjI1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgJXMgZXZlbnRcbiIKK21zZ3N0ciAiVmltOiDv1NLJzcHOzyAlcy3Qz8SmwFxuIgorCisjOiBvc193aW4zMi5jOjI1MzcKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAiY2xvc2UiCisKKyM6IG9zX3dpbjMyLmM6MjUzOQorbXNnaWQgImxvZ29mZiIKK21zZ3N0ciAibG9nb2ZmIgorCisjOiBvc193aW4zMi5jOjI1NDAKK21zZ2lkICJzaHV0ZG93biIKK21zZ3N0ciAic2h1dGRvd24iCisKKyM6IG9zX3dpbjMyLmM6MzAyMQorbXNnaWQgIkUzNzE6IENvbW1hbmQgbm90IGZvdW5kIgorbXNnc3RyICJFMzcxOiDrz83BzsTVIM7FINrOwcrExc7PIgorCisjOiBvc193aW4zMi5jOjMwMzQKK21zZ2lkICIiCisiVklNUlVOLkVYRSBub3QgZm91bmQgaW4geW91ciAkUEFUSC5cbiIKKyJFeHRlcm5hbCBjb21tYW5kcyB3aWxsIG5vdCBwYXVzZSBhZnRlciBjb21wbGV0aW9uLlxuIgorIlNlZSAgOmhlbHAgd2luMzItdmltcnVuICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyLmwcrMIFZJTVJVTi5FWEUgzsUg2s7BysTFzs8g1SDXwdvPzdUg28zRyNUg0M/b1cvVLlxuIgorIvrP186m286mIMvPzcHOxMkgzsUgwtXE1dTYINDSydrV0MnOxc6mINCm08zRINfJy8/Owc7O0S5cbiIKKyLkydem1NjT0SAgOmhlbHAgd2luMzItdmltcnVuICDEzNEg0M/EwczY28+nIKbOxs/SzcHDpqcuIgorCisjOiBvc193aW4zMi5jOjMwMzcKK21zZ2lkICJWaW0gV2FybmluZyIKK21zZ3N0ciAi8M/QxdLFxNbFzs7RIFZpbSIKKworIyBtc2dzdHIgIkUzNzE6ICIKKyM6IHF1aWNrZml4LmM6MjgxCittc2dpZCAiRTM3MjogVG9vIG1hbnkgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzcyOiD6wcLBx8HUzyAlJSVjINUg0tHEy9Ugxs/SzcHUwSIKKworIyBtc2dzdHIgIkUzNzI6ICIKKyM6IHF1aWNrZml4LmM6Mjk0Cittc2dpZCAiRTM3MzogVW5leHBlY3RlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzM6IO7Fz96my9XXwc7JyiBgJSUlYycg1SDS0cTL1SDGz9LNwdTBIgorCisjIG1zZ3N0ciAiRTM3MzogIgorIzogcXVpY2tmaXguYzozNDgKK21zZ2lkICJFMzc0OiBNaXNzaW5nIF0gaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NDog99TSwd7Fzs8gXSDVINLRxMvVIMbP0s3B1MEiCisKKyMgbXNnc3RyICJFMzc0OiAiCisjOiBxdWlja2ZpeC5jOjM2MgorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTogJSUlYyDVINLRxMvVIMbP0s3B1MEgzsUg0KbE1NLJzdWk1NjT0SIKKworIyBtc2dzdHIgIkUzNzU6ICIKKyM6IHF1aWNrZml4LmM6MzgwCittc2dpZCAiRTM3NjogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmcgcHJlZml4IgorbXNnc3RyICJFMzc2OiDwz83JzMvP18nKIGAlJSVjJyDVINDSxcamy9OmINLRxMvVIMbP0s3B1MEiCisKKyMgbXNnc3RyICJFMzc2OiAiCisjOiBxdWlja2ZpeC5jOjM4OAorbXNnaWQgIkUzNzc6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc2OiDwz83JzMvP18nKIGAlJSVjJyDVINLRxMvVIMbP0s3B1MEiCisKKyMgbXNnc3RyICJFMzc3OiAiCisjOiBxdWlja2ZpeC5jOjQxNAorbXNnaWQgIkUzNzg6ICdlcnJvcmZvcm1hdCcgY29udGFpbnMgbm8gcGF0dGVybiIKK21zZ3N0ciAiRTM3ODogJ2Vycm9yZm9ybWF0JyDNptPUydTYIMzJ28Ug2tfJ3sHKzqYg08nN18/MySIKKworIyBtc2dzdHIgIkUzNzg6ICIKKyM6IHF1aWNrZml4LmM6NTIwCittc2dpZCAiRTM3OTogTWlzc2luZyBvciBlbXB0eSBkaXJlY3RvcnkgbmFtZSIKK21zZ3N0ciAiRTM3OTog99TSwd7Fzs8gzsHa19UgxMnSxcvUz9KmpyIKKworIzogcXVpY2tmaXguYzo5MzEKK21zZ2lkICJObyBtb3JlIGl0ZW1zIgorbXNnc3RyICLv09TBzs6myiDFzMXNxc7UIgorCisjOiBxdWlja2ZpeC5jOjExNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCVkIG9mICVkKSVzJXM6ICIKK21zZ3N0ciAiKCVkINogJWQpJXMlczogIgorCisjOiBxdWlja2ZpeC5jOjExNTQKK21zZ2lkICIgKGxpbmUgZGVsZXRlZCkiCittc2dzdHIgIiAo0tHEz8sg18nEwczFzs8pIgorCisjOiBxdWlja2ZpeC5jOjEzNjAKK21zZ2lkICJFMzgwOiBBdCBib3R0b20gb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODA6IPPUxcsgcXVpY2tmaXgg0M/Sz9bOpsoiCisKKyM6IHF1aWNrZml4LmM6MTM2OQorbXNnaWQgIkUzODE6IEF0IHRvcCBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MTog98XS28nOwSDT1MXL1SBxdWlja2ZpeCIKKworIzogcXVpY2tmaXguYzoxMzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAi09DJ08/LINDPzcnMz8sgJWQg2iAlZDsgJWQg0M/NyczPyyIKKworIzogcXVpY2tmaXguYzoxODQyCittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4Mjog7sUgzc/W1SDawdDJ08HUySwg18vB2sHOwSDP0MOm0SAnYnVmdHlwZSciCisKKyMgbXNnc3RyICJFMzgyOiAiCisjOiByZWdleHAuYzo4MDIKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiD60sHaz8sg2sHOwcTUzyDEz9fHycoiCisKKyMgbXNnc3RyICJFMzM5OiAiCisjOiByZWdleHAuYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTogTmVzdGVkICVzKiIKK21zZ3N0ciAiRTYxOiD3y8zBxMXOpiAlcyoiCisKKyMgbXNnc3RyICJFNjE6ICIKKyM6IHJlZ2V4cC5jOjEzMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyOiBOZXN0ZWQgJXMlYyIKK21zZ3N0ciAiRTYyOiD3y8zBxMXOpiAlcyVjIgorCisjIG1zZ3N0ciAiRTYyOiAiCisjOiByZWdleHAuYzoxNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDog8KbTzNEgJXMlYyDOpt7Px88gzsXNwaQiCisKKyMgbXNnc3RyICJFNjQ6ICIKKyM6IHJlZ2V4cC5jOjI0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ludGF4IGVycm9yIGluICVzey4uLn0iCittc2dzdHIgIvPJztTBy9PJ3s7BINDPzcnMy8Eg1yAlc3suLi59IgorCisjOiByZWdleHAuYzoyNzI3Cittc2dpZCAiRTM2MTogQ3Jhc2ggaW50ZXJjZXB0ZWQ7IHJlZ2V4cCB0b28gY29tcGxleD8iCittc2dzdHIgIkUzNjE6IPemxMLVzMHT2CDB18HSptE7INrBzsHE1M8g08vMwcTOycog2tLB2s/LPyIKKworIzogcmVnZXhwLmM6Mjg2MgorbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2Mzog+tLB2s/LINreyc7J1yDQz83JzMvVINPUxcvVIgorCisjOiByZWdleHAuYzozMDk4Cittc2dpZCAiRXh0ZXJuYWwgc3VibWF0Y2hlczpcbiIKK21zZ3N0ciAi+s/XzqbbzqYg0KbE2sKmx8k6XG4iCisKKyM6IHNjcmVlbi5jOjIwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0tJTNsZCBsaW5lcyBmb2xkZWQgIgorbXNnc3RyICIrLS1b2sfP0tTPy10oJTNsZCDS0cTLptcpIgorCisjOiBzY3JlZW4uYzo3NDUxCittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgVi3awc2mzsEiCisKKyM6IHNjcmVlbi5jOjc0NTUKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIPrBzabOwSIKKworIzogc2NyZWVuLmM6NzQ2MAorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIg78LF0s7V1M8iCisKKyM6IHNjcmVlbi5jOjc0NjIKK21zZ2lkICIgSU5TRVJUIgorbXNnc3RyICIg99PUwdfLwSIKKworIzogc2NyZWVuLmM6NzQ2NQorbXNnaWQgIiAoaW5zZXJ0KSIKK21zZ3N0ciAiICjX09TB18vBKSIKKworIzogc2NyZWVuLmM6NzQ2NworbXNnaWQgIiAocmVwbGFjZSkiCittc2dzdHIgIiAo2sHNps7BKSIKKworIzogc2NyZWVuLmM6NzQ2OQorbXNnaWQgIiAodnJlcGxhY2UpIgorbXNnc3RyICIgKFYt2sHNps7BKSIKKworIzogc2NyZWVuLmM6NzQ3MgorbXNnaWQgIiBIZWJyZXciCittc2dzdHIgIiBIZWJyZXciCisKKyM6IHNjcmVlbi5jOjc0ODAKK21zZ2lkICIgKGxhbmcpIgorbXNnc3RyICIgKGxhbmcpIgorCisjOiBzY3JlZW4uYzo3NDgzCittc2dpZCAiIChwYXN0ZSkiCittc2dzdHIgIiAowsXaIM/C0s/Cy8kpIgorCisjOiBzY3JlZW4uYzo3NDg5Cittc2dpZCAiIFNFTEVDVCIKK21zZ3N0ciAiIPfJxKbMxc7O0SIKKworIzogc2NyZWVuLmM6NzQ5MQorbXNnaWQgIiBWSVNVQUwiCittc2dzdHIgIiD3ycKm0iIKKworIzogc2NyZWVuLmM6NzQ5MworbXNnaWQgIiBCTE9DSyIKK21zZ3N0ciAiIFvizM/LXSIKKworIzogc2NyZWVuLmM6NzQ5NQorbXNnaWQgIiBMSU5FIgorbXNnc3RyICIgW/LRxMvJXSIKKworIzogc2NyZWVuLmM6NzUwOCBzY3JlZW4uYzo3NTYyCittc2dpZCAicmVjb3JkaW5nIgorbXNnc3RyICLKxMUg2sHQydMiCisKKyM6IHNlYXJjaC5jOjM2Cittc2dpZCAic2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIgorbXNnc3RyICLwz9vVyyDEpsrbz9cgxM8gx8/SySwg0NLPxM/X1tWkzc8g1c7J2tUiCisKKyM6IHNlYXJjaC5jOjM3Cittc2dpZCAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIgorbXNnc3RyICLwz9vVyyDEpsrbz9cgxM8gzsna1Swg0NLPxM/X1tWkzc8g2iDHz9LJIgorCisjOiBzZWFyY2guYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4MzogSW52YWxpZCBzZWFyY2ggc3RyaW5nOiAlcyIKK21zZ3N0ciAiRTM4Mzog7sXXptLOycog2tLB2s/LIMTM0SDQz9vVy9U6ICVzIgorCisjOiBzZWFyY2guYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg0OiDwz9vVyyDEpsrbz9cgxM8gx8/SySDCxdog2sKmx6bXINogJXMiCisKKyM6IHNlYXJjaC5jOjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg1OiBzZWFyY2ggaGl0IEJPVFRPTSB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODU6IPDP29XLIMSmytvP1yDEzyDOydrVIMLF2iDawqbHptcg2iAlcyIKKworIzogc2VhcmNoLmM6MTEwNworbXNnaWQgIkUzODY6IEV4cGVjdGVkICc/JyBvciAnLycgIGFmdGVyICc7JyIKK21zZ3N0ciAiRTM4Njog8KbTzNEgYDsnIM3BpCDK1MkgYD8nIMHCzyBgLyciCisKKyMgbXNnc3RyICJFMzg2OiAiCisjOiBzZWFyY2guYzozNDc5Cittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAo0sHaz80g2iDQz9DF0sXEzqbNySDawqbHwc3JKSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNDk5Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tIPfLzMDexc6mIMbByszJICIKKworIzogc2VhcmNoLmM6MzUwMQorbXNnaWQgIm5vdCBmb3VuZCAiCittc2dzdHIgIs7FINrOwcrExc7PICIKKworIzogc2VhcmNoLmM6MzUwMgorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgItUg28zRyNUg0M/b1cvVIC0tLVxuIgorCisjOiBzZWFyY2guYzozNTQxCittc2dpZCAiICAoQWxyZWFkeSBsaXN0ZWQpIgorbXNnc3RyICIgICj11sUg1SDT0MnTy9UpIgorCisjOiBzZWFyY2guYzozNTQzCittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiAg7sUg2s7BysTFzs8iCisKKyM6IHNlYXJjaC5jOjM1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiCittc2dzdHIgIvDP29XLINUg18vMwN7Fzs/N1SDGwcrMpjogJXMiCisKKyM6IHNlYXJjaC5jOjM4MTMKK21zZ2lkICJFMzg3OiBNYXRjaCBpcyBvbiBjdXJyZW50IGxpbmUiCittc2dzdHIgIkUzODc6IPrCpscg1SDQz9TP3s7PzdUg0tHEy9UiCisKKyM6IHNlYXJjaC5jOjM5NTMKK21zZ2lkICJBbGwgaW5jbHVkZWQgZmlsZXMgd2VyZSBmb3VuZCIKK21zZ3N0ciAi9dOmINfLzMDexc6mIMbByszJIMLVzM8g2s7BysTFzs8iCisKKyM6IHNlYXJjaC5jOjM5NTUKK21zZ2lkICJObyBpbmNsdWRlZCBmaWxlcyIKK21zZ3N0ciAi9s/Ezs/HzyDXy8zA3sXOz8fPIMbByszBIgorCisjOiBzZWFyY2guYzozOTcxCittc2dpZCAiRTM4ODogQ291bGRuJ3QgZmluZCBkZWZpbml0aW9uIgorbXNnc3RyICJFMzg4OiD3ydrOwd7Fzs7RIM7FINrOwcrExc7PIgorCisjOiBzZWFyY2guYzozOTczCittc2dpZCAiRTM4OTogQ291bGRuJ3QgZmluZCBwYXR0ZXJuIgorbXNnc3RyICJFMzg5OiD60sHaz8sgzsUg2s7BysTFzs8iCisKKyM6IHN5bnRheC5jOjI5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MDogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUzOTA6IO7F16bSzsnKIMHSx9XNxc7UOiAlcyIKKworIzogc3ludGF4LmM6MzE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkxOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MTog7sUgptPO1cDeycogy8zB08XU0iDTyc7UwcvTydPVOiAlcyIKKworIyBtc2dzdHIgIkUzOTE6ICIKKyM6IHN5bnRheC5jOjMzNDAKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgIuTM0SDC1cbF0tUgzsUg18nazsHexc7PIMXMxc3FztSm1yDTyc7UwcvTydPVIgorCisjOiBzeW50YXguYzozMzQ4Cittc2dpZCAic3luY2luZyBvbiBDLXN0eWxlIGNvbW1lbnRzIgorbXNnc3RyICLTyc7I0s/OptrBw6bRIMLB2tWk1NjT0SDOwSDzLcvPzcXO1MHSptHIIgorCisjOiBzeW50YXguYzozMzU2Cittc2dpZCAibm8gc3luY2luZyIKK21zZ3N0ciAi08nOyNLPzqbawcOm0SDOxSDXycvP0snT1M/X1aTU2NPRIgorCisjOiBzeW50YXguYzozMzU5Cittc2dpZCAic3luY2luZyBzdGFydHMgIgorbXNnc3RyICLTyc7I0s/OptrBw6bRINDP3snOwaTU2NPRINrBICIKKworIzogc3ludGF4LmM6MzM2MSBzeW50YXguYzozNDMwCittc2dpZCAiIGxpbmVzIGJlZm9yZSB0b3AgbGluZSIKK21zZ3N0ciAiICDS0cTLptcg0MXSxcQg0MXS28nNINLRxMvPzSIKKworIzogc3ludGF4LmM6MzM2NQorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IHN5bmMgaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIOXMxc3FztTJINPJzsjSz86m2sHDpqcg08nO1MHL08nT1SAtLS0iCisKKyM6IHN5bnRheC5jOjMzNjgKK21zZ2lkICIiCisiXG4iCisic3luY2luZyBvbiBpdGVtcyIKK21zZ3N0ciAiIgorIlxuIgorItPJzsjSz86m2sHDpqcgwsHa1aTU2NPRIM7BIMXMxc3FztTByCIKKworIzogc3ludGF4LmM6MzM3MworbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDlzMXNxc7UySDTyc7UwcvTydPVIC0tLSIKKworIzogc3ludGF4LmM6MzM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5Mjog7sUgptPO1cDeycogy8zB08XU0iDTyc7UwcvTydPVOiAlcyIKKworIzogc3ludGF4LmM6MzQyMAorbXNnaWQgIm1pbmltYWwgIgorbXNnc3RyICLNps6mzcHM2M7JyiAiCisKKyM6IHN5bnRheC5jOjM0MjcKK21zZ2lkICJtYXhpbWFsICIKK21zZ3N0ciAizcHL08nNwczYzsnKICIKKworIzogc3ludGF4LmM6NDA1NworbXNnaWQgIkUzOTM6IGdyb3VwW3RdaGVyZSBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5MzogZ3JvdXBbdF1oZXRlINTV1CDOxSDQ0sHDwKQiCisKKyM6IHN5bnRheC5jOjQwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiDuxSDazsHKxMXOzyDPwszB09SmIMTM0SAlcyIKKworIzogc3ludGF4LmM6NDEwOQorbXNnaWQgIkUzOTU6IGNvbnRhaW5zIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk1OiDtptPUydTYIMHSx9XNxc7UySDdzyDOxdDSycrO0dTOpiDU1dQiCisKKyM6IHN5bnRheC5jOjQxMjAKK21zZ2lkICJFMzk2OiBjb250YWluZWRpbiBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5Njog4dLH1c3FztQgzsXQ0snKztHUzsnKINTV1CIKKworIyBtc2dzdHIgIkUzOTY6ICIKKyM6IHN5bnRheC5jOjQxOTgKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5Nzog8M/U0qbCzsEgzsHa18EgxsHKzMEiCisKKyM6IHN5bnRheC5jOjQ1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiBgPScg19TSwd7Fzs86ICVzIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIzogc3ludGF4LmM6NDY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTog7sUgxM/TydTYIMHSx9XNxc7Uptc6IHN5bnRheCByZWdpb24gJXMiCisKKyM6IHN5bnRheC5jOjUwMjUKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDog68zB09TF0iDOxSDXy8Hawc7PIgorCisjOiBzeW50YXguYzo1MDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDE6IFBhdHRlcm4gZGVsaW1pdGVyIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MDE6IOumzsXD2CDa0sHay8EgzsUg2s7BysTOzzogJXMiCisKKyM6IHN5bnRheC5jOjUxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMjogR2FyYmFnZSBhZnRlciBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRTQwMjog882m1NTRINCm08zRINrSwdrLwTogJXMiCisKKyMgbXNnc3RyICJFNDAyOiAiCisjOiBzeW50YXguYzo1MjE5Cittc2dpZCAiRTQwMzogc3ludGF4IHN5bmM6IGxpbmUgY29udGludWF0aW9ucyBwYXR0ZXJuIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTQwMzogc3ludGF4IHN5bnRheDog2tLB2s/LIMTM0SDQ0s/Ez9fWxc7O0SDS0cTLwSDXy8Hawc7PIMTXpt6mIgorCisjOiBzeW50YXguYzo1Mjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDQ6IElsbGVnYWwgYXJndW1lbnRzOiAlcyIKK21zZ3N0ciAiRTQwNDog7sXXptLOpiDB0sfVzcXO1Mk6ICVzIgorCisjIG1zZ3N0ciAiRTQwNDogIgorIzogc3ludGF4LmM6NTMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiDuxc3BpCBgPSc6ICVzIgorCisjIG1zZ3N0ciAiRTQwNTogIgorIzogc3ludGF4LmM6NTMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA2OiBFbXB0eSBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MDY6IPDP0s/WzqbKIMHSx9XNxc7UOiAlcyIKKworIyBtc2dzdHIgIkU0MDY6ICIKKyM6IHN5bnRheC5jOjUzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNzogJXMgbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTQwNzogJXMg1NXUIM7FIMTP2tfPzMXOzyIKKworIzogc3ludGF4LmM6NTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA4OiAlcyBtdXN0IGJlIGZpcnN0IGluIGNvbnRhaW5zIGxpc3QiCittc2dzdHIgIkU0MDg6ICVzIM3BpCDC1dTJINDF0tvJzSDS0cTLz80g1SDGwcrMpiIKKworIzogc3ludGF4LmM6NTQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA5OiBVbmtub3duIGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFNDA5OiDuxdem0s7BIM7B2tfBIMfS1dDJOiAlcyIKKworIyBtc2dzdHIgIkU0MDk6ICIKKyM6IHN5bnRheC5jOjU2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiDuxdem0s7BINCmxMvPzcHOxMEgOnN5bnRheCA6ICVzIgorCisjIG1zZ3N0ciAiRTQxMDogIgorIzogc3ludGF4LmM6NjA0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDExOiBoaWdobGlnaHQgZ3JvdXAgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQxMTog68/M2M/SIM7FINrOwcrExc7POiAlcyIKKworIyBtc2dzdHIgIkU0MTE6ICIKKyM6IHN5bnRheC5jOjYwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMjogTm90IGVub3VnaCBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTI6IO7FxM/T1MHUztjPIMHSx9XNxc7Uptc6IFwiaGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIyBtc2dzdHIgIkU0MTI6ICIKKyM6IHN5bnRheC5jOjYwNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMzogVG9vIG1hbnkgYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEzOiD6wcLBx8HUzyDB0sfVzcXO1KbXOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjIG1zZ3N0ciAiRTQxMzogIgorIzogc3ludGF4LmM6NjA5NgorbXNnaWQgIkU0MTQ6IGdyb3VwIGhhcyBzZXR0aW5ncywgaGlnaGxpZ2h0IGxpbmsgaWdub3JlZCIKK21zZ3N0ciAiRTQxNDog68/MptIg1dbFINfT1MHOz9fMxc7PLCBcIjpoaWdobGlnaHQgbGlua1wiINDSz6bHzs/Sz9fBzs8iCisKKyMgbXNnc3RyICJFNDE0OiAiCisjOiBzeW50YXguYzo2MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTU6IHVuZXhwZWN0ZWQgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTU6IPrOwcsg0qbXzs/T1KYgzsUg0M/U0qbCxc46ICVzIgorCisjIG1zZ3N0ciAiRTQxNTogIgorIzogc3ludGF4LmM6NjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE2OiBtaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE2OiD31NLB3sXOzyDazsHLINKm187P09SmOiAlcyIKKworIzogc3ludGF4LmM6NjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDE3OiBtaXNzaW5nIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQxNzog99TSwd7Fzs8gwdLH1c3FztQ6ICVzIgorCisjOiBzeW50YXguYzo2MzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTg6IElsbGVnYWwgdmFsdWU6ICVzIgorbXNnc3RyICJFNDE4OiDuxdem0s7FINrOwd7Fzs7ROiAlcyIKKworIyBtc2dzdHIgIkU0MTg6ICIKKyM6IHN5bnRheC5jOjY0MzkKK21zZ2lkICJFNDE5OiBGRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDE5OiDuxdemxM/Nycogy8/MptIg1MXL09TVIgorCisjIG1zZ3N0ciAiRTQxOTogIgorIzogc3ludGF4LmM6NjQ1MAorbXNnaWQgIkU0MjA6IEJHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MjA6IO7F16bEz83JyiDLz8ym0iDGz87VIgorCisjIG1zZ3N0ciAiRTQyMDogIgorIzogc3ludGF4LmM6NjUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6IO7F2tLP2tXNpszBIM7B2tfBIMHCzyDOz83F0iDLz8zYz9LVOiAlcyIKKworIyBtc2dzdHIgIkU0MjE6ICIKKyM6IHN5bnRheC5jOjY3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6IPrBzsHE1M8gxM/Xx8nKIMvPxCDUxdLNps7BzNU6ICVzIgorCisjIG1zZ3N0ciAiRTQyMjogIgorIzogc3ludGF4LmM6Njc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzog7sXXptLOycogwdLH1c3FztQ6ICVzIgorCisjIG1zZ3N0ciAiRTQyMzogIgorIzogc3ludGF4LmM6NzI5NQorbXNnaWQgIkU0MjQ6IFRvbyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBpbiB1c2UiCittc2dzdHIgIkU0MjQ6IPrBwsHHwdTPINKm2s7JyCDB1NLJwtXUIMvPzNjP0tUiCisKKyMgbXNnc3RyICJFNDI0OiAiCisjOiB0YWcuYzo5MAorbXNnaWQgImF0IGJvdHRvbSBvZiB0YWcgc3RhY2siCittc2dzdHIgItPUxcsg0M/NptTPyyDQz9LP1s6myiIKKworIzogdGFnLmM6OTEKK21zZ2lkICJhdCB0b3Agb2YgdGFnIHN0YWNrIgorbXNnc3RyICLXxdLbyc7BINPUxcvVINDPzabUz8siCisKKyM6IHRhZy5jOjM5MgorbXNnaWQgIkU0MjU6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI1OiDuxSDNz9bVINDF0sXK1MkgxM8g0M/QxdLFxM7P2Kcg0M/NptTLySDaINDF0tvPpyIKKworIyBtc2dzdHIgIkU0MjU6ICIKKyM6IHRhZy5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI2OiB0YWcgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQyNjog0M/NptTL1SAlcyDOxSDazsHKxMXOzyIKKworIyBtc2dzdHIgIkU0MjY6ICIKKyM6IHRhZy5jOjU0NQorbXNnaWQgIiAgIyBwcmkga2luZCB0YWciCittc2dzdHIgIiIKKworIzogdGFnLmM6NTQ4Cittc2dpZCAiZmlsZVxuIgorbXNnc3RyICLGwcrMXG4iCisKKyMuCisjLiAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMuICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjOiB0YWcuYzo3MDYKK21zZ2lkICJFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOiAiCittc2dzdHIgIvHL1SDTwc3FINDPzabUy9Ug18nLz9LJ09TB1MkgKDxDUj4gxMzRINemxM2mzskpOiAiCisKKyM6IHRhZy5jOjc0NgorbXNnaWQgIkU0Mjc6IFRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNzog7MnbxSDPxM7BINemxNDP16bEzsEg0M/NptTLwSIKKworIyBtc2dzdHIgIkU0Mjc6ICIKKyM6IHRhZy5jOjc0OAorbXNnaWQgIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjg6IOPFIM/T1MHOztEg16bE0M/XpsTOzyDQz82m1MvBIgorCisjIG1zZ3N0ciAiRTQyODogIgorIzogdGFnLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLmwcrMIFwiJXNcIiDOxSCm087VpCIKKworIy4gR2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgdGFncworIzogdGFnLmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAlZCBvZiAlZCVzIgorbXNnc3RyICLQz82m1MvBICVkINogJWQlcyIKKworIzogdGFnLmM6NzgzCittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiDBws8gwqbM2NvFIgorCisjOiB0YWcuYzo3ODUKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiICD3ycvP0snT1M/X1cAg0M/NptTL1SDOxSDSz9rSptrO0cDeySDXxczJy6Yg1MEgzcHMpiDMptTF0skiCisKKyM6IHRhZy5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTQyOTog5sHKzCBcIiVzXCIgzsUgptPO1aQiCisKKyMgbXNnc3RyICJFNDI5OiAiCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRhZy5jOjg5NworbXNnaWQgIiIKKyJcbiIKKyIgICMgVE8gdGFnICAgICAgICAgRlJPTSBsaW5lICBpbiBmaWxlL3RleHQiCittc2dzdHIgIiIKKworIzogdGFnLmM6MTE0NAorbXNnaWQgIkxpbmVhciB0YWcgc2VhcmNoIgorbXNnc3RyICLsps6mys7JyiDQz9vVyyDQz82m1MvJIgorCisjOiB0YWcuYzoxMTQ2Cittc2dpZCAiQmluYXJ5IHRhZyBzZWFyY2giCittc2dzdHIgIuTXpsrLz9fJyiDQz9vVyyDQz82m1MvJIgorCisjOiB0YWcuYzoxMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyB0YWdzIGZpbGUgJXMiCittc2dzdHIgIvvVy8HAIMEgxsHKzKYg0M/NptTPyyAlcyIKKworIzogdGFnLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMwOiBUYWcgZmlsZSBwYXRoIHRydW5jYXRlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRTQzMDog+8zRyCDEzNEgJXMg1yDGwcrMpiDQz82m1Msg2svP0s/exc7PXG4iCisKKyMgbXNnc3RyICJFNDMwOiAiCisjOiB0YWcuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzE6IEZvcm1hdCBlcnJvciBpbiB0YWdzIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDMxOiDwz83JzMvBIMbP0s3B1NUg1SDGwcrMpiDQz82m1M/LIFwiJXNcIiIKKworIyBtc2dzdHIgIkU0MzE6ICIKKyM6IHRhZy5jOjE4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICLwxdLFxCDCwcrUz80gJWxkIgorCisjOiB0YWcuYzoxODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzI6IFRhZ3MgZmlsZSBub3Qgc29ydGVkOiAlcyIKK21zZ3N0ciAiRTQzMjog5sHKzCDQz82m1M/LICVzIM7FINfQz9LRxMvP18HOycoiCisKKyMgbXNnc3RyICJFNDMyOiAiCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MTkxMQorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzog7sXNwaQgxsHMwSDQz82m1M/LIgorCisjIG1zZ3N0ciAiRTQzMzogIgorIzogdGFnLmM6MjU4MworbXNnaWQgIkU0MzQ6IENhbid0IGZpbmQgdGFnIHBhdHRlcm4iCittc2dzdHIgIkU0MzQ6IO7FIM3P1tUg2s7BytTJINDPzabUy9Ug2sEgp6cg2tLB2svPzSIKKworIyBtc2dzdHIgIkU0MzQ6ICIKKyM6IHRhZy5jOjI1OTQKK21zZ2lkICJFNDM1OiBDb3VsZG4ndCBmaW5kIHRhZywganVzdCBndWVzc2luZyEiCittc2dzdHIgIkU0MzU6IO7FIM3P1tUg2s7BytTJINDPzabUy9UsINrEz8fBxNXA09ghIgorCisjIG1zZ3N0ciAiRTQzNTogIgorIzogdGVybS5jOjE3MzMKK21zZ2lkICInIG5vdCBrbm93bi4gQXZhaWxhYmxlIGJ1aWx0aW4gdGVybWluYWxzIGFyZToiCittc2dzdHIgIicgzsUg16bEz83Jyi4g98LVxM/Xwc6mINTF0s2mzsHMyToiCisKKyM6IHRlcm0uYzoxNzU3Cittc2dpZCAiZGVmYXVsdGluZyB0byAnIgorbXNnc3RyICLC1cTFzc8g19fB1sHUySDdzyDDxSAnIgorCisjOiB0ZXJtLmM6MjExMAorbXNnaWQgIkNhbm5vdCBvcGVuIHRlcm1jYXAgZmlsZSIKK21zZ3N0ciAi7sUgzc/W1SDXpsTL0snUySCmwcrMIM3P1szJ18/T1MXKINTF0s2mzsHMptcgW3Rlcm1jYXBdIgorCisjOiB0ZXJtLmM6MjExMworbXNnaWQgIlRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtaW5mbyIKK21zZ3N0ciAi7sXNwaQgps7Gz9LNwcOmpyDQ0s8g1MXSzabOwcwgW3Rlcm1pbmZvXSIKKworIzogdGVybS5jOjIxMTUKK21zZ2lkICJUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAi7sXNwaQgps7Gz9LNwcOmpyDQ0s8gzc/WzMnXz9PUpiDUxdLNps7BzMEgW3Rlcm1jYXBdIgorCisjOiB0ZXJtLmM6MjI3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDM2OiBObyBcIiVzXCIgZW50cnkgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTQzNjog7sXNwaQgps7Gz9LNwcOmpyDQ0s8gzc/WzMnXz9PUpiDUxdLNps7BzMEgXCIlc1wiIFt0ZXJtY2FwXSIKKworIzogdGVybS5jOjI3NDgKK21zZ2lkICJFNDM3OiB0ZXJtaW5hbCBjYXBhYmlsaXR5IFwiY21cIiByZXF1aXJlZCIKK21zZ3N0ciAiRTQzNzogzc/WzMnXptPU2CDUxdLNps7BzMEgXCJjbVwiIM/Cz9cn0drLz9fBIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0ODg4Cittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDrzMHXptumINTF0s2mzsHMwSAtLS0iCisKKyM6IHVpLmM6MjQwCittc2dpZCAibmV3IHNoZWxsIHN0YXJ0ZWRcbiIKK21zZ3N0ciAi0s/a0M/ewdTPIM7P18nKIHNoZWxsXG4iCisKKyM6IHVpLmM6MTcwNQorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICJWaW06IPDPzcnMy8Eg3snUwc7O0SDX18/E1Swg2sHXxdLb1cAg0s/Cz9TVLi4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6MzgzCittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICL3psTNps7BIM7FIMLVxMUgzc/WzMnXwSwg0NLPxM/X1snUySIKKworIzogdW5kby5jOjUzOAorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IM7F16bSzqYgzs/NxdLJINLRxMum1yBb0M/NyczLwSDQ0s/H0sHNyV0iCisKKyMgbXNnc3RyICJFNDM4OiAiCisjOiB1bmRvLmM6NzA3Cittc2dpZCAiMSBjaGFuZ2UiCittc2dzdHIgIs/EzsEg2s2mzsEiCisKKyM6IHVuZG8uYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYW5nZXMiCittc2dzdHIgItrNps46ICVsZCIKKworIzogdW5kby5jOjc1MworbXNnaWQgIkU0Mzk6IHVuZG8gbGlzdCBjb3JydXB0IgorbXNnc3RyICJFNDM5OiDz0MnTz8sg16bEzabOySDQz9vLz8TWxc7PIFvQz83JzMvBINDSz8fSwc3JXSIKKworIyBtc2dzdHIgIkU0Mzk6ICIKKyM6IHVuZG8uYzo3ODUKK21zZ2lkICJFNDQwOiB1bmRvIGxpbmUgbWlzc2luZyIKK21zZ3N0ciAiRTQ0MDog19TSwd7Fzs8g0tHEz8sg16bEzabOySBb0M/NyczLwSDQ0s/H0sHNyV0iCisKKyMgbXNnc3RyICJFNDQwOiAiCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIy4gT25seSBNUyBWQyA0LjEgYW5kIGVhcmxpZXIgY2FuIGRvIFdpbjMycworIzogdmVyc2lvbi5jOjg5NworbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIvfF0tOm0SDEzNEgMTYvMzIgYml0IFdpbmRvd3Mg2iDQpsTU0snNy8/AIEdVSSIKKworIzogdmVyc2lvbi5jOjg5OQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIvfF0tOm0SDEzNEgMzIgYml0IFdpbmRvd3Mg2iDQpsTU0snNy8/AIEdVSSIKKworIzogdmVyc2lvbi5jOjkwMgorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiINcg0sXWyc2mIFdpbjMycyIKKworIzogdmVyc2lvbi5jOjkwNAorbXNnaWQgIiB3aXRoIE9MRSBzdXBwb3J0IgorbXNnc3RyICIg2iDQpsTU0snNy8/AIE9MRSIKKworIzogdmVyc2lvbi5jOjkwNworbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBjb25zb2xlIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyL3xdLTptEgxMzRIDMyIGJpdCBXaW5kb3dzIgorCisjOiB2ZXJzaW9uLmM6OTExCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYgYml0IHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyL3xdLTptEgxMzRIDE2IGJpdCBXaW5kb3dzIgorCisjOiB2ZXJzaW9uLmM6OTE1Cittc2dpZCAiIgorIlxuIgorIjMyIGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIvfF0tOm0SDEzNEgMzIgYml0IE1TLURPUyIKKworIzogdmVyc2lvbi5jOjkxNworbXNnaWQgIiIKKyJcbiIKKyIxNiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyL3xdLTptEgxMzRIDE2IGJpdCBNUy1ET1MiCisKKyM6IHZlcnNpb24uYzo5MjMKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIvfF0tOm0SDEzNEgTWFjT1MgWCAodW5peCkiCisKKyM6IHZlcnNpb24uYzo5MjUKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisi98XS06bRIMTM0SBNYWNPUyBYIgorCisjOiB2ZXJzaW9uLmM6OTI4Cittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyL3xdLTptEgxMzRIE1hY09TIgorCisjOiB2ZXJzaW9uLmM6OTMzCittc2dpZCAiIgorIlxuIgorIlJJU0MgT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorItfF0tOm0SBSSVNDIE9TIgorCisjOiB2ZXJzaW9uLmM6OTQzCittc2dpZCAiIgorIlxuIgorIkluY2x1ZGVkIHBhdGNoZXM6ICIKK21zZ3N0ciAiIgorIlxuIgorIvfLzMDexc7PIMzB1MvJOiAiCisKKyM6IHZlcnNpb24uYzo5NzAKK21zZ2lkICIiCisiXG4iCisiQ29tcGlsZWQgIgorbXNnc3RyICIiCisiXG4iCisi+svPzdCmzNjP18HOzyAiCisKKyM6IHZlcnNpb24uYzo5NzMKK21zZ2lkICJieSAiCittc2dzdHIgIi0tICIKKworIzogdmVyc2lvbi5jOjk4NQorbXNnaWQgIiIKKyJcbiIKKyJIdWdlIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisi98XS06bRIGBodWdlJyAiCisKKyM6IHZlcnNpb24uYzo5ODgKK21zZ2lkICIiCisiXG4iCisiQmlnIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisi98XS06bRIGBiaWcnICIKKworIzogdmVyc2lvbi5jOjk5MQorbXNnaWQgIiIKKyJcbiIKKyJOb3JtYWwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyL3xdLTptEgYG5vcm1hbCcgIgorCisjOiB2ZXJzaW9uLmM6OTk0Cittc2dpZCAiIgorIlxuIgorIlNtYWxsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisi98XS06bRIGBzbWFsbCcgIgorCisjOiB2ZXJzaW9uLmM6OTk2Cittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyL3xdLTptEgYHRpbnknICIKKworIzogdmVyc2lvbi5jOjEwMDIKK21zZ2lkICJ3aXRob3V0IEdVSS4iCittc2dzdHIgIsLF2iDQpsTU0snNy8kgR1VJLiIKKworIzogdmVyc2lvbi5jOjEwMDYKK21zZ2lkICJ3aXRoIEdUSy1HTk9NRSBHVUkuIgorbXNnc3RyICLaINCmxNTSyc3Lz8AgR1RLLUdOT01FIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxMDA4Cittc2dpZCAid2l0aCBHVEsgR1VJLiIKK21zZ3N0ciAi2iDQpsTU0snNy8/AIEdUSyBHVUkuIgorCisjOiB2ZXJzaW9uLmM6MTAxMgorbXNnaWQgIndpdGggWDExLU1vdGlmIEdVSS4iCittc2dzdHIgItog0KbE1NLJzcvPwCBYMTEtTW90aWYgR1VJLiIKKworIzogdmVyc2lvbi5jOjEwMTUKK21zZ2lkICJ3aXRoIFgxMS1BdGhlbmEgR1VJLiIKK21zZ3N0ciAi2iDQpsTU0snNy8/AIFgxMS1BdGhlbmEgR1VJLiIKKworIzogdmVyc2lvbi5jOjEwMTgKK21zZ2lkICJ3aXRoIEJlT1MgR1VJLiIKK21zZ3N0ciAi2iDQpsTU0snNy8/AIEJlT1MgR1VJLiIKKworIzogdmVyc2lvbi5jOjEwMjEKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICLaINCmxNTSyc3Lz8AgUGhvdG9uIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxMDI0Cittc2dpZCAid2l0aCBHVUkuIgorbXNnc3RyICLaINCmxNTSyc3Lz8AgR1VJLiIKKworIzogdmVyc2lvbi5jOjEwMjcKK21zZ2lkICJ3aXRoIENhcmJvbiBHVUkuIgorbXNnc3RyICLaINCmxNTSyc3Lz8AgQ2FyYm9uIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxMDMwCittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICLaINCmxNTSyc3Lz8AgQ29jb2EgR1VJLiIKKworIzogdmVyc2lvbi5jOjEwMzMKK21zZ2lkICJ3aXRoIChjbGFzc2ljKSBHVUkuIgorbXNnc3RyICLaICjLzMHTyd7Oyc0pIEdVSS4iCisKKyM6IHZlcnNpb24uYzoxMDQ0Cittc2dpZCAiICBGZWF0dXJlcyBpbmNsdWRlZCAoKykgb3Igbm90ICgtKTpcbiIKK21zZ3N0ciAiIgorIiBcbiIKKyLtptPUydTYICgrKSBbwcLPIM7FIM2m09TJ1NggKC0pXSDUwcumIMvPzdDPzsXO1Mk6XG4iCisKKyM6IHZlcnNpb24uYzoxMDU2Cittc2dpZCAiICAgc3lzdGVtIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgICAg08nT1MXNzsnKIHZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjEwNjEKK21zZ2lkICIgICAgIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgdmltcmMgy8/SydPU1dfB3sE6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTA2NgorbXNnaWQgIiAybmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiIMTS1cfJyiB2aW1yYyDLz9LJ09TV18HewTogXCIiCisKKyM6IHZlcnNpb24uYzoxMDcxCittc2dpZCAiIDNyZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIg1NLF1KbKIHZpbXJjIMvP0snT1NXXwd7BOiBcIiIKKworIzogdmVyc2lvbi5jOjEwNzYKK21zZ2lkICIgICAgICB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgIGV4cmMgy8/SydPU1dfB3sE6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTA4MQorbXNnaWQgIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICDE0tXHycogZXhyYyDLz9LJ09TV18HewTogXCIiCisKKyM6IHZlcnNpb24uYzoxMDg3Cittc2dpZCAiICBzeXN0ZW0gZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgICDTydPUxc3OycogZ3ZpbXJjOiBcIiIKKworIzogdmVyc2lvbi5jOjEwOTEKK21zZ2lkICIgICAgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICBndmltcmMgy8/SydPU1dfB3sE6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTA5NQorbXNnaWQgIjJuZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAixNLVx8nKIGd2aW1yYyDLz9LJ09TV18HewTogXCIiCisKKyM6IHZlcnNpb24uYzoxMTAwCittc2dpZCAiM3JkIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICLU0sXUpsogZ3ZpbXJjIMvP0snT1NXXwd7BOiBcIiIKKworIzogdmVyc2lvbi5jOjExMDcKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgICAgINPJ09TFzc7FIM3FzsA6IFwiIgorCisjOiB2ZXJzaW9uLmM6MTExNQorbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICAgICAgICAgINrBzabOwSDEzNEgJFZJTTogXCIiCisKKyM6IHZlcnNpb24uYzoxMTIxCittc2dpZCAiIGYtYiBmb3IgJFZJTVJVTlRJTUU6IFwiIgorbXNnc3RyICIgICDawc2mzsEgxMzRICRWSU1SVU5USU1FOiBcIiIKKworIzogdmVyc2lvbi5jOjExMjUKK21zZ2lkICJDb21waWxhdGlvbjogIgorbXNnc3RyICL6y8/N0KbM2M/Xwc7POiAiCisKKyM6IHZlcnNpb24uYzoxMTMxCittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAi68/N0KbM0dTP0jogIgorCisjOiB2ZXJzaW9uLmM6MTEzNgorbXNnaWQgIkxpbmtpbmc6ICIKK21zZ3N0ciAi+svPzdDPzs/Xwc7POiAiCisKKyM6IHZlcnNpb24uYzoxMTQxCittc2dpZCAiICBERUJVRyBCVUlMRCIKK21zZ3N0ciAiICD35fLztvEg5OzxIO7h7OHn7+T25e7u8SIKKworIzogdmVyc2lvbi5jOjExNzcKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVmltIC0g8M/L0sHdxc7JyiBWaSIKKworIzogdmVyc2lvbi5jOjExNzkKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAi18XS06bROiAiCisKKyM6IHZlcnNpb24uYzoxMTgwCittc2dpZCAiYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorbXNnc3RyICIgwdfUz9I6IEJyYW0gTW9vbGVuYWFyINTBIKbOLiIKKworIzogdmVyc2lvbi5jOjExODEKK21zZ2lkICJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIgorbXNnc3RyICJWaW0gw8Ug16bEy9LJ1MEg0NLPx9LBzcEsINfJIM3P1sXUxSDXpszYzs8g0s/a0M/X08DE1tXXwdTJIKenIgorCisjOiB2ZXJzaW9uLmM6MTE4MworbXNnaWQgIkhlbHAgcG9vciBjaGlsZHJlbiBpbiBVZ2FuZGEhIgorbXNnc3RyICLkz9DPzc/WptTYINPJ0s/Uwc0g2iD1x8HOxMkhIgorCisjOiB2ZXJzaW9uLmM6MTE4NAorbXNnaWQgInR5cGUgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgIjpoZWxwIGljY2Y8RW50ZXI+ICAgICAgICDQz8TBzNjbwSCmzsbP0s3Bw6bRICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTE4NgorbXNnaWQgInR5cGUgIDpxPEVudGVyPiAgICAgICAgICAgICAgIHRvIGV4aXQgICAgICAgICAiCittc2dzdHIgIjpxPEVudGVyPiAgICAgICAgICAgICAgICDXycimxCDaIFZpbSAgICAgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTE4NworbXNnaWQgInR5cGUgIDpoZWxwPEVudGVyPiAgb3IgIDxGMT4gIGZvciBvbi1saW5lIGhlbHAiCittc2dzdHIgIjpoZWxwPEVudGVyPiDBws8gPEYxPiAgICDQxdLFx8zRxCDEz9DPzc/HySAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTE4OAorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgIjpoZWxwIHZlcnNpb242PEVudGVyPiAgICCmzsbP0s3Bw6bRINDSzyBWaW0gNiAgICAgIgorCisjOiB2ZXJzaW9uLmM6MTE5MQorbXNnaWQgIlJ1bm5pbmcgaW4gVmkgY29tcGF0aWJsZSBtb2RlIgorbXNnc3RyICL3ySDQ0sHDwKTUxSDXINLF1snNpiDT1c2m087PzdUg2iBWaSIKKworIzogdmVyc2lvbi5jOjExOTIKK21zZ2lkICJ0eXBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBmb3IgVmltIGRlZmF1bHRzIgorbXNnc3RyICI6c2V0IG5vY3A8RW50ZXI+ICAgICAgICAg0sXWyc0gzsXT1c2m087JyiDaIFZpICAgICIKKworIzogdmVyc2lvbi5jOjExOTMKK21zZ2lkICJ0eXBlICA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICI6aGVscCBjcC1kZWZhdWx0PEVudGVyPiAgps7Gz9LNwcOm0SDQ0s8g09XNptPOptPU2CIKKworIzogdmVyc2lvbi5jOjEyMDUKK21zZ2lkICJtZW51ICBIZWxwLT5PcnBoYW5zICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gICAgIgorbXNnc3RyICLNxc7AICBIZWxwLT5PcnBoYW5zICAgICAgICAgICDQz8TBzNjbwSCmzsbP0s3Bw6bRIgorCisjOiB2ZXJzaW9uLmM6MTIwNworbXNnaWQgIlJ1bm5pbmcgbW9kZWxlc3MsIHR5cGVkIHRleHQgaXMgaW5zZXJ0ZWQiCittc2dzdHIgIvDSwcPApM3PIMLF2iDSxdbJzabXLCDUxcvT1CDdzyDOwcLSwc7PINfT1MHXzNGk1NjT0SIKKworIzogdmVyc2lvbi5jOjEyMDgKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBJbnNlcnQgTW9kZSAgIgorbXNnc3RyICLNxc7AICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBJbnNlcnQgTW9kZSAgIgorCisjOiB2ZXJzaW9uLmM6MTIwOQorbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0d28gbW9kZXMgICAgICAiCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMTM0SDE18/IINLF1snNptcgICAiCisKKyM6IHZlcnNpb24uYzoxMjEzCittc2dpZCAibWVudSAgRWRpdC0+R2xvYmFsIFNldHRpbmdzLT5Ub2dnbGUgVmkgQ29tcGF0aWJsZSIKK21zZ3N0ciAizcXOwCAgRWRpdC0+R2xvYmFsIFNldHRpbmdzLT5Ub2dnbGUgVmkgQ29tcGF0aWJsZSIKKworIzogdmVyc2lvbi5jOjEyMTQKKyMsIGZ1enp5Cittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgxMzRIFZpbSBkZWZhdWx0cyAgICIKKworIzogdmVyc2lvbi5jOjEyNjAKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICL19+Hn4Tog98kgy8/SydPU1aTUxdPRIFdpbmRvd3MgOTUvOTgvTUUiCisKKyM6IHZlcnNpb24uYzoxMjYzCittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAiOmhlbHAgd2luZG93czk1PEVudGVyPiAgIKbOxs/SzcHDptEg0NLPIMPFICAgICAgICAiCisKKyM6IHdpbmRvdy5jOjIwMQorbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiD3psvOzyDQxdLFx8zRxNUg16bE09XUzqQiCisKKyMgbXNnc3RyICJFNDQxOiAiCisjOiB3aW5kb3cuYzo1ODAKK21zZ2lkICJFNDQyOiBDYW4ndCBzcGxpdCB0b3BsZWZ0IGFuZCBib3RyaWdodCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJFNDQyOiDuxSDNz9bVINLP2s2m09TJ1Mkg16bLzs8gz8TOz97B087PINcgz8LPyCDL1dTByCIKKworIyBtc2dzdHIgIkU0NDI6ICIKKyM6IHdpbmRvdy5jOjEzMzkKK21zZ2lkICJFNDQzOiBDYW5ub3Qgcm90YXRlIHdoZW4gYW5vdGhlciB3aW5kb3cgaXMgc3BsaXQiCittc2dzdHIgIkU0NDM6IO7FIM3P1tUg2s2m09TJ1Mkg16bLzs8gLS0gps7bpiDXpsvOwSDawdfB1sHA1NgiCisKKyMgbXNnc3RyICJFNDQzOiAiCisjOiB3aW5kb3cuYzoxODM3Cittc2dpZCAiRTQ0NDogQ2Fubm90IGNsb3NlIGxhc3Qgd2luZG93IgorbXNnc3RyICJFNDQ0OiDuxSDNz9bVINrBy9LJ1Mkgz9PUwc7OpCDXpsvOzyIKKworIyBtc2dzdHIgIkU0NDQ6ICIKKyM6IHdpbmRvdy5jOjI1MDEKK21zZ2lkICJBbHJlYWR5IG9ubHkgb25lIHdpbmRvdyIKK21zZ3N0ciAi7MnbxSDPxM7FINemy87PIgorCisjOiB3aW5kb3cuYzoyNTQ4Cittc2dpZCAiRTQ0NTogT3RoZXIgd2luZG93IGNvbnRhaW5zIGNoYW5nZXMiCittc2dzdHIgIkU0NDU6ILbO26Yg16bLzsEgzabT1NHU2CDazabOySIKKworIyBtc2dzdHIgIkU0NDU6ICIKKyM6IHdpbmRvdy5jOjQzNzUKK21zZ2lkICJFNDQ2OiBObyBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFNDQ2OiD3ySDOxSDT1M+n1MUgzsEgps3FzqYgxsHKzMEiCisKKyMgbXNnc3RyICJFNDQ2OiAiCisjOiB3aW5kb3cuYzo0NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDc6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTQ0Nzog5sHKzCBcIiVzXCIgzsUg2s7BysTFzs8g1SAncGF0aCciCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NTg2Cittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICLyxcTBx9XXwdTJICgmbSnSptrOyc3JIFZpbSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo1OTIKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgIvLFxMHH1dfB1Mkgz8TOyc0gKCZWKWltIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjYwNAorbXNnaWQgIkVkaXQgd2l0aCAmVmltIgorbXNnc3RyICLyxcTBx9XXwdTJINrBIMTP1M/Nz8fPwCAmVmltIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjYyOAorbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICLyxcTBx9XXwdTJICgmZSmm087VwN7JzSBWaW0iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NzUyCittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgIvLFxMHH1dfB1Mkg18nC0sHOpiDGwcrMySDawSDEz9DPzc/Hz8AgVmltIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjg5MSAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjk2OQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHByb2Nlc3M6IENoZWNrIGlmIGd2aW0gaXMgaW4geW91ciBwYXRoISIKK21zZ3N0ciAi8M/NyczLwSDT1NfP0sXOztEg0NLPw8XT1Swg0MXSxdem0tTFIN7JIGd2aW0gpCDOwSDbzNHI1SDQz9vVy9UhIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjg5MiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjkwNgorIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5NzAKK21zZ2lkICJndmltZXh0LmRsbCBlcnJvciIKK21zZ3N0ciAi0M/NyczLwSBndmltZXh0LmRsbCIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDUKK21zZ2lkICJQYXRoIGxlbmd0aCB0b28gbG9uZyEiCittc2dzdHIgIvvM0cgg2sHOwcTOzyDEz9fHycohIgorCisjIG1zZ3N0ciAiRTQ0NzogIgorIzogZ2xvYmFscy5oOjg4NworbXNnaWQgIi0tTm8gbGluZXMgaW4gYnVmZmVyLS0iCittc2dzdHIgIi0t9s/Ezs/HzyDS0cTLwS0tIgorCisjLgorIy4gKiBUaGUgZXJyb3IgbWVzc2FnZXMgdGhhdCBjYW4gYmUgc2hhcmVkIGFyZSBpbmNsdWRlZCBoZXJlLgorIy4gKiBFeGNsdWRlZCBhcmUgZXJyb3JzIHRoYXQgYXJlIG9ubHkgdXNlZCBvbmNlIGFuZCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisjLgorIzogZ2xvYmFscy5oOjEwMjgKK21zZ2lkICJDb21tYW5kIGFib3J0ZWQiCittc2dzdHIgIuvPzcHOxNUg2sHXxdLbxc7PIgorCisjOiBnbG9iYWxzLmg6MTAyOQorbXNnaWQgIkFyZ3VtZW50IHJlcXVpcmVkIgorbXNnc3RyICLuxc/CyKbEzs8g18vB2sHUySDB0sfVzcXO1CIKKworIzogZ2xvYmFscy5oOjEwMzAKK21zZ2lkICJFMTA6IFxcIHNob3VsZCBiZSBmb2xsb3dlZCBieSAvLCA/IG9yICYiCittc2dzdHIgIkUxMDog+sEgXFwgzcGkIMrUySAvLCA/IMHCzyAmIgorCisjIG1zZ3N0ciAiRTEwOiAiCisjOiBnbG9iYWxzLmg6MTAzMgorbXNnaWQgIkUxMTogSW52YWxpZCBpbiBjb21tYW5kLWxpbmUgd2luZG93OyA8Q1I+IGV4ZWN1dGVzLCBDVFJMLUMgcXVpdHMiCittc2dzdHIgIkUxMTog7sXQ0snQ1dPUyc3PINcg16bLzqYgy8/Nwc7ELCA8Q1I+INfJy8/O1aQsIENUUkwtQyDXycjPxMnU2CIKKworIzogZ2xvYmFscy5oOjEwMzQKK21zZ2lkICJFMTI6IENvbW1hbmQgbm90IGFsbG93ZWQgZnJvbSBleHJjL3ZpbXJjIGluIGN1cnJlbnQgZGlyIG9yIHRhZyBzZWFyY2giCittc2dzdHIgIkUxMjog68/Nwc7EwSDOxSDEz9rXz8zFzsEg2iDNptLL1dfBztggwsXa0MXLySIKKworIzogZ2xvYmFscy5oOjEwMzUKK21zZ2lkICJFMTM6IEZpbGUgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxMzog5sHKzCCm087VpCAo18nLz9LJ09TBytTFICEg3c/CIM7FINrXwdbB1MkpIgorCisjOiBnbG9iYWxzLmg6MTAzNgorbXNnaWQgIkNvbW1hbmQgZmFpbGVkIgorbXNnc3RyICLrz83BzsTBIM7BINfEwczB09giCisKKyM6IGdsb2JhbHMuaDoxMDM3Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIvfO1dTSptvO0SDQz83JzMvBIgorCisjOiBnbG9iYWxzLmg6MTAzOAorbXNnaWQgIkludGVycnVwdGVkIgorbXNnc3RyICLwxdLF0tfBzs8iCisKKyM6IGdsb2JhbHMuaDoxMDM5Cittc2dpZCAiRTE0OiBJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIkUxNDog7sXXptLOwSDBxNLF08EiCisKKyMgbXNnc3RyICJFMTQ6ICIKKyM6IGdsb2JhbHMuaDoxMDQwCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAi7sXXptLOycogwdLH1c3FztQiCisKKyM6IGdsb2JhbHMuaDoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLuxdem0s7JyiDB0sfVzcXO1CAlcyIKKworIzogZ2xvYmFscy5oOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246ICVzIgorbXNnc3RyICJFMTU6IO7F16bSzsnKINfJ0sHaOiAlcyIKKworIyBtc2dzdHIgIkUxNTogIgorIzogZ2xvYmFscy5oOjEwNDUKK21zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCittc2dzdHIgIkUxNjog7sXXptLOpiDNxdamIgorCisjIG1zZ3N0ciAiRTE2OiAiCisjOiBnbG9iYWxzLmg6MTA0NgorbXNnaWQgIkludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAi7sXXptLOwSDLz83BzsTBIgorCisjOiBnbG9iYWxzLmg6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCIgw8UgxMnSxcvUz9Km0SIKKworIyBtc2dzdHIgIkUxNzogIgorIzogZ2xvYmFscy5oOjEwNTEKK21zZ2lkICJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIgorbXNnc3RyICJFMTg6IO7FY9DPxKbXwc7JyiDTyc3Xz8wg0MXSxcQgJz0nIgorCisjIG1zZ3N0ciAiRTE4OiAiCisjOiBnbG9iYWxzLmg6MTA1MworbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiDwz82m1MvVINfLwdrBzs8g2iDOxc3P1szJ18nNIM7PzcXSz80g0tHEy8EiCisKKyMgbXNnc3RyICJFMTk6ICIKKyM6IGdsb2JhbHMuaDoxMDU0Cittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIkUyMDog8M/NptTL1SDOxSDXy8Hawc7PIgorCisjIG1zZ3N0ciAiRTIwOiAiCisjOiBnbG9iYWxzLmg6MTA1NQorbXNnaWQgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIKK21zZ3N0ciAiRTIxOiD6zabOySDOxSDEz9rXz8zFzqY6ICdtb2RpZmlhYmxlJyDXyc3LztXUzyIKKworIyBtc2dzdHIgIkUyMTogIgorIzogZ2xvYmFscy5oOjEwNTYKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IPrBzsHE1M8g18XMycvBIMumzNjLptPU2CDXy8zBxMXOycggy8/Nwc7EzsnIIMbBysym1yIKKworIyBtc2dzdHIgIkUyMjogIgorIzogZ2xvYmFscy5oOjEwNTcKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6IO7FzcGkINfUz9LJzs7Px88gxsHKzMEiCisKKyMgbXNnc3RyICJFMjM6ICIKKyM6IGdsb2JhbHMuaDoxMDU4Cittc2dpZCAiRTI0OiBObyBzdWNoIGFiYnJldmlhdGlvbiIKK21zZ3N0ciAiRTI0OiD0wcvPx88g08vP0s/exc7O0SDOxc3BpCIKKworIyBtc2dzdHIgIkUyNDogIgorIzogZ2xvYmFscy5oOjEwNTkKK21zZ2lkICJObyAhIGFsbG93ZWQiCittc2dzdHIgIuvP0snT1NXXwdTB1MnT0SAhIM7FIMTP2tfPzMXOzyIKKworIzogZ2xvYmFscy5oOjEwNjEKK21zZ2lkICJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICJFMjU6IEdVSSDOxSDNz9bFIMLV1Mkg18nLz9LJ09TBzs8gLS0gzsUg19emzcvOxc7PINCmxCDewdMgy8/N0KbM0cOmpyIKKworIzogZ2xvYmFscy5oOjEwNjQKK21zZ2lkICJFMjY6IEhlYnJldyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIiIKKyJFMjU6IEhlYnJldyDOxSDNz9bFIMLV1Mkg18nLz9LJ09TBzs8gLS0gzsUg19emzcvOxc7PINCmxCDewdMgy8/N0KbM0cOmp1xuIgorCisjOiBnbG9iYWxzLmg6MTA2NworbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICIiCisiRTI1OiBGYXJzaSDOxSDNz9bFIMLV1Mkg18nLz9LJ09TBzs8gLS0gzsUg19emzcvOxc7PINCmxCDewdMgy8/N0KbM0cOmp1xuIgorCisjIG1zZ3N0ciAiRTI1OiAiCisjOiBnbG9iYWxzLmg6MTA3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjg6IE5vIHN1Y2ggaGlnaGxpZ2h0IGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFMjg6IOvPzNjP0iAlcyDOxSCm087VpCIKKworIyBtc2dzdHIgIkUyODogIgorIzogZ2xvYmFscy5oOjEwNzIKK21zZ2lkICJFMjk6IE5vIGluc2VydGVkIHRleHQgeWV0IgorbXNnc3RyICJFMjk6IPTFy9PUIMPFIM7FINLFxMHH1dfB19PRIgorCisjIG1zZ3N0ciAiRTI5OiAiCisjOiBnbG9iYWxzLmg6MTA3MworbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6IOvPzcHOxMkg3cUgzsUg18nLz9LJ09TP19XXwczJ09EiCisKKyMgbXNnc3RyICJFMzA6ICIKKyM6IGdsb2JhbHMuaDoxMDc0Cittc2dpZCAiRTMxOiBObyBzdWNoIG1hcHBpbmciCittc2dzdHIgIvfLwdrBzqYg2sHNps7BIM7FIKbTztWkIgorCisjIG1zZ3N0ciAiRTMxOiAiCisjOiBnbG9iYWxzLmg6MTA3NQorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICL2z8TOz8fPINfB0qbBztTVIgorCisjOiBnbG9iYWxzLmg6MTA3NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtYXRjaDogJXMiCittc2dzdHIgIvbPxM7Px88g18HSpsHO1NU6ICVzIgorCisjOiBnbG9iYWxzLmg6MTA3NworbXNnaWQgIkUzMjogTm8gZmlsZSBuYW1lIgorbXNnc3RyICLi0sHL1aQgps3FzqYgxsHKzMEiCisKKyMgbXNnc3RyICJFMzI6ICIKKyM6IGdsb2JhbHMuaDoxMDc4Cittc2dpZCAiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAi+sHNps7BINrSwdrLptcg28UgzsUg18nLz9LJ09TP19XXwczB09giCisKKyMgbXNnc3RyICJFMzM6ICIKKyM6IGdsb2JhbHMuaDoxMDc5Cittc2dpZCAiRTM0OiBObyBwcmV2aW91cyBjb21tYW5kIgorbXNnc3RyICLrz83BzsTJIN3FIM7FINfJy8/SydPUz9fV18HMydPRIgorCisjIG1zZ3N0ciAiRTM0OiAiCisjOiBnbG9iYWxzLmg6MTA4MAorbXNnaWQgIkUzNTogTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICL60sHay8kg3cUgzsUg18nLz9LJ09TP19XXwczJ09EiCisKKyMgbXNnc3RyICJFMzU6ICIKKyM6IGdsb2JhbHMuaDoxMDgxCittc2dpZCAiTm8gcmFuZ2UgYWxsb3dlZCIKK21zZ3N0ciAi7sUgxM/a18/Mxc7PINfLwdrV18HUySDNxdamIgorCisjOiBnbG9iYWxzLmg6MTA4MworbXNnaWQgIkUzNjogTm90IGVub3VnaCByb29tIgorbXNnc3RyICLuxSDEz9PJ1NggzabTw9EiCisKKyMgbXNnc3RyICJFMzY6ICIKKyM6IGdsb2JhbHMuaDoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICLuxSDNz9bVINPU18/SydTJIMbByswgJXMiCisKKyM6IGdsb2JhbHMuaDoxMDg2Cittc2dpZCAiQ2FuJ3QgZ2V0IHRlbXAgZmlsZSBuYW1lIgorbXNnc3RyICLuxSDNz9bVINrGz9LN1dfB1Mkgps0n0SDEzNEg1MnN3sHTz9fPx88gxsHKzMEiCisKKyM6IGdsb2JhbHMuaDoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAi7sUgzc/W1SDXpsTL0snUySDGwcrMICVzIgorCisjOiBnbG9iYWxzLmg6MTA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIu7FIM3P1tUg2t7J1MHUySDGwcrMICVzIgorCisjOiBnbG9iYWxzLmg6MTA4OQorbXNnaWQgIkUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiIgorIkUzNzog9s/Ezs/HzyDawdDJ09Ug0KbTzNEgz9PUwc7O2M+nINrNps7JICjXycvP0snT1MHK1MUgISDdz8IgzsUg2tfB1sHUySkiCisKKyM6IGdsb2JhbHMuaDoxMDkwCittc2dpZCAiRTM4OiBOdWxsIGFyZ3VtZW50IgorbXNnc3RyICJFMzg6IPemxNPV1M6myiDB0sfVzcXO1CIKKworIzogZ2xvYmFscy5oOjEwOTIKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiDv3qbL1dfBzs8g3snTzM8iCisKKyM6IGdsb2JhbHMuaDoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDog7sUgzc/W1SDXpsTL0snUySDGwcrMINDPzcnMz8sgJXMiCisKKyM6IGdsb2JhbHMuaDoxMDk4Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiD6wcLSwcvMzyDQwc0n0dSmISIKKworIzogZ2xvYmFscy5oOjExMDEKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZCIKK21zZ3N0ciAi+tLB2s/LIM7FINrOwcrExc7PIgorCisjOiBnbG9iYWxzLmg6MTEwMworIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIvrSwdrPyyDOxSDazsHKxMXOzzogJXMiCisKKyM6IGdsb2JhbHMuaDoxMTA0Cittc2dpZCAiQXJndW1lbnQgbXVzdCBiZSBwb3NpdGl2ZSIKK21zZ3N0ciAi4dLH1c3FztQgzcGkIMLV1MkgxM/EwdTOpsoiCisKKyM6IGdsb2JhbHMuaDoxMTA2Cittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0Mjog9s/Ezs+nINDPzcnMy8kiCisKKyM6IGdsb2JhbHMuaDoxMTA4Cittc2dpZCAiRTQzOiBEYW1hZ2VkIG1hdGNoIHN0cmluZyIKK21zZ3N0ciAiRTQzOiAnbWF0Y2ggc3RyaW5nJyDQz9vLz9bFzsEgW9DPzcnMy8Eg0NLPx9LBzcldIgorCisjOiBnbG9iYWxzLmg6MTEwOQorbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6IPPQz9TXz9LFzsEg0NLPx9LBzcEgcmVnZXhwIFvQz83JzMvBINDSz8fSwc3JXSIKKworIzogZ2xvYmFscy5oOjExMTAKK21zZ2lkICJFNDU6ICdyZWFkb25seScgb3B0aW9uIGlzIHNldCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDU6IPfJ09TB18zFzsEgz9DDptEgJ3JlYWRvbmx5JyAo18nLz9LJ09TBytTFICEg3c/CIM7FINrXwdbB1MkpIgorCisjOiBnbG9iYWxzLmg6MTExMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDY6IENhbm5vdCBzZXQgcmVhZC1vbmx5IHZhcmlhYmxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ2OiD6zabOzsEgXCIlc1wiIM3P1sUgwtXUySDMydvFINDSz97J1MHOwSIKKworIzogZ2xvYmFscy5oOjExMTUKK21zZ2lkICJFNDc6IEVycm9yIHdoaWxlIHJlYWRpbmcgZXJyb3JmaWxlIgorbXNnc3RyICJFNDc6IPDPzcnMy8Eg2t7J1NXXwc7O0SDGwcrMwSDQz83JzM/LIgorCisjOiBnbG9iYWxzLmg6MTExOAorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiDuwSDEz9rXz8zFzs8g1SAqKioqKioqIgorCisjOiBnbG9iYWxzLmg6MTEyMAorbXNnaWQgIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIKK21zZ3N0ciAiRTQ5OiDuxc3P1szJ18nKINLP2s2m0iDa09XX1SIKKworIzogZ2xvYmFscy5oOjExMjEKK21zZ2lkICJFOTE6ICdzaGVsbCcgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJFOTE6IM/Qw6bRICdzaGVsbCcg0M/Sz9bO0SIKKworIzogZ2xvYmFscy5oOjExMjIKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiDwz83JzMvBINCmxCDewdMg2sHL0snU1NEgxsHKzMEgz8LNps7VIgorCisjOiBnbG9iYWxzLmg6MTEyMworbXNnaWQgIkU3MzogdGFnIHN0YWNrIGVtcHR5IgorbXNnc3RyICJFNzM6IPPUxcsg1M/NptTPyyDT0NXT1M/bxc7PIgorCisjOiBnbG9iYWxzLmg6MTEyNAorbXNnaWQgIkU3NDogQ29tbWFuZCB0b28gY29tcGxleCIKK21zZ3N0ciAiRTc0OiD6wc7BxNTPINPLzMHEzsEgy8/Nwc7EwSIKKworIzogZ2xvYmFscy5oOjExMjUKK21zZ2lkICJFNzU6IE5hbWUgdG9vIGxvbmciCittc2dzdHIgIkU3NTog+sHEz9fHxSCmzSfRIgorCisjOiBnbG9iYWxzLmg6MTEyNgorbXNnaWQgIkU3NjogVG9vIG1hbnkgWyIKK21zZ3N0ciAiRTc2OiD6wcLBx8HUzyAnWyciCisKKyM6IGdsb2JhbHMuaDoxMTI3Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IPrBwsHHwdTPIKbNxc4gxsHKzKbXIgorCisjOiBnbG9iYWxzLmg6MTEyOAorbXNnaWQgIlRyYWlsaW5nIGNoYXJhY3RlcnMiCittc2dzdHIgIu7BxMzJ28vP16Yg08nN18/MySIKKworIzogZ2xvYmFscy5oOjExMjkKK21zZ2lkICJFNzg6IFVua25vd24gbWFyayIKK21zZ3N0ciAiRTc4OiDuxdemxM/NwSDQz82m1MvBIgorCisjOiBnbG9iYWxzLmg6MTEzMAorbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTog7sUgzc/W1SDa0s/a1c2m1Mkg2tLB2s/LIgorCisjIG1zZ3N0ciAiRTc5OiAiCisjOiBnbG9iYWxzLmg6MTEzMQorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiDwz83JzMvBINCmxCDewdMg2sHQydPVIgorCisjOiBnbG9iYWxzLmg6MTEzMgorbXNnaWQgIlplcm8gY291bnQiCittc2dzdHIgIu7VzNjP18nKIMym3snM2M7JyyIKKworIzogZ2xvYmFscy5oOjExMzQKK21zZ2lkICJFODE6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0IgorbXNnc3RyICJFODE6IDxTSUQ+INfJy8/SydPUz9fVpNTY09EgzsUg1SDGwcrMpiDLz83BzsQiCisKKyN+IG1zZ2lkICIxIGxpbmUgfmVkIgorI34gbXNnc3RyICLy0cTPyyCmztfF0tTP18HOzyIKKworI34gbXNnaWQgIiVsZCBsaW5lcyB+ZWQiCisjfiBtc2dzdHIgIrbO18XS1M/Xwc7PINLRxMum1zogJWxkIgorCisjfiBtc2dpZCAiVW5hYmxlIHRvIHNlbmQgcmVwbHkiCisjfiBtc2dzdHIgIu7FIM3P1tUg16bEptPMwdTJINemxNDP16bE2CIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJTZW5kIGZhaWxlZC4gTm8gY29tbWFuZCBzZXJ2ZXIgcHJlc2VudCA/XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICLuxSDXxMHMz9PRINemxKbTzMHUySDEwc6mLiDtz9bMydfPLCDTxdLXxdIgy8/Nwc7EINemxNPV1M6myiA/XG4iCisKKyN+IG1zZ2lkICJFMjU4OiBubyBtYXRjaGVzIGZvdW5kIGluIGNzY29wZSBjb25uZWN0aW9ucyIKKyN+IG1zZ3N0ciAiRTI1ODogzsUg2s7BysTFzs8g16bE0M/XpsTOz8fPINonpMTOwc7O0SDaIGNzY29wZSIKZGlmZiAtLWdpdCBhL3NyYy9wby96aF9DTi5VVEYtOC5wbyBiL3NyYy9wby96aF9DTi5VVEYtOC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTZhODJhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL3poX0NOLlVURi04LnBvCkBAIC0wLDAgKzEsNTkzNyBAQAorIyBDaGluZXNlIChzaW1wbGlmaWVkKSBUcmFuc2xhdGlvbiBmb3IgVmltCisjCisjIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorIyBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyMKKyMgRklSU1QgQVVUSE9SICBXYW5nIEp1biA8anVud0B0dXJib2xpbnV4LmNvbS5jbj4KKyMKKyMgT3JpZ2luYWwgdHJhbnNsYXRpb25zLgorIworIywgbm8td3JhcAorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogVmltKFNpbXBsaWZpZWQgQ2hpbmVzZSlcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwMS0wOS0yNCAxMDoxMCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMS0wOS0yNCAxMToxMyswODAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBXYW5nIEp1biA8anVud0B0dXJib2xpbnV4LmNvbS5jbj5cbiIKKyJMYW5ndWFnZS1UZWFtOiBXYW5nIEp1biA8anVud0B0dXJib2xpbnV4LmNvbS5jbj5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDgtYml0XG4iCisKKyM6IGJ1ZmZlci5jOjk3Cittc2dpZCAiRTgyOiBDYW5ub3QgYWxsb2NhdGUgYW55IGJ1ZmZlciwgZXhpdGluZy4uLiIKK21zZ3N0ciAiRTgyOiDkuI3og73liIbphY3ku7vkvZXnvJPlhrLljLrvvIzpgIDlh7rnqIvluo8uLi4iCisKKyM6IGJ1ZmZlci5jOjEwMAorbXNnaWQgIkU4MzogQ2Fubm90IGFsbG9jYXRlIGJ1ZmZlciwgdXNpbmcgb3RoZXIgb25lLi4uIgorbXNnc3RyICJFODM6IOS4jeiDveWIhumFjee8k+WGsuWMuu+8jOS9v+eUqOWPpuS4gOS4que8k+WGsuWMui4uLi4iCisKKyM6IGJ1ZmZlci5jOjY5OAorbXNnaWQgIk5vIGJ1ZmZlcnMgd2VyZSB1bmxvYWRlZCIKK21zZ3N0ciAi5rKh5pyJ6YeK5pS+5Lu75L2V57yT5Yay5Yy6IgorCisjOiBidWZmZXIuYzo3MDAKK21zZ2lkICJObyBidWZmZXJzIHdlcmUgZGVsZXRlZCIKK21zZ3N0ciAi5rKh5pyJ5Yig6Zmk5Lu75L2V57yT5Yay5Yy6IgorCisjOiBidWZmZXIuYzo3MDIKK21zZ2lkICJObyBidWZmZXJzIHdlcmUgd2lwZWQgb3V0IgorbXNnc3RyICLmsqHmnInliKDpmaTku7vkvZXnvJPlhrLljLoiCisKKyM6IGJ1ZmZlci5jOjcxMAorbXNnaWQgIjEgYnVmZmVyIHVubG9hZGVkIgorbXNnc3RyICLlt7Lph4rmlL7kuIDkuKrnvJPlhrLljLoiCisKKyM6IGJ1ZmZlci5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHVubG9hZGVkIgorbXNnc3RyICLlt7Lph4rmlL4gJWQg5Liq57yT5Yay5Yy6IgorCisjOiBidWZmZXIuYzo3MTcKK21zZ2lkICIxIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICLlt7LliKDpmaTkuIDkuKrnvJPlhrLljLoiCisKKyM6IGJ1ZmZlci5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIGRlbGV0ZWQiCittc2dzdHIgIuW3suWIoOmZpCAlZCDkuKrnvJPlhrLljLoiCisKKyM6IGJ1ZmZlci5jOjcyNAorbXNnaWQgIjEgYnVmZmVyIHdpcGVkIG91dCIKK21zZ3N0ciAi5bey5Yig6Zmk5LiA5Liq57yT5Yay5Yy6IgorCisjOiBidWZmZXIuYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB3aXBlZCBvdXQiCittc2dzdHIgIuW3suWIoOmZpCAlZCDkuKrnvJPlhrLljLoiCisKKyM6IGJ1ZmZlci5jOjc4MworbXNnaWQgIkU4NDogTm8gbW9kaWZpZWQgYnVmZmVyIGZvdW5kIgorbXNnc3RyICJFODQ6IOayoeacieS/ruaUuei/h+eahOe8k+WGsuWMuiIKKworIy4gYmFjayB3aGVyZSB3ZSBzdGFydGVkLCBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyM6IGJ1ZmZlci5jOjgyMgorbXNnaWQgIkU4NTogVGhlcmUgaXMgbm8gbGlzdGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTg1OiDmsqHmnInlj6/liJflh7rnmoTnvJPlhrLljLoiCisKKyM6IGJ1ZmZlci5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFODY6IENhbm5vdCBnbyB0byBidWZmZXIgJWxkIgorbXNnc3RyICJFODY6IOS4jeiDveWIh+aNouWIsOesrCAlbGQg5Liq57yT5Yay5Yy6IgorCisjOiBidWZmZXIuYzo4MzcKK21zZ2lkICJFODc6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU4Nzog5LiN6IO95YiH5o2i5Yiw5pu05ZCO6Z2i55qE57yT5Yay5Yy6IgorCisjOiBidWZmZXIuYzo4MzkKK21zZ2lkICJFODg6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgYnVmZmVyIgorbXNnc3RyICJFODg6IOS4jeiDveWIh+aNouWIsOabtOWJjemdoueahOe8k+WGsuWMuiIKKworIzogYnVmZmVyLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU4OTogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciAlbGQgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTg5OiDlt7Lmm7TmlLnov4fnvJPlhrLljLogJWxkIOS9huWwmuacquS/neWtmCAo5Y+v55SoICEg5by65Yi25omn6KGMKSIKKworIzogYnVmZmVyLmM6ODc5Cittc2dpZCAiRTkwOiBDYW5ub3QgdW5sb2FkIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFOTA6IOS4jeiDvemHiuaUvuacgOWQjuS4gOS4que8k+WGsuWMuiIKKworIzogYnVmZmVyLmM6MTMxNAorbXNnaWQgIlcxNDogV2FybmluZzogTGlzdCBvZiBmaWxlIG5hbWVzIG92ZXJmbG93IgorbXNnc3RyICJXMTQ6IOitpuWRijog5paH5Lu25ZCN6L+H5aSaIgorCisjOiBidWZmZXIuYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MjogQnVmZmVyICVsZCBub3QgZm91bmQiCittc2dzdHIgIkU5Mjog5om+5LiN5Yiw56ysICVsZCDkuKrnvJPlhrLljLoiCisKKyM6IGJ1ZmZlci5jOjE3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTkzOiBNb3JlIHRoYW4gb25lIG1hdGNoIGZvciAlcyIKK21zZ3N0ciAiRTkzOiDmib7liLDkuIDkuKrku6XkuIrnmoQgJXMiCisKKyM6IGJ1ZmZlci5jOjE3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIgorbXNnc3RyICJFOTQ6IOaJvuS4jeWIsCAlcyIKKworIzogYnVmZmVyLmM6MjEwNSBleF9kb2NtZC5jOjYwNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQiCittc2dzdHIgIuihjCAlbGQiCisKKyM6IGJ1ZmZlci5jOjIxODgKK21zZ2lkICJFOTU6IEJ1ZmZlciB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTk1OiDlt7LmnInnvJPlhrLljLrkvb/nlKjov5nkuKrlkI3lrZciCisKKyM6IGJ1ZmZlci5jOjI0ODEKK21zZ2lkICIgW01vZGlmaWVkXSIKK21zZ3N0ciAiIFvlt7Lkv67mlLldIgorCisjOiBidWZmZXIuYzoyNDg2Cittc2dpZCAiW05vdCBlZGl0ZWRdIgorbXNnc3RyICJb5pyq57yW6L6RXSIKKworIzogYnVmZmVyLmM6MjQ5MQorbXNnaWQgIltOZXcgZmlsZV0iCittc2dzdHIgIlvmlrDmlofku7ZdIgorCisjOiBidWZmZXIuYzoyNDkyCittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW+ivu+mUmeivr10iCisKKyM6IGJ1ZmZlci5jOjI0OTQgZmlsZWlvLmM6MTc1NAorbXNnaWQgIltyZWFkb25seV0iCittc2dzdHIgIlvlj6ror7tdIgorCisjOiBidWZmZXIuYzoyNTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAtLSVkJSUtLSIKK21zZ3N0ciAi6KGM5pWwIDEgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIC0tJWQlJS0tIgorbXNnc3RyICLooYzmlbAgJWxkIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICLooYwgJWxkLyVsZCAtLSVkJSUtLSDliJcgIgorCisjOiBidWZmZXIuYzoyNjA2Cittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJb5pyq5ZG95ZCNXSIKKworIy4gbXVzdCBiZSBhIGhlbHAgYnVmZmVyCisjOiBidWZmZXIuYzoyNjQ2Cittc2dpZCAiaGVscCIKK21zZ3N0ciAiW+W4ruWKqV0iCisKKyM6IGJ1ZmZlci5jOjMxNTEgc2NyZWVuLmM6NDY1NworbXNnaWQgIltoZWxwXSIKK21zZ3N0ciAiW+W4ruWKqV0iCisKKyM6IGJ1ZmZlci5jOjMxODMgc2NyZWVuLmM6NDY2MworbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW+mihOiniF0iCisKKyM6IGJ1ZmZlci5jOjMzODkKK21zZ2lkICJBbGwiCittc2dzdHIgIuWFqOmDqCIKKworIzogYnVmZmVyLmM6MzM4OQorbXNnaWQgIkJvdCIKK21zZ3N0ciAi5bqV56uvIgorCisjOiBidWZmZXIuYzozMzkxCittc2dpZCAiVG9wIgorbXNnc3RyICLpobbnq68iCisKKyM6IGJ1ZmZlci5jOjQxMjcKK21zZ2lkICIiCisiXG4iCisiIyBCdWZmZXIgbGlzdDpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMg57yT5Yay5Yy65YiX6KGoOlxuIgorCisjOiBidWZmZXIuYzo0MTYwCittc2dpZCAiW0Vycm9yIExpc3RdIgorbXNnc3RyICJb6ZSZ6K+v5YiX6KGoXSIKKworIzogYnVmZmVyLmM6NDE3MyBtZW1saW5lLmM6MTUxMworbXNnaWQgIltObyBGaWxlXSIKK21zZ3N0ciAiW+acquWRveWQjV0iCisKKyM6IGJ1ZmZlci5jOjQzOTMKK21zZ2lkICIiCisiXG4iCisiLS0tIFNpZ25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDnrKblj7cgLS0tIgorCisjOiBidWZmZXIuYzo0NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNpZ25zIGZvciAlczoiCittc2dzdHIgIiVzIOeahOespuWPtzoiCisKKyM6IGJ1ZmZlci5jOjQ0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgIOihjD0lbGQgIGlkPSVkICDlkI3np7A9JXMiCisKKyM6IGRpZmYuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6IOS4jeiDveavlOi+gyhkaWZmKSAlbGTkuKrku6XkuIrnmoTnvJPlhrLljLoiCisKKyM6IGRpZmYuYzo2NDgKK21zZ2lkICJFOTc6IENhbm5vdCBjcmVhdGUgZGlmZnMiCittc2dzdHIgIkU5Nzog5LiN6IO95Yib5bu6IGRpZmYgIgorCisjOiBkaWZmLmM6NzQ3Cittc2dpZCAiUGF0Y2ggZmlsZSIKK21zZ3N0ciAiUGF0Y2gg5paH5Lu2IgorCisjOiBkaWZmLmM6OTkxCittc2dpZCAiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIKK21zZ3N0ciAiRTk4OiDkuI3og73or7vlj5YgZGlmZiDnmoTovpPlh7oiCisKKyM6IGRpZmYuYzoxNzA0Cittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IOebruWJjeeahOe8k+WGsuWMuuS4jeaYr+WcqCBkaWZmIOaooeW8jyIKKworIzogZGlmZi5jOjE3MTYKK21zZ2lkICJFMTAwOiBObyBvdGhlciBidWZmZXIgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAwOiDmsqHmnInnvJPlhrLljLrlnKggZGlmZiDmqKHlvI8iCisKKyM6IGRpZmYuYzoxNzI0Cittc2dpZCAiRTEwMTogTW9yZSB0aGFuIHR3byBidWZmZXJzIGluIGRpZmYgbW9kZSwgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlIgorbXNnc3RyICJFMTAxOiDmnInkuKTkuKrku6XkuIrnmoTnvJPlhrLljLrlnKggZGlmZiDmqKHlvI/vvIzkuI3og73lhrPlrpropoHnlKjlk6rkuIDkuKoiCisKKyM6IGRpZmYuYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDI6IENhbid0IGZpbmQgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTEwMjog5om+5LiN5Yiw57yT5Yay5Yy6OiBcIiVzXCIiCisKKyM6IGRpZmYuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzog57yT5Yay5Yy6IFwiJXNcIiDkuI3mmK/lnKggZGlmZiDmqKHlvI8iCisKKyM6IGRpZ3JhcGguYzoyMTY4Cittc2dpZCAiRTEwNDogRXNjYXBlIG5vdCBhbGxvd2VkIGluIGRpZ3JhcGgiCittc2dzdHIgIkUxMDQ6IOWkjeWQiOWtl+espihkaWdyYXBoKeS4reS4jeiDveS9v+eUqCBFc2NhcGUiCisKKyM6IGRpZ3JhcGguYzoyMzQwCittc2dpZCAiS2V5bWFwIGZpbGUgbm90IGZvdW5kIgorbXNnc3RyICLmib7kuI3liLAga2V5bWFwIOaWh+S7tiIKKworIzogZGlncmFwaC5jOjIzNjcKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IOS9v+eUqCA6bG9hZGtleW1hcCAiCisKKyM6IGVkaXQuYzo0MAorbXNnaWQgIiBLZXl3b3JkIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIOWFs+mUruWtl+iHquWKqOWujOaIkCAoXk4vXlApIgorCisjLiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4KKyM6IGVkaXQuYzo0MQorbXNnaWQgIiBeWCBtb2RlICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eVi9eTi9eUCkiCittc2dzdHIgIiBeWCDmqKHlvI8gKF5FL15ZL15ML15dL15GL15JL15LL15EL15OL15QKSIKKworIy4gU2Nyb2xsIGhhcyBpdCdzIG93biBtc2dzLCBpbiBpdCdzIHBsYWNlIHRoZXJlIGlzIHRoZSBtc2cgZm9yIGxvY2FsCisjLiAqIGN0cmxfeF9tb2RlID0gMCAoZWcgY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCkgIC0tIEFjZXZlZG8KKyM6IGVkaXQuYzo0NAorbXNnaWQgIiBLZXl3b3JkIExvY2FsIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIOWMuuWfn+WFs+mUruWtl+iHquWKqOWujOaIkCAoXk4vXlApIgorCisjOiBlZGl0LmM6NDUKK21zZ2lkICIgV2hvbGUgbGluZSBjb21wbGV0aW9uICheTC9eTi9eUCkiCittc2dzdHIgIiDmlbTooYzoh6rliqjlrozmiJAgKF5ML15OL15QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRi9eTi9eUCkiCittc2dzdHIgIiDmlofku7blkI3oh6rliqjlrozmiJAgKF5GL15OL15QKSIKKworIzogZWRpdC5jOjQ3Cittc2dpZCAiIFRhZyBjb21wbGV0aW9uICheXS9eTi9eUCkiCittc2dzdHIgIiDmoIfnrb7oh6rliqjlrozmiJAgKF5dL15OL15QKSIKKworIzogZWRpdC5jOjQ4Cittc2dpZCAiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiDot6/lvoToh6rliqjlrozmiJAgKF5OL15QKSIKKworIzogZWRpdC5jOjQ5Cittc2dpZCAiIERlZmluaXRpb24gY29tcGxldGlvbiAoXkQvXk4vXlApIgorbXNnc3RyICIg5a6a5LmJ6Ieq5Yqo5a6M5oiQICheRC9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LL15OL15QKSIKK21zZ3N0ciAiIOWtl+WFuOiHquWKqOWujOaIkCAoXksvXk4vXlApIgorCisjOiBlZGl0LmM6NTIKK21zZ2lkICIgVGhlc2F1cnVzIGNvbXBsZXRpb24gKF5UL15OL15QKSIKK21zZ3N0ciAiIFRoZXNhdXJ1cyDoh6rliqjlrozmiJAgKF5UL15OL15QKSIKKworIzogZWRpdC5jOjUzCittc2dpZCAiIENvbW1hbmQtbGluZSBjb21wbGV0aW9uICheVi9eTi9eUCkiCittc2dzdHIgIiDlkb3ku6Toh6rliqjlrozmiJAgKF5WL15OL15QKSIKKworIzogZWRpdC5jOjU2Cittc2dpZCAiSGl0IGVuZCBvZiBwYXJhZ3JhcGgiCittc2dzdHIgIuW3suWIsOauteiQvee7k+WwviIKKworIzogZWRpdC5jOjg5NAorbXNnaWQgIid0aGVzYXVydXMnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAi6YCJ6aG5ICd0aGVzYXVydXMnIOacquiuvuWumiIKKworIzogZWRpdC5jOjEwNzAKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICLpgInpobkgJ2RpY3Rpb25hcnknIOS4uuepuiIKKworIzogZWRpdC5jOjE5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgZGljdGlvbmFyeTogJXMiCittc2dzdHIgIuaJq+aPj+Wtl+WFuDogJXMiCisKKyM6IGVkaXQuYzoyMTgzCittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKOaPkuWFpSkgU2Nyb2xsICheRS9eWSkiCisKKyM6IGVkaXQuYzoyMTg1Cittc2dpZCAiIChyZXBsYWNlKSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiICjmm7/mjaIpIFNjcm9sbCAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIuaJq+aPj+S4rTogJXMiCisKKyM6IGVkaXQuYzoyNTMxCittc2dpZCAiU2Nhbm5pbmcgdGFncy4iCittc2dzdHIgIuaJq+aPj+agh+etvi4iCisKKyM6IGVkaXQuYzozMTg5Cittc2dpZCAiIEFkZGluZyIKK21zZ3N0ciAiIOWinuWKoCIKKworIy4gc2hvd21vZGUgbWlnaHQgcmVzZXQgdGhlIGludGVybmFsIGxpbmUgcG9pbnRlcnMsIHNvIGl0IG11c3QKKyMuICogYmUgY2FsbGVkIGJlZm9yZSBsaW5lID0gbWxfZ2V0KCksIG9yIHdoZW4gdGhpcyBhZGRyZXNzIGlzIG5vCisjLiAqIGxvbmdlciBuZWVkZWQuICAtLSBBY2V2ZWRvLgorIy4KKyM6IGVkaXQuYzozMjM4Cittc2dpZCAiLS0gU2VhcmNoaW5nLi4uIgorbXNnc3RyICItLSDmkJzlr7vkuK0uLi4iCisKKyM6IGVkaXQuYzozMjk0Cittc2dpZCAiQmFjayBhdCBvcmlnaW5hbCIKK21zZ3N0ciAi5Zue5Yiw6LW354K5IgorCisjOiBlZGl0LmM6MzI5OQorbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICLku47lhbblroPooYzlvIDlp4vnmoTor40gKD8pIgorCisjOiBlZGl0LmM6MzMwNAorbXNnaWQgIlRoZSBvbmx5IG1hdGNoIgorbXNnc3RyICLlj6rmnInmraTpobnljLnphY0iCisKKyM6IGVkaXQuYzozMzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICLmib7liLAgJWQgLyAlZCIKKworIzogZWRpdC5jOjMzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgIuWMuemFjSAlZCIKKworIzogZXZhbC5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA2OiBVbmtub3duIHZhcmlhYmxlOiBcIiVzXCIiCittc2dzdHIgIkUxMDY6IOacquWumuS5ieeahOWPmOmHjzogXCIlc1wiIgorCisjOiBldmFsLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDc6IE1pc3NpbmcgYnJhY2VzOiAlcyIKK21zZ3N0ciAiRTEwNzog57y65bCR5a+55bqU55qE5ous5Y+3OiAlcyIKKworIzogZXZhbC5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiDml6DmraTlj5jph486IFwiJXNcIiIKKworIzogZXZhbC5jOjEyODQKK21zZ2lkICJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciCittc2dzdHIgIkUxMDk6ICc/JyDlkI7nvLrlsJEgJzonIgorCisjOiBldmFsLmM6MTg5OAorbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiDnvLrlsJHlr7nlupTnmoQgXCIpXCIiCisKKyM6IGV2YWwuYzoxOTQ4Cittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6IOe8uuWwkeWvueW6lOeahCBcIl1cIiIKKworIzogZXZhbC5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMjogT3B0aW9uIG5hbWUgbWlzc2luZzogJXMiCittc2dzdHIgIkUxMTI6IOe8uuWwkemAiemhueWQjeensDogJXMiCisKKyM6IGV2YWwuYzoyMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTM6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTExMzog5LiN5q2j56Gu55qE6YCJ6aG5OiAlcyIKKworIzogZXZhbC5jOjIxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IOe8uuWwkeW8leWPtzogJXMiCisKKyM6IGV2YWwuYzoyMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTU6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE1OiDnvLrlsJHlvJXlj7c6ICVzIgorCisjOiBldmFsLmM6MjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE2OiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJXMiCittc2dzdHIgIkUxMTY6IOWHveaVsCAlcyDnmoTlj4LmlbDkuI3mraPnoa4iCisKKyM6IGV2YWwuYzoyNTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiDmnKrlrprkuYnnmoTlh73mlbA6ICVzIgorCisjOiBldmFsLmM6MjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODog5Ye95pWwICVzIOeahOWPguaVsOi/h+WkmiIKKworIzogZXZhbC5jOjI1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOTog5Ye95pWwICVzIOeahOWPguaVsOWkquWwkSIKKworIzogZXZhbC5jOjI1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMDogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQ6ICVzIgorbXNnc3RyICJFMTIwOiA8U0lEPiDkuI3og73lnKggc2NyaXB0IOS4iuS4i+aWh+WkluS9v+eUqDogJXMiCisKKyM6IGV2YWwuYzozNTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIistJXMlM2xkIGxpbmVzOiAiCittc2dzdHIgIistJXMlM2xkIOihjDogIgorCisjOiBldmFsLmM6NDY4OQorbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisi56Gu5a6aKCZPKVxuIgorIuWPlua2iCgmQykiCisKKyM6IGV2YWwuYzo1NTExCittc2dpZCAiRTI0MDogTm8gY29ubmVjdGlvbiB0byBWaW0gc2VydmVyIgorbXNnc3RyICJFMjQwOiDmsqHmnInkuI4gVmltIFNlcnZlciDliJvlu7rov57mjqUiCisKKyM6IGV2YWwuYzo1NjAxCittc2dpZCAiRTI3NzogVW5hYmxlIHRvIHJlYWQgYSBzZXJ2ZXIgcmVwbHkiCittc2dzdHIgIkUyNzc6IOS4jeiDveivu+WPluacjeWKoeWZqOeahOWTjeW6lCIKKworIzogZXZhbC5jOjU2MjYKK21zZ2lkICJFMjU4OiBVbmFibGUgdG8gc2VuZCB0byBjbGllbnQiCittc2dzdHIgIkUyNTg6IOS4jeiDveS8oOmAgeWIsOWuouaIt+erryIKKworIzogZXZhbC5jOjU2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MTogVW5hYmxlIHRvIHNlbmQgdG8gJXMiCittc2dzdHIgIkUyNDE6IOS4jeiDveS8oOmAgeWIsCAlcyIKKworIzogZXZhbC5jOjU3NjMKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIijml6DmlYgpIgorCisjOiBldmFsLmM6Njc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgorbXNnc3RyICJFMTIxOiDlj5jph48gJXMg5bCa5pyq5a6a5LmJIgorCisjOiBldmFsLmM6NzQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgdXNlICEgdG8gcmVwbGFjZSIKK21zZ3N0ciAiRTEyMjog5Ye95pWwICVzIOW3sue7j+WtmOWcqCwg6K+35L2/55SoICEg5by65Yi25pu/5o2iIgorCisjOiBldmFsLmM6NzUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiDlh73mlbAgJXMg5bCa5pyq5a6a5LmJIgorCisjOiBldmFsLmM6NzUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6IOe8uuWwkSBcIihcIjogJXMiCisKKyM6IGV2YWwuYzo3NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiDlj4LmlbDkuI3mraPnoa46ICVzIgorCisjOiBldmFsLmM6NzYzNworbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiDnvLrlsJEgOmVuZGZ1bmN0aW9uIgorCisjOiBldmFsLmM6NzcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzog5Ye95pWwICVzIOato+WcqOS9v+eUqOS4re+8jOS4jeiDvemHjeaWsOWumuS5iSIKKworIzogZXZhbC5jOjc3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODog5Ye95pWw5ZCN56ew56ys5LiA5Liq5a2X5q+N5b+F6aG75aSn5YaZOiAlcyIKKworIzogZXZhbC5jOjc3NzkKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiDpnIDopoHlh73mlbDlkI3np7AiCisKKyM6IGV2YWwuYzo3ODcyCittc2dpZCAiZnVuY3Rpb24gIgorbXNnc3RyICLlh73mlbAgIgorCisjOiBldmFsLmM6Nzk4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTMwOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTMwOiDlh73mlbAgJXMg5bCa5pyq5a6a5LmJIgorCisjOiBldmFsLmM6Nzk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTMxOiBDYW5ub3QgZGVsZXRlIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMzE6IOWHveaVsCAlcyDmraPlnKjkvb/nlKjkuK3vvIzkuI3og73liKDpmaQiCisKKyM6IGV2YWwuYzo4MDM5Cittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiRTEzMjog5Ye95pWw6YCS5b2S6LCD55So5bGC5pWw6LaF6L+HICdtYXhmdW5jZGVwdGgnIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV2YWwuYzo4MDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbGxpbmcgJXMiCittc2dzdHIgIuiwg+eUqCAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODExNSBleF9jbWRzMi5jOjE5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAi57un57utOiAlcyIKKworIzogZXZhbC5jOjgxNjkKK21zZ2lkICJFMTMzOiA6cmV0dXJuIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTEzMzogOnJldHVybiDlv4XpobvlnKjlh73mlbDph4zkvb/nlKgiCisKKyM6IGV2YWwuYzo4MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyAjJWxkIgorbXNnc3RyICIlcyDov5Tlm57lgLwgIyVsZCAiCisKKyM6IGV2YWwuYzo4MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyBcIiVzXCIiCittc2dzdHIgIiVzIOi/lOWbnuWAvCBcIiVzXCIiCisKKyM6IGV2YWwuYzo4MzkxCittc2dpZCAiIgorIlxuIgorIiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMg5YWo5bGA5Y+Y6YePOlxuIgorCisjOiBleF9jbWRzMi5jOjcwCittc2dpZCAiRW50ZXJpbmcgRGVidWcgbW9kZS4gIFR5cGUgXCJjb250XCIgdG8gbGVhdmUuIgorbXNnc3RyICLov5vlhaXosIPor5XmqKHlvI8uIOi+k+WFpSBcImNvbnRcIiDku6Xlm57liLDmraPluLjmqKHlvI8uIgorCisjOiBleF9jbWRzMi5jOjc0IGV4X2RvY21kLmM6NzcxCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiAlcyIKK21zZ3N0ciAi6KGMICVsZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY21kOiAlcyIKK21zZ3N0ciAiY21kOiAlcyIKKworIzogZXhfY21kczIuYzoyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJlYWtwb2ludCBpbiBcIiVzJXNcIiBsaW5lICVsZCIKK21zZ3N0ciAiXCIlcyVzXCIg5Lit5pat54K5OiDnrKwgJWxkIOihjCIKKworIzogZXhfY21kczIuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MTogQnJlYWtwb2ludCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMTYxOiDmib7kuI3liLDkuK3mlq3ngrk6ICVzIgorCisjOiBleF9jbWRzMi5jOjQxNAorbXNnaWQgIk5vIGJyZWFrcG9pbnRzIGRlZmluZWQiCittc2dzdHIgIuayoeacieWumuS5ieS4reaWreeCuSIKKworIzogZXhfY21kczIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgIOesrCAlbGQg6KGMIgorCisjOiBleF9jbWRzLmM6MjA1MyBleF9jbWRzLmM6MjI4OSBleF9jbWRzMi5jOjYwMgorbXNnaWQgIlNhdmUgQXMiCittc2dzdHIgIuWPpuWtmOS4uiIKKworIzogZXhfY21kczIuYzo2MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZSBjaGFuZ2VzIHRvIFwiJS4qc1wiPyIKK21zZ3N0ciAi5bCG5pS55Y+Y5L+d5a2Y5YiwIFwiJS4qc1wiPyIKKworIzogZXhfY21kczIuYzo2MjcgZXhfZG9jbWQuYzo4NjEyCittc2dpZCAiVW50aXRsZWQiCittc2dzdHIgIuacquWRveWQjSIKKworIzogZXhfY21kczIuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MjogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxNjI6IOW3suabtOaUuei/h+e8k+WGsuWMuiBcIiVzXCIg5L2G5bCa5pyq5L+d5a2YICjlj6/nlKggISDlvLrliLbmiafooYwpIgorCisjOiBleF9jbWRzMi5jOjgzMgorbXNnaWQgIldhcm5pbmc6IEVudGVyZWQgb3RoZXIgYnVmZmVyIHVuZXhwZWN0ZWRseSAoY2hlY2sgYXV0b2NvbW1hbmRzKSIKK21zZ3N0ciAi5rOo5oSPOiDlt7LliIfmjaLliLDlhbblroPnvJPlhrLljLogKOivt+ajgOafpSBBdXRvY29tbWFuZHMg5pyJ5peg6ZSZ6K+vKSIKKworIzogZXhfY21kczIuYzoxMjA4Cittc2dpZCAiRTE2MzogVGhlcmUgaXMgb25seSBvbmUgZmlsZSB0byBlZGl0IgorbXNnc3RyICJFMTYzOiDlj6rmnInkuIDkuKrmlofku7blj6/nvJbovpEiCisKKyM6IGV4X2NtZHMyLmM6MTIxMAorbXNnaWQgIkUxNjQ6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiRTE2NDog5bey57uP5Zyo56ys5LiA5Liq5paH5Lu25LqGIgorCisjOiBleF9jbWRzMi5jOjEyMTIKK21zZ2lkICJFMTY1OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgZmlsZSIKK21zZ3N0ciAiRTE2NTog5bey57uP5Zyo5pyA5ZCO5LiA5Liq5paH5Lu25LqGIgorCisjOiBleF9jbWRzMi5jOjE2MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIgaW4gXCIlc1wiIgorbXNnc3RyICLmn6Xmib7kuK06IFwiJXNcIiAtLSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiIKK21zZ3N0ciAi5p+l5om+5LitOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorbXNnc3RyICLlnKggJ3J1bnRpbWVwYXRoJyDph4zmib7kuI3liLAgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE3MTIKK21zZ2lkICJSdW4gTWFjcm8iCittc2dzdHIgIuaJp+ihjOWujyIKKworIzogZXhfY21kczIuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAi5LiN6IO95omn6KGM55uu5b2V77yaIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICLkuI3og73miafooYwgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IGNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICLnrKwgJWxkIOihjDog5LiN6IO95omn6KGMIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxODYzCisjLCBjLWZvcm1hdAorbXNnaWQgInNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAi5omn6KGMIFwiJXNcIiDkuK0iCisKKyM6IGV4X2NtZHMyLmM6MTg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogc291cmNpbmcgXCIlc1wiIgorbXNnc3RyICLnrKwgJWxkIOihjDog57uT5p2f5omn6KGMICVzIgorCisjOiBleF9jbWRzMi5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc291cmNpbmcgJXMiCittc2dzdHIgIue7k+adn+aJp+ihjCAlcyIKKworIzogZXhfY21kczIuYzoyMjcyCittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIlcxNTog5rOo5oSPOiDplJnor6/nmoTooYzliIbpmpTlrZfnrKbvvIzlj6/og73mmK/lsJHkuoYgXk0iCisKKyM6IGV4X2NtZHMyLmM6MjMyMQorbXNnaWQgIkUxNjc6IDpzY3JpcHRlbmNvZGluZyB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjc6IOWcqOaJp+ihjCBzY3JpcHQg5paH5Lu25aSW5LiN5Y+v5L2/55SoIDpzY3JpcHRlbmNvZGluZyIKKworIzogZXhfY21kczIuYzoyMzU0Cittc2dpZCAiRTE2ODogOmZpbmlzaCB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjg6IOWcqOaJp+ihjCBzY3JpcHQg5paH5Lu25aSW5LiN5Y+v5L2/55SoIDpmaW5pc2giCisKKyM6IGV4X2NtZHMyLmM6MjgyMAorbXNnaWQgIk5vIHRleHQgdG8gYmUgcHJpbnRlZCIKK21zZ3N0ciAi5rKh5pyJ6KaB5omT5Y2w55qE5paH5a2XIgorCisjOiBleF9jbWRzMi5jOjI4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgcGFnZSAlZCAoJWQlJSkiCittc2dzdHIgIuaJk+WNsOS4rTog56ysICVkIOmhtSAoJWQlJSkiCisKKyM6IGV4X2NtZHMyLmM6MjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIgQ29weSAlZCBvZiAlZCIKK21zZ3N0ciAi5aSN5Yi2ICVkIC8gJWQiCisKKyM6IGV4X2NtZHMyLmM6Mjk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGVkOiAlcyIKK21zZ3N0ciAi5bey5omT5Y2wOiAlcyIKKworIzogZXhfY21kczIuYzoyOTY2Cittc2dpZCAiUHJpbnRpbmcgYWJvcnRlZCIKK21zZ3N0ciAi5omT5Y2w5Lit5patIgorCisjOiBleF9jbWRzMi5jOjMzNDQKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IOWGmeWFpSBQb3N0U2NyaXB0IOaWh+S7tuWHuumUmSIKKworIzogZXhfY21kczIuYzo0MDE5Cittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiDkuI3og73miZPlvIAgUG9zdFNjcmlwdCDovpPlh7rmlofku7YiCisKKyM6IGV4X2NtZHMyLmM6NDA1NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDU2OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU2OiDkuI3og73miZPlvIDmlofku7YgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NzogQ2FuJ3QgcmVhZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU3OiDkuI3og73or7sgUG9zdFNjcmlwdCDotYTmupDmlofku7YgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQyNjYKK21zZ2lkICJTZW5kaW5nIHRvIHByaW50ZXIuLi4iCittc2dzdHIgIuWPkemAgeWIsOaJk+WNsOacui4uLiIKKworIzogZXhfY21kczIuYzo0MjcwCittc2dpZCAiRTM2NTogRmFpbGVkIHRvIHByaW50IFBvc3RTY3JpcHQgZmlsZSIKK21zZ3N0ciAiRTM2NTog5omT5Y2wIFBvc3RTY3JpcHQg5paH5Lu25aSx6LSlIgorCisjOiBleF9jbWRzMi5jOjQyNzIKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIiIKKworIzogZXhfY21kczIuYzo0NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICLnm67liY3nmoQgJXPor63oqIA6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTc6IENhbm5vdCBzZXQgbGFuZ3VhZ2UgdG8gXCIlc1wiIgorbXNnc3RyICJFMTk3OiDkuI3og73orr7lrpror63oqIDkuLogXCIlc1wiIgorCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICDljYHlha3ov5vliLYgJTAyeCwgIOWFq+i/m+WItiAlMDNvIgorCisjOiBleF9jbWRzLmM6NDI4Cittc2dpZCAiRTEzNDogTW92ZSBsaW5lcyBpbnRvIHRoZW1zZWx2ZXMiCittc2dzdHIgIkUxMzQ6IOS4jeiDveaKiuihjOenu+WIsOWug+iHquW3suWGhSIKKworIzogZXhfY21kcy5jOjQ5NworbXNnaWQgIjEgbGluZSBtb3ZlZCIKK21zZ3N0ciAi5bey56e75YqoIDEg6KGMIgorCisjOiBleF9jbWRzLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBtb3ZlZCIKK21zZ3N0ciAi5bey5pCs56e7ICVsZCDooYwiCisKKyM6IGV4X2NtZHMuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICLlt7LlpITnkIYgJWxkIOihjCIKKworIzogZXhfY21kcy5jOjkxOAorbXNnaWQgIkUxMzU6ICpGaWx0ZXIqIEF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUxMzU6ICpGaWx0ZXIqIEF1dG9jb21tYW5kIOS4jeWPr+S7peabtOaUuee8k+WGsuWMuueahOWGheWuuSIKKworIzogZXhfY21kcy5jOjEwMDMKK21zZ2lkICJbTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2VdXG4iCittc2dzdHIgIlvmm7TmlrDlkI7lsJrmnKrkv53lrZhdXG4iCisKKyM6IGV4X2NtZHMuYzoxMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInZpbWluZm86ICVzIGluIGxpbmU6ICIKK21zZ3N0ciAidmltaW5mbzogJXMg5Zyo6KGM5LitOiAiCisKKyM6IGV4X2NtZHMuYzoxMjUzCittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIkUxMzY6IHZpbWluZm86IOi/h+WkmumUmeivrywg5b+955Wl5paH5Lu25YW25L2Z6YOo5YiGIgorCisjOiBleF9jbWRzLmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkaW5nIHZpbWluZm8gZmlsZSBcIiVzXCIlcyVzJXMiCittc2dzdHIgIuivu+WPliB2aW1pbmZvIOaWh+S7tiBcIiVzXCIlcyVzJXMiCisKKyM6IGV4X2NtZHMuYzoxMjgzCittc2dpZCAiIGluZm8iCittc2dzdHIgIiDkv6Hmga8iCisKKyM6IGV4X2NtZHMuYzoxMjg0Cittc2dpZCAiIG1hcmtzIgorbXNnc3RyICIg5qCH6K6wIgorCisjOiBleF9jbWRzLmM6MTI4NQorbXNnaWQgIiBGQUlMRUQiCittc2dzdHIgIiDlpLHotKUiCisKKyM6IGV4X2NtZHMuYzoxMzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzc6IFZpbWluZm8gZmlsZSBpcyBub3Qgd3JpdGFibGU6ICVzIgorbXNnc3RyICJFMTM3OiBWaW1pbmZvIOaWh+S7tuS4jeiDveWGmeWFpTogJXMiCisKKyM6IGV4X2NtZHMuYzoxNTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzg6IENhbid0IHdyaXRlIHZpbWluZm8gZmlsZSAlcyEiCittc2dzdHIgIkUxMzg6IOS4jeiDveWGmeWFpSB2aW1pbmZvIOaWh+S7tiAlcyAhIgorCisjOiBleF9jbWRzLmM6MTUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiCittc2dzdHIgIuWGmeWFpSB2aW1pbmZvIOaWh+S7tiBcIiVzXCIg5LitIgorCisjLiBXcml0ZSB0aGUgaW5mbzoKKyM6IGV4X2NtZHMuYzoxNjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVGhpcyB2aW1pbmZvIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBWaW0gJXMuXG4iCittc2dzdHIgIiMgdmltaW5mbyDmlofku7bmmK/nlLEgdmltICVzIOaJgOS6p+eUny5cbiIKKworIzogZXhfY21kcy5jOjE2MTIKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIOWmguaenOaDs+imgeiHquihjOS/ruaUueivt+eJueWIq+Wwj+W/g++8gVxuIgorIlxuIgorCisjOiBleF9jbWRzLmM6MTYxNAorbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjICdlbmNvZGluZycg5Zyo5q2k5paH5Lu25bu656uL5pe255qE5YC8XG4iCisKKyM6IGV4X2NtZHMuYzoxNzEzCittc2dpZCAiSWxsZWdhbCBzdGFydGluZyBjaGFyIgorbXNnc3RyICLml6DmlYjnmoTlkK/liqjlrZfnrKYiCisKKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjA5NgorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiDmgqjlnKjlj6bkuIDkuKrnvJPlhrLljLrkuZ/liqDovb3kuobov5nkuKrmlofku7YiCisKKyM6IGV4X2NtZHMuYzoyMTMwCittc2dpZCAiV3JpdGUgcGFydGlhbCBmaWxlPyIKK21zZ3N0ciAi6KaB5YaZ5YWl6YOo5YiG5paH5Lu25ZCX77yfIgorCisjOiBleF9jbWRzLmM6MjEzNworbXNnaWQgIkUxNDA6IFVzZSAhIHRvIHdyaXRlIHBhcnRpYWwgYnVmZmVyIgorbXNnc3RyICJFMTQwOiDor7fkvb/nlKggISDmnaXlhpnlhaXpg6jliIbnvJPlhrLljLoiCisKKyM6IGV4X2NtZHMuYzoyMjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAi6KaB6KaG55uW5bey5a2Y5Zyo55qE5paH5Lu2IFwiJS4qc1wi77yfIgorCisjOiBleF9jbWRzLmM6MjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQxOiBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkUxNDE6IOe8k+WGsuWMuiAlbGQg5rKh5pyJ5paH5Lu25ZCNIgorCisjOiBleF9jbWRzLmM6MjMzMgorbXNnaWQgIkUxNDI6IEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24iCittc2dzdHIgIkUxNDI6IOaWh+S7tuacquWGmeWFpe+8jOWboOS4uiAnd3JpdGUnIOmAiemhueWFs+mXrSIKKworIzogZXhfY21kcy5jOjIzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIidyZWFkb25seScgb3B0aW9uIGlzIHNldCBmb3IgXCIlLipzXCIuXG4iCisiRG8geW91IHdpc2ggdG8gd3JpdGUgYW55d2F5PyIKK21zZ3N0ciAiIgorIlwiJS4qc1wiIOW3suiuvuWumiAncmVhZG9ubHknIOmAiemhuS5cbiIKKyLnoa7lrpropoHopobnm5blkJfvvJ8iCisKKyM6IGV4X2NtZHMuYzoyNTE3Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICLnvJbovpHmlofku7YiCisKKyM6IGV4X2NtZHMuYzozMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiBBdXRvY29tbWFuZHMg5oSP5aSW5Zyw5Yig6Zmk5paw57yT5Yay5Yy6ICVzIgorCisjOiBleF9jbWRzLmM6MzE1NgorbXNnaWQgIkUxNDQ6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIDp6IgorbXNnc3RyICJFMTQ0OiA6eiDkuI3mjqXlj5fpnZ7mlbDlrZfnmoTlj4LmlbAiCisKKyM6IGV4X2NtZHMuYzozMjQxCittc2dpZCAiRTE0NTogU2hlbGwgY29tbWFuZHMgbm90IGFsbG93ZWQgaW4gcnZpbSIKK21zZ3N0ciAiRTE0NTogcnZpbSDkuK3npoHmraLkvb/nlKggc2hlbGwg5ZG95LukIgorCisjOiBleF9jbWRzLmM6MzM0OAorbXNnaWQgIkUxNDY6IFJlZ3VsYXIgZXhwcmVzc2lvbnMgY2FuJ3QgYmUgZGVsaW1pdGVkIGJ5IGxldHRlcnMiCittc2dzdHIgIkUxNDY6IOato+WImeihqOi+vuW8j+S4jeiDveeUqOWtl+avjeWIhumalCAoPykiCisKKyM6IGV4X2NtZHMuYzozNjg2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2Ugd2l0aCAlcyAoeS9uL2EvcS9sL15FL15ZKT8iCittc2dzdHIgIuabv+aNouS4uiAlcyAoeS9uL2EvcS9eRS9eWSk/IgorCisjOiBleF9jbWRzLmM6NDA1MAorbXNnaWQgIihJbnRlcnJ1cHRlZCkgIgorbXNnc3RyICIo5bey5Lit5patKSAiCisKKyM6IGV4X2NtZHMuYzo0MDU0Cittc2dpZCAiMSBzdWJzdGl0dXRpb24iCittc2dzdHIgIuabv+aNouS4gOe7hCIKKworIzogZXhfY21kcy5jOjQwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIHN1YnN0aXR1dGlvbnMiCittc2dzdHIgIuabv+aNoiAlbGQg57uEIgorCisjOiBleF9jbWRzLmM6NDA1OQorbXNnaWQgIiBvbiAxIGxpbmUiCittc2dzdHIgIiDkuIDooYzkuK0iCisKKyM6IGV4X2NtZHMuYzo0MDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiAlbGQgbGluZXMiCittc2dzdHIgIiAlbGQg6KGM5LitIgorCisjOiBleF9jbWRzLmM6NDExMgorbXNnaWQgIkUxNDc6IENhbm5vdCBkbyA6Z2xvYmFsIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE0NzogOmdsb2JhbCDkuI3og73pgJLlvZLmiafooYwiCisKKyM6IGV4X2NtZHMuYzo0MTQ3Cittc2dpZCAiRTE0ODogUmVndWxhciBleHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwiCittc2dzdHIgIkUxNDg6IOayoeacieS9v+eUqOi/h+ato+WImeihqOi+vuW8jyAoPykiCisKKyM6IGV4X2NtZHMuYzo0MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIuavj+S4gOihjOmDveaJvuS4jeWIsOaooeW8jzogJXMiCisKKyM6IGV4X2NtZHMuYzo0Mjc3Cittc2dpZCAiIgorIlxuIgorIiMgTGFzdCBTdWJzdGl0dXRlIFN0cmluZzpcbiIKKyIkIgorbXNnc3RyICIiCisiXG4iCisiIyDliY3kuIDnu4Tmm7/ku6PlrZfnrKbkuLI6XG4iCisiJCIKKworIzogZXhfY21kcy5jOjQzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0OTogU29ycnksIG5vIGhlbHAgZm9yICVzIgorbXNnc3RyICJFMTQ5OiDmirHmrYksIOayoeaciSAlcyDnmoTor7TmmI4iCisKKyM6IGV4X2NtZHMuYzo0NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAi5oqx5q2JLCDmib7kuI3liLDluK7liqnmlofku7YgXCIlc1wiIgorCisjOiBleF9jbWRzLmM6NDg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiAlcyDkuI3mmK/nm67lvZUiCisKKyM6IGV4X2NtZHMuYzo0ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTI6IENhbm5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTUyOiDkuI3og73ku6XlhpnlhaXmqKHlvI/miZPlvIAgXCIlc1wiIgorCisjOiBleF9jbWRzLmM6NDg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE1Mzog5LiN6IO96K+75Y+W5paH5Lu2OiAlcyIKKworIzogZXhfY21kcy5jOjQ5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcyIKK21zZ3N0ciAiRTE1NDog5qCH562+KHRhZykgXCIlc1wiIOWcqOaWh+S7tiAlcyDph4zph43lpI3lh7rnjrDlpJrmrKEiCisKKyM6IGV4X2NtZHMuYzo1MDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjA6IFVua25vd24gc2lnbiBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE2MDog5pyq5a6a5LmJ55qEIHNpZ24gY29tbWFuZDogJXMiCisKKyM6IGV4X2NtZHMuYzo1MDk4Cittc2dpZCAiRTE1NjogTWlzc2luZyBzaWduIG5hbWUiCittc2dzdHIgIkUxNTY6IOe8uuWwkSBzaWduIOWQjeensCIKKworIzogZXhfY21kcy5jOjUxNDQKK21zZ2lkICJFMjU1OiBUb28gbWFueSBzaWducyBkZWZpbmVkIgorbXNnc3RyICJFMzI2OiDmib7liLDlpKrlpJogc2lnbnMiCisKKyM6IGV4X2NtZHMuYzo1MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTog5LiN5q2j56Gu55qEIHNpZ24g5paH5a2XOiAlcyIKKworIzogZXhfY21kcy5jOjUyMTAgZXhfY21kcy5jOjUzOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NTogVW5rbm93biBzaWduOiAlcyIKK21zZ3N0ciAiRTE1NTog5LiN5q2j56Gu55qEIHNpZ246ICVzIgorCisjOiBleF9jbWRzLmM6NTI1NgorbXNnaWQgIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiCittc2dzdHIgIkUxNTk6IOe8uuWwkSBzaWduIG51bWJlciIKKworIzogZXhfY21kcy5jOjUzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1ODogSW52YWxpZCBidWZmZXIgbmFtZTogJXMiCittc2dzdHIgIkUxNTg6IOe8k+WGsuWMuuWQjeensOmUmeivrzogJXMiCisKKyM6IGV4X2NtZHMuYzo1Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiBTaWduIElEIOmUmeivrzogJWxkIgorCisjOiBleF9jbWRzLmM6NTU0NgorbXNnaWQgIltEZWxldGVkXSIKK21zZ3N0ciAiW+W3suWIoOmZpF0iCisKKyM6IGV4X2RvY21kLmM6NDkxCittc2dpZCAiRW50ZXJpbmcgRXggbW9kZS4gIFR5cGUgXCJ2aXN1YWxcIiB0byBnbyB0byBOb3JtYWwgbW9kZS4iCittc2dzdHIgIui/m+WFpSBFeCDmqKHlvI8uIOi+k+WFpSBcInZpc3VhXCIg5Lul5Zue5Yiw5q2j5bi45qih5byPLiIKKworIy4gbXVzdCBiZSBhdCBFT0YKKyM6IGV4X2RvY21kLmM6NTI3Cittc2dpZCAiQXQgZW5kLW9mLWZpbGUiCittc2dzdHIgIuW3suWIsOaWh+S7tue7k+WwviIKKworIzogZXhfZG9jbWQuYzo2MDIKK21zZ2lkICJFMTY5OiBDb21tYW5kIHRvbyByZWN1cnNpdmUiCittc2dzdHIgIkUxNjk6IOWRveS7pOmAkuW9kuWxguaVsOi/h+WkmiIKKworIzogZXhfZG9jbWQuYzo5MTEKK21zZ2lkICJFMTcwOiBNaXNzaW5nIDplbmR3aGlsZSIKK21zZ3N0ciAiRTE3MDog57y65bCRIDplbmR3aGlsZSIKKworIzogZXhfZG9jbWQuYzo5MTMKK21zZ2lkICJFMTcxOiBNaXNzaW5nIDplbmRpZiIKK21zZ3N0ciAiRTE3MTog57y65bCRIDplbmRpZiIKKworIzogZXhfZG9jbWQuYzo5MjMKK21zZ2lkICJFbmQgb2Ygc291cmNlZCBmaWxlIgorbXNnc3RyICLlkb3ku6Tmlofku7bnu5PmnZ8iCisKKyM6IGV4X2RvY21kLmM6OTI0Cittc2dpZCAiRW5kIG9mIGZ1bmN0aW9uIgorbXNnc3RyICLlh73mlbDnu5PlsL4iCisKKyM6IGV4X2RvY21kLmM6MTM0NAorbXNnaWQgIkFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgIueUqOaIt+WumuS5ieeahOWRveS7pOS8mua3t+a3hiIKKworIzogZXhfZG9jbWQuYzoxMzU4Cittc2dpZCAiTm90IGFuIGVkaXRvciBjb21tYW5kIgorbXNnc3RyICLkuI3mmK/nvJbovpHlmajnmoTlkb3ku6QiCisKKyM6IGV4X2RvY21kLmM6MTQ0MQorbXNnaWQgIkRvbid0IHBhbmljISIKK21zZ3N0ciAi5LiN6KaB5oOK5oWMISIKKworIzogZXhfZG9jbWQuYzoxNDYwCittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuIgorbXNnc3RyICLmjIflrprkuoblkJHliY3lj4LogIPnmoTojIPlm7QiCisKKyM6IGV4X2RvY21kLmM6MTQ2OQorbXNnaWQgIkJhY2t3YXJkcyByYW5nZSBnaXZlbiwgT0sgdG8gc3dhcCIKK21zZ3N0ciAi5oyH5a6a5LqG5ZCR5YmN5Y+C6ICD55qE6IyD5Zu077yMT0sgdG8gc3dhcCIKKworIzogZXhfZG9jbWQuYzoxNTgwCittc2dpZCAiVXNlIHcgb3Igdz4+IgorbXNnc3RyICLor7fkvb/nlKggdyDmiJYgdz4+IgorCisjOiBleF9kb2NtZC5jOjMwODYKK21zZ2lkICJFMzE5OiBTb3JyeSwgdGhlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUzMTk6IOaKseatiSwg5pys5ZG95Luk5Zyo5q2k54mI5pys5Lit5pyq5a6e546wIgorCisjOiBleF9kb2NtZC5jOjMyNTYKK21zZ2lkICJFMTcyOiBPbmx5IG9uZSBmaWxlIG5hbWUgYWxsb3dlZCIKK21zZ3N0ciAiRTE3Mjog5Y+q6IO95pyJ5LiA5Liq5paH5Lu25ZCNIgorCisjOiBleF9kb2NtZC5jOjM4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICLov5jmnIkgJWQg5Liq5paH5Lu25pyq57yW6L6RLiDnoa7lrpropoHpgIDlh7rvvJ8iCisKKyM6IGV4X2RvY21kLmM6MzgxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiDov5jmnIkgJWxkIOS4quaWh+S7tuacque8lui+kSIKKworIzogZXhfZG9jbWQuYzozOTExCittc2dpZCAiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogdXNlICEgdG8gcmVkZWZpbmUiCittc2dzdHIgIkUxNzQ6IOWRveS7pOW3sue7j+WtmOWcqCwg6K+35L2/55SoICEg5by65Yi26YeN5paw5a6a5LmJIgorCisjOiBleF9kb2NtZC5jOjQwMTYKK21zZ2lkICIiCisiXG4iCisiICAgIE5hbWUgICAgICAgIEFyZ3MgUmFuZ2UgQ29tcGxldGUgIERlZmluaXRpb24iCittc2dzdHIgIiIKKyJcbiIKKyIgICAg5ZCN56ewICAgICAgICDlj4LmlbAg6IyD5Zu0ICDlrozmlbQgICAgICDlrprkuYkgICAgICAiCisKKyM6IGV4X2RvY21kLmM6NDEwNQorbXNnaWQgIk5vIHVzZXItZGVmaW5lZCBjb21tYW5kcyBmb3VuZCIKK21zZ3N0ciAi5om+5LiN5Yiw55So5oi36Ieq5a6a5LmJ55qE5ZG95LukIgorCisjOiBleF9kb2NtZC5jOjQxMzYKK21zZ2lkICJFMTc1OiBObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIgorbXNnc3RyICJFMTc1OiDmsqHmnInmjIflrprnmoTlsZ7mgKciCisKKyM6IGV4X2RvY21kLmM6NDE4OAorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3Njog5LiN5q2j56Gu55qE5Y+C5pWw5Liq5pWwIgorCisjOiBleF9kb2NtZC5jOjQyMDMKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiDkuI3og73mjIflrprkuKTmrKEiCisKKyM6IGV4X2RvY21kLmM6NDIxMworbXNnaWQgIkUxNzg6IEludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgY291bnQiCittc2dzdHIgIkUxNzg6IOiuoeaVsOeahOe8uuecgeWAvOS4jeato+ehriIKKworIzogZXhfZG9jbWQuYzo0MjQxCittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiDmjIfku6TpnIDopoHlj4LmlbDmiY3og73lrozmiJAiCisKKyM6IGV4X2RvY21kLmM6NDI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgwOiBJbnZhbGlkIGNvbXBsZXRlIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTE4MDog5LiN5a6M5pW055qE5YC8OiAnJXMnIgorCisjOiBleF9kb2NtZC5jOjQyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MTogSW52YWxpZCBhdHRyaWJ1dGU6ICVzIgorbXNnc3RyICJFMTgxOiDkuI3mraPnoa7nmoTlsZ7mgKc6ICVzIgorCisjOiBleF9kb2NtZC5jOjQzMDkKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4Mjog5ZG95Luk5ZCN56ew5LiN5q2j56GuIgorCisjOiBleF9kb2NtZC5jOjQzMjQKK21zZ2lkICJFMTgzOiBVc2VyIGRlZmluZWQgY29tbWFuZHMgbXVzdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIiCittc2dzdHIgIkUxODM6IOeUqOaIt+iHquWumuS5ieWRveS7pOW/hemhu+S7peWkp+WGmeWtl+avjeW8gOWniyIKKworIzogZXhfZG9jbWQuYzo0MzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODQ6IE5vIHN1Y2ggdXNlci1kZWZpbmVkIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTg0OiDmsqHmnInnlKjmiLfoh6rlrprkuYnnmoTlkb3ku6TvvJogJXMiCisKKyM6IGV4X2RvY21kLmM6NDg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg1OiBDYW5ub3QgZmluZCBjb2xvciBzY2hlbWUgJXMiCittc2dzdHIgIkUxODU6IOaJvuS4jeWIsOminOiJsuagt+W8jyAlcyIKKworIzogZXhfZG9jbWQuYzo0ODUyCittc2dpZCAiR3JlZXRpbmdzLCBWaW0gdXNlciEiCittc2dzdHIgIuS9oOWlvSwgVmltIOeUqOaIt++8gSIKKworIzogZXhfZG9jbWQuYzo1NTQ5Cittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgIuWcqOaWsOeql+WPo+e8lui+keaWh+S7tiIKKworIzogZXhfZG9jbWQuYzo1ODE1Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICLml6DkuqTmjaLmlofku7YiCisKKyM6IGV4X2RvY21kLmM6NTkxOQorbXNnaWQgIkFwcGVuZCBGaWxlIgorbXNnc3RyICLpmYTliqDmlofku7YiCisKKyM6IGV4X2RvY21kLmM6NTk3OAorbXNnaWQgIkUxODY6IE5vIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE4Njog5YmN5LiA5Liq55uu5b2V5LiN5a2Y5ZyoIgorCisjOiBleF9kb2NtZC5jOjYwNTUKK21zZ2lkICJFMTg3OiBVbmtub3duIgorbXNnc3RyICJFMTg3OiDkuI3og73or4bliKvnmoTmoIforrAiCisKKyM6IGV4X2RvY21kLmM6NjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIueql+WPo+S9jee9rjogWCAlZCwgWSAlZCIKKworIzogZXhfZG9jbWQuYzo2MTc4Cittc2dpZCAiRTE4ODogT2J0YWluaW5nIHdpbmRvdyBwb3NpdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIkUxODg6IOWcqOaCqOeahOW5s+WPsOS4iuS4jeiDveiOt+W+l+eql+WPo+S9jee9riIKKworIzogZXhfZG9jbWQuYzo2NDQ0Cittc2dpZCAiU2F2ZSBSZWRpcmVjdGlvbiIKK21zZ3N0ciAi5L+d5a2Y6YeN5a6a5ZCRIgorCisjOiBleF9kb2NtZC5jOjY1OTMKK21zZ2lkICJTYXZlIFZpZXciCittc2dzdHIgIuS/neWtmOinhuWbviIKKworIzogZXhfZG9jbWQuYzo2NTk0Cittc2dpZCAiU2F2ZSBTZXNzaW9uIgorbXNnc3RyICLkv53lrZjkvJror50iCisKKyM6IGV4X2RvY21kLmM6NjU5NgorbXNnaWQgIlNhdmUgU2V0dXAiCittc2dzdHIgIuS/neWtmOiuvuWumiIKKworIzogZXhfZG9jbWQuYzo2NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODk6IFwiJXNcIiBleGlzdHMgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTE4OTogXCIlc1wiIOW3suWtmOWcqCAo6K+355SoICEg5by65Yi25omn6KGMKSIKKworIzogZXhfZG9jbWQuYzo2NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTA6IENhbm5vdCBvcGVuIFwiJXNcIiBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE5MDog5LiN6IO95Lul5YaZ5YWl5qih5byP5omT5byAIFwiJXNcIiIKKworIy4gc2V0IG1hcmsKKyM6IGV4X2RvY21kLmM6Njc3NAorbXNnaWQgIkUxOTE6IEFyZ3VtZW50IG11c3QgYmUgYSBsZXR0ZXIgb3IgZm9yd2FyZC9iYWNrd2FyZCBxdW90ZSIKK21zZ3N0ciAiRTE5MTog5Y+C5pWw5b+F6aG75piv6Iux5paH5a2X5q+N5oiW5ZCR5YmNL+WQjueahOW8leWPtyIKKworIzogZXhfZG9jbWQuYzo2ODAzCittc2dpZCAiRTE5MjogUmVjdXJzaXZlIHVzZSBvZiA6bm9ybWFsIHRvbyBkZWVwIgorbXNnc3RyICJFMTkyOiA6bm9ybWFsIOmAkuW9kuWxguaVsOi/h+a3sSIKKworIzogZXhfZG9jbWQuYzo3MTcxCittc2dpZCAiOmlmIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIjppZiDlsYLmlbDov4fmt7EiCisKKyM6IGV4X2RvY21kLmM6NzIwNgorbXNnaWQgIjplbmRpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVuZGlmIOe8uuWwkeWvueW6lOeahCA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzIyNgorbXNnaWQgIjplbHNlIHdpdGhvdXQgOmlmIgorbXNnc3RyICI6ZWxzZSDnvLrlsJHlr7nlupTnmoQgOmlmIgorCisjOiBleF9kb2NtZC5jOjcyMjgKK21zZ2lkICI6ZWxzZWlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICI6ZWxzZWlmIOe8uuWwkeWvueW6lOeahCA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzI4MAorbXNnaWQgIjp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICI6d2hpbGUg5bGC5pWw6L+H5rexIgorCisjOiBleF9kb2NtZC5jOjczMjYKK21zZ2lkICI6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIjpjb250aW51ZSDnvLrlsJHlr7nlupTnmoQgOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjczNTMKK21zZ2lkICI6YnJlYWsgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIjpicmVhayDnvLrlsJHlr7nlupTnmoQgOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjczNzYgZXhfZG9jbWQuYzo3MzgxCittc2dpZCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICI6ZW5kd2hpbGUg57y65bCR5a+55bqU55qEIDp3aGlsZSIKKworIzogZXhfZG9jbWQuYzo3NDAyCittc2dpZCAiRTE5MzogOmVuZGZ1bmN0aW9uIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTE5MzogOmVuZGZ1bmN0aW9uIOW/hemhu+WcqOWHveaVsOWGhemDqOS9v+eUqCIKKworIzogZXhfZG9jbWQuYzo3NTgyCittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6IOayoeaciSAnIycg5Y+v5pu/5Luj55qE5paH5Lu25ZCNIgorCisjOiBleF9kb2NtZC5jOjc2MTMKK21zZ2lkICJubyBhdXRvY29tbWFuZCBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWZpbGU+XCIiCittc2dzdHIgIuayoeaciSBBdXRvY29tbWFuZCDmlofku7blkI3ku6Xmm7/mjaIgXCI8YWZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6NzYyMQorbXNnaWQgIm5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAi5rKh5pyJIEF1dG9jb21tYW5kIOe8k+WGsuWMuuWQjeensOS7peabv+aNoiBcIjxhYnVmPlwiIgorCisjOiBleF9kb2NtZC5jOjc2MzIKK21zZ2lkICJubyBhdXRvY29tbWFuZCBtYXRjaCBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFtYXRjaD5cIiIKK21zZ3N0ciAi5rKh5pyJIEF1dG9jb21tYW5kIE1hdGNoIG5hbWUg5Lul5pu/5o2iIFwiPGFtYXRjaD5cIiIKKworIzogZXhfZG9jbWQuYzo3NjQyCittc2dpZCAibm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIuayoeaciSA6c291cmNlIOaWh+S7tuWQjeS7peabv+aNoiBcIjxzZmlsZT5cIiIKKworIzogZXhfZG9jbWQuYzo3NjgzCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIkVtcHR5IGZpbGUgbmFtZSBmb3IgJyUnIG9yICcjJywgb25seSB3b3JrcyB3aXRoIFwiOnA6aFwiIgorbXNnc3RyICInJScg5oiWICcjJyDmjIflkJHnqbrmlofku7blkI3vvIzlj6rog73nlKjmlrwgXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6NzY4NQorbXNnaWQgIkV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIui+k+WFpeS4uuepuuWtl+espuS4siIKKworIzogZXhfZG9jbWQuYzo4NTk0Cittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiDkuI3og73or7vlj5YgdmltaW5mbyIKKworIzogZXhfZG9jbWQuYzo4NzY3Cittc2dpZCAiRTE5NjogTm8gZGlncmFwaHMgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMTk2OiDmnKzniYjmnKzml6DlpI3lkIjlrZfnrKYoZGlncmFwaCkiCisKKyM6IGV4X2dldGxuLmM6Mjc4NQorbXNnaWQgInRhZ25hbWUiCittc2dzdHIgIuagh+etvuWQjeensCIKKworIzogZXhfZ2V0bG4uYzoyNzg4Cittc2dpZCAiIGtpbmQgZmlsZVxuIgorbXNnc3RyICLnsbvmlofku7ZcbiIKKworIzogZXhfZ2V0bG4uYzozOTk3Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICLpgInpobkgJ2hpc3RvcnknIOaYr+mbtiIKKworIzogZXhfZ2V0bG4uYzo0MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjICVzIEhpc3RvcnkgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyAlcyDljoblj7LorrDlvZUgKOS7juaWsOWIsOaXpyk6XG4iCisKKyM6IGV4X2dldGxuLmM6NDIzOAorbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAi5ZG95Luk6KGMIgorCisjOiBleF9nZXRsbi5jOjQyMzkKK21zZ2lkICJTZWFyY2ggU3RyaW5nIgorbXNnc3RyICLmn6Xmib7lrZfnrKbkuLIiCisKKyM6IGV4X2dldGxuLmM6NDI0MAorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgIuihqOi+vuW8jyIKKworIzogZXhfZ2V0bG4uYzo0MjQxCittc2dpZCAiSW5wdXQgTGluZSIKK21zZ3N0ciAi6L6T5YWl6KGMIgorCisjOiBleF9nZXRsbi5jOjQyNzEKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyIOi2hei/h+WRveS7pOmVv+W6piIKKworIzogZXhfZ2V0bG4uYzo0NDM1Cittc2dpZCAiRTE5OTogQWN0aXZlIHdpbmRvdyBvciBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiRTE5OTog5bey5Yig6Zmk5rS75Yqo56qX5Y+j5oiW57yT5a2YIgorCisjOiBmaWxlaW8uYzozNDcKK21zZ2lkICJJbGxlZ2FsIGZpbGUgbmFtZSIKK21zZ3N0ciAi5LiN5q2j56Gu55qE5paH5Lu25ZCNIgorCisjOiBmaWxlaW8uYzozNzEgZmlsZWlvLmM6NDk1IGZpbGVpby5jOjI0OTEgZmlsZWlvLmM6MjUyOQorbXNnaWQgImlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICLmmK/nm67lvZUiCisKKyM6IGZpbGVpby5jOjM3MworbXNnaWQgImlzIG5vdCBhIGZpbGUiCittc2dzdHIgIuS4jeaYr+aWh+S7tiIKKworIzogZmlsZWlvLmM6NTE1IGZpbGVpby5jOjM1ODEKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJb5pyq5ZG95ZCNXSIKKworIzogZmlsZWlvLmM6NTMyCittc2dpZCAiW1Blcm1pc3Npb24gRGVuaWVkXSIKK21zZ3N0ciAiW+adg+mZkOS4jei2s10iCisKKyM6IGZpbGVpby5jOjYyNAorbXNnaWQgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtYWRlIHRoZSBmaWxlIHVucmVhZGFibGUiCittc2dzdHIgIkUyMDA6ICpSZWFkUHJlIEF1dG9jb21tYW5kIOS9v+eoi+W6j+S4jeiDveivu+WPluatpOaWh+S7tiIKKworIzogZmlsZWlvLmM6NjI2Cittc2dpZCAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTIwMTogKkZpbHRlciogQXV0b2NvbW1hbmQg5LiN5Y+v5Lul5pu05pS557yT5Yay5Yy655qE5YaF5a65IgorCisjOiBmaWxlaW8uYzo2NDYKK21zZ2lkICJWaW06IFJlYWRpbmcgZnJvbSBzdGRpbi4uLlxuIgorbXNnc3RyICJWaW06IOS7juagh+WHhui+k+WFpeivu+WPli4uLlxuIgorCisjOiBmaWxlaW8uYzo2NTIKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIuS7juagh+WHhui+k+WFpeivuy4uLiIKKworIy4gUmUtb3BlbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBmYWlsZWQhCisjOiBmaWxlaW8uYzo4NzYKK21zZ2lkICJFMjAyOiBDb252ZXJzaW9uIG1hZGUgZmlsZSB1bnJlYWRhYmxlISIKK21zZ3N0ciAiRTIwMjog6L2s5o2i6ZSZ6K+vIgorCisjOiBmaWxlaW8uYzoxNzMyCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2ZpZm8vc29ja2V0XSIKKworIzogZmlsZWlvLmM6MTczOQorbXNnaWQgIltmaWZvXSIKK21zZ3N0ciAiW2ZpZm9dIgorCisjOiBmaWxlaW8uYzoxNzQ2Cittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIltzb2NrZXRdIgorCisjOiBmaWxlaW8uYzoxNzU0Cittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW+WPquivu10iCisKKyM6IGZpbGVpby5jOjE3NjQKK21zZ2lkICJbQ1IgbWlzc2luZ10iCittc2dzdHIgIlvnvLrlsJFDUl0nIgorCisjOiBmaWxlaW8uYzoxNzY5Cittc2dpZCAiW05MIGZvdW5kXSIKK21zZ3N0ciAiW+aJvuWIsE5MXSIKKworIzogZmlsZWlvLmM6MTc3NAorbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW+WIhuWJsui/h+mVv+ihjF0iCisKKyM6IGZpbGVpby5jOjE3ODAgZmlsZWlvLmM6MzU2NQorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW+acqui9rOaNol0iCisKKyM6IGZpbGVpby5jOjE3ODUgZmlsZWlvLmM6MzU3MAorbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJb5bey6L2s5o2iXSIKKworIzogZmlsZWlvLmM6MTc5MiBmaWxlaW8uYzozNTk1Cittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJb5bey5Yqg5a+GXSIKKworIzogZmlsZWlvLmM6MTc5OQorbXNnaWQgIltDT05WRVJTSU9OIEVSUk9SXSIKK21zZ3N0ciAi6L2s5o2i6ZSZ6K+vIgorCisjOiBmaWxlaW8uYzoxODA2Cittc2dpZCAiW1JFQUQgRVJST1JTXSIKK21zZ3N0ciAiW+ivu+mUmeivr10iCisKKyM6IGZpbGVpby5jOjIwMTMKK21zZ2lkICJDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3IgY29udmVyc2lvbiIKK21zZ3N0ciAi5om+5LiN5Yiw6L2s5o2i55So55qE5Li05pe25paH5Lu2IgorCisjOiBmaWxlaW8uYzoyMDIwCittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICLlrZfnrKbpm4bovazmjaLplJnor68iCisKKyM6IGZpbGVpby5jOjIwMjMKK21zZ2lkICJjYW4ndCByZWFkIG91dHB1dCBvZiAnY2hhcmNvbnZlcnQnIgorbXNnc3RyICLkuI3og73or7vlj5YgJ2NoYXJjb252ZXJ0JyDnmoTovpPlh7oiCisKKyM6IGZpbGVpby5jOjI0MDcKK21zZ2lkICJFMjAzOiBBdXRvY29tbWFuZHMgZGVsZXRlZCBvciB1bmxvYWRlZCBidWZmZXIgdG8gYmUgd3JpdHRlbiIKK21zZ3N0ciAiRTIwMzogQXV0b2NvbW1hbmQg5Yig6Zmk5oiW6YeK5pS+5LqG6KaB5YaZ5YWl55qE57yT5Yay5Yy6IgorCisjOiBmaWxlaW8uYzoyNDMwCittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IEF1dG9jb21tYW5kIOaEj+WkluWcsOaUueWPmOS6huihjOWPtyIKKworIzogZmlsZWlvLmM6MjQ5NiBmaWxlaW8uYzoyNTEzCittc2dpZCAiaXMgbm90IGEgZmlsZSBvciB3cml0YWJsZSBkZXZpY2UiCittc2dzdHIgIuS4jeaYr+aWh+S7tuaIluWPr+WGmeeahOiuvuWkhyIKKworIzogZmlsZWlvLmM6MjU1NQorbXNnaWQgImlzIHJlYWQtb25seSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICLmmK/lj6ror7vmlofku7YgKOivt+S9v+eUqCAhIOW8uuWItuaJp+ihjCkiCisKKyM6IGZpbGVpby5jOjI4NTEKK21zZ2lkICJDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICLkuI3og73lhpnlpIfku73mlofku7YgKOivt+S9v+eUqCAhIOW8uuWItuaJp+ihjCkiCisKKyM6IGZpbGVpby5jOjI4NjMKK21zZ2lkICJDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAi5YWz6Zet5aSH5Lu95paH5Lu25Ye66ZSZICjor7fkvb/nlKggISDlvLrliLbmiafooYwpIgorCisjOiBmaWxlaW8uYzoyODY1Cittc2dpZCAiQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5paH5Lu25Lul5L6b5aSH5Lu9ICjor7fkvb/nlKggISDlvLrliLbmiafooYwpIgorCisjOiBmaWxlaW8uYzoyODgxCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICLkuI3og73liJvlu7rlpIfku73mlofku7YgKOivt+S9v+eUqCAhIOW8uuWItuaJp+ihjCkiCisKKyM6IGZpbGVpby5jOjI5NzAKK21zZ2lkICJDYW4ndCBtYWtlIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIuS4jeiDveS9nOWkh+S7veaWh+S7tiAo6K+35L2/55SoICEg5by65Yi25omn6KGMKSIKKworIzogZmlsZWlvLmM6MzAzMgorbXNnaWQgIlRoZSByZXNvdXJjZSBmb3JrIHdpbGwgYmUgbG9zdCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJSZXNvdXJjZSBmb3JrIOS8mua2iOWksSAo6K+35L2/55SoICEg5by65Yi25omn6KGMKSIKKworIzogZmlsZWlvLmM6MzEyMQorbXNnaWQgIkUyMTQ6IENhbid0IGZpbmQgdGVtcCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjE0OiDmib7kuI3liLDlhpnlhaXnlKjnmoTkuqTmjaLmlofku7YiCisKKyM6IGZpbGVpby5jOjMxMzkKK21zZ2lkICJFMjEzOiBDYW5ub3QgY29udmVydCAodXNlICEgdG8gd3JpdGUgd2l0aG91dCBjb252ZXJzaW9uKSIKK21zZ3N0ciAiRTIxMzog5LiN6IO96L2s5o2iICjor7fkvb/nlKggISDlvLrliLbkuI3ovazmjaLlhpnlhaUpIgorCisjOiBmaWxlaW8uYzozMTc2Cittc2dpZCAiRTE2NjogQ2FuJ3Qgb3BlbiBsaW5rZWQgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE2Njog5LiN6IO95Lul5YaZ5YWl5qih5byP5omT5byA6ZO+5o6l5paH5Lu2IgorCisjOiBmaWxlaW8uYzozMTgwCittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiDkuI3og73ku6XlhpnlhaXmqKHlvI/miZPlvIAiCisKKyM6IGZpbGVpby5jOjM0MjMKK21zZ2lkICJDbG9zZSBmYWlsZWQiCittc2dzdHIgIuWFs+mXreWksei0pSIKKworIzogZmlsZWlvLmM6MzQ4MQorbXNnaWQgIndyaXRlIGVycm9yLCBjb252ZXJzaW9uIGZhaWxlZCIKK21zZ3N0ciAi5LiN6IO95YaZ5YWlIC0tIOi9rOaNouWksei0pSIKKworIzogZmlsZWlvLmM6MzQ4NworbXNnaWQgIndyaXRlIGVycm9yIChmaWxlIHN5c3RlbSBmdWxsPykiCittc2dzdHIgIuWGmeWFpemUmeivryAo5paH5Lu257O757uf5bey5ruh77yfKSIKKworIzogZmlsZWlvLmM6MzU2MAorbXNnaWQgIiBDT05WRVJTSU9OIEVSUk9SIgorbXNnc3RyICLovazmjaLplJnor68iCisKKyM6IGZpbGVpby5jOjM1NzYKK21zZ2lkICJbRGV2aWNlXSIKK21zZ3N0ciAiW+iuvuWkh10iCisKKyM6IGZpbGVpby5jOjM1ODEKK21zZ2lkICJbTmV3XSIKK21zZ3N0ciAiW+aWsF0iCisKKyM6IGZpbGVpby5jOjM2MDMKK21zZ2lkICIgW2FdIgorbXNnc3RyICJbYV0iCisKKyM6IGZpbGVpby5jOjM2MDMKK21zZ2lkICIgYXBwZW5kZWQiCittc2dzdHIgIiDlt7LpmYTliqAiCisKKyM6IGZpbGVpby5jOjM2MDUKK21zZ2lkICIgW3ddIgorbXNnc3RyICJbd10iCisKKyM6IGZpbGVpby5jOjM2MDUKK21zZ2lkICIgd3JpdHRlbiIKK21zZ3N0ciAiIOW3suWGmeWFpSIKKworIzogZmlsZWlvLmM6MzY1NQorbXNnaWQgIkUyMDU6IFBhdGNobW9kZTogY2FuJ3Qgc2F2ZSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA1OiBQYXRjaCDmqKHlvI86IOS4jeiDveWCqOWtmOWOn+Wni+aWh+S7tiIKKworIzogZmlsZWlvLmM6MzY3NworbXNnaWQgIkUyMDY6IHBhdGNobW9kZTogY2FuJ3QgdG91Y2ggZW1wdHkgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNjogUGF0Y2gg5qih5byPOiDkuI3og73mlLnlj5jnqbrnmoTljp/lp4vmlofku7YiCisKKyM6IGZpbGVpby5jOjM2OTIKK21zZ2lkICJFMjA3OiBDYW4ndCBkZWxldGUgYmFja3VwIGZpbGUiCittc2dzdHIgIkUyMDc6IOS4jeiDveWIoOmZpOWkh+S7veaWh+S7tiIKKworIzogZmlsZWlvLmM6Mzc0NAorbXNnaWQgIiIKKyJcbiIKKyJXQVJOSU5HOiBPcmlnaW5hbCBmaWxlIG1heSBiZSBsb3N0IG9yIGRhbWFnZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIuitpuWRijog5Y6f5aeL5paH5Lu25Lii5aSx5oiW5o2f5Z2PXG4iCisKKyM6IGZpbGVpby5jOjM3NDYKK21zZ2lkICJkb24ndCBxdWl0IHRoZSBlZGl0b3IgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorbXNnc3RyICLlnKjmlofku7bmraPnoa7lhpnlhaXliY3or7fli7/pgIDlh7rnvJbovpHlmaghIgorCisjOiBmaWxlaW8uYzozODI2Cittc2dpZCAiW2Rvc10iCittc2dzdHIgIltkb3NdIgorCisjOiBmaWxlaW8uYzozODI2Cittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbZG9zIOagvOW8j10iCisKKyM6IGZpbGVpby5jOjM4MzMKK21zZ2lkICJbbWFjXSIKK21zZ3N0ciAiW21hY10iCisKKyM6IGZpbGVpby5jOjM4MzMKK21zZ2lkICJbbWFjIGZvcm1hdF0iCittc2dzdHIgIlttYWMg5qC85byPXSIKKworIzogZmlsZWlvLmM6Mzg0MAorbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzozODQwCittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW3VuaXgg5qC85byPXSIKKworIzogZmlsZWlvLmM6Mzg2NworbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxIOihjCwgIgorCisjOiBmaWxlaW8uYzozODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcywgIgorbXNnc3RyICIlbGQg6KGMLCAiCisKKyM6IGZpbGVpby5jOjM4NzIKK21zZ2lkICIxIGNoYXJhY3RlciIKK21zZ3N0ciAi5LiA5Liq5a2X56ymIgorCisjOiBmaWxlaW8uYzozODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlbGTkuKrlrZfnrKYiCisKKyM6IGZpbGVpby5jOjM4ODQKK21zZ2lkICJbbm9lb2xdIgorbXNnc3RyICJbbm9lb2xdIgorCisjOiBmaWxlaW8uYzozODg0Cittc2dpZCAiW0luY29tcGxldGUgbGFzdCBsaW5lXSIKK21zZ3N0ciAiW+acgOWQjuS4gOihjOS4jeWujOaVtF0iCisKKyMuIGRvbid0IG92ZXJ3cml0ZSBtZXNzYWdlcyBoZXJlCisjLiBtdXN0IGdpdmUgdGhpcyBwcm9tcHQKKyMuIGRvbid0IHVzZSBlbXNnKCkgaGVyZSwgZG9uJ3Qgd2FudCB0byBmbHVzaCB0aGUgYnVmZmVycworIzogZmlsZWlvLmM6MzkwMworbXNnaWQgIldBUk5JTkc6IFRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgcmVhZGluZyBpdCEhISIKK21zZ3N0ciAi6K2m5ZGKOiDmnKzmlofku7boh6rkuIrmrKHor7vlhaXlkI7lt7Llj5jliqghISEiCisKKyM6IGZpbGVpby5jOjM5MDUKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQiCittc2dzdHIgIuehruWumuimgeWGmeWFpeWQlyIKKworIzogZmlsZWlvLmM6NDg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA4OiBFcnJvciB3cml0aW5nIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTIwODog5YaZ5YWl5paH5Lu2IFwiJXNcIiDplJnor68iCisKKyM6IGZpbGVpby5jOjQ4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwOTogRXJyb3IgY2xvc2luZyBcIiVzXCIiCittc2dzdHIgIkUyMDk6IOWFs+mXreaWh+S7tiBcIiVzXCIg6ZSZ6K+vIgorCisjOiBmaWxlaW8uYzo0ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTA6IEVycm9yIHJlYWRpbmcgXCIlc1wiIgorbXNnc3RyICJFMjEwOiDor7vlj5bmlofku7YgXCIlc1wiIOmUmeivryIKKworIzogZmlsZWlvLmM6NTAzNQorbXNnaWQgIkUyNDY6IEZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQgZGVsZXRlZCBidWZmZXIiCittc2dzdHIgIkUyNDY6IEZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQg5Yig6Zmk57yT5Yay5Yy6IgorCisjOiBmaWxlaW8uYzo1MDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIG5vIGxvbmdlciBhdmFpbGFibGUiCittc2dzdHIgIkUyMTE6IOitpuWRijog5paH5Lu2IFwiJXNcIiDlt7Lnu4/kuI3lrZjlnKgiCisKKyM6IGZpbGVpby5jOjUwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlcxMjogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgYW5kIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQgaW4gVmltIGFzICIKKyJ3ZWxsIgorbXNnc3RyICJXMTI6IOitpuWRijog5paH5Lu2IFwiJXNcIiDoh6rkuIrmrKHor7vlhaXlkI7lt7Llj5jliqgsIOiAjOS4lOe8lui+keS4reeahOe8k+WGsuWMuuS5n+abtOWKqOS6hiIKKworIzogZmlsZWlvLmM6NTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzExOiDorablkYo6IOaWh+S7tiBcIiVzXCIg6Ieq5LiK5qyh6K+75YWl5ZCO5bey5pS55Y+YIgorCisjOiBmaWxlaW8uYzo1MDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlcxNjogV2FybmluZzogTW9kZSBvZiBmaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxNjog6K2m5ZGKOiDmlofku7YgXCIlc1wiIOiHquS4iuasoeivu+WFpeWQjuW3suaUueWPmCIKKworIzogZmlsZWlvLmM6NTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTM6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTM6IOitpuWRijog5paH5Lu2IFwiJXNcIiDlnKjlvIDlp4vnvJbovpHlkI7lj4jooqvliJvlu7rkuoYiCisKKyM6IGZpbGVpby5jOjUwODgKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICLorablkYoiCisKKyM6IGZpbGVpby5jOjUwODkKK21zZ2lkICIiCisiJk9LXG4iCisiJkxvYWQgRmlsZSIKK21zZ3N0ciAiIgorIuehruWumigmTylcbiIKKyLliqDovb3mlofku7YoJkwpIgorCisjOiBmaWxlaW8uYzo1MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjE6IENvdWxkIG5vdCByZWxvYWQgXCIlc1wiIgorbXNnc3RyICJFMzIxOiDkuI3og73ph43mlrDliqDovb0gXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1NjcwCittc2dpZCAiLS1EZWxldGVkLS0iCittc2dzdHIgIi0t5bey5Yig6ZmkLS0iCisKKyMuIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0CisjOiBmaWxlaW8uYzo1ODMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjc6IE5vIHN1Y2ggZ3JvdXA6IFwiJXNcIiIKK21zZ3N0ciAiRTM2Nzog57uE5LiN5a2Y5ZyoOiBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgKjogJXMiCittc2dzdHIgIkUyMTU6ICog5ZCO6Z2i5pyJ5LiN5q2j56Gu55qE5a2X56ymOiAlcyIKKworIzogZmlsZWlvLmM6NTk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE2OiBObyBzdWNoIGV2ZW50OiAlcyIKK21zZ3N0ciAiRTIxNjog5peg5q2k5LqL5Lu2OiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo2MTE1Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKKworIzogZmlsZWlvLmM6NjM4NgorbXNnaWQgIkUyMTc6IENhbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZXZlbnRzIgorbXNnc3RyICJFMjE3OiDkuI3og73lr7nmiYDmnInkuovku7bmiafooYwgYXV0b2NvbW1hbmQiCisKKyM6IGZpbGVpby5jOjY0MDkKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgIuaJvuS4jeWIsOWvueW6lOeahCBhdXRvY29tbWFuZCIKKworIzogZmlsZWlvLmM6NjY4MQorbXNnaWQgIkUyMTg6IGF1dG9jb21tYW5kIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkUyMTg6IGF1dG9jb21tYW5kIOWxguaVsOi/h+a3sSIKKworIzogZmlsZWlvLmM6Njk2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBBdXRvIGNvbW1hbmRzIGZvciBcIiVzXCIiCittc2dzdHIgIiVzIEF1dG8gY29tbWFuZHM6IFwiJXNcIiIKKworIzogZmlsZWlvLmM6Njk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmcgJXMiCittc2dzdHIgIuaJp+ihjCAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBmaWxlaW8uYzo3MDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF1dG9jb21tYW5kICVzIgorbXNnc3RyICJhdXRvY29tbWFuZCAlcyIKKworIzogZmlsZWlvLmM6NzU2NgorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IOe8uuWwkSB7LiIKKworIzogZmlsZWlvLmM6NzU2OAorbXNnaWQgIkUyMjA6IE1pc3NpbmcgfS4iCittc2dzdHIgIkUyMjA6IOe8uuWwkSB9LiIKKworIzogZm9sZC5jOjY2Cittc2dpZCAiTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAi5om+5LiN5Yiw5Lu75L2VIGZvbGQiCisKKyM6IGZvbGQuYzo1NTQKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDog5LiN6IO95Zyo55uu5YmN55qEICdmb2xkbWV0aG9kJyDkuIvliJvlu7ogZm9sZCIKKworIzogZm9sZC5jOjU1NgorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiDkuI3og73lnKjnm67liY3nmoQgJ2ZvbGRtZXRob2QnIOS4i+WIoOmZpCBmb2xkIgorCisjOiBmb2xkLmM6MTcwMAorbXNnaWQgIkUyMjE6ICdjb21tZW50c3RyaW5nJyBpcyBlbXB0eSIKK21zZ3N0ciAiRTIyMTog6YCJ6aG5ICdjb21tZW50c3RyaW5nJyDmnKrorr7lrpoiCisKKyM6IGdldGNoYXIuYzoyNjgKK21zZ2lkICJFMjIyOiBBZGQgdG8gcmVhZCBidWZmZXIiCittc2dzdHIgIkUyMjI6IOWKoOWFpeivu+e8k+WGsuS4rSIKKworIzogZ2V0Y2hhci5jOjIxMTQKK21zZ2lkICJFMjIzOiByZWN1cnNpdmUgbWFwcGluZyIKK21zZ3N0ciAiRTIyMzog6YCS5b2SIG1hcHBpbmciCisKKyM6IGdldGNoYXIuYzoyOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjQ6IGdsb2JhbCBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI0OiAlcyDlt7Lnu4/mnInlhajlsYAgYWJicmV2aWF0aW9uIOS6hiIKKworIzogZ2V0Y2hhci5jOjI5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNTogZ2xvYmFsIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI1OiAlcyDlt7Lnu4/mnInlhajlsYAgbWFwcGluZyDkuoYiCisKKyM6IGdldGNoYXIuYzozMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjY6IGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjY6ICVzIOW3sue7j+aciSBhYmJyZXZpYXRpb24g5LqGIgorCisjOiBnZXRjaGFyLmM6MzA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI3OiBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNzogJXMg55qEIG1hcHBpbmcg5bey57uP5a2Y5ZyoIgorCisjOiBnZXRjaGFyLmM6MzE2MworbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAi5om+5LiN5Yiw57yp5YaZIgorCisjOiBnZXRjaGFyLmM6MzE2NQorbXNnaWQgIk5vIG1hcHBpbmcgZm91bmQiCittc2dzdHIgIuayoeaciei/meS4quWvueW6lCIKKworIzogZ2V0Y2hhci5jOjM5OTAKK21zZ2lkICJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkUyMjg6IG1ha2VtYXA6IOS4jeato+ehrueahOaooeW8jyIKKworIzogZ3VpX2F0X2ZzLmM6MjkwCittc2dpZCAiPGNhbm5vdCBvcGVuPiAiCittc2dzdHIgIjzkuI3og73miZPlvIA+IgorCisjOiBndWlfYXRfZnMuYzoxMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAidmltX1NlbEZpbGU6IOS4jeiDveS9v+eUqCAlcyDlrZfkvZMiCisKKyM6IGd1aV9hdF9mcy5jOjI1MzUKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJ2aW1fU2VsRmlsZTog5LiN6IO95Zue5Yiw55uu5YmN55uu5b2VIgorCisjOiBndWlfYXRfZnMuYzoyNTU0Cittc2dpZCAiUGF0aG5hbWU6IgorbXNnc3RyICLot6/lvoQ6IgorCisjOiBndWlfYXRfZnMuYzoyNTYwCittc2dpZCAidmltX1NlbEZpbGU6IGNhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeSIKK21zZ3N0ciAidmltX1NlbEZpbGU6IOS4jeiDveWPluW+l+ebruWJjeebruW9lSIKKworIzogZ3VpX2F0X2ZzLmM6MjU2OCBndWlfbW90aWYuYzoxNjA3Cittc2dpZCAiT0siCittc2dzdHIgIuehruWumiIKKworIy4gJ0NhbmNlbCcgYnV0dG9uCisjOiBndWlfYXRfZnMuYzoyNTY4IGd1aV9ndGsuYzoxNjgzIGd1aV9tb3RpZi5jOjE2MDIgZ3VpX21vdGlmLmM6MjgyMworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi5Y+W5raIIgorCisjOiBndWlfYXRoZW5hLmM6MTkyOCBndWlfbW90aWYuYzoxODU1Cittc2dpZCAiVmltIGRpYWxvZyIKK21zZ3N0ciAiVmltIOWvueivneahhiIKKworIzogZ3VpX2F0X3NiLmM6NDg2Cittc2dpZCAiU2Nyb2xsYmFyIFdpZGdldDogQ291bGQgbm90IGdldCBnZW9tZXRyeSBvZiB0aHVtYiBwaXhtYXAuIgorbXNnc3RyICLmu5rliqjmnaE6IOS4jeiDveiuvuWumiB0aHVtYiBwaXhtYXAg55qE5L2N572uIgorCisjOiBndWlfYmV2YWwuYzo2OAorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICJFMjMyOiDkuI3og73lr7nkv6Hmga/kuI4gY2FsbGJhY2sg5Yib5bu6IEJhbGxvbkV2YWwiCisKKyM6IGd1aS5jOjE4MQorbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiDkuI3og73lkK/liqjlm77lnovnlYzpnaIiCisKKyM6IGd1aS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDog5LiN6IO96K+75Y+W5paH5Lu2IFwiJXNcIiIKKworIzogZ3VpLmM6NDMxCittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiDkuI3mraPnoa7nmoQgJ2d1aWZvbnR3aWRlJyIKKworIzogZ3VpLmM6MzkxOQorbXNnaWQgIkVycm9yIgorbXNnc3RyICLplJnor68iCisKKyM6IGd1aS5jOjM5MjAKK21zZ2lkICImT2siCittc2dzdHIgIuehruWumigmTykiCisKKyM6IGd1aV9ndGsuYzoxMTQ0Cittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiVmltIOWvueivneahhi4uLiIKKworIzogZ3VpX2d0ay5jOjE1MTkgZ3VpX21vdGlmLmM6Mjc0MgorbXNnaWQgIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIKK21zZ3N0ciAiVklNIC0g5p+l5om+5LiO5pu/5o2iLi4uIgorCisjOiBndWlfZ3RrLmM6MTUyNCBndWlfbW90aWYuYzoyNzQ0Cittc2dpZCAiVklNIC0gU2VhcmNoLi4uIgorbXNnc3RyICJWSU0gLSDmn6Xmib4uLi4iCisKKyM6IGd1aV9ndGsuYzoxNTQ3IGd1aV9tb3RpZi5jOjI4NjIKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICLmn6Xmib46IgorCisjOiBndWlfZ3RrLmM6MTU2NSBndWlfbW90aWYuYzoyODk0Cittc2dpZCAiUmVwbGFjZSB3aXRoOiIKK21zZ3N0ciAi5pu/5o2i5Li6OiIKKworIy4gZXhhY3QgbWF0Y2ggb25seSBidXR0b24KKyM6IGd1aV9ndGsuYzoxNTk3IGd1aV9tb3RpZi5jOjI5OTYKK21zZ2lkICJNYXRjaCBleGFjdCB3b3JkIG9ubHkiCittc2dzdHIgIuWPquWMuemFjeWujOWFqOebuOWQjOeahOWtlyIKKworIzogZ3VpX2d0ay5jOjE2MDkgZ3VpX21vdGlmLmM6Mjk2NAorbXNnaWQgIkRpcmVjdGlvbiIKK21zZ3N0ciAi5pa55ZCRIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjE2MjEgZ3VpX21vdGlmLmM6Mjk3NgorbXNnaWQgIlVwIgorbXNnc3RyICLlkJHkuIoiCisKKyM6IGd1aV9ndGsuYzoxNjI1IGd1aV9tb3RpZi5jOjI5ODQKK21zZ2lkICJEb3duIgorbXNnc3RyICLlkJHkuIsiCisKKyMuICdGaW5kIE5leHQnIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE2NDcgZ3VpX21vdGlmLmM6Mjc2NgorbXNnaWQgIkZpbmQgTmV4dCIKK21zZ3N0ciAi5om+5LiL5LiA5LiqIgorCisjLiAnUmVwbGFjZScgYnV0dG9uCisjOiBndWlfZ3RrLmM6MTY2NCBndWlfbW90aWYuYzoyNzgzCittc2dpZCAiUmVwbGFjZSIKK21zZ3N0ciAi5pu/5o2iIgorCisjLiAnUmVwbGFjZSBBbGwnIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE2NzMgZ3VpX21vdGlmLmM6Mjc5NgorbXNnaWQgIlJlcGxhY2UgQWxsIgorbXNnc3RyICLmm7/mjaLlhajpg6giCisKKyM6IGd1aV9ndGtfeDExLmM6MTA3NiBndWlfeDExLmM6MTE5NAorbXNnaWQgIkUyMzM6IGNhbm5vdCBvcGVuIGRpc3BsYXkiCittc2dzdHIgIkUyMzM6IDzkuI3og73miZPlvIAgWCBTZXJ2ZXIgRElTUExBWT4iCisKKyM6IGd1aV9ndGtfeDExLmM6MjQzMyBndWlfeDExLmM6MTk5NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM0OiBVbmtub3duIGZvbnRzZXQ6ICVzIgorbXNnc3RyICJFMjM0OiDkuI3mraPnoa7nmoTlrZfnrKbpm4YgKEZvbnRzZXQpOiAlcyIKKworIzogZ3VpX2d0a194MTEuYzoyNDYwCittc2dpZCAiRm9udCBTZWxlY3Rpb24iCittc2dzdHIgIuWtl+S9k+mAieaLqSIKKworIzogZ3VpX2d0a194MTEuYzoyNzAyIGd1aV9tYWMuYzoyNzgwIGd1aV93NDguYzoxMTk3IGd1aV94MTEuYzoxODMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IFVua25vd24gZm9udDogJXMiCittc2dzdHIgIuS4jeato+ehrueahOWtl+S9k+WQjeensDogJXMiCisKKyM6IGd1aV9ndGtfeDExLmM6MjcxMyBndWlfeDExLmM6MTg1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IFwiJXNcIiDkuI3mmK/lm7rlrprlrr3luqblrZfkvZMiCisKKyM6IGd1aV9ndGtfeDExLmM6Mjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQyOiBDb2xvciBuYW1lIG5vdCByZWNvZ25pemVkOiAlcyIKK21zZ3N0ciAiRTI0MjogJXMg5Li65LiN6IO96K+G5Yir55qE6aKc6Imy5ZCN56ewIgorCisjOiBndWlfZ3RrX3gxMS5jOjM1MTkgdWkuYzoxOTI5Cittc2dpZCAiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIKK21zZ3N0ciAi5L2/55SoIENVVF9CVUZGRVIwIOadpeabv+aNouepuumAieaLqSIKKworIzogZ3VpX21vdGlmLmM6MTYwMSBndWlfbW90aWYuYzoxNjA0Cittc2dpZCAiRmlsdGVyIgorbXNnc3RyICLov4fmu6TlmagiCisKKyM6IGd1aV9tb3RpZi5jOjE2MDMKK21zZ2lkICJEaXJlY3RvcmllcyIKK21zZ3N0ciAi55uu5b2VIgorCisjOiBndWlfbW90aWYuYzoxNjA1Cittc2dpZCAiSGVscCIKK21zZ3N0ciAi5biu5YqpIgorCisjOiBndWlfbW90aWYuYzoxNjA2Cittc2dpZCAiRmlsZXMiCittc2dzdHIgIuaWh+S7tiIKKworIzogZ3VpX21vdGlmLmM6MTYwOAorbXNnaWQgIlNlbGVjdGlvbiIKK21zZ3N0ciAi6YCJ5oupIgorCisjOiBndWlfbW90aWYuYzoyODA5Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAi5pKk5raIIgorCisjOiBndWlfcmlzY29zLmM6OTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTIzNTog5LiN6IO95omT5byAIFphcCDlrZfkvZMgJyVzJyIKKworIzogZ3VpX3Jpc2Nvcy5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogQ2FuJ3QgdXNlIGZvbnQgJXMiCittc2dzdHIgIkUyMzU6IOS4jeiDveS9v+eUqOWtl+S9kyAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjExNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MjogTWlzc2luZyBjb2xvcjogJXMiCittc2dzdHIgIkUyNDI6IOaJvuS4jeWIsOminOiJsjogJXMiCisKKyM6IGd1aV9yaXNjb3MuYzozMjY5Cittc2dpZCAiIgorIlxuIgorIlNlbmRpbmcgbWVzc2FnZSB0byB0ZXJtaW5hdGUgY2hpbGQgcHJvY2Vzcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuato+WcqOWPkemAgeS4reaWreWtkOeoi+W6j+eahOS/oeaBry5cbiIKKworIzogZ3VpX3czMi5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiRTI0Mzog5LiN5pSv5oyB5Y+C5pWwIFwiLSVzXCLjgILor7fnlKggT0xFIOeJiOacrOOAgiIKKworIzogZ3VpX3c0OC5jOjIwNjgKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICLmn6Xmib7lrZfnrKbkuLIgKOS9v+eUqCAnXFxcXCcg5p2l6KGo56S6ICdcXCcpIgorCisjOiBndWlfdzQ4LmM6MjA5MworbXNnaWQgIkZpbmQgJiBSZXBsYWNlICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIuafpeaJvuWPiuabv+aNouWtl+espuS4siAo5L2/55SoICdcXFxcJyDmnaXooajnpLogJ1xcJykiCisKKyM6IGd1aV94MTEuYzoxNDE0Cittc2dpZCAiVmltIEU0NTg6IENhbm5vdCBhbGxvY2F0ZSBjb2xvcm1hcCBlbnRyeSwgc29tZSBjb2xvcnMgbWF5IGJlIGluY29ycmVjdCIKK21zZ3N0ciAiVmltIEU0NTg6IOS4jeiDvemFjee9riBjb2xvciBtYXAg5a+56LGh77yM5pyJ5Lqb6aKc6Imy55yL6LW35p2l5Lya5oCq5oCq55qEIgorCisjOiBndWlfeDExLmM6MTk4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjUwOiBGb250cyBmb3IgdGhlIGZvbGxvd2luZyBjaGFyc2V0cyBhcmUgbWlzc2luZyBpbiBmb250c2V0ICVzOiIKK21zZ3N0ciAiRTI1MDogRm9udHNldCAlcyDmsqHmnInorr7lrprmraPnoa7nmoTlrZfkvZPku6XkvpvmmL7npLrov5nkupvlrZfnrKbpm4Y6IgorCisjOiBndWlfeDExLmM6MjAzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUyOiBGb250c2V0IG5hbWU6ICVzIgorbXNnc3RyICJFMjUyOiDlrZfkvZPpm4YoRm9udHNldCnlkI3np7A6ICVzIgorCisjOiBndWlfeDExLmM6MjAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250ICclcycgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICInJXMnIOS4jeaYr+WbuuWumuWuveW6puWtl+S9kyIKKworIzogZ3VpX3gxMS5jOjIwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MzogRm9udHNldCBuYW1lOiAlc1xuIgorbXNnc3RyICJFMjUzOiDlrZfkvZPpm4YoRm9udHNldCnlkI3np7A6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwOiAlc1xuIgorbXNnc3RyICLlrZfkvZMwOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAi5a2X5L2TMTogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCVkIHdpZHRoIGlzIG5vdCB0d2ljZSB0aGF0IG9mIGZvbnQwXG4iCittc2dzdHIgIuWtl+S9kyVk5a695bqm5LiN5piv5a2X5L2TMOeahOS4pOWAjVxuIgorCisjOiBndWlfeDExLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MCB3aWR0aDogJWxkXG4iCittc2dzdHIgIuWtl+S9kzDnmoTlrr3luqbvvJolbGRcbiIKKworIzogZ3VpX3gxMS5jOjIwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvbnQxIHdpZHRoOiAlbGRcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuWtl+S9kzHlrr3luqY6ICVsZFxuIgorIlxuIgorCisjOiBndWlfeDExLmM6MjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU0OiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgJXMiCittc2dzdHIgIkUyNTQ6IOS4jeiDvemFjee9ruminOiJsiAlcyIKKworIzogZ3VpX3gxMS5jOjMyNTAKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6IOS4jeiDveivu+WPliBzaWduIGRhdGEhIgorCisjOiBoYW5ndWxpbi5jOjYxMAorbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKK21zZ3N0ciAiRTI1NjogSGFuZ3VsIGF1dG9tYXRhIOmUmeivryIKKworIzogaWZfY3Njb3BlLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNzW2NvcGVdICVzIgorbXNnc3RyICIiCisKKyM6IGlmX2NzY29wZS5jOjY3Cittc2dpZCAiQWRkIGEgbmV3IGRhdGFiYXNlIgorbXNnc3RyICLmlrDlop7mlbDmja7lupMiCisKKyM6IGlmX2NzY29wZS5jOjY5Cittc2dpZCAiUXVlcnkgZm9yIGEgcGF0dGVybiIKK21zZ3N0ciAi5p+l6K+i5qih5byPIgorCisjOiBpZl9jc2NvcGUuYzo3MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICLmmL7npLrmraTkv6Hmga8iCisKKyM6IGlmX2NzY29wZS5jOjczCittc2dpZCAiS2lsbCBhIGNvbm5lY3Rpb24iCittc2dzdHIgIue7k+adn+i/nuaOpSIKKworIzogaWZfY3Njb3BlLmM6NzUKK21zZ2lkICJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIgorbXNnc3RyICLph43orr7miYDmnInov57mjqUiCisKKyM6IGlmX2NzY29wZS5jOjc3Cittc2dpZCAiU2hvdyBjb25uZWN0aW9ucyIKK21zZ3N0ciAi5pi+56S66L+e5o6lIgorCisjOiBpZl9jc2NvcGUuYzoxMDgKK21zZ2lkICJUaGlzIGNzY29wZSBjb21tYW5kIGRvZXMgbm90IHN1cHBvcnQgc3BsaXR0aW5nIHRoZSB3aW5kb3cuXG4iCittc2dzdHIgIui/meS4qiBjc2NvcGUg5ZG95Luk5LiN5pSv5oyB5YiG5Ymy5bGP5bmVXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0MworbXNnaWQgIlVzYWdlOiBjc3RhZyA8aWRlbnQ+IgorbXNnc3RyICLnlKjms5U6IGNzdGFnIDzor4bliKvlrZc+IgorCisjOiBpZl9jc2NvcGUuYzoxOTkKK21zZ2lkICJFMjU3OiBjc3RhZzogdGFnIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI1NzogY3N0YWc6IOaJvuS4jeWIsCB0YWciCisKKyM6IGlmX2NzY29wZS5jOjQwNyBpZl9jc2NvcGUuYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdCglcykgZXJyb3I6ICVkIgorbXNnc3RyICJzdGF0KCVzKSDplJnor686ICVkIgorCisjOiBpZl9jc2NvcGUuYzo0NjAgaWZfY3Njb3BlLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGVkIGNzY29wZSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAi5paw5aKeIGNzY29wZSDmlbDmja7lupMgJXMiCisKKyM6IGlmX2NzY29wZS5jOjQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIiVzIOS4jeaYr+ebruW9leaIliBjc2NvcGUg5pWw5o2u5bqTIgorCisjOiBpZl9jc2NvcGUuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKK21zZ3N0ciAi6K+75Y+WIGNzY29wZSDov57mjqUgJWQg5pe26ZSZ6K+vIgorCisjOiBpZl9jc2NvcGUuYzo2MzMKK21zZ2lkICJ1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAi5pyq55+l55qEIGNzY29wZSDmn6Xmib7lvaLmgIEiCisKKyM6IGlmX2NzY29wZS5jOjY4MAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgY3Njb3BlIHBpcGVzIgorbXNnc3RyICLkuI3og73liJvlu7rkuI4gY3Njb3BlIOi/nuaOpeeahOeuoemBkyIKKworIzogaWZfY3Njb3BlLmM6NzQ1Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb24gZXhlYyBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uIOaJp+ihjOWksei0pSIKKworIzogaWZfY3Njb3BlLmM6NzU1Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIOWksei0pSAodG9fZnApIgorCisjOiBpZl9jc2NvcGUuYzo3NTcKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciBmcl9mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4g5aSx6LSlIChmcl9mcCkiCisKKyM6IGlmX2NzY29wZS5jOjc4NQorbXNnaWQgIm5vIGNzY29wZSBjb25uZWN0aW9ucyIKK21zZ3N0ciAi5rKh5pyJIGNzY29wZSDov57mjqUiCisKKyM6IGlmX2NzY29wZS5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU5OiBubyBtYXRjaGVzIGZvdW5kIGZvciBjc2NvcGUgcXVlcnkgJXMgb2YgJXMiCittc2dzdHIgIkUyNTk6IOaJvuS4jeWIsOespuWQiCBjc2NvcGUg55qE5pCc5a+7ICVzIC8gJXMiCisKKyM6IGlmX2NzY29wZS5jOjg5OQorbXNnaWQgImNzY29wZSBjb21tYW5kczpcbiIKK21zZ3N0ciAiY3Njb3BlIOWRveS7pDpcbiIKKworIzogaWZfY3Njb3BlLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUtNXM6ICUtMzBzIChVc2FnZTogJXMpXG4iCittc2dzdHIgIiUtNXM6ICUtMzBzICjnlKjms5U6ICVzKVxuIgorCisjOiBpZl9jc2NvcGUuYzo5NzAKK21zZ2lkICJkdXBsaWNhdGUgY3Njb3BlIGRhdGFiYXNlIG5vdCBhZGRlZCIKK21zZ3N0ciAi6YeN5aSN55qEIGNzY29wZSDmlbDmja7lupPmnKrooqvliqDlhaUiCisKKyM6IGlmX2NzY29wZS5jOjk4MQorbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICLlt7Lovr7liLAgY3Njb3BlIOacgOWkp+i/nuaOpeaVsOebriIKKworIzogaWZfY3Njb3BlLmM6MTEwMgorbXNnaWQgIkUyNjA6IGNzY29wZSBjb25uZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MDog5om+5LiN5YiwIGNzY29wZSDov57mjqUiCisKKyM6IGlmX2NzY29wZS5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiDmib7kuI3liLAgY3Njb3BlIOi/nuaOpSAlcyIKKworIzogaWZfY3Njb3BlLmM6MTE0MQorbXNnaWQgImNzY29wZSBjb25uZWN0aW9uIGNsb3NlZCIKK21zZ3N0ciAiY3Njb3BlIOi/nuaOpeW3suWFs+mXrSIKKworIzogaWZfY3Njb3BlLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWRcbiIKK21zZ3N0ciAiY3Njb3BlIOi/nuaOpSAlcyDlt7LlhbPpl61cbiIKKworIy4gc2hvdWxkIG5vdCByZWFjaCBoZXJlCisjOiBpZl9jc2NvcGUuYzoxMjkwCittc2dpZCAiZmF0YWwgZXJyb3IgaW4gY3NfbWFuYWdlX21hdGNoZXMiCittc2dzdHIgImNzX21hbmFnZV9tYXRjaGVzIOS4pemHjemUmeivryIKKworIzogaWZfY3Njb3BlLmM6MTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVkIgorbXNnc3RyICJFMjYyOiDor7vlj5YgY3Njb3BlIOi/nuaOpSAlZCDplJnor68iCisKKyM6IGlmX2NzY29wZS5jOjE0NDkKK21zZ2lkICJjb3VsZG4ndCBtYWxsb2NcbiIKK21zZ3N0ciAi5LiN6IO95L2/55SoIG1hbGxvY1xuIgorCisjOiBpZl9jc2NvcGUuYzoxNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzXG4iCittc2dzdHIgIkNzY29wZSDmoIfnrb4odGFnKTogJXNcbiIKKworIzogaWZfY3Njb3BlLmM6MTQ1OAorbXNnaWQgIiAgICMgICBsaW5lIgorbXNnc3RyICIgICAjICAg6KGMICAiCisKKyM6IGlmX2NzY29wZS5jOjE0NjAKK21zZ2lkICJmaWxlbmFtZSAvIGNvbnRleHQgLyBsaW5lXG4iCittc2dzdHIgIuaWh+S7tuWQjSAgICAgLyDkuIrkuIvmlocgICAgLyDooYzlj7dcbiIKKworIzogaWZfY3Njb3BlLmM6MTcxOAorbXNnaWQgIkFsbCBjc2NvcGUgZGF0YWJhc2VzIHJlc2V0IgorbXNnc3RyICLph43orr7miYDmnIkgY3Njb3BlIOaVsOaNruW6kyIKKworIzogaWZfY3Njb3BlLmM6MTc4NQorbXNnaWQgIm5vIGNzY29wZSBjb25uZWN0aW9uc1xuIgorbXNnc3RyICLmsqHmnIkgY3Njb3BlIOi/nuaOpVxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzg5Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAg5pWw5o2u5bqT5ZCN56ewICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kIHBhdGhcbiIKKworIzogaWZfY3Njb3BlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMmQgJS01bGQgICUtMzRzICA8bm9uZT5cbiIKK21zZ3N0ciAiJTJkICUtNWxkICAlLTM0cyAgPOaXoD5cbiIKKworIzogaWZfcHl0aG9uLmM6Mzc2Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIkUyNjM6IOaKseatie+8jOi/meS4quWRveS7pOS4jeiDveS9v+eUqO+8jFB5dGhvbiDnqIvluo/lupPmsqHmnInliqDovb3jgIIiCisKKyM6IGlmX3B5dGhvbi5jOjU3NgorbXNnaWQgImNhbid0IGRlbGV0ZSBPdXRwdXRPYmplY3QgYXR0cmlidXRlcyIKK21zZ3N0ciAi5LiN6IO95Yig6ZmkIE91dHB1dE9iamVjdCDlsZ7mgKciCisKKyM6IGlmX3B5dGhvbi5jOjU4MworbXNnaWQgInNvZnRzcGFjZSBtdXN0IGJlIGFuIGludGVnZXIiCittc2dzdHIgInNvZnRzcGFjZSDlv4XpnIDmmK/mlbTmlbAiCisKKyM6IGlmX3B5dGhvbi5jOjU5MQorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIgorbXNnc3RyICLkuI3mraPnoa7nmoTlsZ7mgKciCisKKyM6IGlmX3B5dGhvbi5jOjYzMCBpZl9weXRob24uYzo2NDQKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkg6ZyA6KaBIHN0cmluZyBsaXN0IOW9k+WPguaVsCIKKworIzogaWZfcHl0aG9uLmM6NzcwCittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjog5LiN6IO95Yid5aeL5YyWIEkvTyDlr7nosaEiCisKKyM6IGlmX3B5dGhvbi5jOjk1NSBpZl90Y2wuYzoxMzkxCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICLkuI3mraPnoa7nmoTooajovr7lvI8iCisKKyM6IGlmX3B5dGhvbi5jOjk2OSBpZl90Y2wuYzoxMzk2Cittc2dpZCAiZXhwcmVzc2lvbnMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICLlm6DkuLrnvJbor5Hml7bmsqHmnInliqDlhaXooajovr7lvI8oZXhwcmVzc2lvbinnmoTnqIvluo/ku6PnoIHvvIzmiYDku6XkuI3og73kvb/nlKjooajovr7lvI8iCisKKyM6IGlmX3B5dGhvbi5jOjk4MgorbXNnaWQgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCBidWZmZXIiCittc2dzdHIgIuivleWbvuS9v+eUqOW3suiiq+WIoOmZpOeahOe8k+WGsuWMuiIKKworIzogaWZfcHl0aG9uLmM6OTk3IGlmX3B5dGhvbi5jOjEwMzggaWZfcHl0aG9uLmM6MTEwMiBpZl90Y2wuYzoxMjAzCittc2dpZCAibGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIgorbXNnc3RyICLooYzlj7fotoXlh7rojIPlm7QiCisKKyM6IGlmX3B5dGhvbi5jOjEyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IgorbXNnc3RyICI8YnVmZmVyIOWvueixoSAo5bey5Yig6ZmkKTogJThsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjEzMjYgaWZfdGNsLmM6ODI1Cittc2dpZCAiaW52YWxpZCBtYXJrIG5hbWUiCittc2dzdHIgIuagh+iusOWQjeensOS4jeato+ehriIKKworIzogaWZfcHl0aG9uLmM6MTYwMQorbXNnaWQgIm5vIHN1Y2ggYnVmZmVyIgorbXNnc3RyICLml6DmraTnvJPlhrLljLoiCisKKyM6IGlmX3B5dGhvbi5jOjE2ODkKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICLor5Xlm77kvb/nlKjlt7LooqvliKDpmaTnmoTnqpflj6MiCisKKyM6IGlmX3B5dGhvbi5jOjE3MzQKK21zZ2lkICJyZWFkb25seSBhdHRyaWJ1dGUiCittc2dzdHIgIuWPquivu+WxnuaApyIKKworIzogaWZfcHl0aG9uLmM6MTc0NworbXNnaWQgImN1cnNvciBwb3NpdGlvbiBvdXRzaWRlIGJ1ZmZlciIKK21zZ3N0ciAi5YWJ5qCH5a6a5L2N5Zyo57yT5Yay5Yy65LmL5aSWIgorCisjOiBpZl9weXRob24uYzoxODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0IChkZWxldGVkKSBhdCAlLjhsWD4iCittc2dzdHIgIjznqpflj6Plr7nosaEo5bey5Yig6ZmkKTogJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODM2CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjznqpflj6Plr7nosaEo5pyq55+lKTogJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODM4CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI856qX5Y+jICVkPiIKKworIzogaWZfcHl0aG9uLmM6MTkxNAorbXNnaWQgIm5vIHN1Y2ggd2luZG93IgorbXNnc3RyICLml6DmraTnqpflj6MiCisKKyM6IGlmX3B5dGhvbi5jOjIxNDQgaWZfcHl0aG9uLmM6MjE3NSBpZl9weXRob24uYzoyMjI1IGlmX3B5dGhvbi5jOjIyODUKKyM6IGlmX3B5dGhvbi5jOjI0MDIgaWZfcHl0aG9uLmM6MjQ1NCBpZl90Y2wuYzo2NzMgaWZfdGNsLmM6NzE4IGlmX3RjbC5jOjc5MgorIzogaWZfdGNsLmM6ODYyIGlmX3RjbC5jOjE5ODcKK21zZ2lkICJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICLkuI3og73kv53lrZjlpI3ljp/kv6Hmga8iCisKKyM6IGlmX3B5dGhvbi5jOjIxNDYgaWZfcHl0aG9uLmM6MjIzMiBpZl9weXRob24uYzoyMjk2Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBsaW5lIgorbXNnc3RyICLkuI3og73liKDpmaTmraTooYwiCisKKyM6IGlmX3B5dGhvbi5jOjIxNzcgaWZfcHl0aG9uLmM6MjMxMiBpZl90Y2wuYzo2NzkgaWZfdGNsLmM6MjAwOQorbXNnaWQgImNhbm5vdCByZXBsYWNlIGxpbmUiCittc2dzdHIgIuS4jeiDveabv+aNouatpOihjCIKKworIzogaWZfcHl0aG9uLmM6MjMyOCBpZl9weXRob24uYzoyNDA0IGlmX3B5dGhvbi5jOjI0NjIKK21zZ2lkICJjYW5ub3QgaW5zZXJ0IGxpbmUiCittc2dzdHIgIuS4jeiDveaPkuWFpeatpOihjCIKKworIzogaWZfcHl0aG9uLmM6MjU2NgorbXNnaWQgInN0cmluZyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAi5a2X56ym5Liy5LiN6IO95YyF5ZCr5paw6KGMIgorCisjOiBpZl9ydWJ5LmM6Mzk0Cittc2dpZCAiIgorIkUyNjY6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBSdWJ5IGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIkUyNjY6IOatpOWRveS7pOS4jeiDveS9v+eUqO+8jOaXoOazleWKoOi9vSBSdWJ5IOeoi+W6j+W6kyhMaWJyYXJ5KSIKKworIzogaWZfcnVieS5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjczOiB1bmtub3duIGxvbmdqbXAgc3RhdHVzICVkIgorbXNnc3RyICJFMjczOiDmnKrnn6XnmoQgbG9uZ2ptcCDnirbmgIEgJWQiCisKKyM6IGlmX3NuaWZmLmM6NjcKK21zZ2lkICJUb2dnbGUgaW1wbGVtZW50YXRpb24vZGVmaW5pdGlvbiIKK21zZ3N0ciAi5YiH5o2i5a6e546wL+WumuS5iSIKKworIzogaWZfc25pZmYuYzo2OAorbXNnaWQgIlNob3cgYmFzZSBjbGFzcyBvZiIKK21zZ3N0ciAi5pi+56S6IGJhc2UgY2xhc3Mgb2Y6IgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAi5pi+56S66KKr6KaG55uW55qE5oiQ5ZGY5Ye95pWwIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICLmgaLlpI06IOS7juaWh+S7tiIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAi5oGi5aSNOiDku47lr7nosaEiCisKKyM6IGlmX3NuaWZmLmM6NzMKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGFsbCBwcm9qZWN0cyIKK21zZ3N0ciAi5oGi5aSNOiDku47miYDmnInpobnnm64iCisKKyM6IGlmX3NuaWZmLmM6NzQKK21zZ2lkICJSZXRyaWV2ZSIKK21zZ3N0ciAi5oGi5aSNIgorCisjOiBpZl9zbmlmZi5jOjc1Cittc2dpZCAiU2hvdyBzb3VyY2Ugb2YiCittc2dzdHIgIuaYvuekuua6kOS7o+eggTogIgorCisjOiBpZl9zbmlmZi5jOjc2Cittc2dpZCAiRmluZCBzeW1ib2wiCittc2dzdHIgIuafpeaJviBzeW1ib2wiCisKKyM6IGlmX3NuaWZmLmM6NzcKK21zZ2lkICJCcm93c2UgY2xhc3MiCittc2dzdHIgIua1j+iniCBjbGFzcyIKKworIzogaWZfc25pZmYuYzo3OAorbXNnaWQgIlNob3cgY2xhc3MgaW4gaGllcmFyY2h5IgorbXNnc3RyICLmmL7npLrlsYLmrKHlhbPns7vnmoTnsbsiCisKKyM6IGlmX3NuaWZmLmM6NzkKK21zZ2lkICJTaG93IGNsYXNzIGluIHJlc3RyaWN0ZWQgaGllcmFyY2h5IgorbXNnc3RyICLmmL7npLogcmVzdHJpY3RlZCDlsYLmrKHlhbPns7vnmoQgY2xhc3MiCisKKyM6IGlmX3NuaWZmLmM6ODAKK21zZ2lkICJYcmVmIHJlZmVycyB0byIKK21zZ3N0ciAiWHJlZiDlj4LogIPliLAiCisKKyM6IGlmX3NuaWZmLmM6ODEKK21zZ2lkICJYcmVmIHJlZmVycmVkIGJ5IgorbXNnc3RyICJYcmVmIOiiq+iwgeWPguiAgzoiCisKKyM6IGlmX3NuaWZmLmM6ODIKK21zZ2lkICJYcmVmIGhhcyBhIgorbXNnc3RyICJYcmVmIOaciSIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiDooqvosIHkvb/nlKg6IgorCisjOiBpZl9zbmlmZi5jOjg0Cittc2dpZCAiU2hvdyBkb2N1IG9mIgorbXNnc3RyICLmmL7npLrmlofku7Y6ICIKKworIzogaWZfc25pZmYuYzo4NQorbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgorbXNnc3RyICLkuqfnlJ/mlofku7Y6ICIKKworIzogaWZfc25pZmYuYzo5NworbXNnaWQgIiIKKyJDYW5ub3QgY29ubmVjdCB0byBTTmlGRisuIENoZWNrIGVudmlyb25tZW50IChzbmlmZmVtYWNzIG11c3QgYmUgZm91bmQgaW4gIgorIiRQQVRIKS5cbiIKK21zZ3N0ciAi5LiN6IO96L+e5o6l5YiwIFNOaUZGK+OAguivt+ajgOafpeeOr+Wig+WPmOmHjyAoJFBBVEgg6YeM5b+F6ZyA5Y+v5Lul5om+5YiwIHNuaWZmZW1hY3MpXG4iCisKKyM6IGlmX3NuaWZmLmM6NDI1Cittc2dpZCAiRTI3NDogU25pZmY6IEVycm9yIGR1cmluZyByZWFkLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIkUyNzQ6IFNuaWZmOiDor7vlj5bplJnor68uIOWPlua2iOi/nuaOpSIKKworIzogaWZfc25pZmYuYzo1NTMKK21zZ2lkICJTTmlGRisgaXMgY3VycmVudGx5ICIKK21zZ3N0ciAiU05pRkYrIOebruWJjSIKKworIzogaWZfc25pZmYuYzo1NTUKK21zZ2lkICJub3QgIgorbXNnc3RyICLmnKoiCisKKyM6IGlmX3NuaWZmLmM6NTU2Cittc2dpZCAiY29ubmVjdGVkIgorbXNnc3RyICLov57mjqXkuK0iCisKKyM6IGlmX3NuaWZmLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzU6IFVua25vd24gU05pRkYrIHJlcXVlc3Q6ICVzIgorbXNnc3RyICJFMjc1OiDkuI3mraPnoa7nmoQgU05pZmYrIOiwg+eUqDogJXMiCisKKyM6IGlmX3NuaWZmLmM6NjA1Cittc2dpZCAiRTI3NjogRXJyb3IgY29ubmVjdGluZyB0byBTTmlGRisiCittc2dzdHIgIkUyNzY6IOi/nuaOpeWIsCBTTmlGRisg5aSx6LSlIgorCisjOiBpZl9zbmlmZi5jOjEwMTAKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODog5pyq6L+e5o6l5YiwIFNOaUZGKyIKKworIzogaWZfc25pZmYuYzoxMDE5Cittc2dpZCAiRTI3OTogTm90IGEgU05pRkYrIGJ1ZmZlciIKK21zZ3N0ciAiRTI3OTog5LiN5pivIFNOaUZGKyDnmoTnvJPlhrLljLoiCisKKyM6IGlmX3NuaWZmLmM6MTA4NAorbXNnaWQgIlNuaWZmOiBFcnJvciBkdXJpbmcgd3JpdGUuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiU25pZmY6IOWGmeWFpemUmeivr+OAgue7k+adn+i/nuaOpSIKKworIzogaWZfdGNsLmM6NDA3Cittc2dpZCAiaW52YWxpZCBidWZmZXIgbnVtYmVyIgorbXNnc3RyICLkuI3mraPnoa7nmoTnvJPlhrLljLrlj7ciCisKKyM6IGlmX3RjbC5jOjQ1MyBpZl90Y2wuYzo5MjAgaWZfdGNsLmM6MTA5OQorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIuWwmuacquWunueOsCIKKworIzogaWZfdGNsLmM6NDkwCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIuS4jeato+ehrueahOmAiemhuSIKKworIy4gPz8/CisjOiBpZl90Y2wuYzo3NjMKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgIuS4jeiDveiuvuWumuihjCIKKworIzogaWZfdGNsLmM6ODM0Cittc2dpZCAibWFyayBub3Qgc2V0IgorbXNnc3RyICLmsqHmnInorr7lrprmoIforrAiCisKKyM6IGlmX3RjbC5jOjg0MCBpZl90Y2wuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdyAlZCBjb2x1bW4gJWQiCittc2dzdHIgIuWIlyAlZCDooYwgJWQiCisKKyM6IGlmX3RjbC5jOjg3MAorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgIuS4jeiDveaPkuWFpeaIlua3u+WKoOatpOihjCIKKworIzogaWZfdGNsLmM6MTI1NworbXNnaWQgInVua25vd24gZmxhZzogIgorbXNnc3RyICLplJnor6/nmoTmoIflv5c6ICIKKworIzogaWZfdGNsLmM6MTMyNworbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICLkuI3mraPnoa7nmoQgVklNIOmAiemhuSIKKworIzogaWZfdGNsLmM6MTQxMgorbXNnaWQgImtleWJvYXJkIGludGVycnVwdCIKK21zZ3N0ciAi6ZSu55uY5Lit5patIgorCisjOiBpZl90Y2wuYzoxNDE3Cittc2dpZCAidmltIGVycm9yIgorbXNnc3RyICJ2aW0g6ZSZ6K+vIgorCisjOiBpZl90Y2wuYzoxNDYwCittc2dpZCAiY2Fubm90IGNyZWF0ZSBidWZmZXIvd2luZG93IGNvbW1hbmQ6IG9iamVjdCBpcyBiZWluZyBkZWxldGVkIgorbXNnc3RyICLkuI3og73liJvlu7rnvJPlhrLljLov56qX5Y+j5ZG95LukOiDlr7nosaHlsIbooqvliKDpmaQiCisKKyM6IGlmX3RjbC5jOjE1MzQKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICLkuI3og73ms6jlhowgY2FsbGJhY2sg5ZG95LukOiDnvJPlhrLljLov56qX5Y+j5bey57uP6KKr5Yig6Zmk5LqGIgorCisjLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIzogaWZfdGNsLmM6MTU1MQorbXNnaWQgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgY29ycnVwdCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS4iCisib3JnIgorbXNnc3RyICJFMjgwOiBUQ0wg5Lil6YeN6ZSZ6K+vOiByZWZsaXN0IOS4jeWPr+mdoCE/IOivt+aKpeWRiue7mSB0byB2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjE1NTIKK21zZ2lkICJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyByZWZlcmVuY2Ugbm90IGZvdW5kIgorbXNnc3RyICLkuI3og73ms6jlhowgY2FsbGJhY2sg5ZG95LukOiDmib7kuI3liLDnvJPlhrLljLov56qX5Y+jIgorCisjOiBpZl90Y2wuYzoxNzEzCittc2dpZCAiU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFRjbCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICLmraTlkb3ku6TkuI3og73kvb/nlKgsIOWboOS4uuaXoOazleWKoOi9vSBUY2wg56iL5bqP5bqTKExpYnJhcnkpIgorCisjOiBpZl90Y2wuYzoxODc1Cittc2dpZCAiIgorIkUyODE6IFRDTCBFUlJPUjogZXhpdCBjb2RlIGlzIG5vdCBpbnQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0ub3JnIgorbXNnc3RyICJFMjgxOiBUQ0wg6ZSZ6K+vOiDpgIDlh7rov5Tlm57lgLzkuI3mmK/mlbTmlbAhPyDor7fmiqXlkYrnu5kgdG8gdmltLWRldkB2aW0ub3JnIgorCisjOiBpZl90Y2wuYzoxOTk1Cittc2dpZCAiY2Fubm90IGdldCBsaW5lIgorbXNnc3RyICLkuI3og73lj5blvpfmraTooYwiCisKKyM6IGlmX3hjbWRzcnYuYzoyMDQKK21zZ2lkICJVbmFibGUgdG8gcmVnaXN0ZXIgYSBjb21tYW5kIHNlcnZlciBuYW1lIgorbXNnc3RyICLkuI3og73ms6jlhozlkb3ku6TmnI3liqHlmajlkI3np7AiCisKKyM6IGlmX3hjbWRzcnYuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0Nzogbm8gcmVnaXN0ZXJlZCBzZXJ2ZXIgbmFtZWQgXCIlc1wiIgorbXNnc3RyICJFMjQ3OiDmsqHmnInms6jlhozkuLogXCIlc1wiIOeahOacjeWKoeWZqCIKKworIzogaWZfeGNtZHNydi5jOjQ0NgorbXNnaWQgIkUyNDg6IEZhaWxlZCB0byBzZW5kIGNvbW1hbmQgdG8gdGhlIGRlc3RpbmF0aW9uIHByb2dyYW0iCittc2dzdHIgIkUyNDg6IOS4jeiDvemAgeWHuuWRveS7pOWIsOebrueahOWcsOeoi+W6jyIKKworIzogaWZfeGNtZHNydi5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNlcnZlciBpZCB1c2VkOiAlcyIKK21zZ3N0ciAi5LiN5q2j56Gu55qE5pyN5Yqh5ZmoIGlkIDogJXMiCisKKyM6IGlmX3hjbWRzcnYuYzoxMDU2Cittc2dpZCAiRTI0OTogY291bGRuJ3QgcmVhZCBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkiCittc2dzdHIgIkUyNDk6IOS4jeiDveivu+WPliBWSU0g55qEIOazqOWGjOihqOWxnuaApyIKKworIzogaWZfeGNtZHNydi5jOjEwNjcKK21zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCittc2dzdHIgIkUyNTE6IFZJTSDnmoTms6jlhozooajlsZ7mgKfmnInor6/jgILlt7LliKDpmaTjgIIiCisKKyM6IG1haW4uYzo1MyBvcHRpb24uYzozMTYyIG9wdGlvbi5jOjMyNjkKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAi5LiN5q2j56Gu55qE6YCJ6aG5IgorCisjOiBtYWluLmM6NTUKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAi5aSq5aSa57yW6L6R5Y+C5pWwIgorCisjOiBtYWluLmM6NTcKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICLnvLrlsJHlv4XopoHnmoTlj4LmlbA6IgorCisjOiBtYWluLmM6NTkKK21zZ2lkICJHYXJiYWdlIGFmdGVyIG9wdGlvbiIKK21zZ3N0ciAi5LiN6IO96L6o6K6k5q2k6YCJ6aG55ZCO55qE5ZG95LukOiAiCisKKyM6IG1haW4uYzo2MQorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiBvciBcIi1jIGNvbW1hbmRcIiBhcmd1bWVudHMiCittc2dzdHIgIuWkquWkmiBcIitjb21tYW5kXCIg5oiWIFwiLWMgY29tbWFuZFwiIOWPguaVsCIKKworIzogbWFpbi5jOjYzCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBmb3IiCittc2dzdHIgIuS4jeato+ehrueahOWPguaVsDogIgorCisjOiBtYWluLmM6NDM2Cittc2dpZCAiVGhpcyBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSBkaWZmIGZlYXR1cmUuIgorbXNnc3RyICLmgqjnmoQgVmltIOe8luivkeaXtuayoeacieWKoOWFpSBkaWZmIOeahOiDveWKmyIKKworIzogbWFpbi5jOjg1OAorbXNnaWQgIkF0dGVtcHQgdG8gb3BlbiBzY3JpcHQgZmlsZSBhZ2FpbjogXCIiCittc2dzdHIgIuivleWbvuWGjeasoeaJk+W8gCBzY3JpcHQg5paH5Lu2OiBcIiIKKworIzogbWFpbi5jOjg2MiBtYWluLmM6ODY5IG1haW4uYzo5MTMgbWVtbGluZS5jOjM2NzMgbWVtbGluZS5jOjM2NzcKKyM6IHZlcnNpb24uYzo4MTYgdmVyc2lvbi5jOjgyMSB2ZXJzaW9uLmM6ODI2IHZlcnNpb24uYzo4MzEgdmVyc2lvbi5jOjgzNgorIzogdmVyc2lvbi5jOjg0MSB2ZXJzaW9uLmM6ODQ3IHZlcnNpb24uYzo4NTEgdmVyc2lvbi5jOjg1NSB2ZXJzaW9uLmM6ODYwCisjOiB2ZXJzaW9uLmM6ODY3IHZlcnNpb24uYzo4NzUgdmVyc2lvbi5jOjg4MQorbXNnaWQgIlwiXG4iCittc2dzdHIgIlwiXG4iCisKKyM6IG1haW4uYzo4NjcKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3IgcmVhZGluZzogXCIiCittc2dzdHIgIuS4jeiDveS4uuivu+iAjOaJk+W8gDogXCIiCisKKyM6IG1haW4uYzo5MTEKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIuS4jeiDveS4uiBzY3JpcHQg6L6T5Ye66ICM5omT5byAOiBcIiIKKworIzogbWFpbi5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmlsZXMgdG8gZWRpdFxuIgorbXNnc3RyICLov5jmnIkgJWQg5Liq5paH5Lu2562J5b6F57yW6L6RXG4iCisKKyM6IG1haW4uYzoxMDk0Cittc2dpZCAiVmltOiBXYXJuaW5nOiBPdXRwdXQgaXMgbm90IHRvIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiDms6jmhI86IOi+k+WHuuS4jeaYr+e7iOerryjlsY/luZUpXG4iCisKKyM6IG1haW4uYzoxMDk2Cittc2dpZCAiVmltOiBXYXJuaW5nOiBJbnB1dCBpcyBub3QgZnJvbSBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTog5rOo5oSPOiDovpPlhaXkuI3mmK/nu4jnq68o6ZSu55uYKVxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjExNzEKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJwcmUtdmltcmMg5ZG95Luk6KGMIgorCisjOiBtYWluLmM6MTIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgyOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTI4Mjog5LiN6IO96K+75Y+W5paH5Lu2IFwiJXNcIiIKKworIzogbWFpbi5jOjIxNTcKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIuafpeivouabtOWkmuS/oeaBr+ivt+aJp+ihjDogXCJ2aW0gLWhcIlxuIgorCisjOiBtYWluLmM6MjE5MAorbXNnaWQgIltmaWxlIC4uXSAgICAgICBlZGl0IHNwZWNpZmllZCBmaWxlKHMpIgorbXNnc3RyICJb5paH5Lu2IC4uXSAgICAgICDnvJbovpHmjIflrprnmoTmlofku7YiCisKKyM6IG1haW4uYzoyMTkxCittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAg5LuO5qCH5YeG6L6T5YWlKHN0ZGluKeivu+WPluaWh+acrCIKKworIzogbWFpbi5jOjIxOTIKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCB0YWcgICAgICAgICAg57yW6L6R5pe25L2/55So5oyH5a6a55qEIHRhZyIKKworIzogbWFpbi5jOjIxOTQKK21zZ2lkICItcSBbZXJyb3JmaWxlXSAgZWRpdCBmaWxlIHdpdGggZmlyc3QgZXJyb3IiCittc2dzdHIgIi1xIFtlcnJvcmZpbGVdICDnvJbovpHml7bliqDovb3nrKzkuIDkuKrplJnor68iCisKKyM6IG1haW4uYzoyMjAzCittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIiDnlKjms5U6IgorCisjOiBtYWluLmM6MjIwNgorbXNnaWQgIiB2aW0gW2FyZ3VtZW50c10gIgorbXNnc3RyICJ2aW0gW+WPguaVsF0gIgorCisjOiBtYWluLmM6MjIxMAorbXNnaWQgIiIKKyJcbiIKKyIgICBvcjoiCittc2dzdHIgIiIKKyJcbiIKKyIgICDmiJY6IgorCisjOiBtYWluLmM6MjIxMworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyLlj4LmlbA6XG4iCisKKyM6IG1haW4uYzoyMjE0Cittc2dpZCAiLS1cdFx0XHRPbmx5IGZpbGUgbmFtZXMgYWZ0ZXIgdGhpcyIKK21zZ3N0ciAiLS1cdFx0XHTlj6rmnInlnKjov5nkuYvlkI7nmoTmlofku7YiCisKKyM6IG1haW4uYzoyMjE2Cittc2dpZCAiLXJlZ2lzdGVyXHRcdFJlZ2lzdGVyIHRoaXMgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItcmVnaXN0ZXJcdFx05rOo5YaMIGd2aW0g5YiwIE9MRSIKKworIzogbWFpbi5jOjIyMTcKK21zZ2lkICItdW5yZWdpc3Rlclx0XHRVbnJlZ2lzdGVyIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXVucmVnaXN0ZXJcdFx05Y+W5raIIE9MRSDkuK3nmoQgZ3ZpbSDms6jlhowiCisKKyM6IG1haW4uYzoyMjIwCittc2dpZCAiLWdcdFx0XHRSdW4gdXNpbmcgR1VJIChsaWtlIFwiZ3ZpbVwiKSIKK21zZ3N0ciAiLWdcdFx0XHTkvb/nlKjlm77lvaLnlYzpnaIgKOWQjCBcImd2aW1cIikiCisKKyM6IG1haW4uYzoyMjIxCittc2dpZCAiLWZcdFx0XHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZlx0XHRcdOWJjeaZrzog5ZCv5Yqo5Zu+5b2i55WM6Z2i5pe25LiNIGZvcmsiCisKKyM6IG1haW4uYzoyMjIzCittc2dpZCAiLXZcdFx0XHRWaSBtb2RlIChsaWtlIFwidmlcIikiCittc2dzdHIgIi12XHRcdFx0Vmkg5qih5byPICjlkIwgXCJ2aVwiKSIKKworIzogbWFpbi5jOjIyMjQKK21zZ2lkICItZVx0XHRcdEV4IG1vZGUgKGxpa2UgXCJleFwiKSIKK21zZ3N0ciAiLWVcdFx0XHRFeCDmqKHlvI8gKOWQjCBcImV4XCIpIgorCisjOiBtYWluLmM6MjIyNQorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHTlronpnZkgKGJhdGNoKSDmqKHlvI8gKOWPquiDveS4jiBcImV4XCIg5LiA6LW35L2/55SoKSIKKworIzogbWFpbi5jOjIyMjcKK21zZ2lkICItZFx0XHRcdERpZmYgbW9kZSAobGlrZSBcInZpbWRpZmZcIikiCittc2dzdHIgIi1kXHRcdFx0RGlmZiDmqKHlvI8gKOWQjCBcInZpbWRpZmZcIiwg5Y+v6L+F6YCf5q+U6L6D5Lik5paH5Lu25LiN5ZCM5aSEKSIKKworIzogbWFpbi5jOjIyMjkKK21zZ2lkICIteVx0XHRcdEVhc3kgbW9kZSAobGlrZSBcImV2aW1cIiwgbW9kZWxlc3MpIgorbXNnc3RyICIteVx0XHRcdOeugOaYk+aooeW8jyAo5ZCMIFwiZXZpbVwiLCBtb2RlbGVzcykiCisKKyM6IG1haW4uYzoyMjMwCittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHTlj6ror7vmqKHlvI8gKOWQjCBcInZpZXdcIikiCisKKyM6IG1haW4uYzoyMjMxCittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdOmZkOWItuaooeW8jyAo5ZCMIFwicnZpbVwiKSIKKworIzogbWFpbi5jOjIyMzIKK21zZ2lkICItbVx0XHRcdE1vZGlmaWNhdGlvbnMgKHdyaXRpbmcgZmlsZXMpIG5vdCBhbGxvd2VkIgorbXNnc3RyICItbVx0XHRcdOS4jeWPr+S/ruaUuSAo5YaZ5YWl5paH5Lu2KSIKKworIzogbWFpbi5jOjIyMzMKK21zZ2lkICItTVx0XHRcdE1vZGlmaWNhdGlvbnMgaW4gdGV4dCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLU1cdFx0XHTmlofmnKzkuI3lj6/kv67mlLkiCisKKyM6IG1haW4uYzoyMjM0Cittc2dpZCAiLWJcdFx0XHRCaW5hcnkgbW9kZSIKK21zZ3N0ciAiLWJcdFx0XHTkuozov5vliLbmqKHlvI8iCisKKyM6IG1haW4uYzoyMjM2Cittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0TGlzcCDmqKHlvI8iCisKKyM6IG1haW4uYzoyMjM4Cittc2dpZCAiLUNcdFx0XHRDb21wYXRpYmxlIHdpdGggVmk6ICdjb21wYXRpYmxlJyIKK21zZ3N0ciAiLUNcdFx0XHQnY29tcGF0aWJsZScg5Lyg57ufIFZpIOWFvOWuueaooeW8jyIKKworIzogbWFpbi5jOjIyMzkKK21zZ2lkICItTlx0XHRcdE5vdCBmdWxseSBWaSBjb21wYXRpYmxlOiAnbm9jb21wYXRpYmxlJyIKK21zZ3N0ciAiLU5cdFx0XHQnbm9jb21wYXRpYmxlJyDkuI3lrozlhajkuI7kvKDnu58gVmkg5YW85a6577yM5Y+v5L2/55SoIFZpbSDliqDlvLrog73lipsiCisKKyM6IG1haW4uYzoyMjQwCittc2dpZCAiLVZbTl1cdFx0VmVyYm9zZSBsZXZlbCIKK21zZ3N0ciAiLVZbTl1cdFx0VmVyYm9zZSDnrYnnuqciCisKKyM6IG1haW4uYzoyMjQxCittc2dpZCAiLURcdFx0XHREZWJ1Z2dpbmcgbW9kZSIKK21zZ3N0ciAiLURcdFx0XHTosIPor5XmqKHlvI8iCisKKyM6IG1haW4uYzoyMjQyCittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHTkuI3kvb/nlKjkuqTmjaLmlofku7YsIOWPquS9v+eUqOWGheWtmCIKKworIzogbWFpbi5jOjIyNDMKK21zZ2lkICItclx0XHRcdExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdCIKK21zZ3N0ciAiLXJcdFx0XHTliJflh7rkuqTmjaLmlofku7blkI7pgIDlh7oiCisKKyM6IG1haW4uYzoyMjQ0Cittc2dpZCAiLXIgKHdpdGggZmlsZSBuYW1lKVx0UmVjb3ZlciBjcmFzaGVkIHNlc3Npb24iCittc2dzdHIgIi1yICjliqDmlofku7blkI0pICAgICAgIFx05oGi5aSN5LiK5qyh5bSp5rqD55qE6LWE5paZKFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uKSIKKworIzogbWFpbi5jOjIyNDUKK21zZ2lkICItTFx0XHRcdFNhbWUgYXMgLXIiCittc2dzdHIgIi1MXHRcdFx05LiOIC1yIOS4gOagtyIKKworIzogbWFpbi5jOjIyNDcKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdFx05LiN5L2/55SoIG5ld2NsaSDmnaXmiZPlvIDnqpflj6MiCisKKyM6IG1haW4uYzoyMjQ4Cittc2dpZCAiLWRldiA8ZGV2aWNlPlx0XHRVc2UgPGRldmljZT4gZm9yIEkvTyIKK21zZ3N0ciAiLWRldiA8ZGV2aWNlPlx0XHTkvb/nlKggPGRldmljZT4g5YGa6L6T5YWl6L6T5Ye66K6+5aSHIgorCisjOiBtYWluLmM6MjI1MQorbXNnaWQgIi1IXHRcdFx0c3RhcnQgaW4gSGVicmV3IG1vZGUiCittc2dzdHIgIi1IXHRcdFx05ZCv5Yqo5Li6IOW4jOS8r+iOseaooeW8jyIKKworIzogbWFpbi5jOjIyNTQKK21zZ2lkICItRlx0XHRcdHN0YXJ0IGluIEZhcnNpIG1vZGUiCittc2dzdHIgIi1GXHRcdFx05ZCv5Yqo5Li6IEZhcnNpIOaooeW8jyIKKworIzogbWFpbi5jOjIyNTYKK21zZ2lkICItVCA8dGVybWluYWw+XHRTZXQgdGVybWluYWwgdHlwZSB0byA8dGVybWluYWw+IgorbXNnc3RyICItVCA8dGVybWluYWw+XHTorr7lrprnu4jnq6/kuLogPHRlcm1pbmFsPiIKKworIzogbWFpbi5jOjIyNTcKK21zZ2lkICItdSA8dmltcmM+XHRcdFVzZSA8dmltcmM+IGluc3RlYWQgb2YgYW55IC52aW1yYyIKK21zZ3N0ciAiLXUgPHZpbXJjPlx0XHTkvb/nlKggPHZpbXJjPiDmm7/mjaLku7vkvZUgLnZpbXJjIgorCisjOiBtYWluLmM6MjI1OQorbXNnaWQgIi1VIDxndmltcmM+XHRcdFVzZSA8Z3ZpbXJjPiBpbnN0ZWFkIG9mIGFueSAuZ3ZpbXJjIgorbXNnc3RyICItVSA8Z3ZpbXJjPlx0XHTkvb/nlKggPGd2aW1yYz4g5pu/5o2i5Lu75L2VIC5ndmltcmMiCisKKyM6IG1haW4uYzoyMjYxCittc2dpZCAiLS1ub3BsdWdpblx0XHREb24ndCBsb2FkIHBsdWdpbiBzY3JpcHRzIgorbXNnc3RyICItLW5vcGx1Z2luXHRcdOS4jeWKoOi9veS7u+S9lSBwbHVnaW4iCisKKyM6IG1haW4uYzoyMjYyCittc2dpZCAiLW9bTl1cdFx0T3BlbiBOIHdpbmRvd3MgKGRlZmF1bHQ6IG9uZSBmb3IgZWFjaCBmaWxlKSIKK21zZ3N0ciAiLW9bTl1cdFx05omT5byAIE4g5Liq56qX5Y+jICjpooTorr7mmK/mr4/kuKrmlofku7bkuIDkuKopIgorCisjOiBtYWluLmM6MjI2MworbXNnaWQgIi1PW05dXHRcdGxpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdOWQjCAtbyDkvYbkvb/nlKjlnoLnm7TliIblibIiCisKKyM6IG1haW4uYzoyMjY0Cittc2dpZCAiK1x0XHRcdFN0YXJ0IGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICIrXHRcdFx05ZCv5Yqo5ZCO6Lez5Yiw5paH5Lu257uT5bC+IgorCisjOiBtYWluLmM6MjI2NQorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8bG51bT5cdFx05ZCv5Yqo5ZCO6Lez5Yiw56ysIDxsbnVtPiDooYwiCisKKyM6IG1haW4uYzoyMjY3Cittc2dpZCAiLS1jbWQgPGNvbW1hbmQ+XHRFeGVjdXRlIDxjb21tYW5kPiBiZWZvcmUgbG9hZGluZyBhbnkgdmltcmMgZmlsZSIKK21zZ3N0ciAiLS1jbWQgPGNvbW1hbmQ+XHTliqDovb3ku7vkvZUgdmltcmMg5YmN5omn6KGMIDxjb21tYW5kPiIKKworIzogbWFpbi5jOjIyNjkKK21zZ2lkICItYyA8Y29tbWFuZD5cdFx0RXhlY3V0ZSA8Y29tbWFuZD4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLWMgPGNvbW1hbmQ+XHRcdOWKoOi9veesrOS4gOS4quaWh+S7tuWQjuaJp+ihjCA8Y29tbWFuZD4iCisKKyM6IG1haW4uYzoyMjcwCittc2dpZCAiLVMgPHNlc3Npb24+XHRcdFNvdXJjZSBmaWxlIDxzZXNzaW9uPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItUyA8c2Vzc2lvbj5cdFx05Yqg6L2956ys5LiA5Liq5paH5Lu25ZCO6L295YWlIFNlc3Npb24g5paH5Lu2PHNlc3Npb24+IgorCisjOiBtYWluLmM6MjI3MQorbXNnaWQgIi1zIDxzY3JpcHRpbj5cdFJlYWQgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBmaWxlIDxzY3JpcHRpbj4iCittc2dzdHIgIi1zIDxzY3JpcHRpbj5cdOS7jiA8c2NyaXB0aW4+IOivu+WFpeS4gOiIrOaooeW8j+WRveS7pCIKKworIzogbWFpbi5jOjIyNzIKK21zZ2lkICItdyA8c2NyaXB0b3V0Plx0QXBwZW5kIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItdyA8c2NyaXB0b3V0Plx05a+55paH5Lu2IDxzY3JpcHRvdXQ+IOmZhOWKoChhcHBlbmQp5omA5pyJ6L6T5YWl55qE5ZG95LukIgorCisjOiBtYWluLmM6MjI3MworbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLVcgPHNjcmlwdG91dD5cdOWvueaWh+S7tiA8c2NyaXB0b3V0PiDlhpnlhaXmiYDmnInovpPlhaXnmoTlkb3ku6QiCisKKyM6IG1haW4uYzoyMjc1Cittc2dpZCAiLXhcdFx0XHRFZGl0IGVuY3J5cHRlZCBmaWxlcyIKK21zZ3N0ciAiLXhcdFx0XHTnvJbovpHnvJbnoIHov4fnmoTmlofku7YiCisKKyM6IG1haW4uYzoyMjc5Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRDb25uZWN0IHZpbSB0byB0aGlzIHBhcnRpY3VsYXIgWC1zZXJ2ZXIiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx05bCGIHZpbSDkuI7mjIflrprnmoQgWC1zZXJ2ZXIg6L+e5o6lIgorCisjOiBtYWluLmM6MjI4MQorbXNnaWQgIi1YXHRcdFx0RG8gbm90IGNvbm5lY3QgdG8gWCBzZXJ2ZXIiCittc2dzdHIgIi1YXHRcdFx05LiN6KaB6L+e5o6l5YiwIFggU2VydmVyIgorCisjOiBtYWluLmM6MjI4MworbXNnaWQgIi0tc29ja2V0aWQgPHhpZD5cdE9wZW4gVmltIGluc2lkZSBhbm90aGVyIEdUSyB3aWRnZXQiCittc2dzdHIgIi0tc29ja2V0aWQgPHhpZD5cdOWcqOWPpuS4gOS4qiBHVEsg57uE5Lu25YaF5omT5byAIFZpbSIKKworIzogbWFpbi5jOjIyODcKK21zZ2lkICItLXJlbW90ZSA8ZmlsZXM+XHRFZGl0IDxmaWxlcz4gaW4gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZSA8ZmlsZXM+XHTnvJbovpEgVmltIOacjeWKoeWZqOS4iueahOaWh+S7tuW5tumAgOWHuiIKKworIzogbWFpbi5jOjIyODgKK21zZ2lkICIiCisiLS1yZW1vdGUtd2FpdCA8ZmlsZXM+ICBBcyAtLXJlbW90ZSBidXQgd2FpdCBmb3IgZmlsZXMgdG8gaGF2ZSBiZWVuIGVkaXRlZCIKK21zZ3N0ciAiLS1yZW1vdGUtd2FpdCA8ZmlsZXM+IOetieaViOS6jiAtLXJlbW90ZSwg5L2G5Lya562J5YCZ5paH5Lu25a6M5oiQ57yW6L6RIgorCisjOiBtYWluLmM6MjI4OQorbXNnaWQgIi0tcmVtb3RlLXNlbmQgPGtleXM+XHRTZW5kIDxrZXlzPiB0byBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQiCittc2dzdHIgIi0tcmVtb3RlLXNlbmQgPGtleXM+XHTpgIHlh7ogPGtleXM+IOWIsCBWaW0g5pyN5Yqh5Zmo5bm26YCA5Ye6IgorCisjOiBtYWluLmM6MjI5MAorbXNnaWQgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWF0ZSA8ZXhwcj4gaW4gYSBWaW0gc2VydmVyIGFuZCBwcmludCByZXN1bHQiCittc2dzdHIgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHTlnKjmnI3liqHlmajkuIrmsYLooajovr7lvI/nmoTlgLzlubbmiZPljbDnu5PmnpwiCisKKyM6IG1haW4uYzoyMjkxCittc2dpZCAiLS1zZXJ2ZXJsaXN0XHRcdExpc3QgYXZhaWxhYmxlIFZpbSBzZXJ2ZXIgbmFtZXMgYW5kIGV4aXQiCittc2dzdHIgIi0tc2VydmVybGlzdFx0XHTliJflh7rlj6/nlKjnmoQgVmltIOacjeWKoeWZqOWQjeensOW5tumAgOWHuiIKKworIzogbWFpbi5jOjIyOTIKK21zZ2lkICItLXNlcnZlcm5hbWUgPG5hbWU+XHRTZW5kIHRvL2JlY29tZSB0aGUgVmltIHNlcnZlciA8bmFtZT4iCittc2dzdHIgIi0tc2VydmVybmFtZSA8bmFtZT5cdOmAgeiHsy/miJDkuLogVmltIOacjeWKoeWZqCA8bmFtZT4iCisKKyM6IG1haW4uYzoyMjk1Cittc2dpZCAiLWkgPHZpbWluZm8+XHRcdFVzZSA8dmltaW5mbz4gaW5zdGVhZCBvZiAudmltaW5mbyIKK21zZ3N0ciAiLWkgPHZpbWluZm8+XHRcdOS9v+eUqCA8dmltaW5mbz4g6ICM6Z2eIC52aW1pbmZvIgorCisjOiBtYWluLmM6MjI5NworbXNnaWQgIi1oXHRcdFx0cHJpbnQgSGVscCAodGhpcyBtZXNzYWdlKSBhbmQgZXhpdCIKK21zZ3N0ciAiLWhcdFx0XHTmiZPljbDor7TmmI4o5Lmf5bCx5piv5pys5L+h5oGvKeWQjumAgOWHuiIKKworIzogbWFpbi5jOjIyOTgKK21zZ2lkICItLXZlcnNpb25cdFx0cHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKK21zZ3N0ciAiLS12ZXJzaW9uXHRcdOaJk+WNsOeJiOacrOS/oeaBr+WQjumAgOWHuiIKKworIzogbWFpbi5jOjIzMDIKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoTW90aWYgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJndmltIOWPr+ivhuWIq+eahOWPguaVsCAoTW90aWYg54mIKTpcbiIKKworIzogbWFpbi5jOjIzMDUKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoQXRoZW5hIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbSDlj6/or4bliKvnmoTlj4LmlbAgKEF0aGVuYSDniYgpOlxuIgorCisjOiBtYWluLmM6MjMwOAorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4iCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx05Zyo56qX5Y+jIDxkaXNwbGF5PiDmiafooYwgdmltIgorCisjOiBtYWluLmM6MjMwOQorbXNnaWQgIi1pY29uaWNcdFx0U3RhcnQgdmltIGljb25pZmllZCIKK21zZ3N0ciAiLWljb25pY1x0XHTlkK/liqjlkI7mnIDlsI/ljJYoaWNvbmlmaWVkKSIKKworIzogbWFpbi5jOjIzMTEKK21zZ2lkICItbmFtZSA8bmFtZT5cdFx0VXNlIHJlc291cmNlIGFzIGlmIHZpbSB3YXMgPG5hbWU+IgorbXNnc3RyICItbmFtZSA8bmFtZT5cdFx06K+75Y+WIFJlc291cmNlIOaXtuaKiiB2aW0g55qE5ZCN56ew6KeG5Li6IDxuYW1lPiIKKworIzogbWFpbi5jOjIzMTIKK21zZ2lkICJcdFx0XHQgIChVbmltcGxlbWVudGVkKVxuIgorbXNnc3RyICJcdFx0XHQgICjlsJrmnKrlrp7njrApXG4iCisKKyM6IG1haW4uYzoyMzE0Cittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8Y29sb3I+XHTorr7lrpogPGNvbG9yPiDkuLrog4zmma/oibIgKOS5n+WPr+eUqCAtYmcpIgorCisjOiBtYWluLmM6MjMxNQorbXNnaWQgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZnKSIKK21zZ3N0ciAiLWZvcmVncm91bmQgPGNvbG9yPlx06K6+5a6aIDxjb2xvcj4g5Li65LiA6Iis5paH5a2X6aKc6ImyICjkuZ/lj6/nlKggLWZnKSIKKworIzogbWFpbi5jOjIzMTYgbWFpbi5jOjIzMzYKK21zZ2lkICItZm9udCA8Zm9udD5cdFx0VXNlIDxmb250PiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mbikiCittc2dzdHIgIi1mb250IDxmb250Plx05L2/55SoIDxmb250PiDkuLrkuIDoiKzlrZfkvZMgKOS5n+WPr+eUqCAtZm4pIgorCisjOiBtYWluLmM6MjMxNworbXNnaWQgIi1ib2xkZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGJvbGQgdGV4dCIKK21zZ3N0ciAiLWJvbGRmb250IDxmb250Plx05L2/55SoIDxmb250PiDkuLrnspfkvZPlrZfkvZMiCisKKyM6IG1haW4uYzoyMzE4Cittc2dpZCAiLWl0YWxpY2ZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBpdGFsaWMgdGV4dCIKK21zZ3N0ciAiLWl0YWxpY2ZvbnQgPGZvbnQ+XHTkvb/nlKggPGZvbnQ+IOS4uuaWnOS9k+Wtl+S9kyIKKworIzogbWFpbi5jOjIzMTkgbWFpbi5jOjIzMzcKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIi1nZW9tZXRyeSA8Z2VvbT5cdOS9v+eUqDxnZW9tPuS4uuWIneWni+S9jee9riAo5Lmf5Y+v55SoIC1nZW9tKSIKKworIzogbWFpbi5jOjIzMjAKK21zZ2lkICItYm9yZGVyd2lkdGggPHdpZHRoPlx0VXNlIGEgYm9yZGVyIHdpZHRoIG9mIDx3aWR0aD4gKGFsc286IC1idykiCittc2dzdHIgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHTkvb/nlKjlrr3luqbkuLogPHdpZHRoPiDnmoTovrnmoYYgKOS5n+WPr+eUqCAtYncpIgorCisjOiBtYWluLmM6MjMyMQorbXNnaWQgIi1zY3JvbGxiYXJ3aWR0aCA8d2lkdGg+ICBVc2UgYSBzY3JvbGxiYXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLXN3KSIKK21zZ3N0ciAiLXNjcm9sbGJhcndpZHRoIDx3aWR0aD4g6K6+5a6a5rua5Yqo5p2h5a695bqm5Li6IDx3aWR0aD4gKOS5n+WPr+eUqCAtc3cpIgorCisjOiBtYWluLmM6MjMyMworbXNnaWQgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHRVc2UgYSBtZW51IGJhciBoZWlnaHQgb2YgPGhlaWdodD4gKGFsc286IC1taCkiCittc2dzdHIgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHTorr7lrproj5zljZXliJfnmoTpq5jluqbkuLogPGhlaWdodD4gKOS5n+WPr+eUqCAtbWgpIgorCisjOiBtYWluLmM6MjMyNSBtYWluLmM6MjMzOAorbXNnaWQgIi1yZXZlcnNlXHRcdFVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiAtcnYpIgorbXNnc3RyICItcmV2ZXJzZVx0XHTkvb/nlKjlj43mmL4gKOS5n+WPr+eUqCAtcnYpIgorCisjOiBtYWluLmM6MjMyNgorbXNnaWQgIityZXZlcnNlXHRcdERvbid0IHVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiArcnYpIgorbXNnc3RyICIrcmV2ZXJzZVx0XHTkuI3kvb/nlKjlj43mmL4gKOS5n+WPr+eUqCArcnYpIgorCisjOiBtYWluLmM6MjMyNworbXNnaWQgIi14cm0gPHJlc291cmNlPlx0U2V0IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UiCittc2dzdHIgIi14cm0gPHJlc291cmNlPlx06K6+5a6a5oyH5a6a55qE6LWE5rqQIgorCisjOiBtYWluLmM6MjMzMAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChSSVNDIE9TIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbSDlj6/or4bliKvnmoTlj4LmlbAgKFJJU0MgT1Mg54mIKTpcbiIKKworIzogbWFpbi5jOjIzMzEKK21zZ2lkICItLWNvbHVtbnMgPG51bWJlcj5cdEluaXRpYWwgd2lkdGggb2Ygd2luZG93IGluIGNvbHVtbnMiCittc2dzdHIgIi0tY29sdW1ucyA8bnVtYmVyPlx056qX5Y+j5Yid5aeL5a695bqmIgorCisjOiBtYWluLmM6MjMzMgorbXNnaWQgIi0tcm93cyA8bnVtYmVyPlx0SW5pdGlhbCBoZWlnaHQgb2Ygd2luZG93IGluIHJvd3MiCittc2dzdHIgIi0tcm93cyA8bnVtYmVyPlx056qX5Y+j5Yid5aeL6auY5bqmIgorCisjOiBtYWluLmM6MjMzNQorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbSDlj6/or4bliKvnmoTlj4LmlbAgKEdUSysg54mIKTpcbiIKKworIzogbWFpbi5jOjIzMzkKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IChhbHNvOiAtLWRpc3BsYXkpIgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdOWcqCA8ZGlzcGxheT4g5omn6KGMIHZpbSAo5Lmf5Y+v55SoIC0tZGlzcGxheSkiCisKKyM6IG1haW4uYzoyMzQxCittc2dpZCAiLS1oZWxwXHRcdFNob3cgR25vbWUgYXJndW1lbnRzIgorbXNnc3RyICItLWhlbHBcdFx05pi+56S6IEdub21lIOebuOWFs+WPguaVsCIKKworIy4gRmFpbGVkIHRvIHNlbmQsIGFib3J0LgorIzogbWFpbi5jOjI1NjYKK21zZ2lkICIiCisiXG4iCisiU2VuZCBmYWlsZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLlj5HpgIHooajovr7lvI/lpLHotKXjgIJcbiIKKworIy4gTGV0IHZpbSBzdGFydCBub3JtYWxseS4KKyM6IG1haW4uYzoyNTcxCittc2dpZCAiIgorIlxuIgorIlNlbmQgZmFpbGVkLiBUcnlpbmcgdG8gZXhlY3V0ZSBsb2NhbGx5XG4iCittc2dzdHIgIiIKKyJcbiIKKyLpgIHlh7rlpLHotKXjgILor5Xlm77lnKjmnKzlnLDmiafooYxcbiIKKworIzogbWFpbi5jOjI2MDQgbWFpbi5jOjI2MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgb2YgJWQgZWRpdGVkIgorbXNnc3RyICIlZCDkuK0gJWQg5bey57yW6L6RIgorCisjOiBtYWluLmM6MjY0OAorbXNnaWQgIlNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIuWPkemAgeihqOi+vuW8j+Wksei0peOAglxuIgorCisjOiBtYXJrLmM6NjU1Cittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICLmsqHmnInorr7lrprmoIforrAgKG1hcmspIgorCisjOiBtYXJrLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4Mzog5om+5LiN5Yiw56ym5ZCIIFwiJXNcIiDnmoTmoIforrAobWFyaykiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjY2OAorbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyLmoIforrAg6KGM5Y+3ICDliJcgIOaWh+S7ti/mlofmnKwiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjcwNgorbXNnaWQgIiIKKyJcbiIKKyIganVtcCBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiIOi3s+WIsCDooYzlj7cgIOWIlyAg5paH5Lu2L+aWh+acrCIKKworIzogbWFyay5jOjEwNjgKK21zZ2lkICIiCisiXG4iCisiIyBGaWxlIG1hcmtzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDmlofku7bmoIforrA6XG4iCisKKyMuIFdyaXRlIHRoZSBqdW1wbGlzdCB3aXRoIC0nCisjOiBtYXJrLmM6MTEwMworbXNnaWQgIiIKKyJcbiIKKyIjIEp1bXBsaXN0IChuZXdlc3QgZmlyc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyBKdW1wbGlzdCAo5LuO5paw5Yiw5penKTpcbiIKKworIzogbWFyay5jOjExOTgKK21zZ2lkICIiCisiXG4iCisiIyBIaXN0b3J5IG9mIG1hcmtzIHdpdGhpbiBmaWxlcyAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIOaWh+S7tuWGheWOhuWPsuiusOW9lSAo5LuO5paw5Yiw5penKTpcbiIKKworIzogbWFyay5jOjEyODEKK21zZ2lkICJNaXNzaW5nICc+JyIKK21zZ3N0ciAi57y65bCR5a+55bqU55qEICc+JyIKKworIzogbWJ5dGUuYzozOTUKK21zZ2lkICJOb3QgYSB2YWxpZCBjb2RlcGFnZSIKK21zZ3N0ciAi5LiN5q2j56Gu55qE5Luj56CB6aG1IgorCisjOiBtYnl0ZS5jOjMwMDUKK21zZ2lkICJFMjg0OiBDYW5ub3Qgc2V0IElDIHZhbHVlcyIKK21zZ3N0ciAiRTI4NDog5LiN6IO96K6+5a6aIElDIOaVsOWAvCIKKworIzogbWJ5dGUuYzozMTU3Cittc2dpZCAiRTI4NTogRmFpbGVkIHRvIGNyZWF0ZSBpbnB1dCBjb250ZXh0IgorbXNnc3RyICJFMjg1OiDkuI3og73liJvlu7rovpPlhaXkuIrkuIvmlociCisKKyM6IG1ieXRlLmM6MzMwNAorbXNnaWQgIkUyODY6IEZhaWxlZCB0byBvcGVuIGlucHV0IG1ldGhvZCIKK21zZ3N0ciAiRTI4Njog5LiN6IO95omT5byA6L6T5YWl5rOVIgorCisjOiBtYnl0ZS5jOjMzMTUKK21zZ2lkICJFMjg3OiBXYXJuaW5nOiBDb3VsZCBub3Qgc2V0IGRlc3Ryb3kgY2FsbGJhY2sgdG8gSU0iCittc2dzdHIgIkUyODc6IOitpuWRijog5LiN6IO956e76ZmkIElNIOeahCBjYWxsYmFjayIKKworIzogbWJ5dGUuYzozMzIxCittc2dpZCAiRTI4ODogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgc3R5bGUiCittc2dzdHIgIkUyODg6IOi+k+WFpeazleS4jeaUr+aMgeS7u+S9lSBzdHlsZSIKKworIzogbWJ5dGUuYzozMzc4Cittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IOi+k+WFpeazleS4jeaUr+aMgeS7u+S9lSBzdHlsZSIKKworIzogbWJ5dGUuYzozNDUyCittc2dpZCAiRTI5MDogb3Zlci10aGUtc3BvdCBzdHlsZSByZXF1aXJlcyBmb250c2V0IgorbXNnc3RyICJFMjkwOiBvdmVyLXRoZS1zcG90IOmcgOimgeWtl+S9k+mbhihGb250c2V0KSIKKworIzogbWJ5dGUuYzozNDgwCittc2dpZCAiRTI5MTogWW91ciBHVEsrIGlzIG9sZGVyIHRoYW4gMS4yLjMuIFN0YXR1cyBhcmVhIGRpc2FibGVkIgorbXNnc3RyICJFMjkxOiDkvaDnmoQgR1RLKyDmr5QgMS4yLjMg6ICB44CC5LiN6IO95L2/55So54q25oCB5Yy644CCIgorCisjOiBtYnl0ZS5jOjM3MTcKK21zZ2lkICJFMjkyOiBJbnB1dCBNZXRob2QgU2VydmVyIGlzIG5vdCBydW5uaW5nIgorbXNnc3RyICJFMjkyOiDovpPlhaXms5XnrqHnkIbnqIvluo8oSW5wdXQgTWV0aG9kIFNlcnZlcinmnKrov5DooYwiCisKKyM6IG1lbWZpbGUuYzo0NzMKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5Mzog5Z2X5pyq6KKr6ZSB5a6aIgorCisjOiBtZW1maWxlLmM6OTcyCittc2dpZCAiRTI5NDogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgcmVhZCIKK21zZ3N0ciAiRTI5NDog5Lqk5o2i5paH5Lu26K+75Y+W6ZSZ6K+vIgorCisjOiBtZW1maWxlLmM6OTc3Cittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IOS6pOaNouaWh+S7tuivu+WPlumUmeivryIKKworIzogbWVtZmlsZS5jOjEwMjkKK21zZ2lkICJFMjk2OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIKK21zZ3N0ciAiRTI5Njog5Lqk5o2i5paH5Lu25YaZ5YWl6ZSZ6K+vIgorCisjOiBtZW1maWxlLmM6MTA0NworbXNnaWQgIkUyOTc6IFdyaXRlIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5Nzog5Lqk5o2i5paH5Lu25YaZ5YWl6ZSZ6K+vIgorCisjOiBtZW1maWxlLmM6MTI0NAorbXNnaWQgIkUzMDA6IFN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyAoc3ltbGluayBhdHRhY2s/KSIKK21zZ3N0ciAiRTMwMDog5Lqk5o2i5paH5Lu25bey57uP5a2Y5ZyoISAo5bCP5b+D56ym5Y+36L+e57uT55qE5a6J5YWo5ryP5rSeIT8pIgorCisjOiBtZW1saW5lLmM6Mjc1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIKK21zZ3N0ciAiRTI5ODog5om+5LiN5Yiw5Z2XIDA/IgorCisjOiBtZW1saW5lLmM6MzE1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAxPyIKK21zZ3N0ciAiRTI5ODog5om+5LiN5Yiw5Z2XIDE/IgorCisjOiBtZW1saW5lLmM6MzMzCittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAyPyIKK21zZ3N0ciAiRTI5ODog5om+5LiN5Yiw5Z2XIDI/IgorCisjLiBjb3VsZCBub3QgKHJlKW9wZW4gdGhlIHN3YXAgZmlsZSwgd2hhdCBjYW4gd2UgZG8/Pz8/CisjOiBtZW1saW5lLmM6NDQzCittc2dpZCAiRTMwMTogT29wcywgbG9zdCB0aGUgc3dhcCBmaWxlISEhIgorbXNnc3RyICJFMzAxOiDlmaLlmaIsIOS6pOaNouaWh+S7tuS4jeingeS6hiEhISIKKworIzogbWVtbGluZS5jOjQ0OAorbXNnaWQgIkUzMDI6IENvdWxkIG5vdCByZW5hbWUgc3dhcCBmaWxlIgorbXNnc3RyICJFMzAyOiDkuI3og73mlLnlj5jkuqTmjaLmlofku7bnmoTlkI3np7AiCisKKyM6IG1lbWxpbmUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwMzogVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciBcIiVzXCIsIHJlY292ZXJ5IGltcG9zc2libGUiCittc2dzdHIgIkUzMDM6IOS4jeiDveaJk+W8gOS6pOaNouaWh+S7tiBcIiVzXCIsIOS4jeWPr+iDveaBouWkjeS6hiIKKworIzogbWVtbGluZS5jOjYxNworbXNnaWQgIkUzMDQ6IG1sX3RpbWVzdGFtcDogRGlkbid0IGdldCBibG9jayAwPz8iCittc2dzdHIgIkUzMDQ6IG1sX3RpbWVzdGFtcDog5om+5LiN5Yiw5Z2XIDA/PyIKKworIzogbWVtbGluZS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA1OiBObyBzd2FwIGZpbGUgZm91bmQgZm9yICVzIgorbXNnc3RyICJFMzA1OiDmib7kuI3liLAgJXMg55qE5Lqk5o2i5paH5Lu2IgorCisjOiBtZW1saW5lLmM6NzY3Cittc2dpZCAiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIKK21zZ3N0ciAi6K+36YCJ5oup5L2g6KaB5L2/55So55qE5Lqk5o2i5paH5Lu2ICjmjIkwIOmAgOWHuik6ICIKKworIzogbWVtbGluZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA2OiBDYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiRTMwNjog5LiN6IO95omT5byAICVzIgorCisjOiBtZW1saW5lLmM6ODM0Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgYmxvY2sgMCBmcm9tICIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5Z2XIDA6IgorCisjOiBtZW1saW5lLmM6ODM3Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIuWPr+iDveS9oOayoeWBmui/h+S7u+S9leS/ruaUueaIluaYryBWaW0g6L+Y5p2l5LiN5Y+K5pu05paw5Lqk5o2i5paH5Lu2LiIKKworIzogbWVtbGluZS5jOjg0NyBtZW1saW5lLmM6ODY0Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiIOS4jeiDveWcqOacrOeJiOacrOeahCBWaW0g5Lit5L2/55SoLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAi5L2/55SoIFZpbSAzLjDjgIJcbiIKKworIzogbWVtbGluZS5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA3OiAlcyBkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlIgorbXNnc3RyICJFMzA3OiAlcyDnnIvotbfmnaXkuI3lg4/mmK8gVmltIOS6pOaNouaWh+S7tiIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIg5LiN6IO95Zyo6L+Z5Y+w55S16ISR5LiK5L2/55SoLlxuIgorCisjOiBtZW1saW5lLmM6ODcwCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICLmnKzmlofku7bliJvlu7rkuo4gIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyLmiJbmmK/ov5nmlofku7blt7LooqvnoLTlnY/jgIIiCisKKyM6IG1lbWxpbmUuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgc3dhcCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAi5L2/55So5Lqk5o2i5paH5Lu2IFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJPcmlnaW5hbCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAi5Y6f5paH5Lu2IFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkzNAorbXNnaWQgIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIgorbXNnc3RyICJFMzA4OiDorablkYo6IOWOn+Wni+aWh+S7tuWPr+iDveW3sue7j+S/ruaUuei/h+S6hiIKKworIzogbWVtbGluZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6IOS4jeiDveS7jiAlcyDor7vlj5blnZcgMSIKKworIzogbWVtbGluZS5jOjk3OQorbXNnaWQgIj8/P01BTlkgTElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/57y65bCR5aSq5aSa6KGMIgorCisjOiBtZW1saW5lLmM6OTk1Cittc2dpZCAiPz8/TElORSBDT1VOVCBXUk9ORyIKK21zZ3N0ciAiPz8/6KGM5Y+36ZSZ6K+vIgorCisjOiBtZW1saW5lLmM6MTAwMgorbXNnaWQgIj8/P0VNUFRZIEJMT0NLIgorbXNnc3RyICI/Pz/nqbrnmoQg5Z2XIgorCisjOiBtZW1saW5lLmM6MTAyOAorbXNnaWQgIj8/P0xJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P+aJvuS4jeWIsOS4gOS6m+ihjCIKKworIzogbWVtbGluZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxMDogQmxvY2sgMSBJRCB3cm9uZyAoJXMgbm90IGEgLnN3cCBmaWxlPykiCittc2dzdHIgIkUzMTA6IOWdlyAxIElEIOmUmeivryAoJXMg5LiN5piv5Lqk5o2i5paH5Lu2PykiCisKKyM6IG1lbWxpbmUuYzoxMDY1Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/5om+5LiN5Yiw5Z2XIgorCisjOiBtZW1saW5lLmM6MTA4MQorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBiZSBtZXNzZWQgdXAiCittc2dzdHIgIj8/PyDku47ov5nph4zliLAgPz8/RU5EIOeahOWGheWuueWPr+iDveaciemXrumimCIKKworIzogbWVtbGluZS5jOjEwOTcKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiCittc2dzdHIgIj8/PyDku47ov5nph4zliLAgPz8/RU5EIOeahOWGheWuueWPr+iDveiiq+WIoOmZpC/mj5LlhaXov4ciCisKKyM6IG1lbWxpbmUuYzoxMTE3Cittc2dpZCAiPz8/RU5EIgorbXNnc3RyICI/Pz9FTkQiCisKKyM6IG1lbWxpbmUuYzoxMTQzCittc2dpZCAiRTMxMTogUmVjb3ZlcnkgSW50ZXJydXB0ZWQiCittc2dzdHIgIkUzMTE6IOaBouWkjeW3suS4reaWrSIKKworIzogbWVtbGluZS5jOjExNDUKK21zZ2lkICIiCisiRTMxMjogRXJyb3JzIGRldGVjdGVkIHdoaWxlIHJlY292ZXJpbmc7IGxvb2sgZm9yIGxpbmVzIHN0YXJ0aW5nIHdpdGggPz8/IgorbXNnc3RyICJFMzEyOiDmgaLlpI3ml7blj5HnlJ/plJnor687IOivt+azqOaEj+W8gOWktOS4uiA/Pz8g55qE6KGMIgorCisjOiBtZW1saW5lLmM6MTE0OAorbXNnaWQgIlJlY292ZXJ5IGNvbXBsZXRlZC4gWW91IHNob3VsZCBjaGVjayBpZiBldmVyeXRoaW5nIGlzIE9LLiIKK21zZ3N0ciAi5oGi5aSN5a6M5oiQLiDor7fnoa7lrprkuIDliIfmraPluLguIgorCisjOiBtZW1saW5lLmM6MTE0OQorbXNnaWQgIiIKKyJcbiIKKyIoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWVcbiIKK21zZ3N0ciAiIgorIlxuIgorIijkvaDlj6/og73mg7PopoHmiorov5nkuKrmlofku7blj6blrZjkuLrliKvnmoTmlofku7blkI3vvIxcbiIKKworIzogbWVtbGluZS5jOjExNTAKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAi5YaN5omn6KGMIGRpZmYg5LiO5Y6f5paH5Lu25q+U6L6D5Lul5qOA5p+l5piv5ZCm5pyJ5pS55Y+YKVxuIgorCisjOiBtZW1saW5lLmM6MTE1MQorbXNnaWQgIiIKKyJEZWxldGUgdGhlIC5zd3AgZmlsZSBhZnRlcndhcmRzLlxuIgorIlxuIgorbXNnc3RyICIiCisiKEQp55u05o6l5Yig6ZmkIC5zd3Ag5Lqk5o2i5paH5Lu2XG4iCisiXG4iCisKKyMuIHVzZSBtc2coKSB0byBzdGFydCB0aGUgc2Nyb2xsaW5nIHByb3Blcmx5CisjOiBtZW1saW5lLmM6MTIwNworbXNnaWQgIlN3YXAgZmlsZXMgZm91bmQ6IgorbXNnc3RyICLmib7liLDku6XkuIvnmoTkuqTmjaLmlofku7Y6IgorCisjOiBtZW1saW5lLmM6MTM4NQorbXNnaWQgIiAgIEluIGN1cnJlbnQgZGlyZWN0b3J5OlxuIgorbXNnc3RyICIgICDlnKjnm67liY3nm67lvZU6XG4iCisKKyM6IG1lbWxpbmUuYzoxMzg3Cittc2dpZCAiICAgVXNpbmcgc3BlY2lmaWVkIG5hbWU6XG4iCittc2dzdHIgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorCisjOiBtZW1saW5lLmM6MTM5MQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgIOWcqOebruW9lSAiCisKKyM6IG1lbWxpbmUuYzoxNDA5Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgICAtLSDml6AgLS1cbiIKKworIzogbWVtbGluZS5jOjE0ODEKK21zZ2lkICIgICAgICAgICAgb3duZWQgYnk6ICIKK21zZ3N0ciAiICAgICAgICAgICAg5omA5pyJ6ICFOiAiCisKKyM6IG1lbWxpbmUuYzoxNDgzCittc2dpZCAiICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgIOaXpeacnzogIgorCisjOiBtZW1saW5lLmM6MTQ4NyBtZW1saW5lLmM6MzY4MAorbXNnaWQgIiAgICAgICAgICAgICBkYXRlZDogIgorbXNnc3RyICIgICAgICAgICAgICAgIOaXpeacnzogIgorCisjOiBtZW1saW5lLmM6MTUwMworbXNnaWQgIiAgICAgICAgIFtmcm9tIFZpbSB2ZXJzaW9uIDMuMF0iCittc2dzdHIgIiAgICAgICAgICAgICAgW+S7jiBWaW0g54mI5pysIDMuMF0iCisKKyM6IG1lbWxpbmUuYzoxNTA3Cittc2dpZCAiICAgICAgICAgW2RvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGVdIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgIFvkuI3lg48gVmltIOeahOS6pOaNouaWh+S7tl0iCisKKyM6IG1lbWxpbmUuYzoxNTExCittc2dpZCAiICAgICAgICAgZmlsZSBuYW1lOiAiCittc2dzdHIgIiAgICAgICAgICAgICAg5paH5Lu25ZCNOiAiCisKKyM6IG1lbWxpbmUuYzoxNTIzCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgICBtb2RpZmllZDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgICAg5L+u5pS56L+HOiAiCisKKyM6IG1lbWxpbmUuYzoxNTI0Cittc2dpZCAiWUVTIgorbXNnc3RyICLmmK8iCisKKyM6IG1lbWxpbmUuYzoxNTI0Cittc2dpZCAibm8iCittc2dzdHIgIuWQpiIKKworIzogbWVtbGluZS5jOjE1MjgKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgdXNlciBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgICDnlKjmiLflkI06ICIKKworIzogbWVtbGluZS5jOjE1MzUKK21zZ2lkICIgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiICAgICAg5Li75py65ZCNOiAiCisKKyM6IG1lbWxpbmUuYzoxNTM3Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgICAg5Li75py65ZCNOiAiCisKKyM6IG1lbWxpbmUuYzoxNTQzCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgICDov5vnqIsgSUQ6ICIKKworIzogbWVtbGluZS5jOjE1NDkKK21zZ2lkICIgKHN0aWxsIHJ1bm5pbmcpIgorbXNnc3RyICIgKOato+WcqOaJp+ihjCkiCisKKyM6IG1lbWxpbmUuYzoxNTYxCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBb5LiN6IO95Zyo5pys54mI5pys55qEIFZpbSDkuIrkvb/nlKhdIgorCisjOiBtZW1saW5lLmM6MTU2NAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSBvbiB0aGlzIGNvbXB1dGVyXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFvkuI3og73lnKjmnKzmnLrkuIrkvb/nlKhdIgorCisjOiBtZW1saW5lLmM6MTU2OQorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iCittc2dzdHIgIiAgICAgICAgIFvkuI3og73or7vlj5ZdIgorCisjOiBtZW1saW5lLmM6MTU3MworbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgb3BlbmVkXSIKK21zZ3N0ciAiICAgICAgICAgW+S4jeiDveaJk+W8gF0iCisKKyM6IG1lbWxpbmUuYzoxNzYzCittc2dpZCAiRTMxMzogQ2Fubm90IHByZXNlcnZlLCB0aGVyZSBpcyBubyBzd2FwIGZpbGUiCittc2dzdHIgIkUzMTM6IOS4jeiDveS/neeVmSwg5LiN5L2/55So5Lqk5o2i5paH5Lu2IgorCisjOiBtZW1saW5lLmM6MTgxNgorbXNnaWQgIkZpbGUgcHJlc2VydmVkIgorbXNnc3RyICLmlofku7blt7Lkv53nlZkiCisKKyM6IG1lbWxpbmUuYzoxODE4Cittc2dpZCAiRTMxNDogUHJlc2VydmUgZmFpbGVkIgorbXNnc3RyICJFMzE0OiDkv53nlZnlpLHotKUiCisKKyM6IG1lbWxpbmUuYzoxODg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTU6IG1sX2dldDogaW52YWxpZCBsbnVtOiAlbGQiCittc2dzdHIgIkUzMTU6IG1sX2dldDog6ZSZ6K+v55qEIGxudW06ICVsZCIKKworIzogbWVtbGluZS5jOjE5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNjogbWxfZ2V0OiBjYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMxNjogbWxfZ2V0OiDmib7kuI3liLDnrKwgJWxkIOihjCIKKworIzogbWVtbGluZS5jOjIzMDMKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDMiCittc2dzdHIgIkUzMTc6IOaMh+mSiOWdlyBpZCDplJnor68gMyIKKworIzogbWVtbGluZS5jOjIzODMKK21zZ2lkICJzdGFja19pZHggc2hvdWxkIGJlIDAiCittc2dzdHIgInN0YWNrX2lkeCDlupTor6XmmK8gMCIKKworIzogbWVtbGluZS5jOjI0NDUKK21zZ2lkICJFMzE4OiBVcGRhdGVkIHRvbyBtYW55IGJsb2Nrcz8iCittc2dzdHIgIkUzMTg6IOabtOaWsOWkquWkmuWdlz8iCisKKyM6IG1lbWxpbmUuYzoyNjAyCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiDmjIfpkojlnZcgaWQg6ZSZ6K+vIDQiCisKKyM6IG1lbWxpbmUuYzoyNjI5Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAi5Yig6Zmk5Z2XIDE/IgorCisjOiBtZW1saW5lLmM6MjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIwOiBDYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMyMDog5om+5LiN5Yiw56ysICVsZCDooYwiCisKKyM6IG1lbWxpbmUuYzozMDcyCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyIKK21zZ3N0ciAiRTMxNzog5oyH6ZKI5Z2XIGlkIOmUmeivryIKKworIzogbWVtbGluZS5jOjMwODgKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgInBlX2xpbmVfY291bnQg5Li66Zu2IgorCisjOiBtZW1saW5lLmM6MzExNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzIyOiBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVsZCBwYXN0IHRoZSBlbmQiCittc2dzdHIgIkUzMjI6IOihjOWPt+i2heWHuuiMg+WbtDogJWxkIOi2hei/h+e7k+WwviIKKworIzogbWVtbGluZS5jOjMxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMzogbGluZSBjb3VudCB3cm9uZyBpbiBibG9jayAlbGQiCittc2dzdHIgIkUzMjM6IOWdlyAlbGQg6KGM5pWw6ZSZ6K+vIgorCisjOiBtZW1saW5lLmM6MzE3MAorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICLloIbmoIjlpKflsI/lop7liqAiCisKKyM6IG1lbWxpbmUuYzozMjE2Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAyIgorbXNnc3RyICJFMzE3OiDmjIfpkojlnZcgaWQg6ZSZIDIiCisKKyM6IG1lbWxpbmUuYzozNjcwCittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiDms6jmhI8iCisKKyM6IG1lbWxpbmUuYzozNjcxCittc2dpZCAiIgorIlxuIgorIkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIgorbXNnc3RyICIiCisiXG4iCisi5Y+R546w5Lqk5o2i5paH5Lu2IFwiIgorCisjOiBtZW1saW5lLmM6MzY3NQorbXNnaWQgIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIKK21zZ3N0ciAi5b2T5omT5byA5paH5Lu25pe2IFwiIgorCisjOiBtZW1saW5lLmM6MzY4NAorbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICAgICDmr5TkuqTmjaLmlofku7bmlrAhXG4iCisKKyMuIFNvbWUgb2YgdGhlc2UgbWVzc2FnZXMgYXJlIGxvbmcgdG8gYWxsb3cgdHJhbnNsYXRpb24gdG8KKyMuICogb3RoZXIgbGFuZ3VhZ2VzLgorIzogbWVtbGluZS5jOjM2ODgKK21zZ2lkICIiCisiXG4iCisiKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLlxuIgorIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d29cbiIKKyIgICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMSkg5Y+v6IO95pyJ5Y+m5LiA5Liq56iL5bqP5Lmf5Zyo57yW6L6R5ZCM5LiA5Liq5paH5Lu2LlxuIgorIiAgICDlpoLmnpzmmK/ov5nmoLfvvIzor7fms6jmhI/kuI3opoHkuIDotbflhpnlhaXvvIzkuI3nhLbkvaDnmoTliqrlipvpg73kvJrku5jor7jkuJzmtYHjgIJcbiIKKworIzogbWVtbGluZS5jOjM2ODkKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAg6YCA5Ye677yM5oiW5piv57un57ut57yW6L6R44CCXG4iCisKKyM6IG1lbWxpbmUuYzozNjkwCittc2dpZCAiIgorIlxuIgorIigyKSBBbiBlZGl0IHNlc3Npb24gZm9yIHRoaXMgZmlsZSBjcmFzaGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDIpIOS4iuS4gOasoee8lui+keatpOaWh+S7tuaXtuW0qea6g1xuIgorCisjOiBtZW1saW5lLmM6MzY5MQorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIOWmguaenOaYr+i/meagtywg6K+355SoIFwiOnJlY292ZXJcIiDmiJYgXCJ2aW0gLXIiCisKKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAg5oGi5aSN5L+u5pS55YaF5a65ICjov5vkuIDmraXor7TmmI7or7fnnIsgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKKworIzogbWVtbGluZS5jOjM2OTQKK21zZ2lkICIgICAgSWYgeW91IGRpZCB0aGlzIGFscmVhZHksIGRlbGV0ZSB0aGUgc3dhcCBmaWxlIFwiIgorbXNnc3RyICIgICAg5aaC5p6c6K+l5oGi5aSN55qE6YO95bey57uP5oGi5aSN5LqGLCDor7fnm7TmjqXliKDpmaTmraTkuqTmjaLmlofku7YgXCIiCisKKyM6IG1lbWxpbmUuYzozNjk2Cittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIGF2b2lkIHRoaXMgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIOS7pemBv+WFjeWGjeeci+WIsOatpOS/oeaBry5cbiIKKworIzogbWVtbGluZS5jOjM3MTAgbWVtbGluZS5jOjM3MTQKK21zZ2lkICJTd2FwIGZpbGUgXCIiCittc2dzdHIgIuS6pOaNouaWh+S7tiBcIiIKKworIzogbWVtbGluZS5jOjM3MTEgbWVtbGluZS5jOjM3MTcKK21zZ2lkICJcIiBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlwiIOW3sue7j+WtmOWcqOS6hiEiCisKKyM6IG1lbWxpbmUuYzozNzIwCittc2dpZCAiVklNIC0gQVRURU5USU9OIgorbXNnc3RyICJWSU0gLSDms6jmhI8iCisKKyM6IG1lbWxpbmUuYzozNzIyCittc2dpZCAiU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAi5Lqk5o2i5paH5Lu25bey57uP5a2Y5ZyoISIKKworIzogbWVtbGluZS5jOjM3MjYKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdCIKK21zZ3N0ciAiIgorIuS7peWPquivu+aWueW8j+aJk+W8gCgmTylcbiIKKyLnm7TmjqXnvJbovpEoJkUpXG4iCisi5oGi5aSNKCZSKVxuIgorIumAgOWHuigmUSkiCisKKyM6IG1lbWxpbmUuYzozNzI4Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisi5Lul5Y+q6K+75pa55byP5omT5byAKCZPKVxuIgorIuebtOaOpee8lui+kSgmRSlcbiIKKyLmgaLlpI0oJlIpXG4iCisi6YCA5Ye6KCZRKVxuIgorIuWIoOmZpOS6pOaNouaWh+S7tigmRCkiCisKKyM6IG1lbWxpbmUuYzozNzgxCittc2dpZCAiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIKK21zZ3N0ciAiRTMyNjog5om+5Yiw5aSq5aSa5Lqk5o2i5paH5Lu2IgorCisjOiBtZW51LmM6NjQKK21zZ2lkICJFMzI3OiBQYXJ0IG9mIG1lbnUtaXRlbSBwYXRoIGlzIG5vdCBzdWItbWVudSIKK21zZ3N0ciAiRTMyNzog6YOo5Lu96I+c5Y2V6aG55LiN5piv5a2Q6I+c5Y2VIgorCisjOiBtZW51LmM6NjUKK21zZ2lkICJFMzI4OiBNZW51IG9ubHkgZXhpc3RzIGluIGFub3RoZXIgbW9kZSIKK21zZ3N0ciAiRTMyODog6I+c5Y2V5Y+q6IO95Zyo5YW25a6D5qih5byP5Lit5L2/55SoIgorCisjOiBtZW51LmM6NjYKK21zZ2lkICJFMzI5OiBObyBtZW51IG9mIHRoYXQgbmFtZSIKK21zZ3N0ciAiRTMyOTog5rKh5pyJ6YKj5qC355qE6I+c5Y2VIgorCisjOiBtZW51LmM6NTAzCittc2dpZCAiRTMzMDogTWVudSBwYXRoIG11c3Qgbm90IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzMDog6I+c5Y2V5LiN6IO95oyH5ZCR5a2Q6YCJ5Y2VIgorCisjOiBtZW51LmM6NTQyCittc2dpZCAiRTMzMTogTXVzdCBub3QgYWRkIG1lbnUgaXRlbXMgZGlyZWN0bHkgdG8gbWVudSBiYXIiCittc2dzdHIgIkUzMzE6IOS4jeiDveebtOaOpeaKiuiPnOWNlemhueWKoOWIsOiPnOWNleadoeS4rSIKKworIzogbWVudS5jOjU0OAorbXNnaWQgIkUzMzI6IFNlcGFyYXRvciBjYW5ub3QgYmUgcGFydCBvZiBhIG1lbnUgcGF0aCIKK21zZ3N0ciAiRTMzMjog5YiG6ZqU57q/5LiN6IO95piv6I+c5Y2V55qE5LiA6YOo5YiGIgorCisjLiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgbWVudSwgYW5kIHdlIGxpc3QgdGhlIG1hcHBpbmdzCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1lbnUuYzoxMDYzCittc2dpZCAiIgorIlxuIgorIi0tLSBNZW51cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g6I+c5Y2VIC0tLSIKKworIzogbWVudS5jOjE5ODkKK21zZ2lkICJUZWFyIG9mZiB0aGlzIG1lbnUiCittc2dzdHIgIuWIh+S4i+atpOiPnOWNlSIKKworIzogbWVudS5jOjIwNTQKK21zZ2lkICJFMzMzOiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgbWVudSBpdGVtIgorbXNnc3RyICJFMzMzOiDoj5zljZXlv4XpnIDmjIflkJHkuIDkuKroj5zljZXpobkiCisKKyM6IG1lbnUuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzQ6IE1lbnUgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTMzNDogW+iPnOWNlV0g5om+5LiN5YiwICVzIgorCisjOiBtZW51LmM6MjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzM1OiBNZW51IG5vdCBkZWZpbmVkIGZvciAlcyBtb2RlIgorbXNnc3RyICJFMzM1OiAlcyDmqKHlvI/mnKrlrprkuYnoj5zljZUiCisKKyM6IG1lbnUuYzoyMTgxCittc2dpZCAiRTMzNjogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzM2OiDoj5zljZXlv4XpnIDmjIflkJHlrZDoj5zljZUiCisKKyM6IG1lbnUuYzoyMjAyCittc2dpZCAiRTMzNzogTWVudSBub3QgZm91bmQgLSBjaGVjayBtZW51IG5hbWVzIgorbXNnc3RyICJFMzM3OiDmib7kuI3liLDoj5zljZUgLSDor7fmo4Dmn6Xoj5zljZXlkI3np7AiCisKKyM6IG1lc3NhZ2UuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZyAlczoiCittc2dzdHIgIuWkhOeQhiAlcyDml7blj5HnlJ/plJnor686IgorCisjOiBtZXNzYWdlLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJTRsZDoiCittc2dzdHIgIuihjCAlNGxkOiIKKworIzogbWVzc2FnZS5jOjUyMworbXNnaWQgIltzdHJpbmcgdG9vIGxvbmddIgorbXNnc3RyICJb5a2X56ym5Liy5aSq6ZW/XSIKKworIzogbWVzc2FnZS5jOjY2OQorbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorbXNnc3RyICLnroDkvZPkuK3mlofkv6Hmga/nu7TmiqTogIU6IFdhbmcgSnVuIDxqdW53QHR1cmJvbGludXguY29tLmNuPiIKKworIzogbWVzc2FnZS5jOjg4MQorbXNnaWQgIkludGVycnVwdDogIgorbXNnc3RyICLlt7LkuK3mlq06ICIKKworIzogbWVzc2FnZS5jOjg4NAorbXNnaWQgIkhpdCBFTlRFUiB0byBjb250aW51ZSIKK21zZ3N0ciAi6K+35oyJIEVOVEVSIOe7p+e7rSIKKworIzogbWVzc2FnZS5jOjg4NgorbXNnaWQgIkhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUiCittc2dzdHIgIuivt+aMiSBFTlRFUiDmiJblhbblroPlkb3ku6Tnu6fnu60iCisKKyM6IG1lc3NhZ2UuYzoxOTQwCittc2dpZCAiLS0gTW9yZSAtLSIKK21zZ3N0ciAiLS0g5pu05aSaIC0tIgorCisjOiBtZXNzYWdlLmM6MTk0MworbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiDlkJHkuIsv5ZCR5LiK5LiA6KGMLCDnqbrmoLwvYjog5LiA6aG1LCBkL3U6IOWNiumhtSwgcTog6YCA5Ye6KSIKKworIzogbWVzc2FnZS5jOjE5NDQKK21zZ2lkICIgKFJFVDogbGluZSwgU1BBQ0U6IHBhZ2UsIGQ6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUOiDlkJHkuIvkuIDooYwsIOepuueZvemUrjog5LiA6aG1LCBkOiDljYrpobUsIHE6IOmAgOWHuikiCisKKyM6IG1lc3NhZ2UuYzoyNDE5IG1lc3NhZ2UuYzoyNDM0Cittc2dpZCAiUXVlc3Rpb24iCittc2dzdHIgIumXrumimCIKKworIzogbWVzc2FnZS5jOjI0MjEKK21zZ2lkICIiCisiJlllc1xuIgorIiZObyIKK21zZ3N0ciAiIgorIiZZ5pivXG4iCisiJk7lkKYiCisKKyM6IG1lc3NhZ2UuYzoyNDM2Cittc2dpZCAiIgorIiZZZXNcbiIKKyImTm9cbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiJlnmmK9cbiIKKyImTuWQplxuIgorIiZD5Y+W5raIIgorCisjOiBtZXNzYWdlLmM6MjQ1NAorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZZ5pivXG4iCisiJk7lkKZcbiIKKyImQeWFqOmDqOS/neWtmFxuIgorIiZE5YWo6YOo5LiN5a2YXG4iCisiJkPlj5bmtogiCisKKyM6IG1lc3NhZ2UuYzoyNDk0Cittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAi5L+d5a2Y5paH5Lu25a+56K+d5qGGIgorCisjOiBtZXNzYWdlLmM6MjQ5NgorbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIuaJk+W8gOaWh+S7tuWvueivneahhiIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzoyNTQ3Cittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIkUzMzg6IOS4u+aOp+WPsChDb25zb2xlKeaooeW8j+aXtuayoeacieaWh+S7tua1j+iniOWZqChmaWxlIGJyb3dzZXIpIgorCisjOiBtaXNjMS5jOjI0NDkKK21zZ2lkICJXMTA6IFdhcm5pbmc6IENoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSIKK21zZ3N0ciAiVzEwOiDms6jmhI86IOS9oOato+WcqOS/ruaUueS4gOS4quWPquivu+aWh+S7tiIKKworIzogbWlzYzEuYzoyNjc4Cittc2dpZCAiMSBtb3JlIGxpbmUiCittc2dzdHIgIui/mOacieS4gOihjCIKKworIzogbWlzYzEuYzoyNjgwCittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgIuWwkeS6juS4gOihjCIKKworIzogbWlzYzEuYzoyNjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgorbXNnc3RyICIg6L+Y5pyJICVsZCDooYwiCisKKyM6IG1pc2MxLmM6MjY4NworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgZmV3ZXIgbGluZXMiCittc2dzdHIgIuWPquWJqSAlbGQg6KGMIgorCisjOiBtaXNjMS5jOjI2OTAKK21zZ2lkICIgKEludGVycnVwdGVkKSIKK21zZ3N0ciAiICjlt7LkuK3mlq0pIgorCisjOiBtaXNjMS5jOjYyNDQKK21zZ2lkICJWaW06IHByZXNlcnZpbmcgZmlsZXMuLi5cbiIKK21zZ3N0ciAiVmltOiDkv53nlZnmlofku7bkuK0uLi5cbiIKKworIy4gY2xvc2UgYWxsIG1lbWZpbGVzLCB3aXRob3V0IGRlbGV0aW5nCisjOiBtaXNjMS5jOjYyNTQKK21zZ2lkICJWaW06IEZpbmlzaGVkLlxuIgorbXNnc3RyICJWaW06IOe7k+adny5cbiIKKworIzogbWlzYzIuYzo2NDQgbWlzYzIuYzo2NjAKK21zZ2lkICJFUlJPUjogIgorbXNnc3RyICLplJnor686ICIKKworIzogbWlzYzIuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJbYnl0ZXNdIOWFqOmDqCBhbGxvYy1mcmVlZCAlbHUtJWx1LCDkvb/nlKjkuK0gJWx1LCBwZWFrIOS9v+eUqCAlbHVcbiIKKworIzogbWlzYzIuYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW+iwg+eUqF0g5YWo6YOoIHJlL21hbGxvYygpOiAlbHUsIOWFqOmDqCBmcmVlKCknOiAlbHVcbiIKKyJcbiIKKworIzogbWlzYzIuYzo3MjEKK21zZ2lkICJFMzQwOiBMaW5lIGlzIGJlY29taW5nIHRvbyBsb25nIgorbXNnc3RyICJFMzQwOiDmraTooYzov4fplb8iCisKKyM6IG1pc2MyLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDE6IEludGVybmFsIGVycm9yOiBsYWxsb2MoJWxkLCApIgorbXNnc3RyICJFMzQxOiDlhoXpg6jplJnor686IGxhbGxvYyglbGQsICkiCisKKyM6IG1pc2MyLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDI6IE91dCBvZiBtZW1vcnkhICAoYWxsb2NhdGluZyAlbHUgYnl0ZXMpIgorbXNnc3RyICJFMzQyOiDlhoXlrZjkuI3otrMhICjlsJ3or5XphY3nva4gJWx1IOWtl+iKgue7hCkiCisKKyM6IG1pc2MyLmM6MjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAi6LCD55SoIHNoZWxsIOaJp+ihjDogXCIlc1wiIgorCisjOiBtaXNjMi5jOjI3MDMgbWlzYzIuYzo1MTQyIG9wdGlvbi5jOjQ1ODQKK21zZ2lkICJNaXNzaW5nIGNvbG9uIgorbXNnc3RyICLnvLrlsJHlhpLlj7ciCisKKyM6IG1pc2MyLmM6MjcwNSBtaXNjMi5jOjI3MzIKK21zZ2lkICJJbGxlZ2FsIG1vZGUiCittc2dzdHIgIuS4jeato+ehrueahOaooeW8jyIKKworIzogbWlzYzIuYzoyNzcxCittc2dpZCAiSWxsZWdhbCBtb3VzZXNoYXBlIgorbXNnc3RyICLkuI3mraPnoa7nmoTpvKDmoIflvaLnirYiCisKKyM6IG1pc2MyLmM6MjgxMSBtaXNjMi5jOjUxNjIKK21zZ2lkICJkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAi5bqU6K+l5Li65pWw5a2XIgorCisjOiBtaXNjMi5jOjI4MTYKK21zZ2lkICJJbGxlZ2FsIHBlcmNlbnRhZ2UiCittc2dzdHIgIuS4jeato+ehrueahOeZvuWIhuavlCIKKworIzogbWlzYzIuYzozMTIwCittc2dpZCAiRW50ZXIgZW5jcnlwdGlvbiBrZXk6ICIKK21zZ3N0ciAi6L6T5YWl5a+G56CBOiAiCisKKyM6IG1pc2MyLmM6MzEyMQorbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIuivt+WGjei+k+WFpeS4gOasoTogIgorCisjOiBtaXNjMi5jOjMxMzEKK21zZ2lkICJLZXlzIGRvbid0IG1hdGNoISIKK21zZ3N0ciAi5Lik5qyh6L6T5YWl5a+G56CB5LiN5ZCMISIKKworIzogbWlzYzIuYzozNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICJFMzQzOiDkuI3mraPnoa7nmoTot6/lvoQ6ICcqKltudW1iZXJdJyDlv4XpnIDopoHlnKjot6/lvoTnu5PlsL7miJbopoHmjqXokZcgJyVzJyIKKworIzogbWlzYzIuYzo0ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IGNkcGF0aCDkuK3msqHmnInnm67lvZUgXCIlc1wiIgorCisjOiBtaXNjMi5jOjQ5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NTogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFMzQ1OiDlnKjot6/lvoTkuK3mib7kuI3liLDmlofku7YgXCIlc1wiIgorCisjOiBtaXNjMi5jOjQ5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NjogTm8gbW9yZSBkaXJlY3RvcnkgXCIlc1wiIGZvdW5kIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0Njog5Zyo6Lev5b6E5Lit5om+5LiN5Yiw5pu05aSa55qE5paH5Lu2IFwiJXNcIiIKKworIzogbWlzYzIuYzo0OTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDc6IE5vIG1vcmUgZmlsZSBcIiVzXCIgZm91bmQgaW4gcGF0aCIKK21zZ3N0ciAiRTM0Nzog5Zyo6Lev5b6E5Lit5om+5LiN5Yiw5pu05aSa55qE5paH5Lu2IFwiJXNcIiIKKworIzogbWlzYzIuYzo1MTU0Cittc2dpZCAiSWxsZWdhbCBjb21wb25lbnQiCittc2dzdHIgIuS4jeato+ehrueahOe7hOS7tiIKKworIzogbm9ybWFsLmM6Mjc5OAorbXNnaWQgIldhcm5pbmc6IHRlcm1pbmFsIGNhbm5vdCBoaWdobGlnaHQiCittc2dzdHIgIuazqOaEjzog5L2g55qE57uI56uv5LiN6IO95pi+56S66auY5Lqu5bqmIgorCisjOiBub3JtYWwuYzoyOTkzCittc2dpZCAiRTM0ODogTm8gc3RyaW5nIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0ODog5YWJ5qCH5aSE5rKh5pyJ5a2X56ym5LiyIgorCisjOiBub3JtYWwuYzoyOTk1Cittc2dpZCAiRTM0OTogTm8gaWRlbnRpZmllciB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDk6IOWFieagh+WkhOayoeacieivhuWIq+WtlyIKKworIzogbm9ybWFsLmM6NDE2MAorbXNnaWQgIkUzNTI6IENhbm5vdCBlcmFzZSBmb2xkcyB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUyOiDkuI3og73lnKjnm67liY3nmoQgJ2ZvbGRtZXRob2QnIOS4i+WIoOmZpCBmb2xkIgorCisjOiBvcHMuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgMSB0aW1lIgorbXNnc3RyICLkuIDooYwgJXMg6L+HIOS4gOasoSIKKworIzogb3BzLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICLkuIDooYwgJXMg6L+HICVkIOasoSIKKworIzogb3BzLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkIDEgdGltZSIKK21zZ3N0ciAiJWxkIOihjCAlcyDov4cg5LiA5qyhIgorCisjOiBvcHMuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgJWQgdGltZXMiCittc2dzdHIgIiVsZCDooYwgJXMg6L+HICVkIOasoSIKKworIzogb3BzLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB0byBpbmRlbnQuLi4gIgorbXNnc3RyICLor4bliKsgJWxkIOihjC4uLiIKKworIzogb3BzLmM6Njg4Cittc2dpZCAiMSBsaW5lIGluZGVudGVkICIKK21zZ3N0ciAi5LiA6KGM5bey6K+G5YirIgorCisjOiBvcHMuYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAi5bey6K+G5YirICVsZCDooYwiCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiBvcHMuYzoxNTI4Cittc2dpZCAiY2Fubm90IHlhbms7IGRlbGV0ZSBhbnl3YXkiCittc2dzdHIgIuS4jeiDveWkjeWItjsg55u05o6l5Yig6ZmkIgorCisjOiBvcHMuYzoyMDE4Cittc2dpZCAiMSBsaW5lIGNoYW5nZWQiCittc2dzdHIgIiAxIOihjCB+ZWQiCisKKyM6IG9wcy5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGNoYW5nZWQiCittc2dzdHIgIiAlbGQg6KGMIH5lZCIKKworIzogb3BzLmM6MjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmcmVlaW5nICVsZCBsaW5lcyIKK21zZ3N0ciAi6YeK5pS+ICVsZCDooYzkuK0iCisKKyM6IG9wcy5jOjI2NTgKK21zZ2lkICIxIGxpbmUgeWFua2VkIgorbXNnc3RyICLlt7LlpI3liLYgMSDooYwiCisKKyM6IG9wcy5jOjI2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHlhbmtlZCIKK21zZ3N0ciAi5bey5aSN5Yi2ICVsZCDooYwiCisKKyM6IG9wcy5jOjI5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1MzogTm90aGluZyBpbiByZWdpc3RlciAlcyIKK21zZ3N0ciAiRTM1Mzog5a+E5a2Y5ZmoICVzIOmHjOayoeacieS4nOilvyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBvcHMuYzozNDU0Cittc2dpZCAiIgorIlxuIgorIi0tLSBSZWdpc3RlcnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIOWvhOWtmOWZqCAtLS0iCisKKyM6IG9wcy5jOjQ1NjUKK21zZ2lkICJJbGxlZ2FsIHJlZ2lzdGVyIG5hbWUiCittc2dzdHIgIuS4jeato+ehrueahOWvhOWtmOWZqOWQjeensCIKKworIzogb3BzLmM6NDY0NQorbXNnaWQgIiIKKyJcbiIKKyIjIFJlZ2lzdGVyczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMg5a+E5a2Y5ZmoOlxuIgorCisjOiBvcHMuYzo0NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcmVnaXN0ZXIgdHlwZSAlZCIKK21zZ3N0ciAi5pyq55+l55qE5rOo5YaM57G75Z6LOiAlZCIKKworIzogb3BzLmM6NTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU0OiBJbnZhbGlkIHJlZ2lzdGVyIG5hbWU6ICclcyciCittc2dzdHIgIkUzNTQ6IOWvhOWtmOWZqOWQjeensOmUmeivrzogJyVzJyIKKworIzogb3BzLmM6NTM5MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgQ29sczsgIgorbXNnc3RyICIlbGQg5YiXOyAiCisKKyM6IG9wcy5jOjU0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VsZWN0ZWQgJXMlbGQgb2YgJWxkIExpbmVzOyAlbGQgb2YgJWxkIFdvcmRzOyAlbGQgb2YgJWxkIEJ5dGVzIgorbXNnc3RyICLpgInmi6nkuoYgJXMlbGQvJWxkIOihjDsgJWxkLyVsZCDlrZcoV29yZCk7ICVsZC8lbGQg5a2X56ymKEJ5dGVzKSIKKworIzogb3BzLmM6NTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiCittc2dzdHIgIuWIlyAlcy8lczsg6KGMICVsZC8lbGQ7IOWtlyhXb3JkKSAlbGQvJWxkOyDlrZfnrKYoQnl0ZSkgJWxkLyVsZCIKKworIzogb3BzLmM6NTQyNworIywgYy1mb3JtYXQKK21zZ2lkICIoKyVsZCBmb3IgQk9NKSIKK21zZ3N0ciAiKCslbGQgZm9yIEJPTSkiCisKKyM6IG9wdGlvbi5jOjE5ODkKK21zZ2lkICJUaGFua3MgZm9yIGZseWluZyBWaW0iCittc2dzdHIgIuaEn+iwouaCqOmAieaLqSBWaW0iCisKKyM6IG9wdGlvbi5jOjMxNzUKK21zZ2lkICJPcHRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi5LiN5pSv5oyB6K+l6YCJ6aG5IgorCisjOiBvcHRpb24uYzozMjAwCittc2dpZCAiTm90IGFsbG93ZWQgaW4gYSBtb2RlbGluZSIKK21zZ3N0ciAi5LiN6IO95Zyo5qih5byP6KGM6YeM5Ye6546wIgorCisjOiBvcHRpb24uYzozMjU2Cittc2dpZCAiIgorIlxuIgorIlx0TGFzdCBzZXQgZnJvbSAiCittc2dzdHIgIiIKKyJcbiIKKyJcdOW9k+WJjeiuvue9rjogIgorCisjOiBvcHRpb24uYzozMzk1Cittc2dpZCAiTnVtYmVyIHJlcXVpcmVkIGFmdGVyID0iCittc2dzdHIgIj0g5ZCO6ZyA6KaB5pyJ5pWw5a2XIgorCisjOiBvcHRpb24uYzozNzAyIG9wdGlvbi5jOjQzMDkKK21zZ2lkICJOb3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiVGVybWNhcCDph4zpnaLmib7kuI3liLAiCisKKyM6IG9wdGlvbi5jOjM3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBjaGFyYWN0ZXIgPCVzPiIKK21zZ3N0ciAi5LiN5q2j56Gu55qE5a2X56ymIDwlcz4iCisKKyM6IG9wdGlvbi5jOjQyOTQgb3B0aW9uLmM6NTQ5NworbXNnaWQgIk5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIui/memHjOS4jeWPr+S9v+eUqCIKKworIzogb3B0aW9uLmM6NDMwMQorbXNnaWQgIkNhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAi5LiN6IO96K6+5a6aICd0ZXJtJyDkuLrnqbrlrZfnrKbkuLIiCisKKyM6IG9wdGlvbi5jOjQzMDQKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICLlnKjlm77lnovnlYzpnaLkuK3kuI3og73liIfmjaLnu4jnq68iCisKKyM6IG9wdGlvbi5jOjQzMDYKK21zZ2lkICJVc2UgXCI6Z3VpXCIgdG8gc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAi6L6T5YWlIFwiOmd1aVwiIOadpeWQr+WKqOWbvuW9oueVjOmdoiIKKworIzogb3B0aW9uLmM6NDMyNworbXNnaWQgIidiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiCittc2dzdHIgIidiYWNrdXBleHQnIOi3nyAncGF0Y2htb2RlJyDmmK/kuIDmoLfnmoQiCisKKyM6IG9wdGlvbi5jOjQ1ODYKK21zZ2lkICJaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIumbtumVv+W6puWtl+espuS4siIKKworIzogb3B0aW9uLmM6NDY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICI8JXM+IOWQjue8uuWwkeaVsOWtlyIKKworIzogb3B0aW9uLmM6NDY2OAorbXNnaWQgIk1pc3NpbmcgY29tbWEiCittc2dzdHIgIue8uuWwkemAl+WPtyIKKworIzogb3B0aW9uLmM6NDY3NQorbXNnaWQgIk11c3Qgc3BlY2lmeSBhICcgdmFsdWUiCittc2dzdHIgIuW/hemcgOaMh+WumuS4gOS4qiAnIOWAvCIKKworIzogb3B0aW9uLmM6NDcxNQorbXNnaWQgImNvbnRhaW5zIHVucHJpbnRhYmxlIGNoYXJhY3RlciIKK21zZ3N0ciAi5YyF5ZCr5LiN6IO95pi+56S655qE5a2X56ymIgorCisjOiBvcHRpb24uYzo0NzI4Cittc2dpZCAiSW52YWxpZCBmb250KHMpIgorbXNnc3RyICLkuI3mraPnoa7nmoTlrZfkvZMiCisKKyM6IG9wdGlvbi5jOjQ3MzQKK21zZ2lkICJjYW4ndCBzZWxlY3QgZm9udHNldCIKK21zZ3N0ciAi5LiN6IO95L2/55So5a2X5L2T6ZuGKEZvbnRzZXQpIgorCisjOiBvcHRpb24uYzo0NzM2Cittc2dpZCAiSW52YWxpZCBmb250c2V0IgorbXNnc3RyICLkuI3mraPnoa7nmoTlrZfkvZPpm4YoRm9udHNldCkiCisKKyM6IG9wdGlvbi5jOjQ3NDMKK21zZ2lkICJjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICLkuI3og73kvb/nlKjorr7lrprnmoTlrr3lrZfkvZMoV2lkZWZvbnQpIgorCisjOiBvcHRpb24uYzo0NzQ1Cittc2dpZCAiSW52YWxpZCB3aWRlIGZvbnQiCittc2dzdHIgIuS4jeato+ehrueahOWuveWtl+S9kyhXaWRlZm9udCkiCisKKyM6IG9wdGlvbi5jOjUwMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgPCVjPiIKK21zZ3N0ciAiPCVjPiDlkI7mnInkuI3mraPnoa7nmoTlrZfnrKYiCisKKyM6IG9wdGlvbi5jOjUwOTcKK21zZ2lkICJjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAi6ZyA6KaB6YCX5Y+3IgorCisjOiBvcHRpb24uYzo1MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIidjb21tZW50c3RyaW5nJyBtdXN0IGJlIGVtcHR5IG9yIGNvbnRhaW4gJXMiCittc2dzdHIgIidjb21tZW50c3RyaW5nJyDlv4XpnIDmmK/nqbrnmb3miJbljIXlkKsgJXMiCisKKyM6IG9wdGlvbi5jOjUxNTMKK21zZ2lkICJObyBtb3VzZSBzdXBwb3J0IgorbXNnc3RyICLkuI3mlK/mjIHpvKDmoIciCisKKyM6IG9wdGlvbi5jOjUzOTkKK21zZ2lkICJVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICLmsqHmnInnu5PmnZ/nmoTooajovr7lvI86ICIKKworIzogb3B0aW9uLmM6NTQwMworbXNnaWQgInRvbyBtYW55IGl0ZW1zIgorbXNnc3RyICLlpKrlpJrlr7nosaEiCisKKyM6IG9wdGlvbi5jOjU0MDUKK21zZ2lkICJ1bmJhbGFuY2VkIGdyb3VwcyIKK21zZ3N0ciAi5LiN5a+556ew55qE57uEIgorCisjOiBvcHRpb24uYzo1NjIwCittc2dpZCAiQSBwcmV2aWV3IHdpbmRvdyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi6aKE6KeI56qX5Y+j5bey57uP5a2Y5Zyo5LqGIgorCisjOiBvcHRpb24uYzo1ODgxIG9wdGlvbi5jOjU5MTAKK21zZ2lkICInd2luaGVpZ2h0JyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW5oZWlnaHQnIgorbXNnc3RyICInd2luaGVpZ2h0JyDkuI3og73mr5QgJ3dpbm1pbmhlaWdodCcg5pu05bCRIgorCisjOiBvcHRpb24uYzo1OTI2IG9wdGlvbi5jOjU5NDUKK21zZ2lkICInd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiJ3dpbndpZHRoJyDkuI3og73mr5QgJ3dpbm1pbndpZHRoJyDmm7TlsJEiCisKKyM6IG9wdGlvbi5jOjYwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCBhdCBsZWFzdCAlZCBsaW5lcyIKK21zZ3N0ciAi6Iez5bCR6ZyA6KaBICVkIOihjCIKKworIzogb3B0aW9uLmM6NjA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOZWVkIGF0IGxlYXN0ICVkIGNvbHVtbnMiCittc2dzdHIgIuiHs+WwkemcgOimgSAlZCDliJciCisKKyM6IG9wdGlvbi5jOjYzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NTogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMzU1OiDkuI3mraPnoa7nmoTpgInpobk6ICVzIgorCisjOiBvcHRpb24uYzo2NTAwCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBjb2RlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g57uI56uv57yW56CBIC0tLSIKKworIzogb3B0aW9uLmM6NjUwMgorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIOWFqOWxgCDpgInpobnlgLwgLS0tIgorCisjOiBvcHRpb24uYzo2NTA0Cittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDmnKzlnLAg6YCJ6aG55YC8IC0tLSIKKworIzogb3B0aW9uLmM6NjUwNgorbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g6YCJ6aG5IC0tLSIKKworIzogb3B0aW9uLmM6NzE5NgorbXNnaWQgIkUzNTY6IGdldF92YXJwIEVSUk9SIgorbXNnc3RyICJFMzU2OiBnZXRfdmFycCDplJnor68iCisKKyM6IG9wdGlvbi5jOjgxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NzogJ2xhbmdtYXAnOiBNYXRjaGluZyBjaGFyYWN0ZXIgbWlzc2luZyBmb3IgJXMiCittc2dzdHIgIkUzNTc6ICdsYW5nbWFwJzog5om+5LiN5YiwICVzIOWvueW6lOeahOWtl+espiIKKworIzogb3B0aW9uLmM6ODE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU4OiAnbGFuZ21hcCc6IEV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgc2VtaWNvbG9uOiAlcyIKK21zZ3N0ciAiRTM1ODogJ2xhbmdtYXAnOiDliIblj7flkI7mnInlpJrkvZnnmoTlrZfnrKY6ICVzIgorCisjOiBvc19hbWlnYS5jOjI3MworbXNnaWQgImNhbm5vdCBvcGVuICIKK21zZ3N0ciAi5LiN6IO95omT5byAIgorCisjOiBvc19hbWlnYS5jOjMwNworbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIlZJTTog5LiN6IO95omT5byA56qX5Y+jIVxuIgorCisjOiBvc19hbWlnYS5jOjMyOQorbXNnaWQgIk5lZWQgQW1pZ2Fkb3MgdmVyc2lvbiAyLjA0IG9yIGxhdGVyXG4iCittc2dzdHIgIumcgOimgSBBbWlnYWRvcyDniYjmnKwgMi4wNCDku6XkuIpcbiIKKworIzogb3NfYW1pZ2EuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICLpnIDopoEgJXMg54mI5pysICVsZFxuIgorCisjOiBvc19hbWlnYS5jOjQwNworbXNnaWQgIkNhbm5vdCBvcGVuIE5JTDpcbiIKK21zZ3N0ciAi5LiN6IO95omT5byAIE5JTDpcbiIKKworIzogb3NfYW1pZ2EuYzo0MTgKK21zZ2lkICJDYW5ub3QgY3JlYXRlICIKK21zZ3N0ciAi5LiN6IO95Yib5bu6ICIKKworIzogb3NfYW1pZ2EuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltIGV4aXRpbmcgd2l0aCAlZFxuIgorbXNnc3RyICJWaW0g6L+U5Zue5YC8OiAlZFxuIgorCisjOiBvc19hbWlnYS5jOjkyOAorbXNnaWQgImNhbm5vdCBjaGFuZ2UgY29uc29sZSBtb2RlID8hXG4iCittc2dzdHIgIuS4jeiDveWIh+aNouS4u+aOp+WPsChjb25zb2xlKeaooeW8jyAhP1xuIgorCisjOiBvc19hbWlnYS5jOjkzOCBvc19tYWMuYzoxMTY4IG9zX21zd2luLmM6NjE5IG9zX3Jpc2Nvcy5jOjcyOCBvc191bml4LmM6MjcyNgorbXNnaWQgIkUzNTk6IFNjcmVlbiBtb2RlIHNldHRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTM1OTog5LiN5pSv5oyB6K6+5a6a5bGP5bmV5qih5byPIgorCisjOiBvc19hbWlnYS5jOjk5NAorbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAibWNoX2dldF9zaGVsbHNpemU6IOS4jeaYr+S4u+aOp+WPsChjb25zb2xlKT8/XG4iCisKKyMuIGlmIFZpbSBvcGVuZWQgYSB3aW5kb3c6IEV4ZWN1dGluZyBhIHNoZWxsIG1heSBjYXVzZSBjcmFzaGVzCisjOiBvc19hbWlnYS5jOjExNDIKK21zZ2lkICJFMzYwOiBDYW5ub3QgZXhlY3V0ZSBzaGVsbCB3aXRoIC1mIG9wdGlvbiIKK21zZ3N0ciAiRTM2MDog5LiN6IO955SoIC1mIOmAiemhueaJp+ihjCBzaGVsbCIKKworIzogb3NfYW1pZ2EuYzoxMTgzIG9zX2FtaWdhLmM6MTI3MworbXNnaWQgIkNhbm5vdCBleGVjdXRlICIKK21zZ3N0ciAi5LiN6IO95omn6KGMICIKKworIzogb3NfYW1pZ2EuYzoxMTg2IG9zX2FtaWdhLmM6MTI4MworbXNnaWQgInNoZWxsICIKK21zZ3N0ciAic2hlbGwgIgorCisjOiBvc19hbWlnYS5jOjEyMDYgb3NfYW1pZ2EuYzoxMzA4Cittc2dpZCAiIHJldHVybmVkXG4iCittc2dzdHIgIiDlt7Lov5Tlm55cbiIKKworIzogb3NfYW1pZ2EuYzoxNDQ4Cittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSDlpKrlsI8iCisKKyM6IG9zX2FtaWdhLmM6MTQ1MgorbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAiSS9PIOmUmeivryIKKworIzogb3NfbXN3aW4uYzo1MDMKK21zZ2lkICIuLi4odHJ1bmNhdGVkKSIKK21zZ3N0ciAiIgorCisjOiBvc19tc3dpbi5jOjU5NAorbXNnaWQgIidjb2x1bW5zJyBpcyBub3QgODAsIGNhbm5vdCBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICInY29sdW1ucycg5LiN5pivIDgwLCDkuI3og73miafooYzlpJbpg6jlkb3ku6QiCisKKyM6IG9zX21zd2luLmM6NzA2IG9zX3VuaXguYzo0OTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjQ6IExpYnJhcnkgY2FsbCBmYWlsZWQgZm9yIFwiJXMoKVwiIgorbXNnc3RyICJFMzY0OiDosIPnlKjlh73mlbDlupMgXCIlc1wiKCkg5aSx6LSlIgorCisjOiBvc19tc3dpbi5jOjEzNDAKK21zZ2lkICJFMjM3OiBQcmludGVyIHNlbGVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkUyMzc6IOS4jeiDvemAieaLqeatpOaJk+WNsOacuiIKKworIzogb3NfbXN3aW4uYzoxMzg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvICVzIG9uICVzIgorbXNnc3RyICLku44gJXMg5YiwICVzIgorCisjOiBvc19tc3dpbi5jOjE0NDkgb3NfbXN3aW4uYzoxNDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODog5omT5Y2w6ZSZ6K+vOiAlcyIKKworIzogb3NfbXN3aW4uYzoxNDU5Cittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAi5pyq55+lIgorCisjOiBvc19tc3dpbi5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAi5bey5omT5Y2wOiAnJXMnIgorCisjOiBvc19tc3dpbi5jOjI1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NDogSWxsZWdhbCBjaGFyc2V0IG5hbWUgXCIlc1wiIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDQ6IOWtl+espumbhiBcIiVzXCIg5LiN6IO95a+55bqU5a2X5L2TXCIlc1wiIgorCisjOiBvc19tc3dpbi5jOjI1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTog5LiN5q2j56Gu55qE5a2X56ymICclYycg5Ye6546w5Zyo5a2X5L2T5ZCN56ewIFwiJXNcIiDlhoUiCisKKyM6IG9zX3Jpc2Nvcy5jOjEyMjcKK21zZ2lkICJFMzY2OiBJbnZhbGlkICdvc2ZpbGV0eXBlJyBvcHRpb24gLSB1c2luZyBUZXh0IgorbXNnc3RyICJFMzY2OiDkuI3mraPnoa7nmoQgJ2ZpbGV0eXBlJyDpgInpobkgLSDkvb/nlKjnuq/mloflrZfmqKHlvI8iCisKKyM6IG9zX3VuaXguYzo4MDAKK21zZ2lkICJWaW06IERvdWJsZSBzaWduYWwsIGV4aXRpbmdcbiIKK21zZ3N0ciAiVmltOiDlj4zph43kv6Hlj7csIOmAgOWHuuS4rVxuIgorCisjOiBvc191bml4LmM6ODA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWwgJXNcbiIKK21zZ3N0ciAiVmltOiBDVmltOiDmi6bmiKrliLDkv6Hlj7coc2lnbmFsKSAlc1xuIgorCisjOiBvc191bml4LmM6ODA5Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIgorbXNnc3RyICJWaW06IOaLpuaIquWIsOiHtOWRveeahOS/oeWPtyhkZWFkbHkgc2lnbmFsZSlcbiIKKworIzogb3NfdW5peC5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRvb2sgJWxkIG1zZWMiCittc2dzdHIgIuaJk+W8gCBYIFdpbmRvdyDnlKjml7YgJWxkIOenkiIKKworIzogb3NfdW5peC5jOjEwOTAKK21zZ2lkICIiCisiXG4iCisiVmltOiBHb3QgWCBlcnJvclxuIgorbXNnc3RyICIiCisiXG4iCisiVmltOiBYIOmUmeivr1xuIgorCisjOiBvc191bml4LmM6MTE1NworbXNnaWQgIlRlc3RpbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIua1i+ivlSBYIFdpbmRvdyDlpLHotKUiCisKKyM6IG9zX3VuaXguYzoxMzAxCittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRpbWVkIG91dCIKK21zZ3N0ciAi5omT5byAIFggV2luZG93IOi2heaXtiIKKworIzogb3NfdW5peC5jOjI4OTkgb3NfdW5peC5jOjM0ODMKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgIgorbXNnc3RyICIiCisiXG4iCisi5LiN6IO95omn6KGMIHNoZWxsIgorCisjOiBvc191bml4LmM6Mjk0NAorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCBzaFxuIgorbXNnc3RyICIiCisiXG4iCisi5LiN6IO95omn6KGMIHNoZWxsIHNoXG4iCisKKyM6IG9zX3VuaXguYzoyOTQ4IG9zX3VuaXguYzozNDg5Cittc2dpZCAiIgorIlxuIgorInNoZWxsIHJldHVybmVkICIKK21zZ3N0ciAiIgorIlxuIgorIlNoZWxsIOW3sui/lOWbniIKKworIzogb3NfdW5peC5jOjMwODIKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGNyZWF0ZSBwaXBlc1xuIgorbXNnc3RyICIiCisiXG4iCisi5LiN6IO95bu656uL566h6YGTXG4iCisKKyM6IG9zX3VuaXguYzozMDk3Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBmb3JrXG4iCittc2dzdHIgIiIKKyJcbiIKKyLkuI3og70gZm9ya1xuIgorCisjOiBvc191bml4LmM6MzQ5NgorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIuWRveS7pOW3sue7k+adn1xuIgorCisjOiBvc191bml4LmM6NDk5MworbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIuaJk+W8gCBYIFdpbmRvdyDlpLHotKUiCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgIuWcqOihjOWPtyAiCisKKyM6IG9zX3czMmV4ZS5jOjE2OQorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHZpbTMyLmRsbCEiCittc2dzdHIgIuS4jeiDveWKoOi9vSB2aW0zMi5kbGzvvIEiCisKKyM6IG9zX3czMmV4ZS5jOjE2OSBvc193MzJleGUuYzoxNzkKK21zZ2lkICJWSU0gRXJyb3IiCittc2dzdHIgIlZJTSDplJnor68iCisKKyM6IG9zX3czMmV4ZS5jOjE3OQorbXNnaWQgIkNvdWxkIG5vdCBmaXggdXAgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIERMTCEiCittc2dzdHIgIuS4jeiDveS/ruato+WHveaVsOaMh+mSiOWIsCBETEwhIgorCisjOiBvc193aW4xNi5jOjU3OCBvc193aW4zMi5jOjMwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hlbGwgcmV0dXJuZWQgJWQiCittc2dzdHIgIlNoZWxsIOi/lOWbnuWAvCAlZCIKKworIzogb3Nfd2luMzIuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0ICVzIGV2ZW50XG4iCittc2dzdHIgIlZpbTog5oum5oiq5YiwICVzIOS6i+S7tlxuIgorCisjOiBvc193aW4zMi5jOjI0OTEKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAi5YWz6ZetIgorCisjOiBvc193aW4zMi5jOjI0OTMKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgIuazqOa2iCIKKworIzogb3Nfd2luMzIuYzoyNDk0Cittc2dpZCAic2h1dGRvd24iCittc2dzdHIgIuWFs+acuiIKKworIzogb3Nfd2luMzIuYzoyOTc1Cittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6IOaJvuS4jeWIsOWRveS7pCIKKworIzogb3Nfd2luMzIuYzoyOTg4Cittc2dpZCAiIgorIlZJTVJVTi5FWEUgbm90IGZvdW5kIGluIHlvdXIgJFBBVEguXG4iCisiRXh0ZXJuYWwgY29tbWFuZHMgd2lsbCBub3QgcGF1c2UgYWZ0ZXIgY29tcGxldGlvbi5cbiIKKyJTZWUgIDpoZWxwIHdpbjMyLXZpbXJ1biAgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisi5Zyo5L2g55qEICRQQVRIIOS4reaJvuS4jeWIsCBWSU1SVU4uRVhFLlxuIgorIuWklumDqOWRveS7pOaJp+ihjOWujOavleWQjuWwhuS4jeS8muaaguWBnC5cbiIKKyLov5vkuIDmraXor7TmmI7or7fmiafooYwgOmhlbHAgd2luMzItdmltcnVuICIKKworIzogb3Nfd2luMzIuYzoyOTkxCittc2dpZCAiVmltIFdhcm5pbmciCittc2dzdHIgIlZpbSDorablkYoiCisKKyM6IHF1aWNrZml4LmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzI6IFRvbyBtYW55ICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3Mjog5qC85byP5YyW5a2X56ym5Liy6YeM5pyJ5aSq5aSaICUlJWMgIgorCisjOiBxdWlja2ZpeC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3Mzog5qC85byP5YyW5a2X56ym5Liy5LiN5bqU6K+l5Ye6546wICUlJWMgIgorCisjOiBxdWlja2ZpeC5jOjM0OAorbXNnaWQgIkUzNzQ6IE1pc3NpbmcgXSBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc0OiDmoLzlvI/ljJblrZfnrKbkuLLph4zlsJHkuoYgXSIKKworIzogcXVpY2tmaXguYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NTogVW5zdXBwb3J0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc1OiDmoLzlvI/ljJblrZfnrKbkuLLph4zmnInkuI3mlK/mjIHnmoQgJSUlYyAiCisKKyM6IHF1aWNrZml4LmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzY6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIHByZWZpeCIKK21zZ3N0ciAiRTM3Njog5qC85byP5YyW5a2X56ym5Liy5byA5aS06YeM5pyJ5LiN5q2j56Gu55qEICUlJWMgIgorCisjOiBxdWlja2ZpeC5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc3OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3Nzog5qC85byP5YyW5a2X56ym5Liy6YeM5pyJ5LiN5q2j56Gu55qEICUlJWMgIgorCisjOiBxdWlja2ZpeC5jOjQxNAorbXNnaWQgIkUzNzg6ICdlcnJvcmZvcm1hdCcgY29udGFpbnMgbm8gcGF0dGVybiIKK21zZ3N0ciAiRTM3ODogJ2Vycm9yZm9ybWF0JyDmnKrorr7lrpoiCisKKyM6IHF1aWNrZml4LmM6NTIwCittc2dpZCAiRTM3OTogTWlzc2luZyBvciBlbXB0eSBkaXJlY3RvcnkgbmFtZSIKK21zZ3N0ciAiRTM3OTog5om+5LiN5Yiw55uu5b2V5ZCN56ew5oiW5piv56m655qE55uu5b2V5ZCN56ewIgorCisjOiBxdWlja2ZpeC5jOjkzMQorbXNnaWQgIk5vIG1vcmUgaXRlbXMiCittc2dzdHIgIuayoeacieWFtuWug+WvueixoSIKKworIzogcXVpY2tmaXguYzoxMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiglZCBvZiAlZCklcyVzOiAiCittc2dzdHIgIiglZCAvICVkKSVzJXM6ICIKKworIzogcXVpY2tmaXguYzoxMTU0Cittc2dpZCAiIChsaW5lIGRlbGV0ZWQpIgorbXNnc3RyICIgKOihjOW3suWIoOmZpCkiCisKKyM6IHF1aWNrZml4LmM6MTM2MAorbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDogUXVpY2tmaXgg5aCG5qCI57uT5bC+IgorCisjOiBxdWlja2ZpeC5jOjEzNjkKK21zZ2lkICJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODE6IFF1aWNrZml4IOWghuagiOmhtuerryIKKworIzogcXVpY2tmaXguYzoxMzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAi6ZSZ6K+v5YiX6KGoICVkLyVkOyDlhbHmnIkgJWQg6aG56ZSZ6K+vIgorCisjOiBxdWlja2ZpeC5jOjE4NDIKK21zZ2lkICJFMzgyOiBDYW5ub3Qgd3JpdGUsICdidWZ0eXBlJyBvcHRpb24gaXMgc2V0IgorbXNnc3RyICJFMzgyOiDkuI3og73lhpnlhaXvvIwnYnVmdHlwZScg6YCJ6aG55bey6K6+5a6aIgorCisjOiByZWdleHAuYzo4MDEKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiDlkI3lrZflpKrplb8iCisKKyM6IHJlZ2V4cC5jOjEzMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOiBOZXN0ZWQgJXMqIgorbXNnc3RyICJFNjE6IOW3oueKtiAlcyoiCisKKyM6IHJlZ2V4cC5jOjEzMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyOiBOZXN0ZWQgJXMlYyIKK21zZ3N0ciAiRTYyOiDlt6LnirYgJXMlYyIKKworIzogcmVnZXhwLmM6MTQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJFNjQ6ICVzJWMgZm9sbG93cyBub3RoaW5nIgorbXNnc3RyICJFNjQ6ICVzJWMg5rKh5pyJ5o6l5Lic6KW/IgorCisjOiByZWdleHAuYzoyNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICLor63ms5XplJnor686ICVzey4uLn0iCisKKyM6IHJlZ2V4cC5jOjI3MTYKK21zZ2lkICJFMzYxOiBDcmFzaCBpbnRlcmNlcHRlZDsgcmVnZXhwIHRvbyBjb21wbGV4PyIKK21zZ3N0ciAiRTM2MTog5LiN6IO95omn6KGMOyByZWd1bGFyIGV4cHJlc3Npb24g5aSq5aSN5p2CPyIKKworIzogcmVnZXhwLmM6Mjg1MQorbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2MzogcmVndWxhciBleHByZXNzaW9uIOmAoOaIkOWghuagiOeUqOWFieeahOmUmeivryIKKworIzogcmVnZXhwLmM6MzA4NworbXNnaWQgIkV4dGVybmFsIHN1Ym1hdGNoZXM6XG4iCittc2dzdHIgIuWklumDqOespuWQiDpcbiIKKworIzogc2NyZWVuLmM6MjA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIrLS0lM2xkIGxpbmVzIGZvbGRlZCAiCittc2dzdHIgIistLeW3siBmb2xkICUzbGQg6KGMIgorCisjOiBzY3JlZW4uYzo3NDExCittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgVi3mm7/mjaIiCisKKyM6IHNjcmVlbi5jOjc0MTUKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIOabv+aNoiIKKworIzogc2NyZWVuLmM6NzQyMAorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIg5Y+N6L2sIgorCisjOiBzY3JlZW4uYzo3NDIyCittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIOaPkuWFpSIKKworIzogc2NyZWVuLmM6NzQyNQorbXNnaWQgIiAoaW5zZXJ0KSIKK21zZ3N0ciAiICjmj5LlhaUpIgorCisjOiBzY3JlZW4uYzo3NDI3Cittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiICjmm7/mjaIpIgorCisjOiBzY3JlZW4uYzo3NDI5Cittc2dpZCAiICh2cmVwbGFjZSkiCittc2dzdHIgIiAodi3mm7/mjaIpIgorCisjOiBzY3JlZW4uYzo3NDMyCittc2dpZCAiIEhlYnJldyIKK21zZ3N0ciAiIOW4jOS8r+iOsSIKKworIzogc2NyZWVuLmM6NzQ0MAorbXNnaWQgIiAobGFuZykiCittc2dzdHIgIiAo6K+t6KiAKSIKKworIzogc2NyZWVuLmM6NzQ0MworbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKOeymOW4likiCisKKyM6IHNjcmVlbi5jOjc0NDkKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIg6YCJ5Y+WIgorCisjOiBzY3JlZW4uYzo3NDUxCittc2dpZCAiIFZJU1VBTCIKK21zZ3N0ciAiIOWPr+inhiIKKworIzogc2NyZWVuLmM6NzQ1MworbXNnaWQgIiBCTE9DSyIKK21zZ3N0ciAiIOWdlyIKKworIzogc2NyZWVuLmM6NzQ1NQorbXNnaWQgIiBMSU5FIgorbXNnc3RyICIg6KGMIgorCisjOiBzY3JlZW4uYzo3NDY4IHNjcmVlbi5jOjc1MjIKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgIuiusOW9leS4rSIKKworIzogc2VhcmNoLmM6MzYKK21zZ2lkICJzZWFyY2ggaGl0IFRPUCwgY29udGludWluZyBhdCBCT1RUT00iCittc2dzdHIgIuW3suafpeaJvuWIsOaWh+S7tuW8gOWktO+8m+WGjeS7jue7k+Wwvue7p+e7reafpeaJviIKKworIzogc2VhcmNoLmM6MzcKK21zZ2lkICJzZWFyY2ggaGl0IEJPVFRPTSwgY29udGludWluZyBhdCBUT1AiCittc2dzdHIgIuW3suafpeaJvuWIsOaWh+S7tue7k+Wwvu+8m+WGjeS7juW8gOWktOe7p+e7reafpeaJviIKKworIzogc2VhcmNoLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IOmUmeivr+eahOafpeaJvuWtl+espuS4sjogJXMiCisKKyM6IHNlYXJjaC5jOjc0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzg0OiBzZWFyY2ggaGl0IFRPUCB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODQ6IOW3suafpeaJvuWIsOaWh+S7tuW8gOWktOS7jeaJvuS4jeWIsCAlcyIKKworIzogc2VhcmNoLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODU6IHNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NTog5bey5p+l5om+5Yiw5paH5Lu257uT5bC+5LuN5om+5LiN5YiwICVzIgorCisjOiBzZWFyY2guYzoxMTA3Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiDlnKggJzsnIOWQjumdouW6lOivpeaciSAnPycg5oiWICcvJyIKKworIzogc2VhcmNoLmM6MzQ3NgorbXNnaWQgIiAoaW5jbHVkZXMgcHJldmlvdXNseSBsaXN0ZWQgbWF0Y2gpIgorbXNnc3RyICIgKOWMheaLrOS4iuasoeWIl+WHuuespuWQiOmhuSkiCisKKyMuIGN1cnNvciBhdCBzdGF0dXMgbGluZQorIzogc2VhcmNoLmM6MzQ5NgorbXNnaWQgIi0tLSBJbmNsdWRlZCBmaWxlcyAiCittc2dzdHIgIi0tLSDljIXlkKvmlofku7YgIgorCisjOiBzZWFyY2guYzozNDk4Cittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAi5om+5LiN5YiwICIKKworIzogc2VhcmNoLmM6MzQ5OQorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgIuWcqOi3r+W+hCAtLS1cbiIKKworIzogc2VhcmNoLmM6MzUzOAorbXNnaWQgIiAgKEFscmVhZHkgbGlzdGVkKSIKK21zZ3N0ciAiICAo5bey5YiX5Ye6KSIKKworIzogc2VhcmNoLmM6MzU0MAorbXNnaWQgIiAgTk9UIEZPVU5EIgorbXNnc3RyICIgIOaJvuS4jeWIsCIKKworIzogc2VhcmNoLmM6MzU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBpbmNsdWRlZCBmaWxlOiAlcyIKK21zZ3N0ciAi5p+l5om+5YyF5ZCr5paH5Lu2OiAlcyIKKworIzogc2VhcmNoLmM6MzgxMAorbXNnaWQgIkUzODc6IE1hdGNoIGlzIG9uIGN1cnJlbnQgbGluZSIKK21zZ3N0ciAiRTM4Nzog5b2T5YmN6KGM5Yy56YWNIgorCisjOiBzZWFyY2guYzozOTUwCittc2dpZCAiQWxsIGluY2x1ZGVkIGZpbGVzIHdlcmUgZm91bmQiCittc2dzdHIgIuaJgOacieWMheWQq+aWh+S7tumDveW3suaJvuWIsCIKKworIzogc2VhcmNoLmM6Mzk1MgorbXNnaWQgIk5vIGluY2x1ZGVkIGZpbGVzIgorbXNnc3RyICLmsqHmnInljIXlkKvmlofku7YiCisKKyM6IHNlYXJjaC5jOjM5NjgKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IOaJvuS4jeWIsOWumuS5iSIKKworIzogc2VhcmNoLmM6Mzk3MAorbXNnaWQgIkUzODk6IENvdWxkbid0IGZpbmQgcGF0dGVybiIKK21zZ3N0ciAiRTM4OTog5om+5LiN5YiwIHBhdHRlcm4iCisKKyM6IHN5bnRheC5jOjI5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MDogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUzOTA6IOWPguaVsOS4jeato+ehrjogJXMiCisKKyM6IHN5bnRheC5jOjMxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTE6IOaXoOatpOivreazlSBjbHVzdGVyOiBcIiVzXCIiCisKKyM6IHN5bnRheC5jOjMzMzEKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgIui/meS4que8k+WGsuWMuuayoeacieWumuS5ieS7u+S9leivreazlemhuSIKKworIzogc3ludGF4LmM6MzMzOQorbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAiQ+mjjuagvOazqOmHiuWQjOatpeS4rSIKKworIzogc3ludGF4LmM6MzM0NworbXNnaWQgIm5vIHN5bmNpbmciCittc2dzdHIgIuayoeacieWQjOatpSIKKworIzogc3ludGF4LmM6MzM1MAorbXNnaWQgInN5bmNpbmcgc3RhcnRzICIKK21zZ3N0ciAi5ZCM5q2l5byA5aeLIgorCisjOiBzeW50YXguYzozMzUyIHN5bnRheC5jOjM0MjEKK21zZ2lkICIgbGluZXMgYmVmb3JlIHRvcCBsaW5lIgorbXNnc3RyICLooYzlj7fotoXlh7rojIPlm7QiCisKKyM6IHN5bnRheC5jOjMzNTYKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDor63ms5XlkIzmraXpobnnm64gKFN5bnRheCBzeW5jIGl0ZW1zKSAtLS0iCisKKyM6IHN5bnRheC5jOjMzNTkKK21zZ2lkICIiCisiXG4iCisic3luY2luZyBvbiBpdGVtcyIKK21zZ3N0ciAiIgorIlxuIgorIuWQjOatpeS4rToiCisKKyM6IHN5bnRheC5jOjMzNjQKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g6K+t5rOV6aG555uuIC0tLSIKKworIzogc3ludGF4LmM6MzM4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5Mjog5peg5q2k6K+t5rOVIGNsdXN0ZXI6IFwiJXNcIiIKKworIzogc3ludGF4LmM6MzQxMQorbXNnaWQgIm1pbmltYWwgIgorbXNnc3RyICLmnIDlsI8iCisKKyM6IHN5bnRheC5jOjM0MTgKK21zZ2lkICJtYXhpbWFsICIKK21zZ3N0ciAi5pyA5aSnIgorCisjOiBzeW50YXguYzo0MDQ2Cittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzkzOiDkvb/nlKjkuobkuI3mraPnoa7nmoTlj4LmlbAiCisKKyM6IHN5bnRheC5jOjQwNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiDmib7kuI3liLAgJXMg55qEIHJlZ2lvbiBpdGVtIgorCisjOiBzeW50YXguYzo0MDk4Cittc2dpZCAiRTM5NTogY29udGFpbnMgYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTU6IOS9v+eUqOS6huS4jeato+ehrueahOWPguaVsCIKKworIzogc3ludGF4LmM6NDEwOQorbXNnaWQgIkUzOTY6IGNvbnRhaW5lZGluIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk2OiDkvb/nlKjkuobkuI3mraPnoa7nmoTlj4LmlbAiCisKKyM6IHN5bnRheC5jOjQxODcKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5Nzog6ZyA6KaB5paH5Lu25ZCN56ewIgorCisjOiBzeW50YXguYzo0NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODog57y65bCRIFwiPVwiOiAlcyIKKworIzogc3ludGF4LmM6NDY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogc3ludGF4IHJlZ2lvbiAlcyDnmoTlj4LmlbDlpKrlsJEiCisKKyM6IHN5bnRheC5jOjUwMTAKK21zZ2lkICJFNDAwOiBObyBjbHVzdGVyIHNwZWNpZmllZCIKK21zZ3N0ciAiRTQwMDog5rKh5pyJ5oyH5a6a55qE5bGe5oCnIgorCisjOiBzeW50YXguYzo1MDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDE6IFBhdHRlcm4gZGVsaW1pdGVyIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MDE6IOaJvuS4jeWIsOWIhumalOespuWPtzogJXMiCisKKyM6IHN5bnRheC5jOjUxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMjogR2FyYmFnZSBhZnRlciBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRTQwMjogJyVzJyDlkI7pnaLnmoTkuJzopb/kuI3og73or4bliKsiCisKKyM6IHN5bnRheC5jOjUyMDQKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiDor63ms5XlkIzmraU6IOi/nuaOpeihjOespuWPt+aMh+WumuS6huS4pOasoSIKKworIzogc3ludGF4LmM6NTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA0OiBJbGxlZ2FsIGFyZ3VtZW50czogJXMiCittc2dzdHIgIkU0MDQ6IOWPguaVsOS4jeato+ehrjogJXMiCisKKyM6IHN5bnRheC5jOjUzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNTogTWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQwNTog57y65bCR562J5Y+3OiAlcyIKKworIzogc3ludGF4LmM6NTMxNworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA2OiBFbXB0eSBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MDY6IOepuuWPguaVsDogJXMiCisKKyM6IHN5bnRheC5jOjUzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNzogJXMgbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTQwNzogJXMg5LiN6IO95Zyo5q2k5Ye6546wIgorCisjOiBzeW50YXguYzo1MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDg6ICVzIG11c3QgYmUgZmlyc3QgaW4gY29udGFpbnMgbGlzdCIKK21zZ3N0ciAiRTQwODogJXMg5b+F6aG75piv5YiX6KGo6YeM55qE56ys5LiA5LiqIgorCisjOiBzeW50YXguYzo1NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDk6IFVua25vd24gZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkU0MDk6IOS4jeato+ehrueahOe7hOWQjTogJXMiCisKKyM6IHN5bnRheC5jOjU2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiDkuI3mraPnoa7nmoQgOnN5bnRheCDlrZDlkb3ku6Q6ICVzIgorCisjOiBzeW50YXguYzo2MDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTE6IGhpZ2hsaWdodCBncm91cCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDExOiDmib7kuI3liLAgaGlnaGxpZ2h0IGdyb3VwOiAlcyIKKworIzogc3ludGF4LmM6NjA0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDEyOiBOb3QgZW5vdWdoIGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMjog5Y+C5pWw5aSq5bCROiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTM6IFRvbyBtYW55IGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMzog5Y+C5pWw6L+H5aSaOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MDc0Cittc2dpZCAiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIgorbXNnc3RyICJFNDE0OiDlt7Lorr7lrprnu4QsIOW/veeVpSBoaWdobGlnaHQgbGluayIKKworIzogc3ludGF4LmM6NjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDE1OiB1bmV4cGVjdGVkIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE1OiDkuI3or6XmnInnmoTnrYnlj7c6ICVzIgorCisjOiBzeW50YXguYzo2MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IOe8uuWwkeetieWPtzogJXMiCisKKyM6IHN5bnRheC5jOjYyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MTc6IOe8uuWwkeWPguaVsDogJXMiCisKKyM6IHN5bnRheC5jOjYyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6IOS4jeWQiOazleeahOWAvDogJXMiCisKKyM6IHN5bnRheC5jOjY0MTcKK21zZ2lkICJFNDE5OiBGRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDE5OiDplJnor6/nmoTliY3mma/popzoibIiCisKKyM6IHN5bnRheC5jOjY0MjgKK21zZ2lkICJFNDIwOiBCRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDIwOiDplJnor6/nmoTog4zmma/popzoibIiCisKKyM6IHN5bnRheC5jOjY0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMTogQ29sb3IgbmFtZSBvciBudW1iZXIgbm90IHJlY29nbml6ZWQ6ICVzIgorbXNnc3RyICJFNDIxOiDplJnor6/nmoTpopzoibLlkI3np7DmiJbmlbDlgLw6ICVzIgorCisjOiBzeW50YXguYzo2Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjI6IHRlcm1pbmFsIGNvZGUgdG9vIGxvbmc6ICVzIgorbXNnc3RyICJFNDIyOiDnu4jnq6/nvJbnoIHlpKrplb86ICVzIgorCisjOiBzeW50YXguYzo2NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjM6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDIzOiDlj4LmlbDkuI3mraPnoa46ICVzIgorCisjOiBzeW50YXguYzo3MjYzCittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDog5L2/55So5LqG5aSq5aSa5LiN5ZCM55qE6auY5Lqu5bqm5bGe5oCnIgorCisjOiB0YWcuYzo5MAorbXNnaWQgImF0IGJvdHRvbSBvZiB0YWcgc3RhY2siCittc2dzdHIgIuagh+etvih0YWcp5aCG5qCI57uT5bC+IgorCisjOiB0YWcuYzo5MQorbXNnaWQgImF0IHRvcCBvZiB0YWcgc3RhY2siCittc2dzdHIgIuagh+etvih0YWcp5aCG5qCI5byA5aS0IgorCisjOiB0YWcuYzozOTIKK21zZ2lkICJFNDI1OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNTog5bey57uP5Zyo5pyA5YmN6Z2i55qE5qCH562+KHRhZynkuoYiCisKKyM6IHRhZy5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI2OiB0YWcgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQyNjog5om+5LiN5Yiw5qCH562+KHRhZyk6ICVzIgorCisjOiB0YWcuYzo1NDUKK21zZ2lkICIgICMgcHJpIGtpbmQgdGFnIgorbXNnc3RyICIgICMgcHJpIGtpbmQgdGFnIgorCisjOiB0YWcuYzo1NDgKK21zZ2lkICJmaWxlXG4iCittc2dzdHIgIuaWh+S7tlxuIgorCisjLgorIy4gKiBBc2sgdG8gc2VsZWN0IGEgdGFnIGZyb20gdGhlIGxpc3QuCisjLiAqIFdoZW4gdXNpbmcgIjpzaWxlbnQiIGFzc3VtZSB0aGF0IDxDUj4gd2FzIGVudGVyZWQuCisjLgorIzogdGFnLmM6NzA2Cittc2dpZCAiRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KTogIgorbXNnc3RyICLovpPlhaUgbnIg5oiW6YCJ5oupICg8Q1I+IOmAgOWHuik6ICIKKworIzogdGFnLmM6NzQ2Cittc2dpZCAiRTQyNzogVGhlcmUgaXMgb25seSBvbmUgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI3OiDlj6rmnInmraTpobnnrKblkIgiCisKKyM6IHRhZy5jOjc0OAorbXNnaWQgIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjg6IOW3see7j+WcqOacgOWQjuS4gOS4quespuWQiOeahOagh+etvih0YWcp5LqGIgorCisjOiB0YWcuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuaWh+S7tiBcIiVzXCIg5LiN5a2Y5ZyoIgorCisjLiBHaXZlIGFuIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiBtYXRjaGluZyB0YWdzCisjOiB0YWcuYzo3ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICVkIG9mICVkJXMiCittc2dzdHIgIuaJvuWIsCB0YWc6ICVkLyVkJXMiCisKKyM6IHRhZy5jOjc4MworbXNnaWQgIiBvciBtb3JlIgorbXNnc3RyICIg5oiW5pu05aSaIgorCisjOiB0YWcuYzo3ODUKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiICDku6XkuI3lkIzlpKflsI/lhpnmnaXkvb/nlKggdGFnISIKKworIzogdGFnLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Mjk6IEZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFNDI5OiDmlofku7YgXCIlc1wiIOS4jeWtmOWcqCIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0YWcuYzo4OTcKK21zZ2lkICIiCisiXG4iCisiICAjIFRPIHRhZyAgICAgICAgIEZST00gbGluZSAgaW4gZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiICAjIOWIsCB0YWcgICAgICAgICDku44gICDooYwgICAg5ZyoIOaWh+S7ti/mlofmnKwiCisKKyM6IHRhZy5jOjExNDQKK21zZ2lkICJMaW5lYXIgdGFnIHNlYXJjaCIKK21zZ3N0ciAi57q/5oCn5p+l5om+5qCH562+IChUYWdzKSIKKworIzogdGFnLmM6MTE0NgorbXNnaWQgIkJpbmFyeSB0YWcgc2VhcmNoIgorbXNnc3RyICLkuozov5vliLbmn6Xmib4oQmluYXJ5IHNlYXJjaCkg5qCH562+KFRhZ3MpIgorCisjOiB0YWcuYzoxMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyB0YWdzIGZpbGUgJXMiCittc2dzdHIgIuafpeaJviB0YWcg5paH5Lu2IFwiJXNcIiIKKworIzogdGFnLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMwOiBUYWcgZmlsZSBwYXRoIHRydW5jYXRlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRTQzMDogVGFnIOaWh+S7tui3r+W+hOiiq+aIquaWreS4uiAlc1xuIgorCisjOiB0YWcuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzE6IEZvcm1hdCBlcnJvciBpbiB0YWdzIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDMxOiBUYWcg5paH5Lu2IFwiJXNcIiDmoLzlvI/plJnor68iCisKKyM6IHRhZy5jOjE4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICLlnKggJWxkIOWtl+iKguS5i+WJjSIKKworIzogdGFnLmM6MTg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMyOiBUYWdzIGZpbGUgbm90IHNvcnRlZDogJXMiCittc2dzdHIgIkU0MzI6IFRhZyDmlofku7bmnKrmjpLluo86ICVzIgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MTkxMQorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzog5rKh5pyJIHRhZyDmlofku7YiCisKKyM6IHRhZy5jOjI1ODMKK21zZ2lkICJFNDM0OiBDYW4ndCBmaW5kIHRhZyBwYXR0ZXJuIgorbXNnc3RyICJFNDM0OiDmib7kuI3liLAgdGFnIgorCisjOiB0YWcuYzoyNTk0Cittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiDmib7kuI3liLAgdGFnLCDor5XnnYDnjJwhIgorCisjOiB0ZXJtLmM6MTcyMworbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiJyDkuI3og73liqDovb3jgILlj6/nlKjnmoTlhoXlu7rnu4jnq6/lvaLlvI/mnIk6IgorCisjOiB0ZXJtLmM6MTc0NworbXNnaWQgImRlZmF1bHRpbmcgdG8gJyIKK21zZ3N0ciAi6aKE6K6+OiAnIgorCisjOiB0ZXJtLmM6MjEwMAorbXNnaWQgIkNhbm5vdCBvcGVuIHRlcm1jYXAgZmlsZSIKK21zZ3N0ciAi5LiN6IO95omT5byAIHRlcm1jYXAg5paH5Lu2IgorCisjOiB0ZXJtLmM6MjEwMworbXNnaWQgIlRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtaW5mbyIKK21zZ3N0ciAi5ZyodGVybWluZm/kuK3mnKrmib7liLDnu4jnq6/pobkiCisKKyM6IHRlcm0uYzoyMTA1Cittc2dpZCAiVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIuWcqHRlcm1jYXDkuK3mnKrmib7liLDnu4jnq6/pobkiCisKKyM6IHRlcm0uYzoyMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzY6IE5vIFwiJXNcIiBlbnRyeSBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNDM2OiB0ZXJtY2FwIOayoeaciSBcIiVzXCIg6aG5IgorCisjOiB0ZXJtLmM6MjczOAorbXNnaWQgIkU0Mzc6IHRlcm1pbmFsIGNhcGFiaWxpdHkgXCJjbVwiIHJlcXVpcmVkIgorbXNnc3RyICJFNDM3OiDnu4jnq6/pnIDopoEgXCJjbVwiIOeahOiDveWKmyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0ZXJtLmM6NDg3MgorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwga2V5cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g57uI56uv5oyJ6ZSuIC0tLSIKKworIzogdWkuYzoyNDAKK21zZ2lkICJuZXcgc2hlbGwgc3RhcnRlZFxuIgorbXNnc3RyICLlkK/liqjmlrAgc2hlbGxcbiIKKworIzogdWkuYzoxNzA1Cittc2dpZCAiVmltOiBFcnJvciByZWFkaW5nIGlucHV0LCBleGl0aW5nLi4uXG4iCittc2dzdHIgIlZpbTog6K+76ZSZ6K+v77yM6YCA5Ye65LitLi4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6MzUxCittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICLkuI3og73ov5jljp/vvJvor7fnu6fnu60iCisKKyM6IHVuZG8uYzo1MDYKK21zZ2lkICJFNDM4OiB1X3VuZG86IGxpbmUgbnVtYmVycyB3cm9uZyIKK21zZ3N0ciAiRTQzODogdV91bmRvOiDooYzlj7fplJnor68iCisKKyM6IHVuZG8uYzo2NzUKK21zZ2lkICIxIGNoYW5nZSIKK21zZ3N0ciAi5LiA6aG55pS55Y+YIgorCisjOiB1bmRvLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFuZ2VzIgorbXNnc3RyICIlbGQg6aG55pS55Y+YIgorCisjOiB1bmRvLmM6NzIxCittc2dpZCAiRTQzOTogdW5kbyBsaXN0IGNvcnJ1cHQiCittc2dzdHIgIkU0Mzk6IOaSpOmUgOWIl+ihqOaNn+WdjyIKKworIzogdW5kby5jOjc1MQorbXNnaWQgIkU0NDA6IHVuZG8gbGluZSBtaXNzaW5nIgorbXNnc3RyICJFNDQwOiDmib7kuI3liLDopoHmkqTplIDmk43kvZznmoTooYwiCisKKyMuIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMKKyM6IHZlcnNpb24uYzo2NTUKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMy5L2NIOWbvuWei+eVjOmdoueJiOacrCIKKworIzogdmVyc2lvbi5jOjY1NworbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgQml0IOWbvuWei+eVjOmdoueJiOacrCIKKworIzogdmVyc2lvbi5jOjY2MAorbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiV2luMzJzIOaooeW8jyIKKworIzogdmVyc2lvbi5jOjY2MgorbXNnaWQgIiB3aXRoIE9MRSBzdXBwb3J0IgorbXNnc3RyICLmlK/mjIEgT0xFIgorCisjOiB2ZXJzaW9uLmM6NjY1Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IGNvbnNvbGUgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzLkvY0g5a2X56ym55WM6Z2i54mI5pysIgorCisjOiB2ZXJzaW9uLmM6NjY5Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYgYml0IHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMy5L2NIOWtl+espueVjOmdoueJiOacrCIKKworIzogdmVyc2lvbi5jOjY3MworbXNnaWQgIiIKKyJcbiIKKyIzMiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMiDkvY0gTVMtRE9TIOeJiOacrCIKKworIzogdmVyc2lvbi5jOjY3NQorbXNnaWQgIiIKKyJcbiIKKyIxNiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIxNiDkvY0gTVMtRE9TIOeJiOacrCIKKworIzogdmVyc2lvbi5jOjY4MQorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkg54mI5pysIgorCisjOiB2ZXJzaW9uLmM6NjgzCittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFgg54mI5pysIgorCisjOiB2ZXJzaW9uLmM6Njg2Cittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyDniYjmnKwiCisKKyM6IHZlcnNpb24uYzo2OTEKK21zZ2lkICIiCisiXG4iCisiUklTQyBPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiUklTQyBPUyDniYjmnKwiCisKKyM6IHZlcnNpb24uYzo3MDEKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisi5Yqg5YWl6KGl5LiBOiAiCisKKyM6IHZlcnNpb24uYzo3MjgKK21zZ2lkICIiCisiXG4iCisiQ29tcGlsZWQgIgorbXNnc3RyICIiCisiXG4iCisi57yW6K+RIgorCisjOiB2ZXJzaW9uLmM6NzMxCittc2dpZCAiYnkgIgorbXNnc3RyICLogIU6IgorCisjOiB2ZXJzaW9uLmM6NzQzCittc2dpZCAiIgorIlxuIgorIkh1Z2UgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyLotoXlvLrniYjmnKwgIgorCisjOiB2ZXJzaW9uLmM6NzQ2Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIuWkp+Wei+eJiOacrCAiCisKKyM6IHZlcnNpb24uYzo3NDkKK21zZ2lkICIiCisiXG4iCisiTm9ybWFsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisi5LiA6Iis54mI5pysICIKKworIzogdmVyc2lvbi5jOjc1MgorbXNnaWQgIiIKKyJcbiIKKyJTbWFsbCB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIueugOaYk+eJiOacrCAiCisKKyM6IHZlcnNpb24uYzo3NTQKK21zZ2lkICIiCisiXG4iCisiVGlueSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIueyvueugOeJiOacrCAiCisKKyM6IHZlcnNpb24uYzo3NjAKK21zZ2lkICJ3aXRob3V0IEdVSS4iCittc2dzdHIgIuS4jeS9v+eUqOWbvuWei+eVjOmdouOAgiIKKworIzogdmVyc2lvbi5jOjc2NAorbXNnaWQgIndpdGggR1RLLUdOT01FIEdVSS4iCittc2dzdHIgIuS9v+eUqCBHVEstR05PTUUg5Zu+5Z6L55WM6Z2i44CCIgorCisjOiB2ZXJzaW9uLmM6NzY2Cittc2dpZCAid2l0aCBHVEsgR1VJLiIKK21zZ3N0ciAi5L2/55SoIEdUSyDlm77lnovnlYzpnaLjgIIiCisKKyM6IHZlcnNpb24uYzo3NzAKK21zZ2lkICJ3aXRoIFgxMS1Nb3RpZiBHVUkuIgorbXNnc3RyICLkvb/nlKggWDExLU1vdGlmIOWbvuWei+eVjOmdouOAgiIKKworIzogdmVyc2lvbi5jOjc3MworbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICLkvb/nlKggWDExLUF0aGVuYSDlm77lnovnlYzpnaLjgIIiCisKKyM6IHZlcnNpb24uYzo3NzYKK21zZ2lkICJ3aXRoIEJlT1MgR1VJLiIKK21zZ3N0ciAi5L2/55SoIEJlT1Mg5Zu+5Z6L55WM6Z2i44CCIgorCisjOiB2ZXJzaW9uLmM6Nzc5Cittc2dpZCAid2l0aCBQaG90b24gR1VJLiIKK21zZ3N0ciAi5L2/55SoUGhvdG9u5Zu+5Z6L55WM6Z2i44CCIgorCisjOiB2ZXJzaW9uLmM6NzgyCittc2dpZCAid2l0aCBHVUkuIgorbXNnc3RyICLkvb/nlKjlm77lnovnlYzpnaLjgIIiCisKKyM6IHZlcnNpb24uYzo3ODUKK21zZ2lkICJ3aXRoIENhcmJvbiBHVUkuIgorbXNnc3RyICLkvb/nlKggQ2FyYm9uIOWbvuWei+eVjOmdouOAgiIKKworIzogdmVyc2lvbi5jOjc4OAorbXNnaWQgIndpdGggQ29jb2EgR1VJLiIKK21zZ3N0ciAi5L2/55SoIENvY29hIOWbvuWei+eVjOmdouOAgiIKKworIzogdmVyc2lvbi5jOjc5MQorbXNnaWQgIndpdGggKGNsYXNzaWMpIEdVSS4iCittc2dzdHIgIuS9v+eUqCAo5Lyg57ufKSDlm77lnovnlYzpnaLjgIIiCisKKyM6IHZlcnNpb24uYzo4MDIKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIg55uu5YmN5Y+v5L2/55SoKCsp5LiO5LiN5Y+v5L2/55SoKC0p55qE5qih5Z2X5YiX6KGoOlxuIgorCisjOiB2ZXJzaW9uLmM6ODE0Cittc2dpZCAiICAgc3lzdGVtIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgIOezu+e7nyB2aW1yYyDphY3nva7mlofku7Y6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODE5Cittc2dpZCAiICAgICB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgIOeUqOaIt+eahCB2aW1yYyDphY3nva7mlofku7Y6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODI0Cittc2dpZCAiIDJuZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAg56ys5LqM57uE55So5oi3IHZpbXJjIOaWh+S7tjogXCIiCisKKyM6IHZlcnNpb24uYzo4MjkKK21zZ2lkICIgM3JkIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICDnrKzkuInnu4TnlKjmiLcgdmltcmMg5paH5Lu2OiBcIiIKKworIzogdmVyc2lvbi5jOjgzNAorbXNnaWQgIiAgICAgIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAg55So5oi355qEIGV4cmMg6YWN572u5paH5Lu2OiBcIiIKKworIzogdmVyc2lvbi5jOjgzOQorbXNnaWQgIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAg56ys5LqM57uE55So5oi3IGV4cmMg5paH5Lu2OiBcIiIKKworIzogdmVyc2lvbi5jOjg0NQorbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICAg57O757ufIGd2aW1yYyDmlofku7Y6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODQ5Cittc2dpZCAiICAgIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgIOeUqOaIt+eahCBndmltcmMg6YWN572u5paH5Lu2OiBcIiIKKworIzogdmVyc2lvbi5jOjg1MworbXNnaWQgIjJuZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAg56ys5LqM57uE55So5oi3IGd2aW1yYyDmlofku7Y6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODU4Cittc2dpZCAiM3JkIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICDnrKzkuInnu4TnlKjmiLcgZ3ZpbXJjIOaWh+S7tjogXCIiCisKKyM6IHZlcnNpb24uYzo4NjUKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgICAg57O757uf6I+c5Y2V6YWN572u5paH5Lu2OiBcIiIKKworIzogdmVyc2lvbi5jOjg3MworbXNnaWQgIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIKK21zZ3N0ciAiICAgICAgICAgICAgICAkVklNIOmihOiuvuWAvDogXCIiCisKKyM6IHZlcnNpb24uYzo4NzkKK21zZ2lkICIgZi1iIGZvciAkVklNUlVOVElNRTogXCIiCittc2dzdHIgIiAgICAgICAkVklNUlVOVElNRSDpooTorr7lgLw6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODgzCittc2dpZCAiQ29tcGlsYXRpb246ICIKK21zZ3N0ciAi57yW6K+R5pa55byPOiAiCisKKyM6IHZlcnNpb24uYzo4ODkKK21zZ2lkICJDb21waWxlcjogIgorbXNnc3RyICLnvJbor5Hlmag6ICIKKworIzogdmVyc2lvbi5jOjg5NAorbXNnaWQgIkxpbmtpbmc6ICIKK21zZ3N0ciAi6ZO+57uT5pa55byPOiAiCisKKyM6IHZlcnNpb24uYzo4OTkKK21zZ2lkICIgIERFQlVHIEJVSUxEIgorbXNnc3RyICIgIOiwg+ivleeJiOacrCIKKworIzogdmVyc2lvbi5jOjkzNAorbXNnaWQgIlZJTSAtIFZpIElNcHJvdmVkIgorbXNnc3RyICJWSU0gLSBWaSBJTXByb3ZlZCIKKworIzogdmVyc2lvbi5jOjkzNgorbXNnaWQgInZlcnNpb24gIgorbXNnc3RyICLniYjmnKwgICAiCisKKyM6IHZlcnNpb24uYzo5MzcKK21zZ2lkICJieSBCcmFtIE1vb2xlbmFhciBldCBhbC4iCittc2dzdHIgIue7tOaKpOS6ujogQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorCisjOiB2ZXJzaW9uLmM6OTM4Cittc2dpZCAiVmltIGlzIG9wZW4gc291cmNlIGFuZCBmcmVlbHkgZGlzdHJpYnV0YWJsZSIKK21zZ3N0ciAiVmltIOS4uuWPr+iHqueUseWPkeihjOeahOW8gOaUvua6kOS7o+eggei9r+S7tiIKKworIzogdmVyc2lvbi5jOjk0MAorbXNnaWQgIkhlbHAgcG9vciBjaGlsZHJlbiBpbiBVZ2FuZGEhIgorbXNnc3RyICLluK7liqnkuYzlubLovr7nmoTlj6/mgJzlhL/nq6UhIgorCisjOiB2ZXJzaW9uLmM6OTQxCittc2dpZCAidHlwZSAgOmhlbHAgaWNjZjxFbnRlcj4gICAgICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAi6L+b5LiA5q2l6K+05piO6K+36L6T5YWlICAgICAgICAgIDpoZWxwIGljY2Y8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6OTQzCittc2dpZCAidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIKK21zZ3N0ciAi6KaB6YCA5Ye66K+36L6T5YWlICAgICAgICAgICAgICAgICAgOnE8RW50ZXI+ICAgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6OTQ0Cittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAi5Zyo57q/5biu5Yqp6K+36L6T5YWlICAgICAgICAgICAgICAgIDpoZWxwPEVudGVyPiAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjk0NQorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgIuaWsOeJiOacrOS/oeaBr+ivt+i+k+WFpSAgICAgICAgICAgICAgOmhlbHAgdmVyc2lvbjY8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6OTQ4Cittc2dpZCAiUnVubmluZyBpbiBWaSBjb21wYXRpYmxlIG1vZGUiCittc2dzdHIgIlZpIOWFvOWuueaooeW8jyIKKworIzogdmVyc2lvbi5jOjk0OQorbXNnaWQgInR5cGUgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIGZvciBWaW0gZGVmYXVsdHMiCittc2dzdHIgIuWmguaenOimgeWujOWFqOaooeaLn+S8oOe7nyBWaSDor7fovpPlhaUgOnNldCBub2NwPEVudGVyPiIKKworIzogdmVyc2lvbi5jOjk1MAorbXNnaWQgInR5cGUgIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IGZvciBpbmZvIG9uIHRoaXMiCittc2dzdHIgIuWmguaenOmcgOimgeWvuSBWaSDlhbzlrrnmqKHlvI/ov5vkuIDmraXor7TmmI7or7fovpPlhaUgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4iCisKKyM6IHZlcnNpb24uYzo5OTAKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICLms6jmhI86IOajgOa1i+WIsCBXaW5kb3dzIDk1Lzk4L01FIgorCisjOiB2ZXJzaW9uLmM6OTkzCittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAi5aaC5p6c6ZyA6KaB5a+5IFdpbmRvd3MgOTUg5pSv5oyB55qE5pu05aSa5L+h5oGv6K+36L6T5YWlIDpoZWxwIHdpbmRvd3M5NTxFbnRlcj4iCisKKyM6IHdpbmRvdy5jOjIwMQorbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiDmsqHmnInpooTop4jnqpflj6MiCisKKyM6IHdpbmRvdy5jOjU2OAorbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IOS4jeiDveWQjOaXtuWIhuWJsueql+WPo+S4uuW3puS4iuWSjOWPs+S4i+inkiIKKworIzogd2luZG93LmM6MTMyNworbXNnaWQgIkU0NDM6IENhbm5vdCByb3RhdGUgd2hlbiBhbm90aGVyIHdpbmRvdyBpcyBzcGxpdCIKK21zZ3N0ciAiRTQ0Mzog5pyJ5YW25a6D5YiG5Ymy56qX5Y+j5pe25LiN6IO95peL6L2sIgorCisjOiB3aW5kb3cuYzoxODEwCittc2dpZCAiRTQ0NDogQ2Fubm90IGNsb3NlIGxhc3Qgd2luZG93IgorbXNnc3RyICJFNDQ0OiDkuI3og73lhbPpl63mnIDlkI7kuIDkuKrnqpflj6MiCisKKyM6IHdpbmRvdy5jOjI0NzQKK21zZ2lkICJBbHJlYWR5IG9ubHkgb25lIHdpbmRvdyIKK21zZ3N0ciAi5bey57uP5Y+q5Ymp5LiA5Liq56qX5Y+j5LqGIgorCisjOiB3aW5kb3cuYzoyNTIxCittc2dpZCAiRTQ0NTogT3RoZXIgd2luZG93IGNvbnRhaW5zIGNoYW5nZXMiCittc2dzdHIgIkU0NDU6IOWFtuWug+eql+WPo+acieaUueWPmOeahOWGheWuuSIKKworIzogd2luZG93LmM6NDM0MQorbXNnaWQgIkU0NDY6IE5vIGZpbGUgbmFtZSB1bmRlciBjdXJzb3IiCittc2dzdHIgIkU0NDY6IOWFieagh+WkhOayoeacieaWh+S7tuWQjSIKKworIzogd2luZG93LmM6NDQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ3OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkU0NDc6IOWcqOi3r+W+hOS4reaJvuS4jeWIsOaWh+S7tiBcIiVzXCIiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NTg2Cittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICLnlKggJm11bHRpcGxlIFZpbXMg57yW6L6RIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjU5MgorbXNnaWQgIkVkaXQgd2l0aCBzaW5nbGUgJlZpbSIKK21zZ3N0ciAi55SoIHNpbmdsZSAmVmltIOe8lui+kSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo2MDQKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAi55SoICZWaW0g57yW6L6RIgorCisjLiBOb3cgY29uY2F0ZW5hdGUKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NjI4Cittc2dpZCAiRWRpdCB3aXRoIGV4aXN0aW5nIFZpbSAtICYiCittc2dzdHIgIueUqOW9k+WJjeeahCBWaW0g57yW6L6RIC0gJiIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo3NTIKK21zZ2lkICJFZGl0cyB0aGUgc2VsZWN0ZWQgZmlsZShzKSB3aXRoIFZpbSIKK21zZ3N0ciAi55SoIFZpbSDnvJbovpHpgInmi6nnmoTmlofku7YiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6ODkxIC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY5Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcHJvY2VzczogQ2hlY2sgaWYgZ3ZpbSBpcyBpbiB5b3VyIHBhdGghIgorbXNnc3RyICLliJvlu7rov5vnqIvlpLHotKU6IOivt+ajgOafpWd2aW3mmK/lkKblnKjlj6/miafooYzot6/lvoTkuK0hIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjg5MiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjkwNgorIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5NzAKK21zZ2lkICJndmltZXh0LmRsbCBlcnJvciIKK21zZ3N0ciAiZ3ZpbWV4dC5kbGwg5Ye66ZSZIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjkwNQorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAi6Lev5b6E5ZCN5aSq6ZW/IgorCisjOiBnbG9iYWxzLmg6ODc4Cittc2dpZCAiLS1ObyBsaW5lcyBpbiBidWZmZXItLSIKK21zZ3N0ciAiLS3nvJPlhrLljLrml6DotYTmlpktLSIKKworIy4KKyMuICogVGhlIGVycm9yIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHNoYXJlZCBhcmUgaW5jbHVkZWQgaGVyZS4KKyMuICogRXhjbHVkZWQgYXJlIGVycm9ycyB0aGF0IGFyZSBvbmx5IHVzZWQgb25jZSBhbmQgZGVidWdnaW5nIG1lc3NhZ2VzLgorIy4KKyM6IGdsb2JhbHMuaDoxMDE5Cittc2dpZCAiQ29tbWFuZCBhYm9ydGVkIgorbXNnc3RyICLlkb3ku6TooqvlvLrliLbkuK3mlq0iCisKKyM6IGdsb2JhbHMuaDoxMDIwCittc2dpZCAiQXJndW1lbnQgcmVxdWlyZWQiCittc2dzdHIgIumcgOimgeaMh+S7pOWPguaVsCIKKworIzogZ2xvYmFscy5oOjEwMjEKK21zZ2lkICJFMTA6IFxcIHNob3VsZCBiZSBmb2xsb3dlZCBieSAvLCA/IG9yICYiCittc2dzdHIgIkUxMDogXFwg5ZCO6Z2i5bqU6K+l5pyJIC8gPyDmiJYgJiIKKworIzogZ2xvYmFscy5oOjEwMjMKK21zZ2lkICJFMTE6IEludmFsaWQgaW4gY29tbWFuZC1saW5lIHdpbmRvdzsgPENSPiBleGVjdXRlcywgQ1RSTC1DIHF1aXRzIgorbXNnc3RyICJFMTE6IOS4jeiDveWcqOWRveS7pOihjOeql+WPo+S4reS9v+eUqOOAgjxDUj7miafooYzvvIxDVFJMLUMg6YCA5Ye6IgorCisjOiBnbG9iYWxzLmg6MTAyNQorbXNnaWQgIkUxMjogQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaCIKK21zZ3N0ciAiRTEyOiBleHJjL3ZpbXJjIOmHjOeahOaMh+S7pOS4jeiDveaJp+ihjCIKKworIzogZ2xvYmFscy5oOjEwMjYKK21zZ2lkICJFMTM6IEZpbGUgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxMzog5paH5Lu25bey57uP5a2Y5ZyoICjlj6/nlKggISDlvLrliLbmm7/mjaIpIgorCisjOiBnbG9iYWxzLmg6MTAyNworbXNnaWQgIkNvbW1hbmQgZmFpbGVkIgorbXNnc3RyICLlkb3ku6TmiafooYzlpLHotKUiCisKKyM6IGdsb2JhbHMuaDoxMDI4Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIuWGhemDqOmUmeivryIKKworIzogZ2xvYmFscy5oOjEwMjkKK21zZ2lkICJJbnRlcnJ1cHRlZCIKK21zZ3N0ciAi5bey5Lit5patIgorCisjOiBnbG9iYWxzLmg6MTAzMAorbXNnaWQgIkUxNDogSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFMTQ6IOS4jeato+ehrueahOWcsOWdgCIKKworIzogZ2xvYmFscy5oOjEwMzEKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICLkuI3mraPnoa7nmoTlj4LmlbAiCisKKyM6IGdsb2JhbHMuaDoxMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLkuI3mraPnoa7nmoTlj4LmlbA6ICVzIgorCisjOiBnbG9iYWxzLmg6MTAzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogJXMiCittc2dzdHIgIkUxNTog5LiN5q2j56Gu55qE6KGo6L6+5byPOiAlcyIKKworIzogZ2xvYmFscy5oOjEwMzYKK21zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCittc2dzdHIgIkUxNjog5LiN5q2j56Gu55qE6IyD5Zu0IgorCisjOiBnbG9iYWxzLmg6MTAzNworbXNnaWQgIkludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAi5LiN5q2j56Gu55qE5ZG95LukIgorCisjOiBnbG9iYWxzLmg6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCIg5piv55uu5b2VIgorCisjOiBnbG9iYWxzLmg6MTA0MgorbXNnaWQgIkUxODogVW5leHBlY3RlZCBjaGFyYWN0ZXJzIGJlZm9yZSAnPSciCittc2dzdHIgIkUxODogJz0nIOWJjemdouWHuueOsOS6humUmeivr+eahOWtl+espiIKKworIzogZ2xvYmFscy5oOjEwNDQKK21zZ2lkICJFMTk6IE1hcmsgaGFzIGludmFsaWQgbGluZSBudW1iZXIiCittc2dzdHIgIkUxOTog5qCH6K6w55qE6KGM5Y+36ZSZ6K+vIgorCisjOiBnbG9iYWxzLmg6MTA0NQorbXNnaWQgIkUyMDogTWFyayBub3Qgc2V0IgorbXNnc3RyICJFMjA6IOayoeacieiuvuWumuagh+iusCIKKworIzogZ2xvYmFscy5oOjEwNDYKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTog5Zug5Li6ICdtb2RpZmlhYmxlJyDpgInpobnmmK/lhbPpl63nmoTvvIzmiYDku6XkuI3og73kv67mlLkiCisKKyM6IGdsb2JhbHMuaDoxMDQ3Cittc2dpZCAiRTIyOiBTY3JpcHRzIG5lc3RlZCB0b28gZGVlcCIKK21zZ3N0ciAiRTIyOiDpgJLlvZLosIPnlKjlpKrlpJrlsYIiCisKKyM6IGdsb2JhbHMuaDoxMDQ4Cittc2dpZCAiRTIzOiBObyBhbHRlcm5hdGUgZmlsZSIKK21zZ3N0ciAiRTIzOiDmsqHmnInmm7/ku6PnmoTmlofku7YiCisKKyM6IGdsb2JhbHMuaDoxMDQ5Cittc2dpZCAiRTI0OiBObyBzdWNoIGFiYnJldmlhdGlvbiIKK21zZ3N0ciAiRTI0OiDmsqHmnInov5nkuKogYWJicmV2aWF0aW9uIOWvueW6lCIKKworIzogZ2xvYmFscy5oOjEwNTAKK21zZ2lkICJObyAhIGFsbG93ZWQiCittc2dzdHIgIuS4jeWPr+S9v+eUqCAnISciCisKKyM6IGdsb2JhbHMuaDoxMDUyCittc2dpZCAiRTI1OiBHVUkgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAiRTI1OiDlm6DkuLrnvJbor5Hml7bmsqHmnInliqDlhaXlm77lnovnlYzpnaLnmoTnqIvluo/ku6PnoIHvvIzmiYDku6XkuI3og73kvb/nlKjlm77lnovnlYzpnaIiCisKKyM6IGdsb2JhbHMuaDoxMDU1Cittc2dpZCAiRTI2OiBIZWJyZXcgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjY6IOWboOS4uue8luivkeaXtuayoeacieWKoOWFpeW4jOS8r+iOseeahOeoi+W6j+S7o+egge+8jOaJgOS7peS4jeiDveS9v+eUqCBIZWJyZXdcbiIKKworIzogZ2xvYmFscy5oOjEwNTgKK21zZ2lkICJFMjc6IEZhcnNpIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI3OiDlm6DkuLrnvJbor5Hml7bmsqHmnInliqDlhaUgRmFyc2kg55qE56iL5bqP5Luj56CB77yM5omA5Lul5LiN6IO95L2/55SoIEZhcnNpXG4iCisKKyM6IGdsb2JhbHMuaDoxMDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODogTm8gc3VjaCBoaWdobGlnaHQgZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkUyODog5rKh5pyJ5ZCN5Li6ICclcycg55qEIGhpZ2hsaWdodCBncm91cCIKKworIzogZ2xvYmFscy5oOjEwNjMKK21zZ2lkICJFMjk6IE5vIGluc2VydGVkIHRleHQgeWV0IgorbXNnc3RyICJFMjk6IOayoeacieaPkuWFpei/h+aWh+WtlyIKKworIzogZ2xvYmFscy5oOjEwNjQKK21zZ2lkICJFMzA6IE5vIHByZXZpb3VzIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiRTMwOiDmsqHmnInliY3kuIDpobnlkb3ku6QiCisKKyM6IGdsb2JhbHMuaDoxMDY1Cittc2dpZCAiRTMxOiBObyBzdWNoIG1hcHBpbmciCittc2dzdHIgIkUzMTog5rKh5pyJ6L+Z5LiqIG1hcHBpbmcg5a+55bqUIgorCisjOiBnbG9iYWxzLmg6MTA2NgorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICLmib7kuI3liLAiCisKKyM6IGdsb2JhbHMuaDoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoOiAlcyIKK21zZ3N0ciAi5om+5LiN5YiwOiAlcyIKKworIzogZ2xvYmFscy5oOjEwNjgKK21zZ2lkICJFMzI6IE5vIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTMyOiDmsqHmnInmlofku7blkI0iCisKKyM6IGdsb2JhbHMuaDoxMDY5Cittc2dpZCAiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTMzOiDmsqHmnInliY3kuIDkuKrmn6Xmib4v5pu/5o2i55qE5ZG95LukIgorCisjOiBnbG9iYWxzLmg6MTA3MAorbXNnaWQgIkUzNDogTm8gcHJldmlvdXMgY29tbWFuZCIKK21zZ3N0ciAiRTM0OiDmsqHmnInliY3kuIDkuKrlkb3ku6QiCisKKyM6IGdsb2JhbHMuaDoxMDcxCittc2dpZCAiRTM1OiBObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzNTog5rKh5pyJ5YmN5LiA5Liq5p+l5om+5ZG95LukIgorCisjOiBnbG9iYWxzLmg6MTA3MgorbXNnaWQgIk5vIHJhbmdlIGFsbG93ZWQiCittc2dzdHIgIuS4jeWPr+S9v+eUqOiMg+WbtOWRveS7pCIKKworIzogZ2xvYmFscy5oOjEwNzQKK21zZ2lkICJFMzY6IE5vdCBlbm91Z2ggcm9vbSIKK21zZ3N0ciAiRTM2OiDmsqHmnInotrPlpJ/nmoTnqbrpl7QiCisKKyM6IGdsb2JhbHMuaDoxMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICLkuI3og73liJvlu7rmlofku7YgJXMiCisKKyM6IGdsb2JhbHMuaDoxMDc3Cittc2dpZCAiQ2FuJ3QgZ2V0IHRlbXAgZmlsZSBuYW1lIgorbXNnc3RyICLkuI3og73lvpfliLDkuLTml7bmlofku7blkI0iCisKKyM6IGdsb2JhbHMuaDoxMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAi5LiN6IO95omT5byA5paH5Lu2ICVzIgorCisjOiBnbG9iYWxzLmg6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIuS4jeiDveivu+WPluaWh+S7tiAlcyIKKworIzogZ2xvYmFscy5oOjEwODAKK21zZ2lkICJFMzc6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUzNzog5paH5Lu25YaF5a655bey5pS55Y+Y5L2G5bCa5pyq5L+d5a2YICjlj6/nlKggISDlvLrliLbmiafooYwpIgorCisjOiBnbG9iYWxzLmg6MTA4MQorbXNnaWQgIkUzODogTnVsbCBhcmd1bWVudCIKK21zZ3N0ciAiRTM4OiDnqbrnmoQgKE51bGwpIOWPguaVsCIKKworIzogZ2xvYmFscy5oOjEwODMKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiDlupTor6XopoHmnInmlbDlrZciCisKKyM6IGdsb2JhbHMuaDoxMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDog5LiN6IO95omT5byA6ZSZ6K+v5paH5Lu2ICVzIgorCisjOiBnbG9iYWxzLmg6MTA4OQorbXNnaWQgIkU0MTogT3V0IG9mIG1lbW9yeSEiCittc2dzdHIgIkU0MTog5YaF5a2Y5LiN6LazISIKKworIzogZ2xvYmFscy5oOjEwOTIKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZCIKK21zZ3N0ciAi5om+5LiN5Yiw5qih5byPIgorCisjOiBnbG9iYWxzLmg6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIuaJvuS4jeWIsOaooeW8jyAlcyIKKworIzogZ2xvYmFscy5oOjEwOTUKK21zZ2lkICJBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICLlj4LmlbDlupTor6XmmK/mraPmlbAiCisKKyM6IGdsb2JhbHMuaDoxMDk3Cittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0Mjog5rKh5pyJ6ZSZ6K+vIgorCisjOiBnbG9iYWxzLmg6MTA5OQorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0Mzog5Yy56YWN5a2X56ym5Liy5pyJ6Zeu6aKYIgorCisjOiBnbG9iYWxzLmg6MTEwMAorbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6IOato+WImeihqOi+vuW8j+aciemXrumimCIKKworIzogZ2xvYmFscy5oOjExMDEKK21zZ2lkICJFNDU6ICdyZWFkb25seScgb3B0aW9uIGlzIHNldCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDU6IOiuvuWumiAncmVhZG9ubHknIOmAiemhuSjlj6ror7spICjlj6/nlKggISDlvLrliLbmiafooYwpIgorCisjOiBnbG9iYWxzLmg6MTEwMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDY6IENhbm5vdCBzZXQgcmVhZC1vbmx5IHZhcmlhYmxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ2OiDkuI3og73orr7lrprlj6ror7vlj5jph48gXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTEwNgorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0Nzog6K+75Y+W6ZSZ6K+v5paH5Lu25aSx6LSlIgorCisjOiBnbG9iYWxzLmg6MTEwOQorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiDkuI3og73lnKggc2FuZGJveCDph4zlh7rnjrAiCisKKyM6IGdsb2JhbHMuaDoxMTExCittc2dpZCAiRTQ5OiBJbnZhbGlkIHNjcm9sbCBzaXplIgorbXNnc3RyICJFNDk6IOmUmeivr+eahOa7muWKqOWkp+WwjyIKKworIzogZ2xvYmFscy5oOjExMTIKK21zZ2lkICJFOTE6ICdzaGVsbCcgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJFOTE6ICdFNzE6IOmAiemhuSAnc2hlbGwnIOacquiuvuWumiIKKworIzogZ2xvYmFscy5oOjExMTMKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiDkuqTmjaLmlofku7blhbPpl63plJnor68iCisKKyM6IGdsb2JhbHMuaDoxMTE0Cittc2dpZCAiRTczOiB0YWcgc3RhY2sgZW1wdHkiCittc2dzdHIgIkU3Mzog5qCH562+5aCG5qCI5bey56m6IgorCisjOiBnbG9iYWxzLmg6MTExNQorbXNnaWQgIkU3NDogQ29tbWFuZCB0b28gY29tcGxleCIKK21zZ3N0ciAiRTc0OiDlkb3ku6TlpKrlpI3mnYIiCisKKyM6IGdsb2JhbHMuaDoxMTE2Cittc2dpZCAiRTc1OiBOYW1lIHRvbyBsb25nIgorbXNnc3RyICJFNzU6IOWQjeWtl+WkqumVvyIKKworIzogZ2xvYmFscy5oOjExMTcKK21zZ2lkICJFNzY6IFRvbyBtYW55IFsiCittc2dzdHIgIkU3Njog5aSq5aSaIFsiCisKKyM6IGdsb2JhbHMuaDoxMTE4Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IOWkquWkmuaWh+S7tuWQjSIKKworIzogZ2xvYmFscy5oOjExMTkKK21zZ2lkICJUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICLkvaDovpPlhaXkuoblpJrkvZnnmoTlrZfnrKYiCisKKyM6IGdsb2JhbHMuaDoxMTIwCittc2dpZCAiRTc4OiBVbmtub3duIG1hcmsiCittc2dzdHIgIkU3ODog5LiN6IO95Yqe6K+G55qE5qCH6K6wIgorCisjOiBnbG9iYWxzLmg6MTEyMQorbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTog5LiN6IO95omp5bGV6YCa6YWN56ymIgorCisjOiBnbG9iYWxzLmg6MTEyMgorbXNnaWQgIkU4MDogRXJyb3Igd2hpbGUgd3JpdGluZyIKK21zZ3N0ciAiRTgwOiDlhpnlhaXplJnor68iCisKKyM6IGdsb2JhbHMuaDoxMTIzCittc2dpZCAiWmVybyBjb3VudCIKK21zZ3N0ciAi5pWw5Yiw6Zu2ICg/KSIKKworIzogZ2xvYmFscy5oOjExMjUKK21zZ2lkICJFODE6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0IgorbXNnc3RyICJFODE6IDxTSUQ+IOS4jeiDveWcqCBzY3JpcHQg5pys5paH5aSW5L2/55SoLiIKZGlmZiAtLWdpdCBhL3NyYy9wby96aF9DTi5jcDkzNi5wbyBiL3NyYy9wby96aF9DTi5jcDkzNi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2U2Y2JjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL3poX0NOLmNwOTM2LnBvCkBAIC0wLDAgKzEsNTkzNyBAQAorIyBDaGluZXNlIChzaW1wbGlmaWVkKSBUcmFuc2xhdGlvbiBmb3IgVmltCisjCisjIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorIyBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyMKKyMgRklSU1QgQVVUSE9SICBXYW5nIEp1biA8anVud0B0dXJib2xpbnV4LmNvbS5jbj4KKyMKKyMgR2VuZXJhdGVkIGZyb20gemhfQ04ucG8sIERPIE5PVCBFRElULgorIworIywgbm8td3JhcAorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogVmltKFNpbXBsaWZpZWQgQ2hpbmVzZSlcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwMS0wOS0yNCAxMDoxMCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMS0wOS0yNCAxMToxMyswODAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBXYW5nIEp1biA8anVud0B0dXJib2xpbnV4LmNvbS5jbj5cbiIKKyJMYW5ndWFnZS1UZWFtOiBXYW5nIEp1biA8anVud0B0dXJib2xpbnV4LmNvbS5jbj5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1nYmtcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4LWJpdFxuIgorCisjOiBidWZmZXIuYzo5NworbXNnaWQgIkU4MjogQ2Fubm90IGFsbG9jYXRlIGFueSBidWZmZXIsIGV4aXRpbmcuLi4iCittc2dzdHIgIkU4MjogsrvE3LfWxeTIzrrOu7qz5cf4o6zNy7P2s8zQ8i4uLiIKKworIzogYnVmZmVyLmM6MTAwCittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4MzogsrvE3LfWxeS7urPlx/ijrMq508PB7dK7uPa7urPlx/guLi4uIgorCisjOiBidWZmZXIuYzo2OTgKK21zZ2lkICJObyBidWZmZXJzIHdlcmUgdW5sb2FkZWQiCittc2dzdHIgIsO709DKzbfFyM66zru6s+XH+CIKKworIzogYnVmZmVyLmM6NzAwCittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIGRlbGV0ZWQiCittc2dzdHIgIsO709DJvrP9yM66zru6s+XH+CIKKworIzogYnVmZmVyLmM6NzAyCittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIHdpcGVkIG91dCIKK21zZ3N0ciAiw7vT0Mm+s/3IzrrOu7qz5cf4IgorCisjOiBidWZmZXIuYzo3MTAKK21zZ2lkICIxIGJ1ZmZlciB1bmxvYWRlZCIKK21zZ3N0ciAi0tHKzbfF0ru49ru6s+XH+CIKKworIzogYnVmZmVyLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgdW5sb2FkZWQiCittc2dzdHIgItLRys23xSAlZCC49ru6s+XH+CIKKworIzogYnVmZmVyLmM6NzE3Cittc2dpZCAiMSBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAi0tHJvrP90ru49ru6s+XH+CIKKworIzogYnVmZmVyLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgZGVsZXRlZCIKK21zZ3N0ciAi0tHJvrP9ICVkILj2u7qz5cf4IgorCisjOiBidWZmZXIuYzo3MjQKK21zZ2lkICIxIGJ1ZmZlciB3aXBlZCBvdXQiCittc2dzdHIgItLRyb6z/dK7uPa7urPlx/giCisKKyM6IGJ1ZmZlci5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHdpcGVkIG91dCIKK21zZ3N0ciAi0tHJvrP9ICVkILj2u7qz5cf4IgorCisjOiBidWZmZXIuYzo3ODMKK21zZ2lkICJFODQ6IE5vIG1vZGlmaWVkIGJ1ZmZlciBmb3VuZCIKK21zZ3N0ciAiRTg0OiDDu9PQ0N64xLn9tcS7urPlx/giCisKKyMuIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCwgZGlkbid0IGZpbmQgYW55dGhpbmcuCisjOiBidWZmZXIuYzo4MjIKK21zZ2lkICJFODU6IFRoZXJlIGlzIG5vIGxpc3RlZCBidWZmZXIiCittc2dzdHIgIkU4NTogw7vT0L/JwdCz9rXEu7qz5cf4IgorCisjOiBidWZmZXIuYzo4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg2OiBDYW5ub3QgZ28gdG8gYnVmZmVyICVsZCIKK21zZ3N0ciAiRTg2OiCyu8Tcx9C7u7W9tdogJWxkILj2u7qz5cf4IgorCisjOiBidWZmZXIuYzo4MzcKK21zZ2lkICJFODc6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU4NzogsrvE3MfQu7u1vbj8uvPD5rXEu7qz5cf4IgorCisjOiBidWZmZXIuYzo4MzkKK21zZ2lkICJFODg6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgYnVmZmVyIgorbXNnc3RyICJFODg6ILK7xNzH0Lu7tb24/Meww+a1xLu6s+XH+CIKKworIzogYnVmZmVyLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU4OTogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciAlbGQgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTg5OiDS0bj8uMS5/bu6s+XH+CAlbGQgtavJ0M60saO05iAov8nTwyAhIMe/1sbWtNDQKSIKKworIzogYnVmZmVyLmM6ODc5Cittc2dpZCAiRTkwOiBDYW5ub3QgdW5sb2FkIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFOTA6ILK7xNzKzbfF1+6689K7uPa7urPlx/giCisKKyM6IGJ1ZmZlci5jOjEzMTQKK21zZ2lkICJXMTQ6IFdhcm5pbmc6IExpc3Qgb2YgZmlsZSBuYW1lcyBvdmVyZmxvdyIKK21zZ3N0ciAiVzE0OiC+r7jmOiDOxLz+w/u5/bbgIgorCisjOiBidWZmZXIuYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MjogQnVmZmVyICVsZCBub3QgZm91bmQiCittc2dzdHIgIkU5Mjog1dKyu7W9tdogJWxkILj2u7qz5cf4IgorCisjOiBidWZmZXIuYzoxNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5Mzog1dK1vdK7uPbS1MnPtcQgJXMiCisKKyM6IGJ1ZmZlci5jOjE3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIgorbXNnc3RyICJFOTQ6INXSsru1vSAlcyIKKworIzogYnVmZmVyLmM6MjEwNSBleF9kb2NtZC5jOjYwNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQiCittc2dzdHIgItDQICVsZCIKKworIzogYnVmZmVyLmM6MjE4OAorbXNnaWQgIkU5NTogQnVmZmVyIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFOTU6INLR09C7urPlx/jKudPD1eK49sP719YiCisKKyM6IGJ1ZmZlci5jOjI0ODEKK21zZ2lkICIgW01vZGlmaWVkXSIKK21zZ3N0ciAiIFvS0dDeuMRdIgorCisjOiBidWZmZXIuYzoyNDg2Cittc2dpZCAiW05vdCBlZGl0ZWRdIgorbXNnc3RyICJbzrSx4LytXSIKKworIzogYnVmZmVyLmM6MjQ5MQorbXNnaWQgIltOZXcgZmlsZV0iCittc2dzdHIgIlvQws7EvP5dIgorCisjOiBidWZmZXIuYzoyNDkyCittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW7bBtO3O810iCisKKyM6IGJ1ZmZlci5jOjI0OTQgZmlsZWlvLmM6MTc1NAorbXNnaWQgIltyZWFkb25seV0iCittc2dzdHIgIlvWu7bBXSIKKworIzogYnVmZmVyLmM6MjUxMAorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgLS0lZCUlLS0iCittc2dzdHIgItDQyv0gMSAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6MjUxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgLS0lZCUlLS0iCittc2dzdHIgItDQyv0gJWxkIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIG9mICVsZCAtLSVkJSUtLSBjb2wgIgorbXNnc3RyICLQ0CAlbGQvJWxkIC0tJWQlJS0tIMHQICIKKworIzogYnVmZmVyLmM6MjYwNgorbXNnaWQgIltObyBmaWxlXSIKK21zZ3N0ciAiW860w/zD+10iCisKKyMuIG11c3QgYmUgYSBoZWxwIGJ1ZmZlcgorIzogYnVmZmVyLmM6MjY0NgorbXNnaWQgImhlbHAiCittc2dzdHIgIluw79b6XSIKKworIzogYnVmZmVyLmM6MzE1MSBzY3JlZW4uYzo0NjU3Cittc2dpZCAiW2hlbHBdIgorbXNnc3RyICJbsO/W+l0iCisKKyM6IGJ1ZmZlci5jOjMxODMgc2NyZWVuLmM6NDY2MworbXNnaWQgIltQcmV2aWV3XSIKK21zZ3N0ciAiW9SkwMBdIgorCisjOiBidWZmZXIuYzozMzg5Cittc2dpZCAiQWxsIgorbXNnc3RyICLIq7K/IgorCisjOiBidWZmZXIuYzozMzg5Cittc2dpZCAiQm90IgorbXNnc3RyICK117bLIgorCisjOiBidWZmZXIuYzozMzkxCittc2dpZCAiVG9wIgorbXNnc3RyICK2pbbLIgorCisjOiBidWZmZXIuYzo0MTI3Cittc2dpZCAiIgorIlxuIgorIiMgQnVmZmVyIGxpc3Q6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjILu6s+XH+MHQse06XG4iCisKKyM6IGJ1ZmZlci5jOjQxNjAKK21zZ2lkICJbRXJyb3IgTGlzdF0iCittc2dzdHIgIlu07c7zwdCx7V0iCisKKyM6IGJ1ZmZlci5jOjQxNzMgbWVtbGluZS5jOjE1MTMKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIlvOtMP8w/tdIgorCisjOiBidWZmZXIuYzo0MzkzCittc2dpZCAiIgorIlxuIgorIi0tLSBTaWducyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gt/u6xSAtLS0iCisKKyM6IGJ1ZmZlci5jOjQ0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2lnbnMgZm9yICVzOiIKK21zZ3N0ciAiJXMgtcS3+7rFOiIKKworIzogYnVmZmVyLmM6NDQwOQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgbGluZT0lbGQgIGlkPSVkICBuYW1lPSVzIgorbXNnc3RyICIgICAg0NA9JWxkICBpZD0lZCAgw/uzxj0lcyIKKworIzogZGlmZi5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJFOTY6IENhbiBub3QgZGlmZiBtb3JlIHRoYW4gJWxkIGJ1ZmZlcnMiCittc2dzdHIgIkU5NjogsrvE3LHIvc8oZGlmZikgJWxkuPbS1MnPtcS7urPlx/giCisKKyM6IGRpZmYuYzo2NDgKK21zZ2lkICJFOTc6IENhbm5vdCBjcmVhdGUgZGlmZnMiCittc2dzdHIgIkU5NzogsrvE3LS0vaggZGlmZiAiCisKKyM6IGRpZmYuYzo3NDcKK21zZ2lkICJQYXRjaCBmaWxlIgorbXNnc3RyICJQYXRjaCDOxLz+IgorCisjOiBkaWZmLmM6OTkxCittc2dpZCAiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIKK21zZ3N0ciAiRTk4OiCyu8TctsHIoSBkaWZmILXEyuSz9iIKKworIzogZGlmZi5jOjE3MDQKK21zZ2lkICJFOTk6IEN1cnJlbnQgYnVmZmVyIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkU5OTogxL/HsLXEu7qz5cf4srvKx9TaIGRpZmYgxKPKvSIKKworIzogZGlmZi5jOjE3MTYKK21zZ2lkICJFMTAwOiBObyBvdGhlciBidWZmZXIgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAwOiDDu9PQu7qz5cf41NogZGlmZiDEo8q9IgorCisjOiBkaWZmLmM6MTcyNAorbXNnaWQgIkUxMDE6IE1vcmUgdGhhbiB0d28gYnVmZmVycyBpbiBkaWZmIG1vZGUsIGRvbid0IGtub3cgd2hpY2ggb25lIHRvIHVzZSIKK21zZ3N0ciAiRTEwMTog09DBvbj20tTJz7XEu7qz5cf41NogZGlmZiDEo8q9o6yyu8Tcvva2qNKq08PExNK7uPYiCisKKyM6IGRpZmYuYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDI6IENhbid0IGZpbmQgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTEwMjog1dKyu7W9u7qz5cf4OiBcIiVzXCIiCisKKyM6IGRpZmYuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzogu7qz5cf4IFwiJXNcIiCyu8rH1NogZGlmZiDEo8q9IgorCisjOiBkaWdyYXBoLmM6MjE2OAorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiC4tLrP19a3+yhkaWdyYXBoKdbQsrvE3Mq508MgRXNjYXBlIgorCisjOiBkaWdyYXBoLmM6MjM0MAorbXNnaWQgIktleW1hcCBmaWxlIG5vdCBmb3VuZCIKK21zZ3N0ciAi1dKyu7W9IGtleW1hcCDOxLz+IgorCisjOiBkaWdyYXBoLmM6MjM2NworbXNnaWQgIkUxMDU6IFVzaW5nIDpsb2Fka2V5bWFwIG5vdCBpbiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTEwNTogyrnTwyA6bG9hZGtleW1hcCAiCisKKyM6IGVkaXQuYzo0MAorbXNnaWQgIiBLZXl3b3JkIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiILnYvPzX1tfUtq/N6rPJICheTi9eUCkiCisKKyMuIGN0cmxfeF9tb2RlID09IDAsIF5QL15OIGNvbXBsLgorIzogZWRpdC5jOjQxCittc2dpZCAiIF5YIG1vZGUgKF5FL15ZL15ML15dL15GL15JL15LL15EL15WL15OL15QKSIKK21zZ3N0ciAiIF5YIMSjyr0gKF5FL15ZL15ML15dL15GL15JL15LL15EL15OL15QKSIKKworIy4gU2Nyb2xsIGhhcyBpdCdzIG93biBtc2dzLCBpbiBpdCdzIHBsYWNlIHRoZXJlIGlzIHRoZSBtc2cgZm9yIGxvY2FsCisjLiAqIGN0cmxfeF9tb2RlID0gMCAoZWcgY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCkgIC0tIEFjZXZlZG8KKyM6IGVkaXQuYzo0NAorbXNnaWQgIiBLZXl3b3JkIExvY2FsIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIMf40/K52Lz819bX1LavzeqzySAoXk4vXlApIgorCisjOiBlZGl0LmM6NDUKK21zZ2lkICIgV2hvbGUgbGluZSBjb21wbGV0aW9uICheTC9eTi9eUCkiCittc2dzdHIgIiDV+9DQ19S2r83qs8kgKF5ML15OL15QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRi9eTi9eUCkiCittc2dzdHIgIiDOxLz+w/vX1LavzeqzySAoXkYvXk4vXlApIgorCisjOiBlZGl0LmM6NDcKK21zZ2lkICIgVGFnIGNvbXBsZXRpb24gKF5dL15OL15QKSIKK21zZ3N0ciAiILHqx6nX1LavzeqzySAoXl0vXk4vXlApIgorCisjOiBlZGl0LmM6NDgKK21zZ2lkICIgUGF0aCBwYXR0ZXJuIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIMK3vrbX1LavzeqzySAoXk4vXlApIgorCisjOiBlZGl0LmM6NDkKK21zZ2lkICIgRGVmaW5pdGlvbiBjb21wbGV0aW9uICheRC9eTi9eUCkiCittc2dzdHIgIiC2qNLl19S2r83qs8kgKF5EL15OL15QKSIKKworIzogZWRpdC5jOjUxCittc2dpZCAiIERpY3Rpb25hcnkgY29tcGxldGlvbiAoXksvXk4vXlApIgorbXNnc3RyICIg19a15NfUtq/N6rPJICheSy9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MgorbXNnaWQgIiBUaGVzYXVydXMgY29tcGxldGlvbiAoXlQvXk4vXlApIgorbXNnc3RyICIgVGhlc2F1cnVzINfUtq/N6rPJICheVC9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MworbXNnaWQgIiBDb21tYW5kLWxpbmUgY29tcGxldGlvbiAoXlYvXk4vXlApIgorbXNnc3RyICIgw/zB7tfUtq/N6rPJICheVi9eTi9eUCkiCisKKyM6IGVkaXQuYzo1NgorbXNnaWQgIkhpdCBlbmQgb2YgcGFyYWdyYXBoIgorbXNnc3RyICLS0bW9ts7C5L3hzrIiCisKKyM6IGVkaXQuYzo4OTQKK21zZ2lkICIndGhlc2F1cnVzJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgItGhz+4gJ3RoZXNhdXJ1cycgzrTJ6LaoIgorCisjOiBlZGl0LmM6MTA3MAorbXNnaWQgIidkaWN0aW9uYXJ5JyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgItGhz+4gJ2RpY3Rpb25hcnknIM6qv9UiCisKKyM6IGVkaXQuYzoxOTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGRpY3Rpb25hcnk6ICVzIgorbXNnc3RyICLJqMPo19a15DogJXMiCisKKyM6IGVkaXQuYzoyMTgzCittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKLLlyOspIFNjcm9sbCAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjE4NQorbXNnaWQgIiAocmVwbGFjZSkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAozOa7uykgU2Nyb2xsICheRS9eWSkiCisKKyM6IGVkaXQuYzoyNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nOiAlcyIKK21zZ3N0ciAiyajD6NbQOiAlcyIKKworIzogZWRpdC5jOjI1MzEKK21zZ2lkICJTY2FubmluZyB0YWdzLiIKK21zZ3N0ciAiyajD6LHqx6kuIgorCisjOiBlZGl0LmM6MzE4OQorbXNnaWQgIiBBZGRpbmciCittc2dzdHIgIiDU9rzTIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjMyMzgKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tIMvR0bDW0C4uLiIKKworIzogZWRpdC5jOjMyOTQKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICK72LW9xvC14yIKKworIzogZWRpdC5jOjMyOTkKK21zZ2lkICJXb3JkIGZyb20gb3RoZXIgbGluZSIKK21zZ3N0ciAitNPG5Mv80NC/qsq8tcS0yiAoPykiCisKKyM6IGVkaXQuYzozMzA0Cittc2dpZCAiVGhlIG9ubHkgbWF0Y2giCittc2dzdHIgIta709C0y8/uxqXF5CIKKworIzogZWRpdC5jOjMzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQgb2YgJWQiCittc2dzdHIgItXStb0gJWQgLyAlZCIKKworIzogZWRpdC5jOjMzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgIsalxeQgJWQiCisKKyM6IGV2YWwuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNjogVW5rbm93biB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA2OiDOtLao0uW1xLHkwb86IFwiJXNcIiIKKworIzogZXZhbC5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTA3OiBNaXNzaW5nIGJyYWNlczogJXMiCittc2dzdHIgIkUxMDc6IMixydm21NOmtcTAqLrFOiAlcyIKKworIzogZXZhbC5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiDO3rTLseTBvzogXCIlc1wiIgorCisjOiBldmFsLmM6MTI4NAorbXNnaWQgIkUxMDk6IE1pc3NpbmcgJzonIGFmdGVyICc/JyIKK21zZ3N0ciAiRTEwOTogJz8nILrzyLHJ2SAnOiciCisKKyM6IGV2YWwuYzoxODk4Cittc2dpZCAiRTExMDogTWlzc2luZyAnKSciCittc2dzdHIgIkUxMTA6IMixydm21NOmtcQgXCIpXCIiCisKKyM6IGV2YWwuYzoxOTQ4Cittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6IMixydm21NOmtcQgXCJdXCIiCisKKyM6IGV2YWwuYzoyMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTI6IE9wdGlvbiBuYW1lIG1pc3Npbmc6ICVzIgorbXNnc3RyICJFMTEyOiDIscnZ0aHP7sP7s8Y6ICVzIgorCisjOiBldmFsLmM6MjA0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEzOiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUxMTM6ILK71f3It7XE0aHP7jogJXMiCisKKyM6IGV2YWwuYzoyMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTQ6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE0OiDIscnZ0v26xTogJXMiCisKKyM6IGV2YWwuYzoyMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTU6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE1OiDIscnZ0v26xTogJXMiCisKKyM6IGV2YWwuYzoyNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTY6IEludmFsaWQgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTExNjoguq/K/SAlcyC1xLLOyv2yu9X9yLciCisKKyM6IGV2YWwuYzoyNTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiDOtLao0uW1xLqvyv06ICVzIgorCisjOiBldmFsLmM6MjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODoguq/K/SAlcyC1xLLOyv25/bbgIgorCisjOiBldmFsLmM6MjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE5OiBOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE5OiC6r8r9ICVzILXEss7K/cyrydkiCisKKyM6IGV2YWwuYzoyNTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjA6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0OiAlcyIKK21zZ3N0ciAiRTEyMDogPFNJRD4gsrvE3NTaIHNjcmlwdCDJz8/CzsTN4sq508M6ICVzIgorCisjOiBldmFsLmM6MzU3NAorIywgYy1mb3JtYXQKK21zZ2lkICIrLSVzJTNsZCBsaW5lczogIgorbXNnc3RyICIrLSVzJTNsZCDQ0DogIgorCisjOiBldmFsLmM6NDY4OQorbXNnaWQgIiIKKyImT0tcbiIKKyImQ2FuY2VsIgorbXNnc3RyICIiCisiyLe2qCgmTylcbiIKKyLIoc/7KCZDKSIKKworIzogZXZhbC5jOjU1MTEKK21zZ2lkICJFMjQwOiBObyBjb25uZWN0aW9uIHRvIFZpbSBzZXJ2ZXIiCittc2dzdHIgIkUyNDA6IMO709DT6yBWaW0gU2VydmVyILS0vajBrL3TIgorCisjOiBldmFsLmM6NTYwMQorbXNnaWQgIkUyNzc6IFVuYWJsZSB0byByZWFkIGEgc2VydmVyIHJlcGx5IgorbXNnc3RyICJFMjc3OiCyu8TctsHIobf+zvHG97XEz+zTpiIKKworIzogZXZhbC5jOjU2MjYKK21zZ2lkICJFMjU4OiBVbmFibGUgdG8gc2VuZCB0byBjbGllbnQiCittc2dzdHIgIkUyNTg6ILK7xNy0q8vNtb2/zbuntssiCisKKyM6IGV2YWwuYzo1NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvICVzIgorbXNnc3RyICJFMjQxOiCyu8TctKvLzbW9ICVzIgorCisjOiBldmFsLmM6NTc2MworbXNnaWQgIihJbnZhbGlkKSIKK21zZ3N0ciAiKM7e0KcpIgorCisjOiBldmFsLmM6Njc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgorbXNnc3RyICJFMTIxOiCx5MG/ICVzIMnQzrS2qNLlIgorCisjOiBldmFsLmM6NzQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgdXNlICEgdG8gcmVwbGFjZSIKK21zZ3N0ciAiRTEyMjoguq/K/SAlcyDS0b6ttObU2iwgx+vKudPDICEgx7/Wxszmu7siCisKKyM6IGV2YWwuYzo3NTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjM6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMjM6ILqvyv0gJXMgydDOtLao0uUiCisKKyM6IGV2YWwuYzo3NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjQ6IE1pc3NpbmcgJygnOiAlcyIKK21zZ3N0ciAiRTEyNDogyLHJ2SBcIihcIjogJXMiCisKKyM6IGV2YWwuYzo3NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiCyzsr9srvV/ci3OiAlcyIKKworIzogZXZhbC5jOjc2MzcKK21zZ2lkICJFMTI2OiBNaXNzaW5nIDplbmRmdW5jdGlvbiIKK21zZ3N0ciAiRTEyNjogyLHJ2SA6ZW5kZnVuY3Rpb24iCisKKyM6IGV2YWwuYzo3NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjc6IENhbm5vdCByZWRlZmluZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTI3OiC6r8r9ICVzINX91NrKudPD1tCjrLK7xNzW2NDCtqjS5SIKKworIzogZXZhbC5jOjc3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyODogRnVuY3Rpb24gbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsOiAlcyIKK21zZ3N0ciAiRTEyODoguq/K/cP7s8a12tK7uPbX1sS4sdjQ67Tz0LQ6ICVzIgorCisjOiBldmFsLmM6Nzc3OQorbXNnaWQgIkUxMjk6IEZ1bmN0aW9uIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUxMjk6INDo0qq6r8r9w/uzxiIKKworIzogZXZhbC5jOjc4NzIKK21zZ2lkICJmdW5jdGlvbiAiCittc2dzdHIgIrqvyv0gIgorCisjOiBldmFsLmM6Nzk4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTMwOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTMwOiC6r8r9ICVzIMnQzrS2qNLlIgorCisjOiBldmFsLmM6Nzk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTMxOiBDYW5ub3QgZGVsZXRlIGZ1bmN0aW9uICVzOiBJdCBpcyBpbiB1c2UiCittc2dzdHIgIkUxMzE6ILqvyv0gJXMg1f3U2sq508PW0KOssrvE3Mm+s/0iCisKKyM6IGV2YWwuYzo4MDM5Cittc2dpZCAiRTEzMjogRnVuY3Rpb24gY2FsbCBkZXB0aCBpcyBoaWdoZXIgdGhhbiAnbWF4ZnVuY2RlcHRoJyIKK21zZ3N0ciAiRTEzMjoguq/K/bXduem199PDsuPK/bOsuf0gJ21heGZ1bmNkZXB0aCciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjgwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAitffTwyAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODExNSBleF9jbWRzMi5jOjE5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAivMzQ+DogJXMiCisKKyM6IGV2YWwuYzo4MTY5Cittc2dpZCAiRTEzMzogOnJldHVybiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxMzM6IDpyZXR1cm4gsdjQ69Tauq/K/cDvyrnTwyIKKworIzogZXZhbC5jOjgyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgIiVzILe1u9jWtSAjJWxkICIKKworIzogZXZhbC5jOjgyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nIFwiJXNcIiIKK21zZ3N0ciAiJXMgt7W72Na1IFwiJXNcIiIKKworIzogZXZhbC5jOjgzOTEKK21zZ2lkICIiCisiXG4iCisiIyBnbG9iYWwgdmFyaWFibGVzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDIq77WseTBvzpcbiIKKworIzogZXhfY21kczIuYzo3MAorbXNnaWQgIkVudGVyaW5nIERlYnVnIG1vZGUuICBUeXBlIFwiY29udFwiIHRvIGxlYXZlLiIKK21zZ3N0ciAivfjI67X3ytTEo8q9LiDK5MjrIFwiY29udFwiINLUu9i1vdX9s6PEo8q9LiIKKworIzogZXhfY21kczIuYzo3NCBleF9kb2NtZC5jOjc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogJXMiCittc2dzdHIgItDQICVsZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY21kOiAlcyIKK21zZ3N0ciAiY21kOiAlcyIKKworIzogZXhfY21kczIuYzoyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJlYWtwb2ludCBpbiBcIiVzJXNcIiBsaW5lICVsZCIKK21zZ3N0ciAiXCIlcyVzXCIg1tC2z7XjOiC12iAlbGQg0NAiCisKKyM6IGV4X2NtZHMyLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjE6IEJyZWFrcG9pbnQgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTE2MTog1dKyu7W91tC2z7XjOiAlcyIKKworIzogZXhfY21kczIuYzo0MTQKK21zZ2lkICJObyBicmVha3BvaW50cyBkZWZpbmVkIgorbXNnc3RyICLDu9PQtqjS5dbQts+14yIKKworIzogZXhfY21kczIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTNkICAlcyAlcyAgbGluZSAlbGQiCittc2dzdHIgIiUzZCAgJXMgJXMgILXaICVsZCDQ0CIKKworIzogZXhfY21kcy5jOjIwNTMgZXhfY21kcy5jOjIyODkgZXhfY21kczIuYzo2MDIKK21zZ2lkICJTYXZlIEFzIgorbXNnc3RyICLB7bTmzqoiCisKKyM6IGV4X2NtZHMyLmM6NjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmUgY2hhbmdlcyB0byBcIiUuKnNcIj8iCittc2dzdHIgIr2ruMSx5LGjtOa1vSBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMyLmM6NjI3IGV4X2RvY21kLmM6ODYxMgorbXNnaWQgIlVudGl0bGVkIgorbXNnc3RyICLOtMP8w/siCisKKyM6IGV4X2NtZHMyLmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiDS0bj8uMS5/bu6s+XH+CBcIiVzXCIgtavJ0M60saO05iAov8nTwyAhIMe/1sbWtNDQKSIKKworIzogZXhfY21kczIuYzo4MzIKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgItei0uI6INLRx9C7u7W9xuTL/Lu6s+XH+CAox+u87LLpIEF1dG9jb21tYW5kcyDT0M7etO3O8ykiCisKKyM6IGV4X2NtZHMyLmM6MTIwOAorbXNnaWQgIkUxNjM6IFRoZXJlIGlzIG9ubHkgb25lIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE2Mzog1rvT0NK7uPbOxLz+v8mx4LytIgorCisjOiBleF9jbWRzMi5jOjEyMTAKK21zZ2lkICJFMTY0OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGZpbGUiCittc2dzdHIgIkUxNjQ6INLRvq3U2rXa0ru49s7EvP7ByyIKKworIzogZXhfY21kczIuYzoxMjEyCittc2dpZCAiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiCittc2dzdHIgIkUxNjU6INLRvq3U2tfuuvPSu7j2zsS8/sHLIgorCisjOiBleF9jbWRzMi5jOjE2MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIgaW4gXCIlc1wiIgorbXNnc3RyICKy6dXS1tA6IFwiJXNcIiAtLSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiIKK21zZ3N0ciAisunV0tbQOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorbXNnc3RyICLU2iAncnVudGltZXBhdGgnIMDv1dKyu7W9IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxNzEyCittc2dpZCAiUnVuIE1hY3JvIgorbXNnc3RyICLWtNDQuuoiCisKKyM6IGV4X2NtZHMyLmM6MTgxNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc291cmNlIGEgZGlyZWN0b3J5OiBcIiVzXCIiCittc2dzdHIgIrK7xNzWtNDQxL/CvKO6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICKyu8Tc1rTQ0CBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIrXaICVsZCDQ0DogsrvE3Na00NAgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICLWtNDQIFwiJXNcIiDW0CIKKworIzogZXhfY21kczIuYzoxODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgIrXaICVsZCDQ0DogveHK+Na00NAgJXMiCisKKyM6IGV4X2NtZHMyLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzb3VyY2luZyAlcyIKK21zZ3N0ciAiveHK+Na00NAgJXMiCisKKyM6IGV4X2NtZHMyLmM6MjI3MgorbXNnaWQgIlcxNTogV2FybmluZzogV3JvbmcgbGluZSBzZXBhcmF0b3IsIF5NIG1heSBiZSBtaXNzaW5nIgorbXNnc3RyICJXMTU6INei0uI6ILTtzvO1xNDQt9a49NfWt/ujrL/JxNzKx8nZwcsgXk0iCisKKyM6IGV4X2NtZHMyLmM6MjMyMQorbXNnaWQgIkUxNjc6IDpzY3JpcHRlbmNvZGluZyB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjc6INTa1rTQ0CBzY3JpcHQgzsS8/s3isru/ycq508MgOnNjcmlwdGVuY29kaW5nIgorCisjOiBleF9jbWRzMi5jOjIzNTQKK21zZ2lkICJFMTY4OiA6ZmluaXNoIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2ODog1NrWtNDQIHNjcmlwdCDOxLz+zeKyu7/JyrnTwyA6ZmluaXNoIgorCisjOiBleF9jbWRzMi5jOjI4MjAKK21zZ2lkICJObyB0ZXh0IHRvIGJlIHByaW50ZWQiCittc2dzdHIgIsO709DSqrTy06G1xM7E19YiCisKKyM6IGV4X2NtZHMyLmM6Mjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyBwYWdlICVkICglZCUlKSIKK21zZ3N0ciAitPLTodbQOiC12iAlZCDSsyAoJWQlJSkiCisKKyM6IGV4X2NtZHMyLmM6MjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIgQ29weSAlZCBvZiAlZCIKK21zZ3N0ciAiuLTWxiAlZCAvICVkIgorCisjOiBleF9jbWRzMi5jOjI5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRlZDogJXMiCittc2dzdHIgItLRtPLToTogJXMiCisKKyM6IGV4X2NtZHMyLmM6Mjk2NgorbXNnaWQgIlByaW50aW5nIGFib3J0ZWQiCittc2dzdHIgIrTy06HW0LbPIgorCisjOiBleF9jbWRzMi5jOjMzNDQKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6INC0yOsgUG9zdFNjcmlwdCDOxLz+s/a07SIKKworIzogZXhfY21kczIuYzo0MDE5Cittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiCyu8TctPK/qiBQb3N0U2NyaXB0IMrks/bOxLz+IgorCisjOiBleF9jbWRzMi5jOjQwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogsrvE3LTyv6rOxLz+IFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTc6IENhbid0IHJlYWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NzogsrvE3LbBIFBvc3RTY3JpcHQg18rUtM7EvP4gXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQyNjYKK21zZ2lkICJTZW5kaW5nIHRvIHByaW50ZXIuLi4iCittc2dzdHIgIreiy821vbTy06G7+i4uLiIKKworIzogZXhfY21kczIuYzo0MjcwCittc2dpZCAiRTM2NTogRmFpbGVkIHRvIHByaW50IFBvc3RTY3JpcHQgZmlsZSIKK21zZ3N0ciAiRTM2NTogtPLToSBQb3N0U2NyaXB0IM7EvP7Kp7DcIgorCisjOiBleF9jbWRzMi5jOjQyNzIKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIiIKKworIzogZXhfY21kczIuYzo0NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICLEv8ewtcQgJXPT79HUOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDY1MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTk3OiBDYW5ub3Qgc2V0IGxhbmd1YWdlIHRvIFwiJXNcIiIKK21zZ3N0ciAiRTE5NzogsrvE3MnotqjT79HUzqogXCIlc1wiIgorCisjOiBleF9jbWRzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIgorbXNnc3RyICI8JXM+JXMlcyAgJWQsICDKrsH5vfjWxiAlMDJ4LCAgsMu9+NbGICUwM28iCisKKyM6IGV4X2NtZHMuYzo0MjgKK21zZ2lkICJFMTM0OiBNb3ZlIGxpbmVzIGludG8gdGhlbXNlbHZlcyIKK21zZ3N0ciAiRTEzNDogsrvE3LDR0NDSxrW9y/zX1NLRxNoiCisKKyM6IGV4X2NtZHMuYzo0OTcKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgItLR0sa2ryAxINDQIgorCisjOiBleF9jbWRzLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBtb3ZlZCIKK21zZ3N0ciAi0tGw4dLGICVsZCDQ0CIKKworIzogZXhfY21kcy5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgZmlsdGVyZWQiCittc2dzdHIgItLRtKbA7SAlbGQg0NAiCisKKyM6IGV4X2NtZHMuYzo5MTgKK21zZ2lkICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZCCyu7/J0tS4/LjEu7qz5cf4tcTE2sjdIgorCisjOiBleF9jbWRzLmM6MTAwMworbXNnaWQgIltObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZV1cbiIKK21zZ3N0ciAiW7j80MK688nQzrSxo7TmXVxuIgorCisjOiBleF9jbWRzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ2aW1pbmZvOiAlcyBpbiBsaW5lOiAiCittc2dzdHIgInZpbWluZm86ICVzINTa0NDW0DogIgorCisjOiBleF9jbWRzLmM6MTI1MworbXNnaWQgIkUxMzY6IHZpbWluZm86IFRvbyBtYW55IGVycm9ycywgc2tpcHBpbmcgcmVzdCBvZiBmaWxlIgorbXNnc3RyICJFMTM2OiB2aW1pbmZvOiC5/bbgtO3O8ywguvbC1M7EvP7G5NPgsr+31iIKKworIzogZXhfY21kcy5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiJXMlcyVzIgorbXNnc3RyICK2wcihIHZpbWluZm8gzsS8/iBcIiVzXCIlcyVzJXMiCisKKyM6IGV4X2NtZHMuYzoxMjgzCittc2dpZCAiIGluZm8iCittc2dzdHIgIiDQxc+iIgorCisjOiBleF9jbWRzLmM6MTI4NAorbXNnaWQgIiBtYXJrcyIKK21zZ3N0ciAiILHqvMciCisKKyM6IGV4X2NtZHMuYzoxMjg1Cittc2dpZCAiIEZBSUxFRCIKK21zZ3N0ciAiIMqnsNwiCisKKyM6IGV4X2NtZHMuYzoxMzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzc6IFZpbWluZm8gZmlsZSBpcyBub3Qgd3JpdGFibGU6ICVzIgorbXNnc3RyICJFMTM3OiBWaW1pbmZvIM7EvP6yu8Tc0LTI6zogJXMiCisKKyM6IGV4X2NtZHMuYzoxNTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzg6IENhbid0IHdyaXRlIHZpbWluZm8gZmlsZSAlcyEiCittc2dzdHIgIkUxMzg6ILK7xNzQtMjrIHZpbWluZm8gzsS8/iAlcyAhIgorCisjOiBleF9jbWRzLmM6MTUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiCittc2dzdHIgItC0yOsgdmltaW5mbyDOxLz+IFwiJXNcIiDW0CIKKworIy4gV3JpdGUgdGhlIGluZm86CisjOiBleF9jbWRzLmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICIjIFRoaXMgdmltaW5mbyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVmltICVzLlxuIgorbXNnc3RyICIjIHZpbWluZm8gzsS8/srH08kgdmltICVzIMv5svrJ+i5cbiIKKworIzogZXhfY21kcy5jOjE2MTIKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIMjnufvP69Kq19TQ0NDeuMTH68zYsfDQodDEo6FcbiIKKyJcbiIKKworIzogZXhfY21kcy5jOjE2MTQKK21zZ2lkICIjIFZhbHVlIG9mICdlbmNvZGluZycgd2hlbiB0aGlzIGZpbGUgd2FzIHdyaXR0ZW5cbiIKK21zZ3N0ciAiIyAnZW5jb2RpbmcnINTatMvOxLz+vajBosqxtcTWtVxuIgorCisjOiBleF9jbWRzLmM6MTcxMworbXNnaWQgIklsbGVnYWwgc3RhcnRpbmcgY2hhciIKK21zZ3N0ciAizt7Qp7XExvS2r9fWt/siCisKKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjA5NgorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiDE+tTawe3Su7j2u7qz5cf40rK809TYwcvV4rj2zsS8/iIKKworIzogZXhfY21kcy5jOjIxMzAKK21zZ2lkICJXcml0ZSBwYXJ0aWFsIGZpbGU/IgorbXNnc3RyICLSqtC0yOuyv7fWzsS8/sLwo78iCisKKyM6IGV4X2NtZHMuYzoyMTM3Cittc2dpZCAiRTE0MDogVXNlICEgdG8gd3JpdGUgcGFydGlhbCBidWZmZXIiCittc2dzdHIgIkUxNDA6IMfryrnTwyAhIMC00LTI67K/t9a7urPlx/giCisKKyM6IGV4X2NtZHMuYzoyMjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAi0qq4srjH0tG05tTatcTOxLz+IFwiJS4qc1wio78iCisKKyM6IGV4X2NtZHMuYzoyMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDE6IE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTE0MTogu7qz5cf4ICVsZCDDu9PQzsS8/sP7IgorCisjOiBleF9jbWRzLmM6MjMzMgorbXNnaWQgIkUxNDI6IEZpbGUgbm90IHdyaXR0ZW46IFdyaXRpbmcgaXMgZGlzYWJsZWQgYnkgJ3dyaXRlJyBvcHRpb24iCittc2dzdHIgIkUxNDI6IM7EvP7OtNC0yOujrNLyzqogJ3dyaXRlJyDRoc/uudix1SIKKworIzogZXhfY21kcy5jOjIzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIidyZWFkb25seScgb3B0aW9uIGlzIHNldCBmb3IgXCIlLipzXCIuXG4iCisiRG8geW91IHdpc2ggdG8gd3JpdGUgYW55d2F5PyIKK21zZ3N0ciAiIgorIlwiJS4qc1wiINLRyei2qCAncmVhZG9ubHknINGhz+4uXG4iCisiyLe2qNKquLK4x8Lwo78iCisKKyM6IGV4X2NtZHMuYzoyNTE3Cittc2dpZCAiRWRpdCBGaWxlIgorbXNnc3RyICKx4LytzsS8/iIKKworIzogZXhfY21kcy5jOjMwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MzogQXV0b2NvbW1hbmRzIHVuZXhwZWN0ZWRseSBkZWxldGVkIG5ldyBidWZmZXIgJXMiCittc2dzdHIgIkUxNDM6IEF1dG9jb21tYW5kcyDS4s3itdjJvrP90MK7urPlx/ggJXMiCisKKyM6IGV4X2NtZHMuYzozMTU2Cittc2dpZCAiRTE0NDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gOnoiCittc2dzdHIgIkUxNDQ6IDp6ILK7vdPK3LfHyv3X1rXEss7K/SIKKworIzogZXhfY21kcy5jOjMyNDEKK21zZ2lkICJFMTQ1OiBTaGVsbCBjb21tYW5kcyBub3QgYWxsb3dlZCBpbiBydmltIgorbXNnc3RyICJFMTQ1OiBydmltINbQvfvWucq508Mgc2hlbGwgw/zB7iIKKworIzogZXhfY21kcy5jOjMzNDgKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiDV/dTyse2078q9srvE3NPD19bEuLfWuPQgKD8pIgorCisjOiBleF9jbWRzLmM6MzY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHdpdGggJXMgKHkvbi9hL3EvbC9eRS9eWSk/IgorbXNnc3RyICLM5ru7zqogJXMgKHkvbi9hL3EvXkUvXlkpPyIKKworIzogZXhfY21kcy5jOjQwNTAKK21zZ2lkICIoSW50ZXJydXB0ZWQpICIKK21zZ3N0ciAiKNLR1tC2zykgIgorCisjOiBleF9jbWRzLmM6NDA1NAorbXNnaWQgIjEgc3Vic3RpdHV0aW9uIgorbXNnc3RyICLM5ru70rvX6SIKKworIzogZXhfY21kcy5jOjQwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIHN1YnN0aXR1dGlvbnMiCittc2dzdHIgIszmu7sgJWxkINfpIgorCisjOiBleF9jbWRzLmM6NDA1OQorbXNnaWQgIiBvbiAxIGxpbmUiCittc2dzdHIgIiDSu9DQ1tAiCisKKyM6IGV4X2NtZHMuYzo0MDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiBvbiAlbGQgbGluZXMiCittc2dzdHIgIiAlbGQg0NDW0CIKKworIzogZXhfY21kcy5jOjQxMTIKK21zZ2lkICJFMTQ3OiBDYW5ub3QgZG8gOmdsb2JhbCByZWN1cnNpdmUiCittc2dzdHIgIkUxNDc6IDpnbG9iYWwgsrvE3LXduenWtNDQIgorCisjOiBleF9jbWRzLmM6NDE0NworbXNnaWQgIkUxNDg6IFJlZ3VsYXIgZXhwcmVzc2lvbiBtaXNzaW5nIGZyb20gZ2xvYmFsIgorbXNnc3RyICJFMTQ4OiDDu9PQyrnTw7n91f3U8rHttO/KvSAoPykiCisKKyM6IGV4X2NtZHMuYzo0MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIsO/0rvQ0La81dKyu7W9xKPKvTogJXMiCisKKyM6IGV4X2NtZHMuYzo0Mjc3Cittc2dpZCAiIgorIlxuIgorIiMgTGFzdCBTdWJzdGl0dXRlIFN0cmluZzpcbiIKKyIkIgorbXNnc3RyICIiCisiXG4iCisiIyDHsNK71+nM5rT619a3+7SuOlxuIgorIiQiCisKKyM6IGV4X2NtZHMuYzo0Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDk6IFNvcnJ5LCBubyBoZWxwIGZvciAlcyIKK21zZ3N0ciAiRTE0OTogsafHuCwgw7vT0CAlcyC1xMu1w/ciCisKKyM6IGV4X2NtZHMuYzo0NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAisafHuCwg1dKyu7W9sO/W+s7EvP4gXCIlc1wiIgorCisjOiBleF9jbWRzLmM6NDg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiAlcyCyu8rHxL/CvCIKKworIzogZXhfY21kcy5jOjQ4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MjogQ2Fubm90IG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNTI6ILK7xNzS1NC0yOvEo8q9tPK/qiBcIiVzXCIiCisKKyM6IGV4X2NtZHMuYzo0ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTM6IFVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTUzOiCyu8TctsHIoc7EvP46ICVzIgorCisjOiBleF9jbWRzLmM6NDk3NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTU0OiBEdXBsaWNhdGUgdGFnIFwiJXNcIiBpbiBmaWxlICVzIgorbXNnc3RyICJFMTU0OiCx6sepKHRhZykgXCIlc1wiINTazsS8/iAlcyDA79bYuLSz9s/WtuC0ziIKKworIzogZXhfY21kcy5jOjUwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE2MDogVW5rbm93biBzaWduIGNvbW1hbmQ6ICVzIgorbXNnc3RyICJFMTYwOiDOtLao0uW1xCBzaWduIGNvbW1hbmQ6ICVzIgorCisjOiBleF9jbWRzLmM6NTA5OAorbXNnaWQgIkUxNTY6IE1pc3Npbmcgc2lnbiBuYW1lIgorbXNnc3RyICJFMTU2OiDIscnZIHNpZ24gw/uzxiIKKworIzogZXhfY21kcy5jOjUxNDQKK21zZ2lkICJFMjU1OiBUb28gbWFueSBzaWducyBkZWZpbmVkIgorbXNnc3RyICJFMzI2OiDV0rW9zKu24CBzaWducyIKKworIzogZXhfY21kcy5jOjUxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzOTogSW52YWxpZCBzaWduIHRleHQ6ICVzIgorbXNnc3RyICJFMjM5OiCyu9X9yLe1xCBzaWduIM7E19Y6ICVzIgorCisjOiBleF9jbWRzLmM6NTIxMCBleF9jbWRzLmM6NTM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU1OiBVbmtub3duIHNpZ246ICVzIgorbXNnc3RyICJFMTU1OiCyu9X9yLe1xCBzaWduOiAlcyIKKworIzogZXhfY21kcy5jOjUyNTYKK21zZ2lkICJFMTU5OiBNaXNzaW5nIHNpZ24gbnVtYmVyIgorbXNnc3RyICJFMTU5OiDIscnZIHNpZ24gbnVtYmVyIgorCisjOiBleF9jbWRzLmM6NTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU4OiBJbnZhbGlkIGJ1ZmZlciBuYW1lOiAlcyIKK21zZ3N0ciAiRTE1ODogu7qz5cf4w/uzxrTtzvM6ICVzIgorCisjOiBleF9jbWRzLmM6NTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU3OiBJbnZhbGlkIHNpZ24gSUQ6ICVsZCIKK21zZ3N0ciAiRTE1NzogU2lnbiBJRCC07c7zOiAlbGQiCisKKyM6IGV4X2NtZHMuYzo1NTQ2Cittc2dpZCAiW0RlbGV0ZWRdIgorbXNnc3RyICJb0tHJvrP9XSIKKworIzogZXhfZG9jbWQuYzo0OTEKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAivfjI6yBFeCDEo8q9LiDK5MjrIFwidmlzdWFcIiDS1LvYtb3V/bOjxKPKvS4iCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjUyNworbXNnaWQgIkF0IGVuZC1vZi1maWxlIgorbXNnc3RyICLS0bW9zsS8/r3hzrIiCisKKyM6IGV4X2RvY21kLmM6NjAyCittc2dpZCAiRTE2OTogQ29tbWFuZCB0b28gcmVjdXJzaXZlIgorbXNnc3RyICJFMTY5OiDD/MHutd256bLjyv25/bbgIgorCisjOiBleF9kb2NtZC5jOjkxMQorbXNnaWQgIkUxNzA6IE1pc3NpbmcgOmVuZHdoaWxlIgorbXNnc3RyICJFMTcwOiDIscnZIDplbmR3aGlsZSIKKworIzogZXhfZG9jbWQuYzo5MTMKK21zZ2lkICJFMTcxOiBNaXNzaW5nIDplbmRpZiIKK21zZ3N0ciAiRTE3MTogyLHJ2SA6ZW5kaWYiCisKKyM6IGV4X2RvY21kLmM6OTIzCittc2dpZCAiRW5kIG9mIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiw/zB7s7EvP694cr4IgorCisjOiBleF9kb2NtZC5jOjkyNAorbXNnaWQgIkVuZCBvZiBmdW5jdGlvbiIKK21zZ3N0ciAiuq/K/b3hzrIiCisKKyM6IGV4X2RvY21kLmM6MTM0NAorbXNnaWQgIkFtYmlndW91cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNvbW1hbmQiCittc2dzdHIgItPDu6e2qNLltcTD/MHuu+G77M/9IgorCisjOiBleF9kb2NtZC5jOjEzNTgKK21zZ2lkICJOb3QgYW4gZWRpdG9yIGNvbW1hbmQiCittc2dzdHIgIrK7ysex4Lytxve1xMP8we4iCisKKyM6IGV4X2RvY21kLmM6MTQ0MQorbXNnaWQgIkRvbid0IHBhbmljISIKK21zZ3N0ciAisrvSqr6qu8UhIgorCisjOiBleF9kb2NtZC5jOjE0NjAKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4iCittc2dzdHIgIta4tqjBy8/yx7Cyzr+8tcS3ts6nIgorCisjOiBleF9kb2NtZC5jOjE0NjkKK21zZ2lkICJCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4sIE9LIHRvIHN3YXAiCittc2dzdHIgIta4tqjBy8/yx7Cyzr+8tcS3ts6no6xPSyB0byBzd2FwIgorCisjOiBleF9kb2NtZC5jOjE1ODAKK21zZ2lkICJVc2UgdyBvciB3Pj4iCittc2dzdHIgIsfryrnTwyB3ILvyIHc+PiIKKworIzogZXhfZG9jbWQuYzozMDg2Cittc2dpZCAiRTMxOTogU29ycnksIHRoZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIgorbXNnc3RyICJFMzE5OiCxp8e4LCCxvsP8we7U2rTLsOaxvtbQzrTKtc/WIgorCisjOiBleF9kb2NtZC5jOjMyNTYKK21zZ2lkICJFMTcyOiBPbmx5IG9uZSBmaWxlIG5hbWUgYWxsb3dlZCIKK21zZ3N0ciAiRTE3Mjog1rvE3NPQ0ru49s7EvP7D+yIKKworIzogZXhfZG9jbWQuYzozODEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG1vcmUgZmlsZXMgdG8gZWRpdC4gIFF1aXQgYW55d2F5PyIKK21zZ3N0ciAiu7nT0CAlZCC49s7EvP7OtLHgvK0uIMi3tqjSqs3Ls/ajvyIKKworIzogZXhfZG9jbWQuYzozODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzM6ICVsZCBtb3JlIGZpbGVzIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6ILu509AgJWxkILj2zsS8/s60seC8rSIKKworIzogZXhfZG9jbWQuYzozOTExCittc2dpZCAiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogdXNlICEgdG8gcmVkZWZpbmUiCittc2dzdHIgIkUxNzQ6IMP8we7S0b6ttObU2iwgx+vKudPDICEgx7/WxtbY0MK2qNLlIgorCisjOiBleF9kb2NtZC5jOjQwMTYKK21zZ2lkICIiCisiXG4iCisiICAgIE5hbWUgICAgICAgIEFyZ3MgUmFuZ2UgQ29tcGxldGUgIERlZmluaXRpb24iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgw/uzxiAgICAgICAgss7K/SC3ts6nICDN6tX7ICAgICAgtqjS5SAgICAgICIKKworIzogZXhfZG9jbWQuYzo0MTA1Cittc2dpZCAiTm8gdXNlci1kZWZpbmVkIGNvbW1hbmRzIGZvdW5kIgorbXNnc3RyICLV0rK7tb3Tw7un19S2qNLltcTD/MHuIgorCisjOiBleF9kb2NtZC5jOjQxMzYKK21zZ2lkICJFMTc1OiBObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIgorbXNnc3RyICJFMTc1OiDDu9PQ1ri2qLXEyvTQ1CIKKworIzogZXhfZG9jbWQuYzo0MTg4Cittc2dpZCAiRTE3NjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJFMTc2OiCyu9X9yLe1xLLOyv249sr9IgorCisjOiBleF9kb2NtZC5jOjQyMDMKK21zZ2lkICJFMTc3OiBDb3VudCBjYW5ub3QgYmUgc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFMTc3OiCyu8Tc1ri2qMG9tM4iCisKKyM6IGV4X2RvY21kLmM6NDIxMworbXNnaWQgIkUxNzg6IEludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgY291bnQiCittc2dzdHIgIkUxNzg6ILzGyv21xMixyqHWtbK71f3ItyIKKworIzogZXhfZG9jbWQuYzo0MjQxCittc2dpZCAiRTE3OTogYXJndW1lbnQgcmVxdWlyZWQgZm9yIGNvbXBsZXRlIgorbXNnc3RyICJFMTc5OiDWuMHu0OjSqrLOyv2yxcTczeqzySIKKworIzogZXhfZG9jbWQuYzo0MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODA6IEludmFsaWQgY29tcGxldGUgdmFsdWU6ICVzIgorbXNnc3RyICJFMTgwOiCyu83q1fu1xNa1OiAnJXMnIgorCisjOiBleF9kb2NtZC5jOjQyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MTogSW52YWxpZCBhdHRyaWJ1dGU6ICVzIgorbXNnc3RyICJFMTgxOiCyu9X9yLe1xMr00NQ6ICVzIgorCisjOiBleF9kb2NtZC5jOjQzMDkKK21zZ2lkICJFMTgyOiBJbnZhbGlkIGNvbW1hbmQgbmFtZSIKK21zZ3N0ciAiRTE4Mjogw/zB7sP7s8ayu9X9yLciCisKKyM6IGV4X2RvY21kLmM6NDMyNAorbXNnaWQgIkUxODM6IFVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciIKK21zZ3N0ciAiRTE4Mzog08O7p9fUtqjS5cP8we6x2NDr0tS089C019bEuL+qyrwiCisKKyM6IGV4X2RvY21kLmM6NDM5MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTg0OiBObyBzdWNoIHVzZXItZGVmaW5lZCBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE4NDogw7vT0NPDu6fX1Lao0uW1xMP8we6juiAlcyIKKworIzogZXhfZG9jbWQuYzo0ODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODU6IENhbm5vdCBmaW5kIGNvbG9yIHNjaGVtZSAlcyIKK21zZ3N0ciAiRTE4NTog1dKyu7W90dXJq9H5yr0gJXMiCisKKyM6IGV4X2RvY21kLmM6NDg1MgorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICLE47rDLCBWaW0g08O7p6OhIgorCisjOiBleF9kb2NtZC5jOjU1NDkKK21zZ2lkICJFZGl0IEZpbGUgaW4gbmV3IHdpbmRvdyIKK21zZ3N0ciAi1NrQwrSwv9qx4LytzsS8/iIKKworIzogZXhfZG9jbWQuYzo1ODE1Cittc2dpZCAiTm8gc3dhcCBmaWxlIgorbXNnc3RyICLO3r27u7vOxLz+IgorCisjOiBleF9kb2NtZC5jOjU5MTkKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAiuL28087EvP4iCisKKyM6IGV4X2RvY21kLmM6NTk3OAorbXNnaWQgIkUxODY6IE5vIHByZXZpb3VzIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE4Njogx7DSu7j2xL/CvLK7tObU2iIKKworIzogZXhfZG9jbWQuYzo2MDU1Cittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4NzogsrvE3Mq2sfC1xLHqvMciCisKKyM6IGV4X2RvY21kLmM6NjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIrSwv9rOu9bDOiBYICVkLCBZICVkIgorCisjOiBleF9kb2NtZC5jOjYxNzgKK21zZ2lkICJFMTg4OiBPYnRhaW5pbmcgd2luZG93IHBvc2l0aW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiRTE4ODog1NrE+rXExr3MqMnPsrvE3LvxtcO0sL/azrvWwyIKKworIzogZXhfZG9jbWQuYzo2NDQ0Cittc2dpZCAiU2F2ZSBSZWRpcmVjdGlvbiIKK21zZ3N0ciAisaO05tbYtqjP8iIKKworIzogZXhfZG9jbWQuYzo2NTkzCittc2dpZCAiU2F2ZSBWaWV3IgorbXNnc3RyICKxo7TmytPNvCIKKworIzogZXhfZG9jbWQuYzo2NTk0Cittc2dpZCAiU2F2ZSBTZXNzaW9uIgorbXNnc3RyICKxo7Tmu+G7sCIKKworIzogZXhfZG9jbWQuYzo2NTk2Cittc2dpZCAiU2F2ZSBTZXR1cCIKK21zZ3N0ciAisaO05snotqgiCisKKyM6IGV4X2RvY21kLmM6Njc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg5OiBcIiVzXCIgZXhpc3RzICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxODk6IFwiJXNcIiDS0bTm1NogKMfr08MgISDHv9bG1rTQ0CkiCisKKyM6IGV4X2RvY21kLmM6Njc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxOTA6ILK7xNzS1NC0yOvEo8q9tPK/qiBcIiVzXCIiCisKKyMuIHNldCBtYXJrCisjOiBleF9kb2NtZC5jOjY3NzQKK21zZ2lkICJFMTkxOiBBcmd1bWVudCBtdXN0IGJlIGEgbGV0dGVyIG9yIGZvcndhcmQvYmFja3dhcmQgcXVvdGUiCittc2dzdHIgIkUxOTE6ILLOyv2x2NDrysfTos7E19bEuLvyz/LHsC+687XE0v26xSIKKworIzogZXhfZG9jbWQuYzo2ODAzCittc2dpZCAiRTE5MjogUmVjdXJzaXZlIHVzZSBvZiA6bm9ybWFsIHRvbyBkZWVwIgorbXNnc3RyICJFMTkyOiA6bm9ybWFsILXduemy48r9uf3J7iIKKworIzogZXhfZG9jbWQuYzo3MTcxCittc2dpZCAiOmlmIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIjppZiCy48r9uf3J7iIKKworIzogZXhfZG9jbWQuYzo3MjA2Cittc2dpZCAiOmVuZGlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICI6ZW5kaWYgyLHJ2bbU06a1xCA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzIyNgorbXNnaWQgIjplbHNlIHdpdGhvdXQgOmlmIgorbXNnc3RyICI6ZWxzZSDIscnZttTTprXEIDppZiIKKworIzogZXhfZG9jbWQuYzo3MjI4Cittc2dpZCAiOmVsc2VpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVsc2VpZiDIscnZttTTprXEIDppZiIKKworIzogZXhfZG9jbWQuYzo3MjgwCittc2dpZCAiOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIjp3aGlsZSCy48r9uf3J7iIKKworIzogZXhfZG9jbWQuYzo3MzI2Cittc2dpZCAiOmNvbnRpbnVlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICI6Y29udGludWUgyLHJ2bbU06a1xCA6d2hpbGUiCisKKyM6IGV4X2RvY21kLmM6NzM1MworbXNnaWQgIjpicmVhayB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiOmJyZWFrIMixydm21NOmtcQgOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjczNzYgZXhfZG9jbWQuYzo3MzgxCittc2dpZCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICI6ZW5kd2hpbGUgyLHJ2bbU06a1xCA6d2hpbGUiCisKKyM6IGV4X2RvY21kLmM6NzQwMgorbXNnaWQgIkUxOTM6IDplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxOTM6IDplbmRmdW5jdGlvbiCx2NDr1Nq6r8r9xNqyv8q508MiCisKKyM6IGV4X2RvY21kLmM6NzU4MgorbXNnaWQgIkUxOTQ6IE5vIGFsdGVybmF0ZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgJyMnIgorbXNnc3RyICJFMTk0OiDDu9PQICcjJyC/yczmtPq1xM7EvP7D+yIKKworIzogZXhfZG9jbWQuYzo3NjEzCittc2dpZCAibm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIgorbXNnc3RyICLDu9PQIEF1dG9jb21tYW5kIM7EvP7D+9LUzOa7uyBcIjxhZmlsZT5cIiIKKworIzogZXhfZG9jbWQuYzo3NjIxCittc2dpZCAibm8gYXV0b2NvbW1hbmQgYnVmZmVyIG51bWJlciB0byBzdWJzdGl0dXRlIGZvciBcIjxhYnVmPlwiIgorbXNnc3RyICLDu9PQIEF1dG9jb21tYW5kILu6s+XH+MP7s8bS1Mzmu7sgXCI8YWJ1Zj5cIiIKKworIzogZXhfZG9jbWQuYzo3NjMyCittc2dpZCAibm8gYXV0b2NvbW1hbmQgbWF0Y2ggbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhbWF0Y2g+XCIiCittc2dzdHIgIsO709AgQXV0b2NvbW1hbmQgTWF0Y2ggbmFtZSDS1Mzmu7sgXCI8YW1hdGNoPlwiIgorCisjOiBleF9kb2NtZC5jOjc2NDIKK21zZ2lkICJubyA6c291cmNlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxzZmlsZT5cIiIKK21zZ3N0ciAiw7vT0CA6c291cmNlIM7EvP7D+9LUzOa7uyBcIjxzZmlsZT5cIiIKKworIzogZXhfZG9jbWQuYzo3NjgzCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIkVtcHR5IGZpbGUgbmFtZSBmb3IgJyUnIG9yICcjJywgb25seSB3b3JrcyB3aXRoIFwiOnA6aFwiIgorbXNnc3RyICInJScgu/IgJyMnINa4z/K/1c7EvP7D+6Os1rvE3NPD7LYgXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6NzY4NQorbXNnaWQgIkV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIsrkyOvOqr/V19a3+7SuIgorCisjOiBleF9kb2NtZC5jOjg1OTQKK21zZ2lkICJFMTk1OiBDYW5ub3Qgb3BlbiB2aW1pbmZvIGZpbGUgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxOTU6ILK7xNy2wcihIHZpbWluZm8iCisKKyM6IGV4X2RvY21kLmM6ODc2NworbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5Njogsb6w5rG+zt64tLrP19a3+yhkaWdyYXBoKSIKKworIzogZXhfZ2V0bG4uYzoyNzg1Cittc2dpZCAidGFnbmFtZSIKK21zZ3N0ciAiserHqcP7s8YiCisKKyM6IGV4X2dldGxuLmM6Mjc4OAorbXNnaWQgIiBraW5kIGZpbGVcbiIKK21zZ3N0ciAiwODOxLz+XG4iCisKKyM6IGV4X2dldGxuLmM6Mzk5NworbXNnaWQgIidoaXN0b3J5JyBvcHRpb24gaXMgemVybyIKK21zZ3N0ciAi0aHP7iAnaGlzdG9yeScgysfB4yIKKworIzogZXhfZ2V0bG4uYzo0MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjICVzIEhpc3RvcnkgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyAlcyDA+sq3vMfCvCAotNPQwrW9vskpOlxuIgorCisjOiBleF9nZXRsbi5jOjQyMzgKK21zZ2lkICJDb21tYW5kIExpbmUiCittc2dzdHIgIsP8we7Q0CIKKworIzogZXhfZ2V0bG4uYzo0MjM5Cittc2dpZCAiU2VhcmNoIFN0cmluZyIKK21zZ3N0ciAisunV0tfWt/u0riIKKworIzogZXhfZ2V0bG4uYzo0MjQwCittc2dpZCAiRXhwcmVzc2lvbiIKK21zZ3N0ciAise2078q9IgorCisjOiBleF9nZXRsbi5jOjQyNDEKK21zZ2lkICJJbnB1dCBMaW5lIgorbXNnc3RyICLK5Mjr0NAiCisKKyM6IGV4X2dldGxuLmM6NDI3MQorbXNnaWQgIkUxOTg6IGNtZF9wY2hhciBiZXlvbmQgdGhlIGNvbW1hbmQgbGVuZ3RoIgorbXNnc3RyICJFMTk4OiBjbWRfcGNoYXIgs6y5/cP8we6zpLbIIgorCisjOiBleF9nZXRsbi5jOjQ0MzUKK21zZ2lkICJFMTk5OiBBY3RpdmUgd2luZG93IG9yIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICJFMTk5OiDS0cm+s/277ravtLC/2rvyu7q05iIKKworIzogZmlsZWlvLmM6MzQ3Cittc2dpZCAiSWxsZWdhbCBmaWxlIG5hbWUiCittc2dzdHIgIrK71f3It7XEzsS8/sP7IgorCisjOiBmaWxlaW8uYzozNzEgZmlsZWlvLmM6NDk1IGZpbGVpby5jOjI0OTEgZmlsZWlvLmM6MjUyOQorbXNnaWQgImlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICLKx8S/wrwiCisKKyM6IGZpbGVpby5jOjM3MworbXNnaWQgImlzIG5vdCBhIGZpbGUiCittc2dzdHIgIrK7ysfOxLz+IgorCisjOiBmaWxlaW8uYzo1MTUgZmlsZWlvLmM6MzU4MQorbXNnaWQgIltOZXcgRmlsZV0iCittc2dzdHIgIlvOtMP8w/tdIgorCisjOiBmaWxlaW8uYzo1MzIKK21zZ2lkICJbUGVybWlzc2lvbiBEZW5pZWRdIgorbXNnc3RyICJbyKjP3rK71+NdIgorCisjOiBmaWxlaW8uYzo2MjQKK21zZ2lkICJFMjAwOiAqUmVhZFByZSBhdXRvY29tbWFuZHMgbWFkZSB0aGUgZmlsZSB1bnJlYWRhYmxlIgorbXNnc3RyICJFMjAwOiAqUmVhZFByZSBBdXRvY29tbWFuZCDKubPM0PKyu8TctsHIobTLzsS8/iIKKworIzogZmlsZWlvLmM6NjI2Cittc2dpZCAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTIwMTogKkZpbHRlciogQXV0b2NvbW1hbmQgsru/ydLUuPy4xLu6s+XH+LXExNrI3SIKKworIzogZmlsZWlvLmM6NjQ2Cittc2dpZCAiVmltOiBSZWFkaW5nIGZyb20gc3RkaW4uLi5cbiIKK21zZ3N0ciAiVmltOiC007Hq17zK5MjrtsHIoS4uLlxuIgorCisjOiBmaWxlaW8uYzo2NTIKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIrTTserXvMrkyOu2wS4uLiIKKworIy4gUmUtb3BlbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBmYWlsZWQhCisjOiBmaWxlaW8uYzo4NzYKK21zZ2lkICJFMjAyOiBDb252ZXJzaW9uIG1hZGUgZmlsZSB1bnJlYWRhYmxlISIKK21zZ3N0ciAiRTIwMjog16q7u7TtzvMiCisKKyM6IGZpbGVpby5jOjE3MzIKK21zZ2lkICJbZmlmby9zb2NrZXRdIgorbXNnc3RyICJbZmlmby9zb2NrZXRdIgorCisjOiBmaWxlaW8uYzoxNzM5Cittc2dpZCAiW2ZpZm9dIgorbXNnc3RyICJbZmlmb10iCisKKyM6IGZpbGVpby5jOjE3NDYKK21zZ2lkICJbc29ja2V0XSIKK21zZ3N0ciAiW3NvY2tldF0iCisKKyM6IGZpbGVpby5jOjE3NTQKK21zZ2lkICJbUk9dIgorbXNnc3RyICJb1ru2wV0iCisKKyM6IGZpbGVpby5jOjE3NjQKK21zZ2lkICJbQ1IgbWlzc2luZ10iCittc2dzdHIgIlvIscnZQ1JdJyIKKworIzogZmlsZWlvLmM6MTc2OQorbXNnaWQgIltOTCBmb3VuZF0iCittc2dzdHIgIlvV0rW9TkxdIgorCisjOiBmaWxlaW8uYzoxNzc0Cittc2dpZCAiW2xvbmcgbGluZXMgc3BsaXRdIgorbXNnc3RyICJbt9a47rn9s6TQ0F0iCisKKyM6IGZpbGVpby5jOjE3ODAgZmlsZWlvLmM6MzU2NQorbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW86016q7u10iCisKKyM6IGZpbGVpby5jOjE3ODUgZmlsZWlvLmM6MzU3MAorbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJb0tHXqru7XSIKKworIzogZmlsZWlvLmM6MTc5MiBmaWxlaW8uYzozNTk1Cittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJb0tG808PcXSIKKworIzogZmlsZWlvLmM6MTc5OQorbXNnaWQgIltDT05WRVJTSU9OIEVSUk9SXSIKK21zZ3N0ciAi16q7u7TtzvMiCisKKyM6IGZpbGVpby5jOjE4MDYKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbtsG07c7zXSIKKworIzogZmlsZWlvLmM6MjAxMworbXNnaWQgIkNhbid0IGZpbmQgdGVtcCBmaWxlIGZvciBjb252ZXJzaW9uIgorbXNnc3RyICLV0rK7tb3Xqru708O1xMHZyrHOxLz+IgorCisjOiBmaWxlaW8uYzoyMDIwCittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICLX1rf7vK/Xqru7tO3O8yIKKworIzogZmlsZWlvLmM6MjAyMworbXNnaWQgImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciCittc2dzdHIgIrK7xNy2wcihICdjaGFyY29udmVydCcgtcTK5LP2IgorCisjOiBmaWxlaW8uYzoyNDA3Cittc2dpZCAiRTIwMzogQXV0b2NvbW1hbmRzIGRlbGV0ZWQgb3IgdW5sb2FkZWQgYnVmZmVyIHRvIGJlIHdyaXR0ZW4iCittc2dzdHIgIkUyMDM6IEF1dG9jb21tYW5kIMm+s/278srNt8XBy9Kq0LTI67XEu7qz5cf4IgorCisjOiBmaWxlaW8uYzoyNDMwCittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IEF1dG9jb21tYW5kINLizeK12LjEseTBy9DQusUiCisKKyM6IGZpbGVpby5jOjI0OTYgZmlsZWlvLmM6MjUxMworbXNnaWQgImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIgorbXNnc3RyICKyu8rHzsS8/rvyv8nQtLXEyeixuCIKKworIzogZmlsZWlvLmM6MjU1NQorbXNnaWQgImlzIHJlYWQtb25seSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICLKx9a7tsHOxLz+ICjH68q508MgISDHv9bG1rTQ0CkiCisKKyM6IGZpbGVpby5jOjI4NTEKK21zZ2lkICJDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICKyu8Tc0LSxuLfdzsS8/iAox+vKudPDICEgx7/Wxta00NApIgorCisjOiBmaWxlaW8uYzoyODYzCittc2dpZCAiQ2xvc2UgZXJyb3IgZm9yIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIrnYsdWxuLfdzsS8/rP2tO0gKMfryrnTwyAhIMe/1sbWtNDQKSIKKworIzogZmlsZWlvLmM6Mjg2NQorbXNnaWQgIkNhbid0IHJlYWQgZmlsZSBmb3IgYmFja3VwICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIrK7xNy2wcihzsS8/tLUuamxuLfdICjH68q508MgISDHv9bG1rTQ0CkiCisKKyM6IGZpbGVpby5jOjI4ODEKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIrK7xNy0tL2osbi33c7EvP4gKMfryrnTwyAhIMe/1sbWtNDQKSIKKworIzogZmlsZWlvLmM6Mjk3MAorbXNnaWQgIkNhbid0IG1ha2UgYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAisrvE3Nf3sbi33c7EvP4gKMfryrnTwyAhIMe/1sbWtNDQKSIKKworIzogZmlsZWlvLmM6MzAzMgorbXNnaWQgIlRoZSByZXNvdXJjZSBmb3JrIHdpbGwgYmUgbG9zdCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJSZXNvdXJjZSBmb3JrILvhz/vKpyAox+vKudPDICEgx7/Wxta00NApIgorCisjOiBmaWxlaW8uYzozMTIxCittc2dpZCAiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTQ6INXSsru1vdC0yOvTw7XEvbu7u87EvP4iCisKKyM6IGZpbGVpby5jOjMxMzkKK21zZ2lkICJFMjEzOiBDYW5ub3QgY29udmVydCAodXNlICEgdG8gd3JpdGUgd2l0aG91dCBjb252ZXJzaW9uKSIKK21zZ3N0ciAiRTIxMzogsrvE3Nequ7sgKMfryrnTwyAhIMe/1sayu9equ7vQtMjrKSIKKworIzogZmlsZWlvLmM6MzE3NgorbXNnaWQgIkUxNjY6IENhbid0IG9wZW4gbGlua2VkIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNjY6ILK7xNzS1NC0yOvEo8q9tPK/qsG0vdPOxLz+IgorCisjOiBmaWxlaW8uYzozMTgwCittc2dpZCAiRTIxMjogQ2FuJ3Qgb3BlbiBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjEyOiCyu8Tc0tTQtMjrxKPKvbTyv6oiCisKKyM6IGZpbGVpby5jOjM0MjMKK21zZ2lkICJDbG9zZSBmYWlsZWQiCittc2dzdHIgIrnYsdXKp7DcIgorCisjOiBmaWxlaW8uYzozNDgxCittc2dpZCAid3JpdGUgZXJyb3IsIGNvbnZlcnNpb24gZmFpbGVkIgorbXNnc3RyICKyu8Tc0LTI6yAtLSDXqru7yqew3CIKKworIzogZmlsZWlvLmM6MzQ4NworbXNnaWQgIndyaXRlIGVycm9yIChmaWxlIHN5c3RlbSBmdWxsPykiCittc2dzdHIgItC0yOu07c7zICjOxLz+z7XNs9LRwvqjvykiCisKKyM6IGZpbGVpby5jOjM1NjAKK21zZ2lkICIgQ09OVkVSU0lPTiBFUlJPUiIKK21zZ3N0ciAi16q7u7TtzvMiCisKKyM6IGZpbGVpby5jOjM1NzYKK21zZ2lkICJbRGV2aWNlXSIKK21zZ3N0ciAiW8nosbhdIgorCisjOiBmaWxlaW8uYzozNTgxCittc2dpZCAiW05ld10iCittc2dzdHIgIlvQwl0iCisKKyM6IGZpbGVpby5jOjM2MDMKK21zZ2lkICIgW2FdIgorbXNnc3RyICJbYV0iCisKKyM6IGZpbGVpby5jOjM2MDMKK21zZ2lkICIgYXBwZW5kZWQiCittc2dzdHIgIiDS0bi9vNMiCisKKyM6IGZpbGVpby5jOjM2MDUKK21zZ2lkICIgW3ddIgorbXNnc3RyICJbd10iCisKKyM6IGZpbGVpby5jOjM2MDUKK21zZ2lkICIgd3JpdHRlbiIKK21zZ3N0ciAiINLR0LTI6yIKKworIzogZmlsZWlvLmM6MzY1NQorbXNnaWQgIkUyMDU6IFBhdGNobW9kZTogY2FuJ3Qgc2F2ZSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA1OiBQYXRjaCDEo8q9OiCyu8TctKK05tStyrzOxLz+IgorCisjOiBmaWxlaW8uYzozNjc3Cittc2dpZCAiRTIwNjogcGF0Y2htb2RlOiBjYW4ndCB0b3VjaCBlbXB0eSBvcmlnaW5hbCBmaWxlIgorbXNnc3RyICJFMjA2OiBQYXRjaCDEo8q9OiCyu8TcuMSx5L/VtcTUrcq8zsS8/iIKKworIzogZmlsZWlvLmM6MzY5MgorbXNnaWQgIkUyMDc6IENhbid0IGRlbGV0ZSBiYWNrdXAgZmlsZSIKK21zZ3N0ciAiRTIwNzogsrvE3Mm+s/2xuLfdzsS8/iIKKworIzogZmlsZWlvLmM6Mzc0NAorbXNnaWQgIiIKKyJcbiIKKyJXQVJOSU5HOiBPcmlnaW5hbCBmaWxlIG1heSBiZSBsb3N0IG9yIGRhbWFnZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIr6vuOY6INStyrzOxLz+tqrKp7vyy/C7tVxuIgorCisjOiBmaWxlaW8uYzozNzQ2Cittc2dpZCAiZG9uJ3QgcXVpdCB0aGUgZWRpdG9yIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIKK21zZ3N0ciAi1NrOxLz+1f3It9C0yOvHsMfrzvDNy7P2seC8rcb3ISIKKworIzogZmlsZWlvLmM6MzgyNgorbXNnaWQgIltkb3NdIgorbXNnc3RyICJbZG9zXSIKKworIzogZmlsZWlvLmM6MzgyNgorbXNnaWQgIltkb3MgZm9ybWF0XSIKK21zZ3N0ciAiW2RvcyC48cq9XSIKKworIzogZmlsZWlvLmM6MzgzMworbXNnaWQgIlttYWNdIgorbXNnc3RyICJbbWFjXSIKKworIzogZmlsZWlvLmM6MzgzMworbXNnaWQgIlttYWMgZm9ybWF0XSIKK21zZ3N0ciAiW21hYyC48cq9XSIKKworIzogZmlsZWlvLmM6Mzg0MAorbXNnaWQgIlt1bml4XSIKK21zZ3N0ciAiW3VuaXhdIgorCisjOiBmaWxlaW8uYzozODQwCittc2dpZCAiW3VuaXggZm9ybWF0XSIKK21zZ3N0ciAiW3VuaXgguPHKvV0iCisKKyM6IGZpbGVpby5jOjM4NjcKK21zZ2lkICIxIGxpbmUsICIKK21zZ3N0ciAiMSDQ0CwgIgorCisjOiBmaWxlaW8uYzozODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcywgIgorbXNnc3RyICIlbGQg0NAsICIKKworIzogZmlsZWlvLmM6Mzg3MgorbXNnaWQgIjEgY2hhcmFjdGVyIgorbXNnc3RyICLSu7j219a3+yIKKworIzogZmlsZWlvLmM6Mzg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxkuPbX1rf7IgorCisjOiBmaWxlaW8uYzozODg0Cittc2dpZCAiW25vZW9sXSIKK21zZ3N0ciAiW25vZW9sXSIKKworIzogZmlsZWlvLmM6Mzg4NAorbXNnaWQgIltJbmNvbXBsZXRlIGxhc3QgbGluZV0iCittc2dzdHIgIlvX7rrz0rvQ0LK7zerV+10iCisKKyMuIGRvbid0IG92ZXJ3cml0ZSBtZXNzYWdlcyBoZXJlCisjLiBtdXN0IGdpdmUgdGhpcyBwcm9tcHQKKyMuIGRvbid0IHVzZSBlbXNnKCkgaGVyZSwgZG9uJ3Qgd2FudCB0byBmbHVzaCB0aGUgYnVmZmVycworIzogZmlsZWlvLmM6MzkwMworbXNnaWQgIldBUk5JTkc6IFRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgcmVhZGluZyBpdCEhISIKK21zZ3N0ciAivq+45jogsb7OxLz+19TJz7TOtsHI67rz0tGx5LavISEhIgorCisjOiBmaWxlaW8uYzozOTA1Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0IgorbXNnc3RyICLIt7ao0qrQtMjrwvAiCisKKyM6IGZpbGVpby5jOjQ4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiCittc2dzdHIgIkUyMDg6INC0yOvOxLz+IFwiJXNcIiC07c7zIgorCisjOiBmaWxlaW8uYzo0ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDk6IEVycm9yIGNsb3NpbmcgXCIlc1wiIgorbXNnc3RyICJFMjA5OiC52LHVzsS8/iBcIiVzXCIgtO3O8yIKKworIzogZmlsZWlvLmM6NDg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogtsHIoc7EvP4gXCIlc1wiILTtzvMiCisKKyM6IGZpbGVpby5jOjUwMzUKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIMm+s/27urPlx/giCisKKyM6IGZpbGVpby5jOjUwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMTogV2FybmluZzogRmlsZSBcIiVzXCIgbm8gbG9uZ2VyIGF2YWlsYWJsZSIKK21zZ3N0ciAiRTIxMTogvq+45jogzsS8/iBcIiVzXCIg0tG+rbK7tObU2iIKKworIzogZmlsZWlvLmM6NTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVzEyOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBhbmQgdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCBpbiBWaW0gYXMgIgorIndlbGwiCittc2dzdHIgIlcxMjogvq+45jogzsS8/iBcIiVzXCIg19TJz7TOtsHI67rz0tGx5LavLCC2+MfSseC8rdbQtcS7urPlx/jSsrj8tq/ByyIKKworIzogZmlsZWlvLmM6NTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJXMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzExOiC+r7jmOiDOxLz+IFwiJXNcIiDX1MnPtM62wcjruvPS0bjEseQiCisKKyM6IGZpbGVpby5jOjUwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzE2OiBXYXJuaW5nOiBNb2RlIG9mIGZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzE2OiC+r7jmOiDOxLz+IFwiJXNcIiDX1MnPtM62wcjruvPS0bjEseQiCisKKyM6IGZpbGVpby5jOjUwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzEzOiC+r7jmOiDOxLz+IFwiJXNcIiDU2r+qyryx4LytuvPT1rG7tLS9qMHLIgorCisjOiBmaWxlaW8uYzo1MDg4Cittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAivq+45iIKKworIzogZmlsZWlvLmM6NTA4OQorbXNnaWQgIiIKKyImT0tcbiIKKyImTG9hZCBGaWxlIgorbXNnc3RyICIiCisiyLe2qCgmTylcbiIKKyK809TYzsS8/igmTCkiCisKKyM6IGZpbGVpby5jOjUxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6ILK7xNzW2NDCvNPU2CBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU2NzAKK21zZ2lkICItLURlbGV0ZWQtLSIKK21zZ3N0ciAiLS3S0cm+s/0tLSIKKworIy4gdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3QKKyM6IGZpbGVpby5jOjU4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NzogTm8gc3VjaCBncm91cDogXCIlc1wiIgorbXNnc3RyICJFMzY3OiDX6bK7tObU2jogXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyICo6ICVzIgorbXNnc3RyICJFMjE1OiAqILrzw+bT0LK71f3It7XE19a3+zogJXMiCisKKyM6IGZpbGVpby5jOjU5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IM7etMvKwrz+OiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo2MTE1Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKKworIzogZmlsZWlvLmM6NjM4NgorbXNnaWQgIkUyMTc6IENhbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZXZlbnRzIgorbXNnc3RyICJFMjE3OiCyu8TcttTL+dPQysK8/ta00NAgYXV0b2NvbW1hbmQiCisKKyM6IGZpbGVpby5jOjY0MDkKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgItXSsru1vbbU06a1xCBhdXRvY29tbWFuZCIKKworIzogZmlsZWlvLmM6NjY4MQorbXNnaWQgIkUyMTg6IGF1dG9jb21tYW5kIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkUyMTg6IGF1dG9jb21tYW5kILLjyv25/cnuIgorCisjOiBmaWxlaW8uYzo2OTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIEF1dG8gY29tbWFuZHMgZm9yIFwiJXNcIiIKK21zZ3N0ciAiJXMgQXV0byBjb21tYW5kczogXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAi1rTQ0CAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBmaWxlaW8uYzo3MDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF1dG9jb21tYW5kICVzIgorbXNnc3RyICJhdXRvY29tbWFuZCAlcyIKKworIzogZmlsZWlvLmM6NzU2NgorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IMixydkgey4iCisKKyM6IGZpbGVpby5jOjc1NjgKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiDIscnZIH0uIgorCisjOiBmb2xkLmM6NjYKK21zZ2lkICJObyBmb2xkIGZvdW5kIgorbXNnc3RyICLV0rK7tb3IzrrOIGZvbGQiCisKKyM6IGZvbGQuYzo1NTQKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogsrvE3NTaxL/HsLXEICdmb2xkbWV0aG9kJyDPwrS0vaggZm9sZCIKKworIzogZm9sZC5jOjU1NgorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiCyu8Tc1NrEv8ewtcQgJ2ZvbGRtZXRob2QnIM/Cyb6z/SBmb2xkIgorCisjOiBmb2xkLmM6MTcwMAorbXNnaWQgIkUyMjE6ICdjb21tZW50c3RyaW5nJyBpcyBlbXB0eSIKK21zZ3N0ciAiRTIyMTog0aHP7iAnY29tbWVudHN0cmluZycgzrTJ6LaoIgorCisjOiBnZXRjaGFyLmM6MjY4Cittc2dpZCAiRTIyMjogQWRkIHRvIHJlYWQgYnVmZmVyIgorbXNnc3RyICJFMjIyOiC808jrtsG7urPl1tAiCisKKyM6IGdldGNoYXIuYzoyMTE0Cittc2dpZCAiRTIyMzogcmVjdXJzaXZlIG1hcHBpbmciCittc2dzdHIgIkUyMjM6ILXduekgbWFwcGluZyIKKworIzogZ2V0Y2hhci5jOjI5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNDogZ2xvYmFsIGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjQ6ICVzINLRvq3T0MirvtYgYWJicmV2aWF0aW9uIMHLIgorCisjOiBnZXRjaGFyLmM6Mjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjI1OiBnbG9iYWwgbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjU6ICVzINLRvq3T0MirvtYgbWFwcGluZyDByyIKKworIzogZ2V0Y2hhci5jOjMwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogJXMg0tG+rdPQIGFiYnJldmlhdGlvbiDByyIKKworIzogZ2V0Y2hhci5jOjMwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNzogbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjc6ICVzILXEIG1hcHBpbmcg0tG+rbTm1NoiCisKKyM6IGdldGNoYXIuYzozMTYzCittc2dpZCAiTm8gYWJicmV2aWF0aW9uIGZvdW5kIgorbXNnc3RyICLV0rK7tb3L9dC0IgorCisjOiBnZXRjaGFyLmM6MzE2NQorbXNnaWQgIk5vIG1hcHBpbmcgZm91bmQiCittc2dzdHIgIsO709DV4rj2ttTTpiIKKworIzogZ2V0Y2hhci5jOjM5OTAKK21zZ2lkICJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkUyMjg6IG1ha2VtYXA6ILK71f3It7XExKPKvSIKKworIzogZ3VpX2F0X2ZzLmM6MjkwCittc2dpZCAiPGNhbm5vdCBvcGVuPiAiCittc2dzdHIgIjyyu8TctPK/qj4iCisKKyM6IGd1aV9hdF9mcy5jOjExMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidmltX1NlbEZpbGU6IGNhbid0IGdldCBmb250ICVzIgorbXNnc3RyICJ2aW1fU2VsRmlsZTogsrvE3Mq508MgJXMg19bM5SIKKworIzogZ3VpX2F0X2ZzLmM6MjUzNQorbXNnaWQgInZpbV9TZWxGaWxlOiBjYW4ndCByZXR1cm4gdG8gY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgInZpbV9TZWxGaWxlOiCyu8Tcu9i1vcS/x7DEv8K8IgorCisjOiBndWlfYXRfZnMuYzoyNTU0Cittc2dpZCAiUGF0aG5hbWU6IgorbXNnc3RyICLCt762OiIKKworIzogZ3VpX2F0X2ZzLmM6MjU2MAorbXNnaWQgInZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgInZpbV9TZWxGaWxlOiCyu8TcyKG1w8S/x7DEv8K8IgorCisjOiBndWlfYXRfZnMuYzoyNTY4IGd1aV9tb3RpZi5jOjE2MDcKK21zZ2lkICJPSyIKK21zZ3N0ciAiyLe2qCIKKworIy4gJ0NhbmNlbCcgYnV0dG9uCisjOiBndWlfYXRfZnMuYzoyNTY4IGd1aV9ndGsuYzoxNjgzIGd1aV9tb3RpZi5jOjE2MDIgZ3VpX21vdGlmLmM6MjgyMworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiyKHP+yIKKworIzogZ3VpX2F0aGVuYS5jOjE5MjggZ3VpX21vdGlmLmM6MTg1NQorbXNnaWQgIlZpbSBkaWFsb2ciCittc2dzdHIgIlZpbSC21Luwv/IiCisKKyM6IGd1aV9hdF9zYi5jOjQ4NgorbXNnaWQgIlNjcm9sbGJhciBXaWRnZXQ6IENvdWxkIG5vdCBnZXQgZ2VvbWV0cnkgb2YgdGh1bWIgcGl4bWFwLiIKK21zZ3N0ciAiufa2r8z1OiCyu8Tcyei2qCB0aHVtYiBwaXhtYXAgtcTOu9bDIgorCisjOiBndWlfYmV2YWwuYzo2OAorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICJFMjMyOiCyu8TcttTQxc+i0+sgY2FsbGJhY2sgtLS9qCBCYWxsb25FdmFsIgorCisjOiBndWkuYzoxODEKK21zZ2lkICJFMjI5OiBDYW5ub3Qgc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiRTIyOTogsrvE3Mb0tq/NvNDNvefD5iIKKworIzogZ3VpLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzA6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjMwOiCyu8TctsHIoc7EvP4gXCIlc1wiIgorCisjOiBndWkuYzo0MzEKK21zZ2lkICJFMjMxOiAnZ3VpZm9udHdpZGUnIGludmFsaWQiCittc2dzdHIgIkUyMzE6ILK71f3It7XEICdndWlmb250d2lkZSciCisKKyM6IGd1aS5jOjM5MTkKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAitO3O8yIKKworIzogZ3VpLmM6MzkyMAorbXNnaWQgIiZPayIKK21zZ3N0ciAiyLe2qCgmTykiCisKKyM6IGd1aV9ndGsuYzoxMTQ0Cittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiVmltILbUu7C/8i4uLiIKKworIzogZ3VpX2d0ay5jOjE1MTkgZ3VpX21vdGlmLmM6Mjc0MgorbXNnaWQgIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIKK21zZ3N0ciAiVklNIC0gsunV0tPrzOa7uy4uLiIKKworIzogZ3VpX2d0ay5jOjE1MjQgZ3VpX21vdGlmLmM6Mjc0NAorbXNnaWQgIlZJTSAtIFNlYXJjaC4uLiIKK21zZ3N0ciAiVklNIC0gsunV0i4uLiIKKworIzogZ3VpX2d0ay5jOjE1NDcgZ3VpX21vdGlmLmM6Mjg2MgorbXNnaWQgIkZpbmQgd2hhdDoiCittc2dzdHIgIrLp1dI6IgorCisjOiBndWlfZ3RrLmM6MTU2NSBndWlfbW90aWYuYzoyODk0Cittc2dpZCAiUmVwbGFjZSB3aXRoOiIKK21zZ3N0ciAizOa7u86qOiIKKworIy4gZXhhY3QgbWF0Y2ggb25seSBidXR0b24KKyM6IGd1aV9ndGsuYzoxNTk3IGd1aV9tb3RpZi5jOjI5OTYKK21zZ2lkICJNYXRjaCBleGFjdCB3b3JkIG9ubHkiCittc2dzdHIgIta7xqXF5M3qyKvP4M2stcTX1iIKKworIzogZ3VpX2d0ay5jOjE2MDkgZ3VpX21vdGlmLmM6Mjk2NAorbXNnaWQgIkRpcmVjdGlvbiIKK21zZ3N0ciAit73P8iIKKworIy4gJ1VwJyBhbmQgJ0Rvd24nIGJ1dHRvbnMKKyM6IGd1aV9ndGsuYzoxNjIxIGd1aV9tb3RpZi5jOjI5NzYKK21zZ2lkICJVcCIKK21zZ3N0ciAiz/LJzyIKKworIzogZ3VpX2d0ay5jOjE2MjUgZ3VpX21vdGlmLmM6Mjk4NAorbXNnaWQgIkRvd24iCittc2dzdHIgIs/yz8IiCisKKyMuICdGaW5kIE5leHQnIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE2NDcgZ3VpX21vdGlmLmM6Mjc2NgorbXNnaWQgIkZpbmQgTmV4dCIKK21zZ3N0ciAi1dLPwtK7uPYiCisKKyMuICdSZXBsYWNlJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNjY0IGd1aV9tb3RpZi5jOjI3ODMKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICLM5ru7IgorCisjLiAnUmVwbGFjZSBBbGwnIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjE2NzMgZ3VpX21vdGlmLmM6Mjc5NgorbXNnaWQgIlJlcGxhY2UgQWxsIgorbXNnc3RyICLM5ru7yKuyvyIKKworIzogZ3VpX2d0a194MTEuYzoxMDc2IGd1aV94MTEuYzoxMTk0Cittc2dpZCAiRTIzMzogY2Fubm90IG9wZW4gZGlzcGxheSIKK21zZ3N0ciAiRTIzMzogPLK7xNy08r+qIFggU2VydmVyIERJU1BMQVk+IgorCisjOiBndWlfZ3RrX3gxMS5jOjI0MzMgZ3VpX3gxMS5jOjE5OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNDogVW5rbm93biBmb250c2V0OiAlcyIKK21zZ3N0ciAiRTIzNDogsrvV/ci3tcTX1rf7vK8gKEZvbnRzZXQpOiAlcyIKKworIzogZ3VpX2d0a194MTEuYzoyNDYwCittc2dpZCAiRm9udCBTZWxlY3Rpb24iCittc2dzdHIgItfWzOXRodTxIgorCisjOiBndWlfZ3RrX3gxMS5jOjI3MDIgZ3VpX21hYy5jOjI3ODAgZ3VpX3c0OC5jOjExOTcgZ3VpX3gxMS5jOjE4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogVW5rbm93biBmb250OiAlcyIKK21zZ3N0ciAisrvV/ci3tcTX1szlw/uzxjogJXMiCisKKyM6IGd1aV9ndGtfeDExLmM6MjcxMyBndWlfeDExLmM6MTg1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IFwiJXNcIiCyu8rHucy2qL/ttsjX1szlIgorCisjOiBndWlfZ3RrX3gxMS5jOjI4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MjogQ29sb3IgbmFtZSBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkUyNDI6ICVzIM6qsrvE3Mq2sfC1xNHVyavD+7PGIgorCisjOiBndWlfZ3RrX3gxMS5jOjM1MTkgdWkuYzoxOTI5Cittc2dpZCAiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIKK21zZ3N0ciAiyrnTwyBDVVRfQlVGRkVSMCDAtMzmu7u/1dGh1PEiCisKKyM6IGd1aV9tb3RpZi5jOjE2MDEgZ3VpX21vdGlmLmM6MTYwNAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiuf3Cy8b3IgorCisjOiBndWlfbW90aWYuYzoxNjAzCittc2dpZCAiRGlyZWN0b3JpZXMiCittc2dzdHIgIsS/wrwiCisKKyM6IGd1aV9tb3RpZi5jOjE2MDUKK21zZ2lkICJIZWxwIgorbXNnc3RyICKw79b6IgorCisjOiBndWlfbW90aWYuYzoxNjA2Cittc2dpZCAiRmlsZXMiCittc2dzdHIgIs7EvP4iCisKKyM6IGd1aV9tb3RpZi5jOjE2MDgKK21zZ2lkICJTZWxlY3Rpb24iCittc2dzdHIgItGh1PEiCisKKyM6IGd1aV9tb3RpZi5jOjI4MDkKK21zZ2lkICJVbmRvIgorbXNnc3RyICKzt8/7IgorCisjOiBndWlfcmlzY29zLmM6OTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTIzNTogsrvE3LTyv6ogWmFwINfWzOUgJyVzJyIKKworIzogZ3VpX3Jpc2Nvcy5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogQ2FuJ3QgdXNlIGZvbnQgJXMiCittc2dzdHIgIkUyMzU6ILK7xNzKudPD19bM5SAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjExNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MjogTWlzc2luZyBjb2xvcjogJXMiCittc2dzdHIgIkUyNDI6INXSsru1vdHVyas6ICVzIgorCisjOiBndWlfcmlzY29zLmM6MzI2OQorbXNnaWQgIiIKKyJcbiIKKyJTZW5kaW5nIG1lc3NhZ2UgdG8gdGVybWluYXRlIGNoaWxkIHByb2Nlc3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLV/dTat6LLzdbQts/X07PM0PK1xNDFz6IuXG4iCisKKyM6IGd1aV93MzIuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MzogQXJndW1lbnQgbm90IHN1cHBvcnRlZDogXCItJXNcIjsgVXNlIHRoZSBPTEUgdmVyc2lvbi4iCittc2dzdHIgIkUyNDM6ILK71qez1rLOyv0gXCItJXNcIqGjx+vTwyBPTEUgsOaxvqGjIgorCisjOiBndWlfdzQ4LmM6MjA2OAorbXNnaWQgIkZpbmQgc3RyaW5nICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIrLp1dLX1rf7tK4gKMq508MgJ1xcXFwnIMC0se3KviAnXFwnKSIKKworIzogZ3VpX3c0OC5jOjIwOTMKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICKy6dXSvLDM5ru719a3+7SuICjKudPDICdcXFxcJyDAtLHtyr4gJ1xcJykiCisKKyM6IGd1aV94MTEuYzoxNDE0Cittc2dpZCAiVmltIEU0NTg6IENhbm5vdCBhbGxvY2F0ZSBjb2xvcm1hcCBlbnRyeSwgc29tZSBjb2xvcnMgbWF5IGJlIGluY29ycmVjdCIKK21zZ3N0ciAiVmltIEU0NTg6ILK7xNzF5NbDIGNvbG9yIG1hcCC21M/zo6zT0NCp0dXJq7+0xvDAtLvhuda51rXEIgorCisjOiBndWlfeDExLmM6MTk4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjUwOiBGb250cyBmb3IgdGhlIGZvbGxvd2luZyBjaGFyc2V0cyBhcmUgbWlzc2luZyBpbiBmb250c2V0ICVzOiIKK21zZ3N0ciAiRTI1MDogRm9udHNldCAlcyDDu9PQyei2qNX9yLe1xNfWzOXS1Lmpz9TKvtXi0KnX1rf7vK86IgorCisjOiBndWlfeDExLmM6MjAzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUyOiBGb250c2V0IG5hbWU6ICVzIgorbXNnc3RyICJFMjUyOiDX1szlvK8oRm9udHNldCnD+7PGOiAlcyIKKworIzogZ3VpX3gxMS5jOjIwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCAnJXMnIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiJyVzJyCyu8rHucy2qL/ttsjX1szlIgorCisjOiBndWlfeDExLmM6MjA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTM6INfWzOW8ryhGb250c2V0KcP7s8Y6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQwOiAlc1xuIgorbXNnc3RyICLX1szlMDogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDE6ICVzXG4iCittc2dzdHIgItfWzOUxOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1MworIywgYy1mb3JtYXQKK21zZ2lkICJGb250JWQgd2lkdGggaXMgbm90IHR3aWNlIHRoYXQgb2YgZm9udDBcbiIKK21zZ3N0ciAi19bM5SVkv+22yLK7ysfX1szlMLXEwb2xtlxuIgorCisjOiBndWlfeDExLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MCB3aWR0aDogJWxkXG4iCittc2dzdHIgItfWzOUwtcS/7bbIo7olbGRcbiIKKworIzogZ3VpX3gxMS5jOjIwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvbnQxIHdpZHRoOiAlbGRcbiIKKyJcbiIKK21zZ3N0ciAiIgorItfWzOUxv+22yDogJWxkXG4iCisiXG4iCisKKyM6IGd1aV94MTEuYzoyMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTQ6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciAlcyIKK21zZ3N0ciAiRTI1NDogsrvE3MXk1sPR1cmrICVzIgorCisjOiBndWlfeDExLmM6MzI1MAorbXNnaWQgIkUyNTU6IENvdWxkbid0IHJlYWQgaW4gc2lnbiBkYXRhISIKK21zZ3N0ciAiRTI1NTogsrvE3LbByKEgc2lnbiBkYXRhISIKKworIzogaGFuZ3VsaW4uYzo2MTAKK21zZ2lkICJFMjU2OiBIYW5ndWwgYXV0b21hdGEgRVJST1IiCittc2dzdHIgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSC07c7zIgorCisjOiBpZl9jc2NvcGUuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3NbY29wZV0gJXMiCittc2dzdHIgIiIKKworIzogaWZfY3Njb3BlLmM6NjcKK21zZ2lkICJBZGQgYSBuZXcgZGF0YWJhc2UiCittc2dzdHIgItDC1PbK/b7dv+IiCisKKyM6IGlmX2NzY29wZS5jOjY5Cittc2dpZCAiUXVlcnkgZm9yIGEgcGF0dGVybiIKK21zZ3N0ciAisunRr8Sjyr0iCisKKyM6IGlmX2NzY29wZS5jOjcxCittc2dpZCAiU2hvdyB0aGlzIG1lc3NhZ2UiCittc2dzdHIgIs/Uyr60y9DFz6IiCisKKyM6IGlmX2NzY29wZS5jOjczCittc2dpZCAiS2lsbCBhIGNvbm5lY3Rpb24iCittc2dzdHIgIr3hyvjBrL3TIgorCisjOiBpZl9jc2NvcGUuYzo3NQorbXNnaWQgIlJlaW5pdCBhbGwgY29ubmVjdGlvbnMiCittc2dzdHIgItbYyejL+dPQway90yIKKworIzogaWZfY3Njb3BlLmM6NzcKK21zZ2lkICJTaG93IGNvbm5lY3Rpb25zIgorbXNnc3RyICLP1Mq+way90yIKKworIzogaWZfY3Njb3BlLmM6MTA4Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICLV4rj2IGNzY29wZSDD/MHusrvWp7PWt9a47sbBxLtcbiIKKworIzogaWZfY3Njb3BlLmM6MTQzCittc2dpZCAiVXNhZ2U6IGNzdGFnIDxpZGVudD4iCittc2dzdHIgItPDt6g6IGNzdGFnIDzKtrHw19Y+IgorCisjOiBpZl9jc2NvcGUuYzoxOTkKK21zZ2lkICJFMjU3OiBjc3RhZzogdGFnIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI1NzogY3N0YWc6INXSsru1vSB0YWciCisKKyM6IGlmX2NzY29wZS5jOjQwNyBpZl9jc2NvcGUuYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdCglcykgZXJyb3I6ICVkIgorbXNnc3RyICJzdGF0KCVzKSC07c7zOiAlZCIKKworIzogaWZfY3Njb3BlLmM6NDYwIGlmX2NzY29wZS5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRlZCBjc2NvcGUgZGF0YWJhc2UgJXMiCittc2dzdHIgItDC1PYgY3Njb3BlIMr9vt2/4iAlcyIKKworIzogaWZfY3Njb3BlLmM6NDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGRpcmVjdG9yeSBvciBhIHZhbGlkIGNzY29wZSBkYXRhYmFzZSIKK21zZ3N0ciAiJXMgsrvKx8S/wry78iBjc2NvcGUgyv2+3b/iIgorCisjOiBpZl9jc2NvcGUuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKK21zZ3N0ciAitsHIoSBjc2NvcGUgway90yAlZCDKsbTtzvMiCisKKyM6IGlmX2NzY29wZS5jOjYzMworbXNnaWQgInVua25vd24gY3Njb3BlIHNlYXJjaCB0eXBlIgorbXNnc3RyICLOtNaqtcQgY3Njb3BlILLp1dLQzsysIgorCisjOiBpZl9jc2NvcGUuYzo2ODAKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGNzY29wZSBwaXBlcyIKK21zZ3N0ciAisrvE3LS0vajT6yBjc2NvcGUgway907XEudy1wCIKKworIzogaWZfY3Njb3BlLmM6NzQ1Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb24gZXhlYyBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uINa00NDKp7DcIgorCisjOiBpZl9jc2NvcGUuYzo3NTUKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciB0b19mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gyqew3CAodG9fZnApIgorCisjOiBpZl9jc2NvcGUuYzo3NTcKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciBmcl9mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4gyqew3CAoZnJfZnApIgorCisjOiBpZl9jc2NvcGUuYzo3ODUKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnMiCittc2dzdHIgIsO709AgY3Njb3BlIMGsvdMiCisKKyM6IGlmX2NzY29wZS5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU5OiBubyBtYXRjaGVzIGZvdW5kIGZvciBjc2NvcGUgcXVlcnkgJXMgb2YgJXMiCittc2dzdHIgIkUyNTk6INXSsru1vbf7us8gY3Njb3BlILXEy9HRsCAlcyAvICVzIgorCisjOiBpZl9jc2NvcGUuYzo4OTkKK21zZ2lkICJjc2NvcGUgY29tbWFuZHM6XG4iCittc2dzdHIgImNzY29wZSDD/MHuOlxuIgorCisjOiBpZl9jc2NvcGUuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS01czogJS0zMHMgKFVzYWdlOiAlcylcbiIKK21zZ3N0ciAiJS01czogJS0zMHMgKNPDt6g6ICVzKVxuIgorCisjOiBpZl9jc2NvcGUuYzo5NzAKK21zZ2lkICJkdXBsaWNhdGUgY3Njb3BlIGRhdGFiYXNlIG5vdCBhZGRlZCIKK21zZ3N0ciAi1ti4tLXEIGNzY29wZSDK/b7dv+LOtLG7vNPI6yIKKworIzogaWZfY3Njb3BlLmM6OTgxCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY3Njb3BlIGNvbm5lY3Rpb25zIHJlYWNoZWQiCittc2dzdHIgItLRtO+1vSBjc2NvcGUg1+6088GsvdPK/cS/IgorCisjOiBpZl9jc2NvcGUuYzoxMTAyCittc2dpZCAiRTI2MDogY3Njb3BlIGNvbm5lY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJFMjYwOiDV0rK7tb0gY3Njb3BlIMGsvdMiCisKKyM6IGlmX2NzY29wZS5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiDV0rK7tb0gY3Njb3BlIMGsvdMgJXMiCisKKyM6IGlmX2NzY29wZS5jOjExNDEKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiBjbG9zZWQiCittc2dzdHIgImNzY29wZSDBrL3T0tG52LHVIgorCisjOiBpZl9jc2NvcGUuYzoxMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNzY29wZSBjb25uZWN0aW9uICVzIGNsb3NlZFxuIgorbXNnc3RyICJjc2NvcGUgway90yAlcyDS0bnYsdVcbiIKKworIy4gc2hvdWxkIG5vdCByZWFjaCBoZXJlCisjOiBpZl9jc2NvcGUuYzoxMjkwCittc2dpZCAiZmF0YWwgZXJyb3IgaW4gY3NfbWFuYWdlX21hdGNoZXMiCittc2dzdHIgImNzX21hbmFnZV9tYXRjaGVzINHP1ti07c7zIgorCisjOiBpZl9jc2NvcGUuYzoxMzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNjI6IGVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWQiCittc2dzdHIgIkUyNjI6ILbByKEgY3Njb3BlIMGsvdMgJWQgtO3O8yIKKworIzogaWZfY3Njb3BlLmM6MTQ0OQorbXNnaWQgImNvdWxkbid0IG1hbGxvY1xuIgorbXNnc3RyICKyu8TcyrnTwyBtYWxsb2NcbiIKKworIzogaWZfY3Njb3BlLmM6MTQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDc2NvcGUgdGFnOiAlc1xuIgorbXNnc3RyICJDc2NvcGUgserHqSh0YWcpOiAlc1xuIgorCisjOiBpZl9jc2NvcGUuYzoxNDU4Cittc2dpZCAiICAgIyAgIGxpbmUiCittc2dzdHIgIiAgICMgICDQ0CAgIgorCisjOiBpZl9jc2NvcGUuYzoxNDYwCittc2dpZCAiZmlsZW5hbWUgLyBjb250ZXh0IC8gbGluZVxuIgorbXNnc3RyICLOxLz+w/sgICAgIC8gyc/Pws7EICAgIC8g0NC6xVxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzE4Cittc2dpZCAiQWxsIGNzY29wZSBkYXRhYmFzZXMgcmVzZXQiCittc2dzdHIgItbYyejL+dPQIGNzY29wZSDK/b7dv+IiCisKKyM6IGlmX2NzY29wZS5jOjE3ODUKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAiw7vT0CBjc2NvcGUgway901xuIgorCisjOiBpZl9jc2NvcGUuYzoxNzg5Cittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAgyv2+3b/iw/uzxiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iCisKKyM6IGlmX2NzY29wZS5jOjE4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTJkICUtNWxkICAlLTM0cyAgPG5vbmU+XG4iCittc2dzdHIgIiUyZCAlLTVsZCAgJS0zNHMgIDzO3j5cbiIKKworIzogaWZfcHl0aG9uLmM6Mzc2Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIkUyNjM6ILGnx7ijrNXiuPbD/MHusrvE3Mq508OjrFB5dGhvbiCzzNDyv+LDu9PQvNPU2KGjIgorCisjOiBpZl9weXRob24uYzo1NzYKK21zZ2lkICJjYW4ndCBkZWxldGUgT3V0cHV0T2JqZWN0IGF0dHJpYnV0ZXMiCittc2dzdHIgIrK7xNzJvrP9IE91dHB1dE9iamVjdCDK9NDUIgorCisjOiBpZl9weXRob24uYzo1ODMKK21zZ2lkICJzb2Z0c3BhY2UgbXVzdCBiZSBhbiBpbnRlZ2VyIgorbXNnc3RyICJzb2Z0c3BhY2UgsdjQ6MrH1fvK/SIKKworIzogaWZfcHl0aG9uLmM6NTkxCittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUiCittc2dzdHIgIrK71f3It7XEyvTQ1CIKKworIzogaWZfcHl0aG9uLmM6NjMwIGlmX3B5dGhvbi5jOjY0NAorbXNnaWQgIndyaXRlbGluZXMoKSByZXF1aXJlcyBsaXN0IG9mIHN0cmluZ3MiCittc2dzdHIgIndyaXRlbGluZXMoKSDQ6NKqIHN0cmluZyBsaXN0ILWxss7K/SIKKworIzogaWZfcHl0aG9uLmM6NzcwCittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjogsrvE3LP1yry7ryBJL08gttTP8yIKKworIzogaWZfcHl0aG9uLmM6OTU1IGlmX3RjbC5jOjEzOTEKK21zZ2lkICJpbnZhbGlkIGV4cHJlc3Npb24iCittc2dzdHIgIrK71f3It7XEse2078q9IgorCisjOiBpZl9weXRob24uYzo5NjkgaWZfdGNsLmM6MTM5NgorbXNnaWQgImV4cHJlc3Npb25zIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAi0vLOqrHg0uvKscO709C808jrse2078q9KGV4cHJlc3Npb24ptcSzzNDytPrC66Osy/nS1LK7xNzKudPDse2078q9IgorCisjOiBpZl9weXRob24uYzo5ODIKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICLK1M28yrnTw9LRsbvJvrP9tcS7urPlx/giCisKKyM6IGlmX3B5dGhvbi5jOjk5NyBpZl9weXRob24uYzoxMDM4IGlmX3B5dGhvbi5jOjExMDIgaWZfdGNsLmM6MTIwMworbXNnaWQgImxpbmUgbnVtYmVyIG91dCBvZiByYW5nZSIKK21zZ3N0ciAi0NC6xbOss/a3ts6nIgorCisjOiBpZl9weXRob24uYzoxMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIjxidWZmZXIgb2JqZWN0IChkZWxldGVkKSBhdCAlOGxYPiIKK21zZ3N0ciAiPGJ1ZmZlciC21M/zICjS0cm+s/0pOiAlOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTMyNiBpZl90Y2wuYzo4MjUKK21zZ2lkICJpbnZhbGlkIG1hcmsgbmFtZSIKK21zZ3N0ciAiseq8x8P7s8ayu9X9yLciCisKKyM6IGlmX3B5dGhvbi5jOjE2MDEKK21zZ2lkICJubyBzdWNoIGJ1ZmZlciIKK21zZ3N0ciAizt60y7u6s+XH+CIKKworIzogaWZfcHl0aG9uLmM6MTY4OQorbXNnaWQgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCB3aW5kb3ciCittc2dzdHIgIsrUzbzKudPD0tGxu8m+s/21xLSwv9oiCisKKyM6IGlmX3B5dGhvbi5jOjE3MzQKK21zZ2lkICJyZWFkb25seSBhdHRyaWJ1dGUiCittc2dzdHIgIta7tsHK9NDUIgorCisjOiBpZl9weXRob24uYzoxNzQ3Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICK54rHqtqjOu9Tau7qz5cf41q7N4iIKKworIzogaWZfcHl0aG9uLmM6MTgyNAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAoZGVsZXRlZCkgYXQgJS44bFg+IgorbXNnc3RyICI8tLC/2rbUz/Mo0tHJvrP9KTogJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODM2CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjy0sL/attTP8yjOtNaqKTogJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODM4CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8tLC/2iAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5MTQKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAizt60y7Swv9oiCisKKyM6IGlmX3B5dGhvbi5jOjIxNDQgaWZfcHl0aG9uLmM6MjE3NSBpZl9weXRob24uYzoyMjI1IGlmX3B5dGhvbi5jOjIyODUKKyM6IGlmX3B5dGhvbi5jOjI0MDIgaWZfcHl0aG9uLmM6MjQ1NCBpZl90Y2wuYzo2NzMgaWZfdGNsLmM6NzE4IGlmX3RjbC5jOjc5MgorIzogaWZfdGNsLmM6ODYyIGlmX3RjbC5jOjE5ODcKK21zZ2lkICJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICKyu8TcsaO05ri01K3Qxc+iIgorCisjOiBpZl9weXRob24uYzoyMTQ2IGlmX3B5dGhvbi5jOjIyMzIgaWZfcHl0aG9uLmM6MjI5NgorbXNnaWQgImNhbm5vdCBkZWxldGUgbGluZSIKK21zZ3N0ciAisrvE3Mm+s/20y9DQIgorCisjOiBpZl9weXRob24uYzoyMTc3IGlmX3B5dGhvbi5jOjIzMTIgaWZfdGNsLmM6Njc5IGlmX3RjbC5jOjIwMDkKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICKyu8TczOa7u7TL0NAiCisKKyM6IGlmX3B5dGhvbi5jOjIzMjggaWZfcHl0aG9uLmM6MjQwNCBpZl9weXRob24uYzoyNDYyCittc2dpZCAiY2Fubm90IGluc2VydCBsaW5lIgorbXNnc3RyICKyu8TcsuXI67TL0NAiCisKKyM6IGlmX3B5dGhvbi5jOjI1NjYKK21zZ2lkICJzdHJpbmcgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgItfWt/u0rrK7xNyw/Lqs0MLQ0CIKKworIzogaWZfcnVieS5jOjM5NAorbXNnaWQgIiIKKyJFMjY2OiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUnVieSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJFMjY2OiC0y8P8we6yu8TcyrnTw6Oszt63qLzT1NggUnVieSCzzNDyv+IoTGlicmFyeSkiCisKKyM6IGlmX3J1YnkuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIKK21zZ3N0ciAiRTI3MzogzrTWqrXEIGxvbmdqbXAg17TMrCAlZCIKKworIzogaWZfc25pZmYuYzo2NworbXNnaWQgIlRvZ2dsZSBpbXBsZW1lbnRhdGlvbi9kZWZpbml0aW9uIgorbXNnc3RyICLH0Lu7yrXP1i+2qNLlIgorCisjOiBpZl9zbmlmZi5jOjY4Cittc2dpZCAiU2hvdyBiYXNlIGNsYXNzIG9mIgorbXNnc3RyICLP1Mq+IGJhc2UgY2xhc3Mgb2Y6IgorCisjOiBpZl9zbmlmZi5jOjY5Cittc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKK21zZ3N0ciAiz9TKvrG7uLK4x7XEs8nUsbqvyv0iCisKKyM6IGlmX3NuaWZmLmM6NzAKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGZpbGUiCittc2dzdHIgIrvWuLQ6ILTTzsS8/iIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAiu9a4tDogtNO21M/zIgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIrvWuLQ6ILTTy/nT0M/uxL8iCisKKyM6IGlmX3NuaWZmLmM6NzQKK21zZ2lkICJSZXRyaWV2ZSIKK21zZ3N0ciAiu9a4tCIKKworIzogaWZfc25pZmYuYzo3NQorbXNnaWQgIlNob3cgc291cmNlIG9mIgorbXNnc3RyICLP1Mq+1LS0+sLrOiAiCisKKyM6IGlmX3NuaWZmLmM6NzYKK21zZ2lkICJGaW5kIHN5bWJvbCIKK21zZ3N0ciAisunV0iBzeW1ib2wiCisKKyM6IGlmX3NuaWZmLmM6NzcKK21zZ2lkICJCcm93c2UgY2xhc3MiCittc2dzdHIgIuSvwMAgY2xhc3MiCisKKyM6IGlmX3NuaWZmLmM6NzgKK21zZ2lkICJTaG93IGNsYXNzIGluIGhpZXJhcmNoeSIKK21zZ3N0ciAiz9TKvrLjtM652M+1tcTA4CIKKworIzogaWZfc25pZmYuYzo3OQorbXNnaWQgIlNob3cgY2xhc3MgaW4gcmVzdHJpY3RlZCBoaWVyYXJjaHkiCittc2dzdHIgIs/Uyr4gcmVzdHJpY3RlZCCy47TOudjPtbXEIGNsYXNzIgorCisjOiBpZl9zbmlmZi5jOjgwCittc2dpZCAiWHJlZiByZWZlcnMgdG8iCittc2dzdHIgIlhyZWYgss6/vLW9IgorCisjOiBpZl9zbmlmZi5jOjgxCittc2dpZCAiWHJlZiByZWZlcnJlZCBieSIKK21zZ3N0ciAiWHJlZiCxu8utss6/vDoiCisKKyM6IGlmX3NuaWZmLmM6ODIKK21zZ2lkICJYcmVmIGhhcyBhIgorbXNnc3RyICJYcmVmINPQIgorCisjOiBpZl9zbmlmZi5jOjgzCittc2dpZCAiWHJlZiB1c2VkIGJ5IgorbXNnc3RyICJYcmVmILG7y63KudPDOiIKKworIzogaWZfc25pZmYuYzo4NAorbXNnaWQgIlNob3cgZG9jdSBvZiIKK21zZ3N0ciAiz9TKvs7EvP46ICIKKworIzogaWZfc25pZmYuYzo4NQorbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgorbXNnc3RyICKy+sn6zsS8/jogIgorCisjOiBpZl9zbmlmZi5jOjk3Cittc2dpZCAiIgorIkNhbm5vdCBjb25uZWN0IHRvIFNOaUZGKy4gQ2hlY2sgZW52aXJvbm1lbnQgKHNuaWZmZW1hY3MgbXVzdCBiZSBmb3VuZCBpbiAiCisiJFBBVEgpLlxuIgorbXNnc3RyICKyu8Tcway907W9IFNOaUZGK6Gjx+u87LLpu7e+s7Hkwb8gKCRQQVRIIMDvsdjQ6L/J0tTV0rW9IHNuaWZmZW1hY3MpXG4iCisKKyM6IGlmX3NuaWZmLmM6NDI1Cittc2dpZCAiRTI3NDogU25pZmY6IEVycm9yIGR1cmluZyByZWFkLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIkUyNzQ6IFNuaWZmOiC2wcihtO3O8y4gyKHP+8GsvdMiCisKKyM6IGlmX3NuaWZmLmM6NTUzCittc2dpZCAiU05pRkYrIGlzIGN1cnJlbnRseSAiCittc2dzdHIgIlNOaUZGKyDEv8ewIgorCisjOiBpZl9zbmlmZi5jOjU1NQorbXNnaWQgIm5vdCAiCittc2dzdHIgIs60IgorCisjOiBpZl9zbmlmZi5jOjU1NgorbXNnaWQgImNvbm5lY3RlZCIKK21zZ3N0ciAiway909bQIgorCisjOiBpZl9zbmlmZi5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjc1OiBVbmtub3duIFNOaUZGKyByZXF1ZXN0OiAlcyIKK21zZ3N0ciAiRTI3NTogsrvV/ci3tcQgU05pZmYrILX308M6ICVzIgorCisjOiBpZl9zbmlmZi5jOjYwNQorbXNnaWQgIkUyNzY6IEVycm9yIGNvbm5lY3RpbmcgdG8gU05pRkYrIgorbXNnc3RyICJFMjc2OiDBrL3Ttb0gU05pRkYrIMqnsNwiCisKKyM6IGlmX3NuaWZmLmM6MTAxMAorbXNnaWQgIkUyNzg6IFNOaUZGKyBub3QgY29ubmVjdGVkIgorbXNnc3RyICJFMjc4OiDOtMGsvdO1vSBTTmlGRisiCisKKyM6IGlmX3NuaWZmLmM6MTAxOQorbXNnaWQgIkUyNzk6IE5vdCBhIFNOaUZGKyBidWZmZXIiCittc2dzdHIgIkUyNzk6ILK7yscgU05pRkYrILXEu7qz5cf4IgorCisjOiBpZl9zbmlmZi5jOjEwODQKK21zZ2lkICJTbmlmZjogRXJyb3IgZHVyaW5nIHdyaXRlLiBEaXNjb25uZWN0ZWQiCittc2dzdHIgIlNuaWZmOiDQtMjrtO3O86GjveHK+MGsvdMiCisKKyM6IGlmX3RjbC5jOjQwNworbXNnaWQgImludmFsaWQgYnVmZmVyIG51bWJlciIKK21zZ3N0ciAisrvV/ci3tcS7urPlx/i6xSIKKworIzogaWZfdGNsLmM6NDUzIGlmX3RjbC5jOjkyMCBpZl90Y2wuYzoxMDk5Cittc2dpZCAibm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAiydDOtMq1z9YiCisKKyM6IGlmX3RjbC5jOjQ5MAorbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICKyu9X9yLe1xNGhz+4iCisKKyMuID8/PworIzogaWZfdGNsLmM6NzYzCittc2dpZCAiY2Fubm90IHNldCBsaW5lKHMpIgorbXNnc3RyICKyu8Tcyei2qNDQIgorCisjOiBpZl90Y2wuYzo4MzQKK21zZ2lkICJtYXJrIG5vdCBzZXQiCittc2dzdHIgIsO709DJ6Laoseq8xyIKKworIzogaWZfdGNsLmM6ODQwIGlmX3RjbC5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicm93ICVkIGNvbHVtbiAlZCIKK21zZ3N0ciAiwdAgJWQg0NAgJWQiCisKKyM6IGlmX3RjbC5jOjg3MAorbXNnaWQgImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiCittc2dzdHIgIrK7xNyy5cjru/LM7bzTtMvQ0CIKKworIzogaWZfdGNsLmM6MTI1NworbXNnaWQgInVua25vd24gZmxhZzogIgorbXNnc3RyICK07c7ztcSx6ta+OiAiCisKKyM6IGlmX3RjbC5jOjEzMjcKK21zZ2lkICJ1bmtub3duIHZpbU9wdGlvbiIKK21zZ3N0ciAisrvV/ci3tcQgVklNINGhz+4iCisKKyM6IGlmX3RjbC5jOjE0MTIKK21zZ2lkICJrZXlib2FyZCBpbnRlcnJ1cHQiCittc2dzdHIgIrz8xczW0LbPIgorCisjOiBpZl90Y2wuYzoxNDE3Cittc2dpZCAidmltIGVycm9yIgorbXNnc3RyICJ2aW0gtO3O8yIKKworIzogaWZfdGNsLmM6MTQ2MAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYnVmZmVyL3dpbmRvdyBjb21tYW5kOiBvYmplY3QgaXMgYmVpbmcgZGVsZXRlZCIKK21zZ3N0ciAisrvE3LS0vai7urPlx/gvtLC/2sP8we46ILbUz/O9q7G7yb6z/SIKKworIzogaWZfdGNsLmM6MTUzNAorbXNnaWQgIiIKKyJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyBpcyBhbHJlYWR5IGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIrK7xNzXorLhIGNhbGxiYWNrIMP8we46ILu6s+XH+C+0sL/a0tG+rbG7yb6z/cHLIgorCisjLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBGYW1vdXMgbGFzdCB3b3JkPworIzogaWZfdGNsLmM6MTU1MQorbXNnaWQgIiIKKyJFMjgwOiBUQ0wgRkFUQUwgRVJST1I6IHJlZmxpc3QgY29ycnVwdCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS4iCisib3JnIgorbXNnc3RyICJFMjgwOiBUQ0wg0c/W2LTtzvM6IHJlZmxpc3Qgsru/yb+/IT8gx+uxqLjmuPggdG8gdmltLWRldkB2aW0ub3JnIgorCisjOiBpZl90Y2wuYzoxNTUyCittc2dpZCAiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgcmVmZXJlbmNlIG5vdCBmb3VuZCIKK21zZ3N0ciAisrvE3NeisuEgY2FsbGJhY2sgw/zB7jog1dKyu7W9u7qz5cf4L7Swv9oiCisKKyM6IGlmX3RjbC5jOjE3MTMKK21zZ2lkICJTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkOiB0aGUgVGNsIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIrTLw/zB7rK7xNzKudPDLCDS8s6qzt63qLzT1NggVGNsILPM0PK/4ihMaWJyYXJ5KSIKKworIzogaWZfdGNsLmM6MTg3NQorbXNnaWQgIiIKKyJFMjgxOiBUQ0wgRVJST1I6IGV4aXQgY29kZSBpcyBub3QgaW50IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLm9yZyIKK21zZ3N0ciAiRTI4MTogVENMILTtzvM6IM3Ls/a3tbvY1rWyu8rH1fvK/SE/IMfrsai45rj4IHRvIHZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTk5NQorbXNnaWQgImNhbm5vdCBnZXQgbGluZSIKK21zZ3N0ciAisrvE3MihtcO0y9DQIgorCisjOiBpZl94Y21kc3J2LmM6MjA0Cittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAisrvE3NeisuHD/MHut/7O8cb3w/uzxiIKKworIzogaWZfeGNtZHNydi5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6IMO709DXorLhzqogXCIlc1wiILXEt/7O8cb3IgorCisjOiBpZl94Y21kc3J2LmM6NDQ2Cittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODogsrvE3MvNs/bD/MHutb3Ev7XEtdizzNDyIgorCisjOiBpZl94Y21kc3J2LmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICKyu9X9yLe1xLf+zvHG9yBpZCA6ICVzIgorCisjOiBpZl94Y21kc3J2LmM6MTA1NgorbXNnaWQgIkUyNDk6IGNvdWxkbid0IHJlYWQgVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IgorbXNnc3RyICJFMjQ5OiCyu8TctsHIoSBWSU0gtcQg16Ky4bHtyvTQ1CIKKworIzogaWZfeGNtZHNydi5jOjEwNjcKK21zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCittc2dzdHIgIkUyNTE6IFZJTSC1xNeisuGx7cr00NTT0M7zoaPS0cm+s/2hoyIKKworIzogbWFpbi5jOjUzIG9wdGlvbi5jOjMxNjIgb3B0aW9uLmM6MzI2OQorbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICKyu9X9yLe1xNGhz+4iCisKKyM6IG1haW4uYzo1NQorbXNnaWQgIlRvbyBtYW55IGVkaXQgYXJndW1lbnRzIgorbXNnc3RyICLMq7bgseC8rbLOyv0iCisKKyM6IG1haW4uYzo1NworbXNnaWQgIkFyZ3VtZW50IG1pc3NpbmcgYWZ0ZXIiCittc2dzdHIgIsixydmx2NKqtcSyzsr9OiIKKworIzogbWFpbi5jOjU5Cittc2dpZCAiR2FyYmFnZSBhZnRlciBvcHRpb24iCittc2dzdHIgIrK7xNyx5sjPtMvRoc/uuvO1xMP8we46ICIKKworIzogbWFpbi5jOjYxCittc2dpZCAiVG9vIG1hbnkgXCIrY29tbWFuZFwiIG9yIFwiLWMgY29tbWFuZFwiIGFyZ3VtZW50cyIKK21zZ3N0ciAizKu24CBcIitjb21tYW5kXCIgu/IgXCItYyBjb21tYW5kXCIgss7K/SIKKworIzogbWFpbi5jOjYzCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBmb3IiCittc2dzdHIgIrK71f3It7XEss7K/TogIgorCisjOiBtYWluLmM6NDM2Cittc2dpZCAiVGhpcyBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSBkaWZmIGZlYXR1cmUuIgorbXNnc3RyICLE+rXEIFZpbSCx4NLryrHDu9PQvNPI6yBkaWZmILXExNzBpiIKKworIzogbWFpbi5jOjg1OAorbXNnaWQgIkF0dGVtcHQgdG8gb3BlbiBzY3JpcHQgZmlsZSBhZ2FpbjogXCIiCittc2dzdHIgIsrUzbzU2bTOtPK/qiBzY3JpcHQgzsS8/jogXCIiCisKKyM6IG1haW4uYzo4NjIgbWFpbi5jOjg2OSBtYWluLmM6OTEzIG1lbWxpbmUuYzozNjczIG1lbWxpbmUuYzozNjc3CisjOiB2ZXJzaW9uLmM6ODE2IHZlcnNpb24uYzo4MjEgdmVyc2lvbi5jOjgyNiB2ZXJzaW9uLmM6ODMxIHZlcnNpb24uYzo4MzYKKyM6IHZlcnNpb24uYzo4NDEgdmVyc2lvbi5jOjg0NyB2ZXJzaW9uLmM6ODUxIHZlcnNpb24uYzo4NTUgdmVyc2lvbi5jOjg2MAorIzogdmVyc2lvbi5jOjg2NyB2ZXJzaW9uLmM6ODc1IHZlcnNpb24uYzo4ODEKK21zZ2lkICJcIlxuIgorbXNnc3RyICJcIlxuIgorCisjOiBtYWluLmM6ODY3Cittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHJlYWRpbmc6IFwiIgorbXNnc3RyICKyu8Tczqq2wbb4tPK/qjogXCIiCisKKyM6IG1haW4uYzo5MTEKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIrK7xNzOqiBzY3JpcHQgyuSz9rb4tPK/qjogXCIiCisKKyM6IG1haW4uYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZpbGVzIHRvIGVkaXRcbiIKK21zZ3N0ciAiu7nT0CAlZCC49s7EvP61yLT9seC8rVxuIgorCisjOiBtYWluLmM6MTA5NAorbXNnaWQgIlZpbTogV2FybmluZzogT3V0cHV0IGlzIG5vdCB0byBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTog16LS4jogyuSz9rK7ysfW1bbLKMbBxLspXG4iCisKKyM6IG1haW4uYzoxMDk2Cittc2dpZCAiVmltOiBXYXJuaW5nOiBJbnB1dCBpcyBub3QgZnJvbSBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTog16LS4jogyuTI67K7ysfW1bbLKLz8xcwpXG4iCisKKyMuIGp1c3QgaW4gY2FzZS4uCisjOiBtYWluLmM6MTE3MQorbXNnaWQgInByZS12aW1yYyBjb21tYW5kIGxpbmUiCittc2dzdHIgInByZS12aW1yYyDD/MHu0NAiCisKKyM6IG1haW4uYzoxMjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODI6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjgyOiCyu8TctsHIoc7EvP4gXCIlc1wiIgorCisjOiBtYWluLmM6MjE1NworbXNnaWQgIiIKKyJcbiIKKyJNb3JlIGluZm8gd2l0aDogXCJ2aW0gLWhcIlxuIgorbXNnc3RyICIiCisiXG4iCisisunRr7j8tuDQxc+ix+vWtNDQOiBcInZpbSAtaFwiXG4iCisKKyM6IG1haW4uYzoyMTkwCittc2dpZCAiW2ZpbGUgLi5dICAgICAgIGVkaXQgc3BlY2lmaWVkIGZpbGUocykiCittc2dzdHIgIlvOxLz+IC4uXSAgICAgICCx4Lyt1ri2qLXEzsS8/iIKKworIzogbWFpbi5jOjIxOTEKK21zZ2lkICItICAgICAgICAgICAgICAgcmVhZCB0ZXh0IGZyb20gc3RkaW4iCittc2dzdHIgIi0gICAgICAgICAgICAgICC007Hq17zK5MjrKHN0ZGluKbbByKHOxLG+IgorCisjOiBtYWluLmM6MjE5MgorbXNnaWQgIi10IHRhZyAgICAgICAgICBlZGl0IGZpbGUgd2hlcmUgdGFnIGlzIGRlZmluZWQiCittc2dzdHIgIi10IHRhZyAgICAgICAgICCx4LytyrHKudPD1ri2qLXEIHRhZyIKKworIzogbWFpbi5jOjIxOTQKK21zZ2lkICItcSBbZXJyb3JmaWxlXSAgZWRpdCBmaWxlIHdpdGggZmlyc3QgZXJyb3IiCittc2dzdHIgIi1xIFtlcnJvcmZpbGVdICCx4LytyrG809TYtdrSu7j2tO3O8yIKKworIzogbWFpbi5jOjIyMDMKK21zZ2lkICIiCisiXG4iCisiXG4iCisidXNhZ2U6IgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiINPDt6g6IgorCisjOiBtYWluLmM6MjIwNgorbXNnaWQgIiB2aW0gW2FyZ3VtZW50c10gIgorbXNnc3RyICJ2aW0gW7LOyv1dICIKKworIzogbWFpbi5jOjIyMTAKK21zZ2lkICIiCisiXG4iCisiICAgb3I6IgorbXNnc3RyICIiCisiXG4iCisiICAgu/I6IgorCisjOiBtYWluLmM6MjIxMworbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBcmd1bWVudHM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyKyzsr9OlxuIgorCisjOiBtYWluLmM6MjIxNAorbXNnaWQgIi0tXHRcdFx0T25seSBmaWxlIG5hbWVzIGFmdGVyIHRoaXMiCittc2dzdHIgIi0tXHRcdFx01rvT0NTa1eLWrrrztcTOxLz+IgorCisjOiBtYWluLmM6MjIxNgorbXNnaWQgIi1yZWdpc3Rlclx0XHRSZWdpc3RlciB0aGlzIGd2aW0gZm9yIE9MRSIKK21zZ3N0ciAiLXJlZ2lzdGVyXHRcdNeisuEgZ3ZpbSC1vSBPTEUiCisKKyM6IG1haW4uYzoyMjE3Cittc2dpZCAiLXVucmVnaXN0ZXJcdFx0VW5yZWdpc3RlciBndmltIGZvciBPTEUiCittc2dzdHIgIi11bnJlZ2lzdGVyXHRcdMihz/sgT0xFINbQtcQgZ3ZpbSDXorLhIgorCisjOiBtYWluLmM6MjIyMAorbXNnaWQgIi1nXHRcdFx0UnVuIHVzaW5nIEdVSSAobGlrZSBcImd2aW1cIikiCittc2dzdHIgIi1nXHRcdFx0yrnTw8280M6958PmICjNrCBcImd2aW1cIikiCisKKyM6IG1haW4uYzoyMjIxCittc2dpZCAiLWZcdFx0XHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZlx0XHRcdMewvrA6IMb0tq/NvNDOvefD5sqxsrsgZm9yayIKKworIzogbWFpbi5jOjIyMjMKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRWaSDEo8q9ICjNrCBcInZpXCIpIgorCisjOiBtYWluLmM6MjIyNAorbXNnaWQgIi1lXHRcdFx0RXggbW9kZSAobGlrZSBcImV4XCIpIgorbXNnc3RyICItZVx0XHRcdEV4IMSjyr0gKM2sIFwiZXhcIikiCisKKyM6IG1haW4uYzoyMjI1Cittc2dpZCAiLXNcdFx0XHRTaWxlbnQgKGJhdGNoKSBtb2RlIChvbmx5IGZvciBcImV4XCIpIgorbXNnc3RyICItc1x0XHRcdLCyvrIgKGJhdGNoKSDEo8q9ICjWu8Tc0+sgXCJleFwiINK7xvDKudPDKSIKKworIzogbWFpbi5jOjIyMjcKK21zZ2lkICItZFx0XHRcdERpZmYgbW9kZSAobGlrZSBcInZpbWRpZmZcIikiCittc2dzdHIgIi1kXHRcdFx0RGlmZiDEo8q9ICjNrCBcInZpbWRpZmZcIiwgv8nRuMvZsci9z8G9zsS8/rK7zay0pikiCisKKyM6IG1haW4uYzoyMjI5Cittc2dpZCAiLXlcdFx0XHRFYXN5IG1vZGUgKGxpa2UgXCJldmltXCIsIG1vZGVsZXNzKSIKK21zZ3N0ciAiLXlcdFx0XHS88tLXxKPKvSAozawgXCJldmltXCIsIG1vZGVsZXNzKSIKKworIzogbWFpbi5jOjIyMzAKK21zZ2lkICItUlx0XHRcdFJlYWRvbmx5IG1vZGUgKGxpa2UgXCJ2aWV3XCIpIgorbXNnc3RyICItUlx0XHRcdNa7tsHEo8q9ICjNrCBcInZpZXdcIikiCisKKyM6IG1haW4uYzoyMjMxCittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdM/e1sbEo8q9ICjNrCBcInJ2aW1cIikiCisKKyM6IG1haW4uYzoyMjMyCittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHSyu7/J0N64xCAo0LTI687EvP4pIgorCisjOiBtYWluLmM6MjIzMworbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdM7Esb6yu7/J0N64xCIKKworIzogbWFpbi5jOjIyMzQKK21zZ2lkICItYlx0XHRcdEJpbmFyeSBtb2RlIgorbXNnc3RyICItYlx0XHRcdLb+vfjWxsSjyr0iCisKKyM6IG1haW4uYzoyMjM2Cittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0TGlzcCDEo8q9IgorCisjOiBtYWluLmM6MjIzOAorbXNnaWQgIi1DXHRcdFx0Q29tcGF0aWJsZSB3aXRoIFZpOiAnY29tcGF0aWJsZSciCittc2dzdHIgIi1DXHRcdFx0J2NvbXBhdGlibGUnILSrzbMgVmkgvObI3cSjyr0iCisKKyM6IG1haW4uYzoyMjM5Cittc2dpZCAiLU5cdFx0XHROb3QgZnVsbHkgVmkgY29tcGF0aWJsZTogJ25vY29tcGF0aWJsZSciCittc2dzdHIgIi1OXHRcdFx0J25vY29tcGF0aWJsZScgsrvN6sir0+u0q82zIFZpILzmyN2jrL/JyrnTwyBWaW0gvNPHv8TcwaYiCisKKyM6IG1haW4uYzoyMjQwCittc2dpZCAiLVZbTl1cdFx0VmVyYm9zZSBsZXZlbCIKK21zZ3N0ciAiLVZbTl1cdFx0VmVyYm9zZSC1yLy2IgorCisjOiBtYWluLmM6MjI0MQorbXNnaWQgIi1EXHRcdFx0RGVidWdnaW5nIG1vZGUiCittc2dzdHIgIi1EXHRcdFx0tffK1MSjyr0iCisKKyM6IG1haW4uYzoyMjQyCittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHSyu8q508O9u7u7zsS8/iwg1rvKudPDxNq05iIKKworIzogbWFpbi5jOjIyNDMKK21zZ2lkICItclx0XHRcdExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdCIKK21zZ3N0ciAiLXJcdFx0XHTB0LP2vbu7u87EvP66883Ls/YiCisKKyM6IG1haW4uYzoyMjQ0Cittc2dpZCAiLXIgKHdpdGggZmlsZSBuYW1lKVx0UmVjb3ZlciBjcmFzaGVkIHNlc3Npb24iCittc2dzdHIgIi1yICi8087EvP7D+ykgICAgICAgXHS71ri0yc+0zrHAwKO1xNfKwc8oUmVjb3ZlciBjcmFzaGVkIHNlc3Npb24pIgorCisjOiBtYWluLmM6MjI0NQorbXNnaWQgIi1MXHRcdFx0U2FtZSBhcyAtciIKK21zZ3N0ciAiLUxcdFx0XHTT6yAtciDSu9H5IgorCisjOiBtYWluLmM6MjI0NworbXNnaWQgIi1mXHRcdFx0RG9uJ3QgdXNlIG5ld2NsaSB0byBvcGVuIHdpbmRvdyIKK21zZ3N0ciAiLWZcdFx0XHSyu8q508MgbmV3Y2xpIMC0tPK/qrSwv9oiCisKKyM6IG1haW4uYzoyMjQ4Cittc2dpZCAiLWRldiA8ZGV2aWNlPlx0XHRVc2UgPGRldmljZT4gZm9yIEkvTyIKK21zZ3N0ciAiLWRldiA8ZGV2aWNlPlx0XHTKudPDIDxkZXZpY2U+INf2yuTI68rks/bJ6LG4IgorCisjOiBtYWluLmM6MjI1MQorbXNnaWQgIi1IXHRcdFx0c3RhcnQgaW4gSGVicmV3IG1vZGUiCittc2dzdHIgIi1IXHRcdFx0xvS2r86qIM+jsq7As8Sjyr0iCisKKyM6IG1haW4uYzoyMjU0Cittc2dpZCAiLUZcdFx0XHRzdGFydCBpbiBGYXJzaSBtb2RlIgorbXNnc3RyICItRlx0XHRcdMb0tq/OqiBGYXJzaSDEo8q9IgorCisjOiBtYWluLmM6MjI1NgorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW5hbD5cdMnotqjW1bbLzqogPHRlcm1pbmFsPiIKKworIzogbWFpbi5jOjIyNTcKK21zZ2lkICItdSA8dmltcmM+XHRcdFVzZSA8dmltcmM+IGluc3RlYWQgb2YgYW55IC52aW1yYyIKK21zZ3N0ciAiLXUgPHZpbXJjPlx0XHTKudPDIDx2aW1yYz4gzOa7u8jOus4gLnZpbXJjIgorCisjOiBtYWluLmM6MjI1OQorbXNnaWQgIi1VIDxndmltcmM+XHRcdFVzZSA8Z3ZpbXJjPiBpbnN0ZWFkIG9mIGFueSAuZ3ZpbXJjIgorbXNnc3RyICItVSA8Z3ZpbXJjPlx0XHTKudPDIDxndmltcmM+IMzmu7vIzrrOIC5ndmltcmMiCisKKyM6IG1haW4uYzoyMjYxCittc2dpZCAiLS1ub3BsdWdpblx0XHREb24ndCBsb2FkIHBsdWdpbiBzY3JpcHRzIgorbXNnc3RyICItLW5vcGx1Z2luXHRcdLK7vNPU2MjOus4gcGx1Z2luIgorCisjOiBtYWluLmM6MjI2MgorbXNnaWQgIi1vW05dXHRcdE9wZW4gTiB3aW5kb3dzIChkZWZhdWx0OiBvbmUgZm9yIGVhY2ggZmlsZSkiCittc2dzdHIgIi1vW05dXHRcdLTyv6ogTiC49rSwv9ogKNSkyejKx8O/uPbOxLz+0ru49ikiCisKKyM6IG1haW4uYzoyMjYzCittc2dpZCAiLU9bTl1cdFx0bGlrZSAtbyBidXQgc3BsaXQgdmVydGljYWxseSIKK21zZ3N0ciAiLU9bTl1cdFx0zawgLW8gtavKudPDtLnWsbfWuO4iCisKKyM6IG1haW4uYzoyMjY0Cittc2dpZCAiK1x0XHRcdFN0YXJ0IGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICIrXHRcdFx0xvS2r7rzzPi1vc7EvP694c6yIgorCisjOiBtYWluLmM6MjI2NQorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8bG51bT5cdFx0xvS2r7rzzPi1vbXaIDxsbnVtPiDQ0CIKKworIzogbWFpbi5jOjIyNjcKK21zZ2lkICItLWNtZCA8Y29tbWFuZD5cdEV4ZWN1dGUgPGNvbW1hbmQ+IGJlZm9yZSBsb2FkaW5nIGFueSB2aW1yYyBmaWxlIgorbXNnc3RyICItLWNtZCA8Y29tbWFuZD5cdLzT1NjIzrrOIHZpbXJjIMew1rTQ0CA8Y29tbWFuZD4iCisKKyM6IG1haW4uYzoyMjY5Cittc2dpZCAiLWMgPGNvbW1hbmQ+XHRcdEV4ZWN1dGUgPGNvbW1hbmQ+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1jIDxjb21tYW5kPlx0XHS809TYtdrSu7j2zsS8/rrz1rTQ0CA8Y29tbWFuZD4iCisKKyM6IG1haW4uYzoyMjcwCittc2dpZCAiLVMgPHNlc3Npb24+XHRcdFNvdXJjZSBmaWxlIDxzZXNzaW9uPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItUyA8c2Vzc2lvbj5cdFx0vNPU2LXa0ru49s7EvP6689TYyOsgU2Vzc2lvbiDOxLz+PHNlc3Npb24+IgorCisjOiBtYWluLmM6MjI3MQorbXNnaWQgIi1zIDxzY3JpcHRpbj5cdFJlYWQgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBmaWxlIDxzY3JpcHRpbj4iCittc2dzdHIgIi1zIDxzY3JpcHRpbj5cdLTTIDxzY3JpcHRpbj4gtsHI69K7sOPEo8q9w/zB7iIKKworIzogbWFpbi5jOjIyNzIKK21zZ2lkICItdyA8c2NyaXB0b3V0Plx0QXBwZW5kIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItdyA8c2NyaXB0b3V0Plx0ttTOxLz+IDxzY3JpcHRvdXQ+ILi9vNMoYXBwZW5kKcv509DK5MjrtcTD/MHuIgorCisjOiBtYWluLmM6MjI3MworbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLVcgPHNjcmlwdG91dD5cdLbUzsS8/iA8c2NyaXB0b3V0PiDQtMjry/nT0MrkyOu1xMP8we4iCisKKyM6IG1haW4uYzoyMjc1Cittc2dpZCAiLXhcdFx0XHRFZGl0IGVuY3J5cHRlZCBmaWxlcyIKK21zZ3N0ciAiLXhcdFx0XHSx4LytseDC67n9tcTOxLz+IgorCisjOiBtYWluLmM6MjI3OQorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0Q29ubmVjdCB2aW0gdG8gdGhpcyBwYXJ0aWN1bGFyIFgtc2VydmVyIgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdL2rIHZpbSDT69a4tqi1xCBYLXNlcnZlciDBrL3TIgorCisjOiBtYWluLmM6MjI4MQorbXNnaWQgIi1YXHRcdFx0RG8gbm90IGNvbm5lY3QgdG8gWCBzZXJ2ZXIiCittc2dzdHIgIi1YXHRcdFx0srvSqsGsvdO1vSBYIFNlcnZlciIKKworIzogbWFpbi5jOjIyODMKK21zZ2lkICItLXNvY2tldGlkIDx4aWQ+XHRPcGVuIFZpbSBpbnNpZGUgYW5vdGhlciBHVEsgd2lkZ2V0IgorbXNnc3RyICItLXNvY2tldGlkIDx4aWQ+XHTU2sHt0ru49iBHVEsg1+m8/sTatPK/qiBWaW0iCisKKyM6IG1haW4uYzoyMjg3Cittc2dpZCAiLS1yZW1vdGUgPGZpbGVzPlx0RWRpdCA8ZmlsZXM+IGluIGEgVmltIHNlcnZlciBhbmQgZXhpdCIKK21zZ3N0ciAiLS1yZW1vdGUgPGZpbGVzPlx0seC8rSBWaW0gt/7O8cb3yc+1xM7EvP6yos3Ls/YiCisKKyM6IG1haW4uYzoyMjg4Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgQXMgLS1yZW1vdGUgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQiCittc2dzdHIgIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiC1yNCn09ogLS1yZW1vdGUsILWru+G1yLryzsS8/s3qs8mx4LytIgorCisjOiBtYWluLmM6MjI4OQorbXNnaWQgIi0tcmVtb3RlLXNlbmQgPGtleXM+XHRTZW5kIDxrZXlzPiB0byBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQiCittc2dzdHIgIi0tcmVtb3RlLXNlbmQgPGtleXM+XHTLzbP2IDxrZXlzPiC1vSBWaW0gt/7O8cb3sqLNy7P2IgorCisjOiBtYWluLmM6MjI5MAorbXNnaWQgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWF0ZSA8ZXhwcj4gaW4gYSBWaW0gc2VydmVyIGFuZCBwcmludCByZXN1bHQiCittc2dzdHIgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHTU2rf+zvHG98nPx/Ox7bTvyr21xNa1sqK08tOhveG5+yIKKworIzogbWFpbi5jOjIyOTEKK21zZ2lkICItLXNlcnZlcmxpc3RcdFx0TGlzdCBhdmFpbGFibGUgVmltIHNlcnZlciBuYW1lcyBhbmQgZXhpdCIKK21zZ3N0ciAiLS1zZXJ2ZXJsaXN0XHRcdMHQs/a/ydPDtcQgVmltILf+zvHG98P7s8ayos3Ls/YiCisKKyM6IG1haW4uYzoyMjkyCittc2dpZCAiLS1zZXJ2ZXJuYW1lIDxuYW1lPlx0U2VuZCB0by9iZWNvbWUgdGhlIFZpbSBzZXJ2ZXIgPG5hbWU+IgorbXNnc3RyICItLXNlcnZlcm5hbWUgPG5hbWU+XHTLzdbBL7PJzqogVmltILf+zvHG9yA8bmFtZT4iCisKKyM6IG1haW4uYzoyMjk1Cittc2dpZCAiLWkgPHZpbWluZm8+XHRcdFVzZSA8dmltaW5mbz4gaW5zdGVhZCBvZiAudmltaW5mbyIKK21zZ3N0ciAiLWkgPHZpbWluZm8+XHRcdMq508MgPHZpbWluZm8+ILb4t8cgLnZpbWluZm8iCisKKyM6IG1haW4uYzoyMjk3Cittc2dpZCAiLWhcdFx0XHRwcmludCBIZWxwICh0aGlzIG1lc3NhZ2UpIGFuZCBleGl0IgorbXNnc3RyICItaFx0XHRcdLTy06HLtcP3KNKyvs3Kx7G+0MXPoim6883Ls/YiCisKKyM6IG1haW4uYzoyMjk4Cittc2dpZCAiLS12ZXJzaW9uXHRcdHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQiCittc2dzdHIgIi0tdmVyc2lvblx0XHS08tOhsOaxvtDFz6K6883Ls/YiCisKKyM6IG1haW4uYzoyMzAyCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKE1vdGlmIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbSC/ycq2sfC1xLLOyv0gKE1vdGlmILDmKTpcbiIKKworIzogbWFpbi5jOjIzMDUKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoQXRoZW5hIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbSC/ycq2sfC1xLLOyv0gKEF0aGVuYSCw5ik6XG4iCisKKyM6IG1haW4uYzoyMzA4Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHTU2rSwv9ogPGRpc3BsYXk+INa00NAgdmltIgorCisjOiBtYWluLmM6MjMwOQorbXNnaWQgIi1pY29uaWNcdFx0U3RhcnQgdmltIGljb25pZmllZCIKK21zZ3N0ciAiLWljb25pY1x0XHTG9LavuvPX7tChu68oaWNvbmlmaWVkKSIKKworIzogbWFpbi5jOjIzMTEKK21zZ2lkICItbmFtZSA8bmFtZT5cdFx0VXNlIHJlc291cmNlIGFzIGlmIHZpbSB3YXMgPG5hbWU+IgorbXNnc3RyICItbmFtZSA8bmFtZT5cdFx0tsHIoSBSZXNvdXJjZSDKsbDRIHZpbSC1xMP7s8bK086qIDxuYW1lPiIKKworIzogbWFpbi5jOjIzMTIKK21zZ2lkICJcdFx0XHQgIChVbmltcGxlbWVudGVkKVxuIgorbXNnc3RyICJcdFx0XHQgICjJ0M60yrXP1ilcbiIKKworIzogbWFpbi5jOjIzMTQKK21zZ2lkICItYmFja2dyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3IgdGhlIGJhY2tncm91bmQgKGFsc286IC1iZykiCittc2dzdHIgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdMnotqggPGNvbG9yPiDOqrGzvrDJqyAo0rK/ydPDIC1iZykiCisKKyM6IG1haW4uYzoyMzE1Cittc2dpZCAiLWZvcmVncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIG5vcm1hbCB0ZXh0IChhbHNvOiAtZmcpIgorbXNnc3RyICItZm9yZWdyb3VuZCA8Y29sb3I+XHTJ6LaoIDxjb2xvcj4gzqrSu7DjzsTX1tHVyasgKNKyv8nTwyAtZmcpIgorCisjOiBtYWluLmM6MjMxNiBtYWluLmM6MjMzNgorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPGZvbnQ+XHTKudPDIDxmb250PiDOqtK7sOPX1szlICjSsr/J08MgLWZuKSIKKworIzogbWFpbi5jOjIzMTcKK21zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCittc2dzdHIgIi1ib2xkZm9udCA8Zm9udD5cdMq508MgPGZvbnQ+IM6qtNbM5dfWzOUiCisKKyM6IG1haW4uYzoyMzE4Cittc2dpZCAiLWl0YWxpY2ZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBpdGFsaWMgdGV4dCIKK21zZ3N0ciAiLWl0YWxpY2ZvbnQgPGZvbnQ+XHTKudPDIDxmb250PiDOqtCxzOXX1szlIgorCisjOiBtYWluLmM6MjMxOSBtYWluLmM6MjMzNworbXNnaWQgIi1nZW9tZXRyeSA8Z2VvbT5cdFVzZSA8Z2VvbT4gZm9yIGluaXRpYWwgZ2VvbWV0cnkgKGFsc286IC1nZW9tKSIKK21zZ3N0ciAiLWdlb21ldHJ5IDxnZW9tPlx0yrnTwzxnZW9tPs6qs/XKvM671sMgKNKyv8nTwyAtZ2VvbSkiCisKKyM6IG1haW4uYzoyMzIwCittc2dpZCAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdFVzZSBhIGJvcmRlciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtYncpIgorbXNnc3RyICItYm9yZGVyd2lkdGggPHdpZHRoPlx0yrnTw7/ttsjOqiA8d2lkdGg+ILXEsd+/8iAo0rK/ydPDIC1idykiCisKKyM6IG1haW4uYzoyMzIxCittc2dpZCAiLXNjcm9sbGJhcndpZHRoIDx3aWR0aD4gIFVzZSBhIHNjcm9sbGJhciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtc3cpIgorbXNnc3RyICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiDJ6Laoufa2r8z1v+22yM6qIDx3aWR0aD4gKNKyv8nTwyAtc3cpIgorCisjOiBtYWluLmM6MjMyMworbXNnaWQgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHRVc2UgYSBtZW51IGJhciBoZWlnaHQgb2YgPGhlaWdodD4gKGFsc286IC1taCkiCittc2dzdHIgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHTJ6Laossu1pcHQtcS437bIzqogPGhlaWdodD4gKNKyv8nTwyAtbWgpIgorCisjOiBtYWluLmM6MjMyNSBtYWluLmM6MjMzOAorbXNnaWQgIi1yZXZlcnNlXHRcdFVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiAtcnYpIgorbXNnc3RyICItcmV2ZXJzZVx0XHTKudPDt7TP1CAo0rK/ydPDIC1ydikiCisKKyM6IG1haW4uYzoyMzI2Cittc2dpZCAiK3JldmVyc2VcdFx0RG9uJ3QgdXNlIHJldmVyc2UgdmlkZW8gKGFsc286ICtydikiCittc2dzdHIgIityZXZlcnNlXHRcdLK7yrnTw7e0z9QgKNKyv8nTwyArcnYpIgorCisjOiBtYWluLmM6MjMyNworbXNnaWQgIi14cm0gPHJlc291cmNlPlx0U2V0IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UiCittc2dzdHIgIi14cm0gPHJlc291cmNlPlx0yei2qNa4tqi1xNfK1LQiCisKKyM6IG1haW4uYzoyMzMwCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKFJJU0MgT1MgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJndmltIL/Jyrax8LXEss7K/SAoUklTQyBPUyCw5ik6XG4iCisKKyM6IG1haW4uYzoyMzMxCittc2dpZCAiLS1jb2x1bW5zIDxudW1iZXI+XHRJbml0aWFsIHdpZHRoIG9mIHdpbmRvdyBpbiBjb2x1bW5zIgorbXNnc3RyICItLWNvbHVtbnMgPG51bWJlcj5cdLSwv9qz9cq8v+22yCIKKworIzogbWFpbi5jOjIzMzIKK21zZ2lkICItLXJvd3MgPG51bWJlcj5cdEluaXRpYWwgaGVpZ2h0IG9mIHdpbmRvdyBpbiByb3dzIgorbXNnc3RyICItLXJvd3MgPG51bWJlcj5cdLSwv9qz9cq8uN+2yCIKKworIzogbWFpbi5jOjIzMzUKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoR1RLKyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW0gv8nKtrHwtcSyzsr9IChHVEsrILDmKTpcbiIKKworIzogbWFpbi5jOjIzMzkKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IChhbHNvOiAtLWRpc3BsYXkpIgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdNTaIDxkaXNwbGF5PiDWtNDQIHZpbSAo0rK/ydPDIC0tZGlzcGxheSkiCisKKyM6IG1haW4uYzoyMzQxCittc2dpZCAiLS1oZWxwXHRcdFNob3cgR25vbWUgYXJndW1lbnRzIgorbXNnc3RyICItLWhlbHBcdFx0z9TKviBHbm9tZSDP4LnYss7K/SIKKworIy4gRmFpbGVkIHRvIHNlbmQsIGFib3J0LgorIzogbWFpbi5jOjI1NjYKK21zZ2lkICIiCisiXG4iCisiU2VuZCBmYWlsZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyK3osvNse2078q9yqew3KGjXG4iCisKKyMuIExldCB2aW0gc3RhcnQgbm9ybWFsbHkuCisjOiBtYWluLmM6MjU3MQorbXNnaWQgIiIKKyJcbiIKKyJTZW5kIGZhaWxlZC4gVHJ5aW5nIHRvIGV4ZWN1dGUgbG9jYWxseVxuIgorbXNnc3RyICIiCisiXG4iCisiy82z9sqnsNyho8rUzbzU2rG+tdjWtNDQXG4iCisKKyM6IG1haW4uYzoyNjA0IG1haW4uYzoyNjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG9mICVkIGVkaXRlZCIKK21zZ3N0ciAiJWQg1tAgJWQg0tGx4LytIgorCisjOiBtYWluLmM6MjY0OAorbXNnaWQgIlNlbmQgZXhwcmVzc2lvbiBmYWlsZWQuXG4iCittc2dzdHIgIreiy82x7bTvyr3Kp7DcoaNcbiIKKworIzogbWFyay5jOjY1NQorbXNnaWQgIk5vIG1hcmtzIHNldCIKK21zZ3N0ciAiw7vT0Mnotqix6rzHIChtYXJrKSIKKworIzogbWFyay5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjgzOiBObyBtYXJrcyBtYXRjaGluZyBcIiVzXCIiCittc2dzdHIgIkUyODM6INXSsru1vbf7us8gXCIlc1wiILXEseq8xyhtYXJrKSIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NjY4Cittc2dpZCAiIgorIlxuIgorIm1hcmsgbGluZSAgY29sIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIrHqvMcg0NC6xSAgwdAgIM7EvP4vzsSxviIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtYXJrLmM6NzA2Cittc2dpZCAiIgorIlxuIgorIiBqdW1wIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgzPi1vSDQ0LrFICDB0CAgzsS8/i/OxLG+IgorCisjOiBtYXJrLmM6MTA2OAorbXNnaWQgIiIKKyJcbiIKKyIjIEZpbGUgbWFya3M6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIM7EvP6x6rzHOlxuIgorCisjLiBXcml0ZSB0aGUganVtcGxpc3Qgd2l0aCAtJworIzogbWFyay5jOjExMDMKK21zZ2lkICIiCisiXG4iCisiIyBKdW1wbGlzdCAobmV3ZXN0IGZpcnN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgSnVtcGxpc3QgKLTT0MK1vb7JKTpcbiIKKworIzogbWFyay5jOjExOTgKK21zZ2lkICIiCisiXG4iCisiIyBIaXN0b3J5IG9mIG1hcmtzIHdpdGhpbiBmaWxlcyAobmV3ZXN0IHRvIG9sZGVzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIM7EvP7E2sD6yre8x8K8ICi009DCtb2+ySk6XG4iCisKKyM6IG1hcmsuYzoxMjgxCittc2dpZCAiTWlzc2luZyAnPiciCittc2dzdHIgIsixydm21NOmtcQgJz4nIgorCisjOiBtYnl0ZS5jOjM5NQorbXNnaWQgIk5vdCBhIHZhbGlkIGNvZGVwYWdlIgorbXNnc3RyICKyu9X9yLe1xLT6wuvSsyIKKworIzogbWJ5dGUuYzozMDA1Cittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6ILK7xNzJ6LaoIElDIMr91rUiCisKKyM6IG1ieXRlLmM6MzE1NworbXNnaWQgIkUyODU6IEZhaWxlZCB0byBjcmVhdGUgaW5wdXQgY29udGV4dCIKK21zZ3N0ciAiRTI4NTogsrvE3LS0vajK5Mjryc/Pws7EIgorCisjOiBtYnl0ZS5jOjMzMDQKK21zZ2lkICJFMjg2OiBGYWlsZWQgdG8gb3BlbiBpbnB1dCBtZXRob2QiCittc2dzdHIgIkUyODY6ILK7xNy08r+qyuTI67eoIgorCisjOiBtYnl0ZS5jOjMzMTUKK21zZ2lkICJFMjg3OiBXYXJuaW5nOiBDb3VsZCBub3Qgc2V0IGRlc3Ryb3kgY2FsbGJhY2sgdG8gSU0iCittc2dzdHIgIkUyODc6IL6vuOY6ILK7xNzSxrP9IElNILXEIGNhbGxiYWNrIgorCisjOiBtYnl0ZS5jOjMzMjEKK21zZ2lkICJFMjg4OiBpbnB1dCBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGFueSBzdHlsZSIKK21zZ3N0ciAiRTI4ODogyuTI67eosrvWp7PWyM66ziBzdHlsZSIKKworIzogbWJ5dGUuYzozMzc4Cittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IMrkyOu3qLK71qez1sjOus4gc3R5bGUiCisKKyM6IG1ieXRlLmM6MzQ1MgorbXNnaWQgIkUyOTA6IG92ZXItdGhlLXNwb3Qgc3R5bGUgcmVxdWlyZXMgZm9udHNldCIKK21zZ3N0ciAiRTI5MDogb3Zlci10aGUtc3BvdCDQ6NKq19bM5byvKEZvbnRzZXQpIgorCisjOiBtYnl0ZS5jOjM0ODAKK21zZ2lkICJFMjkxOiBZb3VyIEdUSysgaXMgb2xkZXIgdGhhbiAxLjIuMy4gU3RhdHVzIGFyZWEgZGlzYWJsZWQiCittc2dzdHIgIkUyOTE6IMTjtcQgR1RLKyCxyCAxLjIuMyDAz6GjsrvE3Mq508PXtMysx/ihoyIKKworIzogbWJ5dGUuYzozNzE3Cittc2dpZCAiRTI5MjogSW5wdXQgTWV0aG9kIFNlcnZlciBpcyBub3QgcnVubmluZyIKK21zZ3N0ciAiRTI5MjogyuTI67eoudzA7bPM0PIoSW5wdXQgTWV0aG9kIFNlcnZlcinOtNTL0NAiCisKKyM6IG1lbWZpbGUuYzo0NzMKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5Mzogv+nOtLG7y/i2qCIKKworIzogbWVtZmlsZS5jOjk3MgorbXNnaWQgIkUyOTQ6IFNlZWsgZXJyb3IgaW4gc3dhcCBmaWxlIHJlYWQiCittc2dzdHIgIkUyOTQ6IL27u7vOxLz+tsHIobTtzvMiCisKKyM6IG1lbWZpbGUuYzo5NzcKK21zZ2lkICJFMjk1OiBSZWFkIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5NTogvbu7u87EvP62wcihtO3O8yIKKworIzogbWVtZmlsZS5jOjEwMjkKK21zZ2lkICJFMjk2OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIKK21zZ3N0ciAiRTI5Njogvbu7u87EvP7QtMjrtO3O8yIKKworIzogbWVtZmlsZS5jOjEwNDcKK21zZ2lkICJFMjk3OiBXcml0ZSBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTc6IL27u7vOxLz+0LTI67TtzvMiCisKKyM6IG1lbWZpbGUuYzoxMjQ0Cittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiC9u7u7zsS8/tLRvq205tTaISAo0KHQxLf7usXBrL3htcSwssirwqm2tCE/KSIKKworIzogbWVtbGluZS5jOjI3NQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMD8iCittc2dzdHIgIkUyOTg6INXSsru1vb/pIDA/IgorCisjOiBtZW1saW5lLmM6MzE1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAxPyIKK21zZ3N0ciAiRTI5ODog1dKyu7W9v+kgMT8iCisKKyM6IG1lbWxpbmUuYzozMzMKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDI/IgorbXNnc3RyICJFMjk4OiDV0rK7tb2/6SAyPyIKKworIy4gY291bGQgbm90IChyZSlvcGVuIHRoZSBzd2FwIGZpbGUsIHdoYXQgY2FuIHdlIGRvPz8/PworIzogbWVtbGluZS5jOjQ0MworbXNnaWQgIkUzMDE6IE9vcHMsIGxvc3QgdGhlIHN3YXAgZmlsZSEhISIKK21zZ3N0ciAiRTMwMTog4N7g3iwgvbu7u87EvP6yu7z7wcshISEiCisKKyM6IG1lbWxpbmUuYzo0NDgKK21zZ2lkICJFMzAyOiBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwMjogsrvE3LjEseS9u7u7zsS8/rXEw/uzxiIKKworIzogbWVtbGluZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIKK21zZ3N0ciAiRTMwMzogsrvE3LTyv6q9u7u7zsS8/iBcIiVzXCIsILK7v8nE3LvWuLTByyIKKworIzogbWVtbGluZS5jOjYxNworbXNnaWQgIkUzMDQ6IG1sX3RpbWVzdGFtcDogRGlkbid0IGdldCBibG9jayAwPz8iCittc2dzdHIgIkUzMDQ6IG1sX3RpbWVzdGFtcDog1dKyu7W9v+kgMD8/IgorCisjOiBtZW1saW5lLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDU6IE5vIHN3YXAgZmlsZSBmb3VuZCBmb3IgJXMiCittc2dzdHIgIkUzMDU6INXSsru1vSAlcyC1xL27u7vOxLz+IgorCisjOiBtZW1saW5lLmM6NzY3Cittc2dpZCAiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIKK21zZ3N0ciAix+vRodTxxOPSqsq508O1xL27u7vOxLz+ICiwtDAgzcuz9ik6ICIKKworIzogbWVtbGluZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA2OiBDYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiRTMwNjogsrvE3LTyv6ogJXMiCisKKyM6IG1lbWxpbmUuYzo4MzQKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBibG9jayAwIGZyb20gIgorbXNnc3RyICKyu8TctsHIob/pIDA6IgorCisjOiBtZW1saW5lLmM6ODM3Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIr/JxNzE48O71/a5/cjOus7Q3rjEu/LKxyBWaW0gu7nAtLK7vLC4/NDCvbu7u87EvP4uIgorCisjOiBtZW1saW5lLmM6ODQ3IG1lbWxpbmUuYzo4NjQKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltLlxuIgorbXNnc3RyICIgsrvE3NTasb6w5rG+tcQgVmltINbQyrnTwy5cbiIKKworIzogbWVtbGluZS5jOjg0OQorbXNnaWQgIlVzZSBWaW0gdmVyc2lvbiAzLjAuXG4iCittc2dzdHIgIsq508MgVmltIDMuMKGjXG4iCisKKyM6IG1lbWxpbmUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNzogJXMgZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMwNzogJXMgv7TG8MC0srvP8crHIFZpbSC9u7u7zsS8/iIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIgsrvE3NTa1eLMqLXnxNTJz8q508MuXG4iCisKKyM6IG1lbWxpbmUuYzo4NzAKK21zZ2lkICJUaGUgZmlsZSB3YXMgY3JlYXRlZCBvbiAiCittc2dzdHIgIrG+zsS8/rS0vajT2iAiCisKKyM6IG1lbWxpbmUuYzo4NzQKK21zZ2lkICIiCisiLFxuIgorIm9yIHRoZSBmaWxlIGhhcyBiZWVuIGRhbWFnZWQuIgorbXNnc3RyICIiCisiLFxuIgorIrvyysfV4s7EvP7S0bG7xsa7taGjIgorCisjOiBtZW1saW5lLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHN3YXAgZmlsZSBcIiVzXCIiCittc2dzdHIgIsq508O9u7u7zsS8/iBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3JpZ2luYWwgZmlsZSBcIiVzXCIiCittc2dzdHIgItStzsS8/iBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MzQKK21zZ2lkICJFMzA4OiBXYXJuaW5nOiBPcmlnaW5hbCBmaWxlIG1heSBoYXZlIGJlZW4gY2hhbmdlZCIKK21zZ3N0ciAiRTMwODogvq+45jog1K3KvM7EvP6/ycTc0tG+rdDeuMS5/cHLIgorCisjOiBtZW1saW5lLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDk6IFVuYWJsZSB0byByZWFkIGJsb2NrIDEgZnJvbSAlcyIKK21zZ3N0ciAiRTMwOTogsrvE3LTTICVzILbByKG/6SAxIgorCisjOiBtZW1saW5lLmM6OTc5Cittc2dpZCAiPz8/TUFOWSBMSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz/IscnZzKu24NDQIgorCisjOiBtZW1saW5lLmM6OTk1Cittc2dpZCAiPz8/TElORSBDT1VOVCBXUk9ORyIKK21zZ3N0ciAiPz8/0NC6xbTtzvMiCisKKyM6IG1lbWxpbmUuYzoxMDAyCittc2dpZCAiPz8/RU1QVFkgQkxPQ0siCittc2dzdHIgIj8/P7/VtcQgv+kiCisKKyM6IG1lbWxpbmUuYzoxMDI4Cittc2dpZCAiPz8/TElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/1dKyu7W90rvQqdDQIgorCisjOiBtZW1saW5lLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzEwOiBCbG9jayAxIElEIHdyb25nICglcyBub3QgYSAuc3dwIGZpbGU/KSIKK21zZ3N0ciAiRTMxMDogv+kgMSBJRCC07c7zICglcyCyu8rHvbu7u87EvP4/KSIKKworIzogbWVtbGluZS5jOjEwNjUKK21zZ2lkICI/Pz9CTE9DSyBNSVNTSU5HIgorbXNnc3RyICI/Pz/V0rK7tb2/6SIKKworIzogbWVtbGluZS5jOjEwODEKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgYmUgbWVzc2VkIHVwIgorbXNnc3RyICI/Pz8gtNPV4sDvtb0gPz8/RU5EILXExNrI3b/JxNzT0M7KzOIiCisKKyM6IG1lbWxpbmUuYzoxMDk3Cittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGhhdmUgYmVlbiBpbnNlcnRlZC9kZWxldGVkIgorbXNnc3RyICI/Pz8gtNPV4sDvtb0gPz8/RU5EILXExNrI3b/JxNyxu8m+s/0vsuXI67n9IgorCisjOiBtZW1saW5lLmM6MTExNworbXNnaWQgIj8/P0VORCIKK21zZ3N0ciAiPz8/RU5EIgorCisjOiBtZW1saW5lLmM6MTE0MworbXNnaWQgIkUzMTE6IFJlY292ZXJ5IEludGVycnVwdGVkIgorbXNnc3RyICJFMzExOiC71ri00tHW0LbPIgorCisjOiBtZW1saW5lLmM6MTE0NQorbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIkUzMTI6ILvWuLTKsbeiyfq07c7zOyDH69ei0uK/qs23zqogPz8/ILXE0NAiCisKKyM6IG1lbWxpbmUuYzoxMTQ4Cittc2dpZCAiUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIgorbXNnc3RyICK71ri0zeqzyS4gx+vIt7ao0rvH0NX9s6MuIgorCisjOiBtZW1saW5lLmM6MTE0OQorbXNnaWQgIiIKKyJcbiIKKyIoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWVcbiIKK21zZ3N0ciAiIgorIlxuIgorIijE47/JxNzP69KqsNHV4rj2zsS8/sHttObOqrHwtcTOxLz+w/ujrFxuIgorCisjOiBtZW1saW5lLmM6MTE1MAorbXNnaWQgImFuZCBydW4gZGlmZiB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIHRvIGNoZWNrIGZvciBjaGFuZ2VzKVxuIgorbXNnc3RyICLU2da00NAgZGlmZiDT69StzsS8/rHIvc/S1LzssunKx7fx09C4xLHkKVxuIgorCisjOiBtZW1saW5lLmM6MTE1MQorbXNnaWQgIiIKKyJEZWxldGUgdGhlIC5zd3AgZmlsZSBhZnRlcndhcmRzLlxuIgorIlxuIgorbXNnc3RyICIiCisiKEQp1rG908m+s/0gLnN3cCC9u7u7zsS8/lxuIgorIlxuIgorCisjLiB1c2UgbXNnKCkgdG8gc3RhcnQgdGhlIHNjcm9sbGluZyBwcm9wZXJseQorIzogbWVtbGluZS5jOjEyMDcKK21zZ2lkICJTd2FwIGZpbGVzIGZvdW5kOiIKK21zZ3N0ciAi1dK1vdLUz8K1xL27u7vOxLz+OiIKKworIzogbWVtbGluZS5jOjEzODUKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAg1NrEv8ewxL/CvDpcbiIKKworIzogbWVtbGluZS5jOjEzODcKK21zZ2lkICIgICBVc2luZyBzcGVjaWZpZWQgbmFtZTpcbiIKK21zZ3N0ciAiICAgVXNpbmcgc3BlY2lmaWVkIG5hbWU6XG4iCisKKyM6IG1lbWxpbmUuYzoxMzkxCittc2dpZCAiICAgSW4gZGlyZWN0b3J5ICIKK21zZ3N0ciAiICAg1NrEv8K8ICIKKworIzogbWVtbGluZS5jOjE0MDkKK21zZ2lkICIgICAgICAtLSBub25lIC0tXG4iCittc2dzdHIgIiAgICAgIC0tIM7eIC0tXG4iCisKKyM6IG1lbWxpbmUuYzoxNDgxCittc2dpZCAiICAgICAgICAgIG93bmVkIGJ5OiAiCittc2dzdHIgIiAgICAgICAgICAgIMv509DV3zogIgorCisjOiBtZW1saW5lLmM6MTQ4MworbXNnaWQgIiAgIGRhdGVkOiAiCittc2dzdHIgIiAgICDI1cbaOiAiCisKKyM6IG1lbWxpbmUuYzoxNDg3IG1lbWxpbmUuYzozNjgwCittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICAgyNXG2jogIgorCisjOiBtZW1saW5lLmM6MTUwMworbXNnaWQgIiAgICAgICAgIFtmcm9tIFZpbSB2ZXJzaW9uIDMuMF0iCittc2dzdHIgIiAgICAgICAgICAgICAgW7TTIFZpbSCw5rG+IDMuMF0iCisKKyM6IG1lbWxpbmUuYzoxNTA3Cittc2dpZCAiICAgICAgICAgW2RvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGVdIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgIFuyu8/xIFZpbSC1xL27u7vOxLz+XSIKKworIzogbWVtbGluZS5jOjE1MTEKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgICAgICAgICDOxLz+w/s6ICIKKworIzogbWVtbGluZS5jOjE1MjMKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgIG1vZGlmaWVkOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgICDQ3rjEuf06ICIKKworIzogbWVtbGluZS5jOjE1MjQKK21zZ2lkICJZRVMiCittc2dzdHIgIsrHIgorCisjOiBtZW1saW5lLmM6MTUyNAorbXNnaWQgIm5vIgorbXNnc3RyICK38SIKKworIzogbWVtbGluZS5jOjE1MjgKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgdXNlciBuYW1lOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgICDTw7unw/s6ICIKKworIzogbWVtbGluZS5jOjE1MzUKK21zZ2lkICIgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiICAgICAg1ve7+sP7OiAiCisKKyM6IG1lbWxpbmUuYzoxNTM3Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgICAg1ve7+sP7OiAiCisKKyM6IG1lbWxpbmUuYzoxNTQzCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgICC9+LPMIElEOiAiCisKKyM6IG1lbWxpbmUuYzoxNTQ5Cittc2dpZCAiIChzdGlsbCBydW5uaW5nKSIKK21zZ3N0ciAiICjV/dTa1rTQ0CkiCisKKyM6IG1lbWxpbmUuYzoxNTYxCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbV0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbsrvE3NTasb6w5rG+tcQgVmltIMnPyrnTw10iCisKKyM6IG1lbWxpbmUuYzoxNTY0Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIG9uIHRoaXMgY29tcHV0ZXJdIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgW7K7xNzU2rG+u/rJz8q508NdIgorCisjOiBtZW1saW5lLmM6MTU2OQorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgcmVhZF0iCittc2dzdHIgIiAgICAgICAgIFuyu8TctsHIoV0iCisKKyM6IG1lbWxpbmUuYzoxNTczCittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSBvcGVuZWRdIgorbXNnc3RyICIgICAgICAgICBbsrvE3LTyv6pdIgorCisjOiBtZW1saW5lLmM6MTc2MworbXNnaWQgIkUzMTM6IENhbm5vdCBwcmVzZXJ2ZSwgdGhlcmUgaXMgbm8gc3dhcCBmaWxlIgorbXNnc3RyICJFMzEzOiCyu8TcsaPB9CwgsrvKudPDvbu7u87EvP4iCisKKyM6IG1lbWxpbmUuYzoxODE2Cittc2dpZCAiRmlsZSBwcmVzZXJ2ZWQiCittc2dzdHIgIs7EvP7S0bGjwfQiCisKKyM6IG1lbWxpbmUuYzoxODE4Cittc2dpZCAiRTMxNDogUHJlc2VydmUgZmFpbGVkIgorbXNnc3RyICJFMzE0OiCxo8H0yqew3CIKKworIzogbWVtbGluZS5jOjE4ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNTogbWxfZ2V0OiBpbnZhbGlkIGxudW06ICVsZCIKK21zZ3N0ciAiRTMxNTogbWxfZ2V0OiC07c7ztcQgbG51bTogJWxkIgorCisjOiBtZW1saW5lLmM6MTkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE2OiBtbF9nZXQ6IGNhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzE2OiBtbF9nZXQ6INXSsru1vbXaICVsZCDQ0CIKKworIzogbWVtbGluZS5jOjIzMDMKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDMiCittc2dzdHIgIkUzMTc6INa41eu/6SBpZCC07c7zIDMiCisKKyM6IG1lbWxpbmUuYzoyMzgzCittc2dpZCAic3RhY2tfaWR4IHNob3VsZCBiZSAwIgorbXNnc3RyICJzdGFja19pZHgg06a4w8rHIDAiCisKKyM6IG1lbWxpbmUuYzoyNDQ1Cittc2dpZCAiRTMxODogVXBkYXRlZCB0b28gbWFueSBibG9ja3M/IgorbXNnc3RyICJFMzE4OiC4/NDCzKu24L/pPyIKKworIzogbWVtbGluZS5jOjI2MDIKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDQiCittc2dzdHIgIkUzMTc6INa41eu/6SBpZCC07c7zIDQiCisKKyM6IG1lbWxpbmUuYzoyNjI5Cittc2dpZCAiZGVsZXRlZCBibG9jayAxPyIKK21zZ3N0ciAiyb6z/b/pIDE/IgorCisjOiBtZW1saW5lLmM6MjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIwOiBDYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMyMDog1dKyu7W9tdogJWxkINDQIgorCisjOiBtZW1saW5lLmM6MzA3MgorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmciCittc2dzdHIgIkUzMTc6INa41eu/6SBpZCC07c7zIgorCisjOiBtZW1saW5lLmM6MzA4OAorbXNnaWQgInBlX2xpbmVfY291bnQgaXMgemVybyIKK21zZ3N0ciAicGVfbGluZV9jb3VudCDOqsHjIgorCisjOiBtZW1saW5lLmM6MzExNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzIyOiBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVsZCBwYXN0IHRoZSBlbmQiCittc2dzdHIgIkUzMjI6INDQusWzrLP2t7bOpzogJWxkILOsuf294c6yIgorCisjOiBtZW1saW5lLmM6MzEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIzOiBsaW5lIGNvdW50IHdyb25nIGluIGJsb2NrICVsZCIKK21zZ3N0ciAiRTMyMzogv+kgJWxkINDQyv207c7zIgorCisjOiBtZW1saW5lLmM6MzE3MAorbXNnaWQgIlN0YWNrIHNpemUgaW5jcmVhc2VzIgorbXNnc3RyICK20dW7tPPQodT2vNMiCisKKyM6IG1lbWxpbmUuYzozMjE2Cittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAyIgorbXNnc3RyICJFMzE3OiDWuNXrv+kgaWQgtO0gMiIKKworIzogbWVtbGluZS5jOjM2NzAKK21zZ2lkICJFMzI1OiBBVFRFTlRJT04iCittc2dzdHIgIkUzMjU6INei0uIiCisKKyM6IG1lbWxpbmUuYzozNjcxCittc2dpZCAiIgorIlxuIgorIkZvdW5kIGEgc3dhcCBmaWxlIGJ5IHRoZSBuYW1lIFwiIgorbXNnc3RyICIiCisiXG4iCisit6LP1r27u7vOxLz+IFwiIgorCisjOiBtZW1saW5lLmM6MzY3NQorbXNnaWQgIldoaWxlIG9wZW5pbmcgZmlsZSBcIiIKK21zZ3N0ciAitbG08r+qzsS8/sqxIFwiIgorCisjOiBtZW1saW5lLmM6MzY4NAorbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICAgICCxyL27u7vOxLz+0MIhXG4iCisKKyMuIFNvbWUgb2YgdGhlc2UgbWVzc2FnZXMgYXJlIGxvbmcgdG8gYWxsb3cgdHJhbnNsYXRpb24gdG8KKyMuICogb3RoZXIgbGFuZ3VhZ2VzLgorIzogbWVtbGluZS5jOjM2ODgKK21zZ2lkICIiCisiXG4iCisiKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLlxuIgorIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d29cbiIKKyIgICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMSkgv8nE3NPQwe3Su7j2s8zQ8tKy1Nqx4LytzazSu7j2zsS8/i5cbiIKKyIgICAgyOe5+8rH1eLR+aOsx+vXotLisrvSqtK7xvDQtMjro6yyu8i7xOO1xMWswaa2vLvhuLbW7rarwfeho1xuIgorCisjOiBtZW1saW5lLmM6MzY4OQorbXNnaWQgIiAgICBRdWl0LCBvciBjb250aW51ZSB3aXRoIGNhdXRpb24uXG4iCittc2dzdHIgIiAgICDNy7P2o6y78srHvMzQ+LHgvK2ho1xuIgorCisjOiBtZW1saW5lLmM6MzY5MAorbXNnaWQgIiIKKyJcbiIKKyIoMikgQW4gZWRpdCBzZXNzaW9uIGZvciB0aGlzIGZpbGUgY3Jhc2hlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigyKSDJz9K7tM6x4LyttMvOxLz+yrGxwMCjXG4iCisKKyM6IG1lbWxpbmUuYzozNjkxCittc2dpZCAiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSBcIjpyZWNvdmVyXCIgb3IgXCJ2aW0gLXIgIgorbXNnc3RyICIgICAgyOe5+8rH1eLR+Swgx+vTwyBcIjpyZWNvdmVyXCIgu/IgXCJ2aW0gLXIiCisKKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgu9a4tNDeuMTE2sjdICi9+NK7sr3LtcP3x+u/tCBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorCisjOiBtZW1saW5lLmM6MzY5NAorbXNnaWQgIiAgICBJZiB5b3UgZGlkIHRoaXMgYWxyZWFkeSwgZGVsZXRlIHRoZSBzd2FwIGZpbGUgXCIiCittc2dzdHIgIiAgICDI57n7uMO71ri0tcS2vNLRvq271ri0wcssIMfr1rG908m+s/20y727u7vOxLz+IFwiIgorCisjOiBtZW1saW5lLmM6MzY5NgorbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byBhdm9pZCB0aGlzIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICDS1LHcw+LU2b+0tb20y9DFz6IuXG4iCisKKyM6IG1lbWxpbmUuYzozNzEwIG1lbWxpbmUuYzozNzE0Cittc2dpZCAiU3dhcCBmaWxlIFwiIgorbXNnc3RyICK9u7u7zsS8/iBcIiIKKworIzogbWVtbGluZS5jOjM3MTEgbWVtbGluZS5jOjM3MTcKK21zZ2lkICJcIiBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlwiINLRvq205tTawcshIgorCisjOiBtZW1saW5lLmM6MzcyMAorbXNnaWQgIlZJTSAtIEFUVEVOVElPTiIKK21zZ3N0ciAiVklNIC0g16LS4iIKKworIzogbWVtbGluZS5jOjM3MjIKK21zZ2lkICJTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICK9u7u7zsS8/tLRvq205tTaISIKKworIzogbWVtbGluZS5jOjM3MjYKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdCIKK21zZ3N0ciAiIgorItLU1ru2wbe9yr208r+qKCZPKVxuIgorItaxvdOx4LytKCZFKVxuIgorIrvWuLQoJlIpXG4iCisizcuz9igmUSkiCisKKyM6IG1lbWxpbmUuYzozNzI4Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXRcbiIKKyImRGVsZXRlIGl0IgorbXNnc3RyICIiCisi0tTWu7bBt73KvbTyv6ooJk8pXG4iCisi1rG907HgvK0oJkUpXG4iCisiu9a4tCgmUilcbiIKKyLNy7P2KCZRKVxuIgorIsm+s/29u7u7zsS8/igmRCkiCisKKyM6IG1lbWxpbmUuYzozNzgxCittc2dpZCAiRTMyNjogVG9vIG1hbnkgc3dhcCBmaWxlcyBmb3VuZCIKK21zZ3N0ciAiRTMyNjog1dK1vcyrtuC9u7u7zsS8/iIKKworIzogbWVudS5jOjY0Cittc2dpZCAiRTMyNzogUGFydCBvZiBtZW51LWl0ZW0gcGF0aCBpcyBub3Qgc3ViLW1lbnUiCittc2dzdHIgIkUzMjc6ILK/t92yy7Wlz+6yu8rH19Oyy7WlIgorCisjOiBtZW51LmM6NjUKK21zZ2lkICJFMzI4OiBNZW51IG9ubHkgZXhpc3RzIGluIGFub3RoZXIgbW9kZSIKK21zZ3N0ciAiRTMyODogssu1pda7xNzU2sbky/zEo8q91tDKudPDIgorCisjOiBtZW51LmM6NjYKK21zZ2lkICJFMzI5OiBObyBtZW51IG9mIHRoYXQgbmFtZSIKK21zZ3N0ciAiRTMyOTogw7vT0MTH0fm1xLLLtaUiCisKKyM6IG1lbnUuYzo1MDMKK21zZ2lkICJFMzMwOiBNZW51IHBhdGggbXVzdCBub3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzMwOiCyy7WlsrvE3Na4z/LX09GhtaUiCisKKyM6IG1lbnUuYzo1NDIKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTogsrvE3NaxvdOw0bLLtaXP7rzTtb2yy7WlzPXW0CIKKworIzogbWVudS5jOjU0OAorbXNnaWQgIkUzMzI6IFNlcGFyYXRvciBjYW5ub3QgYmUgcGFydCBvZiBhIG1lbnUgcGF0aCIKK21zZ3N0ciAiRTMzMjogt9a49M/fsrvE3MrHssu1pbXE0ruyv7fWIgorCisjLiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgbWVudSwgYW5kIHdlIGxpc3QgdGhlIG1hcHBpbmdzCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG1lbnUuYzoxMDYzCittc2dpZCAiIgorIlxuIgorIi0tLSBNZW51cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gssu1pSAtLS0iCisKKyM6IG1lbnUuYzoxOTg5Cittc2dpZCAiVGVhciBvZmYgdGhpcyBtZW51IgorbXNnc3RyICLH0M/CtMuyy7WlIgorCisjOiBtZW51LmM6MjA1NAorbXNnaWQgIkUzMzM6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBtZW51IGl0ZW0iCittc2dzdHIgIkUzMzM6ILLLtaWx2NDo1rjP8tK7uPayy7Wlz+4iCisKKyM6IG1lbnUuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzQ6IE1lbnUgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTMzNDogW7LLtaVdINXSsru1vSAlcyIKKworIzogbWVudS5jOjIxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNTogTWVudSBub3QgZGVmaW5lZCBmb3IgJXMgbW9kZSIKK21zZ3N0ciAiRTMzNTogJXMgxKPKvc60tqjS5bLLtaUiCisKKyM6IG1lbnUuYzoyMTgxCittc2dpZCAiRTMzNjogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzM2OiCyy7WlsdjQ6Na4z/LX07LLtaUiCisKKyM6IG1lbnUuYzoyMjAyCittc2dpZCAiRTMzNzogTWVudSBub3QgZm91bmQgLSBjaGVjayBtZW51IG5hbWVzIgorbXNnc3RyICJFMzM3OiDV0rK7tb2yy7WlIC0gx+u87LLpssu1pcP7s8YiCisKKyM6IG1lc3NhZ2UuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZyAlczoiCittc2dzdHIgIrSmwO0gJXMgyrG3osn6tO3O8zoiCisKKyM6IG1lc3NhZ2UuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlNGxkOiIKK21zZ3N0ciAi0NAgJTRsZDoiCisKKyM6IG1lc3NhZ2UuYzo1MjMKK21zZ2lkICJbc3RyaW5nIHRvbyBsb25nXSIKK21zZ3N0ciAiW9fWt/u0rsyrs6RdIgorCisjOiBtZXNzYWdlLmM6NjY5Cittc2dpZCAiTWVzc2FnZXMgbWFpbnRhaW5lcjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4iCittc2dzdHIgIrzyzOXW0M7E0MXPos6su6TV3zogV2FuZyBKdW4gPGp1bndAdHVyYm9saW51eC5jb20uY24+IgorCisjOiBtZXNzYWdlLmM6ODgxCittc2dpZCAiSW50ZXJydXB0OiAiCittc2dzdHIgItLR1tC2zzogIgorCisjOiBtZXNzYWdlLmM6ODg0Cittc2dpZCAiSGl0IEVOVEVSIHRvIGNvbnRpbnVlIgorbXNnc3RyICLH67C0IEVOVEVSILzM0PgiCisKKyM6IG1lc3NhZ2UuYzo4ODYKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICLH67C0IEVOVEVSILvyxuTL/MP8we68zND4IgorCisjOiBtZXNzYWdlLmM6MTk0MAorbXNnaWQgIi0tIE1vcmUgLS0iCittc2dzdHIgIi0tILj8tuAgLS0iCisKKyM6IG1lc3NhZ2UuYzoxOTQzCittc2dpZCAiIChSRVQvQlM6IGxpbmUsIFNQQUNFL2I6IHBhZ2UsIGQvdTogaGFsZiBwYWdlLCBxOiBxdWl0KSIKK21zZ3N0ciAiIChSRVQvQlM6IM/yz8Ivz/LJz9K70NAsIL/VuPEvYjog0rvSsywgZC91OiCw69KzLCBxOiDNy7P2KSIKKworIzogbWVzc2FnZS5jOjE5NDQKK21zZ2lkICIgKFJFVDogbGluZSwgU1BBQ0U6IHBhZ2UsIGQ6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUOiDP8s/C0rvQ0Cwgv9Ww17z8OiDSu9KzLCBkOiCw69KzLCBxOiDNy7P2KSIKKworIzogbWVzc2FnZS5jOjI0MTkgbWVzc2FnZS5jOjI0MzQKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAizsrM4iIKKworIzogbWVzc2FnZS5jOjI0MjEKK21zZ2lkICIiCisiJlllc1xuIgorIiZObyIKK21zZ3N0ciAiIgorIiZZysdcbiIKKyImTrfxIgorCisjOiBtZXNzYWdlLmM6MjQzNgorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZZysdcbiIKKyImTrfxXG4iCisiJkPIoc/7IgorCisjOiBtZXNzYWdlLmM6MjQ1NAorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZZysdcbiIKKyImTrfxXG4iCisiJkHIq7K/saO05lxuIgorIiZEyKuyv7K7tOZcbiIKKyImQ8ihz/siCisKKyM6IG1lc3NhZ2UuYzoyNDk0Cittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAisaO05s7EvP621Luwv/IiCisKKyM6IG1lc3NhZ2UuYzoyNDk2Cittc2dpZCAiT3BlbiBGaWxlIGRpYWxvZyIKK21zZ3N0ciAitPK/qs7EvP621Luwv/IiCisKKyMuIFRPRE86IG5vbi1HVUkgZmlsZSBzZWxlY3RvciBoZXJlCisjOiBtZXNzYWdlLmM6MjU0NworbXNnaWQgIkUzMzg6IFNvcnJ5LCBubyBmaWxlIGJyb3dzZXIgaW4gY29uc29sZSBtb2RlIgorbXNnc3RyICJFMzM4OiDW97/YzKgoQ29uc29sZSnEo8q9yrHDu9PQzsS8/uSvwMDG9yhmaWxlIGJyb3dzZXIpIgorCisjOiBtaXNjMS5jOjI0NDkKK21zZ2lkICJXMTA6IFdhcm5pbmc6IENoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSIKK21zZ3N0ciAiVzEwOiDXotLiOiDE49X91NrQ3rjE0ru49ta7tsHOxLz+IgorCisjOiBtaXNjMS5jOjI2NzgKK21zZ2lkICIxIG1vcmUgbGluZSIKK21zZ3N0ciAiu7nT0NK70NAiCisKKyM6IG1pc2MxLmM6MjY4MAorbXNnaWQgIjEgbGluZSBsZXNzIgorbXNnc3RyICLJ2dPa0rvQ0CIKKworIzogbWlzYzEuYzoyNjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgorbXNnc3RyICIgu7nT0CAlbGQg0NAiCisKKyM6IG1pc2MxLmM6MjY4NworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgZmV3ZXIgbGluZXMiCittc2dzdHIgIta7yqMgJWxkINDQIgorCisjOiBtaXNjMS5jOjI2OTAKK21zZ2lkICIgKEludGVycnVwdGVkKSIKK21zZ3N0ciAiICjS0dbQts8pIgorCisjOiBtaXNjMS5jOjYyNDQKK21zZ2lkICJWaW06IHByZXNlcnZpbmcgZmlsZXMuLi5cbiIKK21zZ3N0ciAiVmltOiCxo8H0zsS8/tbQLi4uXG4iCisKKyMuIGNsb3NlIGFsbCBtZW1maWxlcywgd2l0aG91dCBkZWxldGluZworIzogbWlzYzEuYzo2MjU0Cittc2dpZCAiVmltOiBGaW5pc2hlZC5cbiIKK21zZ3N0ciAiVmltOiC94cr4LlxuIgorCisjOiBtaXNjMi5jOjY0NCBtaXNjMi5jOjY2MAorbXNnaWQgIkVSUk9SOiAiCittc2dzdHIgIrTtzvM6ICIKKworIzogbWlzYzIuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJbYnl0ZXNdIMirsr8gYWxsb2MtZnJlZWQgJWx1LSVsdSwgyrnTw9bQICVsdSwgcGVhayDKudPDICVsdVxuIgorCisjOiBtaXNjMi5jOjY2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiW2NhbGxzXSB0b3RhbCByZS9tYWxsb2MoKSdzICVsdSwgdG90YWwgZnJlZSgpJ3MgJWx1XG4iCisiXG4iCittc2dzdHIgIiIKKyJbtffTw10gyKuyvyByZS9tYWxsb2MoKTogJWx1LCDIq7K/IGZyZWUoKSc6ICVsdVxuIgorIlxuIgorCisjOiBtaXNjMi5jOjcyMQorbXNnaWQgIkUzNDA6IExpbmUgaXMgYmVjb21pbmcgdG9vIGxvbmciCittc2dzdHIgIkUzNDA6ILTL0NC5/bOkIgorCisjOiBtaXNjMi5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQxOiBJbnRlcm5hbCBlcnJvcjogbGFsbG9jKCVsZCwgKSIKK21zZ3N0ciAiRTM0MTogxNqyv7TtzvM6IGxhbGxvYyglbGQsICkiCisKKyM6IG1pc2MyLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDI6IE91dCBvZiBtZW1vcnkhICAoYWxsb2NhdGluZyAlbHUgYnl0ZXMpIgorbXNnc3RyICJFMzQyOiDE2rTmsrvX4yEgKLOiytTF5NbDICVsdSDX1r3a1+kpIgorCisjOiBtaXNjMi5jOjI1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FsbGluZyBzaGVsbCB0byBleGVjdXRlOiBcIiVzXCIiCittc2dzdHIgIrX308Mgc2hlbGwg1rTQ0DogXCIlc1wiIgorCisjOiBtaXNjMi5jOjI3MDMgbWlzYzIuYzo1MTQyIG9wdGlvbi5jOjQ1ODQKK21zZ2lkICJNaXNzaW5nIGNvbG9uIgorbXNnc3RyICLIscnZw7C6xSIKKworIzogbWlzYzIuYzoyNzA1IG1pc2MyLmM6MjczMgorbXNnaWQgIklsbGVnYWwgbW9kZSIKK21zZ3N0ciAisrvV/ci3tcTEo8q9IgorCisjOiBtaXNjMi5jOjI3NzEKK21zZ2lkICJJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIrK71f3It7XEyvOx6tDO17QiCisKKyM6IG1pc2MyLmM6MjgxMSBtaXNjMi5jOjUxNjIKK21zZ2lkICJkaWdpdCBleHBlY3RlZCIKK21zZ3N0ciAi06a4w86qyv3X1iIKKworIzogbWlzYzIuYzoyODE2Cittc2dpZCAiSWxsZWdhbCBwZXJjZW50YWdlIgorbXNnc3RyICKyu9X9yLe1xLDZt9axyCIKKworIzogbWlzYzIuYzozMTIwCittc2dpZCAiRW50ZXIgZW5jcnlwdGlvbiBrZXk6ICIKK21zZ3N0ciAiyuTI68Pcwus6ICIKKworIzogbWlzYzIuYzozMTIxCittc2dpZCAiRW50ZXIgc2FtZSBrZXkgYWdhaW46ICIKK21zZ3N0ciAix+vU2crkyOvSu7TOOiAiCisKKyM6IG1pc2MyLmM6MzEzMQorbXNnaWQgIktleXMgZG9uJ3QgbWF0Y2ghIgorbXNnc3RyICLBvbTOyuTI68Pcwuuyu82sISIKKworIzogbWlzYzIuYzozNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICJFMzQzOiCyu9X9yLe1xMK3vrY6ICcqKltudW1iZXJdJyCx2NDo0qrU2sK3vra94c6yu/LSqr3T1vggJyVzJyIKKworIzogbWlzYzIuYzo0ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IGNkcGF0aCDW0MO709DEv8K8IFwiJXNcIiIKKworIzogbWlzYzIuYzo0OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDU6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NTog1NrCt7621tDV0rK7tb3OxLz+IFwiJXNcIiIKKworIzogbWlzYzIuYzo0OTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDY6IE5vIG1vcmUgZGlyZWN0b3J5IFwiJXNcIiBmb3VuZCBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDY6INTawre+ttbQ1dKyu7W9uPy24LXEzsS8/iBcIiVzXCIiCisKKyM6IG1pc2MyLmM6NDkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ3OiBObyBtb3JlIGZpbGUgXCIlc1wiIGZvdW5kIGluIHBhdGgiCittc2dzdHIgIkUzNDc6INTawre+ttbQ1dKyu7W9uPy24LXEzsS8/iBcIiVzXCIiCisKKyM6IG1pc2MyLmM6NTE1NAorbXNnaWQgIklsbGVnYWwgY29tcG9uZW50IgorbXNnc3RyICKyu9X9yLe1xNfpvP4iCisKKyM6IG5vcm1hbC5jOjI3OTgKK21zZ2lkICJXYXJuaW5nOiB0ZXJtaW5hbCBjYW5ub3QgaGlnaGxpZ2h0IgorbXNnc3RyICLXotLiOiDE47XE1tW2y7K7xNzP1Mq+uN/BwbbIIgorCisjOiBub3JtYWwuYzoyOTkzCittc2dpZCAiRTM0ODogTm8gc3RyaW5nIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0ODogueKx6rSmw7vT0NfWt/u0riIKKworIzogbm9ybWFsLmM6Mjk5NQorbXNnaWQgIkUzNDk6IE5vIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ5OiC54rHqtKbDu9PQyrax8NfWIgorCisjOiBub3JtYWwuYzo0MTYwCittc2dpZCAiRTM1MjogQ2Fubm90IGVyYXNlIGZvbGRzIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTI6ILK7xNzU2sS/x7C1xCAnZm9sZG1ldGhvZCcgz8LJvrP9IGZvbGQiCisKKyM6IG9wcy5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAxIHRpbWUiCittc2dzdHIgItK70NAgJXMguf0g0ru0ziIKKworIzogb3BzLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICLSu9DQICVzILn9ICVkILTOIgorCisjOiBvcHMuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgMSB0aW1lIgorbXNnc3RyICIlbGQg0NAgJXMguf0g0ru0ziIKKworIzogb3BzLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIlbGQg0NAgJXMguf0gJWQgtM4iCisKKyM6IG9wcy5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgdG8gaW5kZW50Li4uICIKK21zZ3N0ciAiyrax8CAlbGQg0NAuLi4iCisKKyM6IG9wcy5jOjY4OAorbXNnaWQgIjEgbGluZSBpbmRlbnRlZCAiCittc2dzdHIgItK70NDS0cq2sfAiCisKKyM6IG9wcy5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgaW5kZW50ZWQgIgorbXNnc3RyICLS0cq2sfAgJWxkINDQIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogb3BzLmM6MTUyOAorbXNnaWQgImNhbm5vdCB5YW5rOyBkZWxldGUgYW55d2F5IgorbXNnc3RyICKyu8TcuLTWxjsg1rG908m+s/0iCisKKyM6IG9wcy5jOjIwMTgKK21zZ2lkICIxIGxpbmUgY2hhbmdlZCIKK21zZ3N0ciAiIDEg0NAgfmVkIgorCisjOiBvcHMuYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBjaGFuZ2VkIgorbXNnc3RyICIgJWxkINDQIH5lZCIKKworIzogb3BzLmM6MjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmcmVlaW5nICVsZCBsaW5lcyIKK21zZ3N0ciAiys23xSAlbGQg0NDW0CIKKworIzogb3BzLmM6MjY1OAorbXNnaWQgIjEgbGluZSB5YW5rZWQiCittc2dzdHIgItLRuLTWxiAxINDQIgorCisjOiBvcHMuYzoyNjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgItLRuLTWxiAlbGQg0NAiCisKKyM6IG9wcy5jOjI5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1MzogTm90aGluZyBpbiByZWdpc3RlciAlcyIKK21zZ3N0ciAiRTM1MzogvMS05sb3ICVzIMDvw7vT0LarzvciCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogb3BzLmM6MzQ1NAorbXNnaWQgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSC8xLTmxvcgLS0tIgorCisjOiBvcHMuYzo0NTY1Cittc2dpZCAiSWxsZWdhbCByZWdpc3RlciBuYW1lIgorbXNnc3RyICKyu9X9yLe1xLzEtObG98P7s8YiCisKKyM6IG9wcy5jOjQ2NDUKK21zZ2lkICIiCisiXG4iCisiIyBSZWdpc3RlcnM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjILzEtObG9zpcbiIKKworIzogb3BzLmM6NDY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHJlZ2lzdGVyIHR5cGUgJWQiCittc2dzdHIgIs601qq1xNeisuHA4NDNOiAlZCIKKworIzogb3BzLmM6NTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU0OiBJbnZhbGlkIHJlZ2lzdGVyIG5hbWU6ICclcyciCittc2dzdHIgIkUzNTQ6ILzEtObG98P7s8a07c7zOiAnJXMnIgorCisjOiBvcHMuYzo1MzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBDb2xzOyAiCittc2dzdHIgIiVsZCDB0DsgIgorCisjOiBvcHMuYzo1NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlbGVjdGVkICVzJWxkIG9mICVsZCBMaW5lczsgJWxkIG9mICVsZCBXb3JkczsgJWxkIG9mICVsZCBCeXRlcyIKK21zZ3N0ciAi0aHU8cHLICVzJWxkLyVsZCDQ0DsgJWxkLyVsZCDX1ihXb3JkKTsgJWxkLyVsZCDX1rf7KEJ5dGVzKSIKKworIzogb3BzLmM6NTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiCittc2dzdHIgIsHQICVzLyVzOyDQ0CAlbGQvJWxkOyDX1ihXb3JkKSAlbGQvJWxkOyDX1rf7KEJ5dGUpICVsZC8lbGQiCisKKyM6IG9wcy5jOjU0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCslbGQgZm9yIEJPTSkiCittc2dzdHIgIigrJWxkIGZvciBCT00pIgorCisjOiBvcHRpb24uYzoxOTg5Cittc2dpZCAiVGhhbmtzIGZvciBmbHlpbmcgVmltIgorbXNnc3RyICK40NC7xPrRodTxIFZpbSIKKworIzogb3B0aW9uLmM6MzE3NQorbXNnaWQgIk9wdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICKyu9ans9a4w9Ghz+4iCisKKyM6IG9wdGlvbi5jOjMyMDAKK21zZ2lkICJOb3QgYWxsb3dlZCBpbiBhIG1vZGVsaW5lIgorbXNnc3RyICKyu8Tc1NrEo8q90NDA77P2z9YiCisKKyM6IG9wdGlvbi5jOjMyNTYKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0tbHHsMno1sM6ICIKKworIzogb3B0aW9uLmM6MzM5NQorbXNnaWQgIk51bWJlciByZXF1aXJlZCBhZnRlciA9IgorbXNnc3RyICI9ILrz0OjSqtPQyv3X1iIKKworIzogb3B0aW9uLmM6MzcwMiBvcHRpb24uYzo0MzA5Cittc2dpZCAiTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIlRlcm1jYXAgwO/D5tXSsru1vSIKKworIzogb3B0aW9uLmM6Mzc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IgorbXNnc3RyICKyu9X9yLe1xNfWt/sgPCVzPiIKKworIzogb3B0aW9uLmM6NDI5NCBvcHRpb24uYzo1NDk3Cittc2dpZCAiTm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAi1eLA77K7v8nKudPDIgorCisjOiBvcHRpb24uYzo0MzAxCittc2dpZCAiQ2Fubm90IHNldCAndGVybScgdG8gZW1wdHkgc3RyaW5nIgorbXNnc3RyICKyu8Tcyei2qCAndGVybScgzqq/1dfWt/u0riIKKworIzogb3B0aW9uLmM6NDMwNAorbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdGVybSBpbiBHVUkiCittc2dzdHIgItTazbzQzb3nw+bW0LK7xNzH0Lu71tW2yyIKKworIzogb3B0aW9uLmM6NDMwNgorbXNnaWQgIlVzZSBcIjpndWlcIiB0byBzdGFydCB0aGUgR1VJIgorbXNnc3RyICLK5MjrIFwiOmd1aVwiIMC0xvS2r8280M6958PmIgorCisjOiBvcHRpb24uYzo0MzI3Cittc2dpZCAiJ2JhY2t1cGV4dCcgYW5kICdwYXRjaG1vZGUnIGFyZSBlcXVhbCIKK21zZ3N0ciAiJ2JhY2t1cGV4dCcguPogJ3BhdGNobW9kZScgysfSu9H5tcQiCisKKyM6IG9wdGlvbi5jOjQ1ODYKK21zZ2lkICJaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIsHjs6S2yNfWt/u0riIKKworIzogb3B0aW9uLmM6NDY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG51bWJlciBhZnRlciA8JXM+IgorbXNnc3RyICI8JXM+ILrzyLHJ2cr919YiCisKKyM6IG9wdGlvbi5jOjQ2NjgKK21zZ2lkICJNaXNzaW5nIGNvbW1hIgorbXNnc3RyICLIscnZtrq6xSIKKworIzogb3B0aW9uLmM6NDY3NQorbXNnaWQgIk11c3Qgc3BlY2lmeSBhICcgdmFsdWUiCittc2dzdHIgIrHY0OjWuLao0ru49iAnINa1IgorCisjOiBvcHRpb24uYzo0NzE1Cittc2dpZCAiY29udGFpbnMgdW5wcmludGFibGUgY2hhcmFjdGVyIgorbXNnc3RyICKw/LqssrvE3M/Uyr61xNfWt/siCisKKyM6IG9wdGlvbi5jOjQ3MjgKK21zZ2lkICJJbnZhbGlkIGZvbnQocykiCittc2dzdHIgIrK71f3It7XE19bM5SIKKworIzogb3B0aW9uLmM6NDczNAorbXNnaWQgImNhbid0IHNlbGVjdCBmb250c2V0IgorbXNnc3RyICKyu8TcyrnTw9fWzOW8ryhGb250c2V0KSIKKworIzogb3B0aW9uLmM6NDczNgorbXNnaWQgIkludmFsaWQgZm9udHNldCIKK21zZ3N0ciAisrvV/ci3tcTX1szlvK8oRm9udHNldCkiCisKKyM6IG9wdGlvbi5jOjQ3NDMKK21zZ2lkICJjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICKyu8TcyrnTw8notqi1xL/t19bM5ShXaWRlZm9udCkiCisKKyM6IG9wdGlvbi5jOjQ3NDUKK21zZ2lkICJJbnZhbGlkIHdpZGUgZm9udCIKK21zZ3N0ciAisrvV/ci3tcS/7dfWzOUoV2lkZWZvbnQpIgorCisjOiBvcHRpb24uYzo1MDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIDwlYz4iCittc2dzdHIgIjwlYz4guvPT0LK71f3It7XE19a3+yIKKworIzogb3B0aW9uLmM6NTA5NworbXNnaWQgImNvbW1hIHJlcXVpcmVkIgorbXNnc3RyICLQ6NKqtrq6xSIKKworIzogb3B0aW9uLmM6NTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICInY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIgorbXNnc3RyICInY29tbWVudHN0cmluZycgsdjQ6MrHv9Ww17vysPy6rCAlcyIKKworIzogb3B0aW9uLmM6NTE1MworbXNnaWQgIk5vIG1vdXNlIHN1cHBvcnQiCittc2dzdHIgIrK71qez1srzseoiCisKKyM6IG9wdGlvbi5jOjUzOTkKK21zZ2lkICJVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICLDu9PQveHK+LXEse2078q9OiAiCisKKyM6IG9wdGlvbi5jOjU0MDMKK21zZ2lkICJ0b28gbWFueSBpdGVtcyIKK21zZ3N0ciAizKu24LbUz/MiCisKKyM6IG9wdGlvbi5jOjU0MDUKK21zZ2lkICJ1bmJhbGFuY2VkIGdyb3VwcyIKK21zZ3N0ciAisru21LPGtcTX6SIKKworIzogb3B0aW9uLmM6NTYyMAorbXNnaWQgIkEgcHJldmlldyB3aW5kb3cgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgItSkwMC0sL/a0tG+rbTm1NrByyIKKworIzogb3B0aW9uLmM6NTg4MSBvcHRpb24uYzo1OTEwCittc2dpZCAiJ3dpbmhlaWdodCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWluaGVpZ2h0JyIKK21zZ3N0ciAiJ3dpbmhlaWdodCcgsrvE3LHIICd3aW5taW5oZWlnaHQnILj8ydkiCisKKyM6IG9wdGlvbi5jOjU5MjYgb3B0aW9uLmM6NTk0NQorbXNnaWQgIid3aW53aWR0aCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWlud2lkdGgnIgorbXNnc3RyICInd2lud2lkdGgnILK7xNyxyCAnd2lubWlud2lkdGgnILj8ydkiCisKKyM6IG9wdGlvbi5jOjYwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCBhdCBsZWFzdCAlZCBsaW5lcyIKK21zZ3N0ciAi1sHJ2dDo0qogJWQg0NAiCisKKyM6IG9wdGlvbi5jOjYwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIgorbXNnc3RyICLWwcnZ0OjSqiAlZCDB0CIKKworIzogb3B0aW9uLmM6NjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU1OiBVbmtub3duIG9wdGlvbjogJXMiCittc2dzdHIgIkUzNTU6ILK71f3It7XE0aHP7jogJXMiCisKKyM6IG9wdGlvbi5jOjY1MDAKK21zZ2lkICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIGNvZGVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDW1bbLseDC6yAtLS0iCisKKyM6IG9wdGlvbi5jOjY1MDIKK21zZ2lkICIiCisiXG4iCisiLS0tIEdsb2JhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDIq77WINGhz+7WtSAtLS0iCisKKyM6IG9wdGlvbi5jOjY1MDQKK21zZ2lkICIiCisiXG4iCisiLS0tIExvY2FsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tILG+tdgg0aHP7ta1IC0tLSIKKworIzogb3B0aW9uLmM6NjUwNgorbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g0aHP7iAtLS0iCisKKyM6IG9wdGlvbi5jOjcxOTYKK21zZ2lkICJFMzU2OiBnZXRfdmFycCBFUlJPUiIKK21zZ3N0ciAiRTM1NjogZ2V0X3ZhcnAgtO3O8yIKKworIzogb3B0aW9uLmM6ODExMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU3OiAnbGFuZ21hcCc6IE1hdGNoaW5nIGNoYXJhY3RlciBtaXNzaW5nIGZvciAlcyIKK21zZ3N0ciAiRTM1NzogJ2xhbmdtYXAnOiDV0rK7tb0gJXMgttTTprXE19a3+yIKKworIzogb3B0aW9uLmM6ODE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU4OiAnbGFuZ21hcCc6IEV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgc2VtaWNvbG9uOiAlcyIKK21zZ3N0ciAiRTM1ODogJ2xhbmdtYXAnOiC31rrFuvPT0Lbg0+C1xNfWt/s6ICVzIgorCisjOiBvc19hbWlnYS5jOjI3MworbXNnaWQgImNhbm5vdCBvcGVuICIKK21zZ3N0ciAisrvE3LTyv6oiCisKKyM6IG9zX2FtaWdhLmM6MzA3Cittc2dpZCAiVklNOiBDYW4ndCBvcGVuIHdpbmRvdyFcbiIKK21zZ3N0ciAiVklNOiCyu8TctPK/qrSwv9ohXG4iCisKKyM6IG9zX2FtaWdhLmM6MzI5Cittc2dpZCAiTmVlZCBBbWlnYWRvcyB2ZXJzaW9uIDIuMDQgb3IgbGF0ZXJcbiIKK21zZ3N0ciAi0OjSqiBBbWlnYWRvcyCw5rG+IDIuMDQg0tTJz1xuIgorCisjOiBvc19hbWlnYS5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJOZWVkICVzIHZlcnNpb24gJWxkXG4iCittc2dzdHIgItDo0qogJXMgsOaxviAlbGRcbiIKKworIzogb3NfYW1pZ2EuYzo0MDcKK21zZ2lkICJDYW5ub3Qgb3BlbiBOSUw6XG4iCittc2dzdHIgIrK7xNy08r+qIE5JTDpcbiIKKworIzogb3NfYW1pZ2EuYzo0MTgKK21zZ2lkICJDYW5ub3QgY3JlYXRlICIKK21zZ3N0ciAisrvE3LS0vaggIgorCisjOiBvc19hbWlnYS5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJWaW0gZXhpdGluZyB3aXRoICVkXG4iCittc2dzdHIgIlZpbSC3tbvY1rU6ICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTI4Cittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAisrvE3MfQu7vW97/YzKgoY29uc29sZSnEo8q9ICE/XG4iCisKKyM6IG9zX2FtaWdhLmM6OTM4IG9zX21hYy5jOjExNjggb3NfbXN3aW4uYzo2MTkgb3NfcmlzY29zLmM6NzI4IG9zX3VuaXguYzoyNzI2Cittc2dpZCAiRTM1OTogU2NyZWVuIG1vZGUgc2V0dGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFMzU5OiCyu9ans9bJ6LaoxsHEu8Sjyr0iCisKKyM6IG9zX2FtaWdhLmM6OTk0Cittc2dpZCAibWNoX2dldF9zaGVsbHNpemU6IG5vdCBhIGNvbnNvbGU/P1xuIgorbXNnc3RyICJtY2hfZ2V0X3NoZWxsc2l6ZTogsrvKx9b3v9jMqChjb25zb2xlKT8/XG4iCisKKyMuIGlmIFZpbSBvcGVuZWQgYSB3aW5kb3c6IEV4ZWN1dGluZyBhIHNoZWxsIG1heSBjYXVzZSBjcmFzaGVzCisjOiBvc19hbWlnYS5jOjExNDIKK21zZ2lkICJFMzYwOiBDYW5ub3QgZXhlY3V0ZSBzaGVsbCB3aXRoIC1mIG9wdGlvbiIKK21zZ3N0ciAiRTM2MDogsrvE3NPDIC1mINGhz+7WtNDQIHNoZWxsIgorCisjOiBvc19hbWlnYS5jOjExODMgb3NfYW1pZ2EuYzoxMjczCittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICKyu8Tc1rTQ0CAiCisKKyM6IG9zX2FtaWdhLmM6MTE4NiBvc19hbWlnYS5jOjEyODMKK21zZ2lkICJzaGVsbCAiCittc2dzdHIgInNoZWxsICIKKworIzogb3NfYW1pZ2EuYzoxMjA2IG9zX2FtaWdhLmM6MTMwOAorbXNnaWQgIiByZXR1cm5lZFxuIgorbXNnc3RyICIg0tG3tbvYXG4iCisKKyM6IG9zX2FtaWdhLmM6MTQ0OAorbXNnaWQgIkFOQ0hPUl9CVUZfU0laRSB0b28gc21hbGwuIgorbXNnc3RyICJBTkNIT1JfQlVGX1NJWkUgzKvQoSIKKworIzogb3NfYW1pZ2EuYzoxNDUyCittc2dpZCAiSS9PIEVSUk9SIgorbXNnc3RyICJJL08gtO3O8yIKKworIzogb3NfbXN3aW4uYzo1MDMKK21zZ2lkICIuLi4odHJ1bmNhdGVkKSIKK21zZ3N0ciAiIgorCisjOiBvc19tc3dpbi5jOjU5NAorbXNnaWQgIidjb2x1bW5zJyBpcyBub3QgODAsIGNhbm5vdCBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICInY29sdW1ucycgsrvKxyA4MCwgsrvE3Na00NDN4rK/w/zB7iIKKworIzogb3NfbXN3aW4uYzo3MDYgb3NfdW5peC5jOjQ5NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NDogTGlicmFyeSBjYWxsIGZhaWxlZCBmb3IgXCIlcygpXCIiCittc2dzdHIgIkUzNjQ6ILX308O6r8r9v+IgXCIlc1wiKCkgyqew3CIKKworIzogb3NfbXN3aW4uYzoxMzQwCittc2dpZCAiRTIzNzogUHJpbnRlciBzZWxlY3Rpb24gZmFpbGVkIgorbXNnc3RyICJFMjM3OiCyu8Tc0aHU8bTLtPLTobv6IgorCisjOiBvc19tc3dpbi5jOjEzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG8gJXMgb24gJXMiCittc2dzdHIgIrTTICVzILW9ICVzIgorCisjOiBvc19tc3dpbi5jOjE0NDkgb3NfbXN3aW4uYzoxNDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODogtPLTobTtzvM6ICVzIgorCisjOiBvc19tc3dpbi5jOjE0NTkKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICLOtNaqIgorCisjOiBvc19tc3dpbi5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAi0tG08tOhOiAnJXMnIgorCisjOiBvc19tc3dpbi5jOjI1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NDogSWxsZWdhbCBjaGFyc2V0IG5hbWUgXCIlc1wiIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDQ6INfWt/u8ryBcIiVzXCIgsrvE3LbU06bX1szlXCIlc1wiIgorCisjOiBvc19tc3dpbi5jOjI1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTogsrvV/ci3tcTX1rf7ICclYycgs/bP1tTa19bM5cP7s8YgXCIlc1wiIMTaIgorCisjOiBvc19yaXNjb3MuYzoxMjI3Cittc2dpZCAiRTM2NjogSW52YWxpZCAnb3NmaWxldHlwZScgb3B0aW9uIC0gdXNpbmcgVGV4dCIKK21zZ3N0ciAiRTM2NjogsrvV/ci3tcQgJ2ZpbGV0eXBlJyDRoc/uIC0gyrnTw7S/zsTX1sSjyr0iCisKKyM6IG9zX3VuaXguYzo4MDAKK21zZ2lkICJWaW06IERvdWJsZSBzaWduYWwsIGV4aXRpbmdcbiIKK21zZ3N0ciAiVmltOiDLq9bY0MW6xSwgzcuz9tbQXG4iCisKKyM6IG9zX3VuaXguYzo4MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbCAlc1xuIgorbXNnc3RyICJWaW06IENWaW06IMC5vdi1vdDFusUoc2lnbmFsKSAlc1xuIgorCisjOiBvc191bml4LmM6ODA5Cittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIgorbXNnc3RyICJWaW06IMC5vdi1vdbCw/y1xNDFusUoZGVhZGx5IHNpZ25hbGUpXG4iCisKKyM6IG9zX3VuaXguYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0b29rICVsZCBtc2VjIgorbXNnc3RyICK08r+qIFggV2luZG93INPDyrEgJWxkIMPrIgorCisjOiBvc191bml4LmM6MTA5MAorbXNnaWQgIiIKKyJcbiIKKyJWaW06IEdvdCBYIGVycm9yXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWaW06IFggtO3O81xuIgorCisjOiBvc191bml4LmM6MTE1NworbXNnaWQgIlRlc3RpbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIrLiytQgWCBXaW5kb3cgyqew3CIKKworIzogb3NfdW5peC5jOjEzMDEKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IgorbXNnc3RyICK08r+qIFggV2luZG93ILOsyrEiCisKKyM6IG9zX3VuaXguYzoyODk5IG9zX3VuaXguYzozNDgzCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsICIKK21zZ3N0ciAiIgorIlxuIgorIrK7xNzWtNDQIHNoZWxsIgorCisjOiBvc191bml4LmM6Mjk0NAorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCBzaFxuIgorbXNnc3RyICIiCisiXG4iCisisrvE3Na00NAgc2hlbGwgc2hcbiIKKworIzogb3NfdW5peC5jOjI5NDggb3NfdW5peC5jOjM0ODkKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisiU2hlbGwg0tG3tbvYIgorCisjOiBvc191bml4LmM6MzA4MgorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgY3JlYXRlIHBpcGVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyKyu8TcvajBornctcBcbiIKKworIzogb3NfdW5peC5jOjMwOTcKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGZvcmtcbiIKK21zZ3N0ciAiIgorIlxuIgorIrK7xNwgZm9ya1xuIgorCisjOiBvc191bml4LmM6MzQ5NgorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIsP8we7S0b3hyvhcbiIKKworIzogb3NfdW5peC5jOjQ5OTMKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICK08r+qIFggV2luZG93IMqnsNwiCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgItTa0NC6xSAiCisKKyM6IG9zX3czMmV4ZS5jOjE2OQorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHZpbTMyLmRsbCEiCittc2dzdHIgIrK7xNy809TYIHZpbTMyLmRsbKOhIgorCisjOiBvc193MzJleGUuYzoxNjkgb3NfdzMyZXhlLmM6MTc5Cittc2dpZCAiVklNIEVycm9yIgorbXNnc3RyICJWSU0gtO3O8yIKKworIzogb3NfdzMyZXhlLmM6MTc5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAisrvE3NDe1f26r8r91rjV67W9IERMTCEiCisKKyM6IG9zX3dpbjE2LmM6NTc4IG9zX3dpbjMyLmM6MzAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAiU2hlbGwgt7W72Na1ICVkIgorCisjOiBvc193aW4zMi5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgJXMgZXZlbnRcbiIKK21zZ3N0ciAiVmltOiDAub3Ytb0gJXMgysK8/lxuIgorCisjOiBvc193aW4zMi5jOjI0OTEKK21zZ2lkICJjbG9zZSIKK21zZ3N0ciAiudix1SIKKworIzogb3Nfd2luMzIuYzoyNDkzCittc2dpZCAibG9nb2ZmIgorbXNnc3RyICLXos/7IgorCisjOiBvc193aW4zMi5jOjI0OTQKK21zZ2lkICJzaHV0ZG93biIKK21zZ3N0ciAiudi7+iIKKworIzogb3Nfd2luMzIuYzoyOTc1Cittc2dpZCAiRTM3MTogQ29tbWFuZCBub3QgZm91bmQiCittc2dzdHIgIkUzNzE6INXSsru1vcP8we4iCisKKyM6IG9zX3dpbjMyLmM6Mjk4OAorbXNnaWQgIiIKKyJWSU1SVU4uRVhFIG5vdCBmb3VuZCBpbiB5b3VyICRQQVRILlxuIgorIkV4dGVybmFsIGNvbW1hbmRzIHdpbGwgbm90IHBhdXNlIGFmdGVyIGNvbXBsZXRpb24uXG4iCisiU2VlICA6aGVscCB3aW4zMi12aW1ydW4gIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorItTaxOO1xCAkUEFUSCDW0NXSsru1vSBWSU1SVU4uRVhFLlxuIgorIs3isr/D/MHu1rTQ0M3qsc+6872rsru74dTdzaMuXG4iCisivfjSu7K9y7XD98fr1rTQ0CA6aGVscCB3aW4zMi12aW1ydW4gIgorCisjOiBvc193aW4zMi5jOjI5OTEKK21zZ2lkICJWaW0gV2FybmluZyIKK21zZ3N0ciAiVmltIL6vuOYiCisKKyM6IHF1aWNrZml4LmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzI6IFRvbyBtYW55ICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MjoguPHKvbuv19a3+7SuwO/T0MyrtuAgJSUlYyAiCisKKyM6IHF1aWNrZml4LmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzM6IFVuZXhwZWN0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzczOiC48cq9u6/X1rf7tK6yu9OmuMOz9s/WICUlJWMgIgorCisjOiBxdWlja2ZpeC5jOjM0OAorbXNnaWQgIkUzNzQ6IE1pc3NpbmcgXSBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc0OiC48cq9u6/X1rf7tK7A78nZwcsgXSIKKworIzogcXVpY2tmaXguYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NTogVW5zdXBwb3J0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc1OiC48cq9u6/X1rf7tK7A79PQsrvWp7PWtcQgJSUlYyAiCisKKyM6IHF1aWNrZml4LmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzY6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIHByZWZpeCIKK21zZ3N0ciAiRTM3NjoguPHKvbuv19a3+7Suv6rNt8Dv09Cyu9X9yLe1xCAlJSVjICIKKworIzogcXVpY2tmaXguYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6ILjxyr27r9fWt/u0rsDv09Cyu9X9yLe1xCAlJSVjICIKKworIzogcXVpY2tmaXguYzo0MTQKK21zZ2lkICJFMzc4OiAnZXJyb3Jmb3JtYXQnIGNvbnRhaW5zIG5vIHBhdHRlcm4iCittc2dzdHIgIkUzNzg6ICdlcnJvcmZvcm1hdCcgzrTJ6LaoIgorCisjOiBxdWlja2ZpeC5jOjUyMAorbXNnaWQgIkUzNzk6IE1pc3Npbmcgb3IgZW1wdHkgZGlyZWN0b3J5IG5hbWUiCittc2dzdHIgIkUzNzk6INXSsru1vcS/wrzD+7PGu/LKx7/VtcTEv8K8w/uzxiIKKworIzogcXVpY2tmaXguYzo5MzEKK21zZ2lkICJObyBtb3JlIGl0ZW1zIgorbXNnc3RyICLDu9PQxuTL/LbUz/MiCisKKyM6IHF1aWNrZml4LmM6MTE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIoJWQgb2YgJWQpJXMlczogIgorbXNnc3RyICIoJWQgLyAlZCklcyVzOiAiCisKKyM6IHF1aWNrZml4LmM6MTE1NAorbXNnaWQgIiAobGluZSBkZWxldGVkKSIKK21zZ3N0ciAiICjQ0NLRyb6z/SkiCisKKyM6IHF1aWNrZml4LmM6MTM2MAorbXNnaWQgIkUzODA6IEF0IGJvdHRvbSBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MDogUXVpY2tmaXggttHVu73hzrIiCisKKyM6IHF1aWNrZml4LmM6MTM2OQorbXNnaWQgIkUzODE6IEF0IHRvcCBvZiBxdWlja2ZpeCBzdGFjayIKK21zZ3N0ciAiRTM4MTogUXVpY2tmaXggttHVu7altssiCisKKyM6IHF1aWNrZml4LmM6MTM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBsaXN0ICVkIG9mICVkOyAlZCBlcnJvcnMiCittc2dzdHIgIrTtzvPB0LHtICVkLyVkOyC5stPQICVkIM/utO3O8yIKKworIzogcXVpY2tmaXguYzoxODQyCittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4MjogsrvE3NC0yOujrCdidWZ0eXBlJyDRoc/u0tHJ6LaoIgorCisjOiByZWdleHAuYzo4MDEKK21zZ2lkICJFMzM5OiBQYXR0ZXJuIHRvbyBsb25nIgorbXNnc3RyICJFMzM5OiDD+9fWzKuzpCIKKworIzogcmVnZXhwLmM6MTMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE6IE5lc3RlZCAlcyoiCittc2dzdHIgIkU2MTogs7LXtCAlcyoiCisKKyM6IHJlZ2V4cC5jOjEzMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyOiBOZXN0ZWQgJXMlYyIKK21zZ3N0ciAiRTYyOiCzste0ICVzJWMiCisKKyM6IHJlZ2V4cC5jOjE0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY0OiAlcyVjIGZvbGxvd3Mgbm90aGluZyIKK21zZ3N0ciAiRTY0OiAlcyVjIMO709C907arzvciCisKKyM6IHJlZ2V4cC5jOjI0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ludGF4IGVycm9yIGluICVzey4uLn0iCittc2dzdHIgItPvt6i07c7zOiAlc3suLi59IgorCisjOiByZWdleHAuYzoyNzE2Cittc2dpZCAiRTM2MTogQ3Jhc2ggaW50ZXJjZXB0ZWQ7IHJlZ2V4cCB0b28gY29tcGxleD8iCittc2dzdHIgIkUzNjE6ILK7xNzWtNDQOyByZWd1bGFyIGV4cHJlc3Npb24gzKu4tNTTPyIKKworIzogcmVnZXhwLmM6Mjg1MQorbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2MzogcmVndWxhciBleHByZXNzaW9uINTss8m20dW708O54rXEtO3O8yIKKworIzogcmVnZXhwLmM6MzA4NworbXNnaWQgIkV4dGVybmFsIHN1Ym1hdGNoZXM6XG4iCittc2dzdHIgIs3isr+3+7rPOlxuIgorCisjOiBzY3JlZW4uYzoyMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIistLSUzbGQgbGluZXMgZm9sZGVkICIKK21zZ3N0ciAiKy0t0tEgZm9sZCAlM2xkINDQIgorCisjOiBzY3JlZW4uYzo3NDExCittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgVi3M5ru7IgorCisjOiBzY3JlZW4uYzo3NDE1Cittc2dpZCAiIFJFUExBQ0UiCittc2dzdHIgIiDM5ru7IgorCisjOiBzY3JlZW4uYzo3NDIwCittc2dpZCAiIFJFVkVSU0UiCittc2dzdHIgIiC3tNeqIgorCisjOiBzY3JlZW4uYzo3NDIyCittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiILLlyOsiCisKKyM6IHNjcmVlbi5jOjc0MjUKK21zZ2lkICIgKGluc2VydCkiCittc2dzdHIgIiAosuXI6ykiCisKKyM6IHNjcmVlbi5jOjc0MjcKK21zZ2lkICIgKHJlcGxhY2UpIgorbXNnc3RyICIgKMzmu7spIgorCisjOiBzY3JlZW4uYzo3NDI5Cittc2dpZCAiICh2cmVwbGFjZSkiCittc2dzdHIgIiAodi3M5ru7KSIKKworIzogc2NyZWVuLmM6NzQzMgorbXNnaWQgIiBIZWJyZXciCittc2dzdHIgIiDPo7KuwLMiCisKKyM6IHNjcmVlbi5jOjc0NDAKK21zZ2lkICIgKGxhbmcpIgorbXNnc3RyICIgKNPv0dQpIgorCisjOiBzY3JlZW4uYzo3NDQzCittc2dpZCAiIChwYXN0ZSkiCittc2dzdHIgIiAo1bPM+ykiCisKKyM6IHNjcmVlbi5jOjc0NDkKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIg0aHIoSIKKworIzogc2NyZWVuLmM6NzQ1MQorbXNnaWQgIiBWSVNVQUwiCittc2dzdHIgIiC/ycrTIgorCisjOiBzY3JlZW4uYzo3NDUzCittc2dpZCAiIEJMT0NLIgorbXNnc3RyICIgv+kiCisKKyM6IHNjcmVlbi5jOjc0NTUKK21zZ2lkICIgTElORSIKK21zZ3N0ciAiINDQIgorCisjOiBzY3JlZW4uYzo3NDY4IHNjcmVlbi5jOjc1MjIKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgIrzHwrzW0CIKKworIzogc2VhcmNoLmM6MzYKK21zZ2lkICJzZWFyY2ggaGl0IFRPUCwgY29udGludWluZyBhdCBCT1RUT00iCittc2dzdHIgItLRsunV0rW9zsS8/r+qzbeju9TZtNO94c6yvMzQ+LLp1dIiCisKKyM6IHNlYXJjaC5jOjM3Cittc2dpZCAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIgorbXNnc3RyICLS0bLp1dK1vc7EvP694c6yo7vU2bTTv6rNt7zM0Piy6dXSIgorCisjOiBzZWFyY2guYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4MzogSW52YWxpZCBzZWFyY2ggc3RyaW5nOiAlcyIKK21zZ3N0ciAiRTM4MzogtO3O87XEsunV0tfWt/u0rjogJXMiCisKKyM6IHNlYXJjaC5jOjc0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzg0OiBzZWFyY2ggaGl0IFRPUCB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODQ6INLRsunV0rW9zsS8/r+qzbfI1NXSsru1vSAlcyIKKworIzogc2VhcmNoLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODU6IHNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NTog0tGy6dXStb3OxLz+veHOssjU1dKyu7W9ICVzIgorCisjOiBzZWFyY2guYzoxMTA3Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiDU2iAnOycguvPD5tOmuMPT0CAnPycgu/IgJy8nIgorCisjOiBzZWFyY2guYzozNDc2Cittc2dpZCAiIChpbmNsdWRlcyBwcmV2aW91c2x5IGxpc3RlZCBtYXRjaCkiCittc2dzdHIgIiAosPzAqMnPtM7B0LP2t/u6z8/uKSIKKworIy4gY3Vyc29yIGF0IHN0YXR1cyBsaW5lCisjOiBzZWFyY2guYzozNDk2Cittc2dpZCAiLS0tIEluY2x1ZGVkIGZpbGVzICIKK21zZ3N0ciAiLS0tILD8uqzOxLz+ICIKKworIzogc2VhcmNoLmM6MzQ5OAorbXNnaWQgIm5vdCBmb3VuZCAiCittc2dzdHIgItXSsru1vSAiCisKKyM6IHNlYXJjaC5jOjM0OTkKK21zZ2lkICJpbiBwYXRoIC0tLVxuIgorbXNnc3RyICLU2sK3vrYgLS0tXG4iCisKKyM6IHNlYXJjaC5jOjM1MzgKK21zZ2lkICIgIChBbHJlYWR5IGxpc3RlZCkiCittc2dzdHIgIiAgKNLRwdCz9ikiCisKKyM6IHNlYXJjaC5jOjM1NDAKK21zZ2lkICIgIE5PVCBGT1VORCIKK21zZ3N0ciAiICDV0rK7tb0iCisKKyM6IHNlYXJjaC5jOjM1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiCittc2dzdHIgIrLp1dKw/LqszsS8/jogJXMiCisKKyM6IHNlYXJjaC5jOjM4MTAKK21zZ2lkICJFMzg3OiBNYXRjaCBpcyBvbiBjdXJyZW50IGxpbmUiCittc2dzdHIgIkUzODc6ILWxx7DQ0MalxeQiCisKKyM6IHNlYXJjaC5jOjM5NTAKK21zZ2lkICJBbGwgaW5jbHVkZWQgZmlsZXMgd2VyZSBmb3VuZCIKK21zZ3N0ciAiy/nT0LD8uqzOxLz+trzS0dXStb0iCisKKyM6IHNlYXJjaC5jOjM5NTIKK21zZ2lkICJObyBpbmNsdWRlZCBmaWxlcyIKK21zZ3N0ciAiw7vT0LD8uqzOxLz+IgorCisjOiBzZWFyY2guYzozOTY4Cittc2dpZCAiRTM4ODogQ291bGRuJ3QgZmluZCBkZWZpbml0aW9uIgorbXNnc3RyICJFMzg4OiDV0rK7tb22qNLlIgorCisjOiBzZWFyY2guYzozOTcwCittc2dpZCAiRTM4OTogQ291bGRuJ3QgZmluZCBwYXR0ZXJuIgorbXNnc3RyICJFMzg5OiDV0rK7tb0gcGF0dGVybiIKKworIzogc3ludGF4LmM6Mjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkwOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTM5MDogss7K/bK71f3ItzogJXMiCisKKyM6IHN5bnRheC5jOjMxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiCittc2dzdHIgIkUzOTE6IM7etMvT77eoIGNsdXN0ZXI6IFwiJXNcIiIKKworIzogc3ludGF4LmM6MzMzMQorbXNnaWQgIk5vIFN5bnRheCBpdGVtcyBkZWZpbmVkIGZvciB0aGlzIGJ1ZmZlciIKK21zZ3N0ciAi1eK49ru6s+XH+MO709C2qNLlyM66ztPvt6jP7iIKKworIzogc3ludGF4LmM6MzMzOQorbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAiQ7fnuPHXosrNzayyvdbQIgorCisjOiBzeW50YXguYzozMzQ3Cittc2dpZCAibm8gc3luY2luZyIKK21zZ3N0ciAiw7vT0M2ssr0iCisKKyM6IHN5bnRheC5jOjMzNTAKK21zZ2lkICJzeW5jaW5nIHN0YXJ0cyAiCittc2dzdHIgIs2ssr2/qsq8IgorCisjOiBzeW50YXguYzozMzUyIHN5bnRheC5jOjM0MjEKK21zZ2lkICIgbGluZXMgYmVmb3JlIHRvcCBsaW5lIgorbXNnc3RyICLQ0LrFs6yz9re2zqciCisKKyM6IHN5bnRheC5jOjMzNTYKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDT77eozayyvc/uxL8gKFN5bnRheCBzeW5jIGl0ZW1zKSAtLS0iCisKKyM6IHN5bnRheC5jOjMzNTkKK21zZ2lkICIiCisiXG4iCisic3luY2luZyBvbiBpdGVtcyIKK21zZ3N0ciAiIgorIlxuIgorIs2ssr3W0DoiCisKKyM6IHN5bnRheC5jOjMzNjQKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g0++3qM/uxL8gLS0tIgorCisjOiBzeW50YXguYzozMzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTI6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkyOiDO3rTL0++3qCBjbHVzdGVyOiBcIiVzXCIiCisKKyM6IHN5bnRheC5jOjM0MTEKK21zZ2lkICJtaW5pbWFsICIKK21zZ3N0ciAi1+7QoSIKKworIzogc3ludGF4LmM6MzQxOAorbXNnaWQgIm1heGltYWwgIgorbXNnc3RyICLX7rTzIgorCisjOiBzeW50YXguYzo0MDQ2Cittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzkzOiDKudPDwcuyu9X9yLe1xLLOyv0iCisKKyM6IHN5bnRheC5jOjQwNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiDV0rK7tb0gJXMgtcQgcmVnaW9uIGl0ZW0iCisKKyM6IHN5bnRheC5jOjQwOTgKK21zZ2lkICJFMzk1OiBjb250YWlucyBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NTogyrnTw8HLsrvV/ci3tcSyzsr9IgorCisjOiBzeW50YXguYzo0MTA5Cittc2dpZCAiRTM5NjogY29udGFpbmVkaW4gYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTY6IMq508PBy7K71f3It7XEss7K/SIKKworIzogc3ludGF4LmM6NDE4NworbXNnaWQgIkUzOTc6IEZpbGVuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMzk3OiDQ6NKqzsS8/sP7s8YiCisKKyM6IHN5bnRheC5jOjQ1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiDIscnZIFwiPVwiOiAlcyIKKworIzogc3ludGF4LmM6NDY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogc3ludGF4IHJlZ2lvbiAlcyC1xLLOyv3Mq8nZIgorCisjOiBzeW50YXguYzo1MDEwCittc2dpZCAiRTQwMDogTm8gY2x1c3RlciBzcGVjaWZpZWQiCittc2dzdHIgIkU0MDA6IMO709DWuLaotcTK9NDUIgorCisjOiBzeW50YXguYzo1MDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDE6IFBhdHRlcm4gZGVsaW1pdGVyIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MDE6INXSsru1vbfWuPS3+7rFOiAlcyIKKworIzogc3ludGF4LmM6NTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDAyOiBHYXJiYWdlIGFmdGVyIHBhdHRlcm46ICVzIgorbXNnc3RyICJFNDAyOiAnJXMnILrzw+a1xLarzveyu8Tcyrax8CIKKworIzogc3ludGF4LmM6NTIwNAorbXNnaWQgIkU0MDM6IHN5bnRheCBzeW5jOiBsaW5lIGNvbnRpbnVhdGlvbnMgcGF0dGVybiBzcGVjaWZpZWQgdHdpY2UiCittc2dzdHIgIkU0MDM6INPvt6jNrLK9OiDBrL3T0NC3+7rF1ri2qMHLwb20ziIKKworIzogc3ludGF4LmM6NTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA0OiBJbGxlZ2FsIGFyZ3VtZW50czogJXMiCittc2dzdHIgIkU0MDQ6ILLOyv2yu9X9yLc6ICVzIgorCisjOiBzeW50YXguYzo1MzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDU6IE1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MDU6IMixydm1yLrFOiAlcyIKKworIzogc3ludGF4LmM6NTMxNworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA2OiBFbXB0eSBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MDY6IL/Vss7K/TogJXMiCisKKyM6IHN5bnRheC5jOjUzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNzogJXMgbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTQwNzogJXMgsrvE3NTatMuz9s/WIgorCisjOiBzeW50YXguYzo1MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDg6ICVzIG11c3QgYmUgZmlyc3QgaW4gY29udGFpbnMgbGlzdCIKK21zZ3N0ciAiRTQwODogJXMgsdjQ68rHwdCx7cDvtcS12tK7uPYiCisKKyM6IHN5bnRheC5jOjU0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwOTogVW5rbm93biBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTQwOTogsrvV/ci3tcTX6cP7OiAlcyIKKworIzogc3ludGF4LmM6NTY0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEwOiBJbnZhbGlkIDpzeW50YXggc3ViY29tbWFuZDogJXMiCittc2dzdHIgIkU0MTA6ILK71f3It7XEIDpzeW50YXgg19PD/MHuOiAlcyIKKworIzogc3ludGF4LmM6NjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDExOiBoaWdobGlnaHQgZ3JvdXAgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQxMTog1dKyu7W9IGhpZ2hsaWdodCBncm91cDogJXMiCisKKyM6IHN5bnRheC5jOjYwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMjogTm90IGVub3VnaCBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTI6ILLOyv3Mq8nZOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTM6IFRvbyBtYW55IGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMzogss7K/bn9tuA6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYwNzQKK21zZ2lkICJFNDE0OiBncm91cCBoYXMgc2V0dGluZ3MsIGhpZ2hsaWdodCBsaW5rIGlnbm9yZWQiCittc2dzdHIgIkU0MTQ6INLRyei2qNfpLCC69sLUIGhpZ2hsaWdodCBsaW5rIgorCisjOiBzeW50YXguYzo2MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTU6IHVuZXhwZWN0ZWQgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTU6ILK7uMPT0LXEtci6xTogJXMiCisKKyM6IHN5bnRheC5jOjYyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNjogbWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNjogyLHJ2bXIusU6ICVzIgorCisjOiBzeW50YXguYzo2MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTc6IG1pc3NpbmcgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDE3OiDIscnZss7K/TogJXMiCisKKyM6IHN5bnRheC5jOjYyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6ILK7us+3qLXE1rU6ICVzIgorCisjOiBzeW50YXguYzo2NDE3Cittc2dpZCAiRTQxOTogRkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQxOTogtO3O87XEx7C+sNHVyasiCisKKyM6IHN5bnRheC5jOjY0MjgKK21zZ2lkICJFNDIwOiBCRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDIwOiC07c7ztcSxs76w0dXJqyIKKworIzogc3ludGF4LmM6NjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6ILTtzvO1xNHVyavD+7PGu/LK/da1OiAlcyIKKworIzogc3ludGF4LmM6NjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDIyOiB0ZXJtaW5hbCBjb2RlIHRvbyBsb25nOiAlcyIKK21zZ3N0ciAiRTQyMjog1tW2y7HgwuvMq7OkOiAlcyIKKworIzogc3ludGF4LmM6NjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzogss7K/bK71f3ItzogJXMiCisKKyM6IHN5bnRheC5jOjcyNjMKK21zZ2lkICJFNDI0OiBUb28gbWFueSBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIGF0dHJpYnV0ZXMgaW4gdXNlIgorbXNnc3RyICJFNDI0OiDKudPDwcvMq7bgsrvNrLXEuN/BwbbIyvTQ1CIKKworIzogdGFnLmM6OTAKK21zZ2lkICJhdCBib3R0b20gb2YgdGFnIHN0YWNrIgorbXNnc3RyICKx6sepKHRhZym20dW7veHOsiIKKworIzogdGFnLmM6OTEKK21zZ2lkICJhdCB0b3Agb2YgdGFnIHN0YWNrIgorbXNnc3RyICKx6sepKHRhZym20dW7v6rNtyIKKworIzogdGFnLmM6MzkyCittc2dpZCAiRTQyNTogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0MjU6INLRvq3U2tfux7DD5rXEserHqSh0YWcpwcsiCisKKyM6IHRhZy5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI2OiB0YWcgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQyNjog1dKyu7W9serHqSh0YWcpOiAlcyIKKworIzogdGFnLmM6NTQ1Cittc2dpZCAiICAjIHByaSBraW5kIHRhZyIKK21zZ3N0ciAiICAjIHByaSBraW5kIHRhZyIKKworIzogdGFnLmM6NTQ4Cittc2dpZCAiZmlsZVxuIgorbXNnc3RyICLOxLz+XG4iCisKKyMuCisjLiAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMuICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjOiB0YWcuYzo3MDYKK21zZ2lkICJFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOiAiCittc2dzdHIgIsrkyOsgbnIgu/LRodTxICg8Q1I+IM3Ls/YpOiAiCisKKyM6IHRhZy5jOjc0NgorbXNnaWQgIkU0Mjc6IFRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNzog1rvT0LTLz+63+7rPIgorCisjOiB0YWcuYzo3NDgKK21zZ2lkICJFNDI4OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI4OiC8ur6t1NrX7rrz0ru49rf7us+1xLHqx6kodGFnKcHLIgorCisjOiB0YWcuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIs7EvP4gXCIlc1wiILK7tObU2iIKKworIy4gR2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgdGFncworIzogdGFnLmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAlZCBvZiAlZCVzIgorbXNnc3RyICLV0rW9IHRhZzogJWQvJWQlcyIKKworIzogdGFnLmM6NzgzCittc2dpZCAiIG9yIG1vcmUiCittc2dzdHIgIiC78rj8tuAiCisKKyM6IHRhZy5jOjc4NQorbXNnaWQgIiAgVXNpbmcgdGFnIHdpdGggZGlmZmVyZW50IGNhc2UhIgorbXNnc3RyICIgINLUsrvNrLTz0KHQtMC0yrnTwyB0YWchIgorCisjOiB0YWcuYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyOTogRmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkU0Mjk6IM7EvP4gXCIlc1wiILK7tObU2iIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0YWcuYzo4OTcKK21zZ2lkICIiCisiXG4iCisiICAjIFRPIHRhZyAgICAgICAgIEZST00gbGluZSAgaW4gZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiICAjILW9IHRhZyAgICAgICAgILTTICAg0NAgICAg1NogzsS8/i/OxLG+IgorCisjOiB0YWcuYzoxMTQ0Cittc2dpZCAiTGluZWFyIHRhZyBzZWFyY2giCittc2dzdHIgIs/f0NSy6dXSserHqSAoVGFncykiCisKKyM6IHRhZy5jOjExNDYKK21zZ2lkICJCaW5hcnkgdGFnIHNlYXJjaCIKK21zZ3N0ciAitv69+NbGsunV0ihCaW5hcnkgc2VhcmNoKSCx6sepKFRhZ3MpIgorCisjOiB0YWcuYzoxMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyB0YWdzIGZpbGUgJXMiCittc2dzdHIgIrLp1dIgdGFnIM7EvP4gXCIlc1wiIgorCisjOiB0YWcuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzA6IFRhZyBmaWxlIHBhdGggdHJ1bmNhdGVkIGZvciAlc1xuIgorbXNnc3RyICJFNDMwOiBUYWcgzsS8/sK3vraxu73Yts/OqiAlc1xuIgorCisjOiB0YWcuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzE6IEZvcm1hdCBlcnJvciBpbiB0YWdzIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDMxOiBUYWcgzsS8/iBcIiVzXCIguPHKvbTtzvMiCisKKyM6IHRhZy5jOjE4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVmb3JlIGJ5dGUgJWxkIgorbXNnc3RyICLU2iAlbGQg19a92taux7AiCisKKyM6IHRhZy5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMjogVGFncyBmaWxlIG5vdCBzb3J0ZWQ6ICVzIgorbXNnc3RyICJFNDMyOiBUYWcgzsS8/s60xcXQ8jogJXMiCisKKyMuIG5ldmVyIG9wZW5lZCBhbnkgdGFncyBmaWxlCisjOiB0YWcuYzoxOTExCittc2dpZCAiRTQzMzogTm8gdGFncyBmaWxlIgorbXNnc3RyICJFNDMzOiDDu9PQIHRhZyDOxLz+IgorCisjOiB0YWcuYzoyNTgzCittc2dpZCAiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIKK21zZ3N0ciAiRTQzNDog1dKyu7W9IHRhZyIKKworIzogdGFnLmM6MjU5NAorbXNnaWQgIkU0MzU6IENvdWxkbid0IGZpbmQgdGFnLCBqdXN0IGd1ZXNzaW5nISIKK21zZ3N0ciAiRTQzNTog1dKyu7W9IHRhZywgytTXxbLCISIKKworIzogdGVybS5jOjE3MjMKK21zZ2lkICInIG5vdCBrbm93bi4gQXZhaWxhYmxlIGJ1aWx0aW4gdGVybWluYWxzIGFyZToiCittc2dzdHIgIicgsrvE3LzT1Niho7/J08O1xMTavajW1bbL0M7KvdPQOiIKKworIzogdGVybS5jOjE3NDcKK21zZ2lkICJkZWZhdWx0aW5nIHRvICciCittc2dzdHIgItSkyeg6ICciCisKKyM6IHRlcm0uYzoyMTAwCittc2dpZCAiQ2Fubm90IG9wZW4gdGVybWNhcCBmaWxlIgorbXNnc3RyICKyu8TctPK/qiB0ZXJtY2FwIM7EvP4iCisKKyM6IHRlcm0uYzoyMTAzCittc2dpZCAiVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1pbmZvIgorbXNnc3RyICLU2nRlcm1pbmZv1tDOtNXStb3W1bbLz+4iCisKKyM6IHRlcm0uYzoyMTA1Cittc2dpZCAiVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgItTadGVybWNhcNbQzrTV0rW91tW2y8/uIgorCisjOiB0ZXJtLmM6MjI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDM2OiBObyBcIiVzXCIgZW50cnkgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTQzNjogdGVybWNhcCDDu9PQIFwiJXNcIiDP7iIKKworIzogdGVybS5jOjI3MzgKK21zZ2lkICJFNDM3OiB0ZXJtaW5hbCBjYXBhYmlsaXR5IFwiY21cIiByZXF1aXJlZCIKK21zZ3N0ciAiRTQzNzog1tW2y9Do0qogXCJjbVwiILXExNzBpiIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0ZXJtLmM6NDg3MgorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwga2V5cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g1tW2y7C0vPwgLS0tIgorCisjOiB1aS5jOjI0MAorbXNnaWQgIm5ldyBzaGVsbCBzdGFydGVkXG4iCittc2dzdHIgIsb0tq/QwiBzaGVsbFxuIgorCisjOiB1aS5jOjE3MDUKK21zZ2lkICJWaW06IEVycm9yIHJlYWRpbmcgaW5wdXQsIGV4aXRpbmcuLi5cbiIKK21zZ3N0ciAiVmltOiC2wbTtzvOjrM3Ls/bW0C4uLlxuIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogdW5kby5jOjM1MQorbXNnaWQgIk5vIHVuZG8gcG9zc2libGU7IGNvbnRpbnVlIGFueXdheSIKK21zZ3N0ciAisrvE3Lu51K2ju8frvMzQ+CIKKworIzogdW5kby5jOjUwNgorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86INDQusW07c7zIgorCisjOiB1bmRvLmM6Njc1Cittc2dpZCAiMSBjaGFuZ2UiCittc2dzdHIgItK7z+64xLHkIgorCisjOiB1bmRvLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFuZ2VzIgorbXNnc3RyICIlbGQgz+64xLHkIgorCisjOiB1bmRvLmM6NzIxCittc2dpZCAiRTQzOTogdW5kbyBsaXN0IGNvcnJ1cHQiCittc2dzdHIgIkU0Mzk6ILO3z/rB0LHty/C7tSIKKworIzogdW5kby5jOjc1MQorbXNnaWQgIkU0NDA6IHVuZG8gbGluZSBtaXNzaW5nIgorbXNnc3RyICJFNDQwOiDV0rK7tb3SqrO3z/qy2df3tcTQ0CIKKworIy4gT25seSBNUyBWQyA0LjEgYW5kIGVhcmxpZXIgY2FuIGRvIFdpbjMycworIzogdmVyc2lvbi5jOjY1NQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYvMzLOuyDNvNDNvefD5rDmsb4iCisKKyM6IHZlcnNpb24uYzo2NTcKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIEJpdCDNvNDNvefD5rDmsb4iCisKKyM6IHZlcnNpb24uYzo2NjAKK21zZ2lkICIgaW4gV2luMzJzIG1vZGUiCittc2dzdHIgIldpbjMycyDEo8q9IgorCisjOiB2ZXJzaW9uLmM6NjYyCittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgItans9YgT0xFIgorCisjOiB2ZXJzaW9uLmM6NjY1Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IGNvbnNvbGUgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzLOuyDX1rf7vefD5rDmsb4iCisKKyM6IHZlcnNpb24uYzo2NjkKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNiBiaXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzLOuyDX1rf7vefD5rDmsb4iCisKKyM6IHZlcnNpb24uYzo2NzMKK21zZ2lkICIiCisiXG4iCisiMzIgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMzIgzrsgTVMtRE9TILDmsb4iCisKKyM6IHZlcnNpb24uYzo2NzUKK21zZ2lkICIiCisiXG4iCisiMTYgYml0IE1TLURPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiMTYgzrsgTVMtRE9TILDmsb4iCisKKyM6IHZlcnNpb24uYzo2ODEKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpILDmsb4iCisKKyM6IHZlcnNpb24uYzo2ODMKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgWCCw5rG+IgorCisjOiB2ZXJzaW9uLmM6Njg2Cittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyCw5rG+IgorCisjOiB2ZXJzaW9uLmM6NjkxCittc2dpZCAiIgorIlxuIgorIlJJU0MgT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlJJU0MgT1MgsOaxviIKKworIzogdmVyc2lvbi5jOjcwMQorbXNnaWQgIiIKKyJcbiIKKyJJbmNsdWRlZCBwYXRjaGVzOiAiCittc2dzdHIgIiIKKyJcbiIKKyK808jrsrm2oTogIgorCisjOiB2ZXJzaW9uLmM6NzI4Cittc2dpZCAiIgorIlxuIgorIkNvbXBpbGVkICIKK21zZ3N0ciAiIgorIlxuIgorIrHg0usiCisKKyM6IHZlcnNpb24uYzo3MzEKK21zZ2lkICJieSAiCittc2dzdHIgItXfOiIKKworIzogdmVyc2lvbi5jOjc0MworbXNnaWQgIiIKKyJcbiIKKyJIdWdlIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisis6zHv7Dmsb4gIgorCisjOiB2ZXJzaW9uLmM6NzQ2Cittc2dpZCAiIgorIlxuIgorIkJpZyB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIrTz0M2w5rG+ICIKKworIzogdmVyc2lvbi5jOjc0OQorbXNnaWQgIiIKKyJcbiIKKyJOb3JtYWwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyLSu7DjsOaxviAiCisKKyM6IHZlcnNpb24uYzo3NTIKK21zZ2lkICIiCisiXG4iCisiU21hbGwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyK88tLXsOaxviAiCisKKyM6IHZlcnNpb24uYzo3NTQKK21zZ2lkICIiCisiXG4iCisiVGlueSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIr6rvPKw5rG+ICIKKworIzogdmVyc2lvbi5jOjc2MAorbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAisrvKudPDzbzQzb3nw+ahoyIKKworIzogdmVyc2lvbi5jOjc2NAorbXNnaWQgIndpdGggR1RLLUdOT01FIEdVSS4iCittc2dzdHIgIsq508MgR1RLLUdOT01FIM280M2958PmoaMiCisKKyM6IHZlcnNpb24uYzo3NjYKK21zZ2lkICJ3aXRoIEdUSyBHVUkuIgorbXNnc3RyICLKudPDIEdUSyDNvNDNvefD5qGjIgorCisjOiB2ZXJzaW9uLmM6NzcwCittc2dpZCAid2l0aCBYMTEtTW90aWYgR1VJLiIKK21zZ3N0ciAiyrnTwyBYMTEtTW90aWYgzbzQzb3nw+ahoyIKKworIzogdmVyc2lvbi5jOjc3MworbXNnaWQgIndpdGggWDExLUF0aGVuYSBHVUkuIgorbXNnc3RyICLKudPDIFgxMS1BdGhlbmEgzbzQzb3nw+ahoyIKKworIzogdmVyc2lvbi5jOjc3NgorbXNnaWQgIndpdGggQmVPUyBHVUkuIgorbXNnc3RyICLKudPDIEJlT1MgzbzQzb3nw+ahoyIKKworIzogdmVyc2lvbi5jOjc3OQorbXNnaWQgIndpdGggUGhvdG9uIEdVSS4iCittc2dzdHIgIsq508NQaG90b27NvNDNvefD5qGjIgorCisjOiB2ZXJzaW9uLmM6NzgyCittc2dpZCAid2l0aCBHVUkuIgorbXNnc3RyICLKudPDzbzQzb3nw+ahoyIKKworIzogdmVyc2lvbi5jOjc4NQorbXNnaWQgIndpdGggQ2FyYm9uIEdVSS4iCittc2dzdHIgIsq508MgQ2FyYm9uIM280M2958PmoaMiCisKKyM6IHZlcnNpb24uYzo3ODgKK21zZ2lkICJ3aXRoIENvY29hIEdVSS4iCittc2dzdHIgIsq508MgQ29jb2EgzbzQzb3nw+ahoyIKKworIzogdmVyc2lvbi5jOjc5MQorbXNnaWQgIndpdGggKGNsYXNzaWMpIEdVSS4iCittc2dzdHIgIsq508MgKLSrzbMpIM280M2958PmoaMiCisKKyM6IHZlcnNpb24uYzo4MDIKK21zZ2lkICIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIgorbXNnc3RyICIgxL/HsL/JyrnTwygrKdPrsru/ycq508MoLSm1xMSjv+nB0LHtOlxuIgorCisjOiB2ZXJzaW9uLmM6ODE0Cittc2dpZCAiICAgc3lzdGVtIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgIM+1zbMgdmltcmMgxeTWw87EvP46IFwiIgorCisjOiB2ZXJzaW9uLmM6ODE5Cittc2dpZCAiICAgICB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgINPDu6e1xCB2aW1yYyDF5NbDzsS8/jogXCIiCisKKyM6IHZlcnNpb24uYzo4MjQKK21zZ2lkICIgMm5kIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICC12rb+1+nTw7unIHZpbXJjIM7EvP46IFwiIgorCisjOiB2ZXJzaW9uLmM6ODI5Cittc2dpZCAiIDNyZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgtdrI/dfp08O7pyB2aW1yYyDOxLz+OiBcIiIKKworIzogdmVyc2lvbi5jOjgzNAorbXNnaWQgIiAgICAgIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAg08O7p7XEIGV4cmMgxeTWw87EvP46IFwiIgorCisjOiB2ZXJzaW9uLmM6ODM5Cittc2dpZCAiICAybmQgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICC12rb+1+nTw7unIGV4cmMgzsS8/jogXCIiCisKKyM6IHZlcnNpb24uYzo4NDUKK21zZ2lkICIgIHN5c3RlbSBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgIM+1zbMgZ3ZpbXJjIM7EvP46IFwiIgorCisjOiB2ZXJzaW9uLmM6ODQ5Cittc2dpZCAiICAgIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgINPDu6e1xCBndmltcmMgxeTWw87EvP46IFwiIgorCisjOiB2ZXJzaW9uLmM6ODUzCittc2dpZCAiMm5kIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICC12rb+1+nTw7unIGd2aW1yYyDOxLz+OiBcIiIKKworIzogdmVyc2lvbi5jOjg1OAorbXNnaWQgIjNyZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgtdrI/dfp08O7pyBndmltcmMgzsS8/jogXCIiCisKKyM6IHZlcnNpb24uYzo4NjUKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgICAgz7XNs7LLtaXF5NbDzsS8/jogXCIiCisKKyM6IHZlcnNpb24uYzo4NzMKK21zZ2lkICIgIGZhbGwtYmFjayBmb3IgJFZJTTogXCIiCittc2dzdHIgIiAgICAgICAgICAgICAgJFZJTSDUpMno1rU6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODc5Cittc2dpZCAiIGYtYiBmb3IgJFZJTVJVTlRJTUU6IFwiIgorbXNnc3RyICIgICAgICAgJFZJTVJVTlRJTUUg1KTJ6Na1OiBcIiIKKworIzogdmVyc2lvbi5jOjg4MworbXNnaWQgIkNvbXBpbGF0aW9uOiAiCittc2dzdHIgIrHg0uu3vcq9OiAiCisKKyM6IHZlcnNpb24uYzo4ODkKK21zZ2lkICJDb21waWxlcjogIgorbXNnc3RyICKx4NLrxvc6ICIKKworIzogdmVyc2lvbi5jOjg5NAorbXNnaWQgIkxpbmtpbmc6ICIKK21zZ3N0ciAiwbS94be9yr06ICIKKworIzogdmVyc2lvbi5jOjg5OQorbXNnaWQgIiAgREVCVUcgQlVJTEQiCittc2dzdHIgIiAgtffK1LDmsb4iCisKKyM6IHZlcnNpb24uYzo5MzQKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVmkgSU1wcm92ZWQiCisKKyM6IHZlcnNpb24uYzo5MzYKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAisOaxviAgICIKKworIzogdmVyc2lvbi5jOjkzNworbXNnaWQgImJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKK21zZ3N0ciAizqy7pMjLOiBCcmFtIE1vb2xlbmFhciBldCBhbC4iCisKKyM6IHZlcnNpb24uYzo5MzgKK21zZ2lkICJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIgorbXNnc3RyICJWaW0gzqq/ydfU08m3otDQtcS/qrfF1LS0+sLryO28/iIKKworIzogdmVyc2lvbi5jOjk0MAorbXNnaWQgIkhlbHAgcG9vciBjaGlsZHJlbiBpbiBVZ2FuZGEhIgorbXNnc3RyICKw79b6ztq4ybTvtcS/ycGvtvnNryEiCisKKyM6IHZlcnNpb24uYzo5NDEKK21zZ2lkICJ0eXBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICK9+NK7sr3LtcP3x+vK5MjrICAgICAgICAgIDpoZWxwIGljY2Y8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6OTQzCittc2dpZCAidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIKK21zZ3N0ciAi0qrNy7P2x+vK5MjrICAgICAgICAgICAgICAgICAgOnE8RW50ZXI+ICAgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6OTQ0Cittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAi1NrP37Dv1vrH68rkyOsgICAgICAgICAgICAgICAgOmhlbHA8RW50ZXI+ICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6OTQ1Cittc2dpZCAidHlwZSAgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICAgZm9yIHZlcnNpb24gaW5mbyIKK21zZ3N0ciAi0MKw5rG+0MXPosfryuTI6yAgICAgICAgICAgICAgOmhlbHAgdmVyc2lvbjY8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6OTQ4Cittc2dpZCAiUnVubmluZyBpbiBWaSBjb21wYXRpYmxlIG1vZGUiCittc2dzdHIgIlZpILzmyN3Eo8q9IgorCisjOiB2ZXJzaW9uLmM6OTQ5Cittc2dpZCAidHlwZSAgOnNldCBub2NwPEVudGVyPiAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyIKK21zZ3N0ciAiyOe5+9KqzerIq8SjxOK0q82zIFZpIMfryuTI6yA6c2V0IG5vY3A8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6OTUwCittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAiyOe5+9Do0qq21CBWaSC85sjdxKPKvb340ruyvcu1w/fH68rkyOsgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4iCisKKyM6IHZlcnNpb24uYzo5OTAKK21zZ2lkICJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIgorbXNnc3RyICLXotLiOiC87LLitb0gV2luZG93cyA5NS85OC9NRSIKKworIzogdmVyc2lvbi5jOjk5MworbXNnaWQgInR5cGUgIDpoZWxwIHdpbmRvd3M5NTxFbnRlcj4gIGZvciBpbmZvIG9uIHRoaXMiCittc2dzdHIgIsjnufvQ6NKqttQgV2luZG93cyA5NSDWp7PWtcS4/Lbg0MXPosfryuTI6yA6aGVscCB3aW5kb3dzOTU8RW50ZXI+IgorCisjOiB3aW5kb3cuYzoyMDEKK21zZ2lkICJFNDQxOiBUaGVyZSBpcyBubyBwcmV2aWV3IHdpbmRvdyIKK21zZ3N0ciAiRTQ0MTogw7vT0NSkwMC0sL/aIgorCisjOiB3aW5kb3cuYzo1NjgKK21zZ2lkICJFNDQyOiBDYW4ndCBzcGxpdCB0b3BsZWZ0IGFuZCBib3RyaWdodCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJFNDQyOiCyu8TczazKsbfWuO60sL/azqrX88nPus3T0s/CvcciCisKKyM6IHdpbmRvdy5jOjEzMjcKK21zZ2lkICJFNDQzOiBDYW5ub3Qgcm90YXRlIHdoZW4gYW5vdGhlciB3aW5kb3cgaXMgc3BsaXQiCittc2dzdHIgIkU0NDM6INPQxuTL/LfWuO60sL/ayrGyu8Tc0P3XqiIKKworIzogd2luZG93LmM6MTgxMAorbXNnaWQgIkU0NDQ6IENhbm5vdCBjbG9zZSBsYXN0IHdpbmRvdyIKK21zZ3N0ciAiRTQ0NDogsrvE3LnYsdXX7rrz0ru49rSwv9oiCisKKyM6IHdpbmRvdy5jOjI0NzQKK21zZ2lkICJBbHJlYWR5IG9ubHkgb25lIHdpbmRvdyIKK21zZ3N0ciAi0tG+rda7yqPSu7j2tLC/2sHLIgorCisjOiB3aW5kb3cuYzoyNTIxCittc2dpZCAiRTQ0NTogT3RoZXIgd2luZG93IGNvbnRhaW5zIGNoYW5nZXMiCittc2dzdHIgIkU0NDU6IMbky/y0sL/a09C4xLHktcTE2sjdIgorCisjOiB3aW5kb3cuYzo0MzQxCittc2dpZCAiRTQ0NjogTm8gZmlsZSBuYW1lIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTQ0NjogueKx6rSmw7vT0M7EvP7D+yIKKworIzogd2luZG93LmM6NDQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ3OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkU0NDc6INTawre+ttbQ1dKyu7W9zsS8/iBcIiVzXCIiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NTg2Cittc2dpZCAiRWRpdCB3aXRoICZtdWx0aXBsZSBWaW1zIgorbXNnc3RyICLTwyAmbXVsdGlwbGUgVmltcyCx4LytIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjU5MgorbXNnaWQgIkVkaXQgd2l0aCBzaW5nbGUgJlZpbSIKK21zZ3N0ciAi08Mgc2luZ2xlICZWaW0gseC8rSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo2MDQKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAi08MgJlZpbSCx4LytIgorCisjLiBOb3cgY29uY2F0ZW5hdGUKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NjI4Cittc2dpZCAiRWRpdCB3aXRoIGV4aXN0aW5nIFZpbSAtICYiCittc2dzdHIgItPDtbHHsLXEIFZpbSCx4LytIC0gJiIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo3NTIKK21zZ2lkICJFZGl0cyB0aGUgc2VsZWN0ZWQgZmlsZShzKSB3aXRoIFZpbSIKK21zZ3N0ciAi08MgVmltILHgvK3RodTxtcTOxLz+IgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjg5MSAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjk2OQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHByb2Nlc3M6IENoZWNrIGlmIGd2aW0gaXMgaW4geW91ciBwYXRoISIKK21zZ3N0ciAitLS9qL34s8zKp7DcOiDH67zssulndmltyse38dTav8nWtNDQwre+ttbQISIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTIgLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDYKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTcwCittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgImd2aW1leHQuZGxsILP2tO0iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTA1Cittc2dpZCAiUGF0aCBsZW5ndGggdG9vIGxvbmchIgorbXNnc3RyICLCt762w/vMq7OkIgorCisjOiBnbG9iYWxzLmg6ODc4Cittc2dpZCAiLS1ObyBsaW5lcyBpbiBidWZmZXItLSIKK21zZ3N0ciAiLS27urPlx/jO3tfKwc8tLSIKKworIy4KKyMuICogVGhlIGVycm9yIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHNoYXJlZCBhcmUgaW5jbHVkZWQgaGVyZS4KKyMuICogRXhjbHVkZWQgYXJlIGVycm9ycyB0aGF0IGFyZSBvbmx5IHVzZWQgb25jZSBhbmQgZGVidWdnaW5nIG1lc3NhZ2VzLgorIy4KKyM6IGdsb2JhbHMuaDoxMDE5Cittc2dpZCAiQ29tbWFuZCBhYm9ydGVkIgorbXNnc3RyICLD/MHusbvHv9bG1tC2zyIKKworIzogZ2xvYmFscy5oOjEwMjAKK21zZ2lkICJBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAi0OjSqta4we6yzsr9IgorCisjOiBnbG9iYWxzLmg6MTAyMQorbXNnaWQgIkUxMDogXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJiIKK21zZ3N0ciAiRTEwOiBcXCC688Pm06a4w9PQIC8gPyC78iAmIgorCisjOiBnbG9iYWxzLmg6MTAyMworbXNnaWQgIkUxMTogSW52YWxpZCBpbiBjb21tYW5kLWxpbmUgd2luZG93OyA8Q1I+IGV4ZWN1dGVzLCBDVFJMLUMgcXVpdHMiCittc2dzdHIgIkUxMTogsrvE3NTaw/zB7tDQtLC/2tbQyrnTw6GjPENSPta00NCjrENUUkwtQyDNy7P2IgorCisjOiBnbG9iYWxzLmg6MTAyNQorbXNnaWQgIkUxMjogQ29tbWFuZCBub3QgYWxsb3dlZCBmcm9tIGV4cmMvdmltcmMgaW4gY3VycmVudCBkaXIgb3IgdGFnIHNlYXJjaCIKK21zZ3N0ciAiRTEyOiBleHJjL3ZpbXJjIMDvtcTWuMHusrvE3Na00NAiCisKKyM6IGdsb2JhbHMuaDoxMDI2Cittc2dpZCAiRTEzOiBGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTM6IM7EvP7S0b6ttObU2iAov8nTwyAhIMe/1sbM5ru7KSIKKworIzogZ2xvYmFscy5oOjEwMjcKK21zZ2lkICJDb21tYW5kIGZhaWxlZCIKK21zZ3N0ciAiw/zB7ta00NDKp7DcIgorCisjOiBnbG9iYWxzLmg6MTAyOAorbXNnaWQgIkludGVybmFsIGVycm9yIgorbXNnc3RyICLE2rK/tO3O8yIKKworIzogZ2xvYmFscy5oOjEwMjkKK21zZ2lkICJJbnRlcnJ1cHRlZCIKK21zZ3N0ciAi0tHW0LbPIgorCisjOiBnbG9iYWxzLmg6MTAzMAorbXNnaWQgIkUxNDogSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFMTQ6ILK71f3It7XEtdjWtyIKKworIzogZ2xvYmFscy5oOjEwMzEKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICKyu9X9yLe1xLLOyv0iCisKKyM6IGdsb2JhbHMuaDoxMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICKyu9X9yLe1xLLOyv06ICVzIgorCisjOiBnbG9iYWxzLmg6MTAzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogJXMiCittc2dzdHIgIkUxNTogsrvV/ci3tcSx7bTvyr06ICVzIgorCisjOiBnbG9iYWxzLmg6MTAzNgorbXNnaWQgIkUxNjogSW52YWxpZCByYW5nZSIKK21zZ3N0ciAiRTE2OiCyu9X9yLe1xLe2zqciCisKKyM6IGdsb2JhbHMuaDoxMDM3Cittc2dpZCAiSW52YWxpZCBjb21tYW5kIgorbXNnc3RyICKyu9X9yLe1xMP8we4iCisKKyM6IGdsb2JhbHMuaDoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzogXCIlc1wiIGlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJFMTc6IFwiJXNcIiDKx8S/wrwiCisKKyM6IGdsb2JhbHMuaDoxMDQyCittc2dpZCAiRTE4OiBVbmV4cGVjdGVkIGNoYXJhY3RlcnMgYmVmb3JlICc9JyIKK21zZ3N0ciAiRTE4OiAnPScgx7DD5rP2z9bBy7TtzvO1xNfWt/siCisKKyM6IGdsb2JhbHMuaDoxMDQ0Cittc2dpZCAiRTE5OiBNYXJrIGhhcyBpbnZhbGlkIGxpbmUgbnVtYmVyIgorbXNnc3RyICJFMTk6ILHqvMe1xNDQusW07c7zIgorCisjOiBnbG9iYWxzLmg6MTA0NQorbXNnaWQgIkUyMDogTWFyayBub3Qgc2V0IgorbXNnc3RyICJFMjA6IMO709DJ6Laoseq8xyIKKworIzogZ2xvYmFscy5oOjEwNDYKK21zZ2lkICJFMjE6IENhbm5vdCBtYWtlIGNoYW5nZXMsICdtb2RpZmlhYmxlJyBpcyBvZmYiCittc2dzdHIgIkUyMTog0vLOqiAnbW9kaWZpYWJsZScg0aHP7srHudix1bXEo6zL+dLUsrvE3NDeuMQiCisKKyM6IGdsb2JhbHMuaDoxMDQ3Cittc2dpZCAiRTIyOiBTY3JpcHRzIG5lc3RlZCB0b28gZGVlcCIKK21zZ3N0ciAiRTIyOiC13bnptffTw8yrtuCy4yIKKworIzogZ2xvYmFscy5oOjEwNDgKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6IMO709DM5rT6tcTOxLz+IgorCisjOiBnbG9iYWxzLmg6MTA0OQorbXNnaWQgIkUyNDogTm8gc3VjaCBhYmJyZXZpYXRpb24iCittc2dzdHIgIkUyNDogw7vT0NXiuPYgYWJicmV2aWF0aW9uILbU06YiCisKKyM6IGdsb2JhbHMuaDoxMDUwCittc2dpZCAiTm8gISBhbGxvd2VkIgorbXNnc3RyICKyu7/JyrnTwyAnISciCisKKyM6IGdsb2JhbHMuaDoxMDUyCittc2dpZCAiRTI1OiBHVUkgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAiRTI1OiDS8s6qseDS68qxw7vT0LzTyOvNvNDNvefD5rXEs8zQ8rT6wuujrMv50tSyu8TcyrnTw8280M2958PmIgorCisjOiBnbG9iYWxzLmg6MTA1NQorbXNnaWQgIkUyNjogSGVicmV3IGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWVcbiIKK21zZ3N0ciAiRTI2OiDS8s6qseDS68qxw7vT0LzTyOvPo7KuwLO1xLPM0PK0+sLro6zL+dLUsrvE3Mq508MgSGVicmV3XG4iCisKKyM6IGdsb2JhbHMuaDoxMDU4Cittc2dpZCAiRTI3OiBGYXJzaSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNzog0vLOqrHg0uvKscO709C808jrIEZhcnNpILXEs8zQ8rT6wuujrMv50tSyu8TcyrnTwyBGYXJzaVxuIgorCisjOiBnbG9iYWxzLmg6MTA2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjg6IE5vIHN1Y2ggaGlnaGxpZ2h0IGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFMjg6IMO709DD+86qICclcycgtcQgaGlnaGxpZ2h0IGdyb3VwIgorCisjOiBnbG9iYWxzLmg6MTA2MworbXNnaWQgIkUyOTogTm8gaW5zZXJ0ZWQgdGV4dCB5ZXQiCittc2dzdHIgIkUyOTogw7vT0LLlyOu5/c7E19YiCisKKyM6IGdsb2JhbHMuaDoxMDY0Cittc2dpZCAiRTMwOiBObyBwcmV2aW91cyBjb21tYW5kIGxpbmUiCittc2dzdHIgIkUzMDogw7vT0Mew0rvP7sP8we4iCisKKyM6IGdsb2JhbHMuaDoxMDY1Cittc2dpZCAiRTMxOiBObyBzdWNoIG1hcHBpbmciCittc2dzdHIgIkUzMTogw7vT0NXiuPYgbWFwcGluZyC21NOmIgorCisjOiBnbG9iYWxzLmg6MTA2NgorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICLV0rK7tb0iCisKKyM6IGdsb2JhbHMuaDoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoOiAlcyIKK21zZ3N0ciAi1dKyu7W9OiAlcyIKKworIzogZ2xvYmFscy5oOjEwNjgKK21zZ2lkICJFMzI6IE5vIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTMyOiDDu9PQzsS8/sP7IgorCisjOiBnbG9iYWxzLmg6MTA2OQorbXNnaWQgIkUzMzogTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzMzogw7vT0Mew0ru49rLp1dIvzOa7u7XEw/zB7iIKKworIzogZ2xvYmFscy5oOjEwNzAKK21zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCittc2dzdHIgIkUzNDogw7vT0Mew0ru49sP8we4iCisKKyM6IGdsb2JhbHMuaDoxMDcxCittc2dpZCAiRTM1OiBObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzNTogw7vT0Mew0ru49rLp1dLD/MHuIgorCisjOiBnbG9iYWxzLmg6MTA3MgorbXNnaWQgIk5vIHJhbmdlIGFsbG93ZWQiCittc2dzdHIgIrK7v8nKudPDt7bOp8P8we4iCisKKyM6IGdsb2JhbHMuaDoxMDc0Cittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjogw7vT0Nfjubu1xL/VvOQiCisKKyM6IGdsb2JhbHMuaDoxMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICKyu8TctLS9qM7EvP4gJXMiCisKKyM6IGdsb2JhbHMuaDoxMDc3Cittc2dpZCAiQ2FuJ3QgZ2V0IHRlbXAgZmlsZSBuYW1lIgorbXNnc3RyICKyu8TctcO1vcHZyrHOxLz+w/siCisKKyM6IGdsb2JhbHMuaDoxMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAisrvE3LTyv6rOxLz+ICVzIgorCisjOiBnbG9iYWxzLmg6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIrK7xNy2wcihzsS8/iAlcyIKKworIzogZ2xvYmFscy5oOjEwODAKK21zZ2lkICJFMzc6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUzNzogzsS8/sTayN3S0bjEseS1q8nQzrSxo7TmICi/ydPDICEgx7/Wxta00NApIgorCisjOiBnbG9iYWxzLmg6MTA4MQorbXNnaWQgIkUzODogTnVsbCBhcmd1bWVudCIKK21zZ3N0ciAiRTM4OiC/1bXEIChOdWxsKSCyzsr9IgorCisjOiBnbG9iYWxzLmg6MTA4MworbXNnaWQgIkUzOTogTnVtYmVyIGV4cGVjdGVkIgorbXNnc3RyICJFMzk6INOmuMPSqtPQyv3X1iIKKworIzogZ2xvYmFscy5oOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwOiBDYW4ndCBvcGVuIGVycm9yZmlsZSAlcyIKK21zZ3N0ciAiRTQwOiCyu8TctPK/qrTtzvPOxLz+ICVzIgorCisjOiBnbG9iYWxzLmg6MTA4OQorbXNnaWQgIkU0MTogT3V0IG9mIG1lbW9yeSEiCittc2dzdHIgIkU0MTogxNq05rK71+MhIgorCisjOiBnbG9iYWxzLmg6MTA5MgorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kIgorbXNnc3RyICLV0rK7tb3Eo8q9IgorCisjOiBnbG9iYWxzLmg6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgItXSsru1vcSjyr0gJXMiCisKKyM6IGdsb2JhbHMuaDoxMDk1Cittc2dpZCAiQXJndW1lbnQgbXVzdCBiZSBwb3NpdGl2ZSIKK21zZ3N0ciAiss7K/dOmuMPKx9X9yv0iCisKKyM6IGdsb2JhbHMuaDoxMDk3Cittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0Mjogw7vT0LTtzvMiCisKKyM6IGdsb2JhbHMuaDoxMDk5Cittc2dpZCAiRTQzOiBEYW1hZ2VkIG1hdGNoIHN0cmluZyIKK21zZ3N0ciAiRTQzOiDGpcXk19a3+7Su09DOysziIgorCisjOiBnbG9iYWxzLmg6MTEwMAorbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6INX91PKx7bTvyr3T0M7KzOIiCisKKyM6IGdsb2JhbHMuaDoxMTAxCittc2dpZCAiRTQ1OiAncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ1OiDJ6LaoICdyZWFkb25seScg0aHP7ijWu7bBKSAov8nTwyAhIMe/1sbWtNDQKSIKKworIzogZ2xvYmFscy5oOjExMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiCittc2dzdHIgIkU0NjogsrvE3MnotqjWu7bBseTBvyBcIiVzXCIiCisKKyM6IGdsb2JhbHMuaDoxMTA2Cittc2dpZCAiRTQ3OiBFcnJvciB3aGlsZSByZWFkaW5nIGVycm9yZmlsZSIKK21zZ3N0ciAiRTQ3OiC2wcihtO3O887EvP7Kp7DcIgorCisjOiBnbG9iYWxzLmg6MTEwOQorbXNnaWQgIkU0ODogTm90IGFsbG93ZWQgaW4gc2FuZGJveCIKK21zZ3N0ciAiRTQ4OiCyu8Tc1Nogc2FuZGJveCDA77P2z9YiCisKKyM6IGdsb2JhbHMuaDoxMTExCittc2dpZCAiRTQ5OiBJbnZhbGlkIHNjcm9sbCBzaXplIgorbXNnc3RyICJFNDk6ILTtzvO1xLn2tq+089ChIgorCisjOiBnbG9iYWxzLmg6MTExMgorbXNnaWQgIkU5MTogJ3NoZWxsJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIkU5MTogJ0U3MTog0aHP7iAnc2hlbGwnIM60yei2qCIKKworIzogZ2xvYmFscy5oOjExMTMKK21zZ2lkICJFNzI6IENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTcyOiC9u7u7zsS8/rnYsdW07c7zIgorCisjOiBnbG9iYWxzLmg6MTExNAorbXNnaWQgIkU3MzogdGFnIHN0YWNrIGVtcHR5IgorbXNnc3RyICJFNzM6ILHqx6m20dW70tG/1SIKKworIzogZ2xvYmFscy5oOjExMTUKK21zZ2lkICJFNzQ6IENvbW1hbmQgdG9vIGNvbXBsZXgiCittc2dzdHIgIkU3NDogw/zB7syruLTU0yIKKworIzogZ2xvYmFscy5oOjExMTYKK21zZ2lkICJFNzU6IE5hbWUgdG9vIGxvbmciCittc2dzdHIgIkU3NTogw/vX1syrs6QiCisKKyM6IGdsb2JhbHMuaDoxMTE3Cittc2dpZCAiRTc2OiBUb28gbWFueSBbIgorbXNnc3RyICJFNzY6IMyrtuAgWyIKKworIzogZ2xvYmFscy5oOjExMTgKK21zZ2lkICJFNzc6IFRvbyBtYW55IGZpbGUgbmFtZXMiCittc2dzdHIgIkU3NzogzKu24M7EvP7D+yIKKworIzogZ2xvYmFscy5oOjExMTkKK21zZ2lkICJUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICLE48rkyOvBy7bg0+C1xNfWt/siCisKKyM6IGdsb2JhbHMuaDoxMTIwCittc2dpZCAiRTc4OiBVbmtub3duIG1hcmsiCittc2dzdHIgIkU3ODogsrvE3LDsyra1xLHqvMciCisKKyM6IGdsb2JhbHMuaDoxMTIxCittc2dpZCAiRTc5OiBDYW5ub3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiRTc5OiCyu8TcwKnVuc2oxeS3+yIKKworIzogZ2xvYmFscy5oOjExMjIKK21zZ2lkICJFODA6IEVycm9yIHdoaWxlIHdyaXRpbmciCittc2dzdHIgIkU4MDog0LTI67TtzvMiCisKKyM6IGdsb2JhbHMuaDoxMTIzCittc2dpZCAiWmVybyBjb3VudCIKK21zZ3N0ciAiyv21vcHjICg/KSIKKworIzogZ2xvYmFscy5oOjExMjUKK21zZ2lkICJFODE6IFVzaW5nIDxTSUQ+IG5vdCBpbiBhIHNjcmlwdCBjb250ZXh0IgorbXNnc3RyICJFODE6IDxTSUQ+ILK7xNzU2iBzY3JpcHQgsb7OxM3iyrnTwy4iCmRpZmYgLS1naXQgYS9zcmMvcG8vemhfQ04ucG8gYi9zcmMvcG8vemhfQ04ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmYjVhZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wby96aF9DTi5wbwpAQCAtMCwwICsxLDU5MzcgQEAKKyMgQ2hpbmVzZSAoc2ltcGxpZmllZCkgVHJhbnNsYXRpb24gZm9yIFZpbQorIworIyBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyMgRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisjCisjIEZJUlNUIEFVVEhPUiAgV2FuZyBKdW4gPGp1bndAdHVyYm9saW51eC5jb20uY24+CisjCisjIE9yaWdpbmFsIHRyYW5zbGF0aW9ucy4KKyMKKyMsIG5vLXdyYXAKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IFZpbShTaW1wbGlmaWVkIENoaW5lc2UpXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDEtMDktMjQgMTA6MTArMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDEtMDktMjQgMTE6MTMrMDgwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogV2FuZyBKdW4gPGp1bndAdHVyYm9saW51eC5jb20uY24+XG4iCisiTGFuZ3VhZ2UtVGVhbTogV2FuZyBKdW4gPGp1bndAdHVyYm9saW51eC5jb20uY24+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Z2IyMzEyXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKworIzogYnVmZmVyLmM6OTcKK21zZ2lkICJFODI6IENhbm5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLCBleGl0aW5nLi4uIgorbXNnc3RyICJFODI6ILK7xNy31sXkyM66zru6s+XH+KOszcuz9rPM0PIuLi4iCisKKyM6IGJ1ZmZlci5jOjEwMAorbXNnaWQgIkU4MzogQ2Fubm90IGFsbG9jYXRlIGJ1ZmZlciwgdXNpbmcgb3RoZXIgb25lLi4uIgorbXNnc3RyICJFODM6ILK7xNy31sXku7qz5cf4o6zKudPDwe3Su7j2u7qz5cf4Li4uLiIKKworIzogYnVmZmVyLmM6Njk4Cittc2dpZCAiTm8gYnVmZmVycyB3ZXJlIHVubG9hZGVkIgorbXNnc3RyICLDu9PQys23xcjOus67urPlx/giCisKKyM6IGJ1ZmZlci5jOjcwMAorbXNnaWQgIk5vIGJ1ZmZlcnMgd2VyZSBkZWxldGVkIgorbXNnc3RyICLDu9PQyb6z/cjOus67urPlx/giCisKKyM6IGJ1ZmZlci5jOjcwMgorbXNnaWQgIk5vIGJ1ZmZlcnMgd2VyZSB3aXBlZCBvdXQiCittc2dzdHIgIsO709DJvrP9yM66zru6s+XH+CIKKworIzogYnVmZmVyLmM6NzEwCittc2dpZCAiMSBidWZmZXIgdW5sb2FkZWQiCittc2dzdHIgItLRys23xdK7uPa7urPlx/giCisKKyM6IGJ1ZmZlci5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHVubG9hZGVkIgorbXNnc3RyICLS0crNt8UgJWQguPa7urPlx/giCisKKyM6IGJ1ZmZlci5jOjcxNworbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgItLRyb6z/dK7uPa7urPlx/giCisKKyM6IGJ1ZmZlci5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIGRlbGV0ZWQiCittc2dzdHIgItLRyb6z/SAlZCC49ru6s+XH+CIKKworIzogYnVmZmVyLmM6NzI0Cittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICLS0cm+s/3Su7j2u7qz5cf4IgorCisjOiBidWZmZXIuYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB3aXBlZCBvdXQiCittc2dzdHIgItLRyb6z/SAlZCC49ru6s+XH+CIKKworIzogYnVmZmVyLmM6NzgzCittc2dpZCAiRTg0OiBObyBtb2RpZmllZCBidWZmZXIgZm91bmQiCittc2dzdHIgIkU4NDogw7vT0NDeuMS5/bXEu7qz5cf4IgorCisjLiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorIzogYnVmZmVyLmM6ODIyCittc2dpZCAiRTg1OiBUaGVyZSBpcyBubyBsaXN0ZWQgYnVmZmVyIgorbXNnc3RyICJFODU6IMO709C/ycHQs/a1xLu6s+XH+CIKKworIzogYnVmZmVyLmM6ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQ2Fubm90IGdvIHRvIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU4NjogsrvE3MfQu7u1vbXaICVsZCC49ru6s+XH+CIKKworIzogYnVmZmVyLmM6ODM3Cittc2dpZCAiRTg3OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgYnVmZmVyIgorbXNnc3RyICJFODc6ILK7xNzH0Lu7tb24/Lrzw+a1xLu6s+XH+CIKKworIzogYnVmZmVyLmM6ODM5Cittc2dpZCAiRTg4OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg4OiCyu8Tcx9C7u7W9uPzHsMPmtcS7urPlx/giCisKKyM6IGJ1ZmZlci5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJFODk6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgJWxkICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU4OTog0tG4/LjEuf27urPlx/ggJWxkILWrydDOtLGjtOYgKL/J08MgISDHv9bG1rTQ0CkiCisKKyM6IGJ1ZmZlci5jOjg3OQorbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiCyu8Tcys23xdfuuvPSu7j2u7qz5cf4IgorCisjOiBidWZmZXIuYzoxMzE0Cittc2dpZCAiVzE0OiBXYXJuaW5nOiBMaXN0IG9mIGZpbGUgbmFtZXMgb3ZlcmZsb3ciCittc2dzdHIgIlcxNDogvq+45jogzsS8/sP7uf224CIKKworIzogYnVmZmVyLmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFOTI6IEJ1ZmZlciAlbGQgbm90IGZvdW5kIgorbXNnc3RyICJFOTI6INXSsru1vbXaICVsZCC49ru6s+XH+CIKKworIzogYnVmZmVyLmM6MTcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFOTM6IE1vcmUgdGhhbiBvbmUgbWF0Y2ggZm9yICVzIgorbXNnc3RyICJFOTM6INXStb3Su7j20tTJz7XEICVzIgorCisjOiBidWZmZXIuYzoxNzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiDV0rK7tb0gJXMiCisKKyM6IGJ1ZmZlci5jOjIxMDUgZXhfZG9jbWQuYzo2MDY1CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIgorbXNnc3RyICLQ0CAlbGQiCisKKyM6IGJ1ZmZlci5jOjIxODgKK21zZ2lkICJFOTU6IEJ1ZmZlciB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTk1OiDS0dPQu7qz5cf4yrnTw9XiuPbD+9fWIgorCisjOiBidWZmZXIuYzoyNDgxCittc2dpZCAiIFtNb2RpZmllZF0iCittc2dzdHIgIiBb0tHQ3rjEXSIKKworIzogYnVmZmVyLmM6MjQ4NgorbXNnaWQgIltOb3QgZWRpdGVkXSIKK21zZ3N0ciAiW860seC8rV0iCisKKyM6IGJ1ZmZlci5jOjI0OTEKK21zZ2lkICJbTmV3IGZpbGVdIgorbXNnc3RyICJb0MLOxLz+XSIKKworIzogYnVmZmVyLmM6MjQ5MgorbXNnaWQgIltSZWFkIGVycm9yc10iCittc2dzdHIgIlu2wbTtzvNdIgorCisjOiBidWZmZXIuYzoyNDk0IGZpbGVpby5jOjE3NTQKK21zZ2lkICJbcmVhZG9ubHldIgorbXNnc3RyICJb1ru2wV0iCisKKyM6IGJ1ZmZlci5jOjI1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lIC0tJWQlJS0tIgorbXNnc3RyICLQ0Mr9IDEgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIC0tJWQlJS0tIgorbXNnc3RyICLQ0Mr9ICVsZCAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6MjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCBvZiAlbGQgLS0lZCUlLS0gY29sICIKK21zZ3N0ciAi0NAgJWxkLyVsZCAtLSVkJSUtLSDB0CAiCisKKyM6IGJ1ZmZlci5jOjI2MDYKK21zZ2lkICJbTm8gZmlsZV0iCittc2dzdHIgIlvOtMP8w/tdIgorCisjLiBtdXN0IGJlIGEgaGVscCBidWZmZXIKKyM6IGJ1ZmZlci5jOjI2NDYKK21zZ2lkICJoZWxwIgorbXNnc3RyICJbsO/W+l0iCisKKyM6IGJ1ZmZlci5jOjMxNTEgc2NyZWVuLmM6NDY1NworbXNnaWQgIltoZWxwXSIKK21zZ3N0ciAiW7Dv1vpdIgorCisjOiBidWZmZXIuYzozMTgzIHNjcmVlbi5jOjQ2NjMKK21zZ2lkICJbUHJldmlld10iCittc2dzdHIgIlvUpMDAXSIKKworIzogYnVmZmVyLmM6MzM4OQorbXNnaWQgIkFsbCIKK21zZ3N0ciAiyKuyvyIKKworIzogYnVmZmVyLmM6MzM4OQorbXNnaWQgIkJvdCIKK21zZ3N0ciAitde2yyIKKworIzogYnVmZmVyLmM6MzM5MQorbXNnaWQgIlRvcCIKK21zZ3N0ciAitqW2yyIKKworIzogYnVmZmVyLmM6NDEyNworbXNnaWQgIiIKKyJcbiIKKyIjIEJ1ZmZlciBsaXN0OlxuIgorbXNnc3RyICIiCisiXG4iCisiIyC7urPlx/jB0LHtOlxuIgorCisjOiBidWZmZXIuYzo0MTYwCittc2dpZCAiW0Vycm9yIExpc3RdIgorbXNnc3RyICJbtO3O88HQse1dIgorCisjOiBidWZmZXIuYzo0MTczIG1lbWxpbmUuYzoxNTEzCittc2dpZCAiW05vIEZpbGVdIgorbXNnc3RyICJbzrTD/MP7XSIKKworIzogYnVmZmVyLmM6NDM5MworbXNnaWQgIiIKKyJcbiIKKyItLS0gU2lnbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tILf7usUgLS0tIgorCisjOiBidWZmZXIuYzo0NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNpZ25zIGZvciAlczoiCittc2dzdHIgIiVzILXEt/u6xToiCisKKyM6IGJ1ZmZlci5jOjQ0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgINDQPSVsZCAgaWQ9JWQgIMP7s8Y9JXMiCisKKyM6IGRpZmYuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6ILK7xNyxyL3PKGRpZmYpICVsZLj20tTJz7XEu7qz5cf4IgorCisjOiBkaWZmLmM6NjQ4Cittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6ILK7xNy0tL2oIGRpZmYgIgorCisjOiBkaWZmLmM6NzQ3Cittc2dpZCAiUGF0Y2ggZmlsZSIKK21zZ3N0ciAiUGF0Y2ggzsS8/iIKKworIzogZGlmZi5jOjk5MQorbXNnaWQgIkU5ODogQ2Fubm90IHJlYWQgZGlmZiBvdXRwdXQiCittc2dzdHIgIkU5ODogsrvE3LbByKEgZGlmZiC1xMrks/YiCisKKyM6IGRpZmYuYzoxNzA0Cittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IMS/x7C1xLu6s+XH+LK7ysfU2iBkaWZmIMSjyr0iCisKKyM6IGRpZmYuYzoxNzE2Cittc2dpZCAiRTEwMDogTm8gb3RoZXIgYnVmZmVyIGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMDogw7vT0Lu6s+XH+NTaIGRpZmYgxKPKvSIKKworIzogZGlmZi5jOjE3MjQKK21zZ2lkICJFMTAxOiBNb3JlIHRoYW4gdHdvIGJ1ZmZlcnMgaW4gZGlmZiBtb2RlLCBkb24ndCBrbm93IHdoaWNoIG9uZSB0byB1c2UiCittc2dzdHIgIkUxMDE6INPQwb249tLUyc+1xLu6s+XH+NTaIGRpZmYgxKPKvaOssrvE3L72tqjSqtPDxMTSu7j2IgorCisjOiBkaWZmLmM6MTc0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTAyOiBDYW4ndCBmaW5kIGJ1ZmZlciBcIiVzXCIiCittc2dzdHIgIkUxMDI6INXSsru1vbu6s+XH+DogXCIlc1wiIgorCisjOiBkaWZmLmM6MTc1MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTAzOiBCdWZmZXIgXCIlc1wiIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkUxMDM6ILu6s+XH+CBcIiVzXCIgsrvKx9TaIGRpZmYgxKPKvSIKKworIzogZGlncmFwaC5jOjIxNjgKK21zZ2lkICJFMTA0OiBFc2NhcGUgbm90IGFsbG93ZWQgaW4gZGlncmFwaCIKK21zZ3N0ciAiRTEwNDoguLS6z9fWt/soZGlncmFwaCnW0LK7xNzKudPDIEVzY2FwZSIKKworIzogZGlncmFwaC5jOjIzNDAKK21zZ2lkICJLZXltYXAgZmlsZSBub3QgZm91bmQiCittc2dzdHIgItXSsru1vSBrZXltYXAgzsS8/iIKKworIzogZGlncmFwaC5jOjIzNjcKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IMq508MgOmxvYWRrZXltYXAgIgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiC52Lz819bX1LavzeqzySAoXk4vXlApIgorCisjLiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4KKyM6IGVkaXQuYzo0MQorbXNnaWQgIiBeWCBtb2RlICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eVi9eTi9eUCkiCittc2dzdHIgIiBeWCDEo8q9ICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eTi9eUCkiCisKKyMuIFNjcm9sbCBoYXMgaXQncyBvd24gbXNncywgaW4gaXQncyBwbGFjZSB0aGVyZSBpcyB0aGUgbXNnIGZvciBsb2NhbAorIy4gKiBjdHJsX3hfbW9kZSA9IDAgKGVnIGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfTE9DQUwpICAtLSBBY2V2ZWRvCisjOiBlZGl0LmM6NDQKK21zZ2lkICIgS2V5d29yZCBMb2NhbCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiDH+NPyudi8/NfW19S2r83qs8kgKF5OL15QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkwvXk4vXlApIgorbXNnc3RyICIg1fvQ0NfUtq/N6rPJICheTC9eTi9eUCkiCisKKyM6IGVkaXQuYzo0NgorbXNnaWQgIiBGaWxlIG5hbWUgY29tcGxldGlvbiAoXkYvXk4vXlApIgorbXNnc3RyICIgzsS8/sP719S2r83qs8kgKF5GL15OL15QKSIKKworIzogZWRpdC5jOjQ3Cittc2dpZCAiIFRhZyBjb21wbGV0aW9uICheXS9eTi9eUCkiCittc2dzdHIgIiCx6sep19S2r83qs8kgKF5dL15OL15QKSIKKworIzogZWRpdC5jOjQ4Cittc2dpZCAiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiDCt76219S2r83qs8kgKF5OL15QKSIKKworIzogZWRpdC5jOjQ5Cittc2dpZCAiIERlZmluaXRpb24gY29tcGxldGlvbiAoXkQvXk4vXlApIgorbXNnc3RyICIgtqjS5dfUtq/N6rPJICheRC9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LL15OL15QKSIKK21zZ3N0ciAiINfWteTX1LavzeqzySAoXksvXk4vXlApIgorCisjOiBlZGl0LmM6NTIKK21zZ2lkICIgVGhlc2F1cnVzIGNvbXBsZXRpb24gKF5UL15OL15QKSIKK21zZ3N0ciAiIFRoZXNhdXJ1cyDX1LavzeqzySAoXlQvXk4vXlApIgorCisjOiBlZGl0LmM6NTMKK21zZ2lkICIgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gKF5WL15OL15QKSIKK21zZ3N0ciAiIMP8we7X1LavzeqzySAoXlYvXk4vXlApIgorCisjOiBlZGl0LmM6NTYKK21zZ2lkICJIaXQgZW5kIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAi0tG1vbbOwuS94c6yIgorCisjOiBlZGl0LmM6ODk0Cittc2dpZCAiJ3RoZXNhdXJ1cycgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICLRoc/uICd0aGVzYXVydXMnIM60yei2qCIKKworIzogZWRpdC5jOjEwNzAKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICLRoc/uICdkaWN0aW9uYXJ5JyDOqr/VIgorCisjOiBlZGl0LmM6MTk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIKK21zZ3N0ciAiyajD6NfWteQ6ICVzIgorCisjOiBlZGl0LmM6MjE4MworbXNnaWQgIiAoaW5zZXJ0KSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiICiy5cjrKSBTY3JvbGwgKF5FL15ZKSIKKworIzogZWRpdC5jOjIxODUKK21zZ2lkICIgKHJlcGxhY2UpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKMzmu7spIFNjcm9sbCAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIsmow+jW0DogJXMiCisKKyM6IGVkaXQuYzoyNTMxCittc2dpZCAiU2Nhbm5pbmcgdGFncy4iCittc2dzdHIgIsmow+ix6sepLiIKKworIzogZWRpdC5jOjMxODkKK21zZ2lkICIgQWRkaW5nIgorbXNnc3RyICIg1Pa80yIKKworIy4gc2hvd21vZGUgbWlnaHQgcmVzZXQgdGhlIGludGVybmFsIGxpbmUgcG9pbnRlcnMsIHNvIGl0IG11c3QKKyMuICogYmUgY2FsbGVkIGJlZm9yZSBsaW5lID0gbWxfZ2V0KCksIG9yIHdoZW4gdGhpcyBhZGRyZXNzIGlzIG5vCisjLiAqIGxvbmdlciBuZWVkZWQuICAtLSBBY2V2ZWRvLgorIy4KKyM6IGVkaXQuYzozMjM4Cittc2dpZCAiLS0gU2VhcmNoaW5nLi4uIgorbXNnc3RyICItLSDL0dGw1tAuLi4iCisKKyM6IGVkaXQuYzozMjk0Cittc2dpZCAiQmFjayBhdCBvcmlnaW5hbCIKK21zZ3N0ciAiu9i1vcbwteMiCisKKyM6IGVkaXQuYzozMjk5Cittc2dpZCAiV29yZCBmcm9tIG90aGVyIGxpbmUiCittc2dzdHIgIrTTxuTL/NDQv6rKvLXEtMogKD8pIgorCisjOiBlZGl0LmM6MzMwNAorbXNnaWQgIlRoZSBvbmx5IG1hdGNoIgorbXNnc3RyICLWu9PQtMvP7salxeQiCisKKyM6IGVkaXQuYzozMzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICLV0rW9ICVkIC8gJWQiCisKKyM6IGVkaXQuYzozMzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIgorbXNnc3RyICLGpcXkICVkIgorCisjOiBldmFsLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDY6IFVua25vd24gdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwNjogzrS2qNLltcSx5MG/OiBcIiVzXCIiCisKKyM6IGV2YWwuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNzogTWlzc2luZyBicmFjZXM6ICVzIgorbXNnc3RyICJFMTA3OiDIscnZttTTprXEwKi6xTogJXMiCisKKyM6IGV2YWwuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDg6IE5vIHN1Y2ggdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwODogzt60y7Hkwb86IFwiJXNcIiIKKworIzogZXZhbC5jOjEyODQKK21zZ2lkICJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciCittc2dzdHIgIkUxMDk6ICc/JyC688ixydkgJzonIgorCisjOiBldmFsLmM6MTg5OAorbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiDIscnZttTTprXEIFwiKVwiIgorCisjOiBldmFsLmM6MTk0OAorbXNnaWQgIkUxMTE6IE1pc3NpbmcgJ10nIgorbXNnc3RyICJFMTExOiDIscnZttTTprXEIFwiXVwiIgorCisjOiBldmFsLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTEyOiBPcHRpb24gbmFtZSBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiRTExMjogyLHJ2dGhz+7D+7PGOiAlcyIKKworIzogZXZhbC5jOjIwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMzogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMTEzOiCyu9X9yLe1xNGhz+46ICVzIgorCisjOiBldmFsLmM6MjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE0OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNDogyLHJ2dL9usU6ICVzIgorCisjOiBldmFsLmM6MjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE1OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNTogyLHJ2dL9usU6ICVzIgorCisjOiBldmFsLmM6MjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE2OiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJXMiCittc2dzdHIgIkUxMTY6ILqvyv0gJXMgtcSyzsr9srvV/ci3IgorCisjOiBldmFsLmM6MjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE3OiBVbmtub3duIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExNzogzrS2qNLltcS6r8r9OiAlcyIKKworIzogZXZhbC5jOjI1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExODogVG9vIG1hbnkgYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTg6ILqvyv0gJXMgtcSyzsr9uf224CIKKworIzogZXZhbC5jOjI1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOToguq/K/SAlcyC1xLLOyv3Mq8nZIgorCisjOiBldmFsLmM6MjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIwOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dDogJXMiCittc2dzdHIgIkUxMjA6IDxTSUQ+ILK7xNzU2iBzY3JpcHQgyc/Pws7EzeLKudPDOiAlcyIKKworIzogZXZhbC5jOjM1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQg0NA6ICIKKworIzogZXZhbC5jOjQ2ODkKK21zZ2lkICIiCisiJk9LXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIsi3tqgoJk8pXG4iCisiyKHP+ygmQykiCisKKyM6IGV2YWwuYzo1NTExCittc2dpZCAiRTI0MDogTm8gY29ubmVjdGlvbiB0byBWaW0gc2VydmVyIgorbXNnc3RyICJFMjQwOiDDu9PQ0+sgVmltIFNlcnZlciC0tL2oway90yIKKworIzogZXZhbC5jOjU2MDEKK21zZ2lkICJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIKK21zZ3N0ciAiRTI3NzogsrvE3LbByKG3/s7xxve1xM/s06YiCisKKyM6IGV2YWwuYzo1NjI2Cittc2dpZCAiRTI1ODogVW5hYmxlIHRvIHNlbmQgdG8gY2xpZW50IgorbXNnc3RyICJFMjU4OiCyu8TctKvLzbW9v827p7bLIgorCisjOiBldmFsLmM6NTY2NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQxOiBVbmFibGUgdG8gc2VuZCB0byAlcyIKK21zZ3N0ciAiRTI0MTogsrvE3LSry821vSAlcyIKKworIzogZXZhbC5jOjU3NjMKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIijO3tCnKSIKKworIzogZXZhbC5jOjY3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMTogVW5kZWZpbmVkIHZhcmlhYmxlOiAlcyIKK21zZ3N0ciAiRTEyMTogseTBvyAlcyDJ0M60tqjS5SIKKworIzogZXZhbC5jOjc0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMjogRnVuY3Rpb24gJXMgYWxyZWFkeSBleGlzdHMsIHVzZSAhIHRvIHJlcGxhY2UiCittc2dzdHIgIkUxMjI6ILqvyv0gJXMg0tG+rbTm1NosIMfryrnTwyAhIMe/1sbM5ru7IgorCisjOiBldmFsLmM6NzUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiC6r8r9ICVzIMnQzrS2qNLlIgorCisjOiBldmFsLmM6NzUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6IMixydkgXCIoXCI6ICVzIgorCisjOiBldmFsLmM6NzU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNTogss7K/bK71f3ItzogJXMiCisKKyM6IGV2YWwuYzo3NjM3Cittc2dpZCAiRTEyNjogTWlzc2luZyA6ZW5kZnVuY3Rpb24iCittc2dzdHIgIkUxMjY6IMixydkgOmVuZGZ1bmN0aW9uIgorCisjOiBldmFsLmM6NzcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzoguq/K/SAlcyDV/dTayrnTw9bQo6yyu8Tc1tjQwrao0uUiCisKKyM6IGV2YWwuYzo3NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6ILqvyv3D+7PGtdrSu7j219bEuLHY0Ou089C0OiAlcyIKKworIzogZXZhbC5jOjc3NzkKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiDQ6NKquq/K/cP7s8YiCisKKyM6IGV2YWwuYzo3ODcyCittc2dpZCAiZnVuY3Rpb24gIgorbXNnc3RyICK6r8r9ICIKKworIzogZXZhbC5jOjc5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMDogVW5kZWZpbmVkIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTEzMDoguq/K/SAlcyDJ0M60tqjS5SIKKworIzogZXZhbC5jOjc5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzMTogQ2Fubm90IGRlbGV0ZSBmdW5jdGlvbiAlczogSXQgaXMgaW4gdXNlIgorbXNnc3RyICJFMTMxOiC6r8r9ICVzINX91NrKudPD1tCjrLK7xNzJvrP9IgorCisjOiBldmFsLmM6ODAzOQorbXNnaWQgIkUxMzI6IEZ1bmN0aW9uIGNhbGwgZGVwdGggaXMgaGlnaGVyIHRoYW4gJ21heGZ1bmNkZXB0aCciCittc2dzdHIgIkUxMzI6ILqvyv213bnptffTw7Ljyv2zrLn9ICdtYXhmdW5jZGVwdGgnIgorCisjLiBhbHdheXMgc2Nyb2xsIHVwLCBkb24ndCBvdmVyd3JpdGUKKyM6IGV2YWwuYzo4MDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbGxpbmcgJXMiCittc2dzdHIgIrX308MgJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjgxMTUgZXhfY21kczIuYzoxOTczCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbnRpbnVpbmcgaW4gJXMiCittc2dzdHIgIrzM0Pg6ICVzIgorCisjOiBldmFsLmM6ODE2OQorbXNnaWQgIkUxMzM6IDpyZXR1cm4gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTMzOiA6cmV0dXJuILHY0OvU2rqvyv3A78q508MiCisKKyM6IGV2YWwuYzo4MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyAjJWxkIgorbXNnc3RyICIlcyC3tbvY1rUgIyVsZCAiCisKKyM6IGV2YWwuYzo4MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyBcIiVzXCIiCittc2dzdHIgIiVzILe1u9jWtSBcIiVzXCIiCisKKyM6IGV2YWwuYzo4MzkxCittc2dpZCAiIgorIlxuIgorIiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgyKu+1rHkwb86XG4iCisKKyM6IGV4X2NtZHMyLmM6NzAKK21zZ2lkICJFbnRlcmluZyBEZWJ1ZyBtb2RlLiAgVHlwZSBcImNvbnRcIiB0byBsZWF2ZS4iCittc2dzdHIgIr34yOu198rUxKPKvS4gyuTI6yBcImNvbnRcIiDS1LvYtb3V/bOjxKPKvS4iCisKKyM6IGV4X2NtZHMyLmM6NzQgZXhfZG9jbWQuYzo3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6ICVzIgorbXNnc3RyICLQ0CAlbGQ6ICVzIgorCisjOiBleF9jbWRzMi5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNtZDogJXMiCittc2dzdHIgImNtZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6MjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyZWFrcG9pbnQgaW4gXCIlcyVzXCIgbGluZSAlbGQiCittc2dzdHIgIlwiJXMlc1wiINbQts+14zogtdogJWxkINDQIgorCisjOiBleF9jbWRzMi5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYxOiBCcmVha3BvaW50IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUxNjE6INXSsru1vdbQts+14zogJXMiCisKKyM6IGV4X2NtZHMyLmM6NDE0Cittc2dpZCAiTm8gYnJlYWtwb2ludHMgZGVmaW5lZCIKK21zZ3N0ciAiw7vT0Lao0uXW0LbPteMiCisKKyM6IGV4X2NtZHMyLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUzZCAgJXMgJXMgIGxpbmUgJWxkIgorbXNnc3RyICIlM2QgICVzICVzICC12iAlbGQg0NAiCisKKyM6IGV4X2NtZHMuYzoyMDUzIGV4X2NtZHMuYzoyMjg5IGV4X2NtZHMyLmM6NjAyCittc2dpZCAiU2F2ZSBBcyIKK21zZ3N0ciAiwe205s6qIgorCisjOiBleF9jbWRzMi5jOjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlIGNoYW5nZXMgdG8gXCIlLipzXCI/IgorbXNnc3RyICK9q7jEseSxo7Tmtb0gXCIlLipzXCI/IgorCisjOiBleF9jbWRzMi5jOjYyNyBleF9kb2NtZC5jOjg2MTIKK21zZ2lkICJVbnRpdGxlZCIKK21zZ3N0ciAizrTD/MP7IgorCisjOiBleF9jbWRzMi5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTYyOiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTE2Mjog0tG4/LjEuf27urPlx/ggXCIlc1wiILWrydDOtLGjtOYgKL/J08MgISDHv9bG1rTQ0CkiCisKKyM6IGV4X2NtZHMyLmM6ODMyCittc2dpZCAiV2FybmluZzogRW50ZXJlZCBvdGhlciBidWZmZXIgdW5leHBlY3RlZGx5IChjaGVjayBhdXRvY29tbWFuZHMpIgorbXNnc3RyICLXotLiOiDS0cfQu7u1vcbky/y7urPlx/ggKMfrvOyy6SBBdXRvY29tbWFuZHMg09DO3rTtzvMpIgorCisjOiBleF9jbWRzMi5jOjEyMDgKK21zZ2lkICJFMTYzOiBUaGVyZSBpcyBvbmx5IG9uZSBmaWxlIHRvIGVkaXQiCittc2dzdHIgIkUxNjM6INa709DSu7j2zsS8/r/JseC8rSIKKworIzogZXhfY21kczIuYzoxMjEwCittc2dpZCAiRTE2NDogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBmaWxlIgorbXNnc3RyICJFMTY0OiDS0b6t1Nq12tK7uPbOxLz+wcsiCisKKyM6IGV4X2NtZHMyLmM6MTIxMgorbXNnaWQgIkUxNjU6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBmaWxlIgorbXNnc3RyICJFMTY1OiDS0b6t1NrX7rrz0ru49s7EvP7ByyIKKworIzogZXhfY21kczIuYzoxNjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIGluIFwiJXNcIiIKK21zZ3N0ciAisunV0tbQOiBcIiVzXCIgLS0gXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIrLp1dLW0DogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGZvdW5kIGluICdydW50aW1lcGF0aCc6IFwiJXNcIiIKK21zZ3N0ciAi1NogJ3J1bnRpbWVwYXRoJyDA79XSsru1vSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTcxMgorbXNnaWQgIlJ1biBNYWNybyIKK21zZ3N0ciAi1rTQ0LrqIgorCisjOiBleF9jbWRzMi5jOjE4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNvdXJjZSBhIGRpcmVjdG9yeTogXCIlc1wiIgorbXNnc3RyICKyu8Tc1rTQ0MS/wryjuiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAisrvE3Na00NAgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IGNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIgorbXNnc3RyICK12iAlbGQg0NA6ILK7xNzWtNDQIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxODYzCisjLCBjLWZvcm1hdAorbXNnaWQgInNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAi1rTQ0CBcIiVzXCIg1tAiCisKKyM6IGV4X2NtZHMyLmM6MTg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogc291cmNpbmcgXCIlc1wiIgorbXNnc3RyICK12iAlbGQg0NA6IL3hyvjWtNDQICVzIgorCisjOiBleF9jbWRzMi5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc291cmNpbmcgJXMiCittc2dzdHIgIr3hyvjWtNDQICVzIgorCisjOiBleF9jbWRzMi5jOjIyNzIKK21zZ2lkICJXMTU6IFdhcm5pbmc6IFdyb25nIGxpbmUgc2VwYXJhdG9yLCBeTSBtYXkgYmUgbWlzc2luZyIKK21zZ3N0ciAiVzE1OiDXotLiOiC07c7ztcTQ0LfWuPTX1rf7o6y/ycTcysfJ2cHLIF5NIgorCisjOiBleF9jbWRzMi5jOjIzMjEKK21zZ2lkICJFMTY3OiA6c2NyaXB0ZW5jb2RpbmcgdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY3OiDU2ta00NAgc2NyaXB0IM7EvP7N4rK7v8nKudPDIDpzY3JpcHRlbmNvZGluZyIKKworIzogZXhfY21kczIuYzoyMzU0Cittc2dpZCAiRTE2ODogOmZpbmlzaCB1c2VkIG91dHNpZGUgb2YgYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxNjg6INTa1rTQ0CBzY3JpcHQgzsS8/s3isru/ycq508MgOmZpbmlzaCIKKworIzogZXhfY21kczIuYzoyODIwCittc2dpZCAiTm8gdGV4dCB0byBiZSBwcmludGVkIgorbXNnc3RyICLDu9PQ0qq08tOhtcTOxNfWIgorCisjOiBleF9jbWRzMi5jOjI4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgcGFnZSAlZCAoJWQlJSkiCittc2dzdHIgIrTy06HW0DogtdogJWQg0rMgKCVkJSUpIgorCisjOiBleF9jbWRzMi5jOjI5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIENvcHkgJWQgb2YgJWQiCittc2dzdHIgIri01sYgJWQgLyAlZCIKKworIzogZXhfY21kczIuYzoyOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50ZWQ6ICVzIgorbXNnc3RyICLS0bTy06E6ICVzIgorCisjOiBleF9jbWRzMi5jOjI5NjYKK21zZ2lkICJQcmludGluZyBhYm9ydGVkIgorbXNnc3RyICK08tOh1tC2zyIKKworIzogZXhfY21kczIuYzozMzQ0Cittc2dpZCAiRTQ1NTogRXJyb3Igd3JpdGluZyB0byBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFNDU1OiDQtMjrIFBvc3RTY3JpcHQgzsS8/rP2tO0iCisKKyM6IGV4X2NtZHMyLmM6NDAxOQorbXNnaWQgIkUzMjQ6IENhbid0IG9wZW4gUG9zdFNjcmlwdCBvdXRwdXQgZmlsZSIKK21zZ3N0ciAiRTMyNDogsrvE3LTyv6ogUG9zdFNjcmlwdCDK5LP2zsS8/iIKKworIzogZXhfY21kczIuYzo0MDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTY6IENhbid0IG9wZW4gZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTY6ILK7xNy08r+qzsS8/iBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDA2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU3OiBDYW4ndCByZWFkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSBcIiVzXCIiCittc2dzdHIgIkU0NTc6ILK7xNy2wSBQb3N0U2NyaXB0INfK1LTOxLz+IFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MjY2Cittc2dpZCAiU2VuZGluZyB0byBwcmludGVyLi4uIgorbXNnc3RyICK3osvNtb208tOhu/ouLi4iCisKKyM6IGV4X2NtZHMyLmM6NDI3MAorbXNnaWQgIkUzNjU6IEZhaWxlZCB0byBwcmludCBQb3N0U2NyaXB0IGZpbGUiCittc2dzdHIgIkUzNjU6ILTy06EgUG9zdFNjcmlwdCDOxLz+yqew3CIKKworIzogZXhfY21kczIuYzo0MjcyCittc2dpZCAiUHJpbnQgam9iIHNlbnQuIgorbXNnc3RyICIiCisKKyM6IGV4X2NtZHMyLmM6NDY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50ICVzbGFuZ3VhZ2U6IFwiJXNcIiIKK21zZ3N0ciAixL/HsLXEICVz0+/R1DogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6ILK7xNzJ6Lao0+/R1M6qIFwiJXNcIiIKKworIzogZXhfY21kcy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2N0YWwgJTAzbyIKK21zZ3N0ciAiPCVzPiVzJXMgICVkLCAgyq7B+b341sYgJTAyeCwgILDLvfjWxiAlMDNvIgorCisjOiBleF9jbWRzLmM6NDI4Cittc2dpZCAiRTEzNDogTW92ZSBsaW5lcyBpbnRvIHRoZW1zZWx2ZXMiCittc2dzdHIgIkUxMzQ6ILK7xNyw0dDQ0sa1vcv819TS0cTaIgorCisjOiBleF9jbWRzLmM6NDk3Cittc2dpZCAiMSBsaW5lIG1vdmVkIgorbXNnc3RyICLS0dLGtq8gMSDQ0CIKKworIzogZXhfY21kcy5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgbW92ZWQiCittc2dzdHIgItLRsOHSxiAlbGQg0NAiCisKKyM6IGV4X2NtZHMuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICLS0bSmwO0gJWxkINDQIgorCisjOiBleF9jbWRzLmM6OTE4Cittc2dpZCAiRTEzNTogKkZpbHRlciogQXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTEzNTogKkZpbHRlciogQXV0b2NvbW1hbmQgsru/ydLUuPy4xLu6s+XH+LXExNrI3SIKKworIzogZXhfY21kcy5jOjEwMDMKK21zZ2lkICJbTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2VdXG4iCittc2dzdHIgIlu4/NDCuvPJ0M60saO05l1cbiIKKworIzogZXhfY21kcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmltaW5mbzogJXMgaW4gbGluZTogIgorbXNnc3RyICJ2aW1pbmZvOiAlcyDU2tDQ1tA6ICIKKworIzogZXhfY21kcy5jOjEyNTMKK21zZ2lkICJFMTM2OiB2aW1pbmZvOiBUb28gbWFueSBlcnJvcnMsIHNraXBwaW5nIHJlc3Qgb2YgZmlsZSIKK21zZ3N0ciAiRTEzNjogdmltaW5mbzoguf224LTtzvMsILr2wtTOxLz+xuTT4LK/t9YiCisKKyM6IGV4X2NtZHMuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAitsHIoSB2aW1pbmZvIM7EvP4gXCIlc1wiJXMlcyVzIgorCisjOiBleF9jbWRzLmM6MTI4MworbXNnaWQgIiBpbmZvIgorbXNnc3RyICIg0MXPoiIKKworIzogZXhfY21kcy5jOjEyODQKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiCx6rzHIgorCisjOiBleF9jbWRzLmM6MTI4NQorbXNnaWQgIiBGQUlMRUQiCittc2dzdHIgIiDKp7DcIgorCisjOiBleF9jbWRzLmM6MTM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM3OiBWaW1pbmZvIGZpbGUgaXMgbm90IHdyaXRhYmxlOiAlcyIKK21zZ3N0ciAiRTEzNzogVmltaW5mbyDOxLz+srvE3NC0yOs6ICVzIgorCisjOiBleF9jbWRzLmM6MTUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTM4OiBDYW4ndCB3cml0ZSB2aW1pbmZvIGZpbGUgJXMhIgorbXNnc3RyICJFMTM4OiCyu8Tc0LTI6yB2aW1pbmZvIM7EvP4gJXMgISIKKworIzogZXhfY21kcy5jOjE1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiIgorbXNnc3RyICLQtMjrIHZpbWluZm8gzsS8/iBcIiVzXCIg1tAiCisKKyMuIFdyaXRlIHRoZSBpbmZvOgorIzogZXhfY21kcy5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIyBUaGlzIHZpbWluZm8gZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFZpbSAlcy5cbiIKK21zZ3N0ciAiIyB2aW1pbmZvIM7EvP7Kx9PJIHZpbSAlcyDL+bL6yfouXG4iCisKKyM6IGV4X2NtZHMuYzoxNjEyCittc2dpZCAiIgorIiMgWW91IG1heSBlZGl0IGl0IGlmIHlvdSdyZSBjYXJlZnVsIVxuIgorIlxuIgorbXNnc3RyICIiCisiIyDI57n7z+vSqtfU0NDQ3rjEx+vM2LHw0KHQxKOhXG4iCisiXG4iCisKKyM6IGV4X2NtZHMuYzoxNjE0Cittc2dpZCAiIyBWYWx1ZSBvZiAnZW5jb2RpbmcnIHdoZW4gdGhpcyBmaWxlIHdhcyB3cml0dGVuXG4iCittc2dzdHIgIiMgJ2VuY29kaW5nJyDU2rTLzsS8/r2owaLKsbXE1rVcbiIKKworIzogZXhfY21kcy5jOjE3MTMKK21zZ2lkICJJbGxlZ2FsIHN0YXJ0aW5nIGNoYXIiCittc2dzdHIgIs7e0Ke1xMb0tq/X1rf7IgorCisjLiBPdmVyd3JpdGluZyBhIGZpbGUgdGhhdCBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIgaXMgbm90IGEKKyMuICogZ29vZCBpZGVhLgorIzogZXhfY21kcy5jOjIwOTYKK21zZ2lkICJFMTM5OiBGaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciIKK21zZ3N0ciAiRTEzOTogxPrU2sHt0ru49ru6s+XH+NKyvNPU2MHL1eK49s7EvP4iCisKKyM6IGV4X2NtZHMuYzoyMTMwCittc2dpZCAiV3JpdGUgcGFydGlhbCBmaWxlPyIKK21zZ3N0ciAi0qrQtMjrsr+31s7EvP7C8KO/IgorCisjOiBleF9jbWRzLmM6MjEzNworbXNnaWQgIkUxNDA6IFVzZSAhIHRvIHdyaXRlIHBhcnRpYWwgYnVmZmVyIgorbXNnc3RyICJFMTQwOiDH68q508MgISDAtNC0yOuyv7fWu7qz5cf4IgorCisjOiBleF9jbWRzLmM6MjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGUgZXhpc3RpbmcgZmlsZSBcIiUuKnNcIj8iCittc2dzdHIgItKquLK4x9LRtObU2rXEzsS8/iBcIiUuKnNcIqO/IgorCisjOiBleF9jbWRzLmM6MjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQxOiBObyBmaWxlIG5hbWUgZm9yIGJ1ZmZlciAlbGQiCittc2dzdHIgIkUxNDE6ILu6s+XH+CAlbGQgw7vT0M7EvP7D+yIKKworIzogZXhfY21kcy5jOjIzMzIKK21zZ2lkICJFMTQyOiBGaWxlIG5vdCB3cml0dGVuOiBXcml0aW5nIGlzIGRpc2FibGVkIGJ5ICd3cml0ZScgb3B0aW9uIgorbXNnc3RyICJFMTQyOiDOxLz+zrTQtMjro6zS8s6qICd3cml0ZScg0aHP7rnYsdUiCisKKyM6IGV4X2NtZHMuYzoyMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgZm9yIFwiJS4qc1wiLlxuIgorIkRvIHlvdSB3aXNoIHRvIHdyaXRlIGFueXdheT8iCittc2dzdHIgIiIKKyJcIiUuKnNcIiDS0cnotqggJ3JlYWRvbmx5JyDRoc/uLlxuIgorIsi3tqjSqriyuMfC8KO/IgorCisjOiBleF9jbWRzLmM6MjUxNworbXNnaWQgIkVkaXQgRmlsZSIKK21zZ3N0ciAiseC8rc7EvP4iCisKKyM6IGV4X2NtZHMuYzozMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiBBdXRvY29tbWFuZHMg0uLN4rXYyb6z/dDCu7qz5cf4ICVzIgorCisjOiBleF9jbWRzLmM6MzE1NgorbXNnaWQgIkUxNDQ6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIDp6IgorbXNnc3RyICJFMTQ0OiA6eiCyu73Tyty3x8r919a1xLLOyv0iCisKKyM6IGV4X2NtZHMuYzozMjQxCittc2dpZCAiRTE0NTogU2hlbGwgY29tbWFuZHMgbm90IGFsbG93ZWQgaW4gcnZpbSIKK21zZ3N0ciAiRTE0NTogcnZpbSDW0L371rnKudPDIHNoZWxsIMP8we4iCisKKyM6IGV4X2NtZHMuYzozMzQ4Cittc2dpZCAiRTE0NjogUmVndWxhciBleHByZXNzaW9ucyBjYW4ndCBiZSBkZWxpbWl0ZWQgYnkgbGV0dGVycyIKK21zZ3N0ciAiRTE0Njog1f3U8rHttO/KvbK7xNzTw9fWxLi31rj0ICg/KSIKKworIzogZXhfY21kcy5jOjM2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKK21zZ3N0ciAizOa7u86qICVzICh5L24vYS9xL15FL15ZKT8iCisKKyM6IGV4X2NtZHMuYzo0MDUwCittc2dpZCAiKEludGVycnVwdGVkKSAiCittc2dzdHIgIijS0dbQts8pICIKKworIzogZXhfY21kcy5jOjQwNTQKK21zZ2lkICIxIHN1YnN0aXR1dGlvbiIKK21zZ3N0ciAizOa7u9K71+kiCisKKyM6IGV4X2NtZHMuYzo0MDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICLM5ru7ICVsZCDX6SIKKworIzogZXhfY21kcy5jOjQwNTkKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIg0rvQ0NbQIgorCisjOiBleF9jbWRzLmM6NDA2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgb24gJWxkIGxpbmVzIgorbXNnc3RyICIgJWxkINDQ1tAiCisKKyM6IGV4X2NtZHMuYzo0MTEyCittc2dpZCAiRTE0NzogQ2Fubm90IGRvIDpnbG9iYWwgcmVjdXJzaXZlIgorbXNnc3RyICJFMTQ3OiA6Z2xvYmFsILK7xNy13bnp1rTQ0CIKKworIzogZXhfY21kcy5jOjQxNDcKK21zZ2lkICJFMTQ4OiBSZWd1bGFyIGV4cHJlc3Npb24gbWlzc2luZyBmcm9tIGdsb2JhbCIKK21zZ3N0ciAiRTE0ODogw7vT0Mq508O5/dX91PKx7bTvyr0gKD8pIgorCisjOiBleF9jbWRzLmM6NDE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIGZvdW5kIGluIGV2ZXJ5IGxpbmU6ICVzIgorbXNnc3RyICLDv9K70NC2vNXSsru1vcSjyr06ICVzIgorCisjOiBleF9jbWRzLmM6NDI3NworbXNnaWQgIiIKKyJcbiIKKyIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCisiJCIKK21zZ3N0ciAiIgorIlxuIgorIiMgx7DSu9fpzOa0+tfWt/u0rjpcbiIKKyIkIgorCisjOiBleF9jbWRzLmM6NDM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTQ5OiBTb3JyeSwgbm8gaGVscCBmb3IgJXMiCittc2dzdHIgIkUxNDk6ILGnx7gsIMO709AgJXMgtcTLtcP3IgorCisjOiBleF9jbWRzLmM6NDQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiCittc2dzdHIgIrGnx7gsINXSsru1vbDv1vrOxLz+IFwiJXNcIiIKKworIzogZXhfY21kcy5jOjQ4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MDogTm90IGEgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiRTE1MDogJXMgsrvKx8S/wrwiCisKKyM6IGV4X2NtZHMuYzo0ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTI6IENhbm5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTUyOiCyu8Tc0tTQtMjrxKPKvbTyv6ogXCIlc1wiIgorCisjOiBleF9jbWRzLmM6NDg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE1MzogsrvE3LbByKHOxLz+OiAlcyIKKworIzogZXhfY21kcy5jOjQ5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcyIKK21zZ3N0ciAiRTE1NDogserHqSh0YWcpIFwiJXNcIiDU2s7EvP4gJXMgwO/W2Li0s/bP1rbgtM4iCisKKyM6IGV4X2NtZHMuYzo1MDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjA6IFVua25vd24gc2lnbiBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE2MDogzrS2qNLltcQgc2lnbiBjb21tYW5kOiAlcyIKKworIzogZXhfY21kcy5jOjUwOTgKK21zZ2lkICJFMTU2OiBNaXNzaW5nIHNpZ24gbmFtZSIKK21zZ3N0ciAiRTE1NjogyLHJ2SBzaWduIMP7s8YiCisKKyM6IGV4X2NtZHMuYzo1MTQ0Cittc2dpZCAiRTI1NTogVG9vIG1hbnkgc2lnbnMgZGVmaW5lZCIKK21zZ3N0ciAiRTMyNjog1dK1vcyrtuAgc2lnbnMiCisKKyM6IGV4X2NtZHMuYzo1MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTogsrvV/ci3tcQgc2lnbiDOxNfWOiAlcyIKKworIzogZXhfY21kcy5jOjUyMTAgZXhfY21kcy5jOjUzOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NTogVW5rbm93biBzaWduOiAlcyIKK21zZ3N0ciAiRTE1NTogsrvV/ci3tcQgc2lnbjogJXMiCisKKyM6IGV4X2NtZHMuYzo1MjU2Cittc2dpZCAiRTE1OTogTWlzc2luZyBzaWduIG51bWJlciIKK21zZ3N0ciAiRTE1OTogyLHJ2SBzaWduIG51bWJlciIKKworIzogZXhfY21kcy5jOjUzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1ODogSW52YWxpZCBidWZmZXIgbmFtZTogJXMiCittc2dzdHIgIkUxNTg6ILu6s+XH+MP7s8a07c7zOiAlcyIKKworIzogZXhfY21kcy5jOjUzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NzogSW52YWxpZCBzaWduIElEOiAlbGQiCittc2dzdHIgIkUxNTc6IFNpZ24gSUQgtO3O8zogJWxkIgorCisjOiBleF9jbWRzLmM6NTU0NgorbXNnaWQgIltEZWxldGVkXSIKK21zZ3N0ciAiW9LRyb6z/V0iCisKKyM6IGV4X2RvY21kLmM6NDkxCittc2dpZCAiRW50ZXJpbmcgRXggbW9kZS4gIFR5cGUgXCJ2aXN1YWxcIiB0byBnbyB0byBOb3JtYWwgbW9kZS4iCittc2dzdHIgIr34yOsgRXggxKPKvS4gyuTI6yBcInZpc3VhXCIg0tS72LW91f2zo8Sjyr0uIgorCisjLiBtdXN0IGJlIGF0IEVPRgorIzogZXhfZG9jbWQuYzo1MjcKK21zZ2lkICJBdCBlbmQtb2YtZmlsZSIKK21zZ3N0ciAi0tG1vc7EvP694c6yIgorCisjOiBleF9kb2NtZC5jOjYwMgorbXNnaWQgIkUxNjk6IENvbW1hbmQgdG9vIHJlY3Vyc2l2ZSIKK21zZ3N0ciAiRTE2OTogw/zB7rXduemy48r9uf224CIKKworIzogZXhfZG9jbWQuYzo5MTEKK21zZ2lkICJFMTcwOiBNaXNzaW5nIDplbmR3aGlsZSIKK21zZ3N0ciAiRTE3MDogyLHJ2SA6ZW5kd2hpbGUiCisKKyM6IGV4X2RvY21kLmM6OTEzCittc2dpZCAiRTE3MTogTWlzc2luZyA6ZW5kaWYiCittc2dzdHIgIkUxNzE6IMixydkgOmVuZGlmIgorCisjOiBleF9kb2NtZC5jOjkyMworbXNnaWQgIkVuZCBvZiBzb3VyY2VkIGZpbGUiCittc2dzdHIgIsP8we7OxLz+veHK+CIKKworIzogZXhfZG9jbWQuYzo5MjQKK21zZ2lkICJFbmQgb2YgZnVuY3Rpb24iCittc2dzdHIgIrqvyv294c6yIgorCisjOiBleF9kb2NtZC5jOjEzNDQKK21zZ2lkICJBbWJpZ3VvdXMgdXNlIG9mIHVzZXItZGVmaW5lZCBjb21tYW5kIgorbXNnc3RyICLTw7untqjS5bXEw/zB7rvhu+zP/SIKKworIzogZXhfZG9jbWQuYzoxMzU4Cittc2dpZCAiTm90IGFuIGVkaXRvciBjb21tYW5kIgorbXNnc3RyICKyu8rHseC8rcb3tcTD/MHuIgorCisjOiBleF9kb2NtZC5jOjE0NDEKK21zZ2lkICJEb24ndCBwYW5pYyEiCittc2dzdHIgIrK70qq+qrvFISIKKworIzogZXhfZG9jbWQuYzoxNDYwCittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuIgorbXNnc3RyICLWuLaowcvP8sewss6/vLXEt7bOpyIKKworIzogZXhfZG9jbWQuYzoxNDY5Cittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuLCBPSyB0byBzd2FwIgorbXNnc3RyICLWuLaowcvP8sewss6/vLXEt7bOp6OsT0sgdG8gc3dhcCIKKworIzogZXhfZG9jbWQuYzoxNTgwCittc2dpZCAiVXNlIHcgb3Igdz4+IgorbXNnc3RyICLH68q508MgdyC78iB3Pj4iCisKKyM6IGV4X2RvY21kLmM6MzA4NgorbXNnaWQgIkUzMTk6IFNvcnJ5LCB0aGUgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTMxOTogsafHuCwgsb7D/MHu1Nq0y7Dmsb7W0M60yrXP1iIKKworIzogZXhfZG9jbWQuYzozMjU2Cittc2dpZCAiRTE3MjogT25seSBvbmUgZmlsZSBuYW1lIGFsbG93ZWQiCittc2dzdHIgIkUxNzI6INa7xNzT0NK7uPbOxLz+w/siCisKKyM6IGV4X2RvY21kLmM6MzgxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBtb3JlIGZpbGVzIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIru509AgJWQguPbOxLz+zrSx4LytLiDIt7ao0qrNy7P2o78iCisKKyM6IGV4X2RvY21kLmM6MzgxNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgorbXNnc3RyICJFMTczOiC7udPQICVsZCC49s7EvP7OtLHgvK0iCisKKyM6IGV4X2RvY21kLmM6MzkxMQorbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IHVzZSAhIHRvIHJlZGVmaW5lIgorbXNnc3RyICJFMTc0OiDD/MHu0tG+rbTm1NosIMfryrnTwyAhIMe/1sbW2NDCtqjS5SIKKworIzogZXhfZG9jbWQuYzo0MDE2Cittc2dpZCAiIgorIlxuIgorIiAgICBOYW1lICAgICAgICBBcmdzIFJhbmdlIENvbXBsZXRlICBEZWZpbml0aW9uIgorbXNnc3RyICIiCisiXG4iCisiICAgIMP7s8YgICAgICAgILLOyv0gt7bOpyAgzerV+yAgICAgILao0uUgICAgICAiCisKKyM6IGV4X2RvY21kLmM6NDEwNQorbXNnaWQgIk5vIHVzZXItZGVmaW5lZCBjb21tYW5kcyBmb3VuZCIKK21zZ3N0ciAi1dKyu7W908O7p9fUtqjS5bXEw/zB7iIKKworIzogZXhfZG9jbWQuYzo0MTM2Cittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTogw7vT0Na4tqi1xMr00NQiCisKKyM6IGV4X2RvY21kLmM6NDE4OAorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3NjogsrvV/ci3tcSyzsr9uPbK/SIKKworIzogZXhfZG9jbWQuYzo0MjAzCittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3NzogsrvE3Na4tqjBvbTOIgorCisjOiBleF9kb2NtZC5jOjQyMTMKK21zZ2lkICJFMTc4OiBJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIGNvdW50IgorbXNnc3RyICJFMTc4OiC8xsr9tcTIscqh1rWyu9X9yLciCisKKyM6IGV4X2RvY21kLmM6NDI0MQorbXNnaWQgIkUxNzk6IGFyZ3VtZW50IHJlcXVpcmVkIGZvciBjb21wbGV0ZSIKK21zZ3N0ciAiRTE3OTog1rjB7tDo0qqyzsr9ssXE3M3qs8kiCisKKyM6IGV4X2RvY21kLmM6NDI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgwOiBJbnZhbGlkIGNvbXBsZXRlIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTE4MDogsrvN6tX7tcTWtTogJyVzJyIKKworIzogZXhfZG9jbWQuYzo0MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MTogsrvV/ci3tcTK9NDUOiAlcyIKKworIzogZXhfZG9jbWQuYzo0MzA5Cittc2dpZCAiRTE4MjogSW52YWxpZCBjb21tYW5kIG5hbWUiCittc2dzdHIgIkUxODI6IMP8we7D+7PGsrvV/ci3IgorCisjOiBleF9kb2NtZC5jOjQzMjQKK21zZ2lkICJFMTgzOiBVc2VyIGRlZmluZWQgY29tbWFuZHMgbXVzdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIiCittc2dzdHIgIkUxODM6INPDu6fX1Lao0uXD/MHusdjQ69LUtPPQtNfWxLi/qsq8IgorCisjOiBleF9kb2NtZC5jOjQzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NDogTm8gc3VjaCB1c2VyLWRlZmluZWQgY29tbWFuZDogJXMiCittc2dzdHIgIkUxODQ6IMO709DTw7un19S2qNLltcTD/MHuo7ogJXMiCisKKyM6IGV4X2RvY21kLmM6NDg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg1OiBDYW5ub3QgZmluZCBjb2xvciBzY2hlbWUgJXMiCittc2dzdHIgIkUxODU6INXSsru1vdHVyavR+cq9ICVzIgorCisjOiBleF9kb2NtZC5jOjQ4NTIKK21zZ2lkICJHcmVldGluZ3MsIFZpbSB1c2VyISIKK21zZ3N0ciAixOO6wywgVmltINPDu6ejoSIKKworIzogZXhfZG9jbWQuYzo1NTQ5Cittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgItTa0MK0sL/aseC8rc7EvP4iCisKKyM6IGV4X2RvY21kLmM6NTgxNQorbXNnaWQgIk5vIHN3YXAgZmlsZSIKK21zZ3N0ciAizt69u7u7zsS8/iIKKworIzogZXhfZG9jbWQuYzo1OTE5Cittc2dpZCAiQXBwZW5kIEZpbGUiCittc2dzdHIgIri9vNPOxLz+IgorCisjOiBleF9kb2NtZC5jOjU5NzgKK21zZ2lkICJFMTg2OiBObyBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkUxODY6IMew0ru49sS/wryyu7Tm1NoiCisKKyM6IGV4X2RvY21kLmM6NjA1NQorbXNnaWQgIkUxODc6IFVua25vd24iCittc2dzdHIgIkUxODc6ILK7xNzKtrHwtcSx6rzHIgorCisjOiBleF9kb2NtZC5jOjYxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2luZG93IHBvc2l0aW9uOiBYICVkLCBZICVkIgorbXNnc3RyICK0sL/azrvWwzogWCAlZCwgWSAlZCIKKworIzogZXhfZG9jbWQuYzo2MTc4Cittc2dpZCAiRTE4ODogT2J0YWluaW5nIHdpbmRvdyBwb3NpdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIkUxODg6INTaxPq1xMa9zKjJz7K7xNy78bXDtLC/2s671sMiCisKKyM6IGV4X2RvY21kLmM6NjQ0NAorbXNnaWQgIlNhdmUgUmVkaXJlY3Rpb24iCittc2dzdHIgIrGjtObW2Laoz/IiCisKKyM6IGV4X2RvY21kLmM6NjU5MworbXNnaWQgIlNhdmUgVmlldyIKK21zZ3N0ciAisaO05srTzbwiCisKKyM6IGV4X2RvY21kLmM6NjU5NAorbXNnaWQgIlNhdmUgU2Vzc2lvbiIKK21zZ3N0ciAisaO05rvhu7AiCisKKyM6IGV4X2RvY21kLmM6NjU5NgorbXNnaWQgIlNhdmUgU2V0dXAiCittc2dzdHIgIrGjtObJ6LaoIgorCisjOiBleF9kb2NtZC5jOjY3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4OTogXCIlc1wiIGV4aXN0cyAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMTg5OiBcIiVzXCIg0tG05tTaICjH69PDICEgx7/Wxta00NApIgorCisjOiBleF9kb2NtZC5jOjY3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5MDogQ2Fubm90IG9wZW4gXCIlc1wiIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTkwOiCyu8Tc0tTQtMjrxKPKvbTyv6ogXCIlc1wiIgorCisjLiBzZXQgbWFyaworIzogZXhfZG9jbWQuYzo2Nzc0Cittc2dpZCAiRTE5MTogQXJndW1lbnQgbXVzdCBiZSBhIGxldHRlciBvciBmb3J3YXJkL2JhY2t3YXJkIHF1b3RlIgorbXNnc3RyICJFMTkxOiCyzsr9sdjQ68rH06LOxNfWxLi78s/yx7AvuvO1xNL9usUiCisKKyM6IGV4X2RvY21kLmM6NjgwMworbXNnaWQgIkUxOTI6IFJlY3Vyc2l2ZSB1c2Ugb2YgOm5vcm1hbCB0b28gZGVlcCIKK21zZ3N0ciAiRTE5MjogOm5vcm1hbCC13bnpsuPK/bn9ye4iCisKKyM6IGV4X2RvY21kLmM6NzE3MQorbXNnaWQgIjppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICI6aWYgsuPK/bn9ye4iCisKKyM6IGV4X2RvY21kLmM6NzIwNgorbXNnaWQgIjplbmRpZiB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVuZGlmIMixydm21NOmtcQgOmlmIgorCisjOiBleF9kb2NtZC5jOjcyMjYKK21zZ2lkICI6ZWxzZSB3aXRob3V0IDppZiIKK21zZ3N0ciAiOmVsc2UgyLHJ2bbU06a1xCA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzIyOAorbXNnaWQgIjplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIjplbHNlaWYgyLHJ2bbU06a1xCA6aWYiCisKKyM6IGV4X2RvY21kLmM6NzI4MAorbXNnaWQgIjp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICI6d2hpbGUgsuPK/bn9ye4iCisKKyM6IGV4X2RvY21kLmM6NzMyNgorbXNnaWQgIjpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiOmNvbnRpbnVlIMixydm21NOmtcQgOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjczNTMKK21zZ2lkICI6YnJlYWsgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIjpicmVhayDIscnZttTTprXEIDp3aGlsZSIKKworIzogZXhfZG9jbWQuYzo3Mzc2IGV4X2RvY21kLmM6NzM4MQorbXNnaWQgIjplbmR3aGlsZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiOmVuZHdoaWxlIMixydm21NOmtcQgOndoaWxlIgorCisjOiBleF9kb2NtZC5jOjc0MDIKK21zZ2lkICJFMTkzOiA6ZW5kZnVuY3Rpb24gbm90IGluc2lkZSBhIGZ1bmN0aW9uIgorbXNnc3RyICJFMTkzOiA6ZW5kZnVuY3Rpb24gsdjQ69Tauq/K/cTasr/KudPDIgorCisjOiBleF9kb2NtZC5jOjc1ODIKK21zZ2lkICJFMTk0OiBObyBhbHRlcm5hdGUgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yICcjJyIKK21zZ3N0ciAiRTE5NDogw7vT0CAnIycgv8nM5rT6tcTOxLz+w/siCisKKyM6IGV4X2RvY21kLmM6NzYxMworbXNnaWQgIm5vIGF1dG9jb21tYW5kIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciBcIjxhZmlsZT5cIiIKK21zZ3N0ciAiw7vT0CBBdXRvY29tbWFuZCDOxLz+w/vS1Mzmu7sgXCI8YWZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6NzYyMQorbXNnaWQgIm5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAiw7vT0CBBdXRvY29tbWFuZCC7urPlx/jD+7PG0tTM5ru7IFwiPGFidWY+XCIiCisKKyM6IGV4X2RvY21kLmM6NzYzMgorbXNnaWQgIm5vIGF1dG9jb21tYW5kIG1hdGNoIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YW1hdGNoPlwiIgorbXNnc3RyICLDu9PQIEF1dG9jb21tYW5kIE1hdGNoIG5hbWUg0tTM5ru7IFwiPGFtYXRjaD5cIiIKKworIzogZXhfZG9jbWQuYzo3NjQyCittc2dpZCAibm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIsO709AgOnNvdXJjZSDOxLz+w/vS1Mzmu7sgXCI8c2ZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6NzY4MworIywgbm8tYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBmaWxlIG5hbWUgZm9yICclJyBvciAnIycsIG9ubHkgd29ya3Mgd2l0aCBcIjpwOmhcIiIKK21zZ3N0ciAiJyUnILvyICcjJyDWuM/yv9XOxLz+w/ujrNa7xNzTw+y2IFwiOnA6aFwiIgorCisjOiBleF9kb2NtZC5jOjc2ODUKK21zZ2lkICJFdmFsdWF0ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIgorbXNnc3RyICLK5Mjrzqq/1dfWt/u0riIKKworIzogZXhfZG9jbWQuYzo4NTk0Cittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiCyu8TctsHIoSB2aW1pbmZvIgorCisjOiBleF9kb2NtZC5jOjg3NjcKK21zZ2lkICJFMTk2OiBObyBkaWdyYXBocyBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUxOTY6ILG+sOaxvs7euLS6z9fWt/soZGlncmFwaCkiCisKKyM6IGV4X2dldGxuLmM6Mjc4NQorbXNnaWQgInRhZ25hbWUiCittc2dzdHIgIrHqx6nD+7PGIgorCisjOiBleF9nZXRsbi5jOjI3ODgKK21zZ2lkICIga2luZCBmaWxlXG4iCittc2dzdHIgIsDgzsS8/lxuIgorCisjOiBleF9nZXRsbi5jOjM5OTcKK21zZ2lkICInaGlzdG9yeScgb3B0aW9uIGlzIHplcm8iCittc2dzdHIgItGhz+4gJ2hpc3RvcnknIMrHweMiCisKKyM6IGV4X2dldGxuLmM6NDIzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiIyAlcyBIaXN0b3J5IChuZXdlc3QgdG8gb2xkZXN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgJXMgwPrKt7zHwrwgKLTT0MK1vb7JKTpcbiIKKworIzogZXhfZ2V0bG4uYzo0MjM4Cittc2dpZCAiQ29tbWFuZCBMaW5lIgorbXNnc3RyICLD/MHu0NAiCisKKyM6IGV4X2dldGxuLmM6NDIzOQorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgIrLp1dLX1rf7tK4iCisKKyM6IGV4X2dldGxuLmM6NDI0MAorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgIrHttO/KvSIKKworIzogZXhfZ2V0bG4uYzo0MjQxCittc2dpZCAiSW5wdXQgTGluZSIKK21zZ3N0ciAiyuTI69DQIgorCisjOiBleF9nZXRsbi5jOjQyNzEKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyILOsuf3D/MHus6S2yCIKKworIzogZXhfZ2V0bG4uYzo0NDM1Cittc2dpZCAiRTE5OTogQWN0aXZlIHdpbmRvdyBvciBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiRTE5OTog0tHJvrP9u+62r7Swv9q78ru6tOYiCisKKyM6IGZpbGVpby5jOjM0NworbXNnaWQgIklsbGVnYWwgZmlsZSBuYW1lIgorbXNnc3RyICKyu9X9yLe1xM7EvP7D+yIKKworIzogZmlsZWlvLmM6MzcxIGZpbGVpby5jOjQ5NSBmaWxlaW8uYzoyNDkxIGZpbGVpby5jOjI1MjkKK21zZ2lkICJpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiysfEv8K8IgorCisjOiBmaWxlaW8uYzozNzMKK21zZ2lkICJpcyBub3QgYSBmaWxlIgorbXNnc3RyICKyu8rHzsS8/iIKKworIzogZmlsZWlvLmM6NTE1IGZpbGVpby5jOjM1ODEKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJbzrTD/MP7XSIKKworIzogZmlsZWlvLmM6NTMyCittc2dpZCAiW1Blcm1pc3Npb24gRGVuaWVkXSIKK21zZ3N0ciAiW8ioz96yu9fjXSIKKworIzogZmlsZWlvLmM6NjI0Cittc2dpZCAiRTIwMDogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG1hZGUgdGhlIGZpbGUgdW5yZWFkYWJsZSIKK21zZ3N0ciAiRTIwMDogKlJlYWRQcmUgQXV0b2NvbW1hbmQgyrmzzNDysrvE3LbByKG0y87EvP4iCisKKyM6IGZpbGVpby5jOjYyNgorbXNnaWQgIkUyMDE6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgY3VycmVudCBidWZmZXIiCittc2dzdHIgIkUyMDE6ICpGaWx0ZXIqIEF1dG9jb21tYW5kILK7v8nS1Lj8uMS7urPlx/i1xMTayN0iCisKKyM6IGZpbGVpby5jOjY0NgorbXNnaWQgIlZpbTogUmVhZGluZyBmcm9tIHN0ZGluLi4uXG4iCittc2dzdHIgIlZpbTogtNOx6te8yuTI67bByKEuLi5cbiIKKworIzogZmlsZWlvLmM6NjUyCittc2dpZCAiUmVhZGluZyBmcm9tIHN0ZGluLi4uIgorbXNnc3RyICK007Hq17zK5MjrtsEuLi4iCisKKyMuIFJlLW9wZW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgZmFpbGVkIQorIzogZmlsZWlvLmM6ODc2Cittc2dpZCAiRTIwMjogQ29udmVyc2lvbiBtYWRlIGZpbGUgdW5yZWFkYWJsZSEiCittc2dzdHIgIkUyMDI6INequ7u07c7zIgorCisjOiBmaWxlaW8uYzoxNzMyCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2ZpZm8vc29ja2V0XSIKKworIzogZmlsZWlvLmM6MTczOQorbXNnaWQgIltmaWZvXSIKK21zZ3N0ciAiW2ZpZm9dIgorCisjOiBmaWxlaW8uYzoxNzQ2Cittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIltzb2NrZXRdIgorCisjOiBmaWxlaW8uYzoxNzU0Cittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW9a7tsFdIgorCisjOiBmaWxlaW8uYzoxNzY0Cittc2dpZCAiW0NSIG1pc3NpbmddIgorbXNnc3RyICJbyLHJ2UNSXSciCisKKyM6IGZpbGVpby5jOjE3NjkKK21zZ2lkICJbTkwgZm91bmRdIgorbXNnc3RyICJb1dK1vU5MXSIKKworIzogZmlsZWlvLmM6MTc3NAorbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW7fWuO65/bOk0NBdIgorCisjOiBmaWxlaW8uYzoxNzgwIGZpbGVpby5jOjM1NjUKK21zZ2lkICJbTk9UIGNvbnZlcnRlZF0iCittc2dzdHIgIlvOtNequ7tdIgorCisjOiBmaWxlaW8uYzoxNzg1IGZpbGVpby5jOjM1NzAKK21zZ2lkICJbY29udmVydGVkXSIKK21zZ3N0ciAiW9LR16q7u10iCisKKyM6IGZpbGVpby5jOjE3OTIgZmlsZWlvLmM6MzU5NQorbXNnaWQgIltjcnlwdGVkXSIKK21zZ3N0ciAiW9LRvNPD3F0iCisKKyM6IGZpbGVpby5jOjE3OTkKK21zZ2lkICJbQ09OVkVSU0lPTiBFUlJPUl0iCittc2dzdHIgItequ7u07c7zIgorCisjOiBmaWxlaW8uYzoxODA2Cittc2dpZCAiW1JFQUQgRVJST1JTXSIKK21zZ3N0ciAiW7bBtO3O810iCisKKyM6IGZpbGVpby5jOjIwMTMKK21zZ2lkICJDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3IgY29udmVyc2lvbiIKK21zZ3N0ciAi1dKyu7W916q7u9PDtcTB2cqxzsS8/iIKKworIzogZmlsZWlvLmM6MjAyMAorbXNnaWQgIkNvbnZlcnNpb24gd2l0aCAnY2hhcmNvbnZlcnQnIGZhaWxlZCIKK21zZ3N0ciAi19a3+7yv16q7u7TtzvMiCisKKyM6IGZpbGVpby5jOjIwMjMKK21zZ2lkICJjYW4ndCByZWFkIG91dHB1dCBvZiAnY2hhcmNvbnZlcnQnIgorbXNnc3RyICKyu8TctsHIoSAnY2hhcmNvbnZlcnQnILXEyuSz9iIKKworIzogZmlsZWlvLmM6MjQwNworbXNnaWQgIkUyMDM6IEF1dG9jb21tYW5kcyBkZWxldGVkIG9yIHVubG9hZGVkIGJ1ZmZlciB0byBiZSB3cml0dGVuIgorbXNnc3RyICJFMjAzOiBBdXRvY29tbWFuZCDJvrP9u/LKzbfFwcvSqtC0yOu1xLu6s+XH+CIKKworIzogZmlsZWlvLmM6MjQzMAorbXNnaWQgIkUyMDQ6IEF1dG9jb21tYW5kIGNoYW5nZWQgbnVtYmVyIG9mIGxpbmVzIGluIHVuZXhwZWN0ZWQgd2F5IgorbXNnc3RyICJFMjA0OiBBdXRvY29tbWFuZCDS4s3itdi4xLHkwcvQ0LrFIgorCisjOiBmaWxlaW8uYzoyNDk2IGZpbGVpby5jOjI1MTMKK21zZ2lkICJpcyBub3QgYSBmaWxlIG9yIHdyaXRhYmxlIGRldmljZSIKK21zZ3N0ciAisrvKx87EvP678r/J0LS1xMnosbgiCisKKyM6IGZpbGVpby5jOjI1NTUKK21zZ2lkICJpcyByZWFkLW9ubHkgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiysfWu7bBzsS8/iAox+vKudPDICEgx7/Wxta00NApIgorCisjOiBmaWxlaW8uYzoyODUxCittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gYmFja3VwIGZpbGUgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAisrvE3NC0sbi33c7EvP4gKMfryrnTwyAhIMe/1sbWtNDQKSIKKworIzogZmlsZWlvLmM6Mjg2MworbXNnaWQgIkNsb3NlIGVycm9yIGZvciBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICK52LHVsbi33c7EvP6z9rTtICjH68q508MgISDHv9bG1rTQ0CkiCisKKyM6IGZpbGVpby5jOjI4NjUKK21zZ2lkICJDYW4ndCByZWFkIGZpbGUgZm9yIGJhY2t1cCAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICKyu8TctsHIoc7EvP7S1Lmpsbi33SAox+vKudPDICEgx7/Wxta00NApIgorCisjOiBmaWxlaW8uYzoyODgxCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICKyu8TctLS9qLG4t93OxLz+ICjH68q508MgISDHv9bG1rTQ0CkiCisKKyM6IGZpbGVpby5jOjI5NzAKK21zZ2lkICJDYW4ndCBtYWtlIGJhY2t1cCBmaWxlICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIrK7xNzX97G4t93OxLz+ICjH68q508MgISDHv9bG1rTQ0CkiCisKKyM6IGZpbGVpby5jOjMwMzIKK21zZ2lkICJUaGUgcmVzb3VyY2UgZm9yayB3aWxsIGJlIGxvc3QgKHVzZSAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiUmVzb3VyY2UgZm9yayC74c/7yqcgKMfryrnTwyAhIMe/1sbWtNDQKSIKKworIzogZmlsZWlvLmM6MzEyMQorbXNnaWQgIkUyMTQ6IENhbid0IGZpbmQgdGVtcCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMjE0OiDV0rK7tb3QtMjr08O1xL27u7vOxLz+IgorCisjOiBmaWxlaW8uYzozMTM5Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKHVzZSAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIkUyMTM6ILK7xNzXqru7ICjH68q508MgISDHv9bGsrvXqru70LTI6ykiCisKKyM6IGZpbGVpby5jOjMxNzYKK21zZ2lkICJFMTY2OiBDYW4ndCBvcGVuIGxpbmtlZCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTY2OiCyu8Tc0tTQtMjrxKPKvbTyv6rBtL3TzsS8/iIKKworIzogZmlsZWlvLmM6MzE4MAorbXNnaWQgIkUyMTI6IENhbid0IG9wZW4gZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxMjogsrvE3NLU0LTI68Sjyr208r+qIgorCisjOiBmaWxlaW8uYzozNDIzCittc2dpZCAiQ2xvc2UgZmFpbGVkIgorbXNnc3RyICK52LHVyqew3CIKKworIzogZmlsZWlvLmM6MzQ4MQorbXNnaWQgIndyaXRlIGVycm9yLCBjb252ZXJzaW9uIGZhaWxlZCIKK21zZ3N0ciAisrvE3NC0yOsgLS0g16q7u8qnsNwiCisKKyM6IGZpbGVpby5jOjM0ODcKK21zZ2lkICJ3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICLQtMjrtO3O8yAozsS8/s+1zbPS0cL6o78pIgorCisjOiBmaWxlaW8uYzozNTYwCittc2dpZCAiIENPTlZFUlNJT04gRVJST1IiCittc2dzdHIgItequ7u07c7zIgorCisjOiBmaWxlaW8uYzozNTc2Cittc2dpZCAiW0RldmljZV0iCittc2dzdHIgIlvJ6LG4XSIKKworIzogZmlsZWlvLmM6MzU4MQorbXNnaWQgIltOZXddIgorbXNnc3RyICJb0MJdIgorCisjOiBmaWxlaW8uYzozNjAzCittc2dpZCAiIFthXSIKK21zZ3N0ciAiW2FdIgorCisjOiBmaWxlaW8uYzozNjAzCittc2dpZCAiIGFwcGVuZGVkIgorbXNnc3RyICIg0tG4vbzTIgorCisjOiBmaWxlaW8uYzozNjA1Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiW3ddIgorCisjOiBmaWxlaW8uYzozNjA1Cittc2dpZCAiIHdyaXR0ZW4iCittc2dzdHIgIiDS0dC0yOsiCisKKyM6IGZpbGVpby5jOjM2NTUKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTogUGF0Y2ggxKPKvTogsrvE3LSitObUrcq8zsS8/iIKKworIzogZmlsZWlvLmM6MzY3NworbXNnaWQgIkUyMDY6IHBhdGNobW9kZTogY2FuJ3QgdG91Y2ggZW1wdHkgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNjogUGF0Y2ggxKPKvTogsrvE3LjEseS/1bXE1K3KvM7EvP4iCisKKyM6IGZpbGVpby5jOjM2OTIKK21zZ2lkICJFMjA3OiBDYW4ndCBkZWxldGUgYmFja3VwIGZpbGUiCittc2dzdHIgIkUyMDc6ILK7xNzJvrP9sbi33c7EvP4iCisKKyM6IGZpbGVpby5jOjM3NDQKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyK+r7jmOiDUrcq8zsS8/raqyqe78svwu7VcbiIKKworIzogZmlsZWlvLmM6Mzc0NgorbXNnaWQgImRvbid0IHF1aXQgdGhlIGVkaXRvciB1bnRpbCB0aGUgZmlsZSBpcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiEiCittc2dzdHIgItTazsS8/tX9yLfQtMjrx7DH687wzcuz9rHgvK3G9yEiCisKKyM6IGZpbGVpby5jOjM4MjYKK21zZ2lkICJbZG9zXSIKK21zZ3N0ciAiW2Rvc10iCisKKyM6IGZpbGVpby5jOjM4MjYKK21zZ2lkICJbZG9zIGZvcm1hdF0iCittc2dzdHIgIltkb3MguPHKvV0iCisKKyM6IGZpbGVpby5jOjM4MzMKK21zZ2lkICJbbWFjXSIKK21zZ3N0ciAiW21hY10iCisKKyM6IGZpbGVpby5jOjM4MzMKK21zZ2lkICJbbWFjIGZvcm1hdF0iCittc2dzdHIgIlttYWMguPHKvV0iCisKKyM6IGZpbGVpby5jOjM4NDAKK21zZ2lkICJbdW5peF0iCittc2dzdHIgIlt1bml4XSIKKworIzogZmlsZWlvLmM6Mzg0MAorbXNnaWQgIlt1bml4IGZvcm1hdF0iCittc2dzdHIgIlt1bml4ILjxyr1dIgorCisjOiBmaWxlaW8uYzozODY3Cittc2dpZCAiMSBsaW5lLCAiCittc2dzdHIgIjEg0NAsICIKKworIzogZmlsZWlvLmM6Mzg2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMsICIKK21zZ3N0ciAiJWxkINDQLCAiCisKKyM6IGZpbGVpby5jOjM4NzIKK21zZ2lkICIxIGNoYXJhY3RlciIKK21zZ3N0ciAi0ru49tfWt/siCisKKyM6IGZpbGVpby5jOjM4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYXJhY3RlcnMiCittc2dzdHIgIiVsZLj219a3+yIKKworIzogZmlsZWlvLmM6Mzg4NAorbXNnaWQgIltub2VvbF0iCittc2dzdHIgIltub2VvbF0iCisKKyM6IGZpbGVpby5jOjM4ODQKK21zZ2lkICJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIgorbXNnc3RyICJb1+6689K70NCyu83q1ftdIgorCisjLiBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIy4gbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjLiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyM6IGZpbGVpby5jOjM5MDMKK21zZ2lkICJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiCittc2dzdHIgIr6vuOY6ILG+zsS8/tfUyc+0zrbByOu689LRseS2ryEhISIKKworIzogZmlsZWlvLmM6MzkwNQorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byB3cml0ZSB0byBpdCIKK21zZ3N0ciAiyLe2qNKq0LTI68LwIgorCisjOiBmaWxlaW8uYzo0ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDg6IEVycm9yIHdyaXRpbmcgdG8gXCIlc1wiIgorbXNnc3RyICJFMjA4OiDQtMjrzsS8/iBcIiVzXCIgtO3O8yIKKworIzogZmlsZWlvLmM6NDg2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjA5OiBFcnJvciBjbG9zaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIwOTogudix1c7EvP4gXCIlc1wiILTtzvMiCisKKyM6IGZpbGVpby5jOjQ4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMDogRXJyb3IgcmVhZGluZyBcIiVzXCIiCittc2dzdHIgIkUyMTA6ILbByKHOxLz+IFwiJXNcIiC07c7zIgorCisjOiBmaWxlaW8uYzo1MDM1Cittc2dpZCAiRTI0NjogRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTI0NjogRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCDJvrP9u7qz5cf4IgorCisjOiBmaWxlaW8uYzo1MDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIG5vIGxvbmdlciBhdmFpbGFibGUiCittc2dzdHIgIkUyMTE6IL6vuOY6IM7EvP4gXCIlc1wiINLRvq2yu7Tm1NoiCisKKyM6IGZpbGVpby5jOjUwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlcxMjogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgYW5kIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQgaW4gVmltIGFzICIKKyJ3ZWxsIgorbXNnc3RyICJXMTI6IL6vuOY6IM7EvP4gXCIlc1wiINfUyc+0zrbByOu689LRseS2rywgtvjH0rHgvK3W0LXEu7qz5cf40rK4/LavwcsiCisKKyM6IGZpbGVpby5jOjUwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMTogvq+45jogzsS8/iBcIiVzXCIg19TJz7TOtsHI67rz0tG4xLHkIgorCisjOiBmaWxlaW8uYzo1MDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlcxNjogV2FybmluZzogTW9kZSBvZiBmaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxNjogvq+45jogzsS8/iBcIiVzXCIg19TJz7TOtsHI67rz0tG4xLHkIgorCisjOiBmaWxlaW8uYzo1MDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlcxMzogV2FybmluZzogRmlsZSBcIiVzXCIgaGFzIGJlZW4gY3JlYXRlZCBhZnRlciBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMzogvq+45jogzsS8/iBcIiVzXCIg1Nq/qsq8seC8rbrz09axu7S0vajByyIKKworIzogZmlsZWlvLmM6NTA4OAorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIr6vuOYiCisKKyM6IGZpbGVpby5jOjUwODkKK21zZ2lkICIiCisiJk9LXG4iCisiJkxvYWQgRmlsZSIKK21zZ3N0ciAiIgorIsi3tqgoJk8pXG4iCisivNPU2M7EvP4oJkwpIgorCisjOiBmaWxlaW8uYzo1MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjE6IENvdWxkIG5vdCByZWxvYWQgXCIlc1wiIgorbXNnc3RyICJFMzIxOiCyu8Tc1tjQwrzT1NggXCIlc1wiIgorCisjOiBmaWxlaW8uYzo1NjcwCittc2dpZCAiLS1EZWxldGVkLS0iCittc2dzdHIgIi0t0tHJvrP9LS0iCisKKyMuIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0CisjOiBmaWxlaW8uYzo1ODMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjc6IE5vIHN1Y2ggZ3JvdXA6IFwiJXNcIiIKK21zZ3N0ciAiRTM2Nzog1+myu7Tm1No6IFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjE1OiBJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciAqOiAlcyIKK21zZ3N0ciAiRTIxNTogKiC688Pm09Cyu9X9yLe1xNfWt/s6ICVzIgorCisjOiBmaWxlaW8uYzo1OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTY6IE5vIHN1Y2ggZXZlbnQ6ICVzIgorbXNnc3RyICJFMjE2OiDO3rTLysK8/jogJXMiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogZmlsZWlvLmM6NjExNQorbXNnaWQgIiIKKyJcbiIKKyItLS0gQXV0by1Db21tYW5kcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gQXV0by1Db21tYW5kcyAtLS0iCisKKyM6IGZpbGVpby5jOjYzODYKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiRTIxNzogsrvE3LbUy/nT0MrCvP7WtNDQIGF1dG9jb21tYW5kIgorCisjOiBmaWxlaW8uYzo2NDA5Cittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICLV0rK7tb221NOmtcQgYXV0b2NvbW1hbmQiCisKKyM6IGZpbGVpby5jOjY2ODEKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiBhdXRvY29tbWFuZCCy48r9uf3J7iIKKworIzogZmlsZWlvLmM6Njk2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBBdXRvIGNvbW1hbmRzIGZvciBcIiVzXCIiCittc2dzdHIgIiVzIEF1dG8gY29tbWFuZHM6IFwiJXNcIiIKKworIzogZmlsZWlvLmM6Njk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmcgJXMiCittc2dzdHIgIta00NAgJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZmlsZWlvLmM6NzA0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdXRvY29tbWFuZCAlcyIKK21zZ3N0ciAiYXV0b2NvbW1hbmQgJXMiCisKKyM6IGZpbGVpby5jOjc1NjYKK21zZ2lkICJFMjE5OiBNaXNzaW5nIHsuIgorbXNnc3RyICJFMjE5OiDIscnZIHsuIgorCisjOiBmaWxlaW8uYzo3NTY4Cittc2dpZCAiRTIyMDogTWlzc2luZyB9LiIKK21zZ3N0ciAiRTIyMDogyLHJ2SB9LiIKKworIzogZm9sZC5jOjY2Cittc2dpZCAiTm8gZm9sZCBmb3VuZCIKK21zZ3N0ciAi1dKyu7W9yM66ziBmb2xkIgorCisjOiBmb2xkLmM6NTU0Cittc2dpZCAiRTM1MDogQ2Fubm90IGNyZWF0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTA6ILK7xNzU2sS/x7C1xCAnZm9sZG1ldGhvZCcgz8K0tL2oIGZvbGQiCisKKyM6IGZvbGQuYzo1NTYKK21zZ2lkICJFMzUxOiBDYW5ub3QgZGVsZXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MTogsrvE3NTaxL/HsLXEICdmb2xkbWV0aG9kJyDPwsm+s/0gZm9sZCIKKworIzogZm9sZC5jOjE3MDAKK21zZ2lkICJFMjIxOiAnY29tbWVudHN0cmluZycgaXMgZW1wdHkiCittc2dzdHIgIkUyMjE6INGhz+4gJ2NvbW1lbnRzdHJpbmcnIM60yei2qCIKKworIzogZ2V0Y2hhci5jOjI2OAorbXNnaWQgIkUyMjI6IEFkZCB0byByZWFkIGJ1ZmZlciIKK21zZ3N0ciAiRTIyMjogvNPI67bBu7qz5dbQIgorCisjOiBnZXRjaGFyLmM6MjExNAorbXNnaWQgIkUyMjM6IHJlY3Vyc2l2ZSBtYXBwaW5nIgorbXNnc3RyICJFMjIzOiC13bnpIG1hcHBpbmciCisKKyM6IGdldGNoYXIuYzoyOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjQ6IGdsb2JhbCBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI0OiAlcyDS0b6t09DIq77WIGFiYnJldmlhdGlvbiDByyIKKworIzogZ2V0Y2hhci5jOjI5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNTogZ2xvYmFsIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI1OiAlcyDS0b6t09DIq77WIG1hcHBpbmcgwcsiCisKKyM6IGdldGNoYXIuYzozMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjY6IGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjY6ICVzINLRvq3T0CBhYmJyZXZpYXRpb24gwcsiCisKKyM6IGdldGNoYXIuYzozMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI3OiAlcyC1xCBtYXBwaW5nINLRvq205tTaIgorCisjOiBnZXRjaGFyLmM6MzE2MworbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAi1dKyu7W9y/XQtCIKKworIzogZ2V0Y2hhci5jOjMxNjUKK21zZ2lkICJObyBtYXBwaW5nIGZvdW5kIgorbXNnc3RyICLDu9PQ1eK49rbU06YiCisKKyM6IGdldGNoYXIuYzozOTkwCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiCyu9X9yLe1xMSjyr0iCisKKyM6IGd1aV9hdF9mcy5jOjI5MAorbXNnaWQgIjxjYW5ub3Qgb3Blbj4gIgorbXNnc3RyICI8srvE3LTyv6o+IgorCisjOiBndWlfYXRfZnMuYzoxMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgZm9udCAlcyIKK21zZ3N0ciAidmltX1NlbEZpbGU6ILK7xNzKudPDICVzINfWzOUiCisKKyM6IGd1aV9hdF9mcy5jOjI1MzUKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgcmV0dXJuIHRvIGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJ2aW1fU2VsRmlsZTogsrvE3LvYtb3Ev8ewxL/CvCIKKworIzogZ3VpX2F0X2ZzLmM6MjU1NAorbXNnaWQgIlBhdGhuYW1lOiIKK21zZ3N0ciAiwre+tjoiCisKKyM6IGd1aV9hdF9mcy5jOjI1NjAKK21zZ2lkICJ2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJ2aW1fU2VsRmlsZTogsrvE3MihtcPEv8ewxL/CvCIKKworIzogZ3VpX2F0X2ZzLmM6MjU2OCBndWlfbW90aWYuYzoxNjA3Cittc2dpZCAiT0siCittc2dzdHIgIsi3tqgiCisKKyMuICdDYW5jZWwnIGJ1dHRvbgorIzogZ3VpX2F0X2ZzLmM6MjU2OCBndWlfZ3RrLmM6MTY4MyBndWlfbW90aWYuYzoxNjAyIGd1aV9tb3RpZi5jOjI4MjMKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIsihz/siCisKKyM6IGd1aV9hdGhlbmEuYzoxOTI4IGd1aV9tb3RpZi5jOjE4NTUKK21zZ2lkICJWaW0gZGlhbG9nIgorbXNnc3RyICJWaW0gttS7sL/yIgorCisjOiBndWlfYXRfc2IuYzo0ODYKK21zZ2lkICJTY3JvbGxiYXIgV2lkZ2V0OiBDb3VsZCBub3QgZ2V0IGdlb21ldHJ5IG9mIHRodW1iIHBpeG1hcC4iCittc2dzdHIgIrn2tq/M9TogsrvE3MnotqggdGh1bWIgcGl4bWFwILXEzrvWwyIKKworIzogZ3VpX2JldmFsLmM6NjgKK21zZ2lkICJFMjMyOiBDYW5ub3QgY3JlYXRlIEJhbGxvb25FdmFsIHdpdGggYm90aCBtZXNzYWdlIGFuZCBjYWxsYmFjayIKK21zZ3N0ciAiRTIzMjogsrvE3LbU0MXPotPrIGNhbGxiYWNrILS0vaggQmFsbG9uRXZhbCIKKworIzogZ3VpLmM6MTgxCittc2dpZCAiRTIyOTogQ2Fubm90IHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkUyMjk6ILK7xNzG9LavzbzQzb3nw+YiCisKKyM6IGd1aS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjMwOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTIzMDogsrvE3LbByKHOxLz+IFwiJXNcIiIKKworIzogZ3VpLmM6NDMxCittc2dpZCAiRTIzMTogJ2d1aWZvbnR3aWRlJyBpbnZhbGlkIgorbXNnc3RyICJFMjMxOiCyu9X9yLe1xCAnZ3VpZm9udHdpZGUnIgorCisjOiBndWkuYzozOTE5Cittc2dpZCAiRXJyb3IiCittc2dzdHIgIrTtzvMiCisKKyM6IGd1aS5jOjM5MjAKK21zZ2lkICImT2siCittc2dzdHIgIsi3tqgoJk8pIgorCisjOiBndWlfZ3RrLmM6MTE0NAorbXNnaWQgIlZpbSBkaWFsb2cuLi4iCittc2dzdHIgIlZpbSC21Luwv/IuLi4iCisKKyM6IGd1aV9ndGsuYzoxNTE5IGd1aV9tb3RpZi5jOjI3NDIKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIlZJTSAtILLp1dLT68zmu7suLi4iCisKKyM6IGd1aV9ndGsuYzoxNTI0IGd1aV9tb3RpZi5jOjI3NDQKK21zZ2lkICJWSU0gLSBTZWFyY2guLi4iCittc2dzdHIgIlZJTSAtILLp1dIuLi4iCisKKyM6IGd1aV9ndGsuYzoxNTQ3IGd1aV9tb3RpZi5jOjI4NjIKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICKy6dXSOiIKKworIzogZ3VpX2d0ay5jOjE1NjUgZ3VpX21vdGlmLmM6Mjg5NAorbXNnaWQgIlJlcGxhY2Ugd2l0aDoiCittc2dzdHIgIszmu7vOqjoiCisKKyMuIGV4YWN0IG1hdGNoIG9ubHkgYnV0dG9uCisjOiBndWlfZ3RrLmM6MTU5NyBndWlfbW90aWYuYzoyOTk2Cittc2dpZCAiTWF0Y2ggZXhhY3Qgd29yZCBvbmx5IgorbXNnc3RyICLWu8alxeTN6sirz+DNrLXE19YiCisKKyM6IGd1aV9ndGsuYzoxNjA5IGd1aV9tb3RpZi5jOjI5NjQKK21zZ2lkICJEaXJlY3Rpb24iCittc2dzdHIgIre9z/IiCisKKyMuICdVcCcgYW5kICdEb3duJyBidXR0b25zCisjOiBndWlfZ3RrLmM6MTYyMSBndWlfbW90aWYuYzoyOTc2Cittc2dpZCAiVXAiCittc2dzdHIgIs/yyc8iCisKKyM6IGd1aV9ndGsuYzoxNjI1IGd1aV9tb3RpZi5jOjI5ODQKK21zZ2lkICJEb3duIgorbXNnc3RyICLP8s/CIgorCisjLiAnRmluZCBOZXh0JyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNjQ3IGd1aV9tb3RpZi5jOjI3NjYKK21zZ2lkICJGaW5kIE5leHQiCittc2dzdHIgItXSz8LSu7j2IgorCisjLiAnUmVwbGFjZScgYnV0dG9uCisjOiBndWlfZ3RrLmM6MTY2NCBndWlfbW90aWYuYzoyNzgzCittc2dpZCAiUmVwbGFjZSIKK21zZ3N0ciAizOa7uyIKKworIy4gJ1JlcGxhY2UgQWxsJyBidXR0b24KKyM6IGd1aV9ndGsuYzoxNjczIGd1aV9tb3RpZi5jOjI3OTYKK21zZ2lkICJSZXBsYWNlIEFsbCIKK21zZ3N0ciAizOa7u8irsr8iCisKKyM6IGd1aV9ndGtfeDExLmM6MTA3NiBndWlfeDExLmM6MTE5NAorbXNnaWQgIkUyMzM6IGNhbm5vdCBvcGVuIGRpc3BsYXkiCittc2dzdHIgIkUyMzM6IDyyu8TctPK/qiBYIFNlcnZlciBESVNQTEFZPiIKKworIzogZ3VpX2d0a194MTEuYzoyNDMzIGd1aV94MTEuYzoxOTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzQ6IFVua25vd24gZm9udHNldDogJXMiCittc2dzdHIgIkUyMzQ6ILK71f3It7XE19a3+7yvIChGb250c2V0KTogJXMiCisKKyM6IGd1aV9ndGtfeDExLmM6MjQ2MAorbXNnaWQgIkZvbnQgU2VsZWN0aW9uIgorbXNnc3RyICLX1szl0aHU8SIKKworIzogZ3VpX2d0a194MTEuYzoyNzAyIGd1aV9tYWMuYzoyNzgwIGd1aV93NDguYzoxMTk3IGd1aV94MTEuYzoxODMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IFVua25vd24gZm9udDogJXMiCittc2dzdHIgIrK71f3It7XE19bM5cP7s8Y6ICVzIgorCisjOiBndWlfZ3RrX3gxMS5jOjI3MTMgZ3VpX3gxMS5jOjE4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNjogRm9udCBcIiVzXCIgaXMgbm90IGZpeGVkLXdpZHRoIgorbXNnc3RyICJFMjM2OiBcIiVzXCIgsrvKx7nMtqi/7bbI19bM5SIKKworIzogZ3VpX2d0a194MTEuYzoyODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDI6IENvbG9yIG5hbWUgbm90IHJlY29nbml6ZWQ6ICVzIgorbXNnc3RyICJFMjQyOiAlcyDOqrK7xNzKtrHwtcTR1cmrw/uzxiIKKworIzogZ3VpX2d0a194MTEuYzozNTE5IHVpLmM6MTkyOQorbXNnaWQgIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iCittc2dzdHIgIsq508MgQ1VUX0JVRkZFUjAgwLTM5ru7v9XRodTxIgorCisjOiBndWlfbW90aWYuYzoxNjAxIGd1aV9tb3RpZi5jOjE2MDQKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIrn9wsvG9yIKKworIzogZ3VpX21vdGlmLmM6MTYwMworbXNnaWQgIkRpcmVjdG9yaWVzIgorbXNnc3RyICLEv8K8IgorCisjOiBndWlfbW90aWYuYzoxNjA1Cittc2dpZCAiSGVscCIKK21zZ3N0ciAisO/W+iIKKworIzogZ3VpX21vdGlmLmM6MTYwNgorbXNnaWQgIkZpbGVzIgorbXNnc3RyICLOxLz+IgorCisjOiBndWlfbW90aWYuYzoxNjA4Cittc2dpZCAiU2VsZWN0aW9uIgorbXNnc3RyICLRodTxIgorCisjOiBndWlfbW90aWYuYzoyODA5Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAis7fP+yIKKworIzogZ3VpX3Jpc2Nvcy5jOjk1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBDYW4ndCBsb2FkIFphcCBmb250ICclcyciCittc2dzdHIgIkUyMzU6ILK7xNy08r+qIFphcCDX1szlICclcyciCisKKyM6IGd1aV9yaXNjb3MuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzU6IENhbid0IHVzZSBmb250ICVzIgorbXNnc3RyICJFMjM1OiCyu8TcyrnTw9fWzOUgJXMiCisKKyM6IGd1aV9yaXNjb3MuYzoxMTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDI6IE1pc3NpbmcgY29sb3I6ICVzIgorbXNnc3RyICJFMjQyOiDV0rK7tb3R1cmrOiAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNjkKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisi1f3U2reiy83W0LbP19OzzNDytcTQxc+iLlxuIgorCisjOiBndWlfdzMyLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDM6IEFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQ6IFwiLSVzXCI7IFVzZSB0aGUgT0xFIHZlcnNpb24uIgorbXNnc3RyICJFMjQzOiCyu9ans9ayzsr9IFwiLSVzXCKho8fr08MgT0xFILDmsb6hoyIKKworIzogZ3VpX3c0OC5jOjIwNjgKK21zZ2lkICJGaW5kIHN0cmluZyAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICKy6dXS19a3+7SuICjKudPDICdcXFxcJyDAtLHtyr4gJ1xcJykiCisKKyM6IGd1aV93NDguYzoyMDkzCittc2dpZCAiRmluZCAmIFJlcGxhY2UgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAisunV0rywzOa7u9fWt/u0riAoyrnTwyAnXFxcXCcgwLSx7cq+ICdcXCcpIgorCisjOiBndWlfeDExLmM6MTQxNAorbXNnaWQgIlZpbSBFNDU4OiBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnksIHNvbWUgY29sb3JzIG1heSBiZSBpbmNvcnJlY3QiCittc2dzdHIgIlZpbSBFNDU4OiCyu8TcxeTWwyBjb2xvciBtYXAgttTP86Os09DQqdHVyau/tMbwwLS74bnWuda1xCIKKworIzogZ3VpX3gxMS5jOjE5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MDogRm9udHMgZm9yIHRoZSBmb2xsb3dpbmcgY2hhcnNldHMgYXJlIG1pc3NpbmcgaW4gZm9udHNldCAlczoiCittc2dzdHIgIkUyNTA6IEZvbnRzZXQgJXMgw7vT0MnotqjV/ci3tcTX1szl0tS5qc/Uyr7V4tCp19a3+7yvOiIKKworIzogZ3VpX3gxMS5jOjIwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MjogRm9udHNldCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI1Mjog19bM5byvKEZvbnRzZXQpw/uzxjogJXMiCisKKyM6IGd1aV94MTEuYzoyMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQgJyVzJyBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIiclcycgsrvKx7nMtqi/7bbI19bM5SIKKworIzogZ3VpX3gxMS5jOjIwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MzogRm9udHNldCBuYW1lOiAlc1xuIgorbXNnc3RyICJFMjUzOiDX1szlvK8oRm9udHNldCnD+7PGOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MDogJXNcbiIKK21zZ3N0ciAi19bM5TA6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQxOiAlc1xuIgorbXNnc3RyICLX1szlMTogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCVkIHdpZHRoIGlzIG5vdCB0d2ljZSB0aGF0IG9mIGZvbnQwXG4iCittc2dzdHIgItfWzOUlZL/ttsiyu8rH19bM5TC1xMG9sbZcbiIKKworIzogZ3VpX3gxMS5jOjIwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDAgd2lkdGg6ICVsZFxuIgorbXNnc3RyICLX1szlMLXEv+22yKO6JWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyLX1szlMb/ttsg6ICVsZFxuIgorIlxuIgorCisjOiBndWlfeDExLmM6MjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU0OiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgJXMiCittc2dzdHIgIkUyNTQ6ILK7xNzF5NbD0dXJqyAlcyIKKworIzogZ3VpX3gxMS5jOjMyNTAKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6ILK7xNy2wcihIHNpZ24gZGF0YSEiCisKKyM6IGhhbmd1bGluLmM6NjEwCittc2dpZCAiRTI1NjogSGFuZ3VsIGF1dG9tYXRhIEVSUk9SIgorbXNnc3RyICJFMjU2OiBIYW5ndWwgYXV0b21hdGEgtO3O8yIKKworIzogaWZfY3Njb3BlLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNzW2NvcGVdICVzIgorbXNnc3RyICIiCisKKyM6IGlmX2NzY29wZS5jOjY3Cittc2dpZCAiQWRkIGEgbmV3IGRhdGFiYXNlIgorbXNnc3RyICLQwtT2yv2+3b/iIgorCisjOiBpZl9jc2NvcGUuYzo2OQorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIrLp0a/Eo8q9IgorCisjOiBpZl9jc2NvcGUuYzo3MQorbXNnaWQgIlNob3cgdGhpcyBtZXNzYWdlIgorbXNnc3RyICLP1Mq+tMvQxc+iIgorCisjOiBpZl9jc2NvcGUuYzo3MworbXNnaWQgIktpbGwgYSBjb25uZWN0aW9uIgorbXNnc3RyICK94cr4way90yIKKworIzogaWZfY3Njb3BlLmM6NzUKK21zZ2lkICJSZWluaXQgYWxsIGNvbm5lY3Rpb25zIgorbXNnc3RyICLW2Mnoy/nT0MGsvdMiCisKKyM6IGlmX2NzY29wZS5jOjc3Cittc2dpZCAiU2hvdyBjb25uZWN0aW9ucyIKK21zZ3N0ciAiz9TKvsGsvdMiCisKKyM6IGlmX2NzY29wZS5jOjEwOAorbXNnaWQgIlRoaXMgY3Njb3BlIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgdGhlIHdpbmRvdy5cbiIKK21zZ3N0ciAi1eK49iBjc2NvcGUgw/zB7rK71qez1rfWuO7GwcS7XG4iCisKKyM6IGlmX2NzY29wZS5jOjE0MworbXNnaWQgIlVzYWdlOiBjc3RhZyA8aWRlbnQ+IgorbXNnc3RyICLTw7eoOiBjc3RhZyA8yrax8NfWPiIKKworIzogaWZfY3Njb3BlLmM6MTk5Cittc2dpZCAiRTI1NzogY3N0YWc6IHRhZyBub3QgZm91bmQiCittc2dzdHIgIkUyNTc6IGNzdGFnOiDV0rK7tb0gdGFnIgorCisjOiBpZl9jc2NvcGUuYzo0MDcgaWZfY3Njb3BlLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXQoJXMpIGVycm9yOiAlZCIKK21zZ3N0ciAic3RhdCglcykgtO3O8zogJWQiCisKKyM6IGlmX2NzY29wZS5jOjQ2MCBpZl9jc2NvcGUuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICLQwtT2IGNzY29wZSDK/b7dv+IgJXMiCisKKyM6IGlmX2NzY29wZS5jOjQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIiVzILK7ysfEv8K8u/IgY3Njb3BlIMr9vt2/4iIKKworIzogaWZfY3Njb3BlLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWQiCittc2dzdHIgIrbByKEgY3Njb3BlIMGsvdMgJWQgyrG07c7zIgorCisjOiBpZl9jc2NvcGUuYzo2MzMKK21zZ2lkICJ1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAizrTWqrXEIGNzY29wZSCy6dXS0M7MrCIKKworIzogaWZfY3Njb3BlLmM6NjgwCittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBjc2NvcGUgcGlwZXMiCittc2dzdHIgIrK7xNy0tL2o0+sgY3Njb3BlIMGsvdO1xLnctcAiCisKKyM6IGlmX2NzY29wZS5jOjc0NQorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uIGV4ZWMgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbiDWtNDQyqew3CIKKworIzogaWZfY3Njb3BlLmM6NzU1Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIMqnsNwgKHRvX2ZwKSIKKworIzogaWZfY3Njb3BlLmM6NzU3Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgZnJfZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIMqnsNwgKGZyX2ZwKSIKKworIzogaWZfY3Njb3BlLmM6Nzg1Cittc2dpZCAibm8gY3Njb3BlIGNvbm5lY3Rpb25zIgorbXNnc3RyICLDu9PQIGNzY29wZSDBrL3TIgorCisjOiBpZl9jc2NvcGUuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiDV0rK7tb23+7rPIGNzY29wZSC1xMvR0bAgJXMgLyAlcyIKKworIzogaWZfY3Njb3BlLmM6ODk5Cittc2dpZCAiY3Njb3BlIGNvbW1hbmRzOlxuIgorbXNnc3RyICJjc2NvcGUgw/zB7jpcbiIKKworIzogaWZfY3Njb3BlLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUtNXM6ICUtMzBzIChVc2FnZTogJXMpXG4iCittc2dzdHIgIiUtNXM6ICUtMzBzICjTw7eoOiAlcylcbiIKKworIzogaWZfY3Njb3BlLmM6OTcwCittc2dpZCAiZHVwbGljYXRlIGNzY29wZSBkYXRhYmFzZSBub3QgYWRkZWQiCittc2dzdHIgItbYuLS1xCBjc2NvcGUgyv2+3b/izrSxu7zTyOsiCisKKyM6IGlmX2NzY29wZS5jOjk4MQorbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICLS0bTvtb0gY3Njb3BlINfutPPBrL3Tyv3EvyIKKworIzogaWZfY3Njb3BlLmM6MTEwMgorbXNnaWQgIkUyNjA6IGNzY29wZSBjb25uZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MDog1dKyu7W9IGNzY29wZSDBrL3TIgorCisjOiBpZl9jc2NvcGUuYzoxMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNjE6IGNzY29wZSBjb25uZWN0aW9uICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MTog1dKyu7W9IGNzY29wZSDBrL3TICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMTQxCittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gY2xvc2VkIgorbXNnc3RyICJjc2NvcGUgway909LRudix1SIKKworIzogaWZfY3Njb3BlLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWRcbiIKK21zZ3N0ciAiY3Njb3BlIMGsvdMgJXMg0tG52LHVXG4iCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTI5MAorbXNnaWQgImZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJjc19tYW5hZ2VfbWF0Y2hlcyDRz9bYtO3O8yIKKworIzogaWZfY3Njb3BlLmM6MTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVkIgorbXNnc3RyICJFMjYyOiC2wcihIGNzY29wZSDBrL3TICVkILTtzvMiCisKKyM6IGlmX2NzY29wZS5jOjE0NDkKK21zZ2lkICJjb3VsZG4ndCBtYWxsb2NcbiIKK21zZ3N0ciAisrvE3Mq508MgbWFsbG9jXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3Njb3BlIHRhZzogJXNcbiIKK21zZ3N0ciAiQ3Njb3BlILHqx6kodGFnKTogJXNcbiIKKworIzogaWZfY3Njb3BlLmM6MTQ1OAorbXNnaWQgIiAgICMgICBsaW5lIgorbXNnc3RyICIgICAjICAg0NAgICIKKworIzogaWZfY3Njb3BlLmM6MTQ2MAorbXNnaWQgImZpbGVuYW1lIC8gY29udGV4dCAvIGxpbmVcbiIKK21zZ3N0ciAizsS8/sP7ICAgICAvIMnPz8LOxCAgICAvINDQusVcbiIKKworIzogaWZfY3Njb3BlLmM6MTcxOAorbXNnaWQgIkFsbCBjc2NvcGUgZGF0YWJhc2VzIHJlc2V0IgorbXNnc3RyICLW2Mnoy/nT0CBjc2NvcGUgyv2+3b/iIgorCisjOiBpZl9jc2NvcGUuYzoxNzg1Cittc2dpZCAibm8gY3Njb3BlIGNvbm5lY3Rpb25zXG4iCittc2dzdHIgIsO709AgY3Njb3BlIMGsvdNcbiIKKworIzogaWZfY3Njb3BlLmM6MTc4OQorbXNnaWQgIiAjIHBpZCAgICBkYXRhYmFzZSBuYW1lICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kIHBhdGhcbiIKK21zZ3N0ciAiICMgcGlkICAgIMr9vt2/4sP7s8YgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorCisjOiBpZl9jc2NvcGUuYzoxODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUyZCAlLTVsZCAgJS0zNHMgIDxub25lPlxuIgorbXNnc3RyICIlMmQgJS01bGQgICUtMzRzICA8zt4+XG4iCisKKyM6IGlmX3B5dGhvbi5jOjM3NgorbXNnaWQgIiIKKyJFMjYzOiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUHl0aG9uIGxpYnJhcnkgY291bGQgbm90IGJlICIKKyJsb2FkZWQuIgorbXNnc3RyICJFMjYzOiCxp8e4o6zV4rj2w/zB7rK7xNzKudPDo6xQeXRob24gs8zQ8r/iw7vT0LzT1NihoyIKKworIzogaWZfcHl0aG9uLmM6NTc2Cittc2dpZCAiY2FuJ3QgZGVsZXRlIE91dHB1dE9iamVjdCBhdHRyaWJ1dGVzIgorbXNnc3RyICKyu8Tcyb6z/SBPdXRwdXRPYmplY3QgyvTQ1CIKKworIzogaWZfcHl0aG9uLmM6NTgzCittc2dpZCAic29mdHNwYWNlIG11c3QgYmUgYW4gaW50ZWdlciIKK21zZ3N0ciAic29mdHNwYWNlILHY0OjKx9X7yv0iCisKKyM6IGlmX3B5dGhvbi5jOjU5MQorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIgorbXNnc3RyICKyu9X9yLe1xMr00NQiCisKKyM6IGlmX3B5dGhvbi5jOjYzMCBpZl9weXRob24uYzo2NDQKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkg0OjSqiBzdHJpbmcgbGlzdCC1sbLOyv0iCisKKyM6IGlmX3B5dGhvbi5jOjc3MAorbXNnaWQgIkUyNjQ6IFB5dGhvbjogRXJyb3IgaW5pdGlhbGlzaW5nIEkvTyBvYmplY3RzIgorbXNnc3RyICJFMjY0OiBQeXRob246ILK7xNyz9cq8u68gSS9PILbUz/MiCisKKyM6IGlmX3B5dGhvbi5jOjk1NSBpZl90Y2wuYzoxMzkxCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICKyu9X9yLe1xLHttO/KvSIKKworIzogaWZfcHl0aG9uLmM6OTY5IGlmX3RjbC5jOjEzOTYKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgItLyzqqx4NLryrHDu9PQvNPI67HttO/KvShleHByZXNzaW9uKbXEs8zQ8rT6wuujrMv50tSyu8TcyrnTw7HttO/KvSIKKworIzogaWZfcHl0aG9uLmM6OTgyCittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIGJ1ZmZlciIKK21zZ3N0ciAiytTNvMq508PS0bG7yb6z/bXEu7qz5cf4IgorCisjOiBpZl9weXRob24uYzo5OTcgaWZfcHl0aG9uLmM6MTAzOCBpZl9weXRob24uYzoxMTAyIGlmX3RjbC5jOjEyMDMKK21zZ2lkICJsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UiCittc2dzdHIgItDQusWzrLP2t7bOpyIKKworIzogaWZfcHl0aG9uLmM6MTIzNQorIywgYy1mb3JtYXQKK21zZ2lkICI8YnVmZmVyIG9iamVjdCAoZGVsZXRlZCkgYXQgJThsWD4iCittc2dzdHIgIjxidWZmZXIgttTP8yAo0tHJvrP9KTogJThsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjEzMjYgaWZfdGNsLmM6ODI1Cittc2dpZCAiaW52YWxpZCBtYXJrIG5hbWUiCittc2dzdHIgIrHqvMfD+7PGsrvV/ci3IgorCisjOiBpZl9weXRob24uYzoxNjAxCittc2dpZCAibm8gc3VjaCBidWZmZXIiCittc2dzdHIgIs7etMu7urPlx/giCisKKyM6IGlmX3B5dGhvbi5jOjE2ODkKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgd2luZG93IgorbXNnc3RyICLK1M28yrnTw9LRsbvJvrP9tcS0sL/aIgorCisjOiBpZl9weXRob24uYzoxNzM0Cittc2dpZCAicmVhZG9ubHkgYXR0cmlidXRlIgorbXNnc3RyICLWu7bByvTQ1CIKKworIzogaWZfcHl0aG9uLmM6MTc0NworbXNnaWQgImN1cnNvciBwb3NpdGlvbiBvdXRzaWRlIGJ1ZmZlciIKK21zZ3N0ciAiueKx6raozrvU2ru6s+XH+NauzeIiCisKKyM6IGlmX3B5dGhvbi5jOjE4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiPHdpbmRvdyBvYmplY3QgKGRlbGV0ZWQpIGF0ICUuOGxYPiIKK21zZ3N0ciAiPLSwv9q21M/zKNLRyb6z/Sk6ICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTgzNgorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IgorbXNnc3RyICI8tLC/2rbUz/MozrTWqik6ICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTgzOAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93ICVkPiIKK21zZ3N0ciAiPLSwv9ogJWQ+IgorCisjOiBpZl9weXRob24uYzoxOTE0Cittc2dpZCAibm8gc3VjaCB3aW5kb3ciCittc2dzdHIgIs7etMu0sL/aIgorCisjOiBpZl9weXRob24uYzoyMTQ0IGlmX3B5dGhvbi5jOjIxNzUgaWZfcHl0aG9uLmM6MjIyNSBpZl9weXRob24uYzoyMjg1CisjOiBpZl9weXRob24uYzoyNDAyIGlmX3B5dGhvbi5jOjI0NTQgaWZfdGNsLmM6NjczIGlmX3RjbC5jOjcxOCBpZl90Y2wuYzo3OTIKKyM6IGlmX3RjbC5jOjg2MiBpZl90Y2wuYzoxOTg3Cittc2dpZCAiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAisrvE3LGjtOa4tNSt0MXPoiIKKworIzogaWZfcHl0aG9uLmM6MjE0NiBpZl9weXRob24uYzoyMjMyIGlmX3B5dGhvbi5jOjIyOTYKK21zZ2lkICJjYW5ub3QgZGVsZXRlIGxpbmUiCittc2dzdHIgIrK7xNzJvrP9tMvQ0CIKKworIzogaWZfcHl0aG9uLmM6MjE3NyBpZl9weXRob24uYzoyMzEyIGlmX3RjbC5jOjY3OSBpZl90Y2wuYzoyMDA5Cittc2dpZCAiY2Fubm90IHJlcGxhY2UgbGluZSIKK21zZ3N0ciAisrvE3Mzmu7u0y9DQIgorCisjOiBpZl9weXRob24uYzoyMzI4IGlmX3B5dGhvbi5jOjI0MDQgaWZfcHl0aG9uLmM6MjQ2MgorbXNnaWQgImNhbm5vdCBpbnNlcnQgbGluZSIKK21zZ3N0ciAisrvE3LLlyOu0y9DQIgorCisjOiBpZl9weXRob24uYzoyNTY2Cittc2dpZCAic3RyaW5nIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICLX1rf7tK6yu8TcsPy6rNDC0NAiCisKKyM6IGlmX3J1YnkuYzozOTQKK21zZ2lkICIiCisiRTI2NjogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZCwgdGhlIFJ1YnkgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiRTI2NjogtMvD/MHusrvE3Mq508OjrM7et6i809TYIFJ1Ynkgs8zQ8r/iKExpYnJhcnkpIgorCisjOiBpZl9ydWJ5LmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNzM6IHVua25vd24gbG9uZ2ptcCBzdGF0dXMgJWQiCittc2dzdHIgIkUyNzM6IM601qq1xCBsb25nam1wINe0zKwgJWQiCisKKyM6IGlmX3NuaWZmLmM6NjcKK21zZ2lkICJUb2dnbGUgaW1wbGVtZW50YXRpb24vZGVmaW5pdGlvbiIKK21zZ3N0ciAix9C7u8q1z9YvtqjS5SIKKworIzogaWZfc25pZmYuYzo2OAorbXNnaWQgIlNob3cgYmFzZSBjbGFzcyBvZiIKK21zZ3N0ciAiz9TKviBiYXNlIGNsYXNzIG9mOiIKKworIzogaWZfc25pZmYuYzo2OQorbXNnaWQgIlNob3cgb3ZlcnJpZGRlbiBtZW1iZXIgZnVuY3Rpb24iCittc2dzdHIgIs/Uyr6xu7iyuMe1xLPJ1LG6r8r9IgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICK71ri0OiC0087EvP4iCisKKyM6IGlmX3NuaWZmLmM6NzEKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIHByb2plY3QiCittc2dzdHIgIrvWuLQ6ILTTttTP8yIKKworIzogaWZfc25pZmYuYzo3MworbXNnaWQgIlJldHJpZXZlIGZyb20gYWxsIHByb2plY3RzIgorbXNnc3RyICK71ri0OiC008v509DP7sS/IgorCisjOiBpZl9zbmlmZi5jOjc0Cittc2dpZCAiUmV0cmlldmUiCittc2dzdHIgIrvWuLQiCisKKyM6IGlmX3NuaWZmLmM6NzUKK21zZ2lkICJTaG93IHNvdXJjZSBvZiIKK21zZ3N0ciAiz9TKvtS0tPrC6zogIgorCisjOiBpZl9zbmlmZi5jOjc2Cittc2dpZCAiRmluZCBzeW1ib2wiCittc2dzdHIgIrLp1dIgc3ltYm9sIgorCisjOiBpZl9zbmlmZi5jOjc3Cittc2dpZCAiQnJvd3NlIGNsYXNzIgorbXNnc3RyICLkr8DAIGNsYXNzIgorCisjOiBpZl9zbmlmZi5jOjc4Cittc2dpZCAiU2hvdyBjbGFzcyBpbiBoaWVyYXJjaHkiCittc2dzdHIgIs/Uyr6y47TOudjPtbXEwOAiCisKKyM6IGlmX3NuaWZmLmM6NzkKK21zZ2lkICJTaG93IGNsYXNzIGluIHJlc3RyaWN0ZWQgaGllcmFyY2h5IgorbXNnc3RyICLP1Mq+IHJlc3RyaWN0ZWQgsuO0zrnYz7W1xCBjbGFzcyIKKworIzogaWZfc25pZmYuYzo4MAorbXNnaWQgIlhyZWYgcmVmZXJzIHRvIgorbXNnc3RyICJYcmVmILLOv7y1vSIKKworIzogaWZfc25pZmYuYzo4MQorbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCittc2dzdHIgIlhyZWYgsbvLrbLOv7w6IgorCisjOiBpZl9zbmlmZi5jOjgyCittc2dpZCAiWHJlZiBoYXMgYSIKK21zZ3N0ciAiWHJlZiDT0CIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiCxu8utyrnTwzoiCisKKyM6IGlmX3NuaWZmLmM6ODQKK21zZ2lkICJTaG93IGRvY3Ugb2YiCittc2dzdHIgIs/Uyr7OxLz+OiAiCisKKyM6IGlmX3NuaWZmLmM6ODUKK21zZ2lkICJHZW5lcmF0ZSBkb2N1IGZvciIKK21zZ3N0ciAisvrJ+s7EvP46ICIKKworIzogaWZfc25pZmYuYzo5NworbXNnaWQgIiIKKyJDYW5ub3QgY29ubmVjdCB0byBTTmlGRisuIENoZWNrIGVudmlyb25tZW50IChzbmlmZmVtYWNzIG11c3QgYmUgZm91bmQgaW4gIgorIiRQQVRIKS5cbiIKK21zZ3N0ciAisrvE3MGsvdO1vSBTTmlGRiuho8frvOyy6bu3vrOx5MG/ICgkUEFUSCDA77HY0Oi/ydLU1dK1vSBzbmlmZmVtYWNzKVxuIgorCisjOiBpZl9zbmlmZi5jOjQyNQorbXNnaWQgIkUyNzQ6IFNuaWZmOiBFcnJvciBkdXJpbmcgcmVhZC4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJFMjc0OiBTbmlmZjogtsHIobTtzvMuIMihz/vBrL3TIgorCisjOiBpZl9zbmlmZi5jOjU1MworbXNnaWQgIlNOaUZGKyBpcyBjdXJyZW50bHkgIgorbXNnc3RyICJTTmlGRisgxL/HsCIKKworIzogaWZfc25pZmYuYzo1NTUKK21zZ2lkICJub3QgIgorbXNnc3RyICLOtCIKKworIzogaWZfc25pZmYuYzo1NTYKK21zZ2lkICJjb25uZWN0ZWQiCittc2dzdHIgIsGsvdPW0CIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6ILK71f3It7XEIFNOaWZmKyC199PDOiAlcyIKKworIzogaWZfc25pZmYuYzo2MDUKK21zZ2lkICJFMjc2OiBFcnJvciBjb25uZWN0aW5nIHRvIFNOaUZGKyIKK21zZ3N0ciAiRTI3Njogway907W9IFNOaUZGKyDKp7DcIgorCisjOiBpZl9zbmlmZi5jOjEwMTAKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODogzrTBrL3Ttb0gU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwMTkKK21zZ2lkICJFMjc5OiBOb3QgYSBTTmlGRisgYnVmZmVyIgorbXNnc3RyICJFMjc5OiCyu8rHIFNOaUZGKyC1xLu6s+XH+CIKKworIzogaWZfc25pZmYuYzoxMDg0Cittc2dpZCAiU25pZmY6IEVycm9yIGR1cmluZyB3cml0ZS4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJTbmlmZjog0LTI67TtzvOho73hyvjBrL3TIgorCisjOiBpZl90Y2wuYzo0MDcKK21zZ2lkICJpbnZhbGlkIGJ1ZmZlciBudW1iZXIiCittc2dzdHIgIrK71f3It7XEu7qz5cf4usUiCisKKyM6IGlmX3RjbC5jOjQ1MyBpZl90Y2wuYzo5MjAgaWZfdGNsLmM6MTA5OQorbXNnaWQgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIsnQzrTKtc/WIgorCisjOiBpZl90Y2wuYzo0OTAKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAisrvV/ci3tcTRoc/uIgorCisjLiA/Pz8KKyM6IGlmX3RjbC5jOjc2MworbXNnaWQgImNhbm5vdCBzZXQgbGluZShzKSIKK21zZ3N0ciAisrvE3MnotqjQ0CIKKworIzogaWZfdGNsLmM6ODM0Cittc2dpZCAibWFyayBub3Qgc2V0IgorbXNnc3RyICLDu9PQyei2qLHqvMciCisKKyM6IGlmX3RjbC5jOjg0MCBpZl90Y2wuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdyAlZCBjb2x1bW4gJWQiCittc2dzdHIgIsHQICVkINDQICVkIgorCisjOiBpZl90Y2wuYzo4NzAKK21zZ2lkICJjYW5ub3QgaW5zZXJ0L2FwcGVuZCBsaW5lIgorbXNnc3RyICKyu8TcsuXI67vyzO2807TL0NAiCisKKyM6IGlmX3RjbC5jOjEyNTcKK21zZ2lkICJ1bmtub3duIGZsYWc6ICIKK21zZ3N0ciAitO3O87XEserWvjogIgorCisjOiBpZl90Y2wuYzoxMzI3Cittc2dpZCAidW5rbm93biB2aW1PcHRpb24iCittc2dzdHIgIrK71f3It7XEIFZJTSDRoc/uIgorCisjOiBpZl90Y2wuYzoxNDEyCittc2dpZCAia2V5Ym9hcmQgaW50ZXJydXB0IgorbXNnc3RyICK8/MXM1tC2zyIKKworIzogaWZfdGNsLmM6MTQxNworbXNnaWQgInZpbSBlcnJvciIKK21zZ3N0ciAidmltILTtzvMiCisKKyM6IGlmX3RjbC5jOjE0NjAKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIrK7xNy0tL2ou7qz5cf4L7Swv9rD/MHuOiC21M/zvauxu8m+s/0iCisKKyM6IGlmX3RjbC5jOjE1MzQKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICKyu8Tc16Ky4SBjYWxsYmFjayDD/MHuOiC7urPlx/gvtLC/2tLRvq2xu8m+s/3ByyIKKworIy4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgRmFtb3VzIGxhc3Qgd29yZD8KKyM6IGlmX3RjbC5jOjE1NTEKK21zZ2lkICIiCisiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IGNvcnJ1cHQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0uIgorIm9yZyIKK21zZ3N0ciAiRTI4MDogVENMINHP1ti07c7zOiByZWZsaXN0ILK7v8m/vyE/IMfrsai45rj4IHRvIHZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTU1MgorbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIrK7xNzXorLhIGNhbGxiYWNrIMP8we46INXSsru1vbu6s+XH+C+0sL/aIgorCisjOiBpZl90Y2wuYzoxNzEzCittc2dpZCAiU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFRjbCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICK0y8P8we6yu8TcyrnTwywg0vLOqs7et6i809TYIFRjbCCzzNDyv+IoTGlicmFyeSkiCisKKyM6IGlmX3RjbC5jOjE4NzUKK21zZ2lkICIiCisiRTI4MTogVENMIEVSUk9SOiBleGl0IGNvZGUgaXMgbm90IGludCE/IFBsZWFzZSByZXBvcnQgdGhpcyB0byB2aW0tZGV2QHZpbS5vcmciCittc2dzdHIgIkUyODE6IFRDTCC07c7zOiDNy7P2t7W72Na1srvKx9X7yv0hPyDH67GouOa4+CB0byB2aW0tZGV2QHZpbS5vcmciCisKKyM6IGlmX3RjbC5jOjE5OTUKK21zZ2lkICJjYW5ub3QgZ2V0IGxpbmUiCittc2dzdHIgIrK7xNzIobXDtMvQ0CIKKworIzogaWZfeGNtZHNydi5jOjIwNAorbXNnaWQgIlVuYWJsZSB0byByZWdpc3RlciBhIGNvbW1hbmQgc2VydmVyIG5hbWUiCittc2dzdHIgIrK7xNzXorLhw/zB7rf+zvHG98P7s8YiCisKKyM6IGlmX3hjbWRzcnYuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0Nzogbm8gcmVnaXN0ZXJlZCBzZXJ2ZXIgbmFtZWQgXCIlc1wiIgorbXNnc3RyICJFMjQ3OiDDu9PQ16Ky4c6qIFwiJXNcIiC1xLf+zvHG9yIKKworIzogaWZfeGNtZHNydi5jOjQ0NgorbXNnaWQgIkUyNDg6IEZhaWxlZCB0byBzZW5kIGNvbW1hbmQgdG8gdGhlIGRlc3RpbmF0aW9uIHByb2dyYW0iCittc2dzdHIgIkUyNDg6ILK7xNzLzbP2w/zB7rW9xL+1xLXYs8zQ8iIKKworIzogaWZfeGNtZHNydi5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNlcnZlciBpZCB1c2VkOiAlcyIKK21zZ3N0ciAisrvV/ci3tcS3/s7xxvcgaWQgOiAlcyIKKworIzogaWZfeGNtZHNydi5jOjEwNTYKK21zZ2lkICJFMjQ5OiBjb3VsZG4ndCByZWFkIFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSIKK21zZ3N0ciAiRTI0OTogsrvE3LbByKEgVklNILXEINeisuGx7cr00NQiCisKKyM6IGlmX3hjbWRzcnYuYzoxMDY3Cittc2dpZCAiRTI1MTogVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IGlzIGJhZGx5IGZvcm1lZC4gIERlbGV0ZWQhIgorbXNnc3RyICJFMjUxOiBWSU0gtcTXorLhse3K9NDU09DO86Gj0tHJvrP9oaMiCisKKyM6IG1haW4uYzo1MyBvcHRpb24uYzozMTYyIG9wdGlvbi5jOjMyNjkKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAisrvV/ci3tcTRoc/uIgorCisjOiBtYWluLmM6NTUKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAizKu24LHgvK2yzsr9IgorCisjOiBtYWluLmM6NTcKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICLIscnZsdjSqrXEss7K/ToiCisKKyM6IG1haW4uYzo1OQorbXNnaWQgIkdhcmJhZ2UgYWZ0ZXIgb3B0aW9uIgorbXNnc3RyICKyu8TcsebIz7TL0aHP7rrztcTD/MHuOiAiCisKKyM6IG1haW4uYzo2MQorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiBvciBcIi1jIGNvbW1hbmRcIiBhcmd1bWVudHMiCittc2dzdHIgIsyrtuAgXCIrY29tbWFuZFwiILvyIFwiLWMgY29tbWFuZFwiILLOyv0iCisKKyM6IG1haW4uYzo2MworbXNnaWQgIkludmFsaWQgYXJndW1lbnQgZm9yIgorbXNnc3RyICKyu9X9yLe1xLLOyv06ICIKKworIzogbWFpbi5jOjQzNgorbXNnaWQgIlRoaXMgVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgZGlmZiBmZWF0dXJlLiIKK21zZ3N0ciAixPq1xCBWaW0gseDS68qxw7vT0LzTyOsgZGlmZiC1xMTcwaYiCisKKyM6IG1haW4uYzo4NTgKK21zZ2lkICJBdHRlbXB0IHRvIG9wZW4gc2NyaXB0IGZpbGUgYWdhaW46IFwiIgorbXNnc3RyICLK1M281Nm0zrTyv6ogc2NyaXB0IM7EvP46IFwiIgorCisjOiBtYWluLmM6ODYyIG1haW4uYzo4NjkgbWFpbi5jOjkxMyBtZW1saW5lLmM6MzY3MyBtZW1saW5lLmM6MzY3NworIzogdmVyc2lvbi5jOjgxNiB2ZXJzaW9uLmM6ODIxIHZlcnNpb24uYzo4MjYgdmVyc2lvbi5jOjgzMSB2ZXJzaW9uLmM6ODM2CisjOiB2ZXJzaW9uLmM6ODQxIHZlcnNpb24uYzo4NDcgdmVyc2lvbi5jOjg1MSB2ZXJzaW9uLmM6ODU1IHZlcnNpb24uYzo4NjAKKyM6IHZlcnNpb24uYzo4NjcgdmVyc2lvbi5jOjg3NSB2ZXJzaW9uLmM6ODgxCittc2dpZCAiXCJcbiIKK21zZ3N0ciAiXCJcbiIKKworIzogbWFpbi5jOjg2NworbXNnaWQgIkNhbm5vdCBvcGVuIGZvciByZWFkaW5nOiBcIiIKK21zZ3N0ciAisrvE3M6qtsG2+LTyv6o6IFwiIgorCisjOiBtYWluLmM6OTExCittc2dpZCAiQ2Fubm90IG9wZW4gZm9yIHNjcmlwdCBvdXRwdXQ6IFwiIgorbXNnc3RyICKyu8Tczqogc2NyaXB0IMrks/a2+LTyv6o6IFwiIgorCisjOiBtYWluLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmaWxlcyB0byBlZGl0XG4iCittc2dzdHIgIru509AgJWQguPbOxLz+tci0/bHgvK1cbiIKKworIzogbWFpbi5jOjEwOTQKK21zZ2lkICJWaW06IFdhcm5pbmc6IE91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06INei0uI6IMrks/ayu8rH1tW2yyjGwcS7KVxuIgorCisjOiBtYWluLmM6MTA5NgorbXNnaWQgIlZpbTogV2FybmluZzogSW5wdXQgaXMgbm90IGZyb20gYSB0ZXJtaW5hbFxuIgorbXNnc3RyICJWaW06INei0uI6IMrkyOuyu8rH1tW2yyi8/MXMKVxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjExNzEKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJwcmUtdmltcmMgw/zB7tDQIgorCisjOiBtYWluLmM6MTIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjgyOiBDYW5ub3QgcmVhZCBmcm9tIFwiJXNcIiIKK21zZ3N0ciAiRTI4MjogsrvE3LbByKHOxLz+IFwiJXNcIiIKKworIzogbWFpbi5jOjIxNTcKK21zZ2lkICIiCisiXG4iCisiTW9yZSBpbmZvIHdpdGg6IFwidmltIC1oXCJcbiIKK21zZ3N0ciAiIgorIlxuIgorIrLp0a+4/Lbg0MXPosfr1rTQ0DogXCJ2aW0gLWhcIlxuIgorCisjOiBtYWluLmM6MjE5MAorbXNnaWQgIltmaWxlIC4uXSAgICAgICBlZGl0IHNwZWNpZmllZCBmaWxlKHMpIgorbXNnc3RyICJbzsS8/iAuLl0gICAgICAgseC8rda4tqi1xM7EvP4iCisKKyM6IG1haW4uYzoyMTkxCittc2dpZCAiLSAgICAgICAgICAgICAgIHJlYWQgdGV4dCBmcm9tIHN0ZGluIgorbXNnc3RyICItICAgICAgICAgICAgICAgtNOx6te8yuTI6yhzdGRpbim2wcihzsSxviIKKworIzogbWFpbi5jOjIxOTIKK21zZ2lkICItdCB0YWcgICAgICAgICAgZWRpdCBmaWxlIHdoZXJlIHRhZyBpcyBkZWZpbmVkIgorbXNnc3RyICItdCB0YWcgICAgICAgICAgseC8rcqxyrnTw9a4tqi1xCB0YWciCisKKyM6IG1haW4uYzoyMTk0Cittc2dpZCAiLXEgW2Vycm9yZmlsZV0gIGVkaXQgZmlsZSB3aXRoIGZpcnN0IGVycm9yIgorbXNnc3RyICItcSBbZXJyb3JmaWxlXSAgseC8rcqxvNPU2LXa0ru49rTtzvMiCisKKyM6IG1haW4uYzoyMjAzCittc2dpZCAiIgorIlxuIgorIlxuIgorInVzYWdlOiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIiDTw7eoOiIKKworIzogbWFpbi5jOjIyMDYKK21zZ2lkICIgdmltIFthcmd1bWVudHNdICIKK21zZ3N0ciAidmltIFuyzsr9XSAiCisKKyM6IG1haW4uYzoyMjEwCittc2dpZCAiIgorIlxuIgorIiAgIG9yOiIKK21zZ3N0ciAiIgorIlxuIgorIiAgILvyOiIKKworIzogbWFpbi5jOjIyMTMKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQXJndW1lbnRzOlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiss7K/TpcbiIKKworIzogbWFpbi5jOjIyMTQKK21zZ2lkICItLVx0XHRcdE9ubHkgZmlsZSBuYW1lcyBhZnRlciB0aGlzIgorbXNnc3RyICItLVx0XHRcdNa709DU2tXi1q6687XEzsS8/iIKKworIzogbWFpbi5jOjIyMTYKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHTXorLhIGd2aW0gtb0gT0xFIgorCisjOiBtYWluLmM6MjIxNworbXNnaWQgIi11bnJlZ2lzdGVyXHRcdFVucmVnaXN0ZXIgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItdW5yZWdpc3Rlclx0XHTIoc/7IE9MRSDW0LXEIGd2aW0g16Ky4SIKKworIzogbWFpbi5jOjIyMjAKK21zZ2lkICItZ1x0XHRcdFJ1biB1c2luZyBHVUkgKGxpa2UgXCJndmltXCIpIgorbXNnc3RyICItZ1x0XHRcdMq508PNvNDOvefD5iAozawgXCJndmltXCIpIgorCisjOiBtYWluLmM6MjIyMQorbXNnaWQgIi1mXHRcdFx0Rm9yZWdyb3VuZDogRG9uJ3QgZm9yayB3aGVuIHN0YXJ0aW5nIEdVSSIKK21zZ3N0ciAiLWZcdFx0XHTHsL6wOiDG9LavzbzQzr3nw+bKsbK7IGZvcmsiCisKKyM6IG1haW4uYzoyMjIzCittc2dpZCAiLXZcdFx0XHRWaSBtb2RlIChsaWtlIFwidmlcIikiCittc2dzdHIgIi12XHRcdFx0VmkgxKPKvSAozawgXCJ2aVwiKSIKKworIzogbWFpbi5jOjIyMjQKK21zZ2lkICItZVx0XHRcdEV4IG1vZGUgKGxpa2UgXCJleFwiKSIKK21zZ3N0ciAiLWVcdFx0XHRFeCDEo8q9ICjNrCBcImV4XCIpIgorCisjOiBtYWluLmM6MjIyNQorbXNnaWQgIi1zXHRcdFx0U2lsZW50IChiYXRjaCkgbW9kZSAob25seSBmb3IgXCJleFwiKSIKK21zZ3N0ciAiLXNcdFx0XHSwsr6yIChiYXRjaCkgxKPKvSAo1rvE3NPrIFwiZXhcIiDSu8bwyrnTwykiCisKKyM6IG1haW4uYzoyMjI3Cittc2dpZCAiLWRcdFx0XHREaWZmIG1vZGUgKGxpa2UgXCJ2aW1kaWZmXCIpIgorbXNnc3RyICItZFx0XHRcdERpZmYgxKPKvSAozawgXCJ2aW1kaWZmXCIsIL/J0bjL2bHIvc/Bvc7EvP6yu82stKYpIgorCisjOiBtYWluLmM6MjIyOQorbXNnaWQgIi15XHRcdFx0RWFzeSBtb2RlIChsaWtlIFwiZXZpbVwiLCBtb2RlbGVzcykiCittc2dzdHIgIi15XHRcdFx0vPLS18Sjyr0gKM2sIFwiZXZpbVwiLCBtb2RlbGVzcykiCisKKyM6IG1haW4uYzoyMjMwCittc2dpZCAiLVJcdFx0XHRSZWFkb25seSBtb2RlIChsaWtlIFwidmlld1wiKSIKK21zZ3N0ciAiLVJcdFx0XHTWu7bBxKPKvSAozawgXCJ2aWV3XCIpIgorCisjOiBtYWluLmM6MjIzMQorbXNnaWQgIi1aXHRcdFx0UmVzdHJpY3RlZCBtb2RlIChsaWtlIFwicnZpbVwiKSIKK21zZ3N0ciAiLVpcdFx0XHTP3tbGxKPKvSAozawgXCJydmltXCIpIgorCisjOiBtYWluLmM6MjIzMgorbXNnaWQgIi1tXHRcdFx0TW9kaWZpY2F0aW9ucyAod3JpdGluZyBmaWxlcykgbm90IGFsbG93ZWQiCittc2dzdHIgIi1tXHRcdFx0sru/ydDeuMQgKNC0yOvOxLz+KSIKKworIzogbWFpbi5jOjIyMzMKK21zZ2lkICItTVx0XHRcdE1vZGlmaWNhdGlvbnMgaW4gdGV4dCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLU1cdFx0XHTOxLG+sru/ydDeuMQiCisKKyM6IG1haW4uYzoyMjM0Cittc2dpZCAiLWJcdFx0XHRCaW5hcnkgbW9kZSIKK21zZ3N0ciAiLWJcdFx0XHS2/r341sbEo8q9IgorCisjOiBtYWluLmM6MjIzNgorbXNnaWQgIi1sXHRcdFx0TGlzcCBtb2RlIgorbXNnc3RyICItbFx0XHRcdExpc3AgxKPKvSIKKworIzogbWFpbi5jOjIyMzgKK21zZ2lkICItQ1x0XHRcdENvbXBhdGlibGUgd2l0aCBWaTogJ2NvbXBhdGlibGUnIgorbXNnc3RyICItQ1x0XHRcdCdjb21wYXRpYmxlJyC0q82zIFZpILzmyN3Eo8q9IgorCisjOiBtYWluLmM6MjIzOQorbXNnaWQgIi1OXHRcdFx0Tm90IGZ1bGx5IFZpIGNvbXBhdGlibGU6ICdub2NvbXBhdGlibGUnIgorbXNnc3RyICItTlx0XHRcdCdub2NvbXBhdGlibGUnILK7zerIq9PrtKvNsyBWaSC85sjdo6y/ycq508MgVmltILzTx7/E3MGmIgorCisjOiBtYWluLmM6MjI0MAorbXNnaWQgIi1WW05dXHRcdFZlcmJvc2UgbGV2ZWwiCittc2dzdHIgIi1WW05dXHRcdFZlcmJvc2Ugtci8tiIKKworIzogbWFpbi5jOjIyNDEKK21zZ2lkICItRFx0XHRcdERlYnVnZ2luZyBtb2RlIgorbXNnc3RyICItRFx0XHRcdLX3ytTEo8q9IgorCisjOiBtYWluLmM6MjI0MgorbXNnaWQgIi1uXHRcdFx0Tm8gc3dhcCBmaWxlLCB1c2UgbWVtb3J5IG9ubHkiCittc2dzdHIgIi1uXHRcdFx0srvKudPDvbu7u87EvP4sINa7yrnTw8TatOYiCisKKyM6IG1haW4uYzoyMjQzCittc2dpZCAiLXJcdFx0XHRMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQiCittc2dzdHIgIi1yXHRcdFx0wdCz9r27u7vOxLz+uvPNy7P2IgorCisjOiBtYWluLmM6MjI0NAorbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciAovNPOxLz+w/spICAgICAgIFx0u9a4tMnPtM6xwMCjtcTXysHPKFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uKSIKKworIzogbWFpbi5jOjIyNDUKK21zZ2lkICItTFx0XHRcdFNhbWUgYXMgLXIiCittc2dzdHIgIi1MXHRcdFx00+sgLXIg0rvR+SIKKworIzogbWFpbi5jOjIyNDcKK21zZ2lkICItZlx0XHRcdERvbid0IHVzZSBuZXdjbGkgdG8gb3BlbiB3aW5kb3ciCittc2dzdHIgIi1mXHRcdFx0srvKudPDIG5ld2NsaSDAtLTyv6q0sL/aIgorCisjOiBtYWluLmM6MjI0OAorbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPGRldmljZT5cdFx0yrnTwyA8ZGV2aWNlPiDX9srkyOvK5LP2yeixuCIKKworIzogbWFpbi5jOjIyNTEKK21zZ2lkICItSFx0XHRcdHN0YXJ0IGluIEhlYnJldyBtb2RlIgorbXNnc3RyICItSFx0XHRcdMb0tq/OqiDPo7KuwLPEo8q9IgorCisjOiBtYWluLmM6MjI1NAorbXNnaWQgIi1GXHRcdFx0c3RhcnQgaW4gRmFyc2kgbW9kZSIKK21zZ3N0ciAiLUZcdFx0XHTG9LavzqogRmFyc2kgxKPKvSIKKworIzogbWFpbi5jOjIyNTYKK21zZ2lkICItVCA8dGVybWluYWw+XHRTZXQgdGVybWluYWwgdHlwZSB0byA8dGVybWluYWw+IgorbXNnc3RyICItVCA8dGVybWluYWw+XHTJ6Lao1tW2y86qIDx0ZXJtaW5hbD4iCisKKyM6IG1haW4uYzoyMjU3Cittc2dpZCAiLXUgPHZpbXJjPlx0XHRVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMiCittc2dzdHIgIi11IDx2aW1yYz5cdFx0yrnTwyA8dmltcmM+IMzmu7vIzrrOIC52aW1yYyIKKworIzogbWFpbi5jOjIyNTkKK21zZ2lkICItVSA8Z3ZpbXJjPlx0XHRVc2UgPGd2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLmd2aW1yYyIKK21zZ3N0ciAiLVUgPGd2aW1yYz5cdFx0yrnTwyA8Z3ZpbXJjPiDM5ru7yM66ziAuZ3ZpbXJjIgorCisjOiBtYWluLmM6MjI2MQorbXNnaWQgIi0tbm9wbHVnaW5cdFx0RG9uJ3QgbG9hZCBwbHVnaW4gc2NyaXB0cyIKK21zZ3N0ciAiLS1ub3BsdWdpblx0XHSyu7zT1NjIzrrOIHBsdWdpbiIKKworIzogbWFpbi5jOjIyNjIKK21zZ2lkICItb1tOXVx0XHRPcGVuIE4gd2luZG93cyAoZGVmYXVsdDogb25lIGZvciBlYWNoIGZpbGUpIgorbXNnc3RyICItb1tOXVx0XHS08r+qIE4guPa0sL/aICjUpMnoysfDv7j2zsS8/tK7uPYpIgorCisjOiBtYWluLmM6MjI2MworbXNnaWQgIi1PW05dXHRcdGxpa2UgLW8gYnV0IHNwbGl0IHZlcnRpY2FsbHkiCittc2dzdHIgIi1PW05dXHRcdM2sIC1vILWryrnTw7S51rG31rjuIgorCisjOiBtYWluLmM6MjI2NAorbXNnaWQgIitcdFx0XHRTdGFydCBhdCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiK1x0XHRcdMb0tq+688z4tb3OxLz+veHOsiIKKworIzogbWFpbi5jOjIyNjUKK21zZ2lkICIrPGxudW0+XHRcdFN0YXJ0IGF0IGxpbmUgPGxudW0+IgorbXNnc3RyICIrPGxudW0+XHRcdMb0tq+688z4tb212iA8bG51bT4g0NAiCisKKyM6IG1haW4uYzoyMjY3Cittc2dpZCAiLS1jbWQgPGNvbW1hbmQ+XHRFeGVjdXRlIDxjb21tYW5kPiBiZWZvcmUgbG9hZGluZyBhbnkgdmltcmMgZmlsZSIKK21zZ3N0ciAiLS1jbWQgPGNvbW1hbmQ+XHS809TYyM66ziB2aW1yYyDHsNa00NAgPGNvbW1hbmQ+IgorCisjOiBtYWluLmM6MjI2OQorbXNnaWQgIi1jIDxjb21tYW5kPlx0XHRFeGVjdXRlIDxjb21tYW5kPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItYyA8Y29tbWFuZD5cdFx0vNPU2LXa0ru49s7EvP6689a00NAgPGNvbW1hbmQ+IgorCisjOiBtYWluLmM6MjI3MAorbXNnaWQgIi1TIDxzZXNzaW9uPlx0XHRTb3VyY2UgZmlsZSA8c2Vzc2lvbj4gYWZ0ZXIgbG9hZGluZyB0aGUgZmlyc3QgZmlsZSIKK21zZ3N0ciAiLVMgPHNlc3Npb24+XHRcdLzT1Ni12tK7uPbOxLz+uvPU2MjrIFNlc3Npb24gzsS8/jxzZXNzaW9uPiIKKworIzogbWFpbi5jOjIyNzEKK21zZ2lkICItcyA8c2NyaXB0aW4+XHRSZWFkIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGZyb20gZmlsZSA8c2NyaXB0aW4+IgorbXNnc3RyICItcyA8c2NyaXB0aW4+XHS00yA8c2NyaXB0aW4+ILbByOvSu7DjxKPKvcP8we4iCisKKyM6IG1haW4uYzoyMjcyCittc2dpZCAiLXcgPHNjcmlwdG91dD5cdEFwcGVuZCBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLXcgPHNjcmlwdG91dD5cdLbUzsS8/iA8c2NyaXB0b3V0PiC4vbzTKGFwcGVuZCnL+dPQyuTI67XEw/zB7iIKKworIzogbWFpbi5jOjIyNzMKK21zZ2lkICItVyA8c2NyaXB0b3V0Plx0V3JpdGUgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi1XIDxzY3JpcHRvdXQ+XHS21M7EvP4gPHNjcmlwdG91dD4g0LTI68v509DK5MjrtcTD/MHuIgorCisjOiBtYWluLmM6MjI3NQorbXNnaWQgIi14XHRcdFx0RWRpdCBlbmNyeXB0ZWQgZmlsZXMiCittc2dzdHIgIi14XHRcdFx0seC8rbHgwuu5/bXEzsS8/iIKKworIzogbWFpbi5jOjIyNzkKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdENvbm5lY3QgdmltIHRvIHRoaXMgcGFydGljdWxhciBYLXNlcnZlciIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHS9qyB2aW0g0+vWuLaotcQgWC1zZXJ2ZXIgway90yIKKworIzogbWFpbi5jOjIyODEKK21zZ2lkICItWFx0XHRcdERvIG5vdCBjb25uZWN0IHRvIFggc2VydmVyIgorbXNnc3RyICItWFx0XHRcdLK70qrBrL3Ttb0gWCBTZXJ2ZXIiCisKKyM6IG1haW4uYzoyMjgzCittc2dpZCAiLS1zb2NrZXRpZCA8eGlkPlx0T3BlbiBWaW0gaW5zaWRlIGFub3RoZXIgR1RLIHdpZGdldCIKK21zZ3N0ciAiLS1zb2NrZXRpZCA8eGlkPlx01NrB7dK7uPYgR1RLINfpvP7E2rTyv6ogVmltIgorCisjOiBtYWluLmM6MjI4NworbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQiCittc2dzdHIgIi0tcmVtb3RlIDxmaWxlcz5cdLHgvK0gVmltILf+zvHG98nPtcTOxLz+sqLNy7P2IgorCisjOiBtYWluLmM6MjI4OAorbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcz4gIEFzIC0tcmVtb3RlIGJ1dCB3YWl0IGZvciBmaWxlcyB0byBoYXZlIGJlZW4gZWRpdGVkIgorbXNnc3RyICItLXJlbW90ZS13YWl0IDxmaWxlcz4gtcjQp9PaIC0tcmVtb3RlLCC1q7vhtci68s7EvP7N6rPJseC8rSIKKworIzogbWFpbi5jOjIyODkKK21zZ2lkICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0U2VuZCA8a2V5cz4gdG8gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0y82z9iA8a2V5cz4gtb0gVmltILf+zvHG97Kizcuz9iIKKworIzogbWFpbi5jOjIyOTAKK21zZ2lkICItLXJlbW90ZS1leHByIDxleHByPlx0RXZhbHVhdGUgPGV4cHI+IGluIGEgVmltIHNlcnZlciBhbmQgcHJpbnQgcmVzdWx0IgorbXNnc3RyICItLXJlbW90ZS1leHByIDxleHByPlx01Nq3/s7xxvfJz8fzse2078q9tcTWtbKitPLTob3hufsiCisKKyM6IG1haW4uYzoyMjkxCittc2dpZCAiLS1zZXJ2ZXJsaXN0XHRcdExpc3QgYXZhaWxhYmxlIFZpbSBzZXJ2ZXIgbmFtZXMgYW5kIGV4aXQiCittc2dzdHIgIi0tc2VydmVybGlzdFx0XHTB0LP2v8nTw7XEIFZpbSC3/s7xxvfD+7PGsqLNy7P2IgorCisjOiBtYWluLmM6MjI5MgorbXNnaWQgIi0tc2VydmVybmFtZSA8bmFtZT5cdFNlbmQgdG8vYmVjb21lIHRoZSBWaW0gc2VydmVyIDxuYW1lPiIKK21zZ3N0ciAiLS1zZXJ2ZXJuYW1lIDxuYW1lPlx0y83WwS+zyc6qIFZpbSC3/s7xxvcgPG5hbWU+IgorCisjOiBtYWluLmM6MjI5NQorbXNnaWQgIi1pIDx2aW1pbmZvPlx0XHRVc2UgPHZpbWluZm8+IGluc3RlYWQgb2YgLnZpbWluZm8iCittc2dzdHIgIi1pIDx2aW1pbmZvPlx0XHTKudPDIDx2aW1pbmZvPiC2+LfHIC52aW1pbmZvIgorCisjOiBtYWluLmM6MjI5NworbXNnaWQgIi1oXHRcdFx0cHJpbnQgSGVscCAodGhpcyBtZXNzYWdlKSBhbmQgZXhpdCIKK21zZ3N0ciAiLWhcdFx0XHS08tOhy7XD9yjSsr7NysexvtDFz6IpuvPNy7P2IgorCisjOiBtYWluLmM6MjI5OAorbXNnaWQgIi0tdmVyc2lvblx0XHRwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IgorbXNnc3RyICItLXZlcnNpb25cdFx0tPLTobDmsb7Qxc+iuvPNy7P2IgorCisjOiBtYWluLmM6MjMwMgorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChNb3RpZiB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW0gv8nKtrHwtcSyzsr9IChNb3RpZiCw5ik6XG4iCisKKyM6IG1haW4uYzoyMzA1Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEF0aGVuYSB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW0gv8nKtrHwtcSyzsr9IChBdGhlbmEgsOYpOlxuIgorCisjOiBtYWluLmM6MjMwOAorbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4iCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx01Nq0sL/aIDxkaXNwbGF5PiDWtNDQIHZpbSIKKworIzogbWFpbi5jOjIzMDkKK21zZ2lkICItaWNvbmljXHRcdFN0YXJ0IHZpbSBpY29uaWZpZWQiCittc2dzdHIgIi1pY29uaWNcdFx0xvS2r7rz1+7QobuvKGljb25pZmllZCkiCisKKyM6IG1haW4uYzoyMzExCittc2dpZCAiLW5hbWUgPG5hbWU+XHRcdFVzZSByZXNvdXJjZSBhcyBpZiB2aW0gd2FzIDxuYW1lPiIKK21zZ3N0ciAiLW5hbWUgPG5hbWU+XHRcdLbByKEgUmVzb3VyY2UgyrGw0SB2aW0gtcTD+7PGytPOqiA8bmFtZT4iCisKKyM6IG1haW4uYzoyMzEyCittc2dpZCAiXHRcdFx0ICAoVW5pbXBsZW1lbnRlZClcbiIKK21zZ3N0ciAiXHRcdFx0ICAoydDOtMq1z9YpXG4iCisKKyM6IG1haW4uYzoyMzE0Cittc2dpZCAiLWJhY2tncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIHRoZSBiYWNrZ3JvdW5kIChhbHNvOiAtYmcpIgorbXNnc3RyICItYmFja2dyb3VuZCA8Y29sb3I+XHTJ6LaoIDxjb2xvcj4gzqqxs76wyasgKNKyv8nTwyAtYmcpIgorCisjOiBtYWluLmM6MjMxNQorbXNnaWQgIi1mb3JlZ3JvdW5kIDxjb2xvcj5cdFVzZSA8Y29sb3I+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZnKSIKK21zZ3N0ciAiLWZvcmVncm91bmQgPGNvbG9yPlx0yei2qCA8Y29sb3I+IM6q0ruw487E19bR1cmrICjSsr/J08MgLWZnKSIKKworIzogbWFpbi5jOjIzMTYgbWFpbi5jOjIzMzYKK21zZ2lkICItZm9udCA8Zm9udD5cdFx0VXNlIDxmb250PiBmb3Igbm9ybWFsIHRleHQgKGFsc286IC1mbikiCittc2dzdHIgIi1mb250IDxmb250Plx0yrnTwyA8Zm9udD4gzqrSu7Dj19bM5SAo0rK/ydPDIC1mbikiCisKKyM6IG1haW4uYzoyMzE3Cittc2dpZCAiLWJvbGRmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgYm9sZCB0ZXh0IgorbXNnc3RyICItYm9sZGZvbnQgPGZvbnQ+XHTKudPDIDxmb250PiDOqrTWzOXX1szlIgorCisjOiBtYWluLmM6MjMxOAorbXNnaWQgIi1pdGFsaWNmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgaXRhbGljIHRleHQiCittc2dzdHIgIi1pdGFsaWNmb250IDxmb250Plx0yrnTwyA8Zm9udD4gzqrQsczl19bM5SIKKworIzogbWFpbi5jOjIzMTkgbWFpbi5jOjIzMzcKK21zZ2lkICItZ2VvbWV0cnkgPGdlb20+XHRVc2UgPGdlb20+IGZvciBpbml0aWFsIGdlb21ldHJ5IChhbHNvOiAtZ2VvbSkiCittc2dzdHIgIi1nZW9tZXRyeSA8Z2VvbT5cdMq508M8Z2VvbT7OqrP1yrzOu9bDICjSsr/J08MgLWdlb20pIgorCisjOiBtYWluLmM6MjMyMAorbXNnaWQgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHRVc2UgYSBib3JkZXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLWJ3KSIKK21zZ3N0ciAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdMq508O/7bbIzqogPHdpZHRoPiC1xLHfv/IgKNKyv8nTwyAtYncpIgorCisjOiBtYWluLmM6MjMyMQorbXNnaWQgIi1zY3JvbGxiYXJ3aWR0aCA8d2lkdGg+ICBVc2UgYSBzY3JvbGxiYXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLXN3KSIKK21zZ3N0ciAiLXNjcm9sbGJhcndpZHRoIDx3aWR0aD4gyei2qLn2tq/M9b/ttsjOqiA8d2lkdGg+ICjSsr/J08MgLXN3KSIKKworIzogbWFpbi5jOjIzMjMKK21zZ2lkICItbWVudWhlaWdodCA8aGVpZ2h0Plx0VXNlIGEgbWVudSBiYXIgaGVpZ2h0IG9mIDxoZWlnaHQ+IChhbHNvOiAtbWgpIgorbXNnc3RyICItbWVudWhlaWdodCA8aGVpZ2h0Plx0yei2qLLLtaXB0LXEuN+2yM6qIDxoZWlnaHQ+ICjSsr/J08MgLW1oKSIKKworIzogbWFpbi5jOjIzMjUgbWFpbi5jOjIzMzgKK21zZ2lkICItcmV2ZXJzZVx0XHRVc2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogLXJ2KSIKK21zZ3N0ciAiLXJldmVyc2VcdFx0yrnTw7e0z9QgKNKyv8nTwyAtcnYpIgorCisjOiBtYWluLmM6MjMyNgorbXNnaWQgIityZXZlcnNlXHRcdERvbid0IHVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiArcnYpIgorbXNnc3RyICIrcmV2ZXJzZVx0XHSyu8q508O3tM/UICjSsr/J08MgK3J2KSIKKworIzogbWFpbi5jOjIzMjcKK21zZ2lkICIteHJtIDxyZXNvdXJjZT5cdFNldCB0aGUgc3BlY2lmaWVkIHJlc291cmNlIgorbXNnc3RyICIteHJtIDxyZXNvdXJjZT5cdMnotqjWuLaotcTXytS0IgorCisjOiBtYWluLmM6MjMzMAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChSSVNDIE9TIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbSC/ycq2sfC1xLLOyv0gKFJJU0MgT1MgsOYpOlxuIgorCisjOiBtYWluLmM6MjMzMQorbXNnaWQgIi0tY29sdW1ucyA8bnVtYmVyPlx0SW5pdGlhbCB3aWR0aCBvZiB3aW5kb3cgaW4gY29sdW1ucyIKK21zZ3N0ciAiLS1jb2x1bW5zIDxudW1iZXI+XHS0sL/as/XKvL/ttsgiCisKKyM6IG1haW4uYzoyMzMyCittc2dpZCAiLS1yb3dzIDxudW1iZXI+XHRJbml0aWFsIGhlaWdodCBvZiB3aW5kb3cgaW4gcm93cyIKK21zZ3N0ciAiLS1yb3dzIDxudW1iZXI+XHS0sL/as/XKvLjftsgiCisKKyM6IG1haW4uYzoyMzM1Cittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEdUSysgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJndmltIL/Jyrax8LXEss7K/SAoR1RLKyCw5ik6XG4iCisKKyM6IG1haW4uYzoyMzM5Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiAoYWxzbzogLS1kaXNwbGF5KSIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHTU2iA8ZGlzcGxheT4g1rTQ0CB2aW0gKNKyv8nTwyAtLWRpc3BsYXkpIgorCisjOiBtYWluLmM6MjM0MQorbXNnaWQgIi0taGVscFx0XHRTaG93IEdub21lIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1oZWxwXHRcdM/Uyr4gR25vbWUgz+C52LLOyv0iCisKKyMuIEZhaWxlZCB0byBzZW5kLCBhYm9ydC4KKyM6IG1haW4uYzoyNTY2Cittc2dpZCAiIgorIlxuIgorIlNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisit6LLzbHttO/KvcqnsNyho1xuIgorCisjLiBMZXQgdmltIHN0YXJ0IG5vcm1hbGx5LgorIzogbWFpbi5jOjI1NzEKK21zZ2lkICIiCisiXG4iCisiU2VuZCBmYWlsZWQuIFRyeWluZyB0byBleGVjdXRlIGxvY2FsbHlcbiIKK21zZ3N0ciAiIgorIlxuIgorIsvNs/bKp7DcoaPK1M281NqxvrXY1rTQ0FxuIgorCisjOiBtYWluLmM6MjYwNCBtYWluLmM6MjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBvZiAlZCBlZGl0ZWQiCittc2dzdHIgIiVkINbQICVkINLRseC8rSIKKworIzogbWFpbi5jOjI2NDgKK21zZ2lkICJTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICK3osvNse2078q9yqew3KGjXG4iCisKKyM6IG1hcmsuYzo2NTUKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIsO709DJ6Laoseq8xyAobWFyaykiCisKKyM6IG1hcmsuYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MzogTm8gbWFya3MgbWF0Y2hpbmcgXCIlc1wiIgorbXNnc3RyICJFMjgzOiDV0rK7tb23+7rPIFwiJXNcIiC1xLHqvMcobWFyaykiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjY2OAorbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyKx6rzHINDQusUgIMHQICDOxLz+L87Esb4iCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjcwNgorbXNnaWQgIiIKKyJcbiIKKyIganVtcCBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiIMz4tb0g0NC6xSAgwdAgIM7EvP4vzsSxviIKKworIzogbWFyay5jOjEwNjgKK21zZ2lkICIiCisiXG4iCisiIyBGaWxlIG1hcmtzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDOxLz+seq8xzpcbiIKKworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMTAzCittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIEp1bXBsaXN0ICi009DCtb2+ySk6XG4iCisKKyM6IG1hcmsuYzoxMTk4Cittc2dpZCAiIgorIlxuIgorIiMgSGlzdG9yeSBvZiBtYXJrcyB3aXRoaW4gZmlsZXMgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDOxLz+xNrA+sq3vMfCvCAotNPQwrW9vskpOlxuIgorCisjOiBtYXJrLmM6MTI4MQorbXNnaWQgIk1pc3NpbmcgJz4nIgorbXNnc3RyICLIscnZttTTprXEICc+JyIKKworIzogbWJ5dGUuYzozOTUKK21zZ2lkICJOb3QgYSB2YWxpZCBjb2RlcGFnZSIKK21zZ3N0ciAisrvV/ci3tcS0+sLr0rMiCisKKyM6IG1ieXRlLmM6MzAwNQorbXNnaWQgIkUyODQ6IENhbm5vdCBzZXQgSUMgdmFsdWVzIgorbXNnc3RyICJFMjg0OiCyu8Tcyei2qCBJQyDK/da1IgorCisjOiBtYnl0ZS5jOjMxNTcKK21zZ2lkICJFMjg1OiBGYWlsZWQgdG8gY3JlYXRlIGlucHV0IGNvbnRleHQiCittc2dzdHIgIkUyODU6ILK7xNy0tL2oyuTI68nPz8LOxCIKKworIzogbWJ5dGUuYzozMzA0Cittc2dpZCAiRTI4NjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgbWV0aG9kIgorbXNnc3RyICJFMjg2OiCyu8TctPK/qsrkyOu3qCIKKworIzogbWJ5dGUuYzozMzE1Cittc2dpZCAiRTI4NzogV2FybmluZzogQ291bGQgbm90IHNldCBkZXN0cm95IGNhbGxiYWNrIHRvIElNIgorbXNnc3RyICJFMjg3OiC+r7jmOiCyu8Tc0saz/SBJTSC1xCBjYWxsYmFjayIKKworIzogbWJ5dGUuYzozMzIxCittc2dpZCAiRTI4ODogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgc3R5bGUiCittc2dzdHIgIkUyODg6IMrkyOu3qLK71qez1sjOus4gc3R5bGUiCisKKyM6IG1ieXRlLmM6MzM3OAorbXNnaWQgIkUyODk6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgbXkgcHJlZWRpdCB0eXBlIgorbXNnc3RyICJFMjg5OiDK5Mjrt6iyu9ans9bIzrrOIHN0eWxlIgorCisjOiBtYnl0ZS5jOjM0NTIKK21zZ2lkICJFMjkwOiBvdmVyLXRoZS1zcG90IHN0eWxlIHJlcXVpcmVzIGZvbnRzZXQiCittc2dzdHIgIkUyOTA6IG92ZXItdGhlLXNwb3Qg0OjSqtfWzOW8ryhGb250c2V0KSIKKworIzogbWJ5dGUuYzozNDgwCittc2dpZCAiRTI5MTogWW91ciBHVEsrIGlzIG9sZGVyIHRoYW4gMS4yLjMuIFN0YXR1cyBhcmVhIGRpc2FibGVkIgorbXNnc3RyICJFMjkxOiDE47XEIEdUSysgscggMS4yLjMgwM+ho7K7xNzKudPD17TMrMf4oaMiCisKKyM6IG1ieXRlLmM6MzcxNworbXNnaWQgIkUyOTI6IElucHV0IE1ldGhvZCBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmciCittc2dzdHIgIkUyOTI6IMrkyOu3qLncwO2zzNDyKElucHV0IE1ldGhvZCBTZXJ2ZXIpzrTUy9DQIgorCisjOiBtZW1maWxlLmM6NDczCittc2dpZCAiRTI5MzogYmxvY2sgd2FzIG5vdCBsb2NrZWQiCittc2dzdHIgIkUyOTM6IL/pzrSxu8v4tqgiCisKKyM6IG1lbWZpbGUuYzo5NzIKK21zZ2lkICJFMjk0OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSByZWFkIgorbXNnc3RyICJFMjk0OiC9u7u7zsS8/rbByKG07c7zIgorCisjOiBtZW1maWxlLmM6OTc3Cittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IL27u7vOxLz+tsHIobTtzvMiCisKKyM6IG1lbWZpbGUuYzoxMDI5Cittc2dpZCAiRTI5NjogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgd3JpdGUiCittc2dzdHIgIkUyOTY6IL27u7vOxLz+0LTI67TtzvMiCisKKyM6IG1lbWZpbGUuYzoxMDQ3Cittc2dpZCAiRTI5NzogV3JpdGUgZXJyb3IgaW4gc3dhcCBmaWxlIgorbXNnc3RyICJFMjk3OiC9u7u7zsS8/tC0yOu07c7zIgorCisjOiBtZW1maWxlLmM6MTI0NAorbXNnaWQgIkUzMDA6IFN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyAoc3ltbGluayBhdHRhY2s/KSIKK21zZ3N0ciAiRTMwMDogvbu7u87EvP7S0b6ttObU2iEgKNCh0MS3+7rFway94bXEsLLIq8KptrQhPykiCisKKyM6IG1lbWxpbmUuYzoyNzUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDA/IgorbXNnc3RyICJFMjk4OiDV0rK7tb2/6SAwPyIKKworIzogbWVtbGluZS5jOjMxNQorbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMT8iCittc2dzdHIgIkUyOTg6INXSsru1vb/pIDE/IgorCisjOiBtZW1saW5lLmM6MzMzCittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAyPyIKK21zZ3N0ciAiRTI5ODog1dKyu7W9v+kgMj8iCisKKyMuIGNvdWxkIG5vdCAocmUpb3BlbiB0aGUgc3dhcCBmaWxlLCB3aGF0IGNhbiB3ZSBkbz8/Pz8KKyM6IG1lbWxpbmUuYzo0NDMKK21zZ2lkICJFMzAxOiBPb3BzLCBsb3N0IHRoZSBzd2FwIGZpbGUhISEiCittc2dzdHIgIkUzMDE6IODe4N4sIL27u7vOxLz+sru8+8HLISEhIgorCisjOiBtZW1saW5lLmM6NDQ4Cittc2dpZCAiRTMwMjogQ291bGQgbm90IHJlbmFtZSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDI6ILK7xNy4xLHkvbu7u87EvP61xMP7s8YiCisKKyM6IG1lbWxpbmUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwMzogVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciBcIiVzXCIsIHJlY292ZXJ5IGltcG9zc2libGUiCittc2dzdHIgIkUzMDM6ILK7xNy08r+qvbu7u87EvP4gXCIlc1wiLCCyu7/JxNy71ri0wcsiCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiBtbF90aW1lc3RhbXA6INXSsru1vb/pIDA/PyIKKworIzogbWVtbGluZS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA1OiBObyBzd2FwIGZpbGUgZm91bmQgZm9yICVzIgorbXNnc3RyICJFMzA1OiDV0rK7tb0gJXMgtcS9u7u7zsS8/iIKKworIzogbWVtbGluZS5jOjc2NworbXNnaWQgIkVudGVyIG51bWJlciBvZiBzd2FwIGZpbGUgdG8gdXNlICgwIHRvIHF1aXQpOiAiCittc2dzdHIgIsfr0aHU8cTj0qrKudPDtcS9u7u7zsS8/iAosLQwIM3Ls/YpOiAiCisKKyM6IG1lbWxpbmUuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwNjogQ2Fubm90IG9wZW4gJXMiCittc2dzdHIgIkUzMDY6ILK7xNy08r+qICVzIgorCisjOiBtZW1saW5lLmM6ODM0Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgYmxvY2sgMCBmcm9tICIKK21zZ3N0ciAisrvE3LbByKG/6SAwOiIKKworIzogbWVtbGluZS5jOjgzNworbXNnaWQgIiIKKyJcbiIKKyJNYXliZSBubyBjaGFuZ2VzIHdlcmUgbWFkZSBvciBWaW0gZGlkIG5vdCB1cGRhdGUgdGhlIHN3YXAgZmlsZS4iCittc2dzdHIgIiIKKyJcbiIKKyK/ycTcxOPDu9f2uf3IzrrO0N64xLvyyscgVmltILu5wLSyu7ywuPzQwr27u7vOxLz+LiIKKworIzogbWVtbGluZS5jOjg0NyBtZW1saW5lLmM6ODY0Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiILK7xNzU2rG+sOaxvrXEIFZpbSDW0Mq508MuXG4iCisKKyM6IG1lbWxpbmUuYzo4NDkKK21zZ2lkICJVc2UgVmltIHZlcnNpb24gMy4wLlxuIgorbXNnc3RyICLKudPDIFZpbSAzLjCho1xuIgorCisjOiBtZW1saW5lLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDc6ICVzIL+0xvDAtLK7z/HKxyBWaW0gvbu7u87EvP4iCisKKyM6IG1lbWxpbmUuYzo4NjgKK21zZ2lkICIgY2Fubm90IGJlIHVzZWQgb24gdGhpcyBjb21wdXRlci5cbiIKK21zZ3N0ciAiILK7xNzU2tXizKi158TUyc/KudPDLlxuIgorCisjOiBtZW1saW5lLmM6ODcwCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICKxvs7EvP60tL2o09ogIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyK78srH1eLOxLz+0tGxu8bGu7WhoyIKKworIzogbWVtbGluZS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIgorbXNnc3RyICLKudPDvbu7u87EvP4gXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9yaWdpbmFsIGZpbGUgXCIlc1wiIgorbXNnc3RyICLUrc7EvP4gXCIlc1wiIgorCisjOiBtZW1saW5lLmM6OTM0Cittc2dpZCAiRTMwODogV2FybmluZzogT3JpZ2luYWwgZmlsZSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQiCittc2dzdHIgIkUzMDg6IL6vuOY6INStyrzOxLz+v8nE3NLRvq3Q3rjEuf3ByyIKKworIzogbWVtbGluZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6ILK7xNy00yAlcyC2wcihv+kgMSIKKworIzogbWVtbGluZS5jOjk3OQorbXNnaWQgIj8/P01BTlkgTElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/yLHJ2cyrtuDQ0CIKKworIzogbWVtbGluZS5jOjk5NQorbXNnaWQgIj8/P0xJTkUgQ09VTlQgV1JPTkciCittc2dzdHIgIj8/P9DQusW07c7zIgorCisjOiBtZW1saW5lLmM6MTAwMgorbXNnaWQgIj8/P0VNUFRZIEJMT0NLIgorbXNnc3RyICI/Pz+/1bXEIL/pIgorCisjOiBtZW1saW5lLmM6MTAyOAorbXNnaWQgIj8/P0xJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P9XSsru1vdK70KnQ0CIKKworIzogbWVtbGluZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxMDogQmxvY2sgMSBJRCB3cm9uZyAoJXMgbm90IGEgLnN3cCBmaWxlPykiCittc2dzdHIgIkUzMTA6IL/pIDEgSUQgtO3O8yAoJXMgsrvKx727u7vOxLz+PykiCisKKyM6IG1lbWxpbmUuYzoxMDY1Cittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/1dKyu7W9v+kiCisKKyM6IG1lbWxpbmUuYzoxMDgxCittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGJlIG1lc3NlZCB1cCIKK21zZ3N0ciAiPz8/ILTT1eLA77W9ID8/P0VORCC1xMTayN2/ycTc09DOysziIgorCisjOiBtZW1saW5lLmM6MTA5NworbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBoYXZlIGJlZW4gaW5zZXJ0ZWQvZGVsZXRlZCIKK21zZ3N0ciAiPz8/ILTT1eLA77W9ID8/P0VORCC1xMTayN2/ycTcsbvJvrP9L7LlyOu5/SIKKworIzogbWVtbGluZS5jOjExMTcKK21zZ2lkICI/Pz9FTkQiCittc2dzdHIgIj8/P0VORCIKKworIzogbWVtbGluZS5jOjExNDMKK21zZ2lkICJFMzExOiBSZWNvdmVyeSBJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiRTMxMTogu9a4tNLR1tC2zyIKKworIzogbWVtbGluZS5jOjExNDUKK21zZ2lkICIiCisiRTMxMjogRXJyb3JzIGRldGVjdGVkIHdoaWxlIHJlY292ZXJpbmc7IGxvb2sgZm9yIGxpbmVzIHN0YXJ0aW5nIHdpdGggPz8/IgorbXNnc3RyICJFMzEyOiC71ri0yrG3osn6tO3O8zsgx+vXotLiv6rNt86qID8/PyC1xNDQIgorCisjOiBtZW1saW5lLmM6MTE0OAorbXNnaWQgIlJlY292ZXJ5IGNvbXBsZXRlZC4gWW91IHNob3VsZCBjaGVjayBpZiBldmVyeXRoaW5nIGlzIE9LLiIKK21zZ3N0ciAiu9a4tM3qs8kuIMfryLe2qNK7x9DV/bOjLiIKKworIzogbWVtbGluZS5jOjExNDkKK21zZ2lkICIiCisiXG4iCisiKFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIG91dCB0aGlzIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoxOO/ycTcz+vSqrDR1eK49s7EvP7B7bTmzqqx8LXEzsS8/sP7o6xcbiIKKworIzogbWVtbGluZS5jOjExNTAKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAi1NnWtNDQIGRpZmYg0+vUrc7EvP6xyL3P0tS87LLpyse38dPQuMSx5ClcbiIKKworIzogbWVtbGluZS5jOjExNTEKK21zZ2lkICIiCisiRGVsZXRlIHRoZSAuc3dwIGZpbGUgYWZ0ZXJ3YXJkcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIihEKdaxvdPJvrP9IC5zd3Agvbu7u87EvP5cbiIKKyJcbiIKKworIy4gdXNlIG1zZygpIHRvIHN0YXJ0IHRoZSBzY3JvbGxpbmcgcHJvcGVybHkKKyM6IG1lbWxpbmUuYzoxMjA3Cittc2dpZCAiU3dhcCBmaWxlcyBmb3VuZDoiCittc2dzdHIgItXStb3S1M/CtcS9u7u7zsS8/joiCisKKyM6IG1lbWxpbmUuYzoxMzg1Cittc2dpZCAiICAgSW4gY3VycmVudCBkaXJlY3Rvcnk6XG4iCittc2dzdHIgIiAgINTaxL/HsMS/wrw6XG4iCisKKyM6IG1lbWxpbmUuYzoxMzg3Cittc2dpZCAiICAgVXNpbmcgc3BlY2lmaWVkIG5hbWU6XG4iCittc2dzdHIgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorCisjOiBtZW1saW5lLmM6MTM5MQorbXNnaWQgIiAgIEluIGRpcmVjdG9yeSAiCittc2dzdHIgIiAgINTaxL/CvCAiCisKKyM6IG1lbWxpbmUuYzoxNDA5Cittc2dpZCAiICAgICAgLS0gbm9uZSAtLVxuIgorbXNnc3RyICIgICAgICAtLSDO3iAtLVxuIgorCisjOiBtZW1saW5lLmM6MTQ4MQorbXNnaWQgIiAgICAgICAgICBvd25lZCBieTogIgorbXNnc3RyICIgICAgICAgICAgICDL+dPQ1d86ICIKKworIzogbWVtbGluZS5jOjE0ODMKK21zZ2lkICIgICBkYXRlZDogIgorbXNnc3RyICIgICAgyNXG2jogIgorCisjOiBtZW1saW5lLmM6MTQ4NyBtZW1saW5lLmM6MzY4MAorbXNnaWQgIiAgICAgICAgICAgICBkYXRlZDogIgorbXNnc3RyICIgICAgICAgICAgICAgIMjVxto6ICIKKworIzogbWVtbGluZS5jOjE1MDMKK21zZ2lkICIgICAgICAgICBbZnJvbSBWaW0gdmVyc2lvbiAzLjBdIgorbXNnc3RyICIgICAgICAgICAgICAgIFu00yBWaW0gsOaxviAzLjBdIgorCisjOiBtZW1saW5lLmM6MTUwNworbXNnaWQgIiAgICAgICAgIFtkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlXSIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgICBbsrvP8SBWaW0gtcS9u7u7zsS8/l0iCisKKyM6IG1lbWxpbmUuYzoxNTExCittc2dpZCAiICAgICAgICAgZmlsZSBuYW1lOiAiCittc2dzdHIgIiAgICAgICAgICAgICAgzsS8/sP7OiAiCisKKyM6IG1lbWxpbmUuYzoxNTIzCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgICBtb2RpZmllZDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgICAg0N64xLn9OiAiCisKKyM6IG1lbWxpbmUuYzoxNTI0Cittc2dpZCAiWUVTIgorbXNnc3RyICLKxyIKKworIzogbWVtbGluZS5jOjE1MjQKK21zZ2lkICJubyIKK21zZ3N0ciAit/EiCisKKyM6IG1lbWxpbmUuYzoxNTI4Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIHVzZXIgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgICAg08O7p8P7OiAiCisKKyM6IG1lbWxpbmUuYzoxNTM1Cittc2dpZCAiICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIiAgICAgINb3u/rD+zogIgorCisjOiBtZW1saW5lLmM6MTUzNworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICAgINb3u/rD+zogIgorCisjOiBtZW1saW5lLmM6MTU0MworbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICAgvfizzCBJRDogIgorCisjOiBtZW1saW5lLmM6MTU0OQorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAo1f3U2ta00NApIgorCisjOiBtZW1saW5lLmM6MTU2MQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaW1dIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgW7K7xNzU2rG+sOaxvrXEIFZpbSDJz8q508NdIgorCisjOiBtZW1saW5lLmM6MTU2NAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBbbm90IHVzYWJsZSBvbiB0aGlzIGNvbXB1dGVyXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFuyu8Tc1Nqxvrv6yc/KudPDXSIKKworIzogbWVtbGluZS5jOjE1NjkKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIHJlYWRdIgorbXNnc3RyICIgICAgICAgICBbsrvE3LbByKFdIgorCisjOiBtZW1saW5lLmM6MTU3MworbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgb3BlbmVkXSIKK21zZ3N0ciAiICAgICAgICAgW7K7xNy08r+qXSIKKworIzogbWVtbGluZS5jOjE3NjMKK21zZ2lkICJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMxMzogsrvE3LGjwfQsILK7yrnTw727u7vOxLz+IgorCisjOiBtZW1saW5lLmM6MTgxNgorbXNnaWQgIkZpbGUgcHJlc2VydmVkIgorbXNnc3RyICLOxLz+0tGxo8H0IgorCisjOiBtZW1saW5lLmM6MTgxOAorbXNnaWQgIkUzMTQ6IFByZXNlcnZlIGZhaWxlZCIKK21zZ3N0ciAiRTMxNDogsaPB9MqnsNwiCisKKyM6IG1lbWxpbmUuYzoxODg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTU6IG1sX2dldDogaW52YWxpZCBsbnVtOiAlbGQiCittc2dzdHIgIkUzMTU6IG1sX2dldDogtO3O87XEIGxudW06ICVsZCIKKworIzogbWVtbGluZS5jOjE5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNjogbWxfZ2V0OiBjYW5ub3QgZmluZCBsaW5lICVsZCIKK21zZ3N0ciAiRTMxNjogbWxfZ2V0OiDV0rK7tb212iAlbGQg0NAiCisKKyM6IG1lbWxpbmUuYzoyMzAzCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyAzIgorbXNnc3RyICJFMzE3OiDWuNXrv+kgaWQgtO3O8yAzIgorCisjOiBtZW1saW5lLmM6MjM4MworbXNnaWQgInN0YWNrX2lkeCBzaG91bGQgYmUgMCIKK21zZ3N0ciAic3RhY2tfaWR4INOmuMPKxyAwIgorCisjOiBtZW1saW5lLmM6MjQ0NQorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODoguPzQwsyrtuC/6T8iCisKKyM6IG1lbWxpbmUuYzoyNjAyCittc2dpZCAiRTMxNzogcG9pbnRlciBibG9jayBpZCB3cm9uZyA0IgorbXNnc3RyICJFMzE3OiDWuNXrv+kgaWQgtO3O8yA0IgorCisjOiBtZW1saW5lLmM6MjYyOQorbXNnaWQgImRlbGV0ZWQgYmxvY2sgMT8iCittc2dzdHIgIsm+s/2/6SAxPyIKKworIzogbWVtbGluZS5jOjI4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6INXSsru1vbXaICVsZCDQ0CIKKworIzogbWVtbGluZS5jOjMwNzIKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIgorbXNnc3RyICJFMzE3OiDWuNXrv+kgaWQgtO3O8yIKKworIzogbWVtbGluZS5jOjMwODgKK21zZ2lkICJwZV9saW5lX2NvdW50IGlzIHplcm8iCittc2dzdHIgInBlX2xpbmVfY291bnQgzqrB4yIKKworIzogbWVtbGluZS5jOjMxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMjogbGluZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlbGQgcGFzdCB0aGUgZW5kIgorbXNnc3RyICJFMzIyOiDQ0LrFs6yz9re2zqc6ICVsZCCzrLn9veHOsiIKKworIzogbWVtbGluZS5jOjMxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMzogbGluZSBjb3VudCB3cm9uZyBpbiBibG9jayAlbGQiCittc2dzdHIgIkUzMjM6IL/pICVsZCDQ0Mr9tO3O8yIKKworIzogbWVtbGluZS5jOjMxNzAKK21zZ2lkICJTdGFjayBzaXplIGluY3JlYXNlcyIKK21zZ3N0ciAittHVu7Tz0KHU9rzTIgorCisjOiBtZW1saW5lLmM6MzIxNgorbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMiIKK21zZ3N0ciAiRTMxNzog1rjV67/pIGlkILTtIDIiCisKKyM6IG1lbWxpbmUuYzozNjcwCittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiDXotLiIgorCisjOiBtZW1saW5lLmM6MzY3MQorbXNnaWQgIiIKKyJcbiIKKyJGb3VuZCBhIHN3YXAgZmlsZSBieSB0aGUgbmFtZSBcIiIKK21zZ3N0ciAiIgorIlxuIgorIreiz9a9u7u7zsS8/iBcIiIKKworIzogbWVtbGluZS5jOjM2NzUKK21zZ2lkICJXaGlsZSBvcGVuaW5nIGZpbGUgXCIiCittc2dzdHIgIrWxtPK/qs7EvP7KsSBcIiIKKworIzogbWVtbGluZS5jOjM2ODQKK21zZ2lkICIgICAgICBORVdFUiB0aGFuIHN3YXAgZmlsZSFcbiIKK21zZ3N0ciAiICAgICAgsci9u7u7zsS8/tDCIVxuIgorCisjLiBTb21lIG9mIHRoZXNlIG1lc3NhZ2VzIGFyZSBsb25nIHRvIGFsbG93IHRyYW5zbGF0aW9uIHRvCisjLiAqIG90aGVyIGxhbmd1YWdlcy4KKyM6IG1lbWxpbmUuYzozNjg4Cittc2dpZCAiIgorIlxuIgorIigxKSBBbm90aGVyIHByb2dyYW0gbWF5IGJlIGVkaXRpbmcgdGhlIHNhbWUgZmlsZS5cbiIKKyIgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgYmUgY2FyZWZ1bCBub3QgdG8gZW5kIHVwIHdpdGggdHdvXG4iCisiICAgIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZmlsZSB3aGVuIG1ha2luZyBjaGFuZ2VzLlxuIgorbXNnc3RyICIiCisiXG4iCisiKDEpIL/JxNzT0MHt0ru49rPM0PLSstTaseC8rc2s0ru49s7EvP4uXG4iCisiICAgIMjnufvKx9Xi0fmjrMfr16LS4rK70qrSu8bw0LTI66OssrvIu8TjtcTFrMGmtry74bi21u62q8H3oaNcbiIKKworIzogbWVtbGluZS5jOjM2ODkKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgzcuz9qOsu/LKx7zM0Pix4LytoaNcbiIKKworIzogbWVtbGluZS5jOjM2OTAKK21zZ2lkICIiCisiXG4iCisiKDIpIEFuIGVkaXQgc2Vzc2lvbiBmb3IgdGhpcyBmaWxlIGNyYXNoZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMikgyc/Su7TOseC8rbTLzsS8/sqxscDAo1xuIgorCisjOiBtZW1saW5lLmM6MzY5MQorbXNnaWQgIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgXCI6cmVjb3ZlclwiIG9yIFwidmltIC1yICIKK21zZ3N0ciAiICAgIMjnufvKx9Xi0fksIMfr08MgXCI6cmVjb3ZlclwiILvyIFwidmltIC1yIgorCisjOiBtZW1saW5lLmM6MzY5MworbXNnaWQgIiIKKyJcIlxuIgorIiAgICB0byByZWNvdmVyIHRoZSBjaGFuZ2VzIChzZWUgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgILvWuLTQ3rjExNrI3SAovfjSu7K9y7XD98frv7QgXCI6aGVscCByZWNvdmVyeVwiKS5cbiIKKworIzogbWVtbGluZS5jOjM2OTQKK21zZ2lkICIgICAgSWYgeW91IGRpZCB0aGlzIGFscmVhZHksIGRlbGV0ZSB0aGUgc3dhcCBmaWxlIFwiIgorbXNnc3RyICIgICAgyOe5+7jDu9a4tLXEtrzS0b6tu9a4tMHLLCDH69axvdPJvrP9tMu9u7u7zsS8/iBcIiIKKworIzogbWVtbGluZS5jOjM2OTYKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAg0tSx3MPi1Nm/tLW9tMvQxc+iLlxuIgorCisjOiBtZW1saW5lLmM6MzcxMCBtZW1saW5lLmM6MzcxNAorbXNnaWQgIlN3YXAgZmlsZSBcIiIKK21zZ3N0ciAivbu7u87EvP4gXCIiCisKKyM6IG1lbWxpbmUuYzozNzExIG1lbWxpbmUuYzozNzE3Cittc2dpZCAiXCIgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICJcIiDS0b6ttObU2sHLISIKKworIzogbWVtbGluZS5jOjM3MjAKK21zZ2lkICJWSU0gLSBBVFRFTlRJT04iCittc2dzdHIgIlZJTSAtINei0uIiCisKKyM6IG1lbWxpbmUuYzozNzIyCittc2dpZCAiU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAivbu7u87EvP7S0b6ttObU2iEiCisKKyM6IG1lbWxpbmUuYzozNzI2Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXQiCittc2dzdHIgIiIKKyLS1Na7tsG3vcq9tPK/qigmTylcbiIKKyLWsb3TseC8rSgmRSlcbiIKKyK71ri0KCZSKVxuIgorIs3Ls/YoJlEpIgorCisjOiBtZW1saW5lLmM6MzcyOAorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0XG4iCisiJkRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorItLU1ru2wbe9yr208r+qKCZPKVxuIgorItaxvdOx4LytKCZFKVxuIgorIrvWuLQoJlIpXG4iCisizcuz9igmUSlcbiIKKyLJvrP9vbu7u87EvP4oJkQpIgorCisjOiBtZW1saW5lLmM6Mzc4MQorbXNnaWQgIkUzMjY6IFRvbyBtYW55IHN3YXAgZmlsZXMgZm91bmQiCittc2dzdHIgIkUzMjY6INXStb3Mq7bgvbu7u87EvP4iCisKKyM6IG1lbnUuYzo2NAorbXNnaWQgIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51IgorbXNnc3RyICJFMzI3OiCyv7fdssu1pc/usrvKx9fTssu1pSIKKworIzogbWVudS5jOjY1Cittc2dpZCAiRTMyODogTWVudSBvbmx5IGV4aXN0cyBpbiBhbm90aGVyIG1vZGUiCittc2dzdHIgIkUzMjg6ILLLtaXWu8Tc1NrG5Mv8xKPKvdbQyrnTwyIKKworIzogbWVudS5jOjY2Cittc2dpZCAiRTMyOTogTm8gbWVudSBvZiB0aGF0IG5hbWUiCittc2dzdHIgIkUzMjk6IMO709DEx9H5tcSyy7WlIgorCisjOiBtZW51LmM6NTAzCittc2dpZCAiRTMzMDogTWVudSBwYXRoIG11c3Qgbm90IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzMDogssu1pbK7xNzWuM/y19PRobWlIgorCisjOiBtZW51LmM6NTQyCittc2dpZCAiRTMzMTogTXVzdCBub3QgYWRkIG1lbnUgaXRlbXMgZGlyZWN0bHkgdG8gbWVudSBiYXIiCittc2dzdHIgIkUzMzE6ILK7xNzWsb3TsNGyy7Wlz+6807W9ssu1pcz11tAiCisKKyM6IG1lbnUuYzo1NDgKK21zZ2lkICJFMzMyOiBTZXBhcmF0b3IgY2Fubm90IGJlIHBhcnQgb2YgYSBtZW51IHBhdGgiCittc2dzdHIgIkUzMzI6ILfWuPTP37K7xNzKx7LLtaW1xNK7sr+31iIKKworIy4gTm93IHdlIGhhdmUgZm91bmQgdGhlIG1hdGNoaW5nIG1lbnUsIGFuZCB3ZSBsaXN0IHRoZSBtYXBwaW5ncworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBtZW51LmM6MTA2MworbXNnaWQgIiIKKyJcbiIKKyItLS0gTWVudXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tILLLtaUgLS0tIgorCisjOiBtZW51LmM6MTk4OQorbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAix9DPwrTLssu1pSIKKworIzogbWVudS5jOjIwNTQKK21zZ2lkICJFMzMzOiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgbWVudSBpdGVtIgorbXNnc3RyICJFMzMzOiCyy7WlsdjQ6Na4z/LSu7j2ssu1pc/uIgorCisjOiBtZW51LmM6MjA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzM0OiBNZW51IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUzMzQ6IFuyy7WlXSDV0rK7tb0gJXMiCisKKyM6IG1lbnUuYzoyMTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzU6IE1lbnUgbm90IGRlZmluZWQgZm9yICVzIG1vZGUiCittc2dzdHIgIkUzMzU6ICVzIMSjyr3OtLao0uWyy7WlIgorCisjOiBtZW51LmM6MjE4MQorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogssu1pbHY0OjWuM/y19Oyy7WlIgorCisjOiBtZW51LmM6MjIwMgorbXNnaWQgIkUzMzc6IE1lbnUgbm90IGZvdW5kIC0gY2hlY2sgbWVudSBuYW1lcyIKK21zZ3N0ciAiRTMzNzog1dKyu7W9ssu1pSAtIMfrvOyy6bLLtaXD+7PGIgorCisjOiBtZXNzYWdlLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVjdGVkIHdoaWxlIHByb2Nlc3NpbmcgJXM6IgorbXNnc3RyICK0psDtICVzIMqxt6LJ+rTtzvM6IgorCisjOiBtZXNzYWdlLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJTRsZDoiCittc2dzdHIgItDQICU0bGQ6IgorCisjOiBtZXNzYWdlLmM6NTIzCittc2dpZCAiW3N0cmluZyB0b28gbG9uZ10iCittc2dzdHIgIlvX1rf7tK7Mq7OkXSIKKworIzogbWVzc2FnZS5jOjY2OQorbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgorbXNnc3RyICK88szl1tDOxNDFz6LOrLuk1d86IFdhbmcgSnVuIDxqdW53QHR1cmJvbGludXguY29tLmNuPiIKKworIzogbWVzc2FnZS5jOjg4MQorbXNnaWQgIkludGVycnVwdDogIgorbXNnc3RyICLS0dbQts86ICIKKworIzogbWVzc2FnZS5jOjg4NAorbXNnaWQgIkhpdCBFTlRFUiB0byBjb250aW51ZSIKK21zZ3N0ciAix+uwtCBFTlRFUiC8zND4IgorCisjOiBtZXNzYWdlLmM6ODg2Cittc2dpZCAiSGl0IEVOVEVSIG9yIHR5cGUgY29tbWFuZCB0byBjb250aW51ZSIKK21zZ3N0ciAix+uwtCBFTlRFUiC78sbky/zD/MHuvMzQ+CIKKworIzogbWVzc2FnZS5jOjE5NDAKK21zZ2lkICItLSBNb3JlIC0tIgorbXNnc3RyICItLSC4/LbgIC0tIgorCisjOiBtZXNzYWdlLmM6MTk0MworbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiDP8s/CL8/yyc/Su9DQLCC/1bjxL2I6INK70rMsIGQvdTogsOvSsywgcTogzcuz9ikiCisKKyM6IG1lc3NhZ2UuYzoxOTQ0Cittc2dpZCAiIChSRVQ6IGxpbmUsIFNQQUNFOiBwYWdlLCBkOiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVDogz/LPwtK70NAsIL/VsNe8/Dog0rvSsywgZDogsOvSsywgcTogzcuz9ikiCisKKyM6IG1lc3NhZ2UuYzoyNDE5IG1lc3NhZ2UuYzoyNDM0Cittc2dpZCAiUXVlc3Rpb24iCittc2dzdHIgIs7KzOIiCisKKyM6IG1lc3NhZ2UuYzoyNDIxCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm8iCittc2dzdHIgIiIKKyImWcrHXG4iCisiJk638SIKKworIzogbWVzc2FnZS5jOjI0MzYKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImWcrHXG4iCisiJk638VxuIgorIiZDyKHP+yIKKworIzogbWVzc2FnZS5jOjI0NTQKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIlNhdmUgJkFsbFxuIgorIiZEaXNjYXJkIEFsbFxuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImWcrHXG4iCisiJk638VxuIgorIiZByKuyv7GjtOZcbiIKKyImRMirsr+yu7TmXG4iCisiJkPIoc/7IgorCisjOiBtZXNzYWdlLmM6MjQ5NAorbXNnaWQgIlNhdmUgRmlsZSBkaWFsb2ciCittc2dzdHIgIrGjtObOxLz+ttS7sL/yIgorCisjOiBtZXNzYWdlLmM6MjQ5NgorbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIrTyv6rOxLz+ttS7sL/yIgorCisjLiBUT0RPOiBub24tR1VJIGZpbGUgc2VsZWN0b3IgaGVyZQorIzogbWVzc2FnZS5jOjI1NDcKK21zZ2lkICJFMzM4OiBTb3JyeSwgbm8gZmlsZSBicm93c2VyIGluIGNvbnNvbGUgbW9kZSIKK21zZ3N0ciAiRTMzODog1ve/2MyoKENvbnNvbGUpxKPKvcqxw7vT0M7EvP7kr8DAxvcoZmlsZSBicm93c2VyKSIKKworIzogbWlzYzEuYzoyNDQ5Cittc2dpZCAiVzEwOiBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiCittc2dzdHIgIlcxMDog16LS4jogxOPV/dTa0N64xNK7uPbWu7bBzsS8/iIKKworIzogbWlzYzEuYzoyNjc4Cittc2dpZCAiMSBtb3JlIGxpbmUiCittc2dzdHIgIru509DSu9DQIgorCisjOiBtaXNjMS5jOjI2ODAKK21zZ2lkICIxIGxpbmUgbGVzcyIKK21zZ3N0ciAiydnT2tK70NAiCisKKyM6IG1pc2MxLmM6MjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbW9yZSBsaW5lcyIKK21zZ3N0ciAiILu509AgJWxkINDQIgorCisjOiBtaXNjMS5jOjI2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGZld2VyIGxpbmVzIgorbXNnc3RyICLWu8qjICVsZCDQ0CIKKworIzogbWlzYzEuYzoyNjkwCittc2dpZCAiIChJbnRlcnJ1cHRlZCkiCittc2dzdHIgIiAo0tHW0LbPKSIKKworIzogbWlzYzEuYzo2MjQ0Cittc2dpZCAiVmltOiBwcmVzZXJ2aW5nIGZpbGVzLi4uXG4iCittc2dzdHIgIlZpbTogsaPB9M7EvP7W0C4uLlxuIgorCisjLiBjbG9zZSBhbGwgbWVtZmlsZXMsIHdpdGhvdXQgZGVsZXRpbmcKKyM6IG1pc2MxLmM6NjI1NAorbXNnaWQgIlZpbTogRmluaXNoZWQuXG4iCittc2dzdHIgIlZpbTogveHK+C5cbiIKKworIzogbWlzYzIuYzo2NDQgbWlzYzIuYzo2NjAKK21zZ2lkICJFUlJPUjogIgorbXNnc3RyICK07c7zOiAiCisKKyM6IG1pc2MyLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJbYnl0ZXNdIHRvdGFsIGFsbG9jLWZyZWVkICVsdS0lbHUsIGluIHVzZSAlbHUsIHBlYWsgdXNlICVsdVxuIgorbXNnc3RyICIiCisiXG4iCisiW2J5dGVzXSDIq7K/IGFsbG9jLWZyZWVkICVsdS0lbHUsIMq508PW0CAlbHUsIHBlYWsgyrnTwyAlbHVcbiIKKworIzogbWlzYzIuYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW7X308NdIMirsr8gcmUvbWFsbG9jKCk6ICVsdSwgyKuyvyBmcmVlKCknOiAlbHVcbiIKKyJcbiIKKworIzogbWlzYzIuYzo3MjEKK21zZ2lkICJFMzQwOiBMaW5lIGlzIGJlY29taW5nIHRvbyBsb25nIgorbXNnc3RyICJFMzQwOiC0y9DQuf2zpCIKKworIzogbWlzYzIuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MTogSW50ZXJuYWwgZXJyb3I6IGxhbGxvYyglbGQsICkiCittc2dzdHIgIkUzNDE6IMTasr+07c7zOiBsYWxsb2MoJWxkLCApIgorCisjOiBtaXNjMi5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzQyOiBPdXQgb2YgbWVtb3J5ISAgKGFsbG9jYXRpbmcgJWx1IGJ5dGVzKSIKK21zZ3N0ciAiRTM0MjogxNq05rK71+MhICizosrUxeTWwyAlbHUg19a92tfpKSIKKworIzogbWlzYzIuYzoyNTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbGxpbmcgc2hlbGwgdG8gZXhlY3V0ZTogXCIlc1wiIgorbXNnc3RyICK199PDIHNoZWxsINa00NA6IFwiJXNcIiIKKworIzogbWlzYzIuYzoyNzAzIG1pc2MyLmM6NTE0MiBvcHRpb24uYzo0NTg0Cittc2dpZCAiTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiyLHJ2cOwusUiCisKKyM6IG1pc2MyLmM6MjcwNSBtaXNjMi5jOjI3MzIKK21zZ2lkICJJbGxlZ2FsIG1vZGUiCittc2dzdHIgIrK71f3It7XExKPKvSIKKworIzogbWlzYzIuYzoyNzcxCittc2dpZCAiSWxsZWdhbCBtb3VzZXNoYXBlIgorbXNnc3RyICKyu9X9yLe1xMrzserQzte0IgorCisjOiBtaXNjMi5jOjI4MTEgbWlzYzIuYzo1MTYyCittc2dpZCAiZGlnaXQgZXhwZWN0ZWQiCittc2dzdHIgItOmuMPOqsr919YiCisKKyM6IG1pc2MyLmM6MjgxNgorbXNnaWQgIklsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAisrvV/ci3tcSw2bfWscgiCisKKyM6IG1pc2MyLmM6MzEyMAorbXNnaWQgIkVudGVyIGVuY3J5cHRpb24ga2V5OiAiCittc2dzdHIgIsrkyOvD3MLrOiAiCisKKyM6IG1pc2MyLmM6MzEyMQorbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIsfr1NnK5Mjr0ru0zjogIgorCisjOiBtaXNjMi5jOjMxMzEKK21zZ2lkICJLZXlzIGRvbid0IG1hdGNoISIKK21zZ3N0ciAiwb20zsrkyOvD3MLrsrvNrCEiCisKKyM6IG1pc2MyLmM6MzY0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTM0MzogSW52YWxpZCBwYXRoOiAnKipbbnVtYmVyXScgbXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIG9yIGJlICIKKyJmb2xsb3dlZCBieSAnJXMnLiIKK21zZ3N0ciAiRTM0MzogsrvV/ci3tcTCt762OiAnKipbbnVtYmVyXScgsdjQ6NKq1NrCt762veHOsrvy0qq909b4ICclcyciCisKKyM6IG1pc2MyLmM6NDg5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ0OiBDYW4ndCBmaW5kIGRpcmVjdG9yeSBcIiVzXCIgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ0OiBjZHBhdGgg1tDDu9PQxL/CvCBcIiVzXCIiCisKKyM6IG1pc2MyLmM6NDkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ1OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkUzNDU6INTawre+ttbQ1dKyu7W9zsS8/iBcIiVzXCIiCisKKyM6IG1pc2MyLmM6NDkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ2OiBObyBtb3JlIGRpcmVjdG9yeSBcIiVzXCIgZm91bmQgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ2OiDU2sK3vrbW0NXSsru1vbj8tuC1xM7EvP4gXCIlc1wiIgorCisjOiBtaXNjMi5jOjQ5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiDU2sK3vrbW0NXSsru1vbj8tuC1xM7EvP4gXCIlc1wiIgorCisjOiBtaXNjMi5jOjUxNTQKK21zZ2lkICJJbGxlZ2FsIGNvbXBvbmVudCIKK21zZ3N0ciAisrvV/ci3tcTX6bz+IgorCisjOiBub3JtYWwuYzoyNzk4Cittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAi16LS4jogxOO1xNbVtsuyu8Tcz9TKvrjfwcG2yCIKKworIzogbm9ybWFsLmM6Mjk5MworbXNnaWQgIkUzNDg6IE5vIHN0cmluZyB1bmRlciBjdXJzb3IiCittc2dzdHIgIkUzNDg6ILniseq0psO709DX1rf7tK4iCisKKyM6IG5vcm1hbC5jOjI5OTUKK21zZ2lkICJFMzQ5OiBObyBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0OTogueKx6rSmw7vT0Mq2sfDX1iIKKworIzogbm9ybWFsLmM6NDE2MAorbXNnaWQgIkUzNTI6IENhbm5vdCBlcmFzZSBmb2xkcyB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUyOiCyu8Tc1NrEv8ewtcQgJ2ZvbGRtZXRob2QnIM/Cyb6z/SBmb2xkIgorCisjOiBvcHMuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgMSB0aW1lIgorbXNnc3RyICLSu9DQICVzILn9INK7tM4iCisKKyM6IG9wcy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAi0rvQ0CAlcyC5/SAlZCC0ziIKKworIzogb3BzLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkIDEgdGltZSIKK21zZ3N0ciAiJWxkINDQICVzILn9INK7tM4iCisKKyM6IG9wcy5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiJWxkINDQICVzILn9ICVkILTOIgorCisjOiBvcHMuYzo2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHRvIGluZGVudC4uLiAiCittc2dzdHIgIsq2sfAgJWxkINDQLi4uIgorCisjOiBvcHMuYzo2ODgKK21zZ2lkICIxIGxpbmUgaW5kZW50ZWQgIgorbXNnc3RyICLSu9DQ0tHKtrHwIgorCisjOiBvcHMuYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGluZGVudGVkICIKK21zZ3N0ciAi0tHKtrHwICVsZCDQ0CIKKworIy4gbXVzdCBkaXNwbGF5IHRoZSBwcm9tcHQKKyM6IG9wcy5jOjE1MjgKK21zZ2lkICJjYW5ub3QgeWFuazsgZGVsZXRlIGFueXdheSIKK21zZ3N0ciAisrvE3Li01sY7INaxvdPJvrP9IgorCisjOiBvcHMuYzoyMDE4Cittc2dpZCAiMSBsaW5lIGNoYW5nZWQiCittc2dzdHIgIiAxINDQIH5lZCIKKworIzogb3BzLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgY2hhbmdlZCIKK21zZ3N0ciAiICVsZCDQ0CB+ZWQiCisKKyM6IG9wcy5jOjIzODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnJlZWluZyAlbGQgbGluZXMiCittc2dzdHIgIsrNt8UgJWxkINDQ1tAiCisKKyM6IG9wcy5jOjI2NTgKK21zZ2lkICIxIGxpbmUgeWFua2VkIgorbXNnc3RyICLS0bi01sYgMSDQ0CIKKworIzogb3BzLmM6MjY2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgeWFua2VkIgorbXNnc3RyICLS0bi01sYgJWxkINDQIgorCisjOiBvcHMuYzoyOTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTM6IE5vdGhpbmcgaW4gcmVnaXN0ZXIgJXMiCittc2dzdHIgIkUzNTM6ILzEtObG9yAlcyDA78O709C2q873IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG9wcy5jOjM0NTQKK21zZ2lkICIiCisiXG4iCisiLS0tIFJlZ2lzdGVycyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gvMS05sb3IC0tLSIKKworIzogb3BzLmM6NDU2NQorbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAisrvV/ci3tcS8xLTmxvfD+7PGIgorCisjOiBvcHMuYzo0NjQ1Cittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyC8xLTmxvc6XG4iCisKKyM6IG9wcy5jOjQ2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biByZWdpc3RlciB0eXBlICVkIgorbXNnc3RyICLOtNaqtcTXorLhwODQzTogJWQiCisKKyM6IG9wcy5jOjUwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NDogSW52YWxpZCByZWdpc3RlciBuYW1lOiAnJXMnIgorbXNnc3RyICJFMzU0OiC8xLTmxvfD+7PGtO3O8zogJyVzJyIKKworIzogb3BzLmM6NTM5MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgQ29sczsgIgorbXNnc3RyICIlbGQgwdA7ICIKKworIzogb3BzLmM6NTQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiCittc2dzdHIgItGh1PHByyAlcyVsZC8lbGQg0NA7ICVsZC8lbGQg19YoV29yZCk7ICVsZC8lbGQg19a3+yhCeXRlcykiCisKKyM6IG9wcy5jOjU0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQnl0ZSAlbGQgb2YgJWxkIgorbXNnc3RyICLB0CAlcy8lczsg0NAgJWxkLyVsZDsg19YoV29yZCkgJWxkLyVsZDsg19a3+yhCeXRlKSAlbGQvJWxkIgorCisjOiBvcHMuYzo1NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCBmb3IgQk9NKSIKKworIzogb3B0aW9uLmM6MTk4OQorbXNnaWQgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIKK21zZ3N0ciAiuNDQu8T60aHU8SBWaW0iCisKKyM6IG9wdGlvbi5jOjMxNzUKK21zZ2lkICJPcHRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAisrvWp7PWuMPRoc/uIgorCisjOiBvcHRpb24uYzozMjAwCittc2dpZCAiTm90IGFsbG93ZWQgaW4gYSBtb2RlbGluZSIKK21zZ3N0ciAisrvE3NTaxKPKvdDQwO+z9s/WIgorCisjOiBvcHRpb24uYzozMjU2Cittc2dpZCAiIgorIlxuIgorIlx0TGFzdCBzZXQgZnJvbSAiCittc2dzdHIgIiIKKyJcbiIKKyJcdLWxx7DJ6NbDOiAiCisKKyM6IG9wdGlvbi5jOjMzOTUKK21zZ2lkICJOdW1iZXIgcmVxdWlyZWQgYWZ0ZXIgPSIKK21zZ3N0ciAiPSC689Do0qrT0Mr919YiCisKKyM6IG9wdGlvbi5jOjM3MDIgb3B0aW9uLmM6NDMwOQorbXNnaWQgIk5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJUZXJtY2FwIMDvw+bV0rK7tb0iCisKKyM6IG9wdGlvbi5jOjM3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBjaGFyYWN0ZXIgPCVzPiIKK21zZ3N0ciAisrvV/ci3tcTX1rf7IDwlcz4iCisKKyM6IG9wdGlvbi5jOjQyOTQgb3B0aW9uLmM6NTQ5NworbXNnaWQgIk5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgItXiwO+yu7/JyrnTwyIKKworIzogb3B0aW9uLmM6NDMwMQorbXNnaWQgIkNhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAisrvE3MnotqggJ3Rlcm0nIM6qv9XX1rf7tK4iCisKKyM6IG9wdGlvbi5jOjQzMDQKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHRlcm0gaW4gR1VJIgorbXNnc3RyICLU2s280M2958Pm1tCyu8Tcx9C7u9bVtssiCisKKyM6IG9wdGlvbi5jOjQzMDYKK21zZ2lkICJVc2UgXCI6Z3VpXCIgdG8gc3RhcnQgdGhlIEdVSSIKK21zZ3N0ciAiyuTI6yBcIjpndWlcIiDAtMb0tq/NvNDOvefD5iIKKworIzogb3B0aW9uLmM6NDMyNworbXNnaWQgIidiYWNrdXBleHQnIGFuZCAncGF0Y2htb2RlJyBhcmUgZXF1YWwiCittc2dzdHIgIidiYWNrdXBleHQnILj6ICdwYXRjaG1vZGUnIMrH0rvR+bXEIgorCisjOiBvcHRpb24uYzo0NTg2Cittc2dpZCAiWmVybyBsZW5ndGggc3RyaW5nIgorbXNnc3RyICLB47OktsjX1rf7tK4iCisKKyM6IG9wdGlvbi5jOjQ2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBudW1iZXIgYWZ0ZXIgPCVzPiIKK21zZ3N0ciAiPCVzPiC688ixydnK/dfWIgorCisjOiBvcHRpb24uYzo0NjY4Cittc2dpZCAiTWlzc2luZyBjb21tYSIKK21zZ3N0ciAiyLHJ2ba6usUiCisKKyM6IG9wdGlvbi5jOjQ2NzUKK21zZ2lkICJNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICKx2NDo1ri2qNK7uPYgJyDWtSIKKworIzogb3B0aW9uLmM6NDcxNQorbXNnaWQgImNvbnRhaW5zIHVucHJpbnRhYmxlIGNoYXJhY3RlciIKK21zZ3N0ciAisPy6rLK7xNzP1Mq+tcTX1rf7IgorCisjOiBvcHRpb24uYzo0NzI4Cittc2dpZCAiSW52YWxpZCBmb250KHMpIgorbXNnc3RyICKyu9X9yLe1xNfWzOUiCisKKyM6IG9wdGlvbi5jOjQ3MzQKK21zZ2lkICJjYW4ndCBzZWxlY3QgZm9udHNldCIKK21zZ3N0ciAisrvE3Mq508PX1szlvK8oRm9udHNldCkiCisKKyM6IG9wdGlvbi5jOjQ3MzYKK21zZ2lkICJJbnZhbGlkIGZvbnRzZXQiCittc2dzdHIgIrK71f3It7XE19bM5byvKEZvbnRzZXQpIgorCisjOiBvcHRpb24uYzo0NzQzCittc2dpZCAiY2FuJ3Qgc2VsZWN0IHdpZGUgZm9udCIKK21zZ3N0ciAisrvE3Mq508PJ6LaotcS/7dfWzOUoV2lkZWZvbnQpIgorCisjOiBvcHRpb24uYzo0NzQ1Cittc2dpZCAiSW52YWxpZCB3aWRlIGZvbnQiCittc2dzdHIgIrK71f3It7XEv+3X1szlKFdpZGVmb250KSIKKworIzogb3B0aW9uLmM6NTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIGNoYXJhY3RlciBhZnRlciA8JWM+IgorbXNnc3RyICI8JWM+ILrz09Cyu9X9yLe1xNfWt/siCisKKyM6IG9wdGlvbi5jOjUwOTcKK21zZ2lkICJjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAi0OjSqra6usUiCisKKyM6IG9wdGlvbi5jOjUxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJ2NvbW1lbnRzdHJpbmcnIG11c3QgYmUgZW1wdHkgb3IgY29udGFpbiAlcyIKK21zZ3N0ciAiJ2NvbW1lbnRzdHJpbmcnILHY0OjKx7/VsNe78rD8uqwgJXMiCisKKyM6IG9wdGlvbi5jOjUxNTMKK21zZ2lkICJObyBtb3VzZSBzdXBwb3J0IgorbXNnc3RyICKyu9ans9bK87HqIgorCisjOiBvcHRpb24uYzo1Mzk5Cittc2dpZCAiVW5jbG9zZWQgZXhwcmVzc2lvbiBzZXF1ZW5jZSIKK21zZ3N0ciAiw7vT0L3hyvi1xLHttO/KvTogIgorCisjOiBvcHRpb24uYzo1NDAzCittc2dpZCAidG9vIG1hbnkgaXRlbXMiCittc2dzdHIgIsyrtuC21M/zIgorCisjOiBvcHRpb24uYzo1NDA1Cittc2dpZCAidW5iYWxhbmNlZCBncm91cHMiCittc2dzdHIgIrK7ttSzxrXE1+kiCisKKyM6IG9wdGlvbi5jOjU2MjAKK21zZ2lkICJBIHByZXZpZXcgd2luZG93IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLUpMDAtLC/2tLRvq205tTawcsiCisKKyM6IG9wdGlvbi5jOjU4ODEgb3B0aW9uLmM6NTkxMAorbXNnaWQgIid3aW5oZWlnaHQnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbmhlaWdodCciCittc2dzdHIgIid3aW5oZWlnaHQnILK7xNyxyCAnd2lubWluaGVpZ2h0JyC4/MnZIgorCisjOiBvcHRpb24uYzo1OTI2IG9wdGlvbi5jOjU5NDUKK21zZ2lkICInd2lud2lkdGgnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbndpZHRoJyIKK21zZ3N0ciAiJ3dpbndpZHRoJyCyu8TcscggJ3dpbm1pbndpZHRoJyC4/MnZIgorCisjOiBvcHRpb24uYzo2MDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgYXQgbGVhc3QgJWQgbGluZXMiCittc2dzdHIgItbBydnQ6NKqICVkINDQIgorCisjOiBvcHRpb24uYzo2MDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgYXQgbGVhc3QgJWQgY29sdW1ucyIKK21zZ3N0ciAi1sHJ2dDo0qogJWQgwdAiCisKKyM6IG9wdGlvbi5jOjYzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NTogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMzU1OiCyu9X9yLe1xNGhz+46ICVzIgorCisjOiBvcHRpb24uYzo2NTAwCittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBjb2RlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g1tW2y7HgwusgLS0tIgorCisjOiBvcHRpb24uYzo2NTAyCittc2dpZCAiIgorIlxuIgorIi0tLSBHbG9iYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gyKu+1iDRoc/u1rUgLS0tIgorCisjOiBvcHRpb24uYzo2NTA0Cittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSCxvrXYINGhz+7WtSAtLS0iCisKKyM6IG9wdGlvbi5jOjY1MDYKK21zZ2lkICIiCisiXG4iCisiLS0tIE9wdGlvbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tINGhz+4gLS0tIgorCisjOiBvcHRpb24uYzo3MTk2Cittc2dpZCAiRTM1NjogZ2V0X3ZhcnAgRVJST1IiCittc2dzdHIgIkUzNTY6IGdldF92YXJwILTtzvMiCisKKyM6IG9wdGlvbi5jOjgxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NzogJ2xhbmdtYXAnOiBNYXRjaGluZyBjaGFyYWN0ZXIgbWlzc2luZyBmb3IgJXMiCittc2dzdHIgIkUzNTc6ICdsYW5nbWFwJzog1dKyu7W9ICVzILbU06a1xNfWt/siCisKKyM6IG9wdGlvbi5jOjgxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1ODogJ2xhbmdtYXAnOiBFeHRyYSBjaGFyYWN0ZXJzIGFmdGVyIHNlbWljb2xvbjogJXMiCittc2dzdHIgIkUzNTg6ICdsYW5nbWFwJzogt9a6xbrz09C24NPgtcTX1rf7OiAlcyIKKworIzogb3NfYW1pZ2EuYzoyNzMKK21zZ2lkICJjYW5ub3Qgb3BlbiAiCittc2dzdHIgIrK7xNy08r+qIgorCisjOiBvc19hbWlnYS5jOjMwNworbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIlZJTTogsrvE3LTyv6q0sL/aIVxuIgorCisjOiBvc19hbWlnYS5jOjMyOQorbXNnaWQgIk5lZWQgQW1pZ2Fkb3MgdmVyc2lvbiAyLjA0IG9yIGxhdGVyXG4iCittc2dzdHIgItDo0qogQW1pZ2Fkb3MgsOaxviAyLjA0INLUyc9cbiIKKworIzogb3NfYW1pZ2EuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICLQ6NKqICVzILDmsb4gJWxkXG4iCisKKyM6IG9zX2FtaWdhLmM6NDA3Cittc2dpZCAiQ2Fubm90IG9wZW4gTklMOlxuIgorbXNnc3RyICKyu8TctPK/qiBOSUw6XG4iCisKKyM6IG9zX2FtaWdhLmM6NDE4Cittc2dpZCAiQ2Fubm90IGNyZWF0ZSAiCittc2dzdHIgIrK7xNy0tL2oICIKKworIzogb3NfYW1pZ2EuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltIGV4aXRpbmcgd2l0aCAlZFxuIgorbXNnc3RyICJWaW0gt7W72Na1OiAlZFxuIgorCisjOiBvc19hbWlnYS5jOjkyOAorbXNnaWQgImNhbm5vdCBjaGFuZ2UgY29uc29sZSBtb2RlID8hXG4iCittc2dzdHIgIrK7xNzH0Lu71ve/2MyoKGNvbnNvbGUpxKPKvSAhP1xuIgorCisjOiBvc19hbWlnYS5jOjkzOCBvc19tYWMuYzoxMTY4IG9zX21zd2luLmM6NjE5IG9zX3Jpc2Nvcy5jOjcyOCBvc191bml4LmM6MjcyNgorbXNnaWQgIkUzNTk6IFNjcmVlbiBtb2RlIHNldHRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTM1OTogsrvWp7PWyei2qMbBxLvEo8q9IgorCisjOiBvc19hbWlnYS5jOjk5NAorbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAibWNoX2dldF9zaGVsbHNpemU6ILK7ysfW97/YzKgoY29uc29sZSk/P1xuIgorCisjLiBpZiBWaW0gb3BlbmVkIGEgd2luZG93OiBFeGVjdXRpbmcgYSBzaGVsbCBtYXkgY2F1c2UgY3Jhc2hlcworIzogb3NfYW1pZ2EuYzoxMTQyCittc2dpZCAiRTM2MDogQ2Fubm90IGV4ZWN1dGUgc2hlbGwgd2l0aCAtZiBvcHRpb24iCittc2dzdHIgIkUzNjA6ILK7xNzTwyAtZiDRoc/u1rTQ0CBzaGVsbCIKKworIzogb3NfYW1pZ2EuYzoxMTgzIG9zX2FtaWdhLmM6MTI3MworbXNnaWQgIkNhbm5vdCBleGVjdXRlICIKK21zZ3N0ciAisrvE3Na00NAgIgorCisjOiBvc19hbWlnYS5jOjExODYgb3NfYW1pZ2EuYzoxMjgzCittc2dpZCAic2hlbGwgIgorbXNnc3RyICJzaGVsbCAiCisKKyM6IG9zX2FtaWdhLmM6MTIwNiBvc19hbWlnYS5jOjEzMDgKK21zZ2lkICIgcmV0dXJuZWRcbiIKK21zZ3N0ciAiINLRt7W72FxuIgorCisjOiBvc19hbWlnYS5jOjE0NDgKK21zZ2lkICJBTkNIT1JfQlVGX1NJWkUgdG9vIHNtYWxsLiIKK21zZ3N0ciAiQU5DSE9SX0JVRl9TSVpFIMyr0KEiCisKKyM6IG9zX2FtaWdhLmM6MTQ1MgorbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAiSS9PILTtzvMiCisKKyM6IG9zX21zd2luLmM6NTAzCittc2dpZCAiLi4uKHRydW5jYXRlZCkiCittc2dzdHIgIiIKKworIzogb3NfbXN3aW4uYzo1OTQKK21zZ2lkICInY29sdW1ucycgaXMgbm90IDgwLCBjYW5ub3QgZXhlY3V0ZSBleHRlcm5hbCBjb21tYW5kcyIKK21zZ3N0ciAiJ2NvbHVtbnMnILK7yscgODAsILK7xNzWtNDQzeKyv8P8we4iCisKKyM6IG9zX21zd2luLmM6NzA2IG9zX3VuaXguYzo0OTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjQ6IExpYnJhcnkgY2FsbCBmYWlsZWQgZm9yIFwiJXMoKVwiIgorbXNnc3RyICJFMzY0OiC199PDuq/K/b/iIFwiJXNcIigpIMqnsNwiCisKKyM6IG9zX21zd2luLmM6MTM0MAorbXNnaWQgIkUyMzc6IFByaW50ZXIgc2VsZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRTIzNzogsrvE3NGh1PG0y7Ty06G7+iIKKworIzogb3NfbXN3aW4uYzoxMzg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvICVzIG9uICVzIgorbXNnc3RyICK00yAlcyC1vSAlcyIKKworIzogb3NfbXN3aW4uYzoxNDQ5IG9zX21zd2luLmM6MTQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM4OiBQcmludCBlcnJvcjogJXMiCittc2dzdHIgIkUyMzg6ILTy06G07c7zOiAlcyIKKworIzogb3NfbXN3aW4uYzoxNDU5Cittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAizrTWqiIKKworIzogb3NfbXN3aW4uYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50aW5nICclcyciCittc2dzdHIgItLRtPLToTogJyVzJyIKKworIzogb3NfbXN3aW4uYzoyNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDQ6IElsbGVnYWwgY2hhcnNldCBuYW1lIFwiJXNcIiBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ0OiDX1rf7vK8gXCIlc1wiILK7xNy21NOm19bM5VwiJXNcIiIKKworIzogb3NfbXN3aW4uYzoyNTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDU6IElsbGVnYWwgY2hhciAnJWMnIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDU6ILK71f3It7XE19a3+yAnJWMnILP2z9bU2tfWzOXD+7PGIFwiJXNcIiDE2iIKKworIzogb3NfcmlzY29zLmM6MTIyNworbXNnaWQgIkUzNjY6IEludmFsaWQgJ29zZmlsZXR5cGUnIG9wdGlvbiAtIHVzaW5nIFRleHQiCittc2dzdHIgIkUzNjY6ILK71f3It7XEICdmaWxldHlwZScg0aHP7iAtIMq508O0v87E19bEo8q9IgorCisjOiBvc191bml4LmM6ODAwCittc2dpZCAiVmltOiBEb3VibGUgc2lnbmFsLCBleGl0aW5nXG4iCittc2dzdHIgIlZpbTogy6vW2NDFusUsIM3Ls/bW0FxuIgorCisjOiBvc191bml4LmM6ODA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWwgJXNcbiIKK21zZ3N0ciAiVmltOiBDVmltOiDAub3Ytb3QxbrFKHNpZ25hbCkgJXNcbiIKKworIzogb3NfdW5peC5jOjgwOQorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWxcbiIKK21zZ3N0ciAiVmltOiDAub3Ytb3WwsP8tcTQxbrFKGRlYWRseSBzaWduYWxlKVxuIgorCisjOiBvc191bml4LmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAitPK/qiBYIFdpbmRvdyDTw8qxICVsZCDD6yIKKworIzogb3NfdW5peC5jOjEwOTAKK21zZ2lkICIiCisiXG4iCisiVmltOiBHb3QgWCBlcnJvclxuIgorbXNnc3RyICIiCisiXG4iCisiVmltOiBYILTtzvNcbiIKKworIzogb3NfdW5peC5jOjExNTcKK21zZ2lkICJUZXN0aW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICKy4srUIFggV2luZG93IMqnsNwiCisKKyM6IG9zX3VuaXguYzoxMzAxCittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRpbWVkIG91dCIKK21zZ3N0ciAitPK/qiBYIFdpbmRvdyCzrMqxIgorCisjOiBvc191bml4LmM6Mjg5OSBvc191bml4LmM6MzQ4MworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCAiCittc2dzdHIgIiIKKyJcbiIKKyKyu8Tc1rTQ0CBzaGVsbCIKKworIzogb3NfdW5peC5jOjI5NDQKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgc2hcbiIKK21zZ3N0ciAiIgorIlxuIgorIrK7xNzWtNDQIHNoZWxsIHNoXG4iCisKKyM6IG9zX3VuaXguYzoyOTQ4IG9zX3VuaXguYzozNDg5Cittc2dpZCAiIgorIlxuIgorInNoZWxsIHJldHVybmVkICIKK21zZ3N0ciAiIgorIlxuIgorIlNoZWxsINLRt7W72CIKKworIzogb3NfdW5peC5jOjMwODIKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGNyZWF0ZSBwaXBlc1xuIgorbXNnc3RyICIiCisiXG4iCisisrvE3L2owaK53LXAXG4iCisKKyM6IG9zX3VuaXguYzozMDk3Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBmb3JrXG4iCittc2dzdHIgIiIKKyJcbiIKKyKyu8TcIGZvcmtcbiIKKworIzogb3NfdW5peC5jOjM0OTYKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKyJcbiIKKyLD/MHu0tG94cr4XG4iCisKKyM6IG9zX3VuaXguYzo0OTkzCittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IGZhaWxlZCIKK21zZ3N0ciAitPK/qiBYIFdpbmRvdyDKp7DcIgorCisjOiBvc192bXNfbW1zLmM6NTkKK21zZ2lkICJBdCBsaW5lIgorbXNnc3RyICLU2tDQusUgIgorCisjOiBvc193MzJleGUuYzoxNjkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICKyu8TcvNPU2CB2aW0zMi5kbGyjoSIKKworIzogb3NfdzMyZXhlLmM6MTY5IG9zX3czMmV4ZS5jOjE3OQorbXNnaWQgIlZJTSBFcnJvciIKK21zZ3N0ciAiVklNILTtzvMiCisKKyM6IG9zX3czMmV4ZS5jOjE3OQorbXNnaWQgIkNvdWxkIG5vdCBmaXggdXAgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIERMTCEiCittc2dzdHIgIrK7xNzQ3tX9uq/K/da41eu1vSBETEwhIgorCisjOiBvc193aW4xNi5jOjU3OCBvc193aW4zMi5jOjMwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hlbGwgcmV0dXJuZWQgJWQiCittc2dzdHIgIlNoZWxsILe1u9jWtSAlZCIKKworIzogb3Nfd2luMzIuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0ICVzIGV2ZW50XG4iCittc2dzdHIgIlZpbTogwLm92LW9ICVzIMrCvP5cbiIKKworIzogb3Nfd2luMzIuYzoyNDkxCittc2dpZCAiY2xvc2UiCittc2dzdHIgIrnYsdUiCisKKyM6IG9zX3dpbjMyLmM6MjQ5MworbXNnaWQgImxvZ29mZiIKK21zZ3N0ciAi16LP+yIKKworIzogb3Nfd2luMzIuYzoyNDk0Cittc2dpZCAic2h1dGRvd24iCittc2dzdHIgIrnYu/oiCisKKyM6IG9zX3dpbjMyLmM6Mjk3NQorbXNnaWQgIkUzNzE6IENvbW1hbmQgbm90IGZvdW5kIgorbXNnc3RyICJFMzcxOiDV0rK7tb3D/MHuIgorCisjOiBvc193aW4zMi5jOjI5ODgKK21zZ2lkICIiCisiVklNUlVOLkVYRSBub3QgZm91bmQgaW4geW91ciAkUEFUSC5cbiIKKyJFeHRlcm5hbCBjb21tYW5kcyB3aWxsIG5vdCBwYXVzZSBhZnRlciBjb21wbGV0aW9uLlxuIgorIlNlZSAgOmhlbHAgd2luMzItdmltcnVuICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyLU2sTjtcQgJFBBVEgg1tDV0rK7tb0gVklNUlVOLkVYRS5cbiIKKyLN4rK/w/zB7ta00NDN6rHPuvO9q7K7u+HU3c2jLlxuIgorIr340ruyvcu1w/fH69a00NAgOmhlbHAgd2luMzItdmltcnVuICIKKworIzogb3Nfd2luMzIuYzoyOTkxCittc2dpZCAiVmltIFdhcm5pbmciCittc2dzdHIgIlZpbSC+r7jmIgorCisjOiBxdWlja2ZpeC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcyOiBUb28gbWFueSAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzI6ILjxyr27r9fWt/u0rsDv09DMq7bgICUlJWMgIgorCisjOiBxdWlja2ZpeC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3MzoguPHKvbuv19a3+7SusrvTprjDs/bP1iAlJSVjICIKKworIzogcXVpY2tmaXguYzozNDgKK21zZ2lkICJFMzc0OiBNaXNzaW5nIF0gaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NDoguPHKvbuv19a3+7SuwO/J2cHLIF0iCisKKyM6IHF1aWNrZml4LmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NToguPHKvbuv19a3+7SuwO/T0LK71qez1rXEICUlJWMgIgorCisjOiBxdWlja2ZpeC5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiCittc2dzdHIgIkUzNzY6ILjxyr27r9fWt/u0rr+qzbfA79PQsrvV/ci3tcQgJSUlYyAiCisKKyM6IHF1aWNrZml4LmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzc6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc3OiC48cq9u6/X1rf7tK7A79PQsrvV/ci3tcQgJSUlYyAiCisKKyM6IHF1aWNrZml4LmM6NDE0Cittc2dpZCAiRTM3ODogJ2Vycm9yZm9ybWF0JyBjb250YWlucyBubyBwYXR0ZXJuIgorbXNnc3RyICJFMzc4OiAnZXJyb3Jmb3JtYXQnIM60yei2qCIKKworIzogcXVpY2tmaXguYzo1MjAKK21zZ2lkICJFMzc5OiBNaXNzaW5nIG9yIGVtcHR5IGRpcmVjdG9yeSBuYW1lIgorbXNnc3RyICJFMzc5OiDV0rK7tb3Ev8K8w/uzxrvyyse/1bXExL/CvMP7s8YiCisKKyM6IHF1aWNrZml4LmM6OTMxCittc2dpZCAiTm8gbW9yZSBpdGVtcyIKK21zZ3N0ciAiw7vT0Mbky/y21M/zIgorCisjOiBxdWlja2ZpeC5jOjExNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCVkIG9mICVkKSVzJXM6ICIKK21zZ3N0ciAiKCVkIC8gJWQpJXMlczogIgorCisjOiBxdWlja2ZpeC5jOjExNTQKK21zZ2lkICIgKGxpbmUgZGVsZXRlZCkiCittc2dzdHIgIiAo0NDS0cm+s/0pIgorCisjOiBxdWlja2ZpeC5jOjEzNjAKK21zZ2lkICJFMzgwOiBBdCBib3R0b20gb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODA6IFF1aWNrZml4ILbR1bu94c6yIgorCisjOiBxdWlja2ZpeC5jOjEzNjkKK21zZ2lkICJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODE6IFF1aWNrZml4ILbR1bu2pbbLIgorCisjOiBxdWlja2ZpeC5jOjEzODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgbGlzdCAlZCBvZiAlZDsgJWQgZXJyb3JzIgorbXNnc3RyICK07c7zwdCx7SAlZC8lZDsgubLT0CAlZCDP7rTtzvMiCisKKyM6IHF1aWNrZml4LmM6MTg0MgorbXNnaWQgIkUzODI6IENhbm5vdCB3cml0ZSwgJ2J1ZnR5cGUnIG9wdGlvbiBpcyBzZXQiCittc2dzdHIgIkUzODI6ILK7xNzQtMjro6wnYnVmdHlwZScg0aHP7tLRyei2qCIKKworIzogcmVnZXhwLmM6ODAxCittc2dpZCAiRTMzOTogUGF0dGVybiB0b28gbG9uZyIKK21zZ3N0ciAiRTMzOTogw/vX1syrs6QiCisKKyM6IHJlZ2V4cC5jOjEzMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxOiBOZXN0ZWQgJXMqIgorbXNnc3RyICJFNjE6ILOy17QgJXMqIgorCisjOiByZWdleHAuYzoxMzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjogTmVzdGVkICVzJWMiCittc2dzdHIgIkU2Mjogs7LXtCAlcyVjIgorCisjOiByZWdleHAuYzoxNDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDogJXMlYyDDu9PQvdO2q873IgorCisjOiByZWdleHAuYzoyNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICLT77eotO3O8zogJXN7Li4ufSIKKworIzogcmVnZXhwLmM6MjcxNgorbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiCyu8Tc1rTQ0DsgcmVndWxhciBleHByZXNzaW9uIMyruLTU0z8iCisKKyM6IHJlZ2V4cC5jOjI4NTEKK21zZ2lkICJFMzYzOiBwYXR0ZXJuIGNhdXNlZCBvdXQtb2Ytc3RhY2sgZXJyb3IiCittc2dzdHIgIkUzNjM6IHJlZ3VsYXIgZXhwcmVzc2lvbiDU7LPJttHVu9PDueK1xLTtzvMiCisKKyM6IHJlZ2V4cC5jOjMwODcKK21zZ2lkICJFeHRlcm5hbCBzdWJtYXRjaGVzOlxuIgorbXNnc3RyICLN4rK/t/u6zzpcbiIKKworIzogc2NyZWVuLmM6MjA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIrLS0lM2xkIGxpbmVzIGZvbGRlZCAiCittc2dzdHIgIistLdLRIGZvbGQgJTNsZCDQ0CIKKworIzogc2NyZWVuLmM6NzQxMQorbXNnaWQgIiBWUkVQTEFDRSIKK21zZ3N0ciAiIFYtzOa7uyIKKworIzogc2NyZWVuLmM6NzQxNQorbXNnaWQgIiBSRVBMQUNFIgorbXNnc3RyICIgzOa7uyIKKworIzogc2NyZWVuLmM6NzQyMAorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIgt7TXqiIKKworIzogc2NyZWVuLmM6NzQyMgorbXNnaWQgIiBJTlNFUlQiCittc2dzdHIgIiCy5cjrIgorCisjOiBzY3JlZW4uYzo3NDI1Cittc2dpZCAiIChpbnNlcnQpIgorbXNnc3RyICIgKLLlyOspIgorCisjOiBzY3JlZW4uYzo3NDI3Cittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiICjM5ru7KSIKKworIzogc2NyZWVuLmM6NzQyOQorbXNnaWQgIiAodnJlcGxhY2UpIgorbXNnc3RyICIgKHYtzOa7uykiCisKKyM6IHNjcmVlbi5jOjc0MzIKK21zZ2lkICIgSGVicmV3IgorbXNnc3RyICIgz6OyrsCzIgorCisjOiBzY3JlZW4uYzo3NDQwCittc2dpZCAiIChsYW5nKSIKK21zZ3N0ciAiICjT79HUKSIKKworIzogc2NyZWVuLmM6NzQ0MworbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKNWzzPspIgorCisjOiBzY3JlZW4uYzo3NDQ5Cittc2dpZCAiIFNFTEVDVCIKK21zZ3N0ciAiINGhyKEiCisKKyM6IHNjcmVlbi5jOjc0NTEKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgv8nK0yIKKworIzogc2NyZWVuLmM6NzQ1MworbXNnaWQgIiBCTE9DSyIKK21zZ3N0ciAiIL/pIgorCisjOiBzY3JlZW4uYzo3NDU1Cittc2dpZCAiIExJTkUiCittc2dzdHIgIiDQ0CIKKworIzogc2NyZWVuLmM6NzQ2OCBzY3JlZW4uYzo3NTIyCittc2dpZCAicmVjb3JkaW5nIgorbXNnc3RyICK8x8K81tAiCisKKyM6IHNlYXJjaC5jOjM2Cittc2dpZCAic2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIgorbXNnc3RyICLS0bLp1dK1vc7EvP6/qs23o7vU2bTTveHOsrzM0Piy6dXSIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIKK21zZ3N0ciAi0tGy6dXStb3OxLz+veHOsqO71Nm007+qzbe8zND4sunV0iIKKworIzogc2VhcmNoLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6ILTtzvO1xLLp1dLX1rf7tK46ICVzIgorCisjOiBzZWFyY2guYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NDogc2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg0OiDS0bLp1dK1vc7EvP6/qs23yNTV0rK7tb0gJXMiCisKKyM6IHNlYXJjaC5jOjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg1OiBzZWFyY2ggaGl0IEJPVFRPTSB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODU6INLRsunV0rW9zsS8/r3hzrLI1NXSsru1vSAlcyIKKworIzogc2VhcmNoLmM6MTEwNworbXNnaWQgIkUzODY6IEV4cGVjdGVkICc/JyBvciAnLycgIGFmdGVyICc7JyIKK21zZ3N0ciAiRTM4Njog1NogJzsnILrzw+bTprjD09AgJz8nILvyICcvJyIKKworIzogc2VhcmNoLmM6MzQ3NgorbXNnaWQgIiAoaW5jbHVkZXMgcHJldmlvdXNseSBsaXN0ZWQgbWF0Y2gpIgorbXNnc3RyICIgKLD8wKjJz7TOwdCz9rf7us/P7ikiCisKKyMuIGN1cnNvciBhdCBzdGF0dXMgbGluZQorIzogc2VhcmNoLmM6MzQ5NgorbXNnaWQgIi0tLSBJbmNsdWRlZCBmaWxlcyAiCittc2dzdHIgIi0tLSCw/LqszsS8/iAiCisKKyM6IHNlYXJjaC5jOjM0OTgKK21zZ2lkICJub3QgZm91bmQgIgorbXNnc3RyICLV0rK7tb0gIgorCisjOiBzZWFyY2guYzozNDk5Cittc2dpZCAiaW4gcGF0aCAtLS1cbiIKK21zZ3N0ciAi1NrCt762IC0tLVxuIgorCisjOiBzZWFyY2guYzozNTM4Cittc2dpZCAiICAoQWxyZWFkeSBsaXN0ZWQpIgorbXNnc3RyICIgICjS0cHQs/YpIgorCisjOiBzZWFyY2guYzozNTQwCittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiAg1dKyu7W9IgorCisjOiBzZWFyY2guYzozNTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGluY2x1ZGVkIGZpbGU6ICVzIgorbXNnc3RyICKy6dXSsPy6rM7EvP46ICVzIgorCisjOiBzZWFyY2guYzozODEwCittc2dpZCAiRTM4NzogTWF0Y2ggaXMgb24gY3VycmVudCBsaW5lIgorbXNnc3RyICJFMzg3OiC1scew0NDGpcXkIgorCisjOiBzZWFyY2guYzozOTUwCittc2dpZCAiQWxsIGluY2x1ZGVkIGZpbGVzIHdlcmUgZm91bmQiCittc2dzdHIgIsv509Cw/LqszsS8/ra80tHV0rW9IgorCisjOiBzZWFyY2guYzozOTUyCittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIsO709Cw/LqszsS8/iIKKworIzogc2VhcmNoLmM6Mzk2OAorbXNnaWQgIkUzODg6IENvdWxkbid0IGZpbmQgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRTM4ODog1dKyu7W9tqjS5SIKKworIzogc2VhcmNoLmM6Mzk3MAorbXNnaWQgIkUzODk6IENvdWxkbid0IGZpbmQgcGF0dGVybiIKK21zZ3N0ciAiRTM4OTog1dKyu7W9IHBhdHRlcm4iCisKKyM6IHN5bnRheC5jOjI5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5MDogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkUzOTA6ILLOyv2yu9X9yLc6ICVzIgorCisjOiBzeW50YXguYzozMTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTE6IE5vIHN1Y2ggc3ludGF4IGNsdXN0ZXI6ICVzIgorbXNnc3RyICJFMzkxOiDO3rTL0++3qCBjbHVzdGVyOiBcIiVzXCIiCisKKyM6IHN5bnRheC5jOjMzMzEKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgItXiuPa7urPlx/jDu9PQtqjS5cjOus7T77eoz+4iCisKKyM6IHN5bnRheC5jOjMzMzkKK21zZ2lkICJzeW5jaW5nIG9uIEMtc3R5bGUgY29tbWVudHMiCittc2dzdHIgIkO357jx16LKzc2ssr3W0CIKKworIzogc3ludGF4LmM6MzM0NworbXNnaWQgIm5vIHN5bmNpbmciCittc2dzdHIgIsO709DNrLK9IgorCisjOiBzeW50YXguYzozMzUwCittc2dpZCAic3luY2luZyBzdGFydHMgIgorbXNnc3RyICLNrLK9v6rKvCIKKworIzogc3ludGF4LmM6MzM1MiBzeW50YXguYzozNDIxCittc2dpZCAiIGxpbmVzIGJlZm9yZSB0b3AgbGluZSIKK21zZ3N0ciAi0NC6xbOss/a3ts6nIgorCisjOiBzeW50YXguYzozMzU2Cittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggc3luYyBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g0++3qM2ssr3P7sS/IChTeW50YXggc3luYyBpdGVtcykgLS0tIgorCisjOiBzeW50YXguYzozMzU5Cittc2dpZCAiIgorIlxuIgorInN5bmNpbmcgb24gaXRlbXMiCittc2dzdHIgIiIKKyJcbiIKKyLNrLK91tA6IgorCisjOiBzeW50YXguYzozMzY0Cittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tINPvt6jP7sS/IC0tLSIKKworIzogc3ludGF4LmM6MzM4NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5Mjogzt60y9Pvt6ggY2x1c3RlcjogXCIlc1wiIgorCisjOiBzeW50YXguYzozNDExCittc2dpZCAibWluaW1hbCAiCittc2dzdHIgItfu0KEiCisKKyM6IHN5bnRheC5jOjM0MTgKK21zZ2lkICJtYXhpbWFsICIKK21zZ3N0ciAi1+608yIKKworIzogc3ludGF4LmM6NDA0NgorbXNnaWQgIkUzOTM6IGdyb3VwW3RdaGVyZSBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5MzogyrnTw8HLsrvV/ci3tcSyzsr9IgorCisjOiBzeW50YXguYzo0MDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTQ6IERpZG4ndCBmaW5kIHJlZ2lvbiBpdGVtIGZvciAlcyIKK21zZ3N0ciAiRTM5NDog1dKyu7W9ICVzILXEIHJlZ2lvbiBpdGVtIgorCisjOiBzeW50YXguYzo0MDk4Cittc2dpZCAiRTM5NTogY29udGFpbnMgYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTU6IMq508PBy7K71f3It7XEss7K/SIKKworIzogc3ludGF4LmM6NDEwOQorbXNnaWQgIkUzOTY6IGNvbnRhaW5lZGluIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk2OiDKudPDwcuyu9X9yLe1xLLOyv0iCisKKyM6IHN5bnRheC5jOjQxODcKK21zZ2lkICJFMzk3OiBGaWxlbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTM5Nzog0OjSqs7EvP7D+7PGIgorCisjOiBzeW50YXguYzo0NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTg6IE1pc3NpbmcgJz0nOiAlcyIKK21zZ3N0ciAiRTM5ODogyLHJ2SBcIj1cIjogJXMiCisKKyM6IHN5bnRheC5jOjQ2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5OTogTm90IGVub3VnaCBhcmd1bWVudHM6IHN5bnRheCByZWdpb24gJXMiCittc2dzdHIgIkUzOTk6IHN5bnRheCByZWdpb24gJXMgtcSyzsr9zKvJ2SIKKworIzogc3ludGF4LmM6NTAxMAorbXNnaWQgIkU0MDA6IE5vIGNsdXN0ZXIgc3BlY2lmaWVkIgorbXNnc3RyICJFNDAwOiDDu9PQ1ri2qLXEyvTQ1CIKKworIzogc3ludGF4LmM6NTA0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDAxOiBQYXR0ZXJuIGRlbGltaXRlciBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDAxOiDV0rK7tb231rj0t/u6xTogJXMiCisKKyM6IHN5bnRheC5jOjUxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwMjogR2FyYmFnZSBhZnRlciBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRTQwMjogJyVzJyC688PmtcS2q873srvE3Mq2sfAiCisKKyM6IHN5bnRheC5jOjUyMDQKK21zZ2lkICJFNDAzOiBzeW50YXggc3luYzogbGluZSBjb250aW51YXRpb25zIHBhdHRlcm4gc3BlY2lmaWVkIHR3aWNlIgorbXNnc3RyICJFNDAzOiDT77eozayyvTogway909DQt/u6xda4tqjBy8G9tM4iCisKKyM6IHN5bnRheC5jOjUyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNDogSWxsZWdhbCBhcmd1bWVudHM6ICVzIgorbXNnc3RyICJFNDA0OiCyzsr9srvV/ci3OiAlcyIKKworIzogc3ludGF4LmM6NTMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDA1OiDIscnZtci6xTogJXMiCisKKyM6IHN5bnRheC5jOjUzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNjogRW1wdHkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDA2OiC/1bLOyv06ICVzIgorCisjOiBzeW50YXguYzo1MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDc6ICVzIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU0MDc6ICVzILK7xNzU2rTLs/bP1iIKKworIzogc3ludGF4LmM6NTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA4OiAlcyBtdXN0IGJlIGZpcnN0IGluIGNvbnRhaW5zIGxpc3QiCittc2dzdHIgIkU0MDg6ICVzILHY0OvKx8HQse3A77XEtdrSu7j2IgorCisjOiBzeW50YXguYzo1NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDk6IFVua25vd24gZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkU0MDk6ILK71f3It7XE1+nD+zogJXMiCisKKyM6IHN5bnRheC5jOjU2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMDogSW52YWxpZCA6c3ludGF4IHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJFNDEwOiCyu9X9yLe1xCA6c3ludGF4INfTw/zB7jogJXMiCisKKyM6IHN5bnRheC5jOjYwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMTogaGlnaGxpZ2h0IGdyb3VwIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MTE6INXSsru1vSBoaWdobGlnaHQgZ3JvdXA6ICVzIgorCisjOiBzeW50YXguYzo2MDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTI6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorbXNnc3RyICJFNDEyOiCyzsr9zKvJ2TogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEzOiBUb28gbWFueSBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTM6ILLOyv25/bbgOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MDc0Cittc2dpZCAiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIgorbXNnc3RyICJFNDE0OiDS0cnotqjX6SwguvbC1CBoaWdobGlnaHQgbGluayIKKworIzogc3ludGF4LmM6NjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJFNDE1OiB1bmV4cGVjdGVkIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE1OiCyu7jD09C1xLXIusU6ICVzIgorCisjOiBzeW50YXguYzo2MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTY6IG1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MTY6IMixydm1yLrFOiAlcyIKKworIzogc3ludGF4LmM6NjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE3OiBtaXNzaW5nIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQxNzogyLHJ2bLOyv06ICVzIgorCisjOiBzeW50YXguYzo2Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTg6IElsbGVnYWwgdmFsdWU6ICVzIgorbXNnc3RyICJFNDE4OiCyu7rPt6i1xNa1OiAlcyIKKworIzogc3ludGF4LmM6NjQxNworbXNnaWQgIkU0MTk6IEZHIGNvbG9yIHVua25vd24iCittc2dzdHIgIkU0MTk6ILTtzvO1xMewvrDR1cmrIgorCisjOiBzeW50YXguYzo2NDI4Cittc2dpZCAiRTQyMDogQkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQyMDogtO3O87XEsbO+sNHVyasiCisKKyM6IHN5bnRheC5jOjY0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMTogQ29sb3IgbmFtZSBvciBudW1iZXIgbm90IHJlY29nbml6ZWQ6ICVzIgorbXNnc3RyICJFNDIxOiC07c7ztcTR1cmrw/uzxrvyyv3WtTogJXMiCisKKyM6IHN5bnRheC5jOjY2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMjogdGVybWluYWwgY29kZSB0b28gbG9uZzogJXMiCittc2dzdHIgIkU0MjI6INbVtsux4MLrzKuzpDogJXMiCisKKyM6IHN5bnRheC5jOjY3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyMzogSWxsZWdhbCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MjM6ILLOyv2yu9X9yLc6ICVzIgorCisjOiBzeW50YXguYzo3MjYzCittc2dpZCAiRTQyNDogVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZSIKK21zZ3N0ciAiRTQyNDogyrnTw8HLzKu24LK7zay1xLjfwcG2yMr00NQiCisKKyM6IHRhZy5jOjkwCittc2dpZCAiYXQgYm90dG9tIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiserHqSh0YWcpttHVu73hzrIiCisKKyM6IHRhZy5jOjkxCittc2dpZCAiYXQgdG9wIG9mIHRhZyBzdGFjayIKK21zZ3N0ciAiserHqSh0YWcpttHVu7+qzbciCisKKyM6IHRhZy5jOjM5MgorbXNnaWQgIkU0MjU6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI1OiDS0b6t1NrX7seww+a1xLHqx6kodGFnKcHLIgorCisjOiB0YWcuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6INXSsru1vbHqx6kodGFnKTogJXMiCisKKyM6IHRhZy5jOjU0NQorbXNnaWQgIiAgIyBwcmkga2luZCB0YWciCittc2dzdHIgIiAgIyBwcmkga2luZCB0YWciCisKKyM6IHRhZy5jOjU0OAorbXNnaWQgImZpbGVcbiIKK21zZ3N0ciAizsS8/lxuIgorCisjLgorIy4gKiBBc2sgdG8gc2VsZWN0IGEgdGFnIGZyb20gdGhlIGxpc3QuCisjLiAqIFdoZW4gdXNpbmcgIjpzaWxlbnQiIGFzc3VtZSB0aGF0IDxDUj4gd2FzIGVudGVyZWQuCisjLgorIzogdGFnLmM6NzA2Cittc2dpZCAiRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KTogIgorbXNnc3RyICLK5MjrIG5yILvy0aHU8SAoPENSPiDNy7P2KTogIgorCisjOiB0YWcuYzo3NDYKK21zZ2lkICJFNDI3OiBUaGVyZSBpcyBvbmx5IG9uZSBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0Mjc6INa709C0y8/ut/u6zyIKKworIzogdGFnLmM6NzQ4Cittc2dpZCAiRTQyODogQ2Fubm90IGdvIGJleW9uZCBsYXN0IG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyODogvLq+rdTa1+6689K7uPa3+7rPtcSx6sepKHRhZynByyIKKworIzogdGFnLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLOxLz+IFwiJXNcIiCyu7Tm1NoiCisKKyMuIEdpdmUgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIHRhZ3MKKyM6IHRhZy5jOjc4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJWQgb2YgJWQlcyIKK21zZ3N0ciAi1dK1vSB0YWc6ICVkLyVkJXMiCisKKyM6IHRhZy5jOjc4MworbXNnaWQgIiBvciBtb3JlIgorbXNnc3RyICIgu/K4/LbgIgorCisjOiB0YWcuYzo3ODUKK21zZ2lkICIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIKK21zZ3N0ciAiICDS1LK7zay089Ch0LTAtMq508MgdGFnISIKKworIzogdGFnLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0Mjk6IEZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFNDI5OiDOxLz+IFwiJXNcIiCyu7Tm1NoiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6ODk3Cittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyC1vSB0YWcgICAgICAgICC00yAgINDQICAgINTaIM7EvP4vzsSxviIKKworIzogdGFnLmM6MTE0NAorbXNnaWQgIkxpbmVhciB0YWcgc2VhcmNoIgorbXNnc3RyICLP39DUsunV0rHqx6kgKFRhZ3MpIgorCisjOiB0YWcuYzoxMTQ2Cittc2dpZCAiQmluYXJ5IHRhZyBzZWFyY2giCittc2dzdHIgIrb+vfjWxrLp1dIoQmluYXJ5IHNlYXJjaCkgserHqShUYWdzKSIKKworIzogdGFnLmM6MTE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICKy6dXSIHRhZyDOxLz+IFwiJXNcIiIKKworIzogdGFnLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMwOiBUYWcgZmlsZSBwYXRoIHRydW5jYXRlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRTQzMDogVGFnIM7EvP7Ct762sbu92LbPzqogJXNcbiIKKworIzogdGFnLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogVGFnIM7EvP4gXCIlc1wiILjxyr207c7zIgorCisjOiB0YWcuYzoxODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZm9yZSBieXRlICVsZCIKK21zZ3N0ciAi1NogJWxkINfWvdrWrsewIgorCisjOiB0YWcuYzoxODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzI6IFRhZ3MgZmlsZSBub3Qgc29ydGVkOiAlcyIKK21zZ3N0ciAiRTQzMjogVGFnIM7EvP7OtMXF0PI6ICVzIgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MTkxMQorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzogw7vT0CB0YWcgzsS8/iIKKworIzogdGFnLmM6MjU4MworbXNnaWQgIkU0MzQ6IENhbid0IGZpbmQgdGFnIHBhdHRlcm4iCittc2dzdHIgIkU0MzQ6INXSsru1vSB0YWciCisKKyM6IHRhZy5jOjI1OTQKK21zZ2lkICJFNDM1OiBDb3VsZG4ndCBmaW5kIHRhZywganVzdCBndWVzc2luZyEiCittc2dzdHIgIkU0MzU6INXSsru1vSB0YWcsIMrU18WywiEiCisKKyM6IHRlcm0uYzoxNzIzCittc2dpZCAiJyBub3Qga25vd24uIEF2YWlsYWJsZSBidWlsdGluIHRlcm1pbmFscyBhcmU6IgorbXNnc3RyICInILK7xNy809TYoaO/ydPDtcTE2r2o1tW2y9DOyr3T0DoiCisKKyM6IHRlcm0uYzoxNzQ3Cittc2dpZCAiZGVmYXVsdGluZyB0byAnIgorbXNnc3RyICLUpMnoOiAnIgorCisjOiB0ZXJtLmM6MjEwMAorbXNnaWQgIkNhbm5vdCBvcGVuIHRlcm1jYXAgZmlsZSIKK21zZ3N0ciAisrvE3LTyv6ogdGVybWNhcCDOxLz+IgorCisjOiB0ZXJtLmM6MjEwMworbXNnaWQgIlRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtaW5mbyIKK21zZ3N0ciAi1Np0ZXJtaW5mb9bQzrTV0rW91tW2y8/uIgorCisjOiB0ZXJtLmM6MjEwNQorbXNnaWQgIlRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICLU2nRlcm1jYXDW0M601dK1vdbVtsvP7iIKKworIzogdGVybS5jOjIyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzNjogTm8gXCIlc1wiIGVudHJ5IGluIHRlcm1jYXAiCittc2dzdHIgIkU0MzY6IHRlcm1jYXAgw7vT0CBcIiVzXCIgz+4iCisKKyM6IHRlcm0uYzoyNzM4Cittc2dpZCAiRTQzNzogdGVybWluYWwgY2FwYWJpbGl0eSBcImNtXCIgcmVxdWlyZWQiCittc2dzdHIgIkU0Mzc6INbVtsvQ6NKqIFwiY21cIiC1xMTcwaYiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGVybS5jOjQ4NzIKK21zZ2lkICIiCisiXG4iCisiLS0tIFRlcm1pbmFsIGtleXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tINbVtsuwtLz8IC0tLSIKKworIzogdWkuYzoyNDAKK21zZ2lkICJuZXcgc2hlbGwgc3RhcnRlZFxuIgorbXNnc3RyICLG9Lav0MIgc2hlbGxcbiIKKworIzogdWkuYzoxNzA1Cittc2dpZCAiVmltOiBFcnJvciByZWFkaW5nIGlucHV0LCBleGl0aW5nLi4uXG4iCittc2dzdHIgIlZpbTogtsG07c7zo6zNy7P21tAuLi5cbiIKKworIy4gbXVzdCBkaXNwbGF5IHRoZSBwcm9tcHQKKyM6IHVuZG8uYzozNTEKK21zZ2lkICJObyB1bmRvIHBvc3NpYmxlOyBjb250aW51ZSBhbnl3YXkiCittc2dzdHIgIrK7xNy7udSto7vH67zM0PgiCisKKyM6IHVuZG8uYzo1MDYKK21zZ2lkICJFNDM4OiB1X3VuZG86IGxpbmUgbnVtYmVycyB3cm9uZyIKK21zZ3N0ciAiRTQzODogdV91bmRvOiDQ0LrFtO3O8yIKKworIzogdW5kby5jOjY3NQorbXNnaWQgIjEgY2hhbmdlIgorbXNnc3RyICLSu8/uuMSx5CIKKworIzogdW5kby5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhbmdlcyIKK21zZ3N0ciAiJWxkIM/uuMSx5CIKKworIzogdW5kby5jOjcyMQorbXNnaWQgIkU0Mzk6IHVuZG8gbGlzdCBjb3JydXB0IgorbXNnc3RyICJFNDM5OiCzt8/6wdCx7cvwu7UiCisKKyM6IHVuZG8uYzo3NTEKK21zZ2lkICJFNDQwOiB1bmRvIGxpbmUgbWlzc2luZyIKK21zZ3N0ciAiRTQ0MDog1dKyu7W90qqzt8/6stnX97XE0NAiCisKKyMuIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMKKyM6IHZlcnNpb24uYzo2NTUKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyzrsgzbzQzb3nw+aw5rG+IgorCisjOiB2ZXJzaW9uLmM6NjU3Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IEdVSSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBCaXQgzbzQzb3nw+aw5rG+IgorCisjOiB2ZXJzaW9uLmM6NjYwCittc2dpZCAiIGluIFdpbjMycyBtb2RlIgorbXNnc3RyICJXaW4zMnMgxKPKvSIKKworIzogdmVyc2lvbi5jOjY2MgorbXNnaWQgIiB3aXRoIE9MRSBzdXBwb3J0IgorbXNnc3RyICLWp7PWIE9MRSIKKworIzogdmVyc2lvbi5jOjY2NQorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBjb25zb2xlIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyzrsg19a3+73nw+aw5rG+IgorCisjOiB2ZXJzaW9uLmM6NjY5Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYgYml0IHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyzrsg19a3+73nw+aw5rG+IgorCisjOiB2ZXJzaW9uLmM6NjczCittc2dpZCAiIgorIlxuIgorIjMyIGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjMyIM67IE1TLURPUyCw5rG+IgorCisjOiB2ZXJzaW9uLmM6Njc1Cittc2dpZCAiIgorIlxuIgorIjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjE2IM67IE1TLURPUyCw5rG+IgorCisjOiB2ZXJzaW9uLmM6NjgxCittc2dpZCAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSCw5rG+IgorCisjOiB2ZXJzaW9uLmM6NjgzCittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFggsOaxviIKKworIzogdmVyc2lvbi5jOjY4NgorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgsOaxviIKKworIzogdmVyc2lvbi5jOjY5MQorbXNnaWQgIiIKKyJcbiIKKyJSSVNDIE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJSSVNDIE9TILDmsb4iCisKKyM6IHZlcnNpb24uYzo3MDEKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisivNPI67K5tqE6ICIKKworIzogdmVyc2lvbi5jOjcyOAorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyKx4NLrIgorCisjOiB2ZXJzaW9uLmM6NzMxCittc2dpZCAiYnkgIgorbXNnc3RyICLV3zoiCisKKyM6IHZlcnNpb24uYzo3NDMKK21zZ2lkICIiCisiXG4iCisiSHVnZSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIrOsx7+w5rG+ICIKKworIzogdmVyc2lvbi5jOjc0NgorbXNnaWQgIiIKKyJcbiIKKyJCaWcgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyK089DNsOaxviAiCisKKyM6IHZlcnNpb24uYzo3NDkKK21zZ2lkICIiCisiXG4iCisiTm9ybWFsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisi0ruw47Dmsb4gIgorCisjOiB2ZXJzaW9uLmM6NzUyCittc2dpZCAiIgorIlxuIgorIlNtYWxsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisivPLS17Dmsb4gIgorCisjOiB2ZXJzaW9uLmM6NzU0Cittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyK+q7zysOaxviAiCisKKyM6IHZlcnNpb24uYzo3NjAKK21zZ2lkICJ3aXRob3V0IEdVSS4iCittc2dzdHIgIrK7yrnTw8280M2958PmoaMiCisKKyM6IHZlcnNpb24uYzo3NjQKK21zZ2lkICJ3aXRoIEdUSy1HTk9NRSBHVUkuIgorbXNnc3RyICLKudPDIEdUSy1HTk9NRSDNvNDNvefD5qGjIgorCisjOiB2ZXJzaW9uLmM6NzY2Cittc2dpZCAid2l0aCBHVEsgR1VJLiIKK21zZ3N0ciAiyrnTwyBHVEsgzbzQzb3nw+ahoyIKKworIzogdmVyc2lvbi5jOjc3MAorbXNnaWQgIndpdGggWDExLU1vdGlmIEdVSS4iCittc2dzdHIgIsq508MgWDExLU1vdGlmIM280M2958PmoaMiCisKKyM6IHZlcnNpb24uYzo3NzMKK21zZ2lkICJ3aXRoIFgxMS1BdGhlbmEgR1VJLiIKK21zZ3N0ciAiyrnTwyBYMTEtQXRoZW5hIM280M2958PmoaMiCisKKyM6IHZlcnNpb24uYzo3NzYKK21zZ2lkICJ3aXRoIEJlT1MgR1VJLiIKK21zZ3N0ciAiyrnTwyBCZU9TIM280M2958PmoaMiCisKKyM6IHZlcnNpb24uYzo3NzkKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICLKudPDUGhvdG9uzbzQzb3nw+ahoyIKKworIzogdmVyc2lvbi5jOjc4MgorbXNnaWQgIndpdGggR1VJLiIKK21zZ3N0ciAiyrnTw8280M2958PmoaMiCisKKyM6IHZlcnNpb24uYzo3ODUKK21zZ2lkICJ3aXRoIENhcmJvbiBHVUkuIgorbXNnc3RyICLKudPDIENhcmJvbiDNvNDNvefD5qGjIgorCisjOiB2ZXJzaW9uLmM6Nzg4Cittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICLKudPDIENvY29hIM280M2958PmoaMiCisKKyM6IHZlcnNpb24uYzo3OTEKK21zZ2lkICJ3aXRoIChjbGFzc2ljKSBHVUkuIgorbXNnc3RyICLKudPDICi0q82zKSDNvNDNvefD5qGjIgorCisjOiB2ZXJzaW9uLmM6ODAyCittc2dpZCAiICBGZWF0dXJlcyBpbmNsdWRlZCAoKykgb3Igbm90ICgtKTpcbiIKK21zZ3N0ciAiIMS/x7C/ycq508MoKynT67K7v8nKudPDKC0ptcTEo7/pwdCx7TpcbiIKKworIzogdmVyc2lvbi5jOjgxNAorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICDPtc2zIHZpbXJjIMXk1sPOxLz+OiBcIiIKKworIzogdmVyc2lvbi5jOjgxOQorbXNnaWQgIiAgICAgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICDTw7untcQgdmltcmMgxeTWw87EvP46IFwiIgorCisjOiB2ZXJzaW9uLmM6ODI0Cittc2dpZCAiIDJuZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgtdq2/tfp08O7pyB2aW1yYyDOxLz+OiBcIiIKKworIzogdmVyc2lvbi5jOjgyOQorbXNnaWQgIiAzcmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgILXayP3X6dPDu6cgdmltcmMgzsS8/jogXCIiCisKKyM6IHZlcnNpb24uYzo4MzQKK21zZ2lkICIgICAgICB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgINPDu6e1xCBleHJjIMXk1sPOxLz+OiBcIiIKKworIzogdmVyc2lvbi5jOjgzOQorbXNnaWQgIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgtdq2/tfp08O7pyBleHJjIM7EvP46IFwiIgorCisjOiB2ZXJzaW9uLmM6ODQ1Cittc2dpZCAiICBzeXN0ZW0gZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgICDPtc2zIGd2aW1yYyDOxLz+OiBcIiIKKworIzogdmVyc2lvbi5jOjg0OQorbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICDTw7untcQgZ3ZpbXJjIMXk1sPOxLz+OiBcIiIKKworIzogdmVyc2lvbi5jOjg1MworbXNnaWQgIjJuZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgtdq2/tfp08O7pyBndmltcmMgzsS8/jogXCIiCisKKyM6IHZlcnNpb24uYzo4NTgKK21zZ2lkICIzcmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgILXayP3X6dPDu6cgZ3ZpbXJjIM7EvP46IFwiIgorCisjOiB2ZXJzaW9uLmM6ODY1Cittc2dpZCAiICAgIHN5c3RlbSBtZW51IGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgICAgIM+1zbOyy7WlxeTWw87EvP46IFwiIgorCisjOiB2ZXJzaW9uLmM6ODczCittc2dpZCAiICBmYWxsLWJhY2sgZm9yICRWSU06IFwiIgorbXNnc3RyICIgICAgICAgICAgICAgICRWSU0g1KTJ6Na1OiBcIiIKKworIzogdmVyc2lvbi5jOjg3OQorbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiICAgICAgICRWSU1SVU5USU1FINSkyejWtTogXCIiCisKKyM6IHZlcnNpb24uYzo4ODMKK21zZ2lkICJDb21waWxhdGlvbjogIgorbXNnc3RyICKx4NLrt73KvTogIgorCisjOiB2ZXJzaW9uLmM6ODg5Cittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAiseDS68b3OiAiCisKKyM6IHZlcnNpb24uYzo4OTQKK21zZ2lkICJMaW5raW5nOiAiCittc2dzdHIgIsG0veG3vcq9OiAiCisKKyM6IHZlcnNpb24uYzo4OTkKK21zZ2lkICIgIERFQlVHIEJVSUxEIgorbXNnc3RyICIgILX3ytSw5rG+IgorCisjOiB2ZXJzaW9uLmM6OTM0Cittc2dpZCAiVklNIC0gVmkgSU1wcm92ZWQiCittc2dzdHIgIlZJTSAtIFZpIElNcHJvdmVkIgorCisjOiB2ZXJzaW9uLmM6OTM2Cittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgIrDmsb4gICAiCisKKyM6IHZlcnNpb24uYzo5MzcKK21zZ2lkICJieSBCcmFtIE1vb2xlbmFhciBldCBhbC4iCittc2dzdHIgIs6su6TIyzogQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorCisjOiB2ZXJzaW9uLmM6OTM4Cittc2dpZCAiVmltIGlzIG9wZW4gc291cmNlIGFuZCBmcmVlbHkgZGlzdHJpYnV0YWJsZSIKK21zZ3N0ciAiVmltIM6qv8nX1NPJt6LQ0LXEv6q3xdS0tPrC68jtvP4iCisKKyM6IHZlcnNpb24uYzo5NDAKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAisO/W+s7auMm077XEv8nBr7b5za8hIgorCisjOiB2ZXJzaW9uLmM6OTQxCittc2dpZCAidHlwZSAgOmhlbHAgaWNjZjxFbnRlcj4gICAgICAgZm9yIGluZm9ybWF0aW9uICIKK21zZ3N0ciAivfjSu7K9y7XD98fryuTI6yAgICAgICAgICA6aGVscCBpY2NmPEVudGVyPiIKKworIzogdmVyc2lvbi5jOjk0MworbXNnaWQgInR5cGUgIDpxPEVudGVyPiAgICAgICAgICAgICAgIHRvIGV4aXQgICAgICAgICAiCittc2dzdHIgItKqzcuz9sfryuTI6yAgICAgICAgICAgICAgICAgIDpxPEVudGVyPiAgICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjk0NAorbXNnaWQgInR5cGUgIDpoZWxwPEVudGVyPiAgb3IgIDxGMT4gIGZvciBvbi1saW5lIGhlbHAiCittc2dzdHIgItTaz9+w79b6x+vK5MjrICAgICAgICAgICAgICAgIDpoZWxwPEVudGVyPiAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjk0NQorbXNnaWQgInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iCittc2dzdHIgItDCsOaxvtDFz6LH68rkyOsgICAgICAgICAgICAgIDpoZWxwIHZlcnNpb242PEVudGVyPiIKKworIzogdmVyc2lvbi5jOjk0OAorbXNnaWQgIlJ1bm5pbmcgaW4gVmkgY29tcGF0aWJsZSBtb2RlIgorbXNnc3RyICJWaSC85sjdxKPKvSIKKworIzogdmVyc2lvbi5jOjk0OQorbXNnaWQgInR5cGUgIDpzZXQgbm9jcDxFbnRlcj4gICAgICAgIGZvciBWaW0gZGVmYXVsdHMiCittc2dzdHIgIsjnufvSqs3qyKvEo8TitKvNsyBWaSDH68rkyOsgOnNldCBub2NwPEVudGVyPiIKKworIzogdmVyc2lvbi5jOjk1MAorbXNnaWQgInR5cGUgIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IGZvciBpbmZvIG9uIHRoaXMiCittc2dzdHIgIsjnufvQ6NKqttQgVmkgvObI3cSjyr29+NK7sr3LtcP3x+vK5MjrIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6OTkwCittc2dpZCAiV0FSTklORzogV2luZG93cyA5NS85OC9NRSBkZXRlY3RlZCIKK21zZ3N0ciAi16LS4jogvOyy4rW9IFdpbmRvd3MgOTUvOTgvTUUiCisKKyM6IHZlcnNpb24uYzo5OTMKK21zZ2lkICJ0eXBlICA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICLI57n70OjSqrbUIFdpbmRvd3MgOTUg1qez1rXEuPy24NDFz6LH68rkyOsgOmhlbHAgd2luZG93czk1PEVudGVyPiIKKworIzogd2luZG93LmM6MjAxCittc2dpZCAiRTQ0MTogVGhlcmUgaXMgbm8gcHJldmlldyB3aW5kb3ciCittc2dzdHIgIkU0NDE6IMO709DUpMDAtLC/2iIKKworIzogd2luZG93LmM6NTY4Cittc2dpZCAiRTQ0MjogQ2FuJ3Qgc3BsaXQgdG9wbGVmdCBhbmQgYm90cmlnaHQgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiRTQ0MjogsrvE3M2syrG31rjutLC/2s6q1/PJz7rN09LPwr3HIgorCisjOiB3aW5kb3cuYzoxMzI3Cittc2dpZCAiRTQ0MzogQ2Fubm90IHJvdGF0ZSB3aGVuIGFub3RoZXIgd2luZG93IGlzIHNwbGl0IgorbXNnc3RyICJFNDQzOiDT0Mbky/y31rjutLC/2sqxsrvE3ND916oiCisKKyM6IHdpbmRvdy5jOjE4MTAKK21zZ2lkICJFNDQ0OiBDYW5ub3QgY2xvc2UgbGFzdCB3aW5kb3ciCittc2dzdHIgIkU0NDQ6ILK7xNy52LHV1+6689K7uPa0sL/aIgorCisjOiB3aW5kb3cuYzoyNDc0Cittc2dpZCAiQWxyZWFkeSBvbmx5IG9uZSB3aW5kb3ciCittc2dzdHIgItLRvq3Wu8qj0ru49rSwv9rByyIKKworIzogd2luZG93LmM6MjUyMQorbXNnaWQgIkU0NDU6IE90aGVyIHdpbmRvdyBjb250YWlucyBjaGFuZ2VzIgorbXNnc3RyICJFNDQ1OiDG5Mv8tLC/2tPQuMSx5LXExNrI3SIKKworIzogd2luZG93LmM6NDM0MQorbXNnaWQgIkU0NDY6IE5vIGZpbGUgbmFtZSB1bmRlciBjdXJzb3IiCittc2dzdHIgIkU0NDY6ILniseq0psO709DOxLz+w/siCisKKyM6IHdpbmRvdy5jOjQ0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0NzogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFNDQ3OiDU2sK3vrbW0NXSsru1vc7EvP4gXCIlc1wiIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjU4NgorbXNnaWQgIkVkaXQgd2l0aCAmbXVsdGlwbGUgVmltcyIKK21zZ3N0ciAi08MgJm11bHRpcGxlIFZpbXMgseC8rSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo1OTIKK21zZ2lkICJFZGl0IHdpdGggc2luZ2xlICZWaW0iCittc2dzdHIgItPDIHNpbmdsZSAmVmltILHgvK0iCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NjA0Cittc2dpZCAiRWRpdCB3aXRoICZWaW0iCittc2dzdHIgItPDICZWaW0gseC8rSIKKworIy4gTm93IGNvbmNhdGVuYXRlCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjYyOAorbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICLTw7Wxx7C1xCBWaW0gseC8rSAtICYiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NzUyCittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgItPDIFZpbSCx4Lyt0aHU8bXEzsS8/iIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo4OTEgLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjkKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwcm9jZXNzOiBDaGVjayBpZiBndmltIGlzIGluIHlvdXIgcGF0aCEiCittc2dzdHIgIrS0vai9+LPMyqew3Dogx+u87LLpZ3ZpbcrHt/HU2r/J1rTQ0MK3vrbW0CEiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6ODkyIC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTA2CisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjk3MAorbXNnaWQgImd2aW1leHQuZGxsIGVycm9yIgorbXNnc3RyICJndmltZXh0LmRsbCCz9rTtIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjkwNQorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAiwre+tsP7zKuzpCIKKworIzogZ2xvYmFscy5oOjg3OAorbXNnaWQgIi0tTm8gbGluZXMgaW4gYnVmZmVyLS0iCittc2dzdHIgIi0tu7qz5cf4zt7XysHPLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTAxOQorbXNnaWQgIkNvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiw/zB7rG7x7/WxtbQts8iCisKKyM6IGdsb2JhbHMuaDoxMDIwCittc2dpZCAiQXJndW1lbnQgcmVxdWlyZWQiCittc2dzdHIgItDo0qrWuMHuss7K/SIKKworIzogZ2xvYmFscy5oOjEwMjEKK21zZ2lkICJFMTA6IFxcIHNob3VsZCBiZSBmb2xsb3dlZCBieSAvLCA/IG9yICYiCittc2dzdHIgIkUxMDogXFwguvPD5tOmuMPT0CAvID8gu/IgJiIKKworIzogZ2xvYmFscy5oOjEwMjMKK21zZ2lkICJFMTE6IEludmFsaWQgaW4gY29tbWFuZC1saW5lIHdpbmRvdzsgPENSPiBleGVjdXRlcywgQ1RSTC1DIHF1aXRzIgorbXNnc3RyICJFMTE6ILK7xNzU2sP8we7Q0LSwv9rW0Mq508OhozxDUj7WtNDQo6xDVFJMLUMgzcuz9iIKKworIzogZ2xvYmFscy5oOjEwMjUKK21zZ2lkICJFMTI6IENvbW1hbmQgbm90IGFsbG93ZWQgZnJvbSBleHJjL3ZpbXJjIGluIGN1cnJlbnQgZGlyIG9yIHRhZyBzZWFyY2giCittc2dzdHIgIkUxMjogZXhyYy92aW1yYyDA77XE1rjB7rK7xNzWtNDQIgorCisjOiBnbG9iYWxzLmg6MTAyNgorbXNnaWQgIkUxMzogRmlsZSBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTEzOiDOxLz+0tG+rbTm1NogKL/J08MgISDHv9bGzOa7uykiCisKKyM6IGdsb2JhbHMuaDoxMDI3Cittc2dpZCAiQ29tbWFuZCBmYWlsZWQiCittc2dzdHIgIsP8we7WtNDQyqew3CIKKworIzogZ2xvYmFscy5oOjEwMjgKK21zZ2lkICJJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAixNqyv7TtzvMiCisKKyM6IGdsb2JhbHMuaDoxMDI5Cittc2dpZCAiSW50ZXJydXB0ZWQiCittc2dzdHIgItLR1tC2zyIKKworIzogZ2xvYmFscy5oOjEwMzAKK21zZ2lkICJFMTQ6IEludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiRTE0OiCyu9X9yLe1xLXY1rciCisKKyM6IGdsb2JhbHMuaDoxMDMxCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAisrvV/ci3tcSyzsr9IgorCisjOiBnbG9iYWxzLmg6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAisrvV/ci3tcSyzsr9OiAlcyIKKworIzogZ2xvYmFscy5oOjEwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246ICVzIgorbXNnc3RyICJFMTU6ILK71f3It7XEse2078q9OiAlcyIKKworIzogZ2xvYmFscy5oOjEwMzYKK21zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCittc2dzdHIgIkUxNjogsrvV/ci3tcS3ts6nIgorCisjOiBnbG9iYWxzLmg6MTAzNworbXNnaWQgIkludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAisrvV/ci3tcTD/MHuIgorCisjOiBnbG9iYWxzLmg6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCIgysfEv8K8IgorCisjOiBnbG9iYWxzLmg6MTA0MgorbXNnaWQgIkUxODogVW5leHBlY3RlZCBjaGFyYWN0ZXJzIGJlZm9yZSAnPSciCittc2dzdHIgIkUxODogJz0nIMeww+az9s/Wwcu07c7ztcTX1rf7IgorCisjOiBnbG9iYWxzLmg6MTA0NAorbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiCx6rzHtcTQ0LrFtO3O8yIKKworIzogZ2xvYmFscy5oOjEwNDUKK21zZ2lkICJFMjA6IE1hcmsgbm90IHNldCIKK21zZ3N0ciAiRTIwOiDDu9PQyei2qLHqvMciCisKKyM6IGdsb2JhbHMuaDoxMDQ2Cittc2dpZCAiRTIxOiBDYW5ub3QgbWFrZSBjaGFuZ2VzLCAnbW9kaWZpYWJsZScgaXMgb2ZmIgorbXNnc3RyICJFMjE6INLyzqogJ21vZGlmaWFibGUnINGhz+7Kx7nYsdW1xKOsy/nS1LK7xNzQ3rjEIgorCisjOiBnbG9iYWxzLmg6MTA0NworbXNnaWQgIkUyMjogU2NyaXB0cyBuZXN0ZWQgdG9vIGRlZXAiCittc2dzdHIgIkUyMjogtd256bX308PMq7bgsuMiCisKKyM6IGdsb2JhbHMuaDoxMDQ4Cittc2dpZCAiRTIzOiBObyBhbHRlcm5hdGUgZmlsZSIKK21zZ3N0ciAiRTIzOiDDu9PQzOa0+rXEzsS8/iIKKworIzogZ2xvYmFscy5oOjEwNDkKK21zZ2lkICJFMjQ6IE5vIHN1Y2ggYWJicmV2aWF0aW9uIgorbXNnc3RyICJFMjQ6IMO709DV4rj2IGFiYnJldmlhdGlvbiC21NOmIgorCisjOiBnbG9iYWxzLmg6MTA1MAorbXNnaWQgIk5vICEgYWxsb3dlZCIKK21zZ3N0ciAisru/ycq508MgJyEnIgorCisjOiBnbG9iYWxzLmg6MTA1MgorbXNnaWQgIkUyNTogR1VJIGNhbm5vdCBiZSB1c2VkOiBOb3QgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIkUyNTog0vLOqrHg0uvKscO709C808jrzbzQzb3nw+a1xLPM0PK0+sLro6zL+dLUsrvE3Mq508PNvNDNvefD5iIKKworIzogZ2xvYmFscy5oOjEwNTUKK21zZ2lkICJFMjY6IEhlYnJldyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNjog0vLOqrHg0uvKscO709C808jrz6OyrsCztcSzzNDytPrC66Osy/nS1LK7xNzKudPDIEhlYnJld1xuIgorCisjOiBnbG9iYWxzLmg6MTA1OAorbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjc6INLyzqqx4NLryrHDu9PQvNPI6yBGYXJzaSC1xLPM0PK0+sLro6zL+dLUsrvE3Mq508MgRmFyc2lcbiIKKworIzogZ2xvYmFscy5oOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4OiBObyBzdWNoIGhpZ2hsaWdodCBncm91cCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI4OiDDu9PQw/vOqiAnJXMnILXEIGhpZ2hsaWdodCBncm91cCIKKworIzogZ2xvYmFscy5oOjEwNjMKK21zZ2lkICJFMjk6IE5vIGluc2VydGVkIHRleHQgeWV0IgorbXNnc3RyICJFMjk6IMO709Cy5cjruf3OxNfWIgorCisjOiBnbG9iYWxzLmg6MTA2NAorbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6IMO709DHsNK7z+7D/MHuIgorCisjOiBnbG9iYWxzLmg6MTA2NQorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IMO709DV4rj2IG1hcHBpbmcgttTTpiIKKworIzogZ2xvYmFscy5oOjEwNjYKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAi1dKyu7W9IgorCisjOiBnbG9iYWxzLmg6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBtYXRjaDogJXMiCittc2dzdHIgItXSsru1vTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMDY4Cittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjogw7vT0M7EvP7D+yIKKworIzogZ2xvYmFscy5oOjEwNjkKK21zZ2lkICJFMzM6IE5vIHByZXZpb3VzIHN1YnN0aXR1dGUgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzM6IMO709DHsNK7uPay6dXSL8zmu7u1xMP8we4iCisKKyM6IGdsb2JhbHMuaDoxMDcwCittc2dpZCAiRTM0OiBObyBwcmV2aW91cyBjb21tYW5kIgorbXNnc3RyICJFMzQ6IMO709DHsNK7uPbD/MHuIgorCisjOiBnbG9iYWxzLmg6MTA3MQorbXNnaWQgIkUzNTogTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzU6IMO709DHsNK7uPay6dXSw/zB7iIKKworIzogZ2xvYmFscy5oOjEwNzIKK21zZ2lkICJObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICKyu7/JyrnTw7e2zqfD/MHuIgorCisjOiBnbG9iYWxzLmg6MTA3NAorbXNnaWQgIkUzNjogTm90IGVub3VnaCByb29tIgorbXNnc3RyICJFMzY6IMO709DX47m7tcS/1bzkIgorCisjOiBnbG9iYWxzLmg6MTA3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAisrvE3LS0vajOxLz+ICVzIgorCisjOiBnbG9iYWxzLmg6MTA3NworbXNnaWQgIkNhbid0IGdldCB0ZW1wIGZpbGUgbmFtZSIKK21zZ3N0ciAisrvE3LXDtb3B2cqxzsS8/sP7IgorCisjOiBnbG9iYWxzLmg6MTA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIrK7xNy08r+qzsS8/iAlcyIKKworIzogZ2xvYmFscy5oOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgcmVhZCBmaWxlICVzIgorbXNnc3RyICKyu8TctsHIoc7EvP4gJXMiCisKKyM6IGdsb2JhbHMuaDoxMDgwCittc2dpZCAiRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAodXNlICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMzc6IM7EvP7E2sjd0tG4xLHktavJ0M60saO05iAov8nTwyAhIMe/1sbWtNDQKSIKKworIzogZ2xvYmFscy5oOjEwODEKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODogv9W1xCAoTnVsbCkgss7K/SIKKworIzogZ2xvYmFscy5oOjEwODMKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiDTprjD0qrT0Mr919YiCisKKyM6IGdsb2JhbHMuaDoxMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDogsrvE3LTyv6q07c7zzsS8/iAlcyIKKworIzogZ2xvYmFscy5oOjEwODkKK21zZ2lkICJFNDE6IE91dCBvZiBtZW1vcnkhIgorbXNnc3RyICJFNDE6IMTatOayu9fjISIKKworIzogZ2xvYmFscy5oOjEwOTIKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZCIKK21zZ3N0ciAi1dKyu7W9xKPKvSIKKworIzogZ2xvYmFscy5oOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0dGVybiBub3QgZm91bmQ6ICVzIgorbXNnc3RyICLV0rK7tb3Eo8q9ICVzIgorCisjOiBnbG9iYWxzLmg6MTA5NQorbXNnaWQgIkFyZ3VtZW50IG11c3QgYmUgcG9zaXRpdmUiCittc2dzdHIgIrLOyv3TprjDysfV/cr9IgorCisjOiBnbG9iYWxzLmg6MTA5NworbXNnaWQgIkU0MjogTm8gRXJyb3JzIgorbXNnc3RyICJFNDI6IMO709C07c7zIgorCisjOiBnbG9iYWxzLmg6MTA5OQorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0MzogxqXF5NfWt/u0rtPQzsrM4iIKKworIzogZ2xvYmFscy5oOjExMDAKK21zZ2lkICJFNDQ6IENvcnJ1cHRlZCByZWdleHAgcHJvZ3JhbSIKK21zZ3N0ciAiRTQ0OiDV/dTyse2078q909DOysziIgorCisjOiBnbG9iYWxzLmg6MTEwMQorbXNnaWQgIkU0NTogJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0ICh1c2UgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU0NTogyei2qCAncmVhZG9ubHknINGhz+4o1ru2wSkgKL/J08MgISDHv9bG1rTQ0CkiCisKKyM6IGdsb2JhbHMuaDoxMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NjogQ2Fubm90IHNldCByZWFkLW9ubHkgdmFyaWFibGUgXCIlc1wiIgorbXNnc3RyICJFNDY6ILK7xNzJ6Lao1ru2wbHkwb8gXCIlc1wiIgorCisjOiBnbG9iYWxzLmg6MTEwNgorbXNnaWQgIkU0NzogRXJyb3Igd2hpbGUgcmVhZGluZyBlcnJvcmZpbGUiCittc2dzdHIgIkU0NzogtsHIobTtzvPOxLz+yqew3CIKKworIzogZ2xvYmFscy5oOjExMDkKK21zZ2lkICJFNDg6IE5vdCBhbGxvd2VkIGluIHNhbmRib3giCittc2dzdHIgIkU0ODogsrvE3NTaIHNhbmRib3ggwO+z9s/WIgorCisjOiBnbG9iYWxzLmg6MTExMQorbXNnaWQgIkU0OTogSW52YWxpZCBzY3JvbGwgc2l6ZSIKK21zZ3N0ciAiRTQ5OiC07c7ztcS59ravtPPQoSIKKworIzogZ2xvYmFscy5oOjExMTIKK21zZ2lkICJFOTE6ICdzaGVsbCcgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICJFOTE6ICdFNzE6INGhz+4gJ3NoZWxsJyDOtMnotqgiCisKKyM6IGdsb2JhbHMuaDoxMTEzCittc2dpZCAiRTcyOiBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUiCittc2dzdHIgIkU3Mjogvbu7u87EvP652LHVtO3O8yIKKworIzogZ2xvYmFscy5oOjExMTQKK21zZ2lkICJFNzM6IHRhZyBzdGFjayBlbXB0eSIKK21zZ3N0ciAiRTczOiCx6septtHVu9LRv9UiCisKKyM6IGdsb2JhbHMuaDoxMTE1Cittc2dpZCAiRTc0OiBDb21tYW5kIHRvbyBjb21wbGV4IgorbXNnc3RyICJFNzQ6IMP8we7Mq7i01NMiCisKKyM6IGdsb2JhbHMuaDoxMTE2Cittc2dpZCAiRTc1OiBOYW1lIHRvbyBsb25nIgorbXNnc3RyICJFNzU6IMP719bMq7OkIgorCisjOiBnbG9iYWxzLmg6MTExNworbXNnaWQgIkU3NjogVG9vIG1hbnkgWyIKK21zZ3N0ciAiRTc2OiDMq7bgIFsiCisKKyM6IGdsb2JhbHMuaDoxMTE4Cittc2dpZCAiRTc3OiBUb28gbWFueSBmaWxlIG5hbWVzIgorbXNnc3RyICJFNzc6IMyrtuDOxLz+w/siCisKKyM6IGdsb2JhbHMuaDoxMTE5Cittc2dpZCAiVHJhaWxpbmcgY2hhcmFjdGVycyIKK21zZ3N0ciAixOPK5Mjrwcu24NPgtcTX1rf7IgorCisjOiBnbG9iYWxzLmg6MTEyMAorbXNnaWQgIkU3ODogVW5rbm93biBtYXJrIgorbXNnc3RyICJFNzg6ILK7xNyw7Mq2tcSx6rzHIgorCisjOiBnbG9iYWxzLmg6MTEyMQorbXNnaWQgIkU3OTogQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIkU3OTogsrvE3MCp1bnNqMXkt/siCisKKyM6IGdsb2JhbHMuaDoxMTIyCittc2dpZCAiRTgwOiBFcnJvciB3aGlsZSB3cml0aW5nIgorbXNnc3RyICJFODA6INC0yOu07c7zIgorCisjOiBnbG9iYWxzLmg6MTEyMworbXNnaWQgIlplcm8gY291bnQiCittc2dzdHIgIsr9tb3B4yAoPykiCisKKyM6IGdsb2JhbHMuaDoxMTI1Cittc2dpZCAiRTgxOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dCIKK21zZ3N0ciAiRTgxOiA8U0lEPiCyu8Tc1Nogc2NyaXB0ILG+zsTN4sq508MuIgpkaWZmIC0tZ2l0IGEvc3JjL3BvL3poX1RXLlVURi04LnBvIGIvc3JjL3BvL3poX1RXLlVURi04LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZjkwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG8vemhfVFcuVVRGLTgucG8KQEAgLTAsMCArMSw2Mzg5IEBACisjIFRyYWRpdGlvbmFsIENoaW5lc2UgVHJhbnNsYXRpb24gZm9yIFZpbQl2aW06c2V0IGZvbGRtZXRob2Q9bWFya2VyOgorIworIyBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyMgRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisjCisjIEZJUlNUIEFVVEhPUiAgRnJhbmNpcyBTLkxpbiA8cGlhaXBAY3NpZS5udHUuZWR1LnR3PiwgMjAwMAorIyBGSVJTVCBSRUxFQVNFIFRodSBKdW4gMTQgMTQ6MjQ6MTcgQ1NUIDIwMDEKKyMKKyMgTGFzdCB1cGRhdGU6IFRodSBBcHIgMjQgMTM6MDk6MDcgQ1NUIDIwMDMgKDYuMmEpCisjCisjIFRvIHVwZGF0ZSwgc2VhcmNoIHBhdHRlcm46CQkvZnV6enlcfF5tc2dzdHIgIiJcKFxuIlwpXEAhCisjCisjIERPIE5PVCBVU0UgV09SRFMgV0lUSCBCQUNLU0xBU0ggKCdcJykgQVMgU0VDT05EIEJZVEUgT0YgQklHNSBDSEFSUworIyBFRzogJ+WKnycsICMg6Kix5Yqf6JOLCisjIOmkkOaer+mWseePruepgOi3mua3mui6oeixueaTuueSnue4t+mrj+WQreatv+S/ngorIyDloqblqInltKTpu6DlrYDlu4TnkLXmhKfnqJ7piL7mmp3lhZ3kuYjlkJLmspTlnbzoi5Llob/ouIoKKyMgeW91IGNhbiByZXBsYWNlIHRoZXNlIGNoYXJhY3RlcnMgd2l0aCBhbHRlcm5hdGl2ZSB3b3Jkcy4KKyMgVEhJUyBXSUxMIENBVVNFIElOQ09NUEFUSUJMRSBPTiBnZXR0ZXh0IDAuMTAuMzYrCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBWaW0oVHJhZGl0aW9uYWwgQ2hpbmVzZSlcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwMy0wNC0yNCAxMzowNiswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogTW9uIEZlYiAxOSAyMjo0OToyMSBDU1QgMjAwMVxuIgorIkxhc3QtVHJhbnNsYXRvcjogRnJhbmNpcyBTLkxpbiA8cGlhaXBAY3NpZS5udHUuZWR1LnR3PlxuIgorIkxhbmd1YWdlLVRlYW06IEZyYW5jaXMgUy5MaW4gPHBpYWlwQGNzaWUubnR1LmVkdS50dz4sIENlY2lsIFNoZW5nICIKKyI8Yjc1MDYwMjJAY3NpZS5udHUuZWR1LnR3PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKworIzogYnVmZmVyLmM6OTcKK21zZ2lkICJFODI6IENhbm5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLCBleGl0aW5nLi4uIgorbXNnc3RyICJFODI6IOeEoeazlemFjee9ruS7u+S9lee3qeihneWNgO+8jOmboumWi+eoi+W8jy4uLiIKKworIzogYnVmZmVyLmM6MTAwCittc2dpZCAiRTgzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyLCB1c2luZyBvdGhlciBvbmUuLi4iCittc2dzdHIgIkU4Mzog54Sh5rOV6YWN572u57ep6KGd5Y2A77yM5L2/55So5Y+m5LiA5YCL57ep6KGd5Y2ALi4uLiIKKworIzogYnVmZmVyLmM6Nzk3Cittc2dpZCAiRTUxNTogTm8gYnVmZmVycyB3ZXJlIHVubG9hZGVkIgorbXNnc3RyICJFNTE1OiDmspLmnInph4vmlL7ku7vkvZXnt6nooZ3ljYAiCisKKyM6IGJ1ZmZlci5jOjc5OQorbXNnaWQgIkU1MTY6IE5vIGJ1ZmZlcnMgd2VyZSBkZWxldGVkIgorbXNnc3RyICJFNTE2OiDmspLmnInliKrpmaTku7vkvZXnt6nooZ3ljYAiCisKKyM6IGJ1ZmZlci5jOjgwMQorbXNnaWQgIkU1MTc6IE5vIGJ1ZmZlcnMgd2VyZSB3aXBlZCBvdXQiCittc2dzdHIgIkU1MTc6IOaykuaciea4hemZpOS7u+S9lee3qeihneWNgCIKKworIzogYnVmZmVyLmM6ODA5Cittc2dpZCAiMSBidWZmZXIgdW5sb2FkZWQiCittc2dzdHIgIuW3sumHi+aUvuS4gOWAi+e3qeihneWNgCIKKworIzogYnVmZmVyLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgdW5sb2FkZWQiCittc2dzdHIgIuW3sumHi+aUviAlZCDlgIvnt6nooZ3ljYAiCisKKyM6IGJ1ZmZlci5jOjgxNgorbXNnaWQgIjEgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIuW3suWIqumZpOS4gOWAi+e3qeihneWNgCIKKworIzogYnVmZmVyLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgZGVsZXRlZCIKK21zZ3N0ciAi5bey5Yiq6ZmkICVkIOWAi+e3qeihneWNgCIKKworIzogYnVmZmVyLmM6ODIzCittc2dpZCAiMSBidWZmZXIgd2lwZWQgb3V0IgorbXNnc3RyICLlt7LliKrpmaTkuIDlgIvnt6nooZ3ljYAiCisKKyM6IGJ1ZmZlci5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBidWZmZXJzIHdpcGVkIG91dCIKK21zZ3N0ciAi5bey5Yiq6ZmkICVkIOWAi+e3qeihneWNgCIKKworIzogYnVmZmVyLmM6ODg2Cittc2dpZCAiRTg0OiBObyBtb2RpZmllZCBidWZmZXIgZm91bmQiCittc2dzdHIgIkU4NDog5rKS5pyJ5L+u5pS56YGO55qE57ep6KGd5Y2AIgorCisjLiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorIzogYnVmZmVyLmM6OTI1Cittc2dpZCAiRTg1OiBUaGVyZSBpcyBubyBsaXN0ZWQgYnVmZmVyIgorbXNnc3RyICJFODU6IOaykuacieWIl+WHuueahOe3qeihneWNgCIKKworIzogYnVmZmVyLmM6OTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU4NjogQ2Fubm90IGdvIHRvIGJ1ZmZlciAlbGQiCittc2dzdHIgIkU4Njog54Sh5rOV5YiH5o+b5Yiw56ysICVsZCDlgIvnt6nooZ3ljYAiCisKKyM6IGJ1ZmZlci5jOjk0MAorbXNnaWQgIkU4NzogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTg3OiDnhKHms5XliIfmj5vliLDmm7TlvozpnaLnmoTnt6nooZ3ljYAiCisKKyM6IGJ1ZmZlci5jOjk0MgorbXNnaWQgIkU4ODogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBidWZmZXIiCittc2dzdHIgIkU4ODog54Sh5rOV5YiH5o+b5Yiw5pu05YmN6Z2i55qE57ep6KGd5Y2AIgorCisjOiBidWZmZXIuYzo5NjYKK21zZ2lkICJFODk6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgJWxkIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU4OTog5bey5pu05pS56YGO57ep6KGd5Y2AICVsZCDkvYblsJrmnKrlrZjmqpQgKOWPr+eUqCAhIOW8t+WItuWft+ihjCkiCisKKyM6IGJ1ZmZlci5jOjk4MgorbXNnaWQgIkU5MDogQ2Fubm90IHVubG9hZCBsYXN0IGJ1ZmZlciIKK21zZ3N0ciAiRTkwOiDnhKHms5Xph4vmlL7mnIDlvozkuIDlgIvnt6nooZ3ljYAiCisKKyM6IGJ1ZmZlci5jOjE0OTQKK21zZ2lkICJXMTQ6IFdhcm5pbmc6IExpc3Qgb2YgZmlsZSBuYW1lcyBvdmVyZmxvdyIKK21zZ3N0ciAiVzE0OiDorablkYo6IOaqlOWQjemBjuWkmiIKKworIzogYnVmZmVyLmM6MTY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFOTI6IEJ1ZmZlciAlbGQgbm90IGZvdW5kIgorbXNnc3RyICJFOTI6IOaJvuS4jeWIsOesrCAlbGQg5YCL57ep6KGd5Y2AIgorCisjOiBidWZmZXIuYzoxODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5Mzog5om+5Yiw5LiA5YCL5Lul5LiK55qEICVzIgorCisjOiBidWZmZXIuYzoxODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NDogTm8gbWF0Y2hpbmcgYnVmZmVyIGZvciAlcyIKK21zZ3N0ciAiRTk0OiDmib7kuI3liLAgJXMiCisKKyM6IGJ1ZmZlci5jOjIyOTcgZXhfZG9jbWQuYzo2NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkIgorbXNnc3RyICLooYwgJWxkIgorCisjOiBidWZmZXIuYzoyMzgwCittc2dpZCAiRTk1OiBCdWZmZXIgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkU5NTog5bey5pyJ57ep6KGd5Y2A5L2/55So6YCZ5YCL5ZCN5a2XIgorCisjOiBidWZmZXIuYzoyNjczCittc2dpZCAiIFtNb2RpZmllZF0iCittc2dzdHIgIiBb5bey5L+u5pS5XSIKKworIzogYnVmZmVyLmM6MjY3OAorbXNnaWQgIltOb3QgZWRpdGVkXSIKK21zZ3N0ciAiW+acque3qOi8r10iCisKKyM6IGJ1ZmZlci5jOjI2ODMKK21zZ2lkICJbTmV3IGZpbGVdIgorbXNnc3RyICJb5paw5qqU5qGIXSIKKworIzogYnVmZmVyLmM6MjY4NAorbXNnaWQgIltSZWFkIGVycm9yc10iCittc2dzdHIgIlvoroDlj5bpjK/oqqRdIgorCisjOiBidWZmZXIuYzoyNjg2IGZpbGVpby5jOjE5MTQKK21zZ2lkICJbcmVhZG9ubHldIgorbXNnc3RyICJb5ZSv6K6AXSIKKworIzogYnVmZmVyLmM6MjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgLS0lZCUlLS0iCittc2dzdHIgIuihjOaVuCAxIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAtLSVkJSUtLSIKK21zZ3N0ciAi6KGM5pW4ICVsZCAtLSVkJSUtLSIKKworIzogYnVmZmVyLmM6MjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZCBvZiAlbGQgLS0lZCUlLS0gY29sICIKK21zZ3N0ciAi6KGMICVsZC8lbGQgLS0lZCUlLS0g5qyEICIKKworIzogYnVmZmVyLmM6MjgxMQorbXNnaWQgIltObyBmaWxlXSIKK21zZ3N0ciAiW+acquWRveWQjV0iCisKKyMuIG11c3QgYmUgYSBoZWxwIGJ1ZmZlcgorIzogYnVmZmVyLmM6Mjg1MQorbXNnaWQgImhlbHAiCittc2dzdHIgIlvovJTliqnoqqrmmI5dIgorCisjOiBidWZmZXIuYzozNDA1IHNjcmVlbi5jOjQ5NDMKK21zZ2lkICJbaGVscF0iCittc2dzdHIgIlvovJTliqnoqqrmmI5dIgorCisjOiBidWZmZXIuYzozNDM3IHNjcmVlbi5jOjQ5NDkKK21zZ2lkICJbUHJldmlld10iCittc2dzdHIgIlvpoJDopr1dIgorCisjOiBidWZmZXIuYzozNzA4Cittc2dpZCAiQWxsIgorbXNnc3RyICLlhajpg6giCisKKyM6IGJ1ZmZlci5jOjM3MDgKK21zZ2lkICJCb3QiCittc2dzdHIgIuW6leerryIKKworIzogYnVmZmVyLmM6MzcxMAorbXNnaWQgIlRvcCIKK21zZ3N0ciAi6aCC56uvIgorCisjOiBidWZmZXIuYzo0NDU0Cittc2dpZCAiIgorIlxuIgorIiMgQnVmZmVyIGxpc3Q6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIOe3qeihneWNgOWIl+ihqDpcbiIKKworIzogYnVmZmVyLmM6NDQ4NworbXNnaWQgIltFcnJvciBMaXN0XSIKK21zZ3N0ciAiW+mMr+iqpOWIl+ihqF0iCisKKyM6IGJ1ZmZlci5jOjQ1MDAgbWVtbGluZS5jOjE1MDEKK21zZ2lkICJbTm8gRmlsZV0iCittc2dzdHIgIlvmnKrlkb3lkI1dIgorCisjOiBidWZmZXIuYzo0ODAzCittc2dpZCAiIgorIlxuIgorIi0tLSBTaWducyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g56ym6JmfIC0tLSIKKworIzogYnVmZmVyLmM6NDgxMworIywgYy1mb3JtYXQKK21zZ2lkICJTaWducyBmb3IgJXM6IgorbXNnc3RyICIlcyDnmoTnrKbomZ86IgorCisjOiBidWZmZXIuYzo0ODE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBsaW5lPSVsZCAgaWQ9JWQgIG5hbWU9JXMiCittc2dzdHIgIiAgICDooYw9JWxkICBpZD0lZCAg5ZCN56ixPSVzIgorCisjOiBkaWZmLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5NjogQ2FuIG5vdCBkaWZmIG1vcmUgdGhhbiAlbGQgYnVmZmVycyIKK21zZ3N0ciAiRTk2OiDnhKHms5Xmr5TovIMoZGlmZikgJWxk5YCL5Lul5LiK55qE57ep6KGd5Y2AIgorCisjOiBkaWZmLmM6NjUxCittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6IOS4jeiDveW7uueriyAiCisKKyM6IGRpZmYuYzo3NTAKK21zZ2lkICJQYXRjaCBmaWxlIgorbXNnc3RyICJQYXRjaCDmqpTmoYgiCisKKyM6IGRpZmYuYzoxMDAxCittc2dpZCAiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIKK21zZ3N0ciAiRTk4OiDnhKHms5XoroDlj5YgZGlmZiDnmoTovLjlh7oiCisKKyM6IGRpZmYuYzoxNzQyCittc2dpZCAiRTk5OiBDdXJyZW50IGJ1ZmZlciBpcyBub3QgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFOTk6IOebruWJjeeahOe3qeihneWNgOS4jeaYr+WcqCBkaWZmIOaooeW8jyIKKworIzogZGlmZi5jOjE3NTQKK21zZ2lkICJFMTAwOiBObyBvdGhlciBidWZmZXIgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAwOiDmspLmnInnt6nooZ3ljYDlnKggZGlmZiDmqKHlvI8iCisKKyM6IGRpZmYuYzoxNzYyCittc2dpZCAiRTEwMTogTW9yZSB0aGFuIHR3byBidWZmZXJzIGluIGRpZmYgbW9kZSwgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlIgorbXNnc3RyICJFMTAxOiDmnInlhanlgIvku6XkuIrnmoTnt6nooZ3ljYDlnKggZGlmZiDmqKHlvI/vvIznhKHms5XmsbrlrpropoHnlKjlk6rkuIDlgIsiCisKKyM6IGRpZmYuYzoxNzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDI6IENhbid0IGZpbmQgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTEwMjog5om+5LiN5Yiw57ep6KGd5Y2AOiBcIiVzXCIiCisKKyM6IGRpZmYuYzoxNzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzog57ep6KGd5Y2AIFwiJXNcIiDkuI3mmK/lnKggZGlmZiDmqKHlvI8iCisKKyM6IGRpZ3JhcGguYzoyMTcyCittc2dpZCAiRTEwNDogRXNjYXBlIG5vdCBhbGxvd2VkIGluIGRpZ3JhcGgiCittc2dzdHIgIkUxMDQ6IOikh+WQiOWtl+WFgyhkaWdyYXBoKeS4reS4jeiDveS9v+eUqCBFc2NhcGUiCisKKyM6IGRpZ3JhcGguYzoyMzQ0Cittc2dpZCAiRTU0NDogS2V5bWFwIGZpbGUgbm90IGZvdW5kIgorbXNnc3RyICJFNTQ0OiDmib7kuI3liLAga2V5bWFwIOaqlCIKKworIzogZGlncmFwaC5jOjIzNzEKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IOS9v+eUqCA6bG9hZGtleW1hcCAiCisKKyM6IGVkaXQuYzo0MAorbXNnaWQgIiBLZXl3b3JkIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIOmXnOmNteWtl+iHquWLleWujOaIkCAoXk4vXlApIgorCisjLiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4KKyM6IGVkaXQuYzo0MQorbXNnaWQgIiBeWCBtb2RlICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eVi9eTi9eUCkiCittc2dzdHIgIiBeWCDmqKHlvI8gKF5FL15ZL15ML15dL15GL15JL15LL15EL15OL15QKSIKKworIy4gU2Nyb2xsIGhhcyBpdCdzIG93biBtc2dzLCBpbiBpdCdzIHBsYWNlIHRoZXJlIGlzIHRoZSBtc2cgZm9yIGxvY2FsCisjLiAqIGN0cmxfeF9tb2RlID0gMCAoZWcgY29udGludWVfc3RhdHVzICYgQ09OVF9MT0NBTCkgIC0tIEFjZXZlZG8KKyM6IGVkaXQuYzo0NAorbXNnaWQgIiBLZXl3b3JkIExvY2FsIGNvbXBsZXRpb24gKF5OL15QKSIKK21zZ3N0ciAiIOWNgOWfn+mXnOmNteWtl+iHquWLleWujOaIkCAoXk4vXlApIgorCisjOiBlZGl0LmM6NDUKK21zZ2lkICIgV2hvbGUgbGluZSBjb21wbGV0aW9uICheTC9eTi9eUCkiCittc2dzdHIgIiDmlbTooYzoh6rli5XlrozmiJAgKF5ML15OL15QKSIKKworIzogZWRpdC5jOjQ2Cittc2dpZCAiIEZpbGUgbmFtZSBjb21wbGV0aW9uICheRi9eTi9eUCkiCittc2dzdHIgIiDmqpTlkI3oh6rli5XlrozmiJAgKF5GL15OL15QKSIKKworIzogZWRpdC5jOjQ3Cittc2dpZCAiIFRhZyBjb21wbGV0aW9uICheXS9eTi9eUCkiCittc2dzdHIgIiDmqJnnsaToh6rli5XlrozmiJAgKF5dL15OL15QKSIKKworIzogZWRpdC5jOjQ4Cittc2dpZCAiIFBhdGggcGF0dGVybiBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiDot6/lvpHoh6rli5XlrozmiJAgKF5OL15QKSIKKworIzogZWRpdC5jOjQ5Cittc2dpZCAiIERlZmluaXRpb24gY29tcGxldGlvbiAoXkQvXk4vXlApIgorbXNnc3RyICIg5a6a576p6Ieq5YuV5a6M5oiQICheRC9eTi9eUCkiCisKKyM6IGVkaXQuYzo1MQorbXNnaWQgIiBEaWN0aW9uYXJ5IGNvbXBsZXRpb24gKF5LL15OL15QKSIKK21zZ3N0ciAiIOWtl+WFuOiHquWLleWujOaIkCAoXksvXk4vXlApIgorCisjOiBlZGl0LmM6NTIKK21zZ2lkICIgVGhlc2F1cnVzIGNvbXBsZXRpb24gKF5UL15OL15QKSIKK21zZ3N0ciAiIFRoZXNhdXJ1cyDoh6rli5XlrozmiJAgKF5UL15OL15QKSIKKworIzogZWRpdC5jOjUzCittc2dpZCAiIENvbW1hbmQtbGluZSBjb21wbGV0aW9uICheVi9eTi9eUCkiCittc2dzdHIgIiDlkb3ku6TliJfoh6rli5XlrozmiJAgKF5WL15OL15QKSIKKworIzogZWRpdC5jOjU2Cittc2dpZCAiSGl0IGVuZCBvZiBwYXJhZ3JhcGgiCittc2dzdHIgIuW3suWIsOauteiQvee1kOWwviIKKworIzogZWRpdC5jOjk0MQorbXNnaWQgIid0aGVzYXVydXMnIG9wdGlvbiBpcyBlbXB0eSIKK21zZ3N0ciAi6YG46aCFICd0aGVzYXVydXMnIOacquioreWumiIKKworIzogZWRpdC5jOjExNDUKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICLpgbjpoIUgJ2RpY3Rpb25hcnknIOacquioreWumiIKKworIzogZWRpdC5jOjIxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgZGljdGlvbmFyeTogJXMiCittc2dzdHIgIuaOg+eehOWtl+WFuDogJXMiCisKKyM6IGVkaXQuYzoyMzM2Cittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKOaPkuWFpSkgU2Nyb2xsICheRS9eWSkiCisKKyM6IGVkaXQuYzoyMzM4Cittc2dpZCAiIChyZXBsYWNlKSBTY3JvbGwgKF5FL15ZKSIKK21zZ3N0ciAiICjlj5bku6MpIFNjcm9sbCAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZzogJXMiCittc2dzdHIgIuaOg+eehOS4rTogJXMiCisKKyM6IGVkaXQuYzoyNjg3Cittc2dpZCAiU2Nhbm5pbmcgdGFncy4iCittc2dzdHIgIuaOg+eehOaomeexpC4iCisKKyM6IGVkaXQuYzozMzQ5Cittc2dpZCAiIEFkZGluZyIKK21zZ3N0ciAiIOWinuWKoCIKKworIy4gc2hvd21vZGUgbWlnaHQgcmVzZXQgdGhlIGludGVybmFsIGxpbmUgcG9pbnRlcnMsIHNvIGl0IG11c3QKKyMuICogYmUgY2FsbGVkIGJlZm9yZSBsaW5lID0gbWxfZ2V0KCksIG9yIHdoZW4gdGhpcyBhZGRyZXNzIGlzIG5vCisjLiAqIGxvbmdlciBuZWVkZWQuICAtLSBBY2V2ZWRvLgorIy4KKyM6IGVkaXQuYzozMzk4Cittc2dpZCAiLS0gU2VhcmNoaW5nLi4uIgorbXNnc3RyICItLSDmkJzlsIvkuK0uLi4iCisKKyM6IGVkaXQuYzozNDU0Cittc2dpZCAiQmFjayBhdCBvcmlnaW5hbCIKK21zZ3N0ciAi5Zue5Yiw6LW36bueIgorCisjOiBlZGl0LmM6MzQ1OQorbXNnaWQgIldvcmQgZnJvbSBvdGhlciBsaW5lIgorbXNnc3RyICLlvp7liKXooYzplovlp4vnmoTlrZcgKD8pIgorCisjOiBlZGl0LmM6MzQ2NAorbXNnaWQgIlRoZSBvbmx5IG1hdGNoIgorbXNnc3RyICLlj6rmnInmraTpoIXnrKblkIgiCisKKyM6IGVkaXQuYzozNTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICLmib7liLAgJWQgLyAlZCIKKworIzogZWRpdC5jOjM1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF0Y2ggJWQiCittc2dzdHIgIuespuWQiCAlZCIKKworIy4gU2tpcCBmdXJ0aGVyIGFyZ3VtZW50cyBidXQgZG8gY29udGludWUgdG8KKyMuICogc2VhcmNoIGZvciBhIHRyYWlsaW5nIGNvbW1hbmQuCisjOiBldmFsLmM6ODg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDY6IFVua25vd24gdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwNjog5pyq5a6a576p55qE6K6K5pW4OiBcIiVzXCIiCisKKyM6IGV2YWwuYzoxMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDc6IE1pc3NpbmcgYnJhY2VzOiAlcyIKK21zZ3N0ciAiRTEwNzog57y65bCR5bCN5oeJ55qE5ous6JmfOiAlcyIKKworIzogZXZhbC5jOjEyOTAgZXZhbC5jOjEzMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwODogTm8gc3VjaCB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA4OiDnhKHmraTorormlbg6IFwiJXNcIiIKKworIzogZXZhbC5jOjE1NjAKK21zZ2lkICJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciCittc2dzdHIgIkUxMDk6ICc/JyDlvoznvLrlsJEgJzonIgorCisjOiBldmFsLmM6MjE3NgorbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiDnvLrlsJHlsI3mh4nnmoQgXCIpXCIiCisKKyM6IGV2YWwuYzoyMjMzCittc2dpZCAiRTExMTogTWlzc2luZyAnXSciCittc2dzdHIgIkUxMTE6IOe8uuWwkeWwjeaHieeahCBcIl1cIiIKKworIzogZXZhbC5jOjIzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMjogT3B0aW9uIG5hbWUgbWlzc2luZzogJXMiCittc2dzdHIgIkUxMTI6IOe8uuWwkemBuOmgheWQjeeosTogJXMiCisKKyM6IGV2YWwuYzoyMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTM6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTExMzog5LiN5q2j56K655qE6YG46aCFOiAlcyIKKworIzogZXZhbC5jOjIzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExNDogTWlzc2luZyBxdW90ZTogJXMiCittc2dzdHIgIkUxMTQ6IOe8uuWwkeW8leiZnzogJXMiCisKKyM6IGV2YWwuYzoyNTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTU6IE1pc3NpbmcgcXVvdGU6ICVzIgorbXNnc3RyICJFMTE1OiDnvLrlsJHlvJXomZ86ICVzIgorCisjOiBldmFsLmM6Mjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE2OiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJXMiCittc2dzdHIgIkUxMTY6IOWHveW8jyAlcyDnmoTlvJXmlbjkuI3mraPnoroiCisKKyM6IGV2YWwuYzoyODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTE3OiDmnKrlrprnvqnnmoTlh73lvI86ICVzIgorCisjOiBldmFsLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE4OiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExODog5Ye95byPICVzIOeahOW8leaVuOmBjuWkmiIKKworIzogZXZhbC5jOjI4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOTog5Ye95byPICVzIOeahOW8leaVuOWkquWwkSIKKworIzogZXZhbC5jOjI4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMDogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQ6ICVzIgorbXNnc3RyICJFMTIwOiA8U0lEPiDkuI3og73lnKggc2NyaXB0IOacrOaWh+WkluS9v+eUqDogJXMiCisKKyMuCisjLiAqIFllcyB0aGlzIGlzIHVnbHksIEkgZG9uJ3QgcGFydGljdWxhcmx5IGxpa2UgaXQgZWl0aGVyLiAgQnV0IGRvaW5nIGl0CisjLiAqIHRoaXMgd2F5IGhhcyB0aGUgY29tcGVsbGluZyBhZHZhbnRhZ2UgdGhhdCB0cmFuc2xhdGlvbnMgbmVlZCBub3QgdG8KKyMuICogYmUgdG91Y2hlZCBhdCBhbGwuICBTZWUgYmVsb3cgd2hhdCAnb2snIGFuZCAneW5jJyBhcmUgdXNlZCBmb3IuCisjLgorIzogZXZhbC5jOjM0NjUgZ3VpLmM6NDIzOCBndWlfZ3RrLmM6MTk5MQorbXNnaWQgIiZPayIKK21zZ3N0ciAi56K65a6aKCZPKSIKKworIzogZXZhbC5jOjQwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiKy0lcyUzbGQgbGluZXM6ICIKK21zZ3N0ciAiKy0lcyUzbGQg6KGMOiAiCisKKyM6IGV2YWwuYzo1MTQ5Cittc2dpZCAiIgorIiZPS1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyLnorrlrpooJk8pXG4iCisi5Y+W5raIKCZDKSIKKworIzogZXZhbC5jOjUxODIKK21zZ2lkICJjYWxsZWQgaW5wdXRyZXN0b3JlKCkgbW9yZSBvZnRlbiB0aGFuIGlucHV0c2F2ZSgpIgorbXNnc3RyICLlkbzlj6sgaW5wdXRyZXN0b3JlKCkg55qE5qyh5pW45q+UIGlucHV0c2F2ZSgpIOmChOWkmiIKKworIzogZXZhbC5jOjYwMzYKK21zZ2lkICJFMjQwOiBObyBjb25uZWN0aW9uIHRvIFZpbSBzZXJ2ZXIiCittc2dzdHIgIkUyNDA6IOaykuacieiIhyBWaW0gU2VydmVyIOW7uueri+mAo+e3miIKKworIzogZXZhbC5jOjYxMzMKK21zZ2lkICJFMjc3OiBVbmFibGUgdG8gcmVhZCBhIHNlcnZlciByZXBseSIKK21zZ3N0ciAiRTI3Nzog54Sh5rOV6K6A5Y+W5Ly65pyN5Zmo55qE5Zue5oeJIgorCisjOiBldmFsLmM6NjE2MQorbXNnaWQgIkUyNTg6IFVuYWJsZSB0byBzZW5kIHRvIGNsaWVudCIKK21zZ3N0ciAiRTI1ODog54Sh5rOV5YKz6YCB5YiwIGNsaWVudCIKKworIzogZXZhbC5jOjYyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0MTogVW5hYmxlIHRvIHNlbmQgdG8gJXMiCittc2dzdHIgIkUyNDE6IOeEoeazleWCs+mAgeWIsCAlcyIKKworIzogZXZhbC5jOjYzMDkKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIijkuI3mraPnoropIgorCisjOiBldmFsLmM6NzQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgorbXNnc3RyICJFMTIxOiDorormlbggJXMg5bCa5pyq5a6a576pIgorCisjOiBldmFsLmM6NzgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJFNDYxOiDkuI3lkIjms5XnmoTorormlbjlkI3nqLE6ICVzIgorCisjOiBldmFsLmM6ODEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIyOiBGdW5jdGlvbiAlcyBhbHJlYWR5IGV4aXN0cywgYWRkICEgdG8gcmVwbGFjZSBpdCIKK21zZ3N0ciAiRTEyMjog5Ye95byPICVzIOW3sue2k+WtmOWcqCwg6KuL5L2/55SoICEg5by35Yi25Y+W5LujIgorCisjOiBldmFsLmM6ODE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiDlh73lvI8gJXMg5bCa5pyq5a6a576pIgorCisjOiBldmFsLmM6ODIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6IOe8uuWwkSBcIihcIjogJXMiCisKKyM6IGV2YWwuYzo4MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjU6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMTI1OiDlj4PmlbjkuI3mraPnoro6ICVzIgorCisjOiBldmFsLmM6ODMxMworbXNnaWQgIkUxMjY6IE1pc3NpbmcgOmVuZGZ1bmN0aW9uIgorbXNnc3RyICJFMTI2OiDnvLrlsJEgOmVuZGZ1bmN0aW9uIgorCisjOiBldmFsLmM6ODM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzog5Ye95byPICVzIOato+WcqOS9v+eUqOS4re+8jOeEoeazlemHjeaWsOWumue+qSIKKworIzogZXZhbC5jOjg0NjQKK21zZ2lkICJFMTI5OiBGdW5jdGlvbiBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMTI5OiDpnIDopoHlh73lvI/lkI3nqLEiCisKKyM6IGV2YWwuYzo4NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogJXMiCittc2dzdHIgIkUxMjg6IOWHveW8j+WQjeeoseesrOS4gOWAi+Wtl+avjeW/hemgiOWkp+WvqzogJXMiCisKKyM6IGV2YWwuYzo4NzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzA6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMzA6IOWHveW8jyAlcyDlsJrmnKrlrprnvqkiCisKKyM6IGV2YWwuYzo4NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzE6IENhbm5vdCBkZWxldGUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEzMTog5Ye95byPICVzIOato+WcqOS9v+eUqOS4re+8jOeEoeazleWIqumZpCIKKworIzogZXZhbC5jOjg3NjAKK21zZ2lkICJFMTMyOiBGdW5jdGlvbiBjYWxsIGRlcHRoIGlzIGhpZ2hlciB0aGFuICdtYXhmdW5jZGVwdGgnIgorbXNnc3RyICJFMTMyOiDlh73lvI/pgZ7ov7Tlkbzlj6vlsaTmlbjotoXpgY4gJ21heGZ1bmNkZXB0aCciCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjg4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FsbGluZyAlcyIKK21zZ3N0ciAi5ZG85Y+rICVzIgorCisjOiBldmFsLmM6ODg2NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhYm9ydGVkIgorbXNnc3RyICIlcyDooqvlvLfliLbkuK3mlrfln7fooYwiCisKKyM6IGV2YWwuYzo4ODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyAjJWxkIgorbXNnc3RyICIlcyDlgrPlm57lgLwgIyVsZCAiCisKKyM6IGV2YWwuYzo4ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJldHVybmluZyBcIiVzXCIiCittc2dzdHIgIiVzIOWCs+WbnuWAvCBcIiVzXCIiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXZhbC5jOjg4ODggZXhfY21kczIuYzoyMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbnRpbnVpbmcgaW4gJXMiCittc2dzdHIgIue5vOe6jDogJXMiCisKKyM6IGV2YWwuYzo4OTM1Cittc2dpZCAiRTEzMzogOnJldHVybiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxMzM6IDpyZXR1cm4g5b+F6aCI5Zyo5Ye95byP6KOh5L2/55SoIgorCisjOiBldmFsLmM6OTI2NgorbXNnaWQgIiIKKyJcbiIKKyIjIGdsb2JhbCB2YXJpYWJsZXM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIOWFqOWfn+iuiuaVuDpcbiIKKworIzogZXhfY21kcy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2N0YWwgJTAzbyIKK21zZ3N0ciAiPCVzPiVzJXMgICVkLCAg5Y2B5YWt6YCy5L2NICUwMngsICDlhavpgLLkvY0gJTAzbyIKKworIzogZXhfY21kcy5jOjQzMworbXNnaWQgIkUxMzQ6IE1vdmUgbGluZXMgaW50byB0aGVtc2VsdmVzIgorbXNnc3RyICJFMTM0OiDnhKHms5XmiorooYznp7vliLDlroPoh6rlt7LlhaciCisKKyM6IGV4X2NtZHMuYzo1MDIKK21zZ2lkICIxIGxpbmUgbW92ZWQiCittc2dzdHIgIuW3suaQrOenuyAxIOihjCIKKworIzogZXhfY21kcy5jOjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgbW92ZWQiCittc2dzdHIgIuW3suaQrOenuyAlbGQg6KGMIgorCisjOiBleF9jbWRzLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBmaWx0ZXJlZCIKK21zZ3N0ciAi5bey6JmV55CGICVsZCDooYwiCisKKyM6IGV4X2NtZHMuYzo5MzcKK21zZ2lkICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZHMgbXVzdCBub3QgY2hhbmdlIGN1cnJlbnQgYnVmZmVyIgorbXNnc3RyICJFMTM1OiAqRmlsdGVyKiBBdXRvY29tbWFuZCDkuI3lj6/ku6Xmm7TmlLnnt6nooZ3ljYDnmoTlhaflrrkiCisKKyM6IGV4X2NtZHMuYzoxMDIyCittc2dpZCAiW05vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlXVxuIgorbXNnc3RyICJb5pu05paw5b6M5bCa5pyq5YSy5a2YXVxuIgorCisjOiBleF9jbWRzLmM6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlc3ZpbWluZm86ICVzIGluIGxpbmU6ICIKK21zZ3N0ciAiJXN2aW1pbmZvOiAlcyDlnKjooYzkuK06ICIKKworIzogZXhfY21kcy5jOjEyNzMKK21zZ2lkICJFMTM2OiB2aW1pbmZvOiBUb28gbWFueSBlcnJvcnMsIHNraXBwaW5nIHJlc3Qgb2YgZmlsZSIKK21zZ3N0ciAiRTEzNjogdmltaW5mbzog6YGO5aSa6Yyv6KqkLCDlv73nlaXmqpTmoYjlhbbppJjpg6jliIYiCisKKyM6IGV4X2NtZHMuYzoxMzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiVzJXMlcyIKK21zZ3N0ciAi6K6A5Y+WIHZpbWluZm8g5qqU5qGIIFwiJXNcIiVzJXMlcyIKKworIzogZXhfY21kcy5jOjEzMDMKK21zZ2lkICIgaW5mbyIKK21zZ3N0ciAiIOioiuaBryIKKworIzogZXhfY21kcy5jOjEzMDQKK21zZ2lkICIgbWFya3MiCittc2dzdHIgIiDmqJnoqJgiCisKKyM6IGV4X2NtZHMuYzoxMzA1Cittc2dpZCAiIEZBSUxFRCIKK21zZ3N0ciAiIOWkseaVlyIKKworIzogZXhfY21kcy5jOjEzOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IFZpbWluZm8g5qqU5qGI54Sh5rOV5a+r5YWlOiAlcyIKKworIzogZXhfY21kcy5jOjE1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzODogQ2FuJ3Qgd3JpdGUgdmltaW5mbyBmaWxlICVzISIKK21zZ3N0ciAiRTEzODog54Sh5rOV5a+r5YWlIHZpbWluZm8g5qqU5qGIICVzICEiCisKKyM6IGV4X2NtZHMuYzoxNTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAi5a+r5YWlIHZpbWluZm8g5qqU5qGIIFwiJXNcIiDkuK0iCisKKyMuIFdyaXRlIHRoZSBpbmZvOgorIzogZXhfY21kcy5jOjE2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIyBUaGlzIHZpbWluZm8gZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFZpbSAlcy5cbiIKK21zZ3N0ciAiIyDmnKwgdmltaW5mbyDmqpTmoYjmmK/nlLEgVmltICVzIOaJgOeUoueUny5cbiIKKworIzogZXhfY21kcy5jOjE2MjkKK21zZ2lkICIiCisiIyBZb3UgbWF5IGVkaXQgaXQgaWYgeW91J3JlIGNhcmVmdWwhXG4iCisiXG4iCittc2dzdHIgIiIKKyIjIOWmguaenOaDs+imgeiHquihjOS/ruaUueiri+eJueWIpeWwj+W/g++8gVxuIgorIlxuIgorCisjOiBleF9jbWRzLmM6MTYzMQorbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjICdlbmNvZGluZycg5Zyo5q2k5qqU5bu656uL5pmC55qE5YC8XG4iCisKKyM6IGV4X2NtZHMuYzoxNzMwCittc2dpZCAiSWxsZWdhbCBzdGFydGluZyBjaGFyIgorbXNnc3RyICLnhKHmlYjnmoTotbflp4vlrZflhYMiCisKKyM6IGV4X2NtZHMuYzoyMDc1IGV4X2NtZHMuYzoyMzQwIGV4X2NtZHMyLmM6NzQ0Cittc2dpZCAiU2F2ZSBBcyIKK21zZ3N0ciAi5Y+m5a2Y5paw5qqUIgorCisjLiBPdmVyd3JpdGluZyBhIGZpbGUgdGhhdCBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIgaXMgbm90IGEKKyMuICogZ29vZCBpZGVhLgorIzogZXhfY21kcy5jOjIxMTgKK21zZ2lkICJFMTM5OiBGaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciIKK21zZ3N0ciAiRTEzOTog5oKo5Zyo5Y+m5LiA5YCL57ep6KGd5Y2A5Lmf6LyJ5YWl5LqG6YCZ5YCL5qqU5qGIIgorCisjOiBleF9jbWRzLmM6MjE1MgorbXNnaWQgIldyaXRlIHBhcnRpYWwgZmlsZT8iCittc2dzdHIgIuimgeWvq+WFpemDqOWIhuaqlOahiOWXju+8nyIKKworIzogZXhfY21kcy5jOjIxNTkKK21zZ2lkICJFMTQwOiBVc2UgISB0byB3cml0ZSBwYXJ0aWFsIGJ1ZmZlciIKK21zZ3N0ciAiRTE0MDog6KuL5L2/55SoICEg5Lul5a+r5YWl6YOo5YiG57ep6KGd5Y2AIgorCisjOiBleF9jbWRzLmM6MjI3NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGUgZXhpc3RpbmcgZmlsZSBcIiUuKnNcIj8iCittc2dzdHIgIuimgeimhuWvq+W3suWtmOWcqOeahOaqlOahiCBcIiUuKnNcIu+8nyIKKworIzogZXhfY21kcy5jOjIzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0MTogTm8gZmlsZSBuYW1lIGZvciBidWZmZXIgJWxkIgorbXNnc3RyICJFMTQxOiDnt6nooZ3ljYAgJWxkIOaykuacieaqlOahiOWQjeeosSIKKworIzogZXhfY21kcy5jOjIzODMKK21zZ2lkICJFMTQyOiBGaWxlIG5vdCB3cml0dGVuOiBXcml0aW5nIGlzIGRpc2FibGVkIGJ5ICd3cml0ZScgb3B0aW9uIgorbXNnc3RyICJFMTQyOiDmqpTmoYjmnKrlr6vlhaXvvIzlm6DngrogJ3dyaXRlJyDpgbjpoIXooqvpl5zplokiCisKKyM6IGV4X2NtZHMuYzoyNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgZm9yIFwiJS4qc1wiLlxuIgorIkRvIHlvdSB3aXNoIHRvIHdyaXRlIGFueXdheT8iCittc2dzdHIgIiIKKyJcIiUuKnNcIiDlt7LoqK3lrpogJ3JlYWRvbmx5JyDpgbjpoIUuXG4iCisi56K65a6a6KaB6KaG5a+r5ZeO77yfIgorCisjOiBleF9jbWRzLmM6MjU2OAorbXNnaWQgIkVkaXQgRmlsZSIKK21zZ3N0ciAi57eo6Lyv5qqU5qGIIgorCisjOiBleF9jbWRzLmM6MzEzNworIywgYy1mb3JtYXQKK21zZ2lkICJFMTQzOiBBdXRvY29tbWFuZHMgdW5leHBlY3RlZGx5IGRlbGV0ZWQgbmV3IGJ1ZmZlciAlcyIKK21zZ3N0ciAiRTE0MzogQXV0b2NvbW1hbmRzIOaEj+WkluWcsOWIqumZpOaWsOe3qeihneWNgCAlcyIKKworIzogZXhfY21kcy5jOjMyNjkKK21zZ2lkICJFMTQ0OiBub24tbnVtZXJpYyBhcmd1bWVudCB0byA6eiIKK21zZ3N0ciAiRTE0NDogOnog5LiN5o6l5Y+X6Z2e5pW45a2X55qE5Y+D5pW4IgorCisjOiBleF9jbWRzLmM6MzM1NAorbXNnaWQgIkUxNDU6IFNoZWxsIGNvbW1hbmRzIG5vdCBhbGxvd2VkIGluIHJ2aW0iCittc2dzdHIgIkUxNDU6IHJ2aW0g5Lit56aB5q2i5L2/55SoIHNoZWxsIOWRveS7pCIKKworIzogZXhfY21kcy5jOjM0NjEKK21zZ2lkICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzIgorbXNnc3RyICJFMTQ2OiBSZWd1bGFyIGV4cHJlc3Npb24g54Sh5rOV55So5a2X5q+N5YiG6ZqUICg/KSIKKworIzogZXhfY21kcy5jOjM4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKK21zZ3N0ciAi5Y+W5Luj54K6ICVzICh5L24vYS9xL15FL15ZKT8iCisKKyM6IGV4X2NtZHMuYzo0MTcyCittc2dpZCAiKEludGVycnVwdGVkKSAiCittc2dzdHIgIijlt7LkuK3mlrcpICIKKworIzogZXhfY21kcy5jOjQxNzYKK21zZ2lkICIxIHN1YnN0aXR1dGlvbiIKK21zZ3N0ciAi5Y+W5Luj5LiA57WEIgorCisjOiBleF9jbWRzLmM6NDE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgc3Vic3RpdHV0aW9ucyIKK21zZ3N0ciAi5Y+W5LujICVsZCDntYQiCisKKyM6IGV4X2NtZHMuYzo0MTgxCittc2dpZCAiIG9uIDEgbGluZSIKK21zZ3N0ciAiIOS4gOihjOS4rSIKKworIzogZXhfY21kcy5jOjQxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG9uICVsZCBsaW5lcyIKK21zZ3N0ciAiICVsZCDooYzkuK0iCisKKyM6IGV4X2NtZHMuYzo0MjM0Cittc2dpZCAiRTE0NzogQ2Fubm90IGRvIDpnbG9iYWwgcmVjdXJzaXZlIgorbXNnc3RyICJFMTQ3OiA6Z2xvYmFsIOeEoeazlemBnui/tOWft+ihjCIKKworIzogZXhfY21kcy5jOjQyNjkKK21zZ2lkICJFMTQ4OiBSZWd1bGFyIGV4cHJlc3Npb24gbWlzc2luZyBmcm9tIGdsb2JhbCIKK21zZ3N0ciAiRTE0ODog5rKS5pyJ5L2/55So6YGOIFJlZ3VsYXIgZXhwcmVzc2lvbiAoPykiCisKKyM6IGV4X2NtZHMuYzo0MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCittc2dzdHIgIuavj+S4gOihjOmDveaJvuS4jeWIsDogJXMiCisKKyM6IGV4X2NtZHMuYzo0Mzk5Cittc2dpZCAiIgorIlxuIgorIiMgTGFzdCBTdWJzdGl0dXRlIFN0cmluZzpcbiIKKyIkIgorbXNnc3RyICIiCisiXG4iCisiIyDliY3kuIDntYTmm7/ku6PlrZfkuLI6XG4iCisiJCIKKworIzogZXhfY21kcy5jOjQ1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE0OTogU29ycnksIG5vIGhlbHAgZm9yICVzIgorbXNnc3RyICJFMTQ5OiDmirHmrYksIOaykuaciSAlcyDnmoToqqrmmI4iCisKKyM6IGV4X2NtZHMuYzo0NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIKK21zZ3N0ciAi5oqx5q2JLCDmib7kuI3liLDoqqrmmI7mqpQgXCIlc1wiIgorCisjOiBleF9jbWRzLmM6NTAxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUwOiBOb3QgYSBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJFMTUwOiAlcyDkuI3mmK/nm67pjIQiCisKKyM6IGV4X2NtZHMuYzo1MDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTI6IENhbm5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTUyOiDnhKHms5Xku6Xlr6vlhaXmqKHlvI/plovllZ8gXCIlc1wiIgorCisjOiBleF9jbWRzLmM6NTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUzOiBVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE1Mzog54Sh5rOV6K6A5Y+W5qqU5qGIOiAlcyIKKworIzogZXhfY21kcy5jOjUxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcyIKK21zZ3N0ciAiRTE1NDog5qiZ57GkKHRhZykgXCIlc1wiIOWcqOaqlOahiCAlcyDoo6Hph43opIflh7rnj77lpJrmrKEiCisKKyM6IGV4X2NtZHMuYzo1MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjA6IFVua25vd24gc2lnbiBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE2MDog5pyq5a6a576p55qEIHNpZ24gY29tbWFuZDogJXMiCisKKyM6IGV4X2NtZHMuYzo1MjgxCittc2dpZCAiRTE1NjogTWlzc2luZyBzaWduIG5hbWUiCittc2dzdHIgIkUxNTY6IOe8uuWwkSBzaWduIOWQjeeosSIKKworIzogZXhfY21kcy5jOjUzMjcKK21zZ2lkICJFNjEyOiBUb28gbWFueSBzaWducyBkZWZpbmVkIgorbXNnc3RyICJFNjEyOiDlt7LlrprnvqnlpKrlpJogc2lnbnMiCisKKyM6IGV4X2NtZHMuYzo1Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTog5LiN5q2j56K655qEIHNpZ24g5paH5a2XOiAlcyIKKworIzogZXhfY21kcy5jOjU0MjUgZXhfY21kcy5jOjU2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NTogVW5rbm93biBzaWduOiAlcyIKK21zZ3N0ciAiRTE1NTog5LiN5q2j56K655qEIHNpZ246ICVzIgorCisjOiBleF9jbWRzLmM6NTQ3MQorbXNnaWQgIkUxNTk6IE1pc3Npbmcgc2lnbiBudW1iZXIiCittc2dzdHIgIkUxNTk6IOe8uuWwkSBzaWduIG51bWJlciIKKworIzogZXhfY21kcy5jOjU1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1ODogSW52YWxpZCBidWZmZXIgbmFtZTogJXMiCittc2dzdHIgIkUxNTg6IOe3qeihneWNgOWQjeeosemMr+iqpDogJXMiCisKKyM6IGV4X2NtZHMuYzo1NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTc6IEludmFsaWQgc2lnbiBJRDogJWxkIgorbXNnc3RyICJFMTU3OiBTaWduIElEIOmMr+iqpDogJWxkIgorCisjOiBleF9jbWRzLmM6NTc2MQorbXNnaWQgIltEZWxldGVkXSIKK21zZ3N0ciAiW+W3suWIqumZpF0iCisKKyM6IGV4X2NtZHMyLmM6ODIKK21zZ2lkICJFbnRlcmluZyBEZWJ1ZyBtb2RlLiAgVHlwZSBcImNvbnRcIiB0byBjb250aW51ZS4iCittc2dzdHIgIumAsuWFpemZpOmMr+aooeW8jy4g6Ly45YWlIFwiY29udFwiIOS7peWbnuWIsOato+W4uOaooeW8jy4iCisKKyM6IGV4X2NtZHMyLmM6ODYgZXhfZG9jbWQuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6ICVzIgorbXNnc3RyICLooYwgJWxkOiAlcyIKKworIzogZXhfY21kczIuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjbWQ6ICVzIgorbXNnc3RyICJjbWQ6ICVzIgorCisjOiBleF9jbWRzMi5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIgorbXNnc3RyICJcIiVzJXNcIiDkuK3mlrfpu546IOesrCAlbGQg6KGMIgorCisjOiBleF9jbWRzMi5jOjUyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYxOiBCcmVha3BvaW50IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUxNjE6IOaJvuS4jeWIsOS4reaWt+m7njogJXMiCisKKyM6IGV4X2NtZHMyLmM6NTQ3Cittc2dpZCAiTm8gYnJlYWtwb2ludHMgZGVmaW5lZCIKK21zZ3N0ciAi5rKS5pyJ5a6a576p5Lit5pa36bueIgorCisjOiBleF9jbWRzMi5jOjU1MgorIywgYy1mb3JtYXQKK21zZ2lkICIlM2QgICVzICVzICBsaW5lICVsZCIKK21zZ3N0ciAiJTNkICAlcyAlcyAg56ysICVsZCDooYwiCisKKyM6IGV4X2NtZHMyLmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmUgY2hhbmdlcyB0byBcIiUuKnNcIj8iCittc2dzdHIgIuWwh+iuiuWLleWtmOWEsuiHsyBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMyLmM6NzY5IGV4X2RvY21kLmM6ODgyMAorbXNnaWQgIlVudGl0bGVkIgorbXNnc3RyICLmnKrlkb3lkI0iCisKKyM6IGV4X2NtZHMyLmM6OTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiDlt7Lmm7TmlLnpgY7nt6nooZ3ljYAgXCIlc1wiIOS9huWwmuacquWtmOaqlCAo5Y+v55SoICEg5by35Yi25Z+36KGMKSIKKworIzogZXhfY21kczIuYzo5NzQKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIuazqOaEjzog5bey5YiH5o+b5Yiw5YW25a6D57ep6KGd5Y2AICjoq4vmqqLmn6UgQXV0b2NvbW1hbmRzIOacieeEoemMr+iqpCkiCisKKyM6IGV4X2NtZHMyLmM6MTM3NworbXNnaWQgIkUxNjM6IFRoZXJlIGlzIG9ubHkgb25lIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE2Mzog5Y+q5pyJ5LiA5YCL5qqU5qGI5Y+v57eo6LyvIgorCisjOiBleF9jbWRzMi5jOjEzNzkKK21zZ2lkICJFMTY0OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGZpbGUiCittc2dzdHIgIkUxNjQ6IOW3sue2k+WcqOesrOS4gOWAi+aqlOahiOS6hiIKKworIzogZXhfY21kczIuYzoxMzgxCittc2dpZCAiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiCittc2dzdHIgIkUxNjU6IOW3sue2k+WcqOacgOW+jOS4gOWAi+aqlOahiOS6hiIKKworIzogZXhfY21kczIuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyBmb3IgXCIlc1wiIGluIFwiJXNcIiIKK21zZ3N0ciAi5pCc5bCL5LitOiBcIiVzXCIgLS0gXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIiCittc2dzdHIgIuaQnOWwi+S4rTogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjE4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGZvdW5kIGluICdydW50aW1lcGF0aCc6IFwiJXNcIiIKK21zZ3N0ciAi5ZyoICdydW50aW1lcGF0aCcg6KOh5om+5LiN5YiwIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTA1Cittc2dpZCAiU291cmNlIFZpbSBzY3JpcHQiCittc2dzdHIgIuWft+ihjCBWaW0gc2NyaXB0IgorCisjOiBleF9jbWRzMi5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNvdXJjZSBhIGRpcmVjdG9yeTogXCIlc1wiIgorbXNnc3RyICLnhKHms5Xln7fooYznm67pjITvvJogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIueEoeazleWft+ihjCBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIuesrCAlbGQg6KGMOiDnhKHms5Xln7fooYwgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAic291cmNpbmcgXCIlc1wiIgorbXNnc3RyICLln7fooYwgXCIlc1wiIOS4rSIKKworIzogZXhfY21kczIuYzoyMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgIuesrCAlbGQg6KGMOiDntZDmnZ/ln7fooYwgJXMiCisKKyM6IGV4X2NtZHMyLmM6MjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzb3VyY2luZyAlcyIKK21zZ3N0ciAi57WQ5p2f5Z+36KGMICVzIgorCisjOiBleF9jbWRzMi5jOjI1MjgKK21zZ2lkICJXMTU6IFdhcm5pbmc6IFdyb25nIGxpbmUgc2VwYXJhdG9yLCBeTSBtYXkgYmUgbWlzc2luZyIKK21zZ3N0ciAiVzE1OiDms6jmhI86IOmMr+iqpOeahOihjOWIhumalOWtl+WFg++8jOWPr+iDveaYr+WwkeS6hiBeTSIKKworIzogZXhfY21kczIuYzoyNTc3Cittc2dpZCAiRTE2NzogOnNjcmlwdGVuY29kaW5nIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2Nzog5Zyo5Z+36KGMIHNjcmlwdCDmqpTmoYjlpJbkuI3lj6/kvb/nlKggOnNjcmlwdGVuY29kaW5nIgorCisjOiBleF9jbWRzMi5jOjI2MTAKK21zZ2lkICJFMTY4OiA6ZmluaXNoIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2ODog5Zyo5Z+36KGMIHNjcmlwdCDmqpTmoYjlpJbkuI3lj6/kvb/nlKggOmZpbmlzaCIKKworIzogZXhfY21kczIuYzozMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhZ2UgJWQiCittc2dzdHIgIuesrCAlZCDpoIEiCisKKyM6IGV4X2NtZHMyLmM6MzExNgorbXNnaWQgIk5vIHRleHQgdG8gYmUgcHJpbnRlZCIKK21zZ3N0ciAi5rKS5pyJ6KaB5YiX5Y2w55qE5paH5a2XIgorCisjOiBleF9jbWRzMi5jOjMxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgcGFnZSAlZCAoJWQlJSkiCittc2dzdHIgIuWIl+WNsOS4rTog56ysICVkIOmggSAoJWQlJSkiCisKKyM6IGV4X2NtZHMyLmM6MzIwMworIywgYy1mb3JtYXQKK21zZ2lkICIgQ29weSAlZCBvZiAlZCIKK21zZ3N0ciAi6KSH6KO9ICVkIC8gJWQiCisKKyM6IGV4X2NtZHMyLmM6MzI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGVkOiAlcyIKK21zZ3N0ciAi5bey5YiX5Y2wOiAlcyIKKworIzogZXhfY21kczIuYzozMjYyCittc2dpZCAiUHJpbnRpbmcgYWJvcnRlZCIKK21zZ3N0ciAi5bey5Y+W5raI5YiX5Y2wIgorCisjOiBleF9jbWRzMi5jOjM2NDUKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6IOeEoeazleWvq+WFpSBQb3N0U2NyaXB0IOi8uOWHuuaqlCIKKworIzogZXhfY21kczIuYzo0MzIwCittc2dpZCAiRTMyNDogQ2FuJ3Qgb3BlbiBQb3N0U2NyaXB0IG91dHB1dCBmaWxlIgorbXNnc3RyICJFMzI0OiDnhKHms5XplovllZ8gUG9zdFNjcmlwdCDovLjlh7rmqpQiCisKKyM6IGV4X2NtZHMyLmM6NDM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDU2OiBDYW4ndCBvcGVuIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU2OiDnhKHms5XplovllZ/mqpTmoYggXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQzNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NzogQ2FuJ3QgcmVhZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDU3OiDnhKHms5XoroDlj5YgUG9zdFNjcmlwdCByZXNvdXJjZSDmqpQgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ1NzYKK21zZ2lkICJTZW5kaW5nIHRvIHByaW50ZXIuLi4iCittc2dzdHIgIuWCs+mAgeizh+aWmeWIsOWNsOihqOapny4uLiIKKworIzogZXhfY21kczIuYzo0NTgwCittc2dpZCAiRTM2NTogRmFpbGVkIHRvIHByaW50IFBvc3RTY3JpcHQgZmlsZSIKK21zZ3N0ciAiRTM2NTog54Sh5rOV5YiX5Y2wIFBvc3RTY3JpcHQg5qqU5qGIIgorCisjOiBleF9jbWRzMi5jOjQ1ODIKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIuW3sumAgeWHuuWIl+WNsOW3peS9nOOAgiIKKworIzogZXhfY21kczIuYzo0OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgJXNsYW5ndWFnZTogXCIlc1wiIgorbXNnc3RyICLnm67liY3nmoQgJXPoqp7oqIA6IFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTc6IENhbm5vdCBzZXQgbGFuZ3VhZ2UgdG8gXCIlc1wiIgorbXNnc3RyICJFMTk3OiDkuI3og73oqK3lrproqp7oqIDmiJAgXCIlc1wiIgorCisjOiBleF9kb2NtZC5jOjQ4NgorbXNnaWQgIkVudGVyaW5nIEV4IG1vZGUuICBUeXBlIFwidmlzdWFsXCIgdG8gZ28gdG8gTm9ybWFsIG1vZGUuIgorbXNnc3RyICLpgLLlhaUgRXgg5qih5byPLiDovLjlhaUgXCJ2aXN1YVwiIOS7peWbnuWIsOato+W4uOaooeW8jy4iCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjUyMgorbXNnaWQgIkU1MDE6IEF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJFNTAxOiDlt7LliLDmqpTmoYjntZDlsL4iCisKKyM6IGV4X2RvY21kLmM6NjI0Cittc2dpZCAiRTE2OTogQ29tbWFuZCB0b28gcmVjdXJzaXZlIgorbXNnc3RyICJFMTY5OiDlkb3ku6TpgZ7ov7TlsaTmlbjpgY7lpJoiCisKKyM6IGV4X2RvY21kLmM6MTA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA1OiBFeGNlcHRpb24gbm90IGNhdWdodDogJXMiCittc2dzdHIgIkU2MDU6IOacquaUlOaIqueahOS+i+Wklu+8miAlcyIKKworIzogZXhfZG9jbWQuYzoxMTc2Cittc2dpZCAiRW5kIG9mIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAi5ZG95Luk5qqU57WQ5p2fIgorCisjOiBleF9kb2NtZC5jOjExNzcKK21zZ2lkICJFbmQgb2YgZnVuY3Rpb24iCittc2dzdHIgIuWHveW8j+e1kOWwviIKKworIzogZXhfZG9jbWQuYzoxNjI4Cittc2dpZCAiRTQ2NDogQW1iaWd1b3VzIHVzZSBvZiB1c2VyLWRlZmluZWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ2NDog5L2/55So6ICF5a6a576p55qE5ZG95Luk5pyD5re35reGIgorCisjOiBleF9kb2NtZC5jOjE2NDIKK21zZ2lkICJFNDkyOiBOb3QgYW4gZWRpdG9yIGNvbW1hbmQiCittc2dzdHIgIkU0OTI6IOS4jeaYr+e3qOi8r+WZqOeahOWRveS7pCIKKworIzogZXhfZG9jbWQuYzoxNzI1Cittc2dpZCAiRTQ3ODogRG9uJ3QgcGFuaWMhIgorbXNnc3RyICJFNDc4OiDkuI3opoHpqZrmhYwhIgorCisjOiBleF9kb2NtZC5jOjE3NDQKK21zZ2lkICJFNDkzOiBCYWNrd2FyZHMgcmFuZ2UgZ2l2ZW4iCittc2dzdHIgIkU0OTM6IOaMh+WumuS6huWQkeWJjeWPg+iAg+eahOevhOWcjSIKKworIzogZXhfZG9jbWQuYzoxNzUzCittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuLCBPSyB0byBzd2FwIgorbXNnc3RyICLmjIflrprkuoblkJHliY3lj4PogIPnmoTnr4TlnI3vvIxPSyB0byBzd2FwIgorCisjOiBleF9kb2NtZC5jOjE4NjQKK21zZ2lkICJFNDk0OiBVc2UgdyBvciB3Pj4iCittc2dzdHIgIkU0OTQ6IOiri+S9v+eUqCB3IOaIliB3Pj4iCisKKyM6IGV4X2RvY21kLmM6MzQ0NgorbXNnaWQgIkUzMTk6IFNvcnJ5LCB0aGUgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTMxOTog5oqx5q2JLCDmnKzlkb3ku6TlnKjmraTniYjmnKzkuK3mspLmnInlr6bkvZwiCisKKyM6IGV4X2RvY21kLmM6MzYyNAorbXNnaWQgIkUxNzI6IE9ubHkgb25lIGZpbGUgbmFtZSBhbGxvd2VkIgorbXNnc3RyICJFMTcyOiDlj6rog73mnInkuIDlgIvmqpQiCisKKyM6IGV4X2RvY21kLmM6NDE5MQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBtb3JlIGZpbGVzIHRvIGVkaXQuICBRdWl0IGFueXdheT8iCittc2dzdHIgIumChOaciSAlZCDlgIvmqpTmoYjmnKrnt6jovK8uIOeiuuWumuimgemboumWi++8nyIKKworIzogZXhfZG9jbWQuYzo0MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNzM6ICVsZCBtb3JlIGZpbGVzIHRvIGVkaXQiCittc2dzdHIgIkUxNzM6IOmChOaciSAlbGQg5YCL5qqU5qGI5pyq57eo6LyvIgorCisjOiBleF9kb2NtZC5jOjQyOTIKK21zZ2lkICJFMTc0OiBDb21tYW5kIGFscmVhZHkgZXhpc3RzOiBhZGQgISB0byByZXBsYWNlIGl0IgorbXNnc3RyICJFMTc0OiDlkb3ku6Tlt7LntpPlrZjlnKgsIOiri+S9v+eUqCAhIOW8t+WItumHjeaWsOWumue+qSIKKworIzogZXhfZG9jbWQuYzo0Mzk3Cittc2dpZCAiIgorIlxuIgorIiAgICBOYW1lICAgICAgICBBcmdzIFJhbmdlIENvbXBsZXRlICBEZWZpbml0aW9uIgorbXNnc3RyICIiCisiXG4iCisiICAgIOWQjeeosSAgICAgICAg5Y+D5pW4IOevhOWcjSAg5a6M5pW0ICAgICAg5a6a576pICAgICAgIgorCisjOiBleF9kb2NtZC5jOjQ0ODYKK21zZ2lkICJObyB1c2VyLWRlZmluZWQgY29tbWFuZHMgZm91bmQiCittc2dzdHIgIuaJvuS4jeWIsOS9v+eUqOiAheWumue+qeeahOWRveS7pCIKKworIzogZXhfZG9jbWQuYzo0NTE3Cittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTog5rKS5pyJ5oyH5a6a55qE5bGs5oCnIgorCisjOiBleF9kb2NtZC5jOjQ1NjkKK21zZ2lkICJFMTc2OiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIkUxNzY6IOS4jeato+eiuueahOWPg+aVuOaVuOebriIKKworIzogZXhfZG9jbWQuYzo0NTg0Cittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3Nzog5LiN6IO95oyH5a6a5YWp5qyh5pW455uuIgorCisjOiBleF9kb2NtZC5jOjQ1OTQKK21zZ2lkICJFMTc4OiBJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIGNvdW50IgorbXNnc3RyICJFMTc4OiDmlbjnm67nmoTpoJDoqK3lj4PmlbjkuI3mraPnoroiCisKKyM6IGV4X2RvY21kLmM6NDYyMgorbXNnaWQgIkUxNzk6IGFyZ3VtZW50IHJlcXVpcmVkIGZvciBjb21wbGV0ZSIKK21zZ3N0ciAiRTE3OTog5oyH5Luk6ZyA6KaB5Y+D5pW45omN6IO95a6M5oiQIgorCisjOiBleF9kb2NtZC5jOjQ2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4MDogSW52YWxpZCBjb21wbGV0ZSB2YWx1ZTogJXMiCittc2dzdHIgIkUxODA6IOS4jeWujOaVtOeahOWAvDogJyVzJyIKKworIzogZXhfZG9jbWQuYzo0NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MTog5LiN5q2j56K655qE5bGs5oCnOiAlcyIKKworIzogZXhfZG9jbWQuYzo0NjkwCittc2dpZCAiRTE4MjogSW52YWxpZCBjb21tYW5kIG5hbWUiCittc2dzdHIgIkUxODI6IOaMh+S7pOWQjeeoseS4jeato+eiuiIKKworIzogZXhfZG9jbWQuYzo0NzA1Cittc2dpZCAiRTE4MzogVXNlciBkZWZpbmVkIGNvbW1hbmRzIG11c3Qgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIgorbXNnc3RyICJFMTgzOiDkvb/nlKjogIXoh6rlrprmjIfku6Tlv4XpoIjku6XlpKflr6vlrZfmr43plovlp4siCisKKyM6IGV4X2RvY21kLmM6NDc3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg0OiBObyBzdWNoIHVzZXItZGVmaW5lZCBjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTE4NDog5rKS5pyJ5L2/55So6ICF6Ieq5a6a55qE5ZG95Luk77yaICVzIgorCisjOiBleF9kb2NtZC5jOjUyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NTogQ2Fubm90IGZpbmQgY29sb3Igc2NoZW1lICVzIgorbXNnc3RyICJFMTg1OiDmib7kuI3liLDpoY/oibLmqKPlvI8gJXMiCisKKyM6IGV4X2RvY21kLmM6NTIzOAorbXNnaWQgIkdyZWV0aW5ncywgVmltIHVzZXIhIgorbXNnc3RyICLll6gsIFZpbSDkvb/nlKjogIXvvIEiCisKKyM6IGV4X2RvY21kLmM6NTk0NgorbXNnaWQgIkVkaXQgRmlsZSBpbiBuZXcgd2luZG93IgorbXNnc3RyICLlnKjmlrDoppbnqpfnt6jovK/mqpTmoYgiCisKKyM6IGV4X2RvY21kLmM6NjIxOQorbXNnaWQgIk5vIHN3YXAgZmlsZSIKK21zZ3N0ciAi54Sh5pqr5a2Y5qqUIgorCisjOiBleF9kb2NtZC5jOjYzMjMKK21zZ2lkICJBcHBlbmQgRmlsZSIKK21zZ3N0ciAi6ZmE5Yqg5qqU5qGIIgorCisjOiBleF9kb2NtZC5jOjYzODcKK21zZ2lkICJFMTg2OiBObyBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkUxODY6IOaykuacieWJjeS4gOWAi+ebrumMhCIKKworIzogZXhfZG9jbWQuYzo2NDY5Cittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4Nzog54Sh5rOV6L6m6K2Y55qE5qiZ6KiYIgorCisjOiBleF9kb2NtZC5jOjY1NTQKK21zZ2lkICJFNDY1OiA6d2luc2l6ZSByZXF1aXJlcyB0d28gbnVtYmVyIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTQ2NTogOndpbnNpemUg6ZyA6KaB5YWp5YCL5Y+D5pW4IgorCisjOiBleF9kb2NtZC5jOjY2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2luZG93IHBvc2l0aW9uOiBYICVkLCBZICVkIgorbXNnc3RyICLoppbnqpfkvY3nva46IFggJWQsIFkgJWQiCisKKyM6IGV4X2RvY21kLmM6NjYxMAorbXNnaWQgIkUxODg6IE9idGFpbmluZyB3aW5kb3cgcG9zaXRpb24gbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICJFMTg4OiDlnKjmgqjnmoTlubPlj7DkuIrnhKHms5XnjbLlvpfoppbnqpfkvY3nva4iCisKKyM6IGV4X2RvY21kLmM6NjYyMAorbXNnaWQgIkU0NjY6IDp3aW5wb3MgcmVxdWlyZXMgdHdvIG51bWJlciBhcmd1bWVudHMiCittc2dzdHIgIkU0NjY6IDp3aW5wb3Mg6ZyA6KaB5YWp5YCL5Y+D5pW4IgorCisjOiBleF9kb2NtZC5jOjY4OTkKK21zZ2lkICJTYXZlIFJlZGlyZWN0aW9uIgorbXNnc3RyICLlhLLlrZggUmVkaXJlY3Rpb24iCisKKyM6IGV4X2RvY21kLmM6NzA0NgorbXNnaWQgIlNhdmUgVmlldyIKK21zZ3N0ciAi5YSy5a2YIFZpZXciCisKKyM6IGV4X2RvY21kLmM6NzA0NworbXNnaWQgIlNhdmUgU2Vzc2lvbiIKK21zZ3N0ciAi5YSy5a2YIFNlc3Npb24iCisKKyM6IGV4X2RvY21kLmM6NzA0OQorbXNnaWQgIlNhdmUgU2V0dXAiCittc2dzdHIgIuWEsuWtmOioreWumiIKKworIzogZXhfZG9jbWQuYzo3MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODk6IFwiJXNcIiBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTE4OTogXCIlc1wiIOW3suWtmOWcqCAo6KuL55SoICEg5by35Yi25Z+36KGMKSIKKworIzogZXhfZG9jbWQuYzo3MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxOTA6IENhbm5vdCBvcGVuIFwiJXNcIiBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE5MDog54Sh5rOV5Lul5a+r5YWl5qih5byP6ZaL5ZWfIFwiJXNcIiIKKworIy4gc2V0IG1hcmsKKyM6IGV4X2RvY21kLmM6NzIyOQorbXNnaWQgIkUxOTE6IEFyZ3VtZW50IG11c3QgYmUgYSBsZXR0ZXIgb3IgZm9yd2FyZC9iYWNrd2FyZCBxdW90ZSIKK21zZ3N0ciAiRTE5MTog5Y+D5pW45b+F6aCI5piv6Iux5paH5a2X5q+N5oiW5ZCR5YmNL+W+jOeahOW8leiZnyIKKworIzogZXhfZG9jbWQuYzo3MjcxCittc2dpZCAiRTE5MjogUmVjdXJzaXZlIHVzZSBvZiA6bm9ybWFsIHRvbyBkZWVwIgorbXNnc3RyICJFMTkyOiA6bm9ybWFsIOmBnui/tOWxpOaVuOmBjua3sSIKKworIzogZXhfZG9jbWQuYzo3NzcyCittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6IOaykuaciSAnIycg5Y+v5pu/5Luj55qE5qqU5ZCNIgorCisjOiBleF9kb2NtZC5jOjc4MDMKK21zZ2lkICJFNDk1OiBubyBhdXRvY29tbWFuZCBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWZpbGU+XCIiCittc2dzdHIgIkU0OTU6IOaykuaciSBBdXRvY29tbWFuZCDmqpTlkI3ku6Xlj5bku6MgXCI8YWZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6NzgxMQorbXNnaWQgIkU0OTY6IG5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAiRTQ5Njog5rKS5pyJIEF1dG9jb21tYW5kIOe3qeihneWNgOWQjeeoseS7peWPluS7oyBcIjxhYnVmPlwiIgorCisjOiBleF9kb2NtZC5jOjc4MjIKK21zZ2lkICJFNDk3OiBubyBhdXRvY29tbWFuZCBtYXRjaCBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFtYXRjaD5cIiIKK21zZ3N0ciAiRTQ5Nzog5rKS5pyJIEF1dG9jb21tYW5kIOespuWQiOWQjeeoseS7peWPluS7oyBcIjxhbWF0Y2g+XCIiCisKKyM6IGV4X2RvY21kLmM6NzgzMgorbXNnaWQgIkU0OTg6IG5vIDpzb3VyY2UgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPHNmaWxlPlwiIgorbXNnc3RyICJFNDk4OiDmspLmnIkgOnNvdXJjZSDmqpTlkI3ku6Xlj5bku6MgXCI8c2ZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6Nzg3MworIywgbm8tYy1mb3JtYXQKK21zZ2lkICJFNDk5OiBFbXB0eSBmaWxlIG5hbWUgZm9yICclJyBvciAnIycsIG9ubHkgd29ya3Mgd2l0aCBcIjpwOmhcIiIKK21zZ3N0ciAiRTQ5OTogJyUnIOaIliAnIycg5oyH5ZCR56m65qqU5ZCN77yM5Y+q6IO955So5pa8IFwiOnA6aFwiIgorCisjOiBleF9kb2NtZC5jOjc4NzUKK21zZ2lkICJFNTAwOiBFdmFsdWF0ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJFNTAwOiDovLjlhaXngrrnqbrlrZfkuLIiCisKKyM6IGV4X2RvY21kLmM6ODgwMgorbXNnaWQgIkUxOTU6IENhbm5vdCBvcGVuIHZpbWluZm8gZmlsZSBmb3IgcmVhZGluZyIKK21zZ3N0ciAiRTE5NTog54Sh5rOV6K6A5Y+WIHZpbWluZm8iCisKKyM6IGV4X2RvY21kLmM6ODk3NQorbXNnaWQgIkUxOTY6IE5vIGRpZ3JhcGhzIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTE5Njog5pys54mI5pys54Sh6KSH5ZCI5a2X5YWDKGRpZ3JhcGgpIgorCisjOiBleF9ldmFsLmM6NDA3Cittc2dpZCAiRTYwODogQ2Fubm90IDp0aHJvdyBleGNlcHRpb25zIHdpdGggJ1ZpbScgcHJlZml4IgorbXNnc3RyICJFNjA4OiDkuI3og70gOnRocm93IOeUqCAnVmltJyDplovpoK3nmoTkvovlpJYiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gdGhyb3duOiAlcyIKK21zZ3N0ciAi5Lif5Ye65L6L5aSW77yaICVzIgorCisjOiBleF9ldmFsLmM6NTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBmaW5pc2hlZDogJXMiCittc2dzdHIgIuS+i+Wklue1kOadn++8miAlcyIKKworIzogZXhfZXZhbC5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZGlzY2FyZGVkOiAlcyIKK21zZ3N0ciAi5bey5Lif5qOE5L6L5aSW77yaICVzIgorCisjOiBleF9ldmFsLmM6NTgyIGV4X2V2YWwuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIGxpbmUgJWxkIgorbXNnc3RyICIlcywg6KGMICVsZCIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBleF9ldmFsLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBjYXVnaHQ6ICVzIgorbXNnc3RyICLnmbznlJ/kvovlpJbvvJolcyIKKworIzogZXhfZXZhbC5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBtYWRlIHBlbmRpbmciCittc2dzdHIgIiVzIOmAoOaIkCBwZW5kaW5nIgorCisjOiBleF9ldmFsLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc3VtZWQiCittc2dzdHIgIiVzIOW3suWbnuW+qSIKKworIzogZXhfZXZhbC5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNjYXJkZWQiCittc2dzdHIgIiVzIOW3suS4n+ajhCIKKworIzogZXhfZXZhbC5jOjcwMAorbXNnaWQgIkV4Y2VwdGlvbiIKK21zZ3N0ciAi5L6L5aSWIgorCisjOiBleF9ldmFsLmM6NzA2Cittc2dpZCAiRXJyb3IgYW5kIGludGVycnVwdCIKK21zZ3N0ciAi6Yyv6Kqk6IiH5Lit5pa3IgorCisjOiBleF9ldmFsLmM6NzA4IGd1aS5jOjQyMzcKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAi6Yyv6KqkIgorCisjLiBpZiAocGVuZGluZyAmIENTVFBfSU5URVJSVVBUKQorIzogZXhfZXZhbC5jOjcxMAorbXNnaWQgIkludGVycnVwdCIKK21zZ3N0ciAi5Lit5pa3IgorCisjOiBleF9ldmFsLmM6Nzc5Cittc2dpZCAiRTU3OTogOmlmIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU1Nzk6IDppZiDlsaTmlbjpgY7mt7EiCisKKyM6IGV4X2V2YWwuYzo4MTYKK21zZ2lkICJFNTgwOiA6ZW5kaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODA6IDplbmRpZiDnvLrlsJHlsI3mh4nnmoQgOmlmIgorCisjOiBleF9ldmFsLmM6ODYwCittc2dpZCAiRTU4MTogOmVsc2Ugd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODE6IDplbHNlIOe8uuWwkeWwjeaHieeahCA6aWYiCisKKyM6IGV4X2V2YWwuYzo4NjMKK21zZ2lkICJFNTgyOiA6ZWxzZWlmIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgyOiA6ZWxzZWlmIOe8uuWwkeWwjeaHieeahCA6aWYiCisKKyM6IGV4X2V2YWwuYzo4NzAKK21zZ2lkICJFNTgzOiBtdWx0aXBsZSA6ZWxzZSIKK21zZ3N0ciAiRTU4Mzog5aSa6YeNIDplbHNlIgorCisjOiBleF9ldmFsLmM6ODczCittc2dpZCAiRTU4NDogOmVsc2VpZiBhZnRlciA6ZWxzZSIKK21zZ3N0ciAiRTU4NDogOmVsc2VpZiDlnKggOmVsc2Ug5LmL5b6MIgorCisjOiBleF9ldmFsLmM6OTQwCittc2dpZCAiRTU4NTogOndoaWxlIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU1ODU6IDp3aGlsZSDlsaTmlbjpgY7mt7EiCisKKyM6IGV4X2V2YWwuYzo5OTYKK21zZ2lkICJFNTg2OiA6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODY6IDpjb250aW51ZSDnvLrlsJHlsI3mh4nnmoQgOndoaWxlIgorCisjOiBleF9ldmFsLmM6MTAzNgorbXNnaWQgIkU1ODc6IDpicmVhayB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4NzogOmJyZWFrIOe8uuWwkeWwjeaHieeahCA6d2hpbGUiCisKKyM6IGV4X2V2YWwuYzoxMjM1Cittc2dpZCAiRTYwMTogOnRyeSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNjAxOiA6aWYg5bGk5pW46YGO5rexIgorCisjOiBleF9ldmFsLmM6MTI3OAorbXNnaWQgIkU2MDM6IDpjYXRjaCB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDM6IDpjYXRjaCDmspLmnIkgOnRyeSIKKworIy4gR2l2ZSB1cCBmb3IgYSAiOmNhdGNoIiBhZnRlciAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjLiAqIEp1c3QgcGFyc2UuCisjOiBleF9ldmFsLmM6MTMwMAorbXNnaWQgIkU2MDQ6IDpjYXRjaCBhZnRlciA6ZmluYWxseSIKK21zZ3N0ciAiRTYwNDogOmNhdGNoIOWcqCA6ZmluYWxseSDkuYvlvowiCisKKyM6IGV4X2V2YWwuYzoxNDE4Cittc2dpZCAiRTYwNjogOmZpbmFsbHkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjA2OiA6ZmluYWxseSDmspLmnIkgOnRyeSIKKworIy4gR2l2ZSB1cCBmb3IgYSBtdWx0aXBsZSAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjOiBleF9ldmFsLmM6MTQ0MgorbXNnaWQgIkU2MDc6IG11bHRpcGxlIDpmaW5hbGx5IgorbXNnc3RyICJFNjA3OiDlpJrph40gOmZpbmFsbHkiCisKKyM6IGV4X2V2YWwuYzoxNTUxCittc2dpZCAiRTYwMjogOmVuZHRyeSB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDI6IDplbmRpZiDnvLrlsJHlsI3mh4nnmoQgOmlmIgorCisjOiBleF9ldmFsLmM6MTg1NworbXNnaWQgIkUxOTM6IDplbmRmdW5jdGlvbiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxOTM6IDplbmRmdW5jdGlvbiDlv4XpoIjlnKjlh73lvI/lhafpg6jkvb/nlKgiCisKKyM6IGV4X2dldGxuLmM6Mjk2NworbXNnaWQgInRhZ25hbWUiCittc2dzdHIgIuaomeexpOWQjeeosSIKKworIzogZXhfZ2V0bG4uYzoyOTcwCittc2dpZCAiIGtpbmQgZmlsZVxuIgorbXNnc3RyICLpoZ7mqpTmoYhcbiIKKworIzogZXhfZ2V0bG4uYzo0MTc2Cittc2dpZCAiJ2hpc3RvcnknIG9wdGlvbiBpcyB6ZXJvIgorbXNnc3RyICLpgbjpoIUgJ2hpc3RvcnknIOaYr+mbtiIKKworIzogZXhfZ2V0bG4uYzo0NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjICVzIEhpc3RvcnkgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyAlcyDmrbflj7LoqJjpjIQgKOaWsOWIsOiIiik6XG4iCisKKyM6IGV4X2dldGxuLmM6NDQxNworbXNnaWQgIkNvbW1hbmQgTGluZSIKK21zZ3N0ciAi5ZG95Luk5YiXIgorCisjOiBleF9nZXRsbi5jOjQ0MTgKK21zZ2lkICJTZWFyY2ggU3RyaW5nIgorbXNnc3RyICLmkJzlsIvlrZfkuLIiCisKKyM6IGV4X2dldGxuLmM6NDQxOQorbXNnaWQgIkV4cHJlc3Npb24iCittc2dzdHIgIumBi+eul+W8jyIKKworIzogZXhfZ2V0bG4uYzo0NDIwCittc2dpZCAiSW5wdXQgTGluZSIKK21zZ3N0ciAi6Ly45YWl6KGMIgorCisjOiBleF9nZXRsbi5jOjQ0NTAKK21zZ2lkICJFMTk4OiBjbWRfcGNoYXIgYmV5b25kIHRoZSBjb21tYW5kIGxlbmd0aCIKK21zZ3N0ciAiRTE5ODogY21kX3BjaGFyIOi2hemBjuWRveS7pOmVt+W6piIKKworIzogZXhfZ2V0bG4uYzo0NjI0Cittc2dpZCAiRTE5OTogQWN0aXZlIHdpbmRvdyBvciBidWZmZXIgZGVsZXRlZCIKK21zZ3N0ciAiRTE5OTog5bey5Yiq6Zmk5o6J5L2c55So5Lit55qE6KaW56qX5oiW5pqr5a2Y5Y2AIgorCisjOiBmaWxlaW8uYzozNzMKK21zZ2lkICJJbGxlZ2FsIGZpbGUgbmFtZSIKK21zZ3N0ciAi5LiN5q2j56K655qE5qqU5ZCNIgorCisjOiBmaWxlaW8uYzozOTcgZmlsZWlvLmM6NTIyIGZpbGVpby5jOjI2ODYgZmlsZWlvLmM6MjcyNworbXNnaWQgImlzIGEgZGlyZWN0b3J5IgorbXNnc3RyICLmmK/nm67pjIQiCisKKyM6IGZpbGVpby5jOjM5OQorbXNnaWQgImlzIG5vdCBhIGZpbGUiCittc2dzdHIgIuS4jeaYr+aqlOahiCIKKworIzogZmlsZWlvLmM6NTQ0IGZpbGVpby5jOjM4MzMKK21zZ2lkICJbTmV3IEZpbGVdIgorbXNnc3RyICJb5pyq5ZG95ZCNXSIKKworIzogZmlsZWlvLmM6NTY2Cittc2dpZCAiW1Blcm1pc3Npb24gRGVuaWVkXSIKK21zZ3N0ciAiW+asiumZkOS4jei2s10iCisKKyM6IGZpbGVpby5jOjY3MAorbXNnaWQgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtYWRlIHRoZSBmaWxlIHVucmVhZGFibGUiCittc2dzdHIgIkUyMDA6ICpSZWFkUHJlIEF1dG9jb21tYW5kIOS9v+eoi+W8j+eEoeazleiugOWPluatpOaqlCIKKworIzogZmlsZWlvLmM6NjcyCittc2dpZCAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTIwMTogKkZpbHRlciogQXV0b2NvbW1hbmQg5LiN5Y+v5Lul5pu05pS557ep6KGd5Y2A55qE5YWn5a65IgorCisjOiBmaWxlaW8uYzo2OTMKK21zZ2lkICJWaW06IFJlYWRpbmcgZnJvbSBzdGRpbi4uLlxuIgorbXNnc3RyICJWaW06IOW+nuaomea6lui8uOWFpeiugOWPli4uLlxuIgorCisjOiBmaWxlaW8uYzo2OTkKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIuW+nuaomea6lui8uOWFpeiugOWPli4uLiIKKworIy4gUmUtb3BlbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBmYWlsZWQhCisjOiBmaWxlaW8uYzo5NDQKK21zZ2lkICJFMjAyOiBDb252ZXJzaW9uIG1hZGUgZmlsZSB1bnJlYWRhYmxlISIKK21zZ3N0ciAiRTIwMjog6L2J5o+b6Yyv6KqkIgorCisjOiBmaWxlaW8uYzoxODkyCittc2dpZCAiW2ZpZm8vc29ja2V0XSIKK21zZ3N0ciAiW2ZpZm8vc29ja2V0XSIKKworIzogZmlsZWlvLmM6MTg5OQorbXNnaWQgIltmaWZvXSIKK21zZ3N0ciAiW2ZpZm9dIgorCisjOiBmaWxlaW8uYzoxOTA2Cittc2dpZCAiW3NvY2tldF0iCittc2dzdHIgIltzb2NrZXRdIgorCisjOiBmaWxlaW8uYzoxOTE0Cittc2dpZCAiW1JPXSIKK21zZ3N0ciAiW+WUr+iugF0iCisKKyM6IGZpbGVpby5jOjE5MjQKK21zZ2lkICJbQ1IgbWlzc2luZ10iCittc2dzdHIgIlvnvLrlsJFDUl0nIgorCisjOiBmaWxlaW8uYzoxOTI5Cittc2dpZCAiW05MIGZvdW5kXSIKK21zZ3N0ciAiW+aJvuWIsE5MXSIKKworIzogZmlsZWlvLmM6MTkzNAorbXNnaWQgIltsb25nIGxpbmVzIHNwbGl0XSIKK21zZ3N0ciAiW+WIhuWJsumBjumVt+ihjF0iCisKKyM6IGZpbGVpby5jOjE5NDAgZmlsZWlvLmM6MzgxNworbXNnaWQgIltOT1QgY29udmVydGVkXSIKK21zZ3N0ciAiW+acqui9ieaPm10iCisKKyM6IGZpbGVpby5jOjE5NDUgZmlsZWlvLmM6MzgyMgorbXNnaWQgIltjb252ZXJ0ZWRdIgorbXNnc3RyICJb5bey6L2J5o+bXSIKKworIzogZmlsZWlvLmM6MTk1MiBmaWxlaW8uYzozODQ3Cittc2dpZCAiW2NyeXB0ZWRdIgorbXNnc3RyICJb5bey5Yqg5a+GXSIKKworIzogZmlsZWlvLmM6MTk1OQorbXNnaWQgIltDT05WRVJTSU9OIEVSUk9SXSIKK21zZ3N0ciAi6L2J5o+b6Yyv6KqkIgorCisjOiBmaWxlaW8uYzoxOTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIltJTExFR0FMIEJZVEUgaW4gbGluZSAlbGRdIgorbXNnc3RyICJb6KGMICVsZCDmnInkuI3mraPnorrnmoTkvY3lhYNdIgorCisjOiBmaWxlaW8uYzoxOTcyCittc2dpZCAiW1JFQUQgRVJST1JTXSIKK21zZ3N0ciAiW+iugOWPlumMr+iqpF0iCisKKyM6IGZpbGVpby5jOjIxODgKK21zZ2lkICJDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3IgY29udmVyc2lvbiIKK21zZ3N0ciAi5om+5LiN5Yiw6L2J5o+b55So55qE5pqr5a2Y5qqUIgorCisjOiBmaWxlaW8uYzoyMTk1Cittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICLlrZflhYPpm4bovYnmj5vpjK/oqqQiCisKKyM6IGZpbGVpby5jOjIxOTgKK21zZ2lkICJjYW4ndCByZWFkIG91dHB1dCBvZiAnY2hhcmNvbnZlcnQnIgorbXNnc3RyICLnhKHms5XoroDlj5YgJ2NoYXJjb252ZXJ0JyDnmoTovLjlh7oiCisKKyM6IGZpbGVpby5jOjI2MDEKK21zZ2lkICJFMjAzOiBBdXRvY29tbWFuZHMgZGVsZXRlZCBvciB1bmxvYWRlZCBidWZmZXIgdG8gYmUgd3JpdHRlbiIKK21zZ3N0ciAiRTIwMzogQXV0b2NvbW1hbmQg5Yiq6Zmk5oiW6YeL5pS+5LqG6KaB5a+r5YWl55qE57ep6KGd5Y2AIgorCisjOiBmaWxlaW8uYzoyNjI0Cittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IEF1dG9jb21tYW5kIOaEj+WkluWcsOaUueiuiuS6huihjOiZnyIKKworIzogZmlsZWlvLmM6MjY5MiBmaWxlaW8uYzoyNzEwCittc2dpZCAiaXMgbm90IGEgZmlsZSBvciB3cml0YWJsZSBkZXZpY2UiCittc2dzdHIgIuS4jeaYr+aqlOahiOaIluWPr+Wvq+WFpeeahOijnee9riIKKworIzogZmlsZWlvLmM6Mjc2MgorbXNnaWQgImlzIHJlYWQtb25seSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICLmmK/llK/oroDmqpQgKOiri+S9v+eUqCAhIOW8t+WItuWft+ihjCkiCisKKyM6IGZpbGVpby5jOjMwNjUKK21zZ2lkICJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA2OiDnhKHms5Xlr6vlhaXlgpnku73mqpQgKOiri+S9v+eUqCAhIOW8t+WItuWft+ihjCkiCisKKyM6IGZpbGVpby5jOjMwNzcKK21zZ2lkICJFNTA3OiBDbG9zZSBlcnJvciBmb3IgYmFja3VwIGZpbGUgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwNzog54Sh5rOV6Zec6ZaJ5YKZ5Lu95qqUICjoq4vkvb/nlKggISDlvLfliLbln7fooYwpIgorCisjOiBmaWxlaW8uYzozMDc5Cittc2dpZCAiRTUwODogQ2FuJ3QgcmVhZCBmaWxlIGZvciBiYWNrdXAgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTUwODog54Sh5rOV6K6A5Y+W5qqU5qGI5Lul5L6b5YKZ5Lu9ICjoq4vkvb/nlKggISDlvLfliLbln7fooYwpIgorCisjOiBmaWxlaW8uYzozMDk1Cittc2dpZCAiRTUwOTogQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA5OiDnhKHms5Xlu7rnq4vlgpnku73mqpQgKOiri+S9v+eUqCAhIOW8t+WItuWft+ihjCkiCisKKyM6IGZpbGVpby5jOjMxOTgKK21zZ2lkICJFNTEwOiBDYW4ndCBtYWtlIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MTA6IOeEoeazleijveS9nOWCmeS7veaqlCAo6KuL5L2/55SoICEg5by35Yi25Z+36KGMKSIKKworIzogZmlsZWlvLmM6MzI2MAorbXNnaWQgIkU0NjA6IFRoZSByZXNvdXJjZSBmb3JrIHdvdWxkIGJlIGxvc3QgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ2MDogUmVzb3VyY2UgZm9yayDmnIPmtojlpLEgKOiri+S9v+eUqCAhIOW8t+WItuWft+ihjCkiCisKKyM6IGZpbGVpby5jOjMzNjEKK21zZ2lkICJFMjE0OiBDYW4ndCBmaW5kIHRlbXAgZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxNDog5om+5LiN5Yiw5a+r5YWl55So55qE5pqr5a2Y5qqUIgorCisjOiBmaWxlaW8uYzozMzc5Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKGFkZCAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIkUyMTM6IOeEoeazlei9ieaPmyAo6KuL5L2/55SoICEg5by35Yi25LiN6L2J5o+b5a+r5YWlKSIKKworIzogZmlsZWlvLmM6MzQxNAorbXNnaWQgIkUxNjY6IENhbid0IG9wZW4gbGlua2VkIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxNjY6IOeEoeazleS7peWvq+WFpeaooeW8j+mWi+WVn+mAo+e1kOaqlOahiCIKKworIzogZmlsZWlvLmM6MzQxOAorbXNnaWQgIkUyMTI6IENhbid0IG9wZW4gZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxMjog54Sh5rOV5Lul5a+r5YWl5qih5byP6ZaL5ZWfIgorCisjOiBmaWxlaW8uYzozNjY4Cittc2dpZCAiRTUxMjogQ2xvc2UgZmFpbGVkIgorbXNnc3RyICJFNTEyOiDpl5zplonlpLHmlZciCisKKyM6IGZpbGVpby5jOjM3MzkKK21zZ2lkICJFNTEzOiB3cml0ZSBlcnJvciwgY29udmVyc2lvbiBmYWlsZWQiCittc2dzdHIgIkU1MTM6IOeEoeazleWvq+WFpSAtLSDovYnmj5vlpLHmlZciCisKKyM6IGZpbGVpby5jOjM3NDUKK21zZ2lkICJFNTE0OiB3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICJFNTE0OiDlr6vlhaXpjK/oqqQgKOaqlOahiOezu+e1seW3sua7v++8nykiCisKKyM6IGZpbGVpby5jOjM4MTIKK21zZ2lkICIgQ09OVkVSU0lPTiBFUlJPUiIKK21zZ3N0ciAi6L2J5o+b6Yyv6KqkIgorCisjOiBmaWxlaW8uYzozODI4Cittc2dpZCAiW0RldmljZV0iCittc2dzdHIgIlvoo53nva5dIgorCisjOiBmaWxlaW8uYzozODMzCittc2dpZCAiW05ld10iCittc2dzdHIgIlvmlrBdIgorCisjOiBmaWxlaW8uYzozODU1Cittc2dpZCAiIFthXSIKK21zZ3N0ciAiW2FdIgorCisjOiBmaWxlaW8uYzozODU1Cittc2dpZCAiIGFwcGVuZGVkIgorbXNnc3RyICIg5bey6ZmE5YqgIgorCisjOiBmaWxlaW8uYzozODU3Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiW3ddIgorCisjOiBmaWxlaW8uYzozODU3Cittc2dpZCAiIHdyaXR0ZW4iCittc2dzdHIgIiDlt7Llr6vlhaUiCisKKyM6IGZpbGVpby5jOjM5MTAKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTogUGF0Y2gg5qih5byPOiDnhKHms5XlhLLlrZjljp/lp4vmqpTmoYgiCisKKyM6IGZpbGVpby5jOjM5MzIKK21zZ2lkICJFMjA2OiBwYXRjaG1vZGU6IGNhbid0IHRvdWNoIGVtcHR5IG9yaWdpbmFsIGZpbGUiCittc2dzdHIgIkUyMDY6IFBhdGNoIOaooeW8jzog54Sh5rOV6K6K5pu056m655qE5Y6f5aeL5qqU5qGIIgorCisjOiBmaWxlaW8uYzozOTQ3Cittc2dpZCAiRTIwNzogQ2FuJ3QgZGVsZXRlIGJhY2t1cCBmaWxlIgorbXNnc3RyICJFMjA3OiDnhKHms5XliKrpmaTlgpnku73mqpQiCisKKyM6IGZpbGVpby5jOjQwMDgKK21zZ2lkICIiCisiXG4iCisiV0FSTklORzogT3JpZ2luYWwgZmlsZSBtYXkgYmUgbG9zdCBvciBkYW1hZ2VkXG4iCittc2dzdHIgIiIKKyJcbiIKKyLorablkYo6IOWOn+Wni+aqlOahiOa1geWkseaIluaQjeWjnlxuIgorCisjOiBmaWxlaW8uYzo0MDEwCittc2dpZCAiZG9uJ3QgcXVpdCB0aGUgZWRpdG9yIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIKK21zZ3N0ciAi5Zyo5qqU5qGI5q2j56K65a+r5YWl5YmN6KuL5Yu/6Zui6ZaL57eo6Lyv5ZmoISIKKworIzogZmlsZWlvLmM6NDA5OQorbXNnaWQgIltkb3NdIgorbXNnc3RyICJbZG9zXSIKKworIzogZmlsZWlvLmM6NDA5OQorbXNnaWQgIltkb3MgZm9ybWF0XSIKK21zZ3N0ciAiW2RvcyDmoLzlvI9dIgorCisjOiBmaWxlaW8uYzo0MTA2Cittc2dpZCAiW21hY10iCittc2dzdHIgIlttYWNdIgorCisjOiBmaWxlaW8uYzo0MTA2Cittc2dpZCAiW21hYyBmb3JtYXRdIgorbXNnc3RyICJbbWFjIOagvOW8j10iCisKKyM6IGZpbGVpby5jOjQxMTMKK21zZ2lkICJbdW5peF0iCittc2dzdHIgIlt1bml4XSIKKworIzogZmlsZWlvLmM6NDExMworbXNnaWQgIlt1bml4IGZvcm1hdF0iCittc2dzdHIgIlt1bml4IOagvOW8j10iCisKKyM6IGZpbGVpby5jOjQxNDAKK21zZ2lkICIxIGxpbmUsICIKK21zZ3N0ciAiMSDooYwsICIKKworIzogZmlsZWlvLmM6NDE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMsICIKK21zZ3N0ciAiJWxkIOihjCwgIgorCisjOiBmaWxlaW8uYzo0MTQ1Cittc2dpZCAiMSBjaGFyYWN0ZXIiCittc2dzdHIgIuS4gOWAi+Wtl+WFgyIKKworIzogZmlsZWlvLmM6NDE0NworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgY2hhcmFjdGVycyIKK21zZ3N0ciAiJWxk5YCL5a2X5YWDIgorCisjOiBmaWxlaW8uYzo0MTU3Cittc2dpZCAiW25vZW9sXSIKK21zZ3N0ciAiW25vZW9sXSIKKworIzogZmlsZWlvLmM6NDE1NworbXNnaWQgIltJbmNvbXBsZXRlIGxhc3QgbGluZV0iCittc2dzdHIgIlvntZDlsL7ooYzkuI3lrozmlbRdIgorCisjLiBkb24ndCBvdmVyd3JpdGUgbWVzc2FnZXMgaGVyZQorIy4gbXVzdCBnaXZlIHRoaXMgcHJvbXB0CisjLiBkb24ndCB1c2UgZW1zZygpIGhlcmUsIGRvbid0IHdhbnQgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKyM6IGZpbGVpby5jOjQxNzYKK21zZ2lkICJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiCittc2dzdHIgIuitpuWRijog5pys5qqU5qGI6Ieq5LiK5qyh6K6A5YWl5b6M5bey6K6K5YuVISEhIgorCisjOiBmaWxlaW8uYzo0MTc4Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0IgorbXNnc3RyICLnorrlrpropoHlr6vlhaXll44iCisKKyM6IGZpbGVpby5jOjUyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiCittc2dzdHIgIkUyMDg6IOWvq+WFpeaqlOahiCBcIiVzXCIg6Yyv6KqkIgorCisjOiBmaWxlaW8uYzo1MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDk6IEVycm9yIGNsb3NpbmcgXCIlc1wiIgorbXNnc3RyICJFMjA5OiDpl5zplonmqpTmoYggXCIlc1wiIOmMr+iqpCIKKworIzogZmlsZWlvLmM6NTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDog6K6A5Y+W5qqU5qGIIFwiJXNcIiDpjK/oqqQiCisKKyM6IGZpbGVpby5jOjU0NDgKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIOWIqumZpOe3qeihneWNgCIKKworIzogZmlsZWlvLmM6NTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBubyBsb25nZXIgYXZhaWxhYmxlIgorbXNnc3RyICJFMjExOiDorablkYo6IOaqlOahiCBcIiVzXCIg5bey57aT5LiN5a2Y5ZyoIgorCisjOiBmaWxlaW8uYzo1NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXMTI6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIGFuZCB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGluIFZpbSBhcyAiCisid2VsbCIKK21zZ3N0ciAiVzEyOiDorablkYo6IOaqlOahiCBcIiVzXCIg6Ieq5LiK5qyh6K6A5YWl5b6M5bey6K6K5YuVLCDogIzkuJTnt6jovK/kuK3nmoTnt6nooZ3ljYDkuZ/mm7Tli5XkuoYiCisKKyM6IGZpbGVpby5jOjU0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzExOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiCittc2dzdHIgIlcxMTog6K2m5ZGKOiDmqpTmoYggXCIlc1wiIOiHquS4iuasoeiugOWFpeW+jOW3suiuiuWLlSIKKworIzogZmlsZWlvLmM6NTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICJXMTY6IFdhcm5pbmc6IE1vZGUgb2YgZmlsZSBcIiVzXCIgaGFzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTY6IOitpuWRijog5qqU5qGIIFwiJXNcIiDnmoTmrIrpmZDoiIfkuIrmrKHoroDlhaXmmYLkuI3kuIDmqKMgKOacieiuiuWLlemBjikiCisKKyMgJ21vZGUnIHNlZW1zIGJldHRlciBhcyB0cmFuc2xhdGVkIHRvICdwZXJtaXNzaW9uJz8KKyM6IGZpbGVpby5jOjU0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzEzOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzEzOiDorablkYo6IOaqlOahiCBcIiVzXCIg5Zyo6ZaL5aeL57eo6Lyv5b6M5Y+I6KKr5bu656uL5LqGIgorCisjOiBmaWxlaW8uYzo1NTAxCittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAi6K2m5ZGKIgorCisjOiBmaWxlaW8uYzo1NTAyCittc2dpZCAiIgorIiZPS1xuIgorIiZMb2FkIEZpbGUiCittc2dzdHIgIiIKKyLnorrlrpooJk8pXG4iCisi6LyJ5YWl5qqU5qGIKCZMKSIKKworIzogZmlsZWlvLmM6NTYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYyOiBDb3VsZCBub3QgcHJlcGFyZSBmb3IgcmVsb2FkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTQ2Mjog54Sh5rOV5rqW5YKZ6YeN5paw6LyJ5YWlIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NTYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIxOiBDb3VsZCBub3QgcmVsb2FkIFwiJXNcIiIKK21zZ3N0ciAiRTMyMTog54Sh5rOV6YeN5paw6LyJ5YWlIFwiJXNcIiIKKworIzogZmlsZWlvLmM6NjIwMQorbXNnaWQgIi0tRGVsZXRlZC0tIgorbXNnc3RyICItLeW3suWIqumZpC0tIgorCisjLiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdAorIzogZmlsZWlvLmM6NjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY3OiBObyBzdWNoIGdyb3VwOiBcIiVzXCIiCittc2dzdHIgIkUzNjc6IOeEoeatpOe+pOe1hDogXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyICo6ICVzIgorbXNnc3RyICJFMjE1OiAqIOW+jOmdouacieS4jeato+eiuueahOWtl+WFgzogJXMiCisKKyM6IGZpbGVpby5jOjY0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBldmVudDogJXMiCittc2dzdHIgIkUyMTY6IOeEoeatpOS6i+S7tjogJXMiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogZmlsZWlvLmM6NjY0NgorbXNnaWQgIiIKKyJcbiIKKyItLS0gQXV0by1Db21tYW5kcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gQXV0by1Db21tYW5kcyAtLS0iCisKKyM6IGZpbGVpby5jOjY5MTcKK21zZ2lkICJFMjE3OiBDYW4ndCBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IgQUxMIGV2ZW50cyIKK21zZ3N0ciAiRTIxNzog54Sh5rOV5bCN5omA5pyJ5LqL5Lu25Z+36KGMIGF1dG9jb21tYW5kIgorCisjOiBmaWxlaW8uYzo2OTQwCittc2dpZCAiTm8gbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIgorbXNnc3RyICLmib7kuI3liLDlsI3mh4nnmoQgYXV0b2NvbW1hbmQiCisKKyM6IGZpbGVpby5jOjcyNjAKK21zZ2lkICJFMjE4OiBhdXRvY29tbWFuZCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFMjE4OiBhdXRvY29tbWFuZCDlsaTmlbjpgY7mt7EiCisKKyM6IGZpbGVpby5jOjc1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgQXV0byBjb21tYW5kcyBmb3IgXCIlc1wiIgorbXNnc3RyICIlcyBBdXRvIGNvbW1hbmRzOiBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjc1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nICVzIgorbXNnc3RyICLln7fooYwgJXMiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZmlsZWlvLmM6NzYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJhdXRvY29tbWFuZCAlcyIKK21zZ3N0ciAiYXV0b2NvbW1hbmQgJXMiCisKKyM6IGZpbGVpby5jOjgxNzEKK21zZ2lkICJFMjE5OiBNaXNzaW5nIHsuIgorbXNnc3RyICJFMjE5OiDnvLrlsJEgey4iCisKKyM6IGZpbGVpby5jOjgxNzMKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiDnvLrlsJEgfS4iCisKKyM6IGZvbGQuYzo2NgorbXNnaWQgIkU0OTA6IE5vIGZvbGQgZm91bmQiCittc2dzdHIgIkU0OTA6IOaJvuS4jeWIsOS7u+S9lSBmb2xkIgorCisjOiBmb2xkLmM6NTUzCittc2dpZCAiRTM1MDogQ2Fubm90IGNyZWF0ZSBmb2xkIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTA6IOeEoeazleWcqOebruWJjeeahCAnZm9sZG1ldGhvZCcg5LiL5bu656uLIGZvbGQiCisKKyM6IGZvbGQuYzo1NTUKK21zZ2lkICJFMzUxOiBDYW5ub3QgZGVsZXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MTog54Sh5rOV5Zyo55uu5YmN55qEICdmb2xkbWV0aG9kJyDkuIvliKrpmaQgZm9sZCIKKworIzogZ2V0Y2hhci5jOjI0NgorbXNnaWQgIkUyMjI6IEFkZCB0byByZWFkIGJ1ZmZlciIKK21zZ3N0ciAiRTIyMjog5Yqg5YWl6K6A5Y+W57ep6KGd5Y2A5LitIgorCisjOiBnZXRjaGFyLmM6MjE0NgorbXNnaWQgIkUyMjM6IHJlY3Vyc2l2ZSBtYXBwaW5nIgorbXNnc3RyICJFMjIzOiDpgZ7ov7QgbWFwcGluZyIKKworIzogZ2V0Y2hhci5jOjI5OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNDogZ2xvYmFsIGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjQ6ICVzIOW3sue2k+acieWFqOWfnyBhYmJyZXZpYXRpb24g5LqGIgorCisjOiBnZXRjaGFyLmM6Mjk5NworIywgYy1mb3JtYXQKK21zZ2lkICJFMjI1OiBnbG9iYWwgbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjU6ICVzIOW3sue2k+acieWFqOWfnyBtYXBwaW5nIOS6hiIKKworIzogZ2V0Y2hhci5jOjMxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNjogYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzIGZvciAlcyIKK21zZ3N0ciAiRTIyNjogJXMg5bey57aT5pyJIGFiYnJldmlhdGlvbiDkuoYiCisKKyM6IGdldGNoYXIuYzozMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI3OiAlcyDnmoQgbWFwcGluZyDlt7LntpPlrZjlnKgiCisKKyM6IGdldGNoYXIuYzozMTkxCittc2dpZCAiTm8gYWJicmV2aWF0aW9uIGZvdW5kIgorbXNnc3RyICLmib7kuI3liLAgYWJicmV2aWF0aW9uIgorCisjOiBnZXRjaGFyLmM6MzE5MworbXNnaWQgIk5vIG1hcHBpbmcgZm91bmQiCittc2dzdHIgIuaykuaciemAmeWAiyBtYXBwaW5nIOWwjeaHiSIKKworIzogZ2V0Y2hhci5jOjQwODMKK21zZ2lkICJFMjI4OiBtYWtlbWFwOiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkUyMjg6IG1ha2VtYXA6IOS4jeato+eiuueahOaooeW8jyIKKworIzogZ3VpLmM6MjE4Cittc2dpZCAiRTIyOTogQ2Fubm90IHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkUyMjk6IOeEoeazleWVn+WLleWcluWei+eVjOmdoiIKKworIzogZ3VpLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzA6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjMwOiDnhKHms5XoroDlj5bmqpTmoYggXCIlc1wiIgorCisjOiBndWkuYzo0NzIKK21zZ2lkICJFMjMxOiAnZ3VpZm9udHdpZGUnIGludmFsaWQiCittc2dzdHIgIkUyMzE6IOS4jeato+eiuueahCAnZ3VpZm9udHdpZGUnIgorCisjOiBndWkuYzozOTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTQ6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciAlcyIKK21zZ3N0ciAiRTI1NDog5LiN6IO96YWN572u6aGP6ImyICVzIgorCisjOiBndWlfYXRfZnMuYzoyOTAKK21zZ2lkICI8Y2Fubm90IG9wZW4+ICIKK21zZ3N0ciAiPOS4jeiDvemWi+WVnz4iCisKKyM6IGd1aV9hdF9mcy5jOjExMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxNjogdmltX1NlbEZpbGU6IGNhbid0IGdldCBmb250ICVzIgorbXNnc3RyICJFNjE2OiB2aW1fU2VsRmlsZTog5LiN6IO95L2/55SoICVzIOWtl+WeiyIKKworIzogZ3VpX2F0X2ZzLmM6MjUzOAorbXNnaWQgIkU2MTQ6IHZpbV9TZWxGaWxlOiBjYW4ndCByZXR1cm4gdG8gY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgIkU2MTQ6IHZpbV9TZWxGaWxlOiDnhKHms5Xlm57liLDnm67liY3nm67pjIQiCisKKyM6IGd1aV9hdF9mcy5jOjI1NTcKK21zZ2lkICJQYXRobmFtZToiCittc2dzdHIgIui3r+W+kToiCisKKyM6IGd1aV9hdF9mcy5jOjI1NjMKK21zZ2lkICJFNjE1OiB2aW1fU2VsRmlsZTogY2FuJ3QgZ2V0IGN1cnJlbnQgZGlyZWN0b3J5IgorbXNnc3RyICJFNjE1OiB2aW1fU2VsRmlsZTog54Sh5rOV5Y+W5b6X55uu5YmN55uu6YyEIgorCisjOiBndWlfYXRfZnMuYzoyNTcxIGd1aV9tb3RpZi5jOjE2MTkKK21zZ2lkICJPSyIKK21zZ3N0ciAi56K65a6aIgorCisjOiBndWlfYXRfZnMuYzoyNTcxIGd1aV9ndGsuYzoyNjI1IGd1aV9tb3RpZi5jOjE2MTQgZ3VpX21vdGlmLmM6Mjg0NAorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi5Y+W5raIIgorCisjOiBndWlfYXRfc2IuYzo0ODYKK21zZ2lkICJTY3JvbGxiYXIgV2lkZ2V0OiBDb3VsZCBub3QgZ2V0IGdlb21ldHJ5IG9mIHRodW1iIHBpeG1hcC4iCittc2dzdHIgIuaNsuWLlei7uDog5LiN6IO96Kit5a6aIHRodW1iIHBpeG1hcCDnmoTkvY3nva4iCisKKyM6IGd1aV9hdGhlbmEuYzoxOTU2IGd1aV9tb3RpZi5jOjE4NjcKK21zZ2lkICJWaW0gZGlhbG9nIgorbXNnc3RyICJWaW0g5bCN6Kmx55uSIgorCisjOiBndWlfYmV2YWwuYzo5MQorbXNnaWQgIkUyMzI6IENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrIgorbXNnc3RyICJFMjMyOiDkuI3og73lsI3oqIrmga/oiIcgY2FsbGJhY2sg5bu656uLIEJhbGxvbkV2YWwiCisKKyM6IGd1aV9ndGsuYzoxNTYxCittc2dpZCAiVmltIGRpYWxvZy4uLiIKK21zZ3N0ciAiVmltIOWwjeipseebki4uLiIKKworIzogZ3VpX2d0ay5jOjE5OTIgbWVzc2FnZS5jOjI1MjUKK21zZ2lkICIiCisiJlllc1xuIgorIiZOb1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyImWeaYr1xuIgorIiZO5ZCmXG4iCisiJkPlj5bmtogiCisKKyM6IGd1aV9ndGsuYzoyMTUyCittc2dpZCAiSW5wdXQgX01ldGhvZHMiCittc2dzdHIgIui8uOWFpeazlSIKKworIzogZ3VpX2d0ay5jOjI0MTggZ3VpX21vdGlmLmM6Mjc2MworbXNnaWQgIlZJTSAtIFNlYXJjaCBhbmQgUmVwbGFjZS4uLiIKK21zZ3N0ciAiVklNIC0g5bCL5om+6IiH5Y+W5LujLi4uIgorCisjOiBndWlfZ3RrLmM6MjQyNiBndWlfbW90aWYuYzoyNzY1Cittc2dpZCAiVklNIC0gU2VhcmNoLi4uIgorbXNnc3RyICJWSU0gLSDlsIvmib4uLi4iCisKKyM6IGd1aV9ndGsuYzoyNDU4IGd1aV9tb3RpZi5jOjI4ODMKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICLmkJzlsIs6IgorCisjOiBndWlfZ3RrLmM6MjQ3OCBndWlfbW90aWYuYzoyOTE1Cittc2dpZCAiUmVwbGFjZSB3aXRoOiIKK21zZ3N0ciAi5Y+W5Luj54K6OiIKKworIy4gd2hvbGUgd29yZCBvbmx5IGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI1MTAgZ3VpX21vdGlmLmM6MzAzMQorbXNnaWQgIk1hdGNoIHdob2xlIHdvcmQgb25seSIKK21zZ3N0ciAi5Y+q5pCc5bCL5a6M5YWo55u45ZCM55qE5a2XIgorCisjLiBtYXRjaCBjYXNlIGJ1dHRvbgorIzogZ3VpX2d0ay5jOjI1MjMgZ3VpX21vdGlmLmM6MzA0MworbXNnaWQgIk1hdGNoIGNhc2UiCittc2dzdHIgIuespuWQiOWkp+Wwj+WvqyIKKworIzogZ3VpX2d0ay5jOjI1MzUgZ3VpX21vdGlmLmM6Mjk4NQorbXNnaWQgIkRpcmVjdGlvbiIKK21zZ3N0ciAi5pa55ZCRIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjI1NDcgZ3VpX21vdGlmLmM6Mjk5NworbXNnaWQgIlVwIgorbXNnc3RyICLlkJHkuIoiCisKKyM6IGd1aV9ndGsuYzoyNTUxIGd1aV9tb3RpZi5jOjMwMDUKK21zZ2lkICJEb3duIgorbXNnc3RyICLlkJHkuIsiCisKKyM6IGd1aV9ndGsuYzoyNTc3IGd1aV9ndGsuYzoyNTc5IGd1aV9tb3RpZi5jOjI3ODcKK21zZ2lkICJGaW5kIE5leHQiCittc2dzdHIgIuaJvuS4i+S4gOWAiyIKKworIzogZ3VpX2d0ay5jOjI1OTYgZ3VpX2d0ay5jOjI1OTggZ3VpX21vdGlmLmM6MjgwNAorbXNnaWQgIlJlcGxhY2UiCittc2dzdHIgIuWPluS7oyIKKworIzogZ3VpX2d0ay5jOjI2MDkgZ3VpX2d0ay5jOjI2MTEgZ3VpX21vdGlmLmM6MjgxNworbXNnaWQgIlJlcGxhY2UgQWxsIgorbXNnc3RyICLlj5bku6Plhajpg6giCisKKyM6IGd1aV9ndGtfeDExLmM6MjI4NQorbXNnaWQgIlZpbTogUmVjZWl2ZWQgXCJkaWVcIiByZXF1ZXN0IGZyb20gc2Vzc2lvbiBtYW5hZ2VyXG4iCittc2dzdHIgIlZpbTog55SxIFNlc3Npb24g566h55CG5ZOh5pS25YiwIFwiZGllXCIg6KaB5rGCXG4iCisKKyM6IGd1aV9ndGtfeDExLmM6MzQyNAorbXNnaWQgIlZpbTogTWFpbiB3aW5kb3cgdW5leHBlY3RlZGx5IGRlc3Ryb3llZFxuIgorbXNnc3RyICJWaW06IOS4u+imlueql+eIm+aOiVxuIgorCisjOiBndWlfZ3RrX3gxMS5jOjQwMzgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAi5a2X5Z6L6YG45pOHIgorCisjOiBndWlfZ3RrX3gxMS5jOjU4OTAgdWkuYzoyMDA5Cittc2dpZCAiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIKK21zZ3N0ciAi5L2/55SoIENVVF9CVUZGRVIwIOS+huWPluS7o+epuumBuOaThyIKKworIzogZ3VpX21vdGlmLmM6MTYxMyBndWlfbW90aWYuYzoxNjE2Cittc2dpZCAiRmlsdGVyIgorbXNnc3RyICLpgY7mv77lmagiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTUKK21zZ2lkICJEaXJlY3RvcmllcyIKK21zZ3N0ciAi55uu6YyEIgorCisjOiBndWlfbW90aWYuYzoxNjE3Cittc2dpZCAiSGVscCIKK21zZ3N0ciAi6LyU5Yqp6Kqq5piOIgorCisjOiBndWlfbW90aWYuYzoxNjE4Cittc2dpZCAiRmlsZXMiCittc2dzdHIgIuaqlOahiCIKKworIzogZ3VpX21vdGlmLmM6MTYyMAorbXNnaWQgIlNlbGVjdGlvbiIKK21zZ3N0ciAi6YG45pOHIgorCisjOiBndWlfbW90aWYuYzoyODMwCittc2dpZCAiVW5kbyIKK21zZ3N0ciAi5b6p5Y6fIgorCisjOiBndWlfcmlzY29zLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTA6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTYxMDog54Sh5rOV6ZaL5ZWfIFphcCDlrZflnosgJyVzJyIKKworIzogZ3VpX3Jpc2Nvcy5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMTogQ2FuJ3QgdXNlIGZvbnQgJXMiCittc2dzdHIgIkU2MTE6IOeEoeazleS9v+eUqOWtl+WeiyAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNjkKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisi6YCB5Ye65Lit5pa35a2Q56iL5byP55qE6KiK5oGv5LitLlxuIgorCisjOiBndWlfdzMyLmM6NzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNDM6IEFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQ6IFwiLSVzXCI7IFVzZSB0aGUgT0xFIHZlcnNpb24uIgorbXNnc3RyICJFMjQzOiDkuI3mlK/mj7Tlj4PmlbggXCItJXNcIuOAguiri+eUqCBPTEUg54mI5pys44CCIgorCisjOiBndWlfdzQ4LmM6MjAyOQorbXNnaWQgIkZpbmQgc3RyaW5nICh1c2UgJ1xcXFwnIHRvIGZpbmQgIGEgJ1xcJykiCittc2dzdHIgIuaQnOWwi+Wtl+S4siAo5L2/55SoICdcXFxcJyDkvobooajnpLogJ1xcJykiCisKKyM6IGd1aV93NDguYzoyMDU0Cittc2dpZCAiRmluZCAmIFJlcGxhY2UgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAi5pCc5bCL5Y+K5Y+W5Luj5a2X5LiyICjkvb/nlKggJ1xcXFwnIOS+huihqOekuiAnXFwnKSIKKworIzogZ3VpX3gxMS5jOjE0NDUKK21zZ2lkICJWaW0gRTQ1ODogQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5LCBzb21lIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0IgorbXNnc3RyICJWaW0gRTQ1ODog54Sh5rOV6YWN572uIGNvbG9yIG1hcCDpoIXnm67vvIzmnInkupvpoY/oibLnnIvotbfkvobmnIPmgKrmgKrnmoQiCisKKyM6IGd1aV94MTEuYzoyMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTA6IEZvbnRzIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzZXRzIGFyZSBtaXNzaW5nIGluIGZvbnRzZXQgJXM6IgorbXNnc3RyICJFMjUwOiBGb250c2V0ICVzIOaykuacieioreWumuato+eiuueahOWtl+Wei+S7peS+m+mhr+ekuumAmeS6m+Wtl+WFg+mbhjoiCisKKyM6IGd1aV94MTEuYzoyMDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNTI6IEZvbnRzZXQgbmFtZTogJXMiCittc2dzdHIgIkUyNTI6IOWtl+Wei+mbhihGb250c2V0KeWQjeeosTogJXMiCisKKyM6IGd1aV94MTEuYzoyMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQgJyVzJyBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIiclcycg5LiN5piv5Zu65a6a5a+s5bqm5a2X5Z6LIgorCisjOiBndWlfeDExLmM6MjA4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjUzOiBGb250c2V0IG5hbWU6ICVzXG4iCittc2dzdHIgIkUyNTM6IOWtl+Wei+mbhihGb250c2V0KeWQjeeosTogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDA6ICVzXG4iCittc2dzdHIgIkZvbnQwOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGb250MTogJXNcbiIKK21zZ3N0ciAiRm9udDE6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQlZCB3aWR0aCBpcyBub3QgdHdpY2UgdGhhdCBvZiBmb250MFxuIgorbXNnc3RyICLlrZflnoslZOWvrOW6puS4jeaYr+Wtl+WeizDnmoTlhanlgI1cbiIKKworIzogZ3VpX3gxMS5jOjIwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDAgd2lkdGg6ICVsZFxuIgorbXNnc3RyICLlrZflnosw55qE5a+s5bqm77yaJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyLlrZflnosx5a+s5bqmOiAlbGRcbiIKKyJcbiIKKworIzogaGFuZ3VsaW4uYzo2MTAKK21zZ2lkICJFMjU2OiBIYW5ndWwgYXV0b21hdGEgRVJST1IiCittc2dzdHIgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSDpjK/oqqQiCisKKyM6IGlmX2NzY29wZS5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjA6IFVzYWdlOiBjc1tjb3BlXSAlcyIKK21zZ3N0ciAiRTU2MDog55So5rOVOiBjc1tjb3BlXSAlcyIKKworIzogaWZfY3Njb3BlLmM6NjcKK21zZ2lkICJBZGQgYSBuZXcgZGF0YWJhc2UiCittc2dzdHIgIuaWsOWinuizh+aWmeW6qyIKKworIzogaWZfY3Njb3BlLmM6NjkKK21zZ2lkICJRdWVyeSBmb3IgYSBwYXR0ZXJuIgorbXNnc3RyICLovLjlhaUgcGF0dGVybiIKKworIzogaWZfY3Njb3BlLmM6NzEKK21zZ2lkICJTaG93IHRoaXMgbWVzc2FnZSIKK21zZ3N0ciAi6aGv56S65q2k6KiK5oGvIgorCisjOiBpZl9jc2NvcGUuYzo3MworbXNnaWQgIktpbGwgYSBjb25uZWN0aW9uIgorbXNnc3RyICLntZDmnZ/pgKPnt5oiCisKKyM6IGlmX2NzY29wZS5jOjc1Cittc2dpZCAiUmVpbml0IGFsbCBjb25uZWN0aW9ucyIKK21zZ3N0ciAi6YeN6Kit5omA5pyJ6YCj57eaIgorCisjOiBpZl9jc2NvcGUuYzo3NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIumhr+ekuumAo+e3miIKKworIzogaWZfY3Njb3BlLmM6MTA4Cittc2dpZCAiVGhpcyBjc2NvcGUgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0dGluZyB0aGUgd2luZG93LlxuIgorbXNnc3RyICLpgJnlgIsgY3Njb3BlIOWRveS7pOS4jeaUr+aPtOWIhuWJsuieouW5lVxuIgorCisjOiBpZl9jc2NvcGUuYzoxNDMKK21zZ2lkICJFNTYyOiBVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiRTU2Mjog55So5rOVOiBjc3RhZyA86K2Y5Yil5a2XaWRlbnQ+IgorCisjOiBpZl9jc2NvcGUuYzoxOTkKK21zZ2lkICJFMjU3OiBjc3RhZzogdGFnIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI1NzogY3N0YWc6IOaJvuS4jeWIsCB0YWciCisKKyM6IGlmX2NzY29wZS5jOjQwNyBpZl9jc2NvcGUuYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2Mzogc3RhdCglcykgZXJyb3I6ICVkIgorbXNnc3RyICJFNTYzOiBzdGF0KCVzKSDpjK/oqqQ6ICVkIgorCisjOiBpZl9jc2NvcGUuYzo0NjEgaWZfY3Njb3BlLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGVkIGNzY29wZSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAi5paw5aKeIGNzY29wZSDos4fmlpnluqsgJXMiCisKKyM6IGlmX2NzY29wZS5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY0OiAlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIkU1NjQ6ICVzIOS4jeaYr+ebrumMhOaIliBjc2NvcGUg6LOH5paZ5bqrIgorCisjOiBpZl9jc2NvcGUuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU2NTogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlZCIKK21zZ3N0ciAiRTU2NTog6K6A5Y+WIGNzY29wZSDpgKPnt5ogJWQg6Yyv6KqkIgorCisjOiBpZl9jc2NvcGUuYzo2MzYKK21zZ2lkICJFNTYxOiB1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKK21zZ3N0ciAiRTU2MTog5pyq55+l55qEIGNzY29wZSDmkJzlsIvlvaLmhYsiCisKKyM6IGlmX2NzY29wZS5jOjY4MworbXNnaWQgIkU1NjY6IENvdWxkIG5vdCBjcmVhdGUgY3Njb3BlIHBpcGVzIgorbXNnc3RyICJFNTY2OiDnhKHms5Xlu7rnq4voiIcgY3Njb3BlIOeahCBwaXBlIOmAo+e3miIKKworIzogaWZfY3Njb3BlLmM6NzQ4Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb24gZXhlYyBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uIOWft+ihjOWkseaVlyIKKworIzogaWZfY3Njb3BlLmM6NzU4Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIOWkseaVlyAodG9fZnApIgorCisjOiBpZl9jc2NvcGUuYzo3NjAKK21zZ2lkICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIGZvciBmcl9mcCBmYWlsZWQiCittc2dzdHIgImNzX2NyZWF0ZV9jb25uZWN0aW9uOiBmZG9wZW4g5aSx5pWXIChmcl9mcCkiCisKKyM6IGlmX2NzY29wZS5jOjc4OAorbXNnaWQgIkU1Njc6IG5vIGNzY29wZSBjb25uZWN0aW9ucyIKK21zZ3N0ciAiRTU2Nzog5rKS5pyJIGNzY29wZSDpgKPnt5oiCisKKyM6IGlmX2NzY29wZS5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU5OiBubyBtYXRjaGVzIGZvdW5kIGZvciBjc2NvcGUgcXVlcnkgJXMgb2YgJXMiCittc2dzdHIgIkUyNTk6IOaJvuS4jeWIsOespuWQiCBjc2NvcGUg55qE5pCc5bCLICVzIC8gJXMiCisKKyM6IGlmX2NzY29wZS5jOjkwMgorbXNnaWQgImNzY29wZSBjb21tYW5kczpcbiIKK21zZ3N0ciAiY3Njb3BlIOWRveS7pDpcbiIKKworIzogaWZfY3Njb3BlLmM6OTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtNXM6ICUtMzBzIChVc2FnZTogJXMpXG4iCittc2dzdHIgIiUtNXM6ICUtMzBzICjnlKjms5U6ICVzKVxuIgorCisjOiBpZl9jc2NvcGUuYzo5NzMKK21zZ2lkICJFNTY4OiBkdXBsaWNhdGUgY3Njb3BlIGRhdGFiYXNlIG5vdCBhZGRlZCIKK21zZ3N0ciAiRTU2ODog6YeN6KSH55qEIGNzY29wZSDos4fmlpnluqvmnKrooqvliqDlhaUiCisKKyM6IGlmX2NzY29wZS5jOjk4NAorbXNnaWQgIkU1Njk6IG1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICJFNTY5OiDlt7LpgZTliLAgY3Njb3BlIOacgOWkp+mAo+e3muaVuOebriIKKworIzogaWZfY3Njb3BlLmM6MTEwNQorbXNnaWQgIkUyNjA6IGNzY29wZSBjb25uZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MDog5om+5LiN5YiwIGNzY29wZSDpgKPnt5oiCisKKyM6IGlmX2NzY29wZS5jOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI2MTogY3Njb3BlIGNvbm5lY3Rpb24gJXMgbm90IGZvdW5kIgorbXNnc3RyICJFMjYxOiDmib7kuI3liLAgY3Njb3BlIOmAo+e3miAlcyIKKworIzogaWZfY3Njb3BlLmM6MTE0NAorbXNnaWQgImNzY29wZSBjb25uZWN0aW9uIGNsb3NlZCIKK21zZ3N0ciAiY3Njb3BlIOmAo+e3muW3sumXnOmWiSIKKworIzogaWZfY3Njb3BlLmM6MTE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWRcbiIKK21zZ3N0ciAiY3Njb3BlIOmAo+e3miAlcyDlt7Lpl5zplolcbiIKKworIy4gc2hvdWxkIG5vdCByZWFjaCBoZXJlCisjOiBpZl9jc2NvcGUuYzoxMjkzCittc2dpZCAiRTU3MDogZmF0YWwgZXJyb3IgaW4gY3NfbWFuYWdlX21hdGNoZXMiCittc2dzdHIgIkU1NzA6IGNzX21hbmFnZV9tYXRjaGVzIOWatOmHjemMr+iqpCIKKworIzogaWZfY3Njb3BlLmM6MTM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVkIgorbXNnc3RyICJFMjYyOiDoroDlj5YgY3Njb3BlIOmAo+e3miAlZCDpjK/oqqQiCisKKyM6IGlmX2NzY29wZS5jOjE0NTIKK21zZ2lkICJjb3VsZG4ndCBtYWxsb2NcbiIKK21zZ3N0ciAi54Sh5rOV5L2/55SoIG1hbGxvY1xuIgorCisjOiBpZl9jc2NvcGUuYzoxNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNzY29wZSB0YWc6ICVzXG4iCittc2dzdHIgIkNzY29wZSDmqJnnsaQodGFnKTogJXNcbiIKKworIzogaWZfY3Njb3BlLmM6MTQ2MQorbXNnaWQgIiAgICMgICBsaW5lIgorbXNnc3RyICIgICAjICAg6KGMICAiCisKKyM6IGlmX2NzY29wZS5jOjE0NjMKK21zZ2lkICJmaWxlbmFtZSAvIGNvbnRleHQgLyBsaW5lXG4iCittc2dzdHIgIuaqlOWQjSAgICAgLyDlhafmlocgICAgLyDooYzomZ9cbiIKKworIzogaWZfY3Njb3BlLmM6MTcyMQorbXNnaWQgIkFsbCBjc2NvcGUgZGF0YWJhc2VzIHJlc2V0IgorbXNnc3RyICLph43oqK3miYDmnIkgY3Njb3BlIOizh+aWmeW6qyIKKworIzogaWZfY3Njb3BlLmM6MTc4OAorbXNnaWQgIm5vIGNzY29wZSBjb25uZWN0aW9uc1xuIgorbXNnc3RyICLmspLmnIkgY3Njb3BlIOmAo+e3mlxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzkyCittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAg6LOH5paZ5bqr5ZCN56ixICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kIHBhdGhcbiIKKworIzogaWZfY3Njb3BlLmM6MTgwMworIywgYy1mb3JtYXQKK21zZ2lkICIlMmQgJS01bGQgICUtMzRzICA8bm9uZT5cbiIKK21zZ3N0ciAiJTJkICUtNWxkICAlLTM0cyAgPOeEoT5cbiIKKworIzogaWZfcHl0aG9uLmM6Mzk0Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIkUyNjM6IOaKseatie+8jOmAmeWAi+WRveS7pOeEoeazleS9v+eUqO+8jFB5dGhvbiDnqIvlvI/luqvmspLmnInovInlhaXjgIIiCisKKyM6IGlmX3B5dGhvbi5jOjU5NgorbXNnaWQgImNhbid0IGRlbGV0ZSBPdXRwdXRPYmplY3QgYXR0cmlidXRlcyIKK21zZ3N0ciAi54Sh5rOV5Yiq6ZmkIE91dHB1dE9iamVjdCDlsazmgKciCisKKyM6IGlmX3B5dGhvbi5jOjYwMworbXNnaWQgInNvZnRzcGFjZSBtdXN0IGJlIGFuIGludGVnZXIiCittc2dzdHIgInNvZnRzcGFjZSDlv4XpnIDmmK/mlbTmlbgiCisKKyM6IGlmX3B5dGhvbi5jOjYxMQorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIgorbXNnc3RyICLkuI3mraPnorrnmoTlsazmgKciCisKKyM6IGlmX3B5dGhvbi5jOjY1MCBpZl9weXRob24uYzo2NjQKK21zZ2lkICJ3cml0ZWxpbmVzKCkgcmVxdWlyZXMgbGlzdCBvZiBzdHJpbmdzIgorbXNnc3RyICJ3cml0ZWxpbmVzKCkg6ZyA6KaBIHN0cmluZyBsaXN0IOeVtuWPg+aVuCIKKworIzogaWZfcHl0aG9uLmM6NzkwCittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjog54Sh5rOV5Yid5aeLIEkvTyDnianku7YiCisKKyM6IGlmX3B5dGhvbi5jOjk3NSBpZl90Y2wuYzoxNDAyCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICLkuI3mraPnorrnmoTpgYvnrpflvI8iCisKKyM6IGlmX3B5dGhvbi5jOjk4OSBpZl90Y2wuYzoxNDA3Cittc2dpZCAiZXhwcmVzc2lvbnMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICLlm6Dngrrnt6jora/mmYLmspLmnInliqDlhaXpgYvnrpflvI8oZXhwcmVzc2lvbinnmoTnqIvlvI/norzvvIzmiYDku6XnhKHms5Xkvb/nlKjpgYvnrpflvI8iCisKKyM6IGlmX3B5dGhvbi5jOjEwMDIKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICLoqablnJbkvb/nlKjlt7LooqvliKrpmaTnmoQgYnVmZmVyIgorCisjOiBpZl9weXRob24uYzoxMDE3IGlmX3B5dGhvbi5jOjEwNTggaWZfcHl0aG9uLmM6MTEyMiBpZl90Y2wuYzoxMjE0Cittc2dpZCAibGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIgorbXNnc3RyICLooYzomZ/otoXlh7rnr4TlnI0iCisKKyM6IGlmX3B5dGhvbi5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IgorbXNnc3RyICI8YnVmZmVyIOeJqeS7tiAo5bey5Yiq6ZmkKTogJThsWD4iCisKKyM6IGlmX3B5dGhvbi5jOjEzNDggaWZfdGNsLmM6ODM2Cittc2dpZCAiaW52YWxpZCBtYXJrIG5hbWUiCittc2dzdHIgIuaomeiomOWQjeeoseS4jeato+eiuiIKKworIzogaWZfcHl0aG9uLmM6MTYyMworbXNnaWQgIm5vIHN1Y2ggYnVmZmVyIgorbXNnc3RyICLnhKHmraQgYnVmZmVyIgorCisjOiBpZl9weXRob24uYzoxNzExCittc2dpZCAiYXR0ZW1wdCB0byByZWZlciB0byBkZWxldGVkIHdpbmRvdyIKK21zZ3N0ciAi6Kmm5ZyW5L2/55So5bey6KKr5Yiq6Zmk55qE6KaW56qXIgorCisjOiBpZl9weXRob24uYzoxNzU2Cittc2dpZCAicmVhZG9ubHkgYXR0cmlidXRlIgorbXNnc3RyICLllK/oroDlsazmgKciCisKKyM6IGlmX3B5dGhvbi5jOjE3NjkKK21zZ2lkICJjdXJzb3IgcG9zaXRpb24gb3V0c2lkZSBidWZmZXIiCittc2dzdHIgIua4uOaomeWumuS9jeWcqOe3qeihneWNgOS5i+WkliIKKworIzogaWZfcHl0aG9uLmM6MTg0NgorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAoZGVsZXRlZCkgYXQgJS44bFg+IgorbXNnc3RyICI86KaW56qX54mp5Lu2KOW3suWIqumZpCk6ICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTg1OAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAodW5rbm93bikgYXQgJS44bFg+IgorbXNnc3RyICI86KaW56qX54mp5Lu2KOacquefpSk6ICUuOGxYPiIKKworIzogaWZfcHl0aG9uLmM6MTg2MAorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93ICVkPiIKK21zZ3N0ciAiPOimlueqlyAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5MzYKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAi54Sh5q2k6KaW56qXIgorCisjOiBpZl9weXRob24uYzoyMTkzIGlmX3B5dGhvbi5jOjIyMjggaWZfcHl0aG9uLmM6MjI3OCBpZl9weXRob24uYzoyMzQ2CisjOiBpZl9weXRob24uYzoyNDY2IGlmX3B5dGhvbi5jOjI1MTggaWZfdGNsLmM6Njg0IGlmX3RjbC5jOjcyOSBpZl90Y2wuYzo4MDMKKyM6IGlmX3RjbC5jOjg3MyBpZl90Y2wuYzoxOTk4Cittc2dpZCAiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi54Sh5rOV5YSy5a2Y5b6p5Y6f6LOH6KiKIgorCisjOiBpZl9weXRob24uYzoyMTk1IGlmX3B5dGhvbi5jOjIyODUgaWZfcHl0aG9uLmM6MjM1NworbXNnaWQgImNhbm5vdCBkZWxldGUgbGluZSIKK21zZ3N0ciAi5LiN6IO95Yiq6Zmk5q2k6KGMIgorCisjOiBpZl9weXRob24uYzoyMjMwIGlmX3B5dGhvbi5jOjIzNzMgaWZfdGNsLmM6NjkwIGlmX3RjbC5jOjIwMjAKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICLkuI3og73mm7/ku6PmraTooYwiCisKKyM6IGlmX3B5dGhvbi5jOjIzODkgaWZfcHl0aG9uLmM6MjQ2OCBpZl9weXRob24uYzoyNTI2Cittc2dpZCAiY2Fubm90IGluc2VydCBsaW5lIgorbXNnc3RyICLkuI3og73mm7/ku6Pmj5LlhaXmraTooYwiCisKKyM6IGlmX3B5dGhvbi5jOjI2MzAKK21zZ2lkICJzdHJpbmcgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgIuWtl+S4sueEoeazleWMheWQq+aWsOihjCIKKworIzogaWZfcnVieS5jOjM5NgorbXNnaWQgIiIKKyJFMjY2OiBTb3JyeSwgdGhpcyBjb21tYW5kIGlzIGRpc2FibGVkLCB0aGUgUnVieSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJFMjY2OiDmraTlkb3ku6TnhKHms5Xkvb/nlKjvvIznhKHms5XovInlhaUgUnVieSDnqIvlvI/luqsoTGlicmFyeSkiCisKKyM6IGlmX3J1YnkuYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3MzogdW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIKK21zZ3N0ciAiRTI3Mzog5pyq55+l55qEIGxvbmdqbXAgc3RhdHVzICVkIgorCisjOiBpZl9zbmlmZi5jOjY3Cittc2dpZCAiVG9nZ2xlIGltcGxlbWVudGF0aW9uL2RlZmluaXRpb24iCittc2dzdHIgIuWIh+aPm+WvpuS9nC/lrprnvqkiCisKKyM6IGlmX3NuaWZmLmM6NjgKK21zZ2lkICJTaG93IGJhc2UgY2xhc3Mgb2YiCittc2dzdHIgIumhr+ekuiBiYXNlIGNsYXNzIG9mOiIKKworIzogaWZfc25pZmYuYzo2OQorbXNnaWQgIlNob3cgb3ZlcnJpZGRlbiBtZW1iZXIgZnVuY3Rpb24iCittc2dzdHIgIumhr+ekuuiiqyBvdmVycmlkZSDnmoQgbWVtYmVyIGZ1bmN0aW9uIgorCisjOiBpZl9zbmlmZi5jOjcwCittc2dpZCAiUmV0cmlldmUgZnJvbSBmaWxlIgorbXNnc3RyICLoroDlj5Y6IOW+nuaqlOahiCIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAi6K6A5Y+WOiDlvp7nianku7YiCisKKyM6IGlmX3NuaWZmLmM6NzMKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGFsbCBwcm9qZWN0cyIKK21zZ3N0ciAi6K6A5Y+WOiDlvp7miYDmnIkgcHJvamVjdCIKKworIzogaWZfc25pZmYuYzo3NAorbXNnaWQgIlJldHJpZXZlIgorbXNnc3RyICLoroDlj5YiCisKKyM6IGlmX3NuaWZmLmM6NzUKK21zZ2lkICJTaG93IHNvdXJjZSBvZiIKK21zZ3N0ciAi6aGv56S65Y6f5aeL56K8OiAiCisKKyM6IGlmX3NuaWZmLmM6NzYKK21zZ2lkICJGaW5kIHN5bWJvbCIKK21zZ3N0ciAi5pCc5bCLIHN5bWJvbCIKKworIzogaWZfc25pZmYuYzo3NworbXNnaWQgIkJyb3dzZSBjbGFzcyIKK21zZ3N0ciAi54CP6Ka9IGNsYXNzIgorCisjOiBpZl9zbmlmZi5jOjc4Cittc2dpZCAiU2hvdyBjbGFzcyBpbiBoaWVyYXJjaHkiCittc2dzdHIgIumhr+ekuumajuWxpOW8j+eahCBjbGFzcyIKKworIzogaWZfc25pZmYuYzo3OQorbXNnaWQgIlNob3cgY2xhc3MgaW4gcmVzdHJpY3RlZCBoaWVyYXJjaHkiCittc2dzdHIgIumhr+ekuiByZXN0cmljdGVkIOmajuWxpOW8j+eahCBjbGFzcyIKKworIzogaWZfc25pZmYuYzo4MAorbXNnaWQgIlhyZWYgcmVmZXJzIHRvIgorbXNnc3RyICJYcmVmIOWPg+iAg+WIsCIKKworIzogaWZfc25pZmYuYzo4MQorbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCittc2dzdHIgIlhyZWYg6KKr6Kqw5Y+D6ICDOiIKKworIzogaWZfc25pZmYuYzo4MgorbXNnaWQgIlhyZWYgaGFzIGEiCittc2dzdHIgIlhyZWYg5pyJIgorCisjOiBpZl9zbmlmZi5jOjgzCittc2dpZCAiWHJlZiB1c2VkIGJ5IgorbXNnc3RyICJYcmVmIOiiq+iqsOS9v+eUqDoiCisKKyM6IGlmX3NuaWZmLmM6ODQKK21zZ2lkICJTaG93IGRvY3Ugb2YiCittc2dzdHIgIumhr+ekuuaWh+S7tjogIgorCisjOiBpZl9zbmlmZi5jOjg1Cittc2dpZCAiR2VuZXJhdGUgZG9jdSBmb3IiCittc2dzdHIgIueUoueUn+aWh+S7tjogIgorCisjOiBpZl9zbmlmZi5jOjk3Cittc2dpZCAiIgorIkNhbm5vdCBjb25uZWN0IHRvIFNOaUZGKy4gQ2hlY2sgZW52aXJvbm1lbnQgKHNuaWZmZW1hY3MgbXVzdCBiZSBmb3VuZCBpbiAiCisiJFBBVEgpLlxuIgorbXNnc3RyICLnhKHms5XpgKPnt5rliLAgU05pRkYr44CC6KuL5qqi5p+l55Kw5aKD6K6K5pW4ICgkUEFUSCDoo6Hlv4XpnIDlj6/ku6Xmib7liLAgc25pZmZlbWFjcylcbiIKKworIzogaWZfc25pZmYuYzo0MjUKK21zZ2lkICJFMjc0OiBTbmlmZjogRXJyb3IgZHVyaW5nIHJlYWQuIERpc2Nvbm5lY3RlZCIKK21zZ3N0ciAiRTI3NDogU25pZmY6IOiugOWPlumMr+iqpC4g5Y+W5raI6YCj57eaIgorCisjOiBpZl9zbmlmZi5jOjU1MworbXNnaWQgIlNOaUZGKyBpcyBjdXJyZW50bHkgIgorbXNnc3RyICJTTmlGRisg55uu5YmNIgorCisjOiBpZl9zbmlmZi5jOjU1NQorbXNnaWQgIm5vdCAiCittc2dzdHIgIuacqiIKKworIzogaWZfc25pZmYuYzo1NTYKK21zZ2lkICJjb25uZWN0ZWQiCittc2dzdHIgIumAo+e3muS4rSIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6IOS4jeato+eiuueahCBTTmlmZisg5ZG85Y+rOiAlcyIKKworIzogaWZfc25pZmYuYzo2MDUKK21zZ2lkICJFMjc2OiBFcnJvciBjb25uZWN0aW5nIHRvIFNOaUZGKyIKK21zZ3N0ciAiRTI3Njog6YCj57ea5YiwIFNOaUZGKyDlpLHmlZciCisKKyM6IGlmX3NuaWZmLmM6MTAwOQorbXNnaWQgIkUyNzg6IFNOaUZGKyBub3QgY29ubmVjdGVkIgorbXNnc3RyICJFMjc4OiDmnKrpgKPnt5rliLAgU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwMTgKK21zZ2lkICJFMjc5OiBOb3QgYSBTTmlGRisgYnVmZmVyIgorbXNnc3RyICJFMjc5OiDkuI3mmK8gU05pRkYrIOeahOe3qeihneWNgCIKKworIzogaWZfc25pZmYuYzoxMDgzCittc2dpZCAiU25pZmY6IEVycm9yIGR1cmluZyB3cml0ZS4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJTbmlmZjog5a+r5YWl6Yyv6Kqk44CC57WQ5p2f6YCj57eaIgorCisjOiBpZl90Y2wuYzo0MTgKK21zZ2lkICJpbnZhbGlkIGJ1ZmZlciBudW1iZXIiCittc2dzdHIgIue3qeihneWNgOiZn+eivOmMr+iqpCIKKworIzogaWZfdGNsLmM6NDY0IGlmX3RjbC5jOjkzMSBpZl90Y2wuYzoxMTEwCittc2dpZCAibm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAi5bCa5pyq5a+m5L2cIgorCisjOiBpZl90Y2wuYzo1MDEKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAi5LiN5q2j56K655qE6YG46aCFIgorCisjLiA/Pz8KKyM6IGlmX3RjbC5jOjc3NAorbXNnaWQgImNhbm5vdCBzZXQgbGluZShzKSIKK21zZ3N0ciAi5LiN6IO96Kit5a6a6KGMIgorCisjOiBpZl90Y2wuYzo4NDUKK21zZ2lkICJtYXJrIG5vdCBzZXQiCittc2dzdHIgIuaykuacieioreWumuaomeiomCIKKworIzogaWZfdGNsLmM6ODUxIGlmX3RjbC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicm93ICVkIGNvbHVtbiAlZCIKK21zZ3N0ciAi5YiXICVkIOihjCAlZCIKKworIzogaWZfdGNsLmM6ODgxCittc2dpZCAiY2Fubm90IGluc2VydC9hcHBlbmQgbGluZSIKK21zZ3N0ciAi5LiN6IO95o+S5YWl5oiW6ZmE5Yqg5q2k6KGMIgorCisjOiBpZl90Y2wuYzoxMjY4Cittc2dpZCAidW5rbm93biBmbGFnOiAiCittc2dzdHIgIumMr+iqpOeahOaXl+aomTogIgorCisjOiBpZl90Y2wuYzoxMzM4Cittc2dpZCAidW5rbm93biB2aW1PcHRpb24iCittc2dzdHIgIuS4jeato+eiuueahCBWSU0g6YG46aCFIgorCisjOiBpZl90Y2wuYzoxNDIzCittc2dpZCAia2V5Ym9hcmQgaW50ZXJydXB0IgorbXNnc3RyICLpjbXnm6TkuK3mlrciCisKKyM6IGlmX3RjbC5jOjE0MjgKK21zZ2lkICJ2aW0gZXJyb3IiCittc2dzdHIgInZpbSDpjK/oqqQiCisKKyM6IGlmX3RjbC5jOjE0NzEKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGJ1ZmZlci93aW5kb3cgY29tbWFuZDogb2JqZWN0IGlzIGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIueEoeazleW7uueri+e3qeihneWNgC/oppbnqpflkb3ku6Q6IOeJqeS7tuWwh+acg+iiq+WIqumZpCIKKworIzogaWZfdGNsLmM6MTU0NQorbXNnaWQgIiIKKyJjYW5ub3QgcmVnaXN0ZXIgY2FsbGJhY2sgY29tbWFuZDogYnVmZmVyL3dpbmRvdyBpcyBhbHJlYWR5IGJlaW5nIGRlbGV0ZWQiCittc2dzdHIgIueEoeazleiou+WGiiBjYWxsYmFjayDlkb3ku6Q6IOe3qeihneWNgC/oppbnqpflt7LntpPooqvliKrpmaTkuoYiCisKKyMuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEZhbW91cyBsYXN0IHdvcmQ/CisjOiBpZl90Y2wuYzoxNTYyCittc2dpZCAiIgorIkUyODA6IFRDTCBGQVRBTCBFUlJPUjogcmVmbGlzdCBjb3JydXB0IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLiIKKyJvcmciCittc2dzdHIgIkUyODA6IFRDTCDlmrTph43pjK/oqqQ6IHJlZmxpc3Qg54ib5o6J5LqGIT8g6KuL5aCx5ZGK57WmIHRvIHZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTU2MworbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIueEoeazleiou+WGiiBjYWxsYmFjayDlkb3ku6Q6IOaJvuS4jeWIsOe3qeihneWNgC/oppbnqpciCisKKyM6IGlmX3RjbC5jOjE3MjQKK21zZ2lkICIiCisiRTU3MTogU29ycnksIHRoaXMgY29tbWFuZCBpcyBkaXNhYmxlZDogdGhlIFRjbCBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisiRTU3MTog5q2k5ZG95Luk54Sh5rOV5L2/55SoLCDlm6DngrrnhKHms5XovInlhaUgVGNsIOeoi+W8j+W6qyhMaWJyYXJ5KSIKKworIzogaWZfdGNsLmM6MTg4NgorbXNnaWQgIiIKKyJFMjgxOiBUQ0wgRVJST1I6IGV4aXQgY29kZSBpcyBub3QgaW50IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLm9yZyIKK21zZ3N0ciAiRTI4MTogVENMIOmMr+iqpDog57WQ5p2f56K85LiN5piv5pW05pW4IT8g6KuL5aCx5ZGK57WmIHRvIHZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MjAwNgorbXNnaWQgImNhbm5vdCBnZXQgbGluZSIKK21zZ3N0ciAi5LiN6IO95Y+W5b6X5q2k6KGMIgorCisjOiBpZl94Y21kc3J2LmM6MjE1Cittc2dpZCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgY29tbWFuZCBzZXJ2ZXIgbmFtZSIKK21zZ3N0ciAi54Sh5rOV6Ki75YaK5ZG95Luk5Ly65pyN5Zmo5ZCN56ixIgorCisjOiBpZl94Y21kc3J2LmM6NDY1Cittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODog54Sh5rOV6YCB5Ye65ZG95Luk5Yiw55uu55qE5Zyw56iL5byPIgorCisjOiBpZl94Y21kc3J2LmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzM6IEludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICJFNTczOiDkuI3mraPnorrnmoTkvLrmnI3lmaggaWQgOiAlcyIKKworIzogaWZfeGNtZHNydi5jOjEwOTgKK21zZ2lkICJFMjUxOiBWSU0gaW5zdGFuY2UgcmVnaXN0cnkgcHJvcGVydHkgaXMgYmFkbHkgZm9ybWVkLiAgRGVsZXRlZCEiCittc2dzdHIgIkUyNTE6IFZJTSDnmoQgcmVnaXN0cnkg6Kit5a6a6aCF5pyJ6Kqk44CC5bey5Yiq6Zmk44CCIgorCisjOiBtYWluLmM6NjAKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAi5LiN5q2j56K655qE6YG46aCFIgorCisjOiBtYWluLmM6NjIKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAi5aSq5aSa57eo6Lyv5Y+D5pW4IgorCisjOiBtYWluLmM6NjQKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICLnvLrlsJHlv4XopoHnmoTlj4Pmlbg6IgorCisjOiBtYWluLmM6NjYKK21zZ2lkICJHYXJiYWdlIGFmdGVyIG9wdGlvbiIKK21zZ3N0ciAi54Sh5rOV6L6o6KqN5q2k6YG46aCF5b6M55qE5ZG95LukOiAiCisKKyM6IG1haW4uYzo2OAorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiBvciBcIi1jIGNvbW1hbmRcIiBhcmd1bWVudHMiCittc2dzdHIgIuWkquWkmiBcIitjb21tYW5kXCIg5oiWIFwiLWMgY29tbWFuZFwiIOWPg+aVuCIKKworIzogbWFpbi5jOjcwCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBmb3IiCittc2dzdHIgIuS4jeato+eiuueahOWPg+aVuDogIgorCisjOiBtYWluLmM6NDY5Cittc2dpZCAiVGhpcyBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSBkaWZmIGZlYXR1cmUuIgorbXNnc3RyICLmgqjnmoQgVmltIOe3qOitr+aZguaykuacieWKoOWFpSBkaWZmIOeahOiDveWKmyIKKworIzogbWFpbi5jOjkxNworbXNnaWQgIkF0dGVtcHQgdG8gb3BlbiBzY3JpcHQgZmlsZSBhZ2FpbjogXCIiCittc2dzdHIgIuippuWcluWGjeasoemWi+WVnyBzY3JpcHQg5qqUOiBcIiIKKworIzogbWFpbi5jOjkyMSBtYWluLmM6OTI4IG1haW4uYzo5NzIgbWVtbGluZS5jOjM2ODIgbWVtbGluZS5jOjM2ODYKKyM6IHZlcnNpb24uYzo4NTcgdmVyc2lvbi5jOjg2MiB2ZXJzaW9uLmM6ODY3IHZlcnNpb24uYzo4NzIgdmVyc2lvbi5jOjg3NworIzogdmVyc2lvbi5jOjg4MiB2ZXJzaW9uLmM6ODg4IHZlcnNpb24uYzo4OTIgdmVyc2lvbi5jOjg5NiB2ZXJzaW9uLmM6OTAxCisjOiB2ZXJzaW9uLmM6OTA4IHZlcnNpb24uYzo5MTYgdmVyc2lvbi5jOjkyMgorbXNnaWQgIlwiXG4iCittc2dzdHIgIlwiXG4iCisKKyM6IG1haW4uYzo5MjYKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3IgcmVhZGluZzogXCIiCittc2dzdHIgIueEoeazlemWi+WVn+S7peiugOWPljogXCIiCisKKyM6IG1haW4uYzo5NzAKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3Igc2NyaXB0IG91dHB1dDogXCIiCittc2dzdHIgIueEoeazlemWi+WVn+eCuiBzY3JpcHQg6Ly45Ye6OiBcIiIKKworIzogbWFpbi5jOjExMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmlsZXMgdG8gZWRpdFxuIgorbXNnc3RyICLpgoTmnIkgJWQg5YCL5qqU5qGI562J5b6F57eo6LyvXG4iCisKKyM6IG1haW4uYzoxMTc4Cittc2dpZCAiVmltOiBXYXJuaW5nOiBPdXRwdXQgaXMgbm90IHRvIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiDms6jmhI86IOi8uOWHuuS4jeaYr+e1guerr+apnyjonqLluZUpXG4iCisKKyM6IG1haW4uYzoxMTgwCittc2dpZCAiVmltOiBXYXJuaW5nOiBJbnB1dCBpcyBub3QgZnJvbSBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTog5rOo5oSPOiDovLjlhaXkuI3mmK/ntYLnq6/mqZ8o6Y2155ukKVxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjEyNTcKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJ2aW1yYyDliY3lkb3ku6TliJciCisKKyM6IG1haW4uYzoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODI6IENhbm5vdCByZWFkIGZyb20gXCIlc1wiIgorbXNnc3RyICJFMjgyOiDnhKHms5XoroDlj5bmqpTmoYggXCIlc1wiIgorCisjOiBtYWluLmM6MjMxMworbXNnaWQgIiIKKyJcbiIKKyJNb3JlIGluZm8gd2l0aDogXCJ2aW0gLWhcIlxuIgorbXNnc3RyICIiCisiXG4iCisi5p+l6Kmi5pu05aSa6LOH6KiK6KuL5Z+36KGMOiBcInZpbSAtaFwiXG4iCisKKyM6IG1haW4uYzoyMzQ2Cittc2dpZCAiW2ZpbGUgLi5dICAgICAgIGVkaXQgc3BlY2lmaWVkIGZpbGUocykiCittc2dzdHIgIlvmqpTmoYggLi5dICAgICAgIOe3qOi8r+aMh+WumueahOaqlOahiCIKKworIzogbWFpbi5jOjIzNDcKK21zZ2lkICItICAgICAgICAgICAgICAgcmVhZCB0ZXh0IGZyb20gc3RkaW4iCittc2dzdHIgIi0gICAgICAgICAgICAgICDlvp7mqJnmupbovLjlhaUoc3RkaW4p6K6A5Y+W5qqU5qGIIgorCisjOiBtYWluLmM6MjM0OAorbXNnaWQgIi10IHRhZyAgICAgICAgICBlZGl0IGZpbGUgd2hlcmUgdGFnIGlzIGRlZmluZWQiCittc2dzdHIgIi10IHRhZyAgICAgICAgICDnt6jovK/mmYLkvb/nlKjmjIflrprnmoQgdGFnIgorCisjOiBtYWluLmM6MjM1MAorbXNnaWQgIi1xIFtlcnJvcmZpbGVdICBlZGl0IGZpbGUgd2l0aCBmaXJzdCBlcnJvciIKK21zZ3N0ciAiLXEgW2Vycm9yZmlsZV0gIOe3qOi8r+aZgui8ieWFpeesrOS4gOWAi+mMr+iqpCIKKworIzogbWFpbi5jOjIzNTkKK21zZ2lkICIiCisiXG4iCisiXG4iCisidXNhZ2U6IgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiIOeUqOazlToiCisKKyM6IG1haW4uYzoyMzYyCittc2dpZCAiIHZpbSBbYXJndW1lbnRzXSAiCittc2dzdHIgInZpbSBb5Y+D5pW4XSAiCisKKyM6IG1haW4uYzoyMzY2Cittc2dpZCAiIgorIlxuIgorIiAgIG9yOiIKK21zZ3N0ciAiIgorIlxuIgorIiAgIOaIljoiCisKKyM6IG1haW4uYzoyMzY5Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50czpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIuWPg+aVuDpcbiIKKworIzogbWFpbi5jOjIzNzAKK21zZ2lkICItLVx0XHRcdE9ubHkgZmlsZSBuYW1lcyBhZnRlciB0aGlzIgorbXNnc3RyICItLVx0XHRcdOWPquacieWcqOmAmeS5i+W+jOeahOaqlOahiCIKKworIzogbWFpbi5jOjIzNzIKK21zZ2lkICItLWxpdGVyYWxcdFx0RG9uJ3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiLS1saXRlcmFsXHRcdOS4jeWxlemWi+iQrOeUqOWtl+WFgyIKKworIzogbWFpbi5jOjIzNzUKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHToqLvlhoogZ3ZpbSDliLAgT0xFIgorCisjOiBtYWluLmM6MjM3NgorbXNnaWQgIi11bnJlZ2lzdGVyXHRcdFVucmVnaXN0ZXIgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItdW5yZWdpc3Rlclx0XHTlj5bmtoggT0xFIOS4reeahCBndmltIOiou+WGiiIKKworIzogbWFpbi5jOjIzNzkKK21zZ2lkICItZ1x0XHRcdFJ1biB1c2luZyBHVUkgKGxpa2UgXCJndmltXCIpIgorbXNnc3RyICItZ1x0XHRcdOS9v+eUqOWcluW9oueVjOmdoiAo5ZCMIFwiZ3ZpbVwiKSIKKworIzogbWFpbi5jOjIzODAKK21zZ2lkICItZiAgb3IgIC0tbm9mb3JrXHRGb3JlZ3JvdW5kOiBEb24ndCBmb3JrIHdoZW4gc3RhcnRpbmcgR1VJIgorbXNnc3RyICItZiAg5oiWICAtLW5vZm9ya1x05YmN5pmvOiDotbflp4vlnJblvaLnlYzpnaLmmYLkuI0gZm9yayIKKworIzogbWFpbi5jOjIzODIKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRWaSDmqKHlvI8gKOWQjCBcInZpXCIpIgorCisjOiBtYWluLmM6MjM4MworbXNnaWQgIi1lXHRcdFx0RXggbW9kZSAobGlrZSBcImV4XCIpIgorbXNnc3RyICItZVx0XHRcdEV4IOaooeW8jyAo5ZCMIFwiZXhcIikiCisKKyM6IG1haW4uYzoyMzg0Cittc2dpZCAiLXNcdFx0XHRTaWxlbnQgKGJhdGNoKSBtb2RlIChvbmx5IGZvciBcImV4XCIpIgorbXNnc3RyICItc1x0XHRcdOWuiemdnCAoYmF0Y2gpIOaooeW8jyAo5Y+q6IO96IiHIFwiZXhcIiDkuIDotbfkvb/nlKgpIgorCisjOiBtYWluLmM6MjM4NgorbXNnaWQgIi1kXHRcdFx0RGlmZiBtb2RlIChsaWtlIFwidmltZGlmZlwiKSIKK21zZ3N0ciAiLWRcdFx0XHREaWZmIOaooeW8jyAo5ZCMIFwidmltZGlmZlwiLCDlj6/ov4XpgJ/mr5TovIPlhanmqpTmoYjkuI3lkIzomZUpIgorCisjOiBtYWluLmM6MjM4OAorbXNnaWQgIi15XHRcdFx0RWFzeSBtb2RlIChsaWtlIFwiZXZpbVwiLCBtb2RlbGVzcykiCittc2dzdHIgIi15XHRcdFx057Ch5piT5qih5byPICjlkIwgXCJldmltXCIsIG1vZGVsZXNzKSIKKworIzogbWFpbi5jOjIzODkKK21zZ2lkICItUlx0XHRcdFJlYWRvbmx5IG1vZGUgKGxpa2UgXCJ2aWV3XCIpIgorbXNnc3RyICItUlx0XHRcdOWUr+iugOaooeW8jyAo5ZCMIFwidmlld1wiKSIKKworIzogbWFpbi5jOjIzOTAKK21zZ2lkICItWlx0XHRcdFJlc3RyaWN0ZWQgbW9kZSAobGlrZSBcInJ2aW1cIikiCittc2dzdHIgIi1aXHRcdFx06ZmQ5Yi25qih5byPICjlkIwgXCJydmltXCIpIgorCisjOiBtYWluLmM6MjM5MQorbXNnaWQgIi1tXHRcdFx0TW9kaWZpY2F0aW9ucyAod3JpdGluZyBmaWxlcykgbm90IGFsbG93ZWQiCittc2dzdHIgIi1tXHRcdFx05LiN5Y+v5L+u5pS5ICjlr6vlhaXmqpTmoYgpIgorCisjOiBtYWluLmM6MjM5MgorbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdOS4jeWPr+S/ruaUueaWh+WtlyIKKworIzogbWFpbi5jOjIzOTMKK21zZ2lkICItYlx0XHRcdEJpbmFyeSBtb2RlIgorbXNnc3RyICItYlx0XHRcdOS6jOmAsuS9jeaooeW8jyIKKworIzogbWFpbi5jOjIzOTUKK21zZ2lkICItbFx0XHRcdExpc3AgbW9kZSIKK21zZ3N0ciAiLWxcdFx0XHRMaXNwIOaooeW8jyIKKworIzogbWFpbi5jOjIzOTcKK21zZ2lkICItQ1x0XHRcdENvbXBhdGlibGUgd2l0aCBWaTogJ2NvbXBhdGlibGUnIgorbXNnc3RyICItQ1x0XHRcdCdjb21wYXRpYmxlJyDlgrPntbEgVmkg55u45a655qih5byPIgorCisjOiBtYWluLmM6MjM5OAorbXNnaWQgIi1OXHRcdFx0Tm90IGZ1bGx5IFZpIGNvbXBhdGlibGU6ICdub2NvbXBhdGlibGUnIgorbXNnc3RyICItTlx0XHRcdCdub2NvbXBhdGlibGUnIOS4jeWujOWFqOiIh+WCs+e1sSBWaSDnm7jlrrnvvIzlj6/kvb/nlKggVmltIOWKoOW8t+iDveWKmyIKKworIzogbWFpbi5jOjIzOTkKK21zZ2lkICItVltOXVx0XHRWZXJib3NlIGxldmVsIgorbXNnc3RyICItVltOXVx0XHRWZXJib3NlIOetiee0miIKKworIzogbWFpbi5jOjI0MDAKK21zZ2lkICItRFx0XHRcdERlYnVnZ2luZyBtb2RlIgorbXNnc3RyICItRFx0XHRcdOmZpOmMr+aooeW8jyIKKworIzogbWFpbi5jOjI0MDEKK21zZ2lkICItblx0XHRcdE5vIHN3YXAgZmlsZSwgdXNlIG1lbW9yeSBvbmx5IgorbXNnc3RyICItblx0XHRcdOS4jeS9v+eUqOaaq+WtmOaqlCwg5Y+q5L2/55So6KiY5oa26auUIgorCisjOiBtYWluLmM6MjQwMgorbXNnaWQgIi1yXHRcdFx0TGlzdCBzd2FwIGZpbGVzIGFuZCBleGl0IgorbXNnc3RyICItclx0XHRcdOWIl+WHuuaaq+WtmOaqlOW+jOmboumWiyIKKworIzogbWFpbi5jOjI0MDMKK21zZ2lkICItciAod2l0aCBmaWxlIG5hbWUpXHRSZWNvdmVyIGNyYXNoZWQgc2Vzc2lvbiIKK21zZ3N0ciAiLXIgKOWKoOaqlOWQjSkgICAgICAgXHTkv67lvqnkuIrmrKHmkI3mr4DnmoTos4fmlpkoUmVjb3ZlciBjcmFzaGVkIHNlc3Npb24pIgorCisjOiBtYWluLmM6MjQwNAorbXNnaWQgIi1MXHRcdFx0U2FtZSBhcyAtciIKK21zZ3N0ciAiLUxcdFx0XHTlkIwgLXIiCisKKyM6IG1haW4uYzoyNDA2Cittc2dpZCAiLWZcdFx0XHREb24ndCB1c2UgbmV3Y2xpIHRvIG9wZW4gd2luZG93IgorbXNnc3RyICItZlx0XHRcdOS4jeS9v+eUqCBuZXdjbGkg5L6G6ZaL5ZWf6KaW56qXIgorCisjOiBtYWluLmM6MjQwNworbXNnaWQgIi1kZXYgPGRldmljZT5cdFx0VXNlIDxkZXZpY2U+IGZvciBJL08iCittc2dzdHIgIi1kZXYgPGRldmljZT5cdFx05L2/55SoIDxkZXZpY2U+IOWBmui8uOWHuuWFpSIKKworIzogbWFpbi5jOjI0MTAKK21zZ2lkICItSFx0XHRcdFN0YXJ0IGluIEhlYnJldyBtb2RlIgorbXNnc3RyICItSFx0XHRcdOWVn+WLleeCuiBIZWJyZXcg5qih5byPIgorCisjOiBtYWluLmM6MjQxMworbXNnaWQgIi1GXHRcdFx0U3RhcnQgaW4gRmFyc2kgbW9kZSIKK21zZ3N0ciAiLUZcdFx0XHTllZ/li5XngrogRmFyc2kg5qih5byPIgorCisjOiBtYWluLmM6MjQxNQorbXNnaWQgIi1UIDx0ZXJtaW5hbD5cdFNldCB0ZXJtaW5hbCB0eXBlIHRvIDx0ZXJtaW5hbD4iCittc2dzdHIgIi1UIDx0ZXJtaW5hbD5cdOioreWumue1guerr+apn+eCuiA8dGVybWluYWw+IgorCisjOiBtYWluLmM6MjQxNgorbXNnaWQgIi11IDx2aW1yYz5cdFx0VXNlIDx2aW1yYz4gaW5zdGVhZCBvZiBhbnkgLnZpbXJjIgorbXNnc3RyICItdSA8dmltcmM+XHRcdOS9v+eUqCA8dmltcmM+IOWPluS7o+S7u+S9lSAudmltcmMiCisKKyM6IG1haW4uYzoyNDE4Cittc2dpZCAiLVUgPGd2aW1yYz5cdFx0VXNlIDxndmltcmM+IGluc3RlYWQgb2YgYW55IC5ndmltcmMiCittc2dzdHIgIi1VIDxndmltcmM+XHRcdOS9v+eUqCA8Z3ZpbXJjPiDlj5bku6Pku7vkvZUgLmd2aW1yYyIKKworIzogbWFpbi5jOjI0MjAKK21zZ2lkICItLW5vcGx1Z2luXHRcdERvbid0IGxvYWQgcGx1Z2luIHNjcmlwdHMiCittc2dzdHIgIi0tbm9wbHVnaW5cdFx05LiN6LyJ5YWl5Lu75L2VIHBsdWdpbiIKKworIzogbWFpbi5jOjI0MjEKK21zZ2lkICItb1tOXVx0XHRPcGVuIE4gd2luZG93cyAoZGVmYXVsdDogb25lIGZvciBlYWNoIGZpbGUpIgorbXNnc3RyICItb1tOXVx0XHTplovllZ8gTiDlgIvoppbnqpcgKOmgkOioreaYr+avj+WAi+aqlOahiOS4gOWAiykiCisKKyM6IG1haW4uYzoyNDIyCittc2dpZCAiLU9bTl1cdFx0TGlrZSAtbyBidXQgc3BsaXQgdmVydGljYWxseSIKK21zZ3N0ciAiLU9bTl1cdFx05ZCMIC1vIOS9huS9v+eUqOWeguebtOWIhuWJsiIKKworIzogbWFpbi5jOjI0MjMKK21zZ2lkICIrXHRcdFx0U3RhcnQgYXQgZW5kIG9mIGZpbGUiCittc2dzdHIgIitcdFx0XHTllZ/li5Xlvozot7PliLDmqpTmoYjntZDlsL4iCisKKyM6IG1haW4uYzoyNDI0Cittc2dpZCAiKzxsbnVtPlx0XHRTdGFydCBhdCBsaW5lIDxsbnVtPiIKK21zZ3N0ciAiKzxsbnVtPlx0XHTllZ/li5Xlvozot7PliLDnrKwgPGxudW0+IOihjCIKKworIzogbWFpbi5jOjI0MjYKK21zZ2lkICItLWNtZCA8Y29tbWFuZD5cdEV4ZWN1dGUgPGNvbW1hbmQ+IGJlZm9yZSBsb2FkaW5nIGFueSB2aW1yYyBmaWxlIgorbXNnc3RyICItLWNtZCA8Y29tbWFuZD5cdOi8ieWFpeS7u+S9lSB2aW1yYyDliY3ln7fooYwgPGNvbW1hbmQ+IgorCisjOiBtYWluLmM6MjQyOAorbXNnaWQgIi1jIDxjb21tYW5kPlx0XHRFeGVjdXRlIDxjb21tYW5kPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItYyA8Y29tbWFuZD5cdFx06LyJ5YWl56ys5LiA5YCL5qqU5qGI5b6M5Z+36KGMIDxjb21tYW5kPiIKKworIzogbWFpbi5jOjI0MjkKK21zZ2lkICItUyA8c2Vzc2lvbj5cdFx0U291cmNlIGZpbGUgPHNlc3Npb24+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1TIDxzZXNzaW9uPlx0XHTovInlhaXnrKzkuIDlgIvmqpTmoYjlvozovInlhaUgU2Vzc2lvbiDmqpQgPHNlc3Npb24+IgorCisjOiBtYWluLmM6MjQzMAorbXNnaWQgIi1zIDxzY3JpcHRpbj5cdFJlYWQgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBmaWxlIDxzY3JpcHRpbj4iCittc2dzdHIgIi1zIDxzY3JpcHRpbj5cdOW+niA8c2NyaXB0aW4+IOiugOWFpeS4gOiIrOaooeW8j+WRveS7pCIKKworIzogbWFpbi5jOjI0MzEKK21zZ2lkICItdyA8c2NyaXB0b3V0Plx0QXBwZW5kIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItdyA8c2NyaXB0b3V0Plx05bCN5qqU5qGIIDxzY3JpcHRvdXQ+IOmZhOWKoChhcHBlbmQp5omA5pyJ6Ly45YWl55qE5ZG95LukIgorCisjOiBtYWluLmM6MjQzMgorbXNnaWQgIi1XIDxzY3JpcHRvdXQ+XHRXcml0ZSBhbGwgdHlwZWQgY29tbWFuZHMgdG8gZmlsZSA8c2NyaXB0b3V0PiIKK21zZ3N0ciAiLVcgPHNjcmlwdG91dD5cdOWwjeaqlOahiCA8c2NyaXB0b3V0PiDlr6vlhaXmiYDmnInovLjlhaXnmoTlkb3ku6QiCisKKyM6IG1haW4uYzoyNDM0Cittc2dpZCAiLXhcdFx0XHRFZGl0IGVuY3J5cHRlZCBmaWxlcyIKK21zZ3N0ciAiLXhcdFx0XHTnt6jovK/nt6jnorzpgY7nmoTmqpTmoYgiCisKKyM6IG1haW4uYzoyNDM4Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRDb25uZWN0IHZpbSB0byB0aGlzIHBhcnRpY3VsYXIgWC1zZXJ2ZXIiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx05bCHIHZpbSDoiIfmjIflrprnmoQgWC1zZXJ2ZXIg6YCj57eaIgorCisjOiBtYWluLmM6MjQ0MAorbXNnaWQgIi1YXHRcdFx0RG8gbm90IGNvbm5lY3QgdG8gWCBzZXJ2ZXIiCittc2dzdHIgIi1YXHRcdFx05LiN6KaB6YCj57ea5YiwIFggU2VydmVyIgorCisjOiBtYWluLmM6MjQ0MworbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgaWYgcG9zc2libGUiCittc2dzdHIgIi0tcmVtb3RlIDxmaWxlcz5cdOe3qOi8ryBWaW0g5Ly65pyN5Zmo5LiK55qEIDxmaWxlcz4g5b6M6Zui6ZaLIgorCisjOiBtYWluLmM6MjQ0NAorbXNnaWQgIi0tcmVtb3RlLXNpbGVudCA8ZmlsZXM+ICBTYW1lLCBkb24ndCBjb21wbGFpbiBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIiCittc2dzdHIgIi0tcmVtb3RlLXNpbGVudCA8ZmlsZXM+ICDnm7jlkIzvvIzkvYbmspLmnInkvLrmnI3lmajmmYLkuI3orablkYoiCisKKyM6IG1haW4uYzoyNDQ1Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAgQXMgLS1yZW1vdGUgYnV0IHdhaXQgZm9yIGZpbGVzIHRvIGhhdmUgYmVlbiBlZGl0ZWQiCittc2dzdHIgIi0tcmVtb3RlLXdhaXQgPGZpbGVzPiAg5ZCMIC0tcmVtb3RlLCDkvYbmnIPnrYnlgJnmqpTmoYjlrozmiJDnt6jovK8iCisKKyM6IG1haW4uYzoyNDQ2Cittc2dpZCAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiIgorIi0tcmVtb3RlLXdhaXQtc2lsZW50IDxmaWxlcz4gIOebuOWQjO+8jOS9huaykuS8uuacjeWZqOaZguS4jeitpuWRiiIKKworIzogbWFpbi5jOjI0NDcKK21zZ2lkICItLXJlbW90ZS1zZW5kIDxrZXlzPlx0U2VuZCA8a2V5cz4gdG8gYSBWaW0gc2VydmVyIGFuZCBleGl0IgorbXNnc3RyICItLXJlbW90ZS1zZW5kIDxrZXlzPlx06YCB5Ye6IDxrZXlzPiDliLAgVmltIOS8uuacjeWZqOS4pumboumWiyIKKworIzogbWFpbi5jOjI0NDgKK21zZ2lkICItLXJlbW90ZS1leHByIDxleHByPlx0RXZhbHVhdGUgPGV4cHI+IGluIGEgVmltIHNlcnZlciBhbmQgcHJpbnQgcmVzdWx0IgorbXNnc3RyICItLXJlbW90ZS1leHByIDxleHByPlx05Zyo5Ly65pyN5Zmo5LiK5Z+36KGMIDxleHByPiDkuKbljbDlh7rntZDmnpwiCisKKyM6IG1haW4uYzoyNDQ5Cittc2dpZCAiLS1zZXJ2ZXJsaXN0XHRcdExpc3QgYXZhaWxhYmxlIFZpbSBzZXJ2ZXIgbmFtZXMgYW5kIGV4aXQiCittc2dzdHIgIi0tc2VydmVybGlzdFx0XHTliJflh7rlj6/nlKjnmoQgVmltIOS8uuacjeWZqOWQjeeoseS4pumboumWiyIKKworIzogbWFpbi5jOjI0NTAKK21zZ2lkICItLXNlcnZlcm5hbWUgPG5hbWU+XHRTZW5kIHRvL2JlY29tZSB0aGUgVmltIHNlcnZlciA8bmFtZT4iCittc2dzdHIgIi0tc2VydmVybmFtZSA8bmFtZT5cdOmAgeiHsy/miJDngrogVmltIOS8uuacjeWZqCA8bmFtZT4iCisKKyM6IG1haW4uYzoyNDUzCittc2dpZCAiLWkgPHZpbWluZm8+XHRcdFVzZSA8dmltaW5mbz4gaW5zdGVhZCBvZiAudmltaW5mbyIKK21zZ3N0ciAiLWkgPHZpbWluZm8+XHRcdOS9v+eUqCA8dmltaW5mbz4g6ICM6Z2eIC52aW1pbmZvIgorCisjOiBtYWluLmM6MjQ1NQorbXNnaWQgIi1oICBvciAgLS1oZWxwXHRQcmludCBIZWxwICh0aGlzIG1lc3NhZ2UpIGFuZCBleGl0IgorbXNnc3RyICItaCAg5oiWICAtLWhlbHBcdOWNsOWHuuiqquaYjijkuZ/lsLHmmK/mnKzoqIrmga8p5b6M6Zui6ZaLIgorCisjOiBtYWluLmM6MjQ1NgorbXNnaWQgIi0tdmVyc2lvblx0XHRQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IgorbXNnc3RyICItLXZlcnNpb25cdFx05Y2w5Ye654mI5pys6LOH6KiK5b6M6Zui6ZaLIgorCisjOiBtYWluLmM6MjQ2MAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChNb3RpZiB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW0g6KqN5b6X55qE5Y+D5pW4IChNb3RpZiDniYgpOlxuIgorCisjOiBtYWluLmM6MjQ2MworbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChBdGhlbmEgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJndmltIOiqjeW+l+eahOWPg+aVuCAoQXRoZW5hIOeJiCk6XG4iCisKKyM6IG1haW4uYzoyNDY2Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHTlnKjoppbnqpcgPGRpc3BsYXk+IOWft+ihjCB2aW0iCisKKyM6IG1haW4uYzoyNDY3Cittc2dpZCAiLWljb25pY1x0XHRTdGFydCB2aW0gaWNvbmlmaWVkIgorbXNnc3RyICItaWNvbmljXHRcdOWVn+WLleW+jOWcluekuuWMlihpY29uaWZpZWQpIgorCisjOiBtYWluLmM6MjQ2OQorbXNnaWQgIi1uYW1lIDxuYW1lPlx0XHRVc2UgcmVzb3VyY2UgYXMgaWYgdmltIHdhcyA8bmFtZT4iCittc2dzdHIgIi1uYW1lIDxuYW1lPlx0XHToroDlj5YgUmVzb3VyY2Ug5pmC5oqKIHZpbSDnmoTlkI3nqLHoppbngrogPG5hbWU+IgorCisjOiBtYWluLmM6MjQ3MAorbXNnaWQgIlx0XHRcdCAgKFVuaW1wbGVtZW50ZWQpXG4iCittc2dzdHIgIlx0XHRcdCAgKOWwmuacquWvpuS9nClcbiIKKworIzogbWFpbi5jOjI0NzIKK21zZ2lkICItYmFja2dyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3IgdGhlIGJhY2tncm91bmQgKGFsc286IC1iZykiCittc2dzdHIgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdOioreWumiA8Y29sb3I+IOeCuuiDjOaZr+iJsiAo5Lmf5Y+v55SoIC1iZykiCisKKyM6IG1haW4uYzoyNDczCittc2dpZCAiLWZvcmVncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIG5vcm1hbCB0ZXh0IChhbHNvOiAtZmcpIgorbXNnc3RyICItZm9yZWdyb3VuZCA8Y29sb3I+XHToqK3lrpogPGNvbG9yPiDngrrkuIDoiKzmloflrZfpoY/oibIgKOS5n+WPr+eUqCAtZmcpIgorCisjOiBtYWluLmM6MjQ3NCBtYWluLmM6MjQ5NAorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPGZvbnQ+XHTkvb/nlKggPGZvbnQ+IOeCuuS4gOiIrOWtl+WeiyAo5Lmf5Y+v55SoIC1mbikiCisKKyM6IG1haW4uYzoyNDc1Cittc2dpZCAiLWJvbGRmb250IDxmb250Plx0VXNlIDxmb250PiBmb3IgYm9sZCB0ZXh0IgorbXNnc3RyICItYm9sZGZvbnQgPGZvbnQ+XHTkvb/nlKggPGZvbnQ+IOeCuueyl+mrlOWtl+WeiyIKKworIzogbWFpbi5jOjI0NzYKK21zZ2lkICItaXRhbGljZm9udCA8Zm9udD5cdFVzZSA8Zm9udD4gZm9yIGl0YWxpYyB0ZXh0IgorbXNnc3RyICItaXRhbGljZm9udCA8Zm9udD5cdOS9v+eUqCA8Zm9udD4g54K65pac6auU5a2X5Z6LIgorCisjOiBtYWluLmM6MjQ3NyBtYWluLmM6MjQ5NQorbXNnaWQgIi1nZW9tZXRyeSA8Z2VvbT5cdFVzZSA8Z2VvbT4gZm9yIGluaXRpYWwgZ2VvbWV0cnkgKGFsc286IC1nZW9tKSIKK21zZ3N0ciAiLWdlb21ldHJ5IDxnZW9tPlx05L2/55SoPGdlb20+54K66LW35aeL5L2N572uICjkuZ/lj6/nlKggLWdlb20pIgorCisjOiBtYWluLmM6MjQ3OAorbXNnaWQgIi1ib3JkZXJ3aWR0aCA8d2lkdGg+XHRVc2UgYSBib3JkZXIgd2lkdGggb2YgPHdpZHRoPiAoYWxzbzogLWJ3KSIKK21zZ3N0ciAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdOS9v+eUqOWvrOW6pueCuiA8d2lkdGg+IOeahOmCiuahhiAo5Lmf5Y+v55SoIC1idykiCisKKyM6IG1haW4uYzoyNDc5Cittc2dpZCAiLXNjcm9sbGJhcndpZHRoIDx3aWR0aD4gIFVzZSBhIHNjcm9sbGJhciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtc3cpIgorbXNnc3RyICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAg6Kit5a6a5o2y5YuV6Lu45a+s5bqm54K6IDx3aWR0aD4gKOS5n+WPr+eUqCAtc3cpIgorCisjOiBtYWluLmM6MjQ4MQorbXNnaWQgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHRVc2UgYSBtZW51IGJhciBoZWlnaHQgb2YgPGhlaWdodD4gKGFsc286IC1taCkiCittc2dzdHIgIi1tZW51aGVpZ2h0IDxoZWlnaHQ+XHToqK3lrprpgbjllq7liJfnmoTpq5jluqbngrogPGhlaWdodD4gKOS5n+WPr+eUqCAtbWgpIgorCisjOiBtYWluLmM6MjQ4MyBtYWluLmM6MjQ5NgorbXNnaWQgIi1yZXZlcnNlXHRcdFVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiAtcnYpIgorbXNnc3RyICItcmV2ZXJzZVx0XHTkvb/nlKjlj43nm7jpoa/npLogKOS5n+WPr+eUqCAtcnYpIgorCisjOiBtYWluLmM6MjQ4NAorbXNnaWQgIityZXZlcnNlXHRcdERvbid0IHVzZSByZXZlcnNlIHZpZGVvIChhbHNvOiArcnYpIgorbXNnc3RyICIrcmV2ZXJzZVx0XHTkuI3kvb/nlKjlj43nm7jpoa/npLogKOS5n+WPr+eUqCArcnYpIgorCisjOiBtYWluLmM6MjQ4NQorbXNnaWQgIi14cm0gPHJlc291cmNlPlx0U2V0IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UiCittc2dzdHIgIi14cm0gPHJlc291cmNlPlx06Kit5a6a5oyH5a6a55qEIHJlc291cmNlIgorCisjOiBtYWluLmM6MjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChSSVNDIE9TIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbSDoqo3lvpfnmoTlj4PmlbggKFJJU0MgT1Mg54mIKTpcbiIKKworIzogbWFpbi5jOjI0ODkKK21zZ2lkICItLWNvbHVtbnMgPG51bWJlcj5cdEluaXRpYWwgd2lkdGggb2Ygd2luZG93IGluIGNvbHVtbnMiCittc2dzdHIgIi0tY29sdW1ucyA8bnVtYmVyPlx06KaW56qX5Yid5aeL5YyW5a+s5bqmIgorCisjOiBtYWluLmM6MjQ5MAorbXNnaWQgIi0tcm93cyA8bnVtYmVyPlx0SW5pdGlhbCBoZWlnaHQgb2Ygd2luZG93IGluIHJvd3MiCittc2dzdHIgIi0tcm93cyA8bnVtYmVyPlx06KaW56qX5Yid5aeL5YyW6auY5bqmIgorCisjOiBtYWluLmM6MjQ5MworbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChHVEsrIHZlcnNpb24pOlxuIgorbXNnc3RyICIiCisiXG4iCisiZ3ZpbSDoqo3lvpfnmoTlj4PmlbggKEdUSysg54mIKTpcbiIKKworIzogbWFpbi5jOjI0OTcKK21zZ2lkICItZGlzcGxheSA8ZGlzcGxheT5cdFJ1biB2aW0gb24gPGRpc3BsYXk+IChhbHNvOiAtLWRpc3BsYXkpIgorbXNnc3RyICItZGlzcGxheSA8ZGlzcGxheT5cdOWcqCA8ZGlzcGxheT4g5Z+36KGMIHZpbSAo5Lmf5Y+v55SoIC0tZGlzcGxheSkiCisKKyM6IG1haW4uYzoyNDk5Cittc2dpZCAiLS1yb2xlIDxyb2xlPlx0U2V0IGEgdW5pcXVlIHJvbGUgdG8gaWRlbnRpZnkgdGhlIG1haW4gd2luZG93IgorbXNnc3RyICItLXJvbGUgPHJvbGU+XHToqK3lrprnjajnibnnmoTop5LoibIocm9sZSnku6XljYDliIbkuLvoppbnqpciCisKKyM6IG1haW4uYzoyNTAxCittc2dpZCAiLS1zb2NrZXRpZCA8eGlkPlx0T3BlbiBWaW0gaW5zaWRlIGFub3RoZXIgR1RLIHdpZGdldCIKK21zZ3N0ciAiLS1zb2NrZXRpZCA8eGlkPlx05Zyo5Y+m5LiA5YCLIEdUSyB3aWRnZXQg5YWn6ZaL5ZWfIFZpbSIKKworIzogbWFpbi5jOjI1MDMKK21zZ2lkICItLWhlbHBcdFx0U2hvdyBHbm9tZSBhcmd1bWVudHMiCittc2dzdHIgIi0taGVscFx0XHTpoa/npLogR25vbWUg55u46Zec5Y+D5pW4IgorCisjOiBtYWluLmM6MjczNQorbXNnaWQgIk5vIGRpc3BsYXkiCittc2dzdHIgIueEoemhr+ekuiIKKworIy4gRmFpbGVkIHRvIHNlbmQsIGFib3J0LgorIzogbWFpbi5jOjI3NTAKK21zZ2lkICI6IFNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICI6IOWCs+mAgeWkseaVl+OAglxuIgorCisjLiBMZXQgdmltIHN0YXJ0IG5vcm1hbGx5LgorIzogbWFpbi5jOjI3NTYKK21zZ2lkICI6IFNlbmQgZmFpbGVkLiBUcnlpbmcgdG8gZXhlY3V0ZSBsb2NhbGx5XG4iCittc2dzdHIgIjog6YCB5Ye65aSx5pWX44CC6Kmm5ZyW5Zyo5pys5Zyw5Z+36KGMXG4iCisKKyM6IG1haW4uYzoyNzk0IG1haW4uYzoyODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIG9mICVkIGVkaXRlZCIKK21zZ3N0ciAi5bey57eo6LyvICVkLyVkIOWAi+aqlOahiCIKKworIzogbWFpbi5jOjI4MzcKK21zZ2lkICJObyBkaXNwbGF5OiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICLnhKEgRGlzcGxheTog54Sh5rOV5YKz6YCB6YGL566X5byP44CCXG4iCisKKyM6IG1haW4uYzoyODQ5Cittc2dpZCAiOiBTZW5kIGV4cHJlc3Npb24gZmFpbGVkLlxuIgorbXNnc3RyICI6IOeEoeazleWCs+mAgemBi+eul+W8j+OAglxuIgorCisjOiBtYXJrLmM6NjU2Cittc2dpZCAiTm8gbWFya3Mgc2V0IgorbXNnc3RyICLmspLmnInoqK3lrprmqJnoqJggKG1hcmspIgorCisjOiBtYXJrLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODM6IE5vIG1hcmtzIG1hdGNoaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTI4Mzog5om+5LiN5Yiw56ym5ZCIIFwiJXNcIiDnmoTmqJnoqJgobWFyaykiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjY2OQorbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyLmqJnoqJgg6KGM6JmfICDmrIQgIOaqlOahiC/mloflrZciCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjcwNworbXNnaWQgIiIKKyJcbiIKKyIganVtcCBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiIGp1bXAg6KGM6JmfICDmrIQgIOaqlOahiC/mloflrZciCisKKyM6IG1hcmsuYzoxMDcyCittc2dpZCAiIgorIlxuIgorIiMgRmlsZSBtYXJrczpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMg5qqU5qGI5qiZ6KiYOlxuIgorCisjLiBXcml0ZSB0aGUganVtcGxpc3Qgd2l0aCAtJworIzogbWFyay5jOjExMDcKK21zZ2lkICIiCisiXG4iCisiIyBKdW1wbGlzdCAobmV3ZXN0IGZpcnN0KTpcbiIKK21zZ3N0ciAiIgorIlxuIgorIiMgSnVtcGxpc3QgKOeUseaWsOWIsOiIiik6XG4iCisKKyM6IG1hcmsuYzoxMjAyCittc2dpZCAiIgorIlxuIgorIiMgSGlzdG9yeSBvZiBtYXJrcyB3aXRoaW4gZmlsZXMgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDmqpTmoYjlhacgTWFyayDoqJjpjIQgKOeUseaWsOWIsOiIiik6XG4iCisKKyM6IG1hcmsuYzoxMjg1Cittc2dpZCAiTWlzc2luZyAnPiciCittc2dzdHIgIue8uuWwkeWwjeaHieeahCAnPiciCisKKyM6IG1ieXRlLmM6NDAzCittc2dpZCAiRTU0MzogTm90IGEgdmFsaWQgY29kZXBhZ2UiCittc2dzdHIgIkU1NDM6IOS4jeato+eiuueahCBjb2RlcGFnZSIKKworIzogbWJ5dGUuYzozODc5Cittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IOS4jeiDveioreWumiBJQyDmlbjlgLwiCisKKyM6IG1ieXRlLmM6NDAzMQorbXNnaWQgIkUyODU6IEZhaWxlZCB0byBjcmVhdGUgaW5wdXQgY29udGV4dCIKK21zZ3N0ciAiRTI4NTog54Sh5rOV5bu656uLIGlucHV0IGNvbnRleHQiCisKKyM6IG1ieXRlLmM6NDE3OAorbXNnaWQgIkUyODY6IEZhaWxlZCB0byBvcGVuIGlucHV0IG1ldGhvZCIKK21zZ3N0ciAiRTI4Njog54Sh5rOV6ZaL5ZWf6Ly45YWl5rOVIgorCisjOiBtYnl0ZS5jOjQxODkKK21zZ2lkICJFMjg3OiBXYXJuaW5nOiBDb3VsZCBub3Qgc2V0IGRlc3Ryb3kgY2FsbGJhY2sgdG8gSU0iCittc2dzdHIgIkUyODc6IOitpuWRijog54Sh5rOV56e76ZmkIElNIOeahCBjYWxsYmFjayIKKworIzogbWJ5dGUuYzo0MTk1Cittc2dpZCAiRTI4ODogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgc3R5bGUiCittc2dzdHIgIkUyODg6IOi8uOWFpeazleS4jeaUr+aPtOS7u+S9lSBzdHlsZSIKKworIzogbWJ5dGUuYzo0MjUyCittc2dpZCAiRTI4OTogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBteSBwcmVlZGl0IHR5cGUiCittc2dzdHIgIkUyODk6IOi8uOWFpeazleS4jeaUr+aPtOS7u+S9lSBzdHlsZSIKKworIzogbWJ5dGUuYzo0MzI2Cittc2dpZCAiRTI5MDogb3Zlci10aGUtc3BvdCBzdHlsZSByZXF1aXJlcyBmb250c2V0IgorbXNnc3RyICJFMjkwOiBvdmVyLXRoZS1zcG90IOmcgOimgeWtl+Wei+mbhihGb250c2V0KSIKKworIzogbWJ5dGUuYzo0MzU4Cittc2dpZCAiRTI5MTogWW91ciBHVEsrIGlzIG9sZGVyIHRoYW4gMS4yLjMuIFN0YXR1cyBhcmVhIGRpc2FibGVkIgorbXNnc3RyICJFMjkxOiDkvaDnmoQgR1RLKyDmr5QgMS4yLjMg6YKE6IiK44CC54Sh5rOV5L2/55So54uA5oWL5Y2A44CCIgorCisjOiBtYnl0ZS5jOjQ2MzcKK21zZ2lkICJFMjkyOiBJbnB1dCBNZXRob2QgU2VydmVyIGlzIG5vdCBydW5uaW5nIgorbXNnc3RyICJFMjkyOiDmspLmnInln7fooYzkuK3nmoTovLjlhaXms5XnrqHnkIbnqIvlvI8oSW5wdXQgTWV0aG9kIFNlcnZlcikiCisKKyM6IG1lbWZpbGUuYzo0ODgKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5Mzog5Y2A5aGK5pyq6KKr6Y6W5a6aIgorCisjOiBtZW1maWxlLmM6OTg5Cittc2dpZCAiRTI5NDogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgcmVhZCIKK21zZ3N0ciAiRTI5NDog5pqr5a2Y5qqU6K6A5Y+W6Yyv6KqkIgorCisjOiBtZW1maWxlLmM6OTk0Cittc2dpZCAiRTI5NTogUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUiCittc2dzdHIgIkUyOTU6IOaaq+WtmOaqlOiugOWPlumMr+iqpCIKKworIzogbWVtZmlsZS5jOjEwNDYKK21zZ2lkICJFMjk2OiBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIKK21zZ3N0ciAiRTI5Njog5pqr5a2Y5qqU5a+r5YWl6Yyv6KqkIgorCisjOiBtZW1maWxlLmM6MTA2NAorbXNnaWQgIkUyOTc6IFdyaXRlIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5Nzog5pqr5a2Y5qqU5a+r5YWl6Yyv6KqkIgorCisjOiBtZW1maWxlLmM6MTI2MQorbXNnaWQgIkUzMDA6IFN3YXAgZmlsZSBhbHJlYWR5IGV4aXN0cyAoc3ltbGluayBhdHRhY2s/KSIKK21zZ3N0ciAiRTMwMDog5pqr5a2Y5qqU5bey57aT5a2Y5ZyoISAo5bCP5b+D56ym6Jmf6YCj57WQ55qE5a6J5YWo5ryP5rSeIT8pIgorCisjOiBtZW1saW5lLmM6Mjc1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAwPyIKK21zZ3N0ciAiRTI5ODog5om+5LiN5Yiw5Y2A5aGKIDA/IgorCisjOiBtZW1saW5lLmM6MzE1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAxPyIKK21zZ3N0ciAiRTI5ODog5om+5LiN5Yiw5Y2A5aGKIDE/IgorCisjOiBtZW1saW5lLmM6MzMzCittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAyPyIKK21zZ3N0ciAiRTI5ODog5om+5LiN5Yiw5Y2A5aGKIDI/IgorCisjLiBjb3VsZCBub3QgKHJlKW9wZW4gdGhlIHN3YXAgZmlsZSwgd2hhdCBjYW4gd2UgZG8/Pz8/CisjOiBtZW1saW5lLmM6NDQzCittc2dpZCAiRTMwMTogT29wcywgbG9zdCB0aGUgc3dhcCBmaWxlISEhIgorbXNnc3RyICJFMzAxOiDlmaLlmaIsIOaaq+WtmOaqlOS4jeimi+S6hiEhISIKKworIzogbWVtbGluZS5jOjQ0OAorbXNnaWQgIkUzMDI6IENvdWxkIG5vdCByZW5hbWUgc3dhcCBmaWxlIgorbXNnc3RyICJFMzAyOiDnhKHms5XmlLnorormmqvlrZjmqpTnmoTlkI3nqLEiCisKKyM6IG1lbWxpbmUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMwMzogVW5hYmxlIHRvIG9wZW4gc3dhcCBmaWxlIGZvciBcIiVzXCIsIHJlY292ZXJ5IGltcG9zc2libGUiCittc2dzdHIgIkUzMDM6IOeEoeazlemWi+WVn+aaq+WtmOaqlCBcIiVzXCIsIOS4jeWPr+iDveS/ruW+qeS6hiIKKworIzogbWVtbGluZS5jOjYxNworbXNnaWQgIkUzMDQ6IG1sX3RpbWVzdGFtcDogRGlkbid0IGdldCBibG9jayAwPz8iCittc2dzdHIgIkUzMDQ6IG1sX3RpbWVzdGFtcDog5om+5LiN5Yiw5Y2A5aGKIDA/PyIKKworIzogbWVtbGluZS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA1OiBObyBzd2FwIGZpbGUgZm91bmQgZm9yICVzIgorbXNnc3RyICJFMzA1OiDmib7kuI3liLAgJXMg55qE5pqr5a2Y5qqUIgorCisjOiBtZW1saW5lLmM6NzY3Cittc2dpZCAiRW50ZXIgbnVtYmVyIG9mIHN3YXAgZmlsZSB0byB1c2UgKDAgdG8gcXVpdCk6ICIKK21zZ3N0ciAi6KuL6YG45pOH5L2g6KaB5L2/55So55qE5pqr5a2Y5qqUICjmjIkwIOmboumWiyk6ICIKKworIzogbWVtbGluZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA2OiBDYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiRTMwNjog54Sh5rOV6ZaL5ZWfICVzIgorCisjOiBtZW1saW5lLmM6ODM0Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgYmxvY2sgMCBmcm9tICIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W5Y2A5aGKIDA6IgorCisjOiBtZW1saW5lLmM6ODM3Cittc2dpZCAiIgorIlxuIgorIk1heWJlIG5vIGNoYW5nZXMgd2VyZSBtYWRlIG9yIFZpbSBkaWQgbm90IHVwZGF0ZSB0aGUgc3dhcCBmaWxlLiIKK21zZ3N0ciAiIgorIlxuIgorIuWPr+iDveaYr+S9oOaykuWBmumBjuS7u+S9leS/ruaUueaIluaYryBWaW0g6YKE5L6G5LiN5Y+K5pu05paw5pqr5a2Y5qqULiIKKworIzogbWVtbGluZS5jOjg0NyBtZW1saW5lLmM6ODY0Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiIOeEoeazleWcqOacrOeJiOacrOeahCBWaW0g5Lit5L2/55SoLlxuIgorCisjOiBtZW1saW5lLmM6ODQ5Cittc2dpZCAiVXNlIFZpbSB2ZXJzaW9uIDMuMC5cbiIKK21zZ3N0ciAi5L2/55SoIFZpbSAzLjDjgIJcbiIKKworIzogbWVtbGluZS5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzA3OiAlcyBkb2VzIG5vdCBsb29rIGxpa2UgYSBWaW0gc3dhcCBmaWxlIgorbXNnc3RyICJFMzA3OiAlcyDnnIvotbfkvobkuI3lg4/mmK8gVmltIOaaq+WtmOaqlCIKKworIzogbWVtbGluZS5jOjg2OAorbXNnaWQgIiBjYW5ub3QgYmUgdXNlZCBvbiB0aGlzIGNvbXB1dGVyLlxuIgorbXNnc3RyICIg54Sh5rOV5Zyo6YCZ6Ie66Zu76IWm5LiK5L2/55SoLlxuIgorCisjOiBtZW1saW5lLmM6ODcwCittc2dpZCAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgb24gIgorbXNnc3RyICLmnKzmqpTmoYjlu7rnq4vmlrwgIgorCisjOiBtZW1saW5lLmM6ODc0Cittc2dpZCAiIgorIixcbiIKKyJvciB0aGUgZmlsZSBoYXMgYmVlbiBkYW1hZ2VkLiIKK21zZ3N0ciAiIgorIixcbiIKKyLmiJbmmK/pgJnmqpTmoYjlt7LntpPmkI3mr4DjgIIiCisKKyM6IG1lbWxpbmUuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgc3dhcCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAi5L2/55So5pqr5a2Y5qqUIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJPcmlnaW5hbCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAi5Y6f5aeL5qqUIFwiJXNcIiIKKworIzogbWVtbGluZS5jOjkyMgorbXNnaWQgIkUzMDg6IFdhcm5pbmc6IE9yaWdpbmFsIGZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIgorbXNnc3RyICJFMzA4OiDorablkYo6IOWOn+Wni+aqlOahiOWPr+iDveW3sue2k+S/ruaUuemBjuS6hiIKKworIzogbWVtbGluZS5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzA5OiBVbmFibGUgdG8gcmVhZCBibG9jayAxIGZyb20gJXMiCittc2dzdHIgIkUzMDk6IOeEoeazleW+niAlcyDoroDlj5bljYDloYogMSIKKworIzogbWVtbGluZS5jOjk2NworbXNnaWQgIj8/P01BTlkgTElORVMgTUlTU0lORyIKK21zZ3N0ciAiPz8/57y65bCR5aSq5aSa6KGMIgorCisjOiBtZW1saW5lLmM6OTgzCittc2dpZCAiPz8/TElORSBDT1VOVCBXUk9ORyIKK21zZ3N0ciAiPz8/6KGM6Jmf6Yyv6KqkIgorCisjOiBtZW1saW5lLmM6OTkwCittc2dpZCAiPz8/RU1QVFkgQkxPQ0siCittc2dzdHIgIj8/P+epuueahCBCTE9DSyIKKworIzogbWVtbGluZS5jOjEwMTYKK21zZ2lkICI/Pz9MSU5FUyBNSVNTSU5HIgorbXNnc3RyICI/Pz/mib7kuI3liLDkuIDkupvooYwiCisKKyM6IG1lbWxpbmUuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTA6IEJsb2NrIDEgSUQgd3JvbmcgKCVzIG5vdCBhIC5zd3AgZmlsZT8pIgorbXNnc3RyICJFMzEwOiDljYDloYogMSBJRCDpjK/oqqQgKCVzIOS4jeaYr+aaq+WtmOaqlD8pIgorCisjOiBtZW1saW5lLmM6MTA1MworbXNnaWQgIj8/P0JMT0NLIE1JU1NJTkciCittc2dzdHIgIj8/P+aJvuS4jeWIsEJMT0NLIgorCisjOiBtZW1saW5lLmM6MTA2OQorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBiZSBtZXNzZWQgdXAiCittc2dzdHIgIj8/PyDlvp7pgJnoo6HliLAgPz8/RU5EIOeahOWFp+WuueWPr+iDveacieWVj+mhjCIKKworIzogbWVtbGluZS5jOjEwODUKK21zZ2lkICI/Pz8gZnJvbSBoZXJlIHVudGlsID8/P0VORCBsaW5lcyBtYXkgaGF2ZSBiZWVuIGluc2VydGVkL2RlbGV0ZWQiCittc2dzdHIgIj8/PyDlvp7pgJnoo6HliLAgPz8/RU5EIOeahOWFp+WuueWPr+iDveiiq+WIqumZpC/mj5LlhaXpgY4iCisKKyMgZG8gbm90IHRyYW5zbGF0ZQorIzogbWVtbGluZS5jOjExMDUKK21zZ2lkICI/Pz9FTkQiCittc2dzdHIgIj8/P0VORCIKKworIzogbWVtbGluZS5jOjExMzEKK21zZ2lkICJFMzExOiBSZWNvdmVyeSBJbnRlcnJ1cHRlZCIKK21zZ3N0ciAiRTMxMTog5L+u5b6p5bey5Lit5pa3IgorCisjOiBtZW1saW5lLmM6MTEzMworbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIkUzMTI6IOS/ruW+qeaZgueZvOeUn+mMr+iqpDsg6KuL5rOo5oSP6ZaL6aCt54K6ID8/PyDnmoTooYwiCisKKyM6IG1lbWxpbmUuYzoxMTM2Cittc2dpZCAiUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIgorbXNnc3RyICLlvqnljp/lrozmiJAuIOiri+eiuuWumuS4gOWIh+ato+W4uC4iCisKKyM6IG1lbWxpbmUuYzoxMTM3Cittc2dpZCAiIgorIlxuIgorIihZb3UgbWlnaHQgd2FudCB0byB3cml0ZSBvdXQgdGhpcyBmaWxlIHVuZGVyIGFub3RoZXIgbmFtZVxuIgorbXNnc3RyICIiCisiXG4iCisiKOS9oOWPr+iDveacg+aDs+imgeaKiumAmeWAi+aqlOahiOWPpuWtmOWIpeeahOaqlOWQje+8jFxuIgorCisjOiBtZW1saW5lLmM6MTEzOAorbXNnaWQgImFuZCBydW4gZGlmZiB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIHRvIGNoZWNrIGZvciBjaGFuZ2VzKVxuIgorbXNnc3RyICLlho3ln7fooYwgZGlmZiDoiIfljp/mqpTmoYjmr5TovIPku6XmqqLmn6XmmK/lkKbmnInmlLnoroopXG4iCisKKyM6IG1lbWxpbmUuYzoxMTM5Cittc2dpZCAiIgorIkRlbGV0ZSB0aGUgLnN3cCBmaWxlIGFmdGVyd2FyZHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyIoRCnnm7TmjqXliKrpmaQgLnN3cCDmmqvlrZjmqpRcbiIKKyJcbiIKKworIy4gdXNlIG1zZygpIHRvIHN0YXJ0IHRoZSBzY3JvbGxpbmcgcHJvcGVybHkKKyM6IG1lbWxpbmUuYzoxMTk1Cittc2dpZCAiU3dhcCBmaWxlcyBmb3VuZDoiCittc2dzdHIgIuaJvuWIsOS7peS4i+eahOaaq+WtmOaqlDoiCisKKyM6IG1lbWxpbmUuYzoxMzczCittc2dpZCAiICAgSW4gY3VycmVudCBkaXJlY3Rvcnk6XG4iCittc2dzdHIgIiAgIOWcqOebruWJjeeahOebrumMhDpcbiIKKworIzogbWVtbGluZS5jOjEzNzUKK21zZ2lkICIgICBVc2luZyBzcGVjaWZpZWQgbmFtZTpcbiIKK21zZ3N0ciAiICAgVXNpbmcgc3BlY2lmaWVkIG5hbWU6XG4iCisKKyM6IG1lbWxpbmUuYzoxMzc5Cittc2dpZCAiICAgSW4gZGlyZWN0b3J5ICIKK21zZ3N0ciAiICAg5Zyo55uu6YyEICIKKworIzogbWVtbGluZS5jOjEzOTcKK21zZ2lkICIgICAgICAtLSBub25lIC0tXG4iCittc2dzdHIgIiAgICAgIC0tIOeEoSAtLVxuIgorCisjOiBtZW1saW5lLmM6MTQ2OQorbXNnaWQgIiAgICAgICAgICBvd25lZCBieTogIgorbXNnc3RyICIgICAgICAgICAgICDmk4HmnInogIU6ICIKKworIzogbWVtbGluZS5jOjE0NzEKK21zZ2lkICIgICBkYXRlZDogIgorbXNnc3RyICIgICAg5pel5pyfOiAiCisKKyM6IG1lbWxpbmUuYzoxNDc1IG1lbWxpbmUuYzozNjg5Cittc2dpZCAiICAgICAgICAgICAgIGRhdGVkOiAiCittc2dzdHIgIiAgICAgICAgICAgICAg5pel5pyfOiAiCisKKyM6IG1lbWxpbmUuYzoxNDkxCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgICAgICAgICBb5b6eIFZpbSDniYjmnKwgMy4wXSIKKworIzogbWVtbGluZS5jOjE0OTUKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgW+S4jeWDjyBWaW0g55qE5pqr5a2Y5qqUXSIKKworIzogbWVtbGluZS5jOjE0OTkKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgICAgICAgICDmqpTlkI06ICIKKworIzogbWVtbGluZS5jOjE1MDUKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgIG1vZGlmaWVkOiAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICAgICDkv67mlLnpgY46ICIKKworIzogbWVtbGluZS5jOjE1MDYKK21zZ2lkICJZRVMiCittc2dzdHIgIuaYryIKKworIzogbWVtbGluZS5jOjE1MDYKK21zZ2lkICJubyIKK21zZ3N0ciAi5ZCmIgorCisjOiBtZW1saW5lLmM6MTUxMAorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICB1c2VyIG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICAgIOS9v+eUqOiAhTogIgorCisjOiBtZW1saW5lLmM6MTUxNworbXNnaWQgIiAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIgICAg5Li75qmf5ZCN56ixOiAiCisKKyM6IG1lbWxpbmUuYzoxNTE5Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIGhvc3QgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgIOS4u+apn+WQjeeosTogIgorCisjOiBtZW1saW5lLmM6MTUyNQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorCisjOiBtZW1saW5lLmM6MTUzMQorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAo5Z+36KGM5LitKSIKKworIzogbWVtbGluZS5jOjE1NDMKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFvnhKHms5XlnKjmnKzniYjmnKznmoQgVmltIOS4iuS9v+eUqF0iCisKKyM6IG1lbWxpbmUuYzoxNTQ2Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIFtub3QgdXNhYmxlIG9uIHRoaXMgY29tcHV0ZXJdIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgW+eEoeazleWcqOacrOmbu+iFpuS4iuS9v+eUqF0iCisKKyM6IG1lbWxpbmUuYzoxNTUxCittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSByZWFkXSIKK21zZ3N0ciAiICAgICAgICAgW+eEoeazleiugOWPll0iCisKKyM6IG1lbWxpbmUuYzoxNTU1Cittc2dpZCAiICAgICAgICAgW2Nhbm5vdCBiZSBvcGVuZWRdIgorbXNnc3RyICIgICAgICAgICBb54Sh5rOV6ZaL5ZWfXSIKKworIzogbWVtbGluZS5jOjE3NDUKK21zZ2lkICJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMxMzog54Sh5rOV5L+d55WZLCDkuI3kvb/nlKjmmqvlrZjmqpQiCisKKyM6IG1lbWxpbmUuYzoxNzk4Cittc2dpZCAiRmlsZSBwcmVzZXJ2ZWQiCittc2dzdHIgIuaqlOahiOW3suS/neeVmSIKKworIzogbWVtbGluZS5jOjE4MDAKK21zZ2lkICJFMzE0OiBQcmVzZXJ2ZSBmYWlsZWQiCittc2dzdHIgIkUzMTQ6IOS/neeVmeWkseaVlyIKKworIzogbWVtbGluZS5jOjE4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxNTogbWxfZ2V0OiBpbnZhbGlkIGxudW06ICVsZCIKK21zZ3N0ciAiRTMxNTogbWxfZ2V0OiDpjK/oqqTnmoQgbG51bTogJWxkIgorCisjOiBtZW1saW5lLmM6MTg5NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzE2OiBtbF9nZXQ6IGNhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzE2OiBtbF9nZXQ6IOaJvuS4jeWIsOesrCAlbGQg6KGMIgorCisjOiBtZW1saW5lLmM6MjI4NworbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAiRTMxNzog5oyH5qiZ5Y2A5aGKIGlkIOmMr+iqpCAzIgorCisjOiBtZW1saW5lLmM6MjM2NworbXNnaWQgInN0YWNrX2lkeCBzaG91bGQgYmUgMCIKK21zZ3N0ciAic3RhY2tfaWR4IOaHieipsuaYryAwIgorCisjOiBtZW1saW5lLmM6MjQyOQorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODog5pu05paw5aSq5aSa5Y2A5aGKPyIKKworIzogbWVtbGluZS5jOjI2MTEKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDQiCittc2dzdHIgIkUzMTc6IOaMh+aomeWNgOWhiiBpZCDpjK/oqqQgNCIKKworIzogbWVtbGluZS5jOjI2MzgKK21zZ2lkICJkZWxldGVkIGJsb2NrIDE/IgorbXNnc3RyICLliKrpmaTljYDloYogMT8iCisKKyM6IG1lbWxpbmUuYzoyODM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjA6IENhbm5vdCBmaW5kIGxpbmUgJWxkIgorbXNnc3RyICJFMzIwOiDmib7kuI3liLDnrKwgJWxkIOihjCIKKworIzogbWVtbGluZS5jOjMwODEKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIgorbXNnc3RyICJFMzE3OiDmjIfmqJnljYDloYogaWQg6Yyv6KqkIgorCisjOiBtZW1saW5lLmM6MzA5NworbXNnaWQgInBlX2xpbmVfY291bnQgaXMgemVybyIKK21zZ3N0ciAicGVfbGluZV9jb3VudCDngrrpm7YiCisKKyM6IG1lbWxpbmUuYzozMTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMjI6IGxpbmUgbnVtYmVyIG91dCBvZiByYW5nZTogJWxkIHBhc3QgdGhlIGVuZCIKK21zZ3N0ciAiRTMyMjog6KGM6Jmf6LaF5Ye656+E5ZyNOiAlbGQg6LaF6YGO57WQ5bC+IgorCisjOiBtZW1saW5lLmM6MzEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIzOiBsaW5lIGNvdW50IHdyb25nIGluIGJsb2NrICVsZCIKK21zZ3N0ciAiRTMyMzog5Y2A5aGKICVsZCDooYzmlbjpjK/oqqQiCisKKyM6IG1lbWxpbmUuYzozMTc5Cittc2dpZCAiU3RhY2sgc2l6ZSBpbmNyZWFzZXMiCittc2dzdHIgIuWghueWiuWkp+Wwj+WinuWKoCIKKworIzogbWVtbGluZS5jOjMyMjUKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDIiCittc2dzdHIgIkUzMTc6IOaMh+aomeWNgOWhiiBpZCDpjK8gMiIKKworIzogbWVtbGluZS5jOjM2NzkKK21zZ2lkICJFMzI1OiBBVFRFTlRJT04iCittc2dzdHIgIkUzMjU6IOazqOaEjyIKKworIzogbWVtbGluZS5jOjM2ODAKK21zZ2lkICIiCisiXG4iCisiRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgXCIiCittc2dzdHIgIiIKKyJcbiIKKyLmib7liLDmmqvlrZjmqpQgXCIiCisKKyM6IG1lbWxpbmUuYzozNjg0Cittc2dpZCAiV2hpbGUgb3BlbmluZyBmaWxlIFwiIgorbXNnc3RyICLlnKjplovllZ/mqpTmoYggXCIiCisKKyM6IG1lbWxpbmUuYzozNjkzCittc2dpZCAiICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhXG4iCittc2dzdHIgIiAgICAgIOavlOaaq+WtmOaqlOabtOaWsCFcbiIKKworIy4gU29tZSBvZiB0aGVzZSBtZXNzYWdlcyBhcmUgbG9uZyB0byBhbGxvdyB0cmFuc2xhdGlvbiB0bworIy4gKiBvdGhlciBsYW5ndWFnZXMuCisjOiBtZW1saW5lLmM6MzY5NworbXNnaWQgIiIKKyJcbiIKKyIoMSkgQW5vdGhlciBwcm9ncmFtIG1heSBiZSBlZGl0aW5nIHRoZSBzYW1lIGZpbGUuXG4iCisiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIGJlIGNhcmVmdWwgbm90IHRvIGVuZCB1cCB3aXRoIHR3b1xuIgorIiAgICBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGZpbGUgd2hlbiBtYWtpbmcgY2hhbmdlcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIigxKSDlj6/og73mnInlj6bkuIDlgIvnqIvlvI/kuZ/lnKjnt6jovK/lkIzkuIDlgIvmqpTmoYguXG4iCisiICAgIOWmguaenOaYr+mAmeaoo++8jOiri+Wwj+W/g+S4jeimgeWFqemCiuS4gOi1t+Wvq+WFpe+8jOS4jeeEtuS9oOeahOWKquWKm+mDveacg+iyoOiruOa1geawtOOAglxuIgorCisjOiBtZW1saW5lLmM6MzY5OAorbXNnaWQgIiAgICBRdWl0LCBvciBjb250aW51ZSB3aXRoIGNhdXRpb24uXG4iCittc2dzdHIgIiAgICDpm6LplovvvIzmiJbmmK/nubznuoznt6jovK/jgIJcbiIKKworIzogbWVtbGluZS5jOjM2OTkKK21zZ2lkICIiCisiXG4iCisiKDIpIEFuIGVkaXQgc2Vzc2lvbiBmb3IgdGhpcyBmaWxlIGNyYXNoZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMikg5YmN5qyh57eo6Lyv5q2k5qqU5pmC55W25qmfXG4iCisKKyM6IG1lbWxpbmUuYzozNzAwCittc2dpZCAiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSBcIjpyZWNvdmVyXCIgb3IgXCJ2aW0gLXIgIgorbXNnc3RyICIgICAg5aaC5p6c5piv6YCZ5qijLCDoq4vnlKggXCI6cmVjb3ZlclwiIOaIliBcInZpbSAtciIKKworIzogbWVtbGluZS5jOjM3MDIKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gcmVjb3ZlciB0aGUgY2hhbmdlcyAoc2VlIFwiOmhlbHAgcmVjb3ZlcnlcIikuXG4iCittc2dzdHIgIiIKKyJcIlxuIgorIiAgICDkvobmlZHlm57kv67mlLnos4fmlpkgKOmAsuS4gOatpeiqquaYjuiri+eciyBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorCisjOiBtZW1saW5lLmM6MzcwMworbXNnaWQgIiAgICBJZiB5b3UgZGlkIHRoaXMgYWxyZWFkeSwgZGVsZXRlIHRoZSBzd2FwIGZpbGUgXCIiCittc2dzdHIgIiAgICDlpoLmnpzoqbLmlZHnmoTpg73lt7LntpPmlZHkuoYsIOiri+ebtOaOpeWIqumZpOatpOaaq+WtmOaqlCBcIiIKKworIzogbWVtbGluZS5jOjM3MDUKK21zZ2lkICIiCisiXCJcbiIKKyIgICAgdG8gYXZvaWQgdGhpcyBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAg5Lul6YG/5YWN5YaN55yL5Yiw5q2k6KiK5oGvLlxuIgorCisjOiBtZW1saW5lLmM6MzcxOSBtZW1saW5lLmM6MzcyMworbXNnaWQgIlN3YXAgZmlsZSBcIiIKK21zZ3N0ciAi5pqr5a2Y5qqUIFwiIgorCisjOiBtZW1saW5lLmM6MzcyMCBtZW1saW5lLmM6MzcyNgorbXNnaWQgIlwiIGFscmVhZHkgZXhpc3RzISIKK21zZ3N0ciAiXCIg5bey57aT5a2Y5Zyo5LqGISIKKworIzogbWVtbGluZS5jOjM3MjkKK21zZ2lkICJWSU0gLSBBVFRFTlRJT04iCittc2dzdHIgIlZJTSAtIOazqOaEjyIKKworIzogbWVtbGluZS5jOjM3MzEKK21zZ2lkICJTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICLmmqvlrZjmqpTlt7LntpPlrZjlnKghIgorCisjOiBtZW1saW5lLmM6MzczNQorbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0IgorbXNnc3RyICIiCisi5Lul5ZSv6K6A5pa55byP6ZaL5ZWfKCZPKVxuIgorIuebtOaOpee3qOi8rygmRSlcbiIKKyLkv67lvqkoJlIpXG4iCisi6Zui6ZaLKCZRKSIKKworIzogbWVtbGluZS5jOjM3MzcKK21zZ2lkICIiCisiJk9wZW4gUmVhZC1Pbmx5XG4iCisiJkVkaXQgYW55d2F5XG4iCisiJlJlY292ZXJcbiIKKyImUXVpdFxuIgorIiZEZWxldGUgaXQiCittc2dzdHIgIiIKKyLku6XllK/oroDmlrnlvI/plovllZ8oJk8pXG4iCisi55u05o6l57eo6LyvKCZFKVxuIgorIuS/ruW+qSgmUilcbiIKKyLpm6LplosoJlEpXG4iCisi5Yiq6Zmk5pqr5a2Y5qqUKCZEKSIKKworIzogbWVtbGluZS5jOjM3OTAKK21zZ2lkICJFMzI2OiBUb28gbWFueSBzd2FwIGZpbGVzIGZvdW5kIgorbXNnc3RyICJFMzI2OiDmib7liLDlpKrlpJrmmqvlrZjmqpQiCisKKyM6IG1lbnUuYzo2NAorbXNnaWQgIkUzMjc6IFBhcnQgb2YgbWVudS1pdGVtIHBhdGggaXMgbm90IHN1Yi1tZW51IgorbXNnc3RyICJFMzI3OiDpg6jku73pgbjpoIXot6/lvpHkuI3mmK/lrZDpgbjllq4iCisKKyM6IG1lbnUuYzo2NQorbXNnaWQgIkUzMjg6IE1lbnUgb25seSBleGlzdHMgaW4gYW5vdGhlciBtb2RlIgorbXNnc3RyICJFMzI4OiDpgbjllq7lj6rog73lnKjlhbblroPmqKHlvI/kuK3kvb/nlKgiCisKKyM6IG1lbnUuYzo2NgorbXNnaWQgIkUzMjk6IE5vIG1lbnUgb2YgdGhhdCBuYW1lIgorbXNnc3RyICJFMzI5OiDmspLmnInpgqPmqKPnmoTpgbjllq4iCisKKyM6IG1lbnUuYzo1MDkKK21zZ2lkICJFMzMwOiBNZW51IHBhdGggbXVzdCBub3QgbGVhZCB0byBhIHN1Yi1tZW51IgorbXNnc3RyICJFMzMwOiDpgbjllq7ot6/lvpHkuI3og73mjIflkJHlrZDpgbjllq4iCisKKyM6IG1lbnUuYzo1NDgKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTog5LiN6IO955u05o6l5oqK6YG46aCF5Yqg5Yiw6YG45Zau5YiX5LitIgorCisjOiBtZW51LmM6NTU0Cittc2dpZCAiRTMzMjogU2VwYXJhdG9yIGNhbm5vdCBiZSBwYXJ0IG9mIGEgbWVudSBwYXRoIgorbXNnc3RyICJFMzMyOiDliIbpmpTnt5rkuI3og73mmK/pgbjllq7ot6/lvpHnmoTkuIDpg6jku70iCisKKyMuIE5vdyB3ZSBoYXZlIGZvdW5kIHRoZSBtYXRjaGluZyBtZW51LCBhbmQgd2UgbGlzdCB0aGUgbWFwcGluZ3MKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWVudS5jOjEwNzkKK21zZ2lkICIiCisiXG4iCisiLS0tIE1lbnVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDpgbjllq4gLS0tIgorCisjOiBtZW51LmM6MTk5NgorbXNnaWQgIlRlYXIgb2ZmIHRoaXMgbWVudSIKK21zZ3N0ciAi5YiH5LiL5q2k6YG45ZauIgorCisjOiBtZW51LmM6MjA2MQorbXNnaWQgIkUzMzM6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBtZW51IGl0ZW0iCittc2dzdHIgIkUzMzM6IOmBuOWWrui3r+W+keW/hemcgOaMh+WQkeS4gOWAi+mBuOmghSIKKworIzogbWVudS5jOjIwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMzNDogTWVudSBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFMzM0OiBb6YG45ZauXSDmib7kuI3liLAgJXMiCisKKyM6IG1lbnUuYzoyMTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzU6IE1lbnUgbm90IGRlZmluZWQgZm9yICVzIG1vZGUiCittc2dzdHIgIkUzMzU6ICVzIOaooeW8j+acquWumue+qemBuOWWriIKKworIzogbWVudS5jOjIxODgKK21zZ2lkICJFMzM2OiBNZW51IHBhdGggbXVzdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzY6IOmBuOWWrui3r+W+keW/hemcgOaMh+WQkeWtkOmBuOWWriIKKworIzogbWVudS5jOjIyMDkKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IOaJvuS4jeWIsOmBuOWWriAtIOiri+aqouafpemBuOWWruWQjeeosSIKKworIzogbWVzc2FnZS5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlY3RlZCB3aGlsZSBwcm9jZXNzaW5nICVzOiIKK21zZ3N0ciAi6JmV55CGICVzIOaZgueZvOeUn+mMr+iqpDoiCisKKyM6IG1lc3NhZ2UuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlNGxkOiIKK21zZ3N0ciAi6KGMICU0bGQ6IgorCisjOiBtZXNzYWdlLmM6NTY1Cittc2dpZCAiW3N0cmluZyB0b28gbG9uZ10iCittc2dzdHIgIlvmraTooYzpgY7plbddIgorCisjOiBtZXNzYWdlLmM6NzExCittc2dpZCAiTWVzc2FnZXMgbWFpbnRhaW5lcjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4iCittc2dzdHIgIiIKKyLmraPpq5TkuK3mlofoqIrmga/ntq3orbfogIU6IEZyYW5jaXMgUy5MaW4gPHBpYWlwQGNzaWUubnR1LmVkdS4iCisidHc+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENlY2lsIFNoZW5nICAgPGI3NTA2MDIyQGNzaWUubnR1LmVkdS50dz4iCisKKyM6IG1lc3NhZ2UuYzo5MzUKK21zZ2lkICJJbnRlcnJ1cHQ6ICIKK21zZ3N0ciAi5bey5Lit5pa3OiAiCisKKyM6IG1lc3NhZ2UuYzo5MzgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIuiri+aMiSBFTlRFUiDnubznuowiCisKKyM6IG1lc3NhZ2UuYzo5NDAKK21zZ2lkICJIaXQgRU5URVIgb3IgdHlwZSBjb21tYW5kIHRvIGNvbnRpbnVlIgorbXNnc3RyICLoq4vmjIkgRU5URVIg5oiW5YW25a6D5ZG95Luk5Lul57m857qMIgorCisjOiBtZXNzYWdlLmM6MjAyOAorbXNnaWQgIi0tIE1vcmUgLS0iCittc2dzdHIgIi0tIOWwmuaciSAtLSIKKworIzogbWVzc2FnZS5jOjIwMzEKK21zZ2lkICIgKFJFVC9CUzogbGluZSwgU1BBQ0UvYjogcGFnZSwgZC91OiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVC9CUzog5ZCR5LiLL+WQkeS4iuS4gOihjCwg56m655m96Y21L2I6IOS4gOmggSwgZC91OiDljYrpoIEsIHE6IOmboumWiykiCisKKyM6IG1lc3NhZ2UuYzoyMDMyCittc2dpZCAiIChSRVQ6IGxpbmUsIFNQQUNFOiBwYWdlLCBkOiBoYWxmIHBhZ2UsIHE6IHF1aXQpIgorbXNnc3RyICIgKFJFVDog5ZCR5LiL5LiA6KGMLCDnqbrnmb3pjbU6IOS4gOmggSwgZDog5Y2K6aCBLCBxOiDpm6LplospIgorCisjOiBtZXNzYWdlLmM6MjUwOCBtZXNzYWdlLmM6MjUyMworbXNnaWQgIlF1ZXN0aW9uIgorbXNnc3RyICLllY/poYwiCisKKyM6IG1lc3NhZ2UuYzoyNTEwCittc2dpZCAiIgorIiZZZXNcbiIKKyImTm8iCittc2dzdHIgIiIKKyImWeaYr1xuIgorIiZO5ZCmIgorCisjOiBtZXNzYWdlLmM6MjU0MworbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZZ5pivXG4iCisiJk7lkKZcbiIKKyImQeWFqOmDqOWtmOaqlFxuIgorIiZE5YWo6YOo5LiN5a2YXG4iCisiJkPlj5bmtogiCisKKyM6IG1lc3NhZ2UuYzoyNTg0Cittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAi5a2Y5qqUIgorCisjOiBtZXNzYWdlLmM6MjU4NgorbXNnaWQgIk9wZW4gRmlsZSBkaWFsb2ciCittc2dzdHIgIumWi+aqlCIKKworIy4gVE9ETzogbm9uLUdVSSBmaWxlIHNlbGVjdG9yIGhlcmUKKyM6IG1lc3NhZ2UuYzoyNjU3Cittc2dpZCAiRTMzODogU29ycnksIG5vIGZpbGUgYnJvd3NlciBpbiBjb25zb2xlIG1vZGUiCittc2dzdHIgIkUzMzg6IOS4u+aOp+WPsChDb25zb2xlKeaooeW8j+aZguaykuacieaqlOahiOeAj+imveWZqChmaWxlIGJyb3dzZXIpIgorCisjOiBtaXNjMS5jOjI0NzcKK21zZ2lkICJXMTA6IFdhcm5pbmc6IENoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSIKK21zZ3N0ciAiVzEwOiDms6jmhI86IOS9oOato+WcqOS/ruaUueS4gOWAi+WUr+iugOaqlCIKKworIzogbWlzYzEuYzoyNzEyCittc2dpZCAiMSBtb3JlIGxpbmUiCittc2dzdHIgIumChOacieS4gOihjCIKKworIzogbWlzYzEuYzoyNzE0Cittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgIuWwkeaWvOS4gOihjCIKKworIzogbWlzYzEuYzoyNzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgorbXNnc3RyICIg6YKE5pyJICVsZCDooYwiCisKKyM6IG1pc2MxLmM6MjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgZmV3ZXIgbGluZXMiCittc2dzdHIgIuWPquWJqSAlbGQg6KGMIgorCisjOiBtaXNjMS5jOjI3MjQKK21zZ2lkICIgKEludGVycnVwdGVkKSIKK21zZ3N0ciAiICjlt7LkuK3mlrcpIgorCisjOiBtaXNjMS5jOjYzNDgKK21zZ2lkICJWaW06IHByZXNlcnZpbmcgZmlsZXMuLi5cbiIKK21zZ3N0ciAiVmltOiDkv53nlZnmqpTmoYjkuK0uLi5cbiIKKworIy4gY2xvc2UgYWxsIG1lbWZpbGVzLCB3aXRob3V0IGRlbGV0aW5nCisjOiBtaXNjMS5jOjYzNTgKK21zZ2lkICJWaW06IEZpbmlzaGVkLlxuIgorbXNnc3RyICJWaW06IOe1kOadny5cbiIKKworIzogbWlzYzIuYzo2NzAgbWlzYzIuYzo2ODYKK21zZ2lkICJFUlJPUjogIgorbXNnc3RyICLpjK/oqqQ6ICIKKworIzogbWlzYzIuYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIltieXRlc10gdG90YWwgYWxsb2MtZnJlZWQgJWx1LSVsdSwgaW4gdXNlICVsdSwgcGVhayB1c2UgJWx1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJbYnl0ZXNdIOWFqOmDqCBhbGxvYy1mcmVlZCAlbHUtJWx1LCDkvb/nlKjkuK0gJWx1LCBwZWFrIOS9v+eUqCAlbHVcbiIKKworIzogbWlzYzIuYzo2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIltjYWxsc10gdG90YWwgcmUvbWFsbG9jKCkncyAlbHUsIHRvdGFsIGZyZWUoKSdzICVsdVxuIgorIlxuIgorbXNnc3RyICIiCisiW+WRvOWPq10g5YWo6YOoIHJlL21hbGxvYygpOiAlbHUsIOWFqOmDqCBmcmVlKCknOiAlbHVcbiIKKyJcbiIKKworIzogbWlzYzIuYzo3NDcKK21zZ2lkICJFMzQwOiBMaW5lIGlzIGJlY29taW5nIHRvbyBsb25nIgorbXNnc3RyICJFMzQwOiDmraTooYzpgY7plbciCisKKyM6IG1pc2MyLmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDE6IEludGVybmFsIGVycm9yOiBsYWxsb2MoJWxkLCApIgorbXNnc3RyICJFMzQxOiDlhafpg6jpjK/oqqQ6IGxhbGxvYyglbGQsICkiCisKKyM6IG1pc2MyLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDI6IE91dCBvZiBtZW1vcnkhICAoYWxsb2NhdGluZyAlbHUgYnl0ZXMpIgorbXNnc3RyICJFMzQyOiDoqJjmhrbpq5TkuI3otrMhICjlmJfoqabphY3nva4gJWx1IOS9jeWFg+e1hCkiCisKKyM6IG1pc2MyLmM6MjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYWxsaW5nIHNoZWxsIHRvIGV4ZWN1dGU6IFwiJXNcIiIKK21zZ3N0ciAi5ZG85Y+rIHNoZWxsIOWft+ihjDogXCIlc1wiIgorCisjOiBtaXNjMi5jOjI3ODUKK21zZ2lkICJFNTQ1OiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTQ1OiDnvLrlsJEgY29sb24iCisKKyM6IG1pc2MyLmM6Mjc4NyBtaXNjMi5jOjI4MTQKK21zZ2lkICJFNTQ2OiBJbGxlZ2FsIG1vZGUiCittc2dzdHIgIkU1NDY6IOS4jeato+eiuueahOaooeW8jyIKKworIzogbWlzYzIuYzoyODUzCittc2dpZCAiRTU0NzogSWxsZWdhbCBtb3VzZXNoYXBlIgorbXNnc3RyICJFNTQ3OiDkuI3mraPnorrnmoTmu5HpvKDlvaLni4AiCisKKyM6IG1pc2MyLmM6Mjg5MworbXNnaWQgIkU1NDg6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTQ4OiDmh4noqbLopoHmnInmlbjlrZciCisKKyM6IG1pc2MyLmM6Mjg5OAorbXNnaWQgIkU1NDk6IElsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAiRTU0OTog5LiN5q2j56K655qE55m+5YiG5q+UIgorCisjOiBtaXNjMi5jOjMyMDgKK21zZ2lkICJFbnRlciBlbmNyeXB0aW9uIGtleTogIgorbXNnc3RyICLovLjlhaXlr4bnorw6ICIKKworIzogbWlzYzIuYzozMjA5Cittc2dpZCAiRW50ZXIgc2FtZSBrZXkgYWdhaW46ICIKK21zZ3N0ciAi6KuL5YaN6Ly45YWl5LiA5qyhOiAiCisKKyM6IG1pc2MyLmM6MzIxOQorbXNnaWQgIktleXMgZG9uJ3QgbWF0Y2ghIgorbXNnc3RyICLlhanmrKHovLjlhaXlr4bnorzkuI3nm7jlkIwhIgorCisjOiBtaXNjMi5jOjM3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUzNDM6IEludmFsaWQgcGF0aDogJyoqW251bWJlcl0nIG11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCBvciBiZSAiCisiZm9sbG93ZWQgYnkgJyVzJy4iCittc2dzdHIgIkUzNDM6IOS4jeato+eiuueahOi3r+W+kTogJyoqW251bWJlcl0nIOW/hemcgOimgeWcqOi3r+W+kee1kOWwvuaIluimgeaOpeiRlyAnJXMnIgorCisjOiBtaXNjMi5jOjUwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NDogQ2FuJ3QgZmluZCBkaXJlY3RvcnkgXCIlc1wiIGluIGNkcGF0aCIKK21zZ3N0ciAiRTM0NDogY2RwYXRoIOS4reaykuacieebrumMhCBcIiVzXCIiCisKKyM6IG1pc2MyLmM6NTA0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ1OiBDYW4ndCBmaW5kIGZpbGUgXCIlc1wiIGluIHBhdGgiCittc2dzdHIgIkUzNDU6IOWcqOi3r+W+keS4reaJvuS4jeWIsOaqlOahiCBcIiVzXCIiCisKKyM6IG1pc2MyLmM6NTA1MworIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ2OiBObyBtb3JlIGRpcmVjdG9yeSBcIiVzXCIgZm91bmQgaW4gY2RwYXRoIgorbXNnc3RyICJFMzQ2OiDlnKjot6/lvpHkuK3mib7kuI3liLDmm7TlpJrnmoTmqpTmoYggXCIlc1wiIgorCisjOiBtaXNjMi5jOjUwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0NzogTm8gbW9yZSBmaWxlIFwiJXNcIiBmb3VuZCBpbiBwYXRoIgorbXNnc3RyICJFMzQ3OiDlnKjot6/lvpHkuK3mib7kuI3liLDmm7TlpJrnmoTmqpTmoYggXCIlc1wiIgorCisjOiBtaXNjMi5jOjUyOTAKK21zZ2lkICJFNTUwOiBNaXNzaW5nIGNvbG9uIgorbXNnc3RyICJFNTUwOiDnvLrlsJEgY29sb24iCisKKyM6IG1pc2MyLmM6NTMwMgorbXNnaWQgIkU1NTE6IElsbGVnYWwgY29tcG9uZW50IgorbXNnc3RyICJFNTUxOiDkuI3mraPnorrnmoTmqKHlvI8iCisKKyM6IG1pc2MyLmM6NTMxMAorbXNnaWQgIkU1NTI6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTUyOiDmh4noqbLopoHmnInmlbjlrZciCisKKyMuIEdldCBoZXJlIHdoZW4gdGhlIHNlcnZlciBjYW4ndCBiZSBmb3VuZC4KKyM6IG5ldGJlYW5zLmM6MjgzCittc2dpZCAiQ2Fubm90IGNvbm5lY3QgdG8gTmV0YmVhbnMgIzIiCittc2dzdHIgIueEoeazlemAo+aOpeWIsCBOZXRiZWFucyAjMiIKKworIzogbmV0YmVhbnMuYzoyOTEKK21zZ2lkICJDYW5ub3QgY29ubmVjdCB0byBOZXRiZWFucyIKK21zZ3N0ciAi54Sh5rOV6YCj5o6l5YiwIE5ldGJlYW5zIgorCisjOiBuZXRiZWFucy5jOjU2NQorbXNnaWQgInJlYWQgZnJvbSBOZXRiZWFucyBzb2NrZXQiCittc2dzdHIgIueUsSBOZXRiZWFucyBzb2NrZXQg6K6A5Y+WIgorCisjOiBub3JtYWwuYzoyOTEzCittc2dpZCAiV2FybmluZzogdGVybWluYWwgY2Fubm90IGhpZ2hsaWdodCIKK21zZ3N0ciAi5rOo5oSPOiDkvaDnmoTntYLnq6/mqZ/nhKHms5Xpoa/npLrpq5jkuq7luqYiCisKKyM6IG5vcm1hbC5jOjMxMjgKK21zZ2lkICJFMzQ4OiBObyBzdHJpbmcgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ4OiDmuLjmqJnomZXmspLmnInlrZfkuLIiCisKKyM6IG5vcm1hbC5jOjMxMzAKK21zZ2lkICJFMzQ5OiBObyBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTM0OTog5ri45qiZ6JmV5rKS5pyJ6K2Y5Yil5a2XIgorCisjOiBub3JtYWwuYzo0MzQ4Cittc2dpZCAiRTM1MjogQ2Fubm90IGVyYXNlIGZvbGRzIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTI6IOeEoeazleWcqOebruWJjeeahCAnZm9sZG1ldGhvZCcg5LiL5Yiq6ZmkIGZvbGQiCisKKyM6IG9wcy5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAxIHRpbWUiCittc2dzdHIgIuS4gOihjCAlcyDpgY4g5LiA5qyhIgorCisjOiBvcHMuYzoyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiMSBsaW5lICVzZWQgJWQgdGltZXMiCittc2dzdHIgIuS4gOihjCAlcyDpgY4gJWQg5qyhIgorCisjOiBvcHMuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgMSB0aW1lIgorbXNnc3RyICIlbGQg6KGMICVzIOmBjiDkuIDmrKEiCisKKyM6IG9wcy5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgJXNlZCAlZCB0aW1lcyIKK21zZ3N0ciAiJWxkIOihjCAlcyDpgY4gJWQg5qyhIgorCisjOiBvcHMuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIHRvIGluZGVudC4uLiAiCittc2dzdHIgIue4ruaOkiAlbGQg6KGMLi4uIgorCisjOiBvcHMuYzo3MTMKK21zZ2lkICIxIGxpbmUgaW5kZW50ZWQgIgorbXNnc3RyICLkuIDooYzlt7LnuK7mjpIiCisKKyM6IG9wcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgaW5kZW50ZWQgIgorbXNnc3RyICLlt7LnuK7mjpIgJWxkIOihjCIKKworIy4gbXVzdCBkaXNwbGF5IHRoZSBwcm9tcHQKKyM6IG9wcy5jOjE2NDUKK21zZ2lkICJjYW5ub3QgeWFuazsgZGVsZXRlIGFueXdheSIKK21zZ3N0ciAi54Sh5rOV5Ymq5LiLOyDnm7TmjqXliKrpmaQiCisKKyM6IG9wcy5jOjIxNTIKK21zZ2lkICIxIGxpbmUgY2hhbmdlZCIKK21zZ3N0ciAiIDEg6KGMIH5lZCIKKworIzogb3BzLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgY2hhbmdlZCIKK21zZ3N0ciAiICVsZCDooYwgfmVkIgorCisjOiBvcHMuYzoyNTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImZyZWVpbmcgJWxkIGxpbmVzIgorbXNnc3RyICLph4vmlL4gJWxkIOihjOS4rSIKKworIzogb3BzLmM6MjgxOQorbXNnaWQgIjEgbGluZSB5YW5rZWQiCittc2dzdHIgIuW3suikh+ijvSAxIOihjCIKKworIzogb3BzLmM6MjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgeWFua2VkIgorbXNnc3RyICLlt7LopIfoo70gJWxkIOihjCIKKworIzogb3BzLmM6MzEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzUzOiBOb3RoaW5nIGluIHJlZ2lzdGVyICVzIgorbXNnc3RyICJFMzUzOiDmmqvlrZjlmaggJXMg6KOh5rKS5pyJ5p2x6KW/IgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IG9wcy5jOjM2NjQKK21zZ2lkICIiCisiXG4iCisiLS0tIFJlZ2lzdGVycyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g5pqr5a2Y5ZmoIC0tLSIKKworIzogb3BzLmM6NDg3MworbXNnaWQgIklsbGVnYWwgcmVnaXN0ZXIgbmFtZSIKK21zZ3N0ciAi5LiN5q2j56K655qE5pqr5a2Y5Zmo5ZCN56ixIgorCisjOiBvcHMuYzo0OTU5Cittc2dpZCAiIgorIlxuIgorIiMgUmVnaXN0ZXJzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDmmqvlrZjlmag6XG4iCisKKyM6IG9wcy5jOjQ5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3NDogVW5rbm93biByZWdpc3RlciB0eXBlICVkIgorbXNnc3RyICJFNTc0OiDmnKrnn6XnmoToqLvlhorlnovmhYs6ICVkIgorCisjOiBvcHMuYzo1NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTQ6IEludmFsaWQgcmVnaXN0ZXIgbmFtZTogJyVzJyIKK21zZ3N0ciAiRTM1NDog5pqr5a2Y5Zmo5ZCN56ix6Yyv6KqkOiAnJXMnIgorCisjOiBvcHMuYzo1NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBDb2xzOyAiCittc2dzdHIgIiVsZCDmrIQ7ICIKKworIzogb3BzLmM6NTc1NworIywgYy1mb3JtYXQKK21zZ2lkICJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiCittc2dzdHIgIumBuOaTh+S6hiAlcyVsZC8lbGQg6KGMOyAlbGQvJWxkIOWtlyhXb3JkKTsgJWxkLyVsZCDlrZflhYMoQnl0ZXMpIgorCisjOiBvcHMuYzo1NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbCAlcyBvZiAlczsgTGluZSAlbGQgb2YgJWxkOyBXb3JkICVsZCBvZiAlbGQ7IEJ5dGUgJWxkIG9mICVsZCIKK21zZ3N0ciAi5qyEICVzLyVzOyDooYwgJWxkLyVsZDsg5a2XKFdvcmQpICVsZC8lbGQ7IOWtl+WFgyhCeXRlKSAlbGQvJWxkIgorCisjOiBvcHMuYzo1Nzg0CisjLCBjLWZvcm1hdAorbXNnaWQgIigrJWxkIGZvciBCT00pIgorbXNnc3RyICIoKyVsZCBmb3IgQk9NKSIKKworIzogb3B0aW9uLmM6MTU3OQorbXNnaWQgIiU8JWYlaCVtJT1QYWdlICVOIgorbXNnc3RyICIlPCVmJWglbSU956ysICVOIOmggSIKKworIyA/IHdoYXQncyB0aGlzIGZvcj8KKyM6IG9wdGlvbi5jOjIwMTIKK21zZ2lkICJUaGFua3MgZm9yIGZseWluZyBWaW0iCittc2dzdHIgIuaEn+isneaCqOaEm+eUqCBWaW0iCisKKyM6IG9wdGlvbi5jOjMyNTAgb3B0aW9uLmM6MzM1NworbXNnaWQgIkU1MTg6IFVua25vd24gb3B0aW9uIgorbXNnc3RyICJFNTE4OiDkuI3mraPnorrnmoTpgbjpoIUiCisKKyM6IG9wdGlvbi5jOjMyNjMKK21zZ2lkICJFNTE5OiBPcHRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRTUxOTog5LiN5pSv5o+06Kmy6YG46aCFIgorCisjOiBvcHRpb24uYzozMjg4Cittc2dpZCAiRTUyMDogTm90IGFsbG93ZWQgaW4gYSBtb2RlbGluZSIKK21zZ3N0ciAiRTUyMDog5LiN6IO95ZyoIE1vZGVsaW5lIOijoeWHuuePviIKKworIzogb3B0aW9uLmM6MzM0NAorbXNnaWQgIiIKKyJcbiIKKyJcdExhc3Qgc2V0IGZyb20gIgorbXNnc3RyICIiCisiXG4iCisiXHTkuIrmrKHoqK3lrpo6ICIKKworIzogb3B0aW9uLmM6MzQ4MworbXNnaWQgIkU1MjE6IE51bWJlciByZXF1aXJlZCBhZnRlciA9IgorbXNnc3RyICJFNTIxOiA9IOW+jOmcgOimgeacieaVuOWtlyIKKworIzogb3B0aW9uLmM6Mzc5NyBvcHRpb24uYzo0NDEzCittc2dpZCAiRTUyMjogTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1MjI6IFRlcm1jYXAg6KOh6Z2i5om+5LiN5YiwIgorCisjOiBvcHRpb24uYzozODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1Mzk6IElsbGVnYWwgY2hhcmFjdGVyIDwlcz4iCittc2dzdHIgIkU1Mzk6IOS4jeato+eiuueahOWtl+WFgyA8JXM+IgorCisjOiBvcHRpb24uYzo0NDA1Cittc2dpZCAiRTUyOTogQ2Fubm90IHNldCAndGVybScgdG8gZW1wdHkgc3RyaW5nIgorbXNnc3RyICJFNTI5OiDnhKHms5XoqK3lrpogJ3Rlcm0nIOeCuuepuuWtl+S4siIKKworIzogb3B0aW9uLmM6NDQwOAorbXNnaWQgIkU1MzA6IENhbm5vdCBjaGFuZ2UgdGVybSBpbiBHVUkiCittc2dzdHIgIkU1MzA6IOWcqOWcluWei+eVjOmdouS4reeEoeazleWIh+aPmyB0ZXJtIgorCisjOiBvcHRpb24uYzo0NDEwCittc2dpZCAiRTUzMTogVXNlIFwiOmd1aVwiIHRvIHN0YXJ0IHRoZSBHVUkiCittc2dzdHIgIkU1MzE6IOi8uOWFpSBcIjpndWlcIiDkvobllZ/li5XlnJblvaLnlYzpnaIiCisKKyM6IG9wdGlvbi5jOjQ0MzEKK21zZ2lkICJFNTg5OiAnYmFja3VwZXh0JyBhbmQgJ3BhdGNobW9kZScgYXJlIGVxdWFsIgorbXNnc3RyICJFNTg5OiAnYmFja3VwZXh0JyDot58gJ3BhdGNobW9kZScg5piv5LiA5qij55qEIgorCisjOiBvcHRpb24uYzo0NjE2Cittc2dpZCAiRTYxNzogQ2Fubm90IGJlIGNoYW5nZWQgaW4gdGhlIEdUSysgMiBHVUkiCittc2dzdHIgIkU2MTc6IOWcqOWcluWei+eVjOmdouS4reeEoeazleWIh+aPmyB0ZXJtIgorCisjOiBvcHRpb24uYzo0NzQ4Cittc2dpZCAiRTUyNDogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTUyNDog57y65bCRIGNvbG9uIgorCisjOiBvcHRpb24uYzo0NzUwCittc2dpZCAiRTUyNTogWmVybyBsZW5ndGggc3RyaW5nIgorbXNnc3RyICJFNTI1OiDpm7bplbfluqblrZfkuLIiCisKKyM6IG9wdGlvbi5jOjQ4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUyNjogTWlzc2luZyBudW1iZXIgYWZ0ZXIgPCVzPiIKK21zZ3N0ciAiRTUyNjogPCVzPiDlvoznvLrlsJHmlbjlrZciCisKKyM6IG9wdGlvbi5jOjQ4MzIKK21zZ2lkICJFNTI3OiBNaXNzaW5nIGNvbW1hIgorbXNnc3RyICJFNTI3OiDnvLrlsJHpgJfomZ8iCisKKyM6IG9wdGlvbi5jOjQ4MzkKK21zZ2lkICJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJFNTI4OiDlv4XpnIDmjIflrprkuIDlgIsgJyDlgLwiCisKKyM6IG9wdGlvbi5jOjQ4ODAKK21zZ2lkICJFNTk1OiBjb250YWlucyB1bnByaW50YWJsZSBvciB3aWRlIGNoYXJhY3RlciIKK21zZ3N0ciAiRTU5NTog5YWn5ZCr54Sh5rOV6aGv56S655qE5a2X5YWDIgorCisjOiBvcHRpb24uYzo0OTI5Cittc2dpZCAiRTU5NjogSW52YWxpZCBmb250KHMpIgorbXNnc3RyICJFNTk2OiDkuI3mraPnorrnmoTlrZflnosiCisKKyM6IG9wdGlvbi5jOjQ5MzcKK21zZ2lkICJFNTk3OiBjYW4ndCBzZWxlY3QgZm9udHNldCIKK21zZ3N0ciAiRTU5Nzog54Sh5rOV5L2/55So5a2X5Z6L6ZuGKEZvbnRzZXQpIgorCisjOiBvcHRpb24uYzo0OTM5Cittc2dpZCAiRTU5ODogSW52YWxpZCBmb250c2V0IgorbXNnc3RyICJFNTk4OiDkuI3mraPnorrnmoTlrZflnovpm4YoRm9udHNldCkiCisKKyM6IG9wdGlvbi5jOjQ5NDYKK21zZ2lkICJFNTMzOiBjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICJFNTMzOiDnhKHms5Xkvb/nlKjoqK3lrprnmoTkuK3mloflrZflnosoV2lkZWZvbnQpIgorCisjOiBvcHRpb24uYzo0OTQ4Cittc2dpZCAiRTUzNDogSW52YWxpZCB3aWRlIGZvbnQiCittc2dzdHIgIkU1MzQ6IOS4jeato+eiuueahOWtl+WeiyhXaWRlZm9udCkiCisKKyM6IG9wdGlvbi5jOjUyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUzNTogSWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgPCVjPiIKK21zZ3N0ciAiRTUzNTogPCVjPiDlvozmnInkuI3mraPnorrnmoTlrZflhYMiCisKKyM6IG9wdGlvbi5jOjUzMjIKK21zZ2lkICJFNTM2OiBjb21tYSByZXF1aXJlZCIKK21zZ3N0ciAiRTUzNjog6ZyA6KaB6YCX6JmfIgorCisjOiBvcHRpb24uYzo1MzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1Mzc6ICdjb21tZW50c3RyaW5nJyBtdXN0IGJlIGVtcHR5IG9yIGNvbnRhaW4gJXMiCittc2dzdHIgIkU1Mzc6ICdjb21tZW50c3RyaW5nJyDlv4XpnIDmmK/nqbrnmb3miJbljIXlkKsgJXMiCisKKyM6IG9wdGlvbi5jOjUzNzcKK21zZ2lkICJFNTM4OiBObyBtb3VzZSBzdXBwb3J0IgorbXNnc3RyICJFNTM4OiDkuI3mlK/mj7Tmu5HpvKAiCisKKyM6IG9wdGlvbi5jOjU2NDUKK21zZ2lkICJFNTQwOiBVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJFNTQwOiDmspLmnInntZDmnZ/nmoTpgYvnrpflvI86ICIKKworIzogb3B0aW9uLmM6NTY0OQorbXNnaWQgIkU1NDE6IHRvbyBtYW55IGl0ZW1zIgorbXNnc3RyICJFNTQxOiDlpKrlpJrpoIXnm64iCisKKyM6IG9wdGlvbi5jOjU2NTEKK21zZ2lkICJFNTQyOiB1bmJhbGFuY2VkIGdyb3VwcyIKK21zZ3N0ciAiRTU0Mjog5LiN5bCN56ix55qEIGdyb3VwIgorCisjOiBvcHRpb24uYzo1ODcyCittc2dpZCAiRTU5MDogQSBwcmV2aWV3IHdpbmRvdyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRTU5MDog6aCQ6KaW55qE6KaW56qX5bey57aT5a2Y5Zyo5LqGIgorCisjOiBvcHRpb24uYzo2MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTM6IE5lZWQgYXQgbGVhc3QgJWQgbGluZXMiCittc2dzdHIgIkU1OTM6IOiHs+WwkemcgOimgSAlZCDooYwiCisKKyM6IG9wdGlvbi5jOjYzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU5NDogTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIgorbXNnc3RyICJFNTk0OiDoh7PlsJHpnIDopoEgJWQg5qyEIgorCisjOiBvcHRpb24uYzo2NjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTU6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTM1NTog5LiN5q2j56K655qE6YG46aCFOiAlcyIKKworIzogb3B0aW9uLmM6Njc2OQorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIOe1guerr+apn+eivCAtLS0iCisKKyM6IG9wdGlvbi5jOjY3NzEKK21zZ2lkICIiCisiXG4iCisiLS0tIEdsb2JhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBHbG9iYWwg6YG46aCF5YC8IC0tLSIKKworIzogb3B0aW9uLmM6Njc3MworbXNnaWQgIiIKKyJcbiIKKyItLS0gTG9jYWwgb3B0aW9uIHZhbHVlcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gTG9jYWwg6YG46aCF5YC8IC0tLSIKKworIzogb3B0aW9uLmM6Njc3NQorbXNnaWQgIiIKKyJcbiIKKyItLS0gT3B0aW9ucyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g6YG46aCFIC0tLSIKKworIzogb3B0aW9uLmM6NzQ2NworbXNnaWQgIkUzNTY6IGdldF92YXJwIEVSUk9SIgorbXNnc3RyICJFMzU2OiBnZXRfdmFycCDpjK/oqqQiCisKKyM6IG9wdGlvbi5jOjg0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1NzogJ2xhbmdtYXAnOiBNYXRjaGluZyBjaGFyYWN0ZXIgbWlzc2luZyBmb3IgJXMiCittc2dzdHIgIkUzNTc6ICdsYW5nbWFwJzog5om+5LiN5YiwICVzIOWwjeaHieeahOWtl+WFgyIKKworIzogb3B0aW9uLmM6ODQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU4OiAnbGFuZ21hcCc6IEV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgc2VtaWNvbG9uOiAlcyIKK21zZ3N0ciAiRTM1ODogJ2xhbmdtYXAnOiDliIbomZ/lvozmnInlpJrppJjnmoTlrZflhYM6ICVzIgorCisjOiBvc19hbWlnYS5jOjI3MworbXNnaWQgImNhbm5vdCBvcGVuICIKK21zZ3N0ciAi5LiN6IO96ZaL5ZWfIgorCisjOiBvc19hbWlnYS5jOjMwNworbXNnaWQgIlZJTTogQ2FuJ3Qgb3BlbiB3aW5kb3chXG4iCittc2dzdHIgIlZJTTog54Sh5rOV6ZaL5ZWf6KaW56qXIVxuIgorCisjOiBvc19hbWlnYS5jOjMyOQorbXNnaWQgIk5lZWQgQW1pZ2Fkb3MgdmVyc2lvbiAyLjA0IG9yIGxhdGVyXG4iCittc2dzdHIgIumcgOimgSBBbWlnYWRvcyDniYjmnKwgMi4wNCDku6XkuIpcbiIKKworIzogb3NfYW1pZ2EuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmVlZCAlcyB2ZXJzaW9uICVsZFxuIgorbXNnc3RyICLpnIDopoEgJXMg54mI5pysICVsZFxuIgorCisjOiBvc19hbWlnYS5jOjQwNworbXNnaWQgIkNhbm5vdCBvcGVuIE5JTDpcbiIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWfIE5JTDpcbiIKKworIzogb3NfYW1pZ2EuYzo0MTgKK21zZ2lkICJDYW5ub3QgY3JlYXRlICIKK21zZ3N0ciAi5LiN6IO95bu656uLICIKKworIzogb3NfYW1pZ2EuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltIGV4aXRpbmcgd2l0aCAlZFxuIgorbXNnc3RyICJWaW0g57WQ5p2f5YKz5Zue5YC8OiAlZFxuIgorCisjOiBvc19hbWlnYS5jOjkyOAorbXNnaWQgImNhbm5vdCBjaGFuZ2UgY29uc29sZSBtb2RlID8hXG4iCittc2dzdHIgIueEoeazleWIh+aPm+S4u+aOp+WPsChjb25zb2xlKeaooeW8jyAhP1xuIgorCisjOiBvc19hbWlnYS5jOjk5NAorbXNnaWQgIm1jaF9nZXRfc2hlbGxzaXplOiBub3QgYSBjb25zb2xlPz9cbiIKK21zZ3N0ciAibWNoX2dldF9zaGVsbHNpemU6IOS4jeaYr+S4u+aOp+WPsChjb25zb2xlKT8/XG4iCisKKyMuIGlmIFZpbSBvcGVuZWQgYSB3aW5kb3c6IEV4ZWN1dGluZyBhIHNoZWxsIG1heSBjYXVzZSBjcmFzaGVzCisjOiBvc19hbWlnYS5jOjExNDMKK21zZ2lkICJFMzYwOiBDYW5ub3QgZXhlY3V0ZSBzaGVsbCB3aXRoIC1mIG9wdGlvbiIKK21zZ3N0ciAiRTM2MDog5LiN6IO955SoIC1mIOmBuOmgheWft+ihjCBzaGVsbCIKKworIzogb3NfYW1pZ2EuYzoxMTg0IG9zX2FtaWdhLmM6MTI3NAorbXNnaWQgIkNhbm5vdCBleGVjdXRlICIKK21zZ3N0ciAi5LiN6IO95Z+36KGMICIKKworIzogb3NfYW1pZ2EuYzoxMTg3IG9zX2FtaWdhLmM6MTI4NAorbXNnaWQgInNoZWxsICIKK21zZ3N0ciAic2hlbGwgIgorCisjOiBvc19hbWlnYS5jOjEyMDcgb3NfYW1pZ2EuYzoxMzA5Cittc2dpZCAiIHJldHVybmVkXG4iCittc2dzdHIgIiDlt7Lov5Tlm55cbiIKKworIzogb3NfYW1pZ2EuYzoxNDUwCittc2dpZCAiQU5DSE9SX0JVRl9TSVpFIHRvbyBzbWFsbC4iCittc2dzdHIgIkFOQ0hPUl9CVUZfU0laRSDlpKrlsI8iCisKKyM6IG9zX2FtaWdhLmM6MTQ1NAorbXNnaWQgIkkvTyBFUlJPUiIKK21zZ3N0ciAiSS9PIOmMr+iqpCIKKworIzogb3NfbXN3aW4uYzo1MTUKK21zZ2lkICIuLi4odHJ1bmNhdGVkKSIKK21zZ3N0ciAiLi4uKOW3suWIh+aOiSkiCisKKyM6IG9zX21zd2luLmM6NjE3Cittc2dpZCAiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIidjb2x1bW5zJyDkuI3mmK8gODAsIOeEoeazleWft+ihjOWklumDqOWRveS7pCIKKworIzogb3NfbXN3aW4uYzoxODAyCittc2dpZCAiRTIzNzogUHJpbnRlciBzZWxlY3Rpb24gZmFpbGVkIgorbXNnc3RyICJFMjM3OiDnhKHms5Xpgbjmk4fmraTljbDooajmqZ8iCisKKyM6IG9zX21zd2luLmM6MTg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ0byAlcyBvbiAlcyIKK21zZ3N0ciAi5YiwICVzIG9uICVzIgorCisjOiBvc19tc3dpbi5jOjE4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMzogVW5rbm93biBwcmludGVyIGZvbnQ6ICVzIgorbXNnc3RyICJFNjEzOiDkuI3mraPnorrnmoTljbDooajmqZ/lrZflnos6ICVzIgorCisjOiBvc19tc3dpbi5jOjE5MDcgb3NfbXN3aW4uYzoxOTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzg6IFByaW50IGVycm9yOiAlcyIKK21zZ3N0ciAiRTIzODog5YiX5Y2w6Yyv6KqkOiAlcyIKKworIzogb3NfbXN3aW4uYzoxOTE4Cittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAi5pyq55+lIgorCisjOiBvc19tc3dpbi5jOjE5NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgJyVzJyIKK21zZ3N0ciAi5YiX5Y2w5LitOiAnJXMnIgorCisjOiBvc19tc3dpbi5jOjMwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NDogSWxsZWdhbCBjaGFyc2V0IG5hbWUgXCIlc1wiIGluIGZvbnQgbmFtZSBcIiVzXCIiCittc2dzdHIgIkUyNDQ6IOWtl+WFg+mbhiBcIiVzXCIg54Sh5rOV5bCN5oeJ5a2X5Z6LXCIlc1wiIgorCisjOiBvc19tc3dpbi5jOjMwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0NTogSWxsZWdhbCBjaGFyICclYycgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NTog5LiN5q2j56K655qE5a2X5YWDICclYycg5Ye654++5Zyo5a2X5Z6L5ZCN56ixIFwiJXNcIiDlhaciCisKKyM6IG9zX3Jpc2Nvcy5jOjEyNTgKK21zZ2lkICJFMzY2OiBJbnZhbGlkICdvc2ZpbGV0eXBlJyBvcHRpb24gLSB1c2luZyBUZXh0IgorbXNnc3RyICJFMzY2OiDkuI3mraPnorrnmoQgJ2ZpbGV0eXBlJyDpgbjpoIUgLSDkvb/nlKjntJTmloflrZfmqKHlvI8iCisKKyM6IG9zX3VuaXguYzo4NzEKK21zZ2lkICJWaW06IERvdWJsZSBzaWduYWwsIGV4aXRpbmdcbiIKK21zZ3N0ciAiVmltOiDpm5nph41zaWduYWwsIOmboumWi+S4rVxuIgorCisjOiBvc191bml4LmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWwgJXNcbiIKK21zZ3N0ciAiVmltOiBDVmltOiDmlJTmiKrliLDkv6HomZ8oc2lnbmFsKSAlc1xuIgorCisjOiBvc191bml4LmM6ODgwCittc2dpZCAiVmltOiBDYXVnaHQgZGVhZGx5IHNpZ25hbFxuIgorbXNnc3RyICJWaW06IOaUlOaIquWIsOiHtOWRveeahOS/oeiZnyhkZWFkbHkgc2lnbmFsZSlcbiIKKworIzogb3NfdW5peC5jOjExNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3BlbmluZyB0aGUgWCBkaXNwbGF5IHRvb2sgJWxkIG1zZWMiCittc2dzdHIgIumWi+WVnyBYIFdpbmRvdyDogJfmmYIgJWxkIG1zZWMiCisKKyM6IG9zX3VuaXguYzoxMTcwCittc2dpZCAiIgorIlxuIgorIlZpbTogR290IFggZXJyb3JcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZpbTogWCDpjK/oqqRcbiIKKworIzogb3NfdW5peC5jOjEyNzYKK21zZ2lkICJUZXN0aW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICLmuKzoqaYgWCBXaW5kb3cg5aSx5pWXIgorCisjOiBvc191bml4LmM6MTQxNQorbXNnaWQgIk9wZW5pbmcgdGhlIFggZGlzcGxheSB0aW1lZCBvdXQiCittc2dzdHIgIumWi+WVnyBYIFdpbmRvdyDpgL7mmYIiCisKKyM6IG9zX3VuaXguYzozMTQ1IG9zX3VuaXguYzozODI1Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsICIKK21zZ3N0ciAiIgorIlxuIgorIuS4jeiDveWft+ihjCBzaGVsbCIKKworIzogb3NfdW5peC5jOjMxOTMKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGV4ZWN1dGUgc2hlbGwgc2hcbiIKK21zZ3N0ciAiIgorIlxuIgorIuS4jeiDveWft+ihjCBzaGVsbCBzaFxuIgorCisjOiBvc191bml4LmM6MzE5NyBvc191bml4LmM6MzgzMQorbXNnaWQgIiIKKyJcbiIKKyJzaGVsbCByZXR1cm5lZCAiCittc2dzdHIgIiIKKyJcbiIKKyJTaGVsbCDlt7Lov5Tlm54iCisKKyM6IG9zX3VuaXguYzozMzMyCittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBjcmVhdGUgcGlwZXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIuS4jeiDveW7uueriyBwaXBlIOeuoee3mlxuIgorCisjOiBvc191bml4LmM6MzM0NworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZm9ya1xuIgorbXNnc3RyICIiCisiXG4iCisi5LiN6IO9IGZvcmtcbiIKKworIzogb3NfdW5peC5jOjM4MzgKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKyJcbiIKKyLlkb3ku6Tlt7LntYLntZBcbiIKKworIzogb3NfdW5peC5jOjUzOTgKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICLplovllZ8gWCBXaW5kb3cg5aSx5pWXIgorCisjOiBvc192bXNfbW1zLmM6NTkKK21zZ2lkICJBdCBsaW5lIgorbXNnc3RyICLlnKjooYzomZ8gIgorCisjOiBvc193MzJleGUuYzoxNjkKK21zZ2lkICJDb3VsZCBub3QgbG9hZCB2aW0zMi5kbGwhIgorbXNnc3RyICLnhKHms5XovInlhaUgdmltMzIuZGxs77yBIgorCisjOiBvc193MzJleGUuYzoxNjkgb3NfdzMyZXhlLmM6MTc5Cittc2dpZCAiVklNIEVycm9yIgorbXNnc3RyICJWSU0g6Yyv6KqkIgorCisjOiBvc193MzJleGUuYzoxNzkKK21zZ2lkICJDb3VsZCBub3QgZml4IHVwIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHRoZSBETEwhIgorbXNnc3RyICLkuI3og73kv67mraPlh73lvI/mjIfmqJnliLAgRExMISIKKworIzogb3Nfd2luMTYuYzo1ODMgb3Nfd2luMzIuYzozMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInNoZWxsIHJldHVybmVkICVkIgorbXNnc3RyICJTaGVsbCDlgrPlm57lgLwgJWQiCisKKyM6IG9zX3dpbjMyLmM6MjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJWaW06IENhdWdodCAlcyBldmVudFxuIgorbXNnc3RyICJWaW06IOaUlOaIquWIsCAlcyBcbiIKKworIzogb3Nfd2luMzIuYzoyNTA3Cittc2dpZCAiY2xvc2UiCittc2dzdHIgIumXnOmWiSIKKworIzogb3Nfd2luMzIuYzoyNTA5Cittc2dpZCAibG9nb2ZmIgorbXNnc3RyICLnmbvlh7oiCisKKyM6IG9zX3dpbjMyLmM6MjUxMAorbXNnaWQgInNodXRkb3duIgorbXNnc3RyICLpl5zmqZ8iCisKKyM6IG9zX3dpbjMyLmM6MzAwMAorbXNnaWQgIkUzNzE6IENvbW1hbmQgbm90IGZvdW5kIgorbXNnc3RyICJFMzcxOiDmib7kuI3liLDlkb3ku6QiCisKKyM6IG9zX3dpbjMyLmM6MzAxMworbXNnaWQgIiIKKyJWSU1SVU4uRVhFIG5vdCBmb3VuZCBpbiB5b3VyICRQQVRILlxuIgorIkV4dGVybmFsIGNvbW1hbmRzIHdpbGwgbm90IHBhdXNlIGFmdGVyIGNvbXBsZXRpb24uXG4iCisiU2VlICA6aGVscCB3aW4zMi12aW1ydW4gIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIuWcqOS9oOeahCAkUEFUSCDkuK3mib7kuI3liLAgVklNUlVOLkVYRS5cbiIKKyLlpJbpg6jlkb3ku6Tln7fooYzlroznlaLlvozlsIfkuI3mnIPmmqvlgZwuXG4iCisi6YCy5LiA5q2l6Kqq5piO6KuL5Z+36KGMIDpoZWxwIHdpbjMyLXZpbXJ1biAiCisKKyM6IG9zX3dpbjMyLmM6MzAxNgorbXNnaWQgIlZpbSBXYXJuaW5nIgorbXNnc3RyICJWaW0g6K2m5ZGKIgorCisjOiBxdWlja2ZpeC5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzcyOiBUb28gbWFueSAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzI6IOagvOW8j+WMluWtl+S4suijoeacieWkquWkmiAlJSVjICIKKworIzogcXVpY2tmaXguYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MzogVW5leHBlY3RlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzM6IOagvOW8j+WMluWtl+S4suS4jeaHieipsuWHuuePviAlJSVjICIKKworIzogcXVpY2tmaXguYzozMjUKK21zZ2lkICJFMzc0OiBNaXNzaW5nIF0gaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NDog5qC85byP5YyW5a2X5Liy6KOh5bCR5LqGIF0iCisKKyM6IHF1aWNrZml4LmM6MzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzU6IFVuc3VwcG9ydGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NTog5qC85byP5YyW5a2X5Liy6KOh5pyJ5LiN5pSv5o+055qEICUlJWMgIgorCisjOiBxdWlja2ZpeC5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiCittc2dzdHIgIkUzNzY6IOagvOW8j+WMluWtl+S4sumWi+mgreijoeacieS4jeato+eiuueahCAlJSVjICIKKworIzogcXVpY2tmaXguYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3NzogSW52YWxpZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzc6IOagvOW8j+WMluWtl+S4suijoeacieS4jeato+eiuueahCAlJSVjICIKKworIzogcXVpY2tmaXguYzozOTEKK21zZ2lkICJFMzc4OiAnZXJyb3Jmb3JtYXQnIGNvbnRhaW5zIG5vIHBhdHRlcm4iCittc2dzdHIgIkUzNzg6ICdlcnJvcmZvcm1hdCcg5pyq6Kit5a6aIgorCisjOiBxdWlja2ZpeC5jOjQ5NworbXNnaWQgIkUzNzk6IE1pc3Npbmcgb3IgZW1wdHkgZGlyZWN0b3J5IG5hbWUiCittc2dzdHIgIkUzNzk6IOaJvuS4jeWIsOebrumMhOWQjeeoseaIluaYr+epuueahOebrumMhOWQjeeosSIKKworIzogcXVpY2tmaXguYzo5NzkKK21zZ2lkICJFNTUzOiBObyBtb3JlIGl0ZW1zIgorbXNnc3RyICJFNTUzOiDmspLmnInlhbblroPpoIXnm64iCisKKyM6IHF1aWNrZml4LmM6MTIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIoJWQgb2YgJWQpJXMlczogIgorbXNnc3RyICIoJWQgLyAlZCklcyVzOiAiCisKKyM6IHF1aWNrZml4LmM6MTIwMgorbXNnaWQgIiAobGluZSBkZWxldGVkKSIKK21zZ3N0ciAiICjooYzlt7LliKrpmaQpIgorCisjOiBxdWlja2ZpeC5jOjE0MTIKK21zZ2lkICJFMzgwOiBBdCBib3R0b20gb2YgcXVpY2tmaXggc3RhY2siCittc2dzdHIgIkUzODA6IFF1aWNrZml4IOWghueWiue1kOWwviIKKworIzogcXVpY2tmaXguYzoxNDIxCittc2dpZCAiRTM4MTogQXQgdG9wIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgxOiBRdWlja2ZpeCDloIbnlorpoILnq68iCisKKyM6IHF1aWNrZml4LmM6MTQzMworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBsaXN0ICVkIG9mICVkOyAlZCBlcnJvcnMiCittc2dzdHIgIumMr+iqpOWIl+ihqCAlZC8lZDsg5YWx5pyJICVkIOmghemMr+iqpCIKKworIzogcXVpY2tmaXguYzoxOTA0Cittc2dpZCAiRTM4MjogQ2Fubm90IHdyaXRlLCAnYnVmdHlwZScgb3B0aW9uIGlzIHNldCIKK21zZ3N0ciAiRTM4Mjog54Sh5rOV5a+r5YWl77yMJ2J1ZnR5cGUnIOmBuOmgheW3suioreWumiIKKworIzogcmVnZXhwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNjk6IGludmFsaWQgaXRlbSBpbiAlcyUlW10iCittc2dzdHIgIkUzNjk6IOS4jeato+eiuueahOmgheebru+8miAlcyUlW10iCisKKyM6IHJlZ2V4cC5jOjgyNgorbXNnaWQgIkUzMzk6IFBhdHRlcm4gdG9vIGxvbmciCittc2dzdHIgIkUzMzk6IOWQjeWtl+WkqumVtyIKKworIzogcmVnZXhwLmM6OTk1Cittc2dpZCAiRTUwOiBUb28gbWFueSBcXHooIgorbXNnc3RyICJFNTA6IOWkquWkmiBcXHooIgorCisjOiByZWdleHAuYzoxMDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MTogVG9vIG1hbnkgJXMoIgorbXNnc3RyICJFNTE6IOWkquWkmiAlcygiCisKKyM6IHJlZ2V4cC5jOjEwNjMKK21zZ2lkICJFNTI6IFVubWF0Y2hlZCBcXHooIgorbXNnc3RyICJFNTI6IOeEoeWwjeaHieeahCBcXHooIgorCisjOiByZWdleHAuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzogVW5tYXRjaGVkICVzJSUoIgorbXNnc3RyICJFNTM6IOeEoeWwjeaHieeahCAlcyUlKCIKKworIzogcmVnZXhwLmM6MTA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTQ6IFVubWF0Y2hlZCAlcygiCittc2dzdHIgIkU1NDog54Sh5bCN5oeJ55qEICVzKCIKKworIzogcmVnZXhwLmM6MTA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTU6IFVubWF0Y2hlZCAlcykiCittc2dzdHIgIkU1NTog54Sh5bCN5oeJ55qEICVzKSIKKworIzogcmVnZXhwLmM6MTIzNworIywgYy1mb3JtYXQKK21zZ2lkICJFNTY6ICVzKiBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTY6ICVzKiDpgYvnrpflhYPlj6/ku6XmmK/nqbrnmoQiCisKKyM6IHJlZ2V4cC5jOjEyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU3OiAlcysgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU2OiAlcysg6YGL566X5YWD5Y+v5Lul5piv56m655qEIgorCisjOiByZWdleHAuYzoxMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1OTogaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXNAIgorbXNnc3RyICJFNTk6IOW+jOmdouacieS4jeato+eiuueahOWtl+WFgzogJXNAIgorCisjOiByZWdleHAuYzoxMzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1ODogJXN7IG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1ODogJXN7IOmBi+eul+WFg+WPr+S7peaYr+epuueahCIKKworIzogcmVnZXhwLmM6MTMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA6IFRvbyBtYW55IGNvbXBsZXggJXN7Li4ufXMiCittc2dzdHIgIkU2MDog5aSq5aSa6KSH6Zuc55qEICVzey4uLn1zIgorCisjOiByZWdleHAuYzoxMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTogTmVzdGVkICVzKiIKK21zZ3N0ciAiRTYxOiDlt6Lni4AgJXMqIgorCisjOiByZWdleHAuYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MjogTmVzdGVkICVzJWMiCittc2dzdHIgIkU2Mjog5bei54uAICVzJWMiCisKKyM6IHJlZ2V4cC5jOjE0NjYKK21zZ2lkICJFNjM6IGludmFsaWQgdXNlIG9mIFxcXyIKK21zZ3N0ciAiRTYzOiDkuI3mraPnorrnmoTkvb/nlKggXFxfIgorCisjOiByZWdleHAuYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDogJXMlYyDmspLmnInmjqXmnbHopb8iCisKKyM6IHJlZ2V4cC5jOjE1NjcKK21zZ2lkICJFNjU6IElsbGVnYWwgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIkU2NTog5LiN5q2j56K655qE5Y+N5ZCR5Y+D6ICDIgorCisjOiByZWdleHAuYzoxNTgwCittc2dpZCAiRTY2OiBcXHooIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU2NjogXFx6KCDkuI3og73lnKjmraTlh7rnj74iCisKKyM6IHJlZ2V4cC5jOjE1OTkKK21zZ2lkICJFNjc6IFxcejEgZXQgYWwuIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU2NzogXFx6MSBldCBhbC4g5LiN6IO95Zyo5q2k5Ye654++IgorCisjOiByZWdleHAuYzoxNjEwCittc2dpZCAiRTY4OiBJbnZhbGlkIGNoYXJhY3RlciBhZnRlciBcXHoiCittc2dzdHIgIkU2ODog5b6M6Z2i5pyJ5LiN5q2j56K655qE5a2X5YWDOiBcXHoiCisKKyM6IHJlZ2V4cC5jOjE2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTY5OiBNaXNzaW5nIF0gYWZ0ZXIgJXMlJVsiCittc2dzdHIgIkU2OTogJXMlJVsg5b6M57y65bCRIF0iCisKKyM6IHJlZ2V4cC5jOjE2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTcwOiBFbXB0eSAlcyUlW10iCittc2dzdHIgIkU3MDog56m655qEICVzJSVbXSIKKworIzogcmVnZXhwLmM6MTczNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNzE6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzJSUiCittc2dzdHIgIkU3MTog5b6M6Z2i5pyJ5LiN5q2j56K655qE5a2X5YWDOiAlcyUlIgorCisjOiByZWdleHAuYzoyNTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTQ6IFN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICJFNTU0OiDoqp7ms5XpjK/oqqQ6ICVzey4uLn0iCisKKyM6IHJlZ2V4cC5jOjI3NzcKK21zZ2lkICJFMzYxOiBDcmFzaCBpbnRlcmNlcHRlZDsgcmVnZXhwIHRvbyBjb21wbGV4PyIKK21zZ3N0ciAiRTM2MTog54Sh5rOV5Z+36KGMOyByZWd1bGFyIGV4cHJlc3Npb24g5aSq6KSH6ZucPyIKKworIzogcmVnZXhwLmM6MjkxMgorbXNnaWQgIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIKK21zZ3N0ciAiRTM2MzogcmVndWxhciBleHByZXNzaW9uIOmAoOaIkOWghueWiueUqOWFieeahOmMr+iqpCIKKworIzogcmVnZXhwLmM6MzE0OAorbXNnaWQgIkV4dGVybmFsIHN1Ym1hdGNoZXM6XG4iCittc2dzdHIgIuWklumDqOespuWQiDpcbiIKKworIzogc2NyZWVuLmM6MjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIrLS0lM2xkIGxpbmVzIGZvbGRlZCAiCittc2dzdHIgIistLeW3siBmb2xkICUzbGQg6KGMIgorCisjOiBzY3JlZW4uYzo3Nzg1Cittc2dpZCAiIFZSRVBMQUNFIgorbXNnc3RyICIgVi3lj5bku6MiCisKKyM6IHNjcmVlbi5jOjc3ODkKK21zZ2lkICIgUkVQTEFDRSIKK21zZ3N0ciAiIOWPluS7oyIKKworIzogc2NyZWVuLmM6Nzc5NAorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIg5Y+N6L2JIgorCisjOiBzY3JlZW4uYzo3Nzk2Cittc2dpZCAiIElOU0VSVCIKK21zZ3N0ciAiIOaPkuWFpSIKKworIzogc2NyZWVuLmM6Nzc5OQorbXNnaWQgIiAoaW5zZXJ0KSIKK21zZ3N0ciAiICjmj5LlhaUpIgorCisjOiBzY3JlZW4uYzo3ODAxCittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiICjlj5bku6MpIgorCisjOiBzY3JlZW4uYzo3ODAzCittc2dpZCAiICh2cmVwbGFjZSkiCittc2dzdHIgIiAodi3lj5bku6MpIgorCisjOiBzY3JlZW4uYzo3ODA2Cittc2dpZCAiIEhlYnJldyIKK21zZ3N0ciAiIEhlYnJldyIKKworIzogc2NyZWVuLmM6NzgxNAorbXNnaWQgIiAobGFuZykiCittc2dzdHIgIiAo6Kqe6KiAKSIKKworIzogc2NyZWVuLmM6NzgxNworbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKOiyvOS4iikiCisKKyM6IHNjcmVlbi5jOjc4MjMKK21zZ2lkICIgU0VMRUNUIgorbXNnc3RyICIg6YG45Y+WIgorCisjOiBzY3JlZW4uYzo3ODI1Cittc2dpZCAiIFZJU1VBTCIKK21zZ3N0ciAiIOmBuOWPliIKKworIzogc2NyZWVuLmM6NzgyNworbXNnaWQgIiBCTE9DSyIKK21zZ3N0ciAiIOWNgOWhiiIKKworIzogc2NyZWVuLmM6NzgyOQorbXNnaWQgIiBMSU5FIgorbXNnc3RyICIg6KGM6YG45Y+WIgorCisjOiBzY3JlZW4uYzo3ODQyIHNjcmVlbi5jOjc5MDIKK21zZ2lkICJyZWNvcmRpbmciCittc2dzdHIgIuiomOmMhOS4rSIKKworIzogc2VhcmNoLmM6MzYKK21zZ2lkICJzZWFyY2ggaGl0IFRPUCwgY29udGludWluZyBhdCBCT1RUT00iCittc2dzdHIgIuW3suaQnOWwi+WIsOaqlOahiOmWi+mgre+8m+WGjeW+nue1kOWwvue5vOe6jOaQnOWwiyIKKworIzogc2VhcmNoLmM6MzcKK21zZ2lkICJzZWFyY2ggaGl0IEJPVFRPTSwgY29udGludWluZyBhdCBUT1AiCittc2dzdHIgIuW3suaQnOWwi+WIsOaqlOahiOe1kOWwvu+8m+WGjeW+numWi+mgree5vOe6jOaQnOWwiyIKKworIzogc2VhcmNoLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IOmMr+iqpOeahOaQnOWwi+Wtl+S4sjogJXMiCisKKyM6IHNlYXJjaC5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzg0OiBzZWFyY2ggaGl0IFRPUCB3aXRob3V0IG1hdGNoIGZvcjogJXMiCittc2dzdHIgIkUzODQ6IOW3suaQnOWwi+WIsOaqlOahiOmWi+mgreS7jeaJvuS4jeWIsCAlcyIKKworIzogc2VhcmNoLmM6Nzg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODU6IHNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NTog5bey5pCc5bCL5Yiw5qqU5qGI57WQ5bC+5LuN5om+5LiN5YiwICVzIgorCisjOiBzZWFyY2guYzoxMTU3Cittc2dpZCAiRTM4NjogRXhwZWN0ZWQgJz8nIG9yICcvJyAgYWZ0ZXIgJzsnIgorbXNnc3RyICJFMzg2OiDlnKggJzsnIOW+jOmdouaHieipsuaciSAnPycg5oiWICcvJyIKKworIzogc2VhcmNoLmM6MzU2NworbXNnaWQgIiAoaW5jbHVkZXMgcHJldmlvdXNseSBsaXN0ZWQgbWF0Y2gpIgorbXNnc3RyICIgKOWMheaLrOWJjeasoeWIl+WHuuespuWQiOmghSkiCisKKyMuIGN1cnNvciBhdCBzdGF0dXMgbGluZQorIzogc2VhcmNoLmM6MzU4NworbXNnaWQgIi0tLSBJbmNsdWRlZCBmaWxlcyAiCittc2dzdHIgIi0tLSDlvJXlhaXmqpTmoYggIgorCisjOiBzZWFyY2guYzozNTg5Cittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAi5om+5LiN5YiwICIKKworIzogc2VhcmNoLmM6MzU5MAorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgIi0tLVxuIgorCisjOiBzZWFyY2guYzozNjI5Cittc2dpZCAiICAoQWxyZWFkeSBsaXN0ZWQpIgorbXNnc3RyICIgICjlt7LliJflh7opIgorCisjOiBzZWFyY2guYzozNjMxCittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiAg5om+5LiN5YiwIgorCisjOiBzZWFyY2guYzozNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGluY2x1ZGVkIGZpbGU6ICVzIgorbXNnc3RyICLmkJzlsIvlvJXlhaXmqpTmoYg6ICVzIgorCisjOiBzZWFyY2guYzozOTAxCittc2dpZCAiRTM4NzogTWF0Y2ggaXMgb24gY3VycmVudCBsaW5lIgorbXNnc3RyICJFMzg3OiDnm67liY3miYDlnKjooYzkuK3mnInkuIDljLnphY0iCisKKyM6IHNlYXJjaC5jOjQwNDEKK21zZ2lkICJBbGwgaW5jbHVkZWQgZmlsZXMgd2VyZSBmb3VuZCIKK21zZ3N0ciAi5omA5pyJ5byV5YWl5qqU5qGI6YO95bey5om+5YiwIgorCisjOiBzZWFyY2guYzo0MDQzCittc2dpZCAiTm8gaW5jbHVkZWQgZmlsZXMiCittc2dzdHIgIuaykuacieW8leWFpeaqlOahiCIKKworIzogc2VhcmNoLmM6NDA1OQorbXNnaWQgIkUzODg6IENvdWxkbid0IGZpbmQgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRTM4ODog5om+5LiN5Yiw5a6a576pIgorCisjOiBzZWFyY2guYzo0MDYxCittc2dpZCAiRTM4OTogQ291bGRuJ3QgZmluZCBwYXR0ZXJuIgorbXNnc3RyICJFMzg5OiDmib7kuI3liLAgcGF0dGVybiIKKworIzogc3ludGF4LmM6MzAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkwOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTM5MDog5Y+D5pW45LiN5q2j56K6OiAlcyIKKworIzogc3ludGF4LmM6MzE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkxOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MTog54Sh5q2kIHN5bnRheCBjbHVzdGVyOiBcIiVzXCIiCisKKyM6IHN5bnRheC5jOjMzNTkKK21zZ2lkICJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiCittc2dzdHIgIumAmeWAi+e3qeihneWNgOaykuacieWumue+qeS7u+S9leiqnuazlSIKKworIzogc3ludGF4LmM6MzM2NworbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAiQ+iqnuiogOW8j+iou+ino+WQjOatpeWMluS4rSIKKworIzogc3ludGF4LmM6MzM3NQorbXNnaWQgIm5vIHN5bmNpbmciCittc2dzdHIgIuaykuacieWQjOatpeWMliIKKworIzogc3ludGF4LmM6MzM3OAorbXNnaWQgInN5bmNpbmcgc3RhcnRzICIKK21zZ3N0ciAi5ZCM5q2l5YyW6ZaL5aeLIgorCisjOiBzeW50YXguYzozMzgwIHN5bnRheC5jOjM0NTUKK21zZ2lkICIgbGluZXMgYmVmb3JlIHRvcCBsaW5lIgorbXNnc3RyICLooYzomZ/otoXlh7rnr4TlnI0iCisKKyM6IHN5bnRheC5jOjMzODUKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDoqp7ms5XlkIzmraXnianku7YgKFN5bnRheCBzeW5jIGl0ZW1zKSAtLS0iCisKKyM6IHN5bnRheC5jOjMzOTAKK21zZ2lkICIiCisiXG4iCisic3luY2luZyBvbiBpdGVtcyIKK21zZ3N0ciAiIgorIlxuIgorIuWQjOatpeWMluS4rToiCisKKyM6IHN5bnRheC5jOjMzOTYKK21zZ2lkICIiCisiXG4iCisiLS0tIFN5bnRheCBpdGVtcyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0g6Kqe5rOV6aCF55uuIC0tLSIKKworIzogc3ludGF4LmM6MzQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5Mjog54Sh5q2kIHN5bnRheCBjbHVzdGVyOiBcIiVzXCIiCisKKyM6IHN5bnRheC5jOjM0NDUKK21zZ2lkICJtaW5pbWFsICIKK21zZ3N0ciAi5pyA5bCPIgorCisjOiBzeW50YXguYzozNDUyCittc2dpZCAibWF4aW1hbCAiCittc2dzdHIgIuacgOWkpyIKKworIzogc3ludGF4LmM6MzQ2NAorbXNnaWQgIjsgbWF0Y2ggIgorbXNnc3RyICI7IOespuWQiCAiCisKKyM6IHN5bnRheC5jOjM0NjYKK21zZ2lkICIgbGluZSBicmVha3MiCittc2dzdHIgIuaWt+ihjCIKKworIzogc3ludGF4LmM6NDEwMAorbXNnaWQgIkUzOTM6IGdyb3VwW3RdaGVyZSBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5Mzog5L2/55So5LqG5LiN5q2j56K655qE5Y+D5pW4IgorCisjOiBzeW50YXguYzo0MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTQ6IERpZG4ndCBmaW5kIHJlZ2lvbiBpdGVtIGZvciAlcyIKK21zZ3N0ciAiRTM5NDog5om+5LiN5YiwICVzIOeahCByZWdpb24gaXRlbSIKKworIzogc3ludGF4LmM6NDE1MgorbXNnaWQgIkUzOTU6IGNvbnRhaW5zIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzk1OiDkvb/nlKjkuobkuI3mraPnorrnmoTlj4PmlbgiCisKKyM6IHN5bnRheC5jOjQxNjMKK21zZ2lkICJFMzk2OiBjb250YWluZWRpbiBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5Njog5L2/55So5LqG5LiN5q2j56K655qE5Y+D5pW4IgorCisjOiBzeW50YXguYzo0MjQxCittc2dpZCAiRTM5NzogRmlsZW5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkUzOTc6IOmcgOimgeaqlOahiOWQjeeosSIKKworIzogc3ludGF4LmM6NDU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzk4OiBNaXNzaW5nICc9JzogJXMiCittc2dzdHIgIkUzOTg6IOe8uuWwkSBcIj1cIjogJXMiCisKKyM6IHN5bnRheC5jOjQ3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5OTogTm90IGVub3VnaCBhcmd1bWVudHM6IHN5bnRheCByZWdpb24gJXMiCittc2dzdHIgIkUzOTk6IHN5bnRheCByZWdpb24gJXMg55qE5byV5pW45aSq5bCRIgorCisjOiBzeW50YXguYzo1MDY4Cittc2dpZCAiRTQwMDogTm8gY2x1c3RlciBzcGVjaWZpZWQiCittc2dzdHIgIkU0MDA6IOaykuacieaMh+WumueahOWxrOaApyIKKworIzogc3ludGF4LmM6NTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDAxOiBQYXR0ZXJuIGRlbGltaXRlciBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJFNDAxOiDmib7kuI3liLDliIbpmpTnrKbomZ86ICVzIgorCisjOiBzeW50YXguYzo1MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDI6IEdhcmJhZ2UgYWZ0ZXIgcGF0dGVybjogJXMiCittc2dzdHIgIkU0MDI6ICclcycg5b6M6Z2i55qE5p2x6KW/54Sh5rOV6L6o6K2YIgorCisjOiBzeW50YXguYzo1MjcwCittc2dpZCAiRTQwMzogc3ludGF4IHN5bmM6IGxpbmUgY29udGludWF0aW9ucyBwYXR0ZXJuIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTQwMzog6Kqe5rOV5ZCM5q2lOiDpgKPmjqXooYznrKbomZ/ooqvmjIflrprkuoblhanmrKEiCisKKyM6IHN5bnRheC5jOjUzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNDogSWxsZWdhbCBhcmd1bWVudHM6ICVzIgorbXNnc3RyICJFNDA0OiDlj4PmlbjkuI3mraPnoro6ICVzIgorCisjOiBzeW50YXguYzo1Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDU6IE1pc3NpbmcgZXF1YWwgc2lnbjogJXMiCittc2dzdHIgIkU0MDU6IOe8uuWwkeebuOetieespuiZnzogJXMiCisKKyM6IHN5bnRheC5jOjUzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNjogRW1wdHkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDA2OiDnqbrnmb3lj4Pmlbg6ICVzIgorCisjOiBzeW50YXguYzo1NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDc6ICVzIG5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU0MDc6ICVzIOS4jeiDveWcqOatpOWHuuePviIKKworIzogc3ludGF4LmM6NTQxNworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA4OiAlcyBtdXN0IGJlIGZpcnN0IGluIGNvbnRhaW5zIGxpc3QiCittc2dzdHIgIkU0MDg6ICVzIOW/hemgiOaYr+WIl+ihqOijoeeahOesrOS4gOWAiyIKKworIzogc3ludGF4LmM6NTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA5OiBVbmtub3duIGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFNDA5OiDkuI3mraPnorrnmoTnvqTntYTlkI3nqLE6ICVzIgorCisjOiBzeW50YXguYzo1NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTA6IEludmFsaWQgOnN5bnRheCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiRTQxMDog5LiN5q2j56K655qEIDpzeW50YXgg5a2Q5ZG95LukOiAlcyIKKworIzogc3ludGF4LmM6NjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDExOiBoaWdobGlnaHQgZ3JvdXAgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQxMTog5om+5LiN5YiwIGhpZ2hsaWdodCBncm91cDogJXMiCisKKyM6IHN5bnRheC5jOjYxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMjogTm90IGVub3VnaCBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTI6IOWPg+aVuOWkquWwkTogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEzOiBUb28gbWFueSBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTM6IOWPg+aVuOmBjuWkmjogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKKworIzogc3ludGF4LmM6NjE1MAorbXNnaWQgIkU0MTQ6IGdyb3VwIGhhcyBzZXR0aW5ncywgaGlnaGxpZ2h0IGxpbmsgaWdub3JlZCIKK21zZ3N0ciAiRTQxNDog5bey6Kit5a6a576k57WELCDlv73nlaUgaGlnaGxpZ2h0IGxpbmsiCisKKyM6IHN5bnRheC5jOjYyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNTogdW5leHBlY3RlZCBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNTog5LiN6Kmy5pyJ55qE562J6JmfOiAlcyIKKworIzogc3ludGF4LmM6NjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE2OiBtaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE2OiDnvLrlsJHnm7jnrYnnrKbomZ86ICVzIgorCisjOiBzeW50YXguYzo2MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTc6IG1pc3NpbmcgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDE3OiDnvLrlsJHlj4Pmlbg6ICVzIgorCisjOiBzeW50YXguYzo2Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTg6IElsbGVnYWwgdmFsdWU6ICVzIgorbXNnc3RyICJFNDE4OiDkuI3lkIjms5XnmoTlgLw6ICVzIgorCisjOiBzeW50YXguYzo2NDkzCittc2dpZCAiRTQxOTogRkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQxOTog6Yyv6Kqk55qE5YmN5pmv6aGP6ImyIgorCisjOiBzeW50YXguYzo2NTA0Cittc2dpZCAiRTQyMDogQkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQyMDog6Yyv6Kqk55qE6IOM5pmv6aGP6ImyIgorCisjOiBzeW50YXguYzo2NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MjE6IENvbG9yIG5hbWUgb3IgbnVtYmVyIG5vdCByZWNvZ25pemVkOiAlcyIKK21zZ3N0ciAiRTQyMTog6Yyv6Kqk55qE6aGP6Imy5ZCN56ix5oiW5pW45YC8OiAlcyIKKworIzogc3ludGF4LmM6Njc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIyOiB0ZXJtaW5hbCBjb2RlIHRvbyBsb25nOiAlcyIKK21zZ3N0ciAiRTQyMjog57WC56uv5qmf56K85aSq6ZW3OiAlcyIKKworIzogc3ludGF4LmM6NjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzog5Y+D5pW45LiN5q2j56K6OiAlcyIKKworIzogc3ludGF4LmM6NzM0NworbXNnaWQgIkU0MjQ6IFRvbyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyBpbiB1c2UiCittc2dzdHIgIkU0MjQ6IOS9v+eUqOS6humBjuWkmuebuOeVsOeahOmrmOS6ruW6puWxrOaApyIKKworIzogdGFnLmM6OTAKK21zZ2lkICJFNTU1OiBhdCBib3R0b20gb2YgdGFnIHN0YWNrIgorbXNnc3RyICJFNTU1OiDmqJnnsaQodGFnKeWghueWiue1kOWwviIKKworIzogdGFnLmM6OTEKK21zZ2lkICJFNTU2OiBhdCB0b3Agb2YgdGFnIHN0YWNrIgorbXNnc3RyICJFNTU2OiDmqJnnsaQodGFnKeWghueWiumWi+mgrSIKKworIzogdGFnLmM6MzkyCittc2dpZCAiRTQyNTogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0MjU6IOW3sue2k+WcqOacgOWJjemdoueahOaomeexpCh0YWcp5LqGIgorCisjOiB0YWcuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQyNjogdGFnIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MjY6IOaJvuS4jeWIsOaomeexpCh0YWcpOiAlcyIKKworIzogdGFnLmM6NTQ1Cittc2dpZCAiICAjIHByaSBraW5kIHRhZyIKK21zZ3N0ciAiICAjIHByaSBraW5kIHRhZyIKKworIzogdGFnLmM6NTQ4Cittc2dpZCAiZmlsZVxuIgorbXNnc3RyICLmqpTmoYhcbiIKKworIy4KKyMuICogQXNrIHRvIHNlbGVjdCBhIHRhZyBmcm9tIHRoZSBsaXN0LgorIy4gKiBXaGVuIHVzaW5nICI6c2lsZW50IiBhc3N1bWUgdGhhdCA8Q1I+IHdhcyBlbnRlcmVkLgorIy4KKyM6IHRhZy5jOjcwNgorbXNnaWQgIkVudGVyIG5yIG9mIGNob2ljZSAoPENSPiB0byBhYm9ydCk6ICIKK21zZ3N0ciAi6Ly45YWlIG5yIOaIlumBuOaThyAoPENSPiDpm6LplospOiAiCisKKyM6IHRhZy5jOjc0NgorbXNnaWQgIkU0Mjc6IFRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNzog5Y+q5pyJ5q2k6aCF56ym5ZCIIgorCisjOiB0YWcuYzo3NDgKK21zZ2lkICJFNDI4OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI4OiDlt7HntpPlnKjmnIDlvozkuIDlgIvnrKblkIjnmoQgdGFnIOS6hiIKKworIzogdGFnLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLmqpTmoYggXCIlc1wiIOS4jeWtmOWcqCIKKworIy4gR2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgdGFncworIzogdGFnLmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAlZCBvZiAlZCVzIgorbXNnc3RyICLmib7liLAgdGFnOiAlZC8lZCVzIgorCisjOiB0YWcuYzo3ODMKK21zZ2lkICIgb3IgbW9yZSIKK21zZ3N0ciAiIOaIluabtOWkmiIKKworIzogdGFnLmM6Nzg1Cittc2dpZCAiICBVc2luZyB0YWcgd2l0aCBkaWZmZXJlbnQgY2FzZSEiCittc2dzdHIgIiAg5Lul5LiN5ZCM5aSn5bCP5a+r5L6G5L2/55SoIHRhZyEiCisKKyM6IHRhZy5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTQyOTog5qqU5qGIIFwiJXNcIiDkuI3lrZjlnKgiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogdGFnLmM6ODk3Cittc2dpZCAiIgorIlxuIgorIiAgIyBUTyB0YWcgICAgICAgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCIKK21zZ3N0ciAiIgorIlxuIgorIiAgIyDliLAgdGFnICAgICAgICAg5b6eICAg6KGMICAgIOWcqCDmqpTmoYgv5paH5a2XIgorCisjOiB0YWcuYzoxMTQ0Cittc2dpZCAiTGluZWFyIHRhZyBzZWFyY2giCittc2dzdHIgIue3muaAp+aQnOWwi+aomeexpCAoVGFncykiCisKKyM6IHRhZy5jOjExNDYKK21zZ2lkICJCaW5hcnkgdGFnIHNlYXJjaCIKK21zZ3N0ciAi5LqM5YiG5pCc5bCLKEJpbmFyeSBzZWFyY2gpIOaomeexpChUYWdzKSIKKworIzogdGFnLmM6MTE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgdGFncyBmaWxlICVzIgorbXNnc3RyICLmkJzlsIsgdGFnIOaqlOahiCBcIiVzXCIiCisKKyM6IHRhZy5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iCittc2dzdHIgIkU0MzA6IFRhZyDmqpTmoYjot6/lvpHooqvmiKrmlrfngrogJXNcbiIKKworIzogdGFnLmM6MTg1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQzMTogVGFnIOaqlCBcIiVzXCIg5qC85byP6Yyv6KqkIgorCisjOiB0YWcuYzoxODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZm9yZSBieXRlICVsZCIKK21zZ3N0ciAi5ZyoICVsZCDkvY3lhYPkuYvliY0iCisKKyM6IHRhZy5jOjE4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzMjogVGFncyBmaWxlIG5vdCBzb3J0ZWQ6ICVzIgorbXNnc3RyICJFNDMyOiBUYWcg5qqU5qGI5pyq5o6S5bqPOiAlcyIKKworIy4gbmV2ZXIgb3BlbmVkIGFueSB0YWdzIGZpbGUKKyM6IHRhZy5jOjE5MjIKK21zZ2lkICJFNDMzOiBObyB0YWdzIGZpbGUiCittc2dzdHIgIkU0MzM6IOaykuaciSB0YWcg5qqUIgorCisjOiB0YWcuYzoyNjAwCittc2dpZCAiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIKK21zZ3N0ciAiRTQzNDog5om+5LiN5YiwIHRhZyIKKworIzogdGFnLmM6MjYxMQorbXNnaWQgIkU0MzU6IENvdWxkbid0IGZpbmQgdGFnLCBqdXN0IGd1ZXNzaW5nISIKK21zZ3N0ciAiRTQzNTog5om+5LiN5YiwIHRhZywg55So54yc55qEISIKKworIzogdGVybS5jOjE3NDUKK21zZ2lkICInIG5vdCBrbm93bi4gQXZhaWxhYmxlIGJ1aWx0aW4gdGVybWluYWxzIGFyZToiCittc2dzdHIgIicg54Sh5rOV6LyJ5YWl44CC5Y+v55So55qE5YWn5bu657WC56uv5qmf5b2i5byP5pyJOiIKKworIzogdGVybS5jOjE3NjkKK21zZ2lkICJkZWZhdWx0aW5nIHRvICciCittc2dzdHIgIumgkOiorTogJyIKKworIzogdGVybS5jOjIxMjcKK21zZ2lkICJFNTU3OiBDYW5ub3Qgb3BlbiB0ZXJtY2FwIGZpbGUiCittc2dzdHIgIkU1NTc6IOeEoeazlemWi+WVnyB0ZXJtY2FwIOaqlOahiCIKKworIzogdGVybS5jOjIxMzEKK21zZ2lkICJFNTU4OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWluZm8iCittc2dzdHIgIkU1NTg6IHRlcm1pbmZvIOS4reaykuaciee1guerr+apn+izh+aWmemghSIKKworIzogdGVybS5jOjIxMzMKK21zZ2lkICJFNTU5OiBUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWNhcCIKK21zZ3N0ciAiRTU1OTogdGVybWNhcCDkuK3mspLmnInntYLnq6/mqZ/os4fmlpnpoIUiCisKKyM6IHRlcm0uYzoyMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzY6IE5vIFwiJXNcIiBlbnRyeSBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNDM2OiB0ZXJtY2FwIOaykuaciSBcIiVzXCIgZW50cnkiCisKKyM6IHRlcm0uYzoyNzY2Cittc2dpZCAiRTQzNzogdGVybWluYWwgY2FwYWJpbGl0eSBcImNtXCIgcmVxdWlyZWQiCittc2dzdHIgIkU0Mzc6IOe1guerr+apn+mcgOimgSBcImNtXCIg55qE6IO95YqbIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRlcm0uYzo0OTI3Cittc2dpZCAiIgorIlxuIgorIi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSDntYLnq6/mqZ/mjInpjbUgLS0tIgorCisjOiB1aS5jOjI1MgorbXNnaWQgIm5ldyBzaGVsbCBzdGFydGVkXG4iCittc2dzdHIgIui1t+WLleaWsCBzaGVsbFxuIgorCisjOiB1aS5jOjE3ODQKK21zZ2lkICJWaW06IEVycm9yIHJlYWRpbmcgaW5wdXQsIGV4aXRpbmcuLi5cbiIKK21zZ3N0ciAiVmltOiDoroDlj5bovLjlhaXpjK/oqqTvvIzpm6LplovkuK0uLi5cbiIKKworIy4gbXVzdCBkaXNwbGF5IHRoZSBwcm9tcHQKKyM6IHVuZG8uYzozOTQKK21zZ2lkICJObyB1bmRvIHBvc3NpYmxlOyBjb250aW51ZSBhbnl3YXkiCittc2dzdHIgIueEoeazlemChOWOn++8m+iri+e5vOe6jOWKquWKmyIKKworIzogdW5kby5jOjU0OQorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IOihjOiZn+mMr+iqpCIKKworIzogdW5kby5jOjcxOAorbXNnaWQgIjEgY2hhbmdlIgorbXNnc3RyICLkuIDpoIXmlLnorooiCisKKyM6IHVuZG8uYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGNoYW5nZXMiCittc2dzdHIgIiVsZCDpoIXmlLnorooiCisKKyM6IHVuZG8uYzo3NjQKK21zZ2lkICJFNDM5OiB1bmRvIGxpc3QgY29ycnVwdCIKK21zZ3N0ciAiRTQzOTog5b6p5Y6f5YiX6KGo5pCN5aOeIgorCisjOiB1bmRvLmM6Nzk2Cittc2dpZCAiRTQ0MDogdW5kbyBsaW5lIG1pc3NpbmciCittc2dzdHIgIkU0NDA6IOaJvuS4jeWIsOimgSB1bmRvIOeahOihjCIKKworIy4gT25seSBNUyBWQyA0LjEgYW5kIGVhcmxpZXIgY2FuIGRvIFdpbjMycworIzogdmVyc2lvbi5jOjY4MgorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYvMzIgQml0IOWcluWei+eVjOmdoueJiOacrCIKKworIzogdmVyc2lvbi5jOjY4NAorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIGJpdCBHVUkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgQml0IOWcluWei+eVjOmdoueJiOacrCIKKworIzogdmVyc2lvbi5jOjY4NworbXNnaWQgIiBpbiBXaW4zMnMgbW9kZSIKK21zZ3N0ciAiV2luMzJzIOaooeW8jyIKKworIzogdmVyc2lvbi5jOjY4OQorbXNnaWQgIiB3aXRoIE9MRSBzdXBwb3J0IgorbXNnc3RyICLmlK/mj7QgT0xFIgorCisjOiB2ZXJzaW9uLmM6NjkyCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IGNvbnNvbGUgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgQml0IGNvbnNvbGUg54mI5pysIgorCisjOiB2ZXJzaW9uLmM6Njk2Cittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMTYgYml0IHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIEJpdCBjb25zb2xlIOeJiOacrCIKKworIzogdmVyc2lvbi5jOjcwMAorbXNnaWQgIiIKKyJcbiIKKyIzMiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIzMiBCaXQgTVMtRE9TIOeJiOacrCIKKworIzogdmVyc2lvbi5jOjcwMgorbXNnaWQgIiIKKyJcbiIKKyIxNiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIxNiBCaXQgTVMtRE9TIOeJiOacrCIKKworIzogdmVyc2lvbi5jOjcwOAorbXNnaWQgIiIKKyJcbiIKKyJNYWNPUyBYICh1bml4KSB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkg54mI5pysIgorCisjOiB2ZXJzaW9uLmM6NzEwCittc2dpZCAiIgorIlxuIgorIk1hY09TIFggdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFgg54mI5pysIgorCisjOiB2ZXJzaW9uLmM6NzEzCittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyDniYjmnKwiCisKKyM6IHZlcnNpb24uYzo3MTgKK21zZ2lkICIiCisiXG4iCisiUklTQyBPUyB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiUklTQyBPUyDniYjmnKwiCisKKyM6IHZlcnNpb24uYzo3MjgKK21zZ2lkICIiCisiXG4iCisiSW5jbHVkZWQgcGF0Y2hlczogIgorbXNnc3RyICIiCisiXG4iCisi5byV5YWl5L+u5q2jOiAiCisKKyM6IHZlcnNpb24uYzo3NTQgdmVyc2lvbi5jOjEwOTcKK21zZ2lkICJNb2RpZmllZCBieSAiCittc2dzdHIgIuS/ruaUueiAheeCuiIKKworIzogdmVyc2lvbi5jOjc2MQorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyLnt6jora8iCisKKyM6IHZlcnNpb24uYzo3NjQKK21zZ2lkICJieSAiCittc2dzdHIgIuiAhToiCisKKyM6IHZlcnNpb24uYzo3NzYKK21zZ2lkICIiCisiXG4iCisiSHVnZSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIui2heW8t+eJiOacrCAiCisKKyM6IHZlcnNpb24uYzo3NzkKK21zZ2lkICIiCisiXG4iCisiQmlnIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisi5aSn5Z6L54mI5pysICIKKworIzogdmVyc2lvbi5jOjc4MgorbXNnaWQgIiIKKyJcbiIKKyJOb3JtYWwgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyLkuIDoiKzniYjmnKwgIgorCisjOiB2ZXJzaW9uLmM6Nzg1Cittc2dpZCAiIgorIlxuIgorIlNtYWxsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisi57Ch5piT54mI5pysICIKKworIzogdmVyc2lvbi5jOjc4NworbXNnaWQgIiIKKyJcbiIKKyJUaW55IHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisi57K+57Ch54mI5pysICIKKworIzogdmVyc2lvbi5jOjc5MworbXNnaWQgIndpdGhvdXQgR1VJLiIKK21zZ3N0ciAi5LiN5L2/55So5ZyW5Z6L55WM6Z2i44CCIgorCisjOiB2ZXJzaW9uLmM6Nzk4Cittc2dpZCAid2l0aCBHVEsyLUdOT01FIEdVSS4iCittc2dzdHIgIuS9v+eUqCBHVEsyLUdOT01FIOWcluWei+eVjOmdouOAgiIKKworIzogdmVyc2lvbi5jOjgwMAorbXNnaWQgIndpdGggR1RLLUdOT01FIEdVSS4iCittc2dzdHIgIuS9v+eUqCBHVEstR05PTUUg5ZyW5Z6L55WM6Z2i44CCIgorCisjOiB2ZXJzaW9uLmM6ODA0Cittc2dpZCAid2l0aCBHVEsyIEdVSS4iCittc2dzdHIgIuS9v+eUqCBHVEsyIOWcluWei+eVjOmdouOAgiIKKworIzogdmVyc2lvbi5jOjgwNgorbXNnaWQgIndpdGggR1RLIEdVSS4iCittc2dzdHIgIuS9v+eUqCBHVEsg5ZyW5Z6L55WM6Z2i44CCIgorCisjOiB2ZXJzaW9uLmM6ODExCittc2dpZCAid2l0aCBYMTEtTW90aWYgR1VJLiIKK21zZ3N0ciAi5L2/55SoIFgxMS1Nb3RpZiDlnJblnovnlYzpnaLjgIIiCisKKyM6IHZlcnNpb24uYzo4MTQKK21zZ2lkICJ3aXRoIFgxMS1BdGhlbmEgR1VJLiIKK21zZ3N0ciAi5L2/55SoIFgxMS1BdGhlbmEg5ZyW5Z6L55WM6Z2i44CCIgorCisjOiB2ZXJzaW9uLmM6ODE3Cittc2dpZCAid2l0aCBCZU9TIEdVSS4iCittc2dzdHIgIuS9v+eUqCBCZU9TIOWcluWei+eVjOmdouOAgiIKKworIzogdmVyc2lvbi5jOjgyMAorbXNnaWQgIndpdGggUGhvdG9uIEdVSS4iCittc2dzdHIgIuS9v+eUqFBob3RvbuWcluWei+eVjOmdouOAgiIKKworIzogdmVyc2lvbi5jOjgyMworbXNnaWQgIndpdGggR1VJLiIKK21zZ3N0ciAi5L2/55So5ZyW5Z6L55WM6Z2i44CCIgorCisjOiB2ZXJzaW9uLmM6ODI2Cittc2dpZCAid2l0aCBDYXJib24gR1VJLiIKK21zZ3N0ciAi5L2/55SoIENhcmJvbiDlnJblnovnlYzpnaLjgIIiCisKKyM6IHZlcnNpb24uYzo4MjkKK21zZ2lkICJ3aXRoIENvY29hIEdVSS4iCittc2dzdHIgIuS9v+eUqCBDb2NvYSDlnJblnovnlYzpnaLjgIIiCisKKyM6IHZlcnNpb24uYzo4MzIKK21zZ2lkICJ3aXRoIChjbGFzc2ljKSBHVUkuIgorbXNnc3RyICLkvb/nlKggKOWCs+e1sSkg5ZyW5Z6L55WM6Z2i44CCIgorCisjOiB2ZXJzaW9uLmM6ODQzCittc2dpZCAiICBGZWF0dXJlcyBpbmNsdWRlZCAoKykgb3Igbm90ICgtKTpcbiIKK21zZ3N0ciAiIOebruWJjeWPr+S9v+eUqCgrKeiIh+S4jeWPr+S9v+eUqCgtKeeahOaooee1hOWIl+ihqDpcbiIKKworIzogdmVyc2lvbi5jOjg1NQorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICDns7vntbEgdmltcmMg6Kit5a6a5qqUOiBcIiIKKworIzogdmVyc2lvbi5jOjg2MAorbXNnaWQgIiAgICAgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICDkvb/nlKjogIXlgIvkurogdmltcmMg6Kit5a6a5qqUOiBcIiIKKworIzogdmVyc2lvbi5jOjg2NQorbXNnaWQgIiAybmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgIOesrOS6jOe1hOWAi+S6uiB2aW1yYyDmqpTmoYg6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODcwCittc2dpZCAiIDNyZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAg56ys5LiJ57WE5YCL5Lq6IHZpbXJjIOaqlOahiDogXCIiCisKKyM6IHZlcnNpb24uYzo4NzUKK21zZ2lkICIgICAgICB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgIOS9v+eUqOiAheWAi+S6uiBleHJjIOioreWumuaqlDogXCIiCisKKyM6IHZlcnNpb24uYzo4ODAKK21zZ2lkICIgIDJuZCB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgIOesrOS6jOe1hOS9v+eUqOiAhSBleHJjIOaqlOahiDogXCIiCisKKyM6IHZlcnNpb24uYzo4ODYKK21zZ2lkICIgIHN5c3RlbSBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgIOezu+e1sSBndmltcmMg5qqU5qGIOiBcIiIKKworIzogdmVyc2lvbi5jOjg5MAorbXNnaWQgIiAgICB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICDkvb/nlKjogIXlgIvkurogZ3ZpbXJjIOaqlDogXCIiCisKKyM6IHZlcnNpb24uYzo4OTQKK21zZ2lkICIybmQgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgIOesrOS6jOe1hOWAi+S6uiBndmltcmMg5qqU5qGIOiBcIiIKKworIzogdmVyc2lvbi5jOjg5OQorbXNnaWQgIjNyZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAg56ys5LiJ57WE5YCL5Lq6IGd2aW1yYyDmqpTmoYg6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTA2Cittc2dpZCAiICAgIHN5c3RlbSBtZW51IGZpbGU6IFwiIgorbXNnc3RyICIgICAgICAgICAgIOezu+e1semBuOWWruioreWumuaqlDogXCIiCisKKyM6IHZlcnNpb24uYzo5MTQKK21zZ2lkICIgIGZhbGwtYmFjayBmb3IgJFZJTTogXCIiCittc2dzdHIgIiAgICAgICAgICAgICAgJFZJTSDpoJDoqK3lgLw6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTIwCittc2dpZCAiIGYtYiBmb3IgJFZJTVJVTlRJTUU6IFwiIgorbXNnc3RyICIgICAgICAgJFZJTVJVTlRJTUUg6aCQ6Kit5YC8OiBcIiIKKworIzogdmVyc2lvbi5jOjkyNAorbXNnaWQgIkNvbXBpbGF0aW9uOiAiCittc2dzdHIgIue3qOitr+aWueW8jzogIgorCisjOiB2ZXJzaW9uLmM6OTMwCittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAi57eo6K2v5ZmoOiAiCisKKyM6IHZlcnNpb24uYzo5MzUKK21zZ2lkICJMaW5raW5nOiAiCittc2dzdHIgIumPiOe1kOaWueW8jzogIgorCisjOiB2ZXJzaW9uLmM6OTQwCittc2dpZCAiICBERUJVRyBCVUlMRCIKK21zZ3N0ciAiICDpmaTpjK/niYjmnKwiCisKKyM6IHZlcnNpb24uYzo5NzYKK21zZ2lkICJWSU0gLSBWaSBJTXByb3ZlZCIKK21zZ3N0ciAiVklNIC0gVmkgSU1wcm92ZWQiCisKKyM6IHZlcnNpb24uYzo5NzgKK21zZ2lkICJ2ZXJzaW9uICIKK21zZ3N0ciAi54mI5pysICAgIgorCisjOiB2ZXJzaW9uLmM6OTc5Cittc2dpZCAiYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorbXNnc3RyICLntq3orbfogIU6IEJyYW0gTW9vbGVuYWFyIGV0IGFsLiIKKworIzogdmVyc2lvbi5jOjk4MworbXNnaWQgIlZpbSBpcyBvcGVuIHNvdXJjZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUiCittc2dzdHIgIlZpbSDngrrlj6/oh6rnlLHmlaPkvYjnmoTplovmlL7ljp/lp4vnorzou5/pq5QiCisKKyM6IHZlcnNpb24uYzo5ODUKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAi6KuL5bmr5Yqp54OP5bmy6YGU55qE5Y+v5oaQ5a2p56ulISIKKworIzogdmVyc2lvbi5jOjk4NgorbXNnaWQgInR5cGUgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIGZvciBpbmZvcm1hdGlvbiAiCittc2dzdHIgIumAsuS4gOatpeiqquaYjuiri+i8uOWFpSAgICAgICAgICA6aGVscCBpY2NmPEVudGVyPiIKKworIzogdmVyc2lvbi5jOjk4OAorbXNnaWQgInR5cGUgIDpxPEVudGVyPiAgICAgICAgICAgICAgIHRvIGV4aXQgICAgICAgICAiCittc2dzdHIgIuimgemboumWi+iri+i8uOWFpSAgICAgICAgICAgICAgICAgIDpxPEVudGVyPiAgICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjk4OQorbXNnaWQgInR5cGUgIDpoZWxwPEVudGVyPiAgb3IgIDxGMT4gIGZvciBvbi1saW5lIGhlbHAiCittc2dzdHIgIue3muS4iuiqquaYjuiri+i8uOWFpSAgICAgICAgICAgICAgICA6aGVscDxFbnRlcj4gICAgICAgICAiCisKKyM6IHZlcnNpb24uYzo5OTAKK21zZ2lkICJ0eXBlICA6aGVscCB2ZXJzaW9uNjxFbnRlcj4gICBmb3IgdmVyc2lvbiBpbmZvIgorbXNnc3RyICLmlrDniYjmnKzos4foqIroq4vovLjlhaUgICAgICAgICAgICAgIDpoZWxwIHZlcnNpb242PEVudGVyPiIKKworIzogdmVyc2lvbi5jOjk5MworbXNnaWQgIlJ1bm5pbmcgaW4gVmkgY29tcGF0aWJsZSBtb2RlIgorbXNnc3RyICJWaSDnm7jlrrnmqKHlvI8iCisKKyM6IHZlcnNpb24uYzo5OTQKK21zZ2lkICJ0eXBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBmb3IgVmltIGRlZmF1bHRzIgorbXNnc3RyICLlpoLmnpzopoHlrozlhajmqKHmk6zlgrPntbEgVmkg6KuL6Ly45YWlIDpzZXQgbm9jcDxFbnRlcj4iCisKKyM6IHZlcnNpb24uYzo5OTUKK21zZ2lkICJ0eXBlICA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICLlpoLmnpzpnIDopoHlsI0gVmkg55u45a655qih5byP55qE6YCy5LiA5q2l6Kqq5piO6KuL6Ly45YWlIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6MTAxMAorbXNnaWQgIm1lbnUgIEhlbHAtPk9ycGhhbnMgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiAgICAiCittc2dzdHIgIumAsuS4gOatpeiqquaYjuiri+mBuOWPlumBuOWWrueahCDovJTliqnoqqrmmI4tPuaLr+aVkeWtpOWFkiIKKworIzogdmVyc2lvbi5jOjEwMTIKK21zZ2lkICJSdW5uaW5nIG1vZGVsZXNzLCB0eXBlZCB0ZXh0IGlzIGluc2VydGVkIgorbXNnc3RyICLln7fooYwgTW9kZWxlc3Mg5qih5byP77yM6Ly45YWl55qE5paH5a2X5pyD6Ieq5YuV5o+S5YWlIgorCisjOiB2ZXJzaW9uLmM6MTAxMworbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIEluc2VydCBNb2RlICAiCittc2dzdHIgIumBuOWPlumBuOWWrueahOOAjOe3qOi8r+OAjeOAjOWFqOWfn+ioreWumuOAjeOAjOWIh+aPm+aPkuWFpeaooeW8j+OAjSIKKworIzogdmVyc2lvbi5jOjEwMTQKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHdvIG1vZGVzICAgICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlhannqK7mqKHlvI8gICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjEwMTgKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBWaSBDb21wYXRpYmxlIgorbXNnc3RyICLpgbjlj5bpgbjllq7nmoTjgIznt6jovK/jgI3jgIzlhajln5/oqK3lrprjgI3jgIzliIfmj5vlgrPntbFWaeebuOWuueaooeW8j+OAjSIKKworIzogdmVyc2lvbi5jOjEwMTkKK21zZ2lkICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgVmltIGRlZmF1bHRzICAgIgorbXNnc3RyICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDku6XlvpcgVmltIOmgkOioreWAvCAgICAiCisKKyM6IHZlcnNpb24uYzoxMDY1Cittc2dpZCAiV0FSTklORzogV2luZG93cyA5NS85OC9NRSBkZXRlY3RlZCIKK21zZ3N0ciAi5rOo5oSPOiDlgbXmuKzliLAgV2luZG93cyA5NS85OC9NRSIKKworIzogdmVyc2lvbi5jOjEwNjgKK21zZ2lkICJ0eXBlICA6aGVscCB3aW5kb3dzOTU8RW50ZXI+ICBmb3IgaW5mbyBvbiB0aGlzIgorbXNnc3RyICLlpoLmnpzpnIDopoHlsI0gV2luZG93cyA5NSDmlK/mj7TnmoTmm7TlpJros4foqIroq4vovLjlhaUgOmhlbHAgd2luZG93czk1PEVudGVyPiIKKworIzogd2luZG93LmM6MjA0Cittc2dpZCAiRTQ0MTogVGhlcmUgaXMgbm8gcHJldmlldyB3aW5kb3ciCittc2dzdHIgIkU0NDE6IOaykuaciemgkOimveimlueqlyIKKworIzogd2luZG93LmM6NTc3Cittc2dpZCAiRTQ0MjogQ2FuJ3Qgc3BsaXQgdG9wbGVmdCBhbmQgYm90cmlnaHQgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiRTQ0Mjog5LiN6IO95ZCM5pmC5YiG5Ymy6KaW56qX54K65bem5LiK5ZKM5Y+z5LiL6KeSIgorCisjOiB3aW5kb3cuYzoxMzM2Cittc2dpZCAiRTQ0MzogQ2Fubm90IHJvdGF0ZSB3aGVuIGFub3RoZXIgd2luZG93IGlzIHNwbGl0IgorbXNnc3RyICJFNDQzOiDmnInlhbblroPliIblibLoppbnqpfmmYLnhKHms5Xml4vovYkiCisKKyM6IHdpbmRvdy5jOjE4MjcKK21zZ2lkICJFNDQ0OiBDYW5ub3QgY2xvc2UgbGFzdCB3aW5kb3ciCittc2dzdHIgIkU0NDQ6IOS4jeiDvemXnOmWieacgOW+jOS4gOWAi+imlueqlyIKKworIzogd2luZG93LmM6MjU1NworbXNnaWQgIkFscmVhZHkgb25seSBvbmUgd2luZG93IgorbXNnc3RyICLlt7LntpPlj6rliankuIDlgIvoppbnqpfkuoYiCisKKyM6IHdpbmRvdy5jOjI2MDQKK21zZ2lkICJFNDQ1OiBPdGhlciB3aW5kb3cgY29udGFpbnMgY2hhbmdlcyIKK21zZ3N0ciAiRTQ0NTog5YW25a6D6KaW56qX5pyJ5pu05YuV6LOH5paZIgorCisjOiB3aW5kb3cuYzo0NDQ5Cittc2dpZCAiRTQ0NjogTm8gZmlsZSBuYW1lIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTQ0Njog5ri45qiZ6JmV5rKS5pyJ5qqU5ZCNIgorCisjOiB3aW5kb3cuYzo0NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NDc6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTQ0Nzog5Zyo6Lev5b6R5Lit5om+5LiN5Yiw5qqU5qGIIFwiJXNcIiIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo1ODYKK21zZ2lkICJFZGl0IHdpdGggJm11bHRpcGxlIFZpbXMiCittc2dzdHIgIuS9v+eUqOWkmuWAiyBWaW0gc2Vzc2lvbiDnt6jovK8oJk0pIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjU5MgorbXNnaWQgIkVkaXQgd2l0aCBzaW5nbGUgJlZpbSIKK21zZ3N0ciAi5Y+q5L2/55So5ZCM5LiA5YCLIFZpbSBzZXNzaW9uIOe3qOi8rygmVikiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NjAxCittc2dpZCAiJkRpZmYgd2l0aCBWaW0iCittc2dzdHIgIuS9v+eUqCBWaW0g5L6G5q+U6LyDKCZEaWZmKSIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo2MTQKK21zZ2lkICJFZGl0IHdpdGggJlZpbSIKK21zZ3N0ciAi5L2/55SoIFZpbSDnt6jovK/mraTmqpQoJlYpIgorCisjLiBOb3cgY29uY2F0ZW5hdGUKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NjM2Cittc2dpZCAiRWRpdCB3aXRoIGV4aXN0aW5nIFZpbSAtICYiCittc2dzdHIgIuS9v+eUqOWft+ihjOS4reeahCBWaW0gc2Vzc2lvbiDnt6jovK8gLSAmIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjc0OQorbXNnaWQgIkVkaXRzIHRoZSBzZWxlY3RlZCBmaWxlKHMpIHdpdGggVmltIgorbXNnc3RyICLkvb/nlKggVmltIOe3qOi8r+W3sumBuOWPlueahOaqlOahiCIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo4ODggLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5NjkKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwcm9jZXNzOiBDaGVjayBpZiBndmltIGlzIGluIHlvdXIgcGF0aCEiCittc2dzdHIgIueEoeazleWft+ihjOeoi+W8jzog6KuL5qqi5p+lIGd2aW0g5pyJ5rKS5pyJ5Zyo5L2g55qEIFBBVEgg6K6K5pW46KOhISIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo4ODkgLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDMKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTcwCittc2dpZCAiZ3ZpbWV4dC5kbGwgZXJyb3IiCittc2dzdHIgImd2aW1leHQuZGxsIOmMr+iqpCIKKworIzogLi4vR3ZpbUV4dC9ndmltZXh0LmNwcDo5MDIKK21zZ2lkICJQYXRoIGxlbmd0aCB0b28gbG9uZyEiCittc2dzdHIgIui3r+W+kemVt+W6puWkqumVtyEiCisKKyM6IGdsb2JhbHMuaDo5OTAKK21zZ2lkICItLU5vIGxpbmVzIGluIGJ1ZmZlci0tIgorbXNnc3RyICItLee3qeihneWNgOeEoeizh+aWmS0tIgorCisjLgorIy4gKiBUaGUgZXJyb3IgbWVzc2FnZXMgdGhhdCBjYW4gYmUgc2hhcmVkIGFyZSBpbmNsdWRlZCBoZXJlLgorIy4gKiBFeGNsdWRlZCBhcmUgZXJyb3JzIHRoYXQgYXJlIG9ubHkgdXNlZCBvbmNlIGFuZCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisjLgorIzogZ2xvYmFscy5oOjExNDkKK21zZ2lkICJFNDcwOiBDb21tYW5kIGFib3J0ZWQiCittc2dzdHIgIkU0NzA6IOWRveS7pOiiq+W8t+WItuS4reaWt+Wft+ihjCIKKworIzogZ2xvYmFscy5oOjExNTAKK21zZ2lkICJFNDcxOiBBcmd1bWVudCByZXF1aXJlZCIKK21zZ3N0ciAiRTQ3MTog6ZyA6KaB5oyH5Luk5Y+D5pW4IgorCisjOiBnbG9iYWxzLmg6MTE1MQorbXNnaWQgIkUxMDogXFwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJiIKK21zZ3N0ciAiRTEwOiBcXCDlvozpnaLmh4noqbLmnIkgLyA/IOaIliAmIgorCisjOiBnbG9iYWxzLmg6MTE1MworbXNnaWQgIkUxMTogSW52YWxpZCBpbiBjb21tYW5kLWxpbmUgd2luZG93OyA8Q1I+IGV4ZWN1dGVzLCBDVFJMLUMgcXVpdHMiCittc2dzdHIgIkUxMTog5LiN6IO95Zyo5ZG95Luk5YiX6KaW56qX5Lit5L2/55So44CCPENSPuWft+ihjO+8jENUUkwtQyDpm6LplosiCisKKyM6IGdsb2JhbHMuaDoxMTU1Cittc2dpZCAiRTEyOiBDb21tYW5kIG5vdCBhbGxvd2VkIGZyb20gZXhyYy92aW1yYyBpbiBjdXJyZW50IGRpciBvciB0YWcgc2VhcmNoIgorbXNnc3RyICJFMTI6IGV4cmMvdmltcmMg6KOh55qE5oyH5Luk54Sh5rOV5Z+36KGMIgorCisjOiBnbG9iYWxzLmg6MTE1NworbXNnaWQgIkUxNzE6IE1pc3NpbmcgOmVuZGlmIgorbXNnc3RyICJFMTcxOiDnvLrlsJEgOmVuZGlmIgorCisjOiBnbG9iYWxzLmg6MTE1OAorbXNnaWQgIkU2MDA6IE1pc3NpbmcgOmVuZHRyeSIKK21zZ3N0ciAiRTYwMDog57y65bCRIDplbmR0cnkiCisKKyM6IGdsb2JhbHMuaDoxMTU5Cittc2dpZCAiRTE3MDogTWlzc2luZyA6ZW5kd2hpbGUiCittc2dzdHIgIkUxNzA6IOe8uuWwkSA6ZW5kd2hpbGUiCisKKyM6IGdsb2JhbHMuaDoxMTYwCittc2dpZCAiRTU4ODogOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIgorbXNnc3RyICJFNTg4OiA6ZW5kd2hpbGUg57y65bCR5bCN5oeJ55qEIDp3aGlsZSIKKworIzogZ2xvYmFscy5oOjExNjIKK21zZ2lkICJFMTM6IEZpbGUgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxMzog5qqU5qGI5bey57aT5a2Y5ZyoICjlj6/nlKggISDlvLfliLblj5bku6MpIgorCisjOiBnbG9iYWxzLmg6MTE2MworbXNnaWQgIkU0NzI6IENvbW1hbmQgZmFpbGVkIgorbXNnc3RyICJFNDcyOiDlkb3ku6Tln7fooYzlpLHmlZciCisKKyM6IGdsb2JhbHMuaDoxMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzQ6IFVua25vd24gZm9udHNldDogJXMiCittc2dzdHIgIkUyMzQ6IOS4jeato+eiuueahOWtl+WFg+mbhiAoRm9udHNldCk6ICVzIgorCisjOiBnbG9iYWxzLmg6MTE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM1OiBVbmtub3duIGZvbnQ6ICVzIgorbXNnc3RyICLkuI3mraPnorrnmoTlrZflnovlkI3nqLE6ICVzIgorCisjOiBnbG9iYWxzLmg6MTE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjM2OiBGb250IFwiJXNcIiBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIkUyMzY6IFwiJXNcIiDkuI3mmK/lm7rlrprlr6zluqblrZflnosiCisKKyM6IGdsb2JhbHMuaDoxMTc0Cittc2dpZCAiRTQ3MzogSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIkU0NzM6IOWFp+mDqOmMr+iqpCIKKworIzogZ2xvYmFscy5oOjExNzUKK21zZ2lkICJJbnRlcnJ1cHRlZCIKK21zZ3N0ciAi5bey5Lit5pa3IgorCisjOiBnbG9iYWxzLmg6MTE3NgorbXNnaWQgIkUxNDogSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFMTQ6IOS4jeato+eiuueahOS9jeWdgCIKKworIzogZ2xvYmFscy5oOjExNzcKK21zZ2lkICJFNDc0OiBJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJFNDc0OiDkuI3mraPnorrnmoTlj4PmlbgiCisKKyM6IGdsb2JhbHMuaDoxMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NzU6IEludmFsaWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDc1OiDkuI3mraPnorrnmoTlj4Pmlbg6ICVzIgorCisjOiBnbG9iYWxzLmg6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogJXMiCittc2dzdHIgIkUxNTog5LiN5q2j56K655qE6YGL566X5byPOiAlcyIKKworIzogZ2xvYmFscy5oOjExODIKK21zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCittc2dzdHIgIkUxNjog5LiN5q2j56K655qE56+E5ZyNIgorCisjOiBnbG9iYWxzLmg6MTE4MworbXNnaWQgIkU0NzY6IEludmFsaWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ3Njog5LiN5q2j56K655qE5ZG95LukIgorCisjOiBnbG9iYWxzLmg6MTE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTc6IFwiJXNcIiBpcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRTE3OiBcIiVzXCIg5piv55uu6YyEIgorCisjOiBnbG9iYWxzLmg6MTE4OAorbXNnaWQgIkUxODogVW5leHBlY3RlZCBjaGFyYWN0ZXJzIGJlZm9yZSAnPSciCittc2dzdHIgIkUxODogJz0nIOWJjemdouWHuuePvuS6humMr+iqpOeahOWtl+WFgyIKKworIzogZ2xvYmFscy5oOjExOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NDogTGlicmFyeSBjYWxsIGZhaWxlZCBmb3IgXCIlcygpXCIiCittc2dzdHIgIkUzNjQ6IOWRvOWPq+WHveW8j+W6qyBcIiVzXCIoKSDlpLHmlZciCisKKyM6IGdsb2JhbHMuaDoxMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzA6IENvdWxkIG5vdCBsb2FkIGxpYnJhcnkgJXMiCittc2dzdHIgIkUzNzA6IOeEoeazlemHjeaWsOi8ieWFpeeoi+W8j+W6qyAlcyIKKworIzogZ2xvYmFscy5oOjExOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0ODogQ291bGQgbm90IGxvYWQgbGlicmFyeSBmdW5jdGlvbiAlcyIKK21zZ3N0ciAiRTQ0ODog54Sh5rOV6LyJ5YWl56iL5byP5bqr55qE5Ye95byPICVzIgorCisjOiBnbG9iYWxzLmg6MTE5OQorbXNnaWQgIkUxOTogTWFyayBoYXMgaW52YWxpZCBsaW5lIG51bWJlciIKK21zZ3N0ciAiRTE5OiDmqJnoqJjnmoTooYzomZ/pjK/oqqQiCisKKyM6IGdsb2JhbHMuaDoxMjAwCittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIkUyMDog5rKS5pyJ6Kit5a6a5qiZ6KiYIgorCisjOiBnbG9iYWxzLmg6MTIwMQorbXNnaWQgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIKK21zZ3N0ciAiRTIxOiDlm6DngrogJ21vZGlmaWFibGUnIOmBuOmgheaYr+mXnOmWieeahO+8jOaJgOS7peS4jeiDveS/ruaUuSIKKworIzogZ2xvYmFscy5oOjEyMDIKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6IOW3oueLgOmBnui/tOWRvOWPq+WkquWkmuWxpCIKKworIzogZ2xvYmFscy5oOjEyMDMKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6IOaykuacieabv+S7o+eahOaqlOahiCIKKworIzogZ2xvYmFscy5oOjEyMDQKK21zZ2lkICJFMjQ6IE5vIHN1Y2ggYWJicmV2aWF0aW9uIgorbXNnc3RyICJFMjQ6IOaykuaciemAmeWAiyBhYmJyZXZpYXRpb24g5bCN5oeJIgorCisjOiBnbG9iYWxzLmg6MTIwNQorbXNnaWQgIkU0Nzc6IE5vICEgYWxsb3dlZCIKK21zZ3N0ciAiRTQ3Nzog5LiN5Y+v5L2/55SoICchJyIKKworIzogZ2xvYmFscy5oOjEyMDcKK21zZ2lkICJFMjU6IEdVSSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIgorbXNnc3RyICJFMjU6IOWboOeCuue3qOitr+aZguaykuacieWKoOWFpeWcluWei+eVjOmdoueahOeoi+W8j+eivO+8jOaJgOS7peeEoeazleS9v+eUqOWcluWei+eVjOmdoiIKKworIzogZ2xvYmFscy5oOjEyMTAKK21zZ2lkICJFMjY6IEhlYnJldyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNjog5Zug54K657eo6K2v5pmC5rKS5pyJ5Yqg5YWlIEhlYnJldyDnmoTnqIvlvI/norzvvIzmiYDku6XnhKHms5Xkvb/nlKggSGVicmV3XG4iCisKKyM6IGdsb2JhbHMuaDoxMjEzCittc2dpZCAiRTI3OiBGYXJzaSBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNzog5Zug54K657eo6K2v5pmC5rKS5pyJ5Yqg5YWlIEZhcnNpIOeahOeoi+W8j+eivO+8jOaJgOS7peeEoeazleS9v+eUqCBGYXJzaVxuIgorCisjOiBnbG9iYWxzLmg6MTIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjg6IE5vIHN1Y2ggaGlnaGxpZ2h0IGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFMjg6IOaykuacieWQjeeCuiAnJXMnIOeahCBoaWdobGlnaHQgZ3JvdXAiCisKKyM6IGdsb2JhbHMuaDoxMjE4Cittc2dpZCAiRTI5OiBObyBpbnNlcnRlZCB0ZXh0IHlldCIKK21zZ3N0ciAiRTI5OiDpgoTmspLmnInmj5LlhaXmloflrZfpgY4iCisKKyM6IGdsb2JhbHMuaDoxMjE5Cittc2dpZCAiRTMwOiBObyBwcmV2aW91cyBjb21tYW5kIGxpbmUiCittc2dzdHIgIkUzMDog5rKS5pyJ5YmN5LiA6aCF5ZG95LukIgorCisjOiBnbG9iYWxzLmg6MTIyMAorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IOaykuaciemAmeWAiyBtYXBwaW5nIOWwjeaHiSIKKworIzogZ2xvYmFscy5oOjEyMjEKK21zZ2lkICJFNDc5OiBObyBtYXRjaCIKK21zZ3N0ciAiRTQ3OTog5om+5LiN5YiwIgorCisjOiBnbG9iYWxzLmg6MTIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDgwOiBObyBtYXRjaDogJXMiCittc2dzdHIgIkU0ODA6IOaJvuS4jeWIsDogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjIzCittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjog5rKS5pyJ5qqU5ZCNIgorCisjOiBnbG9iYWxzLmg6MTIyNAorbXNnaWQgIkUzMzogTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIkUzMzog5rKS5pyJ5YmN5LiA5YCL5pCc5bCLL+WPluS7o+eahOWRveS7pCIKKworIzogZ2xvYmFscy5oOjEyMjUKK21zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCittc2dzdHIgIkUzNDog5rKS5pyJ5YmN5LiA5YCL5ZG95LukIgorCisjOiBnbG9iYWxzLmg6MTIyNgorbXNnaWQgIkUzNTogTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJFMzU6IOaykuacieWJjeS4gOWAi+aQnOWwi+aMh+S7pCIKKworIzogZ2xvYmFscy5oOjEyMjcKK21zZ2lkICJFNDgxOiBObyByYW5nZSBhbGxvd2VkIgorbXNnc3RyICJFNDgxOiDkuI3lj6/kvb/nlKjnr4TlnI3mjIfku6QiCisKKyM6IGdsb2JhbHMuaDoxMjI5Cittc2dpZCAiRTM2OiBOb3QgZW5vdWdoIHJvb20iCittc2dzdHIgIkUzNjog5rKS5pyJ6Laz5aSg55qE56m66ZaTIgorCisjOiBnbG9iYWxzLmg6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ3OiBubyByZWdpc3RlcmVkIHNlcnZlciBuYW1lZCBcIiVzXCIiCittc2dzdHIgIkUyNDc6IOaykuacieiou+WGiueCuiBcIiVzXCIg55qE5Ly65pyN5ZmoIgorCisjOiBnbG9iYWxzLmg6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDgyOiBDYW4ndCBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiRTQ4Mjog5LiN6IO95bu656uL5qqU5qGIICVzIgorCisjOiBnbG9iYWxzLmg6MTIzNQorbXNnaWQgIkU0ODM6IENhbid0IGdldCB0ZW1wIGZpbGUgbmFtZSIKK21zZ3N0ciAiRTQ4Mzog54Sh5rOV5b6X55+l5pqr5a2Y5qqU5ZCNIgorCisjOiBnbG9iYWxzLmg6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDg0OiBDYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIkU0ODQ6IOeEoeazlemWi+WVn+aqlOahiCAlcyIKKworIzogZ2xvYmFscy5oOjEyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4NTogQ2FuJ3QgcmVhZCBmaWxlICVzIgorbXNnc3RyICJFNDg1OiDnhKHms5XoroDlj5bmqpTmoYggJXMiCisKKyM6IGdsb2JhbHMuaDoxMjM4Cittc2dpZCAiRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFMzc6IOW3suabtOaUuemBjuaqlOahiOS9huWwmuacquWtmOaqlCAo5Y+v55SoICEg5by35Yi25Z+36KGMKSIKKworIzogZ2xvYmFscy5oOjEyMzkKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODog56m655qEIChOdWxsKSDlj4PmlbgiCisKKyM6IGdsb2JhbHMuaDoxMjQxCittc2dpZCAiRTM5OiBOdW1iZXIgZXhwZWN0ZWQiCittc2dzdHIgIkUzOTog5oeJ6Kmy6KaB5pyJ5pW45a2XIgorCisjOiBnbG9iYWxzLmg6MTI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA6IENhbid0IG9wZW4gZXJyb3JmaWxlICVzIgorbXNnc3RyICJFNDA6IOeEoeazlemWi+WVn+mMr+iqpOaqlOahiCAlcyIKKworIzogZ2xvYmFscy5oOjEyNDcKK21zZ2lkICJFMjMzOiBjYW5ub3Qgb3BlbiBkaXNwbGF5IgorbXNnc3RyICJFMjMzOiA85LiN6IO96ZaL5ZWfIFggU2VydmVyIERJU1BMQVk+IgorCisjOiBnbG9iYWxzLmg6MTI0OQorbXNnaWQgIkU0MTogT3V0IG9mIG1lbW9yeSEiCittc2dzdHIgIkU0MTog6KiY5oa26auU5LiN6LazISIKKworIzogZ2xvYmFscy5oOjEyNTEKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZCIKK21zZ3N0ciAi5om+5LiN5YiwIgorCisjOiBnbG9iYWxzLmg6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDg2OiBQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0ODY6IOaJvuS4jeWIsCAlcyIKKworIzogZ2xvYmFscy5oOjEyNTQKK21zZ2lkICJFNDg3OiBBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJFNDg3OiDlj4Pmlbjmh4noqbLmmK/mraPmlbgiCisKKyM6IGdsb2JhbHMuaDoxMjU2Cittc2dpZCAiRTQ1OTogQ2Fubm90IGdvIGJhY2sgdG8gcHJldmlvdXMgZGlyZWN0b3J5IgorbXNnc3RyICJFNDU5OiDnhKHms5Xlm57liLDliY3kuIDlgIvnm67pjIQiCisKKyM6IGdsb2JhbHMuaDoxMjYwCittc2dpZCAiRTQyOiBObyBFcnJvcnMiCittc2dzdHIgIkU0Mjog5rKS5pyJ6Yyv6KqkIgorCisjOiBnbG9iYWxzLmg6MTI2MgorbXNnaWQgIkU0MzogRGFtYWdlZCBtYXRjaCBzdHJpbmciCittc2dzdHIgIkU0Mzog56ym5ZCI5a2X5Liy5pyJ5ZWP6aGMIgorCisjOiBnbG9iYWxzLmg6MTI2MworbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6IHJlZ2V4cCDmnInllY/poYwiCisKKyM6IGdsb2JhbHMuaDoxMjY0Cittc2dpZCAiRTQ1OiAncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ1OiDmnInoqK3lrpogJ3JlYWRvbmx5JyDpgbjpoIUo5ZSv6K6AKSAo5Y+v55SoICEg5by35Yi25Z+36KGMKSIKKworIzogZ2xvYmFscy5oOjEyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ2OiBDYW5ub3Qgc2V0IHJlYWQtb25seSB2YXJpYWJsZSBcIiVzXCIiCittc2dzdHIgIkU0Njog54Sh5rOV6Kit5a6a5ZSv6K6A6K6K5pW4IFwiJXNcIiIKKworIzogZ2xvYmFscy5oOjEyNjkKK21zZ2lkICJFNDc6IEVycm9yIHdoaWxlIHJlYWRpbmcgZXJyb3JmaWxlIgorbXNnc3RyICJFNDc6IOiugOWPlumMr+iqpOaqlOahiOWkseaVlyIKKworIzogZ2xvYmFscy5oOjEyNzIKK21zZ2lkICJFNDg6IE5vdCBhbGxvd2VkIGluIHNhbmRib3giCittc2dzdHIgIkU0ODog5LiN6IO95ZyoIHNhbmRib3gg6KOh5Ye654++IgorCisjOiBnbG9iYWxzLmg6MTI3NAorbXNnaWQgIkU1MjM6IE5vdCBhbGxvd2VkIGhlcmUiCittc2dzdHIgIkU1MjM6IOmAmeijoeS4jeWPr+S9v+eUqCIKKworIzogZ2xvYmFscy5oOjEyNzcKK21zZ2lkICJFMzU5OiBTY3JlZW4gbW9kZSBzZXR0aW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkUzNTk6IOS4jeaUr+aPtOioreWumuieouW5leaooeW8jyIKKworIzogZ2xvYmFscy5oOjEyNzkKK21zZ2lkICJFNDk6IEludmFsaWQgc2Nyb2xsIHNpemUiCittc2dzdHIgIkU0OTog6Yyv6Kqk55qE5o2y5YuV5aSn5bCPIgorCisjOiBnbG9iYWxzLmg6MTI4MAorbXNnaWQgIkU5MTogJ3NoZWxsJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIkU5MTogJ0U3MTog6YG46aCFICdzaGVsbCcg5pyq6Kit5a6aIgorCisjOiBnbG9iYWxzLmg6MTI4MgorbXNnaWQgIkUyNTU6IENvdWxkbid0IHJlYWQgaW4gc2lnbiBkYXRhISIKK21zZ3N0ciAiRTI1NTog54Sh5rOV6K6A5Y+WIHNpZ24gZGF0YSEiCisKKyM6IGdsb2JhbHMuaDoxMjg0Cittc2dpZCAiRTcyOiBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUiCittc2dzdHIgIkU3Mjog5pqr5a2Y5qqU6Zec6ZaJ6Yyv6KqkIgorCisjOiBnbG9iYWxzLmg6MTI4NQorbXNnaWQgIkU3MzogdGFnIHN0YWNrIGVtcHR5IgorbXNnc3RyICJFNzM6IOaomeexpOWghueWiuW3suepuiIKKworIzogZ2xvYmFscy5oOjEyODYKK21zZ2lkICJFNzQ6IENvbW1hbmQgdG9vIGNvbXBsZXgiCittc2dzdHIgIkU3NDog5ZG95Luk5aSq6KSH6ZucIgorCisjOiBnbG9iYWxzLmg6MTI4NworbXNnaWQgIkU3NTogTmFtZSB0b28gbG9uZyIKK21zZ3N0ciAiRTc1OiDlkI3lrZflpKrplbciCisKKyM6IGdsb2JhbHMuaDoxMjg4Cittc2dpZCAiRTc2OiBUb28gbWFueSBbIgorbXNnc3RyICJFNzY6IOWkquWkmiBbIgorCisjOiBnbG9iYWxzLmg6MTI4OQorbXNnaWQgIkU3NzogVG9vIG1hbnkgZmlsZSBuYW1lcyIKK21zZ3N0ciAiRTc3OiDlpKrlpJrmqpTlkI0iCisKKyM6IGdsb2JhbHMuaDoxMjkwCittc2dpZCAiRTQ4ODogVHJhaWxpbmcgY2hhcmFjdGVycyIKK21zZ3N0ciAiRTQ4ODog5L2g6Ly45YWl5LqG5aSa6aSY55qE5a2X5YWDIgorCisjOiBnbG9iYWxzLmg6MTI5MQorbXNnaWQgIkU3ODogVW5rbm93biBtYXJrIgorbXNnc3RyICJFNzg6IOeEoeazlei+puitmOeahOaomeiomCIKKworIzogZ2xvYmFscy5oOjEyOTIKK21zZ2lkICJFNzk6IENhbm5vdCBleHBhbmQgd2lsZGNhcmRzIgorbXNnc3RyICJFNzk6IOeEoeazleWxlemWi+iQrOeUqOWtl+WFgyIKKworIzogZ2xvYmFscy5oOjEyOTQKK21zZ2lkICJFNTkxOiAnd2luaGVpZ2h0JyBjYW5ub3QgYmUgc21hbGxlciB0aGFuICd3aW5taW5oZWlnaHQnIgorbXNnc3RyICJFNTkxOiAnd2luaGVpZ2h0JyDkuI3og73mr5QgJ3dpbm1pbmhlaWdodCcg5pu05bCRIgorCisjOiBnbG9iYWxzLmg6MTI5NgorbXNnaWQgIkU1OTI6ICd3aW53aWR0aCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWlud2lkdGgnIgorbXNnc3RyICJFNTkyOiAnd2lud2lkdGgnIOS4jeiDveavlCAnd2lubWlud2lkdGgnIOabtOWwkSIKKworIzogZ2xvYmFscy5oOjEyOTkKK21zZ2lkICJFODA6IEVycm9yIHdoaWxlIHdyaXRpbmciCittc2dzdHIgIkU4MDog5a+r5YWl6Yyv6KqkIgorCisjOiBnbG9iYWxzLmg6MTMwMAorbXNnaWQgIlplcm8gY291bnQiCittc2dzdHIgIuaVuOWIsOmbtiAoPykiCisKKyM6IGdsb2JhbHMuaDoxMzAyCittc2dpZCAiRTgxOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dCIKK21zZ3N0ciAiRTgxOiA8U0lEPiDkuI3og73lnKggc2NyaXB0IOacrOaWh+WkluS9v+eUqC4iCisKKyM6IGdsb2JhbHMuaDoxMzA1Cittc2dpZCAiRTQ0OTogSW52YWxpZCBleHByZXNzaW9uIHJlY2VpdmVkIgorbXNnc3RyICJFNDQ5OiDmlLbliLDkuI3mraPnorrnmoTpgYvnrpflvI8iCisKKyM6IGdsb2JhbHMuaDoxMzA4Cittc2dpZCAiRTQ2MzogUmVnaW9uIGlzIGd1YXJkZWQsIGNhbm5vdCBtb2RpZnkiCittc2dzdHIgIkU0NjM6IOWNgOWfn+iiq+S/neitt++8jOeEoeazleS/ruaUuSIKKworI34gbXNnaWQgImZ1bmN0aW9uICIKKyN+IG1zZ3N0ciAi5Ye95byPICIKKworI34gbXNnaWQgIlJ1biBNYWNybyIKKyN+IG1zZ3N0ciAi5Z+36KGM5beo6ZuGIgorCisjfiBtc2dpZCAiRTIyMTogJ2NvbW1lbnRzdHJpbmcnIGlzIGVtcHR5IgorI34gbXNnc3RyICJFMjIxOiDpgbjpoIUgJ2NvbW1lbnRzdHJpbmcnIOacquioreWumiIKKworI34gbXNnaWQgIkUyNDI6IENvbG9yIG5hbWUgbm90IHJlY29nbml6ZWQ6ICVzIgorI34gbXNnc3RyICJFMjQyOiAlcyDngrrnhKHms5XorZjliKXnmoTpoY/oibLlkI3nqLEiCisKKyN+IG1zZ2lkICJFMjQyOiBNaXNzaW5nIGNvbG9yOiAlcyIKKyN+IG1zZ3N0ciAiRTI0Mjog5om+5LiN5Yiw6aGP6ImyOiAlcyIKKworI34gbXNnaWQgImVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWQiCisjfiBtc2dzdHIgIuiugOWPliBjc2NvcGUg6YCj57eaICVkIOaZgumMr+iqpCIKKworI34gbXNnaWQgIkUyNDk6IGNvdWxkbid0IHJlYWQgVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IgorI34gbXNnc3RyICJFMjQ5OiDnhKHms5XoroDlj5YgVklNIOeahCByZWdpc3RyeSDoqK3lrprpoIUiCisKKyN+IG1zZ2lkICJDYW4ndCBvcGVuIGZpbGUgJXMiCisjfiBtc2dzdHIgIueEoeazlemWi+WVn+aqlOahiCAlcyIKKworI34gbXNnaWQgIlVuYWJsZSB0byBzZW5kIHJlcGx5IgorI34gbXNnc3RyICLnhKHms5XlgrPpgIHlm57mh4noqIrmga8iCisKKyN+IG1zZ2lkICJFMjQxOiBVbmFibGUgdG8gc2VuZCB0byBWaW0gc2VydmVyIgorI34gbXNnc3RyICJFMjQxOiDnhKHms5XlgrPpgIHliLAgVmltIOS8uuacjeWZqCIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJTZW5kIGZhaWxlZC4gTm8gY29tbWFuZCBzZXJ2ZXIgcHJlc2VudCA/XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICLlgrPpgIHlpLHmlZfjgILmspLmnInlkb3ku6TkvLrmnI3lmajlrZjlnKggP1xuIgorCisjfiBtc2dpZCAiUEMgKDMyIGJpdHMgVmltKSIKKyN+IG1zZ3N0ciAiUEMgKDMyIOS9jeWFgyBWaW0pIgorCisjfiBtc2dpZCAiUEMgKDE2IGJpdHMgVmltKSIKKyN+IG1zZ3N0ciAiUEMgKDE2IOS9jeWFgyBWaW0pIgorCisjfiBtc2dpZCAiRTM2MjogVW5zdXBwb3J0ZWQgc2NyZWVuIG1vZGUiCisjfiBtc2dzdHIgIkUzNjI6IOieouW5leaooeW8j+S4jeaUr+aPtCIKKworI34gbXNnaWQgIk5vIHNlcnZlcnMgZm91bmQgZm9yIHRoaXMgZGlzcGxheSIKKyN+IG1zZ3N0ciAi5q2kRGlzcGxheeaykuacieS8uuacjeWZqChTZXJ2ZXJzKSIKKworI34gbXNnaWQgIkUyNTg6IG5vIG1hdGNoZXMgZm91bmQgaW4gY3Njb3BlIGNvbm5lY3Rpb25zIgorI34gbXNnc3RyICJFMjU4OiBjc2NvcGUg6YCj57ea5om+5LiN5Yiw56ym5ZCI55qEIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIk1hY09TIENhcmJvbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIk1hY09TIENhcmJvbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJNYWNPUyA4IgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiTWFjT1MgOCIKKworI34gbXNnaWQgIlJldHJpZXZlIG5leHQgc3ltYm9sIgorI34gbXNnc3RyICLoroDlj5Y6IOW+nuS4i+WAiyBzeW1ib2wiCisKKyN+IG1zZ2lkICItLSBTTmlGRisgY29tbWFuZHMgLS0iCisjfiBtc2dzdHIgIi0tIFNOaUZGKyDlkb3ku6QgLS0iCisKKyN+IG1zZ2lkICJFMjc3OiBVbnJlY29nbml6ZWQgc25pZmYgcmVxdWVzdCBbJXNdIgorI34gbXNnc3RyICJFMjc3OiDnhKHms5XovqjorZggc25pZmYg5ZG95LukIFslc10iCmRpZmYgLS1naXQgYS9zcmMvcG8vemhfVFcucG8gYi9zcmMvcG8vemhfVFcucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxOGU2MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wby96aF9UVy5wbwpAQCAtMCwwICsxLDYzODkgQEAKKyMgVHJhZGl0aW9uYWwgQ2hpbmVzZSBUcmFuc2xhdGlvbiBmb3IgVmltCXZpbTpzZXQgZm9sZG1ldGhvZD1tYXJrZXI6CisjCisjIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorIyBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyMKKyMgRklSU1QgQVVUSE9SICBGcmFuY2lzIFMuTGluIDxwaWFpcEBjc2llLm50dS5lZHUudHc+LCAyMDAwCisjIEZJUlNUIFJFTEVBU0UgVGh1IEp1biAxNCAxNDoyNDoxNyBDU1QgMjAwMQorIworIyBMYXN0IHVwZGF0ZTogVGh1IEFwciAyNCAxMzowOTowNyBDU1QgMjAwMyAoNi4yYSkKKyMKKyMgVG8gdXBkYXRlLCBzZWFyY2ggcGF0dGVybjoJCS9mdXp6eVx8Xm1zZ3N0ciAiIlwoXG4iXClcQCEKKyMKKyMgRE8gTk9UIFVTRSBXT1JEUyBXSVRIIEJBQ0tTTEFTSCAoJ1wnKSBBUyBTRUNPTkQgQllURSBPRiBCSUc1IENIQVJTCisjIEVHOiAnpVwnLCAjILNcpVy7XAorIyDAXKxcvlyvXL1ctlyyXMZcsFzCXL9cwVzFXKdcqlyrXAorIyC8XK5csVzDXMRctFy1XLdcuFy5XLpcolykXKZcqFypXK1c4VzkXAorIyB5b3UgY2FuIHJlcGxhY2UgdGhlc2UgY2hhcmFjdGVycyB3aXRoIGFsdGVybmF0aXZlIHdvcmRzLgorIyBUSElTIFdJTEwgQ0FVU0UgSU5DT01QQVRJQkxFIE9OIGdldHRleHQgMC4xMC4zNisKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IFZpbShUcmFkaXRpb25hbCBDaGluZXNlKVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDAzLTA0LTI0IDEzOjA2KzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiBNb24gRmViIDE5IDIyOjQ5OjIxIENTVCAyMDAxXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGcmFuY2lzIFMuTGluIDxwaWFpcEBjc2llLm50dS5lZHUudHc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRnJhbmNpcyBTLkxpbiA8cGlhaXBAY3NpZS5udHUuZWR1LnR3PiwgQ2VjaWwgU2hlbmcgIgorIjxiNzUwNjAyMkBjc2llLm50dS5lZHUudHc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9YmlnNVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDgtYml0XG4iCisKKyM6IGJ1ZmZlci5jOjk3Cittc2dpZCAiRTgyOiBDYW5ub3QgYWxsb2NhdGUgYW55IGJ1ZmZlciwgZXhpdGluZy4uLiIKK21zZ3N0ciAiRTgyOiC1TKprsHS4baX0pvO9d73EsM+hQcL3tn21e6ahLi4uIgorCisjOiBidWZmZXIuYzoxMDAKK21zZ2lkICJFODM6IENhbm5vdCBhbGxvY2F0ZSBidWZmZXIsIHVzaW5nIG90aGVyIG9uZS4uLiIKK21zZ3N0ciAiRTgzOiC1TKprsHS4bb13vcSwz6FBqM+lzqV0pECt0713vcSwzy4uLi4iCisKKyM6IGJ1ZmZlci5jOjc5NworbXNnaWQgIkU1MTU6IE5vIGJ1ZmZlcnMgd2VyZSB1bmxvYWRlZCIKK21zZ3N0ciAiRTUxNTogqFOms8TAqfGl9KbzvXe9xLDPIgorCisjOiBidWZmZXIuYzo3OTkKK21zZ2lkICJFNTE2OiBObyBidWZmZXJzIHdlcmUgZGVsZXRlZCIKK21zZ3N0ciAiRTUxNjogqFOms6dSsKOl9KbzvXe9xLDPIgorCisjOiBidWZmZXIuYzo4MDEKK21zZ2lkICJFNTE3OiBObyBidWZmZXJzIHdlcmUgd2lwZWQgb3V0IgorbXNnc3RyICJFNTE3OiCoU6azsk2wo6X0pvO9d73EsM8iCisKKyM6IGJ1ZmZlci5jOjgwOQorbXNnaWQgIjEgYnVmZmVyIHVubG9hZGVkIgorbXNnc3RyICKkd8TAqfGkQK3TvXe9xLDPIgorCisjOiBidWZmZXIuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyB1bmxvYWRlZCIKK21zZ3N0ciAipHfEwKnxICVkIK3TvXe9xLDPIgorCisjOiBidWZmZXIuYzo4MTYKK21zZ2lkICIxIGJ1ZmZlciBkZWxldGVkIgorbXNnc3RyICKkd6dSsKOkQK3TvXe9xLDPIgorCisjOiBidWZmZXIuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYnVmZmVycyBkZWxldGVkIgorbXNnc3RyICKkd6dSsKMgJWQgrdO9d73EsM8iCisKKyM6IGJ1ZmZlci5jOjgyMworbXNnaWQgIjEgYnVmZmVyIHdpcGVkIG91dCIKK21zZ3N0ciAipHenUrCjpECt0713vcSwzyIKKworIzogYnVmZmVyLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJ1ZmZlcnMgd2lwZWQgb3V0IgorbXNnc3RyICKkd6dSsKMgJWQgrdO9d73EsM8iCisKKyM6IGJ1ZmZlci5jOjg4NgorbXNnaWQgIkU4NDogTm8gbW9kaWZpZWQgYnVmZmVyIGZvdW5kIgorbXNnc3RyICJFODQ6IKhTprOt16fvuUyqur13vcSwzyIKKworIy4gYmFjayB3aGVyZSB3ZSBzdGFydGVkLCBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyM6IGJ1ZmZlci5jOjkyNQorbXNnaWQgIkU4NTogVGhlcmUgaXMgbm8gbGlzdGVkIGJ1ZmZlciIKK21zZ3N0ciAiRTg1OiCoU6azpkOlWKq6vXe9xLDPIgorCisjOiBidWZmZXIuYzo5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTg2OiBDYW5ub3QgZ28gdG8gYnVmZmVyICVsZCIKK21zZ3N0ciAiRTg2OiC1TKprpMG0q6jsssQgJWxkIK3TvXe9xLDPIgorCisjOiBidWZmZXIuYzo5NDAKK21zZ2lkICJFODc6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU4NzogtUyqa6TBtKuo7Kfzq+Gtsaq6vXe9xLDPIgorCisjOiBidWZmZXIuYzo5NDIKK21zZ2lkICJFODg6IENhbm5vdCBnbyBiZWZvcmUgZmlyc3QgYnVmZmVyIgorbXNnc3RyICJFODg6ILVMqmukwbSrqOyn86tlrbGqur13vcSwzyIKKworIzogYnVmZmVyLmM6OTY2Cittc2dpZCAiRTg5OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSBmb3IgYnVmZmVyICVsZCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFODk6IKR3p/On77lMvXe9xLDPICVsZCCm/al8pbymc8DJICilaaXOICEgsWqo7rD1puYpIgorCisjOiBidWZmZXIuYzo5ODIKK21zZ2lkICJFOTA6IENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIiCittc2dzdHIgIkU5MDogtUyqa8TAqfGzzKvhpECt0713vcSwzyIKKworIzogYnVmZmVyLmM6MTQ5NAorbXNnaWQgIlcxNDogV2FybmluZzogTGlzdCBvZiBmaWxlIG5hbWVzIG92ZXJmbG93IgorbXNnc3RyICJXMTQ6IMS1p2k6IMDJple5TKZoIgorCisjOiBidWZmZXIuYzoxNjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MjogQnVmZmVyICVsZCBub3QgZm91bmQiCittc2dzdHIgIkU5Mjogp+Sko6jsssQgJWxkIK3TvXe9xLDPIgorCisjOiBidWZmZXIuYzoxODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU5MzogTW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgJXMiCittc2dzdHIgIkU5Mzogp+So7KRArdOlSKRXqrogJXMiCisKKyM6IGJ1ZmZlci5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk0OiBObyBtYXRjaGluZyBidWZmZXIgZm9yICVzIgorbXNnc3RyICJFOTQ6IKfkpKOo7CAlcyIKKworIzogYnVmZmVyLmM6MjI5NyBleF9kb2NtZC5jOjY0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQiCittc2dzdHIgIqbmICVsZCIKKworIzogYnVmZmVyLmM6MjM4MAorbXNnaWQgIkU5NTogQnVmZmVyIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFOTU6IKR3prO9d73EsM+oz6XOs2+t06ZXpnIiCisKKyM6IGJ1ZmZlci5jOjI2NzMKK21zZ2lkICIgW01vZGlmaWVkXSIKK21zZ3N0ciAiIFukd63Xp+9dIgorCisjOiBidWZmZXIuYzoyNjc4Cittc2dpZCAiW05vdCBlZGl0ZWRdIgorbXNnc3RyICJbpby9c7/oXSIKKworIzogYnVmZmVyLmM6MjY4MworbXNnaWQgIltOZXcgZmlsZV0iCittc2dzdHIgIlu3c8DJrtddIgorCisjOiBidWZmZXIuYzoyNjg0Cittc2dpZCAiW1JlYWQgZXJyb3JzXSIKK21zZ3N0ciAiW8WqqPq/+bt+XSIKKworIzogYnVmZmVyLmM6MjY4NiBmaWxlaW8uYzoxOTE0Cittc2dpZCAiW3JlYWRvbmx5XSIKK21zZ3N0ciAiW7DfxapdIgorCisjOiBidWZmZXIuYzoyNzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAtLSVkJSUtLSIKK21zZ3N0ciAipua8xiAxIC0tJWQlJS0tIgorCisjOiBidWZmZXIuYzoyNzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAtLSVkJSUtLSIKK21zZ3N0ciAipua8xiAlbGQgLS0lZCUlLS0iCisKKyM6IGJ1ZmZlci5jOjI3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQgb2YgJWxkIC0tJWQlJS0tIGNvbCAiCittc2dzdHIgIqbmICVsZC8lbGQgLS0lZCUlLS0gxOYgIgorCisjOiBidWZmZXIuYzoyODExCittc2dpZCAiW05vIGZpbGVdIgorbXNnc3RyICJbpbypUqZXXSIKKworIy4gbXVzdCBiZSBhIGhlbHAgYnVmZmVyCisjOiBidWZmZXIuYzoyODUxCittc2dpZCAiaGVscCIKK21zZ3N0ciAiW7uyp1W7oan6XSIKKworIzogYnVmZmVyLmM6MzQwNSBzY3JlZW4uYzo0OTQzCittc2dpZCAiW2hlbHBdIgorbXNnc3RyICJbu7KnVbuhqfpdIgorCisjOiBidWZmZXIuYzozNDM3IHNjcmVlbi5jOjQ5NDkKK21zZ2lkICJbUHJldmlld10iCittc2dzdHIgIlu5d8T9XSIKKworIzogYnVmZmVyLmM6MzcwOAorbXNnaWQgIkFsbCIKK21zZ3N0ciAipf6zoSIKKworIzogYnVmZmVyLmM6MzcwOAorbXNnaWQgIkJvdCIKK21zZ3N0ciAiqbO63SIKKworIzogYnVmZmVyLmM6MzcxMAorbXNnaWQgIlRvcCIKK21zZ3N0ciAis7u63SIKKworIzogYnVmZmVyLmM6NDQ1NAorbXNnaWQgIiIKKyJcbiIKKyIjIEJ1ZmZlciBsaXN0OlxuIgorbXNnc3RyICIiCisiXG4iCisiIyC9d73EsM+mQ6rtOlxuIgorCisjOiBidWZmZXIuYzo0NDg3Cittc2dpZCAiW0Vycm9yIExpc3RdIgorbXNnc3RyICJbv/m7fqZDqu1dIgorCisjOiBidWZmZXIuYzo0NTAwIG1lbWxpbmUuYzoxNTAxCittc2dpZCAiW05vIEZpbGVdIgorbXNnc3RyICJbpbypUqZXXSIKKworIzogYnVmZmVyLmM6NDgwMworbXNnaWQgIiIKKyJcbiIKKyItLS0gU2lnbnMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tILLFuLkgLS0tIgorCisjOiBidWZmZXIuYzo0ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNpZ25zIGZvciAlczoiCittc2dzdHIgIiVzIKq6ssW4uToiCisKKyM6IGJ1ZmZlci5jOjQ4MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGxpbmU9JWxkICBpZD0lZCAgbmFtZT0lcyIKK21zZ3N0ciAiICAgIKbmPSVsZCAgaWQ9JWQgIKZXutk9JXMiCisKKyM6IGRpZmYuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTk2OiBDYW4gbm90IGRpZmYgbW9yZSB0aGFuICVsZCBidWZmZXJzIgorbXNnc3RyICJFOTY6ILVMqmuk8bj7KGRpZmYpICVsZK3TpUikV6q6vXe9xLDPIgorCisjOiBkaWZmLmM6NjUxCittc2dpZCAiRTk3OiBDYW5ub3QgY3JlYXRlIGRpZmZzIgorbXNnc3RyICJFOTc6IKSjr+Cr2KXfICIKKworIzogZGlmZi5jOjc1MAorbXNnaWQgIlBhdGNoIGZpbGUiCittc2dzdHIgIlBhdGNoIMDJrtciCisKKyM6IGRpZmYuYzoxMDAxCittc2dpZCAiRTk4OiBDYW5ub3QgcmVhZCBkaWZmIG91dHB1dCIKK21zZ3N0ciAiRTk4OiC1TKprxaqo+iBkaWZmIKq6v+mlWCIKKworIzogZGlmZi5jOjE3NDIKK21zZ2lkICJFOTk6IEN1cnJlbnQgYnVmZmVyIGlzIG5vdCBpbiBkaWZmIG1vZGUiCittc2dzdHIgIkU5OTogpdirZaq6vXe9xLDPpKOsT6ZiIGRpZmYgvNKmoSIKKworIzogZGlmZi5jOjE3NTQKK21zZ2lkICJFMTAwOiBObyBvdGhlciBidWZmZXIgaW4gZGlmZiBtb2RlIgorbXNnc3RyICJFMTAwOiCoU6azvXe9xLDPpmIgZGlmZiC80qahIgorCisjOiBkaWZmLmM6MTc2MgorbXNnaWQgIkUxMDE6IE1vcmUgdGhhbiB0d28gYnVmZmVycyBpbiBkaWZmIG1vZGUsIGRvbid0IGtub3cgd2hpY2ggb25lIHRvIHVzZSIKK21zZ3N0ciAiRTEwMTogprOo4q3TpUikV6q6vXe9xLDPpmIgZGlmZiC80qahoUG1TKprqE2pd61upc6t/qRArdMiCisKKyM6IGRpZmYuYzoxNzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDI6IENhbid0IGZpbmQgYnVmZmVyIFwiJXNcIiIKK21zZ3N0ciAiRTEwMjogp+Sko6jsvXe9xLDPOiBcIiVzXCIiCisKKyM6IGRpZmYuYzoxNzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDM6IEJ1ZmZlciBcIiVzXCIgaXMgbm90IGluIGRpZmYgbW9kZSIKK21zZ3N0ciAiRTEwMzogvXe9xLDPIFwiJXNcIiCko6xPpmIgZGlmZiC80qahIgorCisjOiBkaWdyYXBoLmM6MjE3MgorbXNnaWQgIkUxMDQ6IEVzY2FwZSBub3QgYWxsb3dlZCBpbiBkaWdyYXBoIgorbXNnc3RyICJFMTA0OiC9xqZYpnKkuChkaWdyYXBoKaSkpKOv4KjPpc4gRXNjYXBlIgorCisjOiBkaWdyYXBoLmM6MjM0NAorbXNnaWQgIkU1NDQ6IEtleW1hcCBmaWxlIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTU0NDogp+Sko6jsIGtleW1hcCDAySIKKworIzogZGlncmFwaC5jOjIzNzEKK21zZ2lkICJFMTA1OiBVc2luZyA6bG9hZGtleW1hcCBub3QgaW4gYSBzb3VyY2VkIGZpbGUiCittc2dzdHIgIkUxMDU6IKjPpc4gOmxvYWRrZXltYXAgIgorCisjOiBlZGl0LmM6NDAKK21zZ2lkICIgS2V5d29yZCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiDD9sHkpnKm27DKp7mmqCAoXk4vXlApIgorCisjLiBjdHJsX3hfbW9kZSA9PSAwLCBeUC9eTiBjb21wbC4KKyM6IGVkaXQuYzo0MQorbXNnaWQgIiBeWCBtb2RlICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eVi9eTi9eUCkiCittc2dzdHIgIiBeWCC80qahICheRS9eWS9eTC9eXS9eRi9eSS9eSy9eRC9eTi9eUCkiCisKKyMuIFNjcm9sbCBoYXMgaXQncyBvd24gbXNncywgaW4gaXQncyBwbGFjZSB0aGVyZSBpcyB0aGUgbXNnIGZvciBsb2NhbAorIy4gKiBjdHJsX3hfbW9kZSA9IDAgKGVnIGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfTE9DQUwpICAtLSBBY2V2ZWRvCisjOiBlZGl0LmM6NDQKK21zZ2lkICIgS2V5d29yZCBMb2NhbCBjb21wbGV0aW9uICheTi9eUCkiCittc2dzdHIgIiCwz7Dsw/bB5KZyptuwyqe5pqggKF5OL15QKSIKKworIzogZWRpdC5jOjQ1Cittc2dpZCAiIFdob2xlIGxpbmUgY29tcGxldGlvbiAoXkwvXk4vXlApIgorbXNnc3RyICIgvuOm5qbbsMqnuaaoICheTC9eTi9eUCkiCisKKyM6IGVkaXQuYzo0NgorbXNnaWQgIiBGaWxlIG5hbWUgY29tcGxldGlvbiAoXkYvXk4vXlApIgorbXNnc3RyICIgwMmmV6bbsMqnuaaoICheRi9eTi9eUCkiCisKKyM6IGVkaXQuYzo0NworbXNnaWQgIiBUYWcgY29tcGxldGlvbiAoXl0vXk4vXlApIgorbXNnc3RyICIgvNDF0qbbsMqnuaaoICheXS9eTi9eUCkiCisKKyM6IGVkaXQuYzo0OAorbXNnaWQgIiBQYXRoIHBhdHRlcm4gY29tcGxldGlvbiAoXk4vXlApIgorbXNnc3RyICIguPSufKbbsMqnuaaoICheTi9eUCkiCisKKyM6IGVkaXQuYzo0OQorbXNnaWQgIiBEZWZpbml0aW9uIGNvbXBsZXRpb24gKF5EL15OL15QKSIKK21zZ3N0ciAiIKl3uHGm27DKp7mmqCAoXkQvXk4vXlApIgorCisjOiBlZGl0LmM6NTEKK21zZ2lkICIgRGljdGlvbmFyeSBjb21wbGV0aW9uICheSy9eTi9eUCkiCittc2dzdHIgIiCmcqjlptuwyqe5pqggKF5LL15OL15QKSIKKworIzogZWRpdC5jOjUyCittc2dpZCAiIFRoZXNhdXJ1cyBjb21wbGV0aW9uICheVC9eTi9eUCkiCittc2dzdHIgIiBUaGVzYXVydXMgptuwyqe5pqggKF5UL15OL15QKSIKKworIzogZWRpdC5jOjUzCittc2dpZCAiIENvbW1hbmQtbGluZSBjb21wbGV0aW9uICheVi9eTi9eUCkiCittc2dzdHIgIiCpUqVPpkOm27DKp7mmqCAoXlYvXk4vXlApIgorCisjOiBlZGl0LmM6NTYKK21zZ2lkICJIaXQgZW5kIG9mIHBhcmFncmFwaCIKK21zZ3N0ciAipHeo7KxxuKi1sqfAIgorCisjOiBlZGl0LmM6OTQxCittc2dpZCAiJ3RoZXNhdXJ1cycgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICK/77a1ICd0aGVzYXVydXMnIKW8s12pdyIKKworIzogZWRpdC5jOjExNDUKK21zZ2lkICInZGljdGlvbmFyeScgb3B0aW9uIGlzIGVtcHR5IgorbXNnc3RyICK/77a1ICdkaWN0aW9uYXJ5JyClvLNdqXciCisKKyM6IGVkaXQuYzoyMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGRpY3Rpb25hcnk6ICVzIgorbXNnc3RyICKxvbrLpnKo5TogJXMiCisKKyM6IGVkaXQuYzoyMzM2Cittc2dpZCAiIChpbnNlcnQpIFNjcm9sbCAoXkUvXlkpIgorbXNnc3RyICIgKLShpEopIFNjcm9sbCAoXkUvXlkpIgorCisjOiBlZGl0LmM6MjMzOAorbXNnaWQgIiAocmVwbGFjZSkgU2Nyb2xsICheRS9eWSkiCittc2dzdHIgIiAoqPqlTikgU2Nyb2xsICheRS9eWSkiCisKKyM6IGVkaXQuYzoyNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nOiAlcyIKK21zZ3N0ciAisb26y6SkOiAlcyIKKworIzogZWRpdC5jOjI2ODcKK21zZ2lkICJTY2FubmluZyB0YWdzLiIKK21zZ3N0ciAisb26y7zQxdIuIgorCisjOiBlZGl0LmM6MzM0OQorbXNnaWQgIiBBZGRpbmciCittc2dzdHIgIiC8V6VbIgorCisjLiBzaG93bW9kZSBtaWdodCByZXNldCB0aGUgaW50ZXJuYWwgbGluZSBwb2ludGVycywgc28gaXQgbXVzdAorIy4gKiBiZSBjYWxsZWQgYmVmb3JlIGxpbmUgPSBtbF9nZXQoKSwgb3Igd2hlbiB0aGlzIGFkZHJlc3MgaXMgbm8KKyMuICogbG9uZ2VyIG5lZWRlZC4gIC0tIEFjZXZlZG8uCisjLgorIzogZWRpdC5jOjMzOTgKK21zZ2lkICItLSBTZWFyY2hpbmcuLi4iCittc2dzdHIgIi0tILdqtE2kpC4uLiIKKworIzogZWRpdC5jOjM0NTQKK21zZ2lkICJCYWNrIGF0IG9yaWdpbmFsIgorbXNnc3RyICKmXqjssF/CSSIKKworIzogZWRpdC5jOjM0NTkKK21zZ2lkICJXb3JkIGZyb20gb3RoZXIgbGluZSIKK21zZ3N0ciAisXGnT6bmtn2pbKq6pnIgKD8pIgorCisjOiBlZGl0LmM6MzQ2NAorbXNnaWQgIlRoZSBvbmx5IG1hdGNoIgorbXNnc3RyICKldaazprm2tbLFplgiCisKKyM6IGVkaXQuYzozNTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIG9mICVkIgorbXNnc3RyICKn5KjsICVkIC8gJWQiCisKKyM6IGVkaXQuYzozNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hdGNoICVkIgorbXNnc3RyICKyxaZYICVkIgorCisjLiBTa2lwIGZ1cnRoZXIgYXJndW1lbnRzIGJ1dCBkbyBjb250aW51ZSB0bworIy4gKiBzZWFyY2ggZm9yIGEgdHJhaWxpbmcgY29tbWFuZC4KKyM6IGV2YWwuYzo4ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNjogVW5rbm93biB2YXJpYWJsZTogXCIlc1wiIgorbXNnc3RyICJFMTA2OiClvKl3uHGqusXcvMY6IFwiJXNcIiIKKworIzogZXZhbC5jOjExODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEwNzogTWlzc2luZyBicmFjZXM6ICVzIgorbXNnc3RyICJFMTA3OiCvyqTWue/As6q6rEG4uTogJXMiCisKKyM6IGV2YWwuYzoxMjkwIGV2YWwuYzoxMzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMDg6IE5vIHN1Y2ggdmFyaWFibGU6IFwiJXNcIiIKK21zZ3N0ciAiRTEwODogtUymucXcvMY6IFwiJXNcIiIKKworIzogZXZhbC5jOjE1NjAKK21zZ2lkICJFMTA5OiBNaXNzaW5nICc6JyBhZnRlciAnPyciCittc2dzdHIgIkUxMDk6ICc/JyCr4a/KpNYgJzonIgorCisjOiBldmFsLmM6MjE3NgorbXNnaWQgIkUxMTA6IE1pc3NpbmcgJyknIgorbXNnc3RyICJFMTEwOiCvyqTWue/As6q6IFwiKVwiIgorCisjOiBldmFsLmM6MjIzMworbXNnaWQgIkUxMTE6IE1pc3NpbmcgJ10nIgorbXNnc3RyICJFMTExOiCvyqTWue/As6q6IFwiXVwiIgorCisjOiBldmFsLmM6MjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTEyOiBPcHRpb24gbmFtZSBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiRTExMjogr8qk1r/vtrWmV7rZOiAlcyIKKworIzogZXZhbC5jOjIzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExMzogVW5rbm93biBvcHRpb246ICVzIgorbXNnc3RyICJFMTEzOiCko6W/vVSqur/vtrU6ICVzIgorCisjOiBldmFsLmM6MjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE0OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNDogr8qk1qTeuLk6ICVzIgorCisjOiBldmFsLmM6MjUyMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE1OiBNaXNzaW5nIHF1b3RlOiAlcyIKK21zZ3N0ciAiRTExNTogr8qk1qTeuLk6ICVzIgorCisjOiBldmFsLmM6Mjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJFMTE2OiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJXMiCittc2dzdHIgIkUxMTY6IKjnpqEgJXMgqrqk3rzGpKOlv71UIgorCisjOiBldmFsLmM6Mjg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTE3OiBVbmtub3duIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExNzogpbypd7hxqrqo56ahOiAlcyIKKworIzogZXZhbC5jOjI4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExODogVG9vIG1hbnkgYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMTg6IKjnpqEgJXMgqrqk3rzGuUymaCIKKworIzogZXZhbC5jOjI4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIKK21zZ3N0ciAiRTExOTogqOemoSAlcyCquqTevMak06TWIgorCisjOiBldmFsLmM6Mjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJFMTIwOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dDogJXMiCittc2dzdHIgIkUxMjA6IDxTSUQ+IKSjr+CmYiBzY3JpcHQgpbuk5aV+qM+lzjogJXMiCisKKyMuCisjLiAqIFllcyB0aGlzIGlzIHVnbHksIEkgZG9uJ3QgcGFydGljdWxhcmx5IGxpa2UgaXQgZWl0aGVyLiAgQnV0IGRvaW5nIGl0CisjLiAqIHRoaXMgd2F5IGhhcyB0aGUgY29tcGVsbGluZyBhZHZhbnRhZ2UgdGhhdCB0cmFuc2xhdGlvbnMgbmVlZCBub3QgdG8KKyMuICogYmUgdG91Y2hlZCBhdCBhbGwuICBTZWUgYmVsb3cgd2hhdCAnb2snIGFuZCAneW5jJyBhcmUgdXNlZCBmb3IuCisjLgorIzogZXZhbC5jOjM0NjUgZ3VpLmM6NDIzOCBndWlfZ3RrLmM6MTk5MQorbXNnaWQgIiZPayIKK21zZ3N0ciAivVSpdygmTykiCisKKyM6IGV2YWwuYzo0MDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIistJXMlM2xkIGxpbmVzOiAiCittc2dzdHIgIistJXMlM2xkIKbmOiAiCisKKyM6IGV2YWwuYzo1MTQ5Cittc2dpZCAiIgorIiZPS1xuIgorIiZDYW5jZWwiCittc2dzdHIgIiIKKyK9VKl3KCZPKVxuIgorIqj6rvgoJkMpIgorCisjOiBldmFsLmM6NTE4MgorbXNnaWQgImNhbGxlZCBpbnB1dHJlc3RvcmUoKSBtb3JlIG9mdGVuIHRoYW4gaW5wdXRzYXZlKCkiCittc2dzdHIgIqlJpXMgaW5wdXRyZXN0b3JlKCkgqrqmuLzGpPEgaW5wdXRzYXZlKCkgwdmmaCIKKworIzogZXZhbC5jOjYwMzYKK21zZ2lkICJFMjQwOiBObyBjb25uZWN0aW9uIHRvIFZpbSBzZXJ2ZXIiCittc2dzdHIgIkUyNDA6IKhTprO7UCBWaW0gU2VydmVyIKvYpd+zc711IgorCisjOiBldmFsLmM6NjEzMworbXNnaWQgIkUyNzc6IFVuYWJsZSB0byByZWFkIGEgc2VydmVyIHJlcGx5IgorbXNnc3RyICJFMjc3OiC1TKprxaqo+qb4qkG+uaq6pl7AsyIKKworIzogZXZhbC5jOjYxNjEKK21zZ2lkICJFMjU4OiBVbmFibGUgdG8gc2VuZCB0byBjbGllbnQiCittc2dzdHIgIkUyNTg6ILVMqmu2x7BlqOwgY2xpZW50IgorCisjOiBldmFsLmM6NjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQxOiBVbmFibGUgdG8gc2VuZCB0byAlcyIKK21zZ3N0ciAiRTI0MTogtUyqa7bHsGWo7CAlcyIKKworIzogZXZhbC5jOjYzMDkKK21zZ2lkICIoSW52YWxpZCkiCittc2dzdHIgIiiko6W/vVQpIgorCisjOiBldmFsLmM6NzQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgorbXNnc3RyICJFMTIxOiDF3LzGICVzIKl8pbypd7hxIgorCisjOiBldmFsLmM6NzgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYxOiBJbGxlZ2FsIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJFNDYxOiCko6ZYqmuqusXcvMamV7rZOiAlcyIKKworIzogZXZhbC5jOjgxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEyMjogRnVuY3Rpb24gJXMgYWxyZWFkeSBleGlzdHMsIGFkZCAhIHRvIHJlcGxhY2UgaXQiCittc2dzdHIgIkUxMjI6IKjnpqEgJXMgpHe4Z6ZzpmIsIL3QqM+lziAhILFqqO6o+qVOIgorCisjOiBldmFsLmM6ODE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTIzOiBVbmRlZmluZWQgZnVuY3Rpb246ICVzIgorbXNnc3RyICJFMTIzOiCo56ahICVzIKl8pbypd7hxIgorCisjOiBldmFsLmM6ODIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI0OiBNaXNzaW5nICcoJzogJXMiCittc2dzdHIgIkUxMjQ6IK/KpNYgXCIoXCI6ICVzIgorCisjOiBldmFsLmM6ODIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI1OiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTEyNTogsNG8xqSjpb+9VDogJXMiCisKKyM6IGV2YWwuYzo4MzEzCittc2dpZCAiRTEyNjogTWlzc2luZyA6ZW5kZnVuY3Rpb24iCittc2dzdHIgIkUxMjY6IK/KpNYgOmVuZGZ1bmN0aW9uIgorCisjOiBldmFsLmM6ODM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI3OiBDYW5ub3QgcmVkZWZpbmUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEyNzogqOemoSAlcyClv6ZiqM+lzqSkoUG1TKprrau3c6l3uHEiCisKKyM6IGV2YWwuYzo4NDY0Cittc2dpZCAiRTEyOTogRnVuY3Rpb24gbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiRTEyOTogu92tbqjnpqGmV7rZIgorCisjOiBldmFsLmM6ODUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTI4OiBGdW5jdGlvbiBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWw6ICVzIgorbXNnc3RyICJFMTI4OiCo56ahple62bLEpECt06ZypcClsra3pGq8ZzogJXMiCisKKyM6IGV2YWwuYzo4NzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzA6IFVuZGVmaW5lZCBmdW5jdGlvbjogJXMiCittc2dzdHIgIkUxMzA6IKjnpqEgJXMgqXylvKl3uHEiCisKKyM6IGV2YWwuYzo4NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxMzE6IENhbm5vdCBkZWxldGUgZnVuY3Rpb24gJXM6IEl0IGlzIGluIHVzZSIKK21zZ3N0ciAiRTEzMTogqOemoSAlcyClv6ZiqM+lzqSkoUG1TKprp1KwoyIKKworIzogZXZhbC5jOjg3NjAKK21zZ2lkICJFMTMyOiBGdW5jdGlvbiBjYWxsIGRlcHRoIGlzIGhpZ2hlciB0aGFuICdtYXhmdW5jZGVwdGgnIgorbXNnc3RyICJFMTMyOiCo56ahu7ywaqlJpXO8aLzGtle5TCAnbWF4ZnVuY2RlcHRoJyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODgxMworIywgYy1mb3JtYXQKK21zZ2lkICJjYWxsaW5nICVzIgorbXNnc3RyICKpSaVzICVzIgorCisjOiBldmFsLmM6ODg2NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhYm9ydGVkIgorbXNnc3RyICIlcyCzUbFqqO6kpMJfsPWm5iIKKworIzogZXZhbC5jOjg4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nICMlbGQiCittc2dzdHIgIiVzILbHpl6tyCAjJWxkICIKKworIzogZXZhbC5jOjg4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmV0dXJuaW5nIFwiJXNcIiIKK21zZ3N0ciAiJXMgtsemXq3IIFwiJXNcIiIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBldmFsLmM6ODg4OCBleF9jbWRzMi5jOjIyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29udGludWluZyBpbiAlcyIKK21zZ3N0ciAixH7E8jogJXMiCisKKyM6IGV2YWwuYzo4OTM1Cittc2dpZCAiRTEzMzogOnJldHVybiBub3QgaW5zaWRlIGEgZnVuY3Rpb24iCittc2dzdHIgIkUxMzM6IDpyZXR1cm4gpbK2t6ZiqOemobjMqM+lziIKKworIzogZXZhbC5jOjkyNjYKK21zZ2lkICIiCisiXG4iCisiIyBnbG9iYWwgdmFyaWFibGVzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyCl/rDsxdy8xjpcbiIKKworIzogZXhfY21kcy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIjwlcz4lcyVzICAlZCwgIEhleCAlMDJ4LCAgT2N0YWwgJTAzbyIKK21zZ3N0ciAiPCVzPiVzJXMgICVkLCAgpFGku7ZppuwgJTAyeCwgIKRLtmmm7CAlMDNvIgorCisjOiBleF9jbWRzLmM6NDMzCittc2dpZCAiRTEzNDogTW92ZSBsaW5lcyBpbnRvIHRoZW1zZWx2ZXMiCittc2dzdHIgIkUxMzQ6ILVMqmun4qbmsr6o7KWmptukd6S6IgorCisjOiBleF9jbWRzLmM6NTAyCittc2dpZCAiMSBsaW5lIG1vdmVkIgorbXNnc3RyICKkd7dosr4gMSCm5iIKKworIzogZXhfY21kcy5jOjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgbW92ZWQiCittc2dzdHIgIqR3t2iyviAlbGQgpuYiCisKKyM6IGV4X2NtZHMuYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzIGZpbHRlcmVkIgorbXNnc3RyICKkd7NCsnogJWxkIKbmIgorCisjOiBleF9jbWRzLmM6OTM3Cittc2dpZCAiRTEzNTogKkZpbHRlciogQXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTEzNTogKkZpbHRlciogQXV0b2NvbW1hbmQgpKOlaaVIp/On7713vcSwz6q6pLquZSIKKworIzogZXhfY21kcy5jOjEwMjIKK21zZ2lkICJbTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2VdXG4iCittc2dzdHIgIlun87dzq+GpfKW8wHimc11cbiIKKworIzogZXhfY21kcy5jOjEyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXN2aW1pbmZvOiAlcyBpbiBsaW5lOiAiCittc2dzdHIgIiVzdmltaW5mbzogJXMgpmKm5qSkOiAiCisKKyM6IGV4X2NtZHMuYzoxMjczCittc2dpZCAiRTEzNjogdmltaW5mbzogVG9vIG1hbnkgZXJyb3JzLCBza2lwcGluZyByZXN0IG9mIGZpbGUiCittc2dzdHIgIkUxMzY6IHZpbWluZm86ILlMpmi/+bt+LCCpv7KkwMmu16jkvmyzoaTAIgorCisjOiBleF9jbWRzLmM6MTMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkaW5nIHZpbWluZm8gZmlsZSBcIiVzXCIlcyVzJXMiCittc2dzdHIgIsWqqPogdmltaW5mbyDAya7XIFwiJXNcIiVzJXMlcyIKKworIzogZXhfY21kcy5jOjEzMDMKK21zZ2lkICIgaW5mbyIKK21zZ3N0ciAiILBUrqciCisKKyM6IGV4X2NtZHMuYzoxMzA0Cittc2dpZCAiIG1hcmtzIgorbXNnc3RyICIgvNCwTyIKKworIzogZXhfY21kcy5jOjEzMDUKK21zZ2lkICIgRkFJTEVEIgorbXNnc3RyICIgpaKx0SIKKworIzogZXhfY21kcy5jOjEzOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzNzogVmltaW5mbyBmaWxlIGlzIG5vdCB3cml0YWJsZTogJXMiCittc2dzdHIgIkUxMzc6IFZpbWluZm8gwMmu17VMqmu8Z6RKOiAlcyIKKworIzogZXhfY21kcy5jOjE1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTEzODogQ2FuJ3Qgd3JpdGUgdmltaW5mbyBmaWxlICVzISIKK21zZ3N0ciAiRTEzODogtUyqa7xnpEogdmltaW5mbyDAya7XICVzICEiCisKKyM6IGV4X2NtZHMuYzoxNTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiIKK21zZ3N0ciAivGekSiB2aW1pbmZvIMDJrtcgXCIlc1wiIKSkIgorCisjLiBXcml0ZSB0aGUgaW5mbzoKKyM6IGV4X2NtZHMuYzoxNjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiMgVGhpcyB2aW1pbmZvIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBWaW0gJXMuXG4iCittc2dzdHIgIiMgpbsgdmltaW5mbyDAya7XrE+l0SBWaW0gJXMgqdKyo6XNLlxuIgorCisjOiBleF9jbWRzLmM6MTYyOQorbXNnaWQgIiIKKyIjIFlvdSBtYXkgZWRpdCBpdCBpZiB5b3UncmUgY2FyZWZ1bCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiMgpnCqR7dRrW6m26bmrden773Qr1OnT6RwpN+hSVxuIgorIlxuIgorCisjOiBleF9jbWRzLmM6MTYzMQorbXNnaWQgIiMgVmFsdWUgb2YgJ2VuY29kaW5nJyB3aGVuIHRoaXMgZmlsZSB3YXMgd3JpdHRlblxuIgorbXNnc3RyICIjICdlbmNvZGluZycgpmKmucDJq9il367JqrqtyFxuIgorCisjOiBleF9jbWRzLmM6MTczMAorbXNnaWQgIklsbGVnYWwgc3RhcnRpbmcgY2hhciIKK21zZ3N0ciAitUyuxKq6sF+pbKZypLgiCisKKyM6IGV4X2NtZHMuYzoyMDc1IGV4X2NtZHMuYzoyMzQwIGV4X2NtZHMyLmM6NzQ0Cittc2dpZCAiU2F2ZSBBcyIKK21zZ3N0ciAipXSmc7dzwMkiCisKKyMuIE92ZXJ3cml0aW5nIGEgZmlsZSB0aGF0IGlzIGxvYWRlZCBpbiBhbm90aGVyIGJ1ZmZlciBpcyBub3QgYQorIy4gKiBnb29kIGlkZWEuCisjOiBleF9jbWRzLmM6MjExOAorbXNnaWQgIkUxMzk6IEZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIgYnVmZmVyIgorbXNnc3RyICJFMTM5OiCxeqZipXSkQK3TvXe9xLDPpF24/KRKpEazb63TwMmu1yIKKworIzogZXhfY21kcy5jOjIxNTIKK21zZ2lkICJXcml0ZSBwYXJ0aWFsIGZpbGU/IgorbXNnc3RyICKtbrxnpEqzoaTAwMmu17bcoUgiCisKKyM6IGV4X2NtZHMuYzoyMTU5Cittc2dpZCAiRTE0MDogVXNlICEgdG8gd3JpdGUgcGFydGlhbCBidWZmZXIiCittc2dzdHIgIkUxNDA6IL3QqM+lziAhIKVIvGekSrOhpMC9d73EsM8iCisKKyM6IGV4X2NtZHMuYzoyMjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIFwiJS4qc1wiPyIKK21zZ3N0ciAirW7C0LxnpHemc6ZiqrrAya7XIFwiJS4qc1wioUgiCisKKyM6IGV4X2NtZHMuYzoyMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDE6IE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyICVsZCIKK21zZ3N0ciAiRTE0MTogvXe9xLDPICVsZCCoU6azwMmu16ZXutkiCisKKyM6IGV4X2NtZHMuYzoyMzgzCittc2dpZCAiRTE0MjogRmlsZSBub3Qgd3JpdHRlbjogV3JpdGluZyBpcyBkaXNhYmxlZCBieSAnd3JpdGUnIG9wdGlvbiIKK21zZ3N0ciAiRTE0MjogwMmu16W8vGekSqFBpl2ssCAnd3JpdGUnIL/vtrWzUcP2s6wiCisKKyM6IGV4X2NtZHMuYzoyNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgZm9yIFwiJS4qc1wiLlxuIgorIkRvIHlvdSB3aXNoIHRvIHdyaXRlIGFueXdheT8iCittc2dzdHIgIiIKKyJcIiUuKnNcIiCkd7NdqXcgJ3JlYWRvbmx5JyC/77a1LlxuIgorIr1UqXetbsLQvGe23KFIIgorCisjOiBleF9jbWRzLmM6MjU2OAorbXNnaWQgIkVkaXQgRmlsZSIKK21zZ3N0ciAivXO/6MDJrtciCisKKyM6IGV4X2NtZHMuYzozMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNDM6IEF1dG9jb21tYW5kcyB1bmV4cGVjdGVkbHkgZGVsZXRlZCBuZXcgYnVmZmVyICVzIgorbXNnc3RyICJFMTQzOiBBdXRvY29tbWFuZHMgt06lfqZhp1Kwo7dzvXe9xLDPICVzIgorCisjOiBleF9jbWRzLmM6MzI2OQorbXNnaWQgIkUxNDQ6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIDp6IgorbXNnc3RyICJFMTQ0OiA6eiCko7G1qPyrRLzGpnKqurDRvMYiCisKKyM6IGV4X2NtZHMuYzozMzU0Cittc2dpZCAiRTE0NTogU2hlbGwgY29tbWFuZHMgbm90IGFsbG93ZWQgaW4gcnZpbSIKK21zZ3N0ciAiRTE0NTogcnZpbSCkpLhUpO6oz6XOIHNoZWxsIKlSpU8iCisKKyM6IGV4X2NtZHMuYzozNDYxCittc2dpZCAiRTE0NjogUmVndWxhciBleHByZXNzaW9ucyBjYW4ndCBiZSBkZWxpbWl0ZWQgYnkgbGV0dGVycyIKK21zZ3N0ciAiRTE0NjogUmVndWxhciBleHByZXNzaW9uILVMqmulzqZypcCkwLlqICg/KSIKKworIzogZXhfY21kcy5jOjM4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSB3aXRoICVzICh5L24vYS9xL2wvXkUvXlkpPyIKK21zZ3N0ciAiqPqlTqywICVzICh5L24vYS9xL15FL15ZKT8iCisKKyM6IGV4X2NtZHMuYzo0MTcyCittc2dpZCAiKEludGVycnVwdGVkKSAiCittc2dzdHIgIiikd6Skwl8pICIKKworIzogZXhfY21kcy5jOjQxNzYKK21zZ2lkICIxIHN1YnN0aXR1dGlvbiIKK21zZ3N0ciAiqPqlTqRAstUiCisKKyM6IGV4X2NtZHMuYzo0MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBzdWJzdGl0dXRpb25zIgorbXNnc3RyICKo+qVOICVsZCCy1SIKKworIzogZXhfY21kcy5jOjQxODEKK21zZ2lkICIgb24gMSBsaW5lIgorbXNnc3RyICIgpECm5qSkIgorCisjOiBleF9jbWRzLmM6NDE4MworIywgYy1mb3JtYXQKK21zZ2lkICIgb24gJWxkIGxpbmVzIgorbXNnc3RyICIgJWxkIKbmpKQiCisKKyM6IGV4X2NtZHMuYzo0MjM0Cittc2dpZCAiRTE0NzogQ2Fubm90IGRvIDpnbG9iYWwgcmVjdXJzaXZlIgorbXNnc3RyICJFMTQ3OiA6Z2xvYmFsILVMqmu7vLBqsPWm5iIKKworIzogZXhfY21kcy5jOjQyNjkKK21zZ2lkICJFMTQ4OiBSZWd1bGFyIGV4cHJlc3Npb24gbWlzc2luZyBmcm9tIGdsb2JhbCIKK21zZ3N0ciAiRTE0ODogqFOms6jPpc65TCBSZWd1bGFyIGV4cHJlc3Npb24gKD8pIgorCisjOiBleF9jbWRzLmM6NDMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIGZvdW5kIGluIGV2ZXJ5IGxpbmU6ICVzIgorbXNnc3RyICKoQ6RApuazo6fkpKOo7DogJXMiCisKKyM6IGV4X2NtZHMuYzo0Mzk5Cittc2dpZCAiIgorIlxuIgorIiMgTGFzdCBTdWJzdGl0dXRlIFN0cmluZzpcbiIKKyIkIgorbXNnc3RyICIiCisiXG4iCisiIyCrZaRAstW0wKVOpnKm6jpcbiIKKyIkIgorCisjOiBleF9jbWRzLmM6NDUwMworIywgYy1mb3JtYXQKK21zZ2lkICJFMTQ5OiBTb3JyeSwgbm8gaGVscCBmb3IgJXMiCittc2dzdHIgIkUxNDk6IKnqunAsIKhTprMgJXMgqrq7oan6IgorCisjOiBleF9jbWRzLmM6NDUzNworIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgaGVscCBmaWxlIFwiJXNcIiBub3QgZm91bmQiCittc2dzdHIgIqnqunAsIKfkpKOo7LuhqfrAySBcIiVzXCIiCisKKyM6IGV4X2NtZHMuYzo1MDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTA6IE5vdCBhIGRpcmVjdG9yeTogJXMiCittc2dzdHIgIkUxNTA6ICVzIKSjrE+l2L/9IgorCisjOiBleF9jbWRzLmM6NTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTUyOiBDYW5ub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTE1MjogtUyqa6VIvGekSrzSpqG2fbHSIFwiJXNcIiIKKworIzogZXhfY21kcy5jOjUwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1MzogVW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIkUxNTM6ILVMqmvFqqj6wMmu1zogJXMiCisKKyM6IGV4X2NtZHMuYzo1MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTQ6IER1cGxpY2F0ZSB0YWcgXCIlc1wiIGluIGZpbGUgJXMiCittc2dzdHIgIkUxNTQ6ILzQxdIodGFnKSBcIiVzXCIgpmLAya7XICVzILjMrau9xqVYsnumaKa4IgorCisjOiBleF9jbWRzLmM6NTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYwOiBVbmtub3duIHNpZ24gY29tbWFuZDogJXMiCittc2dzdHIgIkUxNjA6IKW8qXe4caq6IHNpZ24gY29tbWFuZDogJXMiCisKKyM6IGV4X2NtZHMuYzo1MjgxCittc2dpZCAiRTE1NjogTWlzc2luZyBzaWduIG5hbWUiCittc2dzdHIgIkUxNTY6IK/KpNYgc2lnbiCmV7rZIgorCisjOiBleF9jbWRzLmM6NTMyNworbXNnaWQgIkU2MTI6IFRvbyBtYW55IHNpZ25zIGRlZmluZWQiCittc2dzdHIgIkU2MTI6IKR3qXe4caTTpmggc2lnbnMiCisKKyM6IGV4X2NtZHMuYzo1Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzk6IEludmFsaWQgc2lnbiB0ZXh0OiAlcyIKK21zZ3N0ciAiRTIzOTogpKOlv71Uqrogc2lnbiCk5aZyOiAlcyIKKworIzogZXhfY21kcy5jOjU0MjUgZXhfY21kcy5jOjU2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NTogVW5rbm93biBzaWduOiAlcyIKK21zZ3N0ciAiRTE1NTogpKOlv71Uqrogc2lnbjogJXMiCisKKyM6IGV4X2NtZHMuYzo1NDcxCittc2dpZCAiRTE1OTogTWlzc2luZyBzaWduIG51bWJlciIKK21zZ3N0ciAiRTE1OTogr8qk1iBzaWduIG51bWJlciIKKworIzogZXhfY21kcy5jOjU1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1ODogSW52YWxpZCBidWZmZXIgbmFtZTogJXMiCittc2dzdHIgIkUxNTg6IL13vcSwz6ZXutm/+bt+OiAlcyIKKworIzogZXhfY21kcy5jOjU1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE1NzogSW52YWxpZCBzaWduIElEOiAlbGQiCittc2dzdHIgIkUxNTc6IFNpZ24gSUQgv/m7fjogJWxkIgorCisjOiBleF9jbWRzLmM6NTc2MQorbXNnaWQgIltEZWxldGVkXSIKK21zZ3N0ciAiW6R3p1Kwo10iCisKKyM6IGV4X2NtZHMyLmM6ODIKK21zZ2lkICJFbnRlcmluZyBEZWJ1ZyBtb2RlLiAgVHlwZSBcImNvbnRcIiB0byBjb250aW51ZS4iCittc2dzdHIgIrZppEqwo7/5vNKmoS4gv+mkSiBcImNvbnRcIiClSKZeqOylv7FgvNKmoS4iCisKKyM6IGV4X2NtZHMyLmM6ODYgZXhfZG9jbWQuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6ICVzIgorbXNnc3RyICKm5iAlbGQ6ICVzIgorCisjOiBleF9jbWRzMi5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNtZDogJXMiCittc2dzdHIgImNtZDogJXMiCisKKyM6IGV4X2NtZHMyLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyZWFrcG9pbnQgaW4gXCIlcyVzXCIgbGluZSAlbGQiCittc2dzdHIgIlwiJXMlc1wiIKSkwl/CSTogssQgJWxkIKbmIgorCisjOiBleF9jbWRzMi5jOjUyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTYxOiBCcmVha3BvaW50IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUxNjE6IKfkpKOo7KSkwl/CSTogJXMiCisKKyM6IGV4X2NtZHMyLmM6NTQ3Cittc2dpZCAiTm8gYnJlYWtwb2ludHMgZGVmaW5lZCIKK21zZ3N0ciAiqFOms6l3uHGkpMJfwkkiCisKKyM6IGV4X2NtZHMyLmM6NTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUzZCAgJXMgJXMgIGxpbmUgJWxkIgorbXNnc3RyICIlM2QgICVzICVzICCyxCAlbGQgpuYiCisKKyM6IGV4X2NtZHMyLmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmUgY2hhbmdlcyB0byBcIiUuKnNcIj8iCittc2dzdHIgIrFOxdywyqZzwHim3CBcIiUuKnNcIj8iCisKKyM6IGV4X2NtZHMyLmM6NzY5IGV4X2RvY21kLmM6ODgyMAorbXNnaWQgIlVudGl0bGVkIgorbXNnc3RyICKlvKlSplciCisKKyM6IGV4X2NtZHMyLmM6OTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNjI6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIGZvciBidWZmZXIgXCIlc1wiIgorbXNnc3RyICJFMTYyOiCkd6fzp++5TL13vcSwzyBcIiVzXCIgpv2pfKW8pnPAySAopWmlziAhILFqqO6w9abmKSIKKworIzogZXhfY21kczIuYzo5NzQKK21zZ2lkICJXYXJuaW5nOiBFbnRlcmVkIG90aGVyIGJ1ZmZlciB1bmV4cGVjdGVkbHkgKGNoZWNrIGF1dG9jb21tYW5kcykiCittc2dzdHIgIqpgt046IKR3pMG0q6jsqOSlpr13vcSwzyAovdDAy6xkIEF1dG9jb21tYW5kcyCms7VMv/m7fikiCisKKyM6IGV4X2NtZHMyLmM6MTM3NworbXNnaWQgIkUxNjM6IFRoZXJlIGlzIG9ubHkgb25lIGZpbGUgdG8gZWRpdCIKK21zZ3N0ciAiRTE2MzogpXWms6RArdPAya7XpWm9c7/oIgorCisjOiBleF9jbWRzMi5jOjEzNzkKK21zZ2lkICJFMTY0OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IGZpbGUiCittc2dzdHIgIkUxNjQ6IKR3uGemYrLEpECt08DJrtekRiIKKworIzogZXhfY21kczIuYzoxMzgxCittc2dpZCAiRTE2NTogQ2Fubm90IGdvIGJleW9uZCBsYXN0IGZpbGUiCittc2dzdHIgIkUxNjU6IKR3uGemYrPMq+GkQK3TwMmu16RGIgorCisjOiBleF9jbWRzMi5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VhcmNoaW5nIGZvciBcIiVzXCIgaW4gXCIlc1wiIgorbXNnc3RyICK3arRNpKQ6IFwiJXNcIiAtLSBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWFyY2hpbmcgZm9yIFwiJXNcIiIKK21zZ3N0ciAit2q0TaSkOiBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MTg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZm91bmQgaW4gJ3J1bnRpbWVwYXRoJzogXCIlc1wiIgorbXNnc3RyICKmYiAncnVudGltZXBhdGgnILjMp+Sko6jsIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoxOTA1Cittc2dpZCAiU291cmNlIFZpbSBzY3JpcHQiCittc2dzdHIgIrD1puYgVmltIHNjcmlwdCIKKworIzogZXhfY21kczIuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIKK21zZ3N0ciAitUyqa7D1pual2L/9oUcgXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjIwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNvdXJjZSBcIiVzXCIiCittc2dzdHIgIrVMqmuw9abmIFwiJXNcIiIKKworIzogZXhfY21kczIuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgJWxkOiBjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIKK21zZ3N0ciAissQgJWxkIKbmOiC1TKprsPWm5iBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6MjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJzb3VyY2luZyBcIiVzXCIiCittc2dzdHIgIrD1puYgXCIlc1wiIKSkIgorCisjOiBleF9jbWRzMi5jOjIxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSAlbGQ6IHNvdXJjaW5nIFwiJXNcIiIKK21zZ3N0ciAissQgJWxkIKbmOiC1sqf0sPWm5iAlcyIKKworIzogZXhfY21kczIuYzoyMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNvdXJjaW5nICVzIgorbXNnc3RyICK1sqf0sPWm5iAlcyIKKworIzogZXhfY21kczIuYzoyNTI4Cittc2dpZCAiVzE1OiBXYXJuaW5nOiBXcm9uZyBsaW5lIHNlcGFyYXRvciwgXk0gbWF5IGJlIG1pc3NpbmciCittc2dzdHIgIlcxNTogqmC3Tjogv/m7fqq6puakwLlqpnKkuKFBpWmv4KxPpNakRiBeTSIKKworIzogZXhfY21kczIuYzoyNTc3Cittc2dpZCAiRTE2NzogOnNjcmlwdGVuY29kaW5nIHVzZWQgb3V0c2lkZSBvZiBhIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiRTE2NzogpmKw9abmIHNjcmlwdCDAya7XpX6ko6VpqM+lziA6c2NyaXB0ZW5jb2RpbmciCisKKyM6IGV4X2NtZHMyLmM6MjYxMAorbXNnaWQgIkUxNjg6IDpmaW5pc2ggdXNlZCBvdXRzaWRlIG9mIGEgc291cmNlZCBmaWxlIgorbXNnc3RyICJFMTY4OiCmYrD1puYgc2NyaXB0IMDJrtelfqSjpWmoz6XOIDpmaW5pc2giCisKKyM6IGV4X2NtZHMyLmM6MzAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJQYWdlICVkIgorbXNnc3RyICKyxCAlZCCttiIKKworIzogZXhfY21kczIuYzozMTE2Cittc2dpZCAiTm8gdGV4dCB0byBiZSBwcmludGVkIgorbXNnc3RyICKoU6azrW6mQ6ZMqrqk5aZyIgorCisjOiBleF9jbWRzMi5jOjMxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJpbnRpbmcgcGFnZSAlZCAoJWQlJSkiCittc2dzdHIgIqZDpkykpDogssQgJWQgrbYgKCVkJSUpIgorCisjOiBleF9jbWRzMi5jOjMyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIENvcHkgJWQgb2YgJWQiCittc2dzdHIgIr3Gu3MgJWQgLyAlZCIKKworIzogZXhfY21kczIuYzozMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlByaW50ZWQ6ICVzIgorbXNnc3RyICKkd6ZDpkw6ICVzIgorCisjOiBleF9jbWRzMi5jOjMyNjIKK21zZ2lkICJQcmludGluZyBhYm9ydGVkIgorbXNnc3RyICKkd6j6rvimQ6ZMIgorCisjOiBleF9jbWRzMi5jOjM2NDUKK21zZ2lkICJFNDU1OiBFcnJvciB3cml0aW5nIHRvIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkU0NTU6ILVMqmu8Z6RKIFBvc3RTY3JpcHQgv+mlWMDJIgorCisjOiBleF9jbWRzMi5jOjQzMjAKK21zZ2lkICJFMzI0OiBDYW4ndCBvcGVuIFBvc3RTY3JpcHQgb3V0cHV0IGZpbGUiCittc2dzdHIgIkUzMjQ6ILVMqmu2fbHSIFBvc3RTY3JpcHQgv+mlWMDJIgorCisjOiBleF9jbWRzMi5jOjQzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NjogtUyqa7Z9sdLAya7XIFwiJXNcIiIKKworIzogZXhfY21kczIuYzo0MzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0NTc6IENhbid0IHJlYWQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ1NzogtUyqa8WqqPogUG9zdFNjcmlwdCByZXNvdXJjZSDAySBcIiVzXCIiCisKKyM6IGV4X2NtZHMyLmM6NDU3NgorbXNnaWQgIlNlbmRpbmcgdG8gcHJpbnRlci4uLiIKK21zZ3N0ciAitsewZbjqrsao7KZMqu2+9y4uLiIKKworIzogZXhfY21kczIuYzo0NTgwCittc2dpZCAiRTM2NTogRmFpbGVkIHRvIHByaW50IFBvc3RTY3JpcHQgZmlsZSIKK21zZ3N0ciAiRTM2NTogtUyqa6ZDpkwgUG9zdFNjcmlwdCDAya7XIgorCisjOiBleF9jbWRzMi5jOjQ1ODIKK21zZ2lkICJQcmludCBqb2Igc2VudC4iCittc2dzdHIgIqR3sGWlWKZDpkykdadAoUMiCisKKyM6IGV4X2NtZHMyLmM6NDk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50ICVzbGFuZ3VhZ2U6IFwiJXNcIiIKK21zZ3N0ciAipdirZaq6ICVzu3mopTogXCIlc1wiIgorCisjOiBleF9jbWRzMi5jOjQ5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE5NzogQ2Fubm90IHNldCBsYW5ndWFnZSB0byBcIiVzXCIiCittc2dzdHIgIkUxOTc6IKSjr+CzXal3u3mopaaoIFwiJXNcIiIKKworIzogZXhfZG9jbWQuYzo0ODYKK21zZ2lkICJFbnRlcmluZyBFeCBtb2RlLiAgVHlwZSBcInZpc3VhbFwiIHRvIGdvIHRvIE5vcm1hbCBtb2RlLiIKK21zZ3N0ciAitmmkSiBFeCC80qahLiC/6aRKIFwidmlzdWFcIiClSKZeqOylv7FgvNKmoS4iCisKKyMuIG11c3QgYmUgYXQgRU9GCisjOiBleF9kb2NtZC5jOjUyMgorbXNnaWQgIkU1MDE6IEF0IGVuZC1vZi1maWxlIgorbXNnc3RyICJFNTAxOiCkd6jswMmu17Wyp8AiCisKKyM6IGV4X2RvY21kLmM6NjI0Cittc2dpZCAiRTE2OTogQ29tbWFuZCB0b28gcmVjdXJzaXZlIgorbXNnc3RyICJFMTY5OiCpUqVPu7ywarxovMa5TKZoIgorCisjOiBleF9kb2NtZC5jOjEwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYwNTogRXhjZXB0aW9uIG5vdCBjYXVnaHQ6ICVzIgorbXNnc3RyICJFNjA1OiClvMRkukmquqjSpX6hRyAlcyIKKworIzogZXhfZG9jbWQuYzoxMTc2Cittc2dpZCAiRW5kIG9mIHNvdXJjZWQgZmlsZSIKK21zZ3N0ciAiqVKlT8DJtbKn9CIKKworIzogZXhfZG9jbWQuYzoxMTc3Cittc2dpZCAiRW5kIG9mIGZ1bmN0aW9uIgorbXNnc3RyICKo56ahtbKnwCIKKworIzogZXhfZG9jbWQuYzoxNjI4Cittc2dpZCAiRTQ2NDogQW1iaWd1b3VzIHVzZSBvZiB1c2VyLWRlZmluZWQgY29tbWFuZCIKK21zZ3N0ciAiRTQ2NDogqM+lzqrMqXe4caq6qVKlT7d8slayYyIKKworIzogZXhfZG9jbWQuYzoxNjQyCittc2dpZCAiRTQ5MjogTm90IGFuIGVkaXRvciBjb21tYW5kIgorbXNnc3RyICJFNDkyOiCko6xPvXO/6L65qrqpUqVPIgorCisjOiBleF9kb2NtZC5jOjE3MjUKK21zZ2lkICJFNDc4OiBEb24ndCBwYW5pYyEiCittc2dzdHIgIkU0Nzg6IKSjrW7F5bdXISIKKworIzogZXhfZG9jbWQuYzoxNzQ0Cittc2dpZCAiRTQ5MzogQmFja3dhcmRzIHJhbmdlIGdpdmVuIgorbXNnc3RyICJFNDkzOiCr/Kl3pEamVqtlsNGm0qq6vWSz8iIKKworIzogZXhfZG9jbWQuYzoxNzUzCittc2dpZCAiQmFja3dhcmRzIHJhbmdlIGdpdmVuLCBPSyB0byBzd2FwIgorbXNnc3RyICKr/Kl3pEamVqtlsNGm0qq6vWSz8qFBT0sgdG8gc3dhcCIKKworIzogZXhfZG9jbWQuYzoxODY0Cittc2dpZCAiRTQ5NDogVXNlIHcgb3Igdz4+IgorbXNnc3RyICJFNDk0OiC90KjPpc4gdyCpziB3Pj4iCisKKyM6IGV4X2RvY21kLmM6MzQ0NgorbXNnaWQgIkUzMTk6IFNvcnJ5LCB0aGUgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiIKK21zZ3N0ciAiRTMxOTogqeq6cCwgpbupUqVPpmKmuaqppbukpKhTprO56qdAIgorCisjOiBleF9kb2NtZC5jOjM2MjQKK21zZ2lkICJFMTcyOiBPbmx5IG9uZSBmaWxlIG5hbWUgYWxsb3dlZCIKK21zZ3N0ciAiRTE3MjogpXWv4KazpECt08DJIgorCisjOiBleF9kb2NtZC5jOjQxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbW9yZSBmaWxlcyB0byBlZGl0LiAgUXVpdCBhbnl3YXk/IgorbXNnc3RyICLB2aazICVkIK3TwMmu16W8vXO/6C4gvVSpd61uwve2faFIIgorCisjOiBleF9kb2NtZC5jOjQxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3MzogJWxkIG1vcmUgZmlsZXMgdG8gZWRpdCIKK21zZ3N0ciAiRTE3MzogwdmmsyAlbGQgrdPAya7Xpby9c7/oIgorCisjOiBleF9kb2NtZC5jOjQyOTIKK21zZ2lkICJFMTc0OiBDb21tYW5kIGFscmVhZHkgZXhpc3RzOiBhZGQgISB0byByZXBsYWNlIGl0IgorbXNnc3RyICJFMTc0OiCpUqVPpHe4Z6ZzpmIsIL3QqM+lziAhILFqqO6tq7dzqXe4cSIKKworIzogZXhfZG9jbWQuYzo0Mzk3Cittc2dpZCAiIgorIlxuIgorIiAgICBOYW1lICAgICAgICBBcmdzIFJhbmdlIENvbXBsZXRlICBEZWZpbml0aW9uIgorbXNnc3RyICIiCisiXG4iCisiICAgIKZXutkgICAgICAgILDRvMYgvWSz8iAgp7m+4yAgICAgIKl3uHEgICAgICAiCisKKyM6IGV4X2RvY21kLmM6NDQ4NgorbXNnaWQgIk5vIHVzZXItZGVmaW5lZCBjb21tYW5kcyBmb3VuZCIKK21zZ3N0ciAip+Sko6jsqM+lzqrMqXe4caq6qVKlTyIKKworIzogZXhfZG9jbWQuYzo0NTE3Cittc2dpZCAiRTE3NTogTm8gYXR0cmlidXRlIHNwZWNpZmllZCIKK21zZ3N0ciAiRTE3NTogqFOms6v8qXequsTdqcoiCisKKyM6IGV4X2RvY21kLmM6NDU2OQorbXNnaWQgIkUxNzY6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTE3NjogpKOlv71Uqrqw0bzGvMal2CIKKworIzogZXhfZG9jbWQuYzo0NTg0Cittc2dpZCAiRTE3NzogQ291bnQgY2Fubm90IGJlIHNwZWNpZmllZCB0d2ljZSIKK21zZ3N0ciAiRTE3NzogpKOv4Kv8qXeo4qa4vMal2CIKKworIzogZXhfZG9jbWQuYzo0NTk0Cittc2dpZCAiRTE3ODogSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBjb3VudCIKK21zZ3N0ciAiRTE3ODogvMal2Kq6uXezXbDRvMako6W/vVQiCisKKyM6IGV4X2RvY21kLmM6NDYyMgorbXNnaWQgIkUxNzk6IGFyZ3VtZW50IHJlcXVpcmVkIGZvciBjb21wbGV0ZSIKK21zZ3N0ciAiRTE3OTogq/ylT7vdrW6w0bzGpH6v4Ke5pqgiCisKKyM6IGV4X2RvY21kLmM6NDY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTgwOiBJbnZhbGlkIGNvbXBsZXRlIHZhbHVlOiAlcyIKK21zZ3N0ciAiRTE4MDogpKOnub7jqrqtyDogJyVzJyIKKworIzogZXhfZG9jbWQuYzo0NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKK21zZ3N0ciAiRTE4MTogpKOlv71UqrrE3anKOiAlcyIKKworIzogZXhfZG9jbWQuYzo0NjkwCittc2dpZCAiRTE4MjogSW52YWxpZCBjb21tYW5kIG5hbWUiCittc2dzdHIgIkUxODI6IKv8pU+mV7rZpKOlv71UIgorCisjOiBleF9kb2NtZC5jOjQ3MDUKK21zZ2lkICJFMTgzOiBVc2VyIGRlZmluZWQgY29tbWFuZHMgbXVzdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIiCittc2dzdHIgIkUxODM6IKjPpc6qzKbbqXer/KVPpbK2t6VIpGq8Z6ZypcC2falsIgorCisjOiBleF9kb2NtZC5jOjQ3NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE4NDogTm8gc3VjaCB1c2VyLWRlZmluZWQgY29tbWFuZDogJXMiCittc2dzdHIgIkUxODQ6IKhTprOoz6XOqsym26l3qrqpUqVPoUcgJXMiCisKKyM6IGV4X2RvY21kLmM6NTIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg1OiBDYW5ub3QgZmluZCBjb2xvciBzY2hlbWUgJXMiCittc2dzdHIgIkUxODU6IKfkpKOo7MNDpuK8y6ahICVzIgorCisjOiBleF9kb2NtZC5jOjUyMzgKK21zZ2lkICJHcmVldGluZ3MsIFZpbSB1c2VyISIKK21zZ3N0ciAittksIFZpbSCoz6XOqsyhSSIKKworIzogZXhfZG9jbWQuYzo1OTQ2Cittc2dpZCAiRWRpdCBGaWxlIGluIG5ldyB3aW5kb3ciCittc2dzdHIgIqZit3O1+LWhvXO/6MDJrtciCisKKyM6IGV4X2RvY21kLmM6NjIxOQorbXNnaWQgIk5vIHN3YXAgZmlsZSIKK21zZ3N0ciAitUy8yKZzwMkiCisKKyM6IGV4X2RvY21kLmM6NjMyMworbXNnaWQgIkFwcGVuZCBGaWxlIgorbXNnc3RyICKq/qVbwMmu1yIKKworIzogZXhfZG9jbWQuYzo2Mzg3Cittc2dpZCAiRTE4NjogTm8gcHJldmlvdXMgZGlyZWN0b3J5IgorbXNnc3RyICJFMTg2OiCoU6azq2WkQK3Tpdi//SIKKworIzogZXhfZG9jbWQuYzo2NDY5Cittc2dpZCAiRTE4NzogVW5rbm93biIKK21zZ3N0ciAiRTE4NzogtUyqa7/sw9GqurzQsE8iCisKKyM6IGV4X2RvY21kLmM6NjU1NAorbXNnaWQgIkU0NjU6IDp3aW5zaXplIHJlcXVpcmVzIHR3byBudW1iZXIgYXJndW1lbnRzIgorbXNnc3RyICJFNDY1OiA6d2luc2l6ZSC73a1uqOKt07DRvMYiCisKKyM6IGV4X2RvY21kLmM6NjYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJXaW5kb3cgcG9zaXRpb246IFggJWQsIFkgJWQiCittc2dzdHIgIrX4taGm7LhtOiBYICVkLCBZICVkIgorCisjOiBleF9kb2NtZC5jOjY2MTAKK21zZ2lkICJFMTg4OiBPYnRhaW5pbmcgd2luZG93IHBvc2l0aW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiRTE4ODogpmKxeqq6pa2leKRXtUyqa8DysW+1+LWhpuy4bSIKKworIzogZXhfZG9jbWQuYzo2NjIwCittc2dpZCAiRTQ2NjogOndpbnBvcyByZXF1aXJlcyB0d28gbnVtYmVyIGFyZ3VtZW50cyIKK21zZ3N0ciAiRTQ2NjogOndpbnBvcyC73a1uqOKt07DRvMYiCisKKyM6IGV4X2RvY21kLmM6Njg5OQorbXNnaWQgIlNhdmUgUmVkaXJlY3Rpb24iCittc2dzdHIgIsB4pnMgUmVkaXJlY3Rpb24iCisKKyM6IGV4X2RvY21kLmM6NzA0NgorbXNnaWQgIlNhdmUgVmlldyIKK21zZ3N0ciAiwHimcyBWaWV3IgorCisjOiBleF9kb2NtZC5jOjcwNDcKK21zZ2lkICJTYXZlIFNlc3Npb24iCittc2dzdHIgIsB4pnMgU2Vzc2lvbiIKKworIzogZXhfZG9jbWQuYzo3MDQ5Cittc2dpZCAiU2F2ZSBTZXR1cCIKK21zZ3N0ciAiwHimc7NdqXciCisKKyM6IGV4X2RvY21kLmM6NzIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMTg5OiBcIiVzXCIgZXhpc3RzIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUxODk6IFwiJXNcIiCkd6ZzpmIgKL3Qpc4gISCxaqjusPWm5ikiCisKKyM6IGV4X2RvY21kLmM6NzIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMTkwOiBDYW5ub3Qgb3BlbiBcIiVzXCIgZm9yIHdyaXRpbmciCittc2dzdHIgIkUxOTA6ILVMqmulSLxnpEq80qahtn2x0iBcIiVzXCIiCisKKyMuIHNldCBtYXJrCisjOiBleF9kb2NtZC5jOjcyMjkKK21zZ2lkICJFMTkxOiBBcmd1bWVudCBtdXN0IGJlIGEgbGV0dGVyIG9yIGZvcndhcmQvYmFja3dhcmQgcXVvdGUiCittc2dzdHIgIkUxOTE6ILDRvMalsra3rE+tXqTlpnKlwKnOplarZS+r4aq6pN64uSIKKworIzogZXhfZG9jbWQuYzo3MjcxCittc2dpZCAiRTE5MjogUmVjdXJzaXZlIHVzZSBvZiA6bm9ybWFsIHRvbyBkZWVwIgorbXNnc3RyICJFMTkyOiA6bm9ybWFsILu8sGq8aLzGuUyyYCIKKworIzogZXhfZG9jbWQuYzo3NzcyCittc2dpZCAiRTE5NDogTm8gYWx0ZXJuYXRlIGZpbGUgbmFtZSB0byBzdWJzdGl0dXRlIGZvciAnIyciCittc2dzdHIgIkUxOTQ6IKhTprMgJyMnIKVptMClTqq6wMmmVyIKKworIzogZXhfZG9jbWQuYzo3ODAzCittc2dpZCAiRTQ5NTogbm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIgorbXNnc3RyICJFNDk1OiCoU6azIEF1dG9jb21tYW5kIMDJplelSKj6pU4gXCI8YWZpbGU+XCIiCisKKyM6IGV4X2RvY21kLmM6NzgxMQorbXNnaWQgIkU0OTY6IG5vIGF1dG9jb21tYW5kIGJ1ZmZlciBudW1iZXIgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YWJ1Zj5cIiIKK21zZ3N0ciAiRTQ5NjogqFOmsyBBdXRvY29tbWFuZCC9d73EsM+mV7rZpUio+qVOIFwiPGFidWY+XCIiCisKKyM6IGV4X2RvY21kLmM6NzgyMgorbXNnaWQgIkU0OTc6IG5vIGF1dG9jb21tYW5kIG1hdGNoIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8YW1hdGNoPlwiIgorbXNnc3RyICJFNDk3OiCoU6azIEF1dG9jb21tYW5kILLFplimV7rZpUio+qVOIFwiPGFtYXRjaD5cIiIKKworIzogZXhfZG9jbWQuYzo3ODMyCittc2dpZCAiRTQ5ODogbm8gOnNvdXJjZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgXCI8c2ZpbGU+XCIiCittc2dzdHIgIkU0OTg6IKhTprMgOnNvdXJjZSDAyaZXpUio+qVOIFwiPHNmaWxlPlwiIgorCisjOiBleF9kb2NtZC5jOjc4NzMKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiRTQ5OTogRW1wdHkgZmlsZSBuYW1lIGZvciAnJScgb3IgJyMnLCBvbmx5IHdvcmtzIHdpdGggXCI6cDpoXCIiCittc2dzdHIgIkU0OTk6ICclJyCpziAnIycgq/ymVqrFwMmmV6FBpXWv4KXOqfMgXCI6cDpoXCIiCisKKyM6IGV4X2RvY21kLmM6Nzg3NQorbXNnaWQgIkU1MDA6IEV2YWx1YXRlcyB0byBhbiBlbXB0eSBzdHJpbmciCittc2dzdHIgIkU1MDA6IL/ppEqssKrFpnKm6iIKKworIzogZXhfZG9jbWQuYzo4ODAyCittc2dpZCAiRTE5NTogQ2Fubm90IG9wZW4gdmltaW5mbyBmaWxlIGZvciByZWFkaW5nIgorbXNnc3RyICJFMTk1OiC1TKprxaqo+iB2aW1pbmZvIgorCisjOiBleF9kb2NtZC5jOjg5NzUKK21zZ2lkICJFMTk2OiBObyBkaWdyYXBocyBpbiB0aGlzIHZlcnNpb24iCittc2dzdHIgIkUxOTY6IKW7qqmlu7VMvcamWKZypLgoZGlncmFwaCkiCisKKyM6IGV4X2V2YWwuYzo0MDcKK21zZ2lkICJFNjA4OiBDYW5ub3QgOnRocm93IGV4Y2VwdGlvbnMgd2l0aCAnVmltJyBwcmVmaXgiCittc2dzdHIgIkU2MDg6IKSjr+AgOnRocm93IKXOICdWaW0nILZ9wFmquqjSpX4iCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gdGhyb3duOiAlcyIKK21zZ3N0ciAipeGlWKjSpX6hRyAlcyIKKworIzogZXhfZXZhbC5jOjUzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gZmluaXNoZWQ6ICVzIgorbXNnc3RyICKo0qV+tbKn9KFHICVzIgorCisjOiBleF9ldmFsLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4Y2VwdGlvbiBkaXNjYXJkZWQ6ICVzIgorbXNnc3RyICKkd6XhsfOo0qV+oUcgJXMiCisKKyM6IGV4X2V2YWwuYzo1ODIgZXhfZXZhbC5jOjYyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgbGluZSAlbGQiCittc2dzdHIgIiVzLCCm5iAlbGQiCisKKyMuIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZQorIzogZXhfZXZhbC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFeGNlcHRpb24gY2F1Z2h0OiAlcyIKK21zZ3N0ciAitW+lzajSpX6hRyVzIgorCisjOiBleF9ldmFsLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG1hZGUgcGVuZGluZyIKK21zZ3N0ciAiJXMgs3mmqCBwZW5kaW5nIgorCisjOiBleF9ldmFsLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc3VtZWQiCittc2dzdHIgIiVzIKR3pl60XyIKKworIzogZXhfZXZhbC5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNjYXJkZWQiCittc2dzdHIgIiVzIKR3peGx8yIKKworIzogZXhfZXZhbC5jOjcwMAorbXNnaWQgIkV4Y2VwdGlvbiIKK21zZ3N0ciAiqNKlfiIKKworIzogZXhfZXZhbC5jOjcwNgorbXNnaWQgIkVycm9yIGFuZCBpbnRlcnJ1cHQiCittc2dzdHIgIr/5u367UKSkwl8iCisKKyM6IGV4X2V2YWwuYzo3MDggZ3VpLmM6NDIzNworbXNnaWQgIkVycm9yIgorbXNnc3RyICK/+bt+IgorCisjLiBpZiAocGVuZGluZyAmIENTVFBfSU5URVJSVVBUKQorIzogZXhfZXZhbC5jOjcxMAorbXNnaWQgIkludGVycnVwdCIKK21zZ3N0ciAipKTCXyIKKworIzogZXhfZXZhbC5jOjc3OQorbXNnaWQgIkU1Nzk6IDppZiBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTc5OiA6aWYgvGi8xrlMsmAiCisKKyM6IGV4X2V2YWwuYzo4MTYKK21zZ2lkICJFNTgwOiA6ZW5kaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODA6IDplbmRpZiCvyqTWue/As6q6IDppZiIKKworIzogZXhfZXZhbC5jOjg2MAorbXNnaWQgIkU1ODE6IDplbHNlIHdpdGhvdXQgOmlmIgorbXNnc3RyICJFNTgxOiA6ZWxzZSCvyqTWue/As6q6IDppZiIKKworIzogZXhfZXZhbC5jOjg2MworbXNnaWQgIkU1ODI6IDplbHNlaWYgd2l0aG91dCA6aWYiCittc2dzdHIgIkU1ODI6IDplbHNlaWYgr8qk1rnvwLOquiA6aWYiCisKKyM6IGV4X2V2YWwuYzo4NzAKK21zZ2lkICJFNTgzOiBtdWx0aXBsZSA6ZWxzZSIKK21zZ3N0ciAiRTU4MzogpmitqyA6ZWxzZSIKKworIzogZXhfZXZhbC5jOjg3MworbXNnaWQgIkU1ODQ6IDplbHNlaWYgYWZ0ZXIgOmVsc2UiCittc2dzdHIgIkU1ODQ6IDplbHNlaWYgpmIgOmVsc2UgpKer4SIKKworIzogZXhfZXZhbC5jOjk0MAorbXNnaWQgIkU1ODU6IDp3aGlsZSBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICJFNTg1OiA6d2hpbGUgvGi8xrlMsmAiCisKKyM6IGV4X2V2YWwuYzo5OTYKK21zZ2lkICJFNTg2OiA6Y29udGludWUgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODY6IDpjb250aW51ZSCvyqTWue/As6q6IDp3aGlsZSIKKworIzogZXhfZXZhbC5jOjEwMzYKK21zZ2lkICJFNTg3OiA6YnJlYWsgd2l0aG91dCA6d2hpbGUiCittc2dzdHIgIkU1ODc6IDpicmVhayCvyqTWue/As6q6IDp3aGlsZSIKKworIzogZXhfZXZhbC5jOjEyMzUKK21zZ2lkICJFNjAxOiA6dHJ5IG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkU2MDE6IDppZiC8aLzGuUyyYCIKKworIzogZXhfZXZhbC5jOjEyNzgKK21zZ2lkICJFNjAzOiA6Y2F0Y2ggd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAzOiA6Y2F0Y2ggqFOmsyA6dHJ5IgorCisjLiBHaXZlIHVwIGZvciBhICI6Y2F0Y2giIGFmdGVyICI6ZmluYWxseSIgYW5kIGlnbm9yZSBpdC4KKyMuICogSnVzdCBwYXJzZS4KKyM6IGV4X2V2YWwuYzoxMzAwCittc2dpZCAiRTYwNDogOmNhdGNoIGFmdGVyIDpmaW5hbGx5IgorbXNnc3RyICJFNjA0OiA6Y2F0Y2ggpmIgOmZpbmFsbHkgpKer4SIKKworIzogZXhfZXZhbC5jOjE0MTgKK21zZ2lkICJFNjA2OiA6ZmluYWxseSB3aXRob3V0IDp0cnkiCittc2dzdHIgIkU2MDY6IDpmaW5hbGx5IKhTprMgOnRyeSIKKworIy4gR2l2ZSB1cCBmb3IgYSBtdWx0aXBsZSAiOmZpbmFsbHkiIGFuZCBpZ25vcmUgaXQuCisjOiBleF9ldmFsLmM6MTQ0MgorbXNnaWQgIkU2MDc6IG11bHRpcGxlIDpmaW5hbGx5IgorbXNnc3RyICJFNjA3OiCmaK2rIDpmaW5hbGx5IgorCisjOiBleF9ldmFsLmM6MTU1MQorbXNnaWQgIkU2MDI6IDplbmR0cnkgd2l0aG91dCA6dHJ5IgorbXNnc3RyICJFNjAyOiA6ZW5kaWYgr8qk1rnvwLOquiA6aWYiCisKKyM6IGV4X2V2YWwuYzoxODU3Cittc2dpZCAiRTE5MzogOmVuZGZ1bmN0aW9uIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIKK21zZ3N0ciAiRTE5MzogOmVuZGZ1bmN0aW9uIKWytremYqjnpqGkurOhqM+lziIKKworIzogZXhfZ2V0bG4uYzoyOTY3Cittc2dpZCAidGFnbmFtZSIKK21zZ3N0ciAivNDF0qZXutkiCisKKyM6IGV4X2dldGxuLmM6Mjk3MAorbXNnaWQgIiBraW5kIGZpbGVcbiIKK21zZ3N0ciAiw/7Aya7XXG4iCisKKyM6IGV4X2dldGxuLmM6NDE3NgorbXNnaWQgIidoaXN0b3J5JyBvcHRpb24gaXMgemVybyIKK21zZ3N0ciAiv++2tSAnaGlzdG9yeScgrE+5cyIKKworIzogZXhfZ2V0bG4uYzo0NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIjICVzIEhpc3RvcnkgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyAlcyC++qV2sE+//SAot3Oo7MLCKTpcbiIKKworIzogZXhfZ2V0bG4uYzo0NDE3Cittc2dpZCAiQ29tbWFuZCBMaW5lIgorbXNnc3RyICKpUqVPpkMiCisKKyM6IGV4X2dldGxuLmM6NDQxOAorbXNnaWQgIlNlYXJjaCBTdHJpbmciCittc2dzdHIgIrdqtE2mcqbqIgorCisjOiBleF9nZXRsbi5jOjQ0MTkKK21zZ2lkICJFeHByZXNzaW9uIgorbXNnc3RyICK5QrripqEiCisKKyM6IGV4X2dldGxuLmM6NDQyMAorbXNnaWQgIklucHV0IExpbmUiCittc2dzdHIgIr/ppEqm5iIKKworIzogZXhfZ2V0bG4uYzo0NDUwCittc2dpZCAiRTE5ODogY21kX3BjaGFyIGJleW9uZCB0aGUgY29tbWFuZCBsZW5ndGgiCittc2dzdHIgIkUxOTg6IGNtZF9wY2hhciC2V7lMqVKlT6r4q9ciCisKKyM6IGV4X2dldGxuLmM6NDYyNAorbXNnaWQgIkUxOTk6IEFjdGl2ZSB3aW5kb3cgb3IgYnVmZmVyIGRlbGV0ZWQiCittc2dzdHIgIkUxOTk6IKR3p1Kwo7G8p0ClzqSkqrq1+LWhqc68yKZzsM8iCisKKyM6IGZpbGVpby5jOjM3MworbXNnaWQgIklsbGVnYWwgZmlsZSBuYW1lIgorbXNnc3RyICKko6W/vVSqusDJplciCisKKyM6IGZpbGVpby5jOjM5NyBmaWxlaW8uYzo1MjIgZmlsZWlvLmM6MjY4NiBmaWxlaW8uYzoyNzI3Cittc2dpZCAiaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIqxPpdi//SIKKworIzogZmlsZWlvLmM6Mzk5Cittc2dpZCAiaXMgbm90IGEgZmlsZSIKK21zZ3N0ciAipKOsT8DJrtciCisKKyM6IGZpbGVpby5jOjU0NCBmaWxlaW8uYzozODMzCittc2dpZCAiW05ldyBGaWxlXSIKK21zZ3N0ciAiW6W8qVKmV10iCisKKyM6IGZpbGVpby5jOjU2NgorbXNnaWQgIltQZXJtaXNzaW9uIERlbmllZF0iCittc2dzdHIgIlvFdq2tpKOorF0iCisKKyM6IGZpbGVpby5jOjY3MAorbXNnaWQgIkUyMDA6ICpSZWFkUHJlIGF1dG9jb21tYW5kcyBtYWRlIHRoZSBmaWxlIHVucmVhZGFibGUiCittc2dzdHIgIkUyMDA6ICpSZWFkUHJlIEF1dG9jb21tYW5kIKjPtXumobVMqmvFqqj6prnAySIKKworIzogZmlsZWlvLmM6NjcyCittc2dpZCAiRTIwMTogKlJlYWRQcmUgYXV0b2NvbW1hbmRzIG11c3Qgbm90IGNoYW5nZSBjdXJyZW50IGJ1ZmZlciIKK21zZ3N0ciAiRTIwMTogKkZpbHRlciogQXV0b2NvbW1hbmQgpKOlaaVIp/On7713vcSwz6q6pLquZSIKKworIzogZmlsZWlvLmM6NjkzCittc2dpZCAiVmltOiBSZWFkaW5nIGZyb20gc3RkaW4uLi5cbiIKK21zZ3N0ciAiVmltOiCxcbzQt8e/6aRKxaqo+i4uLlxuIgorCisjOiBmaWxlaW8uYzo2OTkKK21zZ2lkICJSZWFkaW5nIGZyb20gc3RkaW4uLi4iCittc2dzdHIgIrFxvNC3x7/ppErFqqj6Li4uIgorCisjLiBSZS1vcGVuaW5nIHRoZSBvcmlnaW5hbCBmaWxlIGZhaWxlZCEKKyM6IGZpbGVpby5jOjk0NAorbXNnaWQgIkUyMDI6IENvbnZlcnNpb24gbWFkZSBmaWxlIHVucmVhZGFibGUhIgorbXNnc3RyICJFMjAyOiDC4LSrv/m7fiIKKworIzogZmlsZWlvLmM6MTg5MgorbXNnaWQgIltmaWZvL3NvY2tldF0iCittc2dzdHIgIltmaWZvL3NvY2tldF0iCisKKyM6IGZpbGVpby5jOjE4OTkKK21zZ2lkICJbZmlmb10iCittc2dzdHIgIltmaWZvXSIKKworIzogZmlsZWlvLmM6MTkwNgorbXNnaWQgIltzb2NrZXRdIgorbXNnc3RyICJbc29ja2V0XSIKKworIzogZmlsZWlvLmM6MTkxNAorbXNnaWQgIltST10iCittc2dzdHIgIluw38WqXSIKKworIzogZmlsZWlvLmM6MTkyNAorbXNnaWQgIltDUiBtaXNzaW5nXSIKK21zZ3N0ciAiW6/KpNZDUl0nIgorCisjOiBmaWxlaW8uYzoxOTI5Cittc2dpZCAiW05MIGZvdW5kXSIKK21zZ3N0ciAiW6fkqOxOTF0iCisKKyM6IGZpbGVpby5jOjE5MzQKK21zZ2lkICJbbG9uZyBsaW5lcyBzcGxpdF0iCittc2dzdHIgIlukwLPOuUyq+KbmXSIKKworIzogZmlsZWlvLmM6MTk0MCBmaWxlaW8uYzozODE3Cittc2dpZCAiW05PVCBjb252ZXJ0ZWRdIgorbXNnc3RyICJbpbzC4LSrXSIKKworIzogZmlsZWlvLmM6MTk0NSBmaWxlaW8uYzozODIyCittc2dpZCAiW2NvbnZlcnRlZF0iCittc2dzdHIgIlukd8LgtKtdIgorCisjOiBmaWxlaW8uYzoxOTUyIGZpbGVpby5jOjM4NDcKK21zZ2lkICJbY3J5cHRlZF0iCittc2dzdHIgIlukd6VbsUtdIgorCisjOiBmaWxlaW8uYzoxOTU5Cittc2dpZCAiW0NPTlZFUlNJT04gRVJST1JdIgorbXNnc3RyICLC4LSrv/m7fiIKKworIzogZmlsZWlvLmM6MTk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJbSUxMRUdBTCBCWVRFIGluIGxpbmUgJWxkXSIKK21zZ3N0ciAiW6bmICVsZCCms6Sjpb+9VKq6puykuF0iCisKKyM6IGZpbGVpby5jOjE5NzIKK21zZ2lkICJbUkVBRCBFUlJPUlNdIgorbXNnc3RyICJbxaqo+r/5u35dIgorCisjOiBmaWxlaW8uYzoyMTg4Cittc2dpZCAiQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIGNvbnZlcnNpb24iCittc2dzdHIgIqfkpKOo7MLgtKulzqq6vMimc8DJIgorCisjOiBmaWxlaW8uYzoyMTk1Cittc2dpZCAiQ29udmVyc2lvbiB3aXRoICdjaGFyY29udmVydCcgZmFpbGVkIgorbXNnc3RyICKmcqS4trDC4LSrv/m7fiIKKworIzogZmlsZWlvLmM6MjE5OAorbXNnaWQgImNhbid0IHJlYWQgb3V0cHV0IG9mICdjaGFyY29udmVydCciCittc2dzdHIgIrVMqmvFqqj6ICdjaGFyY29udmVydCcgqrq/6aVYIgorCisjOiBmaWxlaW8uYzoyNjAxCittc2dpZCAiRTIwMzogQXV0b2NvbW1hbmRzIGRlbGV0ZWQgb3IgdW5sb2FkZWQgYnVmZmVyIHRvIGJlIHdyaXR0ZW4iCittc2dzdHIgIkUyMDM6IEF1dG9jb21tYW5kIKdSsKOpzsTAqfGkRq1uvGekSqq6vXe9xLDPIgorCisjOiBmaWxlaW8uYzoyNjI0Cittc2dpZCAiRTIwNDogQXV0b2NvbW1hbmQgY2hhbmdlZCBudW1iZXIgb2YgbGluZXMgaW4gdW5leHBlY3RlZCB3YXkiCittc2dzdHIgIkUyMDQ6IEF1dG9jb21tYW5kILdOpX6mYafvxdykRqbmuLkiCisKKyM6IGZpbGVpby5jOjI2OTIgZmlsZWlvLmM6MjcxMAorbXNnaWQgImlzIG5vdCBhIGZpbGUgb3Igd3JpdGFibGUgZGV2aWNlIgorbXNnc3RyICKko6xPwMmu16nOpWm8Z6RKqrq4y7htIgorCisjOiBmaWxlaW8uYzoyNzYyCittc2dpZCAiaXMgcmVhZC1vbmx5IChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIqxPsN/FqsDJICi90KjPpc4gISCxaqjusPWm5ikiCisKKyM6IGZpbGVpby5jOjMwNjUKK21zZ2lkICJFNTA2OiBDYW4ndCB3cml0ZSB0byBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA2OiC1TKprvGekSrPGpffAySAovdCoz6XOICEgsWqo7rD1puYpIgorCisjOiBmaWxlaW8uYzozMDc3Cittc2dpZCAiRTUwNzogQ2xvc2UgZXJyb3IgZm9yIGJhY2t1cCBmaWxlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkU1MDc6ILVMqmvD9rOss8al98DJICi90KjPpc4gISCxaqjusPWm5ikiCisKKyM6IGZpbGVpby5jOjMwNzkKK21zZ2lkICJFNTA4OiBDYW4ndCByZWFkIGZpbGUgZm9yIGJhY2t1cCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA4OiC1TKprxaqo+sDJrtelSKjRs8al9yAovdCoz6XOICEgsWqo7rD1puYpIgorCisjOiBmaWxlaW8uYzozMDk1Cittc2dpZCAiRTUwOTogQ2Fubm90IGNyZWF0ZSBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTA5OiC1TKprq9il37PGpffAySAovdCoz6XOICEgsWqo7rD1puYpIgorCisjOiBmaWxlaW8uYzozMTk4Cittc2dpZCAiRTUxMDogQ2FuJ3QgbWFrZSBiYWNrdXAgZmlsZSAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNTEwOiC1TKpru3OnQLPGpffAySAovdCoz6XOICEgsWqo7rD1puYpIgorCisjOiBmaWxlaW8uYzozMjYwCittc2dpZCAiRTQ2MDogVGhlIHJlc291cmNlIGZvcmsgd291bGQgYmUgbG9zdCAoYWRkICEgdG8gb3ZlcnJpZGUpIgorbXNnc3RyICJFNDYwOiBSZXNvdXJjZSBmb3JrILd8rviloiAovdCoz6XOICEgsWqo7rD1puYpIgorCisjOiBmaWxlaW8uYzozMzYxCittc2dpZCAiRTIxNDogQ2FuJ3QgZmluZCB0ZW1wIGZpbGUgZm9yIHdyaXRpbmciCittc2dzdHIgIkUyMTQ6IKfkpKOo7LxnpEqlzqq6vMimc8DJIgorCisjOiBmaWxlaW8uYzozMzc5Cittc2dpZCAiRTIxMzogQ2Fubm90IGNvbnZlcnQgKGFkZCAhIHRvIHdyaXRlIHdpdGhvdXQgY29udmVyc2lvbikiCittc2dzdHIgIkUyMTM6ILVMqmvC4LSrICi90KjPpc4gISCxaqjupKPC4LSrvGekSikiCisKKyM6IGZpbGVpby5jOjM0MTQKK21zZ2lkICJFMTY2OiBDYW4ndCBvcGVuIGxpbmtlZCBmaWxlIGZvciB3cml0aW5nIgorbXNnc3RyICJFMTY2OiC1TKprpUi8Z6RKvNKmobZ9sdKzc7WywMmu1yIKKworIzogZmlsZWlvLmM6MzQxOAorbXNnaWQgIkUyMTI6IENhbid0IG9wZW4gZmlsZSBmb3Igd3JpdGluZyIKK21zZ3N0ciAiRTIxMjogtUyqa6VIvGekSrzSpqG2fbHSIgorCisjOiBmaWxlaW8uYzozNjY4Cittc2dpZCAiRTUxMjogQ2xvc2UgZmFpbGVkIgorbXNnc3RyICJFNTEyOiDD9rOspaKx0SIKKworIzogZmlsZWlvLmM6MzczOQorbXNnaWQgIkU1MTM6IHdyaXRlIGVycm9yLCBjb252ZXJzaW9uIGZhaWxlZCIKK21zZ3N0ciAiRTUxMzogtUyqa7xnpEogLS0gwuC0q6WisdEiCisKKyM6IGZpbGVpby5jOjM3NDUKK21zZ2lkICJFNTE0OiB3cml0ZSBlcnJvciAoZmlsZSBzeXN0ZW0gZnVsbD8pIgorbXNnc3RyICJFNTE0OiC8Z6RKv/m7fiAowMmu16h0ss6kd7qhoUgpIgorCisjOiBmaWxlaW8uYzozODEyCittc2dpZCAiIENPTlZFUlNJT04gRVJST1IiCittc2dzdHIgIsLgtKu/+bt+IgorCisjOiBmaWxlaW8uYzozODI4Cittc2dpZCAiW0RldmljZV0iCittc2dzdHIgIlu4y7htXSIKKworIzogZmlsZWlvLmM6MzgzMworbXNnaWQgIltOZXddIgorbXNnc3RyICJbt3NdIgorCisjOiBmaWxlaW8uYzozODU1Cittc2dpZCAiIFthXSIKK21zZ3N0ciAiW2FdIgorCisjOiBmaWxlaW8uYzozODU1Cittc2dpZCAiIGFwcGVuZGVkIgorbXNnc3RyICIgpHeq/qVbIgorCisjOiBmaWxlaW8uYzozODU3Cittc2dpZCAiIFt3XSIKK21zZ3N0ciAiW3ddIgorCisjOiBmaWxlaW8uYzozODU3Cittc2dpZCAiIHdyaXR0ZW4iCittc2dzdHIgIiCkd7xnpEoiCisKKyM6IGZpbGVpby5jOjM5MTAKK21zZ2lkICJFMjA1OiBQYXRjaG1vZGU6IGNhbid0IHNhdmUgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNTogUGF0Y2ggvNKmoTogtUyqa8B4pnOt7KlswMmu1yIKKworIzogZmlsZWlvLmM6MzkzMgorbXNnaWQgIkUyMDY6IHBhdGNobW9kZTogY2FuJ3QgdG91Y2ggZW1wdHkgb3JpZ2luYWwgZmlsZSIKK21zZ3N0ciAiRTIwNjogUGF0Y2ggvNKmoTogtUyqa8Xcp/Oqxaq6reypbMDJrtciCisKKyM6IGZpbGVpby5jOjM5NDcKK21zZ2lkICJFMjA3OiBDYW4ndCBkZWxldGUgYmFja3VwIGZpbGUiCittc2dzdHIgIkUyMDc6ILVMqmunUrCjs8al98DJIgorCisjOiBmaWxlaW8uYzo0MDA4Cittc2dpZCAiIgorIlxuIgorIldBUk5JTkc6IE9yaWdpbmFsIGZpbGUgbWF5IGJlIGxvc3Qgb3IgZGFtYWdlZFxuIgorbXNnc3RyICIiCisiXG4iCisixLWnaTogreypbMDJrteseaWiqc63bMNhXG4iCisKKyM6IGZpbGVpby5jOjQwMTAKK21zZ2lkICJkb24ndCBxdWl0IHRoZSBlZGl0b3IgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4hIgorbXNnc3RyICKmYsDJrtelv71UvGekSqtlvdCkxcL3tn29c7/ovrkhIgorCisjOiBmaWxlaW8uYzo0MDk5Cittc2dpZCAiW2Rvc10iCittc2dzdHIgIltkb3NdIgorCisjOiBmaWxlaW8uYzo0MDk5Cittc2dpZCAiW2RvcyBmb3JtYXRdIgorbXNnc3RyICJbZG9zIK7mpqFdIgorCisjOiBmaWxlaW8uYzo0MTA2Cittc2dpZCAiW21hY10iCittc2dzdHIgIlttYWNdIgorCisjOiBmaWxlaW8uYzo0MTA2Cittc2dpZCAiW21hYyBmb3JtYXRdIgorbXNnc3RyICJbbWFjIK7mpqFdIgorCisjOiBmaWxlaW8uYzo0MTEzCittc2dpZCAiW3VuaXhdIgorbXNnc3RyICJbdW5peF0iCisKKyM6IGZpbGVpby5jOjQxMTMKK21zZ2lkICJbdW5peCBmb3JtYXRdIgorbXNnc3RyICJbdW5peCCu5qahXSIKKworIzogZmlsZWlvLmM6NDE0MAorbXNnaWQgIjEgbGluZSwgIgorbXNnc3RyICIxIKbmLCAiCisKKyM6IGZpbGVpby5jOjQxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzLCAiCittc2dzdHIgIiVsZCCm5iwgIgorCisjOiBmaWxlaW8uYzo0MTQ1Cittc2dpZCAiMSBjaGFyYWN0ZXIiCittc2dzdHIgIqRArdOmcqS4IgorCisjOiBmaWxlaW8uYzo0MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlbGSt06ZypLgiCisKKyM6IGZpbGVpby5jOjQxNTcKK21zZ2lkICJbbm9lb2xdIgorbXNnc3RyICJbbm9lb2xdIgorCisjOiBmaWxlaW8uYzo0MTU3Cittc2dpZCAiW0luY29tcGxldGUgbGFzdCBsaW5lXSIKK21zZ3N0ciAiW7Wyp8Cm5qSjp7m+410iCisKKyMuIGRvbid0IG92ZXJ3cml0ZSBtZXNzYWdlcyBoZXJlCisjLiBtdXN0IGdpdmUgdGhpcyBwcm9tcHQKKyMuIGRvbid0IHVzZSBlbXNnKCkgaGVyZSwgZG9uJ3Qgd2FudCB0byBmbHVzaCB0aGUgYnVmZmVycworIzogZmlsZWlvLmM6NDE3NgorbXNnaWQgIldBUk5JTkc6IFRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgcmVhZGluZyBpdCEhISIKK21zZ3N0ciAixLWnaTogpbvAya7XptukV6a4xaqkSqvhpHfF3LDKISEhIgorCisjOiBmaWxlaW8uYzo0MTc4Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0IgorbXNnc3RyICK9VKl3rW68Z6RKttwiCisKKyM6IGZpbGVpby5jOjUyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIwODogRXJyb3Igd3JpdGluZyB0byBcIiVzXCIiCittc2dzdHIgIkUyMDg6ILxnpErAya7XIFwiJXNcIiC/+bt+IgorCisjOiBmaWxlaW8uYzo1MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMDk6IEVycm9yIGNsb3NpbmcgXCIlc1wiIgorbXNnc3RyICJFMjA5OiDD9rOswMmu1yBcIiVzXCIgv/m7fiIKKworIzogZmlsZWlvLmM6NTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjEwOiBFcnJvciByZWFkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTIxMDogxaqo+sDJrtcgXCIlc1wiIL/5u34iCisKKyM6IGZpbGVpby5jOjU0NDgKK21zZ2lkICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICJFMjQ2OiBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIKdSsKO9d73EsM8iCisKKyM6IGZpbGVpby5jOjU0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxMTogV2FybmluZzogRmlsZSBcIiVzXCIgbm8gbG9uZ2VyIGF2YWlsYWJsZSIKK21zZ3N0ciAiRTIxMTogxLWnaTogwMmu1yBcIiVzXCIgpHe4Z6SjpnOmYiIKKworIzogZmlsZWlvLmM6NTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVzEyOiBXYXJuaW5nOiBGaWxlIFwiJXNcIiBoYXMgY2hhbmdlZCBhbmQgdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCBpbiBWaW0gYXMgIgorIndlbGwiCittc2dzdHIgIlcxMjogxLWnaTogwMmu1yBcIiVzXCIgptukV6a4xaqkSqvhpHfF3LDKLCCm06VCvXO/6KSkqrq9d73EsM+kXafzsMqkRiIKKworIzogZmlsZWlvLmM6NTQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJXMTE6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzExOiDEtadpOiDAya7XIFwiJXNcIiCm26RXprjFqqRKq+Gkd8XcsMoiCisKKyM6IGZpbGVpby5jOjU0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVzE2OiBXYXJuaW5nOiBNb2RlIG9mIGZpbGUgXCIlc1wiIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCIKK21zZ3N0ciAiVzE2OiDEtadpOiDAya7XIFwiJXNcIiCqusV2ra27UKRXprjFqqRKrsmko6RAvMsgKKazxdywyrlMKSIKKworIyAnbW9kZScgc2VlbXMgYmV0dGVyIGFzIHRyYW5zbGF0ZWQgdG8gJ3Blcm1pc3Npb24nPworIzogZmlsZWlvLmM6NTQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXMTM6IFdhcm5pbmc6IEZpbGUgXCIlc1wiIGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgZWRpdGluZyBzdGFydGVkIgorbXNnc3RyICJXMTM6IMS1p2k6IMDJrtcgXCIlc1wiIKZitn2pbL1zv+ir4aRTs1Gr2KXfpEYiCisKKyM6IGZpbGVpby5jOjU1MDEKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICLEtadpIgorCisjOiBmaWxlaW8uYzo1NTAyCittc2dpZCAiIgorIiZPS1xuIgorIiZMb2FkIEZpbGUiCittc2dzdHIgIiIKKyK9VKl3KCZPKVxuIgorIrj8pErAya7XKCZMKSIKKworIzogZmlsZWlvLmM6NTYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDYyOiBDb3VsZCBub3QgcHJlcGFyZSBmb3IgcmVsb2FkaW5nIFwiJXNcIiIKK21zZ3N0ciAiRTQ2MjogtUyqa7fHs8atq7dzuPykSiBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjU2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMTogQ291bGQgbm90IHJlbG9hZCBcIiVzXCIiCittc2dzdHIgIkUzMjE6ILVMqmutq7dzuPykSiBcIiVzXCIiCisKKyM6IGZpbGVpby5jOjYyMDEKK21zZ2lkICItLURlbGV0ZWQtLSIKK21zZ3N0ciAiLS2kd6dSsKMtLSIKKworIy4gdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3QKKyM6IGZpbGVpby5jOjYzNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NzogTm8gc3VjaCBncm91cDogXCIlc1wiIgorbXNnc3RyICJFMzY3OiC1TKa5uHOy1TogXCIlc1wiIgorCisjOiBmaWxlaW8uYzo2NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMTU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyICo6ICVzIgorbXNnc3RyICJFMjE1OiAqIKvhrbGms6Sjpb+9VKq6pnKkuDogJXMiCisKKyM6IGZpbGVpby5jOjY0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIxNjogTm8gc3VjaCBldmVudDogJXMiCittc2dzdHIgIkUyMTY6ILVMprmoxqXzOiAlcyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiBmaWxlaW8uYzo2NjQ2Cittc2dpZCAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBBdXRvLUNvbW1hbmRzIC0tLSIKKworIzogZmlsZWlvLmM6NjkxNworbXNnaWQgIkUyMTc6IENhbid0IGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZXZlbnRzIgorbXNnc3RyICJFMjE3OiC1TKprue+p0qazqMal87D1puYgYXV0b2NvbW1hbmQiCisKKyM6IGZpbGVpby5jOjY5NDAKK21zZ2lkICJObyBtYXRjaGluZyBhdXRvY29tbWFuZHMiCittc2dzdHIgIqfkpKOo7LnvwLOquiBhdXRvY29tbWFuZCIKKworIzogZmlsZWlvLmM6NzI2MAorbXNnaWQgIkUyMTg6IGF1dG9jb21tYW5kIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIkUyMTg6IGF1dG9jb21tYW5kILxovMa5TLJgIgorCisjOiBmaWxlaW8uYzo3NTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIEF1dG8gY29tbWFuZHMgZm9yIFwiJXNcIiIKK21zZ3N0ciAiJXMgQXV0byBjb21tYW5kczogXCIlc1wiIgorCisjOiBmaWxlaW8uYzo3NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZyAlcyIKK21zZ3N0ciAisPWm5iAlcyIKKworIy4gYWx3YXlzIHNjcm9sbCB1cCwgZG9uJ3Qgb3ZlcndyaXRlCisjOiBmaWxlaW8uYzo3NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImF1dG9jb21tYW5kICVzIgorbXNnc3RyICJhdXRvY29tbWFuZCAlcyIKKworIzogZmlsZWlvLmM6ODE3MQorbXNnaWQgIkUyMTk6IE1pc3Npbmcgey4iCittc2dzdHIgIkUyMTk6IK/KpNYgey4iCisKKyM6IGZpbGVpby5jOjgxNzMKK21zZ2lkICJFMjIwOiBNaXNzaW5nIH0uIgorbXNnc3RyICJFMjIwOiCvyqTWIH0uIgorCisjOiBmb2xkLmM6NjYKK21zZ2lkICJFNDkwOiBObyBmb2xkIGZvdW5kIgorbXNnc3RyICJFNDkwOiCn5KSjqOyl9KbzIGZvbGQiCisKKyM6IGZvbGQuYzo1NTMKK21zZ2lkICJFMzUwOiBDYW5ub3QgY3JlYXRlIGZvbGQgd2l0aCBjdXJyZW50ICdmb2xkbWV0aG9kJyIKK21zZ3N0ciAiRTM1MDogtUyqa6ZipdirZaq6ICdmb2xkbWV0aG9kJyCkVavYpd8gZm9sZCIKKworIzogZm9sZC5jOjU1NQorbXNnaWQgIkUzNTE6IENhbm5vdCBkZWxldGUgZm9sZCB3aXRoIGN1cnJlbnQgJ2ZvbGRtZXRob2QnIgorbXNnc3RyICJFMzUxOiC1TKprpmKl2KtlqrogJ2ZvbGRtZXRob2QnIKRVp1KwoyBmb2xkIgorCisjOiBnZXRjaGFyLmM6MjQ2Cittc2dpZCAiRTIyMjogQWRkIHRvIHJlYWQgYnVmZmVyIgorbXNnc3RyICJFMjIyOiClW6RKxaqo+r13vcSwz6SkIgorCisjOiBnZXRjaGFyLmM6MjE0NgorbXNnaWQgIkUyMjM6IHJlY3Vyc2l2ZSBtYXBwaW5nIgorbXNnc3RyICJFMjIzOiC7vLBqIG1hcHBpbmciCisKKyM6IGdldGNoYXIuYzoyOTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjQ6IGdsb2JhbCBhYmJyZXZpYXRpb24gYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI0OiAlcyCkd7hnprOl/rDsIGFiYnJldmlhdGlvbiCkRiIKKworIzogZ2V0Y2hhci5jOjI5OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIyNTogZ2xvYmFsIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI1OiAlcyCkd7hnprOl/rDsIG1hcHBpbmcgpEYiCisKKyM6IGdldGNoYXIuYzozMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjY6IGFiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cyBmb3IgJXMiCittc2dzdHIgIkUyMjY6ICVzIKR3uGemsyBhYmJyZXZpYXRpb24gpEYiCisKKyM6IGdldGNoYXIuYzozMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMjc6IG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgZm9yICVzIgorbXNnc3RyICJFMjI3OiAlcyCquiBtYXBwaW5nIKR3uGemc6ZiIgorCisjOiBnZXRjaGFyLmM6MzE5MQorbXNnaWQgIk5vIGFiYnJldmlhdGlvbiBmb3VuZCIKK21zZ3N0ciAip+Sko6jsIGFiYnJldmlhdGlvbiIKKworIzogZ2V0Y2hhci5jOjMxOTMKK21zZ2lkICJObyBtYXBwaW5nIGZvdW5kIgorbXNnc3RyICKoU6azs2+t0yBtYXBwaW5nILnvwLMiCisKKyM6IGdldGNoYXIuYzo0MDgzCittc2dpZCAiRTIyODogbWFrZW1hcDogSWxsZWdhbCBtb2RlIgorbXNnc3RyICJFMjI4OiBtYWtlbWFwOiCko6W/vVSqurzSpqEiCisKKyM6IGd1aS5jOjIxOAorbXNnaWQgIkUyMjk6IENhbm5vdCBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFMjI5OiC1TKprsdKwyrnPq6ysya2xIgorCisjOiBndWkuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzMDogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyMzA6ILVMqmvFqqj6wMmu1yBcIiVzXCIiCisKKyM6IGd1aS5jOjQ3MgorbXNnaWQgIkUyMzE6ICdndWlmb250d2lkZScgaW52YWxpZCIKK21zZ3N0ciAiRTIzMTogpKOlv71UqrogJ2d1aWZvbnR3aWRlJyIKKworIzogZ3VpLmM6MzkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjU0OiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgJXMiCittc2dzdHIgIkUyNTQ6IKSjr+CwdLhtw0Om4iAlcyIKKworIzogZ3VpX2F0X2ZzLmM6MjkwCittc2dpZCAiPGNhbm5vdCBvcGVuPiAiCittc2dzdHIgIjyko6/gtn2x0j4iCisKKyM6IGd1aV9hdF9mcy5jOjExMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxNjogdmltX1NlbEZpbGU6IGNhbid0IGdldCBmb250ICVzIgorbXNnc3RyICJFNjE2OiB2aW1fU2VsRmlsZTogpKOv4KjPpc4gJXMgpnKrrCIKKworIzogZ3VpX2F0X2ZzLmM6MjUzOAorbXNnaWQgIkU2MTQ6IHZpbV9TZWxGaWxlOiBjYW4ndCByZXR1cm4gdG8gY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgIkU2MTQ6IHZpbV9TZWxGaWxlOiC1TKprpl6o7KXYq2Wl2L/9IgorCisjOiBndWlfYXRfZnMuYzoyNTU3Cittc2dpZCAiUGF0aG5hbWU6IgorbXNnc3RyICK49K58OiIKKworIzogZ3VpX2F0X2ZzLmM6MjU2MworbXNnaWQgIkU2MTU6IHZpbV9TZWxGaWxlOiBjYW4ndCBnZXQgY3VycmVudCBkaXJlY3RvcnkiCittc2dzdHIgIkU2MTU6IHZpbV9TZWxGaWxlOiC1TKprqPqxb6XYq2Wl2L/9IgorCisjOiBndWlfYXRfZnMuYzoyNTcxIGd1aV9tb3RpZi5jOjE2MTkKK21zZ2lkICJPSyIKK21zZ3N0ciAivVSpdyIKKworIzogZ3VpX2F0X2ZzLmM6MjU3MSBndWlfZ3RrLmM6MjYyNSBndWlfbW90aWYuYzoxNjE0IGd1aV9tb3RpZi5jOjI4NDQKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIqj6rvgiCisKKyM6IGd1aV9hdF9zYi5jOjQ4NgorbXNnaWQgIlNjcm9sbGJhciBXaWRnZXQ6IENvdWxkIG5vdCBnZXQgZ2VvbWV0cnkgb2YgdGh1bWIgcGl4bWFwLiIKK21zZ3N0ciAisbKwyrZiOiCko6/gs12pdyB0aHVtYiBwaXhtYXAgqrqm7LhtIgorCisjOiBndWlfYXRoZW5hLmM6MTk1NiBndWlfbW90aWYuYzoxODY3Cittc2dpZCAiVmltIGRpYWxvZyIKK21zZ3N0ciAiVmltILnvuNyysCIKKworIzogZ3VpX2JldmFsLmM6OTEKK21zZ2lkICJFMjMyOiBDYW5ub3QgY3JlYXRlIEJhbGxvb25FdmFsIHdpdGggYm90aCBtZXNzYWdlIGFuZCBjYWxsYmFjayIKK21zZ3N0ciAiRTIzMjogpKOv4LnvsFSup7tQIGNhbGxiYWNrIKvYpd8gQmFsbG9uRXZhbCIKKworIzogZ3VpX2d0ay5jOjE1NjEKK21zZ2lkICJWaW0gZGlhbG9nLi4uIgorbXNnc3RyICJWaW0gue+43LKwLi4uIgorCisjOiBndWlfZ3RrLmM6MTk5MiBtZXNzYWdlLmM6MjUyNQorbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZZrE9cbiIKKyImTqdfXG4iCisiJkOo+q74IgorCisjOiBndWlfZ3RrLmM6MjE1MgorbXNnaWQgIklucHV0IF9NZXRob2RzIgorbXNnc3RyICK/6aRKqmsiCisKKyM6IGd1aV9ndGsuYzoyNDE4IGd1aV9tb3RpZi5jOjI3NjMKK21zZ2lkICJWSU0gLSBTZWFyY2ggYW5kIFJlcGxhY2UuLi4iCittc2dzdHIgIlZJTSAtILRNp+S7UKj6pU4uLi4iCisKKyM6IGd1aV9ndGsuYzoyNDI2IGd1aV9tb3RpZi5jOjI3NjUKK21zZ2lkICJWSU0gLSBTZWFyY2guLi4iCittc2dzdHIgIlZJTSAtILRNp+QuLi4iCisKKyM6IGd1aV9ndGsuYzoyNDU4IGd1aV9tb3RpZi5jOjI4ODMKK21zZ2lkICJGaW5kIHdoYXQ6IgorbXNnc3RyICK3arRNOiIKKworIzogZ3VpX2d0ay5jOjI0NzggZ3VpX21vdGlmLmM6MjkxNQorbXNnaWQgIlJlcGxhY2Ugd2l0aDoiCittc2dzdHIgIqj6pU6ssDoiCisKKyMuIHdob2xlIHdvcmQgb25seSBidXR0b24KKyM6IGd1aV9ndGsuYzoyNTEwIGd1aV9tb3RpZi5jOjMwMzEKK21zZ2lkICJNYXRjaCB3aG9sZSB3b3JkIG9ubHkiCittc2dzdHIgIqV1t2q0Tae5pf6s26ZQqrqmciIKKworIy4gbWF0Y2ggY2FzZSBidXR0b24KKyM6IGd1aV9ndGsuYzoyNTIzIGd1aV9tb3RpZi5jOjMwNDMKK21zZ2lkICJNYXRjaCBjYXNlIgorbXNnc3RyICKyxaZYpGqkcLxnIgorCisjOiBndWlfZ3RrLmM6MjUzNSBndWlfbW90aWYuYzoyOTg1Cittc2dpZCAiRGlyZWN0aW9uIgorbXNnc3RyICKk6KZWIgorCisjLiAnVXAnIGFuZCAnRG93bicgYnV0dG9ucworIzogZ3VpX2d0ay5jOjI1NDcgZ3VpX21vdGlmLmM6Mjk5NworbXNnaWQgIlVwIgorbXNnc3RyICKmVqRXIgorCisjOiBndWlfZ3RrLmM6MjU1MSBndWlfbW90aWYuYzozMDA1Cittc2dpZCAiRG93biIKK21zZ3N0ciAiplakVSIKKworIzogZ3VpX2d0ay5jOjI1NzcgZ3VpX2d0ay5jOjI1NzkgZ3VpX21vdGlmLmM6Mjc4NworbXNnaWQgIkZpbmQgTmV4dCIKK21zZ3N0ciAip+SkVaRArdMiCisKKyM6IGd1aV9ndGsuYzoyNTk2IGd1aV9ndGsuYzoyNTk4IGd1aV9tb3RpZi5jOjI4MDQKK21zZ2lkICJSZXBsYWNlIgorbXNnc3RyICKo+qVOIgorCisjOiBndWlfZ3RrLmM6MjYwOSBndWlfZ3RrLmM6MjYxMSBndWlfbW90aWYuYzoyODE3Cittc2dpZCAiUmVwbGFjZSBBbGwiCittc2dzdHIgIqj6pU6l/rOhIgorCisjOiBndWlfZ3RrX3gxMS5jOjIyODUKK21zZ2lkICJWaW06IFJlY2VpdmVkIFwiZGllXCIgcmVxdWVzdCBmcm9tIHNlc3Npb24gbWFuYWdlclxuIgorbXNnc3RyICJWaW06IKXRIFNlc3Npb24gut6yeq37pqyo7CBcImRpZVwiIK1uqERcbiIKKworIzogZ3VpX2d0a194MTEuYzozNDI0Cittc2dpZCAiVmltOiBNYWluIHdpbmRvdyB1bmV4cGVjdGVkbHkgZGVzdHJveWVkXG4iCittc2dzdHIgIlZpbTogpUS1+LWhxOqxvFxuIgorCisjOiBndWlfZ3RrX3gxMS5jOjQwMzgKK21zZ2lkICJGb250IFNlbGVjdGlvbiIKK21zZ3N0ciAipnKrrL/vvtwiCisKKyM6IGd1aV9ndGtfeDExLmM6NTg5MCB1aS5jOjIwMDkKK21zZ2lkICJVc2VkIENVVF9CVUZGRVIwIGluc3RlYWQgb2YgZW1wdHkgc2VsZWN0aW9uIgorbXNnc3RyICKoz6XOIENVVF9CVUZGRVIwIKjTqPqlTqrFv+++3CIKKworIzogZ3VpX21vdGlmLmM6MTYxMyBndWlfbW90aWYuYzoxNjE2Cittc2dpZCAiRmlsdGVyIgorbXNnc3RyICK5TMJvvrkiCisKKyM6IGd1aV9tb3RpZi5jOjE2MTUKK21zZ2lkICJEaXJlY3RvcmllcyIKK21zZ3N0ciAipdi//SIKKworIzogZ3VpX21vdGlmLmM6MTYxNworbXNnaWQgIkhlbHAiCittc2dzdHIgIruyp1W7oan6IgorCisjOiBndWlfbW90aWYuYzoxNjE4Cittc2dpZCAiRmlsZXMiCittc2dzdHIgIsDJrtciCisKKyM6IGd1aV9tb3RpZi5jOjE2MjAKK21zZ2lkICJTZWxlY3Rpb24iCittc2dzdHIgIr/vvtwiCisKKyM6IGd1aV9tb3RpZi5jOjI4MzAKK21zZ2lkICJVbmRvIgorbXNnc3RyICK0X63sIgorCisjOiBndWlfcmlzY29zLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2MTA6IENhbid0IGxvYWQgWmFwIGZvbnQgJyVzJyIKK21zZ3N0ciAiRTYxMDogtUyqa7Z9sdIgWmFwIKZyq6wgJyVzJyIKKworIzogZ3VpX3Jpc2Nvcy5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYxMTogQ2FuJ3QgdXNlIGZvbnQgJXMiCittc2dzdHIgIkU2MTE6ILVMqmuoz6XOpnKrrCAlcyIKKworIzogZ3VpX3Jpc2Nvcy5jOjMyNjkKK21zZ2lkICIiCisiXG4iCisiU2VuZGluZyBtZXNzYWdlIHRvIHRlcm1pbmF0ZSBjaGlsZCBwcm9jZXNzLlxuIgorbXNnc3RyICIiCisiXG4iCisisGWlWKSkwl+kbLV7pqGqurBUrqekpC5cbiIKKworIzogZ3VpX3czMi5jOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQzOiBBcmd1bWVudCBub3Qgc3VwcG9ydGVkOiBcIi0lc1wiOyBVc2UgdGhlIE9MRSB2ZXJzaW9uLiIKK21zZ3N0ciAiRTI0MzogpKOk5LSpsNG8xiBcIi0lc1wioUO90KXOIE9MRSCqqaW7oUMiCisKKyM6IGd1aV93NDguYzoyMDI5Cittc2dpZCAiRmluZCBzdHJpbmcgKHVzZSAnXFxcXCcgdG8gZmluZCAgYSAnXFwnKSIKK21zZ3N0ciAit2q0TaZypuogKKjPpc4gJ1xcXFwnIKjTqu2l3CAnXFwnKSIKKworIzogZ3VpX3c0OC5jOjIwNTQKK21zZ2lkICJGaW5kICYgUmVwbGFjZSAodXNlICdcXFxcJyB0byBmaW5kICBhICdcXCcpIgorbXNnc3RyICK3arRNpM6o+qVOpnKm6iAoqM+lziAnXFxcXCcgqNOq7aXcICdcXCcpIgorCisjOiBndWlfeDExLmM6MTQ0NQorbXNnaWQgIlZpbSBFNDU4OiBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnksIHNvbWUgY29sb3JzIG1heSBiZSBpbmNvcnJlY3QiCittc2dzdHIgIlZpbSBFNDU4OiC1TKprsHS4bSBjb2xvciBtYXAgtrWl2KFBprOox8NDpuKs3bBfqNO3fKnHqcequiIKKworIzogZ3VpX3gxMS5jOjIwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MDogRm9udHMgZm9yIHRoZSBmb2xsb3dpbmcgY2hhcnNldHMgYXJlIG1pc3NpbmcgaW4gZm9udHNldCAlczoiCittc2dzdHIgIkUyNTA6IEZvbnRzZXQgJXMgqFOms7NdqXelv71UqrqmcquspUio0cXjpdyzb6jHpnKkuLawOiIKKworIzogZ3VpX3gxMS5jOjIwNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MjogRm9udHNldCBuYW1lOiAlcyIKK21zZ3N0ciAiRTI1MjogpnKrrLawKEZvbnRzZXQpple62TogJXMiCisKKyM6IGd1aV94MTEuYzoyMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQgJyVzJyBpcyBub3QgZml4ZWQtd2lkdGgiCittc2dzdHIgIiclcycgpKOsT6lUqXe8ZavXpnKrrCIKKworIzogZ3VpX3gxMS5jOjIwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1MzogRm9udHNldCBuYW1lOiAlc1xuIgorbXNnc3RyICJFMjUzOiCmcqustrAoRm9udHNldCmmV7rZOiAlc1xuIgorCisjOiBndWlfeDExLmM6MjA4MworIywgYy1mb3JtYXQKK21zZ2lkICJGb250MDogJXNcbiIKK21zZ3N0ciAiRm9udDA6ICVzXG4iCisKKyM6IGd1aV94MTEuYzoyMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvbnQxOiAlc1xuIgorbXNnc3RyICJGb250MTogJXNcbiIKKworIzogZ3VpX3gxMS5jOjIwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udCVkIHdpZHRoIGlzIG5vdCB0d2ljZSB0aGF0IG9mIGZvbnQwXG4iCittc2dzdHIgIqZyq6wlZLxlq9eko6xPpnKrrDCquqjirb9cbiIKKworIzogZ3VpX3gxMS5jOjIwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9udDAgd2lkdGg6ICVsZFxuIgorbXNnc3RyICKmcqusMKq6vGWr16FHJWxkXG4iCisKKyM6IGd1aV94MTEuYzoyMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb250MSB3aWR0aDogJWxkXG4iCisiXG4iCittc2dzdHIgIiIKKyKmcqusMbxlq9c6ICVsZFxuIgorIlxuIgorCisjOiBoYW5ndWxpbi5jOjYxMAorbXNnaWQgIkUyNTY6IEhhbmd1bCBhdXRvbWF0YSBFUlJPUiIKK21zZ3N0ciAiRTI1NjogSGFuZ3VsIGF1dG9tYXRhIL/5u34iCisKKyM6IGlmX2NzY29wZS5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjA6IFVzYWdlOiBjc1tjb3BlXSAlcyIKK21zZ3N0ciAiRTU2MDogpc6qazogY3NbY29wZV0gJXMiCisKKyM6IGlmX2NzY29wZS5jOjY3Cittc2dpZCAiQWRkIGEgbmV3IGRhdGFiYXNlIgorbXNnc3RyICK3c7xXuOquxq53IgorCisjOiBpZl9jc2NvcGUuYzo2OQorbXNnaWQgIlF1ZXJ5IGZvciBhIHBhdHRlcm4iCittc2dzdHIgIr/ppEogcGF0dGVybiIKKworIzogaWZfY3Njb3BlLmM6NzEKK21zZ2lkICJTaG93IHRoaXMgbWVzc2FnZSIKK21zZ3N0ciAixeOl3Ka5sFSupyIKKworIzogaWZfY3Njb3BlLmM6NzMKK21zZ2lkICJLaWxsIGEgY29ubmVjdGlvbiIKK21zZ3N0ciAitbKn9LNzvXUiCisKKyM6IGlmX2NzY29wZS5jOjc1Cittc2dpZCAiUmVpbml0IGFsbCBjb25uZWN0aW9ucyIKK21zZ3N0ciAirauzXanSprOzc711IgorCisjOiBpZl9jc2NvcGUuYzo3NworbXNnaWQgIlNob3cgY29ubmVjdGlvbnMiCittc2dzdHIgIsXjpdyzc711IgorCisjOiBpZl9jc2NvcGUuYzoxMDgKK21zZ2lkICJUaGlzIGNzY29wZSBjb21tYW5kIGRvZXMgbm90IHN1cHBvcnQgc3BsaXR0aW5nIHRoZSB3aW5kb3cuXG4iCittc2dzdHIgIrNvrdMgY3Njb3BlIKlSpU+ko6TktKmkwLPOv8O59VxuIgorCisjOiBpZl9jc2NvcGUuYzoxNDMKK21zZ2lkICJFNTYyOiBVc2FnZTogY3N0YWcgPGlkZW50PiIKK21zZ3N0ciAiRTU2Mjogpc6qazogY3N0YWcgPMPRp0+mcmlkZW50PiIKKworIzogaWZfY3Njb3BlLmM6MTk5Cittc2dpZCAiRTI1NzogY3N0YWc6IHRhZyBub3QgZm91bmQiCittc2dzdHIgIkUyNTc6IGNzdGFnOiCn5KSjqOwgdGFnIgorCisjOiBpZl9jc2NvcGUuYzo0MDcgaWZfY3Njb3BlLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjM6IHN0YXQoJXMpIGVycm9yOiAlZCIKK21zZ3N0ciAiRTU2Mzogc3RhdCglcykgv/m7fjogJWQiCisKKyM6IGlmX2NzY29wZS5jOjQ2MSBpZl9jc2NvcGUuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkZWQgY3Njb3BlIGRhdGFiYXNlICVzIgorbXNnc3RyICK3c7xXIGNzY29wZSC46q7GrncgJXMiCisKKyM6IGlmX2NzY29wZS5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTY0OiAlcyBpcyBub3QgYSBkaXJlY3Rvcnkgb3IgYSB2YWxpZCBjc2NvcGUgZGF0YWJhc2UiCittc2dzdHIgIkU1NjQ6ICVzIKSjrE+l2L/9qc4gY3Njb3BlILjqrsaudyIKKworIzogaWZfY3Njb3BlLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NjU6IGVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWQiCittc2dzdHIgIkU1NjU6IMWqqPogY3Njb3BlILNzvXUgJWQgv/m7fiIKKworIzogaWZfY3Njb3BlLmM6NjM2Cittc2dpZCAiRTU2MTogdW5rbm93biBjc2NvcGUgc2VhcmNoIHR5cGUiCittc2dzdHIgIkU1NjE6IKW8qr6quiBjc2NvcGUgt2q0TafOukEiCisKKyM6IGlmX2NzY29wZS5jOjY4MworbXNnaWQgIkU1NjY6IENvdWxkIG5vdCBjcmVhdGUgY3Njb3BlIHBpcGVzIgorbXNnc3RyICJFNTY2OiC1TKprq9il37tQIGNzY29wZSCquiBwaXBlILNzvXUiCisKKyM6IGlmX2NzY29wZS5jOjc0OAorbXNnaWQgImNzX2NyZWF0ZV9jb25uZWN0aW9uIGV4ZWMgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbiCw9abmpaKx0SIKKworIzogaWZfY3Njb3BlLmM6NzU4Cittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgdG9fZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIKWisdEgKHRvX2ZwKSIKKworIzogaWZfY3Njb3BlLmM6NzYwCittc2dpZCAiY3NfY3JlYXRlX2Nvbm5lY3Rpb246IGZkb3BlbiBmb3IgZnJfZnAgZmFpbGVkIgorbXNnc3RyICJjc19jcmVhdGVfY29ubmVjdGlvbjogZmRvcGVuIKWisdEgKGZyX2ZwKSIKKworIzogaWZfY3Njb3BlLmM6Nzg4Cittc2dpZCAiRTU2Nzogbm8gY3Njb3BlIGNvbm5lY3Rpb25zIgorbXNnc3RyICJFNTY3OiCoU6azIGNzY29wZSCzc711IgorCisjOiBpZl9jc2NvcGUuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI1OTogbm8gbWF0Y2hlcyBmb3VuZCBmb3IgY3Njb3BlIHF1ZXJ5ICVzIG9mICVzIgorbXNnc3RyICJFMjU5OiCn5KSjqOyyxaZYIGNzY29wZSCqurdqtE0gJXMgLyAlcyIKKworIzogaWZfY3Njb3BlLmM6OTAyCittc2dpZCAiY3Njb3BlIGNvbW1hbmRzOlxuIgorbXNnc3RyICJjc2NvcGUgqVKlTzpcbiIKKworIzogaWZfY3Njb3BlLmM6OTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtNXM6ICUtMzBzIChVc2FnZTogJXMpXG4iCittc2dzdHIgIiUtNXM6ICUtMzBzICilzqprOiAlcylcbiIKKworIzogaWZfY3Njb3BlLmM6OTczCittc2dpZCAiRTU2ODogZHVwbGljYXRlIGNzY29wZSBkYXRhYmFzZSBub3QgYWRkZWQiCittc2dzdHIgIkU1Njg6IK2rvcaquiBjc2NvcGUguOquxq53pbyzUaVbpEoiCisKKyM6IGlmX2NzY29wZS5jOjk4NAorbXNnaWQgIkU1Njk6IG1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyByZWFjaGVkIgorbXNnc3RyICJFNTY5OiCkd7lGqOwgY3Njb3BlILPMpGqzc711vMal2CIKKworIzogaWZfY3Njb3BlLmM6MTEwNQorbXNnaWQgIkUyNjA6IGNzY29wZSBjb25uZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MDogp+Sko6jsIGNzY29wZSCzc711IgorCisjOiBpZl9jc2NvcGUuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyNjE6IGNzY29wZSBjb25uZWN0aW9uICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTI2MTogp+Sko6jsIGNzY29wZSCzc711ICVzIgorCisjOiBpZl9jc2NvcGUuYzoxMTQ0Cittc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gY2xvc2VkIgorbXNnc3RyICJjc2NvcGUgs3O9daR3w/azrCIKKworIzogaWZfY3Njb3BlLmM6MTE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjc2NvcGUgY29ubmVjdGlvbiAlcyBjbG9zZWRcbiIKK21zZ3N0ciAiY3Njb3BlILNzvXUgJXMgpHfD9rOsXG4iCisKKyMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQorIzogaWZfY3Njb3BlLmM6MTI5MworbXNnaWQgIkU1NzA6IGZhdGFsIGVycm9yIGluIGNzX21hbmFnZV9tYXRjaGVzIgorbXNnc3RyICJFNTcwOiBjc19tYW5hZ2VfbWF0Y2hlcyDEWa2rv/m7fiIKKworIzogaWZfY3Njb3BlLmM6MTM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJFMjYyOiBlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVkIgorbXNnc3RyICJFMjYyOiDFqqj6IGNzY29wZSCzc711ICVkIL/5u34iCisKKyM6IGlmX2NzY29wZS5jOjE0NTIKK21zZ2lkICJjb3VsZG4ndCBtYWxsb2NcbiIKK21zZ3N0ciAitUyqa6jPpc4gbWFsbG9jXG4iCisKKyM6IGlmX2NzY29wZS5jOjE0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3Njb3BlIHRhZzogJXNcbiIKK21zZ3N0ciAiQ3Njb3BlILzQxdIodGFnKTogJXNcbiIKKworIzogaWZfY3Njb3BlLmM6MTQ2MQorbXNnaWQgIiAgICMgICBsaW5lIgorbXNnc3RyICIgICAjICAgpuYgICIKKworIzogaWZfY3Njb3BlLmM6MTQ2MworbXNnaWQgImZpbGVuYW1lIC8gY29udGV4dCAvIGxpbmVcbiIKK21zZ3N0ciAiwMmmVyAgICAgLyCkuqTlICAgIC8gpua4uVxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzIxCittc2dpZCAiQWxsIGNzY29wZSBkYXRhYmFzZXMgcmVzZXQiCittc2dzdHIgIq2rs12p0qazIGNzY29wZSC46q7GrnciCisKKyM6IGlmX2NzY29wZS5jOjE3ODgKK21zZ2lkICJubyBjc2NvcGUgY29ubmVjdGlvbnNcbiIKK21zZ3N0ciAiqFOmsyBjc2NvcGUgs3O9dVxuIgorCisjOiBpZl9jc2NvcGUuYzoxNzkyCittc2dpZCAiICMgcGlkICAgIGRhdGFiYXNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgcGF0aFxuIgorbXNnc3RyICIgIyBwaWQgICAguOquxq53ple62SAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCBwYXRoXG4iCisKKyM6IGlmX2NzY29wZS5jOjE4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTJkICUtNWxkICAlLTM0cyAgPG5vbmU+XG4iCittc2dzdHIgIiUyZCAlLTVsZCAgJS0zNHMgIDy1TD5cbiIKKworIzogaWZfcHl0aG9uLmM6Mzk0Cittc2dpZCAiIgorIkUyNjM6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBQeXRob24gbGlicmFyeSBjb3VsZCBub3QgYmUgIgorImxvYWRlZC4iCittc2dzdHIgIkUyNjM6IKnqunChQbNvrdOpUqVPtUyqa6jPpc6hQVB5dGhvbiC1e6ahrneoU6azuPykSqFDIgorCisjOiBpZl9weXRob24uYzo1OTYKK21zZ2lkICJjYW4ndCBkZWxldGUgT3V0cHV0T2JqZWN0IGF0dHJpYnV0ZXMiCittc2dzdHIgIrVMqmunUrCjIE91dHB1dE9iamVjdCDE3anKIgorCisjOiBpZl9weXRob24uYzo2MDMKK21zZ2lkICJzb2Z0c3BhY2UgbXVzdCBiZSBhbiBpbnRlZ2VyIgorbXNnc3RyICJzb2Z0c3BhY2UgpbK73axPvuO8xiIKKworIzogaWZfcHl0aG9uLmM6NjExCittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUiCittc2dzdHIgIqSjpb+9VKq6xN2pyiIKKworIzogaWZfcHl0aG9uLmM6NjUwIGlmX3B5dGhvbi5jOjY2NAorbXNnaWQgIndyaXRlbGluZXMoKSByZXF1aXJlcyBsaXN0IG9mIHN0cmluZ3MiCittc2dzdHIgIndyaXRlbGluZXMoKSC73a1uIHN0cmluZyBsaXN0ILftsNG8xiIKKworIzogaWZfcHl0aG9uLmM6NzkwCittc2dpZCAiRTI2NDogUHl0aG9uOiBFcnJvciBpbml0aWFsaXNpbmcgSS9PIG9iamVjdHMiCittc2dzdHIgIkUyNjQ6IFB5dGhvbjogtUyqa6rsqWwgSS9PIKqrpfMiCisKKyM6IGlmX3B5dGhvbi5jOjk3NSBpZl90Y2wuYzoxNDAyCittc2dpZCAiaW52YWxpZCBleHByZXNzaW9uIgorbXNnc3RyICKko6W/vVSqurlCuuKmoSIKKworIzogaWZfcHl0aG9uLmM6OTg5IGlmX3RjbC5jOjE0MDcKK21zZ2lkICJleHByZXNzaW9ucyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUiCittc2dzdHIgIqZdrLC9c8S2rsmoU6azpVukSrlCuuKmoShleHByZXNzaW9uKaq6tXumob1YoUGp0qVItUyqa6jPpc65QrripqEiCisKKyM6IGlmX3B5dGhvbi5jOjEwMDIKK21zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgorbXNnc3RyICK41bnPqM+lzqR3s1GnUrCjqrogYnVmZmVyIgorCisjOiBpZl9weXRob24uYzoxMDE3IGlmX3B5dGhvbi5jOjEwNTggaWZfcHl0aG9uLmM6MTEyMiBpZl90Y2wuYzoxMjE0Cittc2dpZCAibGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIgorbXNnc3RyICKm5ri5tlelWL1ks/IiCisKKyM6IGlmX3B5dGhvbi5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiPGJ1ZmZlciBvYmplY3QgKGRlbGV0ZWQpIGF0ICU4bFg+IgorbXNnc3RyICI8YnVmZmVyIKqrpfMgKKR3p1Kwoyk6ICU4bFg+IgorCisjOiBpZl9weXRob24uYzoxMzQ4IGlmX3RjbC5jOjgzNgorbXNnaWQgImludmFsaWQgbWFyayBuYW1lIgorbXNnc3RyICK80LBPple62aSjpb+9VCIKKworIzogaWZfcHl0aG9uLmM6MTYyMworbXNnaWQgIm5vIHN1Y2ggYnVmZmVyIgorbXNnc3RyICK1TKa5IGJ1ZmZlciIKKworIzogaWZfcHl0aG9uLmM6MTcxMQorbXNnaWQgImF0dGVtcHQgdG8gcmVmZXIgdG8gZGVsZXRlZCB3aW5kb3ciCittc2dzdHIgIrjVuc+oz6XOpHezUadSsKOqurX4taEiCisKKyM6IGlmX3B5dGhvbi5jOjE3NTYKK21zZ2lkICJyZWFkb25seSBhdHRyaWJ1dGUiCittc2dzdHIgIrDfxarE3anKIgorCisjOiBpZl9weXRob24uYzoxNzY5Cittc2dpZCAiY3Vyc29yIHBvc2l0aW9uIG91dHNpZGUgYnVmZmVyIgorbXNnc3RyICK05bzQqXem7KZivXe9xLDPpKelfiIKKworIzogaWZfcHl0aG9uLmM6MTg0NgorIywgYy1mb3JtYXQKK21zZ2lkICI8d2luZG93IG9iamVjdCAoZGVsZXRlZCkgYXQgJS44bFg+IgorbXNnc3RyICI8tfi1oaqrpfMopHenUrCjKTogJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iCittc2dzdHIgIjy1+LWhqqul8yilvKq+KTogJS44bFg+IgorCisjOiBpZl9weXRob24uYzoxODYwCisjLCBjLWZvcm1hdAorbXNnaWQgIjx3aW5kb3cgJWQ+IgorbXNnc3RyICI8tfi1oSAlZD4iCisKKyM6IGlmX3B5dGhvbi5jOjE5MzYKK21zZ2lkICJubyBzdWNoIHdpbmRvdyIKK21zZ3N0ciAitUymubX4taEiCisKKyM6IGlmX3B5dGhvbi5jOjIxOTMgaWZfcHl0aG9uLmM6MjIyOCBpZl9weXRob24uYzoyMjc4IGlmX3B5dGhvbi5jOjIzNDYKKyM6IGlmX3B5dGhvbi5jOjI0NjYgaWZfcHl0aG9uLmM6MjUxOCBpZl90Y2wuYzo2ODQgaWZfdGNsLmM6NzI5IGlmX3RjbC5jOjgwMworIzogaWZfdGNsLmM6ODczIGlmX3RjbC5jOjE5OTgKK21zZ2lkICJjYW5ub3Qgc2F2ZSB1bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICK1TKprwHimc7Rfrey46rBUIgorCisjOiBpZl9weXRob24uYzoyMTk1IGlmX3B5dGhvbi5jOjIyODUgaWZfcHl0aG9uLmM6MjM1NworbXNnaWQgImNhbm5vdCBkZWxldGUgbGluZSIKK21zZ3N0ciAipKOv4KdSsKOmuabmIgorCisjOiBpZl9weXRob24uYzoyMjMwIGlmX3B5dGhvbi5jOjIzNzMgaWZfdGNsLmM6NjkwIGlmX3RjbC5jOjIwMjAKK21zZ2lkICJjYW5ub3QgcmVwbGFjZSBsaW5lIgorbXNnc3RyICKko6/gtMClTqa5puYiCisKKyM6IGlmX3B5dGhvbi5jOjIzODkgaWZfcHl0aG9uLmM6MjQ2OCBpZl9weXRob24uYzoyNTI2Cittc2dpZCAiY2Fubm90IGluc2VydCBsaW5lIgorbXNnc3RyICKko6/gtMClTrShpEqmuabmIgorCisjOiBpZl9weXRob24uYzoyNjMwCittc2dpZCAic3RyaW5nIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICKmcqbqtUyqa6Vdp3S3c6bmIgorCisjOiBpZl9ydWJ5LmM6Mzk2Cittc2dpZCAiIgorIkUyNjY6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQsIHRoZSBSdWJ5IGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIkUyNjY6IKa5qVKlT7VMqmuoz6XOoUG1TKpruPykSiBSdWJ5ILV7pqGudyhMaWJyYXJ5KSIKKworIzogaWZfcnVieS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjczOiB1bmtub3duIGxvbmdqbXAgc3RhdHVzICVkIgorbXNnc3RyICJFMjczOiClvKq+qrogbG9uZ2ptcCBzdGF0dXMgJWQiCisKKyM6IGlmX3NuaWZmLmM6NjcKK21zZ2lkICJUb2dnbGUgaW1wbGVtZW50YXRpb24vZGVmaW5pdGlvbiIKK21zZ3N0ciAipMG0q7nqp0AvqXe4cSIKKworIzogaWZfc25pZmYuYzo2OAorbXNnaWQgIlNob3cgYmFzZSBjbGFzcyBvZiIKK21zZ3N0ciAixeOl3CBiYXNlIGNsYXNzIG9mOiIKKworIzogaWZfc25pZmYuYzo2OQorbXNnaWQgIlNob3cgb3ZlcnJpZGRlbiBtZW1iZXIgZnVuY3Rpb24iCittc2dzdHIgIsXjpdyzUSBvdmVycmlkZSCquiBtZW1iZXIgZnVuY3Rpb24iCisKKyM6IGlmX3NuaWZmLmM6NzAKK21zZ2lkICJSZXRyaWV2ZSBmcm9tIGZpbGUiCittc2dzdHIgIsWqqPo6ILFxwMmu1yIKKworIzogaWZfc25pZmYuYzo3MQorbXNnaWQgIlJldHJpZXZlIGZyb20gcHJvamVjdCIKK21zZ3N0ciAixaqo+jogsXGqq6XzIgorCisjOiBpZl9zbmlmZi5jOjczCittc2dpZCAiUmV0cmlldmUgZnJvbSBhbGwgcHJvamVjdHMiCittc2dzdHIgIsWqqPo6ILFxqdKmsyBwcm9qZWN0IgorCisjOiBpZl9zbmlmZi5jOjc0Cittc2dpZCAiUmV0cmlldmUiCittc2dzdHIgIsWqqPoiCisKKyM6IGlmX3NuaWZmLmM6NzUKK21zZ2lkICJTaG93IHNvdXJjZSBvZiIKK21zZ3N0ciAixeOl3K3sqWy9WDogIgorCisjOiBpZl9zbmlmZi5jOjc2Cittc2dpZCAiRmluZCBzeW1ib2wiCittc2dzdHIgIrdqtE0gc3ltYm9sIgorCisjOiBpZl9zbmlmZi5jOjc3Cittc2dpZCAiQnJvd3NlIGNsYXNzIgorbXNnc3RyICLCc8T9IGNsYXNzIgorCisjOiBpZl9zbmlmZi5jOjc4Cittc2dpZCAiU2hvdyBjbGFzcyBpbiBoaWVyYXJjaHkiCittc2dzdHIgIsXjpdy2pbxopqGquiBjbGFzcyIKKworIzogaWZfc25pZmYuYzo3OQorbXNnaWQgIlNob3cgY2xhc3MgaW4gcmVzdHJpY3RlZCBoaWVyYXJjaHkiCittc2dzdHIgIsXjpdwgcmVzdHJpY3RlZCC2pbxopqGquiBjbGFzcyIKKworIzogaWZfc25pZmYuYzo4MAorbXNnaWQgIlhyZWYgcmVmZXJzIHRvIgorbXNnc3RyICJYcmVmILDRptKo7CIKKworIzogaWZfc25pZmYuYzo4MQorbXNnaWQgIlhyZWYgcmVmZXJyZWQgYnkiCittc2dzdHIgIlhyZWYgs1G91rDRptI6IgorCisjOiBpZl9zbmlmZi5jOjgyCittc2dpZCAiWHJlZiBoYXMgYSIKK21zZ3N0ciAiWHJlZiCmsyIKKworIzogaWZfc25pZmYuYzo4MworbXNnaWQgIlhyZWYgdXNlZCBieSIKK21zZ3N0ciAiWHJlZiCzUb3WqM+lzjoiCisKKyM6IGlmX3NuaWZmLmM6ODQKK21zZ2lkICJTaG93IGRvY3Ugb2YiCittc2dzdHIgIsXjpdyk5aXzOiAiCisKKyM6IGlmX3NuaWZmLmM6ODUKK21zZ2lkICJHZW5lcmF0ZSBkb2N1IGZvciIKK21zZ3N0ciAisqOlzaTlpfM6ICIKKworIzogaWZfc25pZmYuYzo5NworbXNnaWQgIiIKKyJDYW5ub3QgY29ubmVjdCB0byBTTmlGRisuIENoZWNrIGVudmlyb25tZW50IChzbmlmZmVtYWNzIG11c3QgYmUgZm91bmQgaW4gIgorIiRQQVRIKS5cbiIKK21zZ3N0ciAitUyqa7NzvXWo7CBTTmlGRiuhQ73QwMusZMD0udLF3LzGICgkUEFUSCC4zKWyu92laaVIp+So7CBzbmlmZmVtYWNzKVxuIgorCisjOiBpZl9zbmlmZi5jOjQyNQorbXNnaWQgIkUyNzQ6IFNuaWZmOiBFcnJvciBkdXJpbmcgcmVhZC4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJFMjc0OiBTbmlmZjogxaqo+r/5u34uIKj6rvizc711IgorCisjOiBpZl9zbmlmZi5jOjU1MworbXNnaWQgIlNOaUZGKyBpcyBjdXJyZW50bHkgIgorbXNnc3RyICJTTmlGRisgpdirZSIKKworIzogaWZfc25pZmYuYzo1NTUKK21zZ2lkICJub3QgIgorbXNnc3RyICKlvCIKKworIzogaWZfc25pZmYuYzo1NTYKK21zZ2lkICJjb25uZWN0ZWQiCittc2dzdHIgIrNzvXWkpCIKKworIzogaWZfc25pZmYuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI3NTogVW5rbm93biBTTmlGRisgcmVxdWVzdDogJXMiCittc2dzdHIgIkUyNzU6IKSjpb+9VKq6IFNOaWZmKyCpSaVzOiAlcyIKKworIzogaWZfc25pZmYuYzo2MDUKK21zZ2lkICJFMjc2OiBFcnJvciBjb25uZWN0aW5nIHRvIFNOaUZGKyIKK21zZ3N0ciAiRTI3Njogs3O9dajsIFNOaUZGKyClorHRIgorCisjOiBpZl9zbmlmZi5jOjEwMDkKK21zZ2lkICJFMjc4OiBTTmlGRisgbm90IGNvbm5lY3RlZCIKK21zZ3N0ciAiRTI3ODogpbyzc711qOwgU05pRkYrIgorCisjOiBpZl9zbmlmZi5jOjEwMTgKK21zZ2lkICJFMjc5OiBOb3QgYSBTTmlGRisgYnVmZmVyIgorbXNnc3RyICJFMjc5OiCko6xPIFNOaUZGKyCqur13vcSwzyIKKworIzogaWZfc25pZmYuYzoxMDgzCittc2dpZCAiU25pZmY6IEVycm9yIGR1cmluZyB3cml0ZS4gRGlzY29ubmVjdGVkIgorbXNnc3RyICJTbmlmZjogvGekSr/5u36hQ7Wyp/Szc711IgorCisjOiBpZl90Y2wuYzo0MTgKK21zZ2lkICJpbnZhbGlkIGJ1ZmZlciBudW1iZXIiCittc2dzdHIgIr13vcSwz7i5vVi/+bt+IgorCisjOiBpZl90Y2wuYzo0NjQgaWZfdGNsLmM6OTMxIGlmX3RjbC5jOjExMTAKK21zZ2lkICJub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICKpfKW8ueqnQCIKKworIzogaWZfdGNsLmM6NTAxCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIqSjpb+9VKq6v++2tSIKKworIy4gPz8/CisjOiBpZl90Y2wuYzo3NzQKK21zZ2lkICJjYW5ub3Qgc2V0IGxpbmUocykiCittc2dzdHIgIqSjr+CzXal3puYiCisKKyM6IGlmX3RjbC5jOjg0NQorbXNnaWQgIm1hcmsgbm90IHNldCIKK21zZ3N0ciAiqFOms7NdqXe80LBPIgorCisjOiBpZl90Y2wuYzo4NTEgaWZfdGNsLmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJyb3cgJWQgY29sdW1uICVkIgorbXNnc3RyICKmQyAlZCCm5iAlZCIKKworIzogaWZfdGNsLmM6ODgxCittc2dpZCAiY2Fubm90IGluc2VydC9hcHBlbmQgbGluZSIKK21zZ3N0ciAipKOv4LShpEqpzqr+pVumuabmIgorCisjOiBpZl90Y2wuYzoxMjY4Cittc2dpZCAidW5rbm93biBmbGFnOiAiCittc2dzdHIgIr/5u36qurpYvNA6ICIKKworIzogaWZfdGNsLmM6MTMzOAorbXNnaWQgInVua25vd24gdmltT3B0aW9uIgorbXNnc3RyICKko6W/vVSquiBWSU0gv++2tSIKKworIzogaWZfdGNsLmM6MTQyMworbXNnaWQgImtleWJvYXJkIGludGVycnVwdCIKK21zZ3N0ciAiweS9TKSkwl8iCisKKyM6IGlmX3RjbC5jOjE0MjgKK21zZ2lkICJ2aW0gZXJyb3IiCittc2dzdHIgInZpbSC/+bt+IgorCisjOiBpZl90Y2wuYzoxNDcxCittc2dpZCAiY2Fubm90IGNyZWF0ZSBidWZmZXIvd2luZG93IGNvbW1hbmQ6IG9iamVjdCBpcyBiZWluZyBkZWxldGVkIgorbXNnc3RyICK1TKprq9il3713vcSwzy+1+LWhqVKlTzogqqul87FOt3yzUadSsKMiCisKKyM6IGlmX3RjbC5jOjE1NDUKK21zZ2lkICIiCisiY2Fubm90IHJlZ2lzdGVyIGNhbGxiYWNrIGNvbW1hbmQ6IGJ1ZmZlci93aW5kb3cgaXMgYWxyZWFkeSBiZWluZyBkZWxldGVkIgorbXNnc3RyICK1TKprtfmlVSBjYWxsYmFjayCpUqVPOiC9d73EsM8vtfi1oaR3uGezUadSsKOkRiIKKworIy4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgRmFtb3VzIGxhc3Qgd29yZD8KKyM6IGlmX3RjbC5jOjE1NjIKK21zZ2lkICIiCisiRTI4MDogVENMIEZBVEFMIEVSUk9SOiByZWZsaXN0IGNvcnJ1cHQhPyBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdmltLWRldkB2aW0uIgorIm9yZyIKK21zZ3N0ciAiRTI4MDogVENMIMRZrau/+bt+OiByZWZsaXN0IMTqsbykRiE/IL3Qs/inabW5IHRvIHZpbS1kZXZAdmltLm9yZyIKKworIzogaWZfdGNsLmM6MTU2MworbXNnaWQgImNhbm5vdCByZWdpc3RlciBjYWxsYmFjayBjb21tYW5kOiBidWZmZXIvd2luZG93IHJlZmVyZW5jZSBub3QgZm91bmQiCittc2dzdHIgIrVMqmu1+aVVIGNhbGxiYWNrIKlSpU86IKfkpKOo7L13vcSwzy+1+LWhIgorCisjOiBpZl90Y2wuYzoxNzI0Cittc2dpZCAiIgorIkU1NzE6IFNvcnJ5LCB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZWQ6IHRoZSBUY2wgbGlicmFyeSBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorIkU1NzE6IKa5qVKlT7VMqmuoz6XOLCCmXaywtUyqa7j8pEogVGNsILV7pqGudyhMaWJyYXJ5KSIKKworIzogaWZfdGNsLmM6MTg4NgorbXNnaWQgIiIKKyJFMjgxOiBUQ0wgRVJST1I6IGV4aXQgY29kZSBpcyBub3QgaW50IT8gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHZpbS1kZXZAdmltLm9yZyIKK21zZ3N0ciAiRTI4MTogVENMIL/5u346ILWyp/S9WKSjrE++47zGIT8gvdCz+KdptbkgdG8gdmltLWRldkB2aW0ub3JnIgorCisjOiBpZl90Y2wuYzoyMDA2Cittc2dpZCAiY2Fubm90IGdldCBsaW5lIgorbXNnc3RyICKko6/gqPqxb6a5puYiCisKKyM6IGlmX3hjbWRzcnYuYzoyMTUKK21zZ2lkICJVbmFibGUgdG8gcmVnaXN0ZXIgYSBjb21tYW5kIHNlcnZlciBuYW1lIgorbXNnc3RyICK1TKprtfmlValSpU+m+KpBvrmmV7rZIgorCisjOiBpZl94Y21kc3J2LmM6NDY1Cittc2dpZCAiRTI0ODogRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byB0aGUgZGVzdGluYXRpb24gcHJvZ3JhbSIKK21zZ3N0ciAiRTI0ODogtUyqa7BlpVipUqVPqOyl2Kq6pmG1e6ahIgorCisjOiBpZl94Y21kc3J2LmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzM6IEludmFsaWQgc2VydmVyIGlkIHVzZWQ6ICVzIgorbXNnc3RyICJFNTczOiCko6W/vVSquqb4qkG+uSBpZCA6ICVzIgorCisjOiBpZl94Y21kc3J2LmM6MTA5OAorbXNnaWQgIkUyNTE6IFZJTSBpbnN0YW5jZSByZWdpc3RyeSBwcm9wZXJ0eSBpcyBiYWRseSBmb3JtZWQuICBEZWxldGVkISIKK21zZ3N0ciAiRTI1MTogVklNIKq6IHJlZ2lzdHJ5ILNdqXe2taazu36hQ6R3p1Kwo6FDIgorCisjOiBtYWluLmM6NjAKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAipKOlv71Uqrq/77a1IgorCisjOiBtYWluLmM6NjIKK21zZ2lkICJUb28gbWFueSBlZGl0IGFyZ3VtZW50cyIKK21zZ3N0ciAipNOmaL1zv+iw0bzGIgorCisjOiBtYWluLmM6NjQKK21zZ2lkICJBcmd1bWVudCBtaXNzaW5nIGFmdGVyIgorbXNnc3RyICKvyqTWpbKtbqq6sNG8xjoiCisKKyM6IG1haW4uYzo2NgorbXNnaWQgIkdhcmJhZ2UgYWZ0ZXIgb3B0aW9uIgorbXNnc3RyICK1TKprv+u7e6a5v++2tavhqrqpUqVPOiAiCisKKyM6IG1haW4uYzo2OAorbXNnaWQgIlRvbyBtYW55IFwiK2NvbW1hbmRcIiBvciBcIi1jIGNvbW1hbmRcIiBhcmd1bWVudHMiCittc2dzdHIgIqTTpmggXCIrY29tbWFuZFwiIKnOIFwiLWMgY29tbWFuZFwiILDRvMYiCisKKyM6IG1haW4uYzo3MAorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgZm9yIgorbXNnc3RyICKko6W/vVSqurDRvMY6ICIKKworIzogbWFpbi5jOjQ2OQorbXNnaWQgIlRoaXMgVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgZGlmZiBmZWF0dXJlLiIKK21zZ3N0ciAisXqquiBWaW0gvXPEtq7JqFOms6VbpEogZGlmZiCquq/gpE8iCisKKyM6IG1haW4uYzo5MTcKK21zZ2lkICJBdHRlbXB0IHRvIG9wZW4gc2NyaXB0IGZpbGUgYWdhaW46IFwiIgorbXNnc3RyICK41bnPpkGmuLZ9sdIgc2NyaXB0IMDJOiBcIiIKKworIzogbWFpbi5jOjkyMSBtYWluLmM6OTI4IG1haW4uYzo5NzIgbWVtbGluZS5jOjM2ODIgbWVtbGluZS5jOjM2ODYKKyM6IHZlcnNpb24uYzo4NTcgdmVyc2lvbi5jOjg2MiB2ZXJzaW9uLmM6ODY3IHZlcnNpb24uYzo4NzIgdmVyc2lvbi5jOjg3NworIzogdmVyc2lvbi5jOjg4MiB2ZXJzaW9uLmM6ODg4IHZlcnNpb24uYzo4OTIgdmVyc2lvbi5jOjg5NiB2ZXJzaW9uLmM6OTAxCisjOiB2ZXJzaW9uLmM6OTA4IHZlcnNpb24uYzo5MTYgdmVyc2lvbi5jOjkyMgorbXNnaWQgIlwiXG4iCittc2dzdHIgIlwiXG4iCisKKyM6IG1haW4uYzo5MjYKK21zZ2lkICJDYW5ub3Qgb3BlbiBmb3IgcmVhZGluZzogXCIiCittc2dzdHIgIrVMqmu2fbHSpUjFqqj6OiBcIiIKKworIzogbWFpbi5jOjk3MAorbXNnaWQgIkNhbm5vdCBvcGVuIGZvciBzY3JpcHQgb3V0cHV0OiBcIiIKK21zZ3N0ciAitUyqa7Z9sdKssCBzY3JpcHQgv+mlWDogXCIiCisKKyM6IG1haW4uYzoxMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZpbGVzIHRvIGVkaXRcbiIKK21zZ3N0ciAiwdmmsyAlZCCt08DJrte1pavdvXO/6FxuIgorCisjOiBtYWluLmM6MTE3OAorbXNnaWQgIlZpbTogV2FybmluZzogT3V0cHV0IGlzIG5vdCB0byBhIHRlcm1pbmFsXG4iCittc2dzdHIgIlZpbTogqmC3Tjogv+mlWKSjrE+y17rdvvcov8O59SlcbiIKKworIzogbWFpbi5jOjExODAKK21zZ2lkICJWaW06IFdhcm5pbmc6IElucHV0IGlzIG5vdCBmcm9tIGEgdGVybWluYWxcbiIKK21zZ3N0ciAiVmltOiCqYLdOOiC/6aRKpKOsT7LXut2+9yjB5L1MKVxuIgorCisjLiBqdXN0IGluIGNhc2UuLgorIzogbWFpbi5jOjEyNTcKK21zZ2lkICJwcmUtdmltcmMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJ2aW1yYyCrZalSpU+mQyIKKworIzogbWFpbi5jOjEyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MjogQ2Fubm90IHJlYWQgZnJvbSBcIiVzXCIiCittc2dzdHIgIkUyODI6ILVMqmvFqqj6wMmu1yBcIiVzXCIiCisKKyM6IG1haW4uYzoyMzEzCittc2dpZCAiIgorIlxuIgorIk1vcmUgaW5mbyB3aXRoOiBcInZpbSAtaFwiXG4iCittc2dzdHIgIiIKKyJcbiIKKyKsZLjfp/OmaLjqsFS90LD1puY6IFwidmltIC1oXCJcbiIKKworIzogbWFpbi5jOjIzNDYKK21zZ2lkICJbZmlsZSAuLl0gICAgICAgZWRpdCBzcGVjaWZpZWQgZmlsZShzKSIKK21zZ3N0ciAiW8DJrtcgLi5dICAgICAgIL1zv+ir/Kl3qrrAya7XIgorCisjOiBtYWluLmM6MjM0NworbXNnaWQgIi0gICAgICAgICAgICAgICByZWFkIHRleHQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiLSAgICAgICAgICAgICAgILFxvNC3x7/ppEooc3RkaW4pxaqo+sDJrtciCisKKyM6IG1haW4uYzoyMzQ4Cittc2dpZCAiLXQgdGFnICAgICAgICAgIGVkaXQgZmlsZSB3aGVyZSB0YWcgaXMgZGVmaW5lZCIKK21zZ3N0ciAiLXQgdGFnICAgICAgICAgIL1zv+iuyajPpc6r/Kl3qrogdGFnIgorCisjOiBtYWluLmM6MjM1MAorbXNnaWQgIi1xIFtlcnJvcmZpbGVdICBlZGl0IGZpbGUgd2l0aCBmaXJzdCBlcnJvciIKK21zZ3N0ciAiLXEgW2Vycm9yZmlsZV0gIL1zv+iuybj8pEqyxKRArdO/+bt+IgorCisjOiBtYWluLmM6MjM1OQorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJ1c2FnZToiCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIgpc6qazoiCisKKyM6IG1haW4uYzoyMzYyCittc2dpZCAiIHZpbSBbYXJndW1lbnRzXSAiCittc2dzdHIgInZpbSBbsNG8xl0gIgorCisjOiBtYWluLmM6MjM2NgorbXNnaWQgIiIKKyJcbiIKKyIgICBvcjoiCittc2dzdHIgIiIKKyJcbiIKKyIgICCpzjoiCisKKyM6IG1haW4uYzoyMzY5Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkFyZ3VtZW50czpcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIrDRvMY6XG4iCisKKyM6IG1haW4uYzoyMzcwCittc2dpZCAiLS1cdFx0XHRPbmx5IGZpbGUgbmFtZXMgYWZ0ZXIgdGhpcyIKK21zZ3N0ciAiLS1cdFx0XHSldaazpmKzb6Snq+GqusDJrtciCisKKyM6IG1haW4uYzoyMzcyCittc2dpZCAiLS1saXRlcmFsXHRcdERvbid0IGV4cGFuZCB3aWxkY2FyZHMiCittc2dzdHIgIi0tbGl0ZXJhbFx0XHSko65ptn24VaXOpnKkuCIKKworIzogbWFpbi5jOjIzNzUKK21zZ2lkICItcmVnaXN0ZXJcdFx0UmVnaXN0ZXIgdGhpcyBndmltIGZvciBPTEUiCittc2dzdHIgIi1yZWdpc3Rlclx0XHS1+aVVIGd2aW0gqOwgT0xFIgorCisjOiBtYWluLmM6MjM3NgorbXNnaWQgIi11bnJlZ2lzdGVyXHRcdFVucmVnaXN0ZXIgZ3ZpbSBmb3IgT0xFIgorbXNnc3RyICItdW5yZWdpc3Rlclx0XHSo+q74IE9MRSCkpKq6IGd2aW0gtfmlVSIKKworIzogbWFpbi5jOjIzNzkKK21zZ2lkICItZ1x0XHRcdFJ1biB1c2luZyBHVUkgKGxpa2UgXCJndmltXCIpIgorbXNnc3RyICItZ1x0XHRcdKjPpc65z6fOrMmtsSAoplAgXCJndmltXCIpIgorCisjOiBtYWluLmM6MjM4MAorbXNnaWQgIi1mICBvciAgLS1ub2ZvcmtcdEZvcmVncm91bmQ6IERvbid0IGZvcmsgd2hlbiBzdGFydGluZyBHVUkiCittc2dzdHIgIi1mICCpziAgLS1ub2ZvcmtcdKtltLo6ILBfqWy5z6fOrMmtsa7JpKMgZm9yayIKKworIzogbWFpbi5jOjIzODIKK21zZ2lkICItdlx0XHRcdFZpIG1vZGUgKGxpa2UgXCJ2aVwiKSIKK21zZ3N0ciAiLXZcdFx0XHRWaSC80qahICimUCBcInZpXCIpIgorCisjOiBtYWluLmM6MjM4MworbXNnaWQgIi1lXHRcdFx0RXggbW9kZSAobGlrZSBcImV4XCIpIgorbXNnc3RyICItZVx0XHRcdEV4ILzSpqEgKKZQIFwiZXhcIikiCisKKyM6IG1haW4uYzoyMzg0Cittc2dpZCAiLXNcdFx0XHRTaWxlbnQgKGJhdGNoKSBtb2RlIChvbmx5IGZvciBcImV4XCIpIgorbXNnc3RyICItc1x0XHRcdKZ3wFIgKGJhdGNoKSC80qahICilda/gu1AgXCJleFwiIKRAsF+oz6XOKSIKKworIzogbWFpbi5jOjIzODYKK21zZ2lkICItZFx0XHRcdERpZmYgbW9kZSAobGlrZSBcInZpbWRpZmZcIikiCittc2dzdHIgIi1kXHRcdFx0RGlmZiC80qahICimUCBcInZpbWRpZmZcIiwgpWmos7N0pPG4+6jiwMmu16SjplCzQikiCisKKyM6IG1haW4uYzoyMzg4Cittc2dpZCAiLXlcdFx0XHRFYXN5IG1vZGUgKGxpa2UgXCJldmltXCIsIG1vZGVsZXNzKSIKK21zZ3N0ciAiLXlcdFx0XHTCsqn2vNKmoSAoplAgXCJldmltXCIsIG1vZGVsZXNzKSIKKworIzogbWFpbi5jOjIzODkKK21zZ2lkICItUlx0XHRcdFJlYWRvbmx5IG1vZGUgKGxpa2UgXCJ2aWV3XCIpIgorbXNnc3RyICItUlx0XHRcdLDfxaq80qahICimUCBcInZpZXdcIikiCisKKyM6IG1haW4uYzoyMzkwCittc2dpZCAiLVpcdFx0XHRSZXN0cmljdGVkIG1vZGUgKGxpa2UgXCJydmltXCIpIgorbXNnc3RyICItWlx0XHRcdK2tqO680qahICimUCBcInJ2aW1cIikiCisKKyM6IG1haW4uYzoyMzkxCittc2dpZCAiLW1cdFx0XHRNb2RpZmljYXRpb25zICh3cml0aW5nIGZpbGVzKSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiLW1cdFx0XHSko6Vprden7yAovGekSsDJrtcpIgorCisjOiBtYWluLmM6MjM5MgorbXNnaWQgIi1NXHRcdFx0TW9kaWZpY2F0aW9ucyBpbiB0ZXh0IG5vdCBhbGxvd2VkIgorbXNnc3RyICItTVx0XHRcdKSjpWmt16fvpOWmciIKKworIzogbWFpbi5jOjIzOTMKK21zZ2lkICItYlx0XHRcdEJpbmFyeSBtb2RlIgorbXNnc3RyICItYlx0XHRcdKRHtmmm7LzSpqEiCisKKyM6IG1haW4uYzoyMzk1Cittc2dpZCAiLWxcdFx0XHRMaXNwIG1vZGUiCittc2dzdHIgIi1sXHRcdFx0TGlzcCC80qahIgorCisjOiBtYWluLmM6MjM5NworbXNnaWQgIi1DXHRcdFx0Q29tcGF0aWJsZSB3aXRoIFZpOiAnY29tcGF0aWJsZSciCittc2dzdHIgIi1DXHRcdFx0J2NvbXBhdGlibGUnILbHss4gVmkgrNuuZbzSpqEiCisKKyM6IG1haW4uYzoyMzk4Cittc2dpZCAiLU5cdFx0XHROb3QgZnVsbHkgVmkgY29tcGF0aWJsZTogJ25vY29tcGF0aWJsZSciCittc2dzdHIgIi1OXHRcdFx0J25vY29tcGF0aWJsZScgpKOnuaX+u1C2x7LOIFZpIKzbrmWhQaVpqM+lziBWaW0gpVuxaq/gpE8iCisKKyM6IG1haW4uYzoyMzk5Cittc2dpZCAiLVZbTl1cdFx0VmVyYm9zZSBsZXZlbCIKK21zZ3N0ciAiLVZbTl1cdFx0VmVyYm9zZSC1pa/FIgorCisjOiBtYWluLmM6MjQwMAorbXNnaWQgIi1EXHRcdFx0RGVidWdnaW5nIG1vZGUiCittc2dzdHIgIi1EXHRcdFx0sKO/+bzSpqEiCisKKyM6IG1haW4uYzoyNDAxCittc2dpZCAiLW5cdFx0XHRObyBzd2FwIGZpbGUsIHVzZSBtZW1vcnkgb25seSIKK21zZ3N0ciAiLW5cdFx0XHSko6jPpc68yKZzwMksIKV1qM+lzrBPvtDF6SIKKworIzogbWFpbi5jOjI0MDIKK21zZ2lkICItclx0XHRcdExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdCIKK21zZ3N0ciAiLXJcdFx0XHSmQ6VYvMimc8DJq+HC97Z9IgorCisjOiBtYWluLmM6MjQwMworbXNnaWQgIi1yICh3aXRoIGZpbGUgbmFtZSlcdFJlY292ZXIgY3Jhc2hlZCBzZXNzaW9uIgorbXNnc3RyICItciAopVvAyaZXKSAgICAgICBcdK3XtF+kV6a4t2y3tKq6uOquxihSZWNvdmVyIGNyYXNoZWQgc2Vzc2lvbikiCisKKyM6IG1haW4uYzoyNDA0Cittc2dpZCAiLUxcdFx0XHRTYW1lIGFzIC1yIgorbXNnc3RyICItTFx0XHRcdKZQIC1yIgorCisjOiBtYWluLmM6MjQwNgorbXNnaWQgIi1mXHRcdFx0RG9uJ3QgdXNlIG5ld2NsaSB0byBvcGVuIHdpbmRvdyIKK21zZ3N0ciAiLWZcdFx0XHSko6jPpc4gbmV3Y2xpIKjTtn2x0rX4taEiCisKKyM6IG1haW4uYzoyNDA3Cittc2dpZCAiLWRldiA8ZGV2aWNlPlx0XHRVc2UgPGRldmljZT4gZm9yIEkvTyIKK21zZ3N0ciAiLWRldiA8ZGV2aWNlPlx0XHSoz6XOIDxkZXZpY2U+ILC1v+mlWKRKIgorCisjOiBtYWluLmM6MjQxMAorbXNnaWQgIi1IXHRcdFx0U3RhcnQgaW4gSGVicmV3IG1vZGUiCittc2dzdHIgIi1IXHRcdFx0sdKwyqywIEhlYnJldyC80qahIgorCisjOiBtYWluLmM6MjQxMworbXNnaWQgIi1GXHRcdFx0U3RhcnQgaW4gRmFyc2kgbW9kZSIKK21zZ3N0ciAiLUZcdFx0XHSx0rDKrLAgRmFyc2kgvNKmoSIKKworIzogbWFpbi5jOjI0MTUKK21zZ2lkICItVCA8dGVybWluYWw+XHRTZXQgdGVybWluYWwgdHlwZSB0byA8dGVybWluYWw+IgorbXNnc3RyICItVCA8dGVybWluYWw+XHSzXal3ste63b73rLAgPHRlcm1pbmFsPiIKKworIzogbWFpbi5jOjI0MTYKK21zZ2lkICItdSA8dmltcmM+XHRcdFVzZSA8dmltcmM+IGluc3RlYWQgb2YgYW55IC52aW1yYyIKK21zZ3N0ciAiLXUgPHZpbXJjPlx0XHSoz6XOIDx2aW1yYz4gqPqlTqX0pvMgLnZpbXJjIgorCisjOiBtYWluLmM6MjQxOAorbXNnaWQgIi1VIDxndmltcmM+XHRcdFVzZSA8Z3ZpbXJjPiBpbnN0ZWFkIG9mIGFueSAuZ3ZpbXJjIgorbXNnc3RyICItVSA8Z3ZpbXJjPlx0XHSoz6XOIDxndmltcmM+IKj6pU6l9KbzIC5ndmltcmMiCisKKyM6IG1haW4uYzoyNDIwCittc2dpZCAiLS1ub3BsdWdpblx0XHREb24ndCBsb2FkIHBsdWdpbiBzY3JpcHRzIgorbXNnc3RyICItLW5vcGx1Z2luXHRcdKSjuPykSqX0pvMgcGx1Z2luIgorCisjOiBtYWluLmM6MjQyMQorbXNnaWQgIi1vW05dXHRcdE9wZW4gTiB3aW5kb3dzIChkZWZhdWx0OiBvbmUgZm9yIGVhY2ggZmlsZSkiCittc2dzdHIgIi1vW05dXHRcdLZ9sdIgTiCt07X4taEgKLl3s12sT6hDrdPAya7XpECt0ykiCisKKyM6IG1haW4uYzoyNDIyCittc2dpZCAiLU9bTl1cdFx0TGlrZSAtbyBidXQgc3BsaXQgdmVydGljYWxseSIKK21zZ3N0ciAiLU9bTl1cdFx0plAgLW8gpv2oz6XOq6uqvaTAs84iCisKKyM6IG1haW4uYzoyNDIzCittc2dpZCAiK1x0XHRcdFN0YXJ0IGF0IGVuZCBvZiBmaWxlIgorbXNnc3RyICIrXHRcdFx0sdKwyqvhuPWo7MDJrte1sqfAIgorCisjOiBtYWluLmM6MjQyNAorbXNnaWQgIis8bG51bT5cdFx0U3RhcnQgYXQgbGluZSA8bG51bT4iCittc2dzdHIgIis8bG51bT5cdFx0sdKwyqvhuPWo7LLEIDxsbnVtPiCm5iIKKworIzogbWFpbi5jOjI0MjYKK21zZ2lkICItLWNtZCA8Y29tbWFuZD5cdEV4ZWN1dGUgPGNvbW1hbmQ+IGJlZm9yZSBsb2FkaW5nIGFueSB2aW1yYyBmaWxlIgorbXNnc3RyICItLWNtZCA8Y29tbWFuZD5cdLj8pEql9KbzIHZpbXJjIKtlsPWm5iA8Y29tbWFuZD4iCisKKyM6IG1haW4uYzoyNDI4Cittc2dpZCAiLWMgPGNvbW1hbmQ+XHRcdEV4ZWN1dGUgPGNvbW1hbmQ+IGFmdGVyIGxvYWRpbmcgdGhlIGZpcnN0IGZpbGUiCittc2dzdHIgIi1jIDxjb21tYW5kPlx0XHS4/KRKssSkQK3TwMmu16vhsPWm5iA8Y29tbWFuZD4iCisKKyM6IG1haW4uYzoyNDI5Cittc2dpZCAiLVMgPHNlc3Npb24+XHRcdFNvdXJjZSBmaWxlIDxzZXNzaW9uPiBhZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBmaWxlIgorbXNnc3RyICItUyA8c2Vzc2lvbj5cdFx0uPykSrLEpECt08DJrter4bj8pEogU2Vzc2lvbiDAySA8c2Vzc2lvbj4iCisKKyM6IG1haW4uYzoyNDMwCittc2dpZCAiLXMgPHNjcmlwdGluPlx0UmVhZCBOb3JtYWwgbW9kZSBjb21tYW5kcyBmcm9tIGZpbGUgPHNjcmlwdGluPiIKK21zZ3N0ciAiLXMgPHNjcmlwdGluPlx0sXEgPHNjcmlwdGluPiDFqqRKpECv67zSpqGpUqVPIgorCisjOiBtYWluLmM6MjQzMQorbXNnaWQgIi13IDxzY3JpcHRvdXQ+XHRBcHBlbmQgYWxsIHR5cGVkIGNvbW1hbmRzIHRvIGZpbGUgPHNjcmlwdG91dD4iCittc2dzdHIgIi13IDxzY3JpcHRvdXQ+XHS578DJrtcgPHNjcmlwdG91dD4gqv6lWyhhcHBlbmQpqdKms7/ppEqquqlSpU8iCisKKyM6IG1haW4uYzoyNDMyCittc2dpZCAiLVcgPHNjcmlwdG91dD5cdFdyaXRlIGFsbCB0eXBlZCBjb21tYW5kcyB0byBmaWxlIDxzY3JpcHRvdXQ+IgorbXNnc3RyICItVyA8c2NyaXB0b3V0Plx0ue/Aya7XIDxzY3JpcHRvdXQ+ILxnpEqp0qazv+mkSqq6qVKlTyIKKworIzogbWFpbi5jOjI0MzQKK21zZ2lkICIteFx0XHRcdEVkaXQgZW5jcnlwdGVkIGZpbGVzIgorbXNnc3RyICIteFx0XHRcdL1zv+i9c71YuUyqusDJrtciCisKKyM6IG1haW4uYzoyNDM4Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRDb25uZWN0IHZpbSB0byB0aGlzIHBhcnRpY3VsYXIgWC1zZXJ2ZXIiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0sU4gdmltILtQq/ypd6q6IFgtc2VydmVyILNzvXUiCisKKyM6IG1haW4uYzoyNDQwCittc2dpZCAiLVhcdFx0XHREbyBub3QgY29ubmVjdCB0byBYIHNlcnZlciIKK21zZ3N0ciAiLVhcdFx0XHSko61us3O9dajsIFggU2VydmVyIgorCisjOiBtYWluLmM6MjQ0MworbXNnaWQgIi0tcmVtb3RlIDxmaWxlcz5cdEVkaXQgPGZpbGVzPiBpbiBhIFZpbSBzZXJ2ZXIgaWYgcG9zc2libGUiCittc2dzdHIgIi0tcmVtb3RlIDxmaWxlcz5cdL1zv+ggVmltIKb4qkG+uaRXqrogPGZpbGVzPiCr4cL3tn0iCisKKyM6IG1haW4uYzoyNDQ0Cittc2dpZCAiLS1yZW1vdGUtc2lsZW50IDxmaWxlcz4gIFNhbWUsIGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlciIKK21zZ3N0ciAiLS1yZW1vdGUtc2lsZW50IDxmaWxlcz4gIKzbplChQab9qFOms6b4qkG+ua7JpKPEtadpIgorCisjOiBtYWluLmM6MjQ0NQorbXNnaWQgIiIKKyItLXJlbW90ZS13YWl0IDxmaWxlcz4gIEFzIC0tcmVtb3RlIGJ1dCB3YWl0IGZvciBmaWxlcyB0byBoYXZlIGJlZW4gZWRpdGVkIgorbXNnc3RyICItLXJlbW90ZS13YWl0IDxmaWxlcz4gIKZQIC0tcmVtb3RlLCCm/bd8taWt1MDJrtenuaaovXO/6CIKKworIzogbWFpbi5jOjI0NDYKK21zZ2lkICIiCisiLS1yZW1vdGUtd2FpdC1zaWxlbnQgPGZpbGVzPiAgU2FtZSwgZG9uJ3QgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm8gc2VydmVyIgorbXNnc3RyICIiCisiLS1yZW1vdGUtd2FpdC1zaWxlbnQgPGZpbGVzPiAgrNumUKFBpv2oU6b4qkG+ua7JpKPEtadpIgorCisjOiBtYWluLmM6MjQ0NworbXNnaWQgIi0tcmVtb3RlLXNlbmQgPGtleXM+XHRTZW5kIDxrZXlzPiB0byBhIFZpbSBzZXJ2ZXIgYW5kIGV4aXQiCittc2dzdHIgIi0tcmVtb3RlLXNlbmQgPGtleXM+XHSwZaVYIDxrZXlzPiCo7CBWaW0gpviqQb65qMPC97Z9IgorCisjOiBtYWluLmM6MjQ0OAorbXNnaWQgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHRFdmFsdWF0ZSA8ZXhwcj4gaW4gYSBWaW0gc2VydmVyIGFuZCBwcmludCByZXN1bHQiCittc2dzdHIgIi0tcmVtb3RlLWV4cHIgPGV4cHI+XHSmYqb4qkG+uaRXsPWm5iA8ZXhwcj4gqMOmTKVYtbKqRyIKKworIzogbWFpbi5jOjI0NDkKK21zZ2lkICItLXNlcnZlcmxpc3RcdFx0TGlzdCBhdmFpbGFibGUgVmltIHNlcnZlciBuYW1lcyBhbmQgZXhpdCIKK21zZ3N0ciAiLS1zZXJ2ZXJsaXN0XHRcdKZDpVilaaXOqrogVmltIKb4qkG+uaZXutmow8L3tn0iCisKKyM6IG1haW4uYzoyNDUwCittc2dpZCAiLS1zZXJ2ZXJuYW1lIDxuYW1lPlx0U2VuZCB0by9iZWNvbWUgdGhlIFZpbSBzZXJ2ZXIgPG5hbWU+IgorbXNnc3RyICItLXNlcnZlcm5hbWUgPG5hbWU+XHSwZabcL6aorLAgVmltIKb4qkG+uSA8bmFtZT4iCisKKyM6IG1haW4uYzoyNDUzCittc2dpZCAiLWkgPHZpbWluZm8+XHRcdFVzZSA8dmltaW5mbz4gaW5zdGVhZCBvZiAudmltaW5mbyIKK21zZ3N0ciAiLWkgPHZpbWluZm8+XHRcdKjPpc4gPHZpbWluZm8+IKbTq0QgLnZpbWluZm8iCisKKyM6IG1haW4uYzoyNDU1Cittc2dpZCAiLWggIG9yICAtLWhlbHBcdFByaW50IEhlbHAgKHRoaXMgbWVzc2FnZSkgYW5kIGV4aXQiCittc2dzdHIgIi1oICCpziAgLS1oZWxwXHSmTKVYu6Gp+iikXbROrE+lu7BUrqcpq+HC97Z9IgorCisjOiBtYWluLmM6MjQ1NgorbXNnaWQgIi0tdmVyc2lvblx0XHRQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IgorbXNnc3RyICItLXZlcnNpb25cdFx0pkylWKqppbu46rBUq+HC97Z9IgorCisjOiBtYWluLmM6MjQ2MAorbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChNb3RpZiB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW0gu3uxb6q6sNG8xiAoTW90aWYgqqkpOlxuIgorCisjOiBtYWluLmM6MjQ2MworbXNnaWQgIiIKKyJcbiIKKyJBcmd1bWVudHMgcmVjb2duaXNlZCBieSBndmltIChBdGhlbmEgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJndmltILt7sW+qurDRvMYgKEF0aGVuYSCqqSk6XG4iCisKKyM6IG1haW4uYzoyNDY2Cittc2dpZCAiLWRpc3BsYXkgPGRpc3BsYXk+XHRSdW4gdmltIG9uIDxkaXNwbGF5PiIKK21zZ3N0ciAiLWRpc3BsYXkgPGRpc3BsYXk+XHSmYrX4taEgPGRpc3BsYXk+ILD1puYgdmltIgorCisjOiBtYWluLmM6MjQ2NworbXNnaWQgIi1pY29uaWNcdFx0U3RhcnQgdmltIGljb25pZmllZCIKK21zZ3N0ciAiLWljb25pY1x0XHSx0rDKq+G5z6XcpMYoaWNvbmlmaWVkKSIKKworIzogbWFpbi5jOjI0NjkKK21zZ2lkICItbmFtZSA8bmFtZT5cdFx0VXNlIHJlc291cmNlIGFzIGlmIHZpbSB3YXMgPG5hbWU+IgorbXNnc3RyICItbmFtZSA8bmFtZT5cdFx0xaqo+iBSZXNvdXJjZSCuyafiIHZpbSCquqZXutm1+KywIDxuYW1lPiIKKworIzogbWFpbi5jOjI0NzAKK21zZ2lkICJcdFx0XHQgIChVbmltcGxlbWVudGVkKVxuIgorbXNnc3RyICJcdFx0XHQgICipfKW8ueqnQClcbiIKKworIzogbWFpbi5jOjI0NzIKK21zZ2lkICItYmFja2dyb3VuZCA8Y29sb3I+XHRVc2UgPGNvbG9yPiBmb3IgdGhlIGJhY2tncm91bmQgKGFsc286IC1iZykiCittc2dzdHIgIi1iYWNrZ3JvdW5kIDxjb2xvcj5cdLNdqXcgPGNvbG9yPiCssK1JtLqm4iAopF2laaXOIC1iZykiCisKKyM6IG1haW4uYzoyNDczCittc2dpZCAiLWZvcmVncm91bmQgPGNvbG9yPlx0VXNlIDxjb2xvcj4gZm9yIG5vcm1hbCB0ZXh0IChhbHNvOiAtZmcpIgorbXNnc3RyICItZm9yZWdyb3VuZCA8Y29sb3I+XHSzXal3IDxjb2xvcj4grLCkQK/rpOWmcsNDpuIgKKRdpWmlziAtZmcpIgorCisjOiBtYWluLmM6MjQ3NCBtYWluLmM6MjQ5NAorbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKK21zZ3N0ciAiLWZvbnQgPGZvbnQ+XHSoz6XOIDxmb250PiCssKRAr+umcqusICikXaVppc4gLWZuKSIKKworIzogbWFpbi5jOjI0NzUKK21zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCittc2dzdHIgIi1ib2xkZm9udCA8Zm9udD5cdKjPpc4gPGZvbnQ+IKywssrF6aZyq6wiCisKKyM6IG1haW4uYzoyNDc2Cittc2dpZCAiLWl0YWxpY2ZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBpdGFsaWMgdGV4dCIKK21zZ3N0ciAiLWl0YWxpY2ZvbnQgPGZvbnQ+XHSoz6XOIDxmb250PiCssLHXxemmcqusIgorCisjOiBtYWluLmM6MjQ3NyBtYWluLmM6MjQ5NQorbXNnaWQgIi1nZW9tZXRyeSA8Z2VvbT5cdFVzZSA8Z2VvbT4gZm9yIGluaXRpYWwgZ2VvbWV0cnkgKGFsc286IC1nZW9tKSIKK21zZ3N0ciAiLWdlb21ldHJ5IDxnZW9tPlx0qM+lzjxnZW9tPqywsF+pbKbsuG0gKKRdpWmlziAtZ2VvbSkiCisKKyM6IG1haW4uYzoyNDc4Cittc2dpZCAiLWJvcmRlcndpZHRoIDx3aWR0aD5cdFVzZSBhIGJvcmRlciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtYncpIgorbXNnc3RyICItYm9yZGVyd2lkdGggPHdpZHRoPlx0qM+lzrxlq9essCA8d2lkdGg+IKq6w+Su2CAopF2laaXOIC1idykiCisKKyM6IG1haW4uYzoyNDc5Cittc2dpZCAiLXNjcm9sbGJhcndpZHRoIDx3aWR0aD4gIFVzZSBhIHNjcm9sbGJhciB3aWR0aCBvZiA8d2lkdGg+IChhbHNvOiAtc3cpIgorbXNnc3RyICItc2Nyb2xsYmFyd2lkdGggPHdpZHRoPiAgs12pd7GysMq2Yrxlq9essCA8d2lkdGg+ICikXaVppc4gLXN3KSIKKworIzogbWFpbi5jOjI0ODEKK21zZ2lkICItbWVudWhlaWdodCA8aGVpZ2h0Plx0VXNlIGEgbWVudSBiYXIgaGVpZ2h0IG9mIDxoZWlnaHQ+IChhbHNvOiAtbWgpIgorbXNnc3RyICItbWVudWhlaWdodCA8aGVpZ2h0Plx0s12pd7/vs+amQ6q6sKqr16ywIDxoZWlnaHQ+ICikXaVppc4gLW1oKSIKKworIzogbWFpbi5jOjI0ODMgbWFpbi5jOjI0OTYKK21zZ2lkICItcmV2ZXJzZVx0XHRVc2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogLXJ2KSIKK21zZ3N0ciAiLXJldmVyc2VcdFx0qM+lzqTPrNvF46XcICikXaVppc4gLXJ2KSIKKworIzogbWFpbi5jOjI0ODQKK21zZ2lkICIrcmV2ZXJzZVx0XHREb24ndCB1c2UgcmV2ZXJzZSB2aWRlbyAoYWxzbzogK3J2KSIKK21zZ3N0ciAiK3JldmVyc2VcdFx0pKOoz6XOpM+s28XjpdwgKKRdpWmlziArcnYpIgorCisjOiBtYWluLmM6MjQ4NQorbXNnaWQgIi14cm0gPHJlc291cmNlPlx0U2V0IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UiCittc2dzdHIgIi14cm0gPHJlc291cmNlPlx0s12pd6v8qXequiByZXNvdXJjZSIKKworIzogbWFpbi5jOjI0ODgKK21zZ2lkICIiCisiXG4iCisiQXJndW1lbnRzIHJlY29nbmlzZWQgYnkgZ3ZpbSAoUklTQyBPUyB2ZXJzaW9uKTpcbiIKK21zZ3N0ciAiIgorIlxuIgorImd2aW0gu3uxb6q6sNG8xiAoUklTQyBPUyCqqSk6XG4iCisKKyM6IG1haW4uYzoyNDg5Cittc2dpZCAiLS1jb2x1bW5zIDxudW1iZXI+XHRJbml0aWFsIHdpZHRoIG9mIHdpbmRvdyBpbiBjb2x1bW5zIgorbXNnc3RyICItLWNvbHVtbnMgPG51bWJlcj5cdLX4taGq7KlspMa8ZavXIgorCisjOiBtYWluLmM6MjQ5MAorbXNnaWQgIi0tcm93cyA8bnVtYmVyPlx0SW5pdGlhbCBoZWlnaHQgb2Ygd2luZG93IGluIHJvd3MiCittc2dzdHIgIi0tcm93cyA8bnVtYmVyPlx0tfi1oarsqWykxrCqq9ciCisKKyM6IG1haW4uYzoyNDkzCittc2dpZCAiIgorIlxuIgorIkFyZ3VtZW50cyByZWNvZ25pc2VkIGJ5IGd2aW0gKEdUSysgdmVyc2lvbik6XG4iCittc2dzdHIgIiIKKyJcbiIKKyJndmltILt7sW+qurDRvMYgKEdUSysgqqkpOlxuIgorCisjOiBtYWluLmM6MjQ5NworbXNnaWQgIi1kaXNwbGF5IDxkaXNwbGF5Plx0UnVuIHZpbSBvbiA8ZGlzcGxheT4gKGFsc286IC0tZGlzcGxheSkiCittc2dzdHIgIi1kaXNwbGF5IDxkaXNwbGF5Plx0pmIgPGRpc3BsYXk+ILD1puYgdmltICikXaVppc4gLS1kaXNwbGF5KSIKKworIzogbWFpbi5jOjI0OTkKK21zZ2lkICItLXJvbGUgPHJvbGU+XHRTZXQgYSB1bmlxdWUgcm9sZSB0byBpZGVudGlmeSB0aGUgbWFpbiB3aW5kb3ciCittc2dzdHIgIi0tcm9sZSA8cm9sZT5cdLNdqXe/V69TqrqopKbiKHJvbGUppUiwz6TApUS1+LWhIgorCisjOiBtYWluLmM6MjUwMQorbXNnaWQgIi0tc29ja2V0aWQgPHhpZD5cdE9wZW4gVmltIGluc2lkZSBhbm90aGVyIEdUSyB3aWRnZXQiCittc2dzdHIgIi0tc29ja2V0aWQgPHhpZD5cdKZipXSkQK3TIEdUSyB3aWRnZXQgpLq2fbHSIFZpbSIKKworIzogbWFpbi5jOjI1MDMKK21zZ2lkICItLWhlbHBcdFx0U2hvdyBHbm9tZSBhcmd1bWVudHMiCittc2dzdHIgIi0taGVscFx0XHTF46XcIEdub21lIKzbw/aw0bzGIgorCisjOiBtYWluLmM6MjczNQorbXNnaWQgIk5vIGRpc3BsYXkiCittc2dzdHIgIrVMxeOl3CIKKworIy4gRmFpbGVkIHRvIHNlbmQsIGFib3J0LgorIzogbWFpbi5jOjI3NTAKK21zZ2lkICI6IFNlbmQgZmFpbGVkLlxuIgorbXNnc3RyICI6ILbHsGWlorHRoUNcbiIKKworIy4gTGV0IHZpbSBzdGFydCBub3JtYWxseS4KKyM6IG1haW4uYzoyNzU2Cittc2dpZCAiOiBTZW5kIGZhaWxlZC4gVHJ5aW5nIHRvIGV4ZWN1dGUgbG9jYWxseVxuIgorbXNnc3RyICI6ILBlpVilorHRoUO41bnPpmKlu6ZhsPWm5lxuIgorCisjOiBtYWluLmM6Mjc5NCBtYWluLmM6MjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBvZiAlZCBlZGl0ZWQiCittc2dzdHIgIqR3vXO/6CAlZC8lZCCt08DJrtciCisKKyM6IG1haW4uYzoyODM3Cittc2dpZCAiTm8gZGlzcGxheTogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAitUwgRGlzcGxheTogtUyqa7bHsGW5QrripqGhQ1xuIgorCisjOiBtYWluLmM6Mjg0OQorbXNnaWQgIjogU2VuZCBleHByZXNzaW9uIGZhaWxlZC5cbiIKK21zZ3N0ciAiOiC1TKprtsewZblCuuKmoaFDXG4iCisKKyM6IG1hcmsuYzo2NTYKK21zZ2lkICJObyBtYXJrcyBzZXQiCittc2dzdHIgIqhTprOzXal3vNCwTyAobWFyaykiCisKKyM6IG1hcmsuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI4MzogTm8gbWFya3MgbWF0Y2hpbmcgXCIlc1wiIgorbXNnc3RyICJFMjgzOiCn5KSjqOyyxaZYIFwiJXNcIiCqurzQsE8obWFyaykiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjY2OQorbXNnaWQgIiIKKyJcbiIKKyJtYXJrIGxpbmUgIGNvbCBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyK80LBPIKbmuLkgIMTmICDAya7XL6TlpnIiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWFyay5jOjcwNworbXNnaWQgIiIKKyJcbiIKKyIganVtcCBsaW5lICBjb2wgZmlsZS90ZXh0IgorbXNnc3RyICIiCisiXG4iCisiIGp1bXAgpua4uSAgxOYgIMDJrtcvpOWmciIKKworIzogbWFyay5jOjEwNzIKK21zZ2lkICIiCisiXG4iCisiIyBGaWxlIG1hcmtzOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDAya7XvNCwTzpcbiIKKworIy4gV3JpdGUgdGhlIGp1bXBsaXN0IHdpdGggLScKKyM6IG1hcmsuYzoxMTA3Cittc2dpZCAiIgorIlxuIgorIiMgSnVtcGxpc3QgKG5ld2VzdCBmaXJzdCk6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjIEp1bXBsaXN0ICil0bdzqOzCwik6XG4iCisKKyM6IG1hcmsuYzoxMjAyCittc2dpZCAiIgorIlxuIgorIiMgSGlzdG9yeSBvZiBtYXJrcyB3aXRoaW4gZmlsZXMgKG5ld2VzdCB0byBvbGRlc3QpOlxuIgorbXNnc3RyICIiCisiXG4iCisiIyDAya7XpLogTWFyayCwT7/9ICil0bdzqOzCwik6XG4iCisKKyM6IG1hcmsuYzoxMjg1Cittc2dpZCAiTWlzc2luZyAnPiciCittc2dzdHIgIq/KpNa578CzqrogJz4nIgorCisjOiBtYnl0ZS5jOjQwMworbXNnaWQgIkU1NDM6IE5vdCBhIHZhbGlkIGNvZGVwYWdlIgorbXNnc3RyICJFNTQzOiCko6W/vVSquiBjb2RlcGFnZSIKKworIzogbWJ5dGUuYzozODc5Cittc2dpZCAiRTI4NDogQ2Fubm90IHNldCBJQyB2YWx1ZXMiCittc2dzdHIgIkUyODQ6IKSjr+CzXal3IElDILzGrcgiCisKKyM6IG1ieXRlLmM6NDAzMQorbXNnaWQgIkUyODU6IEZhaWxlZCB0byBjcmVhdGUgaW5wdXQgY29udGV4dCIKK21zZ3N0ciAiRTI4NTogtUyqa6vYpd8gaW5wdXQgY29udGV4dCIKKworIzogbWJ5dGUuYzo0MTc4Cittc2dpZCAiRTI4NjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgbWV0aG9kIgorbXNnc3RyICJFMjg2OiC1TKprtn2x0r/ppEqqayIKKworIzogbWJ5dGUuYzo0MTg5Cittc2dpZCAiRTI4NzogV2FybmluZzogQ291bGQgbm90IHNldCBkZXN0cm95IGNhbGxiYWNrIHRvIElNIgorbXNnc3RyICJFMjg3OiDEtadpOiC1TKprsr6woyBJTSCquiBjYWxsYmFjayIKKworIzogbWJ5dGUuYzo0MTk1Cittc2dpZCAiRTI4ODogaW5wdXQgbWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgc3R5bGUiCittc2dzdHIgIkUyODg6IL/ppEqqa6SjpOS0qaX0pvMgc3R5bGUiCisKKyM6IG1ieXRlLmM6NDI1MgorbXNnaWQgIkUyODk6IGlucHV0IG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgbXkgcHJlZWRpdCB0eXBlIgorbXNnc3RyICJFMjg5OiC/6aRKqmuko6TktKml9KbzIHN0eWxlIgorCisjOiBtYnl0ZS5jOjQzMjYKK21zZ2lkICJFMjkwOiBvdmVyLXRoZS1zcG90IHN0eWxlIHJlcXVpcmVzIGZvbnRzZXQiCittc2dzdHIgIkUyOTA6IG92ZXItdGhlLXNwb3Qgu92tbqZyq6y2sChGb250c2V0KSIKKworIzogbWJ5dGUuYzo0MzU4Cittc2dpZCAiRTI5MTogWW91ciBHVEsrIGlzIG9sZGVyIHRoYW4gMS4yLjMuIFN0YXR1cyBhcmVhIGRpc2FibGVkIgorbXNnc3RyICJFMjkxOiCnQaq6IEdUSysgpPEgMS4yLjMgwdnCwqFDtUyqa6jPpc6qrLpBsM+hQyIKKworIzogbWJ5dGUuYzo0NjM3Cittc2dpZCAiRTI5MjogSW5wdXQgTWV0aG9kIFNlcnZlciBpcyBub3QgcnVubmluZyIKK21zZ3N0ciAiRTI5MjogqFOms7D1puakpKq6v+mkSqprut6yerV7pqEoSW5wdXQgTWV0aG9kIFNlcnZlcikiCisKKyM6IG1lbWZpbGUuYzo0ODgKK21zZ2lkICJFMjkzOiBibG9jayB3YXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiRTI5MzogsM+29KW8s1HC6ql3IgorCisjOiBtZW1maWxlLmM6OTg5Cittc2dpZCAiRTI5NDogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgcmVhZCIKK21zZ3N0ciAiRTI5NDogvMimc8DJxaqo+r/5u34iCisKKyM6IG1lbWZpbGUuYzo5OTQKK21zZ2lkICJFMjk1OiBSZWFkIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5NTogvMimc8DJxaqo+r/5u34iCisKKyM6IG1lbWZpbGUuYzoxMDQ2Cittc2dpZCAiRTI5NjogU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgd3JpdGUiCittc2dzdHIgIkUyOTY6ILzIpnPAybxnpEq/+bt+IgorCisjOiBtZW1maWxlLmM6MTA2NAorbXNnaWQgIkUyOTc6IFdyaXRlIGVycm9yIGluIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTI5NzogvMimc8DJvGekSr/5u34iCisKKyM6IG1lbWZpbGUuYzoxMjYxCittc2dpZCAiRTMwMDogU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pIgorbXNnc3RyICJFMzAwOiC8yKZzwMmkd7hnpnOmYiEgKKRwpN+yxbi5s3O1sqq6pnel/rp8rH0hPykiCisKKyM6IG1lbWxpbmUuYzoyNzUKK21zZ2lkICJFMjk4OiBEaWRuJ3QgZ2V0IGJsb2NrIG5yIDA/IgorbXNnc3RyICJFMjk4OiCn5KSjqOywz7b0IDA/IgorCisjOiBtZW1saW5lLmM6MzE1Cittc2dpZCAiRTI5ODogRGlkbid0IGdldCBibG9jayBuciAxPyIKK21zZ3N0ciAiRTI5ODogp+Sko6jssM+29CAxPyIKKworIzogbWVtbGluZS5jOjMzMworbXNnaWQgIkUyOTg6IERpZG4ndCBnZXQgYmxvY2sgbnIgMj8iCittc2dzdHIgIkUyOTg6IKfkpKOo7LDPtvQgMj8iCisKKyMuIGNvdWxkIG5vdCAocmUpb3BlbiB0aGUgc3dhcCBmaWxlLCB3aGF0IGNhbiB3ZSBkbz8/Pz8KKyM6IG1lbWxpbmUuYzo0NDMKK21zZ2lkICJFMzAxOiBPb3BzLCBsb3N0IHRoZSBzd2FwIGZpbGUhISEiCittc2dzdHIgIkUzMDE6IL6+vr4sILzIpnPAyaSjqKOkRiEhISIKKworIzogbWVtbGluZS5jOjQ0OAorbXNnaWQgIkUzMDI6IENvdWxkIG5vdCByZW5hbWUgc3dhcCBmaWxlIgorbXNnc3RyICJFMzAyOiC1TKprp+/F3LzIpnPAyaq6ple62SIKKworIzogbWVtbGluZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzAzOiBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yIFwiJXNcIiwgcmVjb3ZlcnkgaW1wb3NzaWJsZSIKK21zZ3N0ciAiRTMwMzogtUyqa7Z9sdK8yKZzwMkgXCIlc1wiLCCko6Vpr+Ct17RfpEYiCisKKyM6IG1lbWxpbmUuYzo2MTcKK21zZ2lkICJFMzA0OiBtbF90aW1lc3RhbXA6IERpZG4ndCBnZXQgYmxvY2sgMD8/IgorbXNnc3RyICJFMzA0OiBtbF90aW1lc3RhbXA6IKfkpKOo7LDPtvQgMD8/IgorCisjOiBtZW1saW5lLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDU6IE5vIHN3YXAgZmlsZSBmb3VuZCBmb3IgJXMiCittc2dzdHIgIkUzMDU6IKfkpKOo7CAlcyCqurzIpnPAySIKKworIzogbWVtbGluZS5jOjc2NworbXNnaWQgIkVudGVyIG51bWJlciBvZiBzd2FwIGZpbGUgdG8gdXNlICgwIHRvIHF1aXQpOiAiCittc2dzdHIgIr3Qv+++3KdBrW6oz6XOqrq8yKZzwMkgKKv2MCDC97Z9KTogIgorCisjOiBtZW1saW5lLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDY6IENhbm5vdCBvcGVuICVzIgorbXNnc3RyICJFMzA2OiC1TKprtn2x0iAlcyIKKworIzogbWVtbGluZS5jOjgzNAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGJsb2NrIDAgZnJvbSAiCittc2dzdHIgIrVMqmvFqqj6sM+29CAwOiIKKworIzogbWVtbGluZS5jOjgzNworbXNnaWQgIiIKKyJcbiIKKyJNYXliZSBubyBjaGFuZ2VzIHdlcmUgbWFkZSBvciBWaW0gZGlkIG5vdCB1cGRhdGUgdGhlIHN3YXAgZmlsZS4iCittc2dzdHIgIiIKKyJcbiIKKyKlaa/grE+nQahTsLW5TKX0pvOt16fvqc6sTyBWaW0gwdmo06SjpM6n87dzvMimc8DJLiIKKworIzogbWVtbGluZS5jOjg0NyBtZW1saW5lLmM6ODY0Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpbS5cbiIKK21zZ3N0ciAiILVMqmumYqW7qqmlu6q6IFZpbSCkpKjPpc4uXG4iCisKKyM6IG1lbWxpbmUuYzo4NDkKK21zZ2lkICJVc2UgVmltIHZlcnNpb24gMy4wLlxuIgorbXNnc3RyICKoz6XOIFZpbSAzLjChQ1xuIgorCisjOiBtZW1saW5lLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDc6ICVzIGRvZXMgbm90IGxvb2sgbGlrZSBhIFZpbSBzd2FwIGZpbGUiCittc2dzdHIgIkUzMDc6ICVzIKzdsF+o06SjubOsTyBWaW0gvMimc8DJIgorCisjOiBtZW1saW5lLmM6ODY4Cittc2dpZCAiIGNhbm5vdCBiZSB1c2VkIG9uIHRoaXMgY29tcHV0ZXIuXG4iCittc2dzdHIgIiC1TKprpmKzb7tPuXG4o6RXqM+lzi5cbiIKKworIzogbWVtbGluZS5jOjg3MAorbXNnaWQgIlRoZSBmaWxlIHdhcyBjcmVhdGVkIG9uICIKK21zZ3N0ciAipbvAya7Xq9il36nzICIKKworIzogbWVtbGluZS5jOjg3NAorbXNnaWQgIiIKKyIsXG4iCisib3IgdGhlIGZpbGUgaGFzIGJlZW4gZGFtYWdlZC4iCittc2dzdHIgIiIKKyIsXG4iCisiqc6sT7NvwMmu16R3uGe3bLe0oUMiCisKKyM6IG1lbWxpbmUuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgc3dhcCBmaWxlIFwiJXNcIiIKK21zZ3N0ciAiqM+lzrzIpnPAySBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3JpZ2luYWwgZmlsZSBcIiVzXCIiCittc2dzdHIgIq3sqWzAySBcIiVzXCIiCisKKyM6IG1lbWxpbmUuYzo5MjIKK21zZ2lkICJFMzA4OiBXYXJuaW5nOiBPcmlnaW5hbCBmaWxlIG1heSBoYXZlIGJlZW4gY2hhbmdlZCIKK21zZ3N0ciAiRTMwODogxLWnaTogreypbMDJrtelaa/gpHe4Z63Xp++5TKRGIgorCisjOiBtZW1saW5lLmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMDk6IFVuYWJsZSB0byByZWFkIGJsb2NrIDEgZnJvbSAlcyIKK21zZ3N0ciAiRTMwOTogtUyqa7FxICVzIMWqqPqwz7b0IDEiCisKKyM6IG1lbWxpbmUuYzo5NjcKK21zZ2lkICI/Pz9NQU5ZIExJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P6/KpNak06ZopuYiCisKKyM6IG1lbWxpbmUuYzo5ODMKK21zZ2lkICI/Pz9MSU5FIENPVU5UIFdST05HIgorbXNnc3RyICI/Pz+m5ri5v/m7fiIKKworIzogbWVtbGluZS5jOjk5MAorbXNnaWQgIj8/P0VNUFRZIEJMT0NLIgorbXNnc3RyICI/Pz+qxaq6IEJMT0NLIgorCisjOiBtZW1saW5lLmM6MTAxNgorbXNnaWQgIj8/P0xJTkVTIE1JU1NJTkciCittc2dzdHIgIj8/P6fkpKOo7KRAqMem5iIKKworIzogbWVtbGluZS5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMxMDogQmxvY2sgMSBJRCB3cm9uZyAoJXMgbm90IGEgLnN3cCBmaWxlPykiCittc2dzdHIgIkUzMTA6ILDPtvQgMSBJRCC/+bt+ICglcyCko6xPvMimc8DJPykiCisKKyM6IG1lbWxpbmUuYzoxMDUzCittc2dpZCAiPz8/QkxPQ0sgTUlTU0lORyIKK21zZ3N0ciAiPz8/p+Sko6jsQkxPQ0siCisKKyM6IG1lbWxpbmUuYzoxMDY5Cittc2dpZCAiPz8/IGZyb20gaGVyZSB1bnRpbCA/Pz9FTkQgbGluZXMgbWF5IGJlIG1lc3NlZCB1cCIKK21zZ3N0ciAiPz8/ILFxs2+4zKjsID8/P0VORCCquqS6rmWlaa/gprOw3cNEIgorCisjOiBtZW1saW5lLmM6MTA4NQorbXNnaWQgIj8/PyBmcm9tIGhlcmUgdW50aWwgPz8/RU5EIGxpbmVzIG1heSBoYXZlIGJlZW4gaW5zZXJ0ZWQvZGVsZXRlZCIKK21zZ3N0ciAiPz8/ILFxs2+4zKjsID8/P0VORCCquqS6rmWlaa/gs1GnUrCjL7ShpEq5TCIKKworIyBkbyBub3QgdHJhbnNsYXRlCisjOiBtZW1saW5lLmM6MTEwNQorbXNnaWQgIj8/P0VORCIKK21zZ3N0ciAiPz8/RU5EIgorCisjOiBtZW1saW5lLmM6MTEzMQorbXNnaWQgIkUzMTE6IFJlY292ZXJ5IEludGVycnVwdGVkIgorbXNnc3RyICJFMzExOiCt17RfpHekpMJfIgorCisjOiBtZW1saW5lLmM6MTEzMworbXNnaWQgIiIKKyJFMzEyOiBFcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcmVjb3ZlcmluZzsgbG9vayBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCA/Pz8iCittc2dzdHIgIkUzMTI6IK3XtF+uybVvpc2/+bt+OyC90Kpgt062fcBZrLAgPz8/IKq6puYiCisKKyM6IG1lbWxpbmUuYzoxMTM2Cittc2dpZCAiUmVjb3ZlcnkgY29tcGxldGVkLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGV2ZXJ5dGhpbmcgaXMgT0suIgorbXNnc3RyICK0X63sp7mmqC4gvdC9VKl3pECkwaW/sWAuIgorCisjOiBtZW1saW5lLmM6MTEzNworbXNnaWQgIiIKKyJcbiIKKyIoWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgb3V0IHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWVcbiIKK21zZ3N0ciAiIgorIlxuIgorIiinQaVpr+C3fLdRrW6n4rNvrdPAya7XpXSmc6dPqrrAyaZXoUFcbiIKKworIzogbWVtbGluZS5jOjExMzgKK21zZ2lkICJhbmQgcnVuIGRpZmYgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSB0byBjaGVjayBmb3IgY2hhbmdlcylcbiIKK21zZ3N0ciAipkGw9abmIGRpZmYgu1Ct7MDJrtek8bj7pUjAy6xkrE+nX6azp+/F3ClcbiIKKworIzogbWVtbGluZS5jOjExMzkKK21zZ2lkICIiCisiRGVsZXRlIHRoZSAuc3dwIGZpbGUgYWZ0ZXJ3YXJkcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIihEKaq9sbWnUrCjIC5zd3AgvMimc8DJXG4iCisiXG4iCisKKyMuIHVzZSBtc2coKSB0byBzdGFydCB0aGUgc2Nyb2xsaW5nIHByb3Blcmx5CisjOiBtZW1saW5lLmM6MTE5NQorbXNnaWQgIlN3YXAgZmlsZXMgZm91bmQ6IgorbXNnc3RyICKn5KjspUikVaq6vMimc8DJOiIKKworIzogbWVtbGluZS5jOjEzNzMKK21zZ2lkICIgICBJbiBjdXJyZW50IGRpcmVjdG9yeTpcbiIKK21zZ3N0ciAiICAgpmKl2Ktlqrql2L/9OlxuIgorCisjOiBtZW1saW5lLmM6MTM3NQorbXNnaWQgIiAgIFVzaW5nIHNwZWNpZmllZCBuYW1lOlxuIgorbXNnc3RyICIgICBVc2luZyBzcGVjaWZpZWQgbmFtZTpcbiIKKworIzogbWVtbGluZS5jOjEzNzkKK21zZ2lkICIgICBJbiBkaXJlY3RvcnkgIgorbXNnc3RyICIgICCmYqXYv/0gIgorCisjOiBtZW1saW5lLmM6MTM5NworbXNnaWQgIiAgICAgIC0tIG5vbmUgLS1cbiIKK21zZ3N0ciAiICAgICAgLS0gtUwgLS1cbiIKKworIzogbWVtbGluZS5jOjE0NjkKK21zZ2lkICIgICAgICAgICAgb3duZWQgYnk6ICIKK21zZ3N0ciAiICAgICAgICAgICAgvtams6rMOiAiCisKKyM6IG1lbWxpbmUuYzoxNDcxCittc2dpZCAiICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgIKTptME6ICIKKworIzogbWVtbGluZS5jOjE0NzUgbWVtbGluZS5jOjM2ODkKK21zZ2lkICIgICAgICAgICAgICAgZGF0ZWQ6ICIKK21zZ3N0ciAiICAgICAgICAgICAgICCk6bTBOiAiCisKKyM6IG1lbWxpbmUuYzoxNDkxCittc2dpZCAiICAgICAgICAgW2Zyb20gVmltIHZlcnNpb24gMy4wXSIKK21zZ3N0ciAiICAgICAgICAgICAgICBbsXEgVmltIKqppbsgMy4wXSIKKworIzogbWVtbGluZS5jOjE0OTUKK21zZ2lkICIgICAgICAgICBbZG9lcyBub3QgbG9vayBsaWtlIGEgVmltIHN3YXAgZmlsZV0iCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgW6SjubMgVmltIKq6vMimc8DJXSIKKworIzogbWVtbGluZS5jOjE0OTkKK21zZ2lkICIgICAgICAgICBmaWxlIG5hbWU6ICIKK21zZ3N0ciAiICAgICAgICAgICAgICDAyaZXOiAiCisKKyM6IG1lbWxpbmUuYzoxNTA1Cittc2dpZCAiIgorIlxuIgorIiAgICAgICAgICBtb2RpZmllZDogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgICAgrden77lMOiAiCisKKyM6IG1lbWxpbmUuYzoxNTA2Cittc2dpZCAiWUVTIgorbXNnc3RyICKsTyIKKworIzogbWVtbGluZS5jOjE1MDYKK21zZ2lkICJubyIKK21zZ3N0ciAip18iCisKKyM6IG1lbWxpbmUuYzoxNTEwCittc2dpZCAiIgorIlxuIgorIiAgICAgICAgIHVzZXIgbmFtZTogIgorbXNnc3RyICIiCisiXG4iCisiICAgICAgICAgICAgqM+lzqrMOiAiCisKKyM6IG1lbWxpbmUuYzoxNTE3Cittc2dpZCAiICAgaG9zdCBuYW1lOiAiCittc2dzdHIgIiAgICClRL73ple62TogIgorCisjOiBtZW1saW5lLmM6MTUxOQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgICBob3N0IG5hbWU6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgICClRL73ple62TogIgorCisjOiBtZW1saW5lLmM6MTUyNQorbXNnaWQgIiIKKyJcbiIKKyIgICAgICAgIHByb2Nlc3MgSUQ6ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgcHJvY2VzcyBJRDogIgorCisjOiBtZW1saW5lLmM6MTUzMQorbXNnaWQgIiAoc3RpbGwgcnVubmluZykiCittc2dzdHIgIiAosPWm5qSkKSIKKworIzogbWVtbGluZS5jOjE1NDMKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmltXSIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgICAgIFu1TKprpmKlu6qppbuquiBWaW0gpFeoz6XOXSIKKworIzogbWVtbGluZS5jOjE1NDYKK21zZ2lkICIiCisiXG4iCisiICAgICAgICAgW25vdCB1c2FibGUgb24gdGhpcyBjb21wdXRlcl0iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgICAgICBbtUyqa6Zipbu5cbijpFeoz6XOXSIKKworIzogbWVtbGluZS5jOjE1NTEKK21zZ2lkICIgICAgICAgICBbY2Fubm90IGJlIHJlYWRdIgorbXNnc3RyICIgICAgICAgICBbtUyqa8WqqPpdIgorCisjOiBtZW1saW5lLmM6MTU1NQorbXNnaWQgIiAgICAgICAgIFtjYW5ub3QgYmUgb3BlbmVkXSIKK21zZ3N0ciAiICAgICAgICAgW7VMqmu2fbHSXSIKKworIzogbWVtbGluZS5jOjE3NDUKK21zZ2lkICJFMzEzOiBDYW5ub3QgcHJlc2VydmUsIHRoZXJlIGlzIG5vIHN3YXAgZmlsZSIKK21zZ3N0ciAiRTMxMzogtUyqa6tPr2QsIKSjqM+lzrzIpnPAySIKKworIzogbWVtbGluZS5jOjE3OTgKK21zZ2lkICJGaWxlIHByZXNlcnZlZCIKK21zZ3N0ciAiwMmu16R3q0+vZCIKKworIzogbWVtbGluZS5jOjE4MDAKK21zZ2lkICJFMzE0OiBQcmVzZXJ2ZSBmYWlsZWQiCittc2dzdHIgIkUzMTQ6IKtPr2SlorHRIgorCisjOiBtZW1saW5lLmM6MTg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzE1OiBtbF9nZXQ6IGludmFsaWQgbG51bTogJWxkIgorbXNnc3RyICJFMzE1OiBtbF9nZXQ6IL/5u36quiBsbnVtOiAlbGQiCisKKyM6IG1lbWxpbmUuYzoxODk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMTY6IG1sX2dldDogY2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMTY6IG1sX2dldDogp+Sko6jsssQgJWxkIKbmIgorCisjOiBtZW1saW5lLmM6MjI4NworbXNnaWQgIkUzMTc6IHBvaW50ZXIgYmxvY2sgaWQgd3JvbmcgMyIKK21zZ3N0ciAiRTMxNzogq/y80LDPtvQgaWQgv/m7fiAzIgorCisjOiBtZW1saW5lLmM6MjM2NworbXNnaWQgInN0YWNrX2lkeCBzaG91bGQgYmUgMCIKK21zZ3N0ciAic3RhY2tfaWR4IMCzuNOsTyAwIgorCisjOiBtZW1saW5lLmM6MjQyOQorbXNnaWQgIkUzMTg6IFVwZGF0ZWQgdG9vIG1hbnkgYmxvY2tzPyIKK21zZ3N0ciAiRTMxODogp/O3c6TTpmiwz7b0PyIKKworIzogbWVtbGluZS5jOjI2MTEKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDQiCittc2dzdHIgIkUzMTc6IKv8vNCwz7b0IGlkIL/5u34gNCIKKworIzogbWVtbGluZS5jOjI2MzgKK21zZ2lkICJkZWxldGVkIGJsb2NrIDE/IgorbXNnc3RyICKnUrCjsM+29CAxPyIKKworIzogbWVtbGluZS5jOjI4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTMyMDogQ2Fubm90IGZpbmQgbGluZSAlbGQiCittc2dzdHIgIkUzMjA6IKfkpKOo7LLEICVsZCCm5iIKKworIzogbWVtbGluZS5jOjMwODEKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIgorbXNnc3RyICJFMzE3OiCr/LzQsM+29CBpZCC/+bt+IgorCisjOiBtZW1saW5lLmM6MzA5NworbXNnaWQgInBlX2xpbmVfY291bnQgaXMgemVybyIKK21zZ3N0ciAicGVfbGluZV9jb3VudCCssLlzIgorCisjOiBtZW1saW5lLmM6MzEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIyOiBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVsZCBwYXN0IHRoZSBlbmQiCittc2dzdHIgIkUzMjI6IKbmuLm2V6VYvWSz8jogJWxkILZXuUy1sqfAIgorCisjOiBtZW1saW5lLmM6MzEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFMzIzOiBsaW5lIGNvdW50IHdyb25nIGluIGJsb2NrICVsZCIKK21zZ3N0ciAiRTMyMzogsM+29CAlbGQgpua8xr/5u34iCisKKyM6IG1lbWxpbmUuYzozMTc5Cittc2dpZCAiU3RhY2sgc2l6ZSBpbmNyZWFzZXMiCittc2dzdHIgIrDvxXykaqRwvFelWyIKKworIzogbWVtbGluZS5jOjMyMjUKK21zZ2lkICJFMzE3OiBwb2ludGVyIGJsb2NrIGlkIHdyb25nIDIiCittc2dzdHIgIkUzMTc6IKv8vNCwz7b0IGlkIL/5IDIiCisKKyM6IG1lbWxpbmUuYzozNjc5Cittc2dpZCAiRTMyNTogQVRURU5USU9OIgorbXNnc3RyICJFMzI1OiCqYLdOIgorCisjOiBtZW1saW5lLmM6MzY4MAorbXNnaWQgIiIKKyJcbiIKKyJGb3VuZCBhIHN3YXAgZmlsZSBieSB0aGUgbmFtZSBcIiIKK21zZ3N0ciAiIgorIlxuIgorIqfkqOy8yKZzwMkgXCIiCisKKyM6IG1lbWxpbmUuYzozNjg0Cittc2dpZCAiV2hpbGUgb3BlbmluZyBmaWxlIFwiIgorbXNnc3RyICKmYrZ9sdLAya7XIFwiIgorCisjOiBtZW1saW5lLmM6MzY5MworbXNnaWQgIiAgICAgIE5FV0VSIHRoYW4gc3dhcCBmaWxlIVxuIgorbXNnc3RyICIgICAgICCk8bzIpnPAyafzt3MhXG4iCisKKyMuIFNvbWUgb2YgdGhlc2UgbWVzc2FnZXMgYXJlIGxvbmcgdG8gYWxsb3cgdHJhbnNsYXRpb24gdG8KKyMuICogb3RoZXIgbGFuZ3VhZ2VzLgorIzogbWVtbGluZS5jOjM2OTcKK21zZ2lkICIiCisiXG4iCisiKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLlxuIgorIiAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBiZSBjYXJlZnVsIG5vdCB0byBlbmQgdXAgd2l0aCB0d29cbiIKKyIgICAgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBmaWxlIHdoZW4gbWFraW5nIGNoYW5nZXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMSkgpWmv4KazpXSkQK3TtXumoaRdpmK9c7/oplCkQK3TwMmu1y5cbiIKKyIgICAgpnCqR6xPs2+8y6FBvdCkcKTfpKOtbqjiw+SkQLBfvGekSqFBpKO1TadBqrqnVqRPs6O3fK10vdGseaT0oUNcbiIKKworIzogbWVtbGluZS5jOjM2OTgKK21zZ2lkICIgICAgUXVpdCwgb3IgY29udGludWUgd2l0aCBjYXV0aW9uLlxuIgorbXNnc3RyICIgICAgwve2faFBqc6sT8R+xPK9c7/ooUNcbiIKKworIzogbWVtbGluZS5jOjM2OTkKK21zZ2lkICIiCisiXG4iCisiKDIpIEFuIGVkaXQgc2Vzc2lvbiBmb3IgdGhpcyBmaWxlIGNyYXNoZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIoMikgq2WmuL1zv+imucDJrsm37b73XG4iCisKKyM6IG1lbWxpbmUuYzozNzAwCittc2dpZCAiICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSBcIjpyZWNvdmVyXCIgb3IgXCJ2aW0gLXIgIgorbXNnc3RyICIgICAgpnCqR6xPs2+8yywgvdClziBcIjpyZWNvdmVyXCIgqc4gXCJ2aW0gLXIiCisKKyM6IG1lbWxpbmUuYzozNzAyCittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIHJlY292ZXIgdGhlIGNoYW5nZXMgKHNlZSBcIjpoZWxwIHJlY292ZXJ5XCIpLlxuIgorbXNnc3RyICIiCisiXCJcbiIKKyIgICAgqNOxz6Zerden77jqrsYgKLZppECoQruhqfq90KzdIFwiOmhlbHAgcmVjb3ZlcnlcIikuXG4iCisKKyM6IG1lbWxpbmUuYzozNzAzCittc2dpZCAiICAgIElmIHlvdSBkaWQgdGhpcyBhbHJlYWR5LCBkZWxldGUgdGhlIHN3YXAgZmlsZSBcIiIKK21zZ3N0ciAiICAgIKZwqke407HPqrqzo6R3uGexz6RGLCC90Kq9sbWnUrCjprm8yKZzwMkgXCIiCisKKyM6IG1lbWxpbmUuYzozNzA1Cittc2dpZCAiIgorIlwiXG4iCisiICAgIHRvIGF2b2lkIHRoaXMgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorIlwiXG4iCisiICAgIKVIwdenS6ZBrN2o7Ka5sFSupy5cbiIKKworIzogbWVtbGluZS5jOjM3MTkgbWVtbGluZS5jOjM3MjMKK21zZ2lkICJTd2FwIGZpbGUgXCIiCittc2dzdHIgIrzIpnPAySBcIiIKKworIzogbWVtbGluZS5jOjM3MjAgbWVtbGluZS5jOjM3MjYKK21zZ2lkICJcIiBhbHJlYWR5IGV4aXN0cyEiCittc2dzdHIgIlwiIKR3uGemc6ZipEYhIgorCisjOiBtZW1saW5lLmM6MzcyOQorbXNnaWQgIlZJTSAtIEFUVEVOVElPTiIKK21zZ3N0ciAiVklNIC0gqmC3TiIKKworIzogbWVtbGluZS5jOjM3MzEKK21zZ2lkICJTd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMhIgorbXNnc3RyICK8yKZzwMmkd7hnpnOmYiEiCisKKyM6IG1lbWxpbmUuYzozNzM1Cittc2dpZCAiIgorIiZPcGVuIFJlYWQtT25seVxuIgorIiZFZGl0IGFueXdheVxuIgorIiZSZWNvdmVyXG4iCisiJlF1aXQiCittc2dzdHIgIiIKKyKlSLDfxaqk6Kahtn2x0igmTylcbiIKKyKqvbG1vXO/6CgmRSlcbiIKKyKt17RfKCZSKVxuIgorIsL3tn0oJlEpIgorCisjOiBtZW1saW5lLmM6MzczNworbXNnaWQgIiIKKyImT3BlbiBSZWFkLU9ubHlcbiIKKyImRWRpdCBhbnl3YXlcbiIKKyImUmVjb3ZlclxuIgorIiZRdWl0XG4iCisiJkRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorIqVIsN/FqqTopqG2fbHSKCZPKVxuIgorIqq9sbW9c7/oKCZFKVxuIgorIq3XtF8oJlIpXG4iCisiwve2fSgmUSlcbiIKKyKnUrCjvMimc8DJKCZEKSIKKworIzogbWVtbGluZS5jOjM3OTAKK21zZ2lkICJFMzI2OiBUb28gbWFueSBzd2FwIGZpbGVzIGZvdW5kIgorbXNnc3RyICJFMzI2OiCn5KjspNOmaLzIpnPAySIKKworIzogbWVudS5jOjY0Cittc2dpZCAiRTMyNzogUGFydCBvZiBtZW51LWl0ZW0gcGF0aCBpcyBub3Qgc3ViLW1lbnUiCittc2dzdHIgIkUzMjc6ILOhpfe/77a1uPSufKSjrE+kbL/vs+YiCisKKyM6IG1lbnUuYzo2NQorbXNnaWQgIkUzMjg6IE1lbnUgb25seSBleGlzdHMgaW4gYW5vdGhlciBtb2RlIgorbXNnc3RyICJFMzI4OiC/77PmpXWv4KZiqOSlprzSpqGkpKjPpc4iCisKKyM6IG1lbnUuYzo2NgorbXNnaWQgIkUzMjk6IE5vIG1lbnUgb2YgdGhhdCBuYW1lIgorbXNnc3RyICJFMzI5OiCoU6azqLq8y6q6v++z5iIKKworIzogbWVudS5jOjUwOQorbXNnaWQgIkUzMzA6IE1lbnUgcGF0aCBtdXN0IG5vdCBsZWFkIHRvIGEgc3ViLW1lbnUiCittc2dzdHIgIkUzMzA6IL/vs+a49K58pKOv4Kv8plakbL/vs+YiCisKKyM6IG1lbnUuYzo1NDgKK21zZ2lkICJFMzMxOiBNdXN0IG5vdCBhZGQgbWVudSBpdGVtcyBkaXJlY3RseSB0byBtZW51IGJhciIKK21zZ3N0ciAiRTMzMTogpKOv4Kq9sbWn4r/vtrWlW6jsv++z5qZDpKQiCisKKyM6IG1lbnUuYzo1NTQKK21zZ2lkICJFMzMyOiBTZXBhcmF0b3IgY2Fubm90IGJlIHBhcnQgb2YgYSBtZW51IHBhdGgiCittc2dzdHIgIkUzMzI6IKTAuWq9daSjr+CsT7/vs+a49K58qrqkQLOhpfciCisKKyMuIE5vdyB3ZSBoYXZlIGZvdW5kIHRoZSBtYXRjaGluZyBtZW51LCBhbmQgd2UgbGlzdCB0aGUgbWFwcGluZ3MKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogbWVudS5jOjEwNzkKK21zZ2lkICIiCisiXG4iCisiLS0tIE1lbnVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSC/77PmIC0tLSIKKworIzogbWVudS5jOjE5OTYKK21zZ2lkICJUZWFyIG9mZiB0aGlzIG1lbnUiCittc2dzdHIgIqTBpFWmub/vs+YiCisKKyM6IG1lbnUuYzoyMDYxCittc2dpZCAiRTMzMzogTWVudSBwYXRoIG11c3QgbGVhZCB0byBhIG1lbnUgaXRlbSIKK21zZ3N0ciAiRTMzMzogv++z5rj0rnylsrvdq/ymVqRArdO/77a1IgorCisjOiBtZW51LmM6MjA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzM0OiBNZW51IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkUzMzQ6IFu/77PmXSCn5KSjqOwgJXMiCisKKyM6IG1lbnUuYzoyMTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzMzU6IE1lbnUgbm90IGRlZmluZWQgZm9yICVzIG1vZGUiCittc2dzdHIgIkUzMzU6ICVzILzSpqGlvKl3uHG/77PmIgorCisjOiBtZW51LmM6MjE4OAorbXNnaWQgIkUzMzY6IE1lbnUgcGF0aCBtdXN0IGxlYWQgdG8gYSBzdWItbWVudSIKK21zZ3N0ciAiRTMzNjogv++z5rj0rnylsrvdq/ymVqRsv++z5iIKKworIzogbWVudS5jOjIyMDkKK21zZ2lkICJFMzM3OiBNZW51IG5vdCBmb3VuZCAtIGNoZWNrIG1lbnUgbmFtZXMiCittc2dzdHIgIkUzMzc6IKfkpKOo7L/vs+YgLSC90MDLrGS/77Pmple62SIKKworIzogbWVzc2FnZS5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlY3RlZCB3aGlsZSBwcm9jZXNzaW5nICVzOiIKK21zZ3N0ciAis0KyeiAlcyCuybVvpc2/+bt+OiIKKworIzogbWVzc2FnZS5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lICU0bGQ6IgorbXNnc3RyICKm5iAlNGxkOiIKKworIzogbWVzc2FnZS5jOjU2NQorbXNnaWQgIltzdHJpbmcgdG9vIGxvbmddIgorbXNnc3RyICJbprmm5rlMqvhdIgorCisjOiBtZXNzYWdlLmM6NzExCittc2dpZCAiTWVzc2FnZXMgbWFpbnRhaW5lcjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4iCittc2dzdHIgIiIKKyKlv8XppKSk5bBUrqe6+8VAqsw6IEZyYW5jaXMgUy5MaW4gPHBpYWlwQGNzaWUubnR1LmVkdS4iCisidHc+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENlY2lsIFNoZW5nICAgPGI3NTA2MDIyQGNzaWUubnR1LmVkdS50dz4iCisKKyM6IG1lc3NhZ2UuYzo5MzUKK21zZ2lkICJJbnRlcnJ1cHQ6ICIKK21zZ3N0ciAipHekpMJfOiAiCisKKyM6IG1lc3NhZ2UuYzo5MzgKK21zZ2lkICJIaXQgRU5URVIgdG8gY29udGludWUiCittc2dzdHIgIr3Qq/YgRU5URVIgxH7E8iIKKworIzogbWVzc2FnZS5jOjk0MAorbXNnaWQgIkhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUiCittc2dzdHIgIr3Qq/YgRU5URVIgqc6o5KWmqVKlT6VIxH7E8iIKKworIzogbWVzc2FnZS5jOjIwMjgKK21zZ2lkICItLSBNb3JlIC0tIgorbXNnc3RyICItLSCpfKazIC0tIgorCisjOiBtZXNzYWdlLmM6MjAzMQorbXNnaWQgIiAoUkVUL0JTOiBsaW5lLCBTUEFDRS9iOiBwYWdlLCBkL3U6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUL0JTOiCmVqRVL6ZWpFekQKbmLCCqxaXVweQvYjogpECttiwgZC91OiClYq22LCBxOiDC97Z9KSIKKworIzogbWVzc2FnZS5jOjIwMzIKK21zZ2lkICIgKFJFVDogbGluZSwgU1BBQ0U6IHBhZ2UsIGQ6IGhhbGYgcGFnZSwgcTogcXVpdCkiCittc2dzdHIgIiAoUkVUOiCmVqRVpECm5iwgqsWl1cHkOiCkQK22LCBkOiClYq22LCBxOiDC97Z9KSIKKworIzogbWVzc2FnZS5jOjI1MDggbWVzc2FnZS5jOjI1MjMKK21zZ2lkICJRdWVzdGlvbiIKK21zZ3N0ciAisN3DRCIKKworIzogbWVzc2FnZS5jOjI1MTAKK21zZ2lkICIiCisiJlllc1xuIgorIiZObyIKK21zZ3N0ciAiIgorIiZZrE9cbiIKKyImTqdfIgorCisjOiBtZXNzYWdlLmM6MjU0MworbXNnaWQgIiIKKyImWWVzXG4iCisiJk5vXG4iCisiU2F2ZSAmQWxsXG4iCisiJkRpc2NhcmQgQWxsXG4iCisiJkNhbmNlbCIKK21zZ3N0ciAiIgorIiZZrE9cbiIKKyImTqdfXG4iCisiJkGl/rOhpnPAyVxuIgorIiZEpf6zoaSjpnNcbiIKKyImQ6j6rvgiCisKKyM6IG1lc3NhZ2UuYzoyNTg0Cittc2dpZCAiU2F2ZSBGaWxlIGRpYWxvZyIKK21zZ3N0ciAipnPAySIKKworIzogbWVzc2FnZS5jOjI1ODYKK21zZ2lkICJPcGVuIEZpbGUgZGlhbG9nIgorbXNnc3RyICK2fcDJIgorCisjLiBUT0RPOiBub24tR1VJIGZpbGUgc2VsZWN0b3IgaGVyZQorIzogbWVzc2FnZS5jOjI2NTcKK21zZ2lkICJFMzM4OiBTb3JyeSwgbm8gZmlsZSBicm93c2VyIGluIGNvbnNvbGUgbW9kZSIKK21zZ3N0ciAiRTMzODogpUSxsaV4KENvbnNvbGUpvNKmoa7JqFOms8DJrtfCc8T9vrkoZmlsZSBicm93c2VyKSIKKworIzogbWlzYzEuYzoyNDc3Cittc2dpZCAiVzEwOiBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUiCittc2dzdHIgIlcxMDogqmC3Tjogp0Glv6Zirden76RArdOw38WqwMkiCisKKyM6IG1pc2MxLmM6MjcxMgorbXNnaWQgIjEgbW9yZSBsaW5lIgorbXNnc3RyICLB2aazpECm5iIKKworIzogbWlzYzEuYzoyNzE0Cittc2dpZCAiMSBsaW5lIGxlc3MiCittc2dzdHIgIqTWqfOkQKbmIgorCisjOiBtaXNjMS5jOjI3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIG1vcmUgbGluZXMiCittc2dzdHIgIiDB2aazICVsZCCm5iIKKworIzogbWlzYzEuYzoyNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBmZXdlciBsaW5lcyIKK21zZ3N0ciAipXWz0SAlbGQgpuYiCisKKyM6IG1pc2MxLmM6MjcyNAorbXNnaWQgIiAoSW50ZXJydXB0ZWQpIgorbXNnc3RyICIgKKR3pKTCXykiCisKKyM6IG1pc2MxLmM6NjM0OAorbXNnaWQgIlZpbTogcHJlc2VydmluZyBmaWxlcy4uLlxuIgorbXNnc3RyICJWaW06IKtPr2TAya7XpKQuLi5cbiIKKworIy4gY2xvc2UgYWxsIG1lbWZpbGVzLCB3aXRob3V0IGRlbGV0aW5nCisjOiBtaXNjMS5jOjYzNTgKK21zZ2lkICJWaW06IEZpbmlzaGVkLlxuIgorbXNnc3RyICJWaW06ILWyp/QuXG4iCisKKyM6IG1pc2MyLmM6NjcwIG1pc2MyLmM6Njg2Cittc2dpZCAiRVJST1I6ICIKK21zZ3N0ciAiv/m7fjogIgorCisjOiBtaXNjMi5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiW2J5dGVzXSB0b3RhbCBhbGxvYy1mcmVlZCAlbHUtJWx1LCBpbiB1c2UgJWx1LCBwZWFrIHVzZSAlbHVcbiIKK21zZ3N0ciAiIgorIlxuIgorIltieXRlc10gpf6zoSBhbGxvYy1mcmVlZCAlbHUtJWx1LCCoz6XOpKQgJWx1LCBwZWFrIKjPpc4gJWx1XG4iCisKKyM6IG1pc2MyLmM6NjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJbY2FsbHNdIHRvdGFsIHJlL21hbGxvYygpJ3MgJWx1LCB0b3RhbCBmcmVlKCkncyAlbHVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlupSaVzXSCl/rOhIHJlL21hbGxvYygpOiAlbHUsIKX+s6EgZnJlZSgpJzogJWx1XG4iCisiXG4iCisKKyM6IG1pc2MyLmM6NzQ3Cittc2dpZCAiRTM0MDogTGluZSBpcyBiZWNvbWluZyB0b28gbG9uZyIKK21zZ3N0ciAiRTM0MDogprmm5rlMqvgiCisKKyM6IG1pc2MyLmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDE6IEludGVybmFsIGVycm9yOiBsYWxsb2MoJWxkLCApIgorbXNnc3RyICJFMzQxOiCkurOhv/m7fjogbGFsbG9jKCVsZCwgKSIKKworIzogbWlzYzIuYzo4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM0MjogT3V0IG9mIG1lbW9yeSEgIChhbGxvY2F0aW5nICVsdSBieXRlcykiCittc2dzdHIgIkUzNDI6ILBPvtDF6aSjqKwhICi5wbjVsHS4bSAlbHUgpuykuLLVKSIKKworIzogbWlzYzIuYzoyNTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbGxpbmcgc2hlbGwgdG8gZXhlY3V0ZTogXCIlc1wiIgorbXNnc3RyICKpSaVzIHNoZWxsILD1puY6IFwiJXNcIiIKKworIzogbWlzYzIuYzoyNzg1Cittc2dpZCAiRTU0NTogTWlzc2luZyBjb2xvbiIKK21zZ3N0ciAiRTU0NTogr8qk1iBjb2xvbiIKKworIzogbWlzYzIuYzoyNzg3IG1pc2MyLmM6MjgxNAorbXNnaWQgIkU1NDY6IElsbGVnYWwgbW9kZSIKK21zZ3N0ciAiRTU0NjogpKOlv71Uqrq80qahIgorCisjOiBtaXNjMi5jOjI4NTMKK21zZ2lkICJFNTQ3OiBJbGxlZ2FsIG1vdXNlc2hhcGUiCittc2dzdHIgIkU1NDc6IKSjpb+9VKq6t8a5q6fOqqwiCisKKyM6IG1pc2MyLmM6Mjg5MworbXNnaWQgIkU1NDg6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTQ4OiDAs7jTrW6ms7zGpnIiCisKKyM6IG1pc2MyLmM6Mjg5OAorbXNnaWQgIkU1NDk6IElsbGVnYWwgcGVyY2VudGFnZSIKK21zZ3N0ciAiRTU0OTogpKOlv71UqrqmyqTApPEiCisKKyM6IG1pc2MyLmM6MzIwOAorbXNnaWQgIkVudGVyIGVuY3J5cHRpb24ga2V5OiAiCittc2dzdHIgIr/ppEqxS71YOiAiCisKKyM6IG1pc2MyLmM6MzIwOQorbXNnaWQgIkVudGVyIHNhbWUga2V5IGFnYWluOiAiCittc2dzdHIgIr3QpkG/6aRKpECmuDogIgorCisjOiBtaXNjMi5jOjMyMTkKK21zZ2lkICJLZXlzIGRvbid0IG1hdGNoISIKK21zZ3N0ciAiqOKmuL/ppEqxS71YpKOs26ZQISIKKworIzogbWlzYzIuYzozNzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMzQzOiBJbnZhbGlkIHBhdGg6ICcqKltudW1iZXJdJyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgIgorImZvbGxvd2VkIGJ5ICclcycuIgorbXNnc3RyICJFMzQzOiCko6W/vVSqurj0rnw6ICcqKltudW1iZXJdJyClsrvdrW6mYrj0rny1sqfAqc6tbrG1tdsgJyVzJyIKKworIzogbWlzYzIuYzo1MDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDQ6IENhbid0IGZpbmQgZGlyZWN0b3J5IFwiJXNcIiBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDQ6IGNkcGF0aCCkpKhTprOl2L/9IFwiJXNcIiIKKworIzogbWlzYzIuYzo1MDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDU6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIKK21zZ3N0ciAiRTM0NTogpmK49K58pKSn5KSjqOzAya7XIFwiJXNcIiIKKworIzogbWlzYzIuYzo1MDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNDY6IE5vIG1vcmUgZGlyZWN0b3J5IFwiJXNcIiBmb3VuZCBpbiBjZHBhdGgiCittc2dzdHIgIkUzNDY6IKZiuPSufKSkp+Sko6jsp/OmaKq6wMmu1yBcIiVzXCIiCisKKyM6IG1pc2MyLmM6NTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzQ3OiBObyBtb3JlIGZpbGUgXCIlc1wiIGZvdW5kIGluIHBhdGgiCittc2dzdHIgIkUzNDc6IKZiuPSufKSkp+Sko6jsp/OmaKq6wMmu1yBcIiVzXCIiCisKKyM6IG1pc2MyLmM6NTI5MAorbXNnaWQgIkU1NTA6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1NTA6IK/KpNYgY29sb24iCisKKyM6IG1pc2MyLmM6NTMwMgorbXNnaWQgIkU1NTE6IElsbGVnYWwgY29tcG9uZW50IgorbXNnc3RyICJFNTUxOiCko6W/vVSqurzSpqEiCisKKyM6IG1pc2MyLmM6NTMxMAorbXNnaWQgIkU1NTI6IGRpZ2l0IGV4cGVjdGVkIgorbXNnc3RyICJFNTUyOiDAs7jTrW6ms7zGpnIiCisKKyMuIEdldCBoZXJlIHdoZW4gdGhlIHNlcnZlciBjYW4ndCBiZSBmb3VuZC4KKyM6IG5ldGJlYW5zLmM6MjgzCittc2dpZCAiQ2Fubm90IGNvbm5lY3QgdG8gTmV0YmVhbnMgIzIiCittc2dzdHIgIrVMqmuzc7G1qOwgTmV0YmVhbnMgIzIiCisKKyM6IG5ldGJlYW5zLmM6MjkxCittc2dpZCAiQ2Fubm90IGNvbm5lY3QgdG8gTmV0YmVhbnMiCittc2dzdHIgIrVMqmuzc7G1qOwgTmV0YmVhbnMiCisKKyM6IG5ldGJlYW5zLmM6NTY1Cittc2dpZCAicmVhZCBmcm9tIE5ldGJlYW5zIHNvY2tldCIKK21zZ3N0ciAipdEgTmV0YmVhbnMgc29ja2V0IMWqqPoiCisKKyM6IG5vcm1hbC5jOjI5MTMKK21zZ2lkICJXYXJuaW5nOiB0ZXJtaW5hbCBjYW5ub3QgaGlnaGxpZ2h0IgorbXNnc3RyICKqYLdOOiCnQaq6ste63b73tUyqa8XjpdywqqtHq9ciCisKKyM6IG5vcm1hbC5jOjMxMjgKK21zZ2lkICJFMzQ4OiBObyBzdHJpbmcgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ4OiC05bzQs0KoU6azpnKm6iIKKworIzogbm9ybWFsLmM6MzEzMAorbXNnaWQgIkUzNDk6IE5vIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIgorbXNnc3RyICJFMzQ5OiC05bzQs0KoU6azw9GnT6ZyIgorCisjOiBub3JtYWwuYzo0MzQ4Cittc2dpZCAiRTM1MjogQ2Fubm90IGVyYXNlIGZvbGRzIHdpdGggY3VycmVudCAnZm9sZG1ldGhvZCciCittc2dzdHIgIkUzNTI6ILVMqmumYqXYq2WquiAnZm9sZG1ldGhvZCcgpFWnUrCjIGZvbGQiCisKKyM6IG9wcy5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICIxIGxpbmUgJXNlZCAxIHRpbWUiCittc2dzdHIgIqRApuYgJXMguUwgpECmuCIKKworIzogb3BzLmM6Mjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIjEgbGluZSAlc2VkICVkIHRpbWVzIgorbXNnc3RyICKkQKbmICVzILlMICVkIKa4IgorCisjOiBvcHMuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxkIGxpbmVzICVzZWQgMSB0aW1lIgorbXNnc3RyICIlbGQgpuYgJXMguUwgpECmuCIKKworIzogb3BzLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyAlc2VkICVkIHRpbWVzIgorbXNnc3RyICIlbGQgpuYgJXMguUwgJWQgprgiCisKKyM6IG9wcy5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgdG8gaW5kZW50Li4uICIKK21zZ3N0ciAiwVmxxiAlbGQgpuYuLi4iCisKKyM6IG9wcy5jOjcxMworbXNnaWQgIjEgbGluZSBpbmRlbnRlZCAiCittc2dzdHIgIqRApuakd8FZscYiCisKKyM6IG9wcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGQgbGluZXMgaW5kZW50ZWQgIgorbXNnc3RyICKkd8FZscYgJWxkIKbmIgorCisjLiBtdXN0IGRpc3BsYXkgdGhlIHByb21wdAorIzogb3BzLmM6MTY0NQorbXNnaWQgImNhbm5vdCB5YW5rOyBkZWxldGUgYW55d2F5IgorbXNnc3RyICK1TKprsMWkVTsgqr2xtadSsKMiCisKKyM6IG9wcy5jOjIxNTIKK21zZ2lkICIxIGxpbmUgY2hhbmdlZCIKK21zZ3N0ciAiIDEgpuYgfmVkIgorCisjOiBvcHMuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyBjaGFuZ2VkIgorbXNnc3RyICIgJWxkIKbmIH5lZCIKKworIzogb3BzLmM6MjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJmcmVlaW5nICVsZCBsaW5lcyIKK21zZ3N0ciAixMCp8SAlbGQgpuakpCIKKworIzogb3BzLmM6MjgxOQorbXNnaWQgIjEgbGluZSB5YW5rZWQiCittc2dzdHIgIqR3vca7cyAxIKbmIgorCisjOiBvcHMuYzoyODIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBsaW5lcyB5YW5rZWQiCittc2dzdHIgIqR3vca7cyAlbGQgpuYiCisKKyM6IG9wcy5jOjMxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM1MzogTm90aGluZyBpbiByZWdpc3RlciAlcyIKK21zZ3N0ciAiRTM1MzogvMimc765ICVzILjMqFOms6pGpugiCisKKyMuIEhpZ2hsaWdodCB0aXRsZQorIzogb3BzLmM6MzY2NAorbXNnaWQgIiIKKyJcbiIKKyItLS0gUmVnaXN0ZXJzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSC8yKZzvrkgLS0tIgorCisjOiBvcHMuYzo0ODczCittc2dpZCAiSWxsZWdhbCByZWdpc3RlciBuYW1lIgorbXNnc3RyICKko6W/vVSqurzIpnO+uaZXutkiCisKKyM6IG9wcy5jOjQ5NTkKK21zZ2lkICIiCisiXG4iCisiIyBSZWdpc3RlcnM6XG4iCittc2dzdHIgIiIKKyJcbiIKKyIjILzIpnO+uTpcbiIKKworIzogb3BzLmM6NDk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTc0OiBVbmtub3duIHJlZ2lzdGVyIHR5cGUgJWQiCittc2dzdHIgIkU1NzQ6IKW8qr6qurX5pVWrrLpBOiAlZCIKKworIzogb3BzLmM6NTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFMzU0OiBJbnZhbGlkIHJlZ2lzdGVyIG5hbWU6ICclcyciCittc2dzdHIgIkUzNTQ6ILzIpnO+uaZXutm/+bt+OiAnJXMnIgorCisjOiBvcHMuYzo1NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBDb2xzOyAiCittc2dzdHIgIiVsZCDE5jsgIgorCisjOiBvcHMuYzo1NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlbGVjdGVkICVzJWxkIG9mICVsZCBMaW5lczsgJWxkIG9mICVsZCBXb3JkczsgJWxkIG9mICVsZCBCeXRlcyIKK21zZ3N0ciAiv+++3KRGICVzJWxkLyVsZCCm5jsgJWxkLyVsZCCmcihXb3JkKTsgJWxkLyVsZCCmcqS4KEJ5dGVzKSIKKworIzogb3BzLmM6NTc3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiCittc2dzdHIgIsTmICVzLyVzOyCm5iAlbGQvJWxkOyCmcihXb3JkKSAlbGQvJWxkOyCmcqS4KEJ5dGUpICVsZC8lbGQiCisKKyM6IG9wcy5jOjU3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKCslbGQgZm9yIEJPTSkiCittc2dzdHIgIigrJWxkIGZvciBCT00pIgorCisjOiBvcHRpb24uYzoxNTc5Cittc2dpZCAiJTwlZiVoJW0lPVBhZ2UgJU4iCittc2dzdHIgIiU8JWYlaCVtJT2yxCAlTiCttiIKKworIyA/IHdoYXQncyB0aGlzIGZvcj8KKyM6IG9wdGlvbi5jOjIwMTIKK21zZ2lkICJUaGFua3MgZm9yIGZseWluZyBWaW0iCittc2dzdHIgIrdQwcKxerdSpc4gVmltIgorCisjOiBvcHRpb24uYzozMjUwIG9wdGlvbi5jOjMzNTcKK21zZ2lkICJFNTE4OiBVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiRTUxODogpKOlv71Uqrq/77a1IgorCisjOiBvcHRpb24uYzozMjYzCittc2dpZCAiRTUxOTogT3B0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkU1MTk6IKSjpOS0qbjTv++2tSIKKworIzogb3B0aW9uLmM6MzI4OAorbXNnaWQgIkU1MjA6IE5vdCBhbGxvd2VkIGluIGEgbW9kZWxpbmUiCittc2dzdHIgIkU1MjA6IKSjr+CmYiBNb2RlbGluZSC4zKVYsnsiCisKKyM6IG9wdGlvbi5jOjMzNDQKK21zZ2lkICIiCisiXG4iCisiXHRMYXN0IHNldCBmcm9tICIKK21zZ3N0ciAiIgorIlxuIgorIlx0pFemuLNdqXc6ICIKKworIzogb3B0aW9uLmM6MzQ4MworbXNnaWQgIkU1MjE6IE51bWJlciByZXF1aXJlZCBhZnRlciA9IgorbXNnc3RyICJFNTIxOiA9IKvhu92tbqazvMamciIKKworIzogb3B0aW9uLmM6Mzc5NyBvcHRpb24uYzo0NDEzCittc2dpZCAiRTUyMjogTm90IGZvdW5kIGluIHRlcm1jYXAiCittc2dzdHIgIkU1MjI6IFRlcm1jYXAguMytsafkpKOo7CIKKworIzogb3B0aW9uLmM6Mzg2MworIywgYy1mb3JtYXQKK21zZ2lkICJFNTM5OiBJbGxlZ2FsIGNoYXJhY3RlciA8JXM+IgorbXNnc3RyICJFNTM5OiCko6W/vVSquqZypLggPCVzPiIKKworIzogb3B0aW9uLmM6NDQwNQorbXNnaWQgIkU1Mjk6IENhbm5vdCBzZXQgJ3Rlcm0nIHRvIGVtcHR5IHN0cmluZyIKK21zZ3N0ciAiRTUyOTogtUyqa7NdqXcgJ3Rlcm0nIKywqsWmcqbqIgorCisjOiBvcHRpb24uYzo0NDA4Cittc2dpZCAiRTUzMDogQ2Fubm90IGNoYW5nZSB0ZXJtIGluIEdVSSIKK21zZ3N0ciAiRTUzMDogpmK5z6usrMmtsaSktUyqa6TBtKsgdGVybSIKKworIzogb3B0aW9uLmM6NDQxMAorbXNnaWQgIkU1MzE6IFVzZSBcIjpndWlcIiB0byBzdGFydCB0aGUgR1VJIgorbXNnc3RyICJFNTMxOiC/6aRKIFwiOmd1aVwiIKjTsdKwyrnPp86sya2xIgorCisjOiBvcHRpb24uYzo0NDMxCittc2dpZCAiRTU4OTogJ2JhY2t1cGV4dCcgYW5kICdwYXRjaG1vZGUnIGFyZSBlcXVhbCIKK21zZ3N0ciAiRTU4OTogJ2JhY2t1cGV4dCcguPIgJ3BhdGNobW9kZScgrE+kQLzLqroiCisKKyM6IG9wdGlvbi5jOjQ2MTYKK21zZ2lkICJFNjE3OiBDYW5ub3QgYmUgY2hhbmdlZCBpbiB0aGUgR1RLKyAyIEdVSSIKK21zZ3N0ciAiRTYxNzogpmK5z6usrMmtsaSktUyqa6TBtKsgdGVybSIKKworIzogb3B0aW9uLmM6NDc0OAorbXNnaWQgIkU1MjQ6IE1pc3NpbmcgY29sb24iCittc2dzdHIgIkU1MjQ6IK/KpNYgY29sb24iCisKKyM6IG9wdGlvbi5jOjQ3NTAKK21zZ2lkICJFNTI1OiBaZXJvIGxlbmd0aCBzdHJpbmciCittc2dzdHIgIkU1MjU6ILlzqvir16ZypuoiCisKKyM6IG9wdGlvbi5jOjQ4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTUyNjogTWlzc2luZyBudW1iZXIgYWZ0ZXIgPCVzPiIKK21zZ3N0ciAiRTUyNjogPCVzPiCr4a/KpNa8xqZyIgorCisjOiBvcHRpb24uYzo0ODMyCittc2dpZCAiRTUyNzogTWlzc2luZyBjb21tYSIKK21zZ3N0ciAiRTUyNzogr8qk1rNyuLkiCisKKyM6IG9wdGlvbi5jOjQ4MzkKK21zZ2lkICJFNTI4OiBNdXN0IHNwZWNpZnkgYSAnIHZhbHVlIgorbXNnc3RyICJFNTI4OiClsrvdq/ypd6RArdMgJyCtyCIKKworIzogb3B0aW9uLmM6NDg4MAorbXNnaWQgIkU1OTU6IGNvbnRhaW5zIHVucHJpbnRhYmxlIG9yIHdpZGUgY2hhcmFjdGVyIgorbXNnc3RyICJFNTk1OiCkuqd0tUyqa8XjpdyquqZypLgiCisKKyM6IG9wdGlvbi5jOjQ5MjkKK21zZ2lkICJFNTk2OiBJbnZhbGlkIGZvbnQocykiCittc2dzdHIgIkU1OTY6IKSjpb+9VKq6pnKrrCIKKworIzogb3B0aW9uLmM6NDkzNworbXNnaWQgIkU1OTc6IGNhbid0IHNlbGVjdCBmb250c2V0IgorbXNnc3RyICJFNTk3OiC1TKprqM+lzqZyq6y2sChGb250c2V0KSIKKworIzogb3B0aW9uLmM6NDkzOQorbXNnaWQgIkU1OTg6IEludmFsaWQgZm9udHNldCIKK21zZ3N0ciAiRTU5ODogpKOlv71UqrqmcqustrAoRm9udHNldCkiCisKKyM6IG9wdGlvbi5jOjQ5NDYKK21zZ2lkICJFNTMzOiBjYW4ndCBzZWxlY3Qgd2lkZSBmb250IgorbXNnc3RyICJFNTMzOiC1TKprqM+lzrNdqXequqSkpOWmcqusKFdpZGVmb250KSIKKworIzogb3B0aW9uLmM6NDk0OAorbXNnaWQgIkU1MzQ6IEludmFsaWQgd2lkZSBmb250IgorbXNnc3RyICJFNTM0OiCko6W/vVSquqZyq6woV2lkZWZvbnQpIgorCisjOiBvcHRpb24uYzo1MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzU6IElsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIDwlYz4iCittc2dzdHIgIkU1MzU6IDwlYz4gq+Gms6Sjpb+9VKq6pnKkuCIKKworIzogb3B0aW9uLmM6NTMyMgorbXNnaWQgIkU1MzY6IGNvbW1hIHJlcXVpcmVkIgorbXNnc3RyICJFNTM2OiC73a1us3K4uSIKKworIzogb3B0aW9uLmM6NTMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNTM3OiAnY29tbWVudHN0cmluZycgbXVzdCBiZSBlbXB0eSBvciBjb250YWluICVzIgorbXNnc3RyICJFNTM3OiAnY29tbWVudHN0cmluZycgpbK73axPqsWl1anOpV2ndCAlcyIKKworIzogb3B0aW9uLmM6NTM3NworbXNnaWQgIkU1Mzg6IE5vIG1vdXNlIHN1cHBvcnQiCittc2dzdHIgIkU1Mzg6IKSjpOS0qbfGuasiCisKKyM6IG9wdGlvbi5jOjU2NDUKK21zZ2lkICJFNTQwOiBVbmNsb3NlZCBleHByZXNzaW9uIHNlcXVlbmNlIgorbXNnc3RyICJFNTQwOiCoU6aztbKn9Kq6uUK64qahOiAiCisKKyM6IG9wdGlvbi5jOjU2NDkKK21zZ2lkICJFNTQxOiB0b28gbWFueSBpdGVtcyIKK21zZ3N0ciAiRTU0MTogpNOmaLa1pdgiCisKKyM6IG9wdGlvbi5jOjU2NTEKK21zZ2lkICJFNTQyOiB1bmJhbGFuY2VkIGdyb3VwcyIKK21zZ3N0ciAiRTU0MjogpKO577rZqrogZ3JvdXAiCisKKyM6IG9wdGlvbi5jOjU4NzIKK21zZ2lkICJFNTkwOiBBIHByZXZpZXcgd2luZG93IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFNTkwOiC5d7X4qrq1+LWhpHe4Z6ZzpmKkRiIKKworIzogb3B0aW9uLmM6NjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNTkzOiBOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIgorbXNnc3RyICJFNTkzOiCm3KTWu92tbiAlZCCm5iIKKworIzogb3B0aW9uLmM6NjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNTk0OiBOZWVkIGF0IGxlYXN0ICVkIGNvbHVtbnMiCittc2dzdHIgIkU1OTQ6IKbcpNa73a1uICVkIMTmIgorCisjOiBvcHRpb24uYzo2NjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTU6IFVua25vd24gb3B0aW9uOiAlcyIKK21zZ3N0ciAiRTM1NTogpKOlv71Uqrq/77a1OiAlcyIKKworIzogb3B0aW9uLmM6Njc2OQorbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwgY29kZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tILLXut2+971YIC0tLSIKKworIzogb3B0aW9uLmM6Njc3MQorbXNnaWQgIiIKKyJcbiIKKyItLS0gR2xvYmFsIG9wdGlvbiB2YWx1ZXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tIEdsb2JhbCC/77a1rcggLS0tIgorCisjOiBvcHRpb24uYzo2NzczCittc2dpZCAiIgorIlxuIgorIi0tLSBMb2NhbCBvcHRpb24gdmFsdWVzIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSBMb2NhbCC/77a1rcggLS0tIgorCisjOiBvcHRpb24uYzo2Nzc1Cittc2dpZCAiIgorIlxuIgorIi0tLSBPcHRpb25zIC0tLSIKK21zZ3N0ciAiIgorIlxuIgorIi0tLSC/77a1IC0tLSIKKworIzogb3B0aW9uLmM6NzQ2NworbXNnaWQgIkUzNTY6IGdldF92YXJwIEVSUk9SIgorbXNnc3RyICJFMzU2OiBnZXRfdmFycCC/+bt+IgorCisjOiBvcHRpb24uYzo4NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTc6ICdsYW5nbWFwJzogTWF0Y2hpbmcgY2hhcmFjdGVyIG1pc3NpbmcgZm9yICVzIgorbXNnc3RyICJFMzU3OiAnbGFuZ21hcCc6IKfkpKOo7CAlcyC578CzqrqmcqS4IgorCisjOiBvcHRpb24uYzo4NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNTg6ICdsYW5nbWFwJzogRXh0cmEgY2hhcmFjdGVycyBhZnRlciBzZW1pY29sb246ICVzIgorbXNnc3RyICJFMzU4OiAnbGFuZ21hcCc6IKTAuLmr4aazpmi+bKq6pnKkuDogJXMiCisKKyM6IG9zX2FtaWdhLmM6MjczCittc2dpZCAiY2Fubm90IG9wZW4gIgorbXNnc3RyICKko6/gtn2x0iIKKworIzogb3NfYW1pZ2EuYzozMDcKK21zZ2lkICJWSU06IENhbid0IG9wZW4gd2luZG93IVxuIgorbXNnc3RyICJWSU06ILVMqmu2fbHStfi1oSFcbiIKKworIzogb3NfYW1pZ2EuYzozMjkKK21zZ2lkICJOZWVkIEFtaWdhZG9zIHZlcnNpb24gMi4wNCBvciBsYXRlclxuIgorbXNnc3RyICK73a1uIEFtaWdhZG9zIKqppbsgMi4wNCClSKRXXG4iCisKKyM6IG9zX2FtaWdhLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5lZWQgJXMgdmVyc2lvbiAlbGRcbiIKK21zZ3N0ciAiu92tbiAlcyCqqaW7ICVsZFxuIgorCisjOiBvc19hbWlnYS5jOjQwNworbXNnaWQgIkNhbm5vdCBvcGVuIE5JTDpcbiIKK21zZ3N0ciAitUyqa7Z9sdIgTklMOlxuIgorCisjOiBvc19hbWlnYS5jOjQxOAorbXNnaWQgIkNhbm5vdCBjcmVhdGUgIgorbXNnc3RyICKko6/gq9il3yAiCisKKyM6IG9zX2FtaWdhLmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbSBleGl0aW5nIHdpdGggJWRcbiIKK21zZ3N0ciAiVmltILWyp/S2x6Zercg6ICVkXG4iCisKKyM6IG9zX2FtaWdhLmM6OTI4Cittc2dpZCAiY2Fubm90IGNoYW5nZSBjb25zb2xlIG1vZGUgPyFcbiIKK21zZ3N0ciAitUyqa6TBtKulRLGxpXgoY29uc29sZSm80qahICE/XG4iCisKKyM6IG9zX2FtaWdhLmM6OTk0Cittc2dpZCAibWNoX2dldF9zaGVsbHNpemU6IG5vdCBhIGNvbnNvbGU/P1xuIgorbXNnc3RyICJtY2hfZ2V0X3NoZWxsc2l6ZTogpKOsT6VEsbGleChjb25zb2xlKT8/XG4iCisKKyMuIGlmIFZpbSBvcGVuZWQgYSB3aW5kb3c6IEV4ZWN1dGluZyBhIHNoZWxsIG1heSBjYXVzZSBjcmFzaGVzCisjOiBvc19hbWlnYS5jOjExNDMKK21zZ2lkICJFMzYwOiBDYW5ub3QgZXhlY3V0ZSBzaGVsbCB3aXRoIC1mIG9wdGlvbiIKK21zZ3N0ciAiRTM2MDogpKOv4KXOIC1mIL/vtrWw9abmIHNoZWxsIgorCisjOiBvc19hbWlnYS5jOjExODQgb3NfYW1pZ2EuYzoxMjc0Cittc2dpZCAiQ2Fubm90IGV4ZWN1dGUgIgorbXNnc3RyICKko6/gsPWm5iAiCisKKyM6IG9zX2FtaWdhLmM6MTE4NyBvc19hbWlnYS5jOjEyODQKK21zZ2lkICJzaGVsbCAiCittc2dzdHIgInNoZWxsICIKKworIzogb3NfYW1pZ2EuYzoxMjA3IG9zX2FtaWdhLmM6MTMwOQorbXNnaWQgIiByZXR1cm5lZFxuIgorbXNnc3RyICIgpHeq8KZeXG4iCisKKyM6IG9zX2FtaWdhLmM6MTQ1MAorbXNnaWQgIkFOQ0hPUl9CVUZfU0laRSB0b28gc21hbGwuIgorbXNnc3RyICJBTkNIT1JfQlVGX1NJWkUgpNOkcCIKKworIzogb3NfYW1pZ2EuYzoxNDU0Cittc2dpZCAiSS9PIEVSUk9SIgorbXNnc3RyICJJL08gv/m7fiIKKworIzogb3NfbXN3aW4uYzo1MTUKK21zZ2lkICIuLi4odHJ1bmNhdGVkKSIKK21zZ3N0ciAiLi4uKKR3pMGxvCkiCisKKyM6IG9zX21zd2luLmM6NjE3Cittc2dpZCAiJ2NvbHVtbnMnIGlzIG5vdCA4MCwgY2Fubm90IGV4ZWN1dGUgZXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIidjb2x1bW5zJyCko6xPIDgwLCC1TKprsPWm5qV+s6GpUqVPIgorCisjOiBvc19tc3dpbi5jOjE4MDIKK21zZ2lkICJFMjM3OiBQcmludGVyIHNlbGVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkUyMzc6ILVMqmu/777cprmmTKrtvvciCisKKyM6IG9zX21zd2luLmM6MTg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ0byAlcyBvbiAlcyIKK21zZ3N0ciAiqOwgJXMgb24gJXMiCisKKyM6IG9zX21zd2luLmM6MTg1NworIywgYy1mb3JtYXQKK21zZ2lkICJFNjEzOiBVbmtub3duIHByaW50ZXIgZm9udDogJXMiCittc2dzdHIgIkU2MTM6IKSjpb+9VKq6pkyq7b73pnKrrDogJXMiCisKKyM6IG9zX21zd2luLmM6MTkwNyBvc19tc3dpbi5jOjE5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzODogUHJpbnQgZXJyb3I6ICVzIgorbXNnc3RyICJFMjM4OiCmQ6ZMv/m7fjogJXMiCisKKyM6IG9zX21zd2luLmM6MTkxOAorbXNnaWQgIlVua25vd24iCittc2dzdHIgIqW8qr4iCisKKyM6IG9zX21zd2luLmM6MTk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmludGluZyAnJXMnIgorbXNnc3RyICKmQ6ZMpKQ6ICclcyciCisKKyM6IG9zX21zd2luLmM6MzAzMworIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ0OiBJbGxlZ2FsIGNoYXJzZXQgbmFtZSBcIiVzXCIgaW4gZm9udCBuYW1lIFwiJXNcIiIKK21zZ3N0ciAiRTI0NDogpnKkuLawIFwiJXNcIiC1TKprue/As6Zyq6xcIiVzXCIiCisKKyM6IG9zX21zd2luLmM6MzA0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFMjQ1OiBJbGxlZ2FsIGNoYXIgJyVjJyBpbiBmb250IG5hbWUgXCIlc1wiIgorbXNnc3RyICJFMjQ1OiCko6W/vVSquqZypLggJyVjJyClWLJ7pmKmcqusple62SBcIiVzXCIgpLoiCisKKyM6IG9zX3Jpc2Nvcy5jOjEyNTgKK21zZ2lkICJFMzY2OiBJbnZhbGlkICdvc2ZpbGV0eXBlJyBvcHRpb24gLSB1c2luZyBUZXh0IgorbXNnc3RyICJFMzY2OiCko6W/vVSquiAnZmlsZXR5cGUnIL/vtrUgLSCoz6XOr8Kk5aZyvNKmoSIKKworIzogb3NfdW5peC5jOjg3MQorbXNnaWQgIlZpbTogRG91YmxlIHNpZ25hbCwgZXhpdGluZ1xuIgorbXNnc3RyICJWaW06IML5ratzaWduYWwsIML3tn2kpFxuIgorCisjOiBvc191bml4LmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWwgJXNcbiIKK21zZ3N0ciAiVmltOiBDVmltOiDEZLpJqOyrSLi5KHNpZ25hbCkgJXNcbiIKKworIzogb3NfdW5peC5jOjg4MAorbXNnaWQgIlZpbTogQ2F1Z2h0IGRlYWRseSBzaWduYWxcbiIKK21zZ3N0ciAiVmltOiDEZLpJqOytUKlSqrqrSLi5KGRlYWRseSBzaWduYWxlKVxuIgorCisjOiBvc191bml4LmM6MTE0MworIywgYy1mb3JtYXQKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdG9vayAlbGQgbXNlYyIKK21zZ3N0ciAitn2x0iBYIFdpbmRvdyCv067JICVsZCBtc2VjIgorCisjOiBvc191bml4LmM6MTE3MAorbXNnaWQgIiIKKyJcbiIKKyJWaW06IEdvdCBYIGVycm9yXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWaW06IFggv/m7flxuIgorCisjOiBvc191bml4LmM6MTI3NgorbXNnaWQgIlRlc3RpbmcgdGhlIFggZGlzcGxheSBmYWlsZWQiCittc2dzdHIgIrT6uNUgWCBXaW5kb3cgpaKx0SIKKworIzogb3NfdW5peC5jOjE0MTUKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgdGltZWQgb3V0IgorbXNnc3RyICK2fbHSIFggV2luZG93ILlPrskiCisKKyM6IG9zX3VuaXguYzozMTQ1IG9zX3VuaXguYzozODI1Cittc2dpZCAiIgorIlxuIgorIkNhbm5vdCBleGVjdXRlIHNoZWxsICIKK21zZ3N0ciAiIgorIlxuIgorIqSjr+Cw9abmIHNoZWxsIgorCisjOiBvc191bml4LmM6MzE5MworbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgZXhlY3V0ZSBzaGVsbCBzaFxuIgorbXNnc3RyICIiCisiXG4iCisipKOv4LD1puYgc2hlbGwgc2hcbiIKKworIzogb3NfdW5peC5jOjMxOTcgb3NfdW5peC5jOjM4MzEKK21zZ2lkICIiCisiXG4iCisic2hlbGwgcmV0dXJuZWQgIgorbXNnc3RyICIiCisiXG4iCisiU2hlbGwgpHeq8KZeIgorCisjOiBvc191bml4LmM6MzMzMgorbXNnaWQgIiIKKyJcbiIKKyJDYW5ub3QgY3JlYXRlIHBpcGVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyKko6/gq9il3yBwaXBlILrevXVcbiIKKworIzogb3NfdW5peC5jOjMzNDcKK21zZ2lkICIiCisiXG4iCisiQ2Fubm90IGZvcmtcbiIKK21zZ3N0ciAiIgorIlxuIgorIqSjr+AgZm9ya1xuIgorCisjOiBvc191bml4LmM6MzgzOAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorIlxuIgorIqlSpU+kd7LXtbJcbiIKKworIzogb3NfdW5peC5jOjUzOTgKK21zZ2lkICJPcGVuaW5nIHRoZSBYIGRpc3BsYXkgZmFpbGVkIgorbXNnc3RyICK2fbHSIFggV2luZG93IKWisdEiCisKKyM6IG9zX3Ztc19tbXMuYzo1OQorbXNnaWQgIkF0IGxpbmUiCittc2dzdHIgIqZipua4uSAiCisKKyM6IG9zX3czMmV4ZS5jOjE2OQorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHZpbTMyLmRsbCEiCittc2dzdHIgIrVMqmu4/KRKIHZpbTMyLmRsbKFJIgorCisjOiBvc193MzJleGUuYzoxNjkgb3NfdzMyZXhlLmM6MTc5Cittc2dpZCAiVklNIEVycm9yIgorbXNnc3RyICJWSU0gv/m7fiIKKworIzogb3NfdzMyZXhlLmM6MTc5Cittc2dpZCAiQ291bGQgbm90IGZpeCB1cCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgRExMISIKK21zZ3N0ciAipKOv4K3Xpb+o56ahq/y80KjsIERMTCEiCisKKyM6IG9zX3dpbjE2LmM6NTgzIG9zX3dpbjMyLmM6MzA0NworIywgYy1mb3JtYXQKK21zZ2lkICJzaGVsbCByZXR1cm5lZCAlZCIKK21zZ3N0ciAiU2hlbGwgtsemXq3IICVkIgorCisjOiBvc193aW4zMi5jOjI1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmltOiBDYXVnaHQgJXMgZXZlbnRcbiIKK21zZ3N0ciAiVmltOiDEZLpJqOwgJXMgXG4iCisKKyM6IG9zX3dpbjMyLmM6MjUwNworbXNnaWQgImNsb3NlIgorbXNnc3RyICLD9rOsIgorCisjOiBvc193aW4zMi5jOjI1MDkKK21zZ2lkICJsb2dvZmYiCittc2dzdHIgIrVupVgiCisKKyM6IG9zX3dpbjMyLmM6MjUxMAorbXNnaWQgInNodXRkb3duIgorbXNnc3RyICLD9r73IgorCisjOiBvc193aW4zMi5jOjMwMDAKK21zZ2lkICJFMzcxOiBDb21tYW5kIG5vdCBmb3VuZCIKK21zZ3N0ciAiRTM3MTogp+Sko6jsqVKlTyIKKworIzogb3Nfd2luMzIuYzozMDEzCittc2dpZCAiIgorIlZJTVJVTi5FWEUgbm90IGZvdW5kIGluIHlvdXIgJFBBVEguXG4iCisiRXh0ZXJuYWwgY29tbWFuZHMgd2lsbCBub3QgcGF1c2UgYWZ0ZXIgY29tcGxldGlvbi5cbiIKKyJTZWUgIDpoZWxwIHdpbjMyLXZpbXJ1biAgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisipmKnQaq6ICRQQVRIIKSkp+Sko6jsIFZJTVJVTi5FWEUuXG4iCisipX6zoalSpU+w9abmp7mypqvhsU6ko7d8vMiwsS5cbiIKKyK2aaRAqEK7oan6vdCw9abmIDpoZWxwIHdpbjMyLXZpbXJ1biAiCisKKyM6IG9zX3dpbjMyLmM6MzAxNgorbXNnaWQgIlZpbSBXYXJuaW5nIgorbXNnc3RyICJWaW0gxLWnaSIKKworIzogcXVpY2tmaXguYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MjogVG9vIG1hbnkgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzcyOiCu5qahpMamcqbquMyms6TTpmggJSUlYyAiCisKKyM6IHF1aWNrZml4LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzM6IFVuZXhwZWN0ZWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzczOiCu5qahpMamcqbqpKPAs7jTpViyeyAlJSVjICIKKworIzogcXVpY2tmaXguYzozMjUKK21zZ2lkICJFMzc0OiBNaXNzaW5nIF0gaW4gZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiRTM3NDogruamoaTGpnKm6rjMpNakRiBdIgorCisjOiBxdWlja2ZpeC5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzc1OiBVbnN1cHBvcnRlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIkUzNzU6IK7mpqGkxqZypuq4zKazpKOk5LSpqrogJSUlYyAiCisKKyM6IHF1aWNrZml4LmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzY6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIHByZWZpeCIKK21zZ3N0ciAiRTM3NjogruamoaTGpnKm6rZ9wFm4zKazpKOlv71UqrogJSUlYyAiCisKKyM6IHF1aWNrZml4LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzNzc6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJFMzc3OiCu5qahpMamcqbquMyms6Sjpb+9VKq6ICUlJWMgIgorCisjOiBxdWlja2ZpeC5jOjM5MQorbXNnaWQgIkUzNzg6ICdlcnJvcmZvcm1hdCcgY29udGFpbnMgbm8gcGF0dGVybiIKK21zZ3N0ciAiRTM3ODogJ2Vycm9yZm9ybWF0JyClvLNdqXciCisKKyM6IHF1aWNrZml4LmM6NDk3Cittc2dpZCAiRTM3OTogTWlzc2luZyBvciBlbXB0eSBkaXJlY3RvcnkgbmFtZSIKK21zZ3N0ciAiRTM3OTogp+Sko6jspdi//aZXutmpzqxPqsWquqXYv/2mV7rZIgorCisjOiBxdWlja2ZpeC5jOjk3OQorbXNnaWQgIkU1NTM6IE5vIG1vcmUgaXRlbXMiCittc2dzdHIgIkU1NTM6IKhTprOo5KWmtrWl2CIKKworIzogcXVpY2tmaXguYzoxMjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiglZCBvZiAlZCklcyVzOiAiCittc2dzdHIgIiglZCAvICVkKSVzJXM6ICIKKworIzogcXVpY2tmaXguYzoxMjAyCittc2dpZCAiIChsaW5lIGRlbGV0ZWQpIgorbXNnc3RyICIgKKbmpHenUrCjKSIKKworIzogcXVpY2tmaXguYzoxNDEyCittc2dpZCAiRTM4MDogQXQgYm90dG9tIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgwOiBRdWlja2ZpeCCw78V8tbKnwCIKKworIzogcXVpY2tmaXguYzoxNDIxCittc2dpZCAiRTM4MTogQXQgdG9wIG9mIHF1aWNrZml4IHN0YWNrIgorbXNnc3RyICJFMzgxOiBRdWlja2ZpeCCw78V8s7u63SIKKworIzogcXVpY2tmaXguYzoxNDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIKK21zZ3N0ciAiv/m7fqZDqu0gJWQvJWQ7IKZAprMgJWQgtrW/+bt+IgorCisjOiBxdWlja2ZpeC5jOjE5MDQKK21zZ2lkICJFMzgyOiBDYW5ub3Qgd3JpdGUsICdidWZ0eXBlJyBvcHRpb24gaXMgc2V0IgorbXNnc3RyICJFMzgyOiC1TKprvGekSqFBJ2J1ZnR5cGUnIL/vtrWkd7NdqXciCisKKyM6IHJlZ2V4cC5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzY5OiBpbnZhbGlkIGl0ZW0gaW4gJXMlJVtdIgorbXNnc3RyICJFMzY5OiCko6W/vVSqura1pdihRyAlcyUlW10iCisKKyM6IHJlZ2V4cC5jOjgyNgorbXNnaWQgIkUzMzk6IFBhdHRlcm4gdG9vIGxvbmciCittc2dzdHIgIkUzMzk6IKZXpnKk06r4IgorCisjOiByZWdleHAuYzo5OTUKK21zZ2lkICJFNTA6IFRvbyBtYW55IFxceigiCittc2dzdHIgIkU1MDogpNOmaCBcXHooIgorCisjOiByZWdleHAuYzoxMDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MTogVG9vIG1hbnkgJXMoIgorbXNnc3RyICJFNTE6IKTTpmggJXMoIgorCisjOiByZWdleHAuYzoxMDYzCittc2dpZCAiRTUyOiBVbm1hdGNoZWQgXFx6KCIKK21zZ3N0ciAiRTUyOiC1TLnvwLOquiBcXHooIgorCisjOiByZWdleHAuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1MzogVW5tYXRjaGVkICVzJSUoIgorbXNnc3RyICJFNTM6ILVMue/As6q6ICVzJSUoIgorCisjOiByZWdleHAuYzoxMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NDogVW5tYXRjaGVkICVzKCIKK21zZ3N0ciAiRTU0OiC1TLnvwLOquiAlcygiCisKKyM6IHJlZ2V4cC5jOjEwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU1OiBVbm1hdGNoZWQgJXMpIgorbXNnc3RyICJFNTU6ILVMue/As6q6ICVzKSIKKworIzogcmVnZXhwLmM6MTIzNworIywgYy1mb3JtYXQKK21zZ2lkICJFNTY6ICVzKiBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IgorbXNnc3RyICJFNTY6ICVzKiC5QrripLilaaVIrE+qxaq6IgorCisjOiByZWdleHAuYzoxMjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NzogJXMrIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiCittc2dzdHIgIkU1NjogJXMrILlCuuKkuKVppUisT6rFqroiCisKKyM6IHJlZ2V4cC5jOjEyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU5OiBpbnZhbGlkIGNoYXJhY3RlciBhZnRlciAlc0AiCittc2dzdHIgIkU1OTogq+GtsaazpKOlv71UqrqmcqS4OiAlc0AiCisKKyM6IHJlZ2V4cC5jOjEzMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTU4OiAlc3sgb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIKK21zZ3N0ciAiRTU4OiAlc3sguUK64qS4pWmlSKxPqsWquiIKKworIzogcmVnZXhwLmM6MTMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjA6IFRvbyBtYW55IGNvbXBsZXggJXN7Li4ufXMiCittc2dzdHIgIkU2MDogpNOmaL3GwviquiAlc3suLi59cyIKKworIzogcmVnZXhwLmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjE6IE5lc3RlZCAlcyoiCittc2dzdHIgIkU2MTogsV+qrCAlcyoiCisKKyM6IHJlZ2V4cC5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTYyOiBOZXN0ZWQgJXMlYyIKK21zZ3N0ciAiRTYyOiCxX6qsICVzJWMiCisKKyM6IHJlZ2V4cC5jOjE0NjYKK21zZ2lkICJFNjM6IGludmFsaWQgdXNlIG9mIFxcXyIKK21zZ3N0ciAiRTYzOiCko6W/vVSquqjPpc4gXFxfIgorCisjOiByZWdleHAuYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciCittc2dzdHIgIkU2NDogJXMlYyCoU6azsbWqRqboIgorCisjOiByZWdleHAuYzoxNTY3Cittc2dpZCAiRTY1OiBJbGxlZ2FsIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICJFNjU6IKSjpb+9VKq6pM+mVrDRptIiCisKKyM6IHJlZ2V4cC5jOjE1ODAKK21zZ2lkICJFNjY6IFxceiggbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY2OiBcXHooIKSjr+CmYqa5pViyeyIKKworIzogcmVnZXhwLmM6MTU5OQorbXNnaWQgIkU2NzogXFx6MSBldCBhbC4gbm90IGFsbG93ZWQgaGVyZSIKK21zZ3N0ciAiRTY3OiBcXHoxIGV0IGFsLiCko6/gpmKmuaVYsnsiCisKKyM6IHJlZ2V4cC5jOjE2MTAKK21zZ2lkICJFNjg6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxceiIKK21zZ3N0ciAiRTY4OiCr4a2xprOko6W/vVSquqZypLg6IFxceiIKKworIzogcmVnZXhwLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNjk6IE1pc3NpbmcgXSBhZnRlciAlcyUlWyIKK21zZ3N0ciAiRTY5OiAlcyUlWyCr4a/KpNYgXSIKKworIzogcmVnZXhwLmM6MTY3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNzA6IEVtcHR5ICVzJSVbXSIKK21zZ3N0ciAiRTcwOiCqxaq6ICVzJSVbXSIKKworIzogcmVnZXhwLmM6MTczNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNzE6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyICVzJSUiCittc2dzdHIgIkU3MTogq+GtsaazpKOlv71UqrqmcqS4OiAlcyUlIgorCisjOiByZWdleHAuYzoyNTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU1NTQ6IFN5bnRheCBlcnJvciBpbiAlc3suLi59IgorbXNnc3RyICJFNTU0OiC7eaprv/m7fjogJXN7Li4ufSIKKworIzogcmVnZXhwLmM6Mjc3NworbXNnaWQgIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IgorbXNnc3RyICJFMzYxOiC1TKprsPWm5jsgcmVndWxhciBleHByZXNzaW9uIKTTvcbC+D8iCisKKyM6IHJlZ2V4cC5jOjI5MTIKK21zZ2lkICJFMzYzOiBwYXR0ZXJuIGNhdXNlZCBvdXQtb2Ytc3RhY2sgZXJyb3IiCittc2dzdHIgIkUzNjM6IHJlZ3VsYXIgZXhwcmVzc2lvbiCzeaaosO/FfKXOpfqqur/5u34iCisKKyM6IHJlZ2V4cC5jOjMxNDgKK21zZ2lkICJFeHRlcm5hbCBzdWJtYXRjaGVzOlxuIgorbXNnc3RyICKlfrOhssWmWDpcbiIKKworIzogc2NyZWVuLmM6MjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIrLS0lM2xkIGxpbmVzIGZvbGRlZCAiCittc2dzdHIgIistLaR3IGZvbGQgJTNsZCCm5iIKKworIzogc2NyZWVuLmM6Nzc4NQorbXNnaWQgIiBWUkVQTEFDRSIKK21zZ3N0ciAiIFYtqPqlTiIKKworIzogc2NyZWVuLmM6Nzc4OQorbXNnaWQgIiBSRVBMQUNFIgorbXNnc3RyICIgqPqlTiIKKworIzogc2NyZWVuLmM6Nzc5NAorbXNnaWQgIiBSRVZFUlNFIgorbXNnc3RyICIgpM/C4CIKKworIzogc2NyZWVuLmM6Nzc5NgorbXNnaWQgIiBJTlNFUlQiCittc2dzdHIgIiC0oaRKIgorCisjOiBzY3JlZW4uYzo3Nzk5Cittc2dpZCAiIChpbnNlcnQpIgorbXNnc3RyICIgKLShpEopIgorCisjOiBzY3JlZW4uYzo3ODAxCittc2dpZCAiIChyZXBsYWNlKSIKK21zZ3N0ciAiICio+qVOKSIKKworIzogc2NyZWVuLmM6NzgwMworbXNnaWQgIiAodnJlcGxhY2UpIgorbXNnc3RyICIgKHYtqPqlTikiCisKKyM6IHNjcmVlbi5jOjc4MDYKK21zZ2lkICIgSGVicmV3IgorbXNnc3RyICIgSGVicmV3IgorCisjOiBzY3JlZW4uYzo3ODE0Cittc2dpZCAiIChsYW5nKSIKK21zZ3N0ciAiICi7eailKSIKKworIzogc2NyZWVuLmM6NzgxNworbXNnaWQgIiAocGFzdGUpIgorbXNnc3RyICIgKLZLpFcpIgorCisjOiBzY3JlZW4uYzo3ODIzCittc2dpZCAiIFNFTEVDVCIKK21zZ3N0ciAiIL/vqPoiCisKKyM6IHNjcmVlbi5jOjc4MjUKK21zZ2lkICIgVklTVUFMIgorbXNnc3RyICIgv++o+iIKKworIzogc2NyZWVuLmM6NzgyNworbXNnaWQgIiBCTE9DSyIKK21zZ3N0ciAiILDPtvQiCisKKyM6IHNjcmVlbi5jOjc4MjkKK21zZ2lkICIgTElORSIKK21zZ3N0ciAiIKbmv++o+iIKKworIzogc2NyZWVuLmM6Nzg0MiBzY3JlZW4uYzo3OTAyCittc2dpZCAicmVjb3JkaW5nIgorbXNnc3RyICKwT7/9pKQiCisKKyM6IHNlYXJjaC5jOjM2Cittc2dpZCAic2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIgorbXNnc3RyICKkd7dqtE2o7MDJrte2fcBZoUamQbFxtbKnwMR+xPK3arRNIgorCisjOiBzZWFyY2guYzozNworbXNnaWQgInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIKK21zZ3N0ciAipHe3arRNqOzAya7XtbKnwKFGpkGxcbZ9wFnEfsTyt2q0TSIKKworIzogc2VhcmNoLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODM6IEludmFsaWQgc2VhcmNoIHN0cmluZzogJXMiCittc2dzdHIgIkUzODM6IL/5u36qurdqtE2mcqbqOiAlcyIKKworIzogc2VhcmNoLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUzODQ6IHNlYXJjaCBoaXQgVE9QIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIKK21zZ3N0ciAiRTM4NDogpHe3arRNqOzAya7Xtn3AWaS0p+Sko6jsICVzIgorCisjOiBzZWFyY2guYzo3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM4NTogc2VhcmNoIGhpdCBCT1RUT00gd2l0aG91dCBtYXRjaCBmb3I6ICVzIgorbXNnc3RyICJFMzg1OiCkd7dqtE2o7MDJrte1sqfApLSn5KSjqOwgJXMiCisKKyM6IHNlYXJjaC5jOjExNTcKK21zZ2lkICJFMzg2OiBFeHBlY3RlZCAnPycgb3IgJy8nICBhZnRlciAnOyciCittc2dzdHIgIkUzODY6IKZiICc7JyCr4a2xwLO406azICc/JyCpziAnLyciCisKKyM6IHNlYXJjaC5jOjM1NjcKK21zZ2lkICIgKGluY2x1ZGVzIHByZXZpb3VzbHkgbGlzdGVkIG1hdGNoKSIKK21zZ3N0ciAiICilXaxBq2WmuKZDpViyxaZYtrUpIgorCisjLiBjdXJzb3IgYXQgc3RhdHVzIGxpbmUKKyM6IHNlYXJjaC5jOjM1ODcKK21zZ2lkICItLS0gSW5jbHVkZWQgZmlsZXMgIgorbXNnc3RyICItLS0gpN6kSsDJrtcgIgorCisjOiBzZWFyY2guYzozNTg5Cittc2dpZCAibm90IGZvdW5kICIKK21zZ3N0ciAip+Sko6jsICIKKworIzogc2VhcmNoLmM6MzU5MAorbXNnaWQgImluIHBhdGggLS0tXG4iCittc2dzdHIgIi0tLVxuIgorCisjOiBzZWFyY2guYzozNjI5Cittc2dpZCAiICAoQWxyZWFkeSBsaXN0ZWQpIgorbXNnc3RyICIgICikd6ZDpVgpIgorCisjOiBzZWFyY2guYzozNjMxCittc2dpZCAiICBOT1QgRk9VTkQiCittc2dzdHIgIiAgp+Sko6jsIgorCisjOiBzZWFyY2guYzozNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nIGluY2x1ZGVkIGZpbGU6ICVzIgorbXNnc3RyICK3arRNpN6kSsDJrtc6ICVzIgorCisjOiBzZWFyY2guYzozOTAxCittc2dpZCAiRTM4NzogTWF0Y2ggaXMgb24gY3VycmVudCBsaW5lIgorbXNnc3RyICJFMzg3OiCl2KtlqdKmYqbmpKSms6RApMewdCIKKworIzogc2VhcmNoLmM6NDA0MQorbXNnaWQgIkFsbCBpbmNsdWRlZCBmaWxlcyB3ZXJlIGZvdW5kIgorbXNnc3RyICKp0qazpN6kSsDJrtezo6R3p+So7CIKKworIzogc2VhcmNoLmM6NDA0MworbXNnaWQgIk5vIGluY2x1ZGVkIGZpbGVzIgorbXNnc3RyICKoU6azpN6kSsDJrtciCisKKyM6IHNlYXJjaC5jOjQwNTkKK21zZ2lkICJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iCittc2dzdHIgIkUzODg6IKfkpKOo7Kl3uHEiCisKKyM6IHNlYXJjaC5jOjQwNjEKK21zZ2lkICJFMzg5OiBDb3VsZG4ndCBmaW5kIHBhdHRlcm4iCittc2dzdHIgIkUzODk6IKfkpKOo7CBwYXR0ZXJuIgorCisjOiBzeW50YXguYzozMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkUzOTA6IElsbGVnYWwgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFMzkwOiCw0bzGpKOlv71UOiAlcyIKKworIzogc3ludGF4LmM6MzE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkxOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MTogtUymuSBzeW50YXggY2x1c3RlcjogXCIlc1wiIgorCisjOiBzeW50YXguYzozMzU5Cittc2dpZCAiTm8gU3ludGF4IGl0ZW1zIGRlZmluZWQgZm9yIHRoaXMgYnVmZmVyIgorbXNnc3RyICKzb63TvXe9xLDPqFOms6l3uHGl9Kbzu3mqayIKKworIzogc3ludGF4LmM6MzM2NworbXNnaWQgInN5bmNpbmcgb24gQy1zdHlsZSBjb21tZW50cyIKK21zZ3N0ciAiQ7t5qKWmobX5uNGmUKhCpMakpCIKKworIzogc3ludGF4LmM6MzM3NQorbXNnaWQgIm5vIHN5bmNpbmciCittc2dzdHIgIqhTprOmUKhCpMYiCisKKyM6IHN5bnRheC5jOjMzNzgKK21zZ2lkICJzeW5jaW5nIHN0YXJ0cyAiCittc2dzdHIgIqZQqEKkxrZ9qWwiCisKKyM6IHN5bnRheC5jOjMzODAgc3ludGF4LmM6MzQ1NQorbXNnaWQgIiBsaW5lcyBiZWZvcmUgdG9wIGxpbmUiCittc2dzdHIgIqbmuLm2V6VYvWSz8iIKKworIzogc3ludGF4LmM6MzM4NQorbXNnaWQgIiIKKyJcbiIKKyItLS0gU3ludGF4IHN5bmMgaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tILt5qmumUKhCqqul8yAoU3ludGF4IHN5bmMgaXRlbXMpIC0tLSIKKworIzogc3ludGF4LmM6MzM5MAorbXNnaWQgIiIKKyJcbiIKKyJzeW5jaW5nIG9uIGl0ZW1zIgorbXNnc3RyICIiCisiXG4iCisiplCoQqTGpKQ6IgorCisjOiBzeW50YXguYzozMzk2Cittc2dpZCAiIgorIlxuIgorIi0tLSBTeW50YXggaXRlbXMgLS0tIgorbXNnc3RyICIiCisiXG4iCisiLS0tILt5qmu2taXYIC0tLSIKKworIzogc3ludGF4LmM6MzQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIKK21zZ3N0ciAiRTM5MjogtUymuSBzeW50YXggY2x1c3RlcjogXCIlc1wiIgorCisjOiBzeW50YXguYzozNDQ1Cittc2dpZCAibWluaW1hbCAiCittc2dzdHIgIrPMpHAiCisKKyM6IHN5bnRheC5jOjM0NTIKK21zZ2lkICJtYXhpbWFsICIKK21zZ3N0ciAis8ykaiIKKworIzogc3ludGF4LmM6MzQ2NAorbXNnaWQgIjsgbWF0Y2ggIgorbXNnc3RyICI7ILLFplggIgorCisjOiBzeW50YXguYzozNDY2Cittc2dpZCAiIGxpbmUgYnJlYWtzIgorbXNnc3RyICLCX6bmIgorCisjOiBzeW50YXguYzo0MTAwCittc2dpZCAiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIgorbXNnc3RyICJFMzkzOiCoz6XOpEako6W/vVSqurDRvMYiCisKKyM6IHN5bnRheC5jOjQxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5NDogRGlkbid0IGZpbmQgcmVnaW9uIGl0ZW0gZm9yICVzIgorbXNnc3RyICJFMzk0OiCn5KSjqOwgJXMgqrogcmVnaW9uIGl0ZW0iCisKKyM6IHN5bnRheC5jOjQxNTIKK21zZ2lkICJFMzk1OiBjb250YWlucyBhcmd1bWVudCBub3QgYWNjZXB0ZWQgaGVyZSIKK21zZ3N0ciAiRTM5NTogqM+lzqRGpKOlv71Uqrqw0bzGIgorCisjOiBzeW50YXguYzo0MTYzCittc2dpZCAiRTM5NjogY29udGFpbmVkaW4gYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiCittc2dzdHIgIkUzOTY6IKjPpc6kRqSjpb+9VKq6sNG8xiIKKworIzogc3ludGF4LmM6NDI0MQorbXNnaWQgIkUzOTc6IEZpbGVuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJFMzk3OiC73a1uwMmu16ZXutkiCisKKyM6IHN5bnRheC5jOjQ1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM5ODogTWlzc2luZyAnPSc6ICVzIgorbXNnc3RyICJFMzk4OiCvyqTWIFwiPVwiOiAlcyIKKworIzogc3ludGF4LmM6NDczNworIywgYy1mb3JtYXQKK21zZ2lkICJFMzk5OiBOb3QgZW5vdWdoIGFyZ3VtZW50czogc3ludGF4IHJlZ2lvbiAlcyIKK21zZ3N0ciAiRTM5OTogc3ludGF4IHJlZ2lvbiAlcyCquqTevMak06TWIgorCisjOiBzeW50YXguYzo1MDY4Cittc2dpZCAiRTQwMDogTm8gY2x1c3RlciBzcGVjaWZpZWQiCittc2dzdHIgIkU0MDA6IKhTprOr/Kl3qrrE3anKIgorCisjOiBzeW50YXguYzo1MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDE6IFBhdHRlcm4gZGVsaW1pdGVyIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0MDE6IKfkpKOo7KTAuWqyxbi5OiAlcyIKKworIzogc3ludGF4LmM6NTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDAyOiBHYXJiYWdlIGFmdGVyIHBhdHRlcm46ICVzIgorbXNnc3RyICJFNDAyOiAnJXMnIKvhrbGquqpGpui1TKprv+vD0SIKKworIzogc3ludGF4LmM6NTI3MAorbXNnaWQgIkU0MDM6IHN5bnRheCBzeW5jOiBsaW5lIGNvbnRpbnVhdGlvbnMgcGF0dGVybiBzcGVjaWZpZWQgdHdpY2UiCittc2dzdHIgIkU0MDM6ILt5qmumUKhCOiCzc7G1puayxbi5s1Gr/Kl3pEao4qa4IgorCisjOiBzeW50YXguYzo1MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDQ6IElsbGVnYWwgYXJndW1lbnRzOiAlcyIKK21zZ3N0ciAiRTQwNDogsNG8xqSjpb+9VDogJXMiCisKKyM6IHN5bnRheC5jOjUzNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwNTogTWlzc2luZyBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQwNTogr8qk1qzbtaWyxbi5OiAlcyIKKworIzogc3ludGF4LmM6NTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA2OiBFbXB0eSBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0MDY6IKrFpdWw0bzGOiAlcyIKKworIzogc3ludGF4LmM6NTQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDA3OiAlcyBub3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNDA3OiAlcyCko6/gpmKmuaVYsnsiCisKKyM6IHN5bnRheC5jOjU0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQwODogJXMgbXVzdCBiZSBmaXJzdCBpbiBjb250YWlucyBsaXN0IgorbXNnc3RyICJFNDA4OiAlcyClsra3rE+mQ6rtuMyqurLEpECt0yIKKworIzogc3ludGF4LmM6NTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDA5OiBVbmtub3duIGdyb3VwIG5hbWU6ICVzIgorbXNnc3RyICJFNDA5OiCko6W/vVSqurhzstWmV7rZOiAlcyIKKworIzogc3ludGF4LmM6NTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDEwOiBJbnZhbGlkIDpzeW50YXggc3ViY29tbWFuZDogJXMiCittc2dzdHIgIkU0MTA6IKSjpb+9VKq6IDpzeW50YXggpGypUqVPOiAlcyIKKworIzogc3ludGF4LmM6NjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDExOiBoaWdobGlnaHQgZ3JvdXAgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQxMTogp+Sko6jsIGhpZ2hsaWdodCBncm91cDogJXMiCisKKyM6IHN5bnRheC5jOjYxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxMjogTm90IGVub3VnaCBhcmd1bWVudHM6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCittc2dzdHIgIkU0MTI6ILDRvMak06TWOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIgorCisjOiBzeW50YXguYzo2MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTM6IFRvbyBtYW55IGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIKK21zZ3N0ciAiRTQxMzogsNG8xrlMpmg6IFwiOmhpZ2hsaWdodCBsaW5rICVzXCIiCisKKyM6IHN5bnRheC5jOjYxNTAKK21zZ2lkICJFNDE0OiBncm91cCBoYXMgc2V0dGluZ3MsIGhpZ2hsaWdodCBsaW5rIGlnbm9yZWQiCittc2dzdHIgIkU0MTQ6IKR3s12pd7hzstUsIKm/sqQgaGlnaGxpZ2h0IGxpbmsiCisKKyM6IHN5bnRheC5jOjYyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxNTogdW5leHBlY3RlZCBlcXVhbCBzaWduOiAlcyIKK21zZ3N0ciAiRTQxNTogpKO406azqrq1pbi5OiAlcyIKKworIzogc3ludGF4LmM6NjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDE2OiBtaXNzaW5nIGVxdWFsIHNpZ246ICVzIgorbXNnc3RyICJFNDE2OiCvyqTWrNu1pbLFuLk6ICVzIgorCisjOiBzeW50YXguYzo2MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MTc6IG1pc3NpbmcgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJFNDE3OiCvyqTWsNG8xjogJXMiCisKKyM6IHN5bnRheC5jOjYzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiCittc2dzdHIgIkU0MTg6IKSjpliqa6q6rcg6ICVzIgorCisjOiBzeW50YXguYzo2NDkzCittc2dpZCAiRTQxOTogRkcgY29sb3IgdW5rbm93biIKK21zZ3N0ciAiRTQxOTogv/m7fqq6q2W0usNDpuIiCisKKyM6IHN5bnRheC5jOjY1MDQKK21zZ2lkICJFNDIwOiBCRyBjb2xvciB1bmtub3duIgorbXNnc3RyICJFNDIwOiC/+bt+qrqtSbS6w0Om4iIKKworIzogc3ludGF4LmM6NjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiCittc2dzdHIgIkU0MjE6IL/5u36qusNDpuKmV7rZqc68xq3IOiAlcyIKKworIzogc3ludGF4LmM6Njc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIyOiB0ZXJtaW5hbCBjb2RlIHRvbyBsb25nOiAlcyIKK21zZ3N0ciAiRTQyMjogste63b73vVik06r4OiAlcyIKKworIzogc3ludGF4LmM6NjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDIzOiBJbGxlZ2FsIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRTQyMzogsNG8xqSjpb+9VDogJXMiCisKKyM6IHN5bnRheC5jOjczNDcKK21zZ2lkICJFNDI0OiBUb28gbWFueSBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIGF0dHJpYnV0ZXMgaW4gdXNlIgorbXNnc3RyICJFNDI0OiCoz6XOpEa5TKZorNuyp6q6sKqrR6vXxN2pyiIKKworIzogdGFnLmM6OTAKK21zZ2lkICJFNTU1OiBhdCBib3R0b20gb2YgdGFnIHN0YWNrIgorbXNnc3RyICJFNTU1OiC80MXSKHRhZymw78V8tbKnwCIKKworIzogdGFnLmM6OTEKK21zZ2lkICJFNTU2OiBhdCB0b3Agb2YgdGFnIHN0YWNrIgorbXNnc3RyICJFNTU2OiC80MXSKHRhZymw78V8tn3AWSIKKworIzogdGFnLmM6MzkyCittc2dpZCAiRTQyNTogQ2Fubm90IGdvIGJlZm9yZSBmaXJzdCBtYXRjaGluZyB0YWciCittc2dzdHIgIkU0MjU6IKR3uGemYrPMq2Wtsaq6vNDF0ih0YWcppEYiCisKKyM6IHRhZy5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI2OiB0YWcgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiRTQyNjogp+Sko6jsvNDF0ih0YWcpOiAlcyIKKworIzogdGFnLmM6NTQ1Cittc2dpZCAiICAjIHByaSBraW5kIHRhZyIKK21zZ3N0ciAiICAjIHByaSBraW5kIHRhZyIKKworIzogdGFnLmM6NTQ4Cittc2dpZCAiZmlsZVxuIgorbXNnc3RyICLAya7XXG4iCisKKyMuCisjLiAqIEFzayB0byBzZWxlY3QgYSB0YWcgZnJvbSB0aGUgbGlzdC4KKyMuICogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4KKyMuCisjOiB0YWcuYzo3MDYKK21zZ2lkICJFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOiAiCittc2dzdHIgIr/ppEogbnIgqc6/777cICg8Q1I+IML3tn0pOiAiCisKKyM6IHRhZy5jOjc0NgorbXNnaWQgIkU0Mjc6IFRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIHRhZyIKK21zZ3N0ciAiRTQyNzogpXWms6a5trWyxaZYIgorCisjOiB0YWcuYzo3NDgKK21zZ2lkICJFNDI4OiBDYW5ub3QgZ28gYmV5b25kIGxhc3QgbWF0Y2hpbmcgdGFnIgorbXNnc3RyICJFNDI4OiCkdrhnpmKzzKvhpECt07LFpliquiB0YWcgpEYiCisKKyM6IHRhZy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiwMmu1yBcIiVzXCIgpKOmc6ZiIgorCisjLiBHaXZlIGFuIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiBtYXRjaGluZyB0YWdzCisjOiB0YWcuYzo3ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICVkIG9mICVkJXMiCittc2dzdHIgIqfkqOwgdGFnOiAlZC8lZCVzIgorCisjOiB0YWcuYzo3ODMKK21zZ2lkICIgb3IgbW9yZSIKK21zZ3N0ciAiIKnOp/OmaCIKKworIzogdGFnLmM6Nzg1Cittc2dpZCAiICBVc2luZyB0YWcgd2l0aCBkaWZmZXJlbnQgY2FzZSEiCittc2dzdHIgIiAgpUiko6ZQpGqkcLxnqNOoz6XOIHRhZyEiCisKKyM6IHRhZy5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRTQyOTogwMmu1yBcIiVzXCIgpKOmc6ZiIgorCisjLiBIaWdobGlnaHQgdGl0bGUKKyM6IHRhZy5jOjg5NworbXNnaWQgIiIKKyJcbiIKKyIgICMgVE8gdGFnICAgICAgICAgRlJPTSBsaW5lICBpbiBmaWxlL3RleHQiCittc2dzdHIgIiIKKyJcbiIKKyIgICMgqOwgdGFnICAgICAgICAgsXEgICCm5iAgICCmYiDAya7XL6TlpnIiCisKKyM6IHRhZy5jOjExNDQKK21zZ2lkICJMaW5lYXIgdGFnIHNlYXJjaCIKK21zZ3N0ciAivXWpyrdqtE280MXSIChUYWdzKSIKKworIzogdGFnLmM6MTE0NgorbXNnaWQgIkJpbmFyeSB0YWcgc2VhcmNoIgorbXNnc3RyICKkR6TAt2q0TShCaW5hcnkgc2VhcmNoKSC80MXSKFRhZ3MpIgorCisjOiB0YWcuYzoxMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlYXJjaGluZyB0YWdzIGZpbGUgJXMiCittc2dzdHIgIrdqtE0gdGFnIMDJrtcgXCIlc1wiIgorCisjOiB0YWcuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzA6IFRhZyBmaWxlIHBhdGggdHJ1bmNhdGVkIGZvciAlc1xuIgorbXNnc3RyICJFNDMwOiBUYWcgwMmu17j0rnyzUbpJwl+ssCAlc1xuIgorCisjOiB0YWcuYzoxODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzE6IEZvcm1hdCBlcnJvciBpbiB0YWdzIGZpbGUgXCIlc1wiIgorbXNnc3RyICJFNDMxOiBUYWcgwMkgXCIlc1wiIK7mpqG/+bt+IgorCisjOiB0YWcuYzoxODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZm9yZSBieXRlICVsZCIKK21zZ3N0ciAipmIgJWxkIKbspLikp6tlIgorCisjOiB0YWcuYzoxODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MzI6IFRhZ3MgZmlsZSBub3Qgc29ydGVkOiAlcyIKK21zZ3N0ciAiRTQzMjogVGFnIMDJrtelvLHGp8c6ICVzIgorCisjLiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZQorIzogdGFnLmM6MTkyMgorbXNnaWQgIkU0MzM6IE5vIHRhZ3MgZmlsZSIKK21zZ3N0ciAiRTQzMzogqFOmsyB0YWcgwMkiCisKKyM6IHRhZy5jOjI2MDAKK21zZ2lkICJFNDM0OiBDYW4ndCBmaW5kIHRhZyBwYXR0ZXJuIgorbXNnc3RyICJFNDM0OiCn5KSjqOwgdGFnIgorCisjOiB0YWcuYzoyNjExCittc2dpZCAiRTQzNTogQ291bGRuJ3QgZmluZCB0YWcsIGp1c3QgZ3Vlc3NpbmchIgorbXNnc3RyICJFNDM1OiCn5KSjqOwgdGFnLCClzrJxqrohIgorCisjOiB0ZXJtLmM6MTc0NQorbXNnaWQgIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIKK21zZ3N0ciAiJyC1TKpruPykSqFDpWmlzqq6pLqr2LLXut2+96fOpqGmszoiCisKKyM6IHRlcm0uYzoxNzY5Cittc2dpZCAiZGVmYXVsdGluZyB0byAnIgorbXNnc3RyICK5d7NdOiAnIgorCisjOiB0ZXJtLmM6MjEyNworbXNnaWQgIkU1NTc6IENhbm5vdCBvcGVuIHRlcm1jYXAgZmlsZSIKK21zZ3N0ciAiRTU1NzogtUyqa7Z9sdIgdGVybWNhcCDAya7XIgorCisjOiB0ZXJtLmM6MjEzMQorbXNnaWQgIkU1NTg6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtaW5mbyIKK21zZ3N0ciAiRTU1ODogdGVybWluZm8gpKSoU6azste63b73uOquxra1IgorCisjOiB0ZXJtLmM6MjEzMworbXNnaWQgIkU1NTk6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIgorbXNnc3RyICJFNTU5OiB0ZXJtY2FwIKSkqFOms7LXut2+97jqrsa2tSIKKworIzogdGVybS5jOjIyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQzNjogTm8gXCIlc1wiIGVudHJ5IGluIHRlcm1jYXAiCittc2dzdHIgIkU0MzY6IHRlcm1jYXAgqFOmsyBcIiVzXCIgZW50cnkiCisKKyM6IHRlcm0uYzoyNzY2Cittc2dpZCAiRTQzNzogdGVybWluYWwgY2FwYWJpbGl0eSBcImNtXCIgcmVxdWlyZWQiCittc2dzdHIgIkU0Mzc6ILLXut2+97vdrW4gXCJjbVwiIKq6r+CkTyIKKworIy4gSGlnaGxpZ2h0IHRpdGxlCisjOiB0ZXJtLmM6NDkyNworbXNnaWQgIiIKKyJcbiIKKyItLS0gVGVybWluYWwga2V5cyAtLS0iCittc2dzdHIgIiIKKyJcbiIKKyItLS0gste63b73q/bB5CAtLS0iCisKKyM6IHVpLmM6MjUyCittc2dpZCAibmV3IHNoZWxsIHN0YXJ0ZWRcbiIKK21zZ3N0ciAisF+wyrdzIHNoZWxsXG4iCisKKyM6IHVpLmM6MTc4NAorbXNnaWQgIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIgorbXNnc3RyICJWaW06IMWqqPq/6aRKv/m7fqFBwve2faSkLi4uXG4iCisKKyMuIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0CisjOiB1bmRvLmM6Mzk0Cittc2dpZCAiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IgorbXNnc3RyICK1TKprwdmt7KFGvdDEfsTyp1akTyIKKworIzogdW5kby5jOjU0OQorbXNnaWQgIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIgorbXNnc3RyICJFNDM4OiB1X3VuZG86IKbmuLm/+bt+IgorCisjOiB1bmRvLmM6NzE4Cittc2dpZCAiMSBjaGFuZ2UiCittc2dzdHIgIqRAtrWn78XcIgorCisjOiB1bmRvLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsZCBjaGFuZ2VzIgorbXNnc3RyICIlbGQgtrWn78XcIgorCisjOiB1bmRvLmM6NzY0Cittc2dpZCAiRTQzOTogdW5kbyBsaXN0IGNvcnJ1cHQiCittc2dzdHIgIkU0Mzk6ILRfreymQ6rtt2zDYSIKKworIzogdW5kby5jOjc5NgorbXNnaWQgIkU0NDA6IHVuZG8gbGluZSBtaXNzaW5nIgorbXNnc3RyICJFNDQwOiCn5KSjqOytbiB1bmRvIKq6puYiCisKKyMuIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMKKyM6IHZlcnNpb24uYzo2ODIKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAxNi8zMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2LzMyIEJpdCC5z6usrMmtsaqppbsiCisKKyM6IHZlcnNpb24uYzo2ODQKK21zZ2lkICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDMyIEJpdCC5z6usrMmtsaqppbsiCisKKyM6IHZlcnNpb24uYzo2ODcKK21zZ2lkICIgaW4gV2luMzJzIG1vZGUiCittc2dzdHIgIldpbjMycyC80qahIgorCisjOiB2ZXJzaW9uLmM6Njg5Cittc2dpZCAiIHdpdGggT0xFIHN1cHBvcnQiCittc2dzdHIgIqTktKkgT0xFIgorCisjOiB2ZXJzaW9uLmM6NjkyCittc2dpZCAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgYml0IGNvbnNvbGUgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1TLVdpbmRvd3MgMzIgQml0IGNvbnNvbGUgqqmluyIKKworIzogdmVyc2lvbi5jOjY5NgorbXNnaWQgIiIKKyJcbiIKKyJNUy1XaW5kb3dzIDE2IGJpdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTVMtV2luZG93cyAzMiBCaXQgY29uc29sZSCqqaW7IgorCisjOiB2ZXJzaW9uLmM6NzAwCittc2dpZCAiIgorIlxuIgorIjMyIGJpdCBNUy1ET1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIjMyIEJpdCBNUy1ET1MgqqmluyIKKworIzogdmVyc2lvbi5jOjcwMgorbXNnaWQgIiIKKyJcbiIKKyIxNiBiaXQgTVMtRE9TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyIxNiBCaXQgTVMtRE9TIKqppbsiCisKKyM6IHZlcnNpb24uYzo3MDgKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCAodW5peCkgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIk1hY09TIFggKHVuaXgpIKqppbsiCisKKyM6IHZlcnNpb24uYzo3MTAKK21zZ2lkICIiCisiXG4iCisiTWFjT1MgWCB2ZXJzaW9uIgorbXNnc3RyICIiCisiXG4iCisiTWFjT1MgWCCqqaW7IgorCisjOiB2ZXJzaW9uLmM6NzEzCittc2dpZCAiIgorIlxuIgorIk1hY09TIHZlcnNpb24iCittc2dzdHIgIiIKKyJcbiIKKyJNYWNPUyCqqaW7IgorCisjOiB2ZXJzaW9uLmM6NzE4Cittc2dpZCAiIgorIlxuIgorIlJJU0MgT1MgdmVyc2lvbiIKK21zZ3N0ciAiIgorIlxuIgorIlJJU0MgT1MgqqmluyIKKworIzogdmVyc2lvbi5jOjcyOAorbXNnaWQgIiIKKyJcbiIKKyJJbmNsdWRlZCBwYXRjaGVzOiAiCittc2dzdHIgIiIKKyJcbiIKKyKk3qRKrdelvzogIgorCisjOiB2ZXJzaW9uLmM6NzU0IHZlcnNpb24uYzoxMDk3Cittc2dpZCAiTW9kaWZpZWQgYnkgIgorbXNnc3RyICKt16fvqsyssCIKKworIzogdmVyc2lvbi5jOjc2MQorbXNnaWQgIiIKKyJcbiIKKyJDb21waWxlZCAiCittc2dzdHIgIiIKKyJcbiIKKyK9c8S2IgorCisjOiB2ZXJzaW9uLmM6NzY0Cittc2dpZCAiYnkgIgorbXNnc3RyICKqzDoiCisKKyM6IHZlcnNpb24uYzo3NzYKK21zZ2lkICIiCisiXG4iCisiSHVnZSB2ZXJzaW9uICIKK21zZ3N0ciAiIgorIlxuIgorIrZXsWqqqaW7ICIKKworIzogdmVyc2lvbi5jOjc3OQorbXNnaWQgIiIKKyJcbiIKKyJCaWcgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyKkaqusqqmluyAiCisKKyM6IHZlcnNpb24uYzo3ODIKK21zZ2lkICIiCisiXG4iCisiTm9ybWFsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisipECv66qppbsgIgorCisjOiB2ZXJzaW9uLmM6Nzg1Cittc2dpZCAiIgorIlxuIgorIlNtYWxsIHZlcnNpb24gIgorbXNnc3RyICIiCisiXG4iCisiwrKp9qqppbsgIgorCisjOiB2ZXJzaW9uLmM6Nzg3Cittc2dpZCAiIgorIlxuIgorIlRpbnkgdmVyc2lvbiAiCittc2dzdHIgIiIKKyJcbiIKKyK668KyqqmluyAiCisKKyM6IHZlcnNpb24uYzo3OTMKK21zZ2lkICJ3aXRob3V0IEdVSS4iCittc2dzdHIgIqSjqM+lzrnPq6ysya2xoUMiCisKKyM6IHZlcnNpb24uYzo3OTgKK21zZ2lkICJ3aXRoIEdUSzItR05PTUUgR1VJLiIKK21zZ3N0ciAiqM+lziBHVEsyLUdOT01FILnPq6ysya2xoUMiCisKKyM6IHZlcnNpb24uYzo4MDAKK21zZ2lkICJ3aXRoIEdUSy1HTk9NRSBHVUkuIgorbXNnc3RyICKoz6XOIEdUSy1HTk9NRSC5z6usrMmtsaFDIgorCisjOiB2ZXJzaW9uLmM6ODA0Cittc2dpZCAid2l0aCBHVEsyIEdVSS4iCittc2dzdHIgIqjPpc4gR1RLMiC5z6usrMmtsaFDIgorCisjOiB2ZXJzaW9uLmM6ODA2Cittc2dpZCAid2l0aCBHVEsgR1VJLiIKK21zZ3N0ciAiqM+lziBHVEsguc+rrKzJrbGhQyIKKworIzogdmVyc2lvbi5jOjgxMQorbXNnaWQgIndpdGggWDExLU1vdGlmIEdVSS4iCittc2dzdHIgIqjPpc4gWDExLU1vdGlmILnPq6ysya2xoUMiCisKKyM6IHZlcnNpb24uYzo4MTQKK21zZ2lkICJ3aXRoIFgxMS1BdGhlbmEgR1VJLiIKK21zZ3N0ciAiqM+lziBYMTEtQXRoZW5hILnPq6ysya2xoUMiCisKKyM6IHZlcnNpb24uYzo4MTcKK21zZ2lkICJ3aXRoIEJlT1MgR1VJLiIKK21zZ3N0ciAiqM+lziBCZU9TILnPq6ysya2xoUMiCisKKyM6IHZlcnNpb24uYzo4MjAKK21zZ2lkICJ3aXRoIFBob3RvbiBHVUkuIgorbXNnc3RyICKoz6XOUGhvdG9uuc+rrKzJrbGhQyIKKworIzogdmVyc2lvbi5jOjgyMworbXNnaWQgIndpdGggR1VJLiIKK21zZ3N0ciAiqM+lzrnPq6ysya2xoUMiCisKKyM6IHZlcnNpb24uYzo4MjYKK21zZ2lkICJ3aXRoIENhcmJvbiBHVUkuIgorbXNnc3RyICKoz6XOIENhcmJvbiC5z6usrMmtsaFDIgorCisjOiB2ZXJzaW9uLmM6ODI5Cittc2dpZCAid2l0aCBDb2NvYSBHVUkuIgorbXNnc3RyICKoz6XOIENvY29hILnPq6ysya2xoUMiCisKKyM6IHZlcnNpb24uYzo4MzIKK21zZ2lkICJ3aXRoIChjbGFzc2ljKSBHVUkuIgorbXNnc3RyICKoz6XOICi2x7LOKSC5z6usrMmtsaFDIgorCisjOiB2ZXJzaW9uLmM6ODQzCittc2dpZCAiICBGZWF0dXJlcyBpbmNsdWRlZCAoKykgb3Igbm90ICgtKTpcbiIKK21zZ3N0ciAiIKXYq2WlaajPpc4oKym7UKSjpWmoz6XOKC0pqrq80rLVpkOq7TpcbiIKKworIzogdmVyc2lvbi5jOjg1NQorbXNnaWQgIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICCodLLOIHZpbXJjILNdqXfAyTogXCIiCisKKyM6IHZlcnNpb24uYzo4NjAKK21zZ2lkICIgICAgIHVzZXIgdmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgqM+lzqrMrdOkSCB2aW1yYyCzXal3wMk6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODY1Cittc2dpZCAiIDJuZCB1c2VyIHZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICAgssSkR7LVrdOkSCB2aW1yYyDAya7XOiBcIiIKKworIzogdmVyc2lvbi5jOjg3MAorbXNnaWQgIiAzcmQgdXNlciB2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgILLEpFSy1a3TpEggdmltcmMgwMmu1zogXCIiCisKKyM6IHZlcnNpb24uYzo4NzUKK21zZ2lkICIgICAgICB1c2VyIGV4cmMgZmlsZTogXCIiCittc2dzdHIgIiAgIKjPpc6qzK3TpEggZXhyYyCzXal3wMk6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODgwCittc2dpZCAiICAybmQgdXNlciBleHJjIGZpbGU6IFwiIgorbXNnc3RyICIgICCyxKRHstWoz6XOqswgZXhyYyDAya7XOiBcIiIKKworIzogdmVyc2lvbi5jOjg4NgorbXNnaWQgIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgICAgICAgqHSyziBndmltcmMgwMmu1zogXCIiCisKKyM6IHZlcnNpb24uYzo4OTAKK21zZ2lkICIgICAgdXNlciBndmltcmMgZmlsZTogXCIiCittc2dzdHIgIiAgICAgqM+lzqrMrdOkSCBndmltcmMgwMk6IFwiIgorCisjOiB2ZXJzaW9uLmM6ODk0Cittc2dpZCAiMm5kIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIgorbXNnc3RyICIgICCyxKRHstWt06RIIGd2aW1yYyDAya7XOiBcIiIKKworIzogdmVyc2lvbi5jOjg5OQorbXNnaWQgIjNyZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIKK21zZ3N0ciAiICAgssSkVLLVrdOkSCBndmltcmMgwMmu1zogXCIiCisKKyM6IHZlcnNpb24uYzo5MDYKK21zZ2lkICIgICAgc3lzdGVtIG1lbnUgZmlsZTogXCIiCittc2dzdHIgIiAgICAgICAgICAgqHSyzr/vs+azXal3wMk6IFwiIgorCisjOiB2ZXJzaW9uLmM6OTE0Cittc2dpZCAiICBmYWxsLWJhY2sgZm9yICRWSU06IFwiIgorbXNnc3RyICIgICAgICAgICAgICAgICRWSU0guXezXa3IOiBcIiIKKworIzogdmVyc2lvbi5jOjkyMAorbXNnaWQgIiBmLWIgZm9yICRWSU1SVU5USU1FOiBcIiIKK21zZ3N0ciAiICAgICAgICRWSU1SVU5USU1FILl3s12tyDogXCIiCisKKyM6IHZlcnNpb24uYzo5MjQKK21zZ2lkICJDb21waWxhdGlvbjogIgorbXNnc3RyICK9c8S2pOimoTogIgorCisjOiB2ZXJzaW9uLmM6OTMwCittc2dpZCAiQ29tcGlsZXI6ICIKK21zZ3N0ciAivXPEtr65OiAiCisKKyM6IHZlcnNpb24uYzo5MzUKK21zZ2lkICJMaW5raW5nOiAiCittc2dzdHIgIsPstbKk6KahOiAiCisKKyM6IHZlcnNpb24uYzo5NDAKK21zZ2lkICIgIERFQlVHIEJVSUxEIgorbXNnc3RyICIgILCjv/mqqaW7IgorCisjOiB2ZXJzaW9uLmM6OTc2Cittc2dpZCAiVklNIC0gVmkgSU1wcm92ZWQiCittc2dzdHIgIlZJTSAtIFZpIElNcHJvdmVkIgorCisjOiB2ZXJzaW9uLmM6OTc4Cittc2dpZCAidmVyc2lvbiAiCittc2dzdHIgIqqppbsgICAiCisKKyM6IHZlcnNpb24uYzo5NzkKK21zZ2lkICJieSBCcmFtIE1vb2xlbmFhciBldCBhbC4iCittc2dzdHIgIrr7xUCqzDogQnJhbSBNb29sZW5hYXIgZXQgYWwuIgorCisjOiB2ZXJzaW9uLmM6OTgzCittc2dpZCAiVmltIGlzIG9wZW4gc291cmNlIGFuZCBmcmVlbHkgZGlzdHJpYnV0YWJsZSIKK21zZ3N0ciAiVmltIKywpWmm26XRtLKnR6q6tn2p8a3sqWy9WLNuxekiCisKKyM6IHZlcnNpb24uYzo5ODUKK21zZ2lkICJIZWxwIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhISIKK21zZ3N0ciAivdDAsKdVr1GkerlGqrqlabymq8S1oyEiCisKKyM6IHZlcnNpb24uYzo5ODYKK21zZ2lkICJ0eXBlICA6aGVscCBpY2NmPEVudGVyPiAgICAgICBmb3IgaW5mb3JtYXRpb24gIgorbXNnc3RyICK2aaRAqEK7oan6vdC/6aRKICAgICAgICAgIDpoZWxwIGljY2Y8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6OTg4Cittc2dpZCAidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIKK21zZ3N0ciAirW7C97Z9vdC/6aRKICAgICAgICAgICAgICAgICAgOnE8RW50ZXI+ICAgICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6OTg5Cittc2dpZCAidHlwZSAgOmhlbHA8RW50ZXI+ICBvciAgPEYxPiAgZm9yIG9uLWxpbmUgaGVscCIKK21zZ3N0ciAivXWkV7uhqfq90L/ppEogICAgICAgICAgICAgICAgOmhlbHA8RW50ZXI+ICAgICAgICAgIgorCisjOiB2ZXJzaW9uLmM6OTkwCittc2dpZCAidHlwZSAgOmhlbHAgdmVyc2lvbjY8RW50ZXI+ICAgZm9yIHZlcnNpb24gaW5mbyIKK21zZ3N0ciAit3OqqaW7uOqwVL3Qv+mkSiAgICAgICAgICAgICAgOmhlbHAgdmVyc2lvbjY8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6OTkzCittc2dpZCAiUnVubmluZyBpbiBWaSBjb21wYXRpYmxlIG1vZGUiCittc2dzdHIgIlZpIKzbrmW80qahIgorCisjOiB2ZXJzaW9uLmM6OTk0Cittc2dpZCAidHlwZSAgOnNldCBub2NwPEVudGVyPiAgICAgICAgZm9yIFZpbSBkZWZhdWx0cyIKK21zZ3N0ciAipnCqR61up7ml/rzSwMC2x7LOIFZpIL3Qv+mkSiA6c2V0IG5vY3A8RW50ZXI+IgorCisjOiB2ZXJzaW9uLmM6OTk1Cittc2dpZCAidHlwZSAgOmhlbHAgY3AtZGVmYXVsdDxFbnRlcj4gZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAipnCqR7vdrW657yBWaSCs265lvNKmoaq6tmmkQKhCu6Gp+r3Qv+mkSiA6aGVscCBjcC1kZWZhdWx0PEVudGVyPiIKKworIzogdmVyc2lvbi5jOjEwMTAKK21zZ2lkICJtZW51ICBIZWxwLT5PcnBoYW5zICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gICAgIgorbXNnc3RyICK2aaRAqEK7oan6vdC/76j6v++z5qq6ILuyp1W7oan6LT6sQLHPqXSo4CIKKworIzogdmVyc2lvbi5jOjEwMTIKK21zZ2lkICJSdW5uaW5nIG1vZGVsZXNzLCB0eXBlZCB0ZXh0IGlzIGluc2VydGVkIgorbXNnc3RyICKw9abmIE1vZGVsZXNzILzSpqGhQb/ppEqquqTlpnK3fKbbsMq0oaRKIgorCisjOiB2ZXJzaW9uLmM6MTAxMworbXNnaWQgIm1lbnUgIEVkaXQtPkdsb2JhbCBTZXR0aW5ncy0+VG9nZ2xlIEluc2VydCBNb2RlICAiCittc2dzdHIgIr/vqPq/77Pmqrqhdb1zv+ihdqF1pf6w7LNdqXehdqF1pMG0q7ShpEq80qahoXYiCisKKyM6IHZlcnNpb24uYzoxMDE0Cittc2dpZCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHR3byBtb2RlcyAgICAgICIKK21zZ3N0ciAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgqOK62LzSpqEgICAgICAgICAgICIKKworIzogdmVyc2lvbi5jOjEwMTgKK21zZ2lkICJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBWaSBDb21wYXRpYmxlIgorbXNnc3RyICK/76j6v++z5qq6oXW9c7/ooXahdaX+sOyzXal3oXahdaTBtKu2x7LOVmms265lvNKmoaF2IgorCisjOiB2ZXJzaW9uLmM6MTAxOQorbXNnaWQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBWaW0gZGVmYXVsdHMgICAiCittc2dzdHIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIKVIsW8gVmltILl3s12tyCAgICAiCisKKyM6IHZlcnNpb24uYzoxMDY1Cittc2dpZCAiV0FSTklORzogV2luZG93cyA5NS85OC9NRSBkZXRlY3RlZCIKK21zZ3N0ciAiqmC3TjogsLu0+qjsIFdpbmRvd3MgOTUvOTgvTUUiCisKKyM6IHZlcnNpb24uYzoxMDY4Cittc2dpZCAidHlwZSAgOmhlbHAgd2luZG93czk1PEVudGVyPiAgZm9yIGluZm8gb24gdGhpcyIKK21zZ3N0ciAipnCqR7vdrW657yBXaW5kb3dzIDk1IKTktKmquqfzpmi46rBUvdC/6aRKIDpoZWxwIHdpbmRvd3M5NTxFbnRlcj4iCisKKyM6IHdpbmRvdy5jOjIwNAorbXNnaWQgIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IgorbXNnc3RyICJFNDQxOiCoU6azuXfE/bX4taEiCisKKyM6IHdpbmRvdy5jOjU3NworbXNnaWQgIkU0NDI6IENhbid0IHNwbGl0IHRvcGxlZnQgYW5kIGJvdHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkU0NDI6IKSjr+CmUK7JpMCzzrX4taGssKWqpFepTaVrpFWopCIKKworIzogd2luZG93LmM6MTMzNgorbXNnaWQgIkU0NDM6IENhbm5vdCByb3RhdGUgd2hlbiBhbm90aGVyIHdpbmRvdyBpcyBzcGxpdCIKK21zZ3N0ciAiRTQ0MzogprOo5KWmpMCzzrX4taGuybVMqmux28LgIgorCisjOiB3aW5kb3cuYzoxODI3Cittc2dpZCAiRTQ0NDogQ2Fubm90IGNsb3NlIGxhc3Qgd2luZG93IgorbXNnc3RyICJFNDQ0OiCko6/gw/azrLPMq+GkQK3Ttfi1oSIKKworIzogd2luZG93LmM6MjU1NworbXNnaWQgIkFscmVhZHkgb25seSBvbmUgd2luZG93IgorbXNnc3RyICKkd7hnpXWz0aRArdO1+LWhpEYiCisKKyM6IHdpbmRvdy5jOjI2MDQKK21zZ2lkICJFNDQ1OiBPdGhlciB3aW5kb3cgY29udGFpbnMgY2hhbmdlcyIKK21zZ3N0ciAiRTQ0NTogqOSlprX4taGms6fzsMq46q7GIgorCisjOiB3aW5kb3cuYzo0NDQ5Cittc2dpZCAiRTQ0NjogTm8gZmlsZSBuYW1lIHVuZGVyIGN1cnNvciIKK21zZ3N0ciAiRTQ0NjogtOW80LNCqFOms8DJplciCisKKyM6IHdpbmRvdy5jOjQ1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ0NzogQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiBpbiBwYXRoIgorbXNnc3RyICJFNDQ3OiCmYrj0rnykpKfkpKOo7MDJrtcgXCIlc1wiIgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjU4NgorbXNnaWQgIkVkaXQgd2l0aCAmbXVsdGlwbGUgVmltcyIKK21zZ3N0ciAiqM+lzqZordMgVmltIHNlc3Npb24gvXO/6CgmTSkiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NTkyCittc2dpZCAiRWRpdCB3aXRoIHNpbmdsZSAmVmltIgorbXNnc3RyICKldajPpc6mUKRArdMgVmltIHNlc3Npb24gvXO/6CgmVikiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NjAxCittc2dpZCAiJkRpZmYgd2l0aCBWaW0iCittc2dzdHIgIqjPpc4gVmltIKjTpPG4+ygmRGlmZikiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NjE0Cittc2dpZCAiRWRpdCB3aXRoICZWaW0iCittc2dzdHIgIqjPpc4gVmltIL1zv+imucDJKCZWKSIKKworIy4gTm93IGNvbmNhdGVuYXRlCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjYzNgorbXNnaWQgIkVkaXQgd2l0aCBleGlzdGluZyBWaW0gLSAmIgorbXNnc3RyICKoz6XOsPWm5qSkqrogVmltIHNlc3Npb24gvXO/6CAtICYiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6NzQ5Cittc2dpZCAiRWRpdHMgdGhlIHNlbGVjdGVkIGZpbGUocykgd2l0aCBWaW0iCittc2dzdHIgIqjPpc4gVmltIL1zv+ikd7/vqPqqusDJrtciCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg4IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTY5Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcHJvY2VzczogQ2hlY2sgaWYgZ3ZpbSBpcyBpbiB5b3VyIHBhdGghIgorbXNnc3RyICK1TKprsPWm5rV7pqE6IL3QwMusZCBndmltIKazqFOms6Zip0GquiBQQVRIIMXcvMa4zCEiCisKKyM6IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6ODg5IC4uL0d2aW1FeHQvZ3ZpbWV4dC5jcHA6OTAzCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjk3MAorbXNnaWQgImd2aW1leHQuZGxsIGVycm9yIgorbXNnc3RyICJndmltZXh0LmRsbCC/+bt+IgorCisjOiAuLi9HdmltRXh0L2d2aW1leHQuY3BwOjkwMgorbXNnaWQgIlBhdGggbGVuZ3RoIHRvbyBsb25nISIKK21zZ3N0ciAiuPSufKr4q9ek06r4ISIKKworIzogZ2xvYmFscy5oOjk5MAorbXNnaWQgIi0tTm8gbGluZXMgaW4gYnVmZmVyLS0iCittc2dzdHIgIi0tvXe9xLDPtUy46q7GLS0iCisKKyMuCisjLiAqIFRoZSBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzaGFyZWQgYXJlIGluY2x1ZGVkIGhlcmUuCisjLiAqIEV4Y2x1ZGVkIGFyZSBlcnJvcnMgdGhhdCBhcmUgb25seSB1c2VkIG9uY2UgYW5kIGRlYnVnZ2luZyBtZXNzYWdlcy4KKyMuCisjOiBnbG9iYWxzLmg6MTE0OQorbXNnaWQgIkU0NzA6IENvbW1hbmQgYWJvcnRlZCIKK21zZ3N0ciAiRTQ3MDogqVKlT7NRsWqo7qSkwl+w9abmIgorCisjOiBnbG9iYWxzLmg6MTE1MAorbXNnaWQgIkU0NzE6IEFyZ3VtZW50IHJlcXVpcmVkIgorbXNnc3RyICJFNDcxOiC73a1uq/ylT7DRvMYiCisKKyM6IGdsb2JhbHMuaDoxMTUxCittc2dpZCAiRTEwOiBcXCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgLywgPyBvciAmIgorbXNnc3RyICJFMTA6IFxcIKvhrbHAs7jTprMgLyA/IKnOICYiCisKKyM6IGdsb2JhbHMuaDoxMTUzCittc2dpZCAiRTExOiBJbnZhbGlkIGluIGNvbW1hbmQtbGluZSB3aW5kb3c7IDxDUj4gZXhlY3V0ZXMsIENUUkwtQyBxdWl0cyIKK21zZ3N0ciAiRTExOiCko6/gpmKpUqVPpkO1+LWhpKSoz6XOoUM8Q1I+sPWm5qFBQ1RSTC1DIML3tn0iCisKKyM6IGdsb2JhbHMuaDoxMTU1Cittc2dpZCAiRTEyOiBDb21tYW5kIG5vdCBhbGxvd2VkIGZyb20gZXhyYy92aW1yYyBpbiBjdXJyZW50IGRpciBvciB0YWcgc2VhcmNoIgorbXNnc3RyICJFMTI6IGV4cmMvdmltcmMguMyquqv8pU+1TKprsPWm5iIKKworIzogZ2xvYmFscy5oOjExNTcKK21zZ2lkICJFMTcxOiBNaXNzaW5nIDplbmRpZiIKK21zZ3N0ciAiRTE3MTogr8qk1iA6ZW5kaWYiCisKKyM6IGdsb2JhbHMuaDoxMTU4Cittc2dpZCAiRTYwMDogTWlzc2luZyA6ZW5kdHJ5IgorbXNnc3RyICJFNjAwOiCvyqTWIDplbmR0cnkiCisKKyM6IGdsb2JhbHMuaDoxMTU5Cittc2dpZCAiRTE3MDogTWlzc2luZyA6ZW5kd2hpbGUiCittc2dzdHIgIkUxNzA6IK/KpNYgOmVuZHdoaWxlIgorCisjOiBnbG9iYWxzLmg6MTE2MAorbXNnaWQgIkU1ODg6IDplbmR3aGlsZSB3aXRob3V0IDp3aGlsZSIKK21zZ3N0ciAiRTU4ODogOmVuZHdoaWxlIK/KpNa578CzqrogOndoaWxlIgorCisjOiBnbG9iYWxzLmg6MTE2MgorbXNnaWQgIkUxMzogRmlsZSBleGlzdHMgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTEzOiDAya7XpHe4Z6ZzpmIgKKVppc4gISCxaqjuqPqlTikiCisKKyM6IGdsb2JhbHMuaDoxMTYzCittc2dpZCAiRTQ3MjogQ29tbWFuZCBmYWlsZWQiCittc2dzdHIgIkU0NzI6IKlSpU+w9abmpaKx0SIKKworIzogZ2xvYmFscy5oOjExNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNDogVW5rbm93biBmb250c2V0OiAlcyIKK21zZ3N0ciAiRTIzNDogpKOlv71UqrqmcqS4trAgKEZvbnRzZXQpOiAlcyIKKworIzogZ2xvYmFscy5oOjExNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTIzNTogVW5rbm93biBmb250OiAlcyIKK21zZ3N0ciAipKOlv71Uqrqmcqusple62TogJXMiCisKKyM6IGdsb2JhbHMuaDoxMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkUyMzY6IEZvbnQgXCIlc1wiIGlzIG5vdCBmaXhlZC13aWR0aCIKK21zZ3N0ciAiRTIzNjogXCIlc1wiIKSjrE+pVKl3vGWr16Zyq6wiCisKKyM6IGdsb2JhbHMuaDoxMTc0Cittc2dpZCAiRTQ3MzogSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIkU0NzM6IKS6s6G/+bt+IgorCisjOiBnbG9iYWxzLmg6MTE3NQorbXNnaWQgIkludGVycnVwdGVkIgorbXNnc3RyICKkd6Skwl8iCisKKyM6IGdsb2JhbHMuaDoxMTc2Cittc2dpZCAiRTE0OiBJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIkUxNDogpKOlv71Uqrqm7Kd9IgorCisjOiBnbG9iYWxzLmg6MTE3NworbXNnaWQgIkU0NzQ6IEludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkU0NzQ6IKSjpb+9VKq6sNG8xiIKKworIzogZ2xvYmFscy5oOjExNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ3NTogSW52YWxpZCBhcmd1bWVudDogJXMiCittc2dzdHIgIkU0NzU6IKSjpb+9VKq6sNG8xjogJXMiCisKKyM6IGdsb2JhbHMuaDoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkUxNTogSW52YWxpZCBleHByZXNzaW9uOiAlcyIKK21zZ3N0ciAiRTE1OiCko6W/vVSqurlCuuKmoTogJXMiCisKKyM6IGdsb2JhbHMuaDoxMTgyCittc2dpZCAiRTE2OiBJbnZhbGlkIHJhbmdlIgorbXNnc3RyICJFMTY6IKSjpb+9VKq6vWSz8iIKKworIzogZ2xvYmFscy5oOjExODMKK21zZ2lkICJFNDc2OiBJbnZhbGlkIGNvbW1hbmQiCittc2dzdHIgIkU0NzY6IKSjpb+9VKq6qVKlTyIKKworIzogZ2xvYmFscy5oOjExODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTE3OiBcIiVzXCIgaXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIkUxNzogXCIlc1wiIKxPpdi//SIKKworIzogZ2xvYmFscy5oOjExODgKK21zZ2lkICJFMTg6IFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBiZWZvcmUgJz0nIgorbXNnc3RyICJFMTg6ICc9JyCrZa2xpViye6RGv/m7fqq6pnKkuCIKKworIzogZ2xvYmFscy5oOjExOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM2NDogTGlicmFyeSBjYWxsIGZhaWxlZCBmb3IgXCIlcygpXCIiCittc2dzdHIgIkUzNjQ6IKlJpXOo56ahrncgXCIlc1wiKCkgpaKx0SIKKworIzogZ2xvYmFscy5oOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTM3MDogQ291bGQgbm90IGxvYWQgbGlicmFyeSAlcyIKK21zZ3N0ciAiRTM3MDogtUyqa62rt3O4/KRKtXumoa53ICVzIgorCisjOiBnbG9iYWxzLmg6MTE5NworIywgYy1mb3JtYXQKK21zZ2lkICJFNDQ4OiBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5IGZ1bmN0aW9uICVzIgorbXNnc3RyICJFNDQ4OiC1TKpruPykSrV7pqGud6q6qOemoSAlcyIKKworIzogZ2xvYmFscy5oOjExOTkKK21zZ2lkICJFMTk6IE1hcmsgaGFzIGludmFsaWQgbGluZSBudW1iZXIiCittc2dzdHIgIkUxOTogvNCwT6q6pua4ub/5u34iCisKKyM6IGdsb2JhbHMuaDoxMjAwCittc2dpZCAiRTIwOiBNYXJrIG5vdCBzZXQiCittc2dzdHIgIkUyMDogqFOms7NdqXe80LBPIgorCisjOiBnbG9iYWxzLmg6MTIwMQorbXNnaWQgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIKK21zZ3N0ciAiRTIxOiCmXaywICdtb2RpZmlhYmxlJyC/77a1rE/D9rOsqrqhQanSpUiko6/grden7yIKKworIzogZ2xvYmFscy5oOjEyMDIKK21zZ2lkICJFMjI6IFNjcmlwdHMgbmVzdGVkIHRvbyBkZWVwIgorbXNnc3RyICJFMjI6ILFfqqy7vLBqqUmlc6TTpmi8aCIKKworIzogZ2xvYmFscy5oOjEyMDMKK21zZ2lkICJFMjM6IE5vIGFsdGVybmF0ZSBmaWxlIgorbXNnc3RyICJFMjM6IKhTprO0wKVOqrrAya7XIgorCisjOiBnbG9iYWxzLmg6MTIwNAorbXNnaWQgIkUyNDogTm8gc3VjaCBhYmJyZXZpYXRpb24iCittc2dzdHIgIkUyNDogqFOms7NvrdMgYWJicmV2aWF0aW9uILnvwLMiCisKKyM6IGdsb2JhbHMuaDoxMjA1Cittc2dpZCAiRTQ3NzogTm8gISBhbGxvd2VkIgorbXNnc3RyICJFNDc3OiCko6VpqM+lziAnISciCisKKyM6IGdsb2JhbHMuaDoxMjA3Cittc2dpZCAiRTI1OiBHVUkgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSIKK21zZ3N0ciAiRTI1OiCmXaywvXPEtq7JqFOms6VbpEq5z6usrMmtsaq6tXumob1YoUGp0qVItUyqa6jPpc65z6usrMmtsSIKKworIzogZ2xvYmFscy5oOjEyMTAKK21zZ2lkICJFMjY6IEhlYnJldyBjYW5ub3QgYmUgdXNlZDogTm90IGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lXG4iCittc2dzdHIgIkUyNjogpl2ssL1zxLauyahTprOlW6RKIEhlYnJldyCqurV7pqG9WKFBqdKlSLVMqmuoz6XOIEhlYnJld1xuIgorCisjOiBnbG9iYWxzLmg6MTIxMworbXNnaWQgIkUyNzogRmFyc2kgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZVxuIgorbXNnc3RyICJFMjc6IKZdrLC9c8S2rsmoU6azpVukSiBGYXJzaSCqurV7pqG9WKFBqdKlSLVMqmuoz6XOIEZhcnNpXG4iCisKKyM6IGdsb2JhbHMuaDoxMjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkUyODogTm8gc3VjaCBoaWdobGlnaHQgZ3JvdXAgbmFtZTogJXMiCittc2dzdHIgIkUyODogqFOms6ZXrLAgJyVzJyCquiBoaWdobGlnaHQgZ3JvdXAiCisKKyM6IGdsb2JhbHMuaDoxMjE4Cittc2dpZCAiRTI5OiBObyBpbnNlcnRlZCB0ZXh0IHlldCIKK21zZ3N0ciAiRTI5OiDB2ahTprO0oaRKpOWmcrlMIgorCisjOiBnbG9iYWxzLmg6MTIxOQorbXNnaWQgIkUzMDogTm8gcHJldmlvdXMgY29tbWFuZCBsaW5lIgorbXNnc3RyICJFMzA6IKhTprOrZaRAtrWpUqVPIgorCisjOiBnbG9iYWxzLmg6MTIyMAorbXNnaWQgIkUzMTogTm8gc3VjaCBtYXBwaW5nIgorbXNnc3RyICJFMzE6IKhTprOzb63TIG1hcHBpbmcgue/AsyIKKworIzogZ2xvYmFscy5oOjEyMjEKK21zZ2lkICJFNDc5OiBObyBtYXRjaCIKK21zZ3N0ciAiRTQ3OTogp+Sko6jsIgorCisjOiBnbG9iYWxzLmg6MTIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDgwOiBObyBtYXRjaDogJXMiCittc2dzdHIgIkU0ODA6IKfkpKOo7DogJXMiCisKKyM6IGdsb2JhbHMuaDoxMjIzCittc2dpZCAiRTMyOiBObyBmaWxlIG5hbWUiCittc2dzdHIgIkUzMjogqFOms8DJplciCisKKyM6IGdsb2JhbHMuaDoxMjI0Cittc2dpZCAiRTMzOiBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTMzOiCoU6azq2WkQK3Tt2q0TS+o+qVOqrqpUqVPIgorCisjOiBnbG9iYWxzLmg6MTIyNQorbXNnaWQgIkUzNDogTm8gcHJldmlvdXMgY29tbWFuZCIKK21zZ3N0ciAiRTM0OiCoU6azq2WkQK3TqVKlTyIKKworIzogZ2xvYmFscy5oOjEyMjYKK21zZ2lkICJFMzU6IE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiRTM1OiCoU6azq2WkQK3Tt2q0Tav8pU8iCisKKyM6IGdsb2JhbHMuaDoxMjI3Cittc2dpZCAiRTQ4MTogTm8gcmFuZ2UgYWxsb3dlZCIKK21zZ3N0ciAiRTQ4MTogpKOlaajPpc69ZLPyq/ylTyIKKworIzogZ2xvYmFscy5oOjEyMjkKK21zZ2lkICJFMzY6IE5vdCBlbm91Z2ggcm9vbSIKK21zZ3N0ciAiRTM2OiCoU6azqKyw96q6qsW2oSIKKworIzogZ2xvYmFscy5oOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTI0Nzogbm8gcmVnaXN0ZXJlZCBzZXJ2ZXIgbmFtZWQgXCIlc1wiIgorbXNnc3RyICJFMjQ3OiCoU6aztfmlVaywIFwiJXNcIiCquqb4qkG+uSIKKworIzogZ2xvYmFscy5oOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRTQ4MjogQ2FuJ3QgY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgIkU0ODI6IKSjr+Cr2KXfwMmu1yAlcyIKKworIzogZ2xvYmFscy5oOjEyMzUKK21zZ2lkICJFNDgzOiBDYW4ndCBnZXQgdGVtcCBmaWxlIG5hbWUiCittc2dzdHIgIkU0ODM6ILVMqmuxb6q+vMimc8DJplciCisKKyM6IGdsb2JhbHMuaDoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0ODQ6IENhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiRTQ4NDogtUyqa7Z9sdLAya7XICVzIgorCisjOiBnbG9iYWxzLmg6MTIzNworIywgYy1mb3JtYXQKK21zZ2lkICJFNDg1OiBDYW4ndCByZWFkIGZpbGUgJXMiCittc2dzdHIgIkU0ODU6ILVMqmvFqqj6wMmu1yAlcyIKKworIzogZ2xvYmFscy5oOjEyMzgKK21zZ2lkICJFMzc6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlIChhZGQgISB0byBvdmVycmlkZSkiCittc2dzdHIgIkUzNzogpHen86fvuUzAya7Xpv2pfKW8pnPAySAopWmlziAhILFqqO6w9abmKSIKKworIzogZ2xvYmFscy5oOjEyMzkKK21zZ2lkICJFMzg6IE51bGwgYXJndW1lbnQiCittc2dzdHIgIkUzODogqsWquiAoTnVsbCkgsNG8xiIKKworIzogZ2xvYmFscy5oOjEyNDEKK21zZ2lkICJFMzk6IE51bWJlciBleHBlY3RlZCIKK21zZ3N0ciAiRTM5OiDAs7jTrW6ms7zGpnIiCisKKyM6IGdsb2JhbHMuaDoxMjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkU0MDogQ2FuJ3Qgb3BlbiBlcnJvcmZpbGUgJXMiCittc2dzdHIgIkU0MDogtUyqa7Z9sdK/+bt+wMmu1yAlcyIKKworIzogZ2xvYmFscy5oOjEyNDcKK21zZ2lkICJFMjMzOiBjYW5ub3Qgb3BlbiBkaXNwbGF5IgorbXNnc3RyICJFMjMzOiA8pKOv4LZ9sdIgWCBTZXJ2ZXIgRElTUExBWT4iCisKKyM6IGdsb2JhbHMuaDoxMjQ5Cittc2dpZCAiRTQxOiBPdXQgb2YgbWVtb3J5ISIKK21zZ3N0ciAiRTQxOiCwT77Qxemko6isISIKKworIzogZ2xvYmFscy5oOjEyNTEKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZCIKK21zZ3N0ciAip+Sko6jsIgorCisjOiBnbG9iYWxzLmg6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJFNDg2OiBQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIkU0ODY6IKfkpKOo7CAlcyIKKworIzogZ2xvYmFscy5oOjEyNTQKK21zZ2lkICJFNDg3OiBBcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlIgorbXNnc3RyICJFNDg3OiCw0bzGwLO406xPpb+8xiIKKworIzogZ2xvYmFscy5oOjEyNTYKK21zZ2lkICJFNDU5OiBDYW5ub3QgZ28gYmFjayB0byBwcmV2aW91cyBkaXJlY3RvcnkiCittc2dzdHIgIkU0NTk6ILVMqmumXqjsq2WkQK3Tpdi//SIKKworIzogZ2xvYmFscy5oOjEyNjAKK21zZ2lkICJFNDI6IE5vIEVycm9ycyIKK21zZ3N0ciAiRTQyOiCoU6azv/m7fiIKKworIzogZ2xvYmFscy5oOjEyNjIKK21zZ2lkICJFNDM6IERhbWFnZWQgbWF0Y2ggc3RyaW5nIgorbXNnc3RyICJFNDM6ILLFplimcqbqprOw3cNEIgorCisjOiBnbG9iYWxzLmg6MTI2MworbXNnaWQgIkU0NDogQ29ycnVwdGVkIHJlZ2V4cCBwcm9ncmFtIgorbXNnc3RyICJFNDQ6IHJlZ2V4cCCms7Ddw0QiCisKKyM6IGdsb2JhbHMuaDoxMjY0Cittc2dpZCAiRTQ1OiAncmVhZG9ubHknIG9wdGlvbiBpcyBzZXQgKGFkZCAhIHRvIG92ZXJyaWRlKSIKK21zZ3N0ciAiRTQ1OiCms7NdqXcgJ3JlYWRvbmx5JyC/77a1KLDfxaopICilaaXOICEgsWqo7rD1puYpIgorCisjOiBnbG9iYWxzLmg6MTI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFNDY6IENhbm5vdCBzZXQgcmVhZC1vbmx5IHZhcmlhYmxlIFwiJXNcIiIKK21zZ3N0ciAiRTQ2OiC1TKprs12pd7DfxarF3LzGIFwiJXNcIiIKKworIzogZ2xvYmFscy5oOjEyNjkKK21zZ2lkICJFNDc6IEVycm9yIHdoaWxlIHJlYWRpbmcgZXJyb3JmaWxlIgorbXNnc3RyICJFNDc6IMWqqPq/+bt+wMmu16WisdEiCisKKyM6IGdsb2JhbHMuaDoxMjcyCittc2dpZCAiRTQ4OiBOb3QgYWxsb3dlZCBpbiBzYW5kYm94IgorbXNnc3RyICJFNDg6IKSjr+CmYiBzYW5kYm94ILjMpViyeyIKKworIzogZ2xvYmFscy5oOjEyNzQKK21zZ2lkICJFNTIzOiBOb3QgYWxsb3dlZCBoZXJlIgorbXNnc3RyICJFNTIzOiCzb7jMpKOlaajPpc4iCisKKyM6IGdsb2JhbHMuaDoxMjc3Cittc2dpZCAiRTM1OTogU2NyZWVuIG1vZGUgc2V0dGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFMzU5OiCko6TktKmzXal3v8O59bzSpqEiCisKKyM6IGdsb2JhbHMuaDoxMjc5Cittc2dpZCAiRTQ5OiBJbnZhbGlkIHNjcm9sbCBzaXplIgorbXNnc3RyICJFNDk6IL/5u36qurGysMqkaqRwIgorCisjOiBnbG9iYWxzLmg6MTI4MAorbXNnaWQgIkU5MTogJ3NoZWxsJyBvcHRpb24gaXMgZW1wdHkiCittc2dzdHIgIkU5MTogJ0U3MTogv++2tSAnc2hlbGwnIKW8s12pdyIKKworIzogZ2xvYmFscy5oOjEyODIKK21zZ2lkICJFMjU1OiBDb3VsZG4ndCByZWFkIGluIHNpZ24gZGF0YSEiCittc2dzdHIgIkUyNTU6ILVMqmvFqqj6IHNpZ24gZGF0YSEiCisKKyM6IGdsb2JhbHMuaDoxMjg0Cittc2dpZCAiRTcyOiBDbG9zZSBlcnJvciBvbiBzd2FwIGZpbGUiCittc2dzdHIgIkU3MjogvMimc8DJw/azrL/5u34iCisKKyM6IGdsb2JhbHMuaDoxMjg1Cittc2dpZCAiRTczOiB0YWcgc3RhY2sgZW1wdHkiCittc2dzdHIgIkU3MzogvNDF0rDvxXykd6rFIgorCisjOiBnbG9iYWxzLmg6MTI4NgorbXNnaWQgIkU3NDogQ29tbWFuZCB0b28gY29tcGxleCIKK21zZ3N0ciAiRTc0OiCpUqVPpNO9xsL4IgorCisjOiBnbG9iYWxzLmg6MTI4NworbXNnaWQgIkU3NTogTmFtZSB0b28gbG9uZyIKK21zZ3N0ciAiRTc1OiCmV6ZypNOq+CIKKworIzogZ2xvYmFscy5oOjEyODgKK21zZ2lkICJFNzY6IFRvbyBtYW55IFsiCittc2dzdHIgIkU3NjogpNOmaCBbIgorCisjOiBnbG9iYWxzLmg6MTI4OQorbXNnaWQgIkU3NzogVG9vIG1hbnkgZmlsZSBuYW1lcyIKK21zZ3N0ciAiRTc3OiCk06ZowMmmVyIKKworIzogZ2xvYmFscy5oOjEyOTAKK21zZ2lkICJFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzIgorbXNnc3RyICJFNDg4OiCnQb/ppEqkRqZovmyquqZypLgiCisKKyM6IGdsb2JhbHMuaDoxMjkxCittc2dpZCAiRTc4OiBVbmtub3duIG1hcmsiCittc2dzdHIgIkU3ODogtUyqa7/sw9GqurzQsE8iCisKKyM6IGdsb2JhbHMuaDoxMjkyCittc2dpZCAiRTc5OiBDYW5ub3QgZXhwYW5kIHdpbGRjYXJkcyIKK21zZ3N0ciAiRTc5OiC1TKprrmm2fbhVpc6mcqS4IgorCisjOiBnbG9iYWxzLmg6MTI5NAorbXNnaWQgIkU1OTE6ICd3aW5oZWlnaHQnIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gJ3dpbm1pbmhlaWdodCciCittc2dzdHIgIkU1OTE6ICd3aW5oZWlnaHQnIKSjr+Ck8SAnd2lubWluaGVpZ2h0JyCn86TWIgorCisjOiBnbG9iYWxzLmg6MTI5NgorbXNnaWQgIkU1OTI6ICd3aW53aWR0aCcgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAnd2lubWlud2lkdGgnIgorbXNnc3RyICJFNTkyOiAnd2lud2lkdGgnIKSjr+Ck8SAnd2lubWlud2lkdGgnIKfzpNYiCisKKyM6IGdsb2JhbHMuaDoxMjk5Cittc2dpZCAiRTgwOiBFcnJvciB3aGlsZSB3cml0aW5nIgorbXNnc3RyICJFODA6ILxnpEq/+bt+IgorCisjOiBnbG9iYWxzLmg6MTMwMAorbXNnaWQgIlplcm8gY291bnQiCittc2dzdHIgIrzGqOy5cyAoPykiCisKKyM6IGdsb2JhbHMuaDoxMzAyCittc2dpZCAiRTgxOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dCIKK21zZ3N0ciAiRTgxOiA8U0lEPiCko6/gpmIgc2NyaXB0IKW7pOWlfqjPpc4uIgorCisjOiBnbG9iYWxzLmg6MTMwNQorbXNnaWQgIkU0NDk6IEludmFsaWQgZXhwcmVzc2lvbiByZWNlaXZlZCIKK21zZ3N0ciAiRTQ0OTogpqyo7KSjpb+9VKq6uUK64qahIgorCisjOiBnbG9iYWxzLmg6MTMwOAorbXNnaWQgIkU0NjM6IFJlZ2lvbiBpcyBndWFyZGVkLCBjYW5ub3QgbW9kaWZ5IgorbXNnc3RyICJFNDYzOiCwz7Dss1GrT8VAoUG1TKprrden7yIKKworI34gbXNnaWQgImZ1bmN0aW9uICIKKyN+IG1zZ3N0ciAiqOemoSAiCisKKyN+IG1zZ2lkICJSdW4gTWFjcm8iCisjfiBtc2dzdHIgIrD1pualqLawIgorCisjfiBtc2dpZCAiRTIyMTogJ2NvbW1lbnRzdHJpbmcnIGlzIGVtcHR5IgorI34gbXNnc3RyICJFMjIxOiC/77a1ICdjb21tZW50c3RyaW5nJyClvLNdqXciCisKKyN+IG1zZ2lkICJFMjQyOiBDb2xvciBuYW1lIG5vdCByZWNvZ25pemVkOiAlcyIKKyN+IG1zZ3N0ciAiRTI0MjogJXMgrLC1TKprw9GnT6q6w0Om4qZXutkiCisKKyN+IG1zZ2lkICJFMjQyOiBNaXNzaW5nIGNvbG9yOiAlcyIKKyN+IG1zZ3N0ciAiRTI0Mjogp+Sko6jsw0Om4jogJXMiCisKKyN+IG1zZ2lkICJlcnJvciByZWFkaW5nIGNzY29wZSBjb25uZWN0aW9uICVkIgorI34gbXNnc3RyICLFqqj6IGNzY29wZSCzc711ICVkIK7Jv/m7fiIKKworI34gbXNnaWQgIkUyNDk6IGNvdWxkbid0IHJlYWQgVklNIGluc3RhbmNlIHJlZ2lzdHJ5IHByb3BlcnR5IgorI34gbXNnc3RyICJFMjQ5OiC1TKprxaqo+iBWSU0gqrogcmVnaXN0cnkgs12pd7a1IgorCisjfiBtc2dpZCAiQ2FuJ3Qgb3BlbiBmaWxlICVzIgorI34gbXNnc3RyICK1TKprtn2x0sDJrtcgJXMiCisKKyN+IG1zZ2lkICJVbmFibGUgdG8gc2VuZCByZXBseSIKKyN+IG1zZ3N0ciAitUyqa7bHsGWmXsCzsFSupyIKKworI34gbXNnaWQgIkUyNDE6IFVuYWJsZSB0byBzZW5kIHRvIFZpbSBzZXJ2ZXIiCisjfiBtc2dzdHIgIkUyNDE6ILVMqmu2x7BlqOwgVmltIKb4qkG+uSIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJTZW5kIGZhaWxlZC4gTm8gY29tbWFuZCBzZXJ2ZXIgcHJlc2VudCA/XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICK2x7BlpaKx0aFDqFOms6lSpU+m+KpBvrmmc6ZiID9cbiIKKworI34gbXNnaWQgIlBDICgzMiBiaXRzIFZpbSkiCisjfiBtc2dzdHIgIlBDICgzMiCm7KS4IFZpbSkiCisKKyN+IG1zZ2lkICJQQyAoMTYgYml0cyBWaW0pIgorI34gbXNnc3RyICJQQyAoMTYgpuykuCBWaW0pIgorCisjfiBtc2dpZCAiRTM2MjogVW5zdXBwb3J0ZWQgc2NyZWVuIG1vZGUiCisjfiBtc2dzdHIgIkUzNjI6IL/DufW80qahpKOk5LSpIgorCisjfiBtc2dpZCAiTm8gc2VydmVycyBmb3VuZCBmb3IgdGhpcyBkaXNwbGF5IgorI34gbXNnc3RyICKmuURpc3BsYXmoU6azpviqQb65KFNlcnZlcnMpIgorCisjfiBtc2dpZCAiRTI1ODogbm8gbWF0Y2hlcyBmb3VuZCBpbiBjc2NvcGUgY29ubmVjdGlvbnMiCisjfiBtc2dzdHIgIkUyNTg6IGNzY29wZSCzc711p+Sko6jsssWmWKq6IgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIk1hY09TIENhcmJvbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIk1hY09TIENhcmJvbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJNYWNPUyA4IgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiTWFjT1MgOCIKKworI34gbXNnaWQgIlJldHJpZXZlIG5leHQgc3ltYm9sIgorI34gbXNnc3RyICLFqqj6OiCxcaRVrdMgc3ltYm9sIgorCisjfiBtc2dpZCAiLS0gU05pRkYrIGNvbW1hbmRzIC0tIgorI34gbXNnc3RyICItLSBTTmlGRisgqVKlTyAtLSIKKworI34gbXNnaWQgIkUyNzc6IFVucmVjb2duaXplZCBzbmlmZiByZXF1ZXN0IFslc10iCisjfiBtc2dzdHIgIkUyNzc6ILVMqmu/68PRIHNuaWZmIKlSpU8gWyVzXSIKZGlmZiAtLWdpdCBhL3NyYy9wcm90by5oIGIvc3JjL3Byb3RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg5Yzg0NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by5oCkBAIC0wLDAgKzEsMjUxIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisvKgorICogcHJvdG8uaDogaW5jbHVkZSB0aGUgKGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkKSBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KKworLyoKKyAqIERvbid0IGluY2x1ZGUgdGhlc2Ugd2hpbGUgZ2VuZXJhdGluZyBwcm90b3R5cGVzLiAgUHJldmVudHMgcHJvYmxlbXMgd2hlbgorICogZmlsZXMgYXJlIG1pc3NpbmcuCisgKi8KKyNpZiAhZGVmaW5lZChQUk9UTykgJiYgIWRlZmluZWQoTk9QUk9UTykKKworLyoKKyAqIE1hY2hpbmUtZGVwZW5kZW50IHJvdXRpbmVzLgorICovCisvKiBhdm9pZCBlcnJvcnMgaW4gZnVuY3Rpb24gcHJvdG90eXBlcyAqLworIyBpZiAhZGVmaW5lZChGRUFUX1gxMSkgJiYgIWRlZmluZWQoRkVBVF9HVUlfR1RLKQorIyAgZGVmaW5lIERpc3BsYXkgaW50CisjICBkZWZpbmUgV2lkZ2V0IGludAorIyBlbmRpZgorIyBpZm5kZWYgRkVBVF9HVUlfR1RLCisjICBkZWZpbmUgR2RrRXZlbnQgaW50CisjICBkZWZpbmUgR2RrRXZlbnRLZXkgaW50CisjIGVuZGlmCisjIGlmbmRlZiBGRUFUX1gxMQorIyAgZGVmaW5lIFhJbWFnZSBpbnQKKyMgZW5kaWYKKworIyBpZmRlZiBBTUlHQQorIyAgaW5jbHVkZSAib3NfYW1pZ2EucHJvIgorIyBlbmRpZgorIyBpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoX19FTVhfXykgfHwgZGVmaW5lZChWTVMpCisjICBpbmNsdWRlICJvc191bml4LnBybyIKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU4xNikKKyMgIGluY2x1ZGUgIm9zX21zZG9zLnBybyIKKyMgZW5kaWYKKyMgaWZkZWYgV0lOMTYKKyAgIHR5cGVkZWYgTFBTVFIgTFBXU1RSOworICAgdHlwZWRlZiBMUENTVFIgTFBDV1NUUjsKKyAgIHR5cGVkZWYgaW50IExQQk9PTDsKKyMgIGluY2x1ZGUgIm9zX3dpbjE2LnBybyIKKyMgIGluY2x1ZGUgIm9zX21zd2luLnBybyIKKyMgZW5kaWYKKyMgaWZkZWYgV0lOMzI2NAorIyAgaW5jbHVkZSAib3Nfd2luMzIucHJvIgorIyAgaW5jbHVkZSAib3NfbXN3aW4ucHJvIgorIyAgaWYgKGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKSkgXAorCXx8IChkZWZpbmVkKF9fQk9STEFORENfXykgJiYgX19CT1JMQU5EQ19fIDwgMHg1MDIpCitleHRlcm4gaW50IF9zdHJpY29sbCBfX0FSR1MoKGNoYXIgKmEsIGNoYXIgKmIpKTsKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIFZNUworIyAgaW5jbHVkZSAib3Nfdm1zLnBybyIKKyMgZW5kaWYKKyMgaWZkZWYgX19CRU9TX18KKyMgIGluY2x1ZGUgIm9zX2Jlb3MucHJvIgorIyBlbmRpZgorIyBpZmRlZiBNQUNPUworIyAgaW5jbHVkZSAib3NfbWFjLnBybyIKKyMgZW5kaWYKKyMgaWZkZWYgUklTQ09TCisjICBpbmNsdWRlICJvc19yaXNjb3MucHJvIgorIyBlbmRpZgorIyBpZmRlZiBfX1FOWF9fCisjICBpbmNsdWRlICJvc19xbngucHJvIgorIyBlbmRpZgorCisjIGluY2x1ZGUgImJ1ZmZlci5wcm8iCisjIGluY2x1ZGUgImNoYXJzZXQucHJvIgorIyBpZmRlZiBGRUFUX0NTQ09QRQorIyAgaW5jbHVkZSAiaWZfY3Njb3BlLnBybyIKKyMgZW5kaWYKKyMgaW5jbHVkZSAiZGlmZi5wcm8iCisjIGluY2x1ZGUgImRpZ3JhcGgucHJvIgorIyBpbmNsdWRlICJlZGl0LnBybyIKKyMgaW5jbHVkZSAiZXZhbC5wcm8iCisjIGluY2x1ZGUgImV4X2NtZHMucHJvIgorIyBpbmNsdWRlICJleF9jbWRzMi5wcm8iCisjIGluY2x1ZGUgImV4X2RvY21kLnBybyIKKyMgaW5jbHVkZSAiZXhfZXZhbC5wcm8iCisjIGluY2x1ZGUgImV4X2dldGxuLnBybyIKKyMgaW5jbHVkZSAiZmlsZWlvLnBybyIKKyMgaW5jbHVkZSAiZm9sZC5wcm8iCisjIGluY2x1ZGUgImdldGNoYXIucHJvIgorIyBpZmRlZiBGRUFUX0hBTkdVTElOCisjICBpbmNsdWRlICJoYW5ndWxpbi5wcm8iCisjIGVuZGlmCisjIGluY2x1ZGUgIm1haW4ucHJvIgorIyBpbmNsdWRlICJtYXJrLnBybyIKKyMgaWYgIWRlZmluZWQgTUVTU0FHRV9GSUxFIHx8IGRlZmluZWQoSEFWRV9TVERBUkdfSCkKKyAgICAvKiBUaGVzZSBwcm90b3R5cGVzIGNhbm5vdCBiZSBwcm9kdWNlZCBhdXRvbWF0aWNhbGx5IGFuZCBjb25mbGljdCB3aXRoCisgICAgICogdGhlIG9sZC1zdHlsZSBwcm90b3R5cGVzIGluIG1lc3NhZ2UuYy4gKi8KK2ludAorI2lmZGVmIF9fQk9STEFORENfXworX1JUTEVOVFJZRgorI2VuZGlmCitzbXNnIF9fQVJHUygoY2hhcl91ICosIC4uLikpOworaW50CisjaWZkZWYgX19CT1JMQU5EQ19fCitfUlRMRU5UUllGCisjZW5kaWYKK3Ntc2dfYXR0ciBfX0FSR1MoKGludCwgY2hhcl91ICosIC4uLikpOworIyBlbmRpZgorIyBpbmNsdWRlICJtZW1maWxlLnBybyIKKyMgaW5jbHVkZSAibWVtbGluZS5wcm8iCisjIGlmZGVmIEZFQVRfTUVOVQorIyAgaW5jbHVkZSAibWVudS5wcm8iCisjIGVuZGlmCisjIGluY2x1ZGUgIm1lc3NhZ2UucHJvIgorIyBpbmNsdWRlICJtaXNjMS5wcm8iCisjIGluY2x1ZGUgIm1pc2MyLnBybyIKKyNpZm5kZWYgSEFWRV9TVFJQQlJLCSAgICAvKiBub3QgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBtaXNjMi5jICovCitjaGFyX3UgKnZpbV9zdHJwYnJrIF9fQVJHUygoY2hhcl91ICpzLCBjaGFyX3UgKmNoYXJzZXQpKTsKKyNlbmRpZgorI2lmbmRlZiBIQVZFX1FTT1JUCisvKiBVc2Ugb3VyIG93biBxc29ydCgpLCBkb24ndCBkZWZpbmUgdGhlIHByb3RvdHlwZSB3aGVuIG5vdCB1c2VkLiAqLwordm9pZCBxc29ydCBfX0FSR1MoKHZvaWQgKmJhc2UsIHNpemVfdCBlbG1fY291bnQsIHNpemVfdCBlbG1fc2l6ZSwgaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpKTsKKyNlbmRpZgorIyBpbmNsdWRlICJtb3ZlLnBybyIKKyMgaWYgZGVmaW5lZChGRUFUX01CWVRFKSB8fCBkZWZpbmVkKEZFQVRfWElNKSB8fCBkZWZpbmVkKEZFQVRfS0VZTUFQKSBcCisJfHwgZGVmaW5lZChGRUFUX1BPU1RTQ1JJUFQpCisjICBpbmNsdWRlICJtYnl0ZS5wcm8iCisjIGVuZGlmCisjIGluY2x1ZGUgIm5vcm1hbC5wcm8iCisjIGluY2x1ZGUgIm9wcy5wcm8iCisjIGluY2x1ZGUgIm9wdGlvbi5wcm8iCisjIGluY2x1ZGUgInF1aWNrZml4LnBybyIKKyMgaW5jbHVkZSAicmVnZXhwLnBybyIKKyMgaW5jbHVkZSAic2NyZWVuLnBybyIKKyMgaW5jbHVkZSAic2VhcmNoLnBybyIKKyMgaW5jbHVkZSAic3ludGF4LnBybyIKKyMgaW5jbHVkZSAidGFnLnBybyIKKyMgaW5jbHVkZSAidGVybS5wcm8iCisjIGlmIGRlZmluZWQoSEFWRV9UR0VURU5UKSAmJiAoZGVmaW5lZChBTUlHQSkgfHwgZGVmaW5lZChWTVMpKQorIyAgaW5jbHVkZSAidGVybWxpYi5wcm8iCisjIGVuZGlmCisjIGluY2x1ZGUgInVpLnBybyIKKyMgaW5jbHVkZSAidW5kby5wcm8iCisjIGluY2x1ZGUgInZlcnNpb24ucHJvIgorIyBpbmNsdWRlICJ3aW5kb3cucHJvIgorCisjIGlmZGVmIEZFQVRfUFlUSE9OCisjICBpbmNsdWRlICJpZl9weXRob24ucHJvIgorIyBlbmRpZgorCisjIGlmZGVmIEZFQVRfVENMCisjICBpbmNsdWRlICJpZl90Y2wucHJvIgorIyBlbmRpZgorCisjIGlmZGVmIEZFQVRfUlVCWQorIyAgaW5jbHVkZSAiaWZfcnVieS5wcm8iCisjIGVuZGlmCisKKyMgaWZkZWYgRkVBVF9HVUkKKyMgIGluY2x1ZGUgImd1aS5wcm8iCisjICBpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoTUFDT1MpCisjICAgaW5jbHVkZSAicHR5LnBybyIKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZChIQVZFX1NFVEVOVikgJiYgIWRlZmluZWQoSEFWRV9QVVRFTlYpICYmICFkZWZpbmVkKFZNUykKK2V4dGVybiBpbnQgcHV0ZW52IF9fQVJHUygoY29uc3QgY2hhciAqc3RyaW5nKSk7CQkvKiBmcm9tIHB0eS5jICovCisjICAgaWZkZWYgVVNFX1ZJTVBUWV9HRVRFTlYKK2V4dGVybiBjaGFyX3UgKnZpbXB0eV9nZXRlbnYgX19BUkdTKChjb25zdCBjaGFyX3UgKnN0cmluZykpOwkvKiBmcm9tIHB0eS5jICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZmRlZiBGRUFUX0dVSV9XMTYKKyMgICBpbmNsdWRlICJndWlfdzE2LnBybyIKKyMgIGVuZGlmCisgICAgLyogVWdseSBzb2x1dGlvbiBmb3IgIkJhbGxvb25FdmFsIiBub3QgYmVpbmcgZGVmaW5lZCB3aGlsZSBpdCdzIHVzZWQgaW4KKyAgICAgKiB0aGUgcHJvdG90eXBlcy4gKi8KKyMgIGlmbmRlZiBGRUFUX0JFVkFMCisjICAgZGVmaW5lIEJhbGxvb25FdmFsIGludAorIyAgZW5kaWYKKyMgIGlmZGVmIEZFQVRfR1VJX1czMgorIyAgIGluY2x1ZGUgImd1aV93MzIucHJvIgorIyAgZW5kaWYKKyMgIGlmZGVmIEZFQVRfR1VJX0dUSworIyAgIGluY2x1ZGUgImd1aV9ndGsucHJvIgorIyAgIGluY2x1ZGUgImd1aV9ndGtfeDExLnBybyIKKyMgIGVuZGlmCisjICBpZmRlZiBGRUFUX0dVSV9NT1RJRgorIyAgIGluY2x1ZGUgImd1aV9tb3RpZi5wcm8iCisjICBlbmRpZgorIyAgaWZkZWYgRkVBVF9HVUlfQVRIRU5BCisjICAgaW5jbHVkZSAiZ3VpX2F0aGVuYS5wcm8iCisjICAgaWZkZWYgRkVBVF9CUk9XU0UKK2V4dGVybiBjaGFyICp2aW1fU2VsRmlsZSBfX0FSR1MoKFdpZGdldCB0b3BsZXZlbCwgY2hhciAqcHJvbXB0LCBjaGFyICppbml0X3BhdGgsIGludCAoKnNob3dfZW50cnkpKCksIGludCB4LCBpbnQgeSwgZ3VpY29sb3JfVCBmZywgZ3VpY29sb3JfVCBiZywgZ3VpY29sb3JfVCBzY3JvbGxfZmcsIGd1aWNvbG9yX1Qgc2Nyb2xsX2JnKSk7CisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZmRlZiBGRUFUX0dVSV9CRU9TCisjICAgaW5jbHVkZSAiZ3VpX2Jlb3MucHJvIgorIyAgZW5kaWYKKyMgIGlmZGVmIEZFQVRfR1VJX01BQworIyAgIGluY2x1ZGUgImd1aV9tYWMucHJvIgorIyAgZW5kaWYKKyMgIGlmZGVmIEZFQVRfR1VJX1gxMQorIyAgIGluY2x1ZGUgImd1aV94MTEucHJvIgorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoRkVBVF9HVUlfQU1JR0EpCisjICAgIGluY2x1ZGUgImd1aV9hbWlnYS5wcm8iCisjICBlbmRpZgorIyAgaWZkZWYgUklTQ09TCisjICAgaW5jbHVkZSAiZ3VpX3Jpc2Nvcy5wcm8iCisjICBlbmRpZgorIyAgaWZkZWYgRkVBVF9HVUlfUEhPVE9OCisjICAgaW5jbHVkZSAiZ3VpX3Bob3Rvbi5wcm8iCisjICBlbmRpZgorIyAgaWZkZWYgRkVBVF9TVU5fV09SS1NIT1AKKyMgICBpbmNsdWRlICJ3b3Jrc2hvcC5wcm8iCisjICBlbmRpZgorIyAgaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisjICAgaW5jbHVkZSAibmV0YmVhbnMucHJvIgorIyAgZW5kaWYKKyMgZW5kaWYJLyogRkVBVF9HVUkgKi8KKworIyBpZmRlZiBGRUFUX09MRQorIyAgaW5jbHVkZSAiaWZfb2xlLnBybyIKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChGRUFUX0NMSUVOVFNFUlZFUikgJiYgZGVmaW5lZChGRUFUX1gxMSkKKyMgIGluY2x1ZGUgImlmX3hjbWRzcnYucHJvIgorIyBlbmRpZgorCisvKgorICogVGhlIHBlcmwgaW5jbHVkZSBmaWxlcyBwb2xsdXRlIHRoZSBuYW1lc3BhY2UsIHRoZXJmb3JlIHByb3RvLmggbXVzdCBiZQorICogaW5jbHVkZWQgYmVmb3JlIHRoZSBwZXJsIGluY2x1ZGUgZmlsZXMuICBCdXQgdGhlbiBDViBpcyBub3QgZGVmaW5lZCwgd2hpY2gKKyAqIGlzIHVzZWQgaW4gaWZfcGVybC5wcm8uICBUbyBnZXQgYXJvdW5kIHRoaXMsIHRoZSBwZXJsIHByb3RvdHlwZSBmaWxlcyBhcmUKKyAqIG5vdCBpbmNsdWRlZCBoZXJlIGZvciB0aGUgcGVybCBmaWxlcy4gIFVzZSBhIGR1bW15IGRlZmluZSBmb3IgQ1YgZm9yIHRoZQorICogb3RoZXIgZmlsZXMuCisgKi8KKyNpZiBkZWZpbmVkKEZFQVRfUEVSTCkgJiYgIWRlZmluZWQoSU5fUEVSTF9GSUxFKQorIyBkZWZpbmUgQ1Ygdm9pZAorIyBpZmRlZiBfX0JPUkxBTkRDX18KKyMgIHByYWdtYSBvcHRpb24gLXBjCisjIGVuZGlmCisjIGluY2x1ZGUgImlmX3BlcmwucHJvIgorIyBpZmRlZiBfX0JPUkxBTkRDX18KKyMgIHByYWdtYSBvcHRpb24gLXAuCisjIGVuZGlmCisjIGluY2x1ZGUgImlmX3BlcmxzZmlvLnBybyIKKyNlbmRpZgorCisjaWZkZWYgX19CT1JMQU5EQ19fCisjIGRlZmluZSBfUFJPVE9fSAorI2VuZGlmCisjZW5kaWYgLyogIVBST1RPICYmICFOT1BST1RPICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vYnVmZmVyLnBybyBiL3NyYy9wcm90by9idWZmZXIucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYWRlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vYnVmZmVyLnBybwpAQCAtMCwwICsxLDY2IEBACisvKiBidWZmZXIuYyAqLworaW50IG9wZW5fYnVmZmVyIF9fQVJHUygoaW50IHJlYWRfc3RkaW4sIGV4YXJnX1QgKmVhcCkpOworaW50IGJ1Zl92YWxpZCBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK3ZvaWQgY2xvc2VfYnVmZmVyIF9fQVJHUygod2luX1QgKndpbiwgYnVmX1QgKmJ1ZiwgaW50IGFjdGlvbikpOwordm9pZCBidWZfY2xlYXJfZmlsZSBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK3ZvaWQgYnVmX2ZyZWVhbGwgX19BUkdTKChidWZfVCAqYnVmLCBpbnQgZGVsX2J1ZiwgaW50IHdpcGVfYnVmKSk7Cit2b2lkIGdvdG9fYnVmZmVyIF9fQVJHUygoZXhhcmdfVCAqZWFwLCBpbnQgc3RhcnQsIGludCBkaXIsIGludCBjb3VudCkpOwordm9pZCBoYW5kbGVfc3dhcF9leGlzdHMgX19BUkdTKChidWZfVCAqb2xkX2N1cmJ1ZikpOworY2hhcl91ICpkb19idWZkZWwgX19BUkdTKChpbnQgY29tbWFuZCwgY2hhcl91ICphcmcsIGludCBhZGRyX2NvdW50LCBpbnQgc3RhcnRfYm5yLCBpbnQgZW5kX2JuciwgaW50IGZvcmNlaXQpKTsKK2ludCBkb19idWZmZXIgX19BUkdTKChpbnQgYWN0aW9uLCBpbnQgc3RhcnQsIGludCBkaXIsIGludCBjb3VudCwgaW50IGZvcmNlaXQpKTsKK3ZvaWQgc2V0X2N1cmJ1ZiBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBhY3Rpb24pKTsKK3ZvaWQgZW50ZXJfYnVmZmVyIF9fQVJHUygoYnVmX1QgKmJ1ZikpOworYnVmX1QgKmJ1Zmxpc3RfbmV3IF9fQVJHUygoY2hhcl91ICpmZm5hbWUsIGNoYXJfdSAqc2ZuYW1lLCBsaW5lbnJfVCBsbnVtLCBpbnQgZmxhZ3MpKTsKK3ZvaWQgZnJlZV9idWZfb3B0aW9ucyBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBmcmVlX3BfZmYpKTsKK2ludCBidWZsaXN0X2dldGZpbGUgX19BUkdTKChpbnQgbiwgbGluZW5yX1QgbG51bSwgaW50IG9wdGlvbnMsIGludCBmb3JjZWl0KSk7Cit2b2lkIGJ1Zmxpc3RfZ2V0ZnBvcyBfX0FSR1MoKHZvaWQpKTsKK2J1Zl9UICpidWZsaXN0X2ZpbmRuYW1lIF9fQVJHUygoY2hhcl91ICpmZm5hbWUpKTsKK2ludCBidWZsaXN0X2ZpbmRwYXQgX19BUkdTKChjaGFyX3UgKnBhdHRlcm4sIGNoYXJfdSAqcGF0dGVybl9lbmQsIGludCB1bmxpc3RlZCwgaW50IGRpZmZtb2RlKSk7CitpbnQgRXhwYW5kQnVmbmFtZXMgX19BUkdTKChjaGFyX3UgKnBhdCwgaW50ICpudW1fZmlsZSwgY2hhcl91ICoqKmZpbGUsIGludCBvcHRpb25zKSk7CitidWZfVCAqYnVmbGlzdF9maW5kbnIgX19BUkdTKChpbnQgbnIpKTsKK2NoYXJfdSAqYnVmbGlzdF9ucjJuYW1lIF9fQVJHUygoaW50IG4sIGludCBmdWxsbmFtZSwgaW50IGhlbHB0YWlsKSk7Cit2b2lkIGdldF93aW5vcHRzIF9fQVJHUygoYnVmX1QgKmJ1ZikpOworcG9zX1QgKmJ1Zmxpc3RfZmluZGZwb3MgX19BUkdTKChidWZfVCAqYnVmKSk7CitsaW5lbnJfVCBidWZsaXN0X2ZpbmRsbnVtIF9fQVJHUygoYnVmX1QgKmJ1ZikpOwordm9pZCBidWZsaXN0X2xpc3QgX19BUkdTKChleGFyZ19UICplYXApKTsKK2ludCBidWZsaXN0X25hbWVfbnIgX19BUkdTKChpbnQgZm51bSwgY2hhcl91ICoqZm5hbWUsIGxpbmVucl9UICpsbnVtKSk7CitpbnQgc2V0Zm5hbWUgX19BUkdTKChidWZfVCAqYnVmLCBjaGFyX3UgKmZmbmFtZSwgY2hhcl91ICpzZm5hbWUsIGludCBtZXNzYWdlKSk7Cit2b2lkIGJ1Zl9uYW1lX2NoYW5nZWQgX19BUkdTKChidWZfVCAqYnVmKSk7CitidWZfVCAqc2V0YWx0Zm5hbWUgX19BUkdTKChjaGFyX3UgKmZmbmFtZSwgY2hhcl91ICpzZm5hbWUsIGxpbmVucl9UIGxudW0pKTsKK2NoYXJfdSAqZ2V0YWx0Zm5hbWUgX19BUkdTKChpbnQgZXJybXNnKSk7CitpbnQgYnVmbGlzdF9hZGQgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBpbnQgZmxhZ3MpKTsKK3ZvaWQgYnVmbGlzdF9zbGFzaF9hZGp1c3QgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGJ1Zmxpc3RfYWx0ZnBvcyBfX0FSR1MoKHZvaWQpKTsKK2ludCBvdGhlcmZpbGUgX19BUkdTKChjaGFyX3UgKmZmbmFtZSkpOwordm9pZCBidWZfc2V0aW5vIF9fQVJHUygoYnVmX1QgKmJ1ZikpOwordm9pZCBmaWxlaW5mbyBfX0FSR1MoKGludCBmdWxsbmFtZSwgaW50IHNob3J0aGVscCwgaW50IGRvbnRfdHJ1bmNhdGUpKTsKK3ZvaWQgY29sX3ByaW50IF9fQVJHUygoY2hhcl91ICpidWYsIGludCBjb2wsIGludCB2Y29sKSk7Cit2b2lkIG1ha2V0aXRsZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgcmVzZXR0aXRsZSBfX0FSR1MoKHZvaWQpKTsKK2ludCBidWlsZF9zdGxfc3RyX2hsIF9fQVJHUygod2luX1QgKndwLCBjaGFyX3UgKm91dCwgc2l6ZV90IG91dGxlbiwgY2hhcl91ICpmbXQsIGludCBmaWxsY2hhciwgaW50IG1heHdpZHRoLCBzdHJ1Y3Qgc3RsX2hscmVjICpobCkpOwordm9pZCBnZXRfcmVsX3BvcyBfX0FSR1MoKHdpbl9UICp3cCwgY2hhcl91ICpzdHIpKTsKK2ludCBhcHBlbmRfYXJnX251bWJlciBfX0FSR1MoKHdpbl9UICp3cCwgY2hhcl91ICpidWYsIGludCBhZGRfZmlsZSwgaW50IG1heGxlbikpOworY2hhcl91ICpmaXhfZm5hbWUgX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7Cit2b2lkIGZuYW1lX2V4cGFuZCBfX0FSR1MoKGJ1Zl9UICpidWYsIGNoYXJfdSAqKmZmbmFtZSwgY2hhcl91ICoqc2ZuYW1lKSk7CitjaGFyX3UgKmFsaXN0X25hbWUgX19BUkdTKChhZW50cnlfVCAqYWVwKSk7Cit2b2lkIGRvX2FyZ19hbGwgX19BUkdTKChpbnQgY291bnQsIGludCBmb3JjZWl0KSk7Cit2b2lkIGV4X2J1ZmZlcl9hbGwgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZG9fbW9kZWxpbmVzIF9fQVJHUygodm9pZCkpOworaW50IHJlYWRfdmltaW5mb19idWZmZXJsaXN0IF9fQVJHUygodmlyX1QgKnZpcnAsIGludCB3cml0aW5nKSk7Cit2b2lkIHdyaXRlX3ZpbWluZm9fYnVmZmVybGlzdCBfX0FSR1MoKEZJTEUgKmZwKSk7CitjaGFyICpidWZfc3BuYW1lIF9fQVJHUygoYnVmX1QgKmJ1ZikpOwordm9pZCBidWZfYWRkc2lnbiBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBpZCwgbGluZW5yX1QgbG51bSwgaW50IHR5cGVucikpOworaW50IGJ1Zl9jaGFuZ2Vfc2lnbl90eXBlIF9fQVJHUygoYnVmX1QgKmJ1ZiwgaW50IG1hcmtJZCwgaW50IHR5cGVucikpOworaW50X3UgYnVmX2dldHNpZ250eXBlIF9fQVJHUygoYnVmX1QgKmJ1ZiwgbGluZW5yX1QgbG51bSwgaW50IHR5cGUpKTsKK2xpbmVucl9UIGJ1Zl9kZWxzaWduIF9fQVJHUygoYnVmX1QgKmJ1ZiwgaW50IGlkKSk7CitpbnQgYnVmX2ZpbmRzaWduIF9fQVJHUygoYnVmX1QgKmJ1ZiwgaW50IGlkKSk7CitpbnQgYnVmX2ZpbmRzaWduX2lkIF9fQVJHUygoYnVmX1QgKmJ1ZiwgbGluZW5yX1QgbG51bSkpOworaW50IGJ1Zl9maW5kc2lnbnR5cGVfaWQgX19BUkdTKChidWZfVCAqYnVmLCBsaW5lbnJfVCBsbnVtLCBpbnQgdHlwZW5yKSk7CitpbnQgYnVmX3NpZ25jb3VudCBfX0FSR1MoKGJ1Zl9UICpidWYsIGxpbmVucl9UIGxudW0pKTsKK3ZvaWQgYnVmX2RlbGV0ZV9hbGxfc2lnbnMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNpZ25fbGlzdF9wbGFjZWQgX19BUkdTKChidWZfVCAqcmJ1ZikpOwordm9pZCBzaWduX21hcmtfYWRqdXN0IF9fQVJHUygobGluZW5yX1QgbGluZTEsIGxpbmVucl9UIGxpbmUyLCBsb25nIGFtb3VudCwgbG9uZyBhbW91bnRfYWZ0ZXIpKTsKK3ZvaWQgc2V0X2J1Zmxpc3RlZCBfX0FSR1MoKGludCBvbikpOworaW50IGJ1Zl9jb250ZW50c19jaGFuZ2VkIF9fQVJHUygoYnVmX1QgKmJ1ZikpOwordm9pZCB3aXBlX2J1ZmZlciBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBhdWNtZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vY2hhcnNldC5wcm8gYi9zcmMvcHJvdG8vY2hhcnNldC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlOTc1NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9jaGFyc2V0LnBybwpAQCAtMCwwICsxLDQ5IEBACisvKiBjaGFyc2V0LmMgKi8KK2ludCBpbml0X2NoYXJ0YWIgX19BUkdTKCh2b2lkKSk7CitpbnQgYnVmX2luaXRfY2hhcnRhYiBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBnbG9iYWwpKTsKK3ZvaWQgdHJhbnNfY2hhcmFjdGVycyBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgYnVmc2l6ZSkpOworY2hhcl91ICp0cmFuc3N0ciBfX0FSR1MoKGNoYXJfdSAqcykpOworY2hhcl91ICpzdHJfZm9sZGNhc2UgX19BUkdTKChjaGFyX3UgKnN0ciwgaW50IGxlbikpOworY2hhcl91ICp0cmFuc2NoYXIgX19BUkdTKChpbnQgYykpOworY2hhcl91ICp0cmFuc2NoYXJfYnl0ZSBfX0FSR1MoKGludCBjKSk7Cit2b2lkIHRyYW5zY2hhcl9ub25wcmludCBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgYykpOwordm9pZCB0cmFuc2NoYXJfaGV4IF9fQVJHUygoY2hhcl91ICpidWYsIGludCBjKSk7CitpbnQgYnl0ZTJjZWxscyBfX0FSR1MoKGludCBiKSk7CitpbnQgY2hhcjJjZWxscyBfX0FSR1MoKGludCBjKSk7CitpbnQgcHRyMmNlbGxzIF9fQVJHUygoY2hhcl91ICpwKSk7CitpbnQgdmltX3N0cnNpemUgX19BUkdTKChjaGFyX3UgKnMpKTsKK2ludCB2aW1fc3RybnNpemUgX19BUkdTKChjaGFyX3UgKnMsIGludCBsZW4pKTsKK2ludCBjaGFydGFic2l6ZSBfX0FSR1MoKGNoYXJfdSAqcCwgY29sbnJfVCBjb2wpKTsKK2ludCBsaW5ldGFic2l6ZSBfX0FSR1MoKGNoYXJfdSAqcykpOworaW50IHdpbl9saW5ldGFic2l6ZSBfX0FSR1MoKHdpbl9UICp3cCwgY2hhcl91ICpwLCBjb2xucl9UIGxlbikpOworaW50IHZpbV9pc0lEYyBfX0FSR1MoKGludCBjKSk7CitpbnQgdmltX2lzd29yZGMgX19BUkdTKChpbnQgYykpOworaW50IHZpbV9pc3dvcmRwIF9fQVJHUygoY2hhcl91ICpwKSk7CitpbnQgdmltX2lzd29yZGNfYnVmIF9fQVJHUygoY2hhcl91ICpwLCBidWZfVCAqYnVmKSk7CitpbnQgdmltX2lzZmlsZWMgX19BUkdTKChpbnQgYykpOworaW50IHZpbV9pc3ByaW50YyBfX0FSR1MoKGludCBjKSk7CitpbnQgdmltX2lzcHJpbnRjX3N0cmljdCBfX0FSR1MoKGludCBjKSk7CitpbnQgbGJyX2NoYXJ0YWJzaXplIF9fQVJHUygodW5zaWduZWQgY2hhciAqcywgY29sbnJfVCBjb2wpKTsKK2ludCBsYnJfY2hhcnRhYnNpemVfYWR2IF9fQVJHUygoY2hhcl91ICoqcywgY29sbnJfVCBjb2wpKTsKK2ludCB3aW5fbGJyX2NoYXJ0YWJzaXplIF9fQVJHUygod2luX1QgKndwLCBjaGFyX3UgKnMsIGNvbG5yX1QgY29sLCBpbnQgKmhlYWRwKSk7CitpbnQgaW5fd2luX2JvcmRlciBfX0FSR1MoKHdpbl9UICp3cCwgY29sbnJfVCB2Y29sKSk7Cit2b2lkIGdldHZjb2wgX19BUkdTKCh3aW5fVCAqd3AsIHBvc19UICpwb3MsIGNvbG5yX1QgKnN0YXJ0LCBjb2xucl9UICpjdXJzb3IsIGNvbG5yX1QgKmVuZCkpOworY29sbnJfVCBnZXR2Y29sX25vbGlzdCBfX0FSR1MoKHBvc19UICpwb3NwKSk7Cit2b2lkIGdldHZ2Y29sIF9fQVJHUygod2luX1QgKndwLCBwb3NfVCAqcG9zLCBjb2xucl9UICpzdGFydCwgY29sbnJfVCAqY3Vyc29yLCBjb2xucl9UICplbmQpKTsKK3ZvaWQgZ2V0dmNvbHMgX19BUkdTKCh3aW5fVCAqd3AsIHBvc19UICpwb3MxLCBwb3NfVCAqcG9zMiwgY29sbnJfVCAqbGVmdCwgY29sbnJfVCAqcmlnaHQpKTsKK2NoYXJfdSAqc2tpcHdoaXRlIF9fQVJHUygoY2hhcl91ICpwKSk7CitjaGFyX3UgKnNraXBkaWdpdHMgX19BUkdTKChjaGFyX3UgKnApKTsKK2ludCB2aW1faXNkaWdpdCBfX0FSR1MoKGludCBjKSk7CitpbnQgdmltX2lzeGRpZ2l0IF9fQVJHUygoaW50IGMpKTsKK2NoYXJfdSAqc2tpcHRvd2hpdGUgX19BUkdTKChjaGFyX3UgKnApKTsKK2NoYXJfdSAqc2tpcHRvd2hpdGVfZXNjIF9fQVJHUygoY2hhcl91ICpwKSk7Citsb25nIGdldGRpZ2l0cyBfX0FSR1MoKGNoYXJfdSAqKnBwKSk7CitpbnQgdmltX2lzYmxhbmtsaW5lIF9fQVJHUygoY2hhcl91ICpsYnVmKSk7Cit2b2lkIHZpbV9zdHIybnIgX19BUkdTKChjaGFyX3UgKnN0YXJ0LCBpbnQgKmhleHAsIGludCAqbGVuLCBpbnQgZG9vY3QsIGludCBkb2hleCwgbG9uZyAqbnB0ciwgdW5zaWduZWQgbG9uZyAqdW5wdHIpKTsKK2ludCBoZXgybnIgX19BUkdTKChpbnQgYykpOworaW50IGhleGhleDJuciBfX0FSR1MoKGNoYXJfdSAqcCkpOworaW50IHJlbV9iYWNrc2xhc2ggX19BUkdTKChjaGFyX3UgKnN0cikpOwordm9pZCBiYWNrc2xhc2hfaGFsdmUgX19BUkdTKChjaGFyX3UgKnApKTsKK2NoYXJfdSAqYmFja3NsYXNoX2hhbHZlX3NhdmUgX19BUkdTKChjaGFyX3UgKnApKTsKK3ZvaWQgZWJjZGljMmFzY2lpIF9fQVJHUygoY2hhcl91ICpidWZmZXIsIGludCBsZW4pKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2RpZmYucHJvIGIvc3JjL3Byb3RvL2RpZmYucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZmU5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vZGlmZi5wcm8KQEAgLTAsMCArMSwyMyBAQAorLyogZGlmZi5jICovCit2b2lkIGRpZmZfbmV3X2J1ZmZlciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZGlmZl9idWZfZGVsZXRlIF9fQVJHUygoYnVmX1QgKmJ1ZikpOwordm9pZCBkaWZmX2J1Zl9hZGQgX19BUkdTKChidWZfVCAqYnVmKSk7Cit2b2lkIGRpZmZfaW52YWxpZGF0ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZGlmZl9tYXJrX2FkanVzdCBfX0FSR1MoKGxpbmVucl9UIGxpbmUxLCBsaW5lbnJfVCBsaW5lMiwgbG9uZyBhbW91bnQsIGxvbmcgYW1vdW50X2FmdGVyKSk7Cit2b2lkIGV4X2RpZmZ1cGRhdGUgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfZGlmZnBhdGNoIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X2RpZmZzcGxpdCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9kaWZmdGhpcyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBkaWZmX3dpbl9vcHRpb25zIF9fQVJHUygod2luX1QgKndwLCBpbnQgYWRkYnVmKSk7CitpbnQgZGlmZl9jaGVjayBfX0FSR1MoKHdpbl9UICp3cCwgbGluZW5yX1QgbG51bSkpOworaW50IGRpZmZfY2hlY2tfZmlsbCBfX0FSR1MoKHdpbl9UICp3cCwgbGluZW5yX1QgbG51bSkpOwordm9pZCBkaWZmX3NldF90b3BsaW5lIF9fQVJHUygod2luX1QgKmZyb213aW4sIHdpbl9UICp0b3dpbikpOworaW50IGRpZmZvcHRfY2hhbmdlZCBfX0FSR1MoKHZvaWQpKTsKK2ludCBkaWZmX2ZpbmRfY2hhbmdlIF9fQVJHUygod2luX1QgKndwLCBsaW5lbnJfVCBsbnVtLCBpbnQgKnN0YXJ0cCwgaW50ICplbmRwKSk7CitpbnQgZGlmZl9pbmZvbGQgX19BUkdTKCh3aW5fVCAqd3AsIGxpbmVucl9UIGxudW0pKTsKK3ZvaWQgbnZfZGlmZmdldHB1dCBfX0FSR1MoKGludCBwdXQpKTsKK3ZvaWQgZXhfZGlmZmdldHB1dCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworaW50IGRpZmZfbW9kZV9idWYgX19BUkdTKChidWZfVCAqYnVmKSk7CitpbnQgZGlmZl9tb3ZlX3RvIF9fQVJHUygoaW50IGRpciwgbG9uZyBjb3VudCkpOworbGluZW5yX1QgZGlmZl9sbnVtX3dpbiBfX0FSR1MoKGxpbmVucl9UIGxudW0sIHdpbl9UICp3cCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZGlncmFwaC5wcm8gYi9zcmMvcHJvdG8vZGlncmFwaC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1YmU3MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9kaWdyYXBoLnBybwpAQCAtMCwwICsxLDkgQEAKKy8qIGRpZ3JhcGguYyAqLworaW50IGRvX2RpZ3JhcGggX19BUkdTKChpbnQgYykpOworaW50IGdldF9kaWdyYXBoIF9fQVJHUygoaW50IGNtZGxpbmUpKTsKK2ludCBnZXRkaWdyYXBoIF9fQVJHUygoaW50IGNoYXIxLCBpbnQgY2hhcjIsIGludCBtZXRhKSk7Cit2b2lkIHB1dGRpZ3JhcGggX19BUkdTKChjaGFyX3UgKnN0cikpOwordm9pZCBsaXN0ZGlncmFwaHMgX19BUkdTKCh2b2lkKSk7CitjaGFyX3UgKmtleW1hcF9pbml0IF9fQVJHUygodm9pZCkpOwordm9pZCBleF9sb2Fka2V5bWFwIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9lZGl0LnBybyBiL3NyYy9wcm90by9lZGl0LnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTkzOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2VkaXQucHJvCkBAIC0wLDAgKzEsMzYgQEAKKy8qIGVkaXQuYyAqLworaW50IGVkaXQgX19BUkdTKChpbnQgY21kY2hhciwgaW50IHN0YXJ0bG4sIGxvbmcgY291bnQpKTsKK3ZvaWQgZWRpdF9wdXRjaGFyIF9fQVJHUygoaW50IGMsIGludCBoaWdobGlnaHQpKTsKK3ZvaWQgZWRpdF91bnB1dGNoYXIgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGRpc3BsYXlfZG9sbGFyIF9fQVJHUygoY29sbnJfVCBjb2wpKTsKK3ZvaWQgY2hhbmdlX2luZGVudCBfX0FSR1MoKGludCB0eXBlLCBpbnQgYW1vdW50LCBpbnQgcm91bmQsIGludCByZXBsYWNlZCkpOwordm9pZCB0cnVuY2F0ZV9zcGFjZXMgX19BUkdTKChjaGFyX3UgKmxpbmUpKTsKK3ZvaWQgYmFja3NwYWNlX3VudGlsX2NvbHVtbiBfX0FSR1MoKGludCBjb2wpKTsKK2ludCB2aW1faXNfY3RybF94X2tleSBfX0FSR1MoKGludCBjKSk7CitpbnQgaW5zX2NvbXBsX2FkZF9pbmZlcmNhc2UgX19BUkdTKChjaGFyX3UgKnN0ciwgaW50IGxlbiwgY2hhcl91ICpmbmFtZSwgaW50IGRpciwgaW50IHJldXNlKSk7CitjaGFyX3UgKmZpbmRfd29yZF9zdGFydCBfX0FSR1MoKGNoYXJfdSAqcHRyKSk7CitjaGFyX3UgKmZpbmRfd29yZF9lbmQgX19BUkdTKChjaGFyX3UgKnB0cikpOwordm9pZCBpbnNfY29tcGxfY2hlY2tfa2V5cyBfX0FSR1MoKHZvaWQpKTsKK2ludCBnZXRfbGl0ZXJhbCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgaW5zZXJ0Y2hhciBfX0FSR1MoKGludCBjLCBpbnQgZmxhZ3MsIGludCBzZWNvbmRfaW5kZW50KSk7Cit2b2lkIGF1dG9fZm9ybWF0IF9fQVJHUygoaW50IHRyYWlsYmxhbmssIGludCBwcmV2X2xpbmUpKTsKK2ludCBjb21wX3RleHR3aWR0aCBfX0FSR1MoKGludCBmZikpOworaW50IHN0b3BfYXJyb3cgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNldF9sYXN0X2luc2VydCBfX0FSR1MoKGludCBjKSk7CitjaGFyX3UgKmFkZF9jaGFyMmJ1ZiBfX0FSR1MoKGludCBjLCBjaGFyX3UgKnMpKTsKK3ZvaWQgYmVnaW5saW5lIF9fQVJHUygoaW50IGZsYWdzKSk7CitpbnQgb25lcmlnaHQgX19BUkdTKCh2b2lkKSk7CitpbnQgb25lbGVmdCBfX0FSR1MoKHZvaWQpKTsKK2ludCBjdXJzb3JfdXAgX19BUkdTKChsb25nIG4sIGludCB1cGRfdG9wbGluZSkpOworaW50IGN1cnNvcl9kb3duIF9fQVJHUygobG9uZyBuLCBpbnQgdXBkX3RvcGxpbmUpKTsKK2ludCBzdHVmZl9pbnNlcnRlZCBfX0FSR1MoKGludCBjLCBsb25nIGNvdW50LCBpbnQgbm9fZXNjKSk7CitjaGFyX3UgKmdldF9sYXN0X2luc2VydCBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqZ2V0X2xhc3RfaW5zZXJ0X3NhdmUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHJlcGxhY2VfcHVzaCBfX0FSR1MoKGludCBjKSk7Cit2b2lkIGZpeHRoaXNsaW5lIF9fQVJHUygoaW50ICgqZ2V0X3RoZV9pbmRlbnQpKHZvaWQpKSk7Cit2b2lkIGZpeF9pbmRlbnQgX19BUkdTKCh2b2lkKSk7CitpbnQgaW5fY2lua2V5cyBfX0FSR1MoKGludCBrZXl0eXBlZCwgaW50IHdoZW4sIGludCBsaW5lX2lzX2VtcHR5KSk7CitpbnQgaGttYXAgX19BUkdTKChpbnQgYykpOwordm9pZCBpbnNfc2Nyb2xsIF9fQVJHUygodm9pZCkpOwordm9pZCBpbnNfaG9yc2Nyb2xsIF9fQVJHUygodm9pZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZXZhbC5wcm8gYi9zcmMvcHJvdG8vZXZhbC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFkZmJiOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9ldmFsLnBybwpAQCAtMCwwICsxLDYwIEBACisvKiBldmFsLmMgKi8KK2NoYXJfdSAqZnVuY19uYW1lIF9fQVJHUygodm9pZCAqY29va2llKSk7CitsaW5lbnJfVCAqZnVuY19icmVha3BvaW50IF9fQVJHUygodm9pZCAqY29va2llKSk7CitpbnQgKmZ1bmNfZGJnX3RpY2sgX19BUkdTKCh2b2lkICpjb29raWUpKTsKK2ludCBmdW5jX2xldmVsIF9fQVJHUygodm9pZCAqY29va2llKSk7CitpbnQgY3VycmVudF9mdW5jX3JldHVybmVkIF9fQVJHUygodm9pZCkpOwordm9pZCBzZXRfaW50ZXJuYWxfc3RyaW5nX3ZhciBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgY2hhcl91ICp2YWx1ZSkpOworaW50IGV2YWxfY2hhcmNvbnZlcnQgX19BUkdTKChjaGFyX3UgKmVuY19mcm9tLCBjaGFyX3UgKmVuY190bywgY2hhcl91ICpmbmFtZV9mcm9tLCBjaGFyX3UgKmZuYW1lX3RvKSk7CitpbnQgZXZhbF9wcmludGV4cHIgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBjaGFyX3UgKmFyZ3MpKTsKK3ZvaWQgZXZhbF9kaWZmIF9fQVJHUygoY2hhcl91ICpvcmlnZmlsZSwgY2hhcl91ICpuZXdmaWxlLCBjaGFyX3UgKm91dGZpbGUpKTsKK3ZvaWQgZXZhbF9wYXRjaCBfX0FSR1MoKGNoYXJfdSAqb3JpZ2ZpbGUsIGNoYXJfdSAqZGlmZmZpbGUsIGNoYXJfdSAqb3V0ZmlsZSkpOworaW50IGV2YWxfdG9fYm9vbCBfX0FSR1MoKGNoYXJfdSAqYXJnLCBpbnQgKmVycm9yLCBjaGFyX3UgKipuZXh0Y21kLCBpbnQgc2tpcCkpOworY2hhcl91ICpldmFsX3RvX3N0cmluZ19za2lwIF9fQVJHUygoY2hhcl91ICphcmcsIGNoYXJfdSAqKm5leHRjbWQsIGludCBza2lwKSk7CitjaGFyX3UgKmV2YWxfdG9fc3RyaW5nIF9fQVJHUygoY2hhcl91ICphcmcsIGNoYXJfdSAqKm5leHRjbWQpKTsKK2NoYXJfdSAqZXZhbF90b19zdHJpbmdfc2FmZSBfX0FSR1MoKGNoYXJfdSAqYXJnLCBjaGFyX3UgKipuZXh0Y21kKSk7CitpbnQgZXZhbF90b19udW1iZXIgX19BUkdTKChjaGFyX3UgKmV4cHIpKTsKK2NoYXJfdSAqY2FsbF92aW1fZnVuY3Rpb24gX19BUkdTKChjaGFyX3UgKmZ1bmMsIGludCBhcmdjLCBjaGFyX3UgKiphcmd2LCBpbnQgc2FmZSkpOwordm9pZCAqc2F2ZV9mdW5jY2FsIF9fQVJHUygodm9pZCkpOwordm9pZCByZXN0b3JlX2Z1bmNjYWwgX19BUkdTKCh2b2lkICpmYykpOworaW50IGV2YWxfZm9sZGV4cHIgX19BUkdTKChjaGFyX3UgKmFyZywgaW50ICpjcCkpOwordm9pZCBleF9sZXQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgc2V0X2NvbnRleHRfZm9yX2V4cHJlc3Npb24gX19BUkdTKChleHBhbmRfVCAqeHAsIGNoYXJfdSAqYXJnLCBjbWRpZHhfVCBjbWRpZHgpKTsKK3ZvaWQgZXhfY2FsbCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF91bmxldCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworaW50IGRvX3VubGV0IF9fQVJHUygoY2hhcl91ICpuYW1lKSk7Cit2b2lkIGRlbF9tZW51dHJhbnNfdmFycyBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqZ2V0X3VzZXJfdmFyX25hbWUgX19BUkdTKChleHBhbmRfVCAqeHAsIGludCBpZHgpKTsKK2NoYXJfdSAqZ2V0X2Z1bmN0aW9uX25hbWUgX19BUkdTKChleHBhbmRfVCAqeHAsIGludCBpZHgpKTsKK2NoYXJfdSAqZ2V0X2V4cHJfbmFtZSBfX0FSR1MoKGV4cGFuZF9UICp4cCwgaW50IGlkeCkpOwordm9pZCBzZXRfdmltX3Zhcl9uciBfX0FSR1MoKGludCBpZHgsIGxvbmcgdmFsKSk7Citsb25nIGdldF92aW1fdmFyX25yIF9fQVJHUygoaW50IGlkeCkpOwordm9pZCBzZXRfdmNvdW50IF9fQVJHUygobG9uZyBjb3VudCwgbG9uZyBjb3VudDEpKTsKK3ZvaWQgc2V0X3ZpbV92YXJfc3RyaW5nIF9fQVJHUygoaW50IGlkeCwgY2hhcl91ICp2YWwsIGludCBsZW4pKTsKK3ZvaWQgc2V0X3JlZ192YXIgX19BUkdTKChpbnQgYykpOworY2hhcl91ICp2X2V4Y2VwdGlvbiBfX0FSR1MoKGNoYXJfdSAqb2xkdmFsKSk7CitjaGFyX3UgKnZfdGhyb3dwb2ludCBfX0FSR1MoKGNoYXJfdSAqb2xkdmFsKSk7CitjaGFyX3UgKnNldF9jbWRhcmcgX19BUkdTKChleGFyZ19UICplYXAsIGNoYXJfdSAqb2xkYXJnKSk7CitjaGFyX3UgKmdldF92YXJfdmFsdWUgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK3ZvaWQgbmV3X3NjcmlwdF92YXJzIF9fQVJHUygoc2NpZF9UIGlkKSk7Cit2b2lkIHZhcl9pbml0IF9fQVJHUygoZ2FycmF5X1QgKmdhcCkpOwordm9pZCB2YXJfY2xlYXIgX19BUkdTKChnYXJyYXlfVCAqZ2FwKSk7Cit2b2lkIGV4X2VjaG8gX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfZWNob2hsIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X2V4ZWN1dGUgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfZnVuY3Rpb24gX19BUkdTKChleGFyZ19UICplYXApKTsKK2NoYXJfdSAqZ2V0X3VzZXJfZnVuY19uYW1lIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBpbnQgaWR4KSk7Cit2b2lkIGV4X2RlbGZ1bmN0aW9uIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X3JldHVybiBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworaW50IGRvX3JldHVybiBfX0FSR1MoKGV4YXJnX1QgKmVhcCwgaW50IHJlYW5pbWF0ZSwgaW50IGlzX2NtZCwgdm9pZCAqdmFsdWUpKTsKK3ZvaWQgZGlzY2FyZF9wZW5kaW5nX3JldHVybiBfX0FSR1MoKHZvaWQgKnJldHZhcikpOworY2hhcl91ICpnZXRfcmV0dXJuX2NtZCBfX0FSR1MoKHZvaWQgKnJldHZhcikpOworY2hhcl91ICpnZXRfZnVuY19saW5lIF9fQVJHUygoaW50IGMsIHZvaWQgKmNvb2tpZSwgaW50IGluZGVudCkpOworaW50IGZ1bmNfaGFzX2VuZGVkIF9fQVJHUygodm9pZCAqY29va2llKSk7CitpbnQgZnVuY19oYXNfYWJvcnQgX19BUkdTKCh2b2lkICpjb29raWUpKTsKK2ludCByZWFkX3ZpbWluZm9fdmFybGlzdCBfX0FSR1MoKHZpcl9UICp2aXJwLCBpbnQgd3JpdGluZykpOwordm9pZCB3cml0ZV92aW1pbmZvX3Zhcmxpc3QgX19BUkdTKChGSUxFICpmcCkpOworaW50IHN0b3JlX3Nlc3Npb25fZ2xvYmFscyBfX0FSR1MoKEZJTEUgKmZkKSk7CitpbnQgbW9kaWZ5X2ZuYW1lIF9fQVJHUygoY2hhcl91ICpzcmMsIGludCAqdXNlZGxlbiwgY2hhcl91ICoqZm5hbWVwLCBjaGFyX3UgKipidWZwLCBpbnQgKmZuYW1lbGVuKSk7CitjaGFyX3UgKmRvX3N0cmluZ19zdWIgX19BUkdTKChjaGFyX3UgKnN0ciwgY2hhcl91ICpwYXQsIGNoYXJfdSAqc3ViLCBjaGFyX3UgKmZsYWdzKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9leF9jbWRzLnBybyBiL3NyYy9wcm90by9leF9jbWRzLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2YxMDVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2V4X2NtZHMucHJvCkBAIC0wLDAgKzEsNTIgQEAKKy8qIGV4X2NtZHMuYyAqLwordm9pZCBkb19hc2NpaSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9hbGlnbiBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9yZXRhYiBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworaW50IGRvX21vdmUgX19BUkdTKChsaW5lbnJfVCBsaW5lMSwgbGluZW5yX1QgbGluZTIsIGxpbmVucl9UIGRlc3QpKTsKK3ZvaWQgZXhfY29weSBfX0FSR1MoKGxpbmVucl9UIGxpbmUxLCBsaW5lbnJfVCBsaW5lMiwgbGluZW5yX1QgbikpOwordm9pZCBkb19iYW5nIF9fQVJHUygoaW50IGFkZHJfY291bnQsIGV4YXJnX1QgKmVhcCwgaW50IGZvcmNlaXQsIGludCBkb19pbiwgaW50IGRvX291dCkpOwordm9pZCBkb19zaGVsbCBfX0FSR1MoKGNoYXJfdSAqY21kLCBpbnQgZmxhZ3MpKTsKK2NoYXJfdSAqbWFrZV9maWx0ZXJfY21kIF9fQVJHUygoY2hhcl91ICpjbWQsIGNoYXJfdSAqaXRtcCwgY2hhcl91ICpvdG1wKSk7Cit2b2lkIGFwcGVuZF9yZWRpciBfX0FSR1MoKGNoYXJfdSAqYnVmLCBjaGFyX3UgKm9wdCwgY2hhcl91ICpmbmFtZSkpOworaW50IHZpbWluZm9fZXJyb3IgX19BUkdTKChjaGFyICplcnJudW0sIGNoYXIgKm1lc3NhZ2UsIGNoYXJfdSAqbGluZSkpOworaW50IHJlYWRfdmltaW5mbyBfX0FSR1MoKGNoYXJfdSAqZmlsZSwgaW50IHdhbnRfaW5mbywgaW50IHdhbnRfbWFya3MsIGludCBmb3JjZWl0KSk7Cit2b2lkIHdyaXRlX3ZpbWluZm8gX19BUkdTKChjaGFyX3UgKmZpbGUsIGludCBmb3JjZWl0KSk7CitpbnQgdmltaW5mb19yZWFkbGluZSBfX0FSR1MoKHZpcl9UICp2aXJwKSk7CitjaGFyX3UgKnZpbWluZm9fcmVhZHN0cmluZyBfX0FSR1MoKHZpcl9UICp2aXJwLCBpbnQgb2ZmLCBpbnQgY29udmVydCkpOwordm9pZCB2aW1pbmZvX3dyaXRlc3RyaW5nIF9fQVJHUygoRklMRSAqZmQsIGNoYXJfdSAqcCkpOwordm9pZCBkb19maXhkZWwgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgcHJpbnRfbGluZV9ub19wcmVmaXggX19BUkdTKChsaW5lbnJfVCBsbnVtLCBpbnQgdXNlX251bWJlcikpOwordm9pZCBwcmludF9saW5lIF9fQVJHUygobGluZW5yX1QgbG51bSwgaW50IHVzZV9udW1iZXIpKTsKK3ZvaWQgZXhfZmlsZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF91cGRhdGUgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfd3JpdGUgX19BUkdTKChleGFyZ19UICplYXApKTsKK2ludCBkb193cml0ZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF93bmV4dCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBkb193cWFsbCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworaW50IG5vdF93cml0aW5nIF9fQVJHUygodm9pZCkpOworaW50IGdldGZpbGUgX19BUkdTKChpbnQgZm51bSwgY2hhcl91ICpmZm5hbWUsIGNoYXJfdSAqc2ZuYW1lLCBpbnQgc2V0cG0sIGxpbmVucl9UIGxudW0sIGludCBmb3JjZWl0KSk7CitpbnQgZG9fZWNtZCBfX0FSR1MoKGludCBmbnVtLCBjaGFyX3UgKmZmbmFtZSwgY2hhcl91ICpzZm5hbWUsIGV4YXJnX1QgKmVhcCwgbGluZW5yX1QgbmV3bG51bSwgaW50IGZsYWdzKSk7Cit2b2lkIGV4X2FwcGVuZCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9jaGFuZ2UgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfeiBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworaW50IGNoZWNrX3Jlc3RyaWN0ZWQgX19BUkdTKCh2b2lkKSk7CitpbnQgY2hlY2tfc2VjdXJlIF9fQVJHUygodm9pZCkpOwordm9pZCBkb19zdWIgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfZ2xvYmFsIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGdsb2JhbF9leGUgX19BUkdTKChjaGFyX3UgKmNtZCkpOworaW50IHJlYWRfdmltaW5mb19zdWJfc3RyaW5nIF9fQVJHUygodmlyX1QgKnZpcnAsIGludCBmb3JjZSkpOwordm9pZCB3cml0ZV92aW1pbmZvX3N1Yl9zdHJpbmcgX19BUkdTKChGSUxFICpmcCkpOwordm9pZCBwcmVwYXJlX3RhZ3ByZXZpZXcgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGV4X2hlbHAgX19BUkdTKChleGFyZ19UICplYXApKTsKK2ludCBoZWxwX2hldXJpc3RpYyBfX0FSR1MoKGNoYXJfdSAqbWF0Y2hlZF9zdHJpbmcsIGludCBvZmZzZXQsIGludCB3cm9uZ19jYXNlKSk7CitpbnQgZmluZF9oZWxwX3RhZ3MgX19BUkdTKChjaGFyX3UgKmFyZywgaW50ICpudW1fbWF0Y2hlcywgY2hhcl91ICoqKm1hdGNoZXMsIGludCBrZWVwX2xhbmcpKTsKK3ZvaWQgZml4X2hlbHBfYnVmZmVyIF9fQVJHUygodm9pZCkpOwordm9pZCBleF9oZWxwdGFncyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9zaWduIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIHNpZ25fZ3VpX3N0YXJ0ZWQgX19BUkdTKCh2b2lkKSk7CitpbnQgc2lnbl9nZXRfYXR0ciBfX0FSR1MoKGludCB0eXBlbnIsIGludCBsaW5lKSk7CitjaGFyX3UgKnNpZ25fZ2V0X3RleHQgX19BUkdTKChpbnQgdHlwZW5yKSk7Cit2b2lkICpzaWduX2dldF9pbWFnZSBfX0FSR1MoKGludCB0eXBlbnIpKTsKK2NoYXJfdSAqc2lnbl90eXBlbnIybmFtZSBfX0FSR1MoKGludCB0eXBlbnIpKTsKK3ZvaWQgZXhfZHJvcCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZXhfY21kczIucHJvIGIvc3JjL3Byb3RvL2V4X2NtZHMyLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGYyZDhmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2V4X2NtZHMyLnBybwpAQCAtMCwwICsxLDc2IEBACisvKiBleF9jbWRzMi5jICovCit2b2lkIGRvX2RlYnVnIF9fQVJHUygoY2hhcl91ICpjbWQpKTsKK3ZvaWQgZXhfZGVidWcgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZGJnX2NoZWNrX2JyZWFrcG9pbnQgX19BUkdTKChleGFyZ19UICplYXApKTsKK2ludCBkYmdfY2hlY2tfc2tpcHBlZCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9icmVha2FkZCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9kZWJ1Z2dyZWVkeSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9icmVha2RlbCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9icmVha2xpc3QgX19BUkdTKChleGFyZ19UICplYXApKTsKK2xpbmVucl9UIGRiZ19maW5kX2JyZWFrcG9pbnQgX19BUkdTKChpbnQgZmlsZSwgY2hhcl91ICpmbmFtZSwgbGluZW5yX1QgYWZ0ZXIpKTsKK3ZvaWQgZGJnX2JyZWFrcG9pbnQgX19BUkdTKChjaGFyX3UgKm5hbWUsIGxpbmVucl9UIGxudW0pKTsKK2ludCBhdXRvd3JpdGUgX19BUkdTKChidWZfVCAqYnVmLCBpbnQgZm9yY2VpdCkpOwordm9pZCBhdXRvd3JpdGVfYWxsIF9fQVJHUygodm9pZCkpOworaW50IGNoZWNrX2NoYW5nZWQgX19BUkdTKChidWZfVCAqYnVmLCBpbnQgY2hlY2thdywgaW50IG11bHRfd2luLCBpbnQgZm9yY2VpdCwgaW50IGFsbGJ1ZikpOwordm9pZCBicm93c2Vfc2F2ZV9mbmFtZSBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK3ZvaWQgZGlhbG9nX2NoYW5nZWQgX19BUkdTKChidWZfVCAqYnVmLCBpbnQgY2hlY2thbGwpKTsKK2ludCBjYW5fYWJhbmRvbiBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBmb3JjZWl0KSk7CitpbnQgY2hlY2tfY2hhbmdlZF9hbnkgX19BUkdTKChpbnQgaGlkZGVuKSk7CitpbnQgY2hlY2tfZm5hbWUgX19BUkdTKCh2b2lkKSk7CitpbnQgYnVmX3dyaXRlX2FsbCBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBmb3JjZWl0KSk7CitjaGFyX3UgKmRvX29uZV9hcmcgX19BUkdTKChjaGFyX3UgKnN0cikpOwordm9pZCBzZXRfYXJnbGlzdCBfX0FSR1MoKGNoYXJfdSAqc3RyKSk7Cit2b2lkIGNoZWNrX2FyZ19pZHggX19BUkdTKCh3aW5fVCAqd2luKSk7Cit2b2lkIGV4X2FyZ3MgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfcHJldmlvdXMgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfcmV3aW5kIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X2xhc3QgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfYXJndW1lbnQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZG9fYXJnZmlsZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCwgaW50IGFyZ24pKTsKK3ZvaWQgZXhfbmV4dCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9hcmdlZGl0IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X2FyZ2FkZCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9hcmdkZWxldGUgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfbGlzdGRvIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X2NvbXBpbGVyIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X3J1bnRpbWUgX19BUkdTKChleGFyZ19UICplYXApKTsKK2ludCBjbWRfcnVudGltZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGFsbCkpOworaW50IGRvX2luX3J1bnRpbWVwYXRoIF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgYWxsLCB2b2lkICgqY2FsbGJhY2spKGNoYXJfdSAqZm5hbWUpKSk7Cit2b2lkIGV4X29wdGlvbnMgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfc291cmNlIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitsaW5lbnJfVCAqc291cmNlX2JyZWFrcG9pbnQgX19BUkdTKCh2b2lkICpjb29raWUpKTsKK2ludCAqc291cmNlX2RiZ190aWNrIF9fQVJHUygodm9pZCAqY29va2llKSk7CitpbnQgc291cmNlX2xldmVsIF9fQVJHUygodm9pZCAqY29va2llKSk7CitpbnQgZG9fc291cmNlIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgaW50IGNoZWNrX290aGVyLCBpbnQgaXNfdmltcmMpKTsKK3ZvaWQgZXhfc2NyaXB0bmFtZXMgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgc2NyaXB0bmFtZXNfc2xhc2hfYWRqdXN0IF9fQVJHUygodm9pZCkpOworY2hhcl91ICpnZXRfc2NyaXB0bmFtZSBfX0FSR1MoKHNjaWRfVCBpZCkpOworY2hhciAqZmdldHNfY3IgX19BUkdTKChjaGFyICpzLCBpbnQgbiwgRklMRSAqc3RyZWFtKSk7CitjaGFyX3UgKmdldHNvdXJjZWxpbmUgX19BUkdTKChpbnQgYywgdm9pZCAqY29va2llLCBpbnQgaW5kZW50KSk7Cit2b2lkIGV4X3NjcmlwdGVuY29kaW5nIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X2ZpbmlzaCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBkb19maW5pc2ggX19BUkdTKChleGFyZ19UICplYXAsIGludCByZWFuaW1hdGUpKTsKK2ludCBzb3VyY2VfZmluaXNoZWQgX19BUkdTKChjaGFyX3UgKigqZ2V0bGluZSkoaW50LCB2b2lkICosIGludCksIHZvaWQgKmNvb2tpZSkpOwordm9pZCBleF9jaGVja3RpbWUgX19BUkdTKChleGFyZ19UICplYXApKTsKK2ludCBnZXRfcHJpbnRlcl9wYWdlX251bSBfX0FSR1MoKHZvaWQpKTsKK2ludCBwcnRfaGVhZGVyX2hlaWdodCBfX0FSR1MoKHZvaWQpKTsKK2ludCBwcnRfdXNlX251bWJlciBfX0FSR1MoKHZvaWQpKTsKK2ludCBwcnRfZ2V0X3VuaXQgX19BUkdTKChpbnQgaWR4KSk7Cit2b2lkIGV4X2hhcmRjb3B5IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIG1jaF9wcmludF9jbGVhbnVwIF9fQVJHUygodm9pZCkpOworaW50IG1jaF9wcmludF9pbml0IF9fQVJHUygocHJ0X3NldHRpbmdzX1QgKnBzZXR0aW5ncywgY2hhcl91ICpqb2JuYW1lLCBpbnQgZm9yY2VpdCkpOworaW50IG1jaF9wcmludF9iZWdpbiBfX0FSR1MoKHBydF9zZXR0aW5nc19UICpwc2V0dGluZ3MpKTsKK3ZvaWQgbWNoX3ByaW50X2VuZCBfX0FSR1MoKHBydF9zZXR0aW5nc19UICpwc2V0dGluZ3MpKTsKK2ludCBtY2hfcHJpbnRfZW5kX3BhZ2UgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX3ByaW50X2JlZ2luX3BhZ2UgX19BUkdTKChjaGFyX3UgKnN0cikpOworaW50IG1jaF9wcmludF9ibGFua19wYWdlIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfcHJpbnRfc3RhcnRfbGluZSBfX0FSR1MoKGludCBtYXJnaW4sIGludCBwYWdlX2xpbmUpKTsKK2ludCBtY2hfcHJpbnRfdGV4dF9vdXQgX19BUkdTKChjaGFyX3UgKnAsIGludCBsZW4pKTsKK3ZvaWQgbWNoX3ByaW50X3NldF9mb250IF9fQVJHUygoaW50IGlCb2xkLCBpbnQgaUl0YWxpYywgaW50IGlVbmRlcmxpbmUpKTsKK3ZvaWQgbWNoX3ByaW50X3NldF9iZyBfX0FSR1MoKGxvbmdfdSBiZ2NvbCkpOwordm9pZCBtY2hfcHJpbnRfc2V0X2ZnIF9fQVJHUygobG9uZ191IGZnY29sKSk7CitjaGFyX3UgKmdldF9tZXNzX2xhbmcgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNldF9sYW5nX3ZhciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZXhfbGFuZ3VhZ2UgX19BUkdTKChleGFyZ19UICplYXApKTsKK2NoYXJfdSAqZ2V0X2xhbmdfYXJnIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBpbnQgaWR4KSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9leF9kb2NtZC5wcm8gYi9zcmMvcHJvdG8vZXhfZG9jbWQucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZmVjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vZXhfZG9jbWQucHJvCkBAIC0wLDAgKzEsNDEgQEAKKy8qIGV4X2RvY21kLmMgKi8KK3ZvaWQgZG9fZXhtb2RlIF9fQVJHUygoaW50IGltcHJvdmVkKSk7CitpbnQgZG9fY21kbGluZV9jbWQgX19BUkdTKChjaGFyX3UgKmNtZCkpOworaW50IGRvX2NtZGxpbmUgX19BUkdTKChjaGFyX3UgKmNtZGxpbmUsIGNoYXJfdSAqKCpnZXRsaW5lKShpbnQsIHZvaWQgKiwgaW50KSwgdm9pZCAqY29va2llLCBpbnQgZmxhZ3MpKTsKK2ludCBnZXRsaW5lX2VxdWFsIF9fQVJHUygoY2hhcl91ICooKmdldGxpbmUpKGludCwgdm9pZCAqLCBpbnQpLCB2b2lkICpjb29raWUsIGNoYXJfdSAqKCpmdW5jKShpbnQsIHZvaWQgKiwgaW50KSkpOwordm9pZCAqZ2V0bGluZV9jb29raWUgX19BUkdTKChjaGFyX3UgKigqZ2V0bGluZSkoaW50LCB2b2lkICosIGludCksIHZvaWQgKmNvb2tpZSkpOworaW50IGNtZF9leGlzdHMgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2NoYXJfdSAqc2V0X29uZV9jbWRfY29udGV4dCBfX0FSR1MoKGV4cGFuZF9UICp4cCwgY2hhcl91ICpidWZmKSk7CitjaGFyX3UgKnNraXBfcmFuZ2UgX19BUkdTKChjaGFyX3UgKmNtZCwgaW50ICpjdHgpKTsKK3ZvaWQgZXhfbmkgX19BUkdTKChleGFyZ19UICplYXApKTsKK2ludCBleHBhbmRfZmlsZW5hbWUgX19BUkdTKChleGFyZ19UICplYXAsIGNoYXJfdSAqKmNtZGxpbmVwLCBjaGFyX3UgKiplcnJvcm1zZ3ApKTsKK3ZvaWQgc2VwYXJhdGVfbmV4dGNtZCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworaW50IGVuZHNfZXhjbWQgX19BUkdTKChpbnQgYykpOworY2hhcl91ICpmaW5kX25leHRjbWQgX19BUkdTKChjaGFyX3UgKnApKTsKK2NoYXJfdSAqY2hlY2tfbmV4dGNtZCBfX0FSR1MoKGNoYXJfdSAqcCkpOworY2hhcl91ICpnZXRfY29tbWFuZF9uYW1lIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBpbnQgaWR4KSk7Cit2b2lkIHVjX2NsZWFyIF9fQVJHUygoZ2FycmF5X1QgKmdhcCkpOworY2hhcl91ICpnZXRfdXNlcl9jb21tYW5kcyBfX0FSR1MoKGV4cGFuZF9UICp4cCwgaW50IGlkeCkpOworY2hhcl91ICpnZXRfdXNlcl9jbWRfZmxhZ3MgX19BUkdTKChleHBhbmRfVCAqeHAsIGludCBpZHgpKTsKK2NoYXJfdSAqZ2V0X3VzZXJfY21kX25hcmdzIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBpbnQgaWR4KSk7CitjaGFyX3UgKmdldF91c2VyX2NtZF9jb21wbGV0ZSBfX0FSR1MoKGV4cGFuZF9UICp4cCwgaW50IGlkeCkpOwordm9pZCBub3RfZXhpdGluZyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgaGFuZGxlX2Ryb3AgX19BUkdTKChpbnQgZmlsZWMsIGNoYXJfdSAqKmZpbGV2LCBpbnQgc3BsaXQpKTsKK3ZvaWQgYWxpc3RfaW5pdCBfX0FSR1MoKGFsaXN0X1QgKmFsKSk7Cit2b2lkIGFsaXN0X3VubGluayBfX0FSR1MoKGFsaXN0X1QgKmFsKSk7Cit2b2lkIGFsaXN0X25ldyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgYWxpc3RfZXhwYW5kIF9fQVJHUygodm9pZCkpOwordm9pZCBhbGlzdF9zZXQgX19BUkdTKChhbGlzdF9UICphbCwgaW50IGNvdW50LCBjaGFyX3UgKipmaWxlcywgaW50IHVzZV9jdXJidWYpKTsKK3ZvaWQgYWxpc3RfYWRkIF9fQVJHUygoYWxpc3RfVCAqYWwsIGNoYXJfdSAqZm5hbWUsIGludCBzZXRfZm51bSkpOwordm9pZCBhbGlzdF9zbGFzaF9hZGp1c3QgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGV4X3NwbGl0dmlldyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBkb19leGVkaXQgX19BUkdTKChleGFyZ19UICplYXAsIHdpbl9UICpvbGRfY3Vyd2luKSk7Cit2b2lkIGRvX3NsZWVwIF9fQVJHUygobG9uZyBtc2VjKSk7CitGSUxFICpvcGVuX2V4ZmlsZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGludCBmb3JjZWl0LCBjaGFyICptb2RlKSk7Cit2b2lkIHVwZGF0ZV90b3BsaW5lX2N1cnNvciBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqZXZhbF92YXJzIF9fQVJHUygoY2hhcl91ICpzcmMsIGludCAqdXNlZGxlbiwgbGluZW5yX1QgKmxudW1wLCBjaGFyX3UgKiplcnJvcm1zZywgY2hhcl91ICpzcmNzdGFydCkpOworY2hhcl91ICpleHBhbmRfc2ZpbGUgX19BUkdTKChjaGFyX3UgKmFyZykpOworaW50IHB1dF9lb2wgX19BUkdTKChGSUxFICpmZCkpOworaW50IHB1dF9saW5lIF9fQVJHUygoRklMRSAqZmQsIGNoYXIgKnMpKTsKK3ZvaWQgZGlhbG9nX21zZyBfX0FSR1MoKGNoYXJfdSAqYnVmZiwgY2hhciAqZm9ybWF0LCBjaGFyX3UgKmZuYW1lKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9leF9ldmFsLnBybyBiL3NyYy9wcm90by9leF9ldmFsLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGVjZmNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2V4X2V2YWwucHJvCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGV4X2V2YWwuYyAqLworaW50IGFib3J0aW5nIF9fQVJHUygodm9pZCkpOwordm9pZCB1cGRhdGVfZm9yY2VfYWJvcnQgX19BUkdTKCh2b2lkKSk7CitpbnQgc2hvdWxkX2Fib3J0IF9fQVJHUygoaW50IHJldGNvZGUpKTsKK2ludCBhYm9ydGVkX2luX3RyeSBfX0FSR1MoKHZvaWQpKTsKK2ludCBjYXVzZV9lcnJ0aHJvdyBfX0FSR1MoKGNoYXJfdSAqbWVzZywgaW50IHNldmVyZSwgaW50ICppZ25vcmUpKTsKK3ZvaWQgZG9fZXJydGhyb3cgX19BUkdTKChzdHJ1Y3QgY29uZHN0YWNrICpjc3RhY2ssIGNoYXJfdSAqY21kbmFtZSkpOworaW50IGRvX2ludHRocm93IF9fQVJHUygoc3RydWN0IGNvbmRzdGFjayAqY3N0YWNrKSk7Cit2b2lkIGRpc2NhcmRfY3VycmVudF9leGNlcHRpb24gX19BUkdTKCh2b2lkKSk7Cit2b2lkIHJlcG9ydF9tYWtlX3BlbmRpbmcgX19BUkdTKChpbnQgcGVuZGluZywgdm9pZCAqdmFsdWUpKTsKK3ZvaWQgcmVwb3J0X3Jlc3VtZV9wZW5kaW5nIF9fQVJHUygoaW50IHBlbmRpbmcsIHZvaWQgKnZhbHVlKSk7Cit2b2lkIHJlcG9ydF9kaXNjYXJkX3BlbmRpbmcgX19BUkdTKChpbnQgcGVuZGluZywgdm9pZCAqdmFsdWUpKTsKK3ZvaWQgZXhfaWYgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfZW5kaWYgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfZWxzZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF93aGlsZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9jb250aW51ZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9icmVhayBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9lbmR3aGlsZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF90aHJvdyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBkb190aHJvdyBfX0FSR1MoKHN0cnVjdCBjb25kc3RhY2sgKmNzdGFjaykpOwordm9pZCBleF90cnkgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfY2F0Y2ggX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfZmluYWxseSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9lbmR0cnkgX19BUkdTKChleGFyZ19UICplYXApKTsKK2ludCBjbGVhbnVwX2NvbmRpdGlvbmFscyBfX0FSR1MoKHN0cnVjdCBjb25kc3RhY2sgKmNzdGFjaywgaW50IHNlYXJjaGVkX2NvbmQsIGludCBpbmNsdXNpdmUpKTsKK3ZvaWQgZXhfZW5kZnVuY3Rpb24gX19BUkdTKChleGFyZ19UICplYXApKTsKK2ludCBoYXNfd2hpbGVfY21kIF9fQVJHUygoY2hhcl91ICpwKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9leF9nZXRsbi5wcm8gYi9zcmMvcHJvdG8vZXhfZ2V0bG4ucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNzkxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vZXhfZ2V0bG4ucHJvCkBAIC0wLDAgKzEsNDcgQEAKKy8qIGV4X2dldGxuLmMgKi8KK2NoYXJfdSAqZ2V0Y21kbGluZSBfX0FSR1MoKGludCBmaXJzdGMsIGxvbmcgY291bnQsIGludCBpbmRlbnQpKTsKK2NoYXJfdSAqZ2V0Y21kbGluZV9wcm9tcHQgX19BUkdTKChpbnQgZmlyc3RjLCBjaGFyX3UgKnByb21wdCwgaW50IGF0dHIpKTsKK2NoYXJfdSAqZ2V0ZXhsaW5lIF9fQVJHUygoaW50IGMsIHZvaWQgKmR1bW15LCBpbnQgaW5kZW50KSk7CitjaGFyX3UgKmdldGV4bW9kZWxpbmUgX19BUkdTKChpbnQgYywgdm9pZCAqZHVtbXksIGludCBpbmRlbnQpKTsKK2ludCBjbWRsaW5lX292ZXJzdHJpa2UgX19BUkdTKCh2b2lkKSk7CitpbnQgY21kbGluZV9hdF9lbmQgX19BUkdTKCh2b2lkKSk7Citjb2xucl9UIGNtZGxpbmVfZ2V0dmNvbF9jdXJzb3IgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHB1dGNtZGxpbmUgX19BUkdTKChpbnQgYywgaW50IHNoaWZ0KSk7Cit2b2lkIHVucHV0Y21kbGluZSBfX0FSR1MoKHZvaWQpKTsKK2ludCBwdXRfb25fY21kbGluZSBfX0FSR1MoKGNoYXJfdSAqc3RyLCBpbnQgbGVuLCBpbnQgcmVkcmF3KSk7Cit2b2lkIHJlZHJhd2NtZGxpbmUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHJlZHJhd2NtZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY29tcHV0ZV9jbWRyb3cgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGdvdG9jbWRsaW5lIF9fQVJHUygoaW50IGNscikpOworY2hhcl91ICpFeHBhbmRPbmUgX19BUkdTKChleHBhbmRfVCAqeHAsIGNoYXJfdSAqc3RyLCBjaGFyX3UgKm9yaWcsIGludCBvcHRpb25zLCBpbnQgbW9kZSkpOwordm9pZCBFeHBhbmRJbml0IF9fQVJHUygoZXhwYW5kX1QgKnhwKSk7Cit2b2lkIEV4cGFuZENsZWFudXAgX19BUkdTKChleHBhbmRfVCAqeHApKTsKK3ZvaWQgRXhwYW5kRXNjYXBlIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBjaGFyX3UgKnN0ciwgaW50IG51bWZpbGVzLCBjaGFyX3UgKipmaWxlcywgaW50IG9wdGlvbnMpKTsKK3ZvaWQgdGlsZGVfcmVwbGFjZSBfX0FSR1MoKGNoYXJfdSAqb3JpZ19wYXQsIGludCBudW1fZmlsZXMsIGNoYXJfdSAqKmZpbGVzKSk7CitjaGFyX3UgKnNtX2dldHRhaWwgX19BUkdTKChjaGFyX3UgKnMpKTsKK2NoYXJfdSAqYWRkc3RhciBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGludCBsZW4sIGludCBjb250ZXh0KSk7Cit2b2lkIHNldF9jbWRfY29udGV4dCBfX0FSR1MoKGV4cGFuZF9UICp4cCwgY2hhcl91ICpzdHIsIGludCBsZW4sIGludCBjb2wpKTsKK2ludCBleHBhbmRfY21kbGluZSBfX0FSR1MoKGV4cGFuZF9UICp4cCwgY2hhcl91ICpzdHIsIGludCBjb2wsIGludCAqbWF0Y2hjb3VudCwgY2hhcl91ICoqKm1hdGNoZXMpKTsKK2ludCBFeHBhbmRHZW5lcmljIF9fQVJHUygoZXhwYW5kX1QgKnhwLCByZWdtYXRjaF9UICpyZWdtYXRjaCwgaW50ICpudW1fZmlsZSwgY2hhcl91ICoqKmZpbGUsIGNoYXJfdSAqKCgqZnVuYykoZXhwYW5kX1QgKiwgaW50KSkpKTsKK2NoYXJfdSAqZ2xvYnBhdGggX19BUkdTKChjaGFyX3UgKnBhdGgsIGNoYXJfdSAqZmlsZSkpOworaW50IGdldF9oaXN0dHlwZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBhZGRfdG9faGlzdG9yeSBfX0FSR1MoKGludCBoaXN0eXBlLCBjaGFyX3UgKm5ld19lbnRyeSwgaW50IGluX21hcCwgaW50IHNlcCkpOworaW50IGdldF9oaXN0b3J5X2lkeCBfX0FSR1MoKGludCBoaXN0eXBlKSk7CitjaGFyX3UgKmdldF9jbWRsaW5lX3N0ciBfX0FSR1MoKHZvaWQpKTsKK2ludCBnZXRfY21kbGluZV9wb3MgX19BUkdTKCh2b2lkKSk7CitpbnQgc2V0X2NtZGxpbmVfcG9zIF9fQVJHUygoaW50IHBvcykpOworY2hhcl91ICpnZXRfaGlzdG9yeV9lbnRyeSBfX0FSR1MoKGludCBoaXN0eXBlLCBpbnQgaWR4KSk7CitpbnQgY2xyX2hpc3RvcnkgX19BUkdTKChpbnQgaGlzdHlwZSkpOworaW50IGRlbF9oaXN0b3J5X2VudHJ5IF9fQVJHUygoaW50IGhpc3R5cGUsIGNoYXJfdSAqc3RyKSk7CitpbnQgZGVsX2hpc3RvcnlfaWR4IF9fQVJHUygoaW50IGhpc3R5cGUsIGludCBpZHgpKTsKK3ZvaWQgcmVtb3ZlX2tleV9mcm9tX2hpc3RvcnkgX19BUkdTKCh2b2lkKSk7CitpbnQgZ2V0X2xpc3RfcmFuZ2UgX19BUkdTKChjaGFyX3UgKipzdHIsIGludCAqbnVtMSwgaW50ICpudW0yKSk7Cit2b2lkIGV4X2hpc3RvcnkgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgcHJlcGFyZV92aW1pbmZvX2hpc3RvcnkgX19BUkdTKChpbnQgYXNrbGVuKSk7CitpbnQgcmVhZF92aW1pbmZvX2hpc3RvcnkgX19BUkdTKCh2aXJfVCAqdmlycCkpOwordm9pZCBmaW5pc2hfdmltaW5mb19oaXN0b3J5IF9fQVJHUygodm9pZCkpOwordm9pZCB3cml0ZV92aW1pbmZvX2hpc3RvcnkgX19BUkdTKChGSUxFICpmcCkpOwordm9pZCBjbWRfcGNoYXIgX19BUkdTKChpbnQgYywgaW50IG9mZnNldCkpOworaW50IGNtZF9nY2hhciBfX0FSR1MoKGludCBvZmZzZXQpKTsKK2NoYXJfdSAqc2NyaXB0X2dldCBfX0FSR1MoKGV4YXJnX1QgKmVhcCwgY2hhcl91ICpjbWQpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2ZpbGVpby5wcm8gYi9zcmMvcHJvdG8vZmlsZWlvLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTI3NWY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2ZpbGVpby5wcm8KQEAgLTAsMCArMSwzOSBAQAorLyogZmlsZWlvLmMgKi8KK3ZvaWQgZmlsZW1lc3MgX19BUkdTKChidWZfVCAqYnVmLCBjaGFyX3UgKm5hbWUsIGNoYXJfdSAqcywgaW50IGF0dHIpKTsKK2ludCByZWFkZmlsZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGNoYXJfdSAqc2ZuYW1lLCBsaW5lbnJfVCBmcm9tLCBsaW5lbnJfVCBsaW5lc190b19za2lwLCBsaW5lbnJfVCBsaW5lc190b19yZWFkLCBleGFyZ19UICplYXAsIGludCBmbGFncykpOworaW50IHByZXBfZXhhcmcgX19BUkdTKChleGFyZ19UICplYXAsIGJ1Zl9UICpidWYpKTsKK2ludCBidWZfd3JpdGUgX19BUkdTKChidWZfVCAqYnVmLCBjaGFyX3UgKmZuYW1lLCBjaGFyX3UgKnNmbmFtZSwgbGluZW5yX1Qgc3RhcnQsIGxpbmVucl9UIGVuZCwgZXhhcmdfVCAqZWFwLCBpbnQgYXBwZW5kLCBpbnQgZm9yY2VpdCwgaW50IHJlc2V0X2NoYW5nZWQsIGludCBmaWx0ZXJpbmcpKTsKK2NoYXJfdSAqc2hvcnRlbl9mbmFtZSBfX0FSR1MoKGNoYXJfdSAqZnVsbF9wYXRoLCBjaGFyX3UgKmRpcl9uYW1lKSk7Cit2b2lkIHNob3J0ZW5fZm5hbWVzIF9fQVJHUygoaW50IGZvcmNlKSk7Cit2b2lkIHNob3J0ZW5fZmlsZW5hbWVzIF9fQVJHUygoY2hhcl91ICoqZm5hbWVzLCBpbnQgY291bnQpKTsKK2NoYXJfdSAqbW9kbmFtZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGNoYXJfdSAqZXh0LCBpbnQgcHJlcGVuZF9kb3QpKTsKK2NoYXJfdSAqYnVmX21vZG5hbWUgX19BUkdTKChpbnQgc2hvcnRuYW1lLCBjaGFyX3UgKmZuYW1lLCBjaGFyX3UgKmV4dCwgaW50IHByZXBlbmRfZG90KSk7CitpbnQgdmltX2ZnZXRzIF9fQVJHUygoY2hhcl91ICpidWYsIGludCBzaXplLCBGSUxFICpmcCkpOworaW50IHRhZ19mZ2V0cyBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgc2l6ZSwgRklMRSAqZnApKTsKK2ludCB2aW1fcmVuYW1lIF9fQVJHUygoY2hhcl91ICpmcm9tLCBjaGFyX3UgKnRvKSk7CitpbnQgY2hlY2tfdGltZXN0YW1wcyBfX0FSR1MoKGludCBmb2N1cykpOworaW50IGJ1Zl9jaGVja190aW1lc3RhbXAgX19BUkdTKChidWZfVCAqYnVmLCBpbnQgZm9jdXMpKTsKK3ZvaWQgYnVmX3N0b3JlX3RpbWUgX19BUkdTKChidWZfVCAqYnVmLCBzdHJ1Y3Qgc3RhdCAqc3QsIGNoYXJfdSAqZm5hbWUpKTsKK3ZvaWQgd3JpdGVfbG51bV9hZGp1c3QgX19BUkdTKChsaW5lbnJfVCBvZmZzZXQpKTsKK3ZvaWQgdmltX2RlbHRlbXBkaXIgX19BUkdTKCh2b2lkKSk7CitjaGFyX3UgKnZpbV90ZW1wbmFtZSBfX0FSR1MoKGludCBleHRyYV9jaGFyKSk7Cit2b2lkIGZvcndhcmRfc2xhc2ggX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7Cit2b2lkIGRvX2F1Z3JvdXAgX19BUkdTKChjaGFyX3UgKmFyZywgaW50IGRlbF9ncm91cCkpOworaW50IGNoZWNrX2VpIF9fQVJHUygodm9pZCkpOwordm9pZCBkb19hdXRvY21kIF9fQVJHUygoY2hhcl91ICphcmcsIGludCBmb3JjZWl0KSk7CitpbnQgZG9fZG9hdXRvY21kIF9fQVJHUygoY2hhcl91ICphcmcsIGludCBkb19tc2cpKTsKK3ZvaWQgZXhfZG9hdXRvYWxsIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGF1Y21kX3ByZXBidWYgX19BUkdTKChhY29fc2F2ZV9UICphY28sIGJ1Zl9UICpidWYpKTsKK3ZvaWQgYXVjbWRfcmVzdGJ1ZiBfX0FSR1MoKGFjb19zYXZlX1QgKmFjbykpOworaW50IGFwcGx5X2F1dG9jbWRzIF9fQVJHUygoRVZFTlRfVCBldmVudCwgY2hhcl91ICpmbmFtZSwgY2hhcl91ICpmbmFtZV9pbywgaW50IGZvcmNlLCBidWZfVCAqYnVmKSk7CitpbnQgYXBwbHlfYXV0b2NtZHNfcmV0dmFsIF9fQVJHUygoRVZFTlRfVCBldmVudCwgY2hhcl91ICpmbmFtZSwgY2hhcl91ICpmbmFtZV9pbywgaW50IGZvcmNlLCBidWZfVCAqYnVmLCBpbnQgKnJldHZhbCkpOworaW50IGhhc19jdXJzb3Job2xkIF9fQVJHUygodm9pZCkpOworaW50IGhhc19hdXRvY21kIF9fQVJHUygoRVZFTlRfVCBldmVudCwgY2hhcl91ICpzZm5hbWUpKTsKK2NoYXJfdSAqZ2V0X2F1Z3JvdXBfbmFtZSBfX0FSR1MoKGV4cGFuZF9UICp4cCwgaW50IGlkeCkpOworY2hhcl91ICpzZXRfY29udGV4dF9pbl9hdXRvY21kIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBjaGFyX3UgKmFyZywgaW50IGRvYXV0b2NtZCkpOworY2hhcl91ICpnZXRfZXZlbnRfbmFtZSBfX0FSR1MoKGV4cGFuZF9UICp4cCwgaW50IGlkeCkpOworaW50IGF1X2V4aXN0cyBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgY2hhcl91ICpuYW1lX2VuZCwgY2hhcl91ICpwYXR0ZXJuKSk7CitpbnQgbWF0Y2hfZmlsZV9wYXQgX19BUkdTKChjaGFyX3UgKnBhdHRlcm4sIGNoYXJfdSAqZm5hbWUsIGNoYXJfdSAqc2ZuYW1lLCBjaGFyX3UgKnRhaWwsIGludCBhbGxvd19kaXJzKSk7CitpbnQgbWF0Y2hfZmlsZV9saXN0IF9fQVJHUygoY2hhcl91ICpsaXN0LCBjaGFyX3UgKnNmbmFtZSwgY2hhcl91ICpmZm5hbWUpKTsKK2NoYXJfdSAqZmlsZV9wYXRfdG9fcmVnX3BhdCBfX0FSR1MoKGNoYXJfdSAqcGF0LCBjaGFyX3UgKnBhdF9lbmQsIGNoYXIgKmFsbG93X2RpcnMsIGludCBub19ic2xhc2gpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2ZvbGQucHJvIGIvc3JjL3Byb3RvL2ZvbGQucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YWYzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vZm9sZC5wcm8KQEAgLTAsMCArMSw0MCBAQAorLyogZm9sZC5jICovCit2b2lkIGNvcHlGb2xkaW5nU3RhdGUgX19BUkdTKCh3aW5fVCAqd3BfZnJvbSwgd2luX1QgKndwX3RvKSk7CitpbnQgaGFzQW55Rm9sZGluZyBfX0FSR1MoKHdpbl9UICp3aW4pKTsKK2ludCBoYXNGb2xkaW5nIF9fQVJHUygobGluZW5yX1QgbG51bSwgbGluZW5yX1QgKmZpcnN0cCwgbGluZW5yX1QgKmxhc3RwKSk7CitpbnQgaGFzRm9sZGluZ1dpbiBfX0FSR1MoKHdpbl9UICp3aW4sIGxpbmVucl9UIGxudW0sIGxpbmVucl9UICpmaXJzdHAsIGxpbmVucl9UICpsYXN0cCwgaW50IGNhY2hlLCBmb2xkaW5mb19UICppbmZvcCkpOworaW50IGZvbGRMZXZlbCBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2ludCBsaW5lRm9sZGVkIF9fQVJHUygod2luX1QgKndpbiwgbGluZW5yX1QgbG51bSkpOworbG9uZyBmb2xkZWRDb3VudCBfX0FSR1MoKHdpbl9UICp3aW4sIGxpbmVucl9UIGxudW0sIGZvbGRpbmZvX1QgKmluZm9wKSk7CitpbnQgZm9sZG1ldGhvZElzTWFudWFsIF9fQVJHUygod2luX1QgKndwKSk7CitpbnQgZm9sZG1ldGhvZElzSW5kZW50IF9fQVJHUygod2luX1QgKndwKSk7CitpbnQgZm9sZG1ldGhvZElzRXhwciBfX0FSR1MoKHdpbl9UICp3cCkpOworaW50IGZvbGRtZXRob2RJc01hcmtlciBfX0FSR1MoKHdpbl9UICp3cCkpOworaW50IGZvbGRtZXRob2RJc1N5bnRheCBfX0FSR1MoKHdpbl9UICp3cCkpOworaW50IGZvbGRtZXRob2RJc0RpZmYgX19BUkdTKCh3aW5fVCAqd3ApKTsKK3ZvaWQgY2xvc2VGb2xkIF9fQVJHUygobGluZW5yX1QgbG51bSwgbG9uZyBjb3VudCkpOwordm9pZCBjbG9zZUZvbGRSZWN1cnNlIF9fQVJHUygobGluZW5yX1QgbG51bSkpOwordm9pZCBvcEZvbGRSYW5nZSBfX0FSR1MoKGxpbmVucl9UIGZpcnN0LCBsaW5lbnJfVCBsYXN0LCBpbnQgb3BlbmluZywgaW50IHJlY3Vyc2UsIGludCBoYWRfdmlzdWFsKSk7Cit2b2lkIG9wZW5Gb2xkIF9fQVJHUygobGluZW5yX1QgbG51bSwgbG9uZyBjb3VudCkpOwordm9pZCBvcGVuRm9sZFJlY3Vyc2UgX19BUkdTKChsaW5lbnJfVCBsbnVtKSk7Cit2b2lkIGZvbGRPcGVuQ3Vyc29yIF9fQVJHUygodm9pZCkpOwordm9pZCBuZXdGb2xkTGV2ZWwgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGZvbGRDaGVja0Nsb3NlIF9fQVJHUygodm9pZCkpOworaW50IGZvbGRNYW51YWxBbGxvd2VkIF9fQVJHUygoaW50IGNyZWF0ZSkpOwordm9pZCBmb2xkQ3JlYXRlIF9fQVJHUygobGluZW5yX1Qgc3RhcnQsIGxpbmVucl9UIGVuZCkpOwordm9pZCBkZWxldGVGb2xkIF9fQVJHUygobGluZW5yX1Qgc3RhcnQsIGxpbmVucl9UIGVuZCwgaW50IHJlY3Vyc2l2ZSwgaW50IGhhZF92aXN1YWwpKTsKK3ZvaWQgY2xlYXJGb2xkaW5nIF9fQVJHUygod2luX1QgKndpbikpOwordm9pZCBmb2xkVXBkYXRlIF9fQVJHUygod2luX1QgKndwLCBsaW5lbnJfVCB0b3AsIGxpbmVucl9UIGJvdCkpOwordm9pZCBmb2xkVXBkYXRlQWxsIF9fQVJHUygod2luX1QgKndpbikpOworaW50IGZvbGRNb3ZlVG8gX19BUkdTKChpbnQgdXBkb3duLCBpbnQgZGlyLCBsb25nIGNvdW50KSk7Cit2b2lkIGZvbGRJbml0V2luIF9fQVJHUygod2luX1QgKm5ld3dpbikpOworaW50IGZpbmRfd2xfZW50cnkgX19BUkdTKCh3aW5fVCAqd2luLCBsaW5lbnJfVCBsbnVtKSk7Cit2b2lkIGZvbGRBZGp1c3RWaXN1YWwgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGZvbGRBZGp1c3RDdXJzb3IgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGNsb25lRm9sZEdyb3dBcnJheSBfX0FSR1MoKGdhcnJheV9UICpmcm9tLCBnYXJyYXlfVCAqdG8pKTsKK3ZvaWQgZGVsZXRlRm9sZFJlY3Vyc2UgX19BUkdTKChnYXJyYXlfVCAqZ2FwKSk7Cit2b2lkIGZvbGRNYXJrQWRqdXN0IF9fQVJHUygod2luX1QgKndwLCBsaW5lbnJfVCBsaW5lMSwgbGluZW5yX1QgbGluZTIsIGxvbmcgYW1vdW50LCBsb25nIGFtb3VudF9hZnRlcikpOworaW50IGdldERlZXBlc3ROZXN0aW5nIF9fQVJHUygodm9pZCkpOwordm9pZCBmb2xkdGV4dF9jbGVhbnVwIF9fQVJHUygoY2hhcl91ICpzdHIpKTsKK2ludCBwdXRfZm9sZHMgX19BUkdTKChGSUxFICpmZCwgd2luX1QgKndwKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9nZXRjaGFyLnBybyBiL3NyYy9wcm90by9nZXRjaGFyLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQ5Yjc5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2dldGNoYXIucHJvCkBAIC0wLDAgKzEsNjEgQEAKKy8qIGdldGNoYXIuYyAqLwordm9pZCBmcmVlX2J1ZmYgX19BUkdTKChzdHJ1Y3QgYnVmZmhlYWRlciAqYnVmKSk7CitjaGFyX3UgKmdldF9yZWNvcmRlZCBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqZ2V0X2luc2VydGVkIF9fQVJHUygodm9pZCkpOworaW50IHN0dWZmX2VtcHR5IF9fQVJHUygodm9pZCkpOwordm9pZCB0eXBlYWhlYWRfbm9mbHVzaCBfX0FSR1MoKGludCBjKSk7Cit2b2lkIGZsdXNoX2J1ZmZlcnMgX19BUkdTKChpbnQgdHlwZWFoZWFkKSk7Cit2b2lkIFJlc2V0UmVkb2J1ZmYgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNhdmVSZWRvYnVmZiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgcmVzdG9yZVJlZG9idWZmIF9fQVJHUygodm9pZCkpOwordm9pZCBBcHBlbmRUb1JlZG9idWZmIF9fQVJHUygoY2hhcl91ICpzKSk7Cit2b2lkIEFwcGVuZFRvUmVkb2J1ZmZMaXQgX19BUkdTKChjaGFyX3UgKnMpKTsKK3ZvaWQgQXBwZW5kQ2hhclRvUmVkb2J1ZmYgX19BUkdTKChpbnQgYykpOwordm9pZCBBcHBlbmROdW1iZXJUb1JlZG9idWZmIF9fQVJHUygobG9uZyBuKSk7Cit2b2lkIHN0dWZmUmVhZGJ1ZmYgX19BUkdTKChjaGFyX3UgKnMpKTsKK3ZvaWQgc3R1ZmZSZWFkYnVmZkxlbiBfX0FSR1MoKGNoYXJfdSAqcywgbG9uZyBsZW4pKTsKK3ZvaWQgc3R1ZmZSZWFkYnVmZlNwZWMgX19BUkdTKChjaGFyX3UgKnMpKTsKK3ZvaWQgc3R1ZmZjaGFyUmVhZGJ1ZmYgX19BUkdTKChpbnQgYykpOwordm9pZCBzdHVmZm51bVJlYWRidWZmIF9fQVJHUygobG9uZyBuKSk7CitpbnQgc3RhcnRfcmVkbyBfX0FSR1MoKGxvbmcgY291bnQsIGludCBvbGRfcmVkbykpOworaW50IHN0YXJ0X3JlZG9faW5zIF9fQVJHUygodm9pZCkpOwordm9pZCBzdG9wX3JlZG9faW5zIF9fQVJHUygodm9pZCkpOworaW50IGluc190eXBlYnVmIF9fQVJHUygoY2hhcl91ICpzdHIsIGludCBub3JlbWFwLCBpbnQgb2Zmc2V0LCBpbnQgbm90dHlwZWQsIGludCBzaWxlbnQpKTsKK2ludCB0eXBlYnVmX2NoYW5nZWQgX19BUkdTKChpbnQgdGJfY2hhbmdlX2NudCkpOworaW50IHR5cGVidWZfdHlwZWQgX19BUkdTKCh2b2lkKSk7CitpbnQgdHlwZWJ1Zl9tYXBsZW4gX19BUkdTKCh2b2lkKSk7Cit2b2lkIGRlbF90eXBlYnVmIF9fQVJHUygoaW50IGxlbiwgaW50IG9mZnNldCkpOworaW50IGFsbG9jX3R5cGVidWYgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGZyZWVfdHlwZWJ1ZiBfX0FSR1MoKHZvaWQpKTsKK2ludCBzYXZlX3R5cGVidWYgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNhdmVfdHlwZWFoZWFkIF9fQVJHUygodGFzYXZlX1QgKnRwKSk7Cit2b2lkIHJlc3RvcmVfdHlwZWFoZWFkIF9fQVJHUygodGFzYXZlX1QgKnRwKSk7Cit2b2lkIG9wZW5zY3JpcHQgX19BUkdTKChjaGFyX3UgKm5hbWUsIGludCBkaXJlY3RseSkpOworaW50IHVzaW5nX3NjcmlwdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgdXBkYXRlc2NyaXB0IF9fQVJHUygoaW50IGMpKTsKK2ludCB2Z2V0YyBfX0FSR1MoKHZvaWQpKTsKK2ludCBzYWZlX3ZnZXRjIF9fQVJHUygodm9pZCkpOworaW50IHZwZWVrYyBfX0FSR1MoKHZvaWQpKTsKK2ludCB2cGVla2Nfbm9tYXAgX19BUkdTKCh2b2lkKSk7CitpbnQgdnBlZWtjX2FueSBfX0FSR1MoKHZvaWQpKTsKK2ludCBjaGFyX2F2YWlsIF9fQVJHUygodm9pZCkpOwordm9pZCB2dW5nZXRjIF9fQVJHUygoaW50IGMpKTsKK2ludCBpbmNoYXIgX19BUkdTKChjaGFyX3UgKmJ1ZiwgaW50IG1heGxlbiwgbG9uZyB3YWl0X3RpbWUsIGludCB0Yl9jaGFuZ2VfY250KSk7CitpbnQgZml4X2lucHV0X2J1ZmZlciBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgbGVuLCBpbnQgc2NyaXB0KSk7CitpbnQgaW5wdXRfYXZhaWxhYmxlIF9fQVJHUygodm9pZCkpOworaW50IGRvX21hcCBfX0FSR1MoKGludCBtYXB0eXBlLCBjaGFyX3UgKmFyZywgaW50IG1vZGUsIGludCBhYmJyZXYpKTsKK2ludCBnZXRfbWFwX21vZGUgX19BUkdTKChjaGFyX3UgKipjbWRwLCBpbnQgZm9yY2VpdCkpOwordm9pZCBtYXBfY2xlYXIgX19BUkdTKChjaGFyX3UgKmNtZHAsIGNoYXJfdSAqYXJnLCBpbnQgZm9yY2VpdCwgaW50IGFiYnIpKTsKK3ZvaWQgbWFwX2NsZWFyX2ludCBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBtb2RlLCBpbnQgbG9jYWwsIGludCBhYmJyKSk7CitpbnQgbWFwX3RvX2V4aXN0cyBfX0FSR1MoKGNoYXJfdSAqc3RyLCBjaGFyX3UgKm1vZGVjaGFycykpOworaW50IG1hcF90b19leGlzdHNfbW9kZSBfX0FSR1MoKGNoYXJfdSAqcmhzLCBpbnQgbW9kZSkpOworY2hhcl91ICpzZXRfY29udGV4dF9pbl9tYXBfY21kIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBjaGFyX3UgKmNtZCwgY2hhcl91ICphcmcsIGludCBmb3JjZWl0LCBpbnQgaXNhYmJyZXYsIGludCBpc3VubWFwLCBjbWRpZHhfVCBjbWRpZHgpKTsKK2ludCBFeHBhbmRNYXBwaW5ncyBfX0FSR1MoKHJlZ21hdGNoX1QgKnJlZ21hdGNoLCBpbnQgKm51bV9maWxlLCBjaGFyX3UgKioqZmlsZSkpOworaW50IGNoZWNrX2FiYnIgX19BUkdTKChpbnQgYywgY2hhcl91ICpwdHIsIGludCBjb2wsIGludCBtaW5jb2wpKTsKK2ludCBtYWtlbWFwIF9fQVJHUygoRklMRSAqZmQsIGJ1Zl9UICpidWYpKTsKK2ludCBwdXRfZXNjc3RyIF9fQVJHUygoRklMRSAqZmQsIGNoYXJfdSAqc3Ryc3RhcnQsIGludCB3aGF0KSk7Cit2b2lkIGNoZWNrX21hcF9rZXljb2RlcyBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqY2hlY2tfbWFwIF9fQVJHUygoY2hhcl91ICprZXlzLCBpbnQgbW9kZSwgaW50IGV4YWN0KSk7Cit2b2lkIGluaXRfbWFwcGluZ3MgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGFkZF9tYXAgX19BUkdTKChjaGFyX3UgKm1hcCwgaW50IG1vZGUpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2d1aS5wcm8gYi9zcmMvcHJvdG8vZ3VpLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjI1NGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2d1aS5wcm8KQEAgLTAsMCArMSw2MSBAQAorLyogZ3VpLmMgKi8KK3ZvaWQgZ3VpX3N0YXJ0IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfcHJlcGFyZSBfX0FSR1MoKGludCAqYXJnYywgY2hhciAqKmFyZ3YpKTsKK2ludCBndWlfaW5pdF9jaGVjayBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX2luaXQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9leGl0IF9fQVJHUygoaW50IHJjKSk7Cit2b2lkIGd1aV9zaGVsbF9jbG9zZWQgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX2luaXRfZm9udCBfX0FSR1MoKGNoYXJfdSAqZm9udF9saXN0LCBpbnQgZm9udHNldCkpOworaW50IGd1aV9nZXRfd2lkZV9mb250IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfc2V0X2N1cnNvciBfX0FSR1MoKGludCByb3csIGludCBjb2wpKTsKK3ZvaWQgZ3VpX3VwZGF0ZV9jdXJzb3IgX19BUkdTKChpbnQgZm9yY2UsIGludCBjbGVhcl9zZWxlY3Rpb24pKTsKK3ZvaWQgZ3VpX3Bvc2l0aW9uX21lbnUgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX2dldF9iYXNlX3dpZHRoIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9nZXRfYmFzZV9oZWlnaHQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9yZXNpemVfc2hlbGwgX19BUkdTKChpbnQgcGl4ZWxfd2lkdGgsIGludCBwaXhlbF9oZWlnaHQpKTsKK3ZvaWQgZ3VpX21heV9yZXNpemVfc2hlbGwgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX2dldF9zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9zZXRfc2hlbGxzaXplIF9fQVJHUygoaW50IG11c3RzZXQsIGludCBmaXRfdG9fZGlzcGxheSkpOwordm9pZCBndWlfbmV3X3NoZWxsc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX3Jlc2V0X3Njcm9sbF9yZWdpb24gX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9zdGFydF9oaWdobGlnaHQgX19BUkdTKChpbnQgbWFzaykpOwordm9pZCBndWlfc3RvcF9oaWdobGlnaHQgX19BUkdTKChpbnQgbWFzaykpOwordm9pZCBndWlfY2xlYXJfYmxvY2sgX19BUkdTKChpbnQgcm93MSwgaW50IGNvbDEsIGludCByb3cyLCBpbnQgY29sMikpOwordm9pZCBndWlfdXBkYXRlX2N1cnNvcl9sYXRlciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX3dyaXRlIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGVuKSk7Cit2b2lkIGd1aV9kb250X3VwZGF0ZV9jdXJzb3IgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9jYW5fdXBkYXRlX2N1cnNvciBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfb3V0c3RyX25vd3JhcCBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGxlbiwgaW50IGZsYWdzLCBndWljb2xvcl9UIGZnLCBndWljb2xvcl9UIGJnLCBpbnQgYmFjaykpOwordm9pZCBndWlfdW5kcmF3X2N1cnNvciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX3JlZHJhdyBfX0FSR1MoKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSk7CitpbnQgZ3VpX3JlZHJhd19ibG9jayBfX0FSR1MoKGludCByb3cxLCBpbnQgY29sMSwgaW50IHJvdzIsIGludCBjb2wyLCBpbnQgZmxhZ3MpKTsKK2ludCBndWlfd2FpdF9mb3JfY2hhcnMgX19BUkdTKChsb25nIHd0aW1lKSk7Cit2b2lkIGd1aV9zZW5kX21vdXNlX2V2ZW50IF9fQVJHUygoaW50IGJ1dHRvbiwgaW50IHgsIGludCB5LCBpbnQgcmVwZWF0ZWRfY2xpY2ssIGludF91IG1vZGlmaWVycykpOworaW50IGd1aV94eTJjb2xyb3cgX19BUkdTKChpbnQgeCwgaW50IHksIGludCAqY29scCkpOwordm9pZCBndWlfbWVudV9jYiBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSkpOwordm9pZCBndWlfaW5pdF93aGljaF9jb21wb25lbnRzIF9fQVJHUygoY2hhcl91ICpvbGR2YWwpKTsKK3ZvaWQgZ3VpX2NyZWF0ZV9zY3JvbGxiYXIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGludCB0eXBlLCB3aW5fVCAqd3ApKTsKK3Njcm9sbGJhcl9UICpndWlfZmluZF9zY3JvbGxiYXIgX19BUkdTKChsb25nIGlkZW50KSk7Cit2b2lkIGd1aV9kcmFnX3Njcm9sbGJhciBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgbG9uZyB2YWx1ZSwgaW50IHN0aWxsX2RyYWdnaW5nKSk7Cit2b2lkIGd1aV91cGRhdGVfc2Nyb2xsYmFycyBfX0FSR1MoKGludCBmb3JjZSkpOworaW50IGd1aV9kb19zY3JvbGwgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX2RvX2hvcml6X3Njcm9sbCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX2NoZWNrX2NvbG9ycyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX3NldF9mZ19jb2xvciBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBndWlfc2V0X2JnX2NvbG9yIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitndWljb2xvcl9UIGd1aV9nZXRfY29sb3IgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBndWlfZ2V0X2xpZ2h0bmVzcyBfX0FSR1MoKGd1aWNvbG9yX1QgcGl4ZWwpKTsKK3ZvaWQgZ3VpX25ld19zY3JvbGxiYXJfY29sb3JzIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfZm9jdXNfY2hhbmdlIF9fQVJHUygoaW50IGluX2ZvY3VzKSk7Cit2b2lkIGd1aV9tb3VzZV9tb3ZlZCBfX0FSR1MoKGludCB4LCBpbnQgeSkpOwordm9pZCBndWlfbW91c2VfY29ycmVjdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZXhfZ3VpIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitpbnQgZ3VpX2ZpbmRfYml0bWFwIF9fQVJHUygoY2hhcl91ICpuYW1lLCBjaGFyX3UgKmJ1ZmZlciwgY2hhciAqZXh0KSk7Cit2b2lkIGd1aV9maW5kX2ljb25maWxlIF9fQVJHUygoY2hhcl91ICpuYW1lLCBjaGFyX3UgKmJ1ZmZlciwgY2hhciAqZXh0KSk7Cit2b2lkIGRpc3BsYXlfZXJyb3JzIF9fQVJHUygodm9pZCkpOworaW50IG5vX2NvbnNvbGVfaW5wdXQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV91cGRhdGVfc2NyZWVuIF9fQVJHUygodm9pZCkpOworY2hhcl91ICpnZXRfZmluZF9kaWFsb2dfdGV4dCBfX0FSR1MoKGNoYXJfdSAqYXJnLCBpbnQgKnd3b3JkcCwgaW50ICptY2FzZXApKTsKK2ludCBndWlfZG9fZmluZHJlcGwgX19BUkdTKChpbnQgZmxhZ3MsIGNoYXJfdSAqZmluZF90ZXh0LCBjaGFyX3UgKnJlcGxfdGV4dCwgaW50IGRvd24pKTsKK3ZvaWQgZ3VpX2hhbmRsZV9kcm9wIF9fQVJHUygoaW50IHgsIGludCB5LCBpbnRfdSBtb2RpZmllcnMsIGNoYXJfdSAqKmZuYW1lcywgaW50IGNvdW50KSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9ndWlfYW1pZ2EucHJvIGIvc3JjL3Byb3RvL2d1aV9hbWlnYS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3MGJjMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9ndWlfYW1pZ2EucHJvCkBAIC0wLDAgKzEsNjcgQEAKKy8qIGd1aV9hbWlnYS5jICovCit2b2lkIGd1aV9tY2hfYWRkX21lbnVfaXRlbSBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSwgaW50IGlkeCkpOwordm9pZCBndWlfbWNoX2FkZF9tZW51IF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgaWR4KSk7Cit2b2lkIGd1aV9tY2hfdG9nZ2xlX3RlYXJvZmZzIF9fQVJHUygoaW50IGVuYWJsZSkpOworaW50IGd1aV9tY2hfc2V0X2JsaW5raW5nIF9fQVJHUygobG9uZyB3YWl0LCBsb25nIG9uLCBsb25nIG9mZikpOwordm9pZCBndWlfbWNoX3ByZXBhcmUgX19BUkdTKChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2KSk7Cit2b2lkIGF0ZXhpdERvVGhpcyBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX2luaXRfY2hlY2sgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9pbml0IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX25ld19jb2xvcnMgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9vcGVuIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2V4aXQgX19BUkdTKChpbnQgcmV0dXJuQ29kZSkpOworaW50IGd1aV9tY2hfZ2V0X3dpbnBvcyBfX0FSR1MoKGludCAqeCwgaW50ICp5KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3dpbnBvcyBfX0FSR1MoKGludCB4LCBpbnQgeSkpOwordm9pZCBndWlfbWNoX3NldF9zaGVsbHNpemUgX19BUkdTKChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtaW5fd2lkdGgsIGludCBtaW5faGVpZ2h0LCBpbnQgYmFzZV93aWR0aCwgaW50IGJhc2VfaGVpZ2h0KSk7Cit2b2lkIGd1aV9tY2hfZ2V0X3NjcmVlbl9kaW1lbnNpb25zIF9fQVJHUygoaW50ICpzY3JlZW5fdywgaW50ICpzY3JlZW5faCkpOwordm9pZCBndWlfbWNoX3NldF90ZXh0X2FyZWFfcG9zIF9fQVJHUygoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpKTsKK3ZvaWQgZ3VpX21jaF9lbmFibGVfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgZmxhZykpOwordm9pZCBndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGxvbmcgdmFsLCBsb25nIHNpemUsIGxvbmcgbWF4KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3Njcm9sbGJhcl9wb3MgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSk7Cit2b2lkIGd1aV9tY2hfY3JlYXRlX3Njcm9sbGJhciBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgaW50IG9yaWVudCkpOwordm9pZCBndWlfbWNoX2Rlc3Ryb3lfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiKSk7CitpbnQgZ3VpX21jaF9pbml0X2ZvbnQgX19BUkdTKChjaGFyX3UgKmZvbnRfbmFtZSwgaW50IGZvbnRzZXQpKTsKK2ludCBndWlfbWNoX2FkanVzdF9jaGFyc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK0d1aUZvbnQgZ3VpX21jaF9nZXRfZm9udCBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGdpdmVFcnJvcklmTWlzc2luZykpOwordm9pZCBndWlfbWNoX3NldF9mb250IF9fQVJHUygoR3VpRm9udCBmb250KSk7Cit2b2lkIGd1aV9tY2hfZnJlZV9mb250IF9fQVJHUygoR3VpRm9udCBmb250KSk7CitndWljb2xvcl9UIGd1aV9tY2hfZ2V0X2NvbG9yIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2NvbG9ycyBfX0FSR1MoKGd1aWNvbG9yX1QgZmcsIGd1aWNvbG9yX1QgYmcpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZmdfY29sb3IgX19BUkdTKChndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2JnX2NvbG9yIF9fQVJHUygoZ3VpY29sb3JfVCBjb2xvcikpOwordm9pZCBndWlfbWNoX2RyYXdfc3RyaW5nIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCwgY2hhcl91ICpzLCBpbnQgbGVuLCBpbnQgZmxhZ3MpKTsKK2ludCBndWlfbWNoX2hhc2tleSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBndWlfbWNoX2JlZXAgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZmxhc2ggX19BUkdTKChpbnQgbXNlYykpOwordm9pZCBndWlfbWNoX2ludmVydF9yZWN0YW5nbGUgX19BUkdTKChpbnQgciwgaW50IGMsIGludCBuciwgaW50IG5jKSk7Cit2b2lkIGd1aV9tY2hfaWNvbmlmeSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZm9yZWdyb3VuZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXR0aXRsZSBfX0FSR1MoKGNoYXJfdSAqdGl0bGUsIGNoYXJfdSAqaWNvbikpOwordm9pZCBndWlfbWNoX3N0b3BfYmxpbmsgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc3RhcnRfYmxpbmsgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19ob2xsb3dfY3Vyc29yIF9fQVJHUygoZ3VpY29sb3JfVCBjb2xvcikpOwordm9pZCBndWlfbWNoX2RyYXdfcGFydF9jdXJzb3IgX19BUkdTKChpbnQgdywgaW50IGgsIGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF91cGRhdGUgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF93YWl0X2Zvcl9jaGFycyBfX0FSR1MoKGludCB3dGltZSkpOwordm9pZCBndWlfbWNoX2ZsdXNoIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2NsZWFyX2Jsb2NrIF9fQVJHUygoaW50IHJvdzEsIGludCBjb2wxLCBpbnQgcm93MiwgaW50IGNvbDIpKTsKK3ZvaWQgZ3VpX21jaF9jbGVhcl9hbGwgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZGVsZXRlX2xpbmVzIF9fQVJHUygoaW50IHJvdywgaW50IG51bV9saW5lcykpOwordm9pZCBndWlfbWNoX2luc2VydF9saW5lcyBfX0FSR1MoKGludCByb3csIGludCBudW1fbGluZXMpKTsKK3ZvaWQgZ3VpX21jaF9lbmFibGVfbWVudSBfX0FSR1MoKGludCBmbGFnKSk7Cit2b2lkIGd1aV9tY2hfc2V0X21lbnVfcG9zIF9fQVJHUygoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpKTsKK3ZvaWQgZ3VpX21jaF9kZXN0cm95X21lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX21jaF9tZW51X2dyZXkgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBncmV5KSk7Cit2b2lkIGd1aV9tY2hfbWVudV9oaWRkZW4gX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBoaWRkZW4pKTsKK3ZvaWQgZ3VpX21jaF9kcmF3X21lbnViYXIgX19BUkdTKCh2b2lkKSk7CitpbnQgY2xpcF9tY2hfb3duX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIG1jaF9zZXRtb3VzZSBfX0FSR1MoKGludCBvbikpOworaW50IGd1aV9tY2hfZ2V0X21vdXNlX3ggX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9nZXRfbW91c2VfeSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRtb3VzZSBfX0FSR1MoKGludCB4LCBpbnQgeSkpOwordm9pZCBndWlfbWNoX3Nob3dfcG9wdXBtZW51IF9fQVJHUygodmltbWVudV9UICptZW51KSk7Cit2b2lkIGNsaXBfbWNoX2xvc2Vfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgY2xpcF9tY2hfcmVxdWVzdF9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOwordm9pZCBjbGlwX21jaF9zZXRfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK2xvbmdfdSBndWlfbWNoX2dldF9yZ2IgX19BUkdTKChndWljb2xvcl9UIHBpeGVsKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9ndWlfYXRoZW5hLnBybyBiL3NyYy9wcm90by9ndWlfYXRoZW5hLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTNjMzNiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2d1aV9hdGhlbmEucHJvCkBAIC0wLDAgKzEsMzEgQEAKKy8qIGd1aV9hdGhlbmEuYyAqLwordm9pZCBndWlfeDExX2NyZWF0ZV93aWRnZXRzIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfeDExX2Rlc3Ryb3lfd2lkZ2V0cyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfdG9vbGJhcl9wb3MgX19BUkdTKChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkpOwordm9pZCBndWlfbWNoX3NldF90ZXh0X2FyZWFfcG9zIF9fQVJHUygoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpKTsKK3ZvaWQgZ3VpX3gxMV9zZXRfYmFja19jb2xvciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9lbmFibGVfbWVudSBfX0FSR1MoKGludCBmbGFnKSk7Cit2b2lkIGd1aV9tY2hfc2V0X21lbnVfcG9zIF9fQVJHUygoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpKTsKK3ZvaWQgZ3VpX21jaF9hZGRfbWVudSBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSwgaW50IGlkeCkpOwordm9pZCBndWlfbWNoX25ld19tZW51X2ZvbnQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfbmV3X3Rvb2x0aXBfZm9udCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9uZXdfdG9vbHRpcF9jb2xvcnMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfYWRkX21lbnVfaXRlbSBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSwgaW50IGlkeCkpOwordm9pZCBndWlfbWNoX3Nob3dfdG9vbGJhciBfX0FSR1MoKGludCBzaG93aXQpKTsKK2ludCBndWlfbWNoX2NvbXB1dGVfdG9vbGJhcl9oZWlnaHQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZ2V0X3Rvb2xiYXJfY29sb3JzIF9fQVJHUygoUGl4ZWwgKmJncCwgUGl4ZWwgKmZncCwgUGl4ZWwgKmJzcCwgUGl4ZWwgKnRzcCwgUGl4ZWwgKmhzcCkpOwordm9pZCBndWlfbWNoX3RvZ2dsZV90ZWFyb2ZmcyBfX0FSR1MoKGludCBlbmFibGUpKTsKK3ZvaWQgZ3VpX21jaF9uZXdfbWVudV9jb2xvcnMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZGVzdHJveV9tZW51IF9fQVJHUygodmltbWVudV9UICptZW51KSk7Cit2b2lkIGd1aV9tY2hfc2hvd19wb3B1cG1lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX21jaF9kZWZfY29sb3JzIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGxvbmcgdmFsLCBsb25nIHNpemUsIGxvbmcgbWF4KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3Njcm9sbGJhcl9wb3MgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSk7Cit2b2lkIGd1aV9tY2hfZW5hYmxlX3Njcm9sbGJhciBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgaW50IGZsYWcpKTsKK3ZvaWQgZ3VpX21jaF9jcmVhdGVfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgb3JpZW50KSk7Cit2b2lkIGd1aV9tY2hfZGVzdHJveV9zY3JvbGxiYXIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX2NvbG9ycyBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYikpOworV2luZG93IGd1aV94MTFfZ2V0X3dpZCBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqZ3VpX21jaF9icm93c2UgX19BUkdTKChpbnQgc2F2aW5nLCBjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmRmbHQsIGNoYXJfdSAqZXh0LCBjaGFyX3UgKmluaXRkaXIsIGNoYXJfdSAqZmlsdGVyKSk7CitpbnQgZ3VpX21jaF9kaWFsb2cgX19BUkdTKChpbnQgdHlwZSwgY2hhcl91ICp0aXRsZSwgY2hhcl91ICptZXNzYWdlLCBjaGFyX3UgKmJ1dHRvbnMsIGludCBkZmx0YnV0dG9uLCBjaGFyX3UgKnRleHRmaWVsZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZ3VpX2Jlb3MucHJvIGIvc3JjL3Byb3RvL2d1aV9iZW9zLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjUyODg1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2d1aV9iZW9zLnBybwpAQCAtMCwwICsxLDE0IEBACisvKiBndWlfYmVvcy5jYyAtIGhhbmQgY3JhZnRlZCAqLworaW50IHZpbV9sb2NrX3NjcmVlbiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgdmltX3VubG9ja19zY3JlZW4gX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfcHJlcGFyZSBfX0FSR1MoKGludCAqYXJnYywgY2hhciAqKmFyZ3YpKTsKK2ludCBndWlfbWNoX2luaXQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfbmV3X2NvbG9ycyBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX29wZW4gX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZXhpdCBfX0FSR1MoKGludCB2aW1fZXhpdGNvZGUpKTsKK0d1aUZvbnQgZ3VpX21jaF9nZXRfZm9udCBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGdpdmVFcnJvcklmTWlzc2luZykpOwordm9pZCBndWlfbWNoX3NldF9iZ19jb2xvciBfX0FSR1MoKGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZm9udCBfX0FSR1MoKEd1aUZvbnQgZm9udCkpOwordm9pZCBndWlfbWNoX2ZsdXNoIF9fQVJHUygodm9pZCkpOworbG9uZ191IGd1aV9tY2hfZ2V0X3JnYiBfX0FSR1MoKGd1aWNvbG9yX1QgcGl4ZWwpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfd2lucG9zIF9fQVJHUygoaW50IHgsIGludCB5KSk7CmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZ3VpX2JldmFsLnBybyBiL3NyYy9wcm90by9ndWlfYmV2YWwucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MGIwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vZ3VpX2JldmFsLnBybwpAQCAtMCwwICsxLDEwIEBACisvKiBndWlfYmV2YWwuYyAqLworQmFsbG9vbkV2YWwgKmd1aV9tY2hfY3JlYXRlX2JldmFsX2FyZWEgX19BUkdTKCh2b2lkICp0YXJnZXQsIGNoYXJfdSAqbWVzZywgdm9pZCAoKm1lc2dDQikoQmFsbG9vbkV2YWwgKiwgaW50KSwgdm9pZCAqY2xpZW50RGF0YSkpOwordm9pZCBndWlfbWNoX2Rlc3Ryb3lfYmV2YWxfYXJlYSBfX0FSR1MoKEJhbGxvb25FdmFsICpiZXZhbCkpOwordm9pZCBndWlfbWNoX2VuYWJsZV9iZXZhbF9hcmVhIF9fQVJHUygoQmFsbG9vbkV2YWwgKmJldmFsKSk7Cit2b2lkIGd1aV9tY2hfZGlzYWJsZV9iZXZhbF9hcmVhIF9fQVJHUygoQmFsbG9vbkV2YWwgKmJldmFsKSk7CitCYWxsb29uRXZhbCAqZ3VpX21jaF9jdXJyZW50bHlfc2hvd2luZ19iZXZhbCBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX2dldF9iZXZhbF9pbmZvIF9fQVJHUygoQmFsbG9vbkV2YWwgKmJldmFsLCBjaGFyX3UgKipmaWxlbmFtZSwgaW50ICpsaW5lLCBjaGFyX3UgKip0ZXh0LCBpbnQgKmlkeCkpOwordm9pZCBndWlfbWNoX3Bvc3RfYmFsbG9vbiBfX0FSR1MoKEJhbGxvb25FdmFsICpiZXZhbCwgY2hhcl91ICptZXNnKSk7Cit2b2lkIGd1aV9tY2hfdW5wb3N0X2JhbGxvb24gX19BUkdTKChCYWxsb29uRXZhbCAqYmV2YWwpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2d1aV9ndGsucHJvIGIvc3JjL3Byb3RvL2d1aV9ndGsucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZjIyMDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vZ3VpX2d0ay5wcm8KQEAgLTAsMCArMSwyNCBAQAorLyogZ3VpX2d0ay5jICovCit2b2lkIGd1aV9ndGtfcmVnaXN0ZXJfc3RvY2tfaWNvbnMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfYWRkX21lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBpZHgpKTsKK3ZvaWQgZ3VpX21jaF9hZGRfbWVudV9pdGVtIF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgaWR4KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3RleHRfYXJlYV9wb3MgX19BUkdTKChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkpOwordm9pZCBndWlfZ3RrX3NldF9tbmVtb25pY3MgX19BUkdTKChpbnQgZW5hYmxlKSk7Cit2b2lkIGd1aV9tY2hfdG9nZ2xlX3RlYXJvZmZzIF9fQVJHUygoaW50IGVuYWJsZSkpOwordm9pZCBndWlfbWNoX21lbnVfc2V0X3RpcCBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSkpOwordm9pZCBndWlfbWNoX2Rlc3Ryb3lfbWVudSBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSkpOwordm9pZCBndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGxvbmcgdmFsLCBsb25nIHNpemUsIGxvbmcgbWF4KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3Njcm9sbGJhcl9wb3MgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSk7Cit2b2lkIGd1aV9tY2hfY3JlYXRlX3Njcm9sbGJhciBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgaW50IG9yaWVudCkpOwordm9pZCBndWlfbWNoX2Rlc3Ryb3lfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiKSk7CitjaGFyX3UgKmd1aV9tY2hfYnJvd3NlIF9fQVJHUygoaW50IHNhdmluZywgY2hhcl91ICp0aXRsZSwgY2hhcl91ICpkZmx0LCBjaGFyX3UgKmV4dCwgY2hhcl91ICppbml0ZGlyLCBjaGFyX3UgKmZpbHRlcikpOworaW50IGd1aV9tY2hfZGlhbG9nIF9fQVJHUygoaW50IHR5cGUsIGNoYXJfdSAqdGl0bGUsIGNoYXJfdSAqbWVzc2FnZSwgY2hhcl91ICpidXR0b25zLCBpbnQgZGVmX2J1dCwgY2hhcl91ICp0ZXh0ZmllbGQpKTsKK2ludCBndWlfbWNoX2RpYWxvZyBfX0FSR1MoKGludCB0eXBlLCBjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKm1lc3NhZ2UsIGNoYXJfdSAqYnV0dG9ucywgaW50IGRlZl9idXQsIGNoYXJfdSAqdGV4dGZpZWxkKSk7Cit2b2lkIGd1aV9tY2hfc2hvd19wb3B1cG1lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX21ha2VfcG9wdXAgX19BUkdTKChjaGFyX3UgKnBhdGhfbmFtZSkpOwordm9pZCBndWlfbWNoX2ZpbmRfZGlhbG9nIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGd1aV9tY2hfcmVwbGFjZV9kaWFsb2cgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZ3VpX2d0a19zeW5jaF9mb250cyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZXhfaGVscGZpbmQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZ3VpX2d0a19wb3NpdGlvbl9pbl9wYXJlbnQgX19BUkdTKChHdGtXaWRnZXQgKnBhcmVudCwgR3RrV2lkZ2V0ICpjaGlsZCwgZ3VpX3dpbl9wb3NfVCB3aGVyZSkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZ3VpX2d0a194MTEucHJvIGIvc3JjL3Byb3RvL2d1aV9ndGtfeDExLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2JmYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2d1aV9ndGtfeDExLnBybwpAQCAtMCwwICsxLDY3IEBACisvKiBndWlfZ3RrX3gxMS5jICovCit2b2lkIGd1aV9tY2hfcHJlcGFyZSBfX0FSR1MoKGludCAqYXJnYywgY2hhciAqKmFyZ3YpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfYmxpbmtpbmcgX19BUkdTKChsb25nIHdhaXR0aW1lLCBsb25nIG9uLCBsb25nIG9mZikpOwordm9pZCBndWlfbWNoX3N0b3BfYmxpbmsgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc3RhcnRfYmxpbmsgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9pbml0X2NoZWNrIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9mb3JrZWQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfbmV3X2NvbG9ycyBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX29wZW4gX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZXhpdCBfX0FSR1MoKGludCByYykpOworaW50IGd1aV9tY2hfZ2V0X3dpbnBvcyBfX0FSR1MoKGludCAqeCwgaW50ICp5KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3dpbnBvcyBfX0FSR1MoKGludCB4LCBpbnQgeSkpOwordm9pZCBndWlfbWNoX3NldF9zaGVsbHNpemUgX19BUkdTKChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtaW5fd2lkdGgsIGludCBtaW5faGVpZ2h0LCBpbnQgYmFzZV93aWR0aCwgaW50IGJhc2VfaGVpZ2h0KSk7Cit2b2lkIGd1aV9tY2hfZ2V0X3NjcmVlbl9kaW1lbnNpb25zIF9fQVJHUygoaW50ICpzY3JlZW5fdywgaW50ICpzY3JlZW5faCkpOwordm9pZCBndWlfbWNoX3NldHRpdGxlIF9fQVJHUygoY2hhcl91ICp0aXRsZSwgY2hhcl91ICppY29uKSk7Cit2b2lkIGd1aV9tY2hfZW5hYmxlX21lbnUgX19BUkdTKChpbnQgc2hvd2l0KSk7Cit2b2lkIGd1aV9tY2hfc2hvd190b29sYmFyIF9fQVJHUygoaW50IHNob3dpdCkpOworaW50IGd1aV9tY2hfYWRqdXN0X2NoYXJzaXplIF9fQVJHUygodm9pZCkpOworR3VpRm9udHNldCBndWlfbWNoX2dldF9mb250c2V0IF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgcmVwb3J0X2Vycm9yLCBpbnQgZml4ZWRfd2lkdGgpKTsKK2NoYXJfdSAqZ3VpX21jaF9mb250X2RpYWxvZyBfX0FSR1MoKGNoYXJfdSAqb2xkdmFsKSk7CitpbnQgZ3VpX21jaF9pbml0X2ZvbnQgX19BUkdTKChjaGFyX3UgKmZvbnRfbmFtZSwgaW50IGZvbnRzZXQpKTsKK0d1aUZvbnQgZ3VpX21jaF9nZXRfZm9udCBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IHJlcG9ydF9lcnJvcikpOwordm9pZCBndWlfbWNoX3NldF9mb250IF9fQVJHUygoR3VpRm9udCBmb250KSk7Cit2b2lkIGd1aV9tY2hfc2V0X2ZvbnRzZXQgX19BUkdTKChHdWlGb250c2V0IGZvbnRzZXQpKTsKK3ZvaWQgZ3VpX21jaF9mcmVlX2ZvbnQgX19BUkdTKChHdWlGb250IGZvbnQpKTsKK3ZvaWQgZ3VpX21jaF9mcmVlX2ZvbnRzZXQgX19BUkdTKChHdWlGb250c2V0IGZvbnRzZXQpKTsKK2d1aWNvbG9yX1QgZ3VpX21jaF9nZXRfY29sb3IgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZmdfY29sb3IgX19BUkdTKChndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2JnX2NvbG9yIF9fQVJHUygoZ3VpY29sb3JfVCBjb2xvcikpOworaW50IGd1aV9ndGsyX2RyYXdfc3RyaW5nIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCwgY2hhcl91ICpzLCBpbnQgbGVuLCBpbnQgZmxhZ3MpKTsKK3ZvaWQgZ3VpX21jaF9kcmF3X3N0cmluZyBfX0FSR1MoKGludCByb3csIGludCBjb2wsIGNoYXJfdSAqcywgaW50IGxlbiwgaW50IGZsYWdzKSk7CitpbnQgZ3VpX21jaF9oYXNrZXkgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBndWlfZ2V0X3gxMV93aW5kaXMgX19BUkdTKChXaW5kb3cgKndpbiwgRGlzcGxheSAqKmRpcykpOworRGlzcGxheSAqZ3VpX21jaF9nZXRfZGlzcGxheSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9iZWVwIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2ZsYXNoIF9fQVJHUygoaW50IG1zZWMpKTsKK3ZvaWQgZ3VpX21jaF9pbnZlcnRfcmVjdGFuZ2xlIF9fQVJHUygoaW50IHIsIGludCBjLCBpbnQgbnIsIGludCBuYykpOwordm9pZCBndWlfbWNoX2ljb25pZnkgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2ZvcmVncm91bmQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19ob2xsb3dfY3Vyc29yIF9fQVJHUygoZ3VpY29sb3JfVCBjb2xvcikpOwordm9pZCBndWlfbWNoX2RyYXdfcGFydF9jdXJzb3IgX19BUkdTKChpbnQgdywgaW50IGgsIGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF91cGRhdGUgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF93YWl0X2Zvcl9jaGFycyBfX0FSR1MoKGxvbmcgd3RpbWUpKTsKK3ZvaWQgZ3VpX21jaF9mbHVzaCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9jbGVhcl9ibG9jayBfX0FSR1MoKGludCByb3cxLCBpbnQgY29sMSwgaW50IHJvdzIsIGludCBjb2wyKSk7Cit2b2lkIGd1aV9tY2hfY2xlYXJfYWxsIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2RlbGV0ZV9saW5lcyBfX0FSR1MoKGludCByb3csIGludCBudW1fbGluZXMpKTsKK3ZvaWQgZ3VpX21jaF9pbnNlcnRfbGluZXMgX19BUkdTKChpbnQgcm93LCBpbnQgbnVtX2xpbmVzKSk7Cit2b2lkIGNsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgY2xpcF9tY2hfbG9zZV9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOworaW50IGNsaXBfbWNoX293bl9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOwordm9pZCBjbGlwX21jaF9zZXRfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgZ3VpX21jaF9tZW51X2dyZXkgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBncmV5KSk7Cit2b2lkIGd1aV9tY2hfbWVudV9oaWRkZW4gX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBoaWRkZW4pKTsKK3ZvaWQgZ3VpX21jaF9kcmF3X21lbnViYXIgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZW5hYmxlX3Njcm9sbGJhciBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgaW50IGZsYWcpKTsKK2xvbmdfdSBndWlfbWNoX2dldF9yZ2IgX19BUkdTKChndWljb2xvcl9UIHBpeGVsKSk7CitpbnQgZ3VpX21jaF9nZXRfbW91c2VfeCBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX2dldF9tb3VzZV95IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldG1vdXNlIF9fQVJHUygoaW50IHgsIGludCB5KSk7Cit2b2lkIGd1aV9tY2hfbW91c2VoaWRlIF9fQVJHUygoaW50IGhpZGUpKTsKK3ZvaWQgbWNoX3NldF9tb3VzZV9zaGFwZSBfX0FSR1MoKGludCBzaGFwZSkpOwordm9pZCBndWlfbWNoX2RyYXdzaWduIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCwgaW50IHR5cGVucikpOwordm9pZCAqZ3VpX21jaF9yZWdpc3Rlcl9zaWduIF9fQVJHUygoY2hhcl91ICpzaWduZmlsZSkpOwordm9pZCBndWlfbWNoX2Rlc3Ryb3lfc2lnbiBfX0FSR1MoKHZvaWQgKnNpZ24pKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2d1aV9tYWMucHJvIGIvc3JjL3Byb3RvL2d1aV9tYWMucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNTk1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vZ3VpX21hYy5wcm8KQEAgLTAsMCArMSwxNDIgQEAKKy8qIGd1aV9tYWMuYyAqLworCisvKgorICogTWFjIHNwZWNpZmljIHByb3RvdHlwZXMKKyAqLworCitwYXNjYWwgQm9vbGVhbiBXYWl0TmV4dEV2ZW50V3JwIF9fQVJHUygoRXZlbnRNYXNrIGV2ZW50TWFzaywgRXZlbnRSZWNvcmQgKnRoZUV2ZW50LCBVSW50MzIgc2xlZXAsIFJnbkhhbmRsZSBtb3VzZVJnbikpOworcGFzY2FsIHZvaWQgZ3VpX21hY19zY3JvbGxfYWN0aW9uIF9fQVJHUygoQ29udHJvbEhhbmRsZSB0aGVDb250cm9sLCBzaG9ydCBwYXJ0Q29kZSkpOworcGFzY2FsIHZvaWQgZ3VpX21hY19kcmFnX3RodW1iIChDb250cm9sSGFuZGxlIHRoZUNvbnRyb2wsIHNob3J0IHBhcnRDb2RlKTsKK3ZvaWQgZ3VpX21hY19oYW5kbGVfZXZlbnQgX19BUkdTKChFdmVudFJlY29yZCAqZXZlbnQpKTsKK3ZvaWQgZ3VpX21hY19kb01vdXNlRG93biBfX0FSR1MoKEV2ZW50UmVjb3JkICp0aGVFdmVudCkpOwordm9pZCBndWlfbWFjX2RvX2tleSBfX0FSR1MoKEV2ZW50UmVjb3JkICp0aGVFdmVudCkpOwordm9pZCBndWlfbWFjX2hhbmRsZV9tZW51IF9fQVJHUygobG9uZyBtZW51Q2hvaWNlKSk7Cit2b2lkIGd1aV9tYWNfZm9jdXNfY2hhbmdlIF9fQVJHUygoRXZlbnRSZWNvcmQgKmV2ZW50KSk7Cit2b2lkIGd1aV9tYWNfdXBkYXRlIF9fQVJHUygoRXZlbnRSZWNvcmQgKmV2ZW50KSk7CitzaG9ydCBndWlfbWNoX2dldF9tYWNfbWVudV9pdGVtX2luZGV4IF9fQVJHUygodmltbWVudV9UICptZW51LCB2aW1tZW51X1QgKnBhcmVudCkpOwordm9pZCBndWlfbWNoX3NldF9ibGlua2luZyBfX0FSR1MoKGxvbmcgd2FpdCwgbG9uZyBvbiwgbG9uZyBvZmYpKTsKK3ZvaWQgZ3VpX21jaF9zdG9wX2JsaW5rIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3N0YXJ0X2JsaW5rIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfZ2V0X21vdXNlX3ggX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9nZXRfbW91c2VfeSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRtb3VzZSBfX0FSR1MoKGludCB4LCBpbnQgeSkpOwordm9pZCBndWlfbWNoX3ByZXBhcmUgX19BUkdTKChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2KSk7CitpbnQgZ3VpX21jaF9pbml0X2NoZWNrIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9uZXdfY29sb3JzIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfb3BlbiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9leGl0IF9fQVJHUygoaW50KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3dpbnNpemUgX19BUkdTKChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtaW5fd2lkdGgsIGludCBtaW5faGVpZ2h0LCBpbnQgYmFzZV93aWR0aCwgaW50IGJhc2VfaGVpZ2h0KSk7CitpbnQgZ3VpX21jaF9nZXRfd2lucG9zIF9fQVJHUygoaW50ICp4LCBpbnQgKnkpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfd2lucG9zIF9fQVJHUygoaW50IHgsIGludCB5KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3NoZWxsc2l6ZSBfX0FSR1MoKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1pbl93aWR0aCwgaW50IG1pbl9oZWlnaHQsIGludCBiYXNlX3dpZHRoLCBpbnQgYmFzZV9oZWlnaHQpKTsKK3ZvaWQgZ3VpX21jaF9nZXRfc2NyZWVuX2RpbWVuc2lvbnMgX19BUkdTKChpbnQgKnNjcmVlbl93LCBpbnQgKnNjcmVlbl9oKSk7Cit2b2lkIGd1aV9tY2hfc2V0X3RleHRfYXJlYV9wb3MgX19BUkdTKChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkpOwordm9pZCBndWlfbWNoX2VuYWJsZV9zY3JvbGxiYXIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGludCBmbGFnKSk7Cit2b2lkIGd1aV9tY2hfc2V0X3Njcm9sbGJhcl90aHVtYiBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgbG9uZyB2YWwsIGxvbmcgc2l6ZSwgbG9uZyBtYXgpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3BvcyBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpKTsKK3ZvaWQgZ3VpX21jaF9jcmVhdGVfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgb3JpZW50KSk7Cit2b2lkIGd1aV9tY2hfZGVzdHJveV9zY3JvbGxiYXIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IpKTsKK2ludCBndWlfbWNoX2FkanVzdF9jaGFyc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX2luaXRfZm9udCBfX0FSR1MoKGNoYXJfdSAqZm9udF9uYW1lLCBpbnQgZm9udHNldCkpOworR3VpRm9udCBndWlfbWNoX2dldF9mb250IF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgZ2l2ZUVycm9ySWZNaXNzaW5nKSk7CitHdWlGb250IGd1aV9tYWNfZmluZF9mb250IF9fQVJHUygoY2hhcl91ICpmb250X25hbWUpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZm9udCBfX0FSR1MoKEd1aUZvbnQgZm9udCkpOworaW50IGd1aV9tY2hfc2FtZV9mb250IF9fQVJHUygoR3VpRm9udCBmMSwgR3VpRm9udCBmMikpOwordm9pZCBndWlfbWNoX2ZyZWVfZm9udCBfX0FSR1MoKEd1aUZvbnQgZm9udCkpOworZ3VpY29sb3JfVCBndWlfbWNoX2dldF9jb2xvciBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBndWlfbWNoX3NldF9mZ19jb2xvciBfX0FSR1MoKGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfYmdfY29sb3IgX19BUkdTKChndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19zdHJpbmcgX19BUkdTKChpbnQgcm93LCBpbnQgY29sLCBjaGFyX3UgKnMsIGludCBsZW4sIGludCBmbGFncykpOworaW50IGd1aV9tY2hfaGFza2V5IF9fQVJHUygoY2hhcl91ICpuYW1lKSk7Cit2b2lkIGd1aV9tY2hfYmVlcCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9mbGFzaCBfX0FSR1MoKGludCBtc2VjKSk7Cit2b2lkIGd1aV9tY2hfaW52ZXJ0X3JlY3RhbmdsZSBfX0FSR1MoKGludCByLCBpbnQgYywgaW50IG5yLCBpbnQgbmMpKTsKK3ZvaWQgZ3VpX21jaF9pY29uaWZ5IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldHRpdGxlIF9fQVJHUygoY2hhcl91ICp0aXRsZSwgY2hhcl91ICppY29uKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19ob2xsb3dfY3Vyc29yIF9fQVJHUygoZ3VpY29sb3JfVCBjb2xvcikpOwordm9pZCBndWlfbWNoX2RyYXdfcGFydF9jdXJzb3IgX19BUkdTKChpbnQgdywgaW50IGgsIGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF91cGRhdGUgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF93YWl0X2Zvcl9jaGFycyBfX0FSR1MoKGludCB3dGltZSkpOwordm9pZCBndWlfbWNoX2ZsdXNoIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2NsZWFyX2Jsb2NrIF9fQVJHUygoaW50IHJvdzEsIGludCBjb2wxLCBpbnQgcm93MiwgaW50IGNvbDIpKTsKK3ZvaWQgZ3VpX21jaF9jbGVhcl9hbGwgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZGVsZXRlX2xpbmVzIF9fQVJHUygoaW50IHJvdywgaW50IG51bV9saW5lcykpOwordm9pZCBndWlfbWNoX2luc2VydF9saW5lcyBfX0FSR1MoKGludCByb3csIGludCBudW1fbGluZXMpKTsKK3ZvaWQgZ3VpX21jaF9lbmFibGVfbWVudSBfX0FSR1MoKGludCBmbGFnKSk7Cit2b2lkIGd1aV9tY2hfc2V0X21lbnVfcG9zIF9fQVJHUygoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpKTsKKy8qdm9pZCBndWlfbWNoX2FkZF9tZW51IF9fQVJHUygodmltbWVudV9UICptZW51LCB2aW1tZW51X1QgKnBhcmVudCwgaW50IGlkeCkpOyovCit2b2lkIGd1aV9tY2hfYWRkX21lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBwb3MpKTsKKy8qdm9pZCBndWlfbWNoX2FkZF9tZW51X2l0ZW0gX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIHZpbW1lbnVfVCAqcGFyZW50LCBpbnQgaWR4KSk7Ki8KK3ZvaWQgZ3VpX21jaF9hZGRfbWVudV9pdGVtIF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgaWR4KSk7Cit2b2lkIGd1aV9tY2hfc2hvd19wb3B1cG1lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX21jaF9kZXN0cm95X21lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX21jaF9tZW51X2dyZXkgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBncmV5KSk7Cit2b2lkIGd1aV9tY2hfbWVudV9oaWRkZW4gX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBoaWRkZW4pKTsKK3ZvaWQgZ3VpX21jaF9kcmF3X21lbnViYXIgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9nZXRfbGlnaHRuZXNzIF9fQVJHUygoZ3VpY29sb3JfVCBwaXhlbCkpOworbG9uZ191IGd1aV9tY2hfZ2V0X3JnYiBfX0FSR1MoKGd1aWNvbG9yX1QgcGl4ZWwpKTsKK2ludCBndWlfbWNoX2dldF9tb3VzZV94IF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfZ2V0X21vdXNlX3kgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc2V0bW91c2UgX19BUkdTKChpbnQgeCwgaW50IHkpKTsKK3ZvaWQgZ3VpX21jaF9zaG93X3BvcHVwbWVudSBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSkpOworaW50IGd1aV9tY2hfZGlhbG9nIF9fQVJHUygoaW50IHR5cGUsIGNoYXJfdSAqdGl0bGUsIGNoYXJfdSAqbWVzc2FnZSwgY2hhcl91ICpidXR0b25zLCBpbnQgZGZsdGJ1dHRvbiwgY2hhcl91ICp0ZXh0ZmllbGQpKTsKK2NoYXJfdSAqZ3VpX21jaF9icm93c2UgX19BUkdTKChpbnQgc2F2aW5nLCBjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmRmbHQsIGNoYXJfdSAqZXh0LCBjaGFyX3UgKmluaXRkaXIsIGNoYXJfdSAqZmlsdGVyKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2ZvcmVncm91bmQgX19BUkdTKCh2b2lkKSk7CisKK2NoYXJfdSAqQzJQYXNjYWxfc2F2ZSBfX0FSR1MoKGNoYXJfdSAqQ3N0cmluZykpOworY2hhcl91ICpDMlBhc2NhbF9zYXZlX2FuZF9yZW1vdmVfYmFja3NsYXNoIF9fQVJHUygoY2hhcl91ICpDc3RyaW5nKSk7CitpbnRfdSBFdmVudE1vZGlmaWVyczJWaW1Nb3VzZU1vZGlmaWVycyBfX0FSR1MoKEV2ZW50TW9kaWZpZXJzIG1hY01vZGlmaWVycykpOworY2hhcl91ICoqbmV3X2ZuYW1lc19mcm9tX0FFRGVzYyBfX0FSR1MoKEFFRGVzYyAqdGhlTGlzdCwgbG9uZyAqbnVtRmlsZXMsIE9TRXJyICplcnJvcikpOworCisKK3ZvaWQgZ3VpX3JlcXVlc3Rfc2VsZWN0aW9uIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2xvc2Vfc2VsZWN0aW9uIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfb3duX3NlbGVjdGlvbiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9jbGVhcl9zZWxlY3Rpb24gX19BUkdTKCh2b2lkKSk7CisKK3ZvaWQgZ3VpX3dpbl9uZXdfaGVpZ2h0IF9fQVJHUygod2luX1QgKndwKSk7Cit2b2lkIGd1aV93aW5fY29tcF9wb3MgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV93aW5fZnJlZSBfX0FSR1MoKHdpbl9UICp3cCkpOwordm9pZCBndWlfd2luX2FsbG9jIF9fQVJHUygod2luX1QgKndwKSk7Cit2b2lkIG1jaF9wb3N0X2J1ZmZlcl93cml0ZSAoYnVmX1QgKmJ1Zik7CisKK3ZvaWQgbWNoX2Vycm1zZyBfX0FSR1MoKGNoYXIgKnN0cikpOwordm9pZCBtY2hfZGlzcGxheV9lcnJvciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2xpcF9tY2hfbG9zZV9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOwordm9pZCBjbGlwX21jaF9yZXF1ZXN0X3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfbWNoX3NldF9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOworaW50IGNsaXBfbWNoX293bl9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOworCitwYXNjYWwJT1NFcnIJRmluZFByb2Nlc3NCeVNpZ25hdHVyZSggY29uc3QgT1NUeXBlIHRhcmdldFR5cGUsCisJCQkJCWNvbnN0IE9TVHlwZSB0YXJnZXRDcmVhdG9yLCBQcm9jZXNzU2VyaWFsTnVtYmVyUHRyIHBzblB0ciApOworT1NFcnIgICBJbnN0YWxsQUVIYW5kbGVycyAodm9pZCk7CitwYXNjYWwgT1NFcnIgSGFuZGxlT0RvY0FFIChjb25zdCBBcHBsZUV2ZW50ICp0aGVBRXZlbnQsIEFwcGxlRXZlbnQgKnRoZVJlcGx5LCBsb25nIHJlZkNvbik7CitwYXNjYWwgT1NFcnIgSGFuZGxlX2FldnRfb2FwcF9BRSAoY29uc3QgQXBwbGVFdmVudCAqdGhlQUV2ZW50LCBBcHBsZUV2ZW50ICp0aGVSZXBseSwgbG9uZyByZWZDb24pOworcGFzY2FsIE9TRXJyIEhhbmRsZV9hZXZ0X3F1aXRfQUUgKGNvbnN0IEFwcGxlRXZlbnQgKnRoZUFFdmVudCwgQXBwbGVFdmVudCAqdGhlUmVwbHksIGxvbmcgcmVmQ29uKTsKK3Bhc2NhbCBPU0VyciBIYW5kbGVfYWV2dF9wZG9jX0FFIChjb25zdCBBcHBsZUV2ZW50ICp0aGVBRXZlbnQsIEFwcGxlRXZlbnQgKnRoZVJlcGx5LCBsb25nIHJlZkNvbik7CitwYXNjYWwgT1NFcnIgSGFuZGxlX3Vua25vd25fQUUgKGNvbnN0IEFwcGxlRXZlbnQgKnRoZUFFdmVudCwgQXBwbGVFdmVudCAqdGhlUmVwbHksIGxvbmcgcmVmQ29uKTsKKy8qIFNob3VsZGUgd2UgcmV0dXJuIE1lbnVJdGVtSW5kZXg/IElNTyB5ZXMsIEkgZGlkIHRoYXQgZm9yIDUuNyBhayovCitzaG9ydCBndWlfbWFjX2dldF9tZW51X2l0ZW1faW5kZXggKHZpbW1lbnVfVCAqcE1lbnUpOworCitwYXNjYWwgT1NFcnIgSGFuZGxlX0tBSExfU1JDSF9BRSAoY29uc3QgQXBwbGVFdmVudCAqdGhlQUV2ZW50LCBBcHBsZUV2ZW50ICp0aGVSZXBseSwgbG9uZyByZWZDb24pOworcGFzY2FsIE9TRXJyIEhhbmRsZV9LQUhMX01PRF9BRSAgKGNvbnN0IEFwcGxlRXZlbnQgKnRoZUFFdmVudCwgQXBwbGVFdmVudCAqdGhlUmVwbHksIGxvbmcgcmVmQ29uKTsKK3Bhc2NhbCBPU0VyciBIYW5kbGVfS0FITF9HVFRYX0FFIChjb25zdCBBcHBsZUV2ZW50ICp0aGVBRXZlbnQsIEFwcGxlRXZlbnQgKnRoZVJlcGx5LCBsb25nIHJlZkNvbik7Cit2b2lkIFNlbmRfS0FITF9NT0RfQUUgKGJ1Zl9UICpidWYpOworCit2b2lkIGd1aV9tYWNfZG9JbkNvbnRlbnRDbGljayBfX0FSR1MoKEV2ZW50UmVjb3JkICp0aGVFdmVudCwgV2luZG93UHRyCSB3aGljaFdpbmRvdykpOwordm9pZCBndWlfbWFjX2RvSW5EcmFnQ2xpY2sgX19BUkdTKChQb2ludCB3aGVyZSwgV2luZG93UHRyIHdoaWNoV2luZG93KSk7Cit2b2lkIGd1aV9tYWNfZG9Jbkdyb3dDbGljayBfX0FSR1MoKFBvaW50IHdoZXJlLCBXaW5kb3dQdHIgd2hpY2hXaW5kb3cpKTsKK3ZvaWQgZ3VpX21hY19kb1VwZGF0ZUV2ZW50IF9fQVJHUygoRXZlbnRSZWNvcmQgKmV2ZW50KSk7Cit2b2lkIGd1aV9tYWNfZG9BY3RpdmF0ZUV2ZW50IF9fQVJHUygoRXZlbnRSZWNvcmQgKmV2ZW50KSk7Cit2b2lkIGd1aV9tYWNfZG9TdXNwZW5kRXZlbnQgX19BUkdTKChFdmVudFJlY29yZCAqZXZlbnQpKTsKK3ZvaWQgZ3VpX21hY19kb0tleUV2ZW50IF9fQVJHUygoRXZlbnRSZWNvcmQgKnRoZUV2ZW50KSk7Cit2b2lkIGd1aV9tYWNfZG9Nb3VzZURvd25FdmVudCBfX0FSR1MoKEV2ZW50UmVjb3JkICp0aGVFdmVudCkpOwordm9pZCBndWlfbWFjX2RvTW91c2VNb3ZlZEV2ZW50IF9fQVJHUygoRXZlbnRSZWNvcmQgKmV2ZW50KSk7Cit2b2lkIGd1aV9tYWNfZG9Nb3VzZVVwRXZlbnQgX19BUkdTKChFdmVudFJlY29yZCAqdGhlRXZlbnQpKTsKKworaW50IEMyUGFzY2FsU3RyaW5nIChjaGFyX3UgKkNTdHJpbmcsIFN0cjI1NSAqUGFzY2FsU3RyaW5nKTsKK2ludCBHZXRGU1NwZWNGcm9tUGF0aCAoIGNoYXJfdSAqZmlsZSwgRlNTcGVjICpmaWxlRlNTcGVjKTsKK2NoYXJfdSAqRnVsbFBhdGhGcm9tRlNTcGVjX3NhdmUgKEZTU3BlYyBmaWxlKTsKKworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZ3VpX21vdGlmLnBybyBiL3NyYy9wcm90by9ndWlfbW90aWYucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNWQ4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vZ3VpX21vdGlmLnBybwpAQCAtMCwwICsxLDM5IEBACisvKiBndWlfbW90aWYuYyAqLwordm9pZCBndWlfeDExX2NyZWF0ZV93aWRnZXRzIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfeDExX2Rlc3Ryb3lfd2lkZ2V0cyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfdGV4dF9hcmVhX3BvcyBfX0FSR1MoKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSk7Cit2b2lkIGd1aV94MTFfc2V0X2JhY2tfY29sb3IgX19BUkdTKCh2b2lkKSk7CitYbUZvbnRMaXN0IGd1aV9tb3RpZl9jcmVhdGVfZm9udGxpc3QgX19BUkdTKChYRm9udFN0cnVjdCAqZm9udCkpOworWG1Gb250TGlzdCBndWlfbW90aWZfZm9udHNldDJmb250bGlzdCBfX0FSR1MoKFhGb250U2V0ICpmb250c2V0KSk7Cit2b2lkIGd1aV9tY2hfZW5hYmxlX21lbnUgX19BUkdTKChpbnQgZmxhZykpOwordm9pZCBndWlfbW90aWZfc2V0X21uZW1vbmljcyBfX0FSR1MoKGludCBlbmFibGUpKTsKK3ZvaWQgZ3VpX21jaF9hZGRfbWVudSBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSwgaW50IGlkeCkpOwordm9pZCBndWlfbWNoX3RvZ2dsZV90ZWFyb2ZmcyBfX0FSR1MoKGludCBlbmFibGUpKTsKK2ludCBndWlfbWNoX3RleHRfYXJlYV9leHRyYV9oZWlnaHQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfY29tcHV0ZV9tZW51X2hlaWdodCBfX0FSR1MoKFdpZGdldCBpZCkpOwordm9pZCBndWlfbWNoX2FkZF9tZW51X2l0ZW0gX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBpZHgpKTsKK3ZvaWQgZ3VpX21vdGlmX3VwZGF0ZV9tb3VzZW1vZGVsIF9fQVJHUygodmltbWVudV9UICptZW51KSk7Cit2b2lkIGd1aV9tY2hfbmV3X21lbnVfY29sb3JzIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX25ld19tZW51X2ZvbnQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfbmV3X3Rvb2x0aXBfZm9udCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9uZXdfdG9vbHRpcF9jb2xvcnMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZGVzdHJveV9tZW51IF9fQVJHUygodmltbWVudV9UICptZW51KSk7Cit2b2lkIGd1aV9tY2hfc2hvd19wb3B1cG1lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX21jaF9kZWZfY29sb3JzIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGxvbmcgdmFsLCBsb25nIHNpemUsIGxvbmcgbWF4KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3Njcm9sbGJhcl9wb3MgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSk7Cit2b2lkIGd1aV9tY2hfZW5hYmxlX3Njcm9sbGJhciBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgaW50IGZsYWcpKTsKK3ZvaWQgZ3VpX21jaF9jcmVhdGVfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgb3JpZW50KSk7Cit2b2lkIGd1aV9tY2hfZGVzdHJveV9zY3JvbGxiYXIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX2NvbG9ycyBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYikpOworV2luZG93IGd1aV94MTFfZ2V0X3dpZCBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqZ3VpX21jaF9icm93c2UgX19BUkdTKChpbnQgc2F2aW5nLCBjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmRmbHQsIGNoYXJfdSAqZXh0LCBjaGFyX3UgKmluaXRkaXIsIGNoYXJfdSAqZmlsdGVyKSk7CitpbnQgZ3VpX21jaF9kaWFsb2cgX19BUkdTKChpbnQgdHlwZSwgY2hhcl91ICp0aXRsZSwgY2hhcl91ICptZXNzYWdlLCBjaGFyX3UgKmJ1dHRvbl9uYW1lcywgaW50IGRmbHRidXR0b24sIGNoYXJfdSAqdGV4dGZpZWxkKSk7Cit2b2lkIGd1aV9tY2hfZW5hYmxlX2Zvb3RlciBfX0FSR1MoKGludCBzaG93aXQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZm9vdGVyIF9fQVJHUygoY2hhcl91ICpzKSk7Cit2b2lkIGd1aV9tY2hfc2hvd190b29sYmFyIF9fQVJHUygoaW50IHNob3dpdCkpOworaW50IGd1aV9tY2hfY29tcHV0ZV90b29sYmFyX2hlaWdodCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9nZXRfdG9vbGJhcl9jb2xvcnMgX19BUkdTKChQaXhlbCAqYmdwLCBQaXhlbCAqZmdwLCBQaXhlbCAqYnNwLCBQaXhlbCAqdHNwLCBQaXhlbCAqaHNwKSk7Cit2b2lkIGd1aV9tY2hfZmluZF9kaWFsb2cgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZ3VpX21jaF9yZXBsYWNlX2RpYWxvZyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZ3VpX3Bob3Rvbi5wcm8gYi9zcmMvcHJvdG8vZ3VpX3Bob3Rvbi5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczNTRhMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9ndWlfcGhvdG9uLnBybwpAQCAtMCwwICsxLDY2IEBACisvKiBndWlfcGhvdG9uLmMgKi8KK3ZvaWQgZ3VpX3BoX2VuY29kaW5nX2NoYW5nZWQgX19BUkdTKChpbnQgbmV3X2VuY29kaW5nKSk7Cit2b2lkIGd1aV9tY2hfcHJlcGFyZSBfX0FSR1MoKGludCAqYXJnYywgY2hhciAqKmFyZ3YpKTsKK2ludCBndWlfbWNoX2luaXQgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9pbml0X2NoZWNrIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfb3BlbiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9leGl0IF9fQVJHUygoaW50IHJjKSk7Cit2b2lkIGd1aV9tY2hfdXBkYXRlIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfd2FpdF9mb3JfY2hhcnMgX19BUkdTKChpbnQgd3RpbWUpKTsKK2NoYXJfdSAqZ3VpX21jaF9icm93c2UgX19BUkdTKChpbnQgc2F2aW5nLCBjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmRlZmF1bHRfbmFtZSwgY2hhcl91ICpleHQsIGNoYXJfdSAqaW5pdGRpciwgY2hhcl91ICpmaWx0ZXIpKTsKK2ludCBndWlfbWNoX2RpYWxvZyBfX0FSR1MoKGludCB0eXBlLCBjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKm1lc3NhZ2UsIGNoYXJfdSAqYnV0dG9ucywgaW50IGRlZmF1bHRfYnV0dG9uLCBjaGFyX3UgKnRleHRmaWVsZCkpOworaW50IGd1aV9tY2hfZ2V0X3dpbnBvcyBfX0FSR1MoKGludCAqeCwgaW50ICp5KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3dpbnBvcyBfX0FSR1MoKGludCB4LCBpbnQgeSkpOwordm9pZCBndWlfbWNoX3NldF9zaGVsbHNpemUgX19BUkdTKChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtaW5fd2lkdGgsIGludCBtaW5faGVpZ2h0LCBpbnQgYmFzZV93aWR0aCwgaW50IGJhc2VfaGVpZ2h0KSk7Cit2b2lkIGd1aV9tY2hfZ2V0X3NjcmVlbl9kaW1lbnNpb25zIF9fQVJHUygoaW50ICpzY3JlZW5fdywgaW50ICpzY3JlZW5faCkpOwordm9pZCBndWlfbWNoX2ljb25pZnkgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2ZvcmVncm91bmQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc2V0dGl0bGUgX19BUkdTKChjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmljb24pKTsKK3ZvaWQgZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3RodW1iIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgdmFsLCBpbnQgc2l6ZSwgaW50IG1heCkpOwordm9pZCBndWlfbWNoX3NldF9zY3JvbGxiYXJfcG9zIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkpOwordm9pZCBndWlfbWNoX2NyZWF0ZV9zY3JvbGxiYXIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGludCBvcmllbnQpKTsKK3ZvaWQgZ3VpX21jaF9lbmFibGVfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgZmxhZykpOwordm9pZCBndWlfbWNoX2Rlc3Ryb3lfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiKSk7Cit2b2lkIG1jaF9zZXRfbW91c2Vfc2hhcGUgX19BUkdTKChpbnQgc2hhcGUpKTsKK3ZvaWQgZ3VpX21jaF9tb3VzZWhpZGUgX19BUkdTKChpbnQgaGlkZSkpOworaW50IGd1aV9tY2hfZ2V0X21vdXNlX3ggX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9nZXRfbW91c2VfeSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRtb3VzZSBfX0FSR1MoKGludCB4LCBpbnQgeSkpOworbG9uZ191IGd1aV9tY2hfZ2V0X3JnYiBfX0FSR1MoKGd1aWNvbG9yX1QgcGl4ZWwpKTsKK3ZvaWQgZ3VpX21jaF9uZXdfY29sb3JzIF9fQVJHUygodm9pZCkpOworZ3VpY29sb3JfVCBndWlfbWNoX2dldF9jb2xvciBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBndWlfbWNoX3NldF9mZ19jb2xvciBfX0FSR1MoKGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfYmdfY29sb3IgX19BUkdTKChndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfaW52ZXJ0X3JlY3RhbmdsZSBfX0FSR1MoKGludCByb3csIGludCBjb2wsIGludCBuciwgaW50IG5jKSk7Cit2b2lkIGd1aV9tY2hfY2xlYXJfYmxvY2sgX19BUkdTKChpbnQgcm93MSwgaW50IGNvbDEsIGludCByb3cyLCBpbnQgY29sMikpOwordm9pZCBndWlfbWNoX2NsZWFyX2FsbCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9kZWxldGVfbGluZXMgX19BUkdTKChpbnQgcm93LCBpbnQgbnVtX2xpbmVzKSk7Cit2b2lkIGd1aV9tY2hfaW5zZXJ0X2xpbmVzIF9fQVJHUygoaW50IHJvdywgaW50IG51bV9saW5lcykpOwordm9pZCBndWlfbWNoX2RyYXdfc3RyaW5nIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCwgY2hhcl91ICpzLCBpbnQgbGVuLCBpbnQgZmxhZ3MpKTsKK3ZvaWQgZ3VpX21jaF9kcmF3X2hvbGxvd19jdXJzb3IgX19BUkdTKChndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19wYXJ0X2N1cnNvciBfX0FSR1MoKGludCB3LCBpbnQgaCwgZ3VpY29sb3JfVCBjb2xvcikpOwordm9pZCBndWlfbWNoX3NldF9ibGlua2luZyBfX0FSR1MoKGxvbmcgd2FpdCwgbG9uZyBvbiwgbG9uZyBvZmYpKTsKK3ZvaWQgZ3VpX21jaF9zdGFydF9ibGluayBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zdG9wX2JsaW5rIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2JlZXAgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZmxhc2ggX19BUkdTKChpbnQgbXNlYykpOwordm9pZCBndWlfbWNoX2ZsdXNoIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldF90ZXh0X2FyZWFfcG9zIF9fQVJHUygoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpKTsKK2ludCBndWlfbWNoX2hhc2tleSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBndWlfbWNoX2VuYWJsZV9tZW51IF9fQVJHUygoaW50IGZsYWcpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfbWVudV9wb3MgX19BUkdTKChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkpOwordm9pZCBndWlfbWNoX2FkZF9tZW51IF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgaW5kZXgpKTsKK3ZvaWQgZ3VpX21jaF9hZGRfbWVudV9pdGVtIF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgaW5kZXgpKTsKK3ZvaWQgZ3VpX21jaF9kZXN0cm95X21lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX21jaF9tZW51X2dyZXkgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBncmV5KSk7Cit2b2lkIGd1aV9tY2hfbWVudV9oaWRkZW4gX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBoaWRkZW4pKTsKK3ZvaWQgZ3VpX21jaF9kcmF3X21lbnViYXIgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc2hvd19wb3B1cG1lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX21jaF90b2dnbGVfdGVhcm9mZnMgX19BUkdTKChpbnQgZW5hYmxlKSk7Cit2b2lkIGd1aV9tY2hfc2hvd190b29sYmFyIF9fQVJHUygoaW50IHNob3dpdCkpOworaW50IGd1aV9tY2hfaW5pdF9mb250IF9fQVJHUygoY2hhcl91ICp2aW1fZm9udF9uYW1lLCBpbnQgZm9udHNldCkpOworaW50IGd1aV9tY2hfYWRqdXN0X2NoYXJzaXplIF9fQVJHUygodm9pZCkpOworR3VpRm9udCBndWlfbWNoX2dldF9mb250IF9fQVJHUygoY2hhcl91ICp2aW1fZm9udF9uYW1lLCBpbnQgcmVwb3J0X2Vycm9yKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2ZvbnQgX19BUkdTKChHdWlGb250IGZvbnQpKTsKK3ZvaWQgZ3VpX21jaF9mcmVlX2ZvbnQgX19BUkdTKChHdWlGb250IGZvbnQpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2d1aV9yaXNjb3MucHJvIGIvc3JjL3Byb3RvL2d1aV9yaXNjb3MucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMjNmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vZ3VpX3Jpc2Nvcy5wcm8KQEAgLTAsMCArMSw2NyBAQAorLyogUHJvdG90eXBlcyBmb3IgZ3VpX3Jpc2Nvcy5jCisgKiBCYXNlZCBvbiBndWlfeDExX3Byby5oICgxMCBNYXJjaCAyMDAyIHZlcnNpb24pCisgKi8KK3ZvaWQgZ3VpX21jaF9wcmVwYXJlIF9fQVJHUygoaW50ICphcmdjLCBjaGFyICoqYXJndikpOworaW50IGd1aV9tY2hfaW5pdF9jaGVjayBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX2luaXQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfdW5pbml0IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX25ld19jb2xvcnMgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9vcGVuIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfaW5pdF90b29sdGlwX2ZvbnQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9pbml0X21lbnVfZm9udCBfX0FSR1MoKHZvaWQpKTt2b2lkIGd1aV9tY2hfZXhpdCBfX0FSR1MoKGludCByYykpOworaW50IGd1aV9tY2hfZ2V0X3dpbnBvcyBfX0FSR1MoKGludCAqeCwgaW50ICp5KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3dpbnBvcyBfX0FSR1MoKGludCB4LCBpbnQgeSkpOwordm9pZCBndWlfbWNoX3NldF9zaGVsbHNpemUgX19BUkdTKChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtaW5fd2lkdGgsIGludCBtaW5faGVpZ2h0LCBpbnQgYmFzZV93aWR0aCwgaW50IGJhc2VfaGVpZ2h0KSk7Cit2b2lkIGd1aV9tY2hfZ2V0X3NjcmVlbl9kaW1lbnNpb25zIF9fQVJHUygoaW50ICpzY3JlZW5fdywgaW50ICpzY3JlZW5faCkpOworaW50IGd1aV9tY2hfaW5pdF9mb250IF9fQVJHUygoY2hhcl91ICpmb250X25hbWUsIGludCBkb19mb250c2V0KSk7CitHdWlGb250IGd1aV9tY2hfZ2V0X2ZvbnQgX19BUkdTKChjaGFyX3UgKm5hbWUsIGludCBnaXZlRXJyb3JJZk1pc3NpbmcpKTsKK2ludCBndWlfbWNoX2FkanVzdF9jaGFyc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZm9udCBfX0FSR1MoKEd1aUZvbnQgZm9udCkpOwordm9pZCBndWlfbWNoX3NldF9mb250c2V0IF9fQVJHUygoR3VpRm9udHNldCBmb250c2V0KSk7Cit2b2lkIGd1aV9tY2hfZnJlZV9mb250IF9fQVJHUygoR3VpRm9udCBmb250KSk7Cit2b2lkIGd1aV9tY2hfZnJlZV9mb250c2V0IF9fQVJHUygoR3VpRm9udHNldCBmb250c2V0KSk7CitHdWlGb250c2V0IGd1aV9tY2hfZ2V0X2ZvbnRzZXQgX19BUkdTKChjaGFyX3UgKm5hbWUsIGludCBnaXZlRXJyb3JJZk1pc3NpbmcsIGludCBmaXhlZF93aWR0aCkpOworZ3VpY29sb3JfVCBndWlfbWNoX2dldF9jb2xvciBfX0FSR1MoKGNoYXJfdSAqcmVxbmFtZSkpOwordm9pZCBndWlfbWNoX3NldF9mZ19jb2xvciBfX0FSR1MoKGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfYmdfY29sb3IgX19BUkdTKChndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19zdHJpbmcgX19BUkdTKChpbnQgcm93LCBpbnQgY29sLCBjaGFyX3UgKnMsIGludCBsZW4sIGludCBmbGFncykpOworaW50IGd1aV9tY2hfaGFza2V5IF9fQVJHUygoY2hhcl91ICpuYW1lKSk7Cit2b2lkIGd1aV9tY2hfYmVlcCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9mbGFzaCBfX0FSR1MoKGludCBtc2VjKSk7Cit2b2lkIGd1aV9tY2hfaW52ZXJ0X3JlY3RhbmdsZSBfX0FSR1MoKGludCByLCBpbnQgYywgaW50IG5yLCBpbnQgbmMpKTsKK3ZvaWQgZ3VpX21jaF9pY29uaWZ5IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldF9mb3JlZ3JvdW5kIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2RyYXdfaG9sbG93X2N1cnNvciBfX0FSR1MoKGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF9kcmF3X3BhcnRfY3Vyc29yIF9fQVJHUygoaW50IHcsIGludCBoLCBndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfdXBkYXRlIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfd2FpdF9mb3JfY2hhcnMgX19BUkdTKChsb25nIHd0aW1lKSk7Cit2b2lkIGd1aV9tY2hfZmx1c2ggX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfY2xlYXJfYmxvY2sgX19BUkdTKChpbnQgcm93MSwgaW50IGNvbDEsIGludCByb3cyLCBpbnQgY29sMikpOwordm9pZCBndWlfbWNoX2NsZWFyX2FsbCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9kZWxldGVfbGluZXMgX19BUkdTKChpbnQgcm93LCBpbnQgbnVtX2xpbmVzKSk7Cit2b2lkIGd1aV9tY2hfaW5zZXJ0X2xpbmVzIF9fQVJHUygoaW50IHJvdywgaW50IG51bV9saW5lcykpOwordm9pZCBjbGlwX21jaF9sb3NlX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7CitpbnQgY2xpcF9tY2hfb3duX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgY2xpcF9tY2hfc2V0X3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGd1aV9tY2hfbWVudV9ncmV5IF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgZ3JleSkpOwordm9pZCBndWlfbWNoX21lbnVfaGlkZGVuIF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgaGlkZGVuKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19tZW51YmFyIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldF9ibGlua2luZyBfX0FSR1MoKGxvbmcgd2FpdHRpbWUsIGxvbmcgb24sIGxvbmcgb2ZmKSk7Cit2b2lkIGd1aV9tY2hfc3RvcF9ibGluayBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zdGFydF9ibGluayBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgcHJvY2Vzc19ldmVudCBfX0FSR1MoKGludCBldmVudCwgaW50ICpibG9jaykpOwordm9pZCBndWlfbWNoX3Nob3dfcG9wdXBtZW51IF9fQVJHUygodmltbWVudV9UICptZW51KSk7Citsb25nX3UgZ3VpX21jaF9nZXRfcmdiIF9fQVJHUygoZ3VpY29sb3JfVCBwaXhlbCkpOworaW50IGd1aV9tY2hfZ2V0X21vdXNlX3ggX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9nZXRfbW91c2VfeSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRtb3VzZSBfX0FSR1MoKGludCB4LCBpbnQgeSkpOwordm9pZCBndWlfbWNoX2RyYXdzaWduIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCwgaW50IHR5cGVucikpOwordm9pZCBndWlfbWNoX2Rlc3Ryb3lfc2lnbiBfX0FSR1MoKFhJbWFnZSAqc2lnbikpOwordm9pZCBndWlfbWNoX21vdXNlaGlkZSBfX0FSR1MoKGludCBoaWRlKSk7Cit2b2lkIG1jaF9zZXRfbW91c2Vfc2hhcGUgX19BUkdTKChpbnQgc2hhcGUpKTsKK3ZvaWQgZ3VpX21jaF9tZW51X3NldF90aXAgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKKwordm9pZCByb19yZWRyYXdfdGl0bGUgX19BUkdTKChpbnQgd2luZG93KSk7CitpbnQgcm9fb2tfdG9fcXVpdCBfX0FSR1MoKHZvaWQpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2d1aV93MTYucHJvIGIvc3JjL3Byb3RvL2d1aV93MTYucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0M2M2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vZ3VpX3cxNi5wcm8KQEAgLTAsMCArMSw3MyBAQAorLyogZ3VpX3cxNi5jICovCit2b2lkIGd1aV9tY2hfc2V0X2JsaW5raW5nIF9fQVJHUygobG9uZyB3YWl0LCBsb25nIG9uLCBsb25nIG9mZikpOwordm9pZCBndWlfbWNoX3N0b3BfYmxpbmsgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc3RhcnRfYmxpbmsgX19BUkdTKCh2b2lkKSk7CitMUkVTVUxUIFdJTkFQSSB2aW1fV2luZG93UHJvYyBfX0FSR1MoKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKSk7Cit2b2lkIGd1aV9tY2hfbmV3X2NvbG9ycyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9kZWZfY29sb3JzIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfb3BlbiBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX2dldF93aW5wb3MgX19BUkdTKChpbnQgKngsIGludCAqeSkpOwordm9pZCBndWlfbWNoX3NldF93aW5wb3MgX19BUkdTKChpbnQgeCwgaW50IHkpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfdGV4dF9hcmVhX3BvcyBfX0FSR1MoKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSk7Cit2b2lkIGd1aV9tY2hfZW5hYmxlX3Njcm9sbGJhciBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgaW50IGZsYWcpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfc2Nyb2xsYmFyX3BvcyBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpKTsKK3ZvaWQgZ3VpX21jaF9jcmVhdGVfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgb3JpZW50KSk7CitpbnQgZ3VpX21jaF9hZGp1c3RfY2hhcnNpemUgX19BUkdTKCh2b2lkKSk7CitHdWlGb250IGd1aV9tY2hfZ2V0X2ZvbnQgX19BUkdTKChjaGFyX3UgKm5hbWUsIGludCBnaXZlRXJyb3JJZk1pc3NpbmcpKTsKK3ZvaWQgZ3VpX21jaF9mcmVlX2ZvbnQgX19BUkdTKChHdWlGb250IGZvbnQpKTsKK2d1aWNvbG9yX1QgZ3VpX21jaF9nZXRfY29sb3IgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBndWlfbWNoX2hhc2tleSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBndWlfbWNoX2JlZXAgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfaW52ZXJ0X3JlY3RhbmdsZSBfX0FSR1MoKGludCByLCBpbnQgYywgaW50IG5yLCBpbnQgbmMpKTsKK3ZvaWQgZ3VpX21jaF9pY29uaWZ5IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2RyYXdfaG9sbG93X2N1cnNvciBfX0FSR1MoKGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF9kcmF3X3BhcnRfY3Vyc29yIF9fQVJHUygoaW50IHcsIGludCBoLCBndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfdXBkYXRlIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfd2FpdF9mb3JfY2hhcnMgX19BUkdTKChpbnQgd3RpbWUpKTsKK3ZvaWQgZ3VpX21jaF9jbGVhcl9ibG9jayBfX0FSR1MoKGludCByb3cxLCBpbnQgY29sMSwgaW50IHJvdzIsIGludCBjb2wyKSk7Cit2b2lkIGd1aV9tY2hfY2xlYXJfYWxsIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2VuYWJsZV9tZW51IF9fQVJHUygoaW50IGZsYWcpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfbWVudV9wb3MgX19BUkdTKChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkpOwordm9pZCBndWlfbWNoX21lbnVfaGlkZGVuIF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgaGlkZGVuKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19tZW51YmFyIF9fQVJHUygodm9pZCkpOworbG9uZ191IGd1aV9tY2hfZ2V0X3JnYiBfX0FSR1MoKGd1aWNvbG9yX1QgcGl4ZWwpKTsKK3ZvaWQgZ3VpX21jaF9hY3RpdmF0ZV93aW5kb3cgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc2hvd190b29sYmFyIF9fQVJHUygoaW50IHNob3dpdCkpOwordm9pZCBleF9zaW1hbHQgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZ3VpX21jaF9maW5kX2RpYWxvZyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBndWlfbWNoX3JlcGxhY2VfZGlhbG9nIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGd1aV9tY2hfbW91c2VoaWRlIF9fQVJHUygoaW50IGhpZGUpKTsKK3ZvaWQgZ3VpX21jaF9kZXN0cm95X3Njcm9sbGJhciBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYikpOworaW50IGd1aV9tY2hfZ2V0X21vdXNlX3ggX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9nZXRfbW91c2VfeSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRtb3VzZSBfX0FSR1MoKGludCB4LCBpbnQgeSkpOwordm9pZCBndWlfbWNoX2dldF9zY3JlZW5fZGltZW5zaW9ucyBfX0FSR1MoKGludCAqc2NyZWVuX3csIGludCAqc2NyZWVuX2gpKTsKK3ZvaWQgZ3VpX21jaF9mbGFzaCBfX0FSR1MoKGludCBtc2VjKSk7Cit2b2lkIGd1aV9tY2hfZGVsZXRlX2xpbmVzIF9fQVJHUygoaW50IHJvdywgaW50IG51bV9saW5lcykpOwordm9pZCBndWlfbWNoX2luc2VydF9saW5lcyBfX0FSR1MoKGludCByb3csIGludCBudW1fbGluZXMpKTsKK3ZvaWQgZ3VpX21jaF9leGl0IF9fQVJHUygoaW50IHJjKSk7CitpbnQgZ3VpX21jaF9pbml0X2ZvbnQgX19BUkdTKChjaGFyX3UgKmZvbnRfbmFtZSwgaW50IGZvbnRzZXQpKTsKK2ludCBndWlfbWNoX21heGltaXplZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9uZXdmb250IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldHRpdGxlIF9fQVJHUygoY2hhcl91ICp0aXRsZSwgY2hhcl91ICppY29uKSk7Cit2b2lkIG1jaF9zZXRfbW91c2Vfc2hhcGUgX19BUkdTKChpbnQgc2hhcGUpKTsKK2NoYXJfdSAqZ3VpX21jaF9icm93c2UgX19BUkdTKChpbnQgc2F2aW5nLCBjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmRmbHQsIGNoYXJfdSAqZXh0LCBjaGFyX3UgKmluaXRkaXIsIGNoYXJfdSAqZmlsdGVyKSk7CitpbnQgZ2V0X2NtZF9hcmdzIF9fQVJHUygoY2hhciAqcHJvZywgY2hhciAqY21kbGluZSwgY2hhciAqKiphcmd2cCwgY2hhciAqKnRvZnJlZSkpOwordm9pZCBndWlfbWNoX3ByZXBhcmUgX19BUkdTKChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2KSk7CitpbnQgZ3VpX21jaF9pbml0IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldF9zaGVsbHNpemUgX19BUkdTKChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtaW5fd2lkdGgsIGludCBtaW5faGVpZ2h0LCBpbnQgYmFzZV93aWR0aCwgaW50IGJhc2VfaGVpZ2h0KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3Njcm9sbGJhcl90aHVtYiBfX0FSR1MoKHNjcm9sbGJhcl9UICpzYiwgbG9uZyB2YWwsIGxvbmcgc2l6ZSwgbG9uZyBtYXgpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZm9udCBfX0FSR1MoKEd1aUZvbnQgZm9udCkpOwordm9pZCBndWlfbWNoX3NldF9mZ19jb2xvciBfX0FSR1MoKGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfYmdfY29sb3IgX19BUkdTKChndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19zdHJpbmcgX19BUkdTKChpbnQgcm93LCBpbnQgY29sLCBjaGFyX3UgKnRleHQsIGludCBsZW4sIGludCBmbGFncykpOwordm9pZCBndWlfbWNoX2ZsdXNoIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2FkZF9tZW51IF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgcG9zKSk7Cit2b2lkIGd1aV9tY2hfc2hvd19wb3B1cG1lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX21ha2VfcG9wdXAgX19BUkdTKChjaGFyX3UgKnBhdGhfbmFtZSkpOwordm9pZCBndWlfbWNoX2FkZF9tZW51X2l0ZW0gX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBpZHgpKTsKK3ZvaWQgZ3VpX21jaF9kZXN0cm95X21lbnUgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX21jaF9tZW51X2dyZXkgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBncmV5KSk7CitpbnQgZ3VpX21jaF9kaWFsb2cgX19BUkdTKChpbnQgdHlwZSwgY2hhcl91ICp0aXRsZSwgY2hhcl91ICptZXNzYWdlLCBjaGFyX3UgKmJ1dHRvbnMsIGludCBkZmx0YnV0dG9uLCBjaGFyX3UgKnRleHRmaWVsZCkpOwordm9pZCBndWlfbWNoX3NldF9mb3JlZ3JvdW5kIF9fQVJHUygodm9pZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZ3VpX3czMi5wcm8gYi9zcmMvcHJvdG8vZ3VpX3czMi5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThhZDRmNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9ndWlfdzMyLnBybwpAQCAtMCwwICsxLDg5IEBACisvKiBndWlfdzMyLmMgKi8KK3ZvaWQgZ3VpX21jaF9zZXRfYmxpbmtpbmcgX19BUkdTKChsb25nIHdhaXQsIGxvbmcgb24sIGxvbmcgb2ZmKSk7Cit2b2lkIGd1aV9tY2hfc3RvcF9ibGluayBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zdGFydF9ibGluayBfX0FSR1MoKHZvaWQpKTsKK0xSRVNVTFQgV0lOQVBJIHZpbV9XaW5kb3dQcm9jIF9fQVJHUygoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pKTsKK3ZvaWQgZ3VpX21jaF9uZXdfY29sb3JzIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2RlZl9jb2xvcnMgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF9vcGVuIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfZ2V0X3dpbnBvcyBfX0FSR1MoKGludCAqeCwgaW50ICp5KSk7Cit2b2lkIGd1aV9tY2hfc2V0X3dpbnBvcyBfX0FSR1MoKGludCB4LCBpbnQgeSkpOwordm9pZCBndWlfbWNoX3NldF90ZXh0X2FyZWFfcG9zIF9fQVJHUygoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpKTsKK3ZvaWQgZ3VpX21jaF9lbmFibGVfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgZmxhZykpOwordm9pZCBndWlfbWNoX3NldF9zY3JvbGxiYXJfcG9zIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkpOwordm9pZCBndWlfbWNoX2NyZWF0ZV9zY3JvbGxiYXIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGludCBvcmllbnQpKTsKK2ludCBndWlfbWNoX2FkanVzdF9jaGFyc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK0d1aUZvbnQgZ3VpX21jaF9nZXRfZm9udCBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGdpdmVFcnJvcklmTWlzc2luZykpOwordm9pZCBndWlfbWNoX2ZyZWVfZm9udCBfX0FSR1MoKEd1aUZvbnQgZm9udCkpOworZ3VpY29sb3JfVCBndWlfbWNoX2dldF9jb2xvciBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IGd1aV9tY2hfaGFza2V5IF9fQVJHUygoY2hhcl91ICpuYW1lKSk7Cit2b2lkIGd1aV9tY2hfYmVlcCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9pbnZlcnRfcmVjdGFuZ2xlIF9fQVJHUygoaW50IHIsIGludCBjLCBpbnQgbnIsIGludCBuYykpOwordm9pZCBndWlfbWNoX2ljb25pZnkgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19ob2xsb3dfY3Vyc29yIF9fQVJHUygoZ3VpY29sb3JfVCBjb2xvcikpOwordm9pZCBndWlfbWNoX2RyYXdfcGFydF9jdXJzb3IgX19BUkdTKChpbnQgdywgaW50IGgsIGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF91cGRhdGUgX19BUkdTKCh2b2lkKSk7CitpbnQgZ3VpX21jaF93YWl0X2Zvcl9jaGFycyBfX0FSR1MoKGludCB3dGltZSkpOwordm9pZCBndWlfbWNoX2NsZWFyX2Jsb2NrIF9fQVJHUygoaW50IHJvdzEsIGludCBjb2wxLCBpbnQgcm93MiwgaW50IGNvbDIpKTsKK3ZvaWQgZ3VpX21jaF9jbGVhcl9hbGwgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZW5hYmxlX21lbnUgX19BUkdTKChpbnQgZmxhZykpOwordm9pZCBndWlfbWNoX3NldF9tZW51X3BvcyBfX0FSR1MoKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSk7Cit2b2lkIGd1aV9tY2hfbWVudV9oaWRkZW4gX19BUkdTKCh2aW1tZW51X1QgKm1lbnUsIGludCBoaWRkZW4pKTsKK3ZvaWQgZ3VpX21jaF9kcmF3X21lbnViYXIgX19BUkdTKCh2b2lkKSk7Citsb25nX3UgZ3VpX21jaF9nZXRfcmdiIF9fQVJHUygoZ3VpY29sb3JfVCBwaXhlbCkpOwordm9pZCBndWlfbWNoX2FjdGl2YXRlX3dpbmRvdyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zaG93X3Rvb2xiYXIgX19BUkdTKChpbnQgc2hvd2l0KSk7Cit2b2lkIGV4X3NpbWFsdCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBndWlfbWNoX2ZpbmRfZGlhbG9nIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGd1aV9tY2hfcmVwbGFjZV9kaWFsb2cgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZ3VpX21jaF9tb3VzZWhpZGUgX19BUkdTKChpbnQgaGlkZSkpOwordm9pZCBndWlfbWNoX2Rlc3Ryb3lfc2Nyb2xsYmFyIF9fQVJHUygoc2Nyb2xsYmFyX1QgKnNiKSk7CitpbnQgZ3VpX21jaF9nZXRfbW91c2VfeCBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX2dldF9tb3VzZV95IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldG1vdXNlIF9fQVJHUygoaW50IHgsIGludCB5KSk7Cit2b2lkIGd1aV9tY2hfZ2V0X3NjcmVlbl9kaW1lbnNpb25zIF9fQVJHUygoaW50ICpzY3JlZW5fdywgaW50ICpzY3JlZW5faCkpOwordm9pZCBndWlfbWNoX2ZsYXNoIF9fQVJHUygoaW50IG1zZWMpKTsKK3ZvaWQgZ3VpX21jaF9kZWxldGVfbGluZXMgX19BUkdTKChpbnQgcm93LCBpbnQgbnVtX2xpbmVzKSk7Cit2b2lkIGd1aV9tY2hfaW5zZXJ0X2xpbmVzIF9fQVJHUygoaW50IHJvdywgaW50IG51bV9saW5lcykpOwordm9pZCBndWlfbWNoX2V4aXQgX19BUkdTKChpbnQgcmMpKTsKK2ludCBndWlfbWNoX2luaXRfZm9udCBfX0FSR1MoKGNoYXJfdSAqZm9udF9uYW1lLCBpbnQgZm9udHNldCkpOworaW50IGd1aV9tY2hfbWF4aW1pemVkIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX25ld2ZvbnQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc2V0dGl0bGUgX19BUkdTKChjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmljb24pKTsKK3ZvaWQgbWNoX3NldF9tb3VzZV9zaGFwZSBfX0FSR1MoKGludCBzaGFwZSkpOworY2hhcl91ICpndWlfbWNoX2Jyb3dzZSBfX0FSR1MoKGludCBzYXZpbmcsIGNoYXJfdSAqdGl0bGUsIGNoYXJfdSAqZGZsdCwgY2hhcl91ICpleHQsIGNoYXJfdSAqaW5pdGRpciwgY2hhcl91ICpmaWx0ZXIpKTsKK2ludCBnZXRfY21kX2FyZ3MgX19BUkdTKChjaGFyICpwcm9nLCBjaGFyICpjbWRsaW5lLCBjaGFyICoqKmFyZ3ZwLCBjaGFyICoqdG9mcmVlKSk7CitpbnQgZ3VpX2lzX3dpbjMycyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfcGFyZW50IF9fQVJHUygoY2hhciAqdGl0bGUpKTsKK3ZvaWQgZ3VpX21jaF9wcmVwYXJlIF9fQVJHUygoaW50ICphcmdjLCBjaGFyICoqYXJndikpOworaW50IGd1aV9tY2hfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfc2hlbGxzaXplIF9fQVJHUygoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWluX3dpZHRoLCBpbnQgbWluX2hlaWdodCwgaW50IGJhc2Vfd2lkdGgsIGludCBiYXNlX2hlaWdodCkpOwordm9pZCBndWlfbWNoX3NldF9zY3JvbGxiYXJfdGh1bWIgX19BUkdTKChzY3JvbGxiYXJfVCAqc2IsIGxvbmcgdmFsLCBsb25nIHNpemUsIGxvbmcgbWF4KSk7Cit2b2lkIGd1aV9tY2hfc2V0X2ZvbnQgX19BUkdTKChHdWlGb250IGZvbnQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZmdfY29sb3IgX19BUkdTKChndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2JnX2NvbG9yIF9fQVJHUygoZ3VpY29sb3JfVCBjb2xvcikpOwordm9pZCBpbV9zZXRfZm9udCBfX0FSR1MoKExPR0ZPTlQgKmxmKSk7Cit2b2lkIGltX3NldF9wb3NpdGlvbiBfX0FSR1MoKGludCByb3csIGludCBjb2wpKTsKK3ZvaWQgaW1fc2V0X2FjdGl2ZSBfX0FSR1MoKGludCBhY3RpdmUpKTsKK2ludCBpbV9nZXRfc3RhdHVzIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2RyYXdfc3RyaW5nIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCwgY2hhcl91ICp0ZXh0LCBpbnQgbGVuLCBpbnQgZmxhZ3MpKTsKK3ZvaWQgZ3VpX21jaF9mbHVzaCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9hZGRfbWVudSBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSwgaW50IHBvcykpOwordm9pZCBndWlfbWNoX3Nob3dfcG9wdXBtZW51IF9fQVJHUygodmltbWVudV9UICptZW51KSk7Cit2b2lkIGd1aV9tYWtlX3BvcHVwIF9fQVJHUygoY2hhcl91ICpwYXRoX25hbWUpKTsKK3ZvaWQgZ3VpX21ha2VfdGVhcm9mZiBfX0FSR1MoKGNoYXJfdSAqcGF0aF9uYW1lKSk7Cit2b2lkIGd1aV9tY2hfYWRkX21lbnVfaXRlbSBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSwgaW50IGlkeCkpOwordm9pZCBndWlfbWNoX2Rlc3Ryb3lfbWVudSBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSkpOwordm9pZCBndWlfbWNoX21lbnVfZ3JleSBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSwgaW50IGdyZXkpKTsKK2ludCBndWlfbWNoX2RpYWxvZyBfX0FSR1MoKGludCB0eXBlLCBjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKm1lc3NhZ2UsIGNoYXJfdSAqYnV0dG9ucywgaW50IGRmbHRidXR0b24sIGNoYXJfdSAqdGV4dGZpZWxkKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2ZvcmVncm91bmQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfZHJhd3NpZ24gX19BUkdTKChpbnQgcm93LCBpbnQgY29sLCBpbnQgdHlwZW5yKSk7Cit2b2lkICpndWlfbWNoX3JlZ2lzdGVyX3NpZ24gX19BUkdTKChjaGFyX3UgKnNpZ25maWxlKSk7Cit2b2lkIGd1aV9tY2hfZGVzdHJveV9zaWduIF9fQVJHUygodm9pZCAqc2lnbikpOwordm9pZCBndWlfbWNoX2Rpc2FibGVfYmV2YWxfYXJlYSBfX0FSR1MoKEJhbGxvb25FdmFsICpiZXZhbCkpOwordm9pZCBndWlfbWNoX2VuYWJsZV9iZXZhbF9hcmVhIF9fQVJHUygoQmFsbG9vbkV2YWwgKmJldmFsKSk7Cit2b2lkIGd1aV9tY2hfcG9zdF9iYWxsb29uIF9fQVJHUygoQmFsbG9vbkV2YWwgKmJldmFsLCBjaGFyX3UgKm1lc2cpKTsKK0JhbGxvb25FdmFsICpndWlfbWNoX2NyZWF0ZV9iZXZhbF9hcmVhIF9fQVJHUygodm9pZCAqdGFyZ2V0LCBjaGFyX3UgKm1lc2csIHZvaWQgKCptZXNnQ0IpKEJhbGxvb25FdmFsICosIGludCksIHZvaWQgKmNsaWVudERhdGEpKTsKK3ZvaWQgZ3VpX21jaF9kZXN0cm95X2JldmFsX2FyZWEgX19BUkdTKChCYWxsb29uRXZhbCAqYmV2YWwpKTsKK3ZvaWQgbmV0YmVhbnNfZHJhd19tdWx0aXNpZ25faW5kaWNhdG9yIF9fQVJHUygoaW50IHJvdykpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZ3VpX3gxMS5wcm8gYi9zcmMvcHJvdG8vZ3VpX3gxMS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyNGMyNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9ndWlfeDExLnBybwpAQCAtMCwwICsxLDcwIEBACisvKiBndWlfeDExLmMgKi8KK3ZvaWQgZ3VpX3gxMV9rZXlfaGl0X2NiIF9fQVJHUygoV2lkZ2V0IHcsIFh0UG9pbnRlciBkdWQsIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKmR1bSkpOwordm9pZCBndWlfbWNoX3ByZXBhcmUgX19BUkdTKChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2KSk7CitpbnQgZ3VpX21jaF9pbml0X2NoZWNrIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF91bmluaXQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfbmV3X2NvbG9ycyBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX29wZW4gX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9pbml0X3Rvb2x0aXBfZm9udCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX2luaXRfbWVudV9mb250IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2V4aXQgX19BUkdTKChpbnQgcmMpKTsKK2ludCBndWlfbWNoX2dldF93aW5wb3MgX19BUkdTKChpbnQgKngsIGludCAqeSkpOwordm9pZCBndWlfbWNoX3NldF93aW5wb3MgX19BUkdTKChpbnQgeCwgaW50IHkpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfc2hlbGxzaXplIF9fQVJHUygoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWluX3dpZHRoLCBpbnQgbWluX2hlaWdodCwgaW50IGJhc2Vfd2lkdGgsIGludCBiYXNlX2hlaWdodCkpOwordm9pZCBndWlfbWNoX2dldF9zY3JlZW5fZGltZW5zaW9ucyBfX0FSR1MoKGludCAqc2NyZWVuX3csIGludCAqc2NyZWVuX2gpKTsKK2ludCBndWlfbWNoX2luaXRfZm9udCBfX0FSR1MoKGNoYXJfdSAqZm9udF9uYW1lLCBpbnQgZG9fZm9udHNldCkpOworR3VpRm9udCBndWlfbWNoX2dldF9mb250IF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgZ2l2ZUVycm9ySWZNaXNzaW5nKSk7CitpbnQgZ3VpX21jaF9hZGp1c3RfY2hhcnNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2ZvbnQgX19BUkdTKChHdWlGb250IGZvbnQpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZm9udHNldCBfX0FSR1MoKEd1aUZvbnRzZXQgZm9udHNldCkpOwordm9pZCBndWlfbWNoX2ZyZWVfZm9udCBfX0FSR1MoKEd1aUZvbnQgZm9udCkpOwordm9pZCBndWlfbWNoX2ZyZWVfZm9udHNldCBfX0FSR1MoKEd1aUZvbnRzZXQgZm9udHNldCkpOworR3VpRm9udHNldCBndWlfbWNoX2dldF9mb250c2V0IF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgZ2l2ZUVycm9ySWZNaXNzaW5nLCBpbnQgZml4ZWRfd2lkdGgpKTsKK2ludCBmb250c2V0X2hlaWdodCBfX0FSR1MoKFhGb250U2V0IGZzKSk7CitpbnQgZm9udHNldF9oZWlnaHQyIF9fQVJHUygoWEZvbnRTZXQgZnMpKTsKK2d1aWNvbG9yX1QgZ3VpX21jaF9nZXRfY29sb3IgX19BUkdTKChjaGFyX3UgKnJlcW5hbWUpKTsKK3ZvaWQgZ3VpX21jaF9zZXRfZmdfY29sb3IgX19BUkdTKChndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2JnX2NvbG9yIF9fQVJHUygoZ3VpY29sb3JfVCBjb2xvcikpOwordm9pZCBndWlfbWNoX2RyYXdfc3RyaW5nIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCwgY2hhcl91ICpzLCBpbnQgbGVuLCBpbnQgZmxhZ3MpKTsKK2ludCBndWlfbWNoX2hhc2tleSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IGd1aV9nZXRfeDExX3dpbmRpcyBfX0FSR1MoKFdpbmRvdyAqd2luLCBEaXNwbGF5ICoqZGlzKSk7Cit2b2lkIGd1aV9tY2hfYmVlcCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9mbGFzaCBfX0FSR1MoKGludCBtc2VjKSk7Cit2b2lkIGd1aV9tY2hfaW52ZXJ0X3JlY3RhbmdsZSBfX0FSR1MoKGludCByLCBpbnQgYywgaW50IG5yLCBpbnQgbmMpKTsKK3ZvaWQgZ3VpX21jaF9pY29uaWZ5IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldF9mb3JlZ3JvdW5kIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2RyYXdfaG9sbG93X2N1cnNvciBfX0FSR1MoKGd1aWNvbG9yX1QgY29sb3IpKTsKK3ZvaWQgZ3VpX21jaF9kcmF3X3BhcnRfY3Vyc29yIF9fQVJHUygoaW50IHcsIGludCBoLCBndWljb2xvcl9UIGNvbG9yKSk7Cit2b2lkIGd1aV9tY2hfdXBkYXRlIF9fQVJHUygodm9pZCkpOworaW50IGd1aV9tY2hfd2FpdF9mb3JfY2hhcnMgX19BUkdTKChsb25nIHd0aW1lKSk7Cit2b2lkIGd1aV9tY2hfZmx1c2ggX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfY2xlYXJfYmxvY2sgX19BUkdTKChpbnQgcm93MSwgaW50IGNvbDEsIGludCByb3cyLCBpbnQgY29sMikpOwordm9pZCBndWlfbWNoX2NsZWFyX2FsbCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZ3VpX21jaF9kZWxldGVfbGluZXMgX19BUkdTKChpbnQgcm93LCBpbnQgbnVtX2xpbmVzKSk7Cit2b2lkIGd1aV9tY2hfaW5zZXJ0X2xpbmVzIF9fQVJHUygoaW50IHJvdywgaW50IG51bV9saW5lcykpOwordm9pZCBjbGlwX21jaF9sb3NlX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7CitpbnQgY2xpcF9tY2hfb3duX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgY2xpcF9tY2hfc2V0X3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGd1aV9tY2hfbWVudV9ncmV5IF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgZ3JleSkpOwordm9pZCBndWlfbWNoX21lbnVfaGlkZGVuIF9fQVJHUygodmltbWVudV9UICptZW51LCBpbnQgaGlkZGVuKSk7Cit2b2lkIGd1aV9tY2hfZHJhd19tZW51YmFyIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfeDExX21lbnVfY2IgX19BUkdTKChXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKSk7Cit2b2lkIGd1aV9tY2hfc2V0X2JsaW5raW5nIF9fQVJHUygobG9uZyB3YWl0dGltZSwgbG9uZyBvbiwgbG9uZyBvZmYpKTsKK3ZvaWQgZ3VpX21jaF9zdG9wX2JsaW5rIF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3N0YXJ0X2JsaW5rIF9fQVJHUygodm9pZCkpOworbG9uZ191IGd1aV9tY2hfZ2V0X3JnYiBfX0FSR1MoKGd1aWNvbG9yX1QgcGl4ZWwpKTsKK3ZvaWQgZ3VpX3gxMV9jYWxsYmFja3MgX19BUkdTKChXaWRnZXQgdGV4dEFyZWEsIFdpZGdldCB2aW1Gb3JtKSk7CitpbnQgZ3VpX21jaF9nZXRfbW91c2VfeCBfX0FSR1MoKHZvaWQpKTsKK2ludCBndWlfbWNoX2dldF9tb3VzZV95IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX3NldG1vdXNlIF9fQVJHUygoaW50IHgsIGludCB5KSk7CitYQnV0dG9uUHJlc3NlZEV2ZW50ICpndWlfeDExX2dldF9sYXN0X21vdXNlX2V2ZW50IF9fQVJHUygodm9pZCkpOwordm9pZCBndWlfbWNoX2RyYXdzaWduIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCwgaW50IHR5cGVucikpOwordm9pZCAqZ3VpX21jaF9yZWdpc3Rlcl9zaWduIF9fQVJHUygoY2hhcl91ICpzaWduZmlsZSkpOwordm9pZCBndWlfbWNoX2Rlc3Ryb3lfc2lnbiBfX0FSR1MoKHZvaWQgKnNpZ24pKTsKK3ZvaWQgZ3VpX21jaF9tb3VzZWhpZGUgX19BUkdTKChpbnQgaGlkZSkpOwordm9pZCBtY2hfc2V0X21vdXNlX3NoYXBlIF9fQVJHUygoaW50IHNoYXBlKSk7Cit2b2lkIGdldF90b29sYmFyX3BpeG1hcCBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSwgUGl4bWFwICpzZW4sIFBpeG1hcCAqaW5zZW4pKTsKK3ZvaWQgZ3VpX21jaF9tZW51X3NldF90aXAgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2hhbmd1bGluLnBybyBiL3NyYy9wcm90by9oYW5ndWxpbi5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmZGUxNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9oYW5ndWxpbi5wcm8KQEAgLTAsMCArMSw5IEBACisvKiBoYW5ndWxpbi5jICovCitpbnQgaGFuZ3VsX2lucHV0X3N0YXRlX2dldCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgaGFuZ3VsX2lucHV0X3N0YXRlX3NldCBfX0FSR1MoKGludCBzdGF0ZSkpOworaW50IGltX2dldF9zdGF0dXMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGhhbmd1bF9pbnB1dF9zdGF0ZV90b2dnbGUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGhhbmd1bF9rZXlib2FyZF9zZXQgX19BUkdTKCh2b2lkKSk7CitpbnQgaGFuZ3VsX2lucHV0X3Byb2Nlc3MgX19BUkdTKChjaGFyX3UgKnMsIGludCBsZW4pKTsKK3ZvaWQgaGFuZ3VsX2lucHV0X2NsZWFyIF9fQVJHUygodm9pZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vaWZfY3Njb3BlLnBybyBiL3NyYy9wcm90by9pZl9jc2NvcGUucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MTdkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vaWZfY3Njb3BlLnBybwpAQCAtMCwwICsxLDkgQEAKKy8qIGlmX2NzY29wZS5jICovCit2b2lkIGRvX2NzY29wZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBkb19zY3Njb3BlIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGRvX2NzdGFnIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitpbnQgY3NfZmdldHMgX19BUkdTKChjaGFyX3UgKmJ1ZiwgaW50IHNpemUpKTsKK3ZvaWQgY3NfZnJlZV90YWdzIF9fQVJHUygodm9pZCkpOwordm9pZCBjc19wcmludF90YWdzIF9fQVJHUygodm9pZCkpOworaW50IGNzX2Nvbm5lY3Rpb24gX19BUkdTKChpbnQgbnVtLCBjaGFyX3UgKmRicGF0aCwgY2hhcl91ICpwcGF0aCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vaWZfb2xlLnBybyBiL3NyYy9wcm90by9pZl9vbGUucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZWRjYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vaWZfb2xlLnBybwpAQCAtMCwwICsxLDUgQEAKKy8qIGlmX29sZS5jcHAgKi8KK3ZvaWQgSW5pdE9MRSBfX0FSR1MoKGludCogcGJEb1Jlc3RhcnQpKTsKK3ZvaWQgVW5pbml0T0xFIF9fQVJHUygodm9pZCkpOwordm9pZCBSZWdpc3Rlck1lIF9fQVJHUygoaW50IHNpbGVudCkpOwordm9pZCBVbnJlZ2lzdGVyTWUgX19BUkdTKChpbnQgYk5vdGlmeVVzZXIpKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9pZl9wZXJsLnBybyBiL3NyYy9wcm90by9pZl9wZXJsLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTAzMDFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL2lmX3BlcmwucHJvCkBAIC0wLDAgKzEsOCBAQAorLyogYXV0by9pZl9wZXJsLmMgKi8KK2ludCBwZXJsX2VuYWJsZWQgX19BUkdTKChpbnQgdmVyYm9zZSkpOwordm9pZCBwZXJsX2VuZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbXNnX3NwbGl0IF9fQVJHUygoY2hhcl91ICpzLCBpbnQgYXR0cikpOwordm9pZCBwZXJsX3dpbl9mcmVlIF9fQVJHUygod2luX1QgKndwKSk7Cit2b2lkIHBlcmxfYnVmX2ZyZWUgX19BUkdTKChidWZfVCAqYnApKTsKK3ZvaWQgZXhfcGVybCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9wZXJsZG8gX19BUkdTKChleGFyZ19UICplYXApKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9pZl9wZXJsc2Zpby5wcm8gYi9zcmMvcHJvdG8vaWZfcGVybHNmaW8ucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOTA0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vaWZfcGVybHNmaW8ucHJvCkBAIC0wLDAgKzEsMyBAQAorLyogaWZfcGVybHNmaW8uYyAqLworaW50ICpzZmRjbmV3dmltIF9fQVJHUygodm9pZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vaWZfcHl0aG9uLnBybyBiL3NyYy9wcm90by9pZl9weXRob24ucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5M2I2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vaWZfcHl0aG9uLnBybwpAQCAtMCwwICsxLDggQEAKKy8qIGlmX3B5dGhvbi5jICovCitpbnQgcHl0aG9uX2VuYWJsZWQgX19BUkdTKChpbnQgdmVyYm9zZSkpOwordm9pZCBweXRob25fZW5kIF9fQVJHUygodm9pZCkpOwordm9pZCBleF9weXRob24gX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfcHlmaWxlIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIHB5dGhvbl9idWZmZXJfZnJlZSBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK3ZvaWQgcHl0aG9uX3dpbmRvd19mcmVlIF9fQVJHUygod2luX1QgKndpbikpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vaWZfcnVieS5wcm8gYi9zcmMvcHJvdG8vaWZfcnVieS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlZGIyMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9pZl9ydWJ5LnBybwpAQCAtMCwwICsxLDkgQEAKKy8qIGlmX3J1YnkuYyAqLworaW50IHJ1YnlfZW5hYmxlZCBfX0FSR1MoKGludCB2ZXJib3NlKSk7Cit2b2lkIHJ1YnlfZW5kIF9fQVJHUygodm9pZCkpOwordm9pZCBleF9ydWJ5IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X3J1YnlkbyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9ydWJ5ZmlsZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBydWJ5X2J1ZmZlcl9mcmVlIF9fQVJHUygoYnVmX1QgKmJ1ZikpOwordm9pZCBydWJ5X3dpbmRvd19mcmVlIF9fQVJHUygod2luX1QgKndpbikpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vaWZfdGNsLnBybyBiL3NyYy9wcm90by9pZl90Y2wucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NzllZDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vaWZfdGNsLnBybwpAQCAtMCwwICsxLDEwIEBACisvKiBpZl90Y2wuYyAqLwordm9pZCB2aW1fdGNsX2luaXQgX19BUkdTKChjaGFyICphcmcpKTsKK2ludCB0Y2xfZW5hYmxlZCBfX0FSR1MoKGludCB2ZXJib3NlKSk7Cit2b2lkIHRjbF9lbmQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGV4X3RjbCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF90Y2xmaWxlIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X3RjbGRvIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIHRjbF9idWZmZXJfZnJlZSBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK3ZvaWQgdGNsX3dpbmRvd19mcmVlIF9fQVJHUygod2luX1QgKndpbikpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vaWZfeGNtZHNydi5wcm8gYi9zcmMvcHJvdG8vaWZfeGNtZHNydi5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2YTEyMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9pZl94Y21kc3J2LnBybwpAQCAtMCwwICsxLDExIEBACisvKiBpZl94Y21kc3J2LmMgKi8KK2ludCBzZXJ2ZXJSZWdpc3Rlck5hbWUgX19BUkdTKChEaXNwbGF5ICpkcHksIGNoYXJfdSAqbmFtZSkpOwordm9pZCBzZXJ2ZXJDaGFuZ2VSZWdpc3RlcmVkV2luZG93IF9fQVJHUygoRGlzcGxheSAqZHB5LCBXaW5kb3cgbmV3d2luKSk7CitpbnQgc2VydmVyU2VuZFRvVmltIF9fQVJHUygoRGlzcGxheSAqZHB5LCBjaGFyX3UgKm5hbWUsIGNoYXJfdSAqY21kLCBjaGFyX3UgKipyZXN1bHQsIFdpbmRvdyAqc2VydmVyLCBpbnQgYXNFeHByLCBpbnQgbG9jYWxMb29wLCBpbnQgc2lsZW50KSk7CitjaGFyX3UgKnNlcnZlckdldFZpbU5hbWVzIF9fQVJHUygoRGlzcGxheSAqZHB5KSk7CitXaW5kb3cgc2VydmVyU3RyVG9XaW4gX19BUkdTKChjaGFyX3UgKnN0cikpOworaW50IHNlcnZlclNlbmRSZXBseSBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgY2hhcl91ICpzdHIpKTsKK2ludCBzZXJ2ZXJSZWFkUmVwbHkgX19BUkdTKChEaXNwbGF5ICpkcHksIFdpbmRvdyB3aW4sIGNoYXJfdSAqKnN0ciwgaW50IGxvY2FsTG9vcCkpOworaW50IHNlcnZlclBlZWtSZXBseSBfX0FSR1MoKERpc3BsYXkgKmRweSwgV2luZG93IHdpbiwgY2hhcl91ICoqc3RyKSk7Cit2b2lkIHNlcnZlckV2ZW50UHJvYyBfX0FSR1MoKERpc3BsYXkgKmRweSwgWEV2ZW50ICpldmVudFB0cikpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vbWFpbi5wcm8gYi9zcmMvcHJvdG8vbWFpbi5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5NjVmYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9tYWluLnBybwpAQCAtMCwwICsxLDI1IEBACisvKiBtYWluLmMgKi8KK3ZvaWQgbWFpbl9sb29wIF9fQVJHUygoaW50IGNtZHdpbikpOwordm9pZCBnZXRvdXRfcHJlc2VydmVfbW9kaWZpZWQgX19BUkdTKChpbnQgZXhpdHZhbCkpOwordm9pZCBnZXRvdXQgX19BUkdTKChpbnQgZXhpdHZhbCkpOworaW50IHByb2Nlc3NfZW52IF9fQVJHUygoY2hhcl91ICplbnYsIGludCBpc192aW1pbml0KSk7Cit2b2lkIG1haW5lcnJfYXJnX21pc3NpbmcgX19BUkdTKChjaGFyX3UgKnN0cikpOwordm9pZCB0aW1lX3B1c2ggX19BUkdTKCh2b2lkICp0dl9yZWwsIHZvaWQgKnR2X3N0YXJ0KSk7Cit2b2lkIHRpbWVfcG9wIF9fQVJHUygodm9pZCAqdHApKTsKK3ZvaWQgdGltZV9tc2cgX19BUkdTKChjaGFyICptc2csIHZvaWQgKnR2X3N0YXJ0KSk7Cit2b2lkIHNlcnZlcl90b19pbnB1dF9idWYgX19BUkdTKChjaGFyX3UgKnN0cikpOworY2hhcl91ICpldmFsX2NsaWVudF9leHByX3RvX3N0cmluZyBfX0FSR1MoKGNoYXJfdSAqZXhwcikpOworaW50IHRvRl9UeUEgX19BUkdTKChpbnQgYykpOworaW50IGZrbWFwIF9fQVJHUygoaW50IGMpKTsKK3ZvaWQgY29udl90b19wdmltIF9fQVJHUygodm9pZCkpOwordm9pZCBjb252X3RvX3BzdGQgX19BUkdTKCh2b2lkKSk7CitjaGFyX3UgKmxyc3dhcCBfX0FSR1MoKGNoYXJfdSAqaWJ1ZikpOworY2hhcl91ICpsckZzd2FwIF9fQVJHUygoY2hhcl91ICpjbWRidWYsIGludCBsZW4pKTsKK2NoYXJfdSAqbHJGX3N1YiBfX0FSR1MoKGNoYXJfdSAqaWJ1ZikpOworaW50IGNtZGxfZmttYXAgX19BUkdTKChpbnQgYykpOworaW50IEZfaXNhbHBoYSBfX0FSR1MoKGludCBjKSk7CitpbnQgRl9pc2RpZ2l0IF9fQVJHUygoaW50IGMpKTsKK2ludCBGX2lzY2hhciBfX0FSR1MoKGludCBjKSk7Cit2b2lkIGZhcnNpX2ZrZXkgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CitpbnQgYXJhYmljX3NoYXBlIF9fQVJHUygoaW50IGMsIGludCAqY2NwLCBpbnQgKmMxcCwgaW50IHByZXZfYywgaW50IHByZXZfYzEsIGludCBuZXh0X2MpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL21hcmsucHJvIGIvc3JjL3Byb3RvL21hcmsucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MGExYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vbWFyay5wcm8KQEAgLTAsMCArMSwyNiBAQAorLyogbWFyay5jICovCitpbnQgc2V0bWFyayBfX0FSR1MoKGludCBjKSk7Cit2b2lkIHNldHBjbWFyayBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2hlY2twY21hcmsgX19BUkdTKCh2b2lkKSk7Citwb3NfVCAqbW92ZW1hcmsgX19BUkdTKChpbnQgY291bnQpKTsKK3Bvc19UICptb3ZlY2hhbmdlbGlzdCBfX0FSR1MoKGludCBjb3VudCkpOworcG9zX1QgKmdldG1hcmsgX19BUkdTKChpbnQgYywgaW50IGNoYW5nZWZpbGUpKTsKK3Bvc19UICpnZXRuZXh0bWFyayBfX0FSR1MoKHBvc19UICpzdGFydHBvcywgaW50IGRpciwgaW50IGJlZ2luX2xpbmUpKTsKK3ZvaWQgZm1hcmtzX2NoZWNrX25hbWVzIF9fQVJHUygoYnVmX1QgKmJ1ZikpOworaW50IGNoZWNrX21hcmsgX19BUkdTKChwb3NfVCAqcG9zKSk7Cit2b2lkIGNscmFsbG1hcmtzIF9fQVJHUygoYnVmX1QgKmJ1ZikpOworY2hhcl91ICpmbV9nZXRuYW1lIF9fQVJHUygoZm1hcmtfVCAqZm1hcmssIGludCBsZWFkX2xlbikpOwordm9pZCBkb19tYXJrcyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9qdW1wcyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9jaGFuZ2VzIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIG1hcmtfYWRqdXN0IF9fQVJHUygobGluZW5yX1QgbGluZTEsIGxpbmVucl9UIGxpbmUyLCBsb25nIGFtb3VudCwgbG9uZyBhbW91bnRfYWZ0ZXIpKTsKK3ZvaWQgbWFya19jb2xfYWRqdXN0IF9fQVJHUygobGluZW5yX1QgbG51bSwgY29sbnJfVCBtaW5jb2wsIGxvbmcgbG51bV9hbW91bnQsIGxvbmcgY29sX2Ftb3VudCkpOwordm9pZCBjb3B5X2p1bXBsaXN0IF9fQVJHUygod2luX1QgKmZyb20sIHdpbl9UICp0bykpOwordm9pZCBmcmVlX2p1bXBsaXN0IF9fQVJHUygod2luX1QgKndwKSk7Cit2b2lkIHNldF9sYXN0X2N1cnNvciBfX0FSR1MoKHdpbl9UICp3aW4pKTsKK2ludCByZWFkX3ZpbWluZm9fZmlsZW1hcmsgX19BUkdTKCh2aXJfVCAqdmlycCwgaW50IGZvcmNlKSk7Cit2b2lkIHdyaXRlX3ZpbWluZm9fZmlsZW1hcmtzIF9fQVJHUygoRklMRSAqZnApKTsKK2ludCByZW1vdmFibGUgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCB3cml0ZV92aW1pbmZvX21hcmtzIF9fQVJHUygoRklMRSAqZnBfb3V0KSk7Cit2b2lkIGNvcHlfdmltaW5mb19tYXJrcyBfX0FSR1MoKHZpcl9UICp2aXJwLCBGSUxFICpmcF9vdXQsIGludCBjb3VudCwgaW50IGVvZikpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vbWJ5dGUucHJvIGIvc3JjL3Byb3RvL21ieXRlLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTY3YTBhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL21ieXRlLnBybwpAQCAtMCwwICsxLDg2IEBACisvKiBtYnl0ZS5jICovCitpbnQgZW5jX2Nhbm9uX3Byb3BzIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitjaGFyX3UgKm1iX2luaXQgX19BUkdTKCh2b2lkKSk7CitpbnQgYm9tYl9zaXplIF9fQVJHUygodm9pZCkpOworaW50IG1iX2dldF9jbGFzcyBfX0FSR1MoKGNoYXJfdSAqcCkpOworaW50IGRiY3NfY2xhc3MgX19BUkdTKCh1bnNpZ25lZCBsZWFkLCB1bnNpZ25lZCB0cmFpbCkpOworaW50IGxhdGluX2NoYXIybGVuIF9fQVJHUygoaW50IGMpKTsKK2ludCBsYXRpbl9jaGFyMmJ5dGVzIF9fQVJHUygoaW50IGMsIGNoYXJfdSAqYnVmKSk7CitpbnQgbGF0aW5fcHRyMmxlbl9jaGVjayBfX0FSR1MoKGNoYXJfdSAqcCkpOworaW50IHV0Zl9jaGFyMmNlbGxzIF9fQVJHUygoaW50IGMpKTsKK2ludCBsYXRpbl9wdHIyY2VsbHMgX19BUkdTKChjaGFyX3UgKnApKTsKK2ludCB1dGZfcHRyMmNlbGxzIF9fQVJHUygoY2hhcl91ICpwKSk7CitpbnQgZGJjc19wdHIyY2VsbHMgX19BUkdTKChjaGFyX3UgKnApKTsKK2ludCBsYXRpbl9jaGFyMmNlbGxzIF9fQVJHUygoaW50IGMpKTsKK2ludCBsYXRpbl9vZmYyY2VsbHMgX19BUkdTKCh1bnNpZ25lZCBvZmYpKTsKK2ludCBkYmNzX29mZjJjZWxscyBfX0FSR1MoKHVuc2lnbmVkIG9mZikpOworaW50IHV0Zl9vZmYyY2VsbHMgX19BUkdTKCh1bnNpZ25lZCBvZmYpKTsKK2ludCBsYXRpbl9wdHIyY2hhciBfX0FSR1MoKGNoYXJfdSAqcCkpOworaW50IHV0Zl9wdHIyY2hhciBfX0FSR1MoKGNoYXJfdSAqcCkpOworaW50IG1iX3B0cjJjaGFyX2FkdiBfX0FSR1MoKGNoYXJfdSAqKnBwKSk7CitpbnQgYXJhYmljX2NvbWJpbmUgX19BUkdTKChpbnQgb25lLCBpbnQgdHdvKSk7CitpbnQgYXJhYmljX21heWNvbWJpbmUgX19BUkdTKChpbnQgdHdvKSk7CitpbnQgdXRmX2NvbXBvc2luZ2xpa2UgX19BUkdTKChjaGFyX3UgKnAxLCBjaGFyX3UgKnAyKSk7CitpbnQgdXRmY19wdHIyY2hhciBfX0FSR1MoKGNoYXJfdSAqcCwgaW50ICpwMSwgaW50ICpwMikpOworaW50IHV0ZmNfcHRyMmNoYXJfbGVuIF9fQVJHUygoY2hhcl91ICpwLCBpbnQgKnAxLCBpbnQgKnAyLCBpbnQgbWF4bGVuKSk7CitpbnQgdXRmY19jaGFyMmJ5dGVzIF9fQVJHUygoaW50IG9mZiwgY2hhcl91ICpidWYpKTsKK2ludCB1dGZfcHRyMmxlbl9jaGVjayBfX0FSR1MoKGNoYXJfdSAqcCkpOworaW50IHV0Zl9ieXRlMmxlbiBfX0FSR1MoKGludCBiKSk7CitpbnQgdXRmX3B0cjJsZW5fY2hlY2tfbGVuIF9fQVJHUygoY2hhcl91ICpwLCBpbnQgc2l6ZSkpOworaW50IHV0ZmNfcHRyMmxlbl9jaGVjayBfX0FSR1MoKGNoYXJfdSAqcCkpOworaW50IHV0ZmNfcHRyMmxlbl9jaGVja19sZW4gX19BUkdTKChjaGFyX3UgKnAsIGludCBzaXplKSk7CitpbnQgdXRmX2NoYXIybGVuIF9fQVJHUygoaW50IGMpKTsKK2ludCB1dGZfY2hhcjJieXRlcyBfX0FSR1MoKGludCBjLCBjaGFyX3UgKmJ1ZikpOworaW50IHV0Zl9pc2NvbXBvc2luZyBfX0FSR1MoKGludCBjKSk7CitpbnQgdXRmX3ByaW50YWJsZSBfX0FSR1MoKGludCBjKSk7CitpbnQgdXRmX2NsYXNzIF9fQVJHUygoaW50IGMpKTsKK2ludCB1dGZfZm9sZCBfX0FSR1MoKGludCBhKSk7CitpbnQgdXRmX3RvdXBwZXIgX19BUkdTKChpbnQgYSkpOworaW50IHV0Zl9pc2xvd2VyIF9fQVJHUygoaW50IGEpKTsKK2ludCB1dGZfdG9sb3dlciBfX0FSR1MoKGludCBhKSk7CitpbnQgdXRmX2lzdXBwZXIgX19BUkdTKChpbnQgYSkpOworaW50IG1iX3N0cm5pY21wIF9fQVJHUygoY2hhcl91ICpzMSwgY2hhcl91ICpzMiwgaW50IG4pKTsKK3ZvaWQgc2hvd191dGY4IF9fQVJHUygodm9pZCkpOworaW50IGxhdGluX2hlYWRfb2ZmIF9fQVJHUygoY2hhcl91ICpiYXNlLCBjaGFyX3UgKnApKTsKK2ludCBkYmNzX2hlYWRfb2ZmIF9fQVJHUygoY2hhcl91ICpiYXNlLCBjaGFyX3UgKnApKTsKK2ludCBkYmNzX3NjcmVlbl9oZWFkX29mZiBfX0FSR1MoKGNoYXJfdSAqYmFzZSwgY2hhcl91ICpwKSk7CitpbnQgdXRmX2hlYWRfb2ZmIF9fQVJHUygoY2hhcl91ICpiYXNlLCBjaGFyX3UgKnApKTsKK2ludCBtYl9vZmZfbmV4dCBfX0FSR1MoKGNoYXJfdSAqYmFzZSwgY2hhcl91ICpwKSk7CitpbnQgbWJfdGFpbF9vZmYgX19BUkdTKChjaGFyX3UgKmJhc2UsIGNoYXJfdSAqcCkpOworaW50IGRiY3Nfc2NyZWVuX3RhaWxfb2ZmIF9fQVJHUygoY2hhcl91ICpiYXNlLCBjaGFyX3UgKnApKTsKK3ZvaWQgbWJfYWRqdXN0X2N1cnNvciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWJfYWRqdXN0cG9zIF9fQVJHUygocG9zX1QgKmxwKSk7CitjaGFyX3UgKm1iX3ByZXZwdHIgX19BUkdTKChjaGFyX3UgKmxpbmUsIGNoYXJfdSAqcCkpOworaW50IG1iX2NoYXJsZW4gX19BUkdTKChjaGFyX3UgKnN0cikpOworY2hhcl91ICptYl91bmVzY2FwZSBfX0FSR1MoKGNoYXJfdSAqKnBwKSk7CitpbnQgbWJfbGVmdGhhbHZlIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCkpOworaW50IG1iX2ZpeF9jb2wgX19BUkdTKChpbnQgY29sLCBpbnQgcm93KSk7CitjaGFyX3UgKmVuY19za2lwIF9fQVJHUygoY2hhcl91ICpwKSk7CitjaGFyX3UgKmVuY19jYW5vbml6ZSBfX0FSR1MoKGNoYXJfdSAqZW5jKSk7CitjaGFyX3UgKmVuY19sb2NhbGUgX19BUkdTKCh2b2lkKSk7CitpbnQgZW5jbmFtZTJjb2RlcGFnZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCAqbXlfaWNvbnZfb3BlbiBfX0FSR1MoKGNoYXJfdSAqdG8sIGNoYXJfdSAqZnJvbSkpOworaW50IGljb252X2VuYWJsZWQgX19BUkdTKChpbnQgdmVyYm9zZSkpOwordm9pZCBpY29udl9lbmQgX19BUkdTKCh2b2lkKSk7CitpbnQgaW1feGltX2lzdmFsaWRfaW1hY3RpdmF0ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgaW1fc2V0X2FjdGl2ZSBfX0FSR1MoKGludCBhY3RpdmUpKTsKK3ZvaWQgeGltX3NldF9mb2N1cyBfX0FSR1MoKGludCBmb2N1cykpOwordm9pZCBpbV9zZXRfcG9zaXRpb24gX19BUkdTKChpbnQgcm93LCBpbnQgY29sKSk7Cit2b2lkIHhpbV9zZXRfcHJlZWRpdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgeGltX3NldF9zdGF0dXNfYXJlYSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgeGltX2luaXQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHhpbV9kZWNpZGVfaW5wdXRfc3R5bGUgX19BUkdTKCh2b2lkKSk7CitpbnQgaW1fZ2V0X2ZlZWRiYWNrX2F0dHIgX19BUkdTKChpbnQgY29sKSk7Cit2b2lkIHhpbV9yZXNldCBfX0FSR1MoKHZvaWQpKTsKK2ludCB4aW1fcXVldWVfa2V5X3ByZXNzX2V2ZW50IF9fQVJHUygoR2RrRXZlbnRLZXkgKmV2ZW50LCBpbnQgZG93bikpOwordm9pZCB4aW1faW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgaW1fc2h1dGRvd24gX19BUkdTKCh2b2lkKSk7CitpbnQgeGltX2dldF9zdGF0dXNfYXJlYV9oZWlnaHQgX19BUkdTKCh2b2lkKSk7CitpbnQgaW1fZ2V0X3N0YXR1cyBfX0FSR1MoKHZvaWQpKTsKK2ludCBpbV9pc19wcmVlZGl0aW5nIF9fQVJHUygodm9pZCkpOworaW50IGNvbnZlcnRfc2V0dXAgX19BUkdTKCh2aW1jb252X1QgKnZjcCwgY2hhcl91ICpmcm9tLCBjaGFyX3UgKnRvKSk7CitpbnQgY29udmVydF9pbnB1dCBfX0FSR1MoKGNoYXJfdSAqcHRyLCBpbnQgbGVuLCBpbnQgbWF4bGVuKSk7CitpbnQgY29udmVydF9pbnB1dF9zYWZlIF9fQVJHUygoY2hhcl91ICpwdHIsIGludCBsZW4sIGludCBtYXhsZW4sIGNoYXJfdSAqKnJlc3RwLCBpbnQgKnJlc3RsZW5wKSk7CitjaGFyX3UgKnN0cmluZ19jb252ZXJ0IF9fQVJHUygodmltY29udl9UICp2Y3AsIGNoYXJfdSAqcHRyLCBpbnQgKmxlbnApKTsKK2NoYXJfdSAqc3RyaW5nX2NvbnZlcnRfZXh0IF9fQVJHUygodmltY29udl9UICp2Y3AsIGNoYXJfdSAqcHRyLCBpbnQgKmxlbnAsIGludCAqdW5jb252bGVucCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vbWVtZmlsZS5wcm8gYi9zcmMvcHJvdG8vbWVtZmlsZS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZlYjY3NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9tZW1maWxlLnBybwpAQCAtMCwwICsxLDE3IEBACisvKiBtZW1maWxlLmMgKi8KK21lbWZpbGVfVCAqbWZfb3BlbiBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGludCBmbGFncykpOworaW50IG1mX29wZW5fZmlsZSBfX0FSR1MoKG1lbWZpbGVfVCAqbWZwLCBjaGFyX3UgKmZuYW1lKSk7Cit2b2lkIG1mX2Nsb3NlIF9fQVJHUygobWVtZmlsZV9UICptZnAsIGludCBkZWxfZmlsZSkpOwordm9pZCBtZl9jbG9zZV9maWxlIF9fQVJHUygoYnVmX1QgKmJ1ZiwgaW50IGdldGxpbmVzKSk7Cit2b2lkIG1mX25ld19wYWdlX3NpemUgX19BUkdTKChtZW1maWxlX1QgKm1mcCwgdW5zaWduZWQgbmV3X3NpemUpKTsKK2JoZHJfVCAqbWZfbmV3IF9fQVJHUygobWVtZmlsZV9UICptZnAsIGludCBuZWdhdGl2ZSwgaW50IHBhZ2VfY291bnQpKTsKK2JoZHJfVCAqbWZfZ2V0IF9fQVJHUygobWVtZmlsZV9UICptZnAsIGJsb2NrbnJfVCBuciwgaW50IHBhZ2VfY291bnQpKTsKK3ZvaWQgbWZfcHV0IF9fQVJHUygobWVtZmlsZV9UICptZnAsIGJoZHJfVCAqaHAsIGludCBkaXJ0eSwgaW50IGluZmlsZSkpOwordm9pZCBtZl9mcmVlIF9fQVJHUygobWVtZmlsZV9UICptZnAsIGJoZHJfVCAqaHApKTsKK2ludCBtZl9zeW5jIF9fQVJHUygobWVtZmlsZV9UICptZnAsIGludCBmbGFncykpOworaW50IG1mX3JlbGVhc2VfYWxsIF9fQVJHUygodm9pZCkpOworYmxvY2tucl9UIG1mX3RyYW5zX2RlbCBfX0FSR1MoKG1lbWZpbGVfVCAqbWZwLCBibG9ja25yX1Qgb2xkX25yKSk7Cit2b2lkIG1mX3NldF9mZm5hbWUgX19BUkdTKChtZW1maWxlX1QgKm1mcCkpOwordm9pZCBtZl9mdWxsbmFtZSBfX0FSR1MoKG1lbWZpbGVfVCAqbWZwKSk7CitpbnQgbWZfbmVlZF90cmFucyBfX0FSR1MoKG1lbWZpbGVfVCAqbWZwKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9tZW1saW5lLnBybyBiL3NyYy9wcm90by9tZW1saW5lLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmQxMDg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL21lbWxpbmUucHJvCkBAIC0wLDAgKzEsMzEgQEAKKy8qIG1lbWxpbmUuYyAqLworaW50IG1sX29wZW4gX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1sX3NldG5hbWUgX19BUkdTKChidWZfVCAqYnVmKSk7Cit2b2lkIG1sX29wZW5fZmlsZXMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1sX29wZW5fZmlsZSBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK3ZvaWQgY2hlY2tfbmVlZF9zd2FwIF9fQVJHUygoaW50IG5ld2ZpbGUpKTsKK3ZvaWQgbWxfY2xvc2UgX19BUkdTKChidWZfVCAqYnVmLCBpbnQgZGVsX2ZpbGUpKTsKK3ZvaWQgbWxfY2xvc2VfYWxsIF9fQVJHUygoaW50IGRlbF9maWxlKSk7Cit2b2lkIG1sX2Nsb3NlX25vdG1vZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWxfdGltZXN0YW1wIF9fQVJHUygoYnVmX1QgKmJ1ZikpOwordm9pZCBtbF9yZWNvdmVyIF9fQVJHUygodm9pZCkpOworaW50IHJlY292ZXJfbmFtZXMgX19BUkdTKChjaGFyX3UgKipmbmFtZSwgaW50IGxpc3QsIGludCBucikpOwordm9pZCBtbF9zeW5jX2FsbCBfX0FSR1MoKGludCBjaGVja19maWxlLCBpbnQgY2hlY2tfY2hhcikpOwordm9pZCBtbF9wcmVzZXJ2ZSBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBtZXNzYWdlKSk7CitjaGFyX3UgKm1sX2dldCBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2NoYXJfdSAqbWxfZ2V0X3BvcyBfX0FSR1MoKHBvc19UICpwb3MpKTsKK2NoYXJfdSAqbWxfZ2V0X2N1cmxpbmUgX19BUkdTKCh2b2lkKSk7CitjaGFyX3UgKm1sX2dldF9jdXJzb3IgX19BUkdTKCh2b2lkKSk7CitjaGFyX3UgKm1sX2dldF9idWYgX19BUkdTKChidWZfVCAqYnVmLCBsaW5lbnJfVCBsbnVtLCBpbnQgd2lsbF9jaGFuZ2UpKTsKK2ludCBtbF9saW5lX2FsbG9jZWQgX19BUkdTKCh2b2lkKSk7CitpbnQgbWxfYXBwZW5kIF9fQVJHUygobGluZW5yX1QgbG51bSwgY2hhcl91ICpsaW5lLCBjb2xucl9UIGxlbiwgaW50IG5ld2ZpbGUpKTsKK2ludCBtbF9yZXBsYWNlIF9fQVJHUygobGluZW5yX1QgbG51bSwgY2hhcl91ICpsaW5lLCBpbnQgY29weSkpOworaW50IG1sX2RlbGV0ZSBfX0FSR1MoKGxpbmVucl9UIGxudW0sIGludCBtZXNzYWdlKSk7Cit2b2lkIG1sX3NldG1hcmtlZCBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2xpbmVucl9UIG1sX2ZpcnN0bWFya2VkIF9fQVJHUygodm9pZCkpOwordm9pZCBtbF9jbGVhcm1hcmtlZCBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqZ2V0X2ZpbGVfaW5fZGlyIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgY2hhcl91ICpkbmFtZSkpOwordm9pZCBtbF9zZXRkaXJ0eSBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBmbGFnKSk7Citsb25nIG1sX2ZpbmRfbGluZV9vcl9vZmZzZXQgX19BUkdTKChidWZfVCAqYnVmLCBsaW5lbnJfVCBsaW5lLCBsb25nICpvZmZwKSk7Cit2b2lkIGdvdG9fYnl0ZSBfX0FSR1MoKGxvbmcgY250KSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9tZW51LnBybyBiL3NyYy9wcm90by9tZW51LnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZhOTYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL21lbnUucHJvCkBAIC0wLDAgKzEsMjEgQEAKKy8qIG1lbnUuYyAqLwordm9pZCBleF9tZW51IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitjaGFyX3UgKnNldF9jb250ZXh0X2luX21lbnVfY21kIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBjaGFyX3UgKmNtZCwgY2hhcl91ICphcmcsIGludCBmb3JjZWl0KSk7CitjaGFyX3UgKmdldF9tZW51X25hbWUgX19BUkdTKChleHBhbmRfVCAqeHAsIGludCBpZHgpKTsKK2NoYXJfdSAqZ2V0X21lbnVfbmFtZXMgX19BUkdTKChleHBhbmRfVCAqeHAsIGludCBpZHgpKTsKK2NoYXJfdSAqbWVudV9uYW1lX3NraXAgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBnZXRfbWVudV9pbmRleCBfX0FSR1MoKHZpbW1lbnVfVCAqbWVudSwgaW50IHN0YXRlKSk7CitpbnQgbWVudV9pc19tZW51YmFyIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgbWVudV9pc19wb3B1cCBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1lbnVfaXNfY2hpbGRfb2ZfcG9wdXAgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK2ludCBtZW51X2lzX3Rvb2xiYXIgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBtZW51X2lzX3NlcGFyYXRvciBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBndWlfY3JlYXRlX2luaXRpYWxfbWVudXMgX19BUkdTKCh2aW1tZW51X1QgKm1lbnUpKTsKK3ZvaWQgZ3VpX3VwZGF0ZV9tZW51cyBfX0FSR1MoKGludCBtb2RlcykpOworaW50IGd1aV9pc19tZW51X3Nob3J0Y3V0IF9fQVJHUygoaW50IGtleSkpOwordm9pZCBndWlfc2hvd19wb3B1cG1lbnUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGd1aV9tY2hfdG9nZ2xlX3RlYXJvZmZzIF9fQVJHUygoaW50IGVuYWJsZSkpOwordm9pZCBleF9lbWVudSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordmltbWVudV9UICpndWlfZmluZF9tZW51IF9fQVJHUygoY2hhcl91ICpwYXRoX25hbWUpKTsKK3ZvaWQgZXhfbWVudXRyYW5zbGF0ZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vbWVzc2FnZS5wcm8gYi9zcmMvcHJvdG8vbWVzc2FnZS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3NzY1NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9tZXNzYWdlLnBybwpAQCAtMCwwICsxLDU3IEBACisvKiBtZXNzYWdlLmMgKi8KK2ludCBtc2cgX19BUkdTKChjaGFyX3UgKnMpKTsKK2ludCBtc2dfYXR0ciBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGF0dHIpKTsKK2ludCBtc2dfYXR0cl9rZWVwIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgYXR0ciwgaW50IGtlZXApKTsKK2NoYXJfdSAqbXNnX3N0cnRydW5jIF9fQVJHUygoY2hhcl91ICpzKSk7Cit2b2lkIHRydW5jX3N0cmluZyBfX0FSR1MoKGNoYXJfdSAqcywgY2hhcl91ICpidWYsIGludCByb29tKSk7CitpbnQgZW1zZyBfX0FSR1MoKGNoYXJfdSAqcykpOworaW50IGVtc2cyIF9fQVJHUygoY2hhcl91ICpzLCBjaGFyX3UgKmExKSk7CitpbnQgZW1zZzMgX19BUkdTKChjaGFyX3UgKnMsIGNoYXJfdSAqYTEsIGNoYXJfdSAqYTIpKTsKK2ludCBlbXNnbiBfX0FSR1MoKGNoYXJfdSAqcywgbG9uZyBuKSk7CitjaGFyX3UgKm1zZ190cnVuY19hdHRyIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgZm9yY2UsIGludCBhdHRyKSk7CitjaGFyX3UgKm1zZ19tYXlfdHJ1bmMgX19BUkdTKChpbnQgZm9yY2UsIGNoYXJfdSAqcykpOwordm9pZCBleF9tZXNzYWdlcyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCB3YWl0X3JldHVybiBfX0FSR1MoKGludCByZWRyYXcpKTsKK3ZvaWQgc2V0X2tlZXBfbXNnIF9fQVJHUygoY2hhcl91ICpzKSk7Cit2b2lkIG1zZ19zdGFydCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbXNnX3N0YXJ0aGVyZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbXNnX3B1dGNoYXIgX19BUkdTKChpbnQgYykpOwordm9pZCBtc2dfcHV0Y2hhcl9hdHRyIF9fQVJHUygoaW50IGMsIGludCBhdHRyKSk7Cit2b2lkIG1zZ19vdXRudW0gX19BUkdTKChsb25nIG4pKTsKK3ZvaWQgbXNnX2hvbWVfcmVwbGFjZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKK3ZvaWQgbXNnX2hvbWVfcmVwbGFjZV9obCBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKK2ludCBtc2dfb3V0dHJhbnMgX19BUkdTKChjaGFyX3UgKnN0cikpOworaW50IG1zZ19vdXR0cmFuc19hdHRyIF9fQVJHUygoY2hhcl91ICpzdHIsIGludCBhdHRyKSk7CitpbnQgbXNnX291dHRyYW5zX2xlbiBfX0FSR1MoKGNoYXJfdSAqc3RyLCBpbnQgbGVuKSk7CitjaGFyX3UgKm1zZ19vdXR0cmFuc19vbmUgX19BUkdTKChjaGFyX3UgKnAsIGludCBhdHRyKSk7CitpbnQgbXNnX291dHRyYW5zX2xlbl9hdHRyIF9fQVJHUygoY2hhcl91ICptc2dzdHIsIGludCBsZW4sIGludCBhdHRyKSk7Cit2b2lkIG1zZ19tYWtlIF9fQVJHUygoY2hhcl91ICphcmcpKTsKK2ludCBtc2dfb3V0dHJhbnNfc3BlY2lhbCBfX0FSR1MoKGNoYXJfdSAqc3Ryc3RhcnQsIGludCBmcm9tKSk7CitjaGFyX3UgKnN0cjJzcGVjaWFsIF9fQVJHUygoY2hhcl91ICoqc3AsIGludCBmcm9tKSk7Cit2b2lkIHN0cjJzcGVjaWFsYnVmIF9fQVJHUygoY2hhcl91ICpzcCwgY2hhcl91ICpidWYsIGludCBsZW4pKTsKK3ZvaWQgbXNnX3BydF9saW5lIF9fQVJHUygoY2hhcl91ICpzKSk7Cit2b2lkIG1zZ19wdXRzIF9fQVJHUygoY2hhcl91ICpzKSk7Cit2b2lkIG1zZ19wdXRzX3RpdGxlIF9fQVJHUygoY2hhcl91ICpzKSk7Cit2b2lkIG1zZ19wdXRzX2xvbmcgX19BUkdTKChjaGFyX3UgKmxvbmdzdHIpKTsKK3ZvaWQgbXNnX3B1dHNfbG9uZ19hdHRyIF9fQVJHUygoY2hhcl91ICpsb25nc3RyLCBpbnQgYXR0cikpOwordm9pZCBtc2dfcHV0c19sb25nX2xlbl9hdHRyIF9fQVJHUygoY2hhcl91ICpsb25nc3RyLCBpbnQgbGVuLCBpbnQgYXR0cikpOwordm9pZCBtc2dfcHV0c19hdHRyIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgYXR0cikpOworaW50IG1zZ191c2VfcHJpbnRmIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfZXJybXNnIF9fQVJHUygoY2hhciAqc3RyKSk7Cit2b2lkIG1jaF9tc2cgX19BUkdTKChjaGFyICpzdHIpKTsKK3ZvaWQgbXNnX21vcmVtc2cgX19BUkdTKChpbnQgZnVsbCkpOwordm9pZCByZXBlYXRfbWVzc2FnZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbXNnX2Nscl9lb3MgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1zZ19jbHJfZW9zX2ZvcmNlIF9fQVJHUygodm9pZCkpOwordm9pZCBtc2dfY2xyX2NtZGxpbmUgX19BUkdTKCh2b2lkKSk7CitpbnQgbXNnX2VuZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbXNnX2NoZWNrIF9fQVJHUygodm9pZCkpOwordm9pZCBnaXZlX3dhcm5pbmcgX19BUkdTKChjaGFyX3UgKm1lc3NhZ2UsIGludCBobCkpOwordm9pZCBtc2dfYWR2YW5jZSBfX0FSR1MoKGludCBjb2wpKTsKK2ludCBkb19kaWFsb2cgX19BUkdTKChpbnQgdHlwZSwgY2hhcl91ICp0aXRsZSwgY2hhcl91ICptZXNzYWdlLCBjaGFyX3UgKmJ1dHRvbnMsIGludCBkZmx0YnV0dG9uLCBjaGFyX3UgKnRleHRmaWVsZCkpOwordm9pZCBkaXNwbGF5X2NvbmZpcm1fbXNnIF9fQVJHUygodm9pZCkpOworaW50IHZpbV9kaWFsb2dfeWVzbm8gX19BUkdTKChpbnQgdHlwZSwgY2hhcl91ICp0aXRsZSwgY2hhcl91ICptZXNzYWdlLCBpbnQgZGZsdCkpOworaW50IHZpbV9kaWFsb2dfeWVzbm9jYW5jZWwgX19BUkdTKChpbnQgdHlwZSwgY2hhcl91ICp0aXRsZSwgY2hhcl91ICptZXNzYWdlLCBpbnQgZGZsdCkpOworaW50IHZpbV9kaWFsb2dfeWVzbm9hbGxjYW5jZWwgX19BUkdTKChpbnQgdHlwZSwgY2hhcl91ICp0aXRsZSwgY2hhcl91ICptZXNzYWdlLCBpbnQgZGZsdCkpOworY2hhcl91ICpkb19icm93c2UgX19BUkdTKChpbnQgc2F2aW5nLCBjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmRmbHQsIGNoYXJfdSAqZXh0LCBjaGFyX3UgKmluaXRkaXIsIGNoYXJfdSAqZmlsdGVyLCBidWZfVCAqYnVmKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9taXNjMS5wcm8gYi9zcmMvcHJvdG8vbWlzYzEucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYWMzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vbWlzYzEucHJvCkBAIC0wLDAgKzEsODcgQEAKKy8qIG1pc2MxLmMgKi8KK2ludCBnZXRfaW5kZW50IF9fQVJHUygodm9pZCkpOworaW50IGdldF9pbmRlbnRfbG51bSBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2ludCBnZXRfaW5kZW50X2J1ZiBfX0FSR1MoKGJ1Zl9UICpidWYsIGxpbmVucl9UIGxudW0pKTsKK2ludCBzZXRfaW5kZW50IF9fQVJHUygoaW50IHNpemUsIGludCBmbGFncykpOworaW50IGdldF9udW1iZXJfaW5kZW50IF9fQVJHUygobGluZW5yX1QgbG51bSkpOworaW50IG9wZW5fbGluZSBfX0FSR1MoKGludCBkaXIsIGludCBmbGFncywgaW50IG9sZF9pbmRlbnQpKTsKK2ludCBnZXRfbGVhZGVyX2xlbiBfX0FSR1MoKGNoYXJfdSAqbGluZSwgY2hhcl91ICoqZmxhZ3MsIGludCBiYWNrd2FyZCkpOworaW50IHBsaW5lcyBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2ludCBwbGluZXNfd2luIF9fQVJHUygod2luX1QgKndwLCBsaW5lbnJfVCBsbnVtLCBpbnQgd2luaGVpZ2h0KSk7CitpbnQgcGxpbmVzX25vZmlsbCBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2ludCBwbGluZXNfd2luX25vZmlsbCBfX0FSR1MoKHdpbl9UICp3cCwgbGluZW5yX1QgbG51bSwgaW50IHdpbmhlaWdodCkpOworaW50IHBsaW5lc193aW5fbm9mb2xkIF9fQVJHUygod2luX1QgKndwLCBsaW5lbnJfVCBsbnVtKSk7CitpbnQgcGxpbmVzX3dpbl9jb2wgX19BUkdTKCh3aW5fVCAqd3AsIGxpbmVucl9UIGxudW0sIGxvbmcgY29sdW1uKSk7CitpbnQgcGxpbmVzX21fd2luIF9fQVJHUygod2luX1QgKndwLCBsaW5lbnJfVCBmaXJzdCwgbGluZW5yX1QgbGFzdCkpOwordm9pZCBpbnNfYnl0ZXMgX19BUkdTKChjaGFyX3UgKnApKTsKK3ZvaWQgaW5zX2J5dGVzX2xlbiBfX0FSR1MoKGNoYXJfdSAqcCwgaW50IGxlbikpOwordm9pZCBpbnNfY2hhciBfX0FSR1MoKGludCBjKSk7Cit2b2lkIGluc19jaGFyX2J5dGVzIF9fQVJHUygoY2hhcl91ICpidWYsIGludCBjaGFybGVuKSk7Cit2b2lkIGluc19zdHIgX19BUkdTKChjaGFyX3UgKnMpKTsKK2ludCBkZWxfY2hhciBfX0FSR1MoKGludCBmaXhwb3MpKTsKK2ludCBkZWxfY2hhcnMgX19BUkdTKChsb25nIGNvdW50LCBpbnQgZml4cG9zKSk7CitpbnQgZGVsX2J5dGVzIF9fQVJHUygobG9uZyBjb3VudCwgaW50IGZpeHBvcykpOworaW50IHRydW5jYXRlX2xpbmUgX19BUkdTKChpbnQgZml4cG9zKSk7Cit2b2lkIGRlbF9saW5lcyBfX0FSR1MoKGxvbmcgbmxpbmVzLCBpbnQgdW5kbykpOworaW50IGdjaGFyX3BvcyBfX0FSR1MoKHBvc19UICpwb3MpKTsKK2ludCBnY2hhcl9jdXJzb3IgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHBjaGFyX2N1cnNvciBfX0FSR1MoKGludCBjKSk7CitpbnQgaW5pbmRlbnQgX19BUkdTKChpbnQgZXh0cmEpKTsKK2NoYXJfdSAqc2tpcF90b19vcHRpb25fcGFydCBfX0FSR1MoKGNoYXJfdSAqcCkpOwordm9pZCBjaGFuZ2VkIF9fQVJHUygodm9pZCkpOwordm9pZCBjaGFuZ2VkX2J5dGVzIF9fQVJHUygobGluZW5yX1QgbG51bSwgY29sbnJfVCBjb2wpKTsKK3ZvaWQgYXBwZW5kZWRfbGluZXMgX19BUkdTKChsaW5lbnJfVCBsbnVtLCBsb25nIGNvdW50KSk7Cit2b2lkIGFwcGVuZGVkX2xpbmVzX21hcmsgX19BUkdTKChsaW5lbnJfVCBsbnVtLCBsb25nIGNvdW50KSk7Cit2b2lkIGRlbGV0ZWRfbGluZXMgX19BUkdTKChsaW5lbnJfVCBsbnVtLCBsb25nIGNvdW50KSk7Cit2b2lkIGRlbGV0ZWRfbGluZXNfbWFyayBfX0FSR1MoKGxpbmVucl9UIGxudW0sIGxvbmcgY291bnQpKTsKK3ZvaWQgY2hhbmdlZF9saW5lcyBfX0FSR1MoKGxpbmVucl9UIGxudW0sIGNvbG5yX1QgY29sLCBsaW5lbnJfVCBsbnVtZSwgbG9uZyB4dHJhKSk7Cit2b2lkIHVuY2hhbmdlZCBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBmZikpOwordm9pZCBjaGVja19zdGF0dXMgX19BUkdTKChidWZfVCAqYnVmKSk7Cit2b2lkIGNoYW5nZV93YXJuaW5nIF9fQVJHUygoaW50IGNvbCkpOworaW50IGFza195ZXNubyBfX0FSR1MoKGNoYXJfdSAqc3RyLCBpbnQgZGlyZWN0KSk7CitpbnQgZ2V0X2tleXN0cm9rZSBfX0FSR1MoKHZvaWQpKTsKK2ludCBnZXRfbnVtYmVyIF9fQVJHUygoaW50IGNvbG9uKSk7Cit2b2lkIG1zZ21vcmUgX19BUkdTKChsb25nIG4pKTsKK3ZvaWQgYmVlcF9mbHVzaCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgdmltX2JlZXAgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGluaXRfaG9tZWRpciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZXhwYW5kX2VudiBfX0FSR1MoKGNoYXJfdSAqc3JjLCBjaGFyX3UgKmRzdCwgaW50IGRzdGxlbikpOwordm9pZCBleHBhbmRfZW52X2VzYyBfX0FSR1MoKGNoYXJfdSAqc3JjLCBjaGFyX3UgKmRzdCwgaW50IGRzdGxlbiwgaW50IGVzYykpOworY2hhcl91ICp2aW1fZ2V0ZW52IF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgKm11c3RmcmVlKSk7CitjaGFyX3UgKmV4cGFuZF9lbnZfc2F2ZSBfX0FSR1MoKGNoYXJfdSAqc3JjKSk7Cit2b2lkIHZpbV9zZXRlbnYgX19BUkdTKChjaGFyX3UgKm5hbWUsIGNoYXJfdSAqdmFsKSk7CitjaGFyX3UgKmdldF9lbnZfbmFtZSBfX0FSR1MoKGV4cGFuZF9UICp4cCwgaW50IGlkeCkpOwordm9pZCBob21lX3JlcGxhY2UgX19BUkdTKChidWZfVCAqYnVmLCBjaGFyX3UgKnNyYywgY2hhcl91ICpkc3QsIGludCBkc3RsZW4sIGludCBvbmUpKTsKK2NoYXJfdSAqaG9tZV9yZXBsYWNlX3NhdmUgX19BUkdTKChidWZfVCAqYnVmLCBjaGFyX3UgKnNyYykpOworaW50IGZ1bGxwYXRoY21wIF9fQVJHUygoY2hhcl91ICpzMSwgY2hhcl91ICpzMiwgaW50IGNoZWNrbmFtZSkpOworY2hhcl91ICpnZXR0YWlsIF9fQVJHUygoY2hhcl91ICpmbmFtZSkpOworY2hhcl91ICpnZXRuZXh0Y29tcCBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKK2NoYXJfdSAqZ2V0X3Bhc3RfaGVhZCBfX0FSR1MoKGNoYXJfdSAqcGF0aCkpOworaW50IHZpbV9pc3BhdGhzZXAgX19BUkdTKChpbnQgYykpOworaW50IHZpbV9pc3BhdGhsaXN0c2VwIF9fQVJHUygoaW50IGMpKTsKK2ludCB2aW1fZm5hbWVjbXAgX19BUkdTKChjaGFyX3UgKngsIGNoYXJfdSAqeSkpOworaW50IHZpbV9mbmFtZW5jbXAgX19BUkdTKChjaGFyX3UgKngsIGNoYXJfdSAqeSwgc2l6ZV90IGxlbikpOworY2hhcl91ICpjb25jYXRfZm5hbWVzIF9fQVJHUygoY2hhcl91ICpmbmFtZTEsIGNoYXJfdSAqZm5hbWUyLCBpbnQgc2VwKSk7Cit2b2lkIGFkZF9wYXRoc2VwIF9fQVJHUygoY2hhcl91ICpwKSk7CitjaGFyX3UgKkZ1bGxOYW1lX3NhdmUgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBpbnQgZm9yY2UpKTsKK3Bvc19UICpmaW5kX3N0YXJ0X2NvbW1lbnQgX19BUkdTKChpbnQgaW5kX21heGNvbW1lbnQpKTsKK3ZvaWQgZG9fY19leHByX2luZGVudCBfX0FSR1MoKHZvaWQpKTsKK2ludCBjaW5faXNsYWJlbCBfX0FSR1MoKGludCBpbmRfbWF4Y29tbWVudCkpOworaW50IGNpbl9pc2Nhc2UgX19BUkdTKChjaGFyX3UgKnMpKTsKK2ludCBjaW5faXNzY29wZWRlY2wgX19BUkdTKChjaGFyX3UgKnMpKTsKK2ludCBnZXRfY19pbmRlbnQgX19BUkdTKCh2b2lkKSk7CitpbnQgZ2V0X2V4cHJfaW5kZW50IF9fQVJHUygodm9pZCkpOworaW50IGdldF9saXNwX2luZGVudCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgcHJlcGFyZV90b19leGl0IF9fQVJHUygodm9pZCkpOwordm9pZCBwcmVzZXJ2ZV9leGl0IF9fQVJHUygodm9pZCkpOworaW50IHZpbV9mZXhpc3RzIF9fQVJHUygoY2hhcl91ICpmbmFtZSkpOwordm9pZCBsaW5lX2JyZWFrY2hlY2sgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGZhc3RfYnJlYWtjaGVjayBfX0FSR1MoKHZvaWQpKTsKK2ludCBleHBhbmRfd2lsZGNhcmRzIF9fQVJHUygoaW50IG51bV9wYXQsIGNoYXJfdSAqKnBhdCwgaW50ICpudW1fZmlsZSwgY2hhcl91ICoqKmZpbGUsIGludCBmbGFncykpOworaW50IG1hdGNoX3N1ZmZpeCBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKK2ludCBnZW5fZXhwYW5kX3dpbGRjYXJkcyBfX0FSR1MoKGludCBudW1fcGF0LCBjaGFyX3UgKipwYXQsIGludCAqbnVtX2ZpbGUsIGNoYXJfdSAqKipmaWxlLCBpbnQgZmxhZ3MpKTsKK3ZvaWQgYWRkZmlsZSBfX0FSR1MoKGdhcnJheV9UICpnYXAsIGNoYXJfdSAqZiwgaW50IGZsYWdzKSk7CitjaGFyX3UgKmdldF9jbWRfb3V0cHV0IF9fQVJHUygoY2hhcl91ICpjbWQsIGludCBmbGFncykpOwordm9pZCBGcmVlV2lsZCBfX0FSR1MoKGludCBjb3VudCwgY2hhcl91ICoqZmlsZXMpKTsKK2ludCBnb3RvX2ltIF9fQVJHUygodm9pZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vbWlzYzIucHJvIGIvc3JjL3Byb3RvL21pc2MyLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmUyYWY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL21pc2MyLnBybwpAQCAtMCwwICsxLDkxIEBACisvKiBtaXNjMi5jICovCitpbnQgdmlydHVhbF9hY3RpdmUgX19BUkdTKCh2b2lkKSk7CitpbnQgZ2V0dmlzY29sIF9fQVJHUygodm9pZCkpOworaW50IGdldHZpc2NvbDIgX19BUkdTKChjb2xucl9UIGNvbCwgY29sbnJfVCBjb2xhZGQpKTsKK2ludCBjb2xhZHZhbmNlX2ZvcmNlIF9fQVJHUygoY29sbnJfVCB3Y29sKSk7CitpbnQgY29sYWR2YW5jZSBfX0FSR1MoKGNvbG5yX1Qgd2NvbCkpOworaW50IGdldHZwb3MgX19BUkdTKChwb3NfVCAqcG9zLCBjb2xucl9UIHdjb2wpKTsKK2ludCBpbmNfY3Vyc29yIF9fQVJHUygodm9pZCkpOworaW50IGluYyBfX0FSR1MoKHBvc19UICpscCkpOworaW50IGluY2wgX19BUkdTKChwb3NfVCAqbHApKTsKK2ludCBkZWNfY3Vyc29yIF9fQVJHUygodm9pZCkpOworaW50IGRlYyBfX0FSR1MoKHBvc19UICpscCkpOworaW50IGRlY2wgX19BUkdTKChwb3NfVCAqbHApKTsKK3ZvaWQgY2hlY2tfY3Vyc29yX2xudW0gX19BUkdTKCh2b2lkKSk7Cit2b2lkIGNoZWNrX2N1cnNvcl9jb2wgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGNoZWNrX2N1cnNvciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgYWRqdXN0X2N1cnNvcl9jb2wgX19BUkdTKCh2b2lkKSk7CitpbnQgbGVmdGNvbF9jaGFuZ2VkIF9fQVJHUygodm9pZCkpOwordm9pZCB2aW1fbWVtX3Byb2ZpbGVfZHVtcCBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqYWxsb2MgX19BUkdTKCh1bnNpZ25lZCBzaXplKSk7CitjaGFyX3UgKmFsbG9jX2NsZWFyIF9fQVJHUygodW5zaWduZWQgc2l6ZSkpOworY2hhcl91ICphbGxvY19jaGVjayBfX0FSR1MoKHVuc2lnbmVkIHNpemUpKTsKK2NoYXJfdSAqbGFsbG9jX2NsZWFyIF9fQVJHUygobG9uZ191IHNpemUsIGludCBtZXNzYWdlKSk7CitjaGFyX3UgKmxhbGxvYyBfX0FSR1MoKGxvbmdfdSBzaXplLCBpbnQgbWVzc2FnZSkpOwordm9pZCAqbWVtX3JlYWxsb2MgX19BUkdTKCh2b2lkICpwdHIsIHNpemVfdCBzaXplKSk7Cit2b2lkIGRvX291dG9mbWVtX21zZyBfX0FSR1MoKGxvbmdfdSBzaXplKSk7CitjaGFyX3UgKnZpbV9zdHJzYXZlIF9fQVJHUygoY2hhcl91ICpzdHJpbmcpKTsKK2NoYXJfdSAqdmltX3N0cm5zYXZlIF9fQVJHUygoY2hhcl91ICpzdHJpbmcsIGludCBsZW4pKTsKK2NoYXJfdSAqdmltX3N0cnNhdmVfZXNjYXBlZCBfX0FSR1MoKGNoYXJfdSAqc3RyaW5nLCBjaGFyX3UgKmVzY19jaGFycykpOworY2hhcl91ICp2aW1fc3Ryc2F2ZV9lc2NhcGVkX2V4dCBfX0FSR1MoKGNoYXJfdSAqc3RyaW5nLCBjaGFyX3UgKmVzY19jaGFycywgaW50IGJzbCkpOworY2hhcl91ICp2aW1fc3Ryc2F2ZV91cCBfX0FSR1MoKGNoYXJfdSAqc3RyaW5nKSk7CitjaGFyX3UgKnZpbV9zdHJuc2F2ZV91cCBfX0FSR1MoKGNoYXJfdSAqc3RyaW5nLCBpbnQgbGVuKSk7Cit2b2lkIHZpbV9zdHJ1cCBfX0FSR1MoKGNoYXJfdSAqcCkpOwordm9pZCBjb3B5X3NwYWNlcyBfX0FSR1MoKGNoYXJfdSAqcHRyLCBzaXplX3QgY291bnQpKTsKK3ZvaWQgY29weV9jaGFycyBfX0FSR1MoKGNoYXJfdSAqcHRyLCBzaXplX3QgY291bnQsIGludCBjKSk7Cit2b2lkIGRlbF90cmFpbGluZ19zcGFjZXMgX19BUkdTKChjaGFyX3UgKnB0cikpOwordm9pZCB2aW1fc3RybmNweSBfX0FSR1MoKGNoYXJfdSAqdG8sIGNoYXJfdSAqZnJvbSwgaW50IGxlbikpOworaW50IGNvcHlfb3B0aW9uX3BhcnQgX19BUkdTKChjaGFyX3UgKipvcHRpb24sIGNoYXJfdSAqYnVmLCBpbnQgbWF4bGVuLCBjaGFyICpzZXBfY2hhcnMpKTsKK3ZvaWQgdmltX2ZyZWUgX19BUkdTKCh2b2lkICp4KSk7CitpbnQgdmltX3N0cmljbXAgX19BUkdTKChjaGFyICpzMSwgY2hhciAqczIpKTsKK2ludCB2aW1fc3RybmljbXAgX19BUkdTKChjaGFyICpzMSwgY2hhciAqczIsIHNpemVfdCBsZW4pKTsKK2NoYXJfdSAqdmltX3N0cmNociBfX0FSR1MoKGNoYXJfdSAqc3RyaW5nLCBpbnQgYykpOworY2hhcl91ICp2aW1fc3RycmNociBfX0FSR1MoKGNoYXJfdSAqc3RyaW5nLCBpbnQgYykpOworaW50IHZpbV9pc3NwYWNlIF9fQVJHUygoaW50IHgpKTsKK3ZvaWQgZ2FfY2xlYXIgX19BUkdTKChnYXJyYXlfVCAqZ2FwKSk7Cit2b2lkIGdhX2NsZWFyX3N0cmluZ3MgX19BUkdTKChnYXJyYXlfVCAqZ2FwKSk7Cit2b2lkIGdhX2luaXQgX19BUkdTKChnYXJyYXlfVCAqZ2FwKSk7Cit2b2lkIGdhX2luaXQyIF9fQVJHUygoZ2FycmF5X1QgKmdhcCwgaW50IGl0ZW1zaXplLCBpbnQgZ3Jvd3NpemUpKTsKK2ludCBnYV9ncm93IF9fQVJHUygoZ2FycmF5X1QgKmdhcCwgaW50IG4pKTsKK3ZvaWQgZ2FfY29uY2F0IF9fQVJHUygoZ2FycmF5X1QgKmdhcCwgY2hhcl91ICpzKSk7Cit2b2lkIGdhX2FwcGVuZCBfX0FSR1MoKGdhcnJheV9UICpnYXAsIGludCBjKSk7CitpbnQgbmFtZV90b19tb2RfbWFzayBfX0FSR1MoKGludCBjKSk7CitpbnQgc2ltcGxpZnlfa2V5IF9fQVJHUygoaW50IGtleSwgaW50ICptb2RpZmllcnMpKTsKK2NoYXJfdSAqZ2V0X3NwZWNpYWxfa2V5X25hbWUgX19BUkdTKChpbnQgYywgaW50IG1vZGlmaWVycykpOworaW50IHRyYW5zX3NwZWNpYWwgX19BUkdTKChjaGFyX3UgKipzcmNwLCBjaGFyX3UgKmRzdCwgaW50IGtleWNvZGUpKTsKK2ludCBmaW5kX3NwZWNpYWxfa2V5IF9fQVJHUygoY2hhcl91ICoqc3JjcCwgaW50ICptb2RwLCBpbnQga2V5Y29kZSkpOworaW50IGV4dHJhY3RfbW9kaWZpZXJzIF9fQVJHUygoaW50IGtleSwgaW50ICptb2RwKSk7CitpbnQgZmluZF9zcGVjaWFsX2tleV9pbl90YWJsZSBfX0FSR1MoKGludCBjKSk7CitpbnQgZ2V0X3NwZWNpYWxfa2V5X2NvZGUgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2NoYXJfdSAqZ2V0X2tleV9uYW1lIF9fQVJHUygoaW50IGkpKTsKK2ludCBnZXRfbW91c2VfYnV0dG9uIF9fQVJHUygoaW50IGNvZGUsIGludCAqaXNfY2xpY2ssIGludCAqaXNfZHJhZykpOworaW50IGdldF9wc2V1ZG9fbW91c2VfY29kZSBfX0FSR1MoKGludCBidXR0b24sIGludCBpc19jbGljaywgaW50IGlzX2RyYWcpKTsKK2ludCBnZXRfZmlsZWZvcm1hdCBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK2ludCBnZXRfZmlsZWZvcm1hdF9mb3JjZSBfX0FSR1MoKGJ1Zl9UICpidWYsIGV4YXJnX1QgKmVhcCkpOwordm9pZCBzZXRfZmlsZWZvcm1hdCBfX0FSR1MoKGludCB0LCBpbnQgb3B0X2ZsYWdzKSk7CitpbnQgZGVmYXVsdF9maWxlZm9ybWF0IF9fQVJHUygodm9pZCkpOworaW50IGNhbGxfc2hlbGwgX19BUkdTKChjaGFyX3UgKmNtZCwgaW50IG9wdCkpOworaW50IGdldF9yZWFsX3N0YXRlIF9fQVJHUygodm9pZCkpOworaW50IHZpbV9jaGRpcmZpbGUgX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7CitpbnQgaWxsZWdhbF9zbGFzaCBfX0FSR1MoKGNoYXIgKm5hbWUpKTsKK2NoYXJfdSAqcGFyc2Vfc2hhcGVfb3B0IF9fQVJHUygoaW50IHdoYXQpKTsKK2ludCBnZXRfc2hhcGVfaWR4IF9fQVJHUygoaW50IG1vdXNlKSk7Cit2b2lkIHVwZGF0ZV9tb3VzZXNoYXBlIF9fQVJHUygoaW50IHNoYXBlX2lkeCkpOworaW50IGRlY3J5cHRfYnl0ZSBfX0FSR1MoKHZvaWQpKTsKK2ludCB1cGRhdGVfa2V5cyBfX0FSR1MoKGludCBjKSk7Cit2b2lkIGNyeXB0X2luaXRfa2V5cyBfX0FSR1MoKGNoYXJfdSAqcGFzc3dkKSk7CitjaGFyX3UgKmdldF9jcnlwdF9rZXkgX19BUkdTKChpbnQgc3RvcmUsIGludCB0d2ljZSkpOwordm9pZCAqdmltX2ZpbmRmaWxlX2luaXQgX19BUkdTKChjaGFyX3UgKnBhdGgsIGNoYXJfdSAqZmlsZW5hbWUsIGNoYXJfdSAqc3RvcGRpcnMsIGludCBsZXZlbCwgaW50IGZyZWVfdmlzaXRlZCwgaW50IG5lZWRfZGlyLCB2b2lkICpzZWFyY2hfY3R4LCBpbnQgdGFnZmlsZSwgY2hhcl91ICpyZWxfZm5hbWUpKTsKK2NoYXJfdSAqdmltX2ZpbmRmaWxlX3N0b3BkaXIgX19BUkdTKChjaGFyX3UgKmJ1ZikpOwordm9pZCB2aW1fZmluZGZpbGVfY2xlYW51cCBfX0FSR1MoKHZvaWQgKmN0eCkpOworY2hhcl91ICp2aW1fZmluZGZpbGUgX19BUkdTKCh2b2lkICpzZWFyY2hfY3R4KSk7Cit2b2lkIHZpbV9maW5kZmlsZV9mcmVlX3Zpc2l0ZWQgX19BUkdTKCh2b2lkICpzZWFyY2hfY3R4KSk7CitjaGFyX3UgKmZpbmRfZmlsZV9pbl9wYXRoIF9fQVJHUygoY2hhcl91ICpwdHIsIGludCBsZW4sIGludCBvcHRpb25zLCBpbnQgZmlyc3QsIGNoYXJfdSAqcmVsX2ZuYW1lKSk7CitjaGFyX3UgKmZpbmRfZGlyZWN0b3J5X2luX3BhdGggX19BUkdTKChjaGFyX3UgKnB0ciwgaW50IGxlbiwgaW50IG9wdGlvbnMsIGNoYXJfdSAqcmVsX2ZuYW1lKSk7CitpbnQgdmltX2NoZGlyIF9fQVJHUygoY2hhcl91ICpuZXdfZGlyKSk7CitpbnQgZ2V0X3VzZXJfbmFtZSBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgbGVuKSk7Cit2b2lkIHNvcnRfc3RyaW5ncyBfX0FSR1MoKGNoYXJfdSAqKmZpbGVzLCBpbnQgY291bnQpKTsKK2ludCBwYXRoY21wIF9fQVJHUygoY29uc3QgY2hhciAqcCwgY29uc3QgY2hhciAqcSkpOworY2hhcl91ICpwYXJzZV9saXN0X29wdGlvbnMgX19BUkdTKChjaGFyX3UgKm9wdGlvbl9zdHIsIG9wdGlvbl90YWJsZV9UICp0YWJsZSwgaW50IHRhYmxlX3NpemUpKTsKK3ZvaWQgbXNnX3N0ciBfX0FSR1MoKGNoYXJfdSAqcywgY2hhcl91ICphcmcpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL21vdmUucHJvIGIvc3JjL3Byb3RvL21vdmUucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTFhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vbW92ZS5wcm8KQEAgLTAsMCArMSw0MCBAQAorLyogbW92ZS5jICovCit2b2lkIHVwZGF0ZV90b3BsaW5lX3JlZHJhdyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgdXBkYXRlX3RvcGxpbmUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHVwZGF0ZV9jdXJzd2FudCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2hlY2tfY3Vyc29yX21vdmVkIF9fQVJHUygod2luX1QgKndwKSk7Cit2b2lkIGNoYW5nZWRfd2luZG93X3NldHRpbmcgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGNoYW5nZWRfd2luZG93X3NldHRpbmdfd2luIF9fQVJHUygod2luX1QgKndwKSk7Cit2b2lkIHNldF90b3BsaW5lIF9fQVJHUygod2luX1QgKndwLCBsaW5lbnJfVCBsbnVtKSk7Cit2b2lkIGNoYW5nZWRfY2xpbmVfYmVmX2N1cnMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGNoYW5nZWRfY2xpbmVfYmVmX2N1cnNfd2luIF9fQVJHUygod2luX1QgKndwKSk7Cit2b2lkIGNoYW5nZWRfbGluZV9hYnZfY3VycyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2hhbmdlZF9saW5lX2Fidl9jdXJzX3dpbiBfX0FSR1MoKHdpbl9UICp3cCkpOwordm9pZCB2YWxpZGF0ZV9ib3RsaW5lIF9fQVJHUygodm9pZCkpOwordm9pZCBpbnZhbGlkYXRlX2JvdGxpbmUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGludmFsaWRhdGVfYm90bGluZV93aW4gX19BUkdTKCh3aW5fVCAqd3ApKTsKK3ZvaWQgYXBwcm94aW1hdGVfYm90bGluZV93aW4gX19BUkdTKCh3aW5fVCAqd3ApKTsKK2ludCBjdXJzb3JfdmFsaWQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHZhbGlkYXRlX2N1cnNvciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgdmFsaWRhdGVfY2xpbmVfcm93IF9fQVJHUygodm9pZCkpOwordm9pZCB2YWxpZGF0ZV92aXJ0Y29sIF9fQVJHUygodm9pZCkpOwordm9pZCB2YWxpZGF0ZV92aXJ0Y29sX3dpbiBfX0FSR1MoKHdpbl9UICp3cCkpOwordm9pZCB2YWxpZGF0ZV9jdXJzb3JfY29sIF9fQVJHUygodm9pZCkpOworaW50IHdpbl9jb2xfb2ZmIF9fQVJHUygod2luX1QgKndwKSk7CitpbnQgY3Vyd2luX2NvbF9vZmYgX19BUkdTKCh2b2lkKSk7CitpbnQgd2luX2NvbF9vZmYyIF9fQVJHUygod2luX1QgKndwKSk7CitpbnQgY3Vyd2luX2NvbF9vZmYyIF9fQVJHUygodm9pZCkpOwordm9pZCBjdXJzX2NvbHVtbnMgX19BUkdTKChpbnQgc2Nyb2xsKSk7Cit2b2lkIHNjcm9sbGRvd24gX19BUkdTKChsb25nIGxpbmVfY291bnQsIGludCBieWZvbGQpKTsKK3ZvaWQgc2Nyb2xsdXAgX19BUkdTKChsb25nIGxpbmVfY291bnQsIGludCBieWZvbGQpKTsKK3ZvaWQgY2hlY2tfdG9wZmlsbCBfX0FSR1MoKHdpbl9UICp3cCwgaW50IGRvd24pKTsKK3ZvaWQgc2Nyb2xsZG93bl9jbGFtcCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgc2Nyb2xsdXBfY2xhbXAgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNjcm9sbF9jdXJzb3JfdG9wIF9fQVJHUygoaW50IG1pbl9zY3JvbGwsIGludCBhbHdheXMpKTsKK3ZvaWQgc2V0X2VtcHR5X3Jvd3MgX19BUkdTKCh3aW5fVCAqd3AsIGludCB1c2VkKSk7Cit2b2lkIHNjcm9sbF9jdXJzb3JfYm90IF9fQVJHUygoaW50IG1pbl9zY3JvbGwsIGludCBzZXRfdG9wYm90KSk7Cit2b2lkIHNjcm9sbF9jdXJzb3JfaGFsZndheSBfX0FSR1MoKGludCBhdGVuZCkpOwordm9pZCBjdXJzb3JfY29ycmVjdCBfX0FSR1MoKHZvaWQpKTsKK2ludCBvbmVwYWdlIF9fQVJHUygoaW50IGRpciwgbG9uZyBjb3VudCkpOwordm9pZCBoYWxmcGFnZSBfX0FSR1MoKGludCBmbGFnLCBsaW5lbnJfVCBQcmVudW0pKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL25ldGJlYW5zLnBybyBiL3NyYy9wcm90by9uZXRiZWFucy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzYWU3MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9uZXRiZWFucy5wcm8KQEAgLTAsMCArMSwyNCBAQAorLyogbmV0YmVhbnMuYyAqLwordm9pZCBuZXRiZWFuc19YdF9jb25uZWN0IF9fQVJHUygodm9pZCAqY29udGV4dCkpOwordm9pZCBuZXRiZWFuc19ndGtfY29ubmVjdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbmV0YmVhbnNfdzMyX2Nvbm5lY3QgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1lc3NhZ2VGcm9tTmV0YmVhbnNXMzIgX19BUkdTKCh2b2lkKSk7CitpbnQgaXNOZXRiZWFuc0J1ZmZlciBfX0FSR1MoKGJ1Zl9UICpidWZwKSk7CitpbnQgaXNOZXRiZWFuc01vZGlmaWVkIF9fQVJHUygoYnVmX1QgKmJ1ZnApKTsKK3ZvaWQgbmV0YmVhbnNfZW5kIF9fQVJHUygodm9pZCkpOwordm9pZCBuZXRiZWFuc19zdGFydHVwX2RvbmUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG5ldGJlYW5zX2ZyYW1lX21vdmVkIF9fQVJHUygoaW50IG5ld194LCBpbnQgbmV3X3kpKTsKK3ZvaWQgbmV0YmVhbnNfZmlsZV9vcGVuZWQgX19BUkdTKChjaGFyICpmaWxlbmFtZSkpOwordm9pZCBuZXRiZWFuc19maWxlX2Nsb3NlZCBfX0FSR1MoKGJ1Zl9UICpidWZwKSk7Cit2b2lkIG5ldGJlYW5zX2luc2VydGVkIF9fQVJHUygoYnVmX1QgKmJ1ZnAsIGxpbmVucl9UIGxpbmVuciwgY29sbnJfVCBjb2wsIGludCBvbGRsZW4sIGNoYXJfdSAqdHh0LCBpbnQgbmV3bGVuKSk7Cit2b2lkIG5ldGJlYW5zX3JlbW92ZWQgX19BUkdTKChidWZfVCAqYnVmcCwgbGluZW5yX1QgbGluZW5yLCBjb2xucl9UIGNvbCwgbG9uZyBsZW4pKTsKK3ZvaWQgbmV0YmVhbnNfdW5tb2RpZmllZCBfX0FSR1MoKGJ1Zl9UICpidWZwKSk7Cit2b2lkIG5ldGJlYW5zX2J1dHRvbl9yZWxlYXNlIF9fQVJHUygoaW50IGJ1dHRvbikpOwordm9pZCBuZXRiZWFuc19rZXljb21tYW5kIF9fQVJHUygoaW50IGtleSkpOwordm9pZCBuZXRiZWFuc19zYXZlX2J1ZmZlciBfX0FSR1MoKGJ1Zl9UICpidWZwKSk7Cit2b2lkIG5ldGJlYW5zX2RlbGV0ZWRfYWxsX2xpbmVzIF9fQVJHUygoYnVmX1QgKmJ1ZnApKTsKK2ludCBuZXRiZWFuc19pc19ndWFyZGVkIF9fQVJHUygobGluZW5yX1QgdG9wLCBsaW5lbnJfVCBib3QpKTsKK3ZvaWQgbmV0YmVhbnNfZHJhd19tdWx0aXNpZ25faW5kaWNhdG9yIF9fQVJHUygoaW50IHJvdykpOwordm9pZCBuZXRiZWFuc19kcmF3X211bHRpc2lnbl9pbmRpY2F0b3IgX19BUkdTKChpbnQgcm93KSk7Cit2b2lkIG5ldGJlYW5zX2d1dHRlcl9jbGljayBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL25vcm1hbC5wcm8gYi9zcmMvcHJvdG8vbm9ybWFsLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWUzMzJiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL25vcm1hbC5wcm8KQEAgLTAsMCArMSwyMyBAQAorLyogbm9ybWFsLmMgKi8KK3ZvaWQgaW5pdF9ub3JtYWxfY21kcyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbm9ybWFsX2NtZCBfX0FSR1MoKG9wYXJnX1QgKm9hcCwgaW50IHRvcGxldmVsKSk7Cit2b2lkIGRvX3BlbmRpbmdfb3BlcmF0b3IgX19BUkdTKChjbWRhcmdfVCAqY2FwLCBpbnQgb2xkX2NvbCwgaW50IGd1aV95YW5rKSk7CitpbnQgZG9fbW91c2UgX19BUkdTKChvcGFyZ19UICpvYXAsIGludCBjLCBpbnQgZGlyLCBsb25nIGNvdW50LCBpbnQgZml4aW5kZW50KSk7Cit2b2lkIGNoZWNrX3Zpc3VhbF9oaWdobGlnaHQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGVuZF92aXN1YWxfbW9kZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgcmVzZXRfVklzdWFsX2FuZF9yZXNlbCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgcmVzZXRfVklzdWFsIF9fQVJHUygodm9pZCkpOworaW50IGZpbmRfaWRlbnRfdW5kZXJfY3Vyc29yIF9fQVJHUygoY2hhcl91ICoqc3RyaW5nLCBpbnQgZmluZF90eXBlKSk7CitpbnQgZmluZF9pZGVudF9hdF9wb3MgX19BUkdTKCh3aW5fVCAqd3AsIGxpbmVucl9UIGxudW0sIGNvbG5yX1Qgc3RhcnRjb2wsIGNoYXJfdSAqKnN0cmluZywgaW50IGZpbmRfdHlwZSkpOwordm9pZCBjbGVhcl9zaG93Y21kIF9fQVJHUygodm9pZCkpOworaW50IGFkZF90b19zaG93Y21kIF9fQVJHUygoaW50IGMpKTsKK3ZvaWQgYWRkX3RvX3Nob3djbWRfYyBfX0FSR1MoKGludCBjKSk7Cit2b2lkIHB1c2hfc2hvd2NtZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgcG9wX3Nob3djbWQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGRvX2NoZWNrX3Njcm9sbGJpbmQgX19BUkdTKChpbnQgY2hlY2spKTsKK3ZvaWQgY2hlY2tfc2Nyb2xsYmluZCBfX0FSR1MoKGxpbmVucl9UIHRvcGxpbmVfZGlmZiwgbG9uZyBsZWZ0Y29sX2RpZmYpKTsKK3ZvaWQgc2Nyb2xsX3JlZHJhdyBfX0FSR1MoKGludCB1cCwgbG9uZyBjb3VudCkpOwordm9pZCBkb19udl9pZGVudCBfX0FSR1MoKGludCBjMSwgaW50IGMyKSk7Cit2b2lkIHN0YXJ0X3NlbGVjdGlvbiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWF5X3N0YXJ0X3NlbGVjdCBfX0FSR1MoKGludCBjKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9vcHMucHJvIGIvc3JjL3Byb3RvL29wcy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0MjY3MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9vcHMucHJvCkBAIC0wLDAgKzEsNTMgQEAKKy8qIG9wcy5jICovCitpbnQgZ2V0X29wX3R5cGUgX19BUkdTKChpbnQgY2hhcjEsIGludCBjaGFyMikpOworaW50IG9wX29uX2xpbmVzIF9fQVJHUygoaW50IG9wKSk7CitpbnQgZ2V0X29wX2NoYXIgX19BUkdTKChpbnQgb3B0eXBlKSk7CitpbnQgZ2V0X2V4dHJhX29wX2NoYXIgX19BUkdTKChpbnQgb3B0eXBlKSk7Cit2b2lkIG9wX3NoaWZ0IF9fQVJHUygob3BhcmdfVCAqb2FwLCBpbnQgY3Vyc190b3AsIGludCBhbW91bnQpKTsKK3ZvaWQgc2hpZnRfbGluZSBfX0FSR1MoKGludCBsZWZ0LCBpbnQgcm91bmQsIGludCBhbW91bnQpKTsKK3ZvaWQgb3BfcmVpbmRlbnQgX19BUkdTKChvcGFyZ19UICpvYXAsIGludCAoKmhvdykodm9pZCkpKTsKK2ludCBnZXRfZXhwcl9yZWdpc3RlciBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgc2V0X2V4cHJfbGluZSBfX0FSR1MoKGNoYXJfdSAqbmV3X2xpbmUpKTsKK2NoYXJfdSAqZ2V0X2V4cHJfbGluZSBfX0FSR1MoKHZvaWQpKTsKK2ludCB2YWxpZF95YW5rX3JlZyBfX0FSR1MoKGludCByZWduYW1lLCBpbnQgd3JpdGluZykpOwordm9pZCAqZ2V0X3JlZ2lzdGVyIF9fQVJHUygoaW50IG5hbWUsIGludCBjb3B5KSk7Cit2b2lkIHB1dF9yZWdpc3RlciBfX0FSR1MoKGludCBuYW1lLCB2b2lkICpyZWcpKTsKK2ludCB5YW5rX3JlZ2lzdGVyX21saW5lIF9fQVJHUygoaW50IHJlZ25hbWUpKTsKK2ludCBkb19yZWNvcmQgX19BUkdTKChpbnQgYykpOworaW50IGRvX2V4ZWNyZWcgX19BUkdTKChpbnQgcmVnbmFtZSwgaW50IGNvbG9uLCBpbnQgYWRkY3IpKTsKK2ludCBpbnNlcnRfcmVnIF9fQVJHUygoaW50IHJlZ25hbWUsIGludCBsaXRlcmFsbHkpKTsKK2ludCBjbWRsaW5lX3Bhc3RlIF9fQVJHUygoaW50IHJlZ25hbWUsIGludCBsaXRlcmFsbHkpKTsKK3ZvaWQgYWRqdXN0X2NsaXBfcmVnIF9fQVJHUygoaW50ICpycCkpOworaW50IG9wX2RlbGV0ZSBfX0FSR1MoKG9wYXJnX1QgKm9hcCkpOworaW50IG9wX3JlcGxhY2UgX19BUkdTKChvcGFyZ19UICpvYXAsIGludCBjKSk7Cit2b2lkIG9wX3RpbGRlIF9fQVJHUygob3BhcmdfVCAqb2FwKSk7CitpbnQgc3dhcGNoYXIgX19BUkdTKChpbnQgb3BfdHlwZSwgcG9zX1QgKnBvcykpOwordm9pZCBvcF9pbnNlcnQgX19BUkdTKChvcGFyZ19UICpvYXAsIGxvbmcgY291bnQxKSk7CitpbnQgb3BfY2hhbmdlIF9fQVJHUygob3BhcmdfVCAqb2FwKSk7Cit2b2lkIGluaXRfeWFuayBfX0FSR1MoKHZvaWQpKTsKK2ludCBvcF95YW5rIF9fQVJHUygob3BhcmdfVCAqb2FwLCBpbnQgZGVsZXRpbmcsIGludCBtZXNzKSk7Cit2b2lkIGRvX3B1dCBfX0FSR1MoKGludCByZWduYW1lLCBpbnQgZGlyLCBsb25nIGNvdW50LCBpbnQgZmxhZ3MpKTsKK2ludCBwcmVwcm9jc19sZWZ0IF9fQVJHUygodm9pZCkpOworaW50IGdldF9yZWdpc3Rlcl9uYW1lIF9fQVJHUygoaW50IG51bSkpOwordm9pZCBleF9kaXNwbGF5IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGRvX2RvX2pvaW4gX19BUkdTKChsb25nIGNvdW50LCBpbnQgaW5zZXJ0X3NwYWNlKSk7CitpbnQgZG9fam9pbiBfX0FSR1MoKGludCBpbnNlcnRfc3BhY2UpKTsKK3ZvaWQgb3BfZm9ybWF0IF9fQVJHUygob3BhcmdfVCAqb2FwLCBpbnQga2VlcF9jdXJzb3IpKTsKK3ZvaWQgZm9ybWF0X2xpbmVzIF9fQVJHUygobGluZW5yX1QgbGluZV9jb3VudCkpOworaW50IHBhcmFncmFwaF9zdGFydCBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2ludCBkb19hZGRzdWIgX19BUkdTKChpbnQgY29tbWFuZCwgbGluZW5yX1QgUHJlbnVtMSkpOworaW50IHJlYWRfdmltaW5mb19yZWdpc3RlciBfX0FSR1MoKHZpcl9UICp2aXJwLCBpbnQgZm9yY2UpKTsKK3ZvaWQgd3JpdGVfdmltaW5mb19yZWdpc3RlcnMgX19BUkdTKChGSUxFICpmcCkpOwordm9pZCB4MTFfZXhwb3J0X2ZpbmFsX3NlbGVjdGlvbiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2xpcF9mcmVlX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfZ2V0X3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfeWFua19zZWxlY3Rpb24gX19BUkdTKChpbnQgdHlwZSwgY2hhcl91ICpzdHIsIGxvbmcgbGVuLCBWaW1DbGlwYm9hcmQgKmNiZCkpOworaW50IGNsaXBfY29udmVydF9zZWxlY3Rpb24gX19BUkdTKChjaGFyX3UgKipzdHIsIGxvbmdfdSAqbGVuLCBWaW1DbGlwYm9hcmQgKmNiZCkpOwordm9pZCBkbmRfeWFua19kcmFnX2RhdGEgX19BUkdTKChjaGFyX3UgKnN0ciwgbG9uZyBsZW4pKTsKK2NoYXJfdSBnZXRfcmVnX3R5cGUgX19BUkdTKChpbnQgcmVnbmFtZSwgbG9uZyAqcmVnbGVuKSk7CitjaGFyX3UgKmdldF9yZWdfY29udGVudHMgX19BUkdTKChpbnQgcmVnbmFtZSwgaW50IGFsbG93ZXhwcikpOwordm9pZCB3cml0ZV9yZWdfY29udGVudHMgX19BUkdTKChpbnQgbmFtZSwgY2hhcl91ICpzdHIsIGludCBtYXhsZW4sIGludCBtdXN0X2FwcGVuZCkpOwordm9pZCB3cml0ZV9yZWdfY29udGVudHNfZXggX19BUkdTKChpbnQgbmFtZSwgY2hhcl91ICpzdHIsIGludCBtYXhsZW4sIGludCBtdXN0X2FwcGVuZCwgaW50IHlhbmtfdHlwZSwgbG9uZyBibG9ja19sZW4pKTsKK3ZvaWQgY2xlYXJfb3BhcmcgX19BUkdTKChvcGFyZ19UICpvYXApKTsKK3ZvaWQgY3Vyc29yX3Bvc19pbmZvIF9fQVJHUygodm9pZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vb3B0aW9uLnBybyBiL3NyYy9wcm90by9vcHRpb24ucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTU2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vb3B0aW9uLnBybwpAQCAtMCwwICsxLDUyIEBACisvKiBvcHRpb24uYyAqLwordm9pZCBzZXRfaW5pdF8xIF9fQVJHUygodm9pZCkpOwordm9pZCBzZXRfc3RyaW5nX2RlZmF1bHQgX19BUkdTKChjaGFyICpuYW1lLCBjaGFyX3UgKnZhbCkpOwordm9pZCBzZXRfbnVtYmVyX2RlZmF1bHQgX19BUkdTKChjaGFyICpuYW1lLCBsb25nIHZhbCkpOwordm9pZCBzZXRfaW5pdF8yIF9fQVJHUygodm9pZCkpOwordm9pZCBzZXRfaW5pdF8zIF9fQVJHUygodm9pZCkpOwordm9pZCBzZXRfaGVscGxhbmdfZGVmYXVsdCBfX0FSR1MoKGNoYXJfdSAqbGFuZykpOwordm9pZCBpbml0X2d1aV9vcHRpb25zIF9fQVJHUygodm9pZCkpOwordm9pZCBzZXRfdGl0bGVfZGVmYXVsdHMgX19BUkdTKCh2b2lkKSk7CitpbnQgZG9fc2V0IF9fQVJHUygoY2hhcl91ICphcmcsIGludCBvcHRfZmxhZ3MpKTsKK3ZvaWQgc2V0X29wdGlvbnNfYmluIF9fQVJHUygoaW50IG9sZHZhbCwgaW50IG5ld3ZhbCwgaW50IG9wdF9mbGFncykpOworaW50IGdldF92aW1pbmZvX3BhcmFtZXRlciBfX0FSR1MoKGludCB0eXBlKSk7CitjaGFyX3UgKmZpbmRfdmltaW5mb19wYXJhbWV0ZXIgX19BUkdTKChpbnQgdHlwZSkpOwordm9pZCBjaGVja19vcHRpb25zIF9fQVJHUygodm9pZCkpOwordm9pZCBjaGVja19idWZfb3B0aW9ucyBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK3ZvaWQgZnJlZV9zdHJpbmdfb3B0aW9uIF9fQVJHUygoY2hhcl91ICpwKSk7Cit2b2lkIGNsZWFyX3N0cmluZ19vcHRpb24gX19BUkdTKChjaGFyX3UgKipwcCkpOwordm9pZCBzZXRfdGVybV9vcHRpb25fYWxsb2NlZCBfX0FSR1MoKGNoYXJfdSAqKnApKTsKK3ZvaWQgc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0IF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgb3B0X2lkeCwgY2hhcl91ICp2YWwsIGludCBvcHRfZmxhZ3MpKTsKK2NoYXJfdSAqY2hlY2tfc3RsX29wdGlvbiBfX0FSR1MoKGNoYXJfdSAqcykpOworaW50IGdldF9vcHRpb25fdmFsdWUgX19BUkdTKChjaGFyX3UgKm5hbWUsIGxvbmcgKm51bXZhbCwgY2hhcl91ICoqc3RyaW5ndmFsLCBpbnQgb3B0X2ZsYWdzKSk7Cit2b2lkIHNldF9vcHRpb25fdmFsdWUgX19BUkdTKChjaGFyX3UgKm5hbWUsIGxvbmcgbnVtYmVyLCBjaGFyX3UgKnN0cmluZywgaW50IG9wdF9mbGFncykpOworY2hhcl91ICpnZXRfdGVybV9jb2RlIF9fQVJHUygoY2hhcl91ICp0bmFtZSkpOworY2hhcl91ICpnZXRfaGlnaGxpZ2h0X2RlZmF1bHQgX19BUkdTKCh2b2lkKSk7CitpbnQgbWFrZXNldCBfX0FSR1MoKEZJTEUgKmZkLCBpbnQgb3B0X2ZsYWdzLCBpbnQgbG9jYWxfb25seSkpOworaW50IG1ha2Vmb2xkc2V0IF9fQVJHUygoRklMRSAqZmQpKTsKK3ZvaWQgY2xlYXJfdGVybW9wdGlvbnMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNldF90ZXJtX2RlZmF1bHRzIF9fQVJHUygodm9pZCkpOwordm9pZCBjb21wX2NvbCBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqZ2V0X2VxdWFscHJnIF9fQVJHUygodm9pZCkpOwordm9pZCB3aW5fY29weV9vcHRpb25zIF9fQVJHUygod2luX1QgKndwX2Zyb20sIHdpbl9UICp3cF90bykpOwordm9pZCBjb3B5X3dpbm9wdCBfX0FSR1MoKHdpbm9wdF9UICpmcm9tLCB3aW5vcHRfVCAqdG8pKTsKK3ZvaWQgY2hlY2tfd2luX29wdGlvbnMgX19BUkdTKCh3aW5fVCAqd2luKSk7Cit2b2lkIGNoZWNrX3dpbm9wdCBfX0FSR1MoKHdpbm9wdF9UICp3b3ApKTsKK3ZvaWQgY2xlYXJfd2lub3B0IF9fQVJHUygod2lub3B0X1QgKndvcCkpOwordm9pZCBidWZfY29weV9vcHRpb25zIF9fQVJHUygoYnVmX1QgKmJ1ZiwgaW50IGZsYWdzKSk7Cit2b2lkIHJlc2V0X21vZGlmaWFibGUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNldF9pbWluc2VydF9nbG9iYWwgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNldF9pbXNlYXJjaF9nbG9iYWwgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNldF9jb250ZXh0X2luX3NldF9jbWQgX19BUkdTKChleHBhbmRfVCAqeHAsIGNoYXJfdSAqYXJnLCBpbnQgb3B0X2ZsYWdzKSk7CitpbnQgRXhwYW5kU2V0dGluZ3MgX19BUkdTKChleHBhbmRfVCAqeHAsIHJlZ21hdGNoX1QgKnJlZ21hdGNoLCBpbnQgKm51bV9maWxlLCBjaGFyX3UgKioqZmlsZSkpOworaW50IEV4cGFuZE9sZFNldHRpbmcgX19BUkdTKChpbnQgKm51bV9maWxlLCBjaGFyX3UgKioqZmlsZSkpOworaW50IGhhc19mb3JtYXRfb3B0aW9uIF9fQVJHUygoaW50IHgpKTsKK2ludCBzaG9ydG1lc3MgX19BUkdTKChpbnQgeCkpOwordm9pZCB2aW1yY19mb3VuZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2hhbmdlX2NvbXBhdGlibGUgX19BUkdTKChpbnQgb24pKTsKK2ludCBvcHRpb25fd2FzX3NldCBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IGNhbl9icyBfX0FSR1MoKGludCB3aGF0KSk7Cit2b2lkIHNhdmVfZmlsZV9mZiBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK2ludCBmaWxlX2ZmX2RpZmZlcnMgX19BUkdTKChidWZfVCAqYnVmKSk7CitpbnQgY2hlY2tfZmZfdmFsdWUgX19BUkdTKChjaGFyX3UgKnApKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL29zX2FtaWdhLnBybyBiL3NyYy9wcm90by9vc19hbWlnYS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3ZTIxMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9vc19hbWlnYS5wcm8KQEAgLTAsMCArMSw0NiBAQAorLyogb3NfYW1pZ2EuYyAqLwordm9pZCB3aW5fcmVzaXplX29uIF9fQVJHUygodm9pZCkpOwordm9pZCB3aW5fcmVzaXplX29mZiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX3dyaXRlIF9fQVJHUygoY2hhcl91ICpwLCBpbnQgbGVuKSk7CitpbnQgbWNoX2luY2hhciBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgbWF4bGVuLCBsb25nIHRpbWUsIGludCB0Yl9jaGFuZ2VfY250KSk7CitpbnQgbWNoX2NoYXJfYXZhaWwgX19BUkdTKCh2b2lkKSk7Citsb25nX3UgbWNoX2F2YWlsX21lbSBfX0FSR1MoKGludCBzcGVjaWFsKSk7Cit2b2lkIG1jaF9kZWxheSBfX0FSR1MoKGxvbmcgbXNlYywgaW50IGlnbm9yZWlucHV0KSk7Cit2b2lkIG1jaF9zdXNwZW5kIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfY2hlY2tfd2luIF9fQVJHUygoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSk7CitpbnQgbWNoX2lucHV0X2lzYXR0eSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZm5hbWVfY2FzZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGxlbikpOwordm9pZCBtY2hfc2V0dGl0bGUgX19BUkdTKChjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmljb24pKTsKK3ZvaWQgbWNoX3Jlc3RvcmVfdGl0bGUgX19BUkdTKChpbnQgd2hpY2gpKTsKK2ludCBtY2hfY2FuX3Jlc3RvcmVfdGl0bGUgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2Nhbl9yZXN0b3JlX2ljb24gX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2dldF91c2VyX25hbWUgX19BUkdTKChjaGFyX3UgKnMsIGludCBsZW4pKTsKK3ZvaWQgbWNoX2dldF9ob3N0X25hbWUgX19BUkdTKChjaGFyX3UgKnMsIGludCBsZW4pKTsKK2xvbmcgbWNoX2dldF9waWQgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2Rpcm5hbWUgX19BUkdTKChjaGFyX3UgKmJ1ZiwgaW50IGxlbikpOworaW50IG1jaF9GdWxsTmFtZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGNoYXJfdSAqYnVmLCBpbnQgbGVuLCBpbnQgZm9yY2UpKTsKK2ludCBtY2hfaXNGdWxsTmFtZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKK2xvbmcgbWNoX2dldHBlcm0gX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBtY2hfc2V0cGVybSBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgbG9uZyBwZXJtKSk7Cit2b2lkIG1jaF9oaWRlIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgbWNoX2lzZGlyIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7Cit2b2lkIG1jaF9ta2RpciBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF9jYW5fZXhlIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgbWNoX25vZGV0eXBlIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7Cit2b2lkIG1jaF9lYXJseV9pbml0IF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfZXhpdCBfX0FSR1MoKGludCByKSk7Cit2b2lkIG1jaF9zZXR0bW9kZSBfX0FSR1MoKGludCB0bW9kZSkpOworaW50IG1jaF9zY3JlZW5tb2RlIF9fQVJHUygoY2hhcl91ICphcmcpKTsKK2ludCBtY2hfZ2V0X3NoZWxsc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX3NldF9zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9uZXdfc2hlbGxzaXplIF9fQVJHUygodm9pZCkpOworaW50IG1jaF9jYWxsX3NoZWxsIF9fQVJHUygoY2hhcl91ICpjbWQsIGludCBvcHRpb25zKSk7Cit2b2lkIG1jaF9icmVha2NoZWNrIF9fQVJHUygodm9pZCkpOworbG9uZyBDaGtfQWJvcnQgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2V4cGFuZHBhdGggX19BUkdTKChnYXJyYXlfVCAqZ2FwLCBjaGFyX3UgKnBhdCwgaW50IGZsYWdzKSk7CitpbnQgbWNoX2hhc19leHBfd2lsZGNhcmQgX19BUkdTKChjaGFyX3UgKnApKTsKK2ludCBtY2hfaGFzX3dpbGRjYXJkIF9fQVJHUygoY2hhcl91ICpwKSk7CitjaGFyX3UgKm1jaF9nZXRlbnYgX19BUkdTKChjaGFyX3UgKnZhcikpOworaW50IG1jaF9zZXRlbnYgX19BUkdTKChjaGFyICp2YXIsIGNoYXIgKnZhbHVlLCBpbnQgeCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vb3NfYmVvcy5wcm8gYi9zcmMvcHJvdG8vb3NfYmVvcy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzNzEwMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9vc19iZW9zLnBybwpAQCAtMCwwICsxLDQgQEAKKy8qIG9zX2Jlb3MuYyAqLwordm9pZCBiZW9zX2NsZWFudXBfcmVhZF90aHJlYWQgX19BUkdTKCh2b2lkKSk7CitpbnQgYmVvc19zZWxlY3QgX19BUkdTKChpbnQgbmJpdHMsIHN0cnVjdCBmZF9zZXQgKnJiaXRzLCBzdHJ1Y3QgZmRfc2V0ICp3Yml0cywgc3RydWN0IGZkX3NldCAqZWJpdHMsIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0KSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9vc19tYWMucHJvIGIvc3JjL3Byb3RvL29zX21hYy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkNDdmYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9vc19tYWMucHJvCkBAIC0wLDAgKzEsNjQgQEAKKy8qIG9zX21hYy5jICovCit2b2lkIG1jaF9zZXRtb3VzZSBfX0FSR1MoKGludCBvbikpOworCit2b2lkIG1jaF93aW5kZXhpdCBfX0FSR1MoKGludCByKSk7CitpbnQgbWNoX2NoZWNrX3dpbiBfX0FSR1MoKGludCBhcmdjLCBjaGFyICoqYXJndikpOworaW50IG1jaF9pbnB1dF9pc2F0dHkgX19BUkdTKCh2b2lkKSk7CisKK3ZvaWQgZm5hbWVfY2FzZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGxlbikpOwordm9pZCBtY2hfZWFybHlfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX2V4aXQgX19BUkdTKChpbnQgcikpOwordm9pZCBtY2hfc2V0dGl0bGUgX19BUkdTKChjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmljb24pKTsKK3ZvaWQgbWNoX3Jlc3RvcmVfdGl0bGUgX19BUkdTKChpbnQgd2hpY2gpKTsKKworaW50IG1jaF9nZXRfdXNlcl9uYW1lIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGVuKSk7Cit2b2lkIG1jaF9nZXRfaG9zdF9uYW1lIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGVuKSk7Citsb25nIG1jaF9nZXRfcGlkIF9fQVJHUygodm9pZCkpOworCitpbnQgbWNoX2Rpcm5hbWUgX19BUkdTKChjaGFyX3UgKmJ1ZiwgaW50IGxlbikpOworaW50IG1jaF9GdWxsTmFtZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGNoYXJfdSAqYnVmLCBpbnQgbGVuLCBpbnQgZm9yY2UpKTsKK2ludCBtY2hfaXNGdWxsTmFtZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKK3ZvaWQgc2xhc2hfYWRqdXN0IF9fQVJHUygoY2hhcl91ICpwKSk7Citsb25nIG1jaF9nZXRwZXJtIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgbWNoX3NldHBlcm0gX19BUkdTKChjaGFyX3UgKm5hbWUsIGxvbmcgcGVybSkpOwordm9pZCBtY2hfaGlkZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF9pc2RpciBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF9jYW5fZXhlIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgbWNoX25vZGV0eXBlIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7Cit2b2lkIG1jaF9pbml0IF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfc2V0dG1vZGUgX19BUkdTKChpbnQgcmF3KSk7CisKK2ludCBtY2hfY2hkaXIgX19BUkdTKChjaGFyICpwX25hbWUpKTsKKyNpZiBkZWZpbmVkKF9fTVJDX18pIHx8IGRlZmluZWQoX19TQ19fKQoraW50IHN0YXQgX19BUkdTKChjaGFyICpwLCBzdHJ1Y3Qgc3RhdCAqcF9zdCkpOworI2VuZGlmCisKK2ludCBtY2hfY2FsbF9zaGVsbCBfX0FSR1MoKGNoYXJfdSAqY21kLCBpbnQgb3B0aW9ucykpOworaW50IG1jaF9oYXNfd2lsZGNhcmQgX19BUkdTKChjaGFyX3UgKnMpKTsKK2ludCBtY2hfZXhwYW5kcGF0aCBfX0FSR1MoKHN0cnVjdCBncm93YXJyYXkgKmdhcCwgY2hhcl91ICpwYXRoLCBpbnQgZmxhZ3MpKTsKK2ludCBtYWNfZXhwYW5kcGF0aCBfX0FSR1MoKHN0cnVjdCBncm93YXJyYXkgKmdhcCwgY2hhcl91ICpwYXRoLCBpbnQgZmxhZ3MsIHNob3J0IHN0YXJ0X2F0LCBzaG9ydCBhc19mdWxsKSk7CisvKmludCB2aW1fY2hkaXIgX19BUkdTKChjaGFyICpwYXRoKSk7Ki8KK3ZvaWQgbWNoX2RlbGF5IF9fQVJHUygobG9uZyBtc2VjLCBpbnQgaWdub3JlaW5wdXQpKTsKK3ZvaWQgbWNoX2JyZWFrY2hlY2sgX19BUkdTKCh2b2lkKSk7Citsb25nX3UgbWNoX2F2YWlsX21lbSBfX0FSR1MoKGludCBzcGVjaWFsKSk7CitpbnQgbWNoX3NjcmVlbm1vZGUgX19BUkdTKChjaGFyX3UgKmFyZykpOworaW50IG1jaF9oYXNfZXhwX3dpbGRjYXJkIF9fQVJHUygoY2hhcl91ICpwKSk7CisKK3ZvaWQgc2xhc2hfbl9jb2xvbl9hZGp1c3QgX19BUkdTKChjaGFyX3UgKmJ1ZikpOworaW50IG1jaF9jb3B5X2ZpbGUoY2hhcl91ICpmcm9tLCBjaGFyX3UgKnRvKTsKKworaW50IG1jaF9oYXNfcmVzb3VyY2VfZm9yayAoY2hhcl91ICpmaWxlKTsKK2ludCBtY2hfY29weV9maWxlX2F0dHJpYnV0ZShjaGFyX3UgKmZyb20sIGNoYXJfdSAqdG8pOworCit2b2lkIG1jaF9zaGVsbGluaXQgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2dldF9zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9zZXRfc2hlbGxzaXplIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfbmV3X3NoZWxsc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX3N1c3BlbmQgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2Nhbl9yZXN0b3JlX3RpdGxlIF9fQVJHUygodm9pZCkpOworaW50IG1jaF9jYW5fcmVzdG9yZV9pY29uIF9fQVJHUygodm9pZCkpOworCit2b2lkIHNsYXNoX3RvX2NvbG9uIF9fQVJHUygoY2hhcl91ICpwKSk7CitjaGFyX3UgKnNsYXNoX3RvX2NvbG9uX3NhdmUgX19BUkdTKChjaGFyX3UgKnApKTsKKworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vb3NfbXNkb3MucHJvIGIvc3JjL3Byb3RvL29zX21zZG9zLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODY3ZjNkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL29zX21zZG9zLnBybwpAQCAtMCwwICsxLDQ4IEBACisvKiBvc19tc2Rvcy5jICovCit2b2lkIG1jaF9zZXRfbm9ybWFsX2NvbG9ycyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX3VwZGF0ZV9jdXJzb3IgX19BUkdTKCh2b2lkKSk7Citsb25nX3UgbWNoX2F2YWlsX21lbSBfX0FSR1MoKGludCBzcGVjaWFsKSk7Cit2b2lkIG1jaF9kZWxheSBfX0FSR1MoKGxvbmcgbXNlYywgaW50IGlnbm9yZWlucHV0KSk7Cit2b2lkIG1jaF93cml0ZSBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGxlbikpOworaW50IG1jaF9pbmNoYXIgX19BUkdTKChjaGFyX3UgKmJ1ZiwgaW50IG1heGxlbiwgbG9uZyB0aW1lLCBpbnQgdGJfY2hhbmdlX2NudCkpOworaW50IG1jaF9jaGFyX2F2YWlsIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfc3VzcGVuZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX2luaXQgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2NoZWNrX3dpbiBfX0FSR1MoKGludCBhcmdjLCBjaGFyICoqYXJndikpOworaW50IG1jaF9pbnB1dF9pc2F0dHkgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGZuYW1lX2Nhc2UgX19BUkdTKChjaGFyX3UgKm5hbWUsIGludCBsZW4pKTsKK2xvbmcgbWNoX2dldF9waWQgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX0Z1bGxOYW1lIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgY2hhcl91ICpidWYsIGludCBsZW4sIGludCBmb3JjZSkpOwordm9pZCBzbGFzaF9hZGp1c3QgX19BUkdTKChjaGFyX3UgKnApKTsKK2ludCBtY2hfaXNGdWxsTmFtZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKK3ZvaWQgbWNoX2Vhcmx5X2luaXQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9leGl0IF9fQVJHUygoaW50IHIpKTsKK3ZvaWQgbWNoX3NldHRtb2RlIF9fQVJHUygoaW50IHRtb2RlKSk7Cit2b2lkIG1jaF9zZXRtb3VzZSBfX0FSR1MoKGludCBvbikpOworaW50IG1jaF9zY3JlZW5tb2RlIF9fQVJHUygoY2hhcl91ICphcmcpKTsKK2ludCBtY2hfZ2V0X3NoZWxsc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX3NldF9zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9uZXdfc2hlbGxzaXplIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfY2hlY2tfY29sdW1ucyBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfY2FsbF9zaGVsbCBfX0FSR1MoKGNoYXJfdSAqY21kLCBpbnQgb3B0aW9ucykpOwordm9pZCBtY2hfYnJlYWtjaGVjayBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfaGFzX2V4cF93aWxkY2FyZCBfX0FSR1MoKGNoYXJfdSAqcCkpOworaW50IG1jaF9oYXNfd2lsZGNhcmQgX19BUkdTKChjaGFyX3UgKnApKTsKK2ludCBtY2hfY2hkaXIgX19BUkdTKChjaGFyICpwYXRoKSk7CitjaGFyICpkamdwcF9zZXRsb2NhbGUgX19BUkdTKCh2b2lkKSk7CitpbnQgY2xpcF9tY2hfb3duX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfbWNoX2xvc2Vfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgY2xpcF9tY2hfcmVxdWVzdF9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOwordm9pZCBjbGlwX21jaF9zZXRfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK2xvbmcgbWNoX2dldHBlcm0gX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBtY2hfc2V0cGVybSBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgbG9uZyBwZXJtKSk7Cit2b2lkIG1jaF9oaWRlIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgbWNoX2lzZGlyIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgbWNoX2Nhbl9leGUgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBtY2hfbm9kZXR5cGUgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBtY2hfZGlybmFtZSBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgbGVuKSk7CitpbnQgbWNoX3JlbW92ZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworY2hhcl91ICptY2hfZ2V0ZW52IF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgbWNoX2dldF91c2VyX25hbWUgX19BUkdTKChjaGFyX3UgKnMsIGludCBsZW4pKTsKK3ZvaWQgbWNoX2dldF9ob3N0X25hbWUgX19BUkdTKChjaGFyX3UgKnMsIGludCBsZW4pKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL29zX21zd2luLnBybyBiL3NyYy9wcm90by9vc19tc3dpbi5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2MTJmMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9vc19tc3dpbi5wcm8KQEAgLTAsMCArMSw2MCBAQAorLyogb3NfbXN3aW4uYyAqLwordm9pZCBtY2hfZXhpdCBfX0FSR1MoKGludCByKSk7Cit2b2lkIG1jaF9lYXJseV9pbml0IF9fQVJHUygodm9pZCkpOworaW50IG1jaF9pbnB1dF9pc2F0dHkgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9zZXR0aXRsZSBfX0FSR1MoKGNoYXJfdSAqdGl0bGUsIGNoYXJfdSAqaWNvbikpOwordm9pZCBtY2hfcmVzdG9yZV90aXRsZSBfX0FSR1MoKGludCB3aGljaCkpOworaW50IG1jaF9jYW5fcmVzdG9yZV90aXRsZSBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfY2FuX3Jlc3RvcmVfaWNvbiBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfRnVsbE5hbWUgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBjaGFyX3UgKmJ1ZiwgaW50IGxlbiwgaW50IGZvcmNlKSk7CitpbnQgbWNoX2lzRnVsbE5hbWUgX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7Cit2b2lkIHNsYXNoX2FkanVzdCBfX0FSR1MoKGNoYXJfdSAqcCkpOworaW50IHZpbV9zdGF0IF9fQVJHUygoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0cCkpOwordm9pZCBtY2hfc2V0dG1vZGUgX19BUkdTKChpbnQgdG1vZGUpKTsKK2ludCBtY2hfZ2V0X3NoZWxsc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX3NldF9zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9uZXdfc2hlbGxzaXplIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfc3VzcGVuZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZGlzcGxheV9lcnJvcnMgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2hhc19leHBfd2lsZGNhcmQgX19BUkdTKChjaGFyX3UgKnApKTsKK2ludCBtY2hfaGFzX3dpbGRjYXJkIF9fQVJHUygoY2hhcl91ICpwKSk7CitpbnQgbWNoX2NoZGlyIF9fQVJHUygoY2hhciAqcGF0aCkpOworaW50IGNhbl9lbmRfdGVybWNhcF9tb2RlIF9fQVJHUygoaW50IGdpdmVfbXNnKSk7CitpbnQgbWNoX3NjcmVlbm1vZGUgX19BUkdTKChjaGFyX3UgKmFyZykpOworaW50IG1jaF9saWJjYWxsIF9fQVJHUygoY2hhcl91ICpsaWJuYW1lLCBjaGFyX3UgKmZ1bmNuYW1lLCBjaGFyX3UgKmFyZ3N0cmluZywgaW50IGFyZ2ludCwgY2hhcl91ICoqc3RyaW5nX3Jlc3VsdCwgaW50ICpudW1iZXJfcmVzdWx0KSk7CitpbnQgdXRmOF90b191Y3MyIF9fQVJHUygoY2hhcl91ICppbnN0ciwgaW50IGlubGVuLCBzaG9ydF91ICpvdXRzdHIsIGludCAqdW5jb252bGVucCkpOworaW50IHVjczJfdG9fdXRmOCBfX0FSR1MoKHNob3J0X3UgKmluc3RyLCBpbnQgaW5sZW4sIGNoYXJfdSAqb3V0c3RyKSk7Cit2b2lkIE11bHRpQnl0ZVRvV2lkZUNoYXJfYWxsb2MgX19BUkdTKChVSU5UIGNwLCBEV09SRCBmbGFncywgTFBDU1RSIGluLCBpbnQgaW5sZW4sIExQV1NUUiAqb3V0LCBpbnQgKm91dGxlbikpOwordm9pZCBXaWRlQ2hhclRvTXVsdGlCeXRlX2FsbG9jIF9fQVJHUygoVUlOVCBjcCwgRFdPUkQgZmxhZ3MsIExQQ1dTVFIgaW4sIGludCBpbmxlbiwgTFBTVFIgKm91dCwgaW50ICpvdXRsZW4sIExQQ1NUUiBkZWYsIExQQk9PTCB1c2VkZGVmKSk7CitpbnQgY2xpcF9tY2hfb3duX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfbWNoX2xvc2Vfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3Nob3J0X3UgKmVuY190b191Y3MyIF9fQVJHUygoY2hhcl91ICpzdHIsIGludCAqbGVucCkpOworY2hhcl91ICp1Y3MyX3RvX2VuYyBfX0FSR1MoKHNob3J0X3UgKnN0ciwgaW50ICpsZW5wKSk7Cit2b2lkIGNsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgY2xpcF9tY2hfc2V0X3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIER1bXBQdXRTIF9fQVJHUygoY29uc3QgY2hhciAqcHN6KSk7Cit2b2lkIG1jaF9wcmludF9jbGVhbnVwIF9fQVJHUygodm9pZCkpOworaW50IG1jaF9wcmludF9pbml0IF9fQVJHUygocHJ0X3NldHRpbmdzX1QgKnBzZXR0aW5ncywgY2hhcl91ICpqb2JuYW1lLCBpbnQgZm9yY2VpdCkpOworaW50IG1jaF9wcmludF9iZWdpbiBfX0FSR1MoKHBydF9zZXR0aW5nc19UICpwc2V0dGluZ3MpKTsKK3ZvaWQgbWNoX3ByaW50X2VuZCBfX0FSR1MoKHBydF9zZXR0aW5nc19UICpwc2V0dGluZ3MpKTsKK2ludCBtY2hfcHJpbnRfZW5kX3BhZ2UgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX3ByaW50X2JlZ2luX3BhZ2UgX19BUkdTKChjaGFyX3UgKm1zZykpOworaW50IG1jaF9wcmludF9ibGFua19wYWdlIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfcHJpbnRfc3RhcnRfbGluZSBfX0FSR1MoKGludCBtYXJnaW4sIGludCBwYWdlX2xpbmUpKTsKK2ludCBtY2hfcHJpbnRfdGV4dF9vdXQgX19BUkdTKChjaGFyX3UgKnAsIGludCBsZW4pKTsKK3ZvaWQgbWNoX3ByaW50X3NldF9mb250IF9fQVJHUygoaW50IGlCb2xkLCBpbnQgaUl0YWxpYywgaW50IGlVbmRlcmxpbmUpKTsKK3ZvaWQgbWNoX3ByaW50X3NldF9iZyBfX0FSR1MoKHVuc2lnbmVkIGxvbmcgYmdjb2wpKTsKK3ZvaWQgbWNoX3ByaW50X3NldF9mZyBfX0FSR1MoKHVuc2lnbmVkIGxvbmcgZmdjb2wpKTsKK2NoYXJfdSAqbWNoX3Jlc29sdmVfc2hvcnRjdXQgX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7Cit2b2lkIHdpbjMyX3NldF9mb3JlZ3JvdW5kIF9fQVJHUygodm9pZCkpOwordm9pZCBzZXJ2ZXJJbml0TWVzc2FnaW5nIF9fQVJHUygodm9pZCkpOwordm9pZCBzZXJ2ZXJTZXROYW1lIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitjaGFyX3UgKnNlcnZlckdldFZpbU5hbWVzIF9fQVJHUygodm9pZCkpOworaW50IHNlcnZlclNlbmRSZXBseSBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgY2hhcl91ICpyZXBseSkpOworaW50IHNlcnZlclNlbmRUb1ZpbSBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgY2hhcl91ICpjbWQsIGNoYXJfdSAqKnJlc3VsdCwgdm9pZCAqcHRhcmdldCwgaW50IGFzRXhwciwgaW50IHNpbGVudCkpOwordm9pZCBzZXJ2ZXJGb3JlZ3JvdW5kIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitjaGFyX3UgKnNlcnZlckdldFJlcGx5IF9fQVJHUygoSFdORCBzZXJ2ZXIsIGludCAqZXhwcl9yZXMsIGludCByZW1vdmUsIGludCB3YWl0KSk7Cit2b2lkIHNlcnZlclByb2Nlc3NQZW5kaW5nTWVzc2FnZXMgX19BUkdTKCh2b2lkKSk7CitjaGFyICpjaGFyc2V0X2lkMm5hbWUgX19BUkdTKChpbnQgaWQpKTsKK2ludCBnZXRfbG9nZm9udCBfX0FSR1MoKExPR0ZPTlQgKmxmLCBjaGFyX3UgKm5hbWUsIEhEQyBwcmludGVyX2RjKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9vc19xbngucHJvIGIvc3JjL3Byb3RvL29zX3FueC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhNjMxNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9vc19xbngucHJvCkBAIC0wLDAgKzEsOCBAQAorLyogb3NfcW54LmMgKi8KK3ZvaWQgcW54X2luaXQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHFueF9jbGlwX2luaXQgX19BUkdTKCh2b2lkKSk7CitpbnQgY2xpcF9tY2hfb3duX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfbWNoX2xvc2Vfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgY2xpcF9tY2hfcmVxdWVzdF9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOwordm9pZCBjbGlwX21jaF9zZXRfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL29zX3Jpc2Nvcy5wcm8gYi9zcmMvcHJvdG8vb3NfcmlzY29zLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWE0Y2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL29zX3Jpc2Nvcy5wcm8KQEAgLTAsMCArMSw0OSBAQAorLyogb3NfcmlzY29zLmMgKi8KK3ZvaWQgbWNoX3dyaXRlIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGVuKSk7CitpbnQgbWNoX2luY2hhciBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgbWF4bGVuLCBsb25nIHd0aW1lLCBpbnQgdGJfY2hhbmdlX2NudCkpOworaW50IG1jaF9jaGFyX2F2YWlsIF9fQVJHUygodm9pZCkpOworbG9uZ191IG1jaF9hdmFpbF9tZW0gX19BUkdTKChpbnQgc3BlY2lhbCkpOwordm9pZCBtY2hfZGVsYXkgX19BUkdTKChsb25nIG1zZWMsIGludCBpZ25vcmVpbnB1dCkpOwordm9pZCBtY2hfc3VzcGVuZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX2luaXQgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2NoZWNrX3dpbiBfX0FSR1MoKGludCBhcmdjLCBjaGFyICoqYXJndikpOworaW50IG1jaF9pbnB1dF9pc2F0dHkgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2Nhbl9yZXN0b3JlX3RpdGxlIF9fQVJHUygodm9pZCkpOworaW50IG1jaF9jYW5fcmVzdG9yZV9pY29uIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfc2V0dGl0bGUgX19BUkdTKChjaGFyX3UgKnRpdGxlLCBjaGFyX3UgKmljb24pKTsKK3ZvaWQgbWNoX3Jlc3RvcmVfdGl0bGUgX19BUkdTKChpbnQgd2hpY2gpKTsKK2ludCBtY2hfZ2V0X3VzZXJfbmFtZSBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGxlbikpOwordm9pZCBtY2hfZ2V0X2hvc3RfbmFtZSBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGxlbikpOworbG9uZyBtY2hfZ2V0X3BpZCBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfZGlybmFtZSBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgbGVuKSk7CitpbnQgbWNoX0Z1bGxOYW1lIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgY2hhcl91ICpidWYsIGludCBsZW4sIGludCBmb3JjZSkpOworaW50IG1jaF9pc0Z1bGxOYW1lIF9fQVJHUygoY2hhcl91ICpmbmFtZSkpOworbG9uZyBtY2hfZ2V0cGVybSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF9zZXRwZXJtIF9fQVJHUygoY2hhcl91ICpuYW1lLCBsb25nIHBlcm0pKTsKK3ZvaWQgbWNoX2hpZGUgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBtY2hfaXNkaXIgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBtY2hfY2FuX2V4ZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF9ub2RldHlwZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBtY2hfZWFybHlfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX2V4aXQgX19BUkdTKChpbnQgcikpOwordm9pZCBtY2hfc2V0dG1vZGUgX19BUkdTKChpbnQgdG1vZGUpKTsKK3ZvaWQgbWNoX3NldG1vdXNlIF9fQVJHUygoaW50IG9uKSk7CitpbnQgbWNoX3NjcmVlbm1vZGUgX19BUkdTKChjaGFyX3UgKmFyZykpOworaW50IG1jaF9nZXRfc2hlbGxzaXplIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfc2V0X3NoZWxsc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX25ld19zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2NhbGxfc2hlbGwgX19BUkdTKChjaGFyX3UgKmNtZCwgaW50IG9wdGlvbnMpKTsKK3ZvaWQgbWNoX2JyZWFrY2hlY2sgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2V4cGFuZHBhdGggX19BUkdTKChnYXJyYXlfVCAqZ2FwLCBjaGFyX3UgKnBhdGgsIGludCBmbGFncykpOworaW50IGV4cGFuZF9zZWN0aW9uIF9fQVJHUygoZ2FycmF5X1QgKmdhcCwgY2hhcl91ICpyb290LCBjaGFyX3UgKnJlc3QsIGludCBmbGFncykpOworaW50IG1jaF9leHBhbmRfd2lsZGNhcmRzIF9fQVJHUygoaW50IG51bV9wYXQsIGNoYXJfdSAqKnBhdCwgaW50ICpudW1fZmlsZSwgY2hhcl91ICoqKmZpbGUsIGludCBmbGFncykpOworaW50IG1jaF9oYXNfZXhwX3dpbGRjYXJkIF9fQVJHUygoY2hhcl91ICpwKSk7CitpbnQgbWNoX2hhc193aWxkY2FyZCBfX0FSR1MoKGNoYXJfdSAqcCkpOworaW50IG1jaF9yZW1vdmUgX19BUkdTKChjaGFyX3UgKmZpbGUpKTsKK2NoYXJfdSAqbWNoX211bmdlX2ZuYW1lIF9fQVJHUygoY2hhcl91ICpmbmFtZSkpOworaW50IHJvX2J1Zmxpc3RfYWRkIF9fQVJHUygoY2hhcl91ICpvbGRfbmFtZSkpOworaW50IG1jaF9jaGRpciBfX0FSR1MoKGNoYXJfdSAqZGlyKSk7Cit2b2lkIG1jaF9yZWFkX2ZpbGV0eXBlIF9fQVJHUygoY2hhcl91ICpmaWxlKSk7Cit2b2lkIG1jaF9zZXRfZmlsZXR5cGUgX19BUkdTKChjaGFyX3UgKmZpbGUsIGNoYXJfdSAqdHlwZSkpOworaW50IG1jaF9jaGVja19maWxldHlwZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGNoYXJfdSAqdHlwZSkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vb3NfdW5peC5wcm8gYi9zcmMvcHJvdG8vb3NfdW5peC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzOTA4YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by9vc191bml4LnBybwpAQCAtMCwwICsxLDcwIEBACisvKiBvc191bml4LmMgKi8KK3ZvaWQgbWNoX3dyaXRlIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGVuKSk7CitpbnQgbWNoX2luY2hhciBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgbWF4bGVuLCBsb25nIHd0aW1lLCBpbnQgdGJfY2hhbmdlX2NudCkpOworaW50IG1jaF9jaGFyX2F2YWlsIF9fQVJHUygodm9pZCkpOworbG9uZ191IG1jaF90b3RhbF9tZW0gX19BUkdTKChpbnQgc3BlY2lhbCkpOwordm9pZCBtY2hfZGVsYXkgX19BUkdTKChsb25nIG1zZWMsIGludCBpZ25vcmVpbnB1dCkpOworaW50IG1jaF9zdGFja2NoZWNrIF9fQVJHUygoY2hhciAqcCkpOwordm9pZCBtY2hfc3RhcnRqbXAgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9lbmRqbXAgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9kaWRqbXAgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9zdXNwZW5kIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgcmVzZXRfc2lnbmFscyBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfY2hlY2tfd2luIF9fQVJHUygoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSk7CitpbnQgbWNoX2lucHV0X2lzYXR0eSBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfY2FuX3Jlc3RvcmVfdGl0bGUgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2Nhbl9yZXN0b3JlX2ljb24gX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9zZXR0aXRsZSBfX0FSR1MoKGNoYXJfdSAqdGl0bGUsIGNoYXJfdSAqaWNvbikpOwordm9pZCBtY2hfcmVzdG9yZV90aXRsZSBfX0FSR1MoKGludCB3aGljaCkpOworaW50IHZpbV9pc194dGVybSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IHVzZV94dGVybV9tb3VzZSBfX0FSR1MoKHZvaWQpKTsKK2ludCB2aW1faXNfaXJpcyBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IHZpbV9pc192dDMwMCBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IHZpbV9pc19mYXN0dGVybSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF9nZXRfdXNlcl9uYW1lIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGVuKSk7CitpbnQgbWNoX2dldF91bmFtZSBfX0FSR1MoKHVpZF90IHVpZCwgY2hhcl91ICpzLCBpbnQgbGVuKSk7Cit2b2lkIG1jaF9nZXRfaG9zdF9uYW1lIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGVuKSk7Citsb25nIG1jaF9nZXRfcGlkIF9fQVJHUygodm9pZCkpOworaW50IG1jaF9kaXJuYW1lIF9fQVJHUygoY2hhcl91ICpidWYsIGludCBsZW4pKTsKK3ZvaWQgc2xhc2hfYWRqdXN0IF9fQVJHUygoY2hhcl91ICpwKSk7CitpbnQgbWNoX0Z1bGxOYW1lIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgY2hhcl91ICpidWYsIGludCBsZW4sIGludCBmb3JjZSkpOworaW50IG1jaF9pc0Z1bGxOYW1lIF9fQVJHUygoY2hhcl91ICpmbmFtZSkpOworbG9uZyBtY2hfZ2V0cGVybSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF9zZXRwZXJtIF9fQVJHUygoY2hhcl91ICpuYW1lLCBsb25nIHBlcm0pKTsKK3ZpbV9hY2xfVCBtY2hfZ2V0X2FjbCBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKK3ZvaWQgbWNoX3NldF9hY2wgX19BUkdTKChjaGFyX3UgKmZuYW1lLCB2aW1fYWNsX1QgYWNsZW50KSk7Cit2b2lkIG1jaF9mcmVlX2FjbCBfX0FSR1MoKHZpbV9hY2xfVCBhY2xlbnQpKTsKK3ZvaWQgbWNoX2hpZGUgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBtY2hfaXNkaXIgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBtY2hfY2FuX2V4ZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF9ub2RldHlwZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBtY2hfZWFybHlfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX2V4aXQgX19BUkdTKChpbnQgcikpOwordm9pZCBtY2hfc2V0dG1vZGUgX19BUkdTKChpbnQgdG1vZGUpKTsKK3ZvaWQgZ2V0X3N0dHkgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9zZXRtb3VzZSBfX0FSR1MoKGludCBvbikpOwordm9pZCBjaGVja19tb3VzZV90ZXJtY29kZSBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfc2NyZWVubW9kZSBfX0FSR1MoKGNoYXJfdSAqYXJnKSk7CitpbnQgbWNoX2dldF9zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9zZXRfc2hlbGxzaXplIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfbmV3X3NoZWxsc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfY2FsbF9zaGVsbCBfX0FSR1MoKGNoYXJfdSAqY21kLCBpbnQgb3B0aW9ucykpOwordm9pZCBtY2hfYnJlYWtjaGVjayBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfZXhwYW5kcGF0aCBfX0FSR1MoKGdhcnJheV9UICpnYXAsIGNoYXJfdSAqcGF0aCwgaW50IGZsYWdzKSk7CitpbnQgbWNoX2V4cGFuZF93aWxkY2FyZHMgX19BUkdTKChpbnQgbnVtX3BhdCwgY2hhcl91ICoqcGF0LCBpbnQgKm51bV9maWxlLCBjaGFyX3UgKioqZmlsZSwgaW50IGZsYWdzKSk7CitpbnQgbWNoX2hhc19leHBfd2lsZGNhcmQgX19BUkdTKChjaGFyX3UgKnApKTsKK2ludCBtY2hfaGFzX3dpbGRjYXJkIF9fQVJHUygoY2hhcl91ICpwKSk7CitpbnQgbWNoX2xpYmNhbGwgX19BUkdTKChjaGFyX3UgKmxpYm5hbWUsIGNoYXJfdSAqZnVuY25hbWUsIGNoYXJfdSAqYXJnc3RyaW5nLCBpbnQgYXJnaW50LCBjaGFyX3UgKipzdHJpbmdfcmVzdWx0LCBpbnQgKm51bWJlcl9yZXN1bHQpKTsKK3ZvaWQgc2V0dXBfdGVybV9jbGlwIF9fQVJHUygodm9pZCkpOwordm9pZCBzdGFydF94dGVybV90cmFjZSBfX0FSR1MoKGludCBidXR0b24pKTsKK3ZvaWQgc3RvcF94dGVybV90cmFjZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2xlYXJfeHRlcm1fY2xpcCBfX0FSR1MoKHZvaWQpKTsKK2ludCBjbGlwX3h0ZXJtX293bl9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOwordm9pZCBjbGlwX3h0ZXJtX2xvc2Vfc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgY2xpcF94dGVybV9yZXF1ZXN0X3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfeHRlcm1fc2V0X3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7CitpbnQgeHNtcF9oYW5kbGVfcmVxdWVzdHMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHhzbXBfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgeHNtcF9jbG9zZSBfX0FSR1MoKHZvaWQpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL29zX3Ztcy5wcm8gYi9zcmMvcHJvdG8vb3Nfdm1zLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWQ2Mzk0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL29zX3Ztcy5wcm8KQEAgLTAsMCArMSwxNCBAQAorLyogb3Nfdm1zLmMgKi8KK3ZvaWQgbWNoX3NldHRtb2RlIF9fQVJHUygoaW50IHRtb2RlKSk7CitpbnQgbWNoX2dldF9zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9zZXRfc2hlbGxzaXplIF9fQVJHUygodm9pZCkpOworY2hhcl91ICptY2hfZ2V0ZW52IF9fQVJHUygoY2hhcl91ICpsb2duYW0pKTsKK2ludCBtY2hfc2V0ZW52IF9fQVJHUygoY2hhciAqdmFyLCBjaGFyICp2YWx1ZSwgaW50IHgpKTsKK2ludCB2bXNfc3lzIF9fQVJHUygoY2hhciAqY21kLCBjaGFyICpvdXQsIGNoYXIgKmlucCkpOworaW50IHZtc19zeXNfc3RhdHVzIF9fQVJHUygoaW50IHN0YXR1cykpOworaW50IHZtc19yZWFkIF9fQVJHUygoY2hhciAqaW5idWYsIHNpemVfdCBuYnl0ZXMpKTsKK2ludCBtY2hfZXhwYW5kX3dpbGRjYXJkcyBfX0FSR1MoKGludCBudW1fcGF0LCBjaGFyX3UgKipwYXQsIGludCAqbnVtX2ZpbGUsIGNoYXJfdSAqKipmaWxlLCBpbnQgZmxhZ3MpKTsKK2ludCBtY2hfZXhwYW5kcGF0aCBfX0FSR1MoKGdhcnJheV9UICpnYXAsIGNoYXJfdSAqcGF0aCwgaW50IGZsYWdzKSk7Cit2b2lkICp2bXNfZml4ZmlsZW5hbWUgX19BUkdTKCh2b2lkICppbnN0cmluZykpOwordm9pZCB2bXNfcmVtb3ZlX3ZlcnNpb24gX19BUkdTKCh2b2lkICpmbmFtZSkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vb3Nfd2luMTYucHJvIGIvc3JjL3Byb3RvL29zX3dpbjE2LnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWZhNzJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL29zX3dpbjE2LnBybwpAQCAtMCwwICsxLDEyIEBACisvKiBvc193aW4xNi5jICovCit2b2lkIG1jaF9zZXRtb3VzZSBfX0FSR1MoKGludCBvbikpOwordm9pZCBtY2hfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfY2hlY2tfd2luIF9fQVJHUygoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSk7Citsb25nIG1jaF9nZXRfcGlkIF9fQVJHUygodm9pZCkpOworaW50IG1jaF9jYWxsX3NoZWxsIF9fQVJHUygoY2hhcl91ICpjbWQsIGludCBvcHRpb25zKSk7Cit2b2lkIG1jaF9kZWxheSBfX0FSR1MoKGxvbmcgbXNlYywgaW50IGlnbm9yZWlucHV0KSk7Cit2b2lkIG1jaF9icmVha2NoZWNrIF9fQVJHUygodm9pZCkpOworbG9uZ191IG1jaF9hdmFpbF9tZW0gX19BUkdTKChpbnQgc3BlY2lhbCkpOworaW50IG1jaF9yZW5hbWUgX19BUkdTKChjb25zdCBjaGFyICpwc3pPbGRGaWxlLCBjb25zdCBjaGFyICpwc3pOZXdGaWxlKSk7CitjaGFyICpkZWZhdWx0X3NoZWxsIF9fQVJHUygodm9pZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vb3Nfd2luMzIucHJvIGIvc3JjL3Byb3RvL29zX3dpbjMyLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGFhMTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL29zX3dpbjMyLnBybwpAQCAtMCwwICsxLDQ4IEBACisvKiBvc193aW4zMi5jICovCitpbnQgZHluX2xpYmludGxfaW5pdCBfX0FSR1MoKGNoYXIgKmxpYm5hbWUpKTsKK3ZvaWQgZHluX2xpYmludGxfZW5kIF9fQVJHUygodm9pZCkpOwordm9pZCBQbGF0Zm9ybUlkIF9fQVJHUygodm9pZCkpOworaW50IG1jaF93aW5kb3dzOTUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9zZXRtb3VzZSBfX0FSR1MoKGludCBvbikpOwordm9pZCBtY2hfdXBkYXRlX2N1cnNvciBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfY2hhcl9hdmFpbCBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfaW5jaGFyIF9fQVJHUygoY2hhcl91ICpidWYsIGludCBtYXhsZW4sIGxvbmcgdGltZSwgaW50IHRiX2NoYW5nZV9jbnQpKTsKK3ZvaWQgbWNoX2luaXQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9leGl0IF9fQVJHUygoaW50IHIpKTsKK2ludCBtY2hfY2hlY2tfd2luIF9fQVJHUygoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSk7Cit2b2lkIGZuYW1lX2Nhc2UgX19BUkdTKChjaGFyX3UgKm5hbWUsIGludCBsZW4pKTsKK2ludCBtY2hfZ2V0X3VzZXJfbmFtZSBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGxlbikpOwordm9pZCBtY2hfZ2V0X2hvc3RfbmFtZSBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGxlbikpOworbG9uZyBtY2hfZ2V0X3BpZCBfX0FSR1MoKHZvaWQpKTsKK2ludCBtY2hfZGlybmFtZSBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgbGVuKSk7Citsb25nIG1jaF9nZXRwZXJtIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgbWNoX3NldHBlcm0gX19BUkdTKChjaGFyX3UgKm5hbWUsIGxvbmcgcGVybSkpOwordm9pZCBtY2hfaGlkZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF9pc2RpciBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF93cml0YWJsZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IG1jaF9jYW5fZXhlIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgbWNoX25vZGV0eXBlIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7Cit2aW1fYWNsX1QgbWNoX2dldF9hY2wgX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7Cit2b2lkIG1jaF9zZXRfYWNsIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgdmltX2FjbF9UIGFjbCkpOwordm9pZCBtY2hfZnJlZV9hY2wgX19BUkdTKCh2aW1fYWNsX1QgYWNsKSk7Cit2b2lkIG1jaF9zZXR0bW9kZSBfX0FSR1MoKGludCB0bW9kZSkpOworaW50IG1jaF9nZXRfc2hlbGxzaXplIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfc2V0X3NoZWxsc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgbWNoX25ld19zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG1jaF9zZXRfd2luc2l6ZV9ub3cgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2NhbGxfc2hlbGwgX19BUkdTKChjaGFyX3UgKmNtZCwgaW50IG9wdGlvbnMpKTsKK3ZvaWQgbWNoX3NldF9ub3JtYWxfY29sb3JzIF9fQVJHUygodm9pZCkpOwordm9pZCBtY2hfd3JpdGUgX19BUkdTKChjaGFyX3UgKnMsIGludCBsZW4pKTsKK3ZvaWQgbWNoX2RlbGF5IF9fQVJHUygobG9uZyBtc2VjLCBpbnQgaWdub3JlaW5wdXQpKTsKK2ludCBtY2hfcmVtb3ZlIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7Cit2b2lkIG1jaF9icmVha2NoZWNrIF9fQVJHUygodm9pZCkpOworbG9uZ191IG1jaF9hdmFpbF9tZW0gX19BUkdTKChpbnQgc3BlY2lhbCkpOworaW50IG1jaF93cmVuYW1lIF9fQVJHUygoV0NIQVIgKndvbGQsIFdDSEFSICp3bmV3KSk7CitpbnQgbWNoX3JlbmFtZSBfX0FSR1MoKGNvbnN0IGNoYXIgKnBzek9sZEZpbGUsIGNvbnN0IGNoYXIgKnBzek5ld0ZpbGUpKTsKK2NoYXIgKmRlZmF1bHRfc2hlbGwgX19BUkdTKCh2b2lkKSk7CitpbnQgbWNoX2FjY2VzcyBfX0FSR1MoKGNoYXIgKm4sIGludCBwKSk7CitpbnQgbWNoX29wZW4gX19BUkdTKChjaGFyICpuYW1lLCBpbnQgZmxhZ3MsIGludCBtb2RlKSk7CitGSUxFICptY2hfZm9wZW4gX19BUkdTKChjaGFyICpuYW1lLCBjaGFyICptb2RlKSk7CitpbnQgbWNoX2NvcHlfZmlsZV9hdHRyaWJ1dGUgX19BUkdTKChjaGFyX3UgKmZyb20sIGNoYXJfdSAqdG8pKTsKK2ludCBteXJlc2V0c3Rrb2ZsdyBfX0FSR1MoKHZvaWQpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL3B0eS5wcm8gYi9zcmMvcHJvdG8vcHR5LnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjQyNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL3B0eS5wcm8KQEAgLTAsMCArMSwzIEBACisvKiBwdHkuYyAqLworaW50IE9wZW5QVFkgX19BUkdTKChjaGFyICoqdHR5bikpOworaW50IFNldHVwU2xhdmVQVFkgX19BUkdTKChpbnQgZmQpKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9xdWlja2ZpeC5wcm8gYi9zcmMvcHJvdG8vcXVpY2tmaXgucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZDYxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vcXVpY2tmaXgucHJvCkBAIC0wLDAgKzEsMjEgQEAKKy8qIHF1aWNrZml4LmMgKi8KK2ludCBxZl9pbml0IF9fQVJHUygoY2hhcl91ICplZmlsZSwgY2hhcl91ICplcnJvcmZvcm1hdCwgaW50IG5ld2xpc3QpKTsKK3ZvaWQgcWZfanVtcCBfX0FSR1MoKGludCBkaXIsIGludCBlcnJvcm5yLCBpbnQgZm9yY2VpdCkpOwordm9pZCBxZl9saXN0IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIHFmX2FnZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBxZl9tYXJrX2FkanVzdCBfX0FSR1MoKGxpbmVucl9UIGxpbmUxLCBsaW5lbnJfVCBsaW5lMiwgbG9uZyBhbW91bnQsIGxvbmcgYW1vdW50X2FmdGVyKSk7Cit2b2lkIGV4X2N3aW5kb3cgX19BUkdTKChleGFyZ19UICplYXApKTsKK3ZvaWQgZXhfY2Nsb3NlIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X2NvcGVuIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitsaW5lbnJfVCBxZl9jdXJyZW50X2VudHJ5IF9fQVJHUygodm9pZCkpOworaW50IGJ0X3F1aWNrZml4IF9fQVJHUygoYnVmX1QgKmJ1ZikpOworaW50IGJ0X25vZmlsZSBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK2ludCBidF9kb250d3JpdGUgX19BUkdTKChidWZfVCAqYnVmKSk7CitpbnQgYnRfZG9udHdyaXRlX21zZyBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK2ludCBidWZfaGlkZSBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK3ZvaWQgZXhfbWFrZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9jYyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9jbmV4dCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9jZmlsZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBleF9oZWxwZ3JlcCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vcmVnZXhwLnBybyBiL3NyYy9wcm90by9yZWdleHAucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZjFjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vcmVnZXhwLnBybwpAQCAtMCwwICsxLDE2IEBACisvKiByZWdleHAuYyAqLworaW50IHJlX211bHRpbGluZSBfX0FSR1MoKHJlZ3Byb2dfVCAqcHJvZykpOworaW50IHJlX2xvb2tiZWhpbmQgX19BUkdTKChyZWdwcm9nX1QgKnByb2cpKTsKK2NoYXJfdSAqc2tpcF9yZWdleHAgX19BUkdTKChjaGFyX3UgKnN0YXJ0cCwgaW50IGRpcmMsIGludCBtYWdpYywgY2hhcl91ICoqbmV3cCkpOworcmVncHJvZ19UICp2aW1fcmVnY29tcCBfX0FSR1MoKGNoYXJfdSAqZXhwciwgaW50IHJlX2ZsYWdzKSk7CitpbnQgdmltX3JlZ2NvbXBfaGFkX2VvbCBfX0FSR1MoKHZvaWQpKTsKK2ludCB2aW1fcmVnZXhlYyBfX0FSR1MoKHJlZ21hdGNoX1QgKnJtcCwgY2hhcl91ICpsaW5lLCBjb2xucl9UIGNvbCkpOworaW50IHZpbV9yZWdleGVjX25sIF9fQVJHUygocmVnbWF0Y2hfVCAqcm1wLCBjaGFyX3UgKmxpbmUsIGNvbG5yX1QgY29sKSk7Citsb25nIHZpbV9yZWdleGVjX211bHRpIF9fQVJHUygocmVnbW1hdGNoX1QgKnJtcCwgd2luX1QgKndpbiwgYnVmX1QgKmJ1ZiwgbGluZW5yX1QgbG51bSwgY29sbnJfVCBjb2wpKTsKK3JlZ19leHRtYXRjaF9UICpyZWZfZXh0bWF0Y2ggX19BUkdTKChyZWdfZXh0bWF0Y2hfVCAqZW0pKTsKK3ZvaWQgdW5yZWZfZXh0bWF0Y2ggX19BUkdTKChyZWdfZXh0bWF0Y2hfVCAqZW0pKTsKK2NoYXJfdSAqcmVndGlsZGUgX19BUkdTKChjaGFyX3UgKnNvdXJjZSwgaW50IG1hZ2ljKSk7CitpbnQgdmltX3JlZ3N1YiBfX0FSR1MoKHJlZ21hdGNoX1QgKnJtcCwgY2hhcl91ICpzb3VyY2UsIGNoYXJfdSAqZGVzdCwgaW50IGNvcHksIGludCBtYWdpYywgaW50IGJhY2tzbGFzaCkpOworaW50IHZpbV9yZWdzdWJfbXVsdGkgX19BUkdTKChyZWdtbWF0Y2hfVCAqcm1wLCBsaW5lbnJfVCBsbnVtLCBjaGFyX3UgKnNvdXJjZSwgY2hhcl91ICpkZXN0LCBpbnQgY29weSwgaW50IG1hZ2ljLCBpbnQgYmFja3NsYXNoKSk7CitjaGFyX3UgKnJlZ19zdWJtYXRjaCBfX0FSR1MoKGludCBubykpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vc2NyZWVuLnBybyBiL3NyYy9wcm90by9zY3JlZW4ucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDFmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vc2NyZWVuLnBybwpAQCAtMCwwICsxLDQ2IEBACisvKiBzY3JlZW4uYyAqLwordm9pZCByZWRyYXdfbGF0ZXIgX19BUkdTKChpbnQgdHlwZSkpOwordm9pZCByZWRyYXdfd2luX2xhdGVyIF9fQVJHUygod2luX1QgKndwLCBpbnQgdHlwZSkpOwordm9pZCByZWRyYXdfbGF0ZXJfY2xlYXIgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHJlZHJhd19hbGxfbGF0ZXIgX19BUkdTKChpbnQgdHlwZSkpOwordm9pZCByZWRyYXdfY3VyYnVmX2xhdGVyIF9fQVJHUygoaW50IHR5cGUpKTsKK3ZvaWQgcmVkcmF3X2J1Zl9sYXRlciBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCB0eXBlKSk7Cit2b2lkIHJlZHJhd1dpbmxpbmUgX19BUkdTKChsaW5lbnJfVCBsbnVtLCBpbnQgaW52YWxpZCkpOwordm9pZCB1cGRhdGVfY3VyYnVmIF9fQVJHUygoaW50IHR5cGUpKTsKK3ZvaWQgdXBkYXRlX3NjcmVlbiBfX0FSR1MoKGludCB0eXBlKSk7Cit2b2lkIHVwZGF0ZV9kZWJ1Z19zaWduIF9fQVJHUygoYnVmX1QgKmJ1ZiwgbGluZW5yX1QgbG51bSkpOwordm9pZCB1cGRhdGVXaW5kb3cgX19BUkdTKCh3aW5fVCAqd3ApKTsKK3ZvaWQgc3RhdHVzX3JlZHJhd19hbGwgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHN0YXR1c19yZWRyYXdfY3VyYnVmIF9fQVJHUygodm9pZCkpOwordm9pZCByZWRyYXdfc3RhdHVzbGluZXMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHdpbl9yZWRyYXdfbGFzdF9zdGF0dXMgX19BUkdTKChmcmFtZV9UICpmcnApKTsKK3ZvaWQgd2luX3JlZHJfc3RhdHVzX21hdGNoZXMgX19BUkdTKChleHBhbmRfVCAqeHAsIGludCBudW1fbWF0Y2hlcywgY2hhcl91ICoqbWF0Y2hlcywgaW50IG1hdGNoLCBpbnQgc2hvd3RhaWwpKTsKK3ZvaWQgd2luX3JlZHJfc3RhdHVzIF9fQVJHUygod2luX1QgKndwKSk7CitpbnQgc3RsX2Nvbm5lY3RlZCBfX0FSR1MoKHdpbl9UICp3cCkpOworaW50IGdldF9rZXltYXBfc3RyIF9fQVJHUygod2luX1QgKndwLCBjaGFyX3UgKmJ1ZiwgaW50IGxlbikpOwordm9pZCBzY3JlZW5fcHV0Y2hhciBfX0FSR1MoKGludCBjLCBpbnQgcm93LCBpbnQgY29sLCBpbnQgYXR0cikpOwordm9pZCBzY3JlZW5fZ2V0Ynl0ZXMgX19BUkdTKChpbnQgcm93LCBpbnQgY29sLCBjaGFyX3UgKmJ5dGVzLCBpbnQgKmF0dHJwKSk7Cit2b2lkIHNjcmVlbl9wdXRzIF9fQVJHUygoY2hhcl91ICp0ZXh0LCBpbnQgcm93LCBpbnQgY29sLCBpbnQgYXR0cikpOwordm9pZCBzY3JlZW5fcHV0c19sZW4gX19BUkdTKChjaGFyX3UgKnRleHQsIGludCBsZW4sIGludCByb3csIGludCBjb2wsIGludCBhdHRyKSk7Cit2b2lkIHNjcmVlbl9zdG9wX2hpZ2hsaWdodCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgcmVzZXRfY3Rlcm1fY29sb3JzIF9fQVJHUygodm9pZCkpOwordm9pZCBzY3JlZW5fZHJhd19yZWN0YW5nbGUgX19BUkdTKChpbnQgcm93LCBpbnQgY29sLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBpbnZlcnQpKTsKK3ZvaWQgc2NyZWVuX2ZpbGwgX19BUkdTKChpbnQgc3RhcnRfcm93LCBpbnQgZW5kX3JvdywgaW50IHN0YXJ0X2NvbCwgaW50IGVuZF9jb2wsIGludCBjMSwgaW50IGMyLCBpbnQgYXR0cikpOwordm9pZCBjaGVja19mb3JfZGVsYXkgX19BUkdTKChpbnQgY2hlY2tfbXNnX3Njcm9sbCkpOworaW50IHNjcmVlbl92YWxpZCBfX0FSR1MoKGludCBjbGVhcikpOwordm9pZCBzY3JlZW5hbGxvYyBfX0FSR1MoKGludCBjbGVhcikpOwordm9pZCBzY3JlZW5jbGVhciBfX0FSR1MoKHZvaWQpKTsKK2ludCBjYW5fY2xlYXIgX19BUkdTKChjaGFyX3UgKnApKTsKK3ZvaWQgc2NyZWVuX3N0YXJ0IF9fQVJHUygodm9pZCkpOwordm9pZCBzY3JlZW5fZG93biBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgd2luZGdvdG8gX19BUkdTKChpbnQgcm93LCBpbnQgY29sKSk7Cit2b2lkIHNldGN1cnNvciBfX0FSR1MoKHZvaWQpKTsKK2ludCB3aW5faW5zX2xpbmVzIF9fQVJHUygod2luX1QgKndwLCBpbnQgcm93LCBpbnQgbGluZV9jb3VudCwgaW50IGludmFsaWQsIGludCBtYXljbGVhcikpOworaW50IHdpbl9kZWxfbGluZXMgX19BUkdTKCh3aW5fVCAqd3AsIGludCByb3csIGludCBsaW5lX2NvdW50LCBpbnQgaW52YWxpZCwgaW50IG1heWNsZWFyKSk7CitpbnQgc2NyZWVuX2RlbF9saW5lcyBfX0FSR1MoKGludCBvZmYsIGludCByb3csIGludCBsaW5lX2NvdW50LCBpbnQgZW5kLCBpbnQgZm9yY2UsIHdpbl9UICp3cCkpOworaW50IHNob3dtb2RlIF9fQVJHUygodm9pZCkpOwordm9pZCB1bnNob3dtb2RlIF9fQVJHUygoaW50IGZvcmNlKSk7CitpbnQgcmVkcmF3aW5nIF9fQVJHUygodm9pZCkpOworaW50IG1lc3NhZ2luZyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgc2hvd3J1bGVyIF9fQVJHUygoaW50IGFsd2F5cykpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vc2VhcmNoLnBybyBiL3NyYy9wcm90by9zZWFyY2gucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NGMzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vc2VhcmNoLnBybwpAQCAtMCwwICsxLDMzIEBACisvKiBzZWFyY2guYyAqLworaW50IHNlYXJjaF9yZWdjb21wIF9fQVJHUygoY2hhcl91ICpwYXQsIGludCBwYXRfc2F2ZSwgaW50IHBhdF91c2UsIGludCBvcHRpb25zLCByZWdtbWF0Y2hfVCAqcmVnbWF0Y2gpKTsKK2NoYXJfdSAqZ2V0X3NlYXJjaF9wYXQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNhdmVfc2VhcmNoX3BhdHRlcm5zIF9fQVJHUygodm9pZCkpOwordm9pZCByZXN0b3JlX3NlYXJjaF9wYXR0ZXJucyBfX0FSR1MoKHZvaWQpKTsKK2ludCBpZ25vcmVjYXNlIF9fQVJHUygoY2hhcl91ICpwYXQpKTsKK2NoYXJfdSAqbGFzdF9zZWFyY2hfcGF0IF9fQVJHUygodm9pZCkpOwordm9pZCByZXNldF9zZWFyY2hfZGlyIF9fQVJHUygodm9pZCkpOwordm9pZCBzZXRfbGFzdF9zZWFyY2hfcGF0IF9fQVJHUygoY2hhcl91ICpzLCBpbnQgaWR4LCBpbnQgbWFnaWMsIGludCBzZXRsYXN0KSk7Cit2b2lkIGxhc3RfcGF0X3Byb2cgX19BUkdTKChyZWdtbWF0Y2hfVCAqcmVnbWF0Y2gpKTsKK2ludCBzZWFyY2hpdCBfX0FSR1MoKHdpbl9UICp3aW4sIGJ1Zl9UICpidWYsIHBvc19UICpwb3MsIGludCBkaXIsIGNoYXJfdSAqcGF0LCBsb25nIGNvdW50LCBpbnQgb3B0aW9ucywgaW50IHBhdF91c2UpKTsKK2ludCBkb19zZWFyY2ggX19BUkdTKChvcGFyZ19UICpvYXAsIGludCBkaXJjLCBjaGFyX3UgKnBhdCwgbG9uZyBjb3VudCwgaW50IG9wdGlvbnMpKTsKK2ludCBzZWFyY2hfZm9yX2V4YWN0X2xpbmUgX19BUkdTKChidWZfVCAqYnVmLCBwb3NfVCAqcG9zLCBpbnQgZGlyLCBjaGFyX3UgKnBhdCkpOworaW50IHNlYXJjaGMgX19BUkdTKChjbWRhcmdfVCAqY2FwLCBpbnQgdF9jbWQpKTsKK3Bvc19UICpmaW5kbWF0Y2ggX19BUkdTKChvcGFyZ19UICpvYXAsIGludCBpbml0YykpOworcG9zX1QgKmZpbmRtYXRjaGxpbWl0IF9fQVJHUygob3BhcmdfVCAqb2FwLCBpbnQgaW5pdGMsIGludCBmbGFncywgaW50IG1heHRyYXZlbCkpOwordm9pZCBzaG93bWF0Y2ggX19BUkdTKChpbnQgYykpOworaW50IGZpbmRzZW50IF9fQVJHUygoaW50IGRpciwgbG9uZyBjb3VudCkpOworaW50IGZpbmRwYXIgX19BUkdTKChvcGFyZ19UICpvYXAsIGludCBkaXIsIGxvbmcgY291bnQsIGludCB3aGF0LCBpbnQgYm90aCkpOworaW50IHN0YXJ0UFMgX19BUkdTKChsaW5lbnJfVCBsbnVtLCBpbnQgcGFyYSwgaW50IGJvdGgpKTsKK2ludCBmd2Rfd29yZCBfX0FSR1MoKGxvbmcgY291bnQsIGludCBiaWd3b3JkLCBpbnQgZW9sKSk7CitpbnQgYmNrX3dvcmQgX19BUkdTKChsb25nIGNvdW50LCBpbnQgYmlnd29yZCwgaW50IHN0b3ApKTsKK2ludCBlbmRfd29yZCBfX0FSR1MoKGxvbmcgY291bnQsIGludCBiaWd3b3JkLCBpbnQgc3RvcCwgaW50IGVtcHR5KSk7CitpbnQgYmNrZW5kX3dvcmQgX19BUkdTKChsb25nIGNvdW50LCBpbnQgYmlnd29yZCwgaW50IGVvbCkpOworaW50IGN1cnJlbnRfd29yZCBfX0FSR1MoKG9wYXJnX1QgKm9hcCwgbG9uZyBjb3VudCwgaW50IGluY2x1ZGUsIGludCBiaWd3b3JkKSk7CitpbnQgY3VycmVudF9zZW50IF9fQVJHUygob3BhcmdfVCAqb2FwLCBsb25nIGNvdW50LCBpbnQgaW5jbHVkZSkpOworaW50IGN1cnJlbnRfYmxvY2sgX19BUkdTKChvcGFyZ19UICpvYXAsIGxvbmcgY291bnQsIGludCBpbmNsdWRlLCBpbnQgd2hhdCwgaW50IG90aGVyKSk7CitpbnQgY3VycmVudF9wYXIgX19BUkdTKChvcGFyZ19UICpvYXAsIGxvbmcgY291bnQsIGludCBpbmNsdWRlLCBpbnQgdHlwZSkpOworaW50IGxpbmV3aGl0ZSBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK3ZvaWQgZmluZF9wYXR0ZXJuX2luX3BhdGggX19BUkdTKChjaGFyX3UgKnB0ciwgaW50IGRpciwgaW50IGxlbiwgaW50IHdob2xlLCBpbnQgc2tpcF9jb21tZW50cywgaW50IHR5cGUsIGxvbmcgY291bnQsIGludCBhY3Rpb24sIGxpbmVucl9UIHN0YXJ0X2xudW0sIGxpbmVucl9UIGVuZF9sbnVtKSk7CitpbnQgcmVhZF92aW1pbmZvX3NlYXJjaF9wYXR0ZXJuIF9fQVJHUygodmlyX1QgKnZpcnAsIGludCBmb3JjZSkpOwordm9pZCB3cml0ZV92aW1pbmZvX3NlYXJjaF9wYXR0ZXJuIF9fQVJHUygoRklMRSAqZnApKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL3N5bnRheC5wcm8gYi9zcmMvcHJvdG8vc3ludGF4LnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGRkM2VhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL3N5bnRheC5wcm8KQEAgLTAsMCArMSw0MiBAQAorLyogc3ludGF4LmMgKi8KK3ZvaWQgc3ludGF4X3N0YXJ0IF9fQVJHUygod2luX1QgKndwLCBsaW5lbnJfVCBsbnVtKSk7Cit2b2lkIHN5bl9zdGFja19mcmVlX2FsbCBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK3ZvaWQgc3luX3N0YWNrX2FwcGx5X2NoYW5nZXMgX19BUkdTKChidWZfVCAqYnVmKSk7Cit2b2lkIHN5bnRheF9lbmRfcGFyc2luZyBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2ludCBzeW50YXhfY2hlY2tfY2hhbmdlZCBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2ludCBnZXRfc3ludGF4X2F0dHIgX19BUkdTKChjb2xucl9UIGNvbCkpOwordm9pZCBzeW50YXhfY2xlYXIgX19BUkdTKChidWZfVCAqYnVmKSk7Cit2b2lkIGV4X3N5bnRheCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworaW50IHN5bnRheF9wcmVzZW50IF9fQVJHUygoYnVmX1QgKmJ1ZikpOwordm9pZCBzZXRfY29udGV4dF9pbl9zeW50YXhfY21kIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBjaGFyX3UgKmFyZykpOworY2hhcl91ICpnZXRfc3ludGF4X25hbWUgX19BUkdTKChleHBhbmRfVCAqeHAsIGludCBpZHgpKTsKK2ludCBzeW5fZ2V0X2lkIF9fQVJHUygobG9uZyBsbnVtLCBsb25nIGNvbCwgaW50IHRyYW5zKSk7CitpbnQgc3luX2dldF9mb2xkbGV2ZWwgX19BUkdTKCh3aW5fVCAqd3AsIGxvbmcgbG51bSkpOwordm9pZCBpbml0X2hpZ2hsaWdodCBfX0FSR1MoKGludCBib3RoLCBpbnQgcmVzZXQpKTsKK2ludCBsb2FkX2NvbG9ycyBfX0FSR1MoKGNoYXJfdSAqcCkpOwordm9pZCBkb19oaWdobGlnaHQgX19BUkdTKChjaGFyX3UgKmxpbmUsIGludCBmb3JjZWl0LCBpbnQgaW5pdCkpOwordm9pZCByZXN0b3JlX2N0ZXJtX2NvbG9ycyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgc2V0X25vcm1hbF9jb2xvcnMgX19BUkdTKCh2b2lkKSk7CitjaGFyX3UgKmhsX2dldF9mb250X25hbWUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGhsX3NldF9mb250X25hbWUgX19BUkdTKChjaGFyX3UgKmZvbnRfbmFtZSkpOwordm9pZCBobF9zZXRfYmdfY29sb3JfbmFtZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBobF9zZXRfZmdfY29sb3JfbmFtZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworYXR0cmVudHJ5X1QgKnN5bl9ndWlfYXR0cjJlbnRyeSBfX0FSR1MoKGludCBhdHRyKSk7CithdHRyZW50cnlfVCAqc3luX3Rlcm1fYXR0cjJlbnRyeSBfX0FSR1MoKGludCBhdHRyKSk7CithdHRyZW50cnlfVCAqc3luX2N0ZXJtX2F0dHIyZW50cnkgX19BUkdTKChpbnQgYXR0cikpOworY2hhcl91ICpoaWdobGlnaHRfaGFzX2F0dHIgX19BUkdTKChpbnQgaWQsIGludCBmbGFnLCBpbnQgbW9kZWMpKTsKK2NoYXJfdSAqaGlnaGxpZ2h0X2NvbG9yIF9fQVJHUygoaW50IGlkLCBjaGFyX3UgKndoYXQsIGludCBtb2RlYykpOworbG9uZ191IGhpZ2hsaWdodF9ndWlfY29sb3JfcmdiIF9fQVJHUygoaW50IGlkLCBpbnQgZmcpKTsKK2ludCBzeW5fbmFtZTJpZCBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworaW50IGhpZ2hsaWdodF9leGlzdHMgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2ludCBzeW5fbmFtZW4yaWQgX19BUkdTKChjaGFyX3UgKmxpbmVwLCBpbnQgbGVuKSk7CitpbnQgc3luX2NoZWNrX2dyb3VwIF9fQVJHUygoY2hhcl91ICpwcCwgaW50IGxlbikpOworaW50IHN5bl9pZDJhdHRyIF9fQVJHUygoaW50IGhsX2lkKSk7CitpbnQgc3luX2lkMmNvbG9ycyBfX0FSR1MoKGludCBobF9pZCwgZ3VpY29sb3JfVCAqZmdwLCBndWljb2xvcl9UICpiZ3ApKTsKK2ludCBzeW5fZ2V0X2ZpbmFsX2lkIF9fQVJHUygoaW50IGhsX2lkKSk7Cit2b2lkIGhpZ2hsaWdodF9ndWlfc3RhcnRlZCBfX0FSR1MoKHZvaWQpKTsKK2ludCBoaWdobGlnaHRfY2hhbmdlZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgc2V0X2NvbnRleHRfaW5faGlnaGxpZ2h0X2NtZCBfX0FSR1MoKGV4cGFuZF9UICp4cCwgY2hhcl91ICphcmcpKTsKK2NoYXJfdSAqZ2V0X2hpZ2hsaWdodF9uYW1lIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBpbnQgaWR4KSk7Cit2b2lkIGZyZWVfaGlnaGxpZ2h0X2ZvbnRzIF9fQVJHUygodm9pZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vdGFnLnBybyBiL3NyYy9wcm90by90YWcucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YzIzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vdGFnLnBybwpAQCAtMCwwICsxLDggQEAKKy8qIHRhZy5jICovCitpbnQgZG9fdGFnIF9fQVJHUygoY2hhcl91ICp0YWcsIGludCB0eXBlLCBpbnQgY291bnQsIGludCBmb3JjZWl0LCBpbnQgdmVyYm9zZSkpOwordm9pZCB0YWdfZnJlZW1hdGNoIF9fQVJHUygodm9pZCkpOwordm9pZCBkb190YWdzIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitpbnQgZmluZF90YWdzIF9fQVJHUygoY2hhcl91ICpwYXQsIGludCAqbnVtX21hdGNoZXMsIGNoYXJfdSAqKiptYXRjaGVzcCwgaW50IGZsYWdzLCBpbnQgbWluY291bnQsIGNoYXJfdSAqYnVmX2ZmbmFtZSkpOwordm9pZCBzaW1wbGlmeV9maWxlbmFtZSBfX0FSR1MoKGNoYXJfdSAqZmlsZW5hbWUpKTsKK2ludCBleHBhbmRfdGFncyBfX0FSR1MoKGludCB0YWduYW1lcywgY2hhcl91ICpwYXQsIGludCAqbnVtX2ZpbGUsIGNoYXJfdSAqKipmaWxlKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by90ZXJtLnBybyBiL3NyYy9wcm90by90ZXJtLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjkyNGJhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Byb3RvL3Rlcm0ucHJvCkBAIC0wLDAgKzEsNTggQEAKKy8qIHRlcm0uYyAqLworaW50IHNldF90ZXJtbmFtZSBfX0FSR1MoKGNoYXJfdSAqdGVybSkpOwordm9pZCBzZXRfbW91c2VfdGVybWNvZGUgX19BUkdTKChpbnQgbiwgY2hhcl91ICpzKSk7Cit2b2lkIGRlbF9tb3VzZV90ZXJtY29kZSBfX0FSR1MoKGludCBuKSk7Cit2b2lkIGdldGxpbmVjb2wgX19BUkdTKChsb25nICpjcCwgbG9uZyAqcnApKTsKK2ludCBhZGRfdGVybWNhcF9lbnRyeSBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGZvcmNlKSk7CitpbnQgdGVybV9pc184Yml0IF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgdGVybV9pc19ndWkgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK2NoYXJfdSAqdGx0b2EgX19BUkdTKCh1bnNpZ25lZCBsb25nIGkpKTsKK3ZvaWQgdGVybWNhcGluaXQgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK3ZvaWQgb3V0X2ZsdXNoIF9fQVJHUygodm9pZCkpOwordm9pZCBvdXRfZmx1c2hfY2hlY2sgX19BUkdTKCh2b2lkKSk7Cit2b2lkIG91dF90cmFzaCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgb3V0X2NoYXIgX19BUkdTKCh1bnNpZ25lZCBjKSk7Cit2b2lkIG91dF9zdHJfbmYgX19BUkdTKChjaGFyX3UgKnMpKTsKK3ZvaWQgb3V0X3N0ciBfX0FSR1MoKGNoYXJfdSAqcykpOwordm9pZCB0ZXJtX3dpbmRnb3RvIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCkpOwordm9pZCB0ZXJtX2N1cnNvcl9yaWdodCBfX0FSR1MoKGludCBpKSk7Cit2b2lkIHRlcm1fYXBwZW5kX2xpbmVzIF9fQVJHUygoaW50IGxpbmVfY291bnQpKTsKK3ZvaWQgdGVybV9kZWxldGVfbGluZXMgX19BUkdTKChpbnQgbGluZV9jb3VudCkpOwordm9pZCB0ZXJtX3NldF93aW5wb3MgX19BUkdTKChpbnQgeCwgaW50IHkpKTsKK3ZvaWQgdGVybV9zZXRfd2luc2l6ZSBfX0FSR1MoKGludCB3aWR0aCwgaW50IGhlaWdodCkpOwordm9pZCB0ZXJtX2ZnX2NvbG9yIF9fQVJHUygoaW50IG4pKTsKK3ZvaWQgdGVybV9iZ19jb2xvciBfX0FSR1MoKGludCBuKSk7Cit2b2lkIHRlcm1fc2V0dGl0bGUgX19BUkdTKChjaGFyX3UgKnRpdGxlKSk7Cit2b2lkIHR0ZXN0IF9fQVJHUygoaW50IHBhaXJzKSk7Cit2b2lkIGFkZF9sb25nX3RvX2J1ZiBfX0FSR1MoKGxvbmdfdSB2YWwsIGNoYXJfdSAqZHN0KSk7Cit2b2lkIGNoZWNrX3NoZWxsc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgd2luX25ld19zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNoZWxsX3Jlc2l6ZWQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNoZWxsX3Jlc2l6ZWRfY2hlY2sgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHNldF9zaGVsbHNpemUgX19BUkdTKChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtdXN0c2V0KSk7Cit2b2lkIHNldHRtb2RlIF9fQVJHUygoaW50IHRtb2RlKSk7Cit2b2lkIHN0YXJ0dGVybWNhcCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgc3RvcHRlcm1jYXAgX19BUkdTKCh2b2lkKSk7CitpbnQgc3dhcHBpbmdfc2NyZWVuIF9fQVJHUygodm9pZCkpOwordm9pZCBzZXRtb3VzZSBfX0FSR1MoKHZvaWQpKTsKK2ludCBtb3VzZV9oYXMgX19BUkdTKChpbnQgYykpOworaW50IG1vdXNlX21vZGVsX3BvcHVwIF9fQVJHUygodm9pZCkpOwordm9pZCBzY3JvbGxfc3RhcnQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGN1cnNvcl9vbiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY3Vyc29yX29mZiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgc2Nyb2xsX3JlZ2lvbl9zZXQgX19BUkdTKCh3aW5fVCAqd3AsIGludCBvZmYpKTsKK3ZvaWQgc2Nyb2xsX3JlZ2lvbl9yZXNldCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2xlYXJfdGVybWNvZGVzIF9fQVJHUygodm9pZCkpOwordm9pZCBhZGRfdGVybWNvZGUgX19BUkdTKChjaGFyX3UgKm5hbWUsIGNoYXJfdSAqc3RyaW5nLCBpbnQgdXNlXzhiaXQpKTsKK2NoYXJfdSAqZmluZF90ZXJtY29kZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworY2hhcl91ICpnZXRfdGVybWNvZGUgX19BUkdTKChpbnQgaSkpOwordm9pZCBkZWxfdGVybWNvZGUgX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK3ZvaWQgc2V0X21vdXNlX3RvcGxpbmUgX19BUkdTKCh3aW5fVCAqd3ApKTsKK2ludCBjaGVja190ZXJtY29kZSBfX0FSR1MoKGludCBtYXhfb2Zmc2V0LCBjaGFyX3UgKmJ1ZiwgaW50IGJ1ZmxlbikpOworY2hhcl91ICpyZXBsYWNlX3Rlcm1jb2RlcyBfX0FSR1MoKGNoYXJfdSAqZnJvbSwgY2hhcl91ICoqYnVmcCwgaW50IGZyb21fcGFydCwgaW50IGRvX2x0KSk7CitpbnQgZmluZF90ZXJtX2J5a2V5cyBfX0FSR1MoKGNoYXJfdSAqc3JjKSk7Cit2b2lkIHNob3dfdGVybWNvZGVzIF9fQVJHUygodm9pZCkpOworaW50IHNob3dfb25lX3Rlcm1jb2RlIF9fQVJHUygoY2hhcl91ICpuYW1lLCBjaGFyX3UgKmNvZGUsIGludCBwcmludGl0KSk7CitjaGFyX3UgKnRyYW5zbGF0ZV9tYXBwaW5nIF9fQVJHUygoY2hhcl91ICpzdHIsIGludCBleHBtYXApKTsKK3ZvaWQgdXBkYXRlX3RjYXAgX19BUkdTKChpbnQgYXR0cikpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vdGVybWxpYi5wcm8gYi9zcmMvcHJvdG8vdGVybWxpYi5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2OWVjZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by90ZXJtbGliLnBybwpAQCAtMCwwICsxLDggQEAKKy8qIHRlcm1saWIuYyAqLworaW50IHRnZXRlbnQgX19BUkdTKChjaGFyICp0YnVmLCBjaGFyICp0ZXJtKSk7CitpbnQgdGdldGZsYWcgX19BUkdTKChjaGFyICppZCkpOworaW50IHRnZXRudW0gX19BUkdTKChjaGFyICppZCkpOworY2hhciAqdGdldHN0ciBfX0FSR1MoKGNoYXIgKmlkLCBjaGFyICoqYnVmKSk7CitjaGFyICp0Z290byBfX0FSR1MoKGNoYXIgKmNtLCBpbnQgY29sLCBpbnQgbGluZSkpOworaW50IHRwdXRzIF9fQVJHUygoY2hhciAqY3AsIGludCBhZmZjbnQsIHZvaWQgKCpvdXRjKSh1bnNpZ25lZCBpbnQpKSk7CisvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by91aS5wcm8gYi9zcmMvcHJvdG8vdWkucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjViNmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vdWkucHJvCkBAIC0wLDAgKzEsNjEgQEAKKy8qIHVpLmMgKi8KK3ZvaWQgdWlfd3JpdGUgX19BUkdTKChjaGFyX3UgKnMsIGludCBsZW4pKTsKK3ZvaWQgdWlfaW5jaGFyX3VuZG8gX19BUkdTKChjaGFyX3UgKnMsIGludCBsZW4pKTsKK2ludCB1aV9pbmNoYXIgX19BUkdTKChjaGFyX3UgKmJ1ZiwgaW50IG1heGxlbiwgbG9uZyB3dGltZSwgaW50IHRiX2NoYW5nZV9jbnQpKTsKK2ludCB1aV9jaGFyX2F2YWlsIF9fQVJHUygodm9pZCkpOwordm9pZCB1aV9kZWxheSBfX0FSR1MoKGxvbmcgbXNlYywgaW50IGlnbm9yZWlucHV0KSk7Cit2b2lkIHVpX3N1c3BlbmQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHN1c3BlbmRfc2hlbGwgX19BUkdTKCh2b2lkKSk7CitpbnQgdWlfZ2V0X3NoZWxsc2l6ZSBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgdWlfc2V0X3NoZWxsc2l6ZSBfX0FSR1MoKGludCBtdXN0c2V0KSk7Cit2b2lkIHVpX25ld19zaGVsbHNpemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHVpX2JyZWFrY2hlY2sgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGNsaXBfaW5pdCBfX0FSR1MoKGludCBjYW5fdXNlKSk7Cit2b2lkIGNsaXBfdXBkYXRlX3NlbGVjdGlvbiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2xpcF9vd25fc2VsZWN0aW9uIF9fQVJHUygoVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgY2xpcF9sb3NlX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfY29weV9zZWxlY3Rpb24gX19BUkdTKCh2b2lkKSk7Cit2b2lkIGNsaXBfYXV0b19zZWxlY3QgX19BUkdTKCh2b2lkKSk7CitpbnQgY2xpcF9pc2F1dG9zZWwgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGNsaXBfbW9kZWxlc3MgX19BUkdTKChpbnQgYnV0dG9uLCBpbnQgaXNfY2xpY2ssIGludCBpc19kcmFnKSk7Cit2b2lkIGNsaXBfc3RhcnRfc2VsZWN0aW9uIF9fQVJHUygoaW50IGNvbCwgaW50IHJvdywgaW50IHJlcGVhdGVkX2NsaWNrKSk7Cit2b2lkIGNsaXBfcHJvY2Vzc19zZWxlY3Rpb24gX19BUkdTKChpbnQgYnV0dG9uLCBpbnQgY29sLCBpbnQgcm93LCBpbnRfdSByZXBlYXRlZF9jbGljaykpOwordm9pZCBjbGlwX21heV9yZWRyYXdfc2VsZWN0aW9uIF9fQVJHUygoaW50IHJvdywgaW50IGNvbCwgaW50IGxlbikpOwordm9pZCBjbGlwX2NsZWFyX3NlbGVjdGlvbiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2xpcF9tYXlfY2xlYXJfc2VsZWN0aW9uIF9fQVJHUygoaW50IHJvdzEsIGludCByb3cyKSk7Cit2b2lkIGNsaXBfc2Nyb2xsX3NlbGVjdGlvbiBfX0FSR1MoKGludCByb3dzKSk7Cit2b2lkIGNsaXBfY29weV9tb2RlbGVzc19zZWxlY3Rpb24gX19BUkdTKChpbnQgYm90aCkpOworaW50IGNsaXBfZ2VuX293bl9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOwordm9pZCBjbGlwX2dlbl9sb3NlX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfZ2VuX3NldF9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOwordm9pZCBjbGlwX2dlbl9yZXF1ZXN0X3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqY2JkKSk7CitpbnQgdmltX2lzX2lucHV0X2J1Zl9mdWxsIF9fQVJHUygodm9pZCkpOworaW50IHZpbV9pc19pbnB1dF9idWZfZW1wdHkgX19BUkdTKCh2b2lkKSk7CitpbnQgdmltX2ZyZWVfaW5faW5wdXRfYnVmIF9fQVJHUygodm9pZCkpOworaW50IHZpbV91c2VkX2luX2lucHV0X2J1ZiBfX0FSR1MoKHZvaWQpKTsKK2NoYXJfdSAqZ2V0X2lucHV0X2J1ZiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgc2V0X2lucHV0X2J1ZiBfX0FSR1MoKGNoYXJfdSAqcCkpOwordm9pZCBhZGRfdG9faW5wdXRfYnVmIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGVuKSk7Cit2b2lkIGFkZF90b19pbnB1dF9idWZfY3NpIF9fQVJHUygoY2hhcl91ICpzdHIsIGludCBsZW4pKTsKK3ZvaWQgcHVzaF9yYXdfa2V5IF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGVuKSk7Cit2b2lkIHRyYXNoX2lucHV0X2J1ZiBfX0FSR1MoKHZvaWQpKTsKK2ludCByZWFkX2Zyb21faW5wdXRfYnVmIF9fQVJHUygoY2hhcl91ICpidWYsIGxvbmcgbWF4bGVuKSk7Cit2b2lkIGZpbGxfaW5wdXRfYnVmIF9fQVJHUygoaW50IGV4aXRfb25fZXJyb3IpKTsKK3ZvaWQgcmVhZF9lcnJvcl9leGl0IF9fQVJHUygodm9pZCkpOwordm9pZCB1aV9jdXJzb3Jfc2hhcGUgX19BUkdTKCh2b2lkKSk7CitpbnQgY2hlY2tfY29sIF9fQVJHUygoaW50IGNvbCkpOworaW50IGNoZWNrX3JvdyBfX0FSR1MoKGludCByb3cpKTsKK3ZvaWQgb3Blbl9hcHBfY29udGV4dCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgeDExX3NldHVwX2F0b21zIF9fQVJHUygoRGlzcGxheSAqZHB5KSk7Cit2b2lkIGNsaXBfeDExX3JlcXVlc3Rfc2VsZWN0aW9uIF9fQVJHUygoV2lkZ2V0IG15U2hlbGwsIERpc3BsYXkgKmRweSwgVmltQ2xpcGJvYXJkICpjYmQpKTsKK3ZvaWQgY2xpcF94MTFfbG9zZV9zZWxlY3Rpb24gX19BUkdTKChXaWRnZXQgbXlTaGVsbCwgVmltQ2xpcGJvYXJkICpjYmQpKTsKK2ludCBjbGlwX3gxMV9vd25fc2VsZWN0aW9uIF9fQVJHUygoV2lkZ2V0IG15U2hlbGwsIFZpbUNsaXBib2FyZCAqY2JkKSk7Cit2b2lkIGNsaXBfeDExX3NldF9zZWxlY3Rpb24gX19BUkdTKChWaW1DbGlwYm9hcmQgKmNiZCkpOworaW50IGp1bXBfdG9fbW91c2UgX19BUkdTKChpbnQgZmxhZ3MsIGludCAqaW5jbHVzaXZlLCBpbnQgd2hpY2hfYnV0dG9uKSk7CitpbnQgbW91c2VfY29tcF9wb3MgX19BUkdTKCh3aW5fVCAqd2luLCBpbnQgKnJvd3AsIGludCAqY29scCwgbGluZW5yX1QgKmxudW1wKSk7Cit3aW5fVCAqbW91c2VfZmluZF93aW4gX19BUkdTKChpbnQgKnJvd3AsIGludCAqY29scCkpOworaW50IGdldF9mcG9zX29mX21vdXNlIF9fQVJHUygocG9zX1QgKm1wb3MpKTsKK2ludCB2Y29sMmNvbCBfX0FSR1MoKHdpbl9UICp3cCwgbGluZW5yX1QgbG51bSwgaW50IHZjb2wpKTsKK3ZvaWQgdWlfZm9jdXNfY2hhbmdlIF9fQVJHUygoaW50IGluX2ZvY3VzKSk7Cit2b2lkIGltX3NhdmVfc3RhdHVzIF9fQVJHUygobG9uZyAqcHNhdmUpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL3VuZG8ucHJvIGIvc3JjL3Byb3RvL3VuZG8ucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYzIzMjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vdW5kby5wcm8KQEAgLTAsMCArMSwxOCBAQAorLyogdW5kby5jICovCitpbnQgdV9zYXZlX2N1cnNvciBfX0FSR1MoKHZvaWQpKTsKK2ludCB1X3NhdmUgX19BUkdTKChsaW5lbnJfVCB0b3AsIGxpbmVucl9UIGJvdCkpOworaW50IHVfc2F2ZXN1YiBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2ludCB1X2luc3N1YiBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK2ludCB1X3NhdmVkZWwgX19BUkdTKChsaW5lbnJfVCBsbnVtLCBsb25nIG5saW5lcykpOwordm9pZCB1X3VuZG8gX19BUkdTKChpbnQgY291bnQpKTsKK3ZvaWQgdV9yZWRvIF9fQVJHUygoaW50IGNvdW50KSk7Cit2b2lkIHVfc3luYyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgdV91bmNoYW5nZWQgX19BUkdTKChidWZfVCAqYnVmKSk7Cit2b2lkIHVfY2xlYXJhbGwgX19BUkdTKChidWZfVCAqYnVmKSk7Cit2b2lkIHVfc2F2ZWxpbmUgX19BUkdTKChsaW5lbnJfVCBsbnVtKSk7Cit2b2lkIHVfY2xlYXJsaW5lIF9fQVJHUygodm9pZCkpOwordm9pZCB1X3VuZG9saW5lIF9fQVJHUygodm9pZCkpOwordm9pZCB1X2Jsb2NrZnJlZSBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKK2ludCBidWZJc0NoYW5nZWQgX19BUkdTKChidWZfVCAqYnVmKSk7CitpbnQgY3VyYnVmSXNDaGFuZ2VkIF9fQVJHUygodm9pZCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vdmVyc2lvbi5wcm8gYi9zcmMvcHJvdG8vdmVyc2lvbi5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzNzFmOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by92ZXJzaW9uLnBybwpAQCAtMCwwICsxLDkgQEAKKy8qIHZlcnNpb24uYyAqLwordm9pZCBtYWtlX3ZlcnNpb24gX19BUkdTKCh2b2lkKSk7CitpbnQgaGlnaGVzdF9wYXRjaCBfX0FSR1MoKHZvaWQpKTsKK2ludCBoYXNfcGF0Y2ggX19BUkdTKChpbnQgbikpOwordm9pZCBleF92ZXJzaW9uIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGxpc3RfdmVyc2lvbiBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgaW50cm9fbWVzc2FnZSBfX0FSR1MoKGludCBjb2xvbikpOwordm9pZCBleF9pbnRybyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vd2luZG93LnBybyBiL3NyYy9wcm90by93aW5kb3cucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0M2JkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHJvdG8vd2luZG93LnBybwpAQCAtMCwwICsxLDQ0IEBACisvKiB3aW5kb3cuYyAqLwordm9pZCBkb193aW5kb3cgX19BUkdTKChpbnQgbmNoYXIsIGxvbmcgUHJlbnVtLCBpbnQgeGNoYXIpKTsKK2ludCB3aW5fc3BsaXQgX19BUkdTKChpbnQgc2l6ZSwgaW50IGZsYWdzKSk7CitpbnQgd2luX3ZhbGlkIF9fQVJHUygod2luX1QgKndpbikpOworaW50IHdpbl9jb3VudCBfX0FSR1MoKHZvaWQpKTsKK2ludCBtYWtlX3dpbmRvd3MgX19BUkdTKChpbnQgY291bnQsIGludCB2ZXJ0aWNhbCkpOwordm9pZCB3aW5fbW92ZV9hZnRlciBfX0FSR1MoKHdpbl9UICp3aW4xLCB3aW5fVCAqd2luMikpOwordm9pZCB3aW5fZXF1YWwgX19BUkdTKCh3aW5fVCAqbmV4dF9jdXJ3aW4sIGludCBjdXJyZW50LCBpbnQgZGlyKSk7Cit2b2lkIGNsb3NlX3dpbmRvd3MgX19BUkdTKChidWZfVCAqYnVmKSk7Cit2b2lkIHdpbl9jbG9zZSBfX0FSR1MoKHdpbl9UICp3aW4sIGludCBmcmVlX2J1ZikpOwordm9pZCBjbG9zZV9vdGhlcnMgX19BUkdTKChpbnQgbWVzc2FnZSwgaW50IGZvcmNlaXQpKTsKK3ZvaWQgd2luX2luaXQgX19BUkdTKCh3aW5fVCAqd3ApKTsKK3ZvaWQgd2luX2FsbG9jX2ZpcnN0IF9fQVJHUygodm9pZCkpOwordm9pZCB3aW5fZ290byBfX0FSR1MoKHdpbl9UICp3cCkpOword2luX1QgKndpbl9maW5kX25yIF9fQVJHUygoaW50IHdpbm5yKSk7Cit2b2lkIHdpbl9lbnRlciBfX0FSR1MoKHdpbl9UICp3cCwgaW50IHVuZG9fc3luYykpOword2luX1QgKmJ1Zl9qdW1wX29wZW5fd2luIF9fQVJHUygoYnVmX1QgKmJ1ZikpOworaW50IHdpbl9hbGxvY19saW5lcyBfX0FSR1MoKHdpbl9UICp3cCkpOwordm9pZCB3aW5fZnJlZV9sc2l6ZSBfX0FSR1MoKHdpbl9UICp3cCkpOwordm9pZCBzaGVsbF9uZXdfcm93cyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgc2hlbGxfbmV3X2NvbHVtbnMgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHdpbl9zaXplX3NhdmUgX19BUkdTKChnYXJyYXlfVCAqZ2FwKSk7Cit2b2lkIHdpbl9zaXplX3Jlc3RvcmUgX19BUkdTKChnYXJyYXlfVCAqZ2FwKSk7Cit2b2lkIHdpbl9zZXRoZWlnaHQgX19BUkdTKChpbnQgaGVpZ2h0KSk7Cit2b2lkIHdpbl9zZXRoZWlnaHRfd2luIF9fQVJHUygoaW50IGhlaWdodCwgd2luX1QgKndpbikpOwordm9pZCB3aW5fc2V0d2lkdGggX19BUkdTKChpbnQgd2lkdGgpKTsKK3ZvaWQgd2luX3NldHdpZHRoX3dpbiBfX0FSR1MoKGludCB3aWR0aCwgd2luX1QgKndwKSk7Cit2b2lkIHdpbl9zZXRtaW5oZWlnaHQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHdpbl9kcmFnX3N0YXR1c19saW5lIF9fQVJHUygod2luX1QgKmRyYWd3aW4sIGludCBvZmZzZXQpKTsKK3ZvaWQgd2luX2RyYWdfdnNlcF9saW5lIF9fQVJHUygod2luX1QgKmRyYWd3aW4sIGludCBvZmZzZXQpKTsKK3ZvaWQgd2luX2NvbXBfc2Nyb2xsIF9fQVJHUygod2luX1QgKndwKSk7Cit2b2lkIGNvbW1hbmRfaGVpZ2h0IF9fQVJHUygobG9uZyBvbGRfcF9jaCkpOwordm9pZCBsYXN0X3N0YXR1cyBfX0FSR1MoKGludCBtb3Jld2luKSk7CitjaGFyX3UgKmZpbGVfbmFtZV9hdF9jdXJzb3IgX19BUkdTKChpbnQgb3B0aW9ucywgbG9uZyBjb3VudCkpOworY2hhcl91ICpmaWxlX25hbWVfaW5fbGluZSBfX0FSR1MoKGNoYXJfdSAqbGluZSwgaW50IGNvbCwgaW50IG9wdGlvbnMsIGxvbmcgY291bnQsIGNoYXJfdSAqcmVsX2ZuYW1lKSk7CitjaGFyX3UgKmZpbmRfZmlsZV9uYW1lX2luX3BhdGggX19BUkdTKChjaGFyX3UgKnB0ciwgaW50IGxlbiwgaW50IG9wdGlvbnMsIGxvbmcgY291bnQsIGNoYXJfdSAqcmVsX2ZuYW1lKSk7CitpbnQgcGF0aF93aXRoX3VybCBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKK2ludCB2aW1faXNBYnNOYW1lIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitpbnQgdmltX0Z1bGxOYW1lIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgY2hhcl91ICpidWYsIGludCBsZW4sIGludCBmb3JjZSkpOworaW50IG1pbl9yb3dzIF9fQVJHUygodm9pZCkpOworaW50IG9ubHlfb25lX3dpbmRvdyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgY2hlY2tfbG51bXMgX19BUkdTKChpbnQgZG9fY3Vyd2luKSk7CitpbnQgd2luX2hhc3ZlcnRzcGxpdCBfX0FSR1MoKHZvaWQpKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL3dvcmtzaG9wLnBybyBiL3NyYy9wcm90by93b3Jrc2hvcC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhMTA1MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wcm90by93b3Jrc2hvcC5wcm8KQEAgLTAsMCArMSw0OCBAQAorLyogd29ya3Nob3AuYyAqLwordm9pZCB3b3Jrc2hvcF9pbml0IF9fQVJHUygodm9pZCkpOwordm9pZCB3b3Jrc2hvcF9wb3N0aW5pdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgZXhfd3N2ZXJiIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CitjaGFyICp3b3Jrc2hvcF9nZXRfZWRpdG9yX25hbWUgX19BUkdTKCh2b2lkKSk7CitjaGFyICp3b3Jrc2hvcF9nZXRfZWRpdG9yX3ZlcnNpb24gX19BUkdTKCh2b2lkKSk7Cit2b2lkIHdvcmtzaG9wX2xvYWRfZmlsZSBfX0FSR1MoKGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZSwgY2hhciAqZnJhbWVpZCkpOwordm9pZCB3b3Jrc2hvcF9yZWxvYWRfZmlsZSBfX0FSR1MoKGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZSkpOwordm9pZCB3b3Jrc2hvcF9zaG93X2ZpbGUgX19BUkdTKChjaGFyICpmaWxlbmFtZSkpOwordm9pZCB3b3Jrc2hvcF9nb3RvX2xpbmUgX19BUkdTKChjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykpOwordm9pZCB3b3Jrc2hvcF9mcm9udF9maWxlIF9fQVJHUygoY2hhciAqZmlsZW5hbWUpKTsKK3ZvaWQgd29ya3Nob3Bfc2F2ZV9maWxlIF9fQVJHUygoY2hhciAqZmlsZW5hbWUpKTsKK3ZvaWQgd29ya3Nob3Bfc2F2ZV9maWxlcyBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgd29ya3Nob3BfcXVpdCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgd29ya3Nob3BfbWluaW1pemUgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHdvcmtzaG9wX21heGltaXplIF9fQVJHUygodm9pZCkpOwordm9pZCB3b3Jrc2hvcF9hZGRfbWFya190eXBlIF9fQVJHUygoaW50IGlkeCwgY2hhciAqY29sb3JzcGVjLCBjaGFyICpzaWduKSk7Cit2b2lkIHdvcmtzaG9wX3NldF9tYXJrIF9fQVJHUygoY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBtYXJrSWQsIGludCBpZHgpKTsKK3ZvaWQgd29ya3Nob3BfY2hhbmdlX21hcmtfdHlwZSBfX0FSR1MoKGNoYXIgKmZpbGVuYW1lLCBpbnQgbWFya0lkLCBpbnQgaWR4KSk7Cit2b2lkIHdvcmtzaG9wX2dvdG9fbWFyayBfX0FSR1MoKGNoYXIgKmZpbGVuYW1lLCBpbnQgbWFya0lkLCBjaGFyICptZXNzYWdlKSk7Cit2b2lkIHdvcmtzaG9wX2RlbGV0ZV9tYXJrIF9fQVJHUygoY2hhciAqZmlsZW5hbWUsIGludCBtYXJrSWQpKTsKK2ludCB3b3Jrc2hvcF9nZXRfbWFya19saW5lbm8gX19BUkdTKChjaGFyICpmaWxlbmFtZSwgaW50IG1hcmtJZCkpOwordm9pZCB3b3Jrc2hvcF9tb3ZlZF9tYXJrcyBfX0FSR1MoKGNoYXIgKmZpbGVuYW1lKSk7CitpbnQgd29ya3Nob3BfZ2V0X2ZvbnRfaGVpZ2h0IF9fQVJHUygodm9pZCkpOwordm9pZCB3b3Jrc2hvcF9mb290ZXJfbWVzc2FnZSBfX0FSR1MoKGNoYXIgKm1lc3NhZ2UsIGludCBzZXZlcml0eSkpOwordm9pZCB3b3Jrc2hvcF9tZW51X2JlZ2luIF9fQVJHUygoY2hhciAqbGFiZWwpKTsKK3ZvaWQgd29ya3Nob3Bfc3VibWVudV9iZWdpbiBfX0FSR1MoKGNoYXIgKmxhYmVsKSk7Cit2b2lkIHdvcmtzaG9wX3N1Ym1lbnVfZW5kIF9fQVJHUygodm9pZCkpOwordm9pZCB3b3Jrc2hvcF9tZW51X2l0ZW0gX19BUkdTKChjaGFyICpsYWJlbCwgY2hhciAqdmVyYiwgY2hhciAqYWNjZWxlcmF0b3IsIGNoYXIgKmFjY2VsZXJhdG9yVGV4dCwgY2hhciAqbmFtZSwgY2hhciAqZmlsZXBvcywgY2hhciAqc2Vuc2l0aXZlKSk7Cit2b2lkIHdvcmtzaG9wX21lbnVfZW5kIF9fQVJHUygodm9pZCkpOwordm9pZCB3b3Jrc2hvcF90b29sYmFyX2JlZ2luIF9fQVJHUygodm9pZCkpOwordm9pZCB3b3Jrc2hvcF90b29sYmFyX2VuZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgd29ya3Nob3BfdG9vbGJhcl9idXR0b24gX19BUkdTKChjaGFyICpsYWJlbCwgY2hhciAqdmVyYiwgY2hhciAqc2Vuc2VWZXJiLCBjaGFyICpmaWxlcG9zLCBjaGFyICpoZWxwLCBjaGFyICpzZW5zZSwgY2hhciAqZmlsZSwgY2hhciAqbGVmdCkpOwordm9pZCB3b3Jrc2hvcF9mcmFtZV9zZW5zaXRpdml0aWVzIF9fQVJHUygoVmVyYlNlbnNlICp2cykpOwordm9pZCB3b3Jrc2hvcF9zZXRfb3B0aW9uIF9fQVJHUygoY2hhciAqb3B0aW9uLCBjaGFyICp2YWx1ZSkpOwordm9pZCB3b3Jrc2hvcF9iYWxsb29uX21vZGUgX19BUkdTKChCb29sZWFuIG9uKSk7Cit2b2lkIHdvcmtzaG9wX2JhbGxvb25fZGVsYXkgX19BUkdTKChpbnQgZGVsYXkpKTsKK3ZvaWQgd29ya3Nob3Bfc2hvd19iYWxsb29uX3RpcCBfX0FSR1MoKGNoYXIgKnRpcCkpOwordm9pZCB3b3Jrc2hvcF9ob3RrZXlzIF9fQVJHUygoQm9vbGVhbiBvbikpOworaW50IHdvcmtzaG9wX2dldF9wb3NpdGlvbnMgX19BUkdTKCh2b2lkICpjbGllbnREYXRhLCBjaGFyICoqZmlsZW5hbWUsIGludCAqY3VyTGluZSwgaW50ICpjdXJDb2wsIGludCAqc2VsU3RhcnRMaW5lLCBpbnQgKnNlbFN0YXJ0Q29sLCBpbnQgKnNlbEVuZExpbmUsIGludCAqc2VsRW5kQ29sLCBpbnQgKnNlbExlbmd0aCwgY2hhciAqKnNlbGVjdGlvbikpOworY2hhciAqd29ya3Nob3BfdGVzdF9nZXRjdXJyZW50ZmlsZSBfX0FSR1MoKHZvaWQpKTsKK2ludCB3b3Jrc2hvcF90ZXN0X2dldGN1cnNvcnJvdyBfX0FSR1MoKHZvaWQpKTsKK2ludCB3b3Jrc2hvcF90ZXN0X2dldGN1cnNvcmNvbCBfX0FSR1MoKHZvaWQpKTsKK2NoYXIgKndvcmtzaG9wX3Rlc3RfZ2V0Y3Vyc29ycm93dGV4dCBfX0FSR1MoKHZvaWQpKTsKK2NoYXIgKndvcmtzaG9wX3Rlc3RfZ2V0c2VsZWN0ZWR0ZXh0IF9fQVJHUygodm9pZCkpOwordm9pZCB3b3Jrc2hvcF9zYXZlX3NlbnNpdGl2aXR5IF9fQVJHUygoY2hhciAqZmlsZW5hbWUpKTsKK3ZvaWQgZmluZFlvdXJzZWxmIF9fQVJHUygoY2hhciAqYXJndjApKTsKKy8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3B0eS5jIGIvc3JjL3B0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOGQ3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHR5LmMKQEAgLTAsMCArMSw0MjUgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisvKgorICogVGhlIHN0dWZmIGluIHRoaXMgZmlsZSBtb3N0bHkgY29tZXMgZnJvbSB0aGUgInNjcmVlbiIgcHJvZ3JhbS4KKyAqIEluY2x1ZGVkIHdpdGggcGVybWlzc2lvbiBmcm9tIEp1ZXJnZW4gV2VpZ2VydC4KKyAqIENvcGllZCBmcm9tICJwdHkuYyIuICAicHV0ZW52LmMiIHdhcyB1c2VkIGZvciBwdXRlbnYoKSBpbiBtaXNjMi5jLgorICoKKyAqIEl0IGhhcyBiZWVuIG1vZGlmaWVkIHRvIHdvcmsgYmV0dGVyIHdpdGggVmltLgorICogVGhlIHBhcnRzIHRoYXQgYXJlIG5vdCB1c2VkIGluIFZpbSBoYXZlIGJlZW4gZGVsZXRlZC4KKyAqIFNlZSB0aGUgInNjcmVlbiIgc291cmNlcyBmb3IgdGhlIGNvbXBsZXRlIHN0dWZmLgorICovCisKKy8qIENvcHlyaWdodCAoYykgMTk5MworICoJSnVlcmdlbiBXZWlnZXJ0IChqbndlaWdlckBpbW1kNC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZSkKKyAqCU1pY2hhZWwgU2Nocm9lZGVyIChtbHNjaHJvZUBpbW1kNC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZSkKKyAqIENvcHlyaWdodCAoYykgMTk4NyBPbGl2ZXIgTGF1bWFubgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0gKHNlZSB0aGUgZmlsZSBDT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBCisgKi8KKworLyogUkNTX0lEKCIkSWQkIEZBVSIpICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmZGVmIEhBVkVfRkNOVExfSAorIyBpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmZGVmIF9fQ1lHV0lOMzJfXworIyBpbmNsdWRlIDxzeXMvdGVybWlvcy5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1NZU19JT0NUTF9ICisjIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1NUUk9QVFNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIHNpbml4CisjZGVmaW5lIGJ1Zl9UIF9fc3lzdGVtX2J1Zl90X18KKyNlbmRpZgorI2luY2x1ZGUgPHN0cm9wdHMuaD4KKyNpZmRlZiBzaW5peAorI3VuZGVmIGJ1Zl9UCisjZW5kaWYKKyMgaWZkZWYgc3VuCisjICBpbmNsdWRlIDxzeXMvY29uZi5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1RFUk1JT19ICisjIGluY2x1ZGUgPHRlcm1pby5oPgorI2Vsc2UKKyMgaWYgSEFWRV9URVJNSU9TX0gKKyMgIGluY2x1ZGUgPHRlcm1pb3MuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgSEFWRV9TWVNfU1RSRUFNX0gKKyMgaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1NZU19QVEVNX0gKKyMgaW5jbHVkZSA8c3lzL3B0ZW0uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoc3VuKSAmJiAhZGVmaW5lZChWTVMpICYmICFkZWZpbmVkKE1BQ09TKQorIyBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChzdW4pICYmIGRlZmluZWQoTE9DS1BUWSkgJiYgIWRlZmluZWQoVElPQ0VYQ0wpCisjIGluY2x1ZGUgPHN5cy90dG9sZC5oPgorI2VuZGlmCisKKyNpZmRlZiBJU0MKKyMgaW5jbHVkZSA8c3lzL3R0eS5oPgorIyBpbmNsdWRlIDxzeXMvc2lvY3RsLmg+CisjIGluY2x1ZGUgPHN5cy9wdHkuaD4KKyNlbmRpZgorCisjaWZkZWYgc2dpCisjIGluY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfSU5DTFVERV9IUFVYX1NPVVJDRSkgJiYgIWRlZmluZWQoaHB1eCkKKyMgZGVmaW5lIGhwdXgKKyNlbmRpZgorCisvKgorICogaWYgbm8gUFRZUkFOR0VbMDFdIGlzIGluIHRoZSBjb25maWcgZmlsZSwgd2UgcGljayBhIGRlZmF1bHQKKyAqLworI2lmbmRlZiBQVFlSQU5HRTAKKyMgZGVmaW5lIFBUWVJBTkdFMCAicXBycyIKKyNlbmRpZgorI2lmbmRlZiBQVFlSQU5HRTEKKyMgZGVmaW5lIFBUWVJBTkdFMSAiMDEyMzQ1Njc4OWFiY2RlZiIKKyNlbmRpZgorCisvKiBTVlI0IHBzZXVkbyB0dHlzIGRvbid0IHNlZW0gdG8gd29yayB3aXRoIFNDTy01ICovCisjaWZkZWYgTV9VTklYCisjIHVuZGVmIEhBVkVfU1ZSNF9QVFlTCisjZW5kaWYKKworc3RhdGljIHZvaWQgaW5pdG1hc3RlciBfX0FSR1MoKGludCkpOworCisvKgorICogIE9wZW4gYWxsIHB0eXMgd2l0aCBPX05PQ1RUWSwganVzdCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlCisgKiAgKFJJU0NvcyBtaXBzIGJyZWFrcyBvdGhlcndpc2UpCisgKi8KKyNpZm5kZWYgT19OT0NUVFkKKyMgZGVmaW5lIE9fTk9DVFRZIDAKKyNlbmRpZgorCisgICAgc3RhdGljIHZvaWQKK2luaXRtYXN0ZXIoZikKKyAgICBpbnQgZjsKK3sKKyNpZm5kZWYgVk1TCisjIGlmZGVmIFBPU0lYCisgICAgdGNmbHVzaChmLCBUQ0lPRkxVU0gpOworIyBlbHNlCisjICBpZmRlZiBUSU9DRkxVU0gKKyAgICAodm9pZClpb2N0bChmLCBUSU9DRkxVU0gsIChjaGFyICopIDApOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgTE9DS1BUWQorICAgICh2b2lkKWlvY3RsKGYsIFRJT0NFWENMLCAoY2hhciAqKSAwKTsKKyMgZW5kaWYKKyNlbmRpZgorfQorCisvKgorICogVGhpcyBjYXVzZXMgYSBoYW5nIG9uIHNvbWUgc3lzdGVtcywgYnV0IGlzIHJlcXVpcmVkIGZvciBhIHByb3Blcmx5IHdvcmtpbmcKKyAqIHB0eSBvbiBvdGhlcnMuICBOZWVkcyB0byBiZSB0dW5lZC4uLgorICovCisgICAgaW50CitTZXR1cFNsYXZlUFRZKGZkKQorICAgIGludCBmZDsKK3sKKyAgICBpZiAoZmQgPCAwKQorCXJldHVybiAwOworI2lmIGRlZmluZWQoSV9QVVNIKSAmJiBkZWZpbmVkKEhBVkVfU1ZSNF9QVFlTKSAmJiAhZGVmaW5lZChzZ2kpICYmICFkZWZpbmVkKGxpbnV4KSAmJiAhZGVmaW5lZChfX29zZl9fKSAmJiAhZGVmaW5lZChNX1VOSVgpCisjIGlmIGRlZmluZWQoSEFWRV9TWVNfUFRFTV9IKSB8fCBkZWZpbmVkKGhwdXgpCisgICAgaWYgKGlvY3RsKGZkLCBJX1BVU0gsICJwdGVtIikgIT0gMCkKKwlyZXR1cm4gLTE7CisjIGVuZGlmCisgICAgaWYgKGlvY3RsKGZkLCBJX1BVU0gsICJsZHRlcm0iKSAhPSAwKQorCXJldHVybiAtMTsKKyMgaWZkZWYgc3VuCisgICAgaWYgKGlvY3RsKGZkLCBJX1BVU0gsICJ0dGNvbXBhdCIpICE9IDApCisJcmV0dXJuIC0xOworIyBlbmRpZgorI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKKworI2lmIGRlZmluZWQoT1NYKSAmJiAhZGVmaW5lZChQVFlfRE9ORSkKKyNkZWZpbmUgUFRZX0RPTkUKKyAgICBpbnQKK09wZW5QVFkodHR5bikKKyAgICBjaGFyICoqdHR5bjsKK3sKKyAgICBpbnQJCWY7CisgICAgc3RhdGljIGNoYXIgVHR5TmFtZVszMl07CisKKyAgICBpZiAoKGYgPSBvcGVuX2NvbnRyb2xsaW5nX3B0eShUdHlOYW1lKSkgPCAwKQorCXJldHVybiAtMTsKKyAgICBpbml0bWFzdGVyKGYpOworICAgICp0dHluID0gVHR5TmFtZTsKKyAgICByZXR1cm4gZjsKK30KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoc2VxdWVudCkgfHwgZGVmaW5lZChfU0VRVUVOVF8pKSAmJiBkZWZpbmVkKEhBVkVfR0VUUFNFVURPVFRZKSBcCisJJiYgIWRlZmluZWQoUFRZX0RPTkUpCisjZGVmaW5lIFBUWV9ET05FCisgICAgaW50CitPcGVuUFRZKHR0eW4pCisgICAgY2hhciAqKnR0eW47Cit7CisgICAgY2hhcgkqbSwgKnM7CisgICAgaW50CQlmOworICAgIC8qIHVzZWQgZm9yIG9wZW5pbmcgYSBuZXcgcHR5LXBhaXI6ICovCisgICAgc3RhdGljIGNoYXIgUHR5TmFtZVszMl07CisgICAgc3RhdGljIGNoYXIgVHR5TmFtZVszMl07CisKKyAgICBpZiAoKGYgPSBnZXRwc2V1ZG90dHkoJnMsICZtKSkgPCAwKQorCXJldHVybiAtMTsKKyNpZmRlZiBfU0VRVUVOVF8KKyAgICBmdmhhbmd1cChzKTsKKyNlbmRpZgorICAgIHN0cm5jcHkoUHR5TmFtZSwgbSwgc2l6ZW9mKFB0eU5hbWUpKTsKKyAgICBzdHJuY3B5KFR0eU5hbWUsIHMsIHNpemVvZihUdHlOYW1lKSk7CisgICAgaW5pdG1hc3RlcihmKTsKKyAgICAqdHR5biA9IFR0eU5hbWU7CisgICAgcmV0dXJuIGY7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19zZ2kpICYmICFkZWZpbmVkKFBUWV9ET05FKQorI2RlZmluZSBQVFlfRE9ORQorICAgIGludAorT3BlblBUWSh0dHluKQorICAgIGNoYXIgKip0dHluOworeworICAgIGludCBmOworICAgIGNoYXIgKm5hbWU7CisgICAgUkVUU0lHVFlQRSAoKnNpZ2NsZClfX0FSR1MoU0lHUFJPVE9BUkcpOworCisgICAgLyoKKyAgICAgKiBTSUdDSExEIHNldCB0byBTSUdfREZMIGZvciBfZ2V0cHR5KCkgYmVjYXVzZSBpdCBtYXkgZm9yaygpIGFuZAorICAgICAqIGV4ZWMoKSAvdXNyL2FkbS9ta3B0cworICAgICAqLworICAgIHNpZ2NsZCA9IHNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKKyAgICBuYW1lID0gX2dldHB0eSgmZiwgT19SRFdSIHwgT19OT05CTE9DSyB8IE9fRVhUUkEsIDA2MDAsIDApOworICAgIHNpZ25hbChTSUdDSExELCBzaWdjbGQpOworCisgICAgaWYgKG5hbWUgPT0gMCkKKwlyZXR1cm4gLTE7CisgICAgaW5pdG1hc3RlcihmKTsKKyAgICAqdHR5biA9IG5hbWU7CisgICAgcmV0dXJuIGY7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUlQUykgJiYgZGVmaW5lZChIQVZFX0RFVl9QVEMpICYmICFkZWZpbmVkKFBUWV9ET05FKQorI2RlZmluZSBQVFlfRE9ORQorICAgIGludAorT3BlblBUWSh0dHluKQorICAgIGNoYXIgKip0dHluOworeworICAgIGludAkJZjsKKyAgICBzdHJ1Y3Qgc3RhdCBidWY7CisgICAgLyogdXNlZCBmb3Igb3BlbmluZyBhIG5ldyBwdHktcGFpcjogKi8KKyAgICBzdGF0aWMgY2hhciBUdHlOYW1lWzMyXTsKKworICAgIGlmICgoZiA9IG9wZW4oIi9kZXYvcHRjIiwgT19SRFdSIHwgT19OT0NUVFkgfCBPX05PTkJMT0NLIHwgT19FWFRSQSwgMCkpIDwgMCkKKwlyZXR1cm4gLTE7CisgICAgaWYgKG1jaF9mc3RhdChmLCAmYnVmKSA8IDApCisgICAgeworCWNsb3NlKGYpOworCXJldHVybiAtMTsKKyAgICB9CisgICAgc3ByaW50ZihUdHlOYW1lLCAiL2Rldi90dHlxJWQiLCBtaW5vcihidWYuc3RfcmRldikpOworICAgIGluaXRtYXN0ZXIoZik7CisgICAgKnR0eW4gPSBUdHlOYW1lOworICAgIHJldHVybiBmOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfU1ZSNF9QVFlTKSAmJiAhZGVmaW5lZChQVFlfRE9ORSkgJiYgIWRlZmluZWQoaHB1eCkKKworLyogTk9URTogRXZlbiB0aG91Z2ggSFBVWCBjYW4gaGF2ZSAvZGV2L3B0bXgsIHRoZSBjb2RlIGJlbG93IGRvZXNuJ3Qgd29yayEgKi8KKyNkZWZpbmUgUFRZX0RPTkUKKyAgICBpbnQKK09wZW5QVFkodHR5bikKKyAgICBjaGFyICoqdHR5bjsKK3sKKyAgICBpbnQJCWY7CisgICAgY2hhcgkqbSwgKnB0c25hbWUoKTsKKyAgICBpbnQgdW5sb2NrcHQgX19BUkdTKChpbnQpKSwgZ3JhbnRwdCBfX0FSR1MoKGludCkpOworICAgIFJFVFNJR1RZUEUgKCpzaWdjbGQpX19BUkdTKFNJR1BST1RPQVJHKTsKKyAgICAvKiB1c2VkIGZvciBvcGVuaW5nIGEgbmV3IHB0eS1wYWlyOiAqLworICAgIHN0YXRpYyBjaGFyIFR0eU5hbWVbMzJdOworCisgICAgaWYgKChmID0gb3BlbigiL2Rldi9wdG14IiwgT19SRFdSIHwgT19OT0NUVFkgfCBPX0VYVFJBLCAwKSkgPT0gLTEpCisJcmV0dXJuIC0xOworCisgICAgLyoKKyAgICAgKiBTSUdDSExEIHNldCB0byBTSUdfREZMIGZvciBncmFudHB0KCkgYmVjYXVzZSBpdCBmb3JrKClzIGFuZAorICAgICAqIGV4ZWMoKXMgcHRfY2htb2QKKyAgICAgKi8KKyAgICBzaWdjbGQgPSBzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7CisgICAgaWYgKChtID0gcHRzbmFtZShmKSkgPT0gTlVMTCB8fCBncmFudHB0KGYpIHx8IHVubG9ja3B0KGYpKQorICAgIHsKKwlzaWduYWwoU0lHQ0hMRCwgc2lnY2xkKTsKKwljbG9zZShmKTsKKwlyZXR1cm4gLTE7CisgICAgfQorICAgIHNpZ25hbChTSUdDSExELCBzaWdjbGQpOworICAgIHN0cm5jcHkoVHR5TmFtZSwgbSwgc2l6ZW9mKFR0eU5hbWUpKTsKKyAgICBpbml0bWFzdGVyKGYpOworICAgICp0dHluID0gVHR5TmFtZTsKKyAgICByZXR1cm4gZjsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfQUlYKSAmJiBkZWZpbmVkKEhBVkVfREVWX1BUQykgJiYgIWRlZmluZWQoUFRZX0RPTkUpCisjZGVmaW5lIFBUWV9ET05FCisKKyNpZmRlZiBfSUJNUjIKK2ludCBhaXhoYWNrID0gLTE7CisjZW5kaWYKKworICAgIGludAorT3BlblBUWSh0dHluKQorICAgIGNoYXIgKip0dHluOworeworICAgIGludAkJZjsKKyAgICAvKiB1c2VkIGZvciBvcGVuaW5nIGEgbmV3IHB0eS1wYWlyOiAqLworICAgIHN0YXRpYyBjaGFyIFR0eU5hbWVbMzJdOworCisgICAgLyogYSBkdW1iIGxvb2tpbmcgbG9vcCByZXBsYWNlZCBieSBteWNyb2Z0cyBjb2RlOiAqLworICAgIGlmICgoZiA9IG9wZW4oIi9kZXYvcHRjIiwgT19SRFdSIHwgT19OT0NUVFkgfCBPX0VYVFJBKSkgPCAwKQorCXJldHVybiAtMTsKKyAgICBzdHJuY3B5KFR0eU5hbWUsIHR0eW5hbWUoZiksIHNpemVvZihUdHlOYW1lKSk7CisgICAgaWYgKGdldGV1aWQoKSAmJiBtY2hfYWNjZXNzKFR0eU5hbWUsIFJfT0sgfCBXX09LKSkKKyAgICB7CisJY2xvc2UoZik7CisJcmV0dXJuIC0xOworICAgIH0KKyAgICBpbml0bWFzdGVyKGYpOworIyBpZmRlZiBfSUJNUjIKKyAgICBpZiAoYWl4aGFjayA+PSAwKQorCWNsb3NlKGFpeGhhY2spOworICAgIGlmICgoYWl4aGFjayA9IG9wZW4oVHR5TmFtZSwgT19SRFdSIHwgT19OT0NUVFkgfCBPX0VYVFJBLCAwKSkgPCAwKQorICAgIHsKKwljbG9zZShmKTsKKwlyZXR1cm4gLTE7CisgICAgfQorIyBlbmRpZgorICAgICp0dHluID0gVHR5TmFtZTsKKyAgICByZXR1cm4gZjsKK30KKyNlbmRpZgorCisjaWZuZGVmIFBUWV9ET05FCisKKyMgaWZkZWYgaHB1eAorc3RhdGljIGNoYXIgUHR5UHJvdG9bXSA9ICIvZGV2L3B0eW0vcHR5WFkiOworc3RhdGljIGNoYXIgVHR5UHJvdG9bXSA9ICIvZGV2L3B0eS90dHlYWSI7CisjIGVsc2UKKyMgIGlmZGVmIF9fQkVPU19fCitzdGF0aWMgY2hhciBQdHlQcm90b1tdID0gIi9kZXYvcHQvWFkiOworc3RhdGljIGNoYXIgVHR5UHJvdG9bXSA9ICIvZGV2L3R0L1hZIjsKKyMgIGVsc2UKK3N0YXRpYyBjaGFyIFB0eVByb3RvW10gPSAiL2Rldi9wdHlYWSI7CitzdGF0aWMgY2hhciBUdHlQcm90b1tdID0gIi9kZXYvdHR5WFkiOworIyAgZW5kaWYKKyMgZW5kaWYKKworICAgIGludAorT3BlblBUWSh0dHluKQorICAgIGNoYXIgKip0dHluOworeworICAgIGNoYXIJKnAsICpxLCAqbCwgKmQ7CisgICAgaW50CQlmOworICAgIC8qIHVzZWQgZm9yIG9wZW5pbmcgYSBuZXcgcHR5LXBhaXI6ICovCisgICAgc3RhdGljIGNoYXIgUHR5TmFtZVszMl07CisgICAgc3RhdGljIGNoYXIgVHR5TmFtZVszMl07CisKKyAgICBzdHJjcHkoUHR5TmFtZSwgUHR5UHJvdG8pOworICAgIHN0cmNweShUdHlOYW1lLCBUdHlQcm90byk7CisgICAgZm9yIChwID0gUHR5TmFtZTsgKnAgIT0gJ1gnOyBwKyspCisJOworICAgIGZvciAocSA9IFR0eU5hbWU7ICpxICE9ICdYJzsgcSsrKQorCTsKKyAgICBmb3IgKGwgPSBQVFlSQU5HRTA7ICgqcCA9ICpsKSAhPSAnXDAnOyBsKyspCisgICAgeworCWZvciAoZCA9IFBUWVJBTkdFMTsgKHBbMV0gPSAqZCkgIT0gJ1wwJzsgZCsrKQorCXsKKyNpZiAhZGVmaW5lZChNQUNPUykgfHwgZGVmaW5lZChVU0VfQ0FSQk9OSVpFRCkKKwkgICAgaWYgKChmID0gb3BlbihQdHlOYW1lLCBPX1JEV1IgfCBPX05PQ1RUWSB8IE9fRVhUUkEsIDApKSA9PSAtMSkKKyNlbHNlCisJICAgIGlmICgoZiA9IG9wZW4oUHR5TmFtZSwgT19SRFdSIHwgT19OT0NUVFkgfCBPX0VYVFJBKSkgPT0gLTEpCisjZW5kaWYKKwkJY29udGludWU7CisJICAgIHFbMF0gPSAqbDsKKwkgICAgcVsxXSA9ICpkOworI2lmbmRlZiBNQUNPUworCSAgICBpZiAoZ2V0ZXVpZCgpICYmIG1jaF9hY2Nlc3MoVHR5TmFtZSwgUl9PSyB8IFdfT0spKQorCSAgICB7CisJCWNsb3NlKGYpOworCQljb250aW51ZTsKKwkgICAgfQorI2VuZGlmCisjaWYgZGVmaW5lZChzdW4pICYmIGRlZmluZWQoVElPQ0dQR1JQKSAmJiAhZGVmaW5lZChTVU5PUzMpCisJICAgIC8qIEhhY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHNsYXZlIHNpZGUgb2YgdGhlIHB0eSBpcworCSAgICAgKiB1bnVzZWQuIE1heSBub3Qgd29yayBpbiBhbnl0aGluZyBvdGhlciB0aGFuIFN1bk9TNC4xCisJICAgICAqLworCSAgICB7CisJCWludCBwZ3JwOworCisJCS8qIHRjZ2V0cGdycCBkb2VzIG5vdCB3b3JrICh1c2VzIFRJT0NHRVRQR1JQKSEgKi8KKwkJaWYgKGlvY3RsKGYsIFRJT0NHUEdSUCwgKGNoYXIgKikmcGdycCkgIT0gLTEgfHwgZXJybm8gIT0gRUlPKQorCQl7CisJCSAgICBjbG9zZShmKTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKyNlbmRpZgorCSAgICBpbml0bWFzdGVyKGYpOworCSAgICAqdHR5biA9IFR0eU5hbWU7CisJICAgIHJldHVybiBmOworCX0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvcXVpY2tmaXguYyBiL3NyYy9xdWlja2ZpeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYmJjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcXVpY2tmaXguYwpAQCAtMCwwICsxLDIyMzIgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIHF1aWNrZml4LmM6IGZ1bmN0aW9ucyBmb3IgcXVpY2tmaXggbW9kZSwgdXNpbmcgYSBmaWxlIHdpdGggZXJyb3IgbWVzc2FnZXMKKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKyNpZiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpIHx8IGRlZmluZWQoUFJPVE8pCisKK3N0cnVjdCBkaXJfc3RhY2tfVAoreworICAgIHN0cnVjdCBkaXJfc3RhY2tfVAkqbmV4dDsKKyAgICBjaGFyX3UJCSpkaXJuYW1lOworfTsKKworc3RhdGljIHN0cnVjdCBkaXJfc3RhY2tfVCAgICpkaXJfc3RhY2sgPSBOVUxMOworCisvKgorICogZm9yIGVhY2ggZXJyb3IgdGhlIG5leHQgc3RydWN0IGlzIGFsbG9jYXRlZCBhbmQgbGlua2VkIGluIGEgbGlzdAorICovCitzdHJ1Y3QgcWZfbGluZQoreworICAgIHN0cnVjdCBxZl9saW5lICAqcWZfbmV4dDsJLyogcG9pbnRlciB0byBuZXh0IGVycm9yIGluIHRoZSBsaXN0ICovCisgICAgc3RydWN0IHFmX2xpbmUgICpxZl9wcmV2OwkvKiBwb2ludGVyIHRvIHByZXZpb3VzIGVycm9yIGluIHRoZSBsaXN0ICovCisgICAgbGluZW5yX1QJICAgICBxZl9sbnVtOwkvKiBsaW5lIG51bWJlciB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQgKi8KKyAgICBpbnQJCSAgICAgcWZfZm51bTsJLyogZmlsZSBudW1iZXIgZm9yIHRoZSBsaW5lICovCisgICAgaW50CQkgICAgIHFmX2NvbDsJLyogY29sdW1uIHdoZXJlIHRoZSBlcnJvciBvY2N1cnJlZCAqLworICAgIGludAkJICAgICBxZl9ucjsJLyogZXJyb3IgbnVtYmVyICovCisgICAgY2hhcl91CSAgICAqcWZfdGV4dDsJLyogZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yICovCisgICAgY2hhcl91CSAgICAgcWZfdmlydF9jb2w7IC8qIHNldCB0byBUUlVFIGlmIHFmX2NvbCBpcyBzY3JlZW4gY29sdW1uICovCisgICAgY2hhcl91CSAgICAgcWZfY2xlYXJlZDsvKiBzZXQgdG8gVFJVRSBpZiBsaW5lIGhhcyBiZWVuIGRlbGV0ZWQgKi8KKyAgICBjaGFyX3UJICAgICBxZl90eXBlOwkvKiB0eXBlIG9mIHRoZSBlcnJvciAobW9zdGx5ICdFJyk7IDEgZm9yCisJCQkJICAgOmhlbHBncmVwICovCisgICAgY2hhcl91CSAgICAgcWZfdmFsaWQ7CS8qIHZhbGlkIGVycm9yIG1lc3NhZ2UgZGV0ZWN0ZWQgKi8KK307CisKKy8qCisgKiBUaGVyZSBpcyBhIHN0YWNrIG9mIGVycm9yIGxpc3RzLgorICovCisjZGVmaW5lIExJU1RDT1VOVCAgIDEwCisKK3N0cnVjdCBxZl9saXN0Cit7CisgICAgc3RydWN0IHFmX2xpbmUgKnFmX3N0YXJ0OwkvKiBwb2ludGVyIHRvIHRoZSBmaXJzdCBlcnJvciAqLworICAgIHN0cnVjdCBxZl9saW5lICpxZl9wdHI7CS8qIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZXJyb3IgKi8KKyAgICBpbnQgIHFmX2NvdW50OwkJLyogbnVtYmVyIG9mIGVycm9ycyAoMCBtZWFucyBubyBlcnJvciBsaXN0KSAqLworICAgIGludCAgcWZfaW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIHRoZSBlcnJvciBsaXN0ICovCisgICAgaW50ICBxZl9ub25ldmFsaWQ7CQkvKiBUUlVFIGlmIG5vdCBhIHNpbmdsZSB2YWxpZCBlbnRyeSBmb3VuZCAqLworfSBxZl9saXN0c1tMSVNUQ09VTlRdOworCitzdGF0aWMgaW50CXFmX2N1cmxpc3QgPSAwOwkvKiBjdXJyZW50IGVycm9yIGxpc3QgKi8KK3N0YXRpYyBpbnQJcWZfbGlzdGNvdW50ID0gMDsgICAvKiBjdXJyZW50IG51bWJlciBvZiBsaXN0cyAqLworCisjZGVmaW5lIEZNVF9QQVRURVJOUyA5CQkvKiBtYXhpbXVtIG51bWJlciBvZiAlIHJlY29nbml6ZWQgKi8KKworLyoKKyAqIFN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgdGhlIGluZm8gb2Ygb25lIHBhcnQgb2YgJ2Vycm9yZm9ybWF0JworICovCitzdHJ1Y3QgZWZvcm1hdAoreworICAgIHJlZ3Byb2dfVAkgICAgKnByb2c7CS8qIHByZS1mb3JtYXR0ZWQgcGFydCBvZiAnZXJyb3Jmb3JtYXQnICovCisgICAgc3RydWN0IGVmb3JtYXQgICpuZXh0OwkvKiBwb2ludGVyIHRvIG5leHQgKE5VTEwgaWYgbGFzdCkgKi8KKyAgICBjaGFyX3UJICAgIGFkZHJbRk1UX1BBVFRFUk5TXTsgLyogaW5kaWNlcyBvZiB1c2VkICUgcGF0dGVybnMgKi8KKyAgICBjaGFyX3UJICAgIHByZWZpeDsJLyogcHJlZml4IG9mIHRoaXMgZm9ybWF0IGxpbmU6ICovCisJCQkJLyogICAnRCcgZW50ZXIgZGlyZWN0b3J5ICovCisJCQkJLyogICAnWCcgbGVhdmUgZGlyZWN0b3J5ICovCisJCQkJLyogICAnQScgc3RhcnQgb2YgbXVsdGktbGluZSBtZXNzYWdlICovCisJCQkJLyogICAnRScgZXJyb3IgbWVzc2FnZSAqLworCQkJCS8qICAgJ1cnIHdhcm5pbmcgbWVzc2FnZSAqLworCQkJCS8qICAgJ0knIGluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLworCQkJCS8qICAgJ0MnIGNvbnRpbnVhdGlvbiBsaW5lICovCisJCQkJLyogICAnWicgZW5kIG9mIG11bHRpLWxpbmUgbWVzc2FnZSAqLworCQkJCS8qICAgJ0cnIGdlbmVyYWwsIHVuc3BlY2lmaWMgbWVzc2FnZSAqLworCQkJCS8qICAgJ1AnIHB1c2ggZmlsZSAocGFydGlhbCkgbWVzc2FnZSAqLworCQkJCS8qICAgJ1EnIHBvcC9xdWl0IGZpbGUgKHBhcnRpYWwpIG1lc3NhZ2UgKi8KKwkJCQkvKiAgICdPJyBvdmVycmVhZCAocGFydGlhbCkgbWVzc2FnZSAqLworICAgIGNoYXJfdQkgICAgZmxhZ3M7CS8qIGFkZGl0aW9uYWwgZmxhZ3MgZ2l2ZW4gaW4gcHJlZml4ICovCisJCQkJLyogICAnLScgZG8gbm90IGluY2x1ZGUgdGhpcyBsaW5lICovCit9OworCitzdGF0aWMgdm9pZAlxZl9uZXdfbGlzdCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQJcWZfYWRkX2VudHJ5IF9fQVJHUygoc3RydWN0IHFmX2xpbmUgKipwcmV2cCwgY2hhcl91ICpkaXIsIGNoYXJfdSAqZm5hbWUsIGNoYXJfdSAqbWVzZywgbG9uZyBsbnVtLCBpbnQgY29sLCBpbnQgdmlydF9jb2wsIGludCBuciwgaW50IHR5cGUsIGludCB2YWxpZCkpOworc3RhdGljIHZvaWQJcWZfbXNnIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQJcWZfZnJlZSBfX0FSR1MoKGludCBpZHgpKTsKK3N0YXRpYyBjaGFyX3UJKnFmX3R5cGVzIF9fQVJHUygoaW50LCBpbnQpKTsKK3N0YXRpYyBpbnQJcWZfZ2V0X2ZudW0gX19BUkdTKChjaGFyX3UgKiwgY2hhcl91ICopKTsKK3N0YXRpYyBjaGFyX3UJKnFmX3B1c2hfZGlyIF9fQVJHUygoY2hhcl91ICosIHN0cnVjdCBkaXJfc3RhY2tfVCAqKikpOworc3RhdGljIGNoYXJfdQkqcWZfcG9wX2RpciBfX0FSR1MoKHN0cnVjdCBkaXJfc3RhY2tfVCAqKikpOworc3RhdGljIGNoYXJfdQkqcWZfZ3Vlc3NfZmlsZXBhdGggX19BUkdTKChjaGFyX3UgKikpOworc3RhdGljIHZvaWQJcWZfZm10X3RleHQgX19BUkdTKChjaGFyX3UgKnRleHQsIGNoYXJfdSAqYnVmLCBpbnQgYnVmc2l6ZSkpOworc3RhdGljIHZvaWQJcWZfY2xlYW5fZGlyX3N0YWNrIF9fQVJHUygoc3RydWN0IGRpcl9zdGFja19UICoqKSk7CisjaWZkZWYgRkVBVF9XSU5ET1dTCitzdGF0aWMgaW50CXFmX3dpbl9wb3NfdXBkYXRlIF9fQVJHUygoaW50IG9sZF9xZl9pbmRleCkpOworc3RhdGljIGJ1Zl9UCSpxZl9maW5kX2J1ZiBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkCXFmX3VwZGF0ZV9idWZmZXIgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZAlxZl9maWxsX2J1ZmZlciBfX0FSR1MoKHZvaWQpKTsKKyNlbmRpZgorc3RhdGljIGNoYXJfdQkqZ2V0X21lZl9uYW1lIF9fQVJHUygodm9pZCkpOworCisvKgorICogUmVhZCB0aGUgZXJyb3JmaWxlIGludG8gbWVtb3J5LCBsaW5lIGJ5IGxpbmUsIGJ1aWxkaW5nIHRoZSBlcnJvciBsaXN0LgorICogUmV0dXJuIC0xIGZvciBlcnJvciwgbnVtYmVyIG9mIGVycm9ycyBmb3Igc3VjY2Vzcy4KKyAqLworICAgIGludAorcWZfaW5pdChlZmlsZSwgZXJyb3Jmb3JtYXQsIG5ld2xpc3QpCisgICAgY2hhcl91CSAgICAqZWZpbGU7CisgICAgY2hhcl91CSAgICAqZXJyb3Jmb3JtYXQ7CisgICAgaW50CQkgICAgbmV3bGlzdDsJCS8qIFRSVUU6IHN0YXJ0IGEgbmV3IGVycm9yIGxpc3QgKi8KK3sKKyAgICBjaGFyX3UJICAgICpuYW1lYnVmOworICAgIGNoYXJfdQkgICAgKmVycm1zZzsKKyAgICBjaGFyX3UJICAgICpmbXRzdHIgPSBOVUxMOworICAgIGludAkJICAgIGNvbCA9IDA7CisgICAgY2hhcl91CSAgICB1c2VfdmlydF9jb2wgPSBGQUxTRTsKKyAgICBpbnQJCSAgICB0eXBlID0gMDsKKyAgICBpbnQJCSAgICB2YWxpZDsKKyAgICBsb25nCSAgICBsbnVtID0gMEw7CisgICAgaW50CQkgICAgZW5yID0gMDsKKyAgICBGSUxFCSAgICAqZmQ7CisgICAgc3RydWN0IHFmX2xpbmUgICpxZnByZXYgPSBOVUxMOwkvKiBpbml0IHRvIG1ha2UgU0FTQyBzaHV0IHVwICovCisgICAgY2hhcl91CSAgICAqZWZtcDsKKyAgICBzdHJ1Y3QgZWZvcm1hdCAgKmZtdF9maXJzdCA9IE5VTEw7CisgICAgc3RydWN0IGVmb3JtYXQgICpmbXRfbGFzdCA9IE5VTEw7CisgICAgc3RydWN0IGVmb3JtYXQgICpmbXRfcHRyOworICAgIGNoYXJfdQkgICAgKmVmbTsKKyAgICBjaGFyX3UJICAgICpwdHI7CisgICAgY2hhcl91CSAgICAqc3JjcHRyOworICAgIGludAkJICAgIGxlbjsKKyAgICBpbnQJCSAgICBpOworICAgIGludAkJICAgIHJvdW5kOworICAgIGludAkJICAgIGlkeCA9IDA7CisgICAgaW50CQkgICAgbXVsdGlsaW5lID0gRkFMU0U7CisgICAgaW50CQkgICAgbXVsdGlpZ25vcmUgPSBGQUxTRTsKKyAgICBpbnQJCSAgICBtdWx0aXNjYW4gPSBGQUxTRTsKKyAgICBpbnQJCSAgICByZXR2YWwgPSAtMTsJLyogZGVmYXVsdDogcmV0dXJuIGVycm9yIGZsYWcgKi8KKyAgICBjaGFyX3UJICAgICpkaXJlY3RvcnkgPSBOVUxMOworICAgIGNoYXJfdQkgICAgKmN1cnJmaWxlID0gTlVMTDsKKyAgICBjaGFyX3UJICAgICp0YWlsID0gTlVMTDsKKyAgICBzdHJ1Y3QgZGlyX3N0YWNrX1QgICpmaWxlX3N0YWNrID0gTlVMTDsKKyAgICByZWdtYXRjaF9UCSAgICByZWdtYXRjaDsKKyAgICBzdGF0aWMgc3RydWN0IGZtdHBhdHRlcm4KKyAgICB7CisJY2hhcl91CWNvbnZjaGFyOworCWNoYXIJKnBhdHRlcm47CisgICAgfQkJICAgIGZtdF9wYXRbRk1UX1BBVFRFUk5TXSA9CisJCSAgICB7CisJCQl7J2YnLCAiXFxmXFwrIn0sCisJCQl7J24nLCAiXFxkXFwrIn0sCisJCQl7J2wnLCAiXFxkXFwrIn0sCisJCQl7J2MnLCAiXFxkXFwrIn0sCisJCQl7J3QnLCAiLiJ9LAorCQkJeydtJywgIi5cXCsifSwKKwkJCXsncicsICIuKiJ9LAorCQkJeydwJywgIlstIC5dKiJ9LAorCQkJeyd2JywgIlxcZFxcKyJ9CisJCSAgICB9OworCisgICAgaWYgKGVmaWxlID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisKKyAgICBuYW1lYnVmID0gYWxsb2MoQ01EQlVGRlNJWkUgKyAxKTsKKyAgICBlcnJtc2cgPSBhbGxvYyhDTURCVUZGU0laRSArIDEpOworICAgIGlmIChuYW1lYnVmID09IE5VTEwgfHwgZXJybXNnID09IE5VTEwpCisJZ290byBxZl9pbml0X2VuZDsKKworICAgIGlmICgoZmQgPSBtY2hfZm9wZW4oKGNoYXIgKillZmlsZSwgInIiKSkgPT0gTlVMTCkKKyAgICB7CisJRU1TRzIoXyhlX29wZW5lcnJmKSwgZWZpbGUpOworCWdvdG8gcWZfaW5pdF9lbmQ7CisgICAgfQorCisgICAgaWYgKG5ld2xpc3QgfHwgcWZfY3VybGlzdCA9PSBxZl9saXN0Y291bnQpCisJLyogbWFrZSBwbGFjZSBmb3IgYSBuZXcgbGlzdCAqLworCXFmX25ld19saXN0KCk7CisgICAgZWxzZSBpZiAocWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfY291bnQgPiAwKQorCS8qIEFkZGluZyB0byBleGlzdGluZyBsaXN0LCBmaW5kIGxhc3QgZW50cnkuICovCisJZm9yIChxZnByZXYgPSBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9zdGFydDsKKwkJCSAgICBxZnByZXYtPnFmX25leHQgIT0gcWZwcmV2OyBxZnByZXYgPSBxZnByZXYtPnFmX25leHQpCisJICAgIDsKKworLyoKKyAqIEVhY2ggcGFydCBvZiB0aGUgZm9ybWF0IHN0cmluZyBpcyBjb3BpZWQgYW5kIG1vZGlmaWVkIGZyb20gZXJyb3Jmb3JtYXQgdG8KKyAqIHJlZ2V4IHByb2cuICBPbmx5IGEgZmV3ICUgY2hhcmFjdGVycyBhcmUgYWxsb3dlZC4KKyAqLworICAgIC8qIFVzZSB0aGUgbG9jYWwgdmFsdWUgb2YgJ2Vycm9yZm9ybWF0JyBpZiBpdCdzIHNldC4gKi8KKyAgICBpZiAoZXJyb3Jmb3JtYXQgPT0gcF9lZm0gJiYgKmN1cmJ1Zi0+Yl9wX2VmbSAhPSBOVUwpCisJZWZtID0gY3VyYnVmLT5iX3BfZWZtOworICAgIGVsc2UKKwllZm0gPSBlcnJvcmZvcm1hdDsKKyAgICAvKgorICAgICAqIEdldCBzb21lIHNwYWNlIHRvIG1vZGlmeSB0aGUgZm9ybWF0IHN0cmluZyBpbnRvLgorICAgICAqLworICAgIGkgPSAoRk1UX1BBVFRFUk5TICogMykgKyAoKGludClTVFJMRU4oZWZtKSA8PCAyKTsKKyAgICBmb3IgKHJvdW5kID0gRk1UX1BBVFRFUk5TOyByb3VuZCA+IDA7ICkKKwlpICs9IChpbnQpU1RSTEVOKGZtdF9wYXRbLS1yb3VuZF0ucGF0dGVybik7CisjaWZkZWYgQ09MT05fSU5fRklMRU5BTUUKKyAgICBpICs9IDEyOyAvKiAiJWYiIGNhbiBiZWNvbWUgdHdlbHZlIGNoYXJzIGxvbmdlciAqLworI2Vsc2UKKyAgICBpICs9IDI7IC8qICIlZiIgY2FuIGJlY29tZSB0d28gY2hhcnMgbG9uZ2VyICovCisjZW5kaWYKKyAgICBpZiAoKGZtdHN0ciA9IGFsbG9jKGkpKSA9PSBOVUxMKQorCWdvdG8gZXJyb3IyOworCisgICAgd2hpbGUgKGVmbVswXSkKKyAgICB7CisJLyoKKwkgKiBBbGxvY2F0ZSBhIG5ldyBlZm9ybWF0IHN0cnVjdHVyZSBhbmQgcHV0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QKKwkgKi8KKwlmbXRfcHRyID0gKHN0cnVjdCBlZm9ybWF0ICopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihzdHJ1Y3QgZWZvcm1hdCkpOworCWlmIChmbXRfcHRyID09IE5VTEwpCisJICAgIGdvdG8gZXJyb3IyOworCWlmIChmbXRfZmlyc3QgPT0gTlVMTCkJICAgIC8qIGZpcnN0IG9uZSAqLworCSAgICBmbXRfZmlyc3QgPSBmbXRfcHRyOworCWVsc2UKKwkgICAgZm10X2xhc3QtPm5leHQgPSBmbXRfcHRyOworCWZtdF9sYXN0ID0gZm10X3B0cjsKKwlmbXRfcHRyLT5wcmVmaXggPSBOVUw7CisJZm10X3B0ci0+ZmxhZ3MgPSBOVUw7CisJZm10X3B0ci0+bmV4dCA9IE5VTEw7CisJZm10X3B0ci0+cHJvZyA9IE5VTEw7CisJZm9yIChyb3VuZCA9IEZNVF9QQVRURVJOUzsgcm91bmQgPiAwOyApCisJICAgIGZtdF9wdHItPmFkZHJbLS1yb3VuZF0gPSBOVUw7CisJLyogcm91bmQgaXMgMCBub3cgKi8KKworCS8qCisJICogSXNvbGF0ZSBvbmUgcGFydCBpbiB0aGUgJ2Vycm9yZm9ybWF0JyBvcHRpb24KKwkgKi8KKwlmb3IgKGxlbiA9IDA7IGVmbVtsZW5dICE9IE5VTCAmJiBlZm1bbGVuXSAhPSAnLCc7ICsrbGVuKQorCSAgICBpZiAoZWZtW2xlbl0gPT0gJ1xcJyAmJiBlZm1bbGVuICsgMV0gIT0gTlVMKQorCQkrK2xlbjsKKworCS8qCisJICogQnVpbGQgcmVnZXhwIHBhdHRlcm4gZnJvbSBjdXJyZW50ICdlcnJvcmZvcm1hdCcgb3B0aW9uCisJICovCisJcHRyID0gZm10c3RyOworCSpwdHIrKyA9ICdeJzsKKwlmb3IgKGVmbXAgPSBlZm07IGVmbXAgPCBlZm0gKyBsZW47ICsrZWZtcCkKKwl7CisJICAgIGlmICgqZWZtcCA9PSAnJScpCisJICAgIHsKKwkJKytlZm1wOworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEZNVF9QQVRURVJOUzsgKytpZHgpCisJCSAgICBpZiAoZm10X3BhdFtpZHhdLmNvbnZjaGFyID09ICplZm1wKQorCQkJYnJlYWs7CisJCWlmIChpZHggPCBGTVRfUEFUVEVSTlMpCisJCXsKKwkJICAgIGlmIChmbXRfcHRyLT5hZGRyW2lkeF0pCisJCSAgICB7CisJCQlzcHJpbnRmKChjaGFyICopZXJybXNnLAorCQkJCV8oIkUzNzI6IFRvbyBtYW55ICUlJWMgaW4gZm9ybWF0IHN0cmluZyIpLCAqZWZtcCk7CisJCQlFTVNHKGVycm1zZyk7CisJCQlnb3RvIGVycm9yMjsKKwkJICAgIH0KKwkJICAgIGlmICgoaWR4CisJCQkJJiYgaWR4IDwgNgorCQkJCSYmIHZpbV9zdHJjaHIoKGNoYXJfdSAqKSJEWE9QUSIsCisJCQkJCQkgICAgIGZtdF9wdHItPnByZWZpeCkgIT0gTlVMTCkKKwkJCSAgICB8fCAoaWR4ID09IDYKKwkJCQkmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikiT1BRIiwKKwkJCQkJCSAgICBmbXRfcHRyLT5wcmVmaXgpID09IE5VTEwpKQorCQkgICAgeworCQkJc3ByaW50ZigoY2hhciAqKWVycm1zZywKKwkJCQlfKCJFMzczOiBVbmV4cGVjdGVkICUlJWMgaW4gZm9ybWF0IHN0cmluZyIpLCAqZWZtcCk7CisJCQlFTVNHKGVycm1zZyk7CisJCQlnb3RvIGVycm9yMjsKKwkJICAgIH0KKwkJICAgIGZtdF9wdHItPmFkZHJbaWR4XSA9IChjaGFyX3UpKytyb3VuZDsKKwkJICAgICpwdHIrKyA9ICdcXCc7CisJCSAgICAqcHRyKysgPSAnKCc7CisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisJCSAgICBpZiAoKmVmbXAgPT0gJ2YnKQorCQkgICAgeworCQkJLyogQWxzbyBtYXRjaCAiYzoiIGluIHRoZSBmaWxlIG5hbWUsIGV2ZW4gd2hlbgorCQkJICogY2hlY2tpbmcgZm9yIGEgY29sb24gbmV4dDogIiVmOiIuCisJCQkgKiAiXCUoXGE6XClcPSIgKi8KKwkJCVNUUkNQWShwdHIsICJcXCUoXFxhOlxcKVxcPSIpOworCQkJcHRyICs9IDEwOworCQkgICAgfQorI2VuZGlmCisJCSAgICBpZiAoKmVmbXAgPT0gJ2YnICYmIGVmbXBbMV0gIT0gTlVMCisJCQkJCSAmJiBlZm1wWzFdICE9ICdcXCcgJiYgZWZtcFsxXSAhPSAnJScpCisJCSAgICB7CisJCQkvKiBBIGZpbGUgbmFtZSBtYXkgY29udGFpbiBzcGFjZXMsIGJ1dCB0aGlzIGlzbid0IGluCisJCQkgKiAiXGYiLiAgdXNlICJbXnhdXCsiIGluc3RlYWQgKHggaXMgbmV4dCBjaGFyYWN0ZXIpICovCisJCQkqcHRyKysgPSAnWyc7CisJCQkqcHRyKysgPSAnXic7CisJCQkqcHRyKysgPSBlZm1wWzFdOworCQkJKnB0cisrID0gJ10nOworCQkJKnB0cisrID0gJ1xcJzsKKwkJCSpwdHIrKyA9ICcrJzsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCXNyY3B0ciA9IChjaGFyX3UgKilmbXRfcGF0W2lkeF0ucGF0dGVybjsKKwkJCXdoaWxlICgoKnB0ciA9ICpzcmNwdHIrKykgIT0gTlVMKQorCQkJICAgICsrcHRyOworCQkgICAgfQorCQkgICAgKnB0cisrID0gJ1xcJzsKKwkJICAgICpwdHIrKyA9ICcpJzsKKwkJfQorCQllbHNlIGlmICgqZWZtcCA9PSAnKicpCisJCXsKKwkJICAgIGlmICgqKytlZm1wID09ICdbJyB8fCAqZWZtcCA9PSAnXFwnKQorCQkgICAgeworCQkJaWYgKCgqcHRyKysgPSAqZWZtcCkgPT0gJ1snKQkvKiAlKlteYS16MC05XSBldGMuICovCisJCQl7CisJCQkgICAgaWYgKGVmbXBbMV0gPT0gJ14nKQorCQkJCSpwdHIrKyA9ICorK2VmbXA7CisJCQkgICAgaWYgKGVmbXAgPCBlZm0gKyBsZW4pCisJCQkgICAgeworCQkJCSpwdHIrKyA9ICorK2VmbXA7CSAgICAvKiBjb3VsZCBiZSAnXScgKi8KKwkJCQl3aGlsZSAoZWZtcCA8IGVmbSArIGxlbgorCQkJCQkmJiAoKnB0cisrID0gKisrZWZtcCkgIT0gJ10nKQorCQkJCSAgICAvKiBza2lwICovOworCQkJCWlmIChlZm1wID09IGVmbSArIGxlbikKKwkJCQl7CisJCQkJICAgIEVNU0coXygiRTM3NDogTWlzc2luZyBdIGluIGZvcm1hdCBzdHJpbmciKSk7CisJCQkJICAgIGdvdG8gZXJyb3IyOworCQkJCX0KKwkJCSAgICB9CisJCQl9CisJCQllbHNlIGlmIChlZm1wIDwgZWZtICsgbGVuKQkvKiAlKlxELCAlKlxzIGV0Yy4gKi8KKwkJCSAgICAqcHRyKysgPSAqKytlZm1wOworCQkJKnB0cisrID0gJ1xcJzsKKwkJCSpwdHIrKyA9ICcrJzsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCS8qIFRPRE86IHNjYW5mKCktbGlrZTogJSp1ZCwgJSozYywgJSpmLCAuLi4gPyAqLworCQkJc3ByaW50ZigoY2hhciAqKWVycm1zZywKKwkJCQlfKCJFMzc1OiBVbnN1cHBvcnRlZCAlJSVjIGluIGZvcm1hdCBzdHJpbmciKSwgKmVmbXApOworCQkJRU1TRyhlcnJtc2cpOworCQkJZ290byBlcnJvcjI7CisJCSAgICB9CisJCX0KKwkJZWxzZSBpZiAodmltX3N0cmNocigoY2hhcl91ICopIiVcXC5eJH5bIiwgKmVmbXApICE9IE5VTEwpCisJCSAgICAqcHRyKysgPSAqZWZtcDsJCS8qIHJlZ2V4cCBtYWdpYyBjaGFyYWN0ZXJzICovCisJCWVsc2UgaWYgKCplZm1wID09ICcjJykKKwkJICAgICpwdHIrKyA9ICcqJzsKKwkJZWxzZSBpZiAoZWZtcCA9PSBlZm0gKyAxKQkJLyogYW5hbHlzZSBwcmVmaXggKi8KKwkJeworCQkgICAgaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSIrLSIsICplZm1wKSAhPSBOVUxMKQorCQkJZm10X3B0ci0+ZmxhZ3MgPSAqZWZtcCsrOworCQkgICAgaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSJEWEFFV0lDWkdPUFEiLCAqZWZtcCkgIT0gTlVMTCkKKwkJCWZtdF9wdHItPnByZWZpeCA9ICplZm1wOworCQkgICAgZWxzZQorCQkgICAgeworCQkJc3ByaW50ZigoY2hhciAqKWVycm1zZywKKwkJCQlfKCJFMzc2OiBJbnZhbGlkICUlJWMgaW4gZm9ybWF0IHN0cmluZyBwcmVmaXgiKSwgKmVmbXApOworCQkJRU1TRyhlcnJtc2cpOworCQkJZ290byBlcnJvcjI7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBzcHJpbnRmKChjaGFyICopZXJybXNnLAorCQkJICAgIF8oIkUzNzc6IEludmFsaWQgJSUlYyBpbiBmb3JtYXQgc3RyaW5nIiksICplZm1wKTsKKwkJICAgIEVNU0coZXJybXNnKTsKKwkJICAgIGdvdG8gZXJyb3IyOworCQl9CisJICAgIH0KKwkgICAgZWxzZQkJCS8qIGNvcHkgbm9ybWFsIGNoYXJhY3RlciAqLworCSAgICB7CisJCWlmICgqZWZtcCA9PSAnXFwnICYmIGVmbXAgKyAxIDwgZWZtICsgbGVuKQorCQkgICAgKytlZm1wOworCQllbHNlIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiLipeJH5bIiwgKmVmbXApICE9IE5VTEwpCisJCSAgICAqcHRyKysgPSAnXFwnOwkvKiBlc2NhcGUgcmVnZXhwIGF0b21zICovCisJCWlmICgqZWZtcCkKKwkJICAgICpwdHIrKyA9ICplZm1wOworCSAgICB9CisJfQorCSpwdHIrKyA9ICckJzsKKwkqcHRyID0gTlVMOworCWlmICgoZm10X3B0ci0+cHJvZyA9IHZpbV9yZWdjb21wKGZtdHN0ciwgUkVfTUFHSUMgKyBSRV9TVFJJTkcpKSA9PSBOVUxMKQorCSAgICBnb3RvIGVycm9yMjsKKwkvKgorCSAqIEFkdmFuY2UgdG8gbmV4dCBwYXJ0CisJICovCisJZWZtID0gc2tpcF90b19vcHRpb25fcGFydChlZm0gKyBsZW4pOwkvKiBza2lwIGNvbW1hIGFuZCBzcGFjZXMgKi8KKyAgICB9CisgICAgaWYgKGZtdF9maXJzdCA9PSBOVUxMKQkvKiBub3RoaW5nIGZvdW5kICovCisgICAgeworCUVNU0coXygiRTM3ODogJ2Vycm9yZm9ybWF0JyBjb250YWlucyBubyBwYXR0ZXJuIikpOworCWdvdG8gZXJyb3IyOworICAgIH0KKworICAgIC8qCisgICAgICogZ290X2ludCBpcyByZXNldCBoZXJlLCBiZWNhdXNlIGl0IHdhcyBwcm9iYWJseSBzZXQgd2hlbiBraWxsaW5nIHRoZQorICAgICAqICI6bWFrZSIgY29tbWFuZCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gcmVhZCB0aGUgZXJyb3JmaWxlIHRoZW4uCisgICAgICovCisgICAgZ290X2ludCA9IEZBTFNFOworCisgICAgLyogQWx3YXlzIGlnbm9yZSBjYXNlIHdoZW4gbG9va2luZyBmb3IgYSBtYXRjaGluZyBlcnJvci4gKi8KKyAgICByZWdtYXRjaC5ybV9pYyA9IFRSVUU7CisKKyAgICAvKgorICAgICAqIFJlYWQgdGhlIGxpbmVzIGluIHRoZSBlcnJvciBmaWxlIG9uZSBieSBvbmUuCisgICAgICogVHJ5IHRvIHJlY29nbml6ZSBvbmUgb2YgdGhlIGVycm9yIGZvcm1hdHMgaW4gZWFjaCBsaW5lLgorICAgICAqLworICAgIHdoaWxlIChmZ2V0cygoY2hhciAqKUlPYnVmZiwgQ01EQlVGRlNJWkUgLSAyLCBmZCkgIT0gTlVMTCAmJiAhZ290X2ludCkKKyAgICB7CisJSU9idWZmW0NNREJVRkZTSVpFIC0gMl0gPSBOVUw7ICAvKiBmb3IgdmVyeSBsb25nIGxpbmVzICovCisJaWYgKChlZm1wID0gdmltX3N0cnJjaHIoSU9idWZmLCAnXG4nKSkgIT0gTlVMTCkKKwkgICAgKmVmbXAgPSBOVUw7CisjaWZkZWYgVVNFX0NSTkwKKwlpZiAoKGVmbXAgPSB2aW1fc3RycmNocihJT2J1ZmYsICdccicpKSAhPSBOVUxMKQorCSAgICAqZWZtcCA9IE5VTDsKKyNlbmRpZgorCisJLyoKKwkgKiBUcnkgdG8gbWF0Y2ggZWFjaCBwYXJ0IG9mICdlcnJvcmZvcm1hdCcgdW50aWwgd2UgZmluZCBhIGNvbXBsZXRlCisJICogbWF0Y2ggb3Igbm8gbWF0Y2guCisJICovCisJdmFsaWQgPSBUUlVFOworcmVzdG9mbGluZToKKwlmb3IgKGZtdF9wdHIgPSBmbXRfZmlyc3Q7IGZtdF9wdHIgIT0gTlVMTDsgZm10X3B0ciA9IGZtdF9wdHItPm5leHQpCisJeworCSAgICBpZHggPSBmbXRfcHRyLT5wcmVmaXg7CisJICAgIGlmIChtdWx0aXNjYW4gJiYgdmltX3N0cmNocigoY2hhcl91ICopIk9QUSIsIGlkeCkgPT0gTlVMTCkKKwkJY29udGludWU7CisJICAgIG5hbWVidWZbMF0gPSBOVUw7CisJICAgIGlmICghbXVsdGlzY2FuKQorCQllcnJtc2dbMF0gPSBOVUw7CisJICAgIGxudW0gPSAwOworCSAgICBjb2wgPSAwOworCSAgICB1c2VfdmlydF9jb2wgPSBGQUxTRTsKKwkgICAgZW5yID0gLTE7CisJICAgIHR5cGUgPSAwOworCSAgICB0YWlsID0gTlVMTDsKKworCSAgICByZWdtYXRjaC5yZWdwcm9nID0gZm10X3B0ci0+cHJvZzsKKwkgICAgaWYgKHZpbV9yZWdleGVjKCZyZWdtYXRjaCwgSU9idWZmLCAoY29sbnJfVCkwKSkKKwkgICAgeworCQlpZiAoKGlkeCA9PSAnQycgfHwgaWR4ID09ICdaJykgJiYgIW11bHRpbGluZSkKKwkJICAgIGNvbnRpbnVlOworCQlpZiAodmltX3N0cmNocigoY2hhcl91ICopIkVXSSIsIGlkeCkgIT0gTlVMTCkKKwkJICAgIHR5cGUgPSBpZHg7CisJCWVsc2UKKwkJICAgIHR5cGUgPSAwOworCQkvKgorCQkgKiBFeHRyYWN0IGVycm9yIG1lc3NhZ2UgZGF0YSBmcm9tIG1hdGNoZWQgbGluZQorCQkgKi8KKwkJaWYgKChpID0gKGludClmbXRfcHRyLT5hZGRyWzBdKSA+IDApCQkvKiAlZiAqLworCQl7CisJCSAgICBsZW4gPSAoaW50KShyZWdtYXRjaC5lbmRwW2ldIC0gcmVnbWF0Y2guc3RhcnRwW2ldKTsKKwkJICAgIFNUUk5DUFkobmFtZWJ1ZiwgcmVnbWF0Y2guc3RhcnRwW2ldLCBsZW4pOworCQkgICAgbmFtZWJ1ZltsZW5dID0gTlVMOworCQkgICAgaWYgKHZpbV9zdHJjaHIoKGNoYXJfdSAqKSJPUFEiLCBpZHgpICE9IE5VTEwKKwkJCSAgICAmJiBtY2hfZ2V0cGVybShuYW1lYnVmKSA9PSAtMSkKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgoaSA9IChpbnQpZm10X3B0ci0+YWRkclsxXSkgPiAwKQkJLyogJW4gKi8KKwkJICAgIGVuciA9IChpbnQpYXRvbCgoY2hhciAqKXJlZ21hdGNoLnN0YXJ0cFtpXSk7CisJCWlmICgoaSA9IChpbnQpZm10X3B0ci0+YWRkclsyXSkgPiAwKQkJLyogJWwgKi8KKwkJICAgIGxudW0gPSBhdG9sKChjaGFyICopcmVnbWF0Y2guc3RhcnRwW2ldKTsKKwkJaWYgKChpID0gKGludClmbXRfcHRyLT5hZGRyWzNdKSA+IDApCQkvKiAlYyAqLworCQkgICAgY29sID0gKGludClhdG9sKChjaGFyICopcmVnbWF0Y2guc3RhcnRwW2ldKTsKKwkJaWYgKChpID0gKGludClmbXRfcHRyLT5hZGRyWzRdKSA+IDApCQkvKiAldCAqLworCQkgICAgdHlwZSA9ICpyZWdtYXRjaC5zdGFydHBbaV07CisJCWlmIChmbXRfcHRyLT5mbGFncyA9PSAgJysnICYmICFtdWx0aXNjYW4pCS8qICUrICovCisJCSAgICBTVFJDUFkoZXJybXNnLCBJT2J1ZmYpOworCQllbHNlIGlmICgoaSA9IChpbnQpZm10X3B0ci0+YWRkcls1XSkgPiAwKQkvKiAlbSAqLworCQl7CisJCSAgICBsZW4gPSAoaW50KShyZWdtYXRjaC5lbmRwW2ldIC0gcmVnbWF0Y2guc3RhcnRwW2ldKTsKKwkJICAgIFNUUk5DUFkoZXJybXNnLCByZWdtYXRjaC5zdGFydHBbaV0sIGxlbik7CisJCSAgICBlcnJtc2dbbGVuXSA9IE5VTDsKKwkJfQorCQlpZiAoKGkgPSAoaW50KWZtdF9wdHItPmFkZHJbNl0pID4gMCkJCS8qICVyICovCisJCSAgICB0YWlsID0gcmVnbWF0Y2guc3RhcnRwW2ldOworCQlpZiAoKGkgPSAoaW50KWZtdF9wdHItPmFkZHJbN10pID4gMCkJCS8qICVwICovCisJCXsKKwkJICAgIGNvbCA9IChpbnQpKHJlZ21hdGNoLmVuZHBbaV0gLSByZWdtYXRjaC5zdGFydHBbaV0gKyAxKTsKKwkJICAgIGlmICgqKChjaGFyX3UgKilyZWdtYXRjaC5zdGFydHBbaV0pICE9IFRBQikKKwkJCXVzZV92aXJ0X2NvbCA9IFRSVUU7CisJCX0KKwkJaWYgKChpID0gKGludClmbXRfcHRyLT5hZGRyWzhdKSA+IDApCQkvKiAldiAqLworCQl7CisJCSAgICBjb2wgPSAoaW50KWF0b2woKGNoYXIgKilyZWdtYXRjaC5zdGFydHBbaV0pOworCQkgICAgdXNlX3ZpcnRfY29sID0gVFJVRTsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCX0KKwltdWx0aXNjYW4gPSBGQUxTRTsKKwlpZiAoIWZtdF9wdHIgfHwgaWR4ID09ICdEJyB8fCBpZHggPT0gJ1gnKQorCXsKKwkgICAgaWYgKGZtdF9wdHIpCisJICAgIHsKKwkJaWYgKGlkeCA9PSAnRCcpCQkJCS8qIGVudGVyIGRpcmVjdG9yeSAqLworCQl7CisJCSAgICBpZiAoKm5hbWVidWYgPT0gTlVMKQorCQkgICAgeworCQkJRU1TRyhfKCJFMzc5OiBNaXNzaW5nIG9yIGVtcHR5IGRpcmVjdG9yeSBuYW1lIikpOworCQkJZ290byBlcnJvcjI7CisJCSAgICB9CisJCSAgICBpZiAoKGRpcmVjdG9yeSA9IHFmX3B1c2hfZGlyKG5hbWVidWYsICZkaXJfc3RhY2spKSA9PSBOVUxMKQorCQkJZ290byBlcnJvcjI7CisJCX0KKwkJZWxzZSBpZiAoaWR4ID09ICdYJykJCQkvKiBsZWF2ZSBkaXJlY3RvcnkgKi8KKwkJICAgIGRpcmVjdG9yeSA9IHFmX3BvcF9kaXIoJmRpcl9zdGFjayk7CisJICAgIH0KKwkgICAgbmFtZWJ1ZlswXSA9IE5VTDsJCS8qIG5vIG1hdGNoIGZvdW5kLCByZW1vdmUgZmlsZSBuYW1lICovCisJICAgIGxudW0gPSAwOwkJCS8qIGRvbid0IGp1bXAgdG8gdGhpcyBsaW5lICovCisJICAgIHZhbGlkID0gRkFMU0U7CisJICAgIFNUUkNQWShlcnJtc2csIElPYnVmZik7CS8qIGNvcHkgd2hvbGUgbGluZSB0byBlcnJvciBtZXNzYWdlICovCisJICAgIGlmICghZm10X3B0cikKKwkJbXVsdGlsaW5lID0gbXVsdGlpZ25vcmUgPSBGQUxTRTsKKwl9CisJZWxzZSBpZiAoZm10X3B0cikKKwl7CisJICAgIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiQUVXSSIsIGlkeCkgIT0gTlVMTCkKKwkJbXVsdGlsaW5lID0gVFJVRTsJLyogc3RhcnQgb2YgYSBtdWx0aS1saW5lIG1lc3NhZ2UgKi8KKwkgICAgZWxzZSBpZiAodmltX3N0cmNocigoY2hhcl91ICopIkNaIiwgaWR4KSAhPSBOVUxMKQorCSAgICB7CQkJCS8qIGNvbnRpbnVhdGlvbiBvZiBtdWx0aS1saW5lIG1zZyAqLworCQlpZiAocWZwcmV2ID09IE5VTEwpCisJCSAgICBnb3RvIGVycm9yMjsKKwkJaWYgKCplcnJtc2cgJiYgIW11bHRpaWdub3JlKQorCQl7CisJCSAgICBsZW4gPSAoaW50KVNUUkxFTihxZnByZXYtPnFmX3RleHQpOworCQkgICAgaWYgKChwdHIgPSBhbGxvYygodW5zaWduZWQpKGxlbiArIFNUUkxFTihlcnJtc2cpICsgMikpKQorCQkJCQkJCQkgICAgPT0gTlVMTCkKKwkJCWdvdG8gZXJyb3IyOworCQkgICAgU1RSQ1BZKHB0ciwgcWZwcmV2LT5xZl90ZXh0KTsKKwkJICAgIHZpbV9mcmVlKHFmcHJldi0+cWZfdGV4dCk7CisJCSAgICBxZnByZXYtPnFmX3RleHQgPSBwdHI7CisJCSAgICAqKHB0ciArPSBsZW4pID0gJ1xuJzsKKwkJICAgIFNUUkNQWSgrK3B0ciwgZXJybXNnKTsKKwkJfQorCQlpZiAocWZwcmV2LT5xZl9uciA9PSAtMSkKKwkJICAgIHFmcHJldi0+cWZfbnIgPSBlbnI7CisJCWlmICh2aW1faXNwcmludGModHlwZSkgJiYgIXFmcHJldi0+cWZfdHlwZSkKKwkJICAgIHFmcHJldi0+cWZfdHlwZSA9IHR5cGU7ICAvKiBvbmx5IHByaW50YWJsZSBjaGFycyBhbGxvd2VkICovCisJCWlmICghcWZwcmV2LT5xZl9sbnVtKQorCQkgICAgcWZwcmV2LT5xZl9sbnVtID0gbG51bTsKKwkJaWYgKCFxZnByZXYtPnFmX2NvbCkKKwkJICAgIHFmcHJldi0+cWZfY29sID0gY29sOworCQlxZnByZXYtPnFmX3ZpcnRfY29sID0gdXNlX3ZpcnRfY29sOworCQlpZiAoIXFmcHJldi0+cWZfZm51bSkKKwkJICAgIHFmcHJldi0+cWZfZm51bSA9IHFmX2dldF9mbnVtKGRpcmVjdG9yeSwKKwkJCQkJKm5hbWVidWYgfHwgZGlyZWN0b3J5ID8gbmFtZWJ1ZgorCQkJCQkgIDogY3VycmZpbGUgJiYgdmFsaWQgPyBjdXJyZmlsZSA6IDApOworCQlpZiAoaWR4ID09ICdaJykKKwkJICAgIG11bHRpbGluZSA9IG11bHRpaWdub3JlID0gRkFMU0U7CisJCWxpbmVfYnJlYWtjaGVjaygpOworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBlbHNlIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiT1BRIiwgaWR4KSAhPSBOVUxMKQorCSAgICB7CisJCS8qIGdsb2JhbCBmaWxlIG5hbWVzICovCisJCXZhbGlkID0gRkFMU0U7CisJCWlmICgqbmFtZWJ1ZiA9PSBOVUwgfHwgbWNoX2dldHBlcm0obmFtZWJ1ZikgPj0gMCkKKwkJeworCQkgICAgaWYgKCpuYW1lYnVmICYmIGlkeCA9PSAnUCcpCisJCQljdXJyZmlsZSA9IHFmX3B1c2hfZGlyKG5hbWVidWYsICZmaWxlX3N0YWNrKTsKKwkJICAgIGVsc2UgaWYgKGlkeCA9PSAnUScpCisJCQljdXJyZmlsZSA9IHFmX3BvcF9kaXIoJmZpbGVfc3RhY2spOworCQkgICAgKm5hbWVidWYgPSBOVUw7CisJCSAgICBpZiAodGFpbCAmJiAqdGFpbCkKKwkJICAgIHsKKwkJCVNUUkNQWShJT2J1ZmYsIHNraXB3aGl0ZSh0YWlsKSk7CisJCQltdWx0aXNjYW4gPSBUUlVFOworCQkJZ290byByZXN0b2ZsaW5lOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgaWYgKGZtdF9wdHItPmZsYWdzID09ICctJykJLyogZ2VuZXJhbGx5IGV4Y2x1ZGUgdGhpcyBsaW5lICovCisJICAgIHsKKwkJaWYgKG11bHRpbGluZSkKKwkJICAgIG11bHRpaWdub3JlID0gVFJVRTsJLyogYWxzbyBleGNsdWRlIGNvbnRpbnVhdGlvbiBsaW5lcyAqLworCQljb250aW51ZTsKKwkgICAgfQorCX0KKworCWlmIChxZl9hZGRfZW50cnkoJnFmcHJldiwKKwkJCWRpcmVjdG9yeSwKKwkJCSpuYW1lYnVmIHx8IGRpcmVjdG9yeQorCQkJICAgID8gbmFtZWJ1ZgorCQkJICAgIDogY3VycmZpbGUgJiYgdmFsaWQgPyBjdXJyZmlsZSA6IE5VTEwsCisJCQllcnJtc2csCisJCQlsbnVtLAorCQkJY29sLAorCQkJdXNlX3ZpcnRfY29sLAorCQkJZW5yLAorCQkJdHlwZSwKKwkJCXZhbGlkKSA9PSBGQUlMKQorCSAgICBnb3RvIGVycm9yMjsKKwlsaW5lX2JyZWFrY2hlY2soKTsKKyAgICB9CisgICAgaWYgKCFmZXJyb3IoZmQpKQorICAgIHsKKwlpZiAocWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfaW5kZXggPT0gMCkJLyogbm8gdmFsaWQgZW50cnkgZm91bmQgKi8KKwl7CisJICAgIHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX3B0ciA9IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX3N0YXJ0OworCSAgICBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9pbmRleCA9IDE7CisJICAgIHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX25vbmV2YWxpZCA9IFRSVUU7CisJfQorCWVsc2UKKwl7CisJICAgIHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX25vbmV2YWxpZCA9IEZBTFNFOworCSAgICBpZiAocWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfcHRyID09IE5VTEwpCisJCXFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX3B0ciA9IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX3N0YXJ0OworCX0KKwlyZXR2YWwgPSBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9jb3VudDsJLyogcmV0dXJuIG51bWJlciBvZiBtYXRjaGVzICovCisJZ290byBxZl9pbml0X29rOworICAgIH0KKyAgICBFTVNHKF8oZV9yZWFkZXJyZikpOworZXJyb3IyOgorICAgIHFmX2ZyZWUocWZfY3VybGlzdCk7CisgICAgcWZfbGlzdGNvdW50LS07CisgICAgaWYgKHFmX2N1cmxpc3QgPiAwKQorCS0tcWZfY3VybGlzdDsKK3FmX2luaXRfb2s6CisgICAgZmNsb3NlKGZkKTsKKyAgICBmb3IgKGZtdF9wdHIgPSBmbXRfZmlyc3Q7IGZtdF9wdHIgIT0gTlVMTDsgZm10X3B0ciA9IGZtdF9maXJzdCkKKyAgICB7CisJZm10X2ZpcnN0ID0gZm10X3B0ci0+bmV4dDsKKwl2aW1fZnJlZShmbXRfcHRyLT5wcm9nKTsKKwl2aW1fZnJlZShmbXRfcHRyKTsKKyAgICB9CisgICAgcWZfY2xlYW5fZGlyX3N0YWNrKCZkaXJfc3RhY2spOworICAgIHFmX2NsZWFuX2Rpcl9zdGFjaygmZmlsZV9zdGFjayk7CitxZl9pbml0X2VuZDoKKyAgICB2aW1fZnJlZShuYW1lYnVmKTsKKyAgICB2aW1fZnJlZShlcnJtc2cpOworICAgIHZpbV9mcmVlKGZtdHN0cik7CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBxZl91cGRhdGVfYnVmZmVyKCk7CisjZW5kaWYKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBQcmVwYXJlIGZvciBhZGRpbmcgYSBuZXcgcXVpY2tmaXggbGlzdC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitxZl9uZXdfbGlzdCgpCit7CisgICAgaW50CQlpOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgY3VycmVudCBlbnRyeSBpcyBub3QgdGhlIGxhc3QgZW50cnksIGRlbGV0ZSBlbnRyaWVzIGJlbG93CisgICAgICogdGhlIGN1cnJlbnQgZW50cnkuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGJyb3dzZSBpbiBhIHRyZWUtbGlrZQorICAgICAqIHdheSB3aXRoICI6Z3JlcCcuCisgICAgICovCisgICAgd2hpbGUgKHFmX2xpc3Rjb3VudCA+IHFmX2N1cmxpc3QgKyAxKQorCXFmX2ZyZWUoLS1xZl9saXN0Y291bnQpOworCisgICAgLyoKKyAgICAgKiBXaGVuIHRoZSBzdGFjayBpcyBmdWxsLCByZW1vdmUgdG8gb2xkZXN0IGVudHJ5CisgICAgICogT3RoZXJ3aXNlLCBhZGQgYSBuZXcgZW50cnkuCisgICAgICovCisgICAgaWYgKHFmX2xpc3Rjb3VudCA9PSBMSVNUQ09VTlQpCisgICAgeworCXFmX2ZyZWUoMCk7CisJZm9yIChpID0gMTsgaSA8IExJU1RDT1VOVDsgKytpKQorCSAgICBxZl9saXN0c1tpIC0gMV0gPSBxZl9saXN0c1tpXTsKKwlxZl9jdXJsaXN0ID0gTElTVENPVU5UIC0gMTsKKyAgICB9CisgICAgZWxzZQorCXFmX2N1cmxpc3QgPSBxZl9saXN0Y291bnQrKzsKKyAgICBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9pbmRleCA9IDA7CisgICAgcWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfY291bnQgPSAwOworfQorCisvKgorICogQWRkIGFuIGVudHJ5IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3Qgb2YgZXJyb3JzLgorICogUmV0dXJucyBPSyBvciBGQUlMLgorICovCisgICAgc3RhdGljIGludAorcWZfYWRkX2VudHJ5KHByZXZwLCBkaXIsIGZuYW1lLCBtZXNnLCBsbnVtLCBjb2wsIHZpcnRfY29sLCBuciwgdHlwZSwgdmFsaWQpCisgICAgc3RydWN0IHFmX2xpbmUgKipwcmV2cDsJLyogcG9pbnRlciB0byBwcmV2aW91c2x5IGFkZGVkIGVudHJ5IG9yIE5VTEwgKi8KKyAgICBjaGFyX3UJKmRpcjsJCS8qIG9wdGlvbmFsIGRpcmVjdG9yeSBuYW1lICovCisgICAgY2hhcl91CSpmbmFtZTsJCS8qIGZpbGUgbmFtZSBvciBOVUxMICovCisgICAgY2hhcl91CSptZXNnOwkJLyogbWVzc2FnZSAqLworICAgIGxvbmcJbG51bTsJCS8qIGxpbmUgbnVtYmVyICovCisgICAgaW50CQljb2w7CQkvKiBjb2x1bW4gKi8KKyAgICBpbnQJCXZpcnRfY29sOwkvKiB1c2luZyB2aXJ0dWFsIGNvbHVtbiAqLworICAgIGludAkJbnI7CQkvKiBlcnJvciBudW1iZXIgKi8KKyAgICBpbnQJCXR5cGU7CQkvKiB0eXBlIGNoYXJhY3RlciAqLworICAgIGludAkJdmFsaWQ7CQkvKiB2YWxpZCBlbnRyeSAqLworeworICAgIHN0cnVjdCBxZl9saW5lICpxZnA7CisKKyAgICBpZiAoKHFmcCA9IChzdHJ1Y3QgcWZfbGluZSAqKWFsbG9jKCh1bnNpZ25lZClzaXplb2Yoc3RydWN0IHFmX2xpbmUpKSkKKwkJCQkJCQkJICAgICAgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKyAgICBxZnAtPnFmX2ZudW0gPSBxZl9nZXRfZm51bShkaXIsIGZuYW1lKTsKKyAgICBpZiAoKHFmcC0+cWZfdGV4dCA9IHZpbV9zdHJzYXZlKG1lc2cpKSA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShxZnApOworCXJldHVybiBGQUlMOworICAgIH0KKyAgICBxZnAtPnFmX2xudW0gPSBsbnVtOworICAgIHFmcC0+cWZfY29sID0gY29sOworICAgIHFmcC0+cWZfdmlydF9jb2wgPSB2aXJ0X2NvbDsKKyAgICBxZnAtPnFmX25yID0gbnI7CisgICAgaWYgKHR5cGUgIT0gMSAmJiAhdmltX2lzcHJpbnRjKHR5cGUpKSAvKiBvbmx5IHByaW50YWJsZSBjaGFycyBhbGxvd2VkICovCisJdHlwZSA9IDA7CisgICAgcWZwLT5xZl90eXBlID0gdHlwZTsKKyAgICBxZnAtPnFmX3ZhbGlkID0gdmFsaWQ7CisKKyAgICBpZiAocWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfY291bnQgPT0gMCkJLyogZmlyc3QgZWxlbWVudCBpbiB0aGUgbGlzdCAqLworICAgIHsKKwlxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9zdGFydCA9IHFmcDsKKwlxZnAtPnFmX3ByZXYgPSBxZnA7CS8qIGZpcnN0IGVsZW1lbnQgcG9pbnRzIHRvIGl0c2VsZiAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworCXFmcC0+cWZfcHJldiA9ICpwcmV2cDsKKwkoKnByZXZwKS0+cWZfbmV4dCA9IHFmcDsKKyAgICB9CisgICAgcWZwLT5xZl9uZXh0ID0gcWZwOwkvKiBsYXN0IGVsZW1lbnQgcG9pbnRzIHRvIGl0c2VsZiAqLworICAgIHFmcC0+cWZfY2xlYXJlZCA9IEZBTFNFOworICAgICpwcmV2cCA9IHFmcDsKKyAgICArK3FmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX2NvdW50OworICAgIGlmIChxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9pbmRleCA9PSAwICYmIHFmcC0+cWZfdmFsaWQpCisJCQkJCSAgICAvKiBmaXJzdCB2YWxpZCBlbnRyeSAqLworICAgIHsKKwlxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9pbmRleCA9IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX2NvdW50OworCXFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX3B0ciA9IHFmcDsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBnZXQgYnVmZmVyIG51bWJlciBmb3IgZmlsZSAiZGlyLm5hbWUiCisgKi8KKyAgICBzdGF0aWMgaW50CitxZl9nZXRfZm51bShkaXJlY3RvcnksIGZuYW1lKQorICAgIGNoYXJfdSAgICpkaXJlY3Rvcnk7CisgICAgY2hhcl91ICAgKmZuYW1lOworeworICAgIGlmIChmbmFtZSA9PSBOVUxMIHx8ICpmbmFtZSA9PSBOVUwpCQkvKiBubyBmaWxlIG5hbWUgKi8KKwlyZXR1cm4gMDsKKyAgICB7CisjaWZkZWYgUklTQ09TCisJLyogTmFtZSBpcyByZXBvcnRlZCBhcyBgbWFpbi5jJywgYnV0IGZpbGUgaXMgYGMubWFpbicgKi8KKwlyZXR1cm4gcm9fYnVmbGlzdF9hZGQoZm5hbWUpOworI2Vsc2UKKwljaGFyX3UJICAgICpwdHI7CisJaW50CSAgICBmbnVtOworCisjIGlmZGVmIFZNUworCXZtc19yZW1vdmVfdmVyc2lvbihmbmFtZSk7CisjIGVuZGlmCisjIGlmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorCWlmIChkaXJlY3RvcnkgIT0gTlVMTCkKKwkgICAgc2xhc2hfYWRqdXN0KGRpcmVjdG9yeSk7CisJc2xhc2hfYWRqdXN0KGZuYW1lKTsKKyMgZW5kaWYKKwlpZiAoZGlyZWN0b3J5ICE9IE5VTEwgJiYgIXZpbV9pc0Fic05hbWUoZm5hbWUpCisJCSYmIChwdHIgPSBjb25jYXRfZm5hbWVzKGRpcmVjdG9yeSwgZm5hbWUsIFRSVUUpKSAhPSBOVUxMKQorCXsKKwkgICAgLyoKKwkgICAgICogSGVyZSB3ZSBjaGVjayBpZiB0aGUgZmlsZSByZWFsbHkgZXhpc3RzLgorCSAgICAgKiBUaGlzIHNob3VsZCBub3JtYWxseSBiZSB0cnVlLCBidXQgaWYgbWFrZSB3b3JrcyB3aXRob3V0CisJICAgICAqICJsZWF2aW5nIGRpcmVjdG9yeSItbWVzc2FnZXMgd2UgbWlnaHQgaGF2ZSBtaXNzZWQgYQorCSAgICAgKiBkaXJlY3RvcnkgY2hhbmdlLgorCSAgICAgKi8KKwkgICAgaWYgKG1jaF9nZXRwZXJtKHB0cikgPCAwKQorCSAgICB7CisJCXZpbV9mcmVlKHB0cik7CisJCWRpcmVjdG9yeSA9IHFmX2d1ZXNzX2ZpbGVwYXRoKGZuYW1lKTsKKwkJaWYgKGRpcmVjdG9yeSkKKwkJICAgIHB0ciA9IGNvbmNhdF9mbmFtZXMoZGlyZWN0b3J5LCBmbmFtZSwgVFJVRSk7CisJCWVsc2UKKwkJICAgIHB0ciA9IHZpbV9zdHJzYXZlKGZuYW1lKTsKKwkgICAgfQorCSAgICAvKiBVc2UgY29uY2F0ZW5hdGVkIGRpcmVjdG9yeSBuYW1lIGFuZCBmaWxlIG5hbWUgKi8KKwkgICAgZm51bSA9IGJ1Zmxpc3RfYWRkKHB0ciwgMCk7CisJICAgIHZpbV9mcmVlKHB0cik7CisJICAgIHJldHVybiBmbnVtOworCX0KKwlyZXR1cm4gYnVmbGlzdF9hZGQoZm5hbWUsIDApOworI2VuZGlmCisgICAgfQorfQorCisvKgorICogcHVzaCBkaXJidWYgb250byB0aGUgZGlyZWN0b3J5IHN0YWNrIGFuZCByZXR1cm4gcG9pbnRlciB0byBhY3R1YWwgZGlyIG9yCisgKiBOVUxMIG9uIGVycm9yCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3FmX3B1c2hfZGlyKGRpcmJ1Ziwgc3RhY2twdHIpCisgICAgY2hhcl91CQkqZGlyYnVmOworICAgIHN0cnVjdCBkaXJfc3RhY2tfVAkqKnN0YWNrcHRyOworeworICAgIHN0cnVjdCBkaXJfc3RhY2tfVCAgKmRzX25ldzsKKyAgICBzdHJ1Y3QgZGlyX3N0YWNrX1QgICpkc19wdHI7CisKKyAgICAvKiBhbGxvY2F0ZSBuZXcgc3RhY2sgZWxlbWVudCBhbmQgaG9vayBpdCBpbiAqLworICAgIGRzX25ldyA9IChzdHJ1Y3QgZGlyX3N0YWNrX1QgKilhbGxvYygodW5zaWduZWQpc2l6ZW9mKHN0cnVjdCBkaXJfc3RhY2tfVCkpOworICAgIGlmIChkc19uZXcgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGRzX25ldy0+bmV4dCA9ICpzdGFja3B0cjsKKyAgICAqc3RhY2twdHIgPSBkc19uZXc7CisKKyAgICAvKiBzdG9yZSBkaXJlY3Rvcnkgb24gdGhlIHN0YWNrICovCisgICAgaWYgKHZpbV9pc0Fic05hbWUoZGlyYnVmKQorCSAgICB8fCAoKnN0YWNrcHRyKS0+bmV4dCA9PSBOVUxMCisJICAgIHx8ICgqc3RhY2twdHIgJiYgZGlyX3N0YWNrICE9ICpzdGFja3B0cikpCisJKCpzdGFja3B0ciktPmRpcm5hbWUgPSB2aW1fc3Ryc2F2ZShkaXJidWYpOworICAgIGVsc2UKKyAgICB7CisJLyogT2theSB3ZSBkb24ndCBoYXZlIGFuIGFic29sdXRlIHBhdGguCisJICogZGlyYnVmIG11c3QgYmUgYSBzdWJkaXIgb2Ygb25lIG9mIHRoZSBkaXJlY3RvcmllcyBvbiB0aGUgc3RhY2suCisJICogTGV0J3Mgc2VhcmNoLi4uCisJICovCisJZHNfbmV3ID0gKCpzdGFja3B0ciktPm5leHQ7CisJKCpzdGFja3B0ciktPmRpcm5hbWUgPSBOVUxMOworCXdoaWxlIChkc19uZXcpCisJeworCSAgICB2aW1fZnJlZSgoKnN0YWNrcHRyKS0+ZGlybmFtZSk7CisJICAgICgqc3RhY2twdHIpLT5kaXJuYW1lID0gY29uY2F0X2ZuYW1lcyhkc19uZXctPmRpcm5hbWUsIGRpcmJ1ZiwKKwkJICAgIFRSVUUpOworCSAgICBpZiAobWNoX2lzZGlyKCgqc3RhY2twdHIpLT5kaXJuYW1lKSA9PSBUUlVFKQorCQlicmVhazsKKworCSAgICBkc19uZXcgPSBkc19uZXctPm5leHQ7CisJfQorCisJLyogY2xlYW4gdXAgYWxsIGRpcnMgd2UgYWxyZWFkeSBsZWZ0ICovCisJd2hpbGUgKCgqc3RhY2twdHIpLT5uZXh0ICE9IGRzX25ldykKKwl7CisJICAgIGRzX3B0ciA9ICgqc3RhY2twdHIpLT5uZXh0OworCSAgICAoKnN0YWNrcHRyKS0+bmV4dCA9ICgqc3RhY2twdHIpLT5uZXh0LT5uZXh0OworCSAgICB2aW1fZnJlZShkc19wdHItPmRpcm5hbWUpOworCSAgICB2aW1fZnJlZShkc19wdHIpOworCX0KKworCS8qIE5vdGhpbmcgZm91bmQgLT4gaXQgbXVzdCBiZSBvbiB0b3AgbGV2ZWwgKi8KKwlpZiAoZHNfbmV3ID09IE5VTEwpCisJeworCSAgICB2aW1fZnJlZSgoKnN0YWNrcHRyKS0+ZGlybmFtZSk7CisJICAgICgqc3RhY2twdHIpLT5kaXJuYW1lID0gdmltX3N0cnNhdmUoZGlyYnVmKTsKKwl9CisgICAgfQorCisgICAgaWYgKCgqc3RhY2twdHIpLT5kaXJuYW1lICE9IE5VTEwpCisJcmV0dXJuICgqc3RhY2twdHIpLT5kaXJuYW1lOworICAgIGVsc2UKKyAgICB7CisJZHNfcHRyID0gKnN0YWNrcHRyOworCSpzdGFja3B0ciA9ICgqc3RhY2twdHIpLT5uZXh0OworCXZpbV9mcmVlKGRzX3B0cik7CisJcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisKKy8qCisgKiBwb3AgZGlyYnVmIGZyb20gdGhlIGRpcmVjdG9yeSBzdGFjayBhbmQgcmV0dXJuIHByZXZpb3VzIGRpcmVjdG9yeSBvciBOVUxMIGlmCisgKiBzdGFjayBpcyBlbXB0eQorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitxZl9wb3BfZGlyKHN0YWNrcHRyKQorICAgIHN0cnVjdCBkaXJfc3RhY2tfVAkqKnN0YWNrcHRyOworeworICAgIHN0cnVjdCBkaXJfc3RhY2tfVCAgKmRzX3B0cjsKKworICAgIC8qIFRPRE86IFNob3VsZCB3ZSBjaGVjayBpZiBkaXJidWYgaXMgdGhlIGRpcmVjdG9yeSBvbiB0b3Agb2YgdGhlIHN0YWNrPworICAgICAqIFdoYXQgdG8gZG8gaWYgaXQgaXNuJ3Q/ICovCisKKyAgICAvKiBwb3AgdG9wIGVsZW1lbnQgYW5kIGZyZWUgaXQgKi8KKyAgICBpZiAoKnN0YWNrcHRyICE9IE5VTEwpCisgICAgeworCWRzX3B0ciA9ICpzdGFja3B0cjsKKwkqc3RhY2twdHIgPSAoKnN0YWNrcHRyKS0+bmV4dDsKKwl2aW1fZnJlZShkc19wdHItPmRpcm5hbWUpOworCXZpbV9mcmVlKGRzX3B0cik7CisgICAgfQorCisgICAgLyogcmV0dXJuIE5FVyB0b3AgZWxlbWVudCBhcyBjdXJyZW50IGRpciBvciBOVUxMIGlmIHN0YWNrIGlzIGVtcHR5Ki8KKyAgICByZXR1cm4gKnN0YWNrcHRyID8gKCpzdGFja3B0ciktPmRpcm5hbWUgOiBOVUxMOworfQorCisvKgorICogY2xlYW4gdXAgZGlyZWN0b3J5IHN0YWNrCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcWZfY2xlYW5fZGlyX3N0YWNrKHN0YWNrcHRyKQorICAgIHN0cnVjdCBkaXJfc3RhY2tfVAkqKnN0YWNrcHRyOworeworICAgIHN0cnVjdCBkaXJfc3RhY2tfVCAgKmRzX3B0cjsKKworICAgIHdoaWxlICgoZHNfcHRyID0gKnN0YWNrcHRyKSAhPSBOVUxMKQorICAgIHsKKwkqc3RhY2twdHIgPSAoKnN0YWNrcHRyKS0+bmV4dDsKKwl2aW1fZnJlZShkc19wdHItPmRpcm5hbWUpOworCXZpbV9mcmVlKGRzX3B0cik7CisgICAgfQorfQorCisvKgorICogQ2hlY2sgaW4gd2hpY2ggZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3Rvcnkgc3RhY2sgdGhlIGdpdmVuIGZpbGUgY2FuIGJlCisgKiBmb3VuZC4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkaXJlY3RvcnkgbmFtZSBvciBOVUxMIGlmIG5vdCBmb3VuZAorICogQ2xlYW5zIHVwIGludGVybWVkaWF0ZSBkaXJlY3RvcnkgZW50cmllcy4KKyAqCisgKiBUT0RPOiBIb3cgdG8gc29sdmUgdGhlIGZvbGxvd2luZyBwcm9ibGVtPworICogSWYgd2UgaGF2ZSB0aGUgdGhpcyBkaXJlY3RvcnkgdHJlZToKKyAqICAgICAuLworICogICAgIC4vYWEKKyAqICAgICAuL2FhL2JiCisgKiAgICAgLi9iYgorICogICAgIC4vYmIveC5jCisgKiBhbmQgbWFrZSBzYXlzOgorICogICAgIG1ha2luZyBhbGwgaW4gYWEKKyAqICAgICBtYWtpbmcgYWxsIGluIGJiCisgKiAgICAgeC5jOjk6IEVycm9yCisgKiBUaGVuIHFmX3B1c2hfZGlyIHRoaW5rcyB3ZSBhcmUgaW4gLi9hYS9iYiwgYnV0IHdlIGFyZSBpbiAuL2JiLgorICogcWZfZ3Vlc3NfZmlsZXBhdGggd2lsbCByZXR1cm4gTlVMTC4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorcWZfZ3Vlc3NfZmlsZXBhdGgoZmlsZW5hbWUpCisgICAgY2hhcl91ICpmaWxlbmFtZTsKK3sKKyAgICBzdHJ1Y3QgZGlyX3N0YWNrX1QgICAgICpkc19wdHI7CisgICAgc3RydWN0IGRpcl9zdGFja19UICAgICAqZHNfdG1wOworICAgIGNoYXJfdQkJICAgKmZ1bGxuYW1lOworCisgICAgLyogbm8gZGlycyBvbiB0aGUgc3RhY2sgLSB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvICovCisgICAgaWYgKGRpcl9zdGFjayA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgZHNfcHRyID0gZGlyX3N0YWNrLT5uZXh0OworICAgIGZ1bGxuYW1lID0gTlVMTDsKKyAgICB3aGlsZSAoZHNfcHRyKQorICAgIHsKKwl2aW1fZnJlZShmdWxsbmFtZSk7CisJZnVsbG5hbWUgPSBjb25jYXRfZm5hbWVzKGRzX3B0ci0+ZGlybmFtZSwgZmlsZW5hbWUsIFRSVUUpOworCisJLyogSWYgY29uY2F0X2ZuYW1lcyBmYWlsZWQsIGp1c3QgZ28gb24uIFRoZSB3b3JzdCB0aGluZyB0aGF0IGNhbiBoYXBwZW4KKwkgKiBpcyB0aGF0IHdlIGRlbGV0ZSB0aGUgZW50aXJlIHN0YWNrLgorCSAqLworCWlmICgoZnVsbG5hbWUgIT0gTlVMTCkgJiYgKG1jaF9nZXRwZXJtKGZ1bGxuYW1lKSA+PSAwKSkKKwkgICAgYnJlYWs7CisKKwlkc19wdHIgPSBkc19wdHItPm5leHQ7CisgICAgfQorCisgICAgdmltX2ZyZWUoZnVsbG5hbWUpOworCisgICAgLyogY2xlYW4gdXAgYWxsIGRpcnMgd2UgYWxyZWFkeSBsZWZ0ICovCisgICAgd2hpbGUgKGRpcl9zdGFjay0+bmV4dCAhPSBkc19wdHIpCisgICAgeworCWRzX3RtcCA9IGRpcl9zdGFjay0+bmV4dDsKKwlkaXJfc3RhY2stPm5leHQgPSBkaXJfc3RhY2stPm5leHQtPm5leHQ7CisJdmltX2ZyZWUoZHNfdG1wLT5kaXJuYW1lKTsKKwl2aW1fZnJlZShkc190bXApOworICAgIH0KKworICAgIHJldHVybiBkc19wdHI9PU5VTEw/IE5VTEw6IGRzX3B0ci0+ZGlybmFtZTsKKworfQorCisvKgorICoganVtcCB0byBhIHF1aWNrZml4IGxpbmUKKyAqIGlmIGRpciA9PSBGT1JXQVJEIGdvICJlcnJvcm5yIiB2YWxpZCBlbnRyaWVzIGZvcndhcmQKKyAqIGlmIGRpciA9PSBCQUNLV0FSRCBnbyAiZXJyb3JuciIgdmFsaWQgZW50cmllcyBiYWNrd2FyZAorICogaWYgZGlyID09IEZPUldBUkRfRklMRSBnbyAiZXJyb3JuciIgdmFsaWQgZW50cmllcyBmaWxlcyBiYWNrd2FyZAorICogaWYgZGlyID09IEJBQ0tXQVJEX0ZJTEUgZ28gImVycm9ybnIiIHZhbGlkIGVudHJpZXMgZmlsZXMgYmFja3dhcmQKKyAqIGVsc2UgaWYgImVycm9ybnIiIGlzIHplcm8sIHJlZGlzcGxheSB0aGUgc2FtZSBsaW5lCisgKiBlbHNlIGdvIHRvIGVudHJ5ICJlcnJvcm5yIgorICovCisgICAgdm9pZAorcWZfanVtcChkaXIsIGVycm9ybnIsIGZvcmNlaXQpCisgICAgaW50CQlkaXI7CisgICAgaW50CQllcnJvcm5yOworICAgIGludAkJZm9yY2VpdDsKK3sKKyAgICBzdHJ1Y3QgcWZfbGluZQkqcWZfcHRyOworICAgIHN0cnVjdCBxZl9saW5lCSpvbGRfcWZfcHRyOworICAgIGludAkJCXFmX2luZGV4OworICAgIGludAkJCW9sZF9xZl9mbnVtOworICAgIGludAkJCW9sZF9xZl9pbmRleDsKKyAgICBpbnQJCQlwcmV2X2luZGV4OworICAgIHN0YXRpYyBjaGFyX3UJKmVfbm9fbW9yZV9pdGVtcyA9IChjaGFyX3UgKilOXygiRTU1MzogTm8gbW9yZSBpdGVtcyIpOworICAgIGNoYXJfdQkJKmVyciA9IGVfbm9fbW9yZV9pdGVtczsKKyAgICBsaW5lbnJfVAkJaTsKKyAgICBidWZfVAkJKm9sZF9jdXJidWY7CisgICAgbGluZW5yX1QJCW9sZF9sbnVtOworICAgIGNoYXJfdQkJKm9sZF9zd2IgPSBwX3N3YjsKKyAgICBjb2xucl9UCQlzY3JlZW5fY29sOworICAgIGNvbG5yX1QJCWNoYXJfY29sOworICAgIGNoYXJfdQkJKmxpbmU7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgaW50CQkJb3BlbmVkX3dpbmRvdyA9IEZBTFNFOworICAgIHdpbl9UCQkqd2luOworICAgIHdpbl9UCQkqYWx0d2luOworI2VuZGlmCisgICAgaW50CQkJcHJpbnRfbWVzc2FnZSA9IFRSVUU7CisgICAgaW50CQkJbGVuOworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGludAkJCW9sZF9LZXlUeXBlZCA9IEtleVR5cGVkOyAvKiBnZXR0aW5nIGZpbGUgbWF5IHJlc2V0IGl0ICovCisjZW5kaWYKKworICAgIGlmIChxZl9jdXJsaXN0ID49IHFmX2xpc3Rjb3VudCB8fCBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9jb3VudCA9PSAwKQorICAgIHsKKwlFTVNHKF8oZV9xdWlja2ZpeCkpOworCXJldHVybjsKKyAgICB9CisKKyAgICBxZl9wdHIgPSBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9wdHI7CisgICAgb2xkX3FmX3B0ciA9IHFmX3B0cjsKKyAgICBxZl9pbmRleCA9IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX2luZGV4OworICAgIG9sZF9xZl9pbmRleCA9IHFmX2luZGV4OworICAgIGlmIChkaXIgPT0gRk9SV0FSRCB8fCBkaXIgPT0gRk9SV0FSRF9GSUxFKQkgICAgLyogbmV4dCB2YWxpZCBlbnRyeSAqLworICAgIHsKKwl3aGlsZSAoZXJyb3Juci0tKQorCXsKKwkgICAgb2xkX3FmX3B0ciA9IHFmX3B0cjsKKwkgICAgcHJldl9pbmRleCA9IHFmX2luZGV4OworCSAgICBvbGRfcWZfZm51bSA9IHFmX3B0ci0+cWZfZm51bTsKKwkgICAgZG8KKwkgICAgeworCQlpZiAocWZfaW5kZXggPT0gcWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfY291bnQKKwkJCQkJCSAgIHx8IHFmX3B0ci0+cWZfbmV4dCA9PSBOVUxMKQorCQl7CisJCSAgICBxZl9wdHIgPSBvbGRfcWZfcHRyOworCQkgICAgcWZfaW5kZXggPSBwcmV2X2luZGV4OworCQkgICAgaWYgKGVyciAhPSBOVUxMKQorCQkgICAgeworCQkJRU1TRyhfKGVycikpOworCQkJZ290byB0aGVlbmQ7CisJCSAgICB9CisJCSAgICBlcnJvcm5yID0gMDsKKwkJICAgIGJyZWFrOworCQl9CisJCSsrcWZfaW5kZXg7CisJCXFmX3B0ciA9IHFmX3B0ci0+cWZfbmV4dDsKKwkgICAgfSB3aGlsZSAoKCFxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9ub25ldmFsaWQgJiYgIXFmX3B0ci0+cWZfdmFsaWQpCisJCSAgfHwgKGRpciA9PSBGT1JXQVJEX0ZJTEUgJiYgcWZfcHRyLT5xZl9mbnVtID09IG9sZF9xZl9mbnVtKSk7CisJICAgIGVyciA9IE5VTEw7CisJfQorICAgIH0KKyAgICBlbHNlIGlmIChkaXIgPT0gQkFDS1dBUkQgfHwgZGlyID09IEJBQ0tXQVJEX0ZJTEUpICAvKiBwcmV2LiB2YWxpZCBlbnRyeSAqLworICAgIHsKKwl3aGlsZSAoZXJyb3Juci0tKQorCXsKKwkgICAgb2xkX3FmX3B0ciA9IHFmX3B0cjsKKwkgICAgcHJldl9pbmRleCA9IHFmX2luZGV4OworCSAgICBvbGRfcWZfZm51bSA9IHFmX3B0ci0+cWZfZm51bTsKKwkgICAgZG8KKwkgICAgeworCQlpZiAocWZfaW5kZXggPT0gMSB8fCBxZl9wdHItPnFmX3ByZXYgPT0gTlVMTCkKKwkJeworCQkgICAgcWZfcHRyID0gb2xkX3FmX3B0cjsKKwkJICAgIHFmX2luZGV4ID0gcHJldl9pbmRleDsKKwkJICAgIGlmIChlcnIgIT0gTlVMTCkKKwkJICAgIHsKKwkJCUVNU0coXyhlcnIpKTsKKwkJCWdvdG8gdGhlZW5kOworCQkgICAgfQorCQkgICAgZXJyb3JuciA9IDA7CisJCSAgICBicmVhazsKKwkJfQorCQktLXFmX2luZGV4OworCQlxZl9wdHIgPSBxZl9wdHItPnFmX3ByZXY7CisJICAgIH0gd2hpbGUgKCghcWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfbm9uZXZhbGlkICYmICFxZl9wdHItPnFmX3ZhbGlkKQorCQkgIHx8IChkaXIgPT0gQkFDS1dBUkRfRklMRSAmJiBxZl9wdHItPnFmX2ZudW0gPT0gb2xkX3FmX2ZudW0pKTsKKwkgICAgZXJyID0gTlVMTDsKKwl9CisgICAgfQorICAgIGVsc2UgaWYgKGVycm9ybnIgIT0gMCkJLyogZ28gdG8gc3BlY2lmaWVkIG51bWJlciAqLworICAgIHsKKwl3aGlsZSAoZXJyb3JuciA8IHFmX2luZGV4ICYmIHFmX2luZGV4ID4gMSAmJiBxZl9wdHItPnFmX3ByZXYgIT0gTlVMTCkKKwl7CisJICAgIC0tcWZfaW5kZXg7CisJICAgIHFmX3B0ciA9IHFmX3B0ci0+cWZfcHJldjsKKwl9CisJd2hpbGUgKGVycm9ybnIgPiBxZl9pbmRleCAmJiBxZl9pbmRleCA8IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX2NvdW50CisJCQkJCQkgICAmJiBxZl9wdHItPnFmX25leHQgIT0gTlVMTCkKKwl7CisJICAgICsrcWZfaW5kZXg7CisJICAgIHFmX3B0ciA9IHFmX3B0ci0+cWZfbmV4dDsKKwl9CisgICAgfQorCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgcWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfaW5kZXggPSBxZl9pbmRleDsKKyAgICBpZiAocWZfd2luX3Bvc191cGRhdGUob2xkX3FmX2luZGV4KSkKKwkvKiBObyBuZWVkIHRvIHByaW50IHRoZSBlcnJvciBtZXNzYWdlIGlmIGl0J3MgdmlzaWJsZSBpbiB0aGUgZXJyb3IKKwkgKiB3aW5kb3cgKi8KKwlwcmludF9tZXNzYWdlID0gRkFMU0U7CisKKyAgICAvKgorICAgICAqIElmIGN1cnJlbnRseSBpbiB0aGUgcXVpY2tmaXggd2luZG93LCBmaW5kIGFub3RoZXIgd2luZG93IHRvIHNob3cgdGhlCisgICAgICogZmlsZSBpbi4KKyAgICAgKi8KKyAgICBpZiAoYnRfcXVpY2tmaXgoY3VyYnVmKSkKKyAgICB7CisJLyoKKwkgKiBJZiB0aGVyZSBpcyBubyBmaWxlIHNwZWNpZmllZCwgd2UgZG9uJ3Qga25vdyB3aGVyZSB0byBnby4KKwkgKiBCdXQgZG8gYWR2YW5jZSwgb3RoZXJ3aXNlICI6Y24iIGdldHMgc3R1Y2suCisJICovCisJaWYgKHFmX3B0ci0+cWZfZm51bSA9PSAwKQorCSAgICBnb3RvIHRoZWVuZDsKKworCS8qCisJICogSWYgdGhlcmUgaXMgb25seSBvbmUgd2luZG93LCBjcmVhdGUgYSBuZXcgb25lIGFib3ZlIHRoZSBxdWlja2ZpeAorCSAqIHdpbmRvdy4KKwkgKi8KKwlpZiAoZmlyc3R3aW4gPT0gbGFzdHdpbikKKwl7CisJICAgIGlmICh3aW5fc3BsaXQoMCwgV1NQX0FCT1ZFKSA9PSBGQUlMKQorCQlnb3RvIGZhaWxlZDsJCS8qIG5vdCBlbm91Z2ggcm9vbSBmb3Igd2luZG93ICovCisJICAgIG9wZW5lZF93aW5kb3cgPSBUUlVFOwkvKiBjbG9zZSBpdCB3aGVuIGZhaWwgKi8KKwkgICAgcF9zd2IgPSBlbXB0eV9vcHRpb247CS8qIGRvbid0IHNwbGl0IGFnYWluICovCisjIGlmZGVmIEZFQVRfU0NST0xMQklORAorCSAgICBjdXJ3aW4tPndfcF9zY2IgPSBGQUxTRTsKKyMgZW5kaWYKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogVHJ5IHRvIGZpbmQgYSB3aW5kb3cgdGhhdCBzaG93cyB0aGUgcmlnaHQgYnVmZmVyLgorCSAgICAgKiBEZWZhdWx0IHRvIHRoZSB3aW5kb3cganVzdCBhYm92ZSB0aGUgcXVpY2tmaXggYnVmZmVyLgorCSAgICAgKi8KKwkgICAgd2luID0gY3Vyd2luOworCSAgICBhbHR3aW4gPSBOVUxMOworCSAgICBmb3IgKDs7KQorCSAgICB7CisJCWlmICh3aW4tPndfYnVmZmVyLT5iX2ZudW0gPT0gcWZfcHRyLT5xZl9mbnVtKQorCQkgICAgYnJlYWs7CisJCWlmICh3aW4tPndfcHJldiA9PSBOVUxMKQorCQkgICAgd2luID0gbGFzdHdpbjsJLyogd3JhcCBhcm91bmQgdGhlIHRvcCAqLworCQllbHNlCisJCSAgICB3aW4gPSB3aW4tPndfcHJldjsJLyogZ28gdG8gcHJldmlvdXMgd2luZG93ICovCisKKwkJaWYgKGJ0X3F1aWNrZml4KHdpbi0+d19idWZmZXIpKQorCQl7CisJCSAgICAvKiBEaWRuJ3QgZmluZCBpdCwgZ28gdG8gdGhlIHdpbmRvdyBiZWZvcmUgdGhlIHF1aWNrZml4CisJCSAgICAgKiB3aW5kb3cuICovCisJCSAgICBpZiAoYWx0d2luICE9IE5VTEwpCisJCQl3aW4gPSBhbHR3aW47CisJCSAgICBlbHNlIGlmIChjdXJ3aW4tPndfcHJldiAhPSBOVUxMKQorCQkJd2luID0gY3Vyd2luLT53X3ByZXY7CisJCSAgICBlbHNlCisJCQl3aW4gPSBjdXJ3aW4tPndfbmV4dDsKKwkJICAgIGJyZWFrOworCQl9CisKKwkJLyogUmVtZW1iZXIgYSB1c2FibGUgd2luZG93LiAqLworCQlpZiAoYWx0d2luID09IE5VTEwgJiYgIXdpbi0+d19wX3B2dworCQkJCQkgICAmJiB3aW4tPndfYnVmZmVyLT5iX3BfYnRbMF0gPT0gTlVMKQorCQkgICAgYWx0d2luID0gd2luOworCSAgICB9CisKKwkgICAgd2luX2dvdG8od2luKTsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGlzIGEgZmlsZSBuYW1lLAorICAgICAqIHJlYWQgdGhlIHdhbnRlZCBmaWxlIGlmIG5lZWRlZCwgYW5kIGNoZWNrIGF1dG93cml0ZSBldGMuCisgICAgICovCisgICAgb2xkX2N1cmJ1ZiA9IGN1cmJ1ZjsKKyAgICBvbGRfbG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICBpZiAocWZfcHRyLT5xZl9mbnVtID09IDAgfHwgYnVmbGlzdF9nZXRmaWxlKHFmX3B0ci0+cWZfZm51bSwKKwkJICAgIChsaW5lbnJfVCkxLCBHRVRGX1NFVE1BUksgfCBHRVRGX1NXSVRDSCwgZm9yY2VpdCkgPT0gT0spCisgICAgeworCS8qIFdoZW4gbm90IHN3aXRjaGVkIHRvIGFub3RoZXIgYnVmZmVyLCBzdGlsbCBuZWVkIHRvIHNldCBwYyBtYXJrICovCisJaWYgKGN1cmJ1ZiA9PSBvbGRfY3VyYnVmKQorCSAgICBzZXRwY21hcmsoKTsKKworCS8qCisJICogR28gdG8gbGluZSB3aXRoIGVycm9yLCB1bmxlc3MgcWZfbG51bSBpcyAwLgorCSAqLworCWkgPSBxZl9wdHItPnFmX2xudW07CisJaWYgKGkgPiAwKQorCXsKKwkgICAgaWYgKGkgPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkJaSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBpOworCX0KKwlpZiAocWZfcHRyLT5xZl9jb2wgPiAwKQorCXsKKwkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSBxZl9wdHItPnFmX2NvbCAtIDE7CisJICAgIGlmIChxZl9wdHItPnFmX3ZpcnRfY29sID09IFRSVUUpCisJICAgIHsKKwkJLyoKKwkJICogQ2hlY2sgZWFjaCBjaGFyYWN0ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBlcnJvcgorCQkgKiBsaW5lIHVwIHRvIHRoZSBlcnJvciBjb2x1bW4uICBGb3IgZWFjaCB0YWIgY2hhcmFjdGVyCisJCSAqIGZvdW5kLCByZWR1Y2UgdGhlIGVycm9yIGNvbHVtbiB2YWx1ZSBieSB0aGUgbGVuZ3RoIG9mCisJCSAqIGEgdGFiIGNoYXJhY3Rlci4KKwkJICovCisJCWxpbmUgPSBtbF9nZXRfY3VybGluZSgpOworCQlzY3JlZW5fY29sID0gMDsKKwkJZm9yIChjaGFyX2NvbCA9IDA7IGNoYXJfY29sIDwgY3Vyd2luLT53X2N1cnNvci5jb2w7ICsrY2hhcl9jb2wpCisJCXsKKwkJICAgIGlmICgqbGluZSA9PSBOVUwpCisJCQlicmVhazsKKwkJICAgIGlmICgqbGluZSsrID09ICdcdCcpCisJCSAgICB7CisJCQljdXJ3aW4tPndfY3Vyc29yLmNvbCAtPSA3IC0gKHNjcmVlbl9jb2wgJSA4KTsKKwkJCXNjcmVlbl9jb2wgKz0gOCAtIChzY3JlZW5fY29sICUgOCk7CisJCSAgICB9CisJCSAgICBlbHNlCisJCQkrK3NjcmVlbl9jb2w7CisJCX0KKwkgICAgfQorCSAgICBjaGVja19jdXJzb3IoKTsKKwl9CisJZWxzZQorCSAgICBiZWdpbmxpbmUoQkxfV0hJVEUgfCBCTF9GSVgpOworCisjaWZkZWYgRkVBVF9GT0xESU5HCisJaWYgKChmZG9fZmxhZ3MgJiBGRE9fUVVJQ0tGSVgpICYmIG9sZF9LZXlUeXBlZCkKKwkgICAgZm9sZE9wZW5DdXJzb3IoKTsKKyNlbmRpZgorCWlmIChwcmludF9tZXNzYWdlKQorCXsKKwkgICAgLyogVXBkYXRlIHRoZSBzY3JlZW4gYmVmb3JlIHNob3dpbmcgdGhlIG1lc3NhZ2UgKi8KKwkgICAgdXBkYXRlX3RvcGxpbmVfcmVkcmF3KCk7CisJICAgIHNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIiglZCBvZiAlZCklcyVzOiAiKSwgcWZfaW5kZXgsCisJCSAgICBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9jb3VudCwKKwkJICAgIHFmX3B0ci0+cWZfY2xlYXJlZCA/IF8oIiAobGluZSBkZWxldGVkKSIpIDogIiIsCisJCSAgICAoY2hhciAqKXFmX3R5cGVzKHFmX3B0ci0+cWZfdHlwZSwgcWZfcHRyLT5xZl9ucikpOworCSAgICAvKiBBZGQgdGhlIG1lc3NhZ2UsIHNraXBwaW5nIGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgbmV3bGluZXMuICovCisJICAgIGxlbiA9IChpbnQpU1RSTEVOKElPYnVmZik7CisJICAgIHFmX2ZtdF90ZXh0KHNraXB3aGl0ZShxZl9wdHItPnFmX3RleHQpLCBJT2J1ZmYgKyBsZW4sIElPU0laRSAtIGxlbik7CisKKwkgICAgLyogT3V0cHV0IHRoZSBtZXNzYWdlLiAgT3ZlcndyaXRlIHRvIGF2b2lkIHNjcm9sbGluZyB3aGVuIHRoZSAnTycKKwkgICAgICogZmxhZyBpcyBwcmVzZW50IGluICdzaG9ydG1lc3MnOyBCdXQgd2hlbiBub3QganVtcGluZywgcHJpbnQgdGhlCisJICAgICAqIHdob2xlIG1lc3NhZ2UuICovCisJICAgIGkgPSBtc2dfc2Nyb2xsOworCSAgICBpZiAoY3VyYnVmID09IG9sZF9jdXJidWYgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtID09IG9sZF9sbnVtKQorCQltc2dfc2Nyb2xsID0gVFJVRTsKKwkgICAgZWxzZSBpZiAoIW1zZ19zY3JvbGxlZCAmJiBzaG9ydG1lc3MoU0hNX09WRVJBTEwpKQorCQltc2dfc2Nyb2xsID0gRkFMU0U7CisJICAgIG1zZ19hdHRyX2tlZXAoSU9idWZmLCAwLCBUUlVFKTsKKwkgICAgbXNnX3Njcm9sbCA9IGk7CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworI2lmZGVmIEZFQVRfV0lORE9XUworCWlmIChvcGVuZWRfd2luZG93KQorCSAgICB3aW5fY2xvc2UoY3Vyd2luLCBUUlVFKTsgICAgLyogQ2xvc2Ugb3BlbmVkIHdpbmRvdyAqLworI2VuZGlmCisJaWYgKHFmX3B0ci0+cWZfZm51bSAhPSAwKQorCXsKKwkgICAgLyoKKwkgICAgICogQ291bGRuJ3Qgb3BlbiBmaWxlLCBzbyBwdXQgaW5kZXggYmFjayB3aGVyZSBpdCB3YXMuICBUaGlzIGNvdWxkCisJICAgICAqIGhhcHBlbiBpZiB0aGUgZmlsZSB3YXMgcmVhZG9ubHkgYW5kIHdlIGNoYW5nZWQgc29tZXRoaW5nLgorCSAgICAgKi8KKyNpZmRlZiBGRUFUX1dJTkRPV1MKK2ZhaWxlZDoKKyNlbmRpZgorCSAgICBxZl9wdHIgPSBvbGRfcWZfcHRyOworCSAgICBxZl9pbmRleCA9IG9sZF9xZl9pbmRleDsKKwl9CisgICAgfQordGhlZW5kOgorICAgIHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX3B0ciA9IHFmX3B0cjsKKyAgICBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9pbmRleCA9IHFmX2luZGV4OworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIGlmIChwX3N3YiAhPSBvbGRfc3diICYmIG9wZW5lZF93aW5kb3cpCisgICAgeworCS8qIFJlc3RvcmUgb2xkICdzd2l0Y2hidWYnIHZhbHVlLCBidXQgbm90IHdoZW4gYW4gYXV0b2NvbW1hbmQgb3IKKwkgKiBtb2RlbGluZSBoYXMgY2hhbmdlZCB0aGUgdmFsdWUuICovCisJaWYgKHBfc3diID09IGVtcHR5X29wdGlvbikKKwkgICAgcF9zd2IgPSBvbGRfc3diOworCWVsc2UKKwkgICAgZnJlZV9zdHJpbmdfb3B0aW9uKG9sZF9zd2IpOworICAgIH0KKyNlbmRpZgorfQorCisvKgorICogIjpjbGlzdCI6IGxpc3QgYWxsIGVycm9ycworICovCisgICAgdm9pZAorcWZfbGlzdChlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGJ1Zl9UCQkqYnVmOworICAgIGNoYXJfdQkJKmZuYW1lOworICAgIHN0cnVjdCBxZl9saW5lCSpxZnA7CisgICAgaW50CQkJaTsKKyAgICBpbnQJCQlpZHgxID0gMTsKKyAgICBpbnQJCQlpZHgyID0gLTE7CisgICAgaW50CQkJbmVlZF9yZXR1cm4gPSBUUlVFOworICAgIGludAkJCWxhc3RfcHJpbnRlZCA9IDE7CisgICAgY2hhcl91CQkqYXJnID0gZWFwLT5hcmc7CisgICAgaW50CQkJYWxsID0gZWFwLT5mb3JjZWl0OwkvKiBpZiBub3QgOmNsISwgb25seSBzaG93CisJCQkJCQkgICByZWNvZ25pc2VkIGVycm9ycyAqLworCisgICAgaWYgKHFmX2N1cmxpc3QgPj0gcWZfbGlzdGNvdW50IHx8IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX2NvdW50ID09IDApCisgICAgeworCUVNU0coXyhlX3F1aWNrZml4KSk7CisJcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWdldF9saXN0X3JhbmdlKCZhcmcsICZpZHgxLCAmaWR4MikgfHwgKmFyZyAhPSBOVUwpCisgICAgeworCUVNU0coXyhlX3RyYWlsaW5nKSk7CisJcmV0dXJuOworICAgIH0KKyAgICBpID0gcWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfY291bnQ7CisgICAgaWYgKGlkeDEgPCAwKQorCWlkeDEgPSAoLWlkeDEgPiBpKSA/IDAgOiBpZHgxICsgaSArIDE7CisgICAgaWYgKGlkeDIgPCAwKQorCWlkeDIgPSAoLWlkeDIgPiBpKSA/IDAgOiBpZHgyICsgaSArIDE7CisKKyAgICBtb3JlX2JhY2tfdXNlZCA9IFRSVUU7CisgICAgaWYgKHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX25vbmV2YWxpZCkKKwlhbGwgPSBUUlVFOworICAgIHFmcCA9IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX3N0YXJ0OworICAgIGZvciAoaSA9IDE7ICFnb3RfaW50ICYmIGkgPD0gcWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfY291bnQ7ICkKKyAgICB7CisJaWYgKChxZnAtPnFmX3ZhbGlkIHx8IGFsbCkgJiYgaWR4MSA8PSBpICYmIGkgPD0gaWR4MikKKwl7CisJICAgIGlmIChuZWVkX3JldHVybikKKwkgICAgeworCQltc2dfcHV0Y2hhcignXG4nKTsKKwkJbmVlZF9yZXR1cm4gPSBGQUxTRTsKKwkgICAgfQorCSAgICBpZiAobW9yZV9iYWNrID09IDApCisJICAgIHsKKwkJZm5hbWUgPSBOVUxMOworCQlpZiAocWZwLT5xZl9mbnVtICE9IDAKKwkJCSAgICAgICYmIChidWYgPSBidWZsaXN0X2ZpbmRucihxZnAtPnFmX2ZudW0pKSAhPSBOVUxMKQorCQl7CisJCSAgICBmbmFtZSA9IGJ1Zi0+Yl9mbmFtZTsKKwkJICAgIGlmIChxZnAtPnFmX3R5cGUgPT0gMSkJLyogOmhlbHBncmVwICovCisJCQlmbmFtZSA9IGdldHRhaWwoZm5hbWUpOworCQl9CisJCWlmIChmbmFtZSA9PSBOVUxMKQorCQkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgIiUyZCIsIGkpOworCQllbHNlCisJCSAgICBzcHJpbnRmKChjaGFyICopSU9idWZmLCAiJTJkICVzIiwgaSwgKGNoYXIgKilmbmFtZSk7CisJCW1zZ19vdXR0cmFuc19hdHRyKElPYnVmZiwgaSA9PSBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9pbmRleAorCQkJPyBobF9hdHRyKEhMRl9MKSA6IGhsX2F0dHIoSExGX0QpKTsKKwkJaWYgKHFmcC0+cWZfbG51bSA9PSAwKQorCQkgICAgSU9idWZmWzBdID0gTlVMOworCQllbHNlIGlmIChxZnAtPnFmX2NvbCA9PSAwKQorCQkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgIjolbGQiLCBxZnAtPnFmX2xudW0pOworCQllbHNlCisJCSAgICBzcHJpbnRmKChjaGFyICopSU9idWZmLCAiOiVsZCBjb2wgJWQiLAorCQkJCQkJICAgcWZwLT5xZl9sbnVtLCBxZnAtPnFmX2NvbCk7CisJCXNwcmludGYoKGNoYXIgKilJT2J1ZmYgKyBTVFJMRU4oSU9idWZmKSwgIiVzOiAiLAorCQkJCSAgKGNoYXIgKilxZl90eXBlcyhxZnAtPnFmX3R5cGUsIHFmcC0+cWZfbnIpKTsKKwkJbXNnX3B1dHNfYXR0cihJT2J1ZmYsIGhsX2F0dHIoSExGX04pKTsKKwkJLyogUmVtb3ZlIG5ld2xpbmVzIGFuZCBsZWFkaW5nIHdoaXRlc3BhY2UgZnJvbSB0aGUgdGV4dC4KKwkJICogRm9yIGFuIHVucmVjb2duaXplZCBsaW5lIGtlZXAgdGhlIGluZGVudCwgdGhlIGNvbXBpbGVyIG1heQorCQkgKiBtYXJrIGEgd29yZCB3aXRoIF5eXl4uICovCisJCXFmX2ZtdF90ZXh0KChmbmFtZSAhPSBOVUxMIHx8IHFmcC0+cWZfbG51bSAhPSAwKQorCQkJCSAgICAgPyBza2lwd2hpdGUocWZwLT5xZl90ZXh0KSA6IHFmcC0+cWZfdGV4dCwKKwkJCQkJCQkgICAgICBJT2J1ZmYsIElPU0laRSk7CisJCW1zZ19wcnRfbGluZShJT2J1ZmYpOworCQlvdXRfZmx1c2goKTsJCS8qIHNob3cgb25lIGxpbmUgYXQgYSB0aW1lICovCisJCW5lZWRfcmV0dXJuID0gVFJVRTsKKwkJbGFzdF9wcmludGVkID0gaTsKKwkgICAgfQorCX0KKwlpZiAobW9yZV9iYWNrKQorCXsKKwkgICAgLyogc2Nyb2xsaW5nIGJhY2t3YXJkcyBmcm9tIHRoZSBtb3JlLXByb21wdCAqLworCSAgICAvKiBUT0RPOiBjb21wdXRlIHRoZSBudW1iZXIgb2YgaXRlbXMgZnJvbSB0aGUgc2NyZWVuIGxpbmVzICovCisJICAgIG1vcmVfYmFjayA9IG1vcmVfYmFjayAqIDIgLSAxOworCSAgICB3aGlsZSAoaSA+IGxhc3RfcHJpbnRlZCAtIG1vcmVfYmFjayAmJiBpID4gaWR4MSkKKwkgICAgeworCQlkbworCQl7CisJCSAgICBxZnAgPSBxZnAtPnFmX3ByZXY7CisJCSAgICAtLWk7CisJCX0KKwkJd2hpbGUgKGkgPiBpZHgxICYmICFxZnAtPnFmX3ZhbGlkICYmICFhbGwpOworCSAgICB9CisJICAgIG1vcmVfYmFjayA9IDA7CisJfQorCWVsc2UKKwl7CisJICAgIHFmcCA9IHFmcC0+cWZfbmV4dDsKKwkgICAgKytpOworCX0KKwl1aV9icmVha2NoZWNrKCk7CisgICAgfQorICAgIG1vcmVfYmFja191c2VkID0gRkFMU0U7Cit9CisKKy8qCisgKiBSZW1vdmUgbmV3bGluZXMgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSBmcm9tIGFuIGVycm9yIG1lc3NhZ2UuCisgKiBQdXQgdGhlIHJlc3VsdCBpbiAiYnVmW2J1ZnNpemVdIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitxZl9mbXRfdGV4dCh0ZXh0LCBidWYsIGJ1ZnNpemUpCisgICAgY2hhcl91CSp0ZXh0OworICAgIGNoYXJfdQkqYnVmOworICAgIGludAkJYnVmc2l6ZTsKK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpwID0gdGV4dDsKKworICAgIGZvciAoaSA9IDA7ICpwICE9IE5VTCAmJiBpIDwgYnVmc2l6ZSAtIDE7ICsraSkKKyAgICB7CisJaWYgKCpwID09ICdcbicpCisJeworCSAgICBidWZbaV0gPSAnICc7CisJICAgIHdoaWxlICgqKytwICE9IE5VTCkKKwkJaWYgKCF2aW1faXN3aGl0ZSgqcCkgJiYgKnAgIT0gJ1xuJykKKwkJICAgIGJyZWFrOworCX0KKwllbHNlCisJICAgIGJ1ZltpXSA9ICpwKys7CisgICAgfQorICAgIGJ1ZltpXSA9IE5VTDsKK30KKworLyoKKyAqICI6Y29sZGVyIFtjb3VudF0iOiBVcCBpbiB0aGUgcXVpY2tmaXggc3RhY2suCisgKiAiOmNuZXdlciBbY291bnRdIjogRG93biBpbiB0aGUgcXVpY2tmaXggc3RhY2suCisgKi8KKyAgICB2b2lkCitxZl9hZ2UoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWNvdW50OworCisgICAgaWYgKGVhcC0+YWRkcl9jb3VudCAhPSAwKQorCWNvdW50ID0gZWFwLT5saW5lMjsKKyAgICBlbHNlCisJY291bnQgPSAxOworICAgIHdoaWxlIChjb3VudC0tKQorICAgIHsKKwlpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2NvbGRlcikKKwl7CisJICAgIGlmIChxZl9jdXJsaXN0ID09IDApCisJICAgIHsKKwkJRU1TRyhfKCJFMzgwOiBBdCBib3R0b20gb2YgcXVpY2tmaXggc3RhY2siKSk7CisJCXJldHVybjsKKwkgICAgfQorCSAgICAtLXFmX2N1cmxpc3Q7CisJfQorCWVsc2UKKwl7CisJICAgIGlmIChxZl9jdXJsaXN0ID49IHFmX2xpc3Rjb3VudCAtIDEpCisJICAgIHsKKwkJRU1TRyhfKCJFMzgxOiBBdCB0b3Agb2YgcXVpY2tmaXggc3RhY2siKSk7CisJCXJldHVybjsKKwkgICAgfQorCSAgICArK3FmX2N1cmxpc3Q7CisJfQorICAgIH0KKyAgICBxZl9tc2coKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitxZl9tc2coKQoreworICAgIHNtc2coKGNoYXJfdSAqKV8oImVycm9yIGxpc3QgJWQgb2YgJWQ7ICVkIGVycm9ycyIpLAorCSAgICBxZl9jdXJsaXN0ICsgMSwgcWZfbGlzdGNvdW50LCBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9jb3VudCk7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgcWZfdXBkYXRlX2J1ZmZlcigpOworI2VuZGlmCit9CisKKy8qCisgKiBmcmVlIHRoZSBlcnJvciBsaXN0CisgKi8KKyAgICBzdGF0aWMgdm9pZAorcWZfZnJlZShpZHgpCisgICAgaW50CQlpZHg7Cit7CisgICAgc3RydWN0IHFmX2xpbmUgKnFmcDsKKworICAgIHdoaWxlIChxZl9saXN0c1tpZHhdLnFmX2NvdW50KQorICAgIHsKKwlxZnAgPSBxZl9saXN0c1tpZHhdLnFmX3N0YXJ0LT5xZl9uZXh0OworCXZpbV9mcmVlKHFmX2xpc3RzW2lkeF0ucWZfc3RhcnQtPnFmX3RleHQpOworCXZpbV9mcmVlKHFmX2xpc3RzW2lkeF0ucWZfc3RhcnQpOworCXFmX2xpc3RzW2lkeF0ucWZfc3RhcnQgPSBxZnA7CisJLS1xZl9saXN0c1tpZHhdLnFmX2NvdW50OworICAgIH0KK30KKworLyoKKyAqIHFmX21hcmtfYWRqdXN0OiBhZGp1c3QgbWFya3MKKyAqLworICAgdm9pZAorcWZfbWFya19hZGp1c3QobGluZTEsIGxpbmUyLCBhbW91bnQsIGFtb3VudF9hZnRlcikKKyAgICBsaW5lbnJfVAlsaW5lMTsKKyAgICBsaW5lbnJfVAlsaW5lMjsKKyAgICBsb25nCWFtb3VudDsKKyAgICBsb25nCWFtb3VudF9hZnRlcjsKK3sKKyAgICBpbnQJCQlpOworICAgIHN0cnVjdCBxZl9saW5lCSpxZnA7CisgICAgaW50CQkJaWR4OworCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBxZl9saXN0Y291bnQ7ICsraWR4KQorCWlmIChxZl9saXN0c1tpZHhdLnFmX2NvdW50KQorCSAgICBmb3IgKGkgPSAwLCBxZnAgPSBxZl9saXN0c1tpZHhdLnFmX3N0YXJ0OworCQkgICAgICAgaSA8IHFmX2xpc3RzW2lkeF0ucWZfY291bnQ7ICsraSwgcWZwID0gcWZwLT5xZl9uZXh0KQorCQlpZiAocWZwLT5xZl9mbnVtID09IGN1cmJ1Zi0+Yl9mbnVtKQorCQl7CisJCSAgICBpZiAocWZwLT5xZl9sbnVtID49IGxpbmUxICYmIHFmcC0+cWZfbG51bSA8PSBsaW5lMikKKwkJICAgIHsKKwkJCWlmIChhbW91bnQgPT0gTUFYTE5VTSkKKwkJCSAgICBxZnAtPnFmX2NsZWFyZWQgPSBUUlVFOworCQkJZWxzZQorCQkJICAgIHFmcC0+cWZfbG51bSArPSBhbW91bnQ7CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChhbW91bnRfYWZ0ZXIgJiYgcWZwLT5xZl9sbnVtID4gbGluZTIpCisJCQlxZnAtPnFmX2xudW0gKz0gYW1vdW50X2FmdGVyOworCQl9Cit9CisKKy8qCisgKiBNYWtlIGEgbmljZSBtZXNzYWdlIG91dCBvZiB0aGUgZXJyb3IgY2hhcmFjdGVyIGFuZCB0aGUgZXJyb3IgbnVtYmVyOgorICogIGNoYXIgICAgbnVtYmVyCW1lc3NhZ2UKKyAqICBlIG9yIEUgICAgMAkJIiBlcnJvciIKKyAqICB3IG9yIFcgICAgMAkJIiB3YXJuaW5nIgorICogIGkgb3IgSSAgICAwCQkiIGluZm8iCisgKiAgMAkgICAgICAwCQkiIgorICogIG90aGVyICAgICAwCQkiIGMiCisgKiAgZSBvciBFICAgIG4JCSIgZXJyb3IgbiIKKyAqICB3IG9yIFcgICAgbgkJIiB3YXJuaW5nIG4iCisgKiAgaSBvciBJICAgIG4JCSIgaW5mbyBuIgorICogIDAJICAgICAgbgkJIiBlcnJvciBuIgorICogIG90aGVyICAgICBuCQkiIGMgbiIKKyAqICAxCSAgICAgIHgJCSIiCTpoZWxwZ3JlcAorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitxZl90eXBlcyhjLCBucikKKyAgICBpbnQgYywgbnI7Cit7CisgICAgc3RhdGljIGNoYXJfdQlidWZbMjBdOworICAgIHN0YXRpYyBjaGFyX3UJY2NbM107CisgICAgY2hhcl91CQkqcDsKKworICAgIGlmIChjID09ICdXJyB8fCBjID09ICd3JykKKwlwID0gKGNoYXJfdSAqKSIgd2FybmluZyI7CisgICAgZWxzZSBpZiAoYyA9PSAnSScgfHwgYyA9PSAnaScpCisJcCA9IChjaGFyX3UgKikiIGluZm8iOworICAgIGVsc2UgaWYgKGMgPT0gJ0UnIHx8IGMgPT0gJ2UnIHx8IChjID09IDAgJiYgbnIgPiAwKSkKKwlwID0gKGNoYXJfdSAqKSIgZXJyb3IiOworICAgIGVsc2UgaWYgKGMgPT0gMCB8fCBjID09IDEpCisJcCA9IChjaGFyX3UgKikiIjsKKyAgICBlbHNlCisgICAgeworCWNjWzBdID0gJyAnOworCWNjWzFdID0gYzsKKwljY1syXSA9IE5VTDsKKwlwID0gY2M7CisgICAgfQorCisgICAgaWYgKG5yIDw9IDApCisJcmV0dXJuIHA7CisKKyAgICBzcHJpbnRmKChjaGFyICopYnVmLCAiJXMgJTNkIiwgKGNoYXIgKilwLCBucik7CisgICAgcmV0dXJuIGJ1ZjsKK30KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqICI6Y3dpbmRvdyI6IG9wZW4gdGhlIHF1aWNrZml4IHdpbmRvdyBpZiB3ZSBoYXZlIGVycm9ycyB0byBkaXNwbGF5LAorICoJICAgICAgIGNsb3NlIGl0IGlmIG5vdC4KKyAqLworICAgIHZvaWQKK2V4X2N3aW5kb3coZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICB3aW5fVAkqd2luOworCisgICAgLyoKKyAgICAgKiBMb29rIGZvciBhbiBleGlzdGluZyBxdWlja2ZpeCB3aW5kb3cuCisgICAgICovCisgICAgZm9yICh3aW4gPSBmaXJzdHdpbjsgd2luICE9IE5VTEw7IHdpbiA9IHdpbi0+d19uZXh0KQorCWlmIChidF9xdWlja2ZpeCh3aW4tPndfYnVmZmVyKSkKKwkgICAgYnJlYWs7CisKKyAgICAvKgorICAgICAqIElmIGEgcXVpY2tmaXggd2luZG93IGlzIG9wZW4gYnV0IHdlIGhhdmUgbm8gZXJyb3JzIHRvIGRpc3BsYXksCisgICAgICogY2xvc2UgdGhlIHdpbmRvdy4gIElmIGEgcXVpY2tmaXggd2luZG93IGlzIG5vdCBvcGVuLCB0aGVuIG9wZW4KKyAgICAgKiBpdCBpZiB3ZSBoYXZlIGVycm9yczsgb3RoZXJ3aXNlLCBsZWF2ZSBpdCBjbG9zZWQuCisgICAgICovCisgICAgaWYgKHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX25vbmV2YWxpZCB8fCBxZl9jdXJsaXN0ID49IHFmX2xpc3Rjb3VudCkKKyAgICB7CisJaWYgKHdpbiAhPSBOVUxMKQorCSAgICBleF9jY2xvc2UoZWFwKTsKKyAgICB9CisgICAgZWxzZSBpZiAod2luID09IE5VTEwpCisJZXhfY29wZW4oZWFwKTsKK30KKworLyoKKyAqICI6Y2Nsb3NlIjogY2xvc2UgdGhlIHdpbmRvdyBzaG93aW5nIHRoZSBsaXN0IG9mIGVycm9ycy4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorZXhfY2Nsb3NlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgd2luX1QJKndpbjsKKworICAgIC8qCisgICAgICogRmluZCBleGlzdGluZyBxdWlja2ZpeCB3aW5kb3cgYW5kIGNsb3NlIGl0LgorICAgICAqLworICAgIGZvciAod2luID0gZmlyc3R3aW47IHdpbiAhPSBOVUxMOyB3aW4gPSB3aW4tPndfbmV4dCkKKwlpZiAoYnRfcXVpY2tmaXgod2luLT53X2J1ZmZlcikpCisJICAgIGJyZWFrOworCisgICAgaWYgKHdpbiAhPSBOVUxMKQorCXdpbl9jbG9zZSh3aW4sIEZBTFNFKTsKK30KKworLyoKKyAqICI6Y29wZW4iOiBvcGVuIGEgd2luZG93IHRoYXQgc2hvd3MgdGhlIGxpc3Qgb2YgZXJyb3JzLgorICovCisgICAgdm9pZAorZXhfY29wZW4oZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWhlaWdodDsKKyAgICBidWZfVAkqYnVmOworICAgIHdpbl9UCSp3aW47CisKKyAgICBpZiAoZWFwLT5hZGRyX2NvdW50ICE9IDApCisJaGVpZ2h0ID0gZWFwLT5saW5lMjsKKyAgICBlbHNlCisJaGVpZ2h0ID0gUUZfV0lOSEVJR0hUOworCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICByZXNldF9WSXN1YWxfYW5kX3Jlc2VsKCk7CQkJLyogc3RvcCBWaXN1YWwgbW9kZSAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUkKKyAgICBuZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEZpbmQgZXhpc3RpbmcgcXVpY2tmaXggd2luZG93LCBvciBvcGVuIGEgbmV3IG9uZS4KKyAgICAgKi8KKyAgICBmb3IgKHdpbiA9IGZpcnN0d2luOyB3aW4gIT0gTlVMTDsgd2luID0gd2luLT53X25leHQpCisJaWYgKGJ0X3F1aWNrZml4KHdpbi0+d19idWZmZXIpKQorCSAgICBicmVhazsKKyAgICBpZiAod2luICE9IE5VTEwpCisJd2luX2dvdG8od2luKTsKKyAgICBlbHNlCisgICAgeworCS8qIFRoZSBjdXJyZW50IHdpbmRvdyBiZWNvbWVzIHRoZSBwcmV2aW91cyB3aW5kb3cgYWZ0ZXJ3YXJkcy4gKi8KKwl3aW4gPSBjdXJ3aW47CisKKwkvKiBDcmVhdGUgdGhlIG5ldyB3aW5kb3cgYXQgdGhlIHZlcnkgYm90dG9tLiAqLworCXdpbl9nb3RvKGxhc3R3aW4pOworCWlmICh3aW5fc3BsaXQoaGVpZ2h0LCBXU1BfQkVMT1cpID09IEZBSUwpCisJICAgIHJldHVybjsJCS8qIG5vdCBlbm91Z2ggcm9vbSBmb3Igd2luZG93ICovCisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisJY3Vyd2luLT53X3Bfc2NiID0gRkFMU0U7CisjZW5kaWYKKworCS8qCisJICogRmluZCBleGlzdGluZyBxdWlja2ZpeCBidWZmZXIsIG9yIGNyZWF0ZSBhIG5ldyBvbmUuCisJICovCisJYnVmID0gcWZfZmluZF9idWYoKTsKKwlpZiAoYnVmID09IE5VTEwpCisJeworCSAgICAodm9pZClkb19lY21kKDAsIE5VTEwsIE5VTEwsIE5VTEwsIEVDTURfT05FLCBFQ01EX0hJREUpOworCSAgICAvKiBzd2l0Y2ggb2ZmICdzd2FwZmlsZScgKi8KKwkgICAgc2V0X29wdGlvbl92YWx1ZSgoY2hhcl91ICopInN3ZiIsIDBMLCBOVUxMLCBPUFRfTE9DQUwpOworCSAgICBzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikiYnQiLCAwTCwgKGNoYXJfdSAqKSJxdWlja2ZpeCIsCisJCQkJCQkJCSAgIE9QVF9MT0NBTCk7CisJICAgIHNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJiaCIsIDBMLCAoY2hhcl91ICopImRlbGV0ZSIsIE9QVF9MT0NBTCk7CisJICAgIHNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJkaWZmIiwgMEwsIChjaGFyX3UgKikiIiwgT1BUX0xPQ0FMKTsKKwl9CisJZWxzZSBpZiAoYnVmICE9IGN1cmJ1ZikKKwkgICAgc2V0X2N1cmJ1ZihidWYsIERPQlVGX0dPVE8pOworCisJLyogT25seSBzZXQgdGhlIGhlaWdodCB3aGVuIHRoZXJlIGlzIG5vIHdpbmRvdyB0byB0aGUgc2lkZS4gKi8KKwlpZiAoY3Vyd2luLT53X3dpZHRoID09IENvbHVtbnMpCisJICAgIHdpbl9zZXRoZWlnaHQoaGVpZ2h0KTsKKwljdXJ3aW4tPndfcF93ZmggPSBUUlVFOwkgICAgLyogc2V0ICd3aW5maXhoZWlnaHQnICovCisJaWYgKHdpbl92YWxpZCh3aW4pKQorCSAgICBwcmV2d2luID0gd2luOworICAgIH0KKworICAgIC8qCisgICAgICogRmlsbCB0aGUgYnVmZmVyIHdpdGggdGhlIHF1aWNrZml4IGxpc3QuCisgICAgICovCisgICAgcWZfZmlsbF9idWZmZXIoKTsKKworICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX2luZGV4OworICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKyAgICBjaGVja19jdXJzb3IoKTsKKyAgICB1cGRhdGVfdG9wbGluZSgpOwkJLyogc2Nyb2xsIHRvIHNob3cgdGhlIGxpbmUgKi8KK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IGVudHJ5IChsaW5lIG51bWJlciBpbiB0aGUgcXVpY2tmaXgKKyAqIHdpbmRvdykuCisgKi8KKyAgICAgbGluZW5yX1QKK3FmX2N1cnJlbnRfZW50cnkoKQoreworICAgIHJldHVybiBxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9pbmRleDsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBxdWlja2ZpeCB3aW5kb3cgdG8gdGhlIGN1cnJlbnQgZXJyb3IuCisgKiBSZXR1cm4gVFJVRSBpZiB0aGVyZSBpcyBhIHF1aWNrZml4IHdpbmRvdy4KKyAqLworICAgIHN0YXRpYyBpbnQKK3FmX3dpbl9wb3NfdXBkYXRlKG9sZF9xZl9pbmRleCkKKyAgICBpbnQJCW9sZF9xZl9pbmRleDsJLyogcHJldmlvdXMgcWZfaW5kZXggb3IgemVybyAqLworeworICAgIHdpbl9UCSp3aW47CisgICAgaW50CQlxZl9pbmRleCA9IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX2luZGV4OworCisgICAgLyoKKyAgICAgKiBQdXQgdGhlIGN1cnNvciBvbiB0aGUgY3VycmVudCBlcnJvciBpbiB0aGUgcXVpY2tmaXggd2luZG93LCBzbyB0aGF0CisgICAgICogaXQncyB2aWV3YWJsZS4KKyAgICAgKi8KKyAgICBmb3IgKHdpbiA9IGZpcnN0d2luOyB3aW4gIT0gTlVMTDsgd2luID0gd2luLT53X25leHQpCisJaWYgKGJ0X3F1aWNrZml4KHdpbi0+d19idWZmZXIpKQorCSAgICBicmVhazsKKyAgICBpZiAod2luICE9IE5VTEwKKwkgICAgJiYgcWZfaW5kZXggPD0gd2luLT53X2J1ZmZlci0+Yl9tbC5tbF9saW5lX2NvdW50CisJICAgICYmIG9sZF9xZl9pbmRleCAhPSBxZl9pbmRleCkKKyAgICB7CisJd2luX1QJKm9sZF9jdXJ3aW4gPSBjdXJ3aW47CisKKwljdXJ3aW4gPSB3aW47CisJY3VyYnVmID0gd2luLT53X2J1ZmZlcjsKKwlpZiAocWZfaW5kZXggPiBvbGRfcWZfaW5kZXgpCisJeworCSAgICBjdXJ3aW4tPndfcmVkcmF3X3RvcCA9IG9sZF9xZl9pbmRleDsKKwkgICAgY3Vyd2luLT53X3JlZHJhd19ib3QgPSBxZl9pbmRleDsKKwl9CisJZWxzZQorCXsKKwkgICAgY3Vyd2luLT53X3JlZHJhd190b3AgPSBxZl9pbmRleDsKKwkgICAgY3Vyd2luLT53X3JlZHJhd19ib3QgPSBvbGRfcWZfaW5kZXg7CisJfQorCWN1cndpbi0+d19jdXJzb3IubG51bSA9IHFmX2luZGV4OworCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKwl1cGRhdGVfdG9wbGluZSgpOwkJLyogc2Nyb2xsIHRvIHNob3cgdGhlIGxpbmUgKi8KKwlyZWRyYXdfbGF0ZXIoVkFMSUQpOworCWN1cndpbi0+d19yZWRyX3N0YXR1cyA9IFRSVUU7CS8qIHVwZGF0ZSBydWxlciAqLworCWN1cndpbiA9IG9sZF9jdXJ3aW47CisJY3VyYnVmID0gY3Vyd2luLT53X2J1ZmZlcjsKKyAgICB9CisgICAgcmV0dXJuIHdpbiAhPSBOVUxMOworfQorCisvKgorICogRmluZCBxdWlja2ZpeCBidWZmZXIuCisgKi8KKyAgICBzdGF0aWMgYnVmX1QgKgorcWZfZmluZF9idWYoKQoreworICAgIGJ1Zl9UCSpidWY7CisKKyAgICBmb3IgKGJ1ZiA9IGZpcnN0YnVmOyBidWYgIT0gTlVMTDsgYnVmID0gYnVmLT5iX25leHQpCisJaWYgKGJ0X3F1aWNrZml4KGJ1ZikpCisJICAgIGJyZWFrOworICAgIHJldHVybiBidWY7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBxdWlja2ZpeCBidWZmZXIuICBJZiBpdCBleGlzdHMsIHVwZGF0ZSB0aGUgY29udGVudHMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcWZfdXBkYXRlX2J1ZmZlcigpCit7CisgICAgYnVmX1QJKmJ1ZjsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBhY29fc2F2ZV9UCWFjbzsKKyNlbHNlCisgICAgYnVmX1QJKnNhdmVfY3VyYnVmOworI2VuZGlmCisKKyAgICAvKiBDaGVjayBpZiBhIGJ1ZmZlciBmb3IgdGhlIHF1aWNrZml4IGxpc3QgZXhpc3RzLiAgVXBkYXRlIGl0LiAqLworICAgIGJ1ZiA9IHFmX2ZpbmRfYnVmKCk7CisgICAgaWYgKGJ1ZiAhPSBOVUxMKQorICAgIHsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkvKiBzZXQgY3Vyd2luL2N1cmJ1ZiB0byBidWYgYW5kIHNhdmUgYSBmZXcgdGhpbmdzICovCisJYXVjbWRfcHJlcGJ1ZigmYWNvLCBidWYpOworI2Vsc2UKKwlzYXZlX2N1cmJ1ZiA9IGN1cmJ1ZjsKKwljdXJidWYgPSBidWY7CisjZW5kaWYKKworCXFmX2ZpbGxfYnVmZmVyKCk7CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKwkvKiByZXN0b3JlIGN1cndpbi9jdXJidWYgYW5kIGEgZmV3IG90aGVyIHRoaW5ncyAqLworCWF1Y21kX3Jlc3RidWYoJmFjbyk7CisjZWxzZQorCWN1cmJ1ZiA9IHNhdmVfY3VyYnVmOworI2VuZGlmCisKKwkodm9pZClxZl93aW5fcG9zX3VwZGF0ZSgwKTsKKyAgICB9Cit9CisKKy8qCisgKiBGaWxsIGN1cnJlbnQgYnVmZmVyIHdpdGggcXVpY2tmaXggZXJyb3JzLCByZXBsYWNpbmcgYW55IHByZXZpb3VzIGNvbnRlbnRzLgorICogY3VyYnVmIG11c3QgYmUgdGhlIHF1aWNrZml4IGJ1ZmZlciEKKyAqLworICAgIHN0YXRpYyB2b2lkCitxZl9maWxsX2J1ZmZlcigpCit7CisgICAgbGluZW5yX1QJCWxudW07CisgICAgc3RydWN0IHFmX2xpbmUJKnFmcDsKKyAgICBidWZfVAkJKmVycmJ1ZjsKKyAgICBpbnQJCQlsZW47CisgICAgaW50CQkJb2xkX0tleVR5cGVkID0gS2V5VHlwZWQ7CisKKyAgICAvKiBkZWxldGUgYWxsIGV4aXN0aW5nIGxpbmVzICovCisgICAgd2hpbGUgKChjdXJidWYtPmJfbWwubWxfZmxhZ3MgJiBNTF9FTVBUWSkgPT0gMCkKKwkodm9pZCltbF9kZWxldGUoKGxpbmVucl9UKTEsIEZBTFNFKTsKKworICAgIC8qIENoZWNrIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvIGRpc3BsYXkgKi8KKyAgICBpZiAocWZfY3VybGlzdCA8IHFmX2xpc3Rjb3VudCkKKyAgICB7CisJLyogQWRkIG9uZSBsaW5lIGZvciBlYWNoIGVycm9yICovCisJcWZwID0gcWZfbGlzdHNbcWZfY3VybGlzdF0ucWZfc3RhcnQ7CisJZm9yIChsbnVtID0gMDsgbG51bSA8IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX2NvdW50OyArK2xudW0pCisJeworCSAgICBpZiAocWZwLT5xZl9mbnVtICE9IDAKKwkJICAgICYmIChlcnJidWYgPSBidWZsaXN0X2ZpbmRucihxZnAtPnFmX2ZudW0pKSAhPSBOVUxMCisJCSAgICAmJiBlcnJidWYtPmJfZm5hbWUgIT0gTlVMTCkKKwkgICAgeworCQlpZiAocWZwLT5xZl90eXBlID09IDEpCS8qIDpoZWxwZ3JlcCAqLworCQkgICAgU1RSQ1BZKElPYnVmZiwgZ2V0dGFpbChlcnJidWYtPmJfZm5hbWUpKTsKKwkJZWxzZQorCQkgICAgU1RSQ1BZKElPYnVmZiwgZXJyYnVmLT5iX2ZuYW1lKTsKKwkJbGVuID0gKGludClTVFJMRU4oSU9idWZmKTsKKwkgICAgfQorCSAgICBlbHNlCisJCWxlbiA9IDA7CisJICAgIElPYnVmZltsZW4rK10gPSAnfCc7CisKKwkgICAgaWYgKHFmcC0+cWZfbG51bSA+IDApCisJICAgIHsKKwkJc3ByaW50ZigoY2hhciAqKUlPYnVmZiArIGxlbiwgIiVsZCIsIHFmcC0+cWZfbG51bSk7CisJCWxlbiArPSAoaW50KVNUUkxFTihJT2J1ZmYgKyBsZW4pOworCisJCWlmIChxZnAtPnFmX2NvbCA+IDApCisJCXsKKwkJICAgIHNwcmludGYoKGNoYXIgKilJT2J1ZmYgKyBsZW4sICIgY29sICVkIiwgcWZwLT5xZl9jb2wpOworCQkgICAgbGVuICs9IChpbnQpU1RSTEVOKElPYnVmZiArIGxlbik7CisJCX0KKworCQlzcHJpbnRmKChjaGFyICopSU9idWZmICsgbGVuLCAiJXMiLAorCQkJCSAgKGNoYXIgKilxZl90eXBlcyhxZnAtPnFmX3R5cGUsIHFmcC0+cWZfbnIpKTsKKwkJbGVuICs9IChpbnQpU1RSTEVOKElPYnVmZiArIGxlbik7CisJICAgIH0KKwkgICAgSU9idWZmW2xlbisrXSA9ICd8JzsKKwkgICAgSU9idWZmW2xlbisrXSA9ICcgJzsKKworCSAgICAvKiBSZW1vdmUgbmV3bGluZXMgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSBmcm9tIHRoZSB0ZXh0LgorCSAgICAgKiBGb3IgYW4gdW5yZWNvZ25pemVkIGxpbmUga2VlcCB0aGUgaW5kZW50LCB0aGUgY29tcGlsZXIgbWF5CisJICAgICAqIG1hcmsgYSB3b3JkIHdpdGggXl5eXi4gKi8KKwkgICAgcWZfZm10X3RleHQobGVuID4gMyA/IHNraXB3aGl0ZShxZnAtPnFmX3RleHQpIDogcWZwLT5xZl90ZXh0LAorCQkJCQkJICBJT2J1ZmYgKyBsZW4sIElPU0laRSAtIGxlbik7CisKKwkgICAgaWYgKG1sX2FwcGVuZChsbnVtLCBJT2J1ZmYsIChjb2xucl9UKVNUUkxFTihJT2J1ZmYpICsgMSwgRkFMU0UpCisJCQkJCQkJCSAgICAgID09IEZBSUwpCisJCWJyZWFrOworCSAgICBxZnAgPSBxZnAtPnFmX25leHQ7CisJfQorCS8qIERlbGV0ZSB0aGUgZW1wdHkgbGluZSB3aGljaCBpcyBub3cgYXQgdGhlIGVuZCAqLworCSh2b2lkKW1sX2RlbGV0ZShsbnVtICsgMSwgRkFMU0UpOworICAgIH0KKworICAgIC8qIGNvcnJlY3QgY3Vyc29yIHBvc2l0aW9uICovCisgICAgY2hlY2tfbG51bXMoVFJVRSk7CisKKyAgICAvKiBTZXQgdGhlICdmaWxldHlwZScgdG8gInFmIiBlYWNoIHRpbWUgYWZ0ZXIgZmlsbGluZyB0aGUgYnVmZmVyLiAgVGhpcworICAgICAqIHJlc2VtYmxlcyByZWFkaW5nIGEgZmlsZSBpbnRvIGEgYnVmZmVyLCBpdCdzIG1vcmUgbG9naWNhbCB3aGVuIHVzaW5nCisgICAgICogYXV0b2NvbW1hbmRzLiAqLworICAgIHNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJmdCIsIDBMLCAoY2hhcl91ICopInFmIiwgT1BUX0xPQ0FMKTsKKyAgICBjdXJidWYtPmJfcF9tYSA9IEZBTFNFOworCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgYXBwbHlfYXV0b2NtZHMoRVZFTlRfQlVGUkVBRFBPU1QsIChjaGFyX3UgKikicXVpY2tmaXgiLCBOVUxMLAorCQkJCQkJCSAgICAgICBGQUxTRSwgY3VyYnVmKTsKKyAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZXSU5FTlRFUiwgKGNoYXJfdSAqKSJxdWlja2ZpeCIsIE5VTEwsCisJCQkJCQkJICAgICAgIEZBTFNFLCBjdXJidWYpOworI2VuZGlmCisKKyAgICAvKiBtYWtlIHN1cmUgaXQgd2lsbCBiZSByZWRyYXduICovCisgICAgcmVkcmF3X2N1cmJ1Zl9sYXRlcihOT1RfVkFMSUQpOworCisgICAgLyogUmVzdG9yZSBLZXlUeXBlZCwgc2V0dGluZyAnZmlsZXR5cGUnIG1heSByZXNldCBpdC4gKi8KKyAgICBLZXlUeXBlZCA9IG9sZF9LZXlUeXBlZDsKK30KKworI2VuZGlmIC8qIEZFQVRfV0lORE9XUyAqLworCisvKgorICogUmV0dXJuIFRSVUUgaWYgImJ1ZiIgaXMgdGhlIHF1aWNrZml4IGJ1ZmZlci4KKyAqLworICAgIGludAorYnRfcXVpY2tmaXgoYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgcmV0dXJuIChidWYtPmJfcF9idFswXSA9PSAncScpOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgImJ1ZiIgaXMgYSAibm9maWxlIiBidWZmZXIuCisgKi8KKyAgICBpbnQKK2J0X25vZmlsZShidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICByZXR1cm4gKGJ1Zi0+Yl9wX2J0WzBdID09ICduJyAmJiBidWYtPmJfcF9idFsyXSA9PSAnZicpOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgImJ1ZiIgaXMgYSAibm93cml0ZSIgb3IgIm5vZmlsZSIgYnVmZmVyLgorICovCisgICAgaW50CitidF9kb250d3JpdGUoYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgcmV0dXJuIChidWYtPmJfcF9idFswXSA9PSAnbicpOworfQorCisgICAgaW50CitidF9kb250d3JpdGVfbXNnKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIGlmIChidF9kb250d3JpdGUoYnVmKSkKKyAgICB7CisJRU1TRyhfKCJFMzgyOiBDYW5ub3Qgd3JpdGUsICdidWZ0eXBlJyBvcHRpb24gaXMgc2V0IikpOworCXJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgYnVmZmVyIHNob3VsZCBiZSBoaWRkZW4sIGFjY29yZGluZyB0byAnaGlkZGVuJywgIjpoaWRlIgorICogYW5kICdidWZoaWRkZW4nLgorICovCisgICAgaW50CitidWZfaGlkZShidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICAvKiAnYnVmaGlkZGVuJyBvdmVycnVsZXMgJ2hpZGRlbicgYW5kICI6aGlkZSIsIGNoZWNrIGl0IGZpcnN0ICovCisgICAgc3dpdGNoIChidWYtPmJfcF9iaFswXSkKKyAgICB7CisJY2FzZSAndSc6CQkgICAgLyogInVubG9hZCIgKi8KKwljYXNlICd3JzoJCSAgICAvKiAid2lwZSIgKi8KKwljYXNlICdkJzogcmV0dXJuIEZBTFNFOwkgICAgLyogImRlbGV0ZSIgKi8KKwljYXNlICdoJzogcmV0dXJuIFRSVUU7CSAgICAvKiAiaGlkZSIgKi8KKyAgICB9CisgICAgcmV0dXJuIChwX2hpZCB8fCBjbWRtb2QuaGlkZSk7Cit9CisKKy8qCisgKiBVc2VkIGZvciAiOm1ha2UiLCAiOmdyZXAiIGFuZCAiOmdyZXBhZGQiLgorICovCisgICAgdm9pZAorZXhfbWFrZShlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIGNoYXJfdQkqbmFtZTsKKyAgICBjaGFyX3UJKmNtZDsKKyAgICB1bnNpZ25lZAlsZW47CisKKyAgICBhdXRvd3JpdGVfYWxsKCk7CisgICAgbmFtZSA9IGdldF9tZWZfbmFtZSgpOworICAgIGlmIChuYW1lID09IE5VTEwpCisJcmV0dXJuOworICAgIG1jaF9yZW1vdmUobmFtZSk7CSAgICAvKiBpbiBjYXNlIGl0J3Mgbm90IHVuaXF1ZSAqLworCisgICAgLyoKKyAgICAgKiBJZiAnc2hlbGxwaXBlJyBlbXB0eTogZG9uJ3QgcmVkaXJlY3QgdG8gJ2Vycm9yZmlsZScuCisgICAgICovCisgICAgbGVuID0gKHVuc2lnbmVkKVNUUkxFTihwX3NocSkgKiAyICsgKHVuc2lnbmVkKVNUUkxFTihlYXAtPmFyZykgKyAxOworICAgIGlmICgqcF9zcCAhPSBOVUwpCisJbGVuICs9ICh1bnNpZ25lZClTVFJMRU4ocF9zcCkgKyAodW5zaWduZWQpU1RSTEVOKG5hbWUpICsgMzsKKyAgICBjbWQgPSBhbGxvYyhsZW4pOworICAgIGlmIChjbWQgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgc3ByaW50ZigoY2hhciAqKWNtZCwgIiVzJXMlcyIsIChjaGFyICopcF9zaHEsIChjaGFyICopZWFwLT5hcmcsCisJCQkJCQkJICAgICAgIChjaGFyICopcF9zaHEpOworICAgIGlmICgqcF9zcCAhPSBOVUwpCisJYXBwZW5kX3JlZGlyKGNtZCwgcF9zcCwgbmFtZSk7CisgICAgLyoKKyAgICAgKiBPdXRwdXQgYSBuZXdsaW5lIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGVsc2UgdGhhbiB0aGUgOm1ha2UgY29tbWFuZCB0aGF0CisgICAgICogd2FzIHR5cGVkIChpbiB3aGljaCBjYXNlIHRoZSBjdXJzb3IgaXMgaW4gY29sdW1uIDApLgorICAgICAqLworICAgIGlmIChtc2dfY29sID09IDApCisJbXNnX2RpZG91dCA9IEZBTFNFOworICAgIG1zZ19zdGFydCgpOworICAgIE1TR19QVVRTKCI6ISIpOworICAgIG1zZ19vdXR0cmFucyhjbWQpOwkJLyogc2hvdyB3aGF0IHdlIGFyZSBkb2luZyAqLworCisgICAgLyogbGV0IHRoZSBzaGVsbCBrbm93IGlmIHdlIGFyZSByZWRpcmVjdGluZyBvdXRwdXQgb3Igbm90ICovCisgICAgZG9fc2hlbGwoY21kLCAqcF9zcCAhPSBOVUwgPyBTSEVMTF9ET09VVCA6IDApOworCisjaWZkZWYgQU1JR0EKKyAgICBvdXRfZmx1c2goKTsKKwkJLyogcmVhZCB3aW5kb3cgc3RhdHVzIHJlcG9ydCBhbmQgcmVkcmF3IGJlZm9yZSBtZXNzYWdlICovCisgICAgKHZvaWQpY2hhcl9hdmFpbCgpOworI2VuZGlmCisKKyAgICBpZiAocWZfaW5pdChuYW1lLCBlYXAtPmNtZGlkeCAhPSBDTURfbWFrZSA/IHBfZ2VmbSA6IHBfZWZtLAorCQkJCQkgICAgICBlYXAtPmNtZGlkeCAhPSBDTURfZ3JlcGFkZCkgPiAwCisJICAgICYmICFlYXAtPmZvcmNlaXQpCisJcWZfanVtcCgwLCAwLCBGQUxTRSk7CQkvKiBkaXNwbGF5IGZpcnN0IGVycm9yICovCisKKyAgICBtY2hfcmVtb3ZlKG5hbWUpOworICAgIHZpbV9mcmVlKG5hbWUpOworICAgIHZpbV9mcmVlKGNtZCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG5hbWUgZm9yIHRoZSBlcnJvcmZpbGUsIGluIGFsbG9jYXRlZCBtZW1vcnkuCisgKiBGaW5kIGEgbmV3IHVuaXF1ZSBuYW1lIHdoZW4gJ21ha2VlZicgY29udGFpbnMgIiMjIi4KKyAqIFJldHVybnMgTlVMTCBmb3IgZXJyb3IuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2dldF9tZWZfbmFtZSgpCit7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqbmFtZTsKKyAgICBzdGF0aWMgaW50CXN0YXJ0ID0gLTE7CisgICAgc3RhdGljIGludAlvZmYgPSAwOworI2lmZGVmIEhBVkVfTFNUQVQKKyAgICBzdHJ1Y3Qgc3RhdAlzYjsKKyNlbmRpZgorCisgICAgaWYgKCpwX21lZiA9PSBOVUwpCisgICAgeworCW5hbWUgPSB2aW1fdGVtcG5hbWUoJ2UnKTsKKwlpZiAobmFtZSA9PSBOVUxMKQorCSAgICBFTVNHKF8oZV9ub3RtcCkpOworCXJldHVybiBuYW1lOworICAgIH0KKworICAgIGZvciAocCA9IHBfbWVmOyAqcDsgKytwKQorCWlmIChwWzBdID09ICcjJyAmJiBwWzFdID09ICcjJykKKwkgICAgYnJlYWs7CisKKyAgICBpZiAoKnAgPT0gTlVMKQorCXJldHVybiB2aW1fc3Ryc2F2ZShwX21lZik7CisKKyAgICAvKiBLZWVwIHRyeWluZyB1bnRpbCB0aGUgbmFtZSBkb2Vzbid0IGV4aXN0IHlldC4gKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwlpZiAoc3RhcnQgPT0gLTEpCisJICAgIHN0YXJ0ID0gbWNoX2dldF9waWQoKTsKKwllbHNlCisJICAgIG9mZiArPSAxOTsKKworCW5hbWUgPSBhbGxvYygodW5zaWduZWQpU1RSTEVOKHBfbWVmKSArIDMwKTsKKwlpZiAobmFtZSA9PSBOVUxMKQorCSAgICBicmVhazsKKwlTVFJDUFkobmFtZSwgcF9tZWYpOworCXNwcmludGYoKGNoYXIgKiluYW1lICsgKHAgLSBwX21lZiksICIlZCVkIiwgc3RhcnQsIG9mZik7CisJU1RSQ0FUKG5hbWUsIHAgKyAyKTsKKwlpZiAobWNoX2dldHBlcm0obmFtZSkgPCAwCisjaWZkZWYgSEFWRV9MU1RBVAorCQkgICAgLyogRG9uJ3QgYWNjZXB0IGEgc3ltYm9saWMgbGluaywgaXRzIGEgc2VjdXJpdHkgcmlzay4gKi8KKwkJICAgICYmIG1jaF9sc3RhdCgoY2hhciAqKW5hbWUsICZzYikgPCAwCisjZW5kaWYKKwkJKQorCSAgICBicmVhazsKKwl2aW1fZnJlZShuYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIG5hbWU7Cit9CisKKy8qCisgKiAiOmNjIiwgIjpjcmV3aW5kIiwgIjpjZmlyc3QiIGFuZCAiOmNsYXN0Ii4KKyAqLworICAgIHZvaWQKK2V4X2NjKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgcWZfanVtcCgwLAorCSAgICBlYXAtPmFkZHJfY291bnQgPiAwCisJICAgID8gKGludCllYXAtPmxpbmUyCisJICAgIDogZWFwLT5jbWRpZHggPT0gQ01EX2NjCisJCT8gMAorCQk6IChlYXAtPmNtZGlkeCA9PSBDTURfY3Jld2luZCB8fCBlYXAtPmNtZGlkeCA9PSBDTURfY2ZpcnN0KQorCQkgICAgPyAxCisJCSAgICA6IDMyNzY3LAorCSAgICBlYXAtPmZvcmNlaXQpOworfQorCisvKgorICogIjpjbmV4dCIsICI6Y25maWxlIiwgIjpjTmV4dCIgYW5kICI6Y3ByZXZpb3VzIi4KKyAqLworICAgIHZvaWQKK2V4X2NuZXh0KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgcWZfanVtcChlYXAtPmNtZGlkeCA9PSBDTURfY25leHQKKwkgICAgPyBGT1JXQVJECisJICAgIDogZWFwLT5jbWRpZHggPT0gQ01EX2NuZmlsZQorCQk/IEZPUldBUkRfRklMRQorCQk6IChlYXAtPmNtZGlkeCA9PSBDTURfY3BmaWxlIHx8IGVhcC0+Y21kaWR4ID09IENNRF9jTmZpbGUpCisJCSAgICA/IEJBQ0tXQVJEX0ZJTEUKKwkJICAgIDogQkFDS1dBUkQsCisJICAgIGVhcC0+YWRkcl9jb3VudCA+IDAgPyAoaW50KWVhcC0+bGluZTIgOiAxLCBlYXAtPmZvcmNlaXQpOworfQorCisvKgorICogIjpjZmlsZSIgY29tbWFuZC4KKyAqLworICAgIHZvaWQKK2V4X2NmaWxlKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKCplYXAtPmFyZyAhPSBOVUwpCisJc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0KChjaGFyX3UgKikiZWYiLCAtMSwgZWFwLT5hcmcsIE9QVF9GUkVFKTsKKyAgICBpZiAocWZfaW5pdChwX2VmLCBwX2VmbSwgVFJVRSkgPiAwICYmIGVhcC0+Y21kaWR4ID09IENNRF9jZmlsZSkKKwlxZl9qdW1wKDAsIDAsIGVhcC0+Zm9yY2VpdCk7CQkvKiBkaXNwbGF5IGZpcnN0IGVycm9yICovCit9CisKKy8qCisgKiAiOmhlbHBncmVwIHtwYXR0ZXJufSIKKyAqLworICAgIHZvaWQKK2V4X2hlbHBncmVwKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgcmVnbWF0Y2hfVAlyZWdtYXRjaDsKKyAgICBjaGFyX3UJKnNhdmVfY3BvOworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWZjb3VudDsKKyAgICBjaGFyX3UJKipmbmFtZXM7CisgICAgRklMRQkqZmQ7CisgICAgaW50CQlmaTsKKyAgICBzdHJ1Y3QgcWZfbGluZSAqcHJldnAgPSBOVUxMOworICAgIGxvbmcJbG51bTsKKworICAgIC8qIE1ha2UgJ2Nwb3B0aW9ucycgZW1wdHksIHRoZSAnbCcgZmxhZyBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4gKi8KKyAgICBzYXZlX2NwbyA9IHBfY3BvOworICAgIHBfY3BvID0gKGNoYXJfdSAqKSIiOworCisgICAgcmVnbWF0Y2gucmVncHJvZyA9IHZpbV9yZWdjb21wKGVhcC0+YXJnLCBSRV9NQUdJQyArIFJFX1NUUklORyk7CisgICAgcmVnbWF0Y2gucm1faWMgPSBGQUxTRTsKKyAgICBpZiAocmVnbWF0Y2gucmVncHJvZyAhPSBOVUxMKQorICAgIHsKKwkvKiBjcmVhdGUgYSBuZXcgcXVpY2tmaXggbGlzdCAqLworCXFmX25ld19saXN0KCk7CisKKwkvKiBHbyB0aHJvdWdoIGFsbCBkaXJlY3RvcmllcyBpbiAncnVudGltZXBhdGgnICovCisJcCA9IHBfcnRwOworCXdoaWxlICgqcCAhPSBOVUwgJiYgIWdvdF9pbnQpCisJeworCSAgICBjb3B5X29wdGlvbl9wYXJ0KCZwLCBOYW1lQnVmZiwgTUFYUEFUSEwsICIsIik7CisKKwkgICAgLyogRmluZCBhbGwgIioudHh0IiBhbmQgIiouPz94IiBmaWxlcyBpbiB0aGUgImRvYyIgZGlyZWN0b3J5LiAqLworCSAgICBhZGRfcGF0aHNlcChOYW1lQnVmZik7CisJICAgIFNUUkNBVChOYW1lQnVmZiwgImRvYy8qLlxcKHR4dFxcfD8/eFxcKSIpOworCSAgICBpZiAoZ2VuX2V4cGFuZF93aWxkY2FyZHMoMSwgJk5hbWVCdWZmLCAmZmNvdW50LAorCQkJCQkgICAgICZmbmFtZXMsIEVXX0ZJTEV8RVdfU0lMRU5UKSA9PSBPSworCQkgICAgJiYgZmNvdW50ID4gMCkKKwkgICAgeworCQlmb3IgKGZpID0gMDsgZmkgPCBmY291bnQgJiYgIWdvdF9pbnQ7ICsrZmkpCisJCXsKKwkJICAgIGZkID0gZm9wZW4oKGNoYXIgKilmbmFtZXNbZmldLCAiciIpOworCQkgICAgaWYgKGZkICE9IE5VTEwpCisJCSAgICB7CisJCQlsbnVtID0gMTsKKwkJCXdoaWxlICghdmltX2ZnZXRzKElPYnVmZiwgSU9TSVpFLCBmZCkgJiYgIWdvdF9pbnQpCisJCQl7CisJCQkgICAgaWYgKHZpbV9yZWdleGVjKCZyZWdtYXRjaCwgSU9idWZmLCAoY29sbnJfVCkwKSkKKwkJCSAgICB7CisJCQkJaW50CWwgPSBTVFJMRU4oSU9idWZmKTsKKworCQkJCS8qIHJlbW92ZSB0cmFpbGluZyBDUiwgTEYsIHNwYWNlcywgZXRjLiAqLworCQkJCXdoaWxlIChsID4gMCAmJiBJT2J1ZmZbbCAtIDFdIDw9ICcgJykKKwkJCQkgICAgIElPYnVmZlstLWxdID0gTlVMOworCisJCQkJaWYgKHFmX2FkZF9lbnRyeSgmcHJldnAsCisJCQkJCSAgICBOVUxMLAkvKiBkaXIgKi8KKwkJCQkJICAgIGZuYW1lc1tmaV0sCisJCQkJCSAgICBJT2J1ZmYsCisJCQkJCSAgICBsbnVtLAorCQkJCQkgICAgMCwJCS8qIGNvbCAqLworCQkJCQkgICAgRkFMU0UsCS8qIHZpcnRfY29sICovCisJCQkJCSAgICAwLAkJLyogbnIgKi8KKwkJCQkJICAgIDEsCQkvKiB0eXBlICovCisJCQkJCSAgICBUUlVFCS8qIHZhbGlkICovCisJCQkJCSAgICApID09IEZBSUwpCisJCQkJeworCQkJCSAgICBnb3RfaW50ID0gVFJVRTsKKwkJCQkgICAgYnJlYWs7CisJCQkJfQorCQkJICAgIH0KKwkJCSAgICArK2xudW07CisJCQkgICAgbGluZV9icmVha2NoZWNrKCk7CisJCQl9CisJCQlmY2xvc2UoZmQpOworCQkgICAgfQorCQl9CisJCUZyZWVXaWxkKGZjb3VudCwgZm5hbWVzKTsKKwkgICAgfQorCX0KKwl2aW1fZnJlZShyZWdtYXRjaC5yZWdwcm9nKTsKKworCXFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX25vbmV2YWxpZCA9IEZBTFNFOworCXFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX3B0ciA9IHFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX3N0YXJ0OworCXFmX2xpc3RzW3FmX2N1cmxpc3RdLnFmX2luZGV4ID0gMTsKKyAgICB9CisKKyAgICBwX2NwbyA9IHNhdmVfY3BvOworCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgcWZfdXBkYXRlX2J1ZmZlcigpOworI2VuZGlmCisKKyAgICAvKiBKdW1wIHRvIGZpcnN0IG1hdGNoLiAqLworICAgIGlmIChxZl9saXN0c1txZl9jdXJsaXN0XS5xZl9jb3VudCA+IDApCisJcWZfanVtcCgwLCAwLCBGQUxTRSk7Cit9CisKKyNlbmRpZiAvKiBGRUFUX1FVSUNLRklYICovCmRpZmYgLS1naXQgYS9zcmMvcmVnZXhwLmMgYi9zcmMvcmVnZXhwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcxNWExZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9yZWdleHAuYwpAQCAtMCwwICsxLDYxMTUgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogSGFuZGxpbmcgb2YgcmVndWxhciBleHByZXNzaW9uczogdmltX3JlZ2NvbXAoKSwgdmltX3JlZ2V4ZWMoKSwgdmltX3JlZ3N1YigpCisgKgorICogTk9USUNFOgorICoKKyAqIFRoaXMgaXMgTk9UIHRoZSBvcmlnaW5hbCByZWd1bGFyIGV4cHJlc3Npb24gY29kZSBhcyB3cml0dGVuIGJ5IEhlbnJ5CisgKiBTcGVuY2VyLiAgVGhpcyBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkIHNwZWNpZmljYWxseSBmb3IgdXNlIHdpdGggdGhlIFZJTQorICogZWRpdG9yLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIHNlcGFyYXRlbHkgZnJvbSBWaW0uICBJZiB5b3Ugd2FudCBhIGdvb2QKKyAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5LCBnZXQgdGhlIG9yaWdpbmFsIGNvZGUuICBUaGUgY29weXJpZ2h0IG5vdGljZQorICogdGhhdCBmb2xsb3dzIGlzIGZyb20gdGhlIG9yaWdpbmFsLgorICoKKyAqIEVORCBOT1RJQ0UKKyAqCisgKglDb3B5cmlnaHQgKGMpIDE5ODYgYnkgVW5pdmVyc2l0eSBvZiBUb3JvbnRvLgorICoJV3JpdHRlbiBieSBIZW5yeSBTcGVuY2VyLiAgTm90IGRlcml2ZWQgZnJvbSBsaWNlbnNlZCBzb2Z0d2FyZS4KKyAqCisgKglQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqCXB1cnBvc2Ugb24gYW55IGNvbXB1dGVyIHN5c3RlbSwgYW5kIHRvIHJlZGlzdHJpYnV0ZSBpdCBmcmVlbHksCisgKglzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqCTEuIFRoZSBhdXRob3IgaXMgbm90IHJlc3BvbnNpYmxlIGZvciB0aGUgY29uc2VxdWVuY2VzIG9mIHVzZSBvZgorICoJCXRoaXMgc29mdHdhcmUsIG5vIG1hdHRlciBob3cgYXdmdWwsIGV2ZW4gaWYgdGhleSBhcmlzZQorICoJCWZyb20gZGVmZWN0cyBpbiBpdC4KKyAqCisgKgkyLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQsIGVpdGhlcgorICoJCWJ5IGV4cGxpY2l0IGNsYWltIG9yIGJ5IG9taXNzaW9uLgorICoKKyAqCTMuIEFsdGVyZWQgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QKKyAqCQliZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKgorICogQmV3YXJlIHRoYXQgc29tZSBvZiB0aGlzIGNvZGUgaXMgc3VidGx5IGF3YXJlIG9mIHRoZSB3YXkgb3BlcmF0b3IKKyAqIHByZWNlZGVuY2UgaXMgc3RydWN0dXJlZCBpbiByZWd1bGFyIGV4cHJlc3Npb25zLiAgU2VyaW91cyBjaGFuZ2VzIGluCisgKiByZWd1bGFyLWV4cHJlc3Npb24gc3ludGF4IG1pZ2h0IHJlcXVpcmUgYSB0b3RhbCByZXRoaW5rLgorICoKKyAqIENoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgYnkgVG9ueSBBbmRyZXdzLCBPbGFmICdSaGlhbHRvJyBTZWliZXJ0LCBSb2JlcnQgV2ViYgorICogYW5kIEJyYW0gTW9vbGVuYWFyLgorICogTmFtZWQgY2hhcmFjdGVyIGNsYXNzIHN1cHBvcnQgYWRkZWQgYnkgV2FsdGVyIEJyaXNjb2UgKDE5OTggSnVsIDAxKQorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworI3VuZGVmIERFQlVHCisKKy8qCisgKiBUaGUgImludGVybmFsIHVzZSBvbmx5IiBmaWVsZHMgaW4gcmVnZXhwLmggYXJlIHByZXNlbnQgdG8gcGFzcyBpbmZvIGZyb20KKyAqIGNvbXBpbGUgdG8gZXhlY3V0ZSB0aGF0IHBlcm1pdHMgdGhlIGV4ZWN1dGUgcGhhc2UgdG8gcnVuIGxvdHMgZmFzdGVyIG9uCisgKiBzaW1wbGUgY2FzZXMuICBUaGV5IGFyZToKKyAqCisgKiByZWdzdGFydAljaGFyIHRoYXQgbXVzdCBiZWdpbiBhIG1hdGNoOyBOVUwgaWYgbm9uZSBvYnZpb3VzOyBDYW4gYmUgYQorICoJCW11bHRpLWJ5dGUgY2hhcmFjdGVyLgorICogcmVnYW5jaAlpcyB0aGUgbWF0Y2ggYW5jaG9yZWQgKGF0IGJlZ2lubmluZy1vZi1saW5lIG9ubHkpPworICogcmVnbXVzdAlzdHJpbmcgKHBvaW50ZXIgaW50byBwcm9ncmFtKSB0aGF0IG1hdGNoIG11c3QgaW5jbHVkZSwgb3IgTlVMTAorICogcmVnbWxlbglsZW5ndGggb2YgcmVnbXVzdCBzdHJpbmcKKyAqIHJlZ2ZsYWdzCVJGXyB2YWx1ZXMgb3InZWQgdG9nZXRoZXIKKyAqCisgKiBSZWdzdGFydCBhbmQgcmVnYW5jaCBwZXJtaXQgdmVyeSBmYXN0IGRlY2lzaW9ucyBvbiBzdWl0YWJsZSBzdGFydGluZyBwb2ludHMKKyAqIGZvciBhIG1hdGNoLCBjdXR0aW5nIGRvd24gdGhlIHdvcmsgYSBsb3QuICBSZWdtdXN0IHBlcm1pdHMgZmFzdCByZWplY3Rpb24KKyAqIG9mIGxpbmVzIHRoYXQgY2Fubm90IHBvc3NpYmx5IG1hdGNoLiAgVGhlIHJlZ211c3QgdGVzdHMgYXJlIGNvc3RseSBlbm91Z2gKKyAqIHRoYXQgdmltX3JlZ2NvbXAoKSBzdXBwbGllcyBhIHJlZ211c3Qgb25seSBpZiB0aGUgci5lLiBjb250YWlucyBzb21ldGhpbmcKKyAqIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSAoYXQgcHJlc2VudCwgdGhlIG9ubHkgc3VjaCB0aGluZyBkZXRlY3RlZCBpcyAqIG9yICsKKyAqIGF0IHRoZSBzdGFydCBvZiB0aGUgci5lLiwgd2hpY2ggY2FuIGludm9sdmUgYSBsb3Qgb2YgYmFja3VwKS4gIFJlZ21sZW4gaXMKKyAqIHN1cHBsaWVkIGJlY2F1c2UgdGhlIHRlc3QgaW4gdmltX3JlZ2V4ZWMoKSBuZWVkcyBpdCBhbmQgdmltX3JlZ2NvbXAoKSBpcworICogY29tcHV0aW5nIGl0IGFueXdheS4KKyAqLworCisvKgorICogU3RydWN0dXJlIGZvciByZWdleHAgInByb2dyYW0iLiAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGxpbmVhciBlbmNvZGluZworICogb2YgYSBub25kZXRlcm1pbmlzdGljIGZpbml0ZS1zdGF0ZSBtYWNoaW5lIChha2Egc3ludGF4IGNoYXJ0cyBvcgorICogInJhaWxyb2FkIG5vcm1hbCBmb3JtIiBpbiBwYXJzaW5nIHRlY2hub2xvZ3kpLiAgRWFjaCBub2RlIGlzIGFuIG9wY29kZQorICogcGx1cyBhICJuZXh0IiBwb2ludGVyLCBwb3NzaWJseSBwbHVzIGFuIG9wZXJhbmQuICAiTmV4dCIgcG9pbnRlcnMgb2YKKyAqIGFsbCBub2RlcyBleGNlcHQgQlJBTkNIIGFuZCBCUkFDRVNfQ09NUExFWCBpbXBsZW1lbnQgY29uY2F0ZW5hdGlvbjsgYSAibmV4dCIKKyAqIHBvaW50ZXIgd2l0aCBhIEJSQU5DSCBvbiBib3RoIGVuZHMgb2YgaXQgaXMgY29ubmVjdGluZyB0d28gYWx0ZXJuYXRpdmVzLgorICogKEhlcmUgd2UgaGF2ZSBvbmUgb2YgdGhlIHN1YnRsZSBzeW50YXggZGVwZW5kZW5jaWVzOglhbiBpbmRpdmlkdWFsIEJSQU5DSAorICogKGFzIG9wcG9zZWQgdG8gYSBjb2xsZWN0aW9uIG9mIHRoZW0pIGlzIG5ldmVyIGNvbmNhdGVuYXRlZCB3aXRoIGFueXRoaW5nCisgKiBiZWNhdXNlIG9mIG9wZXJhdG9yIHByZWNlZGVuY2UpLiAgVGhlICJuZXh0IiBwb2ludGVyIG9mIGEgQlJBQ0VTX0NPTVBMRVgKKyAqIG5vZGUgcG9pbnRzIHRvIHRoZSBub2RlIGFmdGVyIHRoZSBzdHVmZiB0byBiZSByZXBlYXRlZC4gIFRoZSBvcGVyYW5kIG9mIHNvbWUKKyAqIHR5cGVzIG9mIG5vZGUgaXMgYSBsaXRlcmFsIHN0cmluZzsgZm9yIG90aGVycywgaXQgaXMgYSBub2RlIGxlYWRpbmcgaW50byBhCisgKiBzdWItRlNNLiAgSW4gcGFydGljdWxhciwgdGhlIG9wZXJhbmQgb2YgYSBCUkFOQ0ggbm9kZSBpcyB0aGUgZmlyc3Qgbm9kZSBvZgorICogdGhlIGJyYW5jaC4JKE5CIHRoaXMgaXMgKm5vdCogYSB0cmVlIHN0cnVjdHVyZTogdGhlIHRhaWwgb2YgdGhlIGJyYW5jaAorICogY29ubmVjdHMgdG8gdGhlIHRoaW5nIGZvbGxvd2luZyB0aGUgc2V0IG9mIEJSQU5DSGVzLikKKyAqCisgKiBwYXR0ZXJuCWlzIGNvZGVkIGxpa2U6CisgKgorICoJCQkgICstLS0tLS0tLS0tLS0tLS0tLSsKKyAqCQkJICB8CQkgICAgVgorICogPGFhPlx8PGJiPglCUkFOQ0ggPGFhPiBCUkFOQ0ggPGJiPiAtLT4gRU5ECisgKgkJICAgICB8CSAgICBeCSB8CSAgICBeCisgKgkJICAgICArLS0tLS0tKwkgKy0tLS0tLS0tLS0rCisgKgorICoKKyAqCQkgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCQkgICAgICAgVgkJICB8CisgKiA8YWE+KglCUkFOQ0ggQlJBTkNIIDxhYT4gLS0+IEJBQ0sgQlJBTkNIIC0tPiBOT1RISU5HIC0tPiBFTkQKKyAqCQkgICAgIHwJICAgIHwJCSAgICBeCQkJICAgXgorICoJCSAgICAgfAkgICAgKy0tLS0tLS0tLS0tLS0tLSsJCQkgICB8CisgKgkJICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoKKyAqCisgKgkJCQkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgkJCQkJVgkJCSAgfAorICogPGFhPlx7fQlCUkFOQ0ggQlJBQ0VfTElNSVRTIC0tPiBCUkFDRV9DT01QTEVYIDxhYT4gLS0+IEJBQ0sgIEVORAorICoJCSAgICAgfAkJCQkgICAgfAkJICAgICBeCisgKgkJICAgICB8CQkJCSAgICArLS0tLS0tLS0tLS0tLS0tLSsKKyAqCQkgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKgorICogPGFhPlxAITxiYj4JQlJBTkNIIE5PTUFUQ0ggPGFhPiAtLT4gRU5EICA8YmI+IC0tPiBFTkQKKyAqCQkgICAgIHwJICAgICB8CQkgICAgICBeICAgICAgIF4KKyAqCQkgICAgIHwJICAgICArLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgfAorICoJCSAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoKKyAqCQkJCQkJICAgICAgKy0tLS0tLS0tLSsKKyAqCQkJCQkJICAgICAgfAkJVgorICogXHpbYWJjXQlCUkFOQ0ggQlJBTkNIICBhICBCUkFOQ0ggIGIgIEJSQU5DSCAgYwlCUkFOQ0gJTk9USElORyAtLT4gRU5ECisgKgkJICAgICB8CSAgICB8CSAgICAgICB8CSAgfAleCQkgICAgXgorICoJCSAgICAgfAkgICAgfAkgICAgICAgfAkgICstLS0tLSsJCSAgICB8CisgKgkJICAgICB8CSAgICB8CSAgICAgICArLS0tLS0tLS0tLS0tLS0tLSsJCSAgICB8CisgKgkJICAgICB8CSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwkJICAgIHwKKyAqCQkgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogVGhleSBhbGwgc3RhcnQgd2l0aCBhIEJSQU5DSCBmb3IgIlx8IiBhbHRlcm5hdGllcywgZXZlbiB3aGVuIHRoZXJlIGlzIG9ubHkKKyAqIG9uZSBhbHRlcm5hdGl2ZS4KKyAqLworCisvKgorICogVGhlIG9wY29kZXMgYXJlOgorICovCisKKy8qIGRlZmluaXRpb24JbnVtYmVyCQkgICBvcG5kPyAgICBtZWFuaW5nICovCisjZGVmaW5lIEVORAkJMAkvKglFbmQgb2YgcHJvZ3JhbSBvciBOT01BVENIIG9wZXJhbmQuICovCisjZGVmaW5lIEJPTAkJMQkvKglNYXRjaCAiIiBhdCBiZWdpbm5pbmcgb2YgbGluZS4gKi8KKyNkZWZpbmUgRU9MCQkyCS8qCU1hdGNoICIiIGF0IGVuZCBvZiBsaW5lLiAqLworI2RlZmluZSBCUkFOQ0gJCTMJLyogbm9kZSBNYXRjaCB0aGlzIGFsdGVybmF0aXZlLCBvciB0aGUKKwkJCQkgKgluZXh0Li4uICovCisjZGVmaW5lIEJBQ0sJCTQJLyoJTWF0Y2ggIiIsICJuZXh0IiBwdHIgcG9pbnRzIGJhY2t3YXJkLiAqLworI2RlZmluZSBFWEFDVExZCQk1CS8qIHN0cglNYXRjaCB0aGlzIHN0cmluZy4gKi8KKyNkZWZpbmUgTk9USElORwkJNgkvKglNYXRjaCBlbXB0eSBzdHJpbmcuICovCisjZGVmaW5lIFNUQVIJCTcJLyogbm9kZSBNYXRjaCB0aGlzIChzaW1wbGUpIHRoaW5nIDAgb3IgbW9yZQorCQkJCSAqCXRpbWVzLiAqLworI2RlZmluZSBQTFVTCQk4CS8qIG5vZGUgTWF0Y2ggdGhpcyAoc2ltcGxlKSB0aGluZyAxIG9yIG1vcmUKKwkJCQkgKgl0aW1lcy4gKi8KKyNkZWZpbmUgTUFUQ0gJCTkJLyogbm9kZSBtYXRjaCB0aGUgb3BlcmFuZCB6ZXJvLXdpZHRoICovCisjZGVmaW5lIE5PTUFUQ0gJCTEwCS8qIG5vZGUgY2hlY2sgZm9yIG5vIG1hdGNoIHdpdGggb3BlcmFuZCAqLworI2RlZmluZSBCRUhJTkQJCTExCS8qIG5vZGUgbG9vayBiZWhpbmQgZm9yIGEgbWF0Y2ggd2l0aCBvcGVyYW5kICovCisjZGVmaW5lIE5PQkVISU5ECTEyCS8qIG5vZGUgbG9vayBiZWhpbmQgZm9yIG5vIG1hdGNoIHdpdGggb3BlcmFuZCAqLworI2RlZmluZSBTVUJQQVQJCTEzCS8qIG5vZGUgbWF0Y2ggdGhlIG9wZXJhbmQgaGVyZSAqLworI2RlZmluZSBCUkFDRV9TSU1QTEUJMTQJLyogbm9kZSBNYXRjaCB0aGlzIChzaW1wbGUpIHRoaW5nIGJldHdlZW4gbSBhbmQKKwkJCQkgKgluIHRpbWVzIChce20sblx9KS4gKi8KKyNkZWZpbmUgQk9XCQkxNQkvKglNYXRjaCAiIiBhZnRlciBbXmEtekEtWjAtOV9dICovCisjZGVmaW5lIEVPVwkJMTYJLyoJTWF0Y2ggIiIgYXQgICAgW15hLXpBLVowLTlfXSAqLworI2RlZmluZSBCUkFDRV9MSU1JVFMJMTcJLyogbnIgbnIgIGRlZmluZSB0aGUgbWluICYgbWF4IGZvciBCUkFDRV9TSU1QTEUKKwkJCQkgKglhbmQgQlJBQ0VfQ09NUExFWC4gKi8KKyNkZWZpbmUgTkVXTAkJMTgJLyoJTWF0Y2ggbGluZS1icmVhayAqLworI2RlZmluZSBCSFBPUwkJMTkJLyoJRW5kIHBvc2l0aW9uIGZvciBCRUhJTkQgb3IgTk9CRUhJTkQgKi8KKworCisvKiBjaGFyYWN0ZXIgY2xhc3NlczogMjAtNDggbm9ybWFsLCA1MC03OCBpbmNsdWRlIGEgbGluZS1icmVhayAqLworI2RlZmluZSBBRERfTkwJCTMwCisjZGVmaW5lIEZJUlNUX05MCUFOWSArIEFERF9OTAorI2RlZmluZSBBTlkJCTIwCS8qCU1hdGNoIGFueSBvbmUgY2hhcmFjdGVyLiAqLworI2RlZmluZSBBTllPRgkJMjEJLyogc3RyCU1hdGNoIGFueSBjaGFyYWN0ZXIgaW4gdGhpcyBzdHJpbmcuICovCisjZGVmaW5lIEFOWUJVVAkJMjIJLyogc3RyCU1hdGNoIGFueSBjaGFyYWN0ZXIgbm90IGluIHRoaXMKKwkJCQkgKglzdHJpbmcuICovCisjZGVmaW5lIElERU5UCQkyMwkvKglNYXRjaCBpZGVudGlmaWVyIGNoYXIgKi8KKyNkZWZpbmUgU0lERU5UCQkyNAkvKglNYXRjaCBpZGVudGlmaWVyIGNoYXIgYnV0IG5vIGRpZ2l0ICovCisjZGVmaW5lIEtXT1JECQkyNQkvKglNYXRjaCBrZXl3b3JkIGNoYXIgKi8KKyNkZWZpbmUgU0tXT1JECQkyNgkvKglNYXRjaCB3b3JkIGNoYXIgYnV0IG5vIGRpZ2l0ICovCisjZGVmaW5lIEZOQU1FCQkyNwkvKglNYXRjaCBmaWxlIG5hbWUgY2hhciAqLworI2RlZmluZSBTRk5BTUUJCTI4CS8qCU1hdGNoIGZpbGUgbmFtZSBjaGFyIGJ1dCBubyBkaWdpdCAqLworI2RlZmluZSBQUklOVAkJMjkJLyoJTWF0Y2ggcHJpbnRhYmxlIGNoYXIgKi8KKyNkZWZpbmUgU1BSSU5UCQkzMAkvKglNYXRjaCBwcmludGFibGUgY2hhciBidXQgbm8gZGlnaXQgKi8KKyNkZWZpbmUgV0hJVEUJCTMxCS8qCU1hdGNoIHdoaXRlc3BhY2UgY2hhciAqLworI2RlZmluZSBOV0hJVEUJCTMyCS8qCU1hdGNoIG5vbi13aGl0ZXNwYWNlIGNoYXIgKi8KKyNkZWZpbmUgRElHSVQJCTMzCS8qCU1hdGNoIGRpZ2l0IGNoYXIgKi8KKyNkZWZpbmUgTkRJR0lUCQkzNAkvKglNYXRjaCBub24tZGlnaXQgY2hhciAqLworI2RlZmluZSBIRVgJCTM1CS8qCU1hdGNoIGhleCBjaGFyICovCisjZGVmaW5lIE5IRVgJCTM2CS8qCU1hdGNoIG5vbi1oZXggY2hhciAqLworI2RlZmluZSBPQ1RBTAkJMzcJLyoJTWF0Y2ggb2N0YWwgY2hhciAqLworI2RlZmluZSBOT0NUQUwJCTM4CS8qCU1hdGNoIG5vbi1vY3RhbCBjaGFyICovCisjZGVmaW5lIFdPUkQJCTM5CS8qCU1hdGNoIHdvcmQgY2hhciAqLworI2RlZmluZSBOV09SRAkJNDAJLyoJTWF0Y2ggbm9uLXdvcmQgY2hhciAqLworI2RlZmluZSBIRUFECQk0MQkvKglNYXRjaCBoZWFkIGNoYXIgKi8KKyNkZWZpbmUgTkhFQUQJCTQyCS8qCU1hdGNoIG5vbi1oZWFkIGNoYXIgKi8KKyNkZWZpbmUgQUxQSEEJCTQzCS8qCU1hdGNoIGFscGhhIGNoYXIgKi8KKyNkZWZpbmUgTkFMUEhBCQk0NAkvKglNYXRjaCBub24tYWxwaGEgY2hhciAqLworI2RlZmluZSBMT1dFUgkJNDUJLyoJTWF0Y2ggbG93ZXJjYXNlIGNoYXIgKi8KKyNkZWZpbmUgTkxPV0VSCQk0NgkvKglNYXRjaCBub24tbG93ZXJjYXNlIGNoYXIgKi8KKyNkZWZpbmUgVVBQRVIJCTQ3CS8qCU1hdGNoIHVwcGVyY2FzZSBjaGFyICovCisjZGVmaW5lIE5VUFBFUgkJNDgJLyoJTWF0Y2ggbm9uLXVwcGVyY2FzZSBjaGFyICovCisjZGVmaW5lIExBU1RfTkwJCU5VUFBFUiArIEFERF9OTAorI2RlZmluZSBXSVRIX05MKG9wKQkoKG9wKSA+PSBGSVJTVF9OTCAmJiAob3ApIDw9IExBU1RfTkwpCisKKyNkZWZpbmUgTU9QRU4JCTgwICAvKiAtODkJIE1hcmsgdGhpcyBwb2ludCBpbiBpbnB1dCBhcyBzdGFydCBvZgorCQkJCSAqCSBcKCBzdWJleHByLiAgTU9QRU4gKyAwIG1hcmtzIHN0YXJ0IG9mCisJCQkJICoJIG1hdGNoLiAqLworI2RlZmluZSBNQ0xPU0UJCTkwICAvKiAtOTkJIEFuYWxvZ291cyB0byBNT1BFTi4gIE1DTE9TRSArIDAgbWFya3MKKwkJCQkgKgkgZW5kIG9mIG1hdGNoLiAqLworI2RlZmluZSBCQUNLUkVGCQkxMDAgLyogLTEwOSBub2RlIE1hdGNoIHNhbWUgc3RyaW5nIGFnYWluIFwxLVw5ICovCisKKyNpZmRlZiBGRUFUX1NZTl9ITAorIyBkZWZpbmUgWk9QRU4JCTExMCAvKiAtMTE5CSBNYXJrIHRoaXMgcG9pbnQgaW4gaW5wdXQgYXMgc3RhcnQgb2YKKwkJCQkgKgkgXHooIHN1YmV4cHIuICovCisjIGRlZmluZSBaQ0xPU0UJCTEyMCAvKiAtMTI5CSBBbmFsb2dvdXMgdG8gWk9QRU4uICovCisjIGRlZmluZSBaUkVGCQkxMzAgLyogLTEzOSBub2RlIE1hdGNoIGV4dGVybmFsIHN1Ym1hdGNoIFx6MS1cejkgKi8KKyNlbmRpZgorCisjZGVmaW5lIEJSQUNFX0NPTVBMRVgJMTQwIC8qIC0xNDkgbm9kZSBNYXRjaCBub2RlcyBiZXR3ZWVuIG0gJiBuIHRpbWVzICovCisKKyNkZWZpbmUgTk9QRU4JCTE1MAkvKglNYXJrIHRoaXMgcG9pbnQgaW4gaW5wdXQgYXMgc3RhcnQgb2YKKwkJCQkJXCUoIHN1YmV4cHIuICovCisjZGVmaW5lIE5DTE9TRQkJMTUxCS8qCUFuYWxvZ291cyB0byBOT1BFTi4gKi8KKworI2RlZmluZSBNVUxUSUJZVEVDT0RFCTIwMAkvKiBtYmMJTWF0Y2ggb25lIG11bHRpLWJ5dGUgY2hhcmFjdGVyICovCisjZGVmaW5lIFJFX0JPRgkJMjAxCS8qCU1hdGNoICIiIGF0IGJlZ2lubmluZyBvZiBmaWxlLiAqLworI2RlZmluZSBSRV9FT0YJCTIwMgkvKglNYXRjaCAiIiBhdCBlbmQgb2YgZmlsZS4gKi8KKyNkZWZpbmUgQ1VSU09SCQkyMDMJLyoJTWF0Y2ggbG9jYXRpb24gb2YgY3Vyc29yLiAqLworCisjZGVmaW5lIFJFX0xOVU0JCTIwNAkvKiBuciBjbXAgIE1hdGNoIGxpbmUgbnVtYmVyICovCisjZGVmaW5lIFJFX0NPTAkJMjA1CS8qIG5yIGNtcCAgTWF0Y2ggY29sdW1uIG51bWJlciAqLworI2RlZmluZSBSRV9WQ09MCQkyMDYJLyogbnIgY21wICBNYXRjaCB2aXJ0dWFsIGNvbHVtbiBudW1iZXIgKi8KKworLyoKKyAqIE1hZ2ljIGNoYXJhY3RlcnMgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZywgdGhleSBkb24ndCBtYXRjaCBsaXRlcmFsbHkuCisgKiBNYWdpYyBjaGFyYWN0ZXJzIGFyZSBuZWdhdGl2ZS4gIFRoaXMgc2VwYXJhdGVzIHRoZW0gZnJvbSBsaXRlcmFsIGNoYXJhY3RlcnMKKyAqIChwb3NzaWJseSBtdWx0aS1ieXRlKS4gIE9ubHkgQVNDSUkgY2hhcmFjdGVycyBjYW4gYmUgTWFnaWMuCisgKi8KKyNkZWZpbmUgTWFnaWMoeCkJKChpbnQpKHgpIC0gMjU2KQorI2RlZmluZSB1bl9NYWdpYyh4KQkoKHgpICsgMjU2KQorI2RlZmluZSBpc19NYWdpYyh4KQkoKHgpIDwgMCkKKworc3RhdGljIGludCBub19NYWdpYyBfX0FSR1MoKGludCB4KSk7CitzdGF0aWMgaW50IHRvZ2dsZV9NYWdpYyBfX0FSR1MoKGludCB4KSk7CisKKyAgICBzdGF0aWMgaW50Citub19NYWdpYyh4KQorICAgIGludAkJeDsKK3sKKyAgICBpZiAoaXNfTWFnaWMoeCkpCisJcmV0dXJuIHVuX01hZ2ljKHgpOworICAgIHJldHVybiB4OworfQorCisgICAgc3RhdGljIGludAordG9nZ2xlX01hZ2ljKHgpCisgICAgaW50CQl4OworeworICAgIGlmIChpc19NYWdpYyh4KSkKKwlyZXR1cm4gdW5fTWFnaWMoeCk7CisgICAgcmV0dXJuIE1hZ2ljKHgpOworfQorCisvKgorICogVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlZ2V4cCBpbnRlcm5hbCAicHJvZ3JhbSIgaXMgYWN0dWFsbHkgdGhpcyBtYWdpYworICogbnVtYmVyOyB0aGUgc3RhcnQgbm9kZSBiZWdpbnMgaW4gdGhlIHNlY29uZCBieXRlLiAgSXQncyB1c2VkIHRvIGNhdGNoIHRoZQorICogbW9zdCBzZXZlcmUgbXV0aWxhdGlvbiBvZiB0aGUgcHJvZ3JhbSBieSB0aGUgY2FsbGVyLgorICovCisKKyNkZWZpbmUgUkVHTUFHSUMJMDIzNAorCisvKgorICogT3Bjb2RlIG5vdGVzOgorICoKKyAqIEJSQU5DSAlUaGUgc2V0IG9mIGJyYW5jaGVzIGNvbnN0aXR1dGluZyBhIHNpbmdsZSBjaG9pY2UgYXJlIGhvb2tlZAorICoJCXRvZ2V0aGVyIHdpdGggdGhlaXIgIm5leHQiIHBvaW50ZXJzLCBzaW5jZSBwcmVjZWRlbmNlIHByZXZlbnRzCisgKgkJYW55dGhpbmcgYmVpbmcgY29uY2F0ZW5hdGVkIHRvIGFueSBpbmRpdmlkdWFsIGJyYW5jaC4gIFRoZQorICoJCSJuZXh0IiBwb2ludGVyIG9mIHRoZSBsYXN0IEJSQU5DSCBpbiBhIGNob2ljZSBwb2ludHMgdG8gdGhlCisgKgkJdGhpbmcgZm9sbG93aW5nIHRoZSB3aG9sZSBjaG9pY2UuICBUaGlzIGlzIGFsc28gd2hlcmUgdGhlCisgKgkJZmluYWwgIm5leHQiIHBvaW50ZXIgb2YgZWFjaCBpbmRpdmlkdWFsIGJyYW5jaCBwb2ludHM7IGVhY2gKKyAqCQlicmFuY2ggc3RhcnRzIHdpdGggdGhlIG9wZXJhbmQgbm9kZSBvZiBhIEJSQU5DSCBub2RlLgorICoKKyAqIEJBQ0sJCU5vcm1hbCAibmV4dCIgcG9pbnRlcnMgYWxsIGltcGxpY2l0bHkgcG9pbnQgZm9yd2FyZDsgQkFDSworICoJCWV4aXN0cyB0byBtYWtlIGxvb3Agc3RydWN0dXJlcyBwb3NzaWJsZS4KKyAqCisgKiBTVEFSLFBMVVMJJz0nLCBhbmQgY29tcGxleCAnKicgYW5kICcrJywgYXJlIGltcGxlbWVudGVkIGFzIGNpcmN1bGFyCisgKgkJQlJBTkNIIHN0cnVjdHVyZXMgdXNpbmcgQkFDSy4gIFNpbXBsZSBjYXNlcyAob25lIGNoYXJhY3RlcgorICoJCXBlciBtYXRjaCkgYXJlIGltcGxlbWVudGVkIHdpdGggU1RBUiBhbmQgUExVUyBmb3Igc3BlZWQKKyAqCQlhbmQgdG8gbWluaW1pemUgcmVjdXJzaXZlIHBsdW5nZXMuCisgKgorICogQlJBQ0VfTElNSVRTCVRoaXMgaXMgYWx3YXlzIGZvbGxvd2VkIGJ5IGEgQlJBQ0VfU0lNUExFIG9yIEJSQUNFX0NPTVBMRVgKKyAqCQlub2RlLCBhbmQgZGVmaW5lcyB0aGUgbWluIGFuZCBtYXggbGltaXRzIHRvIGJlIHVzZWQgZm9yIHRoYXQKKyAqCQlub2RlLgorICoKKyAqIE1PUEVOLE1DTE9TRQkuLi5hcmUgbnVtYmVyZWQgYXQgY29tcGlsZSB0aW1lLgorICogWk9QRU4sWkNMT1NFCS4uLmRpdHRvCisgKi8KKworLyoKKyAqIEEgbm9kZSBpcyBvbmUgY2hhciBvZiBvcGNvZGUgZm9sbG93ZWQgYnkgdHdvIGNoYXJzIG9mICJuZXh0IiBwb2ludGVyLgorICogIk5leHQiIHBvaW50ZXJzIGFyZSBzdG9yZWQgYXMgdHdvIDgtYml0IGJ5dGVzLCBoaWdoIG9yZGVyIGZpcnN0LiAgVGhlCisgKiB2YWx1ZSBpcyBhIHBvc2l0aXZlIG9mZnNldCBmcm9tIHRoZSBvcGNvZGUgb2YgdGhlIG5vZGUgY29udGFpbmluZyBpdC4KKyAqIEFuIG9wZXJhbmQsIGlmIGFueSwgc2ltcGx5IGZvbGxvd3MgdGhlIG5vZGUuICAoTm90ZSB0aGF0IG11Y2ggb2YgdGhlCisgKiBjb2RlIGdlbmVyYXRpb24ga25vd3MgYWJvdXQgdGhpcyBpbXBsaWNpdCByZWxhdGlvbnNoaXAuKQorICoKKyAqIFVzaW5nIHR3byBieXRlcyBmb3IgdGhlICJuZXh0IiBwb2ludGVyIGlzIHZhc3Qgb3ZlcmtpbGwgZm9yIG1vc3QgdGhpbmdzLAorICogYnV0IGFsbG93cyBwYXR0ZXJucyB0byBnZXQgYmlnIHdpdGhvdXQgZGlzYXN0ZXJzLgorICovCisjZGVmaW5lIE9QKHApCQkoKGludCkqKHApKQorI2RlZmluZSBORVhUKHApCQkoKCgqKChwKSArIDEpICYgMDM3NykgPDwgOCkgKyAoKigocCkgKyAyKSAmIDAzNzcpKQorI2RlZmluZSBPUEVSQU5EKHApCSgocCkgKyAzKQorLyogT2J0YWluIGFuIG9wZXJhbmQgdGhhdCB3YXMgc3RvcmVkIGFzIGZvdXIgYnl0ZXMsIE1TQiBmaXJzdC4gKi8KKyNkZWZpbmUgT1BFUkFORF9NSU4ocCkJKCgobG9uZykocClbM10gPDwgMjQpICsgKChsb25nKShwKVs0XSA8PCAxNikgXAorCQkJKyAoKGxvbmcpKHApWzVdIDw8IDgpICsgKGxvbmcpKHApWzZdKQorLyogT2J0YWluIGEgc2Vjb25kIG9wZXJhbmQgc3RvcmVkIGFzIGZvdXIgYnl0ZXMuICovCisjZGVmaW5lIE9QRVJBTkRfTUFYKHApCU9QRVJBTkRfTUlOKChwKSArIDQpCisvKiBPYnRhaW4gYSBzZWNvbmQgc2luZ2xlLWJ5dGUgb3BlcmFuZCBzdG9yZWQgYWZ0ZXIgYSBmb3VyIGJ5dGVzIG9wZXJhbmQuICovCisjZGVmaW5lIE9QRVJBTkRfQ01QKHApCShwKVs3XQorCisvKgorICogVXRpbGl0eSBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBVQ0hBUkFUKHApCSgoaW50KSooY2hhcl91ICopKHApKQorCisvKiBVc2VkIGZvciBhbiBlcnJvciAoZG93biBmcm9tKSB2aW1fcmVnY29tcCgpOiBnaXZlIHRoZSBlcnJvciBtZXNzYWdlLCBzZXQKKyAqIHJjX2RpZF9lbXNnIGFuZCByZXR1cm4gTlVMTCAqLworI2RlZmluZSBFTVNHX1JFVF9OVUxMKG0pIHsgRU1TRyhtKTsgcmNfZGlkX2Vtc2cgPSBUUlVFOyByZXR1cm4gTlVMTDsgfQorI2RlZmluZSBFTVNHX01fUkVUX05VTEwobSwgYykgeyBFTVNHMihtLCBjID8gIiIgOiAiXFwiKTsgcmNfZGlkX2Vtc2cgPSBUUlVFOyByZXR1cm4gTlVMTDsgfQorI2RlZmluZSBFTVNHX1JFVF9GQUlMKG0pIHsgRU1TRyhtKTsgcmNfZGlkX2Vtc2cgPSBUUlVFOyByZXR1cm4gRkFJTDsgfQorI2RlZmluZSBFTVNHX09ORV9SRVRfTlVMTCBFTVNHX01fUkVUX05VTEwoXygiRTM2OTogaW52YWxpZCBpdGVtIGluICVzJSVbXSIpLCByZWdfbWFnaWMgPT0gTUFHSUNfQUxMKQorCisjZGVmaW5lIE1BWF9MSU1JVAkoMzI3NjdMIDw8IDE2TCkKKworc3RhdGljIGludCByZV9tdWx0aV90eXBlIF9fQVJHUygoaW50KSk7CitzdGF0aWMgaW50IGNzdHJuY21wIF9fQVJHUygoY2hhcl91ICpzMSwgY2hhcl91ICpzMiwgaW50ICpuKSk7CitzdGF0aWMgY2hhcl91ICpjc3RyY2hyIF9fQVJHUygoY2hhcl91ICosIGludCkpOworCisjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkCXJlZ2R1bXAgX19BUkdTKChjaGFyX3UgKiwgcmVncHJvZ19UICopKTsKK3N0YXRpYyBjaGFyX3UJKnJlZ3Byb3AgX19BUkdTKChjaGFyX3UgKikpOworI2VuZGlmCisKKyNkZWZpbmUgTk9UX01VTFRJCTAKKyNkZWZpbmUgTVVMVElfT05FCTEKKyNkZWZpbmUgTVVMVElfTVVMVAkyCisvKgorICogUmV0dXJuIE5PVF9NVUxUSSBpZiBjIGlzIG5vdCBhICJtdWx0aSIgb3BlcmF0b3IuCisgKiBSZXR1cm4gTVVMVElfT05FIGlmIGMgaXMgYSBzaW5nbGUgIm11bHRpIiBvcGVyYXRvci4KKyAqIFJldHVybiBNVUxUSV9NVUxUIGlmIGMgaXMgYSBtdWx0aSAibXVsdGkiIG9wZXJhdG9yLgorICovCisgICAgc3RhdGljIGludAorcmVfbXVsdGlfdHlwZShjKQorICAgIGludCBjOworeworICAgIGlmIChjID09IE1hZ2ljKCdAJykgfHwgYyA9PSBNYWdpYygnPScpIHx8IGMgPT0gTWFnaWMoJz8nKSkKKwlyZXR1cm4gTVVMVElfT05FOworICAgIGlmIChjID09IE1hZ2ljKCcqJykgfHwgYyA9PSBNYWdpYygnKycpIHx8IGMgPT0gTWFnaWMoJ3snKSkKKwlyZXR1cm4gTVVMVElfTVVMVDsKKyAgICByZXR1cm4gTk9UX01VTFRJOworfQorCisvKgorICogRmxhZ3MgdG8gYmUgcGFzc2VkIHVwIGFuZCBkb3duLgorICovCisjZGVmaW5lIEhBU1dJRFRICTB4MQkvKiBLbm93biBuZXZlciB0byBtYXRjaCBudWxsIHN0cmluZy4gKi8KKyNkZWZpbmUgU0lNUExFCQkweDIJLyogU2ltcGxlIGVub3VnaCB0byBiZSBTVEFSL1BMVVMgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU1BTVEFSVAkJMHg0CS8qIFN0YXJ0cyB3aXRoICogb3IgKy4gKi8KKyNkZWZpbmUgSEFTTkwJCTB4OAkvKiBDb250YWlucyBzb21lIFxuLiAqLworI2RlZmluZSBIQVNMT09LQkgJMHgxMAkvKiBDb250YWlucyAiXEA8PSIgb3IgIlxAPCEiLiAqLworI2RlZmluZSBXT1JTVAkJMAkvKiBXb3JzdCBjYXNlLiAqLworCisvKgorICogV2hlbiByZWdjb2RlIGlzIHNldCB0byB0aGlzIHZhbHVlLCBjb2RlIGlzIG5vdCBlbWl0dGVkIGFuZCBzaXplIGlzIGNvbXB1dGVkCisgKiBpbnN0ZWFkLgorICovCisjZGVmaW5lIEpVU1RfQ0FMQ19TSVpFCSgoY2hhcl91ICopIC0xKQorCitzdGF0aWMgY2hhcl91CQkqcmVnX3ByZXZfc3ViOworCisvKgorICogUkVHRVhQX0lOUkFOR0UgY29udGFpbnMgYWxsIGNoYXJhY3RlcnMgd2hpY2ggYXJlIGFsd2F5cyBzcGVjaWFsIGluIGEgW10KKyAqIHJhbmdlIGFmdGVyICdcJy4KKyAqIFJFR0VYUF9BQkJSIGNvbnRhaW5zIGFsbCBjaGFyYWN0ZXJzIHdoaWNoIGFjdCBhcyBhYmJyZXZpYXRpb25zIGFmdGVyICdcJy4KKyAqIFRoZXNlIGFyZToKKyAqICBcbgktIE5ldyBsaW5lIChOTCkuCisgKiAgXHIJLSBDYXJyaWFnZSBSZXR1cm4gKENSKS4KKyAqICBcdAktIFRhYiAoVEFCKS4KKyAqICBcZQktIEVzY2FwZSAoRVNDKS4KKyAqICBcYgktIEJhY2tzcGFjZSAoQ3RybF9IKS4KKyAqLworc3RhdGljIGNoYXJfdSBSRUdFWFBfSU5SQU5HRVtdID0gIl1eLW5cXCI7CitzdGF0aWMgY2hhcl91IFJFR0VYUF9BQkJSW10gPSAibnJ0ZWIiOworCitzdGF0aWMgaW50CWJhY2tzbGFzaF90cmFucyBfX0FSR1MoKGludCBjKSk7CitzdGF0aWMgaW50CXNraXBfY2xhc3NfbmFtZSBfX0FSR1MoKGNoYXJfdSAqKnBwKSk7CitzdGF0aWMgY2hhcl91CSpza2lwX2FueW9mIF9fQVJHUygoY2hhcl91ICpwKSk7CitzdGF0aWMgdm9pZAlpbml0X2NsYXNzX3RhYiBfX0FSR1MoKHZvaWQpKTsKKworLyoKKyAqIFRyYW5zbGF0ZSAnXHgnIHRvIGl0cyBjb250cm9sIGNoYXJhY3RlciwgZXhjZXB0ICJcbiIsIHdoaWNoIGlzIE1hZ2ljLgorICovCisgICAgc3RhdGljIGludAorYmFja3NsYXNoX3RyYW5zKGMpCisgICAgaW50CQljOworeworICAgIHN3aXRjaCAoYykKKyAgICB7CisJY2FzZSAncic6ICAgcmV0dXJuIENBUjsKKwljYXNlICd0JzogICByZXR1cm4gVEFCOworCWNhc2UgJ2UnOiAgIHJldHVybiBFU0M7CisJY2FzZSAnYic6ICAgcmV0dXJuIEJTOworICAgIH0KKyAgICByZXR1cm4gYzsKK30KKworLyoKKyAqIENoZWNrIGZvciBhIGNoYXJhY3RlciBjbGFzcyBuYW1lLiAgInBwIiBwb2ludHMgdG8gdGhlICdbJy4KKyAqIFJldHVybnMgb25lIG9mIHRoZSBDTEFTU18gaXRlbXMuIENMQVNTX05PTkUgbWVhbnMgdGhhdCBubyBpdGVtIHdhcworICogcmVjb2duaXplZC4gIE90aGVyd2lzZSAicHAiIGlzIGFkdmFuY2VkIHRvIGFmdGVyIHRoZSBpdGVtLgorICovCisgICAgc3RhdGljIGludAorc2tpcF9jbGFzc19uYW1lKHBwKQorICAgIGNoYXJfdQkqKnBwOworeworICAgIHN0YXRpYyBjb25zdCBjaGFyICooY2xhc3NfbmFtZXNbXSkgPQorICAgIHsKKwkiYWxudW06XSIsCisjZGVmaW5lIENMQVNTX0FMTlVNIDAKKwkiYWxwaGE6XSIsCisjZGVmaW5lIENMQVNTX0FMUEhBIDEKKwkiYmxhbms6XSIsCisjZGVmaW5lIENMQVNTX0JMQU5LIDIKKwkiY250cmw6XSIsCisjZGVmaW5lIENMQVNTX0NOVFJMIDMKKwkiZGlnaXQ6XSIsCisjZGVmaW5lIENMQVNTX0RJR0lUIDQKKwkiZ3JhcGg6XSIsCisjZGVmaW5lIENMQVNTX0dSQVBIIDUKKwkibG93ZXI6XSIsCisjZGVmaW5lIENMQVNTX0xPV0VSIDYKKwkicHJpbnQ6XSIsCisjZGVmaW5lIENMQVNTX1BSSU5UIDcKKwkicHVuY3Q6XSIsCisjZGVmaW5lIENMQVNTX1BVTkNUIDgKKwkic3BhY2U6XSIsCisjZGVmaW5lIENMQVNTX1NQQUNFIDkKKwkidXBwZXI6XSIsCisjZGVmaW5lIENMQVNTX1VQUEVSIDEwCisJInhkaWdpdDpdIiwKKyNkZWZpbmUgQ0xBU1NfWERJR0lUIDExCisJInRhYjpdIiwKKyNkZWZpbmUgQ0xBU1NfVEFCIDEyCisJInJldHVybjpdIiwKKyNkZWZpbmUgQ0xBU1NfUkVUVVJOIDEzCisJImJhY2tzcGFjZTpdIiwKKyNkZWZpbmUgQ0xBU1NfQkFDS1NQQUNFIDE0CisJImVzY2FwZTpdIiwKKyNkZWZpbmUgQ0xBU1NfRVNDQVBFIDE1CisgICAgfTsKKyNkZWZpbmUgQ0xBU1NfTk9ORSA5OQorICAgIGludCBpOworCisgICAgaWYgKCgqcHApWzFdID09ICc6JykKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihjbGFzc19uYW1lcykgLyBzaXplb2YoKmNsYXNzX25hbWVzKTsgKytpKQorCSAgICBpZiAoU1RSTkNNUCgqcHAgKyAyLCBjbGFzc19uYW1lc1tpXSwgU1RSTEVOKGNsYXNzX25hbWVzW2ldKSkgPT0gMCkKKwkgICAgeworCQkqcHAgKz0gU1RSTEVOKGNsYXNzX25hbWVzW2ldKSArIDI7CisJCXJldHVybiBpOworCSAgICB9CisgICAgfQorICAgIHJldHVybiBDTEFTU19OT05FOworfQorCisvKgorICogU2tpcCBvdmVyIGEgIltdIiByYW5nZS4KKyAqICJwIiBtdXN0IHBvaW50IHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlICdbJy4KKyAqIFRoZSByZXR1cm5lZCBwb2ludGVyIGlzIG9uIHRoZSBtYXRjaGluZyAnXScsIG9yIHRoZSB0ZXJtaW5hdGluZyBOVUwuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3NraXBfYW55b2YocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgaW50CQljcG9fbGl0OwkvKiAnY3BvcHRpb25zJyBjb250YWlucyAnbCcgZmxhZyAqLworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCWw7CisjZW5kaWYKKworICAgIGNwb19saXQgPSAoIXJlZ19zeW4gJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0xJVEVSQUwpICE9IE5VTEwpOworCisgICAgaWYgKCpwID09ICdeJykJLyogQ29tcGxlbWVudCBvZiByYW5nZS4gKi8KKwkrK3A7CisgICAgaWYgKCpwID09ICddJyB8fCAqcCA9PSAnLScpCisJKytwOworICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gJ10nKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSAmJiAobCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkpID4gMSkKKwkgICAgcCArPSBsOworCWVsc2UKKyNlbmRpZgorCSAgICBpZiAoKnAgPT0gJy0nKQorCSAgICB7CisJCSsrcDsKKwkJaWYgKCpwICE9ICddJyAmJiAqcCAhPSBOVUwpCisJCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBpZiAoaGFzX21ieXRlKQorCQkJcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApOworCQkgICAgZWxzZQorI2VuZGlmCisJCQkrK3A7CisJCX0KKwkgICAgfQorCWVsc2UgaWYgKCpwID09ICdcXCcKKwkJJiYgKHZpbV9zdHJjaHIoUkVHRVhQX0lOUkFOR0UsIHBbMV0pICE9IE5VTEwKKwkJICAgIHx8ICghY3BvX2xpdCAmJiB2aW1fc3RyY2hyKFJFR0VYUF9BQkJSLCBwWzFdKSAhPSBOVUxMKSkpCisJICAgIHAgKz0gMjsKKwllbHNlIGlmICgqcCA9PSAnWycpCisJeworCSAgICBpZiAoc2tpcF9jbGFzc19uYW1lKCZwKSA9PSBDTEFTU19OT05FKQorCQkrK3A7IC8qIEl0IHdhcyBub3QgYSBjbGFzcyBuYW1lICovCisJfQorCWVsc2UKKwkgICAgKytwOworICAgIH0KKworICAgIHJldHVybiBwOworfQorCisvKgorICogU3BlY2lmaWMgdmVyc2lvbiBvZiBjaGFyYWN0ZXIgY2xhc3MgZnVuY3Rpb25zLgorICogVXNpbmcgYSB0YWJsZSB0byBrZWVwIHRoaXMgZmFzdC4KKyAqLworc3RhdGljIHNob3J0CWNsYXNzX3RhYlsyNTZdOworCisjZGVmaW5lCSAgICBSSV9ESUdJVAkweDAxCisjZGVmaW5lCSAgICBSSV9IRVgJMHgwMgorI2RlZmluZQkgICAgUklfT0NUQUwJMHgwNAorI2RlZmluZQkgICAgUklfV09SRAkweDA4CisjZGVmaW5lCSAgICBSSV9IRUFECTB4MTAKKyNkZWZpbmUJICAgIFJJX0FMUEhBCTB4MjAKKyNkZWZpbmUJICAgIFJJX0xPV0VSCTB4NDAKKyNkZWZpbmUJICAgIFJJX1VQUEVSCTB4ODAKKyNkZWZpbmUJICAgIFJJX1dISVRFCTB4MTAwCisKKyAgICBzdGF0aWMgdm9pZAoraW5pdF9jbGFzc190YWIoKQoreworICAgIGludAkJaTsKKyAgICBzdGF0aWMgaW50CWRvbmUgPSBGQUxTRTsKKworICAgIGlmIChkb25lKQorCXJldHVybjsKKworICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkKKyAgICB7CisJaWYgKGkgPj0gJzAnICYmIGkgPD0gJzcnKQorCSAgICBjbGFzc190YWJbaV0gPSBSSV9ESUdJVCArIFJJX0hFWCArIFJJX09DVEFMICsgUklfV09SRDsKKwllbHNlIGlmIChpID49ICc4JyAmJiBpIDw9ICc5JykKKwkgICAgY2xhc3NfdGFiW2ldID0gUklfRElHSVQgKyBSSV9IRVggKyBSSV9XT1JEOworCWVsc2UgaWYgKGkgPj0gJ2EnICYmIGkgPD0gJ2YnKQorCSAgICBjbGFzc190YWJbaV0gPSBSSV9IRVggKyBSSV9XT1JEICsgUklfSEVBRCArIFJJX0FMUEhBICsgUklfTE9XRVI7CisjaWZkZWYgRUJDRElDCisJZWxzZSBpZiAoKGkgPj0gJ2cnICYmIGkgPD0gJ2knKSB8fCAoaSA+PSAnaicgJiYgaSA8PSAncicpCisJCQkJCQkgICAgfHwgKGkgPj0gJ3MnICYmIGkgPD0gJ3onKSkKKyNlbHNlCisJZWxzZSBpZiAoaSA+PSAnZycgJiYgaSA8PSAneicpCisjZW5kaWYKKwkgICAgY2xhc3NfdGFiW2ldID0gUklfV09SRCArIFJJX0hFQUQgKyBSSV9BTFBIQSArIFJJX0xPV0VSOworCWVsc2UgaWYgKGkgPj0gJ0EnICYmIGkgPD0gJ0YnKQorCSAgICBjbGFzc190YWJbaV0gPSBSSV9IRVggKyBSSV9XT1JEICsgUklfSEVBRCArIFJJX0FMUEhBICsgUklfVVBQRVI7CisjaWZkZWYgRUJDRElDCisJZWxzZSBpZiAoKGkgPj0gJ0cnICYmIGkgPD0gJ0knKSB8fCAoIGkgPj0gJ0onICYmIGkgPD0gJ1InKQorCQkJCQkJICAgIHx8IChpID49ICdTJyAmJiBpIDw9ICdaJykpCisjZWxzZQorCWVsc2UgaWYgKGkgPj0gJ0cnICYmIGkgPD0gJ1onKQorI2VuZGlmCisJICAgIGNsYXNzX3RhYltpXSA9IFJJX1dPUkQgKyBSSV9IRUFEICsgUklfQUxQSEEgKyBSSV9VUFBFUjsKKwllbHNlIGlmIChpID09ICdfJykKKwkgICAgY2xhc3NfdGFiW2ldID0gUklfV09SRCArIFJJX0hFQUQ7CisJZWxzZQorCSAgICBjbGFzc190YWJbaV0gPSAwOworICAgIH0KKyAgICBjbGFzc190YWJbJyAnXSB8PSBSSV9XSElURTsKKyAgICBjbGFzc190YWJbJ1x0J10gfD0gUklfV0hJVEU7CisgICAgZG9uZSA9IFRSVUU7Cit9CisKKyNpZmRlZiBGRUFUX01CWVRFCisjIGRlZmluZSByaV9kaWdpdChjKQkoYyA8IDB4MTAwICYmIChjbGFzc190YWJbY10gJiBSSV9ESUdJVCkpCisjIGRlZmluZSByaV9oZXgoYykJKGMgPCAweDEwMCAmJiAoY2xhc3NfdGFiW2NdICYgUklfSEVYKSkKKyMgZGVmaW5lIHJpX29jdGFsKGMpCShjIDwgMHgxMDAgJiYgKGNsYXNzX3RhYltjXSAmIFJJX09DVEFMKSkKKyMgZGVmaW5lIHJpX3dvcmQoYykJKGMgPCAweDEwMCAmJiAoY2xhc3NfdGFiW2NdICYgUklfV09SRCkpCisjIGRlZmluZSByaV9oZWFkKGMpCShjIDwgMHgxMDAgJiYgKGNsYXNzX3RhYltjXSAmIFJJX0hFQUQpKQorIyBkZWZpbmUgcmlfYWxwaGEoYykJKGMgPCAweDEwMCAmJiAoY2xhc3NfdGFiW2NdICYgUklfQUxQSEEpKQorIyBkZWZpbmUgcmlfbG93ZXIoYykJKGMgPCAweDEwMCAmJiAoY2xhc3NfdGFiW2NdICYgUklfTE9XRVIpKQorIyBkZWZpbmUgcmlfdXBwZXIoYykJKGMgPCAweDEwMCAmJiAoY2xhc3NfdGFiW2NdICYgUklfVVBQRVIpKQorIyBkZWZpbmUgcmlfd2hpdGUoYykJKGMgPCAweDEwMCAmJiAoY2xhc3NfdGFiW2NdICYgUklfV0hJVEUpKQorI2Vsc2UKKyMgZGVmaW5lIHJpX2RpZ2l0KGMpCShjbGFzc190YWJbY10gJiBSSV9ESUdJVCkKKyMgZGVmaW5lIHJpX2hleChjKQkoY2xhc3NfdGFiW2NdICYgUklfSEVYKQorIyBkZWZpbmUgcmlfb2N0YWwoYykJKGNsYXNzX3RhYltjXSAmIFJJX09DVEFMKQorIyBkZWZpbmUgcmlfd29yZChjKQkoY2xhc3NfdGFiW2NdICYgUklfV09SRCkKKyMgZGVmaW5lIHJpX2hlYWQoYykJKGNsYXNzX3RhYltjXSAmIFJJX0hFQUQpCisjIGRlZmluZSByaV9hbHBoYShjKQkoY2xhc3NfdGFiW2NdICYgUklfQUxQSEEpCisjIGRlZmluZSByaV9sb3dlcihjKQkoY2xhc3NfdGFiW2NdICYgUklfTE9XRVIpCisjIGRlZmluZSByaV91cHBlcihjKQkoY2xhc3NfdGFiW2NdICYgUklfVVBQRVIpCisjIGRlZmluZSByaV93aGl0ZShjKQkoY2xhc3NfdGFiW2NdICYgUklfV0hJVEUpCisjZW5kaWYKKworLyogZmxhZ3MgZm9yIHJlZ2ZsYWdzICovCisjZGVmaW5lIFJGX0lDQVNFICAgIDEJLyogaWdub3JlIGNhc2UgKi8KKyNkZWZpbmUgUkZfTk9JQ0FTRSAgMgkvKiBkb24ndCBpZ25vcmUgY2FzZSAqLworI2RlZmluZSBSRl9IQVNOTCAgICA0CS8qIGNhbiBtYXRjaCBhIE5MICovCisjZGVmaW5lIFJGX0lDT01CSU5FIDgJLyogaWdub3JlIGNvbWJpbmluZyBjaGFyYWN0ZXJzICovCisjZGVmaW5lIFJGX0xPT0tCSCAgIDE2CS8qIHVzZXMgIlxAPD0iIG9yICJcQDwhIiAqLworCisvKgorICogR2xvYmFsIHdvcmsgdmFyaWFibGVzIGZvciB2aW1fcmVnY29tcCgpLgorICovCisKK3N0YXRpYyBjaGFyX3UJKnJlZ3BhcnNlOwkvKiBJbnB1dC1zY2FuIHBvaW50ZXIuICovCitzdGF0aWMgaW50CXByZXZjaHJfbGVuOwkvKiBieXRlIGxlbmd0aCBvZiBwcmV2aW91cyBjaGFyICovCitzdGF0aWMgaW50CW51bV9jb21wbGV4X2JyYWNlczsgLyogQ29tcGxleCBcey4uLn0gY291bnQgKi8KK3N0YXRpYyBpbnQJcmVnbnBhcjsJLyogKCkgY291bnQuICovCisjaWZkZWYgRkVBVF9TWU5fSEwKK3N0YXRpYyBpbnQJcmVnbnpwYXI7CS8qIFx6KCkgY291bnQuICovCitzdGF0aWMgaW50CXJlX2hhc196OwkvKiBceiBpdGVtIGRldGVjdGVkICovCisjZW5kaWYKK3N0YXRpYyBjaGFyX3UJKnJlZ2NvZGU7CS8qIENvZGUtZW1pdCBwb2ludGVyLCBvciBKVVNUX0NBTENfU0laRSAqLworc3RhdGljIGxvbmcJcmVnc2l6ZTsJLyogQ29kZSBzaXplLiAqLworc3RhdGljIGNoYXJfdQloYWRfZW5kYnJhY2VbTlNVQkVYUF07CS8qIGZsYWdzLCBUUlVFIGlmIGVuZCBvZiAoKSBmb3VuZCAqLworc3RhdGljIHVuc2lnbmVkCXJlZ2ZsYWdzOwkvKiBSRl8gZmxhZ3MgZm9yIHByb2cgKi8KK3N0YXRpYyBsb25nCWJyYWNlX21pblsxMF07CS8qIE1pbmltdW1zIGZvciBjb21wbGV4IGJyYWNlIHJlcGVhdHMgKi8KK3N0YXRpYyBsb25nCWJyYWNlX21heFsxMF07CS8qIE1heGltdW1zIGZvciBjb21wbGV4IGJyYWNlIHJlcGVhdHMgKi8KK3N0YXRpYyBpbnQJYnJhY2VfY291bnRbMTBdOyAvKiBDdXJyZW50IGNvdW50cyBmb3IgY29tcGxleCBicmFjZSByZXBlYXRzICovCisjaWYgZGVmaW5lZChGRUFUX1NZTl9ITCkgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBpbnQJaGFkX2VvbDsJLyogVFJVRSB3aGVuIEVPTCBmb3VuZCBieSB2aW1fcmVnY29tcCgpICovCisjZW5kaWYKK3N0YXRpYyBpbnQJb25lX2V4YWN0bHkgPSBGQUxTRTsJLyogb25seSBkbyBvbmUgY2hhciBmb3IgRVhBQ1RMWSAqLworCitzdGF0aWMgaW50CXJlZ19tYWdpYzsJLyogbWFnaWNuZXNzIG9mIHRoZSBwYXR0ZXJuOiAqLworI2RlZmluZSBNQUdJQ19OT05FCTEJLyogIlxWIiB2ZXJ5IHVubWFnaWMgKi8KKyNkZWZpbmUgTUFHSUNfT0ZGCTIJLyogIlxNIiBvciAnbWFnaWMnIG9mZiAqLworI2RlZmluZSBNQUdJQ19PTgkzCS8qICJcbSIgb3IgJ21hZ2ljJyAqLworI2RlZmluZSBNQUdJQ19BTEwJNAkvKiAiXHYiIHZlcnkgbWFnaWMgKi8KKworc3RhdGljIGludAlyZWdfc3RyaW5nOwkvKiBtYXRjaGluZyB3aXRoIGEgc3RyaW5nIGluc3RlYWQgb2YgYSBidWZmZXIKKwkJCQkgICBsaW5lICovCisKKy8qCisgKiBNRVRBIGNvbnRhaW5zIGFsbCBjaGFyYWN0ZXJzIHRoYXQgbWF5IGJlIG1hZ2ljLCBleGNlcHQgJ14nIGFuZCAnJCcuCisgKi8KKworI2lmZGVmIEVCQ0RJQworc3RhdGljIGNoYXJfdSBNRVRBW10gPSAiJSYoKSorLjEyMzQ1Njc4OTw9Pj9AQUNERkhJS0xNT1BTVVZXWFtfYWNkZmhpa2xtbm9wc3V2d3h6e3x+IjsKKyNlbHNlCisvKiBNRVRBW10gaXMgdXNlZCBvZnRlbiBlbm91Z2ggdG8ganVzdGlmeSB0dXJuaW5nIGl0IGludG8gYSB0YWJsZS4gKi8KK3N0YXRpYyBjaGFyX3UgTUVUQV9mbGFnc1tdID0geworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKy8qCQkgICAlICAmICAgICAoICApICAqICArCSAgICAgIC4gICAgKi8KKyAgICAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAwLAorLyogICAgIDEgIDIgIDMJNCAgNSAgNiAgNyAgOCAgOQk8ICA9ICA+ICA/ICovCisgICAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwKKy8qICBAICBBICAgICBDCUQgICAgIEYgICAgIEggIEkgICAgIEsJTCAgTQkgTyAqLworICAgIDEsIDEsIDAsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsCisvKiAgUAkgICAgIFMJICAgVSAgViAgVyAgWAkgIFogIFsJCSBfICovCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMCwgMCwgMSwKKy8qICAgICBhICAgICBjCWQgICAgIGYgICAgIGggIGkgICAgIGsJbCAgbSAgbiAgbyAqLworICAgIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsCisvKiAgcAkgICAgIHMJICAgdSAgdiAgdyAgeAkgIHogIHsJfCAgICAgfiAgICAqLworICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEKK307CisjZW5kaWYKKworc3RhdGljIGludAljdXJjaHI7CisKKy8qIGFyZ3VtZW50cyBmb3IgcmVnKCkgKi8KKyNkZWZpbmUgUkVHX05PUEFSRU4JMAkvKiB0b3BsZXZlbCByZWcoKSAqLworI2RlZmluZSBSRUdfUEFSRU4JMQkvKiBcKFwpICovCisjZGVmaW5lIFJFR19aUEFSRU4JMgkvKiBceihcKSAqLworI2RlZmluZSBSRUdfTlBBUkVOCTMJLyogXCUoXCkgKi8KKworLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciB2aW1fcmVnY29tcCgpJ3MgZnJpZW5kcy4KKyAqLworc3RhdGljIHZvaWQJaW5pdGNociBfX0FSR1MoKGNoYXJfdSAqKSk7CitzdGF0aWMgaW50CWdldGNociBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkCXNraXBjaHJfa2VlcHN0YXJ0IF9fQVJHUygodm9pZCkpOworc3RhdGljIGludAlwZWVrY2hyIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQJc2tpcGNociBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkCXVuZ2V0Y2hyIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQJcmVnY29tcF9zdGFydCBfX0FSR1MoKGNoYXJfdSAqZXhwciwgaW50IGZsYWdzKSk7CitzdGF0aWMgY2hhcl91CSpyZWcgX19BUkdTKChpbnQsIGludCAqKSk7CitzdGF0aWMgY2hhcl91CSpyZWdicmFuY2ggX19BUkdTKChpbnQgKmZsYWdwKSk7CitzdGF0aWMgY2hhcl91CSpyZWdjb25jYXQgX19BUkdTKChpbnQgKmZsYWdwKSk7CitzdGF0aWMgY2hhcl91CSpyZWdwaWVjZSBfX0FSR1MoKGludCAqKSk7CitzdGF0aWMgY2hhcl91CSpyZWdhdG9tIF9fQVJHUygoaW50ICopKTsKK3N0YXRpYyBjaGFyX3UJKnJlZ25vZGUgX19BUkdTKChpbnQpKTsKK3N0YXRpYyBpbnQJcHJvZ19tYWdpY193cm9uZyBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBjaGFyX3UJKnJlZ25leHQgX19BUkdTKChjaGFyX3UgKikpOworc3RhdGljIHZvaWQJcmVnYyBfX0FSR1MoKGludCBiKSk7CisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIHZvaWQJcmVnbWJjIF9fQVJHUygoaW50IGMpKTsKKyNlbmRpZgorc3RhdGljIHZvaWQJcmVnaW5zZXJ0IF9fQVJHUygoaW50LCBjaGFyX3UgKikpOworc3RhdGljIHZvaWQJcmVnaW5zZXJ0X2xpbWl0cyBfX0FSR1MoKGludCwgbG9uZywgbG9uZywgY2hhcl91ICopKTsKK3N0YXRpYyBjaGFyX3UJKnJlX3B1dF9sb25nIF9fQVJHUygoY2hhcl91ICpwciwgbG9uZ191IHZhbCkpOworc3RhdGljIGludAlyZWFkX2xpbWl0cyBfX0FSR1MoKGxvbmcgKiwgbG9uZyAqKSk7CitzdGF0aWMgdm9pZAlyZWd0YWlsIF9fQVJHUygoY2hhcl91ICosIGNoYXJfdSAqKSk7CitzdGF0aWMgdm9pZAlyZWdvcHRhaWwgX19BUkdTKChjaGFyX3UgKiwgY2hhcl91ICopKTsKKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiAicHJvZyIgY2FuIG1hdGNoIGEgbGluZSBicmVhay4KKyAqLworICAgIGludAorcmVfbXVsdGlsaW5lKHByb2cpCisgICAgcmVncHJvZ19UICpwcm9nOworeworICAgIHJldHVybiAocHJvZy0+cmVnZmxhZ3MgJiBSRl9IQVNOTCk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gInByb2ciIGxvb2tzIGJlZm9yZSB0aGUgc3RhcnQKKyAqIHBvc2l0aW9uIChwYXR0ZXJuIGNvbnRhaW5zICJcQDw9IiBvciAiXEA8ISIpLgorICovCisgICAgaW50CityZV9sb29rYmVoaW5kKHByb2cpCisgICAgcmVncHJvZ19UICpwcm9nOworeworICAgIHJldHVybiAocHJvZy0+cmVnZmxhZ3MgJiBSRl9MT09LQkgpOworfQorCisvKgorICogU2tpcCBwYXN0IHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAqIFN0b3AgYXQgZW5kIG9mICdwJyBvZiB3aGVyZSAnZGlyYycgaXMgZm91bmQgKCcvJywgJz8nLCBldGMpLgorICogVGFrZSBjYXJlIG9mIGNoYXJhY3RlcnMgd2l0aCBhIGJhY2tzbGFzaCBpbiBmcm9udCBvZiBpdC4KKyAqIFNraXAgc3RyaW5ncyBpbnNpZGUgWyBhbmQgXS4KKyAqIFdoZW4gIm5ld3AiIGlzIG5vdCBOVUxMIGFuZCAiZGlyYyIgaXMgJz8nLCBtYWtlIGFuIGFsbG9jYXRlZCBjb3B5IG9mIHRoZQorICogZXhwcmVzc2lvbiBhbmQgY2hhbmdlICJcPyIgdG8gIj8iLiAgSWYgIipuZXdwIiBpcyBub3QgTlVMTCB0aGUgZXhwcmVzc2lvbgorICogaXMgY2hhbmdlZCBpbi1wbGFjZS4KKyAqLworICAgIGNoYXJfdSAqCitza2lwX3JlZ2V4cChzdGFydHAsIGRpcmMsIG1hZ2ljLCBuZXdwKQorICAgIGNoYXJfdQkqc3RhcnRwOworICAgIGludAkJZGlyYzsKKyAgICBpbnQJCW1hZ2ljOworICAgIGNoYXJfdQkqKm5ld3A7Cit7CisgICAgaW50CQlteW1hZ2ljOworICAgIGNoYXJfdQkqcCA9IHN0YXJ0cDsKKworICAgIGlmIChtYWdpYykKKwlteW1hZ2ljID0gTUFHSUNfT047CisgICAgZWxzZQorCW15bWFnaWMgPSBNQUdJQ19PRkY7CisKKyAgICBmb3IgKDsgcFswXSAhPSBOVUw7ICsrcCkKKyAgICB7CisJaWYgKHBbMF0gPT0gZGlyYykJLyogZm91bmQgZW5kIG9mIHJlZ2V4cCAqLworCSAgICBicmVhazsKKwlpZiAoKHBbMF0gPT0gJ1snICYmIG15bWFnaWMgPj0gTUFHSUNfT04pCisJCXx8IChwWzBdID09ICdcXCcgJiYgcFsxXSA9PSAnWycgJiYgbXltYWdpYyA8PSBNQUdJQ19PRkYpKQorCXsKKwkgICAgcCA9IHNraXBfYW55b2YocCArIDEpOworCSAgICBpZiAocFswXSA9PSBOVUwpCisJCWJyZWFrOworCX0KKwllbHNlIGlmIChwWzBdID09ICdcXCcgJiYgcFsxXSAhPSBOVUwpCisJeworCSAgICBpZiAoZGlyYyA9PSAnPycgJiYgbmV3cCAhPSBOVUxMICYmIHBbMV0gPT0gJz8nKQorCSAgICB7CisJCS8qIGNoYW5nZSAiXD8iIHRvICI/IiwgbWFrZSBhIGNvcHkgZmlyc3QuICovCisJCWlmICgqbmV3cCA9PSBOVUxMKQorCQl7CisJCSAgICAqbmV3cCA9IHZpbV9zdHJzYXZlKHN0YXJ0cCk7CisJCSAgICBpZiAoKm5ld3AgIT0gTlVMTCkKKwkJCXAgPSAqbmV3cCArIChwIC0gc3RhcnRwKTsKKwkJfQorCQlpZiAoKm5ld3AgIT0gTlVMTCkKKwkJICAgIG1jaF9tZW1tb3ZlKHAsIHAgKyAxLCBTVFJMRU4ocCkpOworCQllbHNlCisJCSAgICArK3A7CisJICAgIH0KKwkgICAgZWxzZQorCQkrK3A7ICAgIC8qIHNraXAgbmV4dCBjaGFyYWN0ZXIgKi8KKwkgICAgaWYgKCpwID09ICd2JykKKwkJbXltYWdpYyA9IE1BR0lDX0FMTDsKKwkgICAgZWxzZSBpZiAoKnAgPT0gJ1YnKQorCQlteW1hZ2ljID0gTUFHSUNfTk9ORTsKKwl9CisjaWZkZWYgRkVBVF9NQllURQorCWVsc2UgaWYgKGhhc19tYnl0ZSkKKwkgICAgcCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHApIC0gMTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gcDsKK30KKworLyoKKyAqIHZpbV9yZWdjb21wIC0gY29tcGlsZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbnRvIGludGVybmFsIGNvZGUKKyAqCisgKiBXZSBjYW4ndCBhbGxvY2F0ZSBzcGFjZSB1bnRpbCB3ZSBrbm93IGhvdyBiaWcgdGhlIGNvbXBpbGVkIGZvcm0gd2lsbCBiZSwKKyAqIGJ1dCB3ZSBjYW4ndCBjb21waWxlIGl0IChhbmQgdGh1cyBrbm93IGhvdyBiaWcgaXQgaXMpIHVudGlsIHdlJ3ZlIGdvdCBhCisgKiBwbGFjZSB0byBwdXQgdGhlIGNvZGUuICBTbyB3ZSBjaGVhdDogIHdlIGNvbXBpbGUgaXQgdHdpY2UsIG9uY2Ugd2l0aCBjb2RlCisgKiBnZW5lcmF0aW9uIHR1cm5lZCBvZmYgYW5kIHNpemUgY291bnRpbmcgdHVybmVkIG9uLCBhbmQgb25jZSAiZm9yIHJlYWwiLgorICogVGhpcyBhbHNvIG1lYW5zIHRoYXQgd2UgZG9uJ3QgYWxsb2NhdGUgc3BhY2UgdW50aWwgd2UgYXJlIHN1cmUgdGhhdCB0aGUKKyAqIHRoaW5nIHJlYWxseSB3aWxsIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5LCBhbmQgd2UgbmV2ZXIgaGF2ZSB0byBtb3ZlIHRoZQorICogY29kZSBhbmQgdGh1cyBpbnZhbGlkYXRlIHBvaW50ZXJzIGludG8gaXQuICAoTm90ZSB0aGF0IGl0IGhhcyB0byBiZSBpbgorICogb25lIHBpZWNlIGJlY2F1c2UgdmltX2ZyZWUoKSBtdXN0IGJlIGFibGUgdG8gZnJlZSBpdCBhbGwuKQorICoKKyAqIFdoZXRoZXIgdXBwZXIvbG93ZXIgY2FzZSBpcyB0byBiZSBpZ25vcmVkIGlzIGRlY2lkZWQgd2hlbiBleGVjdXRpbmcgdGhlCisgKiBwcm9ncmFtLCBpdCBkb2VzIG5vdCBtYXR0ZXIgaGVyZS4KKyAqCisgKiBCZXdhcmUgdGhhdCB0aGUgb3B0aW1pemF0aW9uLXByZXBhcmF0aW9uIGNvZGUgaW4gaGVyZSBrbm93cyBhYm91dCBzb21lCisgKiBvZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb21waWxlZCByZWdleHAuCisgKiAicmVfZmxhZ3MiOiBSRV9NQUdJQyBhbmQvb3IgUkVfU1RSSU5HLgorICovCisgICAgcmVncHJvZ19UICoKK3ZpbV9yZWdjb21wKGV4cHIsIHJlX2ZsYWdzKQorICAgIGNoYXJfdQkqZXhwcjsKKyAgICBpbnQJCXJlX2ZsYWdzOworeworICAgIHJlZ3Byb2dfVAkqcjsKKyAgICBjaGFyX3UJKnNjYW47CisgICAgY2hhcl91CSpsb25nZXN0OworICAgIGludAkJbGVuOworICAgIGludAkJZmxhZ3M7CisKKyAgICBpZiAoZXhwciA9PSBOVUxMKQorCUVNU0dfUkVUX05VTEwoXyhlX251bGwpKTsKKworICAgIGluaXRfY2xhc3NfdGFiKCk7CisKKyAgICAvKgorICAgICAqIEZpcnN0IHBhc3M6IGRldGVybWluZSBzaXplLCBsZWdhbGl0eS4KKyAgICAgKi8KKyAgICByZWdjb21wX3N0YXJ0KGV4cHIsIHJlX2ZsYWdzKTsKKyAgICByZWdjb2RlID0gSlVTVF9DQUxDX1NJWkU7CisgICAgcmVnYyhSRUdNQUdJQyk7CisgICAgaWYgKHJlZyhSRUdfTk9QQVJFTiwgJmZsYWdzKSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgLyogU21hbGwgZW5vdWdoIGZvciBwb2ludGVyLXN0b3JhZ2UgY29udmVudGlvbj8gKi8KKyNpZmRlZiBTTUFMTF9NQUxMT0MJCS8qIDE2IGJpdCBzdG9yYWdlIGFsbG9jYXRpb24gKi8KKyAgICBpZiAocmVnc2l6ZSA+PSA2NTUzNkwgLSAyNTZMKQorCUVNU0dfUkVUX05VTEwoXygiRTMzOTogUGF0dGVybiB0b28gbG9uZyIpKTsKKyNlbmRpZgorCisgICAgLyogQWxsb2NhdGUgc3BhY2UuICovCisgICAgciA9IChyZWdwcm9nX1QgKilsYWxsb2Moc2l6ZW9mKHJlZ3Byb2dfVCkgKyByZWdzaXplLCBUUlVFKTsKKyAgICBpZiAociA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgLyoKKyAgICAgKiBTZWNvbmQgcGFzczogZW1pdCBjb2RlLgorICAgICAqLworICAgIHJlZ2NvbXBfc3RhcnQoZXhwciwgcmVfZmxhZ3MpOworICAgIHJlZ2NvZGUgPSByLT5wcm9ncmFtOworICAgIHJlZ2MoUkVHTUFHSUMpOworICAgIGlmIChyZWcoUkVHX05PUEFSRU4sICZmbGFncykgPT0gTlVMTCkKKyAgICB7CisJdmltX2ZyZWUocik7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRGlnIG91dCBpbmZvcm1hdGlvbiBmb3Igb3B0aW1pemF0aW9ucy4gKi8KKyAgICByLT5yZWdzdGFydCA9IE5VTDsJCS8qIFdvcnN0LWNhc2UgZGVmYXVsdHMuICovCisgICAgci0+cmVnYW5jaCA9IDA7CisgICAgci0+cmVnbXVzdCA9IE5VTEw7CisgICAgci0+cmVnbWxlbiA9IDA7CisgICAgci0+cmVnZmxhZ3MgPSByZWdmbGFnczsKKyAgICBpZiAoZmxhZ3MgJiBIQVNOTCkKKwlyLT5yZWdmbGFncyB8PSBSRl9IQVNOTDsKKyAgICBpZiAoZmxhZ3MgJiBIQVNMT09LQkgpCisJci0+cmVnZmxhZ3MgfD0gUkZfTE9PS0JIOworI2lmZGVmIEZFQVRfU1lOX0hMCisgICAgLyogUmVtZW1iZXIgd2hldGhlciB0aGlzIHBhdHRlcm4gaGFzIGFueSBceiBzcGVjaWFscyBpbiBpdC4gKi8KKyAgICByLT5yZWdoYXN6ID0gcmVfaGFzX3o7CisjZW5kaWYKKyAgICBzY2FuID0gci0+cHJvZ3JhbSArIDE7CS8qIEZpcnN0IEJSQU5DSC4gKi8KKyAgICBpZiAoT1AocmVnbmV4dChzY2FuKSkgPT0gRU5EKSAgIC8qIE9ubHkgb25lIHRvcC1sZXZlbCBjaG9pY2UuICovCisgICAgeworCXNjYW4gPSBPUEVSQU5EKHNjYW4pOworCisJLyogU3RhcnRpbmctcG9pbnQgaW5mby4gKi8KKwlpZiAoT1Aoc2NhbikgPT0gQk9MIHx8IE9QKHNjYW4pID09IFJFX0JPRikKKwl7CisJICAgIHItPnJlZ2FuY2grKzsKKwkgICAgc2NhbiA9IHJlZ25leHQoc2Nhbik7CisJfQorCisJaWYgKE9QKHNjYW4pID09IEVYQUNUTFkpCisJeworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJci0+cmVnc3RhcnQgPSAoKm1iX3B0cjJjaGFyKShPUEVSQU5EKHNjYW4pKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCXItPnJlZ3N0YXJ0ID0gKk9QRVJBTkQoc2Nhbik7CisJfQorCWVsc2UgaWYgKChPUChzY2FuKSA9PSBCT1cKKwkJICAgIHx8IE9QKHNjYW4pID09IEVPVworCQkgICAgfHwgT1Aoc2NhbikgPT0gTk9USElORworCQkgICAgfHwgT1Aoc2NhbikgPT0gTU9QRU4gKyAwIHx8IE9QKHNjYW4pID09IE5PUEVOCisJCSAgICB8fCBPUChzY2FuKSA9PSBNQ0xPU0UgKyAwIHx8IE9QKHNjYW4pID09IE5DTE9TRSkKKwkJICYmIE9QKHJlZ25leHQoc2NhbikpID09IEVYQUNUTFkpCisJeworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJci0+cmVnc3RhcnQgPSAoKm1iX3B0cjJjaGFyKShPUEVSQU5EKHJlZ25leHQoc2NhbikpKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCXItPnJlZ3N0YXJ0ID0gKk9QRVJBTkQocmVnbmV4dChzY2FuKSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSdzIHNvbWV0aGluZyBleHBlbnNpdmUgaW4gdGhlIHIuZS4sIGZpbmQgdGhlIGxvbmdlc3QKKwkgKiBsaXRlcmFsIHN0cmluZyB0aGF0IG11c3QgYXBwZWFyIGFuZCBtYWtlIGl0IHRoZSByZWdtdXN0LiAgUmVzb2x2ZQorCSAqIHRpZXMgaW4gZmF2b3Igb2YgbGF0ZXIgc3RyaW5ncywgc2luY2UgdGhlIHJlZ3N0YXJ0IGNoZWNrIHdvcmtzCisJICogd2l0aCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByLmUuIGFuZCBhdm9pZGluZyBkdXBsaWNhdGlvbgorCSAqIHN0cmVuZ3RoZW5zIGNoZWNraW5nLiAgTm90IGEgc3Ryb25nIHJlYXNvbiwgYnV0IHN1ZmZpY2llbnQgaW4gdGhlCisJICogYWJzZW5jZSBvZiBvdGhlcnMuCisJICovCisJLyoKKwkgKiBXaGVuIHRoZSByLmUuIHN0YXJ0cyB3aXRoIEJPVywgaXQgaXMgZmFzdGVyIHRvIGxvb2sgZm9yIGEgcmVnbXVzdAorCSAqIGZpcnN0LiBVc2VkIGEgbG90IGZvciAiIyIgYW5kICIqIiBjb21tYW5kcy4gKEFkZGVkIGJ5IG1vb2wpLgorCSAqLworCWlmICgoZmxhZ3MgJiBTUFNUQVJUIHx8IE9QKHNjYW4pID09IEJPVyB8fCBPUChzY2FuKSA9PSBFT1cpCisJCQkJCQkJICAmJiAhKGZsYWdzICYgSEFTTkwpKQorCXsKKwkgICAgbG9uZ2VzdCA9IE5VTEw7CisJICAgIGxlbiA9IDA7CisJICAgIGZvciAoOyBzY2FuICE9IE5VTEw7IHNjYW4gPSByZWduZXh0KHNjYW4pKQorCQlpZiAoT1Aoc2NhbikgPT0gRVhBQ1RMWSAmJiBTVFJMRU4oT1BFUkFORChzY2FuKSkgPj0gKHNpemVfdClsZW4pCisJCXsKKwkJICAgIGxvbmdlc3QgPSBPUEVSQU5EKHNjYW4pOworCQkgICAgbGVuID0gKGludClTVFJMRU4oT1BFUkFORChzY2FuKSk7CisJCX0KKwkgICAgci0+cmVnbXVzdCA9IGxvbmdlc3Q7CisJICAgIHItPnJlZ21sZW4gPSBsZW47CisJfQorICAgIH0KKyNpZmRlZiBERUJVRworICAgIHJlZ2R1bXAoZXhwciwgcik7CisjZW5kaWYKKyAgICByZXR1cm4gcjsKK30KKworLyoKKyAqIFNldHVwIHRvIHBhcnNlIHRoZSByZWdleHAuICBVc2VkIG9uY2UgdG8gZ2V0IHRoZSBsZW5ndGggYW5kIG9uY2UgdG8gZG8gaXQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcmVnY29tcF9zdGFydChleHByLCByZV9mbGFncykKKyAgICBjaGFyX3UJKmV4cHI7CisgICAgaW50CQlyZV9mbGFnczsJICAgIC8qIHNlZSB2aW1fcmVnY29tcCgpICovCit7CisgICAgaW5pdGNocihleHByKTsKKyAgICBpZiAocmVfZmxhZ3MgJiBSRV9NQUdJQykKKwlyZWdfbWFnaWMgPSBNQUdJQ19PTjsKKyAgICBlbHNlCisJcmVnX21hZ2ljID0gTUFHSUNfT0ZGOworICAgIHJlZ19zdHJpbmcgPSAocmVfZmxhZ3MgJiBSRV9TVFJJTkcpOworCisgICAgbnVtX2NvbXBsZXhfYnJhY2VzID0gMDsKKyAgICByZWducGFyID0gMTsKKyAgICB2aW1fbWVtc2V0KGhhZF9lbmRicmFjZSwgMCwgc2l6ZW9mKGhhZF9lbmRicmFjZSkpOworI2lmZGVmIEZFQVRfU1lOX0hMCisgICAgcmVnbnpwYXIgPSAxOworICAgIHJlX2hhc196ID0gMDsKKyNlbmRpZgorICAgIHJlZ3NpemUgPSAwTDsKKyAgICByZWdmbGFncyA9IDA7CisjaWYgZGVmaW5lZChGRUFUX1NZTl9ITCkgfHwgZGVmaW5lZChQUk9UTykKKyAgICBoYWRfZW9sID0gRkFMU0U7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoRkVBVF9TWU5fSEwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ2hlY2sgaWYgZHVyaW5nIHRoZSBwcmV2aW91cyBjYWxsIHRvIHZpbV9yZWdjb21wIHRoZSBFT0wgaXRlbSAiJCIgaGFzIGJlZW4KKyAqIGZvdW5kLiAgVGhpcyBpcyBtZXNzeSwgYnV0IGl0IHdvcmtzIGZpbmUuCisgKi8KKyAgICBpbnQKK3ZpbV9yZWdjb21wX2hhZF9lb2woKQoreworICAgIHJldHVybiBoYWRfZW9sOworfQorI2VuZGlmCisKKy8qCisgKiByZWcgLSByZWd1bGFyIGV4cHJlc3Npb24sIGkuZS4gbWFpbiBib2R5IG9yIHBhcmVudGhlc2l6ZWQgdGhpbmcKKyAqCisgKiBDYWxsZXIgbXVzdCBhYnNvcmIgb3BlbmluZyBwYXJlbnRoZXNpcy4KKyAqCisgKiBDb21iaW5pbmcgcGFyZW50aGVzaXMgaGFuZGxpbmcgd2l0aCB0aGUgYmFzZSBsZXZlbCBvZiByZWd1bGFyIGV4cHJlc3Npb24KKyAqIGlzIGEgdHJpZmxlIGZvcmNlZCwgYnV0IHRoZSBuZWVkIHRvIHRpZSB0aGUgdGFpbHMgb2YgdGhlIGJyYW5jaGVzIHRvIHdoYXQKKyAqIGZvbGxvd3MgbWFrZXMgaXQgaGFyZCB0byBhdm9pZC4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorcmVnKHBhcmVuLCBmbGFncCkKKyAgICBpbnQJCXBhcmVuOwkvKiBSRUdfTk9QQVJFTiwgUkVHX1BBUkVOLCBSRUdfTlBBUkVOIG9yIFJFR19aUEFSRU4gKi8KKyAgICBpbnQJCSpmbGFncDsKK3sKKyAgICBjaGFyX3UJKnJldDsKKyAgICBjaGFyX3UJKmJyOworICAgIGNoYXJfdQkqZW5kZXI7CisgICAgaW50CQlwYXJubyA9IDA7CisgICAgaW50CQlmbGFnczsKKworICAgICpmbGFncCA9IEhBU1dJRFRIOwkJLyogVGVudGF0aXZlbHkuICovCisKKyNpZmRlZiBGRUFUX1NZTl9ITAorICAgIGlmIChwYXJlbiA9PSBSRUdfWlBBUkVOKQorICAgIHsKKwkvKiBNYWtlIGEgWk9QRU4gbm9kZS4gKi8KKwlpZiAocmVnbnpwYXIgPj0gTlNVQkVYUCkKKwkgICAgRU1TR19SRVRfTlVMTChfKCJFNTA6IFRvbyBtYW55IFxceigiKSk7CisJcGFybm8gPSByZWduenBhcjsKKwlyZWduenBhcisrOworCXJldCA9IHJlZ25vZGUoWk9QRU4gKyBwYXJubyk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCWlmIChwYXJlbiA9PSBSRUdfUEFSRU4pCisgICAgeworCS8qIE1ha2UgYSBNT1BFTiBub2RlLiAqLworCWlmIChyZWducGFyID49IE5TVUJFWFApCisJICAgIEVNU0dfTV9SRVRfTlVMTChfKCJFNTE6IFRvbyBtYW55ICVzKCIpLCByZWdfbWFnaWMgPT0gTUFHSUNfQUxMKTsKKwlwYXJubyA9IHJlZ25wYXI7CisJKytyZWducGFyOworCXJldCA9IHJlZ25vZGUoTU9QRU4gKyBwYXJubyk7CisgICAgfQorICAgIGVsc2UgaWYgKHBhcmVuID09IFJFR19OUEFSRU4pCisgICAgeworCS8qIE1ha2UgYSBOT1BFTiBub2RlLiAqLworCXJldCA9IHJlZ25vZGUoTk9QRU4pOworICAgIH0KKyAgICBlbHNlCisJcmV0ID0gTlVMTDsKKworICAgIC8qIFBpY2sgdXAgdGhlIGJyYW5jaGVzLCBsaW5raW5nIHRoZW0gdG9nZXRoZXIuICovCisgICAgYnIgPSByZWdicmFuY2goJmZsYWdzKTsKKyAgICBpZiAoYnIgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyAgICBpZiAocmV0ICE9IE5VTEwpCisJcmVndGFpbChyZXQsIGJyKTsJLyogW01aXU9QRU4gLT4gZmlyc3QuICovCisgICAgZWxzZQorCXJldCA9IGJyOworICAgIC8qIElmIG9uZSBvZiB0aGUgYnJhbmNoZXMgY2FuIGJlIHplcm8td2lkdGgsIHRoZSB3aG9sZSB0aGluZyBjYW4uCisgICAgICogSWYgb25lIG9mIHRoZSBicmFuY2hlcyBoYXMgKiBhdCBzdGFydCBvciBtYXRjaGVzIGEgbGluZS1icmVhaywgdGhlCisgICAgICogd2hvbGUgdGhpbmcgY2FuLiAqLworICAgIGlmICghKGZsYWdzICYgSEFTV0lEVEgpKQorCSpmbGFncCAmPSB+SEFTV0lEVEg7CisgICAgKmZsYWdwIHw9IGZsYWdzICYgKFNQU1RBUlQgfCBIQVNOTCB8IEhBU0xPT0tCSCk7CisgICAgd2hpbGUgKHBlZWtjaHIoKSA9PSBNYWdpYygnfCcpKQorICAgIHsKKwlza2lwY2hyKCk7CisJYnIgPSByZWdicmFuY2goJmZsYWdzKTsKKwlpZiAoYnIgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisJcmVndGFpbChyZXQsIGJyKTsJLyogQlJBTkNIIC0+IEJSQU5DSC4gKi8KKwlpZiAoIShmbGFncyAmIEhBU1dJRFRIKSkKKwkgICAgKmZsYWdwICY9IH5IQVNXSURUSDsKKwkqZmxhZ3AgfD0gZmxhZ3MgJiAoU1BTVEFSVCB8IEhBU05MIHwgSEFTTE9PS0JIKTsKKyAgICB9CisKKyAgICAvKiBNYWtlIGEgY2xvc2luZyBub2RlLCBhbmQgaG9vayBpdCBvbiB0aGUgZW5kLiAqLworICAgIGVuZGVyID0gcmVnbm9kZSgKKyNpZmRlZiBGRUFUX1NZTl9ITAorCSAgICBwYXJlbiA9PSBSRUdfWlBBUkVOID8gWkNMT1NFICsgcGFybm8gOgorI2VuZGlmCisJICAgIHBhcmVuID09IFJFR19QQVJFTiA/IE1DTE9TRSArIHBhcm5vIDoKKwkgICAgcGFyZW4gPT0gUkVHX05QQVJFTiA/IE5DTE9TRSA6IEVORCk7CisgICAgcmVndGFpbChyZXQsIGVuZGVyKTsKKworICAgIC8qIEhvb2sgdGhlIHRhaWxzIG9mIHRoZSBicmFuY2hlcyB0byB0aGUgY2xvc2luZyBub2RlLiAqLworICAgIGZvciAoYnIgPSByZXQ7IGJyICE9IE5VTEw7IGJyID0gcmVnbmV4dChicikpCisJcmVnb3B0YWlsKGJyLCBlbmRlcik7CisKKyAgICAvKiBDaGVjayBmb3IgcHJvcGVyIHRlcm1pbmF0aW9uLiAqLworICAgIGlmIChwYXJlbiAhPSBSRUdfTk9QQVJFTiAmJiBnZXRjaHIoKSAhPSBNYWdpYygnKScpKQorICAgIHsKKyNpZmRlZiBGRUFUX1NZTl9ITAorCWlmIChwYXJlbiA9PSBSRUdfWlBBUkVOKQorCSAgICBFTVNHX1JFVF9OVUxMKF8oIkU1MjogVW5tYXRjaGVkIFxceigiKSkKKwllbHNlCisjZW5kaWYKKwkgICAgaWYgKHBhcmVuID09IFJFR19OUEFSRU4pCisJICAgIEVNU0dfTV9SRVRfTlVMTChfKCJFNTM6IFVubWF0Y2hlZCAlcyUlKCIpLCByZWdfbWFnaWMgPT0gTUFHSUNfQUxMKQorCWVsc2UKKwkgICAgRU1TR19NX1JFVF9OVUxMKF8oIkU1NDogVW5tYXRjaGVkICVzKCIpLCByZWdfbWFnaWMgPT0gTUFHSUNfQUxMKQorICAgIH0KKyAgICBlbHNlIGlmIChwYXJlbiA9PSBSRUdfTk9QQVJFTiAmJiBwZWVrY2hyKCkgIT0gTlVMKQorICAgIHsKKwlpZiAoY3VyY2hyID09IE1hZ2ljKCcpJykpCisJICAgIEVNU0dfTV9SRVRfTlVMTChfKCJFNTU6IFVubWF0Y2hlZCAlcykiKSwgcmVnX21hZ2ljID09IE1BR0lDX0FMTCkKKwllbHNlCisJICAgIEVNU0dfUkVUX05VTEwoXyhlX3RyYWlsaW5nKSkJLyogIkNhbid0IGhhcHBlbiIuICovCisJLyogTk9UUkVBQ0hFRCAqLworICAgIH0KKyAgICAvKgorICAgICAqIEhlcmUgd2Ugc2V0IHRoZSBmbGFnIGFsbG93aW5nIGJhY2sgcmVmZXJlbmNlcyB0byB0aGlzIHNldCBvZgorICAgICAqIHBhcmVudGhlc2VzLgorICAgICAqLworICAgIGlmIChwYXJlbiA9PSBSRUdfUEFSRU4pCisJaGFkX2VuZGJyYWNlW3Bhcm5vXSA9IFRSVUU7CS8qIGhhdmUgc2VlbiB0aGUgY2xvc2UgcGFyZW4gKi8KKyAgICByZXR1cm4gcmV0OworfQorCisvKgorICogcmVnYnJhbmNoIC0gb25lIGFsdGVybmF0aXZlIG9mIGFuIHwgb3BlcmF0b3IKKyAqCisgKiBJbXBsZW1lbnRzIHRoZSAmIG9wZXJhdG9yLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCityZWdicmFuY2goZmxhZ3ApCisgICAgaW50CQkqZmxhZ3A7Cit7CisgICAgY2hhcl91CSpyZXQ7CisgICAgY2hhcl91CSpjaGFpbiA9IE5VTEw7CisgICAgY2hhcl91CSpsYXRlc3Q7CisgICAgaW50CQlmbGFnczsKKworICAgICpmbGFncCA9IFdPUlNUIHwgSEFTTkw7CQkvKiBUZW50YXRpdmVseS4gKi8KKworICAgIHJldCA9IHJlZ25vZGUoQlJBTkNIKTsKKyAgICBmb3IgKDs7KQorICAgIHsKKwlsYXRlc3QgPSByZWdjb25jYXQoJmZsYWdzKTsKKwlpZiAobGF0ZXN0ID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCS8qIElmIG9uZSBvZiB0aGUgYnJhbmNoZXMgaGFzIHdpZHRoLCB0aGUgd2hvbGUgdGhpbmcgaGFzLiAgSWYgb25lIG9mCisJICogdGhlIGJyYW5jaGVzIGFuY2hvcnMgYXQgc3RhcnQtb2YtbGluZSwgdGhlIHdob2xlIHRoaW5nIGRvZXMuCisJICogSWYgb25lIG9mIHRoZSBicmFuY2hlcyB1c2VzIGxvb2stYmVoaW5kLCB0aGUgd2hvbGUgdGhpbmcgZG9lcy4gKi8KKwkqZmxhZ3AgfD0gZmxhZ3MgJiAoSEFTV0lEVEggfCBTUFNUQVJUIHwgSEFTTE9PS0JIKTsKKwkvKiBJZiBvbmUgb2YgdGhlIGJyYW5jaGVzIGRvZXNuJ3QgbWF0Y2ggYSBsaW5lLWJyZWFrLCB0aGUgd2hvbGUgdGhpbmcKKwkgKiBkb2Vzbid0LiAqLworCSpmbGFncCAmPSB+SEFTTkwgfCAoZmxhZ3MgJiBIQVNOTCk7CisJaWYgKGNoYWluICE9IE5VTEwpCisJICAgIHJlZ3RhaWwoY2hhaW4sIGxhdGVzdCk7CisJaWYgKHBlZWtjaHIoKSAhPSBNYWdpYygnJicpKQorCSAgICBicmVhazsKKwlza2lwY2hyKCk7CisJcmVndGFpbChsYXRlc3QsIHJlZ25vZGUoRU5EKSk7IC8qIG9wZXJhbmQgZW5kcyAqLworCXJlZ2luc2VydChNQVRDSCwgbGF0ZXN0KTsKKwljaGFpbiA9IGxhdGVzdDsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKgorICogcmVnYnJhbmNoIC0gb25lIGFsdGVybmF0aXZlIG9mIGFuIHwgb3IgJiBvcGVyYXRvcgorICoKKyAqIEltcGxlbWVudHMgdGhlIGNvbmNhdGVuYXRpb24gb3BlcmF0b3IuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3JlZ2NvbmNhdChmbGFncCkKKyAgICBpbnQJCSpmbGFncDsKK3sKKyAgICBjaGFyX3UJKmZpcnN0ID0gTlVMTDsKKyAgICBjaGFyX3UJKmNoYWluID0gTlVMTDsKKyAgICBjaGFyX3UJKmxhdGVzdDsKKyAgICBpbnQJCWZsYWdzOworICAgIGludAkJY29udCA9IFRSVUU7CisKKyAgICAqZmxhZ3AgPSBXT1JTVDsJCS8qIFRlbnRhdGl2ZWx5LiAqLworCisgICAgd2hpbGUgKGNvbnQpCisgICAgeworCXN3aXRjaCAocGVla2NocigpKQorCXsKKwkgICAgY2FzZSBOVUw6CisJICAgIGNhc2UgTWFnaWMoJ3wnKToKKwkgICAgY2FzZSBNYWdpYygnJicpOgorCSAgICBjYXNlIE1hZ2ljKCcpJyk6CisJCQkgICAgY29udCA9IEZBTFNFOworCQkJICAgIGJyZWFrOworCSAgICBjYXNlIE1hZ2ljKCdaJyk6CisjaWZkZWYgRkVBVF9NQllURQorCQkJICAgIHJlZ2ZsYWdzIHw9IFJGX0lDT01CSU5FOworI2VuZGlmCisJCQkgICAgc2tpcGNocl9rZWVwc3RhcnQoKTsKKwkJCSAgICBicmVhazsKKwkgICAgY2FzZSBNYWdpYygnYycpOgorCQkJICAgIHJlZ2ZsYWdzIHw9IFJGX0lDQVNFOworCQkJICAgIHNraXBjaHJfa2VlcHN0YXJ0KCk7CisJCQkgICAgYnJlYWs7CisJICAgIGNhc2UgTWFnaWMoJ0MnKToKKwkJCSAgICByZWdmbGFncyB8PSBSRl9OT0lDQVNFOworCQkJICAgIHNraXBjaHJfa2VlcHN0YXJ0KCk7CisJCQkgICAgYnJlYWs7CisJICAgIGNhc2UgTWFnaWMoJ3YnKToKKwkJCSAgICByZWdfbWFnaWMgPSBNQUdJQ19BTEw7CisJCQkgICAgc2tpcGNocl9rZWVwc3RhcnQoKTsKKwkJCSAgICBjdXJjaHIgPSAtMTsKKwkJCSAgICBicmVhazsKKwkgICAgY2FzZSBNYWdpYygnbScpOgorCQkJICAgIHJlZ19tYWdpYyA9IE1BR0lDX09OOworCQkJICAgIHNraXBjaHJfa2VlcHN0YXJ0KCk7CisJCQkgICAgY3VyY2hyID0gLTE7CisJCQkgICAgYnJlYWs7CisJICAgIGNhc2UgTWFnaWMoJ00nKToKKwkJCSAgICByZWdfbWFnaWMgPSBNQUdJQ19PRkY7CisJCQkgICAgc2tpcGNocl9rZWVwc3RhcnQoKTsKKwkJCSAgICBjdXJjaHIgPSAtMTsKKwkJCSAgICBicmVhazsKKwkgICAgY2FzZSBNYWdpYygnVicpOgorCQkJICAgIHJlZ19tYWdpYyA9IE1BR0lDX05PTkU7CisJCQkgICAgc2tpcGNocl9rZWVwc3RhcnQoKTsKKwkJCSAgICBjdXJjaHIgPSAtMTsKKwkJCSAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJCSAgICBsYXRlc3QgPSByZWdwaWVjZSgmZmxhZ3MpOworCQkJICAgIGlmIChsYXRlc3QgPT0gTlVMTCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCSAgICAqZmxhZ3AgfD0gZmxhZ3MgJiAoSEFTV0lEVEggfCBIQVNOTCB8IEhBU0xPT0tCSCk7CisJCQkgICAgaWYgKGNoYWluID09IE5VTEwpCS8qIEZpcnN0IHBpZWNlLiAqLworCQkJCSpmbGFncCB8PSBmbGFncyAmIFNQU1RBUlQ7CisJCQkgICAgZWxzZQorCQkJCXJlZ3RhaWwoY2hhaW4sIGxhdGVzdCk7CisJCQkgICAgY2hhaW4gPSBsYXRlc3Q7CisJCQkgICAgaWYgKGZpcnN0ID09IE5VTEwpCisJCQkJZmlyc3QgPSBsYXRlc3Q7CisJCQkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBpZiAoZmlyc3QgPT0gTlVMTCkJCS8qIExvb3AgcmFuIHplcm8gdGltZXMuICovCisJZmlyc3QgPSByZWdub2RlKE5PVEhJTkcpOworICAgIHJldHVybiBmaXJzdDsKK30KKworLyoKKyAqIHJlZ3BpZWNlIC0gc29tZXRoaW5nIGZvbGxvd2VkIGJ5IHBvc3NpYmxlIFsqKz1dCisgKgorICogTm90ZSB0aGF0IHRoZSBicmFuY2hpbmcgY29kZSBzZXF1ZW5jZXMgdXNlZCBmb3IgPSBhbmQgdGhlIGdlbmVyYWwgY2FzZXMKKyAqIG9mICogYW5kICsgYXJlIHNvbWV3aGF0IG9wdGltaXplZDogIHRoZXkgdXNlIHRoZSBzYW1lIE5PVEhJTkcgbm9kZSBhcworICogYm90aCB0aGUgZW5kbWFya2VyIGZvciB0aGVpciBicmFuY2ggbGlzdCBhbmQgdGhlIGJvZHkgb2YgdGhlIGxhc3QgYnJhbmNoLgorICogSXQgbWlnaHQgc2VlbSB0aGF0IHRoaXMgbm9kZSBjb3VsZCBiZSBkaXNwZW5zZWQgd2l0aCBlbnRpcmVseSwgYnV0IHRoZQorICogZW5kbWFya2VyIHJvbGUgaXMgbm90IHJlZHVuZGFudC4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorcmVncGllY2UoZmxhZ3ApCisgICAgaW50CQkgICAgKmZsYWdwOworeworICAgIGNoYXJfdQkgICAgKnJldDsKKyAgICBpbnQJCSAgICBvcDsKKyAgICBjaGFyX3UJICAgICpuZXh0OworICAgIGludAkJICAgIGZsYWdzOworICAgIGxvbmcJICAgIG1pbnZhbDsKKyAgICBsb25nCSAgICBtYXh2YWw7CisKKyAgICByZXQgPSByZWdhdG9tKCZmbGFncyk7CisgICAgaWYgKHJldCA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgb3AgPSBwZWVrY2hyKCk7CisgICAgaWYgKHJlX211bHRpX3R5cGUob3ApID09IE5PVF9NVUxUSSkKKyAgICB7CisJKmZsYWdwID0gZmxhZ3M7CisJcmV0dXJuIHJldDsKKyAgICB9CisgICAgaWYgKCEoZmxhZ3MgJiBIQVNXSURUSCkgJiYgcmVfbXVsdGlfdHlwZShvcCkgPT0gTVVMVElfTVVMVCkKKyAgICB7CisJaWYgKG9wID09IE1hZ2ljKCcqJykpCisJICAgIEVNU0dfTV9SRVRfTlVMTChfKCJFNTY6ICVzKiBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IiksCisJCQkJCQkgICAgICAgcmVnX21hZ2ljID49IE1BR0lDX09OKTsKKwlpZiAob3AgPT0gTWFnaWMoJysnKSkKKwkgICAgRU1TR19NX1JFVF9OVUxMKF8oIkU1NzogJXMrIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiKSwKKwkJCQkJCSAgICAgICByZWdfbWFnaWMgPT0gTUFHSUNfQUxMKTsKKwkvKiAiXHt9IiBpcyBjaGVja2VkIGJlbG93LCBpdCdzIGFsbG93ZWQgd2hlbiB0aGVyZSBpcyBhbiB1cHBlciBsaW1pdCAqLworICAgIH0KKyAgICAvKiBkZWZhdWx0IGZsYWdzICovCisgICAgKmZsYWdwID0gKFdPUlNUIHwgU1BTVEFSVCB8IChmbGFncyAmIChIQVNOTCB8IEhBU0xPT0tCSCkpKTsKKworICAgIHNraXBjaHIoKTsKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKwljYXNlIE1hZ2ljKCcqJyk6CisJICAgIGlmIChmbGFncyAmIFNJTVBMRSkKKwkJcmVnaW5zZXJ0KFNUQVIsIHJldCk7CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBFbWl0IHgqIGFzICh4JnwpLCB3aGVyZSAmIG1lYW5zICJzZWxmIi4gKi8KKwkJcmVnaW5zZXJ0KEJSQU5DSCwgcmV0KTsgLyogRWl0aGVyIHggKi8KKwkJcmVnb3B0YWlsKHJldCwgcmVnbm9kZShCQUNLKSk7CS8qIGFuZCBsb29wICovCisJCXJlZ29wdGFpbChyZXQsIHJldCk7CS8qIGJhY2sgKi8KKwkJcmVndGFpbChyZXQsIHJlZ25vZGUoQlJBTkNIKSk7CS8qIG9yICovCisJCXJlZ3RhaWwocmV0LCByZWdub2RlKE5PVEhJTkcpKTsgLyogbnVsbC4gKi8KKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgTWFnaWMoJysnKToKKwkgICAgaWYgKGZsYWdzICYgU0lNUExFKQorCQlyZWdpbnNlcnQoUExVUywgcmV0KTsKKwkgICAgZWxzZQorCSAgICB7CisJCS8qIEVtaXQgeCsgYXMgeCgmfCksIHdoZXJlICYgbWVhbnMgInNlbGYiLiAqLworCQluZXh0ID0gcmVnbm9kZShCUkFOQ0gpOyAvKiBFaXRoZXIgKi8KKwkJcmVndGFpbChyZXQsIG5leHQpOworCQlyZWd0YWlsKHJlZ25vZGUoQkFDSyksIHJldCk7CS8qIGxvb3AgYmFjayAqLworCQlyZWd0YWlsKG5leHQsIHJlZ25vZGUoQlJBTkNIKSk7IC8qIG9yICovCisJCXJlZ3RhaWwocmV0LCByZWdub2RlKE5PVEhJTkcpKTsgLyogbnVsbC4gKi8KKwkgICAgfQorCSAgICAqZmxhZ3AgPSAoV09SU1QgfCBIQVNXSURUSCB8IChmbGFncyAmIChIQVNOTCB8IEhBU0xPT0tCSCkpKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIE1hZ2ljKCdAJyk6CisJICAgIHsKKwkJaW50CWxvcCA9IEVORDsKKworCQlzd2l0Y2ggKG5vX01hZ2ljKGdldGNocigpKSkKKwkJeworCQkgICAgY2FzZSAnPSc6IGxvcCA9IE1BVENIOyBicmVhazsJCSAgLyogXEA9ICovCisJCSAgICBjYXNlICchJzogbG9wID0gTk9NQVRDSDsgYnJlYWs7CQkgIC8qIFxAISAqLworCQkgICAgY2FzZSAnPic6IGxvcCA9IFNVQlBBVDsgYnJlYWs7CQkgIC8qIFxAPiAqLworCQkgICAgY2FzZSAnPCc6IHN3aXRjaCAobm9fTWFnaWMoZ2V0Y2hyKCkpKQorCQkJICAgICAgeworCQkJCSAgY2FzZSAnPSc6IGxvcCA9IEJFSElORDsgYnJlYWs7ICAgLyogXEA8PSAqLworCQkJCSAgY2FzZSAnISc6IGxvcCA9IE5PQkVISU5EOyBicmVhazsgLyogXEA8ISAqLworCQkJICAgICAgfQorCQl9CisJCWlmIChsb3AgPT0gRU5EKQorCQkgICAgRU1TR19NX1JFVF9OVUxMKF8oIkU1OTogaW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXNAIiksCisJCQkJCQkgICAgICByZWdfbWFnaWMgPT0gTUFHSUNfQUxMKTsKKwkJLyogTG9vayBiZWhpbmQgbXVzdCBtYXRjaCB3aXRoIGJlaGluZF9wb3MuICovCisJCWlmIChsb3AgPT0gQkVISU5EIHx8IGxvcCA9PSBOT0JFSElORCkKKwkJeworCQkgICAgcmVndGFpbChyZXQsIHJlZ25vZGUoQkhQT1MpKTsKKwkJICAgICpmbGFncCB8PSBIQVNMT09LQkg7CisJCX0KKwkJcmVndGFpbChyZXQsIHJlZ25vZGUoRU5EKSk7IC8qIG9wZXJhbmQgZW5kcyAqLworCQlyZWdpbnNlcnQobG9wLCByZXQpOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBNYWdpYygnPycpOgorCWNhc2UgTWFnaWMoJz0nKToKKwkgICAgLyogRW1pdCB4PSBhcyAoeHwpICovCisJICAgIHJlZ2luc2VydChCUkFOQ0gsIHJldCk7CQkvKiBFaXRoZXIgeCAqLworCSAgICByZWd0YWlsKHJldCwgcmVnbm9kZShCUkFOQ0gpKTsJLyogb3IgKi8KKwkgICAgbmV4dCA9IHJlZ25vZGUoTk9USElORyk7CQkvKiBudWxsLiAqLworCSAgICByZWd0YWlsKHJldCwgbmV4dCk7CisJICAgIHJlZ29wdGFpbChyZXQsIG5leHQpOworCSAgICBicmVhazsKKworCWNhc2UgTWFnaWMoJ3snKToKKwkgICAgaWYgKCFyZWFkX2xpbWl0cygmbWludmFsLCAmbWF4dmFsKSkKKwkJcmV0dXJuIE5VTEw7CisJICAgIGlmICghKGZsYWdzICYgSEFTV0lEVEgpICYmIChtYXh2YWwgPiBtaW52YWwKKwkJCQkgPyBtYXh2YWwgPj0gTUFYX0xJTUlUIDogbWludmFsID49IE1BWF9MSU1JVCkpCisJCUVNU0dfTV9SRVRfTlVMTChfKCJFNTg6ICVzeyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IiksCisJCQkJCQkgICAgICByZWdfbWFnaWMgPT0gTUFHSUNfQUxMKTsKKwkgICAgaWYgKGZsYWdzICYgU0lNUExFKQorCSAgICB7CisJCXJlZ2luc2VydChCUkFDRV9TSU1QTEUsIHJldCk7CisJCXJlZ2luc2VydF9saW1pdHMoQlJBQ0VfTElNSVRTLCBtaW52YWwsIG1heHZhbCwgcmV0KTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKG51bV9jb21wbGV4X2JyYWNlcyA+PSAxMCkKKwkJICAgIEVNU0dfTV9SRVRfTlVMTChfKCJFNjA6IFRvbyBtYW55IGNvbXBsZXggJXN7Li4ufXMiKSwKKwkJCQkJCSAgICAgIHJlZ19tYWdpYyA9PSBNQUdJQ19BTEwpOworCQlyZWdpbnNlcnQoQlJBQ0VfQ09NUExFWCArIG51bV9jb21wbGV4X2JyYWNlcywgcmV0KTsKKwkJcmVnb3B0YWlsKHJldCwgcmVnbm9kZShCQUNLKSk7CisJCXJlZ29wdGFpbChyZXQsIHJldCk7CisJCXJlZ2luc2VydF9saW1pdHMoQlJBQ0VfTElNSVRTLCBtaW52YWwsIG1heHZhbCwgcmV0KTsKKwkJKytudW1fY29tcGxleF9icmFjZXM7CisJICAgIH0KKwkgICAgaWYgKG1pbnZhbCA+IDAgJiYgbWF4dmFsID4gMCkKKwkJKmZsYWdwID0gKEhBU1dJRFRIIHwgKGZsYWdzICYgKEhBU05MIHwgSEFTTE9PS0JIKSkpOworCSAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHJlX211bHRpX3R5cGUocGVla2NocigpKSAhPSBOT1RfTVVMVEkpCisgICAgeworCS8qIENhbid0IGhhdmUgYSBtdWx0aSBmb2xsb3cgYSBtdWx0aS4gKi8KKwlpZiAocGVla2NocigpID09IE1hZ2ljKCcqJykpCisJICAgIHNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIkU2MTogTmVzdGVkICVzKiIpLAorCQkJCQkgICAgcmVnX21hZ2ljID49IE1BR0lDX09OID8gIiIgOiAiXFwiKTsKKwllbHNlCisJICAgIHNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIkU2MjogTmVzdGVkICVzJWMiKSwKKwkJcmVnX21hZ2ljID09IE1BR0lDX0FMTCA/ICIiIDogIlxcIiwgbm9fTWFnaWMocGVla2NocigpKSk7CisJRU1TR19SRVRfTlVMTChJT2J1ZmYpOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qCisgKiByZWdhdG9tIC0gdGhlIGxvd2VzdCBsZXZlbAorICoKKyAqIE9wdGltaXphdGlvbjogIGdvYmJsZXMgYW4gZW50aXJlIHNlcXVlbmNlIG9mIG9yZGluYXJ5IGNoYXJhY3RlcnMgc28gdGhhdAorICogaXQgY2FuIHR1cm4gdGhlbSBpbnRvIGEgc2luZ2xlIG5vZGUsIHdoaWNoIGlzIHNtYWxsZXIgdG8gc3RvcmUgYW5kCisgKiBmYXN0ZXIgdG8gcnVuLiAgRG9uJ3QgZG8gdGhpcyB3aGVuIG9uZV9leGFjdGx5IGlzIHNldC4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorcmVnYXRvbShmbGFncCkKKyAgICBpbnQJCSAgICpmbGFncDsKK3sKKyAgICBjaGFyX3UJICAgICpyZXQ7CisgICAgaW50CQkgICAgZmxhZ3M7CisgICAgaW50CQkgICAgY3BvX2xpdDsJICAgIC8qICdjcG9wdGlvbnMnIGNvbnRhaW5zICdsJyBmbGFnICovCisgICAgaW50CQkgICAgYzsKKyAgICBzdGF0aWMgY2hhcl91ICAgKmNsYXNzY2hhcnMgPSAoY2hhcl91ICopIi5pSWtLZkZwUHNTZER4WG9Pd1doSGFBbEx1VSI7CisgICAgc3RhdGljIGludAkgICAgY2xhc3Njb2Rlc1tdID0ge0FOWSwgSURFTlQsIFNJREVOVCwgS1dPUkQsIFNLV09SRCwKKwkJCQkgICAgRk5BTUUsIFNGTkFNRSwgUFJJTlQsIFNQUklOVCwKKwkJCQkgICAgV0hJVEUsIE5XSElURSwgRElHSVQsIE5ESUdJVCwKKwkJCQkgICAgSEVYLCBOSEVYLCBPQ1RBTCwgTk9DVEFMLAorCQkJCSAgICBXT1JELCBOV09SRCwgSEVBRCwgTkhFQUQsCisJCQkJICAgIEFMUEhBLCBOQUxQSEEsIExPV0VSLCBOTE9XRVIsCisJCQkJICAgIFVQUEVSLCBOVVBQRVIKKwkJCQkgICAgfTsKKyAgICBjaGFyX3UJICAgICpwOworICAgIGludAkJICAgIGV4dHJhID0gMDsKKworICAgICpmbGFncCA9IFdPUlNUOwkJLyogVGVudGF0aXZlbHkuICovCisgICAgY3BvX2xpdCA9ICghcmVnX3N5biAmJiB2aW1fc3RyY2hyKHBfY3BvLCBDUE9fTElURVJBTCkgIT0gTlVMTCk7CisKKyAgICBjID0gZ2V0Y2hyKCk7CisgICAgc3dpdGNoIChjKQorICAgIHsKKyAgICAgIGNhc2UgTWFnaWMoJ14nKToKKwlyZXQgPSByZWdub2RlKEJPTCk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgTWFnaWMoJyQnKToKKwlyZXQgPSByZWdub2RlKEVPTCk7CisjaWYgZGVmaW5lZChGRUFUX1NZTl9ITCkgfHwgZGVmaW5lZChQUk9UTykKKwloYWRfZW9sID0gVFJVRTsKKyNlbmRpZgorCWJyZWFrOworCisgICAgICBjYXNlIE1hZ2ljKCc8Jyk6CisJcmV0ID0gcmVnbm9kZShCT1cpOworCWJyZWFrOworCisgICAgICBjYXNlIE1hZ2ljKCc+Jyk6CisJcmV0ID0gcmVnbm9kZShFT1cpOworCWJyZWFrOworCisgICAgICBjYXNlIE1hZ2ljKCdfJyk6CisJYyA9IG5vX01hZ2ljKGdldGNocigpKTsKKwlpZiAoYyA9PSAnXicpCQkvKiAiXF9eIiBpcyBzdGFydC1vZi1saW5lICovCisJeworCSAgICByZXQgPSByZWdub2RlKEJPTCk7CisJICAgIGJyZWFrOworCX0KKwlpZiAoYyA9PSAnJCcpCQkvKiAiXF8kIiBpcyBlbmQtb2YtbGluZSAqLworCXsKKwkgICAgcmV0ID0gcmVnbm9kZShFT0wpOworI2lmIGRlZmluZWQoRkVBVF9TWU5fSEwpIHx8IGRlZmluZWQoUFJPVE8pCisJICAgIGhhZF9lb2wgPSBUUlVFOworI2VuZGlmCisJICAgIGJyZWFrOworCX0KKworCWV4dHJhID0gQUREX05MOworCSpmbGFncCB8PSBIQVNOTDsKKworCS8qICJcX1siIGlzIGNoYXJhY3RlciByYW5nZSBwbHVzIG5ld2xpbmUgKi8KKwlpZiAoYyA9PSAnWycpCisJICAgIGdvdG8gY29sbGVjdGlvbjsKKworCS8qICJcX3giIGlzIGNoYXJhY3RlciBjbGFzcyBwbHVzIG5ld2xpbmUgKi8KKwkvKkZBTExUSFJPVUdIKi8KKworCS8qCisJICogQ2hhcmFjdGVyIGNsYXNzZXMuCisJICovCisgICAgICBjYXNlIE1hZ2ljKCcuJyk6CisgICAgICBjYXNlIE1hZ2ljKCdpJyk6CisgICAgICBjYXNlIE1hZ2ljKCdJJyk6CisgICAgICBjYXNlIE1hZ2ljKCdrJyk6CisgICAgICBjYXNlIE1hZ2ljKCdLJyk6CisgICAgICBjYXNlIE1hZ2ljKCdmJyk6CisgICAgICBjYXNlIE1hZ2ljKCdGJyk6CisgICAgICBjYXNlIE1hZ2ljKCdwJyk6CisgICAgICBjYXNlIE1hZ2ljKCdQJyk6CisgICAgICBjYXNlIE1hZ2ljKCdzJyk6CisgICAgICBjYXNlIE1hZ2ljKCdTJyk6CisgICAgICBjYXNlIE1hZ2ljKCdkJyk6CisgICAgICBjYXNlIE1hZ2ljKCdEJyk6CisgICAgICBjYXNlIE1hZ2ljKCd4Jyk6CisgICAgICBjYXNlIE1hZ2ljKCdYJyk6CisgICAgICBjYXNlIE1hZ2ljKCdvJyk6CisgICAgICBjYXNlIE1hZ2ljKCdPJyk6CisgICAgICBjYXNlIE1hZ2ljKCd3Jyk6CisgICAgICBjYXNlIE1hZ2ljKCdXJyk6CisgICAgICBjYXNlIE1hZ2ljKCdoJyk6CisgICAgICBjYXNlIE1hZ2ljKCdIJyk6CisgICAgICBjYXNlIE1hZ2ljKCdhJyk6CisgICAgICBjYXNlIE1hZ2ljKCdBJyk6CisgICAgICBjYXNlIE1hZ2ljKCdsJyk6CisgICAgICBjYXNlIE1hZ2ljKCdMJyk6CisgICAgICBjYXNlIE1hZ2ljKCd1Jyk6CisgICAgICBjYXNlIE1hZ2ljKCdVJyk6CisJcCA9IHZpbV9zdHJjaHIoY2xhc3NjaGFycywgbm9fTWFnaWMoYykpOworCWlmIChwID09IE5VTEwpCisJICAgIEVNU0dfUkVUX05VTEwoXygiRTYzOiBpbnZhbGlkIHVzZSBvZiBcXF8iKSk7CisJcmV0ID0gcmVnbm9kZShjbGFzc2NvZGVzW3AgLSBjbGFzc2NoYXJzXSArIGV4dHJhKTsKKwkqZmxhZ3AgfD0gSEFTV0lEVEggfCBTSU1QTEU7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgTWFnaWMoJ24nKToKKwlpZiAocmVnX3N0cmluZykKKwl7CisJICAgIC8qIEluIGEgc3RyaW5nICJcbiIgbWF0Y2hlcyBhIG5ld2xpbmUgY2hhcmFjdGVyLiAqLworCSAgICByZXQgPSByZWdub2RlKEVYQUNUTFkpOworCSAgICByZWdjKE5MKTsKKwkgICAgcmVnYyhOVUwpOworCSAgICAqZmxhZ3AgfD0gSEFTV0lEVEggfCBTSU1QTEU7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIEluIGJ1ZmZlciB0ZXh0ICJcbiIgbWF0Y2hlcyB0aGUgZW5kIG9mIGEgbGluZS4gKi8KKwkgICAgcmV0ID0gcmVnbm9kZShORVdMKTsKKwkgICAgKmZsYWdwIHw9IEhBU1dJRFRIIHwgSEFTTkw7CisJfQorCWJyZWFrOworCisgICAgICBjYXNlIE1hZ2ljKCcoJyk6CisJaWYgKG9uZV9leGFjdGx5KQorCSAgICBFTVNHX09ORV9SRVRfTlVMTDsKKwlyZXQgPSByZWcoUkVHX1BBUkVOLCAmZmxhZ3MpOworCWlmIChyZXQgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisJKmZsYWdwIHw9IGZsYWdzICYgKEhBU1dJRFRIIHwgU1BTVEFSVCB8IEhBU05MIHwgSEFTTE9PS0JIKTsKKwlicmVhazsKKworICAgICAgY2FzZSBOVUw6CisgICAgICBjYXNlIE1hZ2ljKCd8Jyk6CisgICAgICBjYXNlIE1hZ2ljKCcmJyk6CisgICAgICBjYXNlIE1hZ2ljKCcpJyk6CisJRU1TR19SRVRfTlVMTChfKGVfaW50ZXJuYWwpKTsJLyogU3VwcG9zZWQgdG8gYmUgY2F1Z2h0IGVhcmxpZXIuICovCisJLyogTk9UUkVBQ0hFRCAqLworCisgICAgICBjYXNlIE1hZ2ljKCc9Jyk6CisgICAgICBjYXNlIE1hZ2ljKCc/Jyk6CisgICAgICBjYXNlIE1hZ2ljKCcrJyk6CisgICAgICBjYXNlIE1hZ2ljKCdAJyk6CisgICAgICBjYXNlIE1hZ2ljKCd7Jyk6CisgICAgICBjYXNlIE1hZ2ljKCcqJyk6CisJYyA9IG5vX01hZ2ljKGMpOworCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIkU2NDogJXMlYyBmb2xsb3dzIG5vdGhpbmciKSwKKwkJKGMgPT0gJyonID8gcmVnX21hZ2ljID49IE1BR0lDX09OIDogcmVnX21hZ2ljID09IE1BR0lDX0FMTCkKKwkJPyAiIiA6ICJcXCIsIGMpOworCUVNU0dfUkVUX05VTEwoSU9idWZmKTsKKwkvKiBOT1RSRUFDSEVEICovCisKKyAgICAgIGNhc2UgTWFnaWMoJ34nKToJCS8qIHByZXZpb3VzIHN1YnN0aXR1dGUgcGF0dGVybiAqLworCSAgICBpZiAocmVnX3ByZXZfc3ViKQorCSAgICB7CisJCWNoYXJfdQkgICAgKmxwOworCisJCXJldCA9IHJlZ25vZGUoRVhBQ1RMWSk7CisJCWxwID0gcmVnX3ByZXZfc3ViOworCQl3aGlsZSAoKmxwICE9IE5VTCkKKwkJICAgIHJlZ2MoKmxwKyspOworCQlyZWdjKE5VTCk7CisJCWlmICgqcmVnX3ByZXZfc3ViICE9IE5VTCkKKwkJeworCQkgICAgKmZsYWdwIHw9IEhBU1dJRFRIOworCQkgICAgaWYgKChscCAtIHJlZ19wcmV2X3N1YikgPT0gMSkKKwkJCSpmbGFncCB8PSBTSU1QTEU7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJCUVNU0dfUkVUX05VTEwoXyhlX25vcHJlc3ViKSk7CisJICAgIGJyZWFrOworCisgICAgICBjYXNlIE1hZ2ljKCcxJyk6CisgICAgICBjYXNlIE1hZ2ljKCcyJyk6CisgICAgICBjYXNlIE1hZ2ljKCczJyk6CisgICAgICBjYXNlIE1hZ2ljKCc0Jyk6CisgICAgICBjYXNlIE1hZ2ljKCc1Jyk6CisgICAgICBjYXNlIE1hZ2ljKCc2Jyk6CisgICAgICBjYXNlIE1hZ2ljKCc3Jyk6CisgICAgICBjYXNlIE1hZ2ljKCc4Jyk6CisgICAgICBjYXNlIE1hZ2ljKCc5Jyk6CisJICAgIHsKKwkJaW50CQkgICAgcmVmbnVtOworCisJCXJlZm51bSA9IGMgLSBNYWdpYygnMCcpOworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgYmFjayByZWZlcmVuY2UgaXMgbGVnYWwuIFdlIG11c3QgaGF2ZSBzZWVuIHRoZQorCQkgKiBjbG9zZSBicmFjZS4KKwkJICogVE9ETzogU2hvdWxkIGFsc28gY2hlY2sgdGhhdCB3ZSBkb24ndCByZWZlciB0byBzb21ldGhpbmcKKwkJICogdGhhdCBpcyByZXBlYXRlZCAoKyo9KTogd2hhdCBpbnN0YW5jZSBvZiB0aGUgcmVwZXRpdGlvbgorCQkgKiBzaG91bGQgd2UgbWF0Y2g/CisJCSAqLworCQlpZiAoIWhhZF9lbmRicmFjZVtyZWZudW1dKQorCQl7CisJCSAgICAvKiBUcmljazogY2hlY2sgaWYgIkA8PSIgb3IgIkA8ISIgZm9sbG93cywgaW4gd2hpY2ggY2FzZQorCQkgICAgICogdGhlIFwxIGNhbiBhcHBlYXIgYmVmb3JlIHRoZSByZWZlcmVuY2VkIG1hdGNoLiAqLworCQkgICAgZm9yIChwID0gcmVncGFyc2U7ICpwICE9IE5VTDsgKytwKQorCQkJaWYgKHBbMF0gPT0gJ0AnICYmIHBbMV0gPT0gJzwnCisJCQkJCSAgICAgICYmIChwWzJdID09ICchJyB8fCBwWzJdID09ICc9JykpCisJCQkgICAgYnJlYWs7CisJCSAgICBpZiAoKnAgPT0gTlVMKQorCQkJRU1TR19SRVRfTlVMTChfKCJFNjU6IElsbGVnYWwgYmFjayByZWZlcmVuY2UiKSk7CisJCX0KKwkJcmV0ID0gcmVnbm9kZShCQUNLUkVGICsgcmVmbnVtKTsKKwkgICAgfQorCSAgICBicmVhazsKKworI2lmZGVmIEZFQVRfU1lOX0hMCisgICAgICBjYXNlIE1hZ2ljKCd6Jyk6CisJeworCSAgICBjID0gbm9fTWFnaWMoZ2V0Y2hyKCkpOworCSAgICBzd2l0Y2ggKGMpCisJICAgIHsKKwkJY2FzZSAnKCc6IGlmIChyZWdfZG9fZXh0bWF0Y2ggIT0gUkVYX1NFVCkKKwkJCSAgICAgIEVNU0dfUkVUX05VTEwoXygiRTY2OiBcXHooIG5vdCBhbGxvd2VkIGhlcmUiKSk7CisJCQkgIGlmIChvbmVfZXhhY3RseSkKKwkJCSAgICAgIEVNU0dfT05FX1JFVF9OVUxMOworCQkJICByZXQgPSByZWcoUkVHX1pQQVJFTiwgJmZsYWdzKTsKKwkJCSAgaWYgKHJldCA9PSBOVUxMKQorCQkJICAgICAgcmV0dXJuIE5VTEw7CisJCQkgICpmbGFncCB8PSBmbGFncyAmIChIQVNXSURUSHxTUFNUQVJUfEhBU05MfEhBU0xPT0tCSCk7CisJCQkgIHJlX2hhc196ID0gUkVYX1NFVDsKKwkJCSAgYnJlYWs7CisKKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICczJzoKKwkJY2FzZSAnNCc6CisJCWNhc2UgJzUnOgorCQljYXNlICc2JzoKKwkJY2FzZSAnNyc6CisJCWNhc2UgJzgnOgorCQljYXNlICc5JzogaWYgKHJlZ19kb19leHRtYXRjaCAhPSBSRVhfVVNFKQorCQkJICAgICAgRU1TR19SRVRfTlVMTChfKCJFNjc6IFxcejEgZXQgYWwuIG5vdCBhbGxvd2VkIGhlcmUiKSk7CisJCQkgIHJldCA9IHJlZ25vZGUoWlJFRiArIGMgLSAnMCcpOworCQkJICByZV9oYXNfeiA9IFJFWF9VU0U7CisJCQkgIGJyZWFrOworCisJCWNhc2UgJ3MnOiByZXQgPSByZWdub2RlKE1PUEVOICsgMCk7CisJCQkgIGJyZWFrOworCisJCWNhc2UgJ2UnOiByZXQgPSByZWdub2RlKE1DTE9TRSArIDApOworCQkJICBicmVhazsKKworCQlkZWZhdWx0OiAgRU1TR19SRVRfTlVMTChfKCJFNjg6IEludmFsaWQgY2hhcmFjdGVyIGFmdGVyIFxceiIpKTsKKwkgICAgfQorCX0KKwlicmVhazsKKyNlbmRpZgorCisgICAgICBjYXNlIE1hZ2ljKCclJyk6CisJeworCSAgICBjID0gbm9fTWFnaWMoZ2V0Y2hyKCkpOworCSAgICBzd2l0Y2ggKGMpCisJICAgIHsKKwkJLyogKCkgd2l0aG91dCBhIGJhY2sgcmVmZXJlbmNlICovCisJCWNhc2UgJygnOgorCQkgICAgaWYgKG9uZV9leGFjdGx5KQorCQkJRU1TR19PTkVfUkVUX05VTEw7CisJCSAgICByZXQgPSByZWcoUkVHX05QQVJFTiwgJmZsYWdzKTsKKwkJICAgIGlmIChyZXQgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCQkgICAgKmZsYWdwIHw9IGZsYWdzICYgKEhBU1dJRFRIIHwgU1BTVEFSVCB8IEhBU05MIHwgSEFTTE9PS0JIKTsKKwkJICAgIGJyZWFrOworCisJCS8qIENhdGNoIFwlXiBhbmQgXCUkIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSBhcHBlYXIgaW4gdGhlCisJCSAqIHBhdHRlcm4gLS0gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBpdCBtYWtlcyBzZW5zZS4gKi8KKwkJY2FzZSAnXic6CisJCSAgICByZXQgPSByZWdub2RlKFJFX0JPRik7CisJCSAgICBicmVhazsKKworCQljYXNlICckJzoKKwkJICAgIHJldCA9IHJlZ25vZGUoUkVfRU9GKTsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgJyMnOgorCQkgICAgcmV0ID0gcmVnbm9kZShDVVJTT1IpOworCQkgICAgYnJlYWs7CisKKwkJLyogXCVbYWJjXTogRW1pdCBhcyBhIGxpc3Qgb2YgYnJhbmNoZXMsIGFsbCBlbmRpbmcgYXQgdGhlIGxhc3QKKwkJICogYnJhbmNoIHdoaWNoIG1hdGNoZXMgbm90aGluZy4gKi8KKwkJY2FzZSAnWyc6CisJCQkgIGlmIChvbmVfZXhhY3RseSkJLyogZG9lc24ndCBuZXN0ICovCisJCQkgICAgICBFTVNHX09ORV9SRVRfTlVMTDsKKwkJCSAgeworCQkJICAgICAgY2hhcl91CSpsYXN0YnJhbmNoOworCQkJICAgICAgY2hhcl91CSpsYXN0bm9kZSA9IE5VTEw7CisJCQkgICAgICBjaGFyX3UJKmJyOworCisJCQkgICAgICByZXQgPSBOVUxMOworCQkJICAgICAgd2hpbGUgKChjID0gZ2V0Y2hyKCkpICE9ICddJykKKwkJCSAgICAgIHsKKwkJCQkgIGlmIChjID09IE5VTCkKKwkJCQkgICAgICBFTVNHX01fUkVUX05VTEwoXygiRTY5OiBNaXNzaW5nIF0gYWZ0ZXIgJXMlJVsiKSwKKwkJCQkJCSAgICAgIHJlZ19tYWdpYyA9PSBNQUdJQ19BTEwpOworCQkJCSAgYnIgPSByZWdub2RlKEJSQU5DSCk7CisJCQkJICBpZiAocmV0ID09IE5VTEwpCisJCQkJICAgICAgcmV0ID0gYnI7CisJCQkJICBlbHNlCisJCQkJICAgICAgcmVndGFpbChsYXN0bm9kZSwgYnIpOworCisJCQkJICB1bmdldGNocigpOworCQkJCSAgb25lX2V4YWN0bHkgPSBUUlVFOworCQkJCSAgbGFzdG5vZGUgPSByZWdhdG9tKGZsYWdwKTsKKwkJCQkgIG9uZV9leGFjdGx5ID0gRkFMU0U7CisJCQkJICBpZiAobGFzdG5vZGUgPT0gTlVMTCkKKwkJCQkgICAgICByZXR1cm4gTlVMTDsKKwkJCSAgICAgIH0KKwkJCSAgICAgIGlmIChyZXQgPT0gTlVMTCkKKwkJCQkgIEVNU0dfTV9SRVRfTlVMTChfKCJFNzA6IEVtcHR5ICVzJSVbXSIpLAorCQkJCQkJICAgICAgcmVnX21hZ2ljID09IE1BR0lDX0FMTCk7CisJCQkgICAgICBsYXN0YnJhbmNoID0gcmVnbm9kZShCUkFOQ0gpOworCQkJICAgICAgYnIgPSByZWdub2RlKE5PVEhJTkcpOworCQkJICAgICAgaWYgKHJldCAhPSBKVVNUX0NBTENfU0laRSkKKwkJCSAgICAgIHsKKwkJCQkgIHJlZ3RhaWwobGFzdG5vZGUsIGJyKTsKKwkJCQkgIHJlZ3RhaWwobGFzdGJyYW5jaCwgYnIpOworCQkJCSAgLyogY29ubmVjdCBhbGwgYnJhbmNoZXMgdG8gdGhlIE5PVEhJTkcKKwkJCQkgICAqIGJyYW5jaCBhdCB0aGUgZW5kICovCisJCQkJICBmb3IgKGJyID0gcmV0OyBiciAhPSBsYXN0bm9kZTsgKQorCQkJCSAgeworCQkJCSAgICAgIGlmIChPUChicikgPT0gQlJBTkNIKQorCQkJCSAgICAgIHsKKwkJCQkJICByZWd0YWlsKGJyLCBsYXN0YnJhbmNoKTsKKwkJCQkJICBiciA9IE9QRVJBTkQoYnIpOworCQkJCSAgICAgIH0KKwkJCQkgICAgICBlbHNlCisJCQkJCSAgYnIgPSByZWduZXh0KGJyKTsKKwkJCQkgIH0KKwkJCSAgICAgIH0KKwkJCSAgICAgICpmbGFncCAmPSB+SEFTV0lEVEg7CisJCQkgICAgICBicmVhazsKKwkJCSAgfQorCisJCWRlZmF1bHQ6CisJCQkgIGlmIChWSU1fSVNESUdJVChjKSB8fCBjID09ICc8JyB8fCBjID09ICc+JykKKwkJCSAgeworCQkJICAgICAgbG9uZ191CW4gPSAwOworCQkJICAgICAgaW50CWNtcDsKKworCQkJICAgICAgY21wID0gYzsKKwkJCSAgICAgIGlmIChjbXAgPT0gJzwnIHx8IGNtcCA9PSAnPicpCisJCQkJICBjID0gZ2V0Y2hyKCk7CisJCQkgICAgICB3aGlsZSAoVklNX0lTRElHSVQoYykpCisJCQkgICAgICB7CisJCQkJICBuID0gbiAqIDEwICsgKGMgLSAnMCcpOworCQkJCSAgYyA9IGdldGNocigpOworCQkJICAgICAgfQorCQkJICAgICAgaWYgKGMgPT0gJ2wnIHx8IGMgPT0gJ2MnIHx8IGMgPT0gJ3YnKQorCQkJICAgICAgeworCQkJCSAgaWYgKGMgPT0gJ2wnKQorCQkJCSAgICAgIHJldCA9IHJlZ25vZGUoUkVfTE5VTSk7CisJCQkJICBlbHNlIGlmIChjID09ICdjJykKKwkJCQkgICAgICByZXQgPSByZWdub2RlKFJFX0NPTCk7CisJCQkJICBlbHNlCisJCQkJICAgICAgcmV0ID0gcmVnbm9kZShSRV9WQ09MKTsKKwkJCQkgIGlmIChyZXQgPT0gSlVTVF9DQUxDX1NJWkUpCisJCQkJICAgICAgcmVnc2l6ZSArPSA1OworCQkJCSAgZWxzZQorCQkJCSAgeworCQkJCSAgICAgIC8qIHB1dCB0aGUgbnVtYmVyIGFuZCB0aGUgb3B0aW9uYWwKKwkJCQkgICAgICAgKiBjb21wYXJhdG9yIGFmdGVyIHRoZSBvcGNvZGUgKi8KKwkJCQkgICAgICByZWdjb2RlID0gcmVfcHV0X2xvbmcocmVnY29kZSwgbik7CisJCQkJICAgICAgKnJlZ2NvZGUrKyA9IGNtcDsKKwkJCQkgIH0KKwkJCQkgIGJyZWFrOworCQkJICAgICAgfQorCQkJICB9CisKKwkJCSAgRU1TR19NX1JFVF9OVUxMKF8oIkU3MTogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXMlJSIpLAorCQkJCQkJICAgICAgcmVnX21hZ2ljID09IE1BR0lDX0FMTCk7CisJICAgIH0KKwl9CisJYnJlYWs7CisKKyAgICAgIGNhc2UgTWFnaWMoJ1snKToKK2NvbGxlY3Rpb246CisJeworCSAgICBjaGFyX3UJKmxwOworCisJICAgIC8qCisJICAgICAqIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nICddJywgd2UgYXNzdW1lIHRoZSAnWycgaXMgYSBub3JtYWwKKwkgICAgICogY2hhcmFjdGVyLiAgVGhpcyBtYWtlcyAnaW5jc2VhcmNoJyBhbmQgIjpoZWxwIFsiIHdvcmsuCisJICAgICAqLworCSAgICBscCA9IHNraXBfYW55b2YocmVncGFyc2UpOworCSAgICBpZiAoKmxwID09ICddJykJLyogdGhlcmUgaXMgYSBtYXRjaGluZyAnXScgKi8KKwkgICAgeworCQlpbnQJc3RhcnRjID0gLTE7CS8qID4gMCB3aGVuIG5leHQgJy0nIGlzIGEgcmFuZ2UgKi8KKwkJaW50CWVuZGM7CisKKwkJLyoKKwkJICogSW4gYSBjaGFyYWN0ZXIgY2xhc3MsIGRpZmZlcmVudCBwYXJzaW5nIHJ1bGVzIGFwcGx5LgorCQkgKiBOb3QgZXZlbiBcIGlzIHNwZWNpYWwgYW55bW9yZSwgbm90aGluZyBpcy4KKwkJICovCisJCWlmICgqcmVncGFyc2UgPT0gJ14nKQkgICAgLyogQ29tcGxlbWVudCBvZiByYW5nZS4gKi8KKwkJeworCQkgICAgcmV0ID0gcmVnbm9kZShBTllCVVQgKyBleHRyYSk7CisJCSAgICByZWdwYXJzZSsrOworCQl9CisJCWVsc2UKKwkJICAgIHJldCA9IHJlZ25vZGUoQU5ZT0YgKyBleHRyYSk7CisKKwkJLyogQXQgdGhlIHN0YXJ0ICddJyBhbmQgJy0nIG1lYW4gdGhlIGxpdGVyYWwgY2hhcmFjdGVyLiAqLworCQlpZiAoKnJlZ3BhcnNlID09ICddJyB8fCAqcmVncGFyc2UgPT0gJy0nKQorCQkgICAgcmVnYygqcmVncGFyc2UrKyk7CisKKwkJd2hpbGUgKCpyZWdwYXJzZSAhPSBOVUwgJiYgKnJlZ3BhcnNlICE9ICddJykKKwkJeworCQkgICAgaWYgKCpyZWdwYXJzZSA9PSAnLScpCisJCSAgICB7CisJCQkrK3JlZ3BhcnNlOworCQkJLyogVGhlICctJyBpcyBub3QgdXNlZCBmb3IgYSByYW5nZSBhdCB0aGUgZW5kIGFuZAorCQkJICogYWZ0ZXIgb3IgYmVmb3JlIGEgJ1xuJy4gKi8KKwkJCWlmICgqcmVncGFyc2UgPT0gJ10nIHx8ICpyZWdwYXJzZSA9PSBOVUwKKwkJCQl8fCBzdGFydGMgPT0gLTEKKwkJCQl8fCAocmVncGFyc2VbMF0gPT0gJ1xcJyAmJiByZWdwYXJzZVsxXSA9PSAnbicpKQorCQkJeworCQkJICAgIHJlZ2MoJy0nKTsKKwkJCSAgICBzdGFydGMgPSAnLSc7CS8qIFstLXhdIGlzIGEgcmFuZ2UgKi8KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCQllbmRjID0gbWJfcHRyMmNoYXJfYWR2KCZyZWdwYXJzZSk7CisJCQkgICAgZWxzZQorI2VuZGlmCisJCQkJZW5kYyA9ICpyZWdwYXJzZSsrOworCQkJICAgIGlmIChzdGFydGMgPiBlbmRjKQorCQkJCUVNU0dfUkVUX05VTEwoXyhlX2ludnJhbmdlKSk7CisjaWZkZWYgRkVBVF9NQllURQorCQkJICAgIGlmIChoYXNfbWJ5dGUgJiYgKCgqbWJfY2hhcjJsZW4pKHN0YXJ0YykgPiAxCisJCQkJCQkgfHwgKCptYl9jaGFyMmxlbikoZW5kYykgPiAxKSkKKwkJCSAgICB7CisJCQkJLyogTGltaXQgdG8gYSByYW5nZSBvZiAyNTYgY2hhcnMgKi8KKwkJCQlpZiAoZW5kYyA+IHN0YXJ0YyArIDI1NikKKwkJCQkgICAgRU1TR19SRVRfTlVMTChfKGVfaW52cmFuZ2UpKTsKKwkJCQl3aGlsZSAoKytzdGFydGMgPD0gZW5kYykKKwkJCQkgICAgcmVnbWJjKHN0YXJ0Yyk7CisJCQkgICAgfQorCQkJICAgIGVsc2UKKyNlbmRpZgorCQkJICAgIHsKKyNpZmRlZiBFQkNESUMKKwkJCQlpbnQJYWxwaGFfb25seSA9IEZBTFNFOworCisJCQkJLyogZm9yIGFscGhhYmV0aWNhbCByYW5nZSBza2lwIHRoZSBnYXBzCisJCQkJICogJ2knLSdqJywgJ3InLSdzJywgJ0knLSdKJyBhbmQgJ1InLSdTJy4gICovCisJCQkJaWYgKGlzYWxwaGEoc3RhcnRjKSAmJiBpc2FscGhhKGVuZGMpKQorCQkJCSAgICBhbHBoYV9vbmx5ID0gVFJVRTsKKyNlbmRpZgorCQkJCXdoaWxlICgrK3N0YXJ0YyA8PSBlbmRjKQorI2lmZGVmIEVCQ0RJQworCQkJCSAgICBpZiAoIWFscGhhX29ubHkgfHwgaXNhbHBoYShzdGFydGMpKQorI2VuZGlmCisJCQkJCXJlZ2Moc3RhcnRjKTsKKwkJCSAgICB9CisJCQkgICAgc3RhcnRjID0gLTE7CisJCQl9CisJCSAgICB9CisJCSAgICAvKgorCQkgICAgICogT25seSAiXF0iLCAiXF4iLCAiXF0iIGFuZCAiXFwiIGFyZSBzcGVjaWFsIGluIFZpLiAgVmltCisJCSAgICAgKiBhY2NlcHRzICJcdCIsICJcZSIsIGV0Yy4sIGJ1dCBvbmx5IHdoZW4gdGhlICdsJyBmbGFnIGluCisJCSAgICAgKiAnY3BvcHRpb25zJyBpcyBub3QgaW5jbHVkZWQuCisJCSAgICAgKi8KKwkJICAgIGVsc2UgaWYgKCpyZWdwYXJzZSA9PSAnXFwnCisJCQkgICAgJiYgKHZpbV9zdHJjaHIoUkVHRVhQX0lOUkFOR0UsIHJlZ3BhcnNlWzFdKSAhPSBOVUxMCisJCQkJfHwgKCFjcG9fbGl0CisJCQkJICAgICYmIHZpbV9zdHJjaHIoUkVHRVhQX0FCQlIsCisJCQkJCQkgICAgICAgcmVncGFyc2VbMV0pICE9IE5VTEwpKSkKKwkJICAgIHsKKwkJCXJlZ3BhcnNlKys7CisJCQlpZiAoKnJlZ3BhcnNlID09ICduJykKKwkJCXsKKwkJCSAgICAvKiAnXG4nIGluIHJhbmdlOiBhbHNvIG1hdGNoIE5MICovCisJCQkgICAgaWYgKHJldCAhPSBKVVNUX0NBTENfU0laRSkKKwkJCSAgICB7CisJCQkJaWYgKCpyZXQgPT0gQU5ZQlVUKQorCQkJCSAgICAqcmV0ID0gQU5ZQlVUICsgQUREX05MOworCQkJCWVsc2UgaWYgKCpyZXQgPT0gQU5ZT0YpCisJCQkJICAgICpyZXQgPSBBTllPRiArIEFERF9OTDsKKwkJCQkvKiBlbHNlOiBtdXN0IGhhdmUgaGFkIGEgXG4gYWxyZWFkeSAqLworCQkJICAgIH0KKwkJCSAgICAqZmxhZ3AgfD0gSEFTTkw7CisJCQkgICAgcmVncGFyc2UrKzsKKwkJCSAgICBzdGFydGMgPSAtMTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCSAgICBzdGFydGMgPSBiYWNrc2xhc2hfdHJhbnMoKnJlZ3BhcnNlKyspOworCQkJICAgIHJlZ2Moc3RhcnRjKTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGVsc2UgaWYgKCpyZWdwYXJzZSA9PSAnWycpCisJCSAgICB7CisJCQlpbnQgY19jbGFzczsKKwkJCWludCBjdTsKKworCQkJY19jbGFzcyA9IHNraXBfY2xhc3NfbmFtZSgmcmVncGFyc2UpOworCQkJc3RhcnRjID0gLTE7CisJCQkvKiBDaGFyYWN0ZXJzIGFzc3VtZWQgdG8gYmUgOCBiaXRzISAqLworCQkJc3dpdGNoIChjX2NsYXNzKQorCQkJeworCQkJICAgIGNhc2UgQ0xBU1NfTk9ORToKKwkJCQkvKiBsaXRlcmFsICdbJywgYWxsb3cgW1steF0gYXMgYSByYW5nZSAqLworCQkJCXN0YXJ0YyA9ICpyZWdwYXJzZSsrOworCQkJCXJlZ2Moc3RhcnRjKTsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIENMQVNTX0FMTlVNOgorCQkJCWZvciAoY3UgPSAxOyBjdSA8PSAyNTU7IGN1KyspCisJCQkJICAgIGlmIChpc2FsbnVtKGN1KSkKKwkJCQkJcmVnYyhjdSk7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBDTEFTU19BTFBIQToKKwkJCQlmb3IgKGN1ID0gMTsgY3UgPD0gMjU1OyBjdSsrKQorCQkJCSAgICBpZiAoaXNhbHBoYShjdSkpCisJCQkJCXJlZ2MoY3UpOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgQ0xBU1NfQkxBTks6CisJCQkJcmVnYygnICcpOworCQkJCXJlZ2MoJ1x0Jyk7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBDTEFTU19DTlRSTDoKKwkJCQlmb3IgKGN1ID0gMTsgY3UgPD0gMjU1OyBjdSsrKQorCQkJCSAgICBpZiAoaXNjbnRybChjdSkpCisJCQkJCXJlZ2MoY3UpOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgQ0xBU1NfRElHSVQ6CisJCQkJZm9yIChjdSA9IDE7IGN1IDw9IDI1NTsgY3UrKykKKwkJCQkgICAgaWYgKFZJTV9JU0RJR0lUKGN1KSkKKwkJCQkJcmVnYyhjdSk7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBDTEFTU19HUkFQSDoKKwkJCQlmb3IgKGN1ID0gMTsgY3UgPD0gMjU1OyBjdSsrKQorCQkJCSAgICBpZiAoaXNncmFwaChjdSkpCisJCQkJCXJlZ2MoY3UpOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgQ0xBU1NfTE9XRVI6CisJCQkJZm9yIChjdSA9IDE7IGN1IDw9IDI1NTsgY3UrKykKKwkJCQkgICAgaWYgKGlzbG93ZXIoY3UpKQorCQkJCQlyZWdjKGN1KTsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIENMQVNTX1BSSU5UOgorCQkJCWZvciAoY3UgPSAxOyBjdSA8PSAyNTU7IGN1KyspCisJCQkJICAgIGlmICh2aW1faXNwcmludGMoY3UpKQorCQkJCQlyZWdjKGN1KTsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIENMQVNTX1BVTkNUOgorCQkJCWZvciAoY3UgPSAxOyBjdSA8PSAyNTU7IGN1KyspCisJCQkJICAgIGlmIChpc3B1bmN0KGN1KSkKKwkJCQkJcmVnYyhjdSk7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBDTEFTU19TUEFDRToKKwkJCQlmb3IgKGN1ID0gOTsgY3UgPD0gMTM7IGN1KyspCisJCQkJICAgIHJlZ2MoY3UpOworCQkJCXJlZ2MoJyAnKTsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIENMQVNTX1VQUEVSOgorCQkJCWZvciAoY3UgPSAxOyBjdSA8PSAyNTU7IGN1KyspCisJCQkJICAgIGlmIChpc3VwcGVyKGN1KSkKKwkJCQkJcmVnYyhjdSk7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBDTEFTU19YRElHSVQ6CisJCQkJZm9yIChjdSA9IDE7IGN1IDw9IDI1NTsgY3UrKykKKwkJCQkgICAgaWYgKHZpbV9pc3hkaWdpdChjdSkpCisJCQkJCXJlZ2MoY3UpOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgQ0xBU1NfVEFCOgorCQkJCXJlZ2MoJ1x0Jyk7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBDTEFTU19SRVRVUk46CisJCQkJcmVnYygnXHInKTsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIENMQVNTX0JBQ0tTUEFDRToKKwkJCQlyZWdjKCdcYicpOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgQ0xBU1NfRVNDQVBFOgorCQkJCXJlZ2MoJ1wwMzMnKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQlpZiAoaGFzX21ieXRlKQorCQkJeworCQkJICAgIGludAlsZW47CisKKwkJCSAgICAvKiBwcm9kdWNlIGEgbXVsdGlieXRlIGNoYXJhY3RlciwgaW5jbHVkaW5nIGFueQorCQkJICAgICAqIGZvbGxvd2luZyBjb21wb3NpbmcgY2hhcmFjdGVycyAqLworCQkJICAgIHN0YXJ0YyA9IG1iX3B0cjJjaGFyKHJlZ3BhcnNlKTsKKwkJCSAgICBsZW4gPSAoKm1iX3B0cjJsZW5fY2hlY2spKHJlZ3BhcnNlKTsKKwkJCSAgICBpZiAoZW5jX3V0ZjggJiYgdXRmX2NoYXIybGVuKHN0YXJ0YykgIT0gbGVuKQorCQkJCXN0YXJ0YyA9IC0xOwkvKiBjb21wb3NpbmcgY2hhcnMgKi8KKwkJCSAgICB3aGlsZSAoLS1sZW4gPj0gMCkKKwkJCQlyZWdjKCpyZWdwYXJzZSsrKTsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZgorCQkJeworCQkJICAgIHN0YXJ0YyA9ICpyZWdwYXJzZSsrOworCQkJICAgIHJlZ2Moc3RhcnRjKTsKKwkJCX0KKwkJICAgIH0KKwkJfQorCQlyZWdjKE5VTCk7CisJCXByZXZjaHJfbGVuID0gMTsJLyogbGFzdCBjaGFyIHdhcyB0aGUgJ10nICovCisJCWlmICgqcmVncGFyc2UgIT0gJ10nKQorCQkgICAgRU1TR19SRVRfTlVMTChfKGVfdG9vbXNicmEpKTsJLyogQ2Fubm90IGhhcHBlbj8gKi8KKwkJc2tpcGNocigpOwkgICAgLyogbGV0J3MgYmUgZnJpZW5kcyB3aXRoIHRoZSBsZXhlciBhZ2FpbiAqLworCQkqZmxhZ3AgfD0gSEFTV0lEVEggfCBTSU1QTEU7CisJCWJyZWFrOworCSAgICB9CisJfQorCS8qIEZBTExUSFJPVUdIICovCisKKyAgICAgIGRlZmF1bHQ6CisJeworCSAgICBpbnQJCWxlbjsKKworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgLyogQSBtdWx0aS1ieXRlIGNoYXJhY3RlciBpcyBoYW5kbGVkIGFzIGEgc2VwYXJhdGUgYXRvbSBpZiBpdCdzCisJICAgICAqIGJlZm9yZSBhIG11bHRpLiAqLworCSAgICBpZiAoaGFzX21ieXRlICYmICgqbWJfY2hhcjJsZW4pKGMpID4gMQorCQkJCSAgICAgJiYgcmVfbXVsdGlfdHlwZShwZWVrY2hyKCkpICE9IE5PVF9NVUxUSSkKKwkgICAgeworCQlyZXQgPSByZWdub2RlKE1VTFRJQllURUNPREUpOworCQlyZWdtYmMoYyk7CisJCSpmbGFncCB8PSBIQVNXSURUSCB8IFNJTVBMRTsKKwkJYnJlYWs7CisJICAgIH0KKyNlbmRpZgorCisJICAgIHJldCA9IHJlZ25vZGUoRVhBQ1RMWSk7CisKKwkgICAgLyoKKwkgICAgICogQXBwZW5kIGNoYXJhY3RlcnMgYXMgbG9uZyBhczoKKwkgICAgICogLSB0aGVyZSBpcyBubyBmb2xsb3dpbmcgbXVsdGksIHdlIHRoZW4gbmVlZCB0aGUgY2hhcmFjdGVyIGluCisJICAgICAqICAgZnJvbnQgb2YgaXQgYXMgYSBzaW5nbGUgY2hhcmFjdGVyIG9wZXJhbmQKKwkgICAgICogLSBub3QgcnVubmluZyBpbnRvIGEgTWFnaWMgY2hhcmFjdGVyCisJICAgICAqIC0gIm9uZV9leGFjdGx5IiBpcyBub3Qgc2V0CisJICAgICAqIEJ1dCBhbHdheXMgZW1pdCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLiAgTWlnaHQgYmUgYSBNdWx0aSwKKwkgICAgICogZS5nLiwgYSAiWyIgd2l0aG91dCBtYXRjaGluZyAiXSIuCisJICAgICAqLworCSAgICBmb3IgKGxlbiA9IDA7IGMgIT0gTlVMICYmIChsZW4gPT0gMAorCQkJfHwgKHJlX211bHRpX3R5cGUocGVla2NocigpKSA9PSBOT1RfTVVMVEkKKwkJCSAgICAmJiAhb25lX2V4YWN0bHkKKwkJCSAgICAmJiAhaXNfTWFnaWMoYykpKTsgKytsZW4pCisJICAgIHsKKwkJYyA9IG5vX01hZ2ljKGMpOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJaWYgKGhhc19tYnl0ZSkKKwkJeworCQkgICAgcmVnbWJjKGMpOworCQkgICAgaWYgKGVuY191dGY4KQorCQkgICAgeworCQkJaW50CW9mZjsKKwkJCWludAlsOworCisJCQkvKiBOZWVkIHRvIGdldCBjb21wb3NpbmcgY2hhcmFjdGVyIHRvbywgZGlyZWN0bHkKKwkJCSAqIGFjY2VzcyByZWdwYXJzZSBmb3IgdGhhdCwgYmVjYXVzZSBza2lwY2hyKCkgc2tpcHMKKwkJCSAqIG92ZXIgY29tcG9zaW5nIGNoYXJzLiAqLworCQkJdW5nZXRjaHIoKTsKKwkJCWlmICgqcmVncGFyc2UgPT0gJ1xcJyAmJiByZWdwYXJzZVsxXSAhPSBOVUwpCisJCQkgICAgb2ZmID0gMTsKKwkJCWVsc2UKKwkJCSAgICBvZmYgPSAwOworCQkJZm9yICg7OykKKwkJCXsKKwkJCSAgICBsID0gdXRmX3B0cjJsZW5fY2hlY2socmVncGFyc2UgKyBvZmYpOworCQkJICAgIGlmICghVVRGX0NPTVBPU0lOR0xJS0UocmVncGFyc2UgKyBvZmYsCisJCQkJCQkJICByZWdwYXJzZSArIG9mZiArIGwpKQorCQkJCWJyZWFrOworCQkJICAgIG9mZiArPSBsOworCQkJICAgIHJlZ21iYyh1dGZfcHRyMmNoYXIocmVncGFyc2UgKyBvZmYpKTsKKwkJCX0KKwkJCXNraXBjaHIoKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisjZW5kaWYKKwkJICAgIHJlZ2MoYyk7CisJCWMgPSBnZXRjaHIoKTsKKwkgICAgfQorCSAgICB1bmdldGNocigpOworCisJICAgIHJlZ2MoTlVMKTsKKwkgICAgKmZsYWdwIHw9IEhBU1dJRFRIOworCSAgICBpZiAobGVuID09IDEpCisJCSpmbGFncCB8PSBTSU1QTEU7CisJfQorCWJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qCisgKiBlbWl0IGEgbm9kZQorICogUmV0dXJuIHBvaW50ZXIgdG8gZ2VuZXJhdGVkIGNvZGUuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3JlZ25vZGUob3ApCisgICAgaW50CQlvcDsKK3sKKyAgICBjaGFyX3UgICpyZXQ7CisKKyAgICByZXQgPSByZWdjb2RlOworICAgIGlmIChyZXQgPT0gSlVTVF9DQUxDX1NJWkUpCisJcmVnc2l6ZSArPSAzOworICAgIGVsc2UKKyAgICB7CisJKnJlZ2NvZGUrKyA9IG9wOworCSpyZWdjb2RlKysgPSBOVUw7CQkvKiBOdWxsICJuZXh0IiBwb2ludGVyLiAqLworCSpyZWdjb2RlKysgPSBOVUw7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKy8qCisgKiBFbWl0IChpZiBhcHByb3ByaWF0ZSkgYSBieXRlIG9mIGNvZGUKKyAqLworICAgIHN0YXRpYyB2b2lkCityZWdjKGIpCisgICAgaW50CQliOworeworICAgIGlmIChyZWdjb2RlID09IEpVU1RfQ0FMQ19TSVpFKQorCXJlZ3NpemUrKzsKKyAgICBlbHNlCisJKnJlZ2NvZGUrKyA9IGI7Cit9CisKKyNpZmRlZiBGRUFUX01CWVRFCisvKgorICogRW1pdCAoaWYgYXBwcm9wcmlhdGUpIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgb2YgY29kZQorICovCisgICAgc3RhdGljIHZvaWQKK3JlZ21iYyhjKQorICAgIGludAkJYzsKK3sKKyAgICBpZiAocmVnY29kZSA9PSBKVVNUX0NBTENfU0laRSkKKwlyZWdzaXplICs9ICgqbWJfY2hhcjJsZW4pKGMpOworICAgIGVsc2UKKwlyZWdjb2RlICs9ICgqbWJfY2hhcjJieXRlcykoYywgcmVnY29kZSk7Cit9CisjZW5kaWYKKworLyoKKyAqIHJlZ2luc2VydCAtIGluc2VydCBhbiBvcGVyYXRvciBpbiBmcm9udCBvZiBhbHJlYWR5LWVtaXR0ZWQgb3BlcmFuZAorICoKKyAqIE1lYW5zIHJlbG9jYXRpbmcgdGhlIG9wZXJhbmQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcmVnaW5zZXJ0KG9wLCBvcG5kKQorICAgIGludAkJb3A7CisgICAgY2hhcl91ICAgICAqb3BuZDsKK3sKKyAgICBjaGFyX3UJKnNyYzsKKyAgICBjaGFyX3UJKmRzdDsKKyAgICBjaGFyX3UJKnBsYWNlOworCisgICAgaWYgKHJlZ2NvZGUgPT0gSlVTVF9DQUxDX1NJWkUpCisgICAgeworCXJlZ3NpemUgKz0gMzsKKwlyZXR1cm47CisgICAgfQorICAgIHNyYyA9IHJlZ2NvZGU7CisgICAgcmVnY29kZSArPSAzOworICAgIGRzdCA9IHJlZ2NvZGU7CisgICAgd2hpbGUgKHNyYyA+IG9wbmQpCisJKi0tZHN0ID0gKi0tc3JjOworCisgICAgcGxhY2UgPSBvcG5kOwkJLyogT3Agbm9kZSwgd2hlcmUgb3BlcmFuZCB1c2VkIHRvIGJlLiAqLworICAgICpwbGFjZSsrID0gb3A7CisgICAgKnBsYWNlKysgPSBOVUw7CisgICAgKnBsYWNlID0gTlVMOworfQorCisvKgorICogcmVnaW5zZXJ0X2xpbWl0cyAtIGluc2VydCBhbiBvcGVyYXRvciBpbiBmcm9udCBvZiBhbHJlYWR5LWVtaXR0ZWQgb3BlcmFuZC4KKyAqIFRoZSBvcGVyYXRvciBoYXMgdGhlIGdpdmVuIGxpbWl0IHZhbHVlcyBhcyBvcGVyYW5kcy4gIEFsc28gc2V0IG5leHQgcG9pbnRlci4KKyAqCisgKiBNZWFucyByZWxvY2F0aW5nIHRoZSBvcGVyYW5kLgorICovCisgICAgc3RhdGljIHZvaWQKK3JlZ2luc2VydF9saW1pdHMob3AsIG1pbnZhbCwgbWF4dmFsLCBvcG5kKQorICAgIGludAkJb3A7CisgICAgbG9uZwltaW52YWw7CisgICAgbG9uZwltYXh2YWw7CisgICAgY2hhcl91CSpvcG5kOworeworICAgIGNoYXJfdQkqc3JjOworICAgIGNoYXJfdQkqZHN0OworICAgIGNoYXJfdQkqcGxhY2U7CisKKyAgICBpZiAocmVnY29kZSA9PSBKVVNUX0NBTENfU0laRSkKKyAgICB7CisJcmVnc2l6ZSArPSAxMTsKKwlyZXR1cm47CisgICAgfQorICAgIHNyYyA9IHJlZ2NvZGU7CisgICAgcmVnY29kZSArPSAxMTsKKyAgICBkc3QgPSByZWdjb2RlOworICAgIHdoaWxlIChzcmMgPiBvcG5kKQorCSotLWRzdCA9ICotLXNyYzsKKworICAgIHBsYWNlID0gb3BuZDsJCS8qIE9wIG5vZGUsIHdoZXJlIG9wZXJhbmQgdXNlZCB0byBiZS4gKi8KKyAgICAqcGxhY2UrKyA9IG9wOworICAgICpwbGFjZSsrID0gTlVMOworICAgICpwbGFjZSsrID0gTlVMOworICAgIHBsYWNlID0gcmVfcHV0X2xvbmcocGxhY2UsIChsb25nX3UpbWludmFsKTsKKyAgICBwbGFjZSA9IHJlX3B1dF9sb25nKHBsYWNlLCAobG9uZ191KW1heHZhbCk7CisgICAgcmVndGFpbChvcG5kLCBwbGFjZSk7Cit9CisKKy8qCisgKiBXcml0ZSBhIGxvbmcgYXMgZm91ciBieXRlcyBhdCAicCIgYW5kIHJldHVybiBwb2ludGVyIHRvIHRoZSBuZXh0IGNoYXIuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3JlX3B1dF9sb25nKHAsIHZhbCkKKyAgICBjaGFyX3UJKnA7CisgICAgbG9uZ191CXZhbDsKK3sKKyAgICAqcCsrID0gKGNoYXJfdSkgKCh2YWwgPj4gMjQpICYgMDM3Nyk7CisgICAgKnArKyA9IChjaGFyX3UpICgodmFsID4+IDE2KSAmIDAzNzcpOworICAgICpwKysgPSAoY2hhcl91KSAoKHZhbCA+PiA4KSAmIDAzNzcpOworICAgICpwKysgPSAoY2hhcl91KSAodmFsICYgMDM3Nyk7CisgICAgcmV0dXJuIHA7Cit9CisKKy8qCisgKiByZWd0YWlsIC0gc2V0IHRoZSBuZXh0LXBvaW50ZXIgYXQgdGhlIGVuZCBvZiBhIG5vZGUgY2hhaW4KKyAqLworICAgIHN0YXRpYyB2b2lkCityZWd0YWlsKHAsIHZhbCkKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSp2YWw7Cit7CisgICAgY2hhcl91CSpzY2FuOworICAgIGNoYXJfdQkqdGVtcDsKKyAgICBpbnQJCW9mZnNldDsKKworICAgIGlmIChwID09IEpVU1RfQ0FMQ19TSVpFKQorCXJldHVybjsKKworICAgIC8qIEZpbmQgbGFzdCBub2RlLiAqLworICAgIHNjYW4gPSBwOworICAgIGZvciAoOzspCisgICAgeworCXRlbXAgPSByZWduZXh0KHNjYW4pOworCWlmICh0ZW1wID09IE5VTEwpCisJICAgIGJyZWFrOworCXNjYW4gPSB0ZW1wOworICAgIH0KKworICAgIGlmIChPUChzY2FuKSA9PSBCQUNLKQorCW9mZnNldCA9IChpbnQpKHNjYW4gLSB2YWwpOworICAgIGVsc2UKKwlvZmZzZXQgPSAoaW50KSh2YWwgLSBzY2FuKTsKKyAgICAqKHNjYW4gKyAxKSA9IChjaGFyX3UpICgoKHVuc2lnbmVkKW9mZnNldCA+PiA4KSAmIDAzNzcpOworICAgICooc2NhbiArIDIpID0gKGNoYXJfdSkgKG9mZnNldCAmIDAzNzcpOworfQorCisvKgorICogcmVnb3B0YWlsIC0gcmVndGFpbCBvbiBpdGVtIGFmdGVyIGEgQlJBTkNIOyBub3AgaWYgbm9uZQorICovCisgICAgc3RhdGljIHZvaWQKK3JlZ29wdGFpbChwLCB2YWwpCisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqdmFsOworeworICAgIC8qIFdoZW4gb3AgaXMgbmVpdGhlciBCUkFOQ0ggbm9yIEJSQUNFX0NPTVBMRVgwLTksIGl0IGlzICJvcGVyYW5kbGVzcyIgKi8KKyAgICBpZiAocCA9PSBOVUxMIHx8IHAgPT0gSlVTVF9DQUxDX1NJWkUKKwkgICAgfHwgKE9QKHApICE9IEJSQU5DSAorCQkmJiAoT1AocCkgPCBCUkFDRV9DT01QTEVYIHx8IE9QKHApID4gQlJBQ0VfQ09NUExFWCArIDkpKSkKKwlyZXR1cm47CisgICAgcmVndGFpbChPUEVSQU5EKHApLCB2YWwpOworfQorCisvKgorICogZ2V0Y2hyKCkgLSBnZXQgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIHBhdHRlcm4uIFdlIGtub3cgYWJvdXQKKyAqIG1hZ2ljIGFuZCBzdWNoLCBzbyB0aGVyZWZvcmUgd2UgbmVlZCBhIGxleGljYWwgYW5hbHl6ZXIuCisgKi8KKworLyogc3RhdGljIGludAkgICAgY3VyY2hyOyAqLworc3RhdGljIGludAlwcmV2cHJldmNocjsKK3N0YXRpYyBpbnQJcHJldmNocjsKK3N0YXRpYyBpbnQJbmV4dGNocjsgICAgLyogdXNlZCBmb3IgdW5nZXRjaHIoKSAqLworLyoKKyAqIE5vdGU6IHByZXZjaHIgaXMgc29tZXRpbWVzIC0xIHdoZW4gd2UgYXJlIG5vdCBhdCB0aGUgc3RhcnQsCisgKiBlZyBpbiAvWyBeSV1eIHRoZSBwYXR0ZXJuIHdhcyBuZXZlciBmb3VuZCBldmVuIGlmIGl0IGV4aXN0ZWQsIGJlY2F1c2UgXiB3YXMKKyAqIHRha2VuIHRvIGJlIG1hZ2ljIC0tIHdlYmIKKyAqLworc3RhdGljIGludAlhdF9zdGFydDsJLyogVHJ1ZSB3aGVuIG9uIHRoZSBmaXJzdCBjaGFyYWN0ZXIgKi8KK3N0YXRpYyBpbnQJcHJldl9hdF9zdGFydDsgIC8qIFRydWUgd2hlbiBvbiB0aGUgc2Vjb25kIGNoYXJhY3RlciAqLworCisgICAgc3RhdGljIHZvaWQKK2luaXRjaHIoc3RyKQorICAgIGNoYXJfdSAqc3RyOworeworICAgIHJlZ3BhcnNlID0gc3RyOworICAgIHByZXZjaHJfbGVuID0gMDsKKyAgICBjdXJjaHIgPSBwcmV2cHJldmNociA9IHByZXZjaHIgPSBuZXh0Y2hyID0gLTE7CisgICAgYXRfc3RhcnQgPSBUUlVFOworICAgIHByZXZfYXRfc3RhcnQgPSBGQUxTRTsKK30KKworICAgIHN0YXRpYyBpbnQKK3BlZWtjaHIoKQoreworICAgIGlmIChjdXJjaHIgPT0gLTEpCisgICAgeworCXN3aXRjaCAoY3VyY2hyID0gcmVncGFyc2VbMF0pCisJeworCWNhc2UgJy4nOgorCWNhc2UgJ1snOgorCWNhc2UgJ34nOgorCSAgICAvKiBtYWdpYyB3aGVuICdtYWdpYycgaXMgb24gKi8KKwkgICAgaWYgKHJlZ19tYWdpYyA+PSBNQUdJQ19PTikKKwkJY3VyY2hyID0gTWFnaWMoY3VyY2hyKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnKCc6CisJY2FzZSAnKSc6CisJY2FzZSAneyc6CisJY2FzZSAnJSc6CisJY2FzZSAnKyc6CisJY2FzZSAnPSc6CisJY2FzZSAnPyc6CisJY2FzZSAnQCc6CisJY2FzZSAnISc6CisJY2FzZSAnJic6CisJY2FzZSAnfCc6CisJY2FzZSAnPCc6CisJY2FzZSAnPic6CisJY2FzZSAnIyc6CS8qIGZ1dHVyZSBleHQuICovCisJY2FzZSAnIic6CS8qIGZ1dHVyZSBleHQuICovCisJY2FzZSAnXCcnOgkvKiBmdXR1cmUgZXh0LiAqLworCWNhc2UgJywnOgkvKiBmdXR1cmUgZXh0LiAqLworCWNhc2UgJy0nOgkvKiBmdXR1cmUgZXh0LiAqLworCWNhc2UgJzonOgkvKiBmdXR1cmUgZXh0LiAqLworCWNhc2UgJzsnOgkvKiBmdXR1cmUgZXh0LiAqLworCWNhc2UgJ2AnOgkvKiBmdXR1cmUgZXh0LiAqLworCWNhc2UgJy8nOgkvKiBDYW4ndCBiZSB1c2VkIGluIC8gY29tbWFuZCAqLworCSAgICAvKiBtYWdpYyBvbmx5IGFmdGVyICJcdiIgKi8KKwkgICAgaWYgKHJlZ19tYWdpYyA9PSBNQUdJQ19BTEwpCisJCWN1cmNociA9IE1hZ2ljKGN1cmNocik7CisJICAgIGJyZWFrOworCWNhc2UgJyonOgorCSAgICAvKiAqIGlzIG5vdCBtYWdpYyBhcyB0aGUgdmVyeSBmaXJzdCBjaGFyYWN0ZXIsIGVnICI/KnB0ciIgYW5kIHdoZW4KKwkgICAgICogYWZ0ZXIgJ14nLCBlZyAiL14qcHRyIiAqLworCSAgICBpZiAocmVnX21hZ2ljID49IE1BR0lDX09OICYmICFhdF9zdGFydAorCQkJCSAmJiAhKHByZXZfYXRfc3RhcnQgJiYgcHJldmNociA9PSBNYWdpYygnXicpKSkKKwkJY3VyY2hyID0gTWFnaWMoJyonKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnXic6CisJICAgIC8qICdeJyBpcyBvbmx5IG1hZ2ljIGFzIHRoZSB2ZXJ5IGZpcnN0IGNoYXJhY3RlciBhbmQgaWYgaXQncyBhZnRlcgorCSAgICAgKiAiXCgiLCAiXHwiLCAiXCYnIG9yICJcbiIgKi8KKwkgICAgaWYgKHJlZ19tYWdpYyA+PSBNQUdJQ19PRkYKKwkJICAgICYmIChhdF9zdGFydAorCQkJfHwgcmVnX21hZ2ljID09IE1BR0lDX0FMTAorCQkJfHwgcHJldmNociA9PSBNYWdpYygnKCcpCisJCQl8fCBwcmV2Y2hyID09IE1hZ2ljKCd8JykKKwkJCXx8IHByZXZjaHIgPT0gTWFnaWMoJyYnKQorCQkJfHwgcHJldmNociA9PSBNYWdpYygnbicpCisJCQl8fCAobm9fTWFnaWMocHJldmNocikgPT0gJygnCisJCQkgICAgJiYgcHJldnByZXZjaHIgPT0gTWFnaWMoJyUnKSkpKQorCSAgICB7CisJCWN1cmNociA9IE1hZ2ljKCdeJyk7CisJCWF0X3N0YXJ0ID0gVFJVRTsKKwkJcHJldl9hdF9zdGFydCA9IEZBTFNFOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJyQnOgorCSAgICAvKiAnJCcgaXMgb25seSBtYWdpYyBhcyB0aGUgdmVyeSBsYXN0IGNoYXIgYW5kIGlmIGl0J3MgaW4gZnJvbnQgb2YKKwkgICAgICogZWl0aGVyICJcfCIsICJcKSIsICJcJiIsIG9yICJcbiIgKi8KKwkgICAgaWYgKHJlZ19tYWdpYyA+PSBNQUdJQ19PRkYpCisJICAgIHsKKwkJY2hhcl91ICpwID0gcmVncGFyc2UgKyAxOworCisJCS8qIGlnbm9yZSBcYyBcQyBcbSBhbmQgXE0gYWZ0ZXIgJyQnICovCisJCXdoaWxlIChwWzBdID09ICdcXCcgJiYgKHBbMV0gPT0gJ2MnIHx8IHBbMV0gPT0gJ0MnCisJCQkJfHwgcFsxXSA9PSAnbScgfHwgcFsxXSA9PSAnTScgfHwgcFsxXSA9PSAnWicpKQorCQkgICAgcCArPSAyOworCQlpZiAocFswXSA9PSBOVUwKKwkJCXx8IChwWzBdID09ICdcXCcKKwkJCSAgICAmJiAocFsxXSA9PSAnfCcgfHwgcFsxXSA9PSAnJicgfHwgcFsxXSA9PSAnKScKKwkJCQl8fCBwWzFdID09ICduJykpCisJCQl8fCByZWdfbWFnaWMgPT0gTUFHSUNfQUxMKQorCQkgICAgY3VyY2hyID0gTWFnaWMoJyQnKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlICdcXCc6CisJICAgIHsKKwkJaW50IGMgPSByZWdwYXJzZVsxXTsKKworCQlpZiAoYyA9PSBOVUwpCisJCSAgICBjdXJjaHIgPSAnXFwnOwkvKiB0cmFpbGluZyAnXCcgKi8KKwkJZWxzZSBpZiAoCisjaWZkZWYgRUJDRElDCisJCQl2aW1fc3RyY2hyKE1FVEEsIGMpCisjZWxzZQorCQkJYyA8PSAnficgJiYgTUVUQV9mbGFnc1tjXQorI2VuZGlmCisJCQkpCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBNRVRBIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgdGhhdCBtYXkgYmUgbWFnaWMgc29tZXRpbWVzLAorCQkgICAgICogZXhjZXB0IF4gYW5kICQgKCJcXiIgYW5kICJcJCIgYXJlIG9ubHkgbWFnaWMgYWZ0ZXIKKwkJICAgICAqICJcdiIpLiAgV2Ugbm93IGZldGNoIHRoZSBuZXh0IGNoYXJhY3RlciBhbmQgdG9nZ2xlIGl0cworCQkgICAgICogbWFnaWNuZXNzLiAgVGhlcmVmb3JlLCBcIGlzIHNvIG1ldGEtbWFnaWMgdGhhdCBpdCBpcworCQkgICAgICogbm90IGluIE1FVEEuCisJCSAgICAgKi8KKwkJICAgIGN1cmNociA9IC0xOworCQkgICAgcHJldl9hdF9zdGFydCA9IGF0X3N0YXJ0OworCQkgICAgYXRfc3RhcnQgPSBGQUxTRTsJLyogYmUgYWJsZSB0byBzYXkgIi9cKnB0ciIgKi8KKwkJICAgICsrcmVncGFyc2U7CisJCSAgICBwZWVrY2hyKCk7CisJCSAgICAtLXJlZ3BhcnNlOworCQkgICAgY3VyY2hyID0gdG9nZ2xlX01hZ2ljKGN1cmNocik7CisJCX0KKwkJZWxzZSBpZiAodmltX3N0cmNocihSRUdFWFBfQUJCUiwgYykpCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBIYW5kbGUgYWJicmV2aWF0aW9ucywgbGlrZSAiXHQiIGZvciBUQUIgLS0gd2ViYgorCQkgICAgICovCisJCSAgICBjdXJjaHIgPSBiYWNrc2xhc2hfdHJhbnMoYyk7CisJCX0KKwkJZWxzZSBpZiAocmVnX21hZ2ljID09IE1BR0lDX05PTkUgJiYgKGMgPT0gJyQnIHx8IGMgPT0gJ14nKSkKKwkJICAgIGN1cmNociA9IHRvZ2dsZV9NYWdpYyhjKTsKKwkJZWxzZQorCQl7CisJCSAgICAvKgorCQkgICAgICogTmV4dCBjaGFyYWN0ZXIgY2FuIG5ldmVyIGJlIChtYWRlKSBtYWdpYz8KKwkJICAgICAqIFRoZW4gYmFja3NsYXNoaW5nIGl0IHdvbid0IGRvIGFueXRoaW5nLgorCQkgICAgICovCisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCWN1cmNociA9ICgqbWJfcHRyMmNoYXIpKHJlZ3BhcnNlICsgMSk7CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCWN1cmNociA9IGM7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKworI2lmZGVmIEZFQVRfTUJZVEUKKwlkZWZhdWx0OgorCSAgICBpZiAoaGFzX21ieXRlKQorCQljdXJjaHIgPSAoKm1iX3B0cjJjaGFyKShyZWdwYXJzZSk7CisjZW5kaWYKKwl9CisgICAgfQorCisgICAgcmV0dXJuIGN1cmNocjsKK30KKworLyoKKyAqIEVhdCBvbmUgbGV4ZWQgY2hhcmFjdGVyLiAgRG8gdGhpcyBpbiBhIHdheSB0aGF0IHdlIGNhbiB1bmRvIGl0LgorICovCisgICAgc3RhdGljIHZvaWQKK3NraXBjaHIoKQoreworICAgIC8qIHBlZWtjaHIoKSBlYXRzIGEgYmFja3NsYXNoLCBkbyB0aGUgc2FtZSBoZXJlICovCisgICAgaWYgKCpyZWdwYXJzZSA9PSAnXFwnKQorCXByZXZjaHJfbGVuID0gMTsKKyAgICBlbHNlCisJcHJldmNocl9sZW4gPSAwOworICAgIGlmIChyZWdwYXJzZVtwcmV2Y2hyX2xlbl0gIT0gTlVMKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgcHJldmNocl9sZW4gKz0gKCptYl9wdHIybGVuX2NoZWNrKShyZWdwYXJzZSArIHByZXZjaHJfbGVuKTsKKwllbHNlCisjZW5kaWYKKwkgICAgKytwcmV2Y2hyX2xlbjsKKyAgICB9CisgICAgcmVncGFyc2UgKz0gcHJldmNocl9sZW47CisgICAgcHJldl9hdF9zdGFydCA9IGF0X3N0YXJ0OworICAgIGF0X3N0YXJ0ID0gRkFMU0U7CisgICAgcHJldnByZXZjaHIgPSBwcmV2Y2hyOworICAgIHByZXZjaHIgPSBjdXJjaHI7CisgICAgY3VyY2hyID0gbmV4dGNocjsJICAgIC8qIHVzZSBwcmV2aW91c2x5IHVuZ2V0IGNoYXIsIG9yIC0xICovCisgICAgbmV4dGNociA9IC0xOworfQorCisvKgorICogU2tpcCBhIGNoYXJhY3RlciB3aGlsZSBrZWVwaW5nIHRoZSB2YWx1ZSBvZiBwcmV2X2F0X3N0YXJ0IGZvciBhdF9zdGFydC4KKyAqIHByZXZjaHIgYW5kIHByZXZwcmV2Y2hyIGFyZSBhbHNvIGtlcHQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc2tpcGNocl9rZWVwc3RhcnQoKQoreworICAgIGludCBhcyA9IHByZXZfYXRfc3RhcnQ7CisgICAgaW50IHByID0gcHJldmNocjsKKyAgICBpbnQgcHJwciA9IHByZXZwcmV2Y2hyOworCisgICAgc2tpcGNocigpOworICAgIGF0X3N0YXJ0ID0gYXM7CisgICAgcHJldmNociA9IHByOworICAgIHByZXZwcmV2Y2hyID0gcHJwcjsKK30KKworICAgIHN0YXRpYyBpbnQKK2dldGNocigpCit7CisgICAgaW50IGNociA9IHBlZWtjaHIoKTsKKworICAgIHNraXBjaHIoKTsKKyAgICByZXR1cm4gY2hyOworfQorCisvKgorICogcHV0IGNoYXJhY3RlciBiYWNrLiAgV29ya3Mgb25seSBvbmNlIQorICovCisgICAgc3RhdGljIHZvaWQKK3VuZ2V0Y2hyKCkKK3sKKyAgICBuZXh0Y2hyID0gY3VyY2hyOworICAgIGN1cmNociA9IHByZXZjaHI7CisgICAgcHJldmNociA9IHByZXZwcmV2Y2hyOworICAgIGF0X3N0YXJ0ID0gcHJldl9hdF9zdGFydDsKKyAgICBwcmV2X2F0X3N0YXJ0ID0gRkFMU0U7CisKKyAgICAvKiBCYWNrdXAgcmVncGFyc2UsIHNvIHRoYXQgaXQncyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyBiZWZvcmUgdGhlCisgICAgICogZ2V0Y2hyKCkuICovCisgICAgcmVncGFyc2UgLT0gcHJldmNocl9sZW47Cit9CisKKy8qCisgKiByZWFkX2xpbWl0cyAtIFJlYWQgdHdvIGludGVnZXJzIHRvIGJlIHRha2VuIGFzIGEgbWluaW11bSBhbmQgbWF4aW11bS4KKyAqIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgJy0nLCB0aGVuIHRoZSByYW5nZSBpcyByZXZlcnNlZC4KKyAqIFNob3VsZCBlbmQgd2l0aCAnZW5kJy4gIElmIG1pbnZhbCBpcyBtaXNzaW5nLCB6ZXJvIGlzIGRlZmF1bHQsIGlmIG1heHZhbCBpcworICogbWlzc2luZywgYSB2ZXJ5IGJpZyBudW1iZXIgaXMgdGhlIGRlZmF1bHQuCisgKi8KKyAgICBzdGF0aWMgaW50CityZWFkX2xpbWl0cyhtaW52YWwsIG1heHZhbCkKKyAgICBsb25nCSptaW52YWw7CisgICAgbG9uZwkqbWF4dmFsOworeworICAgIGludAkJcmV2ZXJzZSA9IEZBTFNFOworICAgIGNoYXJfdQkqZmlyc3RfY2hhcjsKKyAgICBsb25nCXRtcDsKKworICAgIGlmICgqcmVncGFyc2UgPT0gJy0nKQorICAgIHsKKwkvKiBTdGFydHMgd2l0aCAnLScsIHNvIHJldmVyc2UgdGhlIHJhbmdlIGxhdGVyICovCisJcmVncGFyc2UrKzsKKwlyZXZlcnNlID0gVFJVRTsKKyAgICB9CisgICAgZmlyc3RfY2hhciA9IHJlZ3BhcnNlOworICAgICptaW52YWwgPSBnZXRkaWdpdHMoJnJlZ3BhcnNlKTsKKyAgICBpZiAoKnJlZ3BhcnNlID09ICcsJykJICAgIC8qIFRoZXJlIGlzIGEgY29tbWEgKi8KKyAgICB7CisJaWYgKHZpbV9pc2RpZ2l0KCorK3JlZ3BhcnNlKSkKKwkgICAgKm1heHZhbCA9IGdldGRpZ2l0cygmcmVncGFyc2UpOworCWVsc2UKKwkgICAgKm1heHZhbCA9IE1BWF9MSU1JVDsKKyAgICB9CisgICAgZWxzZSBpZiAoVklNX0lTRElHSVQoKmZpcnN0X2NoYXIpKQorCSptYXh2YWwgPSAqbWludmFsOwkgICAgLyogSXQgd2FzIFx7bn0gb3IgXHstbn0gKi8KKyAgICBlbHNlCisJKm1heHZhbCA9IE1BWF9MSU1JVDsJICAgIC8qIEl0IHdhcyBce30gb3IgXHstfSAqLworICAgIGlmICgqcmVncGFyc2UgPT0gJ1xcJykKKwlyZWdwYXJzZSsrOwkvKiBBbGxvdyBlaXRoZXIgXHsuLi59IG9yIFx7Li4uXH0gKi8KKyAgICBpZiAoKnJlZ3BhcnNlICE9ICd9JyB8fCAoKm1heHZhbCA9PSAwICYmICptaW52YWwgPT0gMCkpCisgICAgeworCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIkU1NTQ6IFN5bnRheCBlcnJvciBpbiAlc3suLi59IiksCisJCQkJCSAgcmVnX21hZ2ljID09IE1BR0lDX0FMTCA/ICIiIDogIlxcIik7CisJRU1TR19SRVRfRkFJTChJT2J1ZmYpOworICAgIH0KKworICAgIC8qCisgICAgICogUmV2ZXJzZSB0aGUgcmFuZ2UgaWYgdGhlcmUgd2FzIGEgJy0nLCBvciBtYWtlIHN1cmUgaXQgaXMgaW4gdGhlIHJpZ2h0CisgICAgICogb3JkZXIgb3RoZXJ3aXNlLgorICAgICAqLworICAgIGlmICgoIXJldmVyc2UgJiYgKm1pbnZhbCA+ICptYXh2YWwpIHx8IChyZXZlcnNlICYmICptaW52YWwgPCAqbWF4dmFsKSkKKyAgICB7CisJdG1wID0gKm1pbnZhbDsKKwkqbWludmFsID0gKm1heHZhbDsKKwkqbWF4dmFsID0gdG1wOworICAgIH0KKyAgICBza2lwY2hyKCk7CQkvKiBsZXQncyBiZSBmcmllbmRzIHdpdGggdGhlIGxleGVyIGFnYWluICovCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogdmltX3JlZ2V4ZWMgYW5kIGZyaWVuZHMKKyAqLworCisvKgorICogR2xvYmFsIHdvcmsgdmFyaWFibGVzIGZvciB2aW1fcmVnZXhlYygpLgorICovCisKKy8qIFRoZSBjdXJyZW50IG1hdGNoLXBvc2l0aW9uIGlzIHJlbWVtYmVyZWQgd2l0aCB0aGVzZSB2YXJpYWJsZXM6ICovCitzdGF0aWMgbGluZW5yX1QJcmVnbG51bTsJLyogbGluZSBudW1iZXIsIHJlbGF0aXZlIHRvIGZpcnN0IGxpbmUgKi8KK3N0YXRpYyBjaGFyX3UJKnJlZ2xpbmU7CS8qIHN0YXJ0IG9mIGN1cnJlbnQgbGluZSAqLworc3RhdGljIGNoYXJfdQkqcmVnaW5wdXQ7CS8qIGN1cnJlbnQgaW5wdXQsIHBvaW50cyBpbnRvICJyZWdsaW5lIiAqLworCitzdGF0aWMgaW50CW5lZWRfY2xlYXJfc3ViZXhwcjsJLyogc3ViZXhwcmVzc2lvbnMgc3RpbGwgbmVlZCB0byBiZQorCQkJCQkgKiBjbGVhcmVkICovCisjaWZkZWYgRkVBVF9TWU5fSEwKK3N0YXRpYyBpbnQJbmVlZF9jbGVhcl96c3ViZXhwciA9IEZBTFNFOwkvKiBleHRtYXRjaCBzdWJleHByZXNzaW9ucworCQkJCQkJICogc3RpbGwgbmVlZCB0byBiZSBjbGVhcmVkICovCisjZW5kaWYKKworc3RhdGljIGludAlvdXRfb2Zfc3RhY2s7CS8qIFRSVUUgd2hlbiByYW4gb3V0IG9mIHN0YWNrIHNwYWNlICovCisKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBzYXZlIHRoZSBjdXJyZW50IGlucHV0IHN0YXRlLCB3aGVuIGl0IG5lZWRzIHRvIGJlCisgKiByZXN0b3JlZCBhZnRlciB0cnlpbmcgYSBtYXRjaC4gIFVzZWQgYnkgcmVnX3NhdmUoKSBhbmQgcmVnX3Jlc3RvcmUoKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1bmlvbgorICAgIHsKKwljaGFyX3UJKnB0cjsJLyogcmVnaW5wdXQgcG9pbnRlciwgZm9yIHNpbmdsZS1saW5lIHJlZ2V4cCAqLworCWxwb3NfVAlwb3M7CS8qIHJlZ2lucHV0IHBvcywgZm9yIG11bHRpLWxpbmUgcmVnZXhwICovCisgICAgfSByc191OworfSByZWdzYXZlX1Q7CisKKy8qIHN0cnVjdCB0byBzYXZlIHN0YXJ0L2VuZCBwb2ludGVyL3Bvc2l0aW9uIGluIGZvciBcKFwpICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVuaW9uCisgICAgeworCWNoYXJfdQkqcHRyOworCWxwb3NfVAlwb3M7CisgICAgfSBzZV91OworfSBzYXZlX3NlX1Q7CisKK3N0YXRpYyBjaGFyX3UJKnJlZ19nZXRsaW5lIF9fQVJHUygobGluZW5yX1QgbG51bSkpOworc3RhdGljIGxvbmcJdmltX3JlZ2V4ZWNfYm90aCBfX0FSR1MoKGNoYXJfdSAqbGluZSwgY29sbnJfVCBjb2wpKTsKK3N0YXRpYyBsb25nCXJlZ3RyeSBfX0FSR1MoKHJlZ3Byb2dfVCAqcHJvZywgY29sbnJfVCBjb2wpKTsKK3N0YXRpYyB2b2lkCWNsZWFudXBfc3ViZXhwciBfX0FSR1MoKHZvaWQpKTsKKyNpZmRlZiBGRUFUX1NZTl9ITAorc3RhdGljIHZvaWQJY2xlYW51cF96c3ViZXhwciBfX0FSR1MoKHZvaWQpKTsKKyNlbmRpZgorc3RhdGljIHZvaWQJcmVnX25leHRsaW5lIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQJcmVnX3NhdmUgX19BUkdTKChyZWdzYXZlX1QgKnNhdmUpKTsKK3N0YXRpYyB2b2lkCXJlZ19yZXN0b3JlIF9fQVJHUygocmVnc2F2ZV9UICpzYXZlKSk7CitzdGF0aWMgaW50CXJlZ19zYXZlX2VxdWFsIF9fQVJHUygocmVnc2F2ZV9UICpzYXZlKSk7CitzdGF0aWMgdm9pZAlzYXZlX3NlX211bHRpIF9fQVJHUygoc2F2ZV9zZV9UICpzYXZlcCwgbHBvc19UICpwb3NwKSk7CitzdGF0aWMgdm9pZAlzYXZlX3NlX29uZSBfX0FSR1MoKHNhdmVfc2VfVCAqc2F2ZXAsIGNoYXJfdSAqKnBwKSk7CisKKy8qIFNhdmUgdGhlIHN1Yi1leHByZXNzaW9ucyBiZWZvcmUgYXR0ZW1wdGluZyBhIG1hdGNoLiAqLworI2RlZmluZSBzYXZlX3NlKHNhdmVwLCBwb3NwLCBwcCkgXAorICAgIFJFR19NVUxUSSA/IHNhdmVfc2VfbXVsdGkoKHNhdmVwKSwgKHBvc3ApKSA6IHNhdmVfc2Vfb25lKChzYXZlcCksIChwcCkpCisKKy8qIEFmdGVyIGEgZmFpbGVkIG1hdGNoIHJlc3RvcmUgdGhlIHN1Yi1leHByZXNzaW9ucy4gKi8KKyNkZWZpbmUgcmVzdG9yZV9zZShzYXZlcCwgcG9zcCwgcHApIHsgXAorICAgIGlmIChSRUdfTVVMVEkpIFwKKwkqKHBvc3ApID0gKHNhdmVwKS0+c2VfdS5wb3M7IFwKKyAgICBlbHNlIFwKKwkqKHBwKSA9IChzYXZlcCktPnNlX3UucHRyOyB9CisKK3N0YXRpYyBpbnQJcmVfbnVtX2NtcCBfX0FSR1MoKGxvbmdfdSB2YWwsIGNoYXJfdSAqc2NhbikpOworc3RhdGljIGludAlyZWdtYXRjaCBfX0FSR1MoKGNoYXJfdSAqcHJvZykpOworc3RhdGljIGludAlyZWdyZXBlYXQgX19BUkdTKChjaGFyX3UgKnAsIGxvbmcgbWF4Y291bnQpKTsKKworI2lmZGVmIERFQlVHCitpbnQJCXJlZ25hcnJhdGUgPSAwOworI2VuZGlmCisKKy8qCisgKiBJbnRlcm5hbCBjb3B5IG9mICdpZ25vcmVjYXNlJy4gIEl0IGlzIHNldCBhdCBlYWNoIGNhbGwgdG8gdmltX3JlZ2V4ZWMoKS4KKyAqIE5vcm1hbGx5IGl0IGdldHMgdGhlIHZhbHVlIG9mICJybV9pYyIgb3IgInJtbV9pYyIsIGJ1dCB3aGVuIHRoZSBwYXR0ZXJuCisgKiBjb250YWlucyAnXGMnIG9yICdcQycgdGhlIHZhbHVlIGlzIG92ZXJydWxlZC4KKyAqLworc3RhdGljIGludAlpcmVnX2ljOworCisjaWZkZWYgRkVBVF9NQllURQorLyoKKyAqIFNpbWlsYXIgdG8gaXJlZ19pYywgYnV0IG9ubHkgZm9yICdjb21iaW5pbmcnIGNoYXJhY3RlcnMuICBTZXQgd2l0aCBcWiBmbGFnCisgKiBpbiB0aGUgcmVnZXhwLiAgRGVmYXVsdHMgdG8gZmFsc2UsIGFsd2F5cy4KKyAqLworc3RhdGljIGludAlpcmVnX2ljb21iaW5lOworI2VuZGlmCisKKy8qCisgKiBTb21ldGltZXMgbmVlZCB0byBzYXZlIGEgY29weSBvZiBhIGxpbmUuICBTaW5jZSBhbGxvYygpL2ZyZWUoKSBpcyB2ZXJ5CisgKiBzbG93LCB3ZSBrZWVwIG9uZSBhbGxvY2F0ZWQgcGllY2Ugb2YgbWVtb3J5IGFuZCBvbmx5IHJlLWFsbG9jYXRlIGl0IHdoZW4KKyAqIGl0J3MgdG9vIHNtYWxsLiAgSXQncyBmcmVlZCBpbiB2aW1fcmVnZXhlY19ib3RoKCkgd2hlbiBmaW5pc2hlZC4KKyAqLworc3RhdGljIGNoYXJfdQkqcmVnX3RvZnJlZTsKK3N0YXRpYyB1bnNpZ25lZAlyZWdfdG9mcmVlbGVuOworCisvKgorICogVGhlc2UgdmFyaWFibGVzIGFyZSBzZXQgd2hlbiBleGVjdXRpbmcgYSByZWdleHAgdG8gc3BlZWQgdXAgdGhlIGV4ZWN1dGlvbi4KKyAqIFdoaWNoIG9uZXMgYXJlIHNldCBkZXBlbmRzIG9uIHdoZXRoZXJlIGEgc2luZ2xlLWxpbmUgb3IgbXVsdGktbGluZSBtYXRjaCBpcworICogZG9uZToKKyAqCQkJc2luZ2xlLWxpbmUJCW11bHRpLWxpbmUKKyAqIHJlZ19tYXRjaAkJJnJlZ21hdGNoX1QJCU5VTEwKKyAqIHJlZ19tbWF0Y2gJCU5VTEwJCQkmcmVnbW1hdGNoX1QKKyAqIHJlZ19zdGFydHAJCXJlZ19tYXRjaC0+c3RhcnRwCTxpbnZhbGlkPgorICogcmVnX2VuZHAJCXJlZ19tYXRjaC0+ZW5kcAkJPGludmFsaWQ+CisgKiByZWdfc3RhcnRwb3MJCTxpbnZhbGlkPgkJcmVnX21tYXRjaC0+c3RhcnRwb3MKKyAqIHJlZ19lbmRwb3MJCTxpbnZhbGlkPgkJcmVnX21tYXRjaC0+ZW5kcG9zCisgKiByZWdfd2luCQlOVUxMCQkJd2luZG93IGluIHdoaWNoIHRvIHNlYXJjaAorICogcmVnX2J1ZgkJPGludmFsaWQ+CQlidWZmZXIgaW4gd2hpY2ggdG8gc2VhcmNoCisgKiByZWdfZmlyc3RsbnVtCTxpbnZhbGlkPgkJZmlyc3QgbGluZSBpbiB3aGljaCB0byBzZWFyY2gKKyAqIHJlZ19tYXhsaW5lCQkwCQkJbGFzdCBsaW5lIG5yCisgKiByZWdfbGluZV9sYnIJCUZBTFNFIG9yIFRSVUUJCUZBTFNFCisgKi8KK3N0YXRpYyByZWdtYXRjaF9UCSpyZWdfbWF0Y2g7CitzdGF0aWMgcmVnbW1hdGNoX1QJKnJlZ19tbWF0Y2g7CitzdGF0aWMgY2hhcl91CQkqKnJlZ19zdGFydHAgPSBOVUxMOworc3RhdGljIGNoYXJfdQkJKipyZWdfZW5kcCA9IE5VTEw7CitzdGF0aWMgbHBvc19UCQkqcmVnX3N0YXJ0cG9zID0gTlVMTDsKK3N0YXRpYyBscG9zX1QJCSpyZWdfZW5kcG9zID0gTlVMTDsKK3N0YXRpYyB3aW5fVAkJKnJlZ193aW47CitzdGF0aWMgYnVmX1QJCSpyZWdfYnVmOworc3RhdGljIGxpbmVucl9UCQlyZWdfZmlyc3RsbnVtOworc3RhdGljIGxpbmVucl9UCQlyZWdfbWF4bGluZTsKK3N0YXRpYyBpbnQJCXJlZ19saW5lX2xicjsJICAgIC8qICJcbiIgaW4gc3RyaW5nIGlzIGxpbmUgYnJlYWsgKi8KKworLyoKKyAqIEdldCBwb2ludGVyIHRvIHRoZSBsaW5lICJsbnVtIiwgd2hpY2ggaXMgcmVsYXRpdmUgdG8gInJlZ19maXJzdGxudW0iLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCityZWdfZ2V0bGluZShsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgLyogd2hlbiBsb29raW5nIGJlaGluZCBmb3IgYSBtYXRjaC9uby1tYXRjaCBsbnVtIGlzIG5lZ2F0aXZlLiAgQnV0IHdlCisgICAgICogY2FuJ3QgZ28gYmVmb3JlIGxpbmUgMSAqLworICAgIGlmIChyZWdfZmlyc3RsbnVtICsgbG51bSA8IDEpCisJcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1sX2dldF9idWYocmVnX2J1ZiwgcmVnX2ZpcnN0bG51bSArIGxudW0sIEZBTFNFKTsKK30KKworc3RhdGljIHJlZ3NhdmVfVCBiZWhpbmRfcG9zOworCisjaWZkZWYgRkVBVF9TWU5fSEwKK3N0YXRpYyBjaGFyX3UJKnJlZ19zdGFydHpwW05TVUJFWFBdOwkvKiBXb3Jrc3BhY2UgdG8gbWFyayBiZWdpbm5pbmcgKi8KK3N0YXRpYyBjaGFyX3UJKnJlZ19lbmR6cFtOU1VCRVhQXTsJLyogICBhbmQgZW5kIG9mIFx6KC4uLlwpIG1hdGNoZXMgKi8KK3N0YXRpYyBscG9zX1QJcmVnX3N0YXJ0enBvc1tOU1VCRVhQXTsJLyogaWRlbSwgYmVnaW5uaW5nIHBvcyAqLworc3RhdGljIGxwb3NfVAlyZWdfZW5kenBvc1tOU1VCRVhQXTsJLyogaWRlbSwgZW5kIHBvcyAqLworI2VuZGlmCisKKy8qIFRSVUUgaWYgdXNpbmcgbXVsdGktbGluZSByZWdleHAuICovCisjZGVmaW5lIFJFR19NVUxUSQkocmVnX21hdGNoID09IE5VTEwpCisKKy8qCisgKiBNYXRjaCBhIHJlZ2V4cCBhZ2FpbnN0IGEgc3RyaW5nLgorICogInJtcC0+cmVncHJvZyIgaXMgYSBjb21waWxlZCByZWdleHAgYXMgcmV0dXJuZWQgYnkgdmltX3JlZ2NvbXAoKS4KKyAqIFVzZXMgY3VyYnVmIGZvciBsaW5lIGNvdW50IGFuZCAnaXNrZXl3b3JkJy4KKyAqCisgKiBSZXR1cm4gVFJVRSBpZiB0aGVyZSBpcyBhIG1hdGNoLCBGQUxTRSBpZiBub3QuCisgKi8KKyAgICBpbnQKK3ZpbV9yZWdleGVjKHJtcCwgbGluZSwgY29sKQorICAgIHJlZ21hdGNoX1QJKnJtcDsKKyAgICBjaGFyX3UJKmxpbmU7CS8qIHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0ICovCisgICAgY29sbnJfVAljb2w7CS8qIGNvbHVtbiB0byBzdGFydCBsb29raW5nIGZvciBtYXRjaCAqLworeworICAgIHJlZ19tYXRjaCA9IHJtcDsKKyAgICByZWdfbW1hdGNoID0gTlVMTDsKKyAgICByZWdfbWF4bGluZSA9IDA7CisgICAgcmVnX2xpbmVfbGJyID0gRkFMU0U7CisgICAgcmVnX3dpbiA9IE5VTEw7CisgICAgaXJlZ19pYyA9IHJtcC0+cm1faWM7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlyZWdfaWNvbWJpbmUgPSBGQUxTRTsKKyNlbmRpZgorICAgIHJldHVybiAodmltX3JlZ2V4ZWNfYm90aChsaW5lLCBjb2wpICE9IDApOworfQorCisjaWYgZGVmaW5lZChGRUFUX01PRElGWV9GTkFNRSkgfHwgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogTGlrZSB2aW1fcmVnZXhlYygpLCBidXQgY29uc2lkZXIgYSAiXG4iIGluICJsaW5lIiB0byBiZSBhIGxpbmUgYnJlYWsuCisgKi8KKyAgICBpbnQKK3ZpbV9yZWdleGVjX25sKHJtcCwgbGluZSwgY29sKQorICAgIHJlZ21hdGNoX1QJKnJtcDsKKyAgICBjaGFyX3UJKmxpbmU7CS8qIHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0ICovCisgICAgY29sbnJfVAljb2w7CS8qIGNvbHVtbiB0byBzdGFydCBsb29raW5nIGZvciBtYXRjaCAqLworeworICAgIHJlZ19tYXRjaCA9IHJtcDsKKyAgICByZWdfbW1hdGNoID0gTlVMTDsKKyAgICByZWdfbWF4bGluZSA9IDA7CisgICAgcmVnX2xpbmVfbGJyID0gVFJVRTsKKyAgICByZWdfd2luID0gTlVMTDsKKyAgICBpcmVnX2ljID0gcm1wLT5ybV9pYzsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaXJlZ19pY29tYmluZSA9IEZBTFNFOworI2VuZGlmCisgICAgcmV0dXJuICh2aW1fcmVnZXhlY19ib3RoKGxpbmUsIGNvbCkgIT0gMCk7Cit9CisjZW5kaWYKKworLyoKKyAqIE1hdGNoIGEgcmVnZXhwIGFnYWluc3QgbXVsdGlwbGUgbGluZXMuCisgKiAicm1wLT5yZWdwcm9nIiBpcyBhIGNvbXBpbGVkIHJlZ2V4cCBhcyByZXR1cm5lZCBieSB2aW1fcmVnY29tcCgpLgorICogVXNlcyBjdXJidWYgZm9yIGxpbmUgY291bnQgYW5kICdpc2tleXdvcmQnLgorICoKKyAqIFJldHVybiB6ZXJvIGlmIHRoZXJlIGlzIG5vIG1hdGNoLiAgUmV0dXJuIG51bWJlciBvZiBsaW5lcyBjb250YWluZWQgaW4gdGhlCisgKiBtYXRjaCBvdGhlcndpc2UuCisgKi8KKyAgICBsb25nCit2aW1fcmVnZXhlY19tdWx0aShybXAsIHdpbiwgYnVmLCBsbnVtLCBjb2wpCisgICAgcmVnbW1hdGNoX1QJKnJtcDsKKyAgICB3aW5fVAkqd2luOwkJLyogd2luZG93IGluIHdoaWNoIHRvIHNlYXJjaCBvciBOVUxMICovCisgICAgYnVmX1QJKmJ1ZjsJCS8qIGJ1ZmZlciBpbiB3aGljaCB0byBzZWFyY2ggKi8KKyAgICBsaW5lbnJfVAlsbnVtOwkJLyogbnIgb2YgbGluZSB0byBzdGFydCBsb29raW5nIGZvciBtYXRjaCAqLworICAgIGNvbG5yX1QJY29sOwkJLyogY29sdW1uIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIG1hdGNoICovCit7CisgICAgbG9uZwlyOworICAgIGJ1Zl9UCSpzYXZlX2N1cmJ1ZiA9IGN1cmJ1ZjsKKworICAgIHJlZ19tYXRjaCA9IE5VTEw7CisgICAgcmVnX21tYXRjaCA9IHJtcDsKKyAgICByZWdfYnVmID0gYnVmOworICAgIHJlZ193aW4gPSB3aW47CisgICAgcmVnX2ZpcnN0bG51bSA9IGxudW07CisgICAgcmVnX21heGxpbmUgPSByZWdfYnVmLT5iX21sLm1sX2xpbmVfY291bnQgLSBsbnVtOworICAgIHJlZ19saW5lX2xiciA9IEZBTFNFOworICAgIGlyZWdfaWMgPSBybXAtPnJtbV9pYzsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaXJlZ19pY29tYmluZSA9IEZBTFNFOworI2VuZGlmCisKKyAgICAvKiBOZWVkIHRvIHN3aXRjaCB0byBidWZmZXIgImJ1ZiIgdG8gbWFrZSB2aW1faXN3b3JkYygpIHdvcmsuICovCisgICAgY3VyYnVmID0gYnVmOworICAgIHIgPSB2aW1fcmVnZXhlY19ib3RoKE5VTEwsIGNvbCk7CisgICAgY3VyYnVmID0gc2F2ZV9jdXJidWY7CisKKyAgICByZXR1cm4gcjsKK30KKworLyoKKyAqIE1hdGNoIGEgcmVnZXhwIGFnYWluc3QgYSBzdHJpbmcgKCJsaW5lIiBwb2ludHMgdG8gdGhlIHN0cmluZykgb3IgbXVsdGlwbGUKKyAqIGxpbmVzICgibGluZSIgaXMgTlVMTCwgdXNlIHJlZ19nZXRsaW5lKCkpLgorICovCisjaWZkZWYgSEFWRV9TRVRKTVBfSAorICAgIHN0YXRpYyBsb25nCit2aW1fcmVnZXhlY19ib3RoKGxpbmVfYXJnLCBjb2xfYXJnKQorICAgIGNoYXJfdQkqbGluZV9hcmc7CisgICAgY29sbnJfVAljb2xfYXJnOwkvKiBjb2x1bW4gdG8gc3RhcnQgbG9va2luZyBmb3IgbWF0Y2ggKi8KKyNlbHNlCisgICAgc3RhdGljIGxvbmcKK3ZpbV9yZWdleGVjX2JvdGgobGluZSwgY29sKQorICAgIGNoYXJfdQkqbGluZTsKKyAgICBjb2xucl9UCWNvbDsJCS8qIGNvbHVtbiB0byBzdGFydCBsb29raW5nIGZvciBtYXRjaCAqLworI2VuZGlmCit7CisgICAgcmVncHJvZ19UCSpwcm9nOworICAgIGNoYXJfdQkqczsKKyAgICBsb25nCXJldHZhbDsKKyNpZmRlZiBIQVZFX1NFVEpNUF9ICisgICAgY2hhcl91CSpsaW5lOworICAgIGNvbG5yX1QJY29sOworI2VuZGlmCisKKyAgICByZWdfdG9mcmVlID0gTlVMTDsKKworI2lmZGVmIEhBVkVfVFJZX0VYQ0VQVAorICAgIF9fdHJ5CisgICAgeworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NFVEpNUF9ICisgICAgLyoKKyAgICAgKiBNYXRjaGluZyB3aXRoIGEgcmVnZXhwIG1heSBjYXVzZSBhIHZlcnkgZGVlcCByZWN1cnNpdmUgY2FsbCBvZgorICAgICAqIHJlZ21hdGNoKCkuICBWaW0gd2lsbCBjcmFzaCB3aGVuIHJ1bm5pbmcgb3V0IG9mIHN0YWNrIHNwYWNlLiAgQ2F0Y2gKKyAgICAgKiB0aGlzIGhlcmUgaWYgdGhlIHN5c3RlbSBzdXBwb3J0cyBpdC4KKyAgICAgKi8KKyAgICBtY2hfc3RhcnRqbXAoKTsKKyAgICBpZiAoU0VUSk1QKGxjX2p1bXBfZW52KSAhPSAwKQorICAgIHsKKwltY2hfZGlkam1wKCk7CisjIGlmZGVmIFNJR0hBU0FSRworCWlmIChsY19zaWduYWwgIT0gU0lHSU5UKQorIyBlbmRpZgorCSAgICBFTVNHKF8oIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IikpOworCXJldHZhbCA9IDBMOworCWdvdG8gdGhlZW5kOworICAgIH0KKworICAgIC8qIFRyaWNrIHRvIGF2b2lkICJtaWdodCBiZSBjbG9iYmVyZWQgYnkgYGxvbmdqbXAnIiB3YXJuaW5nIGZyb20gZ2NjLiAqLworICAgIGxpbmUgPSBsaW5lX2FyZzsKKyAgICBjb2wgPSBjb2xfYXJnOworI2VuZGlmCisgICAgcmV0dmFsID0gMEw7CisKKyAgICBpZiAoUkVHX01VTFRJKQorICAgIHsKKwlwcm9nID0gcmVnX21tYXRjaC0+cmVncHJvZzsKKwlsaW5lID0gcmVnX2dldGxpbmUoKGxpbmVucl9UKTApOworCXJlZ19zdGFydHBvcyA9IHJlZ19tbWF0Y2gtPnN0YXJ0cG9zOworCXJlZ19lbmRwb3MgPSByZWdfbW1hdGNoLT5lbmRwb3M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJcHJvZyA9IHJlZ19tYXRjaC0+cmVncHJvZzsKKwlyZWdfc3RhcnRwID0gcmVnX21hdGNoLT5zdGFydHA7CisJcmVnX2VuZHAgPSByZWdfbWF0Y2gtPmVuZHA7CisgICAgfQorCisgICAgLyogQmUgcGFyYW5vaWQuLi4gKi8KKyAgICBpZiAocHJvZyA9PSBOVUxMIHx8IGxpbmUgPT0gTlVMTCkKKyAgICB7CisJRU1TRyhfKGVfbnVsbCkpOworCWdvdG8gdGhlZW5kOworICAgIH0KKworICAgIC8qIENoZWNrIHZhbGlkaXR5IG9mIHByb2dyYW0uICovCisgICAgaWYgKHByb2dfbWFnaWNfd3JvbmcoKSkKKwlnb3RvIHRoZWVuZDsKKworICAgIC8qIElmIHBhdHRlcm4gY29udGFpbnMgIlxjIiBvciAiXEMiOiBvdmVycnVsZSB2YWx1ZSBvZiBpcmVnX2ljICovCisgICAgaWYgKHByb2ctPnJlZ2ZsYWdzICYgUkZfSUNBU0UpCisJaXJlZ19pYyA9IFRSVUU7CisgICAgZWxzZSBpZiAocHJvZy0+cmVnZmxhZ3MgJiBSRl9OT0lDQVNFKQorCWlyZWdfaWMgPSBGQUxTRTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICAvKiBJZiBwYXR0ZXJuIGNvbnRhaW5zICJcWiIgb3ZlcnJ1bGUgdmFsdWUgb2YgaXJlZ19pY29tYmluZSAqLworICAgIGlmIChwcm9nLT5yZWdmbGFncyAmIFJGX0lDT01CSU5FKQorCWlyZWdfaWNvbWJpbmUgPSBUUlVFOworI2VuZGlmCisKKyAgICAvKiBJZiB0aGVyZSBpcyBhICJtdXN0IGFwcGVhciIgc3RyaW5nLCBsb29rIGZvciBpdC4gKi8KKyAgICBpZiAocHJvZy0+cmVnbXVzdCAhPSBOVUxMKQorICAgIHsKKwlpbnQgYzsKKworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCSAgICBjID0gKCptYl9wdHIyY2hhcikocHJvZy0+cmVnbXVzdCk7CisJZWxzZQorI2VuZGlmCisJICAgIGMgPSAqcHJvZy0+cmVnbXVzdDsKKwlzID0gbGluZSArIGNvbDsKKwl3aGlsZSAoKHMgPSBjc3RyY2hyKHMsIGMpKSAhPSBOVUxMKQorCXsKKwkgICAgaWYgKGNzdHJuY21wKHMsIHByb2ctPnJlZ211c3QsICZwcm9nLT5yZWdtbGVuKSA9PSAwKQorCQlicmVhazsJCS8qIEZvdW5kIGl0LiAqLworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJcyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHMpOworCSAgICBlbHNlCisjZW5kaWYKKwkJKytzOworCX0KKwlpZiAocyA9PSBOVUxMKQkJLyogTm90IHByZXNlbnQuICovCisJICAgIGdvdG8gdGhlZW5kOworICAgIH0KKworICAgIHJlZ2xpbmUgPSBsaW5lOworICAgIHJlZ2xudW0gPSAwOworICAgIG91dF9vZl9zdGFjayA9IEZBTFNFOworCisgICAgLyogU2ltcGxlc3QgY2FzZTogQW5jaG9yZWQgbWF0Y2ggbmVlZCBiZSB0cmllZCBvbmx5IG9uY2UuICovCisgICAgaWYgKHByb2ctPnJlZ2FuY2gpCisgICAgeworCWludAljOworCisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIGMgPSAoKm1iX3B0cjJjaGFyKShyZWdsaW5lICsgY29sKTsKKwllbHNlCisjZW5kaWYKKwkgICAgYyA9IHJlZ2xpbmVbY29sXTsKKwlpZiAocHJvZy0+cmVnc3RhcnQgPT0gTlVMCisJCXx8IHByb2ctPnJlZ3N0YXJ0ID09IGMKKwkJfHwgKGlyZWdfaWMgJiYgKCgKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkoZW5jX3V0ZjggJiYgdXRmX2ZvbGQocHJvZy0+cmVnc3RhcnQpID09IHV0Zl9mb2xkKGMpKSkKKwkJCXx8IChjIDwgMjU1ICYmIHByb2ctPnJlZ3N0YXJ0IDwgMjU1ICYmCisjZW5kaWYKKwkJCSAgICBUT0xPV0VSX0xPQyhwcm9nLT5yZWdzdGFydCkgPT0gVE9MT1dFUl9MT0MoYykpKSkpCisJICAgIHJldHZhbCA9IHJlZ3RyeShwcm9nLCBjb2wpOworCWVsc2UKKwkgICAgcmV0dmFsID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBNZXNzeSBjYXNlczogIHVuYW5jaG9yZWQgbWF0Y2guICovCisJd2hpbGUgKCFnb3RfaW50ICYmICFvdXRfb2Zfc3RhY2spCisJeworCSAgICBpZiAocHJvZy0+cmVnc3RhcnQgIT0gTlVMKQorCSAgICB7CisJCS8qIFNraXAgdW50aWwgdGhlIGNoYXIgd2Uga25vdyBpdCBtdXN0IHN0YXJ0IHdpdGguICovCisJCXMgPSBjc3RyY2hyKHJlZ2xpbmUgKyBjb2wsIHByb2ctPnJlZ3N0YXJ0KTsKKwkJaWYgKHMgPT0gTlVMTCkKKwkJeworCQkgICAgcmV0dmFsID0gMDsKKwkJICAgIGJyZWFrOworCQl9CisJCWNvbCA9IChpbnQpKHMgLSByZWdsaW5lKTsKKwkgICAgfQorCisJICAgIHJldHZhbCA9IHJlZ3RyeShwcm9nLCBjb2wpOworCSAgICBpZiAocmV0dmFsID4gMCkKKwkJYnJlYWs7CisKKwkgICAgLyogaWYgbm90IGN1cnJlbnRseSBvbiB0aGUgZmlyc3QgbGluZSwgZ2V0IGl0IGFnYWluICovCisJICAgIGlmIChyZWdsbnVtICE9IDApCisJICAgIHsKKwkJcmVnbGluZSA9IHJlZ19nZXRsaW5lKChsaW5lbnJfVCkwKTsKKwkJcmVnbG51bSA9IDA7CisJICAgIH0KKwkgICAgaWYgKHJlZ2xpbmVbY29sXSA9PSBOVUwpCisJCWJyZWFrOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJY29sICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocmVnbGluZSArIGNvbCk7CisJICAgIGVsc2UKKyNlbmRpZgorCQkrK2NvbDsKKwl9CisgICAgfQorCisgICAgaWYgKG91dF9vZl9zdGFjaykKKwlFTVNHKF8oIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIpKTsKKworI2lmZGVmIEhBVkVfVFJZX0VYQ0VQVAorICAgIH0KKyAgICBfX2V4Y2VwdChFWENFUFRJT05fRVhFQ1VURV9IQU5ETEVSKQorICAgIHsKKwlpZiAoR2V0RXhjZXB0aW9uQ29kZSgpID09IEVYQ0VQVElPTl9TVEFDS19PVkVSRkxPVykKKwl7CisJICAgIFJFU0VUU1RLT0ZMVygpOworCSAgICBFTVNHKF8oIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIpKTsKKwl9CisJZWxzZQorCSAgICBFTVNHKF8oIkUzNjE6IENyYXNoIGludGVyY2VwdGVkOyByZWdleHAgdG9vIGNvbXBsZXg/IikpOworCXJldHZhbCA9IDBMOworICAgIH0KKyNlbmRpZgorCit0aGVlbmQ6CisgICAgLyogRGlkbid0IGZpbmQgYSBtYXRjaC4gKi8KKyAgICB2aW1fZnJlZShyZWdfdG9mcmVlKTsKKyNpZmRlZiBIQVZFX1NFVEpNUF9ICisgICAgbWNoX2VuZGptcCgpOworI2VuZGlmCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIEZFQVRfU1lOX0hMCitzdGF0aWMgcmVnX2V4dG1hdGNoX1QgKm1ha2VfZXh0bWF0Y2ggX19BUkdTKCh2b2lkKSk7CisKKy8qCisgKiBDcmVhdGUgYSBuZXcgZXh0bWF0Y2ggYW5kIG1hcmsgaXQgYXMgcmVmZXJlbmNlZCBvbmNlLgorICovCisgICAgc3RhdGljIHJlZ19leHRtYXRjaF9UICoKK21ha2VfZXh0bWF0Y2goKQoreworICAgIHJlZ19leHRtYXRjaF9UCSplbTsKKworICAgIGVtID0gKHJlZ19leHRtYXRjaF9UICopYWxsb2NfY2xlYXIoKHVuc2lnbmVkKXNpemVvZihyZWdfZXh0bWF0Y2hfVCkpOworICAgIGlmIChlbSAhPSBOVUxMKQorCWVtLT5yZWZjbnQgPSAxOworICAgIHJldHVybiBlbTsKK30KKworLyoKKyAqIEFkZCBhIHJlZmVyZW5jZSB0byBhbiBleHRtYXRjaC4KKyAqLworICAgIHJlZ19leHRtYXRjaF9UICoKK3JlZl9leHRtYXRjaChlbSkKKyAgICByZWdfZXh0bWF0Y2hfVAkqZW07Cit7CisgICAgaWYgKGVtICE9IE5VTEwpCisJZW0tPnJlZmNudCsrOworICAgIHJldHVybiBlbTsKK30KKworLyoKKyAqIFJlbW92ZSBhIHJlZmVyZW5jZSB0byBhbiBleHRtYXRjaC4gIElmIHRoZXJlIGFyZSBubyByZWZlcmVuY2VzIGxlZnQsIGZyZWUKKyAqIHRoZSBpbmZvLgorICovCisgICAgdm9pZAordW5yZWZfZXh0bWF0Y2goZW0pCisgICAgcmVnX2V4dG1hdGNoX1QJKmVtOworeworICAgIGludCBpOworCisgICAgaWYgKGVtICE9IE5VTEwgJiYgLS1lbS0+cmVmY250IDw9IDApCisgICAgeworCWZvciAoaSA9IDA7IGkgPCBOU1VCRVhQOyArK2kpCisJICAgIHZpbV9mcmVlKGVtLT5tYXRjaGVzW2ldKTsKKwl2aW1fZnJlZShlbSk7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiByZWd0cnkgLSB0cnkgbWF0Y2ggb2YgInByb2ciIHdpdGggYXQgcmVnbGluZVsiY29sIl0uCisgKiBSZXR1cm5zIDAgZm9yIGZhaWx1cmUsIG51bWJlciBvZiBsaW5lcyBjb250YWluZWQgaW4gdGhlIG1hdGNoIG90aGVyd2lzZS4KKyAqLworICAgIHN0YXRpYyBsb25nCityZWd0cnkocHJvZywgY29sKQorICAgIHJlZ3Byb2dfVAkqcHJvZzsKKyAgICBjb2xucl9UCWNvbDsKK3sKKyAgICByZWdpbnB1dCA9IHJlZ2xpbmUgKyBjb2w7CisgICAgbmVlZF9jbGVhcl9zdWJleHByID0gVFJVRTsKKyNpZmRlZiBGRUFUX1NZTl9ITAorICAgIC8qIENsZWFyIHRoZSBleHRlcm5hbCBtYXRjaCBzdWJwb2ludGVycyBpZiBuZWNlc3NhcnkuICovCisgICAgaWYgKHByb2ctPnJlZ2hhc3ogPT0gUkVYX1NFVCkKKwluZWVkX2NsZWFyX3pzdWJleHByID0gVFJVRTsKKyNlbmRpZgorCisgICAgaWYgKHJlZ21hdGNoKHByb2ctPnByb2dyYW0gKyAxKSkKKyAgICB7CisJY2xlYW51cF9zdWJleHByKCk7CisJaWYgKFJFR19NVUxUSSkKKwl7CisJICAgIGlmIChyZWdfc3RhcnRwb3NbMF0ubG51bSA8IDApCisJICAgIHsKKwkJcmVnX3N0YXJ0cG9zWzBdLmxudW0gPSAwOworCQlyZWdfc3RhcnRwb3NbMF0uY29sID0gY29sOworCSAgICB9CisJICAgIGlmIChyZWdfZW5kcG9zWzBdLmxudW0gPCAwKQorCSAgICB7CisJCXJlZ19lbmRwb3NbMF0ubG51bSA9IHJlZ2xudW07CisJCXJlZ19lbmRwb3NbMF0uY29sID0gKGludCkocmVnaW5wdXQgLSByZWdsaW5lKTsKKwkgICAgfQorCSAgICBlbHNlCisJCS8qIFVzZSBsaW5lIG51bWJlciBvZiAiXHplIi4gKi8KKwkJcmVnbG51bSA9IHJlZ19lbmRwb3NbMF0ubG51bTsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKHJlZ19zdGFydHBbMF0gPT0gTlVMTCkKKwkJcmVnX3N0YXJ0cFswXSA9IHJlZ2xpbmUgKyBjb2w7CisJICAgIGlmIChyZWdfZW5kcFswXSA9PSBOVUxMKQorCQlyZWdfZW5kcFswXSA9IHJlZ2lucHV0OworCX0KKyNpZmRlZiBGRUFUX1NZTl9ITAorCS8qIFBhY2thZ2UgYW55IGZvdW5kIFx6KC4uLlwpIG1hdGNoZXMgZm9yIGV4cG9ydC4gRGVmYXVsdCBpcyBub25lLiAqLworCXVucmVmX2V4dG1hdGNoKHJlX2V4dG1hdGNoX291dCk7CisJcmVfZXh0bWF0Y2hfb3V0ID0gTlVMTDsKKworCWlmIChwcm9nLT5yZWdoYXN6ID09IFJFWF9TRVQpCisJeworCSAgICBpbnQJCWk7CisKKwkgICAgY2xlYW51cF96c3ViZXhwcigpOworCSAgICByZV9leHRtYXRjaF9vdXQgPSBtYWtlX2V4dG1hdGNoKCk7CisJICAgIGZvciAoaSA9IDA7IGkgPCBOU1VCRVhQOyBpKyspCisJICAgIHsKKwkJaWYgKFJFR19NVUxUSSkKKwkJeworCQkgICAgLyogT25seSBhY2NlcHQgc2luZ2xlIGxpbmUgbWF0Y2hlcy4gKi8KKwkJICAgIGlmIChyZWdfc3RhcnR6cG9zW2ldLmxudW0gPj0gMAorCQkJICAgICYmIHJlZ19lbmR6cG9zW2ldLmxudW0gPT0gcmVnX3N0YXJ0enBvc1tpXS5sbnVtKQorCQkJcmVfZXh0bWF0Y2hfb3V0LT5tYXRjaGVzW2ldID0KKwkJCSAgICB2aW1fc3RybnNhdmUocmVnX2dldGxpbmUocmVnX3N0YXJ0enBvc1tpXS5sbnVtKQorCQkJCQkJICAgICAgICsgcmVnX3N0YXJ0enBvc1tpXS5jb2wsCisJCQkJICAgIHJlZ19lbmR6cG9zW2ldLmNvbCAtIHJlZ19zdGFydHpwb3NbaV0uY29sKTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGlmIChyZWdfc3RhcnR6cFtpXSAhPSBOVUxMICYmIHJlZ19lbmR6cFtpXSAhPSBOVUxMKQorCQkJcmVfZXh0bWF0Y2hfb3V0LT5tYXRjaGVzW2ldID0KKwkJCSAgICB2aW1fc3RybnNhdmUocmVnX3N0YXJ0enBbaV0sCisJCQkJICAgIChpbnQpKHJlZ19lbmR6cFtpXSAtIHJlZ19zdGFydHpwW2ldKSk7CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZgorCXJldHVybiAxICsgcmVnbG51bTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBGRUFUX01CWVRFCisvKiBtdWx0aS1ieXRlOiBhZHZhbmNlIHJlZ2lucHV0IHdpdGggYSBmdW5jdGlvbiAqLworIyBkZWZpbmUgQURWQU5DRV9SRUdJTlBVVCgpIGFkdmFuY2VfcmVnaW5wdXQoKQorCitzdGF0aWMgdm9pZCBhZHZhbmNlX3JlZ2lucHV0IF9fQVJHUygodm9pZCkpOworc3RhdGljIGludCByZWdfcHJldl9jbGFzcyBfX0FSR1MoKHZvaWQpKTsKKworICAgIHN0YXRpYyB2b2lkCithZHZhbmNlX3JlZ2lucHV0KCkKK3sKKyAgICBpZiAoaGFzX21ieXRlKQorCXJlZ2lucHV0ICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocmVnaW5wdXQpOworICAgIGVsc2UKKwkrK3JlZ2lucHV0OworfQorCisvKgorICogR2V0IGNsYXNzIG9mIHByZXZpb3VzIGNoYXJhY3Rlci4KKyAqLworICAgIHN0YXRpYyBpbnQKK3JlZ19wcmV2X2NsYXNzKCkKK3sKKyAgICBpZiAocmVnaW5wdXQgPiByZWdsaW5lKQorCXJldHVybiBtYl9nZXRfY2xhc3MocmVnaW5wdXQgLSAxCisJCQkJICAgICAtICgqbWJfaGVhZF9vZmYpKHJlZ2xpbmUsIHJlZ2lucHV0IC0gMSkpOworICAgIHJldHVybiAtMTsKK30KKworI2Vsc2UKKy8qIE5vIG11bHRpLWJ5dGU6IEl0J3MgdG9vIHNpbXBsZSB0byBtYWtlIGEgZnVuY3Rpb24gZm9yLiAqLworIyBkZWZpbmUgQURWQU5DRV9SRUdJTlBVVCgpICsrcmVnaW5wdXQKKyNlbmRpZgorCisvKgorICogVGhlIGFyZ3VtZW50cyBmcm9tIEJSQUNFX0xJTUlUUyBhcmUgc3RvcmVkIGhlcmUuICBUaGV5IGFyZSBhY3R1YWxseSBsb2NhbAorICogdG8gcmVnbWF0Y2goKSwgYnV0IHRoZXkgYXJlIGhlcmUgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2Ygc3RhY2sgc3BhY2UgdXNlZAorICogKGl0IGNhbiBiZSBjYWxsZWQgcmVjdXJzaXZlbHkgbWFueSB0aW1lcykuCisgKi8KK3N0YXRpYyBsb25nCWJsX21pbnZhbDsKK3N0YXRpYyBsb25nCWJsX21heHZhbDsKKworLyoKKyAqIHJlZ21hdGNoIC0gbWFpbiBtYXRjaGluZyByb3V0aW5lCisgKgorICogQ29uY2VwdHVhbGx5IHRoZSBzdHJhdGVneSBpcyBzaW1wbGU6IENoZWNrIHRvIHNlZSB3aGV0aGVyIHRoZSBjdXJyZW50CisgKiBub2RlIG1hdGNoZXMsIGNhbGwgc2VsZiByZWN1cnNpdmVseSB0byBzZWUgd2hldGhlciB0aGUgcmVzdCBtYXRjaGVzLAorICogYW5kIHRoZW4gYWN0IGFjY29yZGluZ2x5LiAgSW4gcHJhY3RpY2Ugd2UgbWFrZSBzb21lIGVmZm9ydCB0byBhdm9pZAorICogcmVjdXJzaW9uLCBpbiBwYXJ0aWN1bGFyIGJ5IGdvaW5nIHRocm91Z2ggIm9yZGluYXJ5IiBub2RlcyAodGhhdCBkb24ndAorICogbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIHJlc3Qgb2YgdGhlIG1hdGNoIGZhaWxlZCkgYnkgYSBsb29wIGluc3RlYWQgb2YKKyAqIGJ5IHJlY3Vyc2lvbi4KKyAqCisgKiBSZXR1cm5zIFRSVUUgd2hlbiB0aGVyZSBpcyBhIG1hdGNoLiAgTGVhdmVzIHJlZ2lucHV0IGFuZCByZWdsbnVtIGp1c3QgYWZ0ZXIKKyAqIHRoZSBsYXN0IG1hdGNoZWQgY2hhcmFjdGVyLgorICogUmV0dXJucyBGQUxTRSB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoLiAgTGVhdmVzIHJlZ2lucHV0IGFuZCByZWdsbnVtIGluIGFuCisgKiB1bmRlZmluZWQgc3RhdGUhCisgKi8KKyAgICBzdGF0aWMgaW50CityZWdtYXRjaChzY2FuKQorICAgIGNoYXJfdQkqc2NhbjsJCS8qIEN1cnJlbnQgbm9kZS4gKi8KK3sKKyAgICBjaGFyX3UJKm5leHQ7CQkvKiBOZXh0IG5vZGUuICovCisgICAgaW50CQlvcDsKKyAgICBpbnQJCWM7CisKKyNpZmRlZiBIQVZFX0dFVFJMSU1JVAorICAgIC8qIENoZWNrIGlmIHdlIGFyZSBydW5uaW5nIG91dCBvZiBzdGFjayBzcGFjZS4gIENvdWxkIGJlIGNhdXNlZCBieQorICAgICAqIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgb3Vyc2VsdmVzLiAqLworICAgIGlmIChvdXRfb2Zfc3RhY2sgfHwgbWNoX3N0YWNrY2hlY2soKGNoYXIgKikmb3ApID09IEZBSUwpCisgICAgeworCW91dF9vZl9zdGFjayA9IFRSVUU7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKyNlbmRpZgorCisgICAgLyogU29tZSBwYXR0ZXJucyBteSBjYXVzZSBhIGxvbmcgdGltZSB0byBtYXRjaCwgZXZlbiB0aG91Z2ggdGhleSBhcmUgbm90CisgICAgICogaWxsZWdhbC4gIEUuZy4sICJcKFthLXpdXCtcKVwrUSIuICBBbGxvdyBicmVha2luZyB0aGVtIHdpdGggQ1RSTC1DLiAqLworICAgIGZhc3RfYnJlYWtjaGVjaygpOworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoc2NhbiAhPSBOVUxMICYmIHJlZ25hcnJhdGUpCisgICAgeworCW1jaF9lcnJtc2cocmVncHJvcChzY2FuKSk7CisJbWNoX2Vycm1zZygiKFxuIik7CisgICAgfQorI2VuZGlmCisgICAgd2hpbGUgKHNjYW4gIT0gTlVMTCkKKyAgICB7CisJaWYgKGdvdF9pbnQgfHwgb3V0X29mX3N0YWNrKQorCSAgICByZXR1cm4gRkFMU0U7CisjaWZkZWYgREVCVUcKKwlpZiAocmVnbmFycmF0ZSkKKwl7CisJICAgIG1jaF9lcnJtc2cocmVncHJvcChzY2FuKSk7CisJICAgIG1jaF9lcnJtc2coIi4uLlxuIik7CisjIGlmZGVmIEZFQVRfU1lOX0hMCisJICAgIGlmIChyZV9leHRtYXRjaF9pbiAhPSBOVUxMKQorCSAgICB7CisJCWludCBpOworCisJCW1jaF9lcnJtc2coXygiRXh0ZXJuYWwgc3VibWF0Y2hlczpcbiIpKTsKKwkJZm9yIChpID0gMDsgaSA8IE5TVUJFWFA7IGkrKykKKwkJeworCQkgICAgbWNoX2Vycm1zZygiICAgIFwiIik7CisJCSAgICBpZiAocmVfZXh0bWF0Y2hfaW4tPm1hdGNoZXNbaV0gIT0gTlVMTCkKKwkJCW1jaF9lcnJtc2cocmVfZXh0bWF0Y2hfaW4tPm1hdGNoZXNbaV0pOworCQkgICAgbWNoX2Vycm1zZygiXCJcbiIpOworCQl9CisJICAgIH0KKyMgZW5kaWYKKwl9CisjZW5kaWYKKwluZXh0ID0gcmVnbmV4dChzY2FuKTsKKworCW9wID0gT1Aoc2Nhbik7CisJLyogQ2hlY2sgZm9yIGNoYXJhY3RlciBjbGFzcyB3aXRoIE5MIGFkZGVkLiAqLworCWlmIChXSVRIX05MKG9wKSAmJiAqcmVnaW5wdXQgPT0gTlVMICYmIHJlZ2xudW0gPCByZWdfbWF4bGluZSkKKwl7CisJICAgIHJlZ19uZXh0bGluZSgpOworCX0KKwllbHNlIGlmIChyZWdfbGluZV9sYnIgJiYgV0lUSF9OTChvcCkgJiYgKnJlZ2lucHV0ID09ICdcbicpCisJeworCSAgICBBRFZBTkNFX1JFR0lOUFVUKCk7CisJfQorCWVsc2UKKwl7CisJICBpZiAoV0lUSF9OTChvcCkpCisJICAgIG9wIC09IEFERF9OTDsKKyNpZmRlZiBGRUFUX01CWVRFCisJICBpZiAoaGFzX21ieXRlKQorCSAgICAgIGMgPSAoKm1iX3B0cjJjaGFyKShyZWdpbnB1dCk7CisJICBlbHNlCisjZW5kaWYKKwkgICAgICBjID0gKnJlZ2lucHV0OworCSAgc3dpdGNoIChvcCkKKwkgIHsKKwkgIGNhc2UgQk9MOgorCSAgICBpZiAocmVnaW5wdXQgIT0gcmVnbGluZSkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBicmVhazsKKworCSAgY2FzZSBFT0w6CisJICAgIGlmIChjICE9IE5VTCkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBicmVhazsKKworCSAgY2FzZSBSRV9CT0Y6CisJICAgIC8qIFBhc3NpbmcgLTEgdG8gdGhlIGdldGxpbmUoKSBmdW5jdGlvbiBwcm92aWRlZCBmb3IgdGhlIHNlYXJjaAorCSAgICAgKiBzaG91bGQgYWx3YXlzIHJldHVybiBOVUxMIGlmIHRoZSBjdXJyZW50IGxpbmUgaXMgdGhlIGZpcnN0CisJICAgICAqIGxpbmUgb2YgdGhlIGZpbGUuICovCisJICAgIGlmIChyZWdsbnVtICE9IDAgfHwgcmVnaW5wdXQgIT0gcmVnbGluZQorCQkJfHwgKFJFR19NVUxUSSAmJiByZWdfZ2V0bGluZSgobGluZW5yX1QpLTEpICE9IE5VTEwpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIGJyZWFrOworCisJICBjYXNlIFJFX0VPRjoKKwkgICAgaWYgKHJlZ2xudW0gIT0gcmVnX21heGxpbmUgfHwgYyAhPSBOVUwpCisJCXJldHVybiBGQUxTRTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgQ1VSU09SOgorCSAgICAvKiBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGluIGEgd2luZG93IGFuZCBjb21wYXJlIHRoZQorCSAgICAgKiByZWdfd2luLT53X2N1cnNvciBwb3NpdGlvbiB0byB0aGUgbWF0Y2ggcG9zaXRpb24uICovCisJICAgIGlmIChyZWdfd2luID09IE5VTEwKKwkJICAgIHx8IChyZWdsbnVtICsgcmVnX2ZpcnN0bG51bSAhPSByZWdfd2luLT53X2N1cnNvci5sbnVtKQorCQkgICAgfHwgKChjb2xucl9UKShyZWdpbnB1dCAtIHJlZ2xpbmUpICE9IHJlZ193aW4tPndfY3Vyc29yLmNvbCkpCisJCXJldHVybiBGQUxTRTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgUkVfTE5VTToKKwkgICAgaWYgKCFSRUdfTVVMVEkgfHwgIXJlX251bV9jbXAoKGxvbmdfdSkocmVnbG51bSArIHJlZ19maXJzdGxudW0pLAorCQkJCQkJCQkJc2NhbikpCisJCXJldHVybiBGQUxTRTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgUkVfQ09MOgorCSAgICBpZiAoIXJlX251bV9jbXAoKGxvbmdfdSkocmVnaW5wdXQgLSByZWdsaW5lKSArIDEsIHNjYW4pKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIGJyZWFrOworCisJICBjYXNlIFJFX1ZDT0w6CisJICAgIGlmICghcmVfbnVtX2NtcCgobG9uZ191KXdpbl9saW5ldGFic2l6ZSgKKwkJCSAgICByZWdfd2luID09IE5VTEwgPyBjdXJ3aW4gOiByZWdfd2luLAorCQkJICAgIHJlZ2xpbmUsIChjb2xucl9UKShyZWdpbnB1dCAtIHJlZ2xpbmUpKSArIDEsIHNjYW4pKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIGJyZWFrOworCisJICBjYXNlIEJPVzoJLyogXDx3b3JkOyByZWdpbnB1dCBwb2ludHMgdG8gdyAqLworCSAgICBpZiAoYyA9PSBOVUwpCS8qIENhbid0IG1hdGNoIGF0IGVuZCBvZiBsaW5lICovCisJCXJldHVybiBGQUxTRTsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJICAgIHsKKwkJaW50IHRoaXNfY2xhc3M7CisKKwkJLyogR2V0IGNsYXNzIG9mIGN1cnJlbnQgYW5kIHByZXZpb3VzIGNoYXIgKGlmIGl0IGV4aXN0cykuICovCisJCXRoaXNfY2xhc3MgPSBtYl9nZXRfY2xhc3MocmVnaW5wdXQpOworCQlpZiAodGhpc19jbGFzcyA8PSAxKQorCQkgICAgcmV0dXJuIEZBTFNFOwkvKiBub3Qgb24gYSB3b3JkIGF0IGFsbCAqLworCQlpZiAocmVnX3ByZXZfY2xhc3MoKSA9PSB0aGlzX2NsYXNzKQorCQkgICAgcmV0dXJuIEZBTFNFOwkvKiBwcmV2aW91cyBjaGFyIGlzIGluIHNhbWUgd29yZCAqLworCSAgICB9CisjZW5kaWYKKwkgICAgZWxzZQorCSAgICB7CisJCWlmICghdmltX2lzd29yZGMoYykKKwkJCXx8IChyZWdpbnB1dCA+IHJlZ2xpbmUgJiYgdmltX2lzd29yZGMocmVnaW5wdXRbLTFdKSkpCisJCSAgICByZXR1cm4gRkFMU0U7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgRU9XOgkvKiB3b3JkXD47IHJlZ2lucHV0IHBvaW50cyBhZnRlciBkICovCisJICAgIGlmIChyZWdpbnB1dCA9PSByZWdsaW5lKSAgICAvKiBDYW4ndCBtYXRjaCBhdCBzdGFydCBvZiBsaW5lICovCisJCXJldHVybiBGQUxTRTsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJICAgIHsKKwkJaW50IHRoaXNfY2xhc3MsIHByZXZfY2xhc3M7CisKKwkJLyogR2V0IGNsYXNzIG9mIGN1cnJlbnQgYW5kIHByZXZpb3VzIGNoYXIgKGlmIGl0IGV4aXN0cykuICovCisJCXRoaXNfY2xhc3MgPSBtYl9nZXRfY2xhc3MocmVnaW5wdXQpOworCQlwcmV2X2NsYXNzID0gcmVnX3ByZXZfY2xhc3MoKTsKKwkJaWYgKHRoaXNfY2xhc3MgPT0gcHJldl9jbGFzcykKKwkJICAgIHJldHVybiBGQUxTRTsKKwkJaWYgKHByZXZfY2xhc3MgPT0gMCB8fCBwcmV2X2NsYXNzID09IDEpCisJCSAgICByZXR1cm4gRkFMU0U7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkJaWYgKCF2aW1faXN3b3JkYyhyZWdpbnB1dFstMV0pKQorCQkgICAgcmV0dXJuIEZBTFNFOworCQlpZiAocmVnaW5wdXRbMF0gIT0gTlVMICYmIHZpbV9pc3dvcmRjKGMpKQorCQkgICAgcmV0dXJuIEZBTFNFOworCSAgICB9CisJICAgIGJyZWFrOyAvKiBNYXRjaGVkIHdpdGggRU9XICovCisKKwkgIGNhc2UgQU5ZOgorCSAgICBpZiAoYyA9PSBOVUwpCisJCXJldHVybiBGQUxTRTsKKwkgICAgQURWQU5DRV9SRUdJTlBVVCgpOworCSAgICBicmVhazsKKworCSAgY2FzZSBJREVOVDoKKwkgICAgaWYgKCF2aW1faXNJRGMoYykpCisJCXJldHVybiBGQUxTRTsKKwkgICAgQURWQU5DRV9SRUdJTlBVVCgpOworCSAgICBicmVhazsKKworCSAgY2FzZSBTSURFTlQ6CisJICAgIGlmIChWSU1fSVNESUdJVCgqcmVnaW5wdXQpIHx8ICF2aW1faXNJRGMoYykpCisJCXJldHVybiBGQUxTRTsKKwkgICAgQURWQU5DRV9SRUdJTlBVVCgpOworCSAgICBicmVhazsKKworCSAgY2FzZSBLV09SRDoKKwkgICAgaWYgKCF2aW1faXN3b3JkcChyZWdpbnB1dCkpCisJCXJldHVybiBGQUxTRTsKKwkgICAgQURWQU5DRV9SRUdJTlBVVCgpOworCSAgICBicmVhazsKKworCSAgY2FzZSBTS1dPUkQ6CisJICAgIGlmIChWSU1fSVNESUdJVCgqcmVnaW5wdXQpIHx8ICF2aW1faXN3b3JkcChyZWdpbnB1dCkpCisJCXJldHVybiBGQUxTRTsKKwkgICAgQURWQU5DRV9SRUdJTlBVVCgpOworCSAgICBicmVhazsKKworCSAgY2FzZSBGTkFNRToKKwkgICAgaWYgKCF2aW1faXNmaWxlYyhjKSkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBBRFZBTkNFX1JFR0lOUFVUKCk7CisJICAgIGJyZWFrOworCisJICBjYXNlIFNGTkFNRToKKwkgICAgaWYgKFZJTV9JU0RJR0lUKCpyZWdpbnB1dCkgfHwgIXZpbV9pc2ZpbGVjKGMpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIEFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgUFJJTlQ6CisJICAgIGlmIChwdHIyY2VsbHMocmVnaW5wdXQpICE9IDEpCisJCXJldHVybiBGQUxTRTsKKwkgICAgQURWQU5DRV9SRUdJTlBVVCgpOworCSAgICBicmVhazsKKworCSAgY2FzZSBTUFJJTlQ6CisJICAgIGlmIChWSU1fSVNESUdJVCgqcmVnaW5wdXQpIHx8IHB0cjJjZWxscyhyZWdpbnB1dCkgIT0gMSkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBBRFZBTkNFX1JFR0lOUFVUKCk7CisJICAgIGJyZWFrOworCisJICBjYXNlIFdISVRFOgorCSAgICBpZiAoIXZpbV9pc3doaXRlKGMpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIEFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgTldISVRFOgorCSAgICBpZiAoYyA9PSBOVUwgfHwgdmltX2lzd2hpdGUoYykpCisJCXJldHVybiBGQUxTRTsKKwkgICAgQURWQU5DRV9SRUdJTlBVVCgpOworCSAgICBicmVhazsKKworCSAgY2FzZSBESUdJVDoKKwkgICAgaWYgKCFyaV9kaWdpdChjKSkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBBRFZBTkNFX1JFR0lOUFVUKCk7CisJICAgIGJyZWFrOworCisJICBjYXNlIE5ESUdJVDoKKwkgICAgaWYgKGMgPT0gTlVMIHx8IHJpX2RpZ2l0KGMpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIEFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgSEVYOgorCSAgICBpZiAoIXJpX2hleChjKSkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBBRFZBTkNFX1JFR0lOUFVUKCk7CisJICAgIGJyZWFrOworCisJICBjYXNlIE5IRVg6CisJICAgIGlmIChjID09IE5VTCB8fCByaV9oZXgoYykpCisJCXJldHVybiBGQUxTRTsKKwkgICAgQURWQU5DRV9SRUdJTlBVVCgpOworCSAgICBicmVhazsKKworCSAgY2FzZSBPQ1RBTDoKKwkgICAgaWYgKCFyaV9vY3RhbChjKSkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBBRFZBTkNFX1JFR0lOUFVUKCk7CisJICAgIGJyZWFrOworCisJICBjYXNlIE5PQ1RBTDoKKwkgICAgaWYgKGMgPT0gTlVMIHx8IHJpX29jdGFsKGMpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIEFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgV09SRDoKKwkgICAgaWYgKCFyaV93b3JkKGMpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIEFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgTldPUkQ6CisJICAgIGlmIChjID09IE5VTCB8fCByaV93b3JkKGMpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIEFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgSEVBRDoKKwkgICAgaWYgKCFyaV9oZWFkKGMpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIEFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgTkhFQUQ6CisJICAgIGlmIChjID09IE5VTCB8fCByaV9oZWFkKGMpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIEFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgQUxQSEE6CisJICAgIGlmICghcmlfYWxwaGEoYykpCisJCXJldHVybiBGQUxTRTsKKwkgICAgQURWQU5DRV9SRUdJTlBVVCgpOworCSAgICBicmVhazsKKworCSAgY2FzZSBOQUxQSEE6CisJICAgIGlmIChjID09IE5VTCB8fCByaV9hbHBoYShjKSkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBBRFZBTkNFX1JFR0lOUFVUKCk7CisJICAgIGJyZWFrOworCisJICBjYXNlIExPV0VSOgorCSAgICBpZiAoIXJpX2xvd2VyKGMpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIEFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgTkxPV0VSOgorCSAgICBpZiAoYyA9PSBOVUwgfHwgcmlfbG93ZXIoYykpCisJCXJldHVybiBGQUxTRTsKKwkgICAgQURWQU5DRV9SRUdJTlBVVCgpOworCSAgICBicmVhazsKKworCSAgY2FzZSBVUFBFUjoKKwkgICAgaWYgKCFyaV91cHBlcihjKSkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBBRFZBTkNFX1JFR0lOUFVUKCk7CisJICAgIGJyZWFrOworCisJICBjYXNlIE5VUFBFUjoKKwkgICAgaWYgKGMgPT0gTlVMIHx8IHJpX3VwcGVyKGMpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIEFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgRVhBQ1RMWToKKwkgICAgeworCQlpbnQJbGVuOworCQljaGFyX3UJKm9wbmQ7CisKKwkJb3BuZCA9IE9QRVJBTkQoc2Nhbik7CisJCS8qIElubGluZSB0aGUgZmlyc3QgYnl0ZSwgZm9yIHNwZWVkLiAqLworCQlpZiAoKm9wbmQgIT0gKnJlZ2lucHV0CisJCQkmJiAoIWlyZWdfaWMgfHwgKAorI2lmZGVmIEZFQVRfTUJZVEUKKwkJCSAgICAhZW5jX3V0ZjggJiYKKyNlbmRpZgorCQkJICAgIFRPTE9XRVJfTE9DKCpvcG5kKSAhPSBUT0xPV0VSX0xPQygqcmVnaW5wdXQpKSkpCisJCSAgICByZXR1cm4gRkFMU0U7CisJCWlmICgqb3BuZCA9PSBOVUwpCisJCXsKKwkJICAgIC8qIG1hdGNoIGVtcHR5IHN0cmluZyBhbHdheXMgd29ya3M7IGhhcHBlbnMgd2hlbiAifiIgaXMKKwkJICAgICAqIGVtcHR5LiAqLworCQl9CisJCWVsc2UgaWYgKG9wbmRbMV0gPT0gTlVMCisjaWZkZWYgRkVBVF9NQllURQorCQkJICAgICYmICEoZW5jX3V0ZjggJiYgaXJlZ19pYykKKyNlbmRpZgorCQkJKQorCQkgICAgKytyZWdpbnB1dDsJCS8qIG1hdGNoZWQgYSBzaW5nbGUgY2hhciAqLworCQllbHNlCisJCXsKKwkJICAgIGxlbiA9IChpbnQpU1RSTEVOKG9wbmQpOworCQkgICAgLyogTmVlZCB0byBtYXRjaCBmaXJzdCBieXRlIGFnYWluIGZvciBtdWx0aS1ieXRlLiAqLworCQkgICAgaWYgKGNzdHJuY21wKG9wbmQsIHJlZ2lucHV0LCAmbGVuKSAhPSAwKQorCQkJcmV0dXJuIEZBTFNFOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIC8qIENoZWNrIGZvciBmb2xsb3dpbmcgY29tcG9zaW5nIGNoYXJhY3Rlci4gKi8KKwkJICAgIGlmIChlbmNfdXRmOCAmJiBVVEZfQ09NUE9TSU5HTElLRShyZWdpbnB1dCwgcmVnaW5wdXQgKyBsZW4pKQorCQkgICAgeworCQkJLyogcmFhcm9uOiBUaGlzIGNvZGUgbWFrZXMgYSBjb21wb3NpbmcgY2hhcmFjdGVyIGdldAorCQkJICogaWdub3JlZCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYmVoYXZpb3IgKHNvbWV0aW1lcykKKwkJCSAqIGZvciB2b3dlbGVkIEhlYnJldyB0ZXh0cy4gKi8KKwkJCWlmICghaXJlZ19pY29tYmluZSkKKwkJCSAgICByZXR1cm4gRkFMU0U7CisJCSAgICB9CisJCSAgICBlbHNlCisjZW5kaWYKKwkJICAgIHJlZ2lucHV0ICs9IGxlbjsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlIEFOWU9GOgorCSAgY2FzZSBBTllCVVQ6CisJICAgIGlmIChjID09IE5VTCkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBpZiAoKGNzdHJjaHIoT1BFUkFORChzY2FuKSwgYykgPT0gTlVMTCkgPT0gKG9wID09IEFOWU9GKSkKKwkJcmV0dXJuIEZBTFNFOworCSAgICBBRFZBTkNFX1JFR0lOUFVUKCk7CisJICAgIGJyZWFrOworCisjaWZkZWYgRkVBVF9NQllURQorCSAgY2FzZSBNVUxUSUJZVEVDT0RFOgorCSAgICBpZiAoaGFzX21ieXRlKQorCSAgICB7CisJCWludAlpLCBsZW47CisJCWNoYXJfdQkqb3BuZDsKKworCQlvcG5kID0gT1BFUkFORChzY2FuKTsKKwkJLyogU2FmZXR5IGNoZWNrIChqdXN0IGluIGNhc2UgJ2VuY29kaW5nJyB3YXMgY2hhbmdlZCBzaW5jZQorCQkgKiBjb21waWxpbmcgdGhlIHByb2dyYW0pLiAqLworCQlpZiAoKGxlbiA9ICgqbWJfcHRyMmxlbl9jaGVjaykob3BuZCkpIDwgMikKKwkJICAgIHJldHVybiBGQUxTRTsKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQorCQkgICAgaWYgKG9wbmRbaV0gIT0gcmVnaW5wdXRbaV0pCisJCQlyZXR1cm4gRkFMU0U7CisJCXJlZ2lucHV0ICs9IGxlbjsKKwkgICAgfQorCSAgICBlbHNlCisJCXJldHVybiBGQUxTRTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKworCSAgY2FzZSBOT1RISU5HOgorCSAgICBicmVhazsKKworCSAgY2FzZSBCQUNLOgorCSAgICBicmVhazsKKworCSAgY2FzZSBNT1BFTiArIDA6ICAgLyogTWF0Y2ggc3RhcnQ6IFx6cyAqLworCSAgY2FzZSBNT1BFTiArIDE6ICAgLyogXCggKi8KKwkgIGNhc2UgTU9QRU4gKyAyOgorCSAgY2FzZSBNT1BFTiArIDM6CisJICBjYXNlIE1PUEVOICsgNDoKKwkgIGNhc2UgTU9QRU4gKyA1OgorCSAgY2FzZSBNT1BFTiArIDY6CisJICBjYXNlIE1PUEVOICsgNzoKKwkgIGNhc2UgTU9QRU4gKyA4OgorCSAgY2FzZSBNT1BFTiArIDk6CisJICAgIHsKKwkJaW50CQlubzsKKwkJc2F2ZV9zZV9UCXNhdmU7CisKKwkJbm8gPSBvcCAtIE1PUEVOOworCQljbGVhbnVwX3N1YmV4cHIoKTsKKwkJc2F2ZV9zZSgmc2F2ZSwgJnJlZ19zdGFydHBvc1tub10sICZyZWdfc3RhcnRwW25vXSk7CisKKwkJaWYgKHJlZ21hdGNoKG5leHQpKQorCQkgICAgcmV0dXJuIFRSVUU7CisKKwkJcmVzdG9yZV9zZSgmc2F2ZSwgJnJlZ19zdGFydHBvc1tub10sICZyZWdfc3RhcnRwW25vXSk7CisJCXJldHVybiBGQUxTRTsKKwkgICAgfQorCSAgICAvKiBicmVhazsgTm90IFJlYWNoZWQgKi8KKworCSAgY2FzZSBOT1BFTjoJICAgIC8qIFwlKCAqLworCSAgY2FzZSBOQ0xPU0U6CSAgICAvKiBcKSBhZnRlciBcJSggKi8KKwkJaWYgKHJlZ21hdGNoKG5leHQpKQorCQkgICAgcmV0dXJuIFRSVUU7CisJCXJldHVybiBGQUxTRTsKKwkJLyogYnJlYWs7IE5vdCBSZWFjaGVkICovCisKKyNpZmRlZiBGRUFUX1NZTl9ITAorCSAgY2FzZSBaT1BFTiArIDE6CisJICBjYXNlIFpPUEVOICsgMjoKKwkgIGNhc2UgWk9QRU4gKyAzOgorCSAgY2FzZSBaT1BFTiArIDQ6CisJICBjYXNlIFpPUEVOICsgNToKKwkgIGNhc2UgWk9QRU4gKyA2OgorCSAgY2FzZSBaT1BFTiArIDc6CisJICBjYXNlIFpPUEVOICsgODoKKwkgIGNhc2UgWk9QRU4gKyA5OgorCSAgICB7CisJCWludAkJbm87CisJCXNhdmVfc2VfVAlzYXZlOworCisJCW5vID0gb3AgLSBaT1BFTjsKKwkJY2xlYW51cF96c3ViZXhwcigpOworCQlzYXZlX3NlKCZzYXZlLCAmcmVnX3N0YXJ0enBvc1tub10sICZyZWdfc3RhcnR6cFtub10pOworCisJCWlmIChyZWdtYXRjaChuZXh0KSkKKwkJICAgIHJldHVybiBUUlVFOworCisJCXJlc3RvcmVfc2UoJnNhdmUsICZyZWdfc3RhcnR6cG9zW25vXSwgJnJlZ19zdGFydHpwW25vXSk7CisJCXJldHVybiBGQUxTRTsKKwkgICAgfQorCSAgICAvKiBicmVhazsgTm90IFJlYWNoZWQgKi8KKyNlbmRpZgorCisJICBjYXNlIE1DTE9TRSArIDA6ICAvKiBNYXRjaCBlbmQ6IFx6ZSAqLworCSAgY2FzZSBNQ0xPU0UgKyAxOiAgLyogXCkgKi8KKwkgIGNhc2UgTUNMT1NFICsgMjoKKwkgIGNhc2UgTUNMT1NFICsgMzoKKwkgIGNhc2UgTUNMT1NFICsgNDoKKwkgIGNhc2UgTUNMT1NFICsgNToKKwkgIGNhc2UgTUNMT1NFICsgNjoKKwkgIGNhc2UgTUNMT1NFICsgNzoKKwkgIGNhc2UgTUNMT1NFICsgODoKKwkgIGNhc2UgTUNMT1NFICsgOToKKwkgICAgeworCQlpbnQJCW5vOworCQlzYXZlX3NlX1QJc2F2ZTsKKworCQlubyA9IG9wIC0gTUNMT1NFOworCQljbGVhbnVwX3N1YmV4cHIoKTsKKwkJc2F2ZV9zZSgmc2F2ZSwgJnJlZ19lbmRwb3Nbbm9dLCAmcmVnX2VuZHBbbm9dKTsKKworCQlpZiAocmVnbWF0Y2gobmV4dCkpCisJCSAgICByZXR1cm4gVFJVRTsKKworCQlyZXN0b3JlX3NlKCZzYXZlLCAmcmVnX2VuZHBvc1tub10sICZyZWdfZW5kcFtub10pOworCQlyZXR1cm4gRkFMU0U7CisJICAgIH0KKwkgICAgLyogYnJlYWs7IE5vdCBSZWFjaGVkICovCisKKyNpZmRlZiBGRUFUX1NZTl9ITAorCSAgY2FzZSBaQ0xPU0UgKyAxOiAgLyogXCkgYWZ0ZXIgXHooICovCisJICBjYXNlIFpDTE9TRSArIDI6CisJICBjYXNlIFpDTE9TRSArIDM6CisJICBjYXNlIFpDTE9TRSArIDQ6CisJICBjYXNlIFpDTE9TRSArIDU6CisJICBjYXNlIFpDTE9TRSArIDY6CisJICBjYXNlIFpDTE9TRSArIDc6CisJICBjYXNlIFpDTE9TRSArIDg6CisJICBjYXNlIFpDTE9TRSArIDk6CisJICAgIHsKKwkJaW50CQlubzsKKwkJc2F2ZV9zZV9UCXNhdmU7CisKKwkJbm8gPSBvcCAtIFpDTE9TRTsKKwkJY2xlYW51cF96c3ViZXhwcigpOworCQlzYXZlX3NlKCZzYXZlLCAmcmVnX2VuZHpwb3Nbbm9dLCAmcmVnX2VuZHpwW25vXSk7CisKKwkJaWYgKHJlZ21hdGNoKG5leHQpKQorCQkgICAgcmV0dXJuIFRSVUU7CisKKwkJcmVzdG9yZV9zZSgmc2F2ZSwgJnJlZ19lbmR6cG9zW25vXSwgJnJlZ19lbmR6cFtub10pOworCQlyZXR1cm4gRkFMU0U7CisJICAgIH0KKwkgICAgLyogYnJlYWs7IE5vdCBSZWFjaGVkICovCisjZW5kaWYKKworCSAgY2FzZSBCQUNLUkVGICsgMToKKwkgIGNhc2UgQkFDS1JFRiArIDI6CisJICBjYXNlIEJBQ0tSRUYgKyAzOgorCSAgY2FzZSBCQUNLUkVGICsgNDoKKwkgIGNhc2UgQkFDS1JFRiArIDU6CisJICBjYXNlIEJBQ0tSRUYgKyA2OgorCSAgY2FzZSBCQUNLUkVGICsgNzoKKwkgIGNhc2UgQkFDS1JFRiArIDg6CisJICBjYXNlIEJBQ0tSRUYgKyA5OgorCSAgICB7CisJCWludAkJbm87CisJCWludAkJbGVuOworCQlsaW5lbnJfVAljbG51bTsKKwkJY29sbnJfVAkJY2NvbDsKKwkJY2hhcl91CQkqcDsKKworCQlubyA9IG9wIC0gQkFDS1JFRjsKKwkJY2xlYW51cF9zdWJleHByKCk7CisJCWlmICghUkVHX01VTFRJKQkJLyogU2luZ2xlLWxpbmUgcmVnZXhwICovCisJCXsKKwkJICAgIGlmIChyZWdfZW5kcFtub10gPT0gTlVMTCkKKwkJICAgIHsKKwkJCS8qIEJhY2tyZWYgd2FzIG5vdCBzZXQ6IE1hdGNoIGFuIGVtcHR5IHN0cmluZy4gKi8KKwkJCWxlbiA9IDA7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQkvKiBDb21wYXJlIGN1cnJlbnQgaW5wdXQgd2l0aCBiYWNrLXJlZiBpbiB0aGUgc2FtZQorCQkJICogbGluZS4gKi8KKwkJCWxlbiA9IChpbnQpKHJlZ19lbmRwW25vXSAtIHJlZ19zdGFydHBbbm9dKTsKKwkJCWlmIChjc3RybmNtcChyZWdfc3RhcnRwW25vXSwgcmVnaW5wdXQsICZsZW4pICE9IDApCisJCQkgICAgcmV0dXJuIEZBTFNFOworCQkgICAgfQorCQl9CisJCWVsc2UJCQkJLyogTXVsdGktbGluZSByZWdleHAgKi8KKwkJeworCQkgICAgaWYgKHJlZ19lbmRwb3Nbbm9dLmxudW0gPCAwKQorCQkgICAgeworCQkJLyogQmFja3JlZiB3YXMgbm90IHNldDogTWF0Y2ggYW4gZW1wdHkgc3RyaW5nLiAqLworCQkJbGVuID0gMDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWlmIChyZWdfc3RhcnRwb3Nbbm9dLmxudW0gPT0gcmVnbG51bQorCQkJCSYmIHJlZ19lbmRwb3Nbbm9dLmxudW0gPT0gcmVnbG51bSkKKwkJCXsKKwkJCSAgICAvKiBDb21wYXJlIGJhY2stcmVmIHdpdGhpbiB0aGUgY3VycmVudCBsaW5lLiAqLworCQkJICAgIGxlbiA9IHJlZ19lbmRwb3Nbbm9dLmNvbCAtIHJlZ19zdGFydHBvc1tub10uY29sOworCQkJICAgIGlmIChjc3RybmNtcChyZWdsaW5lICsgcmVnX3N0YXJ0cG9zW25vXS5jb2wsCisJCQkJCQkJICByZWdpbnB1dCwgJmxlbikgIT0gMCkKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkgICAgLyogTWVzc3kgc2l0dWF0aW9uOiBOZWVkIHRvIGNvbXBhcmUgYmV0d2VlbiB0d28KKwkJCSAgICAgKiBsaW5lcy4gKi8KKwkJCSAgICBjY29sID0gcmVnX3N0YXJ0cG9zW25vXS5jb2w7CisJCQkgICAgY2xudW0gPSByZWdfc3RhcnRwb3Nbbm9dLmxudW07CisJCQkgICAgZm9yICg7OykKKwkJCSAgICB7CisJCQkJLyogU2luY2UgZ2V0dGluZyBvbmUgbGluZSBtYXkgaW52YWxpZGF0ZQorCQkJCSAqIHRoZSBvdGhlciwgbmVlZCB0byBtYWtlIGNvcHkuICBTbG93ISAqLworCQkJCWlmIChyZWdsaW5lICE9IHJlZ190b2ZyZWUpCisJCQkJeworCQkJCSAgICBsZW4gPSAoaW50KVNUUkxFTihyZWdsaW5lKTsKKwkJCQkgICAgaWYgKHJlZ190b2ZyZWUgPT0gTlVMTAorCQkJCQkJIHx8IGxlbiA+PSAoaW50KXJlZ190b2ZyZWVsZW4pCisJCQkJICAgIHsKKwkJCQkJbGVuICs9IDUwOwkvKiBnZXQgc29tZSBleHRyYSAqLworCQkJCQl2aW1fZnJlZShyZWdfdG9mcmVlKTsKKwkJCQkJcmVnX3RvZnJlZSA9IGFsbG9jKGxlbik7CisJCQkJCWlmIChyZWdfdG9mcmVlID09IE5VTEwpCisJCQkJCSAgICByZXR1cm4gRkFMU0U7IC8qIG91dCBvZiBtZW1vcnkhICovCisJCQkJCXJlZ190b2ZyZWVsZW4gPSBsZW47CisJCQkJICAgIH0KKwkJCQkgICAgU1RSQ1BZKHJlZ190b2ZyZWUsIHJlZ2xpbmUpOworCQkJCSAgICByZWdpbnB1dCA9IHJlZ190b2ZyZWUKKwkJCQkJCSAgICAgICArIChyZWdpbnB1dCAtIHJlZ2xpbmUpOworCQkJCSAgICByZWdsaW5lID0gcmVnX3RvZnJlZTsKKwkJCQl9CisKKwkJCQkvKiBHZXQgdGhlIGxpbmUgdG8gY29tcGFyZSB3aXRoLiAqLworCQkJCXAgPSByZWdfZ2V0bGluZShjbG51bSk7CisJCQkJaWYgKGNsbnVtID09IHJlZ19lbmRwb3Nbbm9dLmxudW0pCisJCQkJICAgIGxlbiA9IHJlZ19lbmRwb3Nbbm9dLmNvbCAtIGNjb2w7CisJCQkJZWxzZQorCQkJCSAgICBsZW4gPSAoaW50KVNUUkxFTihwICsgY2NvbCk7CisKKwkJCQlpZiAoY3N0cm5jbXAocCArIGNjb2wsIHJlZ2lucHV0LCAmbGVuKSAhPSAwKQorCQkJCSAgICByZXR1cm4gRkFMU0U7CS8qIGRvZXNuJ3QgbWF0Y2ggKi8KKwkJCQlpZiAoY2xudW0gPT0gcmVnX2VuZHBvc1tub10ubG51bSkKKwkJCQkgICAgYnJlYWs7CQkvKiBtYXRjaCBhbmQgYXQgZW5kISAqLworCQkJCWlmIChyZWdsbnVtID09IHJlZ19tYXhsaW5lKQorCQkJCSAgICByZXR1cm4gRkFMU0U7CS8qIHRleHQgdG9vIHNob3J0ICovCisKKwkJCQkvKiBBZHZhbmNlIHRvIG5leHQgbGluZS4gKi8KKwkJCQlyZWdfbmV4dGxpbmUoKTsKKwkJCQkrK2NsbnVtOworCQkJCWNjb2wgPSAwOworCQkJCWlmIChnb3RfaW50IHx8IG91dF9vZl9zdGFjaykKKwkJCQkgICAgcmV0dXJuIEZBTFNFOworCQkJICAgIH0KKworCQkJICAgIC8qIGZvdW5kIGEgbWF0Y2ghICBOb3RlIHRoYXQgcmVnbGluZSBtYXkgbm93IHBvaW50CisJCQkgICAgICogdG8gYSBjb3B5IG9mIHRoZSBsaW5lLCB0aGF0IHNob3VsZCBub3QgbWF0dGVyLiAqLworCQkJfQorCQkgICAgfQorCQl9CisKKwkJLyogTWF0Y2hlZCB0aGUgYmFja3JlZiwgc2tpcCBvdmVyIGl0LiAqLworCQlyZWdpbnB1dCArPSBsZW47CisJICAgIH0KKwkgICAgYnJlYWs7CisKKyNpZmRlZiBGRUFUX1NZTl9ITAorCSAgY2FzZSBaUkVGICsgMToKKwkgIGNhc2UgWlJFRiArIDI6CisJICBjYXNlIFpSRUYgKyAzOgorCSAgY2FzZSBaUkVGICsgNDoKKwkgIGNhc2UgWlJFRiArIDU6CisJICBjYXNlIFpSRUYgKyA2OgorCSAgY2FzZSBaUkVGICsgNzoKKwkgIGNhc2UgWlJFRiArIDg6CisJICBjYXNlIFpSRUYgKyA5OgorCSAgICB7CisJCWludAlubzsKKwkJaW50CWxlbjsKKworCQljbGVhbnVwX3pzdWJleHByKCk7CisJCW5vID0gb3AgLSBaUkVGOworCQlpZiAocmVfZXh0bWF0Y2hfaW4gIT0gTlVMTAorCQkJJiYgcmVfZXh0bWF0Y2hfaW4tPm1hdGNoZXNbbm9dICE9IE5VTEwpCisJCXsKKwkJICAgIGxlbiA9IChpbnQpU1RSTEVOKHJlX2V4dG1hdGNoX2luLT5tYXRjaGVzW25vXSk7CisJCSAgICBpZiAoY3N0cm5jbXAocmVfZXh0bWF0Y2hfaW4tPm1hdGNoZXNbbm9dLAorCQkJCQkJCSAgcmVnaW5wdXQsICZsZW4pICE9IDApCisJCQlyZXR1cm4gRkFMU0U7CisJCSAgICByZWdpbnB1dCArPSBsZW47CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICAvKiBCYWNrcmVmIHdhcyBub3Qgc2V0OiBNYXRjaCBhbiBlbXB0eSBzdHJpbmcuICovCisJCX0KKwkgICAgfQorCSAgICBicmVhazsKKyNlbmRpZgorCisJICBjYXNlIEJSQU5DSDoKKwkgICAgeworCQlpZiAoT1AobmV4dCkgIT0gQlJBTkNIKSAvKiBObyBjaG9pY2UuICovCisJCSAgICBuZXh0ID0gT1BFUkFORChzY2FuKTsJLyogQXZvaWQgcmVjdXJzaW9uLiAqLworCQllbHNlCisJCXsKKwkJICAgIHJlZ3NhdmVfVAlzYXZlOworCisJCSAgICBkbworCQkgICAgeworCQkJcmVnX3NhdmUoJnNhdmUpOworCQkJaWYgKHJlZ21hdGNoKE9QRVJBTkQoc2NhbikpKQorCQkJICAgIHJldHVybiBUUlVFOworCQkJcmVnX3Jlc3RvcmUoJnNhdmUpOworCQkJc2NhbiA9IHJlZ25leHQoc2Nhbik7CisJCSAgICB9IHdoaWxlIChzY2FuICE9IE5VTEwgJiYgT1Aoc2NhbikgPT0gQlJBTkNIKTsKKwkJICAgIHJldHVybiBGQUxTRTsKKwkJICAgIC8qIE5PVFJFQUNIRUQgKi8KKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlIEJSQUNFX0xJTUlUUzoKKwkgICAgeworCQlpbnQJbm87CisKKwkJaWYgKE9QKG5leHQpID09IEJSQUNFX1NJTVBMRSkKKwkJeworCQkgICAgYmxfbWludmFsID0gT1BFUkFORF9NSU4oc2Nhbik7CisJCSAgICBibF9tYXh2YWwgPSBPUEVSQU5EX01BWChzY2FuKTsKKwkJfQorCQllbHNlIGlmIChPUChuZXh0KSA+PSBCUkFDRV9DT01QTEVYCisJCQkmJiBPUChuZXh0KSA8IEJSQUNFX0NPTVBMRVggKyAxMCkKKwkJeworCQkgICAgbm8gPSBPUChuZXh0KSAtIEJSQUNFX0NPTVBMRVg7CisJCSAgICBicmFjZV9taW5bbm9dID0gT1BFUkFORF9NSU4oc2Nhbik7CisJCSAgICBicmFjZV9tYXhbbm9dID0gT1BFUkFORF9NQVgoc2Nhbik7CisJCSAgICBicmFjZV9jb3VudFtub10gPSAwOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgRU1TRyhfKGVfaW50ZXJuYWwpKTsJICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKwkJICAgIHJldHVybiBGQUxTRTsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlIEJSQUNFX0NPTVBMRVggKyAwOgorCSAgY2FzZSBCUkFDRV9DT01QTEVYICsgMToKKwkgIGNhc2UgQlJBQ0VfQ09NUExFWCArIDI6CisJICBjYXNlIEJSQUNFX0NPTVBMRVggKyAzOgorCSAgY2FzZSBCUkFDRV9DT01QTEVYICsgNDoKKwkgIGNhc2UgQlJBQ0VfQ09NUExFWCArIDU6CisJICBjYXNlIEJSQUNFX0NPTVBMRVggKyA2OgorCSAgY2FzZSBCUkFDRV9DT01QTEVYICsgNzoKKwkgIGNhc2UgQlJBQ0VfQ09NUExFWCArIDg6CisJICBjYXNlIEJSQUNFX0NPTVBMRVggKyA5OgorCSAgICB7CisJCWludAkJbm87CisJCXJlZ3NhdmVfVAlzYXZlOworCisJCW5vID0gb3AgLSBCUkFDRV9DT01QTEVYOworCQkrK2JyYWNlX2NvdW50W25vXTsKKworCQkvKiBJZiBub3QgbWF0Y2hlZCBlbm91Z2ggdGltZXMgeWV0LCB0cnkgb25lIG1vcmUgKi8KKwkJaWYgKGJyYWNlX2NvdW50W25vXSA8PSAoYnJhY2VfbWluW25vXSA8PSBicmFjZV9tYXhbbm9dCisJCQkJICAgID8gYnJhY2VfbWluW25vXSA6IGJyYWNlX21heFtub10pKQorCQl7CisJCSAgICByZWdfc2F2ZSgmc2F2ZSk7CisJCSAgICBpZiAocmVnbWF0Y2goT1BFUkFORChzY2FuKSkpCisJCQlyZXR1cm4gVFJVRTsKKwkJICAgIHJlZ19yZXN0b3JlKCZzYXZlKTsKKwkJICAgIC0tYnJhY2VfY291bnRbbm9dOwkvKiBmYWlsZWQsIGRlY3JlbWVudCBtYXRjaCBjb3VudCAqLworCQkgICAgcmV0dXJuIEZBTFNFOworCQl9CisKKwkJLyogSWYgbWF0Y2hlZCBlbm91Z2ggdGltZXMsIG1heSB0cnkgbWF0Y2hpbmcgc29tZSBtb3JlICovCisJCWlmIChicmFjZV9taW5bbm9dIDw9IGJyYWNlX21heFtub10pCisJCXsKKwkJICAgIC8qIFJhbmdlIGlzIHRoZSBub3JtYWwgd2F5IGFyb3VuZCwgdXNlIGxvbmdlc3QgbWF0Y2ggKi8KKwkJICAgIGlmIChicmFjZV9jb3VudFtub10gPD0gYnJhY2VfbWF4W25vXSkKKwkJICAgIHsKKwkJCXJlZ19zYXZlKCZzYXZlKTsKKwkJCWlmIChyZWdtYXRjaChPUEVSQU5EKHNjYW4pKSkKKwkJCSAgICByZXR1cm4gVFJVRTsJLyogbWF0Y2hlZCBzb21lIG1vcmUgdGltZXMgKi8KKwkJCXJlZ19yZXN0b3JlKCZzYXZlKTsKKwkJCS0tYnJhY2VfY291bnRbbm9dOyAgLyogbWF0Y2hlZCBqdXN0IGVub3VnaCB0aW1lcyAqLworCQkJLyogY29udGludWUgd2l0aCB0aGUgaXRlbXMgYWZ0ZXIgXHt9ICovCisJCSAgICB9CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICAvKiBSYW5nZSBpcyBiYWNrd2FyZHMsIHVzZSBzaG9ydGVzdCBtYXRjaCBmaXJzdCAqLworCQkgICAgaWYgKGJyYWNlX2NvdW50W25vXSA8PSBicmFjZV9taW5bbm9dKQorCQkgICAgeworCQkJcmVnX3NhdmUoJnNhdmUpOworCQkJaWYgKHJlZ21hdGNoKG5leHQpKQorCQkJICAgIHJldHVybiBUUlVFOworCQkJcmVnX3Jlc3RvcmUoJnNhdmUpOworCQkJbmV4dCA9IE9QRVJBTkQoc2Nhbik7CisJCQkvKiBtdXN0IHRyeSB0byBtYXRjaCBvbmUgbW9yZSBpdGVtICovCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBicmVhazsKKworCSAgY2FzZSBCUkFDRV9TSU1QTEU6CisJICBjYXNlIFNUQVI6CisJICBjYXNlIFBMVVM6CisJICAgIHsKKwkJaW50CQluZXh0YjsJCS8qIG5leHQgYnl0ZSAqLworCQlpbnQJCW5leHRiX2ljOwkvKiBuZXh0IGJ5dGUgcmV2ZXJzZSBjYXNlICovCisJCWxvbmcJCWNvdW50OworCQlyZWdzYXZlX1QJc2F2ZTsKKwkJbG9uZwkJbWludmFsOworCQlsb25nCQltYXh2YWw7CisKKwkJLyoKKwkJICogTG9va2FoZWFkIHRvIGF2b2lkIHVzZWxlc3MgbWF0Y2ggYXR0ZW1wdHMgd2hlbiB3ZSBrbm93CisJCSAqIHdoYXQgY2hhcmFjdGVyIGNvbWVzIG5leHQuCisJCSAqLworCQlpZiAoT1AobmV4dCkgPT0gRVhBQ1RMWSkKKwkJeworCQkgICAgbmV4dGIgPSAqT1BFUkFORChuZXh0KTsKKwkJICAgIGlmIChpcmVnX2ljKQorCQkgICAgeworCQkJaWYgKGlzdXBwZXIobmV4dGIpKQorCQkJICAgIG5leHRiX2ljID0gVE9MT1dFUl9MT0MobmV4dGIpOworCQkJZWxzZQorCQkJICAgIG5leHRiX2ljID0gVE9VUFBFUl9MT0MobmV4dGIpOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJbmV4dGJfaWMgPSBuZXh0YjsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIG5leHRiID0gTlVMOworCQkgICAgbmV4dGJfaWMgPSBOVUw7CisJCX0KKwkJaWYgKG9wICE9IEJSQUNFX1NJTVBMRSkKKwkJeworCQkgICAgbWludmFsID0gKG9wID09IFNUQVIpID8gMCA6IDE7CisJCSAgICBtYXh2YWwgPSBNQVhfTElNSVQ7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBtaW52YWwgPSBibF9taW52YWw7CisJCSAgICBtYXh2YWwgPSBibF9tYXh2YWw7CisJCX0KKworCQkvKgorCQkgKiBXaGVuIG1heHZhbCA+IG1pbnZhbCwgdHJ5IG1hdGNoaW5nIGFzIG11Y2ggYXMgcG9zc2libGUsIHVwCisJCSAqIHRvIG1heHZhbC4gIFdoZW4gbWF4dmFsIDwgbWludmFsLCB0cnkgbWF0Y2hpbmcgYXQgbGVhc3QgdGhlCisJCSAqIG1pbmltYWwgbnVtYmVyIChzaW5jZSB0aGUgcmFuZ2UgaXMgYmFja3dhcmRzLCB0aGF0J3MgYWxzbworCQkgKiBtYXh2YWwhKS4KKwkJICovCisJCWNvdW50ID0gcmVncmVwZWF0KE9QRVJBTkQoc2NhbiksIG1heHZhbCk7CisJCWlmIChnb3RfaW50KQorCQkgICAgcmV0dXJuIEZBTFNFOworCQlpZiAobWludmFsIDw9IG1heHZhbCkKKwkJeworCQkgICAgLyogUmFuZ2UgaXMgdGhlIG5vcm1hbCB3YXkgYXJvdW5kLCB1c2UgbG9uZ2VzdCBtYXRjaCAqLworCQkgICAgd2hpbGUgKGNvdW50ID49IG1pbnZhbCkKKwkJICAgIHsKKwkJCS8qIElmIGl0IGNvdWxkIG1hdGNoLCB0cnkgaXQuICovCisJCQlpZiAobmV4dGIgPT0gTlVMIHx8ICpyZWdpbnB1dCA9PSBuZXh0YgorCQkJCQkJICAgIHx8ICpyZWdpbnB1dCA9PSBuZXh0Yl9pYykKKwkJCXsKKwkJCSAgICByZWdfc2F2ZSgmc2F2ZSk7CisJCQkgICAgaWYgKHJlZ21hdGNoKG5leHQpKQorCQkJCXJldHVybiBUUlVFOworCQkJICAgIHJlZ19yZXN0b3JlKCZzYXZlKTsKKwkJCX0KKwkJCS8qIENvdWxkbid0IG9yIGRpZG4ndCBtYXRjaCAtLSBiYWNrIHVwIG9uZSBjaGFyLiAqLworCQkJaWYgKC0tY291bnQgPCBtaW52YWwpCisJCQkgICAgYnJlYWs7CisJCQlpZiAocmVnaW5wdXQgPT0gcmVnbGluZSkKKwkJCXsKKwkJCSAgICAvKiBiYWNrdXAgdG8gbGFzdCBjaGFyIG9mIHByZXZpb3VzIGxpbmUgKi8KKwkJCSAgICAtLXJlZ2xudW07CisJCQkgICAgcmVnbGluZSA9IHJlZ19nZXRsaW5lKHJlZ2xudW0pOworCQkJICAgIC8qIEp1c3QgaW4gY2FzZSByZWdyZXBlYXQoKSBkaWRuJ3QgY291bnQgcmlnaHQuICovCisJCQkgICAgaWYgKHJlZ2xpbmUgPT0gTlVMTCkKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQkgICAgcmVnaW5wdXQgPSByZWdsaW5lICsgU1RSTEVOKHJlZ2xpbmUpOworCQkJICAgIGZhc3RfYnJlYWtjaGVjaygpOworCQkJICAgIGlmIChnb3RfaW50IHx8IG91dF9vZl9zdGFjaykKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkgICAgLS1yZWdpbnB1dDsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCQlyZWdpbnB1dCAtPSAoKm1iX2hlYWRfb2ZmKShyZWdsaW5lLCByZWdpbnB1dCk7CisjZW5kaWYKKwkJCX0KKwkJICAgIH0KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIC8qIFJhbmdlIGlzIGJhY2t3YXJkcywgdXNlIHNob3J0ZXN0IG1hdGNoIGZpcnN0LgorCQkgICAgICogQ2FyZWZ1bDogbWF4dmFsIGFuZCBtaW52YWwgYXJlIGV4Y2hhbmdlZCEgKi8KKwkJICAgIGlmIChjb3VudCA8IG1heHZhbCkKKwkJCXJldHVybiBGQUxTRTsKKwkJICAgIGZvciAoOzspCisJCSAgICB7CisJCQkvKiBJZiBpdCBjb3VsZCB3b3JrLCB0cnkgaXQuICovCisJCQlpZiAobmV4dGIgPT0gTlVMIHx8ICpyZWdpbnB1dCA9PSBuZXh0YgorCQkJCQkJICAgIHx8ICpyZWdpbnB1dCA9PSBuZXh0Yl9pYykKKwkJCXsKKwkJCSAgICByZWdfc2F2ZSgmc2F2ZSk7CisJCQkgICAgaWYgKHJlZ21hdGNoKG5leHQpKQorCQkJCXJldHVybiBUUlVFOworCQkJICAgIHJlZ19yZXN0b3JlKCZzYXZlKTsKKwkJCX0KKwkJCS8qIENvdWxkbid0IG9yIGRpZG4ndCBtYXRjaDogdHJ5IGFkdmFuY2luZyBvbmUgY2hhci4gKi8KKwkJCWlmIChjb3VudCA9PSBtaW52YWwKKwkJCQkJIHx8IHJlZ3JlcGVhdChPUEVSQU5EKHNjYW4pLCAxTCkgPT0gMCkKKwkJCSAgICBicmVhazsKKwkJCSsrY291bnQ7CisJCQlpZiAoZ290X2ludCB8fCBvdXRfb2Zfc3RhY2spCisJCQkgICAgcmV0dXJuIEZBTFNFOworCQkgICAgfQorCQl9CisJCXJldHVybiBGQUxTRTsKKwkgICAgfQorCSAgICAvKiBicmVhazsgTm90IFJlYWNoZWQgKi8KKworCSAgY2FzZSBOT01BVENIOgorCSAgICB7CisJCXJlZ3NhdmVfVAlzYXZlOworCisJCS8qIElmIHRoZSBvcGVyYW5kIG1hdGNoZXMsIHdlIGZhaWwuICBPdGhlcndpc2UgYmFja3VwIGFuZAorCQkgKiBjb250aW51ZSB3aXRoIHRoZSBuZXh0IGl0ZW0uICovCisJCXJlZ19zYXZlKCZzYXZlKTsKKwkJaWYgKHJlZ21hdGNoKE9QRVJBTkQoc2NhbikpKQorCQkgICAgcmV0dXJuIEZBTFNFOworCQlyZWdfcmVzdG9yZSgmc2F2ZSk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgTUFUQ0g6CisJICBjYXNlIFNVQlBBVDoKKwkgICAgeworCQlyZWdzYXZlX1QJc2F2ZTsKKworCQkvKiBJZiB0aGUgb3BlcmFuZCBkb2Vzbid0IG1hdGNoLCB3ZSBmYWlsLiAgT3RoZXJ3aXNlIGJhY2t1cAorCQkgKiBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dCBpdGVtLiAqLworCQlyZWdfc2F2ZSgmc2F2ZSk7CisJCWlmICghcmVnbWF0Y2goT1BFUkFORChzY2FuKSkpCisJCSAgICByZXR1cm4gRkFMU0U7CisJCWlmIChvcCA9PSBNQVRDSCkJICAgIC8qIHplcm8td2lkdGggKi8KKwkJICAgIHJlZ19yZXN0b3JlKCZzYXZlKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCSAgY2FzZSBCRUhJTkQ6CisJICBjYXNlIE5PQkVISU5EOgorCSAgICB7CisJCXJlZ3NhdmVfVAlzYXZlX2FmdGVyLCBzYXZlX3N0YXJ0OworCQlyZWdzYXZlX1QJc2F2ZV9iZWhpbmRfcG9zOworCQlpbnQJCW5lZWRtYXRjaCA9IChvcCA9PSBCRUhJTkQpOworCisJCS8qCisJCSAqIExvb2sgYmFjayBpbiB0aGUgaW5wdXQgb2YgdGhlIG9wZXJhbmQgbWF0Y2hlcyBvciBub3QuIFRoaXMKKwkJICogbXVzdCBiZSBkb25lIGF0IGV2ZXJ5IHBvc2l0aW9uIGluIHRoZSBpbnB1dCBhbmQgY2hlY2tpbmcgaWYKKwkJICogdGhlIG1hdGNoIGVuZHMgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisJCSAqIEZpcnN0IGNoZWNrIGlmIHRoZSBuZXh0IGl0ZW0gbWF0Y2hlcywgdGhhdCdzIHByb2JhYmx5CisJCSAqIGZhc3Rlci4KKwkJICovCisJCXJlZ19zYXZlKCZzYXZlX3N0YXJ0KTsKKwkJaWYgKHJlZ21hdGNoKG5leHQpKQorCQl7CisJCSAgICAvKiBzYXZlIHRoZSBwb3NpdGlvbiBhZnRlciB0aGUgZm91bmQgbWF0Y2ggZm9yIG5leHQgKi8KKwkJICAgIHJlZ19zYXZlKCZzYXZlX2FmdGVyKTsKKworCQkgICAgLyogc3RhcnQgbG9va2luZyBmb3IgYSBtYXRjaCB3aXRoIG9wZXJhbmQgYXQgdGhlIGN1cnJlbnQKKwkJICAgICAqIHBvc3Rpb24uICBHbyBiYWNrIG9uZSBjaGFyYWN0ZXIgdW50aWwgd2UgZmluZCB0aGUKKwkJICAgICAqIHJlc3VsdCwgaGl0dGluZyB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgb3IgdGhlIHByZXZpb3VzCisJCSAgICAgKiBsaW5lIChmb3IgbXVsdGktbGluZSBtYXRjaGluZykuCisJCSAgICAgKiBTZXQgYmVoaW5kX3BvcyB0byB3aGVyZSB0aGUgbWF0Y2ggc2hvdWxkIGVuZCwgQkhQT1MKKwkJICAgICAqIHdpbGwgbWF0Y2ggaXQuICovCisJCSAgICBzYXZlX2JlaGluZF9wb3MgPSBiZWhpbmRfcG9zOworCQkgICAgYmVoaW5kX3BvcyA9IHNhdmVfc3RhcnQ7CisJCSAgICBmb3IgKDs7KQorCQkgICAgeworCQkJcmVnX3Jlc3RvcmUoJnNhdmVfc3RhcnQpOworCQkJaWYgKHJlZ21hdGNoKE9QRVJBTkQoc2NhbikpCisJCQkJJiYgcmVnX3NhdmVfZXF1YWwoJmJlaGluZF9wb3MpKQorCQkJeworCQkJICAgIGJlaGluZF9wb3MgPSBzYXZlX2JlaGluZF9wb3M7CisJCQkgICAgLyogZm91bmQgYSBtYXRjaCB0aGF0IGVuZHMgd2hlcmUgIm5leHQiIHN0YXJ0ZWQgKi8KKwkJCSAgICBpZiAobmVlZG1hdGNoKQorCQkJICAgIHsKKwkJCQlyZWdfcmVzdG9yZSgmc2F2ZV9hZnRlcik7CisJCQkJcmV0dXJuIFRSVUU7CisJCQkgICAgfQorCQkJICAgIHJldHVybiBGQUxTRTsKKwkJCX0KKwkJCS8qCisJCQkgKiBObyBtYXRjaDogR28gYmFjayBvbmUgY2hhcmFjdGVyLiAgTWF5IGdvIHRvCisJCQkgKiBwcmV2aW91cyBsaW5lIG9uY2UuCisJCQkgKi8KKwkJCWlmIChSRUdfTVVMVEkpCisJCQl7CisJCQkgICAgaWYgKHNhdmVfc3RhcnQucnNfdS5wb3MuY29sID09IDApCisJCQkgICAgeworCQkJCWlmIChzYXZlX3N0YXJ0LnJzX3UucG9zLmxudW0KKwkJCQkJCTwgYmVoaW5kX3Bvcy5yc191LnBvcy5sbnVtCisJCQkJCXx8IHJlZ19nZXRsaW5lKAorCQkJCQkgICAgLS1zYXZlX3N0YXJ0LnJzX3UucG9zLmxudW0pID09IE5VTEwpCisJCQkJICAgIGJyZWFrOworCQkJCXJlZ19yZXN0b3JlKCZzYXZlX3N0YXJ0KTsKKwkJCQlzYXZlX3N0YXJ0LnJzX3UucG9zLmNvbCA9CisJCQkJCQkgICAgIChjb2xucl9UKVNUUkxFTihyZWdsaW5lKTsKKwkJCSAgICB9CisJCQkgICAgZWxzZQorCQkJCS0tc2F2ZV9zdGFydC5yc191LnBvcy5jb2w7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkgICAgaWYgKHNhdmVfc3RhcnQucnNfdS5wdHIgPT0gcmVnbGluZSkKKwkJCQlicmVhazsKKwkJCSAgICAtLXNhdmVfc3RhcnQucnNfdS5wdHI7CisJCQl9CisJCSAgICB9CisKKwkJICAgIC8qIE5PQkVISU5EIHN1Y2NlZWRzIHdoZW4gbm8gbWF0Y2ggd2FzIGZvdW5kICovCisJCSAgICBiZWhpbmRfcG9zID0gc2F2ZV9iZWhpbmRfcG9zOworCQkgICAgaWYgKCFuZWVkbWF0Y2gpCisJCSAgICB7CisJCQlyZWdfcmVzdG9yZSgmc2F2ZV9hZnRlcik7CisJCQlyZXR1cm4gVFJVRTsKKwkJICAgIH0KKwkJfQorCQlyZXR1cm4gRkFMU0U7CisJICAgIH0KKworCSAgY2FzZSBCSFBPUzoKKwkgICAgaWYgKFJFR19NVUxUSSkKKwkgICAgeworCQlpZiAoYmVoaW5kX3Bvcy5yc191LnBvcy5jb2wgIT0gKGNvbG5yX1QpKHJlZ2lucHV0IC0gcmVnbGluZSkKKwkJCXx8IGJlaGluZF9wb3MucnNfdS5wb3MubG51bSAhPSByZWdsbnVtKQorCQkgICAgcmV0dXJuIEZBTFNFOworCSAgICB9CisJICAgIGVsc2UgaWYgKGJlaGluZF9wb3MucnNfdS5wdHIgIT0gcmVnaW5wdXQpCisJCXJldHVybiBGQUxTRTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgTkVXTDoKKwkgICAgaWYgKChjICE9IE5VTCB8fCByZWdsbnVtID09IHJlZ19tYXhsaW5lKQorCQkJCQkgICAgICAmJiAoYyAhPSAnXG4nIHx8ICFyZWdfbGluZV9sYnIpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIGlmIChyZWdfbGluZV9sYnIpCisJCUFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgZWxzZQorCQlyZWdfbmV4dGxpbmUoKTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgRU5EOgorCSAgICByZXR1cm4gVFJVRTsJLyogU3VjY2VzcyEgKi8KKworCSAgZGVmYXVsdDoKKwkgICAgRU1TRyhfKGVfcmVfY29ycikpOworI2lmZGVmIERFQlVHCisJICAgIHByaW50ZigiSWxsZWdhbCBvcCBjb2RlICVkXG4iLCBvcCk7CisjZW5kaWYKKwkgICAgcmV0dXJuIEZBTFNFOworCSAgfQorCX0KKworCXNjYW4gPSBuZXh0OworICAgIH0KKworICAgIC8qCisgICAgICogV2UgZ2V0IGhlcmUgb25seSBpZiB0aGVyZSdzIHRyb3VibGUgLS0gbm9ybWFsbHkgImNhc2UgRU5EIiBpcyB0aGUKKyAgICAgKiB0ZXJtaW5hdGluZyBwb2ludC4KKyAgICAgKi8KKyAgICBFTVNHKF8oZV9yZV9jb3JyKSk7CisjaWZkZWYgREVCVUcKKyAgICBwcmludGYoIlByZW1hdHVyZSBFT0xcbiIpOworI2VuZGlmCisgICAgcmV0dXJuIEZBTFNFOworfQorCisjaWZkZWYgRkVBVF9NQllURQorIyBkZWZpbmUgQURWQU5DRV9QKHgpIGlmIChoYXNfbWJ5dGUpIHggKz0gKCptYl9wdHIybGVuX2NoZWNrKSh4KTsgZWxzZSArK3gKKyNlbHNlCisjIGRlZmluZSBBRFZBTkNFX1AoeCkgKyt4CisjZW5kaWYKKworLyoKKyAqIHJlZ3JlcGVhdCAtIHJlcGVhdGVkbHkgbWF0Y2ggc29tZXRoaW5nIHNpbXBsZSwgcmV0dXJuIGhvdyBtYW55LgorICogQWR2YW5jZXMgcmVnaW5wdXQgKGFuZCByZWdsbnVtKSB0byBqdXN0IGFmdGVyIHRoZSBtYXRjaGVkIGNoYXJzLgorICovCisgICAgc3RhdGljIGludAorcmVncmVwZWF0KHAsIG1heGNvdW50KQorICAgIGNoYXJfdQkqcDsKKyAgICBsb25nCW1heGNvdW50OyAgIC8qIG1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgYWxsb3dlZCAqLworeworICAgIGxvbmcJY291bnQgPSAwOworICAgIGNoYXJfdQkqc2NhbjsKKyAgICBjaGFyX3UJKm9wbmQ7CisgICAgaW50CQltYXNrOworICAgIGludAkJdGVzdHZhbCA9IDA7CisKKyAgICBzY2FuID0gcmVnaW5wdXQ7CSAgICAvKiBNYWtlIGxvY2FsIGNvcHkgb2YgcmVnaW5wdXQgZm9yIHNwZWVkLiAqLworICAgIG9wbmQgPSBPUEVSQU5EKHApOworICAgIHN3aXRjaCAoT1AocCkpCisgICAgeworICAgICAgY2FzZSBBTlk6CisgICAgICBjYXNlIEFOWSArIEFERF9OTDoKKwl3aGlsZSAoY291bnQgPCBtYXhjb3VudCkKKwl7CisJICAgIC8qIE1hdGNoaW5nIGFueXRoaW5nIG1lYW5zIHdlIGNvbnRpbnVlIHVudGlsIGVuZC1vZi1saW5lIChvcgorCSAgICAgKiBlbmQtb2YtZmlsZSBmb3IgQU5ZICsgQUREX05MKSwgb25seSBsaW1pdGVkIGJ5IG1heGNvdW50LiAqLworCSAgICB3aGlsZSAoKnNjYW4gIT0gTlVMICYmIGNvdW50IDwgbWF4Y291bnQpCisJICAgIHsKKwkJKytjb3VudDsKKwkJQURWQU5DRV9QKHNjYW4pOworCSAgICB9CisJICAgIGlmICghV0lUSF9OTChPUChwKSkgfHwgcmVnbG51bSA9PSByZWdfbWF4bGluZSB8fCBjb3VudCA9PSBtYXhjb3VudCkKKwkJYnJlYWs7CisJICAgICsrY291bnQ7CQkvKiBjb3VudCB0aGUgbGluZS1icmVhayAqLworCSAgICByZWdfbmV4dGxpbmUoKTsKKwkgICAgc2NhbiA9IHJlZ2lucHV0OworCSAgICBpZiAoZ290X2ludCkKKwkJYnJlYWs7CisJfQorCWJyZWFrOworCisgICAgICBjYXNlIElERU5UOgorICAgICAgY2FzZSBJREVOVCArIEFERF9OTDoKKwl0ZXN0dmFsID0gVFJVRTsKKwkvKkZBTExUSFJPVUdIKi8KKyAgICAgIGNhc2UgU0lERU5UOgorICAgICAgY2FzZSBTSURFTlQgKyBBRERfTkw6CisJd2hpbGUgKGNvdW50IDwgbWF4Y291bnQpCisJeworCSAgICBpZiAodmltX2lzSURjKCpzY2FuKSAmJiAodGVzdHZhbCB8fCAhVklNX0lTRElHSVQoKnNjYW4pKSkKKwkgICAgeworCQlBRFZBTkNFX1Aoc2Nhbik7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKnNjYW4gPT0gTlVMKQorCSAgICB7CisJCWlmICghV0lUSF9OTChPUChwKSkgfHwgcmVnbG51bSA9PSByZWdfbWF4bGluZSkKKwkJICAgIGJyZWFrOworCQlyZWdfbmV4dGxpbmUoKTsKKwkJc2NhbiA9IHJlZ2lucHV0OworCQlpZiAoZ290X2ludCkKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIGVsc2UgaWYgKHJlZ19saW5lX2xiciAmJiAqc2NhbiA9PSAnXG4nICYmIFdJVEhfTkwoT1AocCkpKQorCQkrK3NjYW47CisJICAgIGVsc2UKKwkJYnJlYWs7CisJICAgICsrY291bnQ7CisJfQorCWJyZWFrOworCisgICAgICBjYXNlIEtXT1JEOgorICAgICAgY2FzZSBLV09SRCArIEFERF9OTDoKKwl0ZXN0dmFsID0gVFJVRTsKKwkvKkZBTExUSFJPVUdIKi8KKyAgICAgIGNhc2UgU0tXT1JEOgorICAgICAgY2FzZSBTS1dPUkQgKyBBRERfTkw6CisJd2hpbGUgKGNvdW50IDwgbWF4Y291bnQpCisJeworCSAgICBpZiAodmltX2lzd29yZHAoc2NhbikgJiYgKHRlc3R2YWwgfHwgIVZJTV9JU0RJR0lUKCpzY2FuKSkpCisJICAgIHsKKwkJQURWQU5DRV9QKHNjYW4pOworCSAgICB9CisJICAgIGVsc2UgaWYgKCpzY2FuID09IE5VTCkKKwkgICAgeworCQlpZiAoIVdJVEhfTkwoT1AocCkpIHx8IHJlZ2xudW0gPT0gcmVnX21heGxpbmUpCisJCSAgICBicmVhazsKKwkJcmVnX25leHRsaW5lKCk7CisJCXNjYW4gPSByZWdpbnB1dDsKKwkJaWYgKGdvdF9pbnQpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBlbHNlIGlmIChyZWdfbGluZV9sYnIgJiYgKnNjYW4gPT0gJ1xuJyAmJiBXSVRIX05MKE9QKHApKSkKKwkJKytzY2FuOworCSAgICBlbHNlCisJCWJyZWFrOworCSAgICArK2NvdW50OworCX0KKwlicmVhazsKKworICAgICAgY2FzZSBGTkFNRToKKyAgICAgIGNhc2UgRk5BTUUgKyBBRERfTkw6CisJdGVzdHZhbCA9IFRSVUU7CisJLypGQUxMVEhST1VHSCovCisgICAgICBjYXNlIFNGTkFNRToKKyAgICAgIGNhc2UgU0ZOQU1FICsgQUREX05MOgorCXdoaWxlIChjb3VudCA8IG1heGNvdW50KQorCXsKKwkgICAgaWYgKHZpbV9pc2ZpbGVjKCpzY2FuKSAmJiAodGVzdHZhbCB8fCAhVklNX0lTRElHSVQoKnNjYW4pKSkKKwkgICAgeworCQlBRFZBTkNFX1Aoc2Nhbik7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKnNjYW4gPT0gTlVMKQorCSAgICB7CisJCWlmICghV0lUSF9OTChPUChwKSkgfHwgcmVnbG51bSA9PSByZWdfbWF4bGluZSkKKwkJICAgIGJyZWFrOworCQlyZWdfbmV4dGxpbmUoKTsKKwkJc2NhbiA9IHJlZ2lucHV0OworCQlpZiAoZ290X2ludCkKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIGVsc2UgaWYgKHJlZ19saW5lX2xiciAmJiAqc2NhbiA9PSAnXG4nICYmIFdJVEhfTkwoT1AocCkpKQorCQkrK3NjYW47CisJICAgIGVsc2UKKwkJYnJlYWs7CisJICAgICsrY291bnQ7CisJfQorCWJyZWFrOworCisgICAgICBjYXNlIFBSSU5UOgorICAgICAgY2FzZSBQUklOVCArIEFERF9OTDoKKwl0ZXN0dmFsID0gVFJVRTsKKwkvKkZBTExUSFJPVUdIKi8KKyAgICAgIGNhc2UgU1BSSU5UOgorICAgICAgY2FzZSBTUFJJTlQgKyBBRERfTkw6CisJd2hpbGUgKGNvdW50IDwgbWF4Y291bnQpCisJeworCSAgICBpZiAoKnNjYW4gPT0gTlVMKQorCSAgICB7CisJCWlmICghV0lUSF9OTChPUChwKSkgfHwgcmVnbG51bSA9PSByZWdfbWF4bGluZSkKKwkJICAgIGJyZWFrOworCQlyZWdfbmV4dGxpbmUoKTsKKwkJc2NhbiA9IHJlZ2lucHV0OworCQlpZiAoZ290X2ludCkKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIGVsc2UgaWYgKHB0cjJjZWxscyhzY2FuKSA9PSAxICYmICh0ZXN0dmFsIHx8ICFWSU1fSVNESUdJVCgqc2NhbikpKQorCSAgICB7CisJCUFEVkFOQ0VfUChzY2FuKTsKKwkgICAgfQorCSAgICBlbHNlIGlmIChyZWdfbGluZV9sYnIgJiYgKnNjYW4gPT0gJ1xuJyAmJiBXSVRIX05MKE9QKHApKSkKKwkJKytzY2FuOworCSAgICBlbHNlCisJCWJyZWFrOworCSAgICArK2NvdW50OworCX0KKwlicmVhazsKKworICAgICAgY2FzZSBXSElURToKKyAgICAgIGNhc2UgV0hJVEUgKyBBRERfTkw6CisJdGVzdHZhbCA9IG1hc2sgPSBSSV9XSElURTsKK2RvX2NsYXNzOgorCXdoaWxlIChjb3VudCA8IG1heGNvdW50KQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGludAkJbDsKKyNlbmRpZgorCSAgICBpZiAoKnNjYW4gPT0gTlVMKQorCSAgICB7CisJCWlmICghV0lUSF9OTChPUChwKSkgfHwgcmVnbG51bSA9PSByZWdfbWF4bGluZSkKKwkJICAgIGJyZWFrOworCQlyZWdfbmV4dGxpbmUoKTsKKwkJc2NhbiA9IHJlZ2lucHV0OworCQlpZiAoZ290X2ludCkKKwkJICAgIGJyZWFrOworCSAgICB9CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBlbHNlIGlmIChoYXNfbWJ5dGUgJiYgKGwgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHNjYW4pKSA+IDEpCisJICAgIHsKKwkJaWYgKHRlc3R2YWwgIT0gMCkKKwkJICAgIGJyZWFrOworCQlzY2FuICs9IGw7CisJICAgIH0KKyNlbmRpZgorCSAgICBlbHNlIGlmICgoY2xhc3NfdGFiWypzY2FuXSAmIG1hc2spID09IHRlc3R2YWwpCisJCSsrc2NhbjsKKwkgICAgZWxzZSBpZiAocmVnX2xpbmVfbGJyICYmICpzY2FuID09ICdcbicgJiYgV0lUSF9OTChPUChwKSkpCisJCSsrc2NhbjsKKwkgICAgZWxzZQorCQlicmVhazsKKwkgICAgKytjb3VudDsKKwl9CisJYnJlYWs7CisKKyAgICAgIGNhc2UgTldISVRFOgorICAgICAgY2FzZSBOV0hJVEUgKyBBRERfTkw6CisJbWFzayA9IFJJX1dISVRFOworCWdvdG8gZG9fY2xhc3M7CisgICAgICBjYXNlIERJR0lUOgorICAgICAgY2FzZSBESUdJVCArIEFERF9OTDoKKwl0ZXN0dmFsID0gbWFzayA9IFJJX0RJR0lUOworCWdvdG8gZG9fY2xhc3M7CisgICAgICBjYXNlIE5ESUdJVDoKKyAgICAgIGNhc2UgTkRJR0lUICsgQUREX05MOgorCW1hc2sgPSBSSV9ESUdJVDsKKwlnb3RvIGRvX2NsYXNzOworICAgICAgY2FzZSBIRVg6CisgICAgICBjYXNlIEhFWCArIEFERF9OTDoKKwl0ZXN0dmFsID0gbWFzayA9IFJJX0hFWDsKKwlnb3RvIGRvX2NsYXNzOworICAgICAgY2FzZSBOSEVYOgorICAgICAgY2FzZSBOSEVYICsgQUREX05MOgorCW1hc2sgPSBSSV9IRVg7CisJZ290byBkb19jbGFzczsKKyAgICAgIGNhc2UgT0NUQUw6CisgICAgICBjYXNlIE9DVEFMICsgQUREX05MOgorCXRlc3R2YWwgPSBtYXNrID0gUklfT0NUQUw7CisJZ290byBkb19jbGFzczsKKyAgICAgIGNhc2UgTk9DVEFMOgorICAgICAgY2FzZSBOT0NUQUwgKyBBRERfTkw6CisJbWFzayA9IFJJX09DVEFMOworCWdvdG8gZG9fY2xhc3M7CisgICAgICBjYXNlIFdPUkQ6CisgICAgICBjYXNlIFdPUkQgKyBBRERfTkw6CisJdGVzdHZhbCA9IG1hc2sgPSBSSV9XT1JEOworCWdvdG8gZG9fY2xhc3M7CisgICAgICBjYXNlIE5XT1JEOgorICAgICAgY2FzZSBOV09SRCArIEFERF9OTDoKKwltYXNrID0gUklfV09SRDsKKwlnb3RvIGRvX2NsYXNzOworICAgICAgY2FzZSBIRUFEOgorICAgICAgY2FzZSBIRUFEICsgQUREX05MOgorCXRlc3R2YWwgPSBtYXNrID0gUklfSEVBRDsKKwlnb3RvIGRvX2NsYXNzOworICAgICAgY2FzZSBOSEVBRDoKKyAgICAgIGNhc2UgTkhFQUQgKyBBRERfTkw6CisJbWFzayA9IFJJX0hFQUQ7CisJZ290byBkb19jbGFzczsKKyAgICAgIGNhc2UgQUxQSEE6CisgICAgICBjYXNlIEFMUEhBICsgQUREX05MOgorCXRlc3R2YWwgPSBtYXNrID0gUklfQUxQSEE7CisJZ290byBkb19jbGFzczsKKyAgICAgIGNhc2UgTkFMUEhBOgorICAgICAgY2FzZSBOQUxQSEEgKyBBRERfTkw6CisJbWFzayA9IFJJX0FMUEhBOworCWdvdG8gZG9fY2xhc3M7CisgICAgICBjYXNlIExPV0VSOgorICAgICAgY2FzZSBMT1dFUiArIEFERF9OTDoKKwl0ZXN0dmFsID0gbWFzayA9IFJJX0xPV0VSOworCWdvdG8gZG9fY2xhc3M7CisgICAgICBjYXNlIE5MT1dFUjoKKyAgICAgIGNhc2UgTkxPV0VSICsgQUREX05MOgorCW1hc2sgPSBSSV9MT1dFUjsKKwlnb3RvIGRvX2NsYXNzOworICAgICAgY2FzZSBVUFBFUjoKKyAgICAgIGNhc2UgVVBQRVIgKyBBRERfTkw6CisJdGVzdHZhbCA9IG1hc2sgPSBSSV9VUFBFUjsKKwlnb3RvIGRvX2NsYXNzOworICAgICAgY2FzZSBOVVBQRVI6CisgICAgICBjYXNlIE5VUFBFUiArIEFERF9OTDoKKwltYXNrID0gUklfVVBQRVI7CisJZ290byBkb19jbGFzczsKKworICAgICAgY2FzZSBFWEFDVExZOgorCXsKKwkgICAgaW50CSAgICBjdSwgY2w7CisKKwkgICAgLyogVGhpcyBkb2Vzbid0IGRvIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIsIGJlY2F1c2UgYSBNVUxUSUJZVEVDT0RFCisJICAgICAqIHdvdWxkIGhhdmUgYmVlbiB1c2VkIGZvciBpdC4gKi8KKwkgICAgaWYgKGlyZWdfaWMpCisJICAgIHsKKwkJY3UgPSBUT1VQUEVSX0xPQygqb3BuZCk7CisJCWNsID0gVE9MT1dFUl9MT0MoKm9wbmQpOworCQl3aGlsZSAoY291bnQgPCBtYXhjb3VudCAmJiAoKnNjYW4gPT0gY3UgfHwgKnNjYW4gPT0gY2wpKQorCQl7CisJCSAgICBjb3VudCsrOworCQkgICAgc2NhbisrOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWN1ID0gKm9wbmQ7CisJCXdoaWxlIChjb3VudCA8IG1heGNvdW50ICYmICpzY2FuID09IGN1KQorCQl7CisJCSAgICBjb3VudCsrOworCQkgICAgc2NhbisrOworCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCisjaWZkZWYgRkVBVF9NQllURQorICAgICAgY2FzZSBNVUxUSUJZVEVDT0RFOgorCXsKKwkgICAgaW50CQlpLCBsZW4sIGNmID0gMDsKKworCSAgICAvKiBTYWZldHkgY2hlY2sgKGp1c3QgaW4gY2FzZSAnZW5jb2RpbmcnIHdhcyBjaGFuZ2VkIHNpbmNlCisJICAgICAqIGNvbXBpbGluZyB0aGUgcHJvZ3JhbSkuICovCisJICAgIGlmICgobGVuID0gKCptYl9wdHIybGVuX2NoZWNrKShvcG5kKSkgPiAxKQorCSAgICB7CisJCWlmIChpcmVnX2ljICYmIGVuY191dGY4KQorCQkgICAgY2YgPSB1dGZfZm9sZCh1dGZfcHRyMmNoYXIob3BuZCkpOworCQl3aGlsZSAoY291bnQgPCBtYXhjb3VudCkKKwkJeworCQkgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQorCQkJaWYgKG9wbmRbaV0gIT0gc2NhbltpXSkKKwkJCSAgICBicmVhazsKKwkJICAgIGlmIChpIDwgbGVuICYmICghaXJlZ19pYyB8fCAhZW5jX3V0ZjgKKwkJCQkJfHwgdXRmX2ZvbGQodXRmX3B0cjJjaGFyKHNjYW4pKSAhPSBjZikpCisJCQlicmVhazsKKwkJICAgIHNjYW4gKz0gbGVuOworCQkgICAgKytjb3VudDsKKwkJfQorCSAgICB9CisJfQorCWJyZWFrOworI2VuZGlmCisKKyAgICAgIGNhc2UgQU5ZT0Y6CisgICAgICBjYXNlIEFOWU9GICsgQUREX05MOgorCXRlc3R2YWwgPSBUUlVFOworCS8qRkFMTFRIUk9VR0gqLworCisgICAgICBjYXNlIEFOWUJVVDoKKyAgICAgIGNhc2UgQU5ZQlVUICsgQUREX05MOgorCXdoaWxlIChjb3VudCA8IG1heGNvdW50KQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGludCBsZW47CisjZW5kaWYKKwkgICAgaWYgKCpzY2FuID09IE5VTCkKKwkgICAgeworCQlpZiAoIVdJVEhfTkwoT1AocCkpIHx8IHJlZ2xudW0gPT0gcmVnX21heGxpbmUpCisJCSAgICBicmVhazsKKwkJcmVnX25leHRsaW5lKCk7CisJCXNjYW4gPSByZWdpbnB1dDsKKwkJaWYgKGdvdF9pbnQpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBlbHNlIGlmIChyZWdfbGluZV9sYnIgJiYgKnNjYW4gPT0gJ1xuJyAmJiBXSVRIX05MKE9QKHApKSkKKwkJKytzY2FuOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgZWxzZSBpZiAoaGFzX21ieXRlICYmIChsZW4gPSAoKm1iX3B0cjJsZW5fY2hlY2spKHNjYW4pKSA+IDEpCisJICAgIHsKKwkJaWYgKChjc3RyY2hyKG9wbmQsICgqbWJfcHRyMmNoYXIpKHNjYW4pKSA9PSBOVUxMKSA9PSB0ZXN0dmFsKQorCQkgICAgYnJlYWs7CisJCXNjYW4gKz0gbGVuOworCSAgICB9CisjZW5kaWYKKwkgICAgZWxzZQorCSAgICB7CisJCWlmICgoY3N0cmNocihvcG5kLCAqc2NhbikgPT0gTlVMTCkgPT0gdGVzdHZhbCkKKwkJICAgIGJyZWFrOworCQkrK3NjYW47CisJICAgIH0KKwkgICAgKytjb3VudDsKKwl9CisJYnJlYWs7CisKKyAgICAgIGNhc2UgTkVXTDoKKwl3aGlsZSAoY291bnQgPCBtYXhjb3VudAorCQkmJiAoKCpzY2FuID09IE5VTCAmJiByZWdsbnVtIDwgcmVnX21heGxpbmUpCisJCSAgICB8fCAoKnNjYW4gPT0gJ1xuJyAmJiByZWdfbGluZV9sYnIpKSkKKwl7CisJICAgIGNvdW50Kys7CisJICAgIGlmIChyZWdfbGluZV9sYnIpCisJCUFEVkFOQ0VfUkVHSU5QVVQoKTsKKwkgICAgZWxzZQorCQlyZWdfbmV4dGxpbmUoKTsKKwkgICAgc2NhbiA9IHJlZ2lucHV0OworCSAgICBpZiAoZ290X2ludCkKKwkJYnJlYWs7CisJfQorCWJyZWFrOworCisgICAgICBkZWZhdWx0OgkJCS8qIE9oIGRlYXIuICBDYWxsZWQgaW5hcHByb3ByaWF0ZWx5LiAqLworCUVNU0coXyhlX3JlX2NvcnIpKTsKKyNpZmRlZiBERUJVRworCXByaW50ZigiQ2FsbGVkIHJlZ3JlcGVhdCB3aXRoIG9wIGNvZGUgJWRcbiIsIE9QKHApKTsKKyNlbmRpZgorCWJyZWFrOworICAgIH0KKworICAgIHJlZ2lucHV0ID0gc2NhbjsKKworICAgIHJldHVybiAoaW50KWNvdW50OworfQorCisvKgorICogcmVnbmV4dCAtIGRpZyB0aGUgIm5leHQiIHBvaW50ZXIgb3V0IG9mIGEgbm9kZQorICovCisgICAgc3RhdGljIGNoYXJfdSAqCityZWduZXh0KHApCisgICAgY2hhcl91ICAqcDsKK3sKKyAgICBpbnQJICAgIG9mZnNldDsKKworICAgIGlmIChwID09IEpVU1RfQ0FMQ19TSVpFKQorCXJldHVybiBOVUxMOworCisgICAgb2Zmc2V0ID0gTkVYVChwKTsKKyAgICBpZiAob2Zmc2V0ID09IDApCisJcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoT1AocCkgPT0gQkFDSykKKwlyZXR1cm4gcCAtIG9mZnNldDsKKyAgICBlbHNlCisJcmV0dXJuIHAgKyBvZmZzZXQ7Cit9CisKKy8qCisgKiBDaGVjayB0aGUgcmVnZXhwIHByb2dyYW0gZm9yIGl0cyBtYWdpYyBudW1iZXIuCisgKiBSZXR1cm4gVFJVRSBpZiBpdCdzIHdyb25nLgorICovCisgICAgc3RhdGljIGludAorcHJvZ19tYWdpY193cm9uZygpCit7CisgICAgaWYgKFVDSEFSQVQoUkVHX01VTFRJCisJCT8gcmVnX21tYXRjaC0+cmVncHJvZy0+cHJvZ3JhbQorCQk6IHJlZ19tYXRjaC0+cmVncHJvZy0+cHJvZ3JhbSkgIT0gUkVHTUFHSUMpCisgICAgeworCUVNU0coXyhlX3JlX2NvcnIpKTsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogQ2xlYW51cCB0aGUgc3ViZXhwcmVzc2lvbnMsIGlmIHRoaXMgd2Fzbid0IGRvbmUgeWV0LgorICogVGhpcyBjb25zdHJ1Y3Rpb24gaXMgdXNlZCB0byBjbGVhciB0aGUgc3ViZXhwcmVzc2lvbnMgb25seSB3aGVuIHRoZXkgYXJlCisgKiB1c2VkICh0byBpbmNyZWFzZSBzcGVlZCkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2xlYW51cF9zdWJleHByKCkKK3sKKyAgICBpZiAobmVlZF9jbGVhcl9zdWJleHByKQorICAgIHsKKwlpZiAoUkVHX01VTFRJKQorCXsKKwkgICAgLyogVXNlIDB4ZmYgdG8gc2V0IGxudW0gdG8gLTEgKi8KKwkgICAgdmltX21lbXNldChyZWdfc3RhcnRwb3MsIDB4ZmYsIHNpemVvZihscG9zX1QpICogTlNVQkVYUCk7CisJICAgIHZpbV9tZW1zZXQocmVnX2VuZHBvcywgMHhmZiwgc2l6ZW9mKGxwb3NfVCkgKiBOU1VCRVhQKTsKKwl9CisJZWxzZQorCXsKKwkgICAgdmltX21lbXNldChyZWdfc3RhcnRwLCAwLCBzaXplb2YoY2hhcl91ICopICogTlNVQkVYUCk7CisJICAgIHZpbV9tZW1zZXQocmVnX2VuZHAsIDAsIHNpemVvZihjaGFyX3UgKikgKiBOU1VCRVhQKTsKKwl9CisJbmVlZF9jbGVhcl9zdWJleHByID0gRkFMU0U7CisgICAgfQorfQorCisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBzdGF0aWMgdm9pZAorY2xlYW51cF96c3ViZXhwcigpCit7CisgICAgaWYgKG5lZWRfY2xlYXJfenN1YmV4cHIpCisgICAgeworCWlmIChSRUdfTVVMVEkpCisJeworCSAgICAvKiBVc2UgMHhmZiB0byBzZXQgbG51bSB0byAtMSAqLworCSAgICB2aW1fbWVtc2V0KHJlZ19zdGFydHpwb3MsIDB4ZmYsIHNpemVvZihscG9zX1QpICogTlNVQkVYUCk7CisJICAgIHZpbV9tZW1zZXQocmVnX2VuZHpwb3MsIDB4ZmYsIHNpemVvZihscG9zX1QpICogTlNVQkVYUCk7CisJfQorCWVsc2UKKwl7CisJICAgIHZpbV9tZW1zZXQocmVnX3N0YXJ0enAsIDAsIHNpemVvZihjaGFyX3UgKikgKiBOU1VCRVhQKTsKKwkgICAgdmltX21lbXNldChyZWdfZW5kenAsIDAsIHNpemVvZihjaGFyX3UgKikgKiBOU1VCRVhQKTsKKwl9CisJbmVlZF9jbGVhcl96c3ViZXhwciA9IEZBTFNFOworICAgIH0KK30KKyNlbmRpZgorCisvKgorICogQWR2YW5jZSByZWdsbnVtLCByZWdsaW5lIGFuZCByZWdpbnB1dCB0byB0aGUgbmV4dCBsaW5lLgorICovCisgICAgc3RhdGljIHZvaWQKK3JlZ19uZXh0bGluZSgpCit7CisgICAgcmVnbGluZSA9IHJlZ19nZXRsaW5lKCsrcmVnbG51bSk7CisgICAgcmVnaW5wdXQgPSByZWdsaW5lOworICAgIGZhc3RfYnJlYWtjaGVjaygpOworfQorCisvKgorICogU2F2ZSB0aGUgaW5wdXQgbGluZSBhbmQgcG9zaXRpb24gaW4gYSByZWdzYXZlX1QuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcmVnX3NhdmUoc2F2ZSkKKyAgICByZWdzYXZlX1QJKnNhdmU7Cit7CisgICAgaWYgKFJFR19NVUxUSSkKKyAgICB7CisJc2F2ZS0+cnNfdS5wb3MuY29sID0gKGNvbG5yX1QpKHJlZ2lucHV0IC0gcmVnbGluZSk7CisJc2F2ZS0+cnNfdS5wb3MubG51bSA9IHJlZ2xudW07CisgICAgfQorICAgIGVsc2UKKwlzYXZlLT5yc191LnB0ciA9IHJlZ2lucHV0OworfQorCisvKgorICogUmVzdG9yZSB0aGUgaW5wdXQgbGluZSBhbmQgcG9zaXRpb24gZnJvbSBhIHJlZ3NhdmVfVC4KKyAqLworICAgIHN0YXRpYyB2b2lkCityZWdfcmVzdG9yZShzYXZlKQorICAgIHJlZ3NhdmVfVAkqc2F2ZTsKK3sKKyAgICBpZiAoUkVHX01VTFRJKQorICAgIHsKKwlpZiAocmVnbG51bSAhPSBzYXZlLT5yc191LnBvcy5sbnVtKQorCXsKKwkgICAgLyogb25seSBjYWxsIHJlZ19nZXRsaW5lKCkgd2hlbiB0aGUgbGluZSBudW1iZXIgY2hhbmdlZCB0byBzYXZlCisJICAgICAqIGEgYml0IG9mIHRpbWUgKi8KKwkgICAgcmVnbG51bSA9IHNhdmUtPnJzX3UucG9zLmxudW07CisJICAgIHJlZ2xpbmUgPSByZWdfZ2V0bGluZShyZWdsbnVtKTsKKwl9CisJcmVnaW5wdXQgPSByZWdsaW5lICsgc2F2ZS0+cnNfdS5wb3MuY29sOworICAgIH0KKyAgICBlbHNlCisJcmVnaW5wdXQgPSBzYXZlLT5yc191LnB0cjsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGN1cnJlbnQgcG9zaXRpb24gaXMgZXF1YWwgdG8gc2F2ZWQgcG9zaXRpb24uCisgKi8KKyAgICBzdGF0aWMgaW50CityZWdfc2F2ZV9lcXVhbChzYXZlKQorICAgIHJlZ3NhdmVfVAkqc2F2ZTsKK3sKKyAgICBpZiAoUkVHX01VTFRJKQorCXJldHVybiByZWdsbnVtID09IHNhdmUtPnJzX3UucG9zLmxudW0KKwkJCQkgICYmIHJlZ2lucHV0ID09IHJlZ2xpbmUgKyBzYXZlLT5yc191LnBvcy5jb2w7CisgICAgcmV0dXJuIHJlZ2lucHV0ID09IHNhdmUtPnJzX3UucHRyOworfQorCisvKgorICogVGVudGF0aXZlbHkgc2V0IHRoZSBzdWItZXhwcmVzc2lvbiBzdGFydCB0byB0aGUgY3VycmVudCBwb3NpdGlvbiAoYWZ0ZXIKKyAqIGNhbGxpbmcgcmVnbWF0Y2goKSB0aGV5IHdpbGwgaGF2ZSBjaGFuZ2VkKS4gIE5lZWQgdG8gc2F2ZSB0aGUgZXhpc3RpbmcKKyAqIHZhbHVlcyBmb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaC4KKyAqIFVzZSBzZV9zYXZlKCkgdG8gdXNlIHBvaW50ZXIgKHNhdmVfc2VfbXVsdGkoKSkgb3IgcG9zaXRpb24gKHNhdmVfc2Vfb25lKCkpLAorICogZGVwZW5kaW5nIG9uIFJFR19NVUxUSS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzYXZlX3NlX211bHRpKHNhdmVwLCBwb3NwKQorICAgIHNhdmVfc2VfVAkqc2F2ZXA7CisgICAgbHBvc19UCSpwb3NwOworeworICAgIHNhdmVwLT5zZV91LnBvcyA9ICpwb3NwOworICAgIHBvc3AtPmxudW0gPSByZWdsbnVtOworICAgIHBvc3AtPmNvbCA9IChjb2xucl9UKShyZWdpbnB1dCAtIHJlZ2xpbmUpOworfQorCisgICAgc3RhdGljIHZvaWQKK3NhdmVfc2Vfb25lKHNhdmVwLCBwcCkKKyAgICBzYXZlX3NlX1QJKnNhdmVwOworICAgIGNoYXJfdQkqKnBwOworeworICAgIHNhdmVwLT5zZV91LnB0ciA9ICpwcDsKKyAgICAqcHAgPSByZWdpbnB1dDsKK30KKworLyoKKyAqIENvbXBhcmUgYSBudW1iZXIgd2l0aCB0aGUgb3BlcmFuZCBvZiBSRV9MTlVNLCBSRV9DT0wgb3IgUkVfVkNPTC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3JlX251bV9jbXAodmFsLCBzY2FuKQorICAgIGxvbmdfdQl2YWw7CisgICAgY2hhcl91CSpzY2FuOworeworICAgIGxvbmdfdSAgbiA9IE9QRVJBTkRfTUlOKHNjYW4pOworCisgICAgaWYgKE9QRVJBTkRfQ01QKHNjYW4pID09ICc+JykKKwlyZXR1cm4gdmFsID4gbjsKKyAgICBpZiAoT1BFUkFORF9DTVAoc2NhbikgPT0gJzwnKQorCXJldHVybiB2YWwgPCBuOworICAgIHJldHVybiB2YWwgPT0gbjsKK30KKworCisjaWZkZWYgREVCVUcKKworLyoKKyAqIHJlZ2R1bXAgLSBkdW1wIGEgcmVnZXhwIG9udG8gc3Rkb3V0IGluIHZhZ3VlbHkgY29tcHJlaGVuc2libGUgZm9ybQorICovCisgICAgc3RhdGljIHZvaWQKK3JlZ2R1bXAocGF0dGVybiwgcikKKyAgICBjaGFyX3UJKnBhdHRlcm47CisgICAgcmVncHJvZ19UCSpyOworeworICAgIGNoYXJfdSAgKnM7CisgICAgaW50CSAgICBvcCA9IEVYQUNUTFk7CS8qIEFyYml0cmFyeSBub24tRU5EIG9wLiAqLworICAgIGNoYXJfdSAgKm5leHQ7CisgICAgY2hhcl91ICAqZW5kID0gTlVMTDsKKworICAgIHByaW50ZigiXHJcbnJlZ2NvbXAoJXMpOlxyXG4iLCBwYXR0ZXJuKTsKKworICAgIHMgPSByLT5wcm9ncmFtICsgMTsKKyAgICAvKgorICAgICAqIExvb3AgdW50aWwgd2UgZmluZCB0aGUgRU5EIHRoYXQgaXNuJ3QgYmVmb3JlIGEgcmVmZXJyZWQgbmV4dCAoYW4gRU5ECisgICAgICogY2FuIGFsc28gYXBwZWFyIGluIGEgTk9NQVRDSCBvcGVyYW5kKS4KKyAgICAgKi8KKyAgICB3aGlsZSAob3AgIT0gRU5EIHx8IHMgPD0gZW5kKQorICAgIHsKKwlvcCA9IE9QKHMpOworCXByaW50ZigiJTJkJXMiLCAoaW50KShzIC0gci0+cHJvZ3JhbSksIHJlZ3Byb3AocykpOyAvKiBXaGVyZSwgd2hhdC4gKi8KKwluZXh0ID0gcmVnbmV4dChzKTsKKwlpZiAobmV4dCA9PSBOVUxMKQkvKiBOZXh0IHB0ci4gKi8KKwkgICAgcHJpbnRmKCIoMCkiKTsKKwllbHNlCisJICAgIHByaW50ZigiKCVkKSIsIChpbnQpKChzIC0gci0+cHJvZ3JhbSkgKyAobmV4dCAtIHMpKSk7CisJaWYgKGVuZCA8IG5leHQpCisJICAgIGVuZCA9IG5leHQ7CisJaWYgKG9wID09IEJSQUNFX0xJTUlUUykKKwl7CisJICAgIC8qIFR3byBzaG9ydCBpbnRzICovCisJICAgIHByaW50ZigiIG1pbnZhbCAlbGQsIG1heHZhbCAlbGQiLCBPUEVSQU5EX01JTihzKSwgT1BFUkFORF9NQVgocykpOworCSAgICBzICs9IDg7CisJfQorCXMgKz0gMzsKKwlpZiAob3AgPT0gQU5ZT0YgfHwgb3AgPT0gQU5ZT0YgKyBBRERfTkwKKwkJfHwgb3AgPT0gQU5ZQlVUIHx8IG9wID09IEFOWUJVVCArIEFERF9OTAorCQl8fCBvcCA9PSBFWEFDVExZKQorCXsKKwkgICAgLyogTGl0ZXJhbCBzdHJpbmcsIHdoZXJlIHByZXNlbnQuICovCisJICAgIHdoaWxlICgqcyAhPSBOVUwpCisJCXByaW50ZigiJWMiLCAqcysrKTsKKwkgICAgcysrOworCX0KKwlwcmludGYoIlxyXG4iKTsKKyAgICB9CisKKyAgICAvKiBIZWFkZXIgZmllbGRzIG9mIGludGVyZXN0LiAqLworICAgIGlmIChyLT5yZWdzdGFydCAhPSBOVUwpCisJcHJpbnRmKCJzdGFydCBgJXMnIDB4JXg7ICIsIHItPnJlZ3N0YXJ0IDwgMjU2CisJCT8gKGNoYXIgKil0cmFuc2NoYXIoci0+cmVnc3RhcnQpCisJCTogIm11bHRpYnl0ZSIsIHItPnJlZ3N0YXJ0KTsKKyAgICBpZiAoci0+cmVnYW5jaCkKKwlwcmludGYoImFuY2hvcmVkOyAiKTsKKyAgICBpZiAoci0+cmVnbXVzdCAhPSBOVUxMKQorCXByaW50ZigibXVzdCBoYXZlIFwiJXNcIiIsIHItPnJlZ211c3QpOworICAgIHByaW50ZigiXHJcbiIpOworfQorCisvKgorICogcmVncHJvcCAtIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiBvZiBvcGNvZGUKKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorcmVncHJvcChvcCkKKyAgICBjaGFyX3UJICAgKm9wOworeworICAgIGNoYXJfdQkgICAgKnA7CisgICAgc3RhdGljIGNoYXJfdSAgIGJ1Zls1MF07CisKKyAgICAodm9pZCkgc3RyY3B5KGJ1ZiwgIjoiKTsKKworICAgIHN3aXRjaCAoT1Aob3ApKQorICAgIHsKKyAgICAgIGNhc2UgQk9MOgorCXAgPSAiQk9MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgRU9MOgorCXAgPSAiRU9MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgUkVfQk9GOgorCXAgPSAiQk9GIjsKKwlicmVhazsKKyAgICAgIGNhc2UgUkVfRU9GOgorCXAgPSAiRU9GIjsKKwlicmVhazsKKyAgICAgIGNhc2UgQ1VSU09SOgorCXAgPSAiQ1VSU09SIjsKKwlicmVhazsKKyAgICAgIGNhc2UgUkVfTE5VTToKKwlwID0gIlJFX0xOVU0iOworCWJyZWFrOworICAgICAgY2FzZSBSRV9DT0w6CisJcCA9ICJSRV9DT0wiOworCWJyZWFrOworICAgICAgY2FzZSBSRV9WQ09MOgorCXAgPSAiUkVfVkNPTCI7CisJYnJlYWs7CisgICAgICBjYXNlIEJPVzoKKwlwID0gIkJPVyI7CisJYnJlYWs7CisgICAgICBjYXNlIEVPVzoKKwlwID0gIkVPVyI7CisJYnJlYWs7CisgICAgICBjYXNlIEFOWToKKwlwID0gIkFOWSI7CisJYnJlYWs7CisgICAgICBjYXNlIEFOWSArIEFERF9OTDoKKwlwID0gIkFOWStOTCI7CisJYnJlYWs7CisgICAgICBjYXNlIEFOWU9GOgorCXAgPSAiQU5ZT0YiOworCWJyZWFrOworICAgICAgY2FzZSBBTllPRiArIEFERF9OTDoKKwlwID0gIkFOWU9GK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgQU5ZQlVUOgorCXAgPSAiQU5ZQlVUIjsKKwlicmVhazsKKyAgICAgIGNhc2UgQU5ZQlVUICsgQUREX05MOgorCXAgPSAiQU5ZQlVUK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgSURFTlQ6CisJcCA9ICJJREVOVCI7CisJYnJlYWs7CisgICAgICBjYXNlIElERU5UICsgQUREX05MOgorCXAgPSAiSURFTlQrTkwiOworCWJyZWFrOworICAgICAgY2FzZSBTSURFTlQ6CisJcCA9ICJTSURFTlQiOworCWJyZWFrOworICAgICAgY2FzZSBTSURFTlQgKyBBRERfTkw6CisJcCA9ICJTSURFTlQrTkwiOworCWJyZWFrOworICAgICAgY2FzZSBLV09SRDoKKwlwID0gIktXT1JEIjsKKwlicmVhazsKKyAgICAgIGNhc2UgS1dPUkQgKyBBRERfTkw6CisJcCA9ICJLV09SRCtOTCI7CisJYnJlYWs7CisgICAgICBjYXNlIFNLV09SRDoKKwlwID0gIlNLV09SRCI7CisJYnJlYWs7CisgICAgICBjYXNlIFNLV09SRCArIEFERF9OTDoKKwlwID0gIlNLV09SRCtOTCI7CisJYnJlYWs7CisgICAgICBjYXNlIEZOQU1FOgorCXAgPSAiRk5BTUUiOworCWJyZWFrOworICAgICAgY2FzZSBGTkFNRSArIEFERF9OTDoKKwlwID0gIkZOQU1FK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgU0ZOQU1FOgorCXAgPSAiU0ZOQU1FIjsKKwlicmVhazsKKyAgICAgIGNhc2UgU0ZOQU1FICsgQUREX05MOgorCXAgPSAiU0ZOQU1FK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgUFJJTlQ6CisJcCA9ICJQUklOVCI7CisJYnJlYWs7CisgICAgICBjYXNlIFBSSU5UICsgQUREX05MOgorCXAgPSAiUFJJTlQrTkwiOworCWJyZWFrOworICAgICAgY2FzZSBTUFJJTlQ6CisJcCA9ICJTUFJJTlQiOworCWJyZWFrOworICAgICAgY2FzZSBTUFJJTlQgKyBBRERfTkw6CisJcCA9ICJTUFJJTlQrTkwiOworCWJyZWFrOworICAgICAgY2FzZSBXSElURToKKwlwID0gIldISVRFIjsKKwlicmVhazsKKyAgICAgIGNhc2UgV0hJVEUgKyBBRERfTkw6CisJcCA9ICJXSElURStOTCI7CisJYnJlYWs7CisgICAgICBjYXNlIE5XSElURToKKwlwID0gIk5XSElURSI7CisJYnJlYWs7CisgICAgICBjYXNlIE5XSElURSArIEFERF9OTDoKKwlwID0gIk5XSElURStOTCI7CisJYnJlYWs7CisgICAgICBjYXNlIERJR0lUOgorCXAgPSAiRElHSVQiOworCWJyZWFrOworICAgICAgY2FzZSBESUdJVCArIEFERF9OTDoKKwlwID0gIkRJR0lUK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTkRJR0lUOgorCXAgPSAiTkRJR0lUIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTkRJR0lUICsgQUREX05MOgorCXAgPSAiTkRJR0lUK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgSEVYOgorCXAgPSAiSEVYIjsKKwlicmVhazsKKyAgICAgIGNhc2UgSEVYICsgQUREX05MOgorCXAgPSAiSEVYK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTkhFWDoKKwlwID0gIk5IRVgiOworCWJyZWFrOworICAgICAgY2FzZSBOSEVYICsgQUREX05MOgorCXAgPSAiTkhFWCtOTCI7CisJYnJlYWs7CisgICAgICBjYXNlIE9DVEFMOgorCXAgPSAiT0NUQUwiOworCWJyZWFrOworICAgICAgY2FzZSBPQ1RBTCArIEFERF9OTDoKKwlwID0gIk9DVEFMK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTk9DVEFMOgorCXAgPSAiTk9DVEFMIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTk9DVEFMICsgQUREX05MOgorCXAgPSAiTk9DVEFMK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgV09SRDoKKwlwID0gIldPUkQiOworCWJyZWFrOworICAgICAgY2FzZSBXT1JEICsgQUREX05MOgorCXAgPSAiV09SRCtOTCI7CisJYnJlYWs7CisgICAgICBjYXNlIE5XT1JEOgorCXAgPSAiTldPUkQiOworCWJyZWFrOworICAgICAgY2FzZSBOV09SRCArIEFERF9OTDoKKwlwID0gIk5XT1JEK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgSEVBRDoKKwlwID0gIkhFQUQiOworCWJyZWFrOworICAgICAgY2FzZSBIRUFEICsgQUREX05MOgorCXAgPSAiSEVBRCtOTCI7CisJYnJlYWs7CisgICAgICBjYXNlIE5IRUFEOgorCXAgPSAiTkhFQUQiOworCWJyZWFrOworICAgICAgY2FzZSBOSEVBRCArIEFERF9OTDoKKwlwID0gIk5IRUFEK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgQUxQSEE6CisJcCA9ICJBTFBIQSI7CisJYnJlYWs7CisgICAgICBjYXNlIEFMUEhBICsgQUREX05MOgorCXAgPSAiQUxQSEErTkwiOworCWJyZWFrOworICAgICAgY2FzZSBOQUxQSEE6CisJcCA9ICJOQUxQSEEiOworCWJyZWFrOworICAgICAgY2FzZSBOQUxQSEEgKyBBRERfTkw6CisJcCA9ICJOQUxQSEErTkwiOworCWJyZWFrOworICAgICAgY2FzZSBMT1dFUjoKKwlwID0gIkxPV0VSIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTE9XRVIgKyBBRERfTkw6CisJcCA9ICJMT1dFUitOTCI7CisJYnJlYWs7CisgICAgICBjYXNlIE5MT1dFUjoKKwlwID0gIk5MT1dFUiI7CisJYnJlYWs7CisgICAgICBjYXNlIE5MT1dFUiArIEFERF9OTDoKKwlwID0gIk5MT1dFUitOTCI7CisJYnJlYWs7CisgICAgICBjYXNlIFVQUEVSOgorCXAgPSAiVVBQRVIiOworCWJyZWFrOworICAgICAgY2FzZSBVUFBFUiArIEFERF9OTDoKKwlwID0gIlVQUEVSK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTlVQUEVSOgorCXAgPSAiTlVQUEVSIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTlVQUEVSICsgQUREX05MOgorCXAgPSAiTlVQUEVSK05MIjsKKwlicmVhazsKKyAgICAgIGNhc2UgQlJBTkNIOgorCXAgPSAiQlJBTkNIIjsKKwlicmVhazsKKyAgICAgIGNhc2UgRVhBQ1RMWToKKwlwID0gIkVYQUNUTFkiOworCWJyZWFrOworICAgICAgY2FzZSBOT1RISU5HOgorCXAgPSAiTk9USElORyI7CisJYnJlYWs7CisgICAgICBjYXNlIEJBQ0s6CisJcCA9ICJCQUNLIjsKKwlicmVhazsKKyAgICAgIGNhc2UgRU5EOgorCXAgPSAiRU5EIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTU9QRU4gKyAwOgorCXAgPSAiTUFUQ0ggU1RBUlQiOworCWJyZWFrOworICAgICAgY2FzZSBNT1BFTiArIDE6CisgICAgICBjYXNlIE1PUEVOICsgMjoKKyAgICAgIGNhc2UgTU9QRU4gKyAzOgorICAgICAgY2FzZSBNT1BFTiArIDQ6CisgICAgICBjYXNlIE1PUEVOICsgNToKKyAgICAgIGNhc2UgTU9QRU4gKyA2OgorICAgICAgY2FzZSBNT1BFTiArIDc6CisgICAgICBjYXNlIE1PUEVOICsgODoKKyAgICAgIGNhc2UgTU9QRU4gKyA5OgorCXNwcmludGYoYnVmICsgU1RSTEVOKGJ1ZiksICJNT1BFTiVkIiwgT1Aob3ApIC0gTU9QRU4pOworCXAgPSBOVUxMOworCWJyZWFrOworICAgICAgY2FzZSBNQ0xPU0UgKyAwOgorCXAgPSAiTUFUQ0ggRU5EIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTUNMT1NFICsgMToKKyAgICAgIGNhc2UgTUNMT1NFICsgMjoKKyAgICAgIGNhc2UgTUNMT1NFICsgMzoKKyAgICAgIGNhc2UgTUNMT1NFICsgNDoKKyAgICAgIGNhc2UgTUNMT1NFICsgNToKKyAgICAgIGNhc2UgTUNMT1NFICsgNjoKKyAgICAgIGNhc2UgTUNMT1NFICsgNzoKKyAgICAgIGNhc2UgTUNMT1NFICsgODoKKyAgICAgIGNhc2UgTUNMT1NFICsgOToKKwlzcHJpbnRmKGJ1ZiArIFNUUkxFTihidWYpLCAiTUNMT1NFJWQiLCBPUChvcCkgLSBNQ0xPU0UpOworCXAgPSBOVUxMOworCWJyZWFrOworICAgICAgY2FzZSBCQUNLUkVGICsgMToKKyAgICAgIGNhc2UgQkFDS1JFRiArIDI6CisgICAgICBjYXNlIEJBQ0tSRUYgKyAzOgorICAgICAgY2FzZSBCQUNLUkVGICsgNDoKKyAgICAgIGNhc2UgQkFDS1JFRiArIDU6CisgICAgICBjYXNlIEJBQ0tSRUYgKyA2OgorICAgICAgY2FzZSBCQUNLUkVGICsgNzoKKyAgICAgIGNhc2UgQkFDS1JFRiArIDg6CisgICAgICBjYXNlIEJBQ0tSRUYgKyA5OgorCXNwcmludGYoYnVmICsgU1RSTEVOKGJ1ZiksICJCQUNLUkVGJWQiLCBPUChvcCkgLSBCQUNLUkVGKTsKKwlwID0gTlVMTDsKKwlicmVhazsKKyAgICAgIGNhc2UgTk9QRU46CisJcCA9ICJOT1BFTiI7CisJYnJlYWs7CisgICAgICBjYXNlIE5DTE9TRToKKwlwID0gIk5DTE9TRSI7CisJYnJlYWs7CisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICAgIGNhc2UgWk9QRU4gKyAxOgorICAgICAgY2FzZSBaT1BFTiArIDI6CisgICAgICBjYXNlIFpPUEVOICsgMzoKKyAgICAgIGNhc2UgWk9QRU4gKyA0OgorICAgICAgY2FzZSBaT1BFTiArIDU6CisgICAgICBjYXNlIFpPUEVOICsgNjoKKyAgICAgIGNhc2UgWk9QRU4gKyA3OgorICAgICAgY2FzZSBaT1BFTiArIDg6CisgICAgICBjYXNlIFpPUEVOICsgOToKKwlzcHJpbnRmKGJ1ZiArIFNUUkxFTihidWYpLCAiWk9QRU4lZCIsIE9QKG9wKSAtIFpPUEVOKTsKKwlwID0gTlVMTDsKKwlicmVhazsKKyAgICAgIGNhc2UgWkNMT1NFICsgMToKKyAgICAgIGNhc2UgWkNMT1NFICsgMjoKKyAgICAgIGNhc2UgWkNMT1NFICsgMzoKKyAgICAgIGNhc2UgWkNMT1NFICsgNDoKKyAgICAgIGNhc2UgWkNMT1NFICsgNToKKyAgICAgIGNhc2UgWkNMT1NFICsgNjoKKyAgICAgIGNhc2UgWkNMT1NFICsgNzoKKyAgICAgIGNhc2UgWkNMT1NFICsgODoKKyAgICAgIGNhc2UgWkNMT1NFICsgOToKKwlzcHJpbnRmKGJ1ZiArIFNUUkxFTihidWYpLCAiWkNMT1NFJWQiLCBPUChvcCkgLSBaQ0xPU0UpOworCXAgPSBOVUxMOworCWJyZWFrOworICAgICAgY2FzZSBaUkVGICsgMToKKyAgICAgIGNhc2UgWlJFRiArIDI6CisgICAgICBjYXNlIFpSRUYgKyAzOgorICAgICAgY2FzZSBaUkVGICsgNDoKKyAgICAgIGNhc2UgWlJFRiArIDU6CisgICAgICBjYXNlIFpSRUYgKyA2OgorICAgICAgY2FzZSBaUkVGICsgNzoKKyAgICAgIGNhc2UgWlJFRiArIDg6CisgICAgICBjYXNlIFpSRUYgKyA5OgorCXNwcmludGYoYnVmICsgU1RSTEVOKGJ1ZiksICJaUkVGJWQiLCBPUChvcCkgLSBaUkVGKTsKKwlwID0gTlVMTDsKKwlicmVhazsKKyNlbmRpZgorICAgICAgY2FzZSBTVEFSOgorCXAgPSAiU1RBUiI7CisJYnJlYWs7CisgICAgICBjYXNlIFBMVVM6CisJcCA9ICJQTFVTIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTk9NQVRDSDoKKwlwID0gIk5PTUFUQ0giOworCWJyZWFrOworICAgICAgY2FzZSBNQVRDSDoKKwlwID0gIk1BVENIIjsKKwlicmVhazsKKyAgICAgIGNhc2UgQkVISU5EOgorCXAgPSAiQkVISU5EIjsKKwlicmVhazsKKyAgICAgIGNhc2UgTk9CRUhJTkQ6CisJcCA9ICJOT0JFSElORCI7CisJYnJlYWs7CisgICAgICBjYXNlIFNVQlBBVDoKKwlwID0gIlNVQlBBVCI7CisJYnJlYWs7CisgICAgICBjYXNlIEJSQUNFX0xJTUlUUzoKKwlwID0gIkJSQUNFX0xJTUlUUyI7CisJYnJlYWs7CisgICAgICBjYXNlIEJSQUNFX1NJTVBMRToKKwlwID0gIkJSQUNFX1NJTVBMRSI7CisJYnJlYWs7CisgICAgICBjYXNlIEJSQUNFX0NPTVBMRVggKyAwOgorICAgICAgY2FzZSBCUkFDRV9DT01QTEVYICsgMToKKyAgICAgIGNhc2UgQlJBQ0VfQ09NUExFWCArIDI6CisgICAgICBjYXNlIEJSQUNFX0NPTVBMRVggKyAzOgorICAgICAgY2FzZSBCUkFDRV9DT01QTEVYICsgNDoKKyAgICAgIGNhc2UgQlJBQ0VfQ09NUExFWCArIDU6CisgICAgICBjYXNlIEJSQUNFX0NPTVBMRVggKyA2OgorICAgICAgY2FzZSBCUkFDRV9DT01QTEVYICsgNzoKKyAgICAgIGNhc2UgQlJBQ0VfQ09NUExFWCArIDg6CisgICAgICBjYXNlIEJSQUNFX0NPTVBMRVggKyA5OgorCXNwcmludGYoYnVmICsgU1RSTEVOKGJ1ZiksICJCUkFDRV9DT01QTEVYJWQiLCBPUChvcCkgLSBCUkFDRV9DT01QTEVYKTsKKwlwID0gTlVMTDsKKwlicmVhazsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgICBjYXNlIE1VTFRJQllURUNPREU6CisJcCA9ICJNVUxUSUJZVEVDT0RFIjsKKwlicmVhazsKKyNlbmRpZgorICAgICAgY2FzZSBORVdMOgorCXAgPSAiTkVXTCI7CisJYnJlYWs7CisgICAgICBkZWZhdWx0OgorCXNwcmludGYoYnVmICsgU1RSTEVOKGJ1ZiksICJjb3JydXB0ICVkIiwgT1Aob3ApKTsKKwlwID0gTlVMTDsKKwlicmVhazsKKyAgICB9CisgICAgaWYgKHAgIT0gTlVMTCkKKwkodm9pZCkgc3RyY2F0KGJ1ZiwgcCk7CisgICAgcmV0dXJuIGJ1ZjsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIHZvaWQgbWJfZGVjb21wb3NlIF9fQVJHUygoaW50IGMsIGludCAqYzEsIGludCAqYzIsIGludCAqYzMpKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQgYSwgYiwgYzsKK30gZGVjb21wX1Q7CisKKworLyogMHhmYjIwIC0gMHhmYjRmICovCitkZWNvbXBfVCBkZWNvbXBfdGFibGVbMHhmYjRmLTB4ZmIyMCsxXSA9Cit7CisgICAgezB4NWUyLDAsMH0sCQkvKiAweGZiMjAJYWx0IGF5aW4gKi8KKyAgICB7MHg1ZDAsMCwwfSwJCS8qIDB4ZmIyMQlhbHQgYWxlZiAqLworICAgIHsweDVkMywwLDB9LAkJLyogMHhmYjIyCWFsdCBkYWxldCAqLworICAgIHsweDVkNCwwLDB9LAkJLyogMHhmYjIzCWFsdCBoZSAqLworICAgIHsweDVkYiwwLDB9LAkJLyogMHhmYjI0CWFsdCBrYWYgKi8KKyAgICB7MHg1ZGMsMCwwfSwJCS8qIDB4ZmIyNQlhbHQgbGFtZWQgKi8KKyAgICB7MHg1ZGQsMCwwfSwJCS8qIDB4ZmIyNglhbHQgbWVtLXNvZml0ICovCisgICAgezB4NWU4LDAsMH0sCQkvKiAweGZiMjcJYWx0IHJlc2ggKi8KKyAgICB7MHg1ZWEsMCwwfSwJCS8qIDB4ZmIyOAlhbHQgdGF2ICovCisgICAgeycrJywgMCwgMH0sCQkvKiAweGZiMjkJYWx0IHBsdXMgKi8KKyAgICB7MHg1ZTksIDB4NWMxLCAwfSwJCS8qIDB4ZmIyYQlzaGluK3NoaW4tZG90ICovCisgICAgezB4NWU5LCAweDVjMiwgMH0sCQkvKiAweGZiMmIJc2hpbitzaW4tZG90ICovCisgICAgezB4NWU5LCAweDVjMSwgMHg1YmN9LAkvKiAweGZiMmMJc2hpbitzaGluLWRvdCtkYWdlc2ggKi8KKyAgICB7MHg1ZTksIDB4NWMyLCAweDViY30sCS8qIDB4ZmIyZAlzaGluK3Npbi1kb3QrZGFnZXNoICovCisgICAgezB4NWQwLCAweDViNywgMH0sCQkvKiAweGZiMmUJYWxlZitwYXRhaCAqLworICAgIHsweDVkMCwgMHg1YjgsIDB9LAkJLyogMHhmYjJmCWFsZWYrcWFtYXRzICovCisgICAgezB4NWQwLCAweDViNCwgMH0sCQkvKiAweGZiMzAJYWxlZitoaXJpcSAqLworICAgIHsweDVkMSwgMHg1YmMsIDB9LAkJLyogMHhmYjMxCWJldCtkYWdlc2ggKi8KKyAgICB7MHg1ZDIsIDB4NWJjLCAwfSwJCS8qIDB4ZmIzMglnaW1lbCtkYWdlc2ggKi8KKyAgICB7MHg1ZDMsIDB4NWJjLCAwfSwJCS8qIDB4ZmIzMwlkYWxldCtkYWdlc2ggKi8KKyAgICB7MHg1ZDQsIDB4NWJjLCAwfSwJCS8qIDB4ZmIzNAloZStkYWdlc2ggKi8KKyAgICB7MHg1ZDUsIDB4NWJjLCAwfSwJCS8qIDB4ZmIzNQl2YXYrZGFnZXNoICovCisgICAgezB4NWQ2LCAweDViYywgMH0sCQkvKiAweGZiMzYJemF5aW4rZGFnZXNoICovCisgICAgezB4ZmIzNywgMCwgMH0sCQkvKiAweGZiMzcgLS0gVU5VU0VEICovCisgICAgezB4NWQ4LCAweDViYywgMH0sCQkvKiAweGZiMzgJdGV0K2RhZ2VzaCAqLworICAgIHsweDVkOSwgMHg1YmMsIDB9LAkJLyogMHhmYjM5CXl1ZCtkYWdlc2ggKi8KKyAgICB7MHg1ZGEsIDB4NWJjLCAwfSwJCS8qIDB4ZmIzYQlrYWYgc29maXQrZGFnZXNoICovCisgICAgezB4NWRiLCAweDViYywgMH0sCQkvKiAweGZiM2IJa2FmK2RhZ2VzaCAqLworICAgIHsweDVkYywgMHg1YmMsIDB9LAkJLyogMHhmYjNjCWxhbWVkK2RhZ2VzaCAqLworICAgIHsweGZiM2QsIDAsIDB9LAkJLyogMHhmYjNkIC0tIFVOVVNFRCAqLworICAgIHsweDVkZSwgMHg1YmMsIDB9LAkJLyogMHhmYjNlCW1lbStkYWdlc2ggKi8KKyAgICB7MHhmYjNmLCAwLCAwfSwJCS8qIDB4ZmIzZiAtLSBVTlVTRUQgKi8KKyAgICB7MHg1ZTAsIDB4NWJjLCAwfSwJCS8qIDB4ZmI0MAludW4rZGFnZXNoICovCisgICAgezB4NWUxLCAweDViYywgMH0sCQkvKiAweGZiNDEJc2FtZWNoK2RhZ2VzaCAqLworICAgIHsweGZiNDIsIDAsIDB9LAkJLyogMHhmYjQyIC0tIFVOVVNFRCAqLworICAgIHsweDVlMywgMHg1YmMsIDB9LAkJLyogMHhmYjQzCXBlIHNvZml0K2RhZ2VzaCAqLworICAgIHsweDVlNCwgMHg1YmMsMH0sCQkvKiAweGZiNDQJcGUrZGFnZXNoICovCisgICAgezB4ZmI0NSwgMCwgMH0sCQkvKiAweGZiNDUgLS0gVU5VU0VEICovCisgICAgezB4NWU2LCAweDViYywgMH0sCQkvKiAweGZiNDYJdHNhZGkrZGFnZXNoICovCisgICAgezB4NWU3LCAweDViYywgMH0sCQkvKiAweGZiNDcJcW9mK2RhZ2VzaCAqLworICAgIHsweDVlOCwgMHg1YmMsIDB9LAkJLyogMHhmYjQ4CXJlc2grZGFnZXNoICovCisgICAgezB4NWU5LCAweDViYywgMH0sCQkvKiAweGZiNDkJc2hpbitkYWdlc2ggKi8KKyAgICB7MHg1ZWEsIDB4NWJjLCAwfSwJCS8qIDB4ZmI0YQl0YXYrZGFnZXNoICovCisgICAgezB4NWQ1LCAweDViOSwgMH0sCQkvKiAweGZiNGIJdmF2K2hvbGFtICovCisgICAgezB4NWQxLCAweDViZiwgMH0sCQkvKiAweGZiNGMJYmV0K3JhZmUgKi8KKyAgICB7MHg1ZGIsIDB4NWJmLCAwfSwJCS8qIDB4ZmI0ZAlrYWYrcmFmZSAqLworICAgIHsweDVlNCwgMHg1YmYsIDB9LAkJLyogMHhmYjRlCXBlK3JhZmUgKi8KKyAgICB7MHg1ZDAsIDB4NWRjLCAwfQkJLyogMHhmYjRmCWFsZWYtbGFtZWQgKi8KK307CisKKyAgICBzdGF0aWMgdm9pZAorbWJfZGVjb21wb3NlKGMsIGMxLCBjMiwgYzMpCisgICAgaW50IGMsICpjMSwgKmMyLCAqYzM7Cit7CisgICAgZGVjb21wX1QgZDsKKworICAgIGlmIChjID49IDB4NGIyMCAmJiBjIDw9IDB4ZmI0ZikKKyAgICB7CisJZCA9IGRlY29tcF90YWJsZVtjIC0gMHhmYjIwXTsKKwkqYzEgPSBkLmE7CisJKmMyID0gZC5iOworCSpjMyA9IGQuYzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkqYzEgPSBjOworCSpjMiA9ICpjMyA9IDA7CisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBDb21wYXJlIHR3byBzdHJpbmdzLCBpZ25vcmUgY2FzZSBpZiBpcmVnX2ljIHNldC4KKyAqIFJldHVybiAwIGlmIHN0cmluZ3MgbWF0Y2gsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqIENvcnJlY3QgdGhlIGxlbmd0aCAiKm4iIHdoZW4gY29tcG9zaW5nIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQuCisgKi8KKyAgICBzdGF0aWMgaW50Citjc3RybmNtcChzMSwgczIsIG4pCisgICAgY2hhcl91CSpzMSwgKnMyOworICAgIGludAkJKm47Cit7CisgICAgaW50CQlyZXN1bHQ7CisKKyAgICBpZiAoIWlyZWdfaWMpCisJcmVzdWx0ID0gU1RSTkNNUChzMSwgczIsICpuKTsKKyAgICBlbHNlCisJcmVzdWx0ID0gTUJfU1RSTklDTVAoczEsIHMyLCAqbik7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyogaWYgaXQgZmFpbGVkIGFuZCBpdCdzIHV0ZjggYW5kIHdlIHdhbnQgdG8gY29tYmluZWlnbm9yZTogKi8KKyAgICBpZiAocmVzdWx0ICE9IDAgJiYgZW5jX3V0ZjggJiYgaXJlZ19pY29tYmluZSkKKyAgICB7CisJY2hhcl91CSpzdHIxLCAqc3RyMjsKKwlpbnQJYzEsIGMyLCBjMTEsIGMxMjsKKwlpbnQJaXg7CisJaW50CWp1bms7CisKKwkvKiB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgc3RyY21wIG91cnNlbHZlcywgc2luY2UgaXQgaXMgbmVjZXNzYXJ5IHRvCisJICogZGVhbCB3aXRoIHRoZSBjb21wb3NpbmcgY2hhcmFjdGVycyBieSBpZ25vcmluZyB0aGVtOiAqLworCXN0cjEgPSBzMTsKKwlzdHIyID0gczI7CisJYzEgPSBjMiA9IDA7CisJZm9yIChpeCA9IDA7IGl4IDwgKm47ICkKKwl7CisJICAgIGMxID0gbWJfcHRyMmNoYXJfYWR2KCZzdHIxKTsKKwkgICAgYzIgPSBtYl9wdHIyY2hhcl9hZHYoJnN0cjIpOworCSAgICBpeCArPSB1dGZfY2hhcjJsZW4oYzEpOworCisJICAgIC8qIGRlY29tcG9zZSB0aGUgY2hhcmFjdGVyIGlmIG5lY2Vzc2FyeSwgaW50byAnYmFzZScgY2hhcmFjdGVycworCSAgICAgKiBiZWNhdXNlIEkgZG9uJ3QgY2FyZSBhYm91dCBBcmFiaWMsIEkgd2lsbCBoYXJkLWNvZGUgdGhlIEhlYnJldworCSAgICAgKiB3aGljaCBJICpkbyogY2FyZSBhYm91dCEgIFNvIHN1ZSBtZS4uLiAqLworCSAgICBpZiAoYzEgIT0gYzIgJiYgKCFpcmVnX2ljIHx8IHV0Zl9mb2xkKGMxKSAhPSB1dGZfZm9sZChjMikpKQorCSAgICB7CisJCS8qIGRlY29tcG9zaXRpb24gbmVjZXNzYXJ5PyAqLworCQltYl9kZWNvbXBvc2UoYzEsICZjMTEsICZqdW5rLCAmanVuayk7CisJCW1iX2RlY29tcG9zZShjMiwgJmMxMiwgJmp1bmssICZqdW5rKTsKKwkJYzEgPSBjMTE7CisJCWMyID0gYzEyOworCQlpZiAoYzExICE9IGMxMiAmJiAoIWlyZWdfaWMgfHwgdXRmX2ZvbGQoYzExKSAhPSB1dGZfZm9sZChjMTIpKSkKKwkJICAgIGJyZWFrOworCSAgICB9CisJfQorCXJlc3VsdCA9IGMyIC0gYzE7CisJaWYgKHJlc3VsdCA9PSAwKQorCSAgICAqbiA9IChpbnQpKHN0cjIgLSBzMik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogY3N0cmNocjogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGEgbG90IGZvciBzaW1wbGUgc2VhcmNoZXMsIGtlZXAgaXQgZmFzdCEKKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorY3N0cmNocihzLCBjKQorICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWM7Cit7CisgICAgY2hhcl91CSpwOworICAgIGludAkJY2M7CisKKyAgICBpZiAoIWlyZWdfaWMKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIHx8ICghZW5jX3V0ZjggJiYgbWJfY2hhcjJsZW4oYykgPiAxKQorI2VuZGlmCisJICAgICkKKwlyZXR1cm4gdmltX3N0cmNocihzLCBjKTsKKworICAgIC8qIHRvbG93ZXIoKSBhbmQgdG91cHBlcigpIGNhbiBiZSBzbG93LCBjb21wYXJpbmcgdHdpY2Ugc2hvdWxkIGJlIGEgbG90CisgICAgICogZmFzdGVyIChlc3AuIHdoZW4gdXNpbmcgTVMgVmlzdWFsIEMrKyEpLgorICAgICAqIEZvciBVVEYtOCBuZWVkIHRvIHVzZSBmb2xkZWQgY2FzZS4gKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGVuY191dGY4ICYmIGMgPiAweDgwKQorCWNjID0gdXRmX2ZvbGQoYyk7CisgICAgZWxzZQorI2VuZGlmCisJIGlmIChpc3VwcGVyKGMpKQorCWNjID0gVE9MT1dFUl9MT0MoYyk7CisgICAgZWxzZSBpZiAoaXNsb3dlcihjKSkKKwljYyA9IFRPVVBQRVJfTE9DKGMpOworICAgIGVsc2UKKwlyZXR1cm4gdmltX3N0cmNocihzLCBjKTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoaGFzX21ieXRlKQorICAgIHsKKwlmb3IgKHAgPSBzOyAqcCAhPSBOVUw7IHAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSkKKwl7CisJICAgIGlmIChlbmNfdXRmOCAmJiBjID4gMHg4MCkKKwkgICAgeworCQlpZiAodXRmX2ZvbGQodXRmX3B0cjJjaGFyKHApKSA9PSBjYykKKwkJICAgIHJldHVybiBwOworCSAgICB9CisJICAgIGVsc2UgaWYgKCpwID09IGMgfHwgKnAgPT0gY2MpCisJCXJldHVybiBwOworCX0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJLyogRmFzdGVyIHZlcnNpb24gZm9yIHdoZW4gdGhlcmUgYXJlIG5vIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gKi8KKwlmb3IgKHAgPSBzOyAqcCAhPSBOVUw7ICsrcCkKKwkgICAgaWYgKCpwID09IGMgfHwgKnAgPT0gY2MpCisJCXJldHVybiBwOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkgICAgICByZWdzdWIgc3R1ZmYJCQkgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBzdHVmZiBiZWxvdyByZWFsbHkgY29uZnVzZXMgY2Mgb24gYW4gU0dJIC0tIHdlYmIgKi8KKyNpZmRlZiBfX3NnaQorIyB1bmRlZiBfX0FSR1MKKyMgZGVmaW5lIF9fQVJHUyh4KSAgKCkKKyNlbmRpZgorCisvKgorICogV2Ugc2hvdWxkIGRlZmluZSBmdHByIGFzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHJldHVybmluZyBhIHBvaW50ZXIgdG8KKyAqIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIC4uLgorICogVGhpcyBpcyBpbXBvc3NpYmxlLCBzbyB3ZSBkZWNsYXJlIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHJldHVybmluZyBhCisgKiBwb2ludGVyIHRvIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHZvaWQuIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBjb21waWxlcnMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKigqZnB0cikgX19BUkdTKChjaGFyX3UgKiwgaW50KSkpKCk7CisKK3N0YXRpYyBmcHRyIGRvX3VwcGVyIF9fQVJHUygoY2hhcl91ICosIGludCkpOworc3RhdGljIGZwdHIgZG9fVXBwZXIgX19BUkdTKChjaGFyX3UgKiwgaW50KSk7CitzdGF0aWMgZnB0ciBkb19sb3dlciBfX0FSR1MoKGNoYXJfdSAqLCBpbnQpKTsKK3N0YXRpYyBmcHRyIGRvX0xvd2VyIF9fQVJHUygoY2hhcl91ICosIGludCkpOworCitzdGF0aWMgaW50IHZpbV9yZWdzdWJfYm90aCBfX0FSR1MoKGNoYXJfdSAqc291cmNlLCBjaGFyX3UgKmRlc3QsIGludCBjb3B5LCBpbnQgbWFnaWMsIGludCBiYWNrc2xhc2gpKTsKKworICAgIHN0YXRpYyBmcHRyCitkb191cHBlcihkLCBjKQorICAgIGNoYXJfdSAqZDsKKyAgICBpbnQgYzsKK3sKKyAgICAqZCA9IFRPVVBQRVJfTE9DKGMpOworCisgICAgcmV0dXJuIChmcHRyKU5VTEw7Cit9CisKKyAgICBzdGF0aWMgZnB0cgorZG9fVXBwZXIoZCwgYykKKyAgICBjaGFyX3UgKmQ7CisgICAgaW50IGM7Cit7CisgICAgKmQgPSBUT1VQUEVSX0xPQyhjKTsKKworICAgIHJldHVybiAoZnB0cilkb19VcHBlcjsKK30KKworICAgIHN0YXRpYyBmcHRyCitkb19sb3dlcihkLCBjKQorICAgIGNoYXJfdSAqZDsKKyAgICBpbnQgYzsKK3sKKyAgICAqZCA9IFRPTE9XRVJfTE9DKGMpOworCisgICAgcmV0dXJuIChmcHRyKU5VTEw7Cit9CisKKyAgICBzdGF0aWMgZnB0cgorZG9fTG93ZXIoZCwgYykKKyAgICBjaGFyX3UJKmQ7CisgICAgaW50CQljOworeworICAgICpkID0gVE9MT1dFUl9MT0MoYyk7CisKKyAgICByZXR1cm4gKGZwdHIpZG9fTG93ZXI7Cit9CisKKy8qCisgKiByZWd0aWxkZSgpOiBSZXBsYWNlIHRpbGRlcyBpbiB0aGUgcGF0dGVybiBieSB0aGUgb2xkIHBhdHRlcm4uCisgKgorICogU2hvcnQgZXhwbGFuYXRpb24gb2YgdGhlIHRpbGRlOiBJdCBzdGFuZHMgZm9yIHRoZSBwcmV2aW91cyByZXBsYWNlbWVudAorICogcGF0dGVybi4gIElmIHRoYXQgcHJldmlvdXMgcGF0dGVybiBhbHNvIGNvbnRhaW5zIGEgfiB3ZSBzaG91bGQgZ28gYmFjayBhCisgKiBzdGVwIGZ1cnRoZXIuLi4gIEJ1dCB3ZSBpbnNlcnQgdGhlIHByZXZpb3VzIHBhdHRlcm4gaW50byB0aGUgY3VycmVudCBvbmUKKyAqIGFuZCByZW1lbWJlciB0aGF0LgorICogVGhpcyBzdGlsbCBkb2VzIG5vdCBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgIm1hZ2ljIiBjaGFuZ2VzLiBUT0RPPworICoKKyAqIFRoZSB0aWxkZXMgYXJlIHBhcnNlZCBvbmNlIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byB2aW1fcmVnc3ViKCkuCisgKi8KKyAgICBjaGFyX3UgKgorcmVndGlsZGUoc291cmNlLCBtYWdpYykKKyAgICBjaGFyX3UJKnNvdXJjZTsKKyAgICBpbnQJCW1hZ2ljOworeworICAgIGNoYXJfdQkqbmV3c3ViID0gc291cmNlOworICAgIGNoYXJfdQkqdG1wc3ViOworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCXByZXZsZW47CisKKyAgICBmb3IgKHAgPSBuZXdzdWI7ICpwOyArK3ApCisgICAgeworCWlmICgoKnAgPT0gJ34nICYmIG1hZ2ljKSB8fCAoKnAgPT0gJ1xcJyAmJiAqKHAgKyAxKSA9PSAnficgJiYgIW1hZ2ljKSkKKwl7CisJICAgIGlmIChyZWdfcHJldl9zdWIgIT0gTlVMTCkKKwkgICAgeworCQkvKiBsZW5ndGggPSBsZW4obmV3c3ViKSAtIDEgKyBsZW4ocHJldl9zdWIpICsgMSAqLworCQlwcmV2bGVuID0gKGludClTVFJMRU4ocmVnX3ByZXZfc3ViKTsKKwkJdG1wc3ViID0gYWxsb2MoKHVuc2lnbmVkKShTVFJMRU4obmV3c3ViKSArIHByZXZsZW4pKTsKKwkJaWYgKHRtcHN1YiAhPSBOVUxMKQorCQl7CisJCSAgICAvKiBjb3B5IHByZWZpeCAqLworCQkgICAgbGVuID0gKGludCkocCAtIG5ld3N1Yik7CS8qIG5vdCBpbmNsdWRpbmcgfiAqLworCQkgICAgbWNoX21lbW1vdmUodG1wc3ViLCBuZXdzdWIsIChzaXplX3QpbGVuKTsKKwkJICAgIC8qIGludGVycHJldGF0ZSB0aWxkZSAqLworCQkgICAgbWNoX21lbW1vdmUodG1wc3ViICsgbGVuLCByZWdfcHJldl9zdWIsIChzaXplX3QpcHJldmxlbik7CisJCSAgICAvKiBjb3B5IHBvc3RmaXggKi8KKwkJICAgIGlmICghbWFnaWMpCisJCQkrK3A7CQkJLyogYmFjayBvZmYgXCAqLworCQkgICAgU1RSQ1BZKHRtcHN1YiArIGxlbiArIHByZXZsZW4sIHAgKyAxKTsKKworCQkgICAgaWYgKG5ld3N1YiAhPSBzb3VyY2UpCS8qIGFscmVhZHkgYWxsb2NhdGVkIG5ld3N1YiAqLworCQkJdmltX2ZyZWUobmV3c3ViKTsKKwkJICAgIG5ld3N1YiA9IHRtcHN1YjsKKwkJICAgIHAgPSBuZXdzdWIgKyBsZW4gKyBwcmV2bGVuOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAobWFnaWMpCisJCVNUUkNQWShwLCBwICsgMSk7CQkvKiByZW1vdmUgJ34nICovCisJICAgIGVsc2UKKwkJU1RSQ1BZKHAsIHAgKyAyKTsJCS8qIHJlbW92ZSAnXH4nICovCisJICAgIC0tcDsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKCpwID09ICdcXCcgJiYgcFsxXSkJCS8qIHNraXAgZXNjYXBlZCBjaGFyYWN0ZXJzICovCisJCSsrcDsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCXAgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwKSAtIDE7CisjZW5kaWYKKwl9CisgICAgfQorCisgICAgdmltX2ZyZWUocmVnX3ByZXZfc3ViKTsKKyAgICBpZiAobmV3c3ViICE9IHNvdXJjZSkJLyogbmV3c3ViIHdhcyBhbGxvY2F0ZWQsIGp1c3Qga2VlcCBpdCAqLworCXJlZ19wcmV2X3N1YiA9IG5ld3N1YjsKKyAgICBlbHNlCQkJLyogbm8gfiBmb3VuZCwgbmVlZCB0byBzYXZlIG5ld3N1YiAgKi8KKwlyZWdfcHJldl9zdWIgPSB2aW1fc3Ryc2F2ZShuZXdzdWIpOworICAgIHJldHVybiBuZXdzdWI7Cit9CisKKyNpZmRlZiBGRUFUX0VWQUwKK3N0YXRpYyBpbnQgY2FuX2Zfc3VibWF0Y2ggPSBGQUxTRTsJLyogVFJVRSB3aGVuIHN1Ym1hdGNoKCkgY2FuIGJlIHVzZWQgKi8KKworLyogVGhlc2UgcG9pbnRlcnMgYXJlIHVzZWQgaW5zdGVhZCBvZiByZWdfbWF0Y2ggYW5kIHJlZ19tbWF0Y2ggZm9yCisgKiByZWdfc3VibWF0Y2goKS4gIE5lZWRlZCBmb3Igd2hlbiB0aGUgc3Vic3RpdHV0aW9uIHN0cmluZyBpcyBhbiBleHByZXNzaW9uCisgKiB0aGF0IGNvbnRhaW5zIGEgY2FsbCB0byBzdWJzdGl0dXRlKCkgYW5kIHN1Ym1hdGNoKCkuICovCitzdGF0aWMgcmVnbWF0Y2hfVAkqc3VibWF0Y2hfbWF0Y2g7CitzdGF0aWMgcmVnbW1hdGNoX1QJKnN1Ym1hdGNoX21tYXRjaDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX01PRElGWV9GTkFNRSkgfHwgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogdmltX3JlZ3N1YigpIC0gcGVyZm9ybSBzdWJzdGl0dXRpb25zIGFmdGVyIGEgdmltX3JlZ2V4ZWMoKSBvcgorICogdmltX3JlZ2V4ZWNfbXVsdGkoKSBtYXRjaC4KKyAqCisgKiBJZiAiY29weSIgaXMgVFJVRSByZWFsbHkgY29weSBpbnRvICJkZXN0Ii4KKyAqIElmICJjb3B5IiBpcyBGQUxTRSBub3RoaW5nIGlzIGNvcGllZCwgdGhpcyBpcyBqdXN0IHRvIGZpbmQgb3V0IHRoZSBsZW5ndGgKKyAqIG9mIHRoZSByZXN1bHQuCisgKgorICogSWYgImJhY2tzbGFzaCIgaXMgVFJVRSwgYSBiYWNrc2xhc2ggd2lsbCBiZSByZW1vdmVkIGxhdGVyLCBuZWVkIHRvIGRvdWJsZQorICogdGhlbSB0byBrZWVwIHRoZW0sIGFuZCBpbnNlcnQgYSBiYWNrc2xhc2ggYmVmb3JlIGEgQ1IgdG8gYXZvaWQgaXQgYmVpbmcKKyAqIHJlcGxhY2VkIHdpdGggYSBsaW5lIGJyZWFrIGxhdGVyLgorICoKKyAqIE5vdGU6IFRoZSBtYXRjaGVkIHRleHQgbXVzdCBub3QgY2hhbmdlIGJldHdlZW4gdGhlIGNhbGwgb2YKKyAqIHZpbV9yZWdleGVjKCkvdmltX3JlZ2V4ZWNfbXVsdGkoKSBhbmQgdmltX3JlZ3N1YigpISAgSXQgd291bGQgbWFrZSB0aGUgYmFjaworICogcmVmZXJlbmNlcyBpbnZhbGlkIQorICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHJlcGxhY2VtZW50LCBpbmNsdWRpbmcgdGVybWluYXRpbmcgTlVMLgorICovCisgICAgaW50Cit2aW1fcmVnc3ViKHJtcCwgc291cmNlLCBkZXN0LCBjb3B5LCBtYWdpYywgYmFja3NsYXNoKQorICAgIHJlZ21hdGNoX1QJKnJtcDsKKyAgICBjaGFyX3UJKnNvdXJjZTsKKyAgICBjaGFyX3UJKmRlc3Q7CisgICAgaW50CQljb3B5OworICAgIGludAkJbWFnaWM7CisgICAgaW50CQliYWNrc2xhc2g7Cit7CisgICAgcmVnX21hdGNoID0gcm1wOworICAgIHJlZ19tbWF0Y2ggPSBOVUxMOworICAgIHJlZ19tYXhsaW5lID0gMDsKKyAgICByZXR1cm4gdmltX3JlZ3N1Yl9ib3RoKHNvdXJjZSwgZGVzdCwgY29weSwgbWFnaWMsIGJhY2tzbGFzaCk7Cit9CisjZW5kaWYKKworICAgIGludAordmltX3JlZ3N1Yl9tdWx0aShybXAsIGxudW0sIHNvdXJjZSwgZGVzdCwgY29weSwgbWFnaWMsIGJhY2tzbGFzaCkKKyAgICByZWdtbWF0Y2hfVAkqcm1wOworICAgIGxpbmVucl9UCWxudW07CisgICAgY2hhcl91CSpzb3VyY2U7CisgICAgY2hhcl91CSpkZXN0OworICAgIGludAkJY29weTsKKyAgICBpbnQJCW1hZ2ljOworICAgIGludAkJYmFja3NsYXNoOworeworICAgIHJlZ19tYXRjaCA9IE5VTEw7CisgICAgcmVnX21tYXRjaCA9IHJtcDsKKyAgICByZWdfYnVmID0gY3VyYnVmOwkJLyogYWx3YXlzIHdvcmtzIG9uIHRoZSBjdXJyZW50IGJ1ZmZlciEgKi8KKyAgICByZWdfZmlyc3RsbnVtID0gbG51bTsKKyAgICByZWdfbWF4bGluZSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50IC0gbG51bTsKKyAgICByZXR1cm4gdmltX3JlZ3N1Yl9ib3RoKHNvdXJjZSwgZGVzdCwgY29weSwgbWFnaWMsIGJhY2tzbGFzaCk7Cit9CisKKyAgICBzdGF0aWMgaW50Cit2aW1fcmVnc3ViX2JvdGgoc291cmNlLCBkZXN0LCBjb3B5LCBtYWdpYywgYmFja3NsYXNoKQorICAgIGNoYXJfdQkqc291cmNlOworICAgIGNoYXJfdQkqZGVzdDsKKyAgICBpbnQJCWNvcHk7CisgICAgaW50CQltYWdpYzsKKyAgICBpbnQJCWJhY2tzbGFzaDsKK3sKKyAgICBjaGFyX3UJKnNyYzsKKyAgICBjaGFyX3UJKmRzdDsKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQljOworICAgIGludAkJbm8gPSAtMTsKKyAgICBmcHRyCWZ1bmMgPSAoZnB0cilOVUxMOworICAgIGxpbmVucl9UCWNsbnVtID0gMDsJLyogaW5pdCBmb3IgR0NDICovCisgICAgaW50CQlsZW4gPSAwOwkvKiBpbml0IGZvciBHQ0MgKi8KKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBzdGF0aWMgY2hhcl91ICpldmFsX3Jlc3VsdCA9IE5VTEw7CisjZW5kaWYKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQlsOworI2VuZGlmCisKKworICAgIC8qIEJlIHBhcmFub2lkLi4uICovCisgICAgaWYgKHNvdXJjZSA9PSBOVUxMIHx8IGRlc3QgPT0gTlVMTCkKKyAgICB7CisJRU1TRyhfKGVfbnVsbCkpOworCXJldHVybiAwOworICAgIH0KKyAgICBpZiAocHJvZ19tYWdpY193cm9uZygpKQorCXJldHVybiAwOworICAgIHNyYyA9IHNvdXJjZTsKKyAgICBkc3QgPSBkZXN0OworCisgICAgLyoKKyAgICAgKiBXaGVuIHRoZSBzdWJzdGl0dXRlIHBhcnQgc3RhcnRzIHdpdGggIlw9IiBldmFsdWF0ZSBpdCBhcyBhbiBleHByZXNzaW9uLgorICAgICAqLworICAgIGlmIChzb3VyY2VbMF0gPT0gJ1xcJyAmJiBzb3VyY2VbMV0gPT0gJz0nCisjaWZkZWYgRkVBVF9FVkFMCisJICAgICYmICFjYW5fZl9zdWJtYXRjaAkgICAgLyogY2FuJ3QgZG8gdGhpcyByZWN1cnNpdmVseSAqLworI2VuZGlmCisJICAgICkKKyAgICB7CisjaWZkZWYgRkVBVF9FVkFMCisJLyogVG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxlbmd0aCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIGNoZWNraW5nIHRoZQorCSAqIGxlbmd0aCBhbmQgY29weWluZyB0aGUgc3RyaW5nLCBhbmQgdG8gc3BlZWQgdXAgdGhpbmdzLCB0aGUKKwkgKiByZXN1bHRpbmcgc3RyaW5nIGlzIHNhdmVkIGZyb20gdGhlIGNhbGwgd2l0aCAiY29weSIgPT0gRkFMU0UgdG8gdGhlCisJICogY2FsbCB3aXRoICJjb3B5IiA9PSBUUlVFLiAqLworCWlmIChjb3B5KQorCXsKKwkgICAgaWYgKGV2YWxfcmVzdWx0ICE9IE5VTEwpCisJICAgIHsKKwkJU1RSQ1BZKGRlc3QsIGV2YWxfcmVzdWx0KTsKKwkJZHN0ICs9IFNUUkxFTihldmFsX3Jlc3VsdCk7CisJCXZpbV9mcmVlKGV2YWxfcmVzdWx0KTsKKwkJZXZhbF9yZXN1bHQgPSBOVUxMOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIGxpbmVucl9UCXNhdmVfcmVnX21heGxpbmU7CisJICAgIHdpbl9UCSpzYXZlX3JlZ193aW47CisJICAgIGludAkJc2F2ZV9pcmVnX2ljOworCisJICAgIHZpbV9mcmVlKGV2YWxfcmVzdWx0KTsKKworCSAgICAvKiBUaGUgZXhwcmVzc2lvbiBtYXkgY29udGFpbiBzdWJzdGl0dXRlKCksIHdoaWNoIGNhbGxzIHVzCisJICAgICAqIHJlY3Vyc2l2ZWx5LiAgTWFrZSBzdXJlIHN1Ym1hdGNoKCkgZ2V0cyB0aGUgdGV4dCBmcm9tIHRoZSBmaXJzdAorCSAgICAgKiBsZXZlbC4gIERvbid0IG5lZWQgdG8gc2F2ZSAicmVnX2J1ZiIsIGJlY2F1c2UKKwkgICAgICogdmltX3JlZ2V4ZWNfbXVsdGkoKSBjYW4ndCBiZSBjYWxsZWQgcmVjdXJzaXZlbHkuICovCisJICAgIHN1Ym1hdGNoX21hdGNoID0gcmVnX21hdGNoOworCSAgICBzdWJtYXRjaF9tbWF0Y2ggPSByZWdfbW1hdGNoOworCSAgICBzYXZlX3JlZ19tYXhsaW5lID0gcmVnX21heGxpbmU7CisJICAgIHNhdmVfcmVnX3dpbiA9IHJlZ193aW47CisJICAgIHNhdmVfaXJlZ19pYyA9IGlyZWdfaWM7CisJICAgIGNhbl9mX3N1Ym1hdGNoID0gVFJVRTsKKworCSAgICBldmFsX3Jlc3VsdCA9IGV2YWxfdG9fc3RyaW5nKHNvdXJjZSArIDIsIE5VTEwpOworCSAgICBpZiAoZXZhbF9yZXN1bHQgIT0gTlVMTCkKKwkgICAgeworCQlmb3IgKHMgPSBldmFsX3Jlc3VsdDsgKnMgIT0gTlVMOyArK3MpCisJCXsKKwkJICAgIC8qIENoYW5nZSBOTCB0byBDUiwgc28gdGhhdCBpdCBiZWNvbWVzIGEgbGluZSBicmVhay4KKwkJICAgICAqIFNraXAgb3ZlciBhIGJhY2tzbGFzaGVkIGNoYXJhY3Rlci4gKi8KKwkJICAgIGlmICgqcyA9PSBOTCkKKwkJCSpzID0gQ0FSOworCQkgICAgZWxzZSBpZiAoKnMgPT0gJ1xcJyAmJiBzWzFdICE9IE5VTCkKKwkJCSsrczsKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBpZiAoaGFzX21ieXRlKQorCQkJcyArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHMpIC0gMTsKKyNlbmRpZgorCQl9CisKKwkJZHN0ICs9IFNUUkxFTihldmFsX3Jlc3VsdCk7CisJICAgIH0KKworCSAgICByZWdfbWF0Y2ggPSBzdWJtYXRjaF9tYXRjaDsKKwkgICAgcmVnX21tYXRjaCA9IHN1Ym1hdGNoX21tYXRjaDsKKwkgICAgcmVnX21heGxpbmUgPSBzYXZlX3JlZ19tYXhsaW5lOworCSAgICByZWdfd2luID0gc2F2ZV9yZWdfd2luOworCSAgICBpcmVnX2ljID0gc2F2ZV9pcmVnX2ljOworCSAgICBjYW5fZl9zdWJtYXRjaCA9IEZBTFNFOworCX0KKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgICB3aGlsZSAoKGMgPSAqc3JjKyspICE9IE5VTCkKKyAgICAgIHsKKwlpZiAoYyA9PSAnJicgJiYgbWFnaWMpCisJICAgIG5vID0gMDsKKwllbHNlIGlmIChjID09ICdcXCcgJiYgKnNyYyAhPSBOVUwpCisJeworCSAgICBpZiAoKnNyYyA9PSAnJicgJiYgIW1hZ2ljKQorCSAgICB7CisJCSsrc3JjOworCQlubyA9IDA7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoJzAnIDw9ICpzcmMgJiYgKnNyYyA8PSAnOScpCisJICAgIHsKKwkJbm8gPSAqc3JjKysgLSAnMCc7CisJICAgIH0KKwkgICAgZWxzZSBpZiAodmltX3N0cmNocigoY2hhcl91ICopInVVbExlRSIsICpzcmMpKQorCSAgICB7CisJCXN3aXRjaCAoKnNyYysrKQorCQl7CisJCWNhc2UgJ3UnOiAgIGZ1bmMgPSAoZnB0cilkb191cHBlcjsKKwkJCSAgICBjb250aW51ZTsKKwkJY2FzZSAnVSc6ICAgZnVuYyA9IChmcHRyKWRvX1VwcGVyOworCQkJICAgIGNvbnRpbnVlOworCQljYXNlICdsJzogICBmdW5jID0gKGZwdHIpZG9fbG93ZXI7CisJCQkgICAgY29udGludWU7CisJCWNhc2UgJ0wnOiAgIGZ1bmMgPSAoZnB0cilkb19Mb3dlcjsKKwkJCSAgICBjb250aW51ZTsKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ0UnOiAgIGZ1bmMgPSAoZnB0cilOVUxMOworCQkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwl9CisJaWYgKG5vIDwgMCkJICAgICAgLyogT3JkaW5hcnkgY2hhcmFjdGVyLiAqLworCXsKKwkgICAgaWYgKGMgPT0gJ1xcJyAmJiAqc3JjICE9IE5VTCkKKwkgICAgeworCQkvKiBDaGVjayBmb3IgYWJicmV2aWF0aW9ucyAtLSB3ZWJiICovCisJCXN3aXRjaCAoKnNyYykKKwkJeworCQkgICAgY2FzZSAncic6CWMgPSBDQVI7CSsrc3JjOwlicmVhazsKKwkJICAgIGNhc2UgJ24nOgljID0gTkw7CQkrK3NyYzsJYnJlYWs7CisJCSAgICBjYXNlICd0JzoJYyA9IFRBQjsJKytzcmM7CWJyZWFrOworCQkgLyogT2ggbm8hICBcZSBhbHJlYWR5IGhhcyBtZWFuaW5nIGluIHN1YnN0IHBhdCA6LSggKi8KKwkJIC8qIGNhc2UgJ2UnOiAgIGMgPSBFU0M7CSsrc3JjOwlicmVhazsgKi8KKwkJICAgIGNhc2UgJ2InOgljID0gQ3RybF9IOwkrK3NyYzsJYnJlYWs7CisKKwkJICAgIC8qIElmICJiYWNrc2xhc2giIGlzIFRSVUUgdGhlIGJhY2tzbGFzaCB3aWxsIGJlIHJlbW92ZWQKKwkJICAgICAqIGxhdGVyLiAgVXNlZCB0byBpbnNlcnQgYSBsaXRlcmFsIENSLiAqLworCQkgICAgZGVmYXVsdDoJaWYgKGJhY2tzbGFzaCkKKwkJCQl7CisJCQkJICAgIGlmIChjb3B5KQorCQkJCQkqZHN0ID0gJ1xcJzsKKwkJCQkgICAgKytkc3Q7CisJCQkJfQorCQkJCWMgPSAqc3JjKys7CisJCX0KKwkgICAgfQorCisJICAgIC8qIFdyaXRlIHRvIGJ1ZmZlciwgaWYgY29weSBpcyBzZXQuICovCisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlICYmIChsID0gKCptYl9wdHIybGVuX2NoZWNrKShzcmMgLSAxKSkgPiAxKQorCSAgICB7CisJCS8qIFRPRE86IHNob3VsZCB1c2UgImZ1bmMiIGhlcmUuICovCisJCWlmIChjb3B5KQorCQkgICAgbWNoX21lbW1vdmUoZHN0LCBzcmMgLSAxLCBsKTsKKwkJZHN0ICs9IGwgLSAxOworCQlzcmMgKz0gbCAtIDE7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisjZW5kaWYKKwkJaWYgKGNvcHkpCisJCXsKKwkJICAgIGlmIChmdW5jID09IChmcHRyKU5VTEwpCS8qIGp1c3QgY29weSAqLworCQkJKmRzdCA9IGM7CisJCSAgICBlbHNlCQkJLyogY2hhbmdlIGNhc2UgKi8KKwkJCWZ1bmMgPSAoZnB0cikoZnVuYyhkc3QsIGMpKTsKKwkJICAgIC8qIFR1cmJvIEMgY29tcGxhaW5zIHdpdGhvdXQgdGhlIHR5cGVjYXN0ICovCisJCX0KKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIH0KKyNlbmRpZgorCSAgICBkc3QrKzsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKFJFR19NVUxUSSkKKwkgICAgeworCQljbG51bSA9IHJlZ19tbWF0Y2gtPnN0YXJ0cG9zW25vXS5sbnVtOworCQlpZiAoY2xudW0gPCAwIHx8IHJlZ19tbWF0Y2gtPmVuZHBvc1tub10ubG51bSA8IDApCisJCSAgICBzID0gTlVMTDsKKwkJZWxzZQorCQl7CisJCSAgICBzID0gcmVnX2dldGxpbmUoY2xudW0pICsgcmVnX21tYXRjaC0+c3RhcnRwb3Nbbm9dLmNvbDsKKwkJICAgIGlmIChyZWdfbW1hdGNoLT5lbmRwb3Nbbm9dLmxudW0gPT0gY2xudW0pCisJCQlsZW4gPSByZWdfbW1hdGNoLT5lbmRwb3Nbbm9dLmNvbAorCQkJCQkgICAgICAgLSByZWdfbW1hdGNoLT5zdGFydHBvc1tub10uY29sOworCQkgICAgZWxzZQorCQkJbGVuID0gKGludClTVFJMRU4ocyk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJcyA9IHJlZ19tYXRjaC0+c3RhcnRwW25vXTsKKwkJaWYgKHJlZ19tYXRjaC0+ZW5kcFtub10gPT0gTlVMTCkKKwkJICAgIHMgPSBOVUxMOworCQllbHNlCisJCSAgICBsZW4gPSAoaW50KShyZWdfbWF0Y2gtPmVuZHBbbm9dIC0gcyk7CisJICAgIH0KKwkgICAgaWYgKHMgIT0gTlVMTCkKKwkgICAgeworCQlmb3IgKDs7KQorCQl7CisJCSAgICBpZiAobGVuID09IDApCisJCSAgICB7CisJCQlpZiAoUkVHX01VTFRJKQorCQkJeworCQkJICAgIGlmIChyZWdfbW1hdGNoLT5lbmRwb3Nbbm9dLmxudW0gPT0gY2xudW0pCisJCQkJYnJlYWs7CisJCQkgICAgaWYgKGNvcHkpCisJCQkJKmRzdCA9IENBUjsKKwkJCSAgICArK2RzdDsKKwkJCSAgICBzID0gcmVnX2dldGxpbmUoKytjbG51bSk7CisJCQkgICAgaWYgKHJlZ19tbWF0Y2gtPmVuZHBvc1tub10ubG51bSA9PSBjbG51bSkKKwkJCQlsZW4gPSByZWdfbW1hdGNoLT5lbmRwb3Nbbm9dLmNvbDsKKwkJCSAgICBlbHNlCisJCQkJbGVuID0gKGludClTVFJMRU4ocyk7CisJCQl9CisJCQllbHNlCisJCQkgICAgYnJlYWs7CisJCSAgICB9CisJCSAgICBlbHNlIGlmICgqcyA9PSBOVUwpIC8qIHdlIGhpdCBOVUwuICovCisJCSAgICB7CisJCQlpZiAoY29weSkKKwkJCSAgICBFTVNHKF8oZV9yZV9kYW1nKSk7CisJCQlnb3RvIGV4aXQ7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlpZiAoYmFja3NsYXNoICYmICgqcyA9PSBDQVIgfHwgKnMgPT0gJ1xcJykpCisJCQl7CisJCQkgICAgLyoKKwkJCSAgICAgKiBJbnNlcnQgYSBiYWNrc2xhc2ggaW4gZnJvbnQgb2YgYSBDUiwgb3RoZXJ3aXNlCisJCQkgICAgICogaXQgd2lsbCBiZSByZXBsYWNlZCBieSBhIGxpbmUgYnJlYWsuCisJCQkgICAgICogTnVtYmVyIG9mIGJhY2tzbGFzaGVzIHdpbGwgYmUgaGFsdmVkIGxhdGVyLAorCQkJICAgICAqIGRvdWJsZSB0aGVtIGhlcmUuCisJCQkgICAgICovCisJCQkgICAgaWYgKGNvcHkpCisJCQkgICAgeworCQkJCWRzdFswXSA9ICdcXCc7CisJCQkJZHN0WzFdID0gKnM7CisJCQkgICAgfQorCQkJICAgIGRzdCArPSAyOworCQkJfQorI2lmZGVmIEZFQVRfTUJZVEUKKwkJCWVsc2UgaWYgKGhhc19tYnl0ZSAmJiAobCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocykpID4gMSkKKwkJCXsKKwkJCSAgICAvKiBUT0RPOiBzaG91bGQgdXNlICJmdW5jIiBoZXJlLiAqLworCQkJICAgIGlmIChjb3B5KQorCQkJCW1jaF9tZW1tb3ZlKGRzdCwgcywgbCk7CisJCQkgICAgZHN0CSs9IGw7CisJCQkgICAgcyArPSBsIC0gMTsKKwkJCSAgICBsZW4JLT0gbCAtIDE7CisJCQl9CisjZW5kaWYKKwkJCWVsc2UKKwkJCXsKKwkJCSAgICBpZiAoY29weSkKKwkJCSAgICB7CisJCQkJaWYgKGZ1bmMgPT0gKGZwdHIpTlVMTCkJICAgIC8qIGp1c3QgY29weSAqLworCQkJCSAgICAqZHN0ID0gKnM7CisJCQkJZWxzZQkJCSAgICAvKiBjaGFuZ2UgY2FzZSAqLworCQkJCSAgICBmdW5jID0gKGZwdHIpKGZ1bmMoZHN0LCAqcykpOworCQkJCS8qIFR1cmJvIEMgY29tcGxhaW5zIHdpdGhvdXQgdGhlIHR5cGVjYXN0ICovCisJCQkgICAgfQorCQkJICAgICsrZHN0OworCQkJfQorCQkJKytzOworCQkJLS1sZW47CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBubyA9IC0xOworCX0KKyAgICAgIH0KKyAgICBpZiAoY29weSkKKwkqZHN0ID0gTlVMOworCitleGl0OgorICAgIHJldHVybiAoaW50KSgoZHN0IC0gZGVzdCkgKyAxKTsKK30KKworI2lmZGVmIEZFQVRfRVZBTAorLyoKKyAqIFVzZWQgZm9yIHRoZSBzdWJtYXRjaCgpIGZ1bmN0aW9uOiBnZXQgdGhlIHN0cmluZyBmcm9tIHRuZSBuJ3RoIHN1Ym1hdGNoIGluCisgKiBhbGxvY2F0ZWQgbWVtb3J5LgorICogUmV0dXJucyBOVUxMIHdoZW4gbm90IGluIGEgIjpzIiBjb21tYW5kIGFuZCBmb3IgYSBub24tZXhpc3Rpbmcgc3VibWF0Y2guCisgKi8KKyAgICBjaGFyX3UgKgorcmVnX3N1Ym1hdGNoKG5vKQorICAgIGludAkJbm87Cit7CisgICAgY2hhcl91CSpyZXR2YWwgPSBOVUxMOworICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCXJvdW5kOworICAgIGxpbmVucl9UCWxudW07CisKKyAgICBpZiAoIWNhbl9mX3N1Ym1hdGNoKQorCXJldHVybiBOVUxMOworCisgICAgaWYgKHN1Ym1hdGNoX21hdGNoID09IE5VTEwpCisgICAgeworCS8qCisJICogRmlyc3Qgcm91bmQ6IGNvbXB1dGUgdGhlIGxlbmd0aCBhbmQgYWxsb2NhdGUgbWVtb3J5LgorCSAqIFNlY29uZCByb3VuZDogY29weSB0aGUgdGV4dC4KKwkgKi8KKwlmb3IgKHJvdW5kID0gMTsgcm91bmQgPD0gMjsgKytyb3VuZCkKKwl7CisJICAgIGxudW0gPSBzdWJtYXRjaF9tbWF0Y2gtPnN0YXJ0cG9zW25vXS5sbnVtOworCSAgICBpZiAobG51bSA8IDAgfHwgc3VibWF0Y2hfbW1hdGNoLT5lbmRwb3Nbbm9dLmxudW0gPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCSAgICBzID0gcmVnX2dldGxpbmUobG51bSkgKyBzdWJtYXRjaF9tbWF0Y2gtPnN0YXJ0cG9zW25vXS5jb2w7CisJICAgIGlmIChzID09IE5VTEwpICAvKiBhbnRpLWNyYXNoIGNoZWNrLCBjYW5ub3QgaGFwcGVuPyAqLworCQlicmVhazsKKwkgICAgaWYgKHN1Ym1hdGNoX21tYXRjaC0+ZW5kcG9zW25vXS5sbnVtID09IGxudW0pCisJICAgIHsKKwkJLyogV2l0aGluIG9uZSBsaW5lOiB0YWtlIGZvcm0gc3RhcnQgdG8gZW5kIGNvbC4gKi8KKwkJbGVuID0gc3VibWF0Y2hfbW1hdGNoLT5lbmRwb3Nbbm9dLmNvbAorCQkJCQkgIC0gc3VibWF0Y2hfbW1hdGNoLT5zdGFydHBvc1tub10uY29sOworCQlpZiAocm91bmQgPT0gMikKKwkJeworCQkgICAgU1RSTkNQWShyZXR2YWwsIHMsIGxlbik7CisJCSAgICByZXR2YWxbbGVuXSA9IE5VTDsKKwkJfQorCQkrK2xlbjsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogTXVsdGlwbGUgbGluZXM6IHRha2Ugc3RhcnQgbGluZSBmcm9tIHN0YXJ0IGNvbCwgbWlkZGxlCisJCSAqIGxpbmVzIGNvbXBsZXRlbHkgYW5kIGVuZCBsaW5lIHVwIHRvIGVuZCBjb2wuICovCisJCWxlbiA9IChpbnQpU1RSTEVOKHMpOworCQlpZiAocm91bmQgPT0gMikKKwkJeworCQkgICAgU1RSQ1BZKHJldHZhbCwgcyk7CisJCSAgICByZXR2YWxbbGVuXSA9ICdcbic7CisJCX0KKwkJKytsZW47CisJCSsrbG51bTsKKwkJd2hpbGUgKGxudW0gPCBzdWJtYXRjaF9tbWF0Y2gtPmVuZHBvc1tub10ubG51bSkKKwkJeworCQkgICAgcyA9IHJlZ19nZXRsaW5lKGxudW0rKyk7CisJCSAgICBpZiAocm91bmQgPT0gMikKKwkJCVNUUkNQWShyZXR2YWwgKyBsZW4sIHMpOworCQkgICAgbGVuICs9IChpbnQpU1RSTEVOKHMpOworCQkgICAgaWYgKHJvdW5kID09IDIpCisJCQlyZXR2YWxbbGVuXSA9ICdcbic7CisJCSAgICArK2xlbjsKKwkJfQorCQlpZiAocm91bmQgPT0gMikKKwkJICAgIFNUUk5DUFkocmV0dmFsICsgbGVuLCByZWdfZ2V0bGluZShsbnVtKSwKKwkJCQkJICAgICBzdWJtYXRjaF9tbWF0Y2gtPmVuZHBvc1tub10uY29sKTsKKwkJbGVuICs9IHN1Ym1hdGNoX21tYXRjaC0+ZW5kcG9zW25vXS5jb2w7CisJCWlmIChyb3VuZCA9PSAyKQorCQkgICAgcmV0dmFsW2xlbl0gPSBOVUw7CisJCSsrbGVuOworCSAgICB9CisKKwkgICAgaWYgKHJvdW5kID09IDEpCisJICAgIHsKKwkJcmV0dmFsID0gbGFsbG9jKChsb25nX3UpbGVuLCBUUlVFKTsKKwkJaWYgKHMgPT0gTlVMTCkKKwkJICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmIChzdWJtYXRjaF9tYXRjaC0+ZW5kcFtub10gPT0gTlVMTCkKKwkgICAgcmV0dmFsID0gTlVMTDsKKwllbHNlCisJeworCSAgICBzID0gc3VibWF0Y2hfbWF0Y2gtPnN0YXJ0cFtub107CisJICAgIHJldHZhbCA9IHZpbV9zdHJuc2F2ZShzLCAoaW50KShzdWJtYXRjaF9tYXRjaC0+ZW5kcFtub10gLSBzKSk7CisJfQorICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9yZWdleHAuaCBiL3NyYy9yZWdleHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTYxMWVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3JlZ2V4cC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogTk9USUNFIE5PVElDRSBOT1RJQ0UgTk9USUNFIE5PVElDRSBOT1RJQ0UgTk9USUNFIE5PVElDRSBOT1RJQ0UgTk9USUNFCisgKgorICogVGhpcyBpcyBOT1QgdGhlIG9yaWdpbmFsIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb2RlIGFzIHdyaXR0ZW4gYnkgSGVucnkKKyAqIFNwZW5jZXIuICBUaGlzIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQgc3BlY2lmaWNhbGx5IGZvciB1c2Ugd2l0aCBWaW0sIGFuZAorICogc2hvdWxkIG5vdCBiZSB1c2VkIGFwYXJ0IGZyb20gY29tcGlsaW5nIFZpbS4gIElmIHlvdSB3YW50IGEgZ29vZCByZWd1bGFyCisgKiBleHByZXNzaW9uIGxpYnJhcnksIGdldCB0aGUgb3JpZ2luYWwgY29kZS4KKyAqCisgKiBOT1RJQ0UgTk9USUNFIE5PVElDRSBOT1RJQ0UgTk9USUNFIE5PVElDRSBOT1RJQ0UgTk9USUNFIE5PVElDRSBOT1RJQ0UKKyAqLworCisjaWZuZGVmIF9SRUdFWFBfSAorI2RlZmluZSBfUkVHRVhQX0gKKworLyoKKyAqIFRoZSBudW1iZXIgb2Ygc3ViLW1hdGNoZXMgaXMgbGltaXRlZCB0byAxMC4KKyAqIFRoZSBmaXJzdCBvbmUgKGluZGV4IDApIGlzIHRoZSB3aG9sZSBtYXRjaCwgcmVmZXJlbmNlZCB3aXRoICJcMCIuCisgKiBUaGUgc2Vjb25kIG9uZSAoaW5kZXggMSkgaXMgdGhlIGZpcnN0IHN1Yi1tYXRjaCwgcmVmZXJlbmNlZCB3aXRoICJcMSIuCisgKiBUaGlzIGdvZXMgdXAgdG8gdGhlIHRlbnRoIChpbmRleCA5KSwgcmVmZXJlbmNlZCB3aXRoICJcOSIuCisgKi8KKyNkZWZpbmUgTlNVQkVYUCAgMTAKKworLyoKKyAqIFN0cnVjdHVyZSByZXR1cm5lZCBieSB2aW1fcmVnY29tcCgpIHRvIHBhc3Mgb24gdG8gdmltX3JlZ2V4ZWMoKS4KKyAqIFRoZXNlIGZpZWxkcyBhcmUgb25seSB0byBiZSB1c2VkIGluIHJlZ2V4cC5jIQorICogU2VlIHJlZ2VwLmMgZm9yIGFuIGV4cGxhbmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludAkJCXJlZ3N0YXJ0OworICAgIGNoYXJfdQkJcmVnYW5jaDsKKyAgICBjaGFyX3UJCSpyZWdtdXN0OworICAgIGludAkJCXJlZ21sZW47CisgICAgdW5zaWduZWQJCXJlZ2ZsYWdzOworICAgIGNoYXJfdQkJcmVnaGFzejsKKyAgICBjaGFyX3UJCXByb2dyYW1bMV07CQkvKiBhY3R1YWxseSBsb25nZXIuLiAqLworfSByZWdwcm9nX1Q7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdG8gYmUgdXNlZCBmb3Igc2luZ2xlLWxpbmUgbWF0Y2hpbmcuCisgKiBTdWItbWF0Y2ggIm5vIiBzdGFydHMgYXQgInN0YXJ0cFtub10iIGFuZCBlbmRzIGp1c3QgYmVmb3JlICJlbmRwW25vXSIuCisgKiBXaGVuIHRoZXJlIGlzIG5vIG1hdGNoLCB0aGUgcG9pbnRlciBpcyBOVUxMLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHJlZ3Byb2dfVAkJKnJlZ3Byb2c7CisgICAgY2hhcl91CQkqc3RhcnRwW05TVUJFWFBdOworICAgIGNoYXJfdQkJKmVuZHBbTlNVQkVYUF07CisgICAgaW50CQkJcm1faWM7Cit9IHJlZ21hdGNoX1Q7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdG8gYmUgdXNlZCBmb3IgbXVsdGktbGluZSBtYXRjaGluZy4KKyAqIFN1Yi1tYXRjaCAibm8iIHN0YXJ0cyBpbiBsaW5lICJzdGFydHBvc1tub10ubG51bSIgY29sdW1uICJzdGFydHBvc1tub10uY29sIgorICogYW5kIGVuZHMgaW4gbGluZSAiZW5kcG9zW25vXS5sbnVtIiBqdXN0IGJlZm9yZSBjb2x1bW4gImVuZHBvc1tub10uY29sIi4KKyAqIFRoZSBsaW5lIG51bWJlcnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBsaW5lLCB0aHVzIHN0YXJ0cG9zWzBdLmxudW0gaXMKKyAqIGFsd2F5cyAwLgorICogV2hlbiB0aGVyZSBpcyBubyBtYXRjaCwgdGhlIGxpbmUgbnVtYmVyIGlzIC0xLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHJlZ3Byb2dfVAkJKnJlZ3Byb2c7CisgICAgbHBvc19UCQlzdGFydHBvc1tOU1VCRVhQXTsKKyAgICBscG9zX1QJCWVuZHBvc1tOU1VCRVhQXTsKKyAgICBpbnQJCQlybW1faWM7Cit9IHJlZ21tYXRjaF9UOworCisvKgorICogU3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgZXh0ZXJuYWwgcmVmZXJlbmNlczogIlx6XChcKSIgdG8gIlx6XDEiLgorICogVXNlIGEgcmVmZXJlbmNlIGNvdW50IHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNvcHkgdGhpcyBhcm91bmQuICBXaGVuIGl0IGdvZXMKKyAqIGZyb20gMSB0byB6ZXJvIHRoZSBtYXRjaGVzIG5lZWQgdG8gYmUgZnJlZWQuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgc2hvcnQJCXJlZmNudDsKKyAgICBjaGFyX3UJCSptYXRjaGVzW05TVUJFWFBdOworfSByZWdfZXh0bWF0Y2hfVDsKKworI2VuZGlmCS8qIF9SRUdFWFBfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NjcmVlbi5jIGIvc3JjL3NjcmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NGM0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2NyZWVuLmMKQEAgLTAsMCArMSw4NDM3IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBzY3JlZW4uYzogY29kZSBmb3IgZGlzcGxheWluZyBvbiB0aGUgc2NyZWVuCisgKgorICogT3V0cHV0IHRvIHRoZSBzY3JlZW4gKGNvbnNvbGUsIHRlcm1pbmFsIGVtdWxhdG9yIG9yIEdVSSB3aW5kb3cpIGlzIG1pbmltaXplZAorICogYnkgcmVtZW1iZXJpbmcgd2hhdCBpcyBhbHJlYWR5IG9uIHRoZSBzY3JlZW4sIGFuZCBvbmx5IHVwZGF0aW5nIHRoZSBwYXJ0cworICogdGhhdCBjaGFuZ2VkLgorICoKKyAqIFNjcmVlbkxpbmVzW29mZl0gIENvbnRhaW5zIGEgY29weSBvZiB0aGUgd2hvbGUgc2NyZWVuLCBhcyBpdCBpcyBjdXJyZW50bHkKKyAqCQkgICAgIGRpc3BsYXllZCAoZXhjbHVkaW5nIHRleHQgd3JpdHRlbiBieSBleHRlcm5hbCBjb21tYW5kcykuCisgKiBTY3JlZW5BdHRyc1tvZmZdICBDb250YWlucyB0aGUgYXNzb2NpYXRlZCBhdHRyaWJ1dGVzLgorICogTGluZU9mZnNldFtyb3ddICAgQ29udGFpbnMgdGhlIG9mZnNldCBpbnRvIFNjcmVlbkxpbmVzKltdIGFuZCBTY3JlZW5BdHRyc1tdCisgKgkJICAgICBmb3IgZWFjaCBsaW5lLgorICogTGluZVdyYXBzW3Jvd10gICAgRmxhZyBmb3IgZWFjaCBsaW5lIHdoZXRoZXIgaXQgd3JhcHMgdG8gdGhlIG5leHQgbGluZS4KKyAqCisgKiBGb3IgZG91YmxlLWJ5dGUgY2hhcmFjdGVycywgdHdvIGNvbnNlY3V0aXZlIGJ5dGVzIGluIFNjcmVlbkxpbmVzW10gY2FuIGZvcm0KKyAqIG9uZSBjaGFyYWN0ZXIgd2hpY2ggb2NjdXBpZXMgdHdvIGRpc3BsYXkgY2VsbHMuCisgKiBGb3IgVVRGLTggYSBtdWx0aS1ieXRlIGNoYXJhY3RlciBpcyBjb252ZXJ0ZWQgdG8gVW5pY29kZSBhbmQgc3RvcmVkIGluCisgKiBTY3JlZW5MaW5lc1VDW10uICBTY3JlZW5MaW5lc1tdIGNvbnRhaW5zIHRoZSBmaXJzdCBieXRlIG9ubHkuICBGb3IgYW4gQVNDSUkKKyAqIGNoYXJhY3RlciB3aXRob3V0IGNvbXBvc2luZyBjaGFycyBTY3JlZW5MaW5lc1VDW10gd2lsbCBiZSAwLiAgV2hlbiB0aGUKKyAqIGNoYXJhY3RlciBvY2N1cGllcyB0d28gZGlzcGxheSBjZWxscyB0aGUgbmV4dCBieXRlIGluIFNjcmVlbkxpbmVzW10gaXMgMC4KKyAqIFNjcmVlbkxpbmVzQzFbXSBhbmQgU2NyZWVuTGluZXNDMltdIGNvbnRhaW4gdXAgdG8gdHdvIGNvbXBvc2luZyBjaGFyYWN0ZXJzCisgKiAoZHJhd24gb24gdG9wIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIpLiAgVGhleSBhcmUgMCB3aGVuIG5vdCB1c2VkLgorICogU2NyZWVuTGluZXMyW10gaXMgb25seSB1c2VkIGZvciBldWMtanAgdG8gc3RvcmUgdGhlIHNlY29uZCBieXRlIGlmIHRoZQorICogZmlyc3QgYnl0ZSBpcyAweDhlIChzaW5nbGUtd2lkdGggY2hhcmFjdGVyKS4KKyAqCisgKiBUaGUgc2NyZWVuXyooKSBmdW5jdGlvbnMgd3JpdGUgdG8gdGhlIHNjcmVlbiBhbmQgaGFuZGxlIHVwZGF0aW5nCisgKiBTY3JlZW5MaW5lc1tdLgorICoKKyAqIHVwZGF0ZV9zY3JlZW4oKSBpcyB0aGUgZnVuY3Rpb24gdGhhdCB1cGRhdGVzIGFsbCB3aW5kb3dzIGFuZCBzdGF0dXMgbGluZXMuCisgKiBJdCBpcyBjYWxsZWQgZm9ybSB0aGUgbWFpbiBsb29wIHdoZW4gbXVzdF9yZWRyYXcgaXMgbm9uLXplcm8uICBJdCBtYXkgYmUKKyAqIGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcyB3aGVuIGFuIGltbWVkaWF0ZWQgc2NyZWVuIHVwZGF0ZSBpcyBuZWVkZWQuCisgKgorICogVGhlIHBhcnQgb2YgdGhlIGJ1ZmZlciB0aGF0IGlzIGRpc3BsYXllZCBpbiBhIHdpbmRvdyBpcyBzZXQgd2l0aDoKKyAqIC0gd190b3BsaW5lIChmaXJzdCBidWZmZXIgbGluZSBpbiB3aW5kb3cpCisgKiAtIHdfdG9wZmlsbCAoZmlsbGVyIGxpbmUgYWJvdmUgdGhlIGZpcnN0IGxpbmUpCisgKiAtIHdfbGVmdGNvbCAobGVmdG1vc3Qgd2luZG93IGNlbGwgaW4gd2luZG93KSwKKyAqIC0gd19za2lwY29sIChza2lwcGVkIHdpbmRvdyBjZWxscyBvZiBmaXJzdCBsaW5lKQorICoKKyAqIENvbW1hbmRzIHRoYXQgb25seSBtb3ZlIHRoZSBjdXJzb3IgYXJvdW5kIGluIGEgd2luZG93LCBkbyBub3QgbmVlZCB0byB0YWtlCisgKiBhY3Rpb24gdG8gdXBkYXRlIHRoZSBkaXNwbGF5LiAgVGhlIG1haW4gbG9vcCB3aWxsIGNoZWNrIGlmIHdfdG9wbGluZSBpcworICogdmFsaWQgYW5kIHVwZGF0ZSBpdCAoc2Nyb2xsIHRoZSB3aW5kb3cpIHdoZW4gbmVlZGVkLgorICoKKyAqIENvbW1hbmRzIHRoYXQgc2Nyb2xsIGEgd2luZG93IGNoYW5nZSB3X3RvcGxpbmUgYW5kIG11c3QgY2FsbAorICogY2hlY2tfY3Vyc29yKCkgdG8gbW92ZSB0aGUgY3Vyc29yIGludG8gdGhlIHZpc2libGUgcGFydCBvZiB0aGUgd2luZG93LCBhbmQKKyAqIGNhbGwgcmVkcmF3X2xhdGVyKFZBTElEKSB0byBoYXZlIHRoZSB3aW5kb3cgZGlzcGxheWVkIGJ5IHVwZGF0ZV9zY3JlZW4oKQorICogbGF0ZXIuCisgKgorICogQ29tbWFuZHMgdGhhdCBjaGFuZ2UgdGV4dCBpbiB0aGUgYnVmZmVyIG11c3QgY2FsbCBjaGFuZ2VkX2J5dGVzKCkgb3IKKyAqIGNoYW5nZWRfbGluZXMoKSB0byBtYXJrIHRoZSBhcmVhIHRoYXQgY2hhbmdlZCBhbmQgd2lsbCByZXF1aXJlIHVwZGF0aW5nCisgKiBsYXRlci4gIFRoZSBtYWluIGxvb3Agd2lsbCBjYWxsIHVwZGF0ZV9zY3JlZW4oKSwgd2hpY2ggd2lsbCB1cGRhdGUgZWFjaAorICogd2luZG93IHRoYXQgc2hvd3MgdGhlIGNoYW5nZWQgYnVmZmVyLiAgVGhpcyBhc3N1bWVzIHRleHQgYWJvdmUgdGhlIGNoYW5nZQorICogY2FuIHJlbWFpbiBkaXNwbGF5ZWQgYXMgaXQgaXMuICBUZXh0IGFmdGVyIHRoZSBjaGFuZ2UgbWF5IG5lZWQgdXBkYXRpbmcgZm9yCisgKiBzY3JvbGxpbmcsIGZvbGRpbmcgYW5kIHN5bnRheCBoaWdobGlnaHRpbmcuCisgKgorICogQ29tbWFuZHMgdGhhdCBjaGFuZ2UgaG93IGEgd2luZG93IGlzIGRpc3BsYXllZCAoZS5nLiwgc2V0dGluZyAnbGlzdCcpIG9yCisgKiBpbnZhbGlkYXRlIHRoZSBjb250ZW50cyBvZiBhIHdpbmRvdyBpbiBhbm90aGVyIHdheSAoZS5nLiwgY2hhbmdlIGZvbGQKKyAqIHNldHRpbmdzKSwgbXVzdCBjYWxsIHJlZHJhd19sYXRlcihOT1RfVkFMSUQpIHRvIGhhdmUgdGhlIHdob2xlIHdpbmRvdworICogcmVkaXNwbGF5ZWQgYnkgdXBkYXRlX3NjcmVlbigpIGxhdGVyLgorICoKKyAqIENvbW1hbmRzIHRoYXQgY2hhbmdlIGhvdyBhIGJ1ZmZlciBpcyBkaXNwbGF5ZWQgKGUuZy4sIHNldHRpbmcgJ3RhYnN0b3AnKQorICogbXVzdCBjYWxsIHJlZHJhd19jdXJidWZfbGF0ZXIoTk9UX1ZBTElEKSB0byBoYXZlIGFsbCB0aGUgd2luZG93cyBmb3IgdGhlCisgKiBidWZmZXIgcmVkaXNwbGF5ZWQgYnkgdXBkYXRlX3NjcmVlbigpIGxhdGVyLgorICoKKyAqIENvbW1hbmRzIHRoYXQgbW92ZSB0aGUgd2luZG93IHBvc2l0aW9uIG11c3QgY2FsbCByZWRyYXdfbGF0ZXIoTk9UX1ZBTElEKS4KKyAqIFRPRE86IHNob3VsZCBtaW5pbWl6ZSByZWRyYXdpbmcgYnkgc2Nyb2xsaW5nIHdoZW4gcG9zc2libGUuCisgKgorICogQ29tbWFuZHMgdGhhdCBjaGFuZ2UgZXZlcnl0aGluZyAoZS5nLiwgcmVzaXppbmcgdGhlIHNjcmVlbikgbXVzdCBjYWxsCisgKiByZWRyYXdfYWxsX2xhdGVyKE5PVF9WQUxJRCkgb3IgcmVkcmF3X2FsbF9sYXRlcihDTEVBUikuCisgKgorICogVGhpbmdzIHRoYXQgYXJlIGhhbmRsZWQgaW5kaXJlY3RseToKKyAqIC0gV2hlbiBtZXNzYWdlcyBzY3JvbGwgdGhlIHNjcmVlbiB1cCwgbXNnX3Njcm9sbGVkIHdpbGwgYmUgc2V0IGFuZAorICogICB1cGRhdGVfc2NyZWVuKCkgY2FsbGVkIHRvIHJlZHJhdy4KKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKy8qCisgKiBUaGUgYXR0cmlidXRlcyB0aGF0IGFyZSBhY3R1YWxseSBhY3RpdmUgZm9yIHdyaXRpbmcgdG8gdGhlIHNjcmVlbi4KKyAqLworc3RhdGljIGludAlzY3JlZW5fYXR0ciA9IDA7CisKKy8qCisgKiBQb3NpdGlvbmluZyB0aGUgY3Vyc29yIGlzIHJlZHVjZWQgYnkgcmVtZW1iZXJpbmcgdGhlIGxhc3QgcG9zaXRpb24uCisgKiBNb3N0bHkgdXNlZCBieSB3aW5kZ290bygpIGFuZCBzY3JlZW5fY2hhcigpLgorICovCitzdGF0aWMgaW50CXNjcmVlbl9jdXJfcm93LCBzY3JlZW5fY3VyX2NvbDsJLyogbGFzdCBrbm93biBjdXJzb3IgcG9zaXRpb24gKi8KKworI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisvKgorICogU3RydWN0IHVzZWQgZm9yIGhpZ2hsaWdodGluZyAnaGxzZWFyY2gnIG1hdGNoZXMgZm9yIHRoZSBsYXN0IHVzZSBzZWFyY2gKKyAqIHBhdHRlcm4gb3IgYSAiOm1hdGNoIiBpdGVtLgorICogRm9yICdobHNlYXJjaCcgdGhlcmUgaXMgb25lIHBhdHRlcm4gZm9yIGFsbCB3aW5kb3dzLiAgRm9yICI6bWF0Y2giIHRoZXJlIGlzCisgKiBhIGRpZmZlcmVudCBwYXR0ZXJuIGZvciBlYWNoIHdpbmRvdy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICByZWdtbWF0Y2hfVAlybTsJLyogcG9pbnRzIHRvIHRoZSByZWdleHAgcHJvZ3JhbTsgY29udGFpbnMgbGFzdCBmb3VuZAorCQkJICAgbWF0Y2ggKG1heSBjb250aW51ZSBpbiBuZXh0IGxpbmUpICovCisgICAgYnVmX1QJKmJ1ZjsJLyogdGhlIGJ1ZmZlciB0byBzZWFyY2ggZm9yIGEgbWF0Y2ggKi8KKyAgICBsaW5lbnJfVAlsbnVtOwkvKiB0aGUgbGluZSB0byBzZWFyY2ggZm9yIGEgbWF0Y2ggKi8KKyAgICBpbnQJCWF0dHI7CS8qIGF0dHJpYnV0ZXMgdG8gYmUgdXNlZCBmb3IgYSBtYXRjaCAqLworICAgIGludAkJYXR0cl9jdXI7IC8qIGF0dHJpYnV0ZXMgY3VycmVudGx5IGFjdGl2ZSBpbiB3aW5fbGluZSgpICovCisgICAgbGluZW5yX1QJZmlyc3RfbG51bTsJLyogZmlyc3QgbG51bSB0byBzZWFyY2ggZm9yIG11bHRpLWxpbmUgcGF0ICovCisgICAgY2hhcl91CSpzdGFydHA7IC8qIGluIHdpbl9saW5lKCkgcG9pbnRzIHRvIGNoYXIgd2hlcmUgSEwgc3RhcnRzICovCisgICAgY2hhcl91CSplbmRwOwkgLyogaW4gd2luX2xpbmUoKSBwb2ludHMgdG8gY2hhciB3aGVyZSBITCBlbmRzICovCit9IG1hdGNoX1Q7CisKK3N0YXRpYyBtYXRjaF9UIHNlYXJjaF9obDsJLyogdXNlZCBmb3IgJ2hsc2VhcmNoJyBoaWdobGlnaHQgbWF0Y2hpbmcgKi8KK3N0YXRpYyBtYXRjaF9UIG1hdGNoX2hsOwkvKiB1c2VkIGZvciAiOm1hdGNoIiBoaWdobGlnaHQgbWF0Y2hpbmcgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9GT0xESU5HCitzdGF0aWMgZm9sZGluZm9fVCB3aW5fZm9sZGluZm87CS8qIGluZm8gZm9yICdmb2xkY29sdW1uJyAqLworI2VuZGlmCisKKy8qCisgKiBCdWZmZXIgZm9yIG9uZSBzY3JlZW4gbGluZSAoY2hhcmFjdGVycyBhbmQgYXR0cmlidXRlcykuCisgKi8KK3N0YXRpYyBzY2hhcl9UCSpjdXJyZW50X1NjcmVlbkxpbmU7CisKK3N0YXRpYyB2b2lkIHdpbl91cGRhdGUgX19BUkdTKCh3aW5fVCAqd3ApKTsKK3N0YXRpYyB2b2lkIHdpbl9kcmF3X2VuZCBfX0FSR1MoKHdpbl9UICp3cCwgaW50IGMxLCBpbnQgYzIsIGludCByb3csIGludCBlbmRyb3csIGVudW0gaGxmX3ZhbHVlIGhsKSk7CisjaWZkZWYgRkVBVF9GT0xESU5HCitzdGF0aWMgdm9pZCBmb2xkX2xpbmUgX19BUkdTKCh3aW5fVCAqd3AsIGxvbmcgZm9sZF9jb3VudCwgZm9sZGluZm9fVCAqZm9sZGluZm8sIGxpbmVucl9UIGxudW0sIGludCByb3cpKTsKK3N0YXRpYyB2b2lkIGZpbGxfZm9sZGNvbHVtbiBfX0FSR1MoKGNoYXJfdSAqcCwgd2luX1QgKndwLCBpbnQgY2xvc2VkLCBsaW5lbnJfVCBsbnVtKSk7CitzdGF0aWMgdm9pZCBjb3B5X3RleHRfYXR0ciBfX0FSR1MoKGludCBvZmYsIGNoYXJfdSAqYnVmLCBpbnQgbGVuLCBpbnQgYXR0cikpOworI2VuZGlmCitzdGF0aWMgaW50IHdpbl9saW5lIF9fQVJHUygod2luX1QgKiwgbGluZW5yX1QsIGludCwgaW50KSk7CitzdGF0aWMgaW50IGNoYXJfbmVlZHNfcmVkcmF3IF9fQVJHUygoaW50IG9mZl9mcm9tLCBpbnQgb2ZmX3RvLCBpbnQgY29scykpOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCitzdGF0aWMgdm9pZCBzY3JlZW5fbGluZSBfX0FSR1MoKGludCByb3csIGludCBjb2xvZmYsIGludCBlbmRjb2wsIGludCBjbGVhcl93aWR0aCwgaW50IHJsZmxhZykpOworIyBkZWZpbmUgU0NSRUVOX0xJTkUociwgbywgZSwgYywgcmwpICAgIHNjcmVlbl9saW5lKChyKSwgKG8pLCAoZSksIChjKSwgKHJsKSkKKyNlbHNlCitzdGF0aWMgdm9pZCBzY3JlZW5fbGluZSBfX0FSR1MoKGludCByb3csIGludCBjb2xvZmYsIGludCBlbmRjb2wsIGludCBjbGVhcl93aWR0aCkpOworIyBkZWZpbmUgU0NSRUVOX0xJTkUociwgbywgZSwgYywgcmwpICAgIHNjcmVlbl9saW5lKChyKSwgKG8pLCAoZSksIChjKSkKKyNlbmRpZgorI2lmZGVmIEZFQVRfUklHSFRMRUZUCitzdGF0aWMgdm9pZCBybF9taXJyb3IgX19BUkdTKChjaGFyX3UgKnN0cikpOworI2VuZGlmCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKK3N0YXRpYyB2b2lkIGRyYXdfdnNlcF93aW4gX19BUkdTKCh3aW5fVCAqd3AsIGludCByb3cpKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCitzdGF0aWMgdm9pZCBzdGFydF9zZWFyY2hfaGwgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBlbmRfc2VhcmNoX2hsIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgcHJlcGFyZV9zZWFyY2hfaGwgX19BUkdTKCh3aW5fVCAqd3AsIGxpbmVucl9UIGxudW0pKTsKK3N0YXRpYyB2b2lkIG5leHRfc2VhcmNoX2hsIF9fQVJHUygod2luX1QgKndpbiwgbWF0Y2hfVCAqc2hsLCBsaW5lbnJfVCBsbnVtLCBjb2xucl9UIG1pbmNvbCkpOworI2VuZGlmCitzdGF0aWMgdm9pZCBzY3JlZW5fc3RhcnRfaGlnaGxpZ2h0IF9fQVJHUygoaW50IGF0dHIpKTsKK3N0YXRpYyB2b2lkIHNjcmVlbl9jaGFyIF9fQVJHUygodW5zaWduZWQgb2ZmLCBpbnQgcm93LCBpbnQgY29sKSk7CisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIHZvaWQgc2NyZWVuX2NoYXJfMiBfX0FSR1MoKHVuc2lnbmVkIG9mZiwgaW50IHJvdywgaW50IGNvbCkpOworI2VuZGlmCitzdGF0aWMgdm9pZCBzY3JlZW5jbGVhcjIgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBsaW5lY2xlYXIgX19BUkdTKCh1bnNpZ25lZCBvZmYsIGludCB3aWR0aCkpOworc3RhdGljIHZvaWQgbGluZWludmFsaWQgX19BUkdTKCh1bnNpZ25lZCBvZmYsIGludCB3aWR0aCkpOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCitzdGF0aWMgdm9pZCBsaW5lY29weSBfX0FSR1MoKGludCB0bywgaW50IGZyb20sIHdpbl9UICp3cCkpOworc3RhdGljIHZvaWQgcmVkcmF3X2Jsb2NrIF9fQVJHUygoaW50IHJvdywgaW50IGVuZCwgd2luX1QgKndwKSk7CisjZW5kaWYKK3N0YXRpYyBpbnQgd2luX2RvX2xpbmVzIF9fQVJHUygod2luX1QgKndwLCBpbnQgcm93LCBpbnQgbGluZV9jb3VudCwgaW50IG1heWNsZWFyLCBpbnQgZGVsKSk7CitzdGF0aWMgdm9pZCB3aW5fcmVzdF9pbnZhbGlkIF9fQVJHUygod2luX1QgKndwKSk7CitzdGF0aWMgaW50IHNjcmVlbl9pbnNfbGluZXMgX19BUkdTKChpbnQsIGludCwgaW50LCBpbnQsIHdpbl9UICp3cCkpOworc3RhdGljIHZvaWQgbXNnX3Bvc19tb2RlIF9fQVJHUygodm9pZCkpOworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKEZFQVRfV0lMRE1FTlUpIHx8IGRlZmluZWQoRkVBVF9TVExfT1BUKQorc3RhdGljIGludCBmaWxsY2hhcl9zdGF0dXMgX19BUkdTKChpbnQgKmF0dHIsIGludCBpc19jdXJ3aW4pKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfVkVSVFNQTElUCitzdGF0aWMgaW50IGZpbGxjaGFyX3ZzZXAgX19BUkdTKChpbnQgKmF0dHIpKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU1RMX09QVAorc3RhdGljIHZvaWQgd2luX3JlZHJfY3VzdG9tIF9fQVJHUygod2luX1QgKndwLCBpbnQgUnVsZXIpKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ01ETF9JTkZPCitzdGF0aWMgdm9pZCB3aW5fcmVkcl9ydWxlciBfX0FSR1MoKHdpbl9UICp3cCwgaW50IGFsd2F5cykpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKSB8fCBkZWZpbmVkKEZFQVRfVkVSVFNQTElUKQorLyogVWdseSBnbG9iYWw6IG92ZXJydWxlIGF0dHJpYnV0ZSB1c2VkIGJ5IHNjcmVlbl9jaGFyKCkgKi8KK3N0YXRpYyBpbnQgc2NyZWVuX2NoYXJfYXR0ciA9IDA7CisjZW5kaWYKKworLyoKKyAqIFJlZHJhdyB0aGUgY3VycmVudCB3aW5kb3cgbGF0ZXIsIHdpdGggdXBkYXRlX3NjcmVlbih0eXBlKS4KKyAqIFNldCBtdXN0X3JlZHJhdyBvbmx5IGlmIG5vdCBhbHJlYWR5IHNldCB0byBhIGhpZ2hlciB2YWx1ZS4KKyAqIGUuZy4gaWYgbXVzdF9yZWRyYXcgaXMgQ0xFQVIsIHR5cGUgTk9UX1ZBTElEIHdpbGwgZG8gbm90aGluZy4KKyAqLworICAgIHZvaWQKK3JlZHJhd19sYXRlcih0eXBlKQorICAgIGludAkJdHlwZTsKK3sKKyAgICByZWRyYXdfd2luX2xhdGVyKGN1cndpbiwgdHlwZSk7Cit9CisKKyAgICB2b2lkCityZWRyYXdfd2luX2xhdGVyKHdwLCB0eXBlKQorICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCXR5cGU7Cit7CisgICAgaWYgKHdwLT53X3JlZHJfdHlwZSA8IHR5cGUpCisgICAgeworCXdwLT53X3JlZHJfdHlwZSA9IHR5cGU7CisJaWYgKHR5cGUgPj0gTk9UX1ZBTElEKQorCSAgICB3cC0+d19saW5lc192YWxpZCA9IDA7CisJaWYgKG11c3RfcmVkcmF3IDwgdHlwZSkJLyogbXVzdF9yZWRyYXcgaXMgdGhlIG1heGltdW0gb2YgYWxsIHdpbmRvd3MgKi8KKwkgICAgbXVzdF9yZWRyYXcgPSB0eXBlOworICAgIH0KK30KKworLyoKKyAqIEZvcmNlIGEgY29tcGxldGUgcmVkcmF3IGxhdGVyLiAgQWxzbyByZXNldHMgdGhlIGhpZ2hsaWdodGluZy4gIFRvIGJlIHVzZWQKKyAqIGFmdGVyIGV4ZWN1dGluZyBhIHNoZWxsIGNvbW1hbmQgdGhhdCBtZXNzZXMgdXAgdGhlIHNjcmVlbi4KKyAqLworICAgIHZvaWQKK3JlZHJhd19sYXRlcl9jbGVhcigpCit7CisgICAgcmVkcmF3X2FsbF9sYXRlcihDTEVBUik7CisgICAgc2NyZWVuX2F0dHIgPSBITF9CT0xEIHwgSExfVU5ERVJMSU5FOworfQorCisvKgorICogTWFyayBhbGwgd2luZG93cyB0byBiZSByZWRyYXduIGxhdGVyLgorICovCisgICAgdm9pZAorcmVkcmF3X2FsbF9sYXRlcih0eXBlKQorICAgIGludAkJdHlwZTsKK3sKKyAgICB3aW5fVAkqd3A7CisKKyAgICBGT1JfQUxMX1dJTkRPV1Mod3ApCisgICAgeworCXJlZHJhd193aW5fbGF0ZXIod3AsIHR5cGUpOworICAgIH0KK30KKworLyoKKyAqIE1hcmsgYWxsIHdpbmRvd3MgdGhhdCBhcmUgZWRpdGluZyB0aGUgY3VycmVudCBidWZmZXIgdG8gYmUgdWRwYXRlZCBsYXRlci4KKyAqLworICAgIHZvaWQKK3JlZHJhd19jdXJidWZfbGF0ZXIodHlwZSkKKyAgICBpbnQJCXR5cGU7Cit7CisgICAgcmVkcmF3X2J1Zl9sYXRlcihjdXJidWYsIHR5cGUpOworfQorCisgICAgdm9pZAorcmVkcmF3X2J1Zl9sYXRlcihidWYsIHR5cGUpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBpbnQJCXR5cGU7Cit7CisgICAgd2luX1QJKndwOworCisgICAgRk9SX0FMTF9XSU5ET1dTKHdwKQorICAgIHsKKwlpZiAod3AtPndfYnVmZmVyID09IGJ1ZikKKwkgICAgcmVkcmF3X3dpbl9sYXRlcih3cCwgdHlwZSk7CisgICAgfQorfQorCisvKgorICogQ2hhbmdlZCBzb21ldGhpbmcgaW4gdGhlIGN1cnJlbnQgd2luZG93LCBhdCBidWZmZXIgbGluZSAibG51bSIsIHRoYXQKKyAqIHJlcXVpcmVzIHRoYXQgbGluZSBhbmQgcG9zc2libHkgb3RoZXIgbGluZXMgdG8gYmUgcmVkcmF3bi4KKyAqIFVzZWQgd2hlbiBlbnRlcmluZy9sZWF2aW5nIEluc2VydCBtb2RlIHdpdGggdGhlIGN1cnNvciBvbiBhIGZvbGRlZCBsaW5lLgorICogVXNlZCB0byByZW1vdmUgdGhlICIkIiBmcm9tIGEgY2hhbmdlIGNvbW1hbmQuCisgKiBOb3RlIHRoYXQgd2hlbiBhbHNvIGluc2VydGluZy9kZWxldGluZyBsaW5lcyB3X3JlZHJhd190b3AgYW5kIHdfcmVkcmF3X2JvdAorICogbWF5IGJlY29tZSBpbnZhbGlkIGFuZCB0aGUgd2hvbGUgd2luZG93IHdpbGwgaGF2ZSB0byBiZSByZWRyYXduLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCityZWRyYXdXaW5saW5lKGxudW0sIGludmFsaWQpCisgICAgbGluZW5yX1QJbG51bTsKKyAgICBpbnQJCWludmFsaWQ7CS8qIHdpbmRvdyBsaW5lIGhlaWdodCBpcyBpbnZhbGlkIG5vdyAqLworeworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGludAkJaTsKKyNlbmRpZgorCisgICAgaWYgKGN1cndpbi0+d19yZWRyYXdfdG9wID09IDAgfHwgY3Vyd2luLT53X3JlZHJhd190b3AgPiBsbnVtKQorCWN1cndpbi0+d19yZWRyYXdfdG9wID0gbG51bTsKKyAgICBpZiAoY3Vyd2luLT53X3JlZHJhd19ib3QgPT0gMCB8fCBjdXJ3aW4tPndfcmVkcmF3X2JvdCA8IGxudW0pCisJY3Vyd2luLT53X3JlZHJhd19ib3QgPSBsbnVtOworICAgIHJlZHJhd19sYXRlcihWQUxJRCk7CisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBpZiAoaW52YWxpZCkKKyAgICB7CisJLyogQSB3X2xpbmVzW10gZW50cnkgZm9yIHRoaXMgbG51bSBoYXMgYmVjb21lIGludmFsaWQuICovCisJaSA9IGZpbmRfd2xfZW50cnkoY3Vyd2luLCBsbnVtKTsKKwlpZiAoaSA+PSAwKQorCSAgICBjdXJ3aW4tPndfbGluZXNbaV0ud2xfdmFsaWQgPSBGQUxTRTsKKyAgICB9CisjZW5kaWYKK30KKworLyoKKyAqIHVwZGF0ZSBhbGwgd2luZG93cyB0aGF0IGFyZSBlZGl0aW5nIHRoZSBjdXJyZW50IGJ1ZmZlcgorICovCisgICAgdm9pZAordXBkYXRlX2N1cmJ1Zih0eXBlKQorICAgIGludAkJdHlwZTsKK3sKKyAgICByZWRyYXdfY3VyYnVmX2xhdGVyKHR5cGUpOworICAgIHVwZGF0ZV9zY3JlZW4odHlwZSk7Cit9CisKKy8qCisgKiB1cGRhdGVfc2NyZWVuKCkKKyAqCisgKiBCYXNlZCBvbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBjdXJ3aW4tPndfdG9wbGluZSwgdHJhbnNmZXIgYSBzY3JlZW5mdWxsCisgKiBvZiBzdHVmZiBmcm9tIEZpbGVtZW0gdG8gU2NyZWVuTGluZXNbXSwgYW5kIHVwZGF0ZSBjdXJ3aW4tPndfYm90bGluZS4KKyAqLworICAgIHZvaWQKK3VwZGF0ZV9zY3JlZW4odHlwZSkKKyAgICBpbnQJCXR5cGU7Cit7CisgICAgd2luX1QJKndwOworICAgIHN0YXRpYyBpbnQJZGlkX2ludHJvID0gRkFMU0U7CisjaWYgZGVmaW5lZChGRUFUX1NFQVJDSF9FWFRSQSkgfHwgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkKKyAgICBpbnQJCWRpZF9vbmU7CisjZW5kaWYKKworICAgIGlmICghc2NyZWVuX3ZhbGlkKFRSVUUpKQorCXJldHVybjsKKworICAgIGlmIChtdXN0X3JlZHJhdykKKyAgICB7CisJaWYgKHR5cGUgPCBtdXN0X3JlZHJhdykJICAgIC8qIHVzZSBtYXhpbWFsIHR5cGUgKi8KKwkgICAgdHlwZSA9IG11c3RfcmVkcmF3OworCW11c3RfcmVkcmF3ID0gMDsKKyAgICB9CisKKyAgICAvKiBOZWVkIHRvIHVwZGF0ZSB3X2xpbmVzW10uICovCisgICAgaWYgKGN1cndpbi0+d19saW5lc192YWxpZCA9PSAwICYmIHR5cGUgPCBOT1RfVkFMSUQpCisJdHlwZSA9IE5PVF9WQUxJRDsKKworICAgIGlmICghcmVkcmF3aW5nKCkpCisgICAgeworCXJlZHJhd19sYXRlcih0eXBlKTsJCS8qIHJlbWVtYmVyIHR5cGUgZm9yIG5leHQgdGltZSAqLworCW11c3RfcmVkcmF3ID0gdHlwZTsKKwlpZiAodHlwZSA+IElOVkVSVEVEX0FMTCkKKwkgICAgY3Vyd2luLT53X2xpbmVzX3ZhbGlkID0gMDsJLyogZG9uJ3QgdXNlIHdfbGluZXNbXS53bF9zaXplIG5vdyAqLworCXJldHVybjsKKyAgICB9CisKKyAgICB1cGRhdGluZ19zY3JlZW4gPSBUUlVFOworI2lmZGVmIEZFQVRfU1lOX0hMCisgICAgKytkaXNwbGF5X3RpY2s7CSAgICAvKiBsZXQgc3ludGF4IGNvZGUga25vdyB3ZSdyZSBpbiBhIG5leHQgcm91bmQgb2YKKwkJCSAgICAgKiBkaXNwbGF5IHVwZGF0aW5nICovCisjZW5kaWYKKworICAgIC8qCisgICAgICogaWYgdGhlIHNjcmVlbiB3YXMgc2Nyb2xsZWQgdXAgd2hlbiBkaXNwbGF5aW5nIGEgbWVzc2FnZSwgc2Nyb2xsIGl0IGRvd24KKyAgICAgKi8KKyAgICBpZiAobXNnX3Njcm9sbGVkKQorICAgIHsKKwljbGVhcl9jbWRsaW5lID0gVFJVRTsKKwlpZiAobXNnX3Njcm9sbGVkID4gUm93cyAtIDUpCSAgICAvKiBjbGVhcmluZyBpcyBmYXN0ZXIgKi8KKwkgICAgdHlwZSA9IENMRUFSOworCWVsc2UgaWYgKHR5cGUgIT0gQ0xFQVIpCisJeworCSAgICBjaGVja19mb3JfZGVsYXkoRkFMU0UpOworCSAgICBpZiAoc2NyZWVuX2luc19saW5lcygwLCAwLCBtc2dfc2Nyb2xsZWQsIChpbnQpUm93cywgTlVMTCkgPT0gRkFJTCkKKwkJdHlwZSA9IENMRUFSOworCSAgICBGT1JfQUxMX1dJTkRPV1Mod3ApCisJICAgIHsKKwkJaWYgKFdfV0lOUk9XKHdwKSA8IG1zZ19zY3JvbGxlZCkKKwkJeworCQkgICAgaWYgKFdfV0lOUk9XKHdwKSArIHdwLT53X2hlaWdodCA+IG1zZ19zY3JvbGxlZAorCQkJICAgICYmIHdwLT53X3JlZHJfdHlwZSA8IFJFRFJBV19UT1AKKwkJCSAgICAmJiB3cC0+d19saW5lc192YWxpZCA+IDAKKwkJCSAgICAmJiB3cC0+d190b3BsaW5lID09IHdwLT53X2xpbmVzWzBdLndsX2xudW0pCisJCSAgICB7CisJCQl3cC0+d191cGRfcm93cyA9IG1zZ19zY3JvbGxlZCAtIFdfV0lOUk9XKHdwKTsKKwkJCXdwLT53X3JlZHJfdHlwZSA9IFJFRFJBV19UT1A7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQl3cC0+d19yZWRyX3R5cGUgPSBOT1RfVkFMSUQ7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJCQlpZiAoV19XSU5ST1cod3ApICsgd3AtPndfaGVpZ2h0ICsgV19TVEFUVVNfSEVJR0hUKHdwKQorCQkJCTw9IG1zZ19zY3JvbGxlZCkKKwkJCSAgICB3cC0+d19yZWRyX3N0YXR1cyA9IFRSVUU7CisjZW5kaWYKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHJlZHJhd19jbWRsaW5lID0gVFJVRTsKKwl9CisJbXNnX3Njcm9sbGVkID0gMDsKKwluZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisgICAgfQorCisgICAgLyogcmVzZXQgY21kbGluZV9yb3cgbm93IChtYXkgaGF2ZSBiZWVuIGNoYW5nZWQgdGVtcG9yYXJpbHkpICovCisgICAgY29tcHV0ZV9jbWRyb3coKTsKKworICAgIC8qIENoZWNrIGZvciBjaGFuZ2VkIGhpZ2hsaWdodGluZyAqLworICAgIGlmIChuZWVkX2hpZ2hsaWdodF9jaGFuZ2VkKQorCWhpZ2hsaWdodF9jaGFuZ2VkKCk7CisKKyAgICBpZiAodHlwZSA9PSBDTEVBUikJCS8qIGZpcnN0IGNsZWFyIHNjcmVlbiAqLworICAgIHsKKwlzY3JlZW5jbGVhcigpOwkJLyogd2lsbCByZXNldCBjbGVhcl9jbWRsaW5lICovCisJdHlwZSA9IE5PVF9WQUxJRDsKKyAgICB9CisKKyAgICBpZiAoY2xlYXJfY21kbGluZSkJCS8qIGdvaW5nIHRvIGNsZWFyIGNtZGxpbmUgKGRvbmUgYmVsb3cpICovCisJY2hlY2tfZm9yX2RlbGF5KEZBTFNFKTsKKworICAgIC8qCisgICAgICogT25seSBzdGFydCByZWRyYXdpbmcgaWYgdGhlcmUgaXMgcmVhbGx5IHNvbWV0aGluZyB0byBkby4KKyAgICAgKi8KKyAgICBpZiAodHlwZSA9PSBJTlZFUlRFRCkKKwl1cGRhdGVfY3Vyc3dhbnQoKTsKKyAgICBpZiAoY3Vyd2luLT53X3JlZHJfdHlwZSA8IHR5cGUKKwkgICAgJiYgISgodHlwZSA9PSBWQUxJRAorCQkgICAgJiYgY3Vyd2luLT53X2xpbmVzWzBdLndsX3ZhbGlkCisjaWZkZWYgRkVBVF9ESUZGCisJCSAgICAmJiBjdXJ3aW4tPndfdG9wZmlsbCA9PSBjdXJ3aW4tPndfb2xkX3RvcGZpbGwKKwkJICAgICYmIGN1cndpbi0+d19ib3RmaWxsID09IGN1cndpbi0+d19vbGRfYm90ZmlsbAorI2VuZGlmCisJCSAgICAmJiBjdXJ3aW4tPndfdG9wbGluZSA9PSBjdXJ3aW4tPndfbGluZXNbMF0ud2xfbG51bSkKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQl8fCAodHlwZSA9PSBJTlZFUlRFRAorCQkgICAgJiYgY3Vyd2luLT53X29sZF9jdXJzb3JfbG51bSA9PSBjdXJ3aW4tPndfY3Vyc29yLmxudW0KKwkJICAgICYmIGN1cndpbi0+d19vbGRfdmlzdWFsX21vZGUgPT0gVklzdWFsX21vZGUKKwkJICAgICYmIChjdXJ3aW4tPndfdmFsaWQgJiBWQUxJRF9WSVJUQ09MKQorCQkgICAgJiYgY3Vyd2luLT53X29sZF9jdXJzd2FudCA9PSBjdXJ3aW4tPndfY3Vyc3dhbnQpCisjZW5kaWYKKwkJKSkKKwljdXJ3aW4tPndfcmVkcl90eXBlID0gdHlwZTsKKworI2lmZGVmIEZFQVRfU1lOX0hMCisgICAgLyoKKyAgICAgKiBDb3JyZWN0IHN0b3JlZCBzeW50YXggaGlnaGxpZ2h0aW5nIGluZm8gZm9yIGNoYW5nZXMgaW4gZWFjaCBkaXNwbGF5ZWQKKyAgICAgKiBidWZmZXIuICBFYWNoIGJ1ZmZlciBtdXN0IG9ubHkgYmUgZG9uZSBvbmNlLgorICAgICAqLworICAgIEZPUl9BTExfV0lORE9XUyh3cCkKKyAgICB7CisJaWYgKHdwLT53X2J1ZmZlci0+Yl9tb2Rfc2V0KQorCXsKKyMgaWZkZWYgRkVBVF9XSU5ET1dTCisJICAgIHdpbl9UCSp3d3A7CisKKwkgICAgLyogQ2hlY2sgaWYgd2UgYWxyZWFkeSBkaWQgdGhpcyBidWZmZXIuICovCisJICAgIGZvciAod3dwID0gZmlyc3R3aW47IHd3cCAhPSB3cDsgd3dwID0gd3dwLT53X25leHQpCisJCWlmICh3d3AtPndfYnVmZmVyID09IHdwLT53X2J1ZmZlcikKKwkJICAgIGJyZWFrOworIyBlbmRpZgorCSAgICBpZiAoCisjIGlmZGVmIEZFQVRfV0lORE9XUworCQkgICAgd3dwID09IHdwICYmCisjIGVuZGlmCisJCSAgICBzeW50YXhfcHJlc2VudCh3cC0+d19idWZmZXIpKQorCQlzeW5fc3RhY2tfYXBwbHlfY2hhbmdlcyh3cC0+d19idWZmZXIpOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogR28gZnJvbSB0b3AgdG8gYm90dG9tIHRocm91Z2ggdGhlIHdpbmRvd3MsIHJlZHJhd2luZyB0aGUgb25lcyB0aGF0IG5lZWQKKyAgICAgKiBpdC4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKEZFQVRfU0VBUkNIX0VYVFJBKSB8fCBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKQorICAgIGRpZF9vbmUgPSBGQUxTRTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisgICAgc2VhcmNoX2hsLnJtLnJlZ3Byb2cgPSBOVUxMOworI2VuZGlmCisgICAgRk9SX0FMTF9XSU5ET1dTKHdwKQorICAgIHsKKwlpZiAod3AtPndfcmVkcl90eXBlICE9IDApCisJeworCSAgICBjdXJzb3Jfb2ZmKCk7CisjaWYgZGVmaW5lZChGRUFUX1NFQVJDSF9FWFRSQSkgfHwgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkKKwkgICAgaWYgKCFkaWRfb25lKQorCSAgICB7CisJCWRpZF9vbmUgPSBUUlVFOworIyBpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorCQlzdGFydF9zZWFyY2hfaGwoKTsKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9DTElQQk9BUkQKKwkJLyogV2hlbiBWaXN1YWwgYXJlYSBjaGFuZ2VkLCBtYXkgaGF2ZSB0byB1cGRhdGUgc2VsZWN0aW9uLiAqLworCQlpZiAoY2xpcF9zdGFyLmF2YWlsYWJsZSAmJiBjbGlwX2lzYXV0b3NlbCgpKQorCQkgICAgY2xpcF91cGRhdGVfc2VsZWN0aW9uKCk7CisjIGVuZGlmCisjaWZkZWYgRkVBVF9HVUkKKwkJLyogUmVtb3ZlIHRoZSBjdXJzb3IgYmVmb3JlIHN0YXJ0aW5nIHRvIGRvIGFueXRoaW5nLCBiZWNhdXNlCisJCSAqIHNjcm9sbGluZyBtYXkgbWFrZSBpdCBkaWZmaWN1bHQgdG8gcmVkcmF3IHRoZSB0ZXh0IHVuZGVyCisJCSAqIGl0LiAqLworCQlpZiAoZ3VpLmluX3VzZSkKKwkJICAgIGd1aV91bmRyYXdfY3Vyc29yKCk7CisjZW5kaWYKKwkgICAgfQorI2VuZGlmCisJICAgIHdpbl91cGRhdGUod3ApOworCX0KKworI2lmZGVmIEZFQVRfV0lORE9XUworCS8qIHJlZHJhdyBzdGF0dXMgbGluZSBhZnRlciB0aGUgd2luZG93IHRvIG1pbmltaXplIGN1cnNvciBtb3ZlbWVudCAqLworCWlmICh3cC0+d19yZWRyX3N0YXR1cykKKwl7CisJICAgIGN1cnNvcl9vZmYoKTsKKwkgICAgd2luX3JlZHJfc3RhdHVzKHdwKTsKKwl9CisjZW5kaWYKKyAgICB9CisjaWYgZGVmaW5lZChGRUFUX1NFQVJDSF9FWFRSQSkKKyAgICBlbmRfc2VhcmNoX2hsKCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIC8qIFJlc2V0IGJfbW9kX3NldCBmbGFncy4gIEdvaW5nIHRocm91Z2ggYWxsIHdpbmRvd3MgaXMgcHJvYmFibHkgZmFzdGVyCisgICAgICogdGhhbiBnb2luZyB0aHJvdWdoIGFsbCBidWZmZXJzICh0aGVyZSBjb3VsZCBiZSBtYW55IGJ1ZmZlcnMpLiAqLworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gTlVMTDsgd3AgPSB3cC0+d19uZXh0KQorCXdwLT53X2J1ZmZlci0+Yl9tb2Rfc2V0ID0gRkFMU0U7CisjZWxzZQorCWN1cmJ1Zi0+Yl9tb2Rfc2V0ID0gRkFMU0U7CisjZW5kaWYKKworICAgIHVwZGF0aW5nX3NjcmVlbiA9IEZBTFNFOworI2lmZGVmIEZFQVRfR1VJCisgICAgZ3VpX21heV9yZXNpemVfc2hlbGwoKTsKKyNlbmRpZgorCisgICAgLyogQ2xlYXIgb3IgcmVkcmF3IHRoZSBjb21tYW5kIGxpbmUuICBEb25lIGxhc3QsIGJlY2F1c2Ugc2Nyb2xsaW5nIG1heQorICAgICAqIG1lc3MgdXAgdGhlIGNvbW1hbmQgbGluZS4gKi8KKyAgICBpZiAoY2xlYXJfY21kbGluZSB8fCByZWRyYXdfY21kbGluZSkKKwlzaG93bW9kZSgpOworCisgICAgLyogTWF5IHB1dCB1cCBhbiBpbnRyb2R1Y3RvcnkgbWVzc2FnZSB3aGVuIG5vdCBlZGl0aW5nIGEgZmlsZSAqLworICAgIGlmICghZGlkX2ludHJvICYmIGJ1ZmVtcHR5KCkKKwkgICAgJiYgY3VyYnVmLT5iX2ZuYW1lID09IE5VTEwKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkgICAgJiYgZmlyc3R3aW4tPndfbmV4dCA9PSBOVUxMCisjZW5kaWYKKwkgICAgJiYgdmltX3N0cmNocihwX3NobSwgU0hNX0lOVFJPKSA9PSBOVUxMKQorCWludHJvX21lc3NhZ2UoRkFMU0UpOworICAgIGRpZF9pbnRybyA9IFRSVUU7CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIC8qIFJlZHJhdyB0aGUgY3Vyc29yIGFuZCB1cGRhdGUgdGhlIHNjcm9sbGJhcnMgd2hlbiBhbGwgc2NyZWVuIHVwZGF0aW5nIGlzCisgICAgICogZG9uZS4gKi8KKyAgICBpZiAoZ3VpLmluX3VzZSkKKyAgICB7CisJb3V0X2ZsdXNoKCk7CS8qIHJlcXVpcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUgY3Vyc29yICovCisJaWYgKGRpZF9vbmUpCisJICAgIGd1aV91cGRhdGVfY3Vyc29yKEZBTFNFLCBGQUxTRSk7CisJZ3VpX3VwZGF0ZV9zY3JvbGxiYXJzKEZBTFNFKTsKKyAgICB9CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoRkVBVF9TSUdOUykgfHwgZGVmaW5lZChGRUFUX0dVSSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9wcmVwYXJlIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgdXBkYXRlX2ZpbmlzaCBfX0FSR1MoKHZvaWQpKTsKKworLyoKKyAqIFByZXBhcmUgZm9yIHVwZGF0aW5nIG9uZSBvciBtb3JlIHdpbmRvd3MuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordXBkYXRlX3ByZXBhcmUoKQoreworICAgIGN1cnNvcl9vZmYoKTsKKyAgICB1cGRhdGluZ19zY3JlZW4gPSBUUlVFOworI2lmZGVmIEZFQVRfR1VJCisgICAgLyogUmVtb3ZlIHRoZSBjdXJzb3IgYmVmb3JlIHN0YXJ0aW5nIHRvIGRvIGFueXRoaW5nLCBiZWNhdXNlIHNjcm9sbGluZyBtYXkKKyAgICAgKiBtYWtlIGl0IGRpZmZpY3VsdCB0byByZWRyYXcgdGhlIHRleHQgdW5kZXIgaXQuICovCisgICAgaWYgKGd1aS5pbl91c2UpCisJZ3VpX3VuZHJhd19jdXJzb3IoKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisgICAgc3RhcnRfc2VhcmNoX2hsKCk7CisjZW5kaWYKK30KKworLyoKKyAqIEZpbmlzaCB1cGRhdGluZyBvbmUgb3IgbW9yZSB3aW5kb3dzLgorICovCisgICAgc3RhdGljIHZvaWQKK3VwZGF0ZV9maW5pc2goKQoreworICAgIGlmIChyZWRyYXdfY21kbGluZSkKKwlzaG93bW9kZSgpOworCisjIGlmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisgICAgZW5kX3NlYXJjaF9obCgpOworIyBlbmRpZgorCisgICAgdXBkYXRpbmdfc2NyZWVuID0gRkFMU0U7CisKKyMgaWZkZWYgRkVBVF9HVUkKKyAgICBndWlfbWF5X3Jlc2l6ZV9zaGVsbCgpOworCisgICAgLyogUmVkcmF3IHRoZSBjdXJzb3IgYW5kIHVwZGF0ZSB0aGUgc2Nyb2xsYmFycyB3aGVuIGFsbCBzY3JlZW4gdXBkYXRpbmcgaXMKKyAgICAgKiBkb25lLiAqLworICAgIGlmIChndWkuaW5fdXNlKQorICAgIHsKKwlvdXRfZmx1c2goKTsJLyogcmVxdWlyZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBjdXJzb3IgKi8KKwlndWlfdXBkYXRlX2N1cnNvcihGQUxTRSwgRkFMU0UpOworCWd1aV91cGRhdGVfc2Nyb2xsYmFycyhGQUxTRSk7CisgICAgfQorIyBlbmRpZgorfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfU0lHTlMpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAordXBkYXRlX2RlYnVnX3NpZ24oYnVmLCBsbnVtKQorICAgIGJ1Zl9UCSpidWY7CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICB3aW5fVAkqd3A7CisgICAgaW50CQlkb2l0ID0gRkFMU0U7CisKKyMgaWZkZWYgRkVBVF9GT0xESU5HCisgICAgd2luX2ZvbGRpbmZvLmZpX2xldmVsID0gMDsKKyMgZW5kaWYKKworICAgIC8qIHVwZGF0ZS9kZWxldGUgYSBzcGVjaWZpYyBtYXJrICovCisgICAgRk9SX0FMTF9XSU5ET1dTKHdwKQorICAgIHsKKwlpZiAoYnVmICE9IE5VTEwgJiYgbG51bSA+IDApCisJeworCSAgICBpZiAod3AtPndfYnVmZmVyID09IGJ1ZiAmJiBsbnVtID49IHdwLT53X3RvcGxpbmUKKwkJCQkJCSAgICAgICYmIGxudW0gPCB3cC0+d19ib3RsaW5lKQorCSAgICB7CisJCWlmICh3cC0+d19yZWRyYXdfdG9wID09IDAgfHwgd3AtPndfcmVkcmF3X3RvcCA+IGxudW0pCisJCSAgICB3cC0+d19yZWRyYXdfdG9wID0gbG51bTsKKwkJaWYgKHdwLT53X3JlZHJhd19ib3QgPT0gMCB8fCB3cC0+d19yZWRyYXdfYm90IDwgbG51bSkKKwkJICAgIHdwLT53X3JlZHJhd19ib3QgPSBsbnVtOworCQlyZWRyYXdfd2luX2xhdGVyKHdwLCBWQUxJRCk7CisJICAgIH0KKwl9CisJZWxzZQorCSAgICByZWRyYXdfd2luX2xhdGVyKHdwLCBWQUxJRCk7CisJaWYgKHdwLT53X3JlZHJfdHlwZSAhPSAwKQorCSAgICBkb2l0ID0gVFJVRTsKKyAgICB9CisKKyAgICBpZiAoIWRvaXQpCisJcmV0dXJuOworCisgICAgLyogdXBkYXRlIGFsbCB3aW5kb3dzIHRoYXQgbmVlZCB1cGRhdGluZyAqLworICAgIHVwZGF0ZV9wcmVwYXJlKCk7CisKKyMgaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgZm9yICh3cCA9IGZpcnN0d2luOyB3cDsgd3AgPSB3cC0+d19uZXh0KQorICAgIHsKKwlpZiAod3AtPndfcmVkcl90eXBlICE9IDApCisJICAgIHdpbl91cGRhdGUod3ApOworCWlmICh3cC0+d19yZWRyX3N0YXR1cykKKwkgICAgd2luX3JlZHJfc3RhdHVzKHdwKTsKKyAgICB9CisjIGVsc2UKKyAgICBpZiAoY3Vyd2luLT53X3JlZHJfdHlwZSAhPSAwKQorCXdpbl91cGRhdGUoY3Vyd2luKTsKKyMgZW5kaWYKKworICAgIHVwZGF0ZV9maW5pc2goKTsKK30KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFVwZGF0ZSBhIHNpbmdsZSB3aW5kb3csIGl0cyBzdGF0dXMgbGluZSBhbmQgbWF5YmUgdGhlIGNvbW1hbmQgbGluZSBtc2cuCisgKiBVc2VkIGZvciB0aGUgR1VJIHNjcm9sbGJhci4KKyAqLworICAgIHZvaWQKK3VwZGF0ZVdpbmRvdyh3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgdXBkYXRlX3ByZXBhcmUoKTsKKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgLyogV2hlbiBWaXN1YWwgYXJlYSBjaGFuZ2VkLCBtYXkgaGF2ZSB0byB1cGRhdGUgc2VsZWN0aW9uLiAqLworICAgIGlmIChjbGlwX3N0YXIuYXZhaWxhYmxlICYmIGNsaXBfaXNhdXRvc2VsKCkpCisJY2xpcF91cGRhdGVfc2VsZWN0aW9uKCk7CisjZW5kaWYKKyAgICB3aW5fdXBkYXRlKHdwKTsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBpZiAod3AtPndfcmVkcl9zdGF0dXMKKyMgaWZkZWYgRkVBVF9DTURMX0lORk8KKwkgICAgfHwgcF9ydQorIyBlbmRpZgorIyBpZmRlZiBGRUFUX1NUTF9PUFQKKwkgICAgfHwgKnBfc3RsCisjIGVuZGlmCisJICAgICkKKwl3aW5fcmVkcl9zdGF0dXMod3ApOworI2VuZGlmCisKKyAgICB1cGRhdGVfZmluaXNoKCk7Cit9CisjZW5kaWYKKworLyoKKyAqIFVwZGF0ZSBhIHNpbmdsZSB3aW5kb3cuCisgKgorICogVGhpcyBtYXkgY2F1c2UgdGhlIHdpbmRvd3MgYmVsb3cgaXQgYWxzbyB0byBiZSByZWRyYXduICh3aGVuIGNsZWFyaW5nIHRoZQorICogc2NyZWVuIG9yIHNjcm9sbGluZyBsaW5lcykuCisgKgorICogSG93IHRoZSB3aW5kb3cgaXMgcmVkcmF3biBkZXBlbmRzIG9uIHdwLT53X3JlZHJfdHlwZS4gIEVhY2ggdHlwZSBhbHNvCisgKiBpbXBsaWVzIHRoZSBvbmUgYmVsb3cgaXQuCisgKiBOT1RfVkFMSUQJcmVkcmF3IHRoZSB3aG9sZSB3aW5kb3cKKyAqIFJFRFJBV19UT1AJcmVkcmF3IHRoZSB0b3Agd191cGRfcm93cyB3aW5kb3cgbGluZXMsIG90aGVyd2lzZSBsaWtlIFZBTElECisgKiBJTlZFUlRFRAlyZWRyYXcgdGhlIGNoYW5nZWQgcGFydCBvZiB0aGUgVmlzdWFsIGFyZWEKKyAqIElOVkVSVEVEX0FMTAlyZWRyYXcgdGhlIHdob2xlIFZpc3VhbCBhcmVhCisgKiBWQUxJRAkxLiBzY3JvbGwgdXAvZG93biB0byBhZGp1c3QgZm9yIGEgY2hhbmdlZCB3X3RvcGxpbmUKKyAqCQkyLiB1cGRhdGUgbGluZXMgYXQgdGhlIHRvcCB3aGVuIHNjcm9sbGVkIGRvd24KKyAqCQkzLiByZWRyYXcgY2hhbmdlZCB0ZXh0OgorICoJCSAgIC0gaWYgd3AtPndfYnVmZmVyLT5iX21vZF9zZXQgc2V0LCB1ZHBhdGUgbGluZXMgYmV0d2VlbgorICoJCSAgICAgYl9tb2RfdG9wIGFuZCBiX21vZF9ib3QuCisgKgkJICAgLSBpZiB3cC0+d19yZWRyYXdfdG9wIG5vbi16ZXJvLCByZWRyYXcgbGluZXMgYmV0d2VlbgorICoJCSAgICAgd3AtPndfcmVkcmF3X3RvcCBhbmQgd3AtPndfcmVkcl9ib3QuCisgKgkJICAgLSBjb250aW51ZSByZWRyYXdpbmcgd2hlbiBzeW50YXggc3RhdHVzIGlzIGludmFsaWQuCisgKgkJNC4gaWYgc2Nyb2xsZWQgdXAsIHVwZGF0ZSBsaW5lcyBhdCB0aGUgYm90dG9tLgorICogVGhpcyByZXN1bHRzIGluIHRocmVlIGFyZWFzIHRoYXQgbWF5IG5lZWQgdXBkYXRpbmc6CisgKiB0b3A6CWZyb20gZmlyc3Qgcm93IHRvIHRvcF9lbmQgKHdoZW4gc2Nyb2xsZWQgZG93bikKKyAqIG1pZDogZnJvbSBtaWRfc3RhcnQgdG8gbWlkX2VuZCAodXBkYXRlIGludmVyc2lvbiBvciBjaGFuZ2VkIHRleHQpCisgKiBib3Q6IGZyb20gYm90X3N0YXJ0IHRvIGxhc3Qgcm93ICh3aGVuIHNjcm9sbGVkIHVwKQorICovCisgICAgc3RhdGljIHZvaWQKK3dpbl91cGRhdGUod3ApCisgICAgd2luX1QJKndwOworeworICAgIGJ1Zl9UCSpidWYgPSB3cC0+d19idWZmZXI7CisgICAgaW50CQl0eXBlOworICAgIGludAkJdG9wX2VuZCA9IDA7CS8qIEJlbG93IGxhc3Qgcm93IG9mIHRoZSB0b3AgYXJlYSB0aGF0IG5lZWRzCisJCQkJICAgdXBkYXRpbmcuICAwIHdoZW4gbm8gdG9wIGFyZWEgdXBkYXRpbmcuICovCisgICAgaW50CQltaWRfc3RhcnQgPSA5OTk7LyogZmlyc3Qgcm93IG9mIHRoZSBtaWQgYXJlYSB0aGF0IG5lZWRzCisJCQkJICAgdXBkYXRpbmcuICA5OTkgd2hlbiBubyBtaWQgYXJlYSB1cGRhdGluZy4gKi8KKyAgICBpbnQJCW1pZF9lbmQgPSAwOwkvKiBCZWxvdyBsYXN0IHJvdyBvZiB0aGUgbWlkIGFyZWEgdGhhdCBuZWVkcworCQkJCSAgIHVwZGF0aW5nLiAgMCB3aGVuIG5vIG1pZCBhcmVhIHVwZGF0aW5nLiAqLworICAgIGludAkJYm90X3N0YXJ0ID0gOTk5Oy8qIGZpcnN0IHJvdyBvZiB0aGUgYm90IGFyZWEgdGhhdCBuZWVkcworCQkJCSAgIHVwZGF0aW5nLiAgOTk5IHdoZW4gbm8gYm90IGFyZWEgdXBkYXRpbmcgKi8KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGludAkJc2Nyb2xsZWRfZG93biA9IEZBTFNFOwkvKiBUUlVFIHdoZW4gc2Nyb2xsZWQgZG93biB3aGVuCisJCQkJCSAgIHdfdG9wbGluZSBnb3Qgc21hbGxlciBhIGJpdCAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKyAgICBpbnQJCXRvcF90b19tb2QgPSBGQUxTRTsgICAgLyogcmVkcmF3IGFib3ZlIG1vZF90b3AgKi8KKyNlbmRpZgorCisgICAgaW50CQlyb3c7CQkvKiBjdXJyZW50IHdpbmRvdyByb3cgdG8gZGlzcGxheSAqLworICAgIGxpbmVucl9UCWxudW07CQkvKiBjdXJyZW50IGJ1ZmZlciBsbnVtIHRvIGRpc3BsYXkgKi8KKyAgICBpbnQJCWlkeDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gd19saW5lc1tdICovCisgICAgaW50CQlzcm93OwkJLyogc3RhcnRpbmcgcm93IG9mIHRoZSBjdXJyZW50IGxpbmUgKi8KKworICAgIGludAkJZW9mID0gRkFMU0U7CS8qIGlmIFRSVUUsIHdlIGhpdCB0aGUgZW5kIG9mIHRoZSBmaWxlICovCisgICAgaW50CQlkaWRsaW5lID0gRkFMU0U7IC8qIGlmIFRSVUUsIHdlIGZpbmlzaGVkIHRoZSBsYXN0IGxpbmUgKi8KKyAgICBpbnQJCWk7CisgICAgbG9uZwlqOworICAgIHN0YXRpYyBpbnQJcmVjdXJzaXZlID0gRkFMU0U7CS8qIGJlaW5nIGNhbGxlZCByZWN1cnNpdmVseSAqLworICAgIGludAkJb2xkX2JvdGxpbmUgPSB3cC0+d19ib3RsaW5lOworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGxvbmcJZm9sZF9jb3VudDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfU1lOX0hMCisgICAgLyogcmVtZW1iZXIgd2hhdCBoYXBwZW5lZCB0byB0aGUgcHJldmlvdXMgbGluZSwgdG8ga25vdyBpZgorICAgICAqIGNoZWNrX3Zpc3VhbF9oaWdobGlnaHQoKSBjYW4gYmUgdXNlZCAqLworI2RlZmluZSBESURfTk9ORSAxCS8qIGRpZG4ndCB1cGRhdGUgYSBsaW5lICovCisjZGVmaW5lIERJRF9MSU5FIDIJLyogdXBkYXRlZCBhIG5vcm1hbCBsaW5lICovCisjZGVmaW5lIERJRF9GT0xEIDMJLyogdXBkYXRlZCBhIGZvbGRlZCBsaW5lICovCisgICAgaW50CQlkaWRfdXBkYXRlID0gRElEX05PTkU7CisgICAgbGluZW5yX1QJc3ludGF4X2xhc3RfcGFyc2VkID0gMDsJCS8qIGxhc3QgcGFyc2VkIHRleHQgbGluZSAqLworI2VuZGlmCisgICAgbGluZW5yX1QJbW9kX3RvcCA9IDA7CisgICAgbGluZW5yX1QJbW9kX2JvdCA9IDA7CisjaWYgZGVmaW5lZChGRUFUX1NZTl9ITCkgfHwgZGVmaW5lZChGRUFUX1NFQVJDSF9FWFRSQSkKKyAgICBpbnQJCXNhdmVfZ290X2ludDsKKyNlbmRpZgorCisgICAgdHlwZSA9IHdwLT53X3JlZHJfdHlwZTsKKworICAgIGlmICh0eXBlID09IE5PVF9WQUxJRCkKKyAgICB7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJd3AtPndfcmVkcl9zdGF0dXMgPSBUUlVFOworI2VuZGlmCisJd3AtPndfbGluZXNfdmFsaWQgPSAwOworICAgIH0KKworICAgIC8qIFdpbmRvdyBpcyB6ZXJvLWhlaWdodDogbm90aGluZyB0byBkcmF3LiAqLworICAgIGlmICh3cC0+d19oZWlnaHQgPT0gMCkKKyAgICB7CisJd3AtPndfcmVkcl90eXBlID0gMDsKKwlyZXR1cm47CisgICAgfQorCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICAvKiBXaW5kb3cgaXMgemVyby13aWR0aDogT25seSBuZWVkIHRvIGRyYXcgdGhlIHNlcGFyYXRvci4gKi8KKyAgICBpZiAod3AtPndfd2lkdGggPT0gMCkKKyAgICB7CisJLyogZHJhdyB0aGUgdmVydGljYWwgc2VwYXJhdG9yIHJpZ2h0IG9mIHRoaXMgd2luZG93ICovCisJZHJhd192c2VwX3dpbih3cCwgMCk7CisJd3AtPndfcmVkcl90eXBlID0gMDsKKwlyZXR1cm47CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorICAgIC8qIFNldHVwIGZvciAiOm1hdGNoIiBoaWdobGlnaHRpbmcuICBEaXNhYmxlIGFueSBwcmV2aW91cyBtYXRjaCAqLworICAgIG1hdGNoX2hsLnJtID0gd3AtPndfbWF0Y2g7CisgICAgaWYgKHdwLT53X21hdGNoX2lkID09IDApCisJbWF0Y2hfaGwuYXR0ciA9IDA7CisgICAgZWxzZQorCW1hdGNoX2hsLmF0dHIgPSBzeW5faWQyYXR0cih3cC0+d19tYXRjaF9pZCk7CisgICAgbWF0Y2hfaGwuYnVmID0gYnVmOworICAgIG1hdGNoX2hsLmxudW0gPSAwOworICAgIHNlYXJjaF9obC5idWYgPSBidWY7CisgICAgc2VhcmNoX2hsLmxudW0gPSAwOworICAgIHNlYXJjaF9obC5maXJzdF9sbnVtID0gMDsKKyNlbmRpZgorCisgICAgaWYgKGJ1Zi0+Yl9tb2Rfc2V0ICYmIGJ1Zi0+Yl9tb2RfeGxpbmVzICE9IDAgJiYgd3AtPndfcmVkcmF3X3RvcCAhPSAwKQorICAgIHsKKwkvKgorCSAqIFdoZW4gdGhlcmUgYXJlIGJvdGggaW5zZXJ0ZWQvZGVsZXRlZCBsaW5lcyBhbmQgc3BlY2lmaWMgbGluZXMgdG8gYmUKKwkgKiByZWRyYXduLCB3X3JlZHJhd190b3AgYW5kIHdfcmVkcmF3X2JvdCBtYXkgYmUgaW52YWxpZCwganVzdCByZWRyYXcKKwkgKiBldmVyeXRoaW5nIChvbmx5IGhhcHBlbnMgd2hlbiByZWRyYXdpbmcgaXMgb2ZmIGZvciB3aGlsZSkuCisJICovCisJdHlwZSA9IE5PVF9WQUxJRDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIFNldCBtb2RfdG9wIHRvIHRoZSBmaXJzdCBsaW5lIHRoYXQgbmVlZHMgZGlzcGxheWluZyBiZWNhdXNlIG9mCisJICogY2hhbmdlcy4gIFNldCBtb2RfYm90IHRvIHRoZSBmaXJzdCBsaW5lIGFmdGVyIHRoZSBjaGFuZ2VzLgorCSAqLworCW1vZF90b3AgPSB3cC0+d19yZWRyYXdfdG9wOworCWlmICh3cC0+d19yZWRyYXdfYm90ICE9IDApCisJICAgIG1vZF9ib3QgPSB3cC0+d19yZWRyYXdfYm90ICsgMTsKKwllbHNlCisJICAgIG1vZF9ib3QgPSAwOworCXdwLT53X3JlZHJhd190b3AgPSAwOwkvKiByZXNldCBmb3IgbmV4dCB0aW1lICovCisJd3AtPndfcmVkcmF3X2JvdCA9IDA7CisJaWYgKGJ1Zi0+Yl9tb2Rfc2V0KQorCXsKKwkgICAgaWYgKG1vZF90b3AgPT0gMCB8fCBtb2RfdG9wID4gYnVmLT5iX21vZF90b3ApCisJICAgIHsKKwkJbW9kX3RvcCA9IGJ1Zi0+Yl9tb2RfdG9wOworI2lmZGVmIEZFQVRfU1lOX0hMCisJCS8qIE5lZWQgdG8gcmVkcmF3IGxpbmVzIGFib3ZlIHRoZSBjaGFuZ2UgdGhhdCBtYXkgYmUgaW5jbHVkZWQKKwkJICogaW4gYSBwYXR0ZXJuIG1hdGNoLiAqLworCQlpZiAoc3ludGF4X3ByZXNlbnQoYnVmKSkKKwkJeworCQkgICAgbW9kX3RvcCAtPSBidWYtPmJfc3luX3N5bmNfbGluZWJyZWFrczsKKwkJICAgIGlmIChtb2RfdG9wIDwgMSkKKwkJCW1vZF90b3AgPSAxOworCQl9CisjZW5kaWYKKwkgICAgfQorCSAgICBpZiAobW9kX2JvdCA9PSAwIHx8IG1vZF9ib3QgPCBidWYtPmJfbW9kX2JvdCkKKwkJbW9kX2JvdCA9IGJ1Zi0+Yl9tb2RfYm90OworCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKwkgICAgLyogV2hlbiAnaGxzZWFyY2gnIGlzIG9uIGFuZCB1c2luZyBhIG11bHRpLWxpbmUgc2VhcmNoIHBhdHRlcm4sIGEKKwkgICAgICogY2hhbmdlIGluIG9uZSBsaW5lIG1heSBtYWtlIHRoZSBTZWFyY2ggaGlnaGxpZ2h0aW5nIGluIGEKKwkgICAgICogcHJldmlvdXMgbGluZSBpbnZhbGlkLiAgU2ltcGxlIHNvbHV0aW9uOiByZWRyYXcgYWxsIHZpc2libGUKKwkgICAgICogbGluZXMgYWJvdmUgdGhlIGNoYW5nZS4KKwkgICAgICogU2FtZSBmb3IgYSAiOm1hdGNoIiBwYXR0ZXJuLgorCSAgICAgKi8KKwkgICAgaWYgKChzZWFyY2hfaGwucm0ucmVncHJvZyAhPSBOVUxMCisJCQkmJiByZV9tdWx0aWxpbmUoc2VhcmNoX2hsLnJtLnJlZ3Byb2cpKQorCQkgICAgfHwgKG1hdGNoX2hsLnJtLnJlZ3Byb2cgIT0gTlVMTAorCQkJJiYgcmVfbXVsdGlsaW5lKG1hdGNoX2hsLnJtLnJlZ3Byb2cpKSkKKwkJdG9wX3RvX21vZCA9IFRSVUU7CisjZW5kaWYKKwl9CisjaWZkZWYgRkVBVF9GT0xESU5HCisJaWYgKG1vZF90b3AgIT0gMCAmJiBoYXNBbnlGb2xkaW5nKHdwKSkKKwl7CisJICAgIGxpbmVucl9UCWxudW10LCBsbnVtYjsKKworCSAgICAvKgorCSAgICAgKiBBIGNoYW5nZSBpbiBhIGxpbmUgY2FuIGNhdXNlIGxpbmVzIGFib3ZlIGl0IHRvIGJlY29tZSBmb2xkZWQgb3IKKwkgICAgICogdW5mb2xkZWQuICBGaW5kIHRoZSB0b3AgbW9zdCBidWZmZXIgbGluZSB0aGF0IG1heSBiZSBhZmZlY3RlZC4KKwkgICAgICogSWYgdGhlIGxpbmUgd2FzIHByZXZpb3VzbHkgZm9sZGVkIGFuZCBkaXNwbGF5ZWQsIGdldCB0aGUgZmlyc3QKKwkgICAgICogbGluZSBvZiB0aGF0IGZvbGQuICBJZiB0aGUgbGluZSBpcyBmb2xkZWQgbm93LCBnZXQgdGhlIGZpcnN0CisJICAgICAqIGZvbGRlZCBsaW5lLiAgVXNlIHRoZSBtaW5pbXVtIG9mIHRoZXNlIHR3by4KKwkgICAgICovCisKKwkgICAgLyogRmluZCBsYXN0IHZhbGlkIHdfbGluZXNbXSBlbnRyeSBhYm92ZSBtb2RfdG9wLiAgU2V0IGxudW10IHRvCisJICAgICAqIHRoZSBsaW5lIGJlbG93IGl0LiAgSWYgdGhlcmUgaXMgbm8gdmFsaWQgZW50cnksIHVzZSB3X3RvcGxpbmUuCisJICAgICAqIEZpbmQgdGhlIGZpcnN0IHZhbGlkIHdfbGluZXNbXSBlbnRyeSBiZWxvdyBtb2RfYm90LiAgU2V0IGxudW1iCisJICAgICAqIHRvIHRoaXMgbGluZS4gIElmIHRoZXJlIGlzIG5vIHZhbGlkIGVudHJ5LCB1c2UgTUFYTE5VTS4gKi8KKwkgICAgbG51bXQgPSB3cC0+d190b3BsaW5lOworCSAgICBsbnVtYiA9IE1BWExOVU07CisJICAgIGZvciAoaSA9IDA7IGkgPCB3cC0+d19saW5lc192YWxpZDsgKytpKQorCQlpZiAod3AtPndfbGluZXNbaV0ud2xfdmFsaWQpCisJCXsKKwkJICAgIGlmICh3cC0+d19saW5lc1tpXS53bF9sYXN0bG51bSA8IG1vZF90b3ApCisJCQlsbnVtdCA9IHdwLT53X2xpbmVzW2ldLndsX2xhc3RsbnVtICsgMTsKKwkJICAgIGlmIChsbnVtYiA9PSBNQVhMTlVNICYmIHdwLT53X2xpbmVzW2ldLndsX2xudW0gPj0gbW9kX2JvdCkKKwkJICAgIHsKKwkJCWxudW1iID0gd3AtPndfbGluZXNbaV0ud2xfbG51bTsKKwkJCS8qIFdoZW4gdGhlcmUgaXMgYSBmb2xkIGNvbHVtbiBpdCBtaWdodCBuZWVkIHVwZGF0aW5nCisJCQkgKiBpbiB0aGUgbmV4dCBsaW5lICgiSiIganVzdCBhYm92ZSBhbiBvcGVuIGZvbGQpLiAqLworCQkJaWYgKHdwLT53X3BfZmRjID4gMCkKKwkJCSAgICArK2xudW1iOworCQkgICAgfQorCQl9CisKKwkgICAgKHZvaWQpaGFzRm9sZGluZ1dpbih3cCwgbW9kX3RvcCwgJm1vZF90b3AsIE5VTEwsIFRSVUUsIE5VTEwpOworCSAgICBpZiAobW9kX3RvcCA+IGxudW10KQorCQltb2RfdG9wID0gbG51bXQ7CisKKwkgICAgLyogTm93IGRvIHRoZSBzYW1lIGZvciB0aGUgYm90dG9tIGxpbmUgKG9uZSBhYm92ZSBtb2RfYm90KS4gKi8KKwkgICAgLS1tb2RfYm90OworCSAgICAodm9pZCloYXNGb2xkaW5nV2luKHdwLCBtb2RfYm90LCBOVUxMLCAmbW9kX2JvdCwgVFJVRSwgTlVMTCk7CisJICAgICsrbW9kX2JvdDsKKwkgICAgaWYgKG1vZF9ib3QgPCBsbnVtYikKKwkJbW9kX2JvdCA9IGxudW1iOworCX0KKyNlbmRpZgorCisJLyogV2hlbiBhIGNoYW5nZSBzdGFydHMgYWJvdmUgd190b3BsaW5lIGFuZCB0aGUgZW5kIGlzIGJlbG93CisJICogd190b3BsaW5lLCBzdGFydCByZWRyYXdpbmcgYXQgd190b3BsaW5lLgorCSAqIElmIHRoZSBlbmQgb2YgdGhlIGNoYW5nZSBpcyBhYm92ZSB3X3RvcGxpbmU6IGRvIGxpa2Ugbm8gY2hhbmdlcyB3YXMKKwkgKiBtYWRlZCwgYnV0IHJlZHJhdyB0aGUgZmlyc3QgbGluZSB0byBmaW5kIGNoYW5nZXMgaW4gc3ludGF4LiAqLworCWlmIChtb2RfdG9wICE9IDAgJiYgbW9kX3RvcCA8IHdwLT53X3RvcGxpbmUpCisJeworCSAgICBpZiAobW9kX2JvdCA+IHdwLT53X3RvcGxpbmUpCisJCW1vZF90b3AgPSB3cC0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfU1lOX0hMCisJICAgIGVsc2UgaWYgKHN5bnRheF9wcmVzZW50KGJ1ZikpCisJCXRvcF9lbmQgPSAxOworI2VuZGlmCisJfQorICAgIH0KKworICAgIC8qCisgICAgICogV2hlbiBvbmx5IGRpc3BsYXlpbmcgdGhlIGxpbmVzIGF0IHRoZSB0b3AsIHNldCB0b3BfZW5kLiAgVXNlZCB3aGVuCisgICAgICogd2luZG93IGhhcyBzY3JvbGxlZCBkb3duIGZvciBtc2dfc2Nyb2xsZWQuCisgICAgICovCisgICAgaWYgKHR5cGUgPT0gUkVEUkFXX1RPUCkKKyAgICB7CisJaiA9IDA7CisJZm9yIChpID0gMDsgaSA8IHdwLT53X2xpbmVzX3ZhbGlkOyArK2kpCisJeworCSAgICBqICs9IHdwLT53X2xpbmVzW2ldLndsX3NpemU7CisJICAgIGlmIChqID49IHdwLT53X3VwZF9yb3dzKQorCSAgICB7CisJCXRvcF9lbmQgPSBqOworCQlicmVhazsKKwkgICAgfQorCX0KKwlpZiAodG9wX2VuZCA9PSAwKQorCSAgICAvKiBub3QgZm91bmQgKGNhbm5vdCBoYXBwZW4/KTogcmVkcmF3IGV2ZXJ5dGhpbmcgKi8KKwkgICAgdHlwZSA9IE5PVF9WQUxJRDsKKwllbHNlCisJICAgIC8qIHRvcCBhcmVhIGRlZmluZWQsIHRoZSByZXN0IGlzIFZBTElEICovCisJICAgIHR5cGUgPSBWQUxJRDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGFyZSBubyBjaGFuZ2VzIG9uIHRoZSBzY3JlZW4gdGhhdCByZXF1aXJlIGEgY29tcGxldGUgcmVkcmF3LAorICAgICAqIGhhbmRsZSB0aHJlZSBjYXNlczoKKyAgICAgKiAxOiB3ZSBhcmUgb2ZmIHRoZSB0b3Agb2YgdGhlIHNjcmVlbiBieSBhIGZldyBsaW5lczogc2Nyb2xsIGRvd24KKyAgICAgKiAyOiB3cC0+d190b3BsaW5lIGlzIGJlbG93IHdwLT53X2xpbmVzWzBdLndsX2xudW06IG1heSBzY3JvbGwgdXAKKyAgICAgKiAzOiB3cC0+d190b3BsaW5lIGlzIHdwLT53X2xpbmVzWzBdLndsX2xudW06IGZpbmQgZmlyc3QgZW50cnkgaW4KKyAgICAgKiAgICB3X2xpbmVzW10gdGhhdCBuZWVkcyB1cGRhdGluZy4KKyAgICAgKi8KKyAgICBpZiAoKHR5cGUgPT0gVkFMSUQgfHwgdHlwZSA9PSBJTlZFUlRFRCB8fCB0eXBlID09IElOVkVSVEVEX0FMTCkKKyNpZmRlZiBGRUFUX0RJRkYKKwkgICAgJiYgIXdwLT53X2JvdGZpbGwgJiYgIXdwLT53X29sZF9ib3RmaWxsCisjZW5kaWYKKwkgICAgKQorICAgIHsKKwlpZiAobW9kX3RvcCAhPSAwICYmIHdwLT53X3RvcGxpbmUgPT0gbW9kX3RvcCkKKwl7CisJICAgIC8qCisJICAgICAqIHdfdG9wbGluZSBpcyB0aGUgZmlyc3QgY2hhbmdlZCBsaW5lLCB0aGUgc2Nyb2xsaW5nIHdpbGwgYmUgZG9uZQorCSAgICAgKiBmdXJ0aGVyIGRvd24uCisJICAgICAqLworCX0KKwllbHNlIGlmICh3cC0+d19saW5lc1swXS53bF92YWxpZAorCQkmJiAod3AtPndfdG9wbGluZSA8IHdwLT53X2xpbmVzWzBdLndsX2xudW0KKyNpZmRlZiBGRUFUX0RJRkYKKwkJICAgIHx8ICh3cC0+d190b3BsaW5lID09IHdwLT53X2xpbmVzWzBdLndsX2xudW0KKwkJCSYmIHdwLT53X3RvcGZpbGwgPiB3cC0+d19vbGRfdG9wZmlsbCkKKyNlbmRpZgorCQkgICApKQorCXsKKwkgICAgLyoKKwkgICAgICogTmV3IHRvcGxpbmUgaXMgYWJvdmUgb2xkIHRvcGxpbmU6IE1heSBzY3JvbGwgZG93bi4KKwkgICAgICovCisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIGlmIChoYXNBbnlGb2xkaW5nKHdwKSkKKwkgICAgeworCQlsaW5lbnJfVCBsbjsKKworCQkvKiBjb3VudCB0aGUgbnVtYmVyIG9mIGxpbmVzIHdlIGFyZSBvZmYsIGNvdW50aW5nIGEgc2VxdWVuY2UKKwkJICogb2YgZm9sZGVkIGxpbmVzIGFzIG9uZSAqLworCQlqID0gMDsKKwkJZm9yIChsbiA9IHdwLT53X3RvcGxpbmU7IGxuIDwgd3AtPndfbGluZXNbMF0ud2xfbG51bTsgKytsbikKKwkJeworCQkgICAgKytqOworCQkgICAgaWYgKGogPj0gd3AtPndfaGVpZ2h0IC0gMikKKwkJCWJyZWFrOworCQkgICAgKHZvaWQpaGFzRm9sZGluZ1dpbih3cCwgbG4sIE5VTEwsICZsbiwgVFJVRSwgTlVMTCk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJaiA9IHdwLT53X2xpbmVzWzBdLndsX2xudW0gLSB3cC0+d190b3BsaW5lOworCSAgICBpZiAoaiA8IHdwLT53X2hlaWdodCAtIDIpCQkvKiBub3QgdG9vIGZhciBvZmYgKi8KKwkgICAgeworCQlpID0gcGxpbmVzX21fd2luKHdwLCB3cC0+d190b3BsaW5lLCB3cC0+d19saW5lc1swXS53bF9sbnVtIC0gMSk7CisjaWZkZWYgRkVBVF9ESUZGCisJCS8qIGluc2VydCBleHRyYSBsaW5lcyBmb3IgcHJldmlvdXNseSBpbnZpc2libGUgZmlsbGVyIGxpbmVzICovCisJCWlmICh3cC0+d19saW5lc1swXS53bF9sbnVtICE9IHdwLT53X3RvcGxpbmUpCisJCSAgICBpICs9IGRpZmZfY2hlY2tfZmlsbCh3cCwgd3AtPndfbGluZXNbMF0ud2xfbG51bSkKKwkJCQkJCQkgIC0gd3AtPndfb2xkX3RvcGZpbGw7CisjZW5kaWYKKwkJaWYgKGkgPCB3cC0+d19oZWlnaHQgLSAyKQkvKiBsZXNzIHRoYW4gYSBzY3JlZW4gb2ZmICovCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBUcnkgdG8gaW5zZXJ0IHRoZSBjb3JyZWN0IG51bWJlciBvZiBsaW5lcy4KKwkJICAgICAqIElmIG5vdCB0aGUgbGFzdCB3aW5kb3csIGRlbGV0ZSB0aGUgbGluZXMgYXQgdGhlIGJvdHRvbS4KKwkJICAgICAqIHdpbl9pbnNfbGluZXMgbWF5IGZhaWwgd2hlbiB0aGUgdGVybWluYWwgY2FuJ3QgZG8gaXQuCisJCSAgICAgKi8KKwkJICAgIGlmIChpID4gMCkKKwkJCWNoZWNrX2Zvcl9kZWxheShGQUxTRSk7CisJCSAgICBpZiAod2luX2luc19saW5lcyh3cCwgMCwgaSwgRkFMU0UsIHdwID09IGZpcnN0d2luKSA9PSBPSykKKwkJICAgIHsKKwkJCWlmICh3cC0+d19saW5lc192YWxpZCAhPSAwKQorCQkJeworCQkJICAgIC8qIE5lZWQgdG8gdXBkYXRlIHJvd3MgdGhhdCBhcmUgbmV3LCBzdG9wIGF0IHRoZQorCQkJICAgICAqIGZpcnN0IG9uZSB0aGF0IHNjcm9sbGVkIGRvd24uICovCisJCQkgICAgdG9wX2VuZCA9IGk7CisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJCSAgICBzY3JvbGxlZF9kb3duID0gVFJVRTsKKyNlbmRpZgorCisJCQkgICAgLyogTW92ZSB0aGUgZW50cmllcyB0aGF0IHdlcmUgc2Nyb2xsZWQsIGRpc2FibGUKKwkJCSAgICAgKiB0aGUgZW50cmllcyBmb3IgdGhlIGxpbmVzIHRvIGJlIHJlZHJhd24uICovCisJCQkgICAgaWYgKCh3cC0+d19saW5lc192YWxpZCArPSBqKSA+IHdwLT53X2hlaWdodCkKKwkJCQl3cC0+d19saW5lc192YWxpZCA9IHdwLT53X2hlaWdodDsKKwkJCSAgICBmb3IgKGlkeCA9IHdwLT53X2xpbmVzX3ZhbGlkOyBpZHggLSBqID49IDA7IGlkeC0tKQorCQkJCXdwLT53X2xpbmVzW2lkeF0gPSB3cC0+d19saW5lc1tpZHggLSBqXTsKKwkJCSAgICB3aGlsZSAoaWR4ID49IDApCisJCQkJd3AtPndfbGluZXNbaWR4LS1dLndsX3ZhbGlkID0gRkFMU0U7CisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlCisJCQltaWRfc3RhcnQgPSAwOwkJLyogcmVkcmF3IGFsbCBsaW5lcyAqLworCQl9CisJCWVsc2UKKwkJICAgIG1pZF9zdGFydCA9IDA7CQkvKiByZWRyYXcgYWxsIGxpbmVzICovCisJICAgIH0KKwkgICAgZWxzZQorCQltaWRfc3RhcnQgPSAwOwkJLyogcmVkcmF3IGFsbCBsaW5lcyAqLworCX0KKwllbHNlCisJeworCSAgICAvKgorCSAgICAgKiBOZXcgdG9wbGluZSBpcyBhdCBvciBiZWxvdyBvbGQgdG9wbGluZTogTWF5IHNjcm9sbCB1cC4KKwkgICAgICogV2hlbiB0b3BsaW5lIGRpZG4ndCBjaGFuZ2UsIGZpbmQgZmlyc3QgZW50cnkgaW4gd19saW5lc1tdIHRoYXQKKwkgICAgICogbmVlZHMgdXBkYXRpbmcuCisJICAgICAqLworCisJICAgIC8qIHRyeSB0byBmaW5kIHdwLT53X3RvcGxpbmUgaW4gd3AtPndfbGluZXNbXS53bF9sbnVtICovCisJICAgIGogPSAtMTsKKwkgICAgcm93ID0gMDsKKwkgICAgZm9yIChpID0gMDsgaSA8IHdwLT53X2xpbmVzX3ZhbGlkOyBpKyspCisJICAgIHsKKwkJaWYgKHdwLT53X2xpbmVzW2ldLndsX3ZhbGlkCisJCQkmJiB3cC0+d19saW5lc1tpXS53bF9sbnVtID09IHdwLT53X3RvcGxpbmUpCisJCXsKKwkJICAgIGogPSBpOworCQkgICAgYnJlYWs7CisJCX0KKwkJcm93ICs9IHdwLT53X2xpbmVzW2ldLndsX3NpemU7CisJICAgIH0KKwkgICAgaWYgKGogPT0gLTEpCisJICAgIHsKKwkJLyogaWYgd3AtPndfdG9wbGluZSBpcyBub3QgaW4gd3AtPndfbGluZXNbXS53bF9sbnVtIHJlZHJhdyBhbGwKKwkJICogbGluZXMgKi8KKwkJbWlkX3N0YXJ0ID0gMDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyoKKwkJICogVHJ5IHRvIGRlbGV0ZSB0aGUgY29ycmVjdCBudW1iZXIgb2YgbGluZXMuCisJCSAqIHdwLT53X3RvcGxpbmUgaXMgYXQgd3AtPndfbGluZXNbaV0ud2xfbG51bS4KKwkJICovCisjaWZkZWYgRkVBVF9ESUZGCisJCS8qIElmIHRoZSB0b3BsaW5lIGRpZG4ndCBjaGFuZ2UsIGRlbGV0ZSBvbGQgZmlsbGVyIGxpbmVzLAorCQkgKiBvdGhlcndpc2UgZGVsZXRlIGZpbGxlciBsaW5lcyBvZiB0aGUgbmV3IHRvcGxpbmUuLi4gKi8KKwkJaWYgKHdwLT53X2xpbmVzWzBdLndsX2xudW0gPT0gd3AtPndfdG9wbGluZSkKKwkJICAgIHJvdyArPSB3cC0+d19vbGRfdG9wZmlsbDsKKwkJZWxzZQorCQkgICAgcm93ICs9IGRpZmZfY2hlY2tfZmlsbCh3cCwgd3AtPndfdG9wbGluZSk7CisJCS8qIC4uLiBidXQgZG9uJ3QgZGVsZXRlIG5ldyBmaWxsZXIgbGluZXMuICovCisJCXJvdyAtPSB3cC0+d190b3BmaWxsOworI2VuZGlmCisJCWlmIChyb3cgPiAwKQorCQl7CisJCSAgICBjaGVja19mb3JfZGVsYXkoRkFMU0UpOworCQkgICAgaWYgKHdpbl9kZWxfbGluZXMod3AsIDAsIHJvdywgRkFMU0UsIHdwID09IGZpcnN0d2luKSA9PSBPSykKKwkJCWJvdF9zdGFydCA9IHdwLT53X2hlaWdodCAtIHJvdzsKKwkJICAgIGVsc2UKKwkJCW1pZF9zdGFydCA9IDA7CQkvKiByZWRyYXcgYWxsIGxpbmVzICovCisJCX0KKwkJaWYgKChyb3cgPT0gMCB8fCBib3Rfc3RhcnQgPCA5OTkpICYmIHdwLT53X2xpbmVzX3ZhbGlkICE9IDApCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBTa2lwIHRoZSBsaW5lcyAoYmVsb3cgdGhlIGRlbGV0ZWQgbGluZXMpIHRoYXQgYXJlIHN0aWxsCisJCSAgICAgKiB2YWxpZCBhbmQgZG9uJ3QgbmVlZCByZWRyYXdpbmcuCUNvcHkgdGhlaXIgaW5mbworCQkgICAgICogdXB3YXJkcywgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGRlbGV0ZWQgbGluZXMuICBTZXQKKwkJICAgICAqIGJvdF9zdGFydCB0byB0aGUgZmlyc3Qgcm93IHRoYXQgbmVlZHMgcmVkcmF3aW5nLgorCQkgICAgICovCisJCSAgICBib3Rfc3RhcnQgPSAwOworCQkgICAgaWR4ID0gMDsKKwkJICAgIGZvciAoOzspCisJCSAgICB7CisJCQl3cC0+d19saW5lc1tpZHhdID0gd3AtPndfbGluZXNbal07CisJCQkvKiBzdG9wIGF0IGxpbmUgdGhhdCBkaWRuJ3QgZml0LCB1bmxlc3MgaXQgaXMgc3RpbGwKKwkJCSAqIHZhbGlkIChubyBsaW5lcyBkZWxldGVkKSAqLworCQkJaWYgKHJvdyA+IDAgJiYgYm90X3N0YXJ0ICsgcm93CisJCQkJICsgKGludCl3cC0+d19saW5lc1tqXS53bF9zaXplID4gd3AtPndfaGVpZ2h0KQorCQkJeworCQkJICAgIHdwLT53X2xpbmVzX3ZhbGlkID0gaWR4ICsgMTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCWJvdF9zdGFydCArPSB3cC0+d19saW5lc1tpZHgrK10ud2xfc2l6ZTsKKworCQkJLyogc3RvcCBhdCB0aGUgbGFzdCB2YWxpZCBlbnRyeSBpbiB3X2xpbmVzW10ud2xfc2l6ZSAqLworCQkJaWYgKCsraiA+PSB3cC0+d19saW5lc192YWxpZCkKKwkJCXsKKwkJCSAgICB3cC0+d19saW5lc192YWxpZCA9IGlkeDsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKyNpZmRlZiBGRUFUX0RJRkYKKwkJICAgIC8qIENvcnJlY3QgdGhlIGZpcnN0IGVudHJ5IGZvciBmaWxsZXIgbGluZXMgYXQgdGhlIHRvcAorCQkgICAgICogd2hlbiBpdCB3b24ndCBnZXQgdXBkYXRlZCBiZWxvdy4gKi8KKwkJICAgIGlmICh3cC0+d19wX2RpZmYgJiYgYm90X3N0YXJ0ID4gMCkKKwkJCXdwLT53X2xpbmVzWzBdLndsX3NpemUgPQorCQkJICAgIHBsaW5lc193aW5fbm9maWxsKHdwLCB3cC0+d190b3BsaW5lLCBUUlVFKQorCQkJCQkJCSAgICAgICsgd3AtPndfdG9wZmlsbDsKKyNlbmRpZgorCQl9CisJICAgIH0KKwl9CisKKwkvKiBXaGVuIHN0YXJ0aW5nIHJlZHJhdyBpbiB0aGUgZmlyc3QgbGluZSwgcmVkcmF3IGFsbCBsaW5lcy4gIFdoZW4KKwkgKiB0aGVyZSBpcyBvbmx5IG9uZSB3aW5kb3cgaXQncyBwcm9iYWJseSBmYXN0ZXIgdG8gY2xlYXIgdGhlIHNjcmVlbgorCSAqIGZpcnN0LiAqLworCWlmIChtaWRfc3RhcnQgPT0gMCkKKwl7CisJICAgIG1pZF9lbmQgPSB3cC0+d19oZWlnaHQ7CisJICAgIGlmIChsYXN0d2luID09IGZpcnN0d2luKQorCQlzY3JlZW5jbGVhcigpOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBOb3QgVkFMSUQgb3IgSU5WRVJURUQ6IHJlZHJhdyBhbGwgbGluZXMuICovCisJbWlkX3N0YXJ0ID0gMDsKKwltaWRfZW5kID0gd3AtPndfaGVpZ2h0OworICAgIH0KKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgLyogY2hlY2sgaWYgd2UgYXJlIHVwZGF0aW5nIG9yIHJlbW92aW5nIHRoZSBpbnZlcnRlZCBwYXJ0ICovCisgICAgaWYgKChWSXN1YWxfYWN0aXZlICYmIGJ1ZiA9PSBjdXJ3aW4tPndfYnVmZmVyKQorCSAgICB8fCAod3AtPndfb2xkX2N1cnNvcl9sbnVtICE9IDAgJiYgdHlwZSAhPSBOT1RfVkFMSUQpKQorICAgIHsKKwlsaW5lbnJfVCAgICBmcm9tLCB0bzsKKworCWlmIChWSXN1YWxfYWN0aXZlKQorCXsKKwkgICAgaWYgKFZJc3VhbF9hY3RpdmUKKwkJICAgICYmIChWSXN1YWxfbW9kZSAhPSB3cC0+d19vbGRfdmlzdWFsX21vZGUKKwkJCXx8IHR5cGUgPT0gSU5WRVJURURfQUxMKSkKKwkgICAgeworCQkvKgorCQkgKiBJZiB0aGUgdHlwZSBvZiBWaXN1YWwgc2VsZWN0aW9uIGNoYW5nZWQsIHJlZHJhdyB0aGUgd2hvbGUKKwkJICogc2VsZWN0aW9uLiAgQWxzbyB3aGVuIHRoZSBvd25lcnNoaXAgb2YgdGhlIFggc2VsZWN0aW9uIGlzCisJCSAqIGdhaW5lZCBvciBsb3N0LgorCQkgKi8KKwkJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8IFZJc3VhbC5sbnVtKQorCQl7CisJCSAgICBmcm9tID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQkgICAgdG8gPSBWSXN1YWwubG51bTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGZyb20gPSBWSXN1YWwubG51bTsKKwkJICAgIHRvID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQl9CisJCS8qIHJlZHJhdyBtb3JlIHdoZW4gdGhlIGN1cnNvciBtb3ZlZCBhcyB3ZWxsICovCisJCWlmICh3cC0+d19vbGRfY3Vyc29yX2xudW0gPCBmcm9tKQorCQkgICAgZnJvbSA9IHdwLT53X29sZF9jdXJzb3JfbG51bTsKKwkJaWYgKHdwLT53X29sZF9jdXJzb3JfbG51bSA+IHRvKQorCQkgICAgdG8gPSB3cC0+d19vbGRfY3Vyc29yX2xudW07CisJCWlmICh3cC0+d19vbGRfdmlzdWFsX2xudW0gPCBmcm9tKQorCQkgICAgZnJvbSA9IHdwLT53X29sZF92aXN1YWxfbG51bTsKKwkJaWYgKHdwLT53X29sZF92aXN1YWxfbG51bSA+IHRvKQorCQkgICAgdG8gPSB3cC0+d19vbGRfdmlzdWFsX2xudW07CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qCisJCSAqIEZpbmQgdGhlIGxpbmUgbnVtYmVycyB0aGF0IG5lZWQgdG8gYmUgdXBkYXRlZDogVGhlIGxpbmVzCisJCSAqIGJldHdlZW4gdGhlIG9sZCBjdXJzb3IgcG9zaXRpb24gYW5kIHRoZSBjdXJyZW50IGN1cnNvcgorCQkgKiBwb3NpdGlvbi4gIEFsc28gY2hlY2sgaWYgdGhlIFZpc3VhbCBwb3NpdGlvbiBjaGFuZ2VkLgorCQkgKi8KKwkJaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8IHdwLT53X29sZF9jdXJzb3JfbG51bSkKKwkJeworCQkgICAgZnJvbSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKwkJICAgIHRvID0gd3AtPndfb2xkX2N1cnNvcl9sbnVtOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgZnJvbSA9IHdwLT53X29sZF9jdXJzb3JfbG51bTsKKwkJICAgIHRvID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCQkgICAgaWYgKGZyb20gPT0gMCkJLyogVmlzdWFsIG1vZGUganVzdCBzdGFydGVkICovCisJCQlmcm9tID0gdG87CisJCX0KKworCQlpZiAoVklzdWFsLmxudW0gIT0gd3AtPndfb2xkX3Zpc3VhbF9sbnVtKQorCQl7CisJCSAgICBpZiAod3AtPndfb2xkX3Zpc3VhbF9sbnVtIDwgZnJvbQorCQkJCQkJJiYgd3AtPndfb2xkX3Zpc3VhbF9sbnVtICE9IDApCisJCQlmcm9tID0gd3AtPndfb2xkX3Zpc3VhbF9sbnVtOworCQkgICAgaWYgKHdwLT53X29sZF92aXN1YWxfbG51bSA+IHRvKQorCQkJdG8gPSB3cC0+d19vbGRfdmlzdWFsX2xudW07CisJCSAgICBpZiAoVklzdWFsLmxudW0gPCBmcm9tKQorCQkJZnJvbSA9IFZJc3VhbC5sbnVtOworCQkgICAgaWYgKFZJc3VhbC5sbnVtID4gdG8pCisJCQl0byA9IFZJc3VhbC5sbnVtOworCQl9CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBJZiBpbiBibG9jayBtb2RlIGFuZCBjaGFuZ2VkIGNvbHVtbiBvciBjdXJ3aW4tPndfY3Vyc3dhbnQ6CisJICAgICAqIHVwZGF0ZSBhbGwgbGluZXMuCisJICAgICAqIEZpcnN0IGNvbXB1dGUgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIGNvbHVtbi4KKwkgICAgICovCisJICAgIGlmIChWSXN1YWxfbW9kZSA9PSBDdHJsX1YpCisJICAgIHsKKwkJY29sbnJfVAlmcm9tYywgdG9jOworCisJCWdldHZjb2xzKHdwLCAmVklzdWFsLCAmY3Vyd2luLT53X2N1cnNvciwgJmZyb21jLCAmdG9jKTsKKwkJKyt0b2M7CisJCWlmIChjdXJ3aW4tPndfY3Vyc3dhbnQgPT0gTUFYQ09MKQorCQkgICAgdG9jID0gTUFYQ09MOworCisJCWlmIChmcm9tYyAhPSB3cC0+d19vbGRfY3Vyc29yX2Zjb2wKKwkJCXx8IHRvYyAhPSB3cC0+d19vbGRfY3Vyc29yX2xjb2wpCisJCXsKKwkJICAgIGlmIChmcm9tID4gVklzdWFsLmxudW0pCisJCQlmcm9tID0gVklzdWFsLmxudW07CisJCSAgICBpZiAodG8gPCBWSXN1YWwubG51bSkKKwkJCXRvID0gVklzdWFsLmxudW07CisJCX0KKwkJd3AtPndfb2xkX2N1cnNvcl9mY29sID0gZnJvbWM7CisJCXdwLT53X29sZF9jdXJzb3JfbGNvbCA9IHRvYzsKKwkgICAgfQorCX0KKwllbHNlCisJeworCSAgICAvKiBVc2UgdGhlIGxpbmUgbnVtYmVycyBvZiB0aGUgb2xkIFZpc3VhbCBhcmVhLiAqLworCSAgICBpZiAod3AtPndfb2xkX2N1cnNvcl9sbnVtIDwgd3AtPndfb2xkX3Zpc3VhbF9sbnVtKQorCSAgICB7CisJCWZyb20gPSB3cC0+d19vbGRfY3Vyc29yX2xudW07CisJCXRvID0gd3AtPndfb2xkX3Zpc3VhbF9sbnVtOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlmcm9tID0gd3AtPndfb2xkX3Zpc3VhbF9sbnVtOworCQl0byA9IHdwLT53X29sZF9jdXJzb3JfbG51bTsKKwkgICAgfQorCX0KKworCS8qCisJICogVGhlcmUgaXMgbm8gbmVlZCB0byB1cGRhdGUgbGluZXMgYWJvdmUgdGhlIHRvcCBvZiB0aGUgd2luZG93LgorCSAqLworCWlmIChmcm9tIDwgd3AtPndfdG9wbGluZSkKKwkgICAgZnJvbSA9IHdwLT53X3RvcGxpbmU7CisKKwkvKgorCSAqIElmIHdlIGtub3cgdGhlIHZhbHVlIG9mIHdfYm90bGluZSwgdXNlIGl0IHRvIHJlc3RyaWN0IHRoZSB1cGRhdGUgdG8KKwkgKiB0aGUgbGluZXMgdGhhdCBhcmUgdmlzaWJsZSBpbiB0aGUgd2luZG93LgorCSAqLworCWlmICh3cC0+d192YWxpZCAmIFZBTElEX0JPVExJTkUpCisJeworCSAgICBpZiAoZnJvbSA+PSB3cC0+d19ib3RsaW5lKQorCQlmcm9tID0gd3AtPndfYm90bGluZSAtIDE7CisJICAgIGlmICh0byA+PSB3cC0+d19ib3RsaW5lKQorCQl0byA9IHdwLT53X2JvdGxpbmUgLSAxOworCX0KKworCS8qCisJICogRmluZCB0aGUgbWluaW1hbCBwYXJ0IHRvIGJlIHVwZGF0ZWQuCisJICogV2F0Y2ggb3V0IGZvciBzY3JvbGxpbmcgdGhhdCBtYWRlIGVudHJpZXMgaW4gd19saW5lc1tdIGludmFsaWQuCisJICogRS5nLiwgQ1RSTC1VIG1ha2VzIHRoZSBmaXJzdCBoYWxmIG9mIHdfbGluZXNbXSBpbnZhbGlkIGFuZCBzZXRzCisJICogdG9wX2VuZDsgbmVlZCB0byByZWRyYXcgZnJvbSB0b3BfZW5kIHRvIHRoZSAidG8iIGxpbmUuCisJICogQSBtaWRkbGUgbW91c2UgY2xpY2sgd2l0aCBhIFZpc3VhbCBzZWxlY3Rpb24gbWF5IGNoYW5nZSB0aGUgdGV4dAorCSAqIGFib3ZlIHRoZSBWaXN1YWwgYXJlYSBhbmQgcmVzZXQgd2xfdmFsaWQsIGRvIGNvdW50IHRoZXNlIGZvcgorCSAqIG1pZF9lbmQgKGluIHNyb3cpLgorCSAqLworCWlmIChtaWRfc3RhcnQgPiAwKQorCXsKKwkgICAgbG51bSA9IHdwLT53X3RvcGxpbmU7CisJICAgIGlkeCA9IDA7CisJICAgIHNyb3cgPSAwOworCSAgICBpZiAoc2Nyb2xsZWRfZG93bikKKwkJbWlkX3N0YXJ0ID0gdG9wX2VuZDsKKwkgICAgZWxzZQorCQltaWRfc3RhcnQgPSAwOworCSAgICB3aGlsZSAobG51bSA8IGZyb20gJiYgaWR4IDwgd3AtPndfbGluZXNfdmFsaWQpCS8qIGZpbmQgc3RhcnQgKi8KKwkgICAgeworCQlpZiAod3AtPndfbGluZXNbaWR4XS53bF92YWxpZCkKKwkJICAgIG1pZF9zdGFydCArPSB3cC0+d19saW5lc1tpZHhdLndsX3NpemU7CisJCWVsc2UgaWYgKCFzY3JvbGxlZF9kb3duKQorCQkgICAgc3JvdyArPSB3cC0+d19saW5lc1tpZHhdLndsX3NpemU7CisJCSsraWR4OworIyBpZmRlZiBGRUFUX0ZPTERJTkcKKwkJaWYgKGlkeCA8IHdwLT53X2xpbmVzX3ZhbGlkICYmIHdwLT53X2xpbmVzW2lkeF0ud2xfdmFsaWQpCisJCSAgICBsbnVtID0gd3AtPndfbGluZXNbaWR4XS53bF9sbnVtOworCQllbHNlCisjIGVuZGlmCisJCSAgICArK2xudW07CisJICAgIH0KKwkgICAgc3JvdyArPSBtaWRfc3RhcnQ7CisJICAgIG1pZF9lbmQgPSB3cC0+d19oZWlnaHQ7CisJICAgIGZvciAoIDsgaWR4IDwgd3AtPndfbGluZXNfdmFsaWQ7ICsraWR4KQkJLyogZmluZCBlbmQgKi8KKwkgICAgeworCQlpZiAod3AtPndfbGluZXNbaWR4XS53bF92YWxpZAorCQkJJiYgd3AtPndfbGluZXNbaWR4XS53bF9sbnVtID49IHRvICsgMSkKKwkJeworCQkgICAgLyogT25seSB1cGRhdGUgdW50aWwgZmlyc3Qgcm93IG9mIHRoaXMgbGluZSAqLworCQkgICAgbWlkX2VuZCA9IHNyb3c7CisJCSAgICBicmVhazsKKwkJfQorCQlzcm93ICs9IHdwLT53X2xpbmVzW2lkeF0ud2xfc2l6ZTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSAmJiBidWYgPT0gY3Vyd2luLT53X2J1ZmZlcikKKyAgICB7CisJd3AtPndfb2xkX3Zpc3VhbF9tb2RlID0gVklzdWFsX21vZGU7CisJd3AtPndfb2xkX2N1cnNvcl9sbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCXdwLT53X29sZF92aXN1YWxfbG51bSA9IFZJc3VhbC5sbnVtOworCXdwLT53X29sZF9jdXJzd2FudCA9IGN1cndpbi0+d19jdXJzd2FudDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwl3cC0+d19vbGRfdmlzdWFsX21vZGUgPSAwOworCXdwLT53X29sZF9jdXJzb3JfbG51bSA9IDA7CisJd3AtPndfb2xkX3Zpc3VhbF9sbnVtID0gMDsKKyAgICB9CisjZW5kaWYgLyogRkVBVF9WSVNVQUwgKi8KKworI2lmIGRlZmluZWQoRkVBVF9TWU5fSEwpIHx8IGRlZmluZWQoRkVBVF9TRUFSQ0hfRVhUUkEpCisgICAgLyogcmVzZXQgZ290X2ludCwgb3RoZXJ3aXNlIHJlZ2V4cCB3b24ndCB3b3JrICovCisgICAgc2F2ZV9nb3RfaW50ID0gZ290X2ludDsKKyAgICBnb3RfaW50ID0gMDsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworICAgIHdpbl9mb2xkaW5mby5maV9sZXZlbCA9IDA7CisjZW5kaWYKKworICAgIC8qCisgICAgICogVXBkYXRlIGFsbCB0aGUgd2luZG93IHJvd3MuCisgICAgICovCisgICAgaWR4ID0gMDsJCS8qIGZpcnN0IGVudHJ5IGluIHdfbGluZXNbXS53bF9zaXplICovCisgICAgcm93ID0gMDsKKyAgICBzcm93ID0gMDsKKyAgICBsbnVtID0gd3AtPndfdG9wbGluZTsJLyogZmlyc3QgbGluZSBzaG93biBpbiB3aW5kb3cgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwkvKiBzdG9wIHVwZGF0aW5nIHdoZW4gcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSB3aW5kb3cgKGNoZWNrIGZvciBfcGFzdF8KKwkgKiB0aGUgZW5kIG9mIHRoZSB3aW5kb3cgaXMgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCkgKi8KKwlpZiAocm93ID09IHdwLT53X2hlaWdodCkKKwl7CisJICAgIGRpZGxpbmUgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisKKwkvKiBzdG9wIHVwZGF0aW5nIHdoZW4gaGl0IHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KKwlpZiAobG51bSA+IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXsKKwkgICAgZW9mID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorCisJLyogUmVtZW1iZXIgdGhlIHN0YXJ0aW5nIHJvdyBvZiB0aGUgbGluZSB0aGF0IGlzIGdvaW5nIHRvIGJlIGRlYWx0CisJICogd2l0aC4gIEl0IGlzIHVzZWQgZnVydGhlciBkb3duIHdoZW4gdGhlIGxpbmUgZG9lc24ndCBmaXQuICovCisJc3JvdyA9IHJvdzsKKworCS8qCisJICogVXBkYXRlIGEgbGluZSB3aGVuIGl0IGlzIGluIGFuIGFyZWEgdGhhdCBuZWVkcyB1cGRhdGluZywgd2hlbiBpdAorCSAqIGhhcyBjaGFuZ2VzIG9yIHdfbGluZXNbaWR4XSBpcyBpbnZhbGlkLgorCSAqIGJvdF9zdGFydCBtYXkgYmUgaGFsZndheSBhIHdyYXBwZWQgbGluZSBhZnRlciB1c2luZworCSAqIHdpbl9kZWxfbGluZXMoKSwgY2hlY2sgaWYgdGhlIGN1cnJlbnQgbGluZSBpbmNsdWRlcyBpdC4KKwkgKiBXaGVuIHN5bnRheCBmb2xkaW5nIGlzIGJlaW5nIHVzZWQsIHRoZSBzYXZlZCBzeW50YXggc3RhdGVzIHdpbGwKKwkgKiBhbHJlYWR5IGhhdmUgYmVlbiB1cGRhdGVkLCB3ZSBjYW4ndCBzZWUgd2hlcmUgdGhlIHN5bnRheCBzdGF0ZSBpcworCSAqIHRoZSBzYW1lIGFnYWluLCBqdXN0IHVwZGF0ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSB3aW5kb3cuCisJICovCisJaWYgKHJvdyA8IHRvcF9lbmQKKwkJfHwgKHJvdyA+PSBtaWRfc3RhcnQgJiYgcm93IDwgbWlkX2VuZCkKKyNpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorCQl8fCB0b3BfdG9fbW9kCisjZW5kaWYKKwkJfHwgaWR4ID49IHdwLT53X2xpbmVzX3ZhbGlkCisJCXx8IChyb3cgKyB3cC0+d19saW5lc1tpZHhdLndsX3NpemUgPiBib3Rfc3RhcnQpCisJCXx8IChtb2RfdG9wICE9IDAKKwkJICAgICYmIChsbnVtID09IG1vZF90b3AKKwkJCXx8IChsbnVtID49IG1vZF90b3AKKwkJCSAgICAmJiAobG51bSA8IG1vZF9ib3QKKyNpZmRlZiBGRUFUX1NZTl9ITAorCQkJCXx8IGRpZF91cGRhdGUgPT0gRElEX0ZPTEQKKwkJCQl8fCAoZGlkX3VwZGF0ZSA9PSBESURfTElORQorCQkJCSAgICAmJiBzeW50YXhfcHJlc2VudChidWYpCisJCQkJICAgICYmICgKKyMgaWZkZWYgRkVBVF9GT0xESU5HCisJCQkJCShmb2xkbWV0aG9kSXNTeW50YXgod3ApCisJCQkJCQkgICAgICAmJiBoYXNBbnlGb2xkaW5nKHdwKSkgfHwKKyMgZW5kaWYKKwkJCQkJc3ludGF4X2NoZWNrX2NoYW5nZWQobG51bSkpKQorI2VuZGlmCisJCQkJKSkpKSkKKwl7CisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKwkgICAgaWYgKGxudW0gPT0gbW9kX3RvcCkKKwkJdG9wX3RvX21vZCA9IEZBTFNFOworI2VuZGlmCisKKwkgICAgLyoKKwkgICAgICogV2hlbiBhdCBzdGFydCBvZiBjaGFuZ2VkIGxpbmVzOiBNYXkgc2Nyb2xsIGZvbGxvd2luZyBsaW5lcworCSAgICAgKiB1cCBvciBkb3duIHRvIG1pbmltaXplIHJlZHJhd2luZy4KKwkgICAgICogRG9uJ3QgZG8gdGhpcyB3aGVuIHRoZSBjaGFuZ2UgY29udGludWVzIHVudGlsIHRoZSBlbmQuCisJICAgICAqIERvbid0IHNjcm9sbCB3aGVuIGRvbGxhcl92Y29sIGlzIG5vbi16ZXJvLCBrZWVwIHRoZSAiJCIuCisJICAgICAqLworCSAgICBpZiAobG51bSA9PSBtb2RfdG9wCisJCSAgICAmJiBtb2RfYm90ICE9IE1BWExOVU0KKwkJICAgICYmICEoZG9sbGFyX3Zjb2wgIT0gMCAmJiBtb2RfYm90ID09IG1vZF90b3AgKyAxKSkKKwkgICAgeworCQlpbnQJCW9sZF9yb3dzID0gMDsKKwkJaW50CQluZXdfcm93cyA9IDA7CisJCWludAkJeHRyYV9yb3dzOworCQlsaW5lbnJfVAlsOworCisJCS8qIENvdW50IHRoZSBvbGQgbnVtYmVyIG9mIHdpbmRvdyByb3dzLCB1c2luZyB3X2xpbmVzW10sIHdoaWNoCisJCSAqIHNob3VsZCBzdGlsbCBjb250YWluIHRoZSBzaXplcyBmb3IgdGhlIGxpbmVzIGFzIHRoZXkgYXJlCisJCSAqIGN1cnJlbnRseSBkaXNwbGF5ZWQuICovCisJCWZvciAoaSA9IGlkeDsgaSA8IHdwLT53X2xpbmVzX3ZhbGlkOyArK2kpCisJCXsKKwkJICAgIC8qIE9ubHkgdmFsaWQgbGluZXMgaGF2ZSBhIG1lYW5pbmdmdWwgd2xfbG51bS4gIEludmFsaWQKKwkJICAgICAqIGxpbmVzIGFyZSBwYXJ0IG9mIHRoZSBjaGFuZ2VkIGFyZWEuICovCisJCSAgICBpZiAod3AtPndfbGluZXNbaV0ud2xfdmFsaWQKKwkJCSAgICAmJiB3cC0+d19saW5lc1tpXS53bF9sbnVtID09IG1vZF9ib3QpCisJCQlicmVhazsKKwkJICAgIG9sZF9yb3dzICs9IHdwLT53X2xpbmVzW2ldLndsX3NpemU7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJCSAgICBpZiAod3AtPndfbGluZXNbaV0ud2xfdmFsaWQKKwkJCSAgICAmJiB3cC0+d19saW5lc1tpXS53bF9sYXN0bG51bSArIDEgPT0gbW9kX2JvdCkKKwkJICAgIHsKKwkJCS8qIE11c3QgaGF2ZSBmb3VuZCB0aGUgbGFzdCB2YWxpZCBlbnRyeSBhYm92ZSBtb2RfYm90LgorCQkJICogQWRkIGZvbGxvd2luZyBpbnZhbGlkIGVudHJpZXMuICovCisJCQkrK2k7CisJCQl3aGlsZSAoaSA8IHdwLT53X2xpbmVzX3ZhbGlkCisJCQkJCQkgICYmICF3cC0+d19saW5lc1tpXS53bF92YWxpZCkKKwkJCSAgICBvbGRfcm93cyArPSB3cC0+d19saW5lc1tpKytdLndsX3NpemU7CisJCQlicmVhazsKKwkJICAgIH0KKyNlbmRpZgorCQl9CisKKwkJaWYgKGkgPj0gd3AtPndfbGluZXNfdmFsaWQpCisJCXsKKwkJICAgIC8qIFdlIGNhbid0IGZpbmQgYSB2YWxpZCBsaW5lIGJlbG93IHRoZSBjaGFuZ2VkIGxpbmVzLAorCQkgICAgICogbmVlZCB0byByZWRyYXcgdW50aWwgdGhlIGVuZCBvZiB0aGUgd2luZG93LgorCQkgICAgICogSW5zZXJ0aW5nL2RlbGV0aW5nIGxpbmVzIGhhcyBubyB1c2UuICovCisJCSAgICBib3Rfc3RhcnQgPSAwOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgLyogQWJsZSB0byBjb3VudCBvbGQgbnVtYmVyIG9mIHJvd3M6IENvdW50IG5ldyB3aW5kb3cKKwkJICAgICAqIHJvd3MsIGFuZCBtYXkgaW5zZXJ0L2RlbGV0ZSBsaW5lcyAqLworCQkgICAgaiA9IGlkeDsKKwkJICAgIGZvciAobCA9IGxudW07IGwgPCBtb2RfYm90OyArK2wpCisJCSAgICB7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJCQlpZiAoaGFzRm9sZGluZ1dpbih3cCwgbCwgTlVMTCwgJmwsIFRSVUUsIE5VTEwpKQorCQkJICAgICsrbmV3X3Jvd3M7CisJCQllbHNlCisjZW5kaWYKKyNpZmRlZiBGRUFUX0RJRkYKKwkJCSAgICBpZiAobCA9PSB3cC0+d190b3BsaW5lKQorCQkJICAgIG5ld19yb3dzICs9IHBsaW5lc193aW5fbm9maWxsKHdwLCBsLCBUUlVFKQorCQkJCQkJCSAgICAgICsgd3AtPndfdG9wZmlsbDsKKwkJCWVsc2UKKyNlbmRpZgorCQkJICAgIG5ld19yb3dzICs9IHBsaW5lc193aW4od3AsIGwsIFRSVUUpOworCQkJKytqOworCQkJaWYgKG5ld19yb3dzID4gd3AtPndfaGVpZ2h0IC0gcm93IC0gMikKKwkJCXsKKwkJCSAgICAvKiBpdCdzIGdldHRpbmcgdG9vIG11Y2gsIG11c3QgcmVkcmF3IHRoZSByZXN0ICovCisJCQkgICAgbmV3X3Jvd3MgPSA5OTk5OworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQkgICAgeHRyYV9yb3dzID0gbmV3X3Jvd3MgLSBvbGRfcm93czsKKwkJICAgIGlmICh4dHJhX3Jvd3MgPCAwKQorCQkgICAgeworCQkJLyogTWF5IHNjcm9sbCB0ZXh0IHVwLiAgSWYgdGhlcmUgaXMgbm90IGVub3VnaAorCQkJICogcmVtYWluaW5nIHRleHQgb3Igc2Nyb2xsaW5nIGZhaWxzLCBtdXN0IHJlZHJhdyB0aGUKKwkJCSAqIHJlc3QuICBJZiBzY3JvbGxpbmcgd29ya3MsIG11c3QgcmVkcmF3IHRoZSB0ZXh0CisJCQkgKiBiZWxvdyB0aGUgc2Nyb2xsZWQgdGV4dC4gKi8KKwkJCWlmIChyb3cgLSB4dHJhX3Jvd3MgPj0gd3AtPndfaGVpZ2h0IC0gMikKKwkJCSAgICBtb2RfYm90ID0gTUFYTE5VTTsKKwkJCWVsc2UKKwkJCXsKKwkJCSAgICBjaGVja19mb3JfZGVsYXkoRkFMU0UpOworCQkJICAgIGlmICh3aW5fZGVsX2xpbmVzKHdwLCByb3csCisJCQkJCSAgICAteHRyYV9yb3dzLCBGQUxTRSwgRkFMU0UpID09IEZBSUwpCisJCQkJbW9kX2JvdCA9IE1BWExOVU07CisJCQkgICAgZWxzZQorCQkJCWJvdF9zdGFydCA9IHdwLT53X2hlaWdodCArIHh0cmFfcm93czsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGVsc2UgaWYgKHh0cmFfcm93cyA+IDApCisJCSAgICB7CisJCQkvKiBNYXkgc2Nyb2xsIHRleHQgZG93bi4gIElmIHRoZXJlIGlzIG5vdCBlbm91Z2gKKwkJCSAqIHJlbWFpbmluZyB0ZXh0IG9mIHNjcm9sbGluZyBmYWlscywgbXVzdCByZWRyYXcgdGhlCisJCQkgKiByZXN0LiAqLworCQkJaWYgKHJvdyArIHh0cmFfcm93cyA+PSB3cC0+d19oZWlnaHQgLSAyKQorCQkJICAgIG1vZF9ib3QgPSBNQVhMTlVNOworCQkJZWxzZQorCQkJeworCQkJICAgIGNoZWNrX2Zvcl9kZWxheShGQUxTRSk7CisJCQkgICAgaWYgKHdpbl9pbnNfbGluZXMod3AsIHJvdyArIG9sZF9yb3dzLAorCQkJCQkgICAgIHh0cmFfcm93cywgRkFMU0UsIEZBTFNFKSA9PSBGQUlMKQorCQkJCW1vZF9ib3QgPSBNQVhMTlVNOworCQkJICAgIGVsc2UgaWYgKHRvcF9lbmQgPiByb3cgKyBvbGRfcm93cykKKwkJCQkvKiBTY3JvbGxlZCB0aGUgcGFydCBhdCB0aGUgdG9wIHRoYXQgcmVxdWlyZXMKKwkJCQkgKiB1cGRhdGluZyBkb3duLiAqLworCQkJCXRvcF9lbmQgKz0geHRyYV9yb3dzOworCQkJfQorCQkgICAgfQorCisJCSAgICAvKiBXaGVuIG5vdCB1cGRhdGluZyB0aGUgcmVzdCwgbWF5IG5lZWQgdG8gbW92ZSB3X2xpbmVzW10KKwkJICAgICAqIGVudHJpZXMuICovCisJCSAgICBpZiAobW9kX2JvdCAhPSBNQVhMTlVNICYmIGkgIT0gaikKKwkJICAgIHsKKwkJCWlmIChqIDwgaSkKKwkJCXsKKwkJCSAgICBpbnQgeCA9IHJvdyArIG5ld19yb3dzOworCisJCQkgICAgLyogbW92ZSBlbnRyaWVzIGluIHdfbGluZXNbXSB1cHdhcmRzICovCisJCQkgICAgZm9yICg7OykKKwkJCSAgICB7CisJCQkJLyogc3RvcCBhdCBsYXN0IHZhbGlkIGVudHJ5IGluIHdfbGluZXNbXSAqLworCQkJCWlmIChpID49IHdwLT53X2xpbmVzX3ZhbGlkKQorCQkJCXsKKwkJCQkgICAgd3AtPndfbGluZXNfdmFsaWQgPSBqOworCQkJCSAgICBicmVhazsKKwkJCQl9CisJCQkJd3AtPndfbGluZXNbal0gPSB3cC0+d19saW5lc1tpXTsKKwkJCQkvKiBzdG9wIGF0IGEgbGluZSB0aGF0IHdvbid0IGZpdCAqLworCQkJCWlmICh4ICsgKGludCl3cC0+d19saW5lc1tqXS53bF9zaXplCisJCQkJCQkJICAgPiB3cC0+d19oZWlnaHQpCisJCQkJeworCQkJCSAgICB3cC0+d19saW5lc192YWxpZCA9IGogKyAxOworCQkJCSAgICBicmVhazsKKwkJCQl9CisJCQkJeCArPSB3cC0+d19saW5lc1tqKytdLndsX3NpemU7CisJCQkJKytpOworCQkJICAgIH0KKwkJCSAgICBpZiAoYm90X3N0YXJ0ID4geCkKKwkJCQlib3Rfc3RhcnQgPSB4OworCQkJfQorCQkJZWxzZSAvKiBqID4gaSAqLworCQkJeworCQkJICAgIC8qIG1vdmUgZW50cmllcyBpbiB3X2xpbmVzW10gZG93bndhcmRzICovCisJCQkgICAgaiAtPSBpOworCQkJICAgIHdwLT53X2xpbmVzX3ZhbGlkICs9IGo7CisJCQkgICAgaWYgKHdwLT53X2xpbmVzX3ZhbGlkID4gd3AtPndfaGVpZ2h0KQorCQkJCXdwLT53X2xpbmVzX3ZhbGlkID0gd3AtPndfaGVpZ2h0OworCQkJICAgIGZvciAoaSA9IHdwLT53X2xpbmVzX3ZhbGlkOyBpIC0gaiA+PSBpZHg7IC0taSkKKwkJCQl3cC0+d19saW5lc1tpXSA9IHdwLT53X2xpbmVzW2kgLSBqXTsKKworCQkJICAgIC8qIFRoZSB3X2xpbmVzW10gZW50cmllcyBmb3IgaW5zZXJ0ZWQgbGluZXMgYXJlCisJCQkgICAgICogbm93IGludmFsaWQsIGJ1dCB3bF9zaXplIG1heSBiZSB1c2VkIGFib3ZlLgorCQkJICAgICAqIFJlc2V0IHRvIHplcm8uICovCisJCQkgICAgd2hpbGUgKGkgPj0gaWR4KQorCQkJICAgIHsKKwkJCQl3cC0+d19saW5lc1tpXS53bF9zaXplID0gMDsKKwkJCQl3cC0+d19saW5lc1tpLS1dLndsX3ZhbGlkID0gRkFMU0U7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisKKwkJLyogV2hlbiBpbnNlcnRpbmcgb3IgZGVsZXRpbmcgbGluZXMgYW5kICdudW1iZXInIGlzIHNldDoKKwkJICogUmVkcmF3IGFsbCBsaW5lcyBiZWxvdyB0aGUgY2hhbmdlIHRvIHVwZGF0ZSB0aGUgbGluZQorCQkgKiBudW1iZXJzLiAqLworCQlpZiAoYnVmLT5iX21vZF94bGluZXMgIT0gMCAmJiB3cC0+d19wX251KQorCQkgICAgYm90X3N0YXJ0ID0gMDsKKwkgICAgfQorCisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIC8qCisJICAgICAqIFdoZW4gbGluZXMgYXJlIGZvbGRlZCwgZGlzcGxheSBvbmUgbGluZSBmb3IgYWxsIG9mIHRoZW0uCisJICAgICAqIE90aGVyd2lzZSwgZGlzcGxheSBub3JtYWxseSAoY2FuIGJlIHNldmVyYWwgZGlzcGxheSBsaW5lcyB3aGVuCisJICAgICAqICd3cmFwJyBpcyBvbikuCisJICAgICAqLworCSAgICBmb2xkX2NvdW50ID0gZm9sZGVkQ291bnQod3AsIGxudW0sICZ3aW5fZm9sZGluZm8pOworCSAgICBpZiAoZm9sZF9jb3VudCAhPSAwKQorCSAgICB7CisJCWZvbGRfbGluZSh3cCwgZm9sZF9jb3VudCwgJndpbl9mb2xkaW5mbywgbG51bSwgcm93KTsKKwkJKytyb3c7CisJCS0tZm9sZF9jb3VudDsKKwkJd3AtPndfbGluZXNbaWR4XS53bF9mb2xkZWQgPSBUUlVFOworCQl3cC0+d19saW5lc1tpZHhdLndsX2xhc3RsbnVtID0gbG51bSArIGZvbGRfY291bnQ7CisjIGlmZGVmIEZFQVRfU1lOX0hMCisJCWRpZF91cGRhdGUgPSBESURfRk9MRDsKKyMgZW5kaWYKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkgICAgaWYgKGlkeCA8IHdwLT53X2xpbmVzX3ZhbGlkCisJCSAgICAmJiB3cC0+d19saW5lc1tpZHhdLndsX3ZhbGlkCisJCSAgICAmJiB3cC0+d19saW5lc1tpZHhdLndsX2xudW0gPT0gbG51bQorCQkgICAgJiYgbG51bSA+IHdwLT53X3RvcGxpbmUKKwkJICAgICYmICEoZHlfZmxhZ3MgJiBEWV9MQVNUTElORSkKKwkJICAgICYmIHNyb3cgKyB3cC0+d19saW5lc1tpZHhdLndsX3NpemUgPiB3cC0+d19oZWlnaHQKKyNpZmRlZiBGRUFUX0RJRkYKKwkJICAgICYmIGRpZmZfY2hlY2tfZmlsbCh3cCwgbG51bSkgPT0gMAorI2VuZGlmCisJCSAgICApCisJICAgIHsKKwkJLyogVGhpcyBsaW5lIGlzIG5vdCBnb2luZyB0byBmaXQuICBEb24ndCBkcmF3IGFueXRoaW5nIGhlcmUsCisJCSAqIHdpbGwgZHJhdyAiQCAgIiBsaW5lcyBiZWxvdy4gKi8KKwkJcm93ID0gd3AtPndfaGVpZ2h0ICsgMTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKyNpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorCQlwcmVwYXJlX3NlYXJjaF9obCh3cCwgbG51bSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1NZTl9ITAorCQkvKiBMZXQgdGhlIHN5bnRheCBzdHVmZiBrbm93IHdlIHNraXBwZWQgYSBmZXcgbGluZXMuICovCisJCWlmIChzeW50YXhfbGFzdF9wYXJzZWQgIT0gMCAmJiBzeW50YXhfbGFzdF9wYXJzZWQgKyAxIDwgbG51bQorCQkJCQkJICAgICAgICYmIHN5bnRheF9wcmVzZW50KGJ1ZikpCisJCSAgICBzeW50YXhfZW5kX3BhcnNpbmcoc3ludGF4X2xhc3RfcGFyc2VkICsgMSk7CisjZW5kaWYKKworCQkvKgorCQkgKiBEaXNwbGF5IG9uZSBsaW5lLgorCQkgKi8KKwkJcm93ID0gd2luX2xpbmUod3AsIGxudW0sIHNyb3csIHdwLT53X2hlaWdodCk7CisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkJd3AtPndfbGluZXNbaWR4XS53bF9mb2xkZWQgPSBGQUxTRTsKKwkJd3AtPndfbGluZXNbaWR4XS53bF9sYXN0bG51bSA9IGxudW07CisjZW5kaWYKKyNpZmRlZiBGRUFUX1NZTl9ITAorCQlkaWRfdXBkYXRlID0gRElEX0xJTkU7CisJCXN5bnRheF9sYXN0X3BhcnNlZCA9IGxudW07CisjZW5kaWYKKwkgICAgfQorCisJICAgIHdwLT53X2xpbmVzW2lkeF0ud2xfbG51bSA9IGxudW07CisJICAgIHdwLT53X2xpbmVzW2lkeF0ud2xfdmFsaWQgPSBUUlVFOworCSAgICBpZiAocm93ID4gd3AtPndfaGVpZ2h0KQkvKiBwYXN0IGVuZCBvZiBzY3JlZW4gKi8KKwkgICAgeworCQkvKiB3ZSBtYXkgbmVlZCB0aGUgc2l6ZSBvZiB0aGF0IHRvbyBsb25nIGxpbmUgbGF0ZXIgb24gKi8KKwkJaWYgKGRvbGxhcl92Y29sID09IDApCisJCSAgICB3cC0+d19saW5lc1tpZHhdLndsX3NpemUgPSBwbGluZXNfd2luKHdwLCBsbnVtLCBUUlVFKTsKKwkJKytpZHg7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChkb2xsYXJfdmNvbCA9PSAwKQorCQl3cC0+d19saW5lc1tpZHhdLndsX3NpemUgPSByb3cgLSBzcm93OworCSAgICArK2lkeDsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgbG51bSArPSBmb2xkX2NvdW50ICsgMTsKKyNlbHNlCisJICAgICsrbG51bTsKKyNlbmRpZgorCX0KKwllbHNlCisJeworCSAgICAvKiBUaGlzIGxpbmUgZG9lcyBub3QgbmVlZCB1cGRhdGluZywgYWR2YW5jZSB0byB0aGUgbmV4dCBvbmUgKi8KKwkgICAgcm93ICs9IHdwLT53X2xpbmVzW2lkeCsrXS53bF9zaXplOworCSAgICBpZiAocm93ID4gd3AtPndfaGVpZ2h0KQkvKiBwYXN0IGVuZCBvZiBzY3JlZW4gKi8KKwkJYnJlYWs7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJICAgIGxudW0gPSB3cC0+d19saW5lc1tpZHggLSAxXS53bF9sYXN0bG51bSArIDE7CisjZWxzZQorCSAgICArK2xudW07CisjZW5kaWYKKyNpZmRlZiBGRUFUX1NZTl9ITAorCSAgICBkaWRfdXBkYXRlID0gRElEX05PTkU7CisjZW5kaWYKKwl9CisKKwlpZiAobG51bSA+IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXsKKwkgICAgZW9mID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICAvKgorICAgICAqIEVuZCBvZiBsb29wIG92ZXIgYWxsIHdpbmRvdyBsaW5lcy4KKyAgICAgKi8KKworCisgICAgaWYgKGlkeCA+IHdwLT53X2xpbmVzX3ZhbGlkKQorCXdwLT53X2xpbmVzX3ZhbGlkID0gaWR4OworCisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICAvKgorICAgICAqIExldCB0aGUgc3ludGF4IHN0dWZmIGtub3cgd2Ugc3RvcCBwYXJzaW5nIGhlcmUuCisgICAgICovCisgICAgaWYgKHN5bnRheF9sYXN0X3BhcnNlZCAhPSAwICYmIHN5bnRheF9wcmVzZW50KGJ1ZikpCisJc3ludGF4X2VuZF9wYXJzaW5nKHN5bnRheF9sYXN0X3BhcnNlZCArIDEpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIElmIHdlIGRpZG4ndCBoaXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgYW5kIHdlIGRpZG4ndCBmaW5pc2ggdGhlIGxhc3QKKyAgICAgKiBsaW5lIHdlIHdlcmUgd29ya2luZyBvbiwgdGhlbiB0aGUgbGluZSBkaWRuJ3QgZml0LgorICAgICAqLworICAgIHdwLT53X2VtcHR5X3Jvd3MgPSAwOworI2lmZGVmIEZFQVRfRElGRgorICAgIHdwLT53X2ZpbGxlcl9yb3dzID0gMDsKKyNlbmRpZgorICAgIGlmICghZW9mICYmICFkaWRsaW5lKQorICAgIHsKKwlpZiAobG51bSA9PSB3cC0+d190b3BsaW5lKQorCXsKKwkgICAgLyoKKwkgICAgICogU2luZ2xlIGxpbmUgdGhhdCBkb2VzIG5vdCBmaXQhCisJICAgICAqIERvbid0IG92ZXJ3cml0ZSBpdCwgaXQgY2FuIGJlIGVkaXRlZC4KKwkgICAgICovCisJICAgIHdwLT53X2JvdGxpbmUgPSBsbnVtICsgMTsKKwl9CisjaWZkZWYgRkVBVF9ESUZGCisJZWxzZSBpZiAoZGlmZl9jaGVja19maWxsKHdwLCBsbnVtKSA+PSB3cC0+d19oZWlnaHQgLSBzcm93KQorCXsKKwkgICAgLyogV2luZG93IGVuZHMgaW4gZmlsbGVyIGxpbmVzLiAqLworCSAgICB3cC0+d19ib3RsaW5lID0gbG51bTsKKwkgICAgd3AtPndfZmlsbGVyX3Jvd3MgPSB3cC0+d19oZWlnaHQgLSBzcm93OworCX0KKyNlbmRpZgorCWVsc2UgaWYgKGR5X2ZsYWdzICYgRFlfTEFTVExJTkUpCS8qICdkaXNwbGF5JyBoYXMgImxhc3RsaW5lIiAqLworCXsKKwkgICAgLyoKKwkgICAgICogTGFzdCBsaW5lIGlzbid0IGZpbmlzaGVkOiBEaXNwbGF5ICJAQEAiIGF0IHRoZSBlbmQuCisJICAgICAqLworCSAgICBzY3JlZW5fZmlsbChXX1dJTlJPVyh3cCkgKyB3cC0+d19oZWlnaHQgLSAxLAorCQkgICAgV19XSU5ST1cod3ApICsgd3AtPndfaGVpZ2h0LAorCQkgICAgKGludClXX0VORENPTCh3cCkgLSAzLCAoaW50KVdfRU5EQ09MKHdwKSwKKwkJICAgICdAJywgJ0AnLCBobF9hdHRyKEhMRl9BVCkpOworCSAgICBzZXRfZW1wdHlfcm93cyh3cCwgc3Jvdyk7CisJICAgIHdwLT53X2JvdGxpbmUgPSBsbnVtOworCX0KKwllbHNlCisJeworCSAgICB3aW5fZHJhd19lbmQod3AsICdAJywgJyAnLCBzcm93LCB3cC0+d19oZWlnaHQsIEhMRl9BVCk7CisJICAgIHdwLT53X2JvdGxpbmUgPSBsbnVtOworCX0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCWRyYXdfdnNlcF93aW4od3AsIHJvdyk7CisjZW5kaWYKKwlpZiAoZW9mKQkJLyogd2UgaGl0IHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KKwl7CisJICAgIHdwLT53X2JvdGxpbmUgPSBidWYtPmJfbWwubWxfbGluZV9jb3VudCArIDE7CisjaWZkZWYgRkVBVF9ESUZGCisJICAgIGogPSBkaWZmX2NoZWNrX2ZpbGwod3AsIHdwLT53X2JvdGxpbmUpOworCSAgICBpZiAoaiA+IDAgJiYgIXdwLT53X2JvdGZpbGwpCisJICAgIHsKKwkJLyoKKwkJICogRGlzcGxheSBmaWxsZXIgbGluZXMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorCQkgKi8KKwkJaWYgKGNoYXIyY2VsbHMoZmlsbF9kaWZmKSA+IDEpCisJCSAgICBpID0gJy0nOworCQllbHNlCisJCSAgICBpID0gZmlsbF9kaWZmOworCQlpZiAocm93ICsgaiA+IHdwLT53X2hlaWdodCkKKwkJICAgIGogPSB3cC0+d19oZWlnaHQgLSByb3c7CisJCXdpbl9kcmF3X2VuZCh3cCwgaSwgaSwgcm93LCByb3cgKyAoaW50KWosIEhMRl9ERUQpOworCQlyb3cgKz0gajsKKwkgICAgfQorI2VuZGlmCisJfQorCWVsc2UgaWYgKGRvbGxhcl92Y29sID09IDApCisJICAgIHdwLT53X2JvdGxpbmUgPSBsbnVtOworCisJLyogbWFrZSBzdXJlIHRoZSByZXN0IG9mIHRoZSBzY3JlZW4gaXMgYmxhbmsgKi8KKwkvKiBwdXQgJ34ncyBvbiByb3dzIHRoYXQgYXJlbid0IHBhcnQgb2YgdGhlIGZpbGUuICovCisJd2luX2RyYXdfZW5kKHdwLCAnficsICcgJywgcm93LCB3cC0+d19oZWlnaHQsIEhMRl9BVCk7CisgICAgfQorCisgICAgLyogUmVzZXQgdGhlIHR5cGUgb2YgcmVkcmF3aW5nIHJlcXVpcmVkLCB0aGUgd2luZG93IGhhcyBiZWVuIHVwZGF0ZWQuICovCisgICAgd3AtPndfcmVkcl90eXBlID0gMDsKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICB3cC0+d19vbGRfdG9wZmlsbCA9IHdwLT53X3RvcGZpbGw7CisgICAgd3AtPndfb2xkX2JvdGZpbGwgPSB3cC0+d19ib3RmaWxsOworI2VuZGlmCisKKyAgICBpZiAoZG9sbGFyX3Zjb2wgPT0gMCkKKyAgICB7CisJLyoKKwkgKiBUaGVyZSBpcyBhIHRyaWNrIHdpdGggd19ib3RsaW5lLiAgSWYgd2UgaW52YWxpZGF0ZSBpdCBvbiBlYWNoCisJICogY2hhbmdlIHRoYXQgbWlnaHQgbW9kaWZ5IGl0LCB0aGlzIHdpbGwgY2F1c2UgYSBsb3Qgb2YgZXhwZW5zaXZlCisJICogY2FsbHMgdG8gcGxpbmVzKCkgaW4gdXBkYXRlX3RvcGxpbmUoKSBlYWNoIHRpbWUuICBUaGVyZWZvcmUgdGhlCisJICogdmFsdWUgb2Ygd19ib3RsaW5lIGlzIG9mdGVuIGFwcHJveGltYXRlZCwgYW5kIHRoaXMgdmFsdWUgaXMgdXNlZCB0bworCSAqIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHdfdG9wbGluZS4gIElmIHRoZSB2YWx1ZSBvZiB3X2JvdGxpbmUgd2FzCisJICogd3JvbmcsIGNoZWNrIHRoYXQgdGhlIHZhbHVlIG9mIHdfdG9wbGluZSBpcyBjb3JyZWN0IChjdXJzb3IgaXMgb24KKwkgKiB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSB0ZXh0KS4gIElmIGl0J3Mgbm90LCB3ZSBuZWVkIHRvIHJlZHJhdworCSAqIGFnYWluLiAgTW9zdGx5IHRoaXMganVzdCBtZWFucyBzY3JvbGxpbmcgdXAgYSBmZXcgbGluZXMsIHNvIGl0CisJICogZG9lc24ndCBsb29rIHRvbyBiYWQuICBPbmx5IGRvIHRoaXMgZm9yIHRoZSBjdXJyZW50IHdpbmRvdyAod2hlcmUKKwkgKiBjaGFuZ2VzIGFyZSByZWxldmFudCkuCisJICovCisJd3AtPndfdmFsaWQgfD0gVkFMSURfQk9UTElORTsKKwlpZiAod3AgPT0gY3Vyd2luICYmIHdwLT53X2JvdGxpbmUgIT0gb2xkX2JvdGxpbmUgJiYgIXJlY3Vyc2l2ZSkKKwl7CisJICAgIHJlY3Vyc2l2ZSA9IFRSVUU7CisJICAgIGN1cndpbi0+d192YWxpZCAmPSB+VkFMSURfVE9QTElORTsKKwkgICAgdXBkYXRlX3RvcGxpbmUoKTsJLyogbWF5IGludmFsaWRhdGUgd19ib3RsaW5lIGFnYWluICovCisJICAgIGlmIChtdXN0X3JlZHJhdyAhPSAwKQorCSAgICB7CisJCS8qIERvbid0IHVwZGF0ZSBmb3IgY2hhbmdlcyBpbiBidWZmZXIgYWdhaW4uICovCisJCWkgPSBjdXJidWYtPmJfbW9kX3NldDsKKwkJY3VyYnVmLT5iX21vZF9zZXQgPSBGQUxTRTsKKwkJd2luX3VwZGF0ZShjdXJ3aW4pOworCQltdXN0X3JlZHJhdyA9IDA7CisJCWN1cmJ1Zi0+Yl9tb2Rfc2V0ID0gaTsKKwkgICAgfQorCSAgICByZWN1cnNpdmUgPSBGQUxTRTsKKwl9CisgICAgfQorCisjaWYgZGVmaW5lZChGRUFUX1NZTl9ITCkgfHwgZGVmaW5lZChGRUFUX1NFQVJDSF9FWFRSQSkKKyAgICAvKiByZXN0b3JlIGdvdF9pbnQsIHVubGVzcyBDVFJMLUMgd2FzIGhpdCB3aGlsZSByZWRyYXdpbmcgKi8KKyAgICBpZiAoIWdvdF9pbnQpCisJZ290X2ludCA9IHNhdmVfZ290X2ludDsKKyNlbmRpZgorfQorCisjaWZkZWYgRkVBVF9TSUdOUworc3RhdGljIGludCBkcmF3X3NpZ25jb2x1bW4gX19BUkdTKCh3aW5fVCAqd3ApKTsKKworLyoKKyAqIFJldHVybiBUUlVFIHdoZW4gd2luZG93ICJ3cCIgaGFzIGEgY29sdW1uIHRvIGRyYXcgc2lnbnMgaW4uCisgKi8KKyAgICBzdGF0aWMgaW50CitkcmF3X3NpZ25jb2x1bW4od3ApCisgICAgd2luX1QgKndwOworeworICAgIHJldHVybiAod3AtPndfYnVmZmVyLT5iX3NpZ25saXN0ICE9IE5VTEwKKyMgaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJCQkgICAgfHwgdXNpbmdOZXRiZWFucworIyBlbmRpZgorCQkgICAgKTsKK30KKyNlbmRpZgorCisvKgorICogQ2xlYXIgdGhlIHJlc3Qgb2YgdGhlIHdpbmRvdyBhbmQgbWFyayB0aGUgdW51c2VkIGxpbmVzIHdpdGggImMxIi4gIHVzZSAiYzIiCisgKiBhcyB0aGUgZmlsbGVyIGNoYXJhY3Rlci4KKyAqLworICAgIHN0YXRpYyB2b2lkCit3aW5fZHJhd19lbmQod3AsIGMxLCBjMiwgcm93LCBlbmRyb3csIGhsKQorICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCWMxOworICAgIGludAkJYzI7CisgICAgaW50CQlyb3c7CisgICAgaW50CQllbmRyb3c7CisgICAgZW51bSBobGZfdmFsdWUgaGw7Cit7CisjaWYgZGVmaW5lZChGRUFUX0ZPTERJTkcpIHx8IGRlZmluZWQoRkVBVF9TSUdOUykgfHwgZGVmaW5lZChGRUFUX0NNRFdJTikKKyAgICBpbnQJCW4gPSAwOworIyBkZWZpbmUgRkRDX09GRiBuCisjZWxzZQorIyBkZWZpbmUgRkRDX09GRiAwCisjZW5kaWYKKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgaWYgKHdwLT53X3BfcmwpCisgICAgeworCS8qIE5vIGNoZWNrIGZvciBjbWRsaW5lIHdpbmRvdzogc2hvdWxkIG5ldmVyIGJlIHJpZ2h0LWxlZnQuICovCisjIGlmZGVmIEZFQVRfRk9MRElORworCW4gPSB3cC0+d19wX2ZkYzsKKworCWlmIChuID4gMCkKKwl7CisJICAgIC8qIGRyYXcgdGhlIGZvbGQgY29sdW1uIGF0IHRoZSByaWdodCAqLworCSAgICBpZiAobiA+IHdwLT53X3dpZHRoKQorCQluID0gd3AtPndfd2lkdGg7CisJICAgIHNjcmVlbl9maWxsKFdfV0lOUk9XKHdwKSArIHJvdywgV19XSU5ST1cod3ApICsgZW5kcm93LAorCQkgICAgV19FTkRDT0wod3ApIC0gbiwgKGludClXX0VORENPTCh3cCksCisJCSAgICAnICcsICcgJywgaGxfYXR0cihITEZfRkMpKTsKKwl9CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfU0lHTlMKKwlpZiAoZHJhd19zaWduY29sdW1uKHdwKSkKKwl7CisJICAgIGludCBubiA9IG4gKyAyOworCisJICAgIC8qIGRyYXcgdGhlIHNpZ24gY29sdW1uIGxlZnQgb2YgdGhlIGZvbGQgY29sdW1uICovCisJICAgIGlmIChubiA+IHdwLT53X3dpZHRoKQorCQlubiA9IHdwLT53X3dpZHRoOworCSAgICBzY3JlZW5fZmlsbChXX1dJTlJPVyh3cCkgKyByb3csIFdfV0lOUk9XKHdwKSArIGVuZHJvdywKKwkJICAgIFdfRU5EQ09MKHdwKSAtIG5uLCAoaW50KVdfRU5EQ09MKHdwKSAtIG4sCisJCSAgICAnICcsICcgJywgaGxfYXR0cihITEZfU0MpKTsKKwkgICAgbiA9IG5uOworCX0KKyMgZW5kaWYKKwlzY3JlZW5fZmlsbChXX1dJTlJPVyh3cCkgKyByb3csIFdfV0lOUk9XKHdwKSArIGVuZHJvdywKKwkJV19XSU5DT0wod3ApLCBXX0VORENPTCh3cCkgLSAxIC0gRkRDX09GRiwKKwkJYzIsIGMyLCBobF9hdHRyKGhsKSk7CisJc2NyZWVuX2ZpbGwoV19XSU5ST1cod3ApICsgcm93LCBXX1dJTlJPVyh3cCkgKyBlbmRyb3csCisJCVdfRU5EQ09MKHdwKSAtIDEgLSBGRENfT0ZGLCBXX0VORENPTCh3cCkgLSBGRENfT0ZGLAorCQljMSwgYzIsIGhsX2F0dHIoaGwpKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworI2lmZGVmIEZFQVRfQ01EV0lOCisJaWYgKGNtZHdpbl90eXBlICE9IDAgJiYgd3AgPT0gY3Vyd2luKQorCXsKKwkgICAgLyogZHJhdyB0aGUgY21kbGluZSBjaGFyYWN0ZXIgaW4gdGhlIGxlZnRtb3N0IGNvbHVtbiAqLworCSAgICBuID0gMTsKKwkgICAgaWYgKG4gPiB3cC0+d193aWR0aCkKKwkJbiA9IHdwLT53X3dpZHRoOworCSAgICBzY3JlZW5fZmlsbChXX1dJTlJPVyh3cCkgKyByb3csIFdfV0lOUk9XKHdwKSArIGVuZHJvdywKKwkJICAgIFdfV0lOQ09MKHdwKSwgKGludClXX1dJTkNPTCh3cCkgKyBuLAorCQkgICAgY21kd2luX3R5cGUsICcgJywgaGxfYXR0cihITEZfQVQpKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwlpZiAod3AtPndfcF9mZGMgPiAwKQorCXsKKwkgICAgaW50CSAgICBubiA9IG4gKyB3cC0+d19wX2ZkYzsKKworCSAgICAvKiBkcmF3IHRoZSBmb2xkIGNvbHVtbiBhdCB0aGUgbGVmdCAqLworCSAgICBpZiAobm4gPiBXX1dJRFRIKHdwKSkKKwkJbm4gPSBXX1dJRFRIKHdwKTsKKwkgICAgc2NyZWVuX2ZpbGwoV19XSU5ST1cod3ApICsgcm93LCBXX1dJTlJPVyh3cCkgKyBlbmRyb3csCisJCSAgICBXX1dJTkNPTCh3cCkgKyBuLCAoaW50KVdfV0lOQ09MKHdwKSArIG5uLAorCQkgICAgJyAnLCAnICcsIGhsX2F0dHIoSExGX0ZDKSk7CisJICAgIG4gPSBubjsKKwl9CisjZW5kaWYKKyNpZmRlZiBGRUFUX1NJR05TCisJaWYgKGRyYXdfc2lnbmNvbHVtbih3cCkpCisJeworCSAgICBpbnQJICAgIG5uID0gbiArIDI7CisKKwkgICAgLyogZHJhdyB0aGUgc2lnbiBjb2x1bW4gYWZ0ZXIgdGhlIGZvbGQgY29sdW1uICovCisJICAgIGlmIChubiA+IFdfV0lEVEgod3ApKQorCQlubiA9IFdfV0lEVEgod3ApOworCSAgICBzY3JlZW5fZmlsbChXX1dJTlJPVyh3cCkgKyByb3csIFdfV0lOUk9XKHdwKSArIGVuZHJvdywKKwkJICAgIFdfV0lOQ09MKHdwKSArIG4sIChpbnQpV19XSU5DT0wod3ApICsgbm4sCisJCSAgICAnICcsICcgJywgaGxfYXR0cihITEZfU0MpKTsKKwkgICAgbiA9IG5uOworCX0KKyNlbmRpZgorCXNjcmVlbl9maWxsKFdfV0lOUk9XKHdwKSArIHJvdywgV19XSU5ST1cod3ApICsgZW5kcm93LAorCQlXX1dJTkNPTCh3cCkgKyBGRENfT0ZGLCAoaW50KVdfRU5EQ09MKHdwKSwKKwkJYzEsIGMyLCBobF9hdHRyKGhsKSk7CisgICAgfQorICAgIHNldF9lbXB0eV9yb3dzKHdwLCByb3cpOworfQorCisjaWZkZWYgRkVBVF9GT0xESU5HCisvKgorICogRGlzcGxheSBvbmUgZm9sZGVkIGxpbmUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZm9sZF9saW5lKHdwLCBmb2xkX2NvdW50LCBmb2xkaW5mbywgbG51bSwgcm93KQorICAgIHdpbl9UCSp3cDsKKyAgICBsb25nCWZvbGRfY291bnQ7CisgICAgZm9sZGluZm9fVAkqZm9sZGluZm87CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBpbnQJCXJvdzsKK3sKKyAgICBjaGFyX3UJYnVmWzUxXTsKKyAgICBwb3NfVAkqdG9wLCAqYm90OworICAgIGxpbmVucl9UCWxudW1lID0gbG51bSArIGZvbGRfY291bnQgLSAxOworICAgIGludAkJbGVuOworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKnRleHQgPSBOVUxMOworICAgIGludAkJZmRjOworICAgIGludAkJbGV2ZWw7CisgICAgaW50CQljb2w7CisgICAgaW50CQl0eHRjb2w7CisgICAgaW50CQlvZmYgPSAoaW50KShjdXJyZW50X1NjcmVlbkxpbmUgLSBTY3JlZW5MaW5lcyk7CisKKyAgICAvKiBCdWlsZCB0aGUgZm9sZCBsaW5lOgorICAgICAqIDEuIEFkZCB0aGUgY21kd2luX3R5cGUgZm9yIHRoZSBjb21tYW5kLWxpbmUgd2luZG93CisgICAgICogMi4gQWRkIHRoZSAnZm9sZGNvbHVtbicKKyAgICAgKiAzLiBBZGQgdGhlICdudW1iZXInIGNvbHVtbgorICAgICAqIDQuIENvbXBvc2UgdGhlIHRleHQKKyAgICAgKiA1LiBBZGQgdGhlIHRleHQKKyAgICAgKiA2LiBzZXQgaGlnaGxpZ2h0aW5nIGZvciB0aGUgVmlzdWFsIGFyZWEgYW4gb3RoZXIgdGV4dAorICAgICAqLworICAgIGNvbCA9IDA7CisKKyAgICAvKgorICAgICAqIDEuIEFkZCB0aGUgY21kd2luX3R5cGUgZm9yIHRoZSBjb21tYW5kLWxpbmUgd2luZG93CisgICAgICogSWdub3JlcyAncmlnaHRsZWZ0JywgdGhpcyB3aW5kb3cgaXMgbmV2ZXIgcmlnaHQtbGVmdC4KKyAgICAgKi8KKyNpZmRlZiBGRUFUX0NNRFdJTgorICAgIGlmIChjbWR3aW5fdHlwZSAhPSAwICYmIHdwID09IGN1cndpbikKKyAgICB7CisJU2NyZWVuTGluZXNbb2ZmXSA9IGNtZHdpbl90eXBlOworCVNjcmVlbkF0dHJzW29mZl0gPSBobF9hdHRyKEhMRl9BVCk7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChlbmNfdXRmOCkKKwkgICAgU2NyZWVuTGluZXNVQ1tvZmZdID0gMDsKKyNlbmRpZgorCSsrY29sOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAyLiBBZGQgdGhlICdmb2xkY29sdW1uJworICAgICAqLworICAgIGZkYyA9IHdwLT53X3BfZmRjOworICAgIGlmIChmZGMgPiBXX1dJRFRIKHdwKSAtIGNvbCkKKwlmZGMgPSBXX1dJRFRIKHdwKSAtIGNvbDsKKyAgICBpZiAoZmRjID4gMCkKKyAgICB7CisJZmlsbF9mb2xkY29sdW1uKGJ1Ziwgd3AsIFRSVUUsIGxudW0pOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJaWYgKHdwLT53X3BfcmwpCisJeworCSAgICBpbnQJCWk7CisKKwkgICAgY29weV90ZXh0X2F0dHIob2ZmICsgV19XSURUSCh3cCkgLSBmZGMgLSBjb2wsIGJ1ZiwgZmRjLAorCQkJCQkJCSAgICAgaGxfYXR0cihITEZfRkMpKTsKKwkgICAgLyogcmV2ZXJzZSB0aGUgZm9sZCBjb2x1bW4gKi8KKwkgICAgZm9yIChpID0gMDsgaSA8IGZkYzsgKytpKQorCQlTY3JlZW5MaW5lc1tvZmYgKyBXX1dJRFRIKHdwKSAtIGkgLSAxIC0gY29sXSA9IGJ1ZltpXTsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgIGNvcHlfdGV4dF9hdHRyKG9mZiArIGNvbCwgYnVmLCBmZGMsIGhsX2F0dHIoSExGX0ZDKSk7CisJY29sICs9IGZkYzsKKyAgICB9CisKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorIyBkZWZpbmUgUkxfTUVNU0VUKHAsIHYsIGwpIHZpbV9tZW1zZXQoU2NyZWVuQXR0cnMgKyBvZmYgKyAod3AtPndfcF9ybCA/IChXX1dJRFRIKHdwKSAtIChwKSAtIChsKSkgOiAocCkpLCB2LCBsKQorI2Vsc2UKKyMgZGVmaW5lIFJMX01FTVNFVChwLCB2LCBsKSB2aW1fbWVtc2V0KFNjcmVlbkF0dHJzICsgb2ZmICsgcCwgdiwgbCkKKyNlbmRpZgorCisgICAgLyogU2V0IGFsbCBhdHRyaWJ1dGVzIG9mIHRoZSAnbnVtYmVyJyBjb2x1bW4gYW5kIHRoZSB0ZXh0ICovCisgICAgUkxfTUVNU0VUKGNvbCwgaGxfYXR0cihITEZfRkwpLCAoc2l6ZV90KShXX1dJRFRIKHdwKSAtIGNvbCkpOworCisjaWZkZWYgRkVBVF9TSUdOUworICAgIC8qIElmIHNpZ25zIGFyZSBiZWluZyBkaXNwbGF5ZWQsIGFkZCB0d28gc3BhY2VzLiAqLworICAgIGlmIChkcmF3X3NpZ25jb2x1bW4od3ApKQorICAgIHsKKwlsZW4gPSBXX1dJRFRIKHdwKSAtIGNvbDsKKwlpZiAobGVuID4gMCkKKwl7CisJICAgIGlmIChsZW4gPiAyKQorCQlsZW4gPSAyOworIyBpZmRlZiBGRUFUX1JJR0hUTEVGVAorCSAgICBpZiAod3AtPndfcF9ybCkKKwkJLyogdGhlIGxpbmUgbnVtYmVyIGlzbid0IHJldmVyc2VkICovCisJCWNvcHlfdGV4dF9hdHRyKG9mZiArIFdfV0lEVEgod3ApIC0gbGVuIC0gY29sLAorCQkJCQkoY2hhcl91ICopIiAgIiwgbGVuLCBobF9hdHRyKEhMRl9GTCkpOworCSAgICBlbHNlCisjIGVuZGlmCisJCWNvcHlfdGV4dF9hdHRyKG9mZiArIGNvbCwgKGNoYXJfdSAqKSIgICIsIGxlbiwgaGxfYXR0cihITEZfRkwpKTsKKwkgICAgY29sICs9IGxlbjsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIDMuIEFkZCB0aGUgJ251bWJlcicgY29sdW1uCisgICAgICovCisgICAgaWYgKHdwLT53X3BfbnUpCisgICAgeworCWxlbiA9IFdfV0lEVEgod3ApIC0gY29sOworCWlmIChsZW4gPiAwKQorCXsKKwkgICAgaWYgKGxlbiA+IDgpCisJCWxlbiA9IDg7CisJICAgIHNwcmludGYoKGNoYXIgKilidWYsICIlN2xkICIsIChsb25nKWxudW0pOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJICAgIGlmICh3cC0+d19wX3JsKQorCQkvKiB0aGUgbGluZSBudW1iZXIgaXNuJ3QgcmV2ZXJzZWQgKi8KKwkJY29weV90ZXh0X2F0dHIob2ZmICsgV19XSURUSCh3cCkgLSBsZW4gLSBjb2wsIGJ1ZiwgbGVuLAorCQkJCQkJCSAgICAgaGxfYXR0cihITEZfRkwpKTsKKwkgICAgZWxzZQorI2VuZGlmCisJCWNvcHlfdGV4dF9hdHRyKG9mZiArIGNvbCwgYnVmLCBsZW4sIGhsX2F0dHIoSExGX0ZMKSk7CisJICAgIGNvbCArPSBsZW47CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogNC4gQ29tcG9zZSB0aGUgZm9sZGVkLWxpbmUgc3RyaW5nIHdpdGggJ2ZvbGR0ZXh0JywgaWYgc2V0LgorICAgICAqLworI2lmZGVmIEZFQVRfRVZBTAorICAgIGlmICgqd3AtPndfcF9mZHQgIT0gTlVMKQorICAgIHsKKwljaGFyX3UJZGFzaGVzWzUxXTsKKwl3aW5fVAkqc2F2ZV9jdXJ3aW47CisKKwkvKiBTZXQgInY6Zm9sZHN0YXJ0IiBhbmQgInY6Zm9sZGVuZCIuICovCisJc2V0X3ZpbV92YXJfbnIoVlZfRk9MRFNUQVJULCBsbnVtKTsKKwlzZXRfdmltX3Zhcl9ucihWVl9GT0xERU5ELCBsbnVtZSk7CisKKwkvKiBTZXQgInY6Zm9sZGRhc2hlcyIgdG8gYSBzdHJpbmcgb2YgImxldmVsIiBkYXNoZXMuICovCisJLyogU2V0ICJ2OmZvbGRsZXZlbCIgdG8gImxldmVsIi4gKi8KKwlsZXZlbCA9IGZvbGRpbmZvLT5maV9sZXZlbDsKKwlpZiAobGV2ZWwgPiA1MCkKKwkgICAgbGV2ZWwgPSA1MDsKKwl2aW1fbWVtc2V0KGRhc2hlcywgJy0nLCAoc2l6ZV90KWxldmVsKTsKKwlkYXNoZXNbbGV2ZWxdID0gTlVMOworCXNldF92aW1fdmFyX3N0cmluZyhWVl9GT0xEREFTSEVTLCBkYXNoZXMsIC0xKTsKKwlzZXRfdmltX3Zhcl9ucihWVl9GT0xETEVWRUwsIChsb25nKWxldmVsKTsKKwlzYXZlX2N1cndpbiA9IGN1cndpbjsKKwljdXJ3aW4gPSB3cDsKKwljdXJidWYgPSB3cC0+d19idWZmZXI7CisKKwkrK2Vtc2dfb2ZmOworCXRleHQgPSBldmFsX3RvX3N0cmluZ19zYWZlKHdwLT53X3BfZmR0LCBOVUxMKTsKKwktLWVtc2dfb2ZmOworCisJY3Vyd2luID0gc2F2ZV9jdXJ3aW47CisJY3VyYnVmID0gY3Vyd2luLT53X2J1ZmZlcjsKKwlzZXRfdmltX3Zhcl9zdHJpbmcoVlZfRk9MRERBU0hFUywgTlVMTCwgLTEpOworCisJaWYgKHRleHQgIT0gTlVMTCkKKwl7CisJICAgIC8qIFJlcGxhY2UgdW5wcmludGFibGUgY2hhcmFjdGVycywgaWYgdGhlcmUgYXJlIGFueS4gIEJ1dAorCSAgICAgKiByZXBsYWNlIGEgVEFCIHdpdGggYSBzcGFjZS4gKi8KKwkgICAgZm9yIChwID0gdGV4dDsgKnAgIT0gTlVMOyArK3ApCisJICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWlmIChoYXNfbWJ5dGUgJiYgKGxlbiA9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkpID4gMSkKKwkJeworCQkgICAgaWYgKCF2aW1faXNwcmludGMoKCptYl9wdHIyY2hhcikocCkpKQorCQkJYnJlYWs7CisJCSAgICBwICs9IGxlbiAtIDE7CisJCX0KKwkJZWxzZQorI2VuZGlmCisJCSAgICBpZiAoKnAgPT0gVEFCKQorCQkJKnAgPSAnICc7CisJCSAgICBlbHNlIGlmIChwdHIyY2VsbHMocCkgPiAxKQorCQkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKCpwICE9IE5VTCkKKwkgICAgeworCQlwID0gdHJhbnNzdHIodGV4dCk7CisJCXZpbV9mcmVlKHRleHQpOworCQl0ZXh0ID0gcDsKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgKHRleHQgPT0gTlVMTCkKKyNlbmRpZgorICAgIHsKKwlzcHJpbnRmKChjaGFyICopYnVmLCBfKCIrLS0lM2xkIGxpbmVzIGZvbGRlZCAiKSwgZm9sZF9jb3VudCk7CisJdGV4dCA9IGJ1ZjsKKyAgICB9CisKKyAgICB0eHRjb2wgPSBjb2w7CS8qIHJlbWVtYmVyIHdoZXJlIHRleHQgc3RhcnRzICovCisKKyAgICAvKgorICAgICAqIDUuIG1vdmUgdGhlIHRleHQgdG8gY3VycmVudF9TY3JlZW5MaW5lLiAgRmlsbCB1cCB3aXRoICJmaWxsX2ZvbGQiLgorICAgICAqICAgIFJpZ2h0LWxlZnQgdGV4dCBpcyBwdXQgaW4gY29sdW1ucyAwIC0gbnVtYmVyLWNvbCwgbm9ybWFsIHRleHQgaXMgcHV0CisgICAgICogICAgaW4gY29sdW1ucyBudW1iZXItY29sIC0gd2luZG93LXdpZHRoLgorICAgICAqLworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoaGFzX21ieXRlKQorICAgIHsKKwlpbnQJY2VsbHM7CisJaW50CXU4YywgdThjX2MxLCB1OGNfYzI7CisJaW50CWlkeDsKKwlpbnQJY19sZW47CisjIGlmZGVmIEZFQVRfQVJBQklDCisJaW50CXByZXZfYyA9IDA7CQkvKiBwcmV2aW91cyBBcmFiaWMgY2hhcmFjdGVyICovCisJaW50CXByZXZfYzEgPSAwOwkJLyogZmlyc3QgY29tcG9zaW5nIGNoYXIgZm9yIHByZXZfYyAqLworIyBlbmRpZgorCisjIGlmZGVmIEZFQVRfUklHSFRMRUZUCisJaWYgKHdwLT53X3BfcmwpCisJICAgIGlkeCA9IG9mZjsKKwllbHNlCisjIGVuZGlmCisJICAgIGlkeCA9IG9mZiArIGNvbDsKKworCS8qIFN0b3JlIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIFNjcmVlbkxpbmVzW10gZXQgYWwuIGNvcnJlY3RseS4gKi8KKwlmb3IgKHAgPSB0ZXh0OyAqcCAhPSBOVUw7ICkKKwl7CisJICAgIGNlbGxzID0gKCptYl9wdHIyY2VsbHMpKHApOworCSAgICBjX2xlbiA9ICgqbWJfcHRyMmxlbl9jaGVjaykocCk7CisJICAgIGlmIChjb2wgKyBjZWxscyA+IFdfV0lEVEgod3ApCisjIGlmZGVmIEZFQVRfUklHSFRMRUZUCisJCSAgICAtICh3cC0+d19wX3JsID8gY29sIDogMCkKKyMgZW5kaWYKKwkJICAgICkKKwkJYnJlYWs7CisJICAgIFNjcmVlbkxpbmVzW2lkeF0gPSAqcDsKKwkgICAgaWYgKGVuY191dGY4KQorCSAgICB7CisJCXU4YyA9IHV0ZmNfcHRyMmNoYXIocCwgJnU4Y19jMSwgJnU4Y19jMik7CisJCWlmICgqcCA8IDB4ODAgJiYgdThjX2MxID09IDAgJiYgdThjX2MyID09IDApCisJCXsKKwkJICAgIFNjcmVlbkxpbmVzVUNbaWR4XSA9IDA7CisjaWZkZWYgRkVBVF9BUkFCSUMKKwkJICAgIHByZXZfYyA9IHU4YzsKKyNlbmRpZgorCQl9CisJCWVsc2UKKwkJeworI2lmZGVmIEZFQVRfQVJBQklDCisJCSAgICBpZiAocF9hcnNoYXBlICYmICFwX3RiaWRpICYmIEFSQUJJQ19DSEFSKHU4YykpCisJCSAgICB7CisJCQkvKiBEbyBBcmFiaWMgc2hhcGluZy4gKi8KKwkJCWludAlwYywgcGMxLCBuYywgZHVtbXk7CisJCQlpbnQJZmlyc3RieXRlID0gKnA7CisKKwkJCS8qIFRoZSBpZGVhIG9mIHdoYXQgaXMgdGhlIHByZXZpb3VzIGFuZCBuZXh0CisJCQkgKiBjaGFyYWN0ZXIgZGVwZW5kcyBvbiAncmlnaHRsZWZ0Jy4gKi8KKwkJCWlmICh3cC0+d19wX3JsKQorCQkJeworCQkJICAgIHBjID0gcHJldl9jOworCQkJICAgIHBjMSA9IHByZXZfYzE7CisJCQkgICAgbmMgPSB1dGZfcHRyMmNoYXIocCArIGNfbGVuKTsKKwkJCSAgICBwcmV2X2MxID0gdThjX2MxOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJICAgIHBjID0gdXRmY19wdHIyY2hhcihwICsgY19sZW4sICZwYzEsICZkdW1teSk7CisJCQkgICAgbmMgPSBwcmV2X2M7CisJCQl9CisJCQlwcmV2X2MgPSB1OGM7CisKKwkJCXU4YyA9IGFyYWJpY19zaGFwZSh1OGMsICZmaXJzdGJ5dGUsICZ1OGNfYzEsCisJCQkJCQkJCSBwYywgcGMxLCBuYyk7CisJCQlTY3JlZW5MaW5lc1tpZHhdID0gZmlyc3RieXRlOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJcHJldl9jID0gdThjOworI2VuZGlmCisJCSAgICAvKiBOb24tQk1QIGNoYXJhY3RlcjogZGlzcGxheSBhcyA/IG9yIGZ1bGx3aWR0aCA/LiAqLworCQkgICAgaWYgKHU4YyA+PSAweDEwMDAwKQorCQkJU2NyZWVuTGluZXNVQ1tpZHhdID0gKGNlbGxzID09IDIpID8gMHhmZjFmIDogKGludCknPyc7CisJCSAgICBlbHNlCisJCQlTY3JlZW5MaW5lc1VDW2lkeF0gPSB1OGM7CisJCSAgICBTY3JlZW5MaW5lc0MxW2lkeF0gPSB1OGNfYzE7CisJCSAgICBTY3JlZW5MaW5lc0MyW2lkeF0gPSB1OGNfYzI7CisJCX0KKwkJaWYgKGNlbGxzID4gMSkKKwkJICAgIFNjcmVlbkxpbmVzW2lkeCArIDFdID0gMDsKKwkgICAgfQorCSAgICBlbHNlIGlmIChjZWxscyA+IDEpCSAgICAvKiBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgKi8KKwkgICAgeworCQlpZiAoZW5jX2RiY3MgPT0gREJDU19KUE5VICYmICpwID09IDB4OGUpCisJCSAgICBTY3JlZW5MaW5lczJbaWR4XSA9IHBbMV07CisJCWVsc2UKKwkJICAgIFNjcmVlbkxpbmVzW2lkeCArIDFdID0gcFsxXTsKKwkgICAgfQorCSAgICBjb2wgKz0gY2VsbHM7CisJICAgIGlkeCArPSBjZWxsczsKKwkgICAgcCArPSBjX2xlbjsKKwl9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwlsZW4gPSAoaW50KVNUUkxFTih0ZXh0KTsKKwlpZiAobGVuID4gV19XSURUSCh3cCkgLSBjb2wpCisJICAgIGxlbiA9IFdfV0lEVEgod3ApIC0gY29sOworCWlmIChsZW4gPiAwKQorCXsKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCSAgICBpZiAod3AtPndfcF9ybCkKKwkJU1RSTkNQWShjdXJyZW50X1NjcmVlbkxpbmUsIHRleHQsIGxlbik7CisJICAgIGVsc2UKKyNlbmRpZgorCQlTVFJOQ1BZKGN1cnJlbnRfU2NyZWVuTGluZSArIGNvbCwgdGV4dCwgbGVuKTsKKwkgICAgY29sICs9IGxlbjsKKwl9CisgICAgfQorCisgICAgLyogRmlsbCB0aGUgcmVzdCBvZiB0aGUgbGluZSB3aXRoIHRoZSBmb2xkIGZpbGxlciAqLworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgaWYgKHdwLT53X3BfcmwpCisJY29sIC09IHR4dGNvbDsKKyNlbmRpZgorICAgIHdoaWxlIChjb2wgPCBXX1dJRFRIKHdwKQorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCSAgICAtICh3cC0+d19wX3JsID8gdHh0Y29sIDogMCkKKyNlbmRpZgorCSAgICApCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoZW5jX3V0ZjgpCisJeworCSAgICBpZiAoZmlsbF9mb2xkID49IDB4ODApCisJICAgIHsKKwkJU2NyZWVuTGluZXNVQ1tvZmYgKyBjb2xdID0gZmlsbF9mb2xkOworCQlTY3JlZW5MaW5lc0MxW29mZiArIGNvbF0gPSAwOworCQlTY3JlZW5MaW5lc0MyW29mZiArIGNvbF0gPSAwOworCSAgICB9CisJICAgIGVsc2UKKwkJU2NyZWVuTGluZXNVQ1tvZmYgKyBjb2xdID0gMDsKKwl9CisjZW5kaWYKKwlTY3JlZW5MaW5lc1tvZmYgKyBjb2wrK10gPSBmaWxsX2ZvbGQ7CisgICAgfQorCisgICAgaWYgKHRleHQgIT0gYnVmKQorCXZpbV9mcmVlKHRleHQpOworCisgICAgLyoKKyAgICAgKiA2LiBzZXQgaGlnaGxpZ2h0aW5nIGZvciB0aGUgVmlzdWFsIGFyZWEgYW4gb3RoZXIgdGV4dC4KKyAgICAgKiBJZiBhbGwgZm9sZGVkIGxpbmVzIGFyZSBpbiB0aGUgVmlzdWFsIGFyZWEsIGhpZ2hsaWdodCB0aGUgbGluZS4KKyAgICAgKi8KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmIChWSXN1YWxfYWN0aXZlICYmIHdwLT53X2J1ZmZlciA9PSBjdXJ3aW4tPndfYnVmZmVyKQorICAgIHsKKwlpZiAobHRvcmVxKGN1cndpbi0+d19jdXJzb3IsIFZJc3VhbCkpCisJeworCSAgICAvKiBWaXN1YWwgaXMgYWZ0ZXIgY3Vyd2luLT53X2N1cnNvciAqLworCSAgICB0b3AgPSAmY3Vyd2luLT53X2N1cnNvcjsKKwkgICAgYm90ID0gJlZJc3VhbDsKKwl9CisJZWxzZQorCXsKKwkgICAgLyogVmlzdWFsIGlzIGJlZm9yZSBjdXJ3aW4tPndfY3Vyc29yICovCisJICAgIHRvcCA9ICZWSXN1YWw7CisJICAgIGJvdCA9ICZjdXJ3aW4tPndfY3Vyc29yOworCX0KKwlpZiAobG51bSA+PSB0b3AtPmxudW0KKwkJJiYgbG51bWUgPD0gYm90LT5sbnVtCisJCSYmIChWSXN1YWxfbW9kZSAhPSAndicKKwkJICAgIHx8ICgobG51bSA+IHRvcC0+bG51bQorCQkJICAgIHx8IChsbnVtID09IHRvcC0+bG51bQorCQkJCSYmIHRvcC0+Y29sID09IDApKQorCQkJJiYgKGxudW1lIDwgYm90LT5sbnVtCisJCQkgICAgfHwgKGxudW1lID09IGJvdC0+bG51bQorCQkJCSYmIChib3QtPmNvbCAtICgqcF9zZWwgPT0gJ2UnKSkKKwkJPj0gU1RSTEVOKG1sX2dldF9idWYod3AtPndfYnVmZmVyLCBsbnVtZSwgRkFMU0UpKSkpKSkpCisJeworCSAgICBpZiAoVklzdWFsX21vZGUgPT0gQ3RybF9WKQorCSAgICB7CisJCS8qIFZpc3VhbCBibG9jayBtb2RlOiBoaWdobGlnaHQgdGhlIGNoYXJzIHBhcnQgb2YgdGhlIGJsb2NrICovCisJCWlmICh3cC0+d19vbGRfY3Vyc29yX2Zjb2wgKyB0eHRjb2wgPCAoY29sbnJfVClXX1dJRFRIKHdwKSkKKwkJeworCQkgICAgaWYgKHdwLT53X29sZF9jdXJzb3JfbGNvbCArIHR4dGNvbCA8IChjb2xucl9UKVdfV0lEVEgod3ApKQorCQkJbGVuID0gd3AtPndfb2xkX2N1cnNvcl9sY29sOworCQkgICAgZWxzZQorCQkJbGVuID0gV19XSURUSCh3cCkgLSB0eHRjb2w7CisJCSAgICBSTF9NRU1TRVQod3AtPndfb2xkX2N1cnNvcl9mY29sICsgdHh0Y29sLCBobF9hdHRyKEhMRl9WKSwKKwkJCQkgICAgICAgKHNpemVfdCkobGVuIC0gd3AtPndfb2xkX2N1cnNvcl9mY29sKSk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJCS8qIFNldCBhbGwgYXR0cmlidXRlcyBvZiB0aGUgdGV4dCAqLworCQlSTF9NRU1TRVQodHh0Y29sLCBobF9hdHRyKEhMRl9WKSwKKwkJCQkJICAgICAgKHNpemVfdCkoV19XSURUSCh3cCkgLSB0eHRjb2wpKTsKKwl9CisgICAgfQorI2VuZGlmCisKKworICAgIFNDUkVFTl9MSU5FKHJvdyArIFdfV0lOUk9XKHdwKSwgV19XSU5DT0wod3ApLCAoaW50KVdfV0lEVEgod3ApLAorCQkJCQkJICAgICAoaW50KVdfV0lEVEgod3ApLCBGQUxTRSk7CisKKyAgICAvKgorICAgICAqIFVwZGF0ZSB3X2NsaW5lX2hlaWdodCBhbmQgd19jbGluZV9mb2xkZWQgaWYgdGhlIGN1cnNvciBsaW5lIHdhcworICAgICAqIHVwZGF0ZWQgKHNhdmVzIGEgY2FsbCB0byBwbGluZXMoKSBsYXRlcikuCisgICAgICovCisgICAgaWYgKHdwID09IGN1cndpbgorCSAgICAmJiBsbnVtIDw9IGN1cndpbi0+d19jdXJzb3IubG51bQorCSAgICAmJiBsbnVtZSA+PSBjdXJ3aW4tPndfY3Vyc29yLmxudW0pCisgICAgeworCWN1cndpbi0+d19jbGluZV9yb3cgPSByb3c7CisJY3Vyd2luLT53X2NsaW5lX2hlaWdodCA9IDE7CisJY3Vyd2luLT53X2NsaW5lX2ZvbGRlZCA9IFRSVUU7CisJY3Vyd2luLT53X3ZhbGlkIHw9IChWQUxJRF9DSEVJR0hUfFZBTElEX0NST1cpOworICAgIH0KK30KKworLyoKKyAqIENvcHkgImJ1ZltsZW5dIiB0byBTY3JlZW5MaW5lc1sib2ZmIl0gYW5kIHNldCBhdHRyaWJ1dGVzIHRvICJhdHRyIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjb3B5X3RleHRfYXR0cihvZmYsIGJ1ZiwgbGVuLCBhdHRyKQorICAgIGludAkJb2ZmOworICAgIGNoYXJfdQkqYnVmOworICAgIGludAkJbGVuOworICAgIGludAkJYXR0cjsKK3sKKyAgICBtY2hfbWVtbW92ZShTY3JlZW5MaW5lcyArIG9mZiwgYnVmLCAoc2l6ZV90KWxlbik7CisjIGlmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoZW5jX3V0ZjgpCisJdmltX21lbXNldChTY3JlZW5MaW5lc1VDICsgb2ZmLCAwLCBzaXplb2YodThjaGFyX1QpICogKHNpemVfdClsZW4pOworIyBlbmRpZgorICAgIHZpbV9tZW1zZXQoU2NyZWVuQXR0cnMgKyBvZmYsIGF0dHIsIChzaXplX3QpbGVuKTsKK30KKworLyoKKyAqIEZpbGwgdGhlIGZvbGRjb2x1bW4gYXQgInAiIGZvciB3aW5kb3cgIndwIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmaWxsX2ZvbGRjb2x1bW4ocCwgd3AsIGNsb3NlZCwgbG51bSkKKyAgICBjaGFyX3UJKnA7CisgICAgd2luX1QJKndwOworICAgIGludAkJY2xvc2VkOwkJLyogVFJVRSBvZiBGQUxTRSAqLworICAgIGxpbmVucl9UCWxudW07CQkvKiBjdXJyZW50IGxpbmUgbnVtYmVyICovCit7CisgICAgaW50CQlpID0gMDsKKyAgICBpbnQJCWxldmVsOworICAgIGludAkJZmlyc3RfbGV2ZWw7CisKKyAgICAvKiBJbml0IHRvIGFsbCBzcGFjZXMuICovCisgICAgY29weV9zcGFjZXMocCwgKHNpemVfdCl3cC0+d19wX2ZkYyk7CisKKyAgICBsZXZlbCA9IHdpbl9mb2xkaW5mby5maV9sZXZlbDsKKyAgICBpZiAobGV2ZWwgPiAwKQorICAgIHsKKwkvKiBJZiB0aGUgY29sdW1uIGlzIHRvbyBuYXJyb3csIHdlIHN0YXJ0IGF0IHRoZSBsb3dlc3QgbGV2ZWwgdGhhdAorCSAqIGZpdHMgYW5kIHVzZSBudW1iZXJzIHRvIGluZGljYXRlZCB0aGUgZGVwdGguICovCisJZmlyc3RfbGV2ZWwgPSBsZXZlbCAtIHdwLT53X3BfZmRjIC0gY2xvc2VkICsgMjsKKwlpZiAoZmlyc3RfbGV2ZWwgPCAxKQorCSAgICBmaXJzdF9sZXZlbCA9IDE7CisKKwlmb3IgKGkgPSAwOyBpICsgMSA8IHdwLT53X3BfZmRjOyArK2kpCisJeworCSAgICBpZiAod2luX2ZvbGRpbmZvLmZpX2xudW0gPT0gbG51bQorCQkJICAgICAgJiYgZmlyc3RfbGV2ZWwgKyBpID49IHdpbl9mb2xkaW5mby5maV9sb3dfbGV2ZWwpCisJCXBbaV0gPSAnLSc7CisJICAgIGVsc2UgaWYgKGZpcnN0X2xldmVsID09IDEpCisJCXBbaV0gPSAnfCc7CisJICAgIGVsc2UgaWYgKGZpcnN0X2xldmVsICsgaSA8PSA5KQorCQlwW2ldID0gJzAnICsgZmlyc3RfbGV2ZWwgKyBpOworCSAgICBlbHNlCisJCXBbaV0gPSAnPic7CisJICAgIGlmIChmaXJzdF9sZXZlbCArIGkgPT0gbGV2ZWwpCisJCWJyZWFrOworCX0KKyAgICB9CisgICAgaWYgKGNsb3NlZCkKKwlwW2ldID0gJysnOworfQorI2VuZGlmIC8qIEZFQVRfRk9MRElORyAqLworCisvKgorICogRGlzcGxheSBsaW5lICJsbnVtIiBvZiB3aW5kb3cgJ3dwJyBvbiB0aGUgc2NyZWVuLgorICogU3RhcnQgYXQgcm93ICJzdGFydHJvdyIsIHN0b3Agd2hlbiAiZW5kcm93IiBpcyByZWFjaGVkLgorICogd3AtPndfdmlydGNvbCBuZWVkcyB0byBiZSB2YWxpZC4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsYXN0IHJvdyB0aGUgbGluZSBvY2N1cGllcy4KKyAqLworICAgIHN0YXRpYyBpbnQKK3dpbl9saW5lKHdwLCBsbnVtLCBzdGFydHJvdywgZW5kcm93KQorICAgIHdpbl9UCSp3cDsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJc3RhcnRyb3c7CisgICAgaW50CQllbmRyb3c7Cit7CisgICAgaW50CQljb2w7CQkJLyogdmlzdWFsIGNvbHVtbiBvbiBzY3JlZW4gKi8KKyAgICB1bnNpZ25lZAlvZmY7CQkJLyogb2Zmc2V0IGluIFNjcmVlbkxpbmVzL1NjcmVlbkF0dHJzICovCisgICAgaW50CQljID0gMDsJCQkvKiBpbml0IGZvciBHQ0MgKi8KKyAgICBsb25nCXZjb2wgPSAwOwkJLyogdmlydHVhbCBjb2x1bW4gKGZvciB0YWJzKSAqLworICAgIGxvbmcJdmNvbF9wcmV2ID0gLTE7CQkvKiAidmNvbCIgb2YgcHJldmlvdXMgY2hhcmFjdGVyICovCisgICAgY2hhcl91CSpsaW5lOwkJCS8qIGN1cnJlbnQgbGluZSAqLworICAgIGNoYXJfdQkqcHRyOwkJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gImxpbmUiICovCisgICAgaW50CQlyb3c7CQkJLyogcm93IGluIHRoZSB3aW5kb3csIGV4Y2wgd193aW5yb3cgKi8KKyAgICBpbnQJCXNjcmVlbl9yb3c7CQkvKiByb3cgb24gdGhlIHNjcmVlbiwgaW5jbCB3X3dpbnJvdyAqLworCisgICAgY2hhcl91CWV4dHJhWzE4XTsJCS8qICIlbGQiIGFuZCAnZmRjJyBtdXN0IGZpdCBpbiBoZXJlICovCisgICAgaW50CQluX2V4dHJhID0gMDsJCS8qIG51bWJlciBvZiBleHRyYSBjaGFycyAqLworICAgIGNoYXJfdQkqcF9leHRyYSA9IE5VTEw7CS8qIHN0cmluZyBvZiBleHRyYSBjaGFycyAqLworICAgIGludAkJY19leHRyYSA9IE5VTDsJCS8qIGV4dHJhIGNoYXJzLCBhbGwgdGhlIHNhbWUgKi8KKyAgICBpbnQJCWV4dHJhX2F0dHIgPSAwOwkJLyogYXR0cmlidXRlcyB3aGVuIG5fZXh0cmEgIT0gMCAqLworICAgIHN0YXRpYyBjaGFyX3UgKmF0X2VuZF9zdHIgPSAoY2hhcl91ICopIiI7IC8qIHVzZWQgZm9yIHBfZXh0cmEgd2hlbgorCQkJCQkgICBkaXNwbGF5aW5nIGxjc19lb2wgYXQgZW5kLW9mLWxpbmUgKi8KKyAgICBpbnQJCWxjc19lb2xfb25lID0gbGNzX2VvbDsJLyogbGNzX2VvbCB1bnRpbCBpdCdzIGJlZW4gdXNlZCAqLworICAgIGludAkJbGNzX3ByZWNfdG9kbyA9IGxjc19wcmVjOyAgIC8qIGxjc19wcmVjIHVudGlsIGl0J3MgYmVlbiB1c2VkICovCisKKyAgICAvKiBzYXZlZCAiZXh0cmEiIGl0ZW1zIGZvciB3aGVuIGRyYXdfc3RhdGUgYmVjb21lcyBXTF9MSU5FIChhZ2FpbikgKi8KKyAgICBpbnQJCXNhdmVkX25fZXh0cmEgPSAwOworICAgIGNoYXJfdQkqc2F2ZWRfcF9leHRyYSA9IE5VTEw7CisgICAgaW50CQlzYXZlZF9jX2V4dHJhID0gMDsKKyAgICBpbnQJCXNhdmVkX2NoYXJfYXR0ciA9IDA7CisKKyAgICBpbnQJCW5fYXR0ciA9IDA7CQkvKiBjaGFycyB3aXRoIHNwZWNpYWwgYXR0ciAqLworICAgIGludAkJc2F2ZWRfYXR0cjIgPSAwOwkvKiBjaGFyX2F0dHIgc2F2ZWQgZm9yIG5fYXR0ciAqLworICAgIGludAkJbl9hdHRyMyA9IDA7CQkvKiBjaGFycyB3aXRoIG92ZXJydWxpbmcgc3BlY2lhbCBhdHRyICovCisgICAgaW50CQlzYXZlZF9hdHRyMyA9IDA7CS8qIGNoYXJfYXR0ciBzYXZlZCBmb3Igbl9hdHRyMyAqLworCisgICAgaW50CQluX3NraXAgPSAwOwkJLyogbnIgb2YgY2hhcnMgdG8gc2tpcCBmb3IgJ25vd3JhcCcgKi8KKworICAgIGludAkJZnJvbWNvbCwgdG9jb2w7CQkvKiBzdGFydC9lbmQgb2YgaW52ZXJ0aW5nICovCisgICAgaW50CQlmcm9tY29sX3ByZXYgPSAtMjsJLyogc3RhcnQgb2YgaW52ZXJ0aW5nIGFmdGVyIGN1cnNvciAqLworICAgIGludAkJbm9pbnZjdXIgPSBGQUxTRTsJLyogZG9uJ3QgaW52ZXJ0IHRoZSBjdXJzb3IgKi8KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIHBvc19UCSp0b3AsICpib3Q7CisjZW5kaWYKKyAgICBwb3NfVAlwb3M7CisgICAgbG9uZwl2OworCisgICAgaW50CQljaGFyX2F0dHIgPSAwOwkJLyogYXR0cmlidXRlcyBmb3IgbmV4dCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQJCWFyZWFfaGlnaGxpZ2h0aW5nID0gRkFMU0U7IC8qIFZpc3VhbCBvciBpbmNzZWFyY2ggaGlnaGxpZ2h0aW5nCisJCQkJCSAgICAgIGluIHRoaXMgbGluZSAqLworICAgIGludAkJYXR0ciA9IDA7CQkvKiBhdHRyaWJ1dGVzIGZvciBhcmVhIGhpZ2hsaWdodGluZyAqLworICAgIGludAkJYXJlYV9hdHRyID0gMDsJCS8qIGF0dHJpYnV0ZXMgZGVzaXJlZCBieSBoaWdobGlnaHRpbmcgKi8KKyAgICBpbnQJCXNlYXJjaF9hdHRyID0gMDsJLyogYXR0cmlidXRlcyBkZXNpcmVkIGJ5ICdobHNlYXJjaCcgKi8KKyNpZmRlZiBGRUFUX1NZTl9ITAorICAgIGludAkJc3ludGF4X2F0dHIgPSAwOwkvKiBhdHRyaWJ1dGVzIGRlc2lyZWQgYnkgc3ludGF4ICovCisgICAgaW50CQloYXNfc3ludGF4ID0gRkFMU0U7CS8qIHRoaXMgYnVmZmVyIGhhcyBzeW50YXggaGlnaGwuICovCisgICAgaW50CQlzYXZlX2RpZF9lbXNnOworI2VuZGlmCisgICAgaW50CQlleHRyYV9jaGVjazsJCS8qIGhhcyBzeW50YXggb3IgbGluZWJyZWFrICovCisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJbXVsdGlfYXR0ciA9IDA7CQkvKiBhdHRyaWJ1dGVzIGRlc2lyZWQgYnkgbXVsdGlieXRlICovCisgICAgaW50CQltYl9sID0gMTsJCS8qIG11bHRpLWJ5dGUgYnl0ZSBsZW5ndGggKi8KKyAgICBpbnQJCW1iX2MgPSAwOwkJLyogZGVjb2RlZCBtdWx0aS1ieXRlIGNoYXJhY3RlciAqLworICAgIGludAkJbWJfdXRmOCA9IEZBTFNFOwkvKiBzY3JlZW4gY2hhciBpcyBVVEYtOCBjaGFyICovCisgICAgaW50CQl1OGNfYzEgPSAwOwkJLyogZmlyc3QgY29tcG9zaW5nIFVURi04IGNoYXIgKi8KKyAgICBpbnQJCXU4Y19jMiA9IDA7CQkvKiBzZWNvbmQgY29tcG9zaW5nIFVURi04IGNoYXIgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfRElGRgorICAgIGludAkJZmlsbGVyX2xpbmVzOwkJLyogbnIgb2YgZmlsbGVyIGxpbmVzIHRvIGJlIGRyYXduICovCisgICAgaW50CQlmaWxsZXJfdG9kbzsJCS8qIG5yIG9mIGZpbGxlciBsaW5lcyBzdGlsbCB0byBkbyArIDEgKi8KKyAgICBlbnVtIGhsZl92YWx1ZSBkaWZmX2hsZiA9IChlbnVtIGhsZl92YWx1ZSkwOyAvKiB0eXBlIG9mIGRpZmYgaGlnaGxpZ2h0aW5nICovCisgICAgaW50CQljaGFuZ2Vfc3RhcnQgPSBNQVhDT0w7CS8qIGZpcnN0IGNvbCBvZiBjaGFuZ2VkIGFyZWEgKi8KKyAgICBpbnQJCWNoYW5nZV9lbmQgPSAtMTsJLyogbGFzdCBjb2wgb2YgY2hhbmdlZCBhcmVhICovCisjZW5kaWYKKyAgICBjb2xucl9UCXRyYWlsY29sID0gTUFYQ09MOwkvKiBzdGFydCBvZiB0cmFpbGluZyBzcGFjZXMgKi8KKyNpZmRlZiBGRUFUX0xJTkVCUkVBSworICAgIGludAkJbmVlZF9zaG93YnJlYWsgPSBGQUxTRTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9TSUdOUykgfHwgKGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkgJiYgZGVmaW5lZChGRUFUX1dJTkRPV1MpKQorIyBkZWZpbmUgTElORV9BVFRSCisgICAgaW50CQlsaW5lX2F0dHIgPSAwOwkJLyogYXRycmlidXRlIGZvciB0aGUgd2hvbGUgbGluZSAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKyAgICBtYXRjaF9UCSpzaGw7CQkJLyogcG9pbnRzIHRvIHNlYXJjaF9obCBvciBtYXRjaF9obCAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9BUkFCSUMKKyAgICBpbnQJCXByZXZfYyA9IDA7CQkvKiBwcmV2aW91cyBBcmFiaWMgY2hhcmFjdGVyICovCisgICAgaW50CQlwcmV2X2MxID0gMDsJCS8qIGZpcnN0IGNvbXBvc2luZyBjaGFyIGZvciBwcmV2X2MgKi8KKyNlbmRpZgorCisgICAgLyogZHJhd19zdGF0ZTogaXRlbXMgdGhhdCBhcmUgZHJhd24gaW4gc2VxdWVuY2U6ICovCisjZGVmaW5lIFdMX1NUQVJUCTAJCS8qIG5vdGhpbmcgZG9uZSB5ZXQgKi8KKyNpZmRlZiBGRUFUX0NNRFdJTgorIyBkZWZpbmUgV0xfQ01ETElORQlXTF9TVEFSVCArIDEJLyogY21kbGluZSB3aW5kb3cgY29sdW1uICovCisjZWxzZQorIyBkZWZpbmUgV0xfQ01ETElORQlXTF9TVEFSVAorI2VuZGlmCisjaWZkZWYgRkVBVF9GT0xESU5HCisjIGRlZmluZSBXTF9GT0xECVdMX0NNRExJTkUgKyAxCS8qICdmb2xkY29sdW1uJyAqLworI2Vsc2UKKyMgZGVmaW5lIFdMX0ZPTEQJV0xfQ01ETElORQorI2VuZGlmCisjaWZkZWYgRkVBVF9TSUdOUworIyBkZWZpbmUgV0xfU0lHTglXTF9GT0xEICsgMQkvKiBjb2x1bW4gZm9yIHNpZ25zICovCisjZWxzZQorIyBkZWZpbmUgV0xfU0lHTglXTF9GT0xECQkvKiBjb2x1bW4gZm9yIHNpZ25zICovCisjZW5kaWYKKyNkZWZpbmUgV0xfTlIJCVdMX1NJR04gKyAxCS8qIGxpbmUgbnVtYmVyICovCisjaWYgZGVmaW5lZChGRUFUX0xJTkVCUkVBSykgfHwgZGVmaW5lZChGRUFUX0RJRkYpCisjIGRlZmluZSBXTF9TQlIJCVdMX05SICsgMQkvKiAnc2hvd2JyZWFrJyBvciAnZGlmZicgKi8KKyNlbHNlCisjIGRlZmluZSBXTF9TQlIJCVdMX05SCisjZW5kaWYKKyNkZWZpbmUgV0xfTElORQkJV0xfU0JSICsgMQkvKiB0ZXh0IGluIHRoZSBsaW5lICovCisgICAgaW50CQlkcmF3X3N0YXRlID0gV0xfU1RBUlQ7CS8qIHdoYXQgdG8gZHJhdyBuZXh0ICovCisjaWYgZGVmaW5lZChGRUFUX1hJTSkgJiYgZGVmaW5lZChGRUFUX0dVSV9HVEspCisgICAgaW50CQlmZWVkYmFja19jb2wgPSAwOworICAgIGludAkJZmVlZGJhY2tfb2xkX2F0dHIgPSAtMTsKKyNlbmRpZgorCisKKyAgICBpZiAoc3RhcnRyb3cgPiBlbmRyb3cpCQkvKiBwYXN0IHRoZSBlbmQgYWxyZWFkeSEgKi8KKwlyZXR1cm4gc3RhcnRyb3c7CisKKyAgICByb3cgPSBzdGFydHJvdzsKKyAgICBzY3JlZW5fcm93ID0gcm93ICsgV19XSU5ST1cod3ApOworCisgICAgLyoKKyAgICAgKiBUbyBzcGVlZCB1cCB0aGUgbG9vcCBiZWxvdywgc2V0IGV4dHJhX2NoZWNrIHdoZW4gdGhlcmUgaXMgbGluZWJyZWFrLAorICAgICAqIHRyYWlsaW5nIHdoaXRlIHNwYWNlIGFuZC9vciBzeW50YXggcHJvY2Vzc2luZyB0byBiZSBkb25lLgorICAgICAqLworI2lmZGVmIEZFQVRfTElORUJSRUFLCisgICAgZXh0cmFfY2hlY2sgPSB3cC0+d19wX2xicjsKKyNlbHNlCisgICAgZXh0cmFfY2hlY2sgPSAwOworI2VuZGlmCisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBpZiAoc3ludGF4X3ByZXNlbnQod3AtPndfYnVmZmVyKSkKKyAgICB7CisJLyogUHJlcGFyZSBmb3Igc3ludGF4IGhpZ2hsaWdodGluZyBpbiB0aGlzIGxpbmUuICBXaGVuIHRoZXJlIGlzIGFuCisJICogZXJyb3IsIHN0b3Agc3ludGF4IGhpZ2hsaWdodGluZy4gKi8KKwlzYXZlX2RpZF9lbXNnID0gZGlkX2Vtc2c7CisJZGlkX2Vtc2cgPSBGQUxTRTsKKwlzeW50YXhfc3RhcnQod3AsIGxudW0pOworCWlmIChkaWRfZW1zZykKKwkgICAgc3ludGF4X2NsZWFyKHdwLT53X2J1ZmZlcik7CisJZWxzZQorCXsKKwkgICAgZGlkX2Vtc2cgPSBzYXZlX2RpZF9lbXNnOworCSAgICBoYXNfc3ludGF4ID0gVFJVRTsKKwkgICAgZXh0cmFfY2hlY2sgPSBUUlVFOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogaGFuZGxlIHZpc3VhbCBhY3RpdmUgaW4gdGhpcyB3aW5kb3cKKyAgICAgKi8KKyAgICBmcm9tY29sID0gLTEwOworICAgIHRvY29sID0gTUFYQ09MOworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKFZJc3VhbF9hY3RpdmUgJiYgd3AtPndfYnVmZmVyID09IGN1cndpbi0+d19idWZmZXIpCisgICAgeworCQkJCQkvKiBWaXN1YWwgaXMgYWZ0ZXIgY3Vyd2luLT53X2N1cnNvciAqLworCWlmIChsdG9yZXEoY3Vyd2luLT53X2N1cnNvciwgVklzdWFsKSkKKwl7CisJICAgIHRvcCA9ICZjdXJ3aW4tPndfY3Vyc29yOworCSAgICBib3QgPSAmVklzdWFsOworCX0KKwllbHNlCQkJCS8qIFZpc3VhbCBpcyBiZWZvcmUgY3Vyd2luLT53X2N1cnNvciAqLworCXsKKwkgICAgdG9wID0gJlZJc3VhbDsKKwkgICAgYm90ID0gJmN1cndpbi0+d19jdXJzb3I7CisJfQorCWlmIChWSXN1YWxfbW9kZSA9PSBDdHJsX1YpCS8qIGJsb2NrIG1vZGUgKi8KKwl7CisJICAgIGlmIChsbnVtID49IHRvcC0+bG51bSAmJiBsbnVtIDw9IGJvdC0+bG51bSkKKwkgICAgeworCQlmcm9tY29sID0gd3AtPndfb2xkX2N1cnNvcl9mY29sOworCQl0b2NvbCA9IHdwLT53X29sZF9jdXJzb3JfbGNvbDsKKwkgICAgfQorCX0KKwllbHNlCQkJCS8qIG5vbi1ibG9jayBtb2RlICovCisJeworCSAgICBpZiAobG51bSA+IHRvcC0+bG51bSAmJiBsbnVtIDw9IGJvdC0+bG51bSkKKwkJZnJvbWNvbCA9IDA7CisJICAgIGVsc2UgaWYgKGxudW0gPT0gdG9wLT5sbnVtKQorCSAgICB7CisJCWlmIChWSXN1YWxfbW9kZSA9PSAnVicpCS8qIGxpbmV3aXNlICovCisJCSAgICBmcm9tY29sID0gMDsKKwkJZWxzZQorCQl7CisJCSAgICBnZXR2dmNvbCh3cCwgdG9wLCAoY29sbnJfVCAqKSZmcm9tY29sLCBOVUxMLCBOVUxMKTsKKwkJICAgIGlmIChnY2hhcl9wb3ModG9wKSA9PSBOVUwpCisJCQl0b2NvbCA9IGZyb21jb2wgKyAxOworCQl9CisJICAgIH0KKwkgICAgaWYgKFZJc3VhbF9tb2RlICE9ICdWJyAmJiBsbnVtID09IGJvdC0+bG51bSkKKwkgICAgeworCQlpZiAoKnBfc2VsID09ICdlJyAmJiBib3QtPmNvbCA9PSAwCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCQkJJiYgYm90LT5jb2xhZGQgPT0gMAorI2VuZGlmCisJCSAgICkKKwkJeworCQkgICAgZnJvbWNvbCA9IC0xMDsKKwkJICAgIHRvY29sID0gTUFYQ09MOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgcG9zID0gKmJvdDsKKwkJICAgIGlmICgqcF9zZWwgPT0gJ2UnKQorCQkJZ2V0dnZjb2wod3AsICZwb3MsIChjb2xucl9UICopJnRvY29sLCBOVUxMLCBOVUxMKTsKKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWdldHZ2Y29sKHdwLCAmcG9zLCBOVUxMLCBOVUxMLCAoY29sbnJfVCAqKSZ0b2NvbCk7CisJCQkrK3RvY29sOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisKKyNpZm5kZWYgTVNET1MKKwkvKiBDaGVjayBpZiB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3Igc2hvdWxkIG5vdCBiZSBpbnZlcnRlZCAqLworCWlmICghaGlnaGxpZ2h0X21hdGNoICYmIGxudW0gPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtICYmIHdwID09IGN1cndpbgorIyBpZmRlZiBGRUFUX0dVSQorCQkmJiAhZ3VpLmluX3VzZQorIyBlbmRpZgorCQkpCisJICAgIG5vaW52Y3VyID0gVFJVRTsKKyNlbmRpZgorCisJLyogaWYgaW52ZXJ0aW5nIGluIHRoaXMgbGluZSBzZXQgYXJlYV9oaWdobGlnaHRpbmcgKi8KKwlpZiAoZnJvbWNvbCA+PSAwKQorCXsKKwkgICAgYXJlYV9oaWdobGlnaHRpbmcgPSBUUlVFOworCSAgICBhdHRyID0gaGxfYXR0cihITEZfVik7CisjaWYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkgJiYgZGVmaW5lZChGRUFUX1gxMSkKKwkgICAgaWYgKGNsaXBfc3Rhci5hdmFpbGFibGUgJiYgIWNsaXBfc3Rhci5vd25lZCAmJiBjbGlwX2lzYXV0b3NlbCgpKQorCQlhdHRyID0gaGxfYXR0cihITEZfVk5DKTsKKyNlbmRpZgorCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIGhhbmRsZSAnaW5zZWFyY2gnIGFuZCAiOnMvLy9jIiBoaWdobGlnaHRpbmcKKyAgICAgKi8KKyAgICBlbHNlCisjZW5kaWYgLyogRkVBVF9WSVNVQUwgKi8KKwlpZiAoaGlnaGxpZ2h0X21hdGNoCisJICAgICYmIHdwID09IGN1cndpbgorCSAgICAmJiBsbnVtID49IGN1cndpbi0+d19jdXJzb3IubG51bQorCSAgICAmJiBsbnVtIDw9IGN1cndpbi0+d19jdXJzb3IubG51bSArIHNlYXJjaF9tYXRjaF9saW5lcykKKyAgICB7CisJaWYgKGxudW0gPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCSAgICBnZXR2Y29sKGN1cndpbiwgJihjdXJ3aW4tPndfY3Vyc29yKSwKKwkJCQkJICAgICAoY29sbnJfVCAqKSZmcm9tY29sLCBOVUxMLCBOVUxMKTsKKwllbHNlCisJICAgIGZyb21jb2wgPSAwOworCWlmIChsbnVtID09IGN1cndpbi0+d19jdXJzb3IubG51bSArIHNlYXJjaF9tYXRjaF9saW5lcykKKwl7CisJICAgIHBvcy5sbnVtID0gbG51bTsKKwkgICAgcG9zLmNvbCA9IHNlYXJjaF9tYXRjaF9lbmRjb2w7CisJICAgIGdldHZjb2woY3Vyd2luLCAmcG9zLCAoY29sbnJfVCAqKSZ0b2NvbCwgTlVMTCwgTlVMTCk7CisJfQorCWVsc2UKKwkgICAgdG9jb2wgPSBNQVhDT0w7CisJaWYgKGZyb21jb2wgPT0gdG9jb2wpCQkvKiBkbyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyICovCisJICAgIHRvY29sID0gZnJvbWNvbCArIDE7CS8qIGhhcHBlbnMgd2hlbiBwYXN0IGVuZCBvZiBsaW5lICovCisJYXJlYV9oaWdobGlnaHRpbmcgPSBUUlVFOworCWF0dHIgPSBobF9hdHRyKEhMRl9JKTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICBmaWxsZXJfbGluZXMgPSBkaWZmX2NoZWNrKHdwLCBsbnVtKTsKKyAgICBpZiAoZmlsbGVyX2xpbmVzIDwgMCkKKyAgICB7CisJaWYgKGZpbGxlcl9saW5lcyA9PSAtMSkKKwl7CisJICAgIGlmIChkaWZmX2ZpbmRfY2hhbmdlKHdwLCBsbnVtLCAmY2hhbmdlX3N0YXJ0LCAmY2hhbmdlX2VuZCkpCisJCWRpZmZfaGxmID0gSExGX0FERDsJLyogYWRkZWQgbGluZSAqLworCSAgICBlbHNlIGlmIChjaGFuZ2Vfc3RhcnQgPT0gMCkKKwkJZGlmZl9obGYgPSBITEZfVFhEOwkvKiBjaGFuZ2VkIHRleHQgKi8KKwkgICAgZWxzZQorCQlkaWZmX2hsZiA9IEhMRl9DSEQ7CS8qIGNoYW5nZWQgbGluZSAqLworCX0KKwllbHNlCisJICAgIGRpZmZfaGxmID0gSExGX0FERDsJCS8qIGFkZGVkIGxpbmUgKi8KKwlmaWxsZXJfbGluZXMgPSAwOworCWFyZWFfaGlnaGxpZ2h0aW5nID0gVFJVRTsKKyAgICB9CisgICAgaWYgKGxudW0gPT0gd3AtPndfdG9wbGluZSkKKwlmaWxsZXJfbGluZXMgPSB3cC0+d190b3BmaWxsOworICAgIGZpbGxlcl90b2RvID0gZmlsbGVyX2xpbmVzOworI2VuZGlmCisKKyNpZmRlZiBMSU5FX0FUVFIKKyMgaWZkZWYgRkVBVF9TSUdOUworICAgIC8qIElmIHRoaXMgbGluZSBoYXMgYSBzaWduIHdpdGggbGluZSBoaWdobGlnaHRpbmcgc2V0IGxpbmVfYXR0ci4gKi8KKyAgICB2ID0gYnVmX2dldHNpZ250eXBlKHdwLT53X2J1ZmZlciwgbG51bSwgU0lHTl9MSU5FSEwpOworICAgIGlmICh2ICE9IDApCisJbGluZV9hdHRyID0gc2lnbl9nZXRfYXR0cigoaW50KXYsIFRSVUUpOworIyBlbmRpZgorIyBpZiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpICYmIGRlZmluZWQoRkVBVF9XSU5ET1dTKQorICAgIC8qIEhpZ2hsaWdodCB0aGUgY3VycmVudCBsaW5lIGluIHRoZSBxdWlja2ZpeCB3aW5kb3cuICovCisgICAgaWYgKGJ0X3F1aWNrZml4KHdwLT53X2J1ZmZlcikgJiYgcWZfY3VycmVudF9lbnRyeSgpID09IGxudW0pCisJbGluZV9hdHRyID0gaGxfYXR0cihITEZfTCk7CisjIGVuZGlmCisgICAgaWYgKGxpbmVfYXR0ciAhPSAwKQorCWFyZWFfaGlnaGxpZ2h0aW5nID0gVFJVRTsKKyNlbmRpZgorCisgICAgbGluZSA9IG1sX2dldF9idWYod3AtPndfYnVmZmVyLCBsbnVtLCBGQUxTRSk7CisgICAgcHRyID0gbGluZTsKKworICAgIC8qIGZpbmQgc3RhcnQgb2YgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworICAgIGlmICh3cC0+d19wX2xpc3QgJiYgbGNzX3RyYWlsKQorICAgIHsKKwl0cmFpbGNvbCA9IChjb2xucl9UKVNUUkxFTihwdHIpOworCXdoaWxlICh0cmFpbGNvbCA+IChjb2xucl9UKTAgJiYgdmltX2lzd2hpdGUocHRyW3RyYWlsY29sIC0gMV0pKQorCSAgICAtLXRyYWlsY29sOworCXRyYWlsY29sICs9IChjb2xucl9UKSAocHRyIC0gbGluZSk7CisJZXh0cmFfY2hlY2sgPSBUUlVFOworICAgIH0KKworICAgIC8qCisgICAgICogJ25vd3JhcCcgb3IgJ3dyYXAnIGFuZCBhIHNpbmdsZSBsaW5lIHRoYXQgZG9lc24ndCBmaXQ6IEFkdmFuY2UgdG8gdGhlCisgICAgICogZmlyc3QgY2hhcmFjdGVyIHRvIGJlIGRpc3BsYXllZC4KKyAgICAgKi8KKyAgICBpZiAod3AtPndfcF93cmFwKQorCXYgPSB3cC0+d19za2lwY29sOworICAgIGVsc2UKKwl2ID0gd3AtPndfbGVmdGNvbDsKKyAgICBpZiAodiA+IDApCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwljaGFyX3UJKnByZXZfcHRyID0gcHRyOworI2VuZGlmCisJd2hpbGUgKHZjb2wgPCB2ICYmICpwdHIgIT0gTlVMKQorCXsKKwkgICAgYyA9IHdpbl9sYnJfY2hhcnRhYnNpemUod3AsIHB0ciwgKGNvbG5yX1QpdmNvbCwgTlVMTCk7CisJICAgIHZjb2wgKz0gYzsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIHByZXZfcHRyID0gcHRyOworCSAgICBpZiAoaGFzX21ieXRlKQorCQlwdHIgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIpOworCSAgICBlbHNlCisjZW5kaWYKKwkJKytwdHI7CisJfQorCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCS8qIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQgdGhlIGVuZCBvZiB0aGUgbGluZSBtYXkgYmUgYmVmb3JlIHRoZQorCSAqIHN0YXJ0IG9mIHRoZSBkaXNwbGF5ZWQgcGFydC4gKi8KKwlpZiAodmNvbCA8IHYgJiYgKnB0ciA9PSBOVUwgJiYgdmlydHVhbF9hY3RpdmUoKSkKKwkgICAgdmNvbCA9IHY7CisjZW5kaWYKKworCS8qIEhhbmRsZSBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGNvbXBsZXRlbHkgb24gdGhlIHNjcmVlbjogUHV0IHB0ciBhdAorCSAqIHRoYXQgY2hhcmFjdGVyIGJ1dCBza2lwIHRoZSBmaXJzdCBmZXcgc2NyZWVuIGNoYXJhY3RlcnMuICovCisJaWYgKHZjb2wgPiB2KQorCXsKKwkgICAgdmNvbCAtPSBjOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgcHRyID0gcHJldl9wdHI7CisjZWxzZQorCSAgICAtLXB0cjsKKyNlbmRpZgorCSAgICBuX3NraXAgPSB2IC0gdmNvbDsKKwl9CisKKwkvKgorCSAqIEFkanVzdCBmb3Igd2hlbiB0aGUgaW52ZXJ0ZWQgdGV4dCBpcyBiZWZvcmUgdGhlIHNjcmVlbiwKKwkgKiBhbmQgd2hlbiB0aGUgc3RhcnQgb2YgdGhlIGludmVydGVkIHRleHQgaXMgYmVmb3JlIHRoZSBzY3JlZW4uCisJICovCisJaWYgKHRvY29sIDw9IHZjb2wpCisJICAgIGZyb21jb2wgPSAwOworCWVsc2UgaWYgKGZyb21jb2wgPj0gMCAmJiBmcm9tY29sIDwgdmNvbCkKKwkgICAgZnJvbWNvbCA9IHZjb2w7CisKKyNpZmRlZiBGRUFUX0xJTkVCUkVBSworCS8qIFdoZW4gd19za2lwY29sIGlzIG5vbi16ZXJvLCBmaXJzdCBsaW5lIG5lZWRzICdzaG93YnJlYWsnICovCisJaWYgKHdwLT53X3Bfd3JhcCkKKwkgICAgbmVlZF9zaG93YnJlYWsgPSBUUlVFOworI2VuZGlmCisgICAgfQorCisgICAgLyoKKyAgICAgKiBDb3JyZWN0IGhpZ2hsaWdodGluZyBmb3IgY3Vyc29yIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQuCisgICAgICogQXZvaWRzIGhhdmluZyB0byBjaGVjayB0aGlzIGZvciBlYWNoIGNoYXJhY3Rlci4KKyAgICAgKi8KKyAgICBpZiAoZnJvbWNvbCA+PSAwKQorICAgIHsKKwlpZiAobm9pbnZjdXIpCisJeworCSAgICBpZiAoKGNvbG5yX1QpZnJvbWNvbCA9PSB3cC0+d192aXJ0Y29sKQorCSAgICB7CisJCS8qIGhpZ2hsaWdodGluZyBzdGFydHMgYXQgY3Vyc29yLCBsZXQgaXQgc3RhcnQganVzdCBhZnRlciB0aGUKKwkJICogY3Vyc29yICovCisJCWZyb21jb2xfcHJldiA9IGZyb21jb2w7CisJCWZyb21jb2wgPSAtMTsKKwkgICAgfQorCSAgICBlbHNlIGlmICgoY29sbnJfVClmcm9tY29sIDwgd3AtPndfdmlydGNvbCkKKwkJLyogcmVzdGFydCBoaWdobGlnaHRpbmcgYWZ0ZXIgdGhlIGN1cnNvciAqLworCQlmcm9tY29sX3ByZXYgPSB3cC0+d192aXJ0Y29sOworCX0KKwlpZiAoZnJvbWNvbCA+PSB0b2NvbCkKKwkgICAgZnJvbWNvbCA9IC0xOworICAgIH0KKworI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisgICAgLyoKKyAgICAgKiBIYW5kbGUgaGlnaGxpZ2h0aW5nIHRoZSBsYXN0IHVzZWQgc2VhcmNoIHBhdHRlcm4uCisgICAgICogRG8gdGhpcyBmb3IgYm90aCBzZWFyY2hfaGwgYW5kIG1hdGNoX2hsLgorICAgICAqLworICAgIHNobCA9ICZzZWFyY2hfaGw7CisgICAgZm9yICg7OykKKyAgICB7CisJc2hsLT5zdGFydHAgPSBOVUxMOworCXNobC0+ZW5kcCA9IE5VTEw7CisJc2hsLT5hdHRyX2N1ciA9IDA7CisJaWYgKHNobC0+cm0ucmVncHJvZyAhPSBOVUxMKQorCXsKKwkgICAgdiA9IChsb25nKShwdHIgLSBsaW5lKTsKKwkgICAgbmV4dF9zZWFyY2hfaGwod3AsIHNobCwgbG51bSwgKGNvbG5yX1Qpdik7CisKKwkgICAgLyogTmVlZCB0byBnZXQgdGhlIGxpbmUgYWdhaW4sIGEgbXVsdGktbGluZSByZWdleHAgbWF5IGhhdmUgbWFkZSBpdAorCSAgICAgKiBpbnZhbGlkLiAqLworCSAgICBsaW5lID0gbWxfZ2V0X2J1Zih3cC0+d19idWZmZXIsIGxudW0sIEZBTFNFKTsKKwkgICAgcHRyID0gbGluZSArIHY7CisKKwkgICAgaWYgKHNobC0+bG51bSAhPSAwICYmIHNobC0+bG51bSA8PSBsbnVtKQorCSAgICB7CisJCWlmIChzaGwtPmxudW0gPT0gbG51bSkKKwkJICAgIHNobC0+c3RhcnRwID0gbGluZSArIHNobC0+cm0uc3RhcnRwb3NbMF0uY29sOworCQllbHNlCisJCSAgICBzaGwtPnN0YXJ0cCA9IGxpbmU7CisJCWlmIChsbnVtID09IHNobC0+bG51bSArIHNobC0+cm0uZW5kcG9zWzBdLmxudW0KKwkJCQkJCSAgLSBzaGwtPnJtLnN0YXJ0cG9zWzBdLmxudW0pCisJCSAgICBzaGwtPmVuZHAgPSBsaW5lICsgc2hsLT5ybS5lbmRwb3NbMF0uY29sOworCQllbHNlCisJCSAgICBzaGwtPmVuZHAgPSBsaW5lICsgTUFYQ09MOworCQkvKiBIaWdobGlnaHQgb25lIGNoYXJhY3RlciBmb3IgYW4gZW1wdHkgbWF0Y2guICovCisJCWlmIChzaGwtPnN0YXJ0cCA9PSBzaGwtPmVuZHApCisJCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBpZiAoaGFzX21ieXRlICYmICpzaGwtPmVuZHAgIT0gTlVMKQorCQkJc2hsLT5lbmRwICs9ICgqbWJfcHRyMmxlbl9jaGVjaykoc2hsLT5lbmRwKTsKKwkJICAgIGVsc2UKKyNlbmRpZgorCQkJKytzaGwtPmVuZHA7CisJCX0KKwkJaWYgKHNobC0+c3RhcnRwIDwgcHRyKSAgLyogbWF0Y2ggYXQgbGVmdGNvbCAqLworCQl7CisJCSAgICBzaGwtPmF0dHJfY3VyID0gc2hsLT5hdHRyOworCQkgICAgc2VhcmNoX2F0dHIgPSBzaGwtPmF0dHI7CisJCX0KKwkJYXJlYV9oaWdobGlnaHRpbmcgPSBUUlVFOworCSAgICB9CisJfQorCWlmIChzaGwgPT0gJm1hdGNoX2hsKQorCSAgICBicmVhazsKKwlzaGwgPSAmbWF0Y2hfaGw7CisgICAgfQorI2VuZGlmCisKKyAgICBvZmYgPSAodW5zaWduZWQpIChjdXJyZW50X1NjcmVlbkxpbmUgLSBTY3JlZW5MaW5lcyk7CisgICAgY29sID0gMDsKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorICAgIGlmICh3cC0+d19wX3JsKQorICAgIHsKKwkvKiBSaWdodGxlZnQgd2luZG93OiBwcm9jZXNzIHRoZSB0ZXh0IGluIHRoZSBub3JtYWwgZGlyZWN0aW9uLCBidXQgcHV0CisJICogaXQgaW4gY3VycmVudF9TY3JlZW5MaW5lW10gZnJvbSByaWdodCB0byBsZWZ0LiAgU3RhcnQgYXQgdGhlCisJICogcmlnaHRtb3N0IGNvbHVtbiBvZiB0aGUgd2luZG93LiAqLworCWNvbCA9IFdfV0lEVEgod3ApIC0gMTsKKwlvZmYgKz0gY29sOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBSZXBlYXQgZm9yIHRoZSB3aG9sZSBkaXNwbGF5ZWQgbGluZS4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwkvKiBTa2lwIHRoaXMgcXVpY2tseSB3aGVuIHdvcmtpbmcgb24gdGhlIHRleHQuICovCisJaWYgKGRyYXdfc3RhdGUgIT0gV0xfTElORSkKKwl7CisjaWZkZWYgRkVBVF9DTURXSU4KKwkgICAgaWYgKGRyYXdfc3RhdGUgPT0gV0xfQ01ETElORSAtIDEgJiYgbl9leHRyYSA9PSAwKQorCSAgICB7CisJCWRyYXdfc3RhdGUgPSBXTF9DTURMSU5FOworCQlpZiAoY21kd2luX3R5cGUgIT0gMCAmJiB3cCA9PSBjdXJ3aW4pCisJCXsKKwkJICAgIC8qIERyYXcgdGhlIGNtZGxpbmUgY2hhcmFjdGVyLiAqLworCQkgICAgKmV4dHJhID0gY21kd2luX3R5cGU7CisJCSAgICBuX2V4dHJhID0gMTsKKwkJICAgIHBfZXh0cmEgPSBleHRyYTsKKwkJICAgIGNfZXh0cmEgPSBOVUw7CisJCSAgICBjaGFyX2F0dHIgPSBobF9hdHRyKEhMRl9BVCk7CisJCX0KKwkgICAgfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgaWYgKGRyYXdfc3RhdGUgPT0gV0xfRk9MRCAtIDEgJiYgbl9leHRyYSA9PSAwKQorCSAgICB7CisJCWRyYXdfc3RhdGUgPSBXTF9GT0xEOworCQlpZiAod3AtPndfcF9mZGMgPiAwKQorCQl7CisJCSAgICAvKiBEcmF3IHRoZSAnZm9sZGNvbHVtbicuICovCisJCSAgICBmaWxsX2ZvbGRjb2x1bW4oZXh0cmEsIHdwLCBGQUxTRSwgbG51bSk7CisJCSAgICBuX2V4dHJhID0gd3AtPndfcF9mZGM7CisJCSAgICBwX2V4dHJhID0gZXh0cmE7CisJCSAgICBjX2V4dHJhID0gTlVMOworCQkgICAgY2hhcl9hdHRyID0gaGxfYXR0cihITEZfRkMpOworCQl9CisJICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TSUdOUworCSAgICBpZiAoZHJhd19zdGF0ZSA9PSBXTF9TSUdOIC0gMSAmJiBuX2V4dHJhID09IDApCisJICAgIHsKKwkJZHJhd19zdGF0ZSA9IFdMX1NJR047CisJCS8qIFNob3cgdGhlIHNpZ24gY29sdW1uIHdoZW4gdGhlcmUgYXJlIGFueSBzaWducyBpbiB0aGlzCisJCSAqIGJ1ZmZlciBvciB3aGVuIHVzaW5nIE5ldGJlYW5zLiAqLworCQlpZiAoZHJhd19zaWduY29sdW1uKHdwKQorIyBpZmRlZiBGRUFUX0RJRkYKKwkJCSYmIGZpbGxlcl90b2RvIDw9IDAKKyMgZW5kaWYKKwkJICAgKQorCQl7CisJCSAgICBpbnRfdQl0ZXh0X3NpZ247CisjIGlmZGVmIEZFQVRfU0lHTl9JQ09OUworCQkgICAgaW50X3UJaWNvbl9zaWduOworIyBlbmRpZgorCisJCSAgICAvKiBEcmF3IHR3byBjZWxscyB3aXRoIHRoZSBzaWduIHZhbHVlIG9yIGJsYW5rLiAqLworCQkgICAgY19leHRyYSA9ICcgJzsKKwkJICAgIGNoYXJfYXR0ciA9IGhsX2F0dHIoSExGX1NDKTsKKwkJICAgIG5fZXh0cmEgPSAyOworCisJCSAgICBpZiAocm93ID09IHN0YXJ0cm93KQorCQkgICAgeworCQkJdGV4dF9zaWduID0gYnVmX2dldHNpZ250eXBlKHdwLT53X2J1ZmZlciwgbG51bSwKKwkJCQkJCQkJICAgU0lHTl9URVhUKTsKKyMgaWZkZWYgRkVBVF9TSUdOX0lDT05TCisJCQlpY29uX3NpZ24gPSBidWZfZ2V0c2lnbnR5cGUod3AtPndfYnVmZmVyLCBsbnVtLAorCQkJCQkJCQkgICBTSUdOX0lDT04pOworCQkJaWYgKGd1aS5pbl91c2UgJiYgaWNvbl9zaWduICE9IDApCisJCQl7CisJCQkgICAgLyogVXNlIHRoZSBpbWFnZSBpbiB0aGlzIHBvc2l0aW9uLiAqLworCQkJICAgIGNfZXh0cmEgPSBTSUdOX0JZVEU7CisjICBpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKKwkJCSAgICBpZiAoYnVmX3NpZ25jb3VudCh3cC0+d19idWZmZXIsIGxudW0pID4gMSkKKwkJCQljX2V4dHJhID0gTVVMVElTSUdOX0JZVEU7CisjICBlbmRpZgorCQkJICAgIGNoYXJfYXR0ciA9IGljb25fc2lnbjsKKwkJCX0KKwkJCWVsc2UKKyMgZW5kaWYKKwkJCSAgICBpZiAodGV4dF9zaWduICE9IDApCisJCQl7CisJCQkgICAgcF9leHRyYSA9IHNpZ25fZ2V0X3RleHQodGV4dF9zaWduKTsKKwkJCSAgICBpZiAocF9leHRyYSAhPSBOVUxMKQorCQkJICAgIHsKKwkJCQljX2V4dHJhID0gTlVMOworCQkJCW5fZXh0cmEgPSBTVFJMRU4ocF9leHRyYSk7CisJCQkgICAgfQorCQkJICAgIGNoYXJfYXR0ciA9IHNpZ25fZ2V0X2F0dHIodGV4dF9zaWduLCBGQUxTRSk7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorI2VuZGlmCisKKwkgICAgaWYgKGRyYXdfc3RhdGUgPT0gV0xfTlIgLSAxICYmIG5fZXh0cmEgPT0gMCkKKwkgICAgeworCQlkcmF3X3N0YXRlID0gV0xfTlI7CisJCS8qIERpc3BsYXkgdGhlIGxpbmUgbnVtYmVyLiAgQWZ0ZXIgdGhlIGZpcnN0IGZpbGwgd2l0aCBibGFua3MKKwkJICogd2hlbiB0aGUgJ24nIGZsYWcgaXNuJ3QgaW4gJ2NwbycgKi8KKwkJaWYgKHdwLT53X3BfbnUKKwkJCSYmIChyb3cgPT0gc3RhcnRyb3cKKyNpZmRlZiBGRUFUX0RJRkYKKwkJCSAgICArIGZpbGxlcl9saW5lcworI2VuZGlmCisJCQkgICAgfHwgdmltX3N0cmNocihwX2NwbywgQ1BPX05VTUNPTCkgPT0gTlVMTCkpCisJCXsKKwkJICAgIC8qIERyYXcgdGhlIGxpbmUgbnVtYmVyIChlbXB0eSBzcGFjZSBhZnRlciB3cmFwcGluZykuICovCisJCSAgICBpZiAocm93ID09IHN0YXJ0cm93CisjaWZkZWYgRkVBVF9ESUZGCisJCQkgICAgKyBmaWxsZXJfbGluZXMKKyNlbmRpZgorCQkJICAgICkKKwkJICAgIHsKKwkJCXNwcmludGYoKGNoYXIgKilleHRyYSwgIiU3bGQgIiwgKGxvbmcpbG51bSk7CisJCQlpZiAod3AtPndfc2tpcGNvbCA+IDApCisJCQkgICAgZm9yIChwX2V4dHJhID0gZXh0cmE7ICpwX2V4dHJhID09ICcgJzsgKytwX2V4dHJhKQorCQkJCSpwX2V4dHJhID0gJy0nOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCQlpZiAod3AtPndfcF9ybCkJCSAgICAvKiByZXZlcnNlIGxpbmUgbnVtYmVycyAqLworCQkJICAgIHJsX21pcnJvcihleHRyYSk7CisjZW5kaWYKKwkJCXBfZXh0cmEgPSBleHRyYTsKKwkJCWNfZXh0cmEgPSBOVUw7CisJCSAgICB9CisJCSAgICBlbHNlCisJCQljX2V4dHJhID0gJyAnOworCQkgICAgbl9leHRyYSA9IDg7CisJCSAgICBjaGFyX2F0dHIgPSBobF9hdHRyKEhMRl9OKTsKKwkJfQorCSAgICB9CisKKyNpZiBkZWZpbmVkKEZFQVRfTElORUJSRUFLKSB8fCBkZWZpbmVkKEZFQVRfRElGRikKKwkgICAgaWYgKGRyYXdfc3RhdGUgPT0gV0xfU0JSIC0gMSAmJiBuX2V4dHJhID09IDApCisJICAgIHsKKwkJZHJhd19zdGF0ZSA9IFdMX1NCUjsKKyMgaWZkZWYgRkVBVF9ESUZGCisJCWlmIChmaWxsZXJfdG9kbyA+IDApCisJCXsKKwkJICAgIC8qIERyYXcgImRlbGV0ZWQiIGRpZmYgbGluZShzKS4gKi8KKwkJICAgIGlmIChjaGFyMmNlbGxzKGZpbGxfZGlmZikgPiAxKQorCQkJY19leHRyYSA9ICctJzsKKwkJICAgIGVsc2UKKwkJCWNfZXh0cmEgPSBmaWxsX2RpZmY7CisjICBpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkgICAgaWYgKHdwLT53X3BfcmwpCisJCQluX2V4dHJhID0gY29sICsgMTsKKwkJICAgIGVsc2UKKyMgIGVuZGlmCisJCQluX2V4dHJhID0gV19XSURUSCh3cCkgLSBjb2w7CisJCSAgICBjaGFyX2F0dHIgPSBobF9hdHRyKEhMRl9ERUQpOworCQl9CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTElORUJSRUFLCisJCWlmICgqcF9zYnIgIT0gTlVMICYmIG5lZWRfc2hvd2JyZWFrKQorCQl7CisJCSAgICAvKiBEcmF3ICdzaG93YnJlYWsnIGF0IHRoZSBzdGFydCBvZiBlYWNoIGJyb2tlbiBsaW5lLiAqLworCQkgICAgcF9leHRyYSA9IHBfc2JyOworCQkgICAgY19leHRyYSA9IE5VTDsKKwkJICAgIG5fZXh0cmEgPSAoaW50KVNUUkxFTihwX3Nicik7CisJCSAgICBjaGFyX2F0dHIgPSBobF9hdHRyKEhMRl9BVCk7CisJCSAgICBuZWVkX3Nob3dicmVhayA9IEZBTFNFOworCQkgICAgLyogQ29ycmVjdCBlbmQgb2YgaGlnaGxpZ2h0ZWQgYXJlYSBmb3IgJ3Nob3dicmVhaycsCisJCSAgICAgKiByZXF1aXJlZCB3aGVuICdsaW5lYnJlYWsnIGlzIGFsc28gc2V0LiAqLworCQkgICAgaWYgKHRvY29sID09IHZjb2wpCisJCQl0b2NvbCArPSBuX2V4dHJhOworCQl9CisjIGVuZGlmCisJICAgIH0KKyNlbmRpZgorCisJICAgIGlmIChkcmF3X3N0YXRlID09IFdMX0xJTkUgLSAxICYmIG5fZXh0cmEgPT0gMCkKKwkgICAgeworCQlkcmF3X3N0YXRlID0gV0xfTElORTsKKwkJaWYgKHNhdmVkX25fZXh0cmEpCisJCXsKKwkJICAgIC8qIENvbnRpbnVlIGl0ZW0gZnJvbSBlbmQgb2Ygd3JhcHBlZCBsaW5lLiAqLworCQkgICAgbl9leHRyYSA9IHNhdmVkX25fZXh0cmE7CisJCSAgICBjX2V4dHJhID0gc2F2ZWRfY19leHRyYTsKKwkJICAgIHBfZXh0cmEgPSBzYXZlZF9wX2V4dHJhOworCQkgICAgY2hhcl9hdHRyID0gc2F2ZWRfY2hhcl9hdHRyOworCQl9CisJCWVsc2UKKwkJICAgIGNoYXJfYXR0ciA9IDA7CisJICAgIH0KKwl9CisKKwkvKiBXaGVuIHN0aWxsIGRpc3BsYXlpbmcgJyQnIG9mIGNoYW5nZSBjb21tYW5kLCBzdG9wIGF0IGN1cnNvciAqLworCWlmIChkb2xsYXJfdmNvbCAhPSAwICYmIHdwID09IGN1cndpbiAmJiB2Y29sID49IChsb25nKXdwLT53X3ZpcnRjb2wKKyNpZmRlZiBGRUFUX0RJRkYKKwkJCQkgICAmJiBmaWxsZXJfdG9kbyA8PSAwCisjZW5kaWYKKwkJKQorCXsKKwkgICAgU0NSRUVOX0xJTkUoc2NyZWVuX3JvdywgV19XSU5DT0wod3ApLCBjb2wsIC0oaW50KVdfV0lEVEgod3ApLAorCQkJCQkJCQkgIHdwLT53X3BfcmwpOworCSAgICAvKiBQcmV0ZW5kIHdlIGhhdmUgZmluaXNoZWQgdXBkYXRpbmcgdGhlIHdpbmRvdy4gKi8KKwkgICAgcm93ID0gd3AtPndfaGVpZ2h0OworCSAgICBicmVhazsKKwl9CisKKwlpZiAoZHJhd19zdGF0ZSA9PSBXTF9MSU5FICYmIGFyZWFfaGlnaGxpZ2h0aW5nKQorCXsKKwkgICAgLyogaGFuZGxlIFZpc3VhbCBvciBtYXRjaCBoaWdobGlnaHRpbmcgaW4gdGhpcyBsaW5lICovCisJICAgIGlmICh2Y29sID09IGZyb21jb2wKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICB8fCAoaGFzX21ieXRlICYmIHZjb2wgKyAxID09IGZyb21jb2wgJiYgbl9leHRyYSA9PSAwCisJCQkmJiAoKm1iX3B0cjJjZWxscykocHRyKSA+IDEpCisjZW5kaWYKKwkJICAgIHx8ICgoaW50KXZjb2xfcHJldiA9PSBmcm9tY29sX3ByZXYKKwkJCSYmIHZjb2wgPCB0b2NvbCkpCisJCWFyZWFfYXR0ciA9IGF0dHI7CQkvKiBzdGFydCBoaWdobGlnaHRpbmcgKi8KKwkgICAgZWxzZSBpZiAoYXJlYV9hdHRyICE9IDAKKwkJICAgICYmICh2Y29sID09IHRvY29sCisJCQl8fCAobm9pbnZjdXIgJiYgKGNvbG5yX1QpdmNvbCA9PSB3cC0+d192aXJ0Y29sKSkpCisjaWZkZWYgTElORV9BVFRSCisJCWFyZWFfYXR0ciA9IGxpbmVfYXR0cjsJCS8qIHN0b3AgaGlnaGxpZ2h0aW5nICovCisJICAgIGVsc2UgaWYgKGxpbmVfYXR0ciAmJiAoKGZyb21jb2wgPT0gLTEwICYmIHRvY29sID09IE1BWENPTCkKKwkJCQkJIHx8ICh2Y29sIDwgZnJvbWNvbCB8fCB2Y29sID4gdG9jb2wpKSkKKwkJYXJlYV9hdHRyID0gbGluZV9hdHRyOworI2Vsc2UKKwkJYXJlYV9hdHRyID0gMDsJCQkvKiBzdG9wIGhpZ2hsaWdodGluZyAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorCSAgICBpZiAoIW5fZXh0cmEpCisJICAgIHsKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHN0YXJ0L2VuZCBvZiBzZWFyY2ggcGF0dGVybiBtYXRjaC4KKwkJICogQWZ0ZXIgZW5kLCBjaGVjayBmb3Igc3RhcnQvZW5kIG9mIG5leHQgbWF0Y2guCisJCSAqIFdoZW4gYW5vdGhlciBtYXRjaCwgaGF2ZSB0byBjaGVjayBmb3Igc3RhcnQgYWdhaW4uCisJCSAqIFdhdGNoIG91dCBmb3IgbWF0Y2hpbmcgYW4gZW1wdHkgc3RyaW5nIQorCQkgKiBEbyB0aGlzIGZpcnN0IGZvciBzZWFyY2hfaGwsIHRoZW4gZm9yIG1hdGNoX2hsLCBzbyB0aGF0CisJCSAqICI6bWF0Y2giIG92ZXJydWxlcyAnaGxzZWFyY2gnLgorCQkgKi8KKwkJc2hsID0gJnNlYXJjaF9obDsKKwkJZm9yICg7OykKKwkJeworCQkgICAgd2hpbGUgKHNobC0+cm0ucmVncHJvZyAhPSBOVUxMKQorCQkgICAgeworCQkJaWYgKHNobC0+c3RhcnRwICE9IE5VTEwKKwkJCQkmJiBwdHIgPj0gc2hsLT5zdGFydHAKKwkJCQkmJiBwdHIgPCBzaGwtPmVuZHApCisJCQl7CisJCQkgICAgc2hsLT5hdHRyX2N1ciA9IHNobC0+YXR0cjsKKwkJCX0KKwkJCWVsc2UgaWYgKHB0ciA9PSBzaGwtPmVuZHApCisJCQl7CisJCQkgICAgc2hsLT5hdHRyX2N1ciA9IDA7CisKKwkJCSAgICB2ID0gKGxvbmcpKHB0ciAtIGxpbmUpOworCQkJICAgIG5leHRfc2VhcmNoX2hsKHdwLCBzaGwsIGxudW0sIChjb2xucl9UKXYpOworCisJCQkgICAgLyogTmVlZCB0byBnZXQgdGhlIGxpbmUgYWdhaW4sIGEgbXVsdGktbGluZSByZWdleHAKKwkJCSAgICAgKiBtYXkgaGF2ZSBtYWRlIGl0IGludmFsaWQuICovCisJCQkgICAgbGluZSA9IG1sX2dldF9idWYod3AtPndfYnVmZmVyLCBsbnVtLCBGQUxTRSk7CisJCQkgICAgcHRyID0gbGluZSArIHY7CisKKwkJCSAgICBpZiAoc2hsLT5sbnVtID09IGxudW0pCisJCQkgICAgeworCQkJCXNobC0+c3RhcnRwID0gbGluZSArIHNobC0+cm0uc3RhcnRwb3NbMF0uY29sOworCQkJCWlmIChzaGwtPnJtLmVuZHBvc1swXS5sbnVtID09IDApCisJCQkJICAgIHNobC0+ZW5kcCA9IGxpbmUgKyBzaGwtPnJtLmVuZHBvc1swXS5jb2w7CisJCQkJZWxzZQorCQkJCSAgICBzaGwtPmVuZHAgPSBsaW5lICsgTUFYQ09MOworCisJCQkJaWYgKHNobC0+c3RhcnRwID09IHNobC0+ZW5kcCkKKwkJCQl7CisJCQkJICAgIC8qIGhpZ2hsaWdodCBlbXB0eSBtYXRjaCwgdHJ5IGFnYWluIGFmdGVyCisJCQkJICAgICAqIGl0ICovCisjaWZkZWYgRkVBVF9NQllURQorCQkJCSAgICBpZiAoaGFzX21ieXRlKQorCQkJCQlzaGwtPmVuZHAgKz0KKwkJCQkJICAgICAgICgqbWJfcHRyMmxlbl9jaGVjaykoc2hsLT5lbmRwKTsKKwkJCQkgICAgZWxzZQorI2VuZGlmCisJCQkJCSsrc2hsLT5lbmRwOworCQkJCX0KKworCQkJCS8qIExvb3AgdG8gY2hlY2sgaWYgdGhlIG1hdGNoIHN0YXJ0cyBhdCB0aGUKKwkJCQkgKiBjdXJyZW50IHBvc2l0aW9uICovCisJCQkJY29udGludWU7CisJCQkgICAgfQorCQkJfQorCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBpZiAoc2hsID09ICZtYXRjaF9obCkKKwkJCWJyZWFrOworCQkgICAgc2hsID0gJm1hdGNoX2hsOworCQl9CisJCS8qICI6bWF0Y2giIGhpZ2hsaWdodGluZyBvdmVycnVsZXMgJ2hsc2VhcmNoJyAqLworCQlpZiAobWF0Y2hfaGwuYXR0cl9jdXIgIT0gMCkKKwkJICAgIHNlYXJjaF9hdHRyID0gbWF0Y2hfaGwuYXR0cl9jdXI7CisJCWVsc2UKKwkJICAgIHNlYXJjaF9hdHRyID0gc2VhcmNoX2hsLmF0dHJfY3VyOworCSAgICB9CisjZW5kaWYKKworCSAgICBpZiAoYXJlYV9hdHRyICE9IDApCisJCWNoYXJfYXR0ciA9IGFyZWFfYXR0cjsKKyNpZmRlZiBGRUFUX1NZTl9ITAorCSAgICBlbHNlIGlmIChzZWFyY2hfYXR0ciA9PSAwICYmIGhhc19zeW50YXgpCisJCWNoYXJfYXR0ciA9IHN5bnRheF9hdHRyOworI2VuZGlmCisJICAgIGVsc2UKKwkJY2hhcl9hdHRyID0gc2VhcmNoX2F0dHI7CisKKyNpZmRlZiBGRUFUX0RJRkYKKwkgICAgaWYgKGRpZmZfaGxmICE9IChlbnVtIGhsZl92YWx1ZSkwICYmIG5fZXh0cmEgPT0gMCkKKwkgICAgeworCQlpZiAoZGlmZl9obGYgPT0gSExGX0NIRCAmJiBwdHIgLSBsaW5lID49IGNoYW5nZV9zdGFydCkKKwkJICAgIGRpZmZfaGxmID0gSExGX1RYRDsJCS8qIGNoYW5nZWQgdGV4dCAqLworCQlpZiAoZGlmZl9obGYgPT0gSExGX1RYRCAmJiBwdHIgLSBsaW5lID4gY2hhbmdlX2VuZCkKKwkJICAgIGRpZmZfaGxmID0gSExGX0NIRDsJCS8qIGNoYW5nZWQgbGluZSAqLworCQlpZiAoYXR0ciA9PSAwIHx8IGFyZWFfYXR0ciAhPSBhdHRyKQorCQkgICAgYXJlYV9hdHRyID0gaGxfYXR0cihkaWZmX2hsZik7CisJCWlmIChhdHRyID09IDAgfHwgY2hhcl9hdHRyICE9IGF0dHIpCisJCXsKKwkJICAgIGlmIChzZWFyY2hfYXR0ciAhPSAwKQorCQkJY2hhcl9hdHRyID0gc2VhcmNoX2F0dHI7CisJCSAgICBlbHNlCisJCQljaGFyX2F0dHIgPSBobF9hdHRyKGRpZmZfaGxmKTsKKwkJfQorCSAgICB9CisjZW5kaWYKKwl9CisKKwkvKgorCSAqIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gcHV0IG9uIHRoZSBzY3JlZW4uCisJICovCisJLyoKKwkgKiBUaGUgJ2V4dHJhJyBhcnJheSBjb250YWlucyB0aGUgZXh0cmEgc3R1ZmYgdGhhdCBpcyBpbnNlcnRlZCB0bworCSAqIHJlcHJlc2VudCBzcGVjaWFsIGNoYXJhY3RlcnMgKG5vbi1wcmludGFibGUgc3R1ZmYpLiAgV2hlbiBhbGwKKwkgKiBjaGFyYWN0ZXJzIGFyZSB0aGUgc2FtZSwgY19leHRyYSBpcyB1c2VkLgorCSAqIEZvciB0aGUgJyQnIG9mIHRoZSAnbGlzdCcgb3B0aW9uLCBuX2V4dHJhID09IDEsIHBfZXh0cmEgPT0gIiIuCisJICovCisJaWYgKG5fZXh0cmEgPiAwKQorCXsKKwkgICAgaWYgKGNfZXh0cmEgIT0gTlVMKQorCSAgICB7CisJCWMgPSBjX2V4dHJhOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJbWJfYyA9IGM7CS8qIGRvZXNuJ3QgaGFuZGxlIG5vbi11dGYtOCBtdWx0aS1ieXRlISAqLworCQlpZiAoZW5jX3V0ZjggJiYgKCptYl9jaGFyMmxlbikoYykgPiAxKQorCQl7CisJCSAgICBtYl91dGY4ID0gVFJVRTsKKwkJICAgIHU4Y19jMSA9IHU4Y19jMiA9IDA7CisJCX0KKwkJZWxzZQorCQkgICAgbWJfdXRmOCA9IEZBTFNFOworI2VuZGlmCisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWMgPSAqcF9leHRyYTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWlmIChoYXNfbWJ5dGUpCisJCXsKKwkJICAgIG1iX2MgPSBjOworCQkgICAgaWYgKGVuY191dGY4KQorCQkgICAgeworCQkJLyogSWYgdGhlIFVURi04IGNoYXJhY3RlciBpcyBtb3JlIHRoYW4gb25lIGJ5dGU6CisJCQkgKiBEZWNvZGUgaXQgaW50byAibWJfYyIuICovCisJCQltYl9sID0gKCptYl9wdHIybGVuX2NoZWNrKShwX2V4dHJhKTsKKwkJCW1iX3V0ZjggPSBGQUxTRTsKKwkJCWlmIChtYl9sID4gbl9leHRyYSkKKwkJCSAgICBtYl9sID0gMTsKKwkJCWVsc2UgaWYgKG1iX2wgPiAxKQorCQkJeworCQkJICAgIG1iX2MgPSB1dGZjX3B0cjJjaGFyKHBfZXh0cmEsICZ1OGNfYzEsICZ1OGNfYzIpOworCQkJICAgIG1iX3V0ZjggPSBUUlVFOworCQkJfQorCQkgICAgfQorCQkgICAgZWxzZQorCQkgICAgeworCQkJLyogaWYgdGhpcyBpcyBhIERCQ1MgY2hhcmFjdGVyLCBwdXQgaXQgaW4gIm1iX2MiICovCisJCQltYl9sID0gTUJfQllURTJMRU4oYyk7CisJCQlpZiAobWJfbCA+PSBuX2V4dHJhKQorCQkJICAgIG1iX2wgPSAxOworCQkJZWxzZSBpZiAobWJfbCA+IDEpCisJCQkgICAgbWJfYyA9IChjIDw8IDgpICsgcF9leHRyYVsxXTsKKwkJICAgIH0KKwkJICAgIC8qIElmIGEgZG91YmxlLXdpZHRoIGNoYXIgZG9lc24ndCBmaXQgZGlzcGxheSBhICc+JyBpbiB0aGUKKwkJICAgICAqIGxhc3QgY29sdW1uLiAqLworCQkgICAgaWYgKAorIyBpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkJICAgIHdwLT53X3BfcmwgPyAoY29sIDw9IDApIDoKKyMgZW5kaWYKKwkJCQkgICAgKGNvbCA+PSBXX1dJRFRIKHdwKSAtIDEpCisJCQkgICAgJiYgKCptYl9jaGFyMmNlbGxzKShtYl9jKSA9PSAyKQorCQkgICAgeworCQkJYyA9ICc+JzsKKwkJCW1iX2MgPSBjOworCQkJbWJfbCA9IDE7CisJCQltYl91dGY4ID0gRkFMU0U7CisJCQltdWx0aV9hdHRyID0gaGxfYXR0cihITEZfQVQpOworCQkJLyogcHV0IHRoZSBwb2ludGVyIGJhY2sgdG8gb3V0cHV0IHRoZSBkb3VibGUtd2lkdGgKKwkJCSAqIGNoYXJhY3RlciBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgbGluZS4gKi8KKwkJCSsrbl9leHRyYTsKKwkJCS0tcF9leHRyYTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCW5fZXh0cmEgLT0gbWJfbCAtIDE7CisJCQlwX2V4dHJhICs9IG1iX2wgLSAxOworCQkgICAgfQorCQl9CisjZW5kaWYKKwkJKytwX2V4dHJhOworCSAgICB9CisJICAgIC0tbl9leHRyYTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogR2V0IGEgY2hhcmFjdGVyIGZyb20gdGhlIGxpbmUgaXRzZWxmLgorCSAgICAgKi8KKwkgICAgYyA9ICpwdHI7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCSAgICB7CisJCW1iX2MgPSBjOworCQlpZiAoZW5jX3V0ZjgpCisJCXsKKwkJICAgIC8qIElmIHRoZSBVVEYtOCBjaGFyYWN0ZXIgaXMgbW9yZSB0aGFuIG9uZSBieXRlOiBEZWNvZGUgaXQKKwkJICAgICAqIGludG8gIm1iX2MiLiAqLworCQkgICAgbWJfbCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocHRyKTsKKwkJICAgIG1iX3V0ZjggPSBGQUxTRTsKKwkJICAgIGlmIChtYl9sID4gMSkKKwkJICAgIHsKKwkJCW1iX2MgPSB1dGZjX3B0cjJjaGFyKHB0ciwgJnU4Y19jMSwgJnU4Y19jMik7CisJCQkvKiBPdmVybG9uZyBlbmNvZGVkIEFTQ0lJIG9yIEFTQ0lJIHdpdGggY29tcG9zaW5nIGNoYXIKKwkJCSAqIGlzIGRpc3BsYXllZCBub3JtYWxseSwgZXhjZXB0IGEgTlVMLiAqLworCQkJaWYgKG1iX2MgPCAweDgwKQorCQkJICAgIGMgPSBtYl9jOworCQkJbWJfdXRmOCA9IFRSVUU7CisJCSAgICB9CisKKwkJICAgIGlmICgobWJfbCA9PSAxICYmIGMgPj0gMHg4MCkKKwkJCSAgICB8fCAobWJfbCA+PSAxICYmIG1iX2MgPT0gMCkKKwkJCSAgICB8fCAobWJfbCA+IDEgJiYgKCF2aW1faXNwcmludGMobWJfYykKKwkJCQkJCQkgfHwgbWJfYyA+PSAweDEwMDAwKSkpCisJCSAgICB7CisJCQkvKgorCQkJICogSWxsZWdhbCBVVEYtOCBieXRlOiBkaXNwbGF5IGFzIDx4eD4uCisJCQkgKiBOb24tQk1QIGNoYXJhY3RlciA6IGRpc3BsYXkgYXMgPyBvciBmdWxsd2lkdGggPy4KKwkJCSAqLworCQkJaWYgKG1iX2MgPCAweDEwMDAwKQorCQkJeworCQkJICAgIHRyYW5zY2hhcl9oZXgoZXh0cmEsIG1iX2MpOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCQkgICAgaWYgKHdwLT53X3BfcmwpCQkvKiByZXZlcnNlICovCisJCQkJcmxfbWlycm9yKGV4dHJhKTsKKyNlbmRpZgorCQkJfQorCQkJZWxzZSBpZiAodXRmX2NoYXIyY2VsbHMobWJfYykgIT0gMikKKwkJCSAgICBTVFJDUFkoZXh0cmEsICI/Iik7CisJCQllbHNlCisJCQkgICAgLyogMHhmZjFmIGluIFVURi04OiBmdWxsLXdpZHRoICc/JyAqLworCQkJICAgIFNUUkNQWShleHRyYSwgIlwzNTdcMjc0XDIzNyIpOworCisJCQlwX2V4dHJhID0gZXh0cmE7CisJCQljID0gKnBfZXh0cmE7CisJCQltYl9jID0gbWJfcHRyMmNoYXJfYWR2KCZwX2V4dHJhKTsKKwkJCW1iX3V0ZjggPSAoYyA+PSAweDgwKTsKKwkJCW5fZXh0cmEgPSAoaW50KVNUUkxFTihwX2V4dHJhKTsKKwkJCWNfZXh0cmEgPSBOVUw7CisJCQlpZiAoYXJlYV9hdHRyID09IDAgJiYgc2VhcmNoX2F0dHIgPT0gMCkKKwkJCXsKKwkJCSAgICBuX2F0dHIgPSBuX2V4dHJhICsgMTsKKwkJCSAgICBleHRyYV9hdHRyID0gaGxfYXR0cihITEZfOCk7CisJCQkgICAgc2F2ZWRfYXR0cjIgPSBjaGFyX2F0dHI7IC8qIHNhdmUgY3VycmVudCBhdHRyICovCisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChtYl9sID09IDApICAvKiBhdCB0aGUgTlVMIGF0IGVuZC1vZi1saW5lICovCisJCQltYl9sID0gMTsKKyNpZmRlZiBGRUFUX0FSQUJJQworCQkgICAgZWxzZSBpZiAocF9hcnNoYXBlICYmICFwX3RiaWRpICYmIEFSQUJJQ19DSEFSKG1iX2MpKQorCQkgICAgeworCQkJLyogRG8gQXJhYmljIHNoYXBpbmcuICovCisJCQlpbnQJcGMsIHBjMSwgbmMsIGR1bW15OworCisJCQkvKiBUaGUgaWRlYSBvZiB3aGF0IGlzIHRoZSBwcmV2aW91cyBhbmQgbmV4dAorCQkJICogY2hhcmFjdGVyIGRlcGVuZHMgb24gJ3JpZ2h0bGVmdCcuICovCisJCQlpZiAod3AtPndfcF9ybCkKKwkJCXsKKwkJCSAgICBwYyA9IHByZXZfYzsKKwkJCSAgICBwYzEgPSBwcmV2X2MxOworCQkJICAgIG5jID0gdXRmX3B0cjJjaGFyKHB0ciArIG1iX2wpOworCQkJICAgIHByZXZfYzEgPSB1OGNfYzE7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkgICAgcGMgPSB1dGZjX3B0cjJjaGFyKHB0ciArIG1iX2wsICZwYzEsICZkdW1teSk7CisJCQkgICAgbmMgPSBwcmV2X2M7CisJCQl9CisJCQlwcmV2X2MgPSBtYl9jOworCisJCQltYl9jID0gYXJhYmljX3NoYXBlKG1iX2MsICZjLCAmdThjX2MxLCBwYywgcGMxLCBuYyk7CisJCSAgICB9CisJCSAgICBlbHNlCisJCQlwcmV2X2MgPSBtYl9jOworI2VuZGlmCisJCX0KKwkJZWxzZQkvKiBlbmNfZGJjcyAqLworCQl7CisJCSAgICBtYl9sID0gTUJfQllURTJMRU4oYyk7CisJCSAgICBpZiAobWJfbCA9PSAwKSAgLyogYXQgdGhlIE5VTCBhdCBlbmQtb2YtbGluZSAqLworCQkJbWJfbCA9IDE7CisJCSAgICBlbHNlIGlmIChtYl9sID4gMSkKKwkJICAgIHsKKwkJCS8qIFdlIGFzc3VtZSBhIHNlY29uZCBieXRlIGJlbG93IDMyIGlzIGlsbGVnYWwuCisJCQkgKiBIb3BlZnVsbHkgdGhpcyBpcyBPSyBmb3IgYWxsIGRvdWJsZS1ieXRlIGVuY29kaW5ncyEKKwkJCSAqLworCQkJaWYgKHB0clsxXSA+PSAzMikKKwkJCSAgICBtYl9jID0gKGMgPDwgOCkgKyBwdHJbMV07CisJCQllbHNlCisJCQl7CisJCQkgICAgaWYgKHB0clsxXSA9PSBOVUwpCisJCQkgICAgeworCQkJCS8qIGhlYWQgYnl0ZSBhdCBlbmQgb2YgbGluZSAqLworCQkJCW1iX2wgPSAxOworCQkJCXRyYW5zY2hhcl9ub25wcmludChleHRyYSwgYyk7CisJCQkgICAgfQorCQkJICAgIGVsc2UKKwkJCSAgICB7CisJCQkJLyogaWxsZWdhbCB0YWlsIGJ5dGUgKi8KKwkJCQltYl9sID0gMjsKKwkJCQlTVFJDUFkoZXh0cmEsICJYWCIpOworCQkJICAgIH0KKwkJCSAgICBwX2V4dHJhID0gZXh0cmE7CisJCQkgICAgbl9leHRyYSA9IChpbnQpU1RSTEVOKGV4dHJhKSAtIDE7CisJCQkgICAgY19leHRyYSA9IE5VTDsKKwkJCSAgICBjID0gKnBfZXh0cmErKzsKKwkJCSAgICBpZiAoYXJlYV9hdHRyID09IDAgJiYgc2VhcmNoX2F0dHIgPT0gMCkKKwkJCSAgICB7CisJCQkJbl9hdHRyID0gbl9leHRyYSArIDE7CisJCQkJZXh0cmFfYXR0ciA9IGhsX2F0dHIoSExGXzgpOworCQkJCXNhdmVkX2F0dHIyID0gY2hhcl9hdHRyOyAvKiBzYXZlIGN1cnJlbnQgYXR0ciAqLworCQkJICAgIH0KKwkJCSAgICBtYl9jID0gYzsKKwkJCX0KKwkJICAgIH0KKwkJfQorCQkvKiBJZiBhIGRvdWJsZS13aWR0aCBjaGFyIGRvZXNuJ3QgZml0IGRpc3BsYXkgYSAnPicgaW4gdGhlCisJCSAqIGxhc3QgY29sdW1uOyB0aGUgY2hhcmFjdGVyIGlzIGRpc3BsYXllZCBhdCB0aGUgc3RhcnQgb2YgdGhlCisJCSAqIG5leHQgbGluZS4gKi8KKwkJaWYgKCgKKyMgaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJCSAgICB3cC0+d19wX3JsID8gKGNvbCA8PSAwKSA6CisjIGVuZGlmCisJCQkJKGNvbCA+PSBXX1dJRFRIKHdwKSAtIDEpKQorCQkJJiYgKCptYl9jaGFyMmNlbGxzKShtYl9jKSA9PSAyKQorCQl7CisJCSAgICBjID0gJz4nOworCQkgICAgbWJfYyA9IGM7CisJCSAgICBtYl91dGY4ID0gRkFMU0U7CisJCSAgICBtYl9sID0gMTsKKwkJICAgIG11bHRpX2F0dHIgPSBobF9hdHRyKEhMRl9BVCk7CisJCSAgICAvKiBQdXQgcG9pbnRlciBiYWNrIHNvIHRoYXQgdGhlIGNoYXJhY3RlciB3aWxsIGJlCisJCSAgICAgKiBkaXNwbGF5ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGxpbmUuICovCisJCSAgICAtLXB0cjsKKwkJfQorCQllbHNlIGlmICgqcHRyICE9IE5VTCkKKwkJICAgIHB0ciArPSBtYl9sIC0gMTsKKworCQkvKiBJZiBhIGRvdWJsZS13aWR0aCBjaGFyIGRvZXNuJ3QgZml0IGF0IHRoZSBsZWZ0IHNpZGUgZGlzcGxheQorCQkgKiBhICc8JyBpbiB0aGUgZmlyc3QgY29sdW1uLiAqLworCQlpZiAobl9za2lwID4gMCAmJiBtYl9sID4gMSkKKwkJeworCQkgICAgZXh0cmFbMF0gPSAnPCc7CisJCSAgICBwX2V4dHJhID0gZXh0cmE7CisJCSAgICBuX2V4dHJhID0gMTsKKwkJICAgIGNfZXh0cmEgPSBOVUw7CisJCSAgICBjID0gJyAnOworCQkgICAgaWYgKGFyZWFfYXR0ciA9PSAwICYmIHNlYXJjaF9hdHRyID09IDApCisJCSAgICB7CisJCQluX2F0dHIgPSBuX2V4dHJhICsgMTsKKwkJCWV4dHJhX2F0dHIgPSBobF9hdHRyKEhMRl9BVCk7CisJCQlzYXZlZF9hdHRyMiA9IGNoYXJfYXR0cjsgLyogc2F2ZSBjdXJyZW50IGF0dHIgKi8KKwkJICAgIH0KKwkJICAgIG1iX2MgPSBjOworCQkgICAgbWJfdXRmOCA9IEZBTFNFOworCQkgICAgbWJfbCA9IDE7CisJCX0KKworCSAgICB9CisjZW5kaWYKKwkgICAgKytwdHI7CisKKwkgICAgaWYgKGV4dHJhX2NoZWNrKQorCSAgICB7CisjaWZkZWYgRkVBVF9TWU5fSEwKKwkJLyogR2V0IHN5bnRheCBhdHRyaWJ1dGUsIHVubGVzcyBzdGlsbCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUKKwkJICogKGRvdWJsZS13aWRlIGNoYXIgdGhhdCBkb2Vzbid0IGZpdCkuICovCisJCWlmIChoYXNfc3ludGF4ICYmICh2ID0gKGxvbmcpKHB0ciAtIGxpbmUpKSA+IDApCisJCXsKKwkJICAgIC8qIEdldCB0aGUgc3ludGF4IGF0dHJpYnV0ZSBmb3IgdGhlIGNoYXJhY3Rlci4gIElmIHRoZXJlCisJCSAgICAgKiBpcyBhbiBlcnJvciwgZGlzYWJsZSBzeW50YXggaGlnaGxpZ2h0aW5nLiAqLworCQkgICAgc2F2ZV9kaWRfZW1zZyA9IGRpZF9lbXNnOworCQkgICAgZGlkX2Vtc2cgPSBGQUxTRTsKKworCQkgICAgc3ludGF4X2F0dHIgPSBnZXRfc3ludGF4X2F0dHIoKGNvbG5yX1QpdiAtIDEpOworCisJCSAgICBpZiAoZGlkX2Vtc2cpCisJCQlzeW50YXhfY2xlYXIod3AtPndfYnVmZmVyKTsKKwkJICAgIGVsc2UKKwkJCWRpZF9lbXNnID0gc2F2ZV9kaWRfZW1zZzsKKworCQkgICAgLyogTmVlZCB0byBnZXQgdGhlIGxpbmUgYWdhaW4sIGEgbXVsdGktbGluZSByZWdleHAgbWF5CisJCSAgICAgKiBoYXZlIG1hZGUgaXQgaW52YWxpZC4gKi8KKwkJICAgIGxpbmUgPSBtbF9nZXRfYnVmKHdwLT53X2J1ZmZlciwgbG51bSwgRkFMU0UpOworCQkgICAgcHRyID0gbGluZSArIHY7CisKKwkJICAgIGlmIChhcmVhX2F0dHIgPT0gMCAmJiBzZWFyY2hfYXR0ciA9PSAwKQorCQkJY2hhcl9hdHRyID0gc3ludGF4X2F0dHI7CisJCX0KKyNlbmRpZgorI2lmZGVmIEZFQVRfTElORUJSRUFLCisJCS8qCisJCSAqIEZvdW5kIGxhc3Qgc3BhY2UgYmVmb3JlIHdvcmQ6IGNoZWNrIGZvciBsaW5lIGJyZWFrCisJCSAqLworCQlpZiAod3AtPndfcF9sYnIgJiYgdmltX2lzYnJlYWsoYykgJiYgIXZpbV9pc2JyZWFrKCpwdHIpCisJCQkJCQkgICAgICAmJiAhd3AtPndfcF9saXN0KQorCQl7CisJCSAgICBuX2V4dHJhID0gd2luX2xicl9jaGFydGFic2l6ZSh3cCwgcHRyIC0gKAorIyBpZmRlZiBGRUFUX01CWVRFCisJCQkJaGFzX21ieXRlID8gbWJfbCA6CisjIGVuZGlmCisJCQkJMSksIChjb2xucl9UKXZjb2wsIE5VTEwpIC0gMTsKKwkJICAgIGNfZXh0cmEgPSAnICc7CisJCSAgICBpZiAodmltX2lzd2hpdGUoYykpCisJCQljID0gJyAnOworCQl9CisjZW5kaWYKKworCQlpZiAodHJhaWxjb2wgIT0gTUFYQ09MICYmIHB0ciA+IGxpbmUgKyB0cmFpbGNvbCAmJiBjID09ICcgJykKKwkJeworCQkgICAgYyA9IGxjc190cmFpbDsKKwkJICAgIGlmIChhcmVhX2F0dHIgPT0gMCAmJiBzZWFyY2hfYXR0ciA9PSAwKQorCQkgICAgeworCQkJbl9hdHRyID0gMTsKKwkJCWV4dHJhX2F0dHIgPSBobF9hdHRyKEhMRl84KTsKKwkJCXNhdmVkX2F0dHIyID0gY2hhcl9hdHRyOyAvKiBzYXZlIGN1cnJlbnQgYXR0ciAqLworCQkgICAgfQorI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIG1iX2MgPSBjOworCQkgICAgaWYgKGVuY191dGY4ICYmICgqbWJfY2hhcjJsZW4pKGMpID4gMSkKKwkJICAgIHsKKwkJCW1iX3V0ZjggPSBUUlVFOworCQkJdThjX2MxID0gdThjX2MyID0gMDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCW1iX3V0ZjggPSBGQUxTRTsKKyNlbmRpZgorCQl9CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBIYW5kbGluZyBvZiBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMuCisJICAgICAqLworCSAgICBpZiAoIShjaGFydGFiW2NdICYgQ1RfUFJJTlRfQ0hBUikpCisJICAgIHsKKwkJLyoKKwkJICogd2hlbiBnZXR0aW5nIGEgY2hhcmFjdGVyIGZyb20gdGhlIGZpbGUsIHdlIG1heSBoYXZlIHRvCisJCSAqIHR1cm4gaXQgaW50byBzb21ldGhpbmcgZWxzZSBvbiB0aGUgd2F5IHRvIHB1dHRpbmcgaXQKKwkJICogaW50byAiU2NyZWVuTGluZXMiLgorCQkgKi8KKwkJaWYgKGMgPT0gVEFCICYmICghd3AtPndfcF9saXN0IHx8IGxjc190YWIxKSkKKwkJeworCQkgICAgLyogdGFiIGFtb3VudCBkZXBlbmRzIG9uIGN1cnJlbnQgY29sdW1uICovCisJCSAgICBuX2V4dHJhID0gKGludCl3cC0+d19idWZmZXItPmJfcF90cworCQkJCSAgIC0gdmNvbCAlIChpbnQpd3AtPndfYnVmZmVyLT5iX3BfdHMgLSAxOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIG1iX3V0ZjggPSBGQUxTRTsJLyogZG9uJ3QgZHJhdyBhcyBVVEYtOCAqLworI2VuZGlmCisJCSAgICBpZiAod3AtPndfcF9saXN0KQorCQkgICAgeworCQkJYyA9IGxjc190YWIxOworCQkJY19leHRyYSA9IGxjc190YWIyOworCQkJbl9hdHRyID0gbl9leHRyYSArIDE7CisJCQlleHRyYV9hdHRyID0gaGxfYXR0cihITEZfOCk7CisJCQlzYXZlZF9hdHRyMiA9IGNoYXJfYXR0cjsgLyogc2F2ZSBjdXJyZW50IGF0dHIgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisJCQltYl9jID0gYzsKKwkJCWlmIChlbmNfdXRmOCAmJiAoKm1iX2NoYXIybGVuKShjKSA+IDEpCisJCQl7CisJCQkgICAgbWJfdXRmOCA9IFRSVUU7CisJCQkgICAgdThjX2MxID0gdThjX2MyID0gMDsKKwkJCX0KKyNlbmRpZgorCQkgICAgfQorCQkgICAgZWxzZQorCQkgICAgeworCQkJY19leHRyYSA9ICcgJzsKKwkJCWMgPSAnICc7CisJCSAgICB9CisJCX0KKwkJZWxzZSBpZiAoYyA9PSBOVUwgJiYgd3AtPndfcF9saXN0ICYmIGxjc19lb2xfb25lID4gMCkKKwkJeworI2lmIGRlZmluZWQoRkVBVF9ESUZGKSB8fCBkZWZpbmVkKExJTkVfQVRUUikKKwkJICAgIC8qIEZvciBhIGRpZmYgbGluZSB0aGUgaGlnaGxpZ2h0aW5nIGNvbnRpbnVlcyBhZnRlciB0aGUKKwkJICAgICAqICIkIi4gKi8KKwkJICAgIGlmICgKKyMgaWZkZWYgRkVBVF9ESUZGCisJCQkgICAgZGlmZl9obGYgPT0gKGVudW0gaGxmX3ZhbHVlKTAKKyMgIGlmZGVmIExJTkVfQVRUUgorCQkJICAgICYmCisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBMSU5FX0FUVFIKKwkJCSAgICBsaW5lX2F0dHIgPT0gMAorIyBlbmRpZgorCQkgICAgICAgKQorI2VuZGlmCisJCSAgICB7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCQkJLyogSW4gdmlydHVhbGVkaXQsIHZpc3VhbCBzZWxlY3Rpb25zIG1heSBleHRlbmQKKwkJCSAqIGJleW9uZCBlbmQgb2YgbGluZS4gKi8KKwkJCWlmIChhcmVhX2hpZ2hsaWdodGluZyAmJiB2aXJ0dWFsX2FjdGl2ZSgpCisJCQkJJiYgdG9jb2wgIT0gTUFYQ09MICYmIHZjb2wgPCB0b2NvbCkKKwkJCSAgICBuX2V4dHJhID0gMDsKKwkJCWVsc2UKKyNlbmRpZgorCQkJeworCQkJICAgIHBfZXh0cmEgPSBhdF9lbmRfc3RyOworCQkJICAgIG5fZXh0cmEgPSAxOworCQkJICAgIGNfZXh0cmEgPSBOVUw7CisJCQl9CisJCSAgICB9CisJCSAgICBjID0gbGNzX2VvbDsKKwkJICAgIGxjc19lb2xfb25lID0gLTE7CisJCSAgICAtLXB0cjsJICAgIC8qIHB1dCBpdCBiYWNrIGF0IHRoZSBOVUwgKi8KKwkJICAgIGlmIChhcmVhX2F0dHIgPT0gMCAmJiBzZWFyY2hfYXR0ciA9PSAwKQorCQkgICAgeworCQkJZXh0cmFfYXR0ciA9IGhsX2F0dHIoSExGX0FUKTsKKwkJCW5fYXR0ciA9IDE7CisJCSAgICB9CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgbWJfYyA9IGM7CisJCSAgICBpZiAoZW5jX3V0ZjggJiYgKCptYl9jaGFyMmxlbikoYykgPiAxKQorCQkgICAgeworCQkJbWJfdXRmOCA9IFRSVUU7CisJCQl1OGNfYzEgPSB1OGNfYzIgPSAwOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJbWJfdXRmOCA9IEZBTFNFOwkvKiBkb24ndCBkcmF3IGFzIFVURi04ICovCisjZW5kaWYKKwkJfQorCQllbHNlIGlmIChjICE9IE5VTCkKKwkJeworCQkgICAgcF9leHRyYSA9IHRyYW5zY2hhcihjKTsKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkgICAgaWYgKChkeV9mbGFncyAmIERZX1VIRVgpICYmIHdwLT53X3BfcmwpCisJCQlybF9taXJyb3IocF9leHRyYSk7CS8qIHJldmVyc2UgIjwxMj4iICovCisjZW5kaWYKKwkJICAgIG5fZXh0cmEgPSBieXRlMmNlbGxzKGMpIC0gMTsKKwkJICAgIGNfZXh0cmEgPSBOVUw7CisJCSAgICBjID0gKnBfZXh0cmErKzsKKwkJICAgIGlmIChhcmVhX2F0dHIgPT0gMCAmJiBzZWFyY2hfYXR0ciA9PSAwKQorCQkgICAgeworCQkJbl9hdHRyID0gbl9leHRyYSArIDE7CisJCQlleHRyYV9hdHRyID0gaGxfYXR0cihITEZfOCk7CisJCQlzYXZlZF9hdHRyMiA9IGNoYXJfYXR0cjsgLyogc2F2ZSBjdXJyZW50IGF0dHIgKi8KKwkJICAgIH0KKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBtYl91dGY4ID0gRkFMU0U7CS8qIGRvbid0IGRyYXcgYXMgVVRGLTggKi8KKyNlbmRpZgorCQl9CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCQllbHNlIGlmIChWSXN1YWxfYWN0aXZlCisJCQkgJiYgKFZJc3VhbF9tb2RlID09IEN0cmxfVgorCQkJICAgICB8fCBWSXN1YWxfbW9kZSA9PSAndicpCisJCQkgJiYgdmlydHVhbF9hY3RpdmUoKQorCQkJICYmIHRvY29sICE9IE1BWENPTAorCQkJICYmIHZjb2wgPCB0b2NvbAorCQkJICYmICgKKyMgaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJCSAgICB3cC0+d19wX3JsID8gKGNvbCA+PSAwKSA6CisjIGVuZGlmCisJCQkgICAgKGNvbCA8IFdfV0lEVEgod3ApKSkpCisJCXsKKwkJICAgIGMgPSAnICc7CisJCSAgICAtLXB0cjsJICAgIC8qIHB1dCBpdCBiYWNrIGF0IHRoZSBOVUwgKi8KKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0RJRkYpIHx8IGRlZmluZWQoTElORV9BVFRSKQorCQllbHNlIGlmICgoCisjIGlmZGVmIEZFQVRfRElGRgorCQkJICAgIGRpZmZfaGxmICE9IChlbnVtIGhsZl92YWx1ZSkwCisjICBpZmRlZiBMSU5FX0FUVFIKKwkJCSAgICB8fAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgTElORV9BVFRSCisJCQkgICAgbGluZV9hdHRyICE9IDAKKyMgZW5kaWYKKwkJCSkgJiYgKAorIyBpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkJICAgIHdwLT53X3BfcmwgPyAoY29sID49IDApIDoKKyMgZW5kaWYKKwkJCSAgICAoY29sIDwgV19XSURUSCh3cCkpKSkKKwkJeworCQkgICAgLyogSGlnaGxpZ2h0IHVudGlsIHRoZSByaWdodCBzaWRlIG9mIHRoZSB3aW5kb3cgKi8KKwkJICAgIGMgPSAnICc7CisJCSAgICAtLXB0cjsJICAgIC8qIHB1dCBpdCBiYWNrIGF0IHRoZSBOVUwgKi8KKyMgaWZkZWYgRkVBVF9ESUZGCisJCSAgICBpZiAoZGlmZl9obGYgPT0gSExGX1RYRCkKKwkJICAgIHsKKwkJCWRpZmZfaGxmID0gSExGX0NIRDsKKwkJCWlmIChhdHRyID09IDAgfHwgY2hhcl9hdHRyICE9IGF0dHIpCisJCQkgICAgY2hhcl9hdHRyID0gaGxfYXR0cihkaWZmX2hsZik7CisJCSAgICB9CisjIGVuZGlmCisJCX0KKyNlbmRpZgorCSAgICB9CisJfQorCisJLyogRG9uJ3Qgb3ZlcnJpZGUgdmlzdWFsIHNlbGVjdGlvbiBoaWdobGlnaHRpbmcuICovCisJaWYgKG5fYXR0ciA+IDAKKwkJJiYgZHJhd19zdGF0ZSA9PSBXTF9MSU5FCisJCSYmIChhcmVhX2F0dHIgPT0gMCB8fCBjaGFyX2F0dHIgIT0gYXJlYV9hdHRyKQorCQkmJiAoc2VhcmNoX2F0dHIgPT0gMCB8fCBjaGFyX2F0dHIgIT0gc2VhcmNoX2F0dHIpKQorCSAgICBjaGFyX2F0dHIgPSBleHRyYV9hdHRyOworCisjaWYgZGVmaW5lZChGRUFUX1hJTSkgJiYgZGVmaW5lZChGRUFUX0dVSV9HVEspCisJLyogWElNIGRvbid0IHNlbmQgcHJlZWRpdF9zdGFydCBhbmQgcHJlZWRpdF9lbmQsIGJ1dCB0aGV5IHNlbmQKKwkgKiBwcmVlZGl0X2NoYW5nZWQgYW5kIGNvbW1pdC4gIFRodXMgVmltIGNhbid0IHNldCAiaW1faXNfYWN0aXZlIiwgdXNlCisJICogaW1faXNfcHJlZWRpdGluZygpIGhlcmUuICovCisJaWYgKHhpYyAhPSBOVUxMCisJCSYmIGxudW0gPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtCisJCSYmIChTdGF0ZSAmIElOU0VSVCkKKwkJJiYgIXBfaW1kaXNhYmxlCisJCSYmIGltX2lzX3ByZWVkaXRpbmcoKQorCQkmJiBkcmF3X3N0YXRlID09IFdMX0xJTkUpCisJeworCSAgICBjb2xucl9UIHRjb2w7CisKKwkgICAgaWYgKHByZWVkaXRfZW5kX2NvbCA9PSBNQVhDT0wpCisJCWdldHZjb2woY3Vyd2luLCAmKGN1cndpbi0+d19jdXJzb3IpLCAmdGNvbCwgTlVMTCwgTlVMTCk7CisJICAgIGVsc2UKKwkJdGNvbCA9IHByZWVkaXRfZW5kX2NvbDsKKwkgICAgaWYgKChsb25nKXByZWVkaXRfc3RhcnRfY29sIDw9IHZjb2wgJiYgdmNvbCA8IChsb25nKXRjb2wpCisJICAgIHsKKwkJaWYgKGZlZWRiYWNrX29sZF9hdHRyIDwgMCkKKwkJeworCQkgICAgZmVlZGJhY2tfY29sID0gMDsKKwkJICAgIGZlZWRiYWNrX29sZF9hdHRyID0gY2hhcl9hdHRyOworCQl9CisJCWNoYXJfYXR0ciA9IGltX2dldF9mZWVkYmFja19hdHRyKGZlZWRiYWNrX2NvbCk7CisJCWlmIChjaGFyX2F0dHIgPCAwKQorCQkgICAgY2hhcl9hdHRyID0gZmVlZGJhY2tfb2xkX2F0dHI7CisJCWZlZWRiYWNrX2NvbCsrOworCSAgICB9CisJICAgIGVsc2UgaWYgKGZlZWRiYWNrX29sZF9hdHRyID49IDApCisJICAgIHsKKwkJY2hhcl9hdHRyID0gZmVlZGJhY2tfb2xkX2F0dHI7CisJCWZlZWRiYWNrX29sZF9hdHRyID0gLTE7CisJCWZlZWRiYWNrX2NvbCA9IDA7CisJICAgIH0KKwl9CisjZW5kaWYKKwkvKgorCSAqIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgaW4gY29sdW1uIDAgYnV0IG5vdCBvbiB0aGUgZmlyc3QKKwkgKiBjaGFyYWN0ZXIgb2YgdGhlIGxpbmUgYW5kIHRoZSB1c2VyIHdhbnRzIHVzIHRvIHNob3cgdXMgYQorCSAqIHNwZWNpYWwgY2hhcmFjdGVyICh2aWEgJ2xpc3RjaGFycycgb3B0aW9uICJwcmVjZWRlczo8Y2hhcj4iLgorCSAqLworCWlmIChsY3NfcHJlY190b2RvICE9IE5VTAorCQkmJiAod3AtPndfcF93cmFwID8gd3AtPndfc2tpcGNvbCA+IDAgOiB3cC0+d19sZWZ0Y29sID4gMCkKKyNpZmRlZiBGRUFUX0RJRkYKKwkJJiYgZmlsbGVyX3RvZG8gPD0gMAorI2VuZGlmCisJCSYmIGRyYXdfc3RhdGUgPiBXTF9OUgorCQkmJiBjICE9IE5VTCkKKwl7CisJICAgIGMgPSBsY3NfcHJlYzsKKwkgICAgbGNzX3ByZWNfdG9kbyA9IE5VTDsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIG1iX2MgPSBjOworCSAgICBpZiAoZW5jX3V0ZjggJiYgKCptYl9jaGFyMmxlbikoYykgPiAxKQorCSAgICB7CisJCW1iX3V0ZjggPSBUUlVFOworCQl1OGNfYzEgPSB1OGNfYzIgPSAwOworCSAgICB9CisJICAgIGVsc2UKKwkJbWJfdXRmOCA9IEZBTFNFOwkvKiBkb24ndCBkcmF3IGFzIFVURi04ICovCisjZW5kaWYKKwkgICAgaWYgKChhcmVhX2F0dHIgPT0gMCB8fCBjaGFyX2F0dHIgIT0gYXJlYV9hdHRyKQorCQkgICAgJiYgKHNlYXJjaF9hdHRyID09IDAgfHwgY2hhcl9hdHRyICE9IHNlYXJjaF9hdHRyKSkKKwkgICAgeworCQlzYXZlZF9hdHRyMyA9IGNoYXJfYXR0cjsgLyogc2F2ZSBjdXJyZW50IGF0dHIgKi8KKwkJY2hhcl9hdHRyID0gaGxfYXR0cihITEZfQVQpOyAvKiBsYXRlciBjb3BpZWQgdG8gY2hhcl9hdHRyICovCisJCW5fYXR0cjMgPSAxOworCSAgICB9CisJfQorCisJLyoKKwkgKiBBdCBlbmQgb2YgdGhlIHRleHQgbGluZS4KKwkgKi8KKwlpZiAoYyA9PSBOVUwpCisJeworCSAgICAvKiBpbnZlcnQgYXQgbGVhc3Qgb25lIGNoYXIsIHVzZWQgZm9yIFZpc3VhbCBhbmQgZW1wdHkgbGluZSBvcgorCSAgICAgKiBoaWdobGlnaHQgbWF0Y2ggYXQgZW5kIG9mIGxpbmUuIElmIGl0J3MgYmV5b25kIHRoZSBsYXN0CisJICAgICAqIGNoYXIgb24gdGhlIHNjcmVlbiwganVzdCBvdmVyd3JpdGUgdGhhdCBvbmUgKHRyaWNreSEpICBOb3QKKwkgICAgICogbmVlZGVkIHdoZW4gYSAnJCcgd2FzIGRpc3BsYXllZCBmb3IgJ2xpc3QnLiAqLworCSAgICBpZiAobGNzX2VvbCA9PSBsY3NfZW9sX29uZQorCQkgICAgJiYgKChhcmVhX2F0dHIgIT0gMCAmJiB2Y29sID09IGZyb21jb2wpCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKwkJCS8qIGhpZ2hsaWdodCAnaGxzZWFyY2gnIG1hdGNoIGF0IGVuZCBvZiBsaW5lICovCisJCQl8fCBwdHIgLSAxID09IHNlYXJjaF9obC5zdGFydHAKKwkJCXx8IHB0ciAtIDEgPT0gbWF0Y2hfaGwuc3RhcnRwCisjZW5kaWYKKwkJICAgICAgICkpCisJICAgIHsKKwkJaW50IG4gPSAwOworCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJaWYgKHdwLT53X3BfcmwpCisJCXsKKwkJICAgIGlmIChjb2wgPCAwKQorCQkJbiA9IDE7CisJCX0KKwkJZWxzZQorI2VuZGlmCisJCXsKKwkJICAgIGlmIChjb2wgPj0gV19XSURUSCh3cCkpCisJCQluID0gLTE7CisJCX0KKwkJaWYgKG4gIT0gMCkKKwkJeworCQkgICAgLyogQXQgdGhlIHdpbmRvdyBib3VuZGFyeSwgaGlnaGxpZ2h0IHRoZSBsYXN0IGNoYXJhY3RlcgorCQkgICAgICogaW5zdGVhZCAoYmV0dGVyIHRoYW4gbm90aGluZykuICovCisJCSAgICBvZmYgKz0gbjsKKwkJICAgIGNvbCArPSBuOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgLyogQWRkIGEgYmxhbmsgY2hhcmFjdGVyIHRvIGhpZ2hsaWdodC4gKi8KKwkJICAgIFNjcmVlbkxpbmVzW29mZl0gPSAnICc7CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGVuY191dGY4KQorCQkJU2NyZWVuTGluZXNVQ1tvZmZdID0gMDsKKyNlbmRpZgorCQl9CisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKwkJaWYgKGFyZWFfYXR0ciA9PSAwKQorCQl7CisJCSAgICBpZiAocHRyIC0gMSA9PSBtYXRjaF9obC5zdGFydHApCisJCQljaGFyX2F0dHIgPSBtYXRjaF9obC5hdHRyOworCQkgICAgZWxzZQorCQkJY2hhcl9hdHRyID0gc2VhcmNoX2hsLmF0dHI7CisJCX0KKyNlbmRpZgorCQlTY3JlZW5BdHRyc1tvZmZdID0gY2hhcl9hdHRyOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCWlmICh3cC0+d19wX3JsKQorCQkgICAgLS1jb2w7CisJCWVsc2UKKyNlbmRpZgorCQkgICAgKytjb2w7CisJICAgIH0KKworCSAgICBTQ1JFRU5fTElORShzY3JlZW5fcm93LCBXX1dJTkNPTCh3cCksIGNvbCwgKGludClXX1dJRFRIKHdwKSwKKwkJCQkJCQkJICB3cC0+d19wX3JsKTsKKwkgICAgcm93Kys7CisKKwkgICAgLyoKKwkgICAgICogVXBkYXRlIHdfY2xpbmVfaGVpZ2h0IGFuZCB3X2NsaW5lX2ZvbGRlZCBpZiB0aGUgY3Vyc29yIGxpbmUgd2FzCisJICAgICAqIHVwZGF0ZWQgKHNhdmVzIGEgY2FsbCB0byBwbGluZXMoKSBsYXRlcikuCisJICAgICAqLworCSAgICBpZiAod3AgPT0gY3Vyd2luICYmIGxudW0gPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCSAgICB7CisJCWN1cndpbi0+d19jbGluZV9yb3cgPSBzdGFydHJvdzsKKwkJY3Vyd2luLT53X2NsaW5lX2hlaWdodCA9IHJvdyAtIHN0YXJ0cm93OworI2lmZGVmIEZFQVRfRk9MRElORworCQljdXJ3aW4tPndfY2xpbmVfZm9sZGVkID0gRkFMU0U7CisjZW5kaWYKKwkJY3Vyd2luLT53X3ZhbGlkIHw9IChWQUxJRF9DSEVJR0hUfFZBTElEX0NST1cpOworCSAgICB9CisKKwkgICAgYnJlYWs7CisJfQorCisJLyogbGluZSBjb250aW51ZXMgYmV5b25kIGxpbmUgZW5kICovCisJaWYgKGxjc19leHQKKwkJJiYgIXdwLT53X3Bfd3JhcAorI2lmZGVmIEZFQVRfRElGRgorCQkmJiBmaWxsZXJfdG9kbyA8PSAwCisjZW5kaWYKKwkJJiYgKAorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCSAgICB3cC0+d19wX3JsID8gY29sID09IDAgOgorI2VuZGlmCisJCSAgICBjb2wgPT0gV19XSURUSCh3cCkgLSAxKQorCQkmJiAoKnB0ciAhPSBOVUwKKwkJICAgIHx8ICh3cC0+d19wX2xpc3QgJiYgbGNzX2VvbCAhPSBOVUwgJiYgcF9leHRyYSAhPSBhdF9lbmRfc3RyKQorCQkgICAgfHwgKG5fZXh0cmEgJiYgKGNfZXh0cmEgIT0gTlVMIHx8ICpwX2V4dHJhICE9IE5VTCkpKSkKKwl7CisJICAgIGMgPSBsY3NfZXh0OworCSAgICBjaGFyX2F0dHIgPSBobF9hdHRyKEhMRl9BVCk7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBtYl9jID0gYzsKKwkgICAgaWYgKGVuY191dGY4ICYmICgqbWJfY2hhcjJsZW4pKGMpID4gMSkKKwkgICAgeworCQltYl91dGY4ID0gVFJVRTsKKwkJdThjX2MxID0gdThjX2MyID0gMDsKKwkgICAgfQorCSAgICBlbHNlCisJCW1iX3V0ZjggPSBGQUxTRTsKKyNlbmRpZgorCX0KKworCS8qCisJICogU3RvcmUgY2hhcmFjdGVyIHRvIGJlIGRpc3BsYXllZC4KKwkgKiBTa2lwIGNoYXJhY3RlcnMgdGhhdCBhcmUgbGVmdCBvZiB0aGUgc2NyZWVuIGZvciAnbm93cmFwJy4KKwkgKi8KKwl2Y29sX3ByZXYgPSB2Y29sOworCWlmIChkcmF3X3N0YXRlIDwgV0xfTElORSB8fCBuX3NraXAgPD0gMCkKKwl7CisJICAgIC8qCisJICAgICAqIFN0b3JlIHRoZSBjaGFyYWN0ZXIuCisJICAgICAqLworI2lmIGRlZmluZWQoRkVBVF9SSUdIVExFRlQpICYmIGRlZmluZWQoRkVBVF9NQllURSkKKwkgICAgaWYgKGhhc19tYnl0ZSAmJiB3cC0+d19wX3JsICYmICgqbWJfY2hhcjJjZWxscykobWJfYykgPiAxKQorCSAgICB7CisJCS8qIEEgZG91YmxlLXdpZGUgY2hhcmFjdGVyIGlzOiBwdXQgZmlyc3QgaGFsdmUgaW4gbGVmdCBjZWxsLiAqLworCQktLW9mZjsKKwkJLS1jb2w7CisJICAgIH0KKyNlbmRpZgorCSAgICBTY3JlZW5MaW5lc1tvZmZdID0gYzsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUpCisJCVNjcmVlbkxpbmVzMltvZmZdID0gbWJfYyAmIDB4ZmY7CisJICAgIGVsc2UgaWYgKGVuY191dGY4KQorCSAgICB7CisJCWlmIChtYl91dGY4KQorCQl7CisJCSAgICBTY3JlZW5MaW5lc1VDW29mZl0gPSBtYl9jOworCQkgICAgU2NyZWVuTGluZXNDMVtvZmZdID0gdThjX2MxOworCQkgICAgU2NyZWVuTGluZXNDMltvZmZdID0gdThjX2MyOworCQl9CisJCWVsc2UKKwkJICAgIFNjcmVlbkxpbmVzVUNbb2ZmXSA9IDA7CisJICAgIH0KKwkgICAgaWYgKG11bHRpX2F0dHIpCisJICAgIHsKKwkJU2NyZWVuQXR0cnNbb2ZmXSA9IG11bHRpX2F0dHI7CisJCW11bHRpX2F0dHIgPSAwOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCQlTY3JlZW5BdHRyc1tvZmZdID0gY2hhcl9hdHRyOworCisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlICYmICgqbWJfY2hhcjJjZWxscykobWJfYykgPiAxKQorCSAgICB7CisJCS8qIE5lZWQgdG8gZmlsbCB0d28gc2NyZWVuIGNvbHVtbnMuICovCisJCSsrb2ZmOworCQkrK2NvbDsKKwkJaWYgKGVuY191dGY4KQorCQkgICAgLyogVVRGLTg6IFB1dCBhIDAgaW4gdGhlIHNlY29uZCBzY3JlZW4gY2hhci4gKi8KKwkJICAgIFNjcmVlbkxpbmVzW29mZl0gPSAwOworCQllbHNlCisJCSAgICAvKiBEQkNTOiBQdXQgc2Vjb25kIGJ5dGUgaW4gdGhlIHNlY29uZCBzY3JlZW4gY2hhci4gKi8KKwkJICAgIFNjcmVlbkxpbmVzW29mZl0gPSBtYl9jICYgMHhmZjsKKwkJKyt2Y29sOworCQkvKiBXaGVuICJ0b2NvbCIgaXMgaGFsZndheSBhIGNoYXJhY3Rlciwgc2V0IGl0IHRvIHRoZSBlbmQgb2YKKwkJICogdGhlIGNoYXJhY3Rlciwgb3RoZXJ3aXNlIGhpZ2hsaWdodGluZyB3b24ndCBzdG9wLiAqLworCQlpZiAodG9jb2wgPT0gdmNvbCkKKwkJICAgICsrdG9jb2w7CisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJaWYgKHdwLT53X3BfcmwpCisJCXsKKwkJICAgIC8qIG5vdyBpdCdzIHRpbWUgdG8gYmFja3VwIG9uZSBjZWxsICovCisJCSAgICAtLW9mZjsKKwkJICAgIC0tY29sOworCQl9CisjZW5kaWYKKwkgICAgfQorI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkgICAgaWYgKHdwLT53X3BfcmwpCisJICAgIHsKKwkJLS1vZmY7CisJCS0tY29sOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCSsrb2ZmOworCQkrK2NvbDsKKwkgICAgfQorCX0KKwllbHNlCisJICAgIC0tbl9za2lwOworCisJLyogT25seSBhZHZhbmNlIHRoZSAidmNvbCIgd2hlbiBhZnRlciB0aGUgJ251bWJlcicgY29sdW1uLiAqLworCWlmIChkcmF3X3N0YXRlID49IFdMX1NCUgorI2lmZGVmIEZFQVRfRElGRgorCQkmJiBmaWxsZXJfdG9kbyA8PSAwCisjZW5kaWYKKwkJKQorCSAgICArK3Zjb2w7CisKKwkvKiByZXN0b3JlIGF0dHJpYnV0ZXMgYWZ0ZXIgInByZWRlY2VzIiBpbiAnbGlzdGNoYXJzJyAqLworCWlmIChkcmF3X3N0YXRlID4gV0xfTlIgJiYgbl9hdHRyMyA+IDAgJiYgLS1uX2F0dHIzID09IDApCisJICAgIGNoYXJfYXR0ciA9IHNhdmVkX2F0dHIzOworCisJLyogcmVzdG9yZSBhdHRyaWJ1dGVzIGFmdGVyIGxhc3QgJ2xpc3RjaGFycycgb3IgJ251bWJlcicgY2hhciAqLworCWlmIChuX2F0dHIgPiAwICYmIGRyYXdfc3RhdGUgPT0gV0xfTElORSAmJiAtLW5fYXR0ciA9PSAwKQorCSAgICBjaGFyX2F0dHIgPSBzYXZlZF9hdHRyMjsKKworCS8qCisJICogQXQgZW5kIG9mIHNjcmVlbiBsaW5lIGFuZCB0aGVyZSBpcyBtb3JlIHRvIGNvbWU6IERpc3BsYXkgdGhlIGxpbmUKKwkgKiBzbyBmYXIuICBJZiB0aGVyZSBpcyBubyBtb3JlIHRvIGRpc3BsYXkgaXQgaXMgY2F0Y2hlZCBhYm92ZS4KKwkgKi8KKwlpZiAoKAorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJICAgIHdwLT53X3BfcmwgPyAoY29sIDwgMCkgOgorI2VuZGlmCisJCQkJICAgIChjb2wgPj0gV19XSURUSCh3cCkpKQorCQkmJiAoKnB0ciAhPSBOVUwKKyNpZmRlZiBGRUFUX0RJRkYKKwkJICAgIHx8IGZpbGxlcl90b2RvID4gMAorI2VuZGlmCisJCSAgICB8fCAod3AtPndfcF9saXN0ICYmIGxjc19lb2wgIT0gTlVMICYmIHBfZXh0cmEgIT0gYXRfZW5kX3N0cikKKwkJICAgIHx8IChuX2V4dHJhICE9IDAgJiYgKGNfZXh0cmEgIT0gTlVMIHx8ICpwX2V4dHJhICE9IE5VTCkpKQorCQkpCisJeworCSAgICBTQ1JFRU5fTElORShzY3JlZW5fcm93LCBXX1dJTkNPTCh3cCksIGNvbCwgKGludClXX1dJRFRIKHdwKSwKKwkJCQkJCQkJICB3cC0+d19wX3JsKTsKKwkgICAgKytyb3c7CisJICAgICsrc2NyZWVuX3JvdzsKKworCSAgICAvKiBXaGVuIG5vdCB3cmFwcGluZyBhbmQgZmluaXNoZWQgZGlmZiBsaW5lcywgb3Igd2hlbiBkaXNwbGF5ZWQKKwkgICAgICogJyQnIGFuZCBoaWdobGlnaHRpbmcgdW50aWwgbGFzdCBjb2x1bW4sIGJyZWFrIGhlcmUuICovCisJICAgIGlmICgoIXdwLT53X3Bfd3JhcAorI2lmZGVmIEZFQVRfRElGRgorCQkgICAgJiYgZmlsbGVyX3RvZG8gPD0gMAorI2VuZGlmCisJCSAgICApIHx8IGxjc19lb2xfb25lID09IC0xKQorCQlicmVhazsKKworCSAgICAvKiBXaGVuIHRoZSB3aW5kb3cgaXMgdG9vIG5hcnJvdyBkcmF3IGFsbCAiQCIgbGluZXMuICovCisJICAgIGlmIChkcmF3X3N0YXRlICE9IFdMX0xJTkUKKyNpZmRlZiBGRUFUX0RJRkYKKwkJICAgICYmIGZpbGxlcl90b2RvIDw9IDAKKyNlbmRpZgorCQkgICAgKQorCSAgICB7CisJCXdpbl9kcmF3X2VuZCh3cCwgJ0AnLCAnICcsIHJvdywgd3AtPndfaGVpZ2h0LCBITEZfQVQpOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJCWRyYXdfdnNlcF93aW4od3AsIHJvdyk7CisjZW5kaWYKKwkJcm93ID0gZW5kcm93OworCSAgICB9CisKKwkgICAgLyogV2hlbiBsaW5lIGdvdCB0b28gbG9uZyBmb3Igc2NyZWVuIGJyZWFrIGhlcmUuICovCisJICAgIGlmIChyb3cgPT0gZW5kcm93KQorCSAgICB7CisJCSsrcm93OworCQlicmVhazsKKwkgICAgfQorCisJICAgIGlmIChzY3JlZW5fY3VyX3JvdyA9PSBzY3JlZW5fcm93IC0gMQorI2lmZGVmIEZFQVRfRElGRgorCQkgICAgICYmIGZpbGxlcl90b2RvIDw9IDAKKyNlbmRpZgorCQkgICAgICYmIFdfV0lEVEgod3ApID09IENvbHVtbnMpCisJICAgIHsKKwkJLyogUmVtZW1iZXIgdGhhdCB0aGUgbGluZSB3cmFwcywgdXNlZCBmb3IgbW9kZWxlc3MgY29weS4gKi8KKwkJTGluZVdyYXBzW3NjcmVlbl9yb3cgLSAxXSA9IFRSVUU7CisKKwkJLyoKKwkJICogU3BlY2lhbCB0cmljayB0byBtYWtlIGNvcHkvcGFzdGUgb2Ygd3JhcHBlZCBsaW5lcyB3b3JrIHdpdGgKKwkJICogeHRlcm0vc2NyZWVuOiB3cml0ZSBhbiBleHRyYSBjaGFyYWN0ZXIgYmV5b25kIHRoZSBlbmQgb2YKKwkJICogdGhlIGxpbmUuIFRoaXMgd2lsbCB3b3JrIHdpdGggYWxsIHRlcm1pbmFsIHR5cGVzCisJCSAqIChyZWdhcmRsZXNzIG9mIHRoZSB4bixhbSBzZXR0aW5ncykuCisJCSAqIE9ubHkgZG8gdGhpcyBvbiBhIGZhc3QgdHR5LgorCQkgKiBPbmx5IGRvIHRoaXMgaWYgdGhlIGN1cnNvciBpcyBvbiB0aGUgY3VycmVudCBsaW5lCisJCSAqIChzb21ldGhpbmcgaGFzIGJlZW4gd3JpdHRlbiBpbiBpdCkuCisJCSAqIERvbid0IGRvIHRoaXMgZm9yIHRoZSBHVUkuCisJCSAqIERvbid0IGRvIHRoaXMgZm9yIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXJzLgorCQkgKiBEb24ndCBkbyB0aGlzIGZvciBhIHdpbmRvdyBub3QgYXQgdGhlIHJpZ2h0IHNjcmVlbiBib3JkZXIuCisJCSAqLworCQlpZiAocF90ZgorI2lmZGVmIEZFQVRfR1VJCisJCQkgJiYgIWd1aS5pbl91c2UKKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKwkJCSAmJiAhKGhhc19tYnl0ZQorCQkJICAgICAmJiAoKCptYl9vZmYyY2VsbHMpKExpbmVPZmZzZXRbc2NyZWVuX3Jvd10pID09IDIKKwkJCQkgfHwgKCptYl9vZmYyY2VsbHMpKExpbmVPZmZzZXRbc2NyZWVuX3JvdyAtIDFdCisJCQkJCQkJKyAoaW50KUNvbHVtbnMgLSAyKSA9PSAyKSkKKyNlbmRpZgorCQkgICApCisJCXsKKwkJICAgIC8qIEZpcnN0IG1ha2Ugc3VyZSB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgc2NyZWVuIGxpbmUsCisJCSAgICAgKiB0aGVuIG91dHB1dCB0aGUgc2FtZSBjaGFyYWN0ZXIgYWdhaW4gdG8gbGV0IHRoZQorCQkgICAgICogdGVybWluYWwga25vdyBhYm91dCB0aGUgd3JhcC4gIElmIHRoZSB0ZXJtaW5hbCBkb2Vzbid0CisJCSAgICAgKiBhdXRvLXdyYXAsIHdlIG92ZXJ3cml0ZSB0aGUgY2hhcmFjdGVyLiAqLworCQkgICAgaWYgKHNjcmVlbl9jdXJfY29sICE9IFdfV0lEVEgod3ApKQorCQkJc2NyZWVuX2NoYXIoTGluZU9mZnNldFtzY3JlZW5fcm93IC0gMV0KKwkJCQkJCSAgICAgICsgKHVuc2lnbmVkKUNvbHVtbnMgLSAxLAorCQkJCQkgIHNjcmVlbl9yb3cgLSAxLCAoaW50KShDb2x1bW5zIC0gMSkpOworCisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgLyogV2hlbiB0aGVyZSBpcyBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLCBqdXN0IG91dHB1dCBhCisJCSAgICAgKiBzcGFjZSB0byBrZWVwIGl0IHNpbXBsZS4gKi8KKwkJICAgIGlmIChoYXNfbWJ5dGUgJiYgbWJfb2ZmMmNlbGxzKExpbmVPZmZzZXRbc2NyZWVuX3JvdyAtIDFdCisJCQkJCQkrICh1bnNpZ25lZClDb2x1bW5zIC0gMSkgIT0gMSkKKwkJCW91dF9jaGFyKCcgJyk7CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCW91dF9jaGFyKFNjcmVlbkxpbmVzW0xpbmVPZmZzZXRbc2NyZWVuX3JvdyAtIDFdCisJCQkJCQkJICAgICsgKENvbHVtbnMgLSAxKV0pOworCQkgICAgLyogZm9yY2UgYSByZWRyYXcgb2YgdGhlIGZpcnN0IGNoYXIgb24gdGhlIG5leHQgbGluZSAqLworCQkgICAgU2NyZWVuQXR0cnNbTGluZU9mZnNldFtzY3JlZW5fcm93XV0gPSAoc2F0dHJfVCktMTsKKwkJICAgIHNjcmVlbl9zdGFydCgpOwkvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKwkJfQorCSAgICB9CisKKwkgICAgY29sID0gMDsKKwkgICAgb2ZmID0gKHVuc2lnbmVkKShjdXJyZW50X1NjcmVlbkxpbmUgLSBTY3JlZW5MaW5lcyk7CisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkgICAgaWYgKHdwLT53X3BfcmwpCisJICAgIHsKKwkJY29sID0gV19XSURUSCh3cCkgLSAxOwkvKiBjb2wgaXMgbm90IHVzZWQgaWYgYnJlYWtpbmchICovCisJCW9mZiArPSBjb2w7CisJICAgIH0KKyNlbmRpZgorCisJICAgIC8qIHJlc2V0IHRoZSBkcmF3aW5nIHN0YXRlIGZvciB0aGUgc3RhcnQgb2YgYSB3cmFwcGVkIGxpbmUgKi8KKwkgICAgZHJhd19zdGF0ZSA9IFdMX1NUQVJUOworCSAgICBzYXZlZF9uX2V4dHJhID0gbl9leHRyYTsKKwkgICAgc2F2ZWRfcF9leHRyYSA9IHBfZXh0cmE7CisJICAgIHNhdmVkX2NfZXh0cmEgPSBjX2V4dHJhOworCSAgICBzYXZlZF9jaGFyX2F0dHIgPSBjaGFyX2F0dHI7CisJICAgIG5fZXh0cmEgPSAwOworCSAgICBsY3NfcHJlY190b2RvID0gbGNzX3ByZWM7CisjaWZkZWYgRkVBVF9MSU5FQlJFQUsKKyMgaWZkZWYgRkVBVF9ESUZGCisJICAgIGlmIChmaWxsZXJfdG9kbyA8PSAwKQorIyBlbmRpZgorCQluZWVkX3Nob3dicmVhayA9IFRSVUU7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0RJRkYKKwkgICAgLS1maWxsZXJfdG9kbzsKKwkgICAgLyogV2hlbiB0aGUgZmlsbGVyIGxpbmVzIGFyZSBhY3R1YWxseSBiZWxvdyB0aGUgbGFzdCBsaW5lIG9mIHRoZQorCSAgICAgKiBmaWxlLCBkb24ndCBkcmF3IHRoZSBsaW5lIGl0c2VsZiwgYnJlYWsgaGVyZS4gKi8KKwkgICAgaWYgKGZpbGxlcl90b2RvID09IDAgJiYgd3AtPndfYm90ZmlsbCkKKwkJYnJlYWs7CisjZW5kaWYKKwl9CisKKyAgICB9CS8qIGZvciBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUgKi8KKworICAgIHJldHVybiByb3c7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjaGFyYWN0ZXIgbmVlZHMgcmVkcmF3aW5nOgorICogLSB0aGUgKGZpcnN0IGJ5dGUgb2YgdGhlKSBjaGFyYWN0ZXIgaXMgZGlmZmVyZW50CisgKiAtIHRoZSBhdHRyaWJ1dGVzIGFyZSBkaWZmZXJlbnQKKyAqIC0gdGhlIGNoYXJhY3RlciBpcyBtdWx0aS1ieXRlIGFuZCB0aGUgbmV4dCBieXRlIGlzIGRpZmZlcmVudAorICovCisgICAgc3RhdGljIGludAorY2hhcl9uZWVkc19yZWRyYXcob2ZmX2Zyb20sIG9mZl90bywgY29scykKKyAgICBpbnQJCW9mZl9mcm9tOworICAgIGludAkJb2ZmX3RvOworICAgIGludAkJY29sczsKK3sKKyAgICBpZiAoY29scyA+IDAKKwkgICAgJiYgKChTY3JlZW5MaW5lc1tvZmZfZnJvbV0gIT0gU2NyZWVuTGluZXNbb2ZmX3RvXQorCQkgICAgfHwgU2NyZWVuQXR0cnNbb2ZmX2Zyb21dICE9IFNjcmVlbkF0dHJzW29mZl90b10pCisKKyNpZmRlZiBGRUFUX01CWVRFCisJCXx8IChlbmNfZGJjcyAhPSAwCisJCSAgICAmJiBNQl9CWVRFMkxFTihTY3JlZW5MaW5lc1tvZmZfZnJvbV0pID4gMQorCQkgICAgJiYgKGVuY19kYmNzID09IERCQ1NfSlBOVSAmJiBTY3JlZW5MaW5lc1tvZmZfZnJvbV0gPT0gMHg4ZQorCQkJPyBTY3JlZW5MaW5lczJbb2ZmX2Zyb21dICE9IFNjcmVlbkxpbmVzMltvZmZfdG9dCisJCQk6IChjb2xzID4gMSAmJiBTY3JlZW5MaW5lc1tvZmZfZnJvbSArIDFdCisJCQkJCQkgIT0gU2NyZWVuTGluZXNbb2ZmX3RvICsgMV0pKSkKKwkJfHwgKGVuY191dGY4CisJCSAgICAmJiAoU2NyZWVuTGluZXNVQ1tvZmZfZnJvbV0gIT0gU2NyZWVuTGluZXNVQ1tvZmZfdG9dCisJCQl8fCAoU2NyZWVuTGluZXNVQ1tvZmZfZnJvbV0gIT0gMAorCQkJICAgICYmIChTY3JlZW5MaW5lc0MxW29mZl9mcm9tXQorCQkJCQkJICAgICAgIT0gU2NyZWVuTGluZXNDMVtvZmZfdG9dCisJCQkJfHwgU2NyZWVuTGluZXNDMltvZmZfZnJvbV0KKwkJCQkJCSAgIT0gU2NyZWVuTGluZXNDMltvZmZfdG9dKSkpKQorI2VuZGlmCisJICAgICAgICkpCisJcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogTW92ZSBvbmUgImNvb2tlZCIgc2NyZWVuIGxpbmUgdG8gdGhlIHNjcmVlbiwgYnV0IG9ubHkgdGhlIGNoYXJhY3RlcnMgdGhhdAorICogaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLiAgSGFuZGxlIGluc2VydC9kZWxldGUgY2hhcmFjdGVyLgorICogImNvbG9mZiIgZ2l2ZXMgdGhlIGZpcnN0IGNvbHVtbiBvbiB0aGUgc2NyZWVuIGZvciB0aGlzIGxpbmUuCisgKiAiZW5kY29sIiBnaXZlcyB0aGUgY29sdW1ucyB3aGVyZSB2YWxpZCBjaGFyYWN0ZXJzIGFyZS4KKyAqICJjbGVhcl93aWR0aCIgaXMgdGhlIHdpZHRoIG9mIHRoZSB3aW5kb3cuICBJdCdzID4gMCBpZiB0aGUgcmVzdCBvZiB0aGUgbGluZQorICogbmVlZHMgdG8gYmUgY2xlYXJlZCwgbmVnYXRpdmUgb3RoZXJ3aXNlLgorICogInJsZmxhZyIgaXMgVFJVRSBpbiBhIHJpZ2h0bGVmdCB3aW5kb3c6CisgKiAgICBXaGVuIFRSVUUgYW5kICJjbGVhcl93aWR0aCIgPiAwLCBjbGVhciBjb2x1bW5zIDAgdG8gImVuZGNvbCIKKyAqICAgIFdoZW4gRkFMU0UgYW5kICJjbGVhcl93aWR0aCIgPiAwLCBjbGVhciBjb2x1bW5zICJlbmRjb2wiIHRvICJjbGVhcl93aWR0aCIKKyAqLworICAgIHN0YXRpYyB2b2lkCitzY3JlZW5fbGluZShyb3csIGNvbG9mZiwgZW5kY29sLCBjbGVhcl93aWR0aAorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCQkJICAgICwgcmxmbGFnCisjZW5kaWYKKwkJCQkJCSkKKyAgICBpbnQJICAgIHJvdzsKKyAgICBpbnQJICAgIGNvbG9mZjsKKyAgICBpbnQJICAgIGVuZGNvbDsKKyAgICBpbnQJICAgIGNsZWFyX3dpZHRoOworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgaW50CSAgICBybGZsYWc7CisjZW5kaWYKK3sKKyAgICB1bnNpZ25lZAkgICAgb2ZmX2Zyb207CisgICAgdW5zaWduZWQJICAgIG9mZl90bzsKKyAgICBpbnQJCSAgICBjb2wgPSAwOworI2lmIGRlZmluZWQoRkVBVF9HVUkpIHx8IGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChGRUFUX1ZFUlRTUExJVCkKKyAgICBpbnQJCSAgICBobDsKKyNlbmRpZgorICAgIGludAkJICAgIGZvcmNlID0gRkFMU0U7CS8qIGZvcmNlIHVwZGF0ZSByZXN0IG9mIHRoZSBsaW5lICovCisgICAgaW50CQkgICAgcmVkcmF3X3RoaXMJCS8qIGJvb2w6IGRvZXMgY2hhcmFjdGVyIG5lZWQgcmVkcmF3PyAqLworI2lmZGVmIEZFQVRfR1VJCisJCQkJPSBUUlVFCS8qIEZvciBHVUkgd2hlbiB3aGlsZS1sb29wIGVtcHR5ICovCisjZW5kaWYKKwkJCQk7CisgICAgaW50CQkgICAgcmVkcmF3X25leHQ7CS8qIHJlZHJhd190aGlzIGZvciBuZXh0IGNoYXJhY3RlciAqLworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCSAgICBjbGVhcl9uZXh0ID0gRkFMU0U7CisgICAgaW50CQkgICAgY2hhcl9jZWxsczsJCS8qIDE6IG5vcm1hbCBjaGFyICovCisJCQkJCS8qIDI6IG9jY3VwaWVzIHR3byBkaXNwbGF5IGNlbGxzICovCisjIGRlZmluZSBDSEFSX0NFTExTIGNoYXJfY2VsbHMKKyNlbHNlCisjIGRlZmluZSBDSEFSX0NFTExTIDEKKyNlbmRpZgorCisjIGlmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgY2xpcF9tYXlfY2xlYXJfc2VsZWN0aW9uKHJvdywgcm93KTsKKyMgZW5kaWYKKworICAgIG9mZl9mcm9tID0gKHVuc2lnbmVkKShjdXJyZW50X1NjcmVlbkxpbmUgLSBTY3JlZW5MaW5lcyk7CisgICAgb2ZmX3RvID0gTGluZU9mZnNldFtyb3ddICsgY29sb2ZmOworCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKyAgICBpZiAocmxmbGFnKQorICAgIHsKKwkvKiBDbGVhciByZXN0IGZpcnN0LCBiZWNhdXNlIGl0J3MgbGVmdCBvZiB0aGUgdGV4dC4gKi8KKwlpZiAoY2xlYXJfd2lkdGggPiAwKQorCXsKKwkgICAgd2hpbGUgKGNvbCA8PSBlbmRjb2wgJiYgU2NyZWVuTGluZXNbb2ZmX3RvXSA9PSAnICcKKwkJICAgICYmIFNjcmVlbkF0dHJzW29mZl90b10gPT0gMAorIyBpZmRlZiBGRUFUX01CWVRFCisJCQkJICAmJiAoIWVuY191dGY4IHx8IFNjcmVlbkxpbmVzVUNbb2ZmX3RvXSA9PSAwKQorIyBlbmRpZgorCQkJCQkJICApCisJICAgIHsKKwkJKytvZmZfdG87CisJCSsrY29sOworCSAgICB9CisJICAgIGlmIChjb2wgPD0gZW5kY29sKQorCQlzY3JlZW5fZmlsbChyb3csIHJvdyArIDEsIGNvbCArIGNvbG9mZiwKKwkJCQkJICAgIGVuZGNvbCArIGNvbG9mZiArIDEsICcgJywgJyAnLCAwKTsKKwl9CisJY29sID0gZW5kY29sICsgMTsKKwlvZmZfdG8gPSBMaW5lT2Zmc2V0W3Jvd10gKyBjb2wgKyBjb2xvZmY7CisJb2ZmX2Zyb20gKz0gY29sOworCWVuZGNvbCA9IChjbGVhcl93aWR0aCA+IDAgPyBjbGVhcl93aWR0aCA6IC1jbGVhcl93aWR0aCk7CisgICAgfQorI2VuZGlmIC8qIEZFQVRfUklHSFRMRUZUICovCisKKyAgICByZWRyYXdfbmV4dCA9IGNoYXJfbmVlZHNfcmVkcmF3KG9mZl9mcm9tLCBvZmZfdG8sIGVuZGNvbCAtIGNvbCk7CisKKyAgICB3aGlsZSAoY29sIDwgZW5kY29sKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSAmJiAoY29sICsgMSA8IGVuZGNvbCkpCisJICAgIGNoYXJfY2VsbHMgPSAoKm1iX29mZjJjZWxscykob2ZmX2Zyb20pOworCWVsc2UKKwkgICAgY2hhcl9jZWxscyA9IDE7CisjZW5kaWYKKworCXJlZHJhd190aGlzID0gcmVkcmF3X25leHQ7CisJcmVkcmF3X25leHQgPSBmb3JjZSB8fCBjaGFyX25lZWRzX3JlZHJhdyhvZmZfZnJvbSArIENIQVJfQ0VMTFMsCisJCQkgICAgICBvZmZfdG8gKyBDSEFSX0NFTExTLCBlbmRjb2wgLSBjb2wgLSBDSEFSX0NFTExTKTsKKworI2lmZGVmIEZFQVRfR1VJCisJLyogSWYgdGhlIG5leHQgY2hhcmFjdGVyIHdhcyBib2xkLCB0aGVuIHJlZHJhdyB0aGUgY3VycmVudCBjaGFyYWN0ZXIgdG8KKwkgKiByZW1vdmUgYW55IHBpeGVscyB0aGF0IG1pZ2h0IGhhdmUgc3BpbHQgb3ZlciBpbnRvIHVzLiAgVGhpcyBvbmx5CisJICogaGFwcGVucyBpbiB0aGUgR1VJLgorCSAqLworCWlmIChyZWRyYXdfbmV4dCAmJiBndWkuaW5fdXNlKQorCXsKKwkgICAgaGwgPSBTY3JlZW5BdHRyc1tvZmZfdG8gKyBDSEFSX0NFTExTXTsKKwkgICAgaWYgKGhsID4gSExfQUxMIHx8IChobCAmIEhMX0JPTEQpKQorCQlyZWRyYXdfdGhpcyA9IFRSVUU7CisJfQorI2VuZGlmCisKKwlpZiAocmVkcmF3X3RoaXMpCisJeworCSAgICAvKgorCSAgICAgKiBTcGVjaWFsIGhhbmRsaW5nIHdoZW4gJ3hzJyB0ZXJtY2FwIGZsYWcgc2V0IChocHRlcm0pOgorCSAgICAgKiBBdHRyaWJ1dGVzIGZvciBjaGFyYWN0ZXJzIGFyZSBzdG9yZWQgYXQgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZQorCSAgICAgKiBjdXJzb3IgaXMgd2hlbiB3cml0aW5nIHRoZSBoaWdobGlnaHRpbmcgY29kZS4gIFRoZQorCSAgICAgKiBzdGFydC1oaWdobGlnaHRpbmcgY29kZSBtdXN0IGJlIHdyaXR0ZW4gd2l0aCB0aGUgY3Vyc29yIG9uIHRoZQorCSAgICAgKiBmaXJzdCBoaWdobGlnaHRlZCBjaGFyYWN0ZXIuICBUaGUgc3RvcC1oaWdobGlnaHRpbmcgY29kZSBtdXN0CisJICAgICAqIGJlIHdyaXR0ZW4gd2l0aCB0aGUgY3Vyc29yIGp1c3QgYWZ0ZXIgdGhlIGxhc3QgaGlnaGxpZ2h0ZWQKKwkgICAgICogY2hhcmFjdGVyLgorCSAgICAgKiBPdmVyd3JpdGluZyBhIGNoYXJhY3RlciBkb2Vzbid0IHJlbW92ZSBpdCdzIGhpZ2hsaWdodGluZy4gIE5lZWQKKwkgICAgICogdG8gY2xlYXIgdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIGFuZCBmb3JjZSByZWRyYXdpbmcgaXQKKwkgICAgICogY29tcGxldGVseS4KKwkgICAgICovCisJICAgIGlmICggICAgICAgcF93aXYKKwkJICAgICYmICFmb3JjZQorI2lmZGVmIEZFQVRfR1VJCisJCSAgICAmJiAhZ3VpLmluX3VzZQorI2VuZGlmCisJCSAgICAmJiBTY3JlZW5BdHRyc1tvZmZfdG9dICE9IDAKKwkJICAgICYmIFNjcmVlbkF0dHJzW29mZl9mcm9tXSAhPSBTY3JlZW5BdHRyc1tvZmZfdG9dKQorCSAgICB7CisJCS8qCisJCSAqIE5lZWQgdG8gcmVtb3ZlIGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGhlcmUuCisJCSAqLworCQl3aW5kZ290byhyb3csIGNvbCArIGNvbG9mZik7CisJCW91dF9zdHIoVF9DRSk7CQkvKiBjbGVhciByZXN0IG9mIHRoaXMgc2NyZWVuIGxpbmUgKi8KKwkJc2NyZWVuX3N0YXJ0KCk7CQkvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKwkJZm9yY2UgPSBUUlVFOwkJLyogZm9yY2UgcmVkcmF3IG9mIHJlc3Qgb2YgdGhlIGxpbmUgKi8KKwkJcmVkcmF3X25leHQgPSBUUlVFOwkvKiBvciBlbHNlIG5leHQgY2hhciB3b3VsZCBtaXNzIG91dCAqLworCisJCS8qCisJCSAqIElmIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgd2FzIGhpZ2hsaWdodGVkLCBuZWVkIHRvIHN0b3AKKwkJICogaGlnaGxpZ2h0aW5nIGF0IHRoaXMgY2hhcmFjdGVyLgorCQkgKi8KKwkJaWYgKGNvbCArIGNvbG9mZiA+IDAgJiYgU2NyZWVuQXR0cnNbb2ZmX3RvIC0gMV0gIT0gMCkKKwkJeworCQkgICAgc2NyZWVuX2F0dHIgPSBTY3JlZW5BdHRyc1tvZmZfdG8gLSAxXTsKKwkJICAgIHRlcm1fd2luZGdvdG8ocm93LCBjb2wgKyBjb2xvZmYpOworCQkgICAgc2NyZWVuX3N0b3BfaGlnaGxpZ2h0KCk7CisJCX0KKwkJZWxzZQorCQkgICAgc2NyZWVuX2F0dHIgPSAwOwkgICAgLyogaGlnaGxpZ2h0aW5nIGhhcyBzdG9wcGVkICovCisJICAgIH0KKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChlbmNfZGJjcyAhPSAwKQorCSAgICB7CisJCS8qIENoZWNrIGlmIG92ZXJ3cml0aW5nIGEgZG91YmxlLWJ5dGUgd2l0aCBhIHNpbmdsZS1ieXRlIG9yCisJCSAqIHRoZSBvdGhlciB3YXkgYXJvdW5kIHJlcXVpcmVzIGFub3RoZXIgY2hhcmFjdGVyIHRvIGJlCisJCSAqIHJlZHJhd24uICBGb3IgVVRGLTggdGhpcyBpc24ndCBuZWVkZWQsIGJlY2F1c2UgY29tcGFyaW5nCisJCSAqIFNjcmVlbkxpbmVzVUNbXSBpcyBzdWZmaWNpZW50LiAqLworCQlpZiAoY2hhcl9jZWxscyA9PSAxCisJCQkmJiBjb2wgKyAxIDwgZW5kY29sCisJCQkmJiAoKm1iX29mZjJjZWxscykob2ZmX3RvKSA+IDEpCisJCXsKKwkJICAgIC8qIFdyaXRpbmcgYSBzaW5nbGUtY2VsbCBjaGFyYWN0ZXIgb3ZlciBhIGRvdWJsZS1jZWxsCisJCSAgICAgKiBjaGFyYWN0ZXI6IG5lZWQgdG8gcmVkcmF3IHRoZSBuZXh0IGNlbGwuICovCisJCSAgICBTY3JlZW5MaW5lc1tvZmZfdG8gKyAxXSA9IDA7CisJCSAgICByZWRyYXdfbmV4dCA9IFRSVUU7CisJCX0KKwkJZWxzZSBpZiAoY2hhcl9jZWxscyA9PSAyCisJCQkmJiBjb2wgKyAyIDwgZW5kY29sCisJCQkmJiAoKm1iX29mZjJjZWxscykob2ZmX3RvKSA9PSAxCisJCQkmJiAoKm1iX29mZjJjZWxscykob2ZmX3RvICsgMSkgPiAxKQorCQl7CisJCSAgICAvKiBXcml0aW5nIHRoZSBzZWNvbmQgaGFsZiBvZiBhIGRvdWJsZS1jZWxsIGNoYXJhY3RlciBvdmVyCisJCSAgICAgKiBhIGRvdWJsZS1jZWxsIGNoYXJhY3RlcjogbmVlZCB0byByZWRyYXcgdGhlIHNlY29uZAorCQkgICAgICogY2VsbC4gKi8KKwkJICAgIFNjcmVlbkxpbmVzW29mZl90byArIDJdID0gMDsKKwkJICAgIHJlZHJhd19uZXh0ID0gVFJVRTsKKwkJfQorCisJCWlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUpCisJCSAgICBTY3JlZW5MaW5lczJbb2ZmX3RvXSA9IFNjcmVlbkxpbmVzMltvZmZfZnJvbV07CisJICAgIH0KKwkgICAgLyogV2hlbiB3cml0aW5nIGEgc2luZ2xlLXdpZHRoIGNoYXJhY3RlciBvdmVyIGEgZG91YmxlLXdpZHRoCisJICAgICAqIGNoYXJhY3RlciBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgcmVkcmF3biB0ZXh0LCBuZWVkIHRvIGNsZWFyIG91dAorCSAgICAgKiB0aGUgcmlnaHQgaGFsdmUgb2YgdGhlIG9sZCBjaGFyYWN0ZXIuCisJICAgICAqIEFsc28gcmVxdWlyZWQgd2hlbiB3cml0aW5nIHRoZSByaWdodCBoYWx2ZSBvZiBhIGRvdWJsZS13aWR0aAorCSAgICAgKiBjaGFyIG92ZXIgdGhlIGxlZnQgaGFsdmUgb2YgYW4gZXhpc3Rpbmcgb25lLiAqLworCSAgICBpZiAoaGFzX21ieXRlICYmIGNvbCArIGNoYXJfY2VsbHMgPT0gZW5kY29sCisJCSAgICAmJiAoKGNoYXJfY2VsbHMgPT0gMQorCQkJICAgICYmICgqbWJfb2ZmMmNlbGxzKShvZmZfdG8pID4gMSkKKwkJCXx8IChjaGFyX2NlbGxzID09IDIKKwkJCSAgICAmJiAoKm1iX29mZjJjZWxscykob2ZmX3RvKSA9PSAxCisJCQkgICAgJiYgKCptYl9vZmYyY2VsbHMpKG9mZl90byArIDEpID4gMSkpKQorCQljbGVhcl9uZXh0ID0gVFJVRTsKKyNlbmRpZgorCisJICAgIFNjcmVlbkxpbmVzW29mZl90b10gPSBTY3JlZW5MaW5lc1tvZmZfZnJvbV07CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoZW5jX3V0ZjgpCisJICAgIHsKKwkJU2NyZWVuTGluZXNVQ1tvZmZfdG9dID0gU2NyZWVuTGluZXNVQ1tvZmZfZnJvbV07CisJCWlmIChTY3JlZW5MaW5lc1VDW29mZl9mcm9tXSAhPSAwKQorCQl7CisJCSAgICBTY3JlZW5MaW5lc0MxW29mZl90b10gPSBTY3JlZW5MaW5lc0MxW29mZl9mcm9tXTsKKwkJICAgIFNjcmVlbkxpbmVzQzJbb2ZmX3RvXSA9IFNjcmVlbkxpbmVzQzJbb2ZmX2Zyb21dOworCQl9CisJICAgIH0KKwkgICAgaWYgKGNoYXJfY2VsbHMgPT0gMikKKwkJU2NyZWVuTGluZXNbb2ZmX3RvICsgMV0gPSBTY3JlZW5MaW5lc1tvZmZfZnJvbSArIDFdOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKFVOSVgpCisJICAgIC8qIFRoZSBib2xkIHRyaWNrIG1ha2VzIGEgc2luZ2xlIHJvdyBvZiBwaXhlbHMgYXBwZWFyIGluIHRoZSBuZXh0CisJICAgICAqIGNoYXJhY3Rlci4gIFdoZW4gYSBib2xkIGNoYXJhY3RlciBpcyByZW1vdmVkLCB0aGUgbmV4dAorCSAgICAgKiBjaGFyYWN0ZXIgc2hvdWxkIGJlIHJlZHJhd24gdG9vLiAgVGhpcyBoYXBwZW5zIGZvciBvdXIgb3duIEdVSQorCSAgICAgKiBhbmQgZm9yIHNvbWUgeHRlcm1zLiAqLworCSAgICBpZiAoCisjIGlmZGVmIEZFQVRfR1VJCisJCSAgICBndWkuaW5fdXNlCisjIGVuZGlmCisjIGlmIGRlZmluZWQoRkVBVF9HVUkpICYmIGRlZmluZWQoVU5JWCkKKwkJICAgIHx8CisjIGVuZGlmCisjIGlmZGVmIFVOSVgKKwkJICAgIHRlcm1faXNfeHRlcm0KKyMgZW5kaWYKKwkJICAgICkKKwkgICAgeworCQlobCA9IFNjcmVlbkF0dHJzW29mZl90b107CisJCWlmIChobCA+IEhMX0FMTCB8fCAoaGwgJiBITF9CT0xEKSkKKwkJICAgIHJlZHJhd19uZXh0ID0gVFJVRTsKKwkgICAgfQorI2VuZGlmCisJICAgIFNjcmVlbkF0dHJzW29mZl90b10gPSBTY3JlZW5BdHRyc1tvZmZfZnJvbV07CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoZW5jX2RiY3MgIT0gMCAmJiBjaGFyX2NlbGxzID09IDIpCisJICAgIHsKKwkJLyoganVzdCBhIGhhY2s6IEl0IG1ha2VzIHR3byBieXRlcyBvZiBEQkNTIGhhdmUgc2FtZSBhdHRyICovCisJCVNjcmVlbkF0dHJzW29mZl90byArIDFdID0gU2NyZWVuQXR0cnNbb2ZmX2Zyb21dOworCQlzY3JlZW5fY2hhcl8yKG9mZl90bywgcm93LCBjb2wgKyBjb2xvZmYpOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCQlzY3JlZW5fY2hhcihvZmZfdG8sIHJvdywgY29sICsgY29sb2ZmKTsKKwl9CisJZWxzZSBpZiAoICBwX3dpdgorI2lmZGVmIEZFQVRfR1VJCisJCSYmICFndWkuaW5fdXNlCisjZW5kaWYKKwkJJiYgY29sICsgY29sb2ZmID4gMCkKKwl7CisJICAgIGlmIChTY3JlZW5BdHRyc1tvZmZfdG9dID09IFNjcmVlbkF0dHJzW29mZl90byAtIDFdKQorCSAgICB7CisJCS8qCisJCSAqIERvbid0IG91dHB1dCBzdG9wLWhpZ2hsaWdodCB3aGVuIG1vdmluZyB0aGUgY3Vyc29yLCBpdCB3aWxsCisJCSAqIHN0b3AgdGhlIGhpZ2hsaWdodGluZyB3aGVuIGl0IHNob3VsZCBjb250aW51ZS4KKwkJICovCisJCXNjcmVlbl9hdHRyID0gMDsKKwkgICAgfQorCSAgICBlbHNlIGlmIChzY3JlZW5fYXR0ciAhPSAwKQorCQlzY3JlZW5fc3RvcF9oaWdobGlnaHQoKTsKKwl9CisKKwlvZmZfdG8gKz0gQ0hBUl9DRUxMUzsKKwlvZmZfZnJvbSArPSBDSEFSX0NFTExTOworCWNvbCArPSBDSEFSX0NFTExTOworICAgIH0KKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoY2xlYXJfbmV4dCkKKyAgICB7CisJLyogQ2xlYXIgdGhlIHNlY29uZCBoYWxmIG9mIGEgZG91YmxlLXdpZGUgY2hhcmFjdGVyIG9mIHdoaWNoIHRoZSBsZWZ0CisJICogaGFsZiB3YXMgb3ZlcndyaXR0ZW4gd2l0aCBhIHNpbmdsZS13aWRlIGNoYXJhY3Rlci4gKi8KKwlTY3JlZW5MaW5lc1tvZmZfdG9dID0gJyAnOworCWlmIChlbmNfdXRmOCkKKwkgICAgU2NyZWVuTGluZXNVQ1tvZmZfdG9dID0gMDsKKwlzY3JlZW5fY2hhcihvZmZfdG8sIHJvdywgY29sICsgY29sb2ZmKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChjbGVhcl93aWR0aCA+IDAKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkgICAgJiYgIXJsZmxhZworI2VuZGlmCisJCQkJICAgKQorICAgIHsKKyNpZmRlZiBGRUFUX0dVSQorCWludCBzdGFydENvbCA9IGNvbDsKKyNlbmRpZgorCisJLyogYmxhbmsgb3V0IHRoZSByZXN0IG9mIHRoZSBsaW5lICovCisJd2hpbGUgKGNvbCA8IGNsZWFyX3dpZHRoICYmIFNjcmVlbkxpbmVzW29mZl90b10gPT0gJyAnCisJCQkJCQkgICYmIFNjcmVlbkF0dHJzW29mZl90b10gPT0gMAorI2lmZGVmIEZFQVRfTUJZVEUKKwkJCQkgICYmICghZW5jX3V0ZjggfHwgU2NyZWVuTGluZXNVQ1tvZmZfdG9dID09IDApCisjZW5kaWYKKwkJCQkJCSAgKQorCXsKKwkgICAgKytvZmZfdG87CisJICAgICsrY29sOworCX0KKwlpZiAoY29sIDwgY2xlYXJfd2lkdGgpCisJeworI2lmZGVmIEZFQVRfR1VJCisJICAgIC8qCisJICAgICAqIEluIHRoZSBHVUksIGNsZWFyaW5nIHRoZSByZXN0IG9mIHRoZSBsaW5lIG1heSBsZWF2ZSBwaXhlbHMKKwkgICAgICogYmVoaW5kIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgY2xlYXJlZCB3YXMgYm9sZC4gIFNvbWUgYm9sZAorCSAgICAgKiBmb250cyBzcGlsbCBvdmVyIHRoZSBsZWZ0LiAgSW4gdGhpcyBjYXNlIHdlIHJlZHJhdyB0aGUgcHJldmlvdXMKKwkgICAgICogY2hhcmFjdGVyIHRvby4gIElmIHdlIGRpZG4ndCBza2lwIGFueSBibGFua3MgYWJvdmUsIHRoZW4gd2UKKwkgICAgICogb25seSByZWRyYXcgaWYgdGhlIGNoYXJhY3RlciB3YXNuJ3QgYWxyZWFkeSByZWRyYXduIGFueXdheS4KKwkgICAgICovCisJICAgIGlmIChndWkuaW5fdXNlICYmIChjb2wgPiBzdGFydENvbCB8fCAhcmVkcmF3X3RoaXMpCisjIGlmZGVmIEZFQVRfTUJZVEUKKwkJICAgICYmIGVuY19kYmNzID09IDAKKyMgZW5kaWYKKwkgICAgICAgKQorCSAgICB7CisJCWhsID0gU2NyZWVuQXR0cnNbb2ZmX3RvXTsKKwkJaWYgKGhsID4gSExfQUxMIHx8IChobCAmIEhMX0JPTEQpKQorCQkgICAgc2NyZWVuX2NoYXIob2ZmX3RvIC0gMSwgcm93LCBjb2wgKyBjb2xvZmYgLSAxKTsKKwkgICAgfQorI2VuZGlmCisJICAgIHNjcmVlbl9maWxsKHJvdywgcm93ICsgMSwgY29sICsgY29sb2ZmLCBjbGVhcl93aWR0aCArIGNvbG9mZiwKKwkJCQkJCQkJICcgJywgJyAnLCAwKTsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCSAgICBvZmZfdG8gKz0gY2xlYXJfd2lkdGggLSBjb2w7CisJICAgIGNvbCA9IGNsZWFyX3dpZHRoOworI2VuZGlmCisJfQorICAgIH0KKworICAgIGlmIChjbGVhcl93aWR0aCA+IDApCisgICAgeworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJLyogRm9yIGEgd2luZG93IHRoYXQncyBsZWZ0IG9mIGFub3RoZXIsIGRyYXcgdGhlIHNlcGFyYXRvciBjaGFyLiAqLworCWlmIChjb2wgKyBjb2xvZmYgPCBDb2x1bW5zKQorCXsKKwkgICAgaW50IGM7CisKKwkgICAgYyA9IGZpbGxjaGFyX3ZzZXAoJmhsKTsKKwkgICAgaWYgKFNjcmVlbkxpbmVzW29mZl90b10gIT0gYworIyBpZmRlZiBGRUFUX01CWVRFCisJCSAgICB8fCAoZW5jX3V0ZjgKKwkJCSAgICAgICYmIFNjcmVlbkxpbmVzVUNbb2ZmX3RvXSAhPSAoYyA+PSAweDgwID8gYyA6IDApKQorIyBlbmRpZgorCQkgICAgfHwgU2NyZWVuQXR0cnNbb2ZmX3RvXSAhPSBobCkKKwkgICAgeworCQlTY3JlZW5MaW5lc1tvZmZfdG9dID0gYzsKKwkJU2NyZWVuQXR0cnNbb2ZmX3RvXSA9IGhsOworIyBpZmRlZiBGRUFUX01CWVRFCisJCWlmIChlbmNfdXRmOCkKKwkJeworCQkgICAgaWYgKGMgPj0gMHg4MCkKKwkJICAgIHsKKwkJCVNjcmVlbkxpbmVzVUNbb2ZmX3RvXSA9IGM7CisJCQlTY3JlZW5MaW5lc0MxW29mZl90b10gPSAwOworCQkJU2NyZWVuTGluZXNDMltvZmZfdG9dID0gMDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCVNjcmVlbkxpbmVzVUNbb2ZmX3RvXSA9IDA7CisJCX0KKyMgZW5kaWYKKwkJc2NyZWVuX2NoYXIob2ZmX3RvLCByb3csIGNvbCArIGNvbG9mZik7CisJICAgIH0KKwl9CisJZWxzZQorI2VuZGlmCisJICAgIExpbmVXcmFwc1tyb3ddID0gRkFMU0U7CisgICAgfQorfQorCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKy8qCisgKiBNaXJyb3IgdGV4dCAic3RyIiBmb3IgcmlnaHQtbGllZnQgZGlzcGxheWluZy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitybF9taXJyb3Ioc3RyKQorICAgIGNoYXJfdQkqc3RyOworeworICAgIGNoYXJfdQkqcDEsICpwMjsKKyAgICBpbnQJCXQ7CisKKyAgICBmb3IgKHAxID0gc3RyLCBwMiA9IHN0ciArIFNUUkxFTihzdHIpIC0gMTsgcDEgPCBwMjsgKytwMSwgLS1wMikKKyAgICB7CisJdCA9ICpwMTsKKwkqcDEgPSAqcDI7CisJKnAyID0gdDsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIG1hcmsgYWxsIHN0YXR1cyBsaW5lcyBmb3IgcmVkcmF3OyB1c2VkIGFmdGVyIGZpcnN0IDpjZAorICovCisgICAgdm9pZAorc3RhdHVzX3JlZHJhd19hbGwoKQoreworICAgIHdpbl9UCSp3cDsKKworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3A7IHdwID0gd3AtPndfbmV4dCkKKwlpZiAod3AtPndfc3RhdHVzX2hlaWdodCkKKwl7CisJICAgIHdwLT53X3JlZHJfc3RhdHVzID0gVFJVRTsKKwkgICAgcmVkcmF3X2xhdGVyKFZBTElEKTsKKwl9Cit9CisKKy8qCisgKiBtYXJrIGFsbCBzdGF0dXMgbGluZXMgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIGZvciByZWRyYXcKKyAqLworICAgIHZvaWQKK3N0YXR1c19yZWRyYXdfY3VyYnVmKCkKK3sKKyAgICB3aW5fVAkqd3A7CisKKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwOyB3cCA9IHdwLT53X25leHQpCisJaWYgKHdwLT53X3N0YXR1c19oZWlnaHQgIT0gMCAmJiB3cC0+d19idWZmZXIgPT0gY3VyYnVmKQorCXsKKwkgICAgd3AtPndfcmVkcl9zdGF0dXMgPSBUUlVFOworCSAgICByZWRyYXdfbGF0ZXIoVkFMSUQpOworCX0KK30KKworLyoKKyAqIFJlZHJhdyBhbGwgc3RhdHVzIGxpbmVzIHRoYXQgbmVlZCB0byBiZSByZWRyYXduLgorICovCisgICAgdm9pZAorcmVkcmF3X3N0YXR1c2xpbmVzKCkKK3sKKyAgICB3aW5fVAkqd3A7CisKKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwOyB3cCA9IHdwLT53X25leHQpCisJaWYgKHdwLT53X3JlZHJfc3RhdHVzKQorCSAgICB3aW5fcmVkcl9zdGF0dXMod3ApOworfQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGRUFUX1dJTERNRU5VKSAmJiBkZWZpbmVkKEZFQVRfVkVSVFNQTElUKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZWRyYXcgYWxsIHN0YXR1cyBsaW5lcyBhdCB0aGUgYm90dG9tIG9mIGZyYW1lICJmcnAiLgorICovCisgICAgdm9pZAord2luX3JlZHJhd19sYXN0X3N0YXR1cyhmcnApCisgICAgZnJhbWVfVAkqZnJwOworeworICAgIGlmIChmcnAtPmZyX2xheW91dCA9PSBGUl9MRUFGKQorCWZycC0+ZnJfd2luLT53X3JlZHJfc3RhdHVzID0gVFJVRTsKKyAgICBlbHNlIGlmIChmcnAtPmZyX2xheW91dCA9PSBGUl9ST1cpCisgICAgeworCWZvciAoZnJwID0gZnJwLT5mcl9jaGlsZDsgZnJwICE9IE5VTEw7IGZycCA9IGZycC0+ZnJfbmV4dCkKKwkgICAgd2luX3JlZHJhd19sYXN0X3N0YXR1cyhmcnApOworICAgIH0KKyAgICBlbHNlIC8qIGZycC0+ZnJfbGF5b3V0ID09IEZSX0NPTCAqLworICAgIHsKKwlmcnAgPSBmcnAtPmZyX2NoaWxkOworCXdoaWxlIChmcnAtPmZyX25leHQgIT0gTlVMTCkKKwkgICAgZnJwID0gZnJwLT5mcl9uZXh0OworCXdpbl9yZWRyYXdfbGFzdF9zdGF0dXMoZnJwKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisvKgorICogRHJhdyB0aGUgdmVydGljYXAgc2VwYXJhdG9yIHJpZ2h0IG9mIHdpbmRvdyAid3AiIHN0YXJ0aW5nIHdpdGggbGluZSAicm93Ii4KKyAqLworICAgIHN0YXRpYyB2b2lkCitkcmF3X3ZzZXBfd2luKHdwLCByb3cpCisgICAgd2luX1QJKndwOworICAgIGludAkJcm93OworeworICAgIGludAkJaGw7CisgICAgaW50CQljOworCisgICAgaWYgKHdwLT53X3ZzZXBfd2lkdGgpCisgICAgeworCS8qIGRyYXcgdGhlIHZlcnRpY2FsIHNlcGFyYXRvciByaWdodCBvZiB0aGlzIHdpbmRvdyAqLworCWMgPSBmaWxsY2hhcl92c2VwKCZobCk7CisJc2NyZWVuX2ZpbGwoV19XSU5ST1cod3ApICsgcm93LCBXX1dJTlJPVyh3cCkgKyB3cC0+d19oZWlnaHQsCisJCVdfRU5EQ09MKHdwKSwgV19FTkRDT0wod3ApICsgMSwKKwkJYywgJyAnLCBobCk7CisgICAgfQorfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1dJTERNRU5VCitzdGF0aWMgaW50IHN0YXR1c19tYXRjaF9sZW4gX19BUkdTKChleHBhbmRfVCAqeHAsIGNoYXJfdSAqcykpOworCisvKgorICogR2V0IHRoZSBsZW5naHQgb2YgYW4gaXRlbSBhcyBpdCB3aWxsIGJlIHNob3duIGluIHRoZSBzdGF0dXMgbGluZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK3N0YXR1c19tYXRjaF9sZW4oeHAsIHMpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGNoYXJfdQkqczsKK3sKKyAgICBpbnQJbGVuID0gMDsKKworI2lmZGVmIEZFQVRfTUVOVQorICAgIGludCBlbWVudSA9ICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfTUVOVVMKKwkgICAgfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX01FTlVOQU1FUyk7CisKKyAgICAvKiBDaGVjayBmb3IgbWVudSBzZXBhcmF0b3JzIC0gcmVwbGFjZSB3aXRoICd8Jy4gKi8KKyAgICBpZiAoZW1lbnUgJiYgbWVudV9pc19zZXBhcmF0b3IocykpCisJcmV0dXJuIDE7CisjZW5kaWYKKworICAgIHdoaWxlICgqcyAhPSBOVUwpCisgICAgeworCS8qIERvbid0IGRpc3BsYXkgYmFja3NsYXNoZXMgdXNlZCBmb3IgZXNjYXBpbmcsIHRoZXkgbG9vayB1Z2x5LiAqLworCWlmIChyZW1fYmFja3NsYXNoKHMpCisjaWZkZWYgRkVBVF9NRU5VCisJCXx8IChlbWVudSAmJiAoc1swXSA9PSAnXFwnICYmIHNbMV0gIT0gTlVMKSkKKyNlbmRpZgorCQkpCisJICAgICsrczsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIGxlbiArPSBwdHIyY2VsbHMocyk7CisJICAgIHMgKz0gKCptYl9wdHIybGVuX2NoZWNrKShzKTsKKwl9CisJZWxzZQorI2VuZGlmCisJICAgIGxlbiArPSBwdHIyY2VsbHMocysrKTsKKworICAgIH0KKworICAgIHJldHVybiBsZW47Cit9CisKKy8qCisgKiBTaG93IHdpbGRjaGFyIG1hdGNoZXMgaW4gdGhlIHN0YXR1cyBsaW5lLgorICogU2hvdyBhdCBsZWFzdCB0aGUgIm1hdGNoIiBpdGVtLgorICogV2Ugc3RhcnQgYXQgaXRlbSAnZmlyc3RfbWF0Y2gnIGluIHRoZSBsaXN0IGFuZCBzaG93IGFsbCBtYXRjaGVzIHRoYXQgZml0LgorICoKKyAqIElmIGludmVyc2lvbiBpcyBwb3NzaWJsZSB3ZSB1c2UgaXQuIEVsc2UgJz0nIGNoYXJhY3RlcnMgYXJlIHVzZWQuCisgKi8KKyAgICB2b2lkCit3aW5fcmVkcl9zdGF0dXNfbWF0Y2hlcyh4cCwgbnVtX21hdGNoZXMsIG1hdGNoZXMsIG1hdGNoLCBzaG93dGFpbCkKKyAgICBleHBhbmRfVAkqeHA7CisgICAgaW50CQludW1fbWF0Y2hlczsKKyAgICBjaGFyX3UJKiptYXRjaGVzOwkvKiBsaXN0IG9mIG1hdGNoZXMgKi8KKyAgICBpbnQJCW1hdGNoOworICAgIGludAkJc2hvd3RhaWw7Cit7CisjZGVmaW5lIExfTUFUQ0gobSkgKHNob3d0YWlsID8gc21fZ2V0dGFpbChtYXRjaGVzW21dKSA6IG1hdGNoZXNbbV0pCisgICAgaW50CQlyb3c7CisgICAgY2hhcl91CSpidWY7CisgICAgaW50CQlsZW47CisgICAgaW50CQljbGVuOwkJLyogbGVuZ2h0IGluIHNjcmVlbiBjZWxscyAqLworICAgIGludAkJZmlsbGNoYXI7CisgICAgaW50CQlhdHRyOworICAgIGludAkJaTsKKyAgICBpbnQJCWhpZ2hsaWdodCA9IFRSVUU7CisgICAgY2hhcl91CSpzZWxzdGFydCA9IE5VTEw7CisgICAgaW50CQlzZWxzdGFydF9jb2wgPSAwOworICAgIGNoYXJfdQkqc2VsZW5kID0gTlVMTDsKKyAgICBzdGF0aWMgaW50CWZpcnN0X21hdGNoID0gMDsKKyAgICBpbnQJCWFkZF9sZWZ0ID0gRkFMU0U7CisgICAgY2hhcl91CSpzOworI2lmZGVmIEZFQVRfTUVOVQorICAgIGludAkJZW1lbnU7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpIHx8IGRlZmluZWQoRkVBVF9NRU5VKQorICAgIGludAkJbDsKKyNlbmRpZgorCisgICAgaWYgKG1hdGNoZXMgPT0gTlVMTCkJLyogaW50ZXJydXB0ZWQgY29tcGxldGlvbj8gKi8KKwlyZXR1cm47CisKKyAgICBidWYgPSBhbGxvYygodW5zaWduZWQpQ29sdW1ucyArIDEpOworICAgIGlmIChidWYgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICBpZiAobWF0Y2ggPT0gLTEpCS8qIGRvbid0IHNob3cgbWF0Y2ggYnV0IG9yaWdpbmFsIHRleHQgKi8KKyAgICB7CisJbWF0Y2ggPSAwOworCWhpZ2hsaWdodCA9IEZBTFNFOworICAgIH0KKyAgICAvKiBjb3VudCAxIGZvciB0aGUgZW5kaW5nICI+IiAqLworICAgIGNsZW4gPSBzdGF0dXNfbWF0Y2hfbGVuKHhwLCBMX01BVENIKG1hdGNoKSkgKyAzOworICAgIGlmIChtYXRjaCA9PSAwKQorCWZpcnN0X21hdGNoID0gMDsKKyAgICBlbHNlIGlmIChtYXRjaCA8IGZpcnN0X21hdGNoKQorICAgIHsKKwkvKiBqdW1waW5nIGxlZnQsIGFzIGZhciBhcyB3ZSBjYW4gZ28gKi8KKwlmaXJzdF9tYXRjaCA9IG1hdGNoOworCWFkZF9sZWZ0ID0gVFJVRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBjaGVjayBpZiBtYXRjaCBmaXRzIG9uIHRoZSBzY3JlZW4gKi8KKwlmb3IgKGkgPSBmaXJzdF9tYXRjaDsgaSA8IG1hdGNoOyArK2kpCisJICAgIGNsZW4gKz0gc3RhdHVzX21hdGNoX2xlbih4cCwgTF9NQVRDSChpKSkgKyAyOworCWlmIChmaXJzdF9tYXRjaCA+IDApCisJICAgIGNsZW4gKz0gMjsKKwkvKiBqdW1waW5nIHJpZ2h0LCBwdXQgbWF0Y2ggYXQgdGhlIGxlZnQgKi8KKwlpZiAoKGxvbmcpY2xlbiA+IENvbHVtbnMpCisJeworCSAgICBmaXJzdF9tYXRjaCA9IG1hdGNoOworCSAgICAvKiBpZiBzaG93aW5nIHRoZSBsYXN0IG1hdGNoLCB3ZSBjYW4gYWRkIHNvbWUgb24gdGhlIGxlZnQgKi8KKwkgICAgY2xlbiA9IDI7CisJICAgIGZvciAoaSA9IG1hdGNoOyBpIDwgbnVtX21hdGNoZXM7ICsraSkKKwkgICAgeworCQljbGVuICs9IHN0YXR1c19tYXRjaF9sZW4oeHAsIExfTUFUQ0goaSkpICsgMjsKKwkJaWYgKChsb25nKWNsZW4gPj0gQ29sdW1ucykKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIGlmIChpID09IG51bV9tYXRjaGVzKQorCQlhZGRfbGVmdCA9IFRSVUU7CisJfQorICAgIH0KKyAgICBpZiAoYWRkX2xlZnQpCisJd2hpbGUgKGZpcnN0X21hdGNoID4gMCkKKwl7CisJICAgIGNsZW4gKz0gc3RhdHVzX21hdGNoX2xlbih4cCwgTF9NQVRDSChmaXJzdF9tYXRjaCAtIDEpKSArIDI7CisJICAgIGlmICgobG9uZyljbGVuID49IENvbHVtbnMpCisJCWJyZWFrOworCSAgICAtLWZpcnN0X21hdGNoOworCX0KKworICAgIGZpbGxjaGFyID0gZmlsbGNoYXJfc3RhdHVzKCZhdHRyLCBUUlVFKTsKKworICAgIGlmIChmaXJzdF9tYXRjaCA9PSAwKQorICAgIHsKKwkqYnVmID0gTlVMOworCWxlbiA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJU1RSQ1BZKGJ1ZiwgIjwgIik7CisJbGVuID0gMjsKKyAgICB9CisgICAgY2xlbiA9IGxlbjsKKworICAgIGkgPSBmaXJzdF9tYXRjaDsKKyAgICB3aGlsZSAoKGxvbmcpKGNsZW4gKyBzdGF0dXNfbWF0Y2hfbGVuKHhwLCBMX01BVENIKGkpKSArIDIpIDwgQ29sdW1ucykKKyAgICB7CisJaWYgKGkgPT0gbWF0Y2gpCisJeworCSAgICBzZWxzdGFydCA9IGJ1ZiArIGxlbjsKKwkgICAgc2Vsc3RhcnRfY29sID0gY2xlbjsKKwl9CisKKwlzID0gTF9NQVRDSChpKTsKKwkvKiBDaGVjayBmb3IgbWVudSBzZXBhcmF0b3JzIC0gcmVwbGFjZSB3aXRoICd8JyAqLworI2lmZGVmIEZFQVRfTUVOVQorCWVtZW51ID0gKHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9NRU5VUworCQl8fCB4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfTUVOVU5BTUVTKTsKKwlpZiAoZW1lbnUgJiYgbWVudV9pc19zZXBhcmF0b3IocykpCisJeworCSAgICBTVFJDUFkoYnVmICsgbGVuLCB0cmFuc2NoYXIoJ3wnKSk7CisJICAgIGwgPSAoaW50KVNUUkxFTihidWYgKyBsZW4pOworCSAgICBsZW4gKz0gbDsKKwkgICAgY2xlbiArPSBsOworCX0KKwllbHNlCisjZW5kaWYKKwkgICAgZm9yICggOyAqcyAhPSBOVUw7ICsrcykKKwl7CisJICAgIC8qIERvbid0IGRpc3BsYXkgYmFja3NsYXNoZXMgdXNlZCBmb3IgZXNjYXBpbmcsIHRoZXkgbG9vayB1Z2x5LiAqLworCSAgICBpZiAocmVtX2JhY2tzbGFzaChzKQorI2lmZGVmIEZFQVRfTUVOVQorCQkgICAgfHwgKGVtZW51CisJCQkgICYmIChzWzBdID09ICdcdCcgfHwgKHNbMF0gPT0gJ1xcJyAmJiBzWzFdICE9IE5VTCkpKQorI2VuZGlmCisJCSAgICApCisJCSsrczsKKwkgICAgY2xlbiArPSBwdHIyY2VsbHMocyk7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlICYmIChsID0gKCptYl9wdHIybGVuX2NoZWNrKShzKSkgPiAxKQorCSAgICB7CisJCVNUUk5DUFkoYnVmICsgbGVuLCBzLCBsKTsKKwkJcyArPSBsIC0gMTsKKwkJbGVuICs9IGw7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkJU1RSQ1BZKGJ1ZiArIGxlbiwgdHJhbnNjaGFyX2J5dGUoKnMpKTsKKwkJbGVuICs9IChpbnQpU1RSTEVOKGJ1ZiArIGxlbik7CisJICAgIH0KKwl9CisJaWYgKGkgPT0gbWF0Y2gpCisJICAgIHNlbGVuZCA9IGJ1ZiArIGxlbjsKKworCSooYnVmICsgbGVuKyspID0gJyAnOworCSooYnVmICsgbGVuKyspID0gJyAnOworCWNsZW4gKz0gMjsKKwlpZiAoKytpID09IG51bV9tYXRjaGVzKQorCQlicmVhazsKKyAgICB9CisKKyAgICBpZiAoaSAhPSBudW1fbWF0Y2hlcykKKyAgICB7CisJKihidWYgKyBsZW4rKykgPSAnPic7CisJKytjbGVuOworICAgIH0KKworICAgIGJ1ZltsZW5dID0gTlVMOworCisgICAgcm93ID0gY21kbGluZV9yb3cgLSAxOworICAgIGlmIChyb3cgPj0gMCkKKyAgICB7CisJaWYgKHdpbGRfbWVudV9zaG93aW5nID09IDApCisJeworCSAgICBpZiAobXNnX3Njcm9sbGVkID4gMCkKKwkgICAgeworCQkvKiBQdXQgdGhlIHdpbGRtZW51IGp1c3QgYWJvdmUgdGhlIGNvbW1hbmQgbGluZS4gIElmIHRoZXJlIGlzCisJCSAqIG5vIHJvb20sIHNjcm9sbCB0aGUgc2NyZWVuIG9uZSBsaW5lIHVwLiAqLworCQlpZiAoY21kbGluZV9yb3cgPT0gUm93cyAtIDEpCisJCXsKKwkJICAgIHNjcmVlbl9kZWxfbGluZXMoMCwgMCwgMSwgKGludClSb3dzLCBUUlVFLCBOVUxMKTsKKwkJICAgICsrbXNnX3Njcm9sbGVkOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgKytjbWRsaW5lX3JvdzsKKwkJICAgICsrcm93OworCQl9CisJCXdpbGRfbWVudV9zaG93aW5nID0gV01fU0NST0xMRUQ7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qIENyZWF0ZSBzdGF0dXMgbGluZSBpZiBuZWVkZWQgYnkgc2V0dGluZyAnbGFzdHN0YXR1cycgdG8gMi4KKwkJICogU2V0ICd3aW5taW5oZWlnaHQnIHRvIHplcm8gdG8gYXZvaWQgdGhhdCB0aGUgd2luZG93IGlzCisJCSAqIHJlc2l6ZWQuICovCisJCWlmIChsYXN0d2luLT53X3N0YXR1c19oZWlnaHQgPT0gMCkKKwkJeworCQkgICAgc2F2ZV9wX2xzID0gcF9sczsKKwkJICAgIHNhdmVfcF93bWggPSBwX3dtaDsKKwkJICAgIHBfbHMgPSAyOworCQkgICAgcF93bWggPSAwOworCQkgICAgbGFzdF9zdGF0dXMoRkFMU0UpOworCQl9CisJCXdpbGRfbWVudV9zaG93aW5nID0gV01fU0hPV047CisJICAgIH0KKwl9CisKKwlzY3JlZW5fcHV0cyhidWYsIHJvdywgMCwgYXR0cik7CisJaWYgKHNlbHN0YXJ0ICE9IE5VTEwgJiYgaGlnaGxpZ2h0KQorCXsKKwkgICAgKnNlbGVuZCA9IE5VTDsKKwkgICAgc2NyZWVuX3B1dHMoc2Vsc3RhcnQsIHJvdywgc2Vsc3RhcnRfY29sLCBobF9hdHRyKEhMRl9XTSkpOworCX0KKworCXNjcmVlbl9maWxsKHJvdywgcm93ICsgMSwgY2xlbiwgKGludClDb2x1bW5zLCBmaWxsY2hhciwgZmlsbGNoYXIsIGF0dHIpOworICAgIH0KKworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgd2luX3JlZHJhd19sYXN0X3N0YXR1cyh0b3BmcmFtZSk7CisjZWxzZQorICAgIGxhc3R3aW4tPndfcmVkcl9zdGF0dXMgPSBUUlVFOworI2VuZGlmCisgICAgdmltX2ZyZWUoYnVmKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmVkcmF3IHRoZSBzdGF0dXMgbGluZSBvZiB3aW5kb3cgd3AuCisgKgorICogSWYgaW52ZXJzaW9uIGlzIHBvc3NpYmxlIHdlIHVzZSBpdC4gRWxzZSAnPScgY2hhcmFjdGVycyBhcmUgdXNlZC4KKyAqLworICAgIHZvaWQKK3dpbl9yZWRyX3N0YXR1cyh3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgaW50CQlyb3c7CisgICAgY2hhcl91CSpwOworICAgIGludAkJbGVuOworICAgIGludAkJZmlsbGNoYXI7CisgICAgaW50CQlhdHRyOworICAgIGludAkJdGhpc19ydV9jb2w7CisKKyAgICB3cC0+d19yZWRyX3N0YXR1cyA9IEZBTFNFOworICAgIGlmICh3cC0+d19zdGF0dXNfaGVpZ2h0ID09IDApCisgICAgeworCS8qIG5vIHN0YXR1cyBsaW5lLCBjYW4gb25seSBiZSBsYXN0IHdpbmRvdyAqLworCXJlZHJhd19jbWRsaW5lID0gVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZiAoIXJlZHJhd2luZygpKQorICAgIHsKKwkvKiBEb24ndCByZWRyYXcgcmlnaHQgbm93LCBkbyBpdCBsYXRlci4gKi8KKwl3cC0+d19yZWRyX3N0YXR1cyA9IFRSVUU7CisgICAgfQorI2lmZGVmIEZFQVRfU1RMX09QVAorICAgIGVsc2UgaWYgKCpwX3N0bCkKKyAgICB7CisJLyogcmVkcmF3IGN1c3RvbSBzdGF0dXMgbGluZSAqLworCXdpbl9yZWRyX2N1c3RvbSh3cCwgRkFMU0UpOworICAgIH0KKyNlbmRpZgorICAgIGVsc2UKKyAgICB7CisJZmlsbGNoYXIgPSBmaWxsY2hhcl9zdGF0dXMoJmF0dHIsIHdwID09IGN1cndpbik7CisKKwlpZiAoYnVmX3NwbmFtZSh3cC0+d19idWZmZXIpICE9IE5VTEwpCisJICAgIFNUUkNQWShOYW1lQnVmZiwgYnVmX3NwbmFtZSh3cC0+d19idWZmZXIpKTsKKwllbHNlCisJICAgIGhvbWVfcmVwbGFjZSh3cC0+d19idWZmZXIsIHdwLT53X2J1ZmZlci0+Yl9mbmFtZSwgTmFtZUJ1ZmYsCisJCQkJCQkJICAgICAgTUFYUEFUSEwsIFRSVUUpOworCXRyYW5zX2NoYXJhY3RlcnMoTmFtZUJ1ZmYsIE1BWFBBVEhMKTsKKwlwID0gTmFtZUJ1ZmY7CisJbGVuID0gKGludClTVFJMRU4ocCk7CisKKwlpZiAod3AtPndfYnVmZmVyLT5iX2hlbHAKKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJCXx8IHdwLT53X3BfcHZ3CisjZW5kaWYKKwkJfHwgYnVmSXNDaGFuZ2VkKHdwLT53X2J1ZmZlcikKKwkJfHwgd3AtPndfYnVmZmVyLT5iX3Bfcm8pCisJICAgICoocCArIGxlbisrKSA9ICcgJzsKKwlpZiAod3AtPndfYnVmZmVyLT5iX2hlbHApCisJeworCSAgICBTVFJDUFkocCArIGxlbiwgXygiW2hlbHBdIikpOworCSAgICBsZW4gKz0gKGludClTVFJMRU4ocCArIGxlbik7CisJfQorI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKwlpZiAod3AtPndfcF9wdncpCisJeworCSAgICBTVFJDUFkocCArIGxlbiwgXygiW1ByZXZpZXddIikpOworCSAgICBsZW4gKz0gKGludClTVFJMRU4ocCArIGxlbik7CisJfQorI2VuZGlmCisJaWYgKGJ1ZklzQ2hhbmdlZCh3cC0+d19idWZmZXIpKQorCXsKKwkgICAgU1RSQ1BZKHAgKyBsZW4sICJbK10iKTsKKwkgICAgbGVuICs9IDM7CisJfQorCWlmICh3cC0+d19idWZmZXItPmJfcF9ybykKKwl7CisJICAgIFNUUkNQWShwICsgbGVuLCAiW1JPXSIpOworCSAgICBsZW4gKz0gNDsKKwl9CisKKyNpZm5kZWYgRkVBVF9WRVJUU1BMSVQKKwl0aGlzX3J1X2NvbCA9IHJ1X2NvbDsKKwlpZiAodGhpc19ydV9jb2wgPCAoQ29sdW1ucyArIDEpIC8gMikKKwkgICAgdGhpc19ydV9jb2wgPSAoQ29sdW1ucyArIDEpIC8gMjsKKyNlbHNlCisJdGhpc19ydV9jb2wgPSBydV9jb2wgLSAoQ29sdW1ucyAtIFdfV0lEVEgod3ApKTsKKwlpZiAodGhpc19ydV9jb2wgPCAoV19XSURUSCh3cCkgKyAxKSAvIDIpCisJICAgIHRoaXNfcnVfY29sID0gKFdfV0lEVEgod3ApICsgMSkgLyAyOworCWlmICh0aGlzX3J1X2NvbCA8PSAxKQorCXsKKwkgICAgcCA9IChjaGFyX3UgKikiPCI7CQkvKiBObyByb29tIGZvciBmaWxlIG5hbWUhICovCisJICAgIGxlbiA9IDE7CisJfQorCWVsc2UKKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkgICAgeworCQlpbnQJY2xlbiA9IDAsIGk7CisKKwkJLyogQ291bnQgdG90YWwgbnVtYmVyIG9mIGRpc3BsYXkgY2VsbHMuICovCisJCWZvciAoaSA9IDA7IHBbaV0gIT0gTlVMOyBpICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCArIGkpKQorCQkgICAgY2xlbiArPSAoKm1iX3B0cjJjZWxscykocCArIGkpOworCQkvKiBGaW5kIGZpcnN0IGNoYXJhY3RlciB0aGF0IHdpbGwgZml0LgorCQkgKiBHb2luZyBmcm9tIHN0YXJ0IHRvIGVuZCBpcyBtdWNoIGZhc3RlciBmb3IgREJDUy4gKi8KKwkJZm9yIChpID0gMDsgcFtpXSAhPSBOVUwgJiYgY2xlbiA+PSB0aGlzX3J1X2NvbCAtIDE7CisJCQkJCSAgICAgIGkgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwICsgaSkpCisJCSAgICBjbGVuIC09ICgqbWJfcHRyMmNlbGxzKShwICsgaSk7CisJCWxlbiA9IGNsZW47CisJCWlmIChpID4gMCkKKwkJeworCQkgICAgcCA9IHAgKyBpIC0gMTsKKwkJICAgICpwID0gJzwnOworCQkgICAgKytsZW47CisJCX0KKworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICBpZiAobGVuID4gdGhpc19ydV9jb2wgLSAxKQorCSAgICB7CisJCXAgKz0gbGVuIC0gKHRoaXNfcnVfY29sIC0gMSk7CisJCSpwID0gJzwnOworCQlsZW4gPSB0aGlzX3J1X2NvbCAtIDE7CisJICAgIH0KKworCXJvdyA9IFdfV0lOUk9XKHdwKSArIHdwLT53X2hlaWdodDsKKwlzY3JlZW5fcHV0cyhwLCByb3csIFdfV0lOQ09MKHdwKSwgYXR0cik7CisJc2NyZWVuX2ZpbGwocm93LCByb3cgKyAxLCBsZW4gKyBXX1dJTkNPTCh3cCksCisJCQl0aGlzX3J1X2NvbCArIFdfV0lOQ09MKHdwKSwgZmlsbGNoYXIsIGZpbGxjaGFyLCBhdHRyKTsKKworCWlmIChnZXRfa2V5bWFwX3N0cih3cCwgTmFtZUJ1ZmYsIE1BWFBBVEhMKQorCQkmJiAoaW50KSh0aGlzX3J1X2NvbCAtIGxlbikgPiAoaW50KShTVFJMRU4oTmFtZUJ1ZmYpICsgMSkpCisJICAgIHNjcmVlbl9wdXRzKE5hbWVCdWZmLCByb3csIChpbnQpKHRoaXNfcnVfY29sIC0gU1RSTEVOKE5hbWVCdWZmKQorCQkJCQkJICAgLSAxICsgV19XSU5DT0wod3ApKSwgYXR0cik7CisKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworCXdpbl9yZWRyX3J1bGVyKHdwLCBUUlVFKTsKKyNlbmRpZgorICAgIH0KKworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgLyoKKyAgICAgKiBNYXkgbmVlZCB0byBkcmF3IHRoZSBjaGFyYWN0ZXIgYmVsb3cgdGhlIHZlcnRpY2FsIHNlcGFyYXRvci4KKyAgICAgKi8KKyAgICBpZiAod3AtPndfdnNlcF93aWR0aCAhPSAwICYmIHdwLT53X3N0YXR1c19oZWlnaHQgIT0gMCAmJiByZWRyYXdpbmcoKSkKKyAgICB7CisJaWYgKHN0bF9jb25uZWN0ZWQod3ApKQorCSAgICBmaWxsY2hhciA9IGZpbGxjaGFyX3N0YXR1cygmYXR0ciwgd3AgPT0gY3Vyd2luKTsKKwllbHNlCisJICAgIGZpbGxjaGFyID0gZmlsbGNoYXJfdnNlcCgmYXR0cik7CisJc2NyZWVuX3B1dGNoYXIoZmlsbGNoYXIsIFdfV0lOUk9XKHdwKSArIHdwLT53X2hlaWdodCwgV19FTkRDT0wod3ApLAorCQkJCQkJCQkJYXR0cik7CisgICAgfQorI2VuZGlmCit9CisKKyMgaWZkZWYgRkVBVF9WRVJUU1BMSVQKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgc3RhdHVzIGxpbmUgb2Ygd2luZG93ICJ3cCIgaXMgY29ubmVjdGVkIHRvIHRoZSBzdGF0dXMKKyAqIGxpbmUgb2YgdGhlIHdpbmRvdyByaWdodCBvZiBpdC4gIElmIG5vdCwgdGhlbiBpdCdzIGEgdmVydGljYWwgc2VwYXJhdG9yLgorICogT25seSBjYWxsIGlmICh3cC0+d192c2VwX3dpZHRoICE9IDApLgorICovCisgICAgaW50CitzdGxfY29ubmVjdGVkKHdwKQorICAgIHdpbl9UCSp3cDsKK3sKKyAgICBmcmFtZV9UCSpmcjsKKworICAgIGZyID0gd3AtPndfZnJhbWU7CisgICAgd2hpbGUgKGZyLT5mcl9wYXJlbnQgIT0gTlVMTCkKKyAgICB7CisJaWYgKGZyLT5mcl9wYXJlbnQtPmZyX2xheW91dCA9PSBGUl9DT0wpCisJeworCSAgICBpZiAoZnItPmZyX25leHQgIT0gTlVMTCkKKwkJYnJlYWs7CisJfQorCWVsc2UKKwl7CisJICAgIGlmIChmci0+ZnJfbmV4dCAhPSBOVUxMKQorCQlyZXR1cm4gVFJVRTsKKwl9CisJZnIgPSBmci0+ZnJfcGFyZW50OworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisjIGVuZGlmCisKKyNlbmRpZiAvKiBGRUFUX1dJTkRPV1MgKi8KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKEZFQVRfU1RMX09QVCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBHZXQgdGhlIHZhbHVlIHRvIHNob3cgZm9yIHRoZSBsYW5ndWFnZSBtYXBwaW5ncywgYWN0aXZlICdrZXltYXAnLgorICovCisgICAgaW50CitnZXRfa2V5bWFwX3N0cih3cCwgYnVmLCBsZW4pCisgICAgd2luX1QJKndwOworICAgIGNoYXJfdQkqYnVmOwkgICAgLyogYnVmZmVyIGZvciB0aGUgcmVzdWx0ICovCisgICAgaW50CQlsZW47CSAgICAvKiBsZW5ndGggb2YgYnVmZmVyICovCit7CisgICAgY2hhcl91CSpwOworCisgICAgaWYgKHdwLT53X2J1ZmZlci0+Yl9wX2ltaW5zZXJ0ICE9IEJfSU1PREVfTE1BUCkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICB7CisjaWZkZWYgRkVBVF9FVkFMCisJYnVmX1QJKm9sZF9jdXJidWYgPSBjdXJidWY7CisJd2luX1QJKm9sZF9jdXJ3aW4gPSBjdXJ3aW47CisJY2hhcl91CSpzOworCisJY3VyYnVmID0gd3AtPndfYnVmZmVyOworCWN1cndpbiA9IHdwOworCVNUUkNQWShidWYsICJiOmtleW1hcF9uYW1lIik7CS8qIG11c3QgYmUgd3JpdGFibGUgKi8KKwkrK2Vtc2dfc2tpcDsKKwlzID0gcCA9IGV2YWxfdG9fc3RyaW5nKGJ1ZiwgTlVMTCk7CisJLS1lbXNnX3NraXA7CisJY3VyYnVmID0gb2xkX2N1cmJ1ZjsKKwljdXJ3aW4gPSBvbGRfY3Vyd2luOworCWlmIChwID09IE5VTEwgfHwgKnAgPT0gTlVMKQorI2VuZGlmCisJeworI2lmZGVmIEZFQVRfS0VZTUFQCisJICAgIGlmICh3cC0+d19idWZmZXItPmJfa21hcF9zdGF0ZSAmIEtFWU1BUF9MT0FERUQpCisJCXAgPSB3cC0+d19idWZmZXItPmJfcF9rZXltYXA7CisJICAgIGVsc2UKKyNlbmRpZgorCQlwID0gKGNoYXJfdSAqKSJsYW5nIjsKKwl9CisJaWYgKChpbnQpKFNUUkxFTihwKSArIDMpIDwgbGVuKQorCSAgICBzcHJpbnRmKChjaGFyICopYnVmLCAiPCVzPiIsIHApOworCWVsc2UKKwkgICAgYnVmWzBdID0gTlVMOworI2lmZGVmIEZFQVRfRVZBTAorCXZpbV9mcmVlKHMpOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiBidWZbMF0gIT0gTlVMOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfU1RMX09QVCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZWRyYXcgdGhlIHN0YXR1cyBsaW5lIG9yIHJ1bGVyIG9mIHdpbmRvdyB3cC4KKyAqLworICAgIHN0YXRpYyB2b2lkCit3aW5fcmVkcl9jdXN0b20od3AsIFJ1bGVyKQorICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCVJ1bGVyOworeworICAgIGludAkJYXR0cjsKKyAgICBpbnQJCWN1cmF0dHI7CisgICAgaW50CQlyb3c7CisgICAgaW50CQljb2wgPSAwOworICAgIGludAkJbWF4d2lkdGg7CisgICAgaW50CQl3aWR0aDsKKyAgICBpbnQJCW47CisgICAgaW50CQlsZW47CisgICAgaW50CQlmaWxsY2hhcjsKKyAgICBjaGFyX3UJYnVmW01BWFBBVEhMXTsKKyAgICBjaGFyX3UJKnA7CisgICAgc3RydWN0CXN0bF9obHJlYyBobFtTVExfTUFYX0lURU1dOworCisgICAgLyogc2V0dXAgZW52aXJvbm1lbnQgZm9yIHRoZSB0YXNrIGF0IGhhbmQgKi8KKyAgICByb3cgPSBXX1dJTlJPVyh3cCkgKyB3cC0+d19oZWlnaHQ7CisgICAgZmlsbGNoYXIgPSBmaWxsY2hhcl9zdGF0dXMoJmF0dHIsIHdwID09IGN1cndpbik7CisgICAgbWF4d2lkdGggPSBXX1dJRFRIKHdwKTsKKyAgICBwID0gcF9zdGw7CisgICAgaWYgKFJ1bGVyKQorICAgIHsKKwlwID0gcF9ydWY7CisJLyogYWR2YW5jZSBwYXN0IGFueSBsZWFkaW5nIGdyb3VwIHNwZWMgLSBpbXBsaWNpdCBpbiBydV9jb2wgKi8KKwlpZiAoKnAgPT0gJyUnKQorCXsKKwkgICAgaWYgKCorK3AgPT0gJy0nKQorCQlwKys7CisJICAgIGlmIChhdG9pKChjaGFyICopIHApKQorCQl3aGlsZSAoVklNX0lTRElHSVQoKnApKQorCQkgICAgcCsrOworCSAgICBpZiAoKnArKyAhPSAnKCcpCisJCXAgPSBwX3J1ZjsKKwl9CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwljb2wgPSBydV9jb2wgLSAoQ29sdW1ucyAtIFdfV0lEVEgod3ApKTsKKwlpZiAoY29sIDwgKFdfV0lEVEgod3ApICsgMSkgLyAyKQorCSAgICBjb2wgPSAoV19XSURUSCh3cCkgKyAxKSAvIDI7CisjZWxzZQorCWNvbCA9IHJ1X2NvbDsKKwlpZiAoY29sID4gKENvbHVtbnMgKyAxKSAvIDIpCisJICAgIGNvbCA9IChDb2x1bW5zICsgMSkgLyAyOworI2VuZGlmCisJbWF4d2lkdGggPSBXX1dJRFRIKHdwKSAtIGNvbDsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwlpZiAoIXdwLT53X3N0YXR1c19oZWlnaHQpCisjZW5kaWYKKwl7CisJICAgIHJvdyA9IFJvd3MgLSAxOworCSAgICAtLW1heHdpZHRoOwkvKiB3cml0aW5nIGluIGxhc3QgY29sdW1uIG1heSBjYXVzZSBzY3JvbGxpbmcgKi8KKwkgICAgZmlsbGNoYXIgPSAnICc7CisJICAgIGF0dHIgPSAwOworCX0KKyAgICB9CisgICAgaWYgKG1heHdpZHRoIDw9IDApCisJcmV0dXJuOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgY29sICs9IFdfV0lOQ09MKHdwKTsKKyNlbmRpZgorCisgICAgd2lkdGggPSBidWlsZF9zdGxfc3RyX2hsKHdwLCBidWYsIHNpemVvZihidWYpLCBwLCBmaWxsY2hhciwgbWF4d2lkdGgsIGhsKTsKKyAgICBsZW4gPSBTVFJMRU4oYnVmKTsKKworICAgIHdoaWxlICh3aWR0aCA8IG1heHdpZHRoICYmIGxlbiA8IHNpemVvZihidWYpIC0gMSkKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWxlbiArPSAoKm1iX2NoYXIyYnl0ZXMpKGZpbGxjaGFyLCBidWYgKyBsZW4pOworI2Vsc2UKKwlidWZbbGVuKytdID0gZmlsbGNoYXI7CisjZW5kaWYKKwkrK3dpZHRoOworICAgIH0KKyAgICBidWZbbGVuXSA9IE5VTDsKKworICAgIGN1cmF0dHIgPSBhdHRyOworICAgIHAgPSBidWY7CisgICAgZm9yIChuID0gMDsgaGxbbl0uc3RhcnQgIT0gTlVMTDsgbisrKQorICAgIHsKKwlsZW4gPSAoaW50KShobFtuXS5zdGFydCAtIHApOworCXNjcmVlbl9wdXRzX2xlbihwLCBsZW4sIHJvdywgY29sLCBjdXJhdHRyKTsKKwljb2wgKz0gdmltX3N0cm5zaXplKHAsIGxlbik7CisJcCA9IGhsW25dLnN0YXJ0OworCisJaWYgKGhsW25dLnVzZXJobCA9PSAwKQorCSAgICBjdXJhdHRyID0gYXR0cjsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwllbHNlIGlmICh3cCAhPSBjdXJ3aW4gJiYgd3AtPndfc3RhdHVzX2hlaWdodCAhPSAwKQorCSAgICBjdXJhdHRyID0gaGlnaGxpZ2h0X3N0bG5jW2hsW25dLnVzZXJobCAtIDFdOworI2VuZGlmCisJZWxzZQorCSAgICBjdXJhdHRyID0gaGlnaGxpZ2h0X3VzZXJbaGxbbl0udXNlcmhsIC0gMV07CisgICAgfQorICAgIHNjcmVlbl9wdXRzKHAsIHJvdywgY29sLCBjdXJhdHRyKTsKK30KKworI2VuZGlmIC8qIEZFQVRfU1RMX09QVCAqLworCisvKgorICogT3V0cHV0IGEgc2luZ2xlIGNoYXJhY3RlciBkaXJlY3RseSB0byB0aGUgc2NyZWVuIGFuZCB1cGRhdGUgU2NyZWVuTGluZXMuCisgKi8KKyAgICB2b2lkCitzY3JlZW5fcHV0Y2hhcihjLCByb3csIGNvbCwgYXR0cikKKyAgICBpbnQJICAgIGM7CisgICAgaW50CSAgICByb3csIGNvbDsKKyAgICBpbnQJICAgIGF0dHI7Cit7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGNoYXJfdQlidWZbTUJfTUFYQllURVMgKyAxXTsKKworICAgIGJ1ZlsoKm1iX2NoYXIyYnl0ZXMpKGMsIGJ1ZildID0gTlVMOworI2Vsc2UKKyAgICBjaGFyX3UJYnVmWzJdOworCisgICAgYnVmWzBdID0gYzsKKyAgICBidWZbMV0gPSBOVUw7CisjZW5kaWYKKyAgICBzY3JlZW5fcHV0cyhidWYsIHJvdywgY29sLCBhdHRyKTsKK30KKworLyoKKyAqIEdldCBhIHNpbmdsZSBjaGFyYWN0ZXIgZGlyZWN0bHkgZnJvbSBTY3JlZW5MaW5lcyBpbnRvICJieXRlc1tdIi4KKyAqIEFsc28gcmV0dXJuIGl0cyBhdHRyaWJ1dGUgaW4gKmF0dHJwOworICovCisgICAgdm9pZAorc2NyZWVuX2dldGJ5dGVzKHJvdywgY29sLCBieXRlcywgYXR0cnApCisgICAgaW50CSAgICByb3csIGNvbDsKKyAgICBjaGFyX3UgICpieXRlczsKKyAgICBpbnQJICAgICphdHRycDsKK3sKKyAgICB1bnNpZ25lZCBvZmY7CisKKyAgICAvKiBzYWZldHkgY2hlY2sgKi8KKyAgICBpZiAoU2NyZWVuTGluZXMgIT0gTlVMTCAmJiByb3cgPCBzY3JlZW5fUm93cyAmJiBjb2wgPCBzY3JlZW5fQ29sdW1ucykKKyAgICB7CisJb2ZmID0gTGluZU9mZnNldFtyb3ddICsgY29sOworCSphdHRycCA9IFNjcmVlbkF0dHJzW29mZl07CisJYnl0ZXNbMF0gPSBTY3JlZW5MaW5lc1tvZmZdOworCWJ5dGVzWzFdID0gTlVMOworCisjaWZkZWYgRkVBVF9NQllURQorCWlmIChlbmNfdXRmOCAmJiBTY3JlZW5MaW5lc1VDW29mZl0gIT0gMCkKKwkgICAgYnl0ZXNbdXRmY19jaGFyMmJ5dGVzKG9mZiwgYnl0ZXMpXSA9IE5VTDsKKwllbHNlIGlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUgJiYgU2NyZWVuTGluZXNbb2ZmXSA9PSAweDhlKQorCXsKKwkgICAgYnl0ZXNbMF0gPSBTY3JlZW5MaW5lc1tvZmZdOworCSAgICBieXRlc1sxXSA9IFNjcmVlbkxpbmVzMltvZmZdOworCSAgICBieXRlc1syXSA9IE5VTDsKKwl9CisJZWxzZSBpZiAoZW5jX2RiY3MgJiYgTUJfQllURTJMRU4oYnl0ZXNbMF0pID4gMSkKKwl7CisJICAgIGJ5dGVzWzFdID0gU2NyZWVuTGluZXNbb2ZmICsgMV07CisJICAgIGJ5dGVzWzJdID0gTlVMOworCX0KKyNlbmRpZgorICAgIH0KK30KKworLyoKKyAqIFB1dCBzdHJpbmcgJyp0ZXh0JyBvbiB0aGUgc2NyZWVuIGF0IHBvc2l0aW9uICdyb3cnIGFuZCAnY29sJywgd2l0aAorICogYXR0cmlidXRlcyAnYXR0cicsIGFuZCB1cGRhdGUgU2NyZWVuTGluZXNbXSBhbmQgU2NyZWVuQXR0cnNbXS4KKyAqIE5vdGU6IG9ubHkgb3V0cHV0cyB3aXRoaW4gb25lIHJvdywgbWVzc2FnZSBpcyB0cnVuY2F0ZWQgYXQgc2NyZWVuIGJvdW5kYXJ5IQorICogTm90ZTogaWYgU2NyZWVuTGluZXNbXSwgcm93IGFuZC9vciBjb2wgaXMgaW52YWxpZCwgbm90aGluZyBpcyBkb25lLgorICovCisgICAgdm9pZAorc2NyZWVuX3B1dHModGV4dCwgcm93LCBjb2wsIGF0dHIpCisgICAgY2hhcl91CSp0ZXh0OworICAgIGludAkJcm93OworICAgIGludAkJY29sOworICAgIGludAkJYXR0cjsKK3sKKyAgICBzY3JlZW5fcHV0c19sZW4odGV4dCwgLTEsIHJvdywgY29sLCBhdHRyKTsKK30KKworLyoKKyAqIExpa2Ugc2NyZWVuX3B1dHMoKSwgYnV0IG91dHB1dCAidGV4dFtsZW5dIi4gIFdoZW4gImxlbiIgaXMgLTEgb3V0cHV0IHVwIHRvCisgKiBhIE5VTC4KKyAqLworICAgIHZvaWQKK3NjcmVlbl9wdXRzX2xlbih0ZXh0LCBsZW4sIHJvdywgY29sLCBhdHRyKQorICAgIGNoYXJfdQkqdGV4dDsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCWNvbDsKKyAgICBpbnQJCWF0dHI7Cit7CisgICAgdW5zaWduZWQJb2ZmOworICAgIGNoYXJfdQkqcHRyID0gdGV4dDsKKyAgICBpbnQJCWM7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJbWJ5dGVfYmxlbiA9IDE7CisgICAgaW50CQltYnl0ZV9jZWxscyA9IDE7CisgICAgaW50CQl1OGMgPSAwOworICAgIGludAkJdThjX2MxID0gMDsKKyAgICBpbnQJCXU4Y19jMiA9IDA7CisgICAgaW50CQljbGVhcl9uZXh0X2NlbGwgPSBGQUxTRTsKKyMgaWZkZWYgRkVBVF9BUkFCSUMKKyAgICBpbnQJCXByZXZfYyA9IDA7CQkvKiBwcmV2aW91cyBBcmFiaWMgY2hhcmFjdGVyICovCisgICAgaW50CQlwYywgbmMsIG5jMSwgZHVtbXk7CisjIGVuZGlmCisjZW5kaWYKKworICAgIGlmIChTY3JlZW5MaW5lcyA9PSBOVUxMIHx8IHJvdyA+PSBzY3JlZW5fUm93cykJLyogc2FmZXR5IGNoZWNrICovCisJcmV0dXJuOworCisgICAgb2ZmID0gTGluZU9mZnNldFtyb3ddICsgY29sOworICAgIHdoaWxlICgqcHRyICE9IE5VTCAmJiBjb2wgPCBzY3JlZW5fQ29sdW1ucworCQkJCSAgICAgICYmIChsZW4gPCAwIHx8IChpbnQpKHB0ciAtIHRleHQpIDwgbGVuKSkKKyAgICB7CisJYyA9ICpwdHI7CisjaWZkZWYgRkVBVF9NQllURQorCS8qIGNoZWNrIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aWJ5dGUgKi8KKwlpZiAoaGFzX21ieXRlKQorCXsKKwkgICAgaWYgKGVuY191dGY4ICYmIGxlbiA+IDApCisJCW1ieXRlX2JsZW4gPSB1dGZjX3B0cjJsZW5fY2hlY2tfbGVuKHB0ciwKKwkJCQkJCSAgIChpbnQpKCh0ZXh0ICsgbGVuKSAtIHB0cikpOworCSAgICBlbHNlCisJCW1ieXRlX2JsZW4gPSAoKm1iX3B0cjJsZW5fY2hlY2spKHB0cik7CisJICAgIGlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUgJiYgYyA9PSAweDhlKQorCQltYnl0ZV9jZWxscyA9IDE7CisJICAgIGVsc2UgaWYgKGVuY19kYmNzICE9IDApCisJCW1ieXRlX2NlbGxzID0gbWJ5dGVfYmxlbjsKKwkgICAgZWxzZQkvKiBlbmNfdXRmOCAqLworCSAgICB7CisJCWlmIChsZW4gPj0gMCkKKwkJICAgIHU4YyA9IHV0ZmNfcHRyMmNoYXJfbGVuKHB0ciwgJnU4Y19jMSwgJnU4Y19jMiwKKwkJCQkJCSAgIChpbnQpKCh0ZXh0ICsgbGVuKSAtIHB0cikpOworCQllbHNlCisJCSAgICB1OGMgPSB1dGZjX3B0cjJjaGFyKHB0ciwgJnU4Y19jMSwgJnU4Y19jMik7CisJCW1ieXRlX2NlbGxzID0gdXRmX2NoYXIyY2VsbHModThjKTsKKwkJLyogTm9uLUJNUCBjaGFyYWN0ZXI6IGRpc3BsYXkgYXMgPyBvciBmdWxsd2lkdGggPy4gKi8KKwkJaWYgKHU4YyA+PSAweDEwMDAwKQorCQl7CisJCSAgICB1OGMgPSAobWJ5dGVfY2VsbHMgPT0gMikgPyAweGZmMWYgOiAoaW50KSc/JzsKKwkJICAgIGlmIChhdHRyID09IDApCisJCQlhdHRyID0gaGxfYXR0cihITEZfOCk7CisJCX0KKyMgaWZkZWYgRkVBVF9BUkFCSUMKKwkJaWYgKHBfYXJzaGFwZSAmJiAhcF90YmlkaSAmJiBBUkFCSUNfQ0hBUih1OGMpKQorCQl7CisJCSAgICAvKiBEbyBBcmFiaWMgc2hhcGluZy4gKi8KKwkJICAgIGlmIChsZW4gPj0gMCAmJiAoaW50KShwdHIgLSB0ZXh0KSArIG1ieXRlX2JsZW4gPj0gbGVuKQorCQkgICAgeworCQkJLyogUGFzdCBlbmQgb2Ygc3RyaW5nIHRvIGJlIGRpc3BsYXllZC4gKi8KKwkJCW5jID0gTlVMOworCQkJbmMxID0gTlVMOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJbmMgPSB1dGZjX3B0cjJjaGFyKHB0ciArIG1ieXRlX2JsZW4sICZuYzEsICZkdW1teSk7CisJCSAgICBwYyA9IHByZXZfYzsKKwkJICAgIHByZXZfYyA9IHU4YzsKKwkJICAgIHU4YyA9IGFyYWJpY19zaGFwZSh1OGMsICZjLCAmdThjX2MxLCBuYywgbmMxLCBwYyk7CisJCX0KKwkJZWxzZQorCQkgICAgcHJldl9jID0gdThjOworIyBlbmRpZgorCSAgICB9CisJfQorI2VuZGlmCisKKwlpZiAoU2NyZWVuTGluZXNbb2ZmXSAhPSBjCisjaWZkZWYgRkVBVF9NQllURQorCQl8fCAobWJ5dGVfY2VsbHMgPT0gMgorCQkgICAgJiYgU2NyZWVuTGluZXNbb2ZmICsgMV0gIT0gKGVuY19kYmNzID8gcHRyWzFdIDogMCkpCisJCXx8IChlbmNfZGJjcyA9PSBEQkNTX0pQTlUKKwkJICAgICYmIGMgPT0gMHg4ZQorCQkgICAgJiYgU2NyZWVuTGluZXMyW29mZl0gIT0gcHRyWzFdKQorCQl8fCAoZW5jX3V0ZjgKKwkJICAgICYmIG1ieXRlX2JsZW4gPiAxCisJCSAgICAmJiAoU2NyZWVuTGluZXNVQ1tvZmZdICE9IHU4YworCQkJfHwgU2NyZWVuTGluZXNDMVtvZmZdICE9IHU4Y19jMQorCQkJfHwgU2NyZWVuTGluZXNDMltvZmZdICE9IHU4Y19jMikpCisjZW5kaWYKKwkJfHwgU2NyZWVuQXR0cnNbb2ZmXSAhPSBhdHRyCisJCXx8IGV4bW9kZV9hY3RpdmUKKwkJKQorCXsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKFVOSVgpCisJICAgIC8qIFRoZSBib2xkIHRyaWNrIG1ha2VzIGEgc2luZ2xlIHJvdyBvZiBwaXhlbHMgYXBwZWFyIGluIHRoZSBuZXh0CisJICAgICAqIGNoYXJhY3Rlci4gIFdoZW4gYSBib2xkIGNoYXJhY3RlciBpcyByZW1vdmVkLCB0aGUgbmV4dAorCSAgICAgKiBjaGFyYWN0ZXIgc2hvdWxkIGJlIHJlZHJhd24gdG9vLiAgVGhpcyBoYXBwZW5zIGZvciBvdXIgb3duIEdVSQorCSAgICAgKiBhbmQgZm9yIHNvbWUgeHRlcm1zLgorCSAgICAgKiBGb3JjZSB0aGUgcmVkcmF3IGJ5IHNldHRpbmcgdGhlIGF0dHJpYnV0ZSB0byBhIGRpZmZlcmVudCB2YWx1ZQorCSAgICAgKiB0aGFuICJhdHRyIiwgdGhlIGNvbnRlbnRzIG9mIFNjcmVlbkxpbmVzW10gbWF5IGJlIG5lZWRlZCBieQorCSAgICAgKiBtYl9vZmYyY2VsbHMoKSBmdXJ0aGVyIG9uLgorCSAgICAgKiBEb24ndCBkbyB0aGlzIGZvciB0aGUgbGFzdCBkcmF3biBjaGFyYWN0ZXIsIGJlY2F1c2UgdGhlIG5leHQKKwkgICAgICogY2hhcmFjdGVyIG1heSBub3QgYmUgcmVkcmF3bi4gKi8KKwkgICAgaWYgKAorIyBpZmRlZiBGRUFUX0dVSQorCQkgICAgZ3VpLmluX3VzZQorIyBlbmRpZgorIyBpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKFVOSVgpCisJCSAgICB8fAorIyBlbmRpZgorIyBpZmRlZiBVTklYCisJCSAgICB0ZXJtX2lzX3h0ZXJtCisjIGVuZGlmCisJICAgICAgICkKKwkgICAgeworCQlpbnQJCW47CisKKwkJbiA9IFNjcmVlbkF0dHJzW29mZl07CisjIGlmZGVmIEZFQVRfTUJZVEUKKwkJaWYgKGNvbCArIG1ieXRlX2NlbGxzIDwgc2NyZWVuX0NvbHVtbnMKKwkJCSYmIChuID4gSExfQUxMIHx8IChuICYgSExfQk9MRCkpCisJCQkmJiAobGVuIDwgMCA/IHB0clttYnl0ZV9ibGVuXSAhPSBOVUwKKwkJCQkJICAgICA6IHB0ciArIG1ieXRlX2JsZW4gPCB0ZXh0ICsgbGVuKSkKKwkJICAgIFNjcmVlbkF0dHJzW29mZiArIG1ieXRlX2NlbGxzXSA9IGF0dHIgKyAxOworIyBlbHNlCisJCWlmIChjb2wgKyAxIDwgc2NyZWVuX0NvbHVtbnMKKwkJCSYmIChuID4gSExfQUxMIHx8IChuICYgSExfQk9MRCkpCisJCQkmJiAobGVuIDwgMCA/IHB0clsxXSAhPSBOVUwgOiBwdHIgKyAxIDwgdGV4dCArIGxlbikpCisJCSAgICBTY3JlZW5MaW5lc1tvZmYgKyAxXSA9IDA7CisjIGVuZGlmCisJICAgIH0KKyNlbmRpZgorI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgLyogV2hlbiBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0IGFuZCBvdmVyd3JpdGluZyBhIHR3by1jZWxsCisJICAgICAqIGNoYXJhY3RlciB3aXRoIGEgb25lLWNlbGwgY2hhcmFjdGVyLCBuZWVkIHRvIGNsZWFyIHRoZSBuZXh0CisJICAgICAqIGNlbGwuICBBbHNvIHdoZW4gb3ZlcndyaXRpbmcgdGhlIGxlZnQgaGFsdmUgb2YgYSB0d28tY2VsbCBjaGFyCisJICAgICAqIHdpdGggdGhlIHJpZ2h0IGhhbHZlIG9mIGEgdHdvLWNlbGwgY2hhci4gIERvIHRoaXMgb25seSBvbmNlCisJICAgICAqIChtYl9vZmYyY2VsbHMoKSBtYXkgcmV0dXJuIDIgb24gdGhlIHJpZ2h0IGhhbHZlKS4gKi8KKwkgICAgaWYgKGNsZWFyX25leHRfY2VsbCkKKwkJY2xlYXJfbmV4dF9jZWxsID0gRkFMU0U7CisJICAgIGVsc2UgaWYgKGhhc19tYnl0ZQorCQkgICAgJiYgKGxlbiA8IDAgPyBwdHJbbWJ5dGVfYmxlbl0gPT0gTlVMCisJCQkJCSAgICAgOiBwdHIgKyBtYnl0ZV9ibGVuID49IHRleHQgKyBsZW4pCisJCSAgICAmJiAoKG1ieXRlX2NlbGxzID09IDEgJiYgKCptYl9vZmYyY2VsbHMpKG9mZikgPiAxKQorCQkJfHwgKG1ieXRlX2NlbGxzID09IDIKKwkJCSAgICAmJiAoKm1iX29mZjJjZWxscykob2ZmKSA9PSAxCisJCQkgICAgJiYgKCptYl9vZmYyY2VsbHMpKG9mZiArIDEpID4gMSkpKQorCQljbGVhcl9uZXh0X2NlbGwgPSBUUlVFOworCisJICAgIC8qIE1ha2Ugc3VyZSB3ZSBuZXZlciBsZWF2ZSBhIHNlY29uZCBieXRlIG9mIGEgZG91YmxlLWJ5dGUgYmVoaW5kLAorCSAgICAgKiBpdCBjb25mdXNlcyBtYl9vZmYyY2VsbHMoKS4gKi8KKwkgICAgaWYgKGVuY19kYmNzCisJCSAgICAmJiAoKG1ieXRlX2NlbGxzID09IDEgJiYgKCptYl9vZmYyY2VsbHMpKG9mZikgPiAxKQorCQkJfHwgKG1ieXRlX2NlbGxzID09IDIKKwkJCSAgICAmJiAoKm1iX29mZjJjZWxscykob2ZmKSA9PSAxCisJCQkgICAgJiYgKCptYl9vZmYyY2VsbHMpKG9mZiArIDEpID4gMSkpKQorCQlTY3JlZW5MaW5lc1tvZmYgKyBtYnl0ZV9ibGVuXSA9IDA7CisjZW5kaWYKKwkgICAgU2NyZWVuTGluZXNbb2ZmXSA9IGM7CisJICAgIFNjcmVlbkF0dHJzW29mZl0gPSBhdHRyOworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGVuY191dGY4KQorCSAgICB7CisJCWlmIChjIDwgMHg4MCAmJiB1OGNfYzEgPT0gMCAmJiB1OGNfYzIgPT0gMCkKKwkJICAgIFNjcmVlbkxpbmVzVUNbb2ZmXSA9IDA7CisJCWVsc2UKKwkJeworCQkgICAgU2NyZWVuTGluZXNVQ1tvZmZdID0gdThjOworCQkgICAgU2NyZWVuTGluZXNDMVtvZmZdID0gdThjX2MxOworCQkgICAgU2NyZWVuTGluZXNDMltvZmZdID0gdThjX2MyOworCQl9CisJCWlmIChtYnl0ZV9jZWxscyA9PSAyKQorCQl7CisJCSAgICBTY3JlZW5MaW5lc1tvZmYgKyAxXSA9IDA7CisJCSAgICBTY3JlZW5BdHRyc1tvZmYgKyAxXSA9IGF0dHI7CisJCX0KKwkJc2NyZWVuX2NoYXIob2ZmLCByb3csIGNvbCk7CisJICAgIH0KKwkgICAgZWxzZSBpZiAobWJ5dGVfY2VsbHMgPT0gMikKKwkgICAgeworCQlTY3JlZW5MaW5lc1tvZmYgKyAxXSA9IHB0clsxXTsKKwkJU2NyZWVuQXR0cnNbb2ZmICsgMV0gPSBhdHRyOworCQlzY3JlZW5fY2hhcl8yKG9mZiwgcm93LCBjb2wpOworCSAgICB9CisJICAgIGVsc2UgaWYgKGVuY19kYmNzID09IERCQ1NfSlBOVSAmJiBjID09IDB4OGUpCisJICAgIHsKKwkJU2NyZWVuTGluZXMyW29mZl0gPSBwdHJbMV07CisJCXNjcmVlbl9jaGFyKG9mZiwgcm93LCBjb2wpOworCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCQlzY3JlZW5fY2hhcihvZmYsIHJvdywgY29sKTsKKwl9CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBvZmYgKz0gbWJ5dGVfY2VsbHM7CisJICAgIGNvbCArPSBtYnl0ZV9jZWxsczsKKwkgICAgcHRyICs9IG1ieXRlX2JsZW47CisJICAgIGlmIChjbGVhcl9uZXh0X2NlbGwpCisJCXB0ciA9IChjaGFyX3UgKikiICI7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgKytvZmY7CisJICAgICsrY29sOworCSAgICArK3B0cjsKKwl9CisgICAgfQorfQorCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKy8qCisgKiBQcmVwYXJlIGZvciAnc2VhcmNoaGwnIGhpZ2hsaWdodGluZy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzdGFydF9zZWFyY2hfaGwoKQoreworICAgIGlmIChwX2hscyAmJiAhbm9faGxzZWFyY2gpCisgICAgeworCWxhc3RfcGF0X3Byb2coJnNlYXJjaF9obC5ybSk7CisJc2VhcmNoX2hsLmF0dHIgPSBobF9hdHRyKEhMRl9MKTsKKyAgICB9Cit9CisKKy8qCisgKiBDbGVhbiB1cCBmb3IgJ3NlYXJjaGhsJyBoaWdobGlnaHRpbmcuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZW5kX3NlYXJjaF9obCgpCit7CisgICAgaWYgKHNlYXJjaF9obC5ybS5yZWdwcm9nICE9IE5VTEwpCisgICAgeworCXZpbV9mcmVlKHNlYXJjaF9obC5ybS5yZWdwcm9nKTsKKwlzZWFyY2hfaGwucm0ucmVncHJvZyA9IE5VTEw7CisgICAgfQorfQorCisvKgorICogQWR2YW5jZSB0byB0aGUgbWF0Y2ggaW4gd2luZG93ICJ3cCIgbGluZSAibG51bSIgb3IgcGFzdCBpdC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitwcmVwYXJlX3NlYXJjaF9obCh3cCwgbG51bSkKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBtYXRjaF9UCSpzaGw7CQkvKiBwb2ludHMgdG8gc2VhcmNoX2hsIG9yIG1hdGNoX2hsICovCisgICAgaW50CQluOworCisgICAgLyoKKyAgICAgKiBXaGVuIHVzaW5nIGEgbXVsdGktbGluZSBwYXR0ZXJuLCBzdGFydCBzZWFyY2hpbmcgYXQgdGhlIHRvcAorICAgICAqIG9mIHRoZSB3aW5kb3cgb3IganVzdCBhZnRlciBhIGNsb3NlZCBmb2xkLgorICAgICAqIERvIHRoaXMgYm90aCBmb3Igc2VhcmNoX2hsIGFuZCBtYXRjaF9obC4KKyAgICAgKi8KKyAgICBzaGwgPSAmc2VhcmNoX2hsOworICAgIGZvciAoOzspCisgICAgeworCWlmIChzaGwtPnJtLnJlZ3Byb2cgIT0gTlVMTAorCQkmJiBzaGwtPmxudW0gPT0gMAorCQkmJiByZV9tdWx0aWxpbmUoc2hsLT5ybS5yZWdwcm9nKSkKKwl7CisJICAgIGlmIChzaGwtPmZpcnN0X2xudW0gPT0gMCkKKwkgICAgeworIyBpZmRlZiBGRUFUX0ZPTERJTkcKKwkJZm9yIChzaGwtPmZpcnN0X2xudW0gPSBsbnVtOworCQkJICAgc2hsLT5maXJzdF9sbnVtID4gd3AtPndfdG9wbGluZTsgLS1zaGwtPmZpcnN0X2xudW0pCisJCSAgICBpZiAoaGFzRm9sZGluZ1dpbih3cCwgc2hsLT5maXJzdF9sbnVtIC0gMSwKKwkJCQkJCSAgICAgIE5VTEwsIE5VTEwsIFRSVUUsIE5VTEwpKQorCQkJYnJlYWs7CisjIGVsc2UKKwkJc2hsLT5maXJzdF9sbnVtID0gd3AtPndfdG9wbGluZTsKKyMgZW5kaWYKKwkgICAgfQorCSAgICBuID0gMDsKKwkgICAgd2hpbGUgKHNobC0+Zmlyc3RfbG51bSA8IGxudW0gJiYgc2hsLT5ybS5yZWdwcm9nICE9IE5VTEwpCisJICAgIHsKKwkJbmV4dF9zZWFyY2hfaGwod3AsIHNobCwgc2hsLT5maXJzdF9sbnVtLCAoY29sbnJfVCluKTsKKwkJaWYgKHNobC0+bG51bSAhPSAwKQorCQl7CisJCSAgICBzaGwtPmZpcnN0X2xudW0gPSBzaGwtPmxudW0KKwkJCQkgICAgKyBzaGwtPnJtLmVuZHBvc1swXS5sbnVtCisJCQkJICAgIC0gc2hsLT5ybS5zdGFydHBvc1swXS5sbnVtOworCQkgICAgbiA9IHNobC0+cm0uZW5kcG9zWzBdLmNvbDsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgICsrc2hsLT5maXJzdF9sbnVtOworCQkgICAgbiA9IDA7CisJCX0KKwkgICAgfQorCX0KKwlpZiAoc2hsID09ICZtYXRjaF9obCkKKwkgICAgYnJlYWs7CisJc2hsID0gJm1hdGNoX2hsOworICAgIH0KK30KKworLyoKKyAqIFNlYXJjaCBmb3IgYSBuZXh0ICdzZWFyY2hsJyBvciAiOm1hdGNoIiBtYXRjaC4KKyAqIFVzZXMgc2hsLT5idWYuCisgKiBTZXRzIHNobC0+bG51bSBhbmQgc2hsLT5ybSBjb250ZW50cy4KKyAqIE5vdGU6IEFzc3VtZXMgYSBwcmV2aW91cyBtYXRjaCBpcyBhbHdheXMgYmVmb3JlICJsbnVtIiwgdW5sZXNzCisgKiBzaGwtPmxudW0gaXMgemVyby4KKyAqIENhcmVmdWw6IEFueSBwb2ludGVycyBmb3IgYnVmZmVyIGxpbmVzIHdpbGwgYmVjb21lIGludmFsaWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbmV4dF9zZWFyY2hfaGwod2luLCBzaGwsIGxudW0sIG1pbmNvbCkKKyAgICB3aW5fVAkqd2luOworICAgIG1hdGNoX1QJKnNobDsJCS8qIHBvaW50cyB0byBzZWFyY2hfaGwgb3IgbWF0Y2hfaGwgKi8KKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGNvbG5yX1QJbWluY29sOwkJLyogbWluaW1hbCBjb2x1bW4gZm9yIGEgbWF0Y2ggKi8KK3sKKyAgICBsaW5lbnJfVAlsOworICAgIGNvbG5yX1QJbWF0Y2hjb2w7CisgICAgbG9uZwlubWF0Y2hlZDsKKworICAgIGlmIChzaGwtPmxudW0gIT0gMCkKKyAgICB7CisJLyogQ2hlY2sgZm9yIHRocmVlIHNpdHVhdGlvbnM6CisJICogMS4gSWYgdGhlICJsbnVtIiBpcyBiZWxvdyBhIHByZXZpb3VzIG1hdGNoLCBzdGFydCBhIG5ldyBzZWFyY2guCisJICogMi4gSWYgdGhlIHByZXZpb3VzIG1hdGNoIGluY2x1ZGVzICJtaW5jb2wiLCB1c2UgaXQuCisJICogMy4gQ29udGludWUgYWZ0ZXIgdGhlIHByZXZpb3VzIG1hdGNoLgorCSAqLworCWwgPSBzaGwtPmxudW0gKyBzaGwtPnJtLmVuZHBvc1swXS5sbnVtIC0gc2hsLT5ybS5zdGFydHBvc1swXS5sbnVtOworCWlmIChsbnVtID4gbCkKKwkgICAgc2hsLT5sbnVtID0gMDsKKwllbHNlIGlmIChsbnVtIDwgbCB8fCBzaGwtPnJtLmVuZHBvc1swXS5jb2wgPiBtaW5jb2wpCisJICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlcGVhdCBzZWFyY2hpbmcgZm9yIGEgbWF0Y2ggdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgaW5jbHVkZXMgIm1pbmNvbCIKKyAgICAgKiBvciBub25lIGlzIGZvdW5kIGluIHRoaXMgbGluZS4KKyAgICAgKi8KKyAgICBjYWxsZWRfZW1zZyA9IEZBTFNFOworICAgIGZvciAoOzspCisgICAgeworCS8qIFRocmVlIHNpdHVhdGlvbnM6CisJICogMS4gTm8gdXNlZnVsIHByZXZpb3VzIG1hdGNoOiBzZWFyY2ggZnJvbSBzdGFydCBvZiBsaW5lLgorCSAqIDIuIE5vdCBWaSBjb21wYXRpYmxlIG9yIGVtcHR5IG1hdGNoOiBjb250aW51ZSBhdCBuZXh0IGNoYXJhY3Rlci4KKwkgKiAgICBCcmVhayB0aGUgbG9vcCBpZiB0aGlzIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCSAqIDMuIFZpIGNvbXBhdGlibGUgc2VhcmNoaW5nOiBjb250aW51ZSBhdCBlbmQgb2YgcHJldmlvdXMgbWF0Y2guCisJICovCisJaWYgKHNobC0+bG51bSA9PSAwKQorCSAgICBtYXRjaGNvbCA9IDA7CisJZWxzZSBpZiAodmltX3N0cmNocihwX2NwbywgQ1BPX1NFQVJDSCkgPT0gTlVMTAorCQl8fCAoc2hsLT5ybS5lbmRwb3NbMF0ubG51bSA9PSAwCisJCSAgICAmJiBzaGwtPnJtLmVuZHBvc1swXS5jb2wgPT0gc2hsLT5ybS5zdGFydHBvc1swXS5jb2wpKQorCXsKKwkgICAgbWF0Y2hjb2wgPSBzaGwtPnJtLnN0YXJ0cG9zWzBdLmNvbCArIDE7CisJICAgIGlmIChtbF9nZXRfYnVmKHNobC0+YnVmLCBsbnVtLCBGQUxTRSlbbWF0Y2hjb2wgLSAxXSA9PSBOVUwpCisJICAgIHsKKwkJc2hsLT5sbnVtID0gMDsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJZWxzZQorCSAgICBtYXRjaGNvbCA9IHNobC0+cm0uZW5kcG9zWzBdLmNvbDsKKworCXNobC0+bG51bSA9IGxudW07CisJbm1hdGNoZWQgPSB2aW1fcmVnZXhlY19tdWx0aSgmc2hsLT5ybSwgd2luLCBzaGwtPmJ1ZiwgbG51bSwgbWF0Y2hjb2wpOworCWlmIChjYWxsZWRfZW1zZykKKwl7CisJICAgIC8qIEVycm9yIHdoaWxlIGhhbmRsaW5nIHJlZ2V4cDogc3RvcCB1c2luZyB0aGlzIHJlZ2V4cC4gKi8KKwkgICAgdmltX2ZyZWUoc2hsLT5ybS5yZWdwcm9nKTsKKwkgICAgc2hsLT5ybS5yZWdwcm9nID0gTlVMTDsKKwkgICAgbm9faGxzZWFyY2ggPSBUUlVFOworCSAgICBicmVhazsKKwl9CisJaWYgKG5tYXRjaGVkID09IDApCisJeworCSAgICBzaGwtPmxudW0gPSAwOwkJLyogbm8gbWF0Y2ggZm91bmQgKi8KKwkgICAgYnJlYWs7CisJfQorCWlmIChzaGwtPnJtLnN0YXJ0cG9zWzBdLmxudW0gPiAwCisJCXx8IHNobC0+cm0uc3RhcnRwb3NbMF0uY29sID49IG1pbmNvbAorCQl8fCBubWF0Y2hlZCA+IDEKKwkJfHwgc2hsLT5ybS5lbmRwb3NbMF0uY29sID4gbWluY29sKQorCXsKKwkgICAgc2hsLT5sbnVtICs9IHNobC0+cm0uc3RhcnRwb3NbMF0ubG51bTsKKwkgICAgYnJlYWs7CQkJLyogdXNlZnVsIG1hdGNoIGZvdW5kICovCisJfQorICAgIH0KK30KKyNlbmRpZgorCisgICAgICBzdGF0aWMgdm9pZAorc2NyZWVuX3N0YXJ0X2hpZ2hsaWdodChhdHRyKQorICAgICAgaW50CWF0dHI7Cit7CisgICAgYXR0cmVudHJ5X1QgKmFlcCA9IE5VTEw7CisKKyAgICBzY3JlZW5fYXR0ciA9IGF0dHI7CisgICAgaWYgKGZ1bGxfc2NyZWVuCisjaWZkZWYgV0lOMzI2NAorCQkgICAgJiYgdGVybWNhcF9hY3RpdmUKKyNlbmRpZgorCQkJCSAgICAgICApCisgICAgeworI2lmZGVmIEZFQVRfR1VJCisJaWYgKGd1aS5pbl91c2UpCisJeworCSAgICBjaGFyCWJ1ZlsyMF07CisKKwkgICAgc3ByaW50ZihidWYsIElGX0VCKCJcMDMzfCVkaCIsIEVTQ19TVFIgInwlZGgiKSwgYXR0cik7CQkvKiBpbnRlcm5hbCBHVUkgY29kZSAqLworCSAgICBPVVRfU1RSKGJ1Zik7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgaWYgKGF0dHIgPiBITF9BTEwpCQkJCS8qIHNwZWNpYWwgSEwgYXR0ci4gKi8KKwkgICAgeworCQlpZiAodF9jb2xvcnMgPiAxKQorCQkgICAgYWVwID0gc3luX2N0ZXJtX2F0dHIyZW50cnkoYXR0cik7CisJCWVsc2UKKwkJICAgIGFlcCA9IHN5bl90ZXJtX2F0dHIyZW50cnkoYXR0cik7CisJCWlmIChhZXAgPT0gTlVMTCkJICAgIC8qIGRpZCAiOnN5bnRheCBjbGVhciIgKi8KKwkJICAgIGF0dHIgPSAwOworCQllbHNlCisJCSAgICBhdHRyID0gYWVwLT5hZV9hdHRyOworCSAgICB9CisJICAgIGlmICgoYXR0ciAmIEhMX0JPTEQpICYmIFRfTUQgIT0gTlVMTCkJLyogYm9sZCAqLworCQlvdXRfc3RyKFRfTUQpOworCSAgICBpZiAoKGF0dHIgJiBITF9TVEFORE9VVCkgJiYgVF9TTyAhPSBOVUxMKQkvKiBzdGFuZG91dCAqLworCQlvdXRfc3RyKFRfU08pOworCSAgICBpZiAoKGF0dHIgJiBITF9VTkRFUkxJTkUpICYmIFRfVVMgIT0gTlVMTCkJLyogdW5kZXJsaW5lICovCisJCW91dF9zdHIoVF9VUyk7CisJICAgIGlmICgoYXR0ciAmIEhMX0lUQUxJQykgJiYgVF9DWkggIT0gTlVMTCkJLyogaXRhbGljICovCisJCW91dF9zdHIoVF9DWkgpOworCSAgICBpZiAoKGF0dHIgJiBITF9JTlZFUlNFKSAmJiBUX01SICE9IE5VTEwpCS8qIGludmVyc2UgKHJldmVyc2UpICovCisJCW91dF9zdHIoVF9NUik7CisKKwkgICAgLyoKKwkgICAgICogT3V0cHV0IHRoZSBjb2xvciBvciBzdGFydCBzdHJpbmcgYWZ0ZXIgYm9sZCBldGMuLCBpbiBjYXNlIHRoZQorCSAgICAgKiBib2xkIGV0Yy4gb3ZlcnJpZGUgdGhlIGNvbG9yIHNldHRpbmcuCisJICAgICAqLworCSAgICBpZiAoYWVwICE9IE5VTEwpCisJICAgIHsKKwkJaWYgKHRfY29sb3JzID4gMSkKKwkJeworCQkgICAgaWYgKGFlcC0+YWVfdS5jdGVybS5mZ19jb2xvcikKKwkJCXRlcm1fZmdfY29sb3IoYWVwLT5hZV91LmN0ZXJtLmZnX2NvbG9yIC0gMSk7CisJCSAgICBpZiAoYWVwLT5hZV91LmN0ZXJtLmJnX2NvbG9yKQorCQkJdGVybV9iZ19jb2xvcihhZXAtPmFlX3UuY3Rlcm0uYmdfY29sb3IgLSAxKTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGlmIChhZXAtPmFlX3UudGVybS5zdGFydCAhPSBOVUxMKQorCQkJb3V0X3N0cihhZXAtPmFlX3UudGVybS5zdGFydCk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKKyAgICAgIHZvaWQKK3NjcmVlbl9zdG9wX2hpZ2hsaWdodCgpCit7CisgICAgaW50CSAgICBkb19NRSA9IEZBTFNFOwkgICAgLyogb3V0cHV0IFRfTUUgY29kZSAqLworCisgICAgaWYgKHNjcmVlbl9hdHRyICE9IDAKKyNpZmRlZiBXSU4zMjY0CisJCQkmJiB0ZXJtY2FwX2FjdGl2ZQorI2VuZGlmCisJCQkJCSAgICkKKyAgICB7CisjaWZkZWYgRkVBVF9HVUkKKwlpZiAoZ3VpLmluX3VzZSkKKwl7CisJICAgIGNoYXIJYnVmWzIwXTsKKworCSAgICAvKiB1c2UgaW50ZXJuYWwgR1VJIGNvZGUgKi8KKwkgICAgc3ByaW50ZihidWYsIElGX0VCKCJcMDMzfCVkSCIsIEVTQ19TVFIgInwlZEgiKSwgc2NyZWVuX2F0dHIpOworCSAgICBPVVRfU1RSKGJ1Zik7CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgaWYgKHNjcmVlbl9hdHRyID4gSExfQUxMKQkJCS8qIHNwZWNpYWwgSEwgYXR0ci4gKi8KKwkgICAgeworCQlhdHRyZW50cnlfVCAqYWVwOworCisJCWlmICh0X2NvbG9ycyA+IDEpCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBBc3N1bWUgdGhhdCB0X21lIHJlc3RvcmVzIHRoZSBvcmlnaW5hbCBjb2xvcnMhCisJCSAgICAgKi8KKwkJICAgIGFlcCA9IHN5bl9jdGVybV9hdHRyMmVudHJ5KHNjcmVlbl9hdHRyKTsKKwkJICAgIGlmIChhZXAgIT0gTlVMTCAmJiAoYWVwLT5hZV91LmN0ZXJtLmZnX2NvbG9yCisJCQkJCQkgfHwgYWVwLT5hZV91LmN0ZXJtLmJnX2NvbG9yKSkKKwkJCWRvX01FID0gVFJVRTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGFlcCA9IHN5bl90ZXJtX2F0dHIyZW50cnkoc2NyZWVuX2F0dHIpOworCQkgICAgaWYgKGFlcCAhPSBOVUxMICYmIGFlcC0+YWVfdS50ZXJtLnN0b3AgIT0gTlVMTCkKKwkJICAgIHsKKwkJCWlmIChTVFJDTVAoYWVwLT5hZV91LnRlcm0uc3RvcCwgVF9NRSkgPT0gMCkKKwkJCSAgICBkb19NRSA9IFRSVUU7CisJCQllbHNlCisJCQkgICAgb3V0X3N0cihhZXAtPmFlX3UudGVybS5zdG9wKTsKKwkJICAgIH0KKwkJfQorCQlpZiAoYWVwID09IE5VTEwpCSAgICAvKiBkaWQgIjpzeW50YXggY2xlYXIiICovCisJCSAgICBzY3JlZW5fYXR0ciA9IDA7CisJCWVsc2UKKwkJICAgIHNjcmVlbl9hdHRyID0gYWVwLT5hZV9hdHRyOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogT2Z0ZW4gYWxsIGVuZGluZy1jb2RlcyBhcmUgZXF1YWwgdG8gVF9NRS4gIEF2b2lkIG91dHB1dHRpbmcgdGhlCisJICAgICAqIHNhbWUgc2VxdWVuY2Ugc2V2ZXJhbCB0aW1lcy4KKwkgICAgICovCisJICAgIGlmIChzY3JlZW5fYXR0ciAmIEhMX1NUQU5ET1VUKQorCSAgICB7CisJCWlmIChTVFJDTVAoVF9TRSwgVF9NRSkgPT0gMCkKKwkJICAgIGRvX01FID0gVFJVRTsKKwkJZWxzZQorCQkgICAgb3V0X3N0cihUX1NFKTsKKwkgICAgfQorCSAgICBpZiAoc2NyZWVuX2F0dHIgJiBITF9VTkRFUkxJTkUpCisJICAgIHsKKwkJaWYgKFNUUkNNUChUX1VFLCBUX01FKSA9PSAwKQorCQkgICAgZG9fTUUgPSBUUlVFOworCQllbHNlCisJCSAgICBvdXRfc3RyKFRfVUUpOworCSAgICB9CisJICAgIGlmIChzY3JlZW5fYXR0ciAmIEhMX0lUQUxJQykKKwkgICAgeworCQlpZiAoU1RSQ01QKFRfQ1pSLCBUX01FKSA9PSAwKQorCQkgICAgZG9fTUUgPSBUUlVFOworCQllbHNlCisJCSAgICBvdXRfc3RyKFRfQ1pSKTsKKwkgICAgfQorCSAgICBpZiAoZG9fTUUgfHwgKHNjcmVlbl9hdHRyICYgKEhMX0JPTEQgfCBITF9JTlZFUlNFKSkpCisJCW91dF9zdHIoVF9NRSk7CisKKwkgICAgaWYgKHRfY29sb3JzID4gMSkKKwkgICAgeworCQkvKiBzZXQgTm9ybWFsIGN0ZXJtIGNvbG9ycyAqLworCQlpZiAoY3Rlcm1fbm9ybWFsX2ZnX2NvbG9yICE9IDApCisJCSAgICB0ZXJtX2ZnX2NvbG9yKGN0ZXJtX25vcm1hbF9mZ19jb2xvciAtIDEpOworCQlpZiAoY3Rlcm1fbm9ybWFsX2JnX2NvbG9yICE9IDApCisJCSAgICB0ZXJtX2JnX2NvbG9yKGN0ZXJtX25vcm1hbF9iZ19jb2xvciAtIDEpOworCQlpZiAoY3Rlcm1fbm9ybWFsX2ZnX2JvbGQpCisJCSAgICBvdXRfc3RyKFRfTUQpOworCSAgICB9CisJfQorICAgIH0KKyAgICBzY3JlZW5fYXR0ciA9IDA7Cit9CisKKy8qCisgKiBSZXNldCB0aGUgY29sb3JzIGZvciBhIGN0ZXJtLiAgVXNlZCB3aGVuIGxlYXZpbmcgVmltLgorICogVGhlIG1hY2hpbmUgc3BlY2lmaWMgY29kZSBtYXkgb3ZlcnJpZGUgdGhpcyBhZ2Fpbi4KKyAqLworICAgIHZvaWQKK3Jlc2V0X2N0ZXJtX2NvbG9ycygpCit7CisgICAgaWYgKHRfY29sb3JzID4gMSkKKyAgICB7CisJLyogc2V0IE5vcm1hbCBjdGVybSBjb2xvcnMgKi8KKwlpZiAoY3Rlcm1fbm9ybWFsX2ZnX2NvbG9yID4gMCB8fCBjdGVybV9ub3JtYWxfYmdfY29sb3IgPiAwKQorCXsKKwkgICAgb3V0X3N0cihUX09QKTsKKwkgICAgc2NyZWVuX2F0dHIgPSAtMTsKKwl9CisJaWYgKGN0ZXJtX25vcm1hbF9mZ19ib2xkKQorCXsKKwkgICAgb3V0X3N0cihUX01FKTsKKwkgICAgc2NyZWVuX2F0dHIgPSAtMTsKKwl9CisgICAgfQorfQorCisvKgorICogUHV0IGNoYXJhY3RlciBTY3JlZW5MaW5lc1sib2ZmIl0gb24gdGhlIHNjcmVlbiBhdCBwb3NpdGlvbiAicm93IiBhbmQgImNvbCIsCisgKiB1c2luZyB0aGUgYXR0cmlidXRlcyBmcm9tIFNjcmVlbkF0dHJzWyJvZmYiXS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzY3JlZW5fY2hhcihvZmYsIHJvdywgY29sKQorICAgIHVuc2lnbmVkCW9mZjsKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCWNvbDsKK3sKKyAgICBpbnQJCWF0dHI7CisKKyAgICAvKiBDaGVjayBmb3IgaWxsZWdhbCB2YWx1ZXMsIGp1c3QgaW4gY2FzZSAoY291bGQgaGFwcGVuIGp1c3QgYWZ0ZXIKKyAgICAgKiByZXNpemluZykuICovCisgICAgaWYgKHJvdyA+PSBzY3JlZW5fUm93cyB8fCBjb2wgPj0gc2NyZWVuX0NvbHVtbnMpCisJcmV0dXJuOworCisgICAgLyogT3V0cHV0dGluZyB0aGUgbGFzdCBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbiBtYXkgc2Nyb2xsdXAgdGhlIHNjcmVlbi4KKyAgICAgKiBEb24ndCB0byBpdCEgIE1hcmsgdGhlIGNoYXJhY3RlciBpbnZhbGlkICh1cGRhdGUgaXQgd2hlbiBzY3JvbGxlZCB1cCkgKi8KKyAgICBpZiAocm93ID09IHNjcmVlbl9Sb3dzIC0gMSAmJiBjb2wgPT0gc2NyZWVuX0NvbHVtbnMgLSAxCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkgICAgLyogYWNjb3VudCBmb3IgZmlyc3QgY29tbWFuZC1saW5lIGNoYXJhY3RlciBpbiByaWdodGxlZnQgbW9kZSAqLworCSAgICAmJiAhY21kbXNnX3JsCisjZW5kaWYKKyAgICAgICApCisgICAgeworCVNjcmVlbkF0dHJzW29mZl0gPSAoc2F0dHJfVCktMTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTdG9wIGhpZ2hsaWdodGluZyBmaXJzdCwgc28gaXQncyBlYXNpZXIgdG8gbW92ZSB0aGUgY3Vyc29yLgorICAgICAqLworI2lmIGRlZmluZWQoRkVBVF9DTElQQk9BUkQpIHx8IGRlZmluZWQoRkVBVF9WRVJUU1BMSVQpCisgICAgaWYgKHNjcmVlbl9jaGFyX2F0dHIgIT0gMCkKKwlhdHRyID0gc2NyZWVuX2NoYXJfYXR0cjsKKyAgICBlbHNlCisjZW5kaWYKKwlhdHRyID0gU2NyZWVuQXR0cnNbb2ZmXTsKKyAgICBpZiAoc2NyZWVuX2F0dHIgIT0gYXR0cikKKwlzY3JlZW5fc3RvcF9oaWdobGlnaHQoKTsKKworICAgIHdpbmRnb3RvKHJvdywgY29sKTsKKworICAgIGlmIChzY3JlZW5fYXR0ciAhPSBhdHRyKQorCXNjcmVlbl9zdGFydF9oaWdobGlnaHQoYXR0cik7CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGVuY191dGY4ICYmIFNjcmVlbkxpbmVzVUNbb2ZmXSAhPSAwKQorICAgIHsKKwljaGFyX3UJICAgIGJ1ZltNQl9NQVhCWVRFUyArIDFdOworCisJLyogQ29udmVydCBVVEYtOCBjaGFyYWN0ZXIgdG8gYnl0ZXMgYW5kIHdyaXRlIGl0LiAqLworCisJYnVmW3V0ZmNfY2hhcjJieXRlcyhvZmYsIGJ1ZildID0gTlVMOworCisJb3V0X3N0cihidWYpOworCWlmICh1dGZfY2hhcjJjZWxscyhTY3JlZW5MaW5lc1VDW29mZl0pID4gMSkKKwkgICAgKytzY3JlZW5fY3VyX2NvbDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwlvdXRfZmx1c2hfY2hlY2soKTsKKyNlbmRpZgorCW91dF9jaGFyKFNjcmVlbkxpbmVzW29mZl0pOworI2lmZGVmIEZFQVRfTUJZVEUKKwkvKiBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgaW4gc2luZ2xlLXdpZHRoIGNlbGwgKi8KKwlpZiAoZW5jX2RiY3MgPT0gREJDU19KUE5VICYmIFNjcmVlbkxpbmVzW29mZl0gPT0gMHg4ZSkKKwkgICAgb3V0X2NoYXIoU2NyZWVuTGluZXMyW29mZl0pOworI2VuZGlmCisgICAgfQorCisgICAgc2NyZWVuX2N1cl9jb2wrKzsKK30KKworI2lmZGVmIEZFQVRfTUJZVEUKKworLyoKKyAqIFVzZWQgZm9yIGVuY19kYmNzIG9ubHk6IFB1dCBvbmUgZG91YmxlLXdpZGUgY2hhcmFjdGVyIGF0IFNjcmVlbkxpbmVzWyJvZmYiXQorICogb24gdGhlIHNjcmVlbiBhdCBwb3NpdGlvbiAncm93JyBhbmQgJ2NvbCcuCisgKiBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZmlyc3QgYnl0ZSBpcyB1c2VkIGZvciBhbGwuICBUaGlzIGlzIHJlcXVpcmVkIHRvCisgKiBvdXRwdXQgdGhlIHR3byBieXRlcyBvZiBhIGRvdWJsZS1ieXRlIGNoYXJhY3RlciB3aXRoIG5vdGhpbmcgaW4gYmV0d2Vlbi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzY3JlZW5fY2hhcl8yKG9mZiwgcm93LCBjb2wpCisgICAgdW5zaWduZWQJb2ZmOworICAgIGludAkJcm93OworICAgIGludAkJY29sOworeworICAgIC8qIENoZWNrIGZvciBpbGxlZ2FsIHZhbHVlcyAoY291bGQgYmUgd3Jvbmcgd2hlbiBzY3JlZW4gd2FzIHJlc2l6ZWQpLiAqLworICAgIGlmIChvZmYgKyAxID49ICh1bnNpZ25lZCkoc2NyZWVuX1Jvd3MgKiBzY3JlZW5fQ29sdW1ucykpCisJcmV0dXJuOworCisgICAgLyogT3V0cHV0dGluZyB0aGUgbGFzdCBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbiBtYXkgc2Nyb2xsdXAgdGhlIHNjcmVlbi4KKyAgICAgKiBEb24ndCB0byBpdCEgIE1hcmsgdGhlIGNoYXJhY3RlciBpbnZhbGlkICh1cGRhdGUgaXQgd2hlbiBzY3JvbGxlZCB1cCkgKi8KKyAgICBpZiAocm93ID09IHNjcmVlbl9Sb3dzIC0gMSAmJiBjb2wgPj0gc2NyZWVuX0NvbHVtbnMgLSAyKQorICAgIHsKKwlTY3JlZW5BdHRyc1tvZmZdID0gKHNhdHRyX1QpLTE7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qIE91dHB1dCB0aGUgZmlyc3QgYnl0ZSBub3JtYWxseSAocG9zaXRpb25zIHRoZSBjdXJzb3IpLCB0aGVuIHdyaXRlIHRoZQorICAgICAqIHNlY29uZCBieXRlIGRpcmVjdGx5LiAqLworICAgIHNjcmVlbl9jaGFyKG9mZiwgcm93LCBjb2wpOworICAgIG91dF9jaGFyKFNjcmVlbkxpbmVzW29mZiArIDFdKTsKKyAgICArK3NjcmVlbl9jdXJfY29sOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKSB8fCBkZWZpbmVkKEZFQVRfVkVSVFNQTElUKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIERyYXcgYSByZWN0YW5nbGUgb2YgdGhlIHNjcmVlbiwgaW52ZXJ0ZWQgd2hlbiAiaW52ZXJ0IiBpcyBUUlVFLgorICogVGhpcyB1c2VzIHRoZSBjb250ZW50cyBvZiBTY3JlZW5MaW5lc1tdIGFuZCBkb2Vzbid0IGNoYW5nZSBpdC4KKyAqLworICAgIHZvaWQKK3NjcmVlbl9kcmF3X3JlY3RhbmdsZShyb3csIGNvbCwgaGVpZ2h0LCB3aWR0aCwgaW52ZXJ0KQorICAgIGludAkJcm93OworICAgIGludAkJY29sOworICAgIGludAkJaGVpZ2h0OworICAgIGludAkJd2lkdGg7CisgICAgaW50CQlpbnZlcnQ7Cit7CisgICAgaW50CQlyLCBjOworICAgIGludAkJb2ZmOworCisgICAgaWYgKGludmVydCkKKwlzY3JlZW5fY2hhcl9hdHRyID0gSExfSU5WRVJTRTsKKyAgICBmb3IgKHIgPSByb3c7IHIgPCByb3cgKyBoZWlnaHQ7ICsrcikKKyAgICB7CisJb2ZmID0gTGluZU9mZnNldFtyXTsKKwlmb3IgKGMgPSBjb2w7IGMgPCBjb2wgKyB3aWR0aDsgKytjKQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChlbmNfZGJjcyAhPSAwICYmIGRiY3Nfb2ZmMmNlbGxzKG9mZiArIGMpID4gMSkKKwkgICAgeworCQlzY3JlZW5fY2hhcl8yKG9mZiArIGMsIHIsIGMpOworCQkrK2M7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkJc2NyZWVuX2NoYXIob2ZmICsgYywgciwgYyk7CisjaWZkZWYgRkVBVF9NQllURQorCQlpZiAodXRmX29mZjJjZWxscyhvZmYgKyBjKSA+IDEpCisJCSAgICArK2M7CisjZW5kaWYKKwkgICAgfQorCX0KKyAgICB9CisgICAgc2NyZWVuX2NoYXJfYXR0ciA9IDA7Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisvKgorICogUmVkcmF3IHRoZSBjaGFyYWN0ZXJzIGZvciBhIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93LgorICovCisgICAgc3RhdGljIHZvaWQKK3JlZHJhd19ibG9jayhyb3csIGVuZCwgd3ApCisgICAgaW50CQlyb3c7CisgICAgaW50CQllbmQ7CisgICAgd2luX1QJKndwOworeworICAgIGludAkJY29sOworICAgIGludAkJd2lkdGg7CisKKyMgaWZkZWYgRkVBVF9DTElQQk9BUkQKKyAgICBjbGlwX21heV9jbGVhcl9zZWxlY3Rpb24ocm93LCBlbmQgLSAxKTsKKyMgZW5kaWYKKworICAgIGlmICh3cCA9PSBOVUxMKQorICAgIHsKKwljb2wgPSAwOworCXdpZHRoID0gQ29sdW1uczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwljb2wgPSB3cC0+d193aW5jb2w7CisJd2lkdGggPSB3cC0+d193aWR0aDsKKyAgICB9CisgICAgc2NyZWVuX2RyYXdfcmVjdGFuZ2xlKHJvdywgY29sLCBlbmQgLSByb3csIHdpZHRoLCBGQUxTRSk7Cit9CisjZW5kaWYKKworLyoKKyAqIEZpbGwgdGhlIHNjcmVlbiBmcm9tICdzdGFydF9yb3cnIHRvICdlbmRfcm93JywgZnJvbSAnc3RhcnRfY29sJyB0byAnZW5kX2NvbCcKKyAqIHdpdGggY2hhcmFjdGVyICdjMScgaW4gZmlyc3QgY29sdW1uIGZvbGxvd2VkIGJ5ICdjMicgaW4gdGhlIG90aGVyIGNvbHVtbnMuCisgKiBVc2UgYXR0cmlidXRlcyAnYXR0cicuCisgKi8KKyAgICB2b2lkCitzY3JlZW5fZmlsbChzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgYzEsIGMyLCBhdHRyKQorICAgIGludAkgICAgc3RhcnRfcm93LCBlbmRfcm93OworICAgIGludAkgICAgc3RhcnRfY29sLCBlbmRfY29sOworICAgIGludAkgICAgYzEsIGMyOworICAgIGludAkgICAgYXR0cjsKK3sKKyAgICBpbnQJCSAgICByb3c7CisgICAgaW50CQkgICAgY29sOworICAgIGludAkJICAgIG9mZjsKKyAgICBpbnQJCSAgICBlbmRfb2ZmOworICAgIGludAkJICAgIGRpZF9kZWxldGU7CisgICAgaW50CQkgICAgYzsKKyAgICBpbnQJCSAgICBub3JtX3Rlcm07CisjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChVTklYKQorICAgIGludAkJICAgIGZvcmNlX25leHQgPSBGQUxTRTsKKyNlbmRpZgorCisgICAgaWYgKGVuZF9yb3cgPiBzY3JlZW5fUm93cykJCS8qIHNhZmV0eSBjaGVjayAqLworCWVuZF9yb3cgPSBzY3JlZW5fUm93czsKKyAgICBpZiAoZW5kX2NvbCA+IHNjcmVlbl9Db2x1bW5zKQkvKiBzYWZldHkgY2hlY2sgKi8KKwllbmRfY29sID0gc2NyZWVuX0NvbHVtbnM7CisgICAgaWYgKFNjcmVlbkxpbmVzID09IE5VTEwKKwkgICAgfHwgc3RhcnRfcm93ID49IGVuZF9yb3cKKwkgICAgfHwgc3RhcnRfY29sID49IGVuZF9jb2wpCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwlyZXR1cm47CisKKyAgICAvKiBpdCdzIGEgIm5vcm1hbCIgdGVybWluYWwgd2hlbiBub3QgaW4gYSBHVUkgb3IgY3Rlcm0gKi8KKyAgICBub3JtX3Rlcm0gPSAoCisjaWZkZWYgRkVBVF9HVUkKKwkgICAgIWd1aS5pbl91c2UgJiYKKyNlbmRpZgorCQkJICAgIHRfY29sb3JzIDw9IDEpOworICAgIGZvciAocm93ID0gc3RhcnRfcm93OyByb3cgPCBlbmRfcm93OyArK3JvdykKKyAgICB7CisJLyoKKwkgKiBUcnkgdG8gdXNlIGRlbGV0ZS1saW5lIHRlcm1jYXAgY29kZSwgd2hlbiBubyBhdHRyaWJ1dGVzIG9yIGluIGEKKwkgKiAibm9ybWFsIiB0ZXJtaW5hbCwgd2hlcmUgYSBib2xkL2l0YWxpYyBzcGFjZSBpcyBqdXN0IGEKKwkgKiBzcGFjZS4KKwkgKi8KKwlkaWRfZGVsZXRlID0gRkFMU0U7CisJaWYgKGMyID09ICcgJworCQkmJiBlbmRfY29sID09IENvbHVtbnMKKwkJJiYgY2FuX2NsZWFyKFRfQ0UpCisJCSYmIChhdHRyID09IDAKKwkJICAgIHx8IChub3JtX3Rlcm0KKwkJCSYmIGF0dHIgPD0gSExfQUxMCisJCQkmJiAoKGF0dHIgJiB+KEhMX0JPTEQgfCBITF9JVEFMSUMpKSA9PSAwKSkpKQorCXsKKwkgICAgLyoKKwkgICAgICogY2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdG8gY2xlYXIgc29tZXRoaW5nCisJICAgICAqLworCSAgICBjb2wgPSBzdGFydF9jb2w7CisJICAgIGlmIChjMSAhPSAnICcpCQkJLyogZG9uJ3QgY2xlYXIgZmlyc3QgY2hhciAqLworCQkrK2NvbDsKKworCSAgICBvZmYgPSBMaW5lT2Zmc2V0W3Jvd10gKyBjb2w7CisJICAgIGVuZF9vZmYgPSBMaW5lT2Zmc2V0W3Jvd10gKyBlbmRfY29sOworCisJICAgIC8qIHNraXAgYmxhbmtzICh1c2VkIG9mdGVuLCBrZWVwIGl0IGZhc3QhKSAqLworI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgaWYgKGVuY191dGY4KQorCQl3aGlsZSAob2ZmIDwgZW5kX29mZiAmJiBTY3JlZW5MaW5lc1tvZmZdID09ICcgJworCQkJICAmJiBTY3JlZW5BdHRyc1tvZmZdID09IDAgJiYgU2NyZWVuTGluZXNVQ1tvZmZdID09IDApCisJCSAgICArK29mZjsKKwkgICAgZWxzZQorI2VuZGlmCisJCXdoaWxlIChvZmYgPCBlbmRfb2ZmICYmIFNjcmVlbkxpbmVzW29mZl0gPT0gJyAnCisJCQkJCQkgICAgICYmIFNjcmVlbkF0dHJzW29mZl0gPT0gMCkKKwkJICAgICsrb2ZmOworCSAgICBpZiAob2ZmIDwgZW5kX29mZikJCS8qIHNvbWV0aGluZyB0byBiZSBjbGVhcmVkICovCisJICAgIHsKKwkJY29sID0gb2ZmIC0gTGluZU9mZnNldFtyb3ddOworCQlzY3JlZW5fc3RvcF9oaWdobGlnaHQoKTsKKwkJdGVybV93aW5kZ290byhyb3csIGNvbCk7LyogY2xlYXIgcmVzdCBvZiB0aGlzIHNjcmVlbiBsaW5lICovCisJCW91dF9zdHIoVF9DRSk7CisJCXNjcmVlbl9zdGFydCgpOwkJLyogZG9uJ3Qga25vdyB3aGVyZSBjdXJzb3IgaXMgbm93ICovCisJCWNvbCA9IGVuZF9jb2wgLSBjb2w7CisJCXdoaWxlIChjb2wtLSkJCS8qIGNsZWFyIGNoYXJzIGluIFNjcmVlbkxpbmVzICovCisJCXsKKwkJICAgIFNjcmVlbkxpbmVzW29mZl0gPSAnICc7CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGVuY191dGY4KQorCQkJU2NyZWVuTGluZXNVQ1tvZmZdID0gMDsKKyNlbmRpZgorCQkgICAgU2NyZWVuQXR0cnNbb2ZmXSA9IDA7CisJCSAgICArK29mZjsKKwkJfQorCSAgICB9CisJICAgIGRpZF9kZWxldGUgPSBUUlVFOwkJLyogdGhlIGNoYXJzIGFyZSBjbGVhcmVkIG5vdyAqLworCX0KKworCW9mZiA9IExpbmVPZmZzZXRbcm93XSArIHN0YXJ0X2NvbDsKKwljID0gYzE7CisJZm9yIChjb2wgPSBzdGFydF9jb2w7IGNvbCA8IGVuZF9jb2w7ICsrY29sKQorCXsKKwkgICAgaWYgKFNjcmVlbkxpbmVzW29mZl0gIT0gYworI2lmZGVmIEZFQVRfTUJZVEUKKwkJICAgIHx8IChlbmNfdXRmOCAmJiBTY3JlZW5MaW5lc1VDW29mZl0gIT0gKGMgPj0gMHg4MCA/IGMgOiAwKSkKKyNlbmRpZgorCQkgICAgfHwgU2NyZWVuQXR0cnNbb2ZmXSAhPSBhdHRyCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChVTklYKQorCQkgICAgfHwgZm9yY2VfbmV4dAorI2VuZGlmCisJCSAgICApCisJICAgIHsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKFVOSVgpCisJCS8qIFRoZSBib2xkIHRyaWNrIG1heSBtYWtlIGEgc2luZ2xlIHJvdyBvZiBwaXhlbHMgYXBwZWFyIGluCisJCSAqIHRoZSBuZXh0IGNoYXJhY3Rlci4gIFdoZW4gYSBib2xkIGNoYXJhY3RlciBpcyByZW1vdmVkLCB0aGUKKwkJICogbmV4dCBjaGFyYWN0ZXIgc2hvdWxkIGJlIHJlZHJhd24gdG9vLiAgVGhpcyBoYXBwZW5zIGZvciBvdXIKKwkJICogb3duIEdVSSBhbmQgZm9yIHNvbWUgeHRlcm1zLiAgKi8KKwkJaWYgKAorIyBpZmRlZiBGRUFUX0dVSQorCQkJZ3VpLmluX3VzZQorIyBlbmRpZgorIyBpZiBkZWZpbmVkKEZFQVRfR1VJKSAmJiBkZWZpbmVkKFVOSVgpCisJCQl8fAorIyBlbmRpZgorIyBpZmRlZiBVTklYCisJCQl0ZXJtX2lzX3h0ZXJtCisjIGVuZGlmCisJCSAgICkKKwkJeworCQkgICAgaWYgKFNjcmVlbkxpbmVzW29mZl0gIT0gJyAnCisJCQkgICAgJiYgKFNjcmVlbkF0dHJzW29mZl0gPiBITF9BTEwKKwkJCQl8fCBTY3JlZW5BdHRyc1tvZmZdICYgSExfQk9MRCkpCisJCQlmb3JjZV9uZXh0ID0gVFJVRTsKKwkJICAgIGVsc2UKKwkJCWZvcmNlX25leHQgPSBGQUxTRTsKKwkJfQorI2VuZGlmCisJCVNjcmVlbkxpbmVzW29mZl0gPSBjOworI2lmZGVmIEZFQVRfTUJZVEUKKwkJaWYgKGVuY191dGY4KQorCQl7CisJCSAgICBpZiAoYyA+PSAweDgwKQorCQkgICAgeworCQkJU2NyZWVuTGluZXNVQ1tvZmZdID0gYzsKKwkJCVNjcmVlbkxpbmVzQzFbb2ZmXSA9IDA7CisJCQlTY3JlZW5MaW5lc0MyW29mZl0gPSAwOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJU2NyZWVuTGluZXNVQ1tvZmZdID0gMDsKKwkJfQorI2VuZGlmCisJCVNjcmVlbkF0dHJzW29mZl0gPSBhdHRyOworCQlpZiAoIWRpZF9kZWxldGUgfHwgYyAhPSAnICcpCisJCSAgICBzY3JlZW5fY2hhcihvZmYsIHJvdywgY29sKTsKKwkgICAgfQorCSAgICArK29mZjsKKwkgICAgaWYgKGNvbCA9PSBzdGFydF9jb2wpCisJICAgIHsKKwkJaWYgKGRpZF9kZWxldGUpCisJCSAgICBicmVhazsKKwkJYyA9IGMyOworCSAgICB9CisJfQorCWlmIChlbmRfY29sID09IENvbHVtbnMpCisJICAgIExpbmVXcmFwc1tyb3ddID0gRkFMU0U7CisJaWYgKHJvdyA9PSBSb3dzIC0gMSkJCS8qIG92ZXJ3cml0dGVuIHRoZSBjb21tYW5kIGxpbmUgKi8KKwl7CisJICAgIHJlZHJhd19jbWRsaW5lID0gVFJVRTsKKwkgICAgaWYgKGMxID09ICcgJyAmJiBjMiA9PSAnICcpCisJCWNsZWFyX2NtZGxpbmUgPSBGQUxTRTsJLyogY29tbWFuZCBsaW5lIGhhcyBiZWVuIGNsZWFyZWQgKi8KKwl9CisgICAgfQorfQorCisvKgorICogQ2hlY2sgaWYgdGhlcmUgc2hvdWxkIGJlIGEgZGVsYXkuICBVc2VkIGJlZm9yZSBjbGVhcmluZyBvciByZWRyYXdpbmcgdGhlCisgKiBzY3JlZW4gb3IgdGhlIGNvbW1hbmQgbGluZS4KKyAqLworICAgIHZvaWQKK2NoZWNrX2Zvcl9kZWxheShjaGVja19tc2dfc2Nyb2xsKQorICAgIGludAkgICAgY2hlY2tfbXNnX3Njcm9sbDsKK3sKKyAgICBpZiAoKGVtc2dfb25fZGlzcGxheSB8fCAoY2hlY2tfbXNnX3Njcm9sbCAmJiBtc2dfc2Nyb2xsKSkKKwkgICAgJiYgIWRpZF93YWl0X3JldHVybgorCSAgICAmJiBlbXNnX3NpbGVudCA9PSAwKQorICAgIHsKKwlvdXRfZmx1c2goKTsKKwl1aV9kZWxheSgxMDAwTCwgVFJVRSk7CisJZW1zZ19vbl9kaXNwbGF5ID0gRkFMU0U7CisJaWYgKGNoZWNrX21zZ19zY3JvbGwpCisJICAgIG1zZ19zY3JvbGwgPSBGQUxTRTsKKyAgICB9Cit9CisKKy8qCisgKiBzY3JlZW5fdmFsaWQgLSAgYWxsb2NhdGUgc2NyZWVuIGJ1ZmZlcnMgaWYgc2l6ZSBjaGFuZ2VkCisgKiAgIElmICJjbGVhciIgaXMgVFJVRTogY2xlYXIgc2NyZWVuIGlmIGl0IGhhcyBiZWVuIHJlc2l6ZWQuCisgKglSZXR1cm5zIFRSVUUgaWYgdGhlcmUgaXMgYSB2YWxpZCBzY3JlZW4gdG8gd3JpdGUgdG8uCisgKglSZXR1cm5zIEZBTFNFIHdoZW4gc3RhcnRpbmcgdXAgYW5kIHNjcmVlbiBub3QgaW5pdGlhbGl6ZWQgeWV0LgorICovCisgICAgaW50CitzY3JlZW5fdmFsaWQoY2xlYXIpCisgICAgaW50CSAgICBjbGVhcjsKK3sKKyAgICBzY3JlZW5hbGxvYyhjbGVhcik7CSAgICAvKiBhbGxvY2F0ZSBzY3JlZW4gYnVmZmVycyBpZiBzaXplIGNoYW5nZWQgKi8KKyAgICByZXR1cm4gKFNjcmVlbkxpbmVzICE9IE5VTEwpOworfQorCisvKgorICogUmVzaXplIHRoZSBzaGVsbCB0byBSb3dzIGFuZCBDb2x1bW5zLgorICogQWxsb2NhdGUgU2NyZWVuTGluZXNbXSBhbmQgYXNzb2NpYXRlZCBpdGVtcy4KKyAqCisgKiBUaGVyZSBtYXkgYmUgc29tZSB0aW1lIGJldHdlZW4gc2V0dGluZyBSb3dzIGFuZCBDb2x1bW5zIGFuZCAocmUpYWxsb2NhdGluZworICogU2NyZWVuTGluZXNbXS4gIFRoaXMgaGFwcGVucyB3aGVuIHN0YXJ0aW5nIHVwIGFuZCB3aGVuIChtYW51YWxseSkgY2hhbmdpbmcKKyAqIHRoZSBzaGVsbCBzaXplLiAgQWx3YXlzIHVzZSBzY3JlZW5fUm93cyBhbmQgc2NyZWVuX0NvbHVtbnMgdG8gYWNjZXNzIGl0ZW1zCisgKiBpbiBTY3JlZW5MaW5lc1tdLiAgVXNlIFJvd3MgYW5kIENvbHVtbnMgZm9yIHBvc2l0aW9uaW5nIHRleHQgZXRjLiB3aGVyZSB0aGUKKyAqIGZpbmFsIHNpemUgb2YgdGhlIHNoZWxsIGlzIG5lZWRlZC4KKyAqLworICAgIHZvaWQKK3NjcmVlbmFsbG9jKGNsZWFyKQorICAgIGludAkgICAgY2xlYXI7Cit7CisgICAgaW50CQkgICAgbmV3X3Jvdywgb2xkX3JvdzsKKyNpZmRlZiBGRUFUX0dVSQorICAgIGludAkJICAgIG9sZF9Sb3dzOworI2VuZGlmCisgICAgd2luX1QJICAgICp3cDsKKyAgICBpbnQJCSAgICBvdXRvZm1lbSA9IEZBTFNFOworICAgIGludAkJICAgIGxlbjsKKyAgICBzY2hhcl9UCSAgICAqbmV3X1NjcmVlbkxpbmVzOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICB1OGNoYXJfVAkgICAgKm5ld19TY3JlZW5MaW5lc1VDID0gTlVMTDsKKyAgICB1OGNoYXJfVAkgICAgKm5ld19TY3JlZW5MaW5lc0MxID0gTlVMTDsKKyAgICB1OGNoYXJfVAkgICAgKm5ld19TY3JlZW5MaW5lc0MyID0gTlVMTDsKKyAgICBzY2hhcl9UCSAgICAqbmV3X1NjcmVlbkxpbmVzMiA9IE5VTEw7CisjZW5kaWYKKyAgICBzYXR0cl9UCSAgICAqbmV3X1NjcmVlbkF0dHJzOworICAgIHVuc2lnbmVkCSAgICAqbmV3X0xpbmVPZmZzZXQ7CisgICAgY2hhcl91CSAgICAqbmV3X0xpbmVXcmFwczsKKyAgICBzdGF0aWMgaW50CSAgICBlbnRlcmVkID0gRkFMU0U7CQkvKiBhdm9pZCByZWN1cnNpdmVuZXNzICovCisKKyAgICAvKgorICAgICAqIEFsbG9jYXRpb24gb2YgdGhlIHNjcmVlbiBidWZmZXJzIGlzIGRvbmUgb25seSB3aGVuIHRoZSBzaXplIGNoYW5nZXMgYW5kCisgICAgICogd2hlbiBSb3dzIGFuZCBDb2x1bW5zIGhhdmUgYmVlbiBzZXQgYW5kIHdlIGhhdmUgc3RhcnRlZCBkb2luZyBmdWxsCisgICAgICogc2NyZWVuIHN0dWZmLgorICAgICAqLworICAgIGlmICgoU2NyZWVuTGluZXMgIT0gTlVMTAorCQkmJiBSb3dzID09IHNjcmVlbl9Sb3dzCisJCSYmIENvbHVtbnMgPT0gc2NyZWVuX0NvbHVtbnMKKyNpZmRlZiBGRUFUX01CWVRFCisJCSYmIGVuY191dGY4ID09IChTY3JlZW5MaW5lc1VDICE9IE5VTEwpCisJCSYmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUpID09IChTY3JlZW5MaW5lczIgIT0gTlVMTCkKKyNlbmRpZgorCQkpCisJICAgIHx8IFJvd3MgPT0gMAorCSAgICB8fCBDb2x1bW5zID09IDAKKwkgICAgfHwgKCFmdWxsX3NjcmVlbiAmJiBTY3JlZW5MaW5lcyA9PSBOVUxMKSkKKwlyZXR1cm47CisKKyAgICAvKgorICAgICAqIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBwcm9kdWNlIGFuIG91dC1vZi1tZW1vcnkgbWVzc2FnZSBiZWxvdywgd2hpY2gKKyAgICAgKiB3aWxsIGNhdXNlIHRoaXMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFnYWluLiAgVG8gYnJlYWsgdGhlIGxvb3AsIGp1c3QKKyAgICAgKiByZXR1cm4gaGVyZS4KKyAgICAgKi8KKyAgICBpZiAoZW50ZXJlZCkKKwlyZXR1cm47CisgICAgZW50ZXJlZCA9IFRSVUU7CisKKyAgICB3aW5fbmV3X3NoZWxsc2l6ZSgpOyAgICAvKiBmaXQgdGhlIHdpbmRvd3MgaW4gdGhlIG5ldyBzaXplZCBzaGVsbCAqLworCisjaWZkZWYgRkVBVF9HVUlfQkVPUworICAgIHZpbV9sb2NrX3NjcmVlbigpOyAgLyogYmUgc2FmZSwgcHV0IGl0IGhlcmUgKi8KKyNlbmRpZgorCisgICAgY29tcF9jb2woKTsJCS8qIHJlY29tcHV0ZSBjb2x1bW5zIGZvciBzaG93biBjb21tYW5kIGFuZCBydWxlciAqLworCisgICAgLyoKKyAgICAgKiBXZSdyZSBjaGFuZ2luZyB0aGUgc2l6ZSBvZiB0aGUgc2NyZWVuLgorICAgICAqIC0gQWxsb2NhdGUgbmV3IGFycmF5cyBmb3IgU2NyZWVuTGluZXMgYW5kIFNjcmVlbkF0dHJzLgorICAgICAqIC0gTW92ZSBsaW5lcyBmcm9tIHRoZSBvbGQgYXJyYXlzIGludG8gdGhlIG5ldyBhcnJheXMsIGNsZWFyIGV4dHJhCisgICAgICoJIGxpbmVzICh1bmxlc3MgdGhlIHNjcmVlbiBpcyBnb2luZyB0byBiZSBjbGVhcmVkKS4KKyAgICAgKiAtIEZyZWUgdGhlIG9sZCBhcnJheXMuCisgICAgICoKKyAgICAgKiBJZiBhbnl0aGluZyBmYWlscywgbWFrZSBTY3JlZW5MaW5lcyBOVUxMLCBzbyB3ZSBkb24ndCBkbyBhbnl0aGluZyEKKyAgICAgKiBDb250aW51aW5nIHdpdGggdGhlIG9sZCBTY3JlZW5MaW5lcyBtYXkgcmVzdWx0IGluIGEgY3Jhc2gsIGJlY2F1c2UgdGhlCisgICAgICogc2l6ZSBpcyB3cm9uZy4KKyAgICAgKi8KKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwOyB3cCA9IHdwLT53X25leHQpCisJd2luX2ZyZWVfbHNpemUod3ApOworI2Vsc2UKKwl3aW5fZnJlZV9sc2l6ZShjdXJ3aW4pOworI2VuZGlmCisKKyAgICBuZXdfU2NyZWVuTGluZXMgPSAoc2NoYXJfVCAqKWxhbGxvYygobG9uZ191KSgKKwkJCSAgICAgIChSb3dzICsgMSkgKiBDb2x1bW5zICogc2l6ZW9mKHNjaGFyX1QpKSwgRkFMU0UpOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoZW5jX3V0ZjgpCisgICAgeworCW5ld19TY3JlZW5MaW5lc1VDID0gKHU4Y2hhcl9UICopbGFsbG9jKChsb25nX3UpKAorCQkJICAgICAoUm93cyArIDEpICogQ29sdW1ucyAqIHNpemVvZih1OGNoYXJfVCkpLCBGQUxTRSk7CisJbmV3X1NjcmVlbkxpbmVzQzEgPSAodThjaGFyX1QgKilsYWxsb2MoKGxvbmdfdSkoCisJCQkgICAgIChSb3dzICsgMSkgKiBDb2x1bW5zICogc2l6ZW9mKHU4Y2hhcl9UKSksIEZBTFNFKTsKKwluZXdfU2NyZWVuTGluZXNDMiA9ICh1OGNoYXJfVCAqKWxhbGxvYygobG9uZ191KSgKKwkJCSAgICAgKFJvd3MgKyAxKSAqIENvbHVtbnMgKiBzaXplb2YodThjaGFyX1QpKSwgRkFMU0UpOworICAgIH0KKyAgICBpZiAoZW5jX2RiY3MgPT0gREJDU19KUE5VKQorCW5ld19TY3JlZW5MaW5lczIgPSAoc2NoYXJfVCAqKWxhbGxvYygobG9uZ191KSgKKwkJCSAgICAgKFJvd3MgKyAxKSAqIENvbHVtbnMgKiBzaXplb2Yoc2NoYXJfVCkpLCBGQUxTRSk7CisjZW5kaWYKKyAgICBuZXdfU2NyZWVuQXR0cnMgPSAoc2F0dHJfVCAqKWxhbGxvYygobG9uZ191KSgKKwkJCSAgICAgIChSb3dzICsgMSkgKiBDb2x1bW5zICogc2l6ZW9mKHNhdHRyX1QpKSwgRkFMU0UpOworICAgIG5ld19MaW5lT2Zmc2V0ID0gKHVuc2lnbmVkICopbGFsbG9jKChsb25nX3UpKAorCQkJCQkgUm93cyAqIHNpemVvZih1bnNpZ25lZCkpLCBGQUxTRSk7CisgICAgbmV3X0xpbmVXcmFwcyA9IChjaGFyX3UgKilsYWxsb2MoKGxvbmdfdSkoUm93cyAqIHNpemVvZihjaGFyX3UpKSwgRkFMU0UpOworCisgICAgRk9SX0FMTF9XSU5ET1dTKHdwKQorICAgIHsKKwlpZiAod2luX2FsbG9jX2xpbmVzKHdwKSA9PSBGQUlMKQorCXsKKwkgICAgb3V0b2ZtZW0gPSBUUlVFOworI2lmZGVmIEZFQVRfV0lORE9XUworCSAgICBicmVhazsKKyNlbmRpZgorCX0KKyAgICB9CisKKyAgICBpZiAobmV3X1NjcmVlbkxpbmVzID09IE5VTEwKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIHx8IChlbmNfdXRmOCAmJiAobmV3X1NjcmVlbkxpbmVzVUMgPT0gTlVMTAorCQkgICB8fCBuZXdfU2NyZWVuTGluZXNDMSA9PSBOVUxMIHx8IG5ld19TY3JlZW5MaW5lc0MyID09IE5VTEwpKQorCSAgICB8fCAoZW5jX2RiY3MgPT0gREJDU19KUE5VICYmIG5ld19TY3JlZW5MaW5lczIgPT0gTlVMTCkKKyNlbmRpZgorCSAgICB8fCBuZXdfU2NyZWVuQXR0cnMgPT0gTlVMTAorCSAgICB8fCBuZXdfTGluZU9mZnNldCA9PSBOVUxMCisJICAgIHx8IG5ld19MaW5lV3JhcHMgPT0gTlVMTAorCSAgICB8fCBvdXRvZm1lbSkKKyAgICB7CisJZG9fb3V0b2ZtZW1fbXNnKChsb25nX3UpKChSb3dzICsgMSkgKiBDb2x1bW5zKSk7ICAgIC8qIGd1ZXNzIHRoZSBzaXplICovCisJdmltX2ZyZWUobmV3X1NjcmVlbkxpbmVzKTsKKwluZXdfU2NyZWVuTGluZXMgPSBOVUxMOworI2lmZGVmIEZFQVRfTUJZVEUKKwl2aW1fZnJlZShuZXdfU2NyZWVuTGluZXNVQyk7CisJbmV3X1NjcmVlbkxpbmVzVUMgPSBOVUxMOworCXZpbV9mcmVlKG5ld19TY3JlZW5MaW5lc0MxKTsKKwluZXdfU2NyZWVuTGluZXNDMSA9IE5VTEw7CisJdmltX2ZyZWUobmV3X1NjcmVlbkxpbmVzQzIpOworCW5ld19TY3JlZW5MaW5lc0MyID0gTlVMTDsKKwl2aW1fZnJlZShuZXdfU2NyZWVuTGluZXMyKTsKKwluZXdfU2NyZWVuTGluZXMyID0gTlVMTDsKKyNlbmRpZgorCXZpbV9mcmVlKG5ld19TY3JlZW5BdHRycyk7CisJbmV3X1NjcmVlbkF0dHJzID0gTlVMTDsKKwl2aW1fZnJlZShuZXdfTGluZU9mZnNldCk7CisJbmV3X0xpbmVPZmZzZXQgPSBOVUxMOworCXZpbV9mcmVlKG5ld19MaW5lV3JhcHMpOworCW5ld19MaW5lV3JhcHMgPSBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWZvciAobmV3X3JvdyA9IDA7IG5ld19yb3cgPCBSb3dzOyArK25ld19yb3cpCisJeworCSAgICBuZXdfTGluZU9mZnNldFtuZXdfcm93XSA9IG5ld19yb3cgKiBDb2x1bW5zOworCSAgICBuZXdfTGluZVdyYXBzW25ld19yb3ddID0gRkFMU0U7CisKKwkgICAgLyoKKwkgICAgICogSWYgdGhlIHNjcmVlbiBpcyBub3QgZ29pbmcgdG8gYmUgY2xlYXJlZCwgY29weSBhcyBtdWNoIGFzCisJICAgICAqIHBvc3NpYmxlIGZyb20gdGhlIG9sZCBzY3JlZW4gdG8gdGhlIG5ldyBvbmUgYW5kIGNsZWFyIHRoZSByZXN0CisJICAgICAqICh1c2VkIHdoZW4gcmVzaXppbmcgdGhlIHdpbmRvdyBhdCB0aGUgIi0tbW9yZS0tIiBwcm9tcHQgb3Igd2hlbgorCSAgICAgKiBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCwgZm9yIHRoZSBHVUkpLgorCSAgICAgKi8KKwkgICAgaWYgKCFjbGVhcikKKwkgICAgeworCQkodm9pZCl2aW1fbWVtc2V0KG5ld19TY3JlZW5MaW5lcyArIG5ld19yb3cgKiBDb2x1bW5zLAorCQkJCSAgICAgICcgJywgKHNpemVfdClDb2x1bW5zICogc2l6ZW9mKHNjaGFyX1QpKTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWlmIChlbmNfdXRmOCkKKwkJeworCQkgICAgKHZvaWQpdmltX21lbXNldChuZXdfU2NyZWVuTGluZXNVQyArIG5ld19yb3cgKiBDb2x1bW5zLAorCQkJCSAgICAgICAwLCAoc2l6ZV90KUNvbHVtbnMgKiBzaXplb2YodThjaGFyX1QpKTsKKwkJICAgICh2b2lkKXZpbV9tZW1zZXQobmV3X1NjcmVlbkxpbmVzQzEgKyBuZXdfcm93ICogQ29sdW1ucywKKwkJCQkgICAgICAgMCwgKHNpemVfdClDb2x1bW5zICogc2l6ZW9mKHU4Y2hhcl9UKSk7CisJCSAgICAodm9pZCl2aW1fbWVtc2V0KG5ld19TY3JlZW5MaW5lc0MyICsgbmV3X3JvdyAqIENvbHVtbnMsCisJCQkJICAgICAgIDAsIChzaXplX3QpQ29sdW1ucyAqIHNpemVvZih1OGNoYXJfVCkpOworCQl9CisJCWlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUpCisJCSAgICAodm9pZCl2aW1fbWVtc2V0KG5ld19TY3JlZW5MaW5lczIgKyBuZXdfcm93ICogQ29sdW1ucywKKwkJCQkgICAgICAgMCwgKHNpemVfdClDb2x1bW5zICogc2l6ZW9mKHNjaGFyX1QpKTsKKyNlbmRpZgorCQkodm9pZCl2aW1fbWVtc2V0KG5ld19TY3JlZW5BdHRycyArIG5ld19yb3cgKiBDb2x1bW5zLAorCQkJCQkwLCAoc2l6ZV90KUNvbHVtbnMgKiBzaXplb2Yoc2F0dHJfVCkpOworCQlvbGRfcm93ID0gbmV3X3JvdyArIChzY3JlZW5fUm93cyAtIFJvd3MpOworCQlpZiAob2xkX3JvdyA+PSAwKQorCQl7CisJCSAgICBpZiAoc2NyZWVuX0NvbHVtbnMgPCBDb2x1bW5zKQorCQkJbGVuID0gc2NyZWVuX0NvbHVtbnM7CisJCSAgICBlbHNlCisJCQlsZW4gPSBDb2x1bW5zOworCQkgICAgbWNoX21lbW1vdmUobmV3X1NjcmVlbkxpbmVzICsgbmV3X0xpbmVPZmZzZXRbbmV3X3Jvd10sCisJCQkgICAgU2NyZWVuTGluZXMgKyBMaW5lT2Zmc2V0W29sZF9yb3ddLAorCQkJICAgIChzaXplX3QpbGVuICogc2l6ZW9mKHNjaGFyX1QpKTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBpZiAoZW5jX3V0ZjggJiYgU2NyZWVuTGluZXNVQyAhPSBOVUxMKQorCQkgICAgeworCQkJbWNoX21lbW1vdmUobmV3X1NjcmVlbkxpbmVzVUMgKyBuZXdfTGluZU9mZnNldFtuZXdfcm93XSwKKwkJCQlTY3JlZW5MaW5lc1VDICsgTGluZU9mZnNldFtvbGRfcm93XSwKKwkJCQkoc2l6ZV90KWxlbiAqIHNpemVvZih1OGNoYXJfVCkpOworCQkJbWNoX21lbW1vdmUobmV3X1NjcmVlbkxpbmVzQzEgKyBuZXdfTGluZU9mZnNldFtuZXdfcm93XSwKKwkJCQlTY3JlZW5MaW5lc0MxICsgTGluZU9mZnNldFtvbGRfcm93XSwKKwkJCQkoc2l6ZV90KWxlbiAqIHNpemVvZih1OGNoYXJfVCkpOworCQkJbWNoX21lbW1vdmUobmV3X1NjcmVlbkxpbmVzQzIgKyBuZXdfTGluZU9mZnNldFtuZXdfcm93XSwKKwkJCQlTY3JlZW5MaW5lc0MyICsgTGluZU9mZnNldFtvbGRfcm93XSwKKwkJCQkoc2l6ZV90KWxlbiAqIHNpemVvZih1OGNoYXJfVCkpOworCQkgICAgfQorCQkgICAgaWYgKGVuY19kYmNzID09IERCQ1NfSlBOVSAmJiBTY3JlZW5MaW5lczIgIT0gTlVMTCkKKwkJCW1jaF9tZW1tb3ZlKG5ld19TY3JlZW5MaW5lczIgKyBuZXdfTGluZU9mZnNldFtuZXdfcm93XSwKKwkJCQlTY3JlZW5MaW5lczIgKyBMaW5lT2Zmc2V0W29sZF9yb3ddLAorCQkJCShzaXplX3QpbGVuICogc2l6ZW9mKHNjaGFyX1QpKTsKKyNlbmRpZgorCQkgICAgbWNoX21lbW1vdmUobmV3X1NjcmVlbkF0dHJzICsgbmV3X0xpbmVPZmZzZXRbbmV3X3Jvd10sCisJCQkgICAgU2NyZWVuQXR0cnMgKyBMaW5lT2Zmc2V0W29sZF9yb3ddLAorCQkJICAgIChzaXplX3QpbGVuICogc2l6ZW9mKHNhdHRyX1QpKTsKKwkJfQorCSAgICB9CisJfQorCS8qIFVzZSB0aGUgbGFzdCBsaW5lIG9mIHRoZSBzY3JlZW4gZm9yIHRoZSBjdXJyZW50IGxpbmUuICovCisJY3VycmVudF9TY3JlZW5MaW5lID0gbmV3X1NjcmVlbkxpbmVzICsgUm93cyAqIENvbHVtbnM7CisgICAgfQorCisgICAgdmltX2ZyZWUoU2NyZWVuTGluZXMpOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICB2aW1fZnJlZShTY3JlZW5MaW5lc1VDKTsKKyAgICB2aW1fZnJlZShTY3JlZW5MaW5lc0MxKTsKKyAgICB2aW1fZnJlZShTY3JlZW5MaW5lc0MyKTsKKyAgICB2aW1fZnJlZShTY3JlZW5MaW5lczIpOworI2VuZGlmCisgICAgdmltX2ZyZWUoU2NyZWVuQXR0cnMpOworICAgIHZpbV9mcmVlKExpbmVPZmZzZXQpOworICAgIHZpbV9mcmVlKExpbmVXcmFwcyk7CisgICAgU2NyZWVuTGluZXMgPSBuZXdfU2NyZWVuTGluZXM7CisjaWZkZWYgRkVBVF9NQllURQorICAgIFNjcmVlbkxpbmVzVUMgPSBuZXdfU2NyZWVuTGluZXNVQzsKKyAgICBTY3JlZW5MaW5lc0MxID0gbmV3X1NjcmVlbkxpbmVzQzE7CisgICAgU2NyZWVuTGluZXNDMiA9IG5ld19TY3JlZW5MaW5lc0MyOworICAgIFNjcmVlbkxpbmVzMiA9IG5ld19TY3JlZW5MaW5lczI7CisjZW5kaWYKKyAgICBTY3JlZW5BdHRycyA9IG5ld19TY3JlZW5BdHRyczsKKyAgICBMaW5lT2Zmc2V0ID0gbmV3X0xpbmVPZmZzZXQ7CisgICAgTGluZVdyYXBzID0gbmV3X0xpbmVXcmFwczsKKworICAgIC8qIEl0J3MgaW1wb3J0YW50IHRoYXQgc2NyZWVuX1Jvd3MgYW5kIHNjcmVlbl9Db2x1bW5zIHJlZmxlY3QgdGhlIGFjdHVhbAorICAgICAqIHNpemUgb2YgU2NyZWVuTGluZXNbXS4gIFNldCB0aGVtIGJlZm9yZSBjYWxsaW5nIGFueXRoaW5nLiAqLworI2lmZGVmIEZFQVRfR1VJCisgICAgb2xkX1Jvd3MgPSBzY3JlZW5fUm93czsKKyNlbmRpZgorICAgIHNjcmVlbl9Sb3dzID0gUm93czsKKyAgICBzY3JlZW5fQ29sdW1ucyA9IENvbHVtbnM7CisKKyAgICBtdXN0X3JlZHJhdyA9IENMRUFSOwkvKiBuZWVkIHRvIGNsZWFyIHRoZSBzY3JlZW4gbGF0ZXIgKi8KKyAgICBpZiAoY2xlYXIpCisJc2NyZWVuY2xlYXIyKCk7CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIGVsc2UgaWYgKGd1aS5pbl91c2UKKwkgICAgJiYgIWd1aS5zdGFydGluZworCSAgICAmJiBTY3JlZW5MaW5lcyAhPSBOVUxMCisJICAgICYmIG9sZF9Sb3dzICE9IFJvd3MpCisgICAgeworCSh2b2lkKWd1aV9yZWRyYXdfYmxvY2soMCwgMCwgKGludClSb3dzIC0gMSwgKGludClDb2x1bW5zIC0gMSwgMCk7CisJLyoKKwkgKiBBZGp1c3QgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IsIGZvciB3aGVuIGV4ZWN1dGluZyBhbiBleHRlcm5hbAorCSAqIGNvbW1hbmQuCisJICovCisJaWYgKG1zZ19yb3cgPj0gUm93cykJCS8qIFJvd3MgZ290IHNtYWxsZXIgKi8KKwkgICAgbXNnX3JvdyA9IFJvd3MgLSAxOwkJLyogcHV0IGN1cnNvciBhdCBsYXN0IHJvdyAqLworCWVsc2UgaWYgKFJvd3MgPiBvbGRfUm93cykJLyogUm93cyBnb3QgYmlnZ2VyICovCisJICAgIG1zZ19yb3cgKz0gUm93cyAtIG9sZF9Sb3dzOyAvKiBwdXQgY3Vyc29yIGluIHNhbWUgcGxhY2UgKi8KKwlpZiAobXNnX2NvbCA+PSBDb2x1bW5zKQkJLyogQ29sdW1ucyBnb3Qgc21hbGxlciAqLworCSAgICBtc2dfY29sID0gQ29sdW1ucyAtIDE7CS8qIHB1dCBjdXJzb3IgYXQgbGFzdCBjb2x1bW4gKi8KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJX0JFT1MKKyAgICB2aW1fdW5sb2NrX3NjcmVlbigpOworI2VuZGlmCisgICAgZW50ZXJlZCA9IEZBTFNFOworfQorCisgICAgdm9pZAorc2NyZWVuY2xlYXIoKQoreworICAgIGNoZWNrX2Zvcl9kZWxheShGQUxTRSk7CisgICAgc2NyZWVuYWxsb2MoRkFMU0UpOwkgICAgLyogYWxsb2NhdGUgc2NyZWVuIGJ1ZmZlcnMgaWYgc2l6ZSBjaGFuZ2VkICovCisgICAgc2NyZWVuY2xlYXIyKCk7CSAgICAvKiBjbGVhciB0aGUgc2NyZWVuICovCit9CisKKyAgICBzdGF0aWMgdm9pZAorc2NyZWVuY2xlYXIyKCkKK3sKKyAgICBpbnQJICAgIGk7CisKKyAgICBpZiAoc3RhcnRpbmcgPT0gTk9fU0NSRUVOIHx8IFNjcmVlbkxpbmVzID09IE5VTEwKKyNpZmRlZiBGRUFUX0dVSQorCSAgICB8fCAoZ3VpLmluX3VzZSAmJiBndWkuc3RhcnRpbmcpCisjZW5kaWYKKwkgICAgKQorCXJldHVybjsKKworI2lmZGVmIEZFQVRfR1VJCisgICAgaWYgKCFndWkuaW5fdXNlKQorI2VuZGlmCisJc2NyZWVuX2F0dHIgPSAtMTsJLyogZm9yY2Ugc2V0dGluZyB0aGUgTm9ybWFsIGNvbG9ycyAqLworICAgIHNjcmVlbl9zdG9wX2hpZ2hsaWdodCgpOwkvKiBkb24ndCB3YW50IGhpZ2hsaWdodGluZyBoZXJlICovCisKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIC8qIGRpc2FibGUgc2VsZWN0aW9uIHdpdGhvdXQgcmVkcmF3aW5nIGl0ICovCisgICAgY2xpcF9zY3JvbGxfc2VsZWN0aW9uKDk5OTkpOworI2VuZGlmCisKKyAgICAvKiBibGFuayBvdXQgU2NyZWVuTGluZXMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgUm93czsgKytpKQorICAgIHsKKwlsaW5lY2xlYXIoTGluZU9mZnNldFtpXSwgKGludClDb2x1bW5zKTsKKwlMaW5lV3JhcHNbaV0gPSBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoY2FuX2NsZWFyKFRfQ0wpKQorICAgIHsKKwlvdXRfc3RyKFRfQ0wpOwkJLyogY2xlYXIgdGhlIGRpc3BsYXkgKi8KKwljbGVhcl9jbWRsaW5lID0gRkFMU0U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogY2FuJ3QgY2xlYXIgdGhlIHNjcmVlbiwgbWFyayBhbGwgY2hhcnMgd2l0aCBpbnZhbGlkIGF0dHJpYnV0ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUm93czsgKytpKQorCSAgICBsaW5laW52YWxpZChMaW5lT2Zmc2V0W2ldLCAoaW50KUNvbHVtbnMpOworCWNsZWFyX2NtZGxpbmUgPSBUUlVFOworICAgIH0KKworICAgIHNjcmVlbl9jbGVhcmVkID0gVFJVRTsJLyogY2FuIHVzZSBjb250ZW50cyBvZiBTY3JlZW5MaW5lcyBub3cgKi8KKworICAgIHdpbl9yZXN0X2ludmFsaWQoZmlyc3R3aW4pOworICAgIHJlZHJhd19jbWRsaW5lID0gVFJVRTsKKyAgICBpZiAobXVzdF9yZWRyYXcgPT0gQ0xFQVIpCS8qIG5vIG5lZWQgdG8gY2xlYXIgYWdhaW4gKi8KKwltdXN0X3JlZHJhdyA9IE5PVF9WQUxJRDsKKyAgICBjb21wdXRlX2NtZHJvdygpOworICAgIG1zZ19yb3cgPSBjbWRsaW5lX3JvdzsJLyogcHV0IGN1cnNvciBvbiBsYXN0IGxpbmUgZm9yIG1lc3NhZ2VzICovCisgICAgbXNnX2NvbCA9IDA7CisgICAgc2NyZWVuX3N0YXJ0KCk7CQkvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKyAgICBtc2dfc2Nyb2xsZWQgPSAwOwkJLyogY2FuJ3Qgc2Nyb2xsIGJhY2sgKi8KKyAgICBtc2dfZGlkYW55ID0gRkFMU0U7CisgICAgbXNnX2RpZG91dCA9IEZBTFNFOworfQorCisvKgorICogQ2xlYXIgb25lIGxpbmUgaW4gU2NyZWVuTGluZXMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorbGluZWNsZWFyKG9mZiwgd2lkdGgpCisgICAgdW5zaWduZWQJb2ZmOworICAgIGludAkJd2lkdGg7Cit7CisgICAgKHZvaWQpdmltX21lbXNldChTY3JlZW5MaW5lcyArIG9mZiwgJyAnLCAoc2l6ZV90KXdpZHRoICogc2l6ZW9mKHNjaGFyX1QpKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGVuY191dGY4KQorCSh2b2lkKXZpbV9tZW1zZXQoU2NyZWVuTGluZXNVQyArIG9mZiwgMCwKKwkJCQkJICAoc2l6ZV90KXdpZHRoICogc2l6ZW9mKHU4Y2hhcl9UKSk7CisjZW5kaWYKKyAgICAodm9pZCl2aW1fbWVtc2V0KFNjcmVlbkF0dHJzICsgb2ZmLCAwLCAoc2l6ZV90KXdpZHRoICogc2l6ZW9mKHNhdHRyX1QpKTsKK30KKworLyoKKyAqIE1hcmsgb25lIGxpbmUgaW4gU2NyZWVuTGluZXMgaW52YWxpZCBieSBzZXR0aW5nIHRoZSBhdHRyaWJ1dGVzIHRvIGFuCisgKiBpbnZhbGlkIHZhbHVlLgorICovCisgICAgc3RhdGljIHZvaWQKK2xpbmVpbnZhbGlkKG9mZiwgd2lkdGgpCisgICAgdW5zaWduZWQJb2ZmOworICAgIGludAkJd2lkdGg7Cit7CisgICAgKHZvaWQpdmltX21lbXNldChTY3JlZW5BdHRycyArIG9mZiwgLTEsIChzaXplX3Qpd2lkdGggKiBzaXplb2Yoc2F0dHJfVCkpOworfQorCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKy8qCisgKiBDb3B5IHBhcnQgb2YgYSBTY3JlZW5saW5lIGZvciB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvdyAid3AiLgorICovCisgICAgc3RhdGljIHZvaWQKK2xpbmVjb3B5KHRvLCBmcm9tLCB3cCkKKyAgICBpbnQJCXRvOworICAgIGludAkJZnJvbTsKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgdW5zaWduZWQJb2ZmX3RvID0gTGluZU9mZnNldFt0b10gKyB3cC0+d193aW5jb2w7CisgICAgdW5zaWduZWQJb2ZmX2Zyb20gPSBMaW5lT2Zmc2V0W2Zyb21dICsgd3AtPndfd2luY29sOworCisgICAgbWNoX21lbW1vdmUoU2NyZWVuTGluZXMgKyBvZmZfdG8sIFNjcmVlbkxpbmVzICsgb2ZmX2Zyb20sCisJICAgIHdwLT53X3dpZHRoICogc2l6ZW9mKHNjaGFyX1QpKTsKKyMgaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChlbmNfdXRmOCkKKyAgICB7CisJbWNoX21lbW1vdmUoU2NyZWVuTGluZXNVQyArIG9mZl90bywgU2NyZWVuTGluZXNVQyArIG9mZl9mcm9tLAorCQl3cC0+d193aWR0aCAqIHNpemVvZih1OGNoYXJfVCkpOworCW1jaF9tZW1tb3ZlKFNjcmVlbkxpbmVzQzEgKyBvZmZfdG8sIFNjcmVlbkxpbmVzQzEgKyBvZmZfZnJvbSwKKwkJd3AtPndfd2lkdGggKiBzaXplb2YodThjaGFyX1QpKTsKKwltY2hfbWVtbW92ZShTY3JlZW5MaW5lc0MyICsgb2ZmX3RvLCBTY3JlZW5MaW5lc0MyICsgb2ZmX2Zyb20sCisJCXdwLT53X3dpZHRoICogc2l6ZW9mKHU4Y2hhcl9UKSk7CisgICAgfQorICAgIGlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUpCisJbWNoX21lbW1vdmUoU2NyZWVuTGluZXMyICsgb2ZmX3RvLCBTY3JlZW5MaW5lczIgKyBvZmZfZnJvbSwKKwkJd3AtPndfd2lkdGggKiBzaXplb2Yoc2NoYXJfVCkpOworIyBlbmRpZgorICAgIG1jaF9tZW1tb3ZlKFNjcmVlbkF0dHJzICsgb2ZmX3RvLCBTY3JlZW5BdHRycyArIG9mZl9mcm9tLAorCSAgICB3cC0+d193aWR0aCAqIHNpemVvZihzYXR0cl9UKSk7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGNsZWFyaW5nIHdpdGggdGVybSBzdHJpbmcgInAiIHdvdWxkIHdvcmsuCisgKiBJdCBjYW4ndCB3b3JrIHdoZW4gdGhlIHN0cmluZyBpcyBlbXB0eSBvciBpdCB3b24ndCBzZXQgdGhlIHJpZ2h0IGJhY2tncm91bmQuCisgKi8KKyAgICBpbnQKK2Nhbl9jbGVhcihwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICByZXR1cm4gKCpwICE9IE5VTCAmJiAodF9jb2xvcnMgPD0gMQorI2lmZGVmIEZFQVRfR1VJCisJCXx8IGd1aS5pbl91c2UKKyNlbmRpZgorCQl8fCBjdGVybV9ub3JtYWxfYmdfY29sb3IgPT0gMCB8fCAqVF9VVCAhPSBOVUwpKTsKK30KKworLyoKKyAqIFJlc2V0IGN1cnNvciBwb3NpdGlvbi4gVXNlIHdoZW5ldmVyIGN1cnNvciB3YXMgbW92ZWQgYmVjYXVzZSBvZiBvdXRwdXR0aW5nCisgKiBzb21ldGhpbmcgZGlyZWN0bHkgdG8gdGhlIHNjcmVlbiAoc2hlbGwgY29tbWFuZHMpIG9yIGEgdGVybWluYWwgY29udHJvbAorICogY29kZS4KKyAqLworICAgIHZvaWQKK3NjcmVlbl9zdGFydCgpCit7CisgICAgc2NyZWVuX2N1cl9yb3cgPSBzY3JlZW5fY3VyX2NvbCA9IDk5OTk7Cit9CisKKy8qCisgKiBOb3RlIHRoYXQgdGhlIGN1cnNvciBoYXMgZ29uZSBkb3duIHRvIHRoZSBuZXh0IGxpbmUsIGNvbHVtbiAwLgorICogVXNlZCBmb3IgRXggbW9kZS4KKyAqLworICAgIHZvaWQKK3NjcmVlbl9kb3duKCkKK3sKKyAgICBzY3JlZW5fY3VyX2NvbCA9IDA7CisgICAgaWYgKHNjcmVlbl9jdXJfcm93IDwgUm93cyAtIDEpCisJKytzY3JlZW5fY3VyX3JvdzsKK30KKworLyoKKyAqIE1vdmUgdGhlIGN1cnNvciB0byBwb3NpdGlvbiAicm93IiwiY29sIiBpbiB0aGUgc2NyZWVuLgorICogVGhpcyB0cmllcyB0byBmaW5kIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gbW92ZSwgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mCisgKiBjaGFyYWN0ZXJzIHNlbnQgdG8gdGhlIHRlcm1pbmFsLgorICovCisgICAgdm9pZAord2luZGdvdG8ocm93LCBjb2wpCisgICAgaW50CSAgICByb3c7CisgICAgaW50CSAgICBjb2w7Cit7CisgICAgY2hhcl91CSAgICAqcDsKKyAgICBpbnQJCSAgICBpOworICAgIGludAkJICAgIHBsYW47CisgICAgaW50CQkgICAgY29zdDsKKyAgICBpbnQJCSAgICB3b3VsZGJlX2NvbDsKKyAgICBpbnQJCSAgICBub2ludmN1cnM7CisgICAgY2hhcl91CSAgICAqYnM7CisgICAgaW50CQkgICAgZ290b19jb3N0OworICAgIGludAkJICAgIGF0dHI7CisKKyNkZWZpbmUgR09UT19DT1NUICAgNwkvKiBhc3NzdW1lIGEgdGVybV93aW5kZ290bygpIHRha2VzIGFib3V0IDcgY2hhcnMgKi8KKyNkZWZpbmUgSElHSExfQ09TVCAgNQkvKiBhc3N1bWUgdW5oaWdobGlnaHQgdGFrZXMgNSBjaGFycyAqLworCisjZGVmaW5lIFBMQU5fTEUJICAgIDEKKyNkZWZpbmUgUExBTl9DUgkgICAgMgorI2RlZmluZSBQTEFOX05MCSAgICAzCisjZGVmaW5lIFBMQU5fV1JJVEUgIDQKKyAgICAvKiBDYW4ndCB1c2UgU2NyZWVuTGluZXMgdW5sZXNzIGluaXRpYWxpemVkICovCisgICAgaWYgKFNjcmVlbkxpbmVzID09IE5VTEwpCisJcmV0dXJuOworCisgICAgaWYgKGNvbCAhPSBzY3JlZW5fY3VyX2NvbCB8fCByb3cgIT0gc2NyZWVuX2N1cl9yb3cpCisgICAgeworCS8qIENoZWNrIGZvciB2YWxpZCBwb3NpdGlvbi4gKi8KKwlpZiAocm93IDwgMCkJLyogd2luZG93IHdpdGhvdXQgdGV4dCBsaW5lcz8gKi8KKwkgICAgcm93ID0gMDsKKwlpZiAocm93ID49IHNjcmVlbl9Sb3dzKQorCSAgICByb3cgPSBzY3JlZW5fUm93cyAtIDE7CisJaWYgKGNvbCA+PSBzY3JlZW5fQ29sdW1ucykKKwkgICAgY29sID0gc2NyZWVuX0NvbHVtbnMgLSAxOworCisJLyogY2hlY2sgaWYgbm8gY3Vyc29yIG1vdmVtZW50IGlzIGFsbG93ZWQgaW4gaGlnaGxpZ2h0IG1vZGUgKi8KKwlpZiAoc2NyZWVuX2F0dHIgJiYgKlRfTVMgPT0gTlVMKQorCSAgICBub2ludmN1cnMgPSBISUdITF9DT1NUOworCWVsc2UKKwkgICAgbm9pbnZjdXJzID0gMDsKKwlnb3RvX2Nvc3QgPSBHT1RPX0NPU1QgKyBub2ludmN1cnM7CisKKwkvKgorCSAqIFBsYW4gaG93IHRvIGRvIHRoZSBwb3NpdGlvbmluZzoKKwkgKiAxLiBVc2UgQ1IgdG8gbW92ZSBpdCB0byBjb2x1bW4gMCwgc2FtZSByb3cuCisJICogMi4gVXNlIFRfTEUgdG8gbW92ZSBpdCBhIGZldyBjb2x1bW5zIHRvIHRoZSBsZWZ0LgorCSAqIDMuIFVzZSBOTCB0byBtb3ZlIGEgZmV3IGxpbmVzIGRvd24sIGNvbHVtbiAwLgorCSAqIDQuIE1vdmUgYSBmZXcgY29sdW1ucyB0byB0aGUgcmlnaHQgd2l0aCBUX05EIG9yIGJ5IHdyaXRpbmcgY2hhcnMuCisJICoKKwkgKiBEb24ndCBkbyB0aGlzIGlmIHRoZSBjdXJzb3Igd2VudCBiZXlvbmQgdGhlIGxhc3QgY29sdW1uLCB0aGUgY3Vyc29yCisJICogcG9zaXRpb24gaXMgdW5rbm93biB0aGVuIChzb21lIHRlcm1pbmFscyB3cmFwLCBzb21lIGRvbid0ICkKKwkgKgorCSAqIEZpcnN0IGNoZWNrIGlmIHRoZSBoaWdobGlnaHRpbmcgYXR0aWJ1dGVzIGFsbG93IHVzIHRvIHdyaXRlCisJICogY2hhcmFjdGVycyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHJpZ2h0LgorCSAqLworCWlmIChyb3cgPj0gc2NyZWVuX2N1cl9yb3cgJiYgc2NyZWVuX2N1cl9jb2wgPCBDb2x1bW5zKQorCXsKKwkgICAgLyoKKwkgICAgICogSWYgdGhlIGN1cnNvciBpcyBpbiB0aGUgc2FtZSByb3csIGJpZ2dlciBjb2wsIHdlIGNhbiB1c2UgQ1IKKwkgICAgICogb3IgVF9MRS4KKwkgICAgICovCisJICAgIGJzID0gTlVMTDsJCQkgICAgLyogaW5pdCBmb3IgR0NDICovCisJICAgIGF0dHIgPSBzY3JlZW5fYXR0cjsKKwkgICAgaWYgKHJvdyA9PSBzY3JlZW5fY3VyX3JvdyAmJiBjb2wgPCBzY3JlZW5fY3VyX2NvbCkKKwkgICAgeworCQkvKiAibGUiIGlzIHByZWZlcnJlZCBvdmVyICJiYyIsIGJlY2F1c2UgImJjIiBpcyBvYnNvbGV0ZSAqLworCQlpZiAoKlRfTEUpCisJCSAgICBicyA9IFRfTEU7CQkgICAgLyogImN1cnNvciBsZWZ0IiAqLworCQllbHNlCisJCSAgICBicyA9IFRfQkM7CQkgICAgLyogImJhY2tzcGFjZSBjaGFyYWN0ZXIgKG9sZCkgKi8KKwkJaWYgKCpicykKKwkJICAgIGNvc3QgPSAoc2NyZWVuX2N1cl9jb2wgLSBjb2wpICogKGludClTVFJMRU4oYnMpOworCQllbHNlCisJCSAgICBjb3N0ID0gOTk5OworCQlpZiAoY29sICsgMSA8IGNvc3QpCSAgICAvKiB1c2luZyBDUiBpcyBsZXNzIGNoYXJhY3RlcnMgKi8KKwkJeworCQkgICAgcGxhbiA9IFBMQU5fQ1I7CisJCSAgICB3b3VsZGJlX2NvbCA9IDA7CisJCSAgICBjb3N0ID0gMTsJCSAgICAvKiBDUiBpcyBqdXN0IG9uZSBjaGFyYWN0ZXIgKi8KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIHBsYW4gPSBQTEFOX0xFOworCQkgICAgd291bGRiZV9jb2wgPSBjb2w7CisJCX0KKwkJaWYgKG5vaW52Y3VycykJCSAgICAvKiB3aWxsIHN0b3AgaGlnaGxpZ2h0aW5nICovCisJCXsKKwkJICAgIGNvc3QgKz0gbm9pbnZjdXJzOworCQkgICAgYXR0ciA9IDA7CisJCX0KKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIElmIHRoZSBjdXJzb3IgaXMgYWJvdmUgd2hlcmUgd2Ugd2FudCB0byBiZSwgd2UgY2FuIHVzZSBDUiBMRi4KKwkgICAgICovCisJICAgIGVsc2UgaWYgKHJvdyA+IHNjcmVlbl9jdXJfcm93KQorCSAgICB7CisJCXBsYW4gPSBQTEFOX05MOworCQl3b3VsZGJlX2NvbCA9IDA7CisJCWNvc3QgPSAocm93IC0gc2NyZWVuX2N1cl9yb3cpICogMjsgIC8qIENSIExGICovCisJCWlmIChub2ludmN1cnMpCQkgICAgLyogd2lsbCBzdG9wIGhpZ2hsaWdodGluZyAqLworCQl7CisJCSAgICBjb3N0ICs9IG5vaW52Y3VyczsKKwkJICAgIGF0dHIgPSAwOworCQl9CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBJZiB0aGUgY3Vyc29yIGlzIGluIHRoZSBzYW1lIHJvdywgc21hbGxlciBjb2wsIGp1c3QgdXNlIHdyaXRlLgorCSAgICAgKi8KKwkgICAgZWxzZQorCSAgICB7CisJCXBsYW4gPSBQTEFOX1dSSVRFOworCQl3b3VsZGJlX2NvbCA9IHNjcmVlbl9jdXJfY29sOworCQljb3N0ID0gMDsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIENoZWNrIGlmIGFueSBjaGFyYWN0ZXJzIHRoYXQgbmVlZCB0byBiZSB3cml0dGVuIGhhdmUgdGhlCisJICAgICAqIGNvcnJlY3QgYXR0cmlidXRlcy4gIEFsc28gYXZvaWQgVVRGLTggY2hhcmFjdGVycy4KKwkgICAgICovCisJICAgIGkgPSBjb2wgLSB3b3VsZGJlX2NvbDsKKwkgICAgaWYgKGkgPiAwKQorCQljb3N0ICs9IGk7CisJICAgIGlmIChjb3N0IDwgZ290b19jb3N0ICYmIGkgPiAwKQorCSAgICB7CisJCS8qCisJCSAqIENoZWNrIGlmIHRoZSBhdHRyaWJ1dGVzIGFyZSBjb3JyZWN0IHdpdGhvdXQgYWRkaXRpb25hbGx5CisJCSAqIHN0b3BwaW5nIGhpZ2hsaWdodGluZy4KKwkJICovCisJCXAgPSBTY3JlZW5BdHRycyArIExpbmVPZmZzZXRbcm93XSArIHdvdWxkYmVfY29sOworCQl3aGlsZSAoaSAmJiAqcCsrID09IGF0dHIpCisJCSAgICAtLWk7CisJCWlmIChpICE9IDApCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBUcnkgaWYgaXQgd29ya3Mgd2hlbiBoaWdobGlnaHRpbmcgaXMgc3RvcHBlZCBoZXJlLgorCQkgICAgICovCisJCSAgICBpZiAoKi0tcCA9PSAwKQorCQkgICAgeworCQkJY29zdCArPSBub2ludmN1cnM7CisJCQl3aGlsZSAoaSAmJiAqcCsrID09IDApCisJCQkgICAgLS1pOworCQkgICAgfQorCQkgICAgaWYgKGkgIT0gMCkKKwkJCWNvc3QgPSA5OTk7CS8qIGRpZmZlcmVudCBhdHRyaWJ1dGVzLCBkb24ndCBkbyBpdCAqLworCQl9CisjaWZkZWYgRkVBVF9NQllURQorCQlpZiAoZW5jX3V0ZjgpCisJCXsKKwkJICAgIC8qIERvbid0IHVzZSBhbiBVVEYtOCBjaGFyIGZvciBwb3NpdGlvbmluZywgaXQncyBzbG93LiAqLworCQkgICAgZm9yIChpID0gd291bGRiZV9jb2w7IGkgPCBjb2w7ICsraSkKKwkJCWlmIChTY3JlZW5MaW5lc1VDW0xpbmVPZmZzZXRbcm93XSArIGldICE9IDApCisJCQl7CisJCQkgICAgY29zdCA9IDk5OTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmCisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBXZSBjYW4gZG8gaXQgd2l0aG91dCB0ZXJtX3dpbmRnb3RvKCkhCisJICAgICAqLworCSAgICBpZiAoY29zdCA8IGdvdG9fY29zdCkKKwkgICAgeworCQlpZiAocGxhbiA9PSBQTEFOX0xFKQorCQl7CisJCSAgICBpZiAobm9pbnZjdXJzKQorCQkJc2NyZWVuX3N0b3BfaGlnaGxpZ2h0KCk7CisJCSAgICB3aGlsZSAoc2NyZWVuX2N1cl9jb2wgPiBjb2wpCisJCSAgICB7CisJCQlvdXRfc3RyKGJzKTsKKwkJCS0tc2NyZWVuX2N1cl9jb2w7CisJCSAgICB9CisJCX0KKwkJZWxzZSBpZiAocGxhbiA9PSBQTEFOX0NSKQorCQl7CisJCSAgICBpZiAobm9pbnZjdXJzKQorCQkJc2NyZWVuX3N0b3BfaGlnaGxpZ2h0KCk7CisJCSAgICBvdXRfY2hhcignXHInKTsKKwkJICAgIHNjcmVlbl9jdXJfY29sID0gMDsKKwkJfQorCQllbHNlIGlmIChwbGFuID09IFBMQU5fTkwpCisJCXsKKwkJICAgIGlmIChub2ludmN1cnMpCisJCQlzY3JlZW5fc3RvcF9oaWdobGlnaHQoKTsKKwkJICAgIHdoaWxlIChzY3JlZW5fY3VyX3JvdyA8IHJvdykKKwkJICAgIHsKKwkJCW91dF9jaGFyKCdcbicpOworCQkJKytzY3JlZW5fY3VyX3JvdzsKKwkJICAgIH0KKwkJICAgIHNjcmVlbl9jdXJfY29sID0gMDsKKwkJfQorCisJCWkgPSBjb2wgLSBzY3JlZW5fY3VyX2NvbDsKKwkJaWYgKGkgPiAwKQorCQl7CisJCSAgICAvKgorCQkgICAgICogVXNlIGN1cnNvci1yaWdodCBpZiBpdCdzIG9uZSBjaGFyYWN0ZXIgb25seS4gIEF2b2lkcworCQkgICAgICogcmVtb3ZpbmcgYSBsaW5lIG9mIHBpeGVscyBmcm9tIHRoZSBsYXN0IGJvbGQgY2hhciwgd2hlbgorCQkgICAgICogdXNpbmcgdGhlIGJvbGQgdHJpY2sgaW4gdGhlIEdVSS4KKwkJICAgICAqLworCQkgICAgaWYgKFRfTkRbMF0gIT0gTlVMICYmIFRfTkRbMV0gPT0gTlVMKQorCQkgICAgeworCQkJd2hpbGUgKGktLSA+IDApCisJCQkgICAgb3V0X2NoYXIoKlRfTkQpOworCQkgICAgfQorCQkgICAgZWxzZQorCQkgICAgeworCQkJaW50CW9mZjsKKworCQkJb2ZmID0gTGluZU9mZnNldFtyb3ddICsgc2NyZWVuX2N1cl9jb2w7CisJCQl3aGlsZSAoaS0tID4gMCkKKwkJCXsKKwkJCSAgICBpZiAoU2NyZWVuQXR0cnNbb2ZmXSAhPSBzY3JlZW5fYXR0cikKKwkJCQlzY3JlZW5fc3RvcF9oaWdobGlnaHQoKTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgb3V0X2ZsdXNoX2NoZWNrKCk7CisjZW5kaWYKKwkJCSAgICBvdXRfY2hhcihTY3JlZW5MaW5lc1tvZmZdKTsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgaWYgKGVuY19kYmNzID09IERCQ1NfSlBOVQorCQkJCQkJICAmJiBTY3JlZW5MaW5lc1tvZmZdID09IDB4OGUpCisJCQkJb3V0X2NoYXIoU2NyZWVuTGluZXMyW29mZl0pOworI2VuZGlmCisJCQkgICAgKytvZmY7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKwllbHNlCisJICAgIGNvc3QgPSA5OTk7CisKKwlpZiAoY29zdCA+PSBnb3RvX2Nvc3QpCisJeworCSAgICBpZiAobm9pbnZjdXJzKQorCQlzY3JlZW5fc3RvcF9oaWdobGlnaHQoKTsKKwkgICAgaWYgKHJvdyA9PSBzY3JlZW5fY3VyX3JvdyAmJiAoY29sID4gc2NyZWVuX2N1cl9jb2wpICYmCisJCQkJCQkJCSpUX0NSSSAhPSBOVUwpCisJCXRlcm1fY3Vyc29yX3JpZ2h0KGNvbCAtIHNjcmVlbl9jdXJfY29sKTsKKwkgICAgZWxzZQorCQl0ZXJtX3dpbmRnb3RvKHJvdywgY29sKTsKKwl9CisJc2NyZWVuX2N1cl9yb3cgPSByb3c7CisJc2NyZWVuX2N1cl9jb2wgPSBjb2w7CisgICAgfQorfQorCisvKgorICogU2V0IGN1cnNvciB0byBpdHMgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgd2luZG93LgorICovCisgICAgdm9pZAorc2V0Y3Vyc29yKCkKK3sKKyAgICBpZiAocmVkcmF3aW5nKCkpCisgICAgeworCXZhbGlkYXRlX2N1cnNvcigpOworCXdpbmRnb3RvKFdfV0lOUk9XKGN1cndpbikgKyBjdXJ3aW4tPndfd3JvdywKKwkJV19XSU5DT0woY3Vyd2luKSArICgKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQljdXJ3aW4tPndfcF9ybCA/ICgoaW50KVdfV0lEVEgoY3Vyd2luKSAtIGN1cndpbi0+d193Y29sIC0gKAorIyBpZmRlZiBGRUFUX01CWVRFCisJCQloYXNfbWJ5dGUgPyAoKm1iX3B0cjJjZWxscykobWxfZ2V0X2N1cnNvcigpKSA6CisjIGVuZGlmCisJCQkxKSkgOgorI2VuZGlmCisJCQkJCQkJICAgIGN1cndpbi0+d193Y29sKSk7CisgICAgfQorfQorCisKKy8qCisgKiBpbnNlcnQgJ2xpbmVfY291bnQnIGxpbmVzIGF0ICdyb3cnIGluIHdpbmRvdyAnd3AnCisgKiBpZiAnaW52YWxpZCcgaXMgVFJVRSB0aGUgd3AtPndfbGluZXNbXS53bF9sbnVtIGlzIGludmFsaWRhdGVkLgorICogaWYgJ21heWNsZWFyJyBpcyBUUlVFIHRoZSBzY3JlZW4gd2lsbCBiZSBjbGVhcmVkIGlmIGl0IGlzIGZhc3RlciB0aGFuCisgKiBzY3JvbGxpbmcuCisgKiBSZXR1cm5zIEZBSUwgaWYgdGhlIGxpbmVzIGFyZSBub3QgaW5zZXJ0ZWQsIE9LIGZvciBzdWNjZXNzLgorICovCisgICAgaW50Cit3aW5faW5zX2xpbmVzKHdwLCByb3csIGxpbmVfY291bnQsIGludmFsaWQsIG1heWNsZWFyKQorICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCWxpbmVfY291bnQ7CisgICAgaW50CQlpbnZhbGlkOworICAgIGludAkJbWF5Y2xlYXI7Cit7CisgICAgaW50CQlkaWRfZGVsZXRlOworICAgIGludAkJbmV4dHJvdzsKKyAgICBpbnQJCWxhc3Ryb3c7CisgICAgaW50CQlyZXR2YWw7CisKKyAgICBpZiAoaW52YWxpZCkKKwl3cC0+d19saW5lc192YWxpZCA9IDA7CisKKyAgICBpZiAod3AtPndfaGVpZ2h0IDwgNSkKKwlyZXR1cm4gRkFJTDsKKworICAgIGlmIChsaW5lX2NvdW50ID4gd3AtPndfaGVpZ2h0IC0gcm93KQorCWxpbmVfY291bnQgPSB3cC0+d19oZWlnaHQgLSByb3c7CisKKyAgICByZXR2YWwgPSB3aW5fZG9fbGluZXMod3AsIHJvdywgbGluZV9jb3VudCwgbWF5Y2xlYXIsIEZBTFNFKTsKKyAgICBpZiAocmV0dmFsICE9IE1BWUJFKQorCXJldHVybiByZXR2YWw7CisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGlzIGEgbmV4dCB3aW5kb3cgb3IgYSBzdGF0dXMgbGluZSwgd2UgZmlyc3QgdHJ5IHRvIGRlbGV0ZSB0aGUKKyAgICAgKiBsaW5lcyBhdCB0aGUgYm90dG9tIHRvIGF2b2lkIG1lc3Npbmcgd2hhdCBpcyBhZnRlciB0aGUgd2luZG93LgorICAgICAqIElmIHRoaXMgZmFpbHMgYW5kIHRoZXJlIGFyZSBmb2xsb3dpbmcgd2luZG93cywgZG9uJ3QgZG8gYW55dGhpbmcgdG8gYXZvaWQKKyAgICAgKiBtZXNzaW5nIHVwIHRob3NlIHdpbmRvd3MsIGJldHRlciBqdXN0IHJlZHJhdy4KKyAgICAgKi8KKyAgICBkaWRfZGVsZXRlID0gRkFMU0U7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgaWYgKHdwLT53X25leHQgIT0gTlVMTCB8fCB3cC0+d19zdGF0dXNfaGVpZ2h0KQorICAgIHsKKwlpZiAoc2NyZWVuX2RlbF9saW5lcygwLCBXX1dJTlJPVyh3cCkgKyB3cC0+d19oZWlnaHQgLSBsaW5lX2NvdW50LAorCQkJCSAgICBsaW5lX2NvdW50LCAoaW50KVJvd3MsIEZBTFNFLCBOVUxMKSA9PSBPSykKKwkgICAgZGlkX2RlbGV0ZSA9IFRSVUU7CisJZWxzZSBpZiAod3AtPndfbmV4dCkKKwkgICAgcmV0dXJuIEZBSUw7CisgICAgfQorI2VuZGlmCisgICAgLyoKKyAgICAgKiBpZiBubyBsaW5lcyBkZWxldGVkLCBibGFuayB0aGUgbGluZXMgdGhhdCB3aWxsIGVuZCB1cCBiZWxvdyB0aGUgd2luZG93CisgICAgICovCisgICAgaWYgKCFkaWRfZGVsZXRlKQorICAgIHsKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwl3cC0+d19yZWRyX3N0YXR1cyA9IFRSVUU7CisjZW5kaWYKKwlyZWRyYXdfY21kbGluZSA9IFRSVUU7CisJbmV4dHJvdyA9IFdfV0lOUk9XKHdwKSArIHdwLT53X2hlaWdodCArIFdfU1RBVFVTX0hFSUdIVCh3cCk7CisJbGFzdHJvdyA9IG5leHRyb3cgKyBsaW5lX2NvdW50OworCWlmIChsYXN0cm93ID4gUm93cykKKwkgICAgbGFzdHJvdyA9IFJvd3M7CisJc2NyZWVuX2ZpbGwobmV4dHJvdyAtIGxpbmVfY291bnQsIGxhc3Ryb3cgLSBsaW5lX2NvdW50LAorCQkgIFdfV0lOQ09MKHdwKSwgKGludClXX0VORENPTCh3cCksCisJCSAgJyAnLCAnICcsIDApOworICAgIH0KKworICAgIGlmIChzY3JlZW5faW5zX2xpbmVzKDAsIFdfV0lOUk9XKHdwKSArIHJvdywgbGluZV9jb3VudCwgKGludClSb3dzLCBOVUxMKQorCQkJCQkJCQkgICAgICA9PSBGQUlMKQorICAgIHsKKwkgICAgLyogZGVsZXRpb24gd2lsbCBoYXZlIG1lc3NlZCB1cCBvdGhlciB3aW5kb3dzICovCisJaWYgKGRpZF9kZWxldGUpCisJeworI2lmZGVmIEZFQVRfV0lORE9XUworCSAgICB3cC0+d19yZWRyX3N0YXR1cyA9IFRSVUU7CisjZW5kaWYKKwkgICAgd2luX3Jlc3RfaW52YWxpZChXX05FWFQod3ApKTsKKwl9CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogZGVsZXRlICJsaW5lX2NvdW50IiB3aW5kb3cgbGluZXMgYXQgInJvdyIgaW4gd2luZG93ICJ3cCIKKyAqIElmICJpbnZhbGlkIiBpcyBUUlVFIGN1cndpbi0+d19saW5lc1tdIGlzIGludmFsaWRhdGVkLgorICogSWYgIm1heWNsZWFyIiBpcyBUUlVFIHRoZSBzY3JlZW4gd2lsbCBiZSBjbGVhcmVkIGlmIGl0IGlzIGZhc3RlciB0aGFuCisgKiBzY3JvbGxpbmcKKyAqIFJldHVybiBPSyBmb3Igc3VjY2VzcywgRkFJTCBpZiB0aGUgbGluZXMgYXJlIG5vdCBkZWxldGVkLgorICovCisgICAgaW50Cit3aW5fZGVsX2xpbmVzKHdwLCByb3csIGxpbmVfY291bnQsIGludmFsaWQsIG1heWNsZWFyKQorICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCWxpbmVfY291bnQ7CisgICAgaW50CQlpbnZhbGlkOworICAgIGludAkJbWF5Y2xlYXI7Cit7CisgICAgaW50CQlyZXR2YWw7CisKKyAgICBpZiAoaW52YWxpZCkKKwl3cC0+d19saW5lc192YWxpZCA9IDA7CisKKyAgICBpZiAobGluZV9jb3VudCA+IHdwLT53X2hlaWdodCAtIHJvdykKKwlsaW5lX2NvdW50ID0gd3AtPndfaGVpZ2h0IC0gcm93OworCisgICAgcmV0dmFsID0gd2luX2RvX2xpbmVzKHdwLCByb3csIGxpbmVfY291bnQsIG1heWNsZWFyLCBUUlVFKTsKKyAgICBpZiAocmV0dmFsICE9IE1BWUJFKQorCXJldHVybiByZXR2YWw7CisKKyAgICBpZiAoc2NyZWVuX2RlbF9saW5lcygwLCBXX1dJTlJPVyh3cCkgKyByb3csIGxpbmVfY291bnQsCisJCQkJCSAgICAgIChpbnQpUm93cywgRkFMU0UsIE5VTEwpID09IEZBSUwpCisJcmV0dXJuIEZBSUw7CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGFyZSB3aW5kb3dzIG9yIHN0YXR1cyBsaW5lcyBiZWxvdywgdHJ5IHRvIHB1dCB0aGVtIGF0IHRoZQorICAgICAqIGNvcnJlY3QgcGxhY2UuIElmIHdlIGNhbid0IGRvIHRoYXQsIHRoZXkgaGF2ZSB0byBiZSByZWRyYXduLgorICAgICAqLworICAgIGlmICh3cC0+d19uZXh0IHx8IHdwLT53X3N0YXR1c19oZWlnaHQgfHwgY21kbGluZV9yb3cgPCBSb3dzIC0gMSkKKyAgICB7CisJaWYgKHNjcmVlbl9pbnNfbGluZXMoMCwgV19XSU5ST1cod3ApICsgd3AtPndfaGVpZ2h0IC0gbGluZV9jb3VudCwKKwkJCQkJIGxpbmVfY291bnQsIChpbnQpUm93cywgTlVMTCkgPT0gRkFJTCkKKwl7CisJICAgIHdwLT53X3JlZHJfc3RhdHVzID0gVFJVRTsKKwkgICAgd2luX3Jlc3RfaW52YWxpZCh3cC0+d19uZXh0KTsKKwl9CisgICAgfQorICAgIC8qCisgICAgICogSWYgdGhpcyBpcyB0aGUgbGFzdCB3aW5kb3cgYW5kIHRoZXJlIGlzIG5vIHN0YXR1cyBsaW5lLCByZWRyYXcgdGhlCisgICAgICogY29tbWFuZCBsaW5lIGxhdGVyLgorICAgICAqLworICAgIGVsc2UKKyNlbmRpZgorCXJlZHJhd19jbWRsaW5lID0gVFJVRTsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBDb21tb24gY29kZSBmb3Igd2luX2luc19saW5lcygpIGFuZCB3aW5fZGVsX2xpbmVzKCkuCisgKiBSZXR1cm5zIE9LIG9yIEZBSUwgd2hlbiB0aGUgd29yayBoYXMgYmVlbiBkb25lLgorICogUmV0dXJucyBNQVlCRSB3aGVuIG5vdCBmaW5pc2hlZCB5ZXQuCisgKi8KKyAgICBzdGF0aWMgaW50Cit3aW5fZG9fbGluZXMod3AsIHJvdywgbGluZV9jb3VudCwgbWF5Y2xlYXIsIGRlbCkKKyAgICB3aW5fVAkqd3A7CisgICAgaW50CQlyb3c7CisgICAgaW50CQlsaW5lX2NvdW50OworICAgIGludAkJbWF5Y2xlYXI7CisgICAgaW50CQlkZWw7Cit7CisgICAgaW50CQlyZXR2YWw7CisKKyAgICBpZiAoIXJlZHJhd2luZygpIHx8IGxpbmVfY291bnQgPD0gMCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qIG9ubHkgYSBmZXcgbGluZXMgbGVmdDogcmVkcmF3IGlzIGZhc3RlciAqLworICAgIGlmIChtYXljbGVhciAmJiBSb3dzIC0gbGluZV9jb3VudCA8IDUKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCSAgICAmJiB3cC0+d193aWR0aCA9PSBDb2x1bW5zCisjZW5kaWYKKwkgICAgKQorICAgIHsKKwlzY3JlZW5jbGVhcigpOwkgICAgLyogd2lsbCBzZXQgd3AtPndfbGluZXNfdmFsaWQgdG8gMCAqLworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIC8qCisgICAgICogRGVsZXRlIGFsbCByZW1haW5pbmcgbGluZXMKKyAgICAgKi8KKyAgICBpZiAocm93ICsgbGluZV9jb3VudCA+PSB3cC0+d19oZWlnaHQpCisgICAgeworCXNjcmVlbl9maWxsKFdfV0lOUk9XKHdwKSArIHJvdywgV19XSU5ST1cod3ApICsgd3AtPndfaGVpZ2h0LAorCQlXX1dJTkNPTCh3cCksIChpbnQpV19FTkRDT0wod3ApLAorCQknICcsICcgJywgMCk7CisJcmV0dXJuIE9LOworICAgIH0KKworICAgIC8qCisgICAgICogd2hlbiBzY3JvbGxpbmcsIHRoZSBtZXNzYWdlIG9uIHRoZSBjb21tYW5kIGxpbmUgc2hvdWxkIGJlIGNsZWFyZWQsCisgICAgICogb3RoZXJ3aXNlIGl0IHdpbGwgc3RheSB0aGVyZSBmb3JldmVyLgorICAgICAqLworICAgIGNsZWFyX2NtZGxpbmUgPSBUUlVFOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgdGVybWluYWwgY2FuIHNldCBhIHNjcm9sbCByZWdpb24sIHVzZSB0aGF0LgorICAgICAqIEFsd2F5cyBkbyB0aGlzIGluIGEgdmVydGljYWxseSBzcGxpdCB3aW5kb3cuICBUaGlzIHdpbGwgcmVkcmF3IGZyb20KKyAgICAgKiBTY3JlZW5MaW5lc1tdIHdoZW4gdF9DViBpc24ndCBkZWZpbmVkLiAgVGhhdCdzIGZhc3RlciB0aGFuIHVzaW5nCisgICAgICogd2luX2xpbmUoKS4KKyAgICAgKiBEb24ndCB1c2UgYSBzY3JvbGwgcmVnaW9uIHdoZW4gd2UgYXJlIGdvaW5nIHRvIHJlZHJhdyB0aGUgdGV4dCwgd3JpdGluZworICAgICAqIGEgY2hhcmFjdGVyIGluIHRoZSBsb3dlciByaWdodCBjb3JuZXIgb2YgdGhlIHNjcm9sbCByZWdpb24gY2F1c2VzIGEKKyAgICAgKiBzY3JvbGwtdXAgaW4gdGhlIERKR1BQIHZlcnNpb24uCisgICAgICovCisgICAgaWYgKHNjcm9sbF9yZWdpb24KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCSAgICB8fCBXX1dJRFRIKHdwKSAhPSBDb2x1bW5zCisjZW5kaWYKKwkgICAgKQorICAgIHsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCWlmIChzY3JvbGxfcmVnaW9uICYmICh3cC0+d193aWR0aCA9PSBDb2x1bW5zIHx8ICpUX0NTViAhPSBOVUwpKQorI2VuZGlmCisJICAgIHNjcm9sbF9yZWdpb25fc2V0KHdwLCByb3cpOworCWlmIChkZWwpCisJICAgIHJldHZhbCA9IHNjcmVlbl9kZWxfbGluZXMoV19XSU5ST1cod3ApICsgcm93LCAwLCBsaW5lX2NvdW50LAorCQkJCQkgICAgICAgd3AtPndfaGVpZ2h0IC0gcm93LCBGQUxTRSwgd3ApOworCWVsc2UKKwkgICAgcmV0dmFsID0gc2NyZWVuX2luc19saW5lcyhXX1dJTlJPVyh3cCkgKyByb3csIDAsIGxpbmVfY291bnQsCisJCQkJCQkgICAgICB3cC0+d19oZWlnaHQgLSByb3csIHdwKTsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCWlmIChzY3JvbGxfcmVnaW9uICYmICh3cC0+d193aWR0aCA9PSBDb2x1bW5zIHx8ICpUX0NTViAhPSBOVUwpKQorI2VuZGlmCisJICAgIHNjcm9sbF9yZWdpb25fcmVzZXQoKTsKKwlyZXR1cm4gcmV0dmFsOworICAgIH0KKworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIGlmICh3cC0+d19uZXh0ICE9IE5VTEwgJiYgcF90ZikgLyogZG9uJ3QgZGVsZXRlL2luc2VydCBvbiBmYXN0IHRlcm1pbmFsICovCisJcmV0dXJuIEZBSUw7CisjZW5kaWYKKworICAgIHJldHVybiBNQVlCRTsKK30KKworLyoKKyAqIHdpbmRvdyAnd3AnIGFuZCBldmVyeXRoaW5nIGFmdGVyIGl0IGlzIG1lc3NlZCB1cCwgbWFyayBpdCBmb3IgcmVkcmF3CisgKi8KKyAgICBzdGF0aWMgdm9pZAord2luX3Jlc3RfaW52YWxpZCh3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgd2hpbGUgKHdwICE9IE5VTEwpCisjZWxzZQorICAgIGlmICh3cCAhPSBOVUxMKQorI2VuZGlmCisgICAgeworCXJlZHJhd193aW5fbGF0ZXIod3AsIE5PVF9WQUxJRCk7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJd3AtPndfcmVkcl9zdGF0dXMgPSBUUlVFOworCXdwID0gd3AtPndfbmV4dDsKKyNlbmRpZgorICAgIH0KKyAgICByZWRyYXdfY21kbGluZSA9IFRSVUU7Cit9CisKKy8qCisgKiBUaGUgcmVzdCBvZiB0aGUgcm91dGluZXMgaW4gdGhpcyBmaWxlIHBlcmZvcm0gc2NyZWVuIG1hbmlwdWxhdGlvbnMuIFRoZQorICogZ2l2ZW4gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBwaHlzaWNhbGx5IG9uIHRoZSBzY3JlZW4uIFRoZSBjb3JyZXNwb25kaW5nCisgKiBjaGFuZ2UgaXMgYWxzbyBtYWRlIHRvIHRoZSBpbnRlcm5hbCBzY3JlZW4gaW1hZ2UuIEluIHRoaXMgd2F5LCB0aGUgZWRpdG9yCisgKiBhbnRpY2lwYXRlcyB0aGUgZWZmZWN0IG9mIGVkaXRpbmcgY2hhbmdlcyBvbiB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgc2NyZWVuLgorICogVGhhdCB3YXksIHdoZW4gd2UgY2FsbCBzY3JlZW51cGRhdGUgYSBjb21wbGV0ZSByZWRyYXcgaXNuJ3QgdXN1YWxseQorICogbmVjZXNzYXJ5LiBBbm90aGVyIGFkdmFudGFnZSBpcyB0aGF0IHdlIGNhbiBrZWVwIGFkZGluZyBjb2RlIHRvIGFudGljaXBhdGUKKyAqIHNjcmVlbiBjaGFuZ2VzLCBhbmQgaW4gdGhlIG1lYW50aW1lLCBldmVyeXRoaW5nIHN0aWxsIHdvcmtzLgorICovCisKKy8qCisgKiB0eXBlcyBmb3IgaW5zZXJ0aW5nIG9yIGRlbGV0aW5nIGxpbmVzCisgKi8KKyNkZWZpbmUgVVNFX1RfQ0FMICAgMQorI2RlZmluZSBVU0VfVF9DREwgICAyCisjZGVmaW5lIFVTRV9UX0FMICAgIDMKKyNkZWZpbmUgVVNFX1RfQ0UgICAgNAorI2RlZmluZSBVU0VfVF9ETCAgICA1CisjZGVmaW5lIFVTRV9UX1NSICAgIDYKKyNkZWZpbmUgVVNFX05MCSAgICA3CisjZGVmaW5lIFVTRV9UX0NEICAgIDgKKyNkZWZpbmUgVVNFX1JFRFJBVyAgOQorCisvKgorICogaW5zZXJ0IGxpbmVzIG9uIHRoZSBzY3JlZW4gYW5kIHVwZGF0ZSBTY3JlZW5MaW5lc1tdCisgKiAnZW5kJyBpcyB0aGUgbGluZSBhZnRlciB0aGUgc2Nyb2xsZWQgcGFydC4gTm9ybWFsbHkgaXQgaXMgUm93cy4KKyAqIFdoZW4gc2Nyb2xsaW5nIHJlZ2lvbiB1c2VkICdvZmYnIGlzIHRoZSBvZmZzZXQgZnJvbSB0aGUgdG9wIGZvciB0aGUgcmVnaW9uLgorICogJ3JvdycgYW5kICdlbmQnIGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHJlZ2lvbi4KKyAqCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgZm9yIHN1Y2Nlc3MuCisgKi8KKyAgICBzdGF0aWMgaW50CitzY3JlZW5faW5zX2xpbmVzKG9mZiwgcm93LCBsaW5lX2NvdW50LCBlbmQsIHdwKQorICAgIGludAkJb2ZmOworICAgIGludAkJcm93OworICAgIGludAkJbGluZV9jb3VudDsKKyAgICBpbnQJCWVuZDsKKyAgICB3aW5fVAkqd3A7CSAgICAvKiBOVUxMIG9yIHdpbmRvdyB0byB1c2Ugd2lkdGggZnJvbSAqLworeworICAgIGludAkJaTsKKyAgICBpbnQJCWo7CisgICAgdW5zaWduZWQJdGVtcDsKKyAgICBpbnQJCWN1cnNvcl9yb3c7CisgICAgaW50CQl0eXBlOworICAgIGludAkJcmVzdWx0X2VtcHR5OworICAgIGludAkJY2FuX2NlID0gY2FuX2NsZWFyKFRfQ0UpOworCisgICAgLyoKKyAgICAgKiBGQUlMIGlmCisgICAgICogLSB0aGVyZSBpcyBubyB2YWxpZCBzY3JlZW4KKyAgICAgKiAtIHRoZSBzY3JlZW4gaGFzIHRvIGJlIHJlZHJhd24gY29tcGxldGVseQorICAgICAqIC0gdGhlIGxpbmUgY291bnQgaXMgbGVzcyB0aGFuIG9uZQorICAgICAqIC0gdGhlIGxpbmUgY291bnQgaXMgbW9yZSB0aGFuICd0dHlzY3JvbGwnCisgICAgICovCisgICAgaWYgKCFzY3JlZW5fdmFsaWQoVFJVRSkgfHwgbGluZV9jb3VudCA8PSAwIHx8IGxpbmVfY291bnQgPiBwX3R0eXNjcm9sbCkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogVGhlcmUgYXJlIHNldmVuIHdheXMgdG8gaW5zZXJ0IGxpbmVzOgorICAgICAqIDAuIFdoZW4gaW4gYSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvdyBhbmQgdF9DViBpc24ndCBzZXQsIHJlZHJhdyB0aGUKKyAgICAgKiAgICBjaGFyYWN0ZXJzIGZyb20gU2NyZWVuTGluZXNbXS4KKyAgICAgKiAxLiBVc2UgVF9DRCAoY2xlYXIgdG8gZW5kIG9mIGRpc3BsYXkpIGlmIGl0IGV4aXN0cyBhbmQgdGhlIHJlc3VsdCBvZgorICAgICAqCSAgdGhlIGluc2VydCBpcyBqdXN0IGVtcHR5IGxpbmVzCisgICAgICogMi4gVXNlIFRfQ0FMIChpbnNlcnQgbXVsdGlwbGUgbGluZXMpIGlmIGl0IGV4aXN0cyBhbmQgVF9BTCBpcyBub3QKKyAgICAgKgkgIHByZXNlbnQgb3IgbGluZV9jb3VudCA+IDEuIEl0IGxvb2tzIGJldHRlciBpZiB3ZSBkbyBhbGwgdGhlIGluc2VydHMKKyAgICAgKgkgIGF0IG9uY2UuCisgICAgICogMy4gVXNlIFRfQ0RMIChkZWxldGUgbXVsdGlwbGUgbGluZXMpIGlmIGl0IGV4aXN0cyBhbmQgdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgKgkgIGluc2VydCBpcyBqdXN0IGVtcHR5IGxpbmVzIGFuZCBUX0NFIGlzIG5vdCBwcmVzZW50IG9yIGxpbmVfY291bnQgPgorICAgICAqCSAgMS4KKyAgICAgKiA0LiBVc2UgVF9BTCAoaW5zZXJ0IGxpbmUpIGlmIGl0IGV4aXN0cy4KKyAgICAgKiA1LiBVc2UgVF9DRSAoZXJhc2UgbGluZSkgaWYgaXQgZXhpc3RzIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBpbnNlcnQgaXMKKyAgICAgKgkgIGp1c3QgZW1wdHkgbGluZXMuCisgICAgICogNi4gVXNlIFRfREwgKGRlbGV0ZSBsaW5lKSBpZiBpdCBleGlzdHMgYW5kIHRoZSByZXN1bHQgb2YgdGhlIGluc2VydCBpcworICAgICAqCSAganVzdCBlbXB0eSBsaW5lcy4KKyAgICAgKiA3LiBVc2UgVF9TUiAoc2Nyb2xsIHJldmVyc2UpIGlmIGl0IGV4aXN0cyBhbmQgaW5zZXJ0aW5nIGF0IHJvdyAwIGFuZAorICAgICAqCSAgdGhlICdkYScgZmxhZyBpcyBub3Qgc2V0IG9yIHdlIGhhdmUgY2xlYXIgbGluZSBjYXBhYmlsaXR5LgorICAgICAqIDguIHJlZHJhdyB0aGUgY2hhcmFjdGVycyBmcm9tIFNjcmVlbkxpbmVzW10uCisgICAgICoKKyAgICAgKiBDYXJlZnVsOiBJbiBhIGhwdGVybSBzY3JvbGwgcmV2ZXJzZSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQsIGl0IG1vdmVzCisgICAgICogdGhlIHNjcm9sbGJhciBmb3IgdGhlIHdpbmRvdy4gSXQgZG9lcyBoYXZlIGluc2VydCBsaW5lLCB1c2UgdGhhdCBpZiBpdAorICAgICAqIGV4aXN0cy4KKyAgICAgKi8KKyAgICByZXN1bHRfZW1wdHkgPSAocm93ICsgbGluZV9jb3VudCA+PSBlbmQpOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaWYgKHdwICE9IE5VTEwgJiYgd3AtPndfd2lkdGggIT0gQ29sdW1ucyAmJiAqVF9DU1YgPT0gTlVMKQorCXR5cGUgPSBVU0VfUkVEUkFXOworICAgIGVsc2UKKyNlbmRpZgorICAgIGlmIChjYW5fY2xlYXIoVF9DRCkgJiYgcmVzdWx0X2VtcHR5KQorCXR5cGUgPSBVU0VfVF9DRDsKKyAgICBlbHNlIGlmICgqVF9DQUwgIT0gTlVMICYmIChsaW5lX2NvdW50ID4gMSB8fCAqVF9BTCA9PSBOVUwpKQorCXR5cGUgPSBVU0VfVF9DQUw7CisgICAgZWxzZSBpZiAoKlRfQ0RMICE9IE5VTCAmJiByZXN1bHRfZW1wdHkgJiYgKGxpbmVfY291bnQgPiAxIHx8ICFjYW5fY2UpKQorCXR5cGUgPSBVU0VfVF9DREw7CisgICAgZWxzZSBpZiAoKlRfQUwgIT0gTlVMKQorCXR5cGUgPSBVU0VfVF9BTDsKKyAgICBlbHNlIGlmIChjYW5fY2UgJiYgcmVzdWx0X2VtcHR5KQorCXR5cGUgPSBVU0VfVF9DRTsKKyAgICBlbHNlIGlmICgqVF9ETCAhPSBOVUwgJiYgcmVzdWx0X2VtcHR5KQorCXR5cGUgPSBVU0VfVF9ETDsKKyAgICBlbHNlIGlmICgqVF9TUiAhPSBOVUwgJiYgcm93ID09IDAgJiYgKCpUX0RBID09IE5VTCB8fCBjYW5fY2UpKQorCXR5cGUgPSBVU0VfVF9TUjsKKyAgICBlbHNlCisJcmV0dXJuIEZBSUw7CisKKyAgICAvKgorICAgICAqIEZvciBjbGVhcmluZyB0aGUgbGluZXMgc2NyZWVuX2RlbF9saW5lcygpIGlzIHVzZWQuIFRoaXMgd2lsbCBhbHNvIHRha2UKKyAgICAgKiBjYXJlIG9mIHRfZGIgaWYgbmVjZXNzYXJ5LgorICAgICAqLworICAgIGlmICh0eXBlID09IFVTRV9UX0NEIHx8IHR5cGUgPT0gVVNFX1RfQ0RMIHx8CisJCQkJCSB0eXBlID09IFVTRV9UX0NFIHx8IHR5cGUgPT0gVVNFX1RfREwpCisJcmV0dXJuIHNjcmVlbl9kZWxfbGluZXMob2ZmLCByb3csIGxpbmVfY291bnQsIGVuZCwgRkFMU0UsIHdwKTsKKworICAgIC8qCisgICAgICogSWYgdGV4dCBpcyByZXRhaW5lZCBiZWxvdyB0aGUgc2NyZWVuLCBmaXJzdCBjbGVhciBvciBkZWxldGUgYXMgbWFueQorICAgICAqIGxpbmVzIGF0IHRoZSBib3R0b20gb2YgdGhlIHdpbmRvdyBhcyBhcmUgYWJvdXQgdG8gYmUgaW5zZXJ0ZWQgc28gdGhhdAorICAgICAqIHRoZSBkZWxldGVkIGxpbmVzIHdvbid0IGxhdGVyIHN1cmZhY2UgZHVyaW5nIGEgc2NyZWVuX2RlbF9saW5lcy4KKyAgICAgKi8KKyAgICBpZiAoKlRfREIpCisJc2NyZWVuX2RlbF9saW5lcyhvZmYsIGVuZCAtIGxpbmVfY291bnQsIGxpbmVfY291bnQsIGVuZCwgRkFMU0UsIHdwKTsKKworI2lmZGVmIEZFQVRfQ0xJUEJPQVJECisgICAgLyogUmVtb3ZlIGEgbW9kZWxlc3Mgc2VsZWN0aW9uIHdoZW4gaW5zZXJ0aW5nIGxpbmVzIGhhbGZ3YXkgdGhlIHNjcmVlbgorICAgICAqIG9yIG5vdCB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgc2NyZWVuLiAqLworICAgIGlmIChvZmYgKyByb3cgPiAwCisjIGlmZGVmIEZFQVRfVkVSVFNQTElUCisJICAgIHx8ICh3cCAhPSBOVUxMICYmIHdwLT53X3dpZHRoICE9IENvbHVtbnMpCisjIGVuZGlmCisgICAgICAgKQorCWNsaXBfY2xlYXJfc2VsZWN0aW9uKCk7CisgICAgZWxzZQorCWNsaXBfc2Nyb2xsX3NlbGVjdGlvbigtbGluZV9jb3VudCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJX0JFT1MKKyAgICB2aW1fbG9ja19zY3JlZW4oKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJCisgICAgLyogRG9uJ3QgdXBkYXRlIHRoZSBHVUkgY3Vyc29yIGhlcmUsIFNjcmVlbkxpbmVzW10gaXMgaW52YWxpZCB1bnRpbCB0aGUKKyAgICAgKiBzY3JvbGxpbmcgaXMgYWN0dWFsbHkgY2FycmllZCBvdXQuICovCisgICAgZ3VpX2RvbnRfdXBkYXRlX2N1cnNvcigpOworI2VuZGlmCisKKyAgICBpZiAoKlRfQ0NTICE9IE5VTCkJICAgLyogY3Vyc29yIHJlbGF0aXZlIHRvIHJlZ2lvbiAqLworCWN1cnNvcl9yb3cgPSByb3c7CisgICAgZWxzZQorCWN1cnNvcl9yb3cgPSByb3cgKyBvZmY7CisKKyAgICAvKgorICAgICAqIFNoaWZ0IExpbmVPZmZzZXRbXSBsaW5lX2NvdW50IGRvd24gdG8gcmVmbGVjdCB0aGUgaW5zZXJ0ZWQgbGluZXMuCisgICAgICogQ2xlYXIgdGhlIGluc2VydGVkIGxpbmVzIGluIFNjcmVlbkxpbmVzW10uCisgICAgICovCisgICAgcm93ICs9IG9mZjsKKyAgICBlbmQgKz0gb2ZmOworICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lX2NvdW50OyArK2kpCisgICAgeworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJaWYgKHdwICE9IE5VTEwgJiYgd3AtPndfd2lkdGggIT0gQ29sdW1ucykKKwl7CisJICAgIC8qIG5lZWQgdG8gY29weSBwYXJ0IG9mIGEgbGluZSAqLworCSAgICBqID0gZW5kIC0gMSAtIGk7CisJICAgIHdoaWxlICgoaiAtPSBsaW5lX2NvdW50KSA+PSByb3cpCisJCWxpbmVjb3B5KGogKyBsaW5lX2NvdW50LCBqLCB3cCk7CisJICAgIGogKz0gbGluZV9jb3VudDsKKwkgICAgaWYgKGNhbl9jbGVhcigoY2hhcl91ICopIiAiKSkKKwkJbGluZWNsZWFyKExpbmVPZmZzZXRbal0gKyB3cC0+d193aW5jb2wsIHdwLT53X3dpZHRoKTsKKwkgICAgZWxzZQorCQlsaW5laW52YWxpZChMaW5lT2Zmc2V0W2pdICsgd3AtPndfd2luY29sLCB3cC0+d193aWR0aCk7CisJICAgIExpbmVXcmFwc1tqXSA9IEZBTFNFOworCX0KKwllbHNlCisjZW5kaWYKKwl7CisJICAgIGogPSBlbmQgLSAxIC0gaTsKKwkgICAgdGVtcCA9IExpbmVPZmZzZXRbal07CisJICAgIHdoaWxlICgoaiAtPSBsaW5lX2NvdW50KSA+PSByb3cpCisJICAgIHsKKwkJTGluZU9mZnNldFtqICsgbGluZV9jb3VudF0gPSBMaW5lT2Zmc2V0W2pdOworCQlMaW5lV3JhcHNbaiArIGxpbmVfY291bnRdID0gTGluZVdyYXBzW2pdOworCSAgICB9CisJICAgIExpbmVPZmZzZXRbaiArIGxpbmVfY291bnRdID0gdGVtcDsKKwkgICAgTGluZVdyYXBzW2ogKyBsaW5lX2NvdW50XSA9IEZBTFNFOworCSAgICBpZiAoY2FuX2NsZWFyKChjaGFyX3UgKikiICIpKQorCQlsaW5lY2xlYXIodGVtcCwgKGludClDb2x1bW5zKTsKKwkgICAgZWxzZQorCQlsaW5laW52YWxpZCh0ZW1wLCAoaW50KUNvbHVtbnMpOworCX0KKyAgICB9CisjaWZkZWYgRkVBVF9HVUlfQkVPUworICAgIHZpbV91bmxvY2tfc2NyZWVuKCk7CisjZW5kaWYKKworICAgIHNjcmVlbl9zdG9wX2hpZ2hsaWdodCgpOworICAgIHdpbmRnb3RvKGN1cnNvcl9yb3csIDApOworCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICAvKiByZWRyYXcgdGhlIGNoYXJhY3RlcnMgKi8KKyAgICBpZiAodHlwZSA9PSBVU0VfUkVEUkFXKQorCXJlZHJhd19ibG9jayhyb3csIGVuZCwgd3ApOworICAgIGVsc2UKKyNlbmRpZgorCWlmICh0eXBlID09IFVTRV9UX0NBTCkKKyAgICB7CisJdGVybV9hcHBlbmRfbGluZXMobGluZV9jb3VudCk7CisJc2NyZWVuX3N0YXJ0KCk7CQkvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGluZV9jb3VudDsgaSsrKQorCXsKKwkgICAgaWYgKHR5cGUgPT0gVVNFX1RfQUwpCisJICAgIHsKKwkJaWYgKGkgJiYgY3Vyc29yX3JvdyAhPSAwKQorCQkgICAgd2luZGdvdG8oY3Vyc29yX3JvdywgMCk7CisJCW91dF9zdHIoVF9BTCk7CisJICAgIH0KKwkgICAgZWxzZSAgLyogdHlwZSA9PSBVU0VfVF9TUiAqLworCQlvdXRfc3RyKFRfU1IpOworCSAgICBzY3JlZW5fc3RhcnQoKTsJICAgIC8qIGRvbid0IGtub3cgd2hlcmUgY3Vyc29yIGlzIG5vdyAqLworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFdpdGggc2Nyb2xsLXJldmVyc2UgYW5kICdkYScgZmxhZyBzZXQgd2UgbmVlZCB0byBjbGVhciB0aGUgbGluZXMgdGhhdAorICAgICAqIGhhdmUgYmVlbiBzY3JvbGxlZCBkb3duIGludG8gdGhlIHJlZ2lvbi4KKyAgICAgKi8KKyAgICBpZiAodHlwZSA9PSBVU0VfVF9TUiAmJiAqVF9EQSkKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IGxpbmVfY291bnQ7ICsraSkKKwl7CisJICAgIHdpbmRnb3RvKG9mZiArIGksIDApOworCSAgICBvdXRfc3RyKFRfQ0UpOworCSAgICBzY3JlZW5fc3RhcnQoKTsJICAgIC8qIGRvbid0IGtub3cgd2hlcmUgY3Vyc29yIGlzIG5vdyAqLworCX0KKyAgICB9CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIGd1aV9jYW5fdXBkYXRlX2N1cnNvcigpOworICAgIGlmIChndWkuaW5fdXNlKQorCW91dF9mbHVzaCgpOwkvKiBhbHdheXMgZmx1c2ggYWZ0ZXIgYSBzY3JvbGwgKi8KKyNlbmRpZgorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIGRlbGV0ZSBsaW5lcyBvbiB0aGUgc2NyZWVuIGFuZCB1cGRhdGUgU2NyZWVuTGluZXNbXQorICogJ2VuZCcgaXMgdGhlIGxpbmUgYWZ0ZXIgdGhlIHNjcm9sbGVkIHBhcnQuIE5vcm1hbGx5IGl0IGlzIFJvd3MuCisgKiBXaGVuIHNjcm9sbGluZyByZWdpb24gdXNlZCAnb2ZmJyBpcyB0aGUgb2Zmc2V0IGZyb20gdGhlIHRvcCBmb3IgdGhlIHJlZ2lvbi4KKyAqICdyb3cnIGFuZCAnZW5kJyBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSByZWdpb24uCisgKgorICogUmV0dXJuIE9LIGZvciBzdWNjZXNzLCBGQUlMIGlmIHRoZSBsaW5lcyBhcmUgbm90IGRlbGV0ZWQuCisgKi8KKy8qQVJHU1VTRUQqLworICAgIGludAorc2NyZWVuX2RlbF9saW5lcyhvZmYsIHJvdywgbGluZV9jb3VudCwgZW5kLCBmb3JjZSwgd3ApCisgICAgaW50CQlvZmY7CisgICAgaW50CQlyb3c7CisgICAgaW50CQlsaW5lX2NvdW50OworICAgIGludAkJZW5kOworICAgIGludAkJZm9yY2U7CQkvKiBldmVuIHdoZW4gbGluZV9jb3VudCA+IHBfdHR5c2Nyb2xsICovCisgICAgd2luX1QJKndwOwkJLyogTlVMTCBvciB3aW5kb3cgdG8gdXNlIHdpZHRoIGZyb20gKi8KK3sKKyAgICBpbnQJCWo7CisgICAgaW50CQlpOworICAgIHVuc2lnbmVkCXRlbXA7CisgICAgaW50CQljdXJzb3Jfcm93OworICAgIGludAkJY3Vyc29yX2VuZDsKKyAgICBpbnQJCXJlc3VsdF9lbXB0eTsJLyogcmVzdWx0IGlzIGVtcHR5IHVudGlsIGVuZCBvZiByZWdpb24gKi8KKyAgICBpbnQJCWNhbl9kZWxldGU7CS8qIGRlbGV0aW5nIGxpbmUgY29kZXMgY2FuIGJlIHVzZWQgKi8KKyAgICBpbnQJCXR5cGU7CisKKyAgICAvKgorICAgICAqIEZBSUwgaWYKKyAgICAgKiAtIHRoZXJlIGlzIG5vIHZhbGlkIHNjcmVlbgorICAgICAqIC0gdGhlIHNjcmVlbiBoYXMgdG8gYmUgcmVkcmF3biBjb21wbGV0ZWx5CisgICAgICogLSB0aGUgbGluZSBjb3VudCBpcyBsZXNzIHRoYW4gb25lCisgICAgICogLSB0aGUgbGluZSBjb3VudCBpcyBtb3JlIHRoYW4gJ3R0eXNjcm9sbCcKKyAgICAgKi8KKyAgICBpZiAoIXNjcmVlbl92YWxpZChUUlVFKSB8fCBsaW5lX2NvdW50IDw9IDAgfHwKKwkJCQkJICghZm9yY2UgJiYgbGluZV9jb3VudCA+IHBfdHR5c2Nyb2xsKSkKKwlyZXR1cm4gRkFJTDsKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgcmVnaW9uIHdpbGwgYmVjb21lIGVtcHR5LgorICAgICAqLworICAgIHJlc3VsdF9lbXB0eSA9IHJvdyArIGxpbmVfY291bnQgPj0gZW5kOworCisgICAgLyoKKyAgICAgKiBXZSBjYW4gZGVsZXRlIGxpbmVzIG9ubHkgd2hlbiAnZGInIGZsYWcgbm90IHNldCBvciB3aGVuICdjZScgb3B0aW9uCisgICAgICogYXZhaWxhYmxlLgorICAgICAqLworICAgIGNhbl9kZWxldGUgPSAoKlRfREIgPT0gTlVMIHx8IGNhbl9jbGVhcihUX0NFKSk7CisKKyAgICAvKgorICAgICAqIFRoZXJlIGFyZSBzaXggd2F5cyB0byBkZWxldGUgbGluZXM6CisgICAgICogMC4gV2hlbiBpbiBhIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93IGFuZCB0X0NWIGlzbid0IHNldCwgcmVkcmF3IHRoZQorICAgICAqICAgIGNoYXJhY3RlcnMgZnJvbSBTY3JlZW5MaW5lc1tdLgorICAgICAqIDEuIFVzZSBUX0NEIGlmIGl0IGV4aXN0cyBhbmQgdGhlIHJlc3VsdCBpcyBlbXB0eS4KKyAgICAgKiAyLiBVc2UgbmV3bGluZXMgaWYgcm93ID09IDAgYW5kIGNvdW50ID09IDEgb3IgVF9DREwgZG9lcyBub3QgZXhpc3QuCisgICAgICogMy4gVXNlIFRfQ0RMIChkZWxldGUgbXVsdGlwbGUgbGluZXMpIGlmIGl0IGV4aXN0cyBhbmQgbGluZV9jb3VudCA+IDEgb3IKKyAgICAgKgkgIG5vbmUgb2YgdGhlIG90aGVyIHdheXMgd29yay4KKyAgICAgKiA0LiBVc2UgVF9DRSAoZXJhc2UgbGluZSkgaWYgdGhlIHJlc3VsdCBpcyBlbXB0eS4KKyAgICAgKiA1LiBVc2UgVF9ETCAoZGVsZXRlIGxpbmUpIGlmIGl0IGV4aXN0cy4KKyAgICAgKiA2LiByZWRyYXcgdGhlIGNoYXJhY3RlcnMgZnJvbSBTY3JlZW5MaW5lc1tdLgorICAgICAqLworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaWYgKHdwICE9IE5VTEwgJiYgd3AtPndfd2lkdGggIT0gQ29sdW1ucyAmJiAqVF9DU1YgPT0gTlVMKQorCXR5cGUgPSBVU0VfUkVEUkFXOworICAgIGVsc2UKKyNlbmRpZgorICAgIGlmIChjYW5fY2xlYXIoVF9DRCkgJiYgcmVzdWx0X2VtcHR5KQorCXR5cGUgPSBVU0VfVF9DRDsKKyNpZiBkZWZpbmVkKF9fQkVPU19fKSAmJiBkZWZpbmVkKEJFT1NfRFI4KQorICAgIC8qCisgICAgICogVVNFX05MIGRvZXMgbm90IHNlZW0gdG8gd29yayBpbiBUZXJtaW5hbCBvZiBEUjggc28gd2Ugc2V0IFRfREI9IiIgaW4KKyAgICAgKiBpdHMgaW50ZXJuYWwgdGVybWNhcC4uLiB0aGlzIHdvcmtzIG9rYXkgZm9yIHRlc3RzIHdoaWNoIHRlc3QgKlRfREIgIT0KKyAgICAgKiBOVUwuICBJdCBoYXMgdGhlIGRpc2FkdmFudGFnZSB0aGF0IHRoZSB1c2VyIGNhbm5vdCB1c2UgYW55IDpzZXQgdF8qCisgICAgICogY29tbWFuZCB0byBnZXQgVF9EQiAoYmFjaykgdG8gZW1wdHlfb3B0aW9uLCBvbmx5IDpzZXQgdGVybT0uLi4gd2lsbCBkbworICAgICAqIHRoZSB0cmljay4uLgorICAgICAqIEFueXdheSwgdGhpcyBoYWNrIHdpbGwgaG9wZWZ1bGx5IGdvIGF3YXkgd2l0aCB0aGUgbmV4dCBPUyByZWxlYXNlLgorICAgICAqIChPbGFmIFNlaWJlcnQpCisgICAgICovCisgICAgZWxzZSBpZiAocm93ID09IDAgJiYgVF9EQiA9PSBlbXB0eV9vcHRpb24KKwkJCQkJJiYgKGxpbmVfY291bnQgPT0gMSB8fCAqVF9DREwgPT0gTlVMKSkKKyNlbHNlCisgICAgZWxzZSBpZiAocm93ID09IDAgJiYgKAorI2lmbmRlZiBBTUlHQQorCS8qIE9uIHRoZSBBbWlnYSwgc29tZWhvdyAnXG4nIG9uIHRoZSBsYXN0IGxpbmUgZG9lc24ndCBhbHdheXMgc2Nyb2xsCisJICogdXAsIHNvIHVzZSBkZWxldGUtbGluZSBjb21tYW5kICovCisJCQkgICAgbGluZV9jb3VudCA9PSAxIHx8CisjZW5kaWYKKwkJCQkJCSpUX0NETCA9PSBOVUwpKQorI2VuZGlmCisJdHlwZSA9IFVTRV9OTDsKKyAgICBlbHNlIGlmICgqVF9DREwgIT0gTlVMICYmIGxpbmVfY291bnQgPiAxICYmIGNhbl9kZWxldGUpCisJdHlwZSA9IFVTRV9UX0NETDsKKyAgICBlbHNlIGlmIChjYW5fY2xlYXIoVF9DRSkgJiYgcmVzdWx0X2VtcHR5CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkgICAgJiYgKHdwID09IE5VTEwgfHwgd3AtPndfd2lkdGggPT0gQ29sdW1ucykKKyNlbmRpZgorCSAgICApCisJdHlwZSA9IFVTRV9UX0NFOworICAgIGVsc2UgaWYgKCpUX0RMICE9IE5VTCAmJiBjYW5fZGVsZXRlKQorCXR5cGUgPSBVU0VfVF9ETDsKKyAgICBlbHNlIGlmICgqVF9DREwgIT0gTlVMICYmIGNhbl9kZWxldGUpCisJdHlwZSA9IFVTRV9UX0NETDsKKyAgICBlbHNlCisJcmV0dXJuIEZBSUw7CisKKyNpZmRlZiBGRUFUX0NMSVBCT0FSRAorICAgIC8qIFJlbW92ZSBhIG1vZGVsZXNzIHNlbGVjdGlvbiB3aGVuIGRlbGV0aW5nIGxpbmVzIGhhbGZ3YXkgdGhlIHNjcmVlbiBvcgorICAgICAqIG5vdCB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgc2NyZWVuLiAqLworICAgIGlmIChvZmYgKyByb3cgPiAwCisjIGlmZGVmIEZFQVRfVkVSVFNQTElUCisJICAgIHx8ICh3cCAhPSBOVUxMICYmIHdwLT53X3dpZHRoICE9IENvbHVtbnMpCisjIGVuZGlmCisgICAgICAgKQorCWNsaXBfY2xlYXJfc2VsZWN0aW9uKCk7CisgICAgZWxzZQorCWNsaXBfc2Nyb2xsX3NlbGVjdGlvbihsaW5lX2NvdW50KTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUlfQkVPUworICAgIHZpbV9sb2NrX3NjcmVlbigpOworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUkKKyAgICAvKiBEb24ndCB1cGRhdGUgdGhlIEdVSSBjdXJzb3IgaGVyZSwgU2NyZWVuTGluZXNbXSBpcyBpbnZhbGlkIHVudGlsIHRoZQorICAgICAqIHNjcm9sbGluZyBpcyBhY3R1YWxseSBjYXJyaWVkIG91dC4gKi8KKyAgICBndWlfZG9udF91cGRhdGVfY3Vyc29yKCk7CisjZW5kaWYKKworICAgIGlmICgqVF9DQ1MgIT0gTlVMKQkgICAgLyogY3Vyc29yIHJlbGF0aXZlIHRvIHJlZ2lvbiAqLworICAgIHsKKwljdXJzb3Jfcm93ID0gcm93OworCWN1cnNvcl9lbmQgPSBlbmQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY3Vyc29yX3JvdyA9IHJvdyArIG9mZjsKKwljdXJzb3JfZW5kID0gZW5kICsgb2ZmOworICAgIH0KKworICAgIC8qCisgICAgICogTm93IHNoaWZ0IExpbmVPZmZzZXRbXSBsaW5lX2NvdW50IHVwIHRvIHJlZmxlY3QgdGhlIGRlbGV0ZWQgbGluZXMuCisgICAgICogQ2xlYXIgdGhlIGluc2VydGVkIGxpbmVzIGluIFNjcmVlbkxpbmVzW10uCisgICAgICovCisgICAgcm93ICs9IG9mZjsKKyAgICBlbmQgKz0gb2ZmOworICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lX2NvdW50OyArK2kpCisgICAgeworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJaWYgKHdwICE9IE5VTEwgJiYgd3AtPndfd2lkdGggIT0gQ29sdW1ucykKKwl7CisJICAgIC8qIG5lZWQgdG8gY29weSBwYXJ0IG9mIGEgbGluZSAqLworCSAgICBqID0gcm93ICsgaTsKKwkgICAgd2hpbGUgKChqICs9IGxpbmVfY291bnQpIDw9IGVuZCAtIDEpCisJCWxpbmVjb3B5KGogLSBsaW5lX2NvdW50LCBqLCB3cCk7CisJICAgIGogLT0gbGluZV9jb3VudDsKKwkgICAgaWYgKGNhbl9jbGVhcigoY2hhcl91ICopIiAiKSkKKwkJbGluZWNsZWFyKExpbmVPZmZzZXRbal0gKyB3cC0+d193aW5jb2wsIHdwLT53X3dpZHRoKTsKKwkgICAgZWxzZQorCQlsaW5laW52YWxpZChMaW5lT2Zmc2V0W2pdICsgd3AtPndfd2luY29sLCB3cC0+d193aWR0aCk7CisJICAgIExpbmVXcmFwc1tqXSA9IEZBTFNFOworCX0KKwllbHNlCisjZW5kaWYKKwl7CisJICAgIC8qIHdob2xlIHdpZHRoLCBtb3ZpbmcgdGhlIGxpbmUgcG9pbnRlcnMgaXMgZmFzdGVyICovCisJICAgIGogPSByb3cgKyBpOworCSAgICB0ZW1wID0gTGluZU9mZnNldFtqXTsKKwkgICAgd2hpbGUgKChqICs9IGxpbmVfY291bnQpIDw9IGVuZCAtIDEpCisJICAgIHsKKwkJTGluZU9mZnNldFtqIC0gbGluZV9jb3VudF0gPSBMaW5lT2Zmc2V0W2pdOworCQlMaW5lV3JhcHNbaiAtIGxpbmVfY291bnRdID0gTGluZVdyYXBzW2pdOworCSAgICB9CisJICAgIExpbmVPZmZzZXRbaiAtIGxpbmVfY291bnRdID0gdGVtcDsKKwkgICAgTGluZVdyYXBzW2ogLSBsaW5lX2NvdW50XSA9IEZBTFNFOworCSAgICBpZiAoY2FuX2NsZWFyKChjaGFyX3UgKikiICIpKQorCQlsaW5lY2xlYXIodGVtcCwgKGludClDb2x1bW5zKTsKKwkgICAgZWxzZQorCQlsaW5laW52YWxpZCh0ZW1wLCAoaW50KUNvbHVtbnMpOworCX0KKyAgICB9CisjaWZkZWYgRkVBVF9HVUlfQkVPUworICAgIHZpbV91bmxvY2tfc2NyZWVuKCk7CisjZW5kaWYKKworICAgIHNjcmVlbl9zdG9wX2hpZ2hsaWdodCgpOworCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICAvKiByZWRyYXcgdGhlIGNoYXJhY3RlcnMgKi8KKyAgICBpZiAodHlwZSA9PSBVU0VfUkVEUkFXKQorCXJlZHJhd19ibG9jayhyb3csIGVuZCwgd3ApOworICAgIGVsc2UKKyNlbmRpZgorCWlmICh0eXBlID09IFVTRV9UX0NEKQkvKiBkZWxldGUgdGhlIGxpbmVzICovCisgICAgeworCXdpbmRnb3RvKGN1cnNvcl9yb3csIDApOworCW91dF9zdHIoVF9DRCk7CisJc2NyZWVuX3N0YXJ0KCk7CQkJLyogZG9uJ3Qga25vdyB3aGVyZSBjdXJzb3IgaXMgbm93ICovCisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gVVNFX1RfQ0RMKQorICAgIHsKKwl3aW5kZ290byhjdXJzb3Jfcm93LCAwKTsKKwl0ZXJtX2RlbGV0ZV9saW5lcyhsaW5lX2NvdW50KTsKKwlzY3JlZW5fc3RhcnQoKTsJCQkvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKyAgICB9CisgICAgLyoKKyAgICAgKiBEZWxldGluZyBsaW5lcyBhdCB0b3Agb2YgdGhlIHNjcmVlbiBvciBzY3JvbGwgcmVnaW9uOiBKdXN0IHNjcm9sbAorICAgICAqIHRoZSB3aG9sZSBzY3JlZW4gKHNjcm9sbCByZWdpb24pIHVwIGJ5IG91dHB1dHRpbmcgbmV3bGluZXMgb24gdGhlCisgICAgICogbGFzdCBsaW5lLgorICAgICAqLworICAgIGVsc2UgaWYgKHR5cGUgPT0gVVNFX05MKQorICAgIHsKKwl3aW5kZ290byhjdXJzb3JfZW5kIC0gMSwgMCk7CisJZm9yIChpID0gbGluZV9jb3VudDsgLS1pID49IDA7ICkKKwkgICAgb3V0X2NoYXIoJ1xuJyk7CQkvKiBjdXJzb3Igd2lsbCByZW1haW4gb24gc2FtZSBsaW5lICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZm9yIChpID0gbGluZV9jb3VudDsgLS1pID49IDA7ICkKKwl7CisJICAgIGlmICh0eXBlID09IFVTRV9UX0RMKQorCSAgICB7CisJCXdpbmRnb3RvKGN1cnNvcl9yb3csIDApOworCQlvdXRfc3RyKFRfREwpOwkJLyogZGVsZXRlIGEgbGluZSAqLworCSAgICB9CisJICAgIGVsc2UgLyogdHlwZSA9PSBVU0VfVF9DRSAqLworCSAgICB7CisJCXdpbmRnb3RvKGN1cnNvcl9yb3cgKyBpLCAwKTsKKwkJb3V0X3N0cihUX0NFKTsJCS8qIGVyYXNlIGEgbGluZSAqLworCSAgICB9CisJICAgIHNjcmVlbl9zdGFydCgpOwkJLyogZG9uJ3Qga25vdyB3aGVyZSBjdXJzb3IgaXMgbm93ICovCisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlICdkYicgZmxhZyBpcyBzZXQsIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGxpbmVzIHRoYXQgaGF2ZSBiZWVuCisgICAgICogc2Nyb2xsZWQgdXAgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcmVnaW9uLgorICAgICAqLworICAgIGlmICgqVF9EQiAmJiAodHlwZSA9PSBVU0VfVF9ETCB8fCB0eXBlID09IFVTRV9UX0NETCkpCisgICAgeworCWZvciAoaSA9IGxpbmVfY291bnQ7IGkgPiAwOyAtLWkpCisJeworCSAgICB3aW5kZ290byhjdXJzb3JfZW5kIC0gaSwgMCk7CisJICAgIG91dF9zdHIoVF9DRSk7CQkvKiBlcmFzZSBhIGxpbmUgKi8KKwkgICAgc2NyZWVuX3N0YXJ0KCk7CQkvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKwl9CisgICAgfQorCisjaWZkZWYgRkVBVF9HVUkKKyAgICBndWlfY2FuX3VwZGF0ZV9jdXJzb3IoKTsKKyAgICBpZiAoZ3VpLmluX3VzZSkKKwlvdXRfZmx1c2goKTsJLyogYWx3YXlzIGZsdXNoIGFmdGVyIGEgc2Nyb2xsICovCisjZW5kaWYKKworICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIHNob3cgdGhlIGN1cnJlbnQgbW9kZSBhbmQgcnVsZXIKKyAqCisgKiBJZiBjbGVhcl9jbWRsaW5lIGlzIFRSVUUsIGNsZWFyIHRoZSByZXN0IG9mIHRoZSBjbWRsaW5lLgorICogSWYgY2xlYXJfY21kbGluZSBpcyBGQUxTRSB0aGVyZSBtYXkgYmUgYSBtZXNzYWdlIHRoZXJlIHRoYXQgbmVlZHMgdG8gYmUKKyAqIGNsZWFyZWQgb25seSBpZiBhIG1vZGUgaXMgc2hvd24uCisgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSAoMCBpZiBubyBtZXNzYWdlKS4KKyAqLworICAgIGludAorc2hvd21vZGUoKQoreworICAgIGludAkJbmVlZF9jbGVhcjsKKyAgICBpbnQJCWxlbmd0aCA9IDA7CisgICAgaW50CQlkb19tb2RlOworICAgIGludAkJYXR0cjsKKyAgICBpbnQJCW53cl9zYXZlOworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorICAgIGludAkJc3ViX2F0dHI7CisjZW5kaWYKKworICAgIGRvX21vZGUgPSAocF9zbWQgJiYgKChTdGF0ZSAmIElOU0VSVCkgfHwgcmVzdGFydF9lZGl0CisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJfHwgVklzdWFsX2FjdGl2ZQorI2VuZGlmCisJCSkpOworICAgIGlmIChkb19tb2RlIHx8IFJlY29yZGluZykKKyAgICB7CisJLyoKKwkgKiBEb24ndCBzaG93IG1vZGUgcmlnaHQgbm93LCB3aGVuIG5vdCByZWRyYXdpbmcgb3IgaW5zaWRlIGEgbWFwcGluZy4KKwkgKiBDYWxsIGNoYXJfYXZhaWwoKSBvbmx5IHdoZW4gd2UgYXJlIGdvaW5nIHRvIHNob3cgc29tZXRoaW5nLCBiZWNhdXNlCisJICogaXQgdGFrZXMgYSBiaXQgb2YgdGltZS4KKwkgKi8KKwlpZiAoIXJlZHJhd2luZygpIHx8IChjaGFyX2F2YWlsKCkgJiYgIUtleVR5cGVkKSB8fCBtc2dfc2lsZW50ICE9IDApCisJeworCSAgICByZWRyYXdfY21kbGluZSA9IFRSVUU7CQkvKiBzaG93IG1vZGUgbGF0ZXIgKi8KKwkgICAgcmV0dXJuIDA7CisJfQorCisJbndyX3NhdmUgPSBuZWVkX3dhaXRfcmV0dXJuOworCisJLyogd2FpdCBhIGJpdCBiZWZvcmUgb3ZlcndyaXRpbmcgYW4gaW1wb3J0YW50IG1lc3NhZ2UgKi8KKwljaGVja19mb3JfZGVsYXkoRkFMU0UpOworCisJLyogaWYgdGhlIGNtZGxpbmUgaXMgbW9yZSB0aGFuIG9uZSBsaW5lIGhpZ2gsIGVyYXNlIHRvcCBsaW5lcyAqLworCW5lZWRfY2xlYXIgPSBjbGVhcl9jbWRsaW5lOworCWlmIChjbGVhcl9jbWRsaW5lICYmIGNtZGxpbmVfcm93IDwgUm93cyAtIDEpCisJICAgIG1zZ19jbHJfY21kbGluZSgpOwkJCS8qIHdpbGwgcmVzZXQgY2xlYXJfY21kbGluZSAqLworCisJLyogUG9zaXRpb24gb24gdGhlIGxhc3QgbGluZSBpbiB0aGUgd2luZG93LCBjb2x1bW4gMCAqLworCW1zZ19wb3NfbW9kZSgpOworCWN1cnNvcl9vZmYoKTsKKwlhdHRyID0gaGxfYXR0cihITEZfQ00pOwkJCS8qIEhpZ2hsaWdodCBtb2RlICovCisJaWYgKGRvX21vZGUpCisJeworCSAgICBNU0dfUFVUU19BVFRSKCItLSIsIGF0dHIpOworI2lmIGRlZmluZWQoRkVBVF9YSU0pCisJICAgIGlmICh4aWMgIT0gTlVMTCAmJiBpbV9nZXRfc3RhdHVzKCkgJiYgIXBfaW1kaXNhYmxlCisJCQkJCSYmIGN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0ID09IEJfSU1PREVfSU0pCisjIGlmZGVmIEhBVkVfR1RLMiAvKiBtb3N0IG9mIHRoZSB0aW1lLCBpdCdzIG5vdCBYSU0gYmVpbmcgdXNlZCAqLworCQlNU0dfUFVUU19BVFRSKCIgSU0iLCBhdHRyKTsKKyMgZWxzZQorCQlNU0dfUFVUU19BVFRSKCIgWElNIiwgYXR0cik7CisjIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfSEFOR1VMSU4pICYmIGRlZmluZWQoRkVBVF9HVUkpCisJICAgIGlmIChndWkuaW5fdXNlKQorCSAgICB7CisJCWlmIChoYW5ndWxfaW5wdXRfc3RhdGVfZ2V0KCkpCisJCSAgICBNU0dfUFVUU19BVFRSKCIgx9Gx2yIsIGF0dHIpOyAgIC8qIEhBTkdVTCAqLworCSAgICB9CisjZW5kaWYKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkgICAgaWYgKGVkaXRfc3VibW9kZSAhPSBOVUxMKQkJLyogQ1RSTC1YIGluIEluc2VydCBtb2RlICovCisJICAgIHsKKwkJLyogVGhlc2UgbWVzc2FnZXMgY2FuIGdldCBsb25nLCBhdm9pZCBhIHdyYXAgaW4gYSBuYXJyb3cKKwkJICogd2luZG93LiAgUHJlZmVyIHNob3dpbmcgZWRpdF9zdWJtb2RlX2V4dHJhLiAqLworCQlsZW5ndGggPSAoUm93cyAtIG1zZ19yb3cpICogQ29sdW1ucyAtIDM7CisJCWlmIChlZGl0X3N1Ym1vZGVfZXh0cmEgIT0gTlVMTCkKKwkJICAgIGxlbmd0aCAtPSB2aW1fc3Ryc2l6ZShlZGl0X3N1Ym1vZGVfZXh0cmEpOworCQlpZiAobGVuZ3RoID4gMCkKKwkJeworCQkgICAgaWYgKGVkaXRfc3VibW9kZV9wcmUgIT0gTlVMTCkKKwkJCWxlbmd0aCAtPSB2aW1fc3Ryc2l6ZShlZGl0X3N1Ym1vZGVfcHJlKTsKKwkJICAgIGlmIChsZW5ndGggLSB2aW1fc3Ryc2l6ZShlZGl0X3N1Ym1vZGUpID4gMCkKKwkJICAgIHsKKwkJCWlmIChlZGl0X3N1Ym1vZGVfcHJlICE9IE5VTEwpCisJCQkgICAgbXNnX3B1dHNfYXR0cihlZGl0X3N1Ym1vZGVfcHJlLCBhdHRyKTsKKwkJCW1zZ19wdXRzX2F0dHIoZWRpdF9zdWJtb2RlLCBhdHRyKTsKKwkJICAgIH0KKwkJICAgIGlmIChlZGl0X3N1Ym1vZGVfZXh0cmEgIT0gTlVMTCkKKwkJICAgIHsKKwkJCU1TR19QVVRTX0FUVFIoIiAiLCBhdHRyKTsgIC8qIGFkZCBhIHNwYWNlIGluIGJldHdlZW4gKi8KKwkJCWlmICgoaW50KWVkaXRfc3VibW9kZV9oaWdobCA8IChpbnQpSExGX0NPVU5UKQorCQkJICAgIHN1Yl9hdHRyID0gaGxfYXR0cihlZGl0X3N1Ym1vZGVfaGlnaGwpOworCQkJZWxzZQorCQkJICAgIHN1Yl9hdHRyID0gYXR0cjsKKwkJCW1zZ19wdXRzX2F0dHIoZWRpdF9zdWJtb2RlX2V4dHJhLCBzdWJfYXR0cik7CisJCSAgICB9CisJCX0KKwkJbGVuZ3RoID0gMDsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkgICAgeworI2lmZGVmIEZFQVRfVlJFUExBQ0UKKwkJaWYgKFN0YXRlICYgVlJFUExBQ0VfRkxBRykKKwkJICAgIE1TR19QVVRTX0FUVFIoXygiIFZSRVBMQUNFIiksIGF0dHIpOworCQllbHNlCisjZW5kaWYKKwkJICAgIGlmIChTdGF0ZSAmIFJFUExBQ0VfRkxBRykKKwkJICAgIE1TR19QVVRTX0FUVFIoXygiIFJFUExBQ0UiKSwgYXR0cik7CisJCWVsc2UgaWYgKFN0YXRlICYgSU5TRVJUKQorCQl7CisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJICAgIGlmIChwX3JpKQorCQkJTVNHX1BVVFNfQVRUUihfKCIgUkVWRVJTRSIpLCBhdHRyKTsKKyNlbmRpZgorCQkgICAgTVNHX1BVVFNfQVRUUihfKCIgSU5TRVJUIiksIGF0dHIpOworCQl9CisJCWVsc2UgaWYgKHJlc3RhcnRfZWRpdCA9PSAnSScpCisJCSAgICBNU0dfUFVUU19BVFRSKF8oIiAoaW5zZXJ0KSIpLCBhdHRyKTsKKwkJZWxzZSBpZiAocmVzdGFydF9lZGl0ID09ICdSJykKKwkJICAgIE1TR19QVVRTX0FUVFIoXygiIChyZXBsYWNlKSIpLCBhdHRyKTsKKwkJZWxzZSBpZiAocmVzdGFydF9lZGl0ID09ICdWJykKKwkJICAgIE1TR19QVVRTX0FUVFIoXygiICh2cmVwbGFjZSkiKSwgYXR0cik7CisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkJaWYgKHBfaGttYXApCisJCSAgICBNU0dfUFVUU19BVFRSKF8oIiBIZWJyZXciKSwgYXR0cik7CisjIGlmZGVmIEZFQVRfRktNQVAKKwkJaWYgKHBfZmttYXApCisJCSAgICBNU0dfUFVUU19BVFRSKGZhcnNpX3RleHRfNSwgYXR0cik7CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX0tFWU1BUAorCQlpZiAoU3RhdGUgJiBMQU5HTUFQKQorCQl7CisjIGlmZGVmIEZFQVRfQVJBQklDCisJCSAgICBpZiAoY3Vyd2luLT53X3BfYXJhYikKKwkJCU1TR19QVVRTX0FUVFIoXygiIEFyYWJpYyIpLCBhdHRyKTsKKwkJICAgIGVsc2UKKyMgZW5kaWYKKwkJCU1TR19QVVRTX0FUVFIoXygiIChsYW5nKSIpLCBhdHRyKTsKKwkJfQorI2VuZGlmCisJCWlmICgoU3RhdGUgJiBJTlNFUlQpICYmIHBfcGFzdGUpCisJCSAgICBNU0dfUFVUU19BVFRSKF8oIiAocGFzdGUpIiksIGF0dHIpOworCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJaWYgKFZJc3VhbF9hY3RpdmUpCisJCXsKKwkJICAgIGNoYXIgKnA7CisKKwkJICAgIC8qIERvbid0IGNvbmNhdGVuYXRlIHNlcGFyYXRlIHdvcmRzIHRvIGF2b2lkIHRyYW5zbGF0aW9uCisJCSAgICAgKiBwcm9ibGVtcy4gKi8KKwkJICAgIHN3aXRjaCAoKFZJc3VhbF9zZWxlY3QgPyA0IDogMCkKKwkJCSAgICArIChWSXN1YWxfbW9kZSA9PSBDdHJsX1YpICogMgorCQkJICAgICsgKFZJc3VhbF9tb2RlID09ICdWJykpCisJCSAgICB7CisJCQljYXNlIDA6CXAgPSBOXygiIFZJU1VBTCIpOyBicmVhazsKKwkJCWNhc2UgMTogcCA9IE5fKCIgVklTVUFMIExJTkUiKTsgYnJlYWs7CisJCQljYXNlIDI6IHAgPSBOXygiIFZJU1VBTCBCTE9DSyIpOyBicmVhazsKKwkJCWNhc2UgNDogcCA9IE5fKCIgU0VMRUNUIik7IGJyZWFrOworCQkJY2FzZSA1OiBwID0gTl8oIiBTRUxFQ1QgTElORSIpOyBicmVhazsKKwkJCWRlZmF1bHQ6IHAgPSBOXygiIFNFTEVDVCBCTE9DSyIpOyBicmVhazsKKwkJICAgIH0KKwkJICAgIE1TR19QVVRTX0FUVFIoXyhwKSwgYXR0cik7CisJCX0KKyNlbmRpZgorCQlNU0dfUFVUU19BVFRSKCIgLS0iLCBhdHRyKTsKKwkgICAgfQorCSAgICBuZWVkX2NsZWFyID0gVFJVRTsKKwl9CisJaWYgKFJlY29yZGluZworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCQkmJiBlZGl0X3N1Ym1vZGUgPT0gTlVMTAkgICAgLyogb3RoZXJ3aXNlIGl0IGdldHMgdG9vIGxvbmcgKi8KKyNlbmRpZgorCQkpCisJeworCSAgICBNU0dfUFVUU19BVFRSKF8oInJlY29yZGluZyIpLCBhdHRyKTsKKwkgICAgbmVlZF9jbGVhciA9IFRSVUU7CisJfQorCWlmIChuZWVkX2NsZWFyIHx8IGNsZWFyX2NtZGxpbmUpCisJICAgIG1zZ19jbHJfZW9zKCk7CisJbXNnX2RpZG91dCA9IEZBTFNFOwkJLyogb3ZlcndyaXRlIHRoaXMgbWVzc2FnZSAqLworCWxlbmd0aCA9IG1zZ19jb2w7CisJbXNnX2NvbCA9IDA7CisJbmVlZF93YWl0X3JldHVybiA9IG53cl9zYXZlOwkvKiBuZXZlciBhc2sgZm9yIGhpdC1yZXR1cm4gZm9yIHRoaXMgKi8KKyAgICB9CisgICAgZWxzZSBpZiAoY2xlYXJfY21kbGluZSAmJiBtc2dfc2lsZW50ID09IDApCisJLyogQ2xlYXIgdGhlIHdob2xlIGNvbW1hbmQgbGluZS4gIFdpbGwgcmVzZXQgImNsZWFyX2NtZGxpbmUiLiAqLworCW1zZ19jbHJfY21kbGluZSgpOworCisjaWZkZWYgRkVBVF9DTURMX0lORk8KKyMgaWZkZWYgRkVBVF9WSVNVQUwKKyAgICAvKiBJbiBWaXN1YWwgbW9kZSB0aGUgc2l6ZSBvZiB0aGUgc2VsZWN0ZWQgYXJlYSBtdXN0IGJlIHJlZHJhd24uICovCisgICAgaWYgKFZJc3VhbF9hY3RpdmUpCisJY2xlYXJfc2hvd2NtZCgpOworIyBlbmRpZgorCisgICAgLyogSWYgdGhlIGxhc3Qgd2luZG93IGhhcyBubyBzdGF0dXMgbGluZSwgdGhlIHJ1bGVyIGlzIGFmdGVyIHRoZSBtb2RlCisgICAgICogbWVzc2FnZSBhbmQgbXVzdCBiZSByZWRyYXduICovCisgICAgaWYgKHJlZHJhd2luZygpCisjIGlmZGVmIEZFQVRfV0lORE9XUworCSAgICAmJiBsYXN0d2luLT53X3N0YXR1c19oZWlnaHQgPT0gMAorIyBlbmRpZgorICAgICAgICkKKwl3aW5fcmVkcl9ydWxlcihsYXN0d2luLCBUUlVFKTsKKyNlbmRpZgorICAgIHJlZHJhd19jbWRsaW5lID0gRkFMU0U7CisgICAgY2xlYXJfY21kbGluZSA9IEZBTFNFOworCisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworLyoKKyAqIFBvc2l0aW9uIGZvciBhIG1vZGUgbWVzc2FnZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCittc2dfcG9zX21vZGUoKQoreworICAgIG1zZ19jb2wgPSAwOworICAgIG1zZ19yb3cgPSBSb3dzIC0gMTsKK30KKworLyoKKyAqIERlbGV0ZSBtb2RlIG1lc3NhZ2UuICBVc2VkIHdoZW4gRVNDIGlzIHR5cGVkIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGVuZAorICogSW5zZXJ0IG1vZGUgKGJ1dCBJbnNlcnQgbW9kZSBkaWRuJ3QgZW5kIHlldCEpLgorICovCisgICAgdm9pZAordW5zaG93bW9kZShmb3JjZSkKKyAgICBpbnQJICAgIGZvcmNlOworeworICAgIC8qCisgICAgICogRG9uJ3QgZGVsZXRlIGl0IHJpZ2h0IG5vdywgd2hlbiBub3QgcmVkcmF3aW5nIG9yIGluc2lkZWQgYSBtYXBwaW5nLgorICAgICAqLworICAgIGlmICghcmVkcmF3aW5nKCkgfHwgKCFmb3JjZSAmJiBjaGFyX2F2YWlsKCkgJiYgIUtleVR5cGVkKSkKKwlyZWRyYXdfY21kbGluZSA9IFRSVUU7CQkvKiBkZWxldGUgbW9kZSBsYXRlciAqLworICAgIGVsc2UKKyAgICB7CisJbXNnX3Bvc19tb2RlKCk7CisJaWYgKFJlY29yZGluZykKKwkgICAgTVNHX1BVVFNfQVRUUihfKCJyZWNvcmRpbmciKSwgaGxfYXR0cihITEZfQ00pKTsKKwltc2dfY2xyX2VvcygpOworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKEZFQVRfV0lMRE1FTlUpIHx8IGRlZmluZWQoRkVBVF9TVExfT1BUKQorLyoKKyAqIEdldCB0aGUgY2hhcmFjdGVyIHRvIHVzZSBpbiBhIHN0YXR1cyBsaW5lLiAgR2V0IGl0cyBhdHRyaWJ1dGVzIGluICIqYXR0ciIuCisgKi8KKyAgICBzdGF0aWMgaW50CitmaWxsY2hhcl9zdGF0dXMoYXR0ciwgaXNfY3Vyd2luKQorICAgIGludAkJKmF0dHI7CisgICAgaW50CQlpc19jdXJ3aW47Cit7CisgICAgaW50IGZpbGw7CisgICAgaWYgKGlzX2N1cndpbikKKyAgICB7CisJKmF0dHIgPSBobF9hdHRyKEhMRl9TKTsKKwlmaWxsID0gZmlsbF9zdGw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJKmF0dHIgPSBobF9hdHRyKEhMRl9TTkMpOworCWZpbGwgPSBmaWxsX3N0bG5jOworICAgIH0KKyAgICAvKiBVc2UgZmlsbCB3aGVuIHRoZXJlIGlzIGhpZ2hsaWdodGluZywgYW5kIGhpZ2hsaWdodGluZyBvZiBjdXJyZW50CisgICAgICogd2luZG93IGRpZmZlcnMsIG9yIHRoZSBmaWxsY2hhcnMgZGlmZmVyLCBvciB0aGlzIGlzIG5vdCB0aGUKKyAgICAgKiBjdXJyZW50IHdpbmRvdyAqLworICAgIGlmICgqYXR0ciAhPSAwICYmICgoaGxfYXR0cihITEZfUykgIT0gaGxfYXR0cihITEZfU05DKQorCQkJfHwgIWlzX2N1cndpbiB8fCBmaXJzdHdpbiA9PSBsYXN0d2luKQorCQkgICAgfHwgKGZpbGxfc3RsICE9IGZpbGxfc3RsbmMpKSkKKwlyZXR1cm4gZmlsbDsKKyAgICBpZiAoaXNfY3Vyd2luKQorCXJldHVybiAnXic7CisgICAgcmV0dXJuICc9JzsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKy8qCisgKiBHZXQgdGhlIGNoYXJhY3RlciB0byB1c2UgaW4gYSBzZXBhcmF0b3IgYmV0d2VlbiB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MuCisgKiBHZXQgaXRzIGF0dHJpYnV0ZXMgaW4gIiphdHRyIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK2ZpbGxjaGFyX3ZzZXAoYXR0cikKKyAgICBpbnQJICAgICphdHRyOworeworICAgICphdHRyID0gaGxfYXR0cihITEZfQyk7CisgICAgaWYgKCphdHRyID09IDAgJiYgZmlsbF92ZXJ0ID09ICcgJykKKwlyZXR1cm4gJ3wnOworICAgIGVsc2UKKwlyZXR1cm4gZmlsbF92ZXJ0OworfQorI2VuZGlmCisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiByZWRyYXdpbmcgc2hvdWxkIGN1cnJlbnRseSBiZSBkb25lLgorICovCisgICAgaW50CityZWRyYXdpbmcoKQoreworICAgIHJldHVybiAoIVJlZHJhd2luZ0Rpc2FibGVkCisJCSAgICAgICAmJiAhKHBfbHogJiYgY2hhcl9hdmFpbCgpICYmICFLZXlUeXBlZCAmJiAhZG9fcmVkcmF3KSk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBwcmludGluZyBtZXNzYWdlcyBzaG91bGQgY3VycmVudGx5IGJlIGRvbmUuCisgKi8KKyAgICBpbnQKK21lc3NhZ2luZygpCit7CisgICAgcmV0dXJuICghKHBfbHogJiYgY2hhcl9hdmFpbCgpICYmICFLZXlUeXBlZCkpOworfQorCisvKgorICogU2hvdyBjdXJyZW50IHN0YXR1cyBpbmZvIGluIHJ1bGVyIGFuZCB2YXJpb3VzIG90aGVyIHBsYWNlcworICogSWYgYWx3YXlzIGlzIEZBTFNFLCBvbmx5IHNob3cgcnVsZXIgaWYgcG9zaXRpb24gaGFzIGNoYW5nZWQuCisgKi8KKyAgICB2b2lkCitzaG93cnVsZXIoYWx3YXlzKQorICAgIGludAkgICAgYWx3YXlzOworeworICAgIGlmICghYWx3YXlzICYmICFyZWRyYXdpbmcoKSkKKwlyZXR1cm47CisjaWYgZGVmaW5lZChGRUFUX1NUTF9PUFQpICYmIGRlZmluZWQoRkVBVF9XSU5ET1dTKQorICAgIGlmICgqcF9zdGwgJiYgY3Vyd2luLT53X3N0YXR1c19oZWlnaHQpCisJd2luX3JlZHJfY3VzdG9tKGN1cndpbiwgRkFMU0UpOworICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJd2luX3JlZHJfcnVsZXIoY3Vyd2luLCBhbHdheXMpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1RJVExFCisgICAgaWYgKG5lZWRfbWFrZXRpdGxlCisjIGlmZGVmIEZFQVRfU1RMX09QVAorCSAgICB8fCAocF9pY29uICYmIChzdGxfc3ludGF4ICYgU1RMX0lOX0lDT04pKQorCSAgICB8fCAocF90aXRsZSAmJiAoc3RsX3N5bnRheCAmIFNUTF9JTl9USVRMRSkpCisjIGVuZGlmCisgICAgICAgKQorCW1ha2V0aXRsZSgpOworI2VuZGlmCit9CisKKyNpZmRlZiBGRUFUX0NNRExfSU5GTworICAgIHN0YXRpYyB2b2lkCit3aW5fcmVkcl9ydWxlcih3cCwgYWx3YXlzKQorICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCWFsd2F5czsKK3sKKyAgICBjaGFyX3UJYnVmZmVyWzcwXTsKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCWZpbGxjaGFyOworICAgIGludAkJYXR0cjsKKyAgICBpbnQJCWVtcHR5X2xpbmUgPSBGQUxTRTsKKyAgICBjb2xucl9UCXZpcnRjb2w7CisgICAgaW50CQlpOworICAgIGludAkJbzsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGludAkJdGhpc19ydV9jb2w7CisgICAgaW50CQlvZmYgPSAwOworICAgIGludAkJd2lkdGggPSBDb2x1bW5zOworIyBkZWZpbmUgV0lUSF9PRkYoeCkgeAorIyBkZWZpbmUgV0lUSF9XSURUSCh4KSB4CisjZWxzZQorIyBkZWZpbmUgV0lUSF9PRkYoeCkgMAorIyBkZWZpbmUgV0lUSF9XSURUSCh4KSBDb2x1bW5zCisjIGRlZmluZSB0aGlzX3J1X2NvbCBydV9jb2wKKyNlbmRpZgorCisgICAgLyogSWYgJ3J1bGVyJyBvZmYgb3IgcmVkcmF3aW5nIGRpc2FibGVkLCBkb24ndCBkbyBhbnl0aGluZyAqLworICAgIGlmICghcF9ydSkKKwlyZXR1cm47CisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIGN1cnNvci5sbnVtIGlzIHZhbGlkLCBzaW5jZSB3aW5fcmVkcl9ydWxlcigpIG1heSBiZSBjYWxsZWQKKyAgICAgKiBhZnRlciBkZWxldGluZyBsaW5lcywgYmVmb3JlIGN1cnNvci5sbnVtIGlzIGNvcnJlY3RlZC4KKyAgICAgKi8KKyAgICBpZiAod3AtPndfY3Vyc29yLmxudW0gPiB3cC0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudCkKKwlyZXR1cm47CisKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKyAgICAvKiBEb24ndCBkcmF3IHRoZSBydWxlciB3aGlsZSBkb2luZyBpbnNlcnQtY29tcGxldGlvbiwgaXQgbWlnaHQgb3ZlcndyaXRlCisgICAgICogdGhlIChsb25nKSBtb2RlIG1lc3NhZ2UuICovCisjIGlmZGVmIEZFQVRfV0lORE9XUworICAgIGlmICh3cCA9PSBsYXN0d2luICYmIGxhc3R3aW4tPndfc3RhdHVzX2hlaWdodCA9PSAwKQorIyBlbmRpZgorCWlmIChlZGl0X3N1Ym1vZGUgIT0gTlVMTCkKKwkgICAgcmV0dXJuOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1NUTF9PUFQKKyAgICBpZiAoKnBfcnVmKQorICAgIHsKKwl3aW5fcmVkcl9jdXN0b20od3AsIFRSVUUpOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgbm90IGluIEluc2VydCBtb2RlIGFuZCB0aGUgbGluZSBpcyBlbXB0eSAod2lsbCBzaG93ICIwLTEiKS4KKyAgICAgKi8KKyAgICBpZiAoIShTdGF0ZSAmIElOU0VSVCkKKwkJJiYgKm1sX2dldF9idWYod3AtPndfYnVmZmVyLCB3cC0+d19jdXJzb3IubG51bSwgRkFMU0UpID09IE5VTCkKKwllbXB0eV9saW5lID0gVFJVRTsKKworICAgIC8qCisgICAgICogT25seSBkcmF3IHRoZSBydWxlciB3aGVuIHNvbWV0aGluZyBjaGFuZ2VkLgorICAgICAqLworICAgIHZhbGlkYXRlX3ZpcnRjb2xfd2luKHdwKTsKKyAgICBpZiAoICAgICAgIHJlZHJhd19jbWRsaW5lCisJICAgIHx8IGFsd2F5cworCSAgICB8fCB3cC0+d19jdXJzb3IubG51bSAhPSB3cC0+d19ydV9jdXJzb3IubG51bQorCSAgICB8fCB3cC0+d19jdXJzb3IuY29sICE9IHdwLT53X3J1X2N1cnNvci5jb2wKKwkgICAgfHwgd3AtPndfdmlydGNvbCAhPSB3cC0+d19ydV92aXJ0Y29sCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCSAgICB8fCB3cC0+d19jdXJzb3IuY29sYWRkICE9IHdwLT53X3J1X2N1cnNvci5jb2xhZGQKKyNlbmRpZgorCSAgICB8fCB3cC0+d190b3BsaW5lICE9IHdwLT53X3J1X3RvcGxpbmUKKwkgICAgfHwgd3AtPndfYnVmZmVyLT5iX21sLm1sX2xpbmVfY291bnQgIT0gd3AtPndfcnVfbGluZV9jb3VudAorI2lmZGVmIEZFQVRfRElGRgorCSAgICB8fCB3cC0+d190b3BmaWxsICE9IHdwLT53X3J1X3RvcGZpbGwKKyNlbmRpZgorCSAgICB8fCBlbXB0eV9saW5lICE9IHdwLT53X3J1X2VtcHR5KQorICAgIHsKKwljdXJzb3Jfb2ZmKCk7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJaWYgKHdwLT53X3N0YXR1c19oZWlnaHQpCisJeworCSAgICByb3cgPSBXX1dJTlJPVyh3cCkgKyB3cC0+d19oZWlnaHQ7CisJICAgIGZpbGxjaGFyID0gZmlsbGNoYXJfc3RhdHVzKCZhdHRyLCB3cCA9PSBjdXJ3aW4pOworIyBpZmRlZiBGRUFUX1ZFUlRTUExJVAorCSAgICBvZmYgPSBXX1dJTkNPTCh3cCk7CisJICAgIHdpZHRoID0gV19XSURUSCh3cCk7CisjIGVuZGlmCisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkgICAgcm93ID0gUm93cyAtIDE7CisJICAgIGZpbGxjaGFyID0gJyAnOworCSAgICBhdHRyID0gMDsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCSAgICB3aWR0aCA9IENvbHVtbnM7CisJICAgIG9mZiA9IDA7CisjZW5kaWYKKwl9CisKKwkvKiBJbiBsaXN0IG1vZGUgdmlydGNvbCBuZWVkcyB0byBiZSByZWNvbXB1dGVkICovCisJdmlydGNvbCA9IHdwLT53X3ZpcnRjb2w7CisJaWYgKHdwLT53X3BfbGlzdCAmJiBsY3NfdGFiMSA9PSBOVUwpCisJeworCSAgICB3cC0+d19wX2xpc3QgPSBGQUxTRTsKKwkgICAgZ2V0dnZjb2wod3AsICZ3cC0+d19jdXJzb3IsIE5VTEwsICZ2aXJ0Y29sLCBOVUxMKTsKKwkgICAgd3AtPndfcF9saXN0ID0gVFJVRTsKKwl9CisKKwkvKgorCSAqIFNvbWUgc3ByaW50ZnMgcmV0dXJuIHRoZSBsZW5ndGgsIHNvbWUgcmV0dXJuIGEgcG9pbnRlci4KKwkgKiBUbyBhdm9pZCBwb3J0YWJpbGl0eSBwcm9ibGVtcyB3ZSB1c2Ugc3RybGVuKCkgaGVyZS4KKwkgKi8KKwlzcHJpbnRmKChjaGFyICopYnVmZmVyLCAiJWxkLCIsCisJCSh3cC0+d19idWZmZXItPmJfbWwubWxfZmxhZ3MgJiBNTF9FTVBUWSkKKwkJICAgID8gMEwKKwkJICAgIDogKGxvbmcpKHdwLT53X2N1cnNvci5sbnVtKSk7CisJY29sX3ByaW50KGJ1ZmZlciArIFNUUkxFTihidWZmZXIpLAorCQkJZW1wdHlfbGluZSA/IDAgOiAoaW50KXdwLT53X2N1cnNvci5jb2wgKyAxLAorCQkJKGludCl2aXJ0Y29sICsgMSk7CisKKwkvKgorCSAqIEFkZCBhICI1MCUiIGlmIHRoZXJlIGlzIHJvb20gZm9yIGl0LgorCSAqIE9uIHRoZSBsYXN0IGxpbmUsIGRvbid0IHByaW50IGluIHRoZSBsYXN0IGNvbHVtbiAoc2Nyb2xscyB0aGUKKwkgKiBzY3JlZW4gdXAgb24gc29tZSB0ZXJtaW5hbHMpLgorCSAqLworCWkgPSAoaW50KVNUUkxFTihidWZmZXIpOworCWdldF9yZWxfcG9zKHdwLCBidWZmZXIgKyBpICsgMSk7CisJbyA9IGkgKyB2aW1fc3Ryc2l6ZShidWZmZXIgKyBpICsgMSk7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJaWYgKHdwLT53X3N0YXR1c19oZWlnaHQgPT0gMCkJLyogY2FuJ3QgdXNlIGxhc3QgY2hhciBvZiBzY3JlZW4gKi8KKyNlbmRpZgorCSAgICArK287CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwl0aGlzX3J1X2NvbCA9IHJ1X2NvbCAtIChDb2x1bW5zIC0gd2lkdGgpOworCWlmICh0aGlzX3J1X2NvbCA8IDApCisJICAgIHRoaXNfcnVfY29sID0gMDsKKyNlbmRpZgorCS8qIE5ldmVyIHVzZSBtb3JlIHRoYW4gaGFsZiB0aGUgd2luZG93L3NjcmVlbiB3aWR0aCwgbGVhdmUgdGhlIG90aGVyCisJICogaGFsZiBmb3IgdGhlIGZpbGVuYW1lLiAqLworCWlmICh0aGlzX3J1X2NvbCA8IChXSVRIX1dJRFRIKHdpZHRoKSArIDEpIC8gMikKKwkgICAgdGhpc19ydV9jb2wgPSAoV0lUSF9XSURUSCh3aWR0aCkgKyAxKSAvIDI7CisJaWYgKHRoaXNfcnVfY29sICsgbyA8IFdJVEhfV0lEVEgod2lkdGgpKQorCXsKKwkgICAgd2hpbGUgKHRoaXNfcnVfY29sICsgbyA8IFdJVEhfV0lEVEgod2lkdGgpKQorCSAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCQlpZiAoaGFzX21ieXRlKQorCQkgICAgaSArPSAoKm1iX2NoYXIyYnl0ZXMpKGZpbGxjaGFyLCBidWZmZXIgKyBpKTsKKwkJZWxzZQorI2VuZGlmCisJCSAgICBidWZmZXJbaSsrXSA9IGZpbGxjaGFyOworCQkrK287CisJICAgIH0KKwkgICAgZ2V0X3JlbF9wb3Mod3AsIGJ1ZmZlciArIGkpOworCX0KKwkvKiBUcnVuY2F0ZSBhdCB3aW5kb3cgYm91bmRhcnkuICovCisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBvID0gMDsKKwkgICAgZm9yIChpID0gMDsgYnVmZmVyW2ldICE9IE5VTDsgaSArPSAoKm1iX3B0cjJsZW5fY2hlY2spKGJ1ZmZlciArIGkpKQorCSAgICB7CisJCW8gKz0gKCptYl9wdHIyY2VsbHMpKGJ1ZmZlciArIGkpOworCQlpZiAodGhpc19ydV9jb2wgKyBvID4gV0lUSF9XSURUSCh3aWR0aCkpCisJCXsKKwkJICAgIGJ1ZmZlcltpXSA9IE5VTDsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisJZWxzZQorI2VuZGlmCisJaWYgKHRoaXNfcnVfY29sICsgKGludClTVFJMRU4oYnVmZmVyKSA+IFdJVEhfV0lEVEgod2lkdGgpKQorCSAgICBidWZmZXJbV0lUSF9XSURUSCh3aWR0aCkgLSB0aGlzX3J1X2NvbF0gPSBOVUw7CisKKwlzY3JlZW5fcHV0cyhidWZmZXIsIHJvdywgdGhpc19ydV9jb2wgKyBXSVRIX09GRihvZmYpLCBhdHRyKTsKKwlpID0gcmVkcmF3X2NtZGxpbmU7CisJc2NyZWVuX2ZpbGwocm93LCByb3cgKyAxLAorCQl0aGlzX3J1X2NvbCArIFdJVEhfT0ZGKG9mZikgKyAoaW50KVNUUkxFTihidWZmZXIpLAorCQkoaW50KShXSVRIX09GRihvZmYpICsgV0lUSF9XSURUSCh3aWR0aCkpLAorCQlmaWxsY2hhciwgZmlsbGNoYXIsIGF0dHIpOworCS8qIGRvbid0IHJlZHJhdyB0aGUgY21kbGluZSBiZWNhdXNlIG9mIHNob3dpbmcgdGhlIHJ1bGVyICovCisJcmVkcmF3X2NtZGxpbmUgPSBpOworCXdwLT53X3J1X2N1cnNvciA9IHdwLT53X2N1cnNvcjsKKwl3cC0+d19ydV92aXJ0Y29sID0gd3AtPndfdmlydGNvbDsKKwl3cC0+d19ydV9lbXB0eSA9IGVtcHR5X2xpbmU7CisJd3AtPndfcnVfdG9wbGluZSA9IHdwLT53X3RvcGxpbmU7CisJd3AtPndfcnVfbGluZV9jb3VudCA9IHdwLT53X2J1ZmZlci0+Yl9tbC5tbF9saW5lX2NvdW50OworI2lmZGVmIEZFQVRfRElGRgorCXdwLT53X3J1X3RvcGZpbGwgPSB3cC0+d190b3BmaWxsOworI2VuZGlmCisgICAgfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvc2VhcmNoLmMgYi9zcmMvc2VhcmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI0ZjllNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zZWFyY2guYwpAQCAtMCwwICsxLDQ0ODcgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKy8qCisgKiBzZWFyY2guYzogY29kZSBmb3Igbm9ybWFsIG1vZGUgc2VhcmNoaW5nIGNvbW1hbmRzCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCitzdGF0aWMgdm9pZCBzYXZlX3JlX3BhdCBfX0FSR1MoKGludCBpZHgsIGNoYXJfdSAqcGF0LCBpbnQgbWFnaWMpKTsKKyNpZmRlZiBGRUFUX0VWQUwKK3N0YXRpYyBpbnQgZmlyc3Rfc3VibWF0Y2ggX19BUkdTKChyZWdtbWF0Y2hfVCAqcnApKTsKKyNlbmRpZgorc3RhdGljIGludCBjaGVja19wcmV2Y29sIF9fQVJHUygoY2hhcl91ICpsaW5lcCwgaW50IGNvbCwgaW50IGNoLCBpbnQgKnByZXZjb2wpKTsKK3N0YXRpYyBpbnQgaW5tYWNybyBfX0FSR1MoKGNoYXJfdSAqLCBjaGFyX3UgKikpOworc3RhdGljIGludCBjaGVja19saW5lY29tbWVudCBfX0FSR1MoKGNoYXJfdSAqbGluZSkpOworc3RhdGljIGludCBjbHMgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50IHNraXBfY2hhcnMgX19BUkdTKChpbnQsIGludCkpOworI2lmZGVmIEZFQVRfVEVYVE9CSgorc3RhdGljIHZvaWQgYmFja19pbl9saW5lIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgZmluZF9maXJzdF9ibGFuayBfX0FSR1MoKHBvc19UICopKTsKK3N0YXRpYyB2b2lkIGZpbmRzZW50X2ZvcndhcmQgX19BUkdTKChsb25nIGNvdW50LCBpbnQgYXRfc3RhcnRfc2VudCkpOworI2VuZGlmCisjaWZkZWYgRkVBVF9GSU5EX0lECitzdGF0aWMgdm9pZCBzaG93X3BhdF9pbl9wYXRoIF9fQVJHUygoY2hhcl91ICosIGludCwKKwkJCQkJIGludCwgaW50LCBGSUxFICosIGxpbmVucl9UICosIGxvbmcpKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfVklNSU5GTworc3RhdGljIHZvaWQgd3ZzcF9vbmUgX19BUkdTKChGSUxFICpmcCwgaW50IGlkeCwgY2hhciAqcywgaW50IHNjKSk7CisjZW5kaWYKKworc3RhdGljIGNoYXJfdSAqdG9wX2JvdF9tc2cgPSAoY2hhcl91ICopTl8oInNlYXJjaCBoaXQgVE9QLCBjb250aW51aW5nIGF0IEJPVFRPTSIpOworc3RhdGljIGNoYXJfdSAqYm90X3RvcF9tc2cgPSAoY2hhcl91ICopTl8oInNlYXJjaCBoaXQgQk9UVE9NLCBjb250aW51aW5nIGF0IFRPUCIpOworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHZhcmlvdXMgc2VhcmNoaW5nLXJlbGF0ZWQgcm91dGluZXMuIFRoZXNlIGZhbGwgaW50bworICogdGhyZWUgZ3JvdXBzOgorICogMS4gc3RyaW5nIHNlYXJjaGVzIChmb3IgLywgPywgbiwgYW5kIE4pCisgKiAyLiBjaGFyYWN0ZXIgc2VhcmNoZXMgd2l0aGluIGEgc2luZ2xlIGxpbmUgKGZvciBmLCBGLCB0LCBULCBldGMpCisgKiAzLiAib3RoZXIiIGtpbmRzIG9mIHNlYXJjaGVzIGxpa2UgdGhlICclJyBjb21tYW5kLCBhbmQgJ3dvcmQnIHNlYXJjaGVzLgorICovCisKKy8qCisgKiBTdHJpbmcgc2VhcmNoZXMKKyAqCisgKiBUaGUgc3RyaW5nIHNlYXJjaCBmdW5jdGlvbnMgYXJlIGRpdmlkZWQgaW50byB0d28gbGV2ZWxzOgorICogbG93ZXN0OiAgc2VhcmNoaXQoKTsgdXNlcyBhbiBwb3NfVCBmb3Igc3RhcnRpbmcgcG9zaXRpb24gYW5kIGZvdW5kIG1hdGNoLgorICogSGlnaGVzdDogZG9fc2VhcmNoKCk7IHVzZXMgY3Vyd2luLT53X2N1cnNvcjsgY2FsbHMgc2VhcmNoaXQoKS4KKyAqCisgKiBUaGUgbGFzdCBzZWFyY2ggcGF0dGVybiBpcyByZW1lbWJlcmVkIGZvciByZXBlYXRpbmcgdGhlIHNhbWUgc2VhcmNoLgorICogVGhpcyBwYXR0ZXJuIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSA6ZywgOnMsID8gYW5kIC8gY29tbWFuZHMuCisgKiBUaGlzIGlzIGluIHNlYXJjaF9yZWdjb21wKCkuCisgKgorICogVGhlIGFjdHVhbCBzdHJpbmcgbWF0Y2hpbmcgaXMgZG9uZSB1c2luZyBhIGhlYXZpbHkgbW9kaWZpZWQgdmVyc2lvbiBvZgorICogSGVucnkgU3BlbmNlcidzIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5LiAgU2VlIHJlZ2V4cC5jLgorICovCisKKy8qIFRoZSBvZmZzZXQgZm9yIGEgc2VhcmNoIGNvbW1hbmQgaXMgc3RvcmUgaW4gYSBzb2ZmIHN0cnVjdCAqLworLyogTm90ZTogb25seSBzcGF0c1swXS5vZmYgaXMgcmVhbGx5IHVzZWQgKi8KK3N0cnVjdCBzb2Zmc2V0Cit7CisgICAgaW50CQlkaXI7CQkvKiBzZWFyY2ggZGlyZWN0aW9uICovCisgICAgaW50CQlsaW5lOwkJLyogc2VhcmNoIGhhcyBsaW5lIG9mZnNldCAqLworICAgIGludAkJZW5kOwkJLyogc2VhcmNoIHNldCBjdXJzb3IgYXQgZW5kICovCisgICAgbG9uZwlvZmY7CQkvKiBsaW5lIG9yIGNoYXIgb2Zmc2V0ICovCit9OworCisvKiBBIHNlYXJjaCBwYXR0ZXJuIGFuZCBpdHMgYXR0cmlidXRlcyBhcmUgc3RvcmVkIGluIGEgc3BhdCBzdHJ1Y3QgKi8KK3N0cnVjdCBzcGF0Cit7CisgICAgY2hhcl91CSAgICAqcGF0OwkvKiB0aGUgcGF0dGVybiAoaW4gYWxsb2NhdGVkIG1lbW9yeSkgb3IgTlVMTCAqLworICAgIGludAkJICAgIG1hZ2ljOwkvKiBtYWdpY25lc3Mgb2YgdGhlIHBhdHRlcm4gKi8KKyAgICBpbnQJCSAgICBub19zY3M7CS8qIG5vIHNtYXJjYXNlIGZvciB0aGlzIHBhdHRlcm4gKi8KKyAgICBzdHJ1Y3Qgc29mZnNldCAgb2ZmOworfTsKKworLyoKKyAqIFR3byBzZWFyY2ggcGF0dGVybnMgYXJlIHJlbWVtYmVyZWQ6IE9uZSBmb3IgdGhlIDpzdWJzdGl0dXRlIGNvbW1hbmQgYW5kCisgKiBvbmUgZm9yIG90aGVyIHNlYXJjaGVzLiAgbGFzdF9pZHggcG9pbnRzIHRvIHRoZSBvbmUgdGhhdCB3YXMgdXNlZCB0aGUgbGFzdAorICogdGltZS4KKyAqLworc3RhdGljIHN0cnVjdCBzcGF0IHNwYXRzWzJdID0KK3sKKyAgICB7TlVMTCwgVFJVRSwgRkFMU0UsIHsnLycsIDAsIDAsIDBMfX0sCS8qIGxhc3QgdXNlZCBzZWFyY2ggcGF0ICovCisgICAge05VTEwsIFRSVUUsIEZBTFNFLCB7Jy8nLCAwLCAwLCAwTH19CS8qIGxhc3QgdXNlZCBzdWJzdGl0dXRlIHBhdCAqLworfTsKKworc3RhdGljIGludCBsYXN0X2lkeCA9IDA7CS8qIGluZGV4IGluIHNwYXRzW10gZm9yIFJFX0xBU1QgKi8KKworI2lmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSB8fCBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qIGNvcHkgb2Ygc3BhdHNbXSwgZm9yIGtlZXBpbmcgdGhlIHNlYXJjaCBwYXR0ZXJucyB3aGlsZSBleGVjdXRpbmcgYXV0b2NtZHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3BhdCAgc2F2ZWRfc3BhdHNbMl07CitzdGF0aWMgaW50CSAgICBzYXZlZF9sYXN0X2lkeCA9IDA7CisjIGlmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCitzdGF0aWMgaW50CSAgICBzYXZlZF9ub19obHNlYXJjaCA9IDA7CisjIGVuZGlmCisjZW5kaWYKKworc3RhdGljIGNoYXJfdQkgICAgKm1yX3BhdHRlcm4gPSBOVUxMOwkvKiBwYXR0ZXJuIHVzZWQgYnkgc2VhcmNoX3JlZ2NvbXAoKSAqLworI2lmZGVmIEZFQVRfUklHSFRMRUZUCitzdGF0aWMgaW50CSAgICBtcl9wYXR0ZXJuX2FsbG9jZWQgPSBGQUxTRTsgLyogbXJfcGF0dGVybiB3YXMgYWxsb2NhdGVkICovCitzdGF0aWMgY2hhcl91CSAgICAqcmV2ZXJzZV90ZXh0IF9fQVJHUygoY2hhcl91ICpzKSk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfRklORF9JRAorLyoKKyAqIFR5cGUgdXNlZCBieSBmaW5kX3BhdHRlcm5faW5fcGF0aCgpIHRvIHJlbWVtYmVyIHdoaWNoIGluY2x1ZGVkIGZpbGVzIGhhdmUKKyAqIGJlZW4gc2VhcmNoZWQgYWxyZWFkeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2VhcmNoZWRGaWxlCit7CisgICAgRklMRQkqZnA7CQkvKiBGaWxlIHBvaW50ZXIgKi8KKyAgICBjaGFyX3UJKm5hbWU7CQkvKiBGdWxsIG5hbWUgb2YgZmlsZSAqLworICAgIGxpbmVucl9UCWxudW07CQkvKiBMaW5lIHdlIHdlcmUgdXAgdG8gaW4gZmlsZSAqLworICAgIGludAkJbWF0Y2hlZDsJLyogRm91bmQgYSBtYXRjaCBpbiB0aGlzIGZpbGUgKi8KK30gU2VhcmNoZWRGaWxlOworI2VuZGlmCisKKy8qCisgKiB0cmFuc2xhdGUgc2VhcmNoIHBhdHRlcm4gZm9yIHZpbV9yZWdjb21wKCkKKyAqCisgKiBwYXRfc2F2ZSA9PSBSRV9TRUFSQ0g6IHNhdmUgcGF0IGluIHNwYXRzW1JFX1NFQVJDSF0ucGF0IChub3JtYWwgc2VhcmNoIGNtZCkKKyAqIHBhdF9zYXZlID09IFJFX1NVQlNUOiBzYXZlIHBhdCBpbiBzcGF0c1tSRV9TVUJTVF0ucGF0ICg6c3Vic3RpdHV0ZSBjb21tYW5kKQorICogcGF0X3NhdmUgPT0gUkVfQk9USDogc2F2ZSBwYXQgaW4gYm90aCBwYXR0ZXJucyAoOmdsb2JhbCBjb21tYW5kKQorICogcGF0X3VzZSAgPT0gUkVfU0VBUkNIOiB1c2UgcHJldmlvdXMgc2VhcmNoIHBhdHRlcm4gaWYgInBhdCIgaXMgTlVMTAorICogcGF0X3VzZSAgPT0gUkVfU1VCU1Q6IHVzZSBwcmV2aW91cyBzdXN0aXR1dGUgcGF0dGVybiBpZiAicGF0IiBpcyBOVUxMCisgKiBwYXRfdXNlICA9PSBSRV9MQVNUOiB1c2UgbGFzdCB1c2VkIHBhdHRlcm4gaWYgInBhdCIgaXMgTlVMTAorICogb3B0aW9ucyAmIFNFQVJDSF9ISVM6IHB1dCBzZWFyY2ggc3RyaW5nIGluIGhpc3RvcnkKKyAqIG9wdGlvbnMgJiBTRUFSQ0hfS0VFUDoga2VlcCBwcmV2aW91cyBzZWFyY2ggcGF0dGVybgorICoKKyAqIHJldHVybnMgRkFJTCBpZiBmYWlsZWQsIE9LIG90aGVyd2lzZS4KKyAqLworICAgIGludAorc2VhcmNoX3JlZ2NvbXAocGF0LCBwYXRfc2F2ZSwgcGF0X3VzZSwgb3B0aW9ucywgcmVnbWF0Y2gpCisgICAgY2hhcl91CSpwYXQ7CisgICAgaW50CQlwYXRfc2F2ZTsKKyAgICBpbnQJCXBhdF91c2U7CisgICAgaW50CQlvcHRpb25zOworICAgIHJlZ21tYXRjaF9UCSpyZWdtYXRjaDsJLyogcmV0dXJuOiBwYXR0ZXJuIGFuZCBpZ25vcmUtY2FzZSBmbGFnICovCit7CisgICAgaW50CQltYWdpYzsKKyAgICBpbnQJCWk7CisKKyAgICByY19kaWRfZW1zZyA9IEZBTFNFOworICAgIG1hZ2ljID0gcF9tYWdpYzsKKworICAgIC8qCisgICAgICogSWYgbm8gcGF0dGVybiBnaXZlbiwgdXNlIGEgcHJldmlvdXNseSBkZWZpbmVkIHBhdHRlcm4uCisgICAgICovCisgICAgaWYgKHBhdCA9PSBOVUxMIHx8ICpwYXQgPT0gTlVMKQorICAgIHsKKwlpZiAocGF0X3VzZSA9PSBSRV9MQVNUKQorCSAgICBpID0gbGFzdF9pZHg7CisJZWxzZQorCSAgICBpID0gcGF0X3VzZTsKKwlpZiAoc3BhdHNbaV0ucGF0ID09IE5VTEwpCS8qIHBhdHRlcm4gd2FzIG5ldmVyIGRlZmluZWQgKi8KKwl7CisJICAgIGlmIChwYXRfdXNlID09IFJFX1NVQlNUKQorCQlFTVNHKF8oZV9ub3ByZXN1YikpOworCSAgICBlbHNlCisJCUVNU0coXyhlX25vcHJldnJlKSk7CisJICAgIHJjX2RpZF9lbXNnID0gVFJVRTsKKwkgICAgcmV0dXJuIEZBSUw7CisJfQorCXBhdCA9IHNwYXRzW2ldLnBhdDsKKwltYWdpYyA9IHNwYXRzW2ldLm1hZ2ljOworCW5vX3NtYXJ0Y2FzZSA9IHNwYXRzW2ldLm5vX3NjczsKKyAgICB9CisjaWZkZWYgRkVBVF9DTURISVNUCisgICAgZWxzZSBpZiAob3B0aW9ucyAmIFNFQVJDSF9ISVMpCS8qIHB1dCBuZXcgcGF0dGVybiBpbiBoaXN0b3J5ICovCisJYWRkX3RvX2hpc3RvcnkoSElTVF9TRUFSQ0gsIHBhdCwgVFJVRSwgTlVMKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKyAgICBpZiAobXJfcGF0dGVybl9hbGxvY2VkKQorICAgIHsKKwl2aW1fZnJlZShtcl9wYXR0ZXJuKTsKKwltcl9wYXR0ZXJuX2FsbG9jZWQgPSBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoY3Vyd2luLT53X3BfcmwgJiYgKmN1cndpbi0+d19wX3JsYyA9PSAncycpCisgICAgeworCWNoYXJfdSAqcmV2X3BhdHRlcm47CisKKwlyZXZfcGF0dGVybiA9IHJldmVyc2VfdGV4dChwYXQpOworCWlmIChyZXZfcGF0dGVybiA9PSBOVUxMKQorCSAgICBtcl9wYXR0ZXJuID0gcGF0OwkgICAgLyogb3V0IG9mIG1lbW9yeSwga2VlcCBub3JtYWwgcGF0dGVybi4gKi8KKwllbHNlCisJeworCSAgICBtcl9wYXR0ZXJuID0gcmV2X3BhdHRlcm47CisJICAgIG1yX3BhdHRlcm5fYWxsb2NlZCA9IFRSVUU7CisJfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKwltcl9wYXR0ZXJuID0gcGF0OworCisgICAgLyoKKyAgICAgKiBTYXZlIHRoZSBjdXJyZW50bHkgdXNlZCBwYXR0ZXJuIGluIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSwKKyAgICAgKiB1bmxlc3MgdGhlIHBhdHRlcm4gc2hvdWxkIG5vdCBiZSByZW1lbWJlcmVkLgorICAgICAqLworICAgIGlmICghKG9wdGlvbnMgJiBTRUFSQ0hfS0VFUCkpCisgICAgeworCS8qIHNlYXJjaCBvciBnbG9iYWwgY29tbWFuZCAqLworCWlmIChwYXRfc2F2ZSA9PSBSRV9TRUFSQ0ggfHwgcGF0X3NhdmUgPT0gUkVfQk9USCkKKwkgICAgc2F2ZV9yZV9wYXQoUkVfU0VBUkNILCBwYXQsIG1hZ2ljKTsKKwkvKiBzdWJzdGl0dXRlIG9yIGdsb2JhbCBjb21tYW5kICovCisJaWYgKHBhdF9zYXZlID09IFJFX1NVQlNUIHx8IHBhdF9zYXZlID09IFJFX0JPVEgpCisJICAgIHNhdmVfcmVfcGF0KFJFX1NVQlNULCBwYXQsIG1hZ2ljKTsKKyAgICB9CisKKyAgICByZWdtYXRjaC0+cm1tX2ljID0gaWdub3JlY2FzZShwYXQpOworICAgIHJlZ21hdGNoLT5yZWdwcm9nID0gdmltX3JlZ2NvbXAocGF0LCBtYWdpYyA/IFJFX01BR0lDIDogMCk7CisgICAgaWYgKHJlZ21hdGNoLT5yZWdwcm9nID09IE5VTEwpCisJcmV0dXJuIEZBSUw7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogR2V0IHNlYXJjaCBwYXR0ZXJuIHVzZWQgYnkgc2VhcmNoX3JlZ2NvbXAoKS4KKyAqLworICAgIGNoYXJfdSAqCitnZXRfc2VhcmNoX3BhdCgpCit7CisgICAgcmV0dXJuIG1yX3BhdHRlcm47Cit9CisKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorLyoKKyAqIFJldmVyc2UgdGV4dCBpbnRvIGFsbG9jYXRlZCBtZW1vcnkuCisgKiBSZXR1cm5zIHRoZSBhbGxvY2F0ZWQgc3RyaW5nLCBOVUxMIHdoZW4gb3V0IG9mIG1lbW9yeS4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorcmV2ZXJzZV90ZXh0KHMpCisgICAgY2hhcl91ICpzOworeworICAgIHVuc2lnbmVkCWxlbjsKKyAgICB1bnNpZ25lZAlzX2ksIHJldl9pOworICAgIGNoYXJfdQkqcmV2OworCisgICAgLyoKKyAgICAgKiBSZXZlcnNlIHRoZSBwYXR0ZXJuLgorICAgICAqLworICAgIGxlbiA9ICh1bnNpZ25lZClTVFJMRU4ocyk7CisgICAgcmV2ID0gYWxsb2MobGVuICsgMSk7CisgICAgaWYgKHJldiAhPSBOVUxMKQorICAgIHsKKwlyZXZfaSA9IGxlbjsKKwlmb3IgKHNfaSA9IDA7IHNfaSA8IGxlbjsgKytzX2kpCisJeworIyBpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJICAgIHsKKwkJaW50CW1iX2xlbjsKKworCQltYl9sZW4gPSAoKm1iX3B0cjJsZW5fY2hlY2spKHMgKyBzX2kpOworCQlyZXZfaSAtPSBtYl9sZW47CisJCW1jaF9tZW1tb3ZlKHJldiArIHJldl9pLCBzICsgc19pLCBtYl9sZW4pOworCQlzX2kgKz0gbWJfbGVuIC0gMTsKKwkgICAgfQorCSAgICBlbHNlCisjIGVuZGlmCisJCXJldlstLXJldl9pXSA9IHNbc19pXTsKKworCX0KKwlyZXZbbGVuXSA9IE5VTDsKKyAgICB9CisgICAgcmV0dXJuIHJldjsKK30KKyNlbmRpZgorCisgICAgc3RhdGljIHZvaWQKK3NhdmVfcmVfcGF0KGlkeCwgcGF0LCBtYWdpYykKKyAgICBpbnQJCWlkeDsKKyAgICBjaGFyX3UJKnBhdDsKKyAgICBpbnQJCW1hZ2ljOworeworICAgIGlmIChzcGF0c1tpZHhdLnBhdCAhPSBwYXQpCisgICAgeworCXZpbV9mcmVlKHNwYXRzW2lkeF0ucGF0KTsKKwlzcGF0c1tpZHhdLnBhdCA9IHZpbV9zdHJzYXZlKHBhdCk7CisJc3BhdHNbaWR4XS5tYWdpYyA9IG1hZ2ljOworCXNwYXRzW2lkeF0ubm9fc2NzID0gbm9fc21hcnRjYXNlOworCWxhc3RfaWR4ID0gaWR4OworI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisJLyogSWYgJ2hsc2VhcmNoJyBzZXQgYW5kIHNlYXJjaCBwYXQgY2hhbmdlZDogbmVlZCByZWRyYXcuICovCisJaWYgKHBfaGxzKQorCSAgICByZWRyYXdfYWxsX2xhdGVyKE5PVF9WQUxJRCk7CisJbm9faGxzZWFyY2ggPSBGQUxTRTsKKyNlbmRpZgorICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSB8fCBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBTYXZlIHRoZSBzZWFyY2ggcGF0dGVybnMsIHNvIHRoZXkgY2FuIGJlIHJlc3RvcmVkIGxhdGVyLgorICogVXNlZCBiZWZvcmUvYWZ0ZXIgZXhlY3V0aW5nIGF1dG9jb21tYW5kcyBhbmQgdXNlciBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgc2F2ZV9sZXZlbCA9IDA7CisKKyAgICB2b2lkCitzYXZlX3NlYXJjaF9wYXR0ZXJucygpCit7CisgICAgaWYgKHNhdmVfbGV2ZWwrKyA9PSAwKQorICAgIHsKKwlzYXZlZF9zcGF0c1swXSA9IHNwYXRzWzBdOworCWlmIChzcGF0c1swXS5wYXQgIT0gTlVMTCkKKwkgICAgc2F2ZWRfc3BhdHNbMF0ucGF0ID0gdmltX3N0cnNhdmUoc3BhdHNbMF0ucGF0KTsKKwlzYXZlZF9zcGF0c1sxXSA9IHNwYXRzWzFdOworCWlmIChzcGF0c1sxXS5wYXQgIT0gTlVMTCkKKwkgICAgc2F2ZWRfc3BhdHNbMV0ucGF0ID0gdmltX3N0cnNhdmUoc3BhdHNbMV0ucGF0KTsKKwlzYXZlZF9sYXN0X2lkeCA9IGxhc3RfaWR4OworIyBpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorCXNhdmVkX25vX2hsc2VhcmNoID0gbm9faGxzZWFyY2g7CisjIGVuZGlmCisgICAgfQorfQorCisgICAgdm9pZAorcmVzdG9yZV9zZWFyY2hfcGF0dGVybnMoKQoreworICAgIGlmICgtLXNhdmVfbGV2ZWwgPT0gMCkKKyAgICB7CisJdmltX2ZyZWUoc3BhdHNbMF0ucGF0KTsKKwlzcGF0c1swXSA9IHNhdmVkX3NwYXRzWzBdOworCXZpbV9mcmVlKHNwYXRzWzFdLnBhdCk7CisJc3BhdHNbMV0gPSBzYXZlZF9zcGF0c1sxXTsKKwlsYXN0X2lkeCA9IHNhdmVkX2xhc3RfaWR4OworIyBpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorCW5vX2hsc2VhcmNoID0gc2F2ZWRfbm9faGxzZWFyY2g7CisjIGVuZGlmCisgICAgfQorfQorI2VuZGlmCisKKy8qCisgKiBSZXR1cm4gVFJVRSB3aGVuIGNhc2Ugc2hvdWxkIGJlIGlnbm9yZWQgZm9yIHNlYXJjaCBwYXR0ZXJuICJwYXQiLgorICogVXNlcyB0aGUgJ2lnbm9yZWNhc2UnIGFuZCAnc21hcnRjYXNlJyBvcHRpb25zLgorICovCisgICAgaW50CitpZ25vcmVjYXNlKHBhdCkKKyAgICBjaGFyX3UJKnBhdDsKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlpYzsKKworICAgIGljID0gcF9pYzsKKyAgICBpZiAoaWMgJiYgIW5vX3NtYXJ0Y2FzZSAmJiBwX3NjcworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCQkJCSYmICEoY3RybF94X21vZGUgJiYgY3VyYnVmLT5iX3BfaW5mKQorI2VuZGlmCisJCQkJCQkJCSAgICApCisgICAgeworCS8qIGRvbid0IGlnbm9yZSBjYXNlIGlmIHBhdHRlcm4gaGFzIHVwcGVyY2FzZSAqLworCWZvciAocCA9IHBhdDsgKnA7ICkKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpbnQJCWw7CisKKwkgICAgaWYgKGhhc19tYnl0ZSAmJiAobCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkpID4gMSkKKwkgICAgeworCQlpZiAoZW5jX3V0ZjggJiYgdXRmX2lzdXBwZXIodXRmX3B0cjJjaGFyKHApKSkKKwkJeworCQkgICAgaWMgPSBGQUxTRTsKKwkJICAgIGJyZWFrOworCQl9CisJCXAgKz0gbDsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJaWYgKCpwID09ICdcXCcgJiYgcFsxXSAhPSBOVUwpCS8qIHNraXAgIlxTIiBldCBhbC4gKi8KKwkJICAgIHAgKz0gMjsKKwkJZWxzZSBpZiAoaXN1cHBlcigqcCsrKSkKKwkJeworCQkgICAgaWMgPSBGQUxTRTsKKwkJICAgIGJyZWFrOworCQl9CisJfQorICAgIH0KKyAgICBub19zbWFydGNhc2UgPSBGQUxTRTsKKworICAgIHJldHVybiBpYzsKK30KKworICAgIGNoYXJfdSAqCitsYXN0X3NlYXJjaF9wYXQoKQoreworICAgIHJldHVybiBzcGF0c1tsYXN0X2lkeF0ucGF0OworfQorCisvKgorICogUmVzZXQgc2VhcmNoIGRpcmVjdGlvbiB0byBmb3J3YXJkLiAgRm9yICJnZCIgYW5kICJnRCIgY29tbWFuZHMuCisgKi8KKyAgICB2b2lkCityZXNldF9zZWFyY2hfZGlyKCkKK3sKKyAgICBzcGF0c1swXS5vZmYuZGlyID0gJy8nOworfQorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoRkVBVF9WSU1JTkZPKQorLyoKKyAqIFNldCB0aGUgbGFzdCBzZWFyY2ggcGF0dGVybi4gIEZvciAiOmxldCBALyA9IiBhbmQgdmltaW5mby4KKyAqIEFsc28gc2V0IHRoZSBzYXZlZCBzZWFyY2ggcGF0dGVybiwgc28gdGhhdCB0aGlzIHdvcmtzIGluIGFuIGF1dG9jb21tYW5kLgorICovCisgICAgdm9pZAorc2V0X2xhc3Rfc2VhcmNoX3BhdChzLCBpZHgsIG1hZ2ljLCBzZXRsYXN0KQorICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCW1hZ2ljOworICAgIGludAkJc2V0bGFzdDsKK3sKKyAgICB2aW1fZnJlZShzcGF0c1tpZHhdLnBhdCk7CisgICAgLyogQW4gZW1wdHkgc3RyaW5nIG1lYW5zIHRoYXQgbm90aGluZyBzaG91bGQgYmUgbWF0Y2hlZC4gKi8KKyAgICBpZiAoKnMgPT0gTlVMKQorCXNwYXRzW2lkeF0ucGF0ID0gTlVMTDsKKyAgICBlbHNlCisJc3BhdHNbaWR4XS5wYXQgPSB2aW1fc3Ryc2F2ZShzKTsKKyAgICBzcGF0c1tpZHhdLm1hZ2ljID0gbWFnaWM7CisgICAgc3BhdHNbaWR4XS5ub19zY3MgPSBGQUxTRTsKKyAgICBzcGF0c1tpZHhdLm9mZi5kaXIgPSAnLyc7CisgICAgc3BhdHNbaWR4XS5vZmYubGluZSA9IEZBTFNFOworICAgIHNwYXRzW2lkeF0ub2ZmLmVuZCA9IEZBTFNFOworICAgIHNwYXRzW2lkeF0ub2ZmLm9mZiA9IDA7CisgICAgaWYgKHNldGxhc3QpCisJbGFzdF9pZHggPSBpZHg7CisgICAgaWYgKHNhdmVfbGV2ZWwpCisgICAgeworCXZpbV9mcmVlKHNhdmVkX3NwYXRzW2lkeF0ucGF0KTsKKwlzYXZlZF9zcGF0c1tpZHhdID0gc3BhdHNbMF07CisJaWYgKHNwYXRzW2lkeF0ucGF0ID09IE5VTEwpCisJICAgIHNhdmVkX3NwYXRzW2lkeF0ucGF0ID0gTlVMTDsKKwllbHNlCisJICAgIHNhdmVkX3NwYXRzW2lkeF0ucGF0ID0gdmltX3N0cnNhdmUoc3BhdHNbaWR4XS5wYXQpOworCXNhdmVkX2xhc3RfaWR4ID0gbGFzdF9pZHg7CisgICAgfQorIyBpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorICAgIC8qIElmICdobHNlYXJjaCcgc2V0IGFuZCBzZWFyY2ggcGF0IGNoYW5nZWQ6IG5lZWQgcmVkcmF3LiAqLworICAgIGlmIChwX2hscyAmJiBpZHggPT0gbGFzdF9pZHggJiYgIW5vX2hsc2VhcmNoKQorCXJlZHJhd19hbGxfbGF0ZXIoTk9UX1ZBTElEKTsKKyMgZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKy8qCisgKiBHZXQgYSByZWdleHAgcHJvZ3JhbSBmb3IgdGhlIGxhc3QgdXNlZCBzZWFyY2ggcGF0dGVybi4KKyAqIFRoaXMgaXMgdXNlZCBmb3IgaGlnaGxpZ2h0aW5nIGFsbCBtYXRjaGVzIGluIGEgd2luZG93LgorICogVmFsdWVzIHJldHVybmVkIGluIHJlZ21hdGNoLT5yZWdwcm9nIGFuZCByZWdtYXRjaC0+cm1tX2ljLgorICovCisgICAgdm9pZAorbGFzdF9wYXRfcHJvZyhyZWdtYXRjaCkKKyAgICByZWdtbWF0Y2hfVAkqcmVnbWF0Y2g7Cit7CisgICAgaWYgKHNwYXRzW2xhc3RfaWR4XS5wYXQgPT0gTlVMTCkKKyAgICB7CisJcmVnbWF0Y2gtPnJlZ3Byb2cgPSBOVUxMOworCXJldHVybjsKKyAgICB9CisgICAgKytlbXNnX29mZjsJCS8qIFNvIGl0IGRvZXNuJ3QgYmVlcCBpZiBiYWQgZXhwciAqLworICAgICh2b2lkKXNlYXJjaF9yZWdjb21wKChjaGFyX3UgKikiIiwgMCwgbGFzdF9pZHgsIFNFQVJDSF9LRUVQLCByZWdtYXRjaCk7CisgICAgLS1lbXNnX29mZjsKK30KKyNlbmRpZgorCisvKgorICogbG93ZXN0IGxldmVsIHNlYXJjaCBmdW5jdGlvbi4KKyAqIFNlYXJjaCBmb3IgJ2NvdW50J3RoIG9jY3VycmVuY2Ugb2YgcGF0dGVybiAncGF0JyBpbiBkaXJlY3Rpb24gJ2RpcicuCisgKiBTdGFydCBhdCBwb3NpdGlvbiAncG9zJyBhbmQgcmV0dXJuIHRoZSBmb3VuZCBwb3NpdGlvbiBpbiAncG9zJy4KKyAqCisgKiBpZiAob3B0aW9ucyAmIFNFQVJDSF9NU0cpID09IDAgZG9uJ3QgZ2l2ZSBhbnkgbWVzc2FnZXMKKyAqIGlmIChvcHRpb25zICYgU0VBUkNIX01TRykgPT0gU0VBUkNIX05GTVNHIGRvbid0IGdpdmUgJ25vdGZvdW5kJyBtZXNzYWdlcworICogaWYgKG9wdGlvbnMgJiBTRUFSQ0hfTVNHKSA9PSBTRUFSQ0hfTVNHIGdpdmUgYWxsIG1lc3NhZ2VzCisgKiBpZiAob3B0aW9ucyAmIFNFQVJDSF9ISVMpIHB1dCBzZWFyY2ggcGF0dGVybiBpbiBoaXN0b3J5CisgKiBpZiAob3B0aW9ucyAmIFNFQVJDSF9FTkQpIHJldHVybiBwb3NpdGlvbiBhdCBlbmQgb2YgbWF0Y2gKKyAqIGlmIChvcHRpb25zICYgU0VBUkNIX1NUQVJUKSBhY2NlcHQgbWF0Y2ggYXQgcG9zIGl0c2VsZgorICogaWYgKG9wdGlvbnMgJiBTRUFSQ0hfS0VFUCkga2VlcCBwcmV2aW91cyBzZWFyY2ggcGF0dGVybgorICogaWYgKG9wdGlvbnMgJiBTRUFSQ0hfRk9MRCkgbWF0Y2ggb25seSBvbmNlIGluIGEgY2xvc2VkIGZvbGQKKyAqIGlmIChvcHRpb25zICYgU0VBUkNIX1BFRUspIGNoZWNrIGZvciB0eXBlZCBjaGFyLCBjYW5jZWwgc2VhcmNoCisgKgorICogUmV0dXJuIEZBSUwgKHplcm8pIGZvciBmYWlsdXJlLCBub24temVybyBmb3Igc3VjY2Vzcy4KKyAqIFdoZW4gRkVBVF9FVkFMIGlzIGRlZmluZWQsIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBtYXRjaGluZworICogc3VicGF0dGVybiBwbHVzIG9uZTsgb25lIGlmIHRoZXJlIHdhcyBub25lLgorICovCisgICAgaW50CitzZWFyY2hpdCh3aW4sIGJ1ZiwgcG9zLCBkaXIsIHBhdCwgY291bnQsIG9wdGlvbnMsIHBhdF91c2UpCisgICAgd2luX1QJKndpbjsJCS8qIHdpbmRvdyB0byBzZWFyY2ggaW47IGNhbiBiZSBOVUxMIGZvciBhCisJCQkJICAgYnVmZmVyIHdpdGhvdXQgYSB3aW5kb3chICovCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBwb3NfVAkqcG9zOworICAgIGludAkJZGlyOworICAgIGNoYXJfdQkqcGF0OworICAgIGxvbmcJY291bnQ7CisgICAgaW50CQlvcHRpb25zOworICAgIGludAkJcGF0X3VzZTsKK3sKKyAgICBpbnQJCWZvdW5kOworICAgIGxpbmVucl9UCWxudW07CQkvKiBubyBpbml0IHRvIHNodXQgdXAgQXBvbGxvIGNjICovCisgICAgcmVnbW1hdGNoX1QJcmVnbWF0Y2g7CisgICAgY2hhcl91CSpwdHI7CisgICAgY29sbnJfVAltYXRjaGNvbDsKKyAgICBjb2xucl9UCXN0YXJ0Y29sOworICAgIGxwb3NfVAllbmRwb3M7CisgICAgaW50CQlsb29wOworICAgIHBvc19UCXN0YXJ0X3BvczsKKyAgICBpbnQJCWF0X2ZpcnN0X2xpbmU7CisgICAgaW50CQlleHRyYV9jb2w7CisgICAgaW50CQltYXRjaF9vazsKKyAgICBsb25nCW5tYXRjaGVkOworICAgIGludAkJc3VibWF0Y2ggPSAwOworICAgIGxpbmVucl9UCWZpcnN0X2xudW07CisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKyAgICBpbnQJCWJyZWFrX2xvb3AgPSBGQUxTRTsKKyNlbHNlCisjIGRlZmluZSBicmVha19sb29wIEZBTFNFCisjZW5kaWYKKworICAgIGlmIChzZWFyY2hfcmVnY29tcChwYXQsIFJFX1NFQVJDSCwgcGF0X3VzZSwKKwkJICAgKG9wdGlvbnMgJiAoU0VBUkNIX0hJUyArIFNFQVJDSF9LRUVQKSksICZyZWdtYXRjaCkgPT0gRkFJTCkKKyAgICB7CisJaWYgKChvcHRpb25zICYgU0VBUkNIX01TRykgJiYgIXJjX2RpZF9lbXNnKQorCSAgICBFTVNHMihfKCJFMzgzOiBJbnZhbGlkIHNlYXJjaCBzdHJpbmc6ICVzIiksIG1yX3BhdHRlcm4pOworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIGlmIChvcHRpb25zICYgU0VBUkNIX1NUQVJUKQorCWV4dHJhX2NvbCA9IDA7CisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIFdhdGNoIG91dCBmb3IgdGhlICJjb2wiIGJlaW5nIE1BWENPTCAtIDIsIHVzZWQgaW4gYSBjbG9zZWQgZm9sZC4gKi8KKyAgICBlbHNlIGlmIChoYXNfbWJ5dGUgJiYgcG9zLT5sbnVtID49IDEgJiYgcG9zLT5sbnVtIDw9IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50CisJCQkJCQkgICAgICYmIHBvcy0+Y29sIDwgTUFYQ09MIC0gMikKKwlleHRyYV9jb2wgPSAoKm1iX3B0cjJsZW5fY2hlY2spKG1sX2dldF9idWYoYnVmLCBwb3MtPmxudW0sIEZBTFNFKQorCQkJCQkJCQkgICsgcG9zLT5jb2wpOworI2VuZGlmCisgICAgZWxzZQorCWV4dHJhX2NvbCA9IDE7CisKKy8qCisgKiBmaW5kIHRoZSBzdHJpbmcKKyAqLworICAgIGNhbGxlZF9lbXNnID0gRkFMU0U7CisgICAgZG8JLyogbG9vcCBmb3IgY291bnQgKi8KKyAgICB7CisJc3RhcnRfcG9zID0gKnBvczsJLyogcmVtZW1iZXIgc3RhcnQgcG9zIGZvciBkZXRlY3Rpbmcgbm8gbWF0Y2ggKi8KKwlmb3VuZCA9IDA7CQkvKiBkZWZhdWx0OiBub3QgZm91bmQgKi8KKwlhdF9maXJzdF9saW5lID0gVFJVRTsJLyogZGVmYXVsdDogc3RhcnQgaW4gZmlyc3QgbGluZSAqLworCWlmIChwb3MtPmxudW0gPT0gMCkJLyogY29ycmVjdCBsbnVtIGZvciB3aGVuIHN0YXJ0aW5nIGluIGxpbmUgMCAqLworCXsKKwkgICAgcG9zLT5sbnVtID0gMTsKKwkgICAgcG9zLT5jb2wgPSAwOworCSAgICBhdF9maXJzdF9saW5lID0gRkFMU0U7ICAvKiBub3QgaW4gZmlyc3QgbGluZSBub3cgKi8KKwl9CisKKwkvKgorCSAqIFN0YXJ0IHNlYXJjaGluZyBpbiBjdXJyZW50IGxpbmUsIHVubGVzcyBzZWFyY2hpbmcgYmFja3dhcmRzIGFuZAorCSAqIHdlJ3JlIGluIGNvbHVtbiAwLgorCSAqLworCWlmIChkaXIgPT0gQkFDS1dBUkQgJiYgc3RhcnRfcG9zLmNvbCA9PSAwKQorCXsKKwkgICAgbG51bSA9IHBvcy0+bG51bSAtIDE7CisJICAgIGF0X2ZpcnN0X2xpbmUgPSBGQUxTRTsKKwl9CisJZWxzZQorCSAgICBsbnVtID0gcG9zLT5sbnVtOworCisJZm9yIChsb29wID0gMDsgbG9vcCA8PSAxOyArK2xvb3ApICAgLyogbG9vcCB0d2ljZSBpZiAnd3JhcHNjYW4nIHNldCAqLworCXsKKwkgICAgZm9yICggOyBsbnVtID4gMCAmJiBsbnVtIDw9IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCQkJCQkgICBsbnVtICs9IGRpciwgYXRfZmlyc3RfbGluZSA9IEZBTFNFKQorCSAgICB7CisJCS8qCisJCSAqIExvb2sgZm9yIGEgbWF0Y2ggc29tZXdoZXJlIGluIHRoZSBsaW5lLgorCQkgKi8KKwkJZmlyc3RfbG51bSA9IGxudW07CisJCW5tYXRjaGVkID0gdmltX3JlZ2V4ZWNfbXVsdGkoJnJlZ21hdGNoLCB3aW4sIGJ1ZiwKKwkJCQkJCQkgICAgbG51bSwgKGNvbG5yX1QpMCk7CisJCS8qIEFib3J0IHNlYXJjaGluZyBvbiBhbiBlcnJvciAoZS5nLiwgb3V0IG9mIHN0YWNrKS4gKi8KKwkJaWYgKGNhbGxlZF9lbXNnKQorCQkgICAgYnJlYWs7CisJCWlmIChubWF0Y2hlZCA+IDApCisJCXsKKwkJICAgIC8qIG1hdGNoIG1heSBhY3R1YWxseSBiZSBpbiBhbm90aGVyIGxpbmUgd2hlbiB1c2luZyBcenMgKi8KKwkJICAgIGxudW0gKz0gcmVnbWF0Y2guc3RhcnRwb3NbMF0ubG51bTsKKwkJICAgIHB0ciA9IG1sX2dldF9idWYoYnVmLCBsbnVtLCBGQUxTRSk7CisJCSAgICBzdGFydGNvbCA9IHJlZ21hdGNoLnN0YXJ0cG9zWzBdLmNvbDsKKwkJICAgIGVuZHBvcyA9IHJlZ21hdGNoLmVuZHBvc1swXTsKKyMgaWZkZWYgRkVBVF9FVkFMCisJCSAgICBzdWJtYXRjaCA9IGZpcnN0X3N1Ym1hdGNoKCZyZWdtYXRjaCk7CisjIGVuZGlmCisKKwkJICAgIC8qCisJCSAgICAgKiBGb3J3YXJkIHNlYXJjaCBpbiB0aGUgZmlyc3QgbGluZTogbWF0Y2ggc2hvdWxkIGJlIGFmdGVyCisJCSAgICAgKiB0aGUgc3RhcnQgcG9zaXRpb24uIElmIG5vdCwgY29udGludWUgYXQgdGhlIGVuZCBvZiB0aGUKKwkJICAgICAqIG1hdGNoICh0aGlzIGlzIHZpIGNvbXBhdGlibGUpIG9yIG9uIHRoZSBuZXh0IGNoYXIuCisJCSAgICAgKi8KKwkJICAgIGlmIChkaXIgPT0gRk9SV0FSRCAmJiBhdF9maXJzdF9saW5lKQorCQkgICAgeworCQkJbWF0Y2hfb2sgPSBUUlVFOworCQkJLyoKKwkJCSAqIFdoZW4gbWF0Y2ggbGFuZHMgb24gYSBOVUwgdGhlIGN1cnNvciB3aWxsIGJlIHB1dAorCQkJICogb25lIGJhY2sgYWZ0ZXJ3YXJkcywgY29tcGFyZSB3aXRoIHRoYXQgcG9zaXRpb24sCisJCQkgKiBvdGhlcndpc2UgIi8kIiB3aWxsIGdldCBzdHVjayBvbiBlbmQgb2YgbGluZS4KKwkJCSAqLworCQkJd2hpbGUgKChvcHRpb25zICYgU0VBUkNIX0VORCkKKwkJCQk/ICAobm1hdGNoZWQgPT0gMQorCQkJCSAgICAmJiAoaW50KWVuZHBvcy5jb2wgLSAxCisJCQkJCSAgICAgPCAoaW50KXN0YXJ0X3Bvcy5jb2wgKyBleHRyYV9jb2wpCisJCQkJOiAoKGludClzdGFydGNvbCAtIChwdHJbc3RhcnRjb2xdID09IE5VTCkKKwkJCQkJICAgIDwgKGludClzdGFydF9wb3MuY29sICsgZXh0cmFfY29sKSkKKwkJCXsKKwkJCSAgICAvKgorCQkJICAgICAqIElmIHZpLWNvbXBhdGlibGUgc2VhcmNoaW5nLCBjb250aW51ZSBhdCB0aGUgZW5kCisJCQkgICAgICogb2YgdGhlIG1hdGNoLCBvdGhlcndpc2UgY29udGludWUgb25lIHBvc2l0aW9uCisJCQkgICAgICogZm9yd2FyZC4KKwkJCSAgICAgKi8KKwkJCSAgICBpZiAodmltX3N0cmNocihwX2NwbywgQ1BPX1NFQVJDSCkgIT0gTlVMTCkKKwkJCSAgICB7CisJCQkJaWYgKG5tYXRjaGVkID4gMSkKKwkJCQl7CisJCQkJICAgIC8qIGVuZCBpcyBpbiBuZXh0IGxpbmUsIHRodXMgbm8gbWF0Y2ggaW4KKwkJCQkgICAgICogdGhpcyBsaW5lICovCisJCQkJICAgIG1hdGNoX29rID0gRkFMU0U7CisJCQkJICAgIGJyZWFrOworCQkJCX0KKwkJCQltYXRjaGNvbCA9IGVuZHBvcy5jb2w7CisJCQkJLyogZm9yIGVtcHR5IG1hdGNoOiBhZHZhbmNlIG9uZSBjaGFyICovCisJCQkJaWYgKG1hdGNoY29sID09IHN0YXJ0Y29sCisJCQkJCQkgICAgICAmJiBwdHJbbWF0Y2hjb2xdICE9IE5VTCkKKwkJCQl7CisjaWZkZWYgRkVBVF9NQllURQorCQkJCSAgICBpZiAoaGFzX21ieXRlKQorCQkJCQltYXRjaGNvbCArPQorCQkJCQkgICgqbWJfcHRyMmxlbl9jaGVjaykocHRyICsgbWF0Y2hjb2wpOworCQkJCSAgICBlbHNlCisjZW5kaWYKKwkJCQkJKyttYXRjaGNvbDsKKwkJCQl9CisJCQkgICAgfQorCQkJICAgIGVsc2UKKwkJCSAgICB7CisJCQkJbWF0Y2hjb2wgPSBzdGFydGNvbDsKKwkJCQlpZiAocHRyW21hdGNoY29sXSAhPSBOVUwpCisJCQkJeworI2lmZGVmIEZFQVRfTUJZVEUKKwkJCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCQkJbWF0Y2hjb2wgKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIKKwkJCQkJCQkJICArIG1hdGNoY29sKTsKKwkJCQkgICAgZWxzZQorI2VuZGlmCisJCQkJCSsrbWF0Y2hjb2w7CisJCQkJfQorCQkJICAgIH0KKwkJCSAgICBpZiAocHRyW21hdGNoY29sXSA9PSBOVUwKKwkJCQkgICAgfHwgKG5tYXRjaGVkID0gdmltX3JlZ2V4ZWNfbXVsdGkoJnJlZ21hdGNoLAorCQkJCQkgICAgICB3aW4sIGJ1ZiwgbG51bSwgbWF0Y2hjb2wpKSA9PSAwKQorCQkJICAgIHsKKwkJCQltYXRjaF9vayA9IEZBTFNFOworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCSAgICBzdGFydGNvbCA9IHJlZ21hdGNoLnN0YXJ0cG9zWzBdLmNvbDsKKwkJCSAgICBlbmRwb3MgPSByZWdtYXRjaC5lbmRwb3NbMF07CisjIGlmZGVmIEZFQVRfRVZBTAorCQkJICAgIHN1Ym1hdGNoID0gZmlyc3Rfc3VibWF0Y2goJnJlZ21hdGNoKTsKKyMgZW5kaWYKKworCQkJICAgIC8qIE5lZWQgdG8gZ2V0IHRoZSBsaW5lIHBvaW50ZXIgYWdhaW4sIGEKKwkJCSAgICAgKiBtdWx0aS1saW5lIHNlYXJjaCBtYXkgaGF2ZSBtYWRlIGl0IGludmFsaWQuICovCisJCQkgICAgcHRyID0gbWxfZ2V0X2J1ZihidWYsIGxudW0sIEZBTFNFKTsKKwkJCX0KKwkJCWlmICghbWF0Y2hfb2spCisJCQkgICAgY29udGludWU7CisJCSAgICB9CisJCSAgICBpZiAoZGlyID09IEJBQ0tXQVJEKQorCQkgICAgeworCQkJLyoKKwkJCSAqIE5vdywgaWYgdGhlcmUgYXJlIG11bHRpcGxlIG1hdGNoZXMgb24gdGhpcyBsaW5lLAorCQkJICogd2UgaGF2ZSB0byBnZXQgdGhlIGxhc3Qgb25lLiBPciB0aGUgbGFzdCBvbmUgYmVmb3JlCisJCQkgKiB0aGUgY3Vyc29yLCBpZiB3ZSdyZSBvbiB0aGF0IGxpbmUuCisJCQkgKiBXaGVuIHB1dHRpbmcgdGhlIG5ldyBjdXJzb3IgYXQgdGhlIGVuZCwgY29tcGFyZQorCQkJICogcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgbWF0Y2guCisJCQkgKi8KKwkJCW1hdGNoX29rID0gRkFMU0U7CisJCQlmb3IgKDs7KQorCQkJeworCQkJICAgIGlmICghYXRfZmlyc3RfbGluZQorCQkJCSAgICB8fCAoKG9wdGlvbnMgJiBTRUFSQ0hfRU5EKQorCQkJCQk/ICAobm1hdGNoZWQgPT0gMQorCQkJCQkgICAgJiYgKGludClyZWdtYXRjaC5lbmRwb3NbMF0uY29sIC0gMQorCQkJCQkJCQkgICArIGV4dHJhX2NvbAorCQkJCQkJCTw9IChpbnQpc3RhcnRfcG9zLmNvbCkKKwkJCQkJOiAoKGludClyZWdtYXRjaC5zdGFydHBvc1swXS5jb2wKKwkJCQkJCQkJICAgKyBleHRyYV9jb2wKKwkJCQkJCSAgICAgIDw9IChpbnQpc3RhcnRfcG9zLmNvbCkpKQorCQkJICAgIHsKKwkJCQkvKiBSZW1lbWJlciB0aGlzIHBvc2l0aW9uLCB3ZSB1c2UgaXQgaWYgaXQncworCQkJCSAqIHRoZSBsYXN0IG1hdGNoIGluIHRoZSBsaW5lLiAqLworCQkJCW1hdGNoX29rID0gVFJVRTsKKwkJCQlzdGFydGNvbCA9IHJlZ21hdGNoLnN0YXJ0cG9zWzBdLmNvbDsKKwkJCQllbmRwb3MgPSByZWdtYXRjaC5lbmRwb3NbMF07CisjIGlmZGVmIEZFQVRfRVZBTAorCQkJCXN1Ym1hdGNoID0gZmlyc3Rfc3VibWF0Y2goJnJlZ21hdGNoKTsKKyMgZW5kaWYKKwkJCSAgICB9CisJCQkgICAgZWxzZQorCQkJCWJyZWFrOworCisJCQkgICAgLyoKKwkJCSAgICAgKiBXZSBmb3VuZCBhIHZhbGlkIG1hdGNoLCBub3cgY2hlY2sgaWYgdGhlcmUgaXMKKwkJCSAgICAgKiBhbm90aGVyIG9uZSBhZnRlciBpdC4KKwkJCSAgICAgKiBJZiB2aS1jb21wYXRpYmxlIHNlYXJjaGluZywgY29udGludWUgYXQgdGhlIGVuZAorCQkJICAgICAqIG9mIHRoZSBtYXRjaCwgb3RoZXJ3aXNlIGNvbnRpbnVlIG9uZSBwb3NpdGlvbgorCQkJICAgICAqIGZvcndhcmQuCisJCQkgICAgICovCisJCQkgICAgaWYgKHZpbV9zdHJjaHIocF9jcG8sIENQT19TRUFSQ0gpICE9IE5VTEwpCisJCQkgICAgeworCQkJCWlmIChubWF0Y2hlZCA+IDEpCisJCQkJICAgIGJyZWFrOworCQkJCW1hdGNoY29sID0gZW5kcG9zLmNvbDsKKwkJCQkvKiBmb3IgZW1wdHkgbWF0Y2g6IGFkdmFuY2Ugb25lIGNoYXIgKi8KKwkJCQlpZiAobWF0Y2hjb2wgPT0gc3RhcnRjb2wKKwkJCQkJCSAgICAgICYmIHB0clttYXRjaGNvbF0gIT0gTlVMKQorCQkJCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkJICAgIGlmIChoYXNfbWJ5dGUpCisJCQkJCW1hdGNoY29sICs9CisJCQkJCSAgKCptYl9wdHIybGVuX2NoZWNrKShwdHIgKyBtYXRjaGNvbCk7CisJCQkJICAgIGVsc2UKKyNlbmRpZgorCQkJCQkrK21hdGNoY29sOworCQkJCX0KKwkJCSAgICB9CisJCQkgICAgZWxzZQorCQkJICAgIHsKKwkJCQltYXRjaGNvbCA9IHN0YXJ0Y29sOworCQkJCWlmIChwdHJbbWF0Y2hjb2xdICE9IE5VTCkKKwkJCQl7CisjaWZkZWYgRkVBVF9NQllURQorCQkJCSAgICBpZiAoaGFzX21ieXRlKQorCQkJCQltYXRjaGNvbCArPQorCQkJCQkgICgqbWJfcHRyMmxlbl9jaGVjaykocHRyICsgbWF0Y2hjb2wpOworCQkJCSAgICBlbHNlCisjZW5kaWYKKwkJCQkJKyttYXRjaGNvbDsKKwkJCQl9CisJCQkgICAgfQorCQkJICAgIGlmIChwdHJbbWF0Y2hjb2xdID09IE5VTAorCQkJCSAgICB8fCAobm1hdGNoZWQgPSB2aW1fcmVnZXhlY19tdWx0aSgmcmVnbWF0Y2gsCisJCQkJCSAgICAgIHdpbiwgYnVmLCBsbnVtLCBtYXRjaGNvbCkpID09IDApCisJCQkJYnJlYWs7CisKKwkJCSAgICAvKiBOZWVkIHRvIGdldCB0aGUgbGluZSBwb2ludGVyIGFnYWluLCBhCisJCQkgICAgICogbXVsdGktbGluZSBzZWFyY2ggbWF5IGhhdmUgbWFkZSBpdCBpbnZhbGlkLiAqLworCQkJICAgIHB0ciA9IG1sX2dldF9idWYoYnVmLCBsbnVtLCBGQUxTRSk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBpcyBvbmx5IGEgbWF0Y2ggYWZ0ZXIgdGhlIGN1cnNvciwgc2tpcAorCQkJICogdGhpcyBtYXRjaC4KKwkJCSAqLworCQkJaWYgKCFtYXRjaF9vaykKKwkJCSAgICBjb250aW51ZTsKKwkJICAgIH0KKworCQkgICAgaWYgKG9wdGlvbnMgJiBTRUFSQ0hfRU5EICYmICEob3B0aW9ucyAmIFNFQVJDSF9OT09GKSkKKwkJICAgIHsKKwkJCXBvcy0+bG51bSA9IGVuZHBvcy5sbnVtICsgZmlyc3RfbG51bTsKKwkJCXBvcy0+Y29sID0gZW5kcG9zLmNvbCAtIDE7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlwb3MtPmxudW0gPSBsbnVtOworCQkJcG9zLT5jb2wgPSBzdGFydGNvbDsKKwkJICAgIH0KKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisJCSAgICBwb3MtPmNvbGFkZCA9IDA7CisjZW5kaWYKKwkJICAgIGZvdW5kID0gMTsKKworCQkgICAgLyogU2V0IHZhcmlhYmxlcyB1c2VkIGZvciAnaW5jc2VhcmNoJyBoaWdobGlnaHRpbmcuICovCisJCSAgICBzZWFyY2hfbWF0Y2hfbGluZXMgPSBlbmRwb3MubG51bSAtIChsbnVtIC0gZmlyc3RfbG51bSk7CisJCSAgICBzZWFyY2hfbWF0Y2hfZW5kY29sID0gZW5kcG9zLmNvbDsKKwkJICAgIGJyZWFrOworCQl9CisJCWxpbmVfYnJlYWtjaGVjaygpOwkvKiBzdG9wIGlmIGN0cmwtQyB0eXBlZCAqLworCQlpZiAoZ290X2ludCkKKwkJICAgIGJyZWFrOworCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKwkJLyogQ2FuY2VsIHNlYXJjaGluZyBpZiBhIGNoYXJhY3RlciB3YXMgdHlwZWQuICBVc2VkIGZvcgorCQkgKiAnaW5jc2VhcmNoJy4gIERvbid0IGNoZWNrIHRvbyBvZnRlbiwgdGhhdCB3b3VsZCBzbG93ZG93bgorCQkgKiBzZWFyY2hpbmcgdG9vIG11Y2guICovCisJCWlmICgob3B0aW9ucyAmIFNFQVJDSF9QRUVLKQorCQkJJiYgKChsbnVtIC0gcG9zLT5sbnVtKSAmIDB4M2YpID09IDAKKwkJCSYmIGNoYXJfYXZhaWwoKSkKKwkJeworCQkgICAgYnJlYWtfbG9vcCA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorI2VuZGlmCisKKwkJaWYgKGxvb3AgJiYgbG51bSA9PSBzdGFydF9wb3MubG51bSkKKwkJICAgIGJyZWFrOwkgICAgLyogaWYgc2Vjb25kIGxvb3AsIHN0b3Agd2hlcmUgc3RhcnRlZCAqLworCSAgICB9CisJICAgIGF0X2ZpcnN0X2xpbmUgPSBGQUxTRTsKKworCSAgICAvKgorCSAgICAgKiBTdG9wIHRoZSBzZWFyY2ggaWYgd3JhcHNjYW4gaXNuJ3Qgc2V0LCBhZnRlciBhbiBpbnRlcnJ1cHQsCisJICAgICAqIGFmdGVyIGEgbWF0Y2ggYW5kIGFmdGVyIGxvb3BpbmcgdHdpY2UuCisJICAgICAqLworCSAgICBpZiAoIXBfd3MgfHwgZ290X2ludCB8fCBjYWxsZWRfZW1zZyB8fCBicmVha19sb29wIHx8IGZvdW5kIHx8IGxvb3ApCisJCWJyZWFrOworCisJICAgIC8qCisJICAgICAqIElmICd3cmFwc2NhbicgaXMgc2V0IHdlIGNvbnRpbnVlIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIGZpbGUuCisJICAgICAqIElmICdzaG9ydG1lc3MnIGRvZXMgbm90IGNvbnRhaW4gJ3MnLCB3ZSBnaXZlIGEgbWVzc2FnZS4KKwkgICAgICogVGhpcyBtZXNzYWdlIGlzIGFsc28gcmVtZW1iZXJlZCBpbiBrZWVwX21zZyBmb3Igd2hlbiB0aGUgc2NyZWVuCisJICAgICAqIGlzIHJlZHJhd24uIFRoZSBrZWVwX21zZyBpcyBjbGVhcmVkIHdoZW5ldmVyIGFub3RoZXIgbWVzc2FnZSBpcworCSAgICAgKiB3cml0dGVuLgorCSAgICAgKi8KKwkgICAgaWYgKGRpciA9PSBCQUNLV0FSRCkgICAgLyogc3RhcnQgc2Vjb25kIGxvb3AgYXQgdGhlIG90aGVyIGVuZCAqLworCSAgICB7CisJCWxudW0gPSBidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwkJaWYgKCFzaG9ydG1lc3MoU0hNX1NFQVJDSCkgJiYgKG9wdGlvbnMgJiBTRUFSQ0hfTVNHKSkKKwkJICAgIGdpdmVfd2FybmluZygoY2hhcl91ICopXyh0b3BfYm90X21zZyksIFRSVUUpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlsbnVtID0gMTsKKwkJaWYgKCFzaG9ydG1lc3MoU0hNX1NFQVJDSCkgJiYgKG9wdGlvbnMgJiBTRUFSQ0hfTVNHKSkKKwkJICAgIGdpdmVfd2FybmluZygoY2hhcl91ICopXyhib3RfdG9wX21zZyksIFRSVUUpOworCSAgICB9CisJfQorCWlmIChnb3RfaW50IHx8IGNhbGxlZF9lbXNnIHx8IGJyZWFrX2xvb3ApCisJICAgIGJyZWFrOworICAgIH0KKyAgICB3aGlsZSAoLS1jb3VudCA+IDAgJiYgZm91bmQpOyAgIC8qIHN0b3AgYWZ0ZXIgY291bnQgbWF0Y2hlcyBvciBubyBtYXRjaCAqLworCisgICAgdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7CisKKyAgICBpZiAoIWZvdW5kKQkJICAgIC8qIGRpZCBub3QgZmluZCBpdCAqLworICAgIHsKKwlpZiAoZ290X2ludCkKKwkgICAgRU1TRyhfKGVfaW50ZXJyKSk7CisJZWxzZSBpZiAoKG9wdGlvbnMgJiBTRUFSQ0hfTVNHKSA9PSBTRUFSQ0hfTVNHKQorCXsKKwkgICAgaWYgKHBfd3MpCisJCUVNU0cyKF8oZV9wYXRub3RmMiksIG1yX3BhdHRlcm4pOworCSAgICBlbHNlIGlmIChsbnVtID09IDApCisJCUVNU0cyKF8oIkUzODQ6IHNlYXJjaCBoaXQgVE9QIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIpLAorCQkJCQkJCQkgIG1yX3BhdHRlcm4pOworCSAgICBlbHNlCisJCUVNU0cyKF8oIkUzODU6IHNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2ggZm9yOiAlcyIpLAorCQkJCQkJCQkgIG1yX3BhdHRlcm4pOworCX0KKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICByZXR1cm4gc3VibWF0Y2ggKyAxOworfQorCisjaWZkZWYgRkVBVF9FVkFMCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IHN1YnBhdCB0aGF0IG1hdGNoZWQuCisgKi8KKyAgICBzdGF0aWMgaW50CitmaXJzdF9zdWJtYXRjaChycCkKKyAgICByZWdtbWF0Y2hfVAkqcnA7Cit7CisgICAgaW50CQlzdWJtYXRjaDsKKworICAgIGZvciAoc3VibWF0Y2ggPSAxOyA7ICsrc3VibWF0Y2gpCisgICAgeworCWlmIChycC0+c3RhcnRwb3Nbc3VibWF0Y2hdLmxudW0gPj0gMCkKKwkgICAgYnJlYWs7CisJaWYgKHN1Ym1hdGNoID09IDkpCisJeworCSAgICBzdWJtYXRjaCA9IDA7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuIHN1Ym1hdGNoOworfQorI2VuZGlmCisKKy8qCisgKiBIaWdoZXN0IGxldmVsIHN0cmluZyBzZWFyY2ggZnVuY3Rpb24uCisgKiBTZWFyY2ggZm9yIHRoZSAnY291bnQndGggb2NjdXJlbmNlIG9mIHBhdHRlcm4gJ3BhdCcgaW4gZGlyZWN0aW9uICdkaXJjJworICoJCSAgSWYgJ2RpcmMnIGlzIDA6IHVzZSBwcmV2aW91cyBkaXIuCisgKiAgICBJZiAncGF0JyBpcyBOVUxMIG9yIGVtcHR5IDogdXNlIHByZXZpb3VzIHN0cmluZy4KKyAqICAgIElmICdvcHRpb25zICYgU0VBUkNIX1JFVicgOiBnbyBpbiByZXZlcnNlIG9mIHByZXZpb3VzIGRpci4KKyAqICAgIElmICdvcHRpb25zICYgU0VBUkNIX0VDSE8nOiBlY2hvIHRoZSBzZWFyY2ggY29tbWFuZCBhbmQgaGFuZGxlIG9wdGlvbnMKKyAqICAgIElmICdvcHRpb25zICYgU0VBUkNIX01TRycgOiBtYXkgZ2l2ZSBlcnJvciBtZXNzYWdlCisgKiAgICBJZiAnb3B0aW9ucyAmIFNFQVJDSF9PUFQnIDogaW50ZXJwcmV0IG9wdGlvbmFsIGZsYWdzCisgKiAgICBJZiAnb3B0aW9ucyAmIFNFQVJDSF9ISVMnIDogcHV0IHNlYXJjaCBwYXR0ZXJuIGluIGhpc3RvcnkKKyAqICAgIElmICdvcHRpb25zICYgU0VBUkNIX05PT0YnOiBkb24ndCBhZGQgb2Zmc2V0IHRvIHBvc2l0aW9uCisgKiAgICBJZiAnb3B0aW9ucyAmIFNFQVJDSF9NQVJLJzogc2V0IHByZXZpb3VzIGNvbnRleHQgbWFyaworICogICAgSWYgJ29wdGlvbnMgJiBTRUFSQ0hfS0VFUCc6IGtlZXAgcHJldmlvdXMgc2VhcmNoIHBhdHRlcm4KKyAqICAgIElmICdvcHRpb25zICYgU0VBUkNIX1NUQVJUJzogYWNjZXB0IG1hdGNoIGF0IGN1cnBvcyBpdHNlbGYKKyAqICAgIElmICdvcHRpb25zICYgU0VBUkNIX1BFRUsnOiBjaGVjayBmb3IgdHlwZWQgY2hhciwgY2FuY2VsIHNlYXJjaAorICoKKyAqIENhcmVmdWw6IElmIHNwYXRzWzBdLm9mZi5saW5lID09IFRSVUUgYW5kIHNwYXRzWzBdLm9mZi5vZmYgPT0gMCB0aGlzCisgKiBtYWtlcyB0aGUgbW92ZW1lbnQgbGluZXdpc2Ugd2l0aG91dCBtb3ZpbmcgdGhlIG1hdGNoIHBvc2l0aW9uLgorICoKKyAqIHJldHVybiAwIGZvciBmYWlsdXJlLCAxIGZvciBmb3VuZCwgMiBmb3IgZm91bmQgYW5kIGxpbmUgb2Zmc2V0IGFkZGVkCisgKi8KKyAgICBpbnQKK2RvX3NlYXJjaChvYXAsIGRpcmMsIHBhdCwgY291bnQsIG9wdGlvbnMpCisgICAgb3BhcmdfVAkgICAgKm9hcDsJLyogY2FuIGJlIE5VTEwgKi8KKyAgICBpbnQJCSAgICBkaXJjOwkvKiAnLycgb3IgJz8nICovCisgICAgY2hhcl91CSAgICpwYXQ7CisgICAgbG9uZwkgICAgY291bnQ7CisgICAgaW50CQkgICAgb3B0aW9uczsKK3sKKyAgICBwb3NfVAkgICAgcG9zOwkvKiBwb3NpdGlvbiBvZiB0aGUgbGFzdCBtYXRjaCAqLworICAgIGNoYXJfdQkgICAgKnNlYXJjaHN0cjsKKyAgICBzdHJ1Y3Qgc29mZnNldCAgb2xkX29mZjsKKyAgICBpbnQJCSAgICByZXR2YWw7CS8qIFJldHVybiB2YWx1ZSAqLworICAgIGNoYXJfdQkgICAgKnA7CisgICAgbG9uZwkgICAgYzsKKyAgICBjaGFyX3UJICAgICpkaXJjcDsKKyAgICBjaGFyX3UJICAgICpzdHJjb3B5ID0gTlVMTDsKKyAgICBjaGFyX3UJICAgICpwczsKKworICAgIC8qCisgICAgICogQSBsaW5lIG9mZnNldCBpcyBub3QgcmVtZW1iZXJlZCwgdGhpcyBpcyB2aSBjb21wYXRpYmxlLgorICAgICAqLworICAgIGlmIChzcGF0c1swXS5vZmYubGluZSAmJiB2aW1fc3RyY2hyKHBfY3BvLCBDUE9fTElORU9GRikgIT0gTlVMTCkKKyAgICB7CisJc3BhdHNbMF0ub2ZmLmxpbmUgPSBGQUxTRTsKKwlzcGF0c1swXS5vZmYub2ZmID0gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNhdmUgdGhlIHZhbHVlcyBmb3Igd2hlbiAob3B0aW9ucyAmIFNFQVJDSF9LRUVQKSBpcyB1c2VkLgorICAgICAqICh0aGVyZSBpcyBubyAiaWYgKCkiIGFyb3VuZCB0aGlzIGJlY2F1c2UgZ2NjIHdhbnRzIHRoZW0gaW5pdGlhbGl6ZWQpCisgICAgICovCisgICAgb2xkX29mZiA9IHNwYXRzWzBdLm9mZjsKKworICAgIHBvcyA9IGN1cndpbi0+d19jdXJzb3I7CS8qIHN0YXJ0IHNlYXJjaGluZyBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uICovCisKKyAgICAvKgorICAgICAqIEZpbmQgb3V0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNlYXJjaC4KKyAgICAgKi8KKyAgICBpZiAoZGlyYyA9PSAwKQorCWRpcmMgPSBzcGF0c1swXS5vZmYuZGlyOworICAgIGVsc2UKKwlzcGF0c1swXS5vZmYuZGlyID0gZGlyYzsKKyAgICBpZiAob3B0aW9ucyAmIFNFQVJDSF9SRVYpCisgICAgeworI2lmZGVmIFdJTjMyCisJLyogVGhlcmUgaXMgYSBidWcgaW4gdGhlIFZpc3VhbCBDKysgMi4yIGNvbXBpbGVyIHdoaWNoIG1lYW5zIHRoYXQKKwkgKiBkaXJjIGFsd2F5cyBlbmRzIHVwIGJlaW5nICcvJyAqLworCWRpcmMgPSAoZGlyYyA9PSAnLycpICA/ICAnPycgIDogICcvJzsKKyNlbHNlCisJaWYgKGRpcmMgPT0gJy8nKQorCSAgICBkaXJjID0gJz8nOworCWVsc2UKKwkgICAgZGlyYyA9ICcvJzsKKyNlbmRpZgorICAgIH0KKworI2lmZGVmIEZFQVRfRk9MRElORworICAgIC8qIElmIHRoZSBjdXJzb3IgaXMgaW4gYSBjbG9zZWQgZm9sZCwgZG9uJ3QgZmluZCBhbm90aGVyIG1hdGNoIGluIHRoZSBzYW1lCisgICAgICogZm9sZC4gKi8KKyAgICBpZiAoZGlyYyA9PSAnLycpCisgICAgeworCWlmIChoYXNGb2xkaW5nKHBvcy5sbnVtLCBOVUxMLCAmcG9zLmxudW0pKQorCSAgICBwb3MuY29sID0gTUFYQ09MIC0gMjsJLyogYXZvaWQgb3ZlcmZsb3cgd2hlbiBhZGRpbmcgMSAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmIChoYXNGb2xkaW5nKHBvcy5sbnVtLCAmcG9zLmxudW0sIE5VTEwpKQorCSAgICBwb3MuY29sID0gMDsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisgICAgLyoKKyAgICAgKiBUdXJuICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIGJhY2sgb24uCisgICAgICovCisgICAgaWYgKG5vX2hsc2VhcmNoICYmICEob3B0aW9ucyAmIFNFQVJDSF9LRUVQKSkKKyAgICB7CisJcmVkcmF3X2FsbF9sYXRlcihOT1RfVkFMSUQpOworCW5vX2hsc2VhcmNoID0gRkFMU0U7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIFJlcGVhdCB0aGUgc2VhcmNoIHdoZW4gcGF0dGVybiBmb2xsb3dlZCBieSAnOycsIGUuZy4gIi9mb28vOz9iYXIiLgorICAgICAqLworICAgIGZvciAoOzspCisgICAgeworCXNlYXJjaHN0ciA9IHBhdDsKKwlkaXJjcCA9IE5VTEw7CisJCQkJCSAgICAvKiB1c2UgcHJldmlvdXMgcGF0dGVybiAqLworCWlmIChwYXQgPT0gTlVMTCB8fCAqcGF0ID09IE5VTCB8fCAqcGF0ID09IGRpcmMpCisJeworCSAgICBpZiAoc3BhdHNbUkVfU0VBUkNIXS5wYXQgPT0gTlVMTCkJICAgIC8qIG5vIHByZXZpb3VzIHBhdHRlcm4gKi8KKwkgICAgeworCQlFTVNHKF8oZV9ub3ByZXZyZSkpOworCQlyZXR2YWwgPSAwOworCQlnb3RvIGVuZF9kb19zZWFyY2g7CisJICAgIH0KKwkgICAgLyogbWFrZSBzZWFyY2hfcmVnY29tcCgpIHVzZSBzcGF0c1tSRV9TRUFSQ0hdLnBhdCAqLworCSAgICBzZWFyY2hzdHIgPSAoY2hhcl91ICopIiI7CisJfQorCisJaWYgKHBhdCAhPSBOVUxMICYmICpwYXQgIT0gTlVMKQkvKiBsb29rIGZvciAobmV3KSBvZmZzZXQgKi8KKwl7CisJICAgIC8qCisJICAgICAqIEZpbmQgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKwkgICAgICogSWYgdGhlcmUgaXMgYSBtYXRjaGluZyAnLycgb3IgJz8nLCB0b3NzIGl0LgorCSAgICAgKi8KKwkgICAgcHMgPSBzdHJjb3B5OworCSAgICBwID0gc2tpcF9yZWdleHAocGF0LCBkaXJjLCAoaW50KXBfbWFnaWMsICZzdHJjb3B5KTsKKwkgICAgaWYgKHN0cmNvcHkgIT0gcHMpCisJICAgIHsKKwkJLyogbWFkZSBhIGNvcHkgb2YgInBhdCIgdG8gY2hhbmdlICJcPyIgdG8gIj8iICovCisJCXNlYXJjaGNtZGxlbiArPSBTVFJMRU4ocGF0KSAtIFNUUkxFTihzdHJjb3B5KTsKKwkJcGF0ID0gc3RyY29weTsKKwkJc2VhcmNoc3RyID0gc3RyY29weTsKKwkgICAgfQorCSAgICBpZiAoKnAgPT0gZGlyYykKKwkgICAgeworCQlkaXJjcCA9IHA7CS8qIHJlbWVtYmVyIHdoZXJlIHdlIHB1dCB0aGUgTlVMICovCisJCSpwKysgPSBOVUw7CisJICAgIH0KKwkgICAgc3BhdHNbMF0ub2ZmLmxpbmUgPSBGQUxTRTsKKwkgICAgc3BhdHNbMF0ub2ZmLmVuZCA9IEZBTFNFOworCSAgICBzcGF0c1swXS5vZmYub2ZmID0gMDsKKwkgICAgLyoKKwkgICAgICogQ2hlY2sgZm9yIGEgbGluZSBvZmZzZXQgb3IgYSBjaGFyYWN0ZXIgb2Zmc2V0LgorCSAgICAgKiBGb3IgZ2V0X2FkZHJlc3MgKGVjaG8gb2ZmKSB3ZSBkb24ndCBjaGVjayBmb3IgYSBjaGFyYWN0ZXIKKwkgICAgICogb2Zmc2V0LCBiZWNhdXNlIGl0IGlzIG1lYW5pbmdsZXNzIGFuZCB0aGUgJ3MnIGNvdWxkIGJlIGEKKwkgICAgICogc3Vic3RpdHV0ZSBjb21tYW5kLgorCSAgICAgKi8KKwkgICAgaWYgKCpwID09ICcrJyB8fCAqcCA9PSAnLScgfHwgVklNX0lTRElHSVQoKnApKQorCQlzcGF0c1swXS5vZmYubGluZSA9IFRSVUU7CisJICAgIGVsc2UgaWYgKChvcHRpb25zICYgU0VBUkNIX09QVCkgJiYKKwkJCQkJKCpwID09ICdlJyB8fCAqcCA9PSAncycgfHwgKnAgPT0gJ2InKSkKKwkgICAgeworCQlpZiAoKnAgPT0gJ2UnKQkJLyogZW5kICovCisJCSAgICBzcGF0c1swXS5vZmYuZW5kID0gU0VBUkNIX0VORDsKKwkJKytwOworCSAgICB9CisJICAgIGlmIChWSU1fSVNESUdJVCgqcCkgfHwgKnAgPT0gJysnIHx8ICpwID09ICctJykgIC8qIGdvdCBhbiBvZmZzZXQgKi8KKwkgICAgeworCQkJCQkgICAgLyogJ25yJyBvciAnK25yJyBvciAnLW5yJyAqLworCQlpZiAoVklNX0lTRElHSVQoKnApIHx8IFZJTV9JU0RJR0lUKCoocCArIDEpKSkKKwkJICAgIHNwYXRzWzBdLm9mZi5vZmYgPSBhdG9sKChjaGFyICopcCk7CisJCWVsc2UgaWYgKCpwID09ICctJykJICAgIC8qIHNpbmdsZSAnLScgKi8KKwkJICAgIHNwYXRzWzBdLm9mZi5vZmYgPSAtMTsKKwkJZWxzZQkJCSAgICAvKiBzaW5nbGUgJysnICovCisJCSAgICBzcGF0c1swXS5vZmYub2ZmID0gMTsKKwkJKytwOworCQl3aGlsZSAoVklNX0lTRElHSVQoKnApKQkgICAgLyogc2tpcCBudW1iZXIgKi8KKwkJICAgICsrcDsKKwkgICAgfQorCisJICAgIC8qIGNvbXB1dGUgbGVuZ3RoIG9mIHNlYXJjaCBjb21tYW5kIGZvciBnZXRfYWRkcmVzcygpICovCisJICAgIHNlYXJjaGNtZGxlbiArPSAoaW50KShwIC0gcGF0KTsKKworCSAgICBwYXQgPSBwOwkJCSAgICAvKiBwdXQgcGF0IGFmdGVyIHNlYXJjaCBjb21tYW5kICovCisJfQorCisJaWYgKChvcHRpb25zICYgU0VBUkNIX0VDSE8pICYmIG1lc3NhZ2luZygpCisJCQkJCSAgICAmJiAhY21kX3NpbGVudCAmJiBtc2dfc2lsZW50ID09IDApCisJeworCSAgICBjaGFyX3UJKm1zZ2J1ZjsKKwkgICAgY2hhcl91CSp0cnVuYzsKKworCSAgICBpZiAoKnNlYXJjaHN0ciA9PSBOVUwpCisJCXAgPSBzcGF0c1tsYXN0X2lkeF0ucGF0OworCSAgICBlbHNlCisJCXAgPSBzZWFyY2hzdHI7CisJICAgIG1zZ2J1ZiA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKHApICsgNDApKTsKKwkgICAgaWYgKG1zZ2J1ZiAhPSBOVUxMKQorCSAgICB7CisJCW1zZ2J1ZlswXSA9IGRpcmM7CisJCVNUUkNQWShtc2didWYgKyAxLCBwKTsKKwkJaWYgKHNwYXRzWzBdLm9mZi5saW5lIHx8IHNwYXRzWzBdLm9mZi5lbmQgfHwgc3BhdHNbMF0ub2ZmLm9mZikKKwkJeworCQkgICAgcCA9IG1zZ2J1ZiArIFNUUkxFTihtc2didWYpOworCQkgICAgKnArKyA9IGRpcmM7CisJCSAgICBpZiAoc3BhdHNbMF0ub2ZmLmVuZCkKKwkJCSpwKysgPSAnZSc7CisJCSAgICBlbHNlIGlmICghc3BhdHNbMF0ub2ZmLmxpbmUpCisJCQkqcCsrID0gJ3MnOworCQkgICAgaWYgKHNwYXRzWzBdLm9mZi5vZmYgPiAwIHx8IHNwYXRzWzBdLm9mZi5saW5lKQorCQkJKnArKyA9ICcrJzsKKwkJICAgIGlmIChzcGF0c1swXS5vZmYub2ZmICE9IDAgfHwgc3BhdHNbMF0ub2ZmLmxpbmUpCisJCQlzcHJpbnRmKChjaGFyICopcCwgIiVsZCIsIHNwYXRzWzBdLm9mZi5vZmYpOworCQkgICAgZWxzZQorCQkJKnAgPSBOVUw7CisJCX0KKworCQltc2dfc3RhcnQoKTsKKwkJdHJ1bmMgPSBtc2dfc3RydHJ1bmMobXNnYnVmKTsKKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCS8qIFRoZSBzZWFyY2ggcGF0dGVybiBjb3VsZCBiZSBzaG93biBvbiB0aGUgcmlnaHQgaW4gcmlnaHRsZWZ0CisJCSAqIG1vZGUsIGJ1dCB0aGUgJ3J1bGVyJyBhbmQgJ3Nob3djbWQnIGFyZWEgdXNlIGl0IHRvbywgdGh1cworCQkgKiBpdCB3b3VsZCBiZSBibGFua2VkIG91dCBhZ2FpbiB2ZXJ5IHNvb24uICBTaG93IGl0IG9uIHRoZQorCQkgKiBsZWZ0LCBidXQgZG8gcmV2ZXJzZSB0aGUgdGV4dC4gKi8KKwkJaWYgKGN1cndpbi0+d19wX3JsICYmICpjdXJ3aW4tPndfcF9ybGMgPT0gJ3MnKQorCQl7CisJCSAgICBjaGFyX3UgKnI7CisKKwkJICAgIHIgPSByZXZlcnNlX3RleHQodHJ1bmMgIT0gTlVMTCA/IHRydW5jIDogbXNnYnVmKTsKKwkJICAgIGlmIChyICE9IE5VTEwpCisJCSAgICB7CisJCQl2aW1fZnJlZSh0cnVuYyk7CisJCQl0cnVuYyA9IHI7CisJCSAgICB9CisJCX0KKyNlbmRpZgorCQlpZiAodHJ1bmMgIT0gTlVMTCkKKwkJeworCQkgICAgbXNnX291dHRyYW5zKHRydW5jKTsKKwkJICAgIHZpbV9mcmVlKHRydW5jKTsKKwkJfQorCQllbHNlCisJCSAgICBtc2dfb3V0dHJhbnMobXNnYnVmKTsKKwkJbXNnX2Nscl9lb3MoKTsKKwkJbXNnX2NoZWNrKCk7CisJCXZpbV9mcmVlKG1zZ2J1Zik7CisKKwkJZ290b2NtZGxpbmUoRkFMU0UpOworCQlvdXRfZmx1c2goKTsKKwkJbXNnX25vd2FpdCA9IFRSVUU7CSAgICAvKiBkb24ndCB3YWl0IGZvciB0aGlzIG1lc3NhZ2UgKi8KKwkgICAgfQorCX0KKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBjaGFyYWN0ZXIgb2Zmc2V0LCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSBjdXJyZW50CisJICogcG9zaXRpb24sIHNvIHdlIGRvbid0IGdldCBzdHVjayBhdCAiP3BhdD9lKzIiIG9yICIvcGF0L3MtMiIuCisJICogVGhpcyBpcyBub3QgZG9uZSBmb3IgYSBsaW5lIG9mZnNldCwgYmVjYXVzZSB0aGVuIHdlIHdvdWxkIG5vdCBiZSB2aQorCSAqIGNvbXBhdGlibGUuCisJICovCisJaWYgKCFzcGF0c1swXS5vZmYubGluZSAmJiBzcGF0c1swXS5vZmYub2ZmKQorCXsKKwkgICAgaWYgKHNwYXRzWzBdLm9mZi5vZmYgPiAwKQorCSAgICB7CisJCWZvciAoYyA9IHNwYXRzWzBdLm9mZi5vZmY7IGM7IC0tYykKKwkJICAgIGlmIChkZWNsKCZwb3MpID09IC0xKQorCQkJYnJlYWs7CisJCWlmIChjKQkJCS8qIGF0IHN0YXJ0IG9mIGJ1ZmZlciAqLworCQl7CisJCSAgICBwb3MubG51bSA9IDA7CS8qIGFsbG93IGxudW0gPT0gMCBoZXJlICovCisJCSAgICBwb3MuY29sID0gTUFYQ09MOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWZvciAoYyA9IHNwYXRzWzBdLm9mZi5vZmY7IGM7ICsrYykKKwkJICAgIGlmIChpbmNsKCZwb3MpID09IC0xKQorCQkJYnJlYWs7CisJCWlmIChjKQkJCS8qIGF0IGVuZCBvZiBidWZmZXIgKi8KKwkJeworCQkgICAgcG9zLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCArIDE7CisJCSAgICBwb3MuY29sID0gMDsKKwkJfQorCSAgICB9CisJfQorCisjaWZkZWYgRkVBVF9GS01BUAkvKiB3aGVuIGluIEZhcnNpIG1vZGUsIHJldmVyc2UgdGhlIGNoYXJhY3RlciBmbG93ICovCisJaWYgKHBfYWx0a2V5bWFwICYmIGN1cndpbi0+d19wX3JsKQorCSAgICAgbHJGc3dhcChzZWFyY2hzdHIsMCk7CisjZW5kaWYKKworCWMgPSBzZWFyY2hpdChjdXJ3aW4sIGN1cmJ1ZiwgJnBvcywgZGlyYyA9PSAnLycgPyBGT1JXQVJEIDogQkFDS1dBUkQsCisJCXNlYXJjaHN0ciwgY291bnQsIHNwYXRzWzBdLm9mZi5lbmQgKyAob3B0aW9ucyAmCisJCSAgICAgICAoU0VBUkNIX0tFRVAgKyBTRUFSQ0hfUEVFSyArIFNFQVJDSF9ISVMKKwkJCSsgU0VBUkNIX01TRyArIFNFQVJDSF9TVEFSVAorCQkJKyAoKHBhdCAhPSBOVUxMICYmICpwYXQgPT0gJzsnKSA/IDAgOiBTRUFSQ0hfTk9PRikpKSwKKwkJUkVfTEFTVCk7CisKKwlpZiAoZGlyY3AgIT0gTlVMTCkKKwkgICAgKmRpcmNwID0gZGlyYzsJLyogcmVzdG9yZSBzZWNvbmQgJy8nIG9yICc/JyBmb3Igbm9ybWFsX2NtZCgpICovCisJaWYgKGMgPT0gRkFJTCkKKwl7CisJICAgIHJldHZhbCA9IDA7CisJICAgIGdvdG8gZW5kX2RvX3NlYXJjaDsKKwl9CisJaWYgKHNwYXRzWzBdLm9mZi5lbmQgJiYgb2FwICE9IE5VTEwpCisJICAgIG9hcC0+aW5jbHVzaXZlID0gVFJVRTsgIC8qICdlJyBpbmNsdWRlcyBsYXN0IGNoYXJhY3RlciAqLworCisJcmV0dmFsID0gMTsJCSAgICAvKiBwYXR0ZXJuIGZvdW5kICovCisKKwkvKgorCSAqIEFkZCBjaGFyYWN0ZXIgYW5kL29yIGxpbmUgb2Zmc2V0CisJICovCisJaWYgKCEob3B0aW9ucyAmIFNFQVJDSF9OT09GKSB8fCAqcGF0ID09ICc7JykKKwl7CisJICAgIGlmIChzcGF0c1swXS5vZmYubGluZSkJLyogQWRkIHRoZSBvZmZzZXQgdG8gdGhlIGxpbmUgbnVtYmVyLiAqLworCSAgICB7CisJCWMgPSBwb3MubG51bSArIHNwYXRzWzBdLm9mZi5vZmY7CisJCWlmIChjIDwgMSkKKwkJICAgIHBvcy5sbnVtID0gMTsKKwkJZWxzZSBpZiAoYyA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQkgICAgcG9zLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwkJZWxzZQorCQkgICAgcG9zLmxudW0gPSBjOworCQlwb3MuY29sID0gMDsKKworCQlyZXR2YWwgPSAyOwkgICAgLyogcGF0dGVybiBmb3VuZCwgbGluZSBvZmZzZXQgYWRkZWQgKi8KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogdG8gdGhlIHJpZ2h0LCBjaGVjayBmb3IgZW5kIG9mIGZpbGUgKi8KKwkJaWYgKHNwYXRzWzBdLm9mZi5vZmYgPiAwKQorCQl7CisJCSAgICBmb3IgKGMgPSBzcGF0c1swXS5vZmYub2ZmOyBjOyAtLWMpCisJCQlpZiAoaW5jbCgmcG9zKSA9PSAtMSkKKwkJCSAgICBicmVhazsKKwkJfQorCQkvKiB0byB0aGUgbGVmdCwgY2hlY2sgZm9yIHN0YXJ0IG9mIGZpbGUgKi8KKwkJZWxzZQorCQl7CisJCSAgICBpZiAoKGMgPSBwb3MuY29sICsgc3BhdHNbMF0ub2ZmLm9mZikgPj0gMCkKKwkJCXBvcy5jb2wgPSBjOworCQkgICAgZWxzZQorCQkJZm9yIChjID0gc3BhdHNbMF0ub2ZmLm9mZjsgYzsgKytjKQorCQkJICAgIGlmIChkZWNsKCZwb3MpID09IC0xKQorCQkJCWJyZWFrOworCQl9CisJICAgIH0KKwl9CisKKwkvKgorCSAqIFRoZSBzZWFyY2ggY29tbWFuZCBjYW4gYmUgZm9sbG93ZWQgYnkgYSAnOycgdG8gZG8gYW5vdGhlciBzZWFyY2guCisJICogRm9yIGV4YW1wbGU6ICIvcGF0LzsvZm9vLyszOz9iYXIiCisJICogVGhpcyBpcyBsaWtlIGRvaW5nIGFub3RoZXIgc2VhcmNoIGNvbW1hbmQsIGV4Y2VwdDoKKwkgKiAtIFRoZSByZW1lbWJlcmVkIGRpcmVjdGlvbiAnLycgb3IgJz8nIGlzIGZyb20gdGhlIGZpcnN0IHNlYXJjaC4KKwkgKiAtIFdoZW4gYW4gZXJyb3IgaGFwcGVucyB0aGUgY3Vyc29yIGlzbid0IG1vdmVkIGF0IGFsbC4KKwkgKiBEb24ndCBkbyB0aGlzIHdoZW4gY2FsbGVkIGJ5IGdldF9hZGRyZXNzKCkgKGl0IGhhbmRsZXMgJzsnIGl0c2VsZikuCisJICovCisJaWYgKCEob3B0aW9ucyAmIFNFQVJDSF9PUFQpIHx8IHBhdCA9PSBOVUxMIHx8ICpwYXQgIT0gJzsnKQorCSAgICBicmVhazsKKworCWRpcmMgPSAqKytwYXQ7CisJaWYgKGRpcmMgIT0gJz8nICYmIGRpcmMgIT0gJy8nKQorCXsKKwkgICAgcmV0dmFsID0gMDsKKwkgICAgRU1TRyhfKCJFMzg2OiBFeHBlY3RlZCAnPycgb3IgJy8nICBhZnRlciAnOyciKSk7CisJICAgIGdvdG8gZW5kX2RvX3NlYXJjaDsKKwl9CisJKytwYXQ7CisgICAgfQorCisgICAgaWYgKG9wdGlvbnMgJiBTRUFSQ0hfTUFSSykKKwlzZXRwY21hcmsoKTsKKyAgICBjdXJ3aW4tPndfY3Vyc29yID0gcG9zOworICAgIGN1cndpbi0+d19zZXRfY3Vyc3dhbnQgPSBUUlVFOworCitlbmRfZG9fc2VhcmNoOgorICAgIGlmIChvcHRpb25zICYgU0VBUkNIX0tFRVApCisJc3BhdHNbMF0ub2ZmID0gb2xkX29mZjsKKyAgICB2aW1fZnJlZShzdHJjb3B5KTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfSU5TX0VYUEFORCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBzZWFyY2hfZm9yX2V4YWN0X2xpbmUoYnVmLCBwb3MsIGRpciwgcGF0KQorICoKKyAqIFNlYXJjaCBmb3IgYSBsaW5lIHN0YXJ0aW5nIHdpdGggdGhlIGdpdmVuIHBhdHRlcm4gKGlnbm9yaW5nIGxlYWRpbmcKKyAqIHdoaXRlLXNwYWNlKSwgc3RhcnRpbmcgZnJvbSBwb3MgYW5kIGdvaW5nIGluIGRpcmVjdGlvbiBkaXIuCXBvcyB3aWxsCisgKiBjb250YWluIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWF0Y2ggZm91bmQuICAgIEJsYW5rIGxpbmVzIG1hdGNoIG9ubHkgaWYKKyAqIEFERElORyBpcyBzZXQuICBpZiBwX2ljIGlzIHNldCB0aGVuIHRoZSBwYXR0ZXJuIG11c3QgYmUgaW4gbG93ZXJjYXNlLgorICogUmV0dXJuIE9LIGZvciBzdWNjZXNzLCBvciBGQUlMIGlmIG5vIGxpbmUgZm91bmQuCisgKi8KKyAgICBpbnQKK3NlYXJjaF9mb3JfZXhhY3RfbGluZShidWYsIHBvcywgZGlyLCBwYXQpCisgICAgYnVmX1QJKmJ1ZjsKKyAgICBwb3NfVAkqcG9zOworICAgIGludAkJZGlyOworICAgIGNoYXJfdQkqcGF0OworeworICAgIGxpbmVucl9UCXN0YXJ0ID0gMDsKKyAgICBjaGFyX3UJKnB0cjsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBpZiAoYnVmLT5iX21sLm1sX2xpbmVfY291bnQgPT0gMCkKKwlyZXR1cm4gRkFJTDsKKyAgICBmb3IgKDs7KQorICAgIHsKKwlwb3MtPmxudW0gKz0gZGlyOworCWlmIChwb3MtPmxudW0gPCAxKQorCXsKKwkgICAgaWYgKHBfd3MpCisJICAgIHsKKwkJcG9zLT5sbnVtID0gYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJCWlmICghc2hvcnRtZXNzKFNITV9TRUFSQ0gpKQorCQkgICAgZ2l2ZV93YXJuaW5nKChjaGFyX3UgKilfKHRvcF9ib3RfbXNnKSwgVFJVRSk7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCXBvcy0+bG51bSA9IDE7CisJCWJyZWFrOworCSAgICB9CisJfQorCWVsc2UgaWYgKHBvcy0+bG51bSA+IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXsKKwkgICAgaWYgKHBfd3MpCisJICAgIHsKKwkJcG9zLT5sbnVtID0gMTsKKwkJaWYgKCFzaG9ydG1lc3MoU0hNX1NFQVJDSCkpCisJCSAgICBnaXZlX3dhcm5pbmcoKGNoYXJfdSAqKV8oYm90X3RvcF9tc2cpLCBUUlVFKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJcG9zLT5sbnVtID0gMTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJaWYgKHBvcy0+bG51bSA9PSBzdGFydCkKKwkgICAgYnJlYWs7CisJaWYgKHN0YXJ0ID09IDApCisJICAgIHN0YXJ0ID0gcG9zLT5sbnVtOworCXB0ciA9IG1sX2dldF9idWYoYnVmLCBwb3MtPmxudW0sIEZBTFNFKTsKKwlwID0gc2tpcHdoaXRlKHB0cik7CisJcG9zLT5jb2wgPSAoY29sbnJfVCkgKHAgLSBwdHIpOworCisJLyogd2hlbiBhZGRpbmcgbGluZXMgdGhlIG1hdGNoaW5nIGxpbmUgbWF5IGJlIGVtcHR5IGJ1dCBpdCBpcyBub3QKKwkgKiBpZ25vcmVkIGJlY2F1c2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4gdGhlIG5leHQgbGluZSAtLSBBY2V2ZWRvICovCisJaWYgKChjb250aW51ZV9zdGF0dXMgJiBDT05UX0FERElORykgJiYgIShjb250aW51ZV9zdGF0dXMgJiBDT05UX1NPTCkpCisJeworCSAgICBpZiAoKHBfaWMgPyBNQl9TVFJJQ01QKHAsIHBhdCkgOiBTVFJDTVAocCwgcGF0KSkgPT0gMCkKKwkJcmV0dXJuIE9LOworCX0KKwllbHNlIGlmICgqcCAhPSBOVUwpCS8qIGlnbm9yZSBlbXB0eSBsaW5lcyAqLworCXsJLyogZXhwYW5kaW5nIGxpbmVzIG9yIHdvcmRzICovCisJICAgIGlmICgocF9pYyA/IE1CX1NUUk5JQ01QKHAsIHBhdCwgY29tcGxldGlvbl9sZW5ndGgpCisJCQkJICAgOiBTVFJOQ01QKHAsIHBhdCwgY29tcGxldGlvbl9sZW5ndGgpKSA9PSAwKQorCQlyZXR1cm4gT0s7CisJfQorICAgIH0KKyAgICByZXR1cm4gRkFJTDsKK30KKyNlbmRpZiAvKiBGRUFUX0lOU19FWFBBTkQgKi8KKworLyoKKyAqIENoYXJhY3RlciBTZWFyY2hlcworICovCisKKy8qCisgKiBTZWFyY2ggZm9yIGEgY2hhcmFjdGVyIGluIGEgbGluZS4gIElmICJ0X2NtZCIgaXMgRkFMU0UsIG1vdmUgdG8gdGhlCisgKiBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyLCBvdGhlcndpc2UgbW92ZSB0byBqdXN0IGJlZm9yZSB0aGUgY2hhci4KKyAqIERvIHRoaXMgImNhcC0+Y291bnQxIiB0aW1lcy4KKyAqIFJldHVybiBGQUlMIG9yIE9LLgorICovCisgICAgaW50CitzZWFyY2hjKGNhcCwgdF9jbWQpCisgICAgY21kYXJnX1QJKmNhcDsKKyAgICBpbnQJCXRfY21kOworeworICAgIGludAkJCWMgPSBjYXAtPm5jaGFyOwkvKiBjaGFyIHRvIHNlYXJjaCBmb3IgKi8KKyAgICBpbnQJCQlkaXIgPSBjYXAtPmFyZzsJLyogVFJVRSBmb3Igc2VhcmNoaW5nIGZvcndhcmQgKi8KKyAgICBsb25nCQljb3VudCA9IGNhcC0+Y291bnQxOwkvKiByZXBlYXQgY291bnQgKi8KKyAgICBzdGF0aWMgaW50CQlsYXN0YyA9IE5VTDsJLyogbGFzdCBjaGFyYWN0ZXIgc2VhcmNoZWQgZm9yICovCisgICAgc3RhdGljIGludAkJbGFzdGNkaXI7CS8qIGxhc3QgZGlyZWN0aW9uIG9mIGNoYXJhY3RlciBzZWFyY2ggKi8KKyAgICBzdGF0aWMgaW50CQlsYXN0X3RfY21kOwkvKiBsYXN0IHNlYXJjaCB0X2NtZCAqLworICAgIGludAkJCWNvbDsKKyAgICBjaGFyX3UJCSpwOworICAgIGludAkJCWxlbjsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgc3RhdGljIGNoYXJfdQlieXRlc1tNQl9NQVhCWVRFU107CisgICAgc3RhdGljIGludAkJYnl0ZWxlbiA9IDE7CS8qID4xIGZvciBtdWx0aS1ieXRlIGNoYXIgKi8KKyNlbmRpZgorCisgICAgaWYgKGMgIT0gTlVMKQkvKiBub3JtYWwgc2VhcmNoOiByZW1lbWJlciBhcmdzIGZvciByZXBlYXQgKi8KKyAgICB7CisJaWYgKCFLZXlTdHVmZmVkKSAgICAvKiBkb24ndCByZW1lbWJlciB3aGVuIHJlZG9pbmcgKi8KKwl7CisJICAgIGxhc3RjID0gYzsKKwkgICAgbGFzdGNkaXIgPSBkaXI7CisJICAgIGxhc3RfdF9jbWQgPSB0X2NtZDsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGJ5dGVsZW4gPSAoKm1iX2NoYXIyYnl0ZXMpKGMsIGJ5dGVzKTsKKwkgICAgaWYgKGNhcC0+bmNoYXJDMSAhPSAwKQorCSAgICB7CisJCWJ5dGVsZW4gKz0gKCptYl9jaGFyMmJ5dGVzKShjYXAtPm5jaGFyQzEsIGJ5dGVzICsgYnl0ZWxlbik7CisJCWlmIChjYXAtPm5jaGFyQzIgIT0gMCkKKwkJICAgIGJ5dGVsZW4gKz0gKCptYl9jaGFyMmJ5dGVzKShjYXAtPm5jaGFyQzIsIGJ5dGVzICsgYnl0ZWxlbik7CisJICAgIH0KKyNlbmRpZgorCX0KKyAgICB9CisgICAgZWxzZQkJLyogcmVwZWF0IHByZXZpb3VzIHNlYXJjaCAqLworICAgIHsKKwlpZiAobGFzdGMgPT0gTlVMKQorCSAgICByZXR1cm4gRkFJTDsKKwlpZiAoZGlyKQkvKiByZXBlYXQgaW4gb3Bwb3NpdGUgZGlyZWN0aW9uICovCisJICAgIGRpciA9IC1sYXN0Y2RpcjsKKwllbHNlCisJICAgIGRpciA9IGxhc3RjZGlyOworCXRfY21kID0gbGFzdF90X2NtZDsKKwljID0gbGFzdGM7CisJLyogRm9yIG11bHRpLWJ5dGUgcmUtdXNlIGxhc3QgYnl0ZXNbXSBhbmQgYnl0ZWxlbi4gKi8KKyAgICB9CisKKyAgICBwID0gbWxfZ2V0X2N1cmxpbmUoKTsKKyAgICBjb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKyAgICBsZW4gPSAoaW50KVNUUkxFTihwKTsKKworICAgIHdoaWxlIChjb3VudC0tKQorICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwl7CisJICAgIGZvciAoOzspCisJICAgIHsKKwkJaWYgKGRpciA+IDApCisJCXsKKwkJICAgIGNvbCArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHAgKyBjb2wpOworCQkgICAgaWYgKGNvbCA+PSBsZW4pCisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGlmIChjb2wgPT0gMCkKKwkJCXJldHVybiBGQUlMOworCQkgICAgY29sIC09ICgqbWJfaGVhZF9vZmYpKHAsIHAgKyBjb2wgLSAxKSArIDE7CisJCX0KKwkJaWYgKGJ5dGVsZW4gPT0gMSkKKwkJeworCQkgICAgaWYgKHBbY29sXSA9PSBjKQorCQkJYnJlYWs7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBpZiAodmltX21lbWNtcChwICsgY29sLCBieXRlcywgYnl0ZWxlbikgPT0gMCkKKwkJCWJyZWFrOworCQl9CisJICAgIH0KKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBmb3IgKDs7KQorCSAgICB7CisJCWlmICgoY29sICs9IGRpcikgPCAwIHx8IGNvbCA+PSBsZW4pCisJCSAgICByZXR1cm4gRkFJTDsKKwkJaWYgKHBbY29sXSA9PSBjKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKHRfY21kKQorICAgIHsKKwkvKiBiYWNrdXAgdG8gYmVmb3JlIHRoZSBjaGFyYWN0ZXIgKHBvc3NpYmx5IGRvdWJsZS1ieXRlKSAqLworCWNvbCAtPSBkaXI7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJeworCSAgICBpZiAoZGlyIDwgMCkKKwkJLyogTGFuZGVkIG9uIHRoZSBzZWFyY2ggY2hhciB3aGljaCBpcyBieXRlbGVuIGxvbmcgKi8KKwkJY29sICs9IGJ5dGVsZW4gLSAxOworCSAgICBlbHNlCisJCS8qIFRvIHByZXZpb3VzIGNoYXIsIHdoaWNoIG1heSBiZSBtdWx0aS1ieXRlLiAqLworCQljb2wgLT0gKCptYl9oZWFkX29mZikocCwgcCArIGNvbCk7CisJfQorI2VuZGlmCisgICAgfQorICAgIGN1cndpbi0+d19jdXJzb3IuY29sID0gY29sOworCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogIk90aGVyIiBTZWFyY2hlcworICovCisKKy8qCisgKiBmaW5kbWF0Y2ggLSBmaW5kIHRoZSBtYXRjaGluZyBwYXJlbiBvciBicmFjZQorICoKKyAqIEltcHJvdmVtZW50IG92ZXIgdmk6IEJyYWNlcyBpbnNpZGUgcXVvdGVzIGFyZSBpZ25vcmVkLgorICovCisgICAgcG9zX1QgKgorZmluZG1hdGNoKG9hcCwgaW5pdGMpCisgICAgb3BhcmdfVCAgICpvYXA7CisgICAgaW50CSAgICBpbml0YzsKK3sKKyAgICByZXR1cm4gZmluZG1hdGNobGltaXQob2FwLCBpbml0YywgMCwgMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgY2hhcmFjdGVyIGJlZm9yZSAibGluZXBbY29sXSIgZXF1YWxzICJjaCIuCisgKiBSZXR1cm4gRkFMU0UgaWYgImNvbCIgaXMgemVyby4KKyAqIFVwZGF0ZSAiKnByZXZjb2wiIHRvIHRoZSBjb2x1bW4gb2YgdGhlIHByZXZpb3VzIGNoYXJhY3RlciwgdW5sZXNzICJwcmV2Y29sIgorICogaXMgTlVMTC4KKyAqIEhhbmRsZXMgbXVsdGlieXRlIHN0cmluZyBjb3JyZWN0bHkuCisgKi8KKyAgICBzdGF0aWMgaW50CitjaGVja19wcmV2Y29sKGxpbmVwLCBjb2wsIGNoLCBwcmV2Y29sKQorICAgIGNoYXJfdQkqbGluZXA7CisgICAgaW50CQljb2w7CisgICAgaW50CQljaDsKKyAgICBpbnQJCSpwcmV2Y29sOworeworICAgIC0tY29sOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoY29sID4gMCAmJiBoYXNfbWJ5dGUpCisJY29sIC09ICgqbWJfaGVhZF9vZmYpKGxpbmVwLCBsaW5lcCArIGNvbCk7CisjZW5kaWYKKyAgICBpZiAocHJldmNvbCkKKwkqcHJldmNvbCA9IGNvbDsKKyAgICByZXR1cm4gKGNvbCA+PSAwICYmIGxpbmVwW2NvbF0gPT0gY2gpID8gVFJVRSA6IEZBTFNFOworfQorCisvKgorICogZmluZG1hdGNobGltaXQgLS0gZmluZCB0aGUgbWF0Y2hpbmcgcGFyZW4gb3IgYnJhY2UsIGlmIGl0IGV4aXN0cyB3aXRoaW4KKyAqIG1heHRyYXZlbCBsaW5lcyBvZiBoZXJlLiAgQSBtYXh0cmF2ZWwgb2YgMCBtZWFucyBzZWFyY2ggdW50aWwgZmFsbGluZyBvZmYKKyAqIHRoZSBlZGdlIG9mIHRoZSBmaWxlLgorICoKKyAqICJpbml0YyIgaXMgdGhlIGNoYXJhY3RlciB0byBmaW5kIGEgbWF0Y2ggZm9yLiAgTlVMIG1lYW5zIHRvIGZpbmQgdGhlCisgKiBjaGFyYWN0ZXIgYXQgb3IgYWZ0ZXIgdGhlIGN1cnNvci4KKyAqCisgKiBmbGFnczogRk1fQkFDS1dBUkQJc2VhcmNoIGJhY2t3YXJkcyAod2hlbiBpbml0YyBpcyAnLycsICcqJyBvciAnIycpCisgKgkgIEZNX0ZPUldBUkQJc2VhcmNoIGZvcndhcmRzICh3aGVuIGluaXRjIGlzICcvJywgJyonIG9yICcjJykKKyAqCSAgRk1fQkxPQ0tTVE9QCXN0b3AgYXQgc3RhcnQvZW5kIG9mIGJsb2NrICh7IG9yIH0gaW4gY29sdW1uIDApCisgKgkgIEZNX1NLSVBDT01NCXNraXAgY29tbWVudHMgKG5vdCBpbXBsZW1lbnRlZCB5ZXQhKQorICovCisKKyAgICBwb3NfVCAqCitmaW5kbWF0Y2hsaW1pdChvYXAsIGluaXRjLCBmbGFncywgbWF4dHJhdmVsKQorICAgIG9wYXJnX1QJKm9hcDsKKyAgICBpbnQJCWluaXRjOworICAgIGludAkJZmxhZ3M7CisgICAgaW50CQltYXh0cmF2ZWw7Cit7CisgICAgc3RhdGljIHBvc19UIHBvczsJCQkvKiBjdXJyZW50IHNlYXJjaCBwb3NpdGlvbiAqLworICAgIGludAkJZmluZGMgPSAwOwkJLyogbWF0Y2hpbmcgYnJhY2UgKi8KKyAgICBpbnQJCWM7CisgICAgaW50CQljb3VudCA9IDA7CQkvKiBjdW11bGF0aXZlIG51bWJlciBvZiBicmFjZXMgKi8KKyAgICBpbnQJCWJhY2t3YXJkcyA9IEZBTFNFOwkvKiBpbml0IGZvciBnY2MgKi8KKyAgICBpbnQJCWlucXVvdGUgPSBGQUxTRTsJLyogVFJVRSB3aGVuIGluc2lkZSBxdW90ZXMgKi8KKyAgICBjaGFyX3UJKmxpbmVwOwkJCS8qIHBvaW50ZXIgdG8gY3VycmVudCBsaW5lICovCisgICAgY2hhcl91CSpwdHI7CisgICAgaW50CQlkb19xdW90ZXM7CQkvKiBjaGVjayBmb3IgcXVvdGVzIGluIGN1cnJlbnQgbGluZSAqLworICAgIGludAkJYXRfc3RhcnQ7CQkvKiBkb19xdW90ZXMgdmFsdWUgYXQgc3RhcnQgcG9zaXRpb24gKi8KKyAgICBpbnQJCWhhc2hfZGlyID0gMDsJCS8qIERpcmVjdGlvbiBzZWFyY2hlZCBmb3IgIyB0aGluZ3MgKi8KKyAgICBpbnQJCWNvbW1lbnRfZGlyID0gMDsJLyogRGlyZWN0aW9uIHNlYXJjaGVkIGZvciBjb21tZW50cyAqLworICAgIHBvc19UCW1hdGNoX3BvczsJCS8qIFdoZXJlIGxhc3Qgc2xhc2gtc3RhciB3YXMgZm91bmQgKi8KKyAgICBpbnQJCXN0YXJ0X2luX3F1b3RlczsJLyogc3RhcnQgcG9zaXRpb24gaXMgaW4gcXVvdGVzICovCisgICAgaW50CQl0cmF2ZWxlZCA9IDA7CQkvKiBob3cgZmFyIHdlJ3ZlIHNlYXJjaGVkIHNvIGZhciAqLworICAgIGludAkJaWdub3JlX2NlbmQgPSBGQUxTRTsgICAgLyogaWdub3JlIGNvbW1lbnQgZW5kICovCisgICAgaW50CQljcG9fbWF0Y2g7CQkvKiB2aSBjb21wYXRpYmxlIG1hdGNoaW5nICovCisgICAgaW50CQljcG9fYnNsOwkJLyogZG9uJ3QgcmVjb2duaXplIGJhY2tzbGFzaGVzICovCisgICAgaW50CQltYXRjaF9lc2NhcGVkID0gMDsJLyogc2VhcmNoIGZvciBlc2NhcGVkIG1hdGNoICovCisgICAgaW50CQlkaXI7CQkJLyogRGlyZWN0aW9uIHRvIHNlYXJjaCAqLworICAgIGludAkJY29tbWVudF9jb2wgPSBNQVhDT0w7ICAgLyogc3RhcnQgb2YgLyAvIGNvbW1lbnQgKi8KKworICAgIHBvcyA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgbGluZXAgPSBtbF9nZXQocG9zLmxudW0pOworCisgICAgY3BvX21hdGNoID0gKHZpbV9zdHJjaHIocF9jcG8sIENQT19NQVRDSCkgIT0gTlVMTCk7CisgICAgY3BvX2JzbCA9ICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fTUFUQ0hCU0wpICE9IE5VTEwpOworCisgICAgLyogRGlyZWN0aW9uIHRvIHNlYXJjaCB3aGVuIGluaXRjIGlzICcvJywgJyonIG9yICcjJyAqLworICAgIGlmIChmbGFncyAmIEZNX0JBQ0tXQVJEKQorCWRpciA9IEJBQ0tXQVJEOworICAgIGVsc2UgaWYgKGZsYWdzICYgRk1fRk9SV0FSRCkKKwlkaXIgPSBGT1JXQVJEOworICAgIGVsc2UKKwlkaXIgPSAwOworCisgICAgLyoKKyAgICAgKiBpZiBpbml0YyBnaXZlbiwgbG9vayBpbiB0aGUgdGFibGUgZm9yIHRoZSBtYXRjaGluZyBjaGFyYWN0ZXIKKyAgICAgKiAnLycgYW5kICcqJyBhcmUgc3BlY2lhbCBjYXNlczogbG9vayBmb3Igc3RhcnQgb3IgZW5kIG9mIGNvbW1lbnQuCisgICAgICogV2hlbiAnLycgaXMgdXNlZCwgd2UgaWdub3JlIHJ1bm5pbmcgYmFja3dhcmRzIGludG8gYW4gc3Rhci1zbGFzaCwgZm9yCisgICAgICogIlsqIiBjb21tYW5kLCB3ZSBqdXN0IHdhbnQgdG8gZmluZCBhbnkgY29tbWVudC4KKyAgICAgKi8KKyAgICBpZiAoaW5pdGMgPT0gJy8nIHx8IGluaXRjID09ICcqJykKKyAgICB7CisJY29tbWVudF9kaXIgPSBkaXI7CisJaWYgKGluaXRjID09ICcvJykKKwkgICAgaWdub3JlX2NlbmQgPSBUUlVFOworCWJhY2t3YXJkcyA9IChkaXIgPT0gRk9SV0FSRCkgPyBGQUxTRSA6IFRSVUU7CisJaW5pdGMgPSBOVUw7CisgICAgfQorICAgIGVsc2UgaWYgKGluaXRjICE9ICcjJyAmJiBpbml0YyAhPSBOVUwpCisgICAgeworCS8qICdtYXRjaHBhaXJzJyBpcyAieDp5LHg6eSIgKi8KKwlmb3IgKHB0ciA9IGN1cmJ1Zi0+Yl9wX21wczsgKnB0cjsgcHRyICs9IDIpCisJeworCSAgICBpZiAoKnB0ciA9PSBpbml0YykKKwkgICAgeworCQlmaW5kYyA9IGluaXRjOworCQlpbml0YyA9IHB0clsyXTsKKwkJYmFja3dhcmRzID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgcHRyICs9IDI7CisJICAgIGlmICgqcHRyID09IGluaXRjKQorCSAgICB7CisJCWZpbmRjID0gaW5pdGM7CisJCWluaXRjID0gcHRyWy0yXTsKKwkJYmFja3dhcmRzID0gRkFMU0U7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChwdHJbMV0gIT0gJywnKQorCQlicmVhazsKKwl9CisJaWYgKCFmaW5kYykJCS8qIGludmFsaWQgaW5pdGMhICovCisJICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAvKgorICAgICAqIEVpdGhlciBpbml0YyBpcyAnIycsIG9yIG5vIGluaXRjIHdhcyBnaXZlbiBhbmQgd2UgbmVlZCB0byBsb29rIHVuZGVyIHRoZQorICAgICAqIGN1cnNvci4KKyAgICAgKi8KKyAgICBlbHNlCisgICAgeworCWlmIChpbml0YyA9PSAnIycpCisJeworCSAgICBoYXNoX2RpciA9IGRpcjsKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogaW5pdGMgd2FzIG5vdCBnaXZlbiwgbXVzdCBsb29rIGZvciBzb21ldGhpbmcgdG8gbWF0Y2ggdW5kZXIKKwkgICAgICogb3IgbmVhciB0aGUgY3Vyc29yLgorCSAgICAgKiBPbmx5IGNoZWNrIGZvciBzcGVjaWFsIHRoaW5ncyB3aGVuICdjcG8nIGRvZXNuJ3QgaGF2ZSAnJScuCisJICAgICAqLworCSAgICBpZiAoIWNwb19tYXRjaCkKKwkgICAgeworCQkvKiBBcmUgd2UgYmVmb3JlIG9yIGF0ICNpZiwgI2Vsc2UgZXRjLj8gKi8KKwkJcHRyID0gc2tpcHdoaXRlKGxpbmVwKTsKKwkJaWYgKCpwdHIgPT0gJyMnICYmIHBvcy5jb2wgPD0gKGNvbG5yX1QpKHB0ciAtIGxpbmVwKSkKKwkJeworCQkgICAgcHRyID0gc2tpcHdoaXRlKHB0ciArIDEpOworCQkgICAgaWYgKCAgIFNUUk5DTVAocHRyLCAiaWYiLCAyKSA9PSAwCisJCQl8fCBTVFJOQ01QKHB0ciwgImVuZGlmIiwgNSkgPT0gMAorCQkJfHwgU1RSTkNNUChwdHIsICJlbCIsIDIpID09IDApCisJCQloYXNoX2RpciA9IDE7CisJCX0KKworCQkvKiBBcmUgd2Ugb24gYSBjb21tZW50PyAqLworCQllbHNlIGlmIChsaW5lcFtwb3MuY29sXSA9PSAnLycpCisJCXsKKwkJICAgIGlmIChsaW5lcFtwb3MuY29sICsgMV0gPT0gJyonKQorCQkgICAgeworCQkJY29tbWVudF9kaXIgPSBGT1JXQVJEOworCQkJYmFja3dhcmRzID0gRkFMU0U7CisJCQlwb3MuY29sKys7CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChwb3MuY29sID4gMCAmJiBsaW5lcFtwb3MuY29sIC0gMV0gPT0gJyonKQorCQkgICAgeworCQkJY29tbWVudF9kaXIgPSBCQUNLV0FSRDsKKwkJCWJhY2t3YXJkcyA9IFRSVUU7CisJCQlwb3MuY29sLS07CisJCSAgICB9CisJCX0KKwkJZWxzZSBpZiAobGluZXBbcG9zLmNvbF0gPT0gJyonKQorCQl7CisJCSAgICBpZiAobGluZXBbcG9zLmNvbCArIDFdID09ICcvJykKKwkJICAgIHsKKwkJCWNvbW1lbnRfZGlyID0gQkFDS1dBUkQ7CisJCQliYWNrd2FyZHMgPSBUUlVFOworCQkgICAgfQorCQkgICAgZWxzZSBpZiAocG9zLmNvbCA+IDAgJiYgbGluZXBbcG9zLmNvbCAtIDFdID09ICcvJykKKwkJICAgIHsKKwkJCWNvbW1lbnRfZGlyID0gRk9SV0FSRDsKKwkJCWJhY2t3YXJkcyA9IEZBTFNFOworCQkgICAgfQorCQl9CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBJZiB3ZSBhcmUgbm90IG9uIGEgY29tbWVudCBvciB0aGUgIyBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLCB0aGVuCisJICAgICAqIGxvb2sgZm9yIGJyYWNlIGFueXdoZXJlIG9uIHRoaXMgbGluZSBhZnRlciB0aGUgY3Vyc29yLgorCSAgICAgKi8KKwkgICAgaWYgKCFoYXNoX2RpciAmJiAhY29tbWVudF9kaXIpCisJICAgIHsKKwkJLyoKKwkJICogRmluZCB0aGUgYnJhY2UgdW5kZXIgb3IgYWZ0ZXIgdGhlIGN1cnNvci4KKwkJICogSWYgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGxpbmUsIHVzZSB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4KKwkJICogdGhlIGxpbmUuCisJCSAqLworCQlpZiAobGluZXBbcG9zLmNvbF0gPT0gTlVMICYmIHBvcy5jb2wpCisJCSAgICAtLXBvcy5jb2w7CisJCWZvciAoOzspCisJCXsKKwkJICAgIGluaXRjID0gbGluZXBbcG9zLmNvbF07CisJCSAgICBpZiAoaW5pdGMgPT0gTlVMKQorCQkJYnJlYWs7CisKKwkJICAgIGZvciAocHRyID0gY3VyYnVmLT5iX3BfbXBzOyAqcHRyOyArK3B0cikKKwkJICAgIHsKKwkJCWlmICgqcHRyID09IGluaXRjKQorCQkJeworCQkJICAgIGZpbmRjID0gcHRyWzJdOworCQkJICAgIGJhY2t3YXJkcyA9IEZBTFNFOworCQkJICAgIGJyZWFrOworCQkJfQorCQkJcHRyICs9IDI7CisJCQlpZiAoKnB0ciA9PSBpbml0YykKKwkJCXsKKwkJCSAgICBmaW5kYyA9IHB0clstMl07CisJCQkgICAgYmFja3dhcmRzID0gVFJVRTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCWlmICghKisrcHRyKQorCQkJICAgIGJyZWFrOworCQkgICAgfQorCQkgICAgaWYgKGZpbmRjKQorCQkJYnJlYWs7CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCXBvcy5jb2wgKz0gKCptYl9wdHIybGVuX2NoZWNrKShsaW5lcCArIHBvcy5jb2wpOworCQkgICAgZWxzZQorI2VuZGlmCisJCQkrK3Bvcy5jb2w7CisJCX0KKwkJaWYgKCFmaW5kYykKKwkJeworCQkgICAgLyogbm8gYnJhY2UgaW4gdGhlIGxpbmUsIG1heWJlIHVzZSAiICAjaWYiIHRoZW4gKi8KKwkJICAgIGlmICghY3BvX21hdGNoICYmICpza2lwd2hpdGUobGluZXApID09ICcjJykKKwkJCWhhc2hfZGlyID0gMTsKKwkJICAgIGVsc2UKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWVsc2UgaWYgKCFjcG9fYnNsKQorCQl7CisJCSAgICBpbnQgY29sLCBic2xjbnQgPSAwOworCisJCSAgICAvKiBTZXQgIm1hdGNoX2VzY2FwZWQiIGlmIHRoZXJlIGFyZSBhbiBvZGQgbnVtYmVyIG9mCisJCSAgICAgKiBiYWNrc2xhc2hlcy4gKi8KKwkJICAgIGZvciAoY29sID0gcG9zLmNvbDsgY2hlY2tfcHJldmNvbChsaW5lcCwgY29sLCAnXFwnLCAmY29sKTspCisJCQlic2xjbnQrKzsKKwkJICAgIG1hdGNoX2VzY2FwZWQgPSAoYnNsY250ICYgMSk7CisJCX0KKwkgICAgfQorCX0KKwlpZiAoaGFzaF9kaXIpCisJeworCSAgICAvKgorCSAgICAgKiBMb29rIGZvciBtYXRjaGluZyAjaWYsICNlbHNlLCAjZWxpZiwgb3IgI2VuZGlmCisJICAgICAqLworCSAgICBpZiAob2FwICE9IE5VTEwpCisJCW9hcC0+bW90aW9uX3R5cGUgPSBNTElORTsgICAvKiBMaW5ld2lzZSBmb3IgdGhpcyBjYXNlIG9ubHkgKi8KKwkgICAgaWYgKGluaXRjICE9ICcjJykKKwkgICAgeworCQlwdHIgPSBza2lwd2hpdGUoc2tpcHdoaXRlKGxpbmVwKSArIDEpOworCQlpZiAoU1RSTkNNUChwdHIsICJpZiIsIDIpID09IDAgfHwgU1RSTkNNUChwdHIsICJlbCIsIDIpID09IDApCisJCSAgICBoYXNoX2RpciA9IDE7CisJCWVsc2UgaWYgKFNUUk5DTVAocHRyLCAiZW5kaWYiLCA1KSA9PSAwKQorCQkgICAgaGFzaF9kaXIgPSAtMTsKKwkJZWxzZQorCQkgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwkgICAgcG9zLmNvbCA9IDA7CisJICAgIHdoaWxlICghZ290X2ludCkKKwkgICAgeworCQlpZiAoaGFzaF9kaXIgPiAwKQorCQl7CisJCSAgICBpZiAocG9zLmxudW0gPT0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChwb3MubG51bSA9PSAxKQorCQkgICAgYnJlYWs7CisJCXBvcy5sbnVtICs9IGhhc2hfZGlyOworCQlsaW5lcCA9IG1sX2dldChwb3MubG51bSk7CisJCWxpbmVfYnJlYWtjaGVjaygpOwkvKiBjaGVjayBmb3IgQ1RSTC1DIHR5cGVkICovCisJCXB0ciA9IHNraXB3aGl0ZShsaW5lcCk7CisJCWlmICgqcHRyICE9ICcjJykKKwkJICAgIGNvbnRpbnVlOworCQlwb3MuY29sID0gKGNvbG5yX1QpIChwdHIgLSBsaW5lcCk7CisJCXB0ciA9IHNraXB3aGl0ZShwdHIgKyAxKTsKKwkJaWYgKGhhc2hfZGlyID4gMCkKKwkJeworCQkgICAgaWYgKFNUUk5DTVAocHRyLCAiaWYiLCAyKSA9PSAwKQorCQkJY291bnQrKzsKKwkJICAgIGVsc2UgaWYgKFNUUk5DTVAocHRyLCAiZWwiLCAyKSA9PSAwKQorCQkgICAgeworCQkJaWYgKGNvdW50ID09IDApCisJCQkgICAgcmV0dXJuICZwb3M7CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChTVFJOQ01QKHB0ciwgImVuZGlmIiwgNSkgPT0gMCkKKwkJICAgIHsKKwkJCWlmIChjb3VudCA9PSAwKQorCQkJICAgIHJldHVybiAmcG9zOworCQkJY291bnQtLTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGlmIChTVFJOQ01QKHB0ciwgImlmIiwgMikgPT0gMCkKKwkJICAgIHsKKwkJCWlmIChjb3VudCA9PSAwKQorCQkJICAgIHJldHVybiAmcG9zOworCQkJY291bnQtLTsKKwkJICAgIH0KKwkJICAgIGVsc2UgaWYgKGluaXRjID09ICcjJyAmJiBTVFJOQ01QKHB0ciwgImVsIiwgMikgPT0gMCkKKwkJICAgIHsKKwkJCWlmIChjb3VudCA9PSAwKQorCQkJICAgIHJldHVybiAmcG9zOworCQkgICAgfQorCQkgICAgZWxzZSBpZiAoU1RSTkNNUChwdHIsICJlbmRpZiIsIDUpID09IDApCisJCQljb3VudCsrOworCQl9CisJICAgIH0KKwkgICAgcmV0dXJuIE5VTEw7CisJfQorICAgIH0KKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgLyogVGhpcyBpcyBqdXN0IGd1ZXNzaW5nOiB3aGVuICdyaWdodGxlZnQnIGlzIHNldCwgc2VhcmNoIGZvciBhIG1hY2hpbmcKKyAgICAgKiBwYXJlbi9icmFjZSBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLiAqLworICAgIGlmIChjdXJ3aW4tPndfcF9ybCAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikiKClbXXt9PD4iLCBpbml0YykgIT0gTlVMTCkKKwliYWNrd2FyZHMgPSAhYmFja3dhcmRzOworI2VuZGlmCisKKyAgICBkb19xdW90ZXMgPSAtMTsKKyAgICBzdGFydF9pbl9xdW90ZXMgPSBNQVlCRTsKKyAgICAvKiBiYWNrd2FyZCBzZWFyY2g6IENoZWNrIGlmIHRoaXMgbGluZSBjb250YWlucyBhIHNpbmdsZS1saW5lIGNvbW1lbnQgKi8KKyAgICBpZiAoYmFja3dhcmRzICYmIGNvbW1lbnRfZGlyKQorCWNvbW1lbnRfY29sID0gY2hlY2tfbGluZWNvbW1lbnQobGluZXApOworICAgIHdoaWxlICghZ290X2ludCkKKyAgICB7CisJLyoKKwkgKiBHbyB0byB0aGUgbmV4dCBwb3NpdGlvbiwgZm9yd2FyZCBvciBiYWNrd2FyZC4gV2UgY291bGQgdXNlCisJICogaW5jKCkgYW5kIGRlYygpIGhlcmUsIGJ1dCB0aGF0IGlzIG11Y2ggc2xvd2VyCisJICovCisJaWYgKGJhY2t3YXJkcykKKwl7CisJICAgIGlmIChwb3MuY29sID09IDApCQkvKiBhdCBzdGFydCBvZiBsaW5lLCBnbyB0byBwcmV2LiBvbmUgKi8KKwkgICAgeworCQlpZiAocG9zLmxudW0gPT0gMSkJLyogc3RhcnQgb2YgZmlsZSAqLworCQkgICAgYnJlYWs7CisJCS0tcG9zLmxudW07CisKKwkJaWYgKG1heHRyYXZlbCAmJiB0cmF2ZWxlZCsrID4gbWF4dHJhdmVsKQorCQkgICAgYnJlYWs7CisKKwkJbGluZXAgPSBtbF9nZXQocG9zLmxudW0pOworCQlwb3MuY29sID0gKGNvbG5yX1QpU1RSTEVOKGxpbmVwKTsgLyogcG9zLmNvbCBvbiB0cmFpbGluZyBOVUwgKi8KKwkJZG9fcXVvdGVzID0gLTE7CisJCWxpbmVfYnJlYWtjaGVjaygpOworCisJCS8qIENoZWNrIGlmIHRoaXMgbGluZSBjb250YWlucyBhIHNpbmdsZS1saW5lIGNvbW1lbnQgKi8KKwkJaWYgKGNvbW1lbnRfZGlyKQorCQkgICAgY29tbWVudF9jb2wgPSBjaGVja19saW5lY29tbWVudChsaW5lcCk7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS0tcG9zLmNvbDsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWlmIChoYXNfbWJ5dGUpCisJCSAgICBwb3MuY29sIC09ICgqbWJfaGVhZF9vZmYpKGxpbmVwLCBsaW5lcCArIHBvcy5jb2wpOworI2VuZGlmCisJICAgIH0KKwl9CisJZWxzZQkJCQkvKiBmb3J3YXJkIHNlYXJjaCAqLworCXsKKwkgICAgaWYgKGxpbmVwW3Bvcy5jb2xdID09IE5VTCkJLyogYXQgZW5kIG9mIGxpbmUsIGdvIHRvIG5leHQgb25lICovCisJICAgIHsKKwkJaWYgKHBvcy5sbnVtID09IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KSAvKiBlbmQgb2YgZmlsZSAqLworCQkgICAgYnJlYWs7CisJCSsrcG9zLmxudW07CisKKwkJaWYgKG1heHRyYXZlbCAmJiB0cmF2ZWxlZCsrID4gbWF4dHJhdmVsKQorCQkgICAgYnJlYWs7CisKKwkJbGluZXAgPSBtbF9nZXQocG9zLmxudW0pOworCQlwb3MuY29sID0gMDsKKwkJZG9fcXVvdGVzID0gLTE7CisJCWxpbmVfYnJlYWtjaGVjaygpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwkJaWYgKGhhc19tYnl0ZSkKKwkJICAgIHBvcy5jb2wgKz0gKCptYl9wdHIybGVuX2NoZWNrKShsaW5lcCArIHBvcy5jb2wpOworCQllbHNlCisjZW5kaWYKKwkJICAgICsrcG9zLmNvbDsKKwkgICAgfQorCX0KKworCS8qCisJICogSWYgRk1fQkxPQ0tTVE9QIGdpdmVuLCBzdG9wIGF0IGEgJ3snIG9yICd9JyBpbiBjb2x1bW4gMC4KKwkgKi8KKwlpZiAocG9zLmNvbCA9PSAwICYmIChmbGFncyAmIEZNX0JMT0NLU1RPUCkgJiYKKwkJCQkJIChsaW5lcFswXSA9PSAneycgfHwgbGluZXBbMF0gPT0gJ30nKSkKKwl7CisJICAgIGlmIChsaW5lcFswXSA9PSBmaW5kYyAmJiBjb3VudCA9PSAwKQkvKiBtYXRjaCEgKi8KKwkJcmV0dXJuICZwb3M7CisJICAgIGJyZWFrOwkJCQkJLyogb3V0IG9mIHNjb3BlICovCisJfQorCisJaWYgKGNvbW1lbnRfZGlyKQorCXsKKwkgICAgLyogTm90ZTogY29tbWVudHMgZG8gbm90IG5lc3QsIGFuZCB3ZSBpZ25vcmUgcXVvdGVzIGluIHRoZW0gKi8KKwkgICAgLyogVE9ETzogaWdub3JlIGNvbW1lbnQgYnJhY2tldHMgaW5zaWRlIHN0cmluZ3MgKi8KKwkgICAgaWYgKGNvbW1lbnRfZGlyID09IEZPUldBUkQpCisJICAgIHsKKwkJaWYgKGxpbmVwW3Bvcy5jb2xdID09ICcqJyAmJiBsaW5lcFtwb3MuY29sICsgMV0gPT0gJy8nKQorCQl7CisJCSAgICBwb3MuY29sKys7CisJCSAgICByZXR1cm4gJnBvczsKKwkJfQorCSAgICB9CisJICAgIGVsc2UgICAgLyogU2VhcmNoaW5nIGJhY2t3YXJkcyAqLworCSAgICB7CisJCS8qCisJCSAqIEEgY29tbWVudCBtYXkgY29udGFpbiAvICogb3IgLyAvLCBpdCBtYXkgYWxzbyBzdGFydCBvciBlbmQKKwkJICogd2l0aCAvICogLy4JSWdub3JlIGEgLyAqIGFmdGVyIC8gLy4KKwkJICovCisJCWlmIChwb3MuY29sID09IDApCisJCSAgICBjb250aW51ZTsKKwkJZWxzZSBpZiAoICBsaW5lcFtwb3MuY29sIC0gMV0gPT0gJy8nCisJCQkmJiBsaW5lcFtwb3MuY29sXSA9PSAnKicKKwkJCSYmIChpbnQpcG9zLmNvbCA8IGNvbW1lbnRfY29sKQorCQl7CisJCSAgICBjb3VudCsrOworCQkgICAgbWF0Y2hfcG9zID0gcG9zOworCQkgICAgbWF0Y2hfcG9zLmNvbC0tOworCQl9CisJCWVsc2UgaWYgKGxpbmVwW3Bvcy5jb2wgLSAxXSA9PSAnKicgJiYgbGluZXBbcG9zLmNvbF0gPT0gJy8nKQorCQl7CisJCSAgICBpZiAoY291bnQgPiAwKQorCQkJcG9zID0gbWF0Y2hfcG9zOworCQkgICAgZWxzZSBpZiAocG9zLmNvbCA+IDEgJiYgbGluZXBbcG9zLmNvbCAtIDJdID09ICcvJworCQkJCQkgICAgICAgJiYgKGludClwb3MuY29sIDw9IGNvbW1lbnRfY29sKQorCQkJcG9zLmNvbCAtPSAyOworCQkgICAgZWxzZSBpZiAoaWdub3JlX2NlbmQpCisJCQljb250aW51ZTsKKwkJICAgIGVsc2UKKwkJCXJldHVybiBOVUxMOworCQkgICAgcmV0dXJuICZwb3M7CisJCX0KKwkgICAgfQorCSAgICBjb250aW51ZTsKKwl9CisKKwkvKgorCSAqIElmIHNtYXJ0IG1hdGNoaW5nICgnY3BvcHRpb25zJyBkb2VzIG5vdCBjb250YWluICclJyksIGJyYWNlcyBpbnNpZGUKKwkgKiBvZiBxdW90ZXMgYXJlIGlnbm9yZWQsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGFuIGV2ZW4gbnVtYmVyIG9mCisJICogcXVvdGVzIGluIHRoZSBsaW5lLgorCSAqLworCWlmIChjcG9fbWF0Y2gpCisJICAgIGRvX3F1b3RlcyA9IDA7CisJZWxzZSBpZiAoZG9fcXVvdGVzID09IC0xKQorCXsKKwkgICAgLyoKKwkgICAgICogQ291bnQgdGhlIG51bWJlciBvZiBxdW90ZXMgaW4gdGhlIGxpbmUsIHNraXBwaW5nIFwiIGFuZCAnIicuCisJICAgICAqIFdhdGNoIG91dCBmb3IgIlxcIi4KKwkgICAgICovCisJICAgIGF0X3N0YXJ0ID0gZG9fcXVvdGVzOworCSAgICBmb3IgKHB0ciA9IGxpbmVwOyAqcHRyOyArK3B0cikKKwkgICAgeworCQlpZiAocHRyID09IGxpbmVwICsgcG9zLmNvbCArIGJhY2t3YXJkcykKKwkJICAgIGF0X3N0YXJ0ID0gKGRvX3F1b3RlcyAmIDEpOworCQlpZiAoKnB0ciA9PSAnIicKKwkJCSYmIChwdHIgPT0gbGluZXAgfHwgcHRyWy0xXSAhPSAnXCcnIHx8IHB0clsxXSAhPSAnXCcnKSkKKwkJICAgICsrZG9fcXVvdGVzOworCQlpZiAoKnB0ciA9PSAnXFwnICYmIHB0clsxXSAhPSBOVUwpCisJCSAgICArK3B0cjsKKwkgICAgfQorCSAgICBkb19xdW90ZXMgJj0gMTsJICAgIC8qIHJlc3VsdCBpcyAxIHdpdGggZXZlbiBudW1iZXIgb2YgcXVvdGVzICovCisKKwkgICAgLyoKKwkgICAgICogSWYgd2UgZmluZCBhbiB1bmV2ZW4gY291bnQsIGNoZWNrIGN1cnJlbnQgbGluZSBhbmQgcHJldmlvdXMKKwkgICAgICogb25lIGZvciBhICdcJyBhdCB0aGUgZW5kLgorCSAgICAgKi8KKwkgICAgaWYgKCFkb19xdW90ZXMpCisJICAgIHsKKwkJaW5xdW90ZSA9IEZBTFNFOworCQlpZiAocHRyWy0xXSA9PSAnXFwnKQorCQl7CisJCSAgICBkb19xdW90ZXMgPSAxOworCQkgICAgaWYgKHN0YXJ0X2luX3F1b3RlcyA9PSBNQVlCRSkKKwkJICAgIHsKKwkJCS8qIERvIHdlIG5lZWQgdG8gdXNlIGF0X3N0YXJ0IGhlcmU/ICovCisJCQlpbnF1b3RlID0gVFJVRTsKKwkJCXN0YXJ0X2luX3F1b3RlcyA9IFRSVUU7CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChiYWNrd2FyZHMpCisJCQlpbnF1b3RlID0gVFJVRTsKKwkJfQorCQlpZiAocG9zLmxudW0gPiAxKQorCQl7CisJCSAgICBwdHIgPSBtbF9nZXQocG9zLmxudW0gLSAxKTsKKwkJICAgIGlmICgqcHRyICYmICoocHRyICsgU1RSTEVOKHB0cikgLSAxKSA9PSAnXFwnKQorCQkgICAgeworCQkJZG9fcXVvdGVzID0gMTsKKwkJCWlmIChzdGFydF9pbl9xdW90ZXMgPT0gTUFZQkUpCisJCQl7CisJCQkgICAgaW5xdW90ZSA9IGF0X3N0YXJ0OworCQkJICAgIGlmIChpbnF1b3RlKQorCQkJCXN0YXJ0X2luX3F1b3RlcyA9IFRSVUU7CisJCQl9CisJCQllbHNlIGlmICghYmFja3dhcmRzKQorCQkJICAgIGlucXVvdGUgPSBUUlVFOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisJaWYgKHN0YXJ0X2luX3F1b3RlcyA9PSBNQVlCRSkKKwkgICAgc3RhcnRfaW5fcXVvdGVzID0gRkFMU0U7CisKKwkvKgorCSAqIElmICdzbWFydG1hdGNoJyBpcyBzZXQ6CisJICogICBUaGluZ3MgaW5zaWRlIHF1b3RlcyBhcmUgaWdub3JlZCBieSBzZXR0aW5nICdpbnF1b3RlJy4gIElmIHdlCisJICogICBmaW5kIGEgcXVvdGUgd2l0aG91dCBhIHByZWNlZGluZyAnXCcgaW52ZXJ0ICdpbnF1b3RlJy4gIEF0IHRoZQorCSAqICAgZW5kIG9mIGEgbGluZSBub3QgZW5kaW5nIGluICdcJyB3ZSByZXNldCAnaW5xdW90ZScuCisJICoKKwkgKiAgIEluIGxpbmVzIHdpdGggYW4gdW5ldmVuIG51bWJlciBvZiBxdW90ZXMgKHdpdGhvdXQgcHJlY2VkaW5nICdcJykKKwkgKiAgIHdlIGRvIG5vdCBrbm93IHdoaWNoIHBhcnQgdG8gaWdub3JlLiBUaGVyZWZvcmUgd2Ugb25seSBzZXQKKwkgKiAgIGlucXVvdGUgaWYgdGhlIG51bWJlciBvZiBxdW90ZXMgaW4gYSBsaW5lIGlzIGV2ZW4sIHVubGVzcyB0aGlzCisJICogICBsaW5lIG9yIHRoZSBwcmV2aW91cyBvbmUgZW5kcyBpbiBhICdcJy4gIENvbXBsaWNhdGVkLCBpc24ndCBpdD8KKwkgKi8KKwlzd2l0Y2ggKGMgPSBsaW5lcFtwb3MuY29sXSkKKwl7CisJY2FzZSBOVUw6CisJICAgIC8qIGF0IGVuZCBvZiBsaW5lIHdpdGhvdXQgdHJhaWxpbmcgYmFja3NsYXNoLCByZXNldCBpbnF1b3RlICovCisJICAgIGlmIChwb3MuY29sID09IDAgfHwgbGluZXBbcG9zLmNvbCAtIDFdICE9ICdcXCcpCisJICAgIHsKKwkJaW5xdW90ZSA9IEZBTFNFOworCQlzdGFydF9pbl9xdW90ZXMgPSBGQUxTRTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJyInOgorCSAgICAvKiBhIHF1b3RlIHRoYXQgaXMgcHJlY2VkZWQgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIGJhY2tzbGFzaGVzIGlzCisJICAgICAqIGlnbm9yZWQgKi8KKwkgICAgaWYgKGRvX3F1b3RlcykKKwkgICAgeworCQlpbnQgY29sOworCisJCWZvciAoY29sID0gcG9zLmNvbCAtIDE7IGNvbCA+PSAwOyAtLWNvbCkKKwkJICAgIGlmIChsaW5lcFtjb2xdICE9ICdcXCcpCisJCQlicmVhazsKKwkJaWYgKCgoKGludClwb3MuY29sIC0gMSAtIGNvbCkgJiAxKSA9PSAwKQorCQl7CisJCSAgICBpbnF1b3RlID0gIWlucXVvdGU7CisJCSAgICBzdGFydF9pbl9xdW90ZXMgPSBGQUxTRTsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCisJLyoKKwkgKiBJZiBzbWFydCBtYXRjaGluZyAoJ2Nwb3B0aW9ucycgZG9lcyBub3QgY29udGFpbiAnJScpOgorCSAqICAgU2tpcCB0aGluZ3MgaW4gc2luZ2xlIHF1b3RlczogJ3gnIG9yICdceCcuICBCZSBjYXJlZnVsIGZvciBzaW5nbGUKKwkgKiAgIHNpbmdsZSBxdW90ZXMsIGVnIGpvbidzLiAgVGhpbmdzIGxpa2UgJ1wyMzMnIG9yICdceDNmJyBhcmUgbm90CisJICogICBza2lwcGVkLCB0aGVyZSBpcyBuZXZlciBhIGJyYWNlIGluIHRoZW0uCisJICogICBJZ25vcmUgdGhpcyB3aGVuIGZpbmRpbmcgbWF0Y2hlcyBmb3IgYCcuCisJICovCisJY2FzZSAnXCcnOgorCSAgICBpZiAoIWNwb19tYXRjaCAmJiBpbml0YyAhPSAnXCcnICYmIGZpbmRjICE9ICdcJycpCisJICAgIHsKKwkJaWYgKGJhY2t3YXJkcykKKwkJeworCQkgICAgaWYgKHBvcy5jb2wgPiAxKQorCQkgICAgeworCQkJaWYgKGxpbmVwW3Bvcy5jb2wgLSAyXSA9PSAnXCcnKQorCQkJeworCQkJICAgIHBvcy5jb2wgLT0gMjsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCWVsc2UgaWYgKGxpbmVwW3Bvcy5jb2wgLSAyXSA9PSAnXFwnICYmCisJCQkJICAgIHBvcy5jb2wgPiAyICYmIGxpbmVwW3Bvcy5jb2wgLSAzXSA9PSAnXCcnKQorCQkJeworCQkJICAgIHBvcy5jb2wgLT0gMzsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCQllbHNlIGlmIChsaW5lcFtwb3MuY29sICsgMV0pCS8qIGZvcndhcmQgc2VhcmNoICovCisJCXsKKwkJICAgIGlmIChsaW5lcFtwb3MuY29sICsgMV0gPT0gJ1xcJyAmJgorCQkJICAgIGxpbmVwW3Bvcy5jb2wgKyAyXSAmJiBsaW5lcFtwb3MuY29sICsgM10gPT0gJ1wnJykKKwkJICAgIHsKKwkJCXBvcy5jb2wgKz0gMzsKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAgZWxzZSBpZiAobGluZXBbcG9zLmNvbCArIDJdID09ICdcJycpCisJCSAgICB7CisJCQlwb3MuY29sICs9IDI7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIC8qIEZBTExUSFJPVUdIICovCisKKwlkZWZhdWx0OgorI2lmZGVmIEZFQVRfTElTUAorCSAgICAvKiBGb3IgTGlzcCBza2lwIG92ZXIgYmFja3NsYXNoZWQgKCksIHt9IGFuZCBbXS4gKi8KKwkgICAgaWYgKGN1cmJ1Zi0+Yl9wX2xpc3AKKwkJICAgICYmIHZpbV9zdHJjaHIoKGNoYXJfdSAqKSIoKXt9W10iLCBjKSAhPSBOVUxMCisJCSAgICAmJiBwb3MuY29sID4gMAorCQkgICAgJiYgY2hlY2tfcHJldmNvbChsaW5lcCwgcG9zLmNvbCwgJ1xcJywgTlVMTCkpCisJCWJyZWFrOworI2VuZGlmCisKKwkgICAgLyogQ2hlY2sgZm9yIG1hdGNoIG91dHNpZGUgb2YgcXVvdGVzLCBhbmQgaW5zaWRlIG9mCisJICAgICAqIHF1b3RlcyB3aGVuIHRoZSBzdGFydCBpcyBhbHNvIGluc2lkZSBvZiBxdW90ZXMuICovCisJICAgIGlmICgoIWlucXVvdGUgfHwgc3RhcnRfaW5fcXVvdGVzID09IFRSVUUpCisJCSAgICAmJiAoYyA9PSBpbml0YyB8fCBjID09IGZpbmRjKSkKKwkgICAgeworCQlpbnQJY29sLCBic2xjbnQgPSAwOworCisJCWlmICghY3BvX2JzbCkKKwkJeworCQkgICAgZm9yIChjb2wgPSBwb3MuY29sOyBjaGVja19wcmV2Y29sKGxpbmVwLCBjb2wsICdcXCcsICZjb2wpOykKKwkJCWJzbGNudCsrOworCQl9CisJCS8qIE9ubHkgYWNjZXB0IGEgbWF0Y2ggd2hlbiAnTScgaXMgaW4gJ2Nwbycgb3Igd2hlbiBlY2FwaW5nIGlzCisJCSAqIHdoYXQgd2UgZXhwZWN0LiAqLworCQlpZiAoY3BvX2JzbCB8fCAoYnNsY250ICYgMSkgPT0gbWF0Y2hfZXNjYXBlZCkKKwkJeworCQkgICAgaWYgKGMgPT0gaW5pdGMpCisJCQljb3VudCsrOworCQkgICAgZWxzZQorCQkgICAgeworCQkJaWYgKGNvdW50ID09IDApCisJCQkgICAgcmV0dXJuICZwb3M7CisJCQljb3VudC0tOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKGNvbW1lbnRfZGlyID09IEJBQ0tXQVJEICYmIGNvdW50ID4gMCkKKyAgICB7CisJcG9zID0gbWF0Y2hfcG9zOworCXJldHVybiAmcG9zOworICAgIH0KKyAgICByZXR1cm4gKHBvc19UICopTlVMTDsJLyogbmV2ZXIgZm91bmQgaXQgKi8KK30KKworLyoKKyAqIENoZWNrIGlmIGxpbmVbXSBjb250YWlucyBhIC8gLyBjb21tZW50LgorICogUmV0dXJuIE1BWENPTCBpZiBub3QsIG90aGVyd2lzZSByZXR1cm4gdGhlIGNvbHVtbi4KKyAqIFRPRE86IHNraXAgc3RyaW5ncy4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NoZWNrX2xpbmVjb21tZW50KGxpbmUpCisgICAgY2hhcl91CSpsaW5lOworeworICAgIGNoYXJfdSAgKnA7CisKKyAgICBwID0gbGluZTsKKyAgICB3aGlsZSAoKHAgPSB2aW1fc3RyY2hyKHAsICcvJykpICE9IE5VTEwpCisgICAgeworCWlmIChwWzFdID09ICcvJykKKwkgICAgYnJlYWs7CisJKytwOworICAgIH0KKworICAgIGlmIChwID09IE5VTEwpCisJcmV0dXJuIE1BWENPTDsKKyAgICByZXR1cm4gKGludCkocCAtIGxpbmUpOworfQorCisvKgorICogTW92ZSBjdXJzb3IgYnJpZWZseSB0byBjaGFyYWN0ZXIgbWF0Y2hpbmcgdGhlIG9uZSB1bmRlciB0aGUgY3Vyc29yLgorICogVXNlZCBmb3IgSW5zZXJ0IG1vZGUgYW5kICJyIiBjb21tYW5kLgorICogU2hvdyB0aGUgbWF0Y2ggb25seSBpZiBpdCBpcyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4uCisgKiBJZiB0aGVyZSBpc24ndCBhIG1hdGNoLCB0aGVuIGJlZXAuCisgKi8KKyAgICB2b2lkCitzaG93bWF0Y2goYykKKyAgICBpbnQJCWM7CSAgICAvKiBjaGFyIHRvIHNob3cgbWF0Y2ggZm9yICovCit7CisgICAgcG9zX1QJKmxwb3MsIHNhdmVfY3Vyc29yOworICAgIHBvc19UCW1wb3M7CisgICAgY29sbnJfVAl2Y29sOworICAgIGxvbmcJc2F2ZV9zbzsKKyAgICBsb25nCXNhdmVfc2lzbzsKKyNpZmRlZiBDVVJTT1JfU0hBUEUKKyAgICBpbnQJCXNhdmVfc3RhdGU7CisjZW5kaWYKKyAgICBjb2xucl9UCXNhdmVfZG9sbGFyX3Zjb2w7CisgICAgY2hhcl91CSpwOworCisgICAgLyoKKyAgICAgKiBPbmx5IHNob3cgbWF0Y2ggZm9yIGNoYXJzIGluIHRoZSAnbWF0Y2hwYWlycycgb3B0aW9uLgorICAgICAqLworICAgIC8qICdtYXRjaHBhaXJzJyBpcyAieDp5LHg6eSIgKi8KKyAgICBmb3IgKHAgPSBjdXJidWYtPmJfcF9tcHM7ICpwICE9IE5VTDsgcCArPSAyKQorICAgIHsKKyNpZmRlZiBGRUFUX1JJR0hUTEVGVAorCWlmICgqcCA9PSBjICYmIChjdXJ3aW4tPndfcF9ybCBeIHBfcmkpKQorCSAgICBicmVhazsKKyNlbmRpZgorCXAgKz0gMjsKKwlpZiAoKnAgPT0gYworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJCSYmICEoY3Vyd2luLT53X3BfcmwgXiBwX3JpKQorI2VuZGlmCisJICAgKQorCSAgICBicmVhazsKKwlpZiAocFsxXSAhPSAnLCcpCisJICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoKGxwb3MgPSBmaW5kbWF0Y2goTlVMTCwgTlVMKSkgPT0gTlVMTCkJICAgIC8qIG5vIG1hdGNoLCBzbyBiZWVwICovCisJdmltX2JlZXAoKTsKKyAgICBlbHNlIGlmIChscG9zLT5sbnVtID49IGN1cndpbi0+d190b3BsaW5lKQorICAgIHsKKwlpZiAoIWN1cndpbi0+d19wX3dyYXApCisJICAgIGdldHZjb2woY3Vyd2luLCBscG9zLCBOVUxMLCAmdmNvbCwgTlVMTCk7CisJaWYgKGN1cndpbi0+d19wX3dyYXAgfHwgKHZjb2wgPj0gY3Vyd2luLT53X2xlZnRjb2wKKwkJCSAgICAgICAmJiB2Y29sIDwgY3Vyd2luLT53X2xlZnRjb2wgKyBXX1dJRFRIKGN1cndpbikpKQorCXsKKwkgICAgbXBvcyA9ICpscG9zOyAgICAvKiBzYXZlIHRoZSBwb3MsIHVwZGF0ZV9zY3JlZW4oKSBtYXkgY2hhbmdlIGl0ICovCisJICAgIHNhdmVfY3Vyc29yID0gY3Vyd2luLT53X2N1cnNvcjsKKwkgICAgc2F2ZV9zbyA9IHBfc287CisJICAgIHNhdmVfc2lzbyA9IHBfc2lzbzsKKwkgICAgLyogSGFuZGxlICIkIiBpbiAnY3BvJzogSWYgdGhlICcpJyBpcyB0eXBlZCBvbiB0b3Agb2YgdGhlICIkIiwKKwkgICAgICogc3RvcCBkaXNwbGF5aW5nIHRoZSAiJCIuICovCisJICAgIGlmIChkb2xsYXJfdmNvbCA+IDAgJiYgZG9sbGFyX3Zjb2wgPT0gY3Vyd2luLT53X3ZpcnRjb2wpCisJCWRvbGxhcl92Y29sID0gMDsKKwkgICAgKytjdXJ3aW4tPndfdmlydGNvbDsJLyogZG8gZGlzcGxheSAnKScganVzdCBiZWZvcmUgIiQiICovCisJICAgIHVwZGF0ZV9zY3JlZW4oVkFMSUQpOwkvKiBzaG93IHRoZSBuZXcgY2hhciBmaXJzdCAqLworCisJICAgIHNhdmVfZG9sbGFyX3Zjb2wgPSBkb2xsYXJfdmNvbDsKKyNpZmRlZiBDVVJTT1JfU0hBUEUKKwkgICAgc2F2ZV9zdGF0ZSA9IFN0YXRlOworCSAgICBTdGF0ZSA9IFNIT1dNQVRDSDsKKwkgICAgdWlfY3Vyc29yX3NoYXBlKCk7CQkvKiBtYXkgc2hvdyBkaWZmZXJlbnQgY3Vyc29yIHNoYXBlICovCisjZW5kaWYKKwkgICAgY3Vyd2luLT53X2N1cnNvciA9IG1wb3M7CS8qIG1vdmUgdG8gbWF0Y2hpbmcgY2hhciAqLworCSAgICBwX3NvID0gMDsJCQkvKiBkb24ndCB1c2UgJ3Njcm9sbG9mZicgaGVyZSAqLworCSAgICBwX3Npc28gPSAwOwkJCS8qIGRvbid0IHVzZSAnc2lkZXNjcm9sbG9mZicgaGVyZSAqLworCSAgICBzaG93cnVsZXIoRkFMU0UpOworCSAgICBzZXRjdXJzb3IoKTsKKwkgICAgY3Vyc29yX29uKCk7CQkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgY3Vyc29yIGlzIHNob3duICovCisJICAgIG91dF9mbHVzaCgpOworI2lmZGVmIEZFQVRfR1VJCisJICAgIGlmIChndWkuaW5fdXNlKQorCSAgICB7CisJCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKwkJZ3VpX21jaF9mbHVzaCgpOworCSAgICB9CisjZW5kaWYKKwkgICAgLyogUmVzdG9yZSBkb2xsYXJfdmNvbCgpLCBiZWNhdXNlIHNldGN1cnNvcigpIG1heSBjYWxsIGN1cnNfcm93cygpCisJICAgICAqIHdoaWNoIHJlc2V0cyBpdCBpZiB0aGUgbWF0Y2hpbmcgcG9zaXRpb24gaXMgaW4gYSBwcmV2aW91cyBsaW5lCisJICAgICAqIGFuZCBoYXMgYSBoaWdoZXIgY29sdW1uIG51bWJlci4gKi8KKwkgICAgZG9sbGFyX3Zjb2wgPSBzYXZlX2RvbGxhcl92Y29sOworCisJICAgIC8qCisJICAgICAqIGJyaWVmIHBhdXNlLCB1bmxlc3MgJ20nIGlzIHByZXNlbnQgaW4gJ2NwbycgYW5kIGEgY2hhcmFjdGVyIGlzCisJICAgICAqIGF2YWlsYWJsZS4KKwkgICAgICovCisJICAgIGlmICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fU0hPV01BVENIKSAhPSBOVUxMKQorCQl1aV9kZWxheShwX21hdCAqIDEwMEwsIFRSVUUpOworCSAgICBlbHNlIGlmICghY2hhcl9hdmFpbCgpKQorCQl1aV9kZWxheShwX21hdCAqIDEwMEwsIEZBTFNFKTsKKwkgICAgY3Vyd2luLT53X2N1cnNvciA9IHNhdmVfY3Vyc29yOwkvKiByZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLworCSAgICBwX3NvID0gc2F2ZV9zbzsKKwkgICAgcF9zaXNvID0gc2F2ZV9zaXNvOworI2lmZGVmIENVUlNPUl9TSEFQRQorCSAgICBTdGF0ZSA9IHNhdmVfc3RhdGU7CisJICAgIHVpX2N1cnNvcl9zaGFwZSgpOwkJLyogbWF5IHNob3cgZGlmZmVyZW50IGN1cnNvciBzaGFwZSAqLworI2VuZGlmCisJfQorICAgIH0KK30KKworLyoKKyAqIGZpbmRzZW50KGRpciwgY291bnQpIC0gRmluZCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc2VudGVuY2UgaW4gZGlyZWN0aW9uCisgKiAnZGlyJyBTZW50ZW5jZXMgYXJlIHN1cHBvc2VkIHRvIGVuZCBpbiAiLiIsICIhIiBvciAiPyIgZm9sbG93ZWQgYnkgd2hpdGUKKyAqIHNwYWNlIG9yIGEgbGluZSBicmVhay4gQWxzbyBzdG9wIGF0IGFuIGVtcHR5IGxpbmUuCisgKiBSZXR1cm4gT0sgaWYgdGhlIG5leHQgc2VudGVuY2Ugd2FzIGZvdW5kLgorICovCisgICAgaW50CitmaW5kc2VudChkaXIsIGNvdW50KQorICAgIGludAkJZGlyOworICAgIGxvbmcJY291bnQ7Cit7CisgICAgcG9zX1QJcG9zLCB0cG9zOworICAgIGludAkJYzsKKyAgICBpbnQJCSgqZnVuYykgX19BUkdTKChwb3NfVCAqKSk7CisgICAgaW50CQlzdGFydGxudW07CisgICAgaW50CQlub3NraXAgPSBGQUxTRTsJICAgIC8qIGRvIG5vdCBza2lwIGJsYW5rcyAqLworICAgIGludAkJY3BvX0o7CisKKyAgICBwb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworICAgIGlmIChkaXIgPT0gRk9SV0FSRCkKKwlmdW5jID0gaW5jbDsKKyAgICBlbHNlCisJZnVuYyA9IGRlY2w7CisKKyAgICB3aGlsZSAoY291bnQtLSkKKyAgICB7CisJLyoKKwkgKiBpZiBvbiBhbiBlbXB0eSBsaW5lLCBza2lwIHVwdG8gYSBub24tZW1wdHkgbGluZQorCSAqLworCWlmIChnY2hhcl9wb3MoJnBvcykgPT0gTlVMKQorCXsKKwkgICAgZG8KKwkJaWYgKCgqZnVuYykoJnBvcykgPT0gLTEpCisJCSAgICBicmVhazsKKwkgICAgd2hpbGUgKGdjaGFyX3BvcygmcG9zKSA9PSBOVUwpOworCSAgICBpZiAoZGlyID09IEZPUldBUkQpCisJCWdvdG8gZm91bmQ7CisJfQorCS8qCisJICogaWYgb24gdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoIG9yIGEgc2VjdGlvbiBhbmQgc2VhcmNoaW5nIGZvcndhcmQsCisJICogZ28gdG8gdGhlIG5leHQgbGluZQorCSAqLworCWVsc2UgaWYgKGRpciA9PSBGT1JXQVJEICYmIHBvcy5jb2wgPT0gMCAmJgorCQkJCQkJc3RhcnRQUyhwb3MubG51bSwgTlVMLCBGQUxTRSkpCisJeworCSAgICBpZiAocG9zLmxudW0gPT0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCXJldHVybiBGQUlMOworCSAgICArK3Bvcy5sbnVtOworCSAgICBnb3RvIGZvdW5kOworCX0KKwllbHNlIGlmIChkaXIgPT0gQkFDS1dBUkQpCisJICAgIGRlY2woJnBvcyk7CisKKwkvKiBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBub24tYmxhbmsgY2hhciAqLworCXdoaWxlICgoYyA9IGdjaGFyX3BvcygmcG9zKSkgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fAorCSAgICAgKGRpciA9PSBCQUNLV0FSRCAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikiLiE/KV1cIiciLCBjKSAhPSBOVUxMKSkKKwl7CisJICAgIGlmIChkZWNsKCZwb3MpID09IC0xKQorCQlicmVhazsKKwkgICAgLyogd2hlbiBnb2luZyBmb3J3YXJkOiBTdG9wIGluIGZyb250IG9mIGVtcHR5IGxpbmUgKi8KKwkgICAgaWYgKGxpbmVlbXB0eShwb3MubG51bSkgJiYgZGlyID09IEZPUldBUkQpCisJICAgIHsKKwkJaW5jbCgmcG9zKTsKKwkJZ290byBmb3VuZDsKKwkgICAgfQorCX0KKworCS8qIHJlbWVtYmVyIHRoZSBsaW5lIHdoZXJlIHRoZSBzZWFyY2ggc3RhcnRlZCAqLworCXN0YXJ0bG51bSA9IHBvcy5sbnVtOworCWNwb19KID0gdmltX3N0cmNocihwX2NwbywgQ1BPX0VORE9GU0VOVCkgIT0gTlVMTDsKKworCWZvciAoOzspCQkvKiBmaW5kIGVuZCBvZiBzZW50ZW5jZSAqLworCXsKKwkgICAgYyA9IGdjaGFyX3BvcygmcG9zKTsKKwkgICAgaWYgKGMgPT0gTlVMIHx8IChwb3MuY29sID09IDAgJiYgc3RhcnRQUyhwb3MubG51bSwgTlVMLCBGQUxTRSkpKQorCSAgICB7CisJCWlmIChkaXIgPT0gQkFDS1dBUkQgJiYgcG9zLmxudW0gIT0gc3RhcnRsbnVtKQorCQkgICAgKytwb3MubG51bTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKGMgPT0gJy4nIHx8IGMgPT0gJyEnIHx8IGMgPT0gJz8nKQorCSAgICB7CisJCXRwb3MgPSBwb3M7CisJCWRvCisJCSAgICBpZiAoKGMgPSBpbmMoJnRwb3MpKSA9PSAtMSkKKwkJCWJyZWFrOworCQl3aGlsZSAodmltX3N0cmNocigoY2hhcl91ICopIildXCInIiwgYyA9IGdjaGFyX3BvcygmdHBvcykpCisJCQkhPSBOVUxMKTsKKwkJaWYgKGMgPT0gLTEgIHx8ICghY3BvX0ogJiYgKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JykpIHx8IGMgPT0gTlVMCisJCSAgICB8fCAoY3BvX0ogJiYgKGMgPT0gJyAnICYmIGluYygmdHBvcykgPj0gMAorCQkJICAgICAgJiYgZ2NoYXJfcG9zKCZ0cG9zKSA9PSAnICcpKSkKKwkJeworCQkgICAgcG9zID0gdHBvczsKKwkJICAgIGlmIChnY2hhcl9wb3MoJnBvcykgPT0gTlVMKSAvKiBza2lwIE5VTCBhdCBFT0wgKi8KKwkJCWluYygmcG9zKTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgaWYgKCgqZnVuYykoJnBvcykgPT0gLTEpCisJICAgIHsKKwkJaWYgKGNvdW50KQorCQkgICAgcmV0dXJuIEZBSUw7CisJCW5vc2tpcCA9IFRSVUU7CisJCWJyZWFrOworCSAgICB9CisJfQorZm91bmQ6CisJICAgIC8qIHNraXAgd2hpdGUgc3BhY2UgKi8KKwl3aGlsZSAoIW5vc2tpcCAmJiAoKGMgPSBnY2hhcl9wb3MoJnBvcykpID09ICcgJyB8fCBjID09ICdcdCcpKQorCSAgICBpZiAoaW5jbCgmcG9zKSA9PSAtMSkKKwkJYnJlYWs7CisgICAgfQorCisgICAgc2V0cGNtYXJrKCk7CisgICAgY3Vyd2luLT53X2N1cnNvciA9IHBvczsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBmaW5kcGFyKGRpciwgY291bnQsIHdoYXQpIC0gRmluZCB0aGUgbmV4dCBwYXJhZ3JhcGggaW4gZGlyZWN0aW9uICdkaXInCisgKiBQYXJhZ3JhcGhzIGFyZSBjdXJyZW50bHkgc3VwcG9zZWQgdG8gYmUgc2VwYXJhdGVkIGJ5IGVtcHR5IGxpbmVzLgorICogUmV0dXJuIFRSVUUgaWYgdGhlIG5leHQgcGFyYWdyYXBoIHdhcyBmb3VuZC4KKyAqIElmICd3aGF0JyBpcyAneycgb3IgJ30nIHdlIGdvIHRvIHRoZSBuZXh0IHNlY3Rpb24uCisgKiBJZiAnYm90aCcgaXMgVFJVRSBhbHNvIHN0b3AgYXQgJ30nLgorICovCisgICAgaW50CitmaW5kcGFyKG9hcCwgZGlyLCBjb3VudCwgd2hhdCwgYm90aCkKKyAgICBvcGFyZ19UCSAgICAqb2FwOworICAgIGludAkJICAgIGRpcjsKKyAgICBsb25nCSAgICBjb3VudDsKKyAgICBpbnQJCSAgICB3aGF0OworICAgIGludAkJICAgIGJvdGg7Cit7CisgICAgbGluZW5yX1QJY3VycjsKKyAgICBpbnQJCWRpZF9za2lwOyAgIC8qIFRSVUUgYWZ0ZXIgc2VwYXJhdGluZyBsaW5lcyBoYXZlIGJlZW4gc2tpcHBlZCAqLworICAgIGludAkJZmlyc3Q7CSAgICAvKiBUUlVFIG9uIGZpcnN0IGxpbmUgKi8KKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBsaW5lbnJfVAlmb2xkX2ZpcnN0OyAvKiBmaXJzdCBsaW5lIG9mIGEgY2xvc2VkIGZvbGQgKi8KKyAgICBsaW5lbnJfVAlmb2xkX2xhc3Q7ICAvKiBsYXN0IGxpbmUgb2YgYSBjbG9zZWQgZm9sZCAqLworICAgIGludAkJZm9sZF9za2lwcGVkOyAvKiBUUlVFIGlmIGEgY2xvc2VkIGZvbGQgd2FzIHNraXBwZWQgdGhpcworCQkJCSBpdGVyYXRpb24gKi8KKyNlbmRpZgorCisgICAgY3VyciA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKKworICAgIHdoaWxlIChjb3VudC0tKQorICAgIHsKKwlkaWRfc2tpcCA9IEZBTFNFOworCWZvciAoZmlyc3QgPSBUUlVFOyA7IGZpcnN0ID0gRkFMU0UpCisJeworCSAgICBpZiAoKm1sX2dldChjdXJyKSAhPSBOVUwpCisJCWRpZF9za2lwID0gVFJVRTsKKworI2lmZGVmIEZFQVRfRk9MRElORworCSAgICAvKiBza2lwIGZvbGRlZCBsaW5lcyAqLworCSAgICBmb2xkX3NraXBwZWQgPSBGQUxTRTsKKwkgICAgaWYgKGZpcnN0ICYmIGhhc0ZvbGRpbmcoY3VyciwgJmZvbGRfZmlyc3QsICZmb2xkX2xhc3QpKQorCSAgICB7CisJCWN1cnIgPSAoKGRpciA+IDApID8gZm9sZF9sYXN0IDogZm9sZF9maXJzdCkgKyBkaXI7CisJCWZvbGRfc2tpcHBlZCA9IFRSVUU7CisJICAgIH0KKyNlbmRpZgorCisJICAgIGlmICghZmlyc3QgJiYgZGlkX3NraXAgJiYgc3RhcnRQUyhjdXJyLCB3aGF0LCBib3RoKSkKKwkJYnJlYWs7CisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgaWYgKGZvbGRfc2tpcHBlZCkKKwkJY3VyciAtPSBkaXI7CisjZW5kaWYKKwkgICAgaWYgKChjdXJyICs9IGRpcikgPCAxIHx8IGN1cnIgPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkgICAgeworCQlpZiAoY291bnQpCisJCSAgICByZXR1cm4gRkFMU0U7CisJCWN1cnIgLT0gZGlyOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0cGNtYXJrKCk7CisgICAgaWYgKGJvdGggJiYgKm1sX2dldChjdXJyKSA9PSAnfScpCS8qIGluY2x1ZGUgbGluZSB3aXRoICd9JyAqLworCSsrY3VycjsKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJyOworICAgIGlmIChjdXJyID09IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ICYmIHdoYXQgIT0gJ30nKQorICAgIHsKKwlpZiAoKGN1cndpbi0+d19jdXJzb3IuY29sID0gKGNvbG5yX1QpU1RSTEVOKG1sX2dldChjdXJyKSkpICE9IDApCisJeworCSAgICAtLWN1cndpbi0+d19jdXJzb3IuY29sOworCSAgICBvYXAtPmluY2x1c2l2ZSA9IFRSVUU7CisJfQorICAgIH0KKyAgICBlbHNlCisJY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICogY2hlY2sgaWYgdGhlIHN0cmluZyAncycgaXMgYSBucm9mZiBtYWNybyB0aGF0IGlzIGluIG9wdGlvbiAnb3B0JworICovCisgICAgc3RhdGljIGludAoraW5tYWNybyhvcHQsIHMpCisgICAgY2hhcl91CSpvcHQ7CisgICAgY2hhcl91CSpzOworeworICAgIGNoYXJfdQkqbWFjcm87CisKKyAgICBmb3IgKG1hY3JvID0gb3B0OyBtYWNyb1swXTsgKyttYWNybykKKyAgICB7CisJLyogQWNjZXB0IHR3byBjaGFyYWN0ZXJzIGluIHRoZSBvcHRpb24gYmVpbmcgZXF1YWwgdG8gdHdvIGNoYXJhY3RlcnMKKwkgKiBpbiB0aGUgbGluZS4gIEEgc3BhY2UgaW4gdGhlIG9wdGlvbiBtYXRjaGVzIHdpdGggYSBzcGFjZSBpbiB0aGUKKwkgKiBsaW5lIG9yIHRoZSBsaW5lIGhhdmluZyBlbmRlZC4gKi8KKwlpZiAoICAgICAgIChtYWNyb1swXSA9PSBzWzBdCisJCSAgICB8fCAobWFjcm9bMF0gPT0gJyAnCisJCQkmJiAoc1swXSA9PSBOVUwgfHwgc1swXSA9PSAnICcpKSkKKwkJJiYgKG1hY3JvWzFdID09IHNbMV0KKwkJICAgIHx8ICgobWFjcm9bMV0gPT0gTlVMIHx8IG1hY3JvWzFdID09ICcgJykKKwkJCSYmIChzWzBdID09IE5VTCB8fCBzWzFdID09IE5VTCB8fCBzWzFdID09ICcgJykpKSkKKwkgICAgYnJlYWs7CisJKyttYWNybzsKKwlpZiAobWFjcm9bMF0gPT0gTlVMKQorCSAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIChtYWNyb1swXSAhPSBOVUwpOworfQorCisvKgorICogc3RhcnRQUzogcmV0dXJuIFRSVUUgaWYgbGluZSAnbG51bScgaXMgdGhlIHN0YXJ0IG9mIGEgc2VjdGlvbiBvciBwYXJhZ3JhcGguCisgKiBJZiAncGFyYScgaXMgJ3snIG9yICd9JyBvbmx5IGNoZWNrIGZvciBzZWN0aW9ucy4KKyAqIElmICdib3RoJyBpcyBUUlVFIGFsc28gc3RvcCBhdCAnfScKKyAqLworICAgIGludAorc3RhcnRQUyhsbnVtLCBwYXJhLCBib3RoKQorICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQlwYXJhOworICAgIGludAkJYm90aDsKK3sKKyAgICBjaGFyX3UJKnM7CisKKyAgICBzID0gbWxfZ2V0KGxudW0pOworICAgIGlmICgqcyA9PSBwYXJhIHx8ICpzID09ICdcZicgfHwgKGJvdGggJiYgKnMgPT0gJ30nKSkKKwlyZXR1cm4gVFJVRTsKKyAgICBpZiAoKnMgPT0gJy4nICYmIChpbm1hY3JvKHBfc2VjdGlvbnMsIHMgKyAxKSB8fAorCQkJCQkgICAoIXBhcmEgJiYgaW5tYWNybyhwX3BhcmEsIHMgKyAxKSkpKQorCXJldHVybiBUUlVFOworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgZG8gdGhlIHdvcmQgc2VhcmNoZXMgcGVyZm9ybWVkIGJ5IHRoZSAndycsICdXJywKKyAqICdiJywgJ0InLCAnZScsIGFuZCAnRScgY29tbWFuZHMuCisgKi8KKworLyoKKyAqIFRvIHBlcmZvcm0gdGhlc2Ugc2VhcmNoZXMsIGNoYXJhY3RlcnMgYXJlIHBsYWNlZCBpbnRvIG9uZSBvZiB0aHJlZQorICogY2xhc3NlcywgYW5kIHRyYW5zaXRpb25zIGJldHdlZW4gY2xhc3NlcyBkZXRlcm1pbmUgd29yZCBib3VuZGFyaWVzLgorICoKKyAqIFRoZSBjbGFzc2VzIGFyZToKKyAqCisgKiAwIC0gd2hpdGUgc3BhY2UKKyAqIDEgLSBwdW5jdHVhdGlvbgorICogMiBvciBoaWdoZXIgLSBrZXl3b3JkIGNoYXJhY3RlcnMgKGxldHRlcnMsIGRpZ2l0cyBhbmQgdW5kZXJzY29yZSkKKyAqLworCitzdGF0aWMgaW50CWNsc19iaWd3b3JkOwkvKiBUUlVFIGZvciAiVyIsICJCIiBvciAiRSIgKi8KKworLyoKKyAqIGNscygpIC0gcmV0dXJucyB0aGUgY2xhc3Mgb2YgY2hhcmFjdGVyIGF0IGN1cndpbi0+d19jdXJzb3IKKyAqCisgKiBJZiBhICdXJywgJ0InLCBvciAnRScgbW90aW9uIGlzIGJlaW5nIGRvbmUgKGNsc19iaWd3b3JkID09IFRSVUUpLCBjaGFycworICogZnJvbSBjbGFzcyAyIGFuZCBoaWdoZXIgYXJlIHJlcG9ydGVkIGFzIGNsYXNzIDEgc2luY2Ugb25seSB3aGl0ZSBzcGFjZQorICogYm91bmRhcmllcyBhcmUgb2YgaW50ZXJlc3QuCisgKi8KKyAgICBzdGF0aWMgaW50CitjbHMoKQoreworICAgIGludAkgICAgYzsKKworICAgIGMgPSBnY2hhcl9jdXJzb3IoKTsKKyNpZmRlZiBGRUFUX0ZLTUFQCS8qIHdoZW4gJ2FrbScgKEZhcnNpIG1vZGUpLCB0YWtlIGNhcmUgb2YgRmFyc2kgYmxhbmsgKi8KKyAgICBpZiAocF9hbHRrZXltYXAgJiYgYyA9PSBGX0JMQU5LKQorCXJldHVybiAwOworI2VuZGlmCisgICAgaWYgKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09IE5VTCkKKwlyZXR1cm4gMDsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGVuY19kYmNzICE9IDAgJiYgYyA+IDB4RkYpCisgICAgeworCS8qIElmIGNsc19iaWd3b3JkLCByZXBvcnQgbXVsdGktYnl0ZSBjaGFycyBhcyBjbGFzcyAxLiAqLworCWlmIChlbmNfZGJjcyA9PSBEQkNTX0tPUiAmJiBjbHNfYmlnd29yZCkKKwkgICAgcmV0dXJuIDE7CisKKwkvKiBwcm9jZXNzIGNvZGUgbGVhZGluZy90cmFpbGluZyBieXRlcyAqLworCXJldHVybiBkYmNzX2NsYXNzKCgodW5zaWduZWQpYyA+PiA4KSwgKGMgJiAweEZGKSk7CisgICAgfQorICAgIGlmIChlbmNfdXRmOCkKKyAgICB7CisJYyA9IHV0Zl9jbGFzcyhjKTsKKwlpZiAoYyAhPSAwICYmIGNsc19iaWd3b3JkKQorCSAgICByZXR1cm4gMTsKKwlyZXR1cm4gYzsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIElmIGNsc19iaWd3b3JkIGlzIFRSVUUsIHJlcG9ydCBhbGwgbm9uLWJsYW5rcyBhcyBjbGFzcyAxLiAqLworICAgIGlmIChjbHNfYmlnd29yZCkKKwlyZXR1cm4gMTsKKworICAgIGlmICh2aW1faXN3b3JkYyhjKSkKKwlyZXR1cm4gMjsKKyAgICByZXR1cm4gMTsKK30KKworCisvKgorICogZndkX3dvcmQoY291bnQsIHR5cGUsIGVvbCkgLSBtb3ZlIGZvcndhcmQgb25lIHdvcmQKKyAqCisgKiBSZXR1cm5zIEZBSUwgaWYgdGhlIGN1cnNvciB3YXMgYWxyZWFkeSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICogSWYgZW9sIGlzIFRSVUUsIGxhc3Qgd29yZCBzdG9wcyBhdCBlbmQgb2YgbGluZSAoZm9yIG9wZXJhdG9ycykuCisgKi8KKyAgICBpbnQKK2Z3ZF93b3JkKGNvdW50LCBiaWd3b3JkLCBlb2wpCisgICAgbG9uZwljb3VudDsKKyAgICBpbnQJCWJpZ3dvcmQ7ICAgIC8qICJXIiwgIkUiIG9yICJCIiAqLworICAgIGludAkJZW9sOworeworICAgIGludAkJc2NsYXNzOwkgICAgLyogc3RhcnRpbmcgY2xhc3MgKi8KKyAgICBpbnQJCWk7CisgICAgaW50CQlsYXN0X2xpbmU7CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworI2VuZGlmCisgICAgY2xzX2JpZ3dvcmQgPSBiaWd3b3JkOworICAgIHdoaWxlICgtLWNvdW50ID49IDApCisgICAgeworI2lmZGVmIEZFQVRfRk9MRElORworCS8qIFdoZW4gaW5zaWRlIGEgcmFuZ2Ugb2YgZm9sZGVkIGxpbmVzLCBtb3ZlIHRvIHRoZSBsYXN0IGNoYXIgb2YgdGhlCisJICogbGFzdCBsaW5lLiAqLworCWlmIChoYXNGb2xkaW5nKGN1cndpbi0+d19jdXJzb3IubG51bSwgTlVMTCwgJmN1cndpbi0+d19jdXJzb3IubG51bSkpCisJICAgIGNvbGFkdmFuY2UoKGNvbG5yX1QpTUFYQ09MKTsKKyNlbmRpZgorCXNjbGFzcyA9IGNscygpOworCisJLyoKKwkgKiBXZSBhbHdheXMgbW92ZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCB1bmxlc3Mgb24gdGhlIGxhc3QKKwkgKiBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlci4KKwkgKi8KKwlsYXN0X2xpbmUgPSAoY3Vyd2luLT53X2N1cnNvci5sbnVtID09IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KTsKKwlpID0gaW5jX2N1cnNvcigpOworCWlmIChpID09IC0xIHx8IChpID49IDEgJiYgbGFzdF9saW5lKSkgLyogc3RhcnRlZCBhdCBsYXN0IGNoYXIgaW4gZmlsZSAqLworCSAgICByZXR1cm4gRkFJTDsKKwlpZiAoaSA9PSAxICYmIGVvbCAmJiBjb3VudCA9PSAwKSAgICAgIC8qIHN0YXJ0ZWQgYXQgbGFzdCBjaGFyIGluIGxpbmUgKi8KKwkgICAgcmV0dXJuIE9LOworCisJLyoKKwkgKiBHbyBvbmUgY2hhciBwYXN0IGVuZCBvZiBjdXJyZW50IHdvcmQgKGlmIGFueSkKKwkgKi8KKwlpZiAoc2NsYXNzICE9IDApCisJICAgIHdoaWxlIChjbHMoKSA9PSBzY2xhc3MpCisJICAgIHsKKwkJaSA9IGluY19jdXJzb3IoKTsKKwkJaWYgKGkgPT0gLTEgfHwgKGkgPj0gMSAmJiBlb2wgJiYgY291bnQgPT0gMCkpCisJCSAgICByZXR1cm4gT0s7CisJICAgIH0KKworCS8qCisJICogZ28gdG8gbmV4dCBub24td2hpdGUKKwkgKi8KKwl3aGlsZSAoY2xzKCkgPT0gMCkKKwl7CisJICAgIC8qCisJICAgICAqIFdlJ2xsIHN0b3AgaWYgd2UgbGFuZCBvbiBhIGJsYW5rIGxpbmUKKwkgICAgICovCisJICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA9PSAwICYmICptbF9nZXRfY3VybGluZSgpID09IE5VTCkKKwkJYnJlYWs7CisKKwkgICAgaSA9IGluY19jdXJzb3IoKTsKKwkgICAgaWYgKGkgPT0gLTEgfHwgKGkgPj0gMSAmJiBlb2wgJiYgY291bnQgPT0gMCkpCisJCXJldHVybiBPSzsKKwl9CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIGJja193b3JkKCkgLSBtb3ZlIGJhY2t3YXJkICdjb3VudCcgd29yZHMKKyAqCisgKiBJZiBzdG9wIGlzIFRSVUUgYW5kIHdlIGFyZSBhbHJlYWR5IG9uIHRoZSBzdGFydCBvZiBhIHdvcmQsIG1vdmUgb25lIGxlc3MuCisgKgorICogUmV0dXJucyBGQUlMIGlmIHRvcCBvZiB0aGUgZmlsZSB3YXMgcmVhY2hlZC4KKyAqLworICAgIGludAorYmNrX3dvcmQoY291bnQsIGJpZ3dvcmQsIHN0b3ApCisgICAgbG9uZwljb3VudDsKKyAgICBpbnQJCWJpZ3dvcmQ7CisgICAgaW50CQlzdG9wOworeworICAgIGludAkJc2NsYXNzOwkgICAgLyogc3RhcnRpbmcgY2xhc3MgKi8KKworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CisjZW5kaWYKKyAgICBjbHNfYmlnd29yZCA9IGJpZ3dvcmQ7CisgICAgd2hpbGUgKC0tY291bnQgPj0gMCkKKyAgICB7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJLyogV2hlbiBpbnNpZGUgYSByYW5nZSBvZiBmb2xkZWQgbGluZXMsIG1vdmUgdG8gdGhlIGZpcnN0IGNoYXIgb2YgdGhlCisJICogZmlyc3QgbGluZS4gKi8KKwlpZiAoaGFzRm9sZGluZyhjdXJ3aW4tPndfY3Vyc29yLmxudW0sICZjdXJ3aW4tPndfY3Vyc29yLmxudW0sIE5VTEwpKQorCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisjZW5kaWYKKwlzY2xhc3MgPSBjbHMoKTsKKwlpZiAoZGVjX2N1cnNvcigpID09IC0xKQkJLyogc3RhcnRlZCBhdCBzdGFydCBvZiBmaWxlICovCisJICAgIHJldHVybiBGQUlMOworCisJaWYgKCFzdG9wIHx8IHNjbGFzcyA9PSBjbHMoKSB8fCBzY2xhc3MgPT0gMCkKKwl7CisJICAgIC8qCisJICAgICAqIFNraXAgd2hpdGUgc3BhY2UgYmVmb3JlIHRoZSB3b3JkLgorCSAgICAgKiBTdG9wIG9uIGFuIGVtcHR5IGxpbmUuCisJICAgICAqLworCSAgICB3aGlsZSAoY2xzKCkgPT0gMCkKKwkgICAgeworCQlpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPT0gMAorCQkJCSAgICAgICYmIGxpbmVlbXB0eShjdXJ3aW4tPndfY3Vyc29yLmxudW0pKQorCQkgICAgZ290byBmaW5pc2hlZDsKKwkJaWYgKGRlY19jdXJzb3IoKSA9PSAtMSkgLyogaGl0IHN0YXJ0IG9mIGZpbGUsIHN0b3AgaGVyZSAqLworCQkgICAgcmV0dXJuIE9LOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogTW92ZSBiYWNrd2FyZCB0byBzdGFydCBvZiB0aGlzIHdvcmQuCisJICAgICAqLworCSAgICBpZiAoc2tpcF9jaGFycyhjbHMoKSwgQkFDS1dBUkQpKQorCQlyZXR1cm4gT0s7CisJfQorCisJaW5jX2N1cnNvcigpOwkJCS8qIG92ZXJzaG90IC0gZm9yd2FyZCBvbmUgKi8KK2ZpbmlzaGVkOgorCXN0b3AgPSBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogZW5kX3dvcmQoKSAtIG1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgd29yZAorICoKKyAqIFRoZXJlIGlzIGFuIGFwcGFyZW50IGJ1ZyBpbiB0aGUgJ2UnIG1vdGlvbiBvZiB0aGUgcmVhbCB2aS4gQXQgbGVhc3Qgb24gdGhlCisgKiBTeXN0ZW0gViBSZWxlYXNlIDMgdmVyc2lvbiBmb3IgdGhlIDgwMzg2LiBVbmxpa2UgJ2InIGFuZCAndycsIHRoZSAnZScKKyAqIG1vdGlvbiBjcm9zc2VzIGJsYW5rIGxpbmVzLiBXaGVuIHRoZSByZWFsIHZpIGNyb3NzZXMgYSBibGFuayBsaW5lIGluIGFuCisgKiAnZScgbW90aW9uLCB0aGUgY3Vyc29yIGlzIHBsYWNlZCBvbiB0aGUgRklSU1QgY2hhcmFjdGVyIG9mIHRoZSBuZXh0CisgKiBub24tYmxhbmsgbGluZS4gVGhlICdFJyBjb21tYW5kLCBob3dldmVyLCB3b3JrcyBjb3JyZWN0bHkuIFNpbmNlIHRoaXMKKyAqIGFwcGVhcnMgdG8gYmUgYSBidWcsIEkgaGF2ZSBub3QgZHVwbGljYXRlZCBpdCBoZXJlLgorICoKKyAqIFJldHVybnMgRkFJTCBpZiBlbmQgb2YgdGhlIGZpbGUgd2FzIHJlYWNoZWQuCisgKgorICogSWYgc3RvcCBpcyBUUlVFIGFuZCB3ZSBhcmUgYWxyZWFkeSBvbiB0aGUgZW5kIG9mIGEgd29yZCwgbW92ZSBvbmUgbGVzcy4KKyAqIElmIGVtcHR5IGlzIFRSVUUgc3RvcCBvbiBhbiBlbXB0eSBsaW5lLgorICovCisgICAgaW50CitlbmRfd29yZChjb3VudCwgYmlnd29yZCwgc3RvcCwgZW1wdHkpCisgICAgbG9uZwljb3VudDsKKyAgICBpbnQJCWJpZ3dvcmQ7CisgICAgaW50CQlzdG9wOworICAgIGludAkJZW1wdHk7Cit7CisgICAgaW50CQlzY2xhc3M7CSAgICAvKiBzdGFydGluZyBjbGFzcyAqLworCisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorICAgIGN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorICAgIGNsc19iaWd3b3JkID0gYmlnd29yZDsKKyAgICB3aGlsZSAoLS1jb3VudCA+PSAwKQorICAgIHsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkvKiBXaGVuIGluc2lkZSBhIHJhbmdlIG9mIGZvbGRlZCBsaW5lcywgbW92ZSB0byB0aGUgbGFzdCBjaGFyIG9mIHRoZQorCSAqIGxhc3QgbGluZS4gKi8KKwlpZiAoaGFzRm9sZGluZyhjdXJ3aW4tPndfY3Vyc29yLmxudW0sIE5VTEwsICZjdXJ3aW4tPndfY3Vyc29yLmxudW0pKQorCSAgICBjb2xhZHZhbmNlKChjb2xucl9UKU1BWENPTCk7CisjZW5kaWYKKwlzY2xhc3MgPSBjbHMoKTsKKwlpZiAoaW5jX2N1cnNvcigpID09IC0xKQorCSAgICByZXR1cm4gRkFJTDsKKworCS8qCisJICogSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIHdlIGp1c3QgaGF2ZSB0byBtb3ZlIHRvIHRoZSBlbmQKKwkgKiBvZiBpdC4KKwkgKi8KKwlpZiAoY2xzKCkgPT0gc2NsYXNzICYmIHNjbGFzcyAhPSAwKQorCXsKKwkgICAgLyoKKwkgICAgICogTW92ZSBmb3J3YXJkIHRvIGVuZCBvZiB0aGUgY3VycmVudCB3b3JkCisJICAgICAqLworCSAgICBpZiAoc2tpcF9jaGFycyhzY2xhc3MsIEZPUldBUkQpKQorCQlyZXR1cm4gRkFJTDsKKwl9CisJZWxzZSBpZiAoIXN0b3AgfHwgc2NsYXNzID09IDApCisJeworCSAgICAvKgorCSAgICAgKiBXZSB3ZXJlIGF0IHRoZSBlbmQgb2YgYSB3b3JkLiBHbyB0byB0aGUgZW5kIG9mIHRoZSBuZXh0IHdvcmQuCisJICAgICAqIEZpcnN0IHNraXAgd2hpdGUgc3BhY2UsIGlmICdlbXB0eScgaXMgVFJVRSwgc3RvcCBhdCBlbXB0eSBsaW5lLgorCSAgICAgKi8KKwkgICAgd2hpbGUgKGNscygpID09IDApCisJICAgIHsKKwkJaWYgKGVtcHR5ICYmIGN1cndpbi0+d19jdXJzb3IuY29sID09IDAKKwkJCQkJICAmJiBsaW5lZW1wdHkoY3Vyd2luLT53X2N1cnNvci5sbnVtKSkKKwkJICAgIGdvdG8gZmluaXNoZWQ7CisJCWlmIChpbmNfY3Vyc29yKCkgPT0gLTEpCSAgICAvKiBoaXQgZW5kIG9mIGZpbGUsIHN0b3AgaGVyZSAqLworCQkgICAgcmV0dXJuIEZBSUw7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBNb3ZlIGZvcndhcmQgdG8gdGhlIGVuZCBvZiB0aGlzIHdvcmQuCisJICAgICAqLworCSAgICBpZiAoc2tpcF9jaGFycyhjbHMoKSwgRk9SV0FSRCkpCisJCXJldHVybiBGQUlMOworCX0KKwlkZWNfY3Vyc29yKCk7CQkJLyogb3ZlcnNob3QgLSBvbmUgY2hhciBiYWNrd2FyZCAqLworZmluaXNoZWQ6CisJc3RvcCA9IEZBTFNFOwkJCS8qIHdlIG1vdmUgb25seSBvbmUgd29yZCBsZXNzICovCisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworLyoKKyAqIE1vdmUgYmFjayB0byB0aGUgZW5kIG9mIHRoZSB3b3JkLgorICoKKyAqIFJldHVybnMgRkFJTCBpZiBzdGFydCBvZiB0aGUgZmlsZSB3YXMgcmVhY2hlZC4KKyAqLworICAgIGludAorYmNrZW5kX3dvcmQoY291bnQsIGJpZ3dvcmQsIGVvbCkKKyAgICBsb25nCWNvdW50OworICAgIGludAkJYmlnd29yZDsgICAgLyogVFJVRSBmb3IgIkIiICovCisgICAgaW50CQllb2w7CSAgICAvKiBUUlVFOiBzdG9wIGF0IGVuZCBvZiBsaW5lLiAqLworeworICAgIGludAkJc2NsYXNzOwkgICAgLyogc3RhcnRpbmcgY2xhc3MgKi8KKyAgICBpbnQJCWk7CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworI2VuZGlmCisgICAgY2xzX2JpZ3dvcmQgPSBiaWd3b3JkOworICAgIHdoaWxlICgtLWNvdW50ID49IDApCisgICAgeworCXNjbGFzcyA9IGNscygpOworCWlmICgoaSA9IGRlY19jdXJzb3IoKSkgPT0gLTEpCisJICAgIHJldHVybiBGQUlMOworCWlmIChlb2wgJiYgaSA9PSAxKQorCSAgICByZXR1cm4gT0s7CisKKwkvKgorCSAqIE1vdmUgYmFja3dhcmQgdG8gYmVmb3JlIHRoZSBzdGFydCBvZiB0aGlzIHdvcmQuCisJICovCisJaWYgKHNjbGFzcyAhPSAwKQorCXsKKwkgICAgd2hpbGUgKGNscygpID09IHNjbGFzcykKKwkJaWYgKChpID0gZGVjX2N1cnNvcigpKSA9PSAtMSB8fCAoZW9sICYmIGkgPT0gMSkpCisJCSAgICByZXR1cm4gT0s7CisJfQorCisJLyoKKwkgKiBNb3ZlIGJhY2t3YXJkIHRvIGVuZCBvZiB0aGUgcHJldmlvdXMgd29yZAorCSAqLworCXdoaWxlIChjbHMoKSA9PSAwKQorCXsKKwkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IuY29sID09IDAgJiYgbGluZWVtcHR5KGN1cndpbi0+d19jdXJzb3IubG51bSkpCisJCWJyZWFrOworCSAgICBpZiAoKGkgPSBkZWNfY3Vyc29yKCkpID09IC0xIHx8IChlb2wgJiYgaSA9PSAxKSkKKwkJcmV0dXJuIE9LOworCX0KKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogU2tpcCBhIHJvdyBvZiBjaGFyYWN0ZXJzIG9mIHRoZSBzYW1lIGNsYXNzLgorICogUmV0dXJuIFRSVUUgd2hlbiBlbmQtb2YtZmlsZSByZWFjaGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKi8KKyAgICBzdGF0aWMgaW50Citza2lwX2NoYXJzKGNjbGFzcywgZGlyKQorICAgIGludAkJY2NsYXNzOworICAgIGludAkJZGlyOworeworICAgIHdoaWxlIChjbHMoKSA9PSBjY2xhc3MpCisJaWYgKChkaXIgPT0gRk9SV0FSRCA/IGluY19jdXJzb3IoKSA6IGRlY19jdXJzb3IoKSkgPT0gLTEpCisJICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiBGQUxTRTsKK30KKworI2lmZGVmIEZFQVRfVEVYVE9CSgorLyoKKyAqIEdvIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSB3b3JkIG9yIHRoZSBzdGFydCBvZiB3aGl0ZSBzcGFjZQorICovCisgICAgc3RhdGljIHZvaWQKK2JhY2tfaW5fbGluZSgpCit7CisgICAgaW50CQlzY2xhc3M7CQkgICAgLyogc3RhcnRpbmcgY2xhc3MgKi8KKworICAgIHNjbGFzcyA9IGNscygpOworICAgIGZvciAoOzspCisgICAgeworCWlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA9PSAwKQkgICAgLyogc3RvcCBhdCBzdGFydCBvZiBsaW5lICovCisJICAgIGJyZWFrOworCWRlY19jdXJzb3IoKTsKKwlpZiAoY2xzKCkgIT0gc2NsYXNzKQkJICAgIC8qIHN0b3AgYXQgc3RhcnQgb2Ygd29yZCAqLworCXsKKwkgICAgaW5jX2N1cnNvcigpOworCSAgICBicmVhazsKKwl9CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK2ZpbmRfZmlyc3RfYmxhbmsocG9zcCkKKyAgICBwb3NfVCAgICAqcG9zcDsKK3sKKyAgICBpbnQJICAgIGM7CisKKyAgICB3aGlsZSAoZGVjbChwb3NwKSAhPSAtMSkKKyAgICB7CisJYyA9IGdjaGFyX3Bvcyhwb3NwKTsKKwlpZiAoIXZpbV9pc3doaXRlKGMpKQorCXsKKwkgICAgaW5jbChwb3NwKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KK30KKworLyoKKyAqIFNraXAgY291bnQvMiBzZW50ZW5jZXMgYW5kIGNvdW50LzIgc2VwYXJhdGluZyB3aGl0ZSBzcGFjZXMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZmluZHNlbnRfZm9yd2FyZChjb3VudCwgYXRfc3RhcnRfc2VudCkKKyAgICBsb25nICAgIGNvdW50OworICAgIGludAkgICAgYXRfc3RhcnRfc2VudDsJLyogY3Vyc29yIGlzIGF0IHN0YXJ0IG9mIHNlbnRlbmNlICovCit7CisgICAgd2hpbGUgKGNvdW50LS0pCisgICAgeworCWZpbmRzZW50KEZPUldBUkQsIDFMKTsKKwlpZiAoYXRfc3RhcnRfc2VudCkKKwkgICAgZmluZF9maXJzdF9ibGFuaygmY3Vyd2luLT53X2N1cnNvcik7CisJaWYgKGNvdW50ID09IDAgfHwgYXRfc3RhcnRfc2VudCkKKwkgICAgZGVjbCgmY3Vyd2luLT53X2N1cnNvcik7CisJYXRfc3RhcnRfc2VudCA9ICFhdF9zdGFydF9zZW50OworICAgIH0KK30KKworLyoKKyAqIEZpbmQgd29yZCB1bmRlciBjdXJzb3IsIGN1cnNvciBhdCBlbmQuCisgKiBVc2VkIHdoaWxlIGFuIG9wZXJhdG9yIGlzIHBlbmRpbmcsIGFuZCBpbiBWaXN1YWwgbW9kZS4KKyAqLworICAgIGludAorY3VycmVudF93b3JkKG9hcCwgY291bnQsIGluY2x1ZGUsIGJpZ3dvcmQpCisgICAgb3BhcmdfVAkqb2FwOworICAgIGxvbmcJY291bnQ7CisgICAgaW50CQlpbmNsdWRlOwkvKiBUUlVFOiBpbmNsdWRlIHdvcmQgYW5kIHdoaXRlIHNwYWNlICovCisgICAgaW50CQliaWd3b3JkOwkvKiBGQUxTRSA9PSB3b3JkLCBUUlVFID09IFdPUkQgKi8KK3sKKyAgICBwb3NfVAlzdGFydF9wb3M7CisgICAgcG9zX1QJcG9zOworICAgIGludAkJaW5jbHVzaXZlID0gVFJVRTsKKyAgICBpbnQJCWluY2x1ZGVfd2hpdGUgPSBGQUxTRTsKKworICAgIGNsc19iaWd3b3JkID0gYmlnd29yZDsKKworI2lmZGVmIEZFQVRfVklTVUFMCisgICAgLyogQ29ycmVjdCBjdXJzb3Igd2hlbiAnc2VsZWN0aW9uJyBpcyBleGNsdXNpdmUgKi8KKyAgICBpZiAoVklzdWFsX2FjdGl2ZSAmJiAqcF9zZWwgPT0gJ2UnICYmIGx0KFZJc3VhbCwgY3Vyd2luLT53X2N1cnNvcikpCisJZGVjX2N1cnNvcigpOworCisgICAgLyoKKyAgICAgKiBXaGVuIFZpc3VhbCBtb2RlIGlzIG5vdCBhY3RpdmUsIG9yIHdoZW4gdGhlIFZJc3VhbCBhcmVhIGlzIG9ubHkgb25lCisgICAgICogY2hhcmFjdGVyLCBzZWxlY3QgdGhlIHdvcmQgYW5kL29yIHdoaXRlIHNwYWNlIHVuZGVyIHRoZSBjdXJzb3IuCisgICAgICovCisgICAgaWYgKCFWSXN1YWxfYWN0aXZlIHx8IGVxdWFscG9zKGN1cndpbi0+d19jdXJzb3IsIFZJc3VhbCkpCisjZW5kaWYKKyAgICB7CisJLyoKKwkgKiBHbyB0byBzdGFydCBvZiBjdXJyZW50IHdvcmQgb3Igd2hpdGUgc3BhY2UuCisJICovCisJYmFja19pbl9saW5lKCk7CisJc3RhcnRfcG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKworCS8qCisJICogSWYgdGhlIHN0YXJ0IGlzIG9uIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2Ugc2hvdWxkIGJlIGluY2x1ZGVkCisJICogKCIJd29yZCIpLCBvciBzdGFydCBpcyBub3Qgb24gd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBzaG91bGQKKwkgKiBub3QgYmUgaW5jbHVkZWQgKCJ3b3JkIiksIGZpbmQgZW5kIG9mIHdvcmQuCisJICovCisJaWYgKChjbHMoKSA9PSAwKSA9PSBpbmNsdWRlKQorCXsKKwkgICAgaWYgKGVuZF93b3JkKDFMLCBiaWd3b3JkLCBUUlVFLCBUUlVFKSA9PSBGQUlMKQorCQlyZXR1cm4gRkFJTDsKKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogSWYgdGhlIHN0YXJ0IGlzIG5vdCBvbiB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIHNob3VsZCBiZQorCSAgICAgKiBpbmNsdWRlZCAoIndvcmQJICIpLCBvciBzdGFydCBpcyBvbiB3aGl0ZSBzcGFjZSBhbmQgd2hpdGUKKwkgICAgICogc3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCAoIgkgIiksIGZpbmQgc3RhcnQgb2Ygd29yZC4KKwkgICAgICogSWYgd2UgZW5kIHVwIGluIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIG5leHQgbGluZSAoc2luZ2xlIGNoYXIKKwkgICAgICogd29yZCkgYmFjayB1cCB0byBlbmQgb2YgdGhlIGxpbmUuCisJICAgICAqLworCSAgICBmd2Rfd29yZCgxTCwgYmlnd29yZCwgVFJVRSk7CisJICAgIGlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCA9PSAwKQorCQlkZWNsKCZjdXJ3aW4tPndfY3Vyc29yKTsKKwkgICAgZWxzZQorCQlvbmVsZWZ0KCk7CisKKwkgICAgaWYgKGluY2x1ZGUpCisJCWluY2x1ZGVfd2hpdGUgPSBUUlVFOworCX0KKworI2lmZGVmIEZFQVRfVklTVUFMCisJaWYgKFZJc3VhbF9hY3RpdmUpCisJeworCSAgICAvKiBzaG91bGQgZG8gc29tZXRoaW5nIHdoZW4gaW5jbHVzaXZlID09IEZBTFNFICEgKi8KKwkgICAgVklzdWFsID0gc3RhcnRfcG9zOworCSAgICByZWRyYXdfY3VyYnVmX2xhdGVyKElOVkVSVEVEKTsJLyogdXBkYXRlIHRoZSBpbnZlcnNpb24gKi8KKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBvYXAtPnN0YXJ0ID0gc3RhcnRfcG9zOworCSAgICBvYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisJfQorCS0tY291bnQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXaGVuIGNvdW50IGlzIHN0aWxsID4gMCwgZXh0ZW5kIHdpdGggbW9yZSBvYmplY3RzLgorICAgICAqLworICAgIHdoaWxlIChjb3VudCA+IDApCisgICAgeworCWluY2x1c2l2ZSA9IFRSVUU7CisjaWZkZWYgRkVBVF9WSVNVQUwKKwlpZiAoVklzdWFsX2FjdGl2ZSAmJiBsdChjdXJ3aW4tPndfY3Vyc29yLCBWSXN1YWwpKQorCXsKKwkgICAgLyoKKwkgICAgICogSW4gVmlzdWFsIG1vZGUsIHdpdGggY3Vyc29yIGF0IHN0YXJ0OiBtb3ZlIGN1cnNvciBiYWNrLgorCSAgICAgKi8KKwkgICAgaWYgKGRlY2woJmN1cndpbi0+d19jdXJzb3IpID09IC0xKQorCQlyZXR1cm4gRkFJTDsKKwkgICAgaWYgKGluY2x1ZGUgIT0gKGNscygpICE9IDApKQorCSAgICB7CisJCWlmIChiY2tfd29yZCgxTCwgYmlnd29yZCwgVFJVRSkgPT0gRkFJTCkKKwkJICAgIHJldHVybiBGQUlMOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoYmNrZW5kX3dvcmQoMUwsIGJpZ3dvcmQsIFRSVUUpID09IEZBSUwpCisJCSAgICByZXR1cm4gRkFJTDsKKwkJKHZvaWQpaW5jbCgmY3Vyd2luLT53X2N1cnNvcik7CisJICAgIH0KKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICAvKgorCSAgICAgKiBNb3ZlIGN1cnNvciBmb3J3YXJkIG9uZSB3b3JkIGFuZC9vciB3aGl0ZSBhcmVhLgorCSAgICAgKi8KKwkgICAgaWYgKGluY2woJmN1cndpbi0+d19jdXJzb3IpID09IC0xKQorCQlyZXR1cm4gRkFJTDsKKwkgICAgaWYgKGluY2x1ZGUgIT0gKGNscygpID09IDApKQorCSAgICB7CisJCWlmIChmd2Rfd29yZCgxTCwgYmlnd29yZCwgVFJVRSkgPT0gRkFJTCkKKwkJICAgIHJldHVybiBGQUlMOworCQkvKgorCQkgKiBJZiBlbmQgaXMganVzdCBwYXN0IGEgbmV3LWxpbmUsIHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZQorCQkgKiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9uIHRoZSBsaW5lCisJCSAqLworCQlpZiAob25lbGVmdCgpID09IEZBSUwpCS8qIHB1dCBjdXJzb3Igb24gbGFzdCBjaGFyIG9mIHdoaXRlICovCisJCSAgICBpbmNsdXNpdmUgPSBGQUxTRTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKGVuZF93b3JkKDFMLCBiaWd3b3JkLCBUUlVFLCBUUlVFKSA9PSBGQUlMKQorCQkgICAgcmV0dXJuIEZBSUw7CisJICAgIH0KKwl9CisJLS1jb3VudDsKKyAgICB9CisKKyAgICBpZiAoaW5jbHVkZV93aGl0ZSAmJiBjbHMoKSAhPSAwKQorICAgIHsKKwkvKgorCSAqIElmIHdlIGRvbid0IGluY2x1ZGUgd2hpdGUgc3BhY2UgYXQgdGhlIGVuZCwgbW92ZSB0aGUgc3RhcnQKKwkgKiB0byBpbmNsdWRlIHNvbWUgd2hpdGUgc3BhY2UgdGhlcmUuIFRoaXMgbWFrZXMgImRhdyIgd29yaworCSAqIGJldHRlciBvbiB0aGUgbGFzdCB3b3JkIGluIGEgc2VudGVuY2UgKGFuZCAiMmRhdyIgb24gbGFzdC1idXQtb25lCisJICogd29yZCkuICBCdXQgZG9uJ3QgZGVsZXRlIHdoaXRlIHNwYWNlIGF0IHN0YXJ0IG9mIGxpbmUgKGluZGVudCkuCisJICovCisJcG9zID0gY3Vyd2luLT53X2N1cnNvcjsJLyogc2F2ZSBjdXJzb3IgcG9zaXRpb24gKi8KKwljdXJ3aW4tPndfY3Vyc29yID0gc3RhcnRfcG9zOworCWlmIChvbmVsZWZ0KCkgPT0gT0spCisJeworCSAgICBiYWNrX2luX2xpbmUoKTsKKwkgICAgaWYgKGNscygpID09IDAgJiYgY3Vyd2luLT53X2N1cnNvci5jb2wgPiAwKQorCSAgICB7CisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJaWYgKFZJc3VhbF9hY3RpdmUpCisJCSAgICBWSXN1YWwgPSBjdXJ3aW4tPndfY3Vyc29yOworCQllbHNlCisjZW5kaWYKKwkJICAgIG9hcC0+c3RhcnQgPSBjdXJ3aW4tPndfY3Vyc29yOworCSAgICB9CisJfQorCWN1cndpbi0+d19jdXJzb3IgPSBwb3M7CS8qIHB1dCBjdXJzb3IgYmFjayBhdCBlbmQgKi8KKyAgICB9CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmIChWSXN1YWxfYWN0aXZlKQorICAgIHsKKwlpZiAoKnBfc2VsID09ICdlJyAmJiBpbmNsdXNpdmUgJiYgbHRvcmVxKFZJc3VhbCwgY3Vyd2luLT53X2N1cnNvcikpCisJICAgIGluY19jdXJzb3IoKTsKKwlpZiAoVklzdWFsX21vZGUgPT0gJ1YnKQorCXsKKwkgICAgVklzdWFsX21vZGUgPSAndic7CisJICAgIHJlZHJhd19jbWRsaW5lID0gVFJVRTsJCS8qIHNob3cgbW9kZSBsYXRlciAqLworCX0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisJb2FwLT5pbmNsdXNpdmUgPSBpbmNsdXNpdmU7CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBGaW5kIHNlbnRlbmNlKHMpIHVuZGVyIHRoZSBjdXJzb3IsIGN1cnNvciBhdCBlbmQuCisgKiBXaGVuIFZpc3VhbCBhY3RpdmUsIGV4dGVuZCBpdCBieSBvbmUgb3IgbW9yZSBzZW50ZW5jZXMuCisgKi8KKyAgICBpbnQKK2N1cnJlbnRfc2VudChvYXAsIGNvdW50LCBpbmNsdWRlKQorICAgIG9wYXJnX1QJKm9hcDsKKyAgICBsb25nCWNvdW50OworICAgIGludAkJaW5jbHVkZTsKK3sKKyAgICBwb3NfVAlzdGFydF9wb3M7CisgICAgcG9zX1QJcG9zOworICAgIGludAkJc3RhcnRfYmxhbms7CisgICAgaW50CQljOworICAgIGludAkJYXRfc3RhcnRfc2VudDsKKyAgICBsb25nCW5jb3VudDsKKworICAgIHN0YXJ0X3BvcyA9IGN1cndpbi0+d19jdXJzb3I7CisgICAgcG9zID0gc3RhcnRfcG9zOworICAgIGZpbmRzZW50KEZPUldBUkQsIDFMKTsJLyogRmluZCBzdGFydCBvZiBuZXh0IHNlbnRlbmNlLiAqLworCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICAvKgorICAgICAqIFdoZW4gdmlzdWFsIGFyZWEgaXMgYmlnZ2VyIHRoYW4gb25lIGNoYXJhY3RlcjogRXh0ZW5kIGl0LgorICAgICAqLworICAgIGlmIChWSXN1YWxfYWN0aXZlICYmICFlcXVhbHBvcyhzdGFydF9wb3MsIFZJc3VhbCkpCisgICAgeworZXh0ZW5kOgorCWlmIChsdChzdGFydF9wb3MsIFZJc3VhbCkpCisJeworCSAgICAvKgorCSAgICAgKiBDdXJzb3IgYXQgc3RhcnQgb2YgVmlzdWFsIGFyZWEuCisJICAgICAqIEZpbmQgb3V0IHdoZXJlIHdlIGFyZToKKwkgICAgICogLSBpbiB0aGUgd2hpdGUgc3BhY2UgYmVmb3JlIGEgc2VudGVuY2UKKwkgICAgICogLSBpbiBhIHNlbnRlbmNlIG9yIGp1c3QgYWZ0ZXIgaXQKKwkgICAgICogLSBhdCB0aGUgc3RhcnQgb2YgYSBzZW50ZW5jZQorCSAgICAgKi8KKwkgICAgYXRfc3RhcnRfc2VudCA9IFRSVUU7CisJICAgIGRlY2woJnBvcyk7CisJICAgIHdoaWxlIChsdChwb3MsIGN1cndpbi0+d19jdXJzb3IpKQorCSAgICB7CisJCWMgPSBnY2hhcl9wb3MoJnBvcyk7CisJCWlmICghdmltX2lzd2hpdGUoYykpCisJCXsKKwkJICAgIGF0X3N0YXJ0X3NlbnQgPSBGQUxTRTsKKwkJICAgIGJyZWFrOworCQl9CisJCWluY2woJnBvcyk7CisJICAgIH0KKwkgICAgaWYgKCFhdF9zdGFydF9zZW50KQorCSAgICB7CisJCWZpbmRzZW50KEJBQ0tXQVJELCAxTCk7CisJCWlmIChlcXVhbHBvcyhjdXJ3aW4tPndfY3Vyc29yLCBzdGFydF9wb3MpKQorCQkgICAgYXRfc3RhcnRfc2VudCA9IFRSVUU7ICAvKiBleGFjdGx5IGF0IHN0YXJ0IG9mIHNlbnRlbmNlICovCisJCWVsc2UKKwkJICAgIC8qIGluc2lkZSBhIHNlbnRlbmNlLCBnbyB0byBpdHMgZW5kIChzdGFydCBvZiBuZXh0KSAqLworCQkgICAgZmluZHNlbnQoRk9SV0FSRCwgMUwpOworCSAgICB9CisJICAgIGlmIChpbmNsdWRlKQkvKiAiYXMiIGdldHMgdHdpY2UgYXMgbXVjaCBhcyAiaXMiICovCisJCWNvdW50ICo9IDI7CisJICAgIHdoaWxlIChjb3VudC0tKQorCSAgICB7CisJCWlmIChhdF9zdGFydF9zZW50KQorCQkgICAgZmluZF9maXJzdF9ibGFuaygmY3Vyd2luLT53X2N1cnNvcik7CisJCWMgPSBnY2hhcl9jdXJzb3IoKTsKKwkJaWYgKCFhdF9zdGFydF9zZW50IHx8ICghaW5jbHVkZSAmJiAhdmltX2lzd2hpdGUoYykpKQorCQkgICAgZmluZHNlbnQoQkFDS1dBUkQsIDFMKTsKKwkJYXRfc3RhcnRfc2VudCA9ICFhdF9zdGFydF9zZW50OworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIC8qCisJICAgICAqIEN1cnNvciBhdCBlbmQgb2YgVmlzdWFsIGFyZWEuCisJICAgICAqIEZpbmQgb3V0IHdoZXJlIHdlIGFyZToKKwkgICAgICogLSBqdXN0IGJlZm9yZSBhIHNlbnRlbmNlCisJICAgICAqIC0ganVzdCBiZWZvcmUgb3IgaW4gdGhlIHdoaXRlIHNwYWNlIGJlZm9yZSBhIHNlbnRlbmNlCisJICAgICAqIC0gaW4gYSBzZW50ZW5jZQorCSAgICAgKi8KKwkgICAgaW5jbCgmcG9zKTsKKwkgICAgYXRfc3RhcnRfc2VudCA9IFRSVUU7CisJICAgIGlmICghZXF1YWxwb3MocG9zLCBjdXJ3aW4tPndfY3Vyc29yKSkgLyogbm90IGp1c3QgYmVmb3JlIGEgc2VudGVuY2UgKi8KKwkgICAgeworCQlhdF9zdGFydF9zZW50ID0gRkFMU0U7CisJCXdoaWxlIChsdChwb3MsIGN1cndpbi0+d19jdXJzb3IpKQorCQl7CisJCSAgICBjID0gZ2NoYXJfcG9zKCZwb3MpOworCQkgICAgaWYgKCF2aW1faXN3aGl0ZShjKSkKKwkJICAgIHsKKwkJCWF0X3N0YXJ0X3NlbnQgPSBUUlVFOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBpbmNsKCZwb3MpOworCQl9CisJCWlmIChhdF9zdGFydF9zZW50KQkvKiBpbiB0aGUgc2VudGVuY2UgKi8KKwkJICAgIGZpbmRzZW50KEJBQ0tXQVJELCAxTCk7CisJCWVsc2UJCS8qIGluL2JlZm9yZSB3aGl0ZSBiZWZvcmUgYSBzZW50ZW5jZSAqLworCQkgICAgY3Vyd2luLT53X2N1cnNvciA9IHN0YXJ0X3BvczsKKwkgICAgfQorCisJICAgIGlmIChpbmNsdWRlKQkvKiAiYXMiIGdldHMgdHdpY2UgYXMgbXVjaCBhcyAiaXMiICovCisJCWNvdW50ICo9IDI7CisJICAgIGZpbmRzZW50X2ZvcndhcmQoY291bnQsIGF0X3N0YXJ0X3NlbnQpOworCSAgICBpZiAoKnBfc2VsID09ICdlJykKKwkJKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwl9CisJcmV0dXJuIE9LOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBJZiBjdXJzb3Igc3RhcnRlZCBvbiBibGFuaywgY2hlY2sgaWYgaXQgaXMganVzdCBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZQorICAgICAqIG5leHQgc2VudGVuY2UuCisgICAgICovCisgICAgd2hpbGUgKGMgPSBnY2hhcl9wb3MoJnBvcyksIHZpbV9pc3doaXRlKGMpKQkvKiB2aW1faXN3aGl0ZSgpIGlzIGEgbWFjcm8gKi8KKwlpbmNsKCZwb3MpOworICAgIGlmIChlcXVhbHBvcyhwb3MsIGN1cndpbi0+d19jdXJzb3IpKQorICAgIHsKKwlzdGFydF9ibGFuayA9IFRSVUU7CisJZmluZF9maXJzdF9ibGFuaygmc3RhcnRfcG9zKTsJLyogZ28gYmFjayB0byBmaXJzdCBibGFuayAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworCXN0YXJ0X2JsYW5rID0gRkFMU0U7CisJZmluZHNlbnQoQkFDS1dBUkQsIDFMKTsKKwlzdGFydF9wb3MgPSBjdXJ3aW4tPndfY3Vyc29yOworICAgIH0KKyAgICBpZiAoaW5jbHVkZSkKKwluY291bnQgPSBjb3VudCAqIDI7CisgICAgZWxzZQorICAgIHsKKwluY291bnQgPSBjb3VudDsKKwlpZiAoc3RhcnRfYmxhbmspCisJICAgIC0tbmNvdW50OworICAgIH0KKyAgICBpZiAobmNvdW50KQorCWZpbmRzZW50X2ZvcndhcmQobmNvdW50LCBUUlVFKTsKKyAgICBlbHNlCisJZGVjbCgmY3Vyd2luLT53X2N1cnNvcik7CisKKyAgICBpZiAoaW5jbHVkZSkKKyAgICB7CisJLyoKKwkgKiBJZiB0aGUgYmxhbmsgaW4gZnJvbnQgb2YgdGhlIHNlbnRlbmNlIGlzIGluY2x1ZGVkLCBleGNsdWRlIHRoZQorCSAqIGJsYW5rcyBhdCB0aGUgZW5kIG9mIHRoZSBzZW50ZW5jZSwgZ28gYmFjayB0byB0aGUgZmlyc3QgYmxhbmsuCisJICogSWYgdGhlcmUgYXJlIG5vIHRyYWlsaW5nIGJsYW5rcywgdHJ5IHRvIGluY2x1ZGUgbGVhZGluZyBibGFua3MuCisJICovCisJaWYgKHN0YXJ0X2JsYW5rKQorCXsKKwkgICAgZmluZF9maXJzdF9ibGFuaygmY3Vyd2luLT53X2N1cnNvcik7CisJICAgIGMgPSBnY2hhcl9wb3MoJmN1cndpbi0+d19jdXJzb3IpOwkvKiB2aW1faXN3aGl0ZSgpIGlzIGEgbWFjcm8gKi8KKwkgICAgaWYgKHZpbV9pc3doaXRlKGMpKQorCQlkZWNsKCZjdXJ3aW4tPndfY3Vyc29yKTsKKwl9CisJZWxzZSBpZiAoYyA9IGdjaGFyX2N1cnNvcigpLCAhdmltX2lzd2hpdGUoYykpCisJICAgIGZpbmRfZmlyc3RfYmxhbmsoJnN0YXJ0X3Bvcyk7CisgICAgfQorCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKyAgICB7CisJLyogYXZvaWQgZ2V0dGluZyBzdHVjayB3aXRoICJpcyIgb24gYSBzaW5nbGUgc3BhY2UgYmVmb3JlIGEgc2VudC4gKi8KKwlpZiAoZXF1YWxwb3Moc3RhcnRfcG9zLCBjdXJ3aW4tPndfY3Vyc29yKSkKKwkgICAgZ290byBleHRlbmQ7CisJaWYgKCpwX3NlbCA9PSAnZScpCisJICAgICsrY3Vyd2luLT53X2N1cnNvci5jb2w7CisJVklzdWFsID0gc3RhcnRfcG9zOworCVZJc3VhbF9tb2RlID0gJ3YnOworCXJlZHJhd19jdXJidWZfbGF0ZXIoSU5WRVJURUQpOwkvKiB1cGRhdGUgdGhlIGludmVyc2lvbiAqLworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJLyogaW5jbHVkZSBhIG5ld2xpbmUgYWZ0ZXIgdGhlIHNlbnRlbmNlLCBpZiB0aGVyZSBpcyBvbmUgKi8KKwlpZiAoaW5jbCgmY3Vyd2luLT53X2N1cnNvcikgPT0gLTEpCisJICAgIG9hcC0+aW5jbHVzaXZlID0gVFJVRTsKKwllbHNlCisJICAgIG9hcC0+aW5jbHVzaXZlID0gRkFMU0U7CisJb2FwLT5zdGFydCA9IHN0YXJ0X3BvczsKKwlvYXAtPm1vdGlvbl90eXBlID0gTUNIQVI7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworICAgIGludAorY3VycmVudF9ibG9jayhvYXAsIGNvdW50LCBpbmNsdWRlLCB3aGF0LCBvdGhlcikKKyAgICBvcGFyZ19UCSpvYXA7CisgICAgbG9uZwljb3VudDsKKyAgICBpbnQJCWluY2x1ZGU7CS8qIFRSVUUgPT0gaW5jbHVkZSB3aGl0ZSBzcGFjZSAqLworICAgIGludAkJd2hhdDsJCS8qICcoJywgJ3snLCBldGMuICovCisgICAgaW50CQlvdGhlcjsJCS8qICcpJywgJ30nLCBldGMuICovCit7CisgICAgcG9zX1QJb2xkX3BvczsKKyAgICBwb3NfVAkqcG9zID0gTlVMTDsKKyAgICBwb3NfVAlzdGFydF9wb3M7CisgICAgcG9zX1QJKmVuZF9wb3M7CisgICAgcG9zX1QJb2xkX3N0YXJ0LCBvbGRfZW5kOworICAgIGNoYXJfdQkqc2F2ZV9jcG87CisgICAgaW50CQlzb2wgPSBGQUxTRTsJLyogeyBhdCBzdGFydCBvZiBsaW5lICovCisKKyAgICBvbGRfcG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICBvbGRfZW5kID0gY3Vyd2luLT53X2N1cnNvcjsJCSAgICAvKiByZW1lbWJlciB3aGVyZSB3ZSBzdGFydGVkICovCisgICAgb2xkX3N0YXJ0ID0gb2xkX2VuZDsKKworICAgIC8qCisgICAgICogSWYgd2Ugc3RhcnQgb24gJygnLCAneycsICcpJywgJ30nLCBldGMuLCB1c2UgdGhlIHdob2xlIGJsb2NrIGluY2x1c2l2ZS4KKyAgICAgKi8KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmICghVklzdWFsX2FjdGl2ZSB8fCBlcXVhbHBvcyhWSXN1YWwsIGN1cndpbi0+d19jdXJzb3IpKQorI2VuZGlmCisgICAgeworCXNldHBjbWFyaygpOworCWlmICh3aGF0ID09ICd7JykJCSAgICAvKiBpZ25vcmUgaW5kZW50ICovCisJICAgIHdoaWxlIChpbmluZGVudCgxKSkKKwkJaWYgKGluY19jdXJzb3IoKSAhPSAwKQorCQkgICAgYnJlYWs7CisJaWYgKGdjaGFyX2N1cnNvcigpID09IHdoYXQpCSAgICAvKiBjdXJzb3Igb24gJygnIG9yICd7JyAqLworCSAgICArK2N1cndpbi0+d19jdXJzb3IuY29sOworICAgIH0KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGVsc2UgaWYgKGx0KFZJc3VhbCwgY3Vyd2luLT53X2N1cnNvcikpCisgICAgeworCW9sZF9zdGFydCA9IFZJc3VhbDsKKwljdXJ3aW4tPndfY3Vyc29yID0gVklzdWFsOwkgICAgLyogY3Vyc29yIGF0IGxvdyBlbmQgb2YgVmlzdWFsICovCisgICAgfQorICAgIGVsc2UKKwlvbGRfZW5kID0gVklzdWFsOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFNlYXJjaCBiYWNrd2FyZHMgZm9yIHVuY2xvc2VkICcoJywgJ3snLCBldGMuLgorICAgICAqIFB1dCB0aGlzIHBvc2l0aW9uIGluIHN0YXJ0X3Bvcy4KKyAgICAgKiBJZ25vcnkgcXVvdGVzIGhlcmUuCisgICAgICovCisgICAgc2F2ZV9jcG8gPSBwX2NwbzsKKyAgICBwX2NwbyA9IChjaGFyX3UgKikiJSI7CisgICAgd2hpbGUgKGNvdW50LS0gPiAwKQorICAgIHsKKwlpZiAoKHBvcyA9IGZpbmRtYXRjaChOVUxMLCB3aGF0KSkgPT0gTlVMTCkKKwkgICAgYnJlYWs7CisJY3Vyd2luLT53X2N1cnNvciA9ICpwb3M7CisJc3RhcnRfcG9zID0gKnBvczsgICAvKiB0aGUgZmluZG1hdGNoIGZvciBlbmRfcG9zIHdpbGwgb3ZlcndyaXRlICpwb3MgKi8KKyAgICB9CisgICAgcF9jcG8gPSBzYXZlX2NwbzsKKworICAgIC8qCisgICAgICogU2VhcmNoIGZvciBtYXRjaGluZyAnKScsICd9JywgZXRjLgorICAgICAqIFB1dCB0aGlzIHBvc2l0aW9uIGluIGN1cndpbi0+d19jdXJzb3IuCisgICAgICovCisgICAgaWYgKHBvcyA9PSBOVUxMIHx8IChlbmRfcG9zID0gZmluZG1hdGNoKE5VTEwsIG90aGVyKSkgPT0gTlVMTCkKKyAgICB7CisJY3Vyd2luLT53X2N1cnNvciA9IG9sZF9wb3M7CisJcmV0dXJuIEZBSUw7CisgICAgfQorICAgIGN1cndpbi0+d19jdXJzb3IgPSAqZW5kX3BvczsKKworICAgIC8qCisgICAgICogVHJ5IHRvIGV4Y2x1ZGUgdGhlICcoJywgJ3snLCAnKScsICd9JywgZXRjLiB3aGVuICJpbmNsdWRlIiBpcyBGQUxTRS4KKyAgICAgKiBJZiB0aGUgZW5kaW5nICd9JyBpcyBvbmx5IHByZWNlZGVkIGJ5IGluZGVudCwgc2tpcCB0aGF0IGluZGVudC4KKyAgICAgKiBCdXQgb25seSBpZiB0aGUgcmVzdWx0aW5nIGFyZWEgaXMgbm90IHNtYWxsZXIgdGhhbiB3aGF0IHdlIHN0YXJ0ZWQgd2l0aC4KKyAgICAgKi8KKyAgICB3aGlsZSAoIWluY2x1ZGUpCisgICAgeworCWluY2woJnN0YXJ0X3Bvcyk7CisJc29sID0gKGN1cndpbi0+d19jdXJzb3IuY29sID09IDApOworCWRlY2woJmN1cndpbi0+d19jdXJzb3IpOworCWlmICh3aGF0ID09ICd7JykKKwkgICAgd2hpbGUgKGluaW5kZW50KDEpKQorCSAgICB7CisJCXNvbCA9IFRSVUU7CisJCWlmIChkZWNsKCZjdXJ3aW4tPndfY3Vyc29yKSAhPSAwKQorCQkgICAgYnJlYWs7CisJICAgIH0KKyNpZmRlZiBGRUFUX1ZJU1VBTAorCS8qCisJICogSW4gVmlzdWFsIG1vZGUsIHdoZW4gdGhlIHJlc3VsdGluZyBhcmVhIGlzIG5vdCBiaWdnZXIgdGhhbiB3aGF0IHdlCisJICogc3RhcnRlZCB3aXRoLCBleHRlbmQgaXQgdG8gdGhlIG5leHQgYmxvY2ssIGFuZCB0aGVuIGV4Y2x1ZGUgYWdhaW4uCisJICovCisJaWYgKCFsdChzdGFydF9wb3MsIG9sZF9zdGFydCkgJiYgIWx0KG9sZF9lbmQsIGN1cndpbi0+d19jdXJzb3IpCisJCSYmIFZJc3VhbF9hY3RpdmUpCisJeworCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gb2xkX3N0YXJ0OworCSAgICBkZWNsKCZjdXJ3aW4tPndfY3Vyc29yKTsKKwkgICAgaWYgKChwb3MgPSBmaW5kbWF0Y2goTlVMTCwgd2hhdCkpID09IE5VTEwpCisJICAgIHsKKwkJY3Vyd2luLT53X2N1cnNvciA9IG9sZF9wb3M7CisJCXJldHVybiBGQUlMOworCSAgICB9CisJICAgIHN0YXJ0X3BvcyA9ICpwb3M7CisJICAgIGN1cndpbi0+d19jdXJzb3IgPSAqcG9zOworCSAgICBpZiAoKGVuZF9wb3MgPSBmaW5kbWF0Y2goTlVMTCwgb3RoZXIpKSA9PSBOVUxMKQorCSAgICB7CisJCWN1cndpbi0+d19jdXJzb3IgPSBvbGRfcG9zOworCQlyZXR1cm4gRkFJTDsKKwkgICAgfQorCSAgICBjdXJ3aW4tPndfY3Vyc29yID0gKmVuZF9wb3M7CisJfQorCWVsc2UKKyNlbmRpZgorCSAgICBicmVhazsKKyAgICB9CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmIChWSXN1YWxfYWN0aXZlKQorICAgIHsKKwlpZiAoKnBfc2VsID09ICdlJykKKwkgICAgKytjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKwlpZiAoc29sKQorCSAgICBpbmMoJmN1cndpbi0+d19jdXJzb3IpOwkvKiBpbmNsdWRlIHRoZSBsaW5lIGJyZWFrICovCisJVklzdWFsID0gc3RhcnRfcG9zOworCVZJc3VhbF9tb2RlID0gJ3YnOworCXJlZHJhd19jdXJidWZfbGF0ZXIoSU5WRVJURUQpOwkvKiB1cGRhdGUgdGhlIGludmVyc2lvbiAqLworCXNob3dtb2RlKCk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwlvYXAtPnN0YXJ0ID0gc3RhcnRfcG9zOworCW9hcC0+bW90aW9uX3R5cGUgPSBNQ0hBUjsKKwlpZiAoc29sKQorCXsKKwkgICAgaW5jbCgmY3Vyd2luLT53X2N1cnNvcik7CisJICAgIG9hcC0+aW5jbHVzaXZlID0gRkFMU0U7CisJfQorCWVsc2UKKwkgICAgb2FwLT5pbmNsdXNpdmUgPSBUUlVFOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworICAgIGludAorY3VycmVudF9wYXIob2FwLCBjb3VudCwgaW5jbHVkZSwgdHlwZSkKKyAgICBvcGFyZ19UCSpvYXA7CisgICAgbG9uZwljb3VudDsKKyAgICBpbnQJCWluY2x1ZGU7CS8qIFRSVUUgPT0gaW5jbHVkZSB3aGl0ZSBzcGFjZSAqLworICAgIGludAkJdHlwZTsJCS8qICdwJyBmb3IgcGFyYWdyYXBoLCAnUycgZm9yIHNlY3Rpb24gKi8KK3sKKyAgICBsaW5lbnJfVAlzdGFydF9sbnVtOworICAgIGxpbmVucl9UCWVuZF9sbnVtOworICAgIGludAkJd2hpdGVfaW5fZnJvbnQ7CisgICAgaW50CQlkaXI7CisgICAgaW50CQlzdGFydF9pc193aGl0ZTsKKyAgICBpbnQJCXByZXZfc3RhcnRfaXNfd2hpdGU7CisgICAgaW50CQlyZXR2YWwgPSBPSzsKKyAgICBpbnQJCWRvX3doaXRlID0gRkFMU0U7CisgICAgaW50CQl0OworICAgIGludAkJaTsKKworICAgIGlmICh0eXBlID09ICdTJykJICAgIC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKwlyZXR1cm4gRkFJTDsKKworICAgIHN0YXJ0X2xudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIC8qCisgICAgICogV2hlbiB2aXN1YWwgYXJlYSBpcyBtb3JlIHRoYW4gb25lIGxpbmU6IGV4dGVuZCBpdC4KKyAgICAgKi8KKyAgICBpZiAoVklzdWFsX2FjdGl2ZSAmJiBzdGFydF9sbnVtICE9IFZJc3VhbC5sbnVtKQorICAgIHsKK2V4dGVuZDoKKwlpZiAoc3RhcnRfbG51bSA8IFZJc3VhbC5sbnVtKQorCSAgICBkaXIgPSBCQUNLV0FSRDsKKwllbHNlCisJICAgIGRpciA9IEZPUldBUkQ7CisJZm9yIChpID0gY291bnQ7IC0taSA+PSAwOyApCisJeworCSAgICBpZiAoc3RhcnRfbG51bSA9PQorCQkJICAgKGRpciA9PSBCQUNLV0FSRCA/IDEgOiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkpCisJICAgIHsKKwkJcmV0dmFsID0gRkFJTDsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICBwcmV2X3N0YXJ0X2lzX3doaXRlID0gLTE7CisJICAgIGZvciAodCA9IDA7IHQgPCAyOyArK3QpCisJICAgIHsKKwkJc3RhcnRfbG51bSArPSBkaXI7CisJCXN0YXJ0X2lzX3doaXRlID0gbGluZXdoaXRlKHN0YXJ0X2xudW0pOworCQlpZiAocHJldl9zdGFydF9pc193aGl0ZSA9PSBzdGFydF9pc193aGl0ZSkKKwkJeworCQkgICAgc3RhcnRfbG51bSAtPSBkaXI7CisJCSAgICBicmVhazsKKwkJfQorCQlmb3IgKDs7KQorCQl7CisJCSAgICBpZiAoc3RhcnRfbG51bSA9PSAoZGlyID09IEJBQ0tXQVJECisJCQkJCSAgICA/IDEgOiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkpCisJCQlicmVhazsKKwkJICAgIGlmIChzdGFydF9pc193aGl0ZSAhPSBsaW5ld2hpdGUoc3RhcnRfbG51bSArIGRpcikKKwkJCSAgICB8fCAoIXN0YXJ0X2lzX3doaXRlCisJCQkJICAgICYmIHN0YXJ0UFMoc3RhcnRfbG51bSArIChkaXIgPiAwCisJCQkJCQkJICAgICA/IDEgOiAwKSwgMCwgMCkpKQorCQkJYnJlYWs7CisJCSAgICBzdGFydF9sbnVtICs9IGRpcjsKKwkJfQorCQlpZiAoIWluY2x1ZGUpCisJCSAgICBicmVhazsKKwkJaWYgKHN0YXJ0X2xudW0gPT0gKGRpciA9PSBCQUNLV0FSRAorCQkJCQkgICAgPyAxIDogY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpKQorCQkgICAgYnJlYWs7CisJCXByZXZfc3RhcnRfaXNfd2hpdGUgPSBzdGFydF9pc193aGl0ZTsKKwkgICAgfQorCX0KKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBzdGFydF9sbnVtOworCWN1cndpbi0+d19jdXJzb3IuY29sID0gMDsKKwlyZXR1cm4gcmV0dmFsOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBGaXJzdCBtb3ZlIGJhY2sgdG8gdGhlIHN0YXJ0X2xudW0gb2YgdGhlIHBhcmFncmFwaCBvciB3aGl0ZSBsaW5lcworICAgICAqLworICAgIHdoaXRlX2luX2Zyb250ID0gbGluZXdoaXRlKHN0YXJ0X2xudW0pOworICAgIHdoaWxlIChzdGFydF9sbnVtID4gMSkKKyAgICB7CisJaWYgKHdoaXRlX2luX2Zyb250KQkgICAgLyogc3RvcCBhdCBmaXJzdCB3aGl0ZSBsaW5lICovCisJeworCSAgICBpZiAoIWxpbmV3aGl0ZShzdGFydF9sbnVtIC0gMSkpCisJCWJyZWFrOworCX0KKwllbHNlCQkvKiBzdG9wIGF0IGZpcnN0IG5vbi13aGl0ZSBsaW5lIG9mIHN0YXJ0IG9mIHBhcmFncmFwaCAqLworCXsKKwkgICAgaWYgKGxpbmV3aGl0ZShzdGFydF9sbnVtIC0gMSkgfHwgc3RhcnRQUyhzdGFydF9sbnVtLCAwLCAwKSkKKwkJYnJlYWs7CisJfQorCS0tc3RhcnRfbG51bTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE1vdmUgcGFzdCB0aGUgZW5kIG9mIGFueSB3aGl0ZSBsaW5lcy4KKyAgICAgKi8KKyAgICBlbmRfbG51bSA9IHN0YXJ0X2xudW07CisgICAgd2hpbGUgKGxpbmV3aGl0ZShlbmRfbG51bSkgJiYgZW5kX2xudW0gPCBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkgICAgKytlbmRfbG51bTsKKworICAgIC0tZW5kX2xudW07CisgICAgaSA9IGNvdW50OworICAgIGlmICghaW5jbHVkZSAmJiB3aGl0ZV9pbl9mcm9udCkKKwktLWk7CisgICAgd2hpbGUgKGktLSkKKyAgICB7CisJaWYgKGVuZF9sbnVtID09IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCSAgICByZXR1cm4gRkFJTDsKKworCWlmICghaW5jbHVkZSkKKwkgICAgZG9fd2hpdGUgPSBsaW5ld2hpdGUoZW5kX2xudW0gKyAxKTsKKworCWlmIChpbmNsdWRlIHx8ICFkb193aGl0ZSkKKwl7CisJICAgICsrZW5kX2xudW07CisJICAgIC8qCisJICAgICAqIHNraXAgdG8gZW5kIG9mIHBhcmFncmFwaAorCSAgICAgKi8KKwkgICAgd2hpbGUgKGVuZF9sbnVtIDwgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQKKwkJICAgICYmICFsaW5ld2hpdGUoZW5kX2xudW0gKyAxKQorCQkgICAgJiYgIXN0YXJ0UFMoZW5kX2xudW0gKyAxLCAwLCAwKSkKKwkJKytlbmRfbG51bTsKKwl9CisKKwlpZiAoaSA9PSAwICYmIHdoaXRlX2luX2Zyb250ICYmIGluY2x1ZGUpCisJICAgIGJyZWFrOworCisJLyoKKwkgKiBza2lwIHRvIGVuZCBvZiB3aGl0ZSBsaW5lcyBhZnRlciBwYXJhZ3JhcGgKKwkgKi8KKwlpZiAoaW5jbHVkZSB8fCBkb193aGl0ZSkKKwkgICAgd2hpbGUgKGVuZF9sbnVtIDwgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQKKwkJCQkJCSAgICYmIGxpbmV3aGl0ZShlbmRfbG51bSArIDEpKQorCQkrK2VuZF9sbnVtOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlcmUgYXJlIG5vIGVtcHR5IGxpbmVzIGF0IHRoZSBlbmQsIHRyeSB0byBmaW5kIHNvbWUgZW1wdHkgbGluZXMgYXQKKyAgICAgKiB0aGUgc3RhcnQgKHVubGVzcyB0aGF0IGhhcyBiZWVuIGRvbmUgYWxyZWFkeSkuCisgICAgICovCisgICAgaWYgKCF3aGl0ZV9pbl9mcm9udCAmJiAhbGluZXdoaXRlKGVuZF9sbnVtKSAmJiBpbmNsdWRlKQorCXdoaWxlIChzdGFydF9sbnVtID4gMSAmJiBsaW5ld2hpdGUoc3RhcnRfbG51bSAtIDEpKQorCSAgICAtLXN0YXJ0X2xudW07CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmIChWSXN1YWxfYWN0aXZlKQorICAgIHsKKwkvKiBQcm9ibGVtOiB3aGVuIGRvaW5nICJWaXBpcGlwIiBub3RoaW5nIGhhcHBlbnMgaW4gYSBzaW5nbGUgd2hpdGUKKwkgKiBsaW5lLCB3ZSBnZXQgc3R1Y2sgdGhlcmUuICBUcmFwIHRoaXMgaGVyZS4gKi8KKwlpZiAoVklzdWFsX21vZGUgPT0gJ1YnICYmIHN0YXJ0X2xudW0gPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorCSAgICBnb3RvIGV4dGVuZDsKKwlWSXN1YWwubG51bSA9IHN0YXJ0X2xudW07CisJVklzdWFsX21vZGUgPSAnVic7CisJcmVkcmF3X2N1cmJ1Zl9sYXRlcihJTlZFUlRFRCk7CS8qIHVwZGF0ZSB0aGUgaW52ZXJzaW9uICovCisJc2hvd21vZGUoKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCW9hcC0+c3RhcnQubG51bSA9IHN0YXJ0X2xudW07CisJb2FwLT5zdGFydC5jb2wgPSAwOworCW9hcC0+bW90aW9uX3R5cGUgPSBNTElORTsKKyAgICB9CisgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gZW5kX2xudW07CisgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOworCisgICAgcmV0dXJuIE9LOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTElTUCkgfHwgZGVmaW5lZChGRUFUX0NJTkRFTlQpIHx8IGRlZmluZWQoRkVBVF9URVhUT0JKKSBcCisJfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiByZXR1cm4gVFJVRSBpZiBsaW5lICdsbnVtJyBpcyBlbXB0eSBvciBoYXMgd2hpdGUgY2hhcnMgb25seS4KKyAqLworICAgIGludAorbGluZXdoaXRlKGxudW0pCisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBjaGFyX3UgICpwOworCisgICAgcCA9IHNraXB3aGl0ZShtbF9nZXQobG51bSkpOworICAgIHJldHVybiAoKnAgPT0gTlVMKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0ZJTkRfSUQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogRmluZCBpZGVudGlmaWVycyBvciBkZWZpbmVzIGluIGluY2x1ZGVkIGZpbGVzLgorICogaWYgcF9pYyAmJiAoY29udGludWVfc3RhdHVzICYgQ09OVF9TT0wpIHRoZW4gcHRyIG11c3QgYmUgaW4gbG93ZXJjYXNlLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitmaW5kX3BhdHRlcm5faW5fcGF0aChwdHIsIGRpciwgbGVuLCB3aG9sZSwgc2tpcF9jb21tZW50cywKKwkJCQkgICAgdHlwZSwgY291bnQsIGFjdGlvbiwgc3RhcnRfbG51bSwgZW5kX2xudW0pCisgICAgY2hhcl91CSpwdHI7CQkvKiBwb2ludGVyIHRvIHNlYXJjaCBwYXR0ZXJuICovCisgICAgaW50CQlkaXI7CQkvKiBkaXJlY3Rpb24gb2YgZXhwYW5zaW9uICovCisgICAgaW50CQlsZW47CQkvKiBsZW5ndGggb2Ygc2VhcmNoIHBhdHRlcm4gKi8KKyAgICBpbnQJCXdob2xlOwkJLyogbWF0Y2ggd2hvbGUgd29yZHMgb25seSAqLworICAgIGludAkJc2tpcF9jb21tZW50czsJLyogZG9uJ3QgbWF0Y2ggaW5zaWRlIGNvbW1lbnRzICovCisgICAgaW50CQl0eXBlOwkJLyogVHlwZSBvZiBzZWFyY2g7IGFyZSB3ZSBsb29raW5nIGZvciBhIHR5cGU/CisJCQkJICAgYSBtYWNybz8gKi8KKyAgICBsb25nCWNvdW50OworICAgIGludAkJYWN0aW9uOwkJLyogV2hhdCB0byBkbyB3aGVuIHdlIGZpbmQgaXQgKi8KKyAgICBsaW5lbnJfVAlzdGFydF9sbnVtOwkvKiBmaXJzdCBsaW5lIHRvIHN0YXJ0IHNlYXJjaGluZyAqLworICAgIGxpbmVucl9UCWVuZF9sbnVtOwkvKiBsYXN0IGxpbmUgZm9yIHNlYXJjaGluZyAqLworeworICAgIFNlYXJjaGVkRmlsZSAqZmlsZXM7CQkvKiBTdGFjayBvZiBpbmNsdWRlZCBmaWxlcyAqLworICAgIFNlYXJjaGVkRmlsZSAqYmlnZ2VyOwkJLyogV2hlbiB3ZSBuZWVkIG1vcmUgc3BhY2UgKi8KKyAgICBpbnQJCW1heF9wYXRoX2RlcHRoID0gNTA7CisgICAgbG9uZwltYXRjaF9jb3VudCA9IDE7CisKKyAgICBjaGFyX3UJKnBhdDsKKyAgICBjaGFyX3UJKm5ld19mbmFtZTsKKyAgICBjaGFyX3UJKmN1cnJfZm5hbWUgPSBjdXJidWYtPmJfZm5hbWU7CisgICAgY2hhcl91CSpwcmV2X2ZuYW1lID0gTlVMTDsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJZGVwdGg7CisgICAgaW50CQlkZXB0aF9kaXNwbGF5ZWQ7CS8qIEZvciB0eXBlPT1DSEVDS19QQVRIICovCisgICAgaW50CQlvbGRfZmlsZXM7CisgICAgaW50CQlhbHJlYWR5X3NlYXJjaGVkOworICAgIGNoYXJfdQkqZmlsZV9saW5lOworICAgIGNoYXJfdQkqbGluZTsKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CXNhdmVfY2hhcjsKKyAgICBpbnQJCWRlZmluZV9tYXRjaGVkOworICAgIHJlZ21hdGNoX1QJcmVnbWF0Y2g7CisgICAgcmVnbWF0Y2hfVAlpbmNsX3JlZ21hdGNoOworICAgIHJlZ21hdGNoX1QJZGVmX3JlZ21hdGNoOworICAgIGludAkJbWF0Y2hlZCA9IEZBTFNFOworICAgIGludAkJZGlkX3Nob3cgPSBGQUxTRTsKKyAgICBpbnQJCWZvdW5kID0gRkFMU0U7CisgICAgaW50CQlpOworICAgIGNoYXJfdQkqYWxyZWFkeSA9IE5VTEw7CisgICAgY2hhcl91CSpzdGFydHAgPSBOVUxMOworI2lmZGVmIFJJU0NPUworICAgIGludAkJcHJldmlvdXNfbXVuZ2luZyA9IF9fcmlzY29zaWZ5X2NvbnRyb2w7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorICAgIHdpbl9UCSpjdXJ3aW5fc2F2ZSA9IE5VTEw7CisjZW5kaWYKKworICAgIHJlZ21hdGNoLnJlZ3Byb2cgPSBOVUxMOworICAgIGluY2xfcmVnbWF0Y2gucmVncHJvZyA9IE5VTEw7CisgICAgZGVmX3JlZ21hdGNoLnJlZ3Byb2cgPSBOVUxMOworCisgICAgZmlsZV9saW5lID0gYWxsb2MoTFNJWkUpOworICAgIGlmIChmaWxlX2xpbmUgPT0gTlVMTCkKKwlyZXR1cm47CisKKyNpZmRlZiBSSVNDT1MKKyAgICAvKiBVbml4TGliIGtub3dzIGJlc3QgaG93IHRvIG11bmdlIGMgZmlsZSBuYW1lcyAtIHR1cm4gbXVuZ2luZyBiYWNrIG9uLiAqLworICAgIF9fcmlzY29zaWZ5X2NvbnRyb2wgPSBfX1JJU0NPU0lGWV9MT05HX1RSVU5DQVRFOworI2VuZGlmCisKKyAgICBpZiAodHlwZSAhPSBDSEVDS19QQVRIICYmIHR5cGUgIT0gRklORF9ERUZJTkUKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkvKiB3aGVuIENPTlRfU09MIGlzIHNldCBjb21wYXJlICJwdHIiIHdpdGggdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZQorCSAqIGlzIGZhc3RlciB0aGFuIHF1b3RlX21ldGEvcmVnY29tcC9yZWdleGVjICJwdHIiIC0tIEFjZXZlZG8gKi8KKwkgICAgJiYgIShjb250aW51ZV9zdGF0dXMgJiBDT05UX1NPTCkKKyNlbmRpZgorICAgICAgICkKKyAgICB7CisJcGF0ID0gYWxsb2MobGVuICsgNSk7CisJaWYgKHBhdCA9PSBOVUxMKQorCSAgICBnb3RvIGZwaXBfZW5kOworCXNwcmludGYoKGNoYXIgKilwYXQsIHdob2xlID8gIlxcPCUuKnNcXD4iIDogIiUuKnMiLCBsZW4sIHB0cik7CisJLyogaWdub3JlIGNhc2UgYWNjb3JkaW5nIHRvIHBfaWMsIHBfc2NzIGFuZCBwYXQgKi8KKwlyZWdtYXRjaC5ybV9pYyA9IGlnbm9yZWNhc2UocGF0KTsKKwlyZWdtYXRjaC5yZWdwcm9nID0gdmltX3JlZ2NvbXAocGF0LCBwX21hZ2ljID8gUkVfTUFHSUMgOiAwKTsKKwl2aW1fZnJlZShwYXQpOworCWlmIChyZWdtYXRjaC5yZWdwcm9nID09IE5VTEwpCisJICAgIGdvdG8gZnBpcF9lbmQ7CisgICAgfQorICAgIGlmICgqY3VyYnVmLT5iX3BfaW5jICE9IE5VTCB8fCAqcF9pbmMgIT0gTlVMKQorICAgIHsKKwlpbmNsX3JlZ21hdGNoLnJlZ3Byb2cgPSB2aW1fcmVnY29tcCgqY3VyYnVmLT5iX3BfaW5jID09IE5VTAorCQkJICAgPyBwX2luYyA6IGN1cmJ1Zi0+Yl9wX2luYywgcF9tYWdpYyA/IFJFX01BR0lDIDogMCk7CisJaWYgKGluY2xfcmVnbWF0Y2gucmVncHJvZyA9PSBOVUxMKQorCSAgICBnb3RvIGZwaXBfZW5kOworCWluY2xfcmVnbWF0Y2gucm1faWMgPSBGQUxTRTsJLyogZG9uJ3QgaWdub3JlIGNhc2UgaW4gaW5jbC4gcGF0LiAqLworICAgIH0KKyAgICBpZiAodHlwZSA9PSBGSU5EX0RFRklORSAmJiAoKmN1cmJ1Zi0+Yl9wX2RlZiAhPSBOVUwgfHwgKnBfZGVmICE9IE5VTCkpCisgICAgeworCWRlZl9yZWdtYXRjaC5yZWdwcm9nID0gdmltX3JlZ2NvbXAoKmN1cmJ1Zi0+Yl9wX2RlZiA9PSBOVUwKKwkJCSAgID8gcF9kZWYgOiBjdXJidWYtPmJfcF9kZWYsIHBfbWFnaWMgPyBSRV9NQUdJQyA6IDApOworCWlmIChkZWZfcmVnbWF0Y2gucmVncHJvZyA9PSBOVUxMKQorCSAgICBnb3RvIGZwaXBfZW5kOworCWRlZl9yZWdtYXRjaC5ybV9pYyA9IEZBTFNFOwkvKiBkb24ndCBpZ25vcmUgY2FzZSBpbiBkZWZpbmUgcGF0LiAqLworICAgIH0KKyAgICBmaWxlcyA9IChTZWFyY2hlZEZpbGUgKilsYWxsb2NfY2xlYXIoKGxvbmdfdSkKKwkJCSAgICAgICAobWF4X3BhdGhfZGVwdGggKiBzaXplb2YoU2VhcmNoZWRGaWxlKSksIFRSVUUpOworICAgIGlmIChmaWxlcyA9PSBOVUxMKQorCWdvdG8gZnBpcF9lbmQ7CisgICAgb2xkX2ZpbGVzID0gbWF4X3BhdGhfZGVwdGg7CisgICAgZGVwdGggPSBkZXB0aF9kaXNwbGF5ZWQgPSAtMTsKKworICAgIGxudW0gPSBzdGFydF9sbnVtOworICAgIGlmIChlbmRfbG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCWVuZF9sbnVtID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisgICAgaWYgKGxudW0gPiBlbmRfbG51bSkJCS8qIGRvIGF0IGxlYXN0IG9uZSBsaW5lICovCisJbG51bSA9IGVuZF9sbnVtOworICAgIGxpbmUgPSBtbF9nZXQobG51bSk7CisKKyAgICBmb3IgKDs7KQorICAgIHsKKwlpZiAoaW5jbF9yZWdtYXRjaC5yZWdwcm9nICE9IE5VTEwKKwkJJiYgdmltX3JlZ2V4ZWMoJmluY2xfcmVnbWF0Y2gsIGxpbmUsIChjb2xucl9UKTApKQorCXsKKwkgICAgbmV3X2ZuYW1lID0gZmlsZV9uYW1lX2luX2xpbmUoaW5jbF9yZWdtYXRjaC5lbmRwWzBdLAorCQkgICAgMCwgRk5BTUVfRVhQfEZOQU1FX0lOQ0x8Rk5BTUVfUkVMLCAxTCwKKwkJICAgIGN1cnJfZm5hbWUgPT0gY3VyYnVmLT5iX2ZuYW1lCisJCQkJCSAgICAgPyBjdXJidWYtPmJfZmZuYW1lIDogY3Vycl9mbmFtZSk7CisJICAgIGFscmVhZHlfc2VhcmNoZWQgPSBGQUxTRTsKKwkgICAgaWYgKG5ld19mbmFtZSAhPSBOVUxMKQorCSAgICB7CisJCS8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhbHJlYWR5IHNlYXJjaGVkIGluIHRoaXMgZmlsZSAqLworCQlmb3IgKGkgPSAwOzsgaSsrKQorCQl7CisJCSAgICBpZiAoaSA9PSBkZXB0aCArIDEpCisJCQlpID0gb2xkX2ZpbGVzOworCQkgICAgaWYgKGkgPT0gbWF4X3BhdGhfZGVwdGgpCisJCQlicmVhazsKKwkJICAgIGlmIChmdWxscGF0aGNtcChuZXdfZm5hbWUsIGZpbGVzW2ldLm5hbWUsIFRSVUUpICYgRlBDX1NBTUUpCisJCSAgICB7CisJCQlpZiAodHlwZSAhPSBDSEVDS19QQVRIICYmCisJCQkJYWN0aW9uID09IEFDVElPTl9TSE9XX0FMTCAmJiBmaWxlc1tpXS5tYXRjaGVkKQorCQkJeworCQkJICAgIG1zZ19wdXRjaGFyKCdcbicpOwkgICAgLyogY3Vyc29yIGJlbG93IGxhc3Qgb25lICovCisJCQkgICAgaWYgKCFnb3RfaW50KQkgICAgLyogZG9uJ3QgZGlzcGxheSBpZiAncScKKwkJCQkJCSAgICAgICB0eXBlZCBhdCAiLS1tb3JlLS0iCisJCQkJCQkgICAgICAgbWVzYWdlICovCisJCQkgICAgeworCQkJCW1zZ19ob21lX3JlcGxhY2VfaGwobmV3X2ZuYW1lKTsKKwkJCQlNU0dfUFVUUyhfKCIgKGluY2x1ZGVzIHByZXZpb3VzbHkgbGlzdGVkIG1hdGNoKSIpKTsKKwkJCQlwcmV2X2ZuYW1lID0gTlVMTDsKKwkJCSAgICB9CisJCQl9CisJCQl2aW1fZnJlZShuZXdfZm5hbWUpOworCQkJbmV3X2ZuYW1lID0gTlVMTDsKKwkJCWFscmVhZHlfc2VhcmNoZWQgPSBUUlVFOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQorCisJICAgIGlmICh0eXBlID09IENIRUNLX1BBVEggJiYgKGFjdGlvbiA9PSBBQ1RJT05fU0hPV19BTEwKKwkJCQkgfHwgKG5ld19mbmFtZSA9PSBOVUxMICYmICFhbHJlYWR5X3NlYXJjaGVkKSkpCisJICAgIHsKKwkJaWYgKGRpZF9zaG93KQorCQkgICAgbXNnX3B1dGNoYXIoJ1xuJyk7CSAgICAvKiBjdXJzb3IgYmVsb3cgbGFzdCBvbmUgKi8KKwkJZWxzZQorCQl7CisJCSAgICBnb3RvY21kbGluZShUUlVFKTsJICAgIC8qIGN1cnNvciBhdCBzdGF0dXMgbGluZSAqLworCQkgICAgTVNHX1BVVFNfVElUTEUoXygiLS0tIEluY2x1ZGVkIGZpbGVzICIpKTsKKwkJICAgIGlmIChhY3Rpb24gIT0gQUNUSU9OX1NIT1dfQUxMKQorCQkJTVNHX1BVVFNfVElUTEUoXygibm90IGZvdW5kICIpKTsKKwkJICAgIE1TR19QVVRTX1RJVExFKF8oImluIHBhdGggLS0tXG4iKSk7CisJCX0KKwkJZGlkX3Nob3cgPSBUUlVFOworCQl3aGlsZSAoZGVwdGhfZGlzcGxheWVkIDwgZGVwdGggJiYgIWdvdF9pbnQpCisJCXsKKwkJICAgICsrZGVwdGhfZGlzcGxheWVkOworCQkgICAgZm9yIChpID0gMDsgaSA8IGRlcHRoX2Rpc3BsYXllZDsgaSsrKQorCQkJTVNHX1BVVFMoIiAgIik7CisJCSAgICBtc2dfaG9tZV9yZXBsYWNlKGZpbGVzW2RlcHRoX2Rpc3BsYXllZF0ubmFtZSk7CisJCSAgICBNU0dfUFVUUygiIC0tPlxuIik7CisJCX0KKwkJaWYgKCFnb3RfaW50KQkJICAgIC8qIGRvbid0IGRpc3BsYXkgaWYgJ3EnIHR5cGVkCisJCQkJCSAgICAgICBmb3IgIi0tbW9yZS0tIiBtZXNzYWdlICovCisJCXsKKwkJICAgIGZvciAoaSA9IDA7IGkgPD0gZGVwdGhfZGlzcGxheWVkOyBpKyspCisJCQlNU0dfUFVUUygiICAiKTsKKwkJICAgIGlmIChuZXdfZm5hbWUgIT0gTlVMTCkKKwkJICAgIHsKKwkJCS8qIHVzaW5nICJuZXdfZm5hbWUiIGlzIG1vcmUgcmVsaWFibGUsIGUuZy4sIHdoZW4KKwkJCSAqICdpbmNsdWRlZXhwcicgaXMgc2V0LiAqLworCQkJbXNnX291dHRyYW5zX2F0dHIobmV3X2ZuYW1lLCBobF9hdHRyKEhMRl9EKSk7CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQkvKgorCQkJICogSXNvbGF0ZSB0aGUgZmlsZSBuYW1lLgorCQkJICogSW5jbHVkZSB0aGUgc3Vycm91bmRpbmcgIiIgb3IgPD4gaWYgcHJlc2VudC4KKwkJCSAqLworCQkJZm9yIChwID0gaW5jbF9yZWdtYXRjaC5lbmRwWzBdOyAhdmltX2lzZmlsZWMoKnApOyBwKyspCisJCQkgICAgOworCQkJZm9yIChpID0gMDsgdmltX2lzZmlsZWMocFtpXSk7IGkrKykKKwkJCSAgICA7CisJCQlpZiAoaSA9PSAwKQorCQkJeworCQkJICAgIC8qIE5vdGhpbmcgZm91bmQsIHVzZSB0aGUgcmVzdCBvZiB0aGUgbGluZS4gKi8KKwkJCSAgICBwID0gaW5jbF9yZWdtYXRjaC5lbmRwWzBdOworCQkJICAgIGkgPSBTVFJMRU4ocCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkgICAgaWYgKHBbLTFdID09ICciJyB8fCBwWy0xXSA9PSAnPCcpCisJCQkgICAgeworCQkJCS0tcDsKKwkJCQkrK2k7CisJCQkgICAgfQorCQkJICAgIGlmIChwW2ldID09ICciJyB8fCBwW2ldID09ICc+JykKKwkJCQkrK2k7CisJCQl9CisJCQlzYXZlX2NoYXIgPSBwW2ldOworCQkJcFtpXSA9IE5VTDsKKwkJCW1zZ19vdXR0cmFuc19hdHRyKHAsIGhsX2F0dHIoSExGX0QpKTsKKwkJCXBbaV0gPSBzYXZlX2NoYXI7CisJCSAgICB9CisKKwkJICAgIGlmIChuZXdfZm5hbWUgPT0gTlVMTCAmJiBhY3Rpb24gPT0gQUNUSU9OX1NIT1dfQUxMKQorCQkgICAgeworCQkJaWYgKGFscmVhZHlfc2VhcmNoZWQpCisJCQkgICAgTVNHX1BVVFMoXygiICAoQWxyZWFkeSBsaXN0ZWQpIikpOworCQkJZWxzZQorCQkJICAgIE1TR19QVVRTKF8oIiAgTk9UIEZPVU5EIikpOworCQkgICAgfQorCQl9CisJCW91dF9mbHVzaCgpOwkgICAgLyogb3V0cHV0IGVhY2ggbGluZSBkaXJlY3RseSAqLworCSAgICB9CisKKwkgICAgaWYgKG5ld19mbmFtZSAhPSBOVUxMKQorCSAgICB7CisJCS8qIFB1c2ggdGhlIG5ldyBmaWxlIG9udG8gdGhlIGZpbGUgc3RhY2sgKi8KKwkJaWYgKGRlcHRoICsgMSA9PSBvbGRfZmlsZXMpCisJCXsKKwkJICAgIGJpZ2dlciA9IChTZWFyY2hlZEZpbGUgKilsYWxsb2MoKGxvbmdfdSkoCisJCQkgICAgbWF4X3BhdGhfZGVwdGggKiAyICogc2l6ZW9mKFNlYXJjaGVkRmlsZSkpLCBUUlVFKTsKKwkJICAgIGlmIChiaWdnZXIgIT0gTlVMTCkKKwkJICAgIHsKKwkJCWZvciAoaSA9IDA7IGkgPD0gZGVwdGg7IGkrKykKKwkJCSAgICBiaWdnZXJbaV0gPSBmaWxlc1tpXTsKKwkJCWZvciAoaSA9IGRlcHRoICsgMTsgaSA8IG9sZF9maWxlcyArIG1heF9wYXRoX2RlcHRoOyBpKyspCisJCQl7CisJCQkgICAgYmlnZ2VyW2ldLmZwID0gTlVMTDsKKwkJCSAgICBiaWdnZXJbaV0ubmFtZSA9IE5VTEw7CisJCQkgICAgYmlnZ2VyW2ldLmxudW0gPSAwOworCQkJICAgIGJpZ2dlcltpXS5tYXRjaGVkID0gRkFMU0U7CisJCQl9CisJCQlmb3IgKGkgPSBvbGRfZmlsZXM7IGkgPCBtYXhfcGF0aF9kZXB0aDsgaSsrKQorCQkJICAgIGJpZ2dlcltpICsgbWF4X3BhdGhfZGVwdGhdID0gZmlsZXNbaV07CisJCQlvbGRfZmlsZXMgKz0gbWF4X3BhdGhfZGVwdGg7CisJCQltYXhfcGF0aF9kZXB0aCAqPSAyOworCQkJdmltX2ZyZWUoZmlsZXMpOworCQkJZmlsZXMgPSBiaWdnZXI7CisJCSAgICB9CisJCX0KKwkJaWYgKChmaWxlc1tkZXB0aCArIDFdLmZwID0gbWNoX2ZvcGVuKChjaGFyICopbmV3X2ZuYW1lLCAiciIpKQorCQkJCQkJCQkgICAgPT0gTlVMTCkKKwkJICAgIHZpbV9mcmVlKG5ld19mbmFtZSk7CisJCWVsc2UKKwkJeworCQkgICAgaWYgKCsrZGVwdGggPT0gb2xkX2ZpbGVzKQorCQkgICAgeworCQkJLyoKKwkJCSAqIGxhbGxvYygpIGZvciAnYmlnZ2VyJyBtdXN0IGhhdmUgZmFpbGVkIGFib3ZlLiAgV2UKKwkJCSAqIHdpbGwgZm9yZ2V0IG9uZSBvZiBvdXIgYWxyZWFkeSB2aXNpdGVkIGZpbGVzIG5vdy4KKwkJCSAqLworCQkJdmltX2ZyZWUoZmlsZXNbb2xkX2ZpbGVzXS5uYW1lKTsKKwkJCSsrb2xkX2ZpbGVzOworCQkgICAgfQorCQkgICAgZmlsZXNbZGVwdGhdLm5hbWUgPSBjdXJyX2ZuYW1lID0gbmV3X2ZuYW1lOworCQkgICAgZmlsZXNbZGVwdGhdLmxudW0gPSAwOworCQkgICAgZmlsZXNbZGVwdGhdLm1hdGNoZWQgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkJICAgIGlmIChhY3Rpb24gPT0gQUNUSU9OX0VYUEFORCkKKwkJICAgIHsKKwkJCXNwcmludGYoKGNoYXIqKUlPYnVmZiwgXygiU2Nhbm5pbmcgaW5jbHVkZWQgZmlsZTogJXMiKSwKKwkJCSAgICAoY2hhciAqKW5ld19mbmFtZSk7CisJCQltc2dfdHJ1bmNfYXR0cihJT2J1ZmYsIFRSVUUsIGhsX2F0dHIoSExGX1IpKTsKKwkJICAgIH0KKyNlbmRpZgorCQl9CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgLyoKKwkgICAgICogQ2hlY2sgaWYgdGhlIGxpbmUgaXMgYSBkZWZpbmUgKHR5cGUgPT0gRklORF9ERUZJTkUpCisJICAgICAqLworCSAgICBwID0gbGluZTsKK3NlYXJjaF9saW5lOgorCSAgICBkZWZpbmVfbWF0Y2hlZCA9IEZBTFNFOworCSAgICBpZiAoZGVmX3JlZ21hdGNoLnJlZ3Byb2cgIT0gTlVMTAorCQkJICAgICAgJiYgdmltX3JlZ2V4ZWMoJmRlZl9yZWdtYXRjaCwgbGluZSwgKGNvbG5yX1QpMCkpCisJICAgIHsKKwkJLyoKKwkJICogUGF0dGVybiBtdXN0IGJlIGZpcnN0IGlkZW50aWZpZXIgYWZ0ZXIgJ2RlZmluZScsIHNvIHNraXAKKwkJICogdG8gdGhhdCBwb3NpdGlvbiBiZWZvcmUgY2hlY2tpbmcgZm9yIG1hdGNoIG9mIHBhdHRlcm4uICBBbHNvCisJCSAqIGRvbid0IGxldCBpdCBtYXRjaCBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzIGlkZW50aWZpZXIuCisJCSAqLworCQlwID0gZGVmX3JlZ21hdGNoLmVuZHBbMF07CisJCXdoaWxlICgqcCAmJiAhdmltX2lzd29yZGMoKnApKQorCQkgICAgcCsrOworCQlkZWZpbmVfbWF0Y2hlZCA9IFRSVUU7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBMb29rIGZvciBhIG1hdGNoLiAgRG9uJ3QgZG8gdGhpcyBpZiB3ZSBhcmUgbG9va2luZyBmb3IgYQorCSAgICAgKiBkZWZpbmUgYW5kIHRoaXMgbGluZSBkaWRuJ3QgbWF0Y2ggZGVmaW5lX3Byb2cgYWJvdmUuCisJICAgICAqLworCSAgICBpZiAoZGVmX3JlZ21hdGNoLnJlZ3Byb2cgPT0gTlVMTCB8fCBkZWZpbmVfbWF0Y2hlZCkKKwkgICAgeworCQlpZiAoZGVmaW5lX21hdGNoZWQKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkJCXx8IChjb250aW51ZV9zdGF0dXMgJiBDT05UX1NPTCkKKyNlbmRpZgorCQkgICAgKQorCQl7CisJCSAgICAvKiBjb21wYXJlIHRoZSBmaXJzdCAibGVuIiBjaGFycyBmcm9tICJwdHIiICovCisJCSAgICBzdGFydHAgPSBza2lwd2hpdGUocCk7CisJCSAgICBpZiAocF9pYykKKwkJCW1hdGNoZWQgPSAhTUJfU1RSTklDTVAoc3RhcnRwLCBwdHIsIGxlbik7CisJCSAgICBlbHNlCisJCQltYXRjaGVkID0gIVNUUk5DTVAoc3RhcnRwLCBwdHIsIGxlbik7CisJCSAgICBpZiAobWF0Y2hlZCAmJiBkZWZpbmVfbWF0Y2hlZCAmJiB3aG9sZQorCQkJCQkJICAmJiB2aW1faXN3b3JkYyhzdGFydHBbbGVuXSkpCisJCQltYXRjaGVkID0gRkFMU0U7CisJCX0KKwkJZWxzZSBpZiAocmVnbWF0Y2gucmVncHJvZyAhPSBOVUxMCisJCQkgJiYgdmltX3JlZ2V4ZWMoJnJlZ21hdGNoLCBsaW5lLCAoY29sbnJfVCkocCAtIGxpbmUpKSkKKwkJeworCQkgICAgbWF0Y2hlZCA9IFRSVUU7CisJCSAgICBzdGFydHAgPSByZWdtYXRjaC5zdGFydHBbMF07CisJCSAgICAvKgorCQkgICAgICogQ2hlY2sgaWYgdGhlIGxpbmUgaXMgbm90IGEgY29tbWVudCBsaW5lICh1bmxlc3Mgd2UgYXJlCisJCSAgICAgKiBsb29raW5nIGZvciBhIGRlZmluZSkuICBBIGxpbmUgc3RhcnRpbmcgd2l0aCAiIyBkZWZpbmUiCisJCSAgICAgKiBpcyBub3QgY29uc2lkZXJlZCB0byBiZSBhIGNvbW1lbnQgbGluZS4KKwkJICAgICAqLworCQkgICAgaWYgKCFkZWZpbmVfbWF0Y2hlZCAmJiBza2lwX2NvbW1lbnRzKQorCQkgICAgeworI2lmZGVmIEZFQVRfQ09NTUVOVFMKKwkJCWlmICgoKmxpbmUgIT0gJyMnIHx8CisJCQkJU1RSTkNNUChza2lwd2hpdGUobGluZSArIDEpLCAiZGVmaW5lIiwgNikgIT0gMCkKKwkJCQkmJiBnZXRfbGVhZGVyX2xlbihsaW5lLCBOVUxMLCBGQUxTRSkpCisJCQkgICAgbWF0Y2hlZCA9IEZBTFNFOworCisJCQkvKgorCQkJICogQWxzbyBjaGVjayBmb3IgYSAiLyAqIiBvciAiLyAvIiBiZWZvcmUgdGhlIG1hdGNoLgorCQkJICogU2tpcHMgbGluZXMgbGlrZSAiaW50IGJhY2t3YXJkczsgIC8gKiBub3JtYWwgaW5kZXgKKwkJCSAqICogLyIgd2hlbiBsb29raW5nIGZvciAibm9ybWFsIi4KKwkJCSAqIE5vdGU6IERvZXNuJ3Qgc2tpcCAiLyAqIiBpbiBjb21tZW50cy4KKwkJCSAqLworCQkJcCA9IHNraXB3aGl0ZShsaW5lKTsKKwkJCWlmIChtYXRjaGVkCisJCQkJfHwgKHBbMF0gPT0gJy8nICYmIHBbMV0gPT0gJyonKSB8fCBwWzBdID09ICcqJykKKyNlbmRpZgorCQkJICAgIGZvciAocCA9IGxpbmU7ICpwICYmIHAgPCBzdGFydHA7ICsrcCkKKwkJCSAgICB7CisJCQkJaWYgKG1hdGNoZWQKKwkJCQkJJiYgcFswXSA9PSAnLycKKwkJCQkJJiYgKHBbMV0gPT0gJyonIHx8IHBbMV0gPT0gJy8nKSkKKwkJCQl7CisJCQkJICAgIG1hdGNoZWQgPSBGQUxTRTsKKwkJCQkgICAgLyogQWZ0ZXIgIi8vIiBhbGwgdGV4dCBpcyBjb21tZW50ICovCisJCQkJICAgIGlmIChwWzFdID09ICcvJykKKwkJCQkJYnJlYWs7CisJCQkJICAgICsrcDsKKwkJCQl9CisJCQkJZWxzZSBpZiAoIW1hdGNoZWQgJiYgcFswXSA9PSAnKicgJiYgcFsxXSA9PSAnLycpCisJCQkJeworCQkJCSAgICAvKiBDYW4gZmluZCBtYXRjaCBhZnRlciAiKiAvIi4gKi8KKwkJCQkgICAgbWF0Y2hlZCA9IFRSVUU7CisJCQkJICAgICsrcDsKKwkJCQl9CisJCQkgICAgfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisJaWYgKG1hdGNoZWQpCisJeworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCSAgICBpZiAoYWN0aW9uID09IEFDVElPTl9FWFBBTkQpCisJICAgIHsKKwkJaW50CXJldXNlID0gMDsKKwkJaW50CWFkZF9yOworCQljaGFyX3UJKmF1eDsKKworCQlpZiAoZGVwdGggPT0gLTEgJiYgbG51bSA9PSBjdXJ3aW4tPndfY3Vyc29yLmxudW0pCisJCSAgICBicmVhazsKKwkJZm91bmQgPSBUUlVFOworCQlhdXggPSBwID0gc3RhcnRwOworCQlpZiAoY29udGludWVfc3RhdHVzICYgQ09OVF9BRERJTkcpCisJCXsKKwkJICAgIHAgKz0gY29tcGxldGlvbl9sZW5ndGg7CisJCSAgICBpZiAodmltX2lzd29yZHAocCkpCisJCQlnb3RvIGV4aXRfbWF0Y2hlZDsKKwkJICAgIHAgPSBmaW5kX3dvcmRfc3RhcnQocCk7CisJCX0KKwkJcCA9IGZpbmRfd29yZF9lbmQocCk7CisJCWkgPSAoaW50KShwIC0gYXV4KTsKKworCQlpZiAoKGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfQURESU5HKSAmJiBpID09IGNvbXBsZXRpb25fbGVuZ3RoKQorCQl7CisJCSAgICAvKiBnZXQgdGhlIG5leHQgbGluZSAqLworCQkgICAgLyogSU9TSVpFID4gY29tcGxldGlvbl9sZW5ndGgsIHNvIHRoZSBTVFJOQ1BZIHdvcmtzICovCisJCSAgICBTVFJOQ1BZKElPYnVmZiwgYXV4LCBpKTsKKwkJICAgIGlmICghKCAgICAgZGVwdGggPCAwCisJCQkgICAgJiYgbG51bSA8IGVuZF9sbnVtCisJCQkgICAgJiYgKGxpbmUgPSBtbF9nZXQoKytsbnVtKSkgIT0gTlVMTCkKKwkJCSYmICEoCWRlcHRoID49IDAKKwkJCSAgICAmJiAhdmltX2ZnZXRzKGxpbmUgPSBmaWxlX2xpbmUsCisJCQkJCQkgICAgIExTSVpFLCBmaWxlc1tkZXB0aF0uZnApKSkKKwkJCWdvdG8gZXhpdF9tYXRjaGVkOworCisJCSAgICAvKiB3ZSByZWFkIGEgbGluZSwgc2V0ICJhbHJlYWR5IiB0byBjaGVjayB0aGlzICJsaW5lIiBsYXRlcgorCQkgICAgICogaWYgZGVwdGggPj0gMCB3ZSdsbCBpbmNyZWFzZSBmaWxlc1tkZXB0aF0ubG51bSBmYXIKKwkJICAgICAqIGJlbGxvdyAgLS0gQWNldmVkbyAqLworCQkgICAgYWxyZWFkeSA9IGF1eCA9IHAgPSBza2lwd2hpdGUobGluZSk7CisJCSAgICBwID0gZmluZF93b3JkX3N0YXJ0KHApOworCQkgICAgcCA9IGZpbmRfd29yZF9lbmQocCk7CisJCSAgICBpZiAocCA+IGF1eCkKKwkJICAgIHsKKwkJCWlmICgqYXV4ICE9ICcpJyAmJiBJT2J1ZmZbaS0xXSAhPSBUQUIpCisJCQl7CisJCQkgICAgaWYgKElPYnVmZltpLTFdICE9ICcgJykKKwkJCQlJT2J1ZmZbaSsrXSA9ICcgJzsKKwkJCSAgICAvKiBJT2J1ZiA9fiAiXChca1x8XGlcKS4qICIsIHRodXMgaSA+PSAyKi8KKwkJCSAgICBpZiAocF9qcworCQkJCSYmIChJT2J1ZmZbaS0yXSA9PSAnLicKKwkJCQkgICAgfHwgKHZpbV9zdHJjaHIocF9jcG8sIENQT19KT0lOU1ApID09IE5VTEwKKwkJCQkJJiYgKElPYnVmZltpLTJdID09ICc/JworCQkJCQkgICAgfHwgSU9idWZmW2ktMl0gPT0gJyEnKSkpKQorCQkJCUlPYnVmZltpKytdID0gJyAnOworCQkJfQorCQkJLyogY29weSBhcyBtdWNoIGFzIHBvc2libGUgb2YgdGhlIG5ldyB3b3JkICovCisJCQlpZiAocCAtIGF1eCA+PSBJT1NJWkUgLSBpKQorCQkJICAgIHAgPSBhdXggKyBJT1NJWkUgLSBpIC0gMTsKKwkJCVNUUk5DUFkoSU9idWZmICsgaSwgYXV4LCBwIC0gYXV4KTsKKwkJCWkgKz0gKGludCkocCAtIGF1eCk7CisJCQlyZXVzZSB8PSBDT05UX1NfSVBPUzsKKwkJICAgIH0KKwkJICAgIElPYnVmZltpXSA9IE5VTDsKKwkJICAgIGF1eCA9IElPYnVmZjsKKworCQkgICAgaWYgKGkgPT0gY29tcGxldGlvbl9sZW5ndGgpCisJCQlnb3RvIGV4aXRfbWF0Y2hlZDsKKwkJfQorCisJCWFkZF9yID0gaW5zX2NvbXBsX2FkZF9pbmZlcmNhc2UoYXV4LCBpLAorCQkJY3Vycl9mbmFtZSA9PSBjdXJidWYtPmJfZm5hbWUgPyBOVUxMIDogY3Vycl9mbmFtZSwKKwkJCWRpciwgcmV1c2UpOworCQlpZiAoYWRkX3IgPT0gT0spCisJCSAgICAvKiBpZiBkaXIgd2FzIEJBQ0tXQVJEIHRoZW4gaG9ub3IgaXQganVzdCBvbmNlICovCisJCSAgICBkaXIgPSBGT1JXQVJEOworCQllbHNlIGlmIChhZGRfciA9PSBSRVRfRVJST1IpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJIGlmIChhY3Rpb24gPT0gQUNUSU9OX1NIT1dfQUxMKQorCSAgICB7CisJCWZvdW5kID0gVFJVRTsKKwkJaWYgKCFkaWRfc2hvdykKKwkJICAgIGdvdG9jbWRsaW5lKFRSVUUpOwkJLyogY3Vyc29yIGF0IHN0YXR1cyBsaW5lICovCisJCWlmIChjdXJyX2ZuYW1lICE9IHByZXZfZm5hbWUpCisJCXsKKwkJICAgIGlmIChkaWRfc2hvdykKKwkJCW1zZ19wdXRjaGFyKCdcbicpOwkvKiBjdXJzb3IgYmVsb3cgbGFzdCBvbmUgKi8KKwkJICAgIGlmICghZ290X2ludCkJCS8qIGRvbid0IGRpc3BsYXkgaWYgJ3EnIHR5cGVkCisJCQkJCQkgICAgYXQgIi0tbW9yZS0tIiBtZXNhZ2UgKi8KKwkJCW1zZ19ob21lX3JlcGxhY2VfaGwoY3Vycl9mbmFtZSk7CisJCSAgICBwcmV2X2ZuYW1lID0gY3Vycl9mbmFtZTsKKwkJfQorCQlkaWRfc2hvdyA9IFRSVUU7CisJCWlmICghZ290X2ludCkKKwkJICAgIHNob3dfcGF0X2luX3BhdGgobGluZSwgdHlwZSwgVFJVRSwgYWN0aW9uLAorCQkJICAgIChkZXB0aCA9PSAtMSkgPyBOVUxMIDogZmlsZXNbZGVwdGhdLmZwLAorCQkJICAgIChkZXB0aCA9PSAtMSkgPyAmbG51bSA6ICZmaWxlc1tkZXB0aF0ubG51bSwKKwkJCSAgICBtYXRjaF9jb3VudCsrKTsKKworCQkvKiBTZXQgbWF0Y2hlZCBmbGFnIGZvciB0aGlzIGZpbGUgYW5kIGFsbCB0aGUgb25lcyB0aGF0CisJCSAqIGluY2x1ZGUgaXQgKi8KKwkJZm9yIChpID0gMDsgaSA8PSBkZXB0aDsgKytpKQorCQkgICAgZmlsZXNbaV0ubWF0Y2hlZCA9IFRSVUU7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoLS1jb3VudCA8PSAwKQorCSAgICB7CisJCWZvdW5kID0gVFJVRTsKKwkJaWYgKGRlcHRoID09IC0xICYmIGxudW0gPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKwkJCQkJCSAgICAgICYmIGdfZG9fdGFncHJldmlldyA9PSAwCisjZW5kaWYKKwkJCQkJCSAgICAgICkKKwkJICAgIEVNU0coXygiRTM4NzogTWF0Y2ggaXMgb24gY3VycmVudCBsaW5lIikpOworCQllbHNlIGlmIChhY3Rpb24gPT0gQUNUSU9OX1NIT1cpCisJCXsKKwkJICAgIHNob3dfcGF0X2luX3BhdGgobGluZSwgdHlwZSwgZGlkX3Nob3csIGFjdGlvbiwKKwkJCShkZXB0aCA9PSAtMSkgPyBOVUxMIDogZmlsZXNbZGVwdGhdLmZwLAorCQkJKGRlcHRoID09IC0xKSA/ICZsbnVtIDogJmZpbGVzW2RlcHRoXS5sbnVtLCAxTCk7CisJCSAgICBkaWRfc2hvdyA9IFRSVUU7CisJCX0KKwkJZWxzZQorCQl7CisjaWZkZWYgRkVBVF9HVUkKKwkJICAgIG5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCQkgICAgLyogIjpwc2VhcmNoIiB1c2VzIHRoZSBwcmV2aWV3IHdpbmRvdyAqLworCQkgICAgaWYgKGdfZG9fdGFncHJldmlldyAhPSAwKQorCQkgICAgeworCQkJY3Vyd2luX3NhdmUgPSBjdXJ3aW47CisJCQlwcmVwYXJlX3RhZ3ByZXZpZXcoKTsKKwkJICAgIH0KKyNlbmRpZgorCQkgICAgaWYgKGFjdGlvbiA9PSBBQ1RJT05fU1BMSVQpCisJCSAgICB7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJCQlpZiAod2luX3NwbGl0KDAsIDApID09IEZBSUwpCisjZW5kaWYKKwkJCSAgICBicmVhazsKKyNpZmRlZiBGRUFUX1NDUk9MTEJJTkQKKwkJCWN1cndpbi0+d19wX3NjYiA9IEZBTFNFOworI2VuZGlmCisJCSAgICB9CisJCSAgICBpZiAoZGVwdGggPT0gLTEpCisJCSAgICB7CisJCQkvKiBtYXRjaCBpbiBjdXJyZW50IGZpbGUgKi8KKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCQkJaWYgKGdfZG9fdGFncHJldmlldyAhPSAwKQorCQkJeworCQkJICAgIGlmIChnZXRmaWxlKDAsIGN1cndpbl9zYXZlLT53X2J1ZmZlci0+Yl9mbmFtZSwKKwkJCQkJCSBOVUxMLCBUUlVFLCBsbnVtLCBGQUxTRSkgPiAwKQorCQkJCWJyZWFrOwkvKiBmYWlsZWQgdG8ganVtcCB0byBmaWxlICovCisJCQl9CisJCQllbHNlCisjZW5kaWYKKwkJCSAgICBzZXRwY21hcmsoKTsKKwkJCWN1cndpbi0+d19jdXJzb3IubG51bSA9IGxudW07CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlpZiAoZ2V0ZmlsZSgwLCBmaWxlc1tkZXB0aF0ubmFtZSwgTlVMTCwgVFJVRSwKKwkJCQkJCWZpbGVzW2RlcHRoXS5sbnVtLCBGQUxTRSkgPiAwKQorCQkJICAgIGJyZWFrOwkvKiBmYWlsZWQgdG8ganVtcCB0byBmaWxlICovCisJCQkvKiBhdXRvY29tbWFuZHMgbWF5IGhhdmUgY2hhbmdlZCB0aGUgbG51bSwgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdGhhdCBoZXJlICovCisJCQljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBmaWxlc1tkZXB0aF0ubG51bTsKKwkJICAgIH0KKwkJfQorCQlpZiAoYWN0aW9uICE9IEFDVElPTl9TSE9XKQorCQl7CisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IChjb2xucl9UKSAoc3RhcnRwIC0gbGluZSk7CisJCSAgICBjdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKwkJfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKwkJaWYgKGdfZG9fdGFncHJldmlldyAhPSAwCisJCQkmJiBjdXJ3aW4gIT0gY3Vyd2luX3NhdmUgJiYgd2luX3ZhbGlkKGN1cndpbl9zYXZlKSkKKwkJeworCQkgICAgLyogUmV0dXJuIGN1cnNvciB0byB3aGVyZSB3ZSB3ZXJlICovCisJCSAgICB2YWxpZGF0ZV9jdXJzb3IoKTsKKwkJICAgIHJlZHJhd19sYXRlcihWQUxJRCk7CisJCSAgICB3aW5fZW50ZXIoY3Vyd2luX3NhdmUsIFRSVUUpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJICAgIH0KKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKK2V4aXRfbWF0Y2hlZDoKKyNlbmRpZgorCSAgICBtYXRjaGVkID0gRkFMU0U7CisJICAgIC8qIGxvb2sgZm9yIG90aGVyIG1hdGNoZXMgaW4gdGhlIHJlc3Qgb2YgdGhlIGxpbmUgaWYgd2UKKwkgICAgICogYXJlIG5vdCBhdCB0aGUgZW5kIG9mIGl0IGFscmVhZHkgKi8KKwkgICAgaWYgKGRlZl9yZWdtYXRjaC5yZWdwcm9nID09IE5VTEwKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkJICAgICYmIGFjdGlvbiA9PSBBQ1RJT05fRVhQQU5ECisJCSAgICAmJiAhKGNvbnRpbnVlX3N0YXR1cyAmIENPTlRfU09MKQorI2VuZGlmCisJCSAgICAmJiAqKHAgPSBzdGFydHAgKyAxKSkKKwkJZ290byBzZWFyY2hfbGluZTsKKwl9CisJbGluZV9icmVha2NoZWNrKCk7CisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJaWYgKGFjdGlvbiA9PSBBQ1RJT05fRVhQQU5EKQorCSAgICBpbnNfY29tcGxfY2hlY2tfa2V5cygpOworCWlmIChnb3RfaW50IHx8IGNvbXBsZXRpb25faW50ZXJydXB0ZWQpCisjZWxzZQorCWlmIChnb3RfaW50KQorI2VuZGlmCisJICAgIGJyZWFrOworCisJLyoKKwkgKiBSZWFkIHRoZSBuZXh0IGxpbmUuICBXaGVuIHJlYWRpbmcgYW4gaW5jbHVkZWQgZmlsZSBhbmQgZW5jb3VudGVyaW5nCisJICogZW5kLW9mLWZpbGUsIGNsb3NlIHRoZSBmaWxlIGFuZCBjb250aW51ZSBpbiB0aGUgZmlsZSB0aGF0IGluY2x1ZGVkCisJICogaXQuCisJICovCisJd2hpbGUgKGRlcHRoID49IDAgJiYgIWFscmVhZHkKKwkJJiYgdmltX2ZnZXRzKGxpbmUgPSBmaWxlX2xpbmUsIExTSVpFLCBmaWxlc1tkZXB0aF0uZnApKQorCXsKKwkgICAgZmNsb3NlKGZpbGVzW2RlcHRoXS5mcCk7CisJICAgIC0tb2xkX2ZpbGVzOworCSAgICBmaWxlc1tvbGRfZmlsZXNdLm5hbWUgPSBmaWxlc1tkZXB0aF0ubmFtZTsKKwkgICAgZmlsZXNbb2xkX2ZpbGVzXS5tYXRjaGVkID0gZmlsZXNbZGVwdGhdLm1hdGNoZWQ7CisJICAgIC0tZGVwdGg7CisJICAgIGN1cnJfZm5hbWUgPSAoZGVwdGggPT0gLTEpID8gY3VyYnVmLT5iX2ZuYW1lCisJCQkJICAgICAgIDogZmlsZXNbZGVwdGhdLm5hbWU7CisJICAgIGlmIChkZXB0aCA8IGRlcHRoX2Rpc3BsYXllZCkKKwkJZGVwdGhfZGlzcGxheWVkID0gZGVwdGg7CisJfQorCWlmIChkZXB0aCA+PSAwKQkJLyogd2UgY291bGQgcmVhZCB0aGUgbGluZSAqLworCSAgICBmaWxlc1tkZXB0aF0ubG51bSsrOworCWVsc2UgaWYgKCFhbHJlYWR5KQorCXsKKwkgICAgaWYgKCsrbG51bSA+IGVuZF9sbnVtKQorCQlicmVhazsKKwkgICAgbGluZSA9IG1sX2dldChsbnVtKTsKKwl9CisJYWxyZWFkeSA9IE5VTEw7CisgICAgfQorICAgIC8qIEVuZCBvZiBiaWcgZm9yICg7OykgbG9vcC4gKi8KKworICAgIC8qIENsb3NlIGFueSBmaWxlcyB0aGF0IGFyZSBzdGlsbCBvcGVuLiAqLworICAgIGZvciAoaSA9IDA7IGkgPD0gZGVwdGg7IGkrKykKKyAgICB7CisJZmNsb3NlKGZpbGVzW2ldLmZwKTsKKwl2aW1fZnJlZShmaWxlc1tpXS5uYW1lKTsKKyAgICB9CisgICAgZm9yIChpID0gb2xkX2ZpbGVzOyBpIDwgbWF4X3BhdGhfZGVwdGg7IGkrKykKKwl2aW1fZnJlZShmaWxlc1tpXS5uYW1lKTsKKyAgICB2aW1fZnJlZShmaWxlcyk7CisKKyAgICBpZiAodHlwZSA9PSBDSEVDS19QQVRIKQorICAgIHsKKwlpZiAoIWRpZF9zaG93KQorCXsKKwkgICAgaWYgKGFjdGlvbiAhPSBBQ1RJT05fU0hPV19BTEwpCisJCU1TRyhfKCJBbGwgaW5jbHVkZWQgZmlsZXMgd2VyZSBmb3VuZCIpKTsKKwkgICAgZWxzZQorCQlNU0coXygiTm8gaW5jbHVkZWQgZmlsZXMiKSk7CisJfQorICAgIH0KKyAgICBlbHNlIGlmICghZm91bmQKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkJICAgICYmIGFjdGlvbiAhPSBBQ1RJT05fRVhQQU5ECisjZW5kaWYKKwkJCQkJCSkKKyAgICB7CisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJaWYgKGdvdF9pbnQgfHwgY29tcGxldGlvbl9pbnRlcnJ1cHRlZCkKKyNlbHNlCisJaWYgKGdvdF9pbnQpCisjZW5kaWYKKwkgICAgRU1TRyhfKGVfaW50ZXJyKSk7CisJZWxzZSBpZiAodHlwZSA9PSBGSU5EX0RFRklORSkKKwkgICAgRU1TRyhfKCJFMzg4OiBDb3VsZG4ndCBmaW5kIGRlZmluaXRpb24iKSk7CisJZWxzZQorCSAgICBFTVNHKF8oIkUzODk6IENvdWxkbid0IGZpbmQgcGF0dGVybiIpKTsKKyAgICB9CisgICAgaWYgKGFjdGlvbiA9PSBBQ1RJT05fU0hPVyB8fCBhY3Rpb24gPT0gQUNUSU9OX1NIT1dfQUxMKQorCW1zZ19lbmQoKTsKKworZnBpcF9lbmQ6CisgICAgdmltX2ZyZWUoZmlsZV9saW5lKTsKKyAgICB2aW1fZnJlZShyZWdtYXRjaC5yZWdwcm9nKTsKKyAgICB2aW1fZnJlZShpbmNsX3JlZ21hdGNoLnJlZ3Byb2cpOworICAgIHZpbV9mcmVlKGRlZl9yZWdtYXRjaC5yZWdwcm9nKTsKKworI2lmZGVmIFJJU0NPUworICAgLyogUmVzdG9yZSBwcmV2aW91cyBmaWxlIG11bmdpbmcgc3RhdGUuICovCisgICAgX19yaXNjb3NpZnlfY29udHJvbCA9IHByZXZpb3VzX211bmdpbmc7CisjZW5kaWYKK30KKworICAgIHN0YXRpYyB2b2lkCitzaG93X3BhdF9pbl9wYXRoKGxpbmUsIHR5cGUsIGRpZF9zaG93LCBhY3Rpb24sIGZwLCBsbnVtLCBjb3VudCkKKyAgICBjaGFyX3UgICpsaW5lOworICAgIGludAkgICAgdHlwZTsKKyAgICBpbnQJICAgIGRpZF9zaG93OworICAgIGludAkgICAgYWN0aW9uOworICAgIEZJTEUgICAgKmZwOworICAgIGxpbmVucl9UICpsbnVtOworICAgIGxvbmcgICAgY291bnQ7Cit7CisgICAgY2hhcl91ICAqcDsKKworICAgIGlmIChkaWRfc2hvdykKKwltc2dfcHV0Y2hhcignXG4nKTsJLyogY3Vyc29yIGJlbG93IGxhc3Qgb25lICovCisgICAgZWxzZQorCWdvdG9jbWRsaW5lKFRSVUUpOwkvKiBjdXJzb3IgYXQgc3RhdHVzIGxpbmUgKi8KKyAgICBpZiAoZ290X2ludCkJCS8qICdxJyB0eXBlZCBhdCAiLS1tb3JlLS0iIG1lc3NhZ2UgKi8KKwlyZXR1cm47CisgICAgZm9yICg7OykKKyAgICB7CisJcCA9IGxpbmUgKyBTVFJMRU4obGluZSkgLSAxOworCWlmIChmcCAhPSBOVUxMKQorCXsKKwkgICAgLyogV2UgdXNlZCBmZ2V0cygpLCBzbyBnZXQgcmlkIG9mIG5ld2xpbmUgYXQgZW5kICovCisJICAgIGlmIChwID49IGxpbmUgJiYgKnAgPT0gJ1xuJykKKwkJLS1wOworCSAgICBpZiAocCA+PSBsaW5lICYmICpwID09ICdccicpCisJCS0tcDsKKwkgICAgKihwICsgMSkgPSBOVUw7CisJfQorCWlmIChhY3Rpb24gPT0gQUNUSU9OX1NIT1dfQUxMKQorCXsKKwkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgIiUzbGQ6ICIsIGNvdW50KTsJLyogc2hvdyBtYXRjaCBuciAqLworCSAgICBtc2dfcHV0cyhJT2J1ZmYpOworCSAgICBzcHJpbnRmKChjaGFyICopSU9idWZmLCAiJTRsZCIsICpsbnVtKTsJLyogc2hvdyBsaW5lIG5yICovCisJCQkJCQkvKiBIaWdobGlnaHQgbGluZSBudW1iZXJzICovCisJICAgIG1zZ19wdXRzX2F0dHIoSU9idWZmLCBobF9hdHRyKEhMRl9OKSk7CisJICAgIE1TR19QVVRTKCIgIik7CisJfQorCW1zZ19wcnRfbGluZShsaW5lKTsKKwlvdXRfZmx1c2goKTsJCQkvKiBzaG93IG9uZSBsaW5lIGF0IGEgdGltZSAqLworCisJLyogRGVmaW5pdGlvbiBjb250aW51ZXMgdW50aWwgbGluZSB0aGF0IGRvZXNuJ3QgZW5kIHdpdGggJ1wnICovCisJaWYgKGdvdF9pbnQgfHwgdHlwZSAhPSBGSU5EX0RFRklORSB8fCBwIDwgbGluZSB8fCAqcCAhPSAnXFwnKQorCSAgICBicmVhazsKKworCWlmIChmcCAhPSBOVUxMKQorCXsKKwkgICAgaWYgKHZpbV9mZ2V0cyhsaW5lLCBMU0laRSwgZnApKSAvKiBlbmQgb2YgZmlsZSAqLworCQlicmVhazsKKwkgICAgKysqbG51bTsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKCsrKmxudW0gPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwkJYnJlYWs7CisJICAgIGxpbmUgPSBtbF9nZXQoKmxudW0pOworCX0KKwltc2dfcHV0Y2hhcignXG4nKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVklNSU5GTworICAgIGludAorcmVhZF92aW1pbmZvX3NlYXJjaF9wYXR0ZXJuKHZpcnAsIGZvcmNlKQorICAgIHZpcl9UCSp2aXJwOworICAgIGludAkJZm9yY2U7Cit7CisgICAgY2hhcl91CSpscDsKKyAgICBpbnQJCWlkeCA9IC0xOworICAgIGludAkJbWFnaWMgPSBGQUxTRTsKKyAgICBpbnQJCW5vX3NjcyA9IEZBTFNFOworICAgIGludAkJb2ZmX2xpbmUgPSBGQUxTRTsKKyAgICBpbnQJCW9mZl9lbmQgPSBGQUxTRTsKKyAgICBsb25nCW9mZiA9IDA7CisgICAgaW50CQlzZXRsYXN0ID0gRkFMU0U7CisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKyAgICBzdGF0aWMgaW50CWhsc2VhcmNoX29uID0gRkFMU0U7CisjZW5kaWYKKyAgICBjaGFyX3UJKnZhbDsKKworICAgIC8qCisgICAgICogT2xkIGxpbmUgdHlwZXM6CisgICAgICogIi9wYXQiLCAiJnBhdCI6IHNlYXJjaC9zdWJzdC4gcGF0CisgICAgICogIn4vcGF0IiwgIn4mcGF0IjogbGFzdCB1c2VkIHNlYXJjaC9zdWJzdC4gcGF0CisgICAgICogTmV3IGxpbmUgdHlwZXM6CisgICAgICogIn5oIiwgIn5IIjogaGxzZWFyY2ggaGlnaGxpZ2h0aW5nIG9mZi9vbgorICAgICAqICJ+PG1hZ2ljPjxzbWFydGNhc2U+PGxpbmU+PGVuZD48b2ZmPjxsYXN0Pjx3aGljaD5wYXQiCisgICAgICogPG1hZ2ljPjogJ20nIG9mZiwgJ00nIG9uCisgICAgICogPHNtYXJ0Y2FzZT46ICdzJyBvZmYsICdTJyBvbgorICAgICAqIDxsaW5lPjogJ0wnIGxpbmUgb2Zmc2V0LCAnbCcgY2hhciBvZmZzZXQKKyAgICAgKiA8ZW5kPjogJ0UnIGZyb20gZW5kLCAnZScgZnJvbSBzdGFydAorICAgICAqIDxvZmY+OiBkZWNpbWFsLCBvZmZzZXQKKyAgICAgKiA8bGFzdD46ICd+JyBsYXN0IHVzZWQgcGF0dGVybgorICAgICAqIDx3aGljaD46ICcvJyBzZWFyY2ggcGF0LCAnJicgc3Vic3QuIHBhdAorICAgICAqLworICAgIGxwID0gdmlycC0+dmlyX2xpbmU7CisgICAgaWYgKGxwWzBdID09ICd+JyAmJiAobHBbMV0gPT0gJ20nIHx8IGxwWzFdID09ICdNJykpCS8qIG5ldyBsaW5lIHR5cGUgKi8KKyAgICB7CisJaWYgKGxwWzFdID09ICdNJykJCS8qIG1hZ2ljIG9uICovCisJICAgIG1hZ2ljID0gVFJVRTsKKwlpZiAobHBbMl0gPT0gJ3MnKQorCSAgICBub19zY3MgPSBUUlVFOworCWlmIChscFszXSA9PSAnTCcpCisJICAgIG9mZl9saW5lID0gVFJVRTsKKwlpZiAobHBbNF0gPT0gJ0UnKQorCSAgICBvZmZfZW5kID0gVFJVRTsKKwlscCArPSA1OworCW9mZiA9IGdldGRpZ2l0cygmbHApOworICAgIH0KKyAgICBpZiAobHBbMF0gPT0gJ34nKQkJLyogdXNlIHRoaXMgcGF0dGVybiBmb3IgbGFzdC11c2VkIHBhdHRlcm4gKi8KKyAgICB7CisJc2V0bGFzdCA9IFRSVUU7CisJbHArKzsKKyAgICB9CisgICAgaWYgKGxwWzBdID09ICcvJykKKwlpZHggPSBSRV9TRUFSQ0g7CisgICAgZWxzZSBpZiAobHBbMF0gPT0gJyYnKQorCWlkeCA9IFJFX1NVQlNUOworI2lmZGVmIEZFQVRfU0VBUkNIX0VYVFJBCisgICAgZWxzZSBpZiAobHBbMF0gPT0gJ2gnKQkvKiB+aDogJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcgb2ZmICovCisJaGxzZWFyY2hfb24gPSBGQUxTRTsKKyAgICBlbHNlIGlmIChscFswXSA9PSAnSCcpCS8qIH5IOiAnaGxzZWFyY2gnIGhpZ2hsaWdodGluZyBvbiAqLworCWhsc2VhcmNoX29uID0gVFJVRTsKKyNlbmRpZgorICAgIGlmIChpZHggPj0gMCkKKyAgICB7CisJaWYgKGZvcmNlIHx8IHNwYXRzW2lkeF0ucGF0ID09IE5VTEwpCisJeworCSAgICB2YWwgPSB2aW1pbmZvX3JlYWRzdHJpbmcodmlycCwgKGludCkobHAgLSB2aXJwLT52aXJfbGluZSArIDEpLAorCQkJCQkJCQkJVFJVRSk7CisJICAgIGlmICh2YWwgIT0gTlVMTCkKKwkgICAgeworCQlzZXRfbGFzdF9zZWFyY2hfcGF0KHZhbCwgaWR4LCBtYWdpYywgc2V0bGFzdCk7CisJCXZpbV9mcmVlKHZhbCk7CisJCXNwYXRzW2lkeF0ubm9fc2NzID0gbm9fc2NzOworCQlzcGF0c1tpZHhdLm9mZi5saW5lID0gb2ZmX2xpbmU7CisJCXNwYXRzW2lkeF0ub2ZmLmVuZCA9IG9mZl9lbmQ7CisJCXNwYXRzW2lkeF0ub2ZmLm9mZiA9IG9mZjsKKyNpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQorCQlpZiAoc2V0bGFzdCkKKwkJICAgIG5vX2hsc2VhcmNoID0gIWhsc2VhcmNoX29uOworI2VuZGlmCisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiB2aW1pbmZvX3JlYWRsaW5lKHZpcnApOworfQorCisgICAgdm9pZAord3JpdGVfdmltaW5mb19zZWFyY2hfcGF0dGVybihmcCkKKyAgICBGSUxFCSpmcDsKK3sKKyAgICBpZiAoZ2V0X3ZpbWluZm9fcGFyYW1ldGVyKCcvJykgIT0gMCkKKyAgICB7CisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKwlmcHJpbnRmKGZwLCAiXG4jIGhsc2VhcmNoIG9uIChIKSBvciBvZmYgKGgpOlxufiVjIiwKKwkgICAgKG5vX2hsc2VhcmNoIHx8IGZpbmRfdmltaW5mb19wYXJhbWV0ZXIoJ2gnKSAhPSBOVUxMKSA/ICdoJyA6ICdIJyk7CisjZW5kaWYKKwl3dnNwX29uZShmcCwgUkVfU0VBUkNILCAiIiwgJy8nKTsKKwl3dnNwX29uZShmcCwgUkVfU1VCU1QsICJTdWJzdGl0dXRlICIsICcmJyk7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK3d2c3Bfb25lKGZwLCBpZHgsIHMsIHNjKQorICAgIEZJTEUJKmZwOwkvKiBmaWxlIHRvIHdyaXRlIHRvICovCisgICAgaW50CQlpZHg7CS8qIHNwYXRzW10gaW5kZXggKi8KKyAgICBjaGFyCSpzOwkvKiBzZWFyY2ggcGF0ICovCisgICAgaW50CQlzYzsJLyogZGlyIGNoYXIgKi8KK3sKKyAgICBpZiAoc3BhdHNbaWR4XS5wYXQgIT0gTlVMTCkKKyAgICB7CisJZnByaW50ZihmcCwgIlxuIyBMYXN0ICVzU2VhcmNoIFBhdHRlcm46XG5+Iiwgcyk7CisJLyogb2ZmLmRpciBpcyBub3Qgc3RvcmVkLCBpdCdzIHJlc2V0IHRvIGZvcndhcmQgKi8KKwlmcHJpbnRmKGZwLCAiJWMlYyVjJWMlbGQlcyVjIiwKKwkJc3BhdHNbaWR4XS5tYWdpYyAgICA/ICdNJyA6ICdtJywJLyogbWFnaWMgKi8KKwkJc3BhdHNbaWR4XS5ub19zY3MgICA/ICdzJyA6ICdTJywJLyogc21hcnRjYXNlICovCisJCXNwYXRzW2lkeF0ub2ZmLmxpbmUgPyAnTCcgOiAnbCcsCS8qIGxpbmUgb2Zmc2V0ICovCisJCXNwYXRzW2lkeF0ub2ZmLmVuZCAgPyAnRScgOiAnZScsCS8qIG9mZnNldCBmcm9tIGVuZCAqLworCQlzcGF0c1tpZHhdLm9mZi5vZmYsCQkJLyogb2Zmc2V0ICovCisJCWxhc3RfaWR4ID09IGlkeAkgICAgPyAifiIgOiAiIiwJCS8qIGxhc3QgdXNlZCBwYXQgKi8KKwkJc2MpOworCXZpbWluZm9fd3JpdGVzdHJpbmcoZnAsIHNwYXRzW2lkeF0ucGF0KTsKKyAgICB9Cit9CisjZW5kaWYgLyogRkVBVF9WSU1JTkZPICovCmRpZmYgLS1naXQgYS9zcmMvc3RydWN0cy5oIGIvc3JjL3N0cnVjdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzBhNzk1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0cnVjdHMuaApAQCAtMCwwICsxLDE4ODcgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdmFyaW91cyBkZWZpbml0aW9ucyBvZiBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHVzZWQgYnkgVmltCisgKi8KKworLyoKKyAqIFRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyBpbiB0aGUgU0FTIGNvbXBpbGVyIHRoYXQgbWFrZXMgdHlwZWRlZnMgbm90CisgKiB2YWxpZCBpbiBpbmNsdWRlIGZpbGVzLiAgSGFzIGJlZW4gZml4ZWQgaW4gdmVyc2lvbiA2LjU4LgorICovCisjaWYgZGVmaW5lZChTQVNDKSAmJiBTQVNDIDwgNjU4Cit0eXBlZGVmIGxvbmcJCWxpbmVucl9UOwordHlwZWRlZiB1bnNpZ25lZAljb2xucl9UOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlzaG9ydF91OworI2VuZGlmCisKKy8qCisgKiBwb3NpdGlvbiBpbiBmaWxlIG9yIGJ1ZmZlcgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGxpbmVucl9UCWxudW07CS8qIGxpbmUgbnVtYmVyICovCisgICAgY29sbnJfVAljb2w7CS8qIGNvbHVtbiBudW1iZXIgKi8KKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgY29sbnJfVAljb2xhZGQ7CisjZW5kaWYKK30gcG9zX1Q7CisKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisjIGRlZmluZSBJTklUX1BPU19UIHswLCAwLCAwfQorI2Vsc2UKKyMgZGVmaW5lIElOSVRfUE9TX1QgezAsIDB9CisjZW5kaWYKKworLyoKKyAqIFNhbWUsIGJ1dCB3aXRob3V0IGNvbGFkZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBsaW5lbnJfVAlsbnVtOwkvKiBsaW5lIG51bWJlciAqLworICAgIGNvbG5yX1QJY29sOwkvKiBjb2x1bW4gbnVtYmVyICovCit9IGxwb3NfVDsKKworLyoKKyAqIFN0cnVjdHVyZSB1c2VkIGZvciBncm93aW5nIGFycmF5cy4KKyAqIFRoaXMgaXMgdXNlZCB0byBzdG9yZSBpbmZvcm1hdGlvbiB0aGF0IG9ubHkgZ3Jvd3MsIGlzIGRlbGV0ZWQgYWxsIGF0CisgKiBvbmNlLCBhbmQgbmVlZHMgdG8gYmUgYWNjZXNzZWQgYnkgaW5kZXguICBTZWUgZ2FfY2xlYXIoKSBhbmQgZ2FfZ3JvdygpLgorICovCit0eXBlZGVmIHN0cnVjdCBncm93YXJyYXkKK3sKKyAgICBpbnQJICAgIGdhX2xlbjsJCSAgICAvKiBjdXJyZW50IG51bWJlciBvZiBpdGVtcyB1c2VkICovCisgICAgaW50CSAgICBnYV9yb29tOwkJICAgIC8qIG51bWJlciBvZiB1bnVzZWQgaXRlbXMgYXQgdGhlIGVuZCAqLworICAgIGludAkgICAgZ2FfaXRlbXNpemU7CSAgICAvKiBzaXplb2Ygb25lIGl0ZW0gKi8KKyAgICBpbnQJICAgIGdhX2dyb3dzaXplOwkgICAgLyogbnVtYmVyIG9mIGl0ZW1zIHRvIGdyb3cgZWFjaCB0aW1lICovCisgICAgdm9pZCAgICAqZ2FfZGF0YTsJCSAgICAvKiBwb2ludGVyIHRvIHRoZSBmaXJzdCBpdGVtICovCit9IGdhcnJheV9UOworCisjZGVmaW5lIEdBX0VNUFRZICAgIHswLCAwLCAwLCAwLCBOVUxMfQorCisvKgorICogVGhpcyBpcyBoZXJlIGJlY2F1c2UgcmVnZXhwLmggbmVlZHMgcG9zX1QgYW5kIGJlbG93IHJlZ3Byb2dfVCBpcyB1c2VkLgorICovCisjaW5jbHVkZSAicmVnZXhwLmgiCisKK3R5cGVkZWYgc3RydWN0IHdpbmRvdwl3aW5fVDsKK3R5cGVkZWYgc3RydWN0IHdpbmluZm8Jd2luaW5mb19UOwordHlwZWRlZiBzdHJ1Y3QgZnJhbWUJZnJhbWVfVDsKK3R5cGVkZWYgaW50CQlzY2lkX1Q7CQkvKiBzY3JpcHQgSUQgKi8KKworLyoKKyAqIFRoaXMgaXMgaGVyZSBiZWNhdXNlIGd1aS5oIG5lZWRzIHRoZSBwb3NfVCBhbmQgd2luX1QsIGFuZCB3aW5fVCBuZWVkcyBndWkuaAorICogZm9yIHNjcm9sbGJhcl9ULgorICovCisjaWZkZWYgRkVBVF9HVUkKKyMgaW5jbHVkZSAiZ3VpLmgiCisjZWxzZQorIyBpZmRlZiBGRUFUX1hDTElQQk9BUkQKKyMgIGluY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyMgZW5kaWYKKyMgZGVmaW5lIGd1aWNvbG9yX1QgaW50CQkvKiBhdm9pZCBlcnJvciBpbiBwcm90b3R5cGVzICovCisjZW5kaWYKKworLyoKKyAqIG1hcmtzOiBwb3NpdGlvbnMgaW4gYSBmaWxlCisgKiAoYSBub3JtYWwgbWFyayBpcyBhIGxudW0vY29sIHBhaXIsIHRoZSBzYW1lIGFzIGEgZmlsZSBwb3NpdGlvbikKKyAqLworCisvKiAoTm90ZTogZm9yIEVCQ0RJQyB0aGVyZSBhcmUgbW9yZSB0aGFuIDI2LCBiZWNhdXNlIHRoZXJlIGFyZSBnYXBzIGluIHRoZQorICogYWxwaGFiZXQgY29kaW5nLiAgVG8gbWluaW1pemUgY2hhbmdlcyB0byB0aGUgY29kZSwgSSBkZWNpZGVkIHRvIGp1c3QKKyAqIGluY3JlYXNlIHRoZSBudW1iZXIgb2YgcG9zc2libGUgbWFya3MuICovCisjZGVmaW5lIE5NQVJLUwkJKCd6JyAtICdhJyArIDEpCS8qIG1heC4gIyBvZiBuYW1lZCBtYXJrcyAqLworI2RlZmluZSBKVU1QTElTVFNJWkUJMTAwCQkvKiBtYXguICMgb2YgbWFya3MgaW4ganVtcCBsaXN0ICovCisjZGVmaW5lIFRBR1NUQUNLU0laRQkyMAkJLyogbWF4LiAjIG9mIHRhZ3MgaW4gdGFnIHN0YWNrICovCisKK3R5cGVkZWYgc3RydWN0IGZpbGVtYXJrCit7CisgICAgcG9zX1QJbWFyazsJCS8qIGN1cnNvciBwb3NpdGlvbiAqLworICAgIGludAkJZm51bTsJCS8qIGZpbGUgbnVtYmVyICovCit9IGZtYXJrX1Q7CisKKy8qIFh0ZW5kZWQgZmlsZSBtYXJrOiBhbHNvIGhhcyBhIGZpbGUgbmFtZSAqLwordHlwZWRlZiBzdHJ1Y3QgeGZpbGVtYXJrCit7CisgICAgZm1hcmtfVAlmbWFyazsKKyAgICBjaGFyX3UJKmZuYW1lOwkJLyogZmlsZSBuYW1lLCB1c2VkIHdoZW4gZm51bSA9PSAwICovCit9IHhmbWFya19UOworCisvKgorICogVGhlIHRhZ2d5IHN0cnVjdCBpcyB1c2VkIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIDp0YWcgY29tbWFuZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgdGFnZ3kKK3sKKyAgICBjaGFyX3UJKnRhZ25hbWU7CS8qIHRhZyBuYW1lICovCisgICAgZm1hcmtfVAlmbWFyazsJCS8qIGN1cnNvciBwb3NpdGlvbiBCRUZPUkUgIjp0YWciICovCisgICAgaW50CQljdXJfbWF0Y2g7CS8qIG1hdGNoIG51bWJlciAqLworICAgIGludAkJY3VyX2ZudW07CS8qIGJ1ZmZlciBudW1iZXIgdXNlZCBmb3IgY3VyX21hdGNoICovCit9IHRhZ2d5X1Q7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgb3B0aW9ucyB0aGF0IGFyZSBsb2NhbCB0byBhIHdpbmRvdy4KKyAqIFVzZWQgdHdpY2UgaW4gYSB3aW5kb3c6IGZvciB0aGUgY3VycmVudCBidWZmZXIgYW5kIGZvciBhbGwgYnVmZmVycy4KKyAqIEFsc28gdXNlZCBpbiB3aW5pbmZvX1QuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisjaWZkZWYgRkVBVF9BUkFCSUMKKyAgICBpbnQJCXdvX2FyYWI7CisjIGRlZmluZSB3X3BfYXJhYiB3X29uZWJ1Zl9vcHQud29fYXJhYgkvKiAnYXJhYmljJyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9ESUZGCisgICAgaW50CQl3b19kaWZmOworIyBkZWZpbmUgd19wX2RpZmYgd19vbmVidWZfb3B0LndvX2RpZmYJLyogJ2RpZmYnICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBsb25nCXdvX2ZkYzsKKyMgZGVmaW5lIHdfcF9mZGMgd19vbmVidWZfb3B0LndvX2ZkYwkvKiAnZm9sZGNvbHVtbicgKi8KKyAgICBpbnQJCXdvX2ZlbjsKKyMgZGVmaW5lIHdfcF9mZW4gd19vbmVidWZfb3B0LndvX2ZlbgkvKiAnZm9sZGVuYWJsZScgKi8KKyAgICBjaGFyX3UJKndvX2ZkaTsKKyMgZGVmaW5lIHdfcF9mZGkgd19vbmVidWZfb3B0LndvX2ZkaQkvKiAnZm9sZGlnbm9yZScgKi8KKyAgICBsb25nCXdvX2ZkbDsKKyMgZGVmaW5lIHdfcF9mZGwgd19vbmVidWZfb3B0LndvX2ZkbAkvKiAnZm9sZGxldmVsJyAqLworICAgIGNoYXJfdQkqd29fZmRtOworIyBkZWZpbmUgd19wX2ZkbSB3X29uZWJ1Zl9vcHQud29fZmRtCS8qICdmb2xkbWV0aG9kJyAqLworICAgIGxvbmcJd29fZm1sOworIyBkZWZpbmUgd19wX2ZtbCB3X29uZWJ1Zl9vcHQud29fZm1sCS8qICdmb2xkbWlubGluZXMnICovCisgICAgbG9uZwl3b19mZG47CisjIGRlZmluZSB3X3BfZmRuIHdfb25lYnVmX29wdC53b19mZG4JLyogJ2ZvbGRuZXh0bWF4JyAqLworIyBpZmRlZiBGRUFUX0VWQUwKKyAgICBjaGFyX3UJKndvX2ZkZTsKKyMgZGVmaW5lIHdfcF9mZGUgd19vbmVidWZfb3B0LndvX2ZkZQkvKiAnZm9sZGV4cHInICovCisgICAgY2hhcl91CSp3b19mZHQ7CisjICBkZWZpbmUgd19wX2ZkdCB3X29uZWJ1Zl9vcHQud29fZmR0CS8qICdmb2xkdGV4dCcgKi8KKyMgZW5kaWYKKyAgICBjaGFyX3UJKndvX2ZtcjsKKyMgZGVmaW5lIHdfcF9mbXIgd19vbmVidWZfb3B0LndvX2ZtcgkvKiAnZm9sZG1hcmtlcicgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfTElORUJSRUFLCisgICAgaW50CQl3b19sYnI7CisjIGRlZmluZSB3X3BfbGJyIHdfb25lYnVmX29wdC53b19sYnIJLyogJ2xpbmVicmVhaycgKi8KKyNlbmRpZgorICAgIGludAkJd29fbGlzdDsKKyNkZWZpbmUgd19wX2xpc3Qgd19vbmVidWZfb3B0LndvX2xpc3QJLyogJ2xpc3QnICovCisgICAgaW50CQl3b19udTsKKyNkZWZpbmUgd19wX251IHdfb25lYnVmX29wdC53b19udQkvKiAnbnVtYmVyJyAqLworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKQorICAgIGludAkJd29fd2ZoOworIyBkZWZpbmUgd19wX3dmaCB3X29uZWJ1Zl9vcHQud29fd2ZoCS8qICd3aW5maXhoZWlnaHQnICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorICAgIGludAkJd29fcHZ3OworIyBkZWZpbmUgd19wX3B2dyB3X29uZWJ1Zl9vcHQud29fcHZ3CS8qICdwcmV2aWV3d2luZG93JyAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9SSUdIVExFRlQKKyAgICBpbnQJCXdvX3JsOworIyBkZWZpbmUgd19wX3JsIHdfb25lYnVmX29wdC53b19ybAkvKiAncmlnaHRsZWZ0JyAqLworICAgIGNoYXJfdQkqd29fcmxjOworIyBkZWZpbmUgd19wX3JsYyB3X29uZWJ1Zl9vcHQud29fcmxjCS8qICdyaWdodGxlZnRjbWQnICovCisjZW5kaWYKKyAgICBsb25nCXdvX3NjcjsKKyNkZWZpbmUgd19wX3NjciB3X29uZWJ1Zl9vcHQud29fc2NyCS8qICdzY3JvbGwnICovCisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisgICAgaW50CQl3b19zY2I7CisjIGRlZmluZSB3X3Bfc2NiIHdfb25lYnVmX29wdC53b19zY2IJLyogJ3Njcm9sbGJpbmQnICovCisjZW5kaWYKKyAgICBpbnQJCXdvX3dyYXA7CisjZGVmaW5lIHdfcF93cmFwIHdfb25lYnVmX29wdC53b193cmFwCS8qICd3cmFwJyAqLworfSB3aW5vcHRfVDsKKworLyoKKyAqIFdpbmRvdyBpbmZvIHN0b3JlZCB3aXRoIGEgYnVmZmVyLgorICoKKyAqIFR3byB0eXBlcyBvZiBpbmZvIGFyZSBrZXB0IGZvciBhIGJ1ZmZlciB3aGljaCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEKKyAqIHNwZWNpZmljIHdpbmRvdzoKKyAqIDEuIEVhY2ggd2luZG93IGNhbiBoYXZlIGEgZGlmZmVyZW50IGxpbmUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBhIGJ1ZmZlci4KKyAqIDIuIFRoZSB3aW5kb3ctbG9jYWwgb3B0aW9ucyBmb3IgYSBidWZmZXIgd29yayBpbiBhIHNpbWlsYXIgd2F5LgorICogVGhlIHdpbmRvdy1pbmZvIGlzIGtlcHQgaW4gYSBsaXN0IGF0IGJfd2luaW5mby4gIEl0IGlzIGtlcHQgaW4KKyAqIG1vc3QtcmVjZW50bHktdXNlZCBvcmRlci4KKyAqLworc3RydWN0IHdpbmluZm8KK3sKKyAgICB3aW5pbmZvX1QJKndpX25leHQ7CS8qIG5leHQgZW50cnkgb3IgTlVMTCBmb3IgbGFzdCBlbnRyeSAqLworICAgIHdpbmluZm9fVAkqd2lfcHJldjsJLyogcHJldmlvdXMgZW50cnkgb3IgTlVMTCBmb3IgZmlyc3QgZW50cnkgKi8KKyAgICB3aW5fVAkqd2lfd2luOwkvKiBwb2ludGVyIHRvIHdpbmRvdyB0aGF0IGRpZCBzZXQgd2lfbG51bSAqLworICAgIHBvc19UCXdpX2Zwb3M7CS8qIGxhc3QgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBmaWxlICovCisgICAgaW50CQl3aV9vcHRzZXQ7CS8qIFRSVUUgd2hlbiB3aV9vcHQgaGFzIHVzZWZ1bCB2YWx1ZXMgKi8KKyAgICB3aW5vcHRfVAl3aV9vcHQ7CQkvKiBsb2NhbCB3aW5kb3cgb3B0aW9ucyAqLworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGludAkJd2lfZm9sZF9tYW51YWw7CS8qIGNvcHkgb2Ygd19mb2xkX21hbnVhbCAqLworICAgIGdhcnJheV9UCXdpX2ZvbGRzOwkvKiBjbG9uZSBvZiB3X2ZvbGRzICovCisjZW5kaWYKK307CisKKy8qCisgKiBJbmZvIHVzZWQgdG8gcGFzcyBpbmZvIGFib3V0IGEgZm9sZCBmcm9tIHRoZSBmb2xkLWRldGVjdGlvbiBjb2RlIHRvIHRoZQorICogY29kZSB0aGF0IGRpc3BsYXlzIHRoZSBmb2xkY29sdW1uLgorICovCit0eXBlZGVmIHN0cnVjdCBmb2xkaW5mbworeworICAgIGludAkJZmlfbGV2ZWw7CS8qIGxldmVsIG9mIHRoZSBmb2xkOyB3aGVuIHRoaXMgaXMgemVybyB0aGUKKwkJCQkgICBvdGhlciBmaWVsZHMgYXJlIGludmFsaWQgKi8KKyAgICBpbnQJCWZpX2xudW07CS8qIGxpbmUgbnVtYmVyIHdoZXJlIGZvbGQgc3RhcnRzICovCisgICAgaW50CQlmaV9sb3dfbGV2ZWw7CS8qIGxvd2VzdCBmb2xkIGxldmVsIHRoYXQgc3RhcnRzIGluIHRoZSBzYW1lCisJCQkJICAgbGluZSAqLworfSBmb2xkaW5mb19UOworCisvKgorICogc3R1Y3R1cmVzIHVzZWQgZm9yIHVuZG8KKyAqLworCit0eXBlZGVmIHN0cnVjdCB1X2VudHJ5IHVfZW50cnlfVDsKK3R5cGVkZWYgc3RydWN0IHVfaGVhZGVyIHVfaGVhZGVyX1Q7CitzdHJ1Y3QgdV9lbnRyeQoreworICAgIHVfZW50cnlfVAkqdWVfbmV4dDsJLyogcG9pbnRlciB0byBuZXh0IGVudHJ5IGluIGxpc3QgKi8KKyAgICBsaW5lbnJfVAl1ZV90b3A7CQkvKiBudW1iZXIgb2YgbGluZSBhYm92ZSB1bmRvIGJsb2NrICovCisgICAgbGluZW5yX1QJdWVfYm90OwkJLyogbnVtYmVyIG9mIGxpbmUgYmVsb3cgdW5kbyBibG9jayAqLworICAgIGxpbmVucl9UCXVlX2xjb3VudDsJLyogbGluZWNvdW50IHdoZW4gdV9zYXZlIGNhbGxlZCAqLworICAgIGNoYXJfdQkqKnVlX2FycmF5OwkvKiBhcnJheSBvZiBsaW5lcyBpbiB1bmRvIGJsb2NrICovCisgICAgbG9uZwl1ZV9zaXplOwkvKiBudW1iZXIgb2YgbGluZXMgaW4gdWVfYXJyYXkgKi8KK307CisKK3N0cnVjdCB1X2hlYWRlcgoreworICAgIHVfaGVhZGVyX1QJKnVoX25leHQ7CS8qIHBvaW50ZXIgdG8gbmV4dCBoZWFkZXIgaW4gbGlzdCAqLworICAgIHVfaGVhZGVyX1QJKnVoX3ByZXY7CS8qIHBvaW50ZXIgdG8gcHJldmlvdXMgaGVhZGVyIGluIGxpc3QgKi8KKyAgICB1X2VudHJ5X1QJKnVoX2VudHJ5OwkvKiBwb2ludGVyIHRvIGZpcnN0IGVudHJ5ICovCisgICAgdV9lbnRyeV9UCSp1aF9nZXRib3RfZW50cnk7IC8qIHBvaW50ZXIgdG8gd2hlcmUgdWVfYm90IG11c3QgYmUgc2V0ICovCisgICAgcG9zX1QJdWhfY3Vyc29yOwkvKiBjdXJzb3IgcG9zaXRpb24gYmVmb3JlIHNhdmluZyAqLworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICBsb25nCXVoX2N1cnNvcl92Y29sOworI2VuZGlmCisgICAgaW50CQl1aF9mbGFnczsJLyogc2VlIGJlbG93ICovCisgICAgcG9zX1QJdWhfbmFtZWRtW05NQVJLU107CS8qIG1hcmtzIGJlZm9yZSB1bmRvL2FmdGVyIHJlZG8gKi8KK307CisKKy8qIHZhbHVlcyBmb3IgdWhfZmxhZ3MgKi8KKyNkZWZpbmUgVUhfQ0hBTkdFRCAgMHgwMQkvKiBiX2NoYW5nZWQgZmxhZyBiZWZvcmUgdW5kby9hZnRlciByZWRvICovCisjZGVmaW5lIFVIX0VNUFRZQlVGIDB4MDIJLyogYnVmZmVyIHdhcyBlbXB0eSAqLworCisvKgorICogc3R1Y3R1cmVzIHVzZWQgaW4gdW5kby5jCisgKi8KKyNpZiBTSVpFT0ZfSU5UID4gMgorIyBkZWZpbmUgQUxJR05fTE9ORwkvKiBsb25nd29yZCBhbGlnbm1lbnQgYW5kIHVzZSBmaWxsZXIgYnl0ZSAqLworIyBkZWZpbmUgQUxJR05fU0laRSAoc2l6ZW9mKGxvbmcpKQorI2Vsc2UKKyMgZGVmaW5lIEFMSUdOX1NJWkUgKHNpemVvZihzaG9ydCkpCisjZW5kaWYKKworI2RlZmluZSBBTElHTl9NQVNLIChBTElHTl9TSVpFIC0gMSkKKwordHlwZWRlZiBzdHJ1Y3QgbV9pbmZvIG1pbmZvX1Q7CisKKy8qCisgKiBzdHVjdHVyZSB1c2VkIHRvIGxpbmsgY2h1bmtzIGluIG9uZSBvZiB0aGUgZnJlZSBjaHVuayBsaXN0cy4KKyAqLworc3RydWN0IG1faW5mbworeworI2lmZGVmIEFMSUdOX0xPTkcKKyAgICBsb25nX3UJbV9zaXplOwkJLyogc2l6ZSBvZiB0aGUgY2h1bmsgKGluY2x1ZGluZyBtX2luZm8pICovCisjZWxzZQorICAgIHNob3J0X3UJbV9zaXplOwkJLyogc2l6ZSBvZiB0aGUgY2h1bmsgKGluY2x1ZGluZyBtX2luZm8pICovCisjZW5kaWYKKyAgICBtaW5mb19UCSptX25leHQ7CS8qIHBvaW50ZXIgdG8gbmV4dCBmcmVlIGNodW5rIGluIHRoZSBsaXN0ICovCit9OworCisvKgorICogc3RydWN0dXJlIHVzZWQgdG8gbGluayBibG9ja3MgaW4gdGhlIGxpc3Qgb2YgYWxsb2NhdGVkIGJsb2Nrcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbV9ibG9jayBtYmxvY2tfVDsKK3N0cnVjdCBtX2Jsb2NrCit7CisgICAgbWJsb2NrX1QJKm1iX25leHQ7CS8qIHBvaW50ZXIgdG8gbmV4dCBhbGxvY2F0ZWQgYmxvY2sgKi8KKyAgICBzaXplX3QJbWJfc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBhbGwgY2h1bmtzIGluIHRoaXMgYmxvY2sgKi8KKyAgICBtaW5mb19UCW1iX2luZm87CS8qIGhlYWQgb2YgZnJlZSBjaHVjayBsaXN0IGZvciB0aGlzIGJsb2NrICovCit9OworCisvKgorICogdGhpbmdzIHVzZWQgaW4gbWVtZmlsZS5jCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgYmxvY2tfaGRyICAgIGJoZHJfVDsKK3R5cGVkZWYgc3RydWN0IG1lbWZpbGUJICAgIG1lbWZpbGVfVDsKK3R5cGVkZWYgbG9uZwkJICAgIGJsb2NrbnJfVDsKKworLyoKKyAqIGZvciBlYWNoIChwcmV2aW91c2x5KSB1c2VkIGJsb2NrIGluIHRoZSBtZW1maWxlIHRoZXJlIGlzIG9uZSBibG9jayBoZWFkZXIuCisgKgorICogVGhlIGJsb2NrIG1heSBiZSBsaW5rZWQgaW4gdGhlIHVzZWQgbGlzdCBPUiBpbiB0aGUgZnJlZSBsaXN0LgorICogVGhlIHVzZWQgYmxvY2tzIGFyZSBhbHNvIGtlcHQgaW4gaGFzaCBsaXN0cy4KKyAqCisgKiBUaGUgdXNlZCBsaXN0IGlzIGEgZG91Ymx5IGxpbmtlZCBsaXN0LCBtb3N0IHJlY2VudGx5IHVzZWQgYmxvY2sgZmlyc3QuCisgKglUaGUgYmxvY2tzIGluIHRoZSB1c2VkIGxpc3QgaGF2ZSBhIGJsb2NrIG9mIG1lbW9yeSBhbGxvY2F0ZWQuCisgKgltZl91c2VkX2NvdW50IGlzIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHVzZWQgbGlzdC4KKyAqIFRoZSBoYXNoIGxpc3RzIGFyZSB1c2VkIHRvIHF1aWNrbHkgZmluZCBhIGJsb2NrIGluIHRoZSB1c2VkIGxpc3QuCisgKiBUaGUgZnJlZSBsaXN0IGlzIGEgc2luZ2xlIGxpbmtlZCBsaXN0LCBub3Qgc29ydGVkLgorICoJVGhlIGJsb2NrcyBpbiB0aGUgZnJlZSBsaXN0IGhhdmUgbm8gYmxvY2sgb2YgbWVtb3J5IGFsbG9jYXRlZCBhbmQKKyAqCXRoZSBjb250ZW50cyBvZiB0aGUgYmxvY2sgaW4gdGhlIGZpbGUgKGlmIGFueSkgaXMgaXJyZWxldmFudC4KKyAqLworCitzdHJ1Y3QgYmxvY2tfaGRyCit7CisgICAgYmhkcl9UCSpiaF9uZXh0OwkgICAgLyogbmV4dCBibG9ja19oZHIgaW4gZnJlZSBvciB1c2VkIGxpc3QgKi8KKyAgICBiaGRyX1QJKmJoX3ByZXY7CSAgICAvKiBwcmV2aW91cyBibG9ja19oZHIgaW4gdXNlZCBsaXN0ICovCisgICAgYmhkcl9UCSpiaF9oYXNoX25leHQ7CSAgICAvKiBuZXh0IGJsb2NrX2hkciBpbiBoYXNoIGxpc3QgKi8KKyAgICBiaGRyX1QJKmJoX2hhc2hfcHJldjsJICAgIC8qIHByZXZpb3VzIGJsb2NrX2hkciBpbiBoYXNoIGxpc3QgKi8KKyAgICBibG9ja25yX1QJYmhfYm51bTsJCS8qIGJsb2NrIG51bWJlciAqLworICAgIGNoYXJfdQkqYmhfZGF0YTsJICAgIC8qIHBvaW50ZXIgdG8gbWVtb3J5IChmb3IgdXNlZCBibG9jaykgKi8KKyAgICBpbnQJCWJoX3BhZ2VfY291bnQ7CSAgICAvKiBudW1iZXIgb2YgcGFnZXMgaW4gdGhpcyBibG9jayAqLworCisjZGVmaW5lIEJIX0RJUlRZICAgIDEKKyNkZWZpbmUgQkhfTE9DS0VEICAgMgorICAgIGNoYXIJYmhfZmxhZ3M7CSAgICAvKiBCSF9ESVJUWSBvciBCSF9MT0NLRUQgKi8KK307CisKKy8qCisgKiB3aGVuIGEgYmxvY2sgd2l0aCBhIG5lZ2F0aXZlIG51bWJlciBpcyBmbHVzaGVkIHRvIHRoZSBmaWxlLCBpdCBnZXRzCisgKiBhIHBvc2l0aXZlIG51bWJlci4gQmVjYXVzZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBibG9jayBpcyBzdGlsbCB0aGUgbmVnYXRpdmUKKyAqIG51bWJlciwgd2UgcmVtZW1iZXIgdGhlIHRyYW5zbGF0aW9uIHRvIHRoZSBuZXcgcG9zaXRpdmUgbnVtYmVyIGluIHRoZQorICogZG91YmxlIGxpbmtlZCB0cmFucyBsaXN0cy4gVGhlIHN0cnVjdHVyZSBpcyB0aGUgc2FtZSBhcyB0aGUgaGFzaCBsaXN0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbnJfdHJhbnMgTlJfVFJBTlM7CisKK3N0cnVjdCBucl90cmFucworeworICAgIE5SX1RSQU5TCSpudF9uZXh0OwkJLyogbmV4dCBucl90cmFucyBpbiBoYXNoIGxpc3QgKi8KKyAgICBOUl9UUkFOUwkqbnRfcHJldjsJCS8qIHByZXZpb3VzIG5yX3RyYW5zIGluIGhhc2ggbGlzdCAqLworICAgIGJsb2NrbnJfVAludF9vbGRfYm51bTsJCS8qIG9sZCwgbmVnYXRpdmUsIG51bWJlciAqLworICAgIGJsb2NrbnJfVAludF9uZXdfYm51bTsJCS8qIG5ldywgcG9zaXRpdmUsIG51bWJlciAqLworfTsKKworLyoKKyAqIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIG9uZSBibG9jayBvZiB0aGUgc3R1ZmYvcmVkby9yZWNvcmRpbmcgYnVmZmVycworICovCitzdHJ1Y3QgYnVmZmJsb2NrCit7CisgICAgc3RydWN0IGJ1ZmZibG9jawkqYl9uZXh0OwkvKiBwb2ludGVyIHRvIG5leHQgYnVmZmJsb2NrICovCisgICAgY2hhcl91CQliX3N0clsxXTsJLyogY29udGVudHMgKGFjdHVhbGx5IGxvbmdlcikgKi8KK307CisKKy8qCisgKiBoZWFkZXIgdXNlZCBmb3IgdGhlIHN0dWZmIGJ1ZmZlciBhbmQgdGhlIHJlZG8gYnVmZmVyCisgKi8KK3N0cnVjdCBidWZmaGVhZGVyCit7CisgICAgc3RydWN0IGJ1ZmZibG9jawliaF9maXJzdDsJLyogZmlyc3QgKGR1bW15KSBibG9jayBvZiBsaXN0ICovCisgICAgc3RydWN0IGJ1ZmZibG9jawkqYmhfY3VycjsJLyogYnVmZmJsb2NrIGZvciBhcHBlbmRpbmcgKi8KKyAgICBpbnQJCQliaF9pbmRleDsJLyogaW5kZXggZm9yIHJlYWRpbmcgKi8KKyAgICBpbnQJCQliaF9zcGFjZTsJLyogc3BhY2UgaW4gYmhfY3VyciBmb3IgYXBwZW5kaW5nICovCit9OworCisvKgorICogdXNlZCBmb3IgY29tcGxldGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lCisgKi8KK3R5cGVkZWYgc3RydWN0IGV4cGFuZAoreworICAgIGludAkJeHBfY29udGV4dDsJCS8qIHR5cGUgb2YgZXhwYW5zaW9uICovCisgICAgY2hhcl91CSp4cF9wYXR0ZXJuOwkJLyogc3RhcnQgb2YgaXRlbSB0byBleHBhbmQgKi8KKyNpZiBkZWZpbmVkKEZFQVRfVVNSX0NNRFMpICYmIGRlZmluZWQoRkVBVF9FVkFMKSAmJiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkKKyAgICBjaGFyX3UJKnhwX2FyZzsJCS8qIGNvbXBsZXRpb24gZnVuY3Rpb24gKi8KKyAgICBpbnQJCXhwX3NjcmlwdElEOwkJLyogU0lEIGZvciBjb21wbGV0aW9uIGZ1bmN0aW9uICovCisjZW5kaWYKKyAgICBpbnQJCXhwX2JhY2tzbGFzaDsJCS8qIG9uZSBvZiB0aGUgWFBfQlNfIHZhbHVlcyAqLworICAgIGludAkJeHBfbnVtZmlsZXM7CQkvKiBudW1iZXIgb2YgZmlsZXMgZm91bmQgYnkKKwkJCQkJCSAgICBmaWxlIG5hbWUgY29tcGxldGlvbiAqLworICAgIGNoYXJfdQkqKnhwX2ZpbGVzOwkJLyogbGlzdCBvZiBmaWxlcyAqLworfSBleHBhbmRfVDsKKworLyogdmFsdWVzIGZvciB4cF9iYWNrc2xhc2ggKi8KKyNkZWZpbmUgWFBfQlNfTk9ORQkwCS8qIG5vdGhpbmcgc3BlY2lhbCBmb3IgYmFja3NsYXNoZXMgKi8KKyNkZWZpbmUgWFBfQlNfT05FCTEJLyogdXNlcyBvbmUgYmFja3NsYXNoIGJlZm9yZSBhIHNwYWNlICovCisjZGVmaW5lIFhQX0JTX1RIUkVFCTIJLyogdXNlcyB0aHJlZSBiYWNrc2xhc2hlcyBiZWZvcmUgYSBzcGFjZSAqLworCisvKgorICogQ29tbWFuZCBtb2RpZmllcnMgIjp2ZXJ0aWNhbCIsICI6YnJvd3NlIiwgIjpjb25maXJtIiBhbmQgIjpoaWRlIiBzZXQgYSBmbGFnLgorICogVGhpcyBuZWVkcyB0byBiZSBzYXZlZCBmb3IgcmVjdXJzaXZlIGNvbW1hbmRzLCBwdXQgdGhlbSBpbiBhIHN0cnVjdHVyZSBmb3IKKyAqIGVhc3kgbWFuaXB1bGF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludAkJaGlkZTsJCQkvKiBUUlVFIHdoZW4gIjpoaWRlIiB3YXMgdXNlZCAqLworIyBpZmRlZiBGRUFUX0JST1dTRQorICAgIGludAkJYnJvd3NlOwkJCS8qIFRSVUUgdG8gaW52b2tlIGZpbGUgZGlhbG9nICovCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfV0lORE9XUworICAgIGludAkJc3BsaXQ7CQkJLyogZmxhZ3MgZm9yIHdpbl9zcGxpdCgpICovCisjIGVuZGlmCisjIGlmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKyAgICBpbnQJCWNvbmZpcm07CQkvKiBUUlVFIHRvIGludm9rZSB5ZXMvbm8gZGlhbG9nICovCisjIGVuZGlmCisgICAgaW50CQlrZWVwbWFya3M7CQkvKiBUUlVFIHdoZW4gIjprZWVwbWFya3MiIHdhcyB1c2VkICovCisgICAgaW50CQlrZWVwanVtcHM7CQkvKiBUUlVFIHdoZW4gIjprZWVwanVtcHMiIHdhcyB1c2VkICovCisgICAgaW50CQlsb2NrbWFya3M7CQkvKiBUUlVFIHdoZW4gIjpsb2NrbWFya3MiIHdhcyB1c2VkICovCit9IGNtZG1vZF9UOworCisvKgorICogU2ltcGxpc3RpYyBoYXNoaW5nIHNjaGVtZSB0byBxdWlja2x5IGxvY2F0ZSB0aGUgYmxvY2tzIGluIHRoZSB1c2VkIGxpc3QuCisgKiA2NCBibG9ja3MgYXJlIGZvdW5kIGRpcmVjdGx5ICg2NCAqIDRLID0gMjU2SywgbW9zdCBmaWxlcyBhcmUgc21hbGxlcikuCisgKi8KKyNkZWZpbmUgTUVNSEFTSFNJWkUJNjQKKyNkZWZpbmUgTUVNSEFTSChucikJKChucikgJiAoTUVNSEFTSFNJWkUgLSAxKSkKKworc3RydWN0IG1lbWZpbGUKK3sKKyAgICBjaGFyX3UJKm1mX2ZuYW1lOwkJLyogbmFtZSBvZiB0aGUgZmlsZSAqLworICAgIGNoYXJfdQkqbWZfZmZuYW1lOwkJLyogaWRlbSwgZnVsbCBwYXRoICovCisgICAgaW50CQltZl9mZDsJCQkvKiBmaWxlIGRlc2NyaXB0b3IgKi8KKyAgICBiaGRyX1QJKm1mX2ZyZWVfZmlyc3Q7CQkvKiBmaXJzdCBibG9ja19oZHIgaW4gZnJlZSBsaXN0ICovCisgICAgYmhkcl9UCSptZl91c2VkX2ZpcnN0OwkJLyogbXJ1IGJsb2NrX2hkciBpbiB1c2VkIGxpc3QgKi8KKyAgICBiaGRyX1QJKm1mX3VzZWRfbGFzdDsJCS8qIGxydSBibG9ja19oZHIgaW4gdXNlZCBsaXN0ICovCisgICAgdW5zaWduZWQJbWZfdXNlZF9jb3VudDsJCS8qIG51bWJlciBvZiBwYWdlcyBpbiB1c2VkIGxpc3QgKi8KKyAgICB1bnNpZ25lZAltZl91c2VkX2NvdW50X21heDsJLyogbWF4aW11bSBudW1iZXIgb2YgcGFnZXMgaW4gbWVtb3J5ICovCisgICAgYmhkcl9UCSptZl9oYXNoW01FTUhBU0hTSVpFXTsJLyogYXJyYXkgb2YgaGFzaCBsaXN0cyAqLworICAgIE5SX1RSQU5TCSptZl90cmFuc1tNRU1IQVNIU0laRV07CS8qIGFycmF5IG9mIHRyYW5zIGxpc3RzICovCisgICAgYmxvY2tucl9UCW1mX2Jsb2NrbnJfbWF4OwkJLyogaGlnaGVzdCBwb3NpdGl2ZSBibG9jayBudW1iZXIgKyAxKi8KKyAgICBibG9ja25yX1QJbWZfYmxvY2tucl9taW47CQkvKiBsb3dlc3QgbmVnYXRpdmUgYmxvY2sgbnVtYmVyIC0gMSAqLworICAgIGJsb2NrbnJfVAltZl9uZWdfY291bnQ7CQkvKiBudW1iZXIgb2YgbmVnYXRpdmUgYmxvY2tzIG51bWJlcnMgKi8KKyAgICBibG9ja25yX1QJbWZfaW5maWxlX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGZpbGUgKi8KKyAgICB1bnNpZ25lZAltZl9wYWdlX3NpemU7CQkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gYSBwYWdlICovCisgICAgaW50CQltZl9kaXJ0eTsJCS8qIFRSVUUgaWYgdGhlcmUgYXJlIGRpcnR5IGJsb2NrcyAqLworfTsKKworLyoKKyAqIHRoaW5ncyB1c2VkIGluIG1lbWxpbmUuYworICovCisvKgorICogV2hlbiBzZWFyY2hpbmcgZm9yIGEgc3BlY2lmaWMgbGluZSwgd2UgcmVtZW1iZXIgd2hhdCBibG9ja3MgaW4gdGhlIHRyZWUKKyAqIGFyZSB0aGUgYnJhbmNoZXMgbGVhZGluZyB0byB0aGF0IGJsb2NrLiBUaGlzIGlzIHN0b3JlZCBpbiBtbF9zdGFjay4gIEVhY2gKKyAqIGVudHJ5IGlzIGEgcG9pbnRlciB0byBpbmZvIGluIGEgYmxvY2sgKG1heSBiZSBkYXRhIGJsb2NrIG9yIHBvaW50ZXIgYmxvY2spCisgKi8KK3R5cGVkZWYgc3RydWN0IGluZm9fcG9pbnRlcgoreworICAgIGJsb2NrbnJfVAlpcF9ibnVtOwkvKiBibG9jayBudW1iZXIgKi8KKyAgICBsaW5lbnJfVAlpcF9sb3c7CQkvKiBsb3dlc3QgbG51bSBpbiB0aGlzIGJsb2NrICovCisgICAgbGluZW5yX1QJaXBfaGlnaDsJLyogaGlnaGVzdCBsbnVtIGluIHRoaXMgYmxvY2sgKi8KKyAgICBpbnQJCWlwX2luZGV4OwkvKiBpbmRleCBmb3IgYmxvY2sgd2l0aCBjdXJyZW50IGxudW0gKi8KK30gaW5mb3B0cl9UOwkvKiBibG9jay9pbmRleCBwYWlyICovCisKKyNpZmRlZiBGRUFUX0JZVEVPRkYKK3R5cGVkZWYgc3RydWN0IG1sX2NodW5rc2l6ZQoreworICAgIGludAkJbWxjc19udW1saW5lczsKKyAgICBsb25nCW1sY3NfdG90YWxzaXplOworfSBjaHVua3NpemVfVDsKKworIC8qIEZsYWdzIHdoZW4gY2FsbGluZyBtbF91cGRhdGVjaHVuaygpICovCisKKyNkZWZpbmUgTUxfQ0hOS19BRERMSU5FIDEKKyNkZWZpbmUgTUxfQ0hOS19ERUxMSU5FIDIKKyNkZWZpbmUgTUxfQ0hOS19VUERMSU5FIDMKKyNlbmRpZgorCisvKgorICogdGhlIG1lbWxpbmUgc3RydWN0dXJlIGhvbGRzIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSBtZW1saW5lCisgKi8KK3R5cGVkZWYgc3RydWN0IG1lbWxpbmUKK3sKKyAgICBsaW5lbnJfVAltbF9saW5lX2NvdW50OwkvKiBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGJ1ZmZlciAqLworCisgICAgbWVtZmlsZV9UCSptbF9tZnA7CS8qIHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBtZW1maWxlICovCisKKyNkZWZpbmUgTUxfRU1QVFkJMQkvKiBlbXB0eSBidWZmZXIgKi8KKyNkZWZpbmUgTUxfTElORV9ESVJUWQkyCS8qIGNhY2hlZCBsaW5lIHdhcyBjaGFuZ2VkIGFuZCBhbGxvY2F0ZWQgKi8KKyNkZWZpbmUgTUxfTE9DS0VEX0RJUlRZCTQJLyogbWxfbG9ja2VkIHdhcyBjaGFuZ2VkICovCisjZGVmaW5lIE1MX0xPQ0tFRF9QT1MJOAkvKiBtbF9sb2NrZWQgbmVlZHMgcG9zaXRpdmUgYmxvY2sgbnVtYmVyICovCisgICAgaW50CQltbF9mbGFnczsKKworICAgIGluZm9wdHJfVAkqbWxfc3RhY2s7CS8qIHN0YWNrIG9mIHBvaW50ZXIgYmxvY2tzIChhcnJheSBvZiBJUFRScykgKi8KKyAgICBpbnQJCW1sX3N0YWNrX3RvcDsJLyogY3VycmVudCB0b3AgaWYgbWxfc3RhY2sgKi8KKyAgICBpbnQJCW1sX3N0YWNrX3NpemU7CS8qIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIG1sX3N0YWNrICovCisKKyAgICBsaW5lbnJfVAltbF9saW5lX2xudW07CS8qIGxpbmUgbnVtYmVyIG9mIGNhY2hlZCBsaW5lLCAwIGlmIG5vdCB2YWxpZCAqLworICAgIGNoYXJfdQkqbWxfbGluZV9wdHI7CS8qIHBvaW50ZXIgdG8gY2FjaGVkIGxpbmUgKi8KKworICAgIGJoZHJfVAkqbWxfbG9ja2VkOwkvKiBibG9jayB1c2VkIGJ5IGxhc3QgbWxfZ2V0ICovCisgICAgbGluZW5yX1QJbWxfbG9ja2VkX2xvdzsJLyogZmlyc3QgbGluZSBpbiBtbF9sb2NrZWQgKi8KKyAgICBsaW5lbnJfVAltbF9sb2NrZWRfaGlnaDsJLyogbGFzdCBsaW5lIGluIG1sX2xvY2tlZCAqLworICAgIGludAkJbWxfbG9ja2VkX2xpbmVhZGQ7ICAvKiBudW1iZXIgb2YgbGluZXMgaW5zZXJ0ZWQgaW4gbWxfbG9ja2VkICovCisjaWZkZWYgRkVBVF9CWVRFT0ZGCisgICAgY2h1bmtzaXplX1QgKm1sX2NodW5rc2l6ZTsKKyAgICBpbnQJCW1sX251bWNodW5rczsKKyAgICBpbnQJCW1sX3VzZWRjaHVua3M7CisjZW5kaWYKK30gbWVtbGluZV9UOworCisjaWYgZGVmaW5lZChGRUFUX1NJR05TKSB8fCBkZWZpbmVkKFBST1RPKQordHlwZWRlZiBzdHJ1Y3Qgc2lnbmxpc3Qgc2lnbmxpc3RfVDsKKworc3RydWN0IHNpZ25saXN0Cit7CisgICAgaW50CQlpZDsJCS8qIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBlYWNoIHBsYWNlZCBzaWduICovCisgICAgbGluZW5yX1QJbG51bTsJCS8qIGxpbmUgbnVtYmVyIHdoaWNoIGhhcyB0aGlzIHNpZ24gKi8KKyAgICBpbnQJCXR5cGVucjsJCS8qIHR5cGVuciBvZiBzaWduICovCisgICAgc2lnbmxpc3RfVAkqbmV4dDsJCS8qIG5leHQgc2lnbmxpc3QgZW50cnkgKi8KKyMgaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgc2lnbmxpc3RfVCAgKnByZXY7CQkvKiBwcmV2aW91cyBlbnRyeSAtLSBmb3IgZWFzeSByZW9yZGVyaW5nICovCisjIGVuZGlmCit9OworCisvKiB0eXBlIGFyZ3VtZW50IGZvciBidWZfZ2V0c2lnbnR5cGUoKSAqLworI2RlZmluZSBTSUdOX0FOWQkwCisjZGVmaW5lIFNJR05fTElORUhMCTEKKyNkZWZpbmUgU0lHTl9JQ09OCTIKKyNkZWZpbmUgU0lHTl9URVhUCTMKKyNlbmRpZgorCisvKgorICogQXJndW1lbnQgbGlzdDogQXJyYXkgb2YgZmlsZSBuYW1lcy4KKyAqIFVzZWQgZm9yIHRoZSBnbG9iYWwgYXJndW1lbnQgbGlzdCBhbmQgdGhlIGFyZ3VtZW50IGxpc3RzIGxvY2FsIHRvIGEgd2luZG93LgorICovCit0eXBlZGVmIHN0cnVjdCBhcmdsaXN0Cit7CisgICAgZ2FycmF5X1QJYWxfZ2E7CQkvKiBncm93YXJyYXkgd2l0aCB0aGUgYXJyYXkgb2YgZmlsZSBuYW1lcyAqLworICAgIGludAkJYWxfcmVmY291bnQ7CS8qIG51bWJlciBvZiB3aW5kb3dzIHVzaW5nIHRoaXMgYXJnbGlzdCAqLworfSBhbGlzdF9UOworCisvKgorICogRm9yIGVhY2ggYXJndW1lbnQgcmVtZW1iZXIgdGhlIGZpbGUgbmFtZSBhcyBpdCB3YXMgZ2l2ZW4sIGFuZCB0aGUgYnVmZmVyCisgKiBudW1iZXIgdGhhdCBjb250YWlucyB0aGUgZXhwYW5kZWQgZmlsZSBuYW1lIChyZXF1aXJlZCBmb3Igd2hlbiAiOmNkIiBpcworICogdXNlZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgYXJnZW50cnkKK3sKKyAgICBjaGFyX3UJKmFlX2ZuYW1lOwkvKiBmaWxlIG5hbWUgYXMgc3BlY2lmaWVkICovCisgICAgaW50CQlhZV9mbnVtOwkvKiBidWZmZXIgbnVtYmVyIHdpdGggZXhwYW5kZWQgZmlsZSBuYW1lICovCit9IGFlbnRyeV9UOworCisjaWZkZWYgRkVBVF9XSU5ET1dTCisjIGRlZmluZSBBTElTVCh3aW4pICh3aW4pLT53X2FsaXN0CisjZWxzZQorIyBkZWZpbmUgQUxJU1Qod2luKSAoJmdsb2JhbF9hbGlzdCkKKyNlbmRpZgorI2RlZmluZSBHQVJHTElTVAkoKGFlbnRyeV9UICopZ2xvYmFsX2FsaXN0LmFsX2dhLmdhX2RhdGEpCisjZGVmaW5lIEFSR0xJU1QJCSgoYWVudHJ5X1QgKilBTElTVChjdXJ3aW4pLT5hbF9nYS5nYV9kYXRhKQorI2RlZmluZSBXQVJHTElTVCh3cCkJKChhZW50cnlfVCAqKUFMSVNUKHdwKS0+YWxfZ2EuZ2FfZGF0YSkKKyNkZWZpbmUgQUFSR0xJU1QoYWwpCSgoYWVudHJ5X1QgKikoKGFsKS0+YWxfZ2EuZ2FfZGF0YSkpCisjZGVmaW5lIEdBUkdDT1VOVAkoZ2xvYmFsX2FsaXN0LmFsX2dhLmdhX2xlbikKKyNkZWZpbmUgQVJHQ09VTlQJKEFMSVNUKGN1cndpbiktPmFsX2dhLmdhX2xlbikKKyNkZWZpbmUgV0FSR0NPVU5UKHdwKQkoQUxJU1Qod3ApLT5hbF9nYS5nYV9sZW4pCisKKy8qCisgKiBBIGxpc3QgdXNlZCBmb3Igc2F2aW5nIHZhbHVlcyBvZiAiZW1zZ19zaWxlbnQiLiAgVXNlZCBieSBleF90cnkoKSB0byBzYXZlIHRoZQorICogdmFsdWUgb2YgImVtc2dfc2lsZW50IiBpZiBpdCB3YXMgbm9uLXplcm8uICBXaGVuIHRoaXMgaXMgZG9uZSwgdGhlIENTRl9TSUxFTlQKKyAqIGZsYWcgYmVsb3cgaXMgc2V0LgorICovCisKK3R5cGVkZWYgc3RydWN0IGVzbGlzdF9lbGVtIGVzbGlzdF9UOworc3RydWN0IGVzbGlzdF9lbGVtCit7CisgICAgaW50CQlzYXZlZF9lbXNnX3NpbGVudDsJLyogc2F2ZWQgdmFsdWUgb2YgImVtc2dfc2lsZW50IiAqLworICAgIGVzbGlzdF9UCSpuZXh0OwkJCS8qIG5leHQgZWxlbWVudCBvbiB0aGUgbGlzdCAqLworfTsKKworLyoKKyAqIEZvciBjb25kaXRpb25hbCBjb21tYW5kcyBhIHN0YWNrIGlzIGtlcHQgb2YgbmVzdGVkIGNvbmRpdGlvbmFscy4KKyAqIFdoZW4gY3NfaWR4IDwgMCwgdGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgY29tbWFuZC4KKyAqLworI2RlZmluZSBDU1RBQ0tfTEVOCTUwCisKK3N0cnVjdCBjb25kc3RhY2sKK3sKKyAgICBjaGFyCWNzX2ZsYWdzW0NTVEFDS19MRU5dOwkvKiBDU0ZfIGZsYWdzICovCisgICAgY2hhcgljc19wZW5kaW5nW0NTVEFDS19MRU5dOwkvKiBDU1RQXzogd2hhdCdzIHBlbmRpbmcgaW4gIjpmaW5hbGx5IiovCisgICAgdW5pb24geworCXZvaWQgICAqY3NfcGVuZF9ydltDU1RBQ0tfTEVOXTsJLyogcmV0dXJudmFsIGZvciBwZW5kaW5nIHJldHVybiAqLworCXZvaWQgICAqY3NfcGVuZF9leFtDU1RBQ0tfTEVOXTsJLyogZXhjZXB0aW9uIGZvciBwZW5kaW5nIHRocm93ICovCisgICAgfQkJY3NfcGVuZDsKKyAgICBpbnQJCWNzX2xpbmVbQ1NUQUNLX0xFTl07CS8qIGxpbmUgbnVtYmVyIG9mICI6d2hpbGUiIGxpbmUgKi8KKyAgICBpbnQJCWNzX2lkeDsJCQkvKiBjdXJyZW50IGVudHJ5LCBvciAtMSBpZiBub25lICovCisgICAgaW50CQljc193aGlsZWxldmVsOwkJLyogbnVtYmVyIG9mIG5lc3RlZCAiOndoaWxlInMgKi8KKyAgICBpbnQJCWNzX3RyeWxldmVsOwkJLyogbnVtYmVyIG9mIG5lc3RlZCAiOnRyeSJzICovCisgICAgZXNsaXN0X1QJKmNzX2Vtc2dfc2lsZW50X2xpc3Q7CS8qIHNhdmVkIHZhbHVlcyBvZiAiZW1zZ19zaWxlbnQiICovCisgICAgY2hhcgljc19oYWRfd2hpbGU7CQkvKiBqdXN0IGZvdW5kICI6d2hpbGUiICovCisgICAgY2hhcgljc19oYWRfY29udGludWU7CS8qIGp1c3QgZm91bmQgIjpjb250aW51ZSIgKi8KKyAgICBjaGFyCWNzX2hhZF9lbmR3aGlsZTsJLyoganVzdCBmb3VuZCAiOmVuZHdoaWxlIiAqLworICAgIGNoYXIJY3NfaGFkX2ZpbmFsbHk7CQkvKiBqdXN0IGZvdW5kICI6ZmluYWxseSIgKi8KK307CisjIGRlZmluZSBjc19yZXR2YXIJY3NfcGVuZC5jc19wZW5kX3J2CisjIGRlZmluZSBjc19leGNlcHRpb24JY3NfcGVuZC5jc19wZW5kX2V4CisKKyMgZGVmaW5lIENTRl9UUlVFCTEJLyogY29uZGl0aW9uIHdhcyBUUlVFICovCisjIGRlZmluZSBDU0ZfQUNUSVZFCTIJLyogY3VycmVudCBzdGF0ZSBpcyBhY3RpdmUgKi8KKyMgZGVmaW5lIENTRl9FTFNFCTQJLyogIjplbHNlIiBoYXMgYmVlbiBwYXNzZWQgKi8KKyMgZGVmaW5lIENTRl9XSElMRQk4CS8qIGlzIGEgIjp3aGlsZSIgKi8KKyMgZGVmaW5lIENTRl9UUlkJMTYJLyogaXMgYSAiOnRyeSIgKi8KKyMgZGVmaW5lIENTRl9GSU5BTExZCTMyCS8qICI6ZmluYWxseSIgaGFzIGJlZW4gcGFzc2VkICovCisjIGRlZmluZSBDU0ZfVEhST1dOCTY0CS8qIGV4Y2VwdGlvbiB0aHJvd24gdG8gdGhpcyB0cnkgY29uZGl0aW9uYWwgKi8KKyMgZGVmaW5lIENTRl9DQVVHSFQJMTI4CS8qIGV4Y2VwdGlvbiBjYXVnaHQgYnkgdGhpcyB0cnkgY29uZGl0aW9uYWwgKi8KKyMgZGVmaW5lIENTRl9TSUxFTlQJNAkvKiAiZW1zZ19zaWxlbnQiIHJlc2V0IGJ5ICI6dHJ5IiAqLworLyogTm90ZSB0aGF0IENTRl9FTFNFIGlzIG9ubHkgdXNlZCB3aGVuIENTRl9UUlkgYW5kIENTRl9XSElMRSBhcmUgdW5zZXQKKyAqIChhbiAiOmlmIiksIGFuZCBDU0ZfU0lMRU5UIGlzIG9ubHkgdXNlZCB3aGVuIENTRl9UUlkgaXMgc2V0LiAqLworCisvKgorICogV2hhdCdzIHBlbmRpbmcgZm9yIGJlaW5nIHJlYWN0aXZhdGVkIGF0IHRoZSAiOmVuZHRyeSIgb2YgdGhpcyB0cnkKKyAqIGNvbmRpdGlvbmFsOgorICovCisjIGRlZmluZSBDU1RQX05PTkUJMAkvKiBub3RoaW5nIHBlbmRpbmcgaW4gIjpmaW5hbGx5IiBjbGF1c2UgKi8KKyMgZGVmaW5lIENTVFBfRVJST1IJMQkvKiBhbiBlcnJvciBpcyBwZW5kaW5nICovCisjIGRlZmluZSBDU1RQX0lOVEVSUlVQVAkyCS8qIGFuIGludGVycnVwdCBpcyBwZW5kaW5nICovCisjIGRlZmluZSBDU1RQX1RIUk9XCTQJLyogYSB0aHJvdyBpcyBwZW5kaW5nICovCisjIGRlZmluZSBDU1RQX0JSRUFLCTgJLyogIjpicmVhayIgaXMgcGVuZGluZyAqLworIyBkZWZpbmUgQ1NUUF9DT05USU5VRQkxNgkvKiAiOmNvbnRpbnVlIiBpcyBwZW5kaW5nICovCisjIGRlZmluZSBDU1RQX1JFVFVSTgkyNAkvKiAiOnJldHVybiIgaXMgcGVuZGluZyAqLworIyBkZWZpbmUgQ1NUUF9GSU5JU0gJMzIJLyogIjpmaW5pc2giIGlzIHBlbmRpbmcgKi8KKworLyoKKyAqIEEgbGlzdCBvZiBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW4gZXhjZXB0aW9uLiAgInRocm93X21zZyIKKyAqIGlzIG9ubHkgc2V0IGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgVXN1YWxseSwgaXQgcG9pbnRzIHRvIHRoZQorICogb3JpZ2luYWwgbWVzc2FnZSBzdG9yZWQgaW4gdGhhdCBlbGVtZW50LCBidXQgc29tZXRpbWVzIGl0IHBvaW50cyB0byBhIGxhdGVyCisgKiBtZXNzYWdlIGluIHRoZSBsaXN0LiAgU2VlIGNhdXNlX2VycnRocm93KCkgYmVsb3cuCisgKi8KK3N0cnVjdCBtc2dsaXN0Cit7CisgICAgY2hhcl91CQkqbXNnOwkJLyogb3JpZ2luYWwgbWVzc2FnZSAqLworICAgIGNoYXJfdQkJKnRocm93X21zZzsJLyogbXNnIHRvIHRocm93OiB1c3VhbGx5IG9yaWdpbmFsIG9uZSAqLworICAgIHN0cnVjdCBtc2dsaXN0CSpuZXh0OwkJLyogbmV4dCBvZiBzZXZlcmFsIG1lc3NhZ2VzIGluIGEgcm93ICovCit9OworCisvKgorICogU3RydWN0dXJlIGRlc2NyaWJpbmcgYW4gZXhjZXB0aW9uLgorICogKGRvbid0IHVzZSAic3RydWN0IGV4Y2VwdGlvbiIsIGl0J3MgdXNlZCBieSB0aGUgbWF0aCBsaWJyYXJ5KS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgdmltX2V4Y2VwdGlvbiBleGNlcHRfVDsKK3N0cnVjdCB2aW1fZXhjZXB0aW9uCit7CisgICAgaW50CQkJdHlwZTsJCS8qIGV4Y2VwdGlvbiB0eXBlICovCisgICAgY2hhcl91CQkqdmFsdWU7CQkvKiBleGNlcHRpb24gdmFsdWUgKi8KKyAgICBzdHJ1Y3QgbXNnbGlzdAkqbWVzc2FnZXM7CS8qIG1lc3NhZ2UocykgY2F1c2luZyBlcnJvciBleGNlcHRpb24gKi8KKyAgICBjaGFyX3UJCSp0aHJvd19uYW1lOwkvKiBuYW1lIG9mIHRoZSB0aHJvdyBwb2ludCAqLworICAgIGxpbmVucl9UCQl0aHJvd19sbnVtOwkvKiBsaW5lIG51bWJlciBvZiB0aGUgdGhyb3cgcG9pbnQgKi8KKyAgICBleGNlcHRfVAkJKmNhdWdodDsJLyogbmV4dCBleGNlcHRpb24gb24gdGhlIGNhdWdodCBzdGFjayAqLworfTsKKworLyoKKyAqIFRoZSBleGNlcHRpb24gdHlwZXMuCisgKi8KKyNkZWZpbmUgRVRfVVNFUgkJMAkvKiBleGNlcHRpb24gY2F1c2VkIGJ5ICI6dGhyb3ciIGNvbW1hbmQgKi8KKyNkZWZpbmUgRVRfRVJST1IJMQkvKiBlcnJvciBleGNlcHRpb24gKi8KKyNkZWZpbmUgRVRfSU5URVJSVVBUCTIJLyogaW50ZXJydXB0IGV4Y2VwdGlvbiB0cmlnZ2VyZWQgYnkgQ3RybC1DICovCisKKworI2lmZGVmIEZFQVRfU1lOX0hMCisvKiBzdHJ1Y3QgcGFzc2VkIHRvIGluX2lkX2xpc3QoKSAqLworc3RydWN0IHNwX3N5bgoreworICAgIGludAkJaW5jX3RhZzsJLyogIjpzeW4gaW5jbHVkZSIgdW5pcXVlIHRhZyAqLworICAgIHNob3J0CWlkOwkJLyogaGlnaGxpZ2h0IGdyb3VwIElEIG9mIGl0ZW0gKi8KKyAgICBzaG9ydAkqY29udF9pbl9saXN0OwkvKiBjb250LmluIGdyb3VwIElEcywgaWYgbm9uLXplcm8gKi8KK307CisKKy8qCisgKiBFYWNoIGtleXdvcmQgaGFzIG9uZSBrZXllbnRyeSwgd2hpY2ggaXMgbGlua2VkIGluIGEgaGFzaCBsaXN0LgorICovCit0eXBlZGVmIHN0cnVjdCBrZXllbnRyeSBrZXllbnRyeV9UOworCitzdHJ1Y3Qga2V5ZW50cnkKK3sKKyAgICBrZXllbnRyeV9UCSpuZXh0OwkJLyogbmV4dCBrZXl3b3JkIGluIHRoZSBoYXNoIGxpc3QgKi8KKyAgICBzdHJ1Y3Qgc3Bfc3luIGtfc3luOwkvKiBzdHJ1Y3QgcGFzc2VkIHRvIGluX2lkX2xpc3QoKSAqLworICAgIHNob3J0CSpuZXh0X2xpc3Q7CS8qIElEIGxpc3QgZm9yIG5leHQgbWF0Y2ggKGlmIG5vbi16ZXJvKSAqLworICAgIHNob3J0CWZsYWdzOwkJLyogc2VlIHN5bnRheC5jICovCisgICAgY2hhcl91CWtleXdvcmRbMV07CS8qIGFjdHVhbGx5IGxvbmdlciAqLworfTsKKworLyoKKyAqIFN0cnVjdCB1c2VkIHRvIHN0b3JlIG9uZSBzdGF0ZSBvZiB0aGUgc3RhdGUgc3RhY2suCisgKi8KK3R5cGVkZWYgc3RydWN0IGJ1Zl9zdGF0ZQoreworICAgIGludAkJICAgIGJzX2lkeDsJIC8qIGluZGV4IG9mIHBhdHRlcm4gKi8KKyAgICBsb25nCSAgICBic19mbGFnczsJIC8qIGZsYWdzIGZvciBwYXR0ZXJuICovCisgICAgcmVnX2V4dG1hdGNoX1QgKmJzX2V4dG1hdGNoOyAvKiBleHRlcm5hbCBtYXRjaGVzIGZyb20gc3RhcnQgcGF0dGVybiAqLworfSBidWZzdGF0ZV9UOworCisvKgorICogc3luX3N0YXRlIGNvbnRhaW5zIHRoZSBzeW50YXggc3RhdGUgc3RhY2sgZm9yIHRoZSBzdGFydCBvZiBvbmUgbGluZS4KKyAqIFVzZWQgYnkgYl9zc3RfYXJyYXlbXS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc3luX3N0YXRlIHN5bnN0YXRlX1Q7CisKK3N0cnVjdCBzeW5fc3RhdGUKK3sKKyAgICBzeW5zdGF0ZV9UCSpzc3RfbmV4dDsJLyogbmV4dCBlbnRyeSBpbiB1c2VkIG9yIGZyZWUgbGlzdCAqLworICAgIGxpbmVucl9UCXNzdF9sbnVtOwkvKiBsaW5lIG51bWJlciBmb3IgdGhpcyBzdGF0ZSAqLworICAgIHVuaW9uCisgICAgeworCWJ1ZnN0YXRlX1QJc3N0X3N0YWNrW1NTVF9GSVhfU1RBVEVTXTsgLyogc2hvcnQgc3RhdGUgc3RhY2sgKi8KKwlnYXJyYXlfVAlzc3RfZ2E7CS8qIGdyb3dhcnJheSBmb3IgbG9uZyBzdGF0ZSBzdGFjayAqLworICAgIH0gc3N0X3VuaW9uOworICAgIGludAkJc3N0X25leHRfZmxhZ3M7CS8qIGZsYWdzIGZvciBzc3RfbmV4dF9saXN0ICovCisgICAgc2hvcnQJKnNzdF9uZXh0X2xpc3Q7CS8qICJuZXh0Z3JvdXAiIGxpc3QgaW4gdGhpcyBzdGF0ZQorCQkJCSAqICh0aGlzIGlzIGEgY29weSwgZG9uJ3QgZnJlZSBpdCEgKi8KKyAgICBzaG9ydAlzc3Rfc3RhY2tzaXplOwkvKiBudW1iZXIgb2Ygc3RhdGVzIG9uIHRoZSBzdGFjayAqLworICAgIGRpc3B0aWNrX1QJc3N0X3RpY2s7CS8qIHRpY2sgd2hlbiBsYXN0IGRpc3BsYXllZCAqLworICAgIGxpbmVucl9UCXNzdF9jaGFuZ2VfbG51bTsvKiB3aGVuIG5vbi16ZXJvLCBjaGFuZ2UgaW4gdGhpcyBsaW5lCisJCQkJICogbWF5IGhhdmUgbWFkZSB0aGUgc3RhdGUgaW52YWxpZCAqLworfTsKKyNlbmRpZiAvKiBGRUFUX1NZTl9ITCAqLworCisvKgorICogU3RydWN0dXJlIHNoYXJlZCBiZXR3ZWVuIHN5bnRheC5jLCBzY3JlZW4uYyBhbmQgZ3VpX3gxMS5jLgorICovCit0eXBlZGVmIHN0cnVjdCBhdHRyX2VudHJ5Cit7CisgICAgc2hvcnQJICAgIGFlX2F0dHI7CQkvKiBITF9CT0xELCBldGMuICovCisgICAgdW5pb24KKyAgICB7CisJc3RydWN0CisJeworCSAgICBjaGFyX3UJICAgICpzdGFydDsJLyogc3RhcnQgZXNjYXBlIHNlcXVlbmNlICovCisJICAgIGNoYXJfdQkgICAgKnN0b3A7CS8qIHN0b3AgZXNjYXBlIHNlcXVlbmNlICovCisJfSB0ZXJtOworCXN0cnVjdAorCXsKKwkgICAgY2hhcl91CSAgICBmZ19jb2xvcjsJLyogZm9yZWdyb3VuZCBjb2xvciBudW1iZXIgKi8KKwkgICAgY2hhcl91CSAgICBiZ19jb2xvcjsJLyogYmFja2dyb3VuZCBjb2xvciBudW1iZXIgKi8KKwl9IGN0ZXJtOworIyBpZmRlZiBGRUFUX0dVSQorCXN0cnVjdAorCXsKKwkgICAgZ3VpY29sb3JfVAkgICAgZmdfY29sb3I7CS8qIGZvcmVncm91bmQgY29sb3IgaGFuZGxlICovCisJICAgIGd1aWNvbG9yX1QJICAgIGJnX2NvbG9yOwkvKiBiYWNrZ3JvdW5kIGNvbG9yIGhhbmRsZSAqLworCSAgICBHdWlGb250CSAgICBmb250OwkvKiBmb250IGhhbmRsZSAqLworIyAgaWZkZWYgRkVBVF9YRk9OVFNFVAorCSAgICBHdWlGb250c2V0CSAgICBmb250c2V0OwkvKiBmb250c2V0IGhhbmRsZSAqLworIyAgZW5kaWYKKwl9IGd1aTsKKyMgZW5kaWYKKyAgICB9IGFlX3U7Cit9IGF0dHJlbnRyeV9UOworCisjaWZkZWYgVVNFX0lDT05WCisjIGlmZGVmIEhBVkVfSUNPTlZfSAorIyAgaW5jbHVkZSA8aWNvbnYuaD4KKyMgZWxzZQorIyAgaWYgZGVmaW5lZChNQUNPU19YKQorIyAgIGluY2x1ZGUgPHN5cy9lcnJuby5oPgorIyAgIGRlZmluZSBFSUxTRVEgRU5PRU5UIC8qIE1hY09TIFggZG9lcyBub3QgaGF2ZSBFSUxTRVEgKi8KK3R5cGVkZWYgc3RydWN0IF9pY29udl90ICppY29udl90OworIyAgZWxzZQorIyAgIGlmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykKK3R5cGVkZWYgc3RydWN0IF9pY29udl90ICppY29udl90OworIyAgICBkZWZpbmUgRUlOVkFMCTIyCisjICAgIGRlZmluZSBFMkJJRwk3CisjICAgIGRlZmluZSBFTk9FTlQJMgorIyAgICBkZWZpbmUgRUZBVUxUCTE0CisjICAgIGRlZmluZSBFSUxTRVEJMTIzCisjICAgZWxzZQorIyAgICBpbmNsdWRlIDxlcnJuby5oPgorIyAgIGVuZGlmCisjICBlbmRpZgordHlwZWRlZiB2b2lkICppY29udl90OworIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBVc2VkIGZvciB0aGUgdHlwZWFoZWFkIGJ1ZmZlcjogdHlwZWJ1Zi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBjaGFyX3UJKnRiX2J1ZjsJLyogYnVmZmVyIGZvciB0eXBlZCBjaGFyYWN0ZXJzICovCisgICAgY2hhcl91CSp0Yl9ub3JlbWFwOwkvKiBtYXBwaW5nIGZsYWdzIGZvciBjaGFyYWN0ZXJzIGluIHRiX2J1ZltdICovCisgICAgaW50CQl0Yl9idWZsZW47CS8qIHNpemUgb2YgdGJfYnVmW10gKi8KKyAgICBpbnQJCXRiX29mZjsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gdGJfYnVmW10gKi8KKyAgICBpbnQJCXRiX2xlbjsJCS8qIG51bWJlciBvZiB2YWxpZCBieXRlcyBpbiB0Yl9idWZbXSAqLworICAgIGludAkJdGJfbWFwbGVuOwkvKiBuciBvZiBtYXBwZWQgYnl0ZXMgaW4gdGJfYnVmW10gKi8KKyAgICBpbnQJCXRiX3NpbGVudDsJLyogbnIgb2Ygc2lsZW50bHkgbWFwcGVkIGJ5dGVzIGluIHRiX2J1ZltdICovCisgICAgaW50CQl0Yl9ub19hYmJyX2NudDsgLyogbnIgb2YgYnl0ZXMgd2l0aG91dCBhYmJyZXYuIGluIHRiX2J1ZltdICovCisgICAgaW50CQl0Yl9jaGFuZ2VfY250OwkvKiBuciBvZiB0aW1lIHRiX2J1ZiB3YXMgY2hhbmdlZDsgbmV2ZXIgemVybyAqLworfSB0eXBlYnVmX1Q7CisKKy8qIFN0cnVjdCB0byBob2xkIHRoZSBzYXZlZCB0eXBlYWhlYWQgZm9yIHNhdmVfdHlwZWFoZWFkKCkuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHR5cGVidWZfVAkJc2F2ZV90eXBlYnVmOworICAgIGludAkJCXR5cGVidWZfdmFsaWQ7CSAgICAvKiBUUlVFIHdoZW4gc2F2ZV90eXBlYnVmIHZhbGlkICovCisgICAgc3RydWN0IGJ1ZmZoZWFkZXIJc2F2ZV9zdHVmZmJ1ZmY7CisjaWZkZWYgVVNFX0lOUFVUX0JVRgorICAgIGNoYXJfdQkJKnNhdmVfaW5wdXRidWY7CisjZW5kaWYKK30gdGFzYXZlX1Q7CisKKy8qCisgKiBVc2VkIGZvciBjb252ZXJzaW9uIG9mIHRlcm1pbmFsIEkvTyBhbmQgc2NyaXB0IGZpbGVzLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludAkJdmNfdHlwZTsJLyogemVybyBvciBvbmUgb2YgdGhlIENPTlZfIHZhbHVlcyAqLworICAgIGludAkJdmNfZmFjdG9yOwkvKiBtYXguIGV4cGFuc2lvbiBmYWN0b3IgKi8KKyMgaWZkZWYgV0lOMzI2NAorICAgIGludAkJdmNfY3Bmcm9tOwkvKiBjb2RlcGFnZSB0byBjb252ZXJ0IGZyb20gKENPTlZfQ09ERVBBR0UpICovCisgICAgaW50CQl2Y19jcHRvOwkvKiBjb2RlcGFnZSB0byBjb252ZXJ0IHRvIChDT05WX0NPREVQQUdFKSAqLworIyBlbmRpZgorIyBpZmRlZiBVU0VfSUNPTlYKKyAgICBpY29udl90CXZjX2ZkOwkJLyogZm9yIENPTlZfSUNPTlYgKi8KKyMgZW5kaWYKKyAgICBpbnQJCXZjX2ZhaWw7CS8qIGZhaWwgZm9yIGludmFsaWQgY2hhciwgZG9uJ3QgdXNlICc/JyAqLworfSB2aW1jb252X1Q7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCBmb3IgcmVhZGluZyBmcm9tIHRoZSB2aW1pbmZvIGZpbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgY2hhcl91CSp2aXJfbGluZTsJLyogdGV4dCBvZiB0aGUgY3VycmVudCBsaW5lICovCisgICAgRklMRQkqdmlyX2ZkOwkvKiBmaWxlIGRlc2NyaXB0b3IgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgdmltY29udl9UCXZpcl9jb252OwkvKiBlbmNvZGluZyBjb252ZXJzaW9uICovCisjZW5kaWYKK30gdmlyX1Q7CisKKyNkZWZpbmUgQ09OVl9OT05FCQkwCisjZGVmaW5lIENPTlZfVE9fVVRGOAkJMQorI2RlZmluZSBDT05WX1RPX0xBVElOMQkJMgorI2RlZmluZSBDT05WX0lDT05WCQkzCisjaWZkZWYgV0lOMzI2NAorIyBkZWZpbmUgQ09OVl9DT0RFUEFHRQkJNAkvKiBjb2RlcGFnZSAtPiBjb2RlcGFnZSAqLworI2VuZGlmCisjaWZkZWYgTUFDT1NfWAorIyBkZWZpbmUgQ09OVl9NQUNfTEFUSU4xCTUKKyMgZGVmaW5lIENPTlZfTEFUSU4xX01BQwk2CisjIGRlZmluZSBDT05WX01BQ19VVEY4CQk3CisjIGRlZmluZSBDT05WX1VURjhfTUFDCQk4CisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSB1c2VkIGZvciBtYXBwaW5ncyBhbmQgYWJicmV2aWF0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbWFwYmxvY2sgbWFwYmxvY2tfVDsKK3N0cnVjdCBtYXBibG9jaworeworICAgIG1hcGJsb2NrX1QJKm1fbmV4dDsJLyogbmV4dCBtYXBibG9jayBpbiBsaXN0ICovCisgICAgY2hhcl91CSptX2tleXM7CS8qIG1hcHBlZCBmcm9tICovCisgICAgaW50CQltX2tleWxlbjsJLyogc3RybGVuKG1fa2V5cykgKi8KKyAgICBjaGFyX3UJKm1fc3RyOwkJLyogbWFwcGVkIHRvICovCisgICAgaW50CQltX21vZGU7CQkvKiB2YWxpZCBtb2RlICovCisgICAgaW50CQltX25vcmVtYXA7CS8qIGlmIG5vbi16ZXJvIG5vIHJlLW1hcHBpbmcgZm9yIG1fc3RyICovCisgICAgY2hhcgltX3NpbGVudDsJLyogPHNpbGVudD4gdXNlZCwgZG9uJ3QgZWNobyBjb21tYW5kcyAqLworI2lmIDAgIC8qIE5vdCB1c2VkIHlldCAqLworICAgIHNjaWRfVAltX3NjcmlwdF9JRDsJLyogSUQgb2Ygc2NyaXB0IHdoZXJlIG1hcCB3YXMgZGVmaW5lZCwKKwkJCQkgICB1c2VkIGZvciBzOiB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyAqLworI2VuZGlmCit9OworCisvKgorICogVXNlZCBmb3IgaGlnaGxpZ2h0aW5nIGluIHRoZSBzdGF0dXMgbGluZS4KKyAqLworc3RydWN0IHN0bF9obHJlYworeworICAgIGNoYXJfdQkqc3RhcnQ7CisgICAgaW50CQl1c2VyaGw7Cit9OworCisvKgorICogYnVmZmVyOiBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBvbmUgZmlsZQorICoKKyAqIFNldmVyYWwgd2luZG93cyBjYW4gc2hhcmUgYSBzaW5nbGUgQnVmZmVyCisgKiBBIGJ1ZmZlciBpcyB1bmFsbG9jYXRlZCBpZiB0aGVyZSBpcyBubyBtZW1maWxlIGZvciBpdC4KKyAqIEEgYnVmZmVyIGlzIG5ldyBpZiB0aGUgYXNzb2NpYXRlZCBmaWxlIGhhcyBuZXZlciBiZWVuIGxvYWRlZCB5ZXQuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZmlsZV9idWZmZXIgYnVmX1Q7CisKK3N0cnVjdCBmaWxlX2J1ZmZlcgoreworICAgIG1lbWxpbmVfVAliX21sOwkJLyogYXNzb2NpYXRlZCBtZW1saW5lIChhbHNvIGNvbnRhaW5zIGxpbmUKKwkJCQkgICBjb3VudCkgKi8KKworICAgIGJ1Zl9UCSpiX25leHQ7CS8qIGxpbmtzIGluIGxpc3Qgb2YgYnVmZmVycyAqLworICAgIGJ1Zl9UCSpiX3ByZXY7CisKKyAgICBpbnQJCWJfbndpbmRvd3M7CS8qIG5yIG9mIHdpbmRvd3Mgb3BlbiBvbiB0aGlzIGJ1ZmZlciAqLworCisgICAgaW50CQliX2ZsYWdzOwkvKiB2YXJpb3VzIEJGXyBmbGFncyAqLworCisgICAgLyoKKyAgICAgKiBiX2ZmbmFtZSBoYXMgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgZmlsZSAoTlVMTCBmb3Igbm8gbmFtZSkuCisgICAgICogYl9zZm5hbWUgaXMgdGhlIG5hbWUgYXMgdGhlIHVzZXIgdHlwZWQgaXQgKG9yIE5VTEwpLgorICAgICAqIGJfZm5hbWUgaXMgdGhlIHNhbWUgYXMgYl9zZm5hbWUsIHVubGVzcyAiOmNkIiBoYXMgYmVlbiBkb25lLAorICAgICAqCQl0aGVuIGl0IGlzIHRoZSBzYW1lIGFzIGJfZmZuYW1lIChOVUxMIGZvciBubyBuYW1lKS4KKyAgICAgKi8KKyAgICBjaGFyX3UJKmJfZmZuYW1lOwkvKiBmdWxsIHBhdGggZmlsZSBuYW1lICovCisgICAgY2hhcl91CSpiX3NmbmFtZTsJLyogc2hvcnQgZmlsZSBuYW1lICovCisgICAgY2hhcl91CSpiX2ZuYW1lOwkvKiBjdXJyZW50IGZpbGUgbmFtZSAqLworCisjaWZkZWYgVU5JWAorICAgIGludAkJYl9kZXY7CQkvKiBkZXZpY2UgbnVtYmVyICgtMSBpZiBub3Qgc2V0KSAqLworICAgIGlub190CWJfaW5vOwkJLyogaW5vZGUgbnVtYmVyICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0NXX0VESVRPUgorICAgIEZTU3BlYwliX0ZTU3BlYzsJLyogTWFjT1MgRmlsZSBJZGVudGlmaWNhdGlvbiAqLworI2VuZGlmCisjaWZkZWYgVk1TCisgICAgY2hhcgliX2ZhYl9yZm07CS8qIFJlY29yZCBmb3JtYXQgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfU05JRkYKKyAgICBpbnQJCWJfc25pZmY7CS8qIGZpbGUgd2FzIGxvYWRlZCB0aHJvdWdoIFNuaWZmICovCisjZW5kaWYKKworICAgIGludAkJYl9mbnVtOwkJLyogYnVmZmVyIG51bWJlciBmb3IgdGhpcyBmaWxlLiAqLworCisgICAgaW50CQliX2NoYW5nZWQ7CS8qICdtb2RpZmllZCc6IFNldCB0byBUUlVFIGlmIHNvbWV0aGluZyBpbiB0aGUKKwkJCQkgICBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgYW5kIG5vdCB3cml0dGVuIG91dC4gKi8KKyAgICBpbnQJCWJfY2hhbmdlZHRpY2s7CS8qIGluY3JlbWVudGVkIGZvciBlYWNoIGNoYW5nZSwgYWxzbyBmb3IgdW5kbyAqLworCisgICAgaW50CQliX3NhdmluZzsJLyogU2V0IHRvIFRSVUUgaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YKKwkJCQkgICBzYXZpbmcgdGhlIGJ1ZmZlci4gKi8KKworICAgIC8qCisgICAgICogQ2hhbmdlcyB0byBhIGJ1ZmZlciByZXF1aXJlIHVwZGF0aW5nIG9mIHRoZSBkaXNwbGF5LiAgVG8gbWluaW1pemUgdGhlCisgICAgICogd29yaywgcmVtZW1iZXIgY2hhbmdlcyBtYWRlIGFuZCB1cGRhdGUgZXZlcnl0aGluZyBhdCBvbmNlLgorICAgICAqLworICAgIGludAkJYl9tb2Rfc2V0OwkvKiBUUlVFIHdoZW4gdGhlcmUgYXJlIGNoYW5nZXMgc2luY2UgdGhlIGxhc3QKKwkJCQkgICB0aW1lIHRoZSBkaXNwbGF5IHdhcyB1cGRhdGVkICovCisgICAgbGluZW5yX1QJYl9tb2RfdG9wOwkvKiB0b3Btb3N0IGxudW0gdGhhdCB3YXMgY2hhbmdlZCAqLworICAgIGxpbmVucl9UCWJfbW9kX2JvdDsJLyogbG51bSBiZWxvdyBsYXN0IGNoYW5nZWQgbGluZSwgQUZURVIgdGhlCisJCQkJICAgY2hhbmdlICovCisgICAgbG9uZwliX21vZF94bGluZXM7CS8qIG51bWJlciBvZiBleHRyYSBidWZmZXIgbGluZXMgaW5zZXJ0ZWQ7CisJCQkJICAgbmVnYXRpdmUgd2hlbiBsaW5lcyB3ZXJlIGRlbGV0ZWQgKi8KKworICAgIHdpbmluZm9fVAkqYl93aW5pbmZvOwkvKiBsaXN0IG9mIGxhc3QgdXNlZCBpbmZvIGZvciBlYWNoIHdpbmRvdyAqLworCisgICAgbG9uZwliX210aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lIG9mIG9yaWdpbmFsIGZpbGUgKi8KKyAgICBsb25nCWJfbXRpbWVfcmVhZDsJLyogbGFzdCBjaGFuZ2UgdGltZSB3aGVuIHJlYWRpbmcgKi8KKyAgICBzaXplX3QJYl9vcmlnX3NpemU7CS8qIHNpemUgb2Ygb3JpZ2luYWwgZmlsZSBpbiBieXRlcyAqLworICAgIGludAkJYl9vcmlnX21vZGU7CS8qIG1vZGUgb2Ygb3JpZ2luYWwgZmlsZSAqLworCisgICAgcG9zX1QJYl9uYW1lZG1bTk1BUktTXTsgLyogY3VycmVudCBuYW1lZCBtYXJrcyAobWFyay5jKSAqLworCisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICAvKiBUaGVzZSB2YXJpYWJsZXMgYXJlIHNldCB3aGVuIFZJc3VhbF9hY3RpdmUgYmVjb21lcyBGQUxTRSAqLworICAgIHBvc19UCWJfdmlzdWFsX3N0YXJ0OwkvKiBzdGFydCBwb3Mgb2YgbGFzdCBWSXN1YWwgKi8KKyAgICBwb3NfVAliX3Zpc3VhbF9lbmQ7CS8qIGVuZCBwb3NpdGlvbiBvZiBsYXN0IFZJc3VhbCAqLworICAgIGludAkJYl92aXN1YWxfbW9kZTsJLyogVklzdWFsX21vZGUgb2YgbGFzdCBWSXN1YWwgKi8KKyMgaWZkZWYgRkVBVF9FVkFMCisgICAgaW50CQliX3Zpc3VhbF9tb2RlX2V2YWw7ICAvKiBiX3Zpc3VhbF9tb2RlIGZvciB2aXN1YWxtb2RlKCkgKi8KKyMgZW5kaWYKKyAgICBjb2xucl9UCWJfdmlzdWFsX2N1cnN3YW50OyAgIC8qIE1BWENPTCBmcm9tIHdfY3Vyc3dhbnQgKi8KKyNlbmRpZgorCisgICAgcG9zX1QJYl9sYXN0X2N1cnNvcjsJLyogY3Vyc29yIHBvc2l0aW9uIHdoZW4gbGFzdCB1bmxvYWRpbmcgdGhpcworCQkJCSAgIGJ1ZmZlciAqLworICAgIHBvc19UCWJfbGFzdF9pbnNlcnQ7CS8qIHdoZXJlIEluc2VydCBtb2RlIHdhcyBsZWZ0ICovCisgICAgcG9zX1QJYl9sYXN0X2NoYW5nZTsJLyogcG9zaXRpb24gb2YgbGFzdCBjaGFuZ2U6ICcuIG1hcmsgKi8KKworI2lmZGVmIEZFQVRfSlVNUExJU1QKKyAgICAvKgorICAgICAqIHRoZSBjaGFuZ2VsaXN0IGNvbnRhaW5zIG9sZCBjaGFuZ2UgcG9zaXRpb25zCisgICAgICovCisgICAgcG9zX1QJYl9jaGFuZ2VsaXN0W0pVTVBMSVNUU0laRV07CisgICAgaW50CQliX2NoYW5nZWxpc3RsZW47CS8qIG51bWJlciBvZiBhY3RpdmUgZW50cmllcyAqLworICAgIGludAkJYl9uZXdfY2hhbmdlOwkJLyogc2V0IGJ5IHVfc2F2ZWNvbW1vbigpICovCisjZW5kaWYKKworICAgIC8qCisgICAgICogQ2hhcmFjdGVyIHRhYmxlLCBvbmx5IHVzZWQgaW4gY2hhcnNldC5jIGZvciAnaXNrZXl3b3JkJworICAgICAqIDMyIGJ5dGVzIG9mIDggYml0czogMSBiaXQgcGVyIGNoYXJhY3RlciAwLTI1NS4KKyAgICAgKi8KKyAgICBjaGFyX3UJYl9jaGFydGFiWzMyXTsKKworI2lmZGVmIEZFQVRfTE9DQUxNQVAKKyAgICAvKiBUYWJsZSB1c2VkIGZvciBtYXBwaW5ncyBsb2NhbCB0byBhIGJ1ZmZlci4gKi8KKyAgICBtYXBibG9ja19UCSooYl9tYXBoYXNoWzI1Nl0pOworCisgICAgLyogRmlyc3QgYWJicmV2aWF0aW9uIGxvY2FsIHRvIGEgYnVmZmVyLiAqLworICAgIG1hcGJsb2NrX1QJKmJfZmlyc3RfYWJicjsKKyNlbmRpZgorI2lmZGVmIEZFQVRfVVNSX0NNRFMKKyAgICAvKiBVc2VyIGNvbW1hbmRzIGxvY2FsIHRvIHRoZSBidWZmZXIuICovCisgICAgZ2FycmF5X1QJYl91Y21kczsKKyNlbmRpZgorICAgIC8qCisgICAgICogc3RhcnQgYW5kIGVuZCBvZiBhbiBvcGVyYXRvciwgYWxzbyB1c2VkIGZvciAnWyBhbmQgJ10KKyAgICAgKi8KKyAgICBwb3NfVAliX29wX3N0YXJ0OworICAgIHBvc19UCWJfb3BfZW5kOworCisjaWZkZWYgRkVBVF9WSU1JTkZPCisgICAgaW50CQliX21hcmtzX3JlYWQ7CS8qIEhhdmUgd2UgcmVhZCB2aW1pbmZvIG1hcmtzIHlldD8gKi8KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBUaGUgZm9sbG93aW5nIG9ubHkgdXNlZCBpbiB1bmRvLmMuCisgICAgICovCisgICAgdV9oZWFkZXJfVAkqYl91X29sZGhlYWQ7CS8qIHBvaW50ZXIgdG8gb2xkZXN0IGhlYWRlciAqLworICAgIHVfaGVhZGVyX1QJKmJfdV9uZXdoZWFkOwkvKiBwb2ludGVyIHRvIG5ld2VzdCBoZWFkZXIgKi8KKyAgICB1X2hlYWRlcl9UCSpiX3VfY3VyaGVhZDsJLyogcG9pbnRlciB0byBjdXJyZW50IGhlYWRlciAqLworICAgIGludAkJYl91X251bWhlYWQ7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGhlYWRlcnMgKi8KKyAgICBpbnQJCWJfdV9zeW5jZWQ7CS8qIGVudHJ5IGxpc3RzIGFyZSBzeW5jZWQgKi8KKworICAgIC8qCisgICAgICogdmFyaWFibGVzIGZvciAiVSIgY29tbWFuZCBpbiB1bmRvLmMKKyAgICAgKi8KKyAgICBjaGFyX3UJKmJfdV9saW5lX3B0cjsJLyogc2F2ZWQgbGluZSBmb3IgIlUiIGNvbW1hbmQgKi8KKyAgICBsaW5lbnJfVAliX3VfbGluZV9sbnVtOwkvKiBsaW5lIG51bWJlciBvZiBsaW5lIGluIHVfbGluZSAqLworICAgIGNvbG5yX1QJYl91X2xpbmVfY29sbnI7CS8qIG9wdGlvbmFsIGNvbHVtbiBudW1iZXIgKi8KKworICAgIC8qCisgICAgICogVGhlIGZvbGxvd2luZyBvbmx5IHVzZWQgaW4gdW5kby5jCisgICAgICovCisgICAgbWJsb2NrX1QJYl9ibG9ja19oZWFkOwkvKiBoZWFkIG9mIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2sgbGlzdCAqLworICAgIG1pbmZvX1QJKmJfbV9zZWFyY2g7CS8qIHBvaW50ZXIgdG8gY2h1bmsgYmVmb3JlIHByZXZpb3VzbHkKKwkJCQkgICBhbGxvY2F0ZWQvZnJlZWQgY2h1bmsgKi8KKyAgICBtYmxvY2tfVAkqYl9tYl9jdXJyZW50OwkvKiBibG9jayB3aGVyZSBtX3NlYXJjaCBwb2ludHMgaW4gKi8KKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKyAgICBpbnQJCWJfc2Nhbm5lZDsJLyogXk4vXlAgaGF2ZSBzY2FubmVkIHRoaXMgYnVmZmVyICovCisjZW5kaWYKKworICAgIC8qIGZsYWdzIGZvciB1c2Ugb2YgIjpsbWFwIiBhbmQgSU0gY29udHJvbCAqLworICAgIGxvbmcJYl9wX2ltaW5zZXJ0OwkvKiBpbnB1dCBtb2RlIGZvciBpbnNlcnQgKi8KKyAgICBsb25nCWJfcF9pbXNlYXJjaDsJLyogaW5wdXQgbW9kZSBmb3Igc2VhcmNoICovCisjZGVmaW5lIEJfSU1PREVfVVNFX0lOU0VSVCAtMQkvKglVc2UgYl9wX2ltaW5zZXJ0IHZhbHVlIGZvciBzZWFyY2ggKi8KKyNkZWZpbmUgQl9JTU9ERV9OT05FIDAJCS8qCUlucHV0IHZpYSBub25lICovCisjZGVmaW5lIEJfSU1PREVfTE1BUCAxCQkvKglJbnB1dCB2aWEgbGFuZ21hcCAqLworI2lmbmRlZiBVU0VfSU1fQ09OVFJPTAorIyBkZWZpbmUgQl9JTU9ERV9MQVNUIDEKKyNlbHNlCisjIGRlZmluZSBCX0lNT0RFX0lNIDIJCS8qCUlucHV0IHZpYSBpbnB1dCBtZXRob2QgKi8KKyMgZGVmaW5lIEJfSU1PREVfTEFTVCAyCisjZW5kaWYKKworI2lmZGVmIEZFQVRfS0VZTUFQCisgICAgc2hvcnQJYl9rbWFwX3N0YXRlOwkvKiB1c2luZyAibG1hcCIgbWFwcGluZ3MgKi8KKyMgZGVmaW5lIEtFWU1BUF9JTklUCTEJLyogJ2tleW1hcCcgd2FzIHNldCwgY2FsbCBrZXltYXBfaW5pdCgpICovCisjIGRlZmluZSBLRVlNQVBfTE9BREVECTIJLyogJ2tleW1hcCcgbWFwcGluZ3MgaGF2ZSBiZWVuIGxvYWRlZCAqLworICAgIGdhcnJheV9UCWJfa21hcF9nYTsJLyogdGhlIGtleW1hcCB0YWJsZSAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE9wdGlvbnMgbG9jYWwgdG8gYSBidWZmZXIuCisgICAgICogVGhleSBhcmUgaGVyZSBiZWNhdXNlIHRoZWlyIHZhbHVlIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgZmlsZQorICAgICAqIG9yIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGJlaW5nIGVkaXRlZC4KKyAgICAgKi8KKyAgICBpbnQJCWJfcF9pbml0aWFsaXplZDsJLyogc2V0IHdoZW4gb3B0aW9ucyBpbml0aWFsaXplZCAqLworCisgICAgaW50CQliX3BfYWk7CQkvKiAnYXV0b2luZGVudCcgKi8KKyAgICBpbnQJCWJfcF9haV9ub3Bhc3RlOwkvKiBiX3BfYWkgc2F2ZWQgZm9yIHBhc3RlIG1vZGUgKi8KKyAgICBpbnQJCWJfcF9jaTsJCS8qICdjb3B5aW5kZW50JyAqLworICAgIGludAkJYl9wX2JpbjsJLyogJ2JpbmFyeScgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaW50CQliX3BfYm9tYjsJLyogJ2JvbWInICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpCisgICAgY2hhcl91CSpiX3BfYmg7CS8qICdidWZoaWRkZW4nICovCisgICAgY2hhcl91CSpiX3BfYnQ7CS8qICdidWZ0eXBlJyAqLworI2VuZGlmCisgICAgaW50CQliX3BfYmw7CQkvKiAnYnVmbGlzdGVkJyAqLworI2lmZGVmIEZFQVRfQ0lOREVOVAorICAgIGludAkJYl9wX2NpbjsJLyogJ2NpbmRlbnQnICovCisgICAgY2hhcl91CSpiX3BfY2lubzsJLyogJ2Npbm9wdGlvbnMnICovCisgICAgY2hhcl91CSpiX3BfY2luazsJLyogJ2NpbmtleXMnICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfQ0lOREVOVCkgfHwgZGVmaW5lZChGRUFUX1NNQVJUSU5ERU5UKQorICAgIGNoYXJfdQkqYl9wX2Npbnc7CS8qICdjaW53b3JkcycgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfQ09NTUVOVFMKKyAgICBjaGFyX3UJKmJfcF9jb207CS8qICdjb21tZW50cycgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9MRElORworICAgIGNoYXJfdQkqYl9wX2NtczsJLyogJ2NvbW1lbnRzdHJpbmcnICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKyAgICBjaGFyX3UJKmJfcF9jcHQ7CS8qICdjb21wbGV0ZScgKi8KKyNlbmRpZgorICAgIGludAkJYl9wX2VvbDsJLyogJ2VuZG9mbGluZScgKi8KKyAgICBpbnQJCWJfcF9ldDsJCS8qICdleHBhbmR0YWInICovCisgICAgaW50CQliX3BfZXRfbm9iaW47CS8qIGJfcF9ldCBzYXZlZCBmb3IgYmluYXJ5IG1vZGUgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgY2hhcl91CSpiX3BfZmVuYzsJLyogJ2ZpbGVlbmNvZGluZycgKi8KKyNlbmRpZgorICAgIGNoYXJfdQkqYl9wX2ZmOwkvKiAnZmlsZWZvcm1hdCcgKi8KKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBjaGFyX3UJKmJfcF9mdDsJLyogJ2ZpbGV0eXBlJyAqLworI2VuZGlmCisgICAgY2hhcl91CSpiX3BfZm87CS8qICdmb3JtYXRvcHRpb25zJyAqLworICAgIGludAkJYl9wX2luZjsJLyogJ2luZmVyY2FzZScgKi8KKyAgICBjaGFyX3UJKmJfcF9pc2s7CS8qICdpc2tleXdvcmQnICovCisjaWZkZWYgRkVBVF9GSU5EX0lECisgICAgY2hhcl91CSpiX3BfZGVmOwkvKiAnZGVmaW5lJyBsb2NhbCB2YWx1ZSAqLworICAgIGNoYXJfdQkqYl9wX2luYzsJLyogJ2luY2x1ZGUnICovCisjIGlmZGVmIEZFQVRfRVZBTAorICAgIGNoYXJfdQkqYl9wX2luZXg7CS8qICdpbmNsdWRlZXhwcicgKi8KKyMgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9DSU5ERU5UKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKyAgICBjaGFyX3UJKmJfcF9pbmRlOwkvKiAnaW5kZW50ZXhwcicgKi8KKyAgICBjaGFyX3UJKmJfcF9pbmRrOwkvKiAnaW5kZW50a2V5cycgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfQ1JZUFQKKyAgICBjaGFyX3UJKmJfcF9rZXk7CS8qICdrZXknICovCisjZW5kaWYKKyAgICBjaGFyX3UJKmJfcF9rcDsJLyogJ2tleXdvcmRwcmcnICovCisjaWZkZWYgRkVBVF9MSVNQCisgICAgaW50CQliX3BfbGlzcDsJLyogJ2xpc3AnICovCisjZW5kaWYKKyAgICBjaGFyX3UJKmJfcF9tcHM7CS8qICdtYXRjaHBhaXJzJyAqLworICAgIGludAkJYl9wX21sOwkJLyogJ21vZGVsaW5lJyAqLworICAgIGludAkJYl9wX21sX25vYmluOwkvKiBiX3BfbWwgc2F2ZWQgZm9yIGJpbmFyeSBtb2RlICovCisgICAgaW50CQliX3BfbWE7CQkvKiAnbW9kaWZpYWJsZScgKi8KKyAgICBjaGFyX3UJKmJfcF9uZjsJLyogJ25yZm9ybWF0cycgKi8KKyNpZmRlZiBGRUFUX09TRklMRVRZUEUKKyAgICBjaGFyX3UJKmJfcF9vZnQ7CS8qICdvc2ZpbGV0eXBlJyAqLworI2VuZGlmCisgICAgaW50CQliX3BfcGk7CQkvKiAncHJlc2VydmVpbmRlbnQnICovCisgICAgaW50CQliX3Bfcm87CQkvKiAncmVhZG9ubHknICovCisgICAgbG9uZwliX3Bfc3c7CQkvKiAnc2hpZnR3aWR0aCcgKi8KKyNpZm5kZWYgU0hPUlRfRk5BTUUKKyAgICBpbnQJCWJfcF9zbjsJCS8qICdzaG9ydG5hbWUnICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisgICAgaW50CQliX3Bfc2k7CQkvKiAnc21hcnRpbmRlbnQnICovCisjZW5kaWYKKyAgICBsb25nCWJfcF9zdHM7CS8qICdzb2Z0dGFic3RvcCcgKi8KKyAgICBsb25nCWJfcF9zdHNfbm9wYXN0ZTsgLyogYl9wX3N0cyBzYXZlZCBmb3IgcGFzdGUgbW9kZSAqLworI2lmZGVmIEZFQVRfU0VBUkNIUEFUSAorICAgIGNoYXJfdQkqYl9wX3N1YTsJLyogJ3N1ZmZpeGVzYWRkJyAqLworI2VuZGlmCisgICAgaW50CQliX3Bfc3dmOwkvKiAnc3dhcGZpbGUnICovCisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBjaGFyX3UJKmJfcF9zeW47CS8qICdzeW50YXgnICovCisjZW5kaWYKKyAgICBsb25nCWJfcF90czsJCS8qICd0YWJzdG9wJyAqLworICAgIGludAkJYl9wX3R4OwkJLyogJ3RleHRtb2RlJyAqLworICAgIGxvbmcJYl9wX3R3OwkJLyogJ3RleHR3aWR0aCcgKi8KKyAgICBsb25nCWJfcF90d19ub2JpbjsJLyogYl9wX3R3IHNhdmVkIGZvciBiaW5hcnkgbW9kZSAqLworICAgIGxvbmcJYl9wX3R3X25vcGFzdGU7CS8qIGJfcF90dyBzYXZlZCBmb3IgcGFzdGUgbW9kZSAqLworICAgIGxvbmcJYl9wX3dtOwkJLyogJ3dyYXBtYXJnaW4nICovCisgICAgbG9uZwliX3Bfd21fbm9iaW47CS8qIGJfcF93bSBzYXZlZCBmb3IgYmluYXJ5IG1vZGUgKi8KKyAgICBsb25nCWJfcF93bV9ub3Bhc3RlOwkvKiBiX3Bfd20gc2F2ZWQgZm9yIHBhc3RlIG1vZGUgKi8KKyNpZmRlZiBGRUFUX0tFWU1BUAorICAgIGNoYXJfdQkqYl9wX2tleW1hcDsJLyogJ2tleW1hcCcgKi8KKyNlbmRpZgorCisgICAgLyogbG9jYWwgdmFsdWVzIGZvciBvcHRpb25zIHdoaWNoIGFyZSBub3JtYWxseSBnbG9iYWwgKi8KKyNpZmRlZiBGRUFUX1FVSUNLRklYCisgICAgY2hhcl91CSpiX3BfZ3A7CS8qICdncmVwcHJnJyBsb2NhbCB2YWx1ZSAqLworICAgIGNoYXJfdQkqYl9wX21wOwkvKiAnbWFrZXByZycgbG9jYWwgdmFsdWUgKi8KKyAgICBjaGFyX3UJKmJfcF9lZm07CS8qICdlcnJvcmZvcm1hdCcgbG9jYWwgdmFsdWUgKi8KKyNlbmRpZgorICAgIGNoYXJfdQkqYl9wX2VwOwkvKiAnZXF1YWxwcmcnIGxvY2FsIHZhbHVlICovCisgICAgY2hhcl91CSpiX3BfcGF0aDsJLyogJ3BhdGgnIGxvY2FsIHZhbHVlICovCisgICAgaW50CQliX3BfYXI7CQkvKiAnYXV0b3JlYWQnIGxvY2FsIHZhbHVlICovCisgICAgY2hhcl91CSpiX3BfdGFnczsJLyogJ3RhZ3MnIGxvY2FsIHZhbHVlICovCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisgICAgY2hhcl91CSpiX3BfZGljdDsJLyogJ2RpY3Rpb25hcnknIGxvY2FsIHZhbHVlICovCisgICAgY2hhcl91CSpiX3BfdHNyOwkvKiAndGhlc2F1cnVzJyBsb2NhbCB2YWx1ZSAqLworI2VuZGlmCisKKyAgICAvKiBlbmQgb2YgYnVmZmVyIG9wdGlvbnMgKi8KKworICAgIGludAkJYl9zdGFydF9lb2w7CS8qIGxhc3QgbGluZSBoYWQgZW9sIHdoZW4gaXQgd2FzIHJlYWQgKi8KKyAgICBpbnQJCWJfc3RhcnRfZmZjOwkvKiBmaXJzdCBjaGFyIG9mICdmZicgd2hlbiBlZGl0IHN0YXJ0ZWQgKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgY2hhcl91CSpiX3N0YXJ0X2ZlbmM7CS8qICdmaWxlZW5jb2RpbmcnIHdoZW4gZWRpdCBzdGFydGVkIG9yIE5VTEwgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9FVkFMCisgICAgZ2FycmF5X1QJYl92YXJzOwkJLyogaW50ZXJuYWwgdmFyaWFibGVzLCBsb2NhbCB0byBidWZmZXIgKi8KKyNlbmRpZgorCisgICAgLyogV2hlbiBhIGJ1ZmZlciBpcyBjcmVhdGVkLCBpdCBzdGFydHMgd2l0aG91dCBhIHN3YXAgZmlsZS4gIGJfbWF5X3N3YXAgaXMKKyAgICAgKiB0aGVuIHNldCB0byBpbmRpY2F0ZSB0aGF0IGEgc3dhcCBmaWxlIG1heSBiZSBvcGVuZWQgbGF0ZXIuICBJdCBpcyByZXNldAorICAgICAqIGlmIGEgc3dhcCBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQuCisgICAgICovCisgICAgaW50CQliX21heV9zd2FwOworICAgIGludAkJYl9kaWRfd2FybjsJLyogU2V0IHRvIDEgaWYgdXNlciBoYXMgYmVlbiB3YXJuZWQgb24gZmlyc3QKKwkJCQkgICBjaGFuZ2Ugb2YgYSByZWFkLW9ubHkgZmlsZSAqLworICAgIGludAkJYl9oZWxwOwkJLyogYnVmZmVyIGZvciBoZWxwIGZpbGUgKHdoZW4gc2V0IGJfcF9idCBpcworCQkJCSAgICJoZWxwIikgKi8KKworI2lmbmRlZiBTSE9SVF9GTkFNRQorICAgIGludAkJYl9zaG9ydG5hbWU7CS8qIHRoaXMgZmlsZSBoYXMgYW4gOC4zIGZpbGUgbmFtZSAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1BFUkwKKyAgICB2b2lkCSpwZXJsX3ByaXZhdGU7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfUFlUSE9OCisgICAgdm9pZAkqcHl0aG9uX3JlZjsJLyogVGhlIFB5dGhvbiB2YWx1ZSByZWZlcnJpbmcgdG8gdGhpcyBidWZmZXIgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9UQ0wKKyAgICB2b2lkCSp0Y2xfcmVmOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1JVQlkKKyAgICB2b2lkCSpydWJ5X3JlZjsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBrZXllbnRyeV9UCSoqYl9rZXl3dGFiOwkJLyogc3ludGF4IGtleXdvcmRzIGhhc2ggdGFibGUgKi8KKyAgICBrZXllbnRyeV9UCSoqYl9rZXl3dGFiX2ljOwkJLyogaWRlbSwgaWdub3JlIGNhc2UgKi8KKyAgICBpbnQJCWJfc3luX2ljOwkJLyogaWdub3JlIGNhc2UgZm9yIDpzeW4gY21kcyAqLworICAgIGdhcnJheV9UCWJfc3luX3BhdHRlcm5zOwkJLyogdGFibGUgZm9yIHN5bnRheCBwYXR0ZXJucyAqLworICAgIGdhcnJheV9UCWJfc3luX2NsdXN0ZXJzOwkJLyogdGFibGUgZm9yIHN5bnRheCBjbHVzdGVycyAqLworICAgIGludAkJYl9zeW5fY29udGFpbmVkaW47CS8qIFRSVUUgd2hlbiB0aGVyZSBpcyBhbiBpdGVtIHdpdGggYQorCQkJCQkgICAiY29udGFpbmVkaW4iIGFyZ3VtZW50ICovCisgICAgaW50CQliX3N5bl9zeW5jX2ZsYWdzOwkvKiBmbGFncyBhYm91dCBob3cgdG8gc3luYyAqLworICAgIHNob3J0CWJfc3luX3N5bmNfaWQ7CQkvKiBncm91cCB0byBzeW5jIG9uICovCisgICAgbG9uZwliX3N5bl9zeW5jX21pbmxpbmVzOwkvKiBtaW5pbWFsIHN5bmMgbGluZXMgb2Zmc2V0ICovCisgICAgbG9uZwliX3N5bl9zeW5jX21heGxpbmVzOwkvKiBtYXhpbWFsIHN5bmMgbGluZXMgb2Zmc2V0ICovCisgICAgbG9uZwliX3N5bl9zeW5jX2xpbmVicmVha3M7CS8qIG9mZnNldCBmb3IgbXVsdGktbGluZSBwYXR0ZXJuICovCisgICAgY2hhcl91CSpiX3N5bl9saW5lY29udF9wYXQ7CS8qIGxpbmUgY29udGludWF0aW9uIHBhdHRlcm4gKi8KKyAgICByZWdwcm9nX1QJKmJfc3luX2xpbmVjb250X3Byb2c7CS8qIGxpbmUgY29udGludWF0aW9uIHByb2dyYW0gKi8KKyAgICBpbnQJCWJfc3luX2xpbmVjb250X2ljOwkvKiBpZ25vcmUtY2FzZSBmbGFnIGZvciBhYm92ZSAqLworICAgIGludAkJYl9zeW5fdG9wZ3JwOwkJLyogZm9yICI6c3ludGF4IGluY2x1ZGUiICovCisjIGlmZGVmIEZFQVRfRk9MRElORworICAgIGludAkJYl9zeW5fZm9sZGl0ZW1zOwkvKiBudW1iZXIgb2YgcGF0dGVybnMgd2l0aCB0aGUgSExfRk9MRAorCQkJCQkgICBmbGFnIHNldCAqLworIyBlbmRpZgorLyoKKyAqIGJfc3N0X2FycmF5W10gY29udGFpbnMgdGhlIHN0YXRlIHN0YWNrIGZvciBhIG51bWJlciBvZiBsaW5lcywgZm9yIHRoZSBzdGFydAorICogb2YgdGhhdCBsaW5lIChjb2wgPT0gMCkuICBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gcmVjb21wdXRlIHRoZSBzeW50YXggc3RhdGUKKyAqIHRvbyBvZnRlbi4KKyAqIGJfc3N0X2FycmF5W10gaXMgYWxsb2NhdGVkIHRvIGhvbGQgdGhlIHN0YXRlIGZvciBhbGwgZGlzcGxheWVkIGxpbmVzLCBhbmQKKyAqIHN0YXRlcyBmb3IgMSBvdXQgb2YgYWJvdXQgMjAgb3RoZXIgbGluZXMuCisgKiBiX3NzdF9hcnJheQkJcG9pbnRlciB0byBhbiBhcnJheSBvZiBzeW5zdGF0ZV9UCisgKiBiX3NzdF9sZW4JCW51bWJlciBvZiBlbnRyaWVzIGluIGJfc3N0X2FycmF5W10KKyAqIGJfc3N0X2ZpcnN0CQlwb2ludGVyIHRvIGZpcnN0IHVzZWQgZW50cnkgaW4gYl9zc3RfYXJyYXlbXSBvciBOVUxMCisgKiBiX3NzdF9maXJzdGZyZWUJcG9pbnRlciB0byBmaXJzdCBmcmVlIGVudHJ5IGluIGJfc3N0X2FycmF5W10gb3IgTlVMTAorICogYl9zc3RfZnJlZWNvdW50CW51bWJlciBvZiBmcmVlIGVudHJpZXMgaW4gYl9zc3RfYXJyYXlbXQorICogYl9zc3RfY2hlY2tfbG51bQllbnRyaWVzIGFmdGVyIHRoaXMgbG51bSBuZWVkIHRvIGJlIGNoZWNrZWQgZm9yCisgKgkJCXZhbGlkaXR5IChNQVhMTlVNIG1lYW5zIG5vIGNoZWNrIG5lZWRlZCkKKyAqLworICAgIHN5bnN0YXRlX1QJKmJfc3N0X2FycmF5OworICAgIGludAkJYl9zc3RfbGVuOworICAgIHN5bnN0YXRlX1QJKmJfc3N0X2ZpcnN0OworICAgIHN5bnN0YXRlX1QJKmJfc3N0X2ZpcnN0ZnJlZTsKKyAgICBpbnQJCWJfc3N0X2ZyZWVjb3VudDsKKyAgICBsaW5lbnJfVAliX3NzdF9jaGVja19sbnVtOworICAgIHNob3J0X3UJYl9zc3RfbGFzdHRpY2s7CS8qIGxhc3QgZGlzcGxheSB0aWNrICovCisjZW5kaWYgLyogRkVBVF9TWU5fSEwgKi8KKworI2lmZGVmIEZFQVRfU0lHTlMKKyAgICBzaWdubGlzdF9UCSpiX3NpZ25saXN0OwkvKiBsaXN0IG9mIHNpZ25zIHRvIGRyYXcgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisgICAgaW50CQliX25ldGJlYW5zX2ZpbGU7ICAgIC8qIFRSVUUgd2hlbiBidWZmZXIgaXMgb3duZWQgYnkgTmV0QmVhbnMgKi8KKyAgICBpbnQJCWJfd2FzX25ldGJlYW5zX2ZpbGU7LyogVFJVRSBpZiBiX25ldGJlYW5zX2ZpbGUgd2FzIG9uY2Ugc2V0ICovCisjZW5kaWYKKworfTsKKworLyoKKyAqIFN0cnVjdHVyZSB0byBjYWNoZSBpbmZvIGZvciBkaXNwbGF5ZWQgbGluZXMgaW4gd19saW5lc1tdLgorICogRWFjaCBsb2dpY2FsIGxpbmUgaGFzIG9uZSBlbnRyeS4KKyAqIFRoZSBlbnRyeSB0ZWxscyBob3cgdGhlIGxvZ2ljYWwgbGluZSBpcyBjdXJyZW50bHkgZGlzcGxheWVkIGluIHRoZSB3aW5kb3cuCisgKiBUaGlzIGlzIHVwZGF0ZWQgd2hlbiBkaXNwbGF5aW5nIHRoZSB3aW5kb3cuCisgKiBXaGVuIHRoZSBkaXNwbGF5IGlzIGNoYW5nZWQgKGUuZy4sIHdoZW4gY2xlYXJpbmcgdGhlIHNjcmVlbikgd19saW5lc192YWxpZAorICogaXMgY2hhbmdlZCB0byBleGNsdWRlIGludmFsaWQgZW50cmllcy4KKyAqIFdoZW4gbWFraW5nIGNoYW5nZXMgdG8gdGhlIGJ1ZmZlciwgd2xfdmFsaWQgaXMgcmVzZXQgdG8gaW5kaWNhdGUgd2xfc2l6ZQorICogbWF5IG5vdCByZWZsZWN0IHdoYXQgaXMgYWN0dWFsbHkgaW4gdGhlIGJ1ZmZlci4gIFdoZW4gd2xfdmFsaWQgaXMgRkFMU0UsCisgKiB0aGUgZW50cmllcyBjYW4gb25seSBiZSB1c2VkIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgZGlzcGxheWVkIGxpbmVzIHVzZWQuCisgKiB3bF9sbnVtIGFuZCB3bF9sYXN0bG51bSBhcmUgaW52YWxpZCB0b28uCisgKi8KK3R5cGVkZWYgc3RydWN0IHdfbGluZQoreworICAgIGxpbmVucl9UCXdsX2xudW07CS8qIGJ1ZmZlciBsaW5lIG51bWJlciBmb3IgbG9naWNhbCBsaW5lICovCisgICAgc2hvcnRfdQl3bF9zaXplOwkvKiBoZWlnaHQgaW4gc2NyZWVuIGxpbmVzICovCisgICAgY2hhcgl3bF92YWxpZDsJLyogVFJVRSB2YWx1ZXMgYXJlIHZhbGlkIGZvciB0ZXh0IGluIGJ1ZmZlciAqLworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGNoYXIJd2xfZm9sZGVkOwkvKiBUUlVFIHdoZW4gdGhpcyBpcyBhIHJhbmdlIG9mIGZvbGRlZCBsaW5lcyAqLworICAgIGxpbmVucl9UCXdsX2xhc3RsbnVtOwkvKiBsYXN0IGJ1ZmZlciBsaW5lIG51bWJlciBmb3IgbG9naWNhbCBsaW5lICovCisjZW5kaWYKK30gd2xpbmVfVDsKKworLyoKKyAqIFdpbmRvd3MgYXJlIGtlcHQgaW4gYSB0cmVlIG9mIGZyYW1lcy4gIEVhY2ggZnJhbWUgaGFzIGEgY29sdW1uIChGUl9DT0wpCisgKiBvciByb3cgKEZSX1JPVykgbGF5b3V0IG9yIGlzIGEgbGVhZiwgd2hpY2ggaGFzIGEgd2luZG93LgorICovCitzdHJ1Y3QgZnJhbWUKK3sKKyAgICBjaGFyCWZyX2xheW91dDsJLyogRlJfTEVBRiwgRlJfQ09MIG9yIEZSX1JPVyAqLworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaW50CQlmcl93aWR0aDsKKyNlbmRpZgorICAgIGludAkJZnJfaGVpZ2h0OworICAgIGludAkJZnJfbmV3aGVpZ2h0OwkvKiBuZXcgaGVpZ2h0IHVzZWQgaW4gd2luX2VxdWFsX3JlYygpICovCisgICAgZnJhbWVfVAkqZnJfcGFyZW50OwkvKiBjb250YWluaW5nIGZyYW1lIG9yIE5VTEwgKi8KKyAgICBmcmFtZV9UCSpmcl9uZXh0OwkvKiBmcmFtZSByaWdodCBvciBiZWxvdyBpbiBzYW1lIHBhcmVudCwgTlVMTAorCQkJCSAgIGZvciBmaXJzdCAqLworICAgIGZyYW1lX1QJKmZyX3ByZXY7CS8qIGZyYW1lIGxlZnQgb3IgYWJvdmUgaW4gc2FtZSBwYXJlbnQsIE5VTEwKKwkJCQkgICBmb3IgbGFzdCAqLworICAgIC8qIGZyX2NoaWxkIGFuZCBmcl93aW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAqLworICAgIGZyYW1lX1QJKmZyX2NoaWxkOwkvKiBmaXJzdCBjb250YWluZWQgZnJhbWUgKi8KKyAgICB3aW5fVAkqZnJfd2luOwkvKiB3aW5kb3cgdGhhdCBmaWxscyB0aGlzIGZyYW1lICovCit9OworCisjZGVmaW5lIEZSX0xFQUYJMAkvKiBmcmFtZSBpcyBhIGxlYWYgKi8KKyNkZWZpbmUgRlJfUk9XCTEJLyogZnJhbWUgd2l0aCBhIHJvdyBvZiB3aW5kb3dzICovCisjZGVmaW5lIEZSX0NPTAkyCS8qIGZyYW1lIHdpdGggYSBjb2x1bW4gb2Ygd2luZG93cyAqLworCisvKgorICogU3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIGFsbCBpbmZvcm1hdGlvbiB0aGF0IGJlbG9uZ3MgdG8gYSB3aW5kb3cKKyAqCisgKiBBbGwgcm93IG51bWJlcnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgd2luZG93LCBleGNlcHQgd193aW5yb3cuCisgKi8KK3N0cnVjdCB3aW5kb3cKK3sKKyAgICBidWZfVAkqd19idWZmZXI7CSAgICAvKiBidWZmZXIgd2UgYXJlIGEgd2luZG93IGludG8gKHVzZWQKKwkJCQkgICAgICAgb2Z0ZW4sIGtlZXAgaXQgdGhlIGZpcnN0IGl0ZW0hKSAqLworCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgd2luX1QJKndfcHJldjsJICAgIC8qIGxpbmsgdG8gcHJldmlvdXMgd2luZG93ICovCisgICAgd2luX1QJKndfbmV4dDsJICAgIC8qIGxpbmsgdG8gbmV4dCB3aW5kb3cgKi8KKyNlbmRpZgorCisgICAgZnJhbWVfVAkqd19mcmFtZTsJICAgIC8qIGZyYW1lIGNvbnRhaW5pbmcgdGhpcyB3aW5kb3cgKi8KKworICAgIHBvc19UCXdfY3Vyc29yOwkgICAgLyogY3Vyc29yIHBvc2l0aW9uIGluIGJ1ZmZlciAqLworCisgICAgY29sbnJfVAl3X2N1cnN3YW50OwkgICAgLyogVGhlIGNvbHVtbiB3ZSdkIGxpa2UgdG8gYmUgYXQuICBUaGlzIGlzCisJCQkJICAgICAgIHVzZWQgdG8gdHJ5IHRvIHN0YXkgaW4gdGhlIHNhbWUgY29sdW1uCisJCQkJICAgICAgIGZvciB1cC9kb3duIGN1cnNvciBtb3Rpb25zLiAqLworCisgICAgaW50CQl3X3NldF9jdXJzd2FudDsJICAgIC8qIElmIHNldCwgdGhlbiB1cGRhdGUgd19jdXJzd2FudCB0aGUgbmV4dAorCQkJCSAgICAgICB0aW1lIHRocm91Z2ggY3Vyc3VwZGF0ZSgpIHRvIHRoZQorCQkJCSAgICAgICBjdXJyZW50IHZpcnR1YWwgY29sdW1uICovCisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIC8qCisgICAgICogdGhlIG5leHQgc2l4IGFyZSB1c2VkIHRvIHVwZGF0ZSB0aGUgdmlzdWFsIHBhcnQKKyAgICAgKi8KKyAgICBjaGFyCXdfb2xkX3Zpc3VhbF9tb2RlOyAgLyogbGFzdCBrbm93biBWSXN1YWxfbW9kZSAqLworICAgIGxpbmVucl9UCXdfb2xkX2N1cnNvcl9sbnVtOyAgLyogbGFzdCBrbm93biBlbmQgb2YgdmlzdWFsIHBhcnQgKi8KKyAgICBjb2xucl9UCXdfb2xkX2N1cnNvcl9mY29sOyAgLyogZmlyc3QgY29sdW1uIGZvciBibG9jayB2aXN1YWwgcGFydCAqLworICAgIGNvbG5yX1QJd19vbGRfY3Vyc29yX2xjb2w7ICAvKiBsYXN0IGNvbHVtbiBmb3IgYmxvY2sgdmlzdWFsIHBhcnQgKi8KKyAgICBsaW5lbnJfVAl3X29sZF92aXN1YWxfbG51bTsgIC8qIGxhc3Qga25vd24gc3RhcnQgb2YgdmlzdWFsIHBhcnQgKi8KKyAgICBjb2xucl9UCXdfb2xkX2N1cnN3YW50OwkgICAgLyogbGFzdCBrbm93biB2YWx1ZSBvZiBDdXJzd2FudCAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFRoZSBuZXh0IHRocmVlIHNwZWNpZnkgdGhlIG9mZnNldHMgZm9yIGRpc3BsYXlpbmcgdGhlIGJ1ZmZlcjoKKyAgICAgKi8KKyAgICBsaW5lbnJfVAl3X3RvcGxpbmU7CSAgICAvKiBidWZmZXIgbGluZSBudW1iZXIgb2YgdGhlIGxpbmUgYXQgdGhlCisJCQkJICAgICAgIHRvcCBvZiB0aGUgd2luZG93ICovCisjaWZkZWYgRkVBVF9ESUZGCisgICAgaW50CQl3X3RvcGZpbGw7CSAgICAvKiBudW1iZXIgb2YgZmlsbGVyIGxpbmVzIGFib3ZlIHdfdG9wbGluZSAqLworICAgIGludAkJd19vbGRfdG9wZmlsbDsJICAgIC8qIHdfdG9wZmlsbCBhdCBsYXN0IHJlZHJhdyAqLworICAgIGludAkJd19ib3RmaWxsOwkgICAgLyogVFJVRSB3aGVuIGZpbGxlciBsaW5lcyBhcmUgYWN0dWFsbHkKKwkJCQkgICAgICAgYmVsb3cgd190b3BsaW5lIChhdCBlbmQgb2YgZmlsZSkgKi8KKyAgICBpbnQJCXdfb2xkX2JvdGZpbGw7CSAgICAvKiB3X2JvdGZpbGwgYXQgbGFzdCByZWRyYXcgKi8KKyNlbmRpZgorICAgIGNvbG5yX1QJd19sZWZ0Y29sOwkgICAgLyogd2luZG93IGNvbHVtbiBudW1iZXIgb2YgdGhlIGxlZnQgbW9zdAorCQkJCSAgICAgICBjaGFyYWN0ZXIgaW4gdGhlIHdpbmRvdzsgdXNlZCB3aGVuCisJCQkJICAgICAgICd3cmFwJyBpcyBvZmYgKi8KKyAgICBjb2xucl9UCXdfc2tpcGNvbDsJICAgIC8qIHN0YXJ0aW5nIGNvbHVtbiB3aGVuIGEgc2luZ2xlIGxpbmUKKwkJCQkgICAgICAgZG9lc24ndCBmaXQgaW4gdGhlIHdpbmRvdyAqLworCisgICAgLyoKKyAgICAgKiBMYXlvdXQgb2YgdGhlIHdpbmRvdyBpbiB0aGUgc2NyZWVuLgorICAgICAqIE1heSBuZWVkIHRvIGFkZCAibXNnX3Njcm9sbGVkIiB0byAid193aW5yb3ciIGluIHJhcmUgc2l0dWF0aW9ucy4KKyAgICAgKi8KKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBpbnQJCXdfd2lucm93OwkgICAgLyogZmlyc3Qgcm93IG9mIHdpbmRvdyBpbiBzY3JlZW4gKi8KKyNlbmRpZgorICAgIGludAkJd19oZWlnaHQ7CSAgICAvKiBudW1iZXIgb2Ygcm93cyBpbiB3aW5kb3csIGV4Y2x1ZGluZworCQkJCSAgICAgICBzdGF0dXMvY29tbWFuZCBsaW5lKHMpICovCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgaW50CQl3X3N0YXR1c19oZWlnaHQ7ICAgIC8qIG51bWJlciBvZiBzdGF0dXMgbGluZXMgKDAgb3IgMSkgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaW50CQl3X3dpbmNvbDsJICAgIC8qIExlZnRtb3N0IGNvbHVtbiBvZiB3aW5kb3cgaW4gc2NyZWVuLgorCQkJCSAgICAgICB1c2UgV19XSU5DT0woKSAqLworICAgIGludAkJd193aWR0aDsJICAgIC8qIFdpZHRoIG9mIHdpbmRvdywgZXhjbHVkaW5nIHNlcGFyYXRpb24uCisJCQkJICAgICAgIHVzZSBXX1dJRFRIKCkgKi8KKyAgICBpbnQJCXdfdnNlcF93aWR0aDsJICAgIC8qIE51bWJlciBvZiBzZXBhcmF0b3IgY29sdW1ucyAoMCBvciAxKS4KKwkJCQkgICAgICAgdXNlIFdfVlNFUF9XSURUSCgpICovCisjZW5kaWYKKworICAgIC8qCisgICAgICogPT09IHN0YXJ0IG9mIGNhY2hlZCB2YWx1ZXMgPT09PQorICAgICAqLworICAgIC8qCisgICAgICogUmVjb21wdXRpbmcgaXMgbWluaW1pemVkIGJ5IHN0b3JpbmcgdGhlIHJlc3VsdCBvZiBjb21wdXRhdGlvbnMuCisgICAgICogVXNlIGZ1bmN0aW9ucyBpbiBzY3JlZW4uYyB0byBjaGVjayBpZiB0aGV5IGFyZSB2YWxpZCBhbmQgdG8gdXBkYXRlLgorICAgICAqIHdfdmFsaWQgaXMgYSBiaXRmaWVsZCBvZiBmbGFncywgd2hpY2ggaW5kaWNhdGUgaWYgc3BlY2lmaWMgdmFsdWVzIGFyZQorICAgICAqIHZhbGlkIG9yIG5lZWQgdG8gYmUgcmVjb21wdXRlZC4JU2VlIHNjcmVlbi5jIGZvciB2YWx1ZXMuCisgICAgICovCisgICAgaW50CQl3X3ZhbGlkOworICAgIHBvc19UCXdfdmFsaWRfY3Vyc29yOwkgICAgLyogbGFzdCBrbm93biBwb3NpdGlvbiBvZiB3X2N1cnNvciwgdXNlZAorCQkJCSAgICAgICB0byBhZGp1c3Qgd192YWxpZCAqLworICAgIGNvbG5yX1QJd192YWxpZF9sZWZ0Y29sOyAgICAvKiBsYXN0IGtub3duIHdfbGVmdGNvbCAqLworCisgICAgLyoKKyAgICAgKiB3X2NsaW5lX2hlaWdodCBpcyB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIGxpbmVzIHRha2VuIGJ5IHRoZSBidWZmZXIgbGluZQorICAgICAqIHRoYXQgdGhlIGN1cnNvciBpcyBvbi4gIFdlIHVzZSB0aGlzIHRvIGF2b2lkIGV4dHJhIGNhbGxzIHRvIHBsaW5lcygpLgorICAgICAqLworICAgIGludAkJd19jbGluZV9oZWlnaHQ7CSAgICAvKiBjdXJyZW50IHNpemUgb2YgY3Vyc29yIGxpbmUgKi8KKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBpbnQJCXdfY2xpbmVfZm9sZGVkOwkgICAgLyogY3Vyc29yIGxpbmUgaXMgZm9sZGVkICovCisjZW5kaWYKKworICAgIGludAkJd19jbGluZV9yb3c7CSAgICAvKiBzdGFydGluZyByb3cgb2YgdGhlIGN1cnNvciBsaW5lICovCisKKyAgICBjb2xucl9UCXdfdmlydGNvbDsJICAgIC8qIGNvbHVtbiBudW1iZXIgb2YgdGhlIGN1cnNvciBpbiB0aGUKKwkJCQkgICAgICAgYnVmZmVyIGxpbmUsIGFzIG9wcG9zZWQgdG8gdGhlIGNvbHVtbgorCQkJCSAgICAgICBudW1iZXIgd2UncmUgYXQgb24gdGhlIHNjcmVlbi4gIFRoaXMKKwkJCQkgICAgICAgbWFrZXMgYSBkaWZmZXJlbmNlIG9uIGxpbmVzIHdoaWNoIHNwYW4KKwkJCQkgICAgICAgbW9yZSB0aGFuIG9uZSBzY3JlZW4gbGluZSBvciB3aGVuCisJCQkJICAgICAgIHdfbGVmdGNvbCBpcyBub24temVybyAqLworCisgICAgLyoKKyAgICAgKiB3X3dyb3cgYW5kIHdfd2NvbCBzcGVjaWZ5IHRoZSBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHdpbmRvdy4KKyAgICAgKiBUaGlzIGlzIHJlbGF0ZWQgdG8gcG9zaXRpb25zIGluIHRoZSB3aW5kb3csIG5vdCBpbiB0aGUgZGlzcGxheSBvcgorICAgICAqIGJ1ZmZlciwgdGh1cyB3X3dyb3cgaXMgcmVsYXRpdmUgdG8gd193aW5yb3cuCisgICAgICovCisgICAgaW50CQl3X3dyb3csIHdfd2NvbDsJICAgIC8qIGN1cnNvciBwb3NpdGlvbiBpbiB3aW5kb3cgKi8KKworICAgIGxpbmVucl9UCXdfYm90bGluZTsJICAgIC8qIG51bWJlciBvZiB0aGUgbGluZSBiZWxvdyB0aGUgYm90dG9tIG9mCisJCQkJICAgICAgIHRoZSBzY3JlZW4gKi8KKyAgICBpbnQJCXdfZW1wdHlfcm93czsJICAgIC8qIG51bWJlciBvZiB+IHJvd3MgaW4gd2luZG93ICovCisjaWZkZWYgRkVBVF9ESUZGCisgICAgaW50CQl3X2ZpbGxlcl9yb3dzOwkgICAgLyogbnVtYmVyIG9mIGZpbGxlciByb3dzIGF0IHRoZSBlbmQgb2YgdGhlCisJCQkJICAgICAgIHdpbmRvdyAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEluZm8gYWJvdXQgdGhlIGxpbmVzIGN1cnJlbnRseSBpbiB0aGUgd2luZG93IGlzIHJlbWVtYmVyZWQgdG8gYXZvaWQKKyAgICAgKiByZWNvbXB1dGluZyBpdCBldmVyeSB0aW1lLiAgVGhlIGFsbG9jYXRlZCBzaXplIG9mIHdfbGluZXNbXSBpcyBSb3dzLgorICAgICAqIE9ubHkgdGhlIHdfbGluZXNfdmFsaWQgZW50cmllcyBhcmUgYWN0dWFsbHkgdmFsaWQuCisgICAgICogV2hlbiB0aGUgZGlzcGxheSBpcyB1cC10by1kYXRlIHdfbGluZXNbMF0ud2xfbG51bSBpcyBlcXVhbCB0byB3X3RvcGxpbmUKKyAgICAgKiBhbmQgd19saW5lc1t3X2xpbmVzX3ZhbGlkIC0gMV0ud2xfbG51bSBpcyBlcXVhbCB0byB3X2JvdGxpbmUuCisgICAgICogQmV0d2VlbiBjaGFuZ2luZyB0ZXh0IGFuZCB1cGRhdGluZyB0aGUgZGlzcGxheSB3X2xpbmVzW10gcmVwcmVzZW50cworICAgICAqIHdoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZC4gIHdsX3ZhbGlkIGlzIHJlc2V0IHRvIGluZGljYXRlZCB0aGlzLgorICAgICAqIFRoaXMgaXMgdXNlZCBmb3IgZWZmaWNpZW50IHJlZHJhd2luZy4KKyAgICAgKi8KKyAgICBpbnQJCXdfbGluZXNfdmFsaWQ7CSAgICAvKiBudW1iZXIgb2YgdmFsaWQgZW50cmllcyAqLworICAgIHdsaW5lX1QJKndfbGluZXM7CisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBnYXJyYXlfVAl3X2ZvbGRzOwkgICAgLyogYXJyYXkgb2YgbmVzdGVkIGZvbGRzICovCisgICAgY2hhcgl3X2ZvbGRfbWFudWFsOwkgICAgLyogd2hlbiBUUlVFOiBzb21lIGZvbGRzIGFyZSBvcGVuZWQvY2xvc2VkCisJCQkJICAgICAgIG1hbnVhbGx5ICovCisgICAgY2hhcgl3X2ZvbGRpbnZhbGlkOwkgICAgLyogd2hlbiBUUlVFOiBmb2xkaW5nIG5lZWRzIHRvIGJlCisJCQkJICAgICAgIHJlY29tcHV0ZWQgKi8KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiA9PT0gZW5kIG9mIGNhY2hlZCB2YWx1ZXMgPT09CisgICAgICovCisKKyAgICBpbnQJCXdfcmVkcl90eXBlOwkgICAgLyogdHlwZSBvZiByZWRyYXcgdG8gYmUgcGVyZm9ybWVkIG9uIHdpbiAqLworICAgIGludAkJd191cGRfcm93czsJICAgIC8qIG51bWJlciBvZiB3aW5kb3cgbGluZXMgdG8gdXBkYXRlIHdoZW4KKwkJCQkgICAgICAgd19yZWRyX3R5cGUgaXMgUkVEUkFXX1RPUCAqLworICAgIGxpbmVucl9UCXdfcmVkcmF3X3RvcDsJICAgIC8qIHdoZW4gIT0gMDogZmlyc3QgbGluZSBuZWVkaW5nIHJlZHJhdyAqLworICAgIGxpbmVucl9UCXdfcmVkcmF3X2JvdDsJICAgIC8qIHdoZW4gIT0gMDogbGFzdCBsaW5lIG5lZWRpbmcgcmVkcmF3ICovCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgaW50CQl3X3JlZHJfc3RhdHVzOwkgICAgLyogaWYgVFJVRSBzdGF0dXMgbGluZSBtdXN0IGJlIHJlZHJhd24gKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9DTURMX0lORk8KKyAgICAvKiByZW1lbWJlciB3aGF0IGlzIHNob3duIGluIHRoZSBydWxlciBmb3IgdGhpcyB3aW5kb3cgKGlmICdydWxlcicgc2V0KSAqLworICAgIHBvc19UCXdfcnVfY3Vyc29yOwkgICAgLyogY3Vyc29yIHBvc2l0aW9uIHNob3duIGluIHJ1bGVyICovCisgICAgY29sbnJfVAl3X3J1X3ZpcnRjb2w7CSAgICAvKiB2aXJ0Y29sIHNob3duIGluIHJ1bGVyICovCisgICAgbGluZW5yX1QJd19ydV90b3BsaW5lOwkgICAgLyogdG9wbGluZSBzaG93biBpbiBydWxlciAqLworICAgIGxpbmVucl9UCXdfcnVfbGluZV9jb3VudDsgICAgLyogbGluZSBjb3VudCB1c2VkIGZvciBydWxlciAqLworIyBpZmRlZiBGRUFUX0RJRkYKKyAgICBpbnQJCXdfcnVfdG9wZmlsbDsJICAgIC8qIHRvcGZpbGwgc2hvd24gaW4gcnVsZXIgKi8KKyMgZW5kaWYKKyAgICBjaGFyCXdfcnVfZW1wdHk7CSAgICAvKiBUUlVFIGlmIHJ1bGVyIHNob3dzIDAtMSAoZW1wdHkgbGluZSkgKi8KKyNlbmRpZgorCisgICAgaW50CQl3X2FsdF9mbnVtOwkgICAgLyogYWx0ZXJuYXRlIGZpbGUgKGZvciAjIGFuZCBDVFJMLV4pICovCisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBhbGlzdF9UCSp3X2FsaXN0OwkgICAgLyogcG9pbnRlciB0byBhcmdsaXN0IGZvciB0aGlzIHdpbmRvdyAqLworI2VuZGlmCisgICAgaW50CQl3X2FyZ19pZHg7CSAgICAvKiBjdXJyZW50IGluZGV4IGluIGFyZ3VtZW50IGxpc3QgKGNhbiBiZQorCQkJCSAgICAgICBvdXQgb2YgcmFuZ2UhKSAqLworICAgIGludAkJd19hcmdfaWR4X2ludmFsaWQ7ICAvKiBlZGl0aW5nIGFub3RoZXIgZmlsZSB0aGFuIHdfYXJnX2lkeCAqLworCisgICAgY2hhcl91CSp3X2xvY2FsZGlyOwkgICAgLyogYWJzb2x1dGUgcGF0aCBvZiBsb2NhbCBkaXJlY3Rvcnkgb3IKKwkJCQkgICAgICAgTlVMTCAqLworICAgIC8qCisgICAgICogT3B0aW9ucyBsb2NhbCB0byBhIHdpbmRvdy4KKyAgICAgKiBUaGV5IGFyZSBsb2NhbCBiZWNhdXNlIHRoZXkgaW5mbHVlbmNlIHRoZSBsYXlvdXQgb2YgdGhlIHdpbmRvdyBvcgorICAgICAqIGRlcGVuZCBvbiB0aGUgd2luZG93IGxheW91dC4KKyAgICAgKiBUaGVyZSBhcmUgdHdvIHZhbHVlczogd19vbmVidWZfb3B0IGlzIGxvY2FsIHRvIHRoZSBidWZmZXIgY3VycmVudGx5IGluCisgICAgICogdGhpcyB3aW5kb3csIHdfYWxsYnVmX29wdCBpcyBmb3IgYWxsIGJ1ZmZlcnMgaW4gdGhpcyB3aW5kb3cuCisgICAgICovCisgICAgd2lub3B0X1QJd19vbmVidWZfb3B0OworICAgIHdpbm9wdF9UCXdfYWxsYnVmX29wdDsKKworICAgIC8qIHRyYW5zZm9ybSBhIHBvaW50ZXIgdG8gYSAib25lYnVmIiBvcHRpb24gaW50byBhICJhbGxidWYiIG9wdGlvbiAqLworI2RlZmluZSBHTE9CQUxfV08ocCkJKChjaGFyICopcCArIHNpemVvZih3aW5vcHRfVCkpCisKKyNpZmRlZiBGRUFUX1NDUk9MTEJJTkQKKyAgICBsb25nCXdfc2NiaW5kX3BvczsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9FVkFMCisgICAgZ2FycmF5X1QJd192YXJzOwkJLyogaW50ZXJuYWwgdmFyaWFibGVzLCBsb2NhbCB0byB3aW5kb3cgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1JJR0hUTEVGVCkgJiYgZGVmaW5lZChGRUFUX0ZLTUFQKQorICAgIGludAkJd19mYXJzaTsJLyogZm9yIHRoZSB3aW5kb3cgZGVwZW5kZW50IEZhcnNpIGZ1bmN0aW9ucyAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFRoZSB3X3ByZXZfcGNtYXJrIGZpZWxkIGlzIHVzZWQgdG8gY2hlY2sgd2hldGhlciB3ZSByZWFsbHkgZGlkIGp1bXAgdG8KKyAgICAgKiBhIG5ldyBsaW5lIGFmdGVyIHNldHRpbmcgdGhlIHdfcGNtYXJrLiAgSWYgbm90LCB0aGVuIHdlIHJldmVydCB0bworICAgICAqIHVzaW5nIHRoZSBwcmV2aW91cyB3X3BjbWFyay4KKyAgICAgKi8KKyAgICBwb3NfVAl3X3BjbWFyazsJLyogcHJldmlvdXMgY29udGV4dCBtYXJrICovCisgICAgcG9zX1QJd19wcmV2X3BjbWFyazsJLyogcHJldmlvdXMgd19wY21hcmsgKi8KKworI2lmZGVmIEZFQVRfSlVNUExJU1QKKyAgICAvKgorICAgICAqIHRoZSBqdW1wbGlzdCBjb250YWlucyBvbGQgY3Vyc29yIHBvc2l0aW9ucworICAgICAqLworICAgIHhmbWFya19UCXdfanVtcGxpc3RbSlVNUExJU1RTSVpFXTsKKyAgICBpbnQJCXdfanVtcGxpc3RsZW47CQkvKiBudW1iZXIgb2YgYWN0aXZlIGVudHJpZXMgKi8KKyAgICBpbnQJCXdfanVtcGxpc3RpZHg7CQkvKiBjdXJyZW50IHBvc2l0aW9uICovCisKKyAgICBpbnQJCXdfY2hhbmdlbGlzdGlkeDsJLyogY3VycmVudCBwb3NpdGlvbiBpbiBiX2NoYW5nZWxpc3QgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKyAgICByZWdtbWF0Y2hfVAl3X21hdGNoOwkvKiByZWdleHAgcHJvZ3JhbSBmb3IgIjptYXRjaCIgKi8KKyAgICBpbnQJCXdfbWF0Y2hfaWQ7CS8qIGhpZ2hsaWdodCBJRCBmb3IgIjptYXRjaCIgKi8KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiB0aGUgdGFnc3RhY2sgZ3Jvd3MgZnJvbSAwIHVwd2FyZHM6CisgICAgICogZW50cnkgMDogb2xkZXIKKyAgICAgKiBlbnRyeSAxOiBuZXdlcgorICAgICAqIGVudHJ5IDI6IG5ld2VzdAorICAgICAqLworICAgIHRhZ2d5X1QJd190YWdzdGFja1tUQUdTVEFDS1NJWkVdOwkvKiB0aGUgdGFnIHN0YWNrICovCisgICAgaW50CQl3X3RhZ3N0YWNraWR4OwkJLyogaWR4IGp1c3QgYmVsb3cgYWN0aXYgZW50cnkgKi8KKyAgICBpbnQJCXdfdGFnc3RhY2tsZW47CQkvKiBudW1iZXIgb2YgdGFncyBvbiBzdGFjayAqLworCisgICAgLyoKKyAgICAgKiB3X2ZyYWN0aW9uIGlzIHRoZSBmcmFjdGlvbmFsIHJvdyBvZiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgd2luZG93LCBmcm9tCisgICAgICogMCBhdCB0aGUgdG9wIHJvdyB0byBGUkFDVElPTl9NVUxUIGF0IHRoZSBsYXN0IHJvdy4KKyAgICAgKiB3X3ByZXZfZnJhY3Rpb25fcm93IHdhcyB0aGUgYWN0dWFsIGN1cnNvciByb3cgd2hlbiB3X2ZyYWN0aW9uIHdhcyBsYXN0CisgICAgICogY2FsY3VsYXRlZC4KKyAgICAgKi8KKyAgICBpbnQJCXdfZnJhY3Rpb247CisgICAgaW50CQl3X3ByZXZfZnJhY3Rpb25fcm93OworCisjaWZkZWYgRkVBVF9HVUkKKyAgICBzY3JvbGxiYXJfVAl3X3Njcm9sbGJhcnNbMl07CS8qIHZlcnQuIFNjcm9sbGJhcnMgZm9yIHRoaXMgd2luZG93ICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfUEVSTAorICAgIHZvaWQJKnBlcmxfcHJpdmF0ZTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9QWVRIT04KKyAgICB2b2lkCSpweXRob25fcmVmOwkvKiBUaGUgUHl0aG9uIHZhbHVlIHJlZmVycmluZyB0byB0aGlzCisJCQkJCSAgIHdpbmRvdyAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1RDTAorICAgIHZvaWQJKnRjbF9yZWY7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfUlVCWQorICAgIHZvaWQJKnJ1YnlfcmVmOworI2VuZGlmCit9OworCisvKgorICogQXJndW1lbnRzIGZvciBvcGVyYXRvcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IG9wYXJnCit7CisgICAgaW50CQlvcF90eXBlOwkvKiBjdXJyZW50IHBlbmRpbmcgb3BlcmF0b3IgdHlwZSAqLworICAgIGludAkJcmVnbmFtZTsJLyogcmVnaXN0ZXIgdG8gdXNlIGZvciB0aGUgb3BlcmF0b3IgKi8KKyAgICBpbnQJCW1vdGlvbl90eXBlOwkvKiB0eXBlIG9mIHRoZSBjdXJyZW50IGN1cnNvciBtb3Rpb24gKi8KKyAgICBpbnQJCW1vdGlvbl9mb3JjZTsJLyogZm9yY2UgbW90aW9uIHR5cGU6ICd2JywgJ1YnIG9yIENUUkwtViAqLworICAgIGludAkJdXNlX3JlZ19vbmU7CS8qIFRSVUUgaWYgZGVsZXRlIHVzZXMgcmVnIDEgZXZlbiB3aGVuIG5vdAorCQkJCSAgIGxpbmV3aXNlICovCisgICAgaW50CQlpbmNsdXNpdmU7CS8qIFRSVUUgaWYgY2hhciBtb3Rpb24gaXMgaW5jbHVzaXZlIChvbmx5CisJCQkJICAgdmFsaWQgd2hlbiBtb3Rpb25fdHlwZSBpcyBNQ0hBUiAqLworICAgIGludAkJZW5kX2FkanVzdGVkOwkvKiBiYWNrdXBlZCBiX29wX2VuZCBvbmUgY2hhciAob25seSB1c2VkIGJ5CisJCQkJICAgZG9fZm9ybWF0KCkpICovCisgICAgcG9zX1QJc3RhcnQ7CQkvKiBzdGFydCBvZiB0aGUgb3BlcmF0b3IgKi8KKyAgICBwb3NfVAllbmQ7CQkvKiBlbmQgb2YgdGhlIG9wZXJhdG9yICovCisgICAgcG9zX1QJY3Vyc29yX3N0YXJ0OwkvKiBjdXJzb3IgcG9zaXRpb24gYmVmb3JlIG1vdGlvbiBmb3IgImd3IiAqLworCisgICAgbG9uZwlsaW5lX2NvdW50OwkvKiBudW1iZXIgb2YgbGluZXMgZnJvbSBvcF9zdGFydCB0byBvcF9lbmQKKwkJCQkgICAoaW5jbHVzaXZlKSAqLworICAgIGludAkJZW1wdHk7CQkvKiBvcF9zdGFydCBhbmQgb3BfZW5kIHRoZSBzYW1lIChvbmx5IHVzZWQgYnkKKwkJCQkgICBkb19jaGFuZ2UoKSkgKi8KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGludAkJaXNfVklzdWFsOwkvKiBvcGVyYXRvciBvbiBWaXN1YWwgYXJlYSAqLworICAgIGludAkJYmxvY2tfbW9kZTsJLyogY3VycmVudCBvcGVyYXRvciBpcyBWaXN1YWwgYmxvY2sgbW9kZSAqLworI2VuZGlmCisgICAgY29sbnJfVAlzdGFydF92Y29sOwkvKiBzdGFydCBjb2wgZm9yIGJsb2NrIG1vZGUgb3BlcmF0b3IgKi8KKyAgICBjb2xucl9UCWVuZF92Y29sOwkvKiBlbmQgY29sIGZvciBibG9jayBtb2RlIG9wZXJhdG9yICovCit9IG9wYXJnX1Q7CisKKy8qCisgKiBBcmd1bWVudHMgZm9yIE5vcm1hbCBtb2RlIGNvbW1hbmRzLgorICovCit0eXBlZGVmIHN0cnVjdCBjbWRhcmcKK3sKKyAgICBvcGFyZ19UCSpvYXA7CQkvKiBPcGVyYXRvciBhcmd1bWVudHMgKi8KKyAgICBpbnQJCXByZWNoYXI7CS8qIHByZWZpeCBjaGFyYWN0ZXIgKG9wdGlvbmFsLCBhbHdheXMgJ2cnKSAqLworICAgIGludAkJY21kY2hhcjsJLyogY29tbWFuZCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQJCW5jaGFyOwkJLyogbmV4dCBjb21tYW5kIGNoYXJhY3RlciAob3B0aW9uYWwpICovCisjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJbmNoYXJDMTsJLyogZmlyc3QgY29tcG9zaW5nIGNoYXJhY3RlciAob3B0aW9uYWwpICovCisgICAgaW50CQluY2hhckMyOwkvKiBzZWNvbmQgY29tcG9zaW5nIGNoYXJhY3RlciAob3B0aW9uYWwpICovCisjZW5kaWYKKyAgICBpbnQJCWV4dHJhX2NoYXI7CS8qIHlldCBhbm90aGVyIGNoYXJhY3RlciAob3B0aW9uYWwpICovCisgICAgbG9uZwlvcGNvdW50OwkvKiBjb3VudCBiZWZvcmUgYW4gb3BlcmF0b3IgKi8KKyAgICBsb25nCWNvdW50MDsJCS8qIGNvdW50IGJlZm9yZSBjb21tYW5kLCBkZWZhdWx0IDAgKi8KKyAgICBsb25nCWNvdW50MTsJCS8qIGNvdW50IGJlZm9yZSBjb21tYW5kLCBkZWZhdWx0IDEgKi8KKyAgICBpbnQJCWFyZzsJCS8qIGV4dHJhIGFyZ3VtZW50IGZyb20gbnZfY21kc1tdICovCisgICAgaW50CQlyZXR2YWw7CQkvKiByZXR1cm46IENBXyogdmFsdWVzICovCisgICAgY2hhcl91CSpzZWFyY2hidWY7CS8qIHJldHVybjogcG9pbnRlciB0byBzZWFyY2ggcGF0dGVybiBvciBOVUxMICovCit9IGNtZGFyZ19UOworCisvKiB2YWx1ZXMgZm9yIHJldHZhbDogKi8KKyNkZWZpbmUgQ0FfQ09NTUFORF9CVVNZCSAgICAxCS8qIHNraXAgcmVzdGFydGluZyBlZGl0KCkgb25jZSAqLworI2RlZmluZSBDQV9OT19BREpfT1BfRU5EICAgIDIJLyogZG9uJ3QgYWRqdXN0IG9wZXJhdG9yIGVuZCAqLworCisjaWZkZWYgQ1VSU09SX1NIQVBFCisvKgorICogc3RydWN0IHRvIHN0b3JlIHZhbHVlcyBmcm9tICdndWljdXJzb3InIGFuZCAnbW91c2VzaGFwZScKKyAqLworLyogSW5kZXhlcyBpbiBzaGFwZV90YWJsZVtdICovCisjZGVmaW5lIFNIQVBFX0lEWF9OCTAJLyogTm9ybWFsIG1vZGUgKi8KKyNkZWZpbmUgU0hBUEVfSURYX1YJMQkvKiBWaXN1YWwgbW9kZSAqLworI2RlZmluZSBTSEFQRV9JRFhfSQkyCS8qIEluc2VydCBtb2RlICovCisjZGVmaW5lIFNIQVBFX0lEWF9SCTMJLyogUmVwbGFjZSBtb2RlICovCisjZGVmaW5lIFNIQVBFX0lEWF9DCTQJLyogQ29tbWFuZCBsaW5lIE5vcm1hbCBtb2RlICovCisjZGVmaW5lIFNIQVBFX0lEWF9DSQk1CS8qIENvbW1hbmQgbGluZSBJbnNlcnQgbW9kZSAqLworI2RlZmluZSBTSEFQRV9JRFhfQ1IJNgkvKiBDb21tYW5kIGxpbmUgUmVwbGFjZSBtb2RlICovCisjZGVmaW5lIFNIQVBFX0lEWF9PCTcJLyogT3BlcmF0b3ItcGVuZGluZyBtb2RlICovCisjZGVmaW5lIFNIQVBFX0lEWF9WRQk4CS8qIFZpc3VhbCBtb2RlIHdpdGggJ3NlbGVjaXRvbicgZXhjbHVzaXZlICovCisjZGVmaW5lIFNIQVBFX0lEWF9DTElORQk5CS8qIE9uIGNvbW1hbmQgbGluZSAqLworI2RlZmluZSBTSEFQRV9JRFhfU1RBVFVTIDEwCS8qIEEgc3RhdHVzIGxpbmUgKi8KKyNkZWZpbmUgU0hBUEVfSURYX1NEUkFHIDExCS8qIGRyYWdnaW5nIGEgc3RhdHVzIGxpbmUgKi8KKyNkZWZpbmUgU0hBUEVfSURYX1ZTRVAJMTIJLyogQSB2ZXJ0aWNhbCBzZXBhcmF0b3IgbGluZSAqLworI2RlZmluZSBTSEFQRV9JRFhfVkRSQUcgMTMJLyogZHJhZ2dpbmcgYSB2ZXJ0aWNhbCBzZXBhcmF0b3IgbGluZSAqLworI2RlZmluZSBTSEFQRV9JRFhfTU9SRQkxNAkvKiBIaXQtcmV0dXJuIG9yIE1vcmUgKi8KKyNkZWZpbmUgU0hBUEVfSURYX01PUkVMCTE1CS8qIEhpdC1yZXR1cm4gb3IgTW9yZSBpbiBsYXN0IGxpbmUgKi8KKyNkZWZpbmUgU0hBUEVfSURYX1NNCTE2CS8qIHNob3dpbmcgbWF0Y2hpbmcgcGFyZW4gKi8KKyNkZWZpbmUgU0hBUEVfSURYX0NPVU5UCTE3CisKKyNkZWZpbmUgU0hBUEVfQkxPQ0sJMAkvKiBibG9jayBjdXJzb3IgKi8KKyNkZWZpbmUgU0hBUEVfSE9SCTEJLyogaG9yaXpvbnRhbCBiYXIgY3Vyc29yICovCisjZGVmaW5lIFNIQVBFX1ZFUgkyCS8qIHZlcnRpY2FsIGJhciBjdXJzb3IgKi8KKworI2RlZmluZSBNU0hBUEVfTlVNQkVSRUQJMTAwMAkvKiBvZmZzZXQgZm9yIHNoYXBlcyBpZGVudGlmaWVkIGJ5IG51bWJlciAqLworI2RlZmluZSBNU0hBUEVfSElERQkxCS8qIGhpZGUgbW91c2UgcG9pbnRlciAqLworCisjZGVmaW5lIFNIQVBFX01PVVNFCTEJLyogdXNlZCBmb3IgbW91c2UgcG9pbnRlciBzaGFwZSAqLworI2RlZmluZSBTSEFQRV9DVVJTT1IJMgkvKiB1c2VkIGZvciB0ZXh0IGN1cnNvciBzaGFwZSAqLworCit0eXBlZGVmIHN0cnVjdCBjdXJzb3JfZW50cnkKK3sKKyAgICBpbnQJCXNoYXBlOwkJLyogb25lIG9mIHRoZSBTSEFQRV8gZGVmaW5lcyAqLworICAgIGludAkJbXNoYXBlOwkJLyogb25lIG9mIHRoZSBNU0hBUEUgZGVmaW5lcyAqLworICAgIGludAkJcGVyY2VudGFnZTsJLyogcGVyY2VudGFnZSBvZiBjZWxsIGZvciBiYXIgKi8KKyAgICBsb25nCWJsaW5rd2FpdDsJLyogYmxpbmtpbmcsIHdhaXQgdGltZSBiZWZvcmUgYmxpbmtpbmcgc3RhcnRzICovCisgICAgbG9uZwlibGlua29uOwkvKiBibGlua2luZywgb24gdGltZSAqLworICAgIGxvbmcJYmxpbmtvZmY7CS8qIGJsaW5raW5nLCBvZmYgdGltZSAqLworICAgIGludAkJaWQ7CQkvKiBoaWdobGlnaHQgZ3JvdXAgSUQgKi8KKyAgICBpbnQJCWlkX2xtOwkJLyogaGlnaGxpZ2h0IGdyb3VwIElEIGZvciA6bG1hcCBtb2RlICovCisgICAgY2hhcgkqbmFtZTsJCS8qIG1vZGUgbmFtZSAoZml4ZWQpICovCisgICAgY2hhcgl1c2VkX2ZvcjsJLyogU0hBUEVfTU9VU0UgYW5kL29yIFNIQVBFX0NVUlNPUiAqLworfSBjdXJzb3JlbnRyeV9UOworI2VuZGlmIC8qIENVUlNPUl9TSEFQRSAqLworCisjaWZkZWYgRkVBVF9NRU5VCisKKy8qIEluZGljZXMgaW50byB2aW1tZW51X1QtPnN0cmluZ3NbXSBhbmQgdmltbWVudV9ULT5ub3JlbWFwW10gZm9yIGVhY2ggbW9kZSAqLworI2RlZmluZSBNRU5VX0lOREVYX0lOVkFMSUQJLTEKKyNkZWZpbmUgTUVOVV9JTkRFWF9OT1JNQUwJMAorI2RlZmluZSBNRU5VX0lOREVYX1ZJU1VBTAkxCisjZGVmaW5lIE1FTlVfSU5ERVhfT1BfUEVORElORwkyCisjZGVmaW5lIE1FTlVfSU5ERVhfSU5TRVJUCTMKKyNkZWZpbmUgTUVOVV9JTkRFWF9DTURMSU5FCTQKKyNkZWZpbmUgTUVOVV9JTkRFWF9USVAJCTUKKyNkZWZpbmUgTUVOVV9NT0RFUwkJNgorCisvKiBNZW51IG1vZGVzICovCisjZGVmaW5lIE1FTlVfTk9STUFMX01PREUJKDEgPDwgTUVOVV9JTkRFWF9OT1JNQUwpCisjZGVmaW5lIE1FTlVfVklTVUFMX01PREUJKDEgPDwgTUVOVV9JTkRFWF9WSVNVQUwpCisjZGVmaW5lIE1FTlVfT1BfUEVORElOR19NT0RFCSgxIDw8IE1FTlVfSU5ERVhfT1BfUEVORElORykKKyNkZWZpbmUgTUVOVV9JTlNFUlRfTU9ERQkoMSA8PCBNRU5VX0lOREVYX0lOU0VSVCkKKyNkZWZpbmUgTUVOVV9DTURMSU5FX01PREUJKDEgPDwgTUVOVV9JTkRFWF9DTURMSU5FKQorI2RlZmluZSBNRU5VX1RJUF9NT0RFCQkoMSA8PCBNRU5VX0lOREVYX1RJUCkKKyNkZWZpbmUgTUVOVV9BTExfTU9ERVMJCSgoMSA8PCBNRU5VX0lOREVYX1RJUCkgLSAxKQorLypub3RlIE1FTlVfSU5ERVhfVElQIGlzIG5vdCBhICdyZWFsJyBtb2RlKi8KKworLyogU3RhcnQgYSBtZW51IG5hbWUgd2l0aCB0aGlzIHRvIG5vdCBpbmNsdWRlIGl0IG9uIHRoZSBtYWluIG1lbnUgYmFyICovCisjZGVmaW5lIE1OVV9ISURERU5fQ0hBUgkJJ10nCisKK3R5cGVkZWYgc3RydWN0IFZpbU1lbnUgdmltbWVudV9UOworCitzdHJ1Y3QgVmltTWVudQoreworICAgIGludAkJbW9kZXM7CQkgICAgLyogV2hpY2ggbW9kZXMgaXMgdGhpcyBtZW51IHZpc2libGUgZm9yPyAqLworICAgIGludAkJZW5hYmxlZDsJICAgIC8qIGZvciB3aGljaCBtb2RlcyB0aGUgbWVudSBpcyBlbmFibGVkICovCisgICAgY2hhcl91CSpuYW1lOwkJICAgIC8qIE5hbWUgb2YgbWVudSAqLworICAgIGNoYXJfdQkqZG5hbWU7CQkgICAgLyogRGlzcGxheWVkIE5hbWUgKHdpdGhvdXQgJyYnKSAqLworICAgIGludAkJbW5lbW9uaWM7CSAgICAvKiBtbmVtb25pYyBrZXkgKGFmdGVyICcmJykgKi8KKyAgICBjaGFyX3UJKmFjdGV4dDsJICAgIC8qIGFjY2VsZXJhdG9yIHRleHQgKGFmdGVyIFRBQikgKi8KKyAgICBpbnQJCXByaW9yaXR5OwkgICAgLyogTWVudSBvcmRlciBwcmlvcml0eSAqLworI2lmZGVmIEZFQVRfR1VJCisgICAgdm9pZAkoKmNiKSgpOwkgICAgLyogQ2FsbC1iYWNrIHJvdXRpbmUgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfVE9PTEJBUgorICAgIGNoYXJfdQkqaWNvbmZpbGU7CSAgICAvKiBuYW1lIG9mIGZpbGUgZm9yIGljb24gb3IgTlVMTCAqLworICAgIGludAkJaWNvbmlkeDsJICAgIC8qIGljb24gaW5kZXggKC0xIGlmIG5vdCBzZXQpICovCisgICAgaW50CQlpY29uX2J1aWx0aW47CSAgICAvKiBpY29uIG5hbWVzIGlzIEJ1aWx0SW57bnJ9ICovCisjZW5kaWYKKyAgICBjaGFyX3UJKnN0cmluZ3NbTUVOVV9NT0RFU107IC8qIE1hcHBlZCBzdHJpbmcgZm9yIGVhY2ggbW9kZSAqLworICAgIGludAkJbm9yZW1hcFtNRU5VX01PREVTXTsgLyogQSBSRU1BUF8gZmxhZyBmb3IgZWFjaCBtb2RlICovCisgICAgY2hhcglzaWxlbnRbTUVOVV9NT0RFU107IC8qIEEgc2lsZW50IGZsYWcgZm9yIGVhY2ggbW9kZSAqLworICAgIHZpbW1lbnVfVAkqY2hpbGRyZW47CSAgICAvKiBDaGlsZHJlbiBvZiBzdWItbWVudSAqLworICAgIHZpbW1lbnVfVAkqcGFyZW50OwkgICAgLyogUGFyZW50IG9mIG1lbnUgKi8KKyAgICB2aW1tZW51X1QJKm5leHQ7CQkgICAgLyogTmV4dCBpdGVtIGluIG1lbnUgKi8KKyNpZmRlZiBGRUFUX0dVSV9YMTEKKyAgICBXaWRnZXQJaWQ7CQkgICAgLyogTWFuYWdlIHRoaXMgdG8gZW5hYmxlIGl0ZW0gKi8KKyAgICBXaWRnZXQJc3VibWVudV9pZDsJICAgIC8qIElmIHRoaXMgaXMgc3VibWVudSwgYWRkIGNoaWxkcmVuIGhlcmUgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJX0dUSworICAgIEd0a1dpZGdldAkqaWQ7CQkgICAgLyogTWFuYWdlIHRoaXMgdG8gZW5hYmxlIGl0ZW0gKi8KKyAgICBHdGtXaWRnZXQJKnN1Ym1lbnVfaWQ7CSAgICAvKiBJZiB0aGlzIGlzIHN1Ym1lbnUsIGFkZCBjaGlsZHJlbiBoZXJlICovCisgICAgR3RrV2lkZ2V0CSp0ZWFyb2ZmX2hhbmRsZTsKKyAgICBHdGtXaWRnZXQgICAqbGFiZWw7CQkgICAgLyogVXNlZCBieSAic2V0IHdhaz0iIGNvZGUuICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9NT1RJRgorICAgIGludAkJc2Vuc2l0aXZlOwkgICAgLyogdHVybiBidXR0b24gb24vb2ZmICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkgfHwgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikKKyAgICBQaXhtYXAJaW1hZ2U7CQkgICAgLyogVG9vbGJhciBpbWFnZSAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUlfTU9USUYKKyAgICBQaXhtYXAJaW1hZ2VfaW5zOwkgICAgLyogVG9vbGJhciBpbWFnZSBpbnNlbnNpdGl2ZSAqLworI2VuZGlmCisjaWZkZWYgRkVBVF9CRVZBTF9USVAKKyAgICBCYWxsb29uRXZhbCAqdGlwOwkJICAgIC8qIHRvb2x0aXAgZm9yIHRoaXMgbWVudSBpdGVtICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9XMTYKKyAgICBVSU5UCWlkOwkJICAgIC8qIElkIG9mIG1lbnUgaXRlbSAqLworICAgIEhNRU5VCXN1Ym1lbnVfaWQ7CSAgICAvKiBJZiB0aGlzIGlzIHN1Ym1lbnUsIGFkZCBjaGlsZHJlbiBoZXJlICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9XMzIKKyAgICBVSU5UCWlkOwkJICAgIC8qIElkIG9mIG1lbnUgaXRlbSAqLworICAgIEhNRU5VCXN1Ym1lbnVfaWQ7CSAgICAvKiBJZiB0aGlzIGlzIHN1Ym1lbnUsIGFkZCBjaGlsZHJlbiBoZXJlICovCisgICAgSFdORAl0ZWFyb2ZmX2hhbmRsZTsJICAgIC8qIGhXbmQgb2YgdGVhcm9mZiBpZiBjcmVhdGVkICovCisjZW5kaWYKKyNpZiBGRUFUX0dVSV9CRU9TCisgICAgQk1lbnVJdGVtCSppZDsJCSAgICAvKiBJZCBvZiBtZW51IGl0ZW0gKi8KKyAgICBCTWVudQkqc3VibWVudV9pZDsJICAgIC8qIElmIHRoaXMgaXMgc3VibWVudSwgYWRkIGNoaWxkcmVuIGhlcmUgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJX01BQworLyogIE1lbnVIYW5kbGUJaWQ7ICovCisvKiAgc2hvcnQJaW5kZXg7CSovCSAgICAvKiB0aGUgaXRlbSBpbmRleCB3aXRoaW4gdGhlIGZhdGhlciBtZW51ICovCisgICAgc2hvcnQJbWVudV9pZDsJICAgIC8qIHRoZSBtZW51IGlkIHRvIHdoaWNoIHRoaXMgaXRlbSBiZWxvbmcgKi8KKyAgICBzaG9ydAlzdWJtZW51X2lkOwkgICAgLyogdGhlIG1lbnUgaWQgb2YgdGhlIGNoaWxkcmVuIChjb3VsZCBiZQorCQkJCSAgICAgICBnZXQgdGhyb3VnaHQgc29tZSB0cmlja3MpICovCisgICAgTWVudUhhbmRsZQltZW51X2hhbmRsZTsKKyAgICBNZW51SGFuZGxlCXN1Ym1lbnVfaGFuZGxlOworI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0dVSV9BTUlHQSkKKwkJCQkgICAgLyogb25seSBvbmUgb2YgdGhlc2Ugd2lsbCBldmVyIGJlIHNldCwgYnV0CisJCQkJICAgICAqIHRoZXkgYXJlIHVzZWQgdG8gYWxsb3cgdGhlIG1lbnUgcm91dGluZQorCQkJCSAgICAgKiB0byBlYXNpbHkgZ2V0IGEgaG9sZCBvZiB0aGUgcGFyZW50IG1lbnUKKwkJCQkgICAgICogcG9pbnRlciB3aGljaCBpcyBuZWVkZWQgYnkgYWxsIGl0ZW1zIHRvCisJCQkJICAgICAqIGZvcm0gdGhlIGNoYWluIGNvcnJlY3RseSAqLworICAgIGludAkJICAgIGlkOwkJICAgIC8qIHVudXNlZCBieSB0aGUgYW1pZ2EsIGJ1dCB1c2VkIGluIHRoZQorCQkJCSAgICAgKiBjb2RlIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgKi8KKyAgICBzdHJ1Y3QgTWVudQkgICAgKm1lbnVQdHI7CisgICAgc3RydWN0IE1lbnVJdGVtICptZW51SXRlbVB0cjsKKyNlbmRpZgorI2lmZGVmIFJJU0NPUworICAgIGludAkJKmlkOwkJICAgIC8qIE5vdCB1c2VkLCBidXQgZ3VpLmMgbmVlZHMgaXQgKi8KKyAgICBpbnQJCWdyZXllZF9vdXQ7CSAgICAvKiBGbGFnICovCisgICAgaW50CQloaWRkZW47CisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9QSE9UT04KKyAgICBQdFdpZGdldF90CSppZDsKKyAgICBQdFdpZGdldF90CSpzdWJtZW51X2lkOworI2VuZGlmCit9OworI2Vsc2UKKy8qIEZvciBnZW5lcmF0aW5nIHByb3RvdHlwZXMgd2hlbiBGRUFUX01FTlUgaXNuJ3QgZGVmaW5lZC4gKi8KK3R5cGVkZWYgaW50IHZpbW1lbnVfVDsKKworI2VuZGlmIC8qIEZFQVRfTUVOVSAqLworCisvKgorICogU3RydWN0IHRvIHNhdmUgdmFsdWVzIGluIGJlZm9yZSBleGVjdXRpbmcgYXV0b2NvbW1hbmRzIGZvciBhIGJ1ZmZlciB0aGF0IGlzCisgKiBub3QgdGhlIGN1cnJlbnQgYnVmZmVyLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGJ1Zl9UCSpzYXZlX2J1ZjsJLyogc2F2ZWQgY3VyYnVmICovCisgICAgYnVmX1QJKm5ld19jdXJidWY7CS8qIGJ1ZmZlciB0byBiZSB1c2VkICovCisgICAgd2luX1QJKnNhdmVfY3Vyd2luOwkvKiBzYXZlZCBjdXJ3aW4sIE5VTEwgaWYgaXQgZGlkbid0IGNoYW5nZSAqLworICAgIHdpbl9UCSpuZXdfY3Vyd2luOwkvKiBuZXcgY3Vyd2luIGlmIHNhdmVfY3Vyd2luICE9IE5VTEwgKi8KKyAgICBwb3NfVAlzYXZlX2N1cnNvcjsJLyogc2F2ZWQgY3Vyc29yIHBvcyBvZiBzYXZlX2N1cndpbiAqLworICAgIGxpbmVucl9UCXNhdmVfdG9wbGluZTsJLyogc2F2ZWQgdG9wbGluZSBvZiBzYXZlX2N1cndpbiAqLworI2lmZGVmIEZFQVRfRElGRgorICAgIGludAkJc2F2ZV90b3BmaWxsOwkvKiBzYXZlZCB0b3BmaWxsIG9mIHNhdmVfY3Vyd2luICovCisjZW5kaWYKK30gYWNvX3NhdmVfVDsKKworLyoKKyAqIEdlbmVyaWMgb3B0aW9uIHRhYmxlIGl0ZW0sIG9ubHkgdXNlZCBmb3IgcHJpbnRlciBhdCB0aGUgbW9tZW50LgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGNvbnN0IGNoYXIJKm5hbWU7CisgICAgaW50CQloYXNudW07CisgICAgbG9uZwludW1iZXI7CisgICAgY2hhcl91CSpzdHJpbmc7CS8qIHBvaW50cyBpbnRvIG9wdGlvbiBzdHJpbmcgKi8KKyAgICBpbnQJCXN0cmxlbjsKKyAgICBpbnQJCXByZXNlbnQ7Cit9IG9wdGlvbl90YWJsZV9UOworCisvKgorICogU3RydWN0dXJlIHRvIGhvbGQgcHJpbnRpbmcgY29sb3IgYW5kIGZvbnQgYXR0cmlidXRlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBsb25nX3UJZmdfY29sb3I7CisgICAgbG9uZ191CWJnX2NvbG9yOworICAgIGludAkJYm9sZDsKKyAgICBpbnQJCWl0YWxpYzsKKyAgICBpbnQJCXVuZGVybGluZTsKK30gcHJ0X3RleHRfYXR0cl9UOworCisvKgorICogU3RydWN0dXJlIHBhc3NlZCBiYWNrIHRvIHRoZSBnZW5lcmljIHByaW50ZXIgY29kZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQJCW5fY29sbGF0ZWRfY29waWVzOworICAgIGludAkJbl91bmNvbGxhdGVkX2NvcGllczsKKyAgICBpbnQJCWR1cGxleDsKKyAgICBpbnQJCWNoYXJzX3Blcl9saW5lOworICAgIGludAkJbGluZXNfcGVyX3BhZ2U7CisgICAgaW50CQloYXNfY29sb3I7CisgICAgcHJ0X3RleHRfYXR0cl9UIG51bWJlcjsKKyNpZmRlZiBGRUFUX1NZTl9ITAorICAgIGludAkJbW9kZWM7CisgICAgaW50CQlkb19zeW50YXg7CisjZW5kaWYKKyAgICBpbnQJCXVzZXJfYWJvcnQ7CisgICAgY2hhcl91CSpqb2JuYW1lOworI2lmZGVmIEZFQVRfUE9TVFNDUklQVAorICAgIGNoYXJfdQkqb3V0ZmlsZTsKKyAgICBjaGFyX3UJKmFyZ3VtZW50czsKKyNlbmRpZgorfSBwcnRfc2V0dGluZ3NfVDsKKworI2RlZmluZSBQUklOVF9OVU1CRVJfV0lEVEggOApkaWZmIC0tZ2l0IGEvc3JjL3N3aXMucyBiL3NyYy9zd2lzLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyNzQ3YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zd2lzLnMKQEAgLTAsMCArMSwxNDMgQEAKKzsgVGhvbWFzIExlb25hcmQKKzsgMjQvNS85OAorCithcjAJcm4JMAorYXIxCXJuCTEKK2FyMglybgkyCithcjMJcm4JMworYXI0CXJuCTQKK2FyNQlybgk1CithcjYJcm4JNgorYXI3CXJuCTcKK2FyMTAJcm4JMTAKK2FyMTEJcm4JMTEKK2xrCXJuCTE0CithcjE1CXJuCTE1CisKKwlBUkVBCURBVEEKKwlhbGlnbgk0CisKKwlleHBvcnQJfHIwfAorcjA6CWRjZAkwCisKKwlleHBvcnQJfHIxfAorcjE6CWRjZAkwCisKKwlleHBvcnQJfHIyfAorcjI6CWRjZAkwCisKKwlleHBvcnQJfHIzfAorcjM6CWRjZAkwCisKKwlleHBvcnQJfHI0fAorcjQ6CWRjZAkwCisKKwlleHBvcnQJfHI1fAorcjU6CWRjZAkwCisKKwlleHBvcnQJfHI2fAorcjY6CWRjZAkwCisKKwlleHBvcnQJfHI3fAorcjc6CWRjZAkwCisKKwlleHBvcnQJfHRpbWVfb2ZfbGFzdF9wb2xsfAordGltZV9vZl9sYXN0X3BvbGw6ICBkY2QJMAorCisJQVJFQQlDT0RFLCBSRUFET05MWQorCWFsaWduIDQKKwlpbXBvcnQJfHIwfAorCWV4cG9ydAl8c3dpfAorCT0JInN3aSIKKwlhbGlnbiA0Citzd2k6CisJOyByMCA9IHN3aSBudW1iZXIKKwlzdG1mZAlzcCEse2FyNC1hcjEwLGxrfQorCW9ycglhcjEwLGFyMCwjMTw8MTcJCTthbHdheXMgdXNlIHRoZSBYIGZvcm0KKwltb3YJYXIwLGFyMQorCW1vdglhcjEsYXIyCisJbW92CWFyMixhcjMKKwlhZGQJYXIzLHNwLCM0KjgKKwlsZG1pYQlhcjMse2FyMy1hcjd9CisJc3dpCTB4NmYJCTsgT1NfQ2FsbEFTV0kKKwlsZHIJYXIxMCxyZWdzX2FkZHIKKwlzdG1pYQlhcjEwLHthcjAtYXI3fQorCWxkbXZjZmQJc3AhLHthcjQtYXIxMCxwY31eCisJOyByZXBvcnQgdGhlIGVycm9yIGFuZCBxdWl0IG9uIENhbmNlbAorCW1vdglyMSwjMHgxNworCWFkcglyMixzX3RpdGxlCisJc3dpCTB4NDAwZGYJCTsgV2ltcF9SZXBvcnRFcnJvcgorCWNtcAlyMSwjMQkJCTtPSyBzZWxlY3RlZD8KKwlsZG1lcWZkCXNwISx7YXI0LWFyMTAscGN9Xgk7eWVzIC0gdHJ5IHRvIGNvbnRpbnVlCisJc3dpCTB4MTEJCQk7bm8gIC0gZGllIChPU19FeGl0KQorc190aXRsZToKKwk9ICJOYXN0eSBlcnJvciAtIENhbmNlbCB0byBxdWl0IgorCT0gMAorCisJYWxpZ24gNAorCWV4cG9ydAl8eHN3aXwKKwk9CSJ4c3dpIgorCWFsaWduIDQKK3hzd2k6CisJOyByMCA9IHN3aSBudW1iZXIKKwlzdG1mZAlzcCEse2FyNC1hcjEwLGxrfQorCW9ycglhcjEwLGFyMCwjMTw8MTcJCTthbHdheXMgdXNlIHRoZSBYIGZvcm0KKwltb3YJYXIwLGFyMQorCW1vdglhcjEsYXIyCisJbW92CWFyMixhcjMKKwlhZGQJYXIzLHNwLCM0KjgKKwlsZG1pYQlhcjMse2FyMy1hcjd9CisJc3dpCTB4NmYJCTsgT1NfQ2FsbEFTV0kKKwlsZHIJYXIxMCxyZWdzX2FkZHIKKwlzdG1pYQlhcjEwLHthcjAtYXI3fQorCW1vdglhcjAsIzAKKwlvcnIJYXIwLGFyMCxhcjE1CisJbGRtZmQJc3AhLHthcjQtYXIxMCxwY31eCisKK3JlZ3NfYWRkcjoKKwlkY2QJcjAKKworCTsgVGhlIFdpbXBfUG9sbCBzd2lzIGhhdmUgdG8gYmUgZG9uZSBzcGVjaWFsbHkgYmVjYXVzZSwKKwk7IGZvciBzb21lIHJlYXNvbiwgcjEzIHNvbWV0aW1lcyBnZXRzIGNvcnJ1cHRlZCBieSBXaW1wX1BvbGwKKwk7IChlZyB3aGVuIHJ1bm5pbmcgRmlsZUZpbmQpCisJQVJFQQlDT0RFLCBSRUFET05MWQorCWFsaWduIDQKKwlpbXBvcnQgIHx0aW1lX29mX2xhc3RfcG9sbHwKKwlleHBvcnQJfHdpbXBfcG9sbHwKKwk9CSJ3aW1wX3BvbGwiCisJYWxpZ24gNAord2ltcF9wb2xsOgorCW1vdglhcjMsc3AKKwlzd2kJMHg0MDBjNwkJOyBXaW1wX1BvbGwKKwltb3YJc3AsYXIzCisKKwltb3YJYXIzLGFyMAorCXN3aQkweDQyCQk7IE9TX1JlYWRNb25vdG9uaWNUaW1lCisJbGRyCWFyMixhZGRyX3RpbWUKKwlzdHIJYXIwLFthcjJdCisJbW92CWFyMCxhcjMKKworCW1vdglhcjIsIzAKKwl3ZnMJYXIyCQk7IFdyaXRlIGZsb2F0aW5nIHBvaW50IHN0YXR1cy4gTmVlZGVkPworCW1vdnMJcGMsbGsKKworCWFsaWduIDQKKwlleHBvcnQJfHdpbXBfcG9sbGlkbGV8CisJPQkid2ltcF9wb2xsaWRsZSIKKwlhbGlnbiA0Cit3aW1wX3BvbGxpZGxlOgorCW1vdglhcjMsc3AKKwlzd2kJMHg0MDBlMQkJOyBXaW1wX1BvbGxJZGxlCisJbW92CXNwLGFyMworCisJbW92CWFyMyxhcjAKKwlzd2kJMHg0MgkJOyBPU19SZWFkTW9ub3RvbmljVGltZQorCWxkcglhcjIsYWRkcl90aW1lCisJc3RyCWFyMCxbYXIyXQorCW1vdglhcjAsYXIzCisKKwltb3YJYXIyLCMwCisJd2ZzCWFyMgkJOyBXcml0ZSBmbG9hdGluZyBwb2ludCBzdGF0dXMuIE5lZWRlZD8KKwltb3ZzCXBjLGxrCisKK2FkZHJfdGltZTogZGNkCXRpbWVfb2ZfbGFzdF9wb2xsCmRpZmYgLS1naXQgYS9zcmMvc3ludGF4LmMgYi9zcmMvc3ludGF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmZjc2MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zeW50YXguYwpAQCAtMCwwICsxLDg0NTYgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIHN5bnRheC5jOiBjb2RlIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nCisgKi8KKworI2luY2x1ZGUgInZpbS5oIgorCisvKgorICogU3RydWN0dXJlIHRoYXQgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgaGlnaGxpZ2h0IGdyb3VwLgorICogVGhlIElEIG9mIGEgaGlnaGxpZ2h0IGdyb3VwIGlzIGFsc28gY2FsbGVkIGdyb3VwIElELiAgSXQgaXMgdGhlIGluZGV4IGluCisgKiB0aGUgaGlnaGxpZ2h0X2dhIGFycmF5IFBMVVMgT05FLgorICovCitzdHJ1Y3QgaGxfZ3JvdXAKK3sKKyAgICBjaGFyX3UJKnNnX25hbWU7CS8qIGhpZ2hsaWdodCBncm91cCBuYW1lICovCisgICAgY2hhcl91CSpzZ19uYW1lX3U7CS8qIHVwcGVyY2FzZSBvZiBzZ19uYW1lICovCisvKiBmb3Igbm9ybWFsIHRlcm1pbmFscyAqLworICAgIGludAkJc2dfdGVybTsJLyogInRlcm09IiBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyAqLworICAgIGNoYXJfdQkqc2dfc3RhcnQ7CS8qIHRlcm1pbmFsIHN0cmluZyBmb3Igc3RhcnQgaGlnaGwgKi8KKyAgICBjaGFyX3UJKnNnX3N0b3A7CS8qIHRlcm1pbmFsIHN0cmluZyBmb3Igc3RvcCBoaWdobCAqLworICAgIGludAkJc2dfdGVybV9hdHRyOwkvKiBTY3JlZW4gYXR0ciBmb3IgdGVybSBtb2RlICovCisvKiBmb3IgY29sb3IgdGVybWluYWxzICovCisgICAgaW50CQlzZ19jdGVybTsJLyogImN0ZXJtPSIgaGlnaGxpZ2h0aW5nIGF0dHIgKi8KKyAgICBpbnQJCXNnX2N0ZXJtX2JvbGQ7CS8qIGJvbGQgYXR0ciB3YXMgc2V0IGZvciBsaWdodCBjb2xvciAqLworICAgIGludAkJc2dfY3Rlcm1fZmc7CS8qIHRlcm1pbmFsIGZnIGNvbG9yIG51bWJlciArIDEgKi8KKyAgICBpbnQJCXNnX2N0ZXJtX2JnOwkvKiB0ZXJtaW5hbCBiZyBjb2xvciBudW1iZXIgKyAxICovCisgICAgaW50CQlzZ19jdGVybV9hdHRyOwkvKiBTY3JlZW4gYXR0ciBmb3IgY29sb3IgdGVybSBtb2RlICovCisjaWZkZWYgRkVBVF9HVUkKKy8qIGZvciB3aGVuIHVzaW5nIHRoZSBHVUkgKi8KKyAgICBpbnQJCXNnX2d1aTsJCS8qICJndWk9IiBoaWdobGlnaHRpbmcgYXR0cmlidXRlcyAqLworICAgIGd1aWNvbG9yX1QJc2dfZ3VpX2ZnOwkvKiBHVUkgZm9yZWdyb3VuZCBjb2xvciBoYW5kbGUgKi8KKyAgICBjaGFyX3UJKnNnX2d1aV9mZ19uYW1lOy8qIEdVSSBmb3JlZ3JvdW5kIGNvbG9yIG5hbWUgKi8KKyAgICBndWljb2xvcl9UCXNnX2d1aV9iZzsJLyogR1VJIGJhY2tncm91bmQgY29sb3IgaGFuZGxlICovCisgICAgY2hhcl91CSpzZ19ndWlfYmdfbmFtZTsvKiBHVUkgYmFja2dyb3VuZCBjb2xvciBuYW1lICovCisgICAgR3VpRm9udAlzZ19mb250OwkvKiBHVUkgZm9udCBoYW5kbGUgKi8KKyNpZmRlZiBGRUFUX1hGT05UU0VUCisgICAgR3VpRm9udHNldAlzZ19mb250c2V0OwkvKiBHVUkgZm9udHNldCBoYW5kbGUgKi8KKyNlbmRpZgorICAgIGNoYXJfdQkqc2dfZm9udF9uYW1lOyAgLyogR1VJIGZvbnQgb3IgZm9udHNldCBuYW1lICovCisgICAgaW50CQlzZ19ndWlfYXR0cjsgICAgLyogU2NyZWVuIGF0dHIgZm9yIEdVSSBtb2RlICovCisjZW5kaWYKKyAgICBpbnQJCXNnX2xpbms7CS8qIGxpbmsgdG8gdGhpcyBoaWdobGlnaHQgZ3JvdXAgSUQgKi8KKyAgICBpbnQJCXNnX3NldDsJCS8qIGNvbWJpbmF0aW9uIG9mIFNHXyogZmxhZ3MgKi8KK307CisKKyNkZWZpbmUgU0dfVEVSTQkJMQkvKiB0ZXJtIGhhcyBiZWVuIHNldCAqLworI2RlZmluZSBTR19DVEVSTQkyCS8qIGN0ZXJtIGhhcyBiZWVuIHNldCAqLworI2RlZmluZSBTR19HVUkJCTQJLyogZ3VpIGhhcyBiZWVuIHNldCAqLworI2RlZmluZSBTR19MSU5LCQk4CS8qIGxpbmsgaGFzIGJlZW4gc2V0ICovCisKK3N0YXRpYyBnYXJyYXlfVCBoaWdobGlnaHRfZ2E7CS8qIGhpZ2hsaWdodCBncm91cHMgZm9yICdoaWdobGlnaHQnIG9wdGlvbiAqLworCisjZGVmaW5lIEhMX1RBQkxFKCkgKChzdHJ1Y3QgaGxfZ3JvdXAgKikoKGhpZ2hsaWdodF9nYS5nYV9kYXRhKSkpCisKKyNpZmRlZiBGRUFUX0NNRExfQ09NUEwKK3N0YXRpYyBpbnQgaW5jbHVkZV9kZWZhdWx0ID0gRkFMU0U7CS8qIGluY2x1ZGUgImRlZmF1bHQiIGZvciBleHBhbnNpb24gKi8KK3N0YXRpYyBpbnQgaW5jbHVkZV9saW5rID0gRkFMU0U7CS8qIGluY2x1ZGUgImxpbmsiIGZvciBleHBhbnNpb24gKi8KKyNlbmRpZgorCisvKgorICogVGhlICJ0ZXJtIiwgImN0ZXJtIiBhbmQgImd1aSIgYXJndW1lbnRzIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlCisgKiBmb2xsb3dpbmcgbmFtZXMsIHNlcGFyYXRlZCBieSBjb21tYXMgKGJ1dCBubyBzcGFjZXMhKS4KKyAqLworc3RhdGljIGNoYXIgKihobF9uYW1lX3RhYmxlW10pID0KKyAgICB7ImJvbGQiLCAic3RhbmRvdXQiLCAidW5kZXJsaW5lIiwgIml0YWxpYyIsICJyZXZlcnNlIiwgImludmVyc2UiLCAiTk9ORSJ9Oworc3RhdGljIGludCBobF9hdHRyX3RhYmxlW10gPQorICAgIHtITF9CT0xELCBITF9TVEFORE9VVCwgSExfVU5ERVJMSU5FLCBITF9JVEFMSUMsIEhMX0lOVkVSU0UsIEhMX0lOVkVSU0UsIDB9OworCitzdGF0aWMgaW50IGdldF9hdHRyX2VudHJ5ICBfX0FSR1MoKGdhcnJheV9UICp0YWJsZSwgYXR0cmVudHJ5X1QgKmFlcCkpOworc3RhdGljIHZvaWQgc3luX3VuYWRkX2dyb3VwIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgc2V0X2hsX2F0dHIgX19BUkdTKChpbnQgaWR4KSk7CitzdGF0aWMgdm9pZCBoaWdobGlnaHRfbGlzdF9vbmUgX19BUkdTKChpbnQgaWQpKTsKK3N0YXRpYyBpbnQgaGlnaGxpZ2h0X2xpc3RfYXJnIF9fQVJHUygoaW50IGlkLCBpbnQgZGlkaCwgaW50IHR5cGUsIGludCBpYXJnLCBjaGFyX3UgKnNhcmcsIGNoYXIgKm5hbWUpKTsKK3N0YXRpYyBpbnQgc3luX2FkZF9ncm91cCBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworc3RhdGljIGludCBzeW5fbGlzdF9oZWFkZXIgX19BUkdTKChpbnQgZGlkX2hlYWRlciwgaW50IG91dGxlbiwgaW50IGlkKSk7CitzdGF0aWMgaW50IGhsX2hhc19zZXR0aW5ncyBfX0FSR1MoKGludCBpZHgsIGludCBjaGVja19saW5rKSk7CitzdGF0aWMgdm9pZCBoaWdobGlnaHRfY2xlYXIgX19BUkdTKChpbnQgaWR4KSk7CisKKyNpZmRlZiBGRUFUX0dVSQorc3RhdGljIHZvaWQgZ3VpX2RvX29uZV9jb2xvciBfX0FSR1MoKGludCBpZHgsIGludCBkb19tZW51LCBpbnQgZG9fdG9vbHRpcCkpOworc3RhdGljIGludCAgc2V0X2dyb3VwX2NvbG9ycyBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgZ3VpY29sb3JfVCAqZmdwLCBndWljb2xvcl9UICpiZ3AsIGludCBkb19tZW51LCBpbnQgdXNlX25vcm0sIGludCBkb190b29sdGlwKSk7CitzdGF0aWMgZ3VpY29sb3JfVCBjb2xvcl9uYW1lMmhhbmRsZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworc3RhdGljIEd1aUZvbnQgZm9udF9uYW1lMmhhbmRsZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworIyBpZmRlZiBGRUFUX1hGT05UU0VUCitzdGF0aWMgR3VpRm9udHNldCBmb250c2V0X25hbWUyaGFuZGxlIF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgZml4ZWRfd2lkdGgpKTsKKyMgZW5kaWYKK3N0YXRpYyB2b2lkIGhsX2RvX2ZvbnQgX19BUkdTKChpbnQgaWR4LCBjaGFyX3UgKmFyZywgaW50IGRvX25vcm1hbCwgaW50IGRvX21lbnUsIGludCBkb190b29sdGlwKSk7CisjZW5kaWYKKworLyoKKyAqIEFuIGF0dHJpYnV0ZSBudW1iZXIgaXMgdGhlIGluZGV4IGluIGF0dHJfdGFibGUgcGx1cyBBVFRSX09GRi4KKyAqLworI2RlZmluZSBBVFRSX09GRiAoSExfQUxMICsgMSkKKworI2lmIGRlZmluZWQoRkVBVF9TWU5fSEwpIHx8IGRlZmluZWQoUFJPVE8pCisKKyNkZWZpbmUgU1lOX05BTUVMRU4JNTAJCS8qIG1heGltdW0gbGVuZ3RoIG9mIGEgc3ludGF4IG5hbWUgKi8KKworLyogZGlmZmVyZW50IHR5cGVzIG9mIG9mZnNldHMgdGhhdCBhcmUgcG9zc2libGUgKi8KKyNkZWZpbmUgU1BPX01TX09GRgkwCS8qIG1hdGNoICBzdGFydCBvZmZzZXQgKi8KKyNkZWZpbmUgU1BPX01FX09GRgkxCS8qIG1hdGNoICBlbmQJb2Zmc2V0ICovCisjZGVmaW5lIFNQT19IU19PRkYJMgkvKiBoaWdobC4gc3RhcnQgb2Zmc2V0ICovCisjZGVmaW5lIFNQT19IRV9PRkYJMwkvKiBoaWdobC4gZW5kCW9mZnNldCAqLworI2RlZmluZSBTUE9fUlNfT0ZGCTQJLyogcmVnaW9uIHN0YXJ0IG9mZnNldCAqLworI2RlZmluZSBTUE9fUkVfT0ZGCTUJLyogcmVnaW9uIGVuZAlvZmZzZXQgKi8KKyNkZWZpbmUgU1BPX0xDX09GRgk2CS8qIGxlYWRpbmcgY29udGV4dCBvZmZzZXQgKi8KKyNkZWZpbmUgU1BPX0NPVU5UCTcKKworc3RhdGljIGNoYXIgKihzcG9fbmFtZV90YWJbU1BPX0NPVU5UXSkgPQorCSAgICB7Im1zPSIsICJtZT0iLCAiaHM9IiwgImhlPSIsICJycz0iLCAicmU9IiwgImxjPSJ9OworCisvKgorICogVGhlIHBhdHRlcm5zIHRoYXQgYXJlIGJlaW5nIHNlYXJjaGVkIGZvciBhcmUgc3RvcmVkIGluIGEgc3luX3BhdHRlcm4uCisgKiBBIG1hdGNoIGl0ZW0gY29uc2lzdHMgb2Ygb25lIHBhdHRlcm4uCisgKiBBIHN0YXJ0L2VuZCBpdGVtIGNvbnNpc3RzIG9mIG4gc3RhcnQgcGF0dGVybnMgYW5kIG0gZW5kIHBhdHRlcm5zLgorICogQSBzdGFydC9za2lwL2VuZCBpdGVtIGNvbnNpc3RzIG9mIG4gc3RhcnQgcGF0dGVybnMsIG9uZSBza2lwIHBhdHRlcm4gYW5kIG0KKyAqIGVuZCBwYXR0ZXJucy4KKyAqIEZvciB0aGUgbGF0dGVyIHR3bywgdGhlIHBhdHRlcm5zIGFyZSBhbHdheXMgY29uc2VjdXRpdmU6IHN0YXJ0LXNraXAtZW5kLgorICoKKyAqIEEgY2hhcmFjdGVyIG9mZnNldCBjYW4gYmUgZ2l2ZW4gZm9yIHRoZSBtYXRjaGVkIHRleHQgKF9tX3N0YXJ0IGFuZCBfbV9lbmQpCisgKiBhbmQgZm9yIHRoZSBhY3R1YWxseSBoaWdobGlnaHRlZCB0ZXh0IChfaF9zdGFydCBhbmQgX2hfZW5kKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc3luX3BhdHRlcm4KK3sKKyAgICBjaGFyCSBzcF90eXBlOwkJLyogc2VlIFNQVFlQRV8gZGVmaW5lcyBiZWxvdyAqLworICAgIGNoYXIJIHNwX3N5bmNpbmc7CQkvKiB0aGlzIGl0ZW0gdXNlZCBmb3Igc3luY2luZyAqLworICAgIHNob3J0CSBzcF9mbGFnczsJCS8qIHNlZSBITF8gZGVmaW5lcyBiZWxvdyAqLworICAgIHN0cnVjdCBzcF9zeW4gc3Bfc3luOwkJLyogc3RydWN0IHBhc3NlZCB0byBpbl9pZF9saXN0KCkgKi8KKyAgICBzaG9ydAkgc3Bfc3luX21hdGNoX2lkOwkvKiBoaWdobGlnaHQgZ3JvdXAgSUQgb2YgcGF0dGVybiAqLworICAgIGNoYXJfdQkqc3BfcGF0dGVybjsJCS8qIHJlZ2V4cCB0byBtYXRjaCwgcGF0dGVybiAqLworICAgIHJlZ3Byb2dfVAkqc3BfcHJvZzsJCS8qIHJlZ2V4cCB0byBtYXRjaCwgcHJvZ3JhbSAqLworICAgIGludAkJIHNwX2ljOwkJCS8qIGlnbm9yZS1jYXNlIGZsYWcgZm9yIHNwX3Byb2cgKi8KKyAgICBzaG9ydAkgc3Bfb2ZmX2ZsYWdzOwkJLyogc2VlIGJlbG93ICovCisgICAgaW50CQkgc3Bfb2Zmc2V0c1tTUE9fQ09VTlRdOwkvKiBvZmZzZXRzICovCisgICAgc2hvcnQJKnNwX2NvbnRfbGlzdDsJCS8qIGNvbnQuIGdyb3VwIElEcywgaWYgbm9uLXplcm8gKi8KKyAgICBzaG9ydAkqc3BfbmV4dF9saXN0OwkJLyogbmV4dCBncm91cCBJRHMsIGlmIG5vbi16ZXJvICovCisgICAgaW50CQkgc3Bfc3luY19pZHg7CQkvKiBzeW5jIGl0ZW0gaW5kZXggKHN5bmNpbmcgb25seSkgKi8KKyAgICBpbnQJCSBzcF9saW5lX2lkOwkJLyogSUQgb2YgbGFzdCBsaW5lIHdoZXJlIHRyaWVkICovCisgICAgaW50CQkgc3Bfc3RhcnRjb2w7CQkvKiBuZXh0IG1hdGNoIGluIHNwX2xpbmVfaWQgbGluZSAqLworfSBzeW5wYXRfVDsKKworLyogVGhlIHNwX29mZl9mbGFncyBhcmUgY29tcHV0ZWQgbGlrZSB0aGlzOgorICogb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaGVkIHRleHQ6ICgxIDw8IFNQT19YWF9PRkYpCisgKiBvZmZzZXQgZnJvbSB0aGUgZW5kCSBvZiB0aGUgbWF0Y2hlZCB0ZXh0OiAoMSA8PCAoU1BPX1hYX09GRiArIFNQT19DT1VOVCkpCisgKiBXaGVuIGJvdGggYXJlIHByZXNlbnQsIG9ubHkgb25lIGlzIHVzZWQuCisgKi8KKworI2RlZmluZSBTUFRZUEVfTUFUQ0gJMQkvKiBtYXRjaCBrZXl3b3JkIHdpdGggdGhpcyBncm91cCBJRCAqLworI2RlZmluZSBTUFRZUEVfU1RBUlQJMgkvKiBtYXRjaCBhIHJlZ2V4cCwgc3RhcnQgb2YgaXRlbSAqLworI2RlZmluZSBTUFRZUEVfRU5ECTMJLyogbWF0Y2ggYSByZWdleHAsIGVuZCBvZiBpdGVtICovCisjZGVmaW5lIFNQVFlQRV9TS0lQCTQJLyogbWF0Y2ggYSByZWdleHAsIHNraXAgd2l0aGluIGl0ZW0gKi8KKworI2RlZmluZSBITF9DT05UQUlORUQJMHgwMQkvKiBub3QgdXNlZCBvbiB0b3BsZXZlbCAqLworI2RlZmluZSBITF9UUkFOU1AJMHgwMgkvKiBoYXMgbm8gaGlnaGxpZ2h0aW5nCSovCisjZGVmaW5lIEhMX09ORUxJTkUJMHgwNAkvKiBtYXRjaCB3aXRoaW4gb25lIGxpbmUgb25seSAqLworI2RlZmluZSBITF9IQVNfRU9MCTB4MDgJLyogZW5kIHBhdHRlcm4gdGhhdCBtYXRjaGVzIHdpdGggJCAqLworI2RlZmluZSBITF9TWU5DX0hFUkUJMHgxMAkvKiBzeW5jIHBvaW50IGFmdGVyIHRoaXMgaXRlbSAoc3luY2luZyBvbmx5KSAqLworI2RlZmluZSBITF9TWU5DX1RIRVJFCTB4MjAJLyogc3luYyBwb2ludCBhdCBjdXJyZW50IGxpbmUgKHN5bmNpbmcgb25seSkgKi8KKyNkZWZpbmUgSExfTUFUQ0gJMHg0MAkvKiB1c2UgbWF0Y2ggSUQgaW5zdGVhZCBvZiBpdGVtIElEICovCisjZGVmaW5lIEhMX1NLSVBOTAkweDgwCS8qIG5leHRncm91cCBjYW4gc2tpcCBuZXdsaW5lcyAqLworI2RlZmluZSBITF9TS0lQV0hJVEUJMHgxMDAJLyogbmV4dGdyb3VwIGNhbiBza2lwIHdoaXRlIHNwYWNlICovCisjZGVmaW5lIEhMX1NLSVBFTVBUWQkweDIwMAkvKiBuZXh0Z3JvdXAgY2FuIHNraXAgZW1wdHkgbGluZXMgKi8KKyNkZWZpbmUgSExfS0VFUEVORAkweDQwMAkvKiBlbmQgbWF0Y2ggYWx3YXlzIGtlcHQgKi8KKyNkZWZpbmUgSExfRVhDTFVERU5MCTB4ODAwCS8qIGV4Y2x1ZGUgTkwgZnJvbSBtYXRjaCAqLworI2RlZmluZSBITF9ESVNQTEFZCTB4MTAwMAkvKiBvbmx5IHVzZWQgZm9yIGRpc3BsYXlpbmcsIG5vdCBzeW5jaW5nICovCisjZGVmaW5lIEhMX0ZPTEQJCTB4MjAwMAkvKiBkZWZpbmUgZm9sZCAqLworI2RlZmluZSBITF9FWFRFTkQJMHg0MDAwCS8qIGlnbm9yZSBhIGtlZXBlbmQgKi8KKy8qIFRoZXNlIGRvbid0IGZpdCBpbiBhIHNob3J0LCB0aHVzIGNhbid0IGJlIHVzZWQgZm9yIHN5bnRheCBpdGVtcywgb25seSBmb3IKKyAqIHNpX2ZsYWdzIGFuZCBic19mbGFncy4gKi8KKyNkZWZpbmUgSExfTUFUQ0hDT05UCTB4ODAwMAkvKiBtYXRjaCBjb250aW51ZWQgZnJvbSBwcmV2aW91cyBsaW5lICovCisjZGVmaW5lIEhMX1RSQU5TX0NPTlQJMHgxMDAwMEwgLyogdHJhbnNwYXJlbnQgaXRlbSB3aXRob3V0IGNvbnRhaW5zIGFyZyAqLworCisjZGVmaW5lIFNZTl9JVEVNUyhidWYpCSgoc3lucGF0X1QgKikoKGJ1ZiktPmJfc3luX3BhdHRlcm5zLmdhX2RhdGEpKQorCisjZGVmaW5lIE5PTkVfSURYCS0yCS8qIHZhbHVlIG9mIHNwX3N5bmNfaWR4IGZvciAiTk9ORSIgKi8KKworLyoKKyAqIEZsYWdzIGZvciBiX3N5bl9zeW5jX2ZsYWdzOgorICovCisjZGVmaW5lIFNGX0NDT01NRU5UCTB4MDEJLyogc3luYyBvbiBhIEMtc3R5bGUgY29tbWVudCAqLworI2RlZmluZSBTRl9NQVRDSAkweDAyCS8qIHN5bmMgYnkgbWF0Y2hpbmcgYSBwYXR0ZXJuICovCisKKyNkZWZpbmUgU1lOX1NUQVRFX1Aoc3NwKSAgICAoKGJ1ZnN0YXRlX1QgKikoKHNzcCktPmdhX2RhdGEpKQorCisvKgorICogU2V0dGluZ3MgZm9yIGtleXdvcmQgaGFzaCB0YWJsZS4gIEl0IHVzZXMgYSBzaW1wbGlzdGljIGhhc2ggZnVuY3Rpb246IGFkZAorICogYWxsIGNoYXJhY3RlcnMgdG9nZXRoZXIsIG1vZHVsbyBLSEFTSF9TSVpFLgorICovCisjZGVmaW5lIEtIQVNIX1NJWkUJNTEyCisjZGVmaW5lIEtIQVNIX01BU0sJKEtIQVNIX1NJWkUgLSAxKQorI2RlZmluZSBNQVhLRVlXTEVOCTgwCSAgICAvKiBtYXhpbXVtIGxlbmd0aCBvZiBhIGtleXdvcmQgKi8KKworLyoKKyAqIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBzeW50YXggaXRlbSB0aGF0IGhhcyBiZWVuIHJlY29nbml6ZWQuCisgKi8KK3N0YXRpYyBpbnQgY3VycmVudF9hdHRyID0gMDsJICAgIC8qIGF0dHIgb2YgY3VycmVudCBzeW50YXggd29yZCAqLworI2lmZGVmIEZFQVRfRVZBTAorc3RhdGljIGludCBjdXJyZW50X2lkID0gMDsJICAgIC8qIElEIG9mIGN1cnJlbnQgY2hhciBmb3Igc3luX2dldF9pZCgpICovCitzdGF0aWMgaW50IGN1cnJlbnRfdHJhbnNfaWQgPSAwOyAgICAvKiBpZGVtLCB0cmFuc3BhcmFuY3kgcmVtb3ZlZCAqLworI2VuZGlmCisKK3N0cnVjdCBzeW5fY2x1c3RlcgoreworICAgIGNoYXJfdQkgICAgKnNjbF9uYW1lOwkgICAgLyogc3ludGF4IGNsdXN0ZXIgbmFtZSAqLworICAgIGNoYXJfdQkgICAgKnNjbF9uYW1lX3U7ICAgIC8qIHVwcGVyY2FzZSBvZiBzY2xfbmFtZSAqLworICAgIHNob3J0CSAgICAqc2NsX2xpc3Q7CSAgICAvKiBJRHMgaW4gdGhpcyBzeW50YXggY2x1c3RlciAqLworfTsKKworLyoKKyAqIE1ldGhvZHMgb2YgY29tYmluaW5nIHR3byBjbHVzdGVycworICovCisjZGVmaW5lIENMVVNURVJfUkVQTEFDRQkgICAgMQkvKiByZXBsYWNlIGZpcnN0IGxpc3Qgd2l0aCBzZWNvbmQgKi8KKyNkZWZpbmUgQ0xVU1RFUl9BREQJICAgIDIJLyogYWRkIHNlY29uZCBsaXN0IHRvIGZpcnN0ICovCisjZGVmaW5lIENMVVNURVJfU1VCVFJBQ1QgICAgMwkvKiBzdWJ0cmFjdCBzZWNvbmQgbGlzdCBmcm9tIGZpcnN0ICovCisKKyNkZWZpbmUgU1lOX0NMU1RSKGJ1ZikJKChzdHJ1Y3Qgc3luX2NsdXN0ZXIgKikoKGJ1ZiktPmJfc3luX2NsdXN0ZXJzLmdhX2RhdGEpKQorCisvKgorICogU3ludGF4IGdyb3VwIElEcyBoYXZlIGRpZmZlcmVudCB0eXBlczoKKyAqICAgICAwIC0gIDk5OTkgIG5vcm1hbCBzeW50YXggZ3JvdXBzCisgKiAxMDAwMCAtIDE0OTk5ICBBTExCVVQgaW5kaWNhdG9yIChjdXJyZW50X3N5bl9pbmNfdGFnIGFkZGVkKQorICogMTUwMDAgLSAxOTk5OSAgVE9QIGluZGljYXRvciAoY3VycmVudF9zeW5faW5jX3RhZyBhZGRlZCkKKyAqIDIwMDAwIC0gMjQ5OTkgIENPTlRBSU5FRCBpbmRpY2F0b3IgKGN1cnJlbnRfc3luX2luY190YWcgYWRkZWQpCisgKiA+PSAyNTAwMAkgIGNsdXN0ZXIgSURzIChzdWJ0cmFjdCBTWU5JRF9DTFVTVEVSIGZvciB0aGUgY2x1c3RlciBJRCkKKyAqLworI2RlZmluZSBTWU5JRF9BTExCVVQJMTAwMDAJICAgIC8qIHN5bnRheCBncm91cCBJRCBmb3IgY29udGFpbnM9QUxMQlVUICovCisjZGVmaW5lIFNZTklEX1RPUAkxNTAwMAkgICAgLyogc3ludGF4IGdyb3VwIElEIGZvciBjb250YWlucz1UT1AgKi8KKyNkZWZpbmUgU1lOSURfQ09OVEFJTkVECTIwMDAwCSAgICAvKiBzeW50YXggZ3JvdXAgSUQgZm9yIGNvbnRhaW5zPUNPTlRBSU5FRCAqLworI2RlZmluZSBTWU5JRF9DTFVTVEVSCTI1MDAwCSAgICAvKiBmaXJzdCBzeW50YXggZ3JvdXAgSUQgZm9yIGNsdXN0ZXJzICovCisKKy8qCisgKiBBbm5veWluZyBIYWNrKFRNKTogICI6c3luIGluY2x1ZGUiIG5lZWRzIHRoaXMgcG9pbnRlciB0byBwYXNzIHRvCisgKiBleHBhbmRfZmlsZW5hbWUoKS4gIE1vc3Qgb2YgdGhlIG90aGVyIHN5bnRheCBjb21tYW5kcyBkb24ndCBuZWVkIGl0LCBzbworICogaW5zdGVhZCBvZiBwYXNzaW5nIGl0IHRvIHRoZW0sIHdlIHN0b3cgaXQgaGVyZS4KKyAqLworc3RhdGljIGNoYXJfdSAqKnN5bl9jbWRsaW5lcDsKKworLyoKKyAqIEFub3RoZXIgQW5ub3lpbmcgSGFjayhUTSk6ICBUbyBwcmV2ZW50IHJ1bGVzIGZyb20gb3RoZXIgIjpzeW4gaW5jbHVkZSInZAorICogZmlsZXMgZnJvbSBmcm9tIGxlYWtpbmcgaW50byBBTExCVVQgbGlzdHMsIHdlIGFzc2lnbiBhIHVuaXF1ZSBJRCB0byB0aGUKKyAqIHJ1bGVzIGluIGVhY2ggIjpzeW4gaW5jbHVkZSInZCBmaWxlLgorICovCitzdGF0aWMgaW50IGN1cnJlbnRfc3luX2luY190YWcgPSAwOworc3RhdGljIGludCBydW5uaW5nX3N5bl9pbmNfdGFnID0gMDsKKworLyoKKyAqIFRvIHJlZHVjZSB0aGUgdGltZSBzcGVudCBpbiBrZWVwZW5kKCksIHJlbWVtYmVyIGF0IHdoaWNoIGxldmVsIGluIHRoZSBzdGF0ZQorICogc3RhY2sgdGhlIGZpcnN0IGl0ZW0gd2l0aCAia2VlcGVuZCIgaXMgcHJlc2VudC4gIFdoZW4gIi0xIiwgdGhlcmUgaXMgbm8KKyAqICJrZWVwZW5kIiBvbiB0aGUgc3RhY2suCisgKi8KK3N0YXRpYyBpbnQga2VlcGVuZF9sZXZlbCA9IC0xOworCisvKgorICogRm9yIHRoZSBjdXJyZW50IHN0YXRlIHdlIG5lZWQgdG8gcmVtZW1iZXIgbW9yZSB0aGFuIGp1c3QgdGhlIGlkeC4KKyAqIFdoZW4gc2lfbV9lbmRwb3MubG51bSBpcyAwLCB0aGUgaXRlbXMgb3RoZXIgdGhhbiBzaV9pZHggYXJlIHVua25vd24uCisgKiAoVGhlIGVuZCBwb3NpdGlvbnMgaGF2ZSB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgbmV4dCBjaGFyKQorICovCit0eXBlZGVmIHN0cnVjdCBzdGF0ZV9pdGVtCit7CisgICAgaW50CQlzaV9pZHg7CQkJLyogaW5kZXggb2Ygc3ludGF4IHBhdHRlcm4gKi8KKyAgICBpbnQJCXNpX2lkOwkJCS8qIGhpZ2hsaWdodCBncm91cCBJRCBmb3Iga2V5d29yZHMgKi8KKyAgICBpbnQJCXNpX3RyYW5zX2lkOwkJLyogaWRlbSwgdHJhbnNwYXJhbmN5IHJlbW92ZWQgKi8KKyAgICBpbnQJCXNpX21fbG51bTsJCS8qIGxudW0gb2YgdGhlIG1hdGNoICovCisgICAgaW50CQlzaV9tX3N0YXJ0Y29sOwkJLyogc3RhcnRpbmcgY29sdW1uIG9mIHRoZSBtYXRjaCAqLworICAgIGxwb3NfVAlzaV9tX2VuZHBvczsJCS8qIGp1c3QgYWZ0ZXIgZW5kIHBvc24gb2YgdGhlIG1hdGNoICovCisgICAgbHBvc19UCXNpX2hfc3RhcnRwb3M7CQkvKiBzdGFydCBwb3NpdGlvbiBvZiB0aGUgaGlnaGxpZ2h0aW5nICovCisgICAgbHBvc19UCXNpX2hfZW5kcG9zOwkJLyogZW5kIHBvc2l0aW9uIG9mIHRoZSBoaWdobGlnaHRpbmcgKi8KKyAgICBscG9zX1QJc2lfZW9lX3BvczsJCS8qIGVuZCBwb3NpdGlvbiBvZiBlbmQgcGF0dGVybiAqLworICAgIGludAkJc2lfZW5kX2lkeDsJCS8qIGdyb3VwIElEIGZvciBlbmQgcGF0dGVybiBvciB6ZXJvICovCisgICAgaW50CQlzaV9lbmRzOwkJLyogaWYgbWF0Y2ggZW5kcyBiZWZvcmUgc2lfbV9lbmRwb3MgKi8KKyAgICBpbnQJCXNpX2F0dHI7CQkvKiBhdHRyaWJ1dGVzIGluIHRoaXMgc3RhdGUgKi8KKyAgICBsb25nCXNpX2ZsYWdzOwkJLyogSExfSEFTX0VPTCBmbGFnIGluIHRoaXMgc3RhdGUsIGFuZAorCQkJCQkgKiBITF9TS0lQKiBmb3Igc2lfbmV4dF9saXN0ICovCisgICAgc2hvcnQJKnNpX2NvbnRfbGlzdDsJCS8qIGxpc3Qgb2YgY29udGFpbmVkIGdyb3VwcyAqLworICAgIHNob3J0CSpzaV9uZXh0X2xpc3Q7CQkvKiBuZXh0Z3JvdXAgSURzIGFmdGVyIHRoaXMgaXRlbSBlbmRzICovCisgICAgcmVnX2V4dG1hdGNoX1QgKnNpX2V4dG1hdGNoOwkvKiBceiguLi5cKSBtYXRjaGVzIGZyb20gc3RhcnQKKwkJCQkJICogcGF0dGVybiAqLworfSBzdGF0ZWl0ZW1fVDsKKworI2RlZmluZSBLRVlXT1JEX0lEWAktMQkgICAgLyogdmFsdWUgb2Ygc2lfaWR4IGZvciBrZXl3b3JkcyAqLworI2RlZmluZSBJRF9MSVNUX0FMTAkoc2hvcnQgKiktMSAvKiB2YWxpZCBvZiBzaV9jb250X2xpc3QgZm9yIGNvbnRhaW5pbmcgYWxsCisJCQkJICAgICAgIGJ1dCBjb250YWluZWQgZ3JvdXBzICovCisKKy8qCisgKiBUaGUgbmV4dCBwb3NzaWJsZSBtYXRjaCBpbiB0aGUgY3VycmVudCBsaW5lIGZvciBhbnkgcGF0dGVybiBpcyByZW1lbWJlcmVkLAorICogdG8gYXZvaWQgaGF2aW5nIHRvIHRyeSBmb3IgYSBtYXRjaCBpbiBlYWNoIGNvbHVtbi4KKyAqIElmIG5leHRfbWF0Y2hfaWR4ID09IC0xLCBub3QgdHJpZWQgKGluIHRoaXMgbGluZSkgeWV0LgorICogSWYgbmV4dF9tYXRjaF9jb2wgPT0gTUFYQ09MLCBubyBtYXRjaCBmb3VuZCBpbiB0aGlzIGxpbmUuCisgKiAoQWxsIGVuZCBwb3NpdGlvbnMgaGF2ZSB0aGUgY29sdW1uIG9mIHRoZSBjaGFyIGFmdGVyIHRoZSBlbmQpCisgKi8KK3N0YXRpYyBpbnQgbmV4dF9tYXRjaF9jb2w7CQkvKiBjb2x1bW4gZm9yIHN0YXJ0IG9mIG5leHQgbWF0Y2ggKi8KK3N0YXRpYyBscG9zX1QgbmV4dF9tYXRjaF9tX2VuZHBvczsJLyogcG9zaXRpb24gZm9yIGVuZCBvZiBuZXh0IG1hdGNoICovCitzdGF0aWMgbHBvc19UIG5leHRfbWF0Y2hfaF9zdGFydHBvczsgIC8qIHBvcy4gZm9yIGhpZ2hsLiBzdGFydCBvZiBuZXh0IG1hdGNoICovCitzdGF0aWMgbHBvc19UIG5leHRfbWF0Y2hfaF9lbmRwb3M7CS8qIHBvcy4gZm9yIGhpZ2hsLiBlbmQgb2YgbmV4dCBtYXRjaCAqLworc3RhdGljIGludCBuZXh0X21hdGNoX2lkeDsJCS8qIGluZGV4IG9mIG1hdGNoZWQgaXRlbSAqLworc3RhdGljIGxvbmcgbmV4dF9tYXRjaF9mbGFnczsJCS8qIGZsYWdzIGZvciBuZXh0IG1hdGNoICovCitzdGF0aWMgbHBvc19UIG5leHRfbWF0Y2hfZW9zX3BvczsJLyogZW5kIG9mIHN0YXJ0IHBhdHRuIChzdGFydCByZWdpb24pICovCitzdGF0aWMgbHBvc19UIG5leHRfbWF0Y2hfZW9lX3BvczsJLyogcG9zLiBmb3IgZW5kIG9mIGVuZCBwYXR0ZXJuICovCitzdGF0aWMgaW50IG5leHRfbWF0Y2hfZW5kX2lkeDsJCS8qIElEIG9mIGdyb3VwIGZvciBlbmQgcGF0dG4gb3IgemVybyAqLworc3RhdGljIHJlZ19leHRtYXRjaF9UICpuZXh0X21hdGNoX2V4dG1hdGNoID0gTlVMTDsKKworLyoKKyAqIEEgc3RhdGUgc3RhY2sgaXMgYW4gYXJyYXkgb2YgaW50ZWdlcnMgb3Igc3RhdGVpdGVtX1QsIHN0b3JlZCBpbiBhCisgKiBnYXJyYXlfVC4gIEEgc3RhdGUgc3RhY2sgaXMgaW52YWxpZCBpZiBpdCdzIGl0ZW1zaXplIGVudHJ5IGlzIHplcm8uCisgKi8KKyNkZWZpbmUgSU5WQUxJRF9TVEFURShzc3ApICAoKHNzcCktPmdhX2l0ZW1zaXplID09IDApCisjZGVmaW5lIFZBTElEX1NUQVRFKHNzcCkgICAgKChzc3ApLT5nYV9pdGVtc2l6ZSAhPSAwKQorCisvKgorICogVGhlIGN1cnJlbnQgc3RhdGUgKHdpdGhpbiB0aGUgbGluZSkgb2YgdGhlIHJlY29nbml0aW9uIGVuZ2luZS4KKyAqIFdoZW4gY3VycmVudF9zdGF0ZS5nYV9pdGVtc2l6ZSBpcyAwIHRoZSBjdXJyZW50IHN0YXRlIGlzIGludmFsaWQuCisgKi8KK3N0YXRpYyB3aW5fVAkqc3luX3dpbjsJCS8qIGN1cnJlbnQgd2luZG93IGZvciBoaWdobGlnaHRpbmcgKi8KK3N0YXRpYyBidWZfVAkqc3luX2J1ZjsJCS8qIGN1cnJlbnQgYnVmZmVyIGZvciBoaWdobGlnaHRpbmcgKi8KK3N0YXRpYyBsaW5lbnJfVCBjdXJyZW50X2xudW0gPSAwOwkvKiBsbnVtIG9mIGN1cnJlbnQgc3RhdGUgKi8KK3N0YXRpYyBjb2xucl9UCWN1cnJlbnRfY29sID0gMDsJLyogY29sdW1uIG9mIGN1cnJlbnQgc3RhdGUgKi8KK3N0YXRpYyBpbnQJY3VycmVudF9zdGF0ZV9zdG9yZWQgPSAwOyAvKiBUUlVFIGlmIHN0b3JlZCBjdXJyZW50IHN0YXRlCisJCQkJCSAgICogYWZ0ZXIgc2V0dGluZyBjdXJyZW50X2ZpbmlzaGVkICovCitzdGF0aWMgaW50CWN1cnJlbnRfZmluaXNoZWQgPSAwOwkvKiBjdXJyZW50IGxpbmUgaGFzIGJlZW4gZmluaXNoZWQgKi8KK3N0YXRpYyBnYXJyYXlfVCBjdXJyZW50X3N0YXRlCQkvKiBjdXJyZW50IHN0YWNrIG9mIHN0YXRlX2l0ZW1zICovCisJCT0gezAsIDAsIDAsIDAsIE5VTEx9Oworc3RhdGljIHNob3J0CSpjdXJyZW50X25leHRfbGlzdCA9IE5VTEw7IC8qIHdoZW4gbm9uLXplcm8sIG5leHRncm91cCBsaXN0ICovCitzdGF0aWMgaW50CWN1cnJlbnRfbmV4dF9mbGFncyA9IDA7IC8qIGZsYWdzIGZvciBjdXJyZW50X25leHRfbGlzdCAqLworc3RhdGljIGludAljdXJyZW50X2xpbmVfaWQgPSAwOwkvKiB1bmlxdWUgbnVtYmVyIGZvciBjdXJyZW50IGxpbmUgKi8KKworI2RlZmluZSBDVVJfU1RBVEUoaWR4KQkoKHN0YXRlaXRlbV9UICopKGN1cnJlbnRfc3RhdGUuZ2FfZGF0YSkpW2lkeF0KKworc3RhdGljIHZvaWQgc3luX3N5bmMgX19BUkdTKCh3aW5fVCAqd3AsIGxpbmVucl9UIGxudW0sIHN5bnN0YXRlX1QgKmxhc3RfdmFsaWQpKTsKK3N0YXRpYyBpbnQgc3luX21hdGNoX2xpbmVjb250IF9fQVJHUygobGluZW5yX1QgbG51bSkpOworc3RhdGljIHZvaWQgc3luX3N0YXJ0X2xpbmUgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBzeW5fdXBkYXRlX2VuZHMgX19BUkdTKChpbnQgc3RhcnRvZmxpbmUpKTsKK3N0YXRpYyB2b2lkIHN5bl9zdGFja19hbGxvYyBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQgc3luX3N0YWNrX2NsZWFudXAgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBzeW5fc3RhY2tfZnJlZV9lbnRyeSBfX0FSR1MoKGJ1Zl9UICpidWYsIHN5bnN0YXRlX1QgKnApKTsKK3N0YXRpYyBzeW5zdGF0ZV9UICpzeW5fc3RhY2tfZmluZF9lbnRyeSBfX0FSR1MoKGxpbmVucl9UIGxudW0pKTsKK3N0YXRpYyBzeW5zdGF0ZV9UICpzdG9yZV9jdXJyZW50X3N0YXRlIF9fQVJHUygoc3luc3RhdGVfVCAqc3ApKTsKK3N0YXRpYyB2b2lkIGxvYWRfY3VycmVudF9zdGF0ZSBfX0FSR1MoKHN5bnN0YXRlX1QgKmZyb20pKTsKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfY3VycmVudF9zdGF0ZSBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQgc3luX3N0YWNrX2VxdWFsIF9fQVJHUygoc3luc3RhdGVfVCAqc3ApKTsKK3N0YXRpYyB2b2lkIHZhbGlkYXRlX2N1cnJlbnRfc3RhdGUgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50IHN5bl9maW5pc2hfbGluZSBfX0FSR1MoKGludCBzeW5jaW5nKSk7CitzdGF0aWMgaW50IHN5bl9jdXJyZW50X2F0dHIgX19BUkdTKChpbnQgc3luY2luZywgaW50IGRpc3BsYXlpbmcpKTsKK3N0YXRpYyBpbnQgZGlkX21hdGNoX2FscmVhZHkgX19BUkdTKChpbnQgaWR4LCBnYXJyYXlfVCAqZ2FwKSk7CitzdGF0aWMgc3RhdGVpdGVtX1QgKnB1c2hfbmV4dF9tYXRjaCBfX0FSR1MoKHN0YXRlaXRlbV9UICpjdXJfc2kpKTsKK3N0YXRpYyB2b2lkIGNoZWNrX3N0YXRlX2VuZHMgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCB1cGRhdGVfc2lfYXR0ciBfX0FSR1MoKGludCBpZHgpKTsKK3N0YXRpYyB2b2lkIGNoZWNrX2tlZXBlbmQgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCB1cGRhdGVfc2lfZW5kIF9fQVJHUygoc3RhdGVpdGVtX1QgKnNpcCwgaW50IHN0YXJ0Y29sLCBpbnQgZm9yY2UpKTsKK3N0YXRpYyBzaG9ydCAqY29weV9pZF9saXN0IF9fQVJHUygoc2hvcnQgKmxpc3QpKTsKK3N0YXRpYyBpbnQgaW5faWRfbGlzdCBfX0FSR1MoKHN0YXRlaXRlbV9UICppdGVtLCBzaG9ydCAqY29udF9saXN0LCBzdHJ1Y3Qgc3Bfc3luICpzc3AsIGludCBjb250YWluZWQpKTsKK3N0YXRpYyBpbnQgcHVzaF9jdXJyZW50X3N0YXRlIF9fQVJHUygoaW50IGlkeCkpOworc3RhdGljIHZvaWQgcG9wX2N1cnJlbnRfc3RhdGUgX19BUkdTKCh2b2lkKSk7CisKK3N0YXRpYyB2b2lkIGZpbmRfZW5kcG9zIF9fQVJHUygoaW50IGlkeCwgbHBvc19UICpzdGFydHBvcywgbHBvc19UICptX2VuZHBvcywgbHBvc19UICpobF9lbmRwb3MsIGxvbmcgKmZsYWdzcCwgbHBvc19UICplbmRfZW5kcG9zLCBpbnQgKmVuZF9pZHgsIHJlZ19leHRtYXRjaF9UICpzdGFydF9leHQpKTsKK3N0YXRpYyB2b2lkIGNsZWFyX3N5bl9zdGF0ZSBfX0FSR1MoKHN5bnN0YXRlX1QgKnApKTsKK3N0YXRpYyB2b2lkIGNsZWFyX2N1cnJlbnRfc3RhdGUgX19BUkdTKCh2b2lkKSk7CisKK3N0YXRpYyB2b2lkIGxpbWl0X3BvcyBfX0FSR1MoKGxwb3NfVCAqcG9zLCBscG9zX1QgKmxpbWl0KSk7CitzdGF0aWMgdm9pZCBsaW1pdF9wb3NfemVybyBfX0FSR1MoKGxwb3NfVCAqcG9zLCBscG9zX1QgKmxpbWl0KSk7CitzdGF0aWMgdm9pZCBzeW5fYWRkX2VuZF9vZmYgX19BUkdTKChscG9zX1QgKnJlc3VsdCwgcmVnbW1hdGNoX1QgKnJlZ21hdGNoLCBzeW5wYXRfVCAqc3BwLCBpbnQgaWR4LCBpbnQgZXh0cmEpKTsKK3N0YXRpYyB2b2lkIHN5bl9hZGRfc3RhcnRfb2ZmIF9fQVJHUygobHBvc19UICpyZXN1bHQsIHJlZ21tYXRjaF9UICpyZWdtYXRjaCwgc3lucGF0X1QgKnNwcCwgaW50IGlkeCwgaW50IGV4dHJhKSk7CitzdGF0aWMgY2hhcl91ICpzeW5fZ2V0Y3VybGluZSBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQgc3luX3JlZ2V4ZWMgX19BUkdTKChyZWdtbWF0Y2hfVCAqcm1wLCBsaW5lbnJfVCBsbnVtLCBjb2xucl9UIGNvbCkpOworc3RhdGljIGludCBjaGVja19rZXl3b3JkX2lkIF9fQVJHUygoY2hhcl91ICpsaW5lLCBpbnQgc3RhcnRjb2wsIGludCAqZW5kY29sLCBsb25nICpmbGFncywgc2hvcnQgKipuZXh0X2xpc3QsIHN0YXRlaXRlbV9UICpjdXJfc2kpKTsKK3N0YXRpYyB2b2lkIHN5bl9jbWRfY2FzZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCwgaW50IHN5bmNpbmcpKTsKK3N0YXRpYyB2b2lkIHN5bnRheF9zeW5jX2NsZWFyIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgc3luX3JlbW92ZV9wYXR0ZXJuIF9fQVJHUygoYnVmX1QgKmJ1ZiwgaW50IGlkeCkpOworc3RhdGljIHZvaWQgc3luX2NsZWFyX3BhdHRlcm4gX19BUkdTKChidWZfVCAqYnVmLCBpbnQgaSkpOworc3RhdGljIHZvaWQgc3luX2NsZWFyX2NsdXN0ZXIgX19BUkdTKChidWZfVCAqYnVmLCBpbnQgaSkpOworc3RhdGljIHZvaWQgc3luX2NtZF9jbGVhciBfX0FSR1MoKGV4YXJnX1QgKmVhcCwgaW50IHN5bmNpbmcpKTsKK3N0YXRpYyB2b2lkIHN5bl9jbGVhcl9vbmUgX19BUkdTKChpbnQgaWQsIGludCBzeW5jaW5nKSk7CitzdGF0aWMgdm9pZCBzeW5fY21kX29uIF9fQVJHUygoZXhhcmdfVCAqZWFwLCBpbnQgc3luY2luZykpOworc3RhdGljIHZvaWQgc3luX2NtZF9lbmFibGUgX19BUkdTKChleGFyZ19UICplYXAsIGludCBzeW5jaW5nKSk7CitzdGF0aWMgdm9pZCBzeW5fY21kX3Jlc2V0IF9fQVJHUygoZXhhcmdfVCAqZWFwLCBpbnQgc3luY2luZykpOworc3RhdGljIHZvaWQgc3luX2NtZF9tYW51YWwgX19BUkdTKChleGFyZ19UICplYXAsIGludCBzeW5jaW5nKSk7CitzdGF0aWMgdm9pZCBzeW5fY21kX29mZiBfX0FSR1MoKGV4YXJnX1QgKmVhcCwgaW50IHN5bmNpbmcpKTsKK3N0YXRpYyB2b2lkIHN5bl9jbWRfb25vZmYgX19BUkdTKChleGFyZ19UICplYXAsIGNoYXIgKm5hbWUpKTsKK3N0YXRpYyB2b2lkIHN5bl9jbWRfbGlzdCBfX0FSR1MoKGV4YXJnX1QgKmVhcCwgaW50IHN5bmNpbmcpKTsKK3N0YXRpYyB2b2lkIHN5bl9saW5lc19tc2cgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBzeW5fbWF0Y2hfbXNnIF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgc3luX2xpc3Rfb25lIF9fQVJHUygoaW50IGlkLCBpbnQgc3luY2luZywgaW50IGxpbmtfb25seSkpOworc3RhdGljIHZvaWQgc3luX2xpc3RfY2x1c3RlciBfX0FSR1MoKGludCBpZCkpOworc3RhdGljIHZvaWQgcHV0X2lkX2xpc3QgX19BUkdTKChjaGFyX3UgKm5hbWUsIHNob3J0ICpsaXN0LCBpbnQgYXR0cikpOworc3RhdGljIHZvaWQgcHV0X3BhdHRlcm4gX19BUkdTKChjaGFyICpzLCBpbnQgYywgc3lucGF0X1QgKnNwcCwgaW50IGF0dHIpKTsKK3N0YXRpYyBpbnQgc3luX2xpc3Rfa2V5d29yZHMgX19BUkdTKChpbnQgaWQsIGtleWVudHJ5X1QgKiprdGFicCwgaW50IGRpZF9oZWFkZXIsIGludCBhdHRyKSk7CitzdGF0aWMgdm9pZCBzeW5fY2xlYXJfa2V5d29yZCBfX0FSR1MoKGludCBpZCwga2V5ZW50cnlfVCAqKmt0YWJwKSk7CitzdGF0aWMgdm9pZCBmcmVlX2tleXd0YWIgX19BUkdTKChrZXllbnRyeV9UICoqa3RhYnApKTsKK3N0YXRpYyB2b2lkIGFkZF9rZXl3b3JkIF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgaWQsIGludCBmbGFncywgc2hvcnQgKmNvbnRfaW5fbGlzdCwgc2hvcnQgKm5leHRfbGlzdCkpOworc3RhdGljIGludCBzeW5fa2hhc2ggX19BUkdTKChjaGFyX3UgKnApKTsKK3N0YXRpYyBjaGFyX3UgKmdldF9ncm91cF9uYW1lIF9fQVJHUygoY2hhcl91ICphcmcsIGNoYXJfdSAqKm5hbWVfZW5kKSk7CitzdGF0aWMgY2hhcl91ICpnZXRfc3luX29wdGlvbnMgX19BUkdTKChjaGFyX3UgKmFyZywgaW50ICpmbGFnc3AsIGludCBrZXl3b3JkLCBpbnQgKnN5bmNfaWR4LCBzaG9ydCAqKmNvbnRfbGlzdCwgc2hvcnQgKipjb250X2luX2xpc3QsIHNob3J0ICoqbmV4dF9saXN0KSk7CitzdGF0aWMgdm9pZCBzeW5fY21kX2luY2x1ZGUgX19BUkdTKChleGFyZ19UICplYXAsIGludCBzeW5jaW5nKSk7CitzdGF0aWMgdm9pZCBzeW5fY21kX2tleXdvcmQgX19BUkdTKChleGFyZ19UICplYXAsIGludCBzeW5jaW5nKSk7CitzdGF0aWMgdm9pZCBzeW5fY21kX21hdGNoIF9fQVJHUygoZXhhcmdfVCAqZWFwLCBpbnQgc3luY2luZykpOworc3RhdGljIHZvaWQgc3luX2NtZF9yZWdpb24gX19BUkdTKChleGFyZ19UICplYXAsIGludCBzeW5jaW5nKSk7CisjaWZkZWYgX19CT1JMQU5EQ19fCitzdGF0aWMgaW50IF9SVExFTlRSWUYgc3luX2NvbXBhcmVfc3R1YiBfX0FSR1MoKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2MikpOworI2Vsc2UKK3N0YXRpYyBpbnQgc3luX2NvbXBhcmVfc3R1YiBfX0FSR1MoKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2MikpOworI2VuZGlmCitzdGF0aWMgdm9pZCBzeW5fY21kX2NsdXN0ZXIgX19BUkdTKChleGFyZ19UICplYXAsIGludCBzeW5jaW5nKSk7CitzdGF0aWMgaW50IHN5bl9zY2xfbmFtZTJpZCBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworc3RhdGljIGludCBzeW5fc2NsX25hbWVuMmlkIF9fQVJHUygoY2hhcl91ICpsaW5lcCwgaW50IGxlbikpOworc3RhdGljIGludCBzeW5fY2hlY2tfY2x1c3RlciBfX0FSR1MoKGNoYXJfdSAqcHAsIGludCBsZW4pKTsKK3N0YXRpYyBpbnQgc3luX2FkZF9jbHVzdGVyIF9fQVJHUygoY2hhcl91ICpuYW1lKSk7CitzdGF0aWMgdm9pZCBpbml0X3N5bl9wYXR0ZXJucyBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBjaGFyX3UgKmdldF9zeW5fcGF0dGVybiBfX0FSR1MoKGNoYXJfdSAqYXJnLCBzeW5wYXRfVCAqY2kpKTsKK3N0YXRpYyB2b2lkIHN5bl9jbWRfc3luYyBfX0FSR1MoKGV4YXJnX1QgKmVhcCwgaW50IHN5bmNpbmcpKTsKK3N0YXRpYyBpbnQgZ2V0X2lkX2xpc3QgX19BUkdTKChjaGFyX3UgKiphcmcsIGludCBrZXlsZW4sIHNob3J0ICoqbGlzdCkpOworc3RhdGljIHZvaWQgc3luX2NvbWJpbmVfbGlzdCBfX0FSR1MoKHNob3J0ICoqY2xzdHIxLCBzaG9ydCAqKmNsc3RyMiwgaW50IGxpc3Rfb3ApKTsKK3N0YXRpYyB2b2lkIHN5bl9pbmNsX3RvcGxldmVsIF9fQVJHUygoaW50IGlkLCBpbnQgKmZsYWdzcCkpOworCisvKgorICogU3RhcnQgdGhlIHN5bnRheCByZWNvZ25pdGlvbiBmb3IgYSBsaW5lLiAgVGhpcyBmdW5jdGlvbiBpcyBub3JtYWxseSBjYWxsZWQKKyAqIGZyb20gdGhlIHNjcmVlbiB1cGRhdGluZywgb25jZSBmb3IgZWFjaCBkaXNwbGF5ZWQgbGluZS4KKyAqIFRoZSBidWZmZXIgaXMgcmVtZW1iZXJlZCBpbiBzeW5fYnVmLCBiZWNhdXNlIGdldF9zeW50YXhfYXR0cigpIGRvZXNuJ3QgZ2V0CisgKiBpdC4JQ2FyZWZ1bDogY3VyYnVmIGFuZCBjdXJ3aW4gYXJlIGxpa2VseSB0byBwb2ludCB0byBhbm90aGVyIGJ1ZmZlciBhbmQKKyAqIHdpbmRvdy4KKyAqLworICAgIHZvaWQKK3N5bnRheF9zdGFydCh3cCwgbG51bSkKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBzeW5zdGF0ZV9UCSpwOworICAgIHN5bnN0YXRlX1QJKmxhc3RfdmFsaWQgPSBOVUxMOworICAgIHN5bnN0YXRlX1QJKmxhc3RfbWluX3ZhbGlkID0gTlVMTDsKKyAgICBzeW5zdGF0ZV9UCSpzcCwgKnByZXY7CisgICAgbGluZW5yX1QJcGFyc2VkX2xudW07CisgICAgbGluZW5yX1QJZmlyc3Rfc3RvcmVkOworICAgIGludAkJZGlzdDsKKworICAgIHJlZ19zeW4gPSBUUlVFOwkvKiBsZXQgdmltX3JlZ2V4ZWMoKSBrbm93IHdlJ3JlIHVzaW5nIHN5bnRheCAqLworCisgICAgLyoKKyAgICAgKiBBZnRlciBzd2l0Y2hpbmcgYnVmZmVycywgaW52YWxpZGF0ZSBjdXJyZW50X3N0YXRlLgorICAgICAqLworICAgIGlmIChzeW5fYnVmICE9IHdwLT53X2J1ZmZlcikKKyAgICB7CisJaW52YWxpZGF0ZV9jdXJyZW50X3N0YXRlKCk7CisJc3luX2J1ZiA9IHdwLT53X2J1ZmZlcjsKKyAgICB9CisgICAgc3luX3dpbiA9IHdwOworCisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBzeW50YXggc3RhY2sgd2hlbiBuZWVkZWQuCisgICAgICovCisgICAgc3luX3N0YWNrX2FsbG9jKCk7CisgICAgaWYgKHN5bl9idWYtPmJfc3N0X2FycmF5ID09IE5VTEwpCisJZ290byB0aGVlbmQ7CQkvKiBvdXQgb2YgbWVtb3J5ICovCisgICAgc3luX2J1Zi0+Yl9zc3RfbGFzdHRpY2sgPSBkaXNwbGF5X3RpY2s7CisKKyAgICAvKgorICAgICAqIElmIHRoZSBzdGF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lIGlzIHVzZWZ1bCwgc3RvcmUgaXQuCisgICAgICovCisgICAgaWYgKFZBTElEX1NUQVRFKCZjdXJyZW50X3N0YXRlKQorCSAgICAmJiBjdXJyZW50X2xudW0gPCBsbnVtCisJICAgICYmIGN1cnJlbnRfbG51bSA8IHN5bl9idWYtPmJfbWwubWxfbGluZV9jb3VudCkKKyAgICB7CisJKHZvaWQpc3luX2ZpbmlzaF9saW5lKEZBTFNFKTsKKwlpZiAoIWN1cnJlbnRfc3RhdGVfc3RvcmVkKQorCXsKKwkgICAgKytjdXJyZW50X2xudW07CisJICAgICh2b2lkKXN0b3JlX2N1cnJlbnRfc3RhdGUoTlVMTCk7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgY3VycmVudF9sbnVtIGlzIG5vdyB0aGUgc2FtZSBhcyAibG51bSIsIGtlZXAgdGhlIGN1cnJlbnQKKwkgKiBzdGF0ZSAodGhpcyBoYXBwZW5zIHZlcnkgb2Z0ZW4hKS4gIE90aGVyd2lzZSBpbnZhbGlkYXRlCisJICogY3VycmVudF9zdGF0ZSBhbmQgZmlndXJlIGl0IG91dCBiZWxvdy4KKwkgKi8KKwlpZiAoY3VycmVudF9sbnVtICE9IGxudW0pCisJICAgIGludmFsaWRhdGVfY3VycmVudF9zdGF0ZSgpOworICAgIH0KKyAgICBlbHNlCisJaW52YWxpZGF0ZV9jdXJyZW50X3N0YXRlKCk7CisKKyAgICAvKgorICAgICAqIFRyeSB0byBzeW5jaHJvbml6ZSBmcm9tIGEgc2F2ZWQgc3RhdGUgaW4gYl9zc3RfYXJyYXlbXS4KKyAgICAgKiBPbmx5IGRvIHRoaXMgaWYgbG51bSBpcyBub3QgYmVmb3JlIGFuZCBub3QgdG8gZmFyIGJleW9uZCBhIHNhdmVkIHN0YXRlLgorICAgICAqLworICAgIGlmIChJTlZBTElEX1NUQVRFKCZjdXJyZW50X3N0YXRlKSAmJiBzeW5fYnVmLT5iX3NzdF9hcnJheSAhPSBOVUxMKQorICAgIHsKKwkvKiBGaW5kIGxhc3QgdmFsaWQgc2F2ZWQgc3RhdGUgYmVmb3JlIHN0YXJ0X2xudW0uICovCisJZm9yIChwID0gc3luX2J1Zi0+Yl9zc3RfZmlyc3Q7IHAgIT0gTlVMTDsgcCA9IHAtPnNzdF9uZXh0KQorCXsKKwkgICAgaWYgKHAtPnNzdF9sbnVtID4gbG51bSkKKwkJYnJlYWs7CisJICAgIGlmIChwLT5zc3RfbG51bSA8PSBsbnVtICYmIHAtPnNzdF9jaGFuZ2VfbG51bSA9PSAwKQorCSAgICB7CisJCWxhc3RfdmFsaWQgPSBwOworCQlpZiAocC0+c3N0X2xudW0gPj0gbG51bSAtIHN5bl9idWYtPmJfc3luX3N5bmNfbWlubGluZXMpCisJCSAgICBsYXN0X21pbl92YWxpZCA9IHA7CisJICAgIH0KKwl9CisJaWYgKGxhc3RfbWluX3ZhbGlkICE9IE5VTEwpCisJICAgIGxvYWRfY3VycmVudF9zdGF0ZShsYXN0X21pbl92YWxpZCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiAibG51bSIgaXMgYmVmb3JlIG9yIGZhciBiZXlvbmQgYSBsaW5lIHdpdGggYSBzYXZlZCBzdGF0ZSwgbmVlZCB0bworICAgICAqIHJlLXN5bmNocm9uaXplLgorICAgICAqLworICAgIGlmIChJTlZBTElEX1NUQVRFKCZjdXJyZW50X3N0YXRlKSkKKyAgICB7CisJc3luX3N5bmMod3AsIGxudW0sIGxhc3RfdmFsaWQpOworCWZpcnN0X3N0b3JlZCA9IGN1cnJlbnRfbG51bSArIHN5bl9idWYtPmJfc3luX3N5bmNfbWlubGluZXM7CisgICAgfQorICAgIGVsc2UKKwlmaXJzdF9zdG9yZWQgPSBjdXJyZW50X2xudW07CisKKyAgICAvKgorICAgICAqIEFkdmFuY2UgZnJvbSB0aGUgc3luYyBwb2ludCBvciBzYXZlZCBzdGF0ZSB1bnRpbCB0aGUgY3VycmVudCBsaW5lLgorICAgICAqIFNhdmUgc29tZSBlbnRyaWVzIGZvciBzeW5jaW5nIHdpdGggbGF0ZXIgb24uCisgICAgICovCisgICAgZGlzdCA9IHN5bl9idWYtPmJfbWwubWxfbGluZV9jb3VudCAvIChzeW5fYnVmLT5iX3NzdF9sZW4gLSBSb3dzKSArIDE7CisgICAgcHJldiA9IHN5bl9zdGFja19maW5kX2VudHJ5KGN1cnJlbnRfbG51bSk7CisgICAgd2hpbGUgKGN1cnJlbnRfbG51bSA8IGxudW0pCisgICAgeworCXN5bl9zdGFydF9saW5lKCk7CisJKHZvaWQpc3luX2ZpbmlzaF9saW5lKEZBTFNFKTsKKwkrK2N1cnJlbnRfbG51bTsKKworCS8qIElmIHdlIHBhcnNlZCBhdCBsZWFzdCAibWlubGluZXMiIGxpbmVzIG9yIHN0YXJ0ZWQgYXQgYSB2YWxpZAorCSAqIHN0YXRlLCB0aGUgY3VycmVudCBzdGF0ZSBpcyBjb25zaWRlcmVkIHZhbGlkLiAqLworCWlmIChjdXJyZW50X2xudW0gPj0gZmlyc3Rfc3RvcmVkKQorCXsKKwkgICAgLyogQ2hlY2sgaWYgdGhlIHNhdmVkIHN0YXRlIGVudHJ5IGlzIGZvciB0aGUgY3VycmVudCBsaW5lIGFuZCBpcworCSAgICAgKiBlcXVhbCB0byB0aGUgY3VycmVudCBzdGF0ZS4gIElmIHNvLCB0aGVuIHZhbGlkYXRlIGFsbCBzYXZlZAorCSAgICAgKiBzdGF0ZXMgdGhhdCBkZXBlbmRlZCBvbiBhIGNoYW5nZSBiZWZvcmUgdGhlIHBhcnNlZCBsaW5lLiAqLworCSAgICBpZiAocHJldiA9PSBOVUxMKQorCQlzcCA9IHN5bl9idWYtPmJfc3N0X2ZpcnN0OworCSAgICBlbHNlCisJCXNwID0gcHJldi0+c3N0X25leHQ7CisJICAgIGlmIChzcCAhPSBOVUxMCisJCSAgICAmJiBzcC0+c3N0X2xudW0gPT0gY3VycmVudF9sbnVtCisJCSAgICAmJiBzeW5fc3RhY2tfZXF1YWwoc3ApKQorCSAgICB7CisJCXBhcnNlZF9sbnVtID0gY3VycmVudF9sbnVtOworCQlwcmV2ID0gc3A7CisJCXdoaWxlIChzcCAhPSBOVUxMICYmIHNwLT5zc3RfY2hhbmdlX2xudW0gPD0gcGFyc2VkX2xudW0pCisJCXsKKwkJICAgIGlmIChzcC0+c3N0X2xudW0gPD0gbG51bSkKKwkJCS8qIHZhbGlkIHN0YXRlIGJlZm9yZSBkZXNpcmVkIGxpbmUsIHVzZSB0aGlzIG9uZSAqLworCQkJcHJldiA9IHNwOworCQkgICAgZWxzZSBpZiAoc3AtPnNzdF9jaGFuZ2VfbG51bSA9PSAwKQorCQkJLyogcGFzdCBzYXZlZCBzdGF0ZXMgZGVwZW5kaW5nIG9uIGNoYW5nZSwgYnJlYWsgaGVyZS4gKi8KKwkJCWJyZWFrOworCQkgICAgc3AtPnNzdF9jaGFuZ2VfbG51bSA9IDA7CisJCSAgICBzcCA9IHNwLT5zc3RfbmV4dDsKKwkJfQorCQlsb2FkX2N1cnJlbnRfc3RhdGUocHJldik7CisJICAgIH0KKwkgICAgLyogU3RvcmUgdGhlIHN0YXRlIGF0IHRoaXMgbGluZSB3aGVuIGl0J3MgdGhlIGZpcnN0IG9uZSwgdGhlIGxpbmUKKwkgICAgICogd2hlcmUgd2Ugc3RhcnQgcGFyc2luZywgb3Igc29tZSBkaXN0YW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5CisJICAgICAqIHNhdmVkIHN0YXRlLiAgQnV0IG9ubHkgd2hlbiBwYXJzZWQgYXQgbGVhc3QgJ21pbmxpbmVzJy4gKi8KKwkgICAgZWxzZSBpZiAocHJldiA9PSBOVUxMCisJCQl8fCBjdXJyZW50X2xudW0gPT0gbG51bQorCQkJfHwgY3VycmVudF9sbnVtID49IHByZXYtPnNzdF9sbnVtICsgZGlzdCkKKwkJcHJldiA9IHN0b3JlX2N1cnJlbnRfc3RhdGUocHJldik7CisJfQorCisJLyogVGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZTogYnJlYWsgd2hlbiBDVFJMLUMgcHJlc3NlZC4gIFRoZSBjdXJyZW50CisJICogc3RhdGUgd2lsbCBiZSB3cm9uZyB0aGVuLiAqLworCWxpbmVfYnJlYWtjaGVjaygpOworCWlmIChnb3RfaW50KQorCXsKKwkgICAgY3VycmVudF9sbnVtID0gbG51bTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIHN5bl9zdGFydF9saW5lKCk7CisKK3RoZWVuZDoKKyAgICByZWdfc3luID0gRkFMU0U7Cit9CisKKy8qCisgKiBXZSBjYW5ub3Qgc2ltcGx5IGRpc2NhcmQgZ3Jvd2FycmF5cyBmdWxsIG9mIHN0YXRlX2l0ZW1zIG9yIGJ1Zl9zdGF0ZXM7IHdlCisgKiBoYXZlIHRvIG1hbnVhbGx5IHJlbGVhc2UgdGhlaXIgZXh0bWF0Y2ggcG9pbnRlcnMgZmlyc3QuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2xlYXJfc3luX3N0YXRlKHApCisgICAgc3luc3RhdGVfVCAqcDsKK3sKKyAgICBpbnQJCWk7CisgICAgZ2FycmF5X1QJKmdhcDsKKworICAgIGlmIChwLT5zc3Rfc3RhY2tzaXplID4gU1NUX0ZJWF9TVEFURVMpCisgICAgeworCWdhcCA9ICYocC0+c3N0X3VuaW9uLnNzdF9nYSk7CisJZm9yIChpID0gMDsgaSA8IGdhcC0+Z2FfbGVuOyBpKyspCisJICAgIHVucmVmX2V4dG1hdGNoKFNZTl9TVEFURV9QKGdhcClbaV0uYnNfZXh0bWF0Y2gpOworCWdhX2NsZWFyKGdhcCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IHAtPnNzdF9zdGFja3NpemU7IGkrKykKKwkgICAgdW5yZWZfZXh0bWF0Y2gocC0+c3N0X3VuaW9uLnNzdF9zdGFja1tpXS5ic19leHRtYXRjaCk7CisgICAgfQorfQorCisvKgorICogQ2xlYW51cCB0aGUgY3VycmVudF9zdGF0ZSBzdGFjay4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjbGVhcl9jdXJyZW50X3N0YXRlKCkKK3sKKyAgICBpbnQJCWk7CisgICAgc3RhdGVpdGVtX1QJKnNpcDsKKworICAgIHNpcCA9IChzdGF0ZWl0ZW1fVCAqKShjdXJyZW50X3N0YXRlLmdhX2RhdGEpOworICAgIGZvciAoaSA9IDA7IGkgPCBjdXJyZW50X3N0YXRlLmdhX2xlbjsgaSsrKQorCXVucmVmX2V4dG1hdGNoKHNpcFtpXS5zaV9leHRtYXRjaCk7CisgICAgZ2FfY2xlYXIoJmN1cnJlbnRfc3RhdGUpOworfQorCisvKgorICogVHJ5IHRvIGZpbmQgYSBzeW5jaHJvbmlzYXRpb24gcG9pbnQgZm9yIGxpbmUgImxudW0iLgorICoKKyAqIFRoaXMgc2V0cyBjdXJyZW50X2xudW0gYW5kIHRoZSBjdXJyZW50IHN0YXRlLiAgT25lIG9mIHRocmVlIG1ldGhvZHMgaXMKKyAqIHVzZWQ6CisgKiAxLiBTZWFyY2ggYmFja3dhcmRzIGZvciB0aGUgZW5kIG9mIGEgQy1jb21tZW50LgorICogMi4gU2VhcmNoIGJhY2t3YXJkcyBmb3IgZ2l2ZW4gc3luYyBwYXR0ZXJucy4KKyAqIDMuIFNpbXBseSBzdGFydCBvbiBhIGdpdmVuIG51bWJlciBvZiBsaW5lcyBhYm92ZSAibG51bSIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX3N5bmMod3AsIHN0YXJ0X2xudW0sIGxhc3RfdmFsaWQpCisgICAgd2luX1QJKndwOworICAgIGxpbmVucl9UCXN0YXJ0X2xudW07CisgICAgc3luc3RhdGVfVAkqbGFzdF92YWxpZDsKK3sKKyAgICBidWZfVAkqY3VyYnVmX3NhdmU7CisgICAgd2luX1QJKmN1cndpbl9zYXZlOworICAgIHBvc19UCWN1cnNvcl9zYXZlOworICAgIGludAkJaWR4OworICAgIGxpbmVucl9UCWxudW07CisgICAgbGluZW5yX1QJZW5kX2xudW07CisgICAgbGluZW5yX1QJYnJlYWtfbG51bTsKKyAgICBpbnQJCWhhZF9zeW5jX3BvaW50OworICAgIHN0YXRlaXRlbV9UCSpjdXJfc2k7CisgICAgc3lucGF0X1QJKnNwcDsKKyAgICBjaGFyX3UJKmxpbmU7CisgICAgaW50CQlmb3VuZF9mbGFncyA9IDA7CisgICAgaW50CQlmb3VuZF9tYXRjaF9pZHggPSAwOworICAgIGxpbmVucl9UCWZvdW5kX2N1cnJlbnRfbG51bSA9IDA7CisgICAgaW50CQlmb3VuZF9jdXJyZW50X2NvbD0gMDsKKyAgICBscG9zX1QJZm91bmRfbV9lbmRwb3M7CisKKyAgICAvKgorICAgICAqIENsZWFyIGFueSBjdXJyZW50IHN0YXRlIHRoYXQgbWlnaHQgYmUgaGFuZ2luZyBhcm91bmQuCisgICAgICovCisgICAgaW52YWxpZGF0ZV9jdXJyZW50X3N0YXRlKCk7CisKKyAgICAvKgorICAgICAqIFN0YXJ0IGF0IGxlYXN0ICJtaW5saW5lcyIgYmFjay4gIERlZmF1bHQgc3RhcnRpbmcgcG9pbnQgZm9yIHBhcnNpbmcgaXMKKyAgICAgKiB0aGVyZS4KKyAgICAgKiBTdGFydCBmdXJ0aGVyIGJhY2ssIHRvIGF2b2lkIHRoYXQgc2Nyb2xsaW5nIGJhY2t3YXJkcyB3aWxsIHJlc3VsdCBpbgorICAgICAqIHJlc3luY2luZyBmb3IgZXZlcnkgbGluZS4gIE5vdyBpdCByZXN5bmNzIG9ubHkgb25lIG91dCBvZiBOIGxpbmVzLAorICAgICAqIHdoZXJlIE4gaXMgbWlubGluZXMgKiAxLjUsIG9yIG1pbmxpbmVzICogMiBpZiBtaW5saW5lcyBpcyBzbWFsbC4KKyAgICAgKiBXYXRjaCBvdXQgZm9yIG92ZXJmbG93IHdoZW4gbWlubGluZXMgaXMgTUFYTE5VTS4KKyAgICAgKi8KKyAgICBpZiAoc3luX2J1Zi0+Yl9zeW5fc3luY19taW5saW5lcyA+IHN0YXJ0X2xudW0pCisJc3RhcnRfbG51bSA9IDE7CisgICAgZWxzZQorICAgIHsKKwlpZiAoc3luX2J1Zi0+Yl9zeW5fc3luY19taW5saW5lcyA9PSAxKQorCSAgICBsbnVtID0gMTsKKwllbHNlIGlmIChzeW5fYnVmLT5iX3N5bl9zeW5jX21pbmxpbmVzIDwgMTApCisJICAgIGxudW0gPSBzeW5fYnVmLT5iX3N5bl9zeW5jX21pbmxpbmVzICogMjsKKwllbHNlCisJICAgIGxudW0gPSBzeW5fYnVmLT5iX3N5bl9zeW5jX21pbmxpbmVzICogMyAvIDI7CisJaWYgKHN5bl9idWYtPmJfc3luX3N5bmNfbWF4bGluZXMgIT0gMAorCQkJCSAgICAgICAmJiBsbnVtID4gc3luX2J1Zi0+Yl9zeW5fc3luY19tYXhsaW5lcykKKwkgICAgbG51bSA9IHN5bl9idWYtPmJfc3luX3N5bmNfbWF4bGluZXM7CisJaWYgKGxudW0gPj0gc3RhcnRfbG51bSkKKwkgICAgc3RhcnRfbG51bSA9IDE7CisJZWxzZQorCSAgICBzdGFydF9sbnVtIC09IGxudW07CisgICAgfQorICAgIGN1cnJlbnRfbG51bSA9IHN0YXJ0X2xudW07CisKKyAgICAvKgorICAgICAqIDEuIFNlYXJjaCBiYWNrd2FyZHMgZm9yIHRoZSBlbmQgb2YgYSBDLXN0eWxlIGNvbW1lbnQuCisgICAgICovCisgICAgaWYgKHN5bl9idWYtPmJfc3luX3N5bmNfZmxhZ3MgJiBTRl9DQ09NTUVOVCkKKyAgICB7CisJLyogTmVlZCB0byBtYWtlIHN5bl9idWYgdGhlIGN1cnJlbnQgYnVmZmVyIGZvciBhIG1vbWVudCwgdG8gYmUgYWJsZSB0bworCSAqIHVzZSBmaW5kX3N0YXJ0X2NvbW1lbnQoKS4gKi8KKwljdXJ3aW5fc2F2ZSA9IGN1cndpbjsKKwljdXJ3aW4gPSB3cDsKKwljdXJidWZfc2F2ZSA9IGN1cmJ1ZjsKKwljdXJidWYgPSBzeW5fYnVmOworCisJLyoKKwkgKiBTa2lwIGxpbmVzIHRoYXQgZW5kIGluIGEgYmFja3NsYXNoLgorCSAqLworCWZvciAoIDsgc3RhcnRfbG51bSA+IDE7IC0tc3RhcnRfbG51bSkKKwl7CisJICAgIGxpbmUgPSBtbF9nZXQoc3RhcnRfbG51bSAtIDEpOworCSAgICBpZiAoKmxpbmUgPT0gTlVMIHx8ICoobGluZSArIFNUUkxFTihsaW5lKSAtIDEpICE9ICdcXCcpCisJCWJyZWFrOworCX0KKwljdXJyZW50X2xudW0gPSBzdGFydF9sbnVtOworCisJLyogc2V0IGN1cnNvciB0byBzdGFydCBvZiBzZWFyY2ggKi8KKwljdXJzb3Jfc2F2ZSA9IHdwLT53X2N1cnNvcjsKKwl3cC0+d19jdXJzb3IubG51bSA9IHN0YXJ0X2xudW07CisJd3AtPndfY3Vyc29yLmNvbCA9IDA7CisKKwkvKgorCSAqIElmIHRoZSBsaW5lIGlzIGluc2lkZSBhIGNvbW1lbnQsIG5lZWQgdG8gZmluZCB0aGUgc3ludGF4IGl0ZW0gdGhhdAorCSAqIGRlZmluZXMgdGhlIGNvbW1lbnQuCisJICogUmVzdHJpY3QgdGhlIHNlYXJjaCBmb3IgdGhlIGVuZCBvZiBhIGNvbW1lbnQgdG8gYl9zeW5fc3luY19tYXhsaW5lcy4KKwkgKi8KKwlpZiAoZmluZF9zdGFydF9jb21tZW50KChpbnQpc3luX2J1Zi0+Yl9zeW5fc3luY19tYXhsaW5lcykgIT0gTlVMTCkKKwl7CisJICAgIGZvciAoaWR4ID0gc3luX2J1Zi0+Yl9zeW5fcGF0dGVybnMuZ2FfbGVuOyAtLWlkeCA+PSAwOyApCisJCWlmIChTWU5fSVRFTVMoc3luX2J1ZilbaWR4XS5zcF9zeW4uaWQgPT0gc3luX2J1Zi0+Yl9zeW5fc3luY19pZAorCQkJJiYgU1lOX0lURU1TKHN5bl9idWYpW2lkeF0uc3BfdHlwZSA9PSBTUFRZUEVfU1RBUlQpCisJCXsKKwkJICAgIHZhbGlkYXRlX2N1cnJlbnRfc3RhdGUoKTsKKwkJICAgIGlmIChwdXNoX2N1cnJlbnRfc3RhdGUoaWR4KSA9PSBPSykKKwkJCXVwZGF0ZV9zaV9hdHRyKGN1cnJlbnRfc3RhdGUuZ2FfbGVuIC0gMSk7CisJCSAgICBicmVhazsKKwkJfQorCX0KKworCS8qIHJlc3RvcmUgY3Vyc29yIGFuZCBidWZmZXIgKi8KKwl3cC0+d19jdXJzb3IgPSBjdXJzb3Jfc2F2ZTsKKwljdXJ3aW4gPSBjdXJ3aW5fc2F2ZTsKKwljdXJidWYgPSBjdXJidWZfc2F2ZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDIuIFNlYXJjaCBiYWNrd2FyZHMgZm9yIGdpdmVuIHN5bmMgcGF0dGVybnMuCisgICAgICovCisgICAgZWxzZSBpZiAoc3luX2J1Zi0+Yl9zeW5fc3luY19mbGFncyAmIFNGX01BVENIKQorICAgIHsKKwlpZiAoc3luX2J1Zi0+Yl9zeW5fc3luY19tYXhsaW5lcyAhPSAwCisJCQkJICYmIHN0YXJ0X2xudW0gPiBzeW5fYnVmLT5iX3N5bl9zeW5jX21heGxpbmVzKQorCSAgICBicmVha19sbnVtID0gc3RhcnRfbG51bSAtIHN5bl9idWYtPmJfc3luX3N5bmNfbWF4bGluZXM7CisJZWxzZQorCSAgICBicmVha19sbnVtID0gMDsKKworCWVuZF9sbnVtID0gc3RhcnRfbG51bTsKKwlsbnVtID0gc3RhcnRfbG51bTsKKwl3aGlsZSAoLS1sbnVtID4gYnJlYWtfbG51bSkKKwl7CisJICAgIC8qIFRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWU6IGJyZWFrIHdoZW4gQ1RSTC1DIHByZXNzZWQuICovCisJICAgIGxpbmVfYnJlYWtjaGVjaygpOworCSAgICBpZiAoZ290X2ludCkKKwkgICAgeworCQlpbnZhbGlkYXRlX2N1cnJlbnRfc3RhdGUoKTsKKwkJY3VycmVudF9sbnVtID0gc3RhcnRfbG51bTsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIHJ1biBpbnRvIGEgdmFsaWQgc2F2ZWQgc3RhdGUgc3RhY2sgbm93LiAqLworCSAgICBpZiAobGFzdF92YWxpZCAhPSBOVUxMICYmIGxudW0gPT0gbGFzdF92YWxpZC0+c3N0X2xudW0pCisJICAgIHsKKwkJbG9hZF9jdXJyZW50X3N0YXRlKGxhc3RfdmFsaWQpOworCQlicmVhazsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIENoZWNrIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyB0aGUgbGluZS1jb250aW51YXRpb24gcGF0dGVybi4KKwkgICAgICovCisJICAgIGlmIChsbnVtID4gMSAmJiBzeW5fbWF0Y2hfbGluZWNvbnQobG51bSAtIDEpKQorCQljb250aW51ZTsKKworCSAgICAvKgorCSAgICAgKiBTdGFydCB3aXRoIG5vdGhpbmcgb24gdGhlIHN0YXRlIHN0YWNrCisJICAgICAqLworCSAgICB2YWxpZGF0ZV9jdXJyZW50X3N0YXRlKCk7CisKKwkgICAgZm9yIChjdXJyZW50X2xudW0gPSBsbnVtOyBjdXJyZW50X2xudW0gPCBlbmRfbG51bTsgKytjdXJyZW50X2xudW0pCisJICAgIHsKKwkJc3luX3N0YXJ0X2xpbmUoKTsKKwkJZm9yICg7OykKKwkJeworCQkgICAgaGFkX3N5bmNfcG9pbnQgPSBzeW5fZmluaXNoX2xpbmUoVFJVRSk7CisJCSAgICAvKgorCQkgICAgICogV2hlbiBhIHN5bmMgcG9pbnQgaGFzIGJlZW4gZm91bmQsIHJlbWVtYmVyIHdoZXJlLCBhbmQKKwkJICAgICAqIGNvbnRpbnVlIHRvIGxvb2sgZm9yIGFub3RoZXIgb25lLCBmdXJ0aGVyIG9uIGluIHRoZSBsaW5lLgorCQkgICAgICovCisJCSAgICBpZiAoaGFkX3N5bmNfcG9pbnQgJiYgY3VycmVudF9zdGF0ZS5nYV9sZW4pCisJCSAgICB7CisJCQljdXJfc2kgPSAmQ1VSX1NUQVRFKGN1cnJlbnRfc3RhdGUuZ2FfbGVuIC0gMSk7CisJCQlpZiAoY3VyX3NpLT5zaV9tX2VuZHBvcy5sbnVtID4gc3RhcnRfbG51bSkKKwkJCXsKKwkJCSAgICAvKiBpZ25vcmUgbWF0Y2ggdGhhdCBnb2VzIHRvIGFmdGVyIHdoZXJlIHN0YXJ0ZWQgKi8KKwkJCSAgICBjdXJyZW50X2xudW0gPSBlbmRfbG51bTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCXNwcCA9ICYoU1lOX0lURU1TKHN5bl9idWYpW2N1cl9zaS0+c2lfaWR4XSk7CisJCQlmb3VuZF9mbGFncyA9IHNwcC0+c3BfZmxhZ3M7CisJCQlmb3VuZF9tYXRjaF9pZHggPSBzcHAtPnNwX3N5bmNfaWR4OworCQkJZm91bmRfY3VycmVudF9sbnVtID0gY3VycmVudF9sbnVtOworCQkJZm91bmRfY3VycmVudF9jb2wgPSBjdXJyZW50X2NvbDsKKwkJCWZvdW5kX21fZW5kcG9zID0gY3VyX3NpLT5zaV9tX2VuZHBvczsKKwkJCS8qCisJCQkgKiBDb250aW51ZSBhZnRlciB0aGUgbWF0Y2ggKGJlIGF3YXJlIG9mIGEgemVyby1sZW5ndGgKKwkJCSAqIG1hdGNoKS4KKwkJCSAqLworCQkJaWYgKGZvdW5kX21fZW5kcG9zLmxudW0gPiBjdXJyZW50X2xudW0pCisJCQl7CisJCQkgICAgY3VycmVudF9sbnVtID0gZm91bmRfbV9lbmRwb3MubG51bTsKKwkJCSAgICBjdXJyZW50X2NvbCA9IGZvdW5kX21fZW5kcG9zLmNvbDsKKwkJCSAgICBpZiAoY3VycmVudF9sbnVtID49IGVuZF9sbnVtKQorCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZiAoZm91bmRfbV9lbmRwb3MuY29sID4gY3VycmVudF9jb2wpCisJCQkgICAgY3VycmVudF9jb2wgPSBmb3VuZF9tX2VuZHBvcy5jb2w7CisJCQllbHNlCisJCQkgICAgKytjdXJyZW50X2NvbDsKKworCQkJLyogc3luX2N1cnJlbnRfYXR0cigpIHdpbGwgaGF2ZSBza2lwcGVkIHRoZSBjaGVjayBmb3IKKwkJCSAqIGFuIGl0ZW0gdGhhdCBlbmRzIGhlcmUsIG5lZWQgdG8gZG8gdGhhdCBub3cuICovCisJCQkrK2N1cnJlbnRfY29sOworCQkJY2hlY2tfc3RhdGVfZW5kcygpOworCQkJLS1jdXJyZW50X2NvbDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCWJyZWFrOworCQl9CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBJZiBhIHN5bmMgcG9pbnQgd2FzIGVuY291bnRlcmVkLCBicmVhayBoZXJlLgorCSAgICAgKi8KKwkgICAgaWYgKGZvdW5kX2ZsYWdzKQorCSAgICB7CisJCS8qCisJCSAqIFB1dCB0aGUgaXRlbSB0aGF0IHdhcyBzcGVjaWZpZWQgYnkgdGhlIHN5bmMgcG9pbnQgb24gdGhlCisJCSAqIHN0YXRlIHN0YWNrLiAgSWYgdGhlcmUgd2FzIG5vIGl0ZW0gc3BlY2lmaWVkLCBtYWtlIHRoZQorCQkgKiBzdGF0ZSBzdGFjayBlbXB0eS4KKwkJICovCisJCWNsZWFyX2N1cnJlbnRfc3RhdGUoKTsKKwkJaWYgKGZvdW5kX21hdGNoX2lkeCA+PSAwCisJCQkmJiBwdXNoX2N1cnJlbnRfc3RhdGUoZm91bmRfbWF0Y2hfaWR4KSA9PSBPSykKKwkJICAgIHVwZGF0ZV9zaV9hdHRyKGN1cnJlbnRfc3RhdGUuZ2FfbGVuIC0gMSk7CisKKwkJLyoKKwkJICogV2hlbiB1c2luZyAiZ3JvdXBoZXJlIiwgY29udGludWUgZnJvbSB0aGUgc3luYyBwb2ludAorCQkgKiBtYXRjaCwgdW50aWwgdGhlIGVuZCBvZiB0aGUgbGluZS4gIFBhcnNpbmcgc3RhcnRzIGF0CisJCSAqIHRoZSBuZXh0IGxpbmUuCisJCSAqIEZvciAiZ3JvdXB0aGVyZSIgdGhlIHBhcnNpbmcgc3RhcnRzIGF0IHN0YXJ0X2xudW0uCisJCSAqLworCQlpZiAoZm91bmRfZmxhZ3MgJiBITF9TWU5DX0hFUkUpCisJCXsKKwkJICAgIGlmIChjdXJyZW50X3N0YXRlLmdhX2xlbikKKwkJICAgIHsKKwkJCWN1cl9zaSA9ICZDVVJfU1RBVEUoY3VycmVudF9zdGF0ZS5nYV9sZW4gLSAxKTsKKwkJCWN1cl9zaS0+c2lfaF9zdGFydHBvcy5sbnVtID0gZm91bmRfY3VycmVudF9sbnVtOworCQkJY3VyX3NpLT5zaV9oX3N0YXJ0cG9zLmNvbCA9IGZvdW5kX2N1cnJlbnRfY29sOworCQkJdXBkYXRlX3NpX2VuZChjdXJfc2ksIChpbnQpY3VycmVudF9jb2wsIFRSVUUpOworCQkJY2hlY2tfa2VlcGVuZCgpOworCQkgICAgfQorCQkgICAgY3VycmVudF9jb2wgPSBmb3VuZF9tX2VuZHBvcy5jb2w7CisJCSAgICBjdXJyZW50X2xudW0gPSBmb3VuZF9tX2VuZHBvcy5sbnVtOworCQkgICAgKHZvaWQpc3luX2ZpbmlzaF9saW5lKEZBTFNFKTsKKwkJICAgICsrY3VycmVudF9sbnVtOworCQl9CisJCWVsc2UKKwkJICAgIGN1cnJlbnRfbG51bSA9IHN0YXJ0X2xudW07CisKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICBlbmRfbG51bSA9IGxudW07CisJICAgIGludmFsaWRhdGVfY3VycmVudF9zdGF0ZSgpOworCX0KKworCS8qIFJhbiBpbnRvIHN0YXJ0IG9mIHRoZSBmaWxlIG9yIGV4Y2VlZGVkIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzICovCisJaWYgKGxudW0gPD0gYnJlYWtfbG51bSkKKwl7CisJICAgIGludmFsaWRhdGVfY3VycmVudF9zdGF0ZSgpOworCSAgICBjdXJyZW50X2xudW0gPSBicmVha19sbnVtICsgMTsKKwl9CisgICAgfQorCisgICAgdmFsaWRhdGVfY3VycmVudF9zdGF0ZSgpOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgdGhlIGxpbmUtY29udGludWF0aW9uIHBhdHRlcm4gbWF0Y2hlcyBpbiBsaW5lICJsbnVtIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK3N5bl9tYXRjaF9saW5lY29udChsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgcmVnbW1hdGNoX1QgcmVnbWF0Y2g7CisKKyAgICBpZiAoc3luX2J1Zi0+Yl9zeW5fbGluZWNvbnRfcHJvZyAhPSBOVUxMKQorICAgIHsKKwlyZWdtYXRjaC5ybW1faWMgPSBzeW5fYnVmLT5iX3N5bl9saW5lY29udF9pYzsKKwlyZWdtYXRjaC5yZWdwcm9nID0gc3luX2J1Zi0+Yl9zeW5fbGluZWNvbnRfcHJvZzsKKwlyZXR1cm4gc3luX3JlZ2V4ZWMoJnJlZ21hdGNoLCBsbnVtLCAoY29sbnJfVCkwKTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogUHJlcGFyZSB0aGUgY3VycmVudCBzdGF0ZSBmb3IgdGhlIHN0YXJ0IG9mIGEgbGluZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzeW5fc3RhcnRfbGluZSgpCit7CisgICAgY3VycmVudF9maW5pc2hlZCA9IEZBTFNFOworICAgIGN1cnJlbnRfY29sID0gMDsKKworICAgIC8qCisgICAgICogTmVlZCB0byB1cGRhdGUgdGhlIGVuZCBvZiBhIHN0YXJ0L3NraXAvZW5kIHRoYXQgY29udGludWVzIGZyb20gdGhlCisgICAgICogcHJldmlvdXMgbGluZSBhbmQgcmVnaW9ucyB0aGF0IGhhdmUgImtlZXBlbmQiLgorICAgICAqLworICAgIGlmIChjdXJyZW50X3N0YXRlLmdhX2xlbiA+IDApCisJc3luX3VwZGF0ZV9lbmRzKFRSVUUpOworCisgICAgbmV4dF9tYXRjaF9pZHggPSAtMTsKKyAgICArK2N1cnJlbnRfbGluZV9pZDsKK30KKworLyoKKyAqIENoZWNrIGZvciBpdGVtcyBpbiB0aGUgc3RhY2sgdGhhdCBuZWVkIHRoZWlyIGVuZCB1cGRhdGVkLgorICogV2hlbiAic3RhcnRvZmxpbmUiIGlzIFRSVUUgdGhlIGxhc3QgaXRlbSBpcyBhbHdheXMgdXBkYXRlZC4KKyAqIFdoZW4gInN0YXJ0b2ZsaW5lIiBpcyBGQUxTRSB0aGUgaXRlbSB3aXRoICJrZWVwZW5kIiBpcyBmb3JjZWZ1bGx5IHVwZGF0ZWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX3VwZGF0ZV9lbmRzKHN0YXJ0b2ZsaW5lKQorICAgIGludAkJc3RhcnRvZmxpbmU7Cit7CisgICAgc3RhdGVpdGVtX1QJKmN1cl9zaTsKKyAgICBpbnQJCWk7CisKKyAgICBpZiAoc3RhcnRvZmxpbmUpCisgICAgeworCS8qIENoZWNrIGZvciBhIG1hdGNoIGNhcnJpZWQgb3ZlciBmcm9tIGEgcHJldmlvdXMgbGluZSB3aXRoIGEKKwkgKiBjb250YWluZWQgcmVnaW9uLiAgVGhlIG1hdGNoIGVuZHMgYXMgc29vbiBhcyB0aGUgcmVnaW9uIGVuZHMuICovCisJZm9yIChpID0gMDsgaSA8IGN1cnJlbnRfc3RhdGUuZ2FfbGVuOyArK2kpCisJeworCSAgICBjdXJfc2kgPSAmQ1VSX1NUQVRFKGkpOworCSAgICBpZiAoY3VyX3NpLT5zaV9pZHggPj0gMAorCQkgICAgJiYgKFNZTl9JVEVNUyhzeW5fYnVmKVtjdXJfc2ktPnNpX2lkeF0pLnNwX3R5cGUKKwkJCQkJCQkgICAgICAgPT0gU1BUWVBFX01BVENICisJCSAgICAmJiBjdXJfc2ktPnNpX21fZW5kcG9zLmxudW0gPCBjdXJyZW50X2xudW0pCisJICAgIHsKKwkJY3VyX3NpLT5zaV9mbGFncyB8PSBITF9NQVRDSENPTlQ7CisJCWN1cl9zaS0+c2lfbV9lbmRwb3MubG51bSA9IDA7CisJCWN1cl9zaS0+c2lfbV9lbmRwb3MuY29sID0gMDsKKwkJY3VyX3NpLT5zaV9oX2VuZHBvcyA9IGN1cl9zaS0+c2lfbV9lbmRwb3M7CisJCWN1cl9zaS0+c2lfZW5kcyA9IFRSVUU7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOZWVkIHRvIHVwZGF0ZSB0aGUgZW5kIG9mIGEgc3RhcnQvc2tpcC9lbmQgdGhhdCBjb250aW51ZXMgZnJvbSB0aGUKKyAgICAgKiBwcmV2aW91cyBsaW5lLiAgQW5kIHJlZ2lvbnMgdGhhdCBoYXZlICJrZWVwZW5kIiwgYmVjYXVzZSB0aGV5IG1heQorICAgICAqIGluZmx1ZW5jZSBjb250YWluZWQgaXRlbXMuCisgICAgICogVGhlbiBjaGVjayBmb3IgaXRlbXMgZW5kaW5nIGluIGNvbHVtbiAwLgorICAgICAqLworICAgIGkgPSBjdXJyZW50X3N0YXRlLmdhX2xlbiAtIDE7CisgICAgaWYgKGtlZXBlbmRfbGV2ZWwgPj0gMCkKKwlmb3IgKCA7IGkgPiBrZWVwZW5kX2xldmVsOyAtLWkpCisJICAgIGlmIChDVVJfU1RBVEUoaSkuc2lfZmxhZ3MgJiBITF9FWFRFTkQpCisJCWJyZWFrOworICAgIGZvciAoIDsgaSA8IGN1cnJlbnRfc3RhdGUuZ2FfbGVuOyArK2kpCisgICAgeworCWN1cl9zaSA9ICZDVVJfU1RBVEUoaSk7CisJaWYgKChjdXJfc2ktPnNpX2ZsYWdzICYgSExfS0VFUEVORCkKKwkJCSAgICB8fCAoaSA9PSBjdXJyZW50X3N0YXRlLmdhX2xlbiAtIDEgJiYgc3RhcnRvZmxpbmUpKQorCXsKKwkgICAgY3VyX3NpLT5zaV9oX3N0YXJ0cG9zLmNvbCA9IDA7CS8qIHN0YXJ0IGhpZ2hsLiBpbiBjb2wgMCAqLworCSAgICBjdXJfc2ktPnNpX2hfc3RhcnRwb3MubG51bSA9IGN1cnJlbnRfbG51bTsKKworCSAgICBpZiAoIShjdXJfc2ktPnNpX2ZsYWdzICYgSExfTUFUQ0hDT05UKSkKKwkJdXBkYXRlX3NpX2VuZChjdXJfc2ksIChpbnQpY3VycmVudF9jb2wsICFzdGFydG9mbGluZSk7CisJfQorICAgIH0KKyAgICBjaGVja19rZWVwZW5kKCk7CisgICAgY2hlY2tfc3RhdGVfZW5kcygpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSGFuZGxpbmcgb2YgdGhlIHN0YXRlIHN0YWNrIGNhY2hlLgorICovCisKKy8qCisgKiBFWFBMQU5BVElPTiBPRiBUSEUgU1lOVEFYIFNUQVRFIFNUQUNLIENBQ0hFCisgKgorICogVG8gc3BlZWQgdXAgc3ludGF4IGhpZ2hsaWdodGluZywgdGhlIHN0YXRlIHN0YWNrIGZvciB0aGUgc3RhcnQgb2Ygc29tZQorICogbGluZXMgaXMgY2FjaGVkLiAgVGhlc2UgZW50cmllcyBjYW4gYmUgdXNlZCB0byBzdGFydCBwYXJzaW5nIGF0IHRoYXQgcG9pbnQuCisgKgorICogVGhlIHN0YWNrIGlzIGtlcHQgaW4gYl9zc3RfYXJyYXlbXSBmb3IgZWFjaCBidWZmZXIuICBUaGVyZSBpcyBhIGxpc3Qgb2YKKyAqIHZhbGlkIGVudHJpZXMuICBiX3NzdF9maXJzdCBwb2ludHMgdG8gdGhlIGZpcnN0IG9uZSwgdGhlbiBmb2xsb3cgc3N0X25leHQuCisgKiBUaGUgZW50cmllcyBhcmUgc29ydGVkIG9uIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0IGVudHJ5IGlzIG9mdGVuIGZvciBsaW5lIDIKKyAqIChsaW5lIDEgYWx3YXlzIHN0YXJ0cyB3aXRoIGFuIGVtcHR5IHN0YWNrKS4KKyAqIFRoZXJlIGlzIGFsc28gYSBsaXN0IGZvciBmcmVlIGVudHJpZXMuICBUaGlzIGNvbnN0cnVjdGlvbiBpcyB1c2VkIHRvIGF2b2lkCisgKiBoYXZpbmcgdG8gYWxsb2NhdGUgYW5kIGZyZWUgbWVtb3J5IGJsb2NrcyB0b28gb2Z0ZW4uCisgKgorICogV2hlbiBtYWtpbmcgY2hhbmdlcyB0byB0aGUgYnVmZmVyLCB0aGlzIGlzIGxvZ2dlZCBpbiBiX21vZF8qLiAgV2hlbiBjYWxsaW5nCisgKiB1cGRhdGVfc2NyZWVuKCkgdG8gdXBkYXRlIHRoZSBkaXNwbGF5LCBpdCB3aWxsIGNhbGwKKyAqIHN5bl9zdGFja19hcHBseV9jaGFuZ2VzKCkgZm9yIGVhY2ggZGlzcGxheWVkIGJ1ZmZlciB0byBhZGp1c3QgdGhlIGNhY2hlZAorICogZW50cmllcy4gIFRoZSBlbnRyaWVzIHdoaWNoIGFyZSBpbnNpZGUgdGhlIGNoYW5nZWQgYXJlYSBhcmUgcmVtb3ZlZCwKKyAqIGJlY2F1c2UgdGhleSBtdXN0IGJlIHJlY29tcHV0ZWQuICBFbnRyaWVzIGJlbG93IHRoZSBjaGFuZ2VkIGhhdmUgdGhlaXIgbGluZQorICogbnVtYmVyIGFkanVzdGVkIGZvciBkZWxldGVkL2luc2VydGVkIGxpbmVzLCBhbmQgaGF2ZSB0aGVpciBzc3RfY2hhbmdlX2xudW0KKyAqIHNldCB0byBpbmRpY2F0ZSB0aGF0IGEgY2hlY2sgbXVzdCBiZSBtYWRlIGlmIHRoZSBjaGFuZ2VkIGxpbmVzIHdvdWxkIGNoYW5nZQorICogdGhlIGNhY2hlZCBlbnRyeS4KKyAqCisgKiBXaGVuIGxhdGVyIGRpc3BsYXlpbmcgbGluZXMsIGFuIGVudHJ5IGlzIHN0b3JlZCBmb3IgZWFjaCBsaW5lLiAgRGlzcGxheWVkCisgKiBsaW5lcyBhcmUgbGlrZWx5IHRvIGJlIGRpc3BsYXllZCBhZ2FpbiwgaW4gd2hpY2ggY2FzZSB0aGUgc3RhdGUgYXQgdGhlCisgKiBzdGFydCBvZiB0aGUgbGluZSBpcyBuZWVkZWQuCisgKiBGb3Igbm90IGRpc3BsYXllZCBsaW5lcywgYW4gZW50cnkgaXMgc3RvcmVkIGZvciBldmVyeSBzbyBtYW55IGxpbmVzLiAgVGhlc2UKKyAqIGVudHJpZXMgd2lsbCBiZSB1c2VkIGUuZy4sIHdoZW4gc2Nyb2xsaW5nIGJhY2t3YXJkcy4gIFRoZSBkaXN0YW5jZSBiZXR3ZWVuCisgKiBlbnRyaWVzIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgYnVmZmVyLiAgRm9yIHNtYWxsIGJ1ZmZlcnMKKyAqIHRoZSBkaXN0YW5jZSBpcyBmaXhlZCBhdCBTU1RfRElTVCwgZm9yIGxhcmdlIGJ1ZmZlcnMgdGhlcmUgaXMgYSBmaXhlZAorICogbnVtYmVyIG9mIGVudHJpZXMgU1NUX01BWF9FTlRSSUVTLCBhbmQgdGhlIGRpc3RhbmNlIGlzIGNvbXB1dGVkLgorICovCisKKy8qCisgKiBGcmVlIGJfc3N0X2FycmF5W10gZm9yIGJ1ZmZlciAiYnVmIi4KKyAqIFVzZWQgd2hlbiBzeW50YXggaXRlbXMgY2hhbmdlZCB0byBmb3JjZSByZXN5bmNpbmcgZXZlcnl3aGVyZS4KKyAqLworICAgIHZvaWQKK3N5bl9zdGFja19mcmVlX2FsbChidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBzeW5zdGF0ZV9UCSpwOworICAgIHdpbl9UCSp3cDsKKworICAgIGlmIChidWYtPmJfc3N0X2FycmF5ICE9IE5VTEwpCisgICAgeworCWZvciAocCA9IGJ1Zi0+Yl9zc3RfZmlyc3Q7IHAgIT0gTlVMTDsgcCA9IHAtPnNzdF9uZXh0KQorCSAgICBjbGVhcl9zeW5fc3RhdGUocCk7CisJdmltX2ZyZWUoYnVmLT5iX3NzdF9hcnJheSk7CisJYnVmLT5iX3NzdF9hcnJheSA9IE5VTEw7CisJYnVmLT5iX3NzdF9sZW4gPSAwOworICAgIH0KKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICAvKiBXaGVuIHVzaW5nICJzeW50YXgiIGZvbGQgbWV0aG9kLCBtdXN0IHVwZGF0ZSBhbGwgZm9sZHMuICovCisgICAgRk9SX0FMTF9XSU5ET1dTKHdwKQorICAgIHsKKwlpZiAod3AtPndfYnVmZmVyID09IGJ1ZiAmJiBmb2xkbWV0aG9kSXNTeW50YXgod3ApKQorCSAgICBmb2xkVXBkYXRlQWxsKHdwKTsKKyAgICB9CisjZW5kaWYKK30KKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzeW50YXggc3RhdGUgc3RhY2sgZm9yIHN5bl9idWYgd2hlbiBuZWVkZWQuCisgKiBJZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYl9zc3RfYXJyYXlbXSBpcyBtdWNoIHRvbyBiaWcgb3IgYSBiaXQgdG9vCisgKiBzbWFsbCwgcmVhbGxvY2F0ZSBpdC4KKyAqIEFsc28gdXNlZCB0byBhbGxvY2F0ZSBiX3NzdF9hcnJheVtdIGZvciB0aGUgZmlyc3QgdGltZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzeW5fc3RhY2tfYWxsb2MoKQoreworICAgIGxvbmcJbGVuOworICAgIHN5bnN0YXRlX1QJKnRvLCAqZnJvbTsKKyAgICBzeW5zdGF0ZV9UCSpzc3RwOworCisgICAgbGVuID0gc3luX2J1Zi0+Yl9tbC5tbF9saW5lX2NvdW50IC8gU1NUX0RJU1QgKyBSb3dzICogMjsKKyAgICBpZiAobGVuIDwgU1NUX01JTl9FTlRSSUVTKQorCWxlbiA9IFNTVF9NSU5fRU5UUklFUzsKKyAgICBlbHNlIGlmIChsZW4gPiBTU1RfTUFYX0VOVFJJRVMpCisJbGVuID0gU1NUX01BWF9FTlRSSUVTOworICAgIGlmIChzeW5fYnVmLT5iX3NzdF9sZW4gPiBsZW4gKiAyIHx8IHN5bl9idWYtPmJfc3N0X2xlbiA8IGxlbikKKyAgICB7CisJLyogQWxsb2NhdGUgNTAlIHRvbyBtdWNoLCB0byBhdm9pZCByZWFsbG9jYXRpbmcgdG9vIG9mdGVuLiAqLworCWxlbiA9IHN5bl9idWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwlsZW4gPSAobGVuICsgbGVuIC8gMikgLyBTU1RfRElTVCArIFJvd3MgKiAyOworCWlmIChsZW4gPCBTU1RfTUlOX0VOVFJJRVMpCisJICAgIGxlbiA9IFNTVF9NSU5fRU5UUklFUzsKKwllbHNlIGlmIChsZW4gPiBTU1RfTUFYX0VOVFJJRVMpCisJICAgIGxlbiA9IFNTVF9NQVhfRU5UUklFUzsKKworCWlmIChzeW5fYnVmLT5iX3NzdF9hcnJheSAhPSBOVUxMKQorCXsKKwkgICAgLyogV2hlbiBzaHJpbmtpbmcgdGhlIGFycmF5LCBjbGVhbnVwIHRoZSBleGlzdGluZyBzdGFjay4KKwkgICAgICogTWFrZSBzdXJlIHRoYXQgYWxsIHZhbGlkIGVudHJpZXMgZml0IGluIHRoZSBuZXcgYXJyYXkuICovCisJICAgIHdoaWxlIChzeW5fYnVmLT5iX3NzdF9sZW4gLSBzeW5fYnVmLT5iX3NzdF9mcmVlY291bnQgKyAyID4gbGVuCisJCSAgICAmJiBzeW5fc3RhY2tfY2xlYW51cCgpKQorCQk7CisJICAgIGlmIChsZW4gPCBzeW5fYnVmLT5iX3NzdF9sZW4gLSBzeW5fYnVmLT5iX3NzdF9mcmVlY291bnQgKyAyKQorCQlsZW4gPSBzeW5fYnVmLT5iX3NzdF9sZW4gLSBzeW5fYnVmLT5iX3NzdF9mcmVlY291bnQgKyAyOworCX0KKworCXNzdHAgPSAoc3luc3RhdGVfVCAqKWFsbG9jX2NsZWFyKCh1bnNpZ25lZCkobGVuICogc2l6ZW9mKHN5bnN0YXRlX1QpKSk7CisJaWYgKHNzdHAgPT0gTlVMTCkJLyogb3V0IG9mIG1lbW9yeSEgKi8KKwkgICAgcmV0dXJuOworCisJdG8gPSBzc3RwIC0gMTsKKwlpZiAoc3luX2J1Zi0+Yl9zc3RfYXJyYXkgIT0gTlVMTCkKKwl7CisJICAgIC8qIE1vdmUgdGhlIHN0YXRlcyBmcm9tIHRoZSBvbGQgYXJyYXkgdG8gdGhlIG5ldyBvbmUuICovCisJICAgIGZvciAoZnJvbSA9IHN5bl9idWYtPmJfc3N0X2ZpcnN0OyBmcm9tICE9IE5VTEw7CisJCQkJCQkJZnJvbSA9IGZyb20tPnNzdF9uZXh0KQorCSAgICB7CisJCSsrdG87CisJCSp0byA9ICpmcm9tOworCQl0by0+c3N0X25leHQgPSB0byArIDE7CisJICAgIH0KKwl9CisJaWYgKHRvICE9IHNzdHAgLSAxKQorCXsKKwkgICAgdG8tPnNzdF9uZXh0ID0gTlVMTDsKKwkgICAgc3luX2J1Zi0+Yl9zc3RfZmlyc3QgPSBzc3RwOworCSAgICBzeW5fYnVmLT5iX3NzdF9mcmVlY291bnQgPSBsZW4gLSAoaW50KSh0byAtIHNzdHApIC0gMTsKKwl9CisJZWxzZQorCXsKKwkgICAgc3luX2J1Zi0+Yl9zc3RfZmlyc3QgPSBOVUxMOworCSAgICBzeW5fYnVmLT5iX3NzdF9mcmVlY291bnQgPSBsZW47CisJfQorCisJLyogQ3JlYXRlIHRoZSBsaXN0IG9mIGZyZWUgZW50cmllcy4gKi8KKwlzeW5fYnVmLT5iX3NzdF9maXJzdGZyZWUgPSB0byArIDE7CisJd2hpbGUgKCsrdG8gPCBzc3RwICsgbGVuKQorCSAgICB0by0+c3N0X25leHQgPSB0byArIDE7CisJKHNzdHAgKyBsZW4gLSAxKS0+c3N0X25leHQgPSBOVUxMOworCisJdmltX2ZyZWUoc3luX2J1Zi0+Yl9zc3RfYXJyYXkpOworCXN5bl9idWYtPmJfc3N0X2FycmF5ID0gc3N0cDsKKwlzeW5fYnVmLT5iX3NzdF9sZW4gPSBsZW47CisgICAgfQorfQorCisvKgorICogQ2hlY2sgZm9yIGNoYW5nZXMgaW4gYSBidWZmZXIgdG8gYWZmZWN0IHN0b3JlZCBzeW50YXggc3RhdGVzLiAgVXNlcyB0aGUKKyAqIGJfbW9kXyogZmllbGRzLgorICogQ2FsbGVkIGZyb20gdXBkYXRlX3NjcmVlbigpLCBiZWZvcmUgc2NyZWVuIGlzIGJlaW5nIHVwZGF0ZWQsIG9uY2UgZm9yIGVhY2gKKyAqIGRpc3BsYXllZCBidWZmZXIuCisgKi8KKyAgICB2b2lkCitzeW5fc3RhY2tfYXBwbHlfY2hhbmdlcyhidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICBzeW5zdGF0ZV9UCSpwLCAqcHJldiwgKm5wOworICAgIGxpbmVucl9UCW47CisKKyAgICBpZiAoYnVmLT5iX3NzdF9hcnJheSA9PSBOVUxMKQkvKiBub3RoaW5nIHRvIGRvICovCisJcmV0dXJuOworCisgICAgcHJldiA9IE5VTEw7CisgICAgZm9yIChwID0gYnVmLT5iX3NzdF9maXJzdDsgcCAhPSBOVUxMOyApCisgICAgeworCWlmIChwLT5zc3RfbG51bSArIHN5bl9idWYtPmJfc3luX3N5bmNfbGluZWJyZWFrcyA+IGJ1Zi0+Yl9tb2RfdG9wKQorCXsKKwkgICAgbiA9IHAtPnNzdF9sbnVtICsgYnVmLT5iX21vZF94bGluZXM7CisJICAgIGlmIChuIDw9IGJ1Zi0+Yl9tb2RfYm90KQorCSAgICB7CisJCS8qIHRoaXMgc3RhdGUgaXMgaW5zaWRlIHRoZSBjaGFuZ2VkIGFyZWEsIHJlbW92ZSBpdCAqLworCQlucCA9IHAtPnNzdF9uZXh0OworCQlpZiAocHJldiA9PSBOVUxMKQorCQkgICAgYnVmLT5iX3NzdF9maXJzdCA9IG5wOworCQllbHNlCisJCSAgICBwcmV2LT5zc3RfbmV4dCA9IG5wOworCQlzeW5fc3RhY2tfZnJlZV9lbnRyeShidWYsIHApOworCQlwID0gbnA7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIC8qIFRoaXMgc3RhdGUgaXMgYmVsb3cgdGhlIGNoYW5nZWQgYXJlYS4gIFJlbWVtYmVyIHRoZSBsaW5lCisJICAgICAqIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkIGJlZm9yZSB0aGlzIGVudHJ5IGNhbiBiZSBtYWRlIHZhbGlkCisJICAgICAqIGFnYWluLiAqLworCSAgICBpZiAocC0+c3N0X2NoYW5nZV9sbnVtICE9IDAgJiYgcC0+c3N0X2NoYW5nZV9sbnVtID4gYnVmLT5iX21vZF90b3ApCisJICAgIHsKKwkJaWYgKHAtPnNzdF9jaGFuZ2VfbG51bSArIGJ1Zi0+Yl9tb2RfeGxpbmVzID4gYnVmLT5iX21vZF90b3ApCisJCSAgICBwLT5zc3RfY2hhbmdlX2xudW0gKz0gYnVmLT5iX21vZF94bGluZXM7CisJCWVsc2UKKwkJICAgIHAtPnNzdF9jaGFuZ2VfbG51bSA9IGJ1Zi0+Yl9tb2RfdG9wOworCSAgICB9CisJICAgIGlmIChwLT5zc3RfY2hhbmdlX2xudW0gPT0gMAorCQkgICAgfHwgcC0+c3N0X2NoYW5nZV9sbnVtIDwgYnVmLT5iX21vZF9ib3QpCisJCXAtPnNzdF9jaGFuZ2VfbG51bSA9IGJ1Zi0+Yl9tb2RfYm90OworCisJICAgIHAtPnNzdF9sbnVtID0gbjsKKwl9CisJcHJldiA9IHA7CisJcCA9IHAtPnNzdF9uZXh0OworICAgIH0KK30KKworLyoKKyAqIFJlZHVjZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHN0YXRlIHN0YWNrIGZvciBzeW5fYnVmLgorICogUmV0dXJucyBUUlVFIGlmIGF0IGxlYXN0IG9uZSBlbnRyeSB3YXMgZnJlZWQuCisgKi8KKyAgICBzdGF0aWMgaW50CitzeW5fc3RhY2tfY2xlYW51cCgpCit7CisgICAgc3luc3RhdGVfVAkqcCwgKnByZXY7CisgICAgZGlzcHRpY2tfVAl0aWNrOworICAgIGludAkJYWJvdmU7CisgICAgaW50CQlkaXN0OworICAgIGludAkJcmV0dmFsID0gRkFMU0U7CisKKyAgICBpZiAoc3luX2J1Zi0+Yl9zc3RfYXJyYXkgPT0gTlVMTCB8fCBzeW5fYnVmLT5iX3NzdF9maXJzdCA9PSBOVUxMKQorCXJldHVybiByZXR2YWw7CisKKyAgICAvKiBDb21wdXRlIG5vcm1hbCBkaXN0YW5jZSBiZXR3ZWVuIG5vbi1kaXNwbGF5ZWQgZW50cmllcy4gKi8KKyAgICBkaXN0ID0gc3luX2J1Zi0+Yl9tbC5tbF9saW5lX2NvdW50IC8gKHN5bl9idWYtPmJfc3N0X2xlbiAtIFJvd3MpICsgMTsKKworICAgIC8qCisgICAgICogR28gdGhyb3VnaHQgdGhlIGxpc3QgdG8gZmluZCB0aGUgInRpY2siIGZvciB0aGUgb2xkZXN0IGVudHJ5IHRoYXQgY2FuCisgICAgICogYmUgcmVtb3ZlZC4gIFNldCAiYWJvdmUiIHdoZW4gdGhlICJ0aWNrIiBmb3IgdGhlIG9sZGVzdCBlbnRyeSBpcyBhYm92ZQorICAgICAqICJiX3NzdF9sYXN0dGljayIgKHRoZSBkaXNwbGF5IHRpY2sgd3JhcHMgYXJvdW5kKS4KKyAgICAgKi8KKyAgICB0aWNrID0gc3luX2J1Zi0+Yl9zc3RfbGFzdHRpY2s7CisgICAgYWJvdmUgPSBGQUxTRTsKKyAgICBwcmV2ID0gc3luX2J1Zi0+Yl9zc3RfZmlyc3Q7CisgICAgZm9yIChwID0gcHJldi0+c3N0X25leHQ7IHAgIT0gTlVMTDsgcHJldiA9IHAsIHAgPSBwLT5zc3RfbmV4dCkKKyAgICB7CisJaWYgKHByZXYtPnNzdF9sbnVtICsgZGlzdCA+IHAtPnNzdF9sbnVtKQorCXsKKwkgICAgaWYgKHAtPnNzdF90aWNrID4gc3luX2J1Zi0+Yl9zc3RfbGFzdHRpY2spCisJICAgIHsKKwkJaWYgKCFhYm92ZSB8fCBwLT5zc3RfdGljayA8IHRpY2spCisJCSAgICB0aWNrID0gcC0+c3N0X3RpY2s7CisJCWFib3ZlID0gVFJVRTsKKwkgICAgfQorCSAgICBlbHNlIGlmICghYWJvdmUgJiYgcC0+c3N0X3RpY2sgPCB0aWNrKQorCQl0aWNrID0gcC0+c3N0X3RpY2s7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogR28gdGhyb3VnaCB0aGUgbGlzdCB0byBtYWtlIHRoZSBlbnRyaWVzIGZvciB0aGUgb2xkZXN0IHRpY2sgYXQgYW4KKyAgICAgKiBpbnRlcnZhbCBvZiBzZXZlcmFsIGxpbmVzLgorICAgICAqLworICAgIHByZXYgPSBzeW5fYnVmLT5iX3NzdF9maXJzdDsKKyAgICBmb3IgKHAgPSBwcmV2LT5zc3RfbmV4dDsgcCAhPSBOVUxMOyBwcmV2ID0gcCwgcCA9IHAtPnNzdF9uZXh0KQorICAgIHsKKwlpZiAocC0+c3N0X3RpY2sgPT0gdGljayAmJiBwcmV2LT5zc3RfbG51bSArIGRpc3QgPiBwLT5zc3RfbG51bSkKKwl7CisJICAgIC8qIE1vdmUgdGhpcyBlbnRyeSBmcm9tIHVzZWQgbGlzdCB0byBmcmVlIGxpc3QgKi8KKwkgICAgcHJldi0+c3N0X25leHQgPSBwLT5zc3RfbmV4dDsKKwkgICAgc3luX3N0YWNrX2ZyZWVfZW50cnkoc3luX2J1ZiwgcCk7CisJICAgIHAgPSBwcmV2OworCSAgICByZXR2YWwgPSBUUlVFOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEZyZWUgdGhlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIGEgc3luX3N0YXRlIGl0ZW0uCisgKiBNb3ZlIHRoZSBlbnRyeSBpbnRvIHRoZSBmcmVlIGxpc3QuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX3N0YWNrX2ZyZWVfZW50cnkoYnVmLCBwKQorICAgIGJ1Zl9UCSpidWY7CisgICAgc3luc3RhdGVfVAkqcDsKK3sKKyAgICBjbGVhcl9zeW5fc3RhdGUocCk7CisgICAgcC0+c3N0X25leHQgPSBidWYtPmJfc3N0X2ZpcnN0ZnJlZTsKKyAgICBidWYtPmJfc3N0X2ZpcnN0ZnJlZSA9IHA7CisgICAgKytidWYtPmJfc3N0X2ZyZWVjb3VudDsKK30KKworLyoKKyAqIEZpbmQgYW4gZW50cnkgaW4gdGhlIGxpc3Qgb2Ygc3RhdGUgc3RhY2tzIGF0IG9yIGJlZm9yZSAibG51bSIuCisgKiBSZXR1cm5zIE5VTEwgd2hlbiB0aGVyZSBpcyBubyBlbnRyeSBvciB0aGUgZmlyc3QgZW50cnkgaXMgYWZ0ZXIgImxudW0iLgorICovCisgICAgc3RhdGljIHN5bnN0YXRlX1QgKgorc3luX3N0YWNrX2ZpbmRfZW50cnkobG51bSkKKyAgICBsaW5lbnJfVAlsbnVtOworeworICAgIHN5bnN0YXRlX1QJKnAsICpwcmV2OworCisgICAgcHJldiA9IE5VTEw7CisgICAgZm9yIChwID0gc3luX2J1Zi0+Yl9zc3RfZmlyc3Q7IHAgIT0gTlVMTDsgcHJldiA9IHAsIHAgPSBwLT5zc3RfbmV4dCkKKyAgICB7CisJaWYgKHAtPnNzdF9sbnVtID09IGxudW0pCisJICAgIHJldHVybiBwOworCWlmIChwLT5zc3RfbG51bSA+IGxudW0pCisJICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcHJldjsKK30KKworLyoKKyAqIFRyeSBzYXZpbmcgdGhlIGN1cnJlbnQgc3RhdGUgaW4gYl9zc3RfYXJyYXlbXS4KKyAqIFRoZSBjdXJyZW50IHN0YXRlIG11c3QgYmUgdmFsaWQgZm9yIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudF9sbnVtIGxpbmUhCisgKi8KKyAgICBzdGF0aWMgc3luc3RhdGVfVCAqCitzdG9yZV9jdXJyZW50X3N0YXRlKHNwKQorICAgIHN5bnN0YXRlX1QJKnNwOwkvKiBhdCBvciBiZWZvcmUgd2hlcmUgc3RhdGUgaXMgdG8gYmUgc2F2ZWQgb3IKKwkJCQkgICBOVUxMICovCit7CisgICAgaW50CQlpOworICAgIHN5bnN0YXRlX1QJKnA7CisgICAgYnVmc3RhdGVfVAkqYnA7CisgICAgc3RhdGVpdGVtX1QJKmN1cl9zaTsKKworICAgIGlmIChzcCA9PSBOVUxMKQorCXNwID0gc3luX3N0YWNrX2ZpbmRfZW50cnkoY3VycmVudF9sbnVtKTsKKworICAgIC8qCisgICAgICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgY29udGFpbnMgYSBzdGFydCBvciBlbmQgcGF0dGVybiB0aGF0IGNvbnRpbnVlcworICAgICAqIGZyb20gdGhlIHByZXZpb3VzIGxpbmUsIHdlIGNhbid0IHVzZSBpdC4gIERvbid0IHN0b3JlIGl0IHRoZW4uCisgICAgICovCisgICAgZm9yIChpID0gY3VycmVudF9zdGF0ZS5nYV9sZW4gLSAxOyBpID49IDA7IC0taSkKKyAgICB7CisJY3VyX3NpID0gJkNVUl9TVEFURShpKTsKKwlpZiAoY3VyX3NpLT5zaV9oX3N0YXJ0cG9zLmxudW0gPj0gY3VycmVudF9sbnVtCisJCXx8IGN1cl9zaS0+c2lfbV9lbmRwb3MubG51bSA+PSBjdXJyZW50X2xudW0KKwkJfHwgY3VyX3NpLT5zaV9oX2VuZHBvcy5sbnVtID49IGN1cnJlbnRfbG51bQorCQl8fCAoY3VyX3NpLT5zaV9lbmRfaWR4CisJCSAgICAmJiBjdXJfc2ktPnNpX2VvZV9wb3MubG51bSA+PSBjdXJyZW50X2xudW0pKQorCSAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGkgPj0gMCkKKyAgICB7CisJaWYgKHNwICE9IE5VTEwpCisJeworCSAgICAvKiBmaW5kICJzcCIgaW4gdGhlIGxpc3QgYW5kIHJlbW92ZSBpdCAqLworCSAgICBpZiAoc3luX2J1Zi0+Yl9zc3RfZmlyc3QgPT0gc3ApCisJCS8qIGl0J3MgdGhlIGZpcnN0IGVudHJ5ICovCisJCXN5bl9idWYtPmJfc3N0X2ZpcnN0ID0gc3AtPnNzdF9uZXh0OworCSAgICBlbHNlCisJICAgIHsKKwkJLyogZmluZCB0aGUgZW50cnkganVzdCBiZWZvcmUgdGhpcyBvbmUgdG8gYWRqdXN0IHNzdF9uZXh0ICovCisJCWZvciAocCA9IHN5bl9idWYtPmJfc3N0X2ZpcnN0OyBwICE9IE5VTEw7IHAgPSBwLT5zc3RfbmV4dCkKKwkJICAgIGlmIChwLT5zc3RfbmV4dCA9PSBzcCkKKwkJCWJyZWFrOworCQlwLT5zc3RfbmV4dCA9IHNwLT5zc3RfbmV4dDsKKwkgICAgfQorCSAgICBzeW5fc3RhY2tfZnJlZV9lbnRyeShzeW5fYnVmLCBzcCk7CisJICAgIHNwID0gTlVMTDsKKwl9CisgICAgfQorICAgIGVsc2UgaWYgKHNwID09IE5VTEwgfHwgc3AtPnNzdF9sbnVtICE9IGN1cnJlbnRfbG51bSkKKyAgICB7CisJLyoKKwkgKiBBZGQgYSBuZXcgZW50cnkKKwkgKi8KKwkvKiBJZiBubyBmcmVlIGl0ZW1zLCBjbGVhbnVwIHRoZSBhcnJheSBmaXJzdC4gKi8KKwlpZiAoc3luX2J1Zi0+Yl9zc3RfZnJlZWNvdW50ID09IDApCisJeworCSAgICAodm9pZClzeW5fc3RhY2tfY2xlYW51cCgpOworCSAgICAvKiAic3AiIG1heSBoYXZlIGJlZW4gbW92ZWQgdG8gdGhlIGZyZWVsaXN0IG5vdyAqLworCSAgICBzcCA9IHN5bl9zdGFja19maW5kX2VudHJ5KGN1cnJlbnRfbG51bSk7CisJfQorCS8qIFN0aWxsIG5vIGZyZWUgaXRlbXM/ICBNdXN0IGJlIGEgc3RyYW5nZSBwcm9ibGVtLi4uICovCisJaWYgKHN5bl9idWYtPmJfc3N0X2ZyZWVjb3VudCA9PSAwKQorCSAgICBzcCA9IE5VTEw7CisJZWxzZQorCXsKKwkgICAgLyogVGFrZSB0aGUgZmlyc3QgaXRlbSBmcm9tIHRoZSBmcmVlIGxpc3QgYW5kIHB1dCBpdCBpbiB0aGUgdXNlZAorCSAgICAgKiBsaXN0LCBhZnRlciAqc3AgKi8KKwkgICAgcCA9IHN5bl9idWYtPmJfc3N0X2ZpcnN0ZnJlZTsKKwkgICAgc3luX2J1Zi0+Yl9zc3RfZmlyc3RmcmVlID0gcC0+c3N0X25leHQ7CisJICAgIC0tc3luX2J1Zi0+Yl9zc3RfZnJlZWNvdW50OworCSAgICBpZiAoc3AgPT0gTlVMTCkKKwkgICAgeworCQkvKiBJbnNlcnQgaW4gZnJvbnQgb2YgdGhlIGxpc3QgKi8KKwkJcC0+c3N0X25leHQgPSBzeW5fYnVmLT5iX3NzdF9maXJzdDsKKwkJc3luX2J1Zi0+Yl9zc3RfZmlyc3QgPSBwOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBpbnNlcnQgaW4gbGlzdCBhZnRlciAqc3AgKi8KKwkJcC0+c3N0X25leHQgPSBzcC0+c3N0X25leHQ7CisJCXNwLT5zc3RfbmV4dCA9IHA7CisJICAgIH0KKwkgICAgc3AgPSBwOworCSAgICBzcC0+c3N0X3N0YWNrc2l6ZSA9IDA7CisJICAgIHNwLT5zc3RfbG51bSA9IGN1cnJlbnRfbG51bTsKKwl9CisgICAgfQorICAgIGlmIChzcCAhPSBOVUxMKQorICAgIHsKKwkvKiBXaGVuIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIHN0YXRlIHN0YWNrLCBjbGVhciBpdCBmaXJzdCAqLworCWNsZWFyX3N5bl9zdGF0ZShzcCk7CisJc3AtPnNzdF9zdGFja3NpemUgPSBjdXJyZW50X3N0YXRlLmdhX2xlbjsKKwlpZiAoY3VycmVudF9zdGF0ZS5nYV9sZW4gPiBTU1RfRklYX1NUQVRFUykKKwl7CisJICAgIC8qIE5lZWQgdG8gY2xlYXIgaXQsIG1pZ2h0IGJlIHNvbWV0aGluZyByZW1haW5pbmcgZnJvbSB3aGVuIHRoZQorCSAgICAgKiBsZW5ndGggd2FzIGxlc3MgdGhhbiBTU1RfRklYX1NUQVRFUy4gKi8KKwkgICAgZ2FfaW5pdDIoJnNwLT5zc3RfdW5pb24uc3N0X2dhLCAoaW50KXNpemVvZihidWZzdGF0ZV9UKSwgMSk7CisJICAgIGlmIChnYV9ncm93KCZzcC0+c3N0X3VuaW9uLnNzdF9nYSwgY3VycmVudF9zdGF0ZS5nYV9sZW4pID09IEZBSUwpCisJCXNwLT5zc3Rfc3RhY2tzaXplID0gMDsKKwkgICAgZWxzZQorCSAgICB7CisJCXNwLT5zc3RfdW5pb24uc3N0X2dhLmdhX2xlbiA9IGN1cnJlbnRfc3RhdGUuZ2FfbGVuOworCQlzcC0+c3N0X3VuaW9uLnNzdF9nYS5nYV9yb29tIC09IGN1cnJlbnRfc3RhdGUuZ2FfbGVuOworCSAgICB9CisJICAgIGJwID0gU1lOX1NUQVRFX1AoJihzcC0+c3N0X3VuaW9uLnNzdF9nYSkpOworCX0KKwllbHNlCisJICAgIGJwID0gc3AtPnNzdF91bmlvbi5zc3Rfc3RhY2s7CisJZm9yIChpID0gMDsgaSA8IHNwLT5zc3Rfc3RhY2tzaXplOyArK2kpCisJeworCSAgICBicFtpXS5ic19pZHggPSBDVVJfU1RBVEUoaSkuc2lfaWR4OworCSAgICBicFtpXS5ic19mbGFncyA9IENVUl9TVEFURShpKS5zaV9mbGFnczsKKwkgICAgYnBbaV0uYnNfZXh0bWF0Y2ggPSByZWZfZXh0bWF0Y2goQ1VSX1NUQVRFKGkpLnNpX2V4dG1hdGNoKTsKKwl9CisJc3AtPnNzdF9uZXh0X2ZsYWdzID0gY3VycmVudF9uZXh0X2ZsYWdzOworCXNwLT5zc3RfbmV4dF9saXN0ID0gY3VycmVudF9uZXh0X2xpc3Q7CisJc3AtPnNzdF90aWNrID0gZGlzcGxheV90aWNrOworCXNwLT5zc3RfY2hhbmdlX2xudW0gPSAwOworICAgIH0KKyAgICBjdXJyZW50X3N0YXRlX3N0b3JlZCA9IFRSVUU7CisgICAgcmV0dXJuIHNwOworfQorCisvKgorICogQ29weSBhIHN0YXRlIHN0YWNrIGZyb20gImZyb20iIGluIGJfc3N0X2FycmF5W10gdG8gY3VycmVudF9zdGF0ZTsKKyAqLworICAgIHN0YXRpYyB2b2lkCitsb2FkX2N1cnJlbnRfc3RhdGUoZnJvbSkKKyAgICBzeW5zdGF0ZV9UCSpmcm9tOworeworICAgIGludAkJaTsKKyAgICBidWZzdGF0ZV9UCSpicDsKKworICAgIGNsZWFyX2N1cnJlbnRfc3RhdGUoKTsKKyAgICB2YWxpZGF0ZV9jdXJyZW50X3N0YXRlKCk7CisgICAga2VlcGVuZF9sZXZlbCA9IC0xOworICAgIGlmIChmcm9tLT5zc3Rfc3RhY2tzaXplCisJICAgICYmIGdhX2dyb3coJmN1cnJlbnRfc3RhdGUsIGZyb20tPnNzdF9zdGFja3NpemUpICE9IEZBSUwpCisgICAgeworCWlmIChmcm9tLT5zc3Rfc3RhY2tzaXplID4gU1NUX0ZJWF9TVEFURVMpCisJICAgIGJwID0gU1lOX1NUQVRFX1AoJihmcm9tLT5zc3RfdW5pb24uc3N0X2dhKSk7CisJZWxzZQorCSAgICBicCA9IGZyb20tPnNzdF91bmlvbi5zc3Rfc3RhY2s7CisJZm9yIChpID0gMDsgaSA8IGZyb20tPnNzdF9zdGFja3NpemU7ICsraSkKKwl7CisJICAgIENVUl9TVEFURShpKS5zaV9pZHggPSBicFtpXS5ic19pZHg7CisJICAgIENVUl9TVEFURShpKS5zaV9mbGFncyA9IGJwW2ldLmJzX2ZsYWdzOworCSAgICBDVVJfU1RBVEUoaSkuc2lfZXh0bWF0Y2ggPSByZWZfZXh0bWF0Y2goYnBbaV0uYnNfZXh0bWF0Y2gpOworCSAgICBpZiAoa2VlcGVuZF9sZXZlbCA8IDAgJiYgKENVUl9TVEFURShpKS5zaV9mbGFncyAmIEhMX0tFRVBFTkQpKQorCQlrZWVwZW5kX2xldmVsID0gaTsKKwkgICAgQ1VSX1NUQVRFKGkpLnNpX2VuZHMgPSBGQUxTRTsKKwkgICAgQ1VSX1NUQVRFKGkpLnNpX21fbG51bSA9IDA7CisJICAgIGlmIChDVVJfU1RBVEUoaSkuc2lfaWR4ID49IDApCisJCUNVUl9TVEFURShpKS5zaV9uZXh0X2xpc3QgPQorCQkgICAgICAgKFNZTl9JVEVNUyhzeW5fYnVmKVtDVVJfU1RBVEUoaSkuc2lfaWR4XSkuc3BfbmV4dF9saXN0OworCSAgICBlbHNlCisJCUNVUl9TVEFURShpKS5zaV9uZXh0X2xpc3QgPSBOVUxMOworCSAgICB1cGRhdGVfc2lfYXR0cihpKTsKKwl9CisJY3VycmVudF9zdGF0ZS5nYV9sZW4gPSBmcm9tLT5zc3Rfc3RhY2tzaXplOworCWN1cnJlbnRfc3RhdGUuZ2Ffcm9vbSAtPSBjdXJyZW50X3N0YXRlLmdhX2xlbjsKKyAgICB9CisgICAgY3VycmVudF9uZXh0X2xpc3QgPSBmcm9tLT5zc3RfbmV4dF9saXN0OworICAgIGN1cnJlbnRfbmV4dF9mbGFncyA9IGZyb20tPnNzdF9uZXh0X2ZsYWdzOworICAgIGN1cnJlbnRfbG51bSA9IGZyb20tPnNzdF9sbnVtOworfQorCisvKgorICogQ29tcGFyZSBzYXZlZCBzdGF0ZSBzdGFjayAiKnNwIiB3aXRoIHRoZSBjdXJyZW50IHN0YXRlLgorICogUmV0dXJuIFRSVUUgd2hlbiB0aGV5IGFyZSBlcXVhbC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3N5bl9zdGFja19lcXVhbChzcCkKKyAgICBzeW5zdGF0ZV9UICpzcDsKK3sKKyAgICBpbnQJCWksIGo7CisgICAgYnVmc3RhdGVfVAkqYnA7CisgICAgcmVnX2V4dG1hdGNoX1QJKnNpeCwgKmJzeDsKKworICAgIC8qIEZpcnN0IGEgcXVpY2sgY2hlY2sgaWYgdGhlIHN0YWNrcyBoYXZlIHRoZSBzYW1lIHNpemUgZW5kIG5leHRsaXN0LiAqLworICAgIGlmIChzcC0+c3N0X3N0YWNrc2l6ZSA9PSBjdXJyZW50X3N0YXRlLmdhX2xlbgorCSAgICAmJiBzcC0+c3N0X25leHRfbGlzdCA9PSBjdXJyZW50X25leHRfbGlzdCkKKyAgICB7CisJLyogTmVlZCB0byBjb21wYXJlIGFsbCBzdGF0ZXMgb24gYm90aCBzdGFja3MuICovCisJaWYgKHNwLT5zc3Rfc3RhY2tzaXplID4gU1NUX0ZJWF9TVEFURVMpCisJICAgIGJwID0gU1lOX1NUQVRFX1AoJihzcC0+c3N0X3VuaW9uLnNzdF9nYSkpOworCWVsc2UKKwkgICAgYnAgPSBzcC0+c3N0X3VuaW9uLnNzdF9zdGFjazsKKworCWZvciAoaSA9IGN1cnJlbnRfc3RhdGUuZ2FfbGVuOyAtLWkgPj0gMDsgKQorCXsKKwkgICAgLyogSWYgdGhlIGl0ZW0gaGFzIGFub3RoZXIgaW5kZXggdGhlIHN0YXRlIGlzIGRpZmZlcmVudC4gKi8KKwkgICAgaWYgKGJwW2ldLmJzX2lkeCAhPSBDVVJfU1RBVEUoaSkuc2lfaWR4KQorCQlicmVhazsKKwkgICAgaWYgKGJwW2ldLmJzX2V4dG1hdGNoICE9IENVUl9TVEFURShpKS5zaV9leHRtYXRjaCkKKwkgICAgeworCQkvKiBXaGVuIHRoZSBleHRtYXRjaCBwb2ludGVycyBhcmUgZGlmZmVyZW50LCB0aGUgc3RyaW5ncyBpbgorCQkgKiB0aGVtIGNhbiBzdGlsbCBiZSB0aGUgc2FtZS4gIENoZWNrIGlmIHRoZSBleHRtYXRjaAorCQkgKiByZWZlcmVuY2VzIGFyZSBlcXVhbC4gKi8KKwkJYnN4ID0gYnBbaV0uYnNfZXh0bWF0Y2g7CisJCXNpeCA9IENVUl9TVEFURShpKS5zaV9leHRtYXRjaDsKKwkJLyogSWYgb25lIG9mIHRoZSBleHRtYXRjaCBwb2ludGVycyBpcyBOVUxMIHRoZSBzdGF0ZXMgYXJlCisJCSAqIGRpZmZlcmVudC4gKi8KKwkJaWYgKGJzeCA9PSBOVUxMIHx8IHNpeCA9PSBOVUxMKQorCQkgICAgYnJlYWs7CisJCWZvciAoaiA9IDA7IGogPCBOU1VCRVhQOyArK2opCisJCXsKKwkJICAgIC8qIENoZWNrIGVhY2ggcmVmZXJlbmNlZCBtYXRjaCBzdHJpbmcuIFRoZXkgbXVzdCBhbGwgYmUKKwkJICAgICAqIGVxdWFsLiAqLworCQkgICAgaWYgKGJzeC0+bWF0Y2hlc1tqXSAhPSBzaXgtPm1hdGNoZXNbal0pCisJCSAgICB7CisJCQkvKiBJZiB0aGUgcG9pbnRlciBpcyBkaWZmZXJlbnQgaXQgY2FuIHN0aWxsIGJlIHRoZQorCQkJICogc2FtZSB0ZXh0LiAgQ29tcGFyZSB0aGUgc3RyaW5ncywgaWdub3JlIGNhc2Ugd2hlbgorCQkJICogdGhlIHN0YXJ0IGl0ZW0gaGFzIHRoZSBzcF9pYyBmbGFnIHNldC4gKi8KKwkJCWlmIChic3gtPm1hdGNoZXNbal0gPT0gTlVMTAorCQkJCXx8IHNpeC0+bWF0Y2hlc1tqXSA9PSBOVUxMKQorCQkJICAgIGJyZWFrOworCQkJaWYgKChTWU5fSVRFTVMoc3luX2J1ZilbQ1VSX1NUQVRFKGkpLnNpX2lkeF0pLnNwX2ljCisJCQkJPyBNQl9TVFJJQ01QKGJzeC0+bWF0Y2hlc1tqXSwKKwkJCQkJCQkgc2l4LT5tYXRjaGVzW2pdKSAhPSAwCisJCQkJOiBTVFJDTVAoYnN4LT5tYXRjaGVzW2pdLCBzaXgtPm1hdGNoZXNbal0pICE9IDApCisJCQkgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkJaWYgKGogIT0gTlNVQkVYUCkKKwkJICAgIGJyZWFrOworCSAgICB9CisJfQorCWlmIChpIDwgMCkKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFdlIHN0b3AgcGFyc2luZyBzeW50YXggYWJvdmUgbGluZSAibG51bSIuICBJZiB0aGUgc3RvcmVkIHN0YXRlIGF0IG9yIGJlbG93CisgKiB0aGlzIGxpbmUgZGVwZW5kZWQgb24gYSBjaGFuZ2UgYmVmb3JlIGl0LCBpdCBub3cgZGVwZW5kcyBvbiB0aGUgbGluZSBiZWxvdworICogdGhlIGxhc3QgcGFyc2VkIGxpbmUuCisgKiBUaGUgd2luZG93IGxvb2tzIGxpa2UgdGhpczoKKyAqCSAgICBsaW5lIHdoaWNoIGNoYW5nZWQKKyAqCSAgICBkaXNwbGF5ZWQgbGluZQorICoJICAgIGRpc3BsYXllZCBsaW5lCisgKiBsbnVtIC0+ICBsaW5lIGJlbG93IHdpbmRvdworICovCisgICAgdm9pZAorc3ludGF4X2VuZF9wYXJzaW5nKGxudW0pCisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBzeW5zdGF0ZV9UCSpzcDsKKworICAgIHNwID0gc3luX3N0YWNrX2ZpbmRfZW50cnkobG51bSk7CisgICAgaWYgKHNwICE9IE5VTEwgJiYgc3AtPnNzdF9sbnVtIDwgbG51bSkKKwlzcCA9IHNwLT5zc3RfbmV4dDsKKworICAgIGlmIChzcCAhPSBOVUxMICYmIHNwLT5zc3RfY2hhbmdlX2xudW0gIT0gMCkKKwlzcC0+c3N0X2NoYW5nZV9sbnVtID0gbG51bTsKK30KKworLyoKKyAqIEVuZCBvZiBoYW5kbGluZyBvZiB0aGUgc3RhdGUgc3RhY2suCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIHN0YXRpYyB2b2lkCitpbnZhbGlkYXRlX2N1cnJlbnRfc3RhdGUoKQoreworICAgIGNsZWFyX2N1cnJlbnRfc3RhdGUoKTsKKyAgICBjdXJyZW50X3N0YXRlLmdhX2l0ZW1zaXplID0gMDsJLyogbWFyayBjdXJyZW50X3N0YXRlIGludmFsaWQgKi8KKyAgICBjdXJyZW50X25leHRfbGlzdCA9IE5VTEw7CisgICAga2VlcGVuZF9sZXZlbCA9IC0xOworfQorCisgICAgc3RhdGljIHZvaWQKK3ZhbGlkYXRlX2N1cnJlbnRfc3RhdGUoKQoreworICAgIGN1cnJlbnRfc3RhdGUuZ2FfaXRlbXNpemUgPSBzaXplb2Yoc3RhdGVpdGVtX1QpOworICAgIGN1cnJlbnRfc3RhdGUuZ2FfZ3Jvd3NpemUgPSAzOworfQorCisvKgorICogUmV0dXJuIFRSVUUgaWYgdGhlIHN5bnRheCBhdCBzdGFydCBvZiBsbnVtIGNoYW5nZWQgc2luY2UgbGFzdCB0aW1lLgorICogVGhpcyB3aWxsIG9ubHkgYmUgY2FsbGVkIGp1c3QgYWZ0ZXIgZ2V0X3N5bnRheF9hdHRyKCkgZm9yIHRoZSBwcmV2aW91cworICogbGluZSwgdG8gY2hlY2sgaWYgdGhlIG5leHQgbGluZSBuZWVkcyB0byBiZSByZWRyYXduIHRvby4KKyAqLworICAgIGludAorc3ludGF4X2NoZWNrX2NoYW5nZWQobG51bSkKKyAgICBsaW5lbnJfVAlsbnVtOworeworICAgIGludAkJcmV0dmFsID0gVFJVRTsKKyAgICBzeW5zdGF0ZV9UCSpzcDsKKworICAgIHJlZ19zeW4gPSBUUlVFOwkvKiBsZXQgdmltX3JlZ2V4ZWMoKSBrbm93IHdlJ3JlIHVzaW5nIHN5bnRheCAqLworCisgICAgLyoKKyAgICAgKiBDaGVjayB0aGUgc3RhdGUgc3RhY2sgd2hlbjoKKyAgICAgKiAtIGxudW0gaXMganVzdCBiZWxvdyB0aGUgcHJldmlvdXNseSBzeW50YXhlZCBsaW5lLgorICAgICAqIC0gbG51bSBpcyBub3QgYmVmb3JlIHRoZSBsaW5lcyB3aXRoIHNhdmVkIHN0YXRlcy4KKyAgICAgKiAtIGxudW0gaXMgbm90IHBhc3QgdGhlIGxpbmVzIHdpdGggc2F2ZWQgc3RhdGVzLgorICAgICAqIC0gbG51bSBpcyBhdCBvciBiZWZvcmUgdGhlIGxhc3QgY2hhbmdlZCBsaW5lLgorICAgICAqLworICAgIGlmIChWQUxJRF9TVEFURSgmY3VycmVudF9zdGF0ZSkgJiYgbG51bSA9PSBjdXJyZW50X2xudW0gKyAxKQorICAgIHsKKwlzcCA9IHN5bl9zdGFja19maW5kX2VudHJ5KGxudW0pOworCWlmIChzcCAhPSBOVUxMICYmIHNwLT5zc3RfbG51bSA9PSBsbnVtKQorCXsKKwkgICAgLyoKKwkgICAgICogZmluaXNoIHRoZSBwcmV2aW91cyBsaW5lIChuZWVkZWQgd2hlbiBub3QgYWxsIG9mIHRoZSBsaW5lIHdhcworCSAgICAgKiBkcmF3bikKKwkgICAgICovCisJICAgICh2b2lkKXN5bl9maW5pc2hfbGluZShGQUxTRSk7CisKKwkgICAgLyoKKwkgICAgICogQ29tcGFyZSB0aGUgY3VycmVudCBzdGF0ZSB3aXRoIHRoZSBwcmV2aW91c2x5IHNhdmVkIHN0YXRlIG9mCisJICAgICAqIHRoZSBsaW5lLgorCSAgICAgKi8KKwkgICAgaWYgKHN5bl9zdGFja19lcXVhbChzcCkpCisJCXJldHZhbCA9IEZBTFNFOworCisJICAgIC8qCisJICAgICAqIFN0b3JlIHRoZSBjdXJyZW50IHN0YXRlIGluIGJfc3N0X2FycmF5W10gZm9yIGxhdGVyIHVzZS4KKwkgICAgICovCisJICAgICsrY3VycmVudF9sbnVtOworCSAgICAodm9pZClzdG9yZV9jdXJyZW50X3N0YXRlKE5VTEwpOworCX0KKyAgICB9CisKKyAgICByZWdfc3luID0gRkFMU0U7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogRmluaXNoIHRoZSBjdXJyZW50IGxpbmUuCisgKiBUaGlzIGRvZXNuJ3QgcmV0dXJuIGFueSBhdHRyaWJ1dGVzLCBpdCBvbmx5IGdldHMgdGhlIHN0YXRlIGF0IHRoZSBlbmQgb2YKKyAqIHRoZSBsaW5lLiAgSXQgY2FuIHN0YXJ0IGFueXdoZXJlIGluIHRoZSBsaW5lLCBhcyBsb25nIGFzIHRoZSBjdXJyZW50IHN0YXRlCisgKiBpcyB2YWxpZC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3N5bl9maW5pc2hfbGluZShzeW5jaW5nKQorICAgIGludAkgICAgc3luY2luZzsJCS8qIGNhbGxlZCBmb3Igc3luY2luZyAqLworeworICAgIHN0YXRlaXRlbV9UCSpjdXJfc2k7CisKKyAgICBpZiAoIWN1cnJlbnRfZmluaXNoZWQpCisgICAgeworCXdoaWxlICghY3VycmVudF9maW5pc2hlZCkKKwl7CisJICAgICh2b2lkKXN5bl9jdXJyZW50X2F0dHIoc3luY2luZywgRkFMU0UpOworCSAgICAvKgorCSAgICAgKiBXaGVuIHN5bmNpbmcsIGFuZCBmb3VuZCBzb21lIGl0ZW0sIG5lZWQgdG8gY2hlY2sgdGhlIGl0ZW0uCisJICAgICAqLworCSAgICBpZiAoc3luY2luZyAmJiBjdXJyZW50X3N0YXRlLmdhX2xlbikKKwkgICAgeworCQkvKgorCQkgKiBDaGVjayBmb3IgbWF0Y2ggd2l0aCBzeW5jIGl0ZW0uCisJCSAqLworCQljdXJfc2kgPSAmQ1VSX1NUQVRFKGN1cnJlbnRfc3RhdGUuZ2FfbGVuIC0gMSk7CisJCWlmIChjdXJfc2ktPnNpX2lkeCA+PSAwCisJCQkmJiAoU1lOX0lURU1TKHN5bl9idWYpW2N1cl9zaS0+c2lfaWR4XS5zcF9mbGFncworCQkJCQkgICAgICAmIChITF9TWU5DX0hFUkV8SExfU1lOQ19USEVSRSkpKQorCQkgICAgcmV0dXJuIFRSVUU7CisKKwkJLyogc3luX2N1cnJlbnRfYXR0cigpIHdpbGwgaGF2ZSBza2lwcGVkIHRoZSBjaGVjayBmb3IgYW4gaXRlbQorCQkgKiB0aGF0IGVuZHMgaGVyZSwgbmVlZCB0byBkbyB0aGF0IG5vdy4gKi8KKwkJKytjdXJyZW50X2NvbDsKKwkJY2hlY2tfc3RhdGVfZW5kcygpOworCQktLWN1cnJlbnRfY29sOworCSAgICB9CisJICAgICsrY3VycmVudF9jb2w7CisJfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBSZXR1cm4gaGlnaGxpZ2h0IGF0dHJpYnV0ZXMgZm9yIG5leHQgY2hhcmFjdGVyLgorICogTXVzdCBmaXJzdCBjYWxsIHN5bnRheF9zdGFydCgpIG9uY2UgZm9yIHRoZSBsaW5lLgorICogImNvbCIgaXMgbm9ybWFsbHkgMCBmb3IgdGhlIGZpcnN0IHVzZSBpbiBhIGxpbmUsIGFuZCBpbmNyZW1lbnRzIGJ5IG9uZSBlYWNoCisgKiB0aW1lLiAgSXQncyBhbGxvd2VkIHRvIHNraXAgY2hhcmFjdGVycyBhbmQgdG8gc3RvcCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUKKyAqIGxpbmUuICBCdXQgb25seSBhICJjb2wiIGFmdGVyIGEgcHJldmlvdXNseSB1c2VkIGNvbHVtbiBpcyBhbGxvd2VkLgorICovCisgICAgaW50CitnZXRfc3ludGF4X2F0dHIoY29sKQorICAgIGNvbG5yX1QJY29sOworeworICAgIGludAkgICAgYXR0ciA9IDA7CisKKyAgICAvKiBjaGVjayBmb3Igb3V0IG9mIG1lbW9yeSBzaXR1YXRpb24gKi8KKyAgICBpZiAoc3luX2J1Zi0+Yl9zc3RfYXJyYXkgPT0gTlVMTCkKKwlyZXR1cm4gMDsKKworICAgIHJlZ19zeW4gPSBUUlVFOwkvKiBsZXQgdmltX3JlZ2V4ZWMoKSBrbm93IHdlJ3JlIHVzaW5nIHN5bnRheCAqLworCisgICAgLyogTWFrZSBzdXJlIGN1cnJlbnRfc3RhdGUgaXMgdmFsaWQgKi8KKyAgICBpZiAoSU5WQUxJRF9TVEFURSgmY3VycmVudF9zdGF0ZSkpCisJdmFsaWRhdGVfY3VycmVudF9zdGF0ZSgpOworCisgICAgLyoKKyAgICAgKiBTa2lwIGZyb20gdGhlIGN1cnJlbnQgY29sdW1uIHRvICJjb2wiLCBnZXQgdGhlIGF0dHJpYnV0ZXMgZm9yICJjb2wiLgorICAgICAqLworICAgIHdoaWxlIChjdXJyZW50X2NvbCA8PSBjb2wpCisgICAgeworCWF0dHIgPSBzeW5fY3VycmVudF9hdHRyKEZBTFNFLCBUUlVFKTsKKwkrK2N1cnJlbnRfY29sOworICAgIH0KKworICAgIHJlZ19zeW4gPSBGQUxTRTsKKyAgICByZXR1cm4gYXR0cjsKK30KKworLyoKKyAqIEdldCBzeW50YXggYXR0cmlidXRlcyBmb3IgY3VycmVudF9sbnVtLCBjdXJyZW50X2NvbC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3N5bl9jdXJyZW50X2F0dHIoc3luY2luZywgZGlzcGxheWluZykKKyAgICBpbnQJCXN5bmNpbmc7CQkvKiBXaGVuIDE6IGNhbGxlZCBmb3Igc3luY2luZyAqLworICAgIGludAkJZGlzcGxheWluZzsJCS8qIHJlc3VsdCB3aWxsIGJlIGRpc3BsYXllZCAqLworeworICAgIGludAkJc3luX2lkOworICAgIGxwb3NfVAllbmRwb3M7CQkvKiB3YXM6IGNoYXJfdSAqZW5kcDsgKi8KKyAgICBscG9zX1QJaGxfc3RhcnRwb3M7CS8qIHdhczogaW50IGhsX3N0YXJ0Y29sOyAqLworICAgIGxwb3NfVAlobF9lbmRwb3M7CisgICAgbHBvc19UCWVvc19wb3M7CS8qIGVuZC1vZi1zdGFydCBtYXRjaCAoc3RhcnQgcmVnaW9uKSAqLworICAgIGxwb3NfVAllb2VfcG9zOwkvKiBlbmQtb2YtZW5kIHBhdHRlcm4gKi8KKyAgICBpbnQJCWVuZF9pZHg7CS8qIGdyb3VwIElEIGZvciBlbmQgcGF0dGVybiAqLworICAgIGludAkJaWR4OworICAgIHN5bnBhdF9UCSpzcHA7CisgICAgc3RhdGVpdGVtX1QJKmN1cl9zaSwgKnNpcDsKKyAgICBpbnQJCXN0YXJ0Y29sOworICAgIGludAkJZW5kY29sOworICAgIGxvbmcJZmxhZ3M7CisgICAgc2hvcnQJKm5leHRfbGlzdDsKKyAgICBpbnQJCWZvdW5kX21hdGNoOwkJICAgIC8qIGZvdW5kIHVzYWJsZSBtYXRjaCAqLworICAgIHN0YXRpYyBpbnQJdHJ5X25leHRfY29sdW1uID0gRkFMU0U7ICAgIC8qIG11c3QgdHJ5IGluIG5leHQgY29sICovCisgICAgaW50CQlkb19rZXl3b3JkczsKKyAgICByZWdtbWF0Y2hfVAlyZWdtYXRjaDsKKyAgICBscG9zX1QJcG9zOworICAgIGludAkJbGNfY29sOworICAgIHJlZ19leHRtYXRjaF9UICpjdXJfZXh0bWF0Y2ggPSBOVUxMOworICAgIGNoYXJfdQkqbGluZTsJCS8qIGN1cnJlbnQgbGluZS4gIE5PVEU6IGJlY29tZXMgaW52YWxpZCBhZnRlcgorCQkJCSAgIGxvb2tpbmcgZm9yIGEgcGF0dGVybiBtYXRjaCEgKi8KKworICAgIC8qIHZhcmlhYmxlcyBmb3IgemVyby13aWR0aCBtYXRjaGVzIHRoYXQgaGF2ZSBhICJuZXh0Z3JvdXAiIGFyZ3VtZW50ICovCisgICAgaW50CQlrZWVwX25leHRfbGlzdDsKKyAgICBpbnQJCXplcm9fd2lkdGhfbmV4dF9saXN0ID0gRkFMU0U7CisgICAgZ2FycmF5X1QJemVyb193aWR0aF9uZXh0X2dhOworCisgICAgLyoKKyAgICAgKiBObyBjaGFyYWN0ZXIsIG5vIGF0dHJpYnV0ZXMhICBQYXN0IGVuZCBvZiBsaW5lPworICAgICAqIERvIHRyeSBtYXRjaGluZyB3aXRoIGFuIGVtcHR5IGxpbmUgKGNvdWxkIGJlIHRoZSBzdGFydCBvZiBhIHJlZ2lvbikuCisgICAgICovCisgICAgbGluZSA9IHN5bl9nZXRjdXJsaW5lKCk7CisgICAgaWYgKGxpbmVbY3VycmVudF9jb2xdID09IE5VTCAmJiBjdXJyZW50X2NvbCAhPSAwKQorICAgIHsKKwkvKgorCSAqIElmIHdlIGZvdW5kIGEgbWF0Y2ggYWZ0ZXIgdGhlIGxhc3QgY29sdW1uLCB1c2UgaXQuCisJICovCisJaWYgKG5leHRfbWF0Y2hfaWR4ID49IDAgJiYgbmV4dF9tYXRjaF9jb2wgPj0gKGludCljdXJyZW50X2NvbAorCQkJCQkJICAmJiBuZXh0X21hdGNoX2NvbCAhPSBNQVhDT0wpCisJICAgICh2b2lkKXB1c2hfbmV4dF9tYXRjaChOVUxMKTsKKworCWN1cnJlbnRfZmluaXNoZWQgPSBUUlVFOworCWN1cnJlbnRfc3RhdGVfc3RvcmVkID0gRkFMU0U7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogaWYgdGhlIGN1cnJlbnQgb3IgbmV4dCBjaGFyYWN0ZXIgaXMgTlVMLCB3ZSB3aWxsIGZpbmlzaCB0aGUgbGluZSBub3cgKi8KKyAgICBpZiAobGluZVtjdXJyZW50X2NvbF0gPT0gTlVMIHx8IGxpbmVbY3VycmVudF9jb2wgKyAxXSA9PSBOVUwpCisgICAgeworCWN1cnJlbnRfZmluaXNoZWQgPSBUUlVFOworCWN1cnJlbnRfc3RhdGVfc3RvcmVkID0gRkFMU0U7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXaGVuIGluIHRoZSBwcmV2aW91cyBjb2x1bW4gdGhlcmUgd2FzIGEgbWF0Y2ggYnV0IGl0IGNvdWxkIG5vdCBiZSB1c2VkCisgICAgICogKGVtcHR5IG1hdGNoIG9yIGFscmVhZHkgbWF0Y2hlZCBpbiB0aGlzIGNvbHVtbikgbmVlZCB0byB0cnkgYWdhaW4gaW4KKyAgICAgKiB0aGUgbmV4dCBjb2x1bW4uCisgICAgICovCisgICAgaWYgKHRyeV9uZXh0X2NvbHVtbikKKyAgICB7CisJbmV4dF9tYXRjaF9pZHggPSAtMTsKKwl0cnlfbmV4dF9jb2x1bW4gPSBGQUxTRTsKKyAgICB9CisKKyAgICAvKiBPbmx5IGNoZWNrIGZvciBrZXl3b3JkcyB3aGVuIG5vdCBzeW5jaW5nIGFuZCB0aGVyZSBhcmUgc29tZS4gKi8KKyAgICBkb19rZXl3b3JkcyA9ICFzeW5jaW5nCisJCSAgICAmJiAoc3luX2J1Zi0+Yl9rZXl3dGFiICE9IE5VTEwKKwkJCSAgICB8fCBzeW5fYnVmLT5iX2tleXd0YWJfaWMgIT0gTlVMTCk7CisKKyAgICAvKiBJbml0IHRoZSBsaXN0IG9mIHplcm8td2lkdGggbWF0Y2hlcyB3aXRoIGEgbmV4dGxpc3QuICBUaGlzIGlzIHVzZWQgdG8KKyAgICAgKiBhdm9pZCBtYXRjaGluZyB0aGUgc2FtZSBpdGVtIGluIHRoZSBzYW1lIHBvc2l0aW9uIHR3aWNlLiAqLworICAgIGdhX2luaXQyKCZ6ZXJvX3dpZHRoX25leHRfZ2EsIChpbnQpc2l6ZW9mKGludCksIDEwKTsKKworICAgIC8qCisgICAgICogUmVwZWF0IG1hdGNoaW5nIGtleXdvcmRzIGFuZCBwYXR0ZXJucywgdG8gZmluZCBjb250YWluZWQgaXRlbXMgYXQgdGhlCisgICAgICogc2FtZSBjb2x1bW4uICBUaGlzIHN0b3BzIHdoZW4gdGhlcmUgYXJlIG5vIGV4dHJhIG1hdGNoZXMgYXQgdGhlIGN1cnJlbnQKKyAgICAgKiBjb2x1bW4uCisgICAgICovCisgICAgZG8KKyAgICB7CisJZm91bmRfbWF0Y2ggPSBGQUxTRTsKKwlrZWVwX25leHRfbGlzdCA9IEZBTFNFOworCXN5bl9pZCA9IDA7CisKKwkvKgorCSAqIDEuIENoZWNrIGZvciBhIGN1cnJlbnQgc3RhdGUuCisJICogICAgT25seSB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQgc3RhdGUsIG9yIGlmIHRoZSBjdXJyZW50IHN0YXRlIG1heQorCSAqICAgIGNvbnRhaW4gb3RoZXIgdGhpbmdzLCB3ZSBuZWVkIHRvIGNoZWNrIGZvciBrZXl3b3JkcyBhbmQgcGF0dGVybnMuCisJICogICAgQWx3YXlzIG5lZWQgdG8gY2hlY2sgZm9yIGNvbnRhaW5lZCBpdGVtcyBpZiBzb21lIGl0ZW0gaGFzIHRoZQorCSAqICAgICJjb250YWluZWRpbiIgYXJndW1lbnQgKHRha2VzIGV4dHJhIHRpbWUhKS4KKwkgKi8KKwlpZiAoY3VycmVudF9zdGF0ZS5nYV9sZW4pCisJICAgIGN1cl9zaSA9ICZDVVJfU1RBVEUoY3VycmVudF9zdGF0ZS5nYV9sZW4gLSAxKTsKKwllbHNlCisJICAgIGN1cl9zaSA9IE5VTEw7CisKKwlpZiAoc3luX2J1Zi0+Yl9zeW5fY29udGFpbmVkaW4gfHwgY3VyX3NpID09IE5VTEwKKwkJCQkJICAgICAgfHwgY3VyX3NpLT5zaV9jb250X2xpc3QgIT0gTlVMTCkKKwl7CisJICAgIC8qCisJICAgICAqIDIuIENoZWNrIGZvciBrZXl3b3JkcywgaWYgb24gYSBrZXl3b3JkIGNoYXIgYWZ0ZXIgYSBub24ta2V5d29yZAorCSAgICAgKgkgIGNoYXIuICBEb24ndCBkbyB0aGlzIHdoZW4gc3luY2luZy4KKwkgICAgICovCisJICAgIGlmIChkb19rZXl3b3JkcykKKwkgICAgeworCSAgICAgIGxpbmUgPSBzeW5fZ2V0Y3VybGluZSgpOworCSAgICAgIGlmICh2aW1faXN3b3JkY19idWYobGluZSArIGN1cnJlbnRfY29sLCBzeW5fYnVmKQorCQkgICAgICAmJiAoY3VycmVudF9jb2wgPT0gMAorCQkJICB8fCAhdmltX2lzd29yZGNfYnVmKGxpbmUgKyBjdXJyZW50X2NvbCAtIDEKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgICAtIChoYXNfbWJ5dGUKKwkJCQkgID8gKCptYl9oZWFkX29mZikobGluZSwgbGluZSArIGN1cnJlbnRfY29sIC0gMSkKKwkJCQkgIDogMCkKKyNlbmRpZgorCQkJICAgICAgICwgc3luX2J1ZikpKQorCSAgICAgIHsKKwkJc3luX2lkID0gY2hlY2tfa2V5d29yZF9pZChsaW5lLCAoaW50KWN1cnJlbnRfY29sLAorCQkJCQkgJmVuZGNvbCwgJmZsYWdzLCAmbmV4dF9saXN0LCBjdXJfc2kpOworCQlpZiAoc3luX2lkKQorCQl7CisJCSAgICBpZiAocHVzaF9jdXJyZW50X3N0YXRlKEtFWVdPUkRfSURYKSA9PSBPSykKKwkJICAgIHsKKwkJCWN1cl9zaSA9ICZDVVJfU1RBVEUoY3VycmVudF9zdGF0ZS5nYV9sZW4gLSAxKTsKKwkJCWN1cl9zaS0+c2lfbV9zdGFydGNvbCA9IGN1cnJlbnRfY29sOworCQkJY3VyX3NpLT5zaV9oX3N0YXJ0cG9zLmxudW0gPSBjdXJyZW50X2xudW07CisJCQljdXJfc2ktPnNpX2hfc3RhcnRwb3MuY29sID0gMDsJLyogc3RhcnRzIHJpZ2h0IGF3YXkgKi8KKwkJCWN1cl9zaS0+c2lfbV9lbmRwb3MubG51bSA9IGN1cnJlbnRfbG51bTsKKwkJCWN1cl9zaS0+c2lfbV9lbmRwb3MuY29sID0gZW5kY29sOworCQkJY3VyX3NpLT5zaV9oX2VuZHBvcy5sbnVtID0gY3VycmVudF9sbnVtOworCQkJY3VyX3NpLT5zaV9oX2VuZHBvcy5jb2wgPSBlbmRjb2w7CisJCQljdXJfc2ktPnNpX2VuZHMgPSBUUlVFOworCQkJY3VyX3NpLT5zaV9lbmRfaWR4ID0gMDsKKwkJCWN1cl9zaS0+c2lfZmxhZ3MgPSBmbGFnczsKKwkJCWN1cl9zaS0+c2lfaWQgPSBzeW5faWQ7CisJCQljdXJfc2ktPnNpX3RyYW5zX2lkID0gc3luX2lkOworCQkJaWYgKGZsYWdzICYgSExfVFJBTlNQKQorCQkJeworCQkJICAgIGlmIChjdXJyZW50X3N0YXRlLmdhX2xlbiA8IDIpCisJCQkgICAgeworCQkJCWN1cl9zaS0+c2lfYXR0ciA9IDA7CisJCQkJY3VyX3NpLT5zaV90cmFuc19pZCA9IDA7CisJCQkgICAgfQorCQkJICAgIGVsc2UKKwkJCSAgICB7CisJCQkJY3VyX3NpLT5zaV9hdHRyID0gQ1VSX1NUQVRFKAorCQkJCQljdXJyZW50X3N0YXRlLmdhX2xlbiAtIDIpLnNpX2F0dHI7CisJCQkJY3VyX3NpLT5zaV90cmFuc19pZCA9IENVUl9TVEFURSgKKwkJCQkJY3VycmVudF9zdGF0ZS5nYV9sZW4gLSAyKS5zaV90cmFuc19pZDsKKwkJCSAgICB9CisJCQl9CisJCQllbHNlCisJCQkgICAgY3VyX3NpLT5zaV9hdHRyID0gc3luX2lkMmF0dHIoc3luX2lkKTsKKwkJCWN1cl9zaS0+c2lfY29udF9saXN0ID0gTlVMTDsKKwkJCWN1cl9zaS0+c2lfbmV4dF9saXN0ID0gbmV4dF9saXN0OworCQkJY2hlY2tfa2VlcGVuZCgpOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJdmltX2ZyZWUobmV4dF9saXN0KTsKKwkJfQorCSAgICAgIH0KKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIDMuIENoZWNrIGZvciBwYXR0ZXJucyAob25seSBpZiBub3QgZm91bmQgYSBrZXl3b3JkKS4KKwkgICAgICovCisJICAgIGlmIChzeW5faWQgPT0gMCAmJiBzeW5fYnVmLT5iX3N5bl9wYXR0ZXJucy5nYV9sZW4pCisJICAgIHsKKwkJLyoKKwkJICogSWYgd2UgZGlkbid0IGNoZWNrIGZvciBhIG1hdGNoIHlldCwgb3Igd2UgYXJlIHBhc3QgaXQsIGNoZWNrCisJCSAqIGZvciBhbnkgbWF0Y2ggd2l0aCBhIHBhdHRlcm4uCisJCSAqLworCQlpZiAobmV4dF9tYXRjaF9pZHggPCAwIHx8IG5leHRfbWF0Y2hfY29sIDwgKGludCljdXJyZW50X2NvbCkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIENoZWNrIGFsbCByZWxldmFudCBwYXR0ZXJucyBmb3IgYSBtYXRjaCBhdCB0aGlzCisJCSAgICAgKiBwb3NpdGlvbi4gIFRoaXMgaXMgY29tcGxpY2F0ZWQsIGJlY2F1c2UgbWF0Y2hpbmcgd2l0aCBhCisJCSAgICAgKiBwYXR0ZXJuIHRha2VzIHF1aXRlIGEgYml0IG9mIHRpbWUsIHRodXMgd2Ugd2FudCB0bworCQkgICAgICogYXZvaWQgZG9pbmcgaXQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuCisJCSAgICAgKi8KKwkJICAgIG5leHRfbWF0Y2hfaWR4ID0gMDsJCS8qIG5vIG1hdGNoIGluIHRoaXMgbGluZSB5ZXQgKi8KKwkJICAgIG5leHRfbWF0Y2hfY29sID0gTUFYQ09MOworCQkgICAgZm9yIChpZHggPSBzeW5fYnVmLT5iX3N5bl9wYXR0ZXJucy5nYV9sZW47IC0taWR4ID49IDA7ICkKKwkJICAgIHsKKwkJCXNwcCA9ICYoU1lOX0lURU1TKHN5bl9idWYpW2lkeF0pOworCQkJaWYgKAkgICBzcHAtPnNwX3N5bmNpbmcgPT0gc3luY2luZworCQkJCSYmIChkaXNwbGF5aW5nIHx8ICEoc3BwLT5zcF9mbGFncyAmIEhMX0RJU1BMQVkpKQorCQkJCSYmIChzcHAtPnNwX3R5cGUgPT0gU1BUWVBFX01BVENICisJCQkJICAgIHx8IHNwcC0+c3BfdHlwZSA9PSBTUFRZUEVfU1RBUlQpCisJCQkJJiYgKGN1cnJlbnRfbmV4dF9saXN0ICE9IE5VTEwKKwkJCQkgICAgPyBpbl9pZF9saXN0KE5VTEwsIGN1cnJlbnRfbmV4dF9saXN0LAorCQkJCQkJCSAgICAgICZzcHAtPnNwX3N5biwgMCkKKwkJCQkgICAgOiAoY3VyX3NpID09IE5VTEwKKwkJCQkJPyAhKHNwcC0+c3BfZmxhZ3MgJiBITF9DT05UQUlORUQpCisJCQkJCTogaW5faWRfbGlzdChjdXJfc2ksCisJCQkJCSAgICBjdXJfc2ktPnNpX2NvbnRfbGlzdCwgJnNwcC0+c3Bfc3luLAorCQkJCQkgICAgc3BwLT5zcF9mbGFncyAmIEhMX0NPTlRBSU5FRCkpKSkKKwkJCXsKKwkJCSAgICAvKiBJZiB3ZSBhbHJlYWR5IHRyaWVkIG1hdGNoaW5nIGluIHRoaXMgbGluZSwgYW5kCisJCQkgICAgICogdGhlcmUgaXNuJ3QgYSBtYXRjaCBiZWZvcmUgbmV4dF9tYXRjaF9jb2wsIHNraXAKKwkJCSAgICAgKiB0aGlzIGl0ZW0uICovCisJCQkgICAgaWYgKHNwcC0+c3BfbGluZV9pZCA9PSBjdXJyZW50X2xpbmVfaWQKKwkJCQkgICAgJiYgc3BwLT5zcF9zdGFydGNvbCA+PSBuZXh0X21hdGNoX2NvbCkKKwkJCQljb250aW51ZTsKKwkJCSAgICBzcHAtPnNwX2xpbmVfaWQgPSBjdXJyZW50X2xpbmVfaWQ7CisKKwkJCSAgICBsY19jb2wgPSBjdXJyZW50X2NvbCAtIHNwcC0+c3Bfb2Zmc2V0c1tTUE9fTENfT0ZGXTsKKwkJCSAgICBpZiAobGNfY29sIDwgMCkKKwkJCQlsY19jb2wgPSAwOworCisJCQkgICAgcmVnbWF0Y2gucm1tX2ljID0gc3BwLT5zcF9pYzsKKwkJCSAgICByZWdtYXRjaC5yZWdwcm9nID0gc3BwLT5zcF9wcm9nOworCQkJICAgIGlmICghc3luX3JlZ2V4ZWMoJnJlZ21hdGNoLCBjdXJyZW50X2xudW0sCisJCQkJCQkJICAgICAoY29sbnJfVClsY19jb2wpKQorCQkJICAgIHsKKwkJCQkvKiBubyBtYXRjaCBpbiB0aGlzIGxpbmUsIHRyeSBhbm90aGVyIG9uZSAqLworCQkJCXNwcC0+c3Bfc3RhcnRjb2wgPSBNQVhDT0w7CisJCQkJY29udGludWU7CisJCQkgICAgfQorCisJCQkgICAgLyoKKwkJCSAgICAgKiBDb21wdXRlIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIG1hdGNoLgorCQkJICAgICAqLworCQkJICAgIHN5bl9hZGRfc3RhcnRfb2ZmKCZwb3MsICZyZWdtYXRjaCwKKwkJCQkJCQkgc3BwLCBTUE9fTVNfT0ZGLCAtMSk7CisJCQkgICAgaWYgKHBvcy5sbnVtID4gY3VycmVudF9sbnVtKQorCQkJICAgIHsKKwkJCQkvKiBtdXN0IGhhdmUgdXNlZCBlbmQgb2YgbWF0Y2ggaW4gYSBuZXh0IGxpbmUsCisJCQkJICogd2UgY2FuJ3QgaGFuZGxlIHRoYXQgKi8KKwkJCQlzcHAtPnNwX3N0YXJ0Y29sID0gTUFYQ09MOworCQkJCWNvbnRpbnVlOworCQkJICAgIH0KKwkJCSAgICBzdGFydGNvbCA9IHBvcy5jb2w7CisKKwkJCSAgICAvKiByZW1lbWJlciB0aGUgbmV4dCBjb2x1bW4gd2hlcmUgdGhpcyBwYXR0ZXJuCisJCQkgICAgICogbWF0Y2hlcyBpbiB0aGUgY3VycmVudCBsaW5lICovCisJCQkgICAgc3BwLT5zcF9zdGFydGNvbCA9IHN0YXJ0Y29sOworCisJCQkgICAgLyoKKwkJCSAgICAgKiBJZiBhIHByZXZpb3VzbHkgZm91bmQgbWF0Y2ggc3RhcnRzIGF0IGEgbG93ZXIKKwkJCSAgICAgKiBjb2x1bW4gbnVtYmVyLCBkb24ndCB1c2UgdGhpcyBvbmUuCisJCQkgICAgICovCisJCQkgICAgaWYgKHN0YXJ0Y29sID49IG5leHRfbWF0Y2hfY29sKQorCQkJCWNvbnRpbnVlOworCisJCQkgICAgLyoKKwkJCSAgICAgKiBJZiB3ZSBtYXRjaGVkIHRoaXMgcGF0dGVybiBhdCB0aGlzIHBvc2l0aW9uCisJCQkgICAgICogYmVmb3JlLCBza2lwIGl0LiAgTXVzdCByZXRyeSBpbiB0aGUgbmV4dAorCQkJICAgICAqIGNvbHVtbiwgYmVjYXVzZSBpdCBtYXkgbWF0Y2ggZnJvbSB0aGVyZS4KKwkJCSAgICAgKi8KKwkJCSAgICBpZiAoZGlkX21hdGNoX2FscmVhZHkoaWR4LCAmemVyb193aWR0aF9uZXh0X2dhKSkKKwkJCSAgICB7CisJCQkJdHJ5X25leHRfY29sdW1uID0gVFJVRTsKKwkJCQljb250aW51ZTsKKwkJCSAgICB9CisKKwkJCSAgICBlbmRwb3MubG51bSA9IHJlZ21hdGNoLmVuZHBvc1swXS5sbnVtOworCQkJICAgIGVuZHBvcy5jb2wgPSByZWdtYXRjaC5lbmRwb3NbMF0uY29sOworCisJCQkgICAgLyogQ29tcHV0ZSB0aGUgaGlnaGxpZ2h0IHN0YXJ0LiAqLworCQkJICAgIHN5bl9hZGRfc3RhcnRfb2ZmKCZobF9zdGFydHBvcywgJnJlZ21hdGNoLAorCQkJCQkJCSBzcHAsIFNQT19IU19PRkYsIC0xKTsKKworCQkJICAgIC8qIENvbXB1dGUgdGhlIHJlZ2lvbiBzdGFydC4gKi8KKwkJCSAgICAvKiBEZWZhdWx0IGlzIHRvIHVzZSB0aGUgZW5kIG9mIHRoZSBtYXRjaC4gKi8KKwkJCSAgICBzeW5fYWRkX2VuZF9vZmYoJmVvc19wb3MsICZyZWdtYXRjaCwKKwkJCQkJCQkgc3BwLCBTUE9fUlNfT0ZGLCAwKTsKKworCQkJICAgIC8qCisJCQkgICAgICogR3JhYiB0aGUgZXh0ZXJuYWwgc3VibWF0Y2hlcyBiZWZvcmUgdGhleSBnZXQKKwkJCSAgICAgKiBvdmVyd3JpdHRlbi4gIFJlZmVyZW5jZSBjb3VudCBkb2Vzbid0IGNoYW5nZS4KKwkJCSAgICAgKi8KKwkJCSAgICB1bnJlZl9leHRtYXRjaChjdXJfZXh0bWF0Y2gpOworCQkJICAgIGN1cl9leHRtYXRjaCA9IHJlX2V4dG1hdGNoX291dDsKKwkJCSAgICByZV9leHRtYXRjaF9vdXQgPSBOVUxMOworCisJCQkgICAgZmxhZ3MgPSAwOworCQkJICAgIGVvZV9wb3MubG51bSA9IDA7CS8qIGF2b2lkIHdhcm5pbmcgKi8KKwkJCSAgICBlb2VfcG9zLmNvbCA9IDA7CisJCQkgICAgZW5kX2lkeCA9IDA7CisJCQkgICAgaGxfZW5kcG9zLmxudW0gPSAwOworCisJCQkgICAgLyoKKwkJCSAgICAgKiBGb3IgYSAib25lbGluZSIgdGhlIGVuZCBtdXN0IGJlIGZvdW5kIGluIHRoZQorCQkJICAgICAqIHNhbWUgbGluZSB0b28uICBTZWFyY2ggZm9yIGl0IGFmdGVyIHRoZSBlbmQgb2YKKwkJCSAgICAgKiB0aGUgbWF0Y2ggd2l0aCB0aGUgc3RhcnQgcGF0dGVybi4gIFNldCB0aGUKKwkJCSAgICAgKiByZXN1bHRpbmcgZW5kIHBvc2l0aW9ucyBhdCB0aGUgc2FtZSB0aW1lLgorCQkJICAgICAqLworCQkJICAgIGlmIChzcHAtPnNwX3R5cGUgPT0gU1BUWVBFX1NUQVJUCisJCQkJCSAgICAgICYmIChzcHAtPnNwX2ZsYWdzICYgSExfT05FTElORSkpCisJCQkgICAgeworCQkJCWxwb3NfVAlzdGFydHBvczsKKworCQkJCXN0YXJ0cG9zID0gZW5kcG9zOworCQkJCWZpbmRfZW5kcG9zKGlkeCwgJnN0YXJ0cG9zLCAmZW5kcG9zLCAmaGxfZW5kcG9zLAorCQkJCSAgICAmZmxhZ3MsICZlb2VfcG9zLCAmZW5kX2lkeCwgY3VyX2V4dG1hdGNoKTsKKwkJCQlpZiAoZW5kcG9zLmxudW0gPT0gMCkKKwkJCQkgICAgY29udGludWU7CSAgICAvKiBub3QgZm91bmQgKi8KKwkJCSAgICB9CisKKwkJCSAgICAvKgorCQkJICAgICAqIEZvciBhICJtYXRjaCIgdGhlIHNpemUgbXVzdCBiZSA+IDAgYWZ0ZXIgdGhlCisJCQkgICAgICogZW5kIG9mZnNldCBuZWVkcyBoYXMgYmVlbiBhZGRlZC4gIEV4Y2VwdCB3aGVuCisJCQkgICAgICogc3luY2luZy4KKwkJCSAgICAgKi8KKwkJCSAgICBlbHNlIGlmIChzcHAtPnNwX3R5cGUgPT0gU1BUWVBFX01BVENIKQorCQkJICAgIHsKKwkJCQlzeW5fYWRkX2VuZF9vZmYoJmhsX2VuZHBvcywgJnJlZ21hdGNoLCBzcHAsCisJCQkJCQkJICAgICAgIFNQT19IRV9PRkYsIDApOworCQkJCXN5bl9hZGRfZW5kX29mZigmZW5kcG9zLCAmcmVnbWF0Y2gsIHNwcCwKKwkJCQkJCQkgICAgICAgU1BPX01FX09GRiwgMCk7CisJCQkJaWYgKGVuZHBvcy5sbnVtID09IGN1cnJlbnRfbG51bQorCQkJCSAgICAgICYmIChpbnQpZW5kcG9zLmNvbCArIHN5bmNpbmcgPCBzdGFydGNvbCkKKwkJCQl7CisJCQkJICAgIC8qCisJCQkJICAgICAqIElmIGFuIGVtcHR5IHN0cmluZyBpcyBtYXRjaGVkLCBtYXkgbmVlZAorCQkJCSAgICAgKiB0byB0cnkgbWF0Y2hpbmcgYWdhaW4gYXQgbmV4dCBjb2x1bW4uCisJCQkJICAgICAqLworCQkJCSAgICBpZiAocmVnbWF0Y2guc3RhcnRwb3NbMF0uY29sCisJCQkJCQkgICAgPT0gcmVnbWF0Y2guZW5kcG9zWzBdLmNvbCkKKwkJCQkJdHJ5X25leHRfY29sdW1uID0gVFJVRTsKKwkJCQkgICAgY29udGludWU7CisJCQkJfQorCQkJICAgIH0KKworCQkJICAgIC8qCisJCQkgICAgICoga2VlcCB0aGUgYmVzdCBtYXRjaCBzbyBmYXIgaW4gbmV4dF9tYXRjaF8qCisJCQkgICAgICovCisJCQkgICAgLyogSGlnaGxpZ2h0aW5nIG11c3Qgc3RhcnQgYWZ0ZXIgc3RhcnRwb3MgYW5kIGVuZAorCQkJICAgICAqIGJlZm9yZSBlbmRwb3MuICovCisJCQkgICAgaWYgKGhsX3N0YXJ0cG9zLmxudW0gPT0gY3VycmVudF9sbnVtCisJCQkJCSAgICYmIChpbnQpaGxfc3RhcnRwb3MuY29sIDwgc3RhcnRjb2wpCisJCQkJaGxfc3RhcnRwb3MuY29sID0gc3RhcnRjb2w7CisJCQkgICAgbGltaXRfcG9zX3plcm8oJmhsX2VuZHBvcywgJmVuZHBvcyk7CisKKwkJCSAgICBuZXh0X21hdGNoX2lkeCA9IGlkeDsKKwkJCSAgICBuZXh0X21hdGNoX2NvbCA9IHN0YXJ0Y29sOworCQkJICAgIG5leHRfbWF0Y2hfbV9lbmRwb3MgPSBlbmRwb3M7CisJCQkgICAgbmV4dF9tYXRjaF9oX2VuZHBvcyA9IGhsX2VuZHBvczsKKwkJCSAgICBuZXh0X21hdGNoX2hfc3RhcnRwb3MgPSBobF9zdGFydHBvczsKKwkJCSAgICBuZXh0X21hdGNoX2ZsYWdzID0gZmxhZ3M7CisJCQkgICAgbmV4dF9tYXRjaF9lb3NfcG9zID0gZW9zX3BvczsKKwkJCSAgICBuZXh0X21hdGNoX2VvZV9wb3MgPSBlb2VfcG9zOworCQkJICAgIG5leHRfbWF0Y2hfZW5kX2lkeCA9IGVuZF9pZHg7CisJCQkgICAgdW5yZWZfZXh0bWF0Y2gobmV4dF9tYXRjaF9leHRtYXRjaCk7CisJCQkgICAgbmV4dF9tYXRjaF9leHRtYXRjaCA9IGN1cl9leHRtYXRjaDsKKwkJCSAgICBjdXJfZXh0bWF0Y2ggPSBOVUxMOworCQkJfQorCQkgICAgfQorCQl9CisKKwkJLyoKKwkJICogSWYgd2UgZm91bmQgYSBtYXRjaCBhdCB0aGUgY3VycmVudCBjb2x1bW4sIHVzZSBpdC4KKwkJICovCisJCWlmIChuZXh0X21hdGNoX2lkeCA+PSAwICYmIG5leHRfbWF0Y2hfY29sID09IChpbnQpY3VycmVudF9jb2wpCisJCXsKKwkJICAgIHN5bnBhdF9UCSpsc3BwOworCisJCSAgICAvKiBXaGVuIGEgemVyby13aWR0aCBpdGVtIG1hdGNoZWQgd2hpY2ggaGFzIGEgbmV4dGdyb3VwLAorCQkgICAgICogZG9uJ3QgcHVzaCB0aGUgaXRlbSBidXQgc2V0IG5leHRncm91cC4gKi8KKwkJICAgIGxzcHAgPSAmKFNZTl9JVEVNUyhzeW5fYnVmKVtuZXh0X21hdGNoX2lkeF0pOworCQkgICAgaWYgKG5leHRfbWF0Y2hfbV9lbmRwb3MubG51bSA9PSBjdXJyZW50X2xudW0KKwkJCSAgICAmJiBuZXh0X21hdGNoX21fZW5kcG9zLmNvbCA9PSBjdXJyZW50X2NvbAorCQkJICAgICYmIGxzcHAtPnNwX25leHRfbGlzdCAhPSBOVUxMKQorCQkgICAgeworCQkJY3VycmVudF9uZXh0X2xpc3QgPSBsc3BwLT5zcF9uZXh0X2xpc3Q7CisJCQljdXJyZW50X25leHRfZmxhZ3MgPSBsc3BwLT5zcF9mbGFnczsKKwkJCWtlZXBfbmV4dF9saXN0ID0gVFJVRTsKKwkJCXplcm9fd2lkdGhfbmV4dF9saXN0ID0gVFJVRTsKKworCQkJLyogQWRkIHRoZSBpbmRleCB0byBhIGxpc3QsIHNvIHRoYXQgd2UgY2FuIGNoZWNrCisJCQkgKiBsYXRlciB0aGF0IHdlIGRvbid0IG1hdGNoIGl0IGFnYWluIChhbmQgY2F1c2UgYW4KKwkJCSAqIGVuZGxlc3MgbG9vcCkuICovCisJCQlpZiAoZ2FfZ3JvdygmemVyb193aWR0aF9uZXh0X2dhLCAxKSA9PSBPSykKKwkJCXsKKwkJCSAgICAoKGludCAqKSh6ZXJvX3dpZHRoX25leHRfZ2EuZ2FfZGF0YSkpCisJCQkJW3plcm9fd2lkdGhfbmV4dF9nYS5nYV9sZW4rK10gPSBuZXh0X21hdGNoX2lkeDsKKwkJCSAgICAtLXplcm9fd2lkdGhfbmV4dF9nYS5nYV9yb29tOworCQkJfQorCQkJbmV4dF9tYXRjaF9pZHggPSAtMTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCWN1cl9zaSA9IHB1c2hfbmV4dF9tYXRjaChjdXJfc2kpOworCQkgICAgZm91bmRfbWF0Y2ggPSBUUlVFOworCQl9CisJICAgIH0KKwl9CisKKwkvKgorCSAqIEhhbmRsZSBzZWFyY2hpbmcgZm9yIG5leHRncm91cCBtYXRjaC4KKwkgKi8KKwlpZiAoY3VycmVudF9uZXh0X2xpc3QgIT0gTlVMTCAmJiAha2VlcF9uZXh0X2xpc3QpCisJeworCSAgICAvKgorCSAgICAgKiBJZiBhIG5leHRncm91cCB3YXMgbm90IGZvdW5kLCBjb250aW51ZSBsb29raW5nIGZvciBvbmUgaWY6CisJICAgICAqIC0gdGhpcyBpcyBhbiBlbXB0eSBsaW5lIGFuZCB0aGUgInNraXBlbXB0eSIgb3B0aW9uIHdhcyBnaXZlbgorCSAgICAgKiAtIHdlIGFyZSBvbiB3aGl0ZSBzcGFjZSBhbmQgdGhlICJza2lwd2hpdGUiIG9wdGlvbiB3YXMgZ2l2ZW4KKwkgICAgICovCisJICAgIGlmICghZm91bmRfbWF0Y2gpCisJICAgIHsKKwkJbGluZSA9IHN5bl9nZXRjdXJsaW5lKCk7CisJCWlmICgoKGN1cnJlbnRfbmV4dF9mbGFncyAmIEhMX1NLSVBXSElURSkKKwkJCSAgICAmJiB2aW1faXN3aGl0ZShsaW5lW2N1cnJlbnRfY29sXSkpCisJCQl8fCAoKGN1cnJlbnRfbmV4dF9mbGFncyAmIEhMX1NLSVBFTVBUWSkKKwkJCSAgICAmJiAqbGluZSA9PSBOVUwpKQorCQkgICAgYnJlYWs7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBJZiBhIG5leHRncm91cCB3YXMgZm91bmQ6IFVzZSBpdCwgYW5kIGNvbnRpbnVlIGxvb2tpbmcgZm9yCisJICAgICAqIGNvbnRhaW5lZCBtYXRjaGVzLgorCSAgICAgKiBJZiBhIG5leHRncm91cCB3YXMgbm90IGZvdW5kOiBDb250aW51ZSBsb29raW5nIGZvciBhIG5vcm1hbAorCSAgICAgKiBtYXRjaC4KKwkgICAgICogV2hlbiBkaWQgc2V0IGN1cnJlbnRfbmV4dF9saXN0IGZvciBhIHplcm8td2lkdGggaXRlbSBhbmQgbm8KKwkgICAgICogbWF0Y2ggd2FzIGZvdW5kIGRvbid0IGxvb3AgKHdvdWxkIGdldCBzdHVjaykuCisJICAgICAqLworCSAgICBjdXJyZW50X25leHRfbGlzdCA9IE5VTEw7CisJICAgIG5leHRfbWF0Y2hfaWR4ID0gLTE7CisJICAgIGlmICghemVyb193aWR0aF9uZXh0X2xpc3QpCisJCWZvdW5kX21hdGNoID0gVFJVRTsKKwl9CisKKyAgICB9IHdoaWxlIChmb3VuZF9tYXRjaCk7CisKKyAgICAvKgorICAgICAqIFVzZSBhdHRyaWJ1dGVzIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUsIGlmIHdpdGhpbiBpdHMgaGlnaGxpZ2h0aW5nLgorICAgICAqIElmIG5vdCwgdXNlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgY3VycmVudC1idXQtb25lIHN0YXRlLCBldGMuCisgICAgICovCisgICAgY3VycmVudF9hdHRyID0gMDsKKyNpZmRlZiBGRUFUX0VWQUwKKyAgICBjdXJyZW50X2lkID0gMDsKKyAgICBjdXJyZW50X3RyYW5zX2lkID0gMDsKKyNlbmRpZgorICAgIGlmIChjdXJfc2kgIT0gTlVMTCkKKyAgICB7CisJZm9yIChpZHggPSBjdXJyZW50X3N0YXRlLmdhX2xlbiAtIDE7IGlkeCA+PSAwOyAtLWlkeCkKKwl7CisJICAgIHNpcCA9ICZDVVJfU1RBVEUoaWR4KTsKKwkgICAgaWYgKChjdXJyZW50X2xudW0gPiBzaXAtPnNpX2hfc3RhcnRwb3MubG51bQorCQkJfHwgKGN1cnJlbnRfbG51bSA9PSBzaXAtPnNpX2hfc3RhcnRwb3MubG51bQorCQkJICAgICYmIGN1cnJlbnRfY29sID49IHNpcC0+c2lfaF9zdGFydHBvcy5jb2wpKQorCQkgICAgJiYgKHNpcC0+c2lfaF9lbmRwb3MubG51bSA9PSAwCisJCQl8fCBjdXJyZW50X2xudW0gPCBzaXAtPnNpX2hfZW5kcG9zLmxudW0KKwkJCXx8IChjdXJyZW50X2xudW0gPT0gc2lwLT5zaV9oX2VuZHBvcy5sbnVtCisJCQkgICAgJiYgY3VycmVudF9jb2wgPCBzaXAtPnNpX2hfZW5kcG9zLmNvbCkpKQorCSAgICB7CisJCWN1cnJlbnRfYXR0ciA9IHNpcC0+c2lfYXR0cjsKKyNpZmRlZiBGRUFUX0VWQUwKKwkJY3VycmVudF9pZCA9IHNpcC0+c2lfaWQ7CisJCWN1cnJlbnRfdHJhbnNfaWQgPSBzaXAtPnNpX3RyYW5zX2lkOworI2VuZGlmCisJCWJyZWFrOworCSAgICB9CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgZW5kIG9mIGN1cnJlbnQgc3RhdGUgKGFuZCB0aGUgc3RhdGVzIGJlZm9yZSBpdCkgYXQgdGhlCisJICogbmV4dCBjb2x1bW4uICBEb24ndCBkbyB0aGlzIGZvciBzeW5jaW5nLCBiZWNhdXNlIHdlIHdvdWxkIG1pc3MgYQorCSAqIHNpbmdsZSBjaGFyYWN0ZXIgbWF0Y2guCisJICogRmlyc3QgY2hlY2sgaWYgdGhlIGN1cnJlbnQgc3RhdGUgZW5kcyBhdCB0aGUgY3VycmVudCBjb2x1bW4uICBJdAorCSAqIG1heSBiZSBmb3IgYW4gZW1wdHkgbWF0Y2ggYW5kIGEgY29udGFpbmluZyBpdGVtIG1pZ2h0IGVuZCBpbiB0aGUKKwkgKiBjdXJyZW50IGNvbHVtbi4KKwkgKi8KKwlpZiAoIXN5bmNpbmcpCisJeworCSAgICBjaGVja19zdGF0ZV9lbmRzKCk7CisJICAgIGlmIChjdXJyZW50X3N0YXRlLmdhX2xlbiA+IDApCisJICAgIHsKKwkJKytjdXJyZW50X2NvbDsKKwkJY2hlY2tfc3RhdGVfZW5kcygpOworCQktLWN1cnJlbnRfY29sOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qIG5leHRncm91cCBlbmRzIGF0IGVuZCBvZiBsaW5lLCB1bmxlc3MgInNraXBubCIgb3IgInNraXBlbXRweSIgcHJlc2VudCAqLworICAgIGlmIChjdXJyZW50X25leHRfbGlzdCAhPSBOVUxMCisJICAgICYmIHN5bl9nZXRjdXJsaW5lKClbY3VycmVudF9jb2wgKyAxXSA9PSBOVUwKKwkgICAgJiYgIShjdXJyZW50X25leHRfZmxhZ3MgJiAoSExfU0tJUE5MIHwgSExfU0tJUEVNUFRZKSkpCisJY3VycmVudF9uZXh0X2xpc3QgPSBOVUxMOworCisgICAgaWYgKHplcm9fd2lkdGhfbmV4dF9nYS5nYV9sZW4gPiAwKQorCWdhX2NsZWFyKCZ6ZXJvX3dpZHRoX25leHRfZ2EpOworCisgICAgLyogTm8gbG9uZ2VyIG5lZWQgZXh0ZXJuYWwgbWF0Y2hlcy4gIEJ1dCBrZWVwIG5leHRfbWF0Y2hfZXh0bWF0Y2guICovCisgICAgdW5yZWZfZXh0bWF0Y2gocmVfZXh0bWF0Y2hfb3V0KTsKKyAgICByZV9leHRtYXRjaF9vdXQgPSBOVUxMOworICAgIHVucmVmX2V4dG1hdGNoKGN1cl9leHRtYXRjaCk7CisKKyAgICByZXR1cm4gY3VycmVudF9hdHRyOworfQorCisKKy8qCisgKiBDaGVjayBpZiB3ZSBhbHJlYWR5IG1hdGNoZWQgcGF0dGVybiAiaWR4IiBhdCB0aGUgY3VycmVudCBjb2x1bW4uCisgKi8KKyAgICBzdGF0aWMgaW50CitkaWRfbWF0Y2hfYWxyZWFkeShpZHgsIGdhcCkKKyAgICBpbnQJCWlkeDsKKyAgICBnYXJyYXlfVAkqZ2FwOworeworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IGN1cnJlbnRfc3RhdGUuZ2FfbGVuOyAtLWkgPj0gMDsgKQorCWlmIChDVVJfU1RBVEUoaSkuc2lfbV9zdGFydGNvbCA9PSAoaW50KWN1cnJlbnRfY29sCisJCSYmIENVUl9TVEFURShpKS5zaV9tX2xudW0gPT0gKGludCljdXJyZW50X2xudW0KKwkJJiYgQ1VSX1NUQVRFKGkpLnNpX2lkeCA9PSBpZHgpCisJICAgIHJldHVybiBUUlVFOworCisgICAgLyogWmVyby13aWR0aCBtYXRjaGVzIHdpdGggYSBuZXh0Z3JvdXAgYXJndW1lbnQgYXJlIG5vdCBwdXQgb24gdGhlIHN5bnRheAorICAgICAqIHN0YWNrLCBhbmQgY2FuIG9ubHkgYmUgbWF0Y2hlZCBvbmNlIGFueXdheS4gKi8KKyAgICBmb3IgKGkgPSBnYXAtPmdhX2xlbjsgLS1pID49IDA7ICkKKwlpZiAoKChpbnQgKikoZ2FwLT5nYV9kYXRhKSlbaV0gPT0gaWR4KQorCSAgICByZXR1cm4gVFJVRTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFB1c2ggdGhlIG5leHQgbWF0Y2ggb250byB0aGUgc3RhY2suCisgKi8KKyAgICBzdGF0aWMgc3RhdGVpdGVtX1QgKgorcHVzaF9uZXh0X21hdGNoKGN1cl9zaSkKKyAgICBzdGF0ZWl0ZW1fVAkqY3VyX3NpOworeworICAgIHN5bnBhdF9UCSpzcHA7CisKKyAgICBzcHAgPSAmKFNZTl9JVEVNUyhzeW5fYnVmKVtuZXh0X21hdGNoX2lkeF0pOworCisgICAgLyoKKyAgICAgKiBQdXNoIHRoZSBpdGVtIGluIGN1cnJlbnRfc3RhdGUgc3RhY2s7CisgICAgICovCisgICAgaWYgKHB1c2hfY3VycmVudF9zdGF0ZShuZXh0X21hdGNoX2lkeCkgPT0gT0spCisgICAgeworCS8qCisJICogSWYgaXQncyBhIHN0YXJ0LXNraXAtZW5kIHR5cGUgdGhhdCBjcm9zc2VzIGxpbmVzLCBmaWd1cmUgb3V0IGhvdworCSAqIG11Y2ggaXQgY29udGludWVzIGluIHRoaXMgbGluZS4gIE90aGVyd2lzZSBqdXN0IGZpbGwgaW4gdGhlIGxlbmd0aC4KKwkgKi8KKwljdXJfc2kgPSAmQ1VSX1NUQVRFKGN1cnJlbnRfc3RhdGUuZ2FfbGVuIC0gMSk7CisJY3VyX3NpLT5zaV9oX3N0YXJ0cG9zID0gbmV4dF9tYXRjaF9oX3N0YXJ0cG9zOworCWN1cl9zaS0+c2lfbV9zdGFydGNvbCA9IGN1cnJlbnRfY29sOworCWN1cl9zaS0+c2lfbV9sbnVtID0gY3VycmVudF9sbnVtOworCWN1cl9zaS0+c2lfZmxhZ3MgPSBzcHAtPnNwX2ZsYWdzOworCWN1cl9zaS0+c2lfbmV4dF9saXN0ID0gc3BwLT5zcF9uZXh0X2xpc3Q7CisJY3VyX3NpLT5zaV9leHRtYXRjaCA9IHJlZl9leHRtYXRjaChuZXh0X21hdGNoX2V4dG1hdGNoKTsKKwlpZiAoc3BwLT5zcF90eXBlID09IFNQVFlQRV9TVEFSVCAmJiAhKHNwcC0+c3BfZmxhZ3MgJiBITF9PTkVMSU5FKSkKKwl7CisJICAgIC8qIFRyeSB0byBmaW5kIHRoZSBlbmQgcGF0dGVybiBpbiB0aGUgY3VycmVudCBsaW5lICovCisJICAgIHVwZGF0ZV9zaV9lbmQoY3VyX3NpLCAoaW50KShuZXh0X21hdGNoX21fZW5kcG9zLmNvbCksIFRSVUUpOworCSAgICBjaGVja19rZWVwZW5kKCk7CisJfQorCWVsc2UKKwl7CisJICAgIGN1cl9zaS0+c2lfbV9lbmRwb3MgPSBuZXh0X21hdGNoX21fZW5kcG9zOworCSAgICBjdXJfc2ktPnNpX2hfZW5kcG9zID0gbmV4dF9tYXRjaF9oX2VuZHBvczsKKwkgICAgY3VyX3NpLT5zaV9lbmRzID0gVFJVRTsKKwkgICAgY3VyX3NpLT5zaV9mbGFncyB8PSBuZXh0X21hdGNoX2ZsYWdzOworCSAgICBjdXJfc2ktPnNpX2VvZV9wb3MgPSBuZXh0X21hdGNoX2VvZV9wb3M7CisJICAgIGN1cl9zaS0+c2lfZW5kX2lkeCA9IG5leHRfbWF0Y2hfZW5kX2lkeDsKKwl9CisJaWYgKGtlZXBlbmRfbGV2ZWwgPCAwICYmIChjdXJfc2ktPnNpX2ZsYWdzICYgSExfS0VFUEVORCkpCisJICAgIGtlZXBlbmRfbGV2ZWwgPSBjdXJyZW50X3N0YXRlLmdhX2xlbiAtIDE7CisJY2hlY2tfa2VlcGVuZCgpOworCXVwZGF0ZV9zaV9hdHRyKGN1cnJlbnRfc3RhdGUuZ2FfbGVuIC0gMSk7CisKKwkvKgorCSAqIElmIHRoZSBzdGFydCBwYXR0ZXJuIGhhcyBhbm90aGVyIGhpZ2hsaWdodCBncm91cCwgcHVzaCBhbm90aGVyIGl0ZW0KKwkgKiBvbiB0aGUgc3RhY2sgZm9yIHRoZSBzdGFydCBwYXR0ZXJuLgorCSAqLworCWlmICgJICAgc3BwLT5zcF90eXBlID09IFNQVFlQRV9TVEFSVAorCQkmJiBzcHAtPnNwX3N5bl9tYXRjaF9pZCAhPSAwCisJCSYmIHB1c2hfY3VycmVudF9zdGF0ZShuZXh0X21hdGNoX2lkeCkgPT0gT0spCisJeworCSAgICBjdXJfc2kgPSAmQ1VSX1NUQVRFKGN1cnJlbnRfc3RhdGUuZ2FfbGVuIC0gMSk7CisJICAgIGN1cl9zaS0+c2lfaF9zdGFydHBvcyA9IG5leHRfbWF0Y2hfaF9zdGFydHBvczsKKwkgICAgY3VyX3NpLT5zaV9tX3N0YXJ0Y29sID0gY3VycmVudF9jb2w7CisJICAgIGN1cl9zaS0+c2lfbV9sbnVtID0gY3VycmVudF9sbnVtOworCSAgICBjdXJfc2ktPnNpX21fZW5kcG9zID0gbmV4dF9tYXRjaF9lb3NfcG9zOworCSAgICBjdXJfc2ktPnNpX2hfZW5kcG9zID0gbmV4dF9tYXRjaF9lb3NfcG9zOworCSAgICBjdXJfc2ktPnNpX2VuZHMgPSBUUlVFOworCSAgICBjdXJfc2ktPnNpX2VuZF9pZHggPSAwOworCSAgICBjdXJfc2ktPnNpX2ZsYWdzID0gSExfTUFUQ0g7CisJICAgIGN1cl9zaS0+c2lfbmV4dF9saXN0ID0gTlVMTDsKKwkgICAgY2hlY2tfa2VlcGVuZCgpOworCSAgICB1cGRhdGVfc2lfYXR0cihjdXJyZW50X3N0YXRlLmdhX2xlbiAtIDEpOworCX0KKyAgICB9CisKKyAgICBuZXh0X21hdGNoX2lkeCA9IC0xOwkvKiB0cnkgb3RoZXIgbWF0Y2ggbmV4dCB0aW1lICovCisKKyAgICByZXR1cm4gY3VyX3NpOworfQorCisvKgorICogQ2hlY2sgZm9yIGVuZCBvZiBjdXJyZW50IHN0YXRlIChhbmQgdGhlIHN0YXRlcyBiZWZvcmUgaXQpLgorICovCisgICAgc3RhdGljIHZvaWQKK2NoZWNrX3N0YXRlX2VuZHMoKQoreworICAgIHN0YXRlaXRlbV9UCSpjdXJfc2k7CisgICAgaW50CQloYWRfZXh0ZW5kID0gRkFMU0U7CisKKyAgICBjdXJfc2kgPSAmQ1VSX1NUQVRFKGN1cnJlbnRfc3RhdGUuZ2FfbGVuIC0gMSk7CisgICAgZm9yICg7OykKKyAgICB7CisJaWYgKGN1cl9zaS0+c2lfZW5kcworCQkmJiAoY3VyX3NpLT5zaV9tX2VuZHBvcy5sbnVtIDwgY3VycmVudF9sbnVtCisJCSAgICB8fCAoY3VyX3NpLT5zaV9tX2VuZHBvcy5sbnVtID09IGN1cnJlbnRfbG51bQorCQkJJiYgY3VyX3NpLT5zaV9tX2VuZHBvcy5jb2wgPD0gY3VycmVudF9jb2wpKSkKKwl7CisJICAgIC8qCisJICAgICAqIElmIHRoZXJlIGlzIGFuIGVuZCBwYXR0ZXJuIGdyb3VwIElELCBoaWdobGlnaHQgdGhlIGVuZCBwYXR0ZXJuCisJICAgICAqIG5vdy4gIE5vIG5lZWQgdG8gcG9wIHRoZSBjdXJyZW50IGl0ZW0gZnJvbSB0aGUgc3RhY2suCisJICAgICAqIE9ubHkgZG8gdGhpcyBpZiB0aGUgZW5kIHBhdHRlcm4gY29udGludWVzIGJleW9uZCB0aGUgY3VycmVudAorCSAgICAgKiBwb3NpdGlvbi4KKwkgICAgICovCisJICAgIGlmIChjdXJfc2ktPnNpX2VuZF9pZHgKKwkJICAgICYmIChjdXJfc2ktPnNpX2VvZV9wb3MubG51bSA+IGN1cnJlbnRfbG51bQorCQkJfHwgKGN1cl9zaS0+c2lfZW9lX3Bvcy5sbnVtID09IGN1cnJlbnRfbG51bQorCQkJICAgICYmIGN1cl9zaS0+c2lfZW9lX3Bvcy5jb2wgPiBjdXJyZW50X2NvbCkpKQorCSAgICB7CisJCWN1cl9zaS0+c2lfaWR4ID0gY3VyX3NpLT5zaV9lbmRfaWR4OworCQljdXJfc2ktPnNpX2VuZF9pZHggPSAwOworCQljdXJfc2ktPnNpX21fZW5kcG9zID0gY3VyX3NpLT5zaV9lb2VfcG9zOworCQljdXJfc2ktPnNpX2hfZW5kcG9zID0gY3VyX3NpLT5zaV9lb2VfcG9zOworCQljdXJfc2ktPnNpX2ZsYWdzIHw9IEhMX01BVENIOworCQl1cGRhdGVfc2lfYXR0cihjdXJyZW50X3N0YXRlLmdhX2xlbiAtIDEpOworCQlicmVhazsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyogaGFuZGxlIG5leHRfbGlzdCwgdW5sZXNzIGF0IGVuZCBvZiBsaW5lIGFuZCBubyAic2tpcG5sIiBvcgorCQkgKiAic2tpcGVtcHR5IiAqLworCQljdXJyZW50X25leHRfbGlzdCA9IGN1cl9zaS0+c2lfbmV4dF9saXN0OworCQljdXJyZW50X25leHRfZmxhZ3MgPSBjdXJfc2ktPnNpX2ZsYWdzOworCQlpZiAoIShjdXJyZW50X25leHRfZmxhZ3MgJiAoSExfU0tJUE5MIHwgSExfU0tJUEVNUFRZKSkKKwkJCSYmIHN5bl9nZXRjdXJsaW5lKClbY3VycmVudF9jb2xdID09IE5VTCkKKwkJICAgIGN1cnJlbnRfbmV4dF9saXN0ID0gTlVMTDsKKworCQkvKiBXaGVuIHRoZSBlbmRlZCBpdGVtIGhhcyAiZXh0ZW5kIiwgYW5vdGhlciBpdGVtIHdpdGgKKwkJICogImtlZXBlbmQiIG5vdyBuZWVkcyB0byBjaGVjayBmb3IgaXRzIGVuZC4gKi8KKwkJIGlmIChjdXJfc2ktPnNpX2ZsYWdzICYgSExfRVhURU5EKQorCQkgICAgIGhhZF9leHRlbmQgPSBUUlVFOworCisJCXBvcF9jdXJyZW50X3N0YXRlKCk7CisKKwkJaWYgKGN1cnJlbnRfc3RhdGUuZ2FfbGVuID09IDApCisJCSAgICBicmVhazsKKworCQlpZiAoaGFkX2V4dGVuZCkKKwkJeworCQkgICAgc3luX3VwZGF0ZV9lbmRzKEZBTFNFKTsKKwkJICAgIGlmIChjdXJyZW50X3N0YXRlLmdhX2xlbiA9PSAwKQorCQkJYnJlYWs7CisJCX0KKworCQljdXJfc2kgPSAmQ1VSX1NUQVRFKGN1cnJlbnRfc3RhdGUuZ2FfbGVuIC0gMSk7CisKKwkJLyoKKwkJICogT25seSBmb3IgYSByZWdpb24gdGhlIHNlYXJjaCBmb3IgdGhlIGVuZCBjb250aW51ZXMgYWZ0ZXIKKwkJICogdGhlIGVuZCBvZiB0aGUgY29udGFpbmVkIGl0ZW0uICBJZiB0aGUgY29udGFpbmVkIG1hdGNoCisJCSAqIGluY2x1ZGVkIHRoZSBlbmQtb2YtbGluZSwgYnJlYWsgaGVyZSwgdGhlIHJlZ2lvbiBjb250aW51ZXMuCisJCSAqIERvbid0IGRvIHRoaXMgd2hlbjoKKwkJICogLSAia2VlcGVuZCIgaXMgdXNlZCBmb3IgdGhlIGNvbnRhaW5lZCBpdGVtCisJCSAqIC0gbm90IGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgKGNvdWxkIGJlIGVuZD0ieCQibWU9ZS0xKS4KKwkJICogLSAiZXhjbHVkZW5sIiBpcyB1c2VkIChITF9IQVNfRU9MIHdvbid0IGJlIHNldCkKKwkJICovCisJCWlmIChjdXJfc2ktPnNpX2lkeCA+PSAwCisJCQkmJiBTWU5fSVRFTVMoc3luX2J1ZilbY3VyX3NpLT5zaV9pZHhdLnNwX3R5cGUKKwkJCQkJCQkgICAgICAgPT0gU1BUWVBFX1NUQVJUCisJCQkmJiAhKGN1cl9zaS0+c2lfZmxhZ3MgJiAoSExfTUFUQ0ggfCBITF9LRUVQRU5EKSkpCisJCXsKKwkJICAgIHVwZGF0ZV9zaV9lbmQoY3VyX3NpLCAoaW50KWN1cnJlbnRfY29sLCBUUlVFKTsKKwkJICAgIGNoZWNrX2tlZXBlbmQoKTsKKwkJICAgIGlmICgoY3VycmVudF9uZXh0X2ZsYWdzICYgSExfSEFTX0VPTCkKKwkJCSAgICAmJiBrZWVwZW5kX2xldmVsIDwgMAorCQkJICAgICYmIHN5bl9nZXRjdXJsaW5lKClbY3VycmVudF9jb2xdID09IE5VTCkKKwkJCWJyZWFrOworCQl9CisJICAgIH0KKwl9CisJZWxzZQorCSAgICBicmVhazsKKyAgICB9Cit9CisKKy8qCisgKiBVcGRhdGUgYW4gZW50cnkgaW4gdGhlIGN1cnJlbnRfc3RhdGUgc3RhY2sgZm9yIGEgbWF0Y2ggb3IgcmVnaW9uLiAgVGhpcworICogZmlsbHMgaW4gc2lfYXR0ciwgc2lfbmV4dF9saXN0IGFuZCBzaV9jb250X2xpc3QuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordXBkYXRlX3NpX2F0dHIoaWR4KQorICAgIGludAkgICAgaWR4OworeworICAgIHN0YXRlaXRlbV9UCSpzaXAgPSAmQ1VSX1NUQVRFKGlkeCk7CisgICAgc3lucGF0X1QJKnNwcDsKKworICAgIHNwcCA9ICYoU1lOX0lURU1TKHN5bl9idWYpW3NpcC0+c2lfaWR4XSk7CisgICAgaWYgKHNpcC0+c2lfZmxhZ3MgJiBITF9NQVRDSCkKKwlzaXAtPnNpX2lkID0gc3BwLT5zcF9zeW5fbWF0Y2hfaWQ7CisgICAgZWxzZQorCXNpcC0+c2lfaWQgPSBzcHAtPnNwX3N5bi5pZDsKKyAgICBzaXAtPnNpX2F0dHIgPSBzeW5faWQyYXR0cihzaXAtPnNpX2lkKTsKKyAgICBzaXAtPnNpX3RyYW5zX2lkID0gc2lwLT5zaV9pZDsKKyAgICBpZiAoc2lwLT5zaV9mbGFncyAmIEhMX01BVENIKQorCXNpcC0+c2lfY29udF9saXN0ID0gTlVMTDsKKyAgICBlbHNlCisJc2lwLT5zaV9jb250X2xpc3QgPSBzcHAtPnNwX2NvbnRfbGlzdDsKKworICAgIC8qCisgICAgICogRm9yIHRyYW5zcGFyZW50IGl0ZW1zLCB0YWtlIGF0dHIgZnJvbSBvdXRlciBpdGVtLgorICAgICAqIEFsc28gdGFrZSBjb250X2xpc3QsIGlmIHRoZXJlIGlzIG5vbmUuCisgICAgICogRG9uJ3QgZG8gdGhpcyBmb3IgdGhlIG1hdGNoZ3JvdXAgb2YgYSBzdGFydCBvciBlbmQgcGF0dGVybi4KKyAgICAgKi8KKyAgICBpZiAoKHNwcC0+c3BfZmxhZ3MgJiBITF9UUkFOU1ApICYmICEoc2lwLT5zaV9mbGFncyAmIEhMX01BVENIKSkKKyAgICB7CisJaWYgKGlkeCA9PSAwKQorCXsKKwkgICAgc2lwLT5zaV9hdHRyID0gMDsKKwkgICAgc2lwLT5zaV90cmFuc19pZCA9IDA7CisJICAgIGlmIChzaXAtPnNpX2NvbnRfbGlzdCA9PSBOVUxMKQorCQlzaXAtPnNpX2NvbnRfbGlzdCA9IElEX0xJU1RfQUxMOworCX0KKwllbHNlCisJeworCSAgICBzaXAtPnNpX2F0dHIgPSBDVVJfU1RBVEUoaWR4IC0gMSkuc2lfYXR0cjsKKwkgICAgc2lwLT5zaV90cmFuc19pZCA9IENVUl9TVEFURShpZHggLSAxKS5zaV90cmFuc19pZDsKKwkgICAgaWYgKHNpcC0+c2lfY29udF9saXN0ID09IE5VTEwpCisJICAgIHsKKwkJc2lwLT5zaV9mbGFncyB8PSBITF9UUkFOU19DT05UOworCQlzaXAtPnNpX2NvbnRfbGlzdCA9IENVUl9TVEFURShpZHggLSAxKS5zaV9jb250X2xpc3Q7CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKgorICogQ2hlY2sgdGhlIGN1cnJlbnQgc3RhY2sgZm9yIHBhdHRlcm5zIHdpdGggImtlZXBlbmQiIGZsYWcuCisgKiBQcm9wYWdhdGUgdGhlIG1hdGNoLWVuZCB0byBjb250YWluZWQgaXRlbXMsIHVudGlsIGEgInNraXBlbmQiIGl0ZW0gaXMgZm91bmQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2hlY2tfa2VlcGVuZCgpCit7CisgICAgaW50CQlpOworICAgIGxwb3NfVAltYXhwb3M7CisgICAgc3RhdGVpdGVtX1QJKnNpcDsKKworICAgIC8qCisgICAgICogVGhpcyBjaGVjayBjYW4gY29uc3VtZSBhIGxvdCBvZiB0aW1lOyBvbmx5IGRvIGl0IGZyb20gdGhlIGxldmVsIHdoZXJlCisgICAgICogdGhlcmUgcmVhbGx5IGlzIGEga2VlcGVuZC4KKyAgICAgKi8KKyAgICBpZiAoa2VlcGVuZF9sZXZlbCA8IDApCisJcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBGaW5kIHRoZSBsYXN0IGluZGV4IG9mIGFuICJleHRlbmQiIGl0ZW0uICAia2VlcGVuZCIgaXRlbXMgYmVmb3JlIHRoYXQKKyAgICAgKiB3b24ndCBkbyBhbnl0aGluZy4gIElmIHRoZXJlIGlzIG5vICJleHRlbmQiIGl0ZW0gImkiIHdpbGwgYmUKKyAgICAgKiAia2VlcGVuZF9sZXZlbCIgYW5kIGFsbCAia2VlcGVuZCIgaXRlbXMgd2lsbCB3b3JrIG5vcm1hbGx5LgorICAgICAqLworICAgIGZvciAoaSA9IGN1cnJlbnRfc3RhdGUuZ2FfbGVuIC0gMTsgaSA+IGtlZXBlbmRfbGV2ZWw7IC0taSkKKwlpZiAoQ1VSX1NUQVRFKGkpLnNpX2ZsYWdzICYgSExfRVhURU5EKQorCSAgICBicmVhazsKKworICAgIG1heHBvcy5sbnVtID0gMDsKKyAgICBmb3IgKCA7IGkgPCBjdXJyZW50X3N0YXRlLmdhX2xlbjsgKytpKQorICAgIHsKKwlzaXAgPSAmQ1VSX1NUQVRFKGkpOworCWlmIChtYXhwb3MubG51bSAhPSAwKQorCXsKKwkgICAgbGltaXRfcG9zX3plcm8oJnNpcC0+c2lfbV9lbmRwb3MsICZtYXhwb3MpOworCSAgICBsaW1pdF9wb3NfemVybygmc2lwLT5zaV9oX2VuZHBvcywgJm1heHBvcyk7CisJICAgIGxpbWl0X3Bvc196ZXJvKCZzaXAtPnNpX2VvZV9wb3MsICZtYXhwb3MpOworCSAgICBzaXAtPnNpX2VuZHMgPSBUUlVFOworCX0KKwlpZiAoc2lwLT5zaV9lbmRzCisJCSYmIChzaXAtPnNpX2ZsYWdzICYgSExfS0VFUEVORCkKKwkJJiYgKG1heHBvcy5sbnVtID09IDAKKwkJICAgIHx8IG1heHBvcy5sbnVtID4gc2lwLT5zaV9tX2VuZHBvcy5sbnVtCisJCSAgICB8fCAobWF4cG9zLmxudW0gPT0gc2lwLT5zaV9tX2VuZHBvcy5sbnVtCisJCQkmJiBtYXhwb3MuY29sID4gc2lwLT5zaV9tX2VuZHBvcy5jb2wpKSkKKwkgICAgbWF4cG9zID0gc2lwLT5zaV9tX2VuZHBvczsKKyAgICB9Cit9CisKKy8qCisgKiBVcGRhdGUgYW4gZW50cnkgaW4gdGhlIGN1cnJlbnRfc3RhdGUgc3RhY2sgZm9yIGEgc3RhcnQtc2tpcC1lbmQgcGF0dGVybi4KKyAqIFRoaXMgZmluZHMgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBpdGVtLCBpZiBpdCdzIGluIHRoZSBjdXJyZW50IGxpbmUuCisgKgorICogUmV0dXJuIHRoZSBmbGFncyBmb3IgdGhlIG1hdGNoZWQgRU5ELgorICovCisgICAgc3RhdGljIHZvaWQKK3VwZGF0ZV9zaV9lbmQoc2lwLCBzdGFydGNvbCwgZm9yY2UpCisgICAgc3RhdGVpdGVtX1QJKnNpcDsKKyAgICBpbnQJCXN0YXJ0Y29sOyAgIC8qIHdoZXJlIHRvIHN0YXJ0IHNlYXJjaGluZyBmb3IgdGhlIGVuZCAqLworICAgIGludAkJZm9yY2U7CSAgICAvKiB3aGVuIFRSVUUgb3ZlcnJ1bGUgYSBwcmV2aW91cyBlbmQgKi8KK3sKKyAgICBscG9zX1QJc3RhcnRwb3M7CisgICAgbHBvc19UCWVuZHBvczsKKyAgICBscG9zX1QJaGxfZW5kcG9zOworICAgIGxwb3NfVAllbmRfZW5kcG9zOworICAgIGludAkJZW5kX2lkeDsKKworICAgIC8qIERvbid0IHVwZGF0ZSB3aGVuIGl0J3MgYWxyZWFkeSBkb25lLiAgQ2FuIGJlIGEgbWF0Y2ggb2YgYW4gZW5kIHBhdHRlcm4KKyAgICAgKiB0aGF0IHN0YXJ0ZWQgaW4gYSBwcmV2aW91cyBsaW5lLiAgV2F0Y2ggb3V0OiBjYW4gYWxzbyBiZSBhICJrZWVwZW5kIgorICAgICAqIGZyb20gYSBjb250YWluaW5nIGl0ZW0uICovCisgICAgaWYgKCFmb3JjZSAmJiBzaXAtPnNpX21fZW5kcG9zLmxudW0gPj0gY3VycmVudF9sbnVtKQorCXJldHVybjsKKworICAgIC8qCisgICAgICogV2UgbmVlZCB0byBmaW5kIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbi4gIEl0IG1heSBjb250aW51ZSBpbiB0aGUgbmV4dAorICAgICAqIGxpbmUuCisgICAgICovCisgICAgZW5kX2lkeCA9IDA7CisgICAgc3RhcnRwb3MubG51bSA9IGN1cnJlbnRfbG51bTsKKyAgICBzdGFydHBvcy5jb2wgPSBzdGFydGNvbDsKKyAgICBmaW5kX2VuZHBvcyhzaXAtPnNpX2lkeCwgJnN0YXJ0cG9zLCAmZW5kcG9zLCAmaGxfZW5kcG9zLAorCQkgICAmKHNpcC0+c2lfZmxhZ3MpLCAmZW5kX2VuZHBvcywgJmVuZF9pZHgsIHNpcC0+c2lfZXh0bWF0Y2gpOworCisgICAgaWYgKGVuZHBvcy5sbnVtID09IDApCisgICAgeworCS8qIE5vIGVuZCBwYXR0ZXJuIG1hdGNoZWQuICovCisJaWYgKFNZTl9JVEVNUyhzeW5fYnVmKVtzaXAtPnNpX2lkeF0uc3BfZmxhZ3MgJiBITF9PTkVMSU5FKQorCXsKKwkgICAgLyogYSAib25lbGluZSIgbmV2ZXIgY29udGludWVzIGluIHRoZSBuZXh0IGxpbmUgKi8KKwkgICAgc2lwLT5zaV9lbmRzID0gVFJVRTsKKwkgICAgc2lwLT5zaV9tX2VuZHBvcy5sbnVtID0gY3VycmVudF9sbnVtOworCSAgICBzaXAtPnNpX21fZW5kcG9zLmNvbCA9IChjb2xucl9UKVNUUkxFTihzeW5fZ2V0Y3VybGluZSgpKTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyogY29udGludWVzIGluIHRoZSBuZXh0IGxpbmUgKi8KKwkgICAgc2lwLT5zaV9lbmRzID0gRkFMU0U7CisJICAgIHNpcC0+c2lfbV9lbmRwb3MubG51bSA9IDA7CisJfQorCXNpcC0+c2lfaF9lbmRwb3MgPSBzaXAtPnNpX21fZW5kcG9zOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIG1hdGNoIHdpdGhpbiB0aGlzIGxpbmUgKi8KKwlzaXAtPnNpX21fZW5kcG9zID0gZW5kcG9zOworCXNpcC0+c2lfaF9lbmRwb3MgPSBobF9lbmRwb3M7CisJc2lwLT5zaV9lb2VfcG9zID0gZW5kX2VuZHBvczsKKwlzaXAtPnNpX2VuZHMgPSBUUlVFOworCXNpcC0+c2lfZW5kX2lkeCA9IGVuZF9pZHg7CisgICAgfQorfQorCisvKgorICogQWRkIGEgbmV3IHN0YXRlIHRvIHRoZSBjdXJyZW50IHN0YXRlIHN0YWNrLgorICogSXQgaXMgY2xlYXJlZCBhbmQgdGhlIGluZGV4IHNldCB0byAiaWR4Ii4KKyAqIFJldHVybiBGQUlMIGlmIGl0J3Mgbm90IHBvc3NpYmxlIChvdXQgb2YgbWVtb3J5KS4KKyAqLworICAgIHN0YXRpYyBpbnQKK3B1c2hfY3VycmVudF9zdGF0ZShpZHgpCisgICAgaW50CSAgICBpZHg7Cit7CisgICAgaWYgKGdhX2dyb3coJmN1cnJlbnRfc3RhdGUsIDEpID09IEZBSUwpCisJcmV0dXJuIEZBSUw7CisgICAgdmltX21lbXNldCgmQ1VSX1NUQVRFKGN1cnJlbnRfc3RhdGUuZ2FfbGVuKSwgMCwgc2l6ZW9mKHN0YXRlaXRlbV9UKSk7CisgICAgQ1VSX1NUQVRFKGN1cnJlbnRfc3RhdGUuZ2FfbGVuKS5zaV9pZHggPSBpZHg7CisgICAgKytjdXJyZW50X3N0YXRlLmdhX2xlbjsKKyAgICAtLWN1cnJlbnRfc3RhdGUuZ2Ffcm9vbTsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50X3N0YXRlIHN0YWNrLgorICovCisgICAgc3RhdGljIHZvaWQKK3BvcF9jdXJyZW50X3N0YXRlKCkKK3sKKyAgICBpZiAoY3VycmVudF9zdGF0ZS5nYV9sZW4pCisgICAgeworCXVucmVmX2V4dG1hdGNoKENVUl9TVEFURShjdXJyZW50X3N0YXRlLmdhX2xlbiAtIDEpLnNpX2V4dG1hdGNoKTsKKwktLWN1cnJlbnRfc3RhdGUuZ2FfbGVuOworCSsrY3VycmVudF9zdGF0ZS5nYV9yb29tOworICAgIH0KKyAgICAvKiBhZnRlciB0aGUgZW5kIG9mIGEgcGF0dGVybiwgdHJ5IG1hdGNoaW5nIGEga2V5d29yZCBvciBwYXR0ZXJuICovCisgICAgbmV4dF9tYXRjaF9pZHggPSAtMTsKKworICAgIC8qIGlmIGZpcnN0IHN0YXRlIHdpdGggImtlZXBlbmQiIGlzIHBvcHBlZCwgcmVzZXQga2VlcGVuZF9sZXZlbCAqLworICAgIGlmIChrZWVwZW5kX2xldmVsID49IGN1cnJlbnRfc3RhdGUuZ2FfbGVuKQorCWtlZXBlbmRfbGV2ZWwgPSAtMTsKK30KKworLyoKKyAqIEZpbmQgdGhlIGVuZCBvZiBhIHN0YXJ0L3NraXAvZW5kIHN5bnRheCByZWdpb24gYWZ0ZXIgInN0YXJ0cG9zIi4KKyAqIE9ubHkgY2hlY2tzIG9uZSBsaW5lLgorICogQWxzbyBoYW5kbGVzIGEgbWF0Y2ggaXRlbSB0aGF0IGNvbnRpbnVlZCBmcm9tIGEgcHJldmlvdXMgbGluZS4KKyAqIElmIG5vdCBmb3VuZCwgdGhlIHN5bnRheCBpdGVtIGNvbnRpbnVlcyBpbiB0aGUgbmV4dCBsaW5lLiAgbV9lbmRwb3MtPmxudW0KKyAqIHdpbGwgYmUgMC4KKyAqIElmIGZvdW5kLCB0aGUgZW5kIG9mIHRoZSByZWdpb24gYW5kIHRoZSBlbmQgb2YgdGhlIGhpZ2hsaWdodGluZyBpcworICogY29tcHV0ZWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZmluZF9lbmRwb3MoaWR4LCBzdGFydHBvcywgbV9lbmRwb3MsIGhsX2VuZHBvcywgZmxhZ3NwLCBlbmRfZW5kcG9zLAorCQkJCQkJCSAgIGVuZF9pZHgsIHN0YXJ0X2V4dCkKKyAgICBpbnQJCWlkeDsJCS8qIGluZGV4IG9mIHRoZSBwYXR0ZXJuICovCisgICAgbHBvc19UCSpzdGFydHBvczsJLyogd2hlcmUgdG8gc3RhcnQgbG9va2luZyBmb3IgYW4gRU5EIG1hdGNoICovCisgICAgbHBvc19UCSptX2VuZHBvczsJLyogcmV0dXJuOiBlbmQgb2YgbWF0Y2ggKi8KKyAgICBscG9zX1QJKmhsX2VuZHBvczsJLyogcmV0dXJuOiBlbmQgb2YgaGlnaGxpZ2h0aW5nICovCisgICAgbG9uZwkqZmxhZ3NwOwkvKiByZXR1cm46IGZsYWdzIG9mIG1hdGNoaW5nIEVORCAqLworICAgIGxwb3NfVAkqZW5kX2VuZHBvczsJLyogcmV0dXJuOiBlbmQgb2YgZW5kIHBhdHRlcm4gbWF0Y2ggKi8KKyAgICBpbnQJCSplbmRfaWR4OwkvKiByZXR1cm46IGdyb3VwIElEIGZvciBlbmQgcGF0LiBtYXRjaCwgb3IgMCAqLworICAgIHJlZ19leHRtYXRjaF9UICpzdGFydF9leHQ7CS8qIHN1Ym1hdGNoZXMgZnJvbSB0aGUgc3RhcnQgcGF0dGVybiAqLworeworICAgIGNvbG5yX1QJbWF0Y2hjb2w7CisgICAgc3lucGF0X1QJKnNwcCwgKnNwcF9za2lwOworICAgIGludAkJc3RhcnRfaWR4OworICAgIGludAkJYmVzdF9pZHg7CisgICAgcmVnbW1hdGNoX1QJcmVnbWF0Y2g7CisgICAgcmVnbW1hdGNoX1QJYmVzdF9yZWdtYXRjaDsJICAgIC8qIHN0YXJ0cG9zL2VuZHBvcyBvZiBiZXN0IG1hdGNoICovCisgICAgbHBvc19UCXBvczsKKyAgICBjaGFyX3UJKmxpbmU7CisgICAgaW50CQloYWRfbWF0Y2ggPSBGQUxTRTsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIGJlaW5nIGNhbGxlZCB3aXRoIGEgU1RBUlQgcGF0dGVybi4KKyAgICAgKiBDYW4gaGFwcGVuIHdpdGggYSBtYXRjaCB0aGF0IGNvbnRpbnVlcyB0byB0aGUgbmV4dCBsaW5lLCBiZWNhdXNlIGl0CisgICAgICogY29udGFpbmVkIGEgcmVnaW9uLgorICAgICAqLworICAgIHNwcCA9ICYoU1lOX0lURU1TKHN5bl9idWYpW2lkeF0pOworICAgIGlmIChzcHAtPnNwX3R5cGUgIT0gU1BUWVBFX1NUQVJUKQorICAgIHsKKwkqaGxfZW5kcG9zID0gKnN0YXJ0cG9zOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbmQgdGhlIFNLSVAgb3IgZmlyc3QgRU5EIHBhdHRlcm4gYWZ0ZXIgdGhlIGxhc3QgU1RBUlQgcGF0dGVybi4KKyAgICAgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwlzcHAgPSAmKFNZTl9JVEVNUyhzeW5fYnVmKVtpZHhdKTsKKwlpZiAoc3BwLT5zcF90eXBlICE9IFNQVFlQRV9TVEFSVCkKKwkgICAgYnJlYWs7CisJKytpZHg7CisgICAgfQorCisgICAgLyoKKyAgICAgKglMb29rdXAgdGhlIFNLSVAgcGF0dGVybiAoaWYgcHJlc2VudCkKKyAgICAgKi8KKyAgICBpZiAoc3BwLT5zcF90eXBlID09IFNQVFlQRV9TS0lQKQorICAgIHsKKwlzcHBfc2tpcCA9IHNwcDsKKwkrK2lkeDsKKyAgICB9CisgICAgZWxzZQorCXNwcF9za2lwID0gTlVMTDsKKworICAgIC8qIFNldHVwIGV4dGVybmFsIG1hdGNoZXMgZm9yIHN5bl9yZWdleGVjKCkuICovCisgICAgdW5yZWZfZXh0bWF0Y2gocmVfZXh0bWF0Y2hfaW4pOworICAgIHJlX2V4dG1hdGNoX2luID0gcmVmX2V4dG1hdGNoKHN0YXJ0X2V4dCk7CisKKyAgICBtYXRjaGNvbCA9IHN0YXJ0cG9zLT5jb2w7CS8qIHN0YXJ0IGxvb2tpbmcgZm9yIGEgbWF0Y2ggYXQgc3N0YXJ0ICovCisgICAgc3RhcnRfaWR4ID0gaWR4OwkJLyogcmVtZW1iZXIgdGhlIGZpcnN0IEVORCBwYXR0ZXJuLiAqLworICAgIGJlc3RfcmVnbWF0Y2guc3RhcnRwb3NbMF0uY29sID0gMDsJCS8qIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKwkvKgorCSAqIEZpbmQgZW5kIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGZpcnN0IGFmdGVyICJtYXRjaGNvbCIuCisJICovCisJYmVzdF9pZHggPSAtMTsKKwlmb3IgKGlkeCA9IHN0YXJ0X2lkeDsgaWR4IDwgc3luX2J1Zi0+Yl9zeW5fcGF0dGVybnMuZ2FfbGVuOyArK2lkeCkKKwl7CisJICAgIGludCBsY19jb2wgPSBtYXRjaGNvbDsKKworCSAgICBzcHAgPSAmKFNZTl9JVEVNUyhzeW5fYnVmKVtpZHhdKTsKKwkgICAgaWYgKHNwcC0+c3BfdHlwZSAhPSBTUFRZUEVfRU5EKQkvKiBwYXN0IGxhc3QgRU5EIHBhdHRlcm4gKi8KKwkJYnJlYWs7CisJICAgIGxjX2NvbCAtPSBzcHAtPnNwX29mZnNldHNbU1BPX0xDX09GRl07CisJICAgIGlmIChsY19jb2wgPCAwKQorCQlsY19jb2wgPSAwOworCisJICAgIHJlZ21hdGNoLnJtbV9pYyA9IHNwcC0+c3BfaWM7CisJICAgIHJlZ21hdGNoLnJlZ3Byb2cgPSBzcHAtPnNwX3Byb2c7CisJICAgIGlmIChzeW5fcmVnZXhlYygmcmVnbWF0Y2gsIHN0YXJ0cG9zLT5sbnVtLCBsY19jb2wpKQorCSAgICB7CisJCWlmIChiZXN0X2lkeCA9PSAtMSB8fCByZWdtYXRjaC5zdGFydHBvc1swXS5jb2wKKwkJCQkJICAgICAgPCBiZXN0X3JlZ21hdGNoLnN0YXJ0cG9zWzBdLmNvbCkKKwkJeworCQkgICAgYmVzdF9pZHggPSBpZHg7CisJCSAgICBiZXN0X3JlZ21hdGNoLnN0YXJ0cG9zWzBdID0gcmVnbWF0Y2guc3RhcnRwb3NbMF07CisJCSAgICBiZXN0X3JlZ21hdGNoLmVuZHBvc1swXSA9IHJlZ21hdGNoLmVuZHBvc1swXTsKKwkJfQorCSAgICB9CisJfQorCisJLyoKKwkgKiBJZiBhbGwgZW5kIHBhdHRlcm5zIGhhdmUgYmVlbiB0cmllZCwgYW5kIHRoZXJlIGlzIG5vIG1hdGNoLCB0aGUKKwkgKiBpdGVtIGNvbnRpbnVlcyB1bnRpbCBlbmQtb2YtbGluZS4KKwkgKi8KKwlpZiAoYmVzdF9pZHggPT0gLTEpCisJICAgIGJyZWFrOworCisJLyoKKwkgKiBJZiB0aGUgc2tpcCBwYXR0ZXJuIG1hdGNoZXMgYmVmb3JlIHRoZSBlbmQgcGF0dGVybiwKKwkgKiBjb250aW51ZSBzZWFyY2hpbmcgYWZ0ZXIgdGhlIHNraXAgcGF0dGVybi4KKwkgKi8KKwlpZiAoc3BwX3NraXAgIT0gTlVMTCkKKwl7CisJICAgIGludCBsY19jb2wgPSBtYXRjaGNvbCAtIHNwcF9za2lwLT5zcF9vZmZzZXRzW1NQT19MQ19PRkZdOworCisJICAgIGlmIChsY19jb2wgPCAwKQorCQlsY19jb2wgPSAwOworCSAgICByZWdtYXRjaC5ybW1faWMgPSBzcHBfc2tpcC0+c3BfaWM7CisJICAgIHJlZ21hdGNoLnJlZ3Byb2cgPSBzcHBfc2tpcC0+c3BfcHJvZzsKKwkgICAgaWYgKHN5bl9yZWdleGVjKCZyZWdtYXRjaCwgc3RhcnRwb3MtPmxudW0sIGxjX2NvbCkKKwkJICAgICYmIHJlZ21hdGNoLnN0YXJ0cG9zWzBdLmNvbAorCQkJCQkgICAgIDw9IGJlc3RfcmVnbWF0Y2guc3RhcnRwb3NbMF0uY29sKQorCSAgICB7CisJCS8qIEFkZCBvZmZzZXQgdG8gc2tpcCBwYXR0ZXJuIG1hdGNoICovCisJCXN5bl9hZGRfZW5kX29mZigmcG9zLCAmcmVnbWF0Y2gsIHNwcF9za2lwLCBTUE9fTUVfT0ZGLCAxKTsKKworCQkvKiBJZiB0aGUgc2tpcCBwYXR0ZXJuIGdvZXMgb24gdG8gdGhlIG5leHQgbGluZSwgdGhlcmUgaXMgbm8KKwkJICogbWF0Y2ggd2l0aCBhbiBlbmQgcGF0dGVybiBpbiB0aGlzIGxpbmUuICovCisJCWlmIChwb3MubG51bSA+IHN0YXJ0cG9zLT5sbnVtKQorCQkgICAgYnJlYWs7CisKKwkJbGluZSA9IG1sX2dldF9idWYoc3luX2J1Ziwgc3RhcnRwb3MtPmxudW0sIEZBTFNFKTsKKworCQkvKiB0YWtlIGNhcmUgb2YgYW4gZW1wdHkgbWF0Y2ggb3IgbmVnYXRpdmUgb2Zmc2V0ICovCisJCWlmIChwb3MuY29sIDw9IG1hdGNoY29sKQorCQkgICAgKyttYXRjaGNvbDsKKwkJZWxzZSBpZiAocG9zLmNvbCA8PSByZWdtYXRjaC5lbmRwb3NbMF0uY29sKQorCQkgICAgbWF0Y2hjb2wgPSBwb3MuY29sOworCQllbHNlCisJCSAgICAvKiBCZSBjYXJlZnVsIG5vdCB0byBqdW1wIG92ZXIgdGhlIE5VTCBhdCB0aGUgZW5kLW9mLWxpbmUgKi8KKwkJICAgIGZvciAobWF0Y2hjb2wgPSByZWdtYXRjaC5lbmRwb3NbMF0uY29sOworCQkJICAgIGxpbmVbbWF0Y2hjb2xdICE9IE5VTCAmJiBtYXRjaGNvbCA8IHBvcy5jb2w7CisJCQkJCQkJCSAgICsrbWF0Y2hjb2wpCisJCQk7CisKKwkJLyogaWYgdGhlIHNraXAgcGF0dGVybiBpbmNsdWRlcyBlbmQtb2YtbGluZSwgYnJlYWsgaGVyZSAqLworCQlpZiAobGluZVttYXRjaGNvbF0gPT0gTlVMKQorCQkgICAgYnJlYWs7CisKKwkJY29udGludWU7CSAgICAvKiBzdGFydCB3aXRoIGZpcnN0IGVuZCBwYXR0ZXJuIGFnYWluICovCisJICAgIH0KKwl9CisKKwkvKgorCSAqIE1hdGNoIGZyb20gc3RhcnQgcGF0dGVybiB0byBlbmQgcGF0dGVybi4KKwkgKiBDb3JyZWN0IGZvciBtYXRjaCBhbmQgaGlnaGxpZ2h0IG9mZnNldCBvZiBlbmQgcGF0dGVybi4KKwkgKi8KKwlzcHAgPSAmKFNZTl9JVEVNUyhzeW5fYnVmKVtiZXN0X2lkeF0pOworCXN5bl9hZGRfZW5kX29mZihtX2VuZHBvcywgJmJlc3RfcmVnbWF0Y2gsIHNwcCwgU1BPX01FX09GRiwgMSk7CisJLyogY2FuJ3QgZW5kIGJlZm9yZSB0aGUgc3RhcnQgKi8KKwlpZiAobV9lbmRwb3MtPmxudW0gPT0gc3RhcnRwb3MtPmxudW0gJiYgbV9lbmRwb3MtPmNvbCA8IHN0YXJ0cG9zLT5jb2wpCisJICAgIG1fZW5kcG9zLT5jb2wgPSBzdGFydHBvcy0+Y29sOworCisJc3luX2FkZF9lbmRfb2ZmKGVuZF9lbmRwb3MsICZiZXN0X3JlZ21hdGNoLCBzcHAsIFNQT19IRV9PRkYsIDEpOworCS8qIGNhbid0IGVuZCBiZWZvcmUgdGhlIHN0YXJ0ICovCisJaWYgKGVuZF9lbmRwb3MtPmxudW0gPT0gc3RhcnRwb3MtPmxudW0KKwkJCQkJICAgJiYgZW5kX2VuZHBvcy0+Y29sIDwgc3RhcnRwb3MtPmNvbCkKKwkgICAgZW5kX2VuZHBvcy0+Y29sID0gc3RhcnRwb3MtPmNvbDsKKwkvKiBjYW4ndCBlbmQgYWZ0ZXIgdGhlIG1hdGNoICovCisJbGltaXRfcG9zKGVuZF9lbmRwb3MsIG1fZW5kcG9zKTsKKworCS8qCisJICogSWYgdGhlIGVuZCBncm91cCBpcyBoaWdobGlnaHRlZCBkaWZmZXJlbnRseSwgYWRqdXN0IHRoZSBwb2ludGVycy4KKwkgKi8KKwlpZiAoc3BwLT5zcF9zeW5fbWF0Y2hfaWQgIT0gc3BwLT5zcF9zeW4uaWQgJiYgc3BwLT5zcF9zeW5fbWF0Y2hfaWQgIT0gMCkKKwl7CisJICAgICplbmRfaWR4ID0gYmVzdF9pZHg7CisJICAgIGlmIChzcHAtPnNwX29mZl9mbGFncyAmICgxIDw8IChTUE9fUkVfT0ZGICsgU1BPX0NPVU5UKSkpCisJICAgIHsKKwkJaGxfZW5kcG9zLT5sbnVtID0gYmVzdF9yZWdtYXRjaC5lbmRwb3NbMF0ubG51bTsKKwkJaGxfZW5kcG9zLT5jb2wgPSBiZXN0X3JlZ21hdGNoLmVuZHBvc1swXS5jb2w7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWhsX2VuZHBvcy0+bG51bSA9IGJlc3RfcmVnbWF0Y2guc3RhcnRwb3NbMF0ubG51bTsKKwkJaGxfZW5kcG9zLT5jb2wgPSBiZXN0X3JlZ21hdGNoLnN0YXJ0cG9zWzBdLmNvbDsKKwkgICAgfQorCSAgICBobF9lbmRwb3MtPmNvbCArPSBzcHAtPnNwX29mZnNldHNbU1BPX1JFX09GRl07CisKKwkgICAgLyogY2FuJ3QgZW5kIGJlZm9yZSB0aGUgc3RhcnQgKi8KKwkgICAgaWYgKGhsX2VuZHBvcy0+bG51bSA9PSBzdGFydHBvcy0+bG51bQorCQkJCQkgICAgJiYgaGxfZW5kcG9zLT5jb2wgPCBzdGFydHBvcy0+Y29sKQorCQlobF9lbmRwb3MtPmNvbCA9IHN0YXJ0cG9zLT5jb2w7CisJICAgIGxpbWl0X3BvcyhobF9lbmRwb3MsIG1fZW5kcG9zKTsKKworCSAgICAvKiBub3cgdGhlIG1hdGNoIGVuZHMgd2hlcmUgdGhlIGhpZ2hsaWdodGluZyBlbmRzLCBpdCBpcyB0dXJuZWQKKwkgICAgICogaW50byB0aGUgbWF0Y2hncm91cCBmb3IgdGhlIGVuZCAqLworCSAgICAqbV9lbmRwb3MgPSAqaGxfZW5kcG9zOworCX0KKwllbHNlCisJeworCSAgICAqZW5kX2lkeCA9IDA7CisJICAgICpobF9lbmRwb3MgPSAqZW5kX2VuZHBvczsKKwl9CisKKwkqZmxhZ3NwID0gc3BwLT5zcF9mbGFnczsKKworCWhhZF9tYXRjaCA9IFRSVUU7CisJYnJlYWs7CisgICAgfQorCisgICAgLyogbm8gbWF0Y2ggZm9yIGFuIEVORCBwYXR0ZXJuIGluIHRoaXMgbGluZSAqLworICAgIGlmICghaGFkX21hdGNoKQorCW1fZW5kcG9zLT5sbnVtID0gMDsKKworICAgIC8qIFJlbW92ZSBleHRlcm5hbCBtYXRjaGVzLiAqLworICAgIHVucmVmX2V4dG1hdGNoKHJlX2V4dG1hdGNoX2luKTsKKyAgICByZV9leHRtYXRjaF9pbiA9IE5VTEw7Cit9CisKKy8qCisgKiBMaW1pdCAicG9zIiBub3QgdG8gYmUgYWZ0ZXIgImxpbWl0Ii4KKyAqLworICAgIHN0YXRpYyB2b2lkCitsaW1pdF9wb3MocG9zLCBsaW1pdCkKKyAgICBscG9zX1QJKnBvczsKKyAgICBscG9zX1QJKmxpbWl0OworeworICAgIGlmIChwb3MtPmxudW0gPiBsaW1pdC0+bG51bSkKKwkqcG9zID0gKmxpbWl0OworICAgIGVsc2UgaWYgKHBvcy0+bG51bSA9PSBsaW1pdC0+bG51bSAmJiBwb3MtPmNvbCA+IGxpbWl0LT5jb2wpCisJcG9zLT5jb2wgPSBsaW1pdC0+Y29sOworfQorCisvKgorICogTGltaXQgInBvcyIgbm90IHRvIGJlIGFmdGVyICJsaW1pdCIsIHVubGVzcyBwb3MtPmxudW0gaXMgemVyby4KKyAqLworICAgIHN0YXRpYyB2b2lkCitsaW1pdF9wb3NfemVybyhwb3MsIGxpbWl0KQorICAgIGxwb3NfVAkqcG9zOworICAgIGxwb3NfVAkqbGltaXQ7Cit7CisgICAgaWYgKHBvcy0+bG51bSA9PSAwKQorCSpwb3MgPSAqbGltaXQ7CisgICAgZWxzZQorCWxpbWl0X3Bvcyhwb3MsIGxpbWl0KTsKK30KKworLyoKKyAqIEFkZCBvZmZzZXQgdG8gbWF0Y2hlZCB0ZXh0IGZvciBlbmQgb2YgbWF0Y2ggb3IgaGlnaGxpZ2h0LgorICovCisgICAgc3RhdGljIHZvaWQKK3N5bl9hZGRfZW5kX29mZihyZXN1bHQsIHJlZ21hdGNoLCBzcHAsIGlkeCwgZXh0cmEpCisgICAgbHBvc19UCSpyZXN1bHQ7CS8qIHJldHVybmVkIHBvc2l0aW9uICovCisgICAgcmVnbW1hdGNoX1QJKnJlZ21hdGNoOwkvKiBzdGFydC9lbmQgb2YgbWF0Y2ggKi8KKyAgICBzeW5wYXRfVAkqc3BwOwkJLyogbWF0Y2hlZCBwYXR0ZXJuICovCisgICAgaW50CQlpZHg7CQkvKiBpbmRleCBvZiBvZmZzZXQgKi8KKyAgICBpbnQJCWV4dHJhOwkJLyogZXh0cmEgY2hhcnMgZm9yIG9mZnNldCB0byBzdGFydCAqLworeworICAgIGludAkJY29sOworCisgICAgaWYgKHNwcC0+c3Bfb2ZmX2ZsYWdzICYgKDEgPDwgaWR4KSkKKyAgICB7CisJcmVzdWx0LT5sbnVtID0gcmVnbWF0Y2gtPnN0YXJ0cG9zWzBdLmxudW07CisJY29sID0gcmVnbWF0Y2gtPnN0YXJ0cG9zWzBdLmNvbCArIGV4dHJhOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXJlc3VsdC0+bG51bSA9IHJlZ21hdGNoLT5lbmRwb3NbMF0ubG51bTsKKwljb2wgPSByZWdtYXRjaC0+ZW5kcG9zWzBdLmNvbDsKKyAgICB9CisgICAgY29sICs9IHNwcC0+c3Bfb2Zmc2V0c1tpZHhdOworICAgIGlmIChjb2wgPCAwKQorCXJlc3VsdC0+Y29sID0gMDsKKyAgICBlbHNlCisJcmVzdWx0LT5jb2wgPSBjb2w7Cit9CisKKy8qCisgKiBBZGQgb2Zmc2V0IHRvIG1hdGNoZWQgdGV4dCBmb3Igc3RhcnQgb2YgbWF0Y2ggb3IgaGlnaGxpZ2h0LgorICogQXZvaWQgcmVzdWx0aW5nIGNvbHVtbiB0byBiZWNvbWUgbmVnYXRpdmUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2FkZF9zdGFydF9vZmYocmVzdWx0LCByZWdtYXRjaCwgc3BwLCBpZHgsIGV4dHJhKQorICAgIGxwb3NfVAkqcmVzdWx0OwkvKiByZXR1cm5lZCBwb3NpdGlvbiAqLworICAgIHJlZ21tYXRjaF9UCSpyZWdtYXRjaDsJLyogc3RhcnQvZW5kIG9mIG1hdGNoICovCisgICAgc3lucGF0X1QJKnNwcDsKKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCWV4dHJhOwkgICAgLyogZXh0cmEgY2hhcnMgZm9yIG9mZnNldCB0byBlbmQgKi8KK3sKKyAgICBpbnQJCWNvbDsKKworICAgIGlmIChzcHAtPnNwX29mZl9mbGFncyAmICgxIDw8IChpZHggKyBTUE9fQ09VTlQpKSkKKyAgICB7CisJcmVzdWx0LT5sbnVtID0gcmVnbWF0Y2gtPmVuZHBvc1swXS5sbnVtOworCWNvbCA9IHJlZ21hdGNoLT5lbmRwb3NbMF0uY29sICsgZXh0cmE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJcmVzdWx0LT5sbnVtID0gcmVnbWF0Y2gtPnN0YXJ0cG9zWzBdLmxudW07CisJY29sID0gcmVnbWF0Y2gtPnN0YXJ0cG9zWzBdLmNvbDsKKyAgICB9CisgICAgY29sICs9IHNwcC0+c3Bfb2Zmc2V0c1tpZHhdOworICAgIGlmIChjb2wgPCAwKQorCXJlc3VsdC0+Y29sID0gMDsKKyAgICBlbHNlCisJcmVzdWx0LT5jb2wgPSBjb2w7Cit9CisKKy8qCisgKiBHZXQgY3VycmVudCBsaW5lIGluIHN5bnRheCBidWZmZXIuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3N5bl9nZXRjdXJsaW5lKCkKK3sKKyAgICByZXR1cm4gbWxfZ2V0X2J1ZihzeW5fYnVmLCBjdXJyZW50X2xudW0sIEZBTFNFKTsKK30KKworLyoKKyAqIENhbGwgdmltX3JlZ2V4ZWMoKSB0byBtYXRjaCBpbiBzeW5fYnVmLgorICogUmV0dXJucyBUUlVFIHdoZW4gdGhlcmUgaXMgYSBtYXRjaC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3N5bl9yZWdleGVjKHJtcCwgbG51bSwgY29sKQorICAgIHJlZ21tYXRjaF9UCSpybXA7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBjb2xucl9UCWNvbDsKK3sKKyAgICBpZiAodmltX3JlZ2V4ZWNfbXVsdGkocm1wLCBzeW5fd2luLCBzeW5fYnVmLCBsbnVtLCBjb2wpID4gMCkKKyAgICB7CisJcm1wLT5zdGFydHBvc1swXS5sbnVtICs9IGxudW07CisJcm1wLT5lbmRwb3NbMF0ubG51bSArPSBsbnVtOworCXJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBDaGVjayBvbmUgcG9zaXRpb24gaW4gYSBsaW5lIGZvciBhIG1hdGNoaW5nIGtleXdvcmQuCisgKiBUaGUgY2FsbGVyIG11c3QgY2hlY2sgaWYgYSBrZXl3b3JkIGNhbiBzdGFydCBhdCBzdGFydGNvbC4KKyAqIFJldHVybiBpdCdzIElEIGlmIGZvdW5kLCAwIG90aGVyd2lzZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NoZWNrX2tleXdvcmRfaWQobGluZSwgc3RhcnRjb2wsIGVuZGNvbHAsIGZsYWdzcCwgbmV4dF9saXN0cCwgY3VyX3NpKQorICAgIGNoYXJfdQkqbGluZTsKKyAgICBpbnQJCXN0YXJ0Y29sOwkvKiBwb3NpdGlvbiBpbiBsaW5lIHRvIGNoZWNrIGZvciBrZXl3b3JkICovCisgICAgaW50CQkqZW5kY29scDsJLyogcmV0dXJuOiBjaGFyYWN0ZXIgYWZ0ZXIgZm91bmQga2V5d29yZCAqLworICAgIGxvbmcJKmZsYWdzcDsJLyogcmV0dXJuOiBmbGFncyBvZiBtYXRjaGluZyBrZXl3b3JkICovCisgICAgc2hvcnQJKipuZXh0X2xpc3RwOwkvKiByZXR1cm46IG5leHRfbGlzdCBvZiBtYXRjaGluZyBrZXl3b3JkICovCisgICAgc3RhdGVpdGVtX1QJKmN1cl9zaTsJLyogaXRlbSBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayAqLworeworICAgIGtleWVudHJ5X1QJKmt0YWI7CisgICAgY2hhcl91CSpwOworICAgIGludAkJcm91bmQ7CisgICAgaW50CQlsZW47CisgICAgY2hhcl91CWtleXdvcmRbTUFYS0VZV0xFTiArIDFdOyAvKiBhc3N1bWUgbWF4LiBrZXl3b3JkIGxlbiBpcyA4MCAqLworCisgICAgLyogRmluZCBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGtleXdvcmQuICBGaXJzdCBjaGFyYWN0ZXIgd2FzIGFscmVhZHkKKyAgICAgKiBjaGVja2VkLiAqLworICAgIHAgPSBsaW5lICsgc3RhcnRjb2w7CisgICAgbGVuID0gMDsKKyAgICBkbworICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKGhhc19tYnl0ZSkKKwkgICAgbGVuICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCArIGxlbik7CisJZWxzZQorI2VuZGlmCisJICAgICsrbGVuOworICAgIH0KKyAgICB3aGlsZSAodmltX2lzd29yZGNfYnVmKHAgKyBsZW4sIHN5bl9idWYpKTsKKworICAgIGlmIChsZW4gPiBNQVhLRVlXTEVOKQorCXJldHVybiAwOworCisgICAgLyoKKyAgICAgKiBNdXN0IG1ha2UgYSBjb3B5IG9mIHRoZSBrZXl3b3JkLCBzbyB3ZSBjYW4gYWRkIGEgTlVMIGFuZCBtYWtlIGl0CisgICAgICogbG93ZXJjYXNlLgorICAgICAqLworICAgIFNUUk5DUFkoa2V5d29yZCwgcCwgbGVuKTsKKyAgICBrZXl3b3JkW2xlbl0gPSBOVUw7CisKKyAgICAvKgorICAgICAqIFRyeSB0d2ljZToKKyAgICAgKiAxLiBtYXRjaGluZyBjYXNlCisgICAgICogMi4gaWdub3JpbmcgY2FzZQorICAgICAqLworICAgIGZvciAocm91bmQgPSAxOyByb3VuZCA8PSAyOyArK3JvdW5kKQorICAgIHsKKwlpZiAoKHJvdW5kID09IDEgPyBzeW5fYnVmLT5iX2tleXd0YWIgOiBzeW5fYnVmLT5iX2tleXd0YWJfaWMpID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworCWlmIChyb3VuZCA9PSAxKQkvKiBtYXRjaCBjYXNlICovCisJICAgIGt0YWIgPSBzeW5fYnVmLT5iX2tleXd0YWJbc3luX2toYXNoKGtleXdvcmQpXTsKKwllbHNlIC8qIHJvdW5kID09IDIsIGlnbm9yZSBjYXNlICovCisJeworCSAgICBwID0gc3RyX2ZvbGRjYXNlKGtleXdvcmQsIChpbnQpU1RSTEVOKGtleXdvcmQpKTsKKwkgICAgaWYgKHAgIT0gTlVMTCkKKwkgICAgeworCQlTVFJOQ1BZKGtleXdvcmQsIHAsIE1BWEtFWVdMRU4pOworCQlrZXl3b3JkW01BWEtFWVdMRU5dID0gTlVMOworCQl2aW1fZnJlZShwKTsKKwkgICAgfQorCSAgICBrdGFiID0gc3luX2J1Zi0+Yl9rZXl3dGFiX2ljW3N5bl9raGFzaChrZXl3b3JkKV07CisJfQorCisJLyoKKwkgKiBGaW5kIGtleXdvcmRzIHRoYXQgbWF0Y2guCisJICogV2hlbiBjdXJyZW50X25leHRfbGlzdCBpcyBub24temVybyBhY2NlcHQgb25seSB0aGF0IGdyb3VwLCBvdGhlcndpc2U6CisJICogIEFjY2VwdCBhIG5vdC1jb250YWluZWQga2V5d29yZCBhdCB0b3BsZXZlbC4KKwkgKiAgQWNjZXB0IGEga2V5d29yZCBhdCBvdGhlciBsZXZlbHMgb25seSBpZiBpdCBpcyBpbiB0aGUgY29udGFpbnMgbGlzdC4KKwkgKi8KKwlmb3IgKCA7IGt0YWIgIT0gTlVMTDsga3RhYiA9IGt0YWItPm5leHQpCisJICAgIGlmICggICBTVFJDTVAoa2V5d29yZCwga3RhYi0+a2V5d29yZCkgPT0gMAorCQkmJiAoY3VycmVudF9uZXh0X2xpc3QgIT0gMAorCQkgICAgPyBpbl9pZF9saXN0KE5VTEwsIGN1cnJlbnRfbmV4dF9saXN0LCAma3RhYi0+a19zeW4sIDApCisJCSAgICA6IChjdXJfc2kgPT0gTlVMTAorCQkJPyAhKGt0YWItPmZsYWdzICYgSExfQ09OVEFJTkVEKQorCQkJOiBpbl9pZF9saXN0KGN1cl9zaSwgY3VyX3NpLT5zaV9jb250X2xpc3QsCisJCQkJICAma3RhYi0+a19zeW4sIGt0YWItPmZsYWdzICYgSExfQ09OVEFJTkVEKSkpKQorCSAgICB7CisJCSplbmRjb2xwID0gc3RhcnRjb2wgKyBsZW47CisJCSpmbGFnc3AgPSBrdGFiLT5mbGFnczsKKwkJKm5leHRfbGlzdHAgPSBrdGFiLT5uZXh0X2xpc3Q7CisJCXJldHVybiBrdGFiLT5rX3N5bi5pZDsKKwkgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEhhbmRsZSAiOnN5bnRheCBjYXNlIiBjb21tYW5kLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitzeW5fY21kX2Nhc2UoZWFwLCBzeW5jaW5nKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICBpbnQJCXN5bmNpbmc7CSAgICAvKiBub3QgdXNlZCAqLworeworICAgIGNoYXJfdQkqYXJnID0gZWFwLT5hcmc7CisgICAgY2hhcl91CSpuZXh0OworCisgICAgZWFwLT5uZXh0Y21kID0gZmluZF9uZXh0Y21kKGFyZyk7CisgICAgaWYgKGVhcC0+c2tpcCkKKwlyZXR1cm47CisKKyAgICBuZXh0ID0gc2tpcHRvd2hpdGUoYXJnKTsKKyAgICBpZiAoU1RSTklDTVAoYXJnLCAibWF0Y2giLCA1KSA9PSAwICYmIG5leHQgLSBhcmcgPT0gNSkKKwljdXJidWYtPmJfc3luX2ljID0gRkFMU0U7CisgICAgZWxzZSBpZiAoU1RSTklDTVAoYXJnLCAiaWdub3JlIiwgNikgPT0gMCAmJiBuZXh0IC0gYXJnID09IDYpCisJY3VyYnVmLT5iX3N5bl9pYyA9IFRSVUU7CisgICAgZWxzZQorCUVNU0cyKF8oIkUzOTA6IElsbGVnYWwgYXJndW1lbnQ6ICVzIiksIGFyZyk7Cit9CisKKy8qCisgKiBDbGVhciBhbGwgc3ludGF4IGluZm8gZm9yIG9uZSBidWZmZXIuCisgKi8KKyAgICB2b2lkCitzeW50YXhfY2xlYXIoYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgaW50IGk7CisKKyAgICBjdXJidWYtPmJfc3luX2ljID0gRkFMU0U7CSAgICAvKiBVc2UgY2FzZSwgYnkgZGVmYXVsdCAqLworICAgIGN1cmJ1Zi0+Yl9zeW5fY29udGFpbmVkaW4gPSBGQUxTRTsKKworICAgIC8qIGZyZWUgdGhlIGtleXdvcmRzICovCisgICAgZnJlZV9rZXl3dGFiKGJ1Zi0+Yl9rZXl3dGFiKTsKKyAgICBidWYtPmJfa2V5d3RhYiA9IE5VTEw7CisgICAgZnJlZV9rZXl3dGFiKGJ1Zi0+Yl9rZXl3dGFiX2ljKTsKKyAgICBidWYtPmJfa2V5d3RhYl9pYyA9IE5VTEw7CisKKyAgICAvKiBmcmVlIHRoZSBzeW50YXggcGF0dGVybnMgKi8KKyAgICBmb3IgKGkgPSBidWYtPmJfc3luX3BhdHRlcm5zLmdhX2xlbjsgLS1pID49IDA7ICkKKwlzeW5fY2xlYXJfcGF0dGVybihidWYsIGkpOworICAgIGdhX2NsZWFyKCZidWYtPmJfc3luX3BhdHRlcm5zKTsKKworICAgIC8qIGZyZWUgdGhlIHN5bnRheCBjbHVzdGVycyAqLworICAgIGZvciAoaSA9IGJ1Zi0+Yl9zeW5fY2x1c3RlcnMuZ2FfbGVuOyAtLWkgPj0gMDsgKQorCXN5bl9jbGVhcl9jbHVzdGVyKGJ1ZiwgaSk7CisgICAgZ2FfY2xlYXIoJmJ1Zi0+Yl9zeW5fY2x1c3RlcnMpOworCisgICAgYnVmLT5iX3N5bl9zeW5jX2ZsYWdzID0gMDsKKyAgICBidWYtPmJfc3luX3N5bmNfbWlubGluZXMgPSAwOworICAgIGJ1Zi0+Yl9zeW5fc3luY19tYXhsaW5lcyA9IDA7CisgICAgYnVmLT5iX3N5bl9zeW5jX2xpbmVicmVha3MgPSAwOworCisgICAgdmltX2ZyZWUoYnVmLT5iX3N5bl9saW5lY29udF9wcm9nKTsKKyAgICBidWYtPmJfc3luX2xpbmVjb250X3Byb2cgPSBOVUxMOworICAgIHZpbV9mcmVlKGJ1Zi0+Yl9zeW5fbGluZWNvbnRfcGF0KTsKKyAgICBidWYtPmJfc3luX2xpbmVjb250X3BhdCA9IE5VTEw7CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgYnVmLT5iX3N5bl9mb2xkaXRlbXMgPSAwOworI2VuZGlmCisKKyAgICAvKiBmcmVlIHRoZSBzdG9yZWQgc3RhdGVzICovCisgICAgc3luX3N0YWNrX2ZyZWVfYWxsKGJ1Zik7CisgICAgaW52YWxpZGF0ZV9jdXJyZW50X3N0YXRlKCk7Cit9CisKKy8qCisgKiBDbGVhciBzeW5jaW5nIGluZm8gZm9yIG9uZSBidWZmZXIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3ludGF4X3N5bmNfY2xlYXIoKQoreworICAgIGludCBpOworCisgICAgLyogZnJlZSB0aGUgc3ludGF4IHBhdHRlcm5zICovCisgICAgZm9yIChpID0gY3VyYnVmLT5iX3N5bl9wYXR0ZXJucy5nYV9sZW47IC0taSA+PSAwOyApCisJaWYgKFNZTl9JVEVNUyhjdXJidWYpW2ldLnNwX3N5bmNpbmcpCisJICAgIHN5bl9yZW1vdmVfcGF0dGVybihjdXJidWYsIGkpOworCisgICAgY3VyYnVmLT5iX3N5bl9zeW5jX2ZsYWdzID0gMDsKKyAgICBjdXJidWYtPmJfc3luX3N5bmNfbWlubGluZXMgPSAwOworICAgIGN1cmJ1Zi0+Yl9zeW5fc3luY19tYXhsaW5lcyA9IDA7CisgICAgY3VyYnVmLT5iX3N5bl9zeW5jX2xpbmVicmVha3MgPSAwOworCisgICAgdmltX2ZyZWUoY3VyYnVmLT5iX3N5bl9saW5lY29udF9wcm9nKTsKKyAgICBjdXJidWYtPmJfc3luX2xpbmVjb250X3Byb2cgPSBOVUxMOworICAgIHZpbV9mcmVlKGN1cmJ1Zi0+Yl9zeW5fbGluZWNvbnRfcGF0KTsKKyAgICBjdXJidWYtPmJfc3luX2xpbmVjb250X3BhdCA9IE5VTEw7CisKKyAgICBzeW5fc3RhY2tfZnJlZV9hbGwoY3VyYnVmKTsJCS8qIE5lZWQgdG8gcmVjb21wdXRlIGFsbCBzeW50YXguICovCit9CisKKy8qCisgKiBSZW1vdmUgb25lIHBhdHRlcm4gZnJvbSB0aGUgYnVmZmVyJ3MgcGF0dGVybiBsaXN0LgorICovCisgICAgc3RhdGljIHZvaWQKK3N5bl9yZW1vdmVfcGF0dGVybihidWYsIGlkeCkKKyAgICBidWZfVAkqYnVmOworICAgIGludAkJaWR4OworeworICAgIHN5bnBhdF9UCSpzcHA7CisKKyAgICBzcHAgPSAmKFNZTl9JVEVNUyhidWYpW2lkeF0pOworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGlmIChzcHAtPnNwX2ZsYWdzICYgSExfRk9MRCkKKwktLWJ1Zi0+Yl9zeW5fZm9sZGl0ZW1zOworI2VuZGlmCisgICAgc3luX2NsZWFyX3BhdHRlcm4oYnVmLCBpZHgpOworICAgIG1jaF9tZW1tb3ZlKHNwcCwgc3BwICsgMSwKKwkJICAgc2l6ZW9mKHN5bnBhdF9UKSAqIChidWYtPmJfc3luX3BhdHRlcm5zLmdhX2xlbiAtIGlkeCAtIDEpKTsKKyAgICAtLWJ1Zi0+Yl9zeW5fcGF0dGVybnMuZ2FfbGVuOworICAgIC0tYnVmLT5iX3N5bl9wYXR0ZXJucy5nYV9yb29tOworfQorCisvKgorICogQ2xlYXIgYW5kIGZyZWUgb25lIHN5bnRheCBwYXR0ZXJuLiAgV2hlbiBjbGVhcmluZyBhbGwsIG11c3QgYmUgY2FsbGVkIGZyb20KKyAqIGxhc3QgdG8gZmlyc3QhCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NsZWFyX3BhdHRlcm4oYnVmLCBpKQorICAgIGJ1Zl9UCSpidWY7CisgICAgaW50CQlpOworeworICAgIHZpbV9mcmVlKFNZTl9JVEVNUyhidWYpW2ldLnNwX3BhdHRlcm4pOworICAgIHZpbV9mcmVlKFNZTl9JVEVNUyhidWYpW2ldLnNwX3Byb2cpOworICAgIC8qIE9ubHkgZnJlZSBzcF9jb250X2xpc3QgYW5kIHNwX25leHRfbGlzdCBvZiBmaXJzdCBzdGFydCBwYXR0ZXJuICovCisgICAgaWYgKGkgPT0gMCB8fCBTWU5fSVRFTVMoYnVmKVtpIC0gMV0uc3BfdHlwZSAhPSBTUFRZUEVfU1RBUlQpCisgICAgeworCXZpbV9mcmVlKFNZTl9JVEVNUyhidWYpW2ldLnNwX2NvbnRfbGlzdCk7CisJdmltX2ZyZWUoU1lOX0lURU1TKGJ1ZilbaV0uc3BfbmV4dF9saXN0KTsKKyAgICB9Cit9CisKKy8qCisgKiBDbGVhciBhbmQgZnJlZSBvbmUgc3ludGF4IGNsdXN0ZXIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NsZWFyX2NsdXN0ZXIoYnVmLCBpKQorICAgIGJ1Zl9UCSpidWY7CisgICAgaW50CQlpOworeworICAgIHZpbV9mcmVlKFNZTl9DTFNUUihidWYpW2ldLnNjbF9uYW1lKTsKKyAgICB2aW1fZnJlZShTWU5fQ0xTVFIoYnVmKVtpXS5zY2xfbmFtZV91KTsKKyAgICB2aW1fZnJlZShTWU5fQ0xTVFIoYnVmKVtpXS5zY2xfbGlzdCk7Cit9CisKKy8qCisgKiBIYW5kbGUgIjpzeW50YXggY2xlYXIiIGNvbW1hbmQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NtZF9jbGVhcihlYXAsIHN5bmNpbmcpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGludAkJc3luY2luZzsKK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIGNoYXJfdQkqYXJnX2VuZDsKKyAgICBpbnQJCWlkOworCisgICAgZWFwLT5uZXh0Y21kID0gZmluZF9uZXh0Y21kKGFyZyk7CisgICAgaWYgKGVhcC0+c2tpcCkKKwlyZXR1cm47CisKKyAgICAvKgorICAgICAqIFdlIGhhdmUgdG8gZGlzYWJsZSB0aGlzIHdpdGhpbiAiOnN5biBpbmNsdWRlIEBncm91cCBmaWxlbmFtZSIsCisgICAgICogYmVjYXVzZSBvdGhlcndpc2UgQGdyb3VwIHdvdWxkIGdldCBkZWxldGVkLgorICAgICAqIE9ubHkgcmVxdWlyZWQgZm9yIFZpbSA1Lnggc3ludGF4IGZpbGVzLCA2LjAgb25lcyBkb24ndCBjb250YWluICI6c3luCisgICAgICogY2xlYXIiLgorICAgICAqLworICAgIGlmIChjdXJidWYtPmJfc3luX3RvcGdycCAhPSAwKQorCXJldHVybjsKKworICAgIGlmIChlbmRzX2V4Y21kKCphcmcpKQorICAgIHsKKwkvKgorCSAqIE5vIGFyZ3VtZW50OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zLgorCSAqLworCWlmIChzeW5jaW5nKQorCSAgICBzeW50YXhfc3luY19jbGVhcigpOworCWVsc2UKKwl7CisJICAgIHN5bnRheF9jbGVhcihjdXJidWYpOworCSAgICBkb191bmxldCgoY2hhcl91ICopImI6Y3VycmVudF9zeW50YXgiKTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBDbGVhciB0aGUgZ3JvdXAgSURzIHRoYXQgYXJlIGluIHRoZSBhcmd1bWVudC4KKwkgKi8KKwl3aGlsZSAoIWVuZHNfZXhjbWQoKmFyZykpCisJeworCSAgICBhcmdfZW5kID0gc2tpcHRvd2hpdGUoYXJnKTsKKwkgICAgaWYgKCphcmcgPT0gJ0AnKQorCSAgICB7CisJCWlkID0gc3luX3NjbF9uYW1lbjJpZChhcmcgKyAxLCAoaW50KShhcmdfZW5kIC0gYXJnIC0gMSkpOworCQlpZiAoaWQgPT0gMCkKKwkJeworCQkgICAgRU1TRzIoXygiRTM5MTogTm8gc3VjaCBzeW50YXggY2x1c3RlcjogJXMiKSwgYXJnKTsKKwkJICAgIGJyZWFrOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgLyoKKwkJICAgICAqIFdlIGNhbid0IHBoeXNpY2FsbHkgZGVsZXRlIGEgY2x1c3RlciB3aXRob3V0IGNoYW5naW5nCisJCSAgICAgKiB0aGUgSURzIG9mIG90aGVyIGNsdXN0ZXJzLCBzbyB3ZSBkbyB0aGUgbmV4dCBiZXN0IHRoaW5nCisJCSAgICAgKiBhbmQgbWFrZSBpdCBlbXB0eS4KKwkJICAgICAqLworCQkgICAgc2hvcnQgc2NsX2lkID0gaWQgLSBTWU5JRF9DTFVTVEVSOworCisJCSAgICB2aW1fZnJlZShTWU5fQ0xTVFIoY3VyYnVmKVtzY2xfaWRdLnNjbF9saXN0KTsKKwkJICAgIFNZTl9DTFNUUihjdXJidWYpW3NjbF9pZF0uc2NsX2xpc3QgPSBOVUxMOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlkID0gc3luX25hbWVuMmlkKGFyZywgKGludCkoYXJnX2VuZCAtIGFyZykpOworCQlpZiAoaWQgPT0gMCkKKwkJeworCQkgICAgRU1TRzIoXyhlX25vZ3JvdXApLCBhcmcpOworCQkgICAgYnJlYWs7CisJCX0KKwkJZWxzZQorCQkgICAgc3luX2NsZWFyX29uZShpZCwgc3luY2luZyk7CisJICAgIH0KKwkgICAgYXJnID0gc2tpcHdoaXRlKGFyZ19lbmQpOworCX0KKyAgICB9CisgICAgcmVkcmF3X2N1cmJ1Zl9sYXRlcihOT1RfVkFMSUQpOworICAgIHN5bl9zdGFja19mcmVlX2FsbChjdXJidWYpOwkJLyogTmVlZCB0byByZWNvbXB1dGUgYWxsIHN5bnRheC4gKi8KK30KKworLyoKKyAqIENsZWFyIG9uZSBzeW50YXggZ3JvdXAgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlci4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzeW5fY2xlYXJfb25lKGlkLCBzeW5jaW5nKQorICAgIGludAkJaWQ7CisgICAgaW50CQlzeW5jaW5nOworeworICAgIHN5bnBhdF9UCSpzcHA7CisgICAgaW50CQlpZHg7CisKKyAgICAvKiBDbGVhciBrZXl3b3JkcyBvbmx5IHdoZW4gbm90ICI6c3luIHN5bmMgY2xlYXIgZ3JvdXAtbmFtZSIgKi8KKyAgICBpZiAoIXN5bmNpbmcpCisgICAgeworCSh2b2lkKXN5bl9jbGVhcl9rZXl3b3JkKGlkLCBjdXJidWYtPmJfa2V5d3RhYik7CisJKHZvaWQpc3luX2NsZWFyX2tleXdvcmQoaWQsIGN1cmJ1Zi0+Yl9rZXl3dGFiX2ljKTsKKyAgICB9CisKKyAgICAvKiBjbGVhciB0aGUgcGF0dGVybnMgZm9yICJpZCIgKi8KKyAgICBmb3IgKGlkeCA9IGN1cmJ1Zi0+Yl9zeW5fcGF0dGVybnMuZ2FfbGVuOyAtLWlkeCA+PSAwOyApCisgICAgeworCXNwcCA9ICYoU1lOX0lURU1TKGN1cmJ1ZilbaWR4XSk7CisJaWYgKHNwcC0+c3Bfc3luLmlkICE9IGlkIHx8IHNwcC0+c3Bfc3luY2luZyAhPSBzeW5jaW5nKQorCSAgICBjb250aW51ZTsKKwlzeW5fcmVtb3ZlX3BhdHRlcm4oY3VyYnVmLCBpZHgpOworICAgIH0KK30KKworLyoKKyAqIEhhbmRsZSAiOnN5bnRheCBvbiIgY29tbWFuZC4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NtZF9vbihlYXAsIHN5bmNpbmcpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGludAkJc3luY2luZzsJLyogbm90IHVzZWQgKi8KK3sKKyAgICBzeW5fY21kX29ub2ZmKGVhcCwgInN5bnRheCIpOworfQorCisvKgorICogSGFuZGxlICI6c3ludGF4IGVuYWJsZSIgY29tbWFuZC4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NtZF9lbmFibGUoZWFwLCBzeW5jaW5nKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICBpbnQJCXN5bmNpbmc7CS8qIG5vdCB1c2VkICovCit7CisgICAgc2V0X2ludGVybmFsX3N0cmluZ192YXIoKGNoYXJfdSAqKSJzeW50YXhfY21kIiwgKGNoYXJfdSAqKSJlbmFibGUiKTsKKyAgICBzeW5fY21kX29ub2ZmKGVhcCwgInN5bnRheCIpOworICAgIGRvX3VubGV0KChjaGFyX3UgKikiZzpzeW50YXhfY21kIik7Cit9CisKKy8qCisgKiBIYW5kbGUgIjpzeW50YXggcmVzZXQiIGNvbW1hbmQuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK3N5bl9jbWRfcmVzZXQoZWFwLCBzeW5jaW5nKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICBpbnQJCXN5bmNpbmc7CS8qIG5vdCB1c2VkICovCit7CisgICAgZWFwLT5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChlYXAtPmFyZyk7CisgICAgaWYgKCFlYXAtPnNraXApCisgICAgeworCXNldF9pbnRlcm5hbF9zdHJpbmdfdmFyKChjaGFyX3UgKikic3ludGF4X2NtZCIsIChjaGFyX3UgKikicmVzZXQiKTsKKwlkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopInJ1bnRpbWUhIHN5bnRheC9zeW5jb2xvci52aW0iKTsKKwlkb191bmxldCgoY2hhcl91ICopImc6c3ludGF4X2NtZCIpOworICAgIH0KK30KKworLyoKKyAqIEhhbmRsZSAiOnN5bnRheCBtYW51YWwiIGNvbW1hbmQuCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK3N5bl9jbWRfbWFudWFsKGVhcCwgc3luY2luZykKKyAgICBleGFyZ19UCSplYXA7CisgICAgaW50CQlzeW5jaW5nOwkvKiBub3QgdXNlZCAqLworeworICAgIHN5bl9jbWRfb25vZmYoZWFwLCAibWFudWFsIik7Cit9CisKKy8qCisgKiBIYW5kbGUgIjpzeW50YXggb2ZmIiBjb21tYW5kLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitzeW5fY21kX29mZihlYXAsIHN5bmNpbmcpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGludAkJc3luY2luZzsJLyogbm90IHVzZWQgKi8KK3sKKyAgICBzeW5fY21kX29ub2ZmKGVhcCwgIm5vc3ludGF4Iik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorc3luX2NtZF9vbm9mZihlYXAsIG5hbWUpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGNoYXIJKm5hbWU7Cit7CisgICAgY2hhcl91CWJ1ZlsxMDBdOworCisgICAgZWFwLT5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChlYXAtPmFyZyk7CisgICAgaWYgKCFlYXAtPnNraXApCisgICAgeworCVNUUkNQWShidWYsICJzbyAiKTsKKwlzcHJpbnRmKChjaGFyICopYnVmICsgMywgU1lOVEFYX0ZOQU1FLCBuYW1lKTsKKwlkb19jbWRsaW5lX2NtZChidWYpOworICAgIH0KK30KKworLyoKKyAqIEhhbmRsZSAiOnN5bnRheCBbbGlzdF0iIGNvbW1hbmQ6IGxpc3QgY3VycmVudCBzeW50YXggd29yZHMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NtZF9saXN0KGVhcCwgc3luY2luZykKKyAgICBleGFyZ19UCSplYXA7CisgICAgaW50CQlzeW5jaW5nOwkgICAgLyogd2hlbiBUUlVFOiBsaXN0IHN5bmNpbmcgaXRlbXMgKi8KK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIGludAkJaWQ7CisgICAgY2hhcl91CSphcmdfZW5kOworCisgICAgZWFwLT5uZXh0Y21kID0gZmluZF9uZXh0Y21kKGFyZyk7CisgICAgaWYgKGVhcC0+c2tpcCkKKwlyZXR1cm47CisKKyAgICBpZiAoIXN5bnRheF9wcmVzZW50KGN1cmJ1ZikpCisgICAgeworCU1TRyhfKCJObyBTeW50YXggaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBidWZmZXIiKSk7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmIChzeW5jaW5nKQorICAgIHsKKwlpZiAoY3VyYnVmLT5iX3N5bl9zeW5jX2ZsYWdzICYgU0ZfQ0NPTU1FTlQpCisJeworCSAgICBNU0dfUFVUUyhfKCJzeW5jaW5nIG9uIEMtc3R5bGUgY29tbWVudHMiKSk7CisJICAgIHN5bl9saW5lc19tc2coKTsKKwkgICAgc3luX21hdGNoX21zZygpOworCSAgICByZXR1cm47CisJfQorCWVsc2UgaWYgKCEoY3VyYnVmLT5iX3N5bl9zeW5jX2ZsYWdzICYgU0ZfTUFUQ0gpKQorCXsKKwkgICAgaWYgKGN1cmJ1Zi0+Yl9zeW5fc3luY19taW5saW5lcyA9PSAwKQorCQlNU0dfUFVUUyhfKCJubyBzeW5jaW5nIikpOworCSAgICBlbHNlCisJICAgIHsKKwkJTVNHX1BVVFMoXygic3luY2luZyBzdGFydHMgIikpOworCQltc2dfb3V0bnVtKGN1cmJ1Zi0+Yl9zeW5fc3luY19taW5saW5lcyk7CisJCU1TR19QVVRTKF8oIiBsaW5lcyBiZWZvcmUgdG9wIGxpbmUiKSk7CisJCXN5bl9tYXRjaF9tc2coKTsKKwkgICAgfQorCSAgICByZXR1cm47CisJfQorCU1TR19QVVRTX1RJVExFKF8oIlxuLS0tIFN5bnRheCBzeW5jIGl0ZW1zIC0tLSIpKTsKKwlpZiAoY3VyYnVmLT5iX3N5bl9zeW5jX21pbmxpbmVzID4gMAorCQl8fCBjdXJidWYtPmJfc3luX3N5bmNfbWF4bGluZXMgPiAwCisJCXx8IGN1cmJ1Zi0+Yl9zeW5fc3luY19saW5lYnJlYWtzID4gMCkKKwl7CisJICAgIE1TR19QVVRTKF8oIlxuc3luY2luZyBvbiBpdGVtcyIpKTsKKwkgICAgc3luX2xpbmVzX21zZygpOworCSAgICBzeW5fbWF0Y2hfbXNnKCk7CisJfQorICAgIH0KKyAgICBlbHNlCisJTVNHX1BVVFNfVElUTEUoXygiXG4tLS0gU3ludGF4IGl0ZW1zIC0tLSIpKTsKKyAgICBpZiAoZW5kc19leGNtZCgqYXJnKSkKKyAgICB7CisJLyoKKwkgKiBObyBhcmd1bWVudDogTGlzdCBhbGwgZ3JvdXAgSURzIGFuZCBhbGwgc3ludGF4IGNsdXN0ZXJzLgorCSAqLworCWZvciAoaWQgPSAxOyBpZCA8PSBoaWdobGlnaHRfZ2EuZ2FfbGVuICYmICFnb3RfaW50OyArK2lkKQorCSAgICBzeW5fbGlzdF9vbmUoaWQsIHN5bmNpbmcsIEZBTFNFKTsKKwlmb3IgKGlkID0gMDsgaWQgPCBjdXJidWYtPmJfc3luX2NsdXN0ZXJzLmdhX2xlbiAmJiAhZ290X2ludDsgKytpZCkKKwkgICAgc3luX2xpc3RfY2x1c3RlcihpZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyoKKwkgKiBMaXN0IHRoZSBncm91cCBJRHMgYW5kIHN5bnRheCBjbHVzdGVycyB0aGF0IGFyZSBpbiB0aGUgYXJndW1lbnQuCisJICovCisJd2hpbGUgKCFlbmRzX2V4Y21kKCphcmcpICYmICFnb3RfaW50KQorCXsKKwkgICAgYXJnX2VuZCA9IHNraXB0b3doaXRlKGFyZyk7CisJICAgIGlmICgqYXJnID09ICdAJykKKwkgICAgeworCQlpZCA9IHN5bl9zY2xfbmFtZW4yaWQoYXJnICsgMSwgKGludCkoYXJnX2VuZCAtIGFyZyAtIDEpKTsKKwkJaWYgKGlkID09IDApCisJCSAgICBFTVNHMihfKCJFMzkyOiBObyBzdWNoIHN5bnRheCBjbHVzdGVyOiAlcyIpLCBhcmcpOworCQllbHNlCisJCSAgICBzeW5fbGlzdF9jbHVzdGVyKGlkIC0gU1lOSURfQ0xVU1RFUik7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlkID0gc3luX25hbWVuMmlkKGFyZywgKGludCkoYXJnX2VuZCAtIGFyZykpOworCQlpZiAoaWQgPT0gMCkKKwkJICAgIEVNU0cyKF8oZV9ub2dyb3VwKSwgYXJnKTsKKwkJZWxzZQorCQkgICAgc3luX2xpc3Rfb25lKGlkLCBzeW5jaW5nLCBUUlVFKTsKKwkgICAgfQorCSAgICBhcmcgPSBza2lwd2hpdGUoYXJnX2VuZCk7CisJfQorICAgIH0KKyAgICBlYXAtPm5leHRjbWQgPSBjaGVja19uZXh0Y21kKGFyZyk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorc3luX2xpbmVzX21zZygpCit7CisgICAgaWYgKGN1cmJ1Zi0+Yl9zeW5fc3luY19tYXhsaW5lcyA+IDAgfHwgY3VyYnVmLT5iX3N5bl9zeW5jX21pbmxpbmVzID4gMCkKKyAgICB7CisJTVNHX1BVVFMoIjsgIik7CisJaWYgKGN1cmJ1Zi0+Yl9zeW5fc3luY19taW5saW5lcyA+IDApCisJeworCSAgICBNU0dfUFVUUyhfKCJtaW5pbWFsICIpKTsKKwkgICAgbXNnX291dG51bShjdXJidWYtPmJfc3luX3N5bmNfbWlubGluZXMpOworCSAgICBpZiAoY3VyYnVmLT5iX3N5bl9zeW5jX21heGxpbmVzKQorCQlNU0dfUFVUUygiLCAiKTsKKwl9CisJaWYgKGN1cmJ1Zi0+Yl9zeW5fc3luY19tYXhsaW5lcyA+IDApCisJeworCSAgICBNU0dfUFVUUyhfKCJtYXhpbWFsICIpKTsKKwkgICAgbXNnX291dG51bShjdXJidWYtPmJfc3luX3N5bmNfbWF4bGluZXMpOworCX0KKwlNU0dfUFVUUyhfKCIgbGluZXMgYmVmb3JlIHRvcCBsaW5lIikpOworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitzeW5fbWF0Y2hfbXNnKCkKK3sKKyAgICBpZiAoY3VyYnVmLT5iX3N5bl9zeW5jX2xpbmVicmVha3MgPiAwKQorICAgIHsKKwlNU0dfUFVUUyhfKCI7IG1hdGNoICIpKTsKKwltc2dfb3V0bnVtKGN1cmJ1Zi0+Yl9zeW5fc3luY19saW5lYnJlYWtzKTsKKwlNU0dfUFVUUyhfKCIgbGluZSBicmVha3MiKSk7CisgICAgfQorfQorCitzdGF0aWMgaW50ICBsYXN0X21hdGNoZ3JvdXA7CisKK3N0cnVjdCBuYW1lX2xpc3QKK3sKKyAgICBpbnQJCWZsYWc7CisgICAgY2hhcgkqbmFtZTsKK307CisKK3N0YXRpYyB2b2lkIHN5bl9saXN0X2ZsYWdzIF9fQVJHUygoc3RydWN0IG5hbWVfbGlzdCAqbmwsIGludCBmbGFncywgaW50IGF0dHIpKTsKKworLyoKKyAqIExpc3Qgb25lIHN5bnRheCBpdGVtLCBmb3IgIjpzeW50YXgiIG9yICJzeW50YXggbGlzdCBzeW50YXhfbmFtZSIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2xpc3Rfb25lKGlkLCBzeW5jaW5nLCBsaW5rX29ubHkpCisgICAgaW50CQlpZDsKKyAgICBpbnQJCXN5bmNpbmc7CSAgICAvKiB3aGVuIFRSVUU6IGxpc3Qgc3luY2luZyBpdGVtcyAqLworICAgIGludAkJbGlua19vbmx5OwkgICAgLyogd2hlbiBUUlVFOyBsaXN0IGxpbmstb25seSB0b28gKi8KK3sKKyAgICBpbnQJCWF0dHI7CisgICAgaW50CQlpZHg7CisgICAgaW50CQlkaWRfaGVhZGVyID0gRkFMU0U7CisgICAgc3lucGF0X1QJKnNwcDsKKyAgICBzdGF0aWMgc3RydWN0IG5hbWVfbGlzdCBuYW1lbGlzdDFbXSA9CisJCXsKKwkJICAgIHtITF9ESVNQTEFZLCAiZGlzcGxheSJ9LAorCQkgICAge0hMX0NPTlRBSU5FRCwgImNvbnRhaW5lZCJ9LAorCQkgICAge0hMX09ORUxJTkUsICJvbmVsaW5lIn0sCisJCSAgICB7SExfS0VFUEVORCwgImtlZXBlbmQifSwKKwkJICAgIHtITF9FWFRFTkQsICJleHRlbmQifSwKKwkJICAgIHtITF9FWENMVURFTkwsICJleGNsdWRlbmwifSwKKwkJICAgIHtITF9UUkFOU1AsICJ0cmFuc3BhcmVudCJ9LAorCQkgICAge0hMX0ZPTEQsICJmb2xkIn0sCisJCSAgICB7MCwgTlVMTH0KKwkJfTsKKyAgICBzdGF0aWMgc3RydWN0IG5hbWVfbGlzdCBuYW1lbGlzdDJbXSA9CisJCXsKKwkJICAgIHtITF9TS0lQV0hJVEUsICJza2lwd2hpdGUifSwKKwkJICAgIHtITF9TS0lQTkwsICJza2lwbmwifSwKKwkJICAgIHtITF9TS0lQRU1QVFksICJza2lwZW1wdHkifSwKKwkJICAgIHswLCBOVUxMfQorCQl9OworCisgICAgYXR0ciA9IGhsX2F0dHIoSExGX0QpOwkJLyogaGlnaGxpZ2h0IGxpa2UgZGlyZWN0b3JpZXMgKi8KKworICAgIC8qIGxpc3QgdGhlIGtleXdvcmRzIGZvciAiaWQiICovCisgICAgaWYgKCFzeW5jaW5nKQorICAgIHsKKwlkaWRfaGVhZGVyID0gc3luX2xpc3Rfa2V5d29yZHMoaWQsIGN1cmJ1Zi0+Yl9rZXl3dGFiLCBGQUxTRSwgYXR0cik7CisJZGlkX2hlYWRlciA9IHN5bl9saXN0X2tleXdvcmRzKGlkLCBjdXJidWYtPmJfa2V5d3RhYl9pYywKKwkJCQkJCQkgICAgZGlkX2hlYWRlciwgYXR0cik7CisgICAgfQorCisgICAgLyogbGlzdCB0aGUgcGF0dGVybnMgZm9yICJpZCIgKi8KKyAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGN1cmJ1Zi0+Yl9zeW5fcGF0dGVybnMuZ2FfbGVuICYmICFnb3RfaW50OyArK2lkeCkKKyAgICB7CisJc3BwID0gJihTWU5fSVRFTVMoY3VyYnVmKVtpZHhdKTsKKwlpZiAoc3BwLT5zcF9zeW4uaWQgIT0gaWQgfHwgc3BwLT5zcF9zeW5jaW5nICE9IHN5bmNpbmcpCisJICAgIGNvbnRpbnVlOworCisJKHZvaWQpc3luX2xpc3RfaGVhZGVyKGRpZF9oZWFkZXIsIDk5OSwgaWQpOworCWRpZF9oZWFkZXIgPSBUUlVFOworCWxhc3RfbWF0Y2hncm91cCA9IDA7CisJaWYgKHNwcC0+c3BfdHlwZSA9PSBTUFRZUEVfTUFUQ0gpCisJeworCSAgICBwdXRfcGF0dGVybigibWF0Y2giLCAnICcsIHNwcCwgYXR0cik7CisJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJfQorCWVsc2UgaWYgKHNwcC0+c3BfdHlwZSA9PSBTUFRZUEVfU1RBUlQpCisJeworCSAgICB3aGlsZSAoU1lOX0lURU1TKGN1cmJ1ZilbaWR4XS5zcF90eXBlID09IFNQVFlQRV9TVEFSVCkKKwkJcHV0X3BhdHRlcm4oInN0YXJ0IiwgJz0nLCAmU1lOX0lURU1TKGN1cmJ1ZilbaWR4KytdLCBhdHRyKTsKKwkgICAgaWYgKFNZTl9JVEVNUyhjdXJidWYpW2lkeF0uc3BfdHlwZSA9PSBTUFRZUEVfU0tJUCkKKwkJcHV0X3BhdHRlcm4oInNraXAiLCAnPScsICZTWU5fSVRFTVMoY3VyYnVmKVtpZHgrK10sIGF0dHIpOworCSAgICB3aGlsZSAoaWR4IDwgY3VyYnVmLT5iX3N5bl9wYXR0ZXJucy5nYV9sZW4KKwkJCSAgICAgICYmIFNZTl9JVEVNUyhjdXJidWYpW2lkeF0uc3BfdHlwZSA9PSBTUFRZUEVfRU5EKQorCQlwdXRfcGF0dGVybigiZW5kIiwgJz0nLCAmU1lOX0lURU1TKGN1cmJ1ZilbaWR4KytdLCBhdHRyKTsKKwkgICAgLS1pZHg7CisJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJfQorCXN5bl9saXN0X2ZsYWdzKG5hbWVsaXN0MSwgc3BwLT5zcF9mbGFncywgYXR0cik7CisKKwlpZiAoc3BwLT5zcF9jb250X2xpc3QgIT0gTlVMTCkKKwkgICAgcHV0X2lkX2xpc3QoKGNoYXJfdSAqKSJjb250YWlucyIsIHNwcC0+c3BfY29udF9saXN0LCBhdHRyKTsKKworCWlmIChzcHAtPnNwX3N5bi5jb250X2luX2xpc3QgIT0gTlVMTCkKKwkgICAgcHV0X2lkX2xpc3QoKGNoYXJfdSAqKSJjb250YWluZWRpbiIsCisJCQkJCSAgICAgIHNwcC0+c3Bfc3luLmNvbnRfaW5fbGlzdCwgYXR0cik7CisKKwlpZiAoc3BwLT5zcF9uZXh0X2xpc3QgIT0gTlVMTCkKKwl7CisJICAgIHB1dF9pZF9saXN0KChjaGFyX3UgKikibmV4dGdyb3VwIiwgc3BwLT5zcF9uZXh0X2xpc3QsIGF0dHIpOworCSAgICBzeW5fbGlzdF9mbGFncyhuYW1lbGlzdDIsIHNwcC0+c3BfZmxhZ3MsIGF0dHIpOworCX0KKwlpZiAoc3BwLT5zcF9mbGFncyAmIChITF9TWU5DX0hFUkV8SExfU1lOQ19USEVSRSkpCisJeworCSAgICBpZiAoc3BwLT5zcF9mbGFncyAmIEhMX1NZTkNfSEVSRSkKKwkJbXNnX3B1dHNfYXR0cigoY2hhcl91ICopImdyb3VwaGVyZSIsIGF0dHIpOworCSAgICBlbHNlCisJCW1zZ19wdXRzX2F0dHIoKGNoYXJfdSAqKSJncm91cHRoZXJlIiwgYXR0cik7CisJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJICAgIGlmIChzcHAtPnNwX3N5bmNfaWR4ID49IDApCisJCW1zZ19vdXR0cmFucyhITF9UQUJMRSgpW1NZTl9JVEVNUyhjdXJidWYpCisJCQkJICAgW3NwcC0+c3Bfc3luY19pZHhdLnNwX3N5bi5pZCAtIDFdLnNnX25hbWUpOworCSAgICBlbHNlCisJCU1TR19QVVRTKCJOT05FIik7CisJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJfQorICAgIH0KKworICAgIC8qIGxpc3QgdGhlIGxpbmssIGlmIHRoZXJlIGlzIG9uZSAqLworICAgIGlmIChITF9UQUJMRSgpW2lkIC0gMV0uc2dfbGluayAmJiAoZGlkX2hlYWRlciB8fCBsaW5rX29ubHkpICYmICFnb3RfaW50KQorICAgIHsKKwkodm9pZClzeW5fbGlzdF9oZWFkZXIoZGlkX2hlYWRlciwgOTk5LCBpZCk7CisJbXNnX3B1dHNfYXR0cigoY2hhcl91ICopImxpbmtzIHRvIiwgYXR0cik7CisJbXNnX3B1dGNoYXIoJyAnKTsKKwltc2dfb3V0dHJhbnMoSExfVEFCTEUoKVtITF9UQUJMRSgpW2lkIC0gMV0uc2dfbGluayAtIDFdLnNnX25hbWUpOworICAgIH0KK30KKworICAgIHN0YXRpYyB2b2lkCitzeW5fbGlzdF9mbGFncyhubCwgZmxhZ3MsIGF0dHIpCisgICAgc3RydWN0IG5hbWVfbGlzdAkqbmw7CisgICAgaW50CQkJZmxhZ3M7CisgICAgaW50CQkJYXR0cjsKK3sKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGkgPSAwOyBubFtpXS5mbGFnICE9IDA7ICsraSkKKwlpZiAoZmxhZ3MgJiBubFtpXS5mbGFnKQorCXsKKwkgICAgbXNnX3B1dHNfYXR0cigoY2hhcl91ICopbmxbaV0ubmFtZSwgYXR0cik7CisJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJfQorfQorCisvKgorICogTGlzdCBvbmUgc3ludGF4IGNsdXN0ZXIsIGZvciAiOnN5bnRheCIgb3IgInN5bnRheCBsaXN0IHN5bnRheF9uYW1lIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzeW5fbGlzdF9jbHVzdGVyKGlkKQorICAgIGludCBpZDsKK3sKKyAgICBpbnQJICAgIGVuZGNvbCA9IDE1OworCisgICAgLyogc2xpZ2h0IGhhY2s6ICByb3VnaGx5IGR1cGxpY2F0ZSB0aGUgZ3V0cyBvZiBzeW5fbGlzdF9oZWFkZXIoKSAqLworICAgIG1zZ19wdXRjaGFyKCdcbicpOworICAgIG1zZ19vdXR0cmFucyhTWU5fQ0xTVFIoY3VyYnVmKVtpZF0uc2NsX25hbWUpOworCisgICAgaWYgKG1zZ19jb2wgPj0gZW5kY29sKQkvKiBvdXRwdXQgYXQgbGVhc3Qgb25lIHNwYWNlICovCisJZW5kY29sID0gbXNnX2NvbCArIDE7CisgICAgaWYgKENvbHVtbnMgPD0gZW5kY29sKQkvKiBhdm9pZCBoYW5nIGZvciB0aW55IHdpbmRvdyAqLworCWVuZGNvbCA9IENvbHVtbnMgLSAxOworCisgICAgbXNnX2FkdmFuY2UoZW5kY29sKTsKKyAgICBpZiAoU1lOX0NMU1RSKGN1cmJ1ZilbaWRdLnNjbF9saXN0ICE9IE5VTEwpCisgICAgeworCXB1dF9pZF9saXN0KChjaGFyX3UgKikiY2x1c3RlciIsIFNZTl9DTFNUUihjdXJidWYpW2lkXS5zY2xfbGlzdCwKKwkJICAgIGhsX2F0dHIoSExGX0QpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwltc2dfcHV0c19hdHRyKChjaGFyX3UgKikiY2x1c3RlciIsIGhsX2F0dHIoSExGX0QpKTsKKwltc2dfcHV0cygoY2hhcl91ICopIj1OT05FIik7CisgICAgfQorfQorCisgICAgc3RhdGljIHZvaWQKK3B1dF9pZF9saXN0KG5hbWUsIGxpc3QsIGF0dHIpCisgICAgY2hhcl91CSpuYW1lOworICAgIHNob3J0CSpsaXN0OworICAgIGludAkJYXR0cjsKK3sKKyAgICBzaG9ydAkJKnA7CisKKyAgICBtc2dfcHV0c19hdHRyKG5hbWUsIGF0dHIpOworICAgIG1zZ19wdXRjaGFyKCc9Jyk7CisgICAgZm9yIChwID0gbGlzdDsgKnA7ICsrcCkKKyAgICB7CisJaWYgKCpwID49IFNZTklEX0FMTEJVVCAmJiAqcCA8IFNZTklEX1RPUCkKKwl7CisJICAgIGlmIChwWzFdKQorCQlNU0dfUFVUUygiQUxMQlVUIik7CisJICAgIGVsc2UKKwkJTVNHX1BVVFMoIkFMTCIpOworCX0KKwllbHNlIGlmICgqcCA+PSBTWU5JRF9UT1AgJiYgKnAgPCBTWU5JRF9DT05UQUlORUQpCisJeworCSAgICBNU0dfUFVUUygiVE9QIik7CisJfQorCWVsc2UgaWYgKCpwID49IFNZTklEX0NPTlRBSU5FRCAmJiAqcCA8IFNZTklEX0NMVVNURVIpCisJeworCSAgICBNU0dfUFVUUygiQ09OVEFJTkVEIik7CisJfQorCWVsc2UgaWYgKCpwID49IFNZTklEX0NMVVNURVIpCisJeworCSAgICBzaG9ydCBzY2xfaWQgPSAqcCAtIFNZTklEX0NMVVNURVI7CisKKwkgICAgbXNnX3B1dGNoYXIoJ0AnKTsKKwkgICAgbXNnX291dHRyYW5zKFNZTl9DTFNUUihjdXJidWYpW3NjbF9pZF0uc2NsX25hbWUpOworCX0KKwllbHNlCisJICAgIG1zZ19vdXR0cmFucyhITF9UQUJMRSgpWypwIC0gMV0uc2dfbmFtZSk7CisJaWYgKHBbMV0pCisJICAgIG1zZ19wdXRjaGFyKCcsJyk7CisgICAgfQorICAgIG1zZ19wdXRjaGFyKCcgJyk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcHV0X3BhdHRlcm4ocywgYywgc3BwLCBhdHRyKQorICAgIGNoYXIJKnM7CisgICAgaW50CQljOworICAgIHN5bnBhdF9UCSpzcHA7CisgICAgaW50CQlhdHRyOworeworICAgIGxvbmcJbjsKKyAgICBpbnQJCW1hc2s7CisgICAgaW50CQlmaXJzdDsKKyAgICBzdGF0aWMgY2hhcgkqc2VwY2hhcnMgPSAiLys9LSNAXCJ8J14mIjsKKyAgICBpbnQJCWk7CisKKyAgICAvKiBNYXkgaGF2ZSB0byB3cml0ZSAibWF0Y2hncm91cD1ncm91cCIgKi8KKyAgICBpZiAobGFzdF9tYXRjaGdyb3VwICE9IHNwcC0+c3Bfc3luX21hdGNoX2lkKQorICAgIHsKKwlsYXN0X21hdGNoZ3JvdXAgPSBzcHAtPnNwX3N5bl9tYXRjaF9pZDsKKwltc2dfcHV0c19hdHRyKChjaGFyX3UgKikibWF0Y2hncm91cCIsIGF0dHIpOworCW1zZ19wdXRjaGFyKCc9Jyk7CisJaWYgKGxhc3RfbWF0Y2hncm91cCA9PSAwKQorCSAgICBtc2dfb3V0dHJhbnMoKGNoYXJfdSAqKSJOT05FIik7CisJZWxzZQorCSAgICBtc2dfb3V0dHJhbnMoSExfVEFCTEUoKVtsYXN0X21hdGNoZ3JvdXAgLSAxXS5zZ19uYW1lKTsKKwltc2dfcHV0Y2hhcignICcpOworICAgIH0KKworICAgIC8qIG91dHB1dCB0aGUgbmFtZSBvZiB0aGUgcGF0dGVybiBhbmQgYW4gJz0nIG9yICcgJyAqLworICAgIG1zZ19wdXRzX2F0dHIoKGNoYXJfdSAqKXMsIGF0dHIpOworICAgIG1zZ19wdXRjaGFyKGMpOworCisgICAgLyogb3V0cHV0IHRoZSBwYXR0ZXJuLCBpbiBiZXR3ZWVuIGEgY2hhciB0aGF0IGlzIG5vdCBpbiB0aGUgcGF0dGVybiAqLworICAgIGZvciAoaSA9IDA7IHZpbV9zdHJjaHIoc3BwLT5zcF9wYXR0ZXJuLCBzZXBjaGFyc1tpXSkgIT0gTlVMTDsgKQorCWlmIChzZXBjaGFyc1srK2ldID09IE5VTCkKKwl7CisJICAgIGkgPSAwOwkvKiBubyBnb29kIGNoYXIgZm91bmQsIGp1c3QgdXNlIHRoZSBmaXJzdCBvbmUgKi8KKwkgICAgYnJlYWs7CisJfQorICAgIG1zZ19wdXRjaGFyKHNlcGNoYXJzW2ldKTsKKyAgICBtc2dfb3V0dHJhbnMoc3BwLT5zcF9wYXR0ZXJuKTsKKyAgICBtc2dfcHV0Y2hhcihzZXBjaGFyc1tpXSk7CisKKyAgICAvKiBvdXRwdXQgYW55IHBhdHRlcm4gb3B0aW9ucyAqLworICAgIGZpcnN0ID0gVFJVRTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgU1BPX0NPVU5UOyArK2kpCisgICAgeworCW1hc2sgPSAoMSA8PCBpKTsKKwlpZiAoc3BwLT5zcF9vZmZfZmxhZ3MgJiAobWFzayArIChtYXNrIDw8IFNQT19DT1VOVCkpKQorCXsKKwkgICAgaWYgKCFmaXJzdCkKKwkJbXNnX3B1dGNoYXIoJywnKTsJLyogc2VwYXJhdGUgd2l0aCBjb21tYXMgKi8KKwkgICAgbXNnX3B1dHMoKGNoYXJfdSAqKXNwb19uYW1lX3RhYltpXSk7CisJICAgIG4gPSBzcHAtPnNwX29mZnNldHNbaV07CisJICAgIGlmIChpICE9IFNQT19MQ19PRkYpCisJICAgIHsKKwkJaWYgKHNwcC0+c3Bfb2ZmX2ZsYWdzICYgbWFzaykKKwkJICAgIG1zZ19wdXRjaGFyKCdzJyk7CisJCWVsc2UKKwkJICAgIG1zZ19wdXRjaGFyKCdlJyk7CisJCWlmIChuID4gMCkKKwkJICAgIG1zZ19wdXRjaGFyKCcrJyk7CisJICAgIH0KKwkgICAgaWYgKG4gfHwgaSA9PSBTUE9fTENfT0ZGKQorCQltc2dfb3V0bnVtKG4pOworCSAgICBmaXJzdCA9IEZBTFNFOworCX0KKyAgICB9CisgICAgbXNnX3B1dGNoYXIoJyAnKTsKK30KKworLyoKKyAqIExpc3Qgb3IgY2xlYXIgdGhlIGtleXdvcmRzIGZvciBvbmUgc3ludGF4IGdyb3VwLgorICogUmV0dXJuIFRSVUUgaWYgdGhlIGhlYWRlciBoYXMgYmVlbiBwcmludGVkLgorICovCisgICAgc3RhdGljIGludAorc3luX2xpc3Rfa2V5d29yZHMoaWQsIGt0YWJwLCBkaWRfaGVhZGVyLCBhdHRyKQorICAgIGludAkJaWQ7CisgICAga2V5ZW50cnlfVAkqKmt0YWJwOworICAgIGludAkJZGlkX2hlYWRlcjsJCS8qIGhlYWRlciBoYXMgYWxyZWFkeSBiZWVuIHByaW50ZWQgKi8KKyAgICBpbnQJCWF0dHI7Cit7CisgICAgaW50CQlpOworICAgIGludAkJb3V0bGVuOworICAgIGtleWVudHJ5X1QJKmt0YWI7CisgICAgaW50CQlwcmV2X2NvbnRhaW5lZCA9IDA7CisgICAgc2hvcnQJKnByZXZfbmV4dF9saXN0ID0gTlVMTDsKKyAgICBzaG9ydAkqcHJldl9jb250X2luX2xpc3QgPSBOVUxMOworICAgIGludAkJcHJldl9za2lwbmwgPSAwOworICAgIGludAkJcHJldl9za2lwd2hpdGUgPSAwOworICAgIGludAkJcHJldl9za2lwZW1wdHkgPSAwOworCisgICAgaWYgKGt0YWJwID09IE5VTEwpCisJcmV0dXJuIGRpZF9oZWFkZXI7CisKKyAgICAvKgorICAgICAqIFVuZm9ydHVuYXRlbHksIHRoaXMgbGlzdCBvZiBrZXl3b3JkcyBpcyBub3Qgc29ydGVkIG9uIGFscGhhYmV0IGJ1dCBvbgorICAgICAqIGhhc2ggdmFsdWUuLi4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgS0hBU0hfU0laRTsgKytpKQorICAgIHsKKwlmb3IgKGt0YWIgPSBrdGFicFtpXTsga3RhYiAhPSBOVUxMICYmICFnb3RfaW50OyBrdGFiID0ga3RhYi0+bmV4dCkKKwl7CisJICAgIGlmIChrdGFiLT5rX3N5bi5pZCA9PSBpZCkKKwkgICAgeworCQlpZiAocHJldl9jb250YWluZWQgIT0gKGt0YWItPmZsYWdzICYgSExfQ09OVEFJTkVEKQorCQkJfHwgcHJldl9za2lwbmwgIT0gKGt0YWItPmZsYWdzICYgSExfU0tJUE5MKQorCQkJfHwgcHJldl9za2lwd2hpdGUgIT0gKGt0YWItPmZsYWdzICYgSExfU0tJUFdISVRFKQorCQkJfHwgcHJldl9za2lwZW1wdHkgIT0gKGt0YWItPmZsYWdzICYgSExfU0tJUEVNUFRZKQorCQkJfHwgcHJldl9jb250X2luX2xpc3QgIT0ga3RhYi0+a19zeW4uY29udF9pbl9saXN0CisJCQl8fCBwcmV2X25leHRfbGlzdCAhPSBrdGFiLT5uZXh0X2xpc3QpCisJCSAgICBvdXRsZW4gPSA5OTk5OworCQllbHNlCisJCSAgICBvdXRsZW4gPSAoaW50KVNUUkxFTihrdGFiLT5rZXl3b3JkKTsKKwkJLyogb3V0cHV0ICJjb250YWluZWQiIGFuZCAibmV4dGdyb3VwIiBvbiBlYWNoIGxpbmUgKi8KKwkJaWYgKHN5bl9saXN0X2hlYWRlcihkaWRfaGVhZGVyLCBvdXRsZW4sIGlkKSkKKwkJeworCQkgICAgcHJldl9jb250YWluZWQgPSAwOworCQkgICAgcHJldl9uZXh0X2xpc3QgPSBOVUxMOworCQkgICAgcHJldl9jb250X2luX2xpc3QgPSBOVUxMOworCQkgICAgcHJldl9za2lwbmwgPSAwOworCQkgICAgcHJldl9za2lwd2hpdGUgPSAwOworCQkgICAgcHJldl9za2lwZW1wdHkgPSAwOworCQl9CisJCWRpZF9oZWFkZXIgPSBUUlVFOworCQlpZiAocHJldl9jb250YWluZWQgIT0gKGt0YWItPmZsYWdzICYgSExfQ09OVEFJTkVEKSkKKwkJeworCQkgICAgbXNnX3B1dHNfYXR0cigoY2hhcl91ICopImNvbnRhaW5lZCIsIGF0dHIpOworCQkgICAgbXNnX3B1dGNoYXIoJyAnKTsKKwkJICAgIHByZXZfY29udGFpbmVkID0gKGt0YWItPmZsYWdzICYgSExfQ09OVEFJTkVEKTsKKwkJfQorCQlpZiAoa3RhYi0+a19zeW4uY29udF9pbl9saXN0ICE9IHByZXZfY29udF9pbl9saXN0KQorCQl7CisJCSAgICBwdXRfaWRfbGlzdCgoY2hhcl91ICopImNvbnRhaW5lZGluIiwKKwkJCQkJICAgICAga3RhYi0+a19zeW4uY29udF9pbl9saXN0LCBhdHRyKTsKKwkJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJCSAgICBwcmV2X2NvbnRfaW5fbGlzdCA9IGt0YWItPmtfc3luLmNvbnRfaW5fbGlzdDsKKwkJfQorCQlpZiAoa3RhYi0+bmV4dF9saXN0ICE9IHByZXZfbmV4dF9saXN0KQorCQl7CisJCSAgICBwdXRfaWRfbGlzdCgoY2hhcl91ICopIm5leHRncm91cCIsIGt0YWItPm5leHRfbGlzdCwgYXR0cik7CisJCSAgICBtc2dfcHV0Y2hhcignICcpOworCQkgICAgcHJldl9uZXh0X2xpc3QgPSBrdGFiLT5uZXh0X2xpc3Q7CisJCSAgICBpZiAoa3RhYi0+ZmxhZ3MgJiBITF9TS0lQTkwpCisJCSAgICB7CisJCQltc2dfcHV0c19hdHRyKChjaGFyX3UgKikic2tpcG5sIiwgYXR0cik7CisJCQltc2dfcHV0Y2hhcignICcpOworCQkJcHJldl9za2lwbmwgPSAoa3RhYi0+ZmxhZ3MgJiBITF9TS0lQTkwpOworCQkgICAgfQorCQkgICAgaWYgKGt0YWItPmZsYWdzICYgSExfU0tJUFdISVRFKQorCQkgICAgeworCQkJbXNnX3B1dHNfYXR0cigoY2hhcl91ICopInNraXB3aGl0ZSIsIGF0dHIpOworCQkJbXNnX3B1dGNoYXIoJyAnKTsKKwkJCXByZXZfc2tpcHdoaXRlID0gKGt0YWItPmZsYWdzICYgSExfU0tJUFdISVRFKTsKKwkJICAgIH0KKwkJICAgIGlmIChrdGFiLT5mbGFncyAmIEhMX1NLSVBFTVBUWSkKKwkJICAgIHsKKwkJCW1zZ19wdXRzX2F0dHIoKGNoYXJfdSAqKSJza2lwZW1wdHkiLCBhdHRyKTsKKwkJCW1zZ19wdXRjaGFyKCcgJyk7CisJCQlwcmV2X3NraXBlbXB0eSA9IChrdGFiLT5mbGFncyAmIEhMX1NLSVBFTVBUWSk7CisJCSAgICB9CisJCX0KKwkJbXNnX291dHRyYW5zKGt0YWItPmtleXdvcmQpOworCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVybiBkaWRfaGVhZGVyOworfQorCisgICAgc3RhdGljIHZvaWQKK3N5bl9jbGVhcl9rZXl3b3JkKGlkLCBrdGFicCkKKyAgICBpbnQJCWlkOworICAgIGtleWVudHJ5X1QJKiprdGFicDsKK3sKKyAgICBpbnQJCWk7CisgICAga2V5ZW50cnlfVAkqa3RhYjsKKyAgICBrZXllbnRyeV9UCSprdGFiX3ByZXY7CisgICAga2V5ZW50cnlfVAkqa3RhYl9uZXh0OworCisgICAgaWYgKGt0YWJwID09IE5VTEwpCSAgICAvKiBubyBrZXl3b3JkcyBwcmVzZW50ICovCisJcmV0dXJuOworCisgICAgZm9yIChpID0gMDsgaSA8IEtIQVNIX1NJWkU7ICsraSkKKyAgICB7CisJa3RhYl9wcmV2ID0gTlVMTDsKKwlmb3IgKGt0YWIgPSBrdGFicFtpXTsga3RhYiAhPSBOVUxMOyApCisJeworCSAgICBpZiAoa3RhYi0+a19zeW4uaWQgPT0gaWQpCisJICAgIHsKKwkJa3RhYl9uZXh0ID0ga3RhYi0+bmV4dDsKKwkJaWYgKGt0YWJfcHJldiA9PSBOVUxMKQorCQkgICAga3RhYnBbaV0gPSBrdGFiX25leHQ7CisJCWVsc2UKKwkJICAgIGt0YWJfcHJldi0+bmV4dCA9IGt0YWJfbmV4dDsKKwkJdmltX2ZyZWUoa3RhYik7CisJCWt0YWIgPSBrdGFiX25leHQ7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWt0YWJfcHJldiA9IGt0YWI7CisJCWt0YWIgPSBrdGFiLT5uZXh0OworCSAgICB9CisJfQorICAgIH0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZSBmdW5jdGlvbiB0byBmcmVlKCkgYSBicmFuY2ggb2YgYSBrd29yZHRhYi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmcmVlX2tleXd0YWIoa3RhYnApCisgICAga2V5ZW50cnlfVAkqKmt0YWJwOworeworICAgIGludAkJaTsKKyAgICBrZXllbnRyeV9UCSprdGFiOworICAgIGtleWVudHJ5X1QJKmt0YWJfbmV4dDsKKworICAgIGlmIChrdGFicCAhPSBOVUxMKQorICAgIHsKKwlmb3IgKGkgPSAwOyBpIDwgS0hBU0hfU0laRTsgKytpKQorCSAgICBmb3IgKGt0YWIgPSBrdGFicFtpXTsga3RhYiAhPSBOVUxMOyBrdGFiID0ga3RhYl9uZXh0KQorCSAgICB7CisJCWt0YWJfbmV4dCA9IGt0YWItPm5leHQ7CisJCXZpbV9mcmVlKGt0YWItPm5leHRfbGlzdCk7CisJCXZpbV9mcmVlKGt0YWItPmtfc3luLmNvbnRfaW5fbGlzdCk7CisJCXZpbV9mcmVlKGt0YWIpOworCSAgICB9CisJdmltX2ZyZWUoa3RhYnApOworICAgIH0KK30KKworLyoKKyAqIEFkZCBhIGtleXdvcmQgdG8gdGhlIGxpc3Qgb2Yga2V5d29yZHMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYWRkX2tleXdvcmQobmFtZSwgaWQsIGZsYWdzLCBjb250X2luX2xpc3QsIG5leHRfbGlzdCkKKyAgICBjaGFyX3UJKm5hbWU7CSAgICAvKiBuYW1lIG9mIGtleXdvcmQgKi8KKyAgICBpbnQJCWlkOwkgICAgLyogZ3JvdXAgSUQgZm9yIHRoaXMga2V5d29yZCAqLworICAgIGludAkJZmxhZ3M7CSAgICAvKiBmbGFncyBmb3IgdGhpcyBrZXl3b3JkICovCisgICAgc2hvcnQJKmNvbnRfaW5fbGlzdDsgLyogY29udGFpbmVkaW4gZm9yIHRoaXMga2V5d29yZCAqLworICAgIHNob3J0CSpuZXh0X2xpc3Q7IC8qIG5leHRncm91cCBmb3IgdGhpcyBrZXl3b3JkICovCit7CisgICAga2V5ZW50cnlfVAkqa3RhYjsKKyAgICBrZXllbnRyeV9UCSoqKmt0YWJwcDsKKyAgICBpbnQJCWhhc2g7CisgICAgY2hhcl91CSpuYW1lX2ljID0gbmFtZTsKKworICAgIGlmIChjdXJidWYtPmJfc3luX2ljKQorICAgIHsKKwluYW1lX2ljID0gc3RyX2ZvbGRjYXNlKG5hbWUsIChpbnQpU1RSTEVOKG5hbWUpKTsKKwlpZiAobmFtZV9pYyA9PSBOVUxMKQorCSAgICBuYW1lX2ljID0gbmFtZTsKKyAgICB9CisgICAga3RhYiA9IChrZXllbnRyeV9UICopYWxsb2MoKGludCkoc2l6ZW9mKGtleWVudHJ5X1QpICsgU1RSTEVOKG5hbWVfaWMpKSk7CisgICAgaWYgKGt0YWIgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgU1RSQ1BZKGt0YWItPmtleXdvcmQsIG5hbWVfaWMpOworICAgIGlmIChuYW1lX2ljICE9IG5hbWUpCisJdmltX2ZyZWUobmFtZV9pYyk7CisgICAga3RhYi0+a19zeW4uaWQgPSBpZDsKKyAgICBrdGFiLT5rX3N5bi5pbmNfdGFnID0gY3VycmVudF9zeW5faW5jX3RhZzsKKyAgICBrdGFiLT5mbGFncyA9IGZsYWdzOworICAgIGt0YWItPmtfc3luLmNvbnRfaW5fbGlzdCA9IGNvcHlfaWRfbGlzdChjb250X2luX2xpc3QpOworICAgIGlmIChjb250X2luX2xpc3QgIT0gTlVMTCkKKwljdXJidWYtPmJfc3luX2NvbnRhaW5lZGluID0gVFJVRTsKKyAgICBrdGFiLT5uZXh0X2xpc3QgPSBjb3B5X2lkX2xpc3QobmV4dF9saXN0KTsKKworICAgIGlmIChjdXJidWYtPmJfc3luX2ljKQorCWt0YWJwcCA9ICZjdXJidWYtPmJfa2V5d3RhYl9pYzsKKyAgICBlbHNlCisJa3RhYnBwID0gJmN1cmJ1Zi0+Yl9rZXl3dGFiOworCisgICAgaWYgKCprdGFicHAgPT0gTlVMTCkKKyAgICB7CisJKmt0YWJwcCA9IChrZXllbnRyeV9UICoqKWFsbG9jX2NsZWFyKAorCQkJCSAgICAoaW50KShzaXplb2Yoa2V5ZW50cnlfVCAqKSAqIEtIQVNIX1NJWkUpKTsKKwlpZiAoKmt0YWJwcCA9PSBOVUxMKQorCSAgICByZXR1cm47CisgICAgfQorCisgICAgaGFzaCA9IHN5bl9raGFzaChrdGFiLT5rZXl3b3JkKTsKKyAgICBrdGFiLT5uZXh0ID0gKCprdGFicHApW2hhc2hdOworICAgICgqa3RhYnBwKVtoYXNoXSA9IGt0YWI7Cit9CisKKy8qCisgKiBDb21wdXRlIGEgaGFzaCB2YWx1ZSBmb3IgYSBrZXl3b3JkLiAgVXNlcyB0aGUgRWxmSGFzaCBhbGdvcml0aG0sIHdoaWNoIGlzCisgKiBzdXBwb3NlZCB0byBoYXZlIGFuIGV2ZW4gZGlzdHJpYnV0aW9uIChzdWdnZXN0ZWQgYnkgQ2hhcmxlcyBDYW1wYmVsbCkuCisgKi8KKyAgICBzdGF0aWMgaW50CitzeW5fa2hhc2gocCkKKyAgICBjaGFyX3UJKnA7Cit7CisgICAgbG9uZ191CWhhc2ggPSAwOworICAgIGxvbmdfdQlnOworCisgICAgd2hpbGUgKCpwICE9IE5VTCkKKyAgICB7CisJaGFzaCA9IChoYXNoIDw8IDQpICsgKnArKzsJLyogY2xlYXIgbG93IDQgYml0cyBvZiBoYXNoLCBhZGQgY2hhciAqLworCWcgPSBoYXNoICYgMHhmMDAwMDAwMEw7CQkvKiBnIGhhcyBoaWdoIDQgYml0cyBvZiBoYXNoIG9ubHkgKi8KKwlpZiAoZyAhPSAwKQorCSAgICBoYXNoIF49IGcgPj4gMjQ7CQkvKiB4b3IgZydzIGhpZ2ggNCBiaXRzIGludG8gaGFzaCAqLworICAgIH0KKworICAgIHJldHVybiAoaW50KShoYXNoICYgS0hBU0hfTUFTSyk7Cit9CisKKy8qCisgKiBHZXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGdyb3VwIG5hbWUgYXJndW1lbnQuCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAqIFJldHVybiBOVUxMIGlmIHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgd2FzIGZvdW5kIGluc3RlYWQgb2YgZnVydGhlciBhcmdzLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitnZXRfZ3JvdXBfbmFtZShhcmcsIG5hbWVfZW5kKQorICAgIGNoYXJfdQkqYXJnOwkJLyogc3RhcnQgb2YgdGhlIGFyZ3VtZW50ICovCisgICAgY2hhcl91CSoqbmFtZV9lbmQ7CS8qIHBvaW50ZXIgdG8gZW5kIG9mIHRoZSBuYW1lICovCit7CisgICAgY2hhcl91CSpyZXN0OworCisgICAgKm5hbWVfZW5kID0gc2tpcHRvd2hpdGUoYXJnKTsKKyAgICByZXN0ID0gc2tpcHdoaXRlKCpuYW1lX2VuZCk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHRoZXJlIGFyZSBlbm91Z2ggYXJndW1lbnRzLiAgVGhlIGZpcnN0IGFyZ3VtZW50IG1heSBiZSBhCisgICAgICogcGF0dGVybiwgd2hlcmUgJ3wnIGlzIGFsbG93ZWQsIHNvIG9ubHkgY2hlY2sgZm9yIE5VTC4KKyAgICAgKi8KKyAgICBpZiAoZW5kc19leGNtZCgqYXJnKSB8fCAqcmVzdCA9PSBOVUwpCisJcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHJlc3Q7Cit9CisKKy8qCisgKiBDaGVjayBmb3Igc3ludGF4IGNvbW1hbmQgb3B0aW9uIGFyZ3VtZW50cy4KKyAqIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgcGxhY2UgaW4gdGhlIGxpc3Qgb2YgYXJndW1lbnRzLCBhbmQganVzdCBwaWNrcworICogb3V0IHRoZSBhcmd1bWVudHMgdGhhdCBhcmUga25vd24uICBDYW4gYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgaW4gYSByb3cgdG8KKyAqIGNvbGxlY3QgYWxsIG9wdGlvbnMgaW4gYmV0d2VlbiBvdGhlciBhcmd1bWVudHMuCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXh0IGFyZ3VtZW50ICh3aGljaCBpc24ndCBhbiBvcHRpb24pLgorICogUmV0dXJuIE5VTEwgZm9yIGFueSBlcnJvcjsKKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorZ2V0X3N5bl9vcHRpb25zKGFyZywgZmxhZ3NwLCBrZXl3b3JkLCBzeW5jX2lkeCwgY29udF9saXN0LAorCQkJCQkJICAgICAgY29udF9pbl9saXN0LCBuZXh0X2xpc3QpCisgICAgY2hhcl91CSphcmc7CQkvKiBuZXh0IGFyZ3VtZW50ICovCisgICAgaW50CQkqZmxhZ3NwOwkvKiBmbGFncyBmb3IgY29udGFpbmVkIGFuZCB0cmFuc3BhcnRlbnQgKi8KKyAgICBpbnQJCWtleXdvcmQ7CS8qIFRSVUUgZm9yICI6c3luIGtleXdvcmQiICovCisgICAgaW50CQkqc3luY19pZHg7CS8qIHN5bnRheCBpdGVtIGZvciAiZ3JvdXBoZXJlIiBhcmd1bWVudCwgTlVMTAorCQkJCSAgIGlmIG5vdCBhbGxvd2VkICovCisgICAgc2hvcnQJKipjb250X2xpc3Q7CS8qIGdyb3VwIElEcyBmb3IgImNvbnRhaW5zIiBhcmd1bWVudCwgTlVMTCBpZgorCQkJCSAgIG5vdCBhbGxvd2VkICovCisgICAgc2hvcnQJKipjb250X2luX2xpc3Q7CS8qIGdyb3VwIElEcyBmb3IgImNvbnRhaW5lZGluIiBhcmd1bWVudCwgTlVMTAorCQkJCSAgIGlmIG5vdCBhbGxvd2VkICovCisgICAgc2hvcnQJKipuZXh0X2xpc3Q7CS8qIGdyb3VwIElEcyBmb3IgIm5leHRncm91cCIgYXJndW1lbnQgKi8KK3sKKyAgICBpbnQJCWZsYWdzOworICAgIGNoYXJfdQkqZ25hbWVfc3RhcnQsICpnbmFtZTsKKyAgICBpbnQJCXN5bl9pZDsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWk7CisgICAgaW50CQlmaWR4OworICAgIHN0YXRpYyBzdHJ1Y3QgZmxhZworICAgIHsKKwljaGFyCSpuYW1lOworCWludAlsZW47CisJaW50CXZhbDsKKyAgICB9IGZsYWd0YWJbXSA9IHsgeyJjb250YWluZWQiLCAgIDksCUhMX0NPTlRBSU5FRH0sCisJCSAgICB7Im9uZWxpbmUiLAkgICAgNywJSExfT05FTElORX0sCisJCSAgICB7ImtlZXBlbmQiLAkgICAgNywJSExfS0VFUEVORH0sCisJCSAgICB7ImV4dGVuZCIsCSAgICA2LAlITF9FWFRFTkR9LAorCQkgICAgeyJleGNsdWRlbmwiLCAgIDksCUhMX0VYQ0xVREVOTH0sCisJCSAgICB7InRyYW5zcGFyZW50IiwgMTEsIEhMX1RSQU5TUH0sCisJCSAgICB7InNraXBubCIsCSAgICA2LAlITF9TS0lQTkx9LAorCQkgICAgeyJza2lwd2hpdGUiLCAgIDksCUhMX1NLSVBXSElURX0sCisJCSAgICB7InNraXBlbXB0eSIsICAgOSwJSExfU0tJUEVNUFRZfSwKKwkJICAgIHsiZ3JvdXBoZXJlIiwgICA5LAlITF9TWU5DX0hFUkV9LAorCQkgICAgeyJncm91cHRoZXJlIiwgIDEwLAlITF9TWU5DX1RIRVJFfSwKKwkJICAgIHsiZGlzcGxheSIsCSAgICA3LAlITF9ESVNQTEFZfSwKKwkJICAgIHsiZm9sZCIsCSAgICA0LAlITF9GT0xEfSwKKwkJfTsKKyNkZWZpbmUgTUxFTiAxMgorICAgIGNoYXIJbG93bmFtZVtNTEVOXTsKKyAgICBpbnQJCWxsZW47CisKKyAgICBpZiAoYXJnID09IE5VTEwpCQkvKiBhbHJlYWR5IGRldGVjdGVkIGVycm9yICovCisJcmV0dXJuIE5VTEw7CisKKyAgICBmbGFncyA9ICpmbGFnc3A7CisgICAgZm9yICg7OykKKyAgICB7CisJLyogU1RSTklDTVAoKSBpcyBhIGJpdCBzbG93LCBjaGFuZ2UgYXJnIHRvIGxvd2VyY2FzZSBmaXJzdCBhbmQgdXNlCisJICogU1RSTkNNUCgpICovCisJZm9yIChsbGVuID0gMDsgbGxlbiA8IE1MRU47ICsrbGxlbikKKwl7CisJICAgIGlmICghaXNhbHBoYShhcmdbbGxlbl0pKQorCQlicmVhazsKKwkgICAgbG93bmFtZVtsbGVuXSA9IFRPTE9XRVJfQVNDKGFyZ1tsbGVuXSk7CisJfQorCisJZm9yIChmaWR4ID0gc2l6ZW9mKGZsYWd0YWIpIC8gc2l6ZW9mKHN0cnVjdCBmbGFnKTsgLS1maWR4ID49IDA7ICkKKwl7CisJICAgIGxlbiA9IGZsYWd0YWJbZmlkeF0ubGVuOworCSAgICBpZiAobGVuID09IGxsZW4KKwkJICAgICYmIFNUUk5DTVAobG93bmFtZSwgZmxhZ3RhYltmaWR4XS5uYW1lLCBsZW4pID09IDAKKwkJICAgICYmIChlbmRzX2V4Y21kKGFyZ1tsZW5dKSB8fCB2aW1faXN3aGl0ZShhcmdbbGVuXSkpKQorCSAgICB7CisJCWlmIChrZXl3b3JkCisJCQkmJiAoZmxhZ3RhYltmaWR4XS52YWwgPT0gSExfRElTUExBWQorCQkJICAgIHx8IGZsYWd0YWJbZmlkeF0udmFsID09IEhMX0ZPTEQKKwkJCSAgICB8fCBmbGFndGFiW2ZpZHhdLnZhbCA9PSBITF9FWFRFTkQpKQorCQl7CisJCSAgICAvKiB0cmVhdCAiZGlzcGxheSIsICJmb2xkIiBhbmQgImV4dGVuZCIgYXMgYSBrZXl3b3JkICovCisJCSAgICBmaWR4ID0gLTE7CisJCSAgICBicmVhazsKKwkJfQorCisJCWZsYWdzIHw9IGZsYWd0YWJbZmlkeF0udmFsOworCQlhcmcgPSBza2lwd2hpdGUoYXJnICsgbGVuKTsKKworCQlpZiAoZmxhZ3RhYltmaWR4XS52YWwgPT0gSExfU1lOQ19IRVJFCisJCQl8fCBmbGFndGFiW2ZpZHhdLnZhbCA9PSBITF9TWU5DX1RIRVJFKQorCQl7CisJCSAgICBpZiAoc3luY19pZHggPT0gTlVMTCkKKwkJICAgIHsKKwkJCUVNU0coXygiRTM5MzogZ3JvdXBbdF1oZXJlIG5vdCBhY2NlcHRlZCBoZXJlIikpOworCQkJcmV0dXJuIE5VTEw7CisJCSAgICB9CisJCSAgICBnbmFtZV9zdGFydCA9IGFyZzsKKwkJICAgIGFyZyA9IHNraXB0b3doaXRlKGFyZyk7CisJCSAgICBpZiAoZ25hbWVfc3RhcnQgPT0gYXJnKQorCQkJcmV0dXJuIE5VTEw7CisJCSAgICBnbmFtZSA9IHZpbV9zdHJuc2F2ZShnbmFtZV9zdGFydCwgKGludCkoYXJnIC0gZ25hbWVfc3RhcnQpKTsKKwkJICAgIGlmIChnbmFtZSA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJCSAgICBpZiAoU1RSQ01QKGduYW1lLCAiTk9ORSIpID09IDApCisJCQkqc3luY19pZHggPSBOT05FX0lEWDsKKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCXN5bl9pZCA9IHN5bl9uYW1lMmlkKGduYW1lKTsKKwkJCWZvciAoaSA9IGN1cmJ1Zi0+Yl9zeW5fcGF0dGVybnMuZ2FfbGVuOyAtLWkgPj0gMDsgKQorCQkJICAgIGlmIChTWU5fSVRFTVMoY3VyYnVmKVtpXS5zcF9zeW4uaWQgPT0gc3luX2lkCisJCQkJJiYgU1lOX0lURU1TKGN1cmJ1ZilbaV0uc3BfdHlwZSA9PSBTUFRZUEVfU1RBUlQpCisJCQkgICAgeworCQkJCSpzeW5jX2lkeCA9IGk7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJaWYgKGkgPCAwKQorCQkJeworCQkJICAgIEVNU0cyKF8oIkUzOTQ6IERpZG4ndCBmaW5kIHJlZ2lvbiBpdGVtIGZvciAlcyIpLCBnbmFtZSk7CisJCQkgICAgdmltX2ZyZWUoZ25hbWUpOworCQkJICAgIHJldHVybiBOVUxMOworCQkJfQorCQkgICAgfQorCisJCSAgICB2aW1fZnJlZShnbmFtZSk7CisJCSAgICBhcmcgPSBza2lwd2hpdGUoYXJnKTsKKwkJfQorI2lmZGVmIEZFQVRfRk9MRElORworCQllbHNlIGlmIChmbGFndGFiW2ZpZHhdLnZhbCA9PSBITF9GT0xECisJCQkJCQkmJiBmb2xkbWV0aG9kSXNTeW50YXgoY3Vyd2luKSkKKwkJeworCQkgICAgLyogTmVlZCB0byB1cGRhdGUgZm9sZHMgbGF0ZXIuICovCisJCSAgICBmb2xkVXBkYXRlQWxsKGN1cndpbik7CisJCX0KKyNlbmRpZgorCQlicmVhazsKKwkgICAgfQorCX0KKwlpZiAoZmlkeCA+PSAwKQorCSAgICBjb250aW51ZTsKKworCWlmIChsbGVuID09IDggJiYgU1RSTkNNUChsb3duYW1lLCAiY29udGFpbnMiLCA4KSA9PSAwCisJCSYmICh2aW1faXN3aGl0ZShhcmdbOF0pIHx8IGFyZ1s4XSA9PSAnPScpKQorCXsKKwkgICAgaWYgKGNvbnRfbGlzdCA9PSBOVUxMKQorCSAgICB7CisJCUVNU0coXygiRTM5NTogY29udGFpbnMgYXJndW1lbnQgbm90IGFjY2VwdGVkIGhlcmUiKSk7CisJCXJldHVybiBOVUxMOworCSAgICB9CisJICAgIGlmIChnZXRfaWRfbGlzdCgmYXJnLCA4LCBjb250X2xpc3QpID09IEZBSUwpCisJCXJldHVybiBOVUxMOworCX0KKwllbHNlIGlmIChsbGVuID09IDExICYmIFNUUk5DTVAobG93bmFtZSwgImNvbnRhaW5lZGluIiwgMTEpID09IDAKKwkJJiYgKHZpbV9pc3doaXRlKGFyZ1sxMV0pIHx8IGFyZ1sxMV0gPT0gJz0nKSkKKwl7CisJICAgIGlmIChjb250X2luX2xpc3QgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHKF8oIkUzOTY6IGNvbnRhaW5lZGluIGFyZ3VtZW50IG5vdCBhY2NlcHRlZCBoZXJlIikpOworCQlyZXR1cm4gTlVMTDsKKwkgICAgfQorCSAgICBpZiAoZ2V0X2lkX2xpc3QoJmFyZywgMTEsIGNvbnRfaW5fbGlzdCkgPT0gRkFJTCkKKwkJcmV0dXJuIE5VTEw7CisJfQorCWVsc2UgaWYgKGxsZW4gPT0gOSAmJiBTVFJOQ01QKGxvd25hbWUsICJuZXh0Z3JvdXAiLCA5KSA9PSAwCisJCSYmICh2aW1faXN3aGl0ZShhcmdbOV0pIHx8IGFyZ1s5XSA9PSAnPScpKQorCXsKKwkgICAgaWYgKGdldF9pZF9saXN0KCZhcmcsIDksIG5leHRfbGlzdCkgPT0gRkFJTCkKKwkJcmV0dXJuIE5VTEw7CisJfQorCWVsc2UKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgKmZsYWdzcCA9IGZsYWdzOworCisgICAgcmV0dXJuIGFyZzsKK30KKworLyoKKyAqIEFkanVzdG1lbnRzIHRvIHN5bnRheCBpdGVtIHdoZW4gZGVjbGFyZWQgaW4gYSAiOnN5biBpbmNsdWRlIidkIGZpbGUuCisgKiBTZXQgdGhlIGNvbnRhaW5lZCBmbGFnLCBhbmQgaWYgdGhlIGl0ZW0gaXMgbm90IGFscmVhZHkgY29udGFpbmVkLCBhZGQgaXQKKyAqIHRvIHRoZSBzcGVjaWZpZWQgdG9wLWxldmVsIGdyb3VwLCBpZiBhbnkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2luY2xfdG9wbGV2ZWwoaWQsIGZsYWdzcCkKKyAgICBpbnQJCWlkOworICAgIGludAkJKmZsYWdzcDsKK3sKKyAgICBpZiAoKCpmbGFnc3AgJiBITF9DT05UQUlORUQpIHx8IGN1cmJ1Zi0+Yl9zeW5fdG9wZ3JwID09IDApCisJcmV0dXJuOworICAgICpmbGFnc3AgfD0gSExfQ09OVEFJTkVEOworICAgIGlmIChjdXJidWYtPmJfc3luX3RvcGdycCA+PSBTWU5JRF9DTFVTVEVSKQorICAgIHsKKwkvKiBXZSBoYXZlIHRvIGFsbG9jIHRoaXMsIGJlY2F1c2Ugc3luX2NvbWJpbmVfbGlzdCgpIHdpbGwgZnJlZSBpdC4gKi8KKwlzaG9ydAkgICAgKmdycF9saXN0ID0gKHNob3J0ICopYWxsb2MoKHVuc2lnbmVkKSgyICogc2l6ZW9mKHNob3J0KSkpOworCWludAkgICAgdGxnX2lkID0gY3VyYnVmLT5iX3N5bl90b3BncnAgLSBTWU5JRF9DTFVTVEVSOworCisJaWYgKGdycF9saXN0ICE9IE5VTEwpCisJeworCSAgICBncnBfbGlzdFswXSA9IGlkOworCSAgICBncnBfbGlzdFsxXSA9IDA7CisJICAgIHN5bl9jb21iaW5lX2xpc3QoJlNZTl9DTFNUUihjdXJidWYpW3RsZ19pZF0uc2NsX2xpc3QsICZncnBfbGlzdCwKKwkJCSBDTFVTVEVSX0FERCk7CisJfQorICAgIH0KK30KKworLyoKKyAqIEhhbmRsZSAiOnN5bnRheCBpbmNsdWRlIFtAe2dyb3VwLW5hbWV9XSBmaWxlbmFtZSIgY29tbWFuZC4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NtZF9pbmNsdWRlKGVhcCwgc3luY2luZykKKyAgICBleGFyZ19UCSplYXA7CisgICAgaW50CQlzeW5jaW5nOwkgICAgLyogbm90IHVzZWQgKi8KK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIGludAkJc2dsX2lkID0gMTsKKyAgICBjaGFyX3UJKmdyb3VwX25hbWVfZW5kOworICAgIGNoYXJfdQkqcmVzdDsKKyAgICBjaGFyX3UJKmVycm9ybXNnID0gTlVMTDsKKyAgICBpbnQJCXByZXZfdG9wbHZsX2dycDsKKyAgICBpbnQJCXByZXZfc3luX2luY190YWc7CisgICAgaW50CQlzb3VyY2UgPSBGQUxTRTsKKworICAgIGVhcC0+bmV4dGNtZCA9IGZpbmRfbmV4dGNtZChhcmcpOworICAgIGlmIChlYXAtPnNraXApCisJcmV0dXJuOworCisgICAgaWYgKGFyZ1swXSA9PSAnQCcpCisgICAgeworCSsrYXJnOworCXJlc3QgPSBnZXRfZ3JvdXBfbmFtZShhcmcsICZncm91cF9uYW1lX2VuZCk7CisJaWYgKHJlc3QgPT0gTlVMTCkKKwl7CisJICAgIEVNU0coKGNoYXJfdSAqKV8oIkUzOTc6IEZpbGVuYW1lIHJlcXVpcmVkIikpOworCSAgICByZXR1cm47CisJfQorCXNnbF9pZCA9IHN5bl9jaGVja19jbHVzdGVyKGFyZywgKGludCkoZ3JvdXBfbmFtZV9lbmQgLSBhcmcpKTsKKwkvKiBzZXBhcmF0ZV9uZXh0Y21kKCkgYW5kIGV4cGFuZF9maWxlbmFtZSgpIGRlcGVuZCBvbiB0aGlzICovCisJZWFwLT5hcmcgPSByZXN0OworICAgIH0KKworICAgIC8qCisgICAgICogRXZlcnl0aGluZyB0aGF0J3MgbGVmdCwgdXAgdG8gdGhlIG5leHQgY29tbWFuZCwgc2hvdWxkIGJlIHRoZQorICAgICAqIGZpbGVuYW1lIHRvIGluY2x1ZGUuCisgICAgICovCisgICAgZWFwLT5hcmd0IHw9IChYRklMRSB8IE5PU1BDKTsKKyAgICBzZXBhcmF0ZV9uZXh0Y21kKGVhcCk7CisgICAgaWYgKCplYXAtPmFyZyA9PSAnPCcgfHwgKmVhcC0+YXJnID09ICckJyB8fCBtY2hfaXNGdWxsTmFtZShlYXAtPmFyZykpCisgICAgeworCS8qIEZvciBhbiBhYnNvbHV0ZSBwYXRoLCAiJFZJTS8uLi4iIG9yICI8c2ZpbGU+Li4iIHdlICI6c291cmNlIiB0aGUKKwkgKiBmaWxlLiAgTmVlZCB0byBleHBhbmQgdGhlIGZpbGUgbmFtZSBmaXJzdC4gIEluIG90aGVyIGNhc2VzCisJICogIjpydW50aW1lISIgaXMgdXNlZC4gKi8KKwlzb3VyY2UgPSBUUlVFOworCWlmIChleHBhbmRfZmlsZW5hbWUoZWFwLCBzeW5fY21kbGluZXAsICZlcnJvcm1zZykgPT0gRkFJTCkKKwl7CisJICAgIGlmIChlcnJvcm1zZyAhPSBOVUxMKQorCQlFTVNHKGVycm9ybXNnKTsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFNhdmUgYW5kIHJlc3RvcmUgdGhlIGV4aXN0aW5nIHRvcC1sZXZlbCBncm91cGxpc3QgaWQgYW5kICI6c3luCisgICAgICogaW5jbHVkZSIgdGFnIGFyb3VuZCB0aGUgYWN0dWFsIGluY2x1c2lvbi4KKyAgICAgKi8KKyAgICBwcmV2X3N5bl9pbmNfdGFnID0gY3VycmVudF9zeW5faW5jX3RhZzsKKyAgICBjdXJyZW50X3N5bl9pbmNfdGFnID0gKytydW5uaW5nX3N5bl9pbmNfdGFnOworICAgIHByZXZfdG9wbHZsX2dycCA9IGN1cmJ1Zi0+Yl9zeW5fdG9wZ3JwOworICAgIGN1cmJ1Zi0+Yl9zeW5fdG9wZ3JwID0gc2dsX2lkOworICAgIGlmIChzb3VyY2UgPyBkb19zb3VyY2UoZWFwLT5hcmcsIEZBTFNFLCBGQUxTRSkgPT0gRkFJTAorCQkJCQk6IGNtZF9ydW50aW1lKGVhcC0+YXJnLCBUUlVFKSA9PSBGQUlMKQorCUVNU0cyKF8oZV9ub3RvcGVuKSwgZWFwLT5hcmcpOworICAgIGN1cmJ1Zi0+Yl9zeW5fdG9wZ3JwID0gcHJldl90b3BsdmxfZ3JwOworICAgIGN1cnJlbnRfc3luX2luY190YWcgPSBwcmV2X3N5bl9pbmNfdGFnOworfQorCisvKgorICogSGFuZGxlICI6c3ludGF4IGtleXdvcmQge2dyb3VwLW5hbWV9IFt7b3B0aW9ufV0ga2V5d29yZCAuLiIgY29tbWFuZC4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NtZF9rZXl3b3JkKGVhcCwgc3luY2luZykKKyAgICBleGFyZ19UCSplYXA7CisgICAgaW50CQlzeW5jaW5nOwkgICAgLyogbm90IHVzZWQgKi8KK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIGNoYXJfdQkqZ3JvdXBfbmFtZV9lbmQ7CisgICAgaW50CQlzeW5faWQ7CisgICAgY2hhcl91CSpyZXN0OworICAgIGNoYXJfdQkqa2V5d29yZF9jb3B5OworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKmZpcnN0X2FyZzsKKyAgICBpbnQJCXJvdW5kOworICAgIGludAkJZmxhZ3MgPSAwOworICAgIHNob3J0CSpuZXh0X2xpc3QgPSBOVUxMOworICAgIHNob3J0CSpjb250X2luX2xpc3QgPSBOVUxMOworCisgICAgcmVzdCA9IGdldF9ncm91cF9uYW1lKGFyZywgJmdyb3VwX25hbWVfZW5kKTsKKworICAgIGlmIChyZXN0ICE9IE5VTEwpCisgICAgeworCXN5bl9pZCA9IHN5bl9jaGVja19ncm91cChhcmcsIChpbnQpKGdyb3VwX25hbWVfZW5kIC0gYXJnKSk7CisKKwkvKiBhbGxvY2F0ZSBhIGJ1ZmZlciwgZm9yIHJlbW92aW5nIHRoZSBiYWNrc2xhc2hlcyBpbiB0aGUga2V5d29yZCAqLworCWtleXdvcmRfY29weSA9IGFsbG9jKCh1bnNpZ25lZClTVFJMRU4ocmVzdCkgKyAxKTsKKwlpZiAoa2V5d29yZF9jb3B5ICE9IE5VTEwpCisJeworCSAgICAvKgorCSAgICAgKiBUaGUgb3B0aW9ucyBnaXZlbiBhcHBseSB0byBBTEwga2V5d29yZHMsIHNvIGFsbCBvcHRpb25zIG11c3QgYmUKKwkgICAgICogZm91bmQgYmVmb3JlIGtleXdvcmRzIGNhbiBiZSBjcmVhdGVkLgorCSAgICAgKiByb3VuZCAxOiBjb2xsZWN0IHRoZSBvcHRpb25zLgorCSAgICAgKiByb3VuZCAyOiBjcmVhdGUgdGhlIGtleXdvcmRzLgorCSAgICAgKi8KKwkgICAgZmlyc3RfYXJnID0gcmVzdDsKKwkgICAgZm9yIChyb3VuZCA9IDE7IHJvdW5kIDw9IDI7ICsrcm91bmQpCisJICAgIHsKKwkJLyoKKwkJICogSXNvbGF0ZSBlYWNoIGtleXdvcmQgYW5kIGFkZCBhbiBlbnRyeSBmb3IgaXQuCisJCSAqLworCQlmb3IgKHJlc3QgPSBmaXJzdF9hcmc7IHJlc3QgIT0gTlVMTCAmJiAhZW5kc19leGNtZCgqcmVzdCk7CisJCQkJCQkgICAgICAgcmVzdCA9IHNraXB3aGl0ZShyZXN0KSkKKwkJeworCQkgICAgcmVzdCA9IGdldF9zeW5fb3B0aW9ucyhyZXN0LCAmZmxhZ3MsIFRSVUUsIE5VTEwsCisJCQkJCSAgICAgTlVMTCwgJmNvbnRfaW5fbGlzdCwgJm5leHRfbGlzdCk7CisJCSAgICBpZiAocmVzdCA9PSBOVUxMIHx8IGVuZHNfZXhjbWQoKnJlc3QpKQorCQkJYnJlYWs7CisJCSAgICBwID0ga2V5d29yZF9jb3B5OworCQkgICAgd2hpbGUgKCpyZXN0ICE9IDAgJiYgIXZpbV9pc3doaXRlKCpyZXN0KSkKKwkJICAgIHsKKwkJCWlmICgqcmVzdCA9PSAnXFwnICYmIHJlc3RbMV0gIT0gTlVMKQorCQkJICAgICsrcmVzdDsKKwkJCSpwKysgPSAqcmVzdCsrOworCQkgICAgfQorCQkgICAgKnAgPSBOVUw7CisJCSAgICBpZiAocm91bmQgPT0gMiAmJiAhZWFwLT5za2lwKQorCQkgICAgeworCQkJZm9yIChwID0gdmltX3N0cmNocihrZXl3b3JkX2NvcHksICdbJyk7IDsgKQorCQkJeworCQkJICAgIGlmIChwICE9IE5VTEwpCisJCQkJKnAgPSBOVUw7CisJCQkgICAgYWRkX2tleXdvcmQoa2V5d29yZF9jb3B5LCBzeW5faWQsIGZsYWdzLAorCQkJCQkJICAgICBjb250X2luX2xpc3QsIG5leHRfbGlzdCk7CisJCQkgICAgaWYgKHAgPT0gTlVMTCB8fCBwWzFdID09IE5VTCB8fCBwWzFdID09ICddJykKKwkJCQlicmVhazsKKyNpZmRlZiBGRUFUX01CWVRFCisJCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJCSAgICB7CisJCQkJaW50IGwgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHAgKyAxKTsKKworCQkJCW1jaF9tZW1tb3ZlKHAsIHAgKyAxLCBsKTsKKwkJCQlwICs9IGw7CisJCQkgICAgfQorCQkJICAgIGVsc2UKKyNlbmRpZgorCQkJICAgIHsKKwkJCQlwWzBdID0gcFsxXTsKKwkJCQkrK3A7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJCWlmIChyb3VuZCA9PSAxKQorCQkgICAgc3luX2luY2xfdG9wbGV2ZWwoc3luX2lkLCAmZmxhZ3MpOworCSAgICB9CisJICAgIHZpbV9mcmVlKGtleXdvcmRfY29weSk7CisJfQorICAgIH0KKworICAgIGlmIChyZXN0ICE9IE5VTEwpCisJZWFwLT5uZXh0Y21kID0gY2hlY2tfbmV4dGNtZChyZXN0KTsKKyAgICBlbHNlCisJRU1TRzIoXyhlX2ludmFyZzIpLCBhcmcpOworCisgICAgdmltX2ZyZWUoY29udF9pbl9saXN0KTsKKyAgICB2aW1fZnJlZShuZXh0X2xpc3QpOworICAgIHJlZHJhd19jdXJidWZfbGF0ZXIoTk9UX1ZBTElEKTsKKyAgICBzeW5fc3RhY2tfZnJlZV9hbGwoY3VyYnVmKTsJCS8qIE5lZWQgdG8gcmVjb21wdXRlIGFsbCBzeW50YXguICovCit9CisKKy8qCisgKiBIYW5kbGUgIjpzeW50YXggbWF0Y2gge25hbWV9IFt7b3B0aW9uc31dIHtwYXR0ZXJufSBbe29wdGlvbnN9XSIuCisgKgorICogQWxzbyAiOnN5bnRheCBzeW5jIG1hdGNoIHtuYW1lfSBbW2dyb3VwaGVyZSB8IGdyb3VwdGhlcmVdIHtncm91cC1uYW1lfV0gLi4iCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NtZF9tYXRjaChlYXAsIHN5bmNpbmcpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGludAkJc3luY2luZzsJICAgIC8qIFRSVUUgZm9yICI6c3ludGF4IHN5bmMgbWF0Y2ggLi4gIiAqLworeworICAgIGNoYXJfdQkqYXJnID0gZWFwLT5hcmc7CisgICAgY2hhcl91CSpncm91cF9uYW1lX2VuZDsKKyAgICBjaGFyX3UJKnJlc3Q7CisgICAgc3lucGF0X1QJaXRlbTsJCS8qIHRoZSBpdGVtIGZvdW5kIGluIHRoZSBsaW5lICovCisgICAgaW50CQlzeW5faWQ7CisgICAgaW50CQlpZHg7CisgICAgaW50CQlmbGFncyA9IDA7CisgICAgaW50CQlzeW5jX2lkeCA9IDA7CisgICAgc2hvcnQJKmNvbnRfbGlzdCA9IE5VTEw7CisgICAgc2hvcnQJKmNvbnRfaW5fbGlzdCA9IE5VTEw7CisgICAgc2hvcnQJKm5leHRfbGlzdCA9IE5VTEw7CisKKyAgICAvKiBJc29sYXRlIHRoZSBncm91cCBuYW1lLCBjaGVjayBmb3IgdmFsaWRpdHkgKi8KKyAgICByZXN0ID0gZ2V0X2dyb3VwX25hbWUoYXJnLCAmZ3JvdXBfbmFtZV9lbmQpOworCisgICAgLyogR2V0IG9wdGlvbnMgYmVmb3JlIHRoZSBwYXR0ZXJuICovCisgICAgcmVzdCA9IGdldF9zeW5fb3B0aW9ucyhyZXN0LCAmZmxhZ3MsIEZBTFNFLAorCSAgIHN5bmNpbmcgPyAmc3luY19pZHggOiBOVUxMLCAmY29udF9saXN0LCAmY29udF9pbl9saXN0LCAmbmV4dF9saXN0KTsKKworICAgIC8qIGdldCB0aGUgcGF0dGVybi4gKi8KKyAgICBpbml0X3N5bl9wYXR0ZXJucygpOworICAgIHZpbV9tZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7CisgICAgcmVzdCA9IGdldF9zeW5fcGF0dGVybihyZXN0LCAmaXRlbSk7CisgICAgaWYgKHZpbV9yZWdjb21wX2hhZF9lb2woKSAmJiAhKGZsYWdzICYgSExfRVhDTFVERU5MKSkKKwlmbGFncyB8PSBITF9IQVNfRU9MOworCisgICAgLyogR2V0IG9wdGlvbnMgYWZ0ZXIgdGhlIHBhdHRlcm4gKi8KKyAgICByZXN0ID0gZ2V0X3N5bl9vcHRpb25zKHJlc3QsICZmbGFncywgRkFMU0UsCisJICAgc3luY2luZyA/ICZzeW5jX2lkeCA6IE5VTEwsICZjb250X2xpc3QsICZjb250X2luX2xpc3QsICZuZXh0X2xpc3QpOworCisgICAgaWYgKHJlc3QgIT0gTlVMTCkJCS8qIGFsbCBhcmd1bWVudHMgYXJlIHZhbGlkICovCisgICAgeworCS8qCisJICogQ2hlY2sgZm9yIHRyYWlsaW5nIGNvbW1hbmQgYW5kIGlsbGVnYWwgdHJhaWxpbmcgYXJndW1lbnRzLgorCSAqLworCWVhcC0+bmV4dGNtZCA9IGNoZWNrX25leHRjbWQocmVzdCk7CisJaWYgKCFlbmRzX2V4Y21kKCpyZXN0KSB8fCBlYXAtPnNraXApCisJICAgIHJlc3QgPSBOVUxMOworCWVsc2UgaWYgKGdhX2dyb3coJmN1cmJ1Zi0+Yl9zeW5fcGF0dGVybnMsIDEpICE9IEZBSUwKKwkJJiYgKHN5bl9pZCA9IHN5bl9jaGVja19ncm91cChhcmcsCisJCQkJCSAgIChpbnQpKGdyb3VwX25hbWVfZW5kIC0gYXJnKSkpICE9IDApCisJeworCSAgICBzeW5faW5jbF90b3BsZXZlbChzeW5faWQsICZmbGFncyk7CisJICAgIC8qCisJICAgICAqIFN0b3JlIHRoZSBwYXR0ZXJuIGluIHRoZSBzeW5faXRlbXMgbGlzdAorCSAgICAgKi8KKwkgICAgaWR4ID0gY3VyYnVmLT5iX3N5bl9wYXR0ZXJucy5nYV9sZW47CisJICAgIFNZTl9JVEVNUyhjdXJidWYpW2lkeF0gPSBpdGVtOworCSAgICBTWU5fSVRFTVMoY3VyYnVmKVtpZHhdLnNwX3N5bmNpbmcgPSBzeW5jaW5nOworCSAgICBTWU5fSVRFTVMoY3VyYnVmKVtpZHhdLnNwX3R5cGUgPSBTUFRZUEVfTUFUQ0g7CisJICAgIFNZTl9JVEVNUyhjdXJidWYpW2lkeF0uc3Bfc3luLmlkID0gc3luX2lkOworCSAgICBTWU5fSVRFTVMoY3VyYnVmKVtpZHhdLnNwX3N5bi5pbmNfdGFnID0gY3VycmVudF9zeW5faW5jX3RhZzsKKwkgICAgU1lOX0lURU1TKGN1cmJ1ZilbaWR4XS5zcF9mbGFncyA9IGZsYWdzOworCSAgICBTWU5fSVRFTVMoY3VyYnVmKVtpZHhdLnNwX3N5bmNfaWR4ID0gc3luY19pZHg7CisJICAgIFNZTl9JVEVNUyhjdXJidWYpW2lkeF0uc3BfY29udF9saXN0ID0gY29udF9saXN0OworCSAgICBTWU5fSVRFTVMoY3VyYnVmKVtpZHhdLnNwX3N5bi5jb250X2luX2xpc3QgPSBjb250X2luX2xpc3Q7CisJICAgIGlmIChjb250X2luX2xpc3QgIT0gTlVMTCkKKwkJY3VyYnVmLT5iX3N5bl9jb250YWluZWRpbiA9IFRSVUU7CisJICAgIFNZTl9JVEVNUyhjdXJidWYpW2lkeF0uc3BfbmV4dF9saXN0ID0gbmV4dF9saXN0OworCSAgICArK2N1cmJ1Zi0+Yl9zeW5fcGF0dGVybnMuZ2FfbGVuOworCSAgICAtLWN1cmJ1Zi0+Yl9zeW5fcGF0dGVybnMuZ2Ffcm9vbTsKKworCSAgICAvKiByZW1lbWJlciB0aGF0IHdlIGZvdW5kIGEgbWF0Y2ggZm9yIHN5bmNpbmcgb24gKi8KKwkgICAgaWYgKGZsYWdzICYgKEhMX1NZTkNfSEVSRXxITF9TWU5DX1RIRVJFKSkKKwkJY3VyYnVmLT5iX3N5bl9zeW5jX2ZsYWdzIHw9IFNGX01BVENIOworI2lmZGVmIEZFQVRfRk9MRElORworCSAgICBpZiAoZmxhZ3MgJiBITF9GT0xEKQorCQkrK2N1cmJ1Zi0+Yl9zeW5fZm9sZGl0ZW1zOworI2VuZGlmCisKKwkgICAgcmVkcmF3X2N1cmJ1Zl9sYXRlcihOT1RfVkFMSUQpOworCSAgICBzeW5fc3RhY2tfZnJlZV9hbGwoY3VyYnVmKTsJLyogTmVlZCB0byByZWNvbXB1dGUgYWxsIHN5bnRheC4gKi8KKwkgICAgcmV0dXJuOwkvKiBkb24ndCBmcmVlIHRoZSBwcm9ncyBhbmQgcGF0dGVybnMgbm93ICovCisJfQorICAgIH0KKworICAgIC8qCisgICAgICogU29tZXRoaW5nIGZhaWxlZCwgZnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KKyAgICAgKi8KKyAgICB2aW1fZnJlZShpdGVtLnNwX3Byb2cpOworICAgIHZpbV9mcmVlKGl0ZW0uc3BfcGF0dGVybik7CisgICAgdmltX2ZyZWUoY29udF9saXN0KTsKKyAgICB2aW1fZnJlZShjb250X2luX2xpc3QpOworICAgIHZpbV9mcmVlKG5leHRfbGlzdCk7CisKKyAgICBpZiAocmVzdCA9PSBOVUxMKQorCUVNU0cyKF8oZV9pbnZhcmcyKSwgYXJnKTsKK30KKworLyoKKyAqIEhhbmRsZSAiOnN5bnRheCByZWdpb24ge2dyb3VwLW5hbWV9IFttYXRjaGdyb3VwPXtncm91cC1uYW1lfV0KKyAqCQlzdGFydCB7c3RhcnR9IC4uIFtza2lwIHtza2lwfV0gZW5kIHtlbmR9IC4uIFt7b3B0aW9uc31dIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzeW5fY21kX3JlZ2lvbihlYXAsIHN5bmNpbmcpCisgICAgZXhhcmdfVAkqZWFwOworICAgIGludAkJc3luY2luZzsJICAgIC8qIFRSVUUgZm9yICI6c3ludGF4IHN5bmMgcmVnaW9uIC4uIiAqLworeworICAgIGNoYXJfdQkJKmFyZyA9IGVhcC0+YXJnOworICAgIGNoYXJfdQkJKmdyb3VwX25hbWVfZW5kOworICAgIGNoYXJfdQkJKnJlc3Q7CQkJLyogbmV4dCBhcmcsIE5VTEwgb24gZXJyb3IgKi8KKyAgICBjaGFyX3UJCSprZXlfZW5kOworICAgIGNoYXJfdQkJKmtleSA9IE5VTEw7CisgICAgY2hhcl91CQkqcDsKKyAgICBpbnQJCQlpdGVtOworI2RlZmluZSBJVEVNX1NUQVJUCSAgICAwCisjZGVmaW5lIElURU1fU0tJUAkgICAgMQorI2RlZmluZSBJVEVNX0VORAkgICAgMgorI2RlZmluZSBJVEVNX01BVENIR1JPVVAJICAgIDMKKyAgICBzdHJ1Y3QgcGF0X3B0cgorICAgIHsKKwlzeW5wYXRfVAkqcHBfc3lucDsJCS8qIHBvaW50ZXIgdG8gc3luX3BhdHRlcm4gKi8KKwlpbnQJCXBwX21hdGNoZ3JvdXBfaWQ7CS8qIG1hdGNoZ3JvdXAgSUQgKi8KKwlzdHJ1Y3QgcGF0X3B0cgkqcHBfbmV4dDsJCS8qIHBvaW50ZXIgdG8gbmV4dCBwYXRfcHRyICovCisgICAgfQkJCSoocGF0X3B0cnNbM10pOworCQkJCQkvKiBwYXR0ZXJucyBmb3VuZCBpbiB0aGUgbGluZSAqLworICAgIHN0cnVjdCBwYXRfcHRyCSpwcHA7CisgICAgc3RydWN0IHBhdF9wdHIJKnBwcF9uZXh0OworICAgIGludAkJCXBhdF9jb3VudCA9IDA7CQkvKiBuciBvZiBzeW5fcGF0dGVybnMgZm91bmQgKi8KKyAgICBpbnQJCQlzeW5faWQ7CisgICAgaW50CQkJbWF0Y2hncm91cF9pZCA9IDA7CisgICAgaW50CQkJbm90X2Vub3VnaCA9IEZBTFNFOwkvKiBub3QgZW5vdWdoIGFyZ3VtZW50cyAqLworICAgIGludAkJCWlsbGVnYWwgPSBGQUxTRTsJLyogaWxsZWdhbCBhcmd1bWVudHMgKi8KKyAgICBpbnQJCQlzdWNjZXNzID0gRkFMU0U7CisgICAgaW50CQkJaWR4OworICAgIGludAkJCWZsYWdzID0gMDsKKyAgICBzaG9ydAkJKmNvbnRfbGlzdCA9IE5VTEw7CisgICAgc2hvcnQJCSpjb250X2luX2xpc3QgPSBOVUxMOworICAgIHNob3J0CQkqbmV4dF9saXN0ID0gTlVMTDsKKworICAgIC8qIElzb2xhdGUgdGhlIGdyb3VwIG5hbWUsIGNoZWNrIGZvciB2YWxpZGl0eSAqLworICAgIHJlc3QgPSBnZXRfZ3JvdXBfbmFtZShhcmcsICZncm91cF9uYW1lX2VuZCk7CisKKyAgICBwYXRfcHRyc1swXSA9IE5VTEw7CisgICAgcGF0X3B0cnNbMV0gPSBOVUxMOworICAgIHBhdF9wdHJzWzJdID0gTlVMTDsKKworICAgIGluaXRfc3luX3BhdHRlcm5zKCk7CisKKyAgICAvKgorICAgICAqIGdldCB0aGUgb3B0aW9ucywgcGF0dGVybnMgYW5kIG1hdGNoZ3JvdXAuCisgICAgICovCisgICAgd2hpbGUgKHJlc3QgIT0gTlVMTCAmJiAhZW5kc19leGNtZCgqcmVzdCkpCisgICAgeworCS8qIENoZWNrIGZvciBvcHRpb24gYXJndW1lbnRzICovCisJcmVzdCA9IGdldF9zeW5fb3B0aW9ucyhyZXN0LCAmZmxhZ3MsIEZBTFNFLCBOVUxMLAorCQkJCSAgICAgICAmY29udF9saXN0LCAmY29udF9pbl9saXN0LCAmbmV4dF9saXN0KTsKKwlpZiAocmVzdCA9PSBOVUxMIHx8IGVuZHNfZXhjbWQoKnJlc3QpKQorCSAgICBicmVhazsKKworCS8qIG11c3QgYmUgYSBwYXR0ZXJuIG9yIG1hdGNoZ3JvdXAgdGhlbiAqLworCWtleV9lbmQgPSByZXN0OworCXdoaWxlICgqa2V5X2VuZCAmJiAhdmltX2lzd2hpdGUoKmtleV9lbmQpICYmICprZXlfZW5kICE9ICc9JykKKwkgICAgKytrZXlfZW5kOworCXZpbV9mcmVlKGtleSk7CisJa2V5ID0gdmltX3N0cm5zYXZlX3VwKHJlc3QsIChpbnQpKGtleV9lbmQgLSByZXN0KSk7CisJaWYgKGtleSA9PSBOVUxMKQkJCS8qIG91dCBvZiBtZW1vcnkgKi8KKwl7CisJICAgIHJlc3QgPSBOVUxMOworCSAgICBicmVhazsKKwl9CisJaWYgKFNUUkNNUChrZXksICJNQVRDSEdST1VQIikgPT0gMCkKKwkgICAgaXRlbSA9IElURU1fTUFUQ0hHUk9VUDsKKwllbHNlIGlmIChTVFJDTVAoa2V5LCAiU1RBUlQiKSA9PSAwKQorCSAgICBpdGVtID0gSVRFTV9TVEFSVDsKKwllbHNlIGlmIChTVFJDTVAoa2V5LCAiRU5EIikgPT0gMCkKKwkgICAgaXRlbSA9IElURU1fRU5EOworCWVsc2UgaWYgKFNUUkNNUChrZXksICJTS0lQIikgPT0gMCkKKwl7CisJICAgIGlmIChwYXRfcHRyc1tJVEVNX1NLSVBdICE9IE5VTEwpCS8qIG9uZSBza2lwIHBhdHRlcm4gYWxsb3dlZCAqLworCSAgICB7CisJCWlsbGVnYWwgPSBUUlVFOworCQlicmVhazsKKwkgICAgfQorCSAgICBpdGVtID0gSVRFTV9TS0lQOworCX0KKwllbHNlCisJICAgIGJyZWFrOworCXJlc3QgPSBza2lwd2hpdGUoa2V5X2VuZCk7CisJaWYgKCpyZXN0ICE9ICc9JykKKwl7CisJICAgIHJlc3QgPSBOVUxMOworCSAgICBFTVNHMihfKCJFMzk4OiBNaXNzaW5nICc9JzogJXMiKSwgYXJnKTsKKwkgICAgYnJlYWs7CisJfQorCXJlc3QgPSBza2lwd2hpdGUocmVzdCArIDEpOworCWlmICgqcmVzdCA9PSBOVUwpCisJeworCSAgICBub3RfZW5vdWdoID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorCisJaWYgKGl0ZW0gPT0gSVRFTV9NQVRDSEdST1VQKQorCXsKKwkgICAgcCA9IHNraXB0b3doaXRlKHJlc3QpOworCSAgICBpZiAoKHAgLSByZXN0ID09IDQgJiYgU1RSTkNNUChyZXN0LCAiTk9ORSIsIDQpID09IDApIHx8IGVhcC0+c2tpcCkKKwkJbWF0Y2hncm91cF9pZCA9IDA7CisJICAgIGVsc2UKKwkgICAgeworCQltYXRjaGdyb3VwX2lkID0gc3luX2NoZWNrX2dyb3VwKHJlc3QsIChpbnQpKHAgLSByZXN0KSk7CisJCWlmIChtYXRjaGdyb3VwX2lkID09IDApCisJCXsKKwkJICAgIGlsbGVnYWwgPSBUUlVFOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICByZXN0ID0gc2tpcHdoaXRlKHApOworCX0KKwllbHNlCisJeworCSAgICAvKgorCSAgICAgKiBBbGxvY2F0ZSByb29tIGZvciBhIHN5bl9wYXR0ZXJuLCBhbmQgbGluayBpdCBpbiB0aGUgbGlzdCBvZgorCSAgICAgKiBzeW5fcGF0dGVybnMgZm9yIHRoaXMgaXRlbSwgYXQgdGhlIHN0YXJ0IChiZWNhdXNlIHRoZSBsaXN0IGlzCisJICAgICAqIHVzZWQgZnJvbSBlbmQgdG8gc3RhcnQpLgorCSAgICAgKi8KKwkgICAgcHBwID0gKHN0cnVjdCBwYXRfcHRyICopYWxsb2MoKHVuc2lnbmVkKXNpemVvZihzdHJ1Y3QgcGF0X3B0cikpOworCSAgICBpZiAocHBwID09IE5VTEwpCisJICAgIHsKKwkJcmVzdCA9IE5VTEw7CisJCWJyZWFrOworCSAgICB9CisJICAgIHBwcC0+cHBfbmV4dCA9IHBhdF9wdHJzW2l0ZW1dOworCSAgICBwYXRfcHRyc1tpdGVtXSA9IHBwcDsKKwkgICAgcHBwLT5wcF9zeW5wID0gKHN5bnBhdF9UICopYWxsb2NfY2xlYXIoKHVuc2lnbmVkKXNpemVvZihzeW5wYXRfVCkpOworCSAgICBpZiAocHBwLT5wcF9zeW5wID09IE5VTEwpCisJICAgIHsKKwkJcmVzdCA9IE5VTEw7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogR2V0IHRoZSBzeW50YXggcGF0dGVybiBhbmQgdGhlIGZvbGxvd2luZyBvZmZzZXQocykuCisJICAgICAqLworCSAgICAvKiBFbmFibGUgdGhlIGFwcHJvcHJpYXRlIFx6IHNwZWNpYWxzLiAqLworCSAgICBpZiAoaXRlbSA9PSBJVEVNX1NUQVJUKQorCQlyZWdfZG9fZXh0bWF0Y2ggPSBSRVhfU0VUOworCSAgICBlbHNlIGlmIChpdGVtID09IElURU1fU0tJUCB8fCBpdGVtID09IElURU1fRU5EKQorCQlyZWdfZG9fZXh0bWF0Y2ggPSBSRVhfVVNFOworCSAgICByZXN0ID0gZ2V0X3N5bl9wYXR0ZXJuKHJlc3QsIHBwcC0+cHBfc3lucCk7CisJICAgIHJlZ19kb19leHRtYXRjaCA9IDA7CisJICAgIGlmIChpdGVtID09IElURU1fRU5EICYmIHZpbV9yZWdjb21wX2hhZF9lb2woKQorCQkJCQkJICAgJiYgIShmbGFncyAmIEhMX0VYQ0xVREVOTCkpCisJCXBwcC0+cHBfc3lucC0+c3BfZmxhZ3MgfD0gSExfSEFTX0VPTDsKKwkgICAgcHBwLT5wcF9tYXRjaGdyb3VwX2lkID0gbWF0Y2hncm91cF9pZDsKKwkgICAgKytwYXRfY291bnQ7CisJfQorICAgIH0KKyAgICB2aW1fZnJlZShrZXkpOworICAgIGlmIChpbGxlZ2FsIHx8IG5vdF9lbm91Z2gpCisJcmVzdCA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIE11c3QgaGF2ZSBhICJzdGFydCIgYW5kICJlbmQiIHBhdHRlcm4uCisgICAgICovCisgICAgaWYgKHJlc3QgIT0gTlVMTCAmJiAocGF0X3B0cnNbSVRFTV9TVEFSVF0gPT0gTlVMTCB8fAorCQkJCQkJICBwYXRfcHRyc1tJVEVNX0VORF0gPT0gTlVMTCkpCisgICAgeworCW5vdF9lbm91Z2ggPSBUUlVFOworCXJlc3QgPSBOVUxMOworICAgIH0KKworICAgIGlmIChyZXN0ICE9IE5VTEwpCisgICAgeworCS8qCisJICogQ2hlY2sgZm9yIHRyYWlsaW5nIGdhcmJhZ2Ugb3IgY29tbWFuZC4KKwkgKiBJZiBPSywgYWRkIHRoZSBpdGVtLgorCSAqLworCWVhcC0+bmV4dGNtZCA9IGNoZWNrX25leHRjbWQocmVzdCk7CisJaWYgKCFlbmRzX2V4Y21kKCpyZXN0KSB8fCBlYXAtPnNraXApCisJICAgIHJlc3QgPSBOVUxMOworCWVsc2UgaWYgKGdhX2dyb3coJihjdXJidWYtPmJfc3luX3BhdHRlcm5zKSwgcGF0X2NvdW50KSAhPSBGQUlMCisJCSYmIChzeW5faWQgPSBzeW5fY2hlY2tfZ3JvdXAoYXJnLAorCQkJCQkgICAoaW50KShncm91cF9uYW1lX2VuZCAtIGFyZykpKSAhPSAwKQorCXsKKwkgICAgc3luX2luY2xfdG9wbGV2ZWwoc3luX2lkLCAmZmxhZ3MpOworCSAgICAvKgorCSAgICAgKiBTdG9yZSB0aGUgc3RhcnQvc2tpcC9lbmQgaW4gdGhlIHN5bl9pdGVtcyBsaXN0CisJICAgICAqLworCSAgICBpZHggPSBjdXJidWYtPmJfc3luX3BhdHRlcm5zLmdhX2xlbjsKKwkgICAgZm9yIChpdGVtID0gSVRFTV9TVEFSVDsgaXRlbSA8PSBJVEVNX0VORDsgKytpdGVtKQorCSAgICB7CisJCWZvciAocHBwID0gcGF0X3B0cnNbaXRlbV07IHBwcCAhPSBOVUxMOyBwcHAgPSBwcHAtPnBwX25leHQpCisJCXsKKwkJICAgIFNZTl9JVEVNUyhjdXJidWYpW2lkeF0gPSAqKHBwcC0+cHBfc3lucCk7CisJCSAgICBTWU5fSVRFTVMoY3VyYnVmKVtpZHhdLnNwX3N5bmNpbmcgPSBzeW5jaW5nOworCQkgICAgU1lOX0lURU1TKGN1cmJ1ZilbaWR4XS5zcF90eXBlID0KKwkJCSAgICAoaXRlbSA9PSBJVEVNX1NUQVJUKSA/IFNQVFlQRV9TVEFSVCA6CisJCQkgICAgKGl0ZW0gPT0gSVRFTV9TS0lQKSA/IFNQVFlQRV9TS0lQIDogU1BUWVBFX0VORDsKKwkJICAgIFNZTl9JVEVNUyhjdXJidWYpW2lkeF0uc3BfZmxhZ3MgfD0gZmxhZ3M7CisJCSAgICBTWU5fSVRFTVMoY3VyYnVmKVtpZHhdLnNwX3N5bi5pZCA9IHN5bl9pZDsKKwkJICAgIFNZTl9JVEVNUyhjdXJidWYpW2lkeF0uc3Bfc3luLmluY190YWcgPSBjdXJyZW50X3N5bl9pbmNfdGFnOworCQkgICAgU1lOX0lURU1TKGN1cmJ1ZilbaWR4XS5zcF9zeW5fbWF0Y2hfaWQgPQorCQkJCQkJCXBwcC0+cHBfbWF0Y2hncm91cF9pZDsKKwkJICAgIGlmIChpdGVtID09IElURU1fU1RBUlQpCisJCSAgICB7CisJCQlTWU5fSVRFTVMoY3VyYnVmKVtpZHhdLnNwX2NvbnRfbGlzdCA9IGNvbnRfbGlzdDsKKwkJCVNZTl9JVEVNUyhjdXJidWYpW2lkeF0uc3Bfc3luLmNvbnRfaW5fbGlzdCA9CisJCQkJCQkJCSBjb250X2luX2xpc3Q7CisJCQlpZiAoY29udF9pbl9saXN0ICE9IE5VTEwpCisJCQkgICAgY3VyYnVmLT5iX3N5bl9jb250YWluZWRpbiA9IFRSVUU7CisJCQlTWU5fSVRFTVMoY3VyYnVmKVtpZHhdLnNwX25leHRfbGlzdCA9IG5leHRfbGlzdDsKKwkJICAgIH0KKwkJICAgICsrY3VyYnVmLT5iX3N5bl9wYXR0ZXJucy5nYV9sZW47CisJCSAgICAtLWN1cmJ1Zi0+Yl9zeW5fcGF0dGVybnMuZ2Ffcm9vbTsKKwkJICAgICsraWR4OworI2lmZGVmIEZFQVRfRk9MRElORworCQkgICAgaWYgKGZsYWdzICYgSExfRk9MRCkKKwkJCSsrY3VyYnVmLT5iX3N5bl9mb2xkaXRlbXM7CisjZW5kaWYKKwkJfQorCSAgICB9CisKKwkgICAgcmVkcmF3X2N1cmJ1Zl9sYXRlcihOT1RfVkFMSUQpOworCSAgICBzeW5fc3RhY2tfZnJlZV9hbGwoY3VyYnVmKTsJLyogTmVlZCB0byByZWNvbXB1dGUgYWxsIHN5bnRheC4gKi8KKwkgICAgc3VjY2VzcyA9IFRSVUU7CSAgICAvKiBkb24ndCBmcmVlIHRoZSBwcm9ncyBhbmQgcGF0dGVybnMgbm93ICovCisJfQorICAgIH0KKworICAgIC8qCisgICAgICogRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KKyAgICAgKi8KKyAgICBmb3IgKGl0ZW0gPSBJVEVNX1NUQVJUOyBpdGVtIDw9IElURU1fRU5EOyArK2l0ZW0pCisJZm9yIChwcHAgPSBwYXRfcHRyc1tpdGVtXTsgcHBwICE9IE5VTEw7IHBwcCA9IHBwcF9uZXh0KQorCXsKKwkgICAgaWYgKCFzdWNjZXNzKQorCSAgICB7CisJCXZpbV9mcmVlKHBwcC0+cHBfc3lucC0+c3BfcHJvZyk7CisJCXZpbV9mcmVlKHBwcC0+cHBfc3lucC0+c3BfcGF0dGVybik7CisJICAgIH0KKwkgICAgdmltX2ZyZWUocHBwLT5wcF9zeW5wKTsKKwkgICAgcHBwX25leHQgPSBwcHAtPnBwX25leHQ7CisJICAgIHZpbV9mcmVlKHBwcCk7CisJfQorCisgICAgaWYgKCFzdWNjZXNzKQorICAgIHsKKwl2aW1fZnJlZShjb250X2xpc3QpOworCXZpbV9mcmVlKGNvbnRfaW5fbGlzdCk7CisJdmltX2ZyZWUobmV4dF9saXN0KTsKKwlpZiAobm90X2Vub3VnaCkKKwkgICAgRU1TRzIoXygiRTM5OTogTm90IGVub3VnaCBhcmd1bWVudHM6IHN5bnRheCByZWdpb24gJXMiKSwgYXJnKTsKKwllbHNlIGlmIChpbGxlZ2FsIHx8IHJlc3QgPT0gTlVMTCkKKwkgICAgRU1TRzIoXyhlX2ludmFyZzIpLCBhcmcpOworICAgIH0KK30KKworLyoKKyAqIEEgc2ltcGxlIHN5bnRheCBncm91cCBJRCBjb21wYXJpc29uIGZ1bmN0aW9uIHN1aXRhYmxlIGZvciB1c2UgaW4gcXNvcnQoKQorICovCisgICAgc3RhdGljIGludAorI2lmZGVmIF9fQk9STEFORENfXworX1JUTEVOVFJZRgorI2VuZGlmCitzeW5fY29tcGFyZV9zdHViKHYxLCB2MikKKyAgICBjb25zdCB2b2lkCSp2MTsKKyAgICBjb25zdCB2b2lkCSp2MjsKK3sKKyAgICBjb25zdCBzaG9ydAkqczEgPSB2MTsKKyAgICBjb25zdCBzaG9ydAkqczIgPSB2MjsKKworICAgIHJldHVybiAoKnMxID4gKnMyID8gMSA6ICpzMSA8ICpzMiA/IC0xIDogMCk7Cit9CisKKy8qCisgKiBDb21iaW5lcyBsaXN0cyBvZiBzeW50YXggY2x1c3RlcnMuCisgKiAqY2xzdHIxIGFuZCAqY2xzdHIyIG11c3QgYm90aCBiZSBhbGxvY2F0ZWQgbWVtb3J5OyB0aGV5IHdpbGwgYmUgY29uc3VtZWQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NvbWJpbmVfbGlzdChjbHN0cjEsIGNsc3RyMiwgbGlzdF9vcCkKKyAgICBzaG9ydAkqKmNsc3RyMTsKKyAgICBzaG9ydAkqKmNsc3RyMjsKKyAgICBpbnQJCWxpc3Rfb3A7Cit7CisgICAgaW50CQljb3VudDEgPSAwOworICAgIGludAkJY291bnQyID0gMDsKKyAgICBzaG9ydAkqZzE7CisgICAgc2hvcnQJKmcyOworICAgIHNob3J0CSpjbHN0ciA9IE5VTEw7CisgICAgaW50CQljb3VudDsKKyAgICBpbnQJCXJvdW5kOworCisgICAgLyoKKyAgICAgKiBIYW5kbGUgZGVnZW5lcmF0ZSBjYXNlcy4KKyAgICAgKi8KKyAgICBpZiAoKmNsc3RyMiA9PSBOVUxMKQorCXJldHVybjsKKyAgICBpZiAoKmNsc3RyMSA9PSBOVUxMIHx8IGxpc3Rfb3AgPT0gQ0xVU1RFUl9SRVBMQUNFKQorICAgIHsKKwlpZiAobGlzdF9vcCA9PSBDTFVTVEVSX1JFUExBQ0UpCisJICAgIHZpbV9mcmVlKCpjbHN0cjEpOworCWlmIChsaXN0X29wID09IENMVVNURVJfUkVQTEFDRSB8fCBsaXN0X29wID09IENMVVNURVJfQUREKQorCSAgICAqY2xzdHIxID0gKmNsc3RyMjsKKwllbHNlCisJICAgIHZpbV9mcmVlKCpjbHN0cjIpOworCXJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGcxID0gKmNsc3RyMTsgKmcxOyBnMSsrKQorCSsrY291bnQxOworICAgIGZvciAoZzIgPSAqY2xzdHIyOyAqZzI7IGcyKyspCisJKytjb3VudDI7CisKKyAgICAvKgorICAgICAqIEZvciBzcGVlZCBwdXJwb3Nlcywgc29ydCBib3RoIGxpc3RzLgorICAgICAqLworICAgIHFzb3J0KCpjbHN0cjEsIChzaXplX3QpY291bnQxLCBzaXplb2Yoc2hvcnQpLCBzeW5fY29tcGFyZV9zdHViKTsKKyAgICBxc29ydCgqY2xzdHIyLCAoc2l6ZV90KWNvdW50Miwgc2l6ZW9mKHNob3J0KSwgc3luX2NvbXBhcmVfc3R1Yik7CisKKyAgICAvKgorICAgICAqIFdlIHByb2NlZWQgaW4gdHdvIHBhc3NlczsgaW4gcm91bmQgMSwgd2UgY291bnQgdGhlIGVsZW1lbnRzIHRvIHBsYWNlCisgICAgICogaW4gdGhlIG5ldyBsaXN0LCBhbmQgaW4gcm91bmQgMiwgd2UgYWxsb2NhdGUgYW5kIHBvcHVsYXRlIHRoZSBuZXcKKyAgICAgKiBsaXN0LiAgRm9yIHNwZWVkLCB3ZSB1c2UgYSBtZXJnZXNvcnQtbGlrZSBtZXRob2QsIGFkZGluZyB0aGUgc21hbGxlcgorICAgICAqIG9mIHRoZSBjdXJyZW50IGVsZW1lbnRzIGluIGVhY2ggbGlzdCB0byB0aGUgbmV3IGxpc3QuCisgICAgICovCisgICAgZm9yIChyb3VuZCA9IDE7IHJvdW5kIDw9IDI7IHJvdW5kKyspCisgICAgeworCWcxID0gKmNsc3RyMTsKKwlnMiA9ICpjbHN0cjI7CisJY291bnQgPSAwOworCisJLyoKKwkgKiBGaXJzdCwgbG9vcCB0aHJvdWdoIHRoZSBsaXN0cyB1bnRpbCBvbmUgb2YgdGhlbSBpcyBlbXB0eS4KKwkgKi8KKwl3aGlsZSAoKmcxICYmICpnMikKKwl7CisJICAgIC8qCisJICAgICAqIFdlIGFsd2F5cyB3YW50IHRvIGFkZCBmcm9tIHRoZSBmaXJzdCBsaXN0LgorCSAgICAgKi8KKwkgICAgaWYgKCpnMSA8ICpnMikKKwkgICAgeworCQlpZiAocm91bmQgPT0gMikKKwkJICAgIGNsc3RyW2NvdW50XSA9ICpnMTsKKwkJY291bnQrKzsKKwkJZzErKzsKKwkJY29udGludWU7CisJICAgIH0KKwkgICAgLyoKKwkgICAgICogV2Ugb25seSB3YW50IHRvIGFkZCBmcm9tIHRoZSBzZWNvbmQgbGlzdCBpZiB3ZSdyZSBhZGRpbmcgdGhlCisJICAgICAqIGxpc3RzLgorCSAgICAgKi8KKwkgICAgaWYgKGxpc3Rfb3AgPT0gQ0xVU1RFUl9BREQpCisJICAgIHsKKwkJaWYgKHJvdW5kID09IDIpCisJCSAgICBjbHN0cltjb3VudF0gPSAqZzI7CisJCWNvdW50Kys7CisJICAgIH0KKwkgICAgaWYgKCpnMSA9PSAqZzIpCisJCWcxKys7CisJICAgIGcyKys7CisJfQorCisJLyoKKwkgKiBOb3cgYWRkIHRoZSBsZWZ0b3ZlcnMgZnJvbSB3aGljaGV2ZXIgbGlzdCBkaWRuJ3QgZ2V0IGZpbmlzaGVkCisJICogZmlyc3QuICBBcyBiZWZvcmUsIHdlIG9ubHkgd2FudCB0byBhZGQgZnJvbSB0aGUgc2Vjb25kIGxpc3QgaWYKKwkgKiB3ZSdyZSBhZGRpbmcgdGhlIGxpc3RzLgorCSAqLworCWZvciAoOyAqZzE7IGcxKyssIGNvdW50KyspCisJICAgIGlmIChyb3VuZCA9PSAyKQorCQljbHN0cltjb3VudF0gPSAqZzE7CisJaWYgKGxpc3Rfb3AgPT0gQ0xVU1RFUl9BREQpCisJICAgIGZvciAoOyAqZzI7IGcyKyssIGNvdW50KyspCisJCWlmIChyb3VuZCA9PSAyKQorCQkgICAgY2xzdHJbY291bnRdID0gKmcyOworCisJaWYgKHJvdW5kID09IDEpCisJeworCSAgICAvKgorCSAgICAgKiBJZiB0aGUgZ3JvdXAgZW5kZWQgdXAgZW1wdHksIHdlIGRvbid0IG5lZWQgdG8gYWxsb2NhdGUgYW55CisJICAgICAqIHNwYWNlIGZvciBpdC4KKwkgICAgICovCisJICAgIGlmIChjb3VudCA9PSAwKQorCSAgICB7CisJCWNsc3RyID0gTlVMTDsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgY2xzdHIgPSAoc2hvcnQgKilhbGxvYygodW5zaWduZWQpKChjb3VudCArIDEpICogc2l6ZW9mKHNob3J0KSkpOworCSAgICBpZiAoY2xzdHIgPT0gTlVMTCkKKwkJYnJlYWs7CisJICAgIGNsc3RyW2NvdW50XSA9IDA7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogRmluYWxseSwgcHV0IHRoZSBuZXcgbGlzdCBpbiBwbGFjZS4KKyAgICAgKi8KKyAgICB2aW1fZnJlZSgqY2xzdHIxKTsKKyAgICB2aW1fZnJlZSgqY2xzdHIyKTsKKyAgICAqY2xzdHIxID0gY2xzdHI7Cit9CisKKy8qCisgKiBMb29rdXAgYSBzeW50YXggY2x1c3RlciBuYW1lIGFuZCByZXR1cm4gaXQncyBJRC4KKyAqIElmIGl0IGlzIG5vdCBmb3VuZCwgMCBpcyByZXR1cm5lZC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3N5bl9zY2xfbmFtZTJpZChuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpuYW1lX3U7CisKKyAgICAvKiBBdm9pZCB1c2luZyBzdHJpY21wKCkgdG9vIG11Y2gsIGl0J3Mgc2xvdyBvbiBzb21lIHN5c3RlbXMgKi8KKyAgICBuYW1lX3UgPSB2aW1fc3Ryc2F2ZV91cChuYW1lKTsKKyAgICBpZiAobmFtZV91ID09IE5VTEwpCisJcmV0dXJuIDA7CisgICAgZm9yIChpID0gY3VyYnVmLT5iX3N5bl9jbHVzdGVycy5nYV9sZW47IC0taSA+PSAwOyApCisJaWYgKFNZTl9DTFNUUihjdXJidWYpW2ldLnNjbF9uYW1lX3UgIT0gTlVMTAorCQkmJiBTVFJDTVAobmFtZV91LCBTWU5fQ0xTVFIoY3VyYnVmKVtpXS5zY2xfbmFtZV91KSA9PSAwKQorCSAgICBicmVhazsKKyAgICB2aW1fZnJlZShuYW1lX3UpOworICAgIHJldHVybiAoaSA8IDAgPyAwIDogaSArIFNZTklEX0NMVVNURVIpOworfQorCisvKgorICogTGlrZSBzeW5fc2NsX25hbWUyaWQoKSwgYnV0IHRha2UgYSBwb2ludGVyICsgbGVuZ3RoIGFyZ3VtZW50LgorICovCisgICAgc3RhdGljIGludAorc3luX3NjbF9uYW1lbjJpZChsaW5lcCwgbGVuKQorICAgIGNoYXJfdSAgKmxpbmVwOworICAgIGludAkgICAgbGVuOworeworICAgIGNoYXJfdSAgKm5hbWU7CisgICAgaW50CSAgICBpZCA9IDA7CisKKyAgICBuYW1lID0gdmltX3N0cm5zYXZlKGxpbmVwLCBsZW4pOworICAgIGlmIChuYW1lICE9IE5VTEwpCisgICAgeworCWlkID0gc3luX3NjbF9uYW1lMmlkKG5hbWUpOworCXZpbV9mcmVlKG5hbWUpOworICAgIH0KKyAgICByZXR1cm4gaWQ7Cit9CisKKy8qCisgKiBGaW5kIHN5bnRheCBjbHVzdGVyIG5hbWUgaW4gdGhlIHRhYmxlIGFuZCByZXR1cm4gaXQncyBJRC4KKyAqIFRoZSBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIG5hbWUgYW5kIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUuCisgKiBJZiBpdCBkb2Vzbid0IGV4aXN0IHlldCwgYSBuZXcgZW50cnkgaXMgY3JlYXRlZC4KKyAqIFJldHVybiAwIGZvciBmYWlsdXJlLgorICovCisgICAgc3RhdGljIGludAorc3luX2NoZWNrX2NsdXN0ZXIocHAsIGxlbikKKyAgICBjaGFyX3UJKnBwOworICAgIGludAkJbGVuOworeworICAgIGludAkJaWQ7CisgICAgY2hhcl91CSpuYW1lOworCisgICAgbmFtZSA9IHZpbV9zdHJuc2F2ZShwcCwgbGVuKTsKKyAgICBpZiAobmFtZSA9PSBOVUxMKQorCXJldHVybiAwOworCisgICAgaWQgPSBzeW5fc2NsX25hbWUyaWQobmFtZSk7CisgICAgaWYgKGlkID09IDApCQkJLyogZG9lc24ndCBleGlzdCB5ZXQgKi8KKwlpZCA9IHN5bl9hZGRfY2x1c3RlcihuYW1lKTsKKyAgICBlbHNlCisJdmltX2ZyZWUobmFtZSk7CisgICAgcmV0dXJuIGlkOworfQorCisvKgorICogQWRkIG5ldyBzeW50YXggY2x1c3RlciBhbmQgcmV0dXJuIGl0J3MgSUQuCisgKiAibmFtZSIgbXVzdCBiZSBhbiBhbGxvY2F0ZWQgc3RyaW5nLCBpdCB3aWxsIGJlIGNvbnN1bWVkLgorICogUmV0dXJuIDAgZm9yIGZhaWx1cmUuCisgKi8KKyAgICBzdGF0aWMgaW50CitzeW5fYWRkX2NsdXN0ZXIobmFtZSkKKyAgICBjaGFyX3UJCSpuYW1lOworeworICAgIGludCBsZW47CisKKyAgICAvKgorICAgICAqIEZpcnN0IGNhbGwgZm9yIHRoaXMgZ3Jvd2FycmF5OiBpbml0IGdyb3dpbmcgYXJyYXkuCisgICAgICovCisgICAgaWYgKGN1cmJ1Zi0+Yl9zeW5fY2x1c3RlcnMuZ2FfZGF0YSA9PSBOVUxMKQorICAgIHsKKwljdXJidWYtPmJfc3luX2NsdXN0ZXJzLmdhX2l0ZW1zaXplID0gc2l6ZW9mKHN0cnVjdCBzeW5fY2x1c3Rlcik7CisJY3VyYnVmLT5iX3N5bl9jbHVzdGVycy5nYV9ncm93c2l6ZSA9IDEwOworICAgIH0KKworICAgIC8qCisgICAgICogTWFrZSByb29tIGZvciBhdCBsZWFzdCBvbmUgb3RoZXIgY2x1c3RlciBlbnRyeS4KKyAgICAgKi8KKyAgICBpZiAoZ2FfZ3JvdygmY3VyYnVmLT5iX3N5bl9jbHVzdGVycywgMSkgPT0gRkFJTCkKKyAgICB7CisJdmltX2ZyZWUobmFtZSk7CisJcmV0dXJuIDA7CisgICAgfQorICAgIGxlbiA9IGN1cmJ1Zi0+Yl9zeW5fY2x1c3RlcnMuZ2FfbGVuOworCisgICAgdmltX21lbXNldCgmKFNZTl9DTFNUUihjdXJidWYpW2xlbl0pLCAwLCBzaXplb2Yoc3RydWN0IHN5bl9jbHVzdGVyKSk7CisgICAgU1lOX0NMU1RSKGN1cmJ1ZilbbGVuXS5zY2xfbmFtZSA9IG5hbWU7CisgICAgU1lOX0NMU1RSKGN1cmJ1ZilbbGVuXS5zY2xfbmFtZV91ID0gdmltX3N0cnNhdmVfdXAobmFtZSk7CisgICAgU1lOX0NMU1RSKGN1cmJ1ZilbbGVuXS5zY2xfbGlzdCA9IE5VTEw7CisgICAgKytjdXJidWYtPmJfc3luX2NsdXN0ZXJzLmdhX2xlbjsKKyAgICAtLWN1cmJ1Zi0+Yl9zeW5fY2x1c3RlcnMuZ2Ffcm9vbTsKKworICAgIHJldHVybiBsZW4gKyBTWU5JRF9DTFVTVEVSOworfQorCisvKgorICogSGFuZGxlICI6c3ludGF4IGNsdXN0ZXIge2NsdXN0ZXItbmFtZX0gW2NvbnRhaW5zPXtncm91cG5hbWV9LC4uXQorICoJCVthZGQ9e2dyb3VwbmFtZX0sLi5dIFtyZW1vdmU9e2dyb3VwbmFtZX0sLi5dIi4KKyAqLworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX2NtZF9jbHVzdGVyKGVhcCwgc3luY2luZykKKyAgICBleGFyZ19UCSplYXA7CisgICAgaW50CQlzeW5jaW5nOwkgICAgLyogbm90IHVzZWQgKi8KK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIGNoYXJfdQkqZ3JvdXBfbmFtZV9lbmQ7CisgICAgY2hhcl91CSpyZXN0OworICAgIGludAkJc2NsX2lkOworICAgIHNob3J0CSpjbHN0cl9saXN0OworICAgIGludAkJZ290X2Nsc3RyID0gRkFMU0U7CisgICAgaW50CQlvcHRfbGVuOworICAgIGludAkJbGlzdF9vcDsKKworICAgIGVhcC0+bmV4dGNtZCA9IGZpbmRfbmV4dGNtZChhcmcpOworICAgIGlmIChlYXAtPnNraXApCisJcmV0dXJuOworCisgICAgcmVzdCA9IGdldF9ncm91cF9uYW1lKGFyZywgJmdyb3VwX25hbWVfZW5kKTsKKworICAgIGlmIChyZXN0ICE9IE5VTEwpCisgICAgeworCXNjbF9pZCA9IHN5bl9jaGVja19jbHVzdGVyKGFyZywgKGludCkoZ3JvdXBfbmFtZV9lbmQgLSBhcmcpKQorCQkgICAgLSBTWU5JRF9DTFVTVEVSOworCisJZm9yICg7OykKKwl7CisJICAgIGlmIChTVFJOSUNNUChyZXN0LCAiYWRkIiwgMykgPT0gMAorCQkgICAgJiYgKHZpbV9pc3doaXRlKHJlc3RbM10pIHx8IHJlc3RbM10gPT0gJz0nKSkKKwkgICAgeworCQlvcHRfbGVuID0gMzsKKwkJbGlzdF9vcCA9IENMVVNURVJfQUREOworCSAgICB9CisJICAgIGVsc2UgaWYgKFNUUk5JQ01QKHJlc3QsICJyZW1vdmUiLCA2KSA9PSAwCisJCSAgICAmJiAodmltX2lzd2hpdGUocmVzdFs2XSkgfHwgcmVzdFs2XSA9PSAnPScpKQorCSAgICB7CisJCW9wdF9sZW4gPSA2OworCQlsaXN0X29wID0gQ0xVU1RFUl9TVUJUUkFDVDsKKwkgICAgfQorCSAgICBlbHNlIGlmIChTVFJOSUNNUChyZXN0LCAiY29udGFpbnMiLCA4KSA9PSAwCisJCQkmJiAodmltX2lzd2hpdGUocmVzdFs4XSkgfHwgcmVzdFs4XSA9PSAnPScpKQorCSAgICB7CisJCW9wdF9sZW4gPSA4OworCQlsaXN0X29wID0gQ0xVU1RFUl9SRVBMQUNFOworCSAgICB9CisJICAgIGVsc2UKKwkJYnJlYWs7CisKKwkgICAgY2xzdHJfbGlzdCA9IE5VTEw7CisJICAgIGlmIChnZXRfaWRfbGlzdCgmcmVzdCwgb3B0X2xlbiwgJmNsc3RyX2xpc3QpID09IEZBSUwpCisJICAgIHsKKwkJRU1TRzIoXyhlX2ludmFyZzIpLCByZXN0KTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgc3luX2NvbWJpbmVfbGlzdCgmU1lOX0NMU1RSKGN1cmJ1Zilbc2NsX2lkXS5zY2xfbGlzdCwKKwkJCSAgICAgJmNsc3RyX2xpc3QsIGxpc3Rfb3ApOworCSAgICBnb3RfY2xzdHIgPSBUUlVFOworCX0KKworCWlmIChnb3RfY2xzdHIpCisJeworCSAgICByZWRyYXdfY3VyYnVmX2xhdGVyKE5PVF9WQUxJRCk7CisJICAgIHN5bl9zdGFja19mcmVlX2FsbChjdXJidWYpOwkvKiBOZWVkIHRvIHJlY29tcHV0ZSBhbGwgc3ludGF4LiAqLworCX0KKyAgICB9CisKKyAgICBpZiAoIWdvdF9jbHN0cikKKwlFTVNHKF8oIkU0MDA6IE5vIGNsdXN0ZXIgc3BlY2lmaWVkIikpOworICAgIGlmIChyZXN0ID09IE5VTEwgfHwgIWVuZHNfZXhjbWQoKnJlc3QpKQorCUVNU0cyKF8oZV9pbnZhcmcyKSwgYXJnKTsKK30KKworLyoKKyAqIE9uIGZpcnN0IGNhbGwgZm9yIGN1cnJlbnQgYnVmZmVyOiBJbml0IGdyb3dpbmcgYXJyYXkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraW5pdF9zeW5fcGF0dGVybnMoKQoreworICAgIGN1cmJ1Zi0+Yl9zeW5fcGF0dGVybnMuZ2FfaXRlbXNpemUgPSBzaXplb2Yoc3lucGF0X1QpOworICAgIGN1cmJ1Zi0+Yl9zeW5fcGF0dGVybnMuZ2FfZ3Jvd3NpemUgPSAxMDsKK30KKworLyoKKyAqIEdldCBvbmUgcGF0dGVybiBmb3IgYSAiOnN5bnRheCBtYXRjaCIgb3IgIjpzeW50YXggcmVnaW9uIiBjb21tYW5kLgorICogU3RvcmVzIHRoZSBwYXR0ZXJuIGFuZCBwcm9ncmFtIGluIGEgc3lucGF0X1QuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV4dCBhcmd1bWVudCwgb3IgTlVMTCBpbiBjYXNlIG9mIGFuIGVycm9yLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCitnZXRfc3luX3BhdHRlcm4oYXJnLCBjaSkKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBzeW5wYXRfVAkqY2k7Cit7CisgICAgY2hhcl91CSplbmQ7CisgICAgaW50CQkqcDsKKyAgICBpbnQJCWlkeDsKKyAgICBjaGFyX3UJKmNwb19zYXZlOworCisgICAgLyogbmVlZCBhdCBsZWFzdCB0aHJlZSBjaGFycyAqLworICAgIGlmIChhcmcgPT0gTlVMTCB8fCBhcmdbMV0gPT0gTlVMIHx8IGFyZ1syXSA9PSBOVUwpCisJcmV0dXJuIE5VTEw7CisKKyAgICBlbmQgPSBza2lwX3JlZ2V4cChhcmcgKyAxLCAqYXJnLCBUUlVFLCBOVUxMKTsKKyAgICBpZiAoKmVuZCAhPSAqYXJnKQkJCSAgICAvKiBlbmQgZGVsaW1pdGVyIG5vdCBmb3VuZCAqLworICAgIHsKKwlFTVNHMihfKCJFNDAxOiBQYXR0ZXJuIGRlbGltaXRlciBub3QgZm91bmQ6ICVzIiksIGFyZyk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorICAgIC8qIHN0b3JlIHRoZSBwYXR0ZXJuIGFuZCBjb21waWxlZCByZWdleHAgcHJvZ3JhbSAqLworICAgIGlmICgoY2ktPnNwX3BhdHRlcm4gPSB2aW1fc3RybnNhdmUoYXJnICsgMSwgKGludCkoZW5kIC0gYXJnIC0gMSkpKSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgLyogTWFrZSAnY3BvcHRpb25zJyBlbXB0eSwgdG8gYXZvaWQgdGhlICdsJyBmbGFnICovCisgICAgY3BvX3NhdmUgPSBwX2NwbzsKKyAgICBwX2NwbyA9IChjaGFyX3UgKikiIjsKKyAgICBjaS0+c3BfcHJvZyA9IHZpbV9yZWdjb21wKGNpLT5zcF9wYXR0ZXJuLCBSRV9NQUdJQyk7CisgICAgcF9jcG8gPSBjcG9fc2F2ZTsKKworICAgIGlmIChjaS0+c3BfcHJvZyA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgIGNpLT5zcF9pYyA9IGN1cmJ1Zi0+Yl9zeW5faWM7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBhIG1hdGNoLCBoaWdobGlnaHQgb3IgcmVnaW9uIG9mZnNldC4KKyAgICAgKi8KKyAgICArK2VuZDsKKyAgICBkbworICAgIHsKKwlmb3IgKGlkeCA9IFNQT19DT1VOVDsgLS1pZHggPj0gMDsgKQorCSAgICBpZiAoU1RSTkNNUChlbmQsIHNwb19uYW1lX3RhYltpZHhdLCAzKSA9PSAwKQorCQlicmVhazsKKwlpZiAoaWR4ID49IDApCisJeworCSAgICBwID0gJihjaS0+c3Bfb2Zmc2V0c1tpZHhdKTsKKwkgICAgaWYgKGlkeCAhPSBTUE9fTENfT0ZGKQorCQlzd2l0Y2ggKGVuZFszXSkKKwkJeworCQkgICAgY2FzZSAncyc6ICAgYnJlYWs7CisJCSAgICBjYXNlICdiJzogICBicmVhazsKKwkJICAgIGNhc2UgJ2UnOiAgIGlkeCArPSBTUE9fQ09VTlQ7IGJyZWFrOworCQkgICAgZGVmYXVsdDogICAgaWR4ID0gLTE7IGJyZWFrOworCQl9CisJICAgIGlmIChpZHggPj0gMCkKKwkgICAgeworCQljaS0+c3Bfb2ZmX2ZsYWdzIHw9ICgxIDw8IGlkeCk7CisJCWlmIChpZHggPT0gU1BPX0xDX09GRikJICAgIC8qIGxjPTk5ICovCisJCXsKKwkJICAgIGVuZCArPSAzOworCQkgICAgKnAgPSBnZXRkaWdpdHMoJmVuZCk7CisKKwkJICAgIC8qICJsYz0iIG9mZnNldCBhdXRvbWF0aWNhbGx5IHNldHMgIm1zPSIgb2Zmc2V0ICovCisJCSAgICBpZiAoIShjaS0+c3Bfb2ZmX2ZsYWdzICYgKDEgPDwgU1BPX01TX09GRikpKQorCQkgICAgeworCQkJY2ktPnNwX29mZl9mbGFncyB8PSAoMSA8PCBTUE9fTVNfT0ZGKTsKKwkJCWNpLT5zcF9vZmZzZXRzW1NQT19NU19PRkZdID0gKnA7CisJCSAgICB9CisJCX0KKwkJZWxzZQkJCSAgICAvKiB5eT14Kzk5ICovCisJCXsKKwkJICAgIGVuZCArPSA0OworCQkgICAgaWYgKCplbmQgPT0gJysnKQorCQkgICAgeworCQkJKytlbmQ7CisJCQkqcCA9IGdldGRpZ2l0cygmZW5kKTsJCS8qIHBvc2l0aXZlIG9mZnNldCAqLworCQkgICAgfQorCQkgICAgZWxzZSBpZiAoKmVuZCA9PSAnLScpCisJCSAgICB7CisJCQkrK2VuZDsKKwkJCSpwID0gLWdldGRpZ2l0cygmZW5kKTsJCS8qIG5lZ2F0aXZlIG9mZnNldCAqLworCQkgICAgfQorCQl9CisJCWlmICgqZW5kICE9ICcsJykKKwkJICAgIGJyZWFrOworCQkrK2VuZDsKKwkgICAgfQorCX0KKyAgICB9IHdoaWxlIChpZHggPj0gMCk7CisKKyAgICBpZiAoIWVuZHNfZXhjbWQoKmVuZCkgJiYgIXZpbV9pc3doaXRlKCplbmQpKQorICAgIHsKKwlFTVNHMihfKCJFNDAyOiBHYXJiYWdlIGFmdGVyIHBhdHRlcm46ICVzIiksIGFyZyk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBza2lwd2hpdGUoZW5kKTsKK30KKworLyoKKyAqIEhhbmRsZSAiOnN5bnRheCBzeW5jIC4uIiBjb21tYW5kLgorICovCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitzeW5fY21kX3N5bmMoZWFwLCBzeW5jaW5nKQorICAgIGV4YXJnX1QJKmVhcDsKKyAgICBpbnQJCXN5bmNpbmc7CSAgICAvKiBub3QgdXNlZCAqLworeworICAgIGNoYXJfdQkqYXJnX3N0YXJ0ID0gZWFwLT5hcmc7CisgICAgY2hhcl91CSphcmdfZW5kOworICAgIGNoYXJfdQkqa2V5ID0gTlVMTDsKKyAgICBjaGFyX3UJKm5leHRfYXJnOworICAgIGludAkJaWxsZWdhbCA9IEZBTFNFOworICAgIGludAkJZmluaXNoZWQgPSBGQUxTRTsKKyAgICBsb25nCW47CisgICAgY2hhcl91CSpjcG9fc2F2ZTsKKworICAgIGlmIChlbmRzX2V4Y21kKCphcmdfc3RhcnQpKQorICAgIHsKKwlzeW5fY21kX2xpc3QoZWFwLCBUUlVFKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgd2hpbGUgKCFlbmRzX2V4Y21kKCphcmdfc3RhcnQpKQorICAgIHsKKwlhcmdfZW5kID0gc2tpcHRvd2hpdGUoYXJnX3N0YXJ0KTsKKwluZXh0X2FyZyA9IHNraXB3aGl0ZShhcmdfZW5kKTsKKwl2aW1fZnJlZShrZXkpOworCWtleSA9IHZpbV9zdHJuc2F2ZV91cChhcmdfc3RhcnQsIChpbnQpKGFyZ19lbmQgLSBhcmdfc3RhcnQpKTsKKwlpZiAoU1RSQ01QKGtleSwgIkNDT01NRU5UIikgPT0gMCkKKwl7CisJICAgIGlmICghZWFwLT5za2lwKQorCQljdXJidWYtPmJfc3luX3N5bmNfZmxhZ3MgfD0gU0ZfQ0NPTU1FTlQ7CisJICAgIGlmICghZW5kc19leGNtZCgqbmV4dF9hcmcpKQorCSAgICB7CisJCWFyZ19lbmQgPSBza2lwdG93aGl0ZShuZXh0X2FyZyk7CisJCWlmICghZWFwLT5za2lwKQorCQkgICAgY3VyYnVmLT5iX3N5bl9zeW5jX2lkID0gc3luX2NoZWNrX2dyb3VwKG5leHRfYXJnLAorCQkJCQkJICAgKGludCkoYXJnX2VuZCAtIG5leHRfYXJnKSk7CisJCW5leHRfYXJnID0gc2tpcHdoaXRlKGFyZ19lbmQpOworCSAgICB9CisJICAgIGVsc2UgaWYgKCFlYXAtPnNraXApCisJCWN1cmJ1Zi0+Yl9zeW5fc3luY19pZCA9IHN5bl9uYW1lMmlkKChjaGFyX3UgKikiQ29tbWVudCIpOworCX0KKwllbHNlIGlmICggIFNUUk5DTVAoa2V5LCAiTElORVMiLCA1KSA9PSAwCisJCXx8IFNUUk5DTVAoa2V5LCAiTUlOTElORVMiLCA4KSA9PSAwCisJCXx8IFNUUk5DTVAoa2V5LCAiTUFYTElORVMiLCA4KSA9PSAwCisJCXx8IFNUUk5DTVAoa2V5LCAiTElORUJSRUFLUyIsIDEwKSA9PSAwKQorCXsKKwkgICAgaWYgKGtleVs0XSA9PSAnUycpCisJCWFyZ19lbmQgPSBrZXkgKyA2OworCSAgICBlbHNlIGlmIChrZXlbMF0gPT0gJ0wnKQorCQlhcmdfZW5kID0ga2V5ICsgMTE7CisJICAgIGVsc2UKKwkJYXJnX2VuZCA9IGtleSArIDk7CisJICAgIGlmIChhcmdfZW5kWy0xXSAhPSAnPScgfHwgIVZJTV9JU0RJR0lUKCphcmdfZW5kKSkKKwkgICAgeworCQlpbGxlZ2FsID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgbiA9IGdldGRpZ2l0cygmYXJnX2VuZCk7CisJICAgIGlmICghZWFwLT5za2lwKQorCSAgICB7CisJCWlmIChrZXlbNF0gPT0gJ0InKQorCQkgICAgY3VyYnVmLT5iX3N5bl9zeW5jX2xpbmVicmVha3MgPSBuOworCQllbHNlIGlmIChrZXlbMV0gPT0gJ0EnKQorCQkgICAgY3VyYnVmLT5iX3N5bl9zeW5jX21heGxpbmVzID0gbjsKKwkJZWxzZQorCQkgICAgY3VyYnVmLT5iX3N5bl9zeW5jX21pbmxpbmVzID0gbjsKKwkgICAgfQorCX0KKwllbHNlIGlmIChTVFJDTVAoa2V5LCAiRlJPTVNUQVJUIikgPT0gMCkKKwl7CisJICAgIGlmICghZWFwLT5za2lwKQorCSAgICB7CisJCWN1cmJ1Zi0+Yl9zeW5fc3luY19taW5saW5lcyA9IE1BWExOVU07CisJCWN1cmJ1Zi0+Yl9zeW5fc3luY19tYXhsaW5lcyA9IDA7CisJICAgIH0KKwl9CisJZWxzZSBpZiAoU1RSQ01QKGtleSwgIkxJTkVDT05UIikgPT0gMCkKKwl7CisJICAgIGlmIChjdXJidWYtPmJfc3luX2xpbmVjb250X3BhdCAhPSBOVUxMKQorCSAgICB7CisJCUVNU0coXygiRTQwMzogc3ludGF4IHN5bmM6IGxpbmUgY29udGludWF0aW9ucyBwYXR0ZXJuIHNwZWNpZmllZCB0d2ljZSIpKTsKKwkJZmluaXNoZWQgPSBUUlVFOworCQlicmVhazsKKwkgICAgfQorCSAgICBhcmdfZW5kID0gc2tpcF9yZWdleHAobmV4dF9hcmcgKyAxLCAqbmV4dF9hcmcsIFRSVUUsIE5VTEwpOworCSAgICBpZiAoKmFyZ19lbmQgIT0gKm5leHRfYXJnKQkgICAgLyogZW5kIGRlbGltaXRlciBub3QgZm91bmQgKi8KKwkgICAgeworCQlpbGxlZ2FsID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICBpZiAoIWVhcC0+c2tpcCkKKwkgICAgeworCQkvKiBzdG9yZSB0aGUgcGF0dGVybiBhbmQgY29tcGlsZWQgcmVnZXhwIHByb2dyYW0gKi8KKwkJaWYgKChjdXJidWYtPmJfc3luX2xpbmVjb250X3BhdCA9IHZpbV9zdHJuc2F2ZShuZXh0X2FyZyArIDEsCisJCQkJICAgICAgKGludCkoYXJnX2VuZCAtIG5leHRfYXJnIC0gMSkpKSA9PSBOVUxMKQorCQl7CisJCSAgICBmaW5pc2hlZCA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorCQljdXJidWYtPmJfc3luX2xpbmVjb250X2ljID0gY3VyYnVmLT5iX3N5bl9pYzsKKworCQkvKiBNYWtlICdjcG9wdGlvbnMnIGVtcHR5LCB0byBhdm9pZCB0aGUgJ2wnIGZsYWcgKi8KKwkJY3BvX3NhdmUgPSBwX2NwbzsKKwkJcF9jcG8gPSAoY2hhcl91ICopIiI7CisJCWN1cmJ1Zi0+Yl9zeW5fbGluZWNvbnRfcHJvZyA9CisJCQkgICAgdmltX3JlZ2NvbXAoY3VyYnVmLT5iX3N5bl9saW5lY29udF9wYXQsIFJFX01BR0lDKTsKKwkJcF9jcG8gPSBjcG9fc2F2ZTsKKworCQlpZiAoY3VyYnVmLT5iX3N5bl9saW5lY29udF9wcm9nID09IE5VTEwpCisJCXsKKwkJICAgIHZpbV9mcmVlKGN1cmJ1Zi0+Yl9zeW5fbGluZWNvbnRfcGF0KTsKKwkJICAgIGN1cmJ1Zi0+Yl9zeW5fbGluZWNvbnRfcGF0ID0gTlVMTDsKKwkJICAgIGZpbmlzaGVkID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgbmV4dF9hcmcgPSBza2lwd2hpdGUoYXJnX2VuZCArIDEpOworCX0KKwllbHNlCisJeworCSAgICBlYXAtPmFyZyA9IG5leHRfYXJnOworCSAgICBpZiAoU1RSQ01QKGtleSwgIk1BVENIIikgPT0gMCkKKwkJc3luX2NtZF9tYXRjaChlYXAsIFRSVUUpOworCSAgICBlbHNlIGlmIChTVFJDTVAoa2V5LCAiUkVHSU9OIikgPT0gMCkKKwkJc3luX2NtZF9yZWdpb24oZWFwLCBUUlVFKTsKKwkgICAgZWxzZSBpZiAoU1RSQ01QKGtleSwgIkNMRUFSIikgPT0gMCkKKwkJc3luX2NtZF9jbGVhcihlYXAsIFRSVUUpOworCSAgICBlbHNlCisJCWlsbGVnYWwgPSBUUlVFOworCSAgICBmaW5pc2hlZCA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKwlhcmdfc3RhcnQgPSBuZXh0X2FyZzsKKyAgICB9CisgICAgdmltX2ZyZWUoa2V5KTsKKyAgICBpZiAoaWxsZWdhbCkKKwlFTVNHMihfKCJFNDA0OiBJbGxlZ2FsIGFyZ3VtZW50czogJXMiKSwgYXJnX3N0YXJ0KTsKKyAgICBlbHNlIGlmICghZmluaXNoZWQpCisgICAgeworCWVhcC0+bmV4dGNtZCA9IGNoZWNrX25leHRjbWQoYXJnX3N0YXJ0KTsKKwlyZWRyYXdfY3VyYnVmX2xhdGVyKE5PVF9WQUxJRCk7CisJc3luX3N0YWNrX2ZyZWVfYWxsKGN1cmJ1Zik7CS8qIE5lZWQgdG8gcmVjb21wdXRlIGFsbCBzeW50YXguICovCisgICAgfQorfQorCisvKgorICogQ29udmVydCBhIGxpbmUgb2YgaGlnaGxpZ2h0IGdyb3VwIG5hbWVzIGludG8gYSBsaXN0IG9mIGdyb3VwIElEIG51bWJlcnMuCisgKiAiYXJnIiBzaG91bGQgcG9pbnQgdG8gdGhlICJjb250YWlucyIgb3IgIm5leHRncm91cCIga2V5d29yZC4KKyAqICJhcmciIGlzIGFkdmFuY2VkIHRvIGFmdGVyIHRoZSBsYXN0IGdyb3VwIG5hbWUuCisgKiBDYXJlZnVsOiB0aGUgYXJndW1lbnQgaXMgbW9kaWZpZWQgKE5VTHMgYWRkZWQpLgorICogcmV0dXJucyBGQUlMIGZvciBzb21lIGVycm9yLCBPSyBmb3Igc3VjY2Vzcy4KKyAqLworICAgIHN0YXRpYyBpbnQKK2dldF9pZF9saXN0KGFyZywga2V5bGVuLCBsaXN0KQorICAgIGNoYXJfdQkqKmFyZzsKKyAgICBpbnQJCWtleWxlbjsJCS8qIGxlbmd0aCBvZiBrZXl3b3JkICovCisgICAgc2hvcnQJKipsaXN0OwkJLyogd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdGluZyBsaXN0LCBpZiBub3QKKwkJCQkgICBOVUxMLCB0aGUgbGlzdCBpcyBzaWxlbnRseSBza2lwcGVkISAqLworeworICAgIGNoYXJfdQkqcCA9IE5VTEw7CisgICAgY2hhcl91CSplbmQ7CisgICAgaW50CQlyb3VuZDsKKyAgICBpbnQJCWNvdW50OworICAgIGludAkJdG90YWxfY291bnQgPSAwOworICAgIHNob3J0CSpyZXR2YWwgPSBOVUxMOworICAgIGNoYXJfdQkqbmFtZTsKKyAgICByZWdtYXRjaF9UCXJlZ21hdGNoOworICAgIGludAkJaWQ7CisgICAgaW50CQlpOworICAgIGludAkJZmFpbGVkID0gRkFMU0U7CisKKyAgICAvKgorICAgICAqIFdlIHBhcnNlIHRoZSBsaXN0IHR3aWNlOgorICAgICAqIHJvdW5kID09IDE6IGNvdW50IHRoZSBudW1iZXIgb2YgaXRlbXMsIGFsbG9jYXRlIHRoZSBhcnJheS4KKyAgICAgKiByb3VuZCA9PSAyOiBmaWxsIHRoZSBhcnJheSB3aXRoIHRoZSBpdGVtcy4KKyAgICAgKiBJbiByb3VuZCAxIG5ldyBncm91cHMgbWF5IGJlIGFkZGVkLCBjYXVzaW5nIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8KKyAgICAgKiBncm93IHdoZW4gYSByZWdleHAgaXMgdXNlZC4gIEluIHRoYXQgY2FzZSByb3VuZCAxIGlzIGRvbmUgb25jZSBhZ2Fpbi4KKyAgICAgKi8KKyAgICBmb3IgKHJvdW5kID0gMTsgcm91bmQgPD0gMjsgKytyb3VuZCkKKyAgICB7CisJLyoKKwkgKiBza2lwICJjb250YWlucyIKKwkgKi8KKwlwID0gc2tpcHdoaXRlKCphcmcgKyBrZXlsZW4pOworCWlmICgqcCAhPSAnPScpCisJeworCSAgICBFTVNHMihfKCJFNDA1OiBNaXNzaW5nIGVxdWFsIHNpZ246ICVzIiksICphcmcpOworCSAgICBicmVhazsKKwl9CisJcCA9IHNraXB3aGl0ZShwICsgMSk7CisJaWYgKGVuZHNfZXhjbWQoKnApKQorCXsKKwkgICAgRU1TRzIoXygiRTQwNjogRW1wdHkgYXJndW1lbnQ6ICVzIiksICphcmcpOworCSAgICBicmVhazsKKwl9CisKKwkvKgorCSAqIHBhcnNlIHRoZSBhcmd1bWVudHMgYWZ0ZXIgImNvbnRhaW5zIgorCSAqLworCWNvdW50ID0gMDsKKwl3aGlsZSAoIWVuZHNfZXhjbWQoKnApKQorCXsKKwkgICAgZm9yIChlbmQgPSBwOyAqZW5kICYmICF2aW1faXN3aGl0ZSgqZW5kKSAmJiAqZW5kICE9ICcsJzsgKytlbmQpCisJCTsKKwkgICAgbmFtZSA9IGFsbG9jKChpbnQpKGVuZCAtIHAgKyAzKSk7CSAgICAvKiBsZWF2ZSByb29tIGZvciAiXiQiICovCisJICAgIGlmIChuYW1lID09IE5VTEwpCisJICAgIHsKKwkJZmFpbGVkID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgU1RSTkNQWShuYW1lICsgMSwgcCwgZW5kIC0gcCk7CisJICAgIG5hbWVbZW5kIC0gcCArIDFdID0gTlVMOworCSAgICBpZiAoICAgICAgIFNUUkNNUChuYW1lICsgMSwgIkFMTEJVVCIpID09IDAKKwkJICAgIHx8IFNUUkNNUChuYW1lICsgMSwgIkFMTCIpID09IDAKKwkJICAgIHx8IFNUUkNNUChuYW1lICsgMSwgIlRPUCIpID09IDAKKwkJICAgIHx8IFNUUkNNUChuYW1lICsgMSwgIkNPTlRBSU5FRCIpID09IDApCisJICAgIHsKKwkJaWYgKFRPVVBQRVJfQVNDKCoqYXJnKSAhPSAnQycpCisJCXsKKwkJICAgIEVNU0cyKF8oIkU0MDc6ICVzIG5vdCBhbGxvd2VkIGhlcmUiKSwgbmFtZSArIDEpOworCQkgICAgZmFpbGVkID0gVFJVRTsKKwkJICAgIHZpbV9mcmVlKG5hbWUpOworCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKGNvdW50ICE9IDApCisJCXsKKwkJICAgIEVNU0cyKF8oIkU0MDg6ICVzIG11c3QgYmUgZmlyc3QgaW4gY29udGFpbnMgbGlzdCIpLCBuYW1lICsgMSk7CisJCSAgICBmYWlsZWQgPSBUUlVFOworCQkgICAgdmltX2ZyZWUobmFtZSk7CisJCSAgICBicmVhazsKKwkJfQorCQlpZiAobmFtZVsxXSA9PSAnQScpCisJCSAgICBpZCA9IFNZTklEX0FMTEJVVDsKKwkJZWxzZSBpZiAobmFtZVsxXSA9PSAnVCcpCisJCSAgICBpZCA9IFNZTklEX1RPUDsKKwkJZWxzZQorCQkgICAgaWQgPSBTWU5JRF9DT05UQUlORUQ7CisJCWlkICs9IGN1cnJlbnRfc3luX2luY190YWc7CisJICAgIH0KKwkgICAgZWxzZSBpZiAobmFtZVsxXSA9PSAnQCcpCisJICAgIHsKKwkJaWQgPSBzeW5fY2hlY2tfY2x1c3RlcihuYW1lICsgMiwgKGludCkoZW5kIC0gcCAtIDEpKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJLyoKKwkJICogSGFuZGxlIGZ1bGwgZ3JvdXAgbmFtZS4KKwkJICovCisJCWlmICh2aW1fc3RycGJyayhuYW1lICsgMSwgKGNoYXJfdSAqKSJcXC4qXiR+WyIpID09IE5VTEwpCisJCSAgICBpZCA9IHN5bl9jaGVja19ncm91cChuYW1lICsgMSwgKGludCkoZW5kIC0gcCkpOworCQllbHNlCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBIYW5kbGUgbWF0Y2ggb2YgcmVnZXhwIHdpdGggZ3JvdXAgbmFtZXMuCisJCSAgICAgKi8KKwkJICAgICpuYW1lID0gJ14nOworCQkgICAgU1RSQ0FUKG5hbWUsICIkIik7CisJCSAgICByZWdtYXRjaC5yZWdwcm9nID0gdmltX3JlZ2NvbXAobmFtZSwgUkVfTUFHSUMpOworCQkgICAgaWYgKHJlZ21hdGNoLnJlZ3Byb2cgPT0gTlVMTCkKKwkJICAgIHsKKwkJCWZhaWxlZCA9IFRSVUU7CisJCQl2aW1fZnJlZShuYW1lKTsKKwkJCWJyZWFrOworCQkgICAgfQorCisJCSAgICByZWdtYXRjaC5ybV9pYyA9IFRSVUU7CisJCSAgICBpZCA9IDA7CisJCSAgICBmb3IgKGkgPSBoaWdobGlnaHRfZ2EuZ2FfbGVuOyAtLWkgPj0gMDsgKQorCQkgICAgeworCQkJaWYgKHZpbV9yZWdleGVjKCZyZWdtYXRjaCwgSExfVEFCTEUoKVtpXS5zZ19uYW1lLAorCQkJCQkJCQkgIChjb2xucl9UKTApKQorCQkJeworCQkJICAgIGlmIChyb3VuZCA9PSAyKQorCQkJICAgIHsKKwkJCQkvKiBHb3QgbW9yZSBpdGVtcyB0aGFuIGV4cGVjdGVkOyBjYW4gaGFwcGVuCisJCQkJICogd2hlbiBhZGRpbmcgaXRlbXMgdGhhdCBtYXRjaDoKKwkJCQkgKiAiY29udGFpbnM9YS4qYixheGIiLgorCQkJCSAqIEdvIGJhY2sgdG8gZmlyc3Qgcm91bmQgKi8KKwkJCQlpZiAoY291bnQgPj0gdG90YWxfY291bnQpCisJCQkJeworCQkJCSAgICB2aW1fZnJlZShyZXR2YWwpOworCQkJCSAgICByb3VuZCA9IDE7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkgICAgcmV0dmFsW2NvdW50XSA9IGkgKyAxOworCQkJICAgIH0KKwkJCSAgICArK2NvdW50OworCQkJICAgIGlkID0gLTE7CSAgICAvKiByZW1lbWJlciB0aGF0IHdlIGZvdW5kIG9uZSAqLworCQkJfQorCQkgICAgfQorCQkgICAgdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7CisJCX0KKwkgICAgfQorCSAgICB2aW1fZnJlZShuYW1lKTsKKwkgICAgaWYgKGlkID09IDApCisJICAgIHsKKwkJRU1TRzIoXygiRTQwOTogVW5rbm93biBncm91cCBuYW1lOiAlcyIpLCBwKTsKKwkJZmFpbGVkID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKGlkID4gMCkKKwkgICAgeworCQlpZiAocm91bmQgPT0gMikKKwkJeworCQkgICAgLyogR290IG1vcmUgaXRlbXMgdGhhbiBleHBlY3RlZCwgZ28gYmFjayB0byBmaXJzdCByb3VuZCAqLworCQkgICAgaWYgKGNvdW50ID49IHRvdGFsX2NvdW50KQorCQkgICAgeworCQkJdmltX2ZyZWUocmV0dmFsKTsKKwkJCXJvdW5kID0gMTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCXJldHZhbFtjb3VudF0gPSBpZDsKKwkJfQorCQkrK2NvdW50OworCSAgICB9CisJICAgIHAgPSBza2lwd2hpdGUoZW5kKTsKKwkgICAgaWYgKCpwICE9ICcsJykKKwkJYnJlYWs7CisJICAgIHAgPSBza2lwd2hpdGUocCArIDEpOwkvKiBza2lwIGNvbW1hIGluIGJldHdlZW4gYXJndW1lbnRzICovCisJfQorCWlmIChmYWlsZWQpCisJICAgIGJyZWFrOworCWlmIChyb3VuZCA9PSAxKQorCXsKKwkgICAgcmV0dmFsID0gKHNob3J0ICopYWxsb2MoKHVuc2lnbmVkKSgoY291bnQgKyAxKSAqIHNpemVvZihzaG9ydCkpKTsKKwkgICAgaWYgKHJldHZhbCA9PSBOVUxMKQorCQlicmVhazsKKwkgICAgcmV0dmFsW2NvdW50XSA9IDA7CSAgICAvKiB6ZXJvIG1lYW5zIGVuZCBvZiB0aGUgbGlzdCAqLworCSAgICB0b3RhbF9jb3VudCA9IGNvdW50OworCX0KKyAgICB9CisKKyAgICAqYXJnID0gcDsKKyAgICBpZiAoZmFpbGVkIHx8IHJldHZhbCA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShyZXR2YWwpOworCXJldHVybiBGQUlMOworICAgIH0KKworICAgIGlmICgqbGlzdCA9PSBOVUxMKQorCSpsaXN0ID0gcmV0dmFsOworICAgIGVsc2UKKwl2aW1fZnJlZShyZXR2YWwpOwkvKiBsaXN0IGFscmVhZHkgZm91bmQsIGRvbid0IG92ZXJ3cml0ZSBpdCAqLworCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogTWFrZSBhIGNvcHkgb2YgYW4gSUQgbGlzdC4KKyAqLworICAgIHN0YXRpYyBzaG9ydCAqCitjb3B5X2lkX2xpc3QobGlzdCkKKyAgICBzaG9ydCAgICpsaXN0OworeworICAgIGludAkgICAgbGVuOworICAgIGludAkgICAgY291bnQ7CisgICAgc2hvcnQgICAqcmV0dmFsOworCisgICAgaWYgKGxpc3QgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIGZvciAoY291bnQgPSAwOyBsaXN0W2NvdW50XTsgKytjb3VudCkKKwk7CisgICAgbGVuID0gKGNvdW50ICsgMSkgKiBzaXplb2Yoc2hvcnQpOworICAgIHJldHZhbCA9IChzaG9ydCAqKWFsbG9jKCh1bnNpZ25lZClsZW4pOworICAgIGlmIChyZXR2YWwgIT0gTlVMTCkKKwltY2hfbWVtbW92ZShyZXR2YWwsIGxpc3QsIChzaXplX3QpbGVuKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBDaGVjayBpZiBzeW50YXggZ3JvdXAgInNzcCIgaXMgaW4gdGhlIElEIGxpc3QgImxpc3QiIG9mICJjdXJfc2kiLgorICogImN1cl9zaSIgY2FuIGJlIE5VTEwgaWYgbm90IGNoZWNraW5nIHRoZSAiY29udGFpbmVkaW4iIGxpc3QuCisgKiBVc2VkIHRvIGNoZWNrIGlmIGEgc3ludGF4IGl0ZW0gaXMgaW4gdGhlICJjb250YWlucyIgb3IgIm5leHRncm91cCIgbGlzdCBvZgorICogdGhlIGN1cnJlbnQgaXRlbS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHZlcnkgb2Z0ZW4sIGtlZXAgaXQgZmFzdCEhCisgKi8KKyAgICBzdGF0aWMgaW50Citpbl9pZF9saXN0KGN1cl9zaSwgbGlzdCwgc3NwLCBjb250YWluZWQpCisgICAgc3RhdGVpdGVtX1QJKmN1cl9zaTsJLyogY3VycmVudCBpdGVtIG9yIE5VTEwgKi8KKyAgICBzaG9ydAkqbGlzdDsJCS8qIGlkIGxpc3QgKi8KKyAgICBzdHJ1Y3Qgc3Bfc3luICpzc3A7CQkvKiBncm91cCBpZCBhbmQgIjpzeW4gaW5jbHVkZSIgdGFnIG9mIGdyb3VwICovCisgICAgaW50CQljb250YWluZWQ7CS8qIGdyb3VwIGlkIGlzIGNvbnRhaW5lZCAqLworeworICAgIGludAkJcmV0dmFsOworICAgIHNob3J0CSpzY2xfbGlzdDsKKyAgICBzaG9ydAlpdGVtOworICAgIHNob3J0CWlkID0gc3NwLT5pZDsKKyAgICBzdGF0aWMgaW50CWRlcHRoID0gMDsKKyAgICBpbnQJCXI7CisKKyAgICAvKiBJZiBzcHAgaGFzIGEgImNvbnRhaW5lZGluIiBsaXN0IGFuZCAiY3VyX3NpIiBpcyBpbiBpdCwgcmV0dXJuIFRSVUUuICovCisgICAgaWYgKGN1cl9zaSAhPSBOVUxMICYmIHNzcC0+Y29udF9pbl9saXN0ICE9IE5VTEwpCisgICAgeworCS8qIElnbm9yZSB0cmFuc3BhcmVudCBpdGVtcyB3aXRob3V0IGEgY29udGFpbnMgYXJndW1lbnQuICBEb3VibGUgY2hlY2sKKwkgKiB0aGF0IHdlIGRvbid0IGdvIGJhY2sgcGFzdCB0aGUgZmlyc3Qgb25lLiAqLworCXdoaWxlICgoY3VyX3NpLT5zaV9mbGFncyAmIEhMX1RSQU5TX0NPTlQpCisJCSYmIGN1cl9zaSA+IChzdGF0ZWl0ZW1fVCAqKShjdXJyZW50X3N0YXRlLmdhX2RhdGEpKQorCSAgICAtLWN1cl9zaTsKKwkvKiBjdXJfc2ktPnNpX2lkeCBpcyAtMSBmb3Iga2V5d29yZHMsIHRoZXNlIG5ldmVyIGNvbnRhaW4gYW55dGhpbmcuICovCisJaWYgKGN1cl9zaS0+c2lfaWR4ID49IDAgJiYgaW5faWRfbGlzdChOVUxMLCBzc3AtPmNvbnRfaW5fbGlzdCwKKwkJJihTWU5fSVRFTVMoc3luX2J1ZilbY3VyX3NpLT5zaV9pZHhdLnNwX3N5biksCisJCSAgU1lOX0lURU1TKHN5bl9idWYpW2N1cl9zaS0+c2lfaWR4XS5zcF9mbGFncyAmIEhMX0NPTlRBSU5FRCkpCisJICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIGlmIChsaXN0ID09IE5VTEwpCisJcmV0dXJuIEZBTFNFOworCisgICAgLyoKKyAgICAgKiBJZiBsaXN0IGlzIElEX0xJU1RfQUxMLCB3ZSBhcmUgaW4gYSB0cmFuc3BhcmVudCBpdGVtIHRoYXQgaXNuJ3QKKyAgICAgKiBpbnNpZGUgYW55dGhpbmcuICBPbmx5IGFsbG93IG5vdC1jb250YWluZWQgZ3JvdXBzLgorICAgICAqLworICAgIGlmIChsaXN0ID09IElEX0xJU1RfQUxMKQorCXJldHVybiAhY29udGFpbmVkOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgZmlyc3QgaXRlbSBpcyAiQUxMQlVUIiwgcmV0dXJuIFRSVUUgaWYgImlkIiBpcyBOT1QgaW4gdGhlCisgICAgICogY29udGFpbnMgbGlzdC4gIFdlIGFsc28gcmVxdWlyZSB0aGF0ICJpZCIgaXMgYXQgdGhlIHNhbWUgIjpzeW4gaW5jbHVkZSIKKyAgICAgKiBsZXZlbCBhcyB0aGUgbGlzdC4KKyAgICAgKi8KKyAgICBpdGVtID0gKmxpc3Q7CisgICAgaWYgKGl0ZW0gPj0gU1lOSURfQUxMQlVUICYmIGl0ZW0gPCBTWU5JRF9DTFVTVEVSKQorICAgIHsKKwlpZiAoaXRlbSA8IFNZTklEX1RPUCkKKwl7CisJICAgIC8qIEFMTCBvciBBTExCVVQ6IGFjY2VwdCBhbGwgZ3JvdXBzIGluIHRoZSBzYW1lIGZpbGUgKi8KKwkgICAgaWYgKGl0ZW0gLSBTWU5JRF9BTExCVVQgIT0gc3NwLT5pbmNfdGFnKQorCQlyZXR1cm4gRkFMU0U7CisJfQorCWVsc2UgaWYgKGl0ZW0gPCBTWU5JRF9DT05UQUlORUQpCisJeworCSAgICAvKiBUT1A6IGFjY2VwdCBhbGwgbm90LWNvbnRhaW5lZCBncm91cHMgaW4gdGhlIHNhbWUgZmlsZSAqLworCSAgICBpZiAoaXRlbSAtIFNZTklEX1RPUCAhPSBzc3AtPmluY190YWcgfHwgY29udGFpbmVkKQorCQlyZXR1cm4gRkFMU0U7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIENPTlRBSU5FRDogYWNjZXB0IGFsbCBjb250YWluZWQgZ3JvdXBzIGluIHRoZSBzYW1lIGZpbGUgKi8KKwkgICAgaWYgKGl0ZW0gLSBTWU5JRF9DT05UQUlORUQgIT0gc3NwLT5pbmNfdGFnIHx8ICFjb250YWluZWQpCisJCXJldHVybiBGQUxTRTsKKwl9CisJaXRlbSA9ICorK2xpc3Q7CisJcmV0dmFsID0gRkFMU0U7CisgICAgfQorICAgIGVsc2UKKwlyZXR2YWwgPSBUUlVFOworCisgICAgLyoKKyAgICAgKiBSZXR1cm4gInJldHZhbCIgaWYgaWQgaXMgaW4gdGhlIGNvbnRhaW5zIGxpc3QuCisgICAgICovCisgICAgd2hpbGUgKGl0ZW0gIT0gMCkKKyAgICB7CisJaWYgKGl0ZW0gPT0gaWQpCisJICAgIHJldHVybiByZXR2YWw7CisJaWYgKGl0ZW0gPj0gU1lOSURfQ0xVU1RFUikKKwl7CisJICAgIHNjbF9saXN0ID0gU1lOX0NMU1RSKHN5bl9idWYpW2l0ZW0gLSBTWU5JRF9DTFVTVEVSXS5zY2xfbGlzdDsKKwkgICAgLyogcmVzdHJpY3QgcmVjdXJzaXZlbmVzcyB0byAzMCB0byBhdm9pZCBhbiBlbmRsZXNzIGxvb3AgZm9yIGEKKwkgICAgICogY2x1c3RlciB0aGF0IGluY2x1ZGVzIGl0c2VsZiAoaW5kaXJlY3RseSkgKi8KKwkgICAgaWYgKHNjbF9saXN0ICE9IE5VTEwgJiYgZGVwdGggPCAzMCkKKwkgICAgeworCQkrK2RlcHRoOworCQlyID0gaW5faWRfbGlzdChOVUxMLCBzY2xfbGlzdCwgc3NwLCBjb250YWluZWQpOworCQktLWRlcHRoOworCQlpZiAocikKKwkJICAgIHJldHVybiByZXR2YWw7CisJICAgIH0KKwl9CisJaXRlbSA9ICorK2xpc3Q7CisgICAgfQorICAgIHJldHVybiAhcmV0dmFsOworfQorCitzdHJ1Y3Qgc3ViY29tbWFuZAoreworICAgIGNoYXIgICAgKm5hbWU7CQkJCS8qIHN1YmNvbW1hbmQgbmFtZSAqLworICAgIHZvaWQgICAgKCpmdW5jKV9fQVJHUygoZXhhcmdfVCAqLCBpbnQpKTsJLyogZnVuY3Rpb24gdG8gY2FsbCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzdWJjb21tYW5kIHN1YmNvbW1hbmRzW10gPQoreworICAgIHsiY2FzZSIsCQlzeW5fY21kX2Nhc2V9LAorICAgIHsiY2xlYXIiLAkJc3luX2NtZF9jbGVhcn0sCisgICAgeyJjbHVzdGVyIiwJCXN5bl9jbWRfY2x1c3Rlcn0sCisgICAgeyJlbmFibGUiLAkJc3luX2NtZF9lbmFibGV9LAorICAgIHsiaW5jbHVkZSIsCQlzeW5fY21kX2luY2x1ZGV9LAorICAgIHsia2V5d29yZCIsCQlzeW5fY21kX2tleXdvcmR9LAorICAgIHsibGlzdCIsCQlzeW5fY21kX2xpc3R9LAorICAgIHsibWFudWFsIiwJCXN5bl9jbWRfbWFudWFsfSwKKyAgICB7Im1hdGNoIiwJCXN5bl9jbWRfbWF0Y2h9LAorICAgIHsib24iLAkJc3luX2NtZF9vbn0sCisgICAgeyJvZmYiLAkJc3luX2NtZF9vZmZ9LAorICAgIHsicmVnaW9uIiwJCXN5bl9jbWRfcmVnaW9ufSwKKyAgICB7InJlc2V0IiwJCXN5bl9jbWRfcmVzZXR9LAorICAgIHsic3luYyIsCQlzeW5fY21kX3N5bmN9LAorICAgIHsiIiwJCXN5bl9jbWRfbGlzdH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCisvKgorICogIjpzeW50YXgiLgorICogVGhpcyBzZWFyY2hlcyB0aGUgc3ViY29tbWFuZHNbXSB0YWJsZSBmb3IgdGhlIHN1YmNvbW1hbmQgbmFtZSwgYW5kIGNhbGxzIGEKKyAqIHN5bnRheF9zdWJjb21tYW5kKCkgZnVuY3Rpb24gdG8gZG8gdGhlIHJlc3QuCisgKi8KKyAgICB2b2lkCitleF9zeW50YXgoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBjaGFyX3UJKmFyZyA9IGVhcC0+YXJnOworICAgIGNoYXJfdQkqc3ViY21kX2VuZDsKKyAgICBjaGFyX3UJKnN1YmNtZF9uYW1lOworICAgIGludAkJaTsKKworICAgIHN5bl9jbWRsaW5lcCA9IGVhcC0+Y21kbGluZXA7CisKKyAgICAvKiBpc29sYXRlIHN1YmNvbW1hbmQgbmFtZSAqLworICAgIGZvciAoc3ViY21kX2VuZCA9IGFyZzsgQVNDSUlfSVNBTFBIQSgqc3ViY21kX2VuZCk7ICsrc3ViY21kX2VuZCkKKwk7CisgICAgc3ViY21kX25hbWUgPSB2aW1fc3RybnNhdmUoYXJnLCAoaW50KShzdWJjbWRfZW5kIC0gYXJnKSk7CisgICAgaWYgKHN1YmNtZF9uYW1lICE9IE5VTEwpCisgICAgeworCWlmIChlYXAtPnNraXApCQkvKiBza2lwIGVycm9yIG1lc3NhZ2VzIGZvciBhbGwgc3ViY29tbWFuZHMgKi8KKwkgICAgKytlbXNnX3NraXA7CisJZm9yIChpID0gMDsgOyArK2kpCisJeworCSAgICBpZiAoc3ViY29tbWFuZHNbaV0ubmFtZSA9PSBOVUxMKQorCSAgICB7CisJCUVNU0cyKF8oIkU0MTA6IEludmFsaWQgOnN5bnRheCBzdWJjb21tYW5kOiAlcyIpLCBzdWJjbWRfbmFtZSk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChTVFJDTVAoc3ViY21kX25hbWUsIChjaGFyX3UgKilzdWJjb21tYW5kc1tpXS5uYW1lKSA9PSAwKQorCSAgICB7CisJCWVhcC0+YXJnID0gc2tpcHdoaXRlKHN1YmNtZF9lbmQpOworCQkoc3ViY29tbWFuZHNbaV0uZnVuYykoZWFwLCBGQUxTRSk7CisJCWJyZWFrOworCSAgICB9CisJfQorCXZpbV9mcmVlKHN1YmNtZF9uYW1lKTsKKwlpZiAoZWFwLT5za2lwKQorCSAgICAtLWVtc2dfc2tpcDsKKyAgICB9Cit9CisKKyAgICBpbnQKK3N5bnRheF9wcmVzZW50KGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIHJldHVybiAoYnVmLT5iX3N5bl9wYXR0ZXJucy5nYV9sZW4gIT0gMAorCSAgICB8fCBidWYtPmJfc3luX2NsdXN0ZXJzLmdhX2xlbiAhPSAwCisJICAgIHx8IGN1cmJ1Zi0+Yl9rZXl3dGFiICE9IE5VTEwKKwkgICAgfHwgY3VyYnVmLT5iX2tleXd0YWJfaWMgIT0gTlVMTCk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkgfHwgZGVmaW5lZChQUk9UTykKKworc3RhdGljIGVudW0KK3sKKyAgICBFWFBfU1VCQ01ELAkgICAgLyogZXhwYW5kICI6c3luIiBzdWItY29tbWFuZHMgKi8KKyAgICBFWFBfQ0FTRQkgICAgLyogZXhwYW5kICI6c3luIGNhc2UiIGFyZ3VtZW50cyAqLworfSBleHBhbmRfd2hhdDsKKworCisvKgorICogSGFuZGxlIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIGZvciA6c3ludGF4IGNvbW1hbmQuCisgKi8KKyAgICB2b2lkCitzZXRfY29udGV4dF9pbl9zeW50YXhfY21kKHhwLCBhcmcpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGNoYXJfdQkqYXJnOworeworICAgIGNoYXJfdQkqcDsKKworICAgIC8qIERlZmF1bHQ6IGV4cGFuZCBzdWJjb21tYW5kcyAqLworICAgIHhwLT54cF9jb250ZXh0ID0gRVhQQU5EX1NZTlRBWDsKKyAgICBleHBhbmRfd2hhdCA9IEVYUF9TVUJDTUQ7CisgICAgeHAtPnhwX3BhdHRlcm4gPSBhcmc7CisgICAgaW5jbHVkZV9saW5rID0gRkFMU0U7CisgICAgaW5jbHVkZV9kZWZhdWx0ID0gRkFMU0U7CisKKyAgICAvKiAocGFydCBvZikgc3ViY29tbWFuZCBhbHJlYWR5IHR5cGVkICovCisgICAgaWYgKCphcmcgIT0gTlVMKQorICAgIHsKKwlwID0gc2tpcHRvd2hpdGUoYXJnKTsKKwlpZiAoKnAgIT0gTlVMKQkJICAgIC8qIHBhc3QgZmlyc3Qgd29yZCAqLworCXsKKwkgICAgeHAtPnhwX3BhdHRlcm4gPSBza2lwd2hpdGUocCk7CisJICAgIGlmICgqc2tpcHRvd2hpdGUoeHAtPnhwX3BhdHRlcm4pICE9IE5VTCkKKwkJeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKwkgICAgZWxzZSBpZiAoU1RSTklDTVAoYXJnLCAiY2FzZSIsIHAgLSBhcmcpID09IDApCisJCWV4cGFuZF93aGF0ID0gRVhQX0NBU0U7CisJICAgIGVsc2UgaWYgKCAgU1RSTklDTVAoYXJnLCAia2V5d29yZCIsIHAgLSBhcmcpID09IDAKKwkJICAgIHx8IFNUUk5JQ01QKGFyZywgInJlZ2lvbiIsIHAgLSBhcmcpID09IDAKKwkJICAgIHx8IFNUUk5JQ01QKGFyZywgIm1hdGNoIiwgcCAtIGFyZykgPT0gMAorCQkgICAgfHwgU1RSTklDTVAoYXJnLCAibGlzdCIsIHAgLSBhcmcpID09IDApCisJCXhwLT54cF9jb250ZXh0ID0gRVhQQU5EX0hJR0hMSUdIVDsKKwkgICAgZWxzZQorCQl4cC0+eHBfY29udGV4dCA9IEVYUEFORF9OT1RISU5HOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyBjaGFyICooY2FzZV9hcmdzW10pID0geyJtYXRjaCIsICJpZ25vcmUiLCBOVUxMfTsKKworLyoKKyAqIEZ1bmN0aW9uIGdpdmVuIHRvIEV4cGFuZEdlbmVyaWMoKSB0byBvYnRhaW4gdGhlIGxpc3Qgc3ludGF4IG5hbWVzIGZvcgorICogZXhwYW5zaW9uLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBjaGFyX3UgKgorZ2V0X3N5bnRheF9uYW1lKHhwLCBpZHgpCisgICAgZXhwYW5kX1QJKnhwOworICAgIGludAkJaWR4OworeworICAgIGlmIChleHBhbmRfd2hhdCA9PSBFWFBfU1VCQ01EKQorCXJldHVybiAoY2hhcl91ICopc3ViY29tbWFuZHNbaWR4XS5uYW1lOworICAgIHJldHVybiAoY2hhcl91ICopY2FzZV9hcmdzW2lkeF07Cit9CisKKyNlbmRpZiAvKiBGRUFUX0NNRExfQ09NUEwgKi8KKworI2lmIGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKEZFQVRfUFJJTlRFUikgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBGdW5jdGlvbiBjYWxsZWQgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbjogZ2V0IHN5bnRheCBJRCBhdCBmaWxlIHBvc2l0aW9uLgorICovCisgICAgaW50CitzeW5fZ2V0X2lkKGxudW0sIGNvbCwgdHJhbnMpCisgICAgbG9uZwlsbnVtOworICAgIGxvbmcJY29sOworICAgIGludAkJdHJhbnM7CSAgICAvKiByZW1vdmUgdHJhbnNwYXJhbmN5ICovCit7CisgICAgLyogV2hlbiB0aGUgcG9zaXRpb24gaXMgbm90IGFmdGVyIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCBpbiB0aGUgc2FtZQorICAgICAqIGxpbmUgb2YgdGhlIHNhbWUgYnVmZmVyLCBuZWVkIHRvIHJlc3RhcnQgcGFyc2luZy4gKi8KKyAgICBpZiAoY3Vyd2luLT53X2J1ZmZlciAhPSBzeW5fYnVmCisJICAgIHx8IGxudW0gIT0gY3VycmVudF9sbnVtCisJICAgIHx8IGNvbCA8IChsb25nKWN1cnJlbnRfY29sKQorCXN5bnRheF9zdGFydChjdXJ3aW4sIGxudW0pOworCisgICAgKHZvaWQpZ2V0X3N5bnRheF9hdHRyKChjb2xucl9UKWNvbCk7CisKKyAgICByZXR1cm4gKHRyYW5zID8gY3VycmVudF90cmFuc19pZCA6IGN1cnJlbnRfaWQpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfRk9MRElORykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBGdW5jdGlvbiBjYWxsZWQgdG8gZ2V0IGZvbGRpbmcgbGV2ZWwgZm9yIGxpbmUgImxudW0iIGluIHdpbmRvdyAid3AiLgorICovCisgICAgaW50CitzeW5fZ2V0X2ZvbGRsZXZlbCh3cCwgbG51bSkKKyAgICB3aW5fVAkqd3A7CisgICAgbG9uZwlsbnVtOworeworICAgIGludAkJbGV2ZWwgPSAwOworICAgIGludAkJaTsKKworICAgIC8qIFJldHVybiBxdWlja2x5IHdoZW4gdGhlcmUgYXJlIG5vIGZvbGQgaXRlbXMgYXQgYWxsLiAqLworICAgIGlmICh3cC0+d19idWZmZXItPmJfc3luX2ZvbGRpdGVtcyAhPSAwKQorICAgIHsKKwlzeW50YXhfc3RhcnQod3AsIGxudW0pOworCisJZm9yIChpID0gMDsgaSA8IGN1cnJlbnRfc3RhdGUuZ2FfbGVuOyArK2kpCisJICAgIGlmIChDVVJfU1RBVEUoaSkuc2lfZmxhZ3MgJiBITF9GT0xEKQorCQkrK2xldmVsOworICAgIH0KKyAgICBpZiAobGV2ZWwgPiB3cC0+d19wX2ZkbikKKwlsZXZlbCA9IHdwLT53X3BfZmRuOworICAgIHJldHVybiBsZXZlbDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogRkVBVF9TWU5fSEwgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBIaWdobGlnaHRpbmcgc3R1ZmYJCSAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoZSBkZWZhdWx0IGhpZ2hsaWdodCBncm91cHMuICBUaGVzZSBhcmUgY29tcGlsZWQtaW4gZm9yIGZhc3Qgc3RhcnR1cCBhbmQKKyAqIHRoZXkgc3RpbGwgd29yayB3aGVuIHRoZSBydW50aW1lIGZpbGVzIGNhbid0IGJlIGZvdW5kLgorICogV2hlbiBtYWtpbmcgY2hhbmdlcyBoZXJlLCBhbHNvIGNoYW5nZSBydW50aW1lL2NvbG9ycy9kZWZhdWx0LnZpbSEKKyAqLworc3RhdGljIGNoYXIgKihoaWdobGlnaHRfaW5pdF9ib3RoW10pID0KKyAgICB7CisjaWZkZWYgRkVBVF9HVUkKKwkiQ3Vyc29yIGd1aWJnPWZnIGd1aWZnPWJnIiwKKwkibEN1cnNvciBndWliZz1mZyBndWlmZz1iZyIsCS8qIHNob3VsZCBiZSBkaWZmZXJlbnQsIGJ1dCB3aGF0PyAqLworI2VuZGlmCisJIkVycm9yTXNnIHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1EYXJrUmVkIGN0ZXJtZmc9V2hpdGUgZ3VpYmc9UmVkIGd1aWZnPVdoaXRlIiwKKwkiSW5jU2VhcmNoIHRlcm09cmV2ZXJzZSBjdGVybT1yZXZlcnNlIGd1aT1yZXZlcnNlIiwKKwkiTW9kZU1zZyB0ZXJtPWJvbGQgY3Rlcm09Ym9sZCBndWk9Ym9sZCIsCisJIk5vblRleHQgdGVybT1ib2xkIGN0ZXJtZmc9Qmx1ZSBndWk9Ym9sZCBndWlmZz1CbHVlIiwKKwkiU3RhdHVzTGluZSB0ZXJtPXJldmVyc2UsYm9sZCBjdGVybT1yZXZlcnNlLGJvbGQgZ3VpPXJldmVyc2UsYm9sZCIsCisJIlN0YXR1c0xpbmVOQyB0ZXJtPXJldmVyc2UgY3Rlcm09cmV2ZXJzZSBndWk9cmV2ZXJzZSIsCisJIlZlcnRTcGxpdCB0ZXJtPXJldmVyc2UgY3Rlcm09cmV2ZXJzZSBndWk9cmV2ZXJzZSIsCisJIlZpc3VhbCB0ZXJtPXJldmVyc2UgY3Rlcm09cmV2ZXJzZSBndWk9cmV2ZXJzZSBndWlmZz1HcmV5IGd1aWJnPWZnIiwKKwkiVmlzdWFsTk9TIHRlcm09dW5kZXJsaW5lLGJvbGQgY3Rlcm09dW5kZXJsaW5lLGJvbGQgZ3VpPXVuZGVybGluZSxib2xkIiwKKwkiRGlmZlRleHQgdGVybT1yZXZlcnNlIGN0ZXJtPWJvbGQgY3Rlcm1iZz1SZWQgZ3VpPWJvbGQgZ3VpYmc9UmVkIiwKKwlOVUxMCisgICAgfTsKKworc3RhdGljIGNoYXIgKihoaWdobGlnaHRfaW5pdF9saWdodFtdKSA9CisgICAgeworCSJEaXJlY3RvcnkgdGVybT1ib2xkIGN0ZXJtZmc9RGFya0JsdWUgZ3VpZmc9Qmx1ZSIsCisJIkxpbmVOciB0ZXJtPXVuZGVybGluZSBjdGVybWZnPUJyb3duIGd1aWZnPUJyb3duIiwKKwkiTW9yZU1zZyB0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrR3JlZW4gZ3VpPWJvbGQgZ3VpZmc9U2VhR3JlZW4iLAorCSJOb3JtYWwgZ3VpPU5PTkUiLAorCSJRdWVzdGlvbiB0ZXJtPXN0YW5kb3V0IGN0ZXJtZmc9RGFya0dyZWVuIGd1aT1ib2xkIGd1aWZnPVNlYUdyZWVuIiwKKwkiU2VhcmNoIHRlcm09cmV2ZXJzZSBjdGVybWJnPVllbGxvdyBjdGVybWZnPU5PTkUgZ3VpYmc9WWVsbG93IGd1aWZnPU5PTkUiLAorCSJTcGVjaWFsS2V5IHRlcm09Ym9sZCBjdGVybWZnPURhcmtCbHVlIGd1aWZnPUJsdWUiLAorCSJUaXRsZSB0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrTWFnZW50YSBndWk9Ym9sZCBndWlmZz1NYWdlbnRhIiwKKwkiV2FybmluZ01zZyB0ZXJtPXN0YW5kb3V0IGN0ZXJtZmc9RGFya1JlZCBndWlmZz1SZWQiLAorCSJXaWxkTWVudSB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9WWVsbG93IGN0ZXJtZmc9QmxhY2sgZ3VpYmc9WWVsbG93IGd1aWZnPUJsYWNrIiwKKwkiRm9sZGVkIHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1HcmV5IGN0ZXJtZmc9RGFya0JsdWUgZ3VpYmc9TGlnaHRHcmV5IGd1aWZnPURhcmtCbHVlIiwKKwkiRm9sZENvbHVtbiB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9R3JleSBjdGVybWZnPURhcmtCbHVlIGd1aWJnPUdyZXkgZ3VpZmc9RGFya0JsdWUiLAorCSJTaWduQ29sdW1uIHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1HcmV5IGN0ZXJtZmc9RGFya0JsdWUgZ3VpYmc9R3JleSBndWlmZz1EYXJrQmx1ZSIsCisJIkRpZmZBZGQgdGVybT1ib2xkIGN0ZXJtYmc9TGlnaHRCbHVlIGd1aWJnPUxpZ2h0Qmx1ZSIsCisJIkRpZmZDaGFuZ2UgdGVybT1ib2xkIGN0ZXJtYmc9TGlnaHRNYWdlbnRhIGd1aWJnPUxpZ2h0TWFnZW50YSIsCisJIkRpZmZEZWxldGUgdGVybT1ib2xkIGN0ZXJtZmc9Qmx1ZSBjdGVybWJnPUxpZ2h0Q3lhbiBndWk9Ym9sZCBndWlmZz1CbHVlIGd1aWJnPUxpZ2h0Q3lhbiIsCisJTlVMTAorICAgIH07CisKK3N0YXRpYyBjaGFyICooaGlnaGxpZ2h0X2luaXRfZGFya1tdKSA9CisgICAgeworCSJEaXJlY3RvcnkgdGVybT1ib2xkIGN0ZXJtZmc9TGlnaHRDeWFuIGd1aWZnPUN5YW4iLAorCSJMaW5lTnIgdGVybT11bmRlcmxpbmUgY3Rlcm1mZz1ZZWxsb3cgZ3VpZmc9WWVsbG93IiwKKwkiTW9yZU1zZyB0ZXJtPWJvbGQgY3Rlcm1mZz1MaWdodEdyZWVuIGd1aT1ib2xkIGd1aWZnPVNlYUdyZWVuIiwKKwkiTm9ybWFsIGd1aT1OT05FIiwKKwkiUXVlc3Rpb24gdGVybT1zdGFuZG91dCBjdGVybWZnPUxpZ2h0R3JlZW4gZ3VpPWJvbGQgZ3VpZmc9R3JlZW4iLAorCSJTZWFyY2ggdGVybT1yZXZlcnNlIGN0ZXJtYmc9WWVsbG93IGN0ZXJtZmc9QmxhY2sgZ3VpYmc9WWVsbG93IGd1aWZnPUJsYWNrIiwKKwkiU3BlY2lhbEtleSB0ZXJtPWJvbGQgY3Rlcm1mZz1MaWdodEJsdWUgZ3VpZmc9Q3lhbiIsCisJIlRpdGxlIHRlcm09Ym9sZCBjdGVybWZnPUxpZ2h0TWFnZW50YSBndWk9Ym9sZCBndWlmZz1NYWdlbnRhIiwKKwkiV2FybmluZ01zZyB0ZXJtPXN0YW5kb3V0IGN0ZXJtZmc9TGlnaHRSZWQgZ3VpZmc9UmVkIiwKKwkiV2lsZE1lbnUgdGVybT1zdGFuZG91dCBjdGVybWJnPVllbGxvdyBjdGVybWZnPUJsYWNrIGd1aWJnPVllbGxvdyBndWlmZz1CbGFjayIsCisJIkZvbGRlZCB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9RGFya0dyZXkgY3Rlcm1mZz1DeWFuIGd1aWJnPURhcmtHcmV5IGd1aWZnPUN5YW4iLAorCSJGb2xkQ29sdW1uIHRlcm09c3RhbmRvdXQgY3Rlcm1iZz1EYXJrR3JleSBjdGVybWZnPUN5YW4gZ3VpYmc9R3JleSBndWlmZz1DeWFuIiwKKwkiU2lnbkNvbHVtbiB0ZXJtPXN0YW5kb3V0IGN0ZXJtYmc9RGFya0dyZXkgY3Rlcm1mZz1DeWFuIGd1aWJnPUdyZXkgZ3VpZmc9Q3lhbiIsCisJIkRpZmZBZGQgdGVybT1ib2xkIGN0ZXJtYmc9RGFya0JsdWUgZ3VpYmc9RGFya0JsdWUiLAorCSJEaWZmQ2hhbmdlIHRlcm09Ym9sZCBjdGVybWJnPURhcmtNYWdlbnRhIGd1aWJnPURhcmtNYWdlbnRhIiwKKwkiRGlmZkRlbGV0ZSB0ZXJtPWJvbGQgY3Rlcm1mZz1CbHVlIGN0ZXJtYmc9RGFya0N5YW4gZ3VpPWJvbGQgZ3VpZmc9Qmx1ZSBndWliZz1EYXJrQ3lhbiIsCisJTlVMTAorICAgIH07CisKKyAgICB2b2lkCitpbml0X2hpZ2hsaWdodChib3RoLCByZXNldCkKKyAgICBpbnQJCWJvdGg7CSAgICAvKiBpbmNsdWRlIGdyb3VwcyB3aGVyZSAnYmcnIGRvZXNuJ3QgbWF0dGVyICovCisgICAgaW50CQlyZXNldDsJICAgIC8qIGNsZWFyIGdyb3VwIGZpcnN0ICovCit7CisgICAgaW50CQlpOworICAgIGNoYXIJKipwcDsKKyAgICBzdGF0aWMgaW50CWhhZF9ib3RoID0gRkFMU0U7CisjaWZkZWYgRkVBVF9FVkFMCisgICAgY2hhcl91CSpwOworCisgICAgLyoKKyAgICAgKiBUcnkgZmluZGluZyB0aGUgY29sb3Igc2NoZW1lIGZpbGUuICBVc2VkIHdoZW4gYSBjb2xvciBmaWxlIHdhcyBsb2FkZWQKKyAgICAgKiBhbmQgJ2JhY2tncm91bmQnIG9yICd0X0NvJyBpcyBjaGFuZ2VkLgorICAgICAqLworICAgIHAgPSBnZXRfdmFyX3ZhbHVlKChjaGFyX3UgKikiZzpjb2xvcnNfbmFtZSIpOworICAgIGlmIChwICE9IE5VTEwgJiYgbG9hZF9jb2xvcnMocCkgPT0gT0spCisJcmV0dXJuOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIERpZG4ndCB1c2UgYSBjb2xvciBmaWxlLCB1c2UgdGhlIGNvbXBpbGVkLWluIGNvbG9ycy4KKyAgICAgKi8KKyAgICBpZiAoYm90aCkKKyAgICB7CisJaGFkX2JvdGggPSBUUlVFOworCXBwID0gaGlnaGxpZ2h0X2luaXRfYm90aDsKKwlmb3IgKGkgPSAwOyBwcFtpXSAhPSBOVUxMOyArK2kpCisJICAgIGRvX2hpZ2hsaWdodCgoY2hhcl91ICopcHBbaV0sIHJlc2V0LCBUUlVFKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIWhhZF9ib3RoKQorCS8qIERvbid0IGRvIGFueXRoaW5nIGJlZm9yZSB0aGUgY2FsbCB3aXRoIGJvdGggPT0gVFJVRSBmcm9tIG1haW4oKS4KKwkgKiBOb3QgZXZlcnl0aGluZyBoYXMgYmVlbiBzZXR1cCB0aGVuLCBhbmQgdGhhdCBjYWxsIHdpbGwgb3ZlcnJ1bGUKKwkgKiBldmVyeXRoaW5nIGFueXdheS4gKi8KKwlyZXR1cm47CisKKyAgICBpZiAoKnBfYmcgPT0gJ2wnKQorCXBwID0gaGlnaGxpZ2h0X2luaXRfbGlnaHQ7CisgICAgZWxzZQorCXBwID0gaGlnaGxpZ2h0X2luaXRfZGFyazsKKyAgICBmb3IgKGkgPSAwOyBwcFtpXSAhPSBOVUxMOyArK2kpCisJZG9faGlnaGxpZ2h0KChjaGFyX3UgKilwcFtpXSwgcmVzZXQsIFRSVUUpOworCisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICAvKgorICAgICAqIElmIHN5bnRheCBoaWdobGlnaHRpbmcgaXMgZW5hYmxlZCBsb2FkIHRoZSBoaWdobGlnaHRpbmcgZm9yIGl0LgorICAgICAqLworICAgIGlmIChnZXRfdmFyX3ZhbHVlKChjaGFyX3UgKikiZzpzeW50YXhfb24iKSAhPSBOVUxMKQorCSh2b2lkKWNtZF9ydW50aW1lKChjaGFyX3UgKikic3ludGF4L3N5bmNvbG9yLnZpbSIsIFRSVUUpOworI2VuZGlmCit9CisKKy8qCisgKiBMb2FkIGNvbG9yIGZpbGUgInAiLgorICogUmV0dXJuIE9LIGZvciBzdWNjZXNzLCBGQUlMIGZvciBmYWlsdXJlLgorICovCisgICAgaW50Citsb2FkX2NvbG9ycyhwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCXJldHZhbCA9IEZBSUw7CisgICAgc3RhdGljIGludAlyZWN1cnNpdmUgPSBGQUxTRTsKKworICAgIC8qIFdoZW4gYmVpbmcgY2FsbGVkIHJlY3Vyc2l2ZWx5LCB0aGlzIGlzIHByb2JhYmx5IGJlY2F1c2Ugc2V0dGluZworICAgICAqICdiYWNrZ3JvdW5kJyBjYXVzZWQgdGhlIGhpZ2hsaWdodGluZyB0byBiZSByZWxvYWRlZC4gIFRoaXMgbWVhbnMgaXQgaXMKKyAgICAgKiB3b3JraW5nLCB0aHVzIHdlIHNob3VsZCByZXR1cm4gT0suICovCisgICAgaWYgKHJlY3Vyc2l2ZSkKKwlyZXR1cm4gT0s7CisKKyAgICByZWN1cnNpdmUgPSBUUlVFOworICAgIGJ1ZiA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKHApICsgMTIpKTsKKyAgICBpZiAoYnVmICE9IE5VTEwpCisgICAgeworCXNwcmludGYoKGNoYXIgKilidWYsICJjb2xvcnMvJXMudmltIiwgcCk7CisJcmV0dmFsID0gY21kX3J1bnRpbWUoYnVmLCBGQUxTRSk7CisJdmltX2ZyZWUoYnVmKTsKKyAgICB9CisgICAgcmVjdXJzaXZlID0gRkFMU0U7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogSGFuZGxlIHRoZSAiOmhpZ2hsaWdodCAuLiIgY29tbWFuZC4KKyAqIFdoZW4gdXNpbmcgIjpoaSBjbGVhciIgdGhpcyBpcyBjYWxsZWQgcmVjdXJzaXZlbHkgZm9yIGVhY2ggZ3JvdXAgd2l0aAorICogImZvcmNlaXQiIGFuZCAiaW5pdCIgYm90aCBUUlVFLgorICovCisgICAgdm9pZAorZG9faGlnaGxpZ2h0KGxpbmUsIGZvcmNlaXQsIGluaXQpCisgICAgY2hhcl91CSpsaW5lOworICAgIGludAkJZm9yY2VpdDsKKyAgICBpbnQJCWluaXQ7CSAgICAvKiBUUlVFIHdoZW4gY2FsbGVkIGZvciBpbml0aWFsaXppbmcgKi8KK3sKKyAgICBjaGFyX3UJKm5hbWVfZW5kOworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJKmxpbmVwOworICAgIGNoYXJfdQkqa2V5X3N0YXJ0OworICAgIGNoYXJfdQkqYXJnX3N0YXJ0OworICAgIGNoYXJfdQkqa2V5ID0gTlVMTCwgKmFyZyA9IE5VTEw7CisgICAgbG9uZwlpOworICAgIGludAkJb2ZmOworICAgIGludAkJbGVuOworICAgIGludAkJYXR0cjsKKyAgICBpbnQJCWlkOworICAgIGludAkJaWR4OworICAgIGludAkJZG9kZWZhdWx0ID0gRkFMU0U7CisgICAgaW50CQlkb2NsZWFyID0gRkFMU0U7CisgICAgaW50CQlkb2xpbmsgPSBGQUxTRTsKKyAgICBpbnQJCWVycm9yID0gRkFMU0U7CisgICAgaW50CQljb2xvcjsKKyAgICBpbnQJCWlzX25vcm1hbF9ncm91cCA9IEZBTFNFOwkvKiAiTm9ybWFsIiBncm91cCAqLworI2lmZGVmIEZFQVRfR1VJX1gxMQorICAgIGludAkJaXNfbWVudV9ncm91cCA9IEZBTFNFOwkJLyogIk1lbnUiIGdyb3VwICovCisgICAgaW50CQlpc19zY3JvbGxiYXJfZ3JvdXAgPSBGQUxTRTsJLyogIlNjcm9sbGJhciIgZ3JvdXAgKi8KKyAgICBpbnQJCWlzX3Rvb2x0aXBfZ3JvdXAgPSBGQUxTRTsJLyogIlRvb2x0aXAiIGdyb3VwICovCisgICAgaW50CQlkb19jb2xvcnMgPSBGQUxTRTsJCS8qIG5lZWQgdG8gdXBkYXRlIGNvbG9ycz8gKi8KKyNlbHNlCisjIGRlZmluZSBpc19tZW51X2dyb3VwIDAKKyMgZGVmaW5lIGlzX3Rvb2x0aXBfZ3JvdXAgMAorI2VuZGlmCisKKyAgICAvKgorICAgICAqIElmIG5vIGFyZ3VtZW50LCBsaXN0IGN1cnJlbnQgaGlnaGxpZ2h0aW5nLgorICAgICAqLworICAgIGlmIChlbmRzX2V4Y21kKCpsaW5lKSkKKyAgICB7CisJZm9yIChpID0gMTsgaSA8PSBoaWdobGlnaHRfZ2EuZ2FfbGVuICYmICFnb3RfaW50OyArK2kpCisJICAgIC8qIFRPRE86IG9ubHkgY2FsbCB3aGVuIHRoZSBncm91cCBoYXMgYXR0cmlidXRlcyBzZXQgKi8KKwkgICAgaGlnaGxpZ2h0X2xpc3Rfb25lKChpbnQpaSk7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogSXNvbGF0ZSB0aGUgbmFtZS4KKyAgICAgKi8KKyAgICBuYW1lX2VuZCA9IHNraXB0b3doaXRlKGxpbmUpOworICAgIGxpbmVwID0gc2tpcHdoaXRlKG5hbWVfZW5kKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yICJkZWZhdWx0IiBhcmd1bWVudC4KKyAgICAgKi8KKyAgICBpZiAoU1RSTkNNUChsaW5lLCAiZGVmYXVsdCIsIG5hbWVfZW5kIC0gbGluZSkgPT0gMCkKKyAgICB7CisJZG9kZWZhdWx0ID0gVFJVRTsKKwlsaW5lID0gbGluZXA7CisJbmFtZV9lbmQgPSBza2lwdG93aGl0ZShsaW5lKTsKKwlsaW5lcCA9IHNraXB3aGl0ZShuYW1lX2VuZCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgImNsZWFyIiBvciAibGluayIgYXJndW1lbnQuCisgICAgICovCisgICAgaWYgKFNUUk5DTVAobGluZSwgImNsZWFyIiwgbmFtZV9lbmQgLSBsaW5lKSA9PSAwKQorCWRvY2xlYXIgPSBUUlVFOworICAgIGlmIChTVFJOQ01QKGxpbmUsICJsaW5rIiwgbmFtZV9lbmQgLSBsaW5lKSA9PSAwKQorCWRvbGluayA9IFRSVUU7CisKKyAgICAvKgorICAgICAqICI6aGlnaGxpZ2h0IHtncm91cC1uYW1lfSI6IGxpc3QgaGlnaGxpZ2h0aW5nIGZvciBvbmUgZ3JvdXAuCisgICAgICovCisgICAgaWYgKCFkb2NsZWFyICYmICFkb2xpbmsgJiYgZW5kc19leGNtZCgqbGluZXApKQorICAgIHsKKwlpZCA9IHN5bl9uYW1lbjJpZChsaW5lLCAoaW50KShuYW1lX2VuZCAtIGxpbmUpKTsKKwlpZiAoaWQgPT0gMCkKKwkgICAgRU1TRzIoXygiRTQxMTogaGlnaGxpZ2h0IGdyb3VwIG5vdCBmb3VuZDogJXMiKSwgbGluZSk7CisJZWxzZQorCSAgICBoaWdobGlnaHRfbGlzdF9vbmUoaWQpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEhhbmRsZSAiOmhpZ2hsaWdodCBsaW5rIHtmcm9tfSB7dG99IiBjb21tYW5kLgorICAgICAqLworICAgIGlmIChkb2xpbmspCisgICAgeworCWNoYXJfdQkgICAgKmZyb21fc3RhcnQgPSBsaW5lcDsKKwljaGFyX3UJICAgICpmcm9tX2VuZDsKKwljaGFyX3UJICAgICp0b19zdGFydDsKKwljaGFyX3UJICAgICp0b19lbmQ7CisJaW50CSAgICBmcm9tX2lkOworCWludAkgICAgdG9faWQ7CisKKwlmcm9tX2VuZCA9IHNraXB0b3doaXRlKGZyb21fc3RhcnQpOworCXRvX3N0YXJ0ID0gc2tpcHdoaXRlKGZyb21fZW5kKTsKKwl0b19lbmQJID0gc2tpcHRvd2hpdGUodG9fc3RhcnQpOworCisJaWYgKGVuZHNfZXhjbWQoKmZyb21fc3RhcnQpIHx8IGVuZHNfZXhjbWQoKnRvX3N0YXJ0KSkKKwl7CisJICAgIEVNU0cyKF8oIkU0MTI6IE5vdCBlbm91Z2ggYXJndW1lbnRzOiBcIjpoaWdobGlnaHQgbGluayAlc1wiIiksCisJCQkJCQkJCSAgZnJvbV9zdGFydCk7CisJICAgIHJldHVybjsKKwl9CisKKwlpZiAoIWVuZHNfZXhjbWQoKnNraXB3aGl0ZSh0b19lbmQpKSkKKwl7CisJICAgIEVNU0cyKF8oIkU0MTM6IFRvbyBtYW55IGFyZ3VtZW50czogXCI6aGlnaGxpZ2h0IGxpbmsgJXNcIiIpLCBmcm9tX3N0YXJ0KTsKKwkgICAgcmV0dXJuOworCX0KKworCWZyb21faWQgPSBzeW5fY2hlY2tfZ3JvdXAoZnJvbV9zdGFydCwgKGludCkoZnJvbV9lbmQgLSBmcm9tX3N0YXJ0KSk7CisJaWYgKFNUUk5DTVAodG9fc3RhcnQsICJOT05FIiwgNCkgPT0gMCkKKwkgICAgdG9faWQgPSAwOworCWVsc2UKKwkgICAgdG9faWQgPSBzeW5fY2hlY2tfZ3JvdXAodG9fc3RhcnQsIChpbnQpKHRvX2VuZCAtIHRvX3N0YXJ0KSk7CisKKwlpZiAoZnJvbV9pZCA+IDAgJiYgKCFpbml0IHx8IEhMX1RBQkxFKClbZnJvbV9pZCAtIDFdLnNnX3NldCA9PSAwKSkKKwl7CisJICAgIC8qCisJICAgICAqIERvbid0IGFsbG93IGEgbGluayB3aGVuIHRoZXJlIGFscmVhZHkgaXMgc29tZSBoaWdobGlnaHRpbmcKKwkgICAgICogZm9yIHRoZSBncm91cCwgdW5sZXNzICchJyBpcyB1c2VkCisJICAgICAqLworCSAgICBpZiAodG9faWQgPiAwICYmICFmb3JjZWl0ICYmICFpbml0CisJCQkJICAgJiYgaGxfaGFzX3NldHRpbmdzKGZyb21faWQgLSAxLCBkb2RlZmF1bHQpKQorCSAgICB7CisJCWlmIChzb3VyY2luZ19uYW1lID09IE5VTEwgJiYgIWRvZGVmYXVsdCkKKwkJICAgIEVNU0coXygiRTQxNDogZ3JvdXAgaGFzIHNldHRpbmdzLCBoaWdobGlnaHQgbGluayBpZ25vcmVkIikpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoIWluaXQpCisJCSAgICBITF9UQUJMRSgpW2Zyb21faWQgLSAxXS5zZ19zZXQgfD0gU0dfTElOSzsKKwkJSExfVEFCTEUoKVtmcm9tX2lkIC0gMV0uc2dfbGluayA9IHRvX2lkOworCQlyZWRyYXdfYWxsX2xhdGVyKE5PVF9WQUxJRCk7CisJICAgIH0KKwl9CisKKwkvKiBPbmx5IGNhbGwgaGlnaGxpZ2h0X2NoYW5nZWQoKSBvbmNlLCBhZnRlciBzb3VyY2luZyBhIHN5bnRheCBmaWxlICovCisJbmVlZF9oaWdobGlnaHRfY2hhbmdlZCA9IFRSVUU7CisKKwlyZXR1cm47CisgICAgfQorCisgICAgaWYgKGRvY2xlYXIpCisgICAgeworCS8qCisJICogIjpoaWdobGlnaHQgY2xlYXIgW2dyb3VwXSIgY29tbWFuZC4KKwkgKi8KKwlsaW5lID0gbGluZXA7CisJaWYgKGVuZHNfZXhjbWQoKmxpbmUpKQorCXsKKyNpZmRlZiBGRUFUX0dVSQorCSAgICAvKiBGaXJzdCwgd2UgZG8gbm90IGRlc3Ryb3kgdGhlIG9sZCB2YWx1ZXMsIGJ1dCBhbGxvY2F0ZSB0aGUgbmV3CisJICAgICAqIG9uZXMgYW5kIHVwZGF0ZSB0aGUgZGlzcGxheS4gVEhFTiB3ZSBkZXN0cm95IHRoZSBvbGQgdmFsdWVzLgorCSAgICAgKiBJZiB3ZSBkZXN0cm95IHRoZSBvbGQgdmFsdWVzIGZpcnN0LCB0aGVuIHRoZSBvbGQgdmFsdWVzCisJICAgICAqIChzdWNoIGFzIEd1aUZvbnQncyBvciBHdWlGb250c2V0J3MpIHdpbGwgc3RpbGwgYmUgZGlzcGxheWVkIGJ1dAorCSAgICAgKiBpbnZhbGlkIGJlY2F1c2UgdGhleSB3ZXJlIGZyZWUnZC4KKwkgICAgICovCisJICAgIGlmIChndWkuaW5fdXNlKQorCSAgICB7CisjIGlmZGVmIEZFQVRfQkVWQUxfVElQCisJCWd1aV9pbml0X3Rvb2x0aXBfZm9udCgpOworIyBlbmRpZgorIyBpZiBkZWZpbmVkKEZFQVRfTUVOVSkgJiYgKGRlZmluZWQoRkVBVF9HVUlfQVRIRU5BKSB8fCBkZWZpbmVkKEZFQVRfR1VJX01PVElGKSkKKwkJZ3VpX2luaXRfbWVudV9mb250KCk7CisjIGVuZGlmCisJICAgIH0KKyMgaWYgZGVmaW5lZChGRUFUX0dVSV9NU1dJTikgfHwgZGVmaW5lZChGRUFUX0dVSV9YMTEpCisJICAgIGd1aV9tY2hfZGVmX2NvbG9ycygpOworIyBlbmRpZgorIyBpZmRlZiBGRUFUX0dVSV9YMTEKKyMgIGlmZGVmIEZFQVRfTUVOVQorCisJICAgIC8qIFRoaXMgb25seSBuZWVkcyB0byBiZSBkb25lIHdoZW4gdGhlcmUgaXMgbm8gTWVudSBoaWdobGlnaHQKKwkgICAgICogZ3JvdXAgZGVmaW5lZCBieSBkZWZhdWx0LCB3aGljaCBJUyBjdXJyZW50bHkgdGhlIGNhc2UuCisJICAgICAqLworCSAgICBndWlfbWNoX25ld19tZW51X2NvbG9ycygpOworIyAgZW5kaWYKKwkgICAgaWYgKGd1aS5pbl91c2UpCisJICAgIHsKKwkJZ3VpX25ld19zY3JvbGxiYXJfY29sb3JzKCk7CisjICBpZmRlZiBGRUFUX0JFVkFMCisJCWd1aV9tY2hfbmV3X3Rvb2x0aXBfY29sb3JzKCk7CisjICBlbmRpZgorIyAgaWZkZWYgRkVBVF9NRU5VCisJCWd1aV9tY2hfbmV3X21lbnVfZm9udCgpOworIyAgZW5kaWYKKwkgICAgfQorIyBlbmRpZgorCisJICAgIC8qIE9rLCB3ZSdyZSBkb25lIGFsbG9jYXRpbmcgdGhlIG5ldyBkZWZhdWx0IGdyYXBoaWNzIGl0ZW1zLgorCSAgICAgKiBUaGUgc2NyZWVuIHNob3VsZCBhbHJlYWR5IGJlIHJlZnJlc2hlZCBhdCB0aGlzIHBvaW50LgorCSAgICAgKiBJdCBpcyBub3cgT2sgdG8gY2xlYXIgb3V0IHRoZSBvbGQgZGF0YS4KKwkgICAgICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0VWQUwKKwkgICAgZG9fdW5sZXQoKGNoYXJfdSAqKSJjb2xvcnNfbmFtZSIpOworI2VuZGlmCisJICAgIHJlc3RvcmVfY3Rlcm1fY29sb3JzKCk7CisKKwkgICAgLyoKKwkgICAgICogQ2xlYXIgYWxsIGRlZmF1bHQgaGlnaGxpZ2h0IGdyb3VwcyBhbmQgbG9hZCB0aGUgZGVmYXVsdHMuCisJICAgICAqLworCSAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGhpZ2hsaWdodF9nYS5nYV9sZW47ICsraWR4KQorCQloaWdobGlnaHRfY2xlYXIoaWR4KTsKKwkgICAgaW5pdF9oaWdobGlnaHQoVFJVRSwgVFJVRSk7CisjaWZkZWYgRkVBVF9HVUkKKwkgICAgaWYgKGd1aS5pbl91c2UpCisJCWhpZ2hsaWdodF9ndWlfc3RhcnRlZCgpOworI2VuZGlmCisJICAgIGhpZ2hsaWdodF9jaGFuZ2VkKCk7CisJICAgIHJlZHJhd19sYXRlcl9jbGVhcigpOworCSAgICByZXR1cm47CisJfQorCW5hbWVfZW5kID0gc2tpcHRvd2hpdGUobGluZSk7CisJbGluZXAgPSBza2lwd2hpdGUobmFtZV9lbmQpOworICAgIH0KKworICAgIC8qCisgICAgICogRmluZCB0aGUgZ3JvdXAgbmFtZSBpbiB0aGUgdGFibGUuICBJZiBpdCBkb2VzIG5vdCBleGlzdCB5ZXQsIGFkZCBpdC4KKyAgICAgKi8KKyAgICBpZCA9IHN5bl9jaGVja19ncm91cChsaW5lLCAoaW50KShuYW1lX2VuZCAtIGxpbmUpKTsKKyAgICBpZiAoaWQgPT0gMCkJCQkvKiBmYWlsZWQgKG91dCBvZiBtZW1vcnkpICovCisJcmV0dXJuOworICAgIGlkeCA9IGlkIC0gMTsJCQkvKiBpbmRleCBpcyBJRCBtaW51cyBvbmUgKi8KKworICAgIC8qIFJldHVybiBpZiAiZGVmYXVsdCIgd2FzIHVzZWQgYW5kIHRoZSBncm91cCBhbHJlYWR5IGhhcyBzZXR0aW5ncy4gKi8KKyAgICBpZiAoZG9kZWZhdWx0ICYmIGhsX2hhc19zZXR0aW5ncyhpZHgsIFRSVUUpKQorCXJldHVybjsKKworICAgIGlmIChTVFJDTVAoSExfVEFCTEUoKVtpZHhdLnNnX25hbWVfdSwgIk5PUk1BTCIpID09IDApCisJaXNfbm9ybWFsX2dyb3VwID0gVFJVRTsKKyNpZmRlZiBGRUFUX0dVSV9YMTEKKyAgICBlbHNlIGlmIChTVFJDTVAoSExfVEFCTEUoKVtpZHhdLnNnX25hbWVfdSwgIk1FTlUiKSA9PSAwKQorCWlzX21lbnVfZ3JvdXAgPSBUUlVFOworICAgIGVsc2UgaWYgKFNUUkNNUChITF9UQUJMRSgpW2lkeF0uc2dfbmFtZV91LCAiU0NST0xMQkFSIikgPT0gMCkKKwlpc19zY3JvbGxiYXJfZ3JvdXAgPSBUUlVFOworICAgIGVsc2UgaWYgKFNUUkNNUChITF9UQUJMRSgpW2lkeF0uc2dfbmFtZV91LCAiVE9PTFRJUCIpID09IDApCisJaXNfdG9vbHRpcF9ncm91cCA9IFRSVUU7CisjZW5kaWYKKworICAgIC8qIENsZWFyIHRoZSBoaWdobGlnaHRpbmcgZm9yICI6aGkgY2xlYXIge2dyb3VwfSIgYW5kICI6aGkgY2xlYXIiLiAqLworICAgIGlmIChkb2NsZWFyIHx8IChmb3JjZWl0ICYmIGluaXQpKQorICAgIHsKKwloaWdobGlnaHRfY2xlYXIoaWR4KTsKKwlpZiAoIWRvY2xlYXIpCisJICAgIEhMX1RBQkxFKClbaWR4XS5zZ19zZXQgPSAwOworICAgIH0KKworICAgIGlmICghZG9jbGVhcikKKyAgICAgIHdoaWxlICghZW5kc19leGNtZCgqbGluZXApKQorICAgICAgeworCWtleV9zdGFydCA9IGxpbmVwOworCWlmICgqbGluZXAgPT0gJz0nKQorCXsKKwkgICAgRU1TRzIoXygiRTQxNTogdW5leHBlY3RlZCBlcXVhbCBzaWduOiAlcyIpLCBrZXlfc3RhcnQpOworCSAgICBlcnJvciA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKworCS8qCisJICogSXNvbGF0ZSB0aGUga2V5ICgidGVybSIsICJjdGVybWZnIiwgImN0ZXJtYmciLCAiZm9udCIsICJndWlmZyIgb3IKKwkgKiAiZ3VpYmciKS4KKwkgKi8KKwl3aGlsZSAoKmxpbmVwICYmICF2aW1faXN3aGl0ZSgqbGluZXApICYmICpsaW5lcCAhPSAnPScpCisJICAgICsrbGluZXA7CisJdmltX2ZyZWUoa2V5KTsKKwlrZXkgPSB2aW1fc3RybnNhdmVfdXAoa2V5X3N0YXJ0LCAoaW50KShsaW5lcCAtIGtleV9zdGFydCkpOworCWlmIChrZXkgPT0gTlVMTCkKKwl7CisJICAgIGVycm9yID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorCWxpbmVwID0gc2tpcHdoaXRlKGxpbmVwKTsKKworCWlmIChTVFJDTVAoa2V5LCAiTk9ORSIpID09IDApCisJeworCSAgICBpZiAoIWluaXQgfHwgSExfVEFCTEUoKVtpZHhdLnNnX3NldCA9PSAwKQorCSAgICB7CisJCWlmICghaW5pdCkKKwkJICAgIEhMX1RBQkxFKClbaWR4XS5zZ19zZXQgfD0gU0dfVEVSTStTR19DVEVSTStTR19HVUk7CisJCWhpZ2hsaWdodF9jbGVhcihpZHgpOworCSAgICB9CisJICAgIGNvbnRpbnVlOworCX0KKworCS8qCisJICogQ2hlY2sgZm9yIHRoZSBlcXVhbCBzaWduLgorCSAqLworCWlmICgqbGluZXAgIT0gJz0nKQorCXsKKwkgICAgRU1TRzIoXygiRTQxNjogbWlzc2luZyBlcXVhbCBzaWduOiAlcyIpLCBrZXlfc3RhcnQpOworCSAgICBlcnJvciA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKwkrK2xpbmVwOworCisJLyoKKwkgKiBJc29sYXRlIHRoZSBhcmd1bWVudC4KKwkgKi8KKwlsaW5lcCA9IHNraXB3aGl0ZShsaW5lcCk7CisJaWYgKCpsaW5lcCA9PSAnXCcnKQkJLyogZ3VpZmc9J2NvbG9yIG5hbWUnICovCisJeworCSAgICBhcmdfc3RhcnQgPSArK2xpbmVwOworCSAgICBsaW5lcCA9IHZpbV9zdHJjaHIobGluZXAsICdcJycpOworCSAgICBpZiAobGluZXAgPT0gTlVMTCkKKwkgICAgeworCQlFTVNHMihfKGVfaW52YXJnMiksIGtleV9zdGFydCk7CisJCWVycm9yID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgYXJnX3N0YXJ0ID0gbGluZXA7CisJICAgIGxpbmVwID0gc2tpcHRvd2hpdGUobGluZXApOworCX0KKwlpZiAobGluZXAgPT0gYXJnX3N0YXJ0KQorCXsKKwkgICAgRU1TRzIoXygiRTQxNzogbWlzc2luZyBhcmd1bWVudDogJXMiKSwga2V5X3N0YXJ0KTsKKwkgICAgZXJyb3IgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisJdmltX2ZyZWUoYXJnKTsKKwlhcmcgPSB2aW1fc3RybnNhdmUoYXJnX3N0YXJ0LCAoaW50KShsaW5lcCAtIGFyZ19zdGFydCkpOworCWlmIChhcmcgPT0gTlVMTCkKKwl7CisJICAgIGVycm9yID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorCWlmICgqbGluZXAgPT0gJ1wnJykKKwkgICAgKytsaW5lcDsKKworCS8qCisJICogU3RvcmUgdGhlIGFyZ3VtZW50LgorCSAqLworCWlmICggIFNUUkNNUChrZXksICJURVJNIikgPT0gMAorCQl8fCBTVFJDTVAoa2V5LCAiQ1RFUk0iKSA9PSAwCisJCXx8IFNUUkNNUChrZXksICJHVUkiKSA9PSAwKQorCXsKKwkgICAgYXR0ciA9IDA7CisJICAgIG9mZiA9IDA7CisJICAgIHdoaWxlIChhcmdbb2ZmXSAhPSBOVUwpCisJICAgIHsKKwkJZm9yIChpID0gc2l6ZW9mKGhsX2F0dHJfdGFibGUpIC8gc2l6ZW9mKGludCk7IC0taSA+PSAwOyApCisJCXsKKwkJICAgIGxlbiA9IChpbnQpU1RSTEVOKGhsX25hbWVfdGFibGVbaV0pOworCQkgICAgaWYgKFNUUk5JQ01QKGFyZyArIG9mZiwgaGxfbmFtZV90YWJsZVtpXSwgbGVuKSA9PSAwKQorCQkgICAgeworCQkJYXR0ciB8PSBobF9hdHRyX3RhYmxlW2ldOworCQkJb2ZmICs9IGxlbjsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWlmIChpIDwgMCkKKwkJeworCQkgICAgRU1TRzIoXygiRTQxODogSWxsZWdhbCB2YWx1ZTogJXMiKSwgYXJnKTsKKwkJICAgIGVycm9yID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisJCWlmIChhcmdbb2ZmXSA9PSAnLCcpCQkvKiBhbm90aGVyIG9uZSBmb2xsb3dzICovCisJCSAgICArK29mZjsKKwkgICAgfQorCSAgICBpZiAoZXJyb3IpCisJCWJyZWFrOworCSAgICBpZiAoKmtleSA9PSAnVCcpCisJICAgIHsKKwkJaWYgKCFpbml0IHx8ICEoSExfVEFCTEUoKVtpZHhdLnNnX3NldCAmIFNHX1RFUk0pKQorCQl7CisJCSAgICBpZiAoIWluaXQpCisJCQlITF9UQUJMRSgpW2lkeF0uc2dfc2V0IHw9IFNHX1RFUk07CisJCSAgICBITF9UQUJMRSgpW2lkeF0uc2dfdGVybSA9IGF0dHI7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIGlmICgqa2V5ID09ICdDJykKKwkgICAgeworCQlpZiAoIWluaXQgfHwgIShITF9UQUJMRSgpW2lkeF0uc2dfc2V0ICYgU0dfQ1RFUk0pKQorCQl7CisJCSAgICBpZiAoIWluaXQpCisJCQlITF9UQUJMRSgpW2lkeF0uc2dfc2V0IHw9IFNHX0NURVJNOworCQkgICAgSExfVEFCTEUoKVtpZHhdLnNnX2N0ZXJtID0gYXR0cjsKKwkJICAgIEhMX1RBQkxFKClbaWR4XS5zZ19jdGVybV9ib2xkID0gRkFMU0U7CisJCX0KKwkgICAgfQorI2lmZGVmIEZFQVRfR1VJCisJICAgIGVsc2UKKwkgICAgeworCQlpZiAoIWluaXQgfHwgIShITF9UQUJMRSgpW2lkeF0uc2dfc2V0ICYgU0dfR1VJKSkKKwkJeworCQkgICAgaWYgKCFpbml0KQorCQkJSExfVEFCTEUoKVtpZHhdLnNnX3NldCB8PSBTR19HVUk7CisJCSAgICBITF9UQUJMRSgpW2lkeF0uc2dfZ3VpID0gYXR0cjsKKwkJfQorCSAgICB9CisjZW5kaWYKKwl9CisJZWxzZSBpZiAoU1RSQ01QKGtleSwgIkZPTlQiKSA9PSAwKQorCXsKKwkgICAgLyogaW4gbm9uLUdVSSBmb250cyBhcmUgc2ltcGx5IGlnbm9yZWQgKi8KKyNpZmRlZiBGRUFUX0dVSQorCSAgICBpZiAoIWd1aS5zaGVsbF9jcmVhdGVkKQorCSAgICB7CisJCS8qIEdVSSBub3Qgc3RhcnRlZCB5ZXQsIGFsd2F5cyBhY2NlcHQgdGhlIG5hbWUuICovCisJCXZpbV9mcmVlKEhMX1RBQkxFKClbaWR4XS5zZ19mb250X25hbWUpOworCQlITF9UQUJMRSgpW2lkeF0uc2dfZm9udF9uYW1lID0gdmltX3N0cnNhdmUoYXJnKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJR3VpRm9udCB0ZW1wX3NnX2ZvbnQgPSBITF9UQUJMRSgpW2lkeF0uc2dfZm9udDsKKyMgaWZkZWYgRkVBVF9YRk9OVFNFVAorCQlHdWlGb250c2V0IHRlbXBfc2dfZm9udHNldCA9IEhMX1RBQkxFKClbaWR4XS5zZ19mb250c2V0OworIyBlbmRpZgorCQkvKiBGaXJzdCwgc2F2ZSB0aGUgY3VycmVudCBmb250L2ZvbnRzZXQuCisJCSAqIFRoZW4gdHJ5IHRvIGFsbG9jYXRlIHRoZSBmb250L2ZvbnRzZXQuCisJCSAqIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCBITF9UQUJMRSgpW2lkeF0uc2dfZm9udCBPUgorCQkgKiBzZ19mb250c2V0IHdpbGwgYmUgc2V0IHRvIE5PRk9OVCBvciBOT0ZPTlRTRVQgcmVzcGVjdGl2ZWx5LgorCQkgKi8KKworCQlITF9UQUJMRSgpW2lkeF0uc2dfZm9udCA9IE5PRk9OVDsKKyMgaWZkZWYgRkVBVF9YRk9OVFNFVAorCQlITF9UQUJMRSgpW2lkeF0uc2dfZm9udHNldCA9IE5PRk9OVFNFVDsKKyMgZW5kaWYKKwkJaGxfZG9fZm9udChpZHgsIGFyZywgaXNfbm9ybWFsX2dyb3VwLCBpc19tZW51X2dyb3VwLAorCQkJCQkJCSAgICBpc190b29sdGlwX2dyb3VwKTsKKworIyBpZmRlZiBGRUFUX1hGT05UU0VUCisJCWlmIChITF9UQUJMRSgpW2lkeF0uc2dfZm9udHNldCAhPSBOT0ZPTlRTRVQpCisJCXsKKwkJICAgIC8qIE5ldyBmb250c2V0IHdhcyBhY2NlcHRlZC4gRnJlZSB0aGUgb2xkIG9uZSwgaWYgdGhlcmUgd2FzCisJCSAgICAgKiBvbmUuCisJCSAgICAgKi8KKwkJICAgIGd1aV9tY2hfZnJlZV9mb250c2V0KHRlbXBfc2dfZm9udHNldCk7CisJCSAgICB2aW1fZnJlZShITF9UQUJMRSgpW2lkeF0uc2dfZm9udF9uYW1lKTsKKwkJICAgIEhMX1RBQkxFKClbaWR4XS5zZ19mb250X25hbWUgPSB2aW1fc3Ryc2F2ZShhcmcpOworCQl9CisJCWVsc2UKKwkJICAgIEhMX1RBQkxFKClbaWR4XS5zZ19mb250c2V0ID0gdGVtcF9zZ19mb250c2V0OworIyBlbmRpZgorCQlpZiAoSExfVEFCTEUoKVtpZHhdLnNnX2ZvbnQgIT0gTk9GT05UKQorCQl7CisJCSAgICAvKiBOZXcgZm9udCB3YXMgYWNjZXB0ZWQuIEZyZWUgdGhlIG9sZCBvbmUsIGlmIHRoZXJlIHdhcworCQkgICAgICogb25lLgorCQkgICAgICovCisJCSAgICBndWlfbWNoX2ZyZWVfZm9udCh0ZW1wX3NnX2ZvbnQpOworCQkgICAgdmltX2ZyZWUoSExfVEFCTEUoKVtpZHhdLnNnX2ZvbnRfbmFtZSk7CisJCSAgICBITF9UQUJMRSgpW2lkeF0uc2dfZm9udF9uYW1lID0gdmltX3N0cnNhdmUoYXJnKTsKKwkJfQorCQllbHNlCisJCSAgICBITF9UQUJMRSgpW2lkeF0uc2dfZm9udCA9IHRlbXBfc2dfZm9udDsKKwkgICAgfQorI2VuZGlmCisJfQorCWVsc2UgaWYgKFNUUkNNUChrZXksICJDVEVSTUZHIikgPT0gMCB8fCBTVFJDTVAoa2V5LCAiQ1RFUk1CRyIpID09IDApCisJeworCSAgaWYgKCFpbml0IHx8ICEoSExfVEFCTEUoKVtpZHhdLnNnX3NldCAmIFNHX0NURVJNKSkKKwkgIHsKKwkgICAgaWYgKCFpbml0KQorCQlITF9UQUJMRSgpW2lkeF0uc2dfc2V0IHw9IFNHX0NURVJNOworCisJICAgIC8qIFdoZW4gc2V0dGluZyB0aGUgZm9yZWdyb3VuZCBjb2xvciwgYW5kIHByZXZpb3VzbHkgdGhlICJib2xkIgorCSAgICAgKiBmbGFnIHdhcyBzZXQgZm9yIGEgbGlnaHQgY29sb3IsIHJlc2V0IGl0IG5vdyAqLworCSAgICBpZiAoa2V5WzVdID09ICdGJyAmJiBITF9UQUJMRSgpW2lkeF0uc2dfY3Rlcm1fYm9sZCkKKwkgICAgeworCQlITF9UQUJMRSgpW2lkeF0uc2dfY3Rlcm0gJj0gfkhMX0JPTEQ7CisJCUhMX1RBQkxFKClbaWR4XS5zZ19jdGVybV9ib2xkID0gRkFMU0U7CisJICAgIH0KKworCSAgICBpZiAoVklNX0lTRElHSVQoKmFyZykpCisJCWNvbG9yID0gYXRvaSgoY2hhciAqKWFyZyk7CisJICAgIGVsc2UgaWYgKFNUUklDTVAoYXJnLCAiZmciKSA9PSAwKQorCSAgICB7CisJCWlmIChjdGVybV9ub3JtYWxfZmdfY29sb3IpCisJCSAgICBjb2xvciA9IGN0ZXJtX25vcm1hbF9mZ19jb2xvciAtIDE7CisJCWVsc2UKKwkJeworCQkgICAgRU1TRyhfKCJFNDE5OiBGRyBjb2xvciB1bmtub3duIikpOworCQkgICAgZXJyb3IgPSBUUlVFOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIGlmIChTVFJJQ01QKGFyZywgImJnIikgPT0gMCkKKwkgICAgeworCQlpZiAoY3Rlcm1fbm9ybWFsX2JnX2NvbG9yID4gMCkKKwkJICAgIGNvbG9yID0gY3Rlcm1fbm9ybWFsX2JnX2NvbG9yIC0gMTsKKwkJZWxzZQorCQl7CisJCSAgICBFTVNHKF8oIkU0MjA6IEJHIGNvbG9yIHVua25vd24iKSk7CisJCSAgICBlcnJvciA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlzdGF0aWMgY2hhciAqKGNvbG9yX25hbWVzWzI4XSkgPSB7CisJCQkgICAgIkJsYWNrIiwgIkRhcmtCbHVlIiwgIkRhcmtHcmVlbiIsICJEYXJrQ3lhbiIsCisJCQkgICAgIkRhcmtSZWQiLCAiRGFya01hZ2VudGEiLCAiQnJvd24iLCAiRGFya1llbGxvdyIsCisJCQkgICAgIkdyYXkiLCAiR3JleSIsCisJCQkgICAgIkxpZ2h0R3JheSIsICJMaWdodEdyZXkiLCAiRGFya0dyYXkiLCAiRGFya0dyZXkiLAorCQkJICAgICJCbHVlIiwgIkxpZ2h0Qmx1ZSIsICJHcmVlbiIsICJMaWdodEdyZWVuIiwKKwkJCSAgICAiQ3lhbiIsICJMaWdodEN5YW4iLCAiUmVkIiwgIkxpZ2h0UmVkIiwgIk1hZ2VudGEiLAorCQkJICAgICJMaWdodE1hZ2VudGEiLCAiWWVsbG93IiwgIkxpZ2h0WWVsbG93IiwgIldoaXRlIiwgIk5PTkUifTsKKwkJc3RhdGljIGludCBjb2xvcl9udW1iZXJzXzE2WzI4XSA9IHswLCAxLCAyLCAzLAorCQkJCQkJIDQsIDUsIDYsIDYsCisJCQkJCQkgNywgNywKKwkJCQkJCSA3LCA3LCA4LCA4LAorCQkJCQkJIDksIDksIDEwLCAxMCwKKwkJCQkJCSAxMSwgMTEsIDEyLCAxMiwgMTMsCisJCQkJCQkgMTMsIDE0LCAxNCwgMTUsIC0xfTsKKwkJLyogZm9yIHh0ZXJtIHdpdGggODggY29sb3JzLi4uICovCisJCXN0YXRpYyBpbnQgY29sb3JfbnVtYmVyc184OFsyOF0gPSB7MCwgNCwgMiwgNiwKKwkJCQkJCSAxLCA1LCAzMiwgNzIsCisJCQkJCQkgODQsIDg0LAorCQkJCQkJIDcsIDcsIDgyLCA4MiwKKwkJCQkJCSAxMiwgNDMsIDEwLCA2MSwKKwkJCQkJCSAxNCwgNjMsIDksIDc0LCAxMywKKwkJCQkJCSA3NSwgMTEsIDc4LCAxNSwgLTF9OworCQkvKiBmb3IgeHRlcm0gd2l0aCAyNTYgY29sb3JzLi4uICovCisJCXN0YXRpYyBpbnQgY29sb3JfbnVtYmVyc18yNTZbMjhdID0gezAsIDQsIDIsIDYsCisJCQkJCQkgMSwgNSwgMTMwLCAxMzAsCisJCQkJCQkgMjQ4LCAyNDgsCisJCQkJCQkgNywgNywgMjQyLCAyNDIsCisJCQkJCQkgMTIsIDgxLCAxMCwgMTIxLAorCQkJCQkJIDE0LCAxNTksIDksIDIyNCwgMTMsCisJCQkJCQkgMjI1LCAxMSwgMjI5LCAxNSwgLTF9OworCQkvKiBmb3IgdGVybWluYWxzIHdpdGggbGVzcyB0aGFuIDE2IGNvbG9ycy4uLiAqLworCQlzdGF0aWMgaW50IGNvbG9yX251bWJlcnNfOFsyOF0gPSB7MCwgNCwgMiwgNiwKKwkJCQkJCSAxLCA1LCAzLCAzLAorCQkJCQkJIDcsIDcsCisJCQkJCQkgNywgNywgMCs4LCAwKzgsCisJCQkJCQkgNCs4LCA0KzgsIDIrOCwgMis4LAorCQkJCQkJIDYrOCwgNis4LCAxKzgsIDErOCwgNSs4LAorCQkJCQkJIDUrOCwgMys4LCAzKzgsIDcrOCwgLTF9OworI2lmIGRlZmluZWQoX19RTlhOVE9fXykKKwkJc3RhdGljIGludCAqY29sb3JfbnVtYmVyc184X3FhbnNpID0gY29sb3JfbnVtYmVyc184OworCQkvKiBPbiBxbngsIHRoZSA4ICYgMTYgY29sb3IgYXJyYXlzIGFyZSB0aGUgc2FtZSAqLworCQlpZiAoU1RSTkNNUChUX05BTUUsICJxYW5zaSIsIDUpID09IDApCisJCSAgICBjb2xvcl9udW1iZXJzXzhfcWFuc2kgPSBjb2xvcl9udW1iZXJzXzE2OworI2VuZGlmCisKKwkJLyogcmVkdWNlIGNhbGxzIHRvIFNUUklDTVAgYSBiaXQsIGl0IGNhbiBiZSBzbG93ICovCisJCW9mZiA9IFRPVVBQRVJfQVNDKCphcmcpOworCQlmb3IgKGkgPSAoc2l6ZW9mKGNvbG9yX25hbWVzKSAvIHNpemVvZihjaGFyICopKTsgLS1pID49IDA7ICkKKwkJICAgIGlmIChvZmYgPT0gY29sb3JfbmFtZXNbaV1bMF0KKwkJCQkgJiYgU1RSSUNNUChhcmcgKyAxLCBjb2xvcl9uYW1lc1tpXSArIDEpID09IDApCisJCQlicmVhazsKKwkJaWYgKGkgPCAwKQorCQl7CisJCSAgICBFTVNHMihfKCJFNDIxOiBDb2xvciBuYW1lIG9yIG51bWJlciBub3QgcmVjb2duaXplZDogJXMiKSwga2V5X3N0YXJ0KTsKKwkJICAgIGVycm9yID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisKKwkJLyogVXNlIHRoZSBfMTYgdGFibGUgdG8gY2hlY2sgaWYgaXRzIGEgdmFsaWQgY29sb3IgbmFtZS4gKi8KKwkJY29sb3IgPSBjb2xvcl9udW1iZXJzXzE2W2ldOworCQlpZiAoY29sb3IgPj0gMCkKKwkJeworCQkgICAgaWYgKHRfY29sb3JzID09IDgpCisJCSAgICB7CisJCQkvKiB0X0NvIGlzIDg6IHVzZSB0aGUgOCBjb2xvcnMgdGFibGUgKi8KKyNpZiBkZWZpbmVkKF9fUU5YTlRPX18pCisJCQljb2xvciA9IGNvbG9yX251bWJlcnNfOF9xYW5zaVtpXTsKKyNlbHNlCisJCQljb2xvciA9IGNvbG9yX251bWJlcnNfOFtpXTsKKyNlbmRpZgorCQkJaWYgKGtleVs1XSA9PSAnRicpCisJCQl7CisJCQkgICAgLyogc2V0L3Jlc2V0IGJvbGQgYXR0cmlidXRlIHRvIGdldCBsaWdodCBmb3JlZ3JvdW5kCisJCQkgICAgICogY29sb3JzIChvbiBzb21lIHRlcm1pbmFscywgZS5nLiAibGludXgiKSAqLworCQkJICAgIGlmIChjb2xvciAmIDgpCisJCQkgICAgeworCQkJCUhMX1RBQkxFKClbaWR4XS5zZ19jdGVybSB8PSBITF9CT0xEOworCQkJCUhMX1RBQkxFKClbaWR4XS5zZ19jdGVybV9ib2xkID0gVFJVRTsKKwkJCSAgICB9CisJCQkgICAgZWxzZQorCQkJCUhMX1RBQkxFKClbaWR4XS5zZ19jdGVybSAmPSB+SExfQk9MRDsKKwkJCX0KKwkJCWNvbG9yICY9IDc7CS8qIHRydW5jYXRlIHRvIDggY29sb3JzICovCisJCSAgICB9CisJCSAgICBlbHNlIGlmICh0X2NvbG9ycyA9PSAxNiB8fCB0X2NvbG9ycyA9PSA4OAorCQkJCQkJCSAgIHx8IHRfY29sb3JzID09IDI1NikKKwkJICAgIHsKKwkJCS8qCisJCQkgKiBHdWVzczogaWYgdGhlIHRlcm1jYXAgZW50cnkgZW5kcyBpbiAnbScsIGl0IGlzCisJCQkgKiBwcm9iYWJseSBhbiB4dGVybS1saWtlIHRlcm1pbmFsLiAgVXNlIHRoZSBjaGFuZ2VkCisJCQkgKiBvcmRlciBmb3IgY29sb3JzLgorCQkJICovCisJCQlpZiAoKlRfQ0FGICE9IE5VTCkKKwkJCSAgICBwID0gVF9DQUY7CisJCQllbHNlCisJCQkgICAgcCA9IFRfQ1NGOworCQkJaWYgKCpwICE9IE5VTCAmJiAqKHAgKyBTVFJMRU4ocCkgLSAxKSA9PSAnbScpCisJCQkgICAgc3dpdGNoICh0X2NvbG9ycykKKwkJCSAgICB7CisJCQkJY2FzZSAxNjoKKwkJCQkgICAgY29sb3IgPSBjb2xvcl9udW1iZXJzXzhbaV07CisJCQkJICAgIGJyZWFrOworCQkJCWNhc2UgODg6CisJCQkJICAgIGNvbG9yID0gY29sb3JfbnVtYmVyc184OFtpXTsKKwkJCQkgICAgYnJlYWs7CisJCQkJY2FzZSAyNTY6CisJCQkJICAgIGNvbG9yID0gY29sb3JfbnVtYmVyc18yNTZbaV07CisJCQkJICAgIGJyZWFrOworCQkJICAgIH0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIC8qIEFkZCBvbmUgdG8gdGhlIGFyZ3VtZW50LCB0byBhdm9pZCB6ZXJvICovCisJICAgIGlmIChrZXlbNV0gPT0gJ0YnKQorCSAgICB7CisJCUhMX1RBQkxFKClbaWR4XS5zZ19jdGVybV9mZyA9IGNvbG9yICsgMTsKKwkJaWYgKGlzX25vcm1hbF9ncm91cCkKKwkJeworCQkgICAgY3Rlcm1fbm9ybWFsX2ZnX2NvbG9yID0gY29sb3IgKyAxOworCQkgICAgY3Rlcm1fbm9ybWFsX2ZnX2JvbGQgPSAoSExfVEFCTEUoKVtpZHhdLnNnX2N0ZXJtICYgSExfQk9MRCk7CisjaWZkZWYgRkVBVF9HVUkKKwkJICAgIC8qIERvbid0IGRvIHRoaXMgaWYgdGhlIEdVSSBpcyB1c2VkLiAqLworCQkgICAgaWYgKCFndWkuaW5fdXNlICYmICFndWkuc3RhcnRpbmcpCisjZW5kaWYKKwkJICAgIHsKKwkJCW11c3RfcmVkcmF3ID0gQ0xFQVI7CisJCQlpZiAodGVybWNhcF9hY3RpdmUpCisJCQkgICAgdGVybV9mZ19jb2xvcihjb2xvcik7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJSExfVEFCTEUoKVtpZHhdLnNnX2N0ZXJtX2JnID0gY29sb3IgKyAxOworCQlpZiAoaXNfbm9ybWFsX2dyb3VwKQorCQl7CisJCSAgICBjdGVybV9ub3JtYWxfYmdfY29sb3IgPSBjb2xvciArIDE7CisjaWZkZWYgRkVBVF9HVUkKKwkJICAgIC8qIERvbid0IG1lc3Mgd2l0aCAnYmFja2dyb3VuZCcgaWYgdGhlIEdVSSBpcyB1c2VkLiAqLworCQkgICAgaWYgKCFndWkuaW5fdXNlICYmICFndWkuc3RhcnRpbmcpCisjZW5kaWYKKwkJICAgIHsKKwkJCW11c3RfcmVkcmF3ID0gQ0xFQVI7CisJCQlpZiAodGVybWNhcF9hY3RpdmUpCisJCQkgICAgdGVybV9iZ19jb2xvcihjb2xvcik7CisJCQlpZiAodF9jb2xvcnMgPCAxNikKKwkJCSAgICBpID0gKGNvbG9yID09IDAgfHwgY29sb3IgPT0gNCk7CisJCQllbHNlCisJCQkgICAgaSA9IChjb2xvciA8IDcgfHwgY29sb3IgPT0gOCk7CisJCQkvKiBTZXQgdGhlICdiYWNrZ3JvdW5kJyBvcHRpb24gaWYgdGhlIHZhbHVlIGlzIHdyb25nLiAqLworCQkJaWYgKGkgIT0gKCpwX2JnID09ICdkJykpCisJCQkgICAgc2V0X29wdGlvbl92YWx1ZSgoY2hhcl91ICopImJnIiwgMEwsCisJCQkJIGkgPyAoY2hhcl91ICopImRhcmsiIDogKGNoYXJfdSAqKSJsaWdodCIsIDApOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgIH0KKwl9CisJZWxzZSBpZiAoU1RSQ01QKGtleSwgIkdVSUZHIikgPT0gMCkKKwl7CisjaWZkZWYgRkVBVF9HVUkJICAgIC8qIGluIG5vbi1HVUkgZ3VpZmcgY29sb3JzIGFyZSBzaW1wbHkgaWdub3JlZCAqLworCSAgaWYgKCFpbml0IHx8ICEoSExfVEFCTEUoKVtpZHhdLnNnX3NldCAmIFNHX0dVSSkpCisJICB7CisJICAgIGlmICghaW5pdCkKKwkJSExfVEFCTEUoKVtpZHhdLnNnX3NldCB8PSBTR19HVUk7CisKKwkgICAgaSA9IGNvbG9yX25hbWUyaGFuZGxlKGFyZyk7CisJICAgIGlmIChpICE9IElOVkFMQ09MT1IgfHwgU1RSQ01QKGFyZywgIk5PTkUiKSA9PSAwIHx8ICFndWkuaW5fdXNlKQorCSAgICB7CisJCUhMX1RBQkxFKClbaWR4XS5zZ19ndWlfZmcgPSBpOworCQl2aW1fZnJlZShITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2ZnX25hbWUpOworCQlpZiAoU1RSQ01QKGFyZywgIk5PTkUiKSkKKwkJICAgIEhMX1RBQkxFKClbaWR4XS5zZ19ndWlfZmdfbmFtZSA9IHZpbV9zdHJzYXZlKGFyZyk7CisJCWVsc2UKKwkJICAgIEhMX1RBQkxFKClbaWR4XS5zZ19ndWlfZmdfbmFtZSA9IE5VTEw7CisjIGlmZGVmIEZFQVRfR1VJX1gxMQorCQlpZiAoaXNfbWVudV9ncm91cCkKKwkJICAgIGd1aS5tZW51X2ZnX3BpeGVsID0gaTsKKwkJaWYgKGlzX3Njcm9sbGJhcl9ncm91cCkKKwkJICAgIGd1aS5zY3JvbGxfZmdfcGl4ZWwgPSBpOworIyAgaWZkZWYgRkVBVF9CRVZBTAorCQlpZiAoaXNfdG9vbHRpcF9ncm91cCkKKwkJICAgIGd1aS50b29sdGlwX2ZnX3BpeGVsID0gaTsKKyMgIGVuZGlmCisJCWRvX2NvbG9ycyA9IFRSVUU7CisjIGVuZGlmCisJICAgIH0KKwkgIH0KKyNlbmRpZgorCX0KKwllbHNlIGlmIChTVFJDTVAoa2V5LCAiR1VJQkciKSA9PSAwKQorCXsKKyNpZmRlZiBGRUFUX0dVSQkgICAgLyogaW4gbm9uLUdVSSBndWliZyBjb2xvcnMgYXJlIHNpbXBseSBpZ25vcmVkICovCisJICBpZiAoIWluaXQgfHwgIShITF9UQUJMRSgpW2lkeF0uc2dfc2V0ICYgU0dfR1VJKSkKKwkgIHsKKwkgICAgaWYgKCFpbml0KQorCQlITF9UQUJMRSgpW2lkeF0uc2dfc2V0IHw9IFNHX0dVSTsKKworCSAgICBpID0gY29sb3JfbmFtZTJoYW5kbGUoYXJnKTsKKwkgICAgaWYgKGkgIT0gSU5WQUxDT0xPUiB8fCBTVFJDTVAoYXJnLCAiTk9ORSIpID09IDAgfHwgIWd1aS5pbl91c2UpCisJICAgIHsKKwkJSExfVEFCTEUoKVtpZHhdLnNnX2d1aV9iZyA9IGk7CisJCXZpbV9mcmVlKEhMX1RBQkxFKClbaWR4XS5zZ19ndWlfYmdfbmFtZSk7CisJCWlmIChTVFJDTVAoYXJnLCAiTk9ORSIpKQorCQkgICAgSExfVEFCTEUoKVtpZHhdLnNnX2d1aV9iZ19uYW1lID0gdmltX3N0cnNhdmUoYXJnKTsKKwkJZWxzZQorCQkgICAgSExfVEFCTEUoKVtpZHhdLnNnX2d1aV9iZ19uYW1lID0gTlVMTDsKKyMgaWZkZWYgRkVBVF9HVUlfWDExCisJCWlmIChpc19tZW51X2dyb3VwKQorCQkgICAgZ3VpLm1lbnVfYmdfcGl4ZWwgPSBpOworCQlpZiAoaXNfc2Nyb2xsYmFyX2dyb3VwKQorCQkgICAgZ3VpLnNjcm9sbF9iZ19waXhlbCA9IGk7CisjICBpZmRlZiBGRUFUX0JFVkFMCisJCWlmIChpc190b29sdGlwX2dyb3VwKQorCQkgICAgZ3VpLnRvb2x0aXBfYmdfcGl4ZWwgPSBpOworIyAgZW5kaWYKKwkJZG9fY29sb3JzID0gVFJVRTsKKyMgZW5kaWYKKwkgICAgfQorCSAgfQorI2VuZGlmCisJfQorCWVsc2UgaWYgKFNUUkNNUChrZXksICJTVEFSVCIpID09IDAgfHwgU1RSQ01QKGtleSwgIlNUT1AiKSA9PSAwKQorCXsKKwkgICAgY2hhcl91CWJ1ZlsxMDBdOworCSAgICBjaGFyX3UJKnRuYW1lOworCisJICAgIGlmICghaW5pdCkKKwkJSExfVEFCTEUoKVtpZHhdLnNnX3NldCB8PSBTR19URVJNOworCisJICAgIC8qCisJICAgICAqIFRoZSAic3RhcnQiIGFuZCAic3RvcCIgIGFyZ3VtZW50cyBjYW4gYmUgYSBsaXRlcmFsIGVzY2FwZQorCSAgICAgKiBzZXF1ZW5jZSwgb3IgYSBjb21tYSBzZXBlcmF0ZWQgbGlzdCBvZiB0ZXJtaW5hbCBjb2Rlcy4KKwkgICAgICovCisJICAgIGlmIChTVFJOQ01QKGFyZywgInRfIiwgMikgPT0gMCkKKwkgICAgeworCQlvZmYgPSAwOworCQlidWZbMF0gPSAwOworCQl3aGlsZSAoYXJnW29mZl0gIT0gTlVMKQorCQl7CisJCSAgICAvKiBJc29sYXRlIG9uZSB0ZXJtY2FwIG5hbWUgKi8KKwkJICAgIGZvciAobGVuID0gMDsgYXJnW29mZiArIGxlbl0gJiYKKwkJCQkJCSBhcmdbb2ZmICsgbGVuXSAhPSAnLCc7ICsrbGVuKQorCQkJOworCQkgICAgdG5hbWUgPSB2aW1fc3RybnNhdmUoYXJnICsgb2ZmLCBsZW4pOworCQkgICAgaWYgKHRuYW1lID09IE5VTEwpCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCSAgICB7CisJCQllcnJvciA9IFRSVUU7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIC8qIGxvb2t1cCB0aGUgZXNjYXBlIHNlcXVlbmNlIGZvciB0aGUgaXRlbSAqLworCQkgICAgcCA9IGdldF90ZXJtX2NvZGUodG5hbWUpOworCQkgICAgdmltX2ZyZWUodG5hbWUpOworCQkgICAgaWYgKHAgPT0gTlVMTCkJICAgIC8qIGlnbm9yZSBub24tZXhpc3RpbmcgdGhpbmdzICovCisJCQlwID0gKGNoYXJfdSAqKSIiOworCisJCSAgICAvKiBBcHBlbmQgaXQgdG8gdGhlIGFscmVhZHkgZm91bmQgc3R1ZmYgKi8KKwkJICAgIGlmICgoaW50KShTVFJMRU4oYnVmKSArIFNUUkxFTihwKSkgPj0gOTkpCisJCSAgICB7CisJCQlFTVNHMihfKCJFNDIyOiB0ZXJtaW5hbCBjb2RlIHRvbyBsb25nOiAlcyIpLCBhcmcpOworCQkJZXJyb3IgPSBUUlVFOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBTVFJDQVQoYnVmLCBwKTsKKworCQkgICAgLyogQWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtICovCisJCSAgICBvZmYgKz0gbGVuOworCQkgICAgaWYgKGFyZ1tvZmZdID09ICcsJykJICAgIC8qIGFub3RoZXIgb25lIGZvbGxvd3MgKi8KKwkJCSsrb2ZmOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qCisJCSAqIENvcHkgY2hhcmFjdGVycyBmcm9tIGFyZ1tdIHRvIGJ1ZltdLCB0cmFuc2xhdGluZyA8PiBjb2Rlcy4KKwkJICovCisJCWZvciAocCA9IGFyZywgb2ZmID0gMDsgb2ZmIDwgMTAwICYmICpwOyApCisJCXsKKwkJICAgIGxlbiA9IHRyYW5zX3NwZWNpYWwoJnAsIGJ1ZiArIG9mZiwgRkFMU0UpOworCQkgICAgaWYgKGxlbikJCSAgICAvKiByZWNvZ25pemVkIHNwZWNpYWwgY2hhciAqLworCQkJb2ZmICs9IGxlbjsKKwkJICAgIGVsc2UJCSAgICAvKiBjb3B5IGFzIG5vcm1hbCBjaGFyICovCisJCQlidWZbb2ZmKytdID0gKnArKzsKKwkJfQorCQlidWZbb2ZmXSA9IE5VTDsKKwkgICAgfQorCSAgICBpZiAoZXJyb3IpCisJCWJyZWFrOworCisJICAgIGlmIChTVFJDTVAoYnVmLCAiTk9ORSIpID09IDApCS8qIHJlc2V0dGluZyB0aGUgdmFsdWUgKi8KKwkJcCA9IE5VTEw7CisJICAgIGVsc2UKKwkJcCA9IHZpbV9zdHJzYXZlKGJ1Zik7CisJICAgIGlmIChrZXlbMl0gPT0gJ0EnKQorCSAgICB7CisJCXZpbV9mcmVlKEhMX1RBQkxFKClbaWR4XS5zZ19zdGFydCk7CisJCUhMX1RBQkxFKClbaWR4XS5zZ19zdGFydCA9IHA7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCXZpbV9mcmVlKEhMX1RBQkxFKClbaWR4XS5zZ19zdG9wKTsKKwkJSExfVEFCTEUoKVtpZHhdLnNnX3N0b3AgPSBwOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIEVNU0cyKF8oIkU0MjM6IElsbGVnYWwgYXJndW1lbnQ6ICVzIiksIGtleV9zdGFydCk7CisJICAgIGVycm9yID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorCisJLyoKKwkgKiBXaGVuIGhpZ2hsaWdodGluZyBoYXMgYmVlbiBnaXZlbiBmb3IgYSBncm91cCwgZG9uJ3QgbGluayBpdC4KKwkgKi8KKwlpZiAoIWluaXQgfHwgIShITF9UQUJMRSgpW2lkeF0uc2dfc2V0ICYgU0dfTElOSykpCisJICAgIEhMX1RBQkxFKClbaWR4XS5zZ19saW5rID0gMDsKKworCS8qCisJICogQ29udGludWUgd2l0aCBuZXh0IGFyZ3VtZW50LgorCSAqLworCWxpbmVwID0gc2tpcHdoaXRlKGxpbmVwKTsKKyAgICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlcmUgaXMgYW4gZXJyb3IsIGFuZCBpdCdzIGEgbmV3IGVudHJ5LCByZW1vdmUgaXQgZnJvbSB0aGUgdGFibGUuCisgICAgICovCisgICAgaWYgKGVycm9yICYmIGlkeCA9PSBoaWdobGlnaHRfZ2EuZ2FfbGVuKQorCXN5bl91bmFkZF9ncm91cCgpOworICAgIGVsc2UKKyAgICB7CisJaWYgKGlzX25vcm1hbF9ncm91cCkKKwl7CisJICAgIEhMX1RBQkxFKClbaWR4XS5zZ190ZXJtX2F0dHIgPSAwOworCSAgICBITF9UQUJMRSgpW2lkeF0uc2dfY3Rlcm1fYXR0ciA9IDA7CisjaWZkZWYgRkVBVF9HVUkKKwkgICAgSExfVEFCTEUoKVtpZHhdLnNnX2d1aV9hdHRyID0gMDsKKwkgICAgLyoKKwkgICAgICogTmVlZCB0byB1cGRhdGUgYWxsIGdyb3VwcywgYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIHVzaW5nICJiZyIKKwkgICAgICogYW5kL29yICJmZyIsIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIG5vdy4KKwkgICAgICovCisJICAgIGlmIChndWkuaW5fdXNlKQorCQloaWdobGlnaHRfZ3VpX3N0YXJ0ZWQoKTsKKyNlbmRpZgorCX0KKyNpZmRlZiBGRUFUX0dVSV9YMTEKKyMgaWZkZWYgRkVBVF9NRU5VCisJZWxzZSBpZiAoaXNfbWVudV9ncm91cCkKKwl7CisJICAgIGlmIChndWkuaW5fdXNlICYmIGRvX2NvbG9ycykKKwkJZ3VpX21jaF9uZXdfbWVudV9jb2xvcnMoKTsKKwl9CisjIGVuZGlmCisJZWxzZSBpZiAoaXNfc2Nyb2xsYmFyX2dyb3VwKQorCXsKKwkgICAgaWYgKGd1aS5pbl91c2UgJiYgZG9fY29sb3JzKQorCQlndWlfbmV3X3Njcm9sbGJhcl9jb2xvcnMoKTsKKwl9CisjIGlmZGVmIEZFQVRfQkVWQUwKKwllbHNlIGlmIChpc190b29sdGlwX2dyb3VwKQorCXsKKwkgICAgaWYgKGd1aS5pbl91c2UgJiYgZG9fY29sb3JzKQorCQlndWlfbWNoX25ld190b29sdGlwX2NvbG9ycygpOworCX0KKyMgZW5kaWYKKyNlbmRpZgorCWVsc2UKKwkgICAgc2V0X2hsX2F0dHIoaWR4KTsKKwlyZWRyYXdfYWxsX2xhdGVyKE5PVF9WQUxJRCk7CisgICAgfQorICAgIHZpbV9mcmVlKGtleSk7CisgICAgdmltX2ZyZWUoYXJnKTsKKworICAgIC8qIE9ubHkgY2FsbCBoaWdobGlnaHRfY2hhbmdlZCgpIG9uY2UsIGFmdGVyIHNvdXJjaW5nIGEgc3ludGF4IGZpbGUgKi8KKyAgICBuZWVkX2hpZ2hsaWdodF9jaGFuZ2VkID0gVFJVRTsKK30KKworLyoKKyAqIFJlc2V0IHRoZSBjdGVybSBjb2xvcnMgdG8gd2hhdCB0aGV5IHdlcmUgYmVmb3JlIFZpbSB3YXMgc3RhcnRlZCwgaWYKKyAqIHBvc3NpYmxlLiAgT3RoZXJ3aXNlIHJlc2V0IHRoZW0gdG8gemVyby4KKyAqLworICAgIHZvaWQKK3Jlc3RvcmVfY3Rlcm1fY29sb3JzKCkKK3sKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCAoZGVmaW5lZChXSU4zMjY0KSAmJiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpKQorICAgIC8qIFNpbmNlIHRfbWUgaGFzIGJlZW4gc2V0LCB0aGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHVzZXIKKyAgICAgKiB3YW50cyB0byB1c2UgdGhpcyBhcyBkZWZhdWx0IGNvbG9ycy4gIE5lZWQgdG8gcmVzZXQgZGVmYXVsdAorICAgICAqIGJhY2tncm91bmQvZm9yZWdyb3VuZCBjb2xvcnMuICovCisgICAgbWNoX3NldF9ub3JtYWxfY29sb3JzKCk7CisjZWxzZQorICAgIGN0ZXJtX25vcm1hbF9mZ19jb2xvciA9IDA7CisgICAgY3Rlcm1fbm9ybWFsX2ZnX2JvbGQgPSAwOworICAgIGN0ZXJtX25vcm1hbF9iZ19jb2xvciA9IDA7CisjZW5kaWYKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGhpZ2hsaWdodCBncm91cCAiaWR4IiBoYXMgYW55IHNldHRpbmdzLgorICogV2hlbiAiY2hlY2tfbGluayIgaXMgVFJVRSBhbHNvIGNoZWNrIGZvciBhbiBleGlzdGluZyBsaW5rLgorICovCisgICAgc3RhdGljIGludAoraGxfaGFzX3NldHRpbmdzKGlkeCwgY2hlY2tfbGluaykKKyAgICBpbnQJCWlkeDsKKyAgICBpbnQJCWNoZWNrX2xpbms7Cit7CisgICAgcmV0dXJuICggICBITF9UQUJMRSgpW2lkeF0uc2dfdGVybV9hdHRyICE9IDAKKwkgICAgfHwgSExfVEFCTEUoKVtpZHhdLnNnX2N0ZXJtX2F0dHIgIT0gMAorI2lmZGVmIEZFQVRfR1VJCisJICAgIHx8IEhMX1RBQkxFKClbaWR4XS5zZ19ndWlfYXR0ciAhPSAwCisjZW5kaWYKKwkgICAgfHwgKGNoZWNrX2xpbmsgJiYgKEhMX1RBQkxFKClbaWR4XS5zZ19zZXQgJiBTR19MSU5LKSkpOworfQorCisvKgorICogQ2xlYXIgaGlnaGxpZ2h0aW5nIGZvciBvbmUgZ3JvdXAuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraGlnaGxpZ2h0X2NsZWFyKGlkeCkKKyAgICBpbnQgaWR4OworeworICAgIEhMX1RBQkxFKClbaWR4XS5zZ190ZXJtID0gMDsKKyAgICB2aW1fZnJlZShITF9UQUJMRSgpW2lkeF0uc2dfc3RhcnQpOworICAgIEhMX1RBQkxFKClbaWR4XS5zZ19zdGFydCA9IE5VTEw7CisgICAgdmltX2ZyZWUoSExfVEFCTEUoKVtpZHhdLnNnX3N0b3ApOworICAgIEhMX1RBQkxFKClbaWR4XS5zZ19zdG9wID0gTlVMTDsKKyAgICBITF9UQUJMRSgpW2lkeF0uc2dfdGVybV9hdHRyID0gMDsKKyAgICBITF9UQUJMRSgpW2lkeF0uc2dfY3Rlcm0gPSAwOworICAgIEhMX1RBQkxFKClbaWR4XS5zZ19jdGVybV9ib2xkID0gRkFMU0U7CisgICAgSExfVEFCTEUoKVtpZHhdLnNnX2N0ZXJtX2ZnID0gMDsKKyAgICBITF9UQUJMRSgpW2lkeF0uc2dfY3Rlcm1fYmcgPSAwOworICAgIEhMX1RBQkxFKClbaWR4XS5zZ19jdGVybV9hdHRyID0gMDsKKyNpZmRlZiBGRUFUX0dVSQkgICAgLyogaW4gbm9uLUdVSSBmb250cyBhcmUgc2ltcGx5IGlnbm9yZWQgKi8KKyAgICBITF9UQUJMRSgpW2lkeF0uc2dfZ3VpID0gMDsKKyAgICBITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2ZnID0gSU5WQUxDT0xPUjsKKyAgICB2aW1fZnJlZShITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2ZnX25hbWUpOworICAgIEhMX1RBQkxFKClbaWR4XS5zZ19ndWlfZmdfbmFtZSA9IE5VTEw7CisgICAgSExfVEFCTEUoKVtpZHhdLnNnX2d1aV9iZyA9IElOVkFMQ09MT1I7CisgICAgdmltX2ZyZWUoSExfVEFCTEUoKVtpZHhdLnNnX2d1aV9iZ19uYW1lKTsKKyAgICBITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2JnX25hbWUgPSBOVUxMOworICAgIGd1aV9tY2hfZnJlZV9mb250KEhMX1RBQkxFKClbaWR4XS5zZ19mb250KTsKKyAgICBITF9UQUJMRSgpW2lkeF0uc2dfZm9udCA9IE5PRk9OVDsKKyMgaWZkZWYgRkVBVF9YRk9OVFNFVAorICAgIGd1aV9tY2hfZnJlZV9mb250c2V0KEhMX1RBQkxFKClbaWR4XS5zZ19mb250c2V0KTsKKyAgICBITF9UQUJMRSgpW2lkeF0uc2dfZm9udHNldCA9IE5PRk9OVFNFVDsKKyMgZW5kaWYKKyAgICB2aW1fZnJlZShITF9UQUJMRSgpW2lkeF0uc2dfZm9udF9uYW1lKTsKKyAgICBITF9UQUJMRSgpW2lkeF0uc2dfZm9udF9uYW1lID0gTlVMTDsKKyAgICBITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2F0dHIgPSAwOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFNldCB0aGUgbm9ybWFsIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIGFjY29yZGluZyB0byB0aGUgIk5vcm1hbCIKKyAqIGhpZ2hsaWdoaWdodGluZyBncm91cC4gIEZvciBYMTEgYWxzbyBzZXQgIk1lbnUiLCAiU2Nyb2xsYmFyIiwgYW5kCisgKiAiVG9vbHRpcCIgY29sb3JzLgorICovCisgICAgdm9pZAorc2V0X25vcm1hbF9jb2xvcnMoKQoreworICAgIGlmIChzZXRfZ3JvdXBfY29sb3JzKChjaGFyX3UgKikiTm9ybWFsIiwKKwkJCSAgICAgICAmZ3VpLm5vcm1fcGl4ZWwsICZndWkuYmFja19waXhlbCwgRkFMU0UsIFRSVUUsCisJCQkgICAgICAgRkFMU0UpKQorICAgIHsKKwlndWlfbWNoX25ld19jb2xvcnMoKTsKKwltdXN0X3JlZHJhdyA9IENMRUFSOworICAgIH0KKyNpZmRlZiBGRUFUX0dVSV9YMTEKKyAgICBpZiAoc2V0X2dyb3VwX2NvbG9ycygoY2hhcl91ICopIk1lbnUiLAorCQkJICZndWkubWVudV9mZ19waXhlbCwgJmd1aS5tZW51X2JnX3BpeGVsLCBUUlVFLCBGQUxTRSwKKwkJCSBGQUxTRSkpCisgICAgeworIyBpZmRlZiBGRUFUX01FTlUKKwlndWlfbWNoX25ld19tZW51X2NvbG9ycygpOworIyBlbmRpZgorCW11c3RfcmVkcmF3ID0gQ0xFQVI7CisgICAgfQorIyBpZmRlZiBGRUFUX0JFVkFMCisgICAgaWYgKHNldF9ncm91cF9jb2xvcnMoKGNoYXJfdSAqKSJUb29sdGlwIiwKKwkJCSAmZ3VpLnRvb2x0aXBfZmdfcGl4ZWwsICZndWkudG9vbHRpcF9iZ19waXhlbCwKKwkJCSBGQUxTRSwgRkFMU0UsIFRSVUUpKQorICAgIHsKKyMgaWZkZWYgRkVBVF9UT09MQkFSCisJZ3VpX21jaF9uZXdfdG9vbHRpcF9jb2xvcnMoKTsKKyMgZW5kaWYKKwltdXN0X3JlZHJhdyA9IENMRUFSOworICAgIH0KKyNlbmRpZgorICAgIGlmIChzZXRfZ3JvdXBfY29sb3JzKChjaGFyX3UgKikiU2Nyb2xsYmFyIiwKKwkJICAgICZndWkuc2Nyb2xsX2ZnX3BpeGVsLCAmZ3VpLnNjcm9sbF9iZ19waXhlbCwgRkFMU0UsIEZBTFNFLAorCQkgICAgRkFMU0UpKQorICAgIHsKKwlndWlfbmV3X3Njcm9sbGJhcl9jb2xvcnMoKTsKKwltdXN0X3JlZHJhdyA9IENMRUFSOworICAgIH0KKyNlbmRpZgorfQorCisvKgorICogU2V0IHRoZSBjb2xvcnMgZm9yICJOb3JtYWwiLCAiTWVudSIsICJUb29sdGlwIiBvciAiU2Nyb2xsYmFyIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK3NldF9ncm91cF9jb2xvcnMobmFtZSwgZmdwLCBiZ3AsIGRvX21lbnUsIHVzZV9ub3JtLCBkb190b29sdGlwKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBndWljb2xvcl9UCSpmZ3A7CisgICAgZ3VpY29sb3JfVAkqYmdwOworICAgIGludAkJZG9fbWVudTsKKyAgICBpbnQJCXVzZV9ub3JtOworICAgIGludAkJZG9fdG9vbHRpcDsKK3sKKyAgICBpbnQJCWlkeDsKKworICAgIGlkeCA9IHN5bl9uYW1lMmlkKG5hbWUpIC0gMTsKKyAgICBpZiAoaWR4ID49IDApCisgICAgeworCWd1aV9kb19vbmVfY29sb3IoaWR4LCBkb19tZW51LCBkb190b29sdGlwKTsKKworCWlmIChITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2ZnICE9IElOVkFMQ09MT1IpCisJICAgICpmZ3AgPSBITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2ZnOworCWVsc2UgaWYgKHVzZV9ub3JtKQorCSAgICAqZmdwID0gZ3VpLmRlZl9ub3JtX3BpeGVsOworCWlmIChITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2JnICE9IElOVkFMQ09MT1IpCisJICAgICpiZ3AgPSBITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2JnOworCWVsc2UgaWYgKHVzZV9ub3JtKQorCSAgICAqYmdwID0gZ3VpLmRlZl9iYWNrX3BpeGVsOworCXJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBHZXQgdGhlIGZvbnQgb2YgdGhlICJOb3JtYWwiIGdyb3VwLgorICogUmV0dXJucyAiIiB3aGVuIGl0J3Mgbm90IGZvdW5kIG9yIG5vdCBzZXQuCisgKi8KKyAgICBjaGFyX3UgKgoraGxfZ2V0X2ZvbnRfbmFtZSgpCit7CisgICAgaW50CQlpZDsKKyAgICBjaGFyX3UJKnM7CisKKyAgICBpZCA9IHN5bl9uYW1lMmlkKChjaGFyX3UgKikiTm9ybWFsIik7CisgICAgaWYgKGlkID4gMCkKKyAgICB7CisJcyA9IEhMX1RBQkxFKClbaWQgLSAxXS5zZ19mb250X25hbWU7CisJaWYgKHMgIT0gTlVMTCkKKwkgICAgcmV0dXJuIHM7CisgICAgfQorICAgIHJldHVybiAoY2hhcl91ICopIiI7Cit9CisKKy8qCisgKiBTZXQgZm9udCBmb3IgIk5vcm1hbCIgZ3JvdXAuICBDYWxsZWQgYnkgZ3VpX21jaF9pbml0X2ZvbnQoKSB3aGVuIGEgZm9udCBoYXMKKyAqIGFjdHVhbGx5IGNob3NlbiB0byBiZSB1c2VkLgorICovCisgICAgdm9pZAoraGxfc2V0X2ZvbnRfbmFtZShmb250X25hbWUpCisgICAgY2hhcl91CSpmb250X25hbWU7Cit7CisgICAgaW50CSAgICBpZDsKKworICAgIGlkID0gc3luX25hbWUyaWQoKGNoYXJfdSAqKSJOb3JtYWwiKTsKKyAgICBpZiAoaWQgPiAwKQorICAgIHsKKwl2aW1fZnJlZShITF9UQUJMRSgpW2lkIC0gMV0uc2dfZm9udF9uYW1lKTsKKwlITF9UQUJMRSgpW2lkIC0gMV0uc2dfZm9udF9uYW1lID0gdmltX3N0cnNhdmUoZm9udF9uYW1lKTsKKyAgICB9Cit9CisKKy8qCisgKiBTZXQgYmFja2dyb3VuZCBjb2xvciBmb3IgIk5vcm1hbCIgZ3JvdXAuICBDYWxsZWQgYnkgZ3VpX3NldF9iZ19jb2xvcigpCisgKiB3aGVuIHRoZSBjb2xvciBpcyBrbm93bi4KKyAqLworICAgIHZvaWQKK2hsX3NldF9iZ19jb2xvcl9uYW1lKG5hbWUpCisgICAgY2hhcl91ICAqbmFtZTsJICAgIC8qIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCAqLworeworICAgIGludAkgICAgaWQ7CisKKyAgICBpZiAobmFtZSAhPSBOVUxMKQorICAgIHsKKwlpZCA9IHN5bl9uYW1lMmlkKChjaGFyX3UgKikiTm9ybWFsIik7CisJaWYgKGlkID4gMCkKKwl7CisJICAgIHZpbV9mcmVlKEhMX1RBQkxFKClbaWQgLSAxXS5zZ19ndWlfYmdfbmFtZSk7CisJICAgIEhMX1RBQkxFKClbaWQgLSAxXS5zZ19ndWlfYmdfbmFtZSA9IG5hbWU7CisJfQorICAgIH0KK30KKworLyoKKyAqIFNldCBmb3JlZ3JvdW5kIGNvbG9yIGZvciAiTm9ybWFsIiBncm91cC4gIENhbGxlZCBieSBndWlfc2V0X2ZnX2NvbG9yKCkKKyAqIHdoZW4gdGhlIGNvbG9yIGlzIGtub3duLgorICovCisgICAgdm9pZAoraGxfc2V0X2ZnX2NvbG9yX25hbWUobmFtZSkKKyAgICBjaGFyX3UgICpuYW1lOwkgICAgLyogbXVzdCBoYXZlIGJlZW4gYWxsb2NhdGVkICovCit7CisgICAgaW50CSAgICBpZDsKKworICAgIGlmIChuYW1lICE9IE5VTEwpCisgICAgeworCWlkID0gc3luX25hbWUyaWQoKGNoYXJfdSAqKSJOb3JtYWwiKTsKKwlpZiAoaWQgPiAwKQorCXsKKwkgICAgdmltX2ZyZWUoSExfVEFCTEUoKVtpZCAtIDFdLnNnX2d1aV9mZ19uYW1lKTsKKwkgICAgSExfVEFCTEUoKVtpZCAtIDFdLnNnX2d1aV9mZ19uYW1lID0gbmFtZTsKKwl9CisgICAgfQorfQorCisvKgorICogUmV0dXJuIHRoZSBoYW5kbGUgZm9yIGEgY29sb3IgbmFtZS4KKyAqIFJldHVybnMgSU5WQUxDT0xPUiB3aGVuIGZhaWxlZC4KKyAqLworICAgIHN0YXRpYyBndWljb2xvcl9UCitjb2xvcl9uYW1lMmhhbmRsZShuYW1lKQorICAgIGNoYXJfdSAgKm5hbWU7Cit7CisgICAgaWYgKFNUUkNNUChuYW1lLCAiTk9ORSIpID09IDApCisJcmV0dXJuIElOVkFMQ09MT1I7CisKKyAgICBpZiAoU1RSSUNNUChuYW1lLCAiZmciKSA9PSAwIHx8IFNUUklDTVAobmFtZSwgImZvcmVncm91bmQiKSA9PSAwKQorCXJldHVybiBndWkubm9ybV9waXhlbDsKKyAgICBpZiAoU1RSSUNNUChuYW1lLCAiYmciKSA9PSAwIHx8IFNUUklDTVAobmFtZSwgImJhY2tncm91bmQiKSA9PSAwKQorCXJldHVybiBndWkuYmFja19waXhlbDsKKworICAgIHJldHVybiBndWlfZ2V0X2NvbG9yKG5hbWUpOworfQorCisvKgorICogUmV0dXJuIHRoZSBoYW5kbGUgZm9yIGEgZm9udCBuYW1lLgorICogUmV0dXJucyBOT0ZPTlQgd2hlbiBmYWlsZWQuCisgKi8KKyAgICBzdGF0aWMgR3VpRm9udAorZm9udF9uYW1lMmhhbmRsZShuYW1lKQorICAgIGNoYXJfdSAgKm5hbWU7Cit7CisgICAgaWYgKFNUUkNNUChuYW1lLCAiTk9ORSIpID09IDApCisJcmV0dXJuIE5PRk9OVDsKKworICAgIHJldHVybiBndWlfbWNoX2dldF9mb250KG5hbWUsIFRSVUUpOworfQorCisjIGlmZGVmIEZFQVRfWEZPTlRTRVQKKy8qCisgKiBSZXR1cm4gdGhlIGhhbmRsZSBmb3IgYSBmb250c2V0IG5hbWUuCisgKiBSZXR1cm5zIE5PRk9OVFNFVCB3aGVuIGZhaWxlZC4KKyAqLworICAgIHN0YXRpYyBHdWlGb250c2V0Citmb250c2V0X25hbWUyaGFuZGxlKG5hbWUsIGZpeGVkX3dpZHRoKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBpbnQJCWZpeGVkX3dpZHRoOworeworICAgIGlmIChTVFJDTVAobmFtZSwgIk5PTkUiKSA9PSAwKQorCXJldHVybiBOT0ZPTlRTRVQ7CisKKyAgICByZXR1cm4gZ3VpX21jaF9nZXRfZm9udHNldChuYW1lLCBUUlVFLCBmaXhlZF93aWR0aCk7Cit9CisjIGVuZGlmCisKKy8qCisgKiBHZXQgdGhlIGZvbnQgb3IgZm9udHNldCBmb3Igb25lIGhpZ2hsaWdodCBncm91cC4KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHZvaWQKK2hsX2RvX2ZvbnQoaWR4LCBhcmcsIGRvX25vcm1hbCwgZG9fbWVudSwgZG9fdG9vbHRpcCkKKyAgICBpbnQJCWlkeDsKKyAgICBjaGFyX3UJKmFyZzsKKyAgICBpbnQJCWRvX25vcm1hbDsJLyogc2V0IG5vcm1hbCBmb250ICovCisgICAgaW50CQlkb19tZW51OwkvKiBzZXQgbWVudSBmb250ICovCisgICAgaW50CQlkb190b29sdGlwOwkvKiBzZXQgdG9vbHRpcCBmb250ICovCit7CisjIGlmZGVmIEZFQVRfWEZPTlRTRVQKKyAgICAvKiBJZiAnZ3VpZm9udHNldCcgaXMgbm90IGVtcHR5LCBmaXJzdCB0cnkgdXNpbmcgdGhlIG5hbWUgYXMgYQorICAgICAqIGZvbnRzZXQuICBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgdXNlIGl0IGFzIGEgZm9udCBuYW1lLiAqLworICAgIGlmICgqcF9ndWlmb250c2V0ICE9IE5VTAorIyAgaWZkZWYgRk9OVFNFVF9BTFdBWVMKKwl8fCBkb19tZW51CisjICBlbmRpZgorIyAgaWZkZWYgRkVBVF9CRVZBTF9USVAKKwkvKiBJbiBBdGhlbmEgJiBNb3RpZiwgdGhlIFRvb2x0aXAgaGlnaGxpZ2h0IGdyb3VwIGlzIGFsd2F5cyBhIGZvbnRzZXQgKi8KKwl8fCBkb190b29sdGlwCisjICBlbmRpZgorCSAgICApCisJSExfVEFCTEUoKVtpZHhdLnNnX2ZvbnRzZXQgPSBmb250c2V0X25hbWUyaGFuZGxlKGFyZywgMAorIyAgaWZkZWYgRk9OVFNFVF9BTFdBWVMKKwkJfHwgZG9fbWVudQorIyAgZW5kaWYKKyMgIGlmZGVmIEZFQVRfQkVWQUxfVElQCisJCXx8IGRvX3Rvb2x0aXAKKyMgIGVuZGlmCisJCSk7CisgICAgaWYgKEhMX1RBQkxFKClbaWR4XS5zZ19mb250c2V0ICE9IE5PRk9OVFNFVCkKKyAgICB7CisJLyogSWYgaXQgd29ya2VkIGFuZCBpdCdzIHRoZSBOb3JtYWwgZ3JvdXAsIHVzZSBpdCBhcyB0aGUKKwkgKiBub3JtYWwgZm9udHNldC4gIFNhbWUgZm9yIHRoZSBNZW51IGdyb3VwLiAqLworCWlmIChkb19ub3JtYWwpCisJICAgIGd1aV9pbml0X2ZvbnQoYXJnLCBUUlVFKTsKKyMgICBpZiAoZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgfHwgZGVmaW5lZChGRUFUX0dVSV9BVEhFTkEpKSAmJiBkZWZpbmVkKEZFQVRfTUVOVSkKKwlpZiAoZG9fbWVudSkKKwl7CisjICAgIGlmZGVmIEZPTlRTRVRfQUxXQVlTCisJICAgIGd1aS5tZW51X2ZvbnRzZXQgPSBITF9UQUJMRSgpW2lkeF0uc2dfZm9udHNldDsKKyMgICAgZWxzZQorCSAgICAvKiBZSUtFUyEgIFRoaXMgaXMgYSBidWcgd2FpdGluZyB0byBjcmFzaCB0aGUgcHJvZ3JhbSAqLworCSAgICBndWkubWVudV9mb250ID0gSExfVEFCTEUoKVtpZHhdLnNnX2ZvbnRzZXQ7CisjICAgIGVuZGlmCisJICAgIGd1aV9tY2hfbmV3X21lbnVfZm9udCgpOworCX0KKyMgICAgaWZkZWYgRkVBVF9CRVZBTAorCWlmIChkb190b29sdGlwKQorCXsKKwkgICAgLyogVGhlIEF0aGVuYSB3aWRnZXQgc2V0IGNhbm5vdCBjdXJyZW50bHkgaGFuZGxlIHN3aXRjaGluZyBiZXR3ZWVuCisJICAgICAqIGRpc3BsYXlpbmcgYSBzaW5nbGUgZm9udCBhbmQgYSBmb250c2V0LgorCSAgICAgKiBJZiB0aGUgWHROaW50ZXJuYXRpb25hbCByZXNvdXJjZSBpcyBzZXQgdG8gVHJ1ZSBhdCB3aWRnZXQKKwkgICAgICogY3JlYXRpb24sIHRoZW4gYSBmb250c2V0IGlzIGFsd2F5cyB1c2VkLCBvdGh3aXNlIGFuCisJICAgICAqIFhGb250U3RydWN0IGlzIHVzZWQuCisJICAgICAqLworCSAgICBndWkudG9vbHRpcF9mb250c2V0ID0gKFhGb250U2V0KUhMX1RBQkxFKClbaWR4XS5zZ19mb250c2V0OworCSAgICBndWlfbWNoX25ld190b29sdGlwX2ZvbnQoKTsKKwl9CisjICAgIGVuZGlmCisjICAgZW5kaWYKKyAgICB9CisgICAgZWxzZQorIyBlbmRpZgorICAgIHsKKwlITF9UQUJMRSgpW2lkeF0uc2dfZm9udCA9IGZvbnRfbmFtZTJoYW5kbGUoYXJnKTsKKwkvKiBJZiBpdCB3b3JrZWQgYW5kIGl0J3MgdGhlIE5vcm1hbCBncm91cCwgdXNlIGl0IGFzIHRoZQorCSAqIG5vcm1hbCBmb250LiAgU2FtZSBmb3IgdGhlIE1lbnUgZ3JvdXAuICovCisJaWYgKEhMX1RBQkxFKClbaWR4XS5zZ19mb250ICE9IE5PRk9OVCkKKwl7CisJICAgIGlmIChkb19ub3JtYWwpCisJCWd1aV9pbml0X2ZvbnQoYXJnLCBGQUxTRSk7CisjaWZuZGVmIEZPTlRTRVRfQUxXQVlTCisjIGlmIChkZWZpbmVkKEZFQVRfR1VJX01PVElGKSB8fCBkZWZpbmVkKEZFQVRfR1VJX0FUSEVOQSkpICYmIGRlZmluZWQoRkVBVF9NRU5VKQorCSAgICBpZiAoZG9fbWVudSkKKwkgICAgeworCQlndWkubWVudV9mb250ID0gSExfVEFCTEUoKVtpZHhdLnNnX2ZvbnQ7CisJCWd1aV9tY2hfbmV3X21lbnVfZm9udCgpOworCSAgICB9CisjIGVuZGlmCisjZW5kaWYKKwl9CisgICAgfQorfQorCisjZW5kaWYgLyogRkVBVF9HVUkgKi8KKworLyoKKyAqIFRhYmxlIHdpdGggdGhlIHNwZWNpZmljYXRpb25zIGZvciBhbiBhdHRyaWJ1dGUgbnVtYmVyLgorICogTm90ZSB0aGF0IHRoaXMgdGFibGUgaXMgdXNlZCBieSBBTEwgYnVmZmVycy4gIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUKKyAqIEdVSSBjYW4gcmVkcmF3IGF0IGFueSB0aW1lIGZvciBhbnkgYnVmZmVyLgorICovCitnYXJyYXlfVAl0ZXJtX2F0dHJfdGFibGUgPSB7MCwgMCwgMCwgMCwgTlVMTH07CisKKyNkZWZpbmUgVEVSTV9BVFRSX0VOVFJZKGlkeCkgKChhdHRyZW50cnlfVCAqKXRlcm1fYXR0cl90YWJsZS5nYV9kYXRhKVtpZHhdCisKK2dhcnJheV9UCWN0ZXJtX2F0dHJfdGFibGUgPSB7MCwgMCwgMCwgMCwgTlVMTH07CisKKyNkZWZpbmUgQ1RFUk1fQVRUUl9FTlRSWShpZHgpICgoYXR0cmVudHJ5X1QgKiljdGVybV9hdHRyX3RhYmxlLmdhX2RhdGEpW2lkeF0KKworI2lmZGVmIEZFQVRfR1VJCitnYXJyYXlfVAlndWlfYXR0cl90YWJsZSA9IHswLCAwLCAwLCAwLCBOVUxMfTsKKworI2RlZmluZSBHVUlfQVRUUl9FTlRSWShpZHgpICgoYXR0cmVudHJ5X1QgKilndWlfYXR0cl90YWJsZS5nYV9kYXRhKVtpZHhdCisjZW5kaWYKKworLyoKKyAqIFJldHVybiB0aGUgYXR0ciBudW1iZXIgZm9yIGEgc2V0IG9mIGNvbG9ycyBhbmQgZm9udC4KKyAqIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgdGVybV9hdHRyX3RhYmxlLCBjdGVybV9hdHRyX3RhYmxlIG9yIGd1aV9hdHRyX3RhYmxlCisgKiBpZiB0aGUgY29tYmluYXRpb24gaXMgbmV3LgorICogUmV0dXJuIDAgZm9yIGVycm9yIChubyBtb3JlIHJvb20pLgorICovCisgICAgc3RhdGljIGludAorZ2V0X2F0dHJfZW50cnkodGFibGUsIGFlcCkKKyAgICBnYXJyYXlfVAkqdGFibGU7CisgICAgYXR0cmVudHJ5X1QJKmFlcDsKK3sKKyAgICBpbnQJCWk7CisgICAgYXR0cmVudHJ5X1QJKmdhcDsKKyAgICBzdGF0aWMgaW50CXJlY3Vyc2l2ZSA9IEZBTFNFOworCisgICAgLyoKKyAgICAgKiBJbml0IHRoZSB0YWJsZSwgaW4gY2FzZSBpdCB3YXNuJ3QgZG9uZSB5ZXQuCisgICAgICovCisgICAgdGFibGUtPmdhX2l0ZW1zaXplID0gc2l6ZW9mKGF0dHJlbnRyeV9UKTsKKyAgICB0YWJsZS0+Z2FfZ3Jvd3NpemUgPSA3OworCisgICAgLyoKKyAgICAgKiBUcnkgdG8gZmluZCBhbiBlbnRyeSB3aXRoIHRoZSBzYW1lIHNwZWNpZmljYXRpb25zLgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCB0YWJsZS0+Z2FfbGVuOyArK2kpCisgICAgeworCWdhcCA9ICYoKChhdHRyZW50cnlfVCAqKXRhYmxlLT5nYV9kYXRhKVtpXSk7CisJaWYgKAkgICBhZXAtPmFlX2F0dHIgPT0gZ2FwLT5hZV9hdHRyCisJCSYmICgKKyNpZmRlZiBGRUFUX0dVSQorCQkgICAgICAgKHRhYmxlID09ICZndWlfYXR0cl90YWJsZQorCQkJJiYgKGFlcC0+YWVfdS5ndWkuZmdfY29sb3IgPT0gZ2FwLT5hZV91Lmd1aS5mZ19jb2xvcgorCQkJICAgICYmIGFlcC0+YWVfdS5ndWkuYmdfY29sb3IgPT0gZ2FwLT5hZV91Lmd1aS5iZ19jb2xvcgorCQkJICAgICYmIGFlcC0+YWVfdS5ndWkuZm9udCA9PSBnYXAtPmFlX3UuZ3VpLmZvbnQKKyMgIGlmZGVmIEZFQVRfWEZPTlRTRVQKKwkJCSAgICAmJiBhZXAtPmFlX3UuZ3VpLmZvbnRzZXQgPT0gZ2FwLT5hZV91Lmd1aS5mb250c2V0CisjICBlbmRpZgorCQkJICAgICkpCisJCSAgICB8fAorI2VuZGlmCisJCSAgICAgICAodGFibGUgPT0gJnRlcm1fYXR0cl90YWJsZQorCQkJJiYgKGFlcC0+YWVfdS50ZXJtLnN0YXJ0ID09IE5VTEwpID09CisJCQkJCQkoZ2FwLT5hZV91LnRlcm0uc3RhcnQgPT0gTlVMTCkKKwkJCSYmIChhZXAtPmFlX3UudGVybS5zdGFydCA9PSBOVUxMCisJCQkgICAgfHwgU1RSQ01QKGFlcC0+YWVfdS50ZXJtLnN0YXJ0LAorCQkJCQkJICAgZ2FwLT5hZV91LnRlcm0uc3RhcnQpID09IDApCisJCQkmJiAoYWVwLT5hZV91LnRlcm0uc3RvcCA9PSBOVUxMKSA9PQorCQkJCQkJIChnYXAtPmFlX3UudGVybS5zdG9wID09IE5VTEwpCisJCQkmJiAoYWVwLT5hZV91LnRlcm0uc3RvcCA9PSBOVUxMCisJCQkgICAgfHwgU1RSQ01QKGFlcC0+YWVfdS50ZXJtLnN0b3AsCisJCQkJCQkgICBnYXAtPmFlX3UudGVybS5zdG9wKSA9PSAwKSkKKwkJICAgIHx8ICh0YWJsZSA9PSAmY3Rlcm1fYXR0cl90YWJsZQorCQkJJiYgYWVwLT5hZV91LmN0ZXJtLmZnX2NvbG9yID09IGdhcC0+YWVfdS5jdGVybS5mZ19jb2xvcgorCQkJJiYgYWVwLT5hZV91LmN0ZXJtLmJnX2NvbG9yID09IGdhcC0+YWVfdS5jdGVybS5iZ19jb2xvcikKKwkJICAgICApKQorCisJcmV0dXJuIGkgKyBBVFRSX09GRjsKKyAgICB9CisKKyAgICBpZiAodGFibGUtPmdhX2xlbiArIEFUVFJfT0ZGID09IDI1NikKKyAgICB7CisJLyoKKwkgKiBSdW5uaW5nIG91dCBvZiBhdHRyaWJ1dGUgZW50cmllcyEgIHJlbW92ZSBhbGwgYXR0cmlidXRlcywgYW5kCisJICogY29tcHV0ZSBuZXcgb25lcyBmb3IgYWxsIGdyb3Vwcy4KKwkgKiBXaGVuIGNhbGxlZCByZWN1cnNpdmVseSwgd2UgYXJlIHJlYWxseSBvdXQgb2YgbnVtYmVycy4KKwkgKi8KKwlpZiAocmVjdXJzaXZlKQorCXsKKwkgICAgRU1TRyhfKCJFNDI0OiBUb28gbWFueSBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIGF0dHJpYnV0ZXMgaW4gdXNlIikpOworCSAgICByZXR1cm4gMDsKKwl9CisJcmVjdXJzaXZlID0gVFJVRTsKKworI2lmZGVmIEZFQVRfR1VJCisJZ2FfY2xlYXIoJmd1aV9hdHRyX3RhYmxlKTsKKyNlbmRpZgorCWdhX2NsZWFyKCZ0ZXJtX2F0dHJfdGFibGUpOworCWdhX2NsZWFyKCZjdGVybV9hdHRyX3RhYmxlKTsKKwltdXN0X3JlZHJhdyA9IENMRUFSOworCisJZm9yIChpID0gMDsgaSA8IGhpZ2hsaWdodF9nYS5nYV9sZW47ICsraSkKKwkgICAgc2V0X2hsX2F0dHIoaSk7CisKKwlyZWN1cnNpdmUgPSBGQUxTRTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoaXMgaXMgYSBuZXcgY29tYmluYXRpb24gb2YgY29sb3JzIGFuZCBmb250LCBhZGQgYW4gZW50cnkuCisgICAgICovCisgICAgaWYgKGdhX2dyb3codGFibGUsIDEpID09IEZBSUwpCisJcmV0dXJuIDA7CisKKyAgICBnYXAgPSAmKCgoYXR0cmVudHJ5X1QgKil0YWJsZS0+Z2FfZGF0YSlbdGFibGUtPmdhX2xlbl0pOworICAgIHZpbV9tZW1zZXQoZ2FwLCAwLCBzaXplb2YoYXR0cmVudHJ5X1QpKTsKKyAgICBnYXAtPmFlX2F0dHIgPSBhZXAtPmFlX2F0dHI7CisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAodGFibGUgPT0gJmd1aV9hdHRyX3RhYmxlKQorICAgIHsKKwlnYXAtPmFlX3UuZ3VpLmZnX2NvbG9yID0gYWVwLT5hZV91Lmd1aS5mZ19jb2xvcjsKKwlnYXAtPmFlX3UuZ3VpLmJnX2NvbG9yID0gYWVwLT5hZV91Lmd1aS5iZ19jb2xvcjsKKwlnYXAtPmFlX3UuZ3VpLmZvbnQgPSBhZXAtPmFlX3UuZ3VpLmZvbnQ7CisjIGlmZGVmIEZFQVRfWEZPTlRTRVQKKwlnYXAtPmFlX3UuZ3VpLmZvbnRzZXQgPSBhZXAtPmFlX3UuZ3VpLmZvbnRzZXQ7CisjIGVuZGlmCisgICAgfQorI2VuZGlmCisgICAgaWYgKHRhYmxlID09ICZ0ZXJtX2F0dHJfdGFibGUpCisgICAgeworCWlmIChhZXAtPmFlX3UudGVybS5zdGFydCA9PSBOVUxMKQorCSAgICBnYXAtPmFlX3UudGVybS5zdGFydCA9IE5VTEw7CisJZWxzZQorCSAgICBnYXAtPmFlX3UudGVybS5zdGFydCA9IHZpbV9zdHJzYXZlKGFlcC0+YWVfdS50ZXJtLnN0YXJ0KTsKKwlpZiAoYWVwLT5hZV91LnRlcm0uc3RvcCA9PSBOVUxMKQorCSAgICBnYXAtPmFlX3UudGVybS5zdG9wID0gTlVMTDsKKwllbHNlCisJICAgIGdhcC0+YWVfdS50ZXJtLnN0b3AgPSB2aW1fc3Ryc2F2ZShhZXAtPmFlX3UudGVybS5zdG9wKTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFibGUgPT0gJmN0ZXJtX2F0dHJfdGFibGUpCisgICAgeworCWdhcC0+YWVfdS5jdGVybS5mZ19jb2xvciA9IGFlcC0+YWVfdS5jdGVybS5mZ19jb2xvcjsKKwlnYXAtPmFlX3UuY3Rlcm0uYmdfY29sb3IgPSBhZXAtPmFlX3UuY3Rlcm0uYmdfY29sb3I7CisgICAgfQorICAgICsrdGFibGUtPmdhX2xlbjsKKyAgICAtLXRhYmxlLT5nYV9yb29tOworICAgIHJldHVybiAodGFibGUtPmdhX2xlbiAtIDEgKyBBVFRSX09GRik7Cit9CisKKyNpZmRlZiBGRUFUX0dVSQorCisgICAgYXR0cmVudHJ5X1QgKgorc3luX2d1aV9hdHRyMmVudHJ5KGF0dHIpCisgICAgaW50CQkgICAgYXR0cjsKK3sKKyAgICBhdHRyIC09IEFUVFJfT0ZGOworICAgIGlmIChhdHRyID49IGd1aV9hdHRyX3RhYmxlLmdhX2xlbikJICAgIC8qIGRpZCAiOnN5bnRheCBjbGVhciIgKi8KKwlyZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gJihHVUlfQVRUUl9FTlRSWShhdHRyKSk7Cit9CisKKyNlbmRpZiAvKiBGRUFUX0dVSSAqLworCisgICAgYXR0cmVudHJ5X1QgKgorc3luX3Rlcm1fYXR0cjJlbnRyeShhdHRyKQorICAgIGludAkJICAgIGF0dHI7Cit7CisgICAgYXR0ciAtPSBBVFRSX09GRjsKKyAgICBpZiAoYXR0ciA+PSB0ZXJtX2F0dHJfdGFibGUuZ2FfbGVuKQkgICAgLyogZGlkICI6c3ludGF4IGNsZWFyIiAqLworCXJldHVybiBOVUxMOworICAgIHJldHVybiAmKFRFUk1fQVRUUl9FTlRSWShhdHRyKSk7Cit9CisKKyAgICBhdHRyZW50cnlfVCAqCitzeW5fY3Rlcm1fYXR0cjJlbnRyeShhdHRyKQorICAgIGludAkJICAgIGF0dHI7Cit7CisgICAgYXR0ciAtPSBBVFRSX09GRjsKKyAgICBpZiAoYXR0ciA+PSBjdGVybV9hdHRyX3RhYmxlLmdhX2xlbikJLyogZGlkICI6c3ludGF4IGNsZWFyIiAqLworCXJldHVybiBOVUxMOworICAgIHJldHVybiAmKENURVJNX0FUVFJfRU5UUlkoYXR0cikpOworfQorCisjZGVmaW5lIExJU1RfQVRUUiAgIDEKKyNkZWZpbmUgTElTVF9TVFJJTkcgMgorI2RlZmluZSBMSVNUX0lOVCAgICAzCisKKyAgICBzdGF0aWMgdm9pZAoraGlnaGxpZ2h0X2xpc3Rfb25lKGlkKQorICAgIGludAkJaWQ7Cit7CisgICAgc3RydWN0IGhsX2dyb3VwCSpzZ3A7CisgICAgaW50CQkJZGlkaCA9IEZBTFNFOworCisgICAgc2dwID0gJkhMX1RBQkxFKClbaWQgLSAxXTsJICAgIC8qIGluZGV4IGlzIElEIG1pbnVzIG9uZSAqLworCisgICAgZGlkaCA9IGhpZ2hsaWdodF9saXN0X2FyZyhpZCwgZGlkaCwgTElTVF9BVFRSLAorCQkJCSAgICBzZ3AtPnNnX3Rlcm0sIE5VTEwsICJ0ZXJtIik7CisgICAgZGlkaCA9IGhpZ2hsaWdodF9saXN0X2FyZyhpZCwgZGlkaCwgTElTVF9TVFJJTkcsCisJCQkJICAgIDAsIHNncC0+c2dfc3RhcnQsICJzdGFydCIpOworICAgIGRpZGggPSBoaWdobGlnaHRfbGlzdF9hcmcoaWQsIGRpZGgsIExJU1RfU1RSSU5HLAorCQkJCSAgICAwLCBzZ3AtPnNnX3N0b3AsICJzdG9wIik7CisKKyAgICBkaWRoID0gaGlnaGxpZ2h0X2xpc3RfYXJnKGlkLCBkaWRoLCBMSVNUX0FUVFIsCisJCQkJICAgIHNncC0+c2dfY3Rlcm0sIE5VTEwsICJjdGVybSIpOworICAgIGRpZGggPSBoaWdobGlnaHRfbGlzdF9hcmcoaWQsIGRpZGgsIExJU1RfSU5ULAorCQkJCSAgICBzZ3AtPnNnX2N0ZXJtX2ZnLCBOVUxMLCAiY3Rlcm1mZyIpOworICAgIGRpZGggPSBoaWdobGlnaHRfbGlzdF9hcmcoaWQsIGRpZGgsIExJU1RfSU5ULAorCQkJCSAgICBzZ3AtPnNnX2N0ZXJtX2JnLCBOVUxMLCAiY3Rlcm1iZyIpOworCisjaWZkZWYgRkVBVF9HVUkKKyAgICBkaWRoID0gaGlnaGxpZ2h0X2xpc3RfYXJnKGlkLCBkaWRoLCBMSVNUX0FUVFIsCisJCQkJICAgIHNncC0+c2dfZ3VpLCBOVUxMLCAiZ3VpIik7CisgICAgZGlkaCA9IGhpZ2hsaWdodF9saXN0X2FyZyhpZCwgZGlkaCwgTElTVF9TVFJJTkcsCisJCQkJICAgIDAsIHNncC0+c2dfZ3VpX2ZnX25hbWUsICJndWlmZyIpOworICAgIGRpZGggPSBoaWdobGlnaHRfbGlzdF9hcmcoaWQsIGRpZGgsIExJU1RfU1RSSU5HLAorCQkJCSAgICAwLCBzZ3AtPnNnX2d1aV9iZ19uYW1lLCAiZ3VpYmciKTsKKyAgICBkaWRoID0gaGlnaGxpZ2h0X2xpc3RfYXJnKGlkLCBkaWRoLCBMSVNUX1NUUklORywKKwkJCQkgICAgMCwgc2dwLT5zZ19mb250X25hbWUsICJmb250Iik7CisjZW5kaWYKKworICAgIGlmIChzZ3AtPnNnX2xpbmspCisgICAgeworCSh2b2lkKXN5bl9saXN0X2hlYWRlcihkaWRoLCA5OTk5LCBpZCk7CisJbXNnX3B1dHNfYXR0cigoY2hhcl91ICopImxpbmtzIHRvIiwgaGxfYXR0cihITEZfRCkpOworCW1zZ19wdXRjaGFyKCcgJyk7CisJbXNnX291dHRyYW5zKEhMX1RBQkxFKClbSExfVEFCTEUoKVtpZCAtIDFdLnNnX2xpbmsgLSAxXS5zZ19uYW1lKTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgaW50CitoaWdobGlnaHRfbGlzdF9hcmcoaWQsIGRpZGgsIHR5cGUsIGlhcmcsIHNhcmcsIG5hbWUpCisgICAgaW50CQlpZDsKKyAgICBpbnQJCWRpZGg7CisgICAgaW50CQl0eXBlOworICAgIGludAkJaWFyZzsKKyAgICBjaGFyX3UJKnNhcmc7CisgICAgY2hhcgkqbmFtZTsKK3sKKyAgICBjaGFyX3UJYnVmWzEwMF07CisgICAgY2hhcl91CSp0czsKKyAgICBpbnQJCWk7CisKKyAgICBpZiAodHlwZSA9PSBMSVNUX1NUUklORyA/IChzYXJnICE9IE5VTEwpIDogKGlhcmcgIT0gMCkpCisgICAgeworCXRzID0gYnVmOworCWlmICh0eXBlID09IExJU1RfSU5UKQorCSAgICBzcHJpbnRmKChjaGFyICopYnVmLCAiJWQiLCBpYXJnIC0gMSk7CisJZWxzZSBpZiAodHlwZSA9PSBMSVNUX1NUUklORykKKwkgICAgdHMgPSBzYXJnOworCWVsc2UgLyogdHlwZSA9PSBMSVNUX0FUVFIgKi8KKwl7CisJICAgIGJ1ZlswXSA9IE5VTDsKKwkgICAgZm9yIChpID0gMDsgaGxfYXR0cl90YWJsZVtpXSAhPSAwOyArK2kpCisJICAgIHsKKwkJaWYgKGlhcmcgJiBobF9hdHRyX3RhYmxlW2ldKQorCQl7CisJCSAgICBpZiAoYnVmWzBdICE9IE5VTCkKKwkJCVNUUkNBVChidWYsICIsIik7CisJCSAgICBTVFJDQVQoYnVmLCBobF9uYW1lX3RhYmxlW2ldKTsKKwkJICAgIGlhcmcgJj0gfmhsX2F0dHJfdGFibGVbaV07CSAgICAvKiBkb24ndCB3YW50ICJpbnZlcnNlIiAqLworCQl9CisJICAgIH0KKwl9CisKKwkodm9pZClzeW5fbGlzdF9oZWFkZXIoZGlkaCwKKwkJCSAgICAgICAoaW50KSh2aW1fc3Ryc2l6ZSh0cykgKyBTVFJMRU4obmFtZSkgKyAxKSwgaWQpOworCWRpZGggPSBUUlVFOworCisJTVNHX1BVVFNfQVRUUihuYW1lLCBobF9hdHRyKEhMRl9EKSk7CisJTVNHX1BVVFNfQVRUUigiPSIsIGhsX2F0dHIoSExGX0QpKTsKKwltc2dfb3V0dHJhbnModHMpOworICAgIH0KKyAgICByZXR1cm4gZGlkaDsKK30KKworI2lmICgoKGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKEZFQVRfUFJJTlRFUikpKSAmJiBkZWZpbmVkKEZFQVRfU1lOX0hMKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXR1cm4gIjEiIGlmIGhpZ2hsaWdodCBncm91cCAiaWQiIGhhcyBhdHRyaWJ1dGUgImZsYWciLgorICogUmV0dXJuIE5VTEwgb3RoZXJ3aXNlLgorICovCisgICAgY2hhcl91ICoKK2hpZ2hsaWdodF9oYXNfYXR0cihpZCwgZmxhZywgbW9kZWMpCisgICAgaW50CQlpZDsKKyAgICBpbnQJCWZsYWc7CisgICAgaW50CQltb2RlYzsJLyogJ2cnIGZvciBHVUksICdjJyBmb3IgY3Rlcm0sICd0JyBmb3IgdGVybSAqLworeworICAgIGludAkJYXR0cjsKKworICAgIGlmIChpZCA8PSAwIHx8IGlkID4gaGlnaGxpZ2h0X2dhLmdhX2xlbikKKwlyZXR1cm4gTlVMTDsKKworI2lmZGVmIEZFQVRfR1VJCisgICAgaWYgKG1vZGVjID09ICdnJykKKwlhdHRyID0gSExfVEFCTEUoKVtpZCAtIDFdLnNnX2d1aTsKKyAgICBlbHNlCisjZW5kaWYKKwkgaWYgKG1vZGVjID09ICdjJykKKwlhdHRyID0gSExfVEFCTEUoKVtpZCAtIDFdLnNnX2N0ZXJtOworICAgIGVsc2UKKwlhdHRyID0gSExfVEFCTEUoKVtpZCAtIDFdLnNnX3Rlcm07CisKKyAgICBpZiAoYXR0ciAmIGZsYWcpCisJcmV0dXJuIChjaGFyX3UgKikiMSI7CisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZFQVRfU1lOX0hMKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmV0dXJuIGNvbG9yIG5hbWUgb2YgaGlnaGxpZ2h0IGdyb3VwICJpZCIuCisgKi8KKyAgICBjaGFyX3UgKgoraGlnaGxpZ2h0X2NvbG9yKGlkLCB3aGF0LCBtb2RlYykKKyAgICBpbnQJCWlkOworICAgIGNoYXJfdQkqd2hhdDsJLyogImZnIiwgImJnIiwgImZnIyIgb3IgImJnIyIgKi8KKyAgICBpbnQJCW1vZGVjOwkvKiAnZycgZm9yIEdVSSwgJ2MnIGZvciBjdGVybSwgJ3QnIGZvciB0ZXJtICovCit7CisgICAgc3RhdGljIGNoYXJfdQluYW1lWzIwXTsKKyAgICBpbnQJCQluOworICAgIGludAkJCWZnOworCisgICAgaWYgKGlkIDw9IDAgfHwgaWQgPiBoaWdobGlnaHRfZ2EuZ2FfbGVuKQorCXJldHVybiBOVUxMOworCisgICAgaWYgKFRPTE9XRVJfQVNDKHdoYXRbMF0pID09ICdmJykKKwlmZyA9IFRSVUU7CisgICAgZWxzZQorCWZnID0gRkFMU0U7CisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAobW9kZWMgPT0gJ2cnKQorICAgIHsKKwkvKiByZXR1cm4gI1JSR0dCQiBmb3JtIChvbmx5IHBvc3NpYmxlIHdoZW4gR1VJIGlzIHJ1bm5pbmcpICovCisJaWYgKGd1aS5pbl91c2UgJiYgd2hhdFsxXSAmJiB3aGF0WzJdID09ICcjJykKKwl7CisJICAgIGd1aWNvbG9yX1QJCWNvbG9yOworCSAgICBsb25nX3UJCXJnYjsKKwkgICAgc3RhdGljIGNoYXJfdQlidWZbMTBdOworCisJICAgIGlmIChmZykKKwkJY29sb3IgPSBITF9UQUJMRSgpW2lkIC0gMV0uc2dfZ3VpX2ZnOworCSAgICBlbHNlCisJCWNvbG9yID0gSExfVEFCTEUoKVtpZCAtIDFdLnNnX2d1aV9iZzsKKwkgICAgaWYgKGNvbG9yID09IElOVkFMQ09MT1IpCisJCXJldHVybiBOVUxMOworCSAgICByZ2IgPSBndWlfbWNoX2dldF9yZ2IoY29sb3IpOworCSAgICBzcHJpbnRmKChjaGFyICopYnVmLCAiIyUwMnglMDJ4JTAyeCIsCisJCQkJICAgICAgKHVuc2lnbmVkKShyZ2IgPj4gMTYpLAorCQkJCSAgICAgICh1bnNpZ25lZCkocmdiID4+IDgpICYgMjU1LAorCQkJCSAgICAgICh1bnNpZ25lZClyZ2IgJiAyNTUpOworCSAgICByZXR1cm4gYnVmOworCX0KKwlpZiAoZmcpCisJICAgIHJldHVybiAoSExfVEFCTEUoKVtpZCAtIDFdLnNnX2d1aV9mZ19uYW1lKTsKKwlyZXR1cm4gKEhMX1RBQkxFKClbaWQgLSAxXS5zZ19ndWlfYmdfbmFtZSk7CisgICAgfQorI2VuZGlmCisgICAgaWYgKG1vZGVjID09ICdjJykKKyAgICB7CisJaWYgKGZnKQorCSAgICBuID0gSExfVEFCTEUoKVtpZCAtIDFdLnNnX2N0ZXJtX2ZnIC0gMTsKKwllbHNlCisJICAgIG4gPSBITF9UQUJMRSgpW2lkIC0gMV0uc2dfY3Rlcm1fYmcgLSAxOworCXNwcmludGYoKGNoYXIgKiluYW1lLCAiJWQiLCBuKTsKKwlyZXR1cm4gbmFtZTsKKyAgICB9CisgICAgLyogdGVybSBkb2Vzbid0IGhhdmUgY29sb3IgKi8KKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRkVBVF9TWU5fSEwpICYmIGRlZmluZWQoRkVBVF9HVUkpICYmIGRlZmluZWQoRkVBVF9QUklOVEVSKSkgXAorCXx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmV0dXJuIGNvbG9yIG5hbWUgb2YgaGlnaGxpZ2h0IGdyb3VwICJpZCIgYXMgUkdCIHZhbHVlLgorICovCisgICAgbG9uZ191CitoaWdobGlnaHRfZ3VpX2NvbG9yX3JnYihpZCwgZmcpCisgICAgaW50CQlpZDsKKyAgICBpbnQJCWZnOwkvKiBUUlVFID0gZmcsIEZBTFNFID0gYmcgKi8KK3sKKyAgICBndWljb2xvcl9UCWNvbG9yOworCisgICAgaWYgKGlkIDw9IDAgfHwgaWQgPiBoaWdobGlnaHRfZ2EuZ2FfbGVuKQorCXJldHVybiAwTDsKKworICAgIGlmIChmZykKKwljb2xvciA9IEhMX1RBQkxFKClbaWQgLSAxXS5zZ19ndWlfZmc7CisgICAgZWxzZQorCWNvbG9yID0gSExfVEFCTEUoKVtpZCAtIDFdLnNnX2d1aV9iZzsKKworICAgIGlmIChjb2xvciA9PSBJTlZBTENPTE9SKQorCXJldHVybiAwTDsKKworICAgIHJldHVybiBndWlfbWNoX2dldF9yZ2IoY29sb3IpOworfQorI2VuZGlmCisKKy8qCisgKiBPdXRwdXQgdGhlIHN5bnRheCBsaXN0IGhlYWRlci4KKyAqIFJldHVybiBUUlVFIHdoZW4gc3RhcnRlZCBhIG5ldyBsaW5lLgorICovCisgICAgc3RhdGljIGludAorc3luX2xpc3RfaGVhZGVyKGRpZF9oZWFkZXIsIG91dGxlbiwgaWQpCisgICAgaW50CSAgICBkaWRfaGVhZGVyOwkJLyogZGlkIGhlYWRlciBhbHJlYWR5ICovCisgICAgaW50CSAgICBvdXRsZW47CQkvKiBsZW5ndGggb2Ygc3RyaW5nIHRoYXQgY29tZXMgKi8KKyAgICBpbnQJICAgIGlkOwkJCS8qIGhpZ2hsaWdodCBncm91cCBpZCAqLworeworICAgIGludAkgICAgZW5kY29sID0gMTk7CisgICAgaW50CSAgICBuZXdsaW5lID0gVFJVRTsKKworICAgIGlmICghZGlkX2hlYWRlcikKKyAgICB7CisJbXNnX3B1dGNoYXIoJ1xuJyk7CisJbXNnX291dHRyYW5zKEhMX1RBQkxFKClbaWQgLSAxXS5zZ19uYW1lKTsKKwllbmRjb2wgPSAxNTsKKyAgICB9CisgICAgZWxzZSBpZiAobXNnX2NvbCArIG91dGxlbiArIDEgPj0gQ29sdW1ucykKKwltc2dfcHV0Y2hhcignXG4nKTsKKyAgICBlbHNlCisgICAgeworCWlmIChtc2dfY29sID49IGVuZGNvbCkJLyogd3JhcCBhcm91bmQgaXMgbGlrZSBzdGFydGluZyBhIG5ldyBsaW5lICovCisJICAgIG5ld2xpbmUgPSBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAobXNnX2NvbCA+PSBlbmRjb2wpCS8qIG91dHB1dCBhdCBsZWFzdCBvbmUgc3BhY2UgKi8KKwllbmRjb2wgPSBtc2dfY29sICsgMTsKKyAgICBpZiAoQ29sdW1ucyA8PSBlbmRjb2wpCS8qIGF2b2lkIGhhbmcgZm9yIHRpbnkgd2luZG93ICovCisJZW5kY29sID0gQ29sdW1ucyAtIDE7CisKKyAgICBtc2dfYWR2YW5jZShlbmRjb2wpOworCisgICAgLyogU2hvdyAieHh4IiB3aXRoIHRoZSBhdHRyaWJ1dGVzLiAqLworICAgIGlmICghZGlkX2hlYWRlcikKKyAgICB7CisJbXNnX3B1dHNfYXR0cigoY2hhcl91ICopInh4eCIsIHN5bl9pZDJhdHRyKGlkKSk7CisJbXNnX3B1dGNoYXIoJyAnKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3bGluZTsKK30KKworLyoKKyAqIFNldCB0aGUgYXR0cmlidXRlIG51bWJlcnMgZm9yIGEgaGlnaGxpZ2h0IGdyb3VwLgorICogQ2FsbGVkIGFmdGVyIG9uZSBvZiB0aGUgYXR0cmlidXRlcyBoYXMgY2hhbmdlZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXRfaGxfYXR0cihpZHgpCisgICAgaW50CQlpZHg7CSAgICAvKiBpbmRleCBpbiBhcnJheSAqLworeworICAgIGF0dHJlbnRyeV9UCQlhdF9lbjsKKyAgICBzdHJ1Y3QgaGxfZ3JvdXAJKnNncCA9IEhMX1RBQkxFKCkgKyBpZHg7CisKKyAgICAvKiBUaGUgIk5vcm1hbCIgZ3JvdXAgZG9lc24ndCBuZWVkIGFuIGF0dHJpYnV0ZSBudW1iZXIgKi8KKyAgICBpZiAoc2dwLT5zZ19uYW1lX3UgIT0gTlVMTCAmJiBTVFJDTVAoc2dwLT5zZ19uYW1lX3UsICJOT1JNQUwiKSA9PSAwKQorCXJldHVybjsKKworI2lmZGVmIEZFQVRfR1VJCisgICAgLyoKKyAgICAgKiBGb3IgdGhlIEdVSSBtb2RlOiBJZiB0aGVyZSBhcmUgb3RoZXIgdGhhbiAibm9ybWFsIiBoaWdobGlnaHRpbmcKKyAgICAgKiBhdHRyaWJ1dGVzLCBuZWVkIHRvIGFsbG9jYXRlIGFuIGF0dHIgbnVtYmVyLgorICAgICAqLworICAgIGlmIChzZ3AtPnNnX2d1aV9mZyA9PSBJTlZBTENPTE9SCisJICAgICYmIHNncC0+c2dfZ3VpX2JnID09IElOVkFMQ09MT1IKKwkgICAgJiYgc2dwLT5zZ19mb250ID09IE5PRk9OVAorIyBpZmRlZiBGRUFUX1hGT05UU0VUCisJICAgICYmIHNncC0+c2dfZm9udHNldCA9PSBOT0ZPTlRTRVQKKyMgZW5kaWYKKwkgICAgKQorICAgIHsKKwlzZ3AtPnNnX2d1aV9hdHRyID0gc2dwLT5zZ19ndWk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJYXRfZW4uYWVfYXR0ciA9IHNncC0+c2dfZ3VpOworCWF0X2VuLmFlX3UuZ3VpLmZnX2NvbG9yID0gc2dwLT5zZ19ndWlfZmc7CisJYXRfZW4uYWVfdS5ndWkuYmdfY29sb3IgPSBzZ3AtPnNnX2d1aV9iZzsKKwlhdF9lbi5hZV91Lmd1aS5mb250ID0gc2dwLT5zZ19mb250OworIyBpZmRlZiBGRUFUX1hGT05UU0VUCisJYXRfZW4uYWVfdS5ndWkuZm9udHNldCA9IHNncC0+c2dfZm9udHNldDsKKyMgZW5kaWYKKwlzZ3AtPnNnX2d1aV9hdHRyID0gZ2V0X2F0dHJfZW50cnkoJmd1aV9hdHRyX3RhYmxlLCAmYXRfZW4pOworICAgIH0KKyNlbmRpZgorICAgIC8qCisgICAgICogRm9yIHRoZSB0ZXJtIG1vZGU6IElmIHRoZXJlIGFyZSBvdGhlciB0aGFuICJub3JtYWwiIGhpZ2hsaWdodGluZworICAgICAqIGF0dHJpYnV0ZXMsIG5lZWQgdG8gYWxsb2NhdGUgYW4gYXR0ciBudW1iZXIuCisgICAgICovCisgICAgaWYgKHNncC0+c2dfc3RhcnQgPT0gTlVMTCAmJiBzZ3AtPnNnX3N0b3AgPT0gTlVMTCkKKwlzZ3AtPnNnX3Rlcm1fYXR0ciA9IHNncC0+c2dfdGVybTsKKyAgICBlbHNlCisgICAgeworCWF0X2VuLmFlX2F0dHIgPSBzZ3AtPnNnX3Rlcm07CisJYXRfZW4uYWVfdS50ZXJtLnN0YXJ0ID0gc2dwLT5zZ19zdGFydDsKKwlhdF9lbi5hZV91LnRlcm0uc3RvcCA9IHNncC0+c2dfc3RvcDsKKwlzZ3AtPnNnX3Rlcm1fYXR0ciA9IGdldF9hdHRyX2VudHJ5KCZ0ZXJtX2F0dHJfdGFibGUsICZhdF9lbik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3IgdGhlIGNvbG9yIHRlcm0gbW9kZTogSWYgdGhlcmUgYXJlIG90aGVyIHRoYW4gIm5vcm1hbCIKKyAgICAgKiBoaWdobGlnaHRpbmcgYXR0cmlidXRlcywgbmVlZCB0byBhbGxvY2F0ZSBhbiBhdHRyIG51bWJlci4KKyAgICAgKi8KKyAgICBpZiAoc2dwLT5zZ19jdGVybV9mZyA9PSAwICYmIHNncC0+c2dfY3Rlcm1fYmcgPT0gMCkKKwlzZ3AtPnNnX2N0ZXJtX2F0dHIgPSBzZ3AtPnNnX2N0ZXJtOworICAgIGVsc2UKKyAgICB7CisJYXRfZW4uYWVfYXR0ciA9IHNncC0+c2dfY3Rlcm07CisJYXRfZW4uYWVfdS5jdGVybS5mZ19jb2xvciA9IHNncC0+c2dfY3Rlcm1fZmc7CisJYXRfZW4uYWVfdS5jdGVybS5iZ19jb2xvciA9IHNncC0+c2dfY3Rlcm1fYmc7CisJc2dwLT5zZ19jdGVybV9hdHRyID0gZ2V0X2F0dHJfZW50cnkoJmN0ZXJtX2F0dHJfdGFibGUsICZhdF9lbik7CisgICAgfQorfQorCisvKgorICogTG9va3VwIGEgaGlnaGxpZ2h0IGdyb3VwIG5hbWUgYW5kIHJldHVybiBpdCdzIElELgorICogSWYgaXQgaXMgbm90IGZvdW5kLCAwIGlzIHJldHVybmVkLgorICovCisgICAgaW50CitzeW5fbmFtZTJpZChuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CW5hbWVfdVsyMDBdOworCisgICAgLyogQXZvaWQgdXNpbmcgc3RyaWNtcCgpIHRvbyBtdWNoLCBpdCdzIHNsb3cgb24gc29tZSBzeXN0ZW1zICovCisgICAgLyogQXZvaWQgYWxsb2MoKS9mcmVlKCksIHRoZXNlIGFyZSBzbG93IHRvby4gIElEIG5hbWVzIG92ZXIgMjAwIGNoYXJzCisgICAgICogZG9uJ3QgZGVzZXJ2ZSB0byBiZSBmb3VuZCEgKi8KKyAgICBTVFJOQ1BZKG5hbWVfdSwgbmFtZSwgMTk5KTsKKyAgICBuYW1lX3VbMTk5XSA9IE5VTDsKKyAgICB2aW1fc3RydXAobmFtZV91KTsKKyAgICBmb3IgKGkgPSBoaWdobGlnaHRfZ2EuZ2FfbGVuOyAtLWkgPj0gMDsgKQorCWlmIChITF9UQUJMRSgpW2ldLnNnX25hbWVfdSAhPSBOVUxMCisJCSYmIFNUUkNNUChuYW1lX3UsIEhMX1RBQkxFKClbaV0uc2dfbmFtZV91KSA9PSAwKQorCSAgICBicmVhazsKKyAgICByZXR1cm4gaSArIDE7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBoaWdobGlnaHQgZ3JvdXAgIm5hbWUiIGV4aXN0cy4KKyAqLworICAgIGludAoraGlnaGxpZ2h0X2V4aXN0cyhuYW1lKQorICAgIGNoYXJfdQkqbmFtZTsKK3sKKyAgICByZXR1cm4gKHN5bl9uYW1lMmlkKG5hbWUpID4gMCk7Cit9CisjZW5kaWYKKworLyoKKyAqIExpa2Ugc3luX25hbWUyaWQoKSwgYnV0IHRha2UgYSBwb2ludGVyICsgbGVuZ3RoIGFyZ3VtZW50LgorICovCisgICAgaW50CitzeW5fbmFtZW4yaWQobGluZXAsIGxlbikKKyAgICBjaGFyX3UgICpsaW5lcDsKKyAgICBpbnQJICAgIGxlbjsKK3sKKyAgICBjaGFyX3UgICpuYW1lOworICAgIGludAkgICAgaWQgPSAwOworCisgICAgbmFtZSA9IHZpbV9zdHJuc2F2ZShsaW5lcCwgbGVuKTsKKyAgICBpZiAobmFtZSAhPSBOVUxMKQorICAgIHsKKwlpZCA9IHN5bl9uYW1lMmlkKG5hbWUpOworCXZpbV9mcmVlKG5hbWUpOworICAgIH0KKyAgICByZXR1cm4gaWQ7Cit9CisKKy8qCisgKiBGaW5kIGhpZ2hsaWdodCBncm91cCBuYW1lIGluIHRoZSB0YWJsZSBhbmQgcmV0dXJuIGl0J3MgSUQuCisgKiBUaGUgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBuYW1lIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lLgorICogSWYgaXQgZG9lc24ndCBleGlzdCB5ZXQsIGEgbmV3IGVudHJ5IGlzIGNyZWF0ZWQuCisgKiBSZXR1cm4gMCBmb3IgZmFpbHVyZS4KKyAqLworICAgIGludAorc3luX2NoZWNrX2dyb3VwKHBwLCBsZW4pCisgICAgY2hhcl91CQkqcHA7CisgICAgaW50CQkJbGVuOworeworICAgIGludAkgICAgaWQ7CisgICAgY2hhcl91ICAqbmFtZTsKKworICAgIG5hbWUgPSB2aW1fc3RybnNhdmUocHAsIGxlbik7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkKKwlyZXR1cm4gMDsKKworICAgIGlkID0gc3luX25hbWUyaWQobmFtZSk7CisgICAgaWYgKGlkID09IDApCQkJLyogZG9lc24ndCBleGlzdCB5ZXQgKi8KKwlpZCA9IHN5bl9hZGRfZ3JvdXAobmFtZSk7CisgICAgZWxzZQorCXZpbV9mcmVlKG5hbWUpOworICAgIHJldHVybiBpZDsKK30KKworLyoKKyAqIEFkZCBuZXcgaGlnaGxpZ2h0IGdyb3VwIGFuZCByZXR1cm4gaXQncyBJRC4KKyAqICJuYW1lIiBtdXN0IGJlIGFuIGFsbG9jYXRlZCBzdHJpbmcsIGl0IHdpbGwgYmUgY29uc3VtZWQuCisgKiBSZXR1cm4gMCBmb3IgZmFpbHVyZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK3N5bl9hZGRfZ3JvdXAobmFtZSkKKyAgICBjaGFyX3UJKm5hbWU7Cit7CisgICAgY2hhcl91CSpwOworCisgICAgLyogQ2hlY2sgdGhhdCB0aGUgbmFtZSBpcyBBU0NJSSBsZXR0ZXJzLCBkaWdpdHMgYW5kIHVuZGVyc2NvcmUuICovCisgICAgZm9yIChwID0gbmFtZTsgKnAgIT0gTlVMOyArK3ApCisgICAgeworCWlmICghdmltX2lzcHJpbnRjKCpwKSkKKwl7CisJICAgIEVNU0coXygiRTY2OTogVW5wcmludGFibGUgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUiKSk7CisJICAgIHJldHVybiAwOworCX0KKwllbHNlIGlmICghQVNDSUlfSVNBTE5VTSgqcCkgJiYgKnAgIT0gJ18nKQorCXsKKwkgICAgLyogVGhpcyBpcyBhbiBlcnJvciwgYnV0IHNpbmNlIHRoZXJlIHByZXZpb3VzbHkgd2FzIG5vIGNoZWNrIG9ubHkKKwkgICAgICogZ2l2ZSBhIHdhcm5pbmcuICovCisJICAgIE1TRyhfKCJXMTg6IEludmFsaWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUiKSk7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpcnN0IGNhbGwgZm9yIHRoaXMgZ3Jvd2FycmF5OiBpbml0IGdyb3dpbmcgYXJyYXkuCisgICAgICovCisgICAgaWYgKGhpZ2hsaWdodF9nYS5nYV9kYXRhID09IE5VTEwpCisgICAgeworCWhpZ2hsaWdodF9nYS5nYV9pdGVtc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGxfZ3JvdXApOworCWhpZ2hsaWdodF9nYS5nYV9ncm93c2l6ZSA9IDEwOworICAgIH0KKworICAgIC8qCisgICAgICogTWFrZSByb29tIGZvciBhdCBsZWFzdCBvbmUgb3RoZXIgc3ludGF4X2hpZ2hsaWdodCBlbnRyeS4KKyAgICAgKi8KKyAgICBpZiAoZ2FfZ3JvdygmaGlnaGxpZ2h0X2dhLCAxKSA9PSBGQUlMKQorICAgIHsKKwl2aW1fZnJlZShuYW1lKTsKKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgICB2aW1fbWVtc2V0KCYoSExfVEFCTEUoKVtoaWdobGlnaHRfZ2EuZ2FfbGVuXSksIDAsIHNpemVvZihzdHJ1Y3QgaGxfZ3JvdXApKTsKKyAgICBITF9UQUJMRSgpW2hpZ2hsaWdodF9nYS5nYV9sZW5dLnNnX25hbWUgPSBuYW1lOworICAgIEhMX1RBQkxFKClbaGlnaGxpZ2h0X2dhLmdhX2xlbl0uc2dfbmFtZV91ID0gdmltX3N0cnNhdmVfdXAobmFtZSk7CisjaWZkZWYgRkVBVF9HVUkKKyAgICBITF9UQUJMRSgpW2hpZ2hsaWdodF9nYS5nYV9sZW5dLnNnX2d1aV9iZyA9IElOVkFMQ09MT1I7CisgICAgSExfVEFCTEUoKVtoaWdobGlnaHRfZ2EuZ2FfbGVuXS5zZ19ndWlfZmcgPSBJTlZBTENPTE9SOworI2VuZGlmCisgICAgKytoaWdobGlnaHRfZ2EuZ2FfbGVuOworICAgIC0taGlnaGxpZ2h0X2dhLmdhX3Jvb207CisKKyAgICByZXR1cm4gaGlnaGxpZ2h0X2dhLmdhX2xlbjsJCSAgICAvKiBJRCBpcyBpbmRleCBwbHVzIG9uZSAqLworfQorCisvKgorICogV2hlbiwganVzdCBhZnRlciBjYWxsaW5nIHN5bl9hZGRfZ3JvdXAoKSwgYW4gZXJyb3IgaXMgZGlzY292ZXJlZCwgdGhpcworICogZnVuY3Rpb24gZGVsZXRlcyB0aGUgbmV3IG5hbWUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc3luX3VuYWRkX2dyb3VwKCkKK3sKKyAgICAtLWhpZ2hsaWdodF9nYS5nYV9sZW47CisgICAgKytoaWdobGlnaHRfZ2EuZ2Ffcm9vbTsKKyAgICB2aW1fZnJlZShITF9UQUJMRSgpW2hpZ2hsaWdodF9nYS5nYV9sZW5dLnNnX25hbWUpOworICAgIHZpbV9mcmVlKEhMX1RBQkxFKClbaGlnaGxpZ2h0X2dhLmdhX2xlbl0uc2dfbmFtZV91KTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhIGdyb3VwIElEIHRvIGhpZ2hsaWdodCBhdHRyaWJ1dGVzLgorICovCisgICAgaW50CitzeW5faWQyYXR0cihobF9pZCkKKyAgICBpbnQJCQlobF9pZDsKK3sKKyAgICBpbnQJCQlhdHRyOworICAgIHN0cnVjdCBobF9ncm91cAkqc2dwOworCisgICAgaGxfaWQgPSBzeW5fZ2V0X2ZpbmFsX2lkKGhsX2lkKTsKKyAgICBzZ3AgPSAmSExfVEFCTEUoKVtobF9pZCAtIDFdOwkgICAgLyogaW5kZXggaXMgSUQgbWludXMgb25lICovCisKKyNpZmRlZiBGRUFUX0dVSQorICAgIC8qCisgICAgICogT25seSB1c2UgR1VJIGF0dHIgd2hlbiB0aGUgR1VJIGlzIGJlaW5nIHVzZWQuCisgICAgICovCisgICAgaWYgKGd1aS5pbl91c2UpCisJYXR0ciA9IHNncC0+c2dfZ3VpX2F0dHI7CisgICAgZWxzZQorI2VuZGlmCisJaWYgKHRfY29sb3JzID4gMSkKKwkgICAgYXR0ciA9IHNncC0+c2dfY3Rlcm1fYXR0cjsKKwllbHNlCisJICAgIGF0dHIgPSBzZ3AtPnNnX3Rlcm1fYXR0cjsKKworICAgIHJldHVybiBhdHRyOworfQorCisjaWZkZWYgRkVBVF9HVUkKKy8qCisgKiBHZXQgdGhlIEdVSSBjb2xvcnMgYW5kIGF0dHJpYnV0ZXMgZm9yIGEgZ3JvdXAgSUQuCisgKiBOT1RFOiB0aGUgY29sb3JzIHdpbGwgYmUgSU5WQUxDT0xPUiB3aGVuIG5vdCBzZXQsIHRoZSBjb2xvciBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK3N5bl9pZDJjb2xvcnMoaGxfaWQsIGZncCwgYmdwKQorICAgIGludAkJaGxfaWQ7CisgICAgZ3VpY29sb3JfVAkqZmdwOworICAgIGd1aWNvbG9yX1QJKmJncDsKK3sKKyAgICBzdHJ1Y3QgaGxfZ3JvdXAJKnNncDsKKworICAgIGhsX2lkID0gc3luX2dldF9maW5hbF9pZChobF9pZCk7CisgICAgc2dwID0gJkhMX1RBQkxFKClbaGxfaWQgLSAxXTsJICAgIC8qIGluZGV4IGlzIElEIG1pbnVzIG9uZSAqLworCisgICAgKmZncCA9IHNncC0+c2dfZ3VpX2ZnOworICAgICpiZ3AgPSBzZ3AtPnNnX2d1aV9iZzsKKyAgICByZXR1cm4gc2dwLT5zZ19ndWk7Cit9CisjZW5kaWYKKworLyoKKyAqIFRyYW5zbGF0ZSBhIGdyb3VwIElEIHRvIHRoZSBmaW5hbCBncm91cCBJRCAoZm9sbG93aW5nIGxpbmtzKS4KKyAqLworICAgIGludAorc3luX2dldF9maW5hbF9pZChobF9pZCkKKyAgICBpbnQJCQlobF9pZDsKK3sKKyAgICBpbnQJCQljb3VudDsKKyAgICBzdHJ1Y3QgaGxfZ3JvdXAJKnNncDsKKworICAgIGlmIChobF9pZCA+IGhpZ2hsaWdodF9nYS5nYV9sZW4gfHwgaGxfaWQgPCAxKQorCXJldHVybiAwOwkJCS8qIENhbiBiZSBjYWxsZWQgZnJvbSBldmFsISEgKi8KKworICAgIC8qCisgICAgICogRm9sbG93IGxpbmtzIHVudGlsIHRoZXJlIGlzIG5vIG1vcmUuCisgICAgICogTG9vayBvdXQgZm9yIGxvb3BzISAgQnJlYWsgYWZ0ZXIgMTAwIGxpbmtzLgorICAgICAqLworICAgIGZvciAoY291bnQgPSAxMDA7IC0tY291bnQgPj0gMDsgKQorICAgIHsKKwlzZ3AgPSAmSExfVEFCTEUoKVtobF9pZCAtIDFdOwkgICAgLyogaW5kZXggaXMgSUQgbWludXMgb25lICovCisJaWYgKHNncC0+c2dfbGluayA9PSAwIHx8IHNncC0+c2dfbGluayA+IGhpZ2hsaWdodF9nYS5nYV9sZW4pCisJICAgIGJyZWFrOworCWhsX2lkID0gc2dwLT5zZ19saW5rOworICAgIH0KKworICAgIHJldHVybiBobF9pZDsKK30KKworI2lmZGVmIEZFQVRfR1VJCisvKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGp1c3QgYWZ0ZXIgdGhlIEdVSSBoYXMgc3RhcnRlZC4KKyAqIEl0IGZpbmRzIHRoZSBmb250IGFuZCBjb2xvciBoYW5kbGVzIGZvciB0aGUgaGlnaGxpZ2h0aW5nIGdyb3Vwcy4KKyAqLworICAgIHZvaWQKK2hpZ2hsaWdodF9ndWlfc3RhcnRlZCgpCit7CisgICAgaW50CSAgICBpZHg7CisKKyAgICAvKiBGaXJzdCBnZXQgdGhlIGNvbG9ycyBmcm9tIHRoZSAiTm9ybWFsIiBhbmQgIk1lbnUiIGdyb3VwLCBpZiBzZXQgKi8KKyAgICBzZXRfbm9ybWFsX2NvbG9ycygpOworCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBoaWdobGlnaHRfZ2EuZ2FfbGVuOyArK2lkeCkKKwlndWlfZG9fb25lX2NvbG9yKGlkeCwgRkFMU0UsIEZBTFNFKTsKKworICAgIGhpZ2hsaWdodF9jaGFuZ2VkKCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorZ3VpX2RvX29uZV9jb2xvcihpZHgsIGRvX21lbnUsIGRvX3Rvb2x0aXApCisgICAgaW50CQlpZHg7CisgICAgaW50CQlkb19tZW51OwkvKiBUUlVFOiBtaWdodCBzZXQgdGhlIG1lbnUgZm9udCAqLworICAgIGludAkJZG9fdG9vbHRpcDsJLyogVFJVRTogbWlnaHQgc2V0IHRoZSB0b29sdGlwIGZvbnQgKi8KK3sKKyAgICBpbnQJCWRpZGl0ID0gRkFMU0U7CisKKyAgICBpZiAoSExfVEFCTEUoKVtpZHhdLnNnX2ZvbnRfbmFtZSAhPSBOVUxMKQorICAgIHsKKwlobF9kb19mb250KGlkeCwgSExfVEFCTEUoKVtpZHhdLnNnX2ZvbnRfbmFtZSwgRkFMU0UsIGRvX21lbnUsCisJCSAgIGRvX3Rvb2x0aXApOworCWRpZGl0ID0gVFJVRTsKKyAgICB9CisgICAgaWYgKEhMX1RBQkxFKClbaWR4XS5zZ19ndWlfZmdfbmFtZSAhPSBOVUxMKQorICAgIHsKKwlITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2ZnID0KKwkJCSAgICBjb2xvcl9uYW1lMmhhbmRsZShITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2ZnX25hbWUpOworCWRpZGl0ID0gVFJVRTsKKyAgICB9CisgICAgaWYgKEhMX1RBQkxFKClbaWR4XS5zZ19ndWlfYmdfbmFtZSAhPSBOVUxMKQorICAgIHsKKwlITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2JnID0KKwkJCSAgICBjb2xvcl9uYW1lMmhhbmRsZShITF9UQUJMRSgpW2lkeF0uc2dfZ3VpX2JnX25hbWUpOworCWRpZGl0ID0gVFJVRTsKKyAgICB9CisgICAgaWYgKGRpZGl0KQkvKiBuZWVkIHRvIGdldCBhIG5ldyBhdHRyIG51bWJlciAqLworCXNldF9obF9hdHRyKGlkeCk7Cit9CisKKyNlbmRpZgorCisvKgorICogVHJhbnNsYXRlIHRoZSAnaGlnaGxpZ2h0JyBvcHRpb24gaW50byBhdHRyaWJ1dGVzIGluIGhpZ2hsaWdodF9hdHRyW10gYW5kCisgKiBzZXQgdXAgdGhlIHVzZXIgaGlnaGxpZ2h0cyBVc2VyMS4uOS4gIElmIEZFQVRfU1RMX09QVCBpcyBpbiB1c2UsIGEgc2V0IG9mCisgKiBjb3JyZXNwb25kaW5nIGhpZ2hsaWdodHMgdG8gdXNlIG9uIHRvcCBvZiBITEZfU05DIGlzIGNvbXB1dGVkLgorICogQ2FsbGVkIG9ubHkgd2hlbiB0aGUgJ2hpZ2hsaWdodCcgb3B0aW9uIGhhcyBiZWVuIGNoYW5nZWQgYW5kIHVwb24gZmlyc3QKKyAqIHNjcmVlbiByZWRyYXcgYWZ0ZXIgYW55IDpoaWdobGlnaHQgY29tbWFuZC4KKyAqIFJldHVybiBGQUlMIHdoZW4gYW4gaW52YWxpZCBmbGFnIGlzIGZvdW5kIGluICdoaWdobGlnaHQnLiAgT0sgb3RoZXJ3aXNlLgorICovCisgICAgaW50CitoaWdobGlnaHRfY2hhbmdlZCgpCit7CisgICAgaW50CQlobGY7CisgICAgaW50CQlpOworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWF0dHI7CisgICAgY2hhcl91CSplbmQ7CisgICAgaW50CQlpZDsKKyNpZmRlZiBVU0VSX0hJR0hMSUdIVAorICAgIGNoYXJfdSAgICAgIHVzZXJobFsxMF07CisjIGlmZGVmIEZFQVRfU1RMX09QVAorICAgIGludAkJaWRfU05DID0gLTE7CisgICAgaW50CQlpZF9TID0gLTE7CisgICAgaW50CQlobGNudDsKKyMgZW5kaWYKKyNlbmRpZgorICAgIHN0YXRpYyBpbnQJaGxfZmxhZ3NbSExGX0NPVU5UXSA9IEhMX0ZMQUdTOworCisgICAgbmVlZF9oaWdobGlnaHRfY2hhbmdlZCA9IEZBTFNFOworCisgICAgLyoKKyAgICAgKiBDbGVhciBhbGwgYXR0cmlidXRlcy4KKyAgICAgKi8KKyAgICBmb3IgKGhsZiA9IDA7IGhsZiA8IChpbnQpSExGX0NPVU5UOyArK2hsZikKKwloaWdobGlnaHRfYXR0cltobGZdID0gMDsKKworICAgIC8qCisgICAgICogRmlyc3Qgc2V0IGFsbCBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWUuCisgICAgICogVGhlbiB1c2UgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgJ2hpZ2hsaWdodCcgb3B0aW9uLgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCAyOyArK2kpCisgICAgeworCWlmIChpKQorCSAgICBwID0gcF9obDsKKwllbHNlCisJICAgIHAgPSBnZXRfaGlnaGxpZ2h0X2RlZmF1bHQoKTsKKwlpZiAocCA9PSBOVUxMKQkgICAgLyoganVzdCBpbiBjYXNlICovCisJICAgIGNvbnRpbnVlOworCisJd2hpbGUgKCpwKQorCXsKKwkgICAgZm9yIChobGYgPSAwOyBobGYgPCAoaW50KUhMRl9DT1VOVDsgKytobGYpCisJCWlmIChobF9mbGFnc1tobGZdID09ICpwKQorCQkgICAgYnJlYWs7CisJICAgICsrcDsKKwkgICAgaWYgKGhsZiA9PSAoaW50KUhMRl9DT1VOVCB8fCAqcCA9PSBOVUwpCisJCXJldHVybiBGQUlMOworCisJICAgIC8qCisJICAgICAqIEFsbG93IHNldmVyYWwgaGxfZmxhZ3MgdG8gYmUgY29tYmluZWQsIGxpa2UgImJ1IiBmb3IKKwkgICAgICogYm9sZC11bmRlcmxpbmVkLgorCSAgICAgKi8KKwkgICAgYXR0ciA9IDA7CisJICAgIGZvciAoIDsgKnAgJiYgKnAgIT0gJywnOyArK3ApCSAgICAvKiBwYXJzZSB1cHRvIGNvbW1hICovCisJICAgIHsKKwkJaWYgKHZpbV9pc3doaXRlKCpwKSkJCSAgICAvKiBpZ25vcmUgd2hpdGUgc3BhY2UgKi8KKwkJICAgIGNvbnRpbnVlOworCisJCWlmIChhdHRyID4gSExfQUxMKSAgLyogQ29tYmluYXRpb24gd2l0aCAnOicgaXMgbm90IGFsbG93ZWQuICovCisJCSAgICByZXR1cm4gRkFJTDsKKworCQlzd2l0Y2ggKCpwKQorCQl7CisJCSAgICBjYXNlICdiJzoJYXR0ciB8PSBITF9CT0xEOworCQkJCWJyZWFrOworCQkgICAgY2FzZSAnaSc6CWF0dHIgfD0gSExfSVRBTElDOworCQkJCWJyZWFrOworCQkgICAgY2FzZSAnLSc6CisJCSAgICBjYXNlICduJzoJCQkgICAgLyogbm8gaGlnaGxpZ2h0aW5nICovCisJCQkJYnJlYWs7CisJCSAgICBjYXNlICdyJzoJYXR0ciB8PSBITF9JTlZFUlNFOworCQkJCWJyZWFrOworCQkgICAgY2FzZSAncyc6CWF0dHIgfD0gSExfU1RBTkRPVVQ7CisJCQkJYnJlYWs7CisJCSAgICBjYXNlICd1JzoJYXR0ciB8PSBITF9VTkRFUkxJTkU7CisJCQkJYnJlYWs7CisJCSAgICBjYXNlICc6JzoJKytwOwkJICAgIC8qIGhpZ2hsaWdodCBncm91cCBuYW1lICovCisJCQkJaWYgKGF0dHIgfHwgKnAgPT0gTlVMKQkgLyogbm8gY29tYmluYXRpb25zICovCisJCQkJICAgIHJldHVybiBGQUlMOworCQkJCWVuZCA9IHZpbV9zdHJjaHIocCwgJywnKTsKKwkJCQlpZiAoZW5kID09IE5VTEwpCisJCQkJICAgIGVuZCA9IHAgKyBTVFJMRU4ocCk7CisJCQkJaWQgPSBzeW5fY2hlY2tfZ3JvdXAocCwgKGludCkoZW5kIC0gcCkpOworCQkJCWlmIChpZCA9PSAwKQorCQkJCSAgICByZXR1cm4gRkFJTDsKKwkJCQlhdHRyID0gc3luX2lkMmF0dHIoaWQpOworCQkJCXAgPSBlbmQgLSAxOworI2lmIGRlZmluZWQoRkVBVF9TVExfT1BUKSAmJiBkZWZpbmVkKFVTRVJfSElHSExJR0hUKQorCQkJCWlmIChobGYgPT0gKGludClITEZfU05DKQorCQkJCSAgICBpZF9TTkMgPSBzeW5fZ2V0X2ZpbmFsX2lkKGlkKTsKKwkJCQllbHNlIGlmIChobGYgPT0gKGludClITEZfUykKKwkJCQkgICAgaWRfUyA9IHN5bl9nZXRfZmluYWxfaWQoaWQpOworI2VuZGlmCisJCQkJYnJlYWs7CisJCSAgICBkZWZhdWx0OglyZXR1cm4gRkFJTDsKKwkJfQorCSAgICB9CisJICAgIGhpZ2hsaWdodF9hdHRyW2hsZl0gPSBhdHRyOworCisJICAgIHAgPSBza2lwX3RvX29wdGlvbl9wYXJ0KHApOwkgICAgLyogc2tpcCBjb21tYSBhbmQgc3BhY2VzICovCisJfQorICAgIH0KKworI2lmZGVmIFVTRVJfSElHSExJR0hUCisgICAgLyogU2V0dXAgdGhlIHVzZXIgaGlnaGxpZ2h0cworICAgICAqCisgICAgICogVGVtcG9yYXJpbHkgIHV0aWxpemUgMTAgbW9yZSBobCBlbnRyaWVzLiAgSGF2ZSB0byBiZSBpbiB0aGVyZQorICAgICAqIHNpbXVsdGFuZW91c2x5IGluIGNhc2Ugb2YgdGFibGUgb3ZlcmZsb3dzIGluIGdldF9hdHRyX2VudHJ5KCkKKyAgICAgKi8KKyMgaWZkZWYgRkVBVF9TVExfT1BUCisgICAgaWYgKGdhX2dyb3coJmhpZ2hsaWdodF9nYSwgMTApID09IEZBSUwpCisJcmV0dXJuIEZBSUw7CisgICAgaGxjbnQgPSBoaWdobGlnaHRfZ2EuZ2FfbGVuOworICAgIGlmIChpZF9TID09IDApCisgICAgewkJICAgIC8qIE1ha2Ugc3VyZSBpZF9TIGlzIGFsd2F5cyB2YWxpZCB0byBzaW1wbGlmeSBjb2RlIGJlbG93ICovCisJbWVtc2V0KCZITF9UQUJMRSgpW2hsY250ICsgOV0sIDAsIHNpemVvZihzdHJ1Y3QgaGxfZ3JvdXApKTsKKwlITF9UQUJMRSgpW2hsY250ICsgOV0uc2dfdGVybSA9IGhpZ2hsaWdodF9hdHRyW0hMRl9TXTsKKwlpZF9TID0gaGxjbnQgKyAxMDsKKyAgICB9CisjIGVuZGlmCisgICAgZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKyAgICB7CisJc3ByaW50ZigoY2hhciAqKXVzZXJobCwgIlVzZXIlZCIsIGkgKyAxKTsKKwlpZCA9IHN5bl9uYW1lMmlkKHVzZXJobCk7CisJaWYgKGlkID09IDApCisJeworCSAgICBoaWdobGlnaHRfdXNlcltpXSA9IDA7CisjIGlmZGVmIEZFQVRfU1RMX09QVAorCSAgICBoaWdobGlnaHRfc3RsbmNbaV0gPSAwOworIyBlbmRpZgorCX0KKwllbHNlCisJeworIyBpZmRlZiBGRUFUX1NUTF9PUFQKKwkgICAgc3RydWN0IGhsX2dyb3VwICpobHQgPSBITF9UQUJMRSgpOworIyBlbmRpZgorCisJICAgIGhpZ2hsaWdodF91c2VyW2ldID0gc3luX2lkMmF0dHIoaWQpOworIyBpZmRlZiBGRUFUX1NUTF9PUFQKKwkgICAgaWYgKGlkX1NOQyA9PSAwKQorCSAgICB7CisJCW1lbXNldCgmaGx0W2hsY250ICsgaV0sIDAsIHNpemVvZihzdHJ1Y3QgaGxfZ3JvdXApKTsKKwkJaGx0W2hsY250ICsgaV0uc2dfdGVybSA9IGhpZ2hsaWdodF9hdHRyW0hMRl9TTkNdOworCQlobHRbaGxjbnQgKyBpXS5zZ19jdGVybSA9IGhpZ2hsaWdodF9hdHRyW0hMRl9TTkNdOworIyAgaWZkZWYgRkVBVF9HVUkKKwkJaGx0W2hsY250ICsgaV0uc2dfZ3VpID0gaGlnaGxpZ2h0X2F0dHJbSExGX1NOQ107CisjICBlbmRpZgorCSAgICB9CisJICAgIGVsc2UKKwkJbWNoX21lbW1vdmUoJmhsdFtobGNudCArIGldLAorCQkJICAgICZobHRbaWRfU05DIC0gMV0sCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBobF9ncm91cCkpOworCSAgICBobHRbaGxjbnQgKyBpXS5zZ19saW5rID0gMDsKKworCSAgICAvKiBBcHBseSBkaWZmZXJlbmNlIGJldHdlZW4gVXNlclggYW5kIEhMRl9TIHRvIEhMRl9TTkMgKi8KKwkgICAgaGx0W2hsY250ICsgaV0uc2dfdGVybSBePQorCQlobHRbaWQgLSAxXS5zZ190ZXJtIF4gaGx0W2lkX1MgLSAxXS5zZ190ZXJtOworCSAgICBpZiAoaGx0W2lkIC0gMV0uc2dfc3RhcnQgIT0gaGx0W2lkX1MgLSAxXS5zZ19zdGFydCkKKwkJaGx0W2hsY250ICsgaV0uc2dfc3RhcnQgPSBobHRbaWQgLSAxXS5zZ19zdGFydDsKKwkgICAgaWYgKGhsdFtpZCAtIDFdLnNnX3N0b3AgIT0gaGx0W2lkX1MgLSAxXS5zZ19zdG9wKQorCQlobHRbaGxjbnQgKyBpXS5zZ19zdG9wID0gaGx0W2lkIC0gMV0uc2dfc3RvcDsKKwkgICAgaGx0W2hsY250ICsgaV0uc2dfY3Rlcm0gXj0KKwkJaGx0W2lkIC0gMV0uc2dfY3Rlcm0gXiBobHRbaWRfUyAtIDFdLnNnX2N0ZXJtOworCSAgICBpZiAoaGx0W2lkIC0gMV0uc2dfY3Rlcm1fZmcgIT0gaGx0W2lkX1MgLSAxXS5zZ19jdGVybV9mZykKKwkJaGx0W2hsY250ICsgaV0uc2dfY3Rlcm1fZmcgPSBobHRbaWQgLSAxXS5zZ19jdGVybV9mZzsKKwkgICAgaWYgKGhsdFtpZCAtIDFdLnNnX2N0ZXJtX2JnICE9IGhsdFtpZF9TIC0gMV0uc2dfY3Rlcm1fYmcpCisJCWhsdFtobGNudCArIGldLnNnX2N0ZXJtX2JnID0gaGx0W2lkIC0gMV0uc2dfY3Rlcm1fYmc7CisjICBpZmRlZiBGRUFUX0dVSQorCSAgICBobHRbaGxjbnQgKyBpXS5zZ19ndWkgXj0KKwkJaGx0W2lkIC0gMV0uc2dfZ3VpIF4gaGx0W2lkX1MgLSAxXS5zZ19ndWk7CisJICAgIGlmIChobHRbaWQgLSAxXS5zZ19ndWlfZmcgIT0gaGx0W2lkX1MgLSAxXS5zZ19ndWlfZmcpCisJCWhsdFtobGNudCArIGldLnNnX2d1aV9mZyA9IGhsdFtpZCAtIDFdLnNnX2d1aV9mZzsKKwkgICAgaWYgKGhsdFtpZCAtIDFdLnNnX2d1aV9iZyAhPSBobHRbaWRfUyAtIDFdLnNnX2d1aV9iZykKKwkJaGx0W2hsY250ICsgaV0uc2dfZ3VpX2JnID0gaGx0W2lkIC0gMV0uc2dfZ3VpX2JnOworCSAgICBpZiAoaGx0W2lkIC0gMV0uc2dfZm9udCAhPSBobHRbaWRfUyAtIDFdLnNnX2ZvbnQpCisJCWhsdFtobGNudCArIGldLnNnX2ZvbnQgPSBobHRbaWQgLSAxXS5zZ19mb250OworIyAgIGlmZGVmIEZFQVRfWEZPTlRTRVQKKwkgICAgaWYgKGhsdFtpZCAtIDFdLnNnX2ZvbnRzZXQgIT0gaGx0W2lkX1MgLSAxXS5zZ19mb250c2V0KQorCQlobHRbaGxjbnQgKyBpXS5zZ19mb250c2V0ID0gaGx0W2lkIC0gMV0uc2dfZm9udHNldDsKKyMgICBlbmRpZgorIyAgZW5kaWYKKwkgICAgaGlnaGxpZ2h0X2dhLmdhX2xlbiA9IGhsY250ICsgaSArIDE7CisJICAgIHNldF9obF9hdHRyKGhsY250ICsgaSk7CS8qIEF0IGxvbmcgbGFzdCB3ZSBjYW4gYXBwbHkgKi8KKwkgICAgaGlnaGxpZ2h0X3N0bG5jW2ldID0gc3luX2lkMmF0dHIoaGxjbnQgKyBpICsgMSk7CisjIGVuZGlmCisJfQorICAgIH0KKyMgaWZkZWYgRkVBVF9TVExfT1BUCisgICAgaGlnaGxpZ2h0X2dhLmdhX2xlbiA9IGhsY250OworIyBlbmRpZgorCisjZW5kaWYgLyogVVNFUl9ISUdITElHSFQgKi8KKworICAgIHJldHVybiBPSzsKK30KKworI2lmZGVmIEZFQVRfQ01ETF9DT01QTAorCitzdGF0aWMgdm9pZCBoaWdobGlnaHRfbGlzdCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIGhpZ2hsaWdodF9saXN0X3R3byBfX0FSR1MoKGludCBjbnQsIGludCBhdHRyKSk7CisKKy8qCisgKiBIYW5kbGUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yIDpoaWdobGlnaHQgY29tbWFuZC4KKyAqLworICAgIHZvaWQKK3NldF9jb250ZXh0X2luX2hpZ2hsaWdodF9jbWQoeHAsIGFyZykKKyAgICBleHBhbmRfVAkqeHA7CisgICAgY2hhcl91CSphcmc7Cit7CisgICAgY2hhcl91CSpwOworCisgICAgLyogRGVmYXVsdDogZXhwYW5kIGdyb3VwIG5hbWVzICovCisgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfSElHSExJR0hUOworICAgIHhwLT54cF9wYXR0ZXJuID0gYXJnOworICAgIGluY2x1ZGVfbGluayA9IFRSVUU7CisgICAgaW5jbHVkZV9kZWZhdWx0ID0gVFJVRTsKKworICAgIC8qIChwYXJ0IG9mKSBzdWJjb21tYW5kIGFscmVhZHkgdHlwZWQgKi8KKyAgICBpZiAoKmFyZyAhPSBOVUwpCisgICAgeworCXAgPSBza2lwdG93aGl0ZShhcmcpOworCWlmICgqcCAhPSBOVUwpCQkJLyogcGFzdCAiZGVmYXVsdCIgb3IgZ3JvdXAgbmFtZSAqLworCXsKKwkgICAgaW5jbHVkZV9kZWZhdWx0ID0gRkFMU0U7CisJICAgIGlmIChTVFJOQ01QKCJkZWZhdWx0IiwgYXJnLCBwIC0gYXJnKSA9PSAwKQorCSAgICB7CisJCWFyZyA9IHNraXB3aGl0ZShwKTsKKwkJeHAtPnhwX3BhdHRlcm4gPSBhcmc7CisJCXAgPSBza2lwdG93aGl0ZShhcmcpOworCSAgICB9CisJICAgIGlmICgqcCAhPSBOVUwpCQkJLyogcGFzdCBncm91cCBuYW1lICovCisJICAgIHsKKwkJaW5jbHVkZV9saW5rID0gRkFMU0U7CisJCWlmIChhcmdbMV0gPT0gJ2knICYmIGFyZ1swXSA9PSAnTicpCisJCSAgICBoaWdobGlnaHRfbGlzdCgpOworCQlpZiAoU1RSTkNNUCgibGluayIsIGFyZywgcCAtIGFyZykgPT0gMAorCQkJfHwgU1RSTkNNUCgiY2xlYXIiLCBhcmcsIHAgLSBhcmcpID09IDApCisJCXsKKwkJICAgIHhwLT54cF9wYXR0ZXJuID0gc2tpcHdoaXRlKHApOworCQkgICAgcCA9IHNraXB0b3doaXRlKHhwLT54cF9wYXR0ZXJuKTsKKwkJICAgIGlmICgqcCAhPSBOVUwpCQkvKiBwYXN0IGZpcnN0IGdyb3VwIG5hbWUgKi8KKwkJICAgIHsKKwkJCXhwLT54cF9wYXR0ZXJuID0gc2tpcHdoaXRlKHApOworCQkJcCA9IHNraXB0b3doaXRlKHhwLT54cF9wYXR0ZXJuKTsKKwkJICAgIH0KKwkJfQorCQlpZiAoKnAgIT0gTlVMKQkJCS8qIHBhc3QgZ3JvdXAgbmFtZShzKSAqLworCQkgICAgeHAtPnhwX2NvbnRleHQgPSBFWFBBTkRfTk9USElORzsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8qCisgKiBMaXN0IGhpZ2hsaWdodGluZyBtYXRjaGVzIGluIGEgbmljZSB3YXkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAoraGlnaGxpZ2h0X2xpc3QoKQoreworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IDEwOyAtLWkgPj0gMDsgKQorCWhpZ2hsaWdodF9saXN0X3R3byhpLCBobF9hdHRyKEhMRl9EKSk7CisgICAgZm9yIChpID0gNDA7IC0taSA+PSAwOyApCisJaGlnaGxpZ2h0X2xpc3RfdHdvKDk5LCAwKTsKK30KKworICAgIHN0YXRpYyB2b2lkCitoaWdobGlnaHRfbGlzdF90d28oY250LCBhdHRyKQorICAgIGludAkgICAgY250OworICAgIGludAkgICAgYXR0cjsKK3sKKyAgICBtc2dfcHV0c19hdHRyKChjaGFyX3UgKikoIk4gXGJJIFxiISAgXGIiICsgY250IC8gMTEpLCBhdHRyKTsKKyAgICBtc2dfY2xyX2VvcygpOworICAgIG91dF9mbHVzaCgpOworICAgIHVpX2RlbGF5KGNudCA9PSA5OSA/IDQwTCA6IChsb25nKWNudCAqIDUwTCwgRkFMU0UpOworfQorCisjZW5kaWYgLyogRkVBVF9DTURMX0NPTVBMICovCisKKyNpZiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkgfHwgKGRlZmluZWQoRkVBVF9TWU5fSEwpICYmIGRlZmluZWQoRkVBVF9FVkFMKSkgXAorICAgIHx8IGRlZmluZWQoRkVBVF9TSUdOUykgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBGdW5jdGlvbiBnaXZlbiB0byBFeHBhbmRHZW5lcmljKCkgdG8gb2J0YWluIHRoZSBsaXN0IG9mIGdyb3VwIG5hbWVzLgorICogQWxzbyB1c2VkIGZvciBzeW5JRGF0dHIoKSBmdW5jdGlvbi4KKyAqLworLypBUkdTVVNFRCovCisgICAgY2hhcl91ICoKK2dldF9oaWdobGlnaHRfbmFtZSh4cCwgaWR4KQorICAgIGV4cGFuZF9UCSp4cDsKKyAgICBpbnQJCWlkeDsKK3sKKyAgICBpZiAoaWR4ID09IGhpZ2hsaWdodF9nYS5nYV9sZW4KKyNpZmRlZiBGRUFUX0NNRExfQ09NUEwKKwkgICAgJiYgaW5jbHVkZV9saW5rCisjZW5kaWYKKwkgICAgKQorCXJldHVybiAoY2hhcl91ICopImxpbmsiOworICAgIGlmIChpZHggPT0gaGlnaGxpZ2h0X2dhLmdhX2xlbiArIDEKKyNpZmRlZiBGRUFUX0NNRExfQ09NUEwKKwkgICAgJiYgaW5jbHVkZV9saW5rCisjZW5kaWYKKwkgICAgKQorCXJldHVybiAoY2hhcl91ICopImNsZWFyIjsKKyAgICBpZiAoaWR4ID09IGhpZ2hsaWdodF9nYS5nYV9sZW4gKyAyCisjaWZkZWYgRkVBVF9DTURMX0NPTVBMCisJICAgICYmIGluY2x1ZGVfZGVmYXVsdAorI2VuZGlmCisJICAgICkKKwlyZXR1cm4gKGNoYXJfdSAqKSJkZWZhdWx0IjsKKyAgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gaGlnaGxpZ2h0X2dhLmdhX2xlbikKKwlyZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gSExfVEFCTEUoKVtpZHhdLnNnX25hbWU7Cit9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJCisvKgorICogRnJlZSBhbGwgdGhlIGhpZ2hsaWdodCBncm91cCBmb250cy4KKyAqIFVzZWQgd2hlbiBxdWl0dGluZyBmb3Igc3lzdGVtcyB3aGljaCBuZWVkIGl0LgorICovCisgICAgdm9pZAorZnJlZV9oaWdobGlnaHRfZm9udHMoKQoreworICAgIGludAkgICAgaWR4OworCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBoaWdobGlnaHRfZ2EuZ2FfbGVuOyArK2lkeCkKKyAgICB7CisJZ3VpX21jaF9mcmVlX2ZvbnQoSExfVEFCTEUoKVtpZHhdLnNnX2ZvbnQpOworCUhMX1RBQkxFKClbaWR4XS5zZ19mb250ID0gTk9GT05UOworIyBpZmRlZiBGRUFUX1hGT05UU0VUCisJZ3VpX21jaF9mcmVlX2ZvbnRzZXQoSExfVEFCTEUoKVtpZHhdLnNnX2ZvbnRzZXQpOworCUhMX1RBQkxFKClbaWR4XS5zZ19mb250c2V0ID0gTk9GT05UU0VUOworIyBlbmRpZgorICAgIH0KKworICAgIGd1aV9tY2hfZnJlZV9mb250KGd1aS5ub3JtX2ZvbnQpOworIyBpZmRlZiBGRUFUX1hGT05UU0VUCisgICAgZ3VpX21jaF9mcmVlX2ZvbnRzZXQoZ3VpLmZvbnRzZXQpOworIyBlbmRpZgorIyBpZm5kZWYgSEFWRV9HVEsyCisgICAgZ3VpX21jaF9mcmVlX2ZvbnQoZ3VpLmJvbGRfZm9udCk7CisgICAgZ3VpX21jaF9mcmVlX2ZvbnQoZ3VpLml0YWxfZm9udCk7CisgICAgZ3VpX21jaF9mcmVlX2ZvbnQoZ3VpLmJvbGRpdGFsX2ZvbnQpOworIyBlbmRpZgorfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEVuZCBvZiBIaWdobGlnaHRpbmcgc3R1ZmYJICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvc3JjL3RhZy5jIGIvc3JjL3RhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNmQ1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGFnLmMKQEAgLTAsMCArMSwzNTM0IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBDb2RlIHRvIGhhbmRsZSB0YWdzIGFuZCB0aGUgdGFnIHN0YWNrCisgKi8KKworI2lmIGRlZmluZWQgTVNET1MgfHwgZGVmaW5lZCBXSU4zMiB8fCBkZWZpbmVkKF9XSU42NCkKKyMgaW5jbHVkZSA8aW8uaD4JLyogZm9yIGxzZWVrKCksIG11c3QgYmUgYmVmb3JlIHZpbS5oICovCisjZW5kaWYKKworI2luY2x1ZGUgInZpbS5oIgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjIGluY2x1ZGUgPGZjbnRsLmg+CS8qIGZvciBsc2VlaygpICovCisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSB0byBob2xkIHBvaW50ZXJzIHRvIHZhcmlvdXMgaXRlbXMgaW4gYSB0YWcgbGluZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgdGFnX3BvaW50ZXJzCit7CisgICAgLyogZmlsbGVkIGluIGJ5IHBhcnNlX3RhZ19saW5lKCk6ICovCisgICAgY2hhcl91CSp0YWduYW1lOwkvKiBzdGFydCBvZiB0YWcgbmFtZSAoc2tpcCAiZmlsZToiKSAqLworICAgIGNoYXJfdQkqdGFnbmFtZV9lbmQ7CS8qIGNoYXIgYWZ0ZXIgdGFnIG5hbWUgKi8KKyAgICBjaGFyX3UJKmZuYW1lOwkJLyogZmlyc3QgY2hhciBvZiBmaWxlIG5hbWUgKi8KKyAgICBjaGFyX3UJKmZuYW1lX2VuZDsJLyogY2hhciBhZnRlciBmaWxlIG5hbWUgKi8KKyAgICBjaGFyX3UJKmNvbW1hbmQ7CS8qIGZpcnN0IGNoYXIgb2YgY29tbWFuZCAqLworICAgIC8qIGZpbGxlZCBpbiBieSBwYXJzZV9tYXRjaCgpOiAqLworICAgIGNoYXJfdQkqY29tbWFuZF9lbmQ7CS8qIGZpcnN0IGNoYXIgYWZ0ZXIgY29tbWFuZCAqLworICAgIGNoYXJfdQkqdGFnX2ZuYW1lOwkvKiBmaWxlIG5hbWUgb2YgdGhlIHRhZ3MgZmlsZSAqLworI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworICAgIGludAkJaXNfZXRhZzsJLyogVFJVRSBmb3IgZW1hY3MgdGFnICovCisjZW5kaWYKKyAgICBjaGFyX3UJKnRhZ2tpbmQ7CS8qICJraW5kOiIgdmFsdWUgKi8KKyAgICBjaGFyX3UJKnRhZ2tpbmRfZW5kOwkvKiBlbmQgb2YgdGFna2luZCAqLworfSB0YWdwdHJzX1Q7CisKKy8qCisgKiBUaGUgbWF0Y2hpbmcgdGFncyBhcmUgZmlyc3Qgc3RvcmVkIGluIGdhX21hdGNoW10uICBJbiB3aGljaCBvbmUgZGVwZW5kcyBvbgorICogdGhlIHByaW9yaXR5IG9mIHRoZSBtYXRjaC4KKyAqIEF0IHRoZSBlbmQsIHRoZSBtYXRjaGVzIGZyb20gZ2FfbWF0Y2hbXSBhcmUgY29uY2F0ZW5hdGVkLCB0byBtYWtlIGEgbGlzdAorICogc29ydGVkIG9uIHByaW9yaXR5LgorICovCisjZGVmaW5lIE1UX1NUX0NVUgkwCQkvKiBzdGF0aWMgbWF0Y2ggaW4gY3VycmVudCBmaWxlICovCisjZGVmaW5lIE1UX0dMX0NVUgkxCQkvKiBnbG9iYWwgbWF0Y2ggaW4gY3VycmVudCBmaWxlICovCisjZGVmaW5lIE1UX0dMX09USAkyCQkvKiBnbG9iYWwgbWF0Y2ggaW4gb3RoZXIgZmlsZSAqLworI2RlZmluZSBNVF9TVF9PVEgJMwkJLyogc3RhdGljIG1hdGNoIGluIG90aGVyIGZpbGUgKi8KKyNkZWZpbmUgTVRfSUNfU1RfQ1VSCTQJCS8qIGljYXNlIHN0YXRpYyBtYXRjaCBpbiBjdXJyZW50IGZpbGUgKi8KKyNkZWZpbmUgTVRfSUNfR0xfQ1VSCTUJCS8qIGljYXNlIGdsb2JhbCBtYXRjaCBpbiBjdXJyZW50IGZpbGUgKi8KKyNkZWZpbmUgTVRfSUNfR0xfT1RICTYJCS8qIGljYXNlIGdsb2JhbCBtYXRjaCBpbiBvdGhlciBmaWxlICovCisjZGVmaW5lIE1UX0lDX1NUX09USAk3CQkvKiBpY2FzZSBzdGF0aWMgbWF0Y2ggaW4gb3RoZXIgZmlsZSAqLworI2RlZmluZSBNVF9JQ19PRkYJNAkJLyogYWRkIGZvciBpY2FzZSBtYXRjaCAqLworI2RlZmluZSBNVF9SRV9PRkYJOAkJLyogYWRkIGZvciByZWdleHAgbWF0Y2ggKi8KKyNkZWZpbmUgTVRfTUFTSwkJNwkJLyogbWFzayBmb3IgcHJpbnRpbmcgcHJpb3JpdHkgKi8KKyNkZWZpbmUgTVRfQ09VTlQJMTYKKworc3RhdGljIGNoYXIJKm10X25hbWVzW01UX0NPVU5ULzJdID0KKwkJeyJGU0MiLCAiRiBDIiwgIkYgICIsICJGUyAiLCAiIFNDIiwgIiAgQyIsICIgICAiLCAiIFMgIn07CisKKyNkZWZpbmUgTk9UQUdGSUxFCTk5CQkvKiByZXR1cm4gdmFsdWUgZm9yIGp1bXB0b190YWcgKi8KK3N0YXRpYyBjaGFyX3UJKm5vZmlsZV9mbmFtZSA9IE5VTEw7CS8qIGZuYW1lIGZvciBOT1RBR0ZJTEUgZXJyb3IgKi8KKworc3RhdGljIHZvaWQgdGFnbGVuX2FkdmFuY2UgX19BUkdTKChpbnQgbCkpOworc3RhdGljIGludCBnZXRfdGFnZm5hbWUgX19BUkdTKChpbnQgZmlyc3QsIGNoYXJfdSAqYnVmKSk7CisKK3N0YXRpYyBpbnQganVtcHRvX3RhZyBfX0FSR1MoKGNoYXJfdSAqbGJ1ZiwgaW50IGZvcmNlaXQsIGludCBrZWVwX2hlbHApKTsKKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKK3N0YXRpYyBpbnQgcGFyc2VfdGFnX2xpbmUgX19BUkdTKChjaGFyX3UgKmxidWYsIGludCBpc19ldGFnLCB0YWdwdHJzX1QgKnRhZ3ApKTsKKyNlbHNlCitzdGF0aWMgaW50IHBhcnNlX3RhZ19saW5lIF9fQVJHUygoY2hhcl91ICpsYnVmLCB0YWdwdHJzX1QgKnRhZ3ApKTsKKyNlbmRpZgorc3RhdGljIGludCB0ZXN0X2Zvcl9zdGF0aWMgX19BUkdTKCh0YWdwdHJzX1QgKikpOworc3RhdGljIGludCBwYXJzZV9tYXRjaCBfX0FSR1MoKGNoYXJfdSAqbGJ1ZiwgdGFncHRyc19UICp0YWdwKSk7CitzdGF0aWMgY2hhcl91ICp0YWdfZnVsbF9mbmFtZSBfX0FSR1MoKHRhZ3B0cnNfVCAqdGFncCkpOworc3RhdGljIGNoYXJfdSAqZXhwYW5kX3RhZ19mbmFtZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGNoYXJfdSAqdGFnX2ZuYW1lLCBpbnQgZXhwYW5kKSk7CisjaWZkZWYgRkVBVF9FTUFDU19UQUdTCitzdGF0aWMgaW50IHRlc3RfZm9yX2N1cnJlbnQgX19BUkdTKChpbnQsIGNoYXJfdSAqLCBjaGFyX3UgKiwgY2hhcl91ICosIGNoYXJfdSAqKSk7CisjZWxzZQorc3RhdGljIGludCB0ZXN0X2Zvcl9jdXJyZW50IF9fQVJHUygoY2hhcl91ICosIGNoYXJfdSAqLCBjaGFyX3UgKiwgY2hhcl91ICopKTsKKyNlbmRpZgorc3RhdGljIGludCBmaW5kX2V4dHJhIF9fQVJHUygoY2hhcl91ICoqcHApKTsKKworc3RhdGljIGNoYXJfdSAqYm90dG9tbXNnID0gKGNoYXJfdSAqKU5fKCJFNTU1OiBhdCBib3R0b20gb2YgdGFnIHN0YWNrIik7CitzdGF0aWMgY2hhcl91ICp0b3Btc2cgPSAoY2hhcl91ICopTl8oIkU1NTY6IGF0IHRvcCBvZiB0YWcgc3RhY2siKTsKKworc3RhdGljIGNoYXJfdQkqdGFnbWF0Y2huYW1lID0gTlVMTDsJLyogbmFtZSBvZiBsYXN0IHVzZWQgdGFnICovCisKKy8qCisgKiBXZSB1c2UgZnRlbGxvKCkgaGVyZSwgaWYgYXZhaWxhYmxlLiAgSXQgcmV0dXJucyBvZmZfdCBpbnN0ZWFkIG9mIGxvbmcsCisgKiB3aGljaCBoZWxwcyBpZiBsb25nIGlzIDMyIGJpdCBhbmQgb2ZmX3QgaXMgNjQgYml0LgorICovCisjaWZkZWYgSEFWRV9GVEVMTE8KKyMgZGVmaW5lIGZ0ZWxsIGZ0ZWxsbworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorLyoKKyAqIFRhZyBmb3IgcHJldmlldyB3aW5kb3cgaXMgcmVtZW1iZXJlZCBzZXBhcmF0ZWx5LCB0byBhdm9pZCBtZXNzaW5nIHVwIHRoZQorICogbm9ybWFsIHRhZ3N0YWNrLgorICovCitzdGF0aWMgdGFnZ3lfVCBwdGFnX2VudHJ5ID0ge05VTEx9OworI2VuZGlmCisKKy8qCisgKiBKdW1wIHRvIHRhZzsgaGFuZGxpbmcgb2YgdGFnIGNvbW1hbmRzIGFuZCB0YWcgc3RhY2sKKyAqCisgKiAqdGFnICE9IE5VTDogIjp0YWcge3RhZ30iLCBqdW1wIHRvIG5ldyB0YWcsIGFkZCB0byB0YWcgc3RhY2sKKyAqCisgKiB0eXBlID09IERUX1RBRzoJIjp0YWcgW3RhZ10iLCBqdW1wIHRvIG5ld2VyIHBvc2l0aW9uIG9yIHNhbWUgdGFnIGFnYWluCisgKiB0eXBlID09IERUX0hFTFA6CWxpa2UgRFRfVEFHLCBidXQgZG9uJ3QgdXNlIHJlZ2V4cC4KKyAqIHR5cGUgPT0gRFRfUE9QOgkiOnBvcCIgb3IgQ1RSTC1ULCBqdW1wIHRvIG9sZCBwb3NpdGlvbgorICogdHlwZSA9PSBEVF9ORVhUOglqdW1wIHRvIG5leHQgbWF0Y2ggb2Ygc2FtZSB0YWcKKyAqIHR5cGUgPT0gRFRfUFJFVjoJanVtcCB0byBwcmV2aW91cyBtYXRjaCBvZiBzYW1lIHRhZworICogdHlwZSA9PSBEVF9GSVJTVDoJanVtcCB0byBmaXJzdCBtYXRjaCBvZiBzYW1lIHRhZworICogdHlwZSA9PSBEVF9MQVNUOglqdW1wIHRvIGxhc3QgbWF0Y2ggb2Ygc2FtZSB0YWcKKyAqIHR5cGUgPT0gRFRfU0VMRUNUOgkiOnRzZWxlY3QgW3RhZ10iLCBzZWxlY3QgdGFnIGZyb20gYSBsaXN0IG9mIGFsbCBtYXRjaGVzCisgKiB0eXBlID09IERUX0pVTVA6CSI6dGp1bXAgW3RhZ10iLCBqdW1wIHRvIHRhZyBvciBzZWxlY3QgdGFnIGZyb20gYSBsaXN0CisgKiB0eXBlID09IERUX0NTQ09QRToJdXNlIGNzY29wZSB0byBmaW5kIHRoZSB0YWcuCisgKgorICogZm9yIGNzY29wZSwgcmV0dXJucyBUUlVFIGlmIHdlIGp1bXBlZCB0byB0YWcgb3IgYWJvcnRlZCwgRkFMU0Ugb3RoZXJ3aXNlCisgKi8KKyAgICBpbnQKK2RvX3RhZyh0YWcsIHR5cGUsIGNvdW50LCBmb3JjZWl0LCB2ZXJib3NlKQorICAgIGNoYXJfdQkqdGFnOwkJLyogdGFnIChwYXR0ZXJuKSB0byBqdW1wIHRvICovCisgICAgaW50CQl0eXBlOworICAgIGludAkJY291bnQ7CisgICAgaW50CQlmb3JjZWl0OwkvKiA6dGEgd2l0aCAhICovCisgICAgaW50CQl2ZXJib3NlOwkvKiBwcmludCAidGFnIG5vdCBmb3VuZCIgbWVzc2FnZSAqLworeworICAgIHRhZ2d5X1QJKnRhZ3N0YWNrID0gY3Vyd2luLT53X3RhZ3N0YWNrOworICAgIGludAkJdGFnc3RhY2tpZHggPSBjdXJ3aW4tPndfdGFnc3RhY2tpZHg7CisgICAgaW50CQl0YWdzdGFja2xlbiA9IGN1cndpbi0+d190YWdzdGFja2xlbjsKKyAgICBpbnQJCWN1cl9tYXRjaCA9IDA7CisgICAgaW50CQljdXJfZm51bSA9IGN1cmJ1Zi0+Yl9mbnVtOworICAgIGludAkJb2xkdGFnc3RhY2tpZHggPSB0YWdzdGFja2lkeDsKKyAgICBpbnQJCXByZXZ0YWdzdGFja2lkeCA9IHRhZ3N0YWNraWR4OworICAgIGludAkJcHJldl9udW1fbWF0Y2hlczsKKyAgICBpbnQJCW5ld190YWcgPSBGQUxTRTsKKyAgICBpbnQJCW90aGVyX25hbWU7CisgICAgaW50CQlpLCBqLCBrOworICAgIGludAkJaWR4OworICAgIGludAkJaWM7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqbmFtZTsKKyAgICBpbnQJCW5vX3JlZ2V4cCA9IEZBTFNFOworICAgIGludAkJZXJyb3JfY3VyX21hdGNoID0gMDsKKyAgICBjaGFyX3UJKmNvbW1hbmRfZW5kOworICAgIGludAkJc2F2ZV9wb3MgPSBGQUxTRTsKKyAgICBmbWFya19UCXNhdmVkX2ZtYXJrOworICAgIGludAkJdGFnbGVuOworI2lmZGVmIEZFQVRfQ1NDT1BFCisgICAgaW50CQlqdW1wZWRfdG9fdGFnID0gRkFMU0U7CisjZW5kaWYKKyAgICB0YWdwdHJzX1QJdGFncCwgdGFncDI7CisgICAgaW50CQluZXdfbnVtX21hdGNoZXM7CisgICAgY2hhcl91CSoqbmV3X21hdGNoZXM7CisgICAgaW50CQlhdHRyOworICAgIGludAkJdXNlX3RhZ3N0YWNrOworICAgIGludAkJc2tpcF9tc2cgPSBGQUxTRTsKKyAgICBjaGFyX3UJKmJ1Zl9mZm5hbWUgPSBjdXJidWYtPmJfZmZuYW1lOwkgICAgLyogbmFtZSB0byB1c2UgZm9yCisJCQkJCQkgICAgICAgcHJpb3JpdHkgY29tcHV0YXRpb24gKi8KKworICAgIC8qIHJlbWVtYmVyIHRoZSBtYXRjaGVzIGZvciB0aGUgbGFzdCB1c2VkIHRhZyAqLworICAgIHN0YXRpYyBpbnQJCW51bV9tYXRjaGVzID0gMDsKKyAgICBzdGF0aWMgaW50CQltYXhfbnVtX21hdGNoZXMgPSAwOyAgLyogbGltaXQgdXNlZCBmb3IgbWF0Y2ggc2VhcmNoICovCisgICAgc3RhdGljIGNoYXJfdQkqKm1hdGNoZXMgPSBOVUxMOworICAgIHN0YXRpYyBpbnQJCWZsYWdzOworCisgICAgaWYgKHR5cGUgPT0gRFRfSEVMUCkKKyAgICB7CisJdHlwZSA9IERUX1RBRzsKKwlub19yZWdleHAgPSBUUlVFOworICAgIH0KKworICAgIHByZXZfbnVtX21hdGNoZXMgPSBudW1fbWF0Y2hlczsKKyAgICBmcmVlX3N0cmluZ19vcHRpb24obm9maWxlX2ZuYW1lKTsKKyAgICBub2ZpbGVfZm5hbWUgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBEb24ndCBhZGQgYSB0YWcgdG8gdGhlIHRhZ3N0YWNrIGlmICd0YWdzdGFjaycgaGFzIGJlZW4gcmVzZXQuCisgICAgICovCisgICAgaWYgKCghcF90Z3N0ICYmICp0YWcgIT0gTlVMKSkKKyAgICB7CisJdXNlX3RhZ3N0YWNrID0gRkFMU0U7CisJbmV3X3RhZyA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKwlpZiAoZ19kb190YWdwcmV2aWV3KQorCSAgICB1c2VfdGFnc3RhY2sgPSBGQUxTRTsKKwllbHNlCisjZW5kaWYKKwkgICAgdXNlX3RhZ3N0YWNrID0gVFJVRTsKKworCS8qIG5ldyBwYXR0ZXJuLCBhZGQgdG8gdGhlIHRhZyBzdGFjayAqLworCWlmICgqdGFnICYmICh0eXBlID09IERUX1RBRyB8fCB0eXBlID09IERUX1NFTEVDVCB8fCB0eXBlID09IERUX0pVTVAKKyNpZmRlZiBGRUFUX0NTQ09QRQorCQkgICAgfHwgdHlwZSA9PSBEVF9DU0NPUEUKKyNlbmRpZgorCQkgICAgKSkKKwl7CisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKwkgICAgaWYgKGdfZG9fdGFncHJldmlldykKKwkgICAgeworCQlpZiAocHRhZ19lbnRyeS50YWduYW1lICE9IE5VTEwKKwkJCSYmIFNUUkNNUChwdGFnX2VudHJ5LnRhZ25hbWUsIHRhZykgPT0gMCkKKwkJeworCQkgICAgLyogSnVtcGluZyB0byBzYW1lIHRhZzoga2VlcCB0aGUgY3VycmVudCBtYXRjaCwgc28gdGhhdAorCQkgICAgICogdGhlIEN1cnNvckhvbGQgYXV0b2NvbW1hbmQgZXhhbXBsZSB3b3Jrcy4gKi8KKwkJICAgIGN1cl9tYXRjaCA9IHB0YWdfZW50cnkuY3VyX21hdGNoOworCQkgICAgY3VyX2ZudW0gPSBwdGFnX2VudHJ5LmN1cl9mbnVtOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgdmltX2ZyZWUocHRhZ19lbnRyeS50YWduYW1lKTsKKwkJICAgIGlmICgocHRhZ19lbnRyeS50YWduYW1lID0gdmltX3N0cnNhdmUodGFnKSkgPT0gTlVMTCkKKwkJCWdvdG8gZW5kX2RvX3RhZzsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCS8qCisJCSAqIElmIHRoZSBsYXN0IHVzZWQgZW50cnkgaXMgbm90IGF0IHRoZSB0b3AsIGRlbGV0ZSBhbGwgdGFnCisJCSAqIHN0YWNrIGVudHJpZXMgYWJvdmUgaXQuCisJCSAqLworCQl3aGlsZSAodGFnc3RhY2tpZHggPCB0YWdzdGFja2xlbikKKwkJICAgIHZpbV9mcmVlKHRhZ3N0YWNrWy0tdGFnc3RhY2tsZW5dLnRhZ25hbWUpOworCisJCS8qIGlmIHRoZSB0YWdzdGFjayBpcyBmdWxsOiByZW1vdmUgb2xkZXN0IGVudHJ5ICovCisJCWlmICgrK3RhZ3N0YWNrbGVuID4gVEFHU1RBQ0tTSVpFKQorCQl7CisJCSAgICB0YWdzdGFja2xlbiA9IFRBR1NUQUNLU0laRTsKKwkJICAgIHZpbV9mcmVlKHRhZ3N0YWNrWzBdLnRhZ25hbWUpOworCQkgICAgZm9yIChpID0gMTsgaSA8IHRhZ3N0YWNrbGVuOyArK2kpCisJCQl0YWdzdGFja1tpIC0gMV0gPSB0YWdzdGFja1tpXTsKKwkJICAgIC0tdGFnc3RhY2tpZHg7CisJCX0KKworCQkvKgorCQkgKiBwdXQgdGhlIHRhZyBuYW1lIGluIHRoZSB0YWcgc3RhY2sKKwkJICovCisJCWlmICgodGFnc3RhY2tbdGFnc3RhY2tpZHhdLnRhZ25hbWUgPSB2aW1fc3Ryc2F2ZSh0YWcpKSA9PSBOVUxMKQorCQl7CisJCSAgICBjdXJ3aW4tPndfdGFnc3RhY2tsZW4gPSB0YWdzdGFja2xlbiAtIDE7CisJCSAgICBnb3RvIGVuZF9kb190YWc7CisJCX0KKwkJY3Vyd2luLT53X3RhZ3N0YWNrbGVuID0gdGFnc3RhY2tsZW47CisKKwkJc2F2ZV9wb3MgPSBUUlVFOwkvKiBzYXZlIHRoZSBjdXJzb3IgcG9zaXRpb24gYmVsb3cgKi8KKwkgICAgfQorCisJICAgIG5ld190YWcgPSBUUlVFOworCX0KKwllbHNlCisJeworCSAgICBpZiAoCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKwkJICAgIGdfZG9fdGFncHJldmlldyA/IHB0YWdfZW50cnkudGFnbmFtZSA9PSBOVUxMIDoKKyNlbmRpZgorCQkgICAgdGFnc3RhY2tsZW4gPT0gMCkKKwkgICAgeworCQkvKiBlbXB0eSBzdGFjayAqLworCQlFTVNHKF8oZV90YWdzdGFjaykpOworCQlnb3RvIGVuZF9kb190YWc7CisJICAgIH0KKworCSAgICBpZiAodHlwZSA9PSBEVF9QT1ApCQkvKiBnbyB0byBvbGRlciBwb3NpdGlvbiAqLworCSAgICB7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJCWludAlvbGRfS2V5VHlwZWQgPSBLZXlUeXBlZDsKKyNlbmRpZgorCQlpZiAoKHRhZ3N0YWNraWR4IC09IGNvdW50KSA8IDApCisJCXsKKwkJICAgIEVNU0coXyhib3R0b21tc2cpKTsKKwkJICAgIGlmICh0YWdzdGFja2lkeCArIGNvdW50ID09IDApCisJCSAgICB7CisJCQkvKiBXZSBkaWQgW251bV1eVCBmcm9tIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrICovCisJCQl0YWdzdGFja2lkeCA9IDA7CisJCQlnb3RvIGVuZF9kb190YWc7CisJCSAgICB9CisJCSAgICAvKiBXZSB3ZXJlbid0IGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLCBzbyBqdW1wIGFsbCB0aGUKKwkJICAgICAqIHdheSB0byB0aGUgYm90dG9tIG5vdy4KKwkJICAgICAqLworCQkgICAgdGFnc3RhY2tpZHggPSAwOworCQl9CisJCWVsc2UgaWYgKHRhZ3N0YWNraWR4ID49IHRhZ3N0YWNrbGVuKSAgICAvKiBjb3VudCA9PSAwPyAqLworCQl7CisJCSAgICBFTVNHKF8odG9wbXNnKSk7CisJCSAgICBnb3RvIGVuZF9kb190YWc7CisJCX0KKworCQkvKiBNYWtlIGEgY29weSBvZiB0aGUgZm1hcmssIGF1dG9jb21tYW5kcyBtYXkgaW52YWxpZGF0ZSB0aGUKKwkJICogdGFnc3RhY2sgYmVmb3JlIGl0J3MgdXNlZC4gKi8KKwkJc2F2ZWRfZm1hcmsgPSB0YWdzdGFja1t0YWdzdGFja2lkeF0uZm1hcms7CisJCWlmIChzYXZlZF9mbWFyay5mbnVtICE9IGN1cmJ1Zi0+Yl9mbnVtKQorCQl7CisJCSAgICAvKgorCQkgICAgICogSnVtcCB0byBvdGhlciBmaWxlLiBJZiB0aGlzIGZhaWxzIChlLmcuIGJlY2F1c2UgdGhlCisJCSAgICAgKiBmaWxlIHdhcyBjaGFuZ2VkKSBrZWVwIG9yaWdpbmFsIHBvc2l0aW9uIGluIHRhZyBzdGFjay4KKwkJICAgICAqLworCQkgICAgaWYgKGJ1Zmxpc3RfZ2V0ZmlsZShzYXZlZF9mbWFyay5mbnVtLCBzYXZlZF9mbWFyay5tYXJrLmxudW0sCisJCQkJCSAgICAgICBHRVRGX1NFVE1BUkssIGZvcmNlaXQpID09IEZBSUwpCisJCSAgICB7CisJCQl0YWdzdGFja2lkeCA9IG9sZHRhZ3N0YWNraWR4OyAgLyogYmFjayB0byBvbGQgcG9zbiAqLworCQkJZ290byBlbmRfZG9fdGFnOworCQkgICAgfQorCQkgICAgLyogQW4gQnVmUmVhZFBvc3QgYXV0b2NvbW1hbmQgbWF5IGp1bXAgdG8gdGhlICciIG1hcmssIGJ1dAorCQkgICAgICogd2UgZG9uJ3Qgd2hhdCB0aGF0IGhlcmUuICovCisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBzYXZlZF9mbWFyay5tYXJrLmxudW07CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBzZXRwY21hcmsoKTsKKwkJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IHNhdmVkX2ZtYXJrLm1hcmsubG51bTsKKwkJfQorCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IHNhdmVkX2ZtYXJrLm1hcmsuY29sOworCQljdXJ3aW4tPndfc2V0X2N1cnN3YW50ID0gVFJVRTsKKwkJY2hlY2tfY3Vyc29yKCk7CisjaWZkZWYgRkVBVF9GT0xESU5HCisJCWlmICgoZmRvX2ZsYWdzICYgRkRPX1RBRykgJiYgb2xkX0tleVR5cGVkKQorCQkgICAgZm9sZE9wZW5DdXJzb3IoKTsKKyNlbmRpZgorCisJCS8qIHJlbW92ZSB0aGUgb2xkIGxpc3Qgb2YgbWF0Y2hlcyAqLworCQlGcmVlV2lsZChudW1fbWF0Y2hlcywgbWF0Y2hlcyk7CisjaWZkZWYgRkVBVF9DU0NPUEUKKwkJY3NfZnJlZV90YWdzKCk7CisjZW5kaWYKKwkJbnVtX21hdGNoZXMgPSAwOworCQlnb3RvIGVuZF9kb190YWc7CisJICAgIH0KKworCSAgICBpZiAodHlwZSA9PSBEVF9UQUcpCisJICAgIHsKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCQlpZiAoZ19kb190YWdwcmV2aWV3KQorCQl7CisJCSAgICBjdXJfbWF0Y2ggPSBwdGFnX2VudHJ5LmN1cl9tYXRjaDsKKwkJICAgIGN1cl9mbnVtID0gcHRhZ19lbnRyeS5jdXJfZm51bTsKKwkJfQorCQllbHNlCisjZW5kaWYKKwkJeworCQkgICAgLyogIjp0YWciIChubyBhcmd1bWVudCk6IGdvIHRvIG5ld2VyIHBhdHRlcm4gKi8KKwkJICAgIHNhdmVfcG9zID0gVFJVRTsJLyogc2F2ZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGJlbG93ICovCisJCSAgICBpZiAoKHRhZ3N0YWNraWR4ICs9IGNvdW50IC0gMSkgPj0gdGFnc3RhY2tsZW4pCisJCSAgICB7CisJCQkvKgorCQkJICogQmV5b25kIHRoZSBsYXN0IG9uZSwganVzdCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgYW5kCisJCQkgKiBnbyB0byB0aGUgbGFzdCBvbmUuICBEb24ndCBzdG9yZSB0aGUgY3Vyc29yCisJCQkgKiBwb3N0aXRpb24uCisJCQkgKi8KKwkJCXRhZ3N0YWNraWR4ID0gdGFnc3RhY2tsZW4gLSAxOworCQkJRU1TRyhfKHRvcG1zZykpOworCQkJc2F2ZV9wb3MgPSBGQUxTRTsKKwkJICAgIH0KKwkJICAgIGVsc2UgaWYgKHRhZ3N0YWNraWR4IDwgMCkJLyogbXVzdCBoYXZlIGJlZW4gY291bnQgPT0gMCAqLworCQkgICAgeworCQkJRU1TRyhfKGJvdHRvbW1zZykpOworCQkJdGFnc3RhY2tpZHggPSAwOworCQkJZ290byBlbmRfZG9fdGFnOworCQkgICAgfQorCQkgICAgY3VyX21hdGNoID0gdGFnc3RhY2tbdGFnc3RhY2tpZHhdLmN1cl9tYXRjaDsKKwkJICAgIGN1cl9mbnVtID0gdGFnc3RhY2tbdGFnc3RhY2tpZHhdLmN1cl9mbnVtOworCQl9CisJCW5ld190YWcgPSBUUlVFOworCSAgICB9CisJICAgIGVsc2UJCQkJLyogZ28gdG8gb3RoZXIgbWF0Y2hpbmcgdGFnICovCisJICAgIHsKKwkJLyogU2F2ZSBpbmRleCBmb3Igd2hlbiBzZWxlY3Rpb24gaXMgY2FuY2VsbGVkLiAqLworCQlwcmV2dGFnc3RhY2tpZHggPSB0YWdzdGFja2lkeDsKKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpCisJCWlmIChnX2RvX3RhZ3ByZXZpZXcpCisJCXsKKwkJICAgIGN1cl9tYXRjaCA9IHB0YWdfZW50cnkuY3VyX21hdGNoOworCQkgICAgY3VyX2ZudW0gPSBwdGFnX2VudHJ5LmN1cl9mbnVtOworCQl9CisJCWVsc2UKKyNlbmRpZgorCQl7CisJCSAgICBpZiAoLS10YWdzdGFja2lkeCA8IDApCisJCQl0YWdzdGFja2lkeCA9IDA7CisJCSAgICBjdXJfbWF0Y2ggPSB0YWdzdGFja1t0YWdzdGFja2lkeF0uY3VyX21hdGNoOworCQkgICAgY3VyX2ZudW0gPSB0YWdzdGFja1t0YWdzdGFja2lkeF0uY3VyX2ZudW07CisJCX0KKwkJc3dpdGNoICh0eXBlKQorCQl7CisJCSAgICBjYXNlIERUX0ZJUlNUOiBjdXJfbWF0Y2ggPSBjb3VudCAtIDE7IGJyZWFrOworCQkgICAgY2FzZSBEVF9TRUxFQ1Q6CisJCSAgICBjYXNlIERUX0pVTVA6CisjaWZkZWYgRkVBVF9DU0NPUEUKKwkJICAgIGNhc2UgRFRfQ1NDT1BFOgorI2VuZGlmCisJCSAgICBjYXNlIERUX0xBU1Q6ICBjdXJfbWF0Y2ggPSBNQVhDT0wgLSAxOyBicmVhazsKKwkJICAgIGNhc2UgRFRfTkVYVDogIGN1cl9tYXRjaCArPSBjb3VudDsgYnJlYWs7CisJCSAgICBjYXNlIERUX1BSRVY6ICBjdXJfbWF0Y2ggLT0gY291bnQ7IGJyZWFrOworCQl9CisJCWlmIChjdXJfbWF0Y2ggPj0gTUFYQ09MKQorCQkgICAgY3VyX21hdGNoID0gTUFYQ09MIC0gMTsKKwkJZWxzZSBpZiAoY3VyX21hdGNoIDwgMCkKKwkJeworCQkgICAgRU1TRyhfKCJFNDI1OiBDYW5ub3QgZ28gYmVmb3JlIGZpcnN0IG1hdGNoaW5nIHRhZyIpKTsKKwkJICAgIHNraXBfbXNnID0gVFJVRTsKKwkJICAgIGN1cl9tYXRjaCA9IDA7CisJCSAgICBjdXJfZm51bSA9IGN1cmJ1Zi0+Yl9mbnVtOworCQl9CisJICAgIH0KKwl9CisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCWlmIChnX2RvX3RhZ3ByZXZpZXcpCisJeworCSAgICBpZiAodHlwZSAhPSBEVF9TRUxFQ1QgJiYgdHlwZSAhPSBEVF9KVU1QKQorCSAgICB7CisJCXB0YWdfZW50cnkuY3VyX21hdGNoID0gY3VyX21hdGNoOworCQlwdGFnX2VudHJ5LmN1cl9mbnVtID0gY3VyX2ZudW07CisJICAgIH0KKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICAvKgorCSAgICAgKiBGb3IgIjp0YWcgW2FyZ10iIG9yICI6dHNlbGVjdCIgcmVtZW1iZXIgcG9zaXRpb24gYmVmb3JlIHRoZSBqdW1wLgorCSAgICAgKi8KKwkgICAgc2F2ZWRfZm1hcmsgPSB0YWdzdGFja1t0YWdzdGFja2lkeF0uZm1hcms7CisJICAgIGlmIChzYXZlX3BvcykKKwkgICAgeworCQl0YWdzdGFja1t0YWdzdGFja2lkeF0uZm1hcmsubWFyayA9IGN1cndpbi0+d19jdXJzb3I7CisJCXRhZ3N0YWNrW3RhZ3N0YWNraWR4XS5mbWFyay5mbnVtID0gY3VyYnVmLT5iX2ZudW07CisJICAgIH0KKworCSAgICAvKiBDdXJ3aW4gd2lsbCBjaGFuZ2UgaW4gdGhlIGNhbGwgdG8ganVtcHRvX3RhZygpIGlmICI6c3RhZyIgd2FzCisJICAgICAqIHVzZWQgb3IgYW4gYXV0b2NvbW1hbmQganVtcHMgdG8gYW5vdGhlciB3aW5kb3c7IHN0b3JlIHZhbHVlIG9mCisJICAgICAqIHRhZ3N0YWNraWR4IG5vdy4gKi8KKwkgICAgY3Vyd2luLT53X3RhZ3N0YWNraWR4ID0gdGFnc3RhY2tpZHg7CisJICAgIGlmICh0eXBlICE9IERUX1NFTEVDVCAmJiB0eXBlICE9IERUX0pVTVApCisJICAgIHsKKwkJY3Vyd2luLT53X3RhZ3N0YWNrW3RhZ3N0YWNraWR4XS5jdXJfbWF0Y2ggPSBjdXJfbWF0Y2g7CisJCWN1cndpbi0+d190YWdzdGFja1t0YWdzdGFja2lkeF0uY3VyX2ZudW0gPSBjdXJfZm51bTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiBXaGVuIG5vdCB1c2luZyB0aGUgY3VycmVudCBidWZmZXIgZ2V0IHRoZSBuYW1lIG9mIGJ1ZmZlciAiY3VyX2ZudW0iLgorICAgICAqIE1ha2VzIHN1cmUgdGhhdCB0aGUgdGFnIG9yZGVyIGRvZXNuJ3QgY2hhbmdlIHdoZW4gdXNpbmcgYSByZW1lbWJlcmVkCisgICAgICogcG9zaXRpb24gZm9yICJjdXJfbWF0Y2giLiAqLworICAgIGlmIChjdXJfZm51bSAhPSBjdXJidWYtPmJfZm51bSkKKyAgICB7CisJYnVmX1QgKmJ1ZiA9IGJ1Zmxpc3RfZmluZG5yKGN1cl9mbnVtKTsKKworCWlmIChidWYgIT0gTlVMTCkKKwkgICAgYnVmX2ZmbmFtZSA9IGJ1Zi0+Yl9mZm5hbWU7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZXBlYXQgc2VhcmNoaW5nIGZvciB0YWdzLCB3aGVuIGEgZmlsZSBoYXMgbm90IGJlZW4gZm91bmQuCisgICAgICovCisgICAgZm9yICg7OykKKyAgICB7CisJLyoKKwkgKiBXaGVuIGRlc2lyZWQgbWF0Y2ggbm90IGZvdW5kIHlldCwgdHJ5IHRvIGZpbmQgaXQgKGFuZCBvdGhlcnMpLgorCSAqLworCWlmICh1c2VfdGFnc3RhY2spCisJICAgIG5hbWUgPSB0YWdzdGFja1t0YWdzdGFja2lkeF0udGFnbmFtZTsKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCWVsc2UgaWYgKGdfZG9fdGFncHJldmlldykKKwkgICAgbmFtZSA9IHB0YWdfZW50cnkudGFnbmFtZTsKKyNlbmRpZgorCWVsc2UKKwkgICAgbmFtZSA9IHRhZzsKKwlvdGhlcl9uYW1lID0gKHRhZ21hdGNobmFtZSA9PSBOVUxMIHx8IFNUUkNNUCh0YWdtYXRjaG5hbWUsIG5hbWUpICE9IDApOworCWlmIChuZXdfdGFnCisJCXx8IChjdXJfbWF0Y2ggPj0gbnVtX21hdGNoZXMgJiYgbWF4X251bV9tYXRjaGVzICE9IE1BWENPTCkKKwkJfHwgb3RoZXJfbmFtZSkKKwl7CisJICAgIGlmIChvdGhlcl9uYW1lKQorCSAgICB7CisJCXZpbV9mcmVlKHRhZ21hdGNobmFtZSk7CisJCXRhZ21hdGNobmFtZSA9IHZpbV9zdHJzYXZlKG5hbWUpOworCSAgICB9CisKKwkgICAgaWYgKHR5cGUgPT0gRFRfU0VMRUNUIHx8IHR5cGUgPT0gRFRfSlVNUCkKKwkJY3VyX21hdGNoID0gTUFYQ09MIC0gMTsKKwkgICAgbWF4X251bV9tYXRjaGVzID0gY3VyX21hdGNoICsgMTsKKworCSAgICAvKiB3aGVuIHRoZSBhcmd1bWVudCBzdGFydHMgd2l0aCAnLycsIHVzZSBpdCBhcyBhIHJlZ2V4cCAqLworCSAgICBpZiAoIW5vX3JlZ2V4cCAmJiAqbmFtZSA9PSAnLycpCisJICAgIHsKKwkJZmxhZ3MgPSBUQUdfUkVHRVhQOworCQkrK25hbWU7CisJICAgIH0KKwkgICAgZWxzZQorCQlmbGFncyA9IFRBR19OT0lDOworCisjaWZkZWYgRkVBVF9DU0NPUEUKKwkgICAgaWYgKHR5cGUgPT0gRFRfQ1NDT1BFKQorCQlmbGFncyA9IFRBR19DU0NPUEU7CisjZW5kaWYKKwkgICAgaWYgKHZlcmJvc2UpCisJCWZsYWdzIHw9IFRBR19WRVJCT1NFOworCSAgICBpZiAoZmluZF90YWdzKG5hbWUsICZuZXdfbnVtX21hdGNoZXMsICZuZXdfbWF0Y2hlcywgZmxhZ3MsCisJCQkJCSAgICBtYXhfbnVtX21hdGNoZXMsIGJ1Zl9mZm5hbWUpID09IE9LCisJCSAgICAmJiBuZXdfbnVtX21hdGNoZXMgPCBtYXhfbnVtX21hdGNoZXMpCisJCW1heF9udW1fbWF0Y2hlcyA9IE1BWENPTDsgLyogSWYgbGVzcyB0aGFuIG1heF9udW1fbWF0Y2hlcworCQkJCQkgICAgIGZvdW5kOiBhbGwgbWF0Y2hlcyBmb3VuZC4gKi8KKworCSAgICAvKiBJZiB0aGVyZSBhbHJlYWR5IHdlcmUgc29tZSBtYXRjaGVzIGZvciB0aGUgc2FtZSBuYW1lLCBtb3ZlIHRoZW0KKwkgICAgICogdG8gdGhlIHN0YXJ0LiAgQXZvaWRzIHRoYXQgdGhlIG9yZGVyIGNoYW5nZXMgd2hlbiB1c2luZworCSAgICAgKiAiOnRuZXh0IiBhbmQganVtcGluZyB0byBhbm90aGVyIGZpbGUuICovCisJICAgIGlmICghbmV3X3RhZyAmJiAhb3RoZXJfbmFtZSkKKwkgICAgeworCQkvKiBGaW5kIHRoZSBwb3NpdGlvbiBvZiBlYWNoIG9sZCBtYXRjaCBpbiB0aGUgbmV3IGxpc3QuICBOZWVkCisJCSAqIHRvIHVzZSBwYXJzZV9tYXRjaCgpIHRvIGZpbmQgdGhlIHRhZyBsaW5lLiAqLworCQlpZHggPSAwOworCQlmb3IgKGogPSAwOyBqIDwgbnVtX21hdGNoZXM7ICsraikKKwkJeworCQkgICAgcGFyc2VfbWF0Y2gobWF0Y2hlc1tqXSwgJnRhZ3ApOworCQkgICAgZm9yIChpID0gaWR4OyBpIDwgbmV3X251bV9tYXRjaGVzOyArK2kpCisJCSAgICB7CisJCQlwYXJzZV9tYXRjaChuZXdfbWF0Y2hlc1tpXSwgJnRhZ3AyKTsKKwkJCWlmIChTVFJDTVAodGFncC50YWduYW1lLCB0YWdwMi50YWduYW1lKSA9PSAwKQorCQkJeworCQkJICAgIHAgPSBuZXdfbWF0Y2hlc1tpXTsKKwkJCSAgICBmb3IgKGsgPSBpOyBrID4gaWR4OyAtLWspCisJCQkJbmV3X21hdGNoZXNba10gPSBuZXdfbWF0Y2hlc1trIC0gMV07CisJCQkgICAgbmV3X21hdGNoZXNbaWR4KytdID0gcDsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIEZyZWVXaWxkKG51bV9tYXRjaGVzLCBtYXRjaGVzKTsKKwkgICAgbnVtX21hdGNoZXMgPSBuZXdfbnVtX21hdGNoZXM7CisJICAgIG1hdGNoZXMgPSBuZXdfbWF0Y2hlczsKKwl9CisKKwlpZiAobnVtX21hdGNoZXMgPD0gMCkKKwl7CisJICAgIGlmICh2ZXJib3NlKQorCQlFTVNHMihfKCJFNDI2OiB0YWcgbm90IGZvdW5kOiAlcyIpLCBuYW1lKTsKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCSAgICBnX2RvX3RhZ3ByZXZpZXcgPSAwOworI2VuZGlmCisJfQorCWVsc2UKKwl7CisJICAgIGludCBhc2tfZm9yX3NlbGVjdGlvbiA9IEZBTFNFOworCisjaWZkZWYgRkVBVF9DU0NPUEUKKwkgICAgaWYgKHR5cGUgPT0gRFRfQ1NDT1BFICYmIG51bV9tYXRjaGVzID4gMSkKKwkgICAgeworCQljc19wcmludF90YWdzKCk7CisJCWFza19mb3Jfc2VsZWN0aW9uID0gVFJVRTsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkgICAgaWYgKHR5cGUgPT0gRFRfU0VMRUNUIHx8ICh0eXBlID09IERUX0pVTVAgJiYgbnVtX21hdGNoZXMgPiAxKSkKKwkgICAgeworCQkvKgorCQkgKiBMaXN0IGFsbCB0aGUgbWF0Y2hpbmcgdGFncy4KKwkJICogQXNzdW1lIHRoYXQgdGhlIGZpcnN0IG1hdGNoIGluZGljYXRlcyBob3cgbG9uZyB0aGUgdGFncyBjYW4KKwkJICogYmUsIGFuZCBhbGlnbiB0aGUgZmlsZSBuYW1lcyB0byB0aGF0LgorCQkgKi8KKwkJcGFyc2VfbWF0Y2gobWF0Y2hlc1swXSwgJnRhZ3ApOworCQl0YWdsZW4gPSAoaW50KSh0YWdwLnRhZ25hbWVfZW5kIC0gdGFncC50YWduYW1lICsgMik7CisJCWlmICh0YWdsZW4gPCAxOCkKKwkJICAgIHRhZ2xlbiA9IDE4OworCQlpZiAodGFnbGVuID4gQ29sdW1ucyAtIDI1KQorCQkgICAgdGFnbGVuID0gTUFYQ09MOworCQlpZiAobXNnX2NvbCA9PSAwKQorCQkgICAgbXNnX2RpZG91dCA9IEZBTFNFOwkvKiBvdmVyd3JpdGUgcHJldmlvdXMgbWVzc2FnZSAqLworCQltc2dfc3RhcnQoKTsKKwkJTVNHX1BVVFNfQVRUUihfKCIgICMgcHJpIGtpbmQgdGFnIiksIGhsX2F0dHIoSExGX1QpKTsKKwkJbXNnX2Nscl9lb3MoKTsKKwkJdGFnbGVuX2FkdmFuY2UodGFnbGVuKTsKKwkJTVNHX1BVVFNfQVRUUihfKCJmaWxlXG4iKSwgaGxfYXR0cihITEZfVCkpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1fbWF0Y2hlczsgKytpKQorCQl7CisJCSAgICBwYXJzZV9tYXRjaChtYXRjaGVzW2ldLCAmdGFncCk7CisJCSAgICBpZiAoIW5ld190YWcgJiYgKAorI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpCisJCQkJKGdfZG9fdGFncHJldmlldworCQkJCSAmJiBpID09IHB0YWdfZW50cnkuY3VyX21hdGNoKSB8fAorI2VuZGlmCisJCQkJKHVzZV90YWdzdGFjaworCQkJCSAmJiBpID09IHRhZ3N0YWNrW3RhZ3N0YWNraWR4XS5jdXJfbWF0Y2gpKSkKKwkJCSpJT2J1ZmYgPSAnPic7CisJCSAgICBlbHNlCisJCQkqSU9idWZmID0gJyAnOworCQkgICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiArIDEsICIlMmQgJXMgIiwgaSArIDEsCisJCQkJCSAgIG10X25hbWVzW21hdGNoZXNbaV1bMF0gJiBNVF9NQVNLXSk7CisJCSAgICBtc2dfcHV0cyhJT2J1ZmYpOworCQkgICAgaWYgKHRhZ3AudGFna2luZCAhPSBOVUxMKQorCQkJbXNnX291dHRyYW5zX2xlbih0YWdwLnRhZ2tpbmQsCisJCQkJICAgICAgKGludCkodGFncC50YWdraW5kX2VuZCAtIHRhZ3AudGFna2luZCkpOworCQkgICAgbXNnX2FkdmFuY2UoMTMpOworCQkgICAgbXNnX291dHRyYW5zX2xlbl9hdHRyKHRhZ3AudGFnbmFtZSwKKwkJCQkgICAgICAgKGludCkodGFncC50YWduYW1lX2VuZCAtIHRhZ3AudGFnbmFtZSksCisJCQkJCQkJICAgICAgaGxfYXR0cihITEZfVCkpOworCQkgICAgbXNnX3B1dGNoYXIoJyAnKTsKKwkJICAgIHRhZ2xlbl9hZHZhbmNlKHRhZ2xlbik7CisKKwkJICAgIC8qIEZpbmQgb3V0IHRoZSBhY3R1YWwgZmlsZSBuYW1lLiBJZiBpdCBpcyBsb25nLCB0cnVuY2F0ZQorCQkgICAgICogaXQgYW5kIHB1dCAiLi4uIiBpbiB0aGUgbWlkZGxlICovCisJCSAgICBwID0gdGFnX2Z1bGxfZm5hbWUoJnRhZ3ApOworCQkgICAgaWYgKHAgIT0gTlVMTCkKKwkJICAgIHsKKwkJCW1zZ19wdXRzX2xvbmdfYXR0cihwLCBobF9hdHRyKEhMRl9EKSk7CisJCQl2aW1fZnJlZShwKTsKKwkJICAgIH0KKwkJICAgIGlmIChtc2dfY29sID4gMCkKKwkJCW1zZ19wdXRjaGFyKCdcbicpOworCQkgICAgbXNnX2FkdmFuY2UoMTUpOworCisJCSAgICAvKiBwcmludCBhbnkgZXh0cmEgZmllbGRzICovCisJCSAgICBjb21tYW5kX2VuZCA9IHRhZ3AuY29tbWFuZF9lbmQ7CisJCSAgICBpZiAoY29tbWFuZF9lbmQgIT0gTlVMTCkKKwkJICAgIHsKKwkJCXAgPSBjb21tYW5kX2VuZCArIDM7CisJCQl3aGlsZSAoKnAgJiYgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nKQorCQkJeworCQkJICAgIHdoaWxlICgqcCA9PSBUQUIpCisJCQkJKytwOworCisJCQkgICAgLyogc2tpcCAiZmlsZToiIHdpdGhvdXQgYSB2YWx1ZSAoc3RhdGljIHRhZykgKi8KKwkJCSAgICBpZiAoU1RSTkNNUChwLCAiZmlsZToiLCA1KSA9PSAwCisJCQkJCQkJICYmIHZpbV9pc3NwYWNlKHBbNV0pKQorCQkJICAgIHsKKwkJCQlwICs9IDU7CisJCQkJY29udGludWU7CisJCQkgICAgfQorCQkJICAgIC8qIHNraXAgImtpbmQ6PGtpbmQ+IiBhbmQgIjxraW5kPiIgKi8KKwkJCSAgICBpZiAocCA9PSB0YWdwLnRhZ2tpbmQKKwkJCQkgICAgfHwgKHAgKyA1ID09IHRhZ3AudGFna2luZAorCQkJCQkgICAgJiYgU1RSTkNNUChwLCAia2luZDoiLCA1KSA9PSAwKSkKKwkJCSAgICB7CisJCQkJcCA9IHRhZ3AudGFna2luZF9lbmQ7CisJCQkJY29udGludWU7CisJCQkgICAgfQorCQkJICAgIC8qIHByaW50IGFsbCBvdGhlciBleHRyYSBmaWVsZHMgKi8KKwkJCSAgICBhdHRyID0gaGxfYXR0cihITEZfQ00pOworCQkJICAgIHdoaWxlICgqcCAmJiAqcCAhPSAnXHInICYmICpwICE9ICdcbicpCisJCQkgICAgeworCQkJCWlmIChtc2dfY29sICsgcHRyMmNlbGxzKHApID49IENvbHVtbnMpCisJCQkJeworCQkJCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKwkJCQkgICAgbXNnX2FkdmFuY2UoMTUpOworCQkJCX0KKwkJCQlwID0gbXNnX291dHRyYW5zX29uZShwLCBhdHRyKTsKKwkJCQlpZiAoKnAgPT0gVEFCKQorCQkJCXsKKwkJCQkgICAgbXNnX3B1dHNfYXR0cigoY2hhcl91ICopIiAiLCBhdHRyKTsKKwkJCQkgICAgYnJlYWs7CisJCQkJfQorCQkJCWlmICgqcCA9PSAnOicpCisJCQkJICAgIGF0dHIgPSAwOworCQkJICAgIH0KKwkJCX0KKwkJCWlmIChtc2dfY29sID4gMTUpCisJCQl7CisJCQkgICAgbXNnX3B1dGNoYXIoJ1xuJyk7CisJCQkgICAgbXNnX2FkdmFuY2UoMTUpOworCQkJfQorCQkgICAgfQorCQkgICAgZWxzZQorCQkgICAgeworCQkJZm9yIChwID0gdGFncC5jb21tYW5kOworCQkJCQkgICpwICYmICpwICE9ICdccicgJiYgKnAgIT0gJ1xuJzsgKytwKQorCQkJICAgIDsKKwkJCWNvbW1hbmRfZW5kID0gcDsKKwkJICAgIH0KKworCQkgICAgLyoKKwkJICAgICAqIFB1dCB0aGUgaW5mbyAoaW4gc2V2ZXJhbCBsaW5lcykgYXQgY29sdW1uIDE1LgorCQkgICAgICogRG9uJ3QgZGlzcGxheSAiL14iIGFuZCAiP14iLgorCQkgICAgICovCisJCSAgICBwID0gdGFncC5jb21tYW5kOworCQkgICAgaWYgKCpwID09ICcvJyB8fCAqcCA9PSAnPycpCisJCSAgICB7CisJCQkrK3A7CisJCQlpZiAoKnAgPT0gJ14nKQorCQkJICAgICsrcDsKKwkJICAgIH0KKwkJICAgIC8qIFJlbW92ZSBsZWFkaW5nIHdoaXRlc3BhY2UgZnJvbSBwYXR0ZXJuICovCisJCSAgICB3aGlsZSAocCAhPSBjb21tYW5kX2VuZCAmJiB2aW1faXNzcGFjZSgqcCkpCisJCQkrK3A7CisKKwkJICAgIHdoaWxlIChwICE9IGNvbW1hbmRfZW5kKQorCQkgICAgeworCQkJaWYgKG1zZ19jb2wgKyAoKnAgPT0gVEFCID8gMSA6IHB0cjJjZWxscyhwKSkgPiBDb2x1bW5zKQorCQkJICAgIG1zZ19wdXRjaGFyKCdcbicpOworCQkJbXNnX2FkdmFuY2UoMTUpOworCisJCQkvKiBza2lwIGJhY2tzbGFzaCB1c2VkIGZvciBlc2NhcGluZyBjb21tYW5kIGNoYXIgKi8KKwkJCWlmICgqcCA9PSAnXFwnICYmICoocCArIDEpID09ICp0YWdwLmNvbW1hbmQpCisJCQkgICAgKytwOworCisJCQlpZiAoKnAgPT0gVEFCKQorCQkJeworCQkJICAgIG1zZ19wdXRjaGFyKCcgJyk7CisJCQkgICAgKytwOworCQkJfQorCQkJZWxzZQorCQkJICAgIHAgPSBtc2dfb3V0dHJhbnNfb25lKHAsIDApOworCisJCQkvKiBkb24ndCBkaXNwbGF5IHRoZSAiJC87XCIiIGFuZCAiJD87XCIiICovCisJCQlpZiAocCA9PSBjb21tYW5kX2VuZCAtIDIgJiYgKnAgPT0gJyQnCisJCQkJCQkgJiYgKihwICsgMSkgPT0gKnRhZ3AuY29tbWFuZCkKKwkJCSAgICBicmVhazsKKwkJCS8qIGRvbid0IGRpc3BsYXkgbWF0Y2hpbmcgJy8nIG9yICc/JyAqLworCQkJaWYgKHAgPT0gY29tbWFuZF9lbmQgLSAxICYmICpwID09ICp0YWdwLmNvbW1hbmQKKwkJCQkJCSAmJiAoKnAgPT0gJy8nIHx8ICpwID09ICc/JykpCisJCQkgICAgYnJlYWs7CisJCSAgICB9CisJCSAgICBpZiAobXNnX2NvbCkKKwkJCW1zZ19wdXRjaGFyKCdcbicpOworCQkgICAgdWlfYnJlYWtjaGVjaygpOworCQkgICAgaWYgKGdvdF9pbnQpCisJCSAgICB7CisJCQlnb3RfaW50ID0gRkFMU0U7CS8qIG9ubHkgc3RvcCB0aGUgbGlzdGluZyAqLworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJYXNrX2Zvcl9zZWxlY3Rpb24gPSBUUlVFOworCSAgICB9CisKKwkgICAgaWYgKGFza19mb3Jfc2VsZWN0aW9uID09IFRSVUUpCisJICAgIHsKKwkJLyoKKwkJICogQXNrIHRvIHNlbGVjdCBhIHRhZyBmcm9tIHRoZSBsaXN0LgorCQkgKiBXaGVuIHVzaW5nICI6c2lsZW50IiBhc3N1bWUgdGhhdCA8Q1I+IHdhcyBlbnRlcmVkLgorCQkgKi8KKwkJTVNHX1BVVFMoXygiRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KTogIikpOworCQlpID0gZ2V0X251bWJlcihUUlVFKTsKKwkJaWYgKEtleVR5cGVkKQkJLyogZG9uJ3QgY2FsbCB3YWl0X3JldHVybigpIG5vdyAqLworCQl7CisJCSAgICBtc2dfcHV0Y2hhcignXG4nKTsKKwkJICAgIGNtZGxpbmVfcm93ID0gbXNnX3JvdyAtIDE7CisJCSAgICBuZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisJCSAgICBtc2dfZGlkYW55ID0gRkFMU0U7CisJCX0KKwkJaWYgKGkgPD0gMCB8fCBpID4gbnVtX21hdGNoZXMgfHwgZ290X2ludCkKKwkJeworCQkgICAgLyogbm8gdmFsaWQgY2hvaWNlOiBkb24ndCBjaGFuZ2UgYW55dGhpbmcgKi8KKwkJICAgIGlmICh1c2VfdGFnc3RhY2spCisJCSAgICB7CisJCQl0YWdzdGFja1t0YWdzdGFja2lkeF0uZm1hcmsgPSBzYXZlZF9mbWFyazsKKwkJCXRhZ3N0YWNraWR4ID0gcHJldnRhZ3N0YWNraWR4OworCQkgICAgfQorI2lmZGVmIEZFQVRfQ1NDT1BFCisJCSAgICBjc19mcmVlX3RhZ3MoKTsKKwkJICAgIGp1bXBlZF90b190YWcgPSBUUlVFOworI2VuZGlmCisJCSAgICBicmVhazsKKwkJfQorI2lmIDAKKwkJLyogYXZvaWQgdGhlIG5lZWQgdG8gaGl0IDxDUj4gd2hlbiBqdW1waW5nIHRvIGFub3RoZXIgZmlsZSAqLworCQltc2dfc2Nyb2xsZWQgPSAwOworCQlyZWRyYXdfYWxsX2xhdGVyKE5PVF9WQUxJRCk7CisjZW5kaWYKKwkJY3VyX21hdGNoID0gaSAtIDE7CisJICAgIH0KKworCSAgICBpZiAoY3VyX21hdGNoID49IG51bV9tYXRjaGVzKQorCSAgICB7CisJCS8qIEF2b2lkIGdpdmluZyB0aGlzIGVycm9yIHdoZW4gYSBmaWxlIHdhc24ndCBmb3VuZCBhbmQgd2UncmUKKwkJICogbG9va2luZyBmb3IgYSBtYXRjaCBpbiBhbm90aGVyIGZpbGUsIHdoaWNoIHdhc24ndCBmb3VuZC4KKwkJICogVGhlcmUgd2lsbCBiZSBhbiBFTVNHKCJmaWxlIGRvZXNuJ3QgZXhpc3QiKSBiZWxvdyB0aGVuLiAqLworCQlpZiAoKHR5cGUgPT0gRFRfTkVYVCB8fCB0eXBlID09IERUX0ZJUlNUKQorCQkJCQkJICAgICAgJiYgbm9maWxlX2ZuYW1lID09IE5VTEwpCisJCXsKKwkJICAgIGlmIChudW1fbWF0Y2hlcyA9PSAxKQorCQkJRU1TRyhfKCJFNDI3OiBUaGVyZSBpcyBvbmx5IG9uZSBtYXRjaGluZyB0YWciKSk7CisJCSAgICBlbHNlCisJCQlFTVNHKF8oIkU0Mjg6IENhbm5vdCBnbyBiZXlvbmQgbGFzdCBtYXRjaGluZyB0YWciKSk7CisJCSAgICBza2lwX21zZyA9IFRSVUU7CisJCX0KKwkJY3VyX21hdGNoID0gbnVtX21hdGNoZXMgLSAxOworCSAgICB9CisJICAgIGlmICh1c2VfdGFnc3RhY2spCisJICAgIHsKKwkJdGFnc3RhY2tbdGFnc3RhY2tpZHhdLmN1cl9tYXRjaCA9IGN1cl9tYXRjaDsKKwkJdGFnc3RhY2tbdGFnc3RhY2tpZHhdLmN1cl9mbnVtID0gY3VyX2ZudW07CisJCSsrdGFnc3RhY2tpZHg7CisJICAgIH0KKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCSAgICBlbHNlIGlmIChnX2RvX3RhZ3ByZXZpZXcpCisJICAgIHsKKwkJcHRhZ19lbnRyeS5jdXJfbWF0Y2ggPSBjdXJfbWF0Y2g7CisJCXB0YWdfZW50cnkuY3VyX2ZudW0gPSBjdXJfZm51bTsKKwkgICAgfQorI2VuZGlmCisKKwkgICAgLyoKKwkgICAgICogT25seSB3aGVuIGdvaW5nIHRvIHRyeSB0aGUgbmV4dCBtYXRjaCwgcmVwb3J0IHRoYXQgdGhlIHByZXZpb3VzCisJICAgICAqIGZpbGUgZGlkbid0IGV4aXN0LiAgT3RoZXJ3aXNlIGFuIEVNU0coKSBpcyBnaXZlbiBiZWxvdy4KKwkgICAgICovCisJICAgIGlmIChub2ZpbGVfZm5hbWUgIT0gTlVMTCAmJiBlcnJvcl9jdXJfbWF0Y2ggIT0gY3VyX21hdGNoKQorCQltc2dfc3RyKChjaGFyX3UgKilfKCJGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIpLAorCQkJCQkJCQlub2ZpbGVfZm5hbWUpOworCisKKwkgICAgaWMgPSAobWF0Y2hlc1tjdXJfbWF0Y2hdWzBdICYgTVRfSUNfT0ZGKTsKKwkgICAgaWYgKHR5cGUgIT0gRFRfU0VMRUNUICYmIHR5cGUgIT0gRFRfSlVNUAorI2lmZGVmIEZFQVRfQ1NDT1BFCisJCSYmIHR5cGUgIT0gRFRfQ1NDT1BFCisjZW5kaWYKKwkJJiYgKG51bV9tYXRjaGVzID4gMSB8fCBpYykKKwkJJiYgIXNraXBfbXNnKQorCSAgICB7CisJCS8qIEdpdmUgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIHRhZ3MgKi8KKwkJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygidGFnICVkIG9mICVkJXMiKSwKKwkJCQljdXJfbWF0Y2ggKyAxLAorCQkJCW51bV9tYXRjaGVzLAorCQkJCW1heF9udW1fbWF0Y2hlcyAhPSBNQVhDT0wgPyBfKCIgb3IgbW9yZSIpIDogIiIpOworCQlpZiAoaWMpCisJCSAgICBTVFJDQVQoSU9idWZmLCBfKCIgIFVzaW5nIHRhZyB3aXRoIGRpZmZlcmVudCBjYXNlISIpKTsKKwkJaWYgKChudW1fbWF0Y2hlcyA+IHByZXZfbnVtX21hdGNoZXMgfHwgbmV3X3RhZykKKwkJCQkJCQkgICAmJiBudW1fbWF0Y2hlcyA+IDEpCisJCXsKKwkJICAgIGlmIChpYykKKwkJCW1zZ19hdHRyKElPYnVmZiwgaGxfYXR0cihITEZfVykpOworCQkgICAgZWxzZQorCQkJbXNnKElPYnVmZik7CisJCSAgICBtc2dfc2Nyb2xsID0gVFJVRTsJLyogZG9uJ3Qgb3ZlcndyaXRlIHRoaXMgbWVzc2FnZSAqLworCQl9CisJCWVsc2UKKwkJICAgIGdpdmVfd2FybmluZyhJT2J1ZmYsIGljKTsKKwkJaWYgKGljICYmICFtc2dfc2Nyb2xsZWQgJiYgbXNnX3NpbGVudCA9PSAwKQorCQl7CisJCSAgICBvdXRfZmx1c2goKTsKKwkJICAgIHVpX2RlbGF5KDEwMDBMLCBUUlVFKTsKKwkJfQorCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogSnVtcCB0byB0aGUgZGVzaXJlZCBtYXRjaC4KKwkgICAgICovCisJICAgIGlmIChqdW1wdG9fdGFnKG1hdGNoZXNbY3VyX21hdGNoXSwgZm9yY2VpdCwgdHlwZSAhPSBEVF9DU0NPUEUpCisJCQkJCQkJCSA9PSBOT1RBR0ZJTEUpCisJICAgIHsKKwkJLyogRmlsZSBub3QgZm91bmQ6IHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgbWF0Y2hpbmcgdGFnICovCisJCWlmICgodHlwZSA9PSBEVF9QUkVWICYmIGN1cl9tYXRjaCA+IDApCisJCQl8fCAoKHR5cGUgPT0gRFRfVEFHIHx8IHR5cGUgPT0gRFRfTkVYVAorCQkJCQkJCSAgfHwgdHlwZSA9PSBEVF9GSVJTVCkKKwkJCSAgICAmJiAobWF4X251bV9tYXRjaGVzICE9IE1BWENPTAorCQkJCQkgICAgIHx8IGN1cl9tYXRjaCA8IG51bV9tYXRjaGVzIC0gMSkpKQorCQl7CisJCSAgICBlcnJvcl9jdXJfbWF0Y2ggPSBjdXJfbWF0Y2g7CisJCSAgICBpZiAodXNlX3RhZ3N0YWNrKQorCQkJLS10YWdzdGFja2lkeDsKKwkJICAgIGlmICh0eXBlID09IERUX1BSRVYpCisJCQktLWN1cl9tYXRjaDsKKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCXR5cGUgPSBEVF9ORVhUOworCQkJKytjdXJfbWF0Y2g7CisJCSAgICB9CisJCSAgICBjb250aW51ZTsKKwkJfQorCQlFTVNHMihfKCJFNDI5OiBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIpLCBub2ZpbGVfZm5hbWUpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBXZSBtYXkgaGF2ZSBqdW1wZWQgdG8gYW5vdGhlciB3aW5kb3csIGNoZWNrIHRoYXQKKwkJICogdGFnc3RhY2tpZHggaXMgc3RpbGwgdmFsaWQuICovCisJCWlmICh1c2VfdGFnc3RhY2sgJiYgdGFnc3RhY2tpZHggPiBjdXJ3aW4tPndfdGFnc3RhY2tsZW4pCisJCSAgICB0YWdzdGFja2lkeCA9IGN1cndpbi0+d190YWdzdGFja2lkeDsKKyNpZmRlZiBGRUFUX0NTQ09QRQorCQlqdW1wZWRfdG9fdGFnID0gVFJVRTsKKyNlbmRpZgorCSAgICB9CisJfQorCWJyZWFrOworICAgIH0KKworZW5kX2RvX3RhZzoKKyAgICAvKiBPbmx5IHN0b3JlIHRoZSBuZXcgaW5kZXggd2hlbiB1c2luZyB0aGUgdGFnc3RhY2sgYW5kIGl0J3MgdmFsaWQuICovCisgICAgaWYgKHVzZV90YWdzdGFjayAmJiB0YWdzdGFja2lkeCA8PSBjdXJ3aW4tPndfdGFnc3RhY2tsZW4pCisJY3Vyd2luLT53X3RhZ3N0YWNraWR4ID0gdGFnc3RhY2tpZHg7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgcG9zdHBvbmVkX3NwbGl0ID0gMDsJLyogZG9uJ3Qgc3BsaXQgbmV4dCB0aW1lICovCisjZW5kaWYKKworI2lmZGVmIEZFQVRfQ1NDT1BFCisgICAgcmV0dXJuIGp1bXBlZF90b190YWc7CisjZWxzZQorICAgIHJldHVybiBGQUxTRTsKKyNlbmRpZgorfQorCisvKgorICogRnJlZSBjYWNoZWQgdGFncy4KKyAqLworICAgIHZvaWQKK3RhZ19mcmVlbWF0Y2goKQoreworICAgIHZpbV9mcmVlKHRhZ21hdGNobmFtZSk7CisgICAgdGFnbWF0Y2huYW1lID0gTlVMTDsKK30KKworICAgIHN0YXRpYyB2b2lkCit0YWdsZW5fYWR2YW5jZShsKQorICAgIGludAkJbDsKK3sKKyAgICBpZiAobCA9PSBNQVhDT0wpCisgICAgeworCW1zZ19wdXRjaGFyKCdcbicpOworCW1zZ19hZHZhbmNlKDI0KTsKKyAgICB9CisgICAgZWxzZQorCW1zZ19hZHZhbmNlKDEzICsgbCk7Cit9CisKKy8qCisgKiBQcmludCB0aGUgdGFnIHN0YWNrCisgKi8KKy8qQVJHU1VTRUQqLworICAgIHZvaWQKK2RvX3RhZ3MoZWFwKQorICAgIGV4YXJnX1QJKmVhcDsKK3sKKyAgICBpbnQJCWk7CisgICAgY2hhcl91CSpuYW1lOworICAgIHRhZ2d5X1QJKnRhZ3N0YWNrID0gY3Vyd2luLT53X3RhZ3N0YWNrOworICAgIGludAkJdGFnc3RhY2tpZHggPSBjdXJ3aW4tPndfdGFnc3RhY2tpZHg7CisgICAgaW50CQl0YWdzdGFja2xlbiA9IGN1cndpbi0+d190YWdzdGFja2xlbjsKKworICAgIC8qIEhpZ2hsaWdodCB0aXRsZSAqLworICAgIE1TR19QVVRTX1RJVExFKF8oIlxuICAjIFRPIHRhZyAgICAgICAgIEZST00gbGluZSAgaW4gZmlsZS90ZXh0IikpOworICAgIGZvciAoaSA9IDA7IGkgPCB0YWdzdGFja2xlbjsgKytpKQorICAgIHsKKwlpZiAodGFnc3RhY2tbaV0udGFnbmFtZSAhPSBOVUxMKQorCXsKKwkgICAgbmFtZSA9IGZtX2dldG5hbWUoJih0YWdzdGFja1tpXS5mbWFyayksIDMwKTsKKwkgICAgaWYgKG5hbWUgPT0gTlVMTCkJICAgIC8qIGZpbGUgbmFtZSBub3QgYXZhaWxhYmxlICovCisJCWNvbnRpbnVlOworCisJICAgIG1zZ19wdXRjaGFyKCdcbicpOworCSAgICBzcHJpbnRmKChjaGFyICopSU9idWZmLCAiJWMlMmQgJTJkICUtMTVzICU1bGQgICIsCisJCWkgPT0gdGFnc3RhY2tpZHggPyAnPicgOiAnICcsCisJCWkgKyAxLAorCQl0YWdzdGFja1tpXS5jdXJfbWF0Y2ggKyAxLAorCQl0YWdzdGFja1tpXS50YWduYW1lLAorCQl0YWdzdGFja1tpXS5mbWFyay5tYXJrLmxudW0pOworCSAgICBtc2dfb3V0dHJhbnMoSU9idWZmKTsKKwkgICAgbXNnX291dHRyYW5zX2F0dHIobmFtZSwgdGFnc3RhY2tbaV0uZm1hcmsuZm51bSA9PSBjdXJidWYtPmJfZm51bQorCQkJCQkJCT8gaGxfYXR0cihITEZfRCkgOiAwKTsKKwkgICAgdmltX2ZyZWUobmFtZSk7CisJfQorCW91dF9mbHVzaCgpOwkJICAgIC8qIHNob3cgb25lIGxpbmUgYXQgYSB0aW1lICovCisgICAgfQorICAgIGlmICh0YWdzdGFja2lkeCA9PSB0YWdzdGFja2xlbikJLyogaWR4IGF0IHRvcCBvZiBzdGFjayAqLworCU1TR19QVVRTKCJcbj4iKTsKK30KKworLyogV2hlbiBub3QgdXNpbmcgYSBDUiBmb3IgbGluZSBzZXBhcmF0b3IsIHVzZSB2aW1fZmdldHMoKSB0byByZWFkIHRhZyBsaW5lcy4KKyAqIEZvciB0aGUgTWFjIHVzZSB0YWdfZmdldHMoKS4gIEl0IGNhbiBoYW5kbGUgYW55IGxpbmUgc2VwYXJhdG9yLCBidXQgaXMgbXVjaAorICogc2xvd2VyIHRoYW4gdmltX2ZnZXRzKCkuCisgKi8KKyNpZm5kZWYgVVNFX0NSCisjIGRlZmluZSB0YWdfZmdldHMgdmltX2ZnZXRzCisjZW5kaWYKKworI2lmZGVmIEZFQVRfVEFHX0JJTlMKK3N0YXRpYyBpbnQgdGFnX3N0cm5pY21wIF9fQVJHUygoY2hhcl91ICpzMSwgY2hhcl91ICpzMiwgc2l6ZV90IGxlbikpOworCisvKgorICogQ29tcGFyZSB0d28gc3RyaW5ncywgZm9yIGxlbmd0aCAibGVuIiwgaWdub3JpbmcgY2FzZSB0aGUgQVNDSUkgd2F5LgorICogcmV0dXJuIDAgZm9yIG1hdGNoLCA8IDAgZm9yIHNtYWxsZXIsID4gMCBmb3IgYmlnZ2VyCisgKiBNYWtlIHN1cmUgY2FzZSBpcyBmb2xkZWQgdG8gdXBwZXJjYXNlIGluIGNvbXBhcmlzb24gKGxpa2UgZm9yICdzb3J0IC1mJykKKyAqLworICAgIHN0YXRpYyBpbnQKK3RhZ19zdHJuaWNtcChzMSwgczIsIGxlbikKKyAgICBjaGFyX3UJKnMxOworICAgIGNoYXJfdQkqczI7CisgICAgc2l6ZV90CWxlbjsKK3sKKyAgICBpbnQJCWk7CisKKyAgICB3aGlsZSAobGVuID4gMCkKKyAgICB7CisJaSA9IChpbnQpVE9VUFBFUl9BU0MoKnMxKSAtIChpbnQpVE9VUFBFUl9BU0MoKnMyKTsKKwlpZiAoaSAhPSAwKQorCSAgICByZXR1cm4gaTsJCQkvKiB0aGlzIGNoYXJhY3RlciBkaWZmZXJlbnQgKi8KKwlpZiAoKnMxID09IE5VTCkKKwkgICAgYnJlYWs7CQkJLyogc3RyaW5ncyBtYXRjaCB1bnRpbCBOVUwgKi8KKwkrK3MxOworCSsrczI7CisJLS1sZW47CisgICAgfQorICAgIHJldHVybiAwOwkJCQkvKiBzdHJpbmdzIG1hdGNoICovCit9CisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSB0byBob2xkIGluZm8gYWJvdXQgdGhlIHRhZyBwYXR0ZXJuIGJlaW5nIHVzZWQuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgY2hhcl91CSpwYXQ7CQkvKiB0aGUgcGF0dGVybiAqLworICAgIGludAkJbGVuOwkJLyogbGVuZ3RoIG9mIHBhdFtdICovCisgICAgY2hhcl91CSpoZWFkOwkJLyogc3RhcnQgb2YgcGF0dGVybiBoZWFkICovCisgICAgaW50CQloZWFkbGVuOwkvKiBsZW5ndGggb2YgaGVhZFtdICovCisgICAgcmVnbWF0Y2hfVAlyZWdtYXRjaDsJLyogcmVnZXhwIHByb2dyYW0sIG1heSBiZSBOVUxMICovCit9IHBhdF9UOworCitzdGF0aWMgdm9pZCBwcmVwYXJlX3BhdHMgX19BUkdTKChwYXRfVCAqcGF0cywgaW50IGhhc19yZSkpOworCisvKgorICogRXh0cmFjdCBpbmZvIGZyb20gdGhlIHRhZyBzZWFyY2ggcGF0dGVybiAicGF0cy0+cGF0Ii4KKyAqLworICAgIHN0YXRpYyB2b2lkCitwcmVwYXJlX3BhdHMocGF0cywgaGFzX3JlKQorICAgIHBhdF9UCSpwYXRzOworICAgIGludAkJaGFzX3JlOworeworICAgIHBhdHMtPmhlYWQgPSBwYXRzLT5wYXQ7CisgICAgcGF0cy0+aGVhZGxlbiA9IHBhdHMtPmxlbjsKKyAgICBpZiAoaGFzX3JlKQorICAgIHsKKwkvKiBXaGVuIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoICdeJyBvciAiXFw8IiwgYmluYXJ5IHNlYXJjaGluZyBjYW4gYmUKKwkgKiB1c2VkIChtdWNoIGZhc3RlcikuICovCisJaWYgKHBhdHMtPnBhdFswXSA9PSAnXicpCisJICAgIHBhdHMtPmhlYWQgPSBwYXRzLT5wYXQgKyAxOworCWVsc2UgaWYgKHBhdHMtPnBhdFswXSA9PSAnXFwnICYmIHBhdHMtPnBhdFsxXSA9PSAnPCcpCisJICAgIHBhdHMtPmhlYWQgPSBwYXRzLT5wYXQgKyAyOworCWlmIChwYXRzLT5oZWFkID09IHBhdHMtPnBhdCkKKwkgICAgcGF0cy0+aGVhZGxlbiA9IDA7CisJZWxzZQorCSAgICBmb3IgKHBhdHMtPmhlYWRsZW4gPSAwOyBwYXRzLT5oZWFkW3BhdHMtPmhlYWRsZW5dICE9IE5VTDsKKwkJCQkJCQkgICAgICArK3BhdHMtPmhlYWRsZW4pCisJCWlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikocF9tYWdpYyA/ICIuW34qXFwkIiA6ICJcXCQiKSwKKwkJCQkJICAgcGF0cy0+aGVhZFtwYXRzLT5oZWFkbGVuXSkgIT0gTlVMTCkKKwkJICAgIGJyZWFrOworCWlmIChwX3RsICE9IDAgJiYgcGF0cy0+aGVhZGxlbiA+IHBfdGwpCS8qIGFkanVzdCBmb3IgJ3RhZ2xlbmd0aCcgKi8KKwkgICAgcGF0cy0+aGVhZGxlbiA9IHBfdGw7CisgICAgfQorCisgICAgaWYgKGhhc19yZSkKKwlwYXRzLT5yZWdtYXRjaC5yZWdwcm9nID0gdmltX3JlZ2NvbXAocGF0cy0+cGF0LCBwX21hZ2ljID8gUkVfTUFHSUMgOiAwKTsKKyAgICBlbHNlCisJcGF0cy0+cmVnbWF0Y2gucmVncHJvZyA9IE5VTEw7Cit9CisKKy8qCisgKiBmaW5kX3RhZ3MoKSAtIHNlYXJjaCBmb3IgdGFncyBpbiB0YWdzIGZpbGVzCisgKgorICogUmV0dXJuIEZBSUwgaWYgc2VhcmNoIGNvbXBsZXRlbHkgZmFpbGVkICgqbnVtX21hdGNoZXMgd2lsbCBiZSAwLCAqbWF0Y2hlc3AKKyAqIHdpbGwgYmUgTlVMTCksIE9LIG90aGVyd2lzZS4KKyAqCisgKiBUaGVyZSBpcyBhIHByaW9yaXR5IGluIHdoaWNoIHR5cGUgb2YgdGFnIGlzIHJlY29nbml6ZWQuCisgKgorICogIDYuCUEgc3RhdGljIG9yIGdsb2JhbCB0YWcgd2l0aCBhIGZ1bGwgbWF0Y2hpbmcgdGFnIGZvciB0aGUgY3VycmVudCBmaWxlLgorICogIDUuCUEgZ2xvYmFsIHRhZyB3aXRoIGEgZnVsbCBtYXRjaGluZyB0YWcgZm9yIGFub3RoZXIgZmlsZS4KKyAqICA0LglBIHN0YXRpYyB0YWcgd2l0aCBhIGZ1bGwgbWF0Y2hpbmcgdGFnIGZvciBhbm90aGVyIGZpbGUuCisgKiAgMy4JQSBzdGF0aWMgb3IgZ2xvYmFsIHRhZyB3aXRoIGFuIGlnbm9yZS1jYXNlIG1hdGNoaW5nIHRhZyBmb3IgdGhlCisgKgljdXJyZW50IGZpbGUuCisgKiAgMi4JQSBnbG9iYWwgdGFnIHdpdGggYW4gaWdub3JlLWNhc2UgbWF0Y2hpbmcgdGFnIGZvciBhbm90aGVyIGZpbGUuCisgKiAgMS4JQSBzdGF0aWMgdGFnIHdpdGggYW4gaWdub3JlLWNhc2UgbWF0Y2hpbmcgdGFnIGZvciBhbm90aGVyIGZpbGUuCisgKgorICogVGFncyBpbiBhbiBlbWFjcy1zdHlsZSB0YWdzIGZpbGUgYXJlIGFsd2F5cyBnbG9iYWwuCisgKgorICogZmxhZ3M6CisgKiBUQUdfSEVMUAkgIG9ubHkgc2VhcmNoIGZvciBoZWxwIHRhZ3MKKyAqIFRBR19OQU1FUwkgIG9ubHkgcmV0dXJuIG5hbWUgb2YgdGFnCisgKiBUQUdfUkVHRVhQCSAgdXNlICJwYXQiIGFzIGEgcmVnZXhwCisgKiBUQUdfTk9JQwkgIGRvbid0IGFsd2F5cyBpZ25vcmUgY2FzZQorICogVEFHX0tFRVBfTEFORyAga2VlcCBsYW5ndWFnZQorICovCisgICAgaW50CitmaW5kX3RhZ3MocGF0LCBudW1fbWF0Y2hlcywgbWF0Y2hlc3AsIGZsYWdzLCBtaW5jb3VudCwgYnVmX2ZmbmFtZSkKKyAgICBjaGFyX3UJKnBhdDsJCQkvKiBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IgKi8KKyAgICBpbnQJCSpudW1fbWF0Y2hlczsJCS8qIHJldHVybjogbnVtYmVyIG9mIG1hdGNoZXMgZm91bmQgKi8KKyAgICBjaGFyX3UJKioqbWF0Y2hlc3A7CQkvKiByZXR1cm46IGFycmF5IG9mIG1hdGNoZXMgZm91bmQgKi8KKyAgICBpbnQJCWZsYWdzOworICAgIGludAkJbWluY291bnQ7CQkvKiAgTUFYQ09MOiBmaW5kIGFsbCBtYXRjaGVzCisJCQkJCSAgICAgb3RoZXI6IG1pbmltYWwgbnVtYmVyIG9mIG1hdGNoZXMgKi8KKyAgICBjaGFyX3UJKmJ1Zl9mZm5hbWU7CQkvKiBuYW1lIG9mIGJ1ZmZlciBmb3IgcHJpb3JpdHkgKi8KK3sKKyAgICBGSUxFICAgICAgICpmcDsKKyAgICBjaGFyX3UgICAgICpsYnVmOwkJCS8qIGxpbmUgYnVmZmVyICovCisgICAgY2hhcl91ICAgICAqdGFnX2ZuYW1lOwkJLyogbmFtZSBvZiB0YWcgZmlsZSAqLworICAgIGludAkJZmlyc3RfZmlsZTsJCS8qIHRyeWluZyBmaXJzdCB0YWcgZmlsZSAqLworICAgIHRhZ3B0cnNfVAl0YWdwOworICAgIGludAkJZGlkX29wZW4gPSBGQUxTRTsJLyogZGlkIG9wZW4gYSB0YWcgZmlsZSAqLworICAgIGludAkJc3RvcF9zZWFyY2hpbmcgPSBGQUxTRTsJLyogc3RvcCB3aGVuIG1hdGNoIGZvdW5kIG9yIGVycm9yICovCisgICAgaW50CQlyZXR2YWwgPSBGQUlMOwkJLyogcmV0dXJuIHZhbHVlICovCisgICAgaW50CQlpc19zdGF0aWM7CQkvKiBjdXJyZW50IHRhZyBsaW5lIGlzIHN0YXRpYyAqLworICAgIGludAkJaXNfY3VycmVudDsJCS8qIGZpbGUgbmFtZSBtYXRjaGVzICovCisgICAgaW50CQllb2YgPSBGQUxTRTsJCS8qIGZvdW5kIGVuZC1vZi1maWxlICovCisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWk7CisjaWZkZWYgRkVBVF9UQUdfQklOUworICAgIHN0cnVjdCB0YWdfc2VhcmNoX2luZm8JLyogQmluYXJ5IHNlYXJjaCBmaWxlIG9mZnNldHMgKi8KKyAgICB7CisJb2ZmX3QJbG93X29mZnNldDsJLyogb2Zmc2V0IGZvciBmaXJzdCBjaGFyIG9mIGZpcnN0IGxpbmUgdGhhdAorCQkJCSAgIGNvdWxkIG1hdGNoICovCisJb2ZmX3QJaGlnaF9vZmZzZXQ7CS8qIG9mZnNldCBvZiBjaGFyIGFmdGVyIGxhc3QgbGluZSB0aGF0IGNvdWxkCisJCQkJICAgbWF0Y2ggKi8KKwlvZmZfdAljdXJyX29mZnNldDsJLyogQ3VycmVudCBmaWxlIG9mZnNldCBpbiBzZWFyY2ggcmFuZ2UgKi8KKwlvZmZfdAljdXJyX29mZnNldF91c2VkOyAvKiBjdXJyX29mZnNldCB1c2VkIHdoZW4gc2tpcHBpbmcgYmFjayAqLworCW9mZl90CW1hdGNoX29mZnNldDsJLyogV2hlcmUgdGhlIGJpbmFyeSBzZWFyY2ggZm91bmQgYSB0YWcgKi8KKwlpbnQJbG93X2NoYXI7CS8qIGZpcnN0IGNoYXIgYXQgbG93X29mZnNldCAqLworCWludAloaWdoX2NoYXI7CS8qIGZpcnN0IGNoYXIgYXQgaGlnaF9vZmZzZXQgKi8KKyAgICB9IHNlYXJjaF9pbmZvOworICAgIG9mZl90CWZpbGVzaXplOworICAgIGludAkJdGFnY21wOworICAgIG9mZl90CW9mZnNldDsKKyAgICBpbnQJCXJvdW5kOworI2VuZGlmCisgICAgZW51bQorICAgIHsKKwlUU19TVEFSVCwJCS8qIGF0IHN0YXJ0IG9mIGZpbGUgKi8KKwlUU19MSU5FQVIJCS8qIGxpbmVhciBzZWFyY2hpbmcgZm9yd2FyZCwgdGlsbCBFT0YgKi8KKyNpZmRlZiBGRUFUX1RBR19CSU5TCisJLCBUU19CSU5BUlksCQkvKiBiaW5hcnkgc2VhcmNoaW5nICovCisJVFNfU0tJUF9CQUNLLAkJLyogc2tpcHBpbmcgYmFja3dhcmRzICovCisJVFNfU1RFUF9GT1JXQVJECQkvKiBzdGVwcGluZyBmb3J3YXJkcyAqLworI2VuZGlmCisgICAgfQlzdGF0ZTsJCQkvKiBDdXJyZW50IHNlYXJjaCBzdGF0ZSAqLworCisgICAgaW50CQljbXBsZW47CisgICAgaW50CQltYXRjaDsJCS8qIG1hdGNoZXMgKi8KKyAgICBpbnQJCW1hdGNoX25vX2ljID0gMDsvKiBtYXRjaGVzIHdpdGggcm1faWMgPT0gRkFMU0UgKi8KKyAgICBpbnQJCW1hdGNoX3JlOwkvKiBtYXRjaCB3aXRoIHJlZ2V4cCAqLworICAgIGludAkJbWF0Y2hvZmYgPSAwOworCisjaWZkZWYgRkVBVF9FTUFDU19UQUdTCisgICAgLyoKKyAgICAgKiBTdGFjayBmb3IgaW5jbHVkZWQgZW1hY3MtdGFncyBmaWxlLgorICAgICAqIEl0IGhhcyBhIGZpeGVkIHNpemUsIHRvIHRydW5jYXRlIGN5Y2xpYyBpbmNsdWRlcy4gancKKyAgICAgKi8KKyMgZGVmaW5lIElOQ1NUQUNLX1NJWkUgNDIKKyAgICBzdHJ1Y3QKKyAgICB7CisJRklMRQkqZnA7CisJY2hhcl91CSpldGFnX2ZuYW1lOworICAgIH0gaW5jc3RhY2tbSU5DU1RBQ0tfU0laRV07CisKKyAgICBpbnQJCWluY3N0YWNrX2lkeCA9IDA7CS8qIGluZGV4IGluIGluY3N0YWNrICovCisgICAgY2hhcl91ICAgICAqZWJ1ZjsJCQkvKiBhZGl0aW9uYWwgYnVmZmVyIGZvciBldGFnIGZuYW1lICovCisgICAgaW50CQlpc19ldGFnOwkJLyogY3VycmVudCBmaWxlIGlzIGVtYWNlcyBzdHlsZSAqLworI2VuZGlmCisKKyAgICBzdHJ1Y3QgbWF0Y2hfZm91bmQKKyAgICB7CisJaW50CWxlbjsJCS8qIG5yIG9mIGNoYXJzIG9mIG1hdGNoW10gdG8gYmUgY29tcGFyZWQgKi8KKwljaGFyX3UJbWF0Y2hbMV07CS8qIGFjdHVhbGx5IGxvbmdlciAqLworICAgIH0gKm1mcCwgKm1mcDI7CisgICAgZ2FycmF5X1QJZ2FfbWF0Y2hbTVRfQ09VTlRdOworICAgIGludAkJbWF0Y2hfY291bnQgPSAwOwkJLyogbnVtYmVyIG9mIG1hdGNoZXMgZm91bmQgKi8KKyAgICBjaGFyX3UJKiptYXRjaGVzOworICAgIGludAkJbXR0OworICAgIGludAkJbGVuOworICAgIGludAkJaGVscF9zYXZlOworI2lmZGVmIEZFQVRfTVVMVElfTEFORworICAgIGludAkJaGVscF9wcmkgPSAwOworICAgIGNoYXJfdQkqaGVscF9sYW5nX2ZpbmQgPSBOVUxMOwkJLyogbGFuZyB0byBiZSBmb3VuZCAqLworICAgIGNoYXJfdQloZWxwX2xhbmdbM107CQkJLyogbGFuZyBvZiBjdXJyZW50IHRhZ3MgZmlsZSAqLworICAgIGNoYXJfdQkqc2F2ZWRfcGF0ID0gTlVMTDsJCS8qIGNvcHkgb2YgcGF0W10gKi8KKyNlbmRpZgorCisgICAgLyogVXNlIHR3byBzZXRzIG9mIHZhcmlhYmxlcyBmb3IgdGhlIHBhdHRlcm46ICJvcmdwYXQiIGhvbGRzIHRoZSB2YWx1ZXMKKyAgICAgKiBmb3IgdGhlIG9yaWdpbmFsIHBhdHRlcm4gYW5kICJjb252cGF0IiBjb252ZXJ0ZWQgZnJvbSAnZW5jb2RpbmcnIHRvCisgICAgICogZW5jb2Rpbmcgb2YgdGhlIHRhZ3MgZmlsZS4gICJwYXRzIiBwb2ludCB0byBlaXRoZXIgb25lIG9mIHRoZXNlLiAqLworICAgIHBhdF9UCSpwYXRzOworICAgIHBhdF9UCW9yZ3BhdDsJCQkvKiBob2xkcyB1bmNvbnZlcnRlZCBwYXR0ZXJuIGluZm8gKi8KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgcGF0X1QJY29udnBhdDsJCS8qIGhvbGRzIGNvbnZlcnRlZCBwYXR0ZXJuIGluZm8gKi8KKyAgICB2aW1jb252X1QJdmltY29udjsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9UQUdfQklOUworICAgIGludAkJZmluZGFsbCA9IChtaW5jb3VudCA9PSBNQVhDT0wgfHwgbWluY291bnQgPT0gVEFHX01BTlkpOworCQkJCQkJLyogZmluZCBhbGwgbWF0Y2hpbmcgdGFncyAqLworICAgIGludAkJc29ydF9lcnJvciA9IEZBTFNFOwkJLyogdGFncyBmaWxlIG5vdCBzb3J0ZWQgKi8KKyAgICBpbnQJCWxpbmVhcjsJCQkJLyogZG8gYSBsaW5lYXIgc2VhcmNoICovCisgICAgaW50CQlzb3J0aWMgPSBGQUxTRTsJCQkvKiB0YWcgZmlsZSBzb3J0ZWQgaW4gbm9jYXNlICovCisjZW5kaWYKKyAgICBpbnQJCWxpbmVfZXJyb3IgPSBGQUxTRTsJCS8qIHN5bnRheCBlcnJvciAqLworICAgIGludAkJaGFzX3JlID0gKGZsYWdzICYgVEFHX1JFR0VYUCk7CS8qIHJlZ2V4cCB1c2VkICovCisgICAgaW50CQloZWxwX29ubHkgPSAoZmxhZ3MgJiBUQUdfSEVMUCk7CisgICAgaW50CQluYW1lX29ubHkgPSAoZmxhZ3MgJiBUQUdfTkFNRVMpOworICAgIGludAkJbm9pYyA9IChmbGFncyAmIFRBR19OT0lDKTsKKyAgICBpbnQJCWdldF9pdF9hZ2FpbiA9IEZBTFNFOworI2lmZGVmIEZFQVRfQ1NDT1BFCisgICAgaW50CQl1c2VfY3Njb3BlID0gKGZsYWdzICYgVEFHX0NTQ09QRSk7CisjZW5kaWYKKyAgICBpbnQJCXZlcmJvc2UgPSAoZmxhZ3MgJiBUQUdfVkVSQk9TRSk7CisKKyAgICBoZWxwX3NhdmUgPSBjdXJidWYtPmJfaGVscDsKKyAgICBvcmdwYXQucGF0ID0gcGF0OworICAgIHBhdHMgPSAmb3JncGF0OworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICB2aW1jb252LnZjX3R5cGUgPSBDT05WX05PTkU7CisjZW5kaWYKKworLyoKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlcnMgdGhhdCBhcmUgdXNlZAorICovCisgICAgbGJ1ZiA9IGFsbG9jKExTSVpFKTsKKyAgICB0YWdfZm5hbWUgPSBhbGxvYyhNQVhQQVRITCArIDEpOworI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworICAgIGVidWYgPSBhbGxvYyhMU0laRSk7CisjZW5kaWYKKyAgICBmb3IgKG10dCA9IDA7IG10dCA8IE1UX0NPVU5UOyArK210dCkKKwlnYV9pbml0MigmZ2FfbWF0Y2hbbXR0XSwgKGludClzaXplb2Yoc3RydWN0IG1hdGNoX2ZvdW5kICopLCAxMDApOworCisgICAgLyogY2hlY2sgZm9yIG91dCBvZiBtZW1vcnkgc2l0dWF0aW9uICovCisgICAgaWYgKGxidWYgPT0gTlVMTCB8fCB0YWdfZm5hbWUgPT0gTlVMTAorI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworCQkJCQkgfHwgZWJ1ZiA9PSBOVUxMCisjZW5kaWYKKwkJCQkJCQkpCisJZ290byBmaW5kdGFnX2VuZDsKKworI2lmZGVmIEZFQVRfQ1NDT1BFCisgICAgU1RSQ1BZKHRhZ19mbmFtZSwgImZyb20gY3Njb3BlIik7CQkvKiBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXplIGEgZmV3IHZhcmlhYmxlcworICAgICAqLworICAgIGlmIChoZWxwX29ubHkpCQkJCS8qIHdhbnQgdGFncyBmcm9tIGhlbHAgZmlsZSAqLworCWN1cmJ1Zi0+Yl9oZWxwID0gVFJVRTsJCQkvKiB3aWxsIGJlIHJlc3RvcmVkIGxhdGVyICovCisKKyAgICBwYXRzLT5sZW4gPSAoaW50KVNUUkxFTihwYXQpOworI2lmZGVmIEZFQVRfTVVMVElfTEFORworICAgIGlmIChjdXJidWYtPmJfaGVscCkKKyAgICB7CisJLyogV2hlbiAiQGFiIiBpcyBzcGVjaWZpZWQgdXNlIG9ubHkgdGhlICJhYiIgbGFuZ3VhZ2UsIG90aGVyd2lzZQorCSAqIHNlYXJjaCBhbGwgbGFuZ3VhZ2VzLiAqLworCWlmIChwYXRzLT5sZW4gPiAzICYmIHBhdFtwYXRzLT5sZW4gLSAzXSA9PSAnQCcKKwkJCQkJICAmJiBBU0NJSV9JU0FMUEhBKHBhdFtwYXRzLT5sZW4gLSAyXSkKKwkJCQkJICYmIEFTQ0lJX0lTQUxQSEEocGF0W3BhdHMtPmxlbiAtIDFdKSkKKwl7CisJICAgIHNhdmVkX3BhdCA9IHZpbV9zdHJuc2F2ZShwYXQsIHBhdHMtPmxlbiAtIDMpOworCSAgICBpZiAoc2F2ZWRfcGF0ICE9IE5VTEwpCisJICAgIHsKKwkJaGVscF9sYW5nX2ZpbmQgPSAmcGF0W3BhdHMtPmxlbiAtIDJdOworCQlwYXRzLT5wYXQgPSBzYXZlZF9wYXQ7CisJCXBhdHMtPmxlbiAtPSAzOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorICAgIGlmIChwX3RsICE9IDAgJiYgcGF0cy0+bGVuID4gcF90bCkJCS8qIGFkanVzdCBmb3IgJ3RhZ2xlbmd0aCcgKi8KKwlwYXRzLT5sZW4gPSBwX3RsOworCisgICAgcHJlcGFyZV9wYXRzKHBhdHMsIGhhc19yZSk7CisKKyNpZmRlZiBGRUFUX1RBR19CSU5TCisgICAgLyogVGhpcyBpcyBvbmx5IHRvIGF2b2lkIGEgY29tcGlsZXIgd2FybmluZyBmb3IgdXNpbmcgc2VhcmNoX2luZm8KKyAgICAgKiB1bmluaXRpYWxpc2VkLiAqLworICAgIHZpbV9tZW1zZXQoJnNlYXJjaF9pbmZvLCAwLCAoc2l6ZV90KTEpOworI2VuZGlmCisKKy8qCisgKiBXaGVuIGZpbmRpbmcgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1hdGNoZXMsIGZpcnN0IHRyeSB3aXRoIG1hdGNoaW5nIGNhc2UsCisgKiBzbyBiaW5hcnkgc2VhcmNoIGNhbiBiZSB1c2VkLCBhbmQgdHJ5IGlnbm9yZS1jYXNlIG1hdGNoZXMgaW4gYSBzZWNvbmQgbG9vcC4KKyAqIFdoZW4gZmluZGluZyBhbGwgbWF0Y2hlcywgJ3RhZ2JzZWFyY2gnIGlzIG9mZiwgb3IgdGhlcmUgaXMgbm8gZml4ZWQgc3RyaW5nCisgKiB0byBsb29rIGZvciwgaWdub3JlIGNhc2UgcmlnaHQgYXdheSB0byBhdm9pZCBnb2luZyB0aG91Z2ggdGhlIHRhZ3MgZmlsZXMKKyAqIHR3aWNlLgorICogV2hlbiB0aGUgdGFnIGZpbGUgaXMgY2FzZS1mb2xkIHNvcnRlZCwgaXQgaXMgZWl0aGVyIG9uZSBvciB0aGUgb3RoZXIuCisgKiBPbmx5IGlnbm9yZSBjYXNlIHdoZW4gVEFHX05PSUMgbm90IHVzZWQgb3IgJ2lnbm9yZWNhc2UnIHNldC4KKyAqLworI2lmZGVmIEZFQVRfVEFHX0JJTlMKKyAgICBwYXRzLT5yZWdtYXRjaC5ybV9pYyA9ICgocF9pYyB8fCAhbm9pYykKKwkJCQkgICAmJiAoZmluZGFsbCB8fCBwYXRzLT5oZWFkbGVuID09IDAgfHwgIXBfdGJzKSk7CisgICAgZm9yIChyb3VuZCA9IDE7IHJvdW5kIDw9IDI7ICsrcm91bmQpCisgICAgeworICAgICAgbGluZWFyID0gKHBhdHMtPmhlYWRsZW4gPT0gMCB8fCAhcF90YnMgfHwgcm91bmQgPT0gMik7CisjZWxzZQorICAgICAgcGF0cy0+cmVnbWF0Y2gucm1faWMgPSAocF9pYyB8fCAhbm9pYyk7CisjZW5kaWYKKworICAgICAgLyoKKyAgICAgICAqIFRyeSB0YWcgZmlsZSBuYW1lcyBmcm9tIHRhZ3Mgb3B0aW9uIG9uZSBieSBvbmUuCisgICAgICAgKi8KKyAgICAgIGZvciAoZmlyc3RfZmlsZSA9IFRSVUU7CisjaWZkZWYgRkVBVF9DU0NPUEUKKwkgICAgdXNlX2NzY29wZSB8fAorI2VuZGlmCisJCWdldF90YWdmbmFtZShmaXJzdF9maWxlLCB0YWdfZm5hbWUpID09IE9LOyBmaXJzdF9maWxlID0gRkFMU0UpCisgICAgICB7CisJLyoKKwkgKiBBIGZpbGUgdGhhdCBkb2Vzbid0IGV4aXN0IGlzIHNpbGVudGx5IGlnbm9yZWQuICBPbmx5IHdoZW4gbm90IGEKKwkgKiBzaW5nbGUgZmlsZSBpcyBmb3VuZCwgYW4gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbiAoZnVydGhlciBvbikuCisJICovCisjaWZkZWYgRkVBVF9DU0NPUEUKKwlpZiAodXNlX2NzY29wZSkKKwkgICAgZnAgPSBOVUxMOwkgICAgLyogYXZvaWQgR0NDIHdhcm5pbmcgKi8KKwllbHNlCisjZW5kaWYKKwl7CisjaWZkZWYgRkVBVF9NVUxUSV9MQU5HCisJICAgIGlmIChjdXJidWYtPmJfaGVscCkKKwkgICAgeworCQkvKiBQcmVmZXIgaGVscCB0YWdzIGFjY29yZGluZyB0byAnaGVscGxhbmcnLiAgUHV0IHRoZQorCQkgKiB0d28tbGV0dGVyIGxhbmd1YWdlIG5hbWUgaW4gaGVscF9sYW5nW10uICovCisJCWkgPSBTVFJMRU4odGFnX2ZuYW1lKTsKKwkJaWYgKGkgPiAzICYmIHRhZ19mbmFtZVtpIC0gM10gPT0gJy0nKQorCQkgICAgU1RSQ1BZKGhlbHBfbGFuZywgdGFnX2ZuYW1lICsgaSAtIDIpOworCQllbHNlCisJCSAgICBTVFJDUFkoaGVscF9sYW5nLCAiZW4iKTsKKworCQkvKiBXaGVuIHNlYXJjaGluZyBmb3IgYSBzcGVjaWZpYyBsYW5ndWFnZSBza2lwIHRhZ3MgZmlsZXMKKwkJICogZm9yIG90aGVyIGxhbmd1YWdlcy4gKi8KKwkJaWYgKGhlbHBfbGFuZ19maW5kICE9IE5VTEwKKwkJCQkgICAmJiBTVFJJQ01QKGhlbHBfbGFuZywgaGVscF9sYW5nX2ZpbmQpICE9IDApCisJCSAgICBjb250aW51ZTsKKworCQkvKiBGb3IgQ1RSTC1dIGluIGEgaGVscCBmaWxlIHByZWZlciBhIG1hdGNoIHdpdGggdGhlIHNhbWUKKwkJICogbGFuZ3VhZ2UuICovCisJCWlmICgoZmxhZ3MgJiBUQUdfS0VFUF9MQU5HKQorCQkJJiYgaGVscF9sYW5nX2ZpbmQgPT0gTlVMTAorCQkJJiYgY3VyYnVmLT5iX2ZuYW1lICE9IE5VTEwKKwkJCSYmIChpID0gU1RSTEVOKGN1cmJ1Zi0+Yl9mbmFtZSkpID4gNAorCQkJJiYgY3VyYnVmLT5iX2ZuYW1lW2kgLSAxXSA9PSAneCcKKwkJCSYmIGN1cmJ1Zi0+Yl9mbmFtZVtpIC0gNF0gPT0gJy4nCisJCQkmJiBTVFJOSUNNUChjdXJidWYtPmJfZm5hbWUgKyBpIC0gMywgaGVscF9sYW5nLCAyKSA9PSAwKQorCQkgICAgaGVscF9wcmkgPSAwOworCQllbHNlCisJCXsKKwkJICAgIGhlbHBfcHJpID0gMTsKKwkJICAgIGZvciAocyA9IHBfaGxnOyAqcyAhPSBOVUw7ICsrcykKKwkJICAgIHsKKwkJCWlmIChTVFJOSUNNUChzLCBoZWxwX2xhbmcsIDIpID09IDApCisJCQkgICAgYnJlYWs7CisJCQkrK2hlbHBfcHJpOworCQkJaWYgKChzID0gdmltX3N0cmNocihzLCAnLCcpKSA9PSBOVUxMKQorCQkJICAgIGJyZWFrOworCQkgICAgfQorCQkgICAgaWYgKHMgPT0gTlVMTCB8fCAqcyA9PSBOVUwpCisJCSAgICB7CisJCQkvKiBMYW5ndWFnZSBub3QgaW4gJ2hlbHBsYW5nJzogdXNlIGxhc3QsIHByZWZlciBFbmdsaXNoLAorCQkJICogdW5sZXNzIGZvdW5kIGFscmVhZHkuICovCisJCQkrK2hlbHBfcHJpOworCQkJaWYgKFNUUklDTVAoaGVscF9sYW5nLCAiZW4iKSAhPSAwKQorCQkJICAgICsraGVscF9wcmk7CisJCSAgICB9CisJCX0KKwkgICAgfQorI2VuZGlmCisKKwkgICAgaWYgKChmcCA9IG1jaF9mb3BlbigoY2hhciAqKXRhZ19mbmFtZSwgInIiKSkgPT0gTlVMTCkKKwkJY29udGludWU7CisKKwkgICAgaWYgKHBfdmVyYm9zZSA+PSA1KQorCQltc2dfc3RyKChjaGFyX3UgKilfKCJTZWFyY2hpbmcgdGFncyBmaWxlICVzIiksIHRhZ19mbmFtZSk7CisJfQorCWRpZF9vcGVuID0gVFJVRTsgICAgLyogcmVtZW1iZXIgdGhhdCB3ZSBmb3VuZCBhdCBsZWFzdCBvbmUgZmlsZSAqLworCisJc3RhdGUgPSBUU19TVEFSVDsgICAvKiB3ZSdyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgKi8KKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKKwlpc19ldGFnID0gMDsJICAgIC8qIGRlZmF1bHQgaXM6IG5vdCBlbWFjcyBzdHlsZSAqLworI2VuZGlmCisKKwkvKgorCSAqIFJlYWQgYW5kIHBhcnNlIHRoZSBsaW5lcyBpbiB0aGUgZmlsZSBvbmUgYnkgb25lCisJICovCisJZm9yICg7OykKKwl7CisJICAgIGxpbmVfYnJlYWtjaGVjaygpOwkgICAgLyogY2hlY2sgZm9yIENUUkwtQyB0eXBlZCAqLworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCSAgICBpZiAoKGZsYWdzICYgVEFHX0lOU19DT01QKSkJLyogRG91YmxlIGJyYWNrZXRzIGZvciBnY2MgKi8KKwkJaW5zX2NvbXBsX2NoZWNrX2tleXMoKTsKKwkgICAgaWYgKGdvdF9pbnQgfHwgY29tcGxldGlvbl9pbnRlcnJ1cHRlZCkKKyNlbHNlCisJICAgIGlmIChnb3RfaW50KQorI2VuZGlmCisJICAgIHsKKwkJc3RvcF9zZWFyY2hpbmcgPSBUUlVFOworCQlicmVhazsKKwkgICAgfQorCSAgICAvKiBXaGVuIG1pbmNvdW50IGlzIFRBR19NQU5ZLCBzdG9wIHdoZW4gZW5vdWdoIG1hdGNoZXMgaGF2ZSBiZWVuCisJICAgICAqIGZvdW5kIChmb3IgY29tcGxldGlvbikuICovCisJICAgIGlmIChtaW5jb3VudCA9PSBUQUdfTUFOWSAmJiBtYXRjaF9jb3VudCA+PSBUQUdfTUFOWSkKKwkgICAgeworCQlzdG9wX3NlYXJjaGluZyA9IFRSVUU7CisJCXJldHZhbCA9IE9LOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoZ2V0X2l0X2FnYWluKQorCQlnb3RvIGxpbmVfcmVhZF9pbjsKKyNpZmRlZiBGRUFUX1RBR19CSU5TCisJICAgIC8qCisJICAgICAqIEZvciBiaW5hcnkgc2VhcmNoOiBjb21wdXRlIHRoZSBuZXh0IG9mZnNldCB0byB1c2UuCisJICAgICAqLworCSAgICBpZiAoc3RhdGUgPT0gVFNfQklOQVJZKQorCSAgICB7CisJCW9mZnNldCA9IHNlYXJjaF9pbmZvLmxvd19vZmZzZXQgKyAoKHNlYXJjaF9pbmZvLmhpZ2hfb2Zmc2V0CisJCQkJCSAgICAgICAtIHNlYXJjaF9pbmZvLmxvd19vZmZzZXQpIC8gMik7CisJCWlmIChvZmZzZXQgPT0gc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQpCisJCSAgICBicmVhazsJLyogRW5kIHRoZSBiaW5hcnkgc2VhcmNoIHdpdGhvdXQgYSBtYXRjaC4gKi8KKwkJZWxzZQorCQkgICAgc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQgPSBvZmZzZXQ7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBTa2lwcGluZyBiYWNrIChhZnRlciBhIG1hdGNoIGR1cmluZyBiaW5hcnkgc2VhcmNoKS4KKwkgICAgICovCisJICAgIGVsc2UgaWYgKHN0YXRlID09IFRTX1NLSVBfQkFDSykKKwkgICAgeworCQlzZWFyY2hfaW5mby5jdXJyX29mZnNldCAtPSBMU0laRSAqIDI7CisJCWlmIChzZWFyY2hfaW5mby5jdXJyX29mZnNldCA8IDApCisJCXsKKwkJICAgIHNlYXJjaF9pbmZvLmN1cnJfb2Zmc2V0ID0gMDsKKwkJICAgIHJld2luZChmcCk7CisJCSAgICBzdGF0ZSA9IFRTX1NURVBfRk9SV0FSRDsKKwkJfQorCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogV2hlbiBqdW1waW5nIGFyb3VuZCBpbiB0aGUgZmlsZSwgZmlyc3QgcmVhZCBhIGxpbmUgdG8gZmluZCB0aGUKKwkgICAgICogc3RhcnQgb2YgdGhlIG5leHQgbGluZS4KKwkgICAgICovCisJICAgIGlmIChzdGF0ZSA9PSBUU19CSU5BUlkgfHwgc3RhdGUgPT0gVFNfU0tJUF9CQUNLKQorCSAgICB7CisJCS8qIEFkanVzdCB0aGUgc2VhcmNoIGZpbGUgb2Zmc2V0IHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uICovCisJCXNlYXJjaF9pbmZvLmN1cnJfb2Zmc2V0X3VzZWQgPSBzZWFyY2hfaW5mby5jdXJyX29mZnNldDsKKyNpZmRlZiBIQVZFX0ZTRUVLTworCQlmc2Vla28oZnAsIHNlYXJjaF9pbmZvLmN1cnJfb2Zmc2V0LCBTRUVLX1NFVCk7CisjZWxzZQorCQlmc2VlayhmcCwgKGxvbmcpc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQsIFNFRUtfU0VUKTsKKyNlbmRpZgorCQllb2YgPSB0YWdfZmdldHMobGJ1ZiwgTFNJWkUsIGZwKTsKKwkJaWYgKCFlb2YgJiYgc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQgIT0gMCkKKwkJeworCQkgICAgc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQgPSBmdGVsbChmcCk7CisJCSAgICBpZiAoc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQgPT0gc2VhcmNoX2luZm8uaGlnaF9vZmZzZXQpCisJCSAgICB7CisJCQkvKiBvb3BzLCBnb25lIGEgYml0IHRvbyBmYXI7IHRyeSBmcm9tIGxvdyBvZmZzZXQgKi8KKyNpZmRlZiBIQVZFX0ZTRUVLTworCQkJZnNlZWtvKGZwLCBzZWFyY2hfaW5mby5sb3dfb2Zmc2V0LCBTRUVLX1NFVCk7CisjZWxzZQorCQkJZnNlZWsoZnAsIChsb25nKXNlYXJjaF9pbmZvLmxvd19vZmZzZXQsIFNFRUtfU0VUKTsKKyNlbmRpZgorCQkJc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQgPSBzZWFyY2hfaW5mby5sb3dfb2Zmc2V0OworCQkgICAgfQorCQkgICAgZW9mID0gdGFnX2ZnZXRzKGxidWYsIExTSVpFLCBmcCk7CisJCX0KKwkJLyogc2tpcCBlbXB0eSBhbmQgYmxhbmsgbGluZXMgKi8KKwkJd2hpbGUgKCFlb2YgJiYgdmltX2lzYmxhbmtsaW5lKGxidWYpKQorCQl7CisJCSAgICBzZWFyY2hfaW5mby5jdXJyX29mZnNldCA9IGZ0ZWxsKGZwKTsKKwkJICAgIGVvZiA9IHRhZ19mZ2V0cyhsYnVmLCBMU0laRSwgZnApOworCQl9CisJCWlmIChlb2YpCisJCXsKKwkJICAgIC8qIEhpdCBlbmQgb2YgZmlsZS4gIFNraXAgYmFja3dhcmRzLiAqLworCQkgICAgc3RhdGUgPSBUU19TS0lQX0JBQ0s7CisJCSAgICBzZWFyY2hfaW5mby5tYXRjaF9vZmZzZXQgPSBmdGVsbChmcCk7CisJCSAgICBzZWFyY2hfaW5mby5jdXJyX29mZnNldCA9IHNlYXJjaF9pbmZvLmN1cnJfb2Zmc2V0X3VzZWQ7CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogTm90IGp1bXBpbmcgYXJvdW5kIGluIHRoZSBmaWxlOiBSZWFkIHRoZSBuZXh0IGxpbmUuCisJICAgICAqLworCSAgICBlbHNlCisjZW5kaWYKKwkgICAgeworCQkvKiBza2lwIGVtcHR5IGFuZCBibGFuayBsaW5lcyAqLworCQlkbworCQl7CisjaWZkZWYgRkVBVF9DU0NPUEUKKwkJICAgIGlmICh1c2VfY3Njb3BlKQorCQkJZW9mID0gY3NfZmdldHMobGJ1ZiwgTFNJWkUpOworCQkgICAgZWxzZQorI2VuZGlmCisJCQllb2YgPSB0YWdfZmdldHMobGJ1ZiwgTFNJWkUsIGZwKTsKKwkJfSB3aGlsZSAoIWVvZiAmJiB2aW1faXNibGFua2xpbmUobGJ1ZikpOworCisJCWlmIChlb2YpCisJCXsKKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKKwkJICAgIGlmIChpbmNzdGFja19pZHgpCS8qIHRoaXMgd2FzIGFuIGluY2x1ZGVkIGZpbGUgKi8KKwkJICAgIHsKKwkJCS0taW5jc3RhY2tfaWR4OworCQkJZmNsb3NlKGZwKTsJLyogZW5kIG9mIHRoaXMgZmlsZSAuLi4gKi8KKwkJCWZwID0gaW5jc3RhY2tbaW5jc3RhY2tfaWR4XS5mcDsKKwkJCVNUUkNQWSh0YWdfZm5hbWUsIGluY3N0YWNrW2luY3N0YWNrX2lkeF0uZXRhZ19mbmFtZSk7CisJCQl2aW1fZnJlZShpbmNzdGFja1tpbmNzdGFja19pZHhdLmV0YWdfZm5hbWUpOworCQkJaXNfZXRhZyA9IDE7CS8qIChvbmx5IGV0YWdzIGNhbiBpbmNsdWRlKSAqLworCQkJY29udGludWU7CS8qIC4uLiBjb250aW51ZSB3aXRoIHBhcmVudCBmaWxlICovCisJCSAgICB9CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCWJyZWFrOwkJCSAgICAvKiBlbmQgb2YgZmlsZSAqLworCQl9CisJICAgIH0KK2xpbmVfcmVhZF9pbjoKKworI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworCSAgICAvKgorCSAgICAgKiBFbWFjcyB0YWdzIGxpbmUgd2l0aCBDVFJMLUw6IE5ldyBmaWxlIG5hbWUgb24gbmV4dCBsaW5lLgorCSAgICAgKiBUaGUgZmlsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5IGEgJywnLgorCSAgICAgKi8KKwkgICAgaWYgKCpsYnVmID09IEN0cmxfTCkJLyogcmVtZW1iZXIgZXRhZyBmaWxlIG5hbWUgaW4gZWJ1ZiAqLworCSAgICB7CisJCWlzX2V0YWcgPSAxOwkJLyogaW4gY2FzZSBhdCB0aGUgc3RhcnQgKi8KKwkJc3RhdGUgPSBUU19MSU5FQVI7CisJCWlmICghdGFnX2ZnZXRzKGVidWYsIExTSVpFLCBmcCkpCisJCXsKKwkJICAgIGZvciAocCA9IGVidWY7ICpwICYmICpwICE9ICcsJzsgcCsrKQorCQkJOworCQkgICAgKnAgPSBOVUw7CisKKwkJICAgIC8qCisJCSAgICAgKiBhdG9pKHArMSkgaXMgdGhlIG51bWJlciBvZiBieXRlcyBiZWZvcmUgdGhlIG5leHQgXkwKKwkJICAgICAqIHVubGVzcyBpdCBpcyBhbiBpbmNsdWRlIHN0YXRlbWVudC4KKwkJICAgICAqLworCQkgICAgaWYgKFNUUk5DTVAocCArIDEsICJpbmNsdWRlIiwgNykgPT0gMAorCQkJCQkgICAgICAmJiBpbmNzdGFja19pZHggPCBJTkNTVEFDS19TSVpFKQorCQkgICAgeworCQkJLyogU2F2ZSBjdXJyZW50ICJmcCIgYW5kICJ0YWdfZm5hbWUiIGluIHRoZSBzdGFjay4gKi8KKwkJCWlmICgoaW5jc3RhY2tbaW5jc3RhY2tfaWR4XS5ldGFnX2ZuYW1lID0KKwkJCQkJICAgICAgdmltX3N0cnNhdmUodGFnX2ZuYW1lKSkgIT0gTlVMTCkKKwkJCXsKKwkJCSAgICBjaGFyX3UgKmZ1bGxwYXRoX2VidWY7CisKKwkJCSAgICBpbmNzdGFja1tpbmNzdGFja19pZHhdLmZwID0gZnA7CisJCQkgICAgZnAgPSBOVUxMOworCisJCQkgICAgLyogRmlndXJlIG91dCAidGFnX2ZuYW1lIiBhbmQgImZwIiB0byB1c2UgZm9yCisJCQkgICAgICogaW5jbHVkZWQgZmlsZS4gKi8KKwkJCSAgICBmdWxscGF0aF9lYnVmID0gZXhwYW5kX3RhZ19mbmFtZShlYnVmLAorCQkJCQkJCSAgICB0YWdfZm5hbWUsIEZBTFNFKTsKKwkJCSAgICBpZiAoZnVsbHBhdGhfZWJ1ZiAhPSBOVUxMKQorCQkJICAgIHsKKwkJCQlmcCA9IG1jaF9mb3BlbigoY2hhciAqKWZ1bGxwYXRoX2VidWYsICJyIik7CisJCQkJaWYgKGZwICE9IE5VTEwpCisJCQkJeworCQkJCSAgICBpZiAoU1RSTEVOKGZ1bGxwYXRoX2VidWYpID4gTFNJWkUpCisJCQkJCSAgRU1TRzIoXygiRTQzMDogVGFnIGZpbGUgcGF0aCB0cnVuY2F0ZWQgZm9yICVzXG4iKSwgZWJ1Zik7CisJCQkJICAgIFNUUk5DUFkodGFnX2ZuYW1lLCBmdWxscGF0aF9lYnVmLCBMU0laRSk7CisJCQkJICAgIHRhZ19mbmFtZVtMU0laRV0gPSBOVUw7CisJCQkJICAgICsraW5jc3RhY2tfaWR4OworCQkJCSAgICBpc19ldGFnID0gMDsgLyogd2UgY2FuIGluY2x1ZGUgYW55dGhpbmcgKi8KKwkJCQl9CisJCQkJdmltX2ZyZWUoZnVsbHBhdGhfZWJ1Zik7CisJCQkgICAgfQorCQkJICAgIGlmIChmcCA9PSBOVUxMKQorCQkJICAgIHsKKwkJCQkvKiBDYW4ndCBvcGVuIHRoZSBpbmNsdWRlZCBmaWxlLCBza2lwIGl0IGFuZAorCQkJCSAqIHJlc3RvcmUgb2xkIHZhbHVlIG9mICJmcCIuICovCisJCQkJZnAgPSBpbmNzdGFja1tpbmNzdGFja19pZHhdLmZwOworCQkJCXZpbV9mcmVlKGluY3N0YWNrW2luY3N0YWNrX2lkeF0uZXRhZ19mbmFtZSk7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJCWNvbnRpbnVlOworCSAgICB9CisjZW5kaWYKKworCSAgICAvKgorCSAgICAgKiBXaGVuIHN0aWxsIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZSwgY2hlY2sgZm9yIEVtYWNzIHRhZ3MgZmlsZQorCSAgICAgKiBmb3JtYXQsIGFuZCBmb3IgIm5vdCBzb3J0ZWQiIGZsYWcuCisJICAgICAqLworCSAgICBpZiAoc3RhdGUgPT0gVFNfU1RBUlQpCisJICAgIHsKKyNpZmRlZiBGRUFUX1RBR19CSU5TCisJCS8qCisJCSAqIFdoZW4gdGhlcmUgaXMgbm8gdGFnIGhlYWQsIG9yIGlnbm9yaW5nIGNhc2UsIG5lZWQgdG8gZG8gYQorCQkgKiBsaW5lYXIgc2VhcmNoLgorCQkgKiBXaGVuIG5vICIhX1RBR18iIGlzIGZvdW5kLCBkZWZhdWx0IHRvIGJpbmFyeSBzZWFyY2guICBJZgorCQkgKiB0aGUgdGFnIGZpbGUgaXNuJ3Qgc29ydGVkLCB0aGUgc2Vjb25kIGxvb3Agd2lsbCBmaW5kIGl0LgorCQkgKiBXaGVuICIhX1RBR19GSUxFX1NPUlRFRCIgZm91bmQ6IHN0YXJ0IGJpbmFyeSBzZWFyY2ggaWYKKwkJICogZmxhZyBzZXQuCisJCSAqIEZvciBjc2NvcGUsIGl0J3MgYWx3YXlzIGxpbmVhci4KKwkJICovCisjIGlmZGVmIEZFQVRfQ1NDT1BFCisJCWlmIChsaW5lYXIgfHwgdXNlX2NzY29wZSkKKyMgZWxzZQorCQlpZiAobGluZWFyKQorIyBlbmRpZgorCQkgICAgc3RhdGUgPSBUU19MSU5FQVI7CisJCWVsc2UgaWYgKFNUUk5DTVAobGJ1ZiwgIiFfVEFHXyIsIDYpID4gMCkKKwkJICAgIHN0YXRlID0gVFNfQklOQVJZOworCQllbHNlIGlmIChTVFJOQ01QKGxidWYsICIhX1RBR19GSUxFX1NPUlRFRFx0IiwgMTgpID09IDApCisJCXsKKwkJICAgIC8qIENoZWNrIHNvcnRlZCBmbGFnICovCisJCSAgICBpZiAobGJ1ZlsxOF0gPT0gJzEnKQorCQkJc3RhdGUgPSBUU19CSU5BUlk7CisJCSAgICBlbHNlIGlmIChsYnVmWzE4XSA9PSAnMicpCisJCSAgICB7CisJCQlzdGF0ZSA9IFRTX0JJTkFSWTsKKwkJCXNvcnRpYyA9IFRSVUU7CisJCQlwYXRzLT5yZWdtYXRjaC5ybV9pYyA9IChwX2ljIHx8ICFub2ljKTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJCXN0YXRlID0gVFNfTElORUFSOworCQl9CisKKwkJaWYgKHN0YXRlID09IFRTX0JJTkFSWSAmJiBwYXRzLT5yZWdtYXRjaC5ybV9pYyAmJiAhc29ydGljKQorCQl7CisJCSAgICAvKiBiaW5hcnkgc2VhcmNoIHdvbid0IHdvcmsgZm9yIGlnbm9yaW5nIGNhc2UsIHVzZSBsaW5lYXIKKwkJICAgICAqIHNlYXJjaC4gKi8KKwkJICAgIGxpbmVhciA9IFRSVUU7CisJCSAgICBzdGF0ZSA9IFRTX0xJTkVBUjsKKwkJfQorI2Vsc2UKKwkJc3RhdGUgPSBUU19MSU5FQVI7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVEFHX0JJTlMKKwkJLyoKKwkJICogV2hlbiBzdGFydGluZyBhIGJpbmFyeSBzZWFyY2gsIGdldCB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBhbmQKKwkJICogY29tcHV0ZSB0aGUgZmlyc3Qgb2Zmc2V0LgorCQkgKi8KKwkJaWYgKHN0YXRlID09IFRTX0JJTkFSWSkKKwkJeworCQkgICAgLyogR2V0IHRoZSB0YWcgZmlsZSBzaXplIChkb24ndCB1c2UgbWNoX2ZzdGF0KCksIGl0J3Mgbm90CisJCSAgICAgKiBwb3J0YWJsZSkuICovCisJCSAgICBpZiAoKGZpbGVzaXplID0gbHNlZWsoZmlsZW5vKGZwKSwKKwkJCQkJCSAgIChvZmZfdCkwTCwgU0VFS19FTkQpKSA8PSAwKQorCQkJc3RhdGUgPSBUU19MSU5FQVI7CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlsc2VlayhmaWxlbm8oZnApLCAob2ZmX3QpMEwsIFNFRUtfU0VUKTsKKworCQkJLyogQ2FsY3VsYXRlIHRoZSBmaXJzdCByZWFkIG9mZnNldCBpbiB0aGUgZmlsZS4gIFN0YXJ0CisJCQkgKiB0aGUgc2VhcmNoIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZpbGUuICovCisJCQlzZWFyY2hfaW5mby5sb3dfb2Zmc2V0ID0gMDsKKwkJCXNlYXJjaF9pbmZvLmxvd19jaGFyID0gMDsKKwkJCXNlYXJjaF9pbmZvLmhpZ2hfb2Zmc2V0ID0gZmlsZXNpemU7CisJCQlzZWFyY2hfaW5mby5jdXJyX29mZnNldCA9IDA7CisJCQlzZWFyY2hfaW5mby5oaWdoX2NoYXIgPSAweGZmOworCQkgICAgfQorCQkgICAgY29udGludWU7CisJCX0KKyNlbmRpZgorCSAgICB9CisKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChsYnVmWzBdID09ICchJyAmJiBwYXRzID09ICZvcmdwYXQKKwkJCSAgICYmIFNUUk5DTVAobGJ1ZiwgIiFfVEFHX0ZJTEVfRU5DT0RJTkdcdCIsIDIwKSA9PSAwKQorCSAgICB7CisJCS8qIENvbnZlcnQgdGhlIHNlYXJjaCBwYXR0ZXJuIGZyb20gJ2VuY29kaW5nJyB0byB0aGUKKwkJICogc3BlY2lmaWVkIGVuY29kaW5nLiAqLworCQlmb3IgKHAgPSBsYnVmICsgMjA7ICpwID4gJyAnICYmICpwIDwgMTI3OyArK3ApCisJCSAgICA7CisJCSpwID0gTlVMOworCQljb252ZXJ0X3NldHVwKCZ2aW1jb252LCBwX2VuYywgbGJ1ZiArIDIwKTsKKwkJaWYgKHZpbWNvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJCXsKKwkJICAgIGNvbnZwYXQucGF0ID0gc3RyaW5nX2NvbnZlcnQoJnZpbWNvbnYsIHBhdHMtPnBhdCwgTlVMTCk7CisJCSAgICBpZiAoY29udnBhdC5wYXQgIT0gTlVMTCkKKwkJICAgIHsKKwkJCXBhdHMgPSAmY29udnBhdDsKKwkJCXBhdHMtPmxlbiA9IChpbnQpU1RSTEVOKHBhdHMtPnBhdCk7CisJCQlwcmVwYXJlX3BhdHMocGF0cywgaGFzX3JlKTsKKwkJCXBhdHMtPnJlZ21hdGNoLnJtX2ljID0gb3JncGF0LnJlZ21hdGNoLnJtX2ljOworCQkgICAgfQorCQl9CisKKwkJLyogUHJlcGFyZSBmb3IgY29udmVydGluZyBhIG1hdGNoIHRoZSBvdGhlciB3YXkgYXJvdW5kLiAqLworCQljb252ZXJ0X3NldHVwKCZ2aW1jb252LCBsYnVmICsgMjAsIHBfZW5jKTsKKwkJY29udGludWU7CisJICAgIH0KKyNlbmRpZgorCisJICAgIC8qCisJICAgICAqIEZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRpZmZlcmVudCBzdHJpbmdzIGFyZSBpbiB0aGlzIGxpbmUuCisJICAgICAqIEZvciAibm9ybWFsIiB0YWdzOiBEbyBhIHF1aWNrIGNoZWNrIGlmIHRoZSB0YWcgbWF0Y2hlcy4KKwkgICAgICogVGhpcyBzcGVlZHMgdXAgdGFnIHNlYXJjaGluZyBhIGxvdCEKKwkgICAgICovCisJICAgIGlmIChwYXRzLT5oZWFkbGVuCisjaWZkZWYgRkVBVF9FTUFDU19UQUdTCisJCQkgICAgJiYgIWlzX2V0YWcKKyNlbmRpZgorCQkJCQkpCisJICAgIHsKKwkJdGFncC50YWduYW1lID0gbGJ1ZjsKKyNpZmRlZiBGRUFUX1RBR19BTllXSElURQorCQl0YWdwLnRhZ25hbWVfZW5kID0gc2tpcHRvd2hpdGUobGJ1Zik7CisJCWlmICgqdGFncC50YWduYW1lX2VuZCA9PSBOVUwpCSAgICAvKiBjb3JydXB0ZWQgdGFnIGxpbmUgKi8KKyNlbHNlCisJCXRhZ3AudGFnbmFtZV9lbmQgPSB2aW1fc3RyY2hyKGxidWYsIFRBQik7CisJCWlmICh0YWdwLnRhZ25hbWVfZW5kID09IE5VTEwpCSAgICAvKiBjb3JydXB0ZWQgdGFnIGxpbmUgKi8KKyNlbmRpZgorCQl7CisJCSAgICBsaW5lX2Vycm9yID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisKKyNpZmRlZiBGRUFUX1RBR19PTERTVEFUSUMKKwkJLyoKKwkJICogQ2hlY2sgZm9yIG9sZCBzdHlsZSBzdGF0aWMgdGFnOiAiZmlsZTp0YWcgZmlsZSAuLiIKKwkJICovCisJCXRhZ3AuZm5hbWUgPSBOVUxMOworCQlmb3IgKHAgPSBsYnVmOyBwIDwgdGFncC50YWduYW1lX2VuZDsgKytwKQorCQl7CisJCSAgICBpZiAoKnAgPT0gJzonKQorCQkgICAgeworCQkJaWYgKHRhZ3AuZm5hbWUgPT0gTlVMTCkKKyNpZmRlZiBGRUFUX1RBR19BTllXSElURQorCQkJICAgIHRhZ3AuZm5hbWUgPSBza2lwd2hpdGUodGFncC50YWduYW1lX2VuZCk7CisjZWxzZQorCQkJICAgIHRhZ3AuZm5hbWUgPSB0YWdwLnRhZ25hbWVfZW5kICsgMTsKKyNlbmRpZgorCQkJaWYgKAkgICBmbmFtZW5jbXAobGJ1ZiwgdGFncC5mbmFtZSwgcCAtIGxidWYpID09IDAKKyNpZmRlZiBGRUFUX1RBR19BTllXSElURQorCQkJCSYmIHZpbV9pc3doaXRlKHRhZ3AuZm5hbWVbcCAtIGxidWZdKQorI2Vsc2UKKwkJCQkmJiB0YWdwLmZuYW1lW3AgLSBsYnVmXSA9PSBUQUIKKyNlbmRpZgorCQkJCSAgICApCisJCQl7CisJCQkgICAgLyogZm91bmQgb25lICovCisJCQkgICAgdGFncC50YWduYW1lID0gcCArIDE7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKyNlbmRpZgorCisJCS8qCisJCSAqIFNraXAgdGhpcyBsaW5lIGlmIHRoZSBsZW5ndGggb2YgdGhlIHRhZyBpcyBkaWZmZXJlbnQgYW5kCisJCSAqIHRoZXJlIGlzIG5vIHJlZ2V4cCwgb3IgdGhlIHRhZyBpcyB0b28gc2hvcnQuCisJCSAqLworCQljbXBsZW4gPSAoaW50KSh0YWdwLnRhZ25hbWVfZW5kIC0gdGFncC50YWduYW1lKTsKKwkJaWYgKHBfdGwgIT0gMCAmJiBjbXBsZW4gPiBwX3RsKQkgICAgLyogYWRqdXN0IGZvciAndGFnbGVuZ3RoJyAqLworCQkgICAgY21wbGVuID0gcF90bDsKKwkJaWYgKGhhc19yZSAmJiBwYXRzLT5oZWFkbGVuIDwgY21wbGVuKQorCQkgICAgY21wbGVuID0gcGF0cy0+aGVhZGxlbjsKKwkJZWxzZSBpZiAoc3RhdGUgPT0gVFNfTElORUFSICYmIHBhdHMtPmhlYWRsZW4gIT0gY21wbGVuKQorCQkgICAgY29udGludWU7CisKKyNpZmRlZiBGRUFUX1RBR19CSU5TCisJCWlmIChzdGF0ZSA9PSBUU19CSU5BUlkpCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBTaW1wbGlzdGljIGNoZWNrIGZvciB1bnNvcnRlZCB0YWdzIGZpbGUuCisJCSAgICAgKi8KKwkJICAgIGkgPSAoaW50KXRhZ3AudGFnbmFtZVswXTsKKwkJICAgIGlmIChzb3J0aWMpCisJCQlpID0gKGludClUT1VQUEVSX0FTQyh0YWdwLnRhZ25hbWVbMF0pOworCQkgICAgaWYgKGkgPCBzZWFyY2hfaW5mby5sb3dfY2hhciB8fCBpID4gc2VhcmNoX2luZm8uaGlnaF9jaGFyKQorCQkJc29ydF9lcnJvciA9IFRSVUU7CisKKwkJICAgIC8qCisJCSAgICAgKiBDb21wYXJlIHRoZSBjdXJyZW50IHRhZyB3aXRoIHRoZSBzZWFyY2hlZCB0YWcuCisJCSAgICAgKi8KKwkJICAgIGlmIChzb3J0aWMpCisJCQl0YWdjbXAgPSB0YWdfc3RybmljbXAodGFncC50YWduYW1lLCBwYXRzLT5oZWFkLAorCQkJCQkJCSAgICAgIChzaXplX3QpY21wbGVuKTsKKwkJICAgIGVsc2UKKwkJCXRhZ2NtcCA9IFNUUk5DTVAodGFncC50YWduYW1lLCBwYXRzLT5oZWFkLCBjbXBsZW4pOworCisJCSAgICAvKgorCQkgICAgICogQSBtYXRjaCB3aXRoIGEgc2hvcnRlciB0YWcgbWVhbnMgdG8gc2VhcmNoIGZvcndhcmQuCisJCSAgICAgKiBBIG1hdGNoIHdpdGggYSBsb25nZXIgdGFnIG1lYW5zIHRvIHNlYXJjaCBiYWNrd2FyZC4KKwkJICAgICAqLworCQkgICAgaWYgKHRhZ2NtcCA9PSAwKQorCQkgICAgeworCQkJaWYgKGNtcGxlbiA8IHBhdHMtPmhlYWRsZW4pCisJCQkgICAgdGFnY21wID0gLTE7CisJCQllbHNlIGlmIChjbXBsZW4gPiBwYXRzLT5oZWFkbGVuKQorCQkJICAgIHRhZ2NtcCA9IDE7CisJCSAgICB9CisKKwkJICAgIGlmICh0YWdjbXAgPT0gMCkKKwkJICAgIHsKKwkJCS8qIFdlJ3ZlIGxvY2F0ZWQgdGhlIHRhZywgbm93IHNraXAgYmFjayBhbmQgc2VhcmNoCisJCQkgKiBmb3J3YXJkIHVudGlsIHRoZSBmaXJzdCBtYXRjaGluZyB0YWcgaXMgZm91bmQuCisJCQkgKi8KKwkJCXN0YXRlID0gVFNfU0tJUF9CQUNLOworCQkJc2VhcmNoX2luZm8ubWF0Y2hfb2Zmc2V0ID0gc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQ7CisJCQljb250aW51ZTsKKwkJICAgIH0KKwkJICAgIGlmICh0YWdjbXAgPCAwKQorCQkgICAgeworCQkJc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQgPSBmdGVsbChmcCk7CisJCQlpZiAoc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQgPCBzZWFyY2hfaW5mby5oaWdoX29mZnNldCkKKwkJCXsKKwkJCSAgICBzZWFyY2hfaW5mby5sb3dfb2Zmc2V0ID0gc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQ7CisJCQkgICAgaWYgKHNvcnRpYykKKwkJCQlzZWFyY2hfaW5mby5sb3dfY2hhciA9CisJCQkJCQkgVE9VUFBFUl9BU0ModGFncC50YWduYW1lWzBdKTsKKwkJCSAgICBlbHNlCisJCQkJc2VhcmNoX2luZm8ubG93X2NoYXIgPSB0YWdwLnRhZ25hbWVbMF07CisJCQkgICAgY29udGludWU7CisJCQl9CisJCSAgICB9CisJCSAgICBpZiAodGFnY21wID4gMAorCQkJJiYgc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQgIT0gc2VhcmNoX2luZm8uaGlnaF9vZmZzZXQpCisJCSAgICB7CisJCQlzZWFyY2hfaW5mby5oaWdoX29mZnNldCA9IHNlYXJjaF9pbmZvLmN1cnJfb2Zmc2V0OworCQkJaWYgKHNvcnRpYykKKwkJCSAgICBzZWFyY2hfaW5mby5oaWdoX2NoYXIgPQorCQkJCQkJIFRPVVBQRVJfQVNDKHRhZ3AudGFnbmFtZVswXSk7CisJCQllbHNlCisJCQkgICAgc2VhcmNoX2luZm8uaGlnaF9jaGFyID0gdGFncC50YWduYW1lWzBdOworCQkJY29udGludWU7CisJCSAgICB9CisKKwkJICAgIC8qIE5vIG1hdGNoIHlldCBhbmQgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJpbmFyeSBzZWFyY2guICovCisJCSAgICBicmVhazsKKwkJfQorCQllbHNlIGlmIChzdGF0ZSA9PSBUU19TS0lQX0JBQ0spCisJCXsKKwkJICAgIGlmIChNQl9TVFJOSUNNUCh0YWdwLnRhZ25hbWUsIHBhdHMtPmhlYWQsIGNtcGxlbikgIT0gMCkKKwkJCXN0YXRlID0gVFNfU1RFUF9GT1JXQVJEOworCQkgICAgZWxzZQorCQkJLyogSGF2ZSB0byBza2lwIGJhY2sgbW9yZS4gIFJlc3RvcmUgdGhlIGN1cnJfb2Zmc2V0CisJCQkgKiB1c2VkLCBvdGhlcndpc2Ugd2UgZ2V0IHN0dWNrIGF0IGEgbG9uZyBsaW5lLiAqLworCQkJc2VhcmNoX2luZm8uY3Vycl9vZmZzZXQgPSBzZWFyY2hfaW5mby5jdXJyX29mZnNldF91c2VkOworCQkgICAgY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoc3RhdGUgPT0gVFNfU1RFUF9GT1JXQVJEKQorCQl7CisJCSAgICBpZiAoTUJfU1RSTklDTVAodGFncC50YWduYW1lLCBwYXRzLT5oZWFkLCBjbXBsZW4pICE9IDApCisJCSAgICB7CisJCQlpZiAoKG9mZl90KWZ0ZWxsKGZwKSA+IHNlYXJjaF9pbmZvLm1hdGNoX29mZnNldCkKKwkJCSAgICBicmVhazsJLyogcGFzdCBsYXN0IG1hdGNoICovCisJCQllbHNlCisJCQkgICAgY29udGludWU7CS8qIGJlZm9yZSBmaXJzdCBtYXRjaCAqLworCQkgICAgfQorCQl9CisJCWVsc2UKKyNlbmRpZgorCQkgICAgLyogc2tpcCB0aGlzIG1hdGNoIGlmIGl0IGNhbid0IG1hdGNoICovCisJCSAgICBpZiAoTUJfU1RSTklDTVAodGFncC50YWduYW1lLCBwYXRzLT5oZWFkLCBjbXBsZW4pICE9IDApCisJCSAgICBjb250aW51ZTsKKworCQkvKgorCQkgKiBDYW4gYmUgYSBtYXRjaGluZyB0YWcsIGlzb2xhdGUgdGhlIGZpbGUgbmFtZSBhbmQgY29tbWFuZC4KKwkJICovCisjaWZkZWYgRkVBVF9UQUdfT0xEU1RBVElDCisJCWlmICh0YWdwLmZuYW1lID09IE5VTEwpCisjZW5kaWYKKyNpZmRlZiBGRUFUX1RBR19BTllXSElURQorCQkgICAgdGFncC5mbmFtZSA9IHNraXB3aGl0ZSh0YWdwLnRhZ25hbWVfZW5kKTsKKyNlbHNlCisJCSAgICB0YWdwLmZuYW1lID0gdGFncC50YWduYW1lX2VuZCArIDE7CisjZW5kaWYKKyNpZmRlZiBGRUFUX1RBR19BTllXSElURQorCQl0YWdwLmZuYW1lX2VuZCA9IHNraXB0b3doaXRlKHRhZ3AuZm5hbWUpOworCQl0YWdwLmNvbW1hbmQgPSBza2lwd2hpdGUodGFncC5mbmFtZV9lbmQpOworCQlpZiAoKnRhZ3AuY29tbWFuZCA9PSBOVUwpCisjZWxzZQorCQl0YWdwLmZuYW1lX2VuZCA9IHZpbV9zdHJjaHIodGFncC5mbmFtZSwgVEFCKTsKKwkJdGFncC5jb21tYW5kID0gdGFncC5mbmFtZV9lbmQgKyAxOworCQlpZiAodGFncC5mbmFtZV9lbmQgPT0gTlVMTCkKKyNlbmRpZgorCQkgICAgaSA9IEZBSUw7CisJCWVsc2UKKwkJICAgIGkgPSBPSzsKKwkgICAgfQorCSAgICBlbHNlCisJCWkgPSBwYXJzZV90YWdfbGluZShsYnVmLAorI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworCQkJCSAgICAgICBpc19ldGFnLAorI2VuZGlmCisJCQkJCSAgICAgICAmdGFncCk7CisJICAgIGlmIChpID09IEZBSUwpCisJICAgIHsKKwkJbGluZV9lcnJvciA9IFRSVUU7CisJCWJyZWFrOworCSAgICB9CisKKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKKwkgICAgaWYgKGlzX2V0YWcpCisJCXRhZ3AuZm5hbWUgPSBlYnVmOworI2VuZGlmCisJICAgIC8qCisJICAgICAqIEZpcnN0IHRyeSBtYXRjaGluZyB3aXRoIHRoZSBwYXR0ZXJuIGxpdGVyYWxseSAoYWxzbyB3aGVuIGl0IGlzCisJICAgICAqIGEgcmVnZXhwKS4KKwkgICAgICovCisJICAgIGNtcGxlbiA9IChpbnQpKHRhZ3AudGFnbmFtZV9lbmQgLSB0YWdwLnRhZ25hbWUpOworCSAgICBpZiAocF90bCAhPSAwICYmIGNtcGxlbiA+IHBfdGwpCSAgICAvKiBhZGp1c3QgZm9yICd0YWdsZW5ndGgnICovCisJCWNtcGxlbiA9IHBfdGw7CisJICAgIC8qIGlmIHRhZyBsZW5ndGggZG9lcyBub3QgbWF0Y2gsIGRvbid0IHRyeSBjb21wYXJpbmcgKi8KKwkgICAgaWYgKHBhdHMtPmxlbiAhPSBjbXBsZW4pCisJCW1hdGNoID0gRkFMU0U7CisJICAgIGVsc2UKKwkgICAgeworCQlpZiAocGF0cy0+cmVnbWF0Y2gucm1faWMpCisJCXsKKwkJICAgIG1hdGNoID0gKE1CX1NUUk5JQ01QKHRhZ3AudGFnbmFtZSwgcGF0cy0+cGF0LCBjbXBsZW4pID09IDApOworCQkgICAgaWYgKG1hdGNoKQorCQkJbWF0Y2hfbm9faWMgPSAoU1RSTkNNUCh0YWdwLnRhZ25hbWUsIHBhdHMtPnBhdCwKKwkJCQkJCQkJY21wbGVuKSA9PSAwKTsKKwkJfQorCQllbHNlCisJCSAgICBtYXRjaCA9IChTVFJOQ01QKHRhZ3AudGFnbmFtZSwgcGF0cy0+cGF0LCBjbXBsZW4pID09IDApOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogSGFzIGEgcmVnZXhwOiBBbHNvIGZpbmQgdGFncyBtYXRjaGluZyByZWdleHAuCisJICAgICAqLworCSAgICBtYXRjaF9yZSA9IEZBTFNFOworCSAgICBpZiAoIW1hdGNoICYmIHBhdHMtPnJlZ21hdGNoLnJlZ3Byb2cgIT0gTlVMTCkKKwkgICAgeworCQlpbnQJY2M7CisKKwkJY2MgPSAqdGFncC50YWduYW1lX2VuZDsKKwkJKnRhZ3AudGFnbmFtZV9lbmQgPSBOVUw7CisJCW1hdGNoID0gdmltX3JlZ2V4ZWMoJnBhdHMtPnJlZ21hdGNoLCB0YWdwLnRhZ25hbWUsIChjb2xucl9UKTApOworCQlpZiAobWF0Y2gpCisJCXsKKwkJICAgIG1hdGNob2ZmID0gKGludCkocGF0cy0+cmVnbWF0Y2guc3RhcnRwWzBdIC0gdGFncC50YWduYW1lKTsKKwkJICAgIGlmIChwYXRzLT5yZWdtYXRjaC5ybV9pYykKKwkJICAgIHsKKwkJCXBhdHMtPnJlZ21hdGNoLnJtX2ljID0gRkFMU0U7CisJCQltYXRjaF9ub19pYyA9IHZpbV9yZWdleGVjKCZwYXRzLT5yZWdtYXRjaCwgdGFncC50YWduYW1lLAorCQkJCQkJCQkgIChjb2xucl9UKTApOworCQkJcGF0cy0+cmVnbWF0Y2gucm1faWMgPSBUUlVFOworCQkgICAgfQorCQl9CisJCSp0YWdwLnRhZ25hbWVfZW5kID0gY2M7CisJCW1hdGNoX3JlID0gVFJVRTsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIElmIGEgbWF0Y2ggaXMgZm91bmQsIGFkZCBpdCB0byBnYV9tYXRjaFtdLgorCSAgICAgKi8KKwkgICAgaWYgKG1hdGNoKQorCSAgICB7CisjaWZkZWYgRkVBVF9DU0NPUEUKKwkJaWYgKHVzZV9jc2NvcGUpCisJCXsKKwkJICAgIC8qIERvbid0IGNoYW5nZSB0aGUgb3JkZXJpbmcsIGFsd2F5cyB1c2UgdGhlIHNhbWUgdGFibGUuICovCisJCSAgICBtdHQgPSBNVF9HTF9PVEg7CisJCX0KKwkJZWxzZQorI2VuZGlmCisJCXsKKwkJICAgIC8qIERlY2lkZSBpbiB3aGljaCBhcnJheSB0byBzdG9yZSB0aGlzIG1hdGNoLiAqLworCQkgICAgaXNfY3VycmVudCA9IHRlc3RfZm9yX2N1cnJlbnQoCisjaWZkZWYgRkVBVF9FTUFDU19UQUdTCisJCQkgICAgaXNfZXRhZywKKyNlbmRpZgorCQkJCSAgICAgdGFncC5mbmFtZSwgdGFncC5mbmFtZV9lbmQsIHRhZ19mbmFtZSwKKwkJCQkgICAgIGJ1Zl9mZm5hbWUpOworI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworCQkgICAgaXNfc3RhdGljID0gRkFMU0U7CisJCSAgICBpZiAoIWlzX2V0YWcpCS8qIGVtYWNzIHRhZ3MgYXJlIG5ldmVyIHN0YXRpYyAqLworI2VuZGlmCisJCSAgICB7CisjaWZkZWYgRkVBVF9UQUdfT0xEU1RBVElDCisJCQlpZiAodGFncC50YWduYW1lICE9IGxidWYpCisJCQkgICAgaXNfc3RhdGljID0gVFJVRTsJLyogZGV0ZWN0ZWQgc3RhdGljIHRhZyBiZWZvcmUgKi8KKwkJCWVsc2UKKyNlbmRpZgorCQkJICAgIGlzX3N0YXRpYyA9IHRlc3RfZm9yX3N0YXRpYygmdGFncCk7CisJCSAgICB9CisKKwkJICAgIC8qIGRlY2lkZSBpbiB3aGljaCBvZiB0aGUgc2l4dGVlbiB0YWJsZXMgdG8gc3RvcmUgdGhpcworCQkgICAgICogbWF0Y2ggKi8KKwkJICAgIGlmIChpc19zdGF0aWMpCisJCSAgICB7CisJCQlpZiAoaXNfY3VycmVudCkKKwkJCSAgICBtdHQgPSBNVF9TVF9DVVI7CisJCQllbHNlCisJCQkgICAgbXR0ID0gTVRfU1RfT1RIOworCQkgICAgfQorCQkgICAgZWxzZQorCQkgICAgeworCQkJaWYgKGlzX2N1cnJlbnQpCisJCQkgICAgbXR0ID0gTVRfR0xfQ1VSOworCQkJZWxzZQorCQkJICAgIG10dCA9IE1UX0dMX09USDsKKwkJICAgIH0KKwkJICAgIGlmIChwYXRzLT5yZWdtYXRjaC5ybV9pYyAmJiAhbWF0Y2hfbm9faWMpCisJCQltdHQgKz0gTVRfSUNfT0ZGOworCQkgICAgaWYgKG1hdGNoX3JlKQorCQkJbXR0ICs9IE1UX1JFX09GRjsKKwkJfQorCisJCS8qCisJCSAqIEFkZCB0aGUgZm91bmQgbWF0Y2ggaW4gZ2FfbWF0Y2hbbXR0XSwgYXZvaWRpbmcgZHVwbGljYXRlcy4KKwkJICogU3RvcmUgdGhlIGluZm8gd2UgbmVlZCBsYXRlciwgd2hpY2ggZGVwZW5kcyBvbiB0aGUga2luZCBvZgorCQkgKiB0YWdzIHdlIGFyZSBkZWFsaW5nIHdpdGguCisJCSAqLworCQlpZiAoZ2FfZ3JvdygmZ2FfbWF0Y2hbbXR0XSwgMSkgPT0gT0spCisJCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICBjaGFyX3UJKmNvbnZfbGluZSA9IE5VTEw7CisJCSAgICBjaGFyX3UJKmxidWZfbGluZSA9IGxidWY7CisKKwkJICAgIGlmICh2aW1jb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorCQkgICAgeworCQkJLyogQ29udmVydCB0aGUgdGFnIGxpbmUgZnJvbSB0aGUgZW5jb2Rpbmcgb2YgdGhlIHRhZ3MKKwkJCSAqIGZpbGUgdG8gJ2VuY29kaW5nJy4gIFRoZW4gcGFyc2UgdGhlIGxpbmUgYWdhaW4uICovCisJCQljb252X2xpbmUgPSBzdHJpbmdfY29udmVydCgmdmltY29udiwgbGJ1ZiwgTlVMTCk7CisJCQlpZiAoY29udl9saW5lICE9IE5VTEwpCisJCQl7CisJCQkgICAgaWYgKHBhcnNlX3RhZ19saW5lKGNvbnZfbGluZSwKKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKKwkJCQkJaXNfZXRhZywKKyNlbmRpZgorCQkJCQkmdGFncCkgPT0gT0spCisJCQkJbGJ1Zl9saW5lID0gY29udl9saW5lOworCQkJICAgIGVsc2UKKwkJCQkvKiBkb2Vzbid0IHdvcmssIGdvIGJhY2sgdG8gdW5jb252ZXJ0ZWQgbGluZS4gKi8KKwkJCQkodm9pZClwYXJzZV90YWdfbGluZShsYnVmLAorI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworCQkJCQkJICAgICBpc19ldGFnLAorI2VuZGlmCisJCQkJCQkgICAgICZ0YWdwKTsKKwkJCX0KKwkJICAgIH0KKyNlbHNlCisjIGRlZmluZSBsYnVmX2xpbmUgbGJ1ZgorI2VuZGlmCisJCSAgICBpZiAoaGVscF9vbmx5KQorCQkgICAgeworI2lmZGVmIEZFQVRfTVVMVElfTEFORworIyBkZWZpbmUgTUxfRVhUUkEgMworI2Vsc2UKKyMgZGVmaW5lIE1MX0VYVFJBIDAKKyNlbmRpZgorCQkJLyoKKwkJCSAqIEFwcGVuZCB0aGUgaGVscC1oZXVyaXN0aWMgbnVtYmVyIGFmdGVyIHRoZQorCQkJICogdGFnbmFtZSwgZm9yIHNvcnRpbmcgaXQgbGF0ZXIuCisJCQkgKi8KKwkJCSp0YWdwLnRhZ25hbWVfZW5kID0gTlVMOworCQkJbGVuID0gKGludCkodGFncC50YWduYW1lX2VuZCAtIHRhZ3AudGFnbmFtZSk7CisJCQltZnAgPSAoc3RydWN0IG1hdGNoX2ZvdW5kICopCisJCQkJIGFsbG9jKChpbnQpc2l6ZW9mKHN0cnVjdCBtYXRjaF9mb3VuZCkgKyBsZW4KKwkJCQkJCQkgICAgICsgMTAgKyBNTF9FWFRSQSk7CisJCQlpZiAobWZwICE9IE5VTEwpCisJCQl7CisJCQkgICAgLyogImxlbiIgaW5jbHVkZXMgdGhlIGxhbmd1YWdlIGFuZCB0aGUgTlVMLCBidXQKKwkJCSAgICAgKiBub3QgdGhlIHByaW9yaXR5LiAqLworCQkJICAgIG1mcC0+bGVuID0gbGVuICsgTUxfRVhUUkEgKyAxOworI2RlZmluZSBNTF9IRUxQX0xFTiA2CisJCQkgICAgcCA9IG1mcC0+bWF0Y2g7CisJCQkgICAgU1RSQ1BZKHAsIHRhZ3AudGFnbmFtZSk7CisjaWZkZWYgRkVBVF9NVUxUSV9MQU5HCisJCQkgICAgcFtsZW5dID0gJ0AnOworCQkJICAgIFNUUkNQWShwICsgbGVuICsgMSwgaGVscF9sYW5nKTsKKyNlbmRpZgorCQkJICAgIHNwcmludGYoKGNoYXIgKilwICsgbGVuICsgMSArIE1MX0VYVFJBLCAiJTA2ZCIsCisJCQkJICAgIGhlbHBfaGV1cmlzdGljKHRhZ3AudGFnbmFtZSwKKwkJCQkJbWF0Y2hfcmUgPyBtYXRjaG9mZiA6IDAsICFtYXRjaF9ub19pYykKKyNpZmRlZiBGRUFUX01VTFRJX0xBTkcKKwkJCQkgICAgKyBoZWxwX3ByaQorI2VuZGlmCisJCQkJICAgICk7CisJCQl9CisJCQkqdGFncC50YWduYW1lX2VuZCA9IFRBQjsKKwkJICAgIH0KKwkJICAgIGVsc2UgaWYgKG5hbWVfb25seSkKKwkJICAgIHsKKwkJCWlmIChnZXRfaXRfYWdhaW4pCisJCQl7CisJCQkgICAgY2hhcl91ICp0ZW1wX2VuZCA9IHRhZ3AuY29tbWFuZDsKKworCQkJICAgIGlmICgqdGVtcF9lbmQgPT0gJy8nKQorCQkJCXdoaWxlICgqdGVtcF9lbmQgJiYgKnRlbXBfZW5kICE9ICdccicKKwkJCQkJJiYgKnRlbXBfZW5kICE9ICdcbicKKwkJCQkJJiYgKnRlbXBfZW5kICE9ICckJykKKwkJCQkgICAgdGVtcF9lbmQrKzsKKworCQkJICAgIGlmICh0YWdwLmNvbW1hbmQgKyAyIDwgdGVtcF9lbmQpCisJCQkgICAgeworCQkJCWxlbiA9IChpbnQpKHRlbXBfZW5kIC0gdGFncC5jb21tYW5kIC0gMik7CisJCQkJbWZwID0gKHN0cnVjdCBtYXRjaF9mb3VuZCAqKWFsbG9jKAorCQkJCQkoaW50KXNpemVvZihzdHJ1Y3QgbWF0Y2hfZm91bmQpICsgbGVuKTsKKwkJCQlpZiAobWZwICE9IE5VTEwpCisJCQkJeworCQkJCSAgICBtZnAtPmxlbiA9IGxlbiArIDE7IC8qIGluY2x1ZGUgdGhlIE5VTCAqLworCQkJCSAgICBwID0gbWZwLT5tYXRjaDsKKwkJCQkgICAgU1RSTkNQWShwLCB0YWdwLmNvbW1hbmQgKyAyLCBsZW4pOworCQkJCSAgICBwW2xlbl0gPSBOVUw7CisJCQkJfQorCQkJICAgIH0KKwkJCSAgICBlbHNlCisJCQkJbWZwID0gTlVMTDsKKwkJCSAgICBnZXRfaXRfYWdhaW4gPSBGQUxTRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCSAgICBsZW4gPSAoaW50KSh0YWdwLnRhZ25hbWVfZW5kIC0gdGFncC50YWduYW1lKTsKKwkJCSAgICBtZnAgPSAoc3RydWN0IG1hdGNoX2ZvdW5kICopYWxsb2MoCisJCQkJICAgICAgIChpbnQpc2l6ZW9mKHN0cnVjdCBtYXRjaF9mb3VuZCkgKyBsZW4pOworCQkJICAgIGlmIChtZnAgIT0gTlVMTCkKKwkJCSAgICB7CisJCQkJbWZwLT5sZW4gPSBsZW4gKyAxOyAvKiBpbmNsdWRlIHRoZSBOVUwgKi8KKwkJCQlwID0gbWZwLT5tYXRjaDsKKwkJCQlTVFJOQ1BZKHAsIHRhZ3AudGFnbmFtZSwgbGVuKTsKKwkJCQlwW2xlbl0gPSBOVUw7CisJCQkgICAgfQorCisJCQkgICAgLyogaWYgd2FudGVkLCByZS1yZWFkIGxpbmUgdG8gZ2V0IGxvbmcgZm9ybSB0b28gKi8KKwkJCSAgICBpZiAoU3RhdGUgJiBJTlNFUlQpCisJCQkJZ2V0X2l0X2FnYWluID0gcF9zZnQ7CisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlCisJCSAgICB7CisJCQkvKiBTYXZlIHRoZSB0YWcgaW4gYSBidWZmZXIuCisJCQkgKiBFbWFjcyB0YWc6IDxtdHQ+PHRhZ19mbmFtZT48TlVMPjxlYnVmPjxOVUw+PGxidWY+CisJCQkgKiBvdGhlciB0YWc6IDxtdHQ+PHRhZ19mbmFtZT48TlVMPjxOVUw+PGxidWY+CisJCQkgKiB3aXRob3V0IEVtYWNzIHRhZ3M6IDxtdHQ+PHRhZ19mbmFtZT48TlVMPjxsYnVmPgorCQkJICovCisJCQlsZW4gPSAoaW50KVNUUkxFTih0YWdfZm5hbWUpICsgKGludClTVFJMRU4obGJ1Zl9saW5lKSArIDM7CisjaWZkZWYgRkVBVF9FTUFDU19UQUdTCisJCQlpZiAoaXNfZXRhZykKKwkJCSAgICBsZW4gKz0gKGludClTVFJMRU4oZWJ1ZikgKyAxOworCQkJZWxzZQorCQkJICAgICsrbGVuOworI2VuZGlmCisJCQltZnAgPSAoc3RydWN0IG1hdGNoX2ZvdW5kICopYWxsb2MoCisJCQkJICAgICAgIChpbnQpc2l6ZW9mKHN0cnVjdCBtYXRjaF9mb3VuZCkgKyBsZW4pOworCQkJaWYgKG1mcCAhPSBOVUxMKQorCQkJeworCQkJICAgIG1mcC0+bGVuID0gbGVuOworCQkJICAgIHAgPSBtZnAtPm1hdGNoOworCQkJICAgIHBbMF0gPSBtdHQ7CisJCQkgICAgU1RSQ1BZKHAgKyAxLCB0YWdfZm5hbWUpOworI2lmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorCQkJICAgIC8qIElnbm9yZSBkaWZmZXJlbmNlcyBpbiBzbGFzaGVzLCBhdm9pZCBhZGRpbmcKKwkJCSAgICAgKiBib3RoIHBhdGgvZmlsZSBhbmQgcGF0aFxmaWxlLiAqLworCQkJICAgIHNsYXNoX2FkanVzdChwICsgMSk7CisjZW5kaWYKKwkJCSAgICBzID0gcCArIDEgKyBTVFJMRU4odGFnX2ZuYW1lKSArIDE7CisjaWZkZWYgRkVBVF9FTUFDU19UQUdTCisJCQkgICAgaWYgKGlzX2V0YWcpCisJCQkgICAgeworCQkJCVNUUkNQWShzLCBlYnVmKTsKKwkJCQlzICs9IFNUUkxFTihlYnVmKSArIDE7CisJCQkgICAgfQorCQkJICAgIGVsc2UKKwkJCQkqcysrID0gTlVMOworI2VuZGlmCisJCQkgICAgU1RSQ1BZKHMsIGxidWZfbGluZSk7CisJCQl9CisJCSAgICB9CisKKwkJICAgIGlmIChtZnAgIT0gTlVMTCkKKwkJICAgIHsKKwkJCS8qCisJCQkgKiBEb24ndCBhZGQgaWRlbnRpY2FsIG1hdGNoZXMuCisJCQkgKiBUaGlzIGNhbiB0YWtlIGEgbG90IG9mIHRpbWUgd2hlbiBmaW5kaW5nIG1hbnkKKwkJCSAqIG1hdGNoZXMsIGNoZWNrIGZvciBDVFJMLUMgbm93IGFuZCB0aGVuLgorCQkJICogQWRkIGFsbCBjc2NvcGUgdGFncywgYmVjYXVzZSB0aGV5IGFyZSBhbGwgbGlzdGVkLgorCQkJICovCisjaWZkZWYgRkVBVF9DU0NPUEUKKwkJCWlmICh1c2VfY3Njb3BlKQorCQkJICAgIGkgPSAtMTsKKwkJCWVsc2UKKyNlbmRpZgorCQkJICBmb3IgKGkgPSBnYV9tYXRjaFttdHRdLmdhX2xlbjsgLS1pID49IDAgJiYgIWdvdF9pbnQ7ICkKKwkJCSAgeworCQkJICAgICAgbWZwMiA9ICgoc3RydWN0IG1hdGNoX2ZvdW5kICoqKQorCQkJCQkJICAoZ2FfbWF0Y2hbbXR0XS5nYV9kYXRhKSlbaV07CisJCQkgICAgICBpZiAobWZwMi0+bGVuID09IG1mcC0+bGVuCisJCQkJICAgICAgJiYgdmltX21lbWNtcChtZnAyLT5tYXRjaCwgbWZwLT5tYXRjaCwKKwkJCQkJCSAgICAgICAoc2l6ZV90KW1mcC0+bGVuKSA9PSAwKQorCQkJCSAgYnJlYWs7CisJCQkgICAgICBsaW5lX2JyZWFrY2hlY2soKTsKKwkJCSAgfQorCQkJaWYgKGkgPCAwKQorCQkJeworCQkJICAgICgoc3RydWN0IG1hdGNoX2ZvdW5kICoqKShnYV9tYXRjaFttdHRdLmdhX2RhdGEpKQorCQkJCQkgICAgICAgW2dhX21hdGNoW210dF0uZ2FfbGVuKytdID0gbWZwOworCQkJICAgIGdhX21hdGNoW210dF0uZ2Ffcm9vbS0tOworCQkJICAgICsrbWF0Y2hfY291bnQ7CisJCQl9CisJCQllbHNlCisJCQkgICAgdmltX2ZyZWUobWZwKTsKKwkJICAgIH0KKyNpZmRlZiBGRUFUX01CWVRFCisJCSAgICAvKiBOb3RlOiB0aGlzIG1ha2VzIHRoZSB2YWx1ZXMgaW4gInRhZ3AiIGludmFsaWQhICovCisJCSAgICB2aW1fZnJlZShjb252X2xpbmUpOworI2VuZGlmCisJCX0KKwkJZWxzZSAgICAvKiBPdXQgb2YgbWVtb3J5ISBKdXN0IGZvcmdldCBhYm91dCB0aGUgcmVzdC4gKi8KKwkJeworCQkgICAgcmV0dmFsID0gT0s7CisJCSAgICBzdG9wX3NlYXJjaGluZyA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisjaWZkZWYgRkVBVF9DU0NPUEUKKwkgICAgaWYgKHVzZV9jc2NvcGUgJiYgZW9mKQorCQlicmVhazsKKyNlbmRpZgorCX0gLyogZm9yZXZlciAqLworCisJaWYgKGxpbmVfZXJyb3IpCisJeworCSAgICBFTVNHMihfKCJFNDMxOiBGb3JtYXQgZXJyb3IgaW4gdGFncyBmaWxlIFwiJXNcIiIpLCB0YWdfZm5hbWUpOworI2lmZGVmIEZFQVRfQ1NDT1BFCisJICAgIGlmICghdXNlX2NzY29wZSkKKyNlbmRpZgorCQlFTVNHTihfKCJCZWZvcmUgYnl0ZSAlbGQiKSwgKGxvbmcpZnRlbGwoZnApKTsKKwkgICAgc3RvcF9zZWFyY2hpbmcgPSBUUlVFOworCSAgICBsaW5lX2Vycm9yID0gRkFMU0U7CisJfQorCisjaWZkZWYgRkVBVF9DU0NPUEUKKwlpZiAoIXVzZV9jc2NvcGUpCisjZW5kaWYKKwkgICAgZmNsb3NlKGZwKTsKKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKKwl3aGlsZSAoaW5jc3RhY2tfaWR4KQorCXsKKwkgICAgLS1pbmNzdGFja19pZHg7CisJICAgIGZjbG9zZShpbmNzdGFja1tpbmNzdGFja19pZHhdLmZwKTsKKwkgICAgdmltX2ZyZWUoaW5jc3RhY2tbaW5jc3RhY2tfaWR4XS5ldGFnX2ZuYW1lKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBGRUFUX01CWVRFCisJaWYgKHBhdHMgPT0gJmNvbnZwYXQpCisJeworCSAgICAvKiBHbyBiYWNrIGZyb20gY29udmVydGVkIHBhdHRlcm4gdG8gb3JpZ2luYWwgcGF0dGVybi4gKi8KKwkgICAgdmltX2ZyZWUocGF0cy0+cGF0KTsKKwkgICAgdmltX2ZyZWUocGF0cy0+cmVnbWF0Y2gucmVncHJvZyk7CisJICAgIG9yZ3BhdC5yZWdtYXRjaC5ybV9pYyA9IHBhdHMtPnJlZ21hdGNoLnJtX2ljOworCSAgICBwYXRzID0gJm9yZ3BhdDsKKwl9CisJaWYgKHZpbWNvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJICAgIGNvbnZlcnRfc2V0dXAoJnZpbWNvbnYsIE5VTEwsIE5VTEwpOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1RBR19CSU5TCisJaWYgKHNvcnRfZXJyb3IpCisJeworCSAgICBFTVNHMihfKCJFNDMyOiBUYWdzIGZpbGUgbm90IHNvcnRlZDogJXMiKSwgdGFnX2ZuYW1lKTsKKwkgICAgc29ydF9lcnJvciA9IEZBTFNFOworCX0KKyNlbmRpZgorCisJLyoKKwkgKiBTdG9wIHNlYXJjaGluZyBpZiBzdWZmaWNpZW50IHRhZ3MgaGF2ZSBiZWVuIGZvdW5kLgorCSAqLworCWlmIChtYXRjaF9jb3VudCA+PSBtaW5jb3VudCkKKwl7CisJICAgIHJldHZhbCA9IE9LOworCSAgICBzdG9wX3NlYXJjaGluZyA9IFRSVUU7CisJfQorCisjaWZkZWYgRkVBVF9DU0NPUEUKKwlpZiAoc3RvcF9zZWFyY2hpbmcgfHwgdXNlX2NzY29wZSkKKyNlbHNlCisJaWYgKHN0b3Bfc2VhcmNoaW5nKQorI2VuZGlmCisJICAgIGJyZWFrOworCisgICAgICB9IC8qIGVuZCBvZiBmb3ItZWFjaC1maWxlIGxvb3AgKi8KKworI2lmZGVmIEZFQVRfVEFHX0JJTlMKKyAgICAgIC8qIHN0b3Agc2VhcmNoaW5nIHdoZW4gYWxyZWFkeSBkaWQgYSBsaW5lYXIgc2VhcmNoLCBvciB3aGVuCisgICAgICAgKiBUQUdfTk9JQyB1c2VkLCBhbmQgJ2lnbm9yZWNhc2UnIG5vdCBzZXQKKyAgICAgICAqIG9yIGFscmVhZHkgZGlkIGNhc2UtaWdub3JlIHNlYXJjaCAqLworICAgICAgaWYgKHN0b3Bfc2VhcmNoaW5nIHx8IGxpbmVhciB8fCAoIXBfaWMgJiYgbm9pYykgfHwgcGF0cy0+cmVnbWF0Y2gucm1faWMpCisJICBicmVhazsKKyMgaWZkZWYgRkVBVF9DU0NPUEUKKyAgICAgIGlmICh1c2VfY3Njb3BlKQorCSAgYnJlYWs7CisjIGVuZGlmCisgICAgICBwYXRzLT5yZWdtYXRjaC5ybV9pYyA9IFRSVUU7CS8qIHRyeSBhbm90aGVyIHRpbWUgd2hpbGUgaWdub3JpbmcgY2FzZSAqLworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCFzdG9wX3NlYXJjaGluZykKKyAgICB7CisJaWYgKCFkaWRfb3BlbiAmJiB2ZXJib3NlKQkvKiBuZXZlciBvcGVuZWQgYW55IHRhZ3MgZmlsZSAqLworCSAgICBFTVNHKF8oIkU0MzM6IE5vIHRhZ3MgZmlsZSIpKTsKKwlyZXR2YWwgPSBPSzsJCS8qIEl0J3MgT0sgZXZlbiB3aGVuIG5vIHRhZyBmb3VuZCAqLworICAgIH0KKworZmluZHRhZ19lbmQ6CisgICAgdmltX2ZyZWUobGJ1Zik7CisgICAgdmltX2ZyZWUocGF0cy0+cmVnbWF0Y2gucmVncHJvZyk7CisgICAgdmltX2ZyZWUodGFnX2ZuYW1lKTsKKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKKyAgICB2aW1fZnJlZShlYnVmKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBNb3ZlIHRoZSBtYXRjaGVzIGZyb20gdGhlIGdhX21hdGNoW10gYXJyYXlzIGludG8gb25lIGxpc3Qgb2YKKyAgICAgKiBtYXRjaGVzLiAgV2hlbiByZXR2YWwgPT0gRkFJTCwgZnJlZSB0aGUgbWF0Y2hlcy4KKyAgICAgKi8KKyAgICBpZiAocmV0dmFsID09IEZBSUwpCisJbWF0Y2hfY291bnQgPSAwOworCisgICAgaWYgKG1hdGNoX2NvdW50ID4gMCkKKwltYXRjaGVzID0gKGNoYXJfdSAqKilsYWxsb2MoKGxvbmdfdSkobWF0Y2hfY291bnQgKiBzaXplb2YoY2hhcl91ICopKSwKKwkJCQkJCQkJCVRSVUUpOworICAgIGVsc2UKKwltYXRjaGVzID0gTlVMTDsKKyAgICBtYXRjaF9jb3VudCA9IDA7CisgICAgZm9yIChtdHQgPSAwOyBtdHQgPCBNVF9DT1VOVDsgKyttdHQpCisgICAgeworCWZvciAoaSA9IDA7IGkgPCBnYV9tYXRjaFttdHRdLmdhX2xlbjsgKytpKQorCXsKKwkgICAgbWZwID0gKChzdHJ1Y3QgbWF0Y2hfZm91bmQgKiopKGdhX21hdGNoW210dF0uZ2FfZGF0YSkpW2ldOworCSAgICBpZiAobWF0Y2hlcyA9PSBOVUxMKQorCQl2aW1fZnJlZShtZnApOworCSAgICBlbHNlCisJICAgIHsKKwkJLyogVG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgYWdhaW4gd2UgdHVybiB0aGUgc3RydWN0CisJCSAqIG1hdGNoX2ZvdW5kIGludG8gYSBzdHJpbmcuICBGb3IgaGVscCB0aGUgcHJpb3JpdHkgd2FzIG5vdAorCQkgKiBpbmNsdWRlZCBpbiB0aGUgbGVuZ3RoLiAqLworCQltY2hfbWVtbW92ZShtZnAsIG1mcC0+bWF0Y2gsCisJCQkgKHNpemVfdCkobWZwLT5sZW4gKyAoaGVscF9vbmx5ID8gTUxfSEVMUF9MRU4gOiAwKSkpOworCQltYXRjaGVzW21hdGNoX2NvdW50KytdID0gKGNoYXJfdSAqKW1mcDsKKwkgICAgfQorCX0KKwlnYV9jbGVhcigmZ2FfbWF0Y2hbbXR0XSk7CisgICAgfQorCisgICAgKm1hdGNoZXNwID0gbWF0Y2hlczsKKyAgICAqbnVtX21hdGNoZXMgPSBtYXRjaF9jb3VudDsKKworICAgIGN1cmJ1Zi0+Yl9oZWxwID0gaGVscF9zYXZlOworI2lmZGVmIEZFQVRfTVVMVElfTEFORworICAgIHZpbV9mcmVlKHNhdmVkX3BhdCk7CisjZW5kaWYKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBnYXJyYXlfVCB0YWdfZm5hbWVzID0gR0FfRU1QVFk7CitzdGF0aWMgdm9pZCBmb3VuZF90YWdmaWxlX2NiIF9fQVJHUygoY2hhcl91ICpmbmFtZSkpOworCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGZpbmRpbmcgYWxsICJ0YWdzIiBhbmQgInRhZ3MtPz8iIGZpbGVzIGluCisgKiAncnVudGltZXBhdGgnIGRvYyBkaXJlY3Rvcmllcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmb3VuZF90YWdmaWxlX2NiKGZuYW1lKQorICAgIGNoYXJfdQkqZm5hbWU7Cit7CisgICAgaWYgKGdhX2dyb3coJnRhZ19mbmFtZXMsIDEpID09IE9LKQorICAgIHsKKwkoKGNoYXJfdSAqKikodGFnX2ZuYW1lcy5nYV9kYXRhKSlbdGFnX2ZuYW1lcy5nYV9sZW4rK10gPQorCQkJCQkJCSAgIHZpbV9zdHJzYXZlKGZuYW1lKTsKKwktLXRhZ19mbmFtZXMuZ2Ffcm9vbTsKKyAgICB9Cit9CisKKy8qCisgKiBHZXQgdGhlIG5leHQgbmFtZSBvZiBhIHRhZyBmaWxlIGZyb20gdGhlIHRhZyBmaWxlIGxpc3QuCisgKiBGb3IgaGVscCBmaWxlcywgdXNlICJ0YWdzIiBmaWxlIG9ubHkuCisgKgorICogUmV0dXJuIEZBSUwgaWYgbm8gbW9yZSB0YWcgZmlsZSBuYW1lcywgT0sgb3RoZXJ3aXNlLgorICovCisgICAgc3RhdGljIGludAorZ2V0X3RhZ2ZuYW1lKGZpcnN0LCBidWYpCisgICAgaW50CQlmaXJzdDsJLyogVFJVRSB3aGVuIGZpcnN0IGZpbGUgbmFtZSBpcyB3YW50ZWQgKi8KKyAgICBjaGFyX3UJKmJ1ZjsJLyogcG9pbnRlciB0byBidWZmZXIgb2YgTUFYUEFUSEwgY2hhcnMgKi8KK3sKKyAgICBzdGF0aWMgdm9pZAkJKnNlYXJjaF9jdHggPSBOVUxMOworICAgIHN0YXRpYyBjaGFyX3UJKm5wID0gTlVMTDsKKyAgICBzdGF0aWMgaW50CQlkaWRfZmlsZWZpbmRfaW5pdDsKKyAgICBzdGF0aWMgaW50CQloZl9pZHggPSAwOworICAgIGNoYXJfdQkJKmZuYW1lID0gTlVMTDsKKyAgICBjaGFyX3UJCSpyX3B0cjsKKworICAgIGlmIChmaXJzdCkKKyAgICB7CisJaWYgKGN1cmJ1Zi0+Yl9oZWxwKQorCXsKKwkgICAgLyoKKwkgICAgICogRm9yIGEgaGVscCB3aW5kb3cgZmluZCAiZG9jL3RhZ3MiIGFuZCAiZG9jL3RhZ3MtPz8iIGluIGFsbAorCSAgICAgKiBkaXJlY3RvcmllcyBpbiAncnVudGltZXBhdGgnLgorCSAgICAgKi8KKwkgICAgZ2FfY2xlYXJfc3RyaW5ncygmdGFnX2ZuYW1lcyk7CisJICAgIGdhX2luaXQyKCZ0YWdfZm5hbWVzLCAoaW50KXNpemVvZihjaGFyX3UgKiksIDEwKTsKKwkgICAgZG9faW5fcnVudGltZXBhdGgoKGNoYXJfdSAqKQorI2lmZGVmIEZFQVRfTVVMVElfTEFORworCQkgICAgImRvYy90YWdzIGRvYy90YWdzLT8/IgorI2Vsc2UKKwkJICAgICJkb2MvdGFncyIKKyNlbmRpZgorCQkJCQkJICAgICwgVFJVRSwgZm91bmRfdGFnZmlsZV9jYik7CisJICAgIGhmX2lkeCA9IDA7CisJfQorCWVsc2UgaWYgKCpjdXJidWYtPmJfcF90YWdzICE9IE5VTCkKKwkgICAgbnAgPSBjdXJidWYtPmJfcF90YWdzOworCWVsc2UKKwkgICAgbnAgPSBwX3RhZ3M7CisJdmltX2ZpbmRmaWxlX2ZyZWVfdmlzaXRlZChzZWFyY2hfY3R4KTsKKwlkaWRfZmlsZWZpbmRfaW5pdCA9IEZBTFNFOworICAgIH0KKworICAgIGlmIChjdXJidWYtPmJfaGVscCkKKyAgICB7CisJaWYgKGhmX2lkeCA+PSB0YWdfZm5hbWVzLmdhX2xlbikKKwl7CisJICAgIC8qIE5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnLCB1c2UgJ2hlbHBmaWxlJywgaWYgaXQgZXhpc3RzIGFuZAorCSAgICAgKiB3YXNuJ3QgdXNlZCB5ZXQsIHJlcGxhY2luZyAiaGVscC50eHQiIHdpdGggInRhZ3MiLiAqLworCSAgICBpZiAoaGZfaWR4ID4gdGFnX2ZuYW1lcy5nYV9sZW4gfHwgKnBfaGYgPT0gTlVMKQorCQlyZXR1cm4gRkFJTDsKKwkgICAgKytoZl9pZHg7CisJICAgIFNUUkNQWShidWYsIHBfaGYpOworCSAgICBTVFJDUFkoZ2V0dGFpbChidWYpLCAidGFncyIpOworCX0KKwllbHNlCisJeworCSAgICBTVFJOQ1BZKGJ1ZiwgKChjaGFyX3UgKiopKHRhZ19mbmFtZXMuZ2FfZGF0YSkpW2hmX2lkeCsrXSwgTUFYUEFUSEwpOworCSAgICBidWZbTUFYUEFUSEwgLSAxXSA9IE5VTDsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogdHJpZWQgYWxyZWFkeSAob3IgYm9ndXMgY2FsbCkgKi8KKwlpZiAobnAgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBSUw7CisKKwkvKgorCSAqIExvb3AgdW50aWwgd2UgaGF2ZSBmb3VuZCBhIGZpbGUgbmFtZSB0aGF0IGNhbiBiZSB1c2VkLgorCSAqIFRoZXJlIGFyZSB0d28gc3RhdGVzOgorCSAqIGRpZF9maWxlZmluZF9pbml0ID09IEZBTFNFOiBzZXR1cCBmb3IgbmV4dCBwYXJ0IGluICd0YWdzJy4KKwkgKiBkaWRfZmlsZWZpbmRfaW5pdCA9PSBUUlVFOiBmaW5kIG5leHQgZmlsZSBpbiB0aGlzIHBhcnQuCisJICovCisJZm9yICg7OykKKwl7CisJICAgIGlmIChkaWRfZmlsZWZpbmRfaW5pdCkKKwkgICAgeworCQlmbmFtZSA9IHZpbV9maW5kZmlsZShzZWFyY2hfY3R4KTsKKwkJaWYgKGZuYW1lICE9IE5VTEwpCisJCSAgICBicmVhazsKKworCQlkaWRfZmlsZWZpbmRfaW5pdCA9IEZBTFNFOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQljaGFyX3UgICpmaWxlbmFtZSA9IE5VTEw7CisKKwkJLyogU3RvcCB3aGVuIHVzZWQgYWxsIHBhcnRzIG9mICd0YWdzJy4gKi8KKwkJaWYgKCpucCA9PSBOVUwpCisJCXsKKwkJICAgIHZpbV9maW5kZmlsZV9jbGVhbnVwKHNlYXJjaF9jdHgpOworCQkgICAgc2VhcmNoX2N0eCA9IE5VTEw7CisJCSAgICByZXR1cm4gRkFJTDsKKwkJfQorCisJCS8qCisJCSAqIENvcHkgbmV4dCBmaWxlIG5hbWUgaW50byBidWYuCisJCSAqLworCQlidWZbMF0gPSBOVUw7CisJCSh2b2lkKWNvcHlfb3B0aW9uX3BhcnQoJm5wLCBidWYsIE1BWFBBVEhMIC0gMSwgIiAsIik7CisKKyNpZmRlZiBGRUFUX1BBVEhfRVhUUkEKKwkJcl9wdHIgPSB2aW1fZmluZGZpbGVfc3RvcGRpcihidWYpOworI2Vsc2UKKwkJcl9wdHIgPSBOVUxMOworI2VuZGlmCisJCS8qIG1vdmUgdGhlIGZpbGVuYW1lIG9uZSBjaGFyIGZvcndhcmQgYW5kIHRydW5jYXRlIHRoZQorCQkgKiBmaWxlcGF0aCB3aXRoIGEgTlVMICovCisJCWZpbGVuYW1lID0gZ2V0dGFpbChidWYpOworCQltY2hfbWVtbW92ZShmaWxlbmFtZSArIDEsIGZpbGVuYW1lLCBTVFJMRU4oZmlsZW5hbWUpICsgMSk7CisJCSpmaWxlbmFtZSsrID0gTlVMOworCisJCXNlYXJjaF9jdHggPSB2aW1fZmluZGZpbGVfaW5pdChidWYsIGZpbGVuYW1lLCByX3B0ciwgMTAwLAorCQkJRkFMU0UsIC8qIGRvbid0IGZyZWUgdmlzaXRlZCBsaXN0ICovCisJCQlGQUxTRSwgLyogd2Ugc2VhcmNoIGZvciBhIGZpbGUgKi8KKwkJCXNlYXJjaF9jdHgsIFRSVUUsIGN1cmJ1Zi0+Yl9mZm5hbWUpOworCQlpZiAoc2VhcmNoX2N0eCAhPSBOVUxMKQorCQkgICAgZGlkX2ZpbGVmaW5kX2luaXQgPSBUUlVFOworCSAgICB9CisJfQorCVNUUkNQWShidWYsIGZuYW1lKTsKKwl2aW1fZnJlZShmbmFtZSk7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogUGFyc2Ugb25lIGxpbmUgZnJvbSB0aGUgdGFncyBmaWxlLiBGaW5kIHN0YXJ0L2VuZCBvZiB0YWcgbmFtZSwgc3RhcnQvZW5kIG9mCisgKiBmaWxlIG5hbWUgYW5kIHN0YXJ0IG9mIHNlYXJjaCBwYXR0ZXJuLgorICoKKyAqIElmIGlzX2V0YWcgaXMgVFJVRSwgdGFncC0+Zm5hbWUgYW5kIHRhZ3AtPmZuYW1lX2VuZCBhcmUgbm90IHNldC4KKyAqCisgKiBSZXR1cm4gRkFJTCBpZiB0aGVyZSBpcyBhIGZvcm1hdCBlcnJvciBpbiB0aGlzIGxpbmUsIE9LIG90aGVyd2lzZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK3BhcnNlX3RhZ19saW5lKGxidWYsCisjaWZkZWYgRkVBVF9FTUFDU19UQUdTCisJCSAgICBpc19ldGFnLAorI2VuZGlmCisJCQkgICAgICB0YWdwKQorICAgIGNoYXJfdQkqbGJ1ZjsJCS8qIGxpbmUgdG8gYmUgcGFyc2VkICovCisjaWZkZWYgRkVBVF9FTUFDU19UQUdTCisgICAgaW50CQlpc19ldGFnOworI2VuZGlmCisgICAgdGFncHRyc19UCSp0YWdwOworeworICAgIGNoYXJfdQkqcDsKKworI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworICAgIGNoYXJfdQkqcF83ZjsKKworICAgIGlmIChpc19ldGFnKQorICAgIHsKKwkvKgorCSAqIFRoZXJlIGFyZSB0d28gZm9ybWF0cyBmb3IgYW4gZW1hY3MgdGFnIGxpbmU6CisJICogMTogIHN0cnVjdCBFbnZCYXNlIF4/RW52QmFzZV5BMTM5LDQ2MjcKKwkgKiAyOiAjZGVmaW5lCUFSUEJfV0lMRF9XT1JMRCBePzE1Myw1MTk0CisJICovCisJcF83ZiA9IHZpbV9zdHJjaHIobGJ1ZiwgMHg3Zik7CisJaWYgKHBfN2YgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBSUw7CisKKwkvKiBGaW5kIF5BLiAgSWYgbm90IGZvdW5kIHRoZSBsaW5lIG51bWJlciBpcyBhZnRlciB0aGUgMHg3ZiAqLworCXAgPSB2aW1fc3RyY2hyKHBfN2YsIEN0cmxfQSk7CisJaWYgKHAgPT0gTlVMTCkKKwkgICAgcCA9IHBfN2YgKyAxOworCWVsc2UKKwkgICAgKytwOworCisJaWYgKCFWSU1fSVNESUdJVCgqcCkpCSAgICAvKiBjaGVjayBmb3Igc3RhcnQgb2YgbGluZSBudW1iZXIgKi8KKwkgICAgcmV0dXJuIEZBSUw7CisJdGFncC0+Y29tbWFuZCA9IHA7CisKKworCWlmIChwWy0xXSA9PSBDdHJsX0EpCSAgICAvKiBmaXJzdCBmb3JtYXQ6IGV4cGxpY2l0IHRhZ25hbWUgZ2l2ZW4gKi8KKwl7CisJICAgIHRhZ3AtPnRhZ25hbWUgPSBwXzdmICsgMTsKKwkgICAgdGFncC0+dGFnbmFtZV9lbmQgPSBwIC0gMTsKKwl9CisJZWxzZQkJCSAgICAvKiBzZWNvbmQgZm9ybWF0OiBpc29sYXRlIHRhZ25hbWUgKi8KKwl7CisJICAgIC8qIGZpbmQgZW5kIG9mIHRhZ25hbWUgKi8KKwkgICAgZm9yIChwID0gcF83ZiAtIDE7ICF2aW1faXN3b3JkYygqcCk7IC0tcCkKKwkJaWYgKHAgPT0gbGJ1ZikKKwkJICAgIHJldHVybiBGQUlMOworCSAgICB0YWdwLT50YWduYW1lX2VuZCA9IHAgKyAxOworCSAgICB3aGlsZSAocCA+PSBsYnVmICYmIHZpbV9pc3dvcmRjKCpwKSkKKwkJLS1wOworCSAgICB0YWdwLT50YWduYW1lID0gcCArIDE7CisJfQorICAgIH0KKyAgICBlbHNlCS8qIG5vdCBhbiBFbWFjcyB0YWcgKi8KKyAgICB7CisjZW5kaWYKKwkvKiBJc29sYXRlIHRoZSB0YWduYW1lLCBmcm9tIGxidWYgdXAgdG8gdGhlIGZpcnN0IHdoaXRlICovCisJdGFncC0+dGFnbmFtZSA9IGxidWY7CisjaWZkZWYgRkVBVF9UQUdfQU5ZV0hJVEUKKwlwID0gc2tpcHRvd2hpdGUobGJ1Zik7CisjZWxzZQorCXAgPSB2aW1fc3RyY2hyKGxidWYsIFRBQik7CisJaWYgKHAgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBSUw7CisjZW5kaWYKKwl0YWdwLT50YWduYW1lX2VuZCA9IHA7CisKKwkvKiBJc29sYXRlIGZpbGUgbmFtZSwgZnJvbSBmaXJzdCB0byBzZWNvbmQgd2hpdGUgc3BhY2UgKi8KKyNpZmRlZiBGRUFUX1RBR19BTllXSElURQorCXAgPSBza2lwd2hpdGUocCk7CisjZWxzZQorCWlmICgqcCAhPSBOVUwpCisJICAgICsrcDsKKyNlbmRpZgorCXRhZ3AtPmZuYW1lID0gcDsKKyNpZmRlZiBGRUFUX1RBR19BTllXSElURQorCXAgPSBza2lwdG93aGl0ZShwKTsKKyNlbHNlCisJcCA9IHZpbV9zdHJjaHIocCwgVEFCKTsKKwlpZiAocCA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFJTDsKKyNlbmRpZgorCXRhZ3AtPmZuYW1lX2VuZCA9IHA7CisKKwkvKiBmaW5kIHN0YXJ0IG9mIHNlYXJjaCBjb21tYW5kLCBhZnRlciBzZWNvbmQgd2hpdGUgc3BhY2UgKi8KKyNpZmRlZiBGRUFUX1RBR19BTllXSElURQorCXAgPSBza2lwd2hpdGUocCk7CisjZWxzZQorCWlmICgqcCAhPSBOVUwpCisJICAgICsrcDsKKyNlbmRpZgorCWlmICgqcCA9PSBOVUwpCisJICAgIHJldHVybiBGQUlMOworCXRhZ3AtPmNvbW1hbmQgPSBwOworI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogQ2hlY2sgaWYgdGFnbmFtZSBpcyBhIHN0YXRpYyB0YWcKKyAqCisgKiBTdGF0aWMgdGFncyBwcm9kdWNlZCBieSB0aGUgb2xkZXIgY3RhZ3MgcHJvZ3JhbSBoYXZlIHRoZSBmb3JtYXQ6CisgKgknZmlsZTp0YWcgIGZpbGUgIC9wYXR0ZXJuJy4KKyAqIFRoaXMgaXMgb25seSByZWNvZ25pemVkIHdoZW4gYm90aCBvY2N1cmVuY2VzIG9mICdmaWxlJyBhcmUgdGhlIHNhbWUsIHRvCisgKiBhdm9pZCByZWNvZ25pemluZyAic3RyaW5nOjpzdHJpbmciIG9yICI6ZXhpdCIuCisgKgorICogU3RhdGljIHRhZ3MgcHJvZHVjZWQgYnkgdGhlIG5ldyBjdGFncyBwcm9ncmFtIGhhdmUgdGhlIGZvcm1hdDoKKyAqCSd0YWcgIGZpbGUgIC9wYXR0ZXJuLzsiPFRhYj5maWxlOicJICAgICIKKyAqCisgKiBSZXR1cm4gVFJVRSBpZiBpdCBpcyBhIHN0YXRpYyB0YWcgYW5kIGFkanVzdCAqdGFnbmFtZSB0byB0aGUgcmVhbCB0YWcuCisgKiBSZXR1cm4gRkFMU0UgaWYgaXQgaXMgbm90IGEgc3RhdGljIHRhZy4KKyAqLworICAgIHN0YXRpYyBpbnQKK3Rlc3RfZm9yX3N0YXRpYyh0YWdwKQorICAgIHRhZ3B0cnNfVAkqdGFncDsKK3sKKyAgICBjaGFyX3UJKnA7CisKKyNpZmRlZiBGRUFUX1RBR19PTERTVEFUSUMKKyAgICBpbnQJCWxlbjsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIG9sZCBzdHlsZSBzdGF0aWMgdGFnOiAiZmlsZTp0YWcgZmlsZSAuLiIKKyAgICAgKi8KKyAgICBsZW4gPSAoaW50KSh0YWdwLT5mbmFtZV9lbmQgLSB0YWdwLT5mbmFtZSk7CisgICAgcCA9IHRhZ3AtPnRhZ25hbWUgKyBsZW47CisgICAgaWYgKCAgICAgICBwIDwgdGFncC0+dGFnbmFtZV9lbmQKKwkgICAgJiYgKnAgPT0gJzonCisJICAgICYmIGZuYW1lbmNtcCh0YWdwLT50YWduYW1lLCB0YWdwLT5mbmFtZSwgbGVuKSA9PSAwKQorICAgIHsKKwl0YWdwLT50YWduYW1lID0gcCArIDE7CisJcmV0dXJuIFRSVUU7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBuZXcgc3R5bGUgc3RhdGljIHRhZyAiOi4uLjxUYWI+ZmlsZTpbPFRhYj4uLi5dIgorICAgICAqLworICAgIHAgPSB0YWdwLT5jb21tYW5kOworICAgIHdoaWxlICgocCA9IHZpbV9zdHJjaHIocCwgJ1x0JykpICE9IE5VTEwpCisgICAgeworCSsrcDsKKwlpZiAoU1RSTkNNUChwLCAiZmlsZToiLCA1KSA9PSAwKQorCSAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBQYXJzZSBhIGxpbmUgZnJvbSBhIG1hdGNoaW5nIHRhZy4gIERvZXMgbm90IGNoYW5nZSB0aGUgbGluZSBpdHNlbGYuCisgKgorICogVGhlIGxpbmUgdGhhdCB3ZSBnZXQgbG9va3MgbGlrZSB0aGlzOgorICogRW1hY3MgdGFnOiA8bXR0Pjx0YWdfZm5hbWU+PE5VTD48ZWJ1Zj48TlVMPjxsYnVmPgorICogb3RoZXIgdGFnOiA8bXR0Pjx0YWdfZm5hbWU+PE5VTD48TlVMPjxsYnVmPgorICogd2l0aG91dCBFbWFjcyB0YWdzOiA8bXR0Pjx0YWdfZm5hbWU+PE5VTD48bGJ1Zj4KKyAqCisgKiBSZXR1cm4gT0sgb3IgRkFJTC4KKyAqLworICAgIHN0YXRpYyBpbnQKK3BhcnNlX21hdGNoKGxidWYsIHRhZ3ApCisgICAgY2hhcl91CSpsYnVmOwkgICAgLyogaW5wdXQ6IG1hdGNoaW5nIGxpbmUgKi8KKyAgICB0YWdwdHJzX1QJKnRhZ3A7CSAgICAvKiBvdXRwdXQ6IHBvaW50ZXJzIGludG8gdGhlIGxpbmUgKi8KK3sKKyAgICBpbnQJCXJldHZhbDsKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcl91CSpwYywgKnB0OworCisgICAgdGFncC0+dGFnX2ZuYW1lID0gbGJ1ZiArIDE7CisgICAgbGJ1ZiArPSBTVFJMRU4odGFncC0+dGFnX2ZuYW1lKSArIDI7CisjaWZkZWYgRkVBVF9FTUFDU19UQUdTCisgICAgaWYgKCpsYnVmKQorICAgIHsKKwl0YWdwLT5pc19ldGFnID0gVFJVRTsKKwl0YWdwLT5mbmFtZSA9IGxidWY7CisJbGJ1ZiArPSBTVFJMRU4obGJ1Zik7CisJdGFncC0+Zm5hbWVfZW5kID0gbGJ1ZisrOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXRhZ3AtPmlzX2V0YWcgPSBGQUxTRTsKKwkrK2xidWY7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBGaW5kIHNlYXJjaCBwYXR0ZXJuIGFuZCB0aGUgZmlsZSBuYW1lIGZvciBub24tZXRhZ3MuICovCisgICAgcmV0dmFsID0gcGFyc2VfdGFnX2xpbmUobGJ1ZiwKKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKKwkJCXRhZ3AtPmlzX2V0YWcsCisjZW5kaWYKKwkJCXRhZ3ApOworCisgICAgdGFncC0+dGFna2luZCA9IE5VTEw7CisgICAgdGFncC0+Y29tbWFuZF9lbmQgPSBOVUxMOworCisgICAgaWYgKHJldHZhbCA9PSBPSykKKyAgICB7CisJLyogVHJ5IHRvIGZpbmQgYSBraW5kIGZpZWxkOiAia2luZDo8a2luZD4iIG9yIGp1c3QgIjxraW5kPiIqLworCXAgPSB0YWdwLT5jb21tYW5kOworCWlmIChmaW5kX2V4dHJhKCZwKSA9PSBPSykKKwl7CisJICAgIHRhZ3AtPmNvbW1hbmRfZW5kID0gcDsKKwkgICAgcCArPSAyOwkvKiBza2lwICI7XCIiICovCisJICAgIGlmICgqcCsrID09IFRBQikKKwkJd2hpbGUgKEFTQ0lJX0lTQUxQSEEoKnApKQorCQl7CisJCSAgICBpZiAoU1RSTkNNUChwLCAia2luZDoiLCA1KSA9PSAwKQorCQkgICAgeworCQkJdGFncC0+dGFna2luZCA9IHAgKyA1OworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBwYyA9IHZpbV9zdHJjaHIocCwgJzonKTsKKwkJICAgIHB0ID0gdmltX3N0cmNocihwLCAnXHQnKTsKKwkJICAgIGlmIChwYyA9PSBOVUxMIHx8IChwdCAhPSBOVUxMICYmIHBjID4gcHQpKQorCQkgICAgeworCQkJdGFncC0+dGFna2luZCA9IHA7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIGlmIChwdCA9PSBOVUxMKQorCQkJYnJlYWs7CisJCSAgICBwID0gcHQgKyAxOworCQl9CisJfQorCWlmICh0YWdwLT50YWdraW5kICE9IE5VTEwpCisJeworCSAgICBmb3IgKHAgPSB0YWdwLT50YWdraW5kOworCQkJICAgICpwICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nOyArK3ApCisJCTsKKwkgICAgdGFncC0+dGFna2luZF9lbmQgPSBwOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEZpbmQgb3V0IHRoZSBhY3R1YWwgZmlsZSBuYW1lIG9mIGEgdGFnLiAgQ29uY2F0ZW5hdGUgdGhlIHRhZ3MgZmlsZSBuYW1lCisgKiB3aXRoIHRoZSBtYXRjaGluZyB0YWcgZmlsZSBuYW1lLgorICogUmV0dXJucyBhbiBhbGxvY2F0ZWQgc3RyaW5nIG9yIE5VTEwgKG91dCBvZiBtZW1vcnkpLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCit0YWdfZnVsbF9mbmFtZSh0YWdwKQorICAgIHRhZ3B0cnNfVAkqdGFncDsKK3sKKyAgICBjaGFyX3UJKmZ1bGxuYW1lOworICAgIGludAkJYzsKKworI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworICAgIGlmICh0YWdwLT5pc19ldGFnKQorCWMgPSAwOwkgICAgLyogdG8gc2h1dCB1cCBHQ0MgKi8KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJYyA9ICp0YWdwLT5mbmFtZV9lbmQ7CisJKnRhZ3AtPmZuYW1lX2VuZCA9IE5VTDsKKyAgICB9CisgICAgZnVsbG5hbWUgPSBleHBhbmRfdGFnX2ZuYW1lKHRhZ3AtPmZuYW1lLCB0YWdwLT50YWdfZm5hbWUsIEZBTFNFKTsKKworI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworICAgIGlmICghdGFncC0+aXNfZXRhZykKKyNlbmRpZgorCSp0YWdwLT5mbmFtZV9lbmQgPSBjOworCisgICAgcmV0dXJuIGZ1bGxuYW1lOworfQorCisvKgorICogSnVtcCB0byBhIHRhZyB0aGF0IGhhcyBiZWVuIGZvdW5kIGluIG9uZSBvZiB0aGUgdGFnIGZpbGVzCisgKgorICogcmV0dXJucyBPSyBmb3Igc3VjY2VzcywgTk9UQUdGSUxFIHdoZW4gZmlsZSBub3QgZm91bmQsIEZBSUwgb3RoZXJ3aXNlLgorICovCisgICAgc3RhdGljIGludAoranVtcHRvX3RhZyhsYnVmLCBmb3JjZWl0LCBrZWVwX2hlbHApCisgICAgY2hhcl91CSpsYnVmOwkJLyogbGluZSBmcm9tIHRoZSB0YWdzIGZpbGUgZm9yIHRoaXMgdGFnICovCisgICAgaW50CQlmb3JjZWl0OwkvKiA6dGEgd2l0aCAhICovCisgICAgaW50CQlrZWVwX2hlbHA7CS8qIGtlZXAgaGVscCBmbGFnIChGQUxTRSBmb3IgY3Njb3BlKSAqLworeworICAgIGludAkJc2F2ZV9zZWN1cmU7CisgICAgaW50CQlzYXZlX21hZ2ljOworICAgIGludAkJc2F2ZV9wX3dzLCBzYXZlX3Bfc2NzLCBzYXZlX3BfaWM7CisgICAgbGluZW5yX1QJc2F2ZV9sbnVtOworICAgIGludAkJY3NhdmUgPSAwOworICAgIGNoYXJfdQkqc3RyOworICAgIGNoYXJfdQkqcGJ1ZjsJCQkvKiBzZWFyY2ggcGF0dGVybiBidWZmZXIgKi8KKyAgICBjaGFyX3UJKnBidWZfZW5kOworICAgIGNoYXJfdQkqdG9mcmVlX2ZuYW1lID0gTlVMTDsKKyAgICBjaGFyX3UJKmZuYW1lOworICAgIHRhZ3B0cnNfVAl0YWdwOworICAgIGludAkJcmV0dmFsID0gRkFJTDsKKyAgICBpbnQJCWdldGZpbGVfcmVzdWx0OworICAgIGludAkJc2VhcmNoX29wdGlvbnM7CisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKyAgICBpbnQJCXNhdmVfbm9faGxzZWFyY2g7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorICAgIHdpbl9UCSpjdXJ3aW5fc2F2ZSA9IE5VTEw7CisjZW5kaWYKKyAgICBjaGFyX3UJKmZ1bGxfZm5hbWUgPSBOVUxMOworI2lmZGVmIEZFQVRfRk9MRElORworICAgIGludAkJb2xkX0tleVR5cGVkID0gS2V5VHlwZWQ7ICAgIC8qIGdldHRpbmcgdGhlIGZpbGUgbWF5IHJlc2V0IGl0ICovCisjZW5kaWYKKworICAgIHBidWYgPSBhbGxvYyhMU0laRSk7CisKKyAgICAvKiBwYXJzZSB0aGUgbWF0Y2ggbGluZSBpbnRvIHRoZSB0YWdwIHN0cnVjdHVyZSAqLworICAgIGlmIChwYnVmID09IE5VTEwgfHwgcGFyc2VfbWF0Y2gobGJ1ZiwgJnRhZ3ApID09IEZBSUwpCisgICAgeworCXRhZ3AuZm5hbWVfZW5kID0gTlVMTDsKKwlnb3RvIGVycmV0OworICAgIH0KKworICAgIC8qIHRydW5jYXRlIHRoZSBmaWxlIG5hbWUsIHNvIGl0IGNhbiBiZSB1c2VkIGFzIGEgc3RyaW5nICovCisgICAgY3NhdmUgPSAqdGFncC5mbmFtZV9lbmQ7CisgICAgKnRhZ3AuZm5hbWVfZW5kID0gTlVMOworICAgIGZuYW1lID0gdGFncC5mbmFtZTsKKworICAgIC8qIGNvcHkgdGhlIGNvbW1hbmQgdG8gcGJ1ZltdLCByZW1vdmUgdHJhaWxpbmcgQ1IvTkwgKi8KKyAgICBzdHIgPSB0YWdwLmNvbW1hbmQ7CisgICAgZm9yIChwYnVmX2VuZCA9IHBidWY7ICpzdHIgJiYgKnN0ciAhPSAnXG4nICYmICpzdHIgIT0gJ1xyJzsgKQorICAgIHsKKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKKwlpZiAodGFncC5pc19ldGFnICYmICpzdHIgPT0gJywnKS8qIHN0b3AgYXQgJywnIGFmdGVyIGxpbmUgbnVtYmVyICovCisJICAgIGJyZWFrOworI2VuZGlmCisJKnBidWZfZW5kKysgPSAqc3RyKys7CisgICAgfQorICAgICpwYnVmX2VuZCA9IE5VTDsKKworI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworICAgIGlmICghdGFncC5pc19ldGFnKQorI2VuZGlmCisgICAgeworCS8qCisJICogUmVtb3ZlIHRoZSAiPFRhYj5maWVsZG5hbWU6dmFsdWUiIHN0dWZmOyB3ZSBkb24ndCBuZWVkIGl0IGhlcmUuCisJICovCisJc3RyID0gcGJ1ZjsKKwlpZiAoZmluZF9leHRyYSgmc3RyKSA9PSBPSykKKwl7CisJICAgIHBidWZfZW5kID0gc3RyOworCSAgICAqcGJ1Zl9lbmQgPSBOVUw7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogRXhwYW5kIGZpbGUgbmFtZSwgd2hlbiBuZWVkZWQgKGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMpLgorICAgICAqIElmICd0YWdyZWxhdGl2ZScgb3B0aW9uIHNldCwgbWF5IGNoYW5nZSBmaWxlIG5hbWUuCisgICAgICovCisgICAgZm5hbWUgPSBleHBhbmRfdGFnX2ZuYW1lKGZuYW1lLCB0YWdwLnRhZ19mbmFtZSwgVFJVRSk7CisgICAgaWYgKGZuYW1lID09IE5VTEwpCisJZ290byBlcnJldDsKKyAgICB0b2ZyZWVfZm5hbWUgPSBmbmFtZTsJLyogZnJlZSgpIGl0IGxhdGVyICovCisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHRoZSBmaWxlIHdpdGggdGhlIHRhZyBleGlzdHMgYmVmb3JlIGFiYW5kb25pbmcgdGhlIGN1cnJlbnQKKyAgICAgKiBmaWxlLiAgQWxzbyBhY2NlcHQgYSBmaWxlIG5hbWUgZm9yIHdoaWNoIHRoZXJlIGlzIGEgbWF0Y2hpbmcgQnVmUmVhZENtZAorICAgICAqIGF1dG9jb21tYW5kIGV2ZW50IChlLmcuLCBodHRwOi8vc3lzL2ZpbGUpLgorICAgICAqLworICAgIGlmIChtY2hfZ2V0cGVybShmbmFtZSkgPCAwCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJICAgICYmICFoYXNfYXV0b2NtZChFVkVOVF9CVUZSRUFEQ01ELCBmbmFtZSkKKyNlbmRpZgorICAgICAgICkKKyAgICB7CisJcmV0dmFsID0gTk9UQUdGSUxFOworCXZpbV9mcmVlKG5vZmlsZV9mbmFtZSk7CisJbm9maWxlX2ZuYW1lID0gdmltX3N0cnNhdmUoZm5hbWUpOworCWlmIChub2ZpbGVfZm5hbWUgPT0gTlVMTCkKKwkgICAgbm9maWxlX2ZuYW1lID0gZW1wdHlfb3B0aW9uOworCWdvdG8gZXJyZXQ7CisgICAgfQorCisgICAgKytSZWRyYXdpbmdEaXNhYmxlZDsKKworI2lmZGVmIEZFQVRfR1VJCisgICAgbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKyAgICBpZiAoZ19kb190YWdwcmV2aWV3KQorICAgIHsKKwkvKiBkb24ndCBzcGxpdCBhZ2FpbiBiZWxvdyAqLworCXBvc3Rwb25lZF9zcGxpdCA9IDA7CisJLyogU2F2ZSBjdXJyZW50IHdpbmRvdyAqLworCWN1cndpbl9zYXZlID0gY3Vyd2luOworCS8qCisJICogSWYgd2UgYXJlIHJldXNpbmcgYSB3aW5kb3csIHdlIG1heSBjaGFuZ2UgZGlyIHdoZW4KKwkgKiBlbnRlcmluZyBpdCAoYXV0b2NvbW1hbmRzKSBzbyB0dXJuIHRoZSB0YWcgZmlsZW5hbWUKKwkgKiBpbnRvIGEgZnVsbHBhdGgKKwkgKi8KKwlpZiAoIWN1cndpbi0+d19wX3B2dykKKwl7CisJICAgIGZ1bGxfZm5hbWUgPSBGdWxsTmFtZV9zYXZlKGZuYW1lLCBGQUxTRSk7CisJICAgIGZuYW1lID0gZnVsbF9mbmFtZTsKKworCSAgICAvKgorCSAgICAgKiBNYWtlIHRoZSBwcmV2aWV3IHdpbmRvdyB0aGUgY3VycmVudCB3aW5kb3cuCisJICAgICAqIE9wZW4gYSBwcmV2aWV3IHdpbmRvdyB3aGVuIG5lZWRlZC4KKwkgICAgICovCisJICAgIHByZXBhcmVfdGFncHJldmlldygpOworCX0KKyAgICB9CisKKyAgICAvKiBpZiBpdCB3YXMgYSBDVFJMLVcgQ1RSTC1dIGNvbW1hbmQgc3BsaXQgd2luZG93IG5vdyAqLworICAgIGlmIChwb3N0cG9uZWRfc3BsaXQpCisgICAgeworCXdpbl9zcGxpdChwb3N0cG9uZWRfc3BsaXQgPiAwID8gcG9zdHBvbmVkX3NwbGl0IDogMCwKKwkJCQkJCSAgICAgICBwb3N0cG9uZWRfc3BsaXRfZmxhZ3MpOworIyBpZmRlZiBGRUFUX1NDUk9MTEJJTkQKKwljdXJ3aW4tPndfcF9zY2IgPSBGQUxTRTsKKyMgZW5kaWYKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChrZWVwX2hlbHApCisgICAgeworCS8qIEEgOnRhIGZyb20gYSBoZWxwIGZpbGUgd2lsbCBrZWVwIHRoZSBiX2hlbHAgZmxhZyBzZXQuICBGb3IgIjpwdGFnIgorCSAqIHdlIG5lZWQgdG8gdXNlIHRoZSBmbGFnIGZyb20gdGhlIHdpbmRvdyB3aGVyZSB3ZSBjYW1lIGZyb20uICovCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKwlpZiAoZ19kb190YWdwcmV2aWV3KQorCSAgICBrZWVwX2hlbHBfZmxhZyA9IGN1cndpbl9zYXZlLT53X2J1ZmZlci0+Yl9oZWxwOworCWVsc2UKKyNlbmRpZgorCSAgICBrZWVwX2hlbHBfZmxhZyA9IGN1cmJ1Zi0+Yl9oZWxwOworICAgIH0KKyAgICBnZXRmaWxlX3Jlc3VsdCA9IGdldGZpbGUoMCwgZm5hbWUsIE5VTEwsIFRSVUUsIChsaW5lbnJfVCkwLCBmb3JjZWl0KTsKKyAgICBrZWVwX2hlbHBfZmxhZyA9IEZBTFNFOworCisgICAgaWYgKGdldGZpbGVfcmVzdWx0IDw9IDApCQkvKiBnb3QgdG8gdGhlIHJpZ2h0IGZpbGUgKi8KKyAgICB7CisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJcG9zdHBvbmVkX3NwbGl0ID0gMDsKKyNlbmRpZgorCisJc2F2ZV9zZWN1cmUgPSBzZWN1cmU7CisJc2VjdXJlID0gMTsKKyNpZmRlZiBIQVZFX1NBTkRCT1gKKwkrK3NhbmRib3g7CisjZW5kaWYKKwlzYXZlX21hZ2ljID0gcF9tYWdpYzsKKwlwX21hZ2ljID0gRkFMU0U7CS8qIGFsd2F5cyBleGVjdXRlIHdpdGggJ25vbWFnaWMnICovCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKwkvKiBTYXZlIHZhbHVlIG9mIG5vX2hsc2VhcmNoLCBqdW1waW5nIHRvIGEgdGFnIGlzIG5vdCBhIHJlYWwgc2VhcmNoICovCisJc2F2ZV9ub19obHNlYXJjaCA9IG5vX2hsc2VhcmNoOworI2VuZGlmCisKKwkvKgorCSAqIElmICdjcG9wdGlvbnMnIGNvbnRhaW5zICd0Jywgc3RvcmUgdGhlIHNlYXJjaCBwYXR0ZXJuIGZvciB0aGUgIm4iCisJICogY29tbWFuZC4gIElmICdjcG9wdGlvbnMnIGRvZXMgbm90IGNvbnRhaW4gJ3QnLCB0aGUgc2VhcmNoIHBhdHRlcm4KKwkgKiBpcyBub3Qgc3RvcmVkLgorCSAqLworCWlmICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fVEFHUEFUKSAhPSBOVUxMKQorCSAgICBzZWFyY2hfb3B0aW9ucyA9IDA7CisJZWxzZQorCSAgICBzZWFyY2hfb3B0aW9ucyA9IFNFQVJDSF9LRUVQOworCisJLyoKKwkgKiBJZiB0aGUgY29tbWFuZCBpcyBhIHNlYXJjaCwgdHJ5IGhlcmUuCisJICoKKwkgKiBSZXNldCAnc21hcnRjYXNlJyBmb3IgdGhlIHNlYXJjaCwgc2luY2UgdGhlIHNlYXJjaCBwYXR0ZXJuIHdhcyBub3QKKwkgKiB0eXBlZCBieSB0aGUgdXNlci4KKwkgKiBPbmx5IHVzZSBkb19zZWFyY2goKSB3aGVuIHRoZXJlIGlzIGEgZnVsbCBzZWFyY2ggY29tbWFuZCwgd2l0aG91dAorCSAqIGFueXRoaW5nIGZvbGxvd2luZy4KKwkgKi8KKwlzdHIgPSBwYnVmOworCWlmIChwYnVmWzBdID09ICcvJyB8fCBwYnVmWzBdID09ICc/JykKKwkgICAgc3RyID0gc2tpcF9yZWdleHAocGJ1ZiArIDEsIHBidWZbMF0sIEZBTFNFLCBOVUxMKSArIDE7CisJaWYgKHN0ciA+IHBidWZfZW5kIC0gMSkJLyogc2VhcmNoIGNvbW1hbmQgd2l0aCBub3RoaW5nIGZvbGxvd2luZyAqLworCXsKKwkgICAgc2F2ZV9wX3dzID0gcF93czsKKwkgICAgc2F2ZV9wX2ljID0gcF9pYzsKKwkgICAgc2F2ZV9wX3NjcyA9IHBfc2NzOworCSAgICBwX3dzID0gVFJVRTsJLyogbmVlZCAnd3JhcHNjYW4nIGZvciBiYWNrd2FyZCBzZWFyY2hlcyAqLworCSAgICBwX2ljID0gRkFMU0U7CS8qIGRvbid0IGlnbm9yZSBjYXNlIG5vdyAqLworCSAgICBwX3NjcyA9IEZBTFNFOworI2lmIDAJLyogZGlzYWJsZWQgZm9yIG5vdyAqLworI2lmZGVmIEZFQVRfQ01ESElTVAorCSAgICAvKiBwdXQgcGF0dGVybiBpbiBzZWFyY2ggaGlzdG9yeSAqLworCSAgICBhZGRfdG9faGlzdG9yeShISVNUX1NFQVJDSCwgcGJ1ZiArIDEsIFRSVUUsIHBidWZbMF0pOworI2VuZGlmCisjZW5kaWYKKwkgICAgc2F2ZV9sbnVtID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSAwOwkvKiBzdGFydCBzZWFyY2ggYmVmb3JlIGZpcnN0IGxpbmUgKi8KKwkgICAgaWYgKGRvX3NlYXJjaChOVUxMLCBwYnVmWzBdLCBwYnVmICsgMSwgKGxvbmcpMSwgc2VhcmNoX29wdGlvbnMpKQorCQlyZXR2YWwgPSBPSzsKKwkgICAgZWxzZQorCSAgICB7CisJCWludAlmb3VuZCA9IDE7CisJCWludAljYzsKKworCQkvKgorCQkgKiB0cnkgYWdhaW4sIGlnbm9yZSBjYXNlIG5vdworCQkgKi8KKwkJcF9pYyA9IFRSVUU7CisJCWlmICghZG9fc2VhcmNoKE5VTEwsIHBidWZbMF0sIHBidWYgKyAxLCAobG9uZykxLAorCQkJCQkJCSAgICAgIHNlYXJjaF9vcHRpb25zKSkKKwkJeworCQkgICAgLyoKKwkJICAgICAqIEZhaWxlZCB0byBmaW5kIHBhdHRlcm4sIHRha2UgYSBndWVzczogIl5mdW5jICAoIgorCQkgICAgICovCisJCSAgICBmb3VuZCA9IDI7CisJCSAgICAodm9pZCl0ZXN0X2Zvcl9zdGF0aWMoJnRhZ3ApOworCQkgICAgY2MgPSAqdGFncC50YWduYW1lX2VuZDsKKwkJICAgICp0YWdwLnRhZ25hbWVfZW5kID0gTlVMOworCQkgICAgc3ByaW50ZigoY2hhciAqKXBidWYsICJeJXNcXHNcXCooIiwgdGFncC50YWduYW1lKTsKKwkJICAgIGlmICghZG9fc2VhcmNoKE5VTEwsICcvJywgcGJ1ZiwgKGxvbmcpMSwgc2VhcmNoX29wdGlvbnMpKQorCQkgICAgeworCQkJLyogR3Vlc3MgYWdhaW46ICJeY2hhciAqIFw8ZnVuYyAgKCIgKi8KKwkJCXNwcmludGYoKGNoYXIgKilwYnVmLCAiXlxcWyNhLXpBLVpfXVxcLlxcKlxcPCVzXFxzXFwqKCIsCisJCQkJCQkJCXRhZ3AudGFnbmFtZSk7CisJCQlpZiAoIWRvX3NlYXJjaChOVUxMLCAnLycsIHBidWYsIChsb25nKTEsCisJCQkJCQkJICAgICAgc2VhcmNoX29wdGlvbnMpKQorCQkJICAgIGZvdW5kID0gMDsKKwkJICAgIH0KKwkJICAgICp0YWdwLnRhZ25hbWVfZW5kID0gY2M7CisJCX0KKwkJaWYgKGZvdW5kID09IDApCisJCXsKKwkJICAgIEVNU0coXygiRTQzNDogQ2FuJ3QgZmluZCB0YWcgcGF0dGVybiIpKTsKKwkJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IHNhdmVfbG51bTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIC8qCisJCSAgICAgKiBPbmx5IGdpdmUgYSBtZXNzYWdlIHdoZW4gcmVhbGx5IGd1ZXNzZWQsIG5vdCB3aGVuICdpYycKKwkJICAgICAqIGlzIHNldCBhbmQgbWF0Y2ggZm91bmQgd2hpbGUgaWdub3JpbmcgY2FzZS4KKwkJICAgICAqLworCQkgICAgaWYgKGZvdW5kID09IDIgfHwgIXNhdmVfcF9pYykKKwkJICAgIHsKKwkJCU1TRyhfKCJFNDM1OiBDb3VsZG4ndCBmaW5kIHRhZywganVzdCBndWVzc2luZyEiKSk7CisJCQlpZiAoIW1zZ19zY3JvbGxlZCAmJiBtc2dfc2lsZW50ID09IDApCisJCQl7CisJCQkgICAgb3V0X2ZsdXNoKCk7CisJCQkgICAgdWlfZGVsYXkoMTAwMEwsIFRSVUUpOworCQkJfQorCQkgICAgfQorCQkgICAgcmV0dmFsID0gT0s7CisJCX0KKwkgICAgfQorCSAgICBwX3dzID0gc2F2ZV9wX3dzOworCSAgICBwX2ljID0gc2F2ZV9wX2ljOworCSAgICBwX3NjcyA9IHNhdmVfcF9zY3M7CisKKwkgICAgLyogQSBzZWFyY2ggY29tbWFuZCBtYXkgaGF2ZSBwb3NpdGlvbmVkIHRoZSBjdXJzb3IgYmV5b25kIHRoZSBlbmQKKwkgICAgICogb2YgdGhlIGxpbmUuICBNYXkgbmVlZCB0byBjb3JyZWN0IHRoYXQgaGVyZS4gKi8KKwkgICAgY2hlY2tfY3Vyc29yKCk7CisJfQorCWVsc2UKKwl7CisJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IDE7CQkvKiBzdGFydCBjb21tYW5kIGluIGxpbmUgMSAqLworCSAgICBkb19jbWRsaW5lX2NtZChwYnVmKTsKKwkgICAgcmV0dmFsID0gT0s7CisJfQorCisJLyoKKwkgKiBXaGVuIHRoZSBjb21tYW5kIGhhcyBkb25lIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhbGxvd2VkIG1ha2Ugc3VyZQorCSAqIHRoZSBlcnJvciBtZXNzYWdlIGNhbiBiZSBzZWVuLgorCSAqLworCWlmIChzZWN1cmUgPT0gMikKKwkgICAgd2FpdF9yZXR1cm4oVFJVRSk7CisJc2VjdXJlID0gc2F2ZV9zZWN1cmU7CisJcF9tYWdpYyA9IHNhdmVfbWFnaWM7CisjaWZkZWYgSEFWRV9TQU5EQk9YCisJLS1zYW5kYm94OworI2VuZGlmCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKwkvKiByZXN0b3JlIG5vX2hsc2VhcmNoIHdoZW4ga2VlcGluZyB0aGUgb2xkIHNlYXJjaCBwYXR0ZXJuICovCisJaWYgKHNlYXJjaF9vcHRpb25zKQorCSAgICBub19obHNlYXJjaCA9IHNhdmVfbm9faGxzZWFyY2g7CisjZW5kaWYKKworCS8qIFJldHVybiBPSyBpZiBqdW1wZWQgdG8gYW5vdGhlciBmaWxlIChhdCBsZWFzdCB3ZSBmb3VuZCB0aGUgZmlsZSEpLiAqLworCWlmIChnZXRmaWxlX3Jlc3VsdCA9PSAtMSkKKwkgICAgcmV0dmFsID0gT0s7CisKKwlpZiAocmV0dmFsID09IE9LKQorCXsKKwkgICAgLyoKKwkgICAgICogRm9yIGEgaGVscCBidWZmZXI6IFB1dCB0aGUgY3Vyc29yIGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgd2luZG93LAorCSAgICAgKiB0aGUgaGVscCBzdWJqZWN0IHdpbGwgYmUgYmVsb3cgaXQuCisJICAgICAqLworCSAgICBpZiAoY3VyYnVmLT5iX2hlbHApCisJCXNldF90b3BsaW5lKGN1cndpbiwgY3Vyd2luLT53X2N1cnNvci5sbnVtKTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkgICAgaWYgKChmZG9fZmxhZ3MgJiBGRE9fVEFHKSAmJiBvbGRfS2V5VHlwZWQpCisJCWZvbGRPcGVuQ3Vyc29yKCk7CisjZW5kaWYKKwl9CisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgJiYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCWlmIChnX2RvX3RhZ3ByZXZpZXcgJiYgY3Vyd2luICE9IGN1cndpbl9zYXZlICYmIHdpbl92YWxpZChjdXJ3aW5fc2F2ZSkpCisJeworCSAgICAvKiBSZXR1cm4gY3Vyc29yIHRvIHdoZXJlIHdlIHdlcmUgKi8KKwkgICAgdmFsaWRhdGVfY3Vyc29yKCk7CisJICAgIHJlZHJhd19sYXRlcihWQUxJRCk7CisJICAgIHdpbl9lbnRlcihjdXJ3aW5fc2F2ZSwgVFJVRSk7CisJfQorI2VuZGlmCisKKwktLVJlZHJhd2luZ0Rpc2FibGVkOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS0tUmVkcmF3aW5nRGlzYWJsZWQ7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJaWYgKHBvc3Rwb25lZF9zcGxpdCkJCS8qIGNsb3NlIHRoZSB3aW5kb3cgKi8KKwl7CisJICAgIHdpbl9jbG9zZShjdXJ3aW4sIEZBTFNFKTsKKwkgICAgcG9zdHBvbmVkX3NwbGl0ID0gMDsKKwl9CisjZW5kaWYKKyAgICB9CisKK2VycmV0OgorI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSAmJiBkZWZpbmVkKEZFQVRfUVVJQ0tGSVgpCisgICAgZ19kb190YWdwcmV2aWV3ID0gMDsgLyogRm9yIG5leHQgdGltZSAqLworI2VuZGlmCisgICAgaWYgKHRhZ3AuZm5hbWVfZW5kICE9IE5VTEwpCisJKnRhZ3AuZm5hbWVfZW5kID0gY3NhdmU7CisgICAgdmltX2ZyZWUocGJ1Zik7CisgICAgdmltX2ZyZWUodG9mcmVlX2ZuYW1lKTsKKyAgICB2aW1fZnJlZShmdWxsX2ZuYW1lKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBJZiAiZXhwYW5kIiBpcyBUUlVFLCBleHBhbmQgd2lsZGNhcmRzIGluIGZuYW1lLgorICogSWYgJ3RhZ3JlbGF0aXZlJyBvcHRpb24gc2V0LCBjaGFuZ2UgZm5hbWUgKG5hbWUgb2YgZmlsZSBjb250YWluaW5nIHRhZykKKyAqIGFjY29yZGluZyB0byB0YWdfZm5hbWUgKG5hbWUgb2YgdGFnIGZpbGUgY29udGFpbmluZyBmbmFtZSkuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IChvciBOVUxMIHdoZW4gb3V0IG9mIG1lbW9yeSkuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK2V4cGFuZF90YWdfZm5hbWUoZm5hbWUsIHRhZ19mbmFtZSwgZXhwYW5kKQorICAgIGNoYXJfdQkqZm5hbWU7CisgICAgY2hhcl91CSp0YWdfZm5hbWU7CisgICAgaW50CQlleHBhbmQ7Cit7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqcmV0dmFsOworICAgIGNoYXJfdQkqZXhwYW5kZWRfZm5hbWUgPSBOVUxMOworICAgIGV4cGFuZF9UCXhwYzsKKworICAgIC8qCisgICAgICogRXhwYW5kIGZpbGUgbmFtZSAoZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcykgd2hlbiBuZWVkZWQuCisgICAgICovCisgICAgaWYgKGV4cGFuZCAmJiBtY2hfaGFzX3dpbGRjYXJkKGZuYW1lKSkKKyAgICB7CisJRXhwYW5kSW5pdCgmeHBjKTsKKwl4cGMueHBfY29udGV4dCA9IEVYUEFORF9GSUxFUzsKKwlleHBhbmRlZF9mbmFtZSA9IEV4cGFuZE9uZSgmeHBjLCAoY2hhcl91ICopZm5hbWUsIE5VTEwsCisJCQkgICAgV0lMRF9MSVNUX05PVEZPVU5EfFdJTERfU0lMRU5ULCBXSUxEX0VYUEFORF9GUkVFKTsKKwlFeHBhbmRDbGVhbnVwKCZ4cGMpOworCWlmIChleHBhbmRlZF9mbmFtZSAhPSBOVUxMKQorCSAgICBmbmFtZSA9IGV4cGFuZGVkX2ZuYW1lOworICAgIH0KKworICAgIGlmICgocF90ciB8fCBjdXJidWYtPmJfaGVscCkKKwkgICAgJiYgIXZpbV9pc0Fic05hbWUoZm5hbWUpCisJICAgICYmIChwID0gZ2V0dGFpbCh0YWdfZm5hbWUpKSAhPSB0YWdfZm5hbWUpCisgICAgeworCXJldHZhbCA9IGFsbG9jKE1BWFBBVEhMKTsKKwlpZiAocmV0dmFsICE9IE5VTEwpCisJeworCSAgICBTVFJDUFkocmV0dmFsLCB0YWdfZm5hbWUpOworCSAgICBTVFJOQ1BZKHJldHZhbCArIChwIC0gdGFnX2ZuYW1lKSwgZm5hbWUsCisJCQkJCQkgIE1BWFBBVEhMIC0gKHAgLSB0YWdfZm5hbWUpKTsKKwkgICAgLyoKKwkgICAgICogVHJhbnNsYXRlIG5hbWVzIGxpa2UgInNyYy9hLy4uL2IvZmlsZS5jIiBpbnRvICJzcmMvYi9maWxlLmMiLgorCSAgICAgKi8KKwkgICAgc2ltcGxpZnlfZmlsZW5hbWUocmV0dmFsKTsKKwl9CisgICAgfQorICAgIGVsc2UKKwlyZXR2YWwgPSB2aW1fc3Ryc2F2ZShmbmFtZSk7CisKKyAgICB2aW1fZnJlZShleHBhbmRlZF9mbmFtZSk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogTW92ZXMgdGhlIHRhaWwgcGFydCBvZiB0aGUgcGF0aCAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUwpIHBvaW50ZWQgdG8KKyAqIGJ5ICJ0YWlsIiB0byB0aGUgbmV3IGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgImhlcmUiLiBUaGlzIHNob3VsZCBhY2NvbW9kYXRlCisgKiBhbiBvdmVybGFwcGluZyBtb3ZlLgorICovCisjZGVmaW5lIG1vdmV0YWlsKGhlcmUsIHRhaWwpICBtY2hfbWVtbW92ZShoZXJlLCB0YWlsLCBTVFJMRU4odGFpbCkgKyAoc2l6ZV90KTEpCisKKy8qCisgKiBDb252ZXJ0cyBhIGZpbGUgbmFtZSBpbnRvIGEgY2Fub25pY2FsIGZvcm0uIEl0IHNpbXBsaWZpZXMgYSBmaWxlIG5hbWUgaW50bworICogaXRzIHNpbXBsZXN0IGZvcm0gYnkgc3RyaXBwaW5nIG91dCB1bm5lZWRlZCBjb21wb25lbnRzLCBpZiBhbnkuICBUaGUKKyAqIHJlc3VsdGluZyBmaWxlIG5hbWUgaXMgc2ltcGxpZmllZCBpbiBwbGFjZSBhbmQgd2lsbCBlaXRoZXIgYmUgdGhlIHNhbWUKKyAqIGxlbmd0aCBhcyB0aGF0IHN1cHBsaWVkLCBvciBzaG9ydGVyLgorICovCisgICAgdm9pZAorc2ltcGxpZnlfZmlsZW5hbWUoZmlsZW5hbWUpCisgICAgY2hhcl91CSpmaWxlbmFtZTsKK3sKKyNpZm5kZWYgQU1JR0EJICAgIC8qIEFtaWdhIGRvZXNuJ3QgaGF2ZSAiLi4iLCBpdCB1c2VzICIvIiAqLworICAgIGludAkJY29tcG9uZW50cyA9IDA7CisgICAgY2hhcl91CSpwLCAqdGFpbCwgKnN0YXJ0OworICAgIGludAkJc3RyaXBwaW5nX2Rpc2FibGVkID0gRkFMU0U7CisgICAgaW50CQlyZWxhdGl2ZSA9IFRSVUU7CisKKyAgICBwID0gZmlsZW5hbWU7CisjaWZkZWYgQkFDS1NMQVNIX0lOX0ZJTEVOQU1FCisgICAgaWYgKHBbMV0gPT0gJzonKQkgICAgLyogc2tpcCAieDoiICovCisJcCArPSAyOworI2VuZGlmCisKKyAgICBpZiAodmltX2lzcGF0aHNlcCgqcCkpCisgICAgeworCXJlbGF0aXZlID0gRkFMU0U7CisJZG8KKwkgICAgKytwOworCXdoaWxlICh2aW1faXNwYXRoc2VwKCpwKSk7CisgICAgfQorICAgIHN0YXJ0ID0gcDsJICAgIC8qIHJlbWVtYmVyIHN0YXJ0IGFmdGVyICJjOi8iIG9yICIvIiBvciAiLy8vIiAqLworCisgICAgZG8KKyAgICB7CisJLyogQXQgdGhpcyBwb2ludCAicCIgaXMgcG9pbnRpbmcgdG8gdGhlIGNoYXIgZm9sbG93aW5nIGEgc2luZ2xlICIvIgorCSAqIG9yICJwIiBpcyBhdCB0aGUgInN0YXJ0IiBvZiB0aGUgKGFic29sdXRlIG9yIHJlbGF0aXZlKSBwYXRoIG5hbWUuICovCisjaWZkZWYgVk1TCisJLyogVk1TIGFsbG93cyBkZXZpY2U6W3BhdGhdIC0gZG9uJ3Qgc3RyaXAgdGhlIFsgaW4gZGlyZWN0b3J5ICAqLworCWlmICgoKnAgPT0gJ1snIHx8ICpwID09ICc8JykgJiYgcCA+IGZpbGVuYW1lICYmIHBbLTFdID09ICc6JykKKwl7CisJICAgIC8qIDpbIG9yIDo8IGNvbXBvc2l0aW9uOiB2bXMgZGlyZWN0b3J5IGNvbXBvbmVudCAqLworCSAgICArK2NvbXBvbmVudHM7CisJICAgIHAgPSBnZXRuZXh0Y29tcChwICsgMSk7CisJfQorCS8qIGFsbG93IHJlbW90ZSBjYWxscyBhcyBob3N0InVzZXIgcGFzc3dkIjo6ZGV2aWNlOltwYXRoXSAqLworCWVsc2UgaWYgKHBbMF0gPT0gJzonICYmIHBbMV0gPT0gJzonICYmIHAgPiBmaWxlbmFtZSAmJiBwWy0xXSA9PSAnIicgKQorCXsKKwkgICAgLyogIjo6IGNvbXBvc2l0aW9uOiB2bXMgaG9zdC9wYXNzd2QgY29tcG9uZW50ICovCisJICAgICsrY29tcG9uZW50czsKKwkgICAgcCA9IGdldG5leHRjb21wKHAgKyAyKTsKKwl9CisJZWxzZQorI2VuZGlmCisJICBpZiAodmltX2lzcGF0aHNlcCgqcCkpCisJICAgIG1vdmV0YWlsKHAsIHAgKyAxKTsJCS8qIHJlbW92ZSBkdXBsaWNhdGUgIi8iICovCisJZWxzZSBpZiAocFswXSA9PSAnLicgJiYgKHZpbV9pc3BhdGhzZXAocFsxXSkgfHwgcFsxXSA9PSBOVUwpKQorCXsKKwkgICAgaWYgKHAgPT0gc3RhcnQgJiYgcmVsYXRpdmUpCisJCXAgKz0gMSArIChwWzFdICE9IE5VTCk7CS8qIGtlZXAgc2luZ2xlICIuIiBvciBsZWFkaW5nICIuLyIgKi8KKwkgICAgZWxzZQorCSAgICB7CisJCS8qIFN0cmlwICIuLyIgb3IgIi4vLy8iLiAgSWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgbmFtZQorCQkgKiBhbmQgdGhlcmUgaXMgbm8gdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IsIGVpdGhlciBzdHJpcCAiLy4iIGlmCisJCSAqIHdlIGFyZSBhZnRlciAic3RhcnQiLCBvciBzdHJpcCAiLiIgaWYgd2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcKKwkJICogb2YgYW4gYWJzb2x1dGUgcGF0aCBuYW1lIC4gKi8KKwkJdGFpbCA9IHAgKyAxOworCQlpZiAocFsxXSAhPSBOVUwpCisJCSAgICB3aGlsZSAodmltX2lzcGF0aHNlcCgqdGFpbCkpCisJCQkrK3RhaWw7CisJCWVsc2UgaWYgKHAgPiBzdGFydCkKKwkJICAgIC0tcDsJCS8qIHN0cmlwIHByZWNlZGluZyBwYXRoIHNlcGFyYXRvciAqLworCQltb3ZldGFpbChwLCB0YWlsKTsKKwkgICAgfQorCX0KKwllbHNlIGlmIChwWzBdID09ICcuJyAmJiBwWzFdID09ICcuJyAmJgorCSAgICAodmltX2lzcGF0aHNlcChwWzJdKSB8fCBwWzJdID09IE5VTCkpCisJeworCSAgICAvKiBTa2lwIHRvIGFmdGVyICIuLiIgb3IgIi4uLyIgb3IgIi4uLy8vIi4gKi8KKwkgICAgdGFpbCA9IHAgKyAyOworCSAgICB3aGlsZSAodmltX2lzcGF0aHNlcCgqdGFpbCkpCisJCSsrdGFpbDsKKworCSAgICBpZiAoY29tcG9uZW50cyA+IDApCQkvKiBzdHJpcCBvbmUgcHJlY2VkaW5nIGNvbXBvbmVudCAqLworCSAgICB7CisJCWludAkJZG9fc3RyaXAgPSBGQUxTRTsKKwkJY2hhcl91CQlzYXZlZF9jaGFyOworCQlzdHJ1Y3Qgc3RhdAlzdDsKKworCQkvKiBEb24ndCBzdHJpcCBmb3IgYW4gZXJyb25lb3VzIGZpbGUgbmFtZS4gKi8KKwkJaWYgKCFzdHJpcHBpbmdfZGlzYWJsZWQpCisJCXsKKwkJICAgIC8qIElmIHRoZSBwcmVjZWRpbmcgY29tcG9uZW50IGRvZXMgbm90IGV4aXN0IGluIHRoZSBmaWxlCisJCSAgICAgKiBzeXN0ZW0sIHdlIHN0cmlwIGl0LiAgT24gVW5peCwgd2UgZG9uJ3QgYWNjZXB0IGEgc3ltYm9saWMKKwkJICAgICAqIGxpbmsgdGhhdCByZWZlcnMgdG8gYSBub24tZXhpc3RlbnQgZmlsZS4gKi8KKwkJICAgIHNhdmVkX2NoYXIgPSBwWy0xXTsKKwkJICAgIHBbLTFdID0gTlVMOworI2lmZGVmIFVOSVgKKwkJICAgIGlmIChtY2hfbHN0YXQoKGNoYXIgKilmaWxlbmFtZSwgJnN0KSA8IDApCisjZWxzZQorCQkJaWYgKG1jaF9zdGF0KChjaGFyICopZmlsZW5hbWUsICZzdCkgPCAwKQorI2VuZGlmCisJCQkgICAgZG9fc3RyaXAgPSBUUlVFOworCQkgICAgcFstMV0gPSBzYXZlZF9jaGFyOworCisJCSAgICAtLXA7CisJCSAgICAvKiBTa2lwIGJhY2sgdG8gYWZ0ZXIgcHJldmlvdXMgJy8nLiAqLworCQkgICAgd2hpbGUgKHAgPiBzdGFydCAmJiAhdmltX2lzcGF0aHNlcChwWy0xXSkpCisJCQktLXA7CisKKwkJICAgIGlmICghZG9fc3RyaXApCisJCSAgICB7CisJCQkvKiBJZiB0aGUgY29tcG9uZW50IGV4aXN0cyBpbiB0aGUgZmlsZSBzeXN0ZW0sIGNoZWNrCisJCQkgKiB0aGF0IHN0cmlwcGluZyBpdCB3b24ndCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlCisJCQkgKiBmaWxlIG5hbWUuICBGaXJzdCBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisJCQkgKiB1bnN0cmlwcGVkIGZpbGUgbmFtZS4gIFRoaXMgbWF5IGZhaWwgaWYgdGhlIGNvbXBvbmVudAorCQkJICogdG8gc3RyaXAgaXMgbm90IGEgc2VhcmNoYWJsZSBkaXJlY3RvcnkgKGJ1dCBhIHJlZ3VsYXIKKwkJCSAqIGZpbGUsIGZvciBpbnN0YW5jZSksIHNpbmNlIHRoZSB0cmFpbGluZyAiLy4uIiBjYW5ub3QKKwkJCSAqIGJlIGFwcGxpZWQgdGhlbi4gIFdlIGRvbid0IHN0cmlwIGl0IHRoZW4gc2luY2Ugd2UKKwkJCSAqIGRvbid0IHdhbnQgdG8gcmVwbGFjZSBhbiBlcnJvbmVvdXMgZmlsZSBuYW1lIGJ5CisJCQkgKiBhIHZhbGlkIG9uZSwgYW5kIHdlIGRpc2FibGUgc3RyaXBwaW5nIG9mIGxhdGVyCisJCQkgKiBjb21wb25lbnRzLiAqLworCQkJc2F2ZWRfY2hhciA9ICp0YWlsOworCQkJKnRhaWwgPSBOVUw7CisJCQlpZiAobWNoX3N0YXQoKGNoYXIgKilmaWxlbmFtZSwgJnN0KSA+PSAwKQorCQkJICAgIGRvX3N0cmlwID0gVFJVRTsKKwkJCWVsc2UKKwkJCSAgICBzdHJpcHBpbmdfZGlzYWJsZWQgPSBUUlVFOworCQkJKnRhaWwgPSBzYXZlZF9jaGFyOworI2lmZGVmIFVOSVgKKwkJCWlmIChkb19zdHJpcCkKKwkJCXsKKwkJCSAgICBzdHJ1Y3Qgc3RhdAluZXdfc3Q7CisKKwkJCSAgICAvKiBPbiBVbml4LCB0aGUgY2hlY2sgZm9yIHRoZSB1bnN0cmlwcGVkIGZpbGUgbmFtZQorCQkJICAgICAqIGFib3ZlIHdvcmtzIGFsc28gZm9yIGEgc3ltYm9saWMgbGluayBwb2ludGluZyB0bworCQkJICAgICAqIGEgc2VhcmNoYWJsZSBkaXJlY3RvcnkuICBCdXQgdGhlbiB0aGUgcGFyZW50IG9mCisJCQkgICAgICogdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZSBsaW5rIG11c3QgYmUgdGhlCisJCQkgICAgICogc2FtZSBhcyB0aGUgc3RyaXBwZWQgZmlsZSBuYW1lLiAgKFRoZSBsYXR0ZXIKKwkJCSAgICAgKiBleGlzdHMgaW4gdGhlIGZpbGUgc3lzdGVtIHNpbmNlIGl0IGlzIHRoZQorCQkJICAgICAqIGNvbXBvbmVudCdzIHBhcmVudCBkaXJlY3RvcnkuKSAqLworCQkJICAgIGlmIChwID09IHN0YXJ0ICYmIHJlbGF0aXZlKQorCQkJCSh2b2lkKW1jaF9zdGF0KCIuIiwgJm5ld19zdCk7CisJCQkgICAgZWxzZQorCQkJICAgIHsKKwkJCQlzYXZlZF9jaGFyID0gKnA7CisJCQkJKnAgPSBOVUw7CisJCQkJKHZvaWQpbWNoX3N0YXQoKGNoYXIgKilmaWxlbmFtZSwgJm5ld19zdCk7CisJCQkJKnAgPSBzYXZlZF9jaGFyOworCQkJICAgIH0KKworCQkJICAgIGlmIChuZXdfc3Quc3RfaW5vICE9IHN0LnN0X2lubyB8fAorCQkJCW5ld19zdC5zdF9kZXYgIT0gc3Quc3RfZGV2KQorCQkJICAgIHsKKwkJCQlkb19zdHJpcCA9IEZBTFNFOworCQkJCS8qIFdlIGRvbid0IGRpc2FibGUgc3RyaXBwaW5nIG9mIGxhdGVyCisJCQkJICogY29tcG9uZW50cyBzaW5jZSB0aGUgdW5zdHJpcHBlZCBwYXRoIG5hbWUgaXMKKwkJCQkgKiBzdGlsbCB2YWxpZC4gKi8KKwkJCSAgICB9CisJCQl9CisjZW5kaWYKKwkJICAgIH0KKwkJfQorCisJCWlmICghZG9fc3RyaXApCisJCXsKKwkJICAgIC8qIFNraXAgdGhlICIuLiIgb3IgIi4uLyIgYW5kIHJlc2V0IHRoZSBjb3VudGVyIGZvciB0aGUKKwkJICAgICAqIGNvbXBvbmVudHMgdGhhdCBtaWdodCBiZSBzdHJpcHBlZCBsYXRlciBvbi4gKi8KKwkJICAgIHAgPSB0YWlsOworCQkgICAgY29tcG9uZW50cyA9IDA7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICAvKiBTdHJpcCBwcmV2aW91cyBjb21wb25lbnQuICBJZiB0aGUgcmVzdWx0IHdvdWxkIGdldCBlbXB0eQorCQkgICAgICogYW5kIHRoZXJlIGlzIG5vIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yLCBsZWF2ZSBhIHNpbmdsZQorCQkgICAgICogIi4iIGluc3RlYWQuICBJZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBuYW1lIGFuZAorCQkgICAgICogdGhlcmUgaXMgbm8gdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgYW5kIGEgcHJlY2VkaW5nCisJCSAgICAgKiBjb21wb25lbnQgaXMgbGVmdCBhZnRlciBzdHJpcHBpbmcsIHN0cmlwIGl0cyB0cmFpbGluZworCQkgICAgICogcGF0aCBzZXBhcmF0b3IgYXMgd2VsbC4gKi8KKwkJICAgIGlmIChwID09IHN0YXJ0ICYmIHJlbGF0aXZlICYmIHRhaWxbLTFdID09ICcuJykKKwkJICAgIHsKKwkJCSpwKysgPSAnLic7CisJCQkqcCA9IE5VTDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWlmIChwID4gc3RhcnQgJiYgdGFpbFstMV0gPT0gJy4nKQorCQkJICAgIC0tcDsKKwkJCW1vdmV0YWlsKHAsIHRhaWwpOwkvKiBzdHJpcCBwcmV2aW91cyBjb21wb25lbnQgKi8KKwkJICAgIH0KKworCQkgICAgLS1jb21wb25lbnRzOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAocCA9PSBzdGFydCAmJiAhcmVsYXRpdmUpCS8qIGxlYWRpbmcgIi8uLiIgb3IgIi8uLi8iICovCisJCW1vdmV0YWlsKHAsIHRhaWwpOwkJLyogc3RyaXAgIi4uIiBvciAiLi4vIiAqLworCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKHAgPT0gc3RhcnQgKyAyICYmIHBbLTJdID09ICcuJykJLyogbGVhZGluZyAiLi8uLi8iICovCisJCXsKKwkJICAgIG1vdmV0YWlsKHAgLSAyLCBwKTsJCQkvKiBzdHJpcCBsZWFkaW5nICIuLyIgKi8KKwkJICAgIHRhaWwgLT0gMjsKKwkJfQorCQlwID0gdGFpbDsJCS8qIHNraXAgdG8gY2hhciBhZnRlciAiLi4iIG9yICIuLi8iICovCisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgKytjb21wb25lbnRzOwkJLyogc2ltcGxlIHBhdGggY29tcG9uZW50ICovCisJICAgIHAgPSBnZXRuZXh0Y29tcChwKTsKKwl9CisgICAgfSB3aGlsZSAoKnAgIT0gTlVMKTsKKyNlbmRpZiAvKiAhQU1JR0EgKi8KK30KKworLyoKKyAqIENoZWNrIGlmIHdlIGhhdmUgYSB0YWcgZm9yIHRoZSBidWZmZXIgd2l0aCBuYW1lICJidWZfZmZuYW1lIi4KKyAqIFRoaXMgaXMgYSBiaXQgc2xvdywgYmVjYXVzZSBvZiB0aGUgZnVsbCBwYXRoIGNvbXBhcmUgaW4gZnVsbHBhdGhjbXAoKS4KKyAqIFJldHVybiBUUlVFIGlmIHRhZyBmb3IgZmlsZSAiZm5hbWUiIGlmIHRhZyBmaWxlICJ0YWdfZm5hbWUiIGlzIGZvciBjdXJyZW50CisgKiBmaWxlLgorICovCisgICAgc3RhdGljIGludAorI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUwordGVzdF9mb3JfY3VycmVudChpc19ldGFnLCBmbmFtZSwgZm5hbWVfZW5kLCB0YWdfZm5hbWUsIGJ1Zl9mZm5hbWUpCisgICAgaW50CSAgICBpc19ldGFnOworI2Vsc2UKK3Rlc3RfZm9yX2N1cnJlbnQoZm5hbWUsIGZuYW1lX2VuZCwgdGFnX2ZuYW1lLCBidWZfZmZuYW1lKQorI2VuZGlmCisgICAgY2hhcl91ICAqZm5hbWU7CisgICAgY2hhcl91ICAqZm5hbWVfZW5kOworICAgIGNoYXJfdSAgKnRhZ19mbmFtZTsKKyAgICBjaGFyX3UgICpidWZfZmZuYW1lOworeworICAgIGludAkgICAgYzsKKyAgICBpbnQJICAgIHJldHZhbCA9IEZBTFNFOworICAgIGNoYXJfdSAgKmZ1bGxuYW1lOworCisgICAgaWYgKGJ1Zl9mZm5hbWUgIT0gTlVMTCkJLyogaWYgdGhlIGJ1ZmZlciBoYXMgYSBuYW1lICovCisgICAgeworI2lmZGVmIEZFQVRfRU1BQ1NfVEFHUworCWlmIChpc19ldGFnKQorCSAgICBjID0gMDsJICAgIC8qIHRvIHNodXQgdXAgR0NDICovCisJZWxzZQorI2VuZGlmCisJeworCSAgICBjID0gKmZuYW1lX2VuZDsKKwkgICAgKmZuYW1lX2VuZCA9IE5VTDsKKwl9CisJZnVsbG5hbWUgPSBleHBhbmRfdGFnX2ZuYW1lKGZuYW1lLCB0YWdfZm5hbWUsIFRSVUUpOworCWlmIChmdWxsbmFtZSAhPSBOVUxMKQorCXsKKwkgICAgcmV0dmFsID0gKGZ1bGxwYXRoY21wKGZ1bGxuYW1lLCBidWZfZmZuYW1lLCBUUlVFKSAmIEZQQ19TQU1FKTsKKwkgICAgdmltX2ZyZWUoZnVsbG5hbWUpOworCX0KKyNpZmRlZiBGRUFUX0VNQUNTX1RBR1MKKwlpZiAoIWlzX2V0YWcpCisjZW5kaWYKKwkgICAgKmZuYW1lX2VuZCA9IGM7CisgICAgfQorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEZpbmQgdGhlIGVuZCBvZiB0aGUgdGFnYWRkcmVzcy4KKyAqIFJldHVybiBPSyBpZiAiO1wiIiBpcyBmb2xsb3dpbmcsIEZBSUwgb3RoZXJ3aXNlLgorICovCisgICAgc3RhdGljIGludAorZmluZF9leHRyYShwcCkKKyAgICBjaGFyX3UJKipwcDsKK3sKKyAgICBjaGFyX3UJKnN0ciA9ICpwcDsKKworICAgIC8qIFJlcGVhdCBmb3IgYWRkcmVzc2VzIHNlcGFyYXRlZCB3aXRoICc7JyAqLworICAgIGZvciAoOzspCisgICAgeworCWlmIChWSU1fSVNESUdJVCgqc3RyKSkKKwkgICAgc3RyID0gc2tpcGRpZ2l0cyhzdHIpOworCWVsc2UgaWYgKCpzdHIgPT0gJy8nIHx8ICpzdHIgPT0gJz8nKQorCXsKKwkgICAgc3RyID0gc2tpcF9yZWdleHAoc3RyICsgMSwgKnN0ciwgRkFMU0UsIE5VTEwpOworCSAgICBpZiAoKnN0ciAhPSAqKnBwKQorCQlzdHIgPSBOVUxMOworCSAgICBlbHNlCisJCSsrc3RyOworCX0KKwllbHNlCisJICAgIHN0ciA9IE5VTEw7CisJaWYgKHN0ciA9PSBOVUxMIHx8ICpzdHIgIT0gJzsnCisJCSAgfHwgIShWSU1fSVNESUdJVChzdHJbMV0pIHx8IHN0clsxXSA9PSAnLycgfHwgc3RyWzFdID09ICc/JykpCisJICAgIGJyZWFrOworCSsrc3RyOwkvKiBza2lwICc7JyAqLworICAgIH0KKworICAgIGlmIChzdHIgIT0gTlVMTCAmJiBTVFJOQ01QKHN0ciwgIjtcIiIsIDIpID09IDApCisgICAgeworCSpwcCA9IHN0cjsKKwlyZXR1cm4gT0s7CisgICAgfQorICAgIHJldHVybiBGQUlMOworfQorCisjaWYgZGVmaW5lZChGRUFUX0NNRExfQ09NUEwpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgaW50CitleHBhbmRfdGFncyh0YWduYW1lcywgcGF0LCBudW1fZmlsZSwgZmlsZSkKKyAgICBpbnQJCXRhZ25hbWVzOwkvKiBleHBhbmQgdGFnIG5hbWVzICovCisgICAgY2hhcl91CSpwYXQ7CisgICAgaW50CQkqbnVtX2ZpbGU7CisgICAgY2hhcl91CSoqKmZpbGU7Cit7CisgICAgaW50CQlpOworICAgIGludAkJYzsKKyAgICBpbnQJCXRhZ25tZmxhZzsKKyAgICBjaGFyX3UgICAgICB0YWdubVsxMDBdOworICAgIHRhZ3B0cnNfVAl0X3A7CisgICAgaW50CQlyZXQ7CisKKyAgICBpZiAodGFnbmFtZXMpCisJdGFnbm1mbGFnID0gVEFHX05BTUVTOworICAgIGVsc2UKKwl0YWdubWZsYWcgPSAwOworICAgIGlmIChwYXRbMF0gPT0gJy8nKQorCXJldCA9IGZpbmRfdGFncyhwYXQgKyAxLCBudW1fZmlsZSwgZmlsZSwKKwkJVEFHX1JFR0VYUCB8IHRhZ25tZmxhZyB8IFRBR19WRVJCT1NFLAorCQlUQUdfTUFOWSwgY3VyYnVmLT5iX2ZmbmFtZSk7CisgICAgZWxzZQorCXJldCA9IGZpbmRfdGFncyhwYXQsIG51bV9maWxlLCBmaWxlLAorCQlUQUdfUkVHRVhQIHwgdGFnbm1mbGFnIHwgVEFHX1ZFUkJPU0UgfCBUQUdfTk9JQywKKwkJVEFHX01BTlksIGN1cmJ1Zi0+Yl9mZm5hbWUpOworICAgIGlmIChyZXQgPT0gT0sgJiYgIXRhZ25hbWVzKQorICAgIHsKKwkgLyogUmVvcmdhbml6ZSB0aGUgdGFncyBmb3IgZGlzcGxheSBhbmQgbWF0Y2hpbmcgYXMgc3RyaW5ncyBvZjoKKwkgICogIjx0YWduYW1lPlwwPGtpbmQ+XDA8ZmlsZW5hbWU+XDAiCisJICAqLworCSBmb3IgKGkgPSAwOyBpIDwgKm51bV9maWxlOyBpKyspCisJIHsKKwkgICAgIHBhcnNlX21hdGNoKCgqZmlsZSlbaV0sICZ0X3ApOworCSAgICAgYyA9IChpbnQpKHRfcC50YWduYW1lX2VuZCAtIHRfcC50YWduYW1lKTsKKwkgICAgIG1jaF9tZW1tb3ZlKHRhZ25tLCB0X3AudGFnbmFtZSwgKHNpemVfdCljKTsKKwkgICAgIHRhZ25tW2MrK10gPSAwOworCSAgICAgdGFnbm1bYysrXSA9ICh0X3AudGFna2luZCAhPSBOVUxMICYmICp0X3AudGFna2luZCkKKwkJCQkJCQkgPyAqdF9wLnRhZ2tpbmQgOiAnZic7CisJICAgICB0YWdubVtjKytdID0gMDsKKwkgICAgIG1jaF9tZW1tb3ZlKCgqZmlsZSlbaV0gKyBjLCB0X3AuZm5hbWUsIHRfcC5mbmFtZV9lbmQgLSB0X3AuZm5hbWUpOworCSAgICAgKCpmaWxlKVtpXVtjICsgKHRfcC5mbmFtZV9lbmQgLSB0X3AuZm5hbWUpXSA9IDA7CisJICAgICBtY2hfbWVtbW92ZSgoKmZpbGUpW2ldLCB0YWdubSwgKHNpemVfdCljKTsKKwl9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZWFyb2ZmLmJtcCBiL3NyYy90ZWFyb2ZmLmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTQzMTNiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RlYXJvZmYuYm1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90ZWUvTWFrZWZpbGUgYi9zcmMvdGVlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MWExY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVlL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKKyMgQSB2ZXJ5IChpZiBub3QgdGhlIG1vc3QpIHNpbXBsaXN0aWMgTWFrZWZpbGUgZm9yIE9TLzIKKworQ0M9Z2NjCitDRkxBR1M9LU8yIC1mbm8tc3RyZW5ndGgtcmVkdWNlCisKK3RlZS5leGU6IHRlZS5vCisJJChDQykgJChDRkxBR1MpIC1zIC1vICRAICQ8CisKK3RlZS5vOiB0ZWUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkPAorCitjbGVhbjoKKwktIGRlbCB0ZWUubworCS0gZGVsIHRlZS5leGUKKwpkaWZmIC0tZ2l0IGEvc3JjL3RlZS90ZWUuYyBiL3NyYy90ZWUvdGVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4NTc2NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZWUvdGVlLmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qICB2aW06c2V0IHRzPTQgc3c9NDoKKyAqCisgKglDb3B5cmlnaHQgKGMpIDE5OTYsIFBhdWwgU2xvb3RtYW4KKyAqCisgKglBdXRob3I6IFBhdWwgU2xvb3RtYW4KKyAqCQkJKHBhdWxAd3VydGVsLmhvYmJ5Lm5sLCBwYXVsQG11cnBoeS5ubCwgcGF1bFNAdG9lY29tcHN0Lm5sKQorICoKKyAqCVRoaXMgc291cmNlIGNvZGUgaXMgcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi4gSXQgaXMgcHJvdmlkZWQgb24gYW4KKyAqCWFzLWlzIGJhc2lzIGFuZCBubyByZXNwb25zaWJpbGl0eSBpcyBhY2NlcHRlZCBmb3IgaXRzIGZhaWx1cmUgdG8gcGVyZm9ybQorICoJYXMgZXhwZWN0ZWQuIEl0IGlzIHdvcnRoIGF0IGxlYXN0IGFzIG11Y2ggYXMgeW91IHBhaWQgZm9yIGl0IQorICoKKyAqIHRlZS5jIC0gcGlwZSBmaXR0aW5nCisgKgorICogdGVlIHJlYWRzIHN0ZGluLCBhbmQgd3JpdGVzIHdoYXQgaXQgcmVhZHMgdG8gZWFjaCBvZiB0aGUgc3BlY2lmaWVkCisgKiBmaWxlcy4gVGhlIHByaW1hcnkgcmVhc29uIG9mIGV4aXN0ZW5jZSBmb3IgdGhpcyB2ZXJzaW9uIGlzIGEgcXVpY2sKKyAqIGFuZCBkaXJ0eSBpbXBsZW1lbnRhdGlvbiB0byBkaXN0cmlidXRlIHdpdGggVmltLCB0byBtYWtlIG9uZSBvZiB0aGUKKyAqIG1vc3QgdXNlZnVsIGZlYXR1cmVzIG9mIFZpbSBwb3NzaWJsZSBvbiBPUy8yOiBxdWlja2ZpeC4KKyAqCisgKiBPZiBjb3Vyc2UsIG5vdCB1c2luZyB0ZWUgYnV0IGluc3RlYWQgcmVkaXJlY3RpbmcgbWFrZSdzIG91dHB1dCBkaXJlY3RseQorICogaW50byBhIHRlbXAgZmlsZSBhbmQgdGhlbiBwcm9jZXNzaW5nIHRoYXQgaXMgcG9zc2libGUsIGJ1dCBpZiB3ZSBoYXZlIGEKKyAqIHN5c3RlbSBjYXBhYmxlIG9mIGNvcnJlY3RseSBwaXBpbmcgKHVubGlrZSBET1MsIGZvciBleGFtcGxlKSwgd2h5IG5vdAorICogdXNlIGl0IGFzIHdlbGwgYXMgcG9zc2libGU/IFRoaXMgdGVlIHNob3VsZCBhbHNvIHdvcmsgb24gb3RoZXIgc3lzdGVtcywKKyAqIGJ1dCBpdCdzIG5vdCBiZWVuIHRlc3RlZCB0aGVyZSwgb25seSBvbiBPUy8yLgorICoKKyAqIHRlZSBpcyBhbHNvIGF2YWlsYWJsZSBpbiB0aGUgR05VIHNoZWxsdXRpbHMgcGFja2FnZSwgd2hpY2ggaXMgYXZhaWxhYmxlCisgKiBwcmVjb21waWxlZCBmb3IgT1MvMi4gVGhhdCBvbmUgcHJvYmFibHkgd29ya3MgYmV0dGVyLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCit2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsCisidGVlIHVzYWdlOlxuXAorXHR0ZWUgWy1hXSBmaWxlIC4uLiBmaWxlX25cblwKK1xuXAorXHQtYVx0YXBwZW5kIHRvIGZpbGVzIGluc3RlYWQgb2YgdHJ1bmNhdGluZ1xuXAorXG5UZWUgcmVhZHMgaXRzIGlucHV0LCBhbmQgd3JpdGVzIHRvIGVhY2ggb2YgdGhlIHNwZWNpZmllZCBmaWxlcyxcblwKK2FzIHdlbGwgYXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC5cblwKK1xuXAorVGhpcyB2ZXJzaW9uIHN1cHBsaWVkIHdpdGggVmltIDQuMiB0byBtYWtlICc6bWFrZScgcG9zc2libGUuXG5cCitGb3IgYSBtb3JlIGNvbXBsZXRlIGFuZCBzdGFibGUgdmVyc2lvbiwgY29uc2lkZXIgZ2V0dGluZ1xuXAorW2EgcG9ydCBvZl0gdGhlIEdOVSBzaGVsbHV0aWxzIHBhY2thZ2UuXG5cCisiKTsKK30KKworLyoKKyAqIGZyZWFkIG9ubHkgcmV0dXJucyB3aGVuIGNvdW50IGlzIHJlYWQgb3IgYXQgRU9GLgorICogV2UgY291bGQgdXNlIGZnZXRzLCBidXQgSSB3YW50IHRvIGJlIGFibGUgdG8gaGFuZGxlIGJpbmFyeSBibHViYmVyLgorICovCisKK2ludAorbXlmcmVhZChjaGFyICpidWYsIGludCBlbHNpemUgLyppZ25vcmVkKi8sIGludCBtYXgsIEZJTEUgKmZwKQoreworCWludAljOworCWludAluID0gMDsKKworCXdoaWxlICgobiA8IG1heCkgJiYgKChjID0gZ2V0Y2hhcigpKSAhPSBFT0YpKQorCXsKKwkJKihidWYrKykgPSBjOworCQluKys7CisJCWlmIChjID09ICdcbicgfHwgYyA9PSAnXHInKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBuOworfQorCisKK3ZvaWQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQJYXBwZW5kID0gMDsKKwlpbnQJbnVtZmlsZXM7CisJaW50CW9wdDsKKwlpbnQJbWF4ZmlsZXM7CisJRklMRQkqKmZpbGVwb2ludGVyczsKKwlpbnQJaTsKKwljaGFyCWJ1ZltCVUZTSVpdOworCWludAluOworCWV4dGVybiBpbnQJb3B0aW5kOworCisJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgImEiKSkgIT0gRU9GKQorCXsKKwkJc3dpdGNoIChvcHQpCisJCXsKKwkJCWNhc2UgJ2EnOglhcHBlbmQrKzsKKwkJCQkJYnJlYWs7CisJCQlkZWZhdWx0Ogl1c2FnZSgpOworCQkJCQlleGl0KDIpOworCQl9CisJfQorCisJbnVtZmlsZXMgPSBhcmdjIC0gb3B0aW5kOworCisJaWYgKG51bWZpbGVzID09IDApCisJeworCQlmcHJpbnRmKHN0ZGVyciwgImRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHVzaW5nIHRlZSB3aXRob3V0IGFueSBmaWxlIG5hbWUgYXJndW1lbnRzLi4uXG4iKTsKKwkJdXNhZ2UoKTsKKwkJZXhpdCgyKTsKKwl9CisKKwltYXhmaWxlcyA9IHN5c2NvbmYoX1NDX09QRU5fTUFYKTsJLyogb3IgZmlsbCBpbiAxMCBvciBzbyAqLworCWlmIChtYXhmaWxlcyA8IDApCisJCW1heGZpbGVzID0gMTA7CisJaWYgKG51bWZpbGVzICsgMyA+IG1heGZpbGVzKQkvKiArMyBhY2NvdW50cyBmb3Igc3RkaW4sIG91dCwgZXJyICovCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIlNvcnJ5LCB0aGVyZSBpcyBhIGxpbWl0IG9mIG1heCAlZCBmaWxlcy5cbiIsIG1heGZpbGVzIC0gMyk7CisJCWV4aXQoMSk7CisJfQorCWZpbGVwb2ludGVycyA9IGNhbGxvYyhudW1maWxlcywgc2l6ZW9mKEZJTEUgKikpOworCWlmIChmaWxlcG9pbnRlcnMgPT0gTlVMTCkKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yICVkIGZpbGVzXG4iLCBudW1maWxlcyk7CisJCWV4aXQoMSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1maWxlczsgaSsrKQorCXsKKwkJZmlsZXBvaW50ZXJzW2ldID0gZm9wZW4oYXJndltpK29wdGluZF0sIGFwcGVuZCA/ICJhYiIgOiAid2IiKTsKKwkJaWYgKGZpbGVwb2ludGVyc1tpXSA9PSBOVUxMKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IG9wZW4gXCIlc1wiXG4iLCBhcmd2W2krb3B0aW5kXSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCV9mc2V0bW9kZShzdGRpbiwgICJiIik7CisJZmZsdXNoKHN0ZG91dCk7CS8qIG5lZWRlZCBmb3IgX2ZzZXRtb2RlKHN0ZG91dCkgKi8KKwlfZnNldG1vZGUoc3Rkb3V0LCAiYiIpOworCisJd2hpbGUgKChuID0gbXlmcmVhZChidWYsIHNpemVvZihjaGFyKSwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkgPiAwKQorCXsKKwkJZndyaXRlKGJ1Ziwgc2l6ZW9mKGNoYXIpLCBuLCBzdGRvdXQpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJZm9yIChpID0gMDsgaSA8IG51bWZpbGVzOyBpKyspCisJCXsKKwkJCWlmIChmaWxlcG9pbnRlcnNbaV0gJiYKKwkJCSAgICAgZndyaXRlKGJ1Ziwgc2l6ZW9mKGNoYXIpLCBuLCBmaWxlcG9pbnRlcnNbaV0pICE9IG4pCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciB3cml0aW5nIHRvIGZpbGUgXCIlc1wiXG4iLCBhcmd2W2krb3B0aW5kXSk7CisJCQkJZmNsb3NlKGZpbGVwb2ludGVyc1tpXSk7CisJCQkJZmlsZXBvaW50ZXJzW2ldID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtZmlsZXM7IGkrKykKKwl7CisJCWlmIChmaWxlcG9pbnRlcnNbaV0pCisJCQlmY2xvc2UoZmlsZXBvaW50ZXJzW2ldKTsKKwl9CisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlcm0uYyBiL3NyYy90ZXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU2YTQwZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXJtLmMKQEAgLTAsMCArMSw1MzgxIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisvKgorICoKKyAqIHRlcm0uYzogZnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB0aGUgdGVybWluYWwKKyAqCisgKiBwcmltaXRpdmUgdGVybWNhcCBzdXBwb3J0IGZvciBBbWlnYSwgTVNET1MsIGFuZCBXaW4zMiBpbmNsdWRlZAorICoKKyAqIE5PVEU6IHBhZGRpbmcgYW5kIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiBpcyBub3QgcGVyZm9ybWVkLAorICogd2hlbiBjb21waWxpbmcgd2l0aG91dCBIQVZFX1RHRVRFTlQsIHdlIHVzZSB0cHV0cygpIGFuZCB0Z290bygpIGR1bW1pZXMuCisgKi8KKworLyoKKyAqIFNvbWUgc3lzdGVtcyBoYXZlIGEgcHJvdG90eXBlIGZvciB0Z2V0c3RyKCkgd2l0aCAoY2hhciAqKSBpbnN0ZWFkIG9mCisgKiAoY2hhciAqKikuIFRoaXMgZGVmaW5lIHJlbW92ZXMgdGhhdCBwcm90b3R5cGUuIFdlIGluY2x1ZGUgb3VyIG93biBwcm90b3R5cGUKKyAqIGJlbG93LgorICovCisKKyNkZWZpbmUgdGdldHN0ciB0Z2V0c3RyX2RlZmluZWRfd3JvbmcKKyNpbmNsdWRlICJ2aW0uaCIKKworI2lmZGVmIEhBVkVfVEdFVEVOVAorIyBpZmRlZiBIQVZFX1RFUk1JT1NfSAorIyAgaW5jbHVkZSA8dGVybWlvcy5oPgkgICAgLyogc2VlbXMgdG8gYmUgcmVxdWlyZWQgZm9yIHNvbWUgTGludXggKi8KKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9URVJNQ0FQX0gKKyMgIGluY2x1ZGUgPHRlcm1jYXAuaD4KKyMgZW5kaWYKKworLyoKKyAqIEEgZmV3IGxpbnV4IHN5c3RlbXMgZGVmaW5lIG91dGZ1bnR5cGUgaW4gdGVybWNhcC5oIHRvIGJlIHVzZWQgYXMgdGhlIHRoaXJkCisgKiBhcmd1bWVudCBmb3IgdHB1dHMoKS4KKyAqLworIyBpZmRlZiBWTVMKKyMgIGRlZmluZSBUUFVUU0ZVTkNBU1QKKyMgZWxzZQorIyAgaWZkZWYgSEFWRV9PVVRGVU5UWVBFCisjICAgZGVmaW5lIFRQVVRTRlVOQ0FTVCAob3V0ZnVudHlwZSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgVFBVVFNGVU5DQVNUIChpbnQgKCopKCkpCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyN1bmRlZiB0Z2V0c3RyCisKKy8qCisgKiBIZXJlIGFyZSB0aGUgYnVpbHRpbiB0ZXJtY2FwIGVudHJpZXMuICBUaGV5IGFyZSBub3Qgc3RvcmVkIGFzIGNvbXBsZXRlCisgKiBUY2FyciBzdHJ1Y3R1cmVzLCBhcyBzdWNoIGEgc3RydWN0dXJlIGlzIHRvbyBiaWcuCisgKgorICogVGhlIGVudHJpZXMgYXJlIGNvbXBhY3QsIHRoZXJlZm9yZSB0aGV5IG5vcm1hbGx5IGFyZSBpbmNsdWRlZCBldmVuIHdoZW4KKyAqIEhBVkVfVEdFVEVOVCBpcyBkZWZpbmVkLiBXaGVuIEhBVkVfVEdFVEVOVCBpcyBkZWZpbmVkLCB0aGUgYnVpbHRpbiBlbnRyaWVzCisgKiBjYW4gYmUgYWNjZXNzZWQgd2l0aCAiYnVpbHRpbl9hbWlnYSIsICJidWlsdGluX2Fuc2kiLCAiYnVpbHRpbl9kZWJ1ZyIsIGV0Yy4KKyAqCisgKiBFYWNoIHRlcm1jYXAgaXMgYSBsaXN0IG9mIGJ1aWx0aW5fdGVybSBzdHJ1Y3R1cmVzLiBJdCBhbHdheXMgc3RhcnRzIHdpdGgKKyAqIEtTX05BTUUsIHdoaWNoIHNlcGFyYXRlcyB0aGUgZW50cmllcy4gIFNlZSBwYXJzZV9idWlsdGluX3RjYXAoKSBmb3IgYWxsCisgKiBkZXRhaWxzLgorICogYnRfZW50cnkgaXMgZWl0aGVyIGEgS1NfeHh4IGNvZGUgKD49IDApLCBvciBhIEtfeHh4IGNvZGUuCisgKgorICogRW50cmllcyBtYXJrZWQgd2l0aCAiZ3Vlc3NlZCIgbWF5IGJlIHdyb25nLgorICovCitzdHJ1Y3QgYnVpbHRpbl90ZXJtCit7CisgICAgaW50CQlidF9lbnRyeTsKKyAgICBjaGFyCSpidF9zdHJpbmc7Cit9OworCisvKiBzdGFydCBvZiBrZXlzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSB1c2VkIGJ5IFZpbSBidXQgY2FuIGJlIG1hcHBlZCAqLworI2RlZmluZSBCVF9FWFRSQV9LRVlTCTB4MTAxCisKK3N0YXRpYyBzdHJ1Y3QgYnVpbHRpbl90ZXJtICpmaW5kX2J1aWx0aW5fdGVybSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOworc3RhdGljIHZvaWQgcGFyc2VfYnVpbHRpbl90Y2FwIF9fQVJHUygoY2hhcl91ICpzKSk7CitzdGF0aWMgdm9pZCB0ZXJtX2NvbG9yIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbikpOworc3RhdGljIHZvaWQgZ2F0aGVyX3Rlcm1sZWFkZXIgX19BUkdTKCh2b2lkKSk7CisjaWZkZWYgRkVBVF9URVJNUkVTUE9OU0UKK3N0YXRpYyB2b2lkIHJlcV9jb2Rlc19mcm9tX3Rlcm0gX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCByZXFfbW9yZV9jb2Rlc19mcm9tX3Rlcm0gX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBnb3RfY29kZV9mcm9tX3Rlcm0gX19BUkdTKChjaGFyX3UgKmNvZGUsIGludCBsZW4pKTsKK3N0YXRpYyB2b2lkIGNoZWNrX2Zvcl9jb2Rlc19mcm9tX3Rlcm0gX19BUkdTKCh2b2lkKSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfR1VJKSBcCisgICAgfHwgKGRlZmluZWQoRkVBVF9NT1VTRSkgJiYgKCFkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoRkVBVF9NT1VTRV9YVEVSTSkpKQorc3RhdGljIGludCBnZXRfYnl0ZXNfZnJvbV9idWYgX19BUkdTKChjaGFyX3UgKiwgY2hhcl91ICosIGludCkpOworI2VuZGlmCisjaWZkZWYgRkVBVF9URVJNUkVTUE9OU0UKK3N0YXRpYyB2b2lkIG1heV9yZXFfdGVybXJlc3BvbnNlIF9fQVJHUygodm9pZCkpOworI2VuZGlmCitzdGF0aWMgdm9pZCBkZWxfdGVybWNvZGVfaWR4IF9fQVJHUygoaW50IGlkeCkpOworc3RhdGljIGludCB0ZXJtX2lzX2J1aWx0aW4gX19BUkdTKChjaGFyX3UgKm5hbWUpKTsKK3N0YXRpYyBpbnQgdGVybV83dG84Yml0IF9fQVJHUygoY2hhcl91ICpwKSk7CisjaWZkZWYgRkVBVF9URVJNUkVTUE9OU0UKK3N0YXRpYyB2b2lkIHN3aXRjaF90b184Yml0IF9fQVJHUygodm9pZCkpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1RHRVRFTlQKK3N0YXRpYyBjaGFyX3UgKnRnZXRlbnRfZXJyb3IgX19BUkdTKChjaGFyX3UgKiwgY2hhcl91ICopKTsKKworLyoKKyAqIEhlcmUgaXMgb3VyIG93biBwcm90b3R5cGUgZm9yIHRnZXRzdHIoKSwgYW55IHByb3RvdHlwZXMgZnJvbSB0aGUgaW5jbHVkZQorICogZmlsZXMgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IHRoZSBkZWZpbmUgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4KKyAqLworY2hhcgkJKnRnZXRzdHIgX19BUkdTKChjaGFyICosIGNoYXIgKiopKTsKKworIyBpZmRlZiBGRUFUX1RFUk1SRVNQT05TRQorLyogUmVxdWVzdCBUZXJtaW5hbCBWZXJzaW9uIHN0YXR1czogKi8KKyMgIGRlZmluZSBDUlZfR0VUCTEJLyogc2VuZCBUX0NSViB3aGVuIHN3aXRjaGVkIHRvIFJBVyBtb2RlICovCisjICBkZWZpbmUgQ1JWX1NFTlQJMgkvKiBkaWQgc2VuZCBUX0NSViwgd2FpdGluZyBmb3IgYW5zd2VyICovCisjICBkZWZpbmUgQ1JWX0dPVAkzCS8qIHJlY2VpdmVkIFRfQ1JWIHJlc3BvbnNlICovCitzdGF0aWMgaW50IGNydl9zdGF0dXMgPSBDUlZfR0VUOworIyBlbmRpZgorCisvKgorICogRG9uJ3QgZGVjbGFyZSB0aGVzZSB2YXJpYWJsZXMgaWYgdGVybWNhcC5oIGNvbnRhaW5zIHRoZW0uCisgKiBBdXRvY29uZiBjaGVja3MgaWYgdGhlc2UgdmFyaWFibGVzIHNob3VsZCBiZSBkZWNsYXJlZCBleHRlcm4gKG5vdCBhbGwKKyAqIHN5c3RlbXMgaGF2ZSB0aGVtKS4KKyAqIFNvbWUgdmVyc2lvbnMgZGVmaW5lIG9zcGVlZCB0byBiZSBzcGVlZF90LCBidXQgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aAorICogQlNELCB3aGVyZSBvc3BlZWQgaXMgc2hvcnQgYW5kIHNwZWVkX3QgaXMgbG9uZy4KKyAqLworIyBpZm5kZWYgSEFWRV9PU1BFRUQKKyMgIGlmZGVmIE9TUEVFRF9FWFRFUk4KK2V4dGVybiBzaG9ydCBvc3BlZWQ7CisjICAgZWxzZQorc2hvcnQgb3NwZWVkOworIyAgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBIQVZFX1VQX0JDX1BDCisjICBpZmRlZiBVUF9CQ19QQ19FWFRFUk4KK2V4dGVybiBjaGFyICpVUCwgKkJDLCBQQzsKKyMgIGVsc2UKK2NoYXIgKlVQLCAqQkMsIFBDOworIyAgZW5kaWYKKyMgZW5kaWYKKworIyBkZWZpbmUgVEdFVFNUUihzLCBwKQl2aW1fdGdldHN0cigocyksIChwKSkKKyMgZGVmaW5lIFRHRVRFTlQoYiwgdCkJdGdldGVudCgoY2hhciAqKShiKSwgKGNoYXIgKikodCkpCitzdGF0aWMgY2hhcl91ICp2aW1fdGdldHN0ciBfX0FSR1MoKGNoYXIgKnMsIGNoYXJfdSAqKnBwKSk7CisjZW5kaWYgLyogSEFWRV9UR0VURU5UICovCisKK3N0YXRpYyBpbnQgIGRldGVjdGVkXzhiaXQgPSBGQUxTRTsJLyogZGV0ZWN0ZWQgOC1iaXQgdGVybWluYWwgKi8KKworc3RydWN0IGJ1aWx0aW5fdGVybSBidWlsdGluX3Rlcm1jYXBzW10gPQoreworCisjaWYgZGVmaW5lZChGRUFUX0dVSSkKKy8qCisgKiBHVUkgcHNldWRvIHRlcm0tY2FwLgorICovCisgICAgeyhpbnQpS1NfTkFNRSwJImd1aSJ9LAorICAgIHsoaW50KUtTX0NFLAlJRl9FQigiXDAzM3wkIiwgRVNDX1NUUiAifCQiKX0sCisgICAgeyhpbnQpS1NfQUwsCUlGX0VCKCJcMDMzfGkiLCBFU0NfU1RSICJ8aSIpfSwKKyMgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DQUwsCUlGX0VCKCJcMDMzfCVwMSVkSSIsIEVTQ19TVFIgInwlcDElZEkiKX0sCisjIGVsc2UKKyAgICB7KGludClLU19DQUwsCUlGX0VCKCJcMDMzfCVkSSIsIEVTQ19TVFIgInwlZEkiKX0sCisjIGVuZGlmCisgICAgeyhpbnQpS1NfREwsCUlGX0VCKCJcMDMzfGQiLCBFU0NfU1RSICJ8ZCIpfSwKKyMgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DREwsCUlGX0VCKCJcMDMzfCVwMSVkRCIsIEVTQ19TVFIgInwlcDElZEQiKX0sCisgICAgeyhpbnQpS1NfQ1MsCUlGX0VCKCJcMDMzfCVwMSVkOyVwMiVkUiIsIEVTQ19TVFIgInwlcDElZDslcDIlZFIiKX0sCisjICBpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIHsoaW50KUtTX0NTViwJSUZfRUIoIlwwMzN8JXAxJWQ7JXAyJWRWIiwgRVNDX1NUUiAifCVwMSVkOyVwMiVkViIpfSwKKyMgIGVuZGlmCisjIGVsc2UKKyAgICB7KGludClLU19DREwsCUlGX0VCKCJcMDMzfCVkRCIsIEVTQ19TVFIgInwlZEQiKX0sCisgICAgeyhpbnQpS1NfQ1MsCUlGX0VCKCJcMDMzfCVkOyVkUiIsIEVTQ19TVFIgInwlZDslZFIiKX0sCisjICBpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIHsoaW50KUtTX0NTViwJSUZfRUIoIlwwMzN8JWQ7JWRWIiwgRVNDX1NUUiAifCVkOyVkViIpfSwKKyMgIGVuZGlmCisjIGVuZGlmCisgICAgeyhpbnQpS1NfQ0wsCUlGX0VCKCJcMDMzfEMiLCBFU0NfU1RSICJ8QyIpfSwKKwkJCS8qIGF0dHJpYnV0ZXMgc3dpdGNoZWQgb24gd2l0aCAnaCcsIG9mZiB3aXRoICogJ0gnICovCisgICAgeyhpbnQpS1NfTUUsCUlGX0VCKCJcMDMzfDMxSCIsIEVTQ19TVFIgInwzMUgiKX0sIC8qIEhMX0FMTCAqLworICAgIHsoaW50KUtTX01SLAlJRl9FQigiXDAzM3wxaCIsIEVTQ19TVFIgInwxaCIpfSwgICAvKiBITF9JTlZFUlNFICovCisgICAgeyhpbnQpS1NfTUQsCUlGX0VCKCJcMDMzfDJoIiwgRVNDX1NUUiAifDJoIil9LCAgIC8qIEhMX0JPTEQgKi8KKyAgICB7KGludClLU19TRSwJSUZfRUIoIlwwMzN8MTZIIiwgRVNDX1NUUiAifDE2SCIpfSwgLyogSExfU1RBTkRPVVQgKi8KKyAgICB7KGludClLU19TTywJSUZfRUIoIlwwMzN8MTZoIiwgRVNDX1NUUiAifDE2aCIpfSwgLyogSExfU1RBTkRPVVQgKi8KKyAgICB7KGludClLU19VRSwJSUZfRUIoIlwwMzN8OEgiLCBFU0NfU1RSICJ8OEgiKX0sICAgLyogSExfVU5ERVJMSU5FICovCisgICAgeyhpbnQpS1NfVVMsCUlGX0VCKCJcMDMzfDhoIiwgRVNDX1NUUiAifDhoIil9LCAgIC8qIEhMX1VOREVSTElORSAqLworICAgIHsoaW50KUtTX0NaUiwJSUZfRUIoIlwwMzN8NEgiLCBFU0NfU1RSICJ8NEgiKX0sICAgLyogSExfSVRBTElDICovCisgICAgeyhpbnQpS1NfQ1pILAlJRl9FQigiXDAzM3w0aCIsIEVTQ19TVFIgInw0aCIpfSwgICAvKiBITF9JVEFMSUMgKi8KKyAgICB7KGludClLU19WQiwJSUZfRUIoIlwwMzN8ZiIsIEVTQ19TVFIgInxmIil9LAorICAgIHsoaW50KUtTX01TLAkieSJ9LAorICAgIHsoaW50KUtTX1VULAkieSJ9LAorICAgIHsoaW50KUtTX0xFLAkiXGIifSwJCS8qIGN1cnNvci1sZWZ0ID0gQlMgKi8KKyAgICB7KGludClLU19ORCwJIlwwMTQifSwJLyogY3Vyc29yLXJpZ2h0ID0gQ1RSTC1MICovCisjIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ00sCUlGX0VCKCJcMDMzfCVwMSVkOyVwMiVkTSIsIEVTQ19TVFIgInwlcDElZDslcDIlZE0iKX0sCisjIGVsc2UKKyAgICB7KGludClLU19DTSwJSUZfRUIoIlwwMzN8JWQ7JWRNIiwgRVNDX1NUUiAifCVkOyVkTSIpfSwKKyMgZW5kaWYKKwkvKiB0aGVyZSBhcmUgbm8ga2V5IHNlcXVlbmNlcyBoZXJlLCB0aGUgR1VJIHNlcXVlbmNlcyBhcmUgcmVjb2duaXplZAorCSAqIGluIGNoZWNrX3Rlcm1jb2RlcygpICovCisjZW5kaWYKKworI2lmbmRlZiBOT19CVUlMVElOX1RDQVBTCisjIGlmIGRlZmluZWQoUklTQ09TKSB8fCBkZWZpbmVkKEFMTF9CVUlMVElOX1RDQVBTKQorLyoKKyAqIERlZmF1bHQgZm9yIHRoZSBBY29ybi4KKyAqLworICAgIHsoaW50KUtTX05BTUUsCSJyaXNjb3MifSwKKyAgICB7KGludClLU19DTCwJIlwwMTQifSwJCS8qIENscyBhbmQgSG9tZSBDdXJzb3IgKi8KKyAgICB7KGludClLU19DTSwJIlwwMDElZFwwMDElZFwwMDIifSwJLyogUG9zaXRpb24gY3Vyc29yICovCisKKyAgICB7KGludClLU19DQ08sCSIxNiJ9LAkJCS8qIEFsbG93IDE2IGNvbG9ycyAqLworCisgICAgeyhpbnQpS1NfQ0FGLAkiXDAwMSVkXDAyMSJ9LAkJLyogU2V0IGZvcmVncm91bmQgY29sb3VyICovCisgICAgeyhpbnQpS1NfQ0FCLAkiXDAwMSVkXDAyMiJ9LAkJLyogU2V0IGJhY2tncm91bmQgY29sb3VyICovCisKKworICAgIHsoaW50KUtTX01FLAkiXDAwNCJ9LAkJLyogTm9ybWFsIG1vZGUgKi8KKyAgICB7KGludClLU19NUiwJIlwwMDUifSwJCS8qIFJldmVyc2UgKi8KKworICAgIHsoaW50KUtTX1ZJLAkiXDAxNiJ9LAkJLyogQ3Vyc29yIGludmlzaWJsZSAqLworICAgIHsoaW50KUtTX1ZFLAkiXDAxNyJ9LAkJLyogQ3Vyc29yIHZpc2libGUgKi8KKyAgICB7KGludClLU19WUywJIlwwMjAifSwJCS8qIEN1cnNvciB2ZXJ5IHZpc2libGUgKi8KKworICAgIHsoaW50KUtTX0NTLAkiXDAwMSVkXDAwMSVkXDAwMyJ9LAkvKiBTZXQgc2Nyb2xsIHJlZ2lvbiAqLworICAgIHsoaW50KUtTX1NSLAkiXDAyMyJ9LAkJLyogU2Nyb2xsIHRleHQgZG93biAqLworICAgIHtLX1VQLAkJIlwyMTcifSwKKyAgICB7S19ET1dOLAkJIlwyMTYifSwKKyAgICB7S19MRUZULAkJIlwyMTQifSwKKyAgICB7S19SSUdIVCwJCSJcMjE1In0sCisgICAge0tfU19VUCwJCSJcMjM3In0sCisgICAge0tfU19ET1dOLAkJIlwyMzYifSwKKyAgICB7S19TX0xFRlQsCQkiXDIzNCJ9LAorICAgIHtLX1NfUklHSFQsCQkiXDIzNSJ9LAorCisgICAge0tfRjEsCQkiXDIwMSJ9LAorICAgIHtLX0YyLAkJIlwyMDIifSwKKyAgICB7S19GMywJCSJcMjAzIn0sCisgICAge0tfRjQsCQkiXDIwNCJ9LAorICAgIHtLX0Y1LAkJIlwyMDUifSwKKyAgICB7S19GNiwJCSJcMjA2In0sCisgICAge0tfRjcsCQkiXDIwNyJ9LAorICAgIHtLX0Y4LAkJIlwyMTAifSwKKyAgICB7S19GOSwJCSJcMjExIn0sCisgICAge0tfRjEwLAkJIlwzMTIifSwKKyAgICB7S19GMTEsCQkiXDMxMyJ9LAorICAgIHtLX0YxMiwJCSJcMzE0In0sCisgICAge0tfU19GMSwJCSJcMjIxIn0sCisgICAge0tfU19GMiwJCSJcMjIyIn0sCisgICAge0tfU19GMywJCSJcMjIzIn0sCisgICAge0tfU19GNCwJCSJcMjI0In0sCisgICAge0tfU19GNSwJCSJcMjI1In0sCisgICAge0tfU19GNiwJCSJcMjI2In0sCisgICAge0tfU19GNywJCSJcMjI3In0sCisgICAge0tfU19GOCwJCSJcMjMwIn0sCisgICAge0tfU19GOSwJCSJcMjMxIn0sCisgICAge0tfU19GMTAsCQkiXDMzMiJ9LAorICAgIHtLX1NfRjExLAkJIlwzMzMifSwKKyAgICB7S19TX0YxMiwJCSJcMzM0In0sCisgICAge0tfQlMsCQkiXDAxMCJ9LAorICAgIHtLX0lOUywJCSJcMzE1In0sCisgICAge0tfREVMLAkJIlwxNzcifSwKKyAgICB7S19IT01FLAkJIlwwMzYifSwKKyAgICB7S19FTkQsCQkiXDIxMyJ9LAorICAgIHtLX1BBR0VVUCwJCSJcMjM3In0sCisgICAge0tfUEFHRURPV04sCSJcMjM2In0sCisjIGVuZGlmCS8qIEFjb3JuIHRlcm1pbmFsICovCisKKworIyBpZiBkZWZpbmVkKEFNSUdBKSB8fCBkZWZpbmVkKEFMTF9CVUlMVElOX1RDQVBTKQorLyoKKyAqIEFtaWdhIGNvbnNvbGUgd2luZG93LCBkZWZhdWx0IGZvciBBbWlnYQorICovCisgICAgeyhpbnQpS1NfTkFNRSwJImFtaWdhIn0sCisgICAgeyhpbnQpS1NfQ0UsCSJcMDMzW0sifSwKKyAgICB7KGludClLU19DRCwJIlwwMzNbSiJ9LAorICAgIHsoaW50KUtTX0FMLAkiXDAzM1tMIn0sCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NBTCwJIlwwMzNbJXAxJWRMIn0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ0FMLAkiXDAzM1slZEwifSwKKyMgIGVuZGlmCisgICAgeyhpbnQpS1NfREwsCSJcMDMzW00ifSwKKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0RMLAkiXDAzM1slcDElZE0ifSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DREwsCSJcMDMzWyVkTSJ9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19DTCwJIlwwMTQifSwKKyAgICB7KGludClLU19WSSwJIlwwMzNbMCBwIn0sCisgICAgeyhpbnQpS1NfVkUsCSJcMDMzWzEgcCJ9LAorICAgIHsoaW50KUtTX01FLAkiXDAzM1swbSJ9LAorICAgIHsoaW50KUtTX01SLAkiXDAzM1s3bSJ9LAorICAgIHsoaW50KUtTX01ELAkiXDAzM1sxbSJ9LAorICAgIHsoaW50KUtTX1NFLAkiXDAzM1swbSJ9LAorICAgIHsoaW50KUtTX1NPLAkiXDAzM1szM20ifSwKKyAgICB7KGludClLU19VUywJIlwwMzNbNG0ifSwKKyAgICB7KGludClLU19VRSwJIlwwMzNbMG0ifSwKKyAgICB7KGludClLU19DWkgsCSJcMDMzWzNtIn0sCisgICAgeyhpbnQpS1NfQ1pSLAkiXDAzM1swbSJ9LAorI2lmIGRlZmluZWQoX19NT1JQSE9TX18pIHx8IGRlZmluZWQoX19BUk9TX18pCisgICAgeyhpbnQpS1NfQ0NPLAkiOCJ9LAkJLyogYWxsb3cgOCBjb2xvcnMgKi8KKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0FCLAkiXDAzM1s0JXAxJWRtIn0sLyogc2V0IGJhY2tncm91bmQgY29sb3IgKi8KKyAgICB7KGludClLU19DQUYsCSJcMDMzWzMlcDElZG0ifSwvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAqLworIyAgZWxzZQorICAgIHsoaW50KUtTX0NBQiwJIlwwMzNbNCVkbSJ9LAkvKiBzZXQgYmFja2dyb3VuZCBjb2xvciAqLworICAgIHsoaW50KUtTX0NBRiwJIlwwMzNbMyVkbSJ9LAkvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAqLworIyAgZW5kaWYKKyAgICB7KGludClLU19PUCwJIlwwMzNbbSJ9LAkvKiByZXNldCBjb2xvcnMgKi8KKyNlbmRpZgorICAgIHsoaW50KUtTX01TLAkieSJ9LAorICAgIHsoaW50KUtTX1VULAkieSJ9LAkJLyogZ3Vlc3NlZCAqLworICAgIHsoaW50KUtTX0xFLAkiXGIifSwKKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ00sCSJcMDMzWyVpJXAxJWQ7JXAyJWRIIn0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ00sCSJcMDMzWyVpJWQ7JWRIIn0sCisjICBlbmRpZgorI2lmIGRlZmluZWQoX19NT1JQSE9TX18pCisgICAgeyhpbnQpS1NfU1IsCSJcMDMzTSJ9LAorI2VuZGlmCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NSSSwJIlwwMzNbJXAxJWRDIn0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ1JJLAkiXDAzM1slZEMifSwKKyMgIGVuZGlmCisgICAge0tfVVAsCQkiXDIzM0EifSwKKyAgICB7S19ET1dOLAkJIlwyMzNCIn0sCisgICAge0tfTEVGVCwJCSJcMjMzRCJ9LAorICAgIHtLX1JJR0hULAkJIlwyMzNDIn0sCisgICAge0tfU19VUCwJCSJcMjMzVCJ9LAorICAgIHtLX1NfRE9XTiwJCSJcMjMzUyJ9LAorICAgIHtLX1NfTEVGVCwJCSJcMjMzIEEifSwKKyAgICB7S19TX1JJR0hULAkJIlwyMzMgQCJ9LAorICAgIHtLX1NfVEFCLAkJIlwyMzNaIn0sCisgICAge0tfRjEsCQkiXDIzM1wwNjB+In0sLyogc29tZSBjb21waWxlcnMgZG9uJ3QgZGlnICJcMjMzMCIgKi8KKyAgICB7S19GMiwJCSJcMjMzXDA2MX4ifSwKKyAgICB7S19GMywJCSJcMjMzXDA2Mn4ifSwKKyAgICB7S19GNCwJCSJcMjMzXDA2M34ifSwKKyAgICB7S19GNSwJCSJcMjMzXDA2NH4ifSwKKyAgICB7S19GNiwJCSJcMjMzXDA2NX4ifSwKKyAgICB7S19GNywJCSJcMjMzXDA2Nn4ifSwKKyAgICB7S19GOCwJCSJcMjMzXDA2N34ifSwKKyAgICB7S19GOSwJCSJcMjMzXDA3MH4ifSwKKyAgICB7S19GMTAsCQkiXDIzM1wwNzF+In0sCisgICAge0tfU19GMSwJCSJcMjMzXDA2MVwwNjB+In0sCisgICAge0tfU19GMiwJCSJcMjMzXDA2MVwwNjF+In0sCisgICAge0tfU19GMywJCSJcMjMzXDA2MVwwNjJ+In0sCisgICAge0tfU19GNCwJCSJcMjMzXDA2MVwwNjN+In0sCisgICAge0tfU19GNSwJCSJcMjMzXDA2MVwwNjR+In0sCisgICAge0tfU19GNiwJCSJcMjMzXDA2MVwwNjV+In0sCisgICAge0tfU19GNywJCSJcMjMzXDA2MVwwNjZ+In0sCisgICAge0tfU19GOCwJCSJcMjMzXDA2MVwwNjd+In0sCisgICAge0tfU19GOSwJCSJcMjMzXDA2MVwwNzB+In0sCisgICAge0tfU19GMTAsCQkiXDIzM1wwNjFcMDcxfiJ9LAorICAgIHtLX0hFTFAsCQkiXDIzMz9+In0sCisgICAge0tfSU5TLAkJIlwyMzNcMDY0XDA2MH4ifSwJLyogMTAxIGtleSBrZXlib2FyZCAqLworICAgIHtLX1BBR0VVUCwJCSJcMjMzXDA2NFwwNjF+In0sCS8qIDEwMSBrZXkga2V5Ym9hcmQgKi8KKyAgICB7S19QQUdFRE9XTiwJIlwyMzNcMDY0XDA2Mn4ifSwJLyogMTAxIGtleSBrZXlib2FyZCAqLworICAgIHtLX0hPTUUsCQkiXDIzM1wwNjRcMDY0fiJ9LAkvKiAxMDEga2V5IGtleWJvYXJkICovCisgICAge0tfRU5ELAkJIlwyMzNcMDY0XDA2NX4ifSwJLyogMTAxIGtleSBrZXlib2FyZCAqLworCisgICAge0JUX0VYVFJBX0tFWVMsCSIifSwKKyAgICB7VEVSTUNBUDJLRVkoJyMnLCAnMicpLCAiXDIzM1wwNjVcMDY0fiJ9LAkvKiBzaGlmdGVkIGhvbWUga2V5ICovCisgICAge1RFUk1DQVAyS0VZKCcjJywgJzMnKSwgIlwyMzNcMDY1XDA2MH4ifSwJLyogc2hpZnRlZCBpbnNlcnQga2V5ICovCisgICAge1RFUk1DQVAyS0VZKCcqJywgJzcnKSwgIlwyMzNcMDY1XDA2NX4ifSwJLyogc2hpZnRlZCBlbmQga2V5ICovCisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZChfX0JFT1NfXykgfHwgZGVmaW5lZChBTExfQlVJTFRJTl9UQ0FQUykKKy8qCisgKiBhbG1vc3Qgc3RhbmRhcmQgQU5TSSB0ZXJtaW5hbCwgZGVmYXVsdCBmb3IgYmVib3gKKyAqLworICAgIHsoaW50KUtTX05BTUUsCSJiZW9zLWFuc2kifSwKKyAgICB7KGludClLU19DRSwJIlwwMzNbSyJ9LAorICAgIHsoaW50KUtTX0NELAkiXDAzM1tKIn0sCisgICAgeyhpbnQpS1NfQUwsCSJcMDMzW0wifSwKKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0FMLAkiXDAzM1slcDElZEwifSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DQUwsCSJcMDMzWyVkTCJ9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19ETCwJIlwwMzNbTSJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DREwsCSJcMDMzWyVwMSVkTSJ9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NETCwJIlwwMzNbJWRNIn0sCisjICBlbmRpZgorI2lmZGVmIEJFT1NfUFJfT1JfQkVUVEVSCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NTLAkiXDAzM1slaSVwMSVkOyVwMiVkciJ9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NTLAkiXDAzM1slaSVkOyVkciJ9LAkvKiBzY3JvbGwgcmVnaW9uICovCisjICBlbmRpZgorI2VuZGlmCisgICAgeyhpbnQpS1NfQ0wsCSJcMDMzW0hcMDMzWzJKIn0sCisjaWZkZWYgbm90eWV0CisgICAgeyhpbnQpS1NfVkksCSJbVkldIn0sIC8qIGN1cnNvciBpbnZpc2libGUsIFZUMzIwOiBDU0kgPyAyNSBsICovCisgICAgeyhpbnQpS1NfVkUsCSJbVkVdIn0sIC8qIGN1cnNvciB2aXNpYmxlLCBWVDMyMDogQ1NJID8gMjUgaCAqLworI2VuZGlmCisgICAgeyhpbnQpS1NfTUUsCSJcMDMzW20ifSwJLyogbm9ybWFsIG1vZGUgKi8KKyAgICB7KGludClLU19NUiwJIlwwMzNbN20ifSwJLyogcmV2ZXJzZSAqLworICAgIHsoaW50KUtTX01ELAkiXDAzM1sxbSJ9LAkvKiBib2xkICovCisgICAgeyhpbnQpS1NfU08sCSJcMDMzWzMxbSJ9LAkvKiBzdGFuZG91dCBtb2RlOiByZWQgKi8KKyAgICB7KGludClLU19TRSwJIlwwMzNbbSJ9LAkvKiBzdGFuZG91dCBlbmQgKi8KKyAgICB7KGludClLU19DWkgsCSJcMDMzWzM1bSJ9LAkvKiBpdGFsaWM6IHB1cnBsZSAqLworICAgIHsoaW50KUtTX0NaUiwJIlwwMzNbbSJ9LAkvKiBpdGFsaWMgZW5kICovCisgICAgeyhpbnQpS1NfVVMsCSJcMDMzWzRtIn0sCS8qIHVuZGVyc2NvcmUgbW9kZSAqLworICAgIHsoaW50KUtTX1VFLAkiXDAzM1ttIn0sCS8qIHVuZGVyc2NvcmUgZW5kICovCisgICAgeyhpbnQpS1NfQ0NPLAkiOCJ9LAkJLyogYWxsb3cgOCBjb2xvcnMgKi8KKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0FCLAkiXDAzM1s0JXAxJWRtIn0sLyogc2V0IGJhY2tncm91bmQgY29sb3IgKi8KKyAgICB7KGludClLU19DQUYsCSJcMDMzWzMlcDElZG0ifSwvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAqLworIyAgZWxzZQorICAgIHsoaW50KUtTX0NBQiwJIlwwMzNbNCVkbSJ9LAkvKiBzZXQgYmFja2dyb3VuZCBjb2xvciAqLworICAgIHsoaW50KUtTX0NBRiwJIlwwMzNbMyVkbSJ9LAkvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAqLworIyAgZW5kaWYKKyAgICB7KGludClLU19PUCwJIlwwMzNbbSJ9LAkvKiByZXNldCBjb2xvcnMgKi8KKyAgICB7KGludClLU19NUywJInkifSwJCS8qIHNhZmUgdG8gbW92ZSBjdXIgaW4gcmV2ZXJzZSBtb2RlICovCisgICAgeyhpbnQpS1NfVVQsCSJ5In0sCQkvKiBndWVzc2VkICovCisgICAgeyhpbnQpS1NfTEUsCSJcYiJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DTSwJIlwwMzNbJWklcDElZDslcDIlZEgifSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DTSwJIlwwMzNbJWklZDslZEgifSwKKyMgIGVuZGlmCisgICAgeyhpbnQpS1NfU1IsCSJcMDMzTSJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DUkksCSJcMDMzWyVwMSVkQyJ9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NSSSwJIlwwMzNbJWRDIn0sCisjICBlbmRpZgorI2lmIGRlZmluZWQoQkVPU19EUjgpCisgICAgeyhpbnQpS1NfREIsCSIifSwJCS8qIGhhY2shIHNlZSBzY3JlZW4uYyAqLworI2VuZGlmCisKKyAgICB7S19VUCwJCSJcMDMzW0EifSwKKyAgICB7S19ET1dOLAkJIlwwMzNbQiJ9LAorICAgIHtLX0xFRlQsCQkiXDAzM1tEIn0sCisgICAge0tfUklHSFQsCQkiXDAzM1tDIn0sCisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKEFMTF9CVUlMVElOX1RDQVBTKSB8fCBkZWZpbmVkKFNPTUVfQlVJTFRJTl9UQ0FQUykgfHwgZGVmaW5lZChfX0VNWF9fKQorLyoKKyAqIHN0YW5kYXJkIEFOU0kgdGVybWluYWwsIGRlZmF1bHQgZm9yIHVuaXgKKyAqLworICAgIHsoaW50KUtTX05BTUUsCSJhbnNpIn0sCisgICAgeyhpbnQpS1NfQ0UsCUlGX0VCKCJcMDMzW0siLCBFU0NfU1RSICJbSyIpfSwKKyAgICB7KGludClLU19BTCwJSUZfRUIoIlwwMzNbTCIsIEVTQ19TVFIgIltMIil9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DQUwsCUlGX0VCKCJcMDMzWyVwMSVkTCIsIEVTQ19TVFIgIlslcDElZEwiKX0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ0FMLAlJRl9FQigiXDAzM1slZEwiLCBFU0NfU1RSICJbJWRMIil9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19ETCwJSUZfRUIoIlwwMzNbTSIsIEVTQ19TVFIgIltNIil9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DREwsCUlGX0VCKCJcMDMzWyVwMSVkTSIsIEVTQ19TVFIgIlslcDElZE0iKX0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ0RMLAlJRl9FQigiXDAzM1slZE0iLCBFU0NfU1RSICJbJWRNIil9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19DTCwJSUZfRUIoIlwwMzNbSFwwMzNbMkoiLCBFU0NfU1RSICJbSCIgRVNDX1NUUl9uYyAiWzJKIil9LAorICAgIHsoaW50KUtTX01FLAlJRl9FQigiXDAzM1swbSIsIEVTQ19TVFIgIlswbSIpfSwKKyAgICB7KGludClLU19NUiwJSUZfRUIoIlwwMzNbN20iLCBFU0NfU1RSICJbN20iKX0sCisgICAgeyhpbnQpS1NfTVMsCSJ5In0sCisgICAgeyhpbnQpS1NfVVQsCSJ5In0sCQkvKiBndWVzc2VkICovCisgICAgeyhpbnQpS1NfTEUsCSJcYiJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DTSwJSUZfRUIoIlwwMzNbJWklcDElZDslcDIlZEgiLCBFU0NfU1RSICJbJWklcDElZDslcDIlZEgiKX0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ00sCUlGX0VCKCJcMDMzWyVpJWQ7JWRIIiwgRVNDX1NUUiAiWyVpJWQ7JWRIIil9LAorIyAgZW5kaWYKKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ1JJLAlJRl9FQigiXDAzM1slcDElZEMiLCBFU0NfU1RSICJbJXAxJWRDIil9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NSSSwJSUZfRUIoIlwwMzNbJWRDIiwgRVNDX1NUUiAiWyVkQyIpfSwKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChBTExfQlVJTFRJTl9UQ0FQUykgfHwgZGVmaW5lZChfX0VNWF9fKQorLyoKKyAqIFRoZXNlIGNvZGVzIGFyZSB2YWxpZCB3aGVuIG5hbnNpLnN5cyBvciBlcXVpdmFsZW50IGhhcyBiZWVuIGluc3RhbGxlZC4KKyAqIEZ1bmN0aW9uIGtleXMgb24gYSBQQyBhcmUgcHJlY2VkZWQgd2l0aCBhIE5VTC4gVGhlc2UgYXJlIGNvbnZlcnRlZCBpbnRvCisgKiBLX05VTCAnXDMxNicgaW4gbWNoX2luY2hhcigpLCBiZWNhdXNlIHdlIGNhbm5vdCBoYW5kbGUgTlVMcyBpbiBrZXkgY29kZXMuCisgKiBDVFJMLWFycm93IGlzIHVzZWQgaW5zdGVhZCBvZiBTSElGVC1hcnJvdy4KKyAqLworI2lmZGVmIF9fRU1YX18KKyAgICB7KGludClLU19OQU1FLAkib3MyYW5zaSJ9LAorI2Vsc2UKKyAgICB7KGludClLU19OQU1FLAkicGNhbnNpIn0sCisgICAgeyhpbnQpS1NfREwsCSJcMDMzW00ifSwKKyAgICB7KGludClLU19BTCwJIlwwMzNbTCJ9LAorI2VuZGlmCisgICAgeyhpbnQpS1NfQ0UsCSJcMDMzW0sifSwKKyAgICB7KGludClLU19DTCwJIlwwMzNbMkoifSwKKyAgICB7KGludClLU19NRSwJIlwwMzNbMG0ifSwKKyAgICB7KGludClLU19NUiwJIlwwMzNbNW0ifSwJLyogcmV2ZXJzZTogYmxhY2sgb24gbGlnaHRncmV5ICovCisgICAgeyhpbnQpS1NfTUQsCSJcMDMzWzFtIn0sCS8qIGJvbGQ6IHdoaXRlIHRleHQgKi8KKyAgICB7KGludClLU19TRSwJIlwwMzNbMG0ifSwJLyogc3RhbmRvdXQgZW5kICovCisgICAgeyhpbnQpS1NfU08sCSJcMDMzWzMxbSJ9LAkvKiBzdGFuZG91dDogd2hpdGUgb24gYmx1ZSAqLworICAgIHsoaW50KUtTX0NaSCwJIlwwMzNbMzQ7NDNtIn0sCS8qIGl0YWxpYyBtb2RlOiBibHVlIHRleHQgb24geWVsbG93ICovCisgICAgeyhpbnQpS1NfQ1pSLAkiXDAzM1swbSJ9LAkvKiBpdGFsaWMgbW9kZSBlbmQgKi8KKyAgICB7KGludClLU19VUywJIlwwMzNbMzY7NDFtIn0sCS8qIHVuZGVyc2NvcmUgbW9kZTogY3lhbiB0ZXh0IG9uIHJlZCAqLworICAgIHsoaW50KUtTX1VFLAkiXDAzM1swbSJ9LAkvKiB1bmRlcnNjb3JlIG1vZGUgZW5kICovCisgICAgeyhpbnQpS1NfQ0NPLAkiOCJ9LAkJLyogYWxsb3cgOCBjb2xvcnMgKi8KKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0FCLAkiXDAzM1s0JXAxJWRtIn0sLyogc2V0IGJhY2tncm91bmQgY29sb3IgKi8KKyAgICB7KGludClLU19DQUYsCSJcMDMzWzMlcDElZG0ifSwvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAqLworIyAgZWxzZQorICAgIHsoaW50KUtTX0NBQiwJIlwwMzNbNCVkbSJ9LAkvKiBzZXQgYmFja2dyb3VuZCBjb2xvciAqLworICAgIHsoaW50KUtTX0NBRiwJIlwwMzNbMyVkbSJ9LAkvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAqLworIyAgZW5kaWYKKyAgICB7KGludClLU19PUCwJIlwwMzNbMG0ifSwJLyogcmVzZXQgY29sb3JzICovCisgICAgeyhpbnQpS1NfTVMsCSJ5In0sCisgICAgeyhpbnQpS1NfVVQsCSJ5In0sCQkvKiBndWVzc2VkICovCisgICAgeyhpbnQpS1NfTEUsCSJcYiJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DTSwJIlwwMzNbJWklcDElZDslcDIlZEgifSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DTSwJIlwwMzNbJWklZDslZEgifSwKKyMgIGVuZGlmCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NSSSwJIlwwMzNbJXAxJWRDIn0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ1JJLAkiXDAzM1slZEMifSwKKyMgIGVuZGlmCisgICAge0tfVVAsCQkiXDMxNkgifSwKKyAgICB7S19ET1dOLAkJIlwzMTZQIn0sCisgICAge0tfTEVGVCwJCSJcMzE2SyJ9LAorICAgIHtLX1JJR0hULAkJIlwzMTZNIn0sCisgICAge0tfU19MRUZULAkJIlwzMTZzIn0sCisgICAge0tfU19SSUdIVCwJCSJcMzE2dCJ9LAorICAgIHtLX0YxLAkJIlwzMTY7In0sCisgICAge0tfRjIsCQkiXDMxNjwifSwKKyAgICB7S19GMywJCSJcMzE2PSJ9LAorICAgIHtLX0Y0LAkJIlwzMTY+In0sCisgICAge0tfRjUsCQkiXDMxNj8ifSwKKyAgICB7S19GNiwJCSJcMzE2QCJ9LAorICAgIHtLX0Y3LAkJIlwzMTZBIn0sCisgICAge0tfRjgsCQkiXDMxNkIifSwKKyAgICB7S19GOSwJCSJcMzE2QyJ9LAorICAgIHtLX0YxMCwJCSJcMzE2RCJ9LAorICAgIHtLX0YxMSwJCSJcMzE2XDIwNSJ9LAkvKiBndWVzc2VkICovCisgICAge0tfRjEyLAkJIlwzMTZcMjA2In0sCS8qIGd1ZXNzZWQgKi8KKyAgICB7S19TX0YxLAkJIlwzMTZUIn0sCisgICAge0tfU19GMiwJCSJcMzE2VSJ9LAorICAgIHtLX1NfRjMsCQkiXDMxNlYifSwKKyAgICB7S19TX0Y0LAkJIlwzMTZXIn0sCisgICAge0tfU19GNSwJCSJcMzE2WCJ9LAorICAgIHtLX1NfRjYsCQkiXDMxNlkifSwKKyAgICB7S19TX0Y3LAkJIlwzMTZaIn0sCisgICAge0tfU19GOCwJCSJcMzE2WyJ9LAorICAgIHtLX1NfRjksCQkiXDMxNlxcIn0sCisgICAge0tfU19GMTAsCQkiXDMxNl0ifSwKKyAgICB7S19TX0YxMSwJCSJcMzE2XDIwNyJ9LAkvKiBndWVzc2VkICovCisgICAge0tfU19GMTIsCQkiXDMxNlwyMTAifSwJLyogZ3Vlc3NlZCAqLworICAgIHtLX0lOUywJCSJcMzE2UiJ9LAorICAgIHtLX0RFTCwJCSJcMzE2UyJ9LAorICAgIHtLX0hPTUUsCQkiXDMxNkcifSwKKyAgICB7S19FTkQsCQkiXDMxNk8ifSwKKyAgICB7S19QQUdFRE9XTiwJIlwzMTZRIn0sCisgICAge0tfUEFHRVVQLAkJIlwzMTZJIn0sCisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZChNU0RPUykKKy8qCisgKiBUaGVzZSBjb2RlcyBhcmUgdmFsaWQgZm9yIHRoZSBwYyB2aWRlby4gIFRoZSBlbnRyaWVzIHRoYXQgc3RhcnQgd2l0aCBFU0MgfAorICogYXJlIHRyYW5zbGF0ZWQgaW50byBjb25pbyBjYWxscyBpbiBvc19tc2Rvcy5jLiBEZWZhdWx0IGZvciBNU0RPUy4KKyAqLworICAgIHsoaW50KUtTX05BTUUsCSJwY3Rlcm0ifSwKKyAgICB7KGludClLU19DRSwJIlwwMzN8SyJ9LAorICAgIHsoaW50KUtTX0FMLAkiXDAzM3xMIn0sCisgICAgeyhpbnQpS1NfREwsCSJcMDMzfE0ifSwKKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ1MsCSJcMDMzfCVpJXAxJWQ7JXAyJWRyIn0sCisjICAgaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICB7KGludClLU19DU1YsCSJcMDMzfCVpJXAxJWQ7JXAyJWRWIn0sCisjICAgZW5kaWYKKyMgIGVsc2UKKyAgICB7KGludClLU19DUywJIlwwMzN8JWklZDslZHIifSwKKyMgICBpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIHsoaW50KUtTX0NTViwJIlwwMzN8JWklZDslZFYifSwKKyMgICBlbmRpZgorIyAgZW5kaWYKKyAgICB7KGludClLU19DTCwJIlwwMzN8SiJ9LAorICAgIHsoaW50KUtTX01FLAkiXDAzM3wwbSJ9LAkvKiBub3JtYWwgKi8KKyAgICB7KGludClLU19NUiwJIlwwMzN8MTEybSJ9LAkvKiByZXZlcnNlOiBibGFjayBvbiBsaWdodGdyZXkgKi8KKyAgICB7KGludClLU19NRCwJIlwwMzN8MTVtIn0sCS8qIGJvbGQ6IHdoaXRlIHRleHQgKi8KKyAgICB7KGludClLU19TRSwJIlwwMzN8MG0ifSwJLyogc3RhbmRvdXQgZW5kICovCisgICAgeyhpbnQpS1NfU08sCSJcMDMzfDMxbSJ9LAkvKiBzdGFuZG91dDogd2hpdGUgb24gYmx1ZSAqLworICAgIHsoaW50KUtTX0NaSCwJIlwwMzN8MjI1bSJ9LAkvKiBpdGFsaWMgbW9kZTogYmx1ZSB0ZXh0IG9uIHllbGxvdyAqLworICAgIHsoaW50KUtTX0NaUiwJIlwwMzN8MG0ifSwJLyogaXRhbGljIG1vZGUgZW5kICovCisgICAgeyhpbnQpS1NfVVMsCSJcMDMzfDY3bSJ9LAkvKiB1bmRlcnNjb3JlIG1vZGU6IGN5YW4gdGV4dCBvbiByZWQgKi8KKyAgICB7KGludClLU19VRSwJIlwwMzN8MG0ifSwJLyogdW5kZXJzY29yZSBtb2RlIGVuZCAqLworICAgIHsoaW50KUtTX0NDTywJIjE2In0sCQkvKiBhbGxvdyAxNiBjb2xvcnMgKi8KKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0FCLAkiXDAzM3wlcDElZGIifSwJLyogc2V0IGJhY2tncm91bmQgY29sb3IgKi8KKyAgICB7KGludClLU19DQUYsCSJcMDMzfCVwMSVkZiJ9LAkvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAqLworIyAgZWxzZQorICAgIHsoaW50KUtTX0NBQiwJIlwwMzN8JWRiIn0sCS8qIHNldCBiYWNrZ3JvdW5kIGNvbG9yICovCisgICAgeyhpbnQpS1NfQ0FGLAkiXDAzM3wlZGYifSwJLyogc2V0IGZvcmVncm91bmQgY29sb3IgKi8KKyMgIGVuZGlmCisgICAgeyhpbnQpS1NfTVMsCSJ5In0sCisgICAgeyhpbnQpS1NfVVQsCSJ5In0sCisgICAgeyhpbnQpS1NfTEUsCSJcYiJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DTSwJIlwwMzN8JWklcDElZDslcDIlZEgifSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DTSwJIlwwMzN8JWklZDslZEgifSwKKyMgIGVuZGlmCisjaWZkZWYgREpHUFAKKyAgICB7KGludClLU19WQiwJIlwwMzN8QiJ9LAkvKiB2aXN1YWwgYmVsbCAqLworI2VuZGlmCisgICAge0tfVVAsCQkiXDMxNkgifSwKKyAgICB7S19ET1dOLAkJIlwzMTZQIn0sCisgICAge0tfTEVGVCwJCSJcMzE2SyJ9LAorICAgIHtLX1JJR0hULAkJIlwzMTZNIn0sCisgICAge0tfU19MRUZULAkJIlwzMTZzIn0sCisgICAge0tfU19SSUdIVCwJCSJcMzE2dCJ9LAorICAgIHtLX1NfVEFCLAkJIlwzMTZcMDE3In0sCisgICAge0tfRjEsCQkiXDMxNjsifSwKKyAgICB7S19GMiwJCSJcMzE2PCJ9LAorICAgIHtLX0YzLAkJIlwzMTY9In0sCisgICAge0tfRjQsCQkiXDMxNj4ifSwKKyAgICB7S19GNSwJCSJcMzE2PyJ9LAorICAgIHtLX0Y2LAkJIlwzMTZAIn0sCisgICAge0tfRjcsCQkiXDMxNkEifSwKKyAgICB7S19GOCwJCSJcMzE2QiJ9LAorICAgIHtLX0Y5LAkJIlwzMTZDIn0sCisgICAge0tfRjEwLAkJIlwzMTZEIn0sCisgICAge0tfRjExLAkJIlwzMTZcMjA1In0sCisgICAge0tfRjEyLAkJIlwzMTZcMjA2In0sCisgICAge0tfU19GMSwJCSJcMzE2VCJ9LAorICAgIHtLX1NfRjIsCQkiXDMxNlUifSwKKyAgICB7S19TX0YzLAkJIlwzMTZWIn0sCisgICAge0tfU19GNCwJCSJcMzE2VyJ9LAorICAgIHtLX1NfRjUsCQkiXDMxNlgifSwKKyAgICB7S19TX0Y2LAkJIlwzMTZZIn0sCisgICAge0tfU19GNywJCSJcMzE2WiJ9LAorICAgIHtLX1NfRjgsCQkiXDMxNlsifSwKKyAgICB7S19TX0Y5LAkJIlwzMTZcXCJ9LAorICAgIHtLX1NfRjEwLAkJIlwzMTZdIn0sCisgICAge0tfU19GMTEsCQkiXDMxNlwyMDcifSwKKyAgICB7S19TX0YxMiwJCSJcMzE2XDIxMCJ9LAorICAgIHtLX0lOUywJCSJcMzE2UiJ9LAorICAgIHtLX0RFTCwJCSJcMzE2UyJ9LAorICAgIHtLX0hPTUUsCQkiXDMxNkcifSwKKyAgICB7S19FTkQsCQkiXDMxNk8ifSwKKyAgICB7S19QQUdFRE9XTiwJIlwzMTZRIn0sCisgICAge0tfUEFHRVVQLAkJIlwzMTZJIn0sCisgICAge0tfS1BMVVMsCQkiXDMxNk4ifSwKKyAgICB7S19LTUlOVVMsCQkiXDMxNkoifSwKKyAgICB7S19LTVVMVElQTFksCSJcMzE2NyJ9LAorICAgIHtLX0swLAkJIlwzMTZcMzMyIn0sCisgICAge0tfSzEsCQkiXDMxNlwzMzYifSwKKyAgICB7S19LMiwJCSJcMzE2XDM0MiJ9LAorICAgIHtLX0szLAkJIlwzMTZcMzQ2In0sCisgICAge0tfSzQsCQkiXDMxNlwzNTIifSwKKyAgICB7S19LNSwJCSJcMzE2XDM1NiJ9LAorICAgIHtLX0s2LAkJIlwzMTZcMzYyIn0sCisgICAge0tfSzcsCQkiXDMxNlwzNjYifSwKKyAgICB7S19LOCwJCSJcMzE2XDM3MiJ9LAorICAgIHtLX0s5LAkJIlwzMTZcMzc2In0sCisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZChXSU4zMjY0KSB8fCBkZWZpbmVkKEFMTF9CVUlMVElOX1RDQVBTKSB8fCBkZWZpbmVkKF9fRU1YX18pCisvKgorICogVGhlc2UgY29kZXMgYXJlIHZhbGlkIGZvciB0aGUgV2luMzIgQ29uc29sZSAuICBUaGUgZW50cmllcyB0aGF0IHN0YXJ0IHdpdGgKKyAqIEVTQyB8IGFyZSB0cmFuc2xhdGVkIGludG8gY29uc29sZSBjYWxscyBpbiBvc193aW4zMi5jLiAgVGhlIGZ1bmN0aW9uIGtleXMKKyAqIGFyZSBhbHNvIHRyYW5zbGF0ZWQgaW4gb3Nfd2luMzIuYy4KKyAqLworICAgIHsoaW50KUtTX05BTUUsCSJ3aW4zMiJ9LAorICAgIHsoaW50KUtTX0NFLAkiXDAzM3xLIn0sCS8qIGNsZWFyIHRvIGVuZCBvZiBsaW5lICovCisgICAgeyhpbnQpS1NfQUwsCSJcMDMzfEwifSwJLyogYWRkIG5ldyBibGFuayBsaW5lICovCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NBTCwJIlwwMzN8JXAxJWRMIn0sCS8qIGFkZCBudW1iZXIgb2YgbmV3IGJsYW5rIGxpbmVzICovCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ0FMLAkiXDAzM3wlZEwifSwJLyogYWRkIG51bWJlciBvZiBuZXcgYmxhbmsgbGluZXMgKi8KKyMgIGVuZGlmCisgICAgeyhpbnQpS1NfREwsCSJcMDMzfE0ifSwJLyogZGVsZXRlIGxpbmUgKi8KKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0RMLAkiXDAzM3wlcDElZE0ifSwJLyogZGVsZXRlIG51bWJlciBvZiBsaW5lcyAqLworIyAgZWxzZQorICAgIHsoaW50KUtTX0NETCwJIlwwMzN8JWRNIn0sCS8qIGRlbGV0ZSBudW1iZXIgb2YgbGluZXMgKi8KKyMgIGVuZGlmCisgICAgeyhpbnQpS1NfQ0wsCSJcMDMzfEoifSwJLyogY2xlYXIgc2NyZWVuICovCisgICAgeyhpbnQpS1NfQ0QsCSJcMDMzfGoifSwJLyogY2xlYXIgdG8gZW5kIG9mIGRpc3BsYXkgKi8KKyAgICB7KGludClLU19WSSwJIlwwMzN8diJ9LAkvKiBjdXJzb3IgaW52aXNpYmxlICovCisgICAgeyhpbnQpS1NfVkUsCSJcMDMzfFYifSwJLyogY3Vyc29yIHZpc2libGUgKi8KKworICAgIHsoaW50KUtTX01FLAkiXDAzM3wwbSJ9LAkvKiBub3JtYWwgKi8KKyAgICB7KGludClLU19NUiwJIlwwMzN8MTEybSJ9LAkvKiByZXZlcnNlOiBibGFjayBvbiBsaWdodGdyYXkgKi8KKyAgICB7KGludClLU19NRCwJIlwwMzN8MTVtIn0sCS8qIGJvbGQ6IHdoaXRlIG9uIGJsYWNrICovCisjaWYgMQorICAgIHsoaW50KUtTX1NPLAkiXDAzM3wzMW0ifSwJLyogc3RhbmRvdXQ6IHdoaXRlIG9uIGJsdWUgKi8KKyAgICB7KGludClLU19TRSwJIlwwMzN8MG0ifSwJLyogc3RhbmRvdXQgZW5kICovCisjZWxzZQorICAgIHsoaW50KUtTX1NPLAkiXDAzM3xGIn0sCS8qIHN0YW5kb3V0OiBoaWdoIGludGVuc2l0eSAqLworICAgIHsoaW50KUtTX1NFLAkiXDAzM3xmIn0sCS8qIHN0YW5kb3V0IGVuZCAqLworI2VuZGlmCisgICAgeyhpbnQpS1NfQ1pILAkiXDAzM3wyMjVtIn0sCS8qIGl0YWxpYzogYmx1ZSB0ZXh0IG9uIHllbGxvdyAqLworICAgIHsoaW50KUtTX0NaUiwJIlwwMzN8MG0ifSwJLyogaXRhbGljIGVuZCAqLworICAgIHsoaW50KUtTX1VTLAkiXDAzM3w2N20ifSwJLyogdW5kZXJzY29yZTogY3lhbiB0ZXh0IG9uIHJlZCAqLworICAgIHsoaW50KUtTX1VFLAkiXDAzM3wwbSJ9LAkvKiB1bmRlcnNjb3JlIGVuZCAqLworICAgIHsoaW50KUtTX0NDTywJIjE2In0sCQkvKiBhbGxvdyAxNiBjb2xvcnMgKi8KKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0FCLAkiXDAzM3wlcDElZGIifSwJLyogc2V0IGJhY2tncm91bmQgY29sb3IgKi8KKyAgICB7KGludClLU19DQUYsCSJcMDMzfCVwMSVkZiJ9LAkvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAqLworIyAgZWxzZQorICAgIHsoaW50KUtTX0NBQiwJIlwwMzN8JWRiIn0sCS8qIHNldCBiYWNrZ3JvdW5kIGNvbG9yICovCisgICAgeyhpbnQpS1NfQ0FGLAkiXDAzM3wlZGYifSwJLyogc2V0IGZvcmVncm91bmQgY29sb3IgKi8KKyMgIGVuZGlmCisKKyAgICB7KGludClLU19NUywJInkifSwJCS8qIHNhdmUgdG8gbW92ZSBjdXIgaW4gcmV2ZXJzZSBtb2RlICovCisgICAgeyhpbnQpS1NfVVQsCSJ5In0sCisgICAgeyhpbnQpS1NfTEUsCSJcYiJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DTSwJIlwwMzN8JWklcDElZDslcDIlZEgifSwvKiBjdXJzb3IgbW90aW9uICovCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ00sCSJcMDMzfCVpJWQ7JWRIIn0sLyogY3Vyc29yIG1vdGlvbiAqLworIyAgZW5kaWYKKyAgICB7KGludClLU19WQiwJIlwwMzN8QiJ9LAkvKiB2aXN1YWwgYmVsbCAqLworICAgIHsoaW50KUtTX1RJLAkiXDAzM3xTIn0sCS8qIHB1dCB0ZXJtaW5hbCBpbiB0ZXJtY2FwIG1vZGUgKi8KKyAgICB7KGludClLU19URSwJIlwwMzN8RSJ9LAkvKiBvdXQgb2YgdGVybWNhcCBtb2RlICovCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NTLAkiXDAzM3wlaSVwMSVkOyVwMiVkciJ9LC8qIHNjcm9sbCByZWdpb24gKi8KKyMgIGVsc2UKKyAgICB7KGludClLU19DUywJIlwwMzN8JWklZDslZHIifSwvKiBzY3JvbGwgcmVnaW9uICovCisjICBlbmRpZgorCisgICAge0tfVVAsCQkiXDMxNkgifSwKKyAgICB7S19ET1dOLAkJIlwzMTZQIn0sCisgICAge0tfTEVGVCwJCSJcMzE2SyJ9LAorICAgIHtLX1JJR0hULAkJIlwzMTZNIn0sCisgICAge0tfU19VUCwJCSJcMzE2XDMwNCJ9LAorICAgIHtLX1NfRE9XTiwJCSJcMzE2XDMxNyJ9LAorICAgIHtLX1NfTEVGVCwJCSJcMzE2XDMxMSJ9LAorICAgIHtLX0NfTEVGVCwJCSJcMzE2cyJ9LAorICAgIHtLX1NfUklHSFQsCQkiXDMxNlwzMTMifSwKKyAgICB7S19DX1JJR0hULAkJIlwzMTZ0In0sCisgICAge0tfU19UQUIsCQkiXDMxNlwwMTcifSwKKyAgICB7S19GMSwJCSJcMzE2OyJ9LAorICAgIHtLX0YyLAkJIlwzMTY8In0sCisgICAge0tfRjMsCQkiXDMxNj0ifSwKKyAgICB7S19GNCwJCSJcMzE2PiJ9LAorICAgIHtLX0Y1LAkJIlwzMTY/In0sCisgICAge0tfRjYsCQkiXDMxNkAifSwKKyAgICB7S19GNywJCSJcMzE2QSJ9LAorICAgIHtLX0Y4LAkJIlwzMTZCIn0sCisgICAge0tfRjksCQkiXDMxNkMifSwKKyAgICB7S19GMTAsCQkiXDMxNkQifSwKKyAgICB7S19GMTEsCQkiXDMxNlwyMDUifSwKKyAgICB7S19GMTIsCQkiXDMxNlwyMDYifSwKKyAgICB7S19TX0YxLAkJIlwzMTZUIn0sCisgICAge0tfU19GMiwJCSJcMzE2VSJ9LAorICAgIHtLX1NfRjMsCQkiXDMxNlYifSwKKyAgICB7S19TX0Y0LAkJIlwzMTZXIn0sCisgICAge0tfU19GNSwJCSJcMzE2WCJ9LAorICAgIHtLX1NfRjYsCQkiXDMxNlkifSwKKyAgICB7S19TX0Y3LAkJIlwzMTZaIn0sCisgICAge0tfU19GOCwJCSJcMzE2WyJ9LAorICAgIHtLX1NfRjksCQkiXDMxNlxcIn0sCisgICAge0tfU19GMTAsCQkiXDMxNl0ifSwKKyAgICB7S19TX0YxMSwJCSJcMzE2XDIwNyJ9LAorICAgIHtLX1NfRjEyLAkJIlwzMTZcMjEwIn0sCisgICAge0tfSU5TLAkJIlwzMTZSIn0sCisgICAge0tfREVMLAkJIlwzMTZTIn0sCisgICAge0tfSE9NRSwJCSJcMzE2RyJ9LAorICAgIHtLX1NfSE9NRSwJCSJcMzE2XDMwMiJ9LAorICAgIHtLX0NfSE9NRSwJCSJcMzE2dyJ9LAorICAgIHtLX0VORCwJCSJcMzE2TyJ9LAorICAgIHtLX1NfRU5ELAkJIlwzMTZcMzE1In0sCisgICAge0tfQ19FTkQsCQkiXDMxNnUifSwKKyAgICB7S19QQUdFRE9XTiwJIlwzMTZRIn0sCisgICAge0tfUEFHRVVQLAkJIlwzMTZJIn0sCisgICAge0tfS1BMVVMsCQkiXDMxNk4ifSwKKyAgICB7S19LTUlOVVMsCQkiXDMxNkoifSwKKyAgICB7S19LTVVMVElQTFksCSJcMzE2XDA2NyJ9LAorICAgIHtLX0swLAkJIlwzMTZcMzMyIn0sCisgICAge0tfSzEsCQkiXDMxNlwzMzYifSwKKyAgICB7S19LMiwJCSJcMzE2XDM0MiJ9LAorICAgIHtLX0szLAkJIlwzMTZcMzQ2In0sCisgICAge0tfSzQsCQkiXDMxNlwzNTIifSwKKyAgICB7S19LNSwJCSJcMzE2XDM1NiJ9LAorICAgIHtLX0s2LAkJIlwzMTZcMzYyIn0sCisgICAge0tfSzcsCQkiXDMxNlwzNjYifSwKKyAgICB7S19LOCwJCSJcMzE2XDM3MiJ9LAorICAgIHtLX0s5LAkJIlwzMTZcMzc2In0sCisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZChWTVMpIHx8IGRlZmluZWQoQUxMX0JVSUxUSU5fVENBUFMpCisvKgorICogVlQzMjAgaXMgd29ya2luZyBhcyBhbiBBTlNJIHRlcm1pbmFsIGNvbXBhdGlibGUgREVDIHRlcm1pbmFsLgorICogKGl0IGNvdmVycyBWVDF4MCwgVlQyeDAgYW5kIFZUM3gwIHVwIHRvIFZUMzIwIG9uIFZNUyBhcyB3ZWxsKQorICogTm90ZTogS19GMS4uLktfRjUgYXJlIGZvciBpbnRlcm5hbCB1c2UsIHNob3VsZCBub3QgYmUgZGVmaW5lZC4KKyAqIFRPRE86LSByZXdyaXRlIEVTQ1sgY29kZXMgdG8gQ1NJCisgKiAgICAgIC0ga2V5Ym9hcmQgbGFuZ3VhZ2VzIChDU0kgPyAyNiBuKQorICovCisgICAgeyhpbnQpS1NfTkFNRSwJInZ0MzIwIn0sCisgICAgeyhpbnQpS1NfQ0UsCUlGX0VCKCJcMDMzW0siLCBFU0NfU1RSICJbSyIpfSwKKyAgICB7KGludClLU19BTCwJSUZfRUIoIlwwMzNbTCIsIEVTQ19TVFIgIltMIil9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DQUwsCUlGX0VCKCJcMDMzWyVwMSVkTCIsIEVTQ19TVFIgIlslcDElZEwiKX0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ0FMLAlJRl9FQigiXDAzM1slZEwiLCBFU0NfU1RSICJbJWRMIil9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19ETCwJSUZfRUIoIlwwMzNbTSIsIEVTQ19TVFIgIltNIil9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DREwsCUlGX0VCKCJcMDMzWyVwMSVkTSIsIEVTQ19TVFIgIlslcDElZE0iKX0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ0RMLAlJRl9FQigiXDAzM1slZE0iLCBFU0NfU1RSICJbJWRNIil9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19DTCwJSUZfRUIoIlwwMzNbSFwwMzNbMkoiLCBFU0NfU1RSICJbSCIgRVNDX1NUUl9uYyAiWzJKIil9LAorICAgIHsoaW50KUtTX01FLAlJRl9FQigiXDAzM1swbSIsIEVTQ19TVFIgIlswbSIpfSwKKyAgICB7KGludClLU19NUiwJSUZfRUIoIlwwMzNbN20iLCBFU0NfU1RSICJbN20iKX0sCisgICAgeyhpbnQpS1NfTVMsCSJ5In0sCisgICAgeyhpbnQpS1NfVVQsCSJ5In0sCisgICAgeyhpbnQpS1NfTEUsCSJcYiJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DTSwJSUZfRUIoIlwwMzNbJWklcDElZDslcDIlZEgiLAorCQkJCQkJICBFU0NfU1RSICJbJWklcDElZDslcDIlZEgiKX0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ00sCUlGX0VCKCJcMDMzWyVpJWQ7JWRIIiwgRVNDX1NUUiAiWyVpJWQ7JWRIIil9LAorIyAgZW5kaWYKKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ1JJLAlJRl9FQigiXDAzM1slcDElZEMiLCBFU0NfU1RSICJbJXAxJWRDIil9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NSSSwJSUZfRUIoIlwwMzNbJWRDIiwgRVNDX1NUUiAiWyVkQyIpfSwKKyMgIGVuZGlmCisgICAge0tfVVAsCQlJRl9FQigiXDAzM1tBIiwgRVNDX1NUUiAiW0EiKX0sCisgICAge0tfRE9XTiwJCUlGX0VCKCJcMDMzW0IiLCBFU0NfU1RSICJbQiIpfSwKKyAgICB7S19SSUdIVCwJCUlGX0VCKCJcMDMzW0MiLCBFU0NfU1RSICJbQyIpfSwKKyAgICB7S19MRUZULAkJSUZfRUIoIlwwMzNbRCIsIEVTQ19TVFIgIltEIil9LAorICAgIHtLX0Y2LAkJSUZfRUIoIlwwMzNbMTd+IiwgRVNDX1NUUiAiWzE3fiIpfSwKKyAgICB7S19GNywJCUlGX0VCKCJcMDMzWzE4fiIsIEVTQ19TVFIgIlsxOH4iKX0sCisgICAge0tfRjgsCQlJRl9FQigiXDAzM1sxOX4iLCBFU0NfU1RSICJbMTl+Iil9LAorICAgIHtLX0Y5LAkJSUZfRUIoIlwwMzNbMjB+IiwgRVNDX1NUUiAiWzIwfiIpfSwKKyAgICB7S19GMTAsCQlJRl9FQigiXDAzM1syMX4iLCBFU0NfU1RSICJbMjF+Iil9LAorLyogIHtLX0YxMSwJCUlGX0VCKCJcMDMzWzIzfiIsIEVTQ19TVFIgIlsyM34iKX0sCisJCQkqICAoRVNDKSBzaG91bGQgbm90IGRlZmluZSwgc29tZXRpbWVzIGRvZXMgbm90IHdvcmsgKi8KKyAgICB7S19GMTIsCQlJRl9FQigiXDAzM1syNH4iLCBFU0NfU1RSICJbMjR+Iil9LAorICAgIHtLX0YxMywJCUlGX0VCKCJcMDMzWzI1fiIsIEVTQ19TVFIgIlsyNX4iKX0sCisgICAge0tfRjE0LAkJSUZfRUIoIlwwMzNbMjZ+IiwgRVNDX1NUUiAiWzI2fiIpfSwKKyAgICB7S19GMTUsCQlJRl9FQigiXDAzM1syOH4iLCBFU0NfU1RSICJbMjh+Iil9LAkvKiBIZWxwICovCisgICAge0tfRjE2LAkJSUZfRUIoIlwwMzNbMjl+IiwgRVNDX1NUUiAiWzI5fiIpfSwJLyogU2VsZWN0ICovCisgICAge0tfRjE3LAkJSUZfRUIoIlwwMzNbMzF+IiwgRVNDX1NUUiAiWzMxfiIpfSwKKyAgICB7S19GMTgsCQlJRl9FQigiXDAzM1szMn4iLCBFU0NfU1RSICJbMzJ+Iil9LAorICAgIHtLX0YxOSwJCUlGX0VCKCJcMDMzWzMzfiIsIEVTQ19TVFIgIlszM34iKX0sCisgICAge0tfRjIwLAkJSUZfRUIoIlwwMzNbMzR+IiwgRVNDX1NUUiAiWzM0fiIpfSwKKyAgICB7S19JTlMsCQlJRl9FQigiXDAzM1syfiIsIEVTQ19TVFIgIlsyfiIpfSwKKyAgICB7S19ERUwsCQlJRl9FQigiXDAzM1szfiIsIEVTQ19TVFIgIlszfiIpfSwKKyAgICB7S19IT01FLAkJSUZfRUIoIlwwMzNbMX4iLCBFU0NfU1RSICJbMX4iKX0sCisgICAge0tfRU5ELAkJSUZfRUIoIlwwMzNbNH4iLCBFU0NfU1RSICJbNH4iKX0sCisgICAge0tfUEFHRVVQLAkJSUZfRUIoIlwwMzNbNX4iLCBFU0NfU1RSICJbNX4iKX0sCisgICAge0tfUEFHRURPV04sCUlGX0VCKCJcMDMzWzZ+IiwgRVNDX1NUUiAiWzZ+Iil9LAorICAgIHtLX0tQTFVTLAkJSUZfRUIoIlwwMzNPayIsIEVTQ19TVFIgIk9rIil9LAkvKiBrZXlwYWQgcGx1cyAqLworICAgIHtLX0tNSU5VUywJCUlGX0VCKCJcMDMzT20iLCBFU0NfU1RSICJPbSIpfSwJLyoga2V5cGFkIG1pbnVzICovCisgICAge0tfS0RJVklERSwJCUlGX0VCKCJcMDMzT28iLCBFU0NfU1RSICJPbyIpfSwJLyoga2V5cGFkIC8gKi8KKyAgICB7S19LTVVMVElQTFksCUlGX0VCKCJcMDMzT2oiLCBFU0NfU1RSICJPaiIpfSwJLyoga2V5cGFkICogKi8KKyAgICB7S19LRU5URVIsCQlJRl9FQigiXDAzM09NIiwgRVNDX1NUUiAiT00iKX0sCS8qIGtleXBhZCBFbnRlciAqLworICAgIHtLX0JTLAkJIlx4N2YifSwJLyogZm9yIHNvbWUgcmVhc29uIDAxNzcgZG9lc24ndCB3b3JrICovCisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZChBTExfQlVJTFRJTl9UQ0FQUykgfHwgZGVmaW5lZChfX01JTlRfXykKKy8qCisgKiBPcmRpbmFyeSB2dDUyCisgKi8KKyAgICB7KGludClLU19OQU1FLAkidnQ1MiJ9LAorICAgIHsoaW50KUtTX0NFLAlJRl9FQigiXDAzM0siLCBFU0NfU1RSICJLIil9LAorICAgIHsoaW50KUtTX0NELAlJRl9FQigiXDAzM0oiLCBFU0NfU1RSICJKIil9LAorICAgIHsoaW50KUtTX0NNLAlJRl9FQigiXDAzM1klKyAlKyAiLCBFU0NfU1RSICJZJSsgJSsgIil9LAorICAgIHsoaW50KUtTX0xFLAkiXGIifSwKKyMgIGlmZGVmIF9fTUlOVF9fCisgICAgeyhpbnQpS1NfQUwsCUlGX0VCKCJcMDMzTCIsIEVTQ19TVFIgIkwiKX0sCisgICAgeyhpbnQpS1NfREwsCUlGX0VCKCJcMDMzTSIsIEVTQ19TVFIgIk0iKX0sCisgICAgeyhpbnQpS1NfQ0wsCUlGX0VCKCJcMDMzRSIsIEVTQ19TVFIgIkUiKX0sCisgICAgeyhpbnQpS1NfU1IsCUlGX0VCKCJcMDMzSSIsIEVTQ19TVFIgIkkiKX0sCisgICAgeyhpbnQpS1NfVkUsCUlGX0VCKCJcMDMzZSIsIEVTQ19TVFIgImUiKX0sCisgICAgeyhpbnQpS1NfVkksCUlGX0VCKCJcMDMzZiIsIEVTQ19TVFIgImYiKX0sCisgICAgeyhpbnQpS1NfU08sCUlGX0VCKCJcMDMzcCIsIEVTQ19TVFIgInAiKX0sCisgICAgeyhpbnQpS1NfU0UsCUlGX0VCKCJcMDMzcSIsIEVTQ19TVFIgInEiKX0sCisgICAge0tfVVAsCQlJRl9FQigiXDAzM0EiLCBFU0NfU1RSICJBIil9LAorICAgIHtLX0RPV04sCQlJRl9FQigiXDAzM0IiLCBFU0NfU1RSICJCIil9LAorICAgIHtLX0xFRlQsCQlJRl9FQigiXDAzM0QiLCBFU0NfU1RSICJEIil9LAorICAgIHtLX1JJR0hULAkJSUZfRUIoIlwwMzNDIiwgRVNDX1NUUiAiQyIpfSwKKyAgICB7S19TX1VQLAkJSUZfRUIoIlwwMzNhIiwgRVNDX1NUUiAiYSIpfSwKKyAgICB7S19TX0RPV04sCQlJRl9FQigiXDAzM2IiLCBFU0NfU1RSICJiIil9LAorICAgIHtLX1NfTEVGVCwJCUlGX0VCKCJcMDMzZCIsIEVTQ19TVFIgImQiKX0sCisgICAge0tfU19SSUdIVCwJCUlGX0VCKCJcMDMzYyIsIEVTQ19TVFIgImMiKX0sCisgICAge0tfRjEsCQlJRl9FQigiXDAzM1AiLCBFU0NfU1RSICJQIil9LAorICAgIHtLX0YyLAkJSUZfRUIoIlwwMzNRIiwgRVNDX1NUUiAiUSIpfSwKKyAgICB7S19GMywJCUlGX0VCKCJcMDMzUiIsIEVTQ19TVFIgIlIiKX0sCisgICAge0tfRjQsCQlJRl9FQigiXDAzM1MiLCBFU0NfU1RSICJTIil9LAorICAgIHtLX0Y1LAkJSUZfRUIoIlwwMzNUIiwgRVNDX1NUUiAiVCIpfSwKKyAgICB7S19GNiwJCUlGX0VCKCJcMDMzVSIsIEVTQ19TVFIgIlUiKX0sCisgICAge0tfRjcsCQlJRl9FQigiXDAzM1YiLCBFU0NfU1RSICJWIil9LAorICAgIHtLX0Y4LAkJSUZfRUIoIlwwMzNXIiwgRVNDX1NUUiAiVyIpfSwKKyAgICB7S19GOSwJCUlGX0VCKCJcMDMzWCIsIEVTQ19TVFIgIlgiKX0sCisgICAge0tfRjEwLAkJSUZfRUIoIlwwMzNZIiwgRVNDX1NUUiAiWSIpfSwKKyAgICB7S19TX0YxLAkJSUZfRUIoIlwwMzNwIiwgRVNDX1NUUiAicCIpfSwKKyAgICB7S19TX0YyLAkJSUZfRUIoIlwwMzNxIiwgRVNDX1NUUiAicSIpfSwKKyAgICB7S19TX0YzLAkJSUZfRUIoIlwwMzNyIiwgRVNDX1NUUiAiciIpfSwKKyAgICB7S19TX0Y0LAkJSUZfRUIoIlwwMzNzIiwgRVNDX1NUUiAicyIpfSwKKyAgICB7S19TX0Y1LAkJSUZfRUIoIlwwMzN0IiwgRVNDX1NUUiAidCIpfSwKKyAgICB7S19TX0Y2LAkJSUZfRUIoIlwwMzN1IiwgRVNDX1NUUiAidSIpfSwKKyAgICB7S19TX0Y3LAkJSUZfRUIoIlwwMzN2IiwgRVNDX1NUUiAidiIpfSwKKyAgICB7S19TX0Y4LAkJSUZfRUIoIlwwMzN3IiwgRVNDX1NUUiAidyIpfSwKKyAgICB7S19TX0Y5LAkJSUZfRUIoIlwwMzN4IiwgRVNDX1NUUiAieCIpfSwKKyAgICB7S19TX0YxMCwJCUlGX0VCKCJcMDMzeSIsIEVTQ19TVFIgInkiKX0sCisgICAge0tfSU5TLAkJSUZfRUIoIlwwMzNJIiwgRVNDX1NUUiAiSSIpfSwKKyAgICB7S19IT01FLAkJSUZfRUIoIlwwMzNFIiwgRVNDX1NUUiAiRSIpfSwKKyAgICB7S19QQUdFRE9XTiwJSUZfRUIoIlwwMzNiIiwgRVNDX1NUUiAiYiIpfSwKKyAgICB7S19QQUdFVVAsCQlJRl9FQigiXDAzM2EiLCBFU0NfU1RSICJhIil9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0FMLAlJRl9FQigiXDAzM1QiLCBFU0NfU1RSICJUIil9LAorICAgIHsoaW50KUtTX0RMLAlJRl9FQigiXDAzM1UiLCBFU0NfU1RSICJVIil9LAorICAgIHsoaW50KUtTX0NMLAlJRl9FQigiXDAzM0hcMDMzSiIsIEVTQ19TVFIgIkgiIEVTQ19TVFJfbmMgIkoiKX0sCisgICAgeyhpbnQpS1NfTUUsCUlGX0VCKCJcMDMzU08iLCBFU0NfU1RSICJTTyIpfSwKKyAgICB7KGludClLU19NUiwJSUZfRUIoIlwwMzNTMiIsIEVTQ19TVFIgIlMyIil9LAorICAgIHsoaW50KUtTX01TLAkieSJ9LAorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoQUxMX0JVSUxUSU5fVENBUFMpIHx8IGRlZmluZWQoU09NRV9CVUlMVElOX1RDQVBTKSB8fCBkZWZpbmVkKF9fRU1YX18pCisvKgorICogVGhlIHh0ZXJtIHRlcm1jYXAgaXMgbWlzc2luZyBGMTQgYW5kIEYxNSwgYmVjYXVzZSB0aGV5IHNlbmQgdGhlIHNhbWUKKyAqIGNvZGVzIGFzIHRoZSB1bmRvIGFuZCBoZWxwIGtleSwgYWx0aG91Z2ggdGhleSBkb24ndCB3b3JrIG9uIGFsbCBrZXlib2FyZHMuCisgKi8KKyAgICB7KGludClLU19OQU1FLAkieHRlcm0ifSwKKyAgICB7KGludClLU19DRSwJSUZfRUIoIlwwMzNbSyIsIEVTQ19TVFIgIltLIil9LAorICAgIHsoaW50KUtTX0FMLAlJRl9FQigiXDAzM1tMIiwgRVNDX1NUUiAiW0wiKX0sCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NBTCwJSUZfRUIoIlwwMzNbJXAxJWRMIiwgRVNDX1NUUiAiWyVwMSVkTCIpfSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DQUwsCUlGX0VCKCJcMDMzWyVkTCIsIEVTQ19TVFIgIlslZEwiKX0sCisjICBlbmRpZgorICAgIHsoaW50KUtTX0RMLAlJRl9FQigiXDAzM1tNIiwgRVNDX1NUUiAiW00iKX0sCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NETCwJSUZfRUIoIlwwMzNbJXAxJWRNIiwgRVNDX1NUUiAiWyVwMSVkTSIpfSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DREwsCUlGX0VCKCJcMDMzWyVkTSIsIEVTQ19TVFIgIlslZE0iKX0sCisjICBlbmRpZgorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DUywJSUZfRUIoIlwwMzNbJWklcDElZDslcDIlZHIiLAorCQkJCQkJICBFU0NfU1RSICJbJWklcDElZDslcDIlZHIiKX0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ1MsCUlGX0VCKCJcMDMzWyVpJWQ7JWRyIiwgRVNDX1NUUiAiWyVpJWQ7JWRyIil9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19DTCwJSUZfRUIoIlwwMzNbSFwwMzNbMkoiLCBFU0NfU1RSICJbSCIgRVNDX1NUUl9uYyAiWzJKIil9LAorICAgIHsoaW50KUtTX0NELAlJRl9FQigiXDAzM1tKIiwgRVNDX1NUUiAiW0oiKX0sCisgICAgeyhpbnQpS1NfTUUsCUlGX0VCKCJcMDMzW20iLCBFU0NfU1RSICJbbSIpfSwKKyAgICB7KGludClLU19NUiwJSUZfRUIoIlwwMzNbN20iLCBFU0NfU1RSICJbN20iKX0sCisgICAgeyhpbnQpS1NfTUQsCUlGX0VCKCJcMDMzWzFtIiwgRVNDX1NUUiAiWzFtIil9LAorICAgIHsoaW50KUtTX1VFLAlJRl9FQigiXDAzM1ttIiwgRVNDX1NUUiAiW20iKX0sCisgICAgeyhpbnQpS1NfVVMsCUlGX0VCKCJcMDMzWzRtIiwgRVNDX1NUUiAiWzRtIil9LAorICAgIHsoaW50KUtTX01TLAkieSJ9LAorICAgIHsoaW50KUtTX1VULAkieSJ9LAorICAgIHsoaW50KUtTX0xFLAkiXGIifSwKKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ00sCUlGX0VCKCJcMDMzWyVpJXAxJWQ7JXAyJWRIIiwKKwkJCQkJCSAgRVNDX1NUUiAiWyVpJXAxJWQ7JXAyJWRIIil9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NNLAlJRl9FQigiXDAzM1slaSVkOyVkSCIsIEVTQ19TVFIgIlslaSVkOyVkSCIpfSwKKyMgIGVuZGlmCisgICAgeyhpbnQpS1NfU1IsCUlGX0VCKCJcMDMzTSIsIEVTQ19TVFIgIk0iKX0sCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NSSSwJSUZfRUIoIlwwMzNbJXAxJWRDIiwgRVNDX1NUUiAiWyVwMSVkQyIpfSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DUkksCUlGX0VCKCJcMDMzWyVkQyIsIEVTQ19TVFIgIlslZEMiKX0sCisjICBlbmRpZgorICAgIHsoaW50KUtTX0tTLAlJRl9FQigiXDAzM1s/MWhcMDMzPSIsIEVTQ19TVFIgIls/MWgiIEVTQ19TVFJfbmMgIj0iKX0sCisgICAgeyhpbnQpS1NfS0UsCUlGX0VCKCJcMDMzWz8xbFwwMzM+IiwgRVNDX1NUUiAiWz8xbCIgRVNDX1NUUl9uYyAiPiIpfSwKKyMgIGlmZGVmIEZFQVRfWFRFUk1fU0FWRQorICAgIHsoaW50KUtTX1RJLAlJRl9FQigiXDAzMzdcMDMzWz80N2giLCBFU0NfU1RSICI3IiBFU0NfU1RSX25jICJbPzQ3aCIpfSwKKyAgICB7KGludClLU19URSwJSUZfRUIoIlwwMzNbMkpcMDMzWz80N2xcMDMzOCIsCisJCQkJICBFU0NfU1RSICJbMkoiIEVTQ19TVFJfbmMgIls/NDdsIiBFU0NfU1RSX25jICI4Iil9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19DSVMsCUlGX0VCKCJcMDMzXTE7IiwgRVNDX1NUUiAiXTE7Iil9LAorICAgIHsoaW50KUtTX0NJRSwJIlwwMDcifSwKKyAgICB7KGludClLU19UUywJSUZfRUIoIlwwMzNdMjsiLCBFU0NfU1RSICJdMjsiKX0sCisgICAgeyhpbnQpS1NfRlMsCSJcMDA3In0sCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NXUywJSUZfRUIoIlwwMzNbODslcDElZDslcDIlZHQiLAorCQkJCQkJICBFU0NfU1RSICJbODslcDElZDslcDIlZHQiKX0sCisgICAgeyhpbnQpS1NfQ1dQLAlJRl9FQigiXDAzM1szOyVwMSVkOyVwMiVkdCIsCisJCQkJCQkgIEVTQ19TVFIgIlszOyVwMSVkOyVwMiVkdCIpfSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DV1MsCUlGX0VCKCJcMDMzWzg7JWQ7JWR0IiwgRVNDX1NUUiAiWzg7JWQ7JWR0Iil9LAorICAgIHsoaW50KUtTX0NXUCwJSUZfRUIoIlwwMzNbMzslZDslZHQiLCBFU0NfU1RSICJbMzslZDslZHQiKX0sCisjICBlbmRpZgorICAgIHsoaW50KUtTX0NSViwJSUZfRUIoIlwwMzNbPmMiLCBFU0NfU1RSICJbPmMiKX0sCisgICAge0tfVVAsCQlJRl9FQigiXDAzM09BIiwgRVNDX1NUUiAiT0EiKX0sCisgICAge0tfRE9XTiwJCUlGX0VCKCJcMDMzT0IiLCBFU0NfU1RSICJPQiIpfSwKKyAgICB7S19SSUdIVCwJCUlGX0VCKCJcMDMzT0MiLCBFU0NfU1RSICJPQyIpfSwKKyAgICB7S19MRUZULAkJSUZfRUIoIlwwMzNPRCIsIEVTQ19TVFIgIk9EIil9LAorICAgIHtLX1NfVVAsCQlJRl9FQigiXDAzM08yQSIsIEVTQ19TVFIgIk8yQSIpfSwKKyAgICB7S19TX0RPV04sCQlJRl9FQigiXDAzM08yQiIsIEVTQ19TVFIgIk8yQiIpfSwKKyAgICB7S19TX1JJR0hULAkJSUZfRUIoIlwwMzNPMkMiLCBFU0NfU1RSICJPMkMiKX0sCisgICAge0tfQ19SSUdIVCwJCUlGX0VCKCJcMDMzTzVDIiwgRVNDX1NUUiAiTzVDIil9LAorICAgIHtLX1NfTEVGVCwJCUlGX0VCKCJcMDMzTzJEIiwgRVNDX1NUUiAiTzJEIil9LAorICAgIHtLX0NfTEVGVCwJCUlGX0VCKCJcMDMzTzVEIiwgRVNDX1NUUiAiTzVEIil9LAorICAgIC8qIEFuIGV4dHJhIHNldCBvZiBmdW5jdGlvbiBrZXlzIGZvciB2dDEwMCBtb2RlICovCisgICAge0tfWEYxLAkJSUZfRUIoIlwwMzNPUCIsIEVTQ19TVFIgIk9QIil9LAorICAgIHtLX1hGMiwJCUlGX0VCKCJcMDMzT1EiLCBFU0NfU1RSICJPUSIpfSwKKyAgICB7S19YRjMsCQlJRl9FQigiXDAzM09SIiwgRVNDX1NUUiAiT1IiKX0sCisgICAge0tfWEY0LAkJSUZfRUIoIlwwMzNPUyIsIEVTQ19TVFIgIk9TIil9LAorICAgIHtLX0YxLAkJSUZfRUIoIlwwMzNbMTF+IiwgRVNDX1NUUiAiWzExfiIpfSwKKyAgICB7S19GMiwJCUlGX0VCKCJcMDMzWzEyfiIsIEVTQ19TVFIgIlsxMn4iKX0sCisgICAge0tfRjMsCQlJRl9FQigiXDAzM1sxM34iLCBFU0NfU1RSICJbMTN+Iil9LAorICAgIHtLX0Y0LAkJSUZfRUIoIlwwMzNbMTR+IiwgRVNDX1NUUiAiWzE0fiIpfSwKKyAgICB7S19GNSwJCUlGX0VCKCJcMDMzWzE1fiIsIEVTQ19TVFIgIlsxNX4iKX0sCisgICAge0tfRjYsCQlJRl9FQigiXDAzM1sxN34iLCBFU0NfU1RSICJbMTd+Iil9LAorICAgIHtLX0Y3LAkJSUZfRUIoIlwwMzNbMTh+IiwgRVNDX1NUUiAiWzE4fiIpfSwKKyAgICB7S19GOCwJCUlGX0VCKCJcMDMzWzE5fiIsIEVTQ19TVFIgIlsxOX4iKX0sCisgICAge0tfRjksCQlJRl9FQigiXDAzM1syMH4iLCBFU0NfU1RSICJbMjB+Iil9LAorICAgIHtLX0YxMCwJCUlGX0VCKCJcMDMzWzIxfiIsIEVTQ19TVFIgIlsyMX4iKX0sCisgICAge0tfRjExLAkJSUZfRUIoIlwwMzNbMjN+IiwgRVNDX1NUUiAiWzIzfiIpfSwKKyAgICB7S19GMTIsCQlJRl9FQigiXDAzM1syNH4iLCBFU0NfU1RSICJbMjR+Iil9LAorICAgIHtLX1NfWEYxLAkJSUZfRUIoIlwwMzNPMlAiLCBFU0NfU1RSICJPMlAiKX0sCisgICAge0tfU19YRjIsCQlJRl9FQigiXDAzM08yUSIsIEVTQ19TVFIgIk8yUSIpfSwKKyAgICB7S19TX1hGMywJCUlGX0VCKCJcMDMzTzJSIiwgRVNDX1NUUiAiTzJSIil9LAorICAgIHtLX1NfWEY0LAkJSUZfRUIoIlwwMzNPMlMiLCBFU0NfU1RSICJPMlMiKX0sCisgICAge0tfU19GMSwJCUlGX0VCKCJcMDMzWzExOzJ+IiwgRVNDX1NUUiAiWzExOzJ+Iil9LAorICAgIHtLX1NfRjIsCQlJRl9FQigiXDAzM1sxMjsyfiIsIEVTQ19TVFIgIlsxMjsyfiIpfSwKKyAgICB7S19TX0YzLAkJSUZfRUIoIlwwMzNbMTM7Mn4iLCBFU0NfU1RSICJbMTM7Mn4iKX0sCisgICAge0tfU19GNCwJCUlGX0VCKCJcMDMzWzE0OzJ+IiwgRVNDX1NUUiAiWzE0OzJ+Iil9LAorICAgIHtLX1NfRjUsCQlJRl9FQigiXDAzM1sxNTsyfiIsIEVTQ19TVFIgIlsxNTsyfiIpfSwKKyAgICB7S19TX0Y2LAkJSUZfRUIoIlwwMzNbMTc7Mn4iLCBFU0NfU1RSICJbMTc7Mn4iKX0sCisgICAge0tfU19GNywJCUlGX0VCKCJcMDMzWzE4OzJ+IiwgRVNDX1NUUiAiWzE4OzJ+Iil9LAorICAgIHtLX1NfRjgsCQlJRl9FQigiXDAzM1sxOTsyfiIsIEVTQ19TVFIgIlsxOTsyfiIpfSwKKyAgICB7S19TX0Y5LAkJSUZfRUIoIlwwMzNbMjA7Mn4iLCBFU0NfU1RSICJbMjA7Mn4iKX0sCisgICAge0tfU19GMTAsCQlJRl9FQigiXDAzM1syMTsyfiIsIEVTQ19TVFIgIlsyMTsyfiIpfSwKKyAgICB7S19TX0YxMSwJCUlGX0VCKCJcMDMzWzIzOzJ+IiwgRVNDX1NUUiAiWzIzOzJ+Iil9LAorICAgIHtLX1NfRjEyLAkJSUZfRUIoIlwwMzNbMjQ7Mn4iLCBFU0NfU1RSICJbMjQ7Mn4iKX0sCisgICAge0tfU19UQUIsCQlJRl9FQigiXDAzM1taIiwgRVNDX1NUUiAiW1oiKX0sCisgICAge0tfSEVMUCwJCUlGX0VCKCJcMDMzWzI4fiIsIEVTQ19TVFIgIlsyOH4iKX0sCisgICAge0tfVU5ETywJCUlGX0VCKCJcMDMzWzI2fiIsIEVTQ19TVFIgIlsyNn4iKX0sCisgICAge0tfSU5TLAkJSUZfRUIoIlwwMzNbMn4iLCBFU0NfU1RSICJbMn4iKX0sCisgICAge0tfSE9NRSwJCUlGX0VCKCJcMDMzWzd+IiwgRVNDX1NUUiAiWzd+Iil9LAorICAgIHtLX1NfSE9NRSwJCUlGX0VCKCJcMDMzTzJIIiwgRVNDX1NUUiAiTzJIIil9LAorICAgIHtLX0NfSE9NRSwJCUlGX0VCKCJcMDMzTzVIIiwgRVNDX1NUUiAiTzVIIil9LAorICAgIHtLX0tIT01FLAkJSUZfRUIoIlwwMzNbMX4iLCBFU0NfU1RSICJbMX4iKX0sCisgICAge0tfWEhPTUUsCQlJRl9FQigiXDAzM09IIiwgRVNDX1NUUiAiT0giKX0sCS8qIGFsdGVybmF0ZSBIb21lICovCisgICAge0tfRU5ELAkJSUZfRUIoIlwwMzNbOH4iLCBFU0NfU1RSICJbOH4iKX0sCisgICAge0tfU19FTkQsCQlJRl9FQigiXDAzM08yRiIsIEVTQ19TVFIgIk8yRiIpfSwKKyAgICB7S19DX0VORCwJCUlGX0VCKCJcMDMzTzVGIiwgRVNDX1NUUiAiTzVGIil9LAorICAgIHtLX0tFTkQsCQlJRl9FQigiXDAzM1s0fiIsIEVTQ19TVFIgIls0fiIpfSwKKyAgICB7S19YRU5ELAkJSUZfRUIoIlwwMzNPRiIsIEVTQ19TVFIgIk9GIil9LAkvKiBhbHRlcm5hdGUgRW5kICovCisgICAge0tfUEFHRVVQLAkJSUZfRUIoIlwwMzNbNX4iLCBFU0NfU1RSICJbNX4iKX0sCisgICAge0tfUEFHRURPV04sCUlGX0VCKCJcMDMzWzZ+IiwgRVNDX1NUUiAiWzZ+Iil9LAorICAgIHtLX0tQTFVTLAkJSUZfRUIoIlwwMzNPayIsIEVTQ19TVFIgIk9rIil9LAkvKiBrZXlwYWQgcGx1cyAqLworICAgIHtLX0tNSU5VUywJCUlGX0VCKCJcMDMzT20iLCBFU0NfU1RSICJPbSIpfSwJLyoga2V5cGFkIG1pbnVzICovCisgICAge0tfS0RJVklERSwJCUlGX0VCKCJcMDMzT28iLCBFU0NfU1RSICJPbyIpfSwJLyoga2V5cGFkIC8gKi8KKyAgICB7S19LTVVMVElQTFksCUlGX0VCKCJcMDMzT2oiLCBFU0NfU1RSICJPaiIpfSwJLyoga2V5cGFkICogKi8KKyAgICB7S19LRU5URVIsCQlJRl9FQigiXDAzM09NIiwgRVNDX1NUUiAiT00iKX0sCS8qIGtleXBhZCBFbnRlciAqLworICAgIHtLX0tERUwsCQlJRl9FQigiXDAzM1szfiIsIEVTQ19TVFIgIlszfiIpfSwJLyoga2V5cGFkIERlbCAqLworCisgICAge0JUX0VYVFJBX0tFWVMsICAgIiJ9LAorICAgIHtURVJNQ0FQMktFWSgnaycsICcwJyksIElGX0VCKCJcMDMzWzEwfiIsIEVTQ19TVFIgIlsxMH4iKX0sCS8qIEYwICovCisgICAge1RFUk1DQVAyS0VZKCdGJywgJzMnKSwgSUZfRUIoIlwwMzNbMjV+IiwgRVNDX1NUUiAiWzI1fiIpfSwJLyogRjEzICovCisgICAge1RFUk1DQVAyS0VZKCdGJywgJzYnKSwgSUZfRUIoIlwwMzNbMjl+IiwgRVNDX1NUUiAiWzI5fiIpfSwJLyogRjE2ICovCisgICAge1RFUk1DQVAyS0VZKCdGJywgJzcnKSwgSUZfRUIoIlwwMzNbMzF+IiwgRVNDX1NUUiAiWzMxfiIpfSwJLyogRjE3ICovCisgICAge1RFUk1DQVAyS0VZKCdGJywgJzgnKSwgSUZfRUIoIlwwMzNbMzJ+IiwgRVNDX1NUUiAiWzMyfiIpfSwJLyogRjE4ICovCisgICAge1RFUk1DQVAyS0VZKCdGJywgJzknKSwgSUZfRUIoIlwwMzNbMzN+IiwgRVNDX1NUUiAiWzMzfiIpfSwJLyogRjE5ICovCisgICAge1RFUk1DQVAyS0VZKCdGJywgJ0EnKSwgSUZfRUIoIlwwMzNbMzR+IiwgRVNDX1NUUiAiWzM0fiIpfSwJLyogRjIwICovCisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKEFMTF9CVUlMVElOX1RDQVBTKQorLyoKKyAqIGlyaXMtYW5zaSBmb3IgU2lsaWNvbiBHcmFwaGljcyBtYWNoaW5lcy4KKyAqLworICAgIHsoaW50KUtTX05BTUUsCSJpcmlzLWFuc2kifSwKKyAgICB7KGludClLU19DRSwJIlwwMzNbSyJ9LAorICAgIHsoaW50KUtTX0NELAkiXDAzM1tKIn0sCisgICAgeyhpbnQpS1NfQUwsCSJcMDMzW0wifSwKKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0FMLAkiXDAzM1slcDElZEwifSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DQUwsCSJcMDMzWyVkTCJ9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19ETCwJIlwwMzNbTSJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DREwsCSJcMDMzWyVwMSVkTSJ9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NETCwJIlwwMzNbJWRNIn0sCisjICBlbmRpZgorI2lmIDAJLyogVGhlIHNjcm9sbCByZWdpb24gaXMgbm90IHdvcmtpbmcgYXMgVmltIGV4cGVjdHMuICovCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NTLAkiXDAzM1slaSVwMSVkOyVwMiVkciJ9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NTLAkiXDAzM1slaSVkOyVkciJ9LAorIyAgZW5kaWYKKyNlbmRpZgorICAgIHsoaW50KUtTX0NMLAkiXDAzM1tIXDAzM1sySiJ9LAorICAgIHsoaW50KUtTX1ZFLAkiXDAzM1s5L3lcMDMzWzEyL3kifSwJLyogVGhlc2UgYXJlbid0IGRvY3VtZW50ZWQgKi8KKyAgICB7KGludClLU19WUywJIlwwMzNbMTAveVwwMzNbPTFoXDAzM1s9MmwifSwgLyogVGhlc2UgYXJlbid0IGRvY3VtZW50ZWQgKi8KKyAgICB7KGludClLU19USSwJIlwwMzNbPTZoIn0sCisgICAgeyhpbnQpS1NfVEUsCSJcMDMzWz02bCJ9LAorICAgIHsoaW50KUtTX1NFLAkiXDAzM1syMTsyN20ifSwKKyAgICB7KGludClLU19TTywJIlwwMzNbMTs3bSJ9LAorICAgIHsoaW50KUtTX01FLAkiXDAzM1ttIn0sCisgICAgeyhpbnQpS1NfTVIsCSJcMDMzWzdtIn0sCisgICAgeyhpbnQpS1NfTUQsCSJcMDMzWzFtIn0sCisgICAgeyhpbnQpS1NfQ0NPLAkiOCJ9LAkJCS8qIGFsbG93IDggY29sb3JzICovCisgICAgeyhpbnQpS1NfQ1pILAkiXDAzM1szbSJ9LAkJLyogaXRhbGljIG1vZGUgb24gKi8KKyAgICB7KGludClLU19DWlIsCSJcMDMzWzIzbSJ9LAkJLyogaXRhbGljIG1vZGUgb2ZmICovCisgICAgeyhpbnQpS1NfVVMsCSJcMDMzWzRtIn0sCQkvKiB1bmRlcmxpbmUgb24gKi8KKyAgICB7KGludClLU19VRSwJIlwwMzNbMjRtIn0sCQkvKiB1bmRlcmxpbmUgb2ZmICovCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NBQiwJIlwwMzNbNCVwMSVkbSJ9LCAgICAvKiBzZXQgYmFja2dyb3VuZCBjb2xvciAoQU5TSSkgKi8KKyAgICB7KGludClLU19DQUYsCSJcMDMzWzMlcDElZG0ifSwgICAgLyogc2V0IGZvcmVncm91bmQgY29sb3IgKEFOU0kpICovCisgICAgeyhpbnQpS1NfQ1NCLAkiXDAzM1sxMDI7JXAxJWRtIn0sIC8qIHNldCBzY3JlZW4gYmFja2dyb3VuZCBjb2xvciAqLworICAgIHsoaW50KUtTX0NTRiwJIlwwMzNbMTAxOyVwMSVkbSJ9LCAvKiBzZXQgc2NyZWVuIGZvcmVncm91bmQgY29sb3IgKi8KKyMgIGVsc2UKKyAgICB7KGludClLU19DQUIsCSJcMDMzWzQlZG0ifSwJICAgIC8qIHNldCBiYWNrZ3JvdW5kIGNvbG9yIChBTlNJKSAqLworICAgIHsoaW50KUtTX0NBRiwJIlwwMzNbMyVkbSJ9LAkgICAgLyogc2V0IGZvcmVncm91bmQgY29sb3IgKEFOU0kpICovCisgICAgeyhpbnQpS1NfQ1NCLAkiXDAzM1sxMDI7JWRtIn0sICAgIC8qIHNldCBzY3JlZW4gYmFja2dyb3VuZCBjb2xvciAqLworICAgIHsoaW50KUtTX0NTRiwJIlwwMzNbMTAxOyVkbSJ9LCAgICAvKiBzZXQgc2NyZWVuIGZvcmVncm91bmQgY29sb3IgKi8KKyMgIGVuZGlmCisgICAgeyhpbnQpS1NfTVMsCSJ5In0sCQkvKiBndWVzc2VkICovCisgICAgeyhpbnQpS1NfVVQsCSJ5In0sCQkvKiBndWVzc2VkICovCisgICAgeyhpbnQpS1NfTEUsCSJcYiJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DTSwJIlwwMzNbJWklcDElZDslcDIlZEgifSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DTSwJIlwwMzNbJWklZDslZEgifSwKKyMgIGVuZGlmCisgICAgeyhpbnQpS1NfU1IsCSJcMDMzTSJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DUkksCSJcMDMzWyVwMSVkQyJ9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NSSSwJIlwwMzNbJWRDIn0sCisjICBlbmRpZgorICAgIHsoaW50KUtTX0NJUywJIlwwMzNQMy55In0sCisgICAgeyhpbnQpS1NfQ0lFLAkiXDIzNCJ9LCAgICAvKiBTVCAiU3RyaW5nIFRlcm1pbmF0b3IiICovCisgICAgeyhpbnQpS1NfVFMsCSJcMDMzUDEueSJ9LAorICAgIHsoaW50KUtTX0ZTLAkiXDIzNCJ9LCAgICAvKiBTVCAiU3RyaW5nIFRlcm1pbmF0b3IiICovCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NXUywJIlwwMzNbMjAzOyVwMSVkOyVwMiVkL3kifSwKKyAgICB7KGludClLU19DV1AsCSJcMDMzWzIwNTslcDElZDslcDIlZC95In0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ1dTLAkiXDAzM1syMDM7JWQ7JWQveSJ9LAorICAgIHsoaW50KUtTX0NXUCwJIlwwMzNbMjA1OyVkOyVkL3kifSwKKyMgIGVuZGlmCisgICAge0tfVVAsCQkiXDAzM1tBIn0sCisgICAge0tfRE9XTiwJCSJcMDMzW0IifSwKKyAgICB7S19MRUZULAkJIlwwMzNbRCJ9LAorICAgIHtLX1JJR0hULAkJIlwwMzNbQyJ9LAorICAgIHtLX1NfVVAsCQkiXDAzM1sxNjFxIn0sCisgICAge0tfU19ET1dOLAkJIlwwMzNbMTY0cSJ9LAorICAgIHtLX1NfTEVGVCwJCSJcMDMzWzE1OHEifSwKKyAgICB7S19TX1JJR0hULAkJIlwwMzNbMTY3cSJ9LAorICAgIHtLX0YxLAkJIlwwMzNbMDAxcSJ9LAorICAgIHtLX0YyLAkJIlwwMzNbMDAycSJ9LAorICAgIHtLX0YzLAkJIlwwMzNbMDAzcSJ9LAorICAgIHtLX0Y0LAkJIlwwMzNbMDA0cSJ9LAorICAgIHtLX0Y1LAkJIlwwMzNbMDA1cSJ9LAorICAgIHtLX0Y2LAkJIlwwMzNbMDA2cSJ9LAorICAgIHtLX0Y3LAkJIlwwMzNbMDA3cSJ9LAorICAgIHtLX0Y4LAkJIlwwMzNbMDA4cSJ9LAorICAgIHtLX0Y5LAkJIlwwMzNbMDA5cSJ9LAorICAgIHtLX0YxMCwJCSJcMDMzWzAxMHEifSwKKyAgICB7S19GMTEsCQkiXDAzM1swMTFxIn0sCisgICAge0tfRjEyLAkJIlwwMzNbMDEycSJ9LAorICAgIHtLX1NfRjEsCQkiXDAzM1swMTNxIn0sCisgICAge0tfU19GMiwJCSJcMDMzWzAxNHEifSwKKyAgICB7S19TX0YzLAkJIlwwMzNbMDE1cSJ9LAorICAgIHtLX1NfRjQsCQkiXDAzM1swMTZxIn0sCisgICAge0tfU19GNSwJCSJcMDMzWzAxN3EifSwKKyAgICB7S19TX0Y2LAkJIlwwMzNbMDE4cSJ9LAorICAgIHtLX1NfRjcsCQkiXDAzM1swMTlxIn0sCisgICAge0tfU19GOCwJCSJcMDMzWzAyMHEifSwKKyAgICB7S19TX0Y5LAkJIlwwMzNbMDIxcSJ9LAorICAgIHtLX1NfRjEwLAkJIlwwMzNbMDIycSJ9LAorICAgIHtLX1NfRjExLAkJIlwwMzNbMDIzcSJ9LAorICAgIHtLX1NfRjEyLAkJIlwwMzNbMDI0cSJ9LAorICAgIHtLX0lOUywJCSJcMDMzWzEzOXEifSwKKyAgICB7S19IT01FLAkJIlwwMzNbSCJ9LAorICAgIHtLX0VORCwJCSJcMDMzWzE0NnEifSwKKyAgICB7S19QQUdFVVAsCQkiXDAzM1sxNTBxIn0sCisgICAge0tfUEFHRURPV04sCSJcMDMzWzE1NHEifSwKKyMgZW5kaWYKKworIyBpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKEFMTF9CVUlMVElOX1RDQVBTKQorLyoKKyAqIGZvciBkZWJ1Z2dpbmcKKyAqLworICAgIHsoaW50KUtTX05BTUUsCSJkZWJ1ZyJ9LAorICAgIHsoaW50KUtTX0NFLAkiW0NFXSJ9LAorICAgIHsoaW50KUtTX0NELAkiW0NEXSJ9LAorICAgIHsoaW50KUtTX0FMLAkiW0FMXSJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DQUwsCSJbQ0FMJXAxJWRdIn0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ0FMLAkiW0NBTCVkXSJ9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19ETCwJIltETF0ifSwKKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0RMLAkiW0NETCVwMSVkXSJ9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NETCwJIltDREwlZF0ifSwKKyMgIGVuZGlmCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NTLAkiWyVwMSVkQ1MlcDIlZF0ifSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DUywJIlslZENTJWRdIn0sCisjICBlbmRpZgorIyAgaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyMgICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NTViwJIlslcDElZENTViVwMiVkXSJ9LAorIyAgIGVsc2UKKyAgICB7KGludClLU19DU1YsCSJbJWRDU1YlZF0ifSwKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIFRFUk1JTkZPCisgICAgeyhpbnQpS1NfQ0FCLAkiW0NBQiVwMSVkXSJ9LAorICAgIHsoaW50KUtTX0NBRiwJIltDQUYlcDElZF0ifSwKKyAgICB7KGludClLU19DU0IsCSJbQ1NCJXAxJWRdIn0sCisgICAgeyhpbnQpS1NfQ1NGLAkiW0NTRiVwMSVkXSJ9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NBQiwJIltDQUIlZF0ifSwKKyAgICB7KGludClLU19DQUYsCSJbQ0FGJWRdIn0sCisgICAgeyhpbnQpS1NfQ1NCLAkiW0NTQiVkXSJ9LAorICAgIHsoaW50KUtTX0NTRiwJIltDU0YlZF0ifSwKKyMgIGVuZGlmCisgICAgeyhpbnQpS1NfT1AsCSJbT1BdIn0sCisgICAgeyhpbnQpS1NfTEUsCSJbTEVdIn0sCisgICAgeyhpbnQpS1NfQ0wsCSJbQ0xdIn0sCisgICAgeyhpbnQpS1NfVkksCSJbVkldIn0sCisgICAgeyhpbnQpS1NfVkUsCSJbVkVdIn0sCisgICAgeyhpbnQpS1NfVlMsCSJbVlNdIn0sCisgICAgeyhpbnQpS1NfTUUsCSJbTUVdIn0sCisgICAgeyhpbnQpS1NfTVIsCSJbTVJdIn0sCisgICAgeyhpbnQpS1NfTUIsCSJbTUJdIn0sCisgICAgeyhpbnQpS1NfTUQsCSJbTURdIn0sCisgICAgeyhpbnQpS1NfU0UsCSJbU0VdIn0sCisgICAgeyhpbnQpS1NfU08sCSJbU09dIn0sCisgICAgeyhpbnQpS1NfVUUsCSJbVUVdIn0sCisgICAgeyhpbnQpS1NfVVMsCSJbVVNdIn0sCisgICAgeyhpbnQpS1NfTVMsCSJbTVNdIn0sCisgICAgeyhpbnQpS1NfVVQsCSJbVVRdIn0sCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NNLAkiWyVwMSVkQ00lcDIlZF0ifSwKKyMgIGVsc2UKKyAgICB7KGludClLU19DTSwJIlslZENNJWRdIn0sCisjICBlbmRpZgorICAgIHsoaW50KUtTX1NSLAkiW1NSXSJ9LAorIyAgaWZkZWYgVEVSTUlORk8KKyAgICB7KGludClLU19DUkksCSJbQ1JJJXAxJWRdIn0sCisjICBlbHNlCisgICAgeyhpbnQpS1NfQ1JJLAkiW0NSSSVkXSJ9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19WQiwJIltWQl0ifSwKKyAgICB7KGludClLU19LUywJIltLU10ifSwKKyAgICB7KGludClLU19LRSwJIltLRV0ifSwKKyAgICB7KGludClLU19USSwJIltUSV0ifSwKKyAgICB7KGludClLU19URSwJIltURV0ifSwKKyAgICB7KGludClLU19DSVMsCSJbQ0lTXSJ9LAorICAgIHsoaW50KUtTX0NJRSwJIltDSUVdIn0sCisgICAgeyhpbnQpS1NfVFMsCSJbVFNdIn0sCisgICAgeyhpbnQpS1NfRlMsCSJbRlNdIn0sCisjICBpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NXUywJIlslcDElZENXUyVwMiVkXSJ9LAorICAgIHsoaW50KUtTX0NXUCwJIlslcDElZENXUCVwMiVkXSJ9LAorIyAgZWxzZQorICAgIHsoaW50KUtTX0NXUywJIlslZENXUyVkXSJ9LAorICAgIHsoaW50KUtTX0NXUCwJIlslZENXUCVkXSJ9LAorIyAgZW5kaWYKKyAgICB7KGludClLU19DUlYsCSJbQ1JWXSJ9LAorICAgIHtLX1VQLAkJIltLVV0ifSwKKyAgICB7S19ET1dOLAkJIltLRF0ifSwKKyAgICB7S19MRUZULAkJIltLTF0ifSwKKyAgICB7S19SSUdIVCwJCSJbS1JdIn0sCisgICAge0tfU19VUCwJCSJbUy1LVV0ifSwKKyAgICB7S19TX0RPV04sCQkiW1MtS0RdIn0sCisgICAge0tfU19MRUZULAkJIltTLUtMXSJ9LAorICAgIHtLX0NfTEVGVCwJCSJbQy1LTF0ifSwKKyAgICB7S19TX1JJR0hULAkJIltTLUtSXSJ9LAorICAgIHtLX0NfUklHSFQsCQkiW0MtS1JdIn0sCisgICAge0tfRjEsCQkiW0YxXSJ9LAorICAgIHtLX1hGMSwJCSJbeEYxXSJ9LAorICAgIHtLX0YyLAkJIltGMl0ifSwKKyAgICB7S19YRjIsCQkiW3hGMl0ifSwKKyAgICB7S19GMywJCSJbRjNdIn0sCisgICAge0tfWEYzLAkJIlt4RjNdIn0sCisgICAge0tfRjQsCQkiW0Y0XSJ9LAorICAgIHtLX1hGNCwJCSJbeEY0XSJ9LAorICAgIHtLX0Y1LAkJIltGNV0ifSwKKyAgICB7S19GNiwJCSJbRjZdIn0sCisgICAge0tfRjcsCQkiW0Y3XSJ9LAorICAgIHtLX0Y4LAkJIltGOF0ifSwKKyAgICB7S19GOSwJCSJbRjldIn0sCisgICAge0tfRjEwLAkJIltGMTBdIn0sCisgICAge0tfRjExLAkJIltGMTFdIn0sCisgICAge0tfRjEyLAkJIltGMTJdIn0sCisgICAge0tfU19GMSwJCSJbUy1GMV0ifSwKKyAgICB7S19TX1hGMSwJCSJbUy14RjFdIn0sCisgICAge0tfU19GMiwJCSJbUy1GMl0ifSwKKyAgICB7S19TX1hGMiwJCSJbUy14RjJdIn0sCisgICAge0tfU19GMywJCSJbUy1GM10ifSwKKyAgICB7S19TX1hGMywJCSJbUy14RjNdIn0sCisgICAge0tfU19GNCwJCSJbUy1GNF0ifSwKKyAgICB7S19TX1hGNCwJCSJbUy14RjRdIn0sCisgICAge0tfU19GNSwJCSJbUy1GNV0ifSwKKyAgICB7S19TX0Y2LAkJIltTLUY2XSJ9LAorICAgIHtLX1NfRjcsCQkiW1MtRjddIn0sCisgICAge0tfU19GOCwJCSJbUy1GOF0ifSwKKyAgICB7S19TX0Y5LAkJIltTLUY5XSJ9LAorICAgIHtLX1NfRjEwLAkJIltTLUYxMF0ifSwKKyAgICB7S19TX0YxMSwJCSJbUy1GMTFdIn0sCisgICAge0tfU19GMTIsCQkiW1MtRjEyXSJ9LAorICAgIHtLX0hFTFAsCQkiW0hFTFBdIn0sCisgICAge0tfVU5ETywJCSJbVU5ET10ifSwKKyAgICB7S19CUywJCSJbQlNdIn0sCisgICAge0tfSU5TLAkJIltJTlNdIn0sCisgICAge0tfS0lOUywJCSJbS0lOU10ifSwKKyAgICB7S19ERUwsCQkiW0RFTF0ifSwKKyAgICB7S19LREVMLAkJIltLREVMXSJ9LAorICAgIHtLX0hPTUUsCQkiW0hPTUVdIn0sCisgICAge0tfU19IT01FLAkJIltDLUhPTUVdIn0sCisgICAge0tfQ19IT01FLAkJIltDLUhPTUVdIn0sCisgICAge0tfS0hPTUUsCQkiW0tIT01FXSJ9LAorICAgIHtLX1hIT01FLAkJIltYSE9NRV0ifSwKKyAgICB7S19FTkQsCQkiW0VORF0ifSwKKyAgICB7S19TX0VORCwJCSJbQy1FTkRdIn0sCisgICAge0tfQ19FTkQsCQkiW0MtRU5EXSJ9LAorICAgIHtLX0tFTkQsCQkiW0tFTkRdIn0sCisgICAge0tfWEVORCwJCSJbWEVORF0ifSwKKyAgICB7S19QQUdFVVAsCQkiW1BBR0VVUF0ifSwKKyAgICB7S19QQUdFRE9XTiwJIltQQUdFRE9XTl0ifSwKKyAgICB7S19LUEFHRVVQLAkJIltLUEFHRVVQXSJ9LAorICAgIHtLX0tQQUdFRE9XTiwJIltLUEFHRURPV05dIn0sCisgICAge0tfTU9VU0UsCQkiW01PVVNFXSJ9LAorICAgIHtLX0tQTFVTLAkJIltLUExVU10ifSwKKyAgICB7S19LTUlOVVMsCQkiW0tNSU5VU10ifSwKKyAgICB7S19LRElWSURFLAkJIltLRElWSURFXSJ9LAorICAgIHtLX0tNVUxUSVBMWSwJIltLTVVMVElQTFldIn0sCisgICAge0tfS0VOVEVSLAkJIltLRU5URVJdIn0sCisgICAge0tfS1BPSU5ULAkJIltLUE9JTlRdIn0sCisgICAge0tfSzAsCQkiW0swXSJ9LAorICAgIHtLX0sxLAkJIltLMV0ifSwKKyAgICB7S19LMiwJCSJbSzJdIn0sCisgICAge0tfSzMsCQkiW0szXSJ9LAorICAgIHtLX0s0LAkJIltLNF0ifSwKKyAgICB7S19LNSwJCSJbSzVdIn0sCisgICAge0tfSzYsCQkiW0s2XSJ9LAorICAgIHtLX0s3LAkJIltLN10ifSwKKyAgICB7S19LOCwJCSJbSzhdIn0sCisgICAge0tfSzksCQkiW0s5XSJ9LAorIyBlbmRpZgorCisjZW5kaWYgLyogTk9fQlVJTFRJTl9UQ0FQUyAqLworCisvKgorICogVGhlIG1vc3QgbWluaW1hbCB0ZXJtaW5hbDogb25seSBjbGVhciBzY3JlZW4gYW5kIGN1cnNvciBwb3NpdGlvbmluZworICogQWx3YXlzIGluY2x1ZGVkLgorICovCisgICAgeyhpbnQpS1NfTkFNRSwJImR1bWIifSwKKyAgICB7KGludClLU19DTCwJIlwwMTQifSwKKyNpZmRlZiBURVJNSU5GTworICAgIHsoaW50KUtTX0NNLAlJRl9FQigiXDAzM1slaSVwMSVkOyVwMiVkSCIsCisJCQkJCQkgIEVTQ19TVFIgIlslaSVwMSVkOyVwMiVkSCIpfSwKKyNlbHNlCisgICAgeyhpbnQpS1NfQ00sCUlGX0VCKCJcMDMzWyVpJWQ7JWRIIiwgRVNDX1NUUiAiWyVpJWQ7JWRIIil9LAorI2VuZGlmCisKKy8qCisgKiBlbmQgbWFya2VyCisgKi8KKyAgICB7KGludClLU19OQU1FLAlOVUxMfQorCit9OwkvKiBlbmQgb2YgYnVpbHRpbl90ZXJtY2FwcyAqLworCisvKgorICogREVGQVVMVF9URVJNIGlzIHVzZWQsIHdoZW4gbm8gdGVybWluYWwgaXMgc3BlY2lmaWVkIHdpdGggLVQgb3B0aW9uIG9yICRURVJNLgorICovCisjaWZkZWYgUklTQ09TCisjIGRlZmluZSBERUZBVUxUX1RFUk0JKGNoYXJfdSAqKSJyaXNjb3MiCisjZW5kaWYKKworI2lmZGVmIEFNSUdBCisjIGRlZmluZSBERUZBVUxUX1RFUk0JKGNoYXJfdSAqKSJhbWlnYSIKKyNlbmRpZgorCisjaWZkZWYgTVNXSU4KKyMgZGVmaW5lIERFRkFVTFRfVEVSTQkoY2hhcl91ICopIndpbjMyIgorI2VuZGlmCisKKyNpZmRlZiBNU0RPUworIyBkZWZpbmUgREVGQVVMVF9URVJNCShjaGFyX3UgKikicGN0ZXJtIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVOSVgpICYmICFkZWZpbmVkKF9fTUlOVF9fKQorIyBkZWZpbmUgREVGQVVMVF9URVJNCShjaGFyX3UgKikiYW5zaSIKKyNlbmRpZgorCisjaWZkZWYgX19NSU5UX18KKyMgZGVmaW5lIERFRkFVTFRfVEVSTQkoY2hhcl91ICopInZ0NTIiCisjZW5kaWYKKworI2lmZGVmIF9fRU1YX18KKyMgZGVmaW5lIERFRkFVTFRfVEVSTQkoY2hhcl91ICopIm9zMmFuc2kiCisjZW5kaWYKKworI2lmZGVmIFZNUworIyBkZWZpbmUgREVGQVVMVF9URVJNCShjaGFyX3UgKikidnQzMjAiCisjZW5kaWYKKworI2lmZGVmIF9fQkVPU19fCisjIHVuZGVmIERFRkFVTFRfVEVSTQorIyBkZWZpbmUgREVGQVVMVF9URVJNCShjaGFyX3UgKikiYmVvcy1hbnNpIgorI2VuZGlmCisKKyNpZm5kZWYgREVGQVVMVF9URVJNCisjIGRlZmluZSBERUZBVUxUX1RFUk0JKGNoYXJfdSAqKSJkdW1iIgorI2VuZGlmCisKKy8qCisgKiBUZXJtX3N0cmluZ3MgY29udGFpbnMgY3VycmVudGx5IHVzZWQgdGVybWluYWwgb3V0cHV0IHN0cmluZ3MuCisgKiBJdCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBieSBwYXJzZV9idWlsdGluX3RjYXAoKS4KKyAqIFRoZSB2YWx1ZXMgY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyB0aGUgb3B0aW9uIHdpdGggdGhlIHNhbWUgbmFtZS4KKyAqLworY2hhcl91ICoodGVybV9zdHJpbmdzWyhpbnQpS1NfTEFTVCArIDFdKTsKKworc3RhdGljIGludAluZWVkX2dhdGhlciA9IEZBTFNFOwkJLyogbmVlZCB0byBmaWxsIHRlcm1sZWFkZXJbXSAqLworc3RhdGljIGNoYXJfdQl0ZXJtbGVhZGVyWzI1NiArIDFdOwkJLyogZm9yIGNoZWNrX3Rlcm1jb2RlKCkgKi8KKyNpZmRlZiBGRUFUX1RFUk1SRVNQT05TRQorc3RhdGljIGludAljaGVja19mb3JfY29kZXMgPSBGQUxTRTsJLyogY2hlY2sgZm9yIGtleSBjb2RlIHJlcG9uc2UgKi8KKyNlbmRpZgorCisgICAgc3RhdGljIHN0cnVjdCBidWlsdGluX3Rlcm0gKgorZmluZF9idWlsdGluX3Rlcm0odGVybSkKKyAgICBjaGFyX3UJKnRlcm07Cit7CisgICAgc3RydWN0IGJ1aWx0aW5fdGVybSAqcDsKKworICAgIHAgPSBidWlsdGluX3Rlcm1jYXBzOworICAgIHdoaWxlIChwLT5idF9zdHJpbmcgIT0gTlVMTCkKKyAgICB7CisJaWYgKHAtPmJ0X2VudHJ5ID09IChpbnQpS1NfTkFNRSkKKwl7CisjaWZkZWYgVU5JWAorCSAgICBpZiAoU1RSQ01QKHAtPmJ0X3N0cmluZywgImlyaXMtYW5zaSIpID09IDAgJiYgdmltX2lzX2lyaXModGVybSkpCisJCXJldHVybiBwOworCSAgICBlbHNlIGlmIChTVFJDTVAocC0+YnRfc3RyaW5nLCAieHRlcm0iKSA9PSAwICYmIHZpbV9pc194dGVybSh0ZXJtKSkKKwkJcmV0dXJuIHA7CisJICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIFZNUworCQlpZiAoU1RSQ01QKHAtPmJ0X3N0cmluZywgInZ0MzIwIikgPT0gMCAmJiB2aW1faXNfdnQzMDAodGVybSkpCisJCSAgICByZXR1cm4gcDsKKwkJZWxzZQorI2VuZGlmCisJCSAgaWYgKFNUUkNNUCh0ZXJtLCBwLT5idF9zdHJpbmcpID09IDApCisJCSAgICByZXR1cm4gcDsKKwl9CisJKytwOworICAgIH0KKyAgICByZXR1cm4gcDsKK30KKworLyoKKyAqIFBhcnNpbmcgb2YgdGhlIGJ1aWx0aW4gdGVybWNhcCBlbnRyaWVzLgorICogQ2FsbGVyIHNob3VsZCBjaGVjayBpZiAnbmFtZScgaXMgYSB2YWxpZCBidWlsdGluIHRlcm0uCisgKiBUaGUgdGVybWluYWwncyBuYW1lIGlzIG5vdCBzZXQsIGFzIHRoaXMgaXMgYWxyZWFkeSBkb25lIGluIHRlcm1jYXBpbml0KCkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorcGFyc2VfYnVpbHRpbl90Y2FwKHRlcm0pCisgICAgY2hhcl91ICAqdGVybTsKK3sKKyAgICBzdHJ1Y3QgYnVpbHRpbl90ZXJtCSAgICAqcDsKKyAgICBjaGFyX3UJCSAgICBuYW1lWzJdOworICAgIGludAkJCSAgICB0ZXJtXzhiaXQ7CisKKyAgICBwID0gZmluZF9idWlsdGluX3Rlcm0odGVybSk7CisgICAgdGVybV84Yml0ID0gdGVybV9pc184Yml0KHRlcm0pOworCisgICAgLyogRG8gbm90IHBhcnNlIGlmIGJ1aWx0aW4gdGVybSBub3QgZm91bmQgKi8KKyAgICBpZiAocC0+YnRfc3RyaW5nID09IE5VTEwpCisJcmV0dXJuOworCisgICAgZm9yICgrK3A7IHAtPmJ0X2VudHJ5ICE9IChpbnQpS1NfTkFNRSAmJiBwLT5idF9lbnRyeSAhPSBCVF9FWFRSQV9LRVlTOyArK3ApCisgICAgeworCWlmICgoaW50KXAtPmJ0X2VudHJ5ID49IDApCS8qIEtTX3h4IGVudHJ5ICovCisJeworCSAgICAvKiBPbmx5IHNldCB0aGUgdmFsdWUgaWYgaXQgd2Fzbid0IHNldCB5ZXQuICovCisJICAgIGlmICh0ZXJtX3N0cmluZ3NbcC0+YnRfZW50cnldID09IE5VTEwKKwkJCQkgfHwgdGVybV9zdHJpbmdzW3AtPmJ0X2VudHJ5XSA9PSBlbXB0eV9vcHRpb24pCisJICAgIHsKKwkJLyogOGJpdCB0ZXJtaW5hbDogdXNlIENTSSBpbnN0ZWFkIG9mIDxFc2M+WyAqLworCQlpZiAodGVybV84Yml0ICYmIHRlcm1fN3RvOGJpdCgoY2hhcl91ICopcC0+YnRfc3RyaW5nKSAhPSAwKQorCQl7CisJCSAgICBjaGFyX3UgICpzLCAqdDsKKworCQkgICAgcyA9IHZpbV9zdHJzYXZlKChjaGFyX3UgKilwLT5idF9zdHJpbmcpOworCQkgICAgaWYgKHMgIT0gTlVMTCkKKwkJICAgIHsKKwkJCWZvciAodCA9IHM7ICp0OyArK3QpCisJCQkgICAgaWYgKHRlcm1fN3RvOGJpdCh0KSkKKwkJCSAgICB7CisJCQkJKnQgPSB0ZXJtXzd0bzhiaXQodCk7CisJCQkJU1RSQ1BZKHQgKyAxLCB0ICsgMik7CisJCQkgICAgfQorCQkJdGVybV9zdHJpbmdzW3AtPmJ0X2VudHJ5XSA9IHM7CisJCQlzZXRfdGVybV9vcHRpb25fYWxsb2NlZCgmdGVybV9zdHJpbmdzW3AtPmJ0X2VudHJ5XSk7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQkgICAgdGVybV9zdHJpbmdzW3AtPmJ0X2VudHJ5XSA9IChjaGFyX3UgKilwLT5idF9zdHJpbmc7CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgbmFtZVswXSA9IEtFWTJURVJNQ0FQMCgoaW50KXAtPmJ0X2VudHJ5KTsKKwkgICAgbmFtZVsxXSA9IEtFWTJURVJNQ0FQMSgoaW50KXAtPmJ0X2VudHJ5KTsKKwkgICAgaWYgKGZpbmRfdGVybWNvZGUobmFtZSkgPT0gTlVMTCkKKwkJYWRkX3Rlcm1jb2RlKG5hbWUsIChjaGFyX3UgKilwLT5idF9zdHJpbmcsIHRlcm1fOGJpdCk7CisJfQorICAgIH0KK30KKyNpZiBkZWZpbmVkKEhBVkVfVEdFVEVOVCkgfHwgZGVmaW5lZChGRUFUX1RFUk1SRVNQT05TRSkKK3N0YXRpYyB2b2lkIHNldF9jb2xvcl9jb3VudCBfX0FSR1MoKGludCBucikpOworCisvKgorICogU2V0IG51bWJlciBvZiBjb2xvcnMuCisgKiBTdG9yZSBpdCBhcyBhIG51bWJlciBpbiB0X2NvbG9ycy4KKyAqIFN0b3JlIGl0IGFzIGEgc3RyaW5nIGluIFRfQ0NPICh1c2luZyBucl9jb2xvcnNbXSkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorc2V0X2NvbG9yX2NvdW50KG5yKQorICAgIGludAkJbnI7Cit7CisgICAgY2hhcl91CW5yX2NvbG9yc1syMF07CQkvKiBzdHJpbmcgZm9yIG51bWJlciBvZiBjb2xvcnMgKi8KKworICAgIHRfY29sb3JzID0gbnI7CisgICAgaWYgKHRfY29sb3JzID4gMSkKKwlzcHJpbnRmKChjaGFyICopbnJfY29sb3JzLCAiJWQiLCB0X2NvbG9ycyk7CisgICAgZWxzZQorCSpucl9jb2xvcnMgPSBOVUw7CisgICAgc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0KChjaGFyX3UgKikidF9DbyIsIC0xLCBucl9jb2xvcnMsIE9QVF9GUkVFKTsKK30KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9UR0VURU5UCitzdGF0aWMgY2hhciAqKGtleV9uYW1lc1tdKSA9Cit7CisjaWZkZWYgRkVBVF9URVJNUkVTUE9OU0UKKyAgICAvKiBEbyB0aGlzIG9uZSBmaXJzdCwgaXQgbWF5IGNhdXNlIGEgc2NyZWVuIHJlZHJhdy4gKi8KKyAgICAiQ28iLAorI2VuZGlmCisgICAgImt1IiwgImtkIiwgImtyIiwgImtsIiwKKyMgaWZkZWYgQVJDSElFCisgICAgInN1IiwgInNkIiwJCS8qIFRlcm1jYXAgY29kZSBtYWRlIHVwISAqLworIyBlbmRpZgorICAgICIjMiIsICIjNCIsICIlaSIsICIqNyIsCisgICAgImsxIiwgImsyIiwgImszIiwgIms0IiwgIms1IiwgIms2IiwKKyAgICAiazciLCAiazgiLCAiazkiLCAiazsiLCAiRjEiLCAiRjIiLAorICAgICIlMSIsICImOCIsICJrYiIsICJrSSIsICJrRCIsICJraCIsCisgICAgIkA3IiwgImtQIiwgImtOIiwgIksxIiwgIkszIiwgIks0IiwgIks1IiwgImtCIiwKKyAgICBOVUxMCit9OworI2VuZGlmCisKKy8qCisgKiBTZXQgdGVybWluYWwgb3B0aW9ucyBmb3IgdGVybWluYWwgInRlcm0iLgorICogUmV0dXJuIE9LIGlmIHRlcm1pbmFsICd0ZXJtJyB3YXMgZm91bmQgaW4gYSB0ZXJtY2FwLCBGQUlMIG90aGVyd2lzZS4KKyAqCisgKiBXaGlsZSBkb2luZyB0aGlzLCB1bnRpbCB0dGVzdCgpLCBzb21lIG9wdGlvbnMgbWF5IGJlIE5VTEwsIGJlIGNhcmVmdWwuCisgKi8KKyAgICBpbnQKK3NldF90ZXJtbmFtZSh0ZXJtKQorICAgIGNoYXJfdSAqdGVybTsKK3sKKyAgICBzdHJ1Y3QgYnVpbHRpbl90ZXJtICp0ZXJtcDsKKyNpZmRlZiBIQVZFX1RHRVRFTlQKKyAgICBpbnQJCWJ1aWx0aW5fZmlyc3QgPSBwX3RiaTsKKyAgICBpbnQJCXRyeTsKKyAgICBpbnQJCXRlcm1jYXBfY2xlYXJlZCA9IEZBTFNFOworI2VuZGlmCisgICAgaW50CQl3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAgY2hhcl91CSplcnJvcl9tc2cgPSBOVUxMOworICAgIGNoYXJfdQkqYnNfcCwgKmRlbF9wOworCisgICAgZGV0ZWN0ZWRfOGJpdCA9IEZBTFNFOwkJLyogcmVzZXQgOC1iaXQgZGV0ZWN0aW9uICovCisKKyAgICBpZiAodGVybV9pc19idWlsdGluKHRlcm0pKQorICAgIHsKKwl0ZXJtICs9IDg7CisjaWZkZWYgSEFWRV9UR0VURU5UCisJYnVpbHRpbl9maXJzdCA9IDE7CisjZW5kaWYKKyAgICB9CisKKy8qCisgKiBJZiBIQVZFX1RHRVRFTlQgaXMgbm90IGRlZmluZWQsIG9ubHkgdGhlIGJ1aWx0aW4gdGVybWNhcCBpcyB1c2VkLCBvdGhlcndpc2U6CisgKiAgIElmIGJ1aWx0aW5fZmlyc3QgaXMgVFJVRToKKyAqICAgICAwLiB0cnkgYnVpbHRpbiB0ZXJtY2FwCisgKiAgICAgMS4gdHJ5IGV4dGVybmFsIHRlcm1jYXAKKyAqICAgICAyLiBpZiBib3RoIGZhaWwgZGVmYXVsdCB0byBhIGJ1aWx0aW4gdGVybWluYWwKKyAqICAgSWYgYnVpbHRpbl9maXJzdCBpcyBGQUxTRToKKyAqICAgICAxLiB0cnkgZXh0ZXJuYWwgdGVybWNhcAorICogICAgIDIuIHRyeSBidWlsdGluIHRlcm1jYXAsIGlmIGJvdGggZmFpbCBkZWZhdWx0IHRvIGEgYnVpbHRpbiB0ZXJtaW5hbAorICovCisjaWZkZWYgSEFWRV9UR0VURU5UCisgICAgZm9yICh0cnkgPSBidWlsdGluX2ZpcnN0ID8gMCA6IDE7IHRyeSA8IDM7ICsrdHJ5KQorICAgIHsKKwkvKgorCSAqIFVzZSBleHRlcm5hbCB0ZXJtY2FwCisJICovCisJaWYgKHRyeSA9PSAxKQorCXsKKwkgICAgY2hhcl91CSAgICAqcDsKKwkgICAgc3RhdGljIGNoYXJfdSAgIHRzdHJidWZbVEJVRlNaXTsKKwkgICAgaW50CQkgICAgaTsKKwkgICAgY2hhcl91CSAgICB0YnVmW1RCVUZTWl07CisJICAgIGNoYXJfdQkgICAgKnRwOworCSAgICBzdGF0aWMgc3RydWN0IHsKKwkJCSAgICBlbnVtIFNwZWNpYWxLZXkgZGVzdDsgLyogaW5kZXggaW4gdGVybV9zdHJpbmdzW10gKi8KKwkJCSAgICBjaGFyICpuYW1lOwkJICAvKiB0ZXJtY2FwIG5hbWUgZm9yIHN0cmluZyAqLworCQkJICB9IHN0cmluZ19uYW1lc1tdID0KKwkJCSAgICB7CXtLU19DRSwgImNlIn0sIHtLU19BTCwgImFsIn0sIHtLU19DQUwsIkFMIn0sCisJCQkJe0tTX0RMLCAiZGwifSwge0tTX0NETCwiREwifSwge0tTX0NTLCAiY3MifSwKKwkJCQl7S1NfQ0wsICJjbCJ9LCB7S1NfQ0QsICJjZCJ9LAorCQkJCXtLU19WSSwgInZpIn0sIHtLU19WRSwgInZlIn0sIHtLU19NQiwgIm1iIn0sCisJCQkJe0tTX1ZTLCAidnMifSwge0tTX01FLCAibWUifSwge0tTX01SLCAibXIifSwKKwkJCQl7S1NfTUQsICJtZCJ9LCB7S1NfU0UsICJzZSJ9LCB7S1NfU08sICJzbyJ9LAorCQkJCXtLU19DWkgsIlpIIn0sIHtLU19DWlIsIlpSIn0sIHtLU19VRSwgInVlIn0sCisJCQkJe0tTX1VTLCAidXMifSwge0tTX0NNLCAiY20ifSwge0tTX1NSLCAic3IifSwKKwkJCQl7S1NfQ1JJLCJSSSJ9LCB7S1NfVkIsICJ2YiJ9LCB7S1NfS1MsICJrcyJ9LAorCQkJCXtLU19LRSwgImtlIn0sIHtLU19USSwgInRpIn0sIHtLU19URSwgInRlIn0sCisJCQkJe0tTX0JDLCAiYmMifSwge0tTX0NTQiwiU2IifSwge0tTX0NTRiwiU2YifSwKKwkJCQl7S1NfQ0FCLCJBQiJ9LCB7S1NfQ0FGLCJBRiJ9LCB7S1NfTEUsICJsZSJ9LAorCQkJCXtLU19ORCwgIm5kIn0sIHtLU19PUCwgIm9wIn0sIHtLU19DUlYsICJSViJ9LAorCQkJCXtLU19DSVMsICJJUyJ9LCB7S1NfQ0lFLCAiSUUifSwKKwkJCQl7S1NfVFMsICJ0cyJ9LCB7S1NfRlMsICJmcyJ9LAorCQkJCXtLU19DV1AsICJXUCJ9LCB7S1NfQ1dTLCAiV1MifSwKKwkJCQl7KGVudW0gU3BlY2lhbEtleSkwLCBOVUxMfQorCQkJICAgIH07CisKKwkgICAgLyoKKwkgICAgICogSWYgdGhlIGV4dGVybmFsIHRlcm1jYXAgZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIGVudHJ5LCB0cnkgdGhlCisJICAgICAqIGJ1aWx0aW4gb25lcy4KKwkgICAgICovCisJICAgIGlmICgoZXJyb3JfbXNnID0gdGdldGVudF9lcnJvcih0YnVmLCB0ZXJtKSkgPT0gTlVMTCkKKwkgICAgeworCQl0cCA9IHRzdHJidWY7CisJCWlmICghdGVybWNhcF9jbGVhcmVkKQorCQl7CisJCSAgICBjbGVhcl90ZXJtb3B0aW9ucygpOwkvKiBjbGVhciBvbGQgb3B0aW9ucyAqLworCQkgICAgdGVybWNhcF9jbGVhcmVkID0gVFJVRTsKKwkJfQorCisJICAgIC8qIGdldCBvdXRwdXQgc3RyaW5ncyAqLworCQlmb3IgKGkgPSAwOyBzdHJpbmdfbmFtZXNbaV0ubmFtZSAhPSBOVUxMOyArK2kpCisJCXsKKwkJICAgIGlmICh0ZXJtX3N0cihzdHJpbmdfbmFtZXNbaV0uZGVzdCkgPT0gTlVMTAorCQkJICAgIHx8IHRlcm1fc3RyKHN0cmluZ19uYW1lc1tpXS5kZXN0KSA9PSBlbXB0eV9vcHRpb24pCisJCQl0ZXJtX3N0cihzdHJpbmdfbmFtZXNbaV0uZGVzdCkgPQorCQkJCQkgICBUR0VUU1RSKHN0cmluZ19uYW1lc1tpXS5uYW1lLCAmdHApOworCQl9CisKKwkJLyogdGdldGZsYWcoKSByZXR1cm5zIDEgaWYgdGhlIGZsYWcgaXMgcHJlc2VudCwgMCBpZiBub3QgYW5kCisJCSAqIHBvc3NpYmx5IC0xIGlmIHRoZSBmbGFnIGRvZXNuJ3QgZXhpc3QuICovCisJCWlmICgoVF9NUyA9PSBOVUxMIHx8IFRfTVMgPT0gZW1wdHlfb3B0aW9uKQorCQkJCQkJCSYmIHRnZXRmbGFnKCJtcyIpID4gMCkKKwkJICAgIFRfTVMgPSAoY2hhcl91ICopInkiOworCQlpZiAoKFRfWFMgPT0gTlVMTCB8fCBUX1hTID09IGVtcHR5X29wdGlvbikKKwkJCQkJCQkmJiB0Z2V0ZmxhZygieHMiKSA+IDApCisJCSAgICBUX1hTID0gKGNoYXJfdSAqKSJ5IjsKKwkJaWYgKChUX0RCID09IE5VTEwgfHwgVF9EQiA9PSBlbXB0eV9vcHRpb24pCisJCQkJCQkJJiYgdGdldGZsYWcoImRiIikgPiAwKQorCQkgICAgVF9EQiA9IChjaGFyX3UgKikieSI7CisJCWlmICgoVF9EQSA9PSBOVUxMIHx8IFRfREEgPT0gZW1wdHlfb3B0aW9uKQorCQkJCQkJCSYmIHRnZXRmbGFnKCJkYSIpID4gMCkKKwkJICAgIFRfREEgPSAoY2hhcl91ICopInkiOworCQlpZiAoKFRfVVQgPT0gTlVMTCB8fCBUX1VUID09IGVtcHR5X29wdGlvbikKKwkJCQkJCQkmJiB0Z2V0ZmxhZygidXQiKSA+IDApCisJCSAgICBUX1VUID0gKGNoYXJfdSAqKSJ5IjsKKworCisJCS8qCisJCSAqIGdldCBrZXkgY29kZXMKKwkJICovCisJCWZvciAoaSA9IDA7IGtleV9uYW1lc1tpXSAhPSBOVUxMOyArK2kpCisJCXsKKwkJICAgIGlmIChmaW5kX3Rlcm1jb2RlKChjaGFyX3UgKilrZXlfbmFtZXNbaV0pID09IE5VTEwpCisJCSAgICB7CisJCQlwID0gVEdFVFNUUihrZXlfbmFtZXNbaV0sICZ0cCk7CisJCQkvKiBpZiBjdXJzb3ItbGVmdCA9PSBiYWNrc3BhY2UsIGlnbm9yZSBpdCAodGVsZXZpZGVvCisJCQkgKiA5MjUpICovCisJCQlpZiAocCAhPSBOVUxMCisJCQkJJiYgKCpwICE9IEN0cmxfSAorCQkJCSAgICB8fCBrZXlfbmFtZXNbaV1bMF0gIT0gJ2snCisJCQkJICAgIHx8IGtleV9uYW1lc1tpXVsxXSAhPSAnbCcpKQorCQkJICAgIGFkZF90ZXJtY29kZSgoY2hhcl91ICopa2V5X25hbWVzW2ldLCBwLCBGQUxTRSk7CisJCSAgICB9CisJCX0KKworCQlpZiAoaGVpZ2h0ID09IDApCisJCSAgICBoZWlnaHQgPSB0Z2V0bnVtKCJsaSIpOworCQlpZiAod2lkdGggPT0gMCkKKwkJICAgIHdpZHRoID0gdGdldG51bSgiY28iKTsKKworCQkvKgorCQkgKiBHZXQgbnVtYmVyIG9mIGNvbG9ycyAoaWYgbm90IGRvbmUgYWxyZWFkeSkuCisJCSAqLworCQlpZiAodGVybV9zdHIoS1NfQ0NPKSA9PSBOVUxMCisJCQl8fCB0ZXJtX3N0cihLU19DQ08pID09IGVtcHR5X29wdGlvbikKKwkJICAgIHNldF9jb2xvcl9jb3VudCh0Z2V0bnVtKCJDbyIpKTsKKworIyBpZm5kZWYgaHB1eAorCQlCQyA9IChjaGFyICopVEdFVFNUUigiYmMiLCAmdHApOworCQlVUCA9IChjaGFyICopVEdFVFNUUigidXAiLCAmdHApOworCQlwID0gVEdFVFNUUigicGMiLCAmdHApOworCQlpZiAocCkKKwkJICAgIFBDID0gKnA7CisjIGVuZGlmIC8qIGhwdXggKi8KKwkgICAgfQorCX0KKwllbHNlCSAgICAvKiB0cnkgPT0gMCB8fCB0cnkgPT0gMiAqLworI2VuZGlmIC8qIEhBVkVfVEdFVEVOVCAqLworCS8qCisJICogVXNlIGJ1aWx0aW4gdGVybWNhcAorCSAqLworCXsKKyNpZmRlZiBIQVZFX1RHRVRFTlQKKwkgICAgLyoKKwkgICAgICogSWYgYnVpbHRpbiB0ZXJtY2FwIHdhcyBhbHJlYWR5IHVzZWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2VhcmNoCisJICAgICAqIGZvciB0aGUgYnVpbHRpbiB0ZXJtY2FwIGFnYWluLCBxdWl0IG5vdy4KKwkgICAgICovCisJICAgIGlmICh0cnkgPT0gMiAmJiBidWlsdGluX2ZpcnN0ICYmIHRlcm1jYXBfY2xlYXJlZCkKKwkJYnJlYWs7CisjZW5kaWYKKwkgICAgLyoKKwkgICAgICogc2VhcmNoIGZvciAndGVybScgaW4gYnVpbHRpbl90ZXJtY2Fwc1tdCisJICAgICAqLworCSAgICB0ZXJtcCA9IGZpbmRfYnVpbHRpbl90ZXJtKHRlcm0pOworCSAgICBpZiAodGVybXAtPmJ0X3N0cmluZyA9PSBOVUxMKQkvKiBkaWQgbm90IGZpbmQgaXQgKi8KKwkgICAgeworI2lmZGVmIEhBVkVfVEdFVEVOVAorCQkvKgorCQkgKiBJZiB0cnkgPT0gMCwgZmlyc3QgdHJ5IHRoZSBleHRlcm5hbCB0ZXJtY2FwLiBJZiB0aGF0IGlzIG5vdAorCQkgKiBmb3VuZCB3ZSdsbCBnZXQgYmFjayBoZXJlIHdpdGggdHJ5ID09IDIuCisJCSAqIElmIHRlcm1jYXBfY2xlYXJlZCBpcyBzZXQgd2UgdXNlZCB0aGUgZXh0ZXJuYWwgdGVybWNhcCwKKwkJICogZG9uJ3QgY29tcGxhaW4gYWJvdXQgbm90IGZpbmRpbmcgdGhlIHRlcm0gaW4gdGhlIGJ1aWx0aW4KKwkJICogdGVybWNhcC4KKwkJICovCisJCWlmICh0cnkgPT0gMCkJCQkvKiB0cnkgZXh0ZXJuYWwgb25lICovCisJCSAgICBjb250aW51ZTsKKwkJaWYgKHRlcm1jYXBfY2xlYXJlZCkJCS8qIGZvdW5kIGluIGV4dGVybmFsIHRlcm1jYXAgKi8KKwkJICAgIGJyZWFrOworI2VuZGlmCisKKwkJbWNoX2Vycm1zZygiXHJcbiIpOworCQlpZiAoZXJyb3JfbXNnICE9IE5VTEwpCisJCXsKKwkJICAgIG1jaF9lcnJtc2coKGNoYXIgKillcnJvcl9tc2cpOworCQkgICAgbWNoX2Vycm1zZygiXHJcbiIpOworCQl9CisJCW1jaF9lcnJtc2coIiciKTsKKwkJbWNoX2Vycm1zZygoY2hhciAqKXRlcm0pOworCQltY2hfZXJybXNnKF8oIicgbm90IGtub3duLiBBdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgYXJlOiIpKTsKKwkJbWNoX2Vycm1zZygiXHJcbiIpOworCQlmb3IgKHRlcm1wID0gJihidWlsdGluX3Rlcm1jYXBzWzBdKTsgdGVybXAtPmJ0X3N0cmluZyAhPSBOVUxMOworCQkJCQkJCQkgICAgICArK3Rlcm1wKQorCQl7CisJCSAgICBpZiAodGVybXAtPmJ0X2VudHJ5ID09IChpbnQpS1NfTkFNRSkKKwkJICAgIHsKKyNpZmRlZiBIQVZFX1RHRVRFTlQKKwkJCW1jaF9lcnJtc2coIiAgICBidWlsdGluXyIpOworI2Vsc2UKKwkJCW1jaF9lcnJtc2coIiAgICAiKTsKKyNlbmRpZgorCQkJbWNoX2Vycm1zZyh0ZXJtcC0+YnRfc3RyaW5nKTsKKwkJCW1jaF9lcnJtc2coIlxyXG4iKTsKKwkJICAgIH0KKwkJfQorCQkvKiB3aGVuIHVzZXIgdHlwZWQgOnNldCB0ZXJtPXh4eCwgcXVpdCBoZXJlICovCisJCWlmIChzdGFydGluZyAhPSBOT19TQ1JFRU4pCisJCXsKKwkJICAgIHNjcmVlbl9zdGFydCgpOwkvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKwkJICAgIHdhaXRfcmV0dXJuKFRSVUUpOworCQkgICAgcmV0dXJuIEZBSUw7CisJCX0KKwkJdGVybSA9IERFRkFVTFRfVEVSTTsKKwkJbWNoX2Vycm1zZyhfKCJkZWZhdWx0aW5nIHRvICciKSk7CisJCW1jaF9lcnJtc2coKGNoYXIgKil0ZXJtKTsKKwkJbWNoX2Vycm1zZygiJ1xyXG4iKTsKKwkJaWYgKGVtc2dfc2lsZW50ID09IDApCisJCXsKKwkJICAgIHNjcmVlbl9zdGFydCgpOwkvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKwkJICAgIG91dF9mbHVzaCgpOworCQkgICAgdWlfZGVsYXkoMjAwMEwsIFRSVUUpOworCQl9CisJCXNldF9zdHJpbmdfb3B0aW9uX2RpcmVjdCgoY2hhcl91ICopInRlcm0iLCAtMSwgdGVybSwgT1BUX0ZSRUUpOworCQlkaXNwbGF5X2Vycm9ycygpOworCSAgICB9CisJICAgIG91dF9mbHVzaCgpOworI2lmZGVmIEhBVkVfVEdFVEVOVAorCSAgICBpZiAoIXRlcm1jYXBfY2xlYXJlZCkKKwkgICAgeworI2VuZGlmCisJCWNsZWFyX3Rlcm1vcHRpb25zKCk7CSAgICAvKiBjbGVhciBvbGQgb3B0aW9ucyAqLworI2lmZGVmIEhBVkVfVEdFVEVOVAorCQl0ZXJtY2FwX2NsZWFyZWQgPSBUUlVFOworCSAgICB9CisjZW5kaWYKKwkgICAgcGFyc2VfYnVpbHRpbl90Y2FwKHRlcm0pOworI2lmZGVmIEZFQVRfR1VJCisJICAgIGlmICh0ZXJtX2lzX2d1aSh0ZXJtKSkKKwkgICAgeworCQlvdXRfZmx1c2goKTsKKwkJZ3VpX2luaXQoKTsKKwkJLyogSWYgc3RhcnRpbmcgdGhlIEdVSSBmYWlsZWQsIGRvbid0IGRvIGFueSBvZiB0aGUgb3RoZXIKKwkJICogdGhpbmdzIGZvciB0aGlzIHRlcm1pbmFsICovCisJCWlmICghZ3VpLmluX3VzZSkKKwkJICAgIHJldHVybiBGQUlMOworI2lmZGVmIEhBVkVfVEdFVEVOVAorCQlicmVhazsJCS8qIGRvbid0IHRyeSB1c2luZyBleHRlcm5hbCB0ZXJtY2FwICovCisjZW5kaWYKKwkgICAgfQorI2VuZGlmIC8qIEZFQVRfR1VJICovCisJfQorI2lmZGVmIEhBVkVfVEdFVEVOVAorICAgIH0KKyNlbmRpZgorCisvKgorICogc3BlY2lhbDogVGhlcmUgaXMgbm8gaW5mbyBpbiB0aGUgdGVybWNhcCBhYm91dCB3aGV0aGVyIHRoZSBjdXJzb3IKKyAqIHBvc2l0aW9uaW5nIGlzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2NyZWVuIG9yIHRvIHRoZSBzdGFydCBvZiB0aGUKKyAqIHNjcm9sbGluZyByZWdpb24uICBXZSBqdXN0IGd1ZXNzIGhlcmUuIE9ubHkgbXNkb3MgcGN0ZXJtIGlzIGtub3duIHRvIGRvIGl0CisgKiByZWxhdGl2ZS4KKyAqLworICAgIGlmIChTVFJDTVAodGVybSwgInBjdGVybSIpID09IDApCisJVF9DQ1MgPSAoY2hhcl91ICopInllcyI7CisgICAgZWxzZQorCVRfQ0NTID0gZW1wdHlfb3B0aW9uOworCisjaWZkZWYgVU5JWAorLyoKKyAqIEFueSAic3R0eSIgc2V0dGluZ3Mgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZm9yIHRfa2IgZnJvbSB0aGUgdGVybWNhcC4KKyAqIFRoaXMgaXMgaW4gb3NfdW5peC5jLCBiZWNhdXNlIGl0IGRlcGVuZHMgYSBsb3Qgb24gdGhlIHZlcnNpb24gb2YgdW5peCB0aGF0CisgKiBpcyBiZWluZyB1c2VkLgorICogRG9uJ3QgZG8gdGhpcyB3aGVuIHRoZSBHVUkgaXMgYWN0aXZlLCBpdCB1c2VzICJ0X2tiIiBhbmQgInRfa0QiIGRpcmVjdGx5LgorICovCisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoIWd1aS5pbl91c2UpCisjZW5kaWYKKwlnZXRfc3R0eSgpOworI2VuZGlmCisKKy8qCisgKiBJZiB0aGUgdGVybWNhcCBoYXMgbm8gZW50cnkgZm9yICdicycgYW5kL29yICdkZWwnIGFuZCB0aGUgaW9jdGwoKSBhbHNvCisgKiBkaWRuJ3Qgd29yaywgdXNlIHRoZSBkZWZhdWx0IENUUkwtSAorICogVGhlIGRlZmF1bHQgZm9yIHRfa0QgaXMgREVMLCB1bmxlc3MgdF9rYiBpcyBERUwuCisgKiBUaGUgdmltX3N0cnNhdmUnZCBzdHJpbmdzIGFyZSBwcm9iYWJseSBsb3N0IGZvcmV2ZXIsIHdlbGwgaXQncyBvbmx5IHR3bworICogYnl0ZXMuICBEb24ndCBkbyB0aGlzIHdoZW4gdGhlIEdVSSBpcyBhY3RpdmUsIGl0IHVzZXMgInRfa2IiIGFuZCAidF9rRCIKKyAqIGRpcmVjdGx5LgorICovCisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoIWd1aS5pbl91c2UpCisjZW5kaWYKKyAgICB7CisJYnNfcCA9IGZpbmRfdGVybWNvZGUoKGNoYXJfdSAqKSJrYiIpOworCWRlbF9wID0gZmluZF90ZXJtY29kZSgoY2hhcl91ICopImtEIik7CisJaWYgKGJzX3AgPT0gTlVMTCB8fCAqYnNfcCA9PSBOVUwpCisJICAgIGFkZF90ZXJtY29kZSgoY2hhcl91ICopImtiIiwgKGJzX3AgPSAoY2hhcl91ICopQ1RSTF9IX1NUUiksIEZBTFNFKTsKKwlpZiAoKGRlbF9wID09IE5VTEwgfHwgKmRlbF9wID09IE5VTCkgJiYKKwkJCQkJICAgIChic19wID09IE5VTEwgfHwgKmJzX3AgIT0gREVMKSkKKwkgICAgYWRkX3Rlcm1jb2RlKChjaGFyX3UgKikia0QiLCAoY2hhcl91ICopREVMX1NUUiwgRkFMU0UpOworICAgIH0KKworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpCisgICAgdGVybV9pc194dGVybSA9IHZpbV9pc194dGVybSh0ZXJtKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NT1VTRQorIyBpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoVk1TKQorIyAgaWZkZWYgRkVBVF9NT1VTRV9UVFkKKyAgICAvKgorICAgICAqIEZvciBVbml4LCBzZXQgdGhlICd0dHltb3VzZScgb3B0aW9uIHRvIHRoZSB0eXBlIG9mIG1vdXNlIHRvIGJlIHVzZWQuCisgICAgICogVGhlIHRlcm1jb2RlIGZvciB0aGUgbW91c2UgaXMgYWRkZWQgYXMgYSBzaWRlIGVmZmVjdCBpbiBvcHRpb24uYy4KKyAgICAgKi8KKyAgICB7CisJY2hhcl91CSpwOworCisJcCA9IChjaGFyX3UgKikiIjsKKyMgIGlmZGVmIEZFQVRfTU9VU0VfWFRFUk0KKyMgICBpZmRlZiBGRUFUX0NMSVBCT0FSRAorIyAgICBpZmRlZiBGRUFUX0dVSQorCWlmICghZ3VpLmluX3VzZSkKKyMgICAgZW5kaWYKKwkgICAgY2xpcF9pbml0KEZBTFNFKTsKKyMgICBlbmRpZgorCWlmICh0ZXJtX2lzX3h0ZXJtKQorCXsKKwkgICAgaWYgKHVzZV94dGVybV9tb3VzZSgpKQorCQlwID0gTlVMTDsJLyoga2VlcCBleGlzdGluZyB2YWx1ZSwgbWlnaHQgYmUgInh0ZXJtMiIgKi8KKwkgICAgZWxzZQorCQlwID0gKGNoYXJfdSAqKSJ4dGVybSI7CisJfQorIyAgZW5kaWYKKwlpZiAocCAhPSBOVUxMKQorCSAgICBzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikidHR5bSIsIDBMLCBwLCAwKTsKKwlpZiAocCA9PSBOVUxMCisjICAgaWZkZWYgRkVBVF9HVUkKKwkJfHwgZ3VpLmluX3VzZQorIyAgIGVuZGlmCisJCSkKKwkgICAgY2hlY2tfbW91c2VfdGVybWNvZGUoKTsJLyogc2V0IG1vdXNlIHRlcm1jb2RlIGFueXdheSAqLworICAgIH0KKyMgIGVuZGlmCisjIGVsc2UKKyAgICBzZXRfbW91c2VfdGVybWNvZGUoS1NfTU9VU0UsIChjaGFyX3UgKikiXDIzM00iKTsKKyMgZW5kaWYKKyNlbmRpZgkvKiBGRUFUX01PVVNFICovCisKKyNpZmRlZiBGRUFUX1NOSUZGCisgICAgeworCWNoYXJfdQluYW1lWzJdOworCisJbmFtZVswXSA9IChpbnQpS1NfRVhUUkE7CisJbmFtZVsxXSA9IChpbnQpS0VfU05JRkY7CisJYWRkX3Rlcm1jb2RlKG5hbWUsIChjaGFyX3UgKikiXDIzM3NuaWZmIiwgRkFMU0UpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgVVNFX1RFUk1fQ09OU09MRQorICAgIC8qIERFRkFVTFRfVEVSTSBpbmRpY2F0ZXMgdGhhdCBpdCBpcyB0aGUgbWFjaGluZSBjb25zb2xlLiAqLworICAgIGlmIChTVFJDTVAodGVybSwgREVGQVVMVF9URVJNKSAhPSAwKQorCXRlcm1fY29uc29sZSA9IEZBTFNFOworICAgIGVsc2UKKyAgICB7CisJdGVybV9jb25zb2xlID0gVFJVRTsKKyMgaWZkZWYgQU1JR0EKKwl3aW5fcmVzaXplX29uKCk7CS8qIGVuYWJsZSB3aW5kb3cgcmVzaXppbmcgcmVwb3J0cyAqLworIyBlbmRpZgorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykKKyAgICAvKgorICAgICAqICd0dHlmYXN0JyBpcyBkZWZhdWx0IG9uIGZvciB4dGVybSwgaXJpcy1hbnNpIGFuZCBhIGZldyBvdGhlcnMuCisgICAgICovCisgICAgaWYgKHZpbV9pc19mYXN0dGVybSh0ZXJtKSkKKwlwX3RmID0gVFJVRTsKKyNlbmRpZgorI2lmZGVmIFVTRV9URVJNX0NPTlNPTEUKKyAgICAvKgorICAgICAqICd0dHlmYXN0JyBpcyBkZWZhdWx0IG9uIGNvbnNvbGVzCisgICAgICovCisgICAgaWYgKHRlcm1fY29uc29sZSkKKwlwX3RmID0gVFJVRTsKKyNlbmRpZgorCisgICAgdHRlc3QoVFJVRSk7CS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgc2V0IG9mIHRlcm1pbmFsIGNvZGVzICovCisKKyAgICBmdWxsX3NjcmVlbiA9IFRSVUU7CQkvKiB3ZSBjYW4gdXNlIHRlcm1jYXAgY29kZXMgZnJvbSBub3cgb24gKi8KKyAgICBzZXRfdGVybV9kZWZhdWx0cygpOwkvKiB1c2UgY3VycmVudCB2YWx1ZXMgYXMgZGVmYXVsdHMgKi8KKyNpZmRlZiBGRUFUX1RFUk1SRVNQT05TRQorICAgIGNydl9zdGF0dXMgPSBDUlZfR0VUOwkvKiBHZXQgdGVybWluYWwgdmVyc2lvbiBsYXRlciAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEluaXRpYWxpemUgdGhlIHRlcm1pbmFsIHdpdGggdGhlIGFwcHJvcHJpYXRlIHRlcm1jYXAgY29kZXMuCisgICAgICogU2V0IHRoZSBtb3VzZSBhbmQgd2luZG93IHRpdGxlIGlmIHBvc3NpYmxlLgorICAgICAqIERvbid0IGRvIHRoaXMgd2hlbiBzdGFydGluZywgbmVlZCB0byBwYXJzZSB0aGUgLnZpbXJjIGZpcnN0LCBiZWNhdXNlIGl0CisgICAgICogbWF5IHJlZGVmaW5lIHRfVEkgZXRjLgorICAgICAqLworICAgIGlmIChzdGFydGluZyAhPSBOT19TQ1JFRU4pCisgICAgeworCXN0YXJ0dGVybWNhcCgpOwkJLyogbWF5IGNoYW5nZSB0ZXJtaW5hbCBtb2RlICovCisjaWZkZWYgRkVBVF9NT1VTRQorCXNldG1vdXNlKCk7CQkvKiBtYXkgc3RhcnQgdXNpbmcgdGhlIG1vdXNlICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX1RJVExFCisJbWFrZXRpdGxlKCk7CQkvKiBtYXkgZGlzcGxheSB3aW5kb3cgdGl0bGUgKi8KKyNlbmRpZgorICAgIH0KKworCS8qIGRpc3BsYXkgaW5pdGlhbCBzY3JlZW4gYWZ0ZXIgdHRlc3QoKSBjaGVja2luZy4gancuICovCisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCisgICAgeworCS8qIHRlcm1jYXAgZmFpbGVkIHRvIHJlcG9ydCBzaXplICovCisJLyogc2V0IGRlZmF1bHRzLCBpbiBjYXNlIHVpX2dldF9zaGVsbHNpemUoKSBhbHNvIGZhaWxzICovCisJd2lkdGggPSA4MDsKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTjMyNjQpCisJaGVpZ2h0ID0gMjU7CSAgICAvKiBjb25zb2xlIGlzIG9mdGVuIDI1IGxpbmVzICovCisjZWxzZQorCWhlaWdodCA9IDI0OwkgICAgLyogbW9zdCB0ZXJtaW5hbHMgYXJlIDI0IGxpbmVzICovCisjZW5kaWYKKyAgICB9CisgICAgc2V0X3NoZWxsc2l6ZSh3aWR0aCwgaGVpZ2h0LCBGQUxTRSk7CS8qIG1heSBjaGFuZ2UgUm93cyAqLworICAgIGlmIChzdGFydGluZyAhPSBOT19TQ1JFRU4pCisgICAgeworCWlmIChzY3JvbGxfcmVnaW9uKQorCSAgICBzY3JvbGxfcmVnaW9uX3Jlc2V0KCk7CQkvKiBJbiBjYXNlIFJvd3MgY2hhbmdlZCAqLworCWNoZWNrX21hcF9rZXljb2RlcygpOwkvKiBjaGVjayBtYXBwaW5ncyBmb3IgdGVybWluYWwgY29kZXMgdXNlZCAqLworCisjaWZkZWYgRkVBVF9BVVRPQ01ECisJeworCSAgICBidWZfVAkqb2xkX2N1cmJ1ZjsKKworCSAgICAvKgorCSAgICAgKiBFeGVjdXRlIHRoZSBUZXJtQ2hhbmdlZCBhdXRvY29tbWFuZHMgZm9yIGVhY2ggYnVmZmVyIHRoYXQgaXMKKwkgICAgICogbG9hZGVkLgorCSAgICAgKi8KKwkgICAgb2xkX2N1cmJ1ZiA9IGN1cmJ1ZjsKKwkgICAgZm9yIChjdXJidWYgPSBmaXJzdGJ1ZjsgY3VyYnVmICE9IE5VTEw7IGN1cmJ1ZiA9IGN1cmJ1Zi0+Yl9uZXh0KQorCSAgICB7CisJCWlmIChjdXJidWYtPmJfbWwubWxfbWZwICE9IE5VTEwpCisJCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9URVJNQ0hBTkdFRCwgTlVMTCwgTlVMTCwgRkFMU0UsCisJCQkJCQkJCSAgICAgIGN1cmJ1Zik7CisJICAgIH0KKwkgICAgaWYgKGJ1Zl92YWxpZChvbGRfY3VyYnVmKSkKKwkJY3VyYnVmID0gb2xkX2N1cmJ1ZjsKKwl9CisjZW5kaWYKKyAgICB9CisKKyNpZmRlZiBGRUFUX1RFUk1SRVNQT05TRQorICAgIG1heV9yZXFfdGVybXJlc3BvbnNlKCk7CisjZW5kaWYKKworICAgIHJldHVybiBPSzsKK30KKworI2lmIGRlZmluZWQoRkVBVF9NT1VTRSkgfHwgZGVmaW5lZChQUk9UTykKKworIyBpZmRlZiBGRUFUX01PVVNFX1RUWQorIyAgZGVmaW5lIEhNVF9OT1JNQUwJMQorIyAgZGVmaW5lIEhNVF9ORVRURVJNCTIKKyMgIGRlZmluZSBITVRfREVDCTQKKyMgIGRlZmluZSBITVRfSlNCVEVSTQk4CisjICBkZWZpbmUgSE1UX1BURVJNCTE2CitzdGF0aWMgaW50IGhhc19tb3VzZV90ZXJtY29kZSA9IDA7CisjIGVuZGlmCisKKyMgaWYgKCFkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoRkVBVF9NT1VTRV9YVEVSTSkgfHwgZGVmaW5lZChGRUFUX01PVVNFX05FVCkgXAorCXx8IGRlZmluZWQoRkVBVF9NT1VTRV9ERUMpKSB8fCBkZWZpbmVkKEZFQVRfTU9VU0VfSlNCKSBcCisJfHwgZGVmaW5lZChGRUFUX01PVVNFX1BURVJNKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK3NldF9tb3VzZV90ZXJtY29kZShuLCBzKQorICAgIGludAkJbjsJLyogS1NfTU9VU0UsIEtTX05FVFRFUk1fTU9VU0Ugb3IgS1NfREVDX01PVVNFICovCisgICAgY2hhcl91CSpzOworeworICAgIGNoYXJfdQluYW1lWzJdOworCisgICAgbmFtZVswXSA9IG47CisgICAgbmFtZVsxXSA9IEtFX0ZJTExFUjsKKyAgICBhZGRfdGVybWNvZGUobmFtZSwgcywgRkFMU0UpOworIyAgaWZkZWYgRkVBVF9NT1VTRV9UVFkKKyMgICBpZmRlZiBGRUFUX01PVVNFX0pTQgorICAgIGlmIChuID09IEtTX0pTQlRFUk1fTU9VU0UpCisJaGFzX21vdXNlX3Rlcm1jb2RlIHw9IEhNVF9KU0JURVJNOworICAgIGVsc2UKKyMgICBlbmRpZgorIyAgIGlmZGVmIEZFQVRfTU9VU0VfTkVUCisgICAgaWYgKG4gPT0gS1NfTkVUVEVSTV9NT1VTRSkKKwloYXNfbW91c2VfdGVybWNvZGUgfD0gSE1UX05FVFRFUk07CisgICAgZWxzZQorIyAgIGVuZGlmCisjICAgaWZkZWYgRkVBVF9NT1VTRV9ERUMKKyAgICBpZiAobiA9PSBLU19ERUNfTU9VU0UpCisJaGFzX21vdXNlX3Rlcm1jb2RlIHw9IEhNVF9ERUM7CisgICAgZWxzZQorIyAgIGVuZGlmCisjICAgaWZkZWYgRkVBVF9NT1VTRV9QVEVSTQorICAgIGlmIChuID09IEtTX1BURVJNX01PVVNFKQorCWhhc19tb3VzZV90ZXJtY29kZSB8PSBITVRfUFRFUk07CisgICAgZWxzZQorIyAgIGVuZGlmCisJaGFzX21vdXNlX3Rlcm1jb2RlIHw9IEhNVF9OT1JNQUw7CisjICBlbmRpZgorfQorIyBlbmRpZgorCisjIGlmICgoZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykgfHwgZGVmaW5lZChPUzIpKSBcCisJJiYgKGRlZmluZWQoRkVBVF9NT1VTRV9YVEVSTSkgfHwgZGVmaW5lZChGRUFUX01PVVNFX0RFQykgXAorCSAgICB8fCBkZWZpbmVkKEZFQVRfTU9VU0VfR1BNKSB8fCBkZWZpbmVkKEZFQVRfTU9VU0VfUFRFUk0pKSkgXAorCSAgICB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2RlbF9tb3VzZV90ZXJtY29kZShuKQorICAgIGludAkJbjsJLyogS1NfTU9VU0UsIEtTX05FVFRFUk1fTU9VU0Ugb3IgS1NfREVDX01PVVNFICovCit7CisgICAgY2hhcl91CW5hbWVbMl07CisKKyAgICBuYW1lWzBdID0gbjsKKyAgICBuYW1lWzFdID0gS0VfRklMTEVSOworICAgIGRlbF90ZXJtY29kZShuYW1lKTsKKyMgIGlmZGVmIEZFQVRfTU9VU0VfVFRZCisjICAgaWZkZWYgRkVBVF9NT1VTRV9KU0IKKyAgICBpZiAobiA9PSBLU19KU0JURVJNX01PVVNFKQorCWhhc19tb3VzZV90ZXJtY29kZSAmPSB+SE1UX0pTQlRFUk07CisgICAgZWxzZQorIyAgIGVuZGlmCisjICAgaWZkZWYgRkVBVF9NT1VTRV9ORVQKKyAgICBpZiAobiA9PSBLU19ORVRURVJNX01PVVNFKQorCWhhc19tb3VzZV90ZXJtY29kZSAmPSB+SE1UX05FVFRFUk07CisgICAgZWxzZQorIyAgIGVuZGlmCisjICAgaWZkZWYgRkVBVF9NT1VTRV9ERUMKKyAgICBpZiAobiA9PSBLU19ERUNfTU9VU0UpCisJaGFzX21vdXNlX3Rlcm1jb2RlICY9IH5ITVRfREVDOworICAgIGVsc2UKKyMgICBlbmRpZgorIyAgIGlmZGVmIEZFQVRfTU9VU0VfUFRFUk0KKyAgICBpZiAobiA9PSBLU19QVEVSTV9NT1VTRSkKKwloYXNfbW91c2VfdGVybWNvZGUgJj0gfkhNVF9QVEVSTTsKKyAgICBlbHNlCisjICAgZW5kaWYKKwloYXNfbW91c2VfdGVybWNvZGUgJj0gfkhNVF9OT1JNQUw7CisjICBlbmRpZgorfQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1RHRVRFTlQKKy8qCisgKiBDYWxsIHRnZXRlbnQoKQorICogUmV0dXJuIGVycm9yIG1lc3NhZ2UgaWYgaXQgZmFpbHMsIE5VTEwgaWYgaXQncyBPSy4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgordGdldGVudF9lcnJvcih0YnVmLCB0ZXJtKQorICAgIGNoYXJfdSAgKnRidWY7CisgICAgY2hhcl91ICAqdGVybTsKK3sKKyAgICBpbnQJICAgIGk7CisKKyAgICBpID0gVEdFVEVOVCh0YnVmLCB0ZXJtKTsKKyAgICBpZiAoaSA8IDAJCSAgICAvKiAtMSBpcyBhbHdheXMgYW4gZXJyb3IgKi8KKyMgaWZkZWYgVEdFVEVOVF9aRVJPX0VSUgorCSAgICB8fCBpID09IDAJICAgIC8qIHNvbWV0aW1lcyB6ZXJvIGlzIGFsc28gYW4gZXJyb3IgKi8KKyMgZW5kaWYKKyAgICAgICApCisgICAgeworCS8qIE9uIEZyZWVCU0QgdHB1dHMoKSBnZXRzIGEgU0VHViBhZnRlciBhIHRnZXRlbnQoKSB3aGljaCBmYWlscy4gIENhbGwKKwkgKiB0Z2V0ZW50KCkgd2l0aCB0aGUgYWx3YXlzIGV4aXN0aW5nICJkdW1iIiBlbnRyeSB0byBhdm9pZCBhIGNyYXNoIG9yCisJICogaGFuZy4gKi8KKwkodm9pZClUR0VURU5UKHRidWYsICJkdW1iIik7CisKKwlpZiAoaSA8IDApCisjIGlmZGVmIFRHRVRFTlRfWkVST19FUlIKKwkgICAgcmV0dXJuIChjaGFyX3UgKilfKCJFNTU3OiBDYW5ub3Qgb3BlbiB0ZXJtY2FwIGZpbGUiKTsKKwlpZiAoaSA9PSAwKQorIyBlbmRpZgorI2lmZGVmIFRFUk1JTkZPCisJICAgIHJldHVybiAoY2hhcl91ICopXygiRTU1ODogVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1pbmZvIik7CisjZWxzZQorCSAgICByZXR1cm4gKGNoYXJfdSAqKV8oIkU1NTk6IFRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwIik7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBTb21lIHZlcnNpb25zIG9mIHRnZXRzdHIoKSBoYXZlIGJlZW4gcmVwb3J0ZWQgdG8gcmV0dXJuIC0xIGluc3RlYWQgb2YgTlVMTC4KKyAqIEZpeCB0aGF0IGhlcmUuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3ZpbV90Z2V0c3RyKHMsIHBwKQorICAgIGNoYXIJKnM7CisgICAgY2hhcl91CSoqcHA7Cit7CisgICAgY2hhcgkqcDsKKworICAgIHAgPSB0Z2V0c3RyKHMsIChjaGFyICoqKXBwKTsKKyAgICBpZiAocCA9PSAoY2hhciAqKS0xKQorCXAgPSBOVUxMOworICAgIHJldHVybiAoY2hhcl91ICopcDsKK30KKyNlbmRpZiAvKiBIQVZFX1RHRVRFTlQgKi8KKworI2lmIGRlZmluZWQoSEFWRV9UR0VURU5UKSAmJiAoZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKF9fRU1YX18pIHx8IGRlZmluZWQoVk1TKSB8fCBkZWZpbmVkKE1BQ09TX1gpKQorLyoKKyAqIEdldCBDb2x1bW5zIGFuZCBSb3dzIGZyb20gdGhlIHRlcm1jYXAuIFVzZWQgYWZ0ZXIgYSB3aW5kb3cgc2lnbmFsIGlmIHRoZQorICogaW9jdGwoKSBmYWlscy4gSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNhbGwgdGdldGVudCBlYWNoIHRpbWUgaWYgdGhlICJjbyIKKyAqIGFuZCAibGkiIGVudHJpZXMgbmV2ZXIgY2hhbmdlLiBCdXQgb24gc29tZSBzeXN0ZW1zIHRoaXMgd29ya3MuCisgKiBFcnJvcnMgd2hpbGUgZ2V0dGluZyB0aGUgZW50cmllcyBhcmUgaWdub3JlZC4KKyAqLworICAgIHZvaWQKK2dldGxpbmVjb2woY3AsIHJwKQorICAgIGxvbmcJKmNwOwkvKiBwb2ludGVyIHRvIGNvbHVtbnMgKi8KKyAgICBsb25nCSpycDsJLyogcG9pbnRlciB0byByb3dzICovCit7CisgICAgY2hhcl91CXRidWZbVEJVRlNaXTsKKworICAgIGlmIChUX05BTUUgIT0gTlVMTCAmJiAqVF9OQU1FICE9IE5VTCAmJiB0Z2V0ZW50X2Vycm9yKHRidWYsIFRfTkFNRSkgPT0gTlVMTCkKKyAgICB7CisJaWYgKCpjcCA9PSAwKQorCSAgICAqY3AgPSB0Z2V0bnVtKCJjbyIpOworCWlmICgqcnAgPT0gMCkKKwkgICAgKnJwID0gdGdldG51bSgibGkiKTsKKyAgICB9Cit9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1RHRVRFTlQpICYmIGRlZmluZWQoVU5JWCkgKi8KKworLyoKKyAqIEdldCBhIHN0cmluZyBlbnRyeSBmcm9tIHRoZSB0ZXJtY2FwIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgdGVybWNvZGVzLgorICogVXNlZCBmb3IgPHRfeHg+IHNwZWNpYWwga2V5cy4KKyAqIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSBmb3IgZmFpbHVyZSB3aGVuIG5vdCBzb3VyY2luZy4KKyAqIElmIGZvcmNlIGdpdmVuLCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5LgorICogUmV0dXJuIEZBSUwgaWYgdGhlIGVudHJ5IHdhcyBub3QgZm91bmQsIE9LIGlmIHRoZSBlbnRyeSB3YXMgYWRkZWQuCisgKi8KKyAgICBpbnQKK2FkZF90ZXJtY2FwX2VudHJ5KG5hbWUsIGZvcmNlKQorICAgIGNoYXJfdSAgKm5hbWU7CisgICAgaW50CSAgICBmb3JjZTsKK3sKKyAgICBjaGFyX3UgICp0ZXJtOworICAgIGludAkgICAga2V5OworICAgIHN0cnVjdCBidWlsdGluX3Rlcm0gKnRlcm1wOworI2lmZGVmIEhBVkVfVEdFVEVOVAorICAgIGNoYXJfdSAgKnN0cmluZzsKKyAgICBpbnQJICAgIGk7CisgICAgaW50CSAgICBidWlsdGluX2ZpcnN0OworICAgIGNoYXJfdSAgdGJ1ZltUQlVGU1pdOworICAgIGNoYXJfdSAgdHN0cmJ1ZltUQlVGU1pdOworICAgIGNoYXJfdSAgKnRwID0gdHN0cmJ1ZjsKKyAgICBjaGFyX3UgICplcnJvcl9tc2cgPSBOVUxMOworI2VuZGlmCisKKy8qCisgKiBJZiB0aGUgR1VJIGlzIHJ1bm5pbmcgb3Igd2lsbCBzdGFydCBpbiBhIG1vbWVudCwgd2Ugb25seSBzdXBwb3J0IHRoZSBrZXlzCisgKiB0aGF0IHRoZSBHVUkgY2FuIHByb2R1Y2UuCisgKi8KKyNpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlIHx8IGd1aS5zdGFydGluZykKKwlyZXR1cm4gZ3VpX21jaF9oYXNrZXkobmFtZSk7CisjZW5kaWYKKworICAgIGlmICghZm9yY2UgJiYgZmluZF90ZXJtY29kZShuYW1lKSAhPSBOVUxMKQkgICAgLyogaXQncyBhbHJlYWR5IHRoZXJlICovCisJcmV0dXJuIE9LOworCisgICAgdGVybSA9IFRfTkFNRTsKKyAgICBpZiAodGVybSA9PSBOVUxMIHx8ICp0ZXJtID09IE5VTCkJICAgIC8qICd0ZXJtJyBub3QgZGVmaW5lZCB5ZXQgKi8KKwlyZXR1cm4gRkFJTDsKKworICAgIGlmICh0ZXJtX2lzX2J1aWx0aW4odGVybSkpCQkgICAgLyogbmFtZSBzdGFydHMgd2l0aCAiYnVpbHRpbl8iICovCisgICAgeworCXRlcm0gKz0gODsKKyNpZmRlZiBIQVZFX1RHRVRFTlQKKwlidWlsdGluX2ZpcnN0ID0gVFJVRTsKKyNlbmRpZgorICAgIH0KKyNpZmRlZiBIQVZFX1RHRVRFTlQKKyAgICBlbHNlCisJYnVpbHRpbl9maXJzdCA9IHBfdGJpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1RHRVRFTlQKKy8qCisgKiBXZSBjYW4gZ2V0IHRoZSBlbnRyeSBmcm9tIHRoZSBidWlsdGluIHRlcm1jYXAgYW5kIGZyb20gdGhlIGV4dGVybmFsIG9uZS4KKyAqIElmICd0dHlidWlsdGluJyBpcyBvbiBvciB0aGUgdGVybWluYWwgbmFtZSBzdGFydHMgd2l0aCAiYnVpbHRpbl8iLCB0cnkKKyAqIGJ1aWx0aW4gdGVybWNhcCBmaXJzdC4KKyAqIElmICd0dHlidWlsdGluJyBpcyBvZmYsIHRyeSBleHRlcm5hbCB0ZXJtY2FwIGZpcnN0LgorICovCisgICAgZm9yIChpID0gMDsgaSA8IDI7ICsraSkKKyAgICB7CisJaWYgKCFidWlsdGluX2ZpcnN0ID09IGkpCisjZW5kaWYKKwkvKgorCSAqIFNlYXJjaCBpbiBidWlsdGluIHRlcm1jYXAKKwkgKi8KKwl7CisJICAgIHRlcm1wID0gZmluZF9idWlsdGluX3Rlcm0odGVybSk7CisJICAgIGlmICh0ZXJtcC0+YnRfc3RyaW5nICE9IE5VTEwpCS8qIGZvdW5kIGl0ICovCisJICAgIHsKKwkJa2V5ID0gVEVSTUNBUDJLRVkobmFtZVswXSwgbmFtZVsxXSk7CisJCXdoaWxlICh0ZXJtcC0+YnRfZW50cnkgIT0gKGludClLU19OQU1FKQorCQl7CisJCSAgICBpZiAoKGludCl0ZXJtcC0+YnRfZW50cnkgPT0ga2V5KQorCQkgICAgeworCQkJYWRkX3Rlcm1jb2RlKG5hbWUsIChjaGFyX3UgKil0ZXJtcC0+YnRfc3RyaW5nLAorCQkJCQkJCSAgdGVybV9pc184Yml0KHRlcm0pKTsKKwkJCXJldHVybiBPSzsKKwkJICAgIH0KKwkJICAgICsrdGVybXA7CisJCX0KKwkgICAgfQorCX0KKyNpZmRlZiBIQVZFX1RHRVRFTlQKKwllbHNlCisJLyoKKwkgKiBTZWFyY2ggaW4gZXh0ZXJuYWwgdGVybWNhcAorCSAqLworCXsKKwkgICAgZXJyb3JfbXNnID0gdGdldGVudF9lcnJvcih0YnVmLCB0ZXJtKTsKKwkgICAgaWYgKGVycm9yX21zZyA9PSBOVUxMKQorCSAgICB7CisJCXN0cmluZyA9IFRHRVRTVFIoKGNoYXIgKiluYW1lLCAmdHApOworCQlpZiAoc3RyaW5nICE9IE5VTEwgJiYgKnN0cmluZyAhPSBOVUwpCisJCXsKKwkJICAgIGFkZF90ZXJtY29kZShuYW1lLCBzdHJpbmcsIEZBTFNFKTsKKwkJICAgIHJldHVybiBPSzsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHNvdXJjaW5nX25hbWUgPT0gTlVMTCkKKyAgICB7CisjaWZkZWYgSEFWRV9UR0VURU5UCisJaWYgKGVycm9yX21zZyAhPSBOVUxMKQorCSAgICBFTVNHKGVycm9yX21zZyk7CisJZWxzZQorI2VuZGlmCisJICAgIEVNU0cyKF8oIkU0MzY6IE5vIFwiJXNcIiBlbnRyeSBpbiB0ZXJtY2FwIiksIG5hbWUpOworICAgIH0KKyAgICByZXR1cm4gRkFJTDsKK30KKworICAgIHN0YXRpYyBpbnQKK3Rlcm1faXNfYnVpbHRpbihuYW1lKQorICAgIGNoYXJfdSAgKm5hbWU7Cit7CisgICAgcmV0dXJuIChTVFJOQ01QKG5hbWUsICJidWlsdGluXyIsIChzaXplX3QpOCkgPT0gMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0ZXJtaW5hbCAibmFtZSIgdXNlcyBDU0kgaW5zdGVhZCBvZiA8RXNjPlsuCisgKiBBc3N1bWUgdGhhdCB0aGUgdGVybWluYWwgaXMgdXNpbmcgOC1iaXQgY29udHJvbHMgd2hlbiB0aGUgbmFtZSBjb250YWlucworICogIjhiaXQiLCBsaWtlIGluICJ4dGVybS04Yml0Ii4KKyAqLworICAgIGludAordGVybV9pc184Yml0KG5hbWUpCisgICAgY2hhcl91ICAqbmFtZTsKK3sKKyAgICByZXR1cm4gKGRldGVjdGVkXzhiaXQgfHwgc3Ryc3RyKChjaGFyICopbmFtZSwgIjhiaXQiKSAhPSBOVUxMKTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSB0ZXJtaW5hbCBjb250cm9sIGNoYXJzIGZyb20gNy1iaXQgdG8gOC1iaXQ6CisgKiA8RXNjPlsgLT4gQ1NJCisgKiA8RXNjPl0gLT4gPE0tQy1dPgorICogPEVzYz5PIC0+IDxNLUMtTz4KKyAqLworICAgIHN0YXRpYyBpbnQKK3Rlcm1fN3RvOGJpdChwKQorICAgIGNoYXJfdSAgKnA7Cit7CisgICAgaWYgKCpwID09IEVTQykKKyAgICB7CisJaWYgKHBbMV0gPT0gJ1snKQorCSAgICByZXR1cm4gQ1NJOworCWlmIChwWzFdID09ICddJykKKwkgICAgcmV0dXJuIDB4OWQ7CisJaWYgKHBbMV0gPT0gJ08nKQorCSAgICByZXR1cm4gMHg4ZjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBGRUFUX0dVSQorICAgIGludAordGVybV9pc19ndWkobmFtZSkKKyAgICBjaGFyX3UgICpuYW1lOworeworICAgIHJldHVybiAoU1RSQ01QKG5hbWUsICJidWlsdGluX2d1aSIpID09IDAgfHwgU1RSQ01QKG5hbWUsICJndWkiKSA9PSAwKTsKK30KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSEFWRV9UR0VURU5UKSB8fCBkZWZpbmVkKEFNSUdBKSB8fCBkZWZpbmVkKFBST1RPKQorCisgICAgY2hhcl91ICoKK3RsdG9hKGkpCisgICAgdW5zaWduZWQgbG9uZyBpOworeworICAgIHN0YXRpYyBjaGFyX3UgYnVmWzE2XTsKKyAgICBjaGFyX3UJKnA7CisKKyAgICBwID0gYnVmICsgMTU7CisgICAgKnAgPSAnXDAnOworICAgIGRvCisgICAgeworCS0tcDsKKwkqcCA9IChjaGFyX3UpIChpICUgMTAgKyAnMCcpOworCWkgLz0gMTA7CisgICAgfQorICAgIHdoaWxlIChpID4gMCAmJiBwID4gYnVmKTsKKyAgICByZXR1cm4gcDsKK30KKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVEdFVEVOVAorCisvKgorICogbWluaW1hbCB0Z290bygpIGltcGxlbWVudGF0aW9uLgorICogbm8gcGFkZGluZyBhbmQgd2Ugb25seSBwYXJzZSBmb3IgJWkgJWQgYW5kICUrY2hhcgorICovCitjaGFyICp0Z290byBfX0FSR1MoKGNoYXIgKiwgaW50LCBpbnQpKTsKKworICAgIGNoYXIgKgordGdvdG8oY20sIHgsIHkpCisgICAgY2hhciAqY207CisgICAgaW50IHgsIHk7Cit7CisgICAgc3RhdGljIGNoYXIgYnVmWzMwXTsKKyAgICBjaGFyICpwLCAqcywgKmU7CisKKyAgICBpZiAoIWNtKQorCXJldHVybiAiT09QUyI7CisgICAgZSA9IGJ1ZiArIDI5OworICAgIGZvciAocyA9IGJ1ZjsgcyA8IGUgJiYgKmNtOyBjbSsrKQorICAgIHsKKwlpZiAoKmNtICE9ICclJykKKwl7CisJICAgICpzKysgPSAqY207CisJICAgIGNvbnRpbnVlOworCX0KKwlzd2l0Y2ggKCorK2NtKQorCXsKKwljYXNlICdkJzoKKwkgICAgcCA9IChjaGFyICopdGx0b2EoKHVuc2lnbmVkIGxvbmcpeSk7CisJICAgIHkgPSB4OworCSAgICB3aGlsZSAoKnApCisJCSpzKysgPSAqcCsrOworCSAgICBicmVhazsKKwljYXNlICdpJzoKKwkgICAgeCsrOworCSAgICB5Kys7CisJICAgIGJyZWFrOworCWNhc2UgJysnOgorCSAgICAqcysrID0gKGNoYXIpKCorK2NtICsgeSk7CisJICAgIHkgPSB4OworCSAgICBicmVhazsKKwljYXNlICclJzoKKwkgICAgKnMrKyA9ICpjbTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgcmV0dXJuICJPT1BTIjsKKwl9CisgICAgfQorICAgICpzID0gJ1wwJzsKKyAgICByZXR1cm4gYnVmOworfQorCisjZW5kaWYgLyogSEFWRV9UR0VURU5UICovCisKKy8qCisgKiBTZXQgdGhlIHRlcm1pbmFsIG5hbWUgYW5kIGluaXRpYWxpemUgdGhlIHRlcm1pbmFsIG9wdGlvbnMuCisgKiBJZiAibmFtZSIgaXMgTlVMTCBvciBlbXB0eSwgZ2V0IHRoZSB0ZXJtaW5hbCBuYW1lIGZyb20gdGhlIGVudmlyb25tZW50LgorICogSWYgdGhhdCBmYWlscywgdXNlIHRoZSBkZWZhdWx0IHRlcm1pbmFsIG5hbWUuCisgKi8KKyAgICB2b2lkCit0ZXJtY2FwaW5pdChuYW1lKQorICAgIGNoYXJfdSAqbmFtZTsKK3sKKyAgICBjaGFyX3UJKnRlcm07CisKKyAgICBpZiAobmFtZSAhPSBOVUxMICYmICpuYW1lID09IE5VTCkKKwluYW1lID0gTlVMTDsJICAgIC8qIGVtcHR5IG5hbWUgaXMgZXF1YWwgdG8gbm8gbmFtZSAqLworICAgIHRlcm0gPSBuYW1lOworCisjaWZkZWYgX19CRU9TX18KKyAgICAvKgorICAgICAqIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm9ybWFsbHkgc2V0IHRvICdhbnNpJyBvbiB0aGUgQmVib3g7CisgICAgICogU2luY2UgdGhlIEJlQm94IGRvZXNuJ3QgcXVpdGUgc3VwcG9ydCBmdWxsIEFOU0kgeWV0LCB3ZSB1c2Ugb3VyCisgICAgICogb3duIGN1c3RvbSAnYW5zaS1iZW9zJyB0ZXJtY2FwIGluc3RlYWQsIHVubGVzcyB0aGUgLVQgb3B0aW9uIGhhcworICAgICAqIGJlZW4gZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgKi8KKyAgICBpZiAodGVybSA9PSBOVUxMCisJCSAmJiBzdHJjbXAoKGNoYXIgKiltY2hfZ2V0ZW52KChjaGFyX3UgKikiVEVSTSIpLCAiYW5zaSIpID09IDApCisJdGVybSA9IERFRkFVTFRfVEVSTTsKKyNlbmRpZgorI2lmbmRlZiBNU1dJTgorICAgIGlmICh0ZXJtID09IE5VTEwpCisJdGVybSA9IG1jaF9nZXRlbnYoKGNoYXJfdSAqKSJURVJNIik7CisjZW5kaWYKKyAgICBpZiAodGVybSA9PSBOVUxMIHx8ICp0ZXJtID09IE5VTCkKKwl0ZXJtID0gREVGQVVMVF9URVJNOworICAgIHNldF9zdHJpbmdfb3B0aW9uX2RpcmVjdCgoY2hhcl91ICopInRlcm0iLCAtMSwgdGVybSwgT1BUX0ZSRUUpOworCisgICAgLyogU2V0IHRoZSBkZWZhdWx0IHRlcm1pbmFsIG5hbWUuICovCisgICAgc2V0X3N0cmluZ19kZWZhdWx0KCJ0ZXJtIiwgdGVybSk7CisgICAgc2V0X3N0cmluZ19kZWZhdWx0KCJ0dHl0eXBlIiwgdGVybSk7CisKKyAgICAvKgorICAgICAqIEF2b2lkIHVzaW5nICJ0ZXJtIiBoZXJlLCBiZWNhdXNlIHRoZSBuZXh0IG1jaF9nZXRlbnYoKSBtYXkgb3ZlcndyaXRlIGl0LgorICAgICAqLworICAgIHNldF90ZXJtbmFtZShUX05BTUUgIT0gTlVMTCA/IFRfTkFNRSA6IHRlcm0pOworfQorCisvKgorICogdGhlIG51bWJlciBvZiBjYWxscyB0byB1aV93cml0ZSBpcyByZWR1Y2VkIGJ5IHVzaW5nIHRoZSBidWZmZXIgIm91dF9idWYiCisgKi8KKyNpZmRlZiBET1MxNgorIyBkZWZpbmUgT1VUX1NJWkUJMjU1CQkvKiBvbmx5IGhhdmUgNjQwSyB0b3RhbC4uLiAqLworI2Vsc2UKKyMgaWZkZWYgRkVBVF9HVUlfVzE2CisjICBkZWZpbmUgT1VUX1NJWkUJMTAyMwkJLyogU2F2ZSBwcmVjaW91cyAxSyBuZWFyIGRhdGEgKi8KKyMgZWxzZQorIyAgZGVmaW5lIE9VVF9TSVpFCTIwNDcKKyMgZW5kaWYKKyNlbmRpZgorCSAgICAvKiBBZGQgb25lIHRvIGFsbG93IG1jaF93cml0ZSgpIGluIG9zX3dpbjMyLmMgdG8gYXBwZW5kIGEgTlVMICovCitzdGF0aWMgY2hhcl91CQlvdXRfYnVmW09VVF9TSVpFICsgMV07CitzdGF0aWMgaW50CQlvdXRfcG9zID0gMDsJLyogbnVtYmVyIG9mIGNoYXJzIGluIG91dF9idWYgKi8KKworLyoKKyAqIG91dF9mbHVzaCgpOiBmbHVzaCB0aGUgb3V0cHV0IGJ1ZmZlcgorICovCisgICAgdm9pZAorb3V0X2ZsdXNoKCkKK3sKKyAgICBpbnQJICAgIGxlbjsKKworICAgIGlmIChvdXRfcG9zICE9IDApCisgICAgeworCS8qIHNldCBvdXRfcG9zIHRvIDAgYmVmb3JlIHVpX3dyaXRlLCB0byBhdm9pZCByZWN1cnNpdmVuZXNzICovCisJbGVuID0gb3V0X3BvczsKKwlvdXRfcG9zID0gMDsKKwl1aV93cml0ZShvdXRfYnVmLCBsZW4pOworICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9NQllURSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBTb21ldGltZXMgYSBieXRlIG91dCBvZiBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGlzIHdyaXR0ZW4gd2l0aCBvdXRfY2hhcigpLgorICogVG8gYXZvaWQgZmx1c2hpbmcgaGFsZiBvZiB0aGUgY2hhcmFjdGVyLCBjYWxsIHRoaXMgZnVuY3Rpb24gZmlyc3QuCisgKi8KKyAgICB2b2lkCitvdXRfZmx1c2hfY2hlY2soKQoreworICAgIGlmIChlbmNfZGJjcyAhPSAwICYmIG91dF9wb3MgPj0gT1VUX1NJWkUgLSBNQl9NQVhCWVRFUykKKwlvdXRfZmx1c2goKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUkKKy8qCisgKiBvdXRfdHJhc2goKTogVGhyb3cgYXdheSB0aGUgY29udGVudHMgb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqLworICAgIHZvaWQKK291dF90cmFzaCgpCit7CisgICAgb3V0X3BvcyA9IDA7Cit9CisjZW5kaWYKKworLyoKKyAqIG91dF9jaGFyKGMpOiBwdXQgYSBieXRlIGludG8gdGhlIG91dHB1dCBidWZmZXIuCisgKgkJRmx1c2ggaXQgaWYgaXQgYmVjb21lcyBmdWxsLgorICogVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgZm9yIG91dHB1dHRpbmcgdGV4dCBvbiB0aGUgc2NyZWVuICh1c2UgZnVuY3Rpb25zCisgKiBsaWtlIG1zZ19wdXRzKCkgYW5kIHNjcmVlbl9wdXRjaGFyKCkgZm9yIHRoYXQpLgorICovCisgICAgdm9pZAorb3V0X2NoYXIoYykKKyAgICB1bnNpZ25lZAljOworeworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpIHx8IGRlZmluZWQoQU1JR0EpIHx8IGRlZmluZWQoTUFDT1NfWF9VTklYKQorICAgIGlmIChjID09ICdcbicpCS8qIHR1cm4gTEYgaW50byBDUi1MRiAoQ1JNT0QgZG9lc24ndCBzZWVtIHRvIGRvIHRoaXMpICovCisJb3V0X2NoYXIoJ1xyJyk7CisjZW5kaWYKKworICAgIG91dF9idWZbb3V0X3BvcysrXSA9IGM7CisKKyAgICAvKiBGb3IgdGVzdGluZyB3ZSBmbHVzaCBlYWNoIHRpbWUuICovCisgICAgaWYgKG91dF9wb3MgPj0gT1VUX1NJWkUgfHwgcF93ZCkKKwlvdXRfZmx1c2goKTsKK30KKworc3RhdGljIHZvaWQgb3V0X2NoYXJfbmYgX19BUkdTKCh1bnNpZ25lZCkpOworCisvKgorICogb3V0X2NoYXJfbmYoYyk6IGxpa2Ugb3V0X2NoYXIoKSwgYnV0IGRvbid0IGZsdXNoIHdoZW4gcF93ZCBpcyBzZXQKKyAqLworICAgIHN0YXRpYyB2b2lkCitvdXRfY2hhcl9uZihjKQorICAgIHVuc2lnbmVkCWM7Cit7CisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykgfHwgZGVmaW5lZChBTUlHQSkgfHwgZGVmaW5lZChNQUNPU19YX1VOSVgpCisgICAgaWYgKGMgPT0gJ1xuJykJLyogdHVybiBMRiBpbnRvIENSLUxGIChDUk1PRCBkb2Vzbid0IHNlZW0gdG8gZG8gdGhpcykgKi8KKwlvdXRfY2hhcl9uZignXHInKTsKKyNlbmRpZgorCisgICAgb3V0X2J1ZltvdXRfcG9zKytdID0gYzsKKworICAgIGlmIChvdXRfcG9zID49IE9VVF9TSVpFKQorCW91dF9mbHVzaCgpOworfQorCisvKgorICogQSBuZXZlci1wYWRkaW5nIG91dF9zdHIuCisgKiB1c2UgdGhpcyB3aGVuZXZlciB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIHN0cmluZyB0aHJvdWdoIHRwdXRzLgorICogdHB1dHMgYWJvdmUgaXMgaGFybWxlc3MsIGJ1dCB0cHV0cyBmcm9tIHRoZSB0ZXJtY2FwIGxpYnJhcnkKKyAqIGlzIGxpa2VseSB0byBzdHJpcCBvZmYgbGVhZGluZyBkaWdpdHMsIHRoYXQgaXQgbWlzdGFrZXMgZm9yIHBhZGRpbmcKKyAqIGluZm9ybWF0aW9uLCBhbmQgIiVpIiwgIiVkIiwgZXRjLgorICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciB3cml0aW5nIHRlcm1pbmFsIGNvZGVzLCBub3QgZm9yIG91dHB1dHRpbmcKKyAqIG5vcm1hbCB0ZXh0ICh1c2UgZnVuY3Rpb25zIGxpa2UgbXNnX3B1dHMoKSBhbmQgc2NyZWVuX3B1dGNoYXIoKSBmb3IgdGhhdCkuCisgKi8KKyAgICB2b2lkCitvdXRfc3RyX25mKHMpCisgICAgY2hhcl91ICpzOworeworICAgIGlmIChvdXRfcG9zID4gT1VUX1NJWkUgLSAyMCkgIC8qIGF2b2lkIHRlcm1pbmFsIHN0cmluZ3MgYmVpbmcgc3BsaXQgdXAgKi8KKwlvdXRfZmx1c2goKTsKKyAgICB3aGlsZSAoKnMpCisJb3V0X2NoYXJfbmYoKnMrKyk7CisKKyAgICAvKiBGb3IgdGVzdGluZyB3ZSB3cml0ZSBvbmUgc3RyaW5nIGF0IGEgdGltZS4gKi8KKyAgICBpZiAocF93ZCkKKwlvdXRfZmx1c2goKTsKK30KKworLyoKKyAqIG91dF9zdHIocyk6IFB1dCBhIGNoYXJhY3RlciBzdHJpbmcgYSBieXRlIGF0IGEgdGltZSBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLgorICogSWYgSEFWRV9UR0VURU5UIGlzIGRlZmluZWQgdXNlIHRoZSB0ZXJtY2FwIHBhcnNlci4gKGp3KQorICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciB3cml0aW5nIHRlcm1pbmFsIGNvZGVzLCBub3QgZm9yIG91dHB1dHRpbmcKKyAqIG5vcm1hbCB0ZXh0ICh1c2UgZnVuY3Rpb25zIGxpa2UgbXNnX3B1dHMoKSBhbmQgc2NyZWVuX3B1dGNoYXIoKSBmb3IgdGhhdCkuCisgKi8KKyAgICB2b2lkCitvdXRfc3RyKHMpCisgICAgY2hhcl91CSAqczsKK3sKKyAgICBpZiAocyAhPSBOVUxMICYmICpzKQorICAgIHsKKyNpZmRlZiBGRUFUX0dVSQorCS8qIERvbid0IHVzZSB0cHV0cygpIHdoZW4gR1VJIGlzIHVzZWQsIG5jdXJzZXMgY3Jhc2hlcy4gKi8KKwlpZiAoZ3VpLmluX3VzZSkKKwl7CisJICAgIG91dF9zdHJfbmYocyk7CisJICAgIHJldHVybjsKKwl9CisjZW5kaWYKKwkvKiBhdm9pZCB0ZXJtaW5hbCBzdHJpbmdzIGJlaW5nIHNwbGl0IHVwICovCisJaWYgKG91dF9wb3MgPiBPVVRfU0laRSAtIDIwKQorCSAgICBvdXRfZmx1c2goKTsKKyNpZmRlZiBIQVZFX1RHRVRFTlQKKwl0cHV0cygoY2hhciAqKXMsIDEsIFRQVVRTRlVOQ0FTVCBvdXRfY2hhcl9uZik7CisjZWxzZQorCXdoaWxlICgqcykKKwkgICAgb3V0X2NoYXJfbmYoKnMrKyk7CisjZW5kaWYKKworCS8qIEZvciB0ZXN0aW5nIHdlIHdyaXRlIG9uZSBzdHJpbmcgYXQgYSB0aW1lLiAqLworCWlmIChwX3dkKQorCSAgICBvdXRfZmx1c2goKTsKKyAgICB9Cit9CisKKy8qCisgKiBjdXJzb3IgcG9zaXRpb25pbmcgdXNpbmcgdGVybWNhcCBwYXJzZXIuIChqdykKKyAqLworICAgIHZvaWQKK3Rlcm1fd2luZGdvdG8ocm93LCBjb2wpCisgICAgaW50CSAgICByb3c7CisgICAgaW50CSAgICBjb2w7Cit7CisgICAgT1VUX1NUUih0Z290bygoY2hhciAqKVRfQ00sIGNvbCwgcm93KSk7Cit9CisKKyAgICB2b2lkCit0ZXJtX2N1cnNvcl9yaWdodChpKQorICAgIGludAkgICAgaTsKK3sKKyAgICBPVVRfU1RSKHRnb3RvKChjaGFyICopVF9DUkksIDAsIGkpKTsKK30KKworICAgIHZvaWQKK3Rlcm1fYXBwZW5kX2xpbmVzKGxpbmVfY291bnQpCisgICAgaW50CSAgICBsaW5lX2NvdW50OworeworICAgIE9VVF9TVFIodGdvdG8oKGNoYXIgKilUX0NBTCwgMCwgbGluZV9jb3VudCkpOworfQorCisgICAgdm9pZAordGVybV9kZWxldGVfbGluZXMobGluZV9jb3VudCkKKyAgICBpbnQJICAgIGxpbmVfY291bnQ7Cit7CisgICAgT1VUX1NUUih0Z290bygoY2hhciAqKVRfQ0RMLCAwLCBsaW5lX2NvdW50KSk7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfVEdFVEVOVCkgfHwgZGVmaW5lZChQUk9UTykKKyAgICB2b2lkCit0ZXJtX3NldF93aW5wb3MoeCwgeSkKKyAgICBpbnQJICAgIHg7CisgICAgaW50CSAgICB5OworeworICAgIC8qIENhbid0IGhhbmRsZSBhIG5lZ2F0aXZlIHZhbHVlIGhlcmUgKi8KKyAgICBpZiAoeCA8IDApCisJeCA9IDA7CisgICAgaWYgKHkgPCAwKQorCXkgPSAwOworICAgIE9VVF9TVFIodGdvdG8oKGNoYXIgKilUX0NXUCwgeSwgeCkpOworfQorCisgICAgdm9pZAordGVybV9zZXRfd2luc2l6ZSh3aWR0aCwgaGVpZ2h0KQorICAgIGludAkgICAgd2lkdGg7CisgICAgaW50CSAgICBoZWlnaHQ7Cit7CisgICAgT1VUX1NUUih0Z290bygoY2hhciAqKVRfQ1dTLCBoZWlnaHQsIHdpZHRoKSk7Cit9CisjZW5kaWYKKworICAgIHZvaWQKK3Rlcm1fZmdfY29sb3IobikKKyAgICBpbnQJICAgIG47Cit7CisgICAgLyogVXNlICJBRiIgdGVybWNhcCBlbnRyeSBpZiBwcmVzZW50LCAiU2YiIGVudHJ5IG90aGVyd2lzZSAqLworICAgIGlmICgqVF9DQUYpCisJdGVybV9jb2xvcihUX0NBRiwgbik7CisgICAgZWxzZSBpZiAoKlRfQ1NGKQorCXRlcm1fY29sb3IoVF9DU0YsIG4pOworfQorCisgICAgdm9pZAordGVybV9iZ19jb2xvcihuKQorICAgIGludAkgICAgbjsKK3sKKyAgICAvKiBVc2UgIkFCIiB0ZXJtY2FwIGVudHJ5IGlmIHByZXNlbnQsICJTYiIgZW50cnkgb3RoZXJ3aXNlICovCisgICAgaWYgKCpUX0NBQikKKwl0ZXJtX2NvbG9yKFRfQ0FCLCBuKTsKKyAgICBlbHNlIGlmICgqVF9DU0IpCisJdGVybV9jb2xvcihUX0NTQiwgbik7Cit9CisKKyAgICBzdGF0aWMgdm9pZAordGVybV9jb2xvcihzLCBuKQorICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCW47Cit7CisgICAgY2hhcglidWZbMjBdOworICAgIGludCBpID0gMjsJLyogaW5kZXggaW4gc1tdIGp1c3QgYWZ0ZXIgPEVzYz5bIG9yIENTSSAqLworCisgICAgLyogU3BlY2lhbCBoYW5kbGluZyBvZiAxNiBjb2xvcnMsIGJlY2F1c2UgdGVybWNhcCBjYW4ndCBoYW5kbGUgaXQgKi8KKyAgICAvKiBBbHNvIGFjY2VwdCAiXGVbMyVkbSIgZm9yIFRFUk1JTkZPLCBpdCBpcyBzb21ldGltZXMgdXNlZCAqLworICAgIC8qIEFsc28gYWNjZXB0IENTSSBpbnN0ZWFkIG9mIDxFc2M+WyAqLworICAgIGlmIChuID49IDggJiYgdF9jb2xvcnMgPj0gMTYKKwkgICAgICAmJiAoKHNbMF0gPT0gRVNDICYmIHNbMV0gPT0gJ1snKSB8fCAoc1swXSA9PSBDU0kgJiYgKGkgPSAxKSA9PSAxKSkKKwkgICAgICAmJiBzW2ldICE9IE5VTAorCSAgICAgICYmIChTVFJDTVAocyArIGkgKyAxLCAiJXAxJWRtIikgPT0gMAorCQkgIHx8IFNUUkNNUChzICsgaSArIDEsICIlZG0iKSA9PSAwKQorCSAgICAgICYmIChzW2ldID09ICczJyB8fCBzW2ldID09ICc0JykpCisgICAgeworCXNwcmludGYoYnVmLAorI2lmZGVmIFRFUk1JTkZPCisJCSIlcyVzJSVwMSUlZG0iLAorI2Vsc2UKKwkJIiVzJXMlJWRtIiwKKyNlbmRpZgorCQlpID09IDIgPyBJRl9FQigiXDAzM1siLCBFU0NfU1RSICJbIikgOiAiXDIzMyIsCisJCXNbaV0gPT0gJzMnID8gKG4gPj0gMTYgPyAiMzg7NTsiIDogIjkiKQorCQkJICAgIDogKG4gPj0gMTYgPyAiNDg7NTsiIDogIjEwIikpOworCU9VVF9TVFIodGdvdG8oYnVmLCAwLCBuID49IDE2ID8gbiA6IG4gLSA4KSk7CisgICAgfQorICAgIGVsc2UKKwlPVVRfU1RSKHRnb3RvKChjaGFyICopcywgMCwgbikpOworfQorCisjaWYgKGRlZmluZWQoRkVBVF9USVRMRSkgJiYgKGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoVk1TKSB8fCBkZWZpbmVkKE1BQ09TX1gpKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBHZW5lcmljIGZ1bmN0aW9uIHRvIHNldCB3aW5kb3cgdGl0bGUsIHVzaW5nIHRfdHMgYW5kIHRfZnMuCisgKi8KKyAgICB2b2lkCit0ZXJtX3NldHRpdGxlKHRpdGxlKQorICAgIGNoYXJfdQkqdGl0bGU7Cit7CisgICAgLyogdF90cyB0YWtlcyBvbmUgYXJndW1lbnQ6IGNvbHVtbiBpbiBzdGF0dXMgbGluZSAqLworICAgIE9VVF9TVFIodGdvdG8oKGNoYXIgKilUX1RTLCAwLCAwKSk7CS8qIHNldCB0aXRsZSBzdGFydCAqLworICAgIG91dF9zdHJfbmYodGl0bGUpOworICAgIG91dF9zdHIoVF9GUyk7CQkJLyogc2V0IHRpdGxlIGVuZCAqLworICAgIG91dF9mbHVzaCgpOworfQorI2VuZGlmCisKKy8qCisgKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIHNldCBvciB0ZXJtaW5hbCBvcHRpb25zLgorICogUmVwbGFjZSBhbGwgZW50cmllcyB0aGF0IGFyZSBOVUxMIGJ5IGVtcHR5X29wdGlvbgorICovCisgICAgdm9pZAordHRlc3QocGFpcnMpCisgICAgaW50CXBhaXJzOworeworICAgIGNoZWNrX29wdGlvbnMoKTsJCSAgICAvKiBtYWtlIHN1cmUgbm8gb3B0aW9ucyBhcmUgTlVMTCAqLworCisgICAgLyoKKyAgICAgKiBNVVNUIGhhdmUgImNtIjogY3Vyc29yIG1vdGlvbi4KKyAgICAgKi8KKyAgICBpZiAoKlRfQ00gPT0gTlVMKQorCUVNU0coXygiRTQzNzogdGVybWluYWwgY2FwYWJpbGl0eSBcImNtXCIgcmVxdWlyZWQiKSk7CisKKyAgICAvKgorICAgICAqIGlmICJjcyIgZGVmaW5lZCwgdXNlIGEgc2Nyb2xsIHJlZ2lvbiwgaXQncyBmYXN0ZXIuCisgICAgICovCisgICAgaWYgKCpUX0NTICE9IE5VTCkKKwlzY3JvbGxfcmVnaW9uID0gVFJVRTsKKyAgICBlbHNlCisJc2Nyb2xsX3JlZ2lvbiA9IEZBTFNFOworCisgICAgaWYgKHBhaXJzKQorICAgIHsKKwkvKgorCSAqIG9wdGlvbmFsIHBhaXJzCisJICovCisJLyogVFAgZ29lcyB0byBub3JtYWwgbW9kZSBmb3IgVEkgKGludmVydCkgYW5kIFRCIChib2xkKSAqLworCWlmICgqVF9NRSA9PSBOVUwpCisJICAgIFRfTUUgPSBUX01SID0gVF9NRCA9IFRfTUIgPSBlbXB0eV9vcHRpb247CisJaWYgKCpUX1NPID09IE5VTCB8fCAqVF9TRSA9PSBOVUwpCisJICAgIFRfU08gPSBUX1NFID0gZW1wdHlfb3B0aW9uOworCWlmICgqVF9VUyA9PSBOVUwgfHwgKlRfVUUgPT0gTlVMKQorCSAgICBUX1VTID0gVF9VRSA9IGVtcHR5X29wdGlvbjsKKwlpZiAoKlRfQ1pIID09IE5VTCB8fCAqVF9DWlIgPT0gTlVMKQorCSAgICBUX0NaSCA9IFRfQ1pSID0gZW1wdHlfb3B0aW9uOworCisJLyogVF9WRSBpcyBuZWVkZWQgZXZlbiB0aG91Z2ggVF9WSSBpcyBub3QgZGVmaW5lZCAqLworCWlmICgqVF9WRSA9PSBOVUwpCisJICAgIFRfVkkgPSBlbXB0eV9vcHRpb247CisKKwkvKiBpZiAnbXInIG9yICdtZScgaXMgbm90IGRlZmluZWQgdXNlICdzbycgYW5kICdzZScgKi8KKwlpZiAoKlRfTUUgPT0gTlVMKQorCXsKKwkgICAgVF9NRSA9IFRfU0U7CisJICAgIFRfTVIgPSBUX1NPOworCSAgICBUX01EID0gVF9TTzsKKwl9CisKKwkvKiBpZiAnc28nIG9yICdzZScgaXMgbm90IGRlZmluZWQgdXNlICdtcicgYW5kICdtZScgKi8KKwlpZiAoKlRfU08gPT0gTlVMKQorCXsKKwkgICAgVF9TRSA9IFRfTUU7CisJICAgIGlmICgqVF9NUiA9PSBOVUwpCisJCVRfU08gPSBUX01EOworCSAgICBlbHNlCisJCVRfU08gPSBUX01SOworCX0KKworCS8qIGlmICdaSCcgb3IgJ1pSJyBpcyBub3QgZGVmaW5lZCB1c2UgJ21yJyBhbmQgJ21lJyAqLworCWlmICgqVF9DWkggPT0gTlVMKQorCXsKKwkgICAgVF9DWlIgPSBUX01FOworCSAgICBpZiAoKlRfTVIgPT0gTlVMKQorCQlUX0NaSCA9IFRfTUQ7CisJICAgIGVsc2UKKwkJVF9DWkggPSBUX01SOworCX0KKworCS8qICJTYiIgYW5kICJTZiIgY29tZSBpbiBwYWlycyAqLworCWlmICgqVF9DU0IgPT0gTlVMIHx8ICpUX0NTRiA9PSBOVUwpCisJeworCSAgICBUX0NTQiA9IGVtcHR5X29wdGlvbjsKKwkgICAgVF9DU0YgPSBlbXB0eV9vcHRpb247CisJfQorCisJLyogIkFCIiBhbmQgIkFGIiBjb21lIGluIHBhaXJzICovCisJaWYgKCpUX0NBQiA9PSBOVUwgfHwgKlRfQ0FGID09IE5VTCkKKwl7CisJICAgIFRfQ0FCID0gZW1wdHlfb3B0aW9uOworCSAgICBUX0NBRiA9IGVtcHR5X29wdGlvbjsKKwl9CisKKwkvKiBpZiAnU2InIGFuZCAnQUInIGFyZSBub3QgZGVmaW5lZCwgcmVzZXQgIkNvIiAqLworCWlmICgqVF9DU0IgPT0gTlVMICYmICpUX0NBQiA9PSBOVUwpCisJICAgIFRfQ0NPID0gZW1wdHlfb3B0aW9uOworCisJLyogU2V0ICd3ZWlyZGludmVydCcgYWNjb3JkaW5nIHRvIHZhbHVlIG9mICd0X3hzJyAqLworCXBfd2l2ID0gKCpUX1hTICE9IE5VTCk7CisgICAgfQorICAgIG5lZWRfZ2F0aGVyID0gVFJVRTsKKworICAgIC8qIFNldCB0X2NvbG9ycyB0byB0aGUgdmFsdWUgb2YgdF9Dby4gKi8KKyAgICB0X2NvbG9ycyA9IGF0b2koKGNoYXIgKilUX0NDTyk7Cit9CisKKyNpZiAoZGVmaW5lZChGRUFUX0dVSSkgJiYgKGRlZmluZWQoRkVBVF9NRU5VKSB8fCAhZGVmaW5lZChVU0VfT05fRkxZX1NDUk9MTCkpKSBcCisJfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXByZXNlbnQgdGhlIGdpdmVuIGxvbmdfdSBhcyBpbmRpdmlkdWFsIGJ5dGVzLCB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50CisgKiBieXRlIGZpcnN0LCBhbmQgc3RvcmUgdGhlbSBpbiBkc3QuCisgKi8KKyAgICB2b2lkCithZGRfbG9uZ190b19idWYodmFsLCBkc3QpCisgICAgbG9uZ191ICB2YWw7CisgICAgY2hhcl91ICAqZHN0OworeworICAgIGludAkgICAgaTsKKyAgICBpbnQJICAgIHNoaWZ0OworCisgICAgZm9yIChpID0gMTsgaSA8PSBzaXplb2YobG9uZ191KTsgaSsrKQorICAgIHsKKwlzaGlmdCA9IDggKiAoc2l6ZW9mKGxvbmdfdSkgLSBpKTsKKwlkc3RbaSAtIDFdID0gKGNoYXJfdSkgKCh2YWwgPj4gc2hpZnQpICYgMHhmZik7CisgICAgfQorfQorCitzdGF0aWMgaW50IGdldF9sb25nX2Zyb21fYnVmIF9fQVJHUygoY2hhcl91ICpidWYsIGxvbmdfdSAqdmFsKSk7CisKKy8qCisgKiBJbnRlcnByZXQgdGhlIG5leHQgc3RyaW5nIG9mIGJ5dGVzIGluIGJ1ZiBhcyBhIGxvbmcgaW50ZWdlciwgd2l0aCB0aGUgbW9zdAorICogc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdC4gIE5vdGUgdGhhdCBpdCBpcyBhc3N1bWVkIHRoYXQgYnVmIGhhcyBiZWVuIHRocm91Z2gKKyAqIGluY2hhcigpLCBzbyB0aGF0IE5VTCBhbmQgS19TUEVDSUFMIHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgdGhyZWUgYnl0ZXMgZWFjaC4KKyAqIFB1dHMgcmVzdWx0IGluIHZhbCwgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gYnVmCisgKiAoYmV0d2VlbiBzaXplb2YobG9uZ191KSBhbmQgMiAqIHNpemVvZihsb25nX3UpKSwgb3IgLTEgaWYgbm90IGVub3VnaCBieXRlcworICogd2VyZSBwcmVzZW50LgorICovCisgICAgc3RhdGljIGludAorZ2V0X2xvbmdfZnJvbV9idWYoYnVmLCB2YWwpCisgICAgY2hhcl91ICAqYnVmOworICAgIGxvbmdfdSAgKnZhbDsKK3sKKyAgICBpbnQJICAgIGxlbjsKKyAgICBjaGFyX3UgIGJ5dGVzW3NpemVvZihsb25nX3UpXTsKKyAgICBpbnQJICAgIGk7CisgICAgaW50CSAgICBzaGlmdDsKKworICAgICp2YWwgPSAwOworICAgIGxlbiA9IGdldF9ieXRlc19mcm9tX2J1ZihidWYsIGJ5dGVzLCAoaW50KXNpemVvZihsb25nX3UpKTsKKyAgICBpZiAobGVuICE9IC0xKQorICAgIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGxvbmdfdSk7IGkrKykKKwl7CisJICAgIHNoaWZ0ID0gOCAqIChzaXplb2YobG9uZ191KSAtIDEgLSBpKTsKKwkgICAgKnZhbCArPSAobG9uZ191KWJ5dGVzW2ldIDw8IHNoaWZ0OworCX0KKyAgICB9CisgICAgcmV0dXJuIGxlbjsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgXAorICAgIHx8IChkZWZpbmVkKEZFQVRfTU9VU0UpICYmICghZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKEZFQVRfTU9VU0VfWFRFUk0pKSkKKy8qCisgKiBSZWFkIHRoZSBuZXh0IG51bV9ieXRlcyBieXRlcyBmcm9tIGJ1ZiwgYW5kIHN0b3JlIHRoZW0gaW4gYnl0ZXMuICBBc3N1bWUKKyAqIHRoYXQgYnVmIGhhcyBiZWVuIHRocm91Z2ggaW5jaGFyKCkuCVJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgdXNlZAorICogZnJvbSBidWYgKGJldHdlZW4gbnVtX2J5dGVzIGFuZCBudW1fYnl0ZXMqMiksIG9yIC0xIGlmIG5vdCBlbm91Z2ggYnl0ZXMgd2VyZQorICogYXZhaWxhYmxlLgorICovCisgICAgc3RhdGljIGludAorZ2V0X2J5dGVzX2Zyb21fYnVmKGJ1ZiwgYnl0ZXMsIG51bV9ieXRlcykKKyAgICBjaGFyX3UgICpidWY7CisgICAgY2hhcl91ICAqYnl0ZXM7CisgICAgaW50CSAgICBudW1fYnl0ZXM7Cit7CisgICAgaW50CSAgICBsZW4gPSAwOworICAgIGludAkgICAgaTsKKyAgICBjaGFyX3UgIGM7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J5dGVzOyBpKyspCisgICAgeworCWlmICgoYyA9IGJ1ZltsZW4rK10pID09IE5VTCkKKwkgICAgcmV0dXJuIC0xOworCWlmIChjID09IEtfU1BFQ0lBTCkKKwl7CisJICAgIGlmIChidWZbbGVuXSA9PSBOVUwgfHwgYnVmW2xlbiArIDFdID09IE5VTCkJICAgIC8qIGNhbm5vdCBoYXBwZW4/ICovCisJCXJldHVybiAtMTsKKwkgICAgaWYgKGJ1ZltsZW4rK10gPT0gKGludClLU19aRVJPKQorCQljID0gTlVMOworCSAgICArK2xlbjsJLyogc2tpcCBLRV9GSUxMRVIgKi8KKwkgICAgLyogZWxzZSBpdCBzaG91bGQgYmUgS1NfU1BFQ0lBTCwgYW5kIGMgYWxyZWFkeSBlcXVhbHMgS19TUEVDSUFMICovCisJfQorCWJ5dGVzW2ldID0gYzsKKyAgICB9CisgICAgcmV0dXJuIGxlbjsKK30KKyNlbmRpZgorCisvKgorICogQ2hlY2sgaWYgdGhlIG5ldyBzaGVsbCBzaXplIGlzIHZhbGlkLCBjb3JyZWN0IGl0IGlmIGl0J3MgdG9vIHNtYWxsLgorICovCisgICAgdm9pZAorY2hlY2tfc2hlbGxzaXplKCkKK3sKKyAgICBpZiAoQ29sdW1ucyA8IE1JTl9DT0xVTU5TKQorCUNvbHVtbnMgPSBNSU5fQ09MVU1OUzsKKyAgICBpZiAoUm93cyA8IG1pbl9yb3dzKCkpCS8qIG5lZWQgcm9vbSBmb3Igb25lIHdpbmRvdyBhbmQgY29tbWFuZCBsaW5lICovCisJUm93cyA9IG1pbl9yb3dzKCk7Cit9CisKKyAgICB2b2lkCit3aW5fbmV3X3NoZWxsc2l6ZSgpCit7CisgICAgc3RhdGljIGludAlvbGRfUm93cyA9IDA7CisgICAgc3RhdGljIGludAlvbGRfQ29sdW1ucyA9IDA7CisKKyAgICBpZiAob2xkX1Jvd3MgIT0gUm93cyB8fCBvbGRfQ29sdW1ucyAhPSBDb2x1bW5zKQorCXVpX25ld19zaGVsbHNpemUoKTsKKyAgICBpZiAob2xkX1Jvd3MgIT0gUm93cykKKyAgICB7CisJb2xkX1Jvd3MgPSBSb3dzOworCXNoZWxsX25ld19yb3dzKCk7CS8qIHVwZGF0ZSB3aW5kb3cgc2l6ZXMgKi8KKyAgICB9CisgICAgaWYgKG9sZF9Db2x1bW5zICE9IENvbHVtbnMpCisgICAgeworCW9sZF9Db2x1bW5zID0gQ29sdW1uczsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCXNoZWxsX25ld19jb2x1bW5zKCk7CS8qIHVwZGF0ZSB3aW5kb3cgc2l6ZXMgKi8KKyNlbmRpZgorICAgIH0KK30KKworLyoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSBWaW0gc2hlbGwgaGFzIGJlZW4gcmVzaXplZCBpbiBhbnkgd2F5LgorICogV2lsbCBvYnRhaW4gdGhlIGN1cnJlbnQgc2l6ZSBhbmQgcmVkcmF3IChhbHNvIHdoZW4gc2l6ZSBkaWRuJ3QgY2hhbmdlKS4KKyAqLworICAgIHZvaWQKK3NoZWxsX3Jlc2l6ZWQoKQoreworICAgIHNldF9zaGVsbHNpemUoMCwgMCwgRkFMU0UpOworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIHNoZWxsIHNpemUgY2hhbmdlZC4gIEhhbmRsZSBhIHJlc2l6ZS4KKyAqIFdoZW4gdGhlIHNpemUgZGlkbid0IGNoYW5nZSwgbm90aGluZyBoYXBwZW5zLgorICovCisgICAgdm9pZAorc2hlbGxfcmVzaXplZF9jaGVjaygpCit7CisgICAgaW50CQlvbGRfUm93cyA9IFJvd3M7CisgICAgaW50CQlvbGRfQ29sdW1ucyA9IENvbHVtbnM7CisKKyAgICAodm9pZCl1aV9nZXRfc2hlbGxzaXplKCk7CisgICAgY2hlY2tfc2hlbGxzaXplKCk7CisgICAgaWYgKG9sZF9Sb3dzICE9IFJvd3MgfHwgb2xkX0NvbHVtbnMgIT0gQ29sdW1ucykKKwlzaGVsbF9yZXNpemVkKCk7Cit9CisKKy8qCisgKiBTZXQgc2l6ZSBvZiB0aGUgVmltIHNoZWxsLgorICogSWYgJ211c3RzZXQnIGlzIFRSVUUsIHdlIG11c3Qgc2V0IFJvd3MgYW5kIENvbHVtbnMsIGRvIG5vdCBnZXQgdGhlIHJlYWwKKyAqIHdpbmRvdyBzaXplICh0aGlzIGlzIHVzZWQgZm9yIHRoZSA6d2luIGNvbW1hbmQpLgorICogSWYgJ211c3RzZXQnIGlzIEZBTFNFLCB3ZSBtYXkgdHJ5IHRvIGdldCB0aGUgcmVhbCB3aW5kb3cgc2l6ZSBhbmQgaWYKKyAqIGl0IGZhaWxzIHVzZSAnd2lkdGgnIGFuZCAnaGVpZ2h0Jy4KKyAqLworICAgIHZvaWQKK3NldF9zaGVsbHNpemUod2lkdGgsIGhlaWdodCwgbXVzdHNldCkKKyAgICBpbnQJICAgIHdpZHRoLCBoZWlnaHQ7CisgICAgaW50CSAgICBtdXN0c2V0OworeworICAgIHN0YXRpYyBpbnQJCWJ1c3kgPSBGQUxTRTsKKworICAgIC8qCisgICAgICogQXZvaWQgcmVjdXJzaXZlbmVzcywgY2FuIGhhcHBlbiB3aGVuIHNldHRpbmcgdGhlIHdpbmRvdyBzaXplIGNhdXNlcworICAgICAqIGFub3RoZXIgd2luZG93LWNoYW5nZWQgc2lnbmFsLgorICAgICAqLworICAgIGlmIChidXN5KQorCXJldHVybjsKKworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgICAgLyoganVzdCBjaGVja2luZy4uLiAqLworCXJldHVybjsKKworICAgIGlmIChTdGF0ZSA9PSBISVRSRVRVUk4gfHwgU3RhdGUgPT0gU0VUV1NJWkUpIC8qIHBvc3Rwb25lIHRoZSByZXNpemluZyAqLworICAgIHsKKwlTdGF0ZSA9IFNFVFdTSVpFOworCXJldHVybjsKKyAgICB9CisKKyAgICArK2J1c3k7CisKKyNpZmRlZiBBTUlHQQorICAgIG91dF9mbHVzaCgpOwkgICAgLyogbXVzdCBkbyB0aGlzIGJlZm9yZSBtY2hfZ2V0X3NoZWxsc2l6ZSgpIGZvcgorCQkJICAgICAgIHNvbWUgb2JzY3VyZSByZWFzb24gKi8KKyNlbmRpZgorCisgICAgaWYgKG11c3RzZXQgfHwgKHVpX2dldF9zaGVsbHNpemUoKSA9PSBGQUlMICYmIGhlaWdodCAhPSAwKSkKKyAgICB7CisJUm93cyA9IGhlaWdodDsKKwlDb2x1bW5zID0gd2lkdGg7CisJY2hlY2tfc2hlbGxzaXplKCk7CisJdWlfc2V0X3NoZWxsc2l6ZShtdXN0c2V0KTsKKyAgICB9CisgICAgZWxzZQorCWNoZWNrX3NoZWxsc2l6ZSgpOworCisgICAgLyogVGhlIHdpbmRvdyBsYXlvdXQgdXNlZCB0byBiZSBhZGp1c3RlZCBoZXJlLCBidXQgaXQgbm93IGhhcHBlbnMgaW4KKyAgICAgKiBzY3JlZW5hbGxvYygpIChhbHNvIGludm9rZWQgZnJvbSBzY3JlZW5jbGVhcigpKS4gIFRoYXQgaXMgYmVjYXVzZSB0aGUKKyAgICAgKiAiYnVzeSIgY2hlY2sgYWJvdmUgbWF5IHNraXAgdGhpcywgYnV0IG5vdCBzY3JlZW5hbGxvYygpLiAqLworCisgICAgaWYgKFN0YXRlICE9IEFTS01PUkUgJiYgU3RhdGUgIT0gRVhURVJOQ01EICYmIFN0YXRlICE9IENPTkZJUk0pCisJc2NyZWVuY2xlYXIoKTsKKyAgICBlbHNlCisJc2NyZWVuX3N0YXJ0KCk7CSAgICAvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKworICAgIGlmIChzdGFydGluZyAhPSBOT19TQ1JFRU4pCisgICAgeworI2lmZGVmIEZFQVRfVElUTEUKKwltYWtldGl0bGUoKTsKKyNlbmRpZgorCWNoYW5nZWRfbGluZV9hYnZfY3VycygpOworCWludmFsaWRhdGVfYm90bGluZSgpOworCisJLyoKKwkgKiBXZSBvbmx5IHJlZHJhdyB3aGVuIGl0J3MgbmVlZGVkOgorCSAqIC0gV2hpbGUgYXQgdGhlIG1vcmUgcHJvbXB0IG9yIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kLCBkb24ndAorCSAqICAgcmVkcmF3LCBidXQgcG9zaXRpb24gdGhlIGN1cnNvci4KKwkgKiAtIFdoaWxlIGVkaXRpbmcgdGhlIGNvbW1hbmQgbGluZSwgb25seSByZWRyYXcgdGhhdC4KKwkgKiAtIGluIEV4IG1vZGUsIGRvbid0IHJlZHJhdyBhbnl0aGluZy4KKwkgKiAtIE90aGVyd2lzZSwgcmVkcmF3IHJpZ2h0IG5vdywgYW5kIHBvc2l0aW9uIHRoZSBjdXJzb3IuCisJICogQWx3YXlzIG5lZWQgdG8gY2FsbCB1cGRhdGVfc2NyZWVuKCkgb3Igc2NyZWVuYWxsb2MoKSwgdG8gbWFrZQorCSAqIHN1cmUgUm93cy9Db2x1bW5zIGFuZCB0aGUgc2l6ZSBvZiBTY3JlZW5MaW5lc1tdIGlzIGNvcnJlY3QhCisJICovCisJaWYgKFN0YXRlID09IEFTS01PUkUgfHwgU3RhdGUgPT0gRVhURVJOQ01EIHx8IFN0YXRlID09IENPTkZJUk0KKwkJCQkJCQkgICAgIHx8IGV4bW9kZV9hY3RpdmUpCisJeworCSAgICBzY3JlZW5hbGxvYyhGQUxTRSk7CisJICAgIHJlcGVhdF9tZXNzYWdlKCk7CisJfQorCWVsc2UgaWYgKFN0YXRlICYgQ01ETElORSkKKwl7CisJICAgIHVwZGF0ZV9zY3JlZW4oTk9UX1ZBTElEKTsKKwkgICAgcmVkcmF3Y21kbGluZSgpOworCX0KKwllbHNlCisJeworCSAgICB1cGRhdGVfdG9wbGluZSgpOworCSAgICB1cGRhdGVfc2NyZWVuKE5PVF9WQUxJRCk7CisJICAgIGlmIChyZWRyYXdpbmcoKSkKKwkJc2V0Y3Vyc29yKCk7CisJfQorCWN1cnNvcl9vbigpOwkgICAgLyogcmVkcmF3aW5nIG1heSBoYXZlIHN3aXRjaGVkIGl0IG9mZiAqLworICAgIH0KKyAgICBvdXRfZmx1c2goKTsKKyAgICAtLWJ1c3k7Cit9CisKKy8qCisgKiBTZXQgdGhlIHRlcm1pbmFsIHRvIFRNT0RFX1JBVyAoZm9yIE5vcm1hbCBtb2RlKSBvciBUTU9ERV9DT09LIChmb3IgZXh0ZXJuYWwKKyAqIGNvbW1hbmRzIGFuZCBFeCBtb2RlKS4KKyAqLworICAgIHZvaWQKK3NldHRtb2RlKHRtb2RlKQorICAgIGludAkgdG1vZGU7Cit7CisjaWZkZWYgRkVBVF9HVUkKKyAgICAvKiBkb24ndCBzZXQgdGhlIHRlcm0gd2hlcmUgZ3ZpbSB3YXMgc3RhcnRlZCB0byBhbnkgbW9kZSAqLworICAgIGlmIChndWkuaW5fdXNlKQorCXJldHVybjsKKyNlbmRpZgorCisgICAgaWYgKGZ1bGxfc2NyZWVuKQorICAgIHsKKwkvKiBJbiBFeCBtb2RlLCBuZXZlciBzZXQgdG8gUkFXICovCisJaWYgKGV4bW9kZV9hY3RpdmUgPT0gRVhNT0RFX05PUk1BTCkKKwkgICAgdG1vZGUgPSBUTU9ERV9DT09LOworCisJLyoKKwkgKiBXaGVuIHJldHVybmluZyBhZnRlciBjYWxsaW5nIGEgc2hlbGwgd2Ugd2FudCB0byByZWFsbHkgc2V0IHRoZQorCSAqIHRlcm1pbmFsIHRvIHJhdyBtb2RlLCBldmVuIHRob3VnaCB3ZSB0aGluayBpdCBhbHJlYWR5IGlzLCBiZWNhdXNlCisJICogdGhlIHNoZWxsIHByb2dyYW0gbWF5IGhhdmUgcmVzZXQgdGhlIHRlcm1pbmFsIG1vZGUuCisJICogV2hlbiB3ZSB0aGluayB0aGUgdGVybWluYWwgaXMgbm9ybWFsLCBkb24ndCB0cnkgdG8gc2V0IGl0IHRvCisJICogbm9ybWFsIGFnYWluLCBiZWNhdXNlIHRoYXQgY2F1c2VzIHByb2JsZW1zIChsb2dvdXQhKSBvbiBzb21lCisJICogbWFjaGluZXMuCisJICovCisJaWYgKHRtb2RlICE9IFRNT0RFX0NPT0sgfHwgY3VyX3Rtb2RlICE9IFRNT0RFX0NPT0spCisJeworI2lmZGVmIEZFQVRfVEVSTVJFU1BPTlNFCisJICAgIC8qIE1heSBuZWVkIHRvIGNoZWNrIGZvciBUX0NSViByZXNwb25zZSBhbmQgdGVybWNvZGVzLCBpdCBkb2Vzbid0CisJICAgICAqIHdvcmsgaW4gQ29va2VkIG1vZGUsIGFuIGV4dGVybmFsIHByb2dyYW0gbWF5IGdldCB0aGVtLiAqLworCSAgICBpZiAodG1vZGUgIT0gVE1PREVfUkFXICYmIGNydl9zdGF0dXMgPT0gQ1JWX1NFTlQpCisJCSh2b2lkKXZwZWVrY19ub21hcCgpOworCSAgICBjaGVja19mb3JfY29kZXNfZnJvbV90ZXJtKCk7CisjZW5kaWYKKyNpZmRlZiBGRUFUX01PVVNFX1RUWQorCSAgICBpZiAodG1vZGUgIT0gVE1PREVfUkFXKQorCQltY2hfc2V0bW91c2UoRkFMU0UpOwkJLyogc3dpdGNoIG1vdXNlIG9mZiAqLworI2VuZGlmCisJICAgIG91dF9mbHVzaCgpOworCSAgICBtY2hfc2V0dG1vZGUodG1vZGUpOyAgICAvKiBtYWNoaW5lIHNwZWNpZmljIGZ1bmN0aW9uICovCisJICAgIGN1cl90bW9kZSA9IHRtb2RlOworI2lmZGVmIEZFQVRfTU9VU0UKKwkgICAgaWYgKHRtb2RlID09IFRNT0RFX1JBVykKKwkJc2V0bW91c2UoKTsJCQkvKiBtYXkgc3dpdGNoIG1vdXNlIG9uICovCisjZW5kaWYKKwkgICAgb3V0X2ZsdXNoKCk7CisJfQorI2lmZGVmIEZFQVRfVEVSTVJFU1BPTlNFCisJbWF5X3JlcV90ZXJtcmVzcG9uc2UoKTsKKyNlbmRpZgorICAgIH0KK30KKworICAgIHZvaWQKK3N0YXJ0dGVybWNhcCgpCit7CisgICAgaWYgKGZ1bGxfc2NyZWVuICYmICF0ZXJtY2FwX2FjdGl2ZSkKKyAgICB7CisJb3V0X3N0cihUX1RJKTsJCQkvKiBzdGFydCB0ZXJtY2FwIG1vZGUgKi8KKwlvdXRfc3RyKFRfS1MpOwkJCS8qIHN0YXJ0ICJrZXlwYWQgdHJhbnNtaXQiIG1vZGUgKi8KKwlvdXRfZmx1c2goKTsKKwl0ZXJtY2FwX2FjdGl2ZSA9IFRSVUU7CisJc2NyZWVuX3N0YXJ0KCk7CQkJLyogZG9uJ3Qga25vdyB3aGVyZSBjdXJzb3IgaXMgbm93ICovCisjaWZkZWYgRkVBVF9URVJNUkVTUE9OU0UKKwltYXlfcmVxX3Rlcm1yZXNwb25zZSgpOworCS8qIEltbWVkaWF0ZWx5IGNoZWNrIGZvciBhIHJlc3BvbnNlLiAgSWYgdF9DbyBjaGFuZ2VzLCB3ZSBkb24ndCB3YW50CisJICogdG8gcmVkcmF3IHdpdGggd3JvbmcgY29sb3JzIGZpcnN0LiAqLworCWNoZWNrX2Zvcl9jb2Rlc19mcm9tX3Rlcm0oKTsKKyNlbmRpZgorICAgIH0KK30KKworICAgIHZvaWQKK3N0b3B0ZXJtY2FwKCkKK3sKKyAgICBzY3JlZW5fc3RvcF9oaWdobGlnaHQoKTsKKyAgICByZXNldF9jdGVybV9jb2xvcnMoKTsKKyAgICBpZiAodGVybWNhcF9hY3RpdmUpCisgICAgeworI2lmZGVmIEZFQVRfVEVSTVJFU1BPTlNFCisJLyogTWF5IG5lZWQgdG8gY2hlY2sgZm9yIFRfQ1JWIHJlc3BvbnNlLiAqLworCWlmIChjcnZfc3RhdHVzID09IENSVl9TRU5UKQorCSAgICAodm9pZCl2cGVla2Nfbm9tYXAoKTsKKwkvKiBDaGVjayBmb3IgdGVybWNvZGVzIGZpcnN0LCBvdGhlcndpc2UgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBtYXkgZ2V0CisJICogdGhlbS4gKi8KKwljaGVja19mb3JfY29kZXNfZnJvbV90ZXJtKCk7CisjZW5kaWYKKwlvdXRfc3RyKFRfS0UpOwkJCS8qIHN0b3AgImtleXBhZCB0cmFuc21pdCIgbW9kZSAqLworCW91dF9mbHVzaCgpOworCXRlcm1jYXBfYWN0aXZlID0gRkFMU0U7CisJY3Vyc29yX29uKCk7CQkJLyoganVzdCBpbiBjYXNlIGl0IGlzIHN0aWxsIG9mZiAqLworCW91dF9zdHIoVF9URSk7CQkJLyogc3RvcCB0ZXJtY2FwIG1vZGUgKi8KKwlzY3JlZW5fc3RhcnQoKTsJCQkvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKwlvdXRfZmx1c2goKTsKKyAgICB9Cit9CisKKyNpZmRlZiBGRUFUX1RFUk1SRVNQT05TRQorLyoKKyAqIFJlcXVlc3QgdmVyc2lvbiBzdHJpbmcgKGZvciB4dGVybSkgd2hlbiBuZWVkZWQuCisgKiBPbmx5IGRvIHRoaXMgYWZ0ZXIgc3dpdGNoaW5nIHRvIHJhdyBtb2RlLCBvdGhlcndpc2UgdGhlIHJlc3VsdCB3aWxsIGJlCisgKiBlY2hvZWQuCisgKiBPbmx5IGRvIHRoaXMgYWZ0ZXIgdGVybWNhcCBtb2RlIGhhcyBiZWVuIHN0YXJ0ZWQsIG90aGVyd2lzZSB0aGUgY29kZXMgZm9yCisgKiB0aGUgY3Vyc29yIGtleXMgbWF5IGJlIHdyb25nLgorICogVGhlIHJlc3VsdCBpcyBjYXVnaHQgaW4gY2hlY2tfdGVybWNvZGUoKS4KKyAqLworICAgIHN0YXRpYyB2b2lkCittYXlfcmVxX3Rlcm1yZXNwb25zZSgpCit7CisgICAgaWYgKGNydl9zdGF0dXMgPT0gQ1JWX0dFVAorCSAgICAmJiBjdXJfdG1vZGUgPT0gVE1PREVfUkFXCisJICAgICYmIHRlcm1jYXBfYWN0aXZlCisjaWZkZWYgVU5JWAorCSAgICAmJiBpc2F0dHkoMSkKKyNlbmRpZgorCSAgICAmJiAqVF9DUlYgIT0gTlVMKQorICAgIHsKKwlvdXRfc3RyKFRfQ1JWKTsKKwljcnZfc3RhdHVzID0gQ1JWX1NFTlQ7CisJLyogY2hlY2sgZm9yIHRoZSBjaGFyYWN0ZXJzIG5vdywgb3RoZXJ3aXNlIHRoZXkgbWlnaHQgYmUgZWF0ZW4gYnkKKwkgKiBnZXRfa2V5c3Ryb2tlKCkgKi8KKwlvdXRfZmx1c2goKTsKKwkodm9pZCl2cGVla2Nfbm9tYXAoKTsKKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybiBUUlVFIHdoZW4gc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIHNjcmVlbi4KKyAqLworICAgIGludAorc3dhcHBpbmdfc2NyZWVuKCkKK3sKKyAgICByZXR1cm4gKGZ1bGxfc2NyZWVuICYmICpUX1RJICE9IE5VTCk7Cit9CisKKyNpZmRlZiBGRUFUX01PVVNFCisvKgorICogc2V0bW91c2UoKSAtIHN3aXRjaCBtb3VzZSBvbi9vZmYgZGVwZW5kaW5nIG9uIGN1cnJlbnQgbW9kZSBhbmQgJ21vdXNlJworICovCisgICAgdm9pZAorc2V0bW91c2UoKQoreworIyBpZmRlZiBGRUFUX01PVVNFX1RUWQorICAgIGludAkgICAgY2hlY2tmb3I7CisjIGVuZGlmCisKKyMgaWZkZWYgRkVBVF9NT1VTRVNIQVBFCisgICAgdXBkYXRlX21vdXNlc2hhcGUoLTEpOworIyBlbmRpZgorCisjIGlmZGVmIEZFQVRfTU9VU0VfVFRZIC8qIFNob3VsZCBiZSBvdXRzaWRlIHByb2MsIGJ1dCBtYXkgYnJlYWsgTU9VU0VTSEFQRSAqLworIyAgaWZkZWYgRkVBVF9HVUkKKyAgICAvKiBJbiB0aGUgR1VJIHRoZSBtb3VzZSBpcyBhbHdheXMgZW5hYmxlZC4gKi8KKyAgICBpZiAoZ3VpLmluX3VzZSkKKwlyZXR1cm47CisjICBlbmRpZgorICAgIC8qIGJlIHF1aWNrIHdoZW4gbW91c2UgaXMgb2ZmICovCisgICAgaWYgKCpwX21vdXNlID09IE5VTCB8fCBoYXNfbW91c2VfdGVybWNvZGUgPT0gMCkKKwlyZXR1cm47CisKKyAgICAvKiBkb24ndCBzd2l0Y2ggbW91c2Ugb24gd2hlbiBub3QgaW4gcmF3IG1vZGUgKEV4IG1vZGUpICovCisgICAgaWYgKGN1cl90bW9kZSAhPSBUTU9ERV9SQVcpCisgICAgeworCW1jaF9zZXRtb3VzZShGQUxTRSk7CisJcmV0dXJuOworICAgIH0KKworIyAgaWZkZWYgRkVBVF9WSVNVQUwKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSkKKwljaGVja2ZvciA9IE1PVVNFX1ZJU1VBTDsKKyAgICBlbHNlCisjICBlbmRpZgorCWlmIChTdGF0ZSA9PSBISVRSRVRVUk4gfHwgU3RhdGUgPT0gQVNLTU9SRSB8fCBTdGF0ZSA9PSBTRVRXU0laRSkKKwljaGVja2ZvciA9IE1PVVNFX1JFVFVSTjsKKyAgICBlbHNlIGlmIChTdGF0ZSAmIElOU0VSVCkKKwljaGVja2ZvciA9IE1PVVNFX0lOU0VSVDsKKyAgICBlbHNlIGlmIChTdGF0ZSAmIENNRExJTkUpCisJY2hlY2tmb3IgPSBNT1VTRV9DT01NQU5EOworICAgIGVsc2UgaWYgKFN0YXRlID09IENPTkZJUk0gfHwgU3RhdGUgPT0gRVhURVJOQ01EKQorCWNoZWNrZm9yID0gJyAnOyAvKiBkb24ndCB1c2UgbW91c2UgZm9yICI6Y29uZmlybSIgb3IgIjohY21kIiAqLworICAgIGVsc2UKKwljaGVja2ZvciA9IE1PVVNFX05PUk1BTDsgICAgLyogYXNzdW1lIG5vcm1hbCBtb2RlICovCisKKyAgICBpZiAobW91c2VfaGFzKGNoZWNrZm9yKSkKKwltY2hfc2V0bW91c2UoVFJVRSk7CisgICAgZWxzZQorCW1jaF9zZXRtb3VzZShGQUxTRSk7CisjIGVuZGlmCit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZgorICogLSAiYyIgaXMgaW4gJ21vdXNlJywgb3IKKyAqIC0gJ2EnIGlzIGluICdtb3VzZScgYW5kICJjIiBpcyBpbiBNT1VTRV9BLCBvcgorICogLSB0aGUgY3VycmVudCBidWZmZXIgaXMgYSBoZWxwIGZpbGUgYW5kICdoJyBpcyBpbiAnbW91c2UnIGFuZCB3ZSBhcmUgaW4gYQorICogICBub3JtYWwgZWRpdGluZyBtb2RlIChub3QgYXQgaGl0LXJldHVybiBtZXNzYWdlKS4KKyAqLworICAgIGludAorbW91c2VfaGFzKGMpCisgICAgaW50CSAgICBjOworeworICAgIGNoYXJfdQkqcDsKKworICAgIGZvciAocCA9IHBfbW91c2U7ICpwOyArK3ApCisJc3dpdGNoICgqcCkKKwl7CisJICAgIGNhc2UgJ2EnOiBpZiAodmltX3N0cmNocigoY2hhcl91ICopTU9VU0VfQSwgYykgIT0gTlVMTCkKKwkJCSAgcmV0dXJuIFRSVUU7CisJCSAgICAgIGJyZWFrOworCSAgICBjYXNlIE1PVVNFX0hFTFA6IGlmIChjICE9IE1PVVNFX1JFVFVSTiAmJiBjdXJidWYtPmJfaGVscCkKKwkJCQkgcmV0dXJuIFRSVUU7CisJCQkgICAgIGJyZWFrOworCSAgICBkZWZhdWx0OiBpZiAoYyA9PSAqcCkgcmV0dXJuIFRSVUU7IGJyZWFrOworCX0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSB3aGVuICdtb3VzZW1vZGVsJyBpcyBzZXQgdG8gInBvcHVwIiBvciAicG9wdXBfc2V0cG9zIi4KKyAqLworICAgIGludAorbW91c2VfbW9kZWxfcG9wdXAoKQoreworICAgIHJldHVybiAocF9tb3VzZW1bMF0gPT0gJ3AnKTsKK30KKyNlbmRpZgorCisvKgorICogQnkgb3V0cHV0dGluZyB0aGUgJ2N1cnNvciB2ZXJ5IHZpc2libGUnIHRlcm1jYXAgY29kZSwgZm9yIHNvbWUgd2luZG93ZWQKKyAqIHRlcm1pbmFscyB0aGlzIG1ha2VzIHRoZSBzY3JlZW4gc2Nyb2xsZWQgdG8gdGhlIGNvcnJlY3QgcG9zaXRpb24uCisgKiBVc2VkIHdoZW4gc3RhcnRpbmcgVmltIG9yIHJldHVybmluZyBmcm9tIGEgc2hlbGwuCisgKi8KKyAgICB2b2lkCitzY3JvbGxfc3RhcnQoKQoreworICAgIGlmICgqVF9WUyAhPSBOVUwpCisgICAgeworCW91dF9zdHIoVF9WUyk7CisJb3V0X3N0cihUX1ZFKTsKKwlzY3JlZW5fc3RhcnQoKTsJCQkvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgY3Vyc29yX2lzX29mZiA9IEZBTFNFOworCisvKgorICogRW5hYmxlIHRoZSBjdXJzb3IuCisgKi8KKyAgICB2b2lkCitjdXJzb3Jfb24oKQoreworICAgIGlmIChjdXJzb3JfaXNfb2ZmKQorICAgIHsKKwlvdXRfc3RyKFRfVkUpOworCWN1cnNvcl9pc19vZmYgPSBGQUxTRTsKKyAgICB9Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBjdXJzb3IuCisgKi8KKyAgICB2b2lkCitjdXJzb3Jfb2ZmKCkKK3sKKyAgICBpZiAoZnVsbF9zY3JlZW4pCisgICAgeworCWlmICghY3Vyc29yX2lzX29mZikKKwkgICAgb3V0X3N0cihUX1ZJKTsJICAgIC8qIGRpc2FibGUgY3Vyc29yICovCisJY3Vyc29yX2lzX29mZiA9IFRSVUU7CisgICAgfQorfQorCisvKgorICogU2V0IHNjcm9sbGluZyByZWdpb24gZm9yIHdpbmRvdyAnd3AnLgorICogVGhlIHJlZ2lvbiBzdGFydHMgJ29mZicgbGluZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHdpbmRvdy4KKyAqIEFsc28gc2V0IHRoZSB2ZXJ0aWNhbCBzY3JvbGwgcmVnaW9uIGZvciBhIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93LiAgQWx3YXlzCisgKiB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgd2luZG93LCBleGNsdWRpbmcgdGhlIHZlcnRpY2FsIHNlcGFyYXRvci4KKyAqLworICAgIHZvaWQKK3Njcm9sbF9yZWdpb25fc2V0KHdwLCBvZmYpCisgICAgd2luX1QJKndwOworICAgIGludAkJb2ZmOworeworICAgIE9VVF9TVFIodGdvdG8oKGNoYXIgKilUX0NTLCBXX1dJTlJPVyh3cCkgKyB3cC0+d19oZWlnaHQgLSAxLAorCQkJCQkJCSBXX1dJTlJPVyh3cCkgKyBvZmYpKTsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGlmICgqVF9DU1YgIT0gTlVMICYmIHdwLT53X3dpZHRoICE9IENvbHVtbnMpCisJT1VUX1NUUih0Z290bygoY2hhciAqKVRfQ1NWLCBXX1dJTkNPTCh3cCkgKyB3cC0+d193aWR0aCAtIDEsCisJCQkJCQkJICAgICAgIFdfV0lOQ09MKHdwKSkpOworI2VuZGlmCisgICAgc2NyZWVuX3N0YXJ0KCk7CQkgICAgLyogZG9uJ3Qga25vdyB3aGVyZSBjdXJzb3IgaXMgbm93ICovCit9CisKKy8qCisgKiBSZXNldCBzY3JvbGxpbmcgcmVnaW9uIHRvIHRoZSB3aG9sZSBzY3JlZW4uCisgKi8KKyAgICB2b2lkCitzY3JvbGxfcmVnaW9uX3Jlc2V0KCkKK3sKKyAgICBPVVRfU1RSKHRnb3RvKChjaGFyICopVF9DUywgKGludClSb3dzIC0gMSwgMCkpOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaWYgKCpUX0NTViAhPSBOVUwpCisJT1VUX1NUUih0Z290bygoY2hhciAqKVRfQ1NWLCAoaW50KUNvbHVtbnMgLSAxLCAwKSk7CisjZW5kaWYKKyAgICBzY3JlZW5fc3RhcnQoKTsJCSAgICAvKiBkb24ndCBrbm93IHdoZXJlIGN1cnNvciBpcyBub3cgKi8KK30KKworCisvKgorICogTGlzdCBvZiB0ZXJtaW5hbCBjb2RlcyB0aGF0IGFyZSBjdXJyZW50bHkgcmVjb2duaXplZC4KKyAqLworCitzdHJ1Y3QgdGVybWNvZGUKK3sKKyAgICBjaGFyX3UgIG5hbWVbMl07CSAgICAvKiB0ZXJtY2FwIG5hbWUgb2YgZW50cnkgKi8KKyAgICBjaGFyX3UgICpjb2RlOwkgICAgLyogdGVybWluYWwgY29kZSAoaW4gYWxsb2NhdGVkIG1lbW9yeSkgKi8KKyAgICBpbnQJICAgIGxlbjsJICAgIC8qIFNUUkxFTihjb2RlKSAqLworfSAqdGVybWNvZGVzID0gTlVMTDsKKworc3RhdGljIGludCAgdGNfbWF4X2xlbiA9IDA7IC8qIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgdGVybWNvZGVzW10gY2FuIGhvbGQgKi8KK3N0YXRpYyBpbnQgIHRjX2xlbiA9IDA7CSAgICAvKiBjdXJyZW50IG51bWJlciBvZiBlbnRyaWVzIGluIHRlcm1jb2Rlc1tdICovCisKKyAgICB2b2lkCitjbGVhcl90ZXJtY29kZXMoKQoreworICAgIHdoaWxlICh0Y19sZW4gPiAwKQorCXZpbV9mcmVlKHRlcm1jb2Rlc1stLXRjX2xlbl0uY29kZSk7CisgICAgdmltX2ZyZWUodGVybWNvZGVzKTsKKyAgICB0ZXJtY29kZXMgPSBOVUxMOworICAgIHRjX21heF9sZW4gPSAwOworCisjaWZkZWYgSEFWRV9UR0VURU5UCisgICAgQkMgPSAoY2hhciAqKWVtcHR5X29wdGlvbjsKKyAgICBVUCA9IChjaGFyICopZW1wdHlfb3B0aW9uOworICAgIFBDID0gTlVMOwkJCS8qIHNldCBwYWQgY2hhcmFjdGVyIHRvIE5VTCAqLworICAgIG9zcGVlZCA9IDA7CisjZW5kaWYKKworICAgIG5lZWRfZ2F0aGVyID0gVFJVRTsJCS8qIG5lZWQgdG8gZmlsbCB0ZXJtbGVhZGVyW10gKi8KK30KKworLyoKKyAqIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgbGlzdCBvZiB0ZXJtaW5hbCBjb2Rlcy4KKyAqIFRoZSBsaXN0IGlzIGtlcHQgYWxwaGFiZXRpY2FsIGZvciAiOnNldCB0ZXJtY2FwIgorICovCisgICAgdm9pZAorYWRkX3Rlcm1jb2RlKG5hbWUsIHN0cmluZywgdXNlXzhiaXQpCisgICAgY2hhcl91CSpuYW1lOworICAgIGNoYXJfdQkqc3RyaW5nOworICAgIGludAkJdXNlXzhiaXQ7CS8qIHJlcGxhY2UgNy1iaXQgY29udHJvbCBieSA4LWJpdCBvbmUgKi8KK3sKKyAgICBzdHJ1Y3QgdGVybWNvZGUgKm5ld190YzsKKyAgICBpbnQJCSAgICBpLCBqOworICAgIGNoYXJfdQkgICAgKnM7CisKKyAgICBpZiAoc3RyaW5nID09IE5VTEwgfHwgKnN0cmluZyA9PSBOVUwpCisgICAgeworCWRlbF90ZXJtY29kZShuYW1lKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgcyA9IHZpbV9zdHJzYXZlKHN0cmluZyk7CisgICAgaWYgKHMgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICAvKiBDaGFuZ2UgbGVhZGluZyA8RXNjPlsgdG8gQ1NJLCBjaGFuZ2UgPEVzYz5PIHRvIDxNLU8+LiAqLworICAgIGlmICh1c2VfOGJpdCAmJiB0ZXJtXzd0bzhiaXQoc3RyaW5nKSAhPSAwKQorICAgIHsKKwltY2hfbWVtbW92ZShzLCBzICsgMSwgU1RSTEVOKHMpKTsKKwlzWzBdID0gdGVybV83dG84Yml0KHN0cmluZyk7CisgICAgfQorCisgICAgbmVlZF9nYXRoZXIgPSBUUlVFOwkJLyogbmVlZCB0byBmaWxsIHRlcm1sZWFkZXJbXSAqLworCisgICAgLyoKKyAgICAgKiBuZWVkIHRvIG1ha2Ugc3BhY2UgZm9yIG1vcmUgZW50cmllcworICAgICAqLworICAgIGlmICh0Y19sZW4gPT0gdGNfbWF4X2xlbikKKyAgICB7CisJdGNfbWF4X2xlbiArPSAyMDsKKwluZXdfdGMgPSAoc3RydWN0IHRlcm1jb2RlICopYWxsb2MoCisJCQkgICAgKHVuc2lnbmVkKSh0Y19tYXhfbGVuICogc2l6ZW9mKHN0cnVjdCB0ZXJtY29kZSkpKTsKKwlpZiAobmV3X3RjID09IE5VTEwpCisJeworCSAgICB0Y19tYXhfbGVuIC09IDIwOworCSAgICByZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCB0Y19sZW47ICsraSkKKwkgICAgbmV3X3RjW2ldID0gdGVybWNvZGVzW2ldOworCXZpbV9mcmVlKHRlcm1jb2Rlcyk7CisJdGVybWNvZGVzID0gbmV3X3RjOworICAgIH0KKworICAgIC8qCisgICAgICogTG9vayBmb3IgZXhpc3RpbmcgZW50cnkgd2l0aCB0aGUgc2FtZSBuYW1lLCBpdCBpcyByZXBsYWNlZC4KKyAgICAgKiBMb29rIGZvciBhbiBleGlzdGluZyBlbnRyeSB0aGF0IGlzIGFscGhhYmV0aWNhbCBoaWdoZXIsIHRoZSBuZXcgZW50cnkKKyAgICAgKiBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZiBpdC4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgdGNfbGVuOyArK2kpCisgICAgeworCWlmICh0ZXJtY29kZXNbaV0ubmFtZVswXSA8IG5hbWVbMF0pCisJICAgIGNvbnRpbnVlOworCWlmICh0ZXJtY29kZXNbaV0ubmFtZVswXSA9PSBuYW1lWzBdKQorCXsKKwkgICAgaWYgKHRlcm1jb2Rlc1tpXS5uYW1lWzFdIDwgbmFtZVsxXSkKKwkJY29udGludWU7CisJICAgIC8qCisJICAgICAqIEV4YWN0IG1hdGNoOiBSZXBsYWNlIG9sZCBjb2RlLgorCSAgICAgKi8KKwkgICAgaWYgKHRlcm1jb2Rlc1tpXS5uYW1lWzFdID09IG5hbWVbMV0pCisJICAgIHsKKwkJdmltX2ZyZWUodGVybWNvZGVzW2ldLmNvZGUpOworCQktLXRjX2xlbjsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJLyoKKwkgKiBGb3VuZCBhbHBoYWJldGljYWwgbGFyZ2VyIGVudHJ5LCBtb3ZlIHJlc3QgdG8gaW5zZXJ0IG5ldyBlbnRyeQorCSAqLworCWZvciAoaiA9IHRjX2xlbjsgaiA+IGk7IC0taikKKwkgICAgdGVybWNvZGVzW2pdID0gdGVybWNvZGVzW2ogLSAxXTsKKwlicmVhazsKKyAgICB9CisKKyAgICB0ZXJtY29kZXNbaV0ubmFtZVswXSA9IG5hbWVbMF07CisgICAgdGVybWNvZGVzW2ldLm5hbWVbMV0gPSBuYW1lWzFdOworICAgIHRlcm1jb2Rlc1tpXS5jb2RlID0gczsKKyAgICB0ZXJtY29kZXNbaV0ubGVuID0gKGludClTVFJMRU4ocyk7CisgICAgKyt0Y19sZW47Cit9CisKKyAgICBjaGFyX3UgICoKK2ZpbmRfdGVybWNvZGUobmFtZSkKKyAgICBjaGFyX3UgICpuYW1lOworeworICAgIGludAkgICAgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB0Y19sZW47ICsraSkKKwlpZiAodGVybWNvZGVzW2ldLm5hbWVbMF0gPT0gbmFtZVswXSAmJiB0ZXJtY29kZXNbaV0ubmFtZVsxXSA9PSBuYW1lWzFdKQorCSAgICByZXR1cm4gdGVybWNvZGVzW2ldLmNvZGU7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfQ01ETF9DT01QTCkgfHwgZGVmaW5lZChQUk9UTykKKyAgICBjaGFyX3UgKgorZ2V0X3Rlcm1jb2RlKGkpCisgICAgaW50CSAgICBpOworeworICAgIGlmIChpID49IHRjX2xlbikKKwlyZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gJnRlcm1jb2Rlc1tpXS5uYW1lWzBdOworfQorI2VuZGlmCisKKyAgICB2b2lkCitkZWxfdGVybWNvZGUobmFtZSkKKyAgICBjaGFyX3UgICpuYW1lOworeworICAgIGludAkgICAgaTsKKworICAgIGlmICh0ZXJtY29kZXMgPT0gTlVMTCkJLyogbm90aGluZyB0aGVyZSB5ZXQgKi8KKwlyZXR1cm47CisKKyAgICBuZWVkX2dhdGhlciA9IFRSVUU7CQkvKiBuZWVkIHRvIGZpbGwgdGVybWxlYWRlcltdICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdGNfbGVuOyArK2kpCisJaWYgKHRlcm1jb2Rlc1tpXS5uYW1lWzBdID09IG5hbWVbMF0gJiYgdGVybWNvZGVzW2ldLm5hbWVbMV0gPT0gbmFtZVsxXSkKKwl7CisJICAgIGRlbF90ZXJtY29kZV9pZHgoaSk7CisJICAgIHJldHVybjsKKwl9CisgICAgLyogbm90IGZvdW5kLiBHaXZlIGVycm9yIG1lc3NhZ2U/ICovCit9CisKKyAgICBzdGF0aWMgdm9pZAorZGVsX3Rlcm1jb2RlX2lkeChpZHgpCisgICAgaW50CQlpZHg7Cit7CisgICAgaW50CQlpOworCisgICAgdmltX2ZyZWUodGVybWNvZGVzW2lkeF0uY29kZSk7CisgICAgLS10Y19sZW47CisgICAgZm9yIChpID0gaWR4OyBpIDwgdGNfbGVuOyArK2kpCisJdGVybWNvZGVzW2ldID0gdGVybWNvZGVzW2kgKyAxXTsKK30KKworI2lmZGVmIEZFQVRfVEVSTVJFU1BPTlNFCisvKgorICogQ2FsbGVkIHdoZW4gZGV0ZWN0ZWQgdGhhdCB0aGUgdGVybWluYWwgc2VuZHMgOC1iaXQgY29kZXMuCisgKiBDb252ZXJ0IGFsbCA3LWJpdCBjb2RlcyB0byB0aGVpciA4LWJpdCBlcXVpdmFsZW50LgorICovCisgICAgc3RhdGljIHZvaWQKK3N3aXRjaF90b184Yml0KCkKK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQljOworCisgICAgLyogT25seSBuZWVkIHRvIGRvIHNvbWV0aGluZyB3aGVuIG5vdCBhbHJlYWR5IHVzaW5nIDgtYml0IGNvZGVzLiAqLworICAgIGlmICghdGVybV9pc184Yml0KFRfTkFNRSkpCisgICAgeworCWZvciAoaSA9IDA7IGkgPCB0Y19sZW47ICsraSkKKwl7CisJICAgIGMgPSB0ZXJtXzd0bzhiaXQodGVybWNvZGVzW2ldLmNvZGUpOworCSAgICBpZiAoYyAhPSAwKQorCSAgICB7CisJCW1jaF9tZW1tb3ZlKHRlcm1jb2Rlc1tpXS5jb2RlICsgMSwgdGVybWNvZGVzW2ldLmNvZGUgKyAyLAorCQkJCQkgICAgICAgU1RSTEVOKHRlcm1jb2Rlc1tpXS5jb2RlICsgMSkpOworCQl0ZXJtY29kZXNbaV0uY29kZVswXSA9IGM7CisJICAgIH0KKwl9CisJbmVlZF9nYXRoZXIgPSBUUlVFOwkJLyogbmVlZCB0byBmaWxsIHRlcm1sZWFkZXJbXSAqLworICAgIH0KKyAgICBkZXRlY3RlZF84Yml0ID0gVFJVRTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ0hFQ0tfRE9VQkxFX0NMSUNLCitzdGF0aWMgbGluZW5yX1Qgb3JpZ190b3BsaW5lID0gMDsKKyMgaWZkZWYgRkVBVF9ESUZGCitzdGF0aWMgaW50IG9yaWdfdG9wZmlsbCA9IDA7CisjIGVuZGlmCisjZW5kaWYKKyNpZiAoZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoQ0hFQ0tfRE9VQkxFX0NMSUNLKSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDaGVja2luZyBmb3IgZG91YmxlIGNsaWNrcyBvdXJzZWx2ZXMuCisgKiAib3JpZ190b3BsaW5lIiBpcyB1c2VkIHRvIGF2b2lkIGRldGVjdGluZyBhIGRvdWJsZS1jbGljayB3aGVuIHRoZSB3aW5kb3cKKyAqIGNvbnRlbnRzIHNjcm9sbGVkIChlLmcuLCB3aGVuICdzY3JvbGxvZmYnIGlzIG5vbi16ZXJvKS4KKyAqLworLyoKKyAqIFNldCBvcmlnX3RvcGxpbmUuICBVc2VkIHdoZW4ganVtcGluZyB0byBhbm90aGVyIHdpbmRvdywgc28gdGhhdCBhIGRvdWJsZQorICogY2xpY2sgc3RpbGwgd29ya3MuCisgKi8KKyAgICB2b2lkCitzZXRfbW91c2VfdG9wbGluZSh3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgb3JpZ190b3BsaW5lID0gd3AtPndfdG9wbGluZTsKKyMgaWZkZWYgRkVBVF9ESUZGCisgICAgb3JpZ190b3BmaWxsID0gd3AtPndfdG9wZmlsbDsKKyMgZW5kaWYKK30KKyNlbmRpZgorCisvKgorICogQ2hlY2sgaWYgdHlwZWJ1Zi50Yl9idWZbXSBjb250YWlucyBhIHRlcm1pbmFsIGtleSBjb2RlLgorICogQ2hlY2sgZnJvbSB0eXBlYnVmLnRiX2J1Zlt0eXBlYnVmLnRiX29mZl0gdG8gdHlwZWJ1Zi50Yl9idWZbdHlwZWJ1Zi50Yl9vZmYKKyAqICsgbWF4X29mZnNldF0uCisgKiBSZXR1cm4gMCBmb3Igbm8gbWF0Y2gsIC0xIGZvciBwYXJ0aWFsIG1hdGNoLCA+IDAgZm9yIGZ1bGwgbWF0Y2guCisgKiBXaXRoIGEgbWF0Y2gsIHRoZSBtYXRjaCBpcyByZW1vdmVkLCB0aGUgcmVwbGFjZW1lbnQgY29kZSBpcyBpbnNlcnRlZCBpbgorICogdHlwZWJ1Zi50Yl9idWZbXSBhbmQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHR5cGVidWYudGJfYnVmW10gaXMKKyAqIHJldHVybmVkLgorICogV2hlbiAiYnVmIiBpcyBub3QgTlVMTCwgaXQgaXMgdXNlZCBpbnN0ZWFkIG9mIHR5cGVidWYudGJfYnVmW10uICJidWZsZW4iIGlzCisgKiB0aGVuIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpbiBidWZbXS4KKyAqLworICAgIGludAorY2hlY2tfdGVybWNvZGUobWF4X29mZnNldCwgYnVmLCBidWZsZW4pCisgICAgaW50CQltYXhfb2Zmc2V0OworICAgIGNoYXJfdQkqYnVmOworICAgIGludAkJYnVmbGVuOworeworICAgIGNoYXJfdQkqdHA7CisgICAgY2hhcl91CSpwOworICAgIGludAkJc2xlbiA9IDA7CS8qIGluaXQgZm9yIEdDQyAqLworICAgIGludAkJbGVuOworICAgIGludAkJb2Zmc2V0OworICAgIGNoYXJfdQlrZXlfbmFtZVsyXTsKKyAgICBpbnQJCW5ld19zbGVuOworICAgIGludAkJZXh0cmE7CisgICAgY2hhcl91CXN0cmluZ1tNQVhfS0VZX0NPREVfTEVOICsgMV07CisgICAgaW50CQlpLCBqOworICAgIGludAkJaWR4ID0gMDsKKyNpZmRlZiBGRUFUX01PVVNFCisjIGlmICFkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoRkVBVF9NT1VTRV9YVEVSTSkgfHwgZGVmaW5lZChGRUFUX0dVSSkKKyAgICBjaGFyX3UJYnl0ZXNbNl07CisgICAgaW50CQludW1fYnl0ZXM7CisjIGVuZGlmCisgICAgaW50CQltb3VzZV9jb2RlID0gMDsJICAgIC8qIGluaXQgZm9yIEdDQyAqLworICAgIGludAkJbW9kaWZpZXJzOworICAgIGludAkJaXNfY2xpY2ssIGlzX2RyYWc7CisgICAgaW50CQl3aGVlbF9jb2RlID0gMDsKKyAgICBpbnQJCWN1cnJlbnRfYnV0dG9uOworICAgIHN0YXRpYyBpbnQJaGVsZF9idXR0b24gPSBNT1VTRV9SRUxFQVNFOworICAgIHN0YXRpYyBpbnQJb3JpZ19udW1fY2xpY2tzID0gMTsKKyAgICBzdGF0aWMgaW50CW9yaWdfbW91c2VfY29kZSA9IDB4MDsKKyMgaWZkZWYgQ0hFQ0tfRE9VQkxFX0NMSUNLCisgICAgc3RhdGljIGludAlvcmlnX21vdXNlX2NvbCA9IDA7CisgICAgc3RhdGljIGludAlvcmlnX21vdXNlX3JvdyA9IDA7CisgICAgc3RhdGljIHN0cnVjdCB0aW1ldmFsICBvcmlnX21vdXNlX3RpbWUgPSB7MCwgMH07CisJCQkJCS8qIHRpbWUgb2YgcHJldmlvdXMgbW91c2UgY2xpY2sgKi8KKyAgICBzdHJ1Y3QgdGltZXZhbCAgbW91c2VfdGltZTsJCS8qIHRpbWUgb2YgY3VycmVudCBtb3VzZSBjbGljayAqLworICAgIGxvbmcJdGltZWRpZmY7CQkvKiBlbGFwc2VkIHRpbWUgaW4gbXNlYyAqLworIyBlbmRpZgorI2VuZGlmCisgICAgaW50CQljcG9fa29mZnNldDsKKyNpZmRlZiBGRUFUX01PVVNFX0dQTQorICAgIGV4dGVybiBpbnQJZ3BtX2ZsYWc7IC8qIGdwbSBsaWJyYXJ5IHZhcmlhYmxlICovCisjZW5kaWYKKworICAgIGNwb19rb2Zmc2V0ID0gKHZpbV9zdHJjaHIocF9jcG8sIENQT19LT0ZGU0VUKSAhPSBOVUxMKTsKKworICAgIC8qCisgICAgICogU3BlZWQgdXAgdGhlIGNoZWNrcyBmb3IgdGVybWluYWwgY29kZXMgYnkgZ2F0aGVyaW5nIGFsbCBmaXJzdCBieXRlcworICAgICAqIHVzZWQgaW4gdGVybWxlYWRlcltdLiAgT2Z0ZW4gdGhpcyBpcyBqdXN0IGEgc2luZ2xlIDxFc2M+LgorICAgICAqLworICAgIGlmIChuZWVkX2dhdGhlcikKKwlnYXRoZXJfdGVybWxlYWRlcigpOworCisgICAgLyoKKyAgICAgKiBDaGVjayBhdCBzZXZlcmFsIHBvc2l0aW9ucyBpbiB0eXBlYnVmLnRiX2J1ZltdLCB0byBjYXRjaCBzb21ldGhpbmcgbGlrZQorICAgICAqICJ4PFVwPiIgdGhhdCBjYW4gYmUgbWFwcGVkLiBTdG9wIGF0IG1heF9vZmZzZXQsIGJlY2F1c2UgY2hhcmFjdGVycworICAgICAqIGFmdGVyIHRoYXQgY2Fubm90IGJlIHVzZWQgZm9yIG1hcHBpbmcsIGFuZCB3aXRoIEByIGNvbW1hbmRzCisgICAgICogdHlwZWJ1Zi50Yl9idWZbXQorICAgICAqIGNhbiBiZWNvbWUgdmVyeSBsb25nLgorICAgICAqIFRoaXMgaXMgdXNlZCBvZnRlbiwgS0VFUCBJVCBGQVNUIQorICAgICAqLworICAgIGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbWF4X29mZnNldDsgKytvZmZzZXQpCisgICAgeworCWlmIChidWYgPT0gTlVMTCkKKwl7CisJICAgIGlmIChvZmZzZXQgPj0gdHlwZWJ1Zi50Yl9sZW4pCisJCWJyZWFrOworCSAgICB0cCA9IHR5cGVidWYudGJfYnVmICsgdHlwZWJ1Zi50Yl9vZmYgKyBvZmZzZXQ7CisJICAgIGxlbiA9IHR5cGVidWYudGJfbGVuIC0gb2Zmc2V0OwkvKiBsZW5ndGggb2YgdGhlIGlucHV0ICovCisJfQorCWVsc2UKKwl7CisJICAgIGlmIChvZmZzZXQgPj0gYnVmbGVuKQorCQlicmVhazsKKwkgICAgdHAgPSBidWYgKyBvZmZzZXQ7CisJICAgIGxlbiA9IGJ1ZmxlbiAtIG9mZnNldDsKKwl9CisKKwkvKgorCSAqIERvbid0IGNoZWNrIGNoYXJhY3RlcnMgYWZ0ZXIgS19TUEVDSUFMLCB0aG9zZSBhcmUgYWxyZWFkeQorCSAqIHRyYW5zbGF0ZWQgdGVybWluYWwgY2hhcnMgKGF2b2lkIHRyYW5zbGF0aW5nIH5AXkh4KS4KKwkgKi8KKwlpZiAoKnRwID09IEtfU1BFQ0lBTCkKKwl7CisJICAgIG9mZnNldCArPSAyOwkvKiB0aGVyZSBhcmUgYWx3YXlzIDIgZXh0cmEgY2hhcmFjdGVycyAqLworCSAgICBjb250aW51ZTsKKwl9CisKKwkvKgorCSAqIFNraXAgdGhpcyBwb3NpdGlvbiBpZiB0aGUgY2hhcmFjdGVyIGRvZXMgbm90IGFwcGVhciBhcyB0aGUgZmlyc3QKKwkgKiBjaGFyYWN0ZXIgaW4gdGVybV9zdHJpbmdzLiBUaGlzIHNwZWVkcyB1cCBhIGxvdCwgc2luY2UgbW9zdAorCSAqIHRlcm1jb2RlcyBzdGFydCB3aXRoIHRoZSBzYW1lIGNoYXJhY3RlciAoRVNDIG9yIENTSSkuCisJICovCisJaSA9ICp0cDsKKwlmb3IgKHAgPSB0ZXJtbGVhZGVyOyAqcCAmJiAqcCAhPSBpOyArK3ApCisJICAgIDsKKwlpZiAoKnAgPT0gTlVMKQorCSAgICBjb250aW51ZTsKKworCS8qCisJICogU2tpcCB0aGlzIHBvc2l0aW9uIGlmIHBfZWsgaXMgbm90IHNldCBhbmQgdHBbMF0gaXMgYW4gRVNDIGFuZCB3ZQorCSAqIGFyZSBpbiBJbnNlcnQgbW9kZS4KKwkgKi8KKwlpZiAoKnRwID09IEVTQyAmJiAhcF9layAmJiAoU3RhdGUgJiBJTlNFUlQpKQorCSAgICBjb250aW51ZTsKKworCW5ld19zbGVuID0gMDsJCS8qIExlbmd0aCBvZiB3aGF0IHdpbGwgcmVwbGFjZSB0aGUgdGVybWNvZGUgKi8KKwlrZXlfbmFtZVswXSA9IE5VTDsJLyogbm8ga2V5IG5hbWUgZm91bmQgeWV0ICovCisKKyNpZmRlZiBGRUFUX0dVSQorCWlmIChndWkuaW5fdXNlKQorCXsKKwkgICAgLyoKKwkgICAgICogR1VJIHNwZWNpYWwga2V5IGNvZGVzIGFyZSBhbGwgb2YgdGhlIGZvcm0gW0NTSSB4eF0uCisJICAgICAqLworCSAgICBpZiAoKnRwID09IENTSSkJICAgIC8qIFNwZWNpYWwga2V5IGZyb20gR1VJICovCisJICAgIHsKKwkJaWYgKGxlbiA8IDMpCisJCSAgICByZXR1cm4gLTE7CSAgICAvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJCXNsZW4gPSAzOworCQlrZXlfbmFtZVswXSA9IHRwWzFdOworCQlrZXlfbmFtZVsxXSA9IHRwWzJdOworCSAgICB9CisJfQorCWVsc2UKKyNlbmRpZiAvKiBGRUFUX0dVSSAqLworCXsKKwkgICAgZm9yIChpZHggPSAwOyBpZHggPCB0Y19sZW47ICsraWR4KQorCSAgICB7CisJCS8qCisJCSAqIElnbm9yZSB0aGUgZW50cnkgaWYgd2UgYXJlIG5vdCBhdCB0aGUgc3RhcnQgb2YKKwkJICogdHlwZWJ1Zi50Yl9idWZbXQorCQkgKiBhbmQgdGhlcmUgYXJlIG5vdCBlbm91Z2ggY2hhcmFjdGVycyB0byBtYWtlIGEgbWF0Y2guCisJCSAqIEJ1dCBvbmx5IHdoZW4gdGhlICdLJyBmbGFnIGlzIGluICdjcG9wdGlvbnMnLgorCQkgKi8KKwkJc2xlbiA9IHRlcm1jb2Rlc1tpZHhdLmxlbjsKKwkJaWYgKGNwb19rb2Zmc2V0ICYmIG9mZnNldCAmJiBsZW4gPCBzbGVuKQorCQkgICAgY29udGludWU7CisJCWlmIChTVFJOQ01QKHRlcm1jb2Rlc1tpZHhdLmNvZGUsIHRwLAorCQkJCSAgICAgKHNpemVfdCkoc2xlbiA+IGxlbiA/IGxlbiA6IHNsZW4pKSA9PSAwKQorCQl7CisJCSAgICBpZiAobGVuIDwgc2xlbikJCS8qIGdvdCBhIHBhcnRpYWwgc2VxdWVuY2UgKi8KKwkJCXJldHVybiAtMTsJCS8qIG5lZWQgdG8gZ2V0IG1vcmUgY2hhcnMgKi8KKworCQkgICAgLyoKKwkJICAgICAqIFdoZW4gZm91bmQgYSBrZXlwYWQga2V5LCBjaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIGtleQorCQkgICAgICogdGhhdCBtYXRjaGVzIGFuZCB1c2UgdGhhdCBvbmUuICBUaGlzIG1ha2VzIDxIb21lPiB0byBiZQorCQkgICAgICogZm91bmQgaW5zdGVhZCBvZiA8a0hvbWU+IHdoZW4gdGhleSBwcm9kdWNlIHRoZSBzYW1lCisJCSAgICAgKiBrZXkgY29kZS4KKwkJICAgICAqLworCQkgICAgaWYgKHRlcm1jb2Rlc1tpZHhdLm5hbWVbMF0gPT0gJ0snCisJCQkJICAgICAgICYmIFZJTV9JU0RJR0lUKHRlcm1jb2Rlc1tpZHhdLm5hbWVbMV0pKQorCQkgICAgeworCQkJZm9yIChqID0gaWR4ICsgMTsgaiA8IHRjX2xlbjsgKytqKQorCQkJICAgIGlmICh0ZXJtY29kZXNbal0ubGVuID09IHNsZW4gJiYKKwkJCQkgICAgU1RSTkNNUCh0ZXJtY29kZXNbaWR4XS5jb2RlLAorCQkJCQkgICAgdGVybWNvZGVzW2pdLmNvZGUsIHNsZW4pID09IDApCisJCQkgICAgeworCQkJCWlkeCA9IGo7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkgICAgfQorCisJCSAgICBrZXlfbmFtZVswXSA9IHRlcm1jb2Rlc1tpZHhdLm5hbWVbMF07CisJCSAgICBrZXlfbmFtZVsxXSA9IHRlcm1jb2Rlc1tpZHhdLm5hbWVbMV07CisKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisKKyNpZmRlZiBGRUFUX1RFUk1SRVNQT05TRQorCWlmIChrZXlfbmFtZVswXSA9PSBOVUwpCisJeworCSAgICAvKiBDaGVjayBmb3IgeHRlcm0gdmVyc2lvbiBzdHJpbmc6ICI8RXNjPls+e3h9O3t2ZXJzfTt7eX1jIi4gIEFsc28KKwkgICAgICogZWF0IG90aGVyIHBvc3NpYmxlIHJlc3BvbnNlcyB0byB0X1JWLCByeHZ0IHJldHVybnMKKwkgICAgICogIjxFc2M+Wz8xOzJjIi4gIEFsc28gYWNjZXB0IENTSSBpbnN0ZWFkIG9mIDxFc2M+Wy4gKi8KKwkgICAgaWYgKCpUX0NSViAhPSBOVUwgJiYgKCh0cFswXSA9PSBFU0MgJiYgdHBbMV0gPT0gJ1snICYmIGxlbiA+PSAzKQorCQkJCQkgICAgICAgfHwgKHRwWzBdID09IENTSSAmJiBsZW4gPj0gMikpKQorCSAgICB7CisJCWogPSAwOworCQlleHRyYSA9IDA7CisJCWZvciAoaSA9IDIgKyAodHBbMF0gIT0gQ1NJKTsKKwkJCWkgPCBsZW4gJiYgKFZJTV9JU0RJR0lUKHRwW2ldKQorCQkJICAgIHx8IHRwW2ldID09ICc7JyB8fCB0cFtpXSA9PSAnLicpOyArK2kpCisJCSAgICBpZiAodHBbaV0gPT0gJzsnICYmICsraiA9PSAxKQorCQkJZXh0cmEgPSBhdG9pKChjaGFyICopdHAgKyBpICsgMSk7CisJCWlmIChpID09IGxlbikKKwkJICAgIHJldHVybiAtMTsJCS8qIG5vdCBlbm91Z2ggY2hhcmFjdGVycyAqLworCisJCS8qIGVhdCBpdCB3aGVuIGF0IGxlYXN0IG9uZSBkaWdpdCBhbmQgZW5kaW5nIGluICdjJyAqLworCQlpZiAoaSA+IDIgKyAodHBbMF0gIT0gQ1NJKSAmJiB0cFtpXSA9PSAnYycpCisJCXsKKwkJICAgIGNydl9zdGF0dXMgPSBDUlZfR09UOworCisJCSAgICAvKiBJZiB0aGlzIGNvZGUgc3RhcnRzIHdpdGggQ1NJLCB5b3UgY2FuIGJldCB0aGF0IHRoZQorCQkgICAgICogdGVybWluYWwgdXNlcyA4LWJpdCBjb2Rlcy4gKi8KKwkJICAgIGlmICh0cFswXSA9PSBDU0kpCisJCQlzd2l0Y2hfdG9fOGJpdCgpOworCisJCSAgICAvKiByeHZ0IHNlbmRzIGl0cyB2ZXJzaW9uIG51bWJlcjogIjIwNzAzIiBpcyAyLjcuMy4KKwkJICAgICAqIElnbm9yZSBpdCBmb3Igd2hlbiB0aGUgdXNlciBoYXMgc2V0ICd0ZXJtJyB0byB4dGVybSwKKwkJICAgICAqIGV2ZW4gdGhvdWdoIGl0J3MgYW4gcnh2dC4gKi8KKwkJICAgIGlmIChleHRyYSA+IDIwMDAwKQorCQkJZXh0cmEgPSAwOworCisJCSAgICBpZiAodHBbMSArICh0cFswXSAhPSBDU0kpXSA9PSAnPicgJiYgaiA9PSAyKQorCQkgICAgeworCQkJLyogaWYgeHRlcm0gdmVyc2lvbiA+PSA5NSB1c2UgbW91c2UgZHJhZ2dpbmcgKi8KKwkJCWlmIChleHRyYSA+PSA5NSkKKwkJCSAgICBzZXRfb3B0aW9uX3ZhbHVlKChjaGFyX3UgKikidHR5bSIsIDBMLAorCQkJCQkJICAgICAgIChjaGFyX3UgKikieHRlcm0yIiwgMCk7CisJCQkvKiBpZiB4dGVybSB2ZXJzaW9uID49IDE0MSB0cnkgdG8gZ2V0IHRlcm1jYXAgY29kZXMgKi8KKwkJCWlmIChleHRyYSA+PSAxNDEpCisJCQl7CisJCQkgICAgY2hlY2tfZm9yX2NvZGVzID0gVFJVRTsKKwkJCSAgICBuZWVkX2dhdGhlciA9IFRSVUU7CisJCQkgICAgcmVxX2NvZGVzX2Zyb21fdGVybSgpOworCQkJfQorCQkgICAgfQorIyBpZmRlZiBGRUFUX0VWQUwKKwkJICAgIHNldF92aW1fdmFyX3N0cmluZyhWVl9URVJNUkVTUE9OU0UsIHRwLCBpICsgMSk7CisjIGVuZGlmCisjIGlmZGVmIEZFQVRfQVVUT0NNRAorCQkgICAgYXBwbHlfYXV0b2NtZHMoRVZFTlRfVEVSTVJFU1BPTlNFLAorCQkJCQkJICAgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisjIGVuZGlmCisJCSAgICBrZXlfbmFtZVswXSA9IChpbnQpS1NfRVhUUkE7CisJCSAgICBrZXlfbmFtZVsxXSA9IChpbnQpS0VfSUdOT1JFOworCQkgICAgc2xlbiA9IGkgKyAxOworCQl9CisJICAgIH0KKworCSAgICAvKiBDaGVjayBmb3IgJzxFc2M+UDErcjxoZXggYnl0ZXM+PEVzYz5cJy4gIEEgIjAiIGluc3RlYWQgb2YgdGhlCisJICAgICAqICIxIiBtZWFucyBhbiBpbnZhbGlkIHJlcXVlc3QuICovCisJICAgIGVsc2UgaWYgKGNoZWNrX2Zvcl9jb2RlcworCQkgICAgJiYgKCh0cFswXSA9PSBFU0MgJiYgdHBbMV0gPT0gJ1AnICYmIGxlbiA+PSAyKQorCQkJfHwgdHBbMF0gPT0gRENTKSkKKwkgICAgeworCQlqID0gMSArICh0cFswXSAhPSBEQ1MpOworCQlmb3IgKGkgPSBqOyBpIDwgbGVuOyArK2kpCisJCSAgICBpZiAoKHRwW2ldID09IEVTQyAmJiB0cFtpICsgMV0gPT0gJ1xcJyAmJiBpICsgMSA8IGxlbikKKwkJCSAgICB8fCB0cFtpXSA9PSBTVEVSTSkKKwkJICAgIHsKKwkJCWlmIChpIC0gaiA+PSAzICYmIHRwW2ogKyAxXSA9PSAnKycgJiYgdHBbaiArIDJdID09ICdyJykKKwkJCSAgICBnb3RfY29kZV9mcm9tX3Rlcm0odHAgKyBqLCBpKTsKKwkJCWtleV9uYW1lWzBdID0gKGludClLU19FWFRSQTsKKwkJCWtleV9uYW1lWzFdID0gKGludClLRV9JR05PUkU7CisJCQlzbGVuID0gaSArIDEgKyAodHBbaV0gPT0gRVNDKTsKKwkJCWJyZWFrOworCQkgICAgfQorCisJCWlmIChpID09IGxlbikKKwkJICAgIHJldHVybiAtMTsJCS8qIG5vdCBlbm91Z2ggY2hhcmFjdGVycyAqLworCSAgICB9CisJfQorI2VuZGlmCisKKwlpZiAoa2V5X25hbWVbMF0gPT0gTlVMKQorCSAgICBjb250aW51ZTsJICAgIC8qIE5vIG1hdGNoIGF0IHRoaXMgcG9zaXRpb24sIHRyeSBuZXh0IG9uZSAqLworCisJLyogV2Ugb25seSBnZXQgaGVyZSB3aGVuIHdlIGhhdmUgYSBjb21wbGV0ZSB0ZXJtY29kZSBtYXRjaCAqLworCisjaWZkZWYgRkVBVF9NT1VTRQorIyBpZmRlZiBGRUFUX0dVSQorCS8qCisJICogT25seSBpbiB0aGUgR1VJOiBGZXRjaCB0aGUgcG9pbnRlciBjb29yZGluYXRlcyBvZiB0aGUgc2Nyb2xsIGV2ZW50CisJICogc28gdGhhdCB3ZSBrbm93IHdoaWNoIHdpbmRvdyB0byBzY3JvbGwgbGF0ZXIuCisJICovCisJaWYgKGd1aS5pbl91c2UKKwkJJiYga2V5X25hbWVbMF0gPT0gKGludClLU19FWFRSQQorCQkmJiAoa2V5X25hbWVbMV0gPT0gKGludClLRV9YMU1PVVNFCisJCSAgICB8fCBrZXlfbmFtZVsxXSA9PSAoaW50KUtFX1gyTU9VU0UKKwkJICAgIHx8IGtleV9uYW1lWzFdID09IChpbnQpS0VfTU9VU0VET1dOCisJCSAgICB8fCBrZXlfbmFtZVsxXSA9PSAoaW50KUtFX01PVVNFVVApKQorCXsKKwkgICAgbnVtX2J5dGVzID0gZ2V0X2J5dGVzX2Zyb21fYnVmKHRwICsgc2xlbiwgYnl0ZXMsIDQpOworCSAgICBpZiAobnVtX2J5dGVzID09IC0xKQkvKiBub3QgZW5vdWdoIGNvb3JkaW5hdGVzICovCisJCXJldHVybiAtMTsKKwkgICAgbW91c2VfY29sID0gMTI4ICogKGJ5dGVzWzBdIC0gJyAnIC0gMSkgKyBieXRlc1sxXSAtICcgJyAtIDE7CisJICAgIG1vdXNlX3JvdyA9IDEyOCAqIChieXRlc1syXSAtICcgJyAtIDEpICsgYnl0ZXNbM10gLSAnICcgLSAxOworCSAgICBzbGVuICs9IG51bV9ieXRlczsKKwl9CisJZWxzZQorIyBlbmRpZgorCS8qCisJICogSWYgaXQgaXMgYSBtb3VzZSBjbGljaywgZ2V0IHRoZSBjb29yZGluYXRlcy4KKwkgKi8KKwlpZiAoa2V5X25hbWVbMF0gPT0gKGludClLU19NT1VTRQorIyBpZmRlZiBGRUFUX01PVVNFX0pTQgorCQl8fCBrZXlfbmFtZVswXSA9PSAoaW50KUtTX0pTQlRFUk1fTU9VU0UKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9NT1VTRV9ORVQKKwkJfHwga2V5X25hbWVbMF0gPT0gKGludClLU19ORVRURVJNX01PVVNFCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTU9VU0VfREVDCisJCXx8IGtleV9uYW1lWzBdID09IChpbnQpS1NfREVDX01PVVNFCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTU9VU0VfUFRFUk0KKwkJfHwga2V5X25hbWVbMF0gPT0gKGludClLU19QVEVSTV9NT1VTRQorIyBlbmRpZgorCQkpCisJeworCSAgICBpc19jbGljayA9IGlzX2RyYWcgPSBGQUxTRTsKKworIyBpZiAhZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKEZFQVRfTU9VU0VfWFRFUk0pIHx8IGRlZmluZWQoRkVBVF9HVUkpCisJICAgIGlmIChrZXlfbmFtZVswXSA9PSAoaW50KUtTX01PVVNFKQorCSAgICB7CisJCS8qCisJCSAqIEZvciB4dGVybSBhbmQgTVNET1Mgd2UgZ2V0ICI8dF9tb3VzZT5zY3IiLCB3aGVyZQorCQkgKiAgcyA9PSBlbmNvZGVkIGJ1dHRvbiBzdGF0ZToKKwkJICoJICAgMHgyMCA9IGxlZnQgYnV0dG9uIGRvd24KKwkJICoJICAgMHgyMSA9IG1pZGRsZSBidXR0b24gZG93bgorCQkgKgkgICAweDIyID0gcmlnaHQgYnV0dG9uIGRvd24KKwkJICoJICAgMHgyMyA9IGFueSBidXR0b24gcmVsZWFzZQorCQkgKgkgICAweDYwID0gYnV0dG9uIDQgZG93biAoc2Nyb2xsIHdoZWVsIGRvd24pCisJCSAqCSAgIDB4NjEgPSBidXR0b24gNSBkb3duIChzY3JvbGwgd2hlZWwgdXApCisJCSAqCWFkZCAweDA0IGZvciBTSElGVAorCQkgKglhZGQgMHgwOCBmb3IgQUxUCisJCSAqCWFkZCAweDEwIGZvciBDVFJMCisJCSAqCWFkZCAweDIwIGZvciBtb3VzZSBkcmFnICgweDQwIGlzIGRyYWcgd2l0aCBsZWZ0IGJ1dHRvbikKKwkJICogIGMgPT0gY29sdW1uICsgJyAnICsgMSA9PSBjb2x1bW4gKyAzMworCQkgKiAgciA9PSByb3cgKyAnICcgKyAxID09IHJvdyArIDMzCisJCSAqCisJCSAqIFRoZSBjb29yZGluYXRlcyBhcmUgcGFzc2VkIG9uIHRocm91Z2ggZ2xvYmFsIHZhcmlhYmxlcy4KKwkJICogVWdseSwgYnV0IHRoaXMgYXZvaWRzIHRyb3VibGUgd2l0aCBtb3VzZSBjbGlja3MgYXQgYW4KKwkJICogdW5leHBlY3RlZCBtb21lbnQgYW5kIGFsbG93cyBmb3IgbWFwcGluZyB0aGVtLgorCQkgKi8KKwkJZm9yICg7OykKKwkJeworI2lmZGVmIEZFQVRfR1VJCisJCSAgICBpZiAoZ3VpLmluX3VzZSkKKwkJICAgIHsKKwkJCS8qIEdVSSB1c2VzIG1vcmUgYml0cyBmb3IgY29sdW1ucyA+IDIyMyAqLworCQkJbnVtX2J5dGVzID0gZ2V0X2J5dGVzX2Zyb21fYnVmKHRwICsgc2xlbiwgYnl0ZXMsIDUpOworCQkJaWYgKG51bV9ieXRlcyA9PSAtMSkJLyogbm90IGVub3VnaCBjb29yZGluYXRlcyAqLworCQkJICAgIHJldHVybiAtMTsKKwkJCW1vdXNlX2NvZGUgPSBieXRlc1swXTsKKwkJCW1vdXNlX2NvbCA9IDEyOCAqIChieXRlc1sxXSAtICcgJyAtIDEpCisJCQkJCQkJICsgYnl0ZXNbMl0gLSAnICcgLSAxOworCQkJbW91c2Vfcm93ID0gMTI4ICogKGJ5dGVzWzNdIC0gJyAnIC0gMSkKKwkJCQkJCQkgKyBieXRlc1s0XSAtICcgJyAtIDE7CisJCSAgICB9CisJCSAgICBlbHNlCisjZW5kaWYKKwkJICAgIHsKKwkJCW51bV9ieXRlcyA9IGdldF9ieXRlc19mcm9tX2J1Zih0cCArIHNsZW4sIGJ5dGVzLCAzKTsKKwkJCWlmIChudW1fYnl0ZXMgPT0gLTEpCS8qIG5vdCBlbm91Z2ggY29vcmRpbmF0ZXMgKi8KKwkJCSAgICByZXR1cm4gLTE7CisJCQltb3VzZV9jb2RlID0gYnl0ZXNbMF07CisJCQltb3VzZV9jb2wgPSBieXRlc1sxXSAtICcgJyAtIDE7CisJCQltb3VzZV9yb3cgPSBieXRlc1syXSAtICcgJyAtIDE7CisJCSAgICB9CisJCSAgICBzbGVuICs9IG51bV9ieXRlczsKKworCQkgICAgLyogSWYgdGhlIGZvbGxvd2luZyBieXRlcyBpcyBhbHNvIGEgbW91c2UgY29kZSBhbmQgaXQgaGFzCisJCSAgICAgKiB0aGUgc2FtZSBjb2RlLCBkdW1wIHRoaXMgb25lIGFuZCBnZXQgdGhlIG5leHQuICBUaGlzCisJCSAgICAgKiBtYWtlcyBkcmFnZ2luZyBhIHdob2xlIGxvdCBmYXN0ZXIuICovCisjaWZkZWYgRkVBVF9HVUkKKwkJICAgIGlmIChndWkuaW5fdXNlKQorCQkJaiA9IDM7CisJCSAgICBlbHNlCisjZW5kaWYKKwkJCWogPSB0ZXJtY29kZXNbaWR4XS5sZW47CisJCSAgICBpZiAoU1RSTkNNUCh0cCwgdHAgKyBzbGVuLCAoc2l6ZV90KWopID09IDAKKwkJCSAgICAmJiB0cFtzbGVuICsgal0gPT0gbW91c2VfY29kZQorCQkJICAgICYmIHRwW3NsZW4gKyBqICsgMV0gIT0gTlVMCisJCQkgICAgJiYgdHBbc2xlbiArIGogKyAyXSAhPSBOVUwKKyNpZmRlZiBGRUFUX0dVSQorCQkJICAgICYmICghZ3VpLmluX3VzZQorCQkJCXx8ICh0cFtzbGVuICsgaiArIDNdICE9IE5VTAorCQkJCQkmJiB0cFtzbGVuICsgaiArIDRdICE9IE5VTCkpCisjZW5kaWYKKwkJCSAgICApCisJCQlzbGVuICs9IGo7CisJCSAgICBlbHNlCisJCQlicmVhazsKKwkJfQorCisjICBpZiAhZGVmaW5lZChNU1dJTikgJiYgIWRlZmluZWQoTVNET1MpCisJCS8qCisJCSAqIEhhbmRsZSBtb3VzZSBldmVudHMuCisJCSAqIFJlY29nbml6ZSB0aGUgeHRlcm0gbW91c2Ugd2hlZWwsIGJ1dCBub3QgaW4gdGhlIEdVSSwgdGhlCisJCSAqIExpbnV4IGNvbnNvbGUgd2l0aCBHUE0gYW5kIHRoZSBNUy1ET1Mgb3IgV2luMzIgY29uc29sZQorCQkgKiAobXVsdGktY2xpY2tzIHVzZSA+PSAweDYwKS4KKwkJICovCisJCWlmIChtb3VzZV9jb2RlID49IE1PVVNFV0hFRUxfTE9XCisjICAgaWZkZWYgRkVBVF9HVUkKKwkJCSYmICFndWkuaW5fdXNlCisjICAgZW5kaWYKKyMgICBpZmRlZiBGRUFUX01PVVNFX0dQTQorCQkJJiYgZ3BtX2ZsYWcgPT0gMAorIyAgIGVuZGlmCisJCQkpCisJCXsKKwkJICAgIC8qIEtlZXAgdGhlIG1vdXNlX2NvZGUgYmVmb3JlIGl0J3MgY2hhbmdlZCwgc28gdGhhdCB3ZQorCQkgICAgICogcmVtZW1iZXIgdGhhdCBpdCB3YXMgYSBtb3VzZSB3aGVlbCBjbGljay4gKi8KKwkJICAgIHdoZWVsX2NvZGUgPSBtb3VzZV9jb2RlOworCQl9CisjICAgaWZkZWYgRkVBVF9NT1VTRV9YVEVSTQorCQllbHNlIGlmIChoZWxkX2J1dHRvbiA9PSBNT1VTRV9SRUxFQVNFCisjICAgIGlmZGVmIEZFQVRfR1VJCisJCQkmJiAhZ3VpLmluX3VzZQorIyAgICBlbmRpZgorCQkJJiYgKG1vdXNlX2NvZGUgPT0gMHgyMyB8fCBtb3VzZV9jb2RlID09IDB4MjQpKQorCQl7CisJCSAgICAvKiBBcHBhcmVudGx5IHVzZWQgYnkgcnh2dCBzY3JvbGwgd2hlZWwuICovCisJCSAgICB3aGVlbF9jb2RlID0gbW91c2VfY29kZSAtIDB4MjMgKyBNT1VTRVdIRUVMX0xPVzsKKwkJfQorIyAgIGVuZGlmCisKKyMgICBpZiBkZWZpbmVkKFVOSVgpICYmIGRlZmluZWQoRkVBVF9NT1VTRV9UVFkpCisJCWVsc2UgaWYgKHVzZV94dGVybV9tb3VzZSgpID4gMSkKKwkJeworCQkgICAgaWYgKG1vdXNlX2NvZGUgJiBNT1VTRV9EUkFHX1hURVJNKQorCQkJbW91c2VfY29kZSB8PSBNT1VTRV9EUkFHOworCQl9CisjICAgZW5kaWYKKyMgICBpZmRlZiBGRUFUX1hDTElQQk9BUkQKKwkJZWxzZSBpZiAoIShtb3VzZV9jb2RlICYgTU9VU0VfRFJBRyAmIH5NT1VTRV9DTElDS19NQVNLKSkKKwkJeworCQkgICAgaWYgKChtb3VzZV9jb2RlICYgTU9VU0VfUkVMRUFTRSkgPT0gTU9VU0VfUkVMRUFTRSkKKwkJCXN0b3BfeHRlcm1fdHJhY2UoKTsKKwkJICAgIGVsc2UKKwkJCXN0YXJ0X3h0ZXJtX3RyYWNlKG1vdXNlX2NvZGUpOworCQl9CisjICAgZW5kaWYKKyMgIGVuZGlmCisJICAgIH0KKyMgZW5kaWYgLyogIVVOSVggfHwgRkVBVF9NT1VTRV9YVEVSTSAqLworIyBpZmRlZiBGRUFUX01PVVNFX05FVAorCSAgICBpZiAoa2V5X25hbWVbMF0gPT0gKGludClLU19ORVRURVJNX01PVVNFKQorCSAgICB7CisJCWludCBtYywgbXI7CisKKwkJLyogZXhwZWN0IGEgcmF0aGVyIGxpbWl0ZWQgc2VxdWVuY2UgbGlrZTogYmFsYW5jaW5nIHsKKwkJICogXDAzM302LDQ1XHIKKwkJICogJzYnIGlzIHRoZSByb3csIDQ1IGlzIHRoZSBjb2x1bW4KKwkJICovCisJCXAgPSB0cCArIHNsZW47CisJCW1yID0gZ2V0ZGlnaXRzKCZwKTsKKwkJaWYgKCpwKysgIT0gJywnKQorCQkgICAgcmV0dXJuIC0xOworCQltYyA9IGdldGRpZ2l0cygmcCk7CisJCWlmICgqcCsrICE9ICdccicpCisJCSAgICByZXR1cm4gLTE7CisKKwkJbW91c2VfY29sID0gbWMgLSAxOworCQltb3VzZV9yb3cgPSBtciAtIDE7CisJCW1vdXNlX2NvZGUgPSBNT1VTRV9MRUZUOworCQlzbGVuICs9IChpbnQpKHAgLSAodHAgKyBzbGVuKSk7CisJICAgIH0KKyMgZW5kaWYJLyogRkVBVF9NT1VTRV9ORVQgKi8KKyMgaWZkZWYgRkVBVF9NT1VTRV9KU0IKKwkgICAgaWYgKGtleV9uYW1lWzBdID09IChpbnQpS1NfSlNCVEVSTV9NT1VTRSkKKwkgICAgeworCQlpbnQgbXVsdCwgdmFsLCBpdGVyLCBidXR0b24sIHN0YXR1czsKKworCQkvKiBKU0JURVJNIElucHV0IE1vZGVsCisJCSAqIFwwMzNbMH56dyB1bmlxIGVzY2FwZSBzZXF1ZW5jZQorCQkgKiAoTC14KSAgTGVmdCBidXR0b24gcHJlc3NlZCAtIG5vdCBwcmVzc2VkIHggbm90IHJlcG9ydGluZworCQkgKiAoTS14KSAgTWlkZGxlIGJ1dHRvbiBwcmVzc2VkIC0gbm90IHByZXNzZWQgeCBub3QgcmVwb3J0aW5nCisJCSAqIChSLXgpICBSaWdodCBidXR0b24gcHJlc3NlZCAtIG5vdCBwcmVzc2VkIHggbm90IHJlcG9ydGluZworCQkgKiAoU0RtZHUpICBTaW5nbGUgLCBEb3VibGUgY2xpY2ssIG0gbW91c2UgbW92ZSBkIGJ1dHRvbiBkb3duCisJCSAqCQkJCQkJICAgdSBidXR0b24gdXAKKwkJICogICMjIyAgIFggY3Vyc29yIHBvc2l0aW9uIHBhZGRlZCB0byAzIGRpZ2l0cworCQkgKiAgIyMjICAgWSBjdXJzb3IgcG9zaXRpb24gcGFkZGVkIHRvIDMgZGlnaXRzCisJCSAqIChzLXgpICBTSElGVCBrZXkgcHJlc3NlZCAtIG5vdCBwcmVzc2VkIHggbm90IHJlcG9ydGluZworCQkgKiAoYy14KSAgQ1RSTCBrZXkgcHJlc3NlZCAtIG5vdCBwcmVzc2VkIHggbm90IHJlcG9ydGluZworCQkgKiBcMDMzXFwgdGVybWluYXRlaW5nIHNlcXVlbmNlCisJCSAqLworCisJCXAgPSB0cCArIHNsZW47CisJCWJ1dHRvbiA9IG1vdXNlX2NvZGUgPSAwOworCQlzd2l0Y2ggKCpwKyspCisJCXsKKwkJICAgIGNhc2UgJ0wnOiBidXR0b24gPSAxOyBicmVhazsKKwkJICAgIGNhc2UgJy0nOiBicmVhazsKKwkJICAgIGNhc2UgJ3gnOiBicmVhazsgLyogaWdub3JlIHNlcXVlbmNlICovCisJCSAgICBkZWZhdWx0OiAgcmV0dXJuIC0xOyAvKiBVbmtub3duIFJlc3VsdCAqLworCQl9CisJCXN3aXRjaCAoKnArKykKKwkJeworCQkgICAgY2FzZSAnTSc6IGJ1dHRvbiB8PSAyOyBicmVhazsKKwkJICAgIGNhc2UgJy0nOiBicmVhazsKKwkJICAgIGNhc2UgJ3gnOiBicmVhazsgLyogaWdub3JlIHNlcXVlbmNlICovCisJCSAgICBkZWZhdWx0OiAgcmV0dXJuIC0xOyAvKiBVbmtub3duIFJlc3VsdCAqLworCQl9CisJCXN3aXRjaCAoKnArKykKKwkJeworCQkgICAgY2FzZSAnUic6IGJ1dHRvbiB8PSA0OyBicmVhazsKKwkJICAgIGNhc2UgJy0nOiBicmVhazsKKwkJICAgIGNhc2UgJ3gnOiBicmVhazsgLyogaWdub3JlIHNlcXVlbmNlICovCisJCSAgICBkZWZhdWx0OiAgcmV0dXJuIC0xOyAvKiBVbmtub3duIFJlc3VsdCAqLworCQl9CisJCXN0YXR1cyA9ICpwKys7CisJCWZvciAodmFsID0gMCwgbXVsdCA9IDEwMCwgaXRlciA9IDA7IGl0ZXIgPCAzOyBpdGVyKyssCisJCQkJCQkJICAgICAgbXVsdCAvPSAxMCwgcCsrKQorCQkgICAgaWYgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpCisJCQl2YWwgKz0gKCpwIC0gJzAnKSAqIG11bHQ7CisJCSAgICBlbHNlCisJCQlyZXR1cm4gLTE7CisJCW1vdXNlX2NvbCA9IHZhbDsKKwkJZm9yICh2YWwgPSAwLCBtdWx0ID0gMTAwLCBpdGVyID0gMDsgaXRlciA8IDM7IGl0ZXIrKywKKwkJCQkJCQkgICAgICBtdWx0IC89IDEwLCBwKyspCisJCSAgICBpZiAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykKKwkJCXZhbCArPSAoKnAgLSAnMCcpICogbXVsdDsKKwkJICAgIGVsc2UKKwkJCXJldHVybiAtMTsKKwkJbW91c2Vfcm93ID0gdmFsOworCQlzd2l0Y2ggKCpwKyspCisJCXsKKwkJICAgIGNhc2UgJ3MnOiBidXR0b24gfD0gODsgYnJlYWs7ICAvKiBTSElGVCBrZXkgUHJlc3NlZCAqLworCQkgICAgY2FzZSAnLSc6IGJyZWFrOyAgLyogTm90IFByZXNzZWQgKi8KKwkJICAgIGNhc2UgJ3gnOiBicmVhazsgIC8qIE5vdCBSZXBvcnRpbmcgKi8KKwkJICAgIGRlZmF1bHQ6ICByZXR1cm4gLTE7IC8qIFVua25vd24gUmVzdWx0ICovCisJCX0KKwkJc3dpdGNoICgqcCsrKQorCQl7CisJCSAgICBjYXNlICdjJzogYnV0dG9uIHw9IDE2OyBicmVhazsgIC8qIENUUkwga2V5IFByZXNzZWQgKi8KKwkJICAgIGNhc2UgJy0nOiBicmVhazsgIC8qIE5vdCBQcmVzc2VkICovCisJCSAgICBjYXNlICd4JzogYnJlYWs7ICAvKiBOb3QgUmVwb3J0aW5nICovCisJCSAgICBkZWZhdWx0OiAgcmV0dXJuIC0xOyAvKiBVbmtub3duIFJlc3VsdCAqLworCQl9CisJCWlmICgqcCsrICE9ICdcMDMzJykKKwkJICAgIHJldHVybiAtMTsKKwkJaWYgKCpwKysgIT0gJ1xcJykKKwkJICAgIHJldHVybiAtMTsKKwkJc3dpdGNoIChzdGF0dXMpCisJCXsKKwkJICAgIGNhc2UgJ0QnOiAvKiBEb3VibGUgQ2xpY2sgKi8KKwkJICAgIGNhc2UgJ1MnOiAvKiBTaW5nbGUgQ2xpY2sgKi8KKwkJCWlmIChidXR0b24gJiAxKSBtb3VzZV9jb2RlIHw9IE1PVVNFX0xFRlQ7CisJCQlpZiAoYnV0dG9uICYgMikgbW91c2VfY29kZSB8PSBNT1VTRV9NSURETEU7CisJCQlpZiAoYnV0dG9uICYgNCkgbW91c2VfY29kZSB8PSBNT1VTRV9SSUdIVDsKKwkJCWlmIChidXR0b24gJiA4KSBtb3VzZV9jb2RlIHw9IE1PVVNFX1NISUZUOworCQkJaWYgKGJ1dHRvbiAmIDE2KSBtb3VzZV9jb2RlIHw9IE1PVVNFX0NUUkw7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ20nOiAvKiBNb3VzZSBtb3ZlICovCisJCQlpZiAoYnV0dG9uICYgMSkgbW91c2VfY29kZSB8PSBNT1VTRV9MRUZUOworCQkJaWYgKGJ1dHRvbiAmIDIpIG1vdXNlX2NvZGUgfD0gTU9VU0VfTUlERExFOworCQkJaWYgKGJ1dHRvbiAmIDQpIG1vdXNlX2NvZGUgfD0gTU9VU0VfUklHSFQ7CisJCQlpZiAoYnV0dG9uICYgOCkgbW91c2VfY29kZSB8PSBNT1VTRV9TSElGVDsKKwkJCWlmIChidXR0b24gJiAxNikgbW91c2VfY29kZSB8PSBNT1VTRV9DVFJMOworCQkJaWYgKChidXR0b24gJiA3KSAhPSAwKQorCQkJeworCQkJICAgIGhlbGRfYnV0dG9uID0gbW91c2VfY29kZTsKKwkJCSAgICBtb3VzZV9jb2RlIHw9IE1PVVNFX0RSQUc7CisJCQl9CisJCQlpc19kcmFnID0gVFJVRTsKKwkJCXNob3dtb2RlKCk7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ2QnOiAvKiBCdXR0b24gRG93biAqLworCQkJaWYgKGJ1dHRvbiAmIDEpIG1vdXNlX2NvZGUgfD0gTU9VU0VfTEVGVDsKKwkJCWlmIChidXR0b24gJiAyKSBtb3VzZV9jb2RlIHw9IE1PVVNFX01JRERMRTsKKwkJCWlmIChidXR0b24gJiA0KSBtb3VzZV9jb2RlIHw9IE1PVVNFX1JJR0hUOworCQkJaWYgKGJ1dHRvbiAmIDgpIG1vdXNlX2NvZGUgfD0gTU9VU0VfU0hJRlQ7CisJCQlpZiAoYnV0dG9uICYgMTYpIG1vdXNlX2NvZGUgfD0gTU9VU0VfQ1RSTDsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAndSc6IC8qIEJ1dHRvbiBVcCAqLworCQkJaWYgKGJ1dHRvbiAmIDEpCisJCQkgICAgbW91c2VfY29kZSB8PSBNT1VTRV9MRUZUIHwgTU9VU0VfUkVMRUFTRTsKKwkJCWlmIChidXR0b24gJiAyKQorCQkJICAgIG1vdXNlX2NvZGUgfD0gTU9VU0VfTUlERExFIHwgTU9VU0VfUkVMRUFTRTsKKwkJCWlmIChidXR0b24gJiA0KQorCQkJICAgIG1vdXNlX2NvZGUgfD0gTU9VU0VfUklHSFQgfCBNT1VTRV9SRUxFQVNFOworCQkJaWYgKGJ1dHRvbiAmIDgpCisJCQkgICAgbW91c2VfY29kZSB8PSBNT1VTRV9TSElGVDsKKwkJCWlmIChidXR0b24gJiAxNikKKwkJCSAgICBtb3VzZV9jb2RlIHw9IE1PVVNFX0NUUkw7CisJCQlicmVhazsKKwkJICAgIGRlZmF1bHQ6IHJldHVybiAtMTsgLyogVW5rbm93biBSZXN1bHQgKi8KKwkJfQorCisJCXNsZW4gKz0gKHAgLSAodHAgKyBzbGVuKSk7CisJICAgIH0KKyMgZW5kaWYgLyogRkVBVF9NT1VTRV9KU0IgKi8KKyMgaWZkZWYgRkVBVF9NT1VTRV9ERUMKKwkgICAgaWYgKGtleV9uYW1lWzBdID09IChpbnQpS1NfREVDX01PVVNFKQorCSAgICB7CisJICAgICAgIC8qIFRoZSBERUMgTG9jYXRvciBJbnB1dCBNb2RlbAorCQkqIE5ldHRlcm0gZGVsaXZlcnMgdGhlIGNvZGUgc2VxdWVuY2U6CisJCSogIFwwMzNbMjs0OzI0OzgwJncgIChsZWZ0IGJ1dHRvbiBkb3duKQorCQkqICBcMDMzWzM7MDsyNDs4MCZ3ICAobGVmdCBidXR0b24gdXApCisJCSogIFwwMzNbNjsxOzI0OzgwJncgIChyaWdodCBidXR0b24gZG93bikKKwkJKiAgXDAzM1s3OzA7MjQ7ODAmdyAgKHJpZ2h0IGJ1dHRvbiB1cCkKKwkJKiBDU0kgUGUgOyBQYiA7IFByIDsgUGMgOyBQcCAmIHcKKwkJKiBQZSBpcyB0aGUgZXZlbnQgY29kZQorCQkqIFBiIGlzIHRoZSBidXR0b24gY29kZQorCQkqIFByIGlzIHRoZSByb3cgY29vcmRpbmF0ZQorCQkqIFBjIGlzIHRoZSBjb2x1bW4gY29vcmRpbmF0ZQorCQkqIFBwIGlzIHRoZSB0aGlyZCBjb29yZGluYXRlIChwYWdlIG51bWJlcikKKwkJKiBQZSwgdGhlIGV2ZW50IGNvZGUgaW5kaWNhdGVzIHdoYXQgZXZlbnQgY2F1c2VkIHRoaXMgcmVwb3J0CisJCSogICAgVGhlIGZvbGxvd2luZyBldmVudCBjb2RlcyBhcmUgZGVmaW5lZDoKKwkJKiAgICAwIC0gcmVxdWVzdCwgdGhlIHRlcm1pbmFsIHJlY2VpdmVkIGFuIGV4cGxpY2l0IHJlcXVlc3QKKwkJKgkgZm9yIGEgbG9jYXRvciByZXBvcnQsIGJ1dCB0aGUgbG9jYXRvciBpcyB1bmF2YWlsYWJsZQorCQkqICAgIDEgLSByZXF1ZXN0LCB0aGUgdGVybWluYWwgcmVjZWl2ZWQgYW4gZXhwbGljaXQgcmVxdWVzdAorCQkqCSBmb3IgYSBsb2NhdG9yIHJlcG9ydAorCQkqICAgIDIgLSBsZWZ0IGJ1dHRvbiBkb3duCisJCSogICAgMyAtIGxlZnQgYnV0dG9uIHVwCisJCSogICAgNCAtIG1pZGRsZSBidXR0b24gZG93bgorCQkqICAgIDUgLSBtaWRkbGUgYnV0dG9uIHVwCisJCSogICAgNiAtIHJpZ2h0IGJ1dHRvbiBkb3duCisJCSogICAgNyAtIHJpZ2h0IGJ1dHRvbiB1cAorCQkqICAgIDggLSBmb3VydGggYnV0dG9uIGRvd24KKwkJKiAgICA5IC0gZm91cnRoIGJ1dHRvbiB1cAorCQkqICAgIDEwIC0gbG9jYXRvciBvdXRzaWRlIGZpbHRlciByZWN0YW5nbGUKKwkJKiBQYiwgdGhlIGJ1dHRvbiBjb2RlLCBBU0NJSSBkZWNpbWFsIDAtMTUgaW5kaWNhdGluZyB3aGljaAorCQkqICAgYnV0dG9ucyBhcmUgZG93biBpZiBhbnkuIFRoZSBzdGF0ZSBvZiB0aGUgZm91ciBidXR0b25zCisJCSogICBvbiB0aGUgbG9jYXRvciBjb3JyZXNwb25kIHRvIHRoZSBsb3cgZm91ciBiaXRzIG9mIHRoZQorCQkqICAgZGVjaW1hbCB2YWx1ZSwKKwkJKiAgICIxIiBtZWFucyBidXR0b24gZGVwcmVzc2VkCisJCSogICAwIC0gbm8gYnV0dG9ucyBkb3duLAorCQkqICAgMSAtIHJpZ2h0LAorCQkqICAgMiAtIG1pZGRsZSwKKwkJKiAgIDQgLSBsZWZ0LAorCQkqICAgOCAtIGZvdXJ0aAorCQkqIFByIGlzIHRoZSByb3cgY29vcmRpbmF0ZSBvZiB0aGUgbG9jYXRvciBwb3NpdGlvbiBpbiB0aGUgcGFnZSwKKwkJKiAgIGVuY29kZWQgYXMgYW4gQVNDSUkgZGVjaW1hbCB2YWx1ZS4KKwkJKiAgIElmIFByIGlzIG9taXR0ZWQsIHRoZSBsb2NhdG9yIHBvc2l0aW9uIGlzIHVuZGVmaW5lZAorCQkqICAgKG91dHNpZGUgdGhlIHRlcm1pbmFsIHdpbmRvdyBmb3IgZXhhbXBsZSkuCisJCSogUGMgaXMgdGhlIGNvbHVtbiBjb29yZGluYXRlIG9mIHRoZSBsb2NhdG9yIHBvc2l0aW9uIGluIHRoZQorCQkqICAgcGFnZSwgZW5jb2RlZCBhcyBhbiBBU0NJSSBkZWNpbWFsIHZhbHVlLgorCQkqICAgSWYgUGMgaXMgb21pdHRlZCwgdGhlIGxvY2F0b3IgcG9zaXRpb24gaXMgdW5kZWZpbmVkCisJCSogICAob3V0c2lkZSB0aGUgdGVybWluYWwgd2luZG93IGZvciBleGFtcGxlKS4KKwkJKiBQcCBpcyB0aGUgcGFnZSBjb29yZGluYXRlIG9mIHRoZSBsb2NhdG9yIHBvc2l0aW9uCisJCSogICBlbmNvZGVkIGFzIGFuIEFTQ0lJIGRlY2ltYWwgdmFsdWUuCisJCSogICBUaGUgcGFnZSBjb29yZGluYXRlIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBsb2NhdG9yIGlzIG9uCisJCSogICBwYWdlIG9uZSAodGhlIGRlZmF1bHQpLiAgV2UgaWdub3JlIGl0IGFueXdheS4KKwkJKi8KKwkJaW50IFBlLCBQYiwgUHIsIFBjOworCisJCXAgPSB0cCArIHNsZW47CisKKwkJLyogZ2V0IGV2ZW50IHN0YXR1cyAqLworCQlQZSA9IGdldGRpZ2l0cygmcCk7CisJCWlmICgqcCsrICE9ICc7JykKKwkJICAgIHJldHVybiAtMTsKKworCQkvKiBnZXQgYnV0dG9uIHN0YXR1cyAqLworCQlQYiA9IGdldGRpZ2l0cygmcCk7CisJCWlmICgqcCsrICE9ICc7JykKKwkJICAgIHJldHVybiAtMTsKKworCQkvKiBnZXQgcm93IHN0YXR1cyAqLworCQlQciA9IGdldGRpZ2l0cygmcCk7CisJCWlmICgqcCsrICE9ICc7JykKKwkJICAgIHJldHVybiAtMTsKKworCQkvKiBnZXQgY29sdW1uIHN0YXR1cyAqLworCQlQYyA9IGdldGRpZ2l0cygmcCk7CisKKwkJLyogdGhlIHBhZ2UgcGFyYW1ldGVyIGlzIG9wdGlvbmFsICovCisJCWlmICgqcCA9PSAnOycpCisJCXsKKwkJICAgIHArKzsKKwkJICAgICh2b2lkKWdldGRpZ2l0cygmcCk7CisJCX0KKwkJaWYgKCpwKysgIT0gJyYnKQorCQkgICAgcmV0dXJuIC0xOworCQlpZiAoKnArKyAhPSAndycpCisJCSAgICByZXR1cm4gLTE7CisKKwkJbW91c2VfY29kZSA9IDA7CisJCXN3aXRjaCAoUGUpCisJCXsKKwkJY2FzZSAgMDogcmV0dXJuIC0xOyAvKiBwb3NpdGlvbiByZXF1ZXN0IHdoaWxlIHVuYXZhaWxhYmxlICovCisJCWNhc2UgIDE6IC8qIGEgcmVzcG9uc2UgdG8gYSBsb2NhdG9yIHBvc2l0aW9uIHJlcXVlc3QgaW5jbHVkZXMKKwkJCSAgICB0aGUgc3RhdHVzIG9mIGFsbCBidXR0b25zICovCisJCQkgUGIgJj0gNzsgICAvKiBtYXNrIG9mZiBhbmQgaWdub3JlIGZvdXJ0aCBidXR0b24gKi8KKwkJCSBpZiAoUGIgJiA0KQorCQkJICAgICBtb3VzZV9jb2RlICA9IE1PVVNFX0xFRlQ7CisJCQkgaWYgKFBiICYgMikKKwkJCSAgICAgbW91c2VfY29kZSAgPSBNT1VTRV9NSURETEU7CisJCQkgaWYgKFBiICYgMSkKKwkJCSAgICAgbW91c2VfY29kZSAgPSBNT1VTRV9SSUdIVDsKKwkJCSBpZiAoUGIpCisJCQkgeworCQkJICAgICBoZWxkX2J1dHRvbiA9IG1vdXNlX2NvZGU7CisJCQkgICAgIG1vdXNlX2NvZGUgfD0gTU9VU0VfRFJBRzsKKwkJCSAgICAgV2FudFF1ZXJ5TW91c2UgPSAxOworCQkJIH0KKwkJCSBpc19kcmFnID0gVFJVRTsKKwkJCSBzaG93bW9kZSgpOworCQkJIGJyZWFrOworCQljYXNlICAyOiBtb3VzZV9jb2RlID0gTU9VU0VfTEVGVDsKKwkJCSBXYW50UXVlcnlNb3VzZSA9IDE7CisJCQkgYnJlYWs7CisJCWNhc2UgIDM6IG1vdXNlX2NvZGUgPSBNT1VTRV9SRUxFQVNFIHwgTU9VU0VfTEVGVDsKKwkJCSBicmVhazsKKwkJY2FzZSAgNDogbW91c2VfY29kZSA9IE1PVVNFX01JRERMRTsKKwkJCSBXYW50UXVlcnlNb3VzZSA9IDE7CisJCQkgYnJlYWs7CisJCWNhc2UgIDU6IG1vdXNlX2NvZGUgPSBNT1VTRV9SRUxFQVNFIHwgTU9VU0VfTUlERExFOworCQkJIGJyZWFrOworCQljYXNlICA2OiBtb3VzZV9jb2RlID0gTU9VU0VfUklHSFQ7CisJCQkgV2FudFF1ZXJ5TW91c2UgPSAxOworCQkJIGJyZWFrOworCQljYXNlICA3OiBtb3VzZV9jb2RlID0gTU9VU0VfUkVMRUFTRSB8IE1PVVNFX1JJR0hUOworCQkJIGJyZWFrOworCQljYXNlICA4OiByZXR1cm4gLTE7IC8qIGZvdXJ0aCBidXR0b24gZG93biAqLworCQljYXNlICA5OiByZXR1cm4gLTE7IC8qIGZvdXJ0aCBidXR0b24gdXAgKi8KKwkJY2FzZSAxMDogcmV0dXJuIC0xOyAvKiBtb3VzZSBvdXRzaWRlIG9mIGZpbHRlciByZWN0YW5nbGUgKi8KKwkJZGVmYXVsdDogcmV0dXJuIC0xOyAvKiBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KKwkJfQorCisJCW1vdXNlX2NvbCA9IFBjIC0gMTsKKwkJbW91c2Vfcm93ID0gUHIgLSAxOworCisJCXNsZW4gKz0gKGludCkocCAtICh0cCArIHNsZW4pKTsKKwkgICAgfQorIyBlbmRpZiAvKiBGRUFUX01PVVNFX0RFQyAqLworIyBpZmRlZiBGRUFUX01PVVNFX1BURVJNCisJICAgIGlmIChrZXlfbmFtZVswXSA9PSAoaW50KUtTX1BURVJNX01PVVNFKQorCSAgICB7CisJCWludCBidXR0b24sIG51bV9jbGlja3MsIGFjdGlvbiwgbWMsIG1yOworCisJCXAgPSB0cCArIHNsZW47CisKKwkJYWN0aW9uID0gZ2V0ZGlnaXRzKCZwKTsKKwkJaWYgKCpwKysgIT0gJzsnKQorCQkgICAgcmV0dXJuIC0xOworCisJCW1vdXNlX3JvdyA9IGdldGRpZ2l0cygmcCk7CisJCWlmICgqcCsrICE9ICc7JykKKwkJICAgIHJldHVybiAtMTsKKwkJbW91c2VfY29sID0gZ2V0ZGlnaXRzKCZwKTsKKwkJaWYgKCpwKysgIT0gJzsnKQorCQkgICAgcmV0dXJuIC0xOworCisJCWJ1dHRvbiA9IGdldGRpZ2l0cygmcCk7CisJCW1vdXNlX2NvZGUgPSAwOworCisJCXN3aXRjaCggYnV0dG9uICkKKwkJeworCQkgICAgY2FzZSA0OiBtb3VzZV9jb2RlID0gTU9VU0VfTEVGVDsgYnJlYWs7CisJCSAgICBjYXNlIDE6IG1vdXNlX2NvZGUgPSBNT1VTRV9SSUdIVDsgYnJlYWs7CisJCSAgICBjYXNlIDI6IG1vdXNlX2NvZGUgPSBNT1VTRV9NSURETEU7IGJyZWFrOworCQkgICAgZGVmYXVsdDogcmV0dXJuIC0xOworCQl9CisKKwkJc3dpdGNoKCBhY3Rpb24gKQorCQl7CisJCSAgICBjYXNlIDMxOiAvKiBJbml0aWFsIHByZXNzICovCisJCQlpZiAoKnArKyAhPSAnOycpCisJCQkgICAgcmV0dXJuIC0xOworCisJCQludW1fY2xpY2tzID0gZ2V0ZGlnaXRzKCZwKTsgLyogTm90IHVzZWQgKi8KKwkJCWJyZWFrOworCisJCSAgICBjYXNlIDMyOiAvKiBSZWxlYXNlICovCisJCQltb3VzZV9jb2RlIHw9IE1PVVNFX1JFTEVBU0U7CisJCQlicmVhazsKKworCQkgICAgY2FzZSAzMzogLyogRHJhZyAqLworCQkJaGVsZF9idXR0b24gPSBtb3VzZV9jb2RlOworCQkJbW91c2VfY29kZSB8PSBNT1VTRV9EUkFHOworCQkJYnJlYWs7CisKKwkJICAgIGRlZmF1bHQ6CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoKnArKyAhPSAndCcpCisJCSAgICByZXR1cm4gLTE7CisKKwkJc2xlbiArPSAocCAtICh0cCArIHNsZW4pKTsKKwkgICAgfQorIyBlbmRpZiAvKiBGRUFUX01PVVNFX1BURVJNICovCisKKwkgICAgLyogSW50ZXJwcmV0IHRoZSBtb3VzZSBjb2RlICovCisJICAgIGN1cnJlbnRfYnV0dG9uID0gKG1vdXNlX2NvZGUgJiBNT1VTRV9DTElDS19NQVNLKTsKKwkgICAgaWYgKGN1cnJlbnRfYnV0dG9uID09IE1PVVNFX1JFTEVBU0UKKyMgaWZkZWYgRkVBVF9NT1VTRV9YVEVSTQorCQkgICAgJiYgd2hlZWxfY29kZSA9PSAwCisjIGVuZGlmCisJCSAgICApCisJICAgIHsKKwkJLyoKKwkJICogSWYgd2UgZ2V0IGEgbW91c2UgZHJhZyBvciByZWxlYXNlIGV2ZW50IHdoZW4KKwkJICogdGhlcmUgaXMgbm8gbW91c2UgYnV0dG9uIGhlbGQgZG93biAoaGVsZF9idXR0b24gPT0KKwkJICogTU9VU0VfUkVMRUFTRSksIHByb2R1Y2UgYSBLX0lHTk9SRSBiZWxvdy4KKwkJICogKGNhbiBoYXBwZW4gd2hlbiB5b3UgaG9sZCBkb3duIHR3byBidXR0b25zCisJCSAqIGFuZCB0aGVuIGxldCB0aGVtIGdvLCBvciBjbGljayBpbiB0aGUgbWVudSBiYXIsIGJ1dCBub3QKKwkJICogb24gYSBtZW51LCBhbmQgZHJhZyBpbnRvIHRoZSB0ZXh0KS4KKwkJICovCisJCWlmICgobW91c2VfY29kZSAmIE1PVVNFX0RSQUcpID09IE1PVVNFX0RSQUcpCisJCSAgICBpc19kcmFnID0gVFJVRTsKKwkJY3VycmVudF9idXR0b24gPSBoZWxkX2J1dHRvbjsKKwkgICAgfQorCSAgICBlbHNlIGlmICh3aGVlbF9jb2RlID09IDApCisJICAgIHsKKyMgaWZkZWYgQ0hFQ0tfRE9VQkxFX0NMSUNLCisjICBpZmRlZiBGRUFUX01PVVNFX0dQTQorIyAgIGlmZGVmIEZFQVRfR1VJCisJCS8qCisJCSAqIE9ubHkgZm9yIFVuaXgsIHdoZW4gR1VJIG9yIGdwbSBpcyBub3QgYWN0aXZlLCB3ZSBoYW5kbGUKKwkJICogbXVsdGktY2xpY2tzIGhlcmUuCisJCSAqLworCQlpZiAoZ3BtX2ZsYWcgPT0gMCAmJiAhZ3VpLmluX3VzZSkKKyMgICBlbHNlCisJCWlmIChncG1fZmxhZyA9PSAwKQorIyAgIGVuZGlmCisjICBlbHNlCisjICAgaWZkZWYgRkVBVF9HVUkKKwkJaWYgKCFndWkuaW5fdXNlKQorIyAgIGVuZGlmCisjICBlbmRpZgorCQl7CisJCSAgICAvKgorCQkgICAgICogQ29tcHV0ZSB0aGUgdGltZSBlbGFwc2VkIHNpbmNlIHRoZSBwcmV2aW91cyBtb3VzZSBjbGljay4KKwkJICAgICAqLworCQkgICAgZ2V0dGltZW9mZGF5KCZtb3VzZV90aW1lLCBOVUxMKTsKKwkJICAgIHRpbWVkaWZmID0gKG1vdXNlX3RpbWUudHZfdXNlYworCQkJCQkgICAgLSBvcmlnX21vdXNlX3RpbWUudHZfdXNlYykgLyAxMDAwOworCQkgICAgaWYgKHRpbWVkaWZmIDwgMCkKKwkJCS0tb3JpZ19tb3VzZV90aW1lLnR2X3NlYzsKKwkJICAgIHRpbWVkaWZmICs9IChtb3VzZV90aW1lLnR2X3NlYworCQkJCQkgICAgIC0gb3JpZ19tb3VzZV90aW1lLnR2X3NlYykgKiAxMDAwOworCQkgICAgb3JpZ19tb3VzZV90aW1lID0gbW91c2VfdGltZTsKKwkJICAgIGlmIChtb3VzZV9jb2RlID09IG9yaWdfbW91c2VfY29kZQorCQkJICAgICYmIHRpbWVkaWZmIDwgcF9tb3VzZXQKKwkJCSAgICAmJiBvcmlnX251bV9jbGlja3MgIT0gNAorCQkJICAgICYmIG9yaWdfbW91c2VfY29sID09IG1vdXNlX2NvbAorCQkJICAgICYmIG9yaWdfbW91c2Vfcm93ID09IG1vdXNlX3JvdworI2lmZGVmIEZFQVRfRElGRgorCQkJICAgICYmIG9yaWdfdG9wZmlsbCA9PSBjdXJ3aW4tPndfdG9wZmlsbAorI2VuZGlmCisJCQkgICAgJiYgb3JpZ190b3BsaW5lID09IGN1cndpbi0+d190b3BsaW5lKQorCQkJKytvcmlnX251bV9jbGlja3M7CisJCSAgICBlbHNlCisJCQlvcmlnX251bV9jbGlja3MgPSAxOworCQkgICAgb3JpZ19tb3VzZV9jb2wgPSBtb3VzZV9jb2w7CisJCSAgICBvcmlnX21vdXNlX3JvdyA9IG1vdXNlX3JvdzsKKwkJICAgIG9yaWdfdG9wbGluZSA9IGN1cndpbi0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfRElGRgorCQkgICAgb3JpZ190b3BmaWxsID0gY3Vyd2luLT53X3RvcGZpbGw7CisjZW5kaWYKKwkJfQorIyAgaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChGRUFUX01PVVNFX0dQTSkKKwkJZWxzZQorCQkgICAgb3JpZ19udW1fY2xpY2tzID0gTlVNX01PVVNFX0NMSUNLUyhtb3VzZV9jb2RlKTsKKyMgIGVuZGlmCisjIGVsc2UKKwkJb3JpZ19udW1fY2xpY2tzID0gTlVNX01PVVNFX0NMSUNLUyhtb3VzZV9jb2RlKTsKKyMgZW5kaWYKKwkJaXNfY2xpY2sgPSBUUlVFOworCQlvcmlnX21vdXNlX2NvZGUgPSBtb3VzZV9jb2RlOworCSAgICB9CisJICAgIGlmICghaXNfZHJhZykKKwkJaGVsZF9idXR0b24gPSBtb3VzZV9jb2RlICYgTU9VU0VfQ0xJQ0tfTUFTSzsKKworCSAgICAvKgorCSAgICAgKiBUcmFuc2xhdGUgdGhlIGFjdHVhbCBtb3VzZSBldmVudCBpbnRvIGEgcHNldWRvIG1vdXNlIGV2ZW50LgorCSAgICAgKiBGaXJzdCB3b3JrIG91dCB3aGF0IG1vZGlmaWVycyBhcmUgdG8gYmUgdXNlZC4KKwkgICAgICovCisJICAgIG1vZGlmaWVycyA9IDB4MDsKKwkgICAgaWYgKG9yaWdfbW91c2VfY29kZSAmIE1PVVNFX1NISUZUKQorCQltb2RpZmllcnMgfD0gTU9EX01BU0tfU0hJRlQ7CisJICAgIGlmIChvcmlnX21vdXNlX2NvZGUgJiBNT1VTRV9DVFJMKQorCQltb2RpZmllcnMgfD0gTU9EX01BU0tfQ1RSTDsKKwkgICAgaWYgKG9yaWdfbW91c2VfY29kZSAmIE1PVVNFX0FMVCkKKwkJbW9kaWZpZXJzIHw9IE1PRF9NQVNLX0FMVDsKKwkgICAgaWYgKG9yaWdfbnVtX2NsaWNrcyA9PSAyKQorCQltb2RpZmllcnMgfD0gTU9EX01BU0tfMkNMSUNLOworCSAgICBlbHNlIGlmIChvcmlnX251bV9jbGlja3MgPT0gMykKKwkJbW9kaWZpZXJzIHw9IE1PRF9NQVNLXzNDTElDSzsKKwkgICAgZWxzZSBpZiAob3JpZ19udW1fY2xpY2tzID09IDQpCisJCW1vZGlmaWVycyB8PSBNT0RfTUFTS180Q0xJQ0s7CisKKwkgICAgLyogQWRkIHRoZSBtb2RpZmllciBjb2RlcyB0byBvdXIgc3RyaW5nICovCisJICAgIGlmIChtb2RpZmllcnMgIT0gMCkKKwkgICAgeworCQlzdHJpbmdbbmV3X3NsZW4rK10gPSBLX1NQRUNJQUw7CisJCXN0cmluZ1tuZXdfc2xlbisrXSA9IChpbnQpS1NfTU9ESUZJRVI7CisJCXN0cmluZ1tuZXdfc2xlbisrXSA9IG1vZGlmaWVyczsKKwkgICAgfQorCisJICAgIC8qIFdvcmsgb3V0IG91ciBwc2V1ZG8gbW91c2UgZXZlbnQgKi8KKwkgICAga2V5X25hbWVbMF0gPSAoaW50KUtTX0VYVFJBOworCSAgICBpZiAod2hlZWxfY29kZSAhPSAwKQorCQlrZXlfbmFtZVsxXSA9ICh3aGVlbF9jb2RlICYgMSkKKwkJCQkJPyAoaW50KUtFX01PVVNFVVAgOiAoaW50KUtFX01PVVNFRE9XTjsKKwkgICAgZWxzZQorCQlrZXlfbmFtZVsxXSA9IGdldF9wc2V1ZG9fbW91c2VfY29kZShjdXJyZW50X2J1dHRvbiwKKwkJCQkJCQkgICBpc19jbGljaywgaXNfZHJhZyk7CisJfQorI2VuZGlmIC8qIEZFQVRfTU9VU0UgKi8KKworI2lmZGVmIEZFQVRfR1VJCisJLyoKKwkgKiBJZiB1c2luZyB0aGUgR1VJLCB0aGVuIHdlIGdldCBtZW51IGFuZCBzY3JvbGxiYXIgZXZlbnRzLgorCSAqCisJICogQSBtZW51IGV2ZW50IGlzIGVuY29kZWQgYXMgS19TUEVDSUFMLCBLU19NRU5VLCBLRV9GSUxMRVIgZm9sbG93ZWQgYnkKKwkgKiBmb3VyIGJ5dGVzIHdoaWNoIGFyZSB0byBiZSB0YWtlbiBhcyBhIHBvaW50ZXIgdG8gdGhlIHZpbW1lbnVfVAorCSAqIHN0cnVjdHVyZS4KKwkgKgorCSAqIEEgc2Nyb2xsYmFyIGV2ZW50IGlzIEtfU1BFQ0lBTCwgS1NfVkVSX1NDUk9MTEJBUiwgS0VfRklMTEVSIGZvbGxvd2VkCisJICogYnkgb25lIGJ5dGUgcmVwcmVzZW50aW5nIHRoZSBzY3JvbGxiYXIgbnVtYmVyLCBhbmQgdGhlbiBmb3VyIGJ5dGVzCisJICogcmVwcmVzZW50aW5nIGEgbG9uZ191IHdoaWNoIGlzIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNjcm9sbGJhci4KKwkgKgorCSAqIEEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgZXZlbnQgaXMgS19TUEVDSUFMLCBLU19IT1JfU0NST0xMQkFSLAorCSAqIEtFX0ZJTExFUiBmb2xsb3dlZCBieSBmb3VyIGJ5dGVzIHJlcHJlc2VudGluZyBhIGxvbmdfdSB3aGljaCBpcyB0aGUKKwkgKiBuZXcgdmFsdWUgb2YgdGhlIHNjcm9sbGJhci4KKwkgKi8KKyMgaWZkZWYgRkVBVF9NRU5VCisJZWxzZSBpZiAoa2V5X25hbWVbMF0gPT0gKGludClLU19NRU5VKQorCXsKKwkgICAgbG9uZ191CXZhbDsKKworCSAgICBudW1fYnl0ZXMgPSBnZXRfbG9uZ19mcm9tX2J1Zih0cCArIHNsZW4sICZ2YWwpOworCSAgICBpZiAobnVtX2J5dGVzID09IC0xKQorCQlyZXR1cm4gLTE7CisJICAgIGN1cnJlbnRfbWVudSA9ICh2aW1tZW51X1QgKil2YWw7CisJICAgIHNsZW4gKz0gbnVtX2J5dGVzOworCX0KKyMgZW5kaWYKKyMgaWZuZGVmIFVTRV9PTl9GTFlfU0NST0xMCisJZWxzZSBpZiAoa2V5X25hbWVbMF0gPT0gKGludClLU19WRVJfU0NST0xMQkFSKQorCXsKKwkgICAgbG9uZ191CXZhbDsKKworCSAgICAvKiBHZXQgdGhlIGxhc3Qgc2Nyb2xsYmFyIGV2ZW50IGluIHRoZSBxdWV1ZSBvZiB0aGUgc2FtZSB0eXBlICovCisJICAgIGogPSAwOworCSAgICBmb3IgKGkgPSAwOyB0cFtqXSA9PSBDU0kgJiYgdHBbaiArIDFdID09IEtTX1ZFUl9TQ1JPTExCQVIKKwkJCQkJCSAgICAgJiYgdHBbaiArIDJdICE9IE5VTDsgKytpKQorCSAgICB7CisJCWogKz0gMzsKKwkJbnVtX2J5dGVzID0gZ2V0X2J5dGVzX2Zyb21fYnVmKHRwICsgaiwgYnl0ZXMsIDEpOworCQlpZiAobnVtX2J5dGVzID09IC0xKQorCQkgICAgYnJlYWs7CisJCWlmIChpID09IDApCisJCSAgICBjdXJyZW50X3Njcm9sbGJhciA9IChpbnQpYnl0ZXNbMF07CisJCWVsc2UgaWYgKGN1cnJlbnRfc2Nyb2xsYmFyICE9IChpbnQpYnl0ZXNbMF0pCisJCSAgICBicmVhazsKKwkJaiArPSBudW1fYnl0ZXM7CisJCW51bV9ieXRlcyA9IGdldF9sb25nX2Zyb21fYnVmKHRwICsgaiwgJnZhbCk7CisJCWlmIChudW1fYnl0ZXMgPT0gLTEpCisJCSAgICBicmVhazsKKwkJc2Nyb2xsYmFyX3ZhbHVlID0gdmFsOworCQlqICs9IG51bV9ieXRlczsKKwkJc2xlbiA9IGo7CisJICAgIH0KKwkgICAgaWYgKGkgPT0gMCkJCS8qIG5vdCBlbm91Z2ggY2hhcmFjdGVycyB0byBtYWtlIG9uZSAqLworCQlyZXR1cm4gLTE7CisJfQorCWVsc2UgaWYgKGtleV9uYW1lWzBdID09IChpbnQpS1NfSE9SX1NDUk9MTEJBUikKKwl7CisJICAgIGxvbmdfdQl2YWw7CisKKwkgICAgLyogR2V0IHRoZSBsYXN0IGhvcml6LiBzY3JvbGxiYXIgZXZlbnQgaW4gdGhlIHF1ZXVlICovCisJICAgIGogPSAwOworCSAgICBmb3IgKGkgPSAwOyB0cFtqXSA9PSBDU0kgJiYgdHBbaiArIDFdID09IEtTX0hPUl9TQ1JPTExCQVIKKwkJCQkJCSAgICAgJiYgdHBbaiArIDJdICE9IE5VTDsgKytpKQorCSAgICB7CisJCWogKz0gMzsKKwkJbnVtX2J5dGVzID0gZ2V0X2xvbmdfZnJvbV9idWYodHAgKyBqLCAmdmFsKTsKKwkJaWYgKG51bV9ieXRlcyA9PSAtMSkKKwkJICAgIGJyZWFrOworCQlzY3JvbGxiYXJfdmFsdWUgPSB2YWw7CisJCWogKz0gbnVtX2J5dGVzOworCQlzbGVuID0gajsKKwkgICAgfQorCSAgICBpZiAoaSA9PSAwKQkJLyogbm90IGVub3VnaCBjaGFyYWN0ZXJzIHRvIG1ha2Ugb25lICovCisJCXJldHVybiAtMTsKKwl9CisjIGVuZGlmIC8qICFVU0VfT05fRkxZX1NDUk9MTCAqLworI2VuZGlmIC8qIEZFQVRfR1VJICovCisKKwkvKiBGaW5hbGx5LCBhZGQgdGhlIHNwZWNpYWwga2V5IGNvZGUgdG8gb3VyIHN0cmluZyAqLworCWlmIChrZXlfbmFtZVswXSA9PSBLU19LRVkpCisJICAgIHN0cmluZ1tuZXdfc2xlbisrXSA9IGtleV9uYW1lWzFdOwkvKiBmcm9tICI6c2V0IDxNLWI+PXh4IiAqLworCWVsc2UKKwl7CisJICAgIHN0cmluZ1tuZXdfc2xlbisrXSA9IEtfU1BFQ0lBTDsKKwkgICAgc3RyaW5nW25ld19zbGVuKytdID0ga2V5X25hbWVbMF07CisJICAgIHN0cmluZ1tuZXdfc2xlbisrXSA9IGtleV9uYW1lWzFdOworCX0KKwlzdHJpbmdbbmV3X3NsZW5dID0gTlVMOworCWV4dHJhID0gbmV3X3NsZW4gLSBzbGVuOworCWlmIChidWYgPT0gTlVMTCkKKwl7CisJICAgIGlmIChleHRyYSA8IDApCisJCS8qIHJlbW92ZSBtYXRjaGVkIGNoYXJzLCB0YWtpbmcgY2FyZSBvZiBub3JlbWFwICovCisJCWRlbF90eXBlYnVmKC1leHRyYSwgb2Zmc2V0KTsKKwkgICAgZWxzZSBpZiAoZXh0cmEgPiAwKQorCQkvKiBpbnNlcnQgdGhlIGV4dHJhIHNwYWNlIHdlIG5lZWQgKi8KKwkJaW5zX3R5cGVidWYoc3RyaW5nICsgc2xlbiwgUkVNQVBfWUVTLCBvZmZzZXQsIEZBTFNFLCBGQUxTRSk7CisKKwkgICAgLyoKKwkgICAgICogQ2FyZWZ1bDogZGVsX3R5cGVidWYoKSBhbmQgaW5zX3R5cGVidWYoKSBtYXkgaGF2ZSByZWFsbG9jYXRlZAorCSAgICAgKiB0eXBlYnVmLnRiX2J1ZltdIQorCSAgICAgKi8KKwkgICAgbWNoX21lbW1vdmUodHlwZWJ1Zi50Yl9idWYgKyB0eXBlYnVmLnRiX29mZiArIG9mZnNldCwgc3RyaW5nLAorCQkJCQkJCSAgICAoc2l6ZV90KW5ld19zbGVuKTsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYgKGV4dHJhIDwgMCkKKwkJLyogcmVtb3ZlIG1hdGNoZWQgY2hhcmFjdGVycyAqLworCQltY2hfbWVtbW92ZShidWYgKyBvZmZzZXQsIGJ1ZiArIG9mZnNldCAtIGV4dHJhLAorCQkJCQkgICAoc2l6ZV90KShidWZsZW4gKyBvZmZzZXQgKyBleHRyYSkpOworCSAgICBlbHNlIGlmIChleHRyYSA+IDApCisJCS8qIGluc2VydCB0aGUgZXh0cmEgc3BhY2Ugd2UgbmVlZCAqLworCQltY2hfbWVtbW92ZShidWYgKyBvZmZzZXQgKyBleHRyYSwgYnVmICsgb2Zmc2V0LAorCQkJCQkJICAgKHNpemVfdCkoYnVmbGVuIC0gb2Zmc2V0KSk7CisJICAgIG1jaF9tZW1tb3ZlKGJ1ZiArIG9mZnNldCwgc3RyaW5nLCAoc2l6ZV90KW5ld19zbGVuKTsKKwl9CisJcmV0dXJuIChsZW4gKyBleHRyYSArIG9mZnNldCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7CQkJICAgIC8qIG5vIG1hdGNoIGZvdW5kICovCit9CisKKy8qCisgKiBSZXBsYWNlIGFueSB0ZXJtaW5hbCBjb2RlIHN0cmluZ3MgaW4gZnJvbVtdIHdpdGggdGhlIGVxdWl2YWxlbnQgaW50ZXJuYWwKKyAqIHZpbSByZXByZXNlbnRhdGlvbi4JVGhpcyBpcyB1c2VkIGZvciB0aGUgImZyb20iIGFuZCAidG8iIHBhcnQgb2YgYQorICogbWFwcGluZywgYW5kIHRoZSAidG8iIHBhcnQgb2YgYSBtZW51IGNvbW1hbmQuCisgKiBBbnkgc3RyaW5ncyBsaWtlICI8Qy1VUD4iIGFyZSBhbHNvIHJlcGxhY2VkLCB1bmxlc3MgJ2Nwb3B0aW9ucycgY29udGFpbnMKKyAqICc8Jy4KKyAqIEtfU1BFQ0lBTCBieSBpdHNlbGYgaXMgcmVwbGFjZWQgYnkgS19TUEVDSUFMIEtTX1NQRUNJQUwgS0VfRklMTEVSLgorICoKKyAqIFRoZSByZXBsYWNlbWVudCBpcyBkb25lIGluIHJlc3VsdFtdIGFuZCBmaW5hbGx5IGNvcGllZCBpbnRvIGFsbG9jYXRlZAorICogbWVtb3J5LiBJZiB0aGlzIGFsbCB3b3JrcyB3ZWxsICpidWZwIGlzIHNldCB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeSBhbmQgYQorICogcG9pbnRlciB0byBpdCBpcyByZXR1cm5lZC4gSWYgc29tZXRoaW5nIGZhaWxzICpidWZwIGlzIHNldCB0byBOVUxMIGFuZCBmcm9tCisgKiBpcyByZXR1cm5lZC4KKyAqCisgKiBDVFJMLVYgY2hhcmFjdGVycyBhcmUgcmVtb3ZlZC4gIFdoZW4gImZyb21fcGFydCIgaXMgVFJVRSwgYSB0cmFpbGluZyBDVFJMLVYKKyAqIGlzIGluY2x1ZGVkLCBvdGhlcndpc2UgaXQgaXMgcmVtb3ZlZCAoZm9yICI6bWFwIHh4IF5WIiwgbWFwcyB4eCB0bworICogbm90aGluZykuICBXaGVuICdjcG9wdGlvbnMnIGRvZXMgbm90IGNvbnRhaW4gJ0InLCBhIGJhY2tzbGFzaCBjYW4gYmUgdXNlZAorICogaW5zdGVhZCBvZiBhIENUUkwtVi4KKyAqLworICAgIGNoYXJfdSAgKgorcmVwbGFjZV90ZXJtY29kZXMoZnJvbSwgYnVmcCwgZnJvbV9wYXJ0LCBkb19sdCkKKyAgICBjaGFyX3UJKmZyb207CisgICAgY2hhcl91CSoqYnVmcDsKKyAgICBpbnQJCWZyb21fcGFydDsKKyAgICBpbnQJCWRvX2x0OwkJLyogYWxzbyB0cmFuc2xhdGUgPGx0PiAqLworeworICAgIGludAkJaTsKKyAgICBpbnQJCXNsZW47CisgICAgaW50CQlrZXk7CisgICAgaW50CQlkbGVuID0gMDsKKyAgICBjaGFyX3UJKnNyYzsKKyAgICBpbnQJCWRvX2JhY2tzbGFzaDsJLyogYmFja3NsYXNoIGlzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQJCWRvX3NwZWNpYWw7CS8qIHJlY29nbml6ZSA8PiBrZXkgY29kZXMgKi8KKyAgICBpbnQJCWRvX2tleV9jb2RlOwkvKiByZWNvZ25pemUgcmF3IGtleSBjb2RlcyAqLworICAgIGNoYXJfdQkqcmVzdWx0OwkvKiBidWZmZXIgZm9yIHJlc3VsdGluZyBzdHJpbmcgKi8KKworICAgIGRvX2JhY2tzbGFzaCA9ICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fQlNMQVNIKSA9PSBOVUxMKTsKKyAgICBkb19zcGVjaWFsID0gKHZpbV9zdHJjaHIocF9jcG8sIENQT19TUEVDSSkgPT0gTlVMTCk7CisgICAgZG9fa2V5X2NvZGUgPSAodmltX3N0cmNocihwX2NwbywgQ1BPX0tFWUNPREUpID09IE5VTEwpOworCisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHRyYW5zbGF0aW9uLiAgV29yc3QgY2FzZSBhIHNpbmdsZSBjaGFyYWN0ZXIgaXMKKyAgICAgKiByZXBsYWNlZCBieSA2IGJ5dGVzIChzaGlmdGVkIHNwZWNpYWwga2V5KSwgcGx1cyBhIE5VTCBhdCB0aGUgZW5kLgorICAgICAqLworICAgIHJlc3VsdCA9IGFsbG9jKCh1bnNpZ25lZClTVFJMRU4oZnJvbSkgKiA2ICsgMSk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQkJLyogb3V0IG9mIG1lbW9yeSAqLworICAgIHsKKwkqYnVmcCA9IE5VTEw7CisJcmV0dXJuIGZyb207CisgICAgfQorCisgICAgc3JjID0gZnJvbTsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yICNuIGF0IHN0YXJ0IG9ubHk6IGZ1bmN0aW9uIGtleSBuCisgICAgICovCisgICAgaWYgKGZyb21fcGFydCAmJiBzcmNbMF0gPT0gJyMnICYmIFZJTV9JU0RJR0lUKHNyY1sxXSkpICAvKiBmdW5jdGlvbiBrZXkgKi8KKyAgICB7CisJcmVzdWx0W2RsZW4rK10gPSBLX1NQRUNJQUw7CisJcmVzdWx0W2RsZW4rK10gPSAnayc7CisJaWYgKHNyY1sxXSA9PSAnMCcpCisJICAgIHJlc3VsdFtkbGVuKytdID0gJzsnOwkvKiAjMCBpcyBGMTAgaXMgIms7IiAqLworCWVsc2UKKwkgICAgcmVzdWx0W2RsZW4rK10gPSBzcmNbMV07CS8qICMzIGlzIEYzIGlzICJrMyIgKi8KKwlzcmMgKz0gMjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENvcHkgZWFjaCBieXRlIGZyb20gKmZyb20gdG8gcmVzdWx0W2RsZW5dCisgICAgICovCisgICAgd2hpbGUgKCpzcmMgIT0gTlVMKQorICAgIHsKKwkvKgorCSAqIElmICdjcG9wdGlvbnMnIGRvZXMgbm90IGNvbnRhaW4gJzwnLCBjaGVjayBmb3Igc3BlY2lhbCBrZXkgY29kZXMsCisJICogbGlrZSAiPEMtUy1Nb3VzZUxlZnQ+IgorCSAqLworCWlmIChkb19zcGVjaWFsICYmIChkb19sdCB8fCBTVFJOQ01QKHNyYywgIjxsdD4iLCA0KSAhPSAwKSkKKwl7CisjaWZkZWYgRkVBVF9FVkFMCisJICAgIC8qCisJICAgICAqIFJlcGxhY2UgPFNJRD4gYnkgS19TTlIgPHNjcmlwdC1ucj4gXy4KKwkgICAgICogKHJvb206IDUgKiA2ID0gMzAgYnl0ZXM7IG5lZWRlZDogMyArIDxucj4gKyAxIDw9IDE0KQorCSAgICAgKi8KKwkgICAgaWYgKFNUUk5JQ01QKHNyYywgIjxTSUQ+IiwgNSkgPT0gMCkKKwkgICAgeworCQlpZiAoY3VycmVudF9TSUQgPD0gMCkKKwkJICAgIEVNU0coXyhlX3VzaW5nc2lkKSk7CisJCWVsc2UKKwkJeworCQkgICAgc3JjICs9IDU7CisJCSAgICByZXN1bHRbZGxlbisrXSA9IEtfU1BFQ0lBTDsKKwkJICAgIHJlc3VsdFtkbGVuKytdID0gKGludClLU19FWFRSQTsKKwkJICAgIHJlc3VsdFtkbGVuKytdID0gKGludClLRV9TTlI7CisJCSAgICBzcHJpbnRmKChjaGFyICopcmVzdWx0ICsgZGxlbiwgIiVsZCIsIChsb25nKWN1cnJlbnRfU0lEKTsKKwkJICAgIGRsZW4gKz0gKGludClTVFJMRU4ocmVzdWx0ICsgZGxlbik7CisJCSAgICByZXN1bHRbZGxlbisrXSA9ICdfJzsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKyNlbmRpZgorCisJICAgIHNsZW4gPSB0cmFuc19zcGVjaWFsKCZzcmMsIHJlc3VsdCArIGRsZW4sIFRSVUUpOworCSAgICBpZiAoc2xlbikKKwkgICAgeworCQlkbGVuICs9IHNsZW47CisJCWNvbnRpbnVlOworCSAgICB9CisJfQorCisJLyoKKwkgKiBJZiAnY3BvcHRpb25zJyBkb2VzIG5vdCBjb250YWluICdrJywgc2VlIGlmIGl0J3MgYW4gYWN0dWFsIGtleS1jb2RlLgorCSAqIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gY2hlY2tlZCBhZnRlciByZXBsYWNpbmcgdGhlIDw+IGZvcm0uCisJICogU2luZ2xlIGNoYXJhY3RlciBjb2RlcyBhcmUgTk9UIHJlcGxhY2VkIChlLmcuIF5IIG9yIERFTCksIGJlY2F1c2UKKwkgKiBpdCBjb3VsZCBiZSBhIGNoYXJhY3RlciBpbiB0aGUgZmlsZS4KKwkgKi8KKwlpZiAoZG9fa2V5X2NvZGUpCisJeworCSAgICBpID0gZmluZF90ZXJtX2J5a2V5cyhzcmMpOworCSAgICBpZiAoaSA+PSAwKQorCSAgICB7CisJCXJlc3VsdFtkbGVuKytdID0gS19TUEVDSUFMOworCQlyZXN1bHRbZGxlbisrXSA9IHRlcm1jb2Rlc1tpXS5uYW1lWzBdOworCQlyZXN1bHRbZGxlbisrXSA9IHRlcm1jb2Rlc1tpXS5uYW1lWzFdOworCQlzcmMgKz0gdGVybWNvZGVzW2ldLmxlbjsKKwkJLyogSWYgdGVybWluYWwgY29kZSBtYXRjaGVkLCBjb250aW51ZSBhZnRlciBpdC4gKi8KKwkJY29udGludWU7CisJICAgIH0KKwl9CisKKyNpZmRlZiBGRUFUX0VWQUwKKwlpZiAoZG9fc3BlY2lhbCkKKwl7CisJICAgIGNoYXJfdQkqcCwgKnMsIGxlbjsKKworCSAgICAvKgorCSAgICAgKiBSZXBsYWNlIDxMZWFkZXI+IGJ5IHRoZSB2YWx1ZSBvZiAibWFwbGVhZGVyIi4KKwkgICAgICogUmVwbGFjZSA8TG9jYWxMZWFkZXI+IGJ5IHRoZSB2YWx1ZSBvZiAibWFwbG9jYWxsZWFkZXIiLgorCSAgICAgKiBJZiAibWFwbGVhZGVyIiBvciAibWFwbG9jYWxsZWFkZXIiIGlzbid0IHNldCB1c2UgYSBiYWNrc2xhc2guCisJICAgICAqLworCSAgICBpZiAoU1RSTklDTVAoc3JjLCAiPExlYWRlcj4iLCA4KSA9PSAwKQorCSAgICB7CisJCWxlbiA9IDg7CisJCXAgPSBnZXRfdmFyX3ZhbHVlKChjaGFyX3UgKikiZzptYXBsZWFkZXIiKTsKKwkgICAgfQorCSAgICBlbHNlIGlmIChTVFJOSUNNUChzcmMsICI8TG9jYWxMZWFkZXI+IiwgMTMpID09IDApCisJICAgIHsKKwkJbGVuID0gMTM7CisJCXAgPSBnZXRfdmFyX3ZhbHVlKChjaGFyX3UgKikiZzptYXBsb2NhbGxlYWRlciIpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlsZW4gPSAwOworCQlwID0gTlVMTDsKKwkgICAgfQorCSAgICBpZiAobGVuICE9IDApCisJICAgIHsKKwkJLyogQWxsb3cgdXAgdG8gOCAqIDYgY2hhcmFjdGVycyBmb3IgIm1hcGxlYWRlciIuICovCisJCWlmIChwID09IE5VTEwgfHwgKnAgPT0gTlVMIHx8IFNUUkxFTihwKSA+IDggKiA2KQorCQkgICAgcyA9IChjaGFyX3UgKikiXFwiOworCQllbHNlCisJCSAgICBzID0gcDsKKwkJd2hpbGUgKCpzICE9IE5VTCkKKwkJICAgIHJlc3VsdFtkbGVuKytdID0gKnMrKzsKKwkJc3JjICs9IGxlbjsKKwkJY29udGludWU7CisJICAgIH0KKwl9CisjZW5kaWYKKworCS8qCisJICogUmVtb3ZlIENUUkwtViBhbmQgaWdub3JlIHRoZSBuZXh0IGNoYXJhY3Rlci4KKwkgKiBGb3IgImZyb20iIHNpZGUgdGhlIENUUkwtViBhdCB0aGUgZW5kIGlzIGluY2x1ZGVkLCBmb3IgdGhlICJ0byIKKwkgKiBwYXJ0IGl0IGlzIHJlbW92ZWQuCisJICogSWYgJ2Nwb3B0aW9ucycgZG9lcyBub3QgY29udGFpbiAnQicsIGFsc28gYWNjZXB0IGEgYmFja3NsYXNoLgorCSAqLworCWtleSA9ICpzcmM7CisJaWYgKGtleSA9PSBDdHJsX1YgfHwgKGRvX2JhY2tzbGFzaCAmJiBrZXkgPT0gJ1xcJykpCisJeworCSAgICArK3NyYzsJCQkJLyogc2tpcCBDVFJMLVYgb3IgYmFja3NsYXNoICovCisJICAgIGlmICgqc3JjID09IE5VTCkKKwkgICAgeworCQlpZiAoZnJvbV9wYXJ0KQorCQkgICAgcmVzdWx0W2RsZW4rK10gPSBrZXk7CisJCWJyZWFrOworCSAgICB9CisJfQorCisjaWZkZWYgRkVBVF9NQllURQorCS8qIHNraXAgbXVsdGlieXRlIGNoYXIgY29ycmVjdGx5ICovCisJZm9yIChpID0gKCptYl9wdHIybGVuX2NoZWNrKShzcmMpOyBpID4gMDsgLS1pKQorI2VuZGlmCisJeworCSAgICAvKgorCSAgICAgKiBJZiB0aGUgY2hhcmFjdGVyIGlzIEtfU1BFQ0lBTCwgcmVwbGFjZSBpdCB3aXRoIEtfU1BFQ0lBTAorCSAgICAgKiBLU19TUEVDSUFMIEtFX0ZJTExFUi4KKwkgICAgICogSWYgY29tcGlsZWQgd2l0aCB0aGUgR1VJIHJlcGxhY2UgQ1NJIHdpdGggS19DU0kuCisJICAgICAqLworCSAgICBpZiAoKnNyYyA9PSBLX1NQRUNJQUwpCisJICAgIHsKKwkJcmVzdWx0W2RsZW4rK10gPSBLX1NQRUNJQUw7CisJCXJlc3VsdFtkbGVuKytdID0gS1NfU1BFQ0lBTDsKKwkJcmVzdWx0W2RsZW4rK10gPSBLRV9GSUxMRVI7CisJICAgIH0KKyMgaWZkZWYgRkVBVF9HVUkKKwkgICAgZWxzZSBpZiAoKnNyYyA9PSBDU0kpCisJICAgIHsKKwkJcmVzdWx0W2RsZW4rK10gPSBLX1NQRUNJQUw7CisJCXJlc3VsdFtkbGVuKytdID0gS1NfRVhUUkE7CisJCXJlc3VsdFtkbGVuKytdID0gKGludClLRV9DU0k7CisJICAgIH0KKyMgZW5kaWYKKwkgICAgZWxzZQorCQlyZXN1bHRbZGxlbisrXSA9ICpzcmM7CisJICAgICsrc3JjOworCX0KKyAgICB9CisgICAgcmVzdWx0W2RsZW5dID0gTlVMOworCisgICAgLyoKKyAgICAgKiBDb3B5IHRoZSBuZXcgc3RyaW5nIHRvIGFsbG9jYXRlZCBtZW1vcnkuCisgICAgICogSWYgdGhpcyBmYWlscywganVzdCByZXR1cm4gZnJvbS4KKyAgICAgKi8KKyAgICBpZiAoKCpidWZwID0gdmltX3N0cnNhdmUocmVzdWx0KSkgIT0gTlVMTCkKKwlmcm9tID0gKmJ1ZnA7CisgICAgdmltX2ZyZWUocmVzdWx0KTsKKyAgICByZXR1cm4gZnJvbTsKK30KKworLyoKKyAqIEZpbmQgYSB0ZXJtY29kZSB3aXRoIGtleXMgJ3NyYycgKG11c3QgYmUgTlVMIHRlcm1pbmF0ZWQpLgorICogUmV0dXJuIHRoZSBpbmRleCBpbiB0ZXJtY29kZXNbXSwgb3IgLTEgaWYgbm90IGZvdW5kLgorICovCisgICAgaW50CitmaW5kX3Rlcm1fYnlrZXlzKHNyYykKKyAgICBjaGFyX3UJKnNyYzsKK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQlzbGVuOworCisgICAgZm9yIChpID0gMDsgaSA8IHRjX2xlbjsgKytpKQorICAgIHsKKwlzbGVuID0gdGVybWNvZGVzW2ldLmxlbjsKKwlpZiAoc2xlbiA+IDEgJiYgU1RSTkNNUCh0ZXJtY29kZXNbaV0uY29kZSwgc3JjLCAoc2l6ZV90KXNsZW4pID09IDApCisJICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKKy8qCisgKiBHYXRoZXIgdGhlIGZpcnN0IGNoYXJhY3RlcnMgaW4gdGhlIHRlcm1pbmFsIGtleSBjb2RlcyBpbnRvIGEgc3RyaW5nLgorICogVXNlZCB0byBzcGVlZCB1cCBjaGVja190ZXJtY29kZSgpLgorICovCisgICAgc3RhdGljIHZvaWQKK2dhdGhlcl90ZXJtbGVhZGVyKCkKK3sKKyAgICBpbnQJICAgIGk7CisgICAgaW50CSAgICBsZW4gPSAwOworCisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSkKKwl0ZXJtbGVhZGVyW2xlbisrXSA9IENTSTsgICAgLyogdGhlIEdVSSBjb2RlcyBhcmUgbm90IGluIHRlcm1jb2Rlc1tdICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX1RFUk1SRVNQT05TRQorICAgIGlmIChjaGVja19mb3JfY29kZXMpCisJdGVybWxlYWRlcltsZW4rK10gPSBEQ1M7ICAgIC8qIHRoZSB0ZXJtY29kZSByZXNwb25zZSBzdGFydHMgd2l0aCBEQ1MKKwkJCQkgICAgICAgaW4gOC1iaXQgbW9kZSAqLworI2VuZGlmCisgICAgdGVybWxlYWRlcltsZW5dID0gTlVMOworCisgICAgZm9yIChpID0gMDsgaSA8IHRjX2xlbjsgKytpKQorCWlmICh2aW1fc3RyY2hyKHRlcm1sZWFkZXIsIHRlcm1jb2Rlc1tpXS5jb2RlWzBdKSA9PSBOVUxMKQorCXsKKwkgICAgdGVybWxlYWRlcltsZW4rK10gPSB0ZXJtY29kZXNbaV0uY29kZVswXTsKKwkgICAgdGVybWxlYWRlcltsZW5dID0gTlVMOworCX0KKworICAgIG5lZWRfZ2F0aGVyID0gRkFMU0U7Cit9CisKKy8qCisgKiBTaG93IGFsbCB0ZXJtY29kZXMgKGZvciAiOnNldCB0ZXJtY2FwIikKKyAqIFRoaXMgY29kZSBsb29rcyBhIGxvdCBsaWtlIHNob3dvcHRpb25zKCksIGJ1dCBpcyBkaWZmZXJlbnQuCisgKi8KKyAgICB2b2lkCitzaG93X3Rlcm1jb2RlcygpCit7CisgICAgaW50CQljb2w7CisgICAgaW50CQkqaXRlbXM7CisgICAgaW50CQlpdGVtX2NvdW50OworICAgIGludAkJcnVuOworICAgIGludAkJcm93LCByb3dzOworICAgIGludAkJY29sczsKKyAgICBpbnQJCWk7CisgICAgaW50CQlsZW47CisKKyNkZWZpbmUgSU5DIDI3CSAgICAvKiB0cnkgdG8gbWFrZSB0aHJlZSBjb2x1bW5zICovCisjZGVmaW5lIEdBUCAyCSAgICAvKiBzcGFjZXMgYmV0d2VlbiBjb2x1bW5zICovCisKKyAgICBpZiAodGNfbGVuID09IDApCSAgICAvKiBubyB0ZXJtaW5hbCBjb2RlcyAobXVzdCBiZSBHVUkpICovCisJcmV0dXJuOworICAgIGl0ZW1zID0gKGludCAqKWFsbG9jKCh1bnNpZ25lZCkoc2l6ZW9mKGludCkgKiB0Y19sZW4pKTsKKyAgICBpZiAoaXRlbXMgPT0gTlVMTCkKKwlyZXR1cm47CisKKyAgICAvKiBIaWdobGlnaHQgdGl0bGUgKi8KKyAgICBNU0dfUFVUU19USVRMRShfKCJcbi0tLSBUZXJtaW5hbCBrZXlzIC0tLSIpKTsKKworICAgIC8qCisgICAgICogZG8gdGhlIGxvb3AgdHdvIHRpbWVzOgorICAgICAqIDEuIGRpc3BsYXkgdGhlIHNob3J0IGl0ZW1zIChub24tc3RyaW5ncyBhbmQgc2hvcnQgc3RyaW5ncykKKyAgICAgKiAyLiBkaXNwbGF5IHRoZSBsb25nIGl0ZW1zIChzdHJpbmdzKQorICAgICAqLworICAgIGZvciAocnVuID0gMTsgcnVuIDw9IDIgJiYgIWdvdF9pbnQ7ICsrcnVuKQorICAgIHsKKwkvKgorCSAqIGNvbGxlY3QgdGhlIGl0ZW1zIGluIGl0ZW1zW10KKwkgKi8KKwlpdGVtX2NvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdGNfbGVuOyBpKyspCisJeworCSAgICBsZW4gPSBzaG93X29uZV90ZXJtY29kZSh0ZXJtY29kZXNbaV0ubmFtZSwKKwkJCQkJCSAgICB0ZXJtY29kZXNbaV0uY29kZSwgRkFMU0UpOworCSAgICBpZiAoKGxlbiA8PSBJTkMgLSBHQVAgJiYgcnVuID09IDEpIHx8IChsZW4gPiBJTkMgLSBHQVAgJiYgcnVuID09IDIpKQorCQlpdGVtc1tpdGVtX2NvdW50KytdID0gaTsKKwl9CisKKwkvKgorCSAqIGRpc3BsYXkgdGhlIGl0ZW1zCisJICovCisJaWYgKHJ1biA9PSAxKQorCXsKKwkgICAgY29scyA9IChDb2x1bW5zICsgR0FQKSAvIElOQzsKKwkgICAgaWYgKGNvbHMgPT0gMCkKKwkJY29scyA9IDE7CisJICAgIHJvd3MgPSAoaXRlbV9jb3VudCArIGNvbHMgLSAxKSAvIGNvbHM7CisJfQorCWVsc2UJLyogcnVuID09IDIgKi8KKwkgICAgcm93cyA9IGl0ZW1fY291bnQ7CisJZm9yIChyb3cgPSAwOyByb3cgPCByb3dzICYmICFnb3RfaW50OyArK3JvdykKKwl7CisJICAgIG1zZ19wdXRjaGFyKCdcbicpOwkJCS8qIGdvIHRvIG5leHQgbGluZSAqLworCSAgICBpZiAoZ290X2ludCkJCQkvKiAncScgdHlwZWQgaW4gbW9yZSAqLworCQlicmVhazsKKwkgICAgY29sID0gMDsKKwkgICAgZm9yIChpID0gcm93OyBpIDwgaXRlbV9jb3VudDsgaSArPSByb3dzKQorCSAgICB7CisJCW1zZ19jb2wgPSBjb2w7CQkJLyogbWFrZSBjb2x1bW5zICovCisJCXNob3dfb25lX3Rlcm1jb2RlKHRlcm1jb2Rlc1tpdGVtc1tpXV0ubmFtZSwKKwkJCQkJICAgICAgdGVybWNvZGVzW2l0ZW1zW2ldXS5jb2RlLCBUUlVFKTsKKwkJY29sICs9IElOQzsKKwkgICAgfQorCSAgICBvdXRfZmx1c2goKTsKKwkgICAgdWlfYnJlYWtjaGVjaygpOworCX0KKyAgICB9CisgICAgdmltX2ZyZWUoaXRlbXMpOworfQorCisvKgorICogU2hvdyBvbmUgdGVybWNvZGUgZW50cnkuCisgKiBPdXRwdXQgZ29lcyBpbnRvIElPYnVmZltdCisgKi8KKyAgICBpbnQKK3Nob3dfb25lX3Rlcm1jb2RlKG5hbWUsIGNvZGUsIHByaW50aXQpCisgICAgY2hhcl91ICAqbmFtZTsKKyAgICBjaGFyX3UgICpjb2RlOworICAgIGludAkgICAgcHJpbnRpdDsKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlsZW47CisKKyAgICBpZiAobmFtZVswXSA+ICd+JykKKyAgICB7CisJSU9idWZmWzBdID0gJyAnOworCUlPYnVmZlsxXSA9ICcgJzsKKwlJT2J1ZmZbMl0gPSAnICc7CisJSU9idWZmWzNdID0gJyAnOworICAgIH0KKyAgICBlbHNlCisgICAgeworCUlPYnVmZlswXSA9ICd0JzsKKwlJT2J1ZmZbMV0gPSAnXyc7CisJSU9idWZmWzJdID0gbmFtZVswXTsKKwlJT2J1ZmZbM10gPSBuYW1lWzFdOworICAgIH0KKyAgICBJT2J1ZmZbNF0gPSAnICc7CisKKyAgICBwID0gZ2V0X3NwZWNpYWxfa2V5X25hbWUoVEVSTUNBUDJLRVkobmFtZVswXSwgbmFtZVsxXSksIDApOworICAgIGlmIChwWzFdICE9ICd0JykKKwlTVFJDUFkoSU9idWZmICsgNSwgcCk7CisgICAgZWxzZQorCUlPYnVmZls1XSA9IE5VTDsKKyAgICBsZW4gPSAoaW50KVNUUkxFTihJT2J1ZmYpOworICAgIGRvCisJSU9idWZmW2xlbisrXSA9ICcgJzsKKyAgICB3aGlsZSAobGVuIDwgMTcpOworICAgIElPYnVmZltsZW5dID0gTlVMOworICAgIGlmIChjb2RlID09IE5VTEwpCisJbGVuICs9IDQ7CisgICAgZWxzZQorCWxlbiArPSB2aW1fc3Ryc2l6ZShjb2RlKTsKKworICAgIGlmIChwcmludGl0KQorICAgIHsKKwltc2dfcHV0cyhJT2J1ZmYpOworCWlmIChjb2RlID09IE5VTEwpCisJICAgIG1zZ19wdXRzKChjaGFyX3UgKikiTlVMTCIpOworCWVsc2UKKwkgICAgbXNnX291dHRyYW5zKGNvZGUpOworICAgIH0KKyAgICByZXR1cm4gbGVuOworfQorCisjaWYgZGVmaW5lZChGRUFUX1RFUk1SRVNQT05TRSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBGb3IgWHRlcm0gPj0gMTQwIGNvbXBpbGVkIHdpdGggT1BUX1RDQVBfUVVFUlk6IE9idGFpbiB0aGUgYWN0dWFsbHkgdXNlZAorICogdGVybWNhcCBjb2RlcyBmcm9tIHRoZSB0ZXJtaW5hbCBpdHNlbGYuCisgKiBXZSBnZXQgdGhlbSBvbmUgYnkgb25lIHRvIGF2b2lkIGEgdmVyeSBsb25nIHJlc3BvbnNlIHN0cmluZy4KKyAqLworc3RhdGljIGludCB4dF9pbmRleF9pbiA9IDA7CitzdGF0aWMgaW50IHh0X2luZGV4X291dCA9IDA7CisKKyAgICBzdGF0aWMgdm9pZAorcmVxX2NvZGVzX2Zyb21fdGVybSgpCit7CisgICAgeHRfaW5kZXhfb3V0ID0gMDsKKyAgICB4dF9pbmRleF9pbiA9IDA7CisgICAgcmVxX21vcmVfY29kZXNfZnJvbV90ZXJtKCk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcmVxX21vcmVfY29kZXNfZnJvbV90ZXJtKCkKK3sKKyAgICBjaGFyCWJ1ZlsxMV07CisgICAgaW50CQlvbGRfaWR4ID0geHRfaW5kZXhfb3V0OworCisgICAgLyogRG9uJ3QgZG8gYW55dGhpbmcgd2hlbiBnb2luZyB0byBleGl0LiAqLworICAgIGlmIChleGl0aW5nKQorCXJldHVybjsKKworICAgIC8qIFNlbmQgdXAgdG8gMTAgbW9yZSByZXF1ZXN0cyBvdXQgdGhhbiB3ZSByZWNlaXZlZC4gIEF2b2lkIHNlbmRpbmcgdG9vCisgICAgICogbWFueSwgdGhlcmUgY2FuIGJlIGEgYnVmZmVyIG92ZXJmbG93IHNvbWV3aGVyZS4gKi8KKyAgICB3aGlsZSAoeHRfaW5kZXhfb3V0IDwgeHRfaW5kZXhfaW4gKyAxMCAmJiBrZXlfbmFtZXNbeHRfaW5kZXhfb3V0XSAhPSBOVUxMKQorICAgIHsKKwlzcHJpbnRmKGJ1ZiwgIlwwMzNQK3ElMDJ4JTAyeFwwMzNcXCIsCisJCSAgICAgIGtleV9uYW1lc1t4dF9pbmRleF9vdXRdWzBdLCBrZXlfbmFtZXNbeHRfaW5kZXhfb3V0XVsxXSk7CisJb3V0X3N0cl9uZigoY2hhcl91ICopYnVmKTsKKwkrK3h0X2luZGV4X291dDsKKyAgICB9CisKKyAgICAvKiBTZW5kIHRoZSBjb2RlcyBvdXQgcmlnaHQgYXdheS4gKi8KKyAgICBpZiAoeHRfaW5kZXhfb3V0ICE9IG9sZF9pZHgpCisJb3V0X2ZsdXNoKCk7Cit9CisKKy8qCisgKiBEZWNvZGUga2V5IGNvZGUgcmVzcG9uc2UgZnJvbSB4dGVybTogJzxFc2M+UDErcjxuYW1lPj08c3RyaW5nPjxFc2M+XCcuCisgKiBBICIwIiBpbnN0ZWFkIG9mIHRoZSAiMSIgaW5kaWNhdGVzIGEgY29kZSB0aGF0IGlzbid0IHN1cHBvcnRlZC4KKyAqIEJvdGggPG5hbWU+IGFuZCA8c3RyaW5nPiBhcmUgZW5jb2RlZCBpbiBoZXguCisgKiAiY29kZSIgcG9pbnRzIHRvIHRoZSAiMCIgb3IgIjEiLgorICovCisgICAgc3RhdGljIHZvaWQKK2dvdF9jb2RlX2Zyb21fdGVybShjb2RlLCBsZW4pCisgICAgY2hhcl91CSpjb2RlOworICAgIGludAkJbGVuOworeworI2RlZmluZSBYVF9MRU4gMTAwCisgICAgY2hhcl91CW5hbWVbM107CisgICAgY2hhcl91CXN0cltYVF9MRU5dOworICAgIGludAkJaTsKKyAgICBpbnQJCWogPSAwOworICAgIGludAkJYzsKKworICAgIC8qIEEgJzEnIG1lYW5zIHRoZSBjb2RlIGlzIHN1cHBvcnRlZCwgYSAnMCcgbWVhbnMgaXQgaXNuJ3QuCisgICAgICogV2hlbiBoYWxmIHRoZSBsZW5ndGggaXMgPiBYVF9MRU4gd2UgY2FuJ3QgdXNlIGl0LgorICAgICAqIE91ciBuYW1lcyBhcmUgY3VycmVudGx5IGFsbCAyIGNoYXJhY3RlcnMuICovCisgICAgaWYgKGNvZGVbMF0gPT0gJzEnICYmIGNvZGVbN10gPT0gJz0nICYmIGxlbiAvIDIgPCBYVF9MRU4pCisgICAgeworCS8qIEdldCB0aGUgbmFtZSBmcm9tIHRoZSByZXNwb25zZSBhbmQgZmluZCBpdCBpbiB0aGUgdGFibGUuICovCisJbmFtZVswXSA9IGhleGhleDJucihjb2RlICsgMyk7CisJbmFtZVsxXSA9IGhleGhleDJucihjb2RlICsgNSk7CisJbmFtZVsyXSA9IE5VTDsKKwlmb3IgKGkgPSAwOyBrZXlfbmFtZXNbaV0gIT0gTlVMTDsgKytpKQorCXsKKwkgICAgaWYgKFNUUkNNUChrZXlfbmFtZXNbaV0sIG5hbWUpID09IDApCisJICAgIHsKKwkJeHRfaW5kZXhfaW4gPSBpOworCQlicmVhazsKKwkgICAgfQorCX0KKwlpZiAoa2V5X25hbWVzW2ldICE9IE5VTEwpCisJeworCSAgICBmb3IgKGkgPSA4OyAoYyA9IGhleGhleDJucihjb2RlICsgaSkpID49IDA7IGkgKz0gMikKKwkJc3RyW2orK10gPSBjOworCSAgICBzdHJbal0gPSBOVUw7CisJICAgIGlmIChuYW1lWzBdID09ICdDJyAmJiBuYW1lWzFdID09ICdvJykKKwkgICAgeworCQkvKiBDb2xvciBjb3VudCBpcyBub3QgYSBrZXkgY29kZS4gKi8KKwkJaSA9IGF0b2koKGNoYXIgKilzdHIpOworCQlpZiAoaSAhPSB0X2NvbG9ycykKKwkJeworCQkgICAgLyogTnIgb2YgY29sb3JzIGNoYW5nZWQsIGluaXRpYWxpemUgaGlnaGxpZ2h0aW5nIGFuZAorCQkgICAgICogcmVkcmF3IGV2ZXJ5dGhpbmcuICovCisJCSAgICBzZXRfY29sb3JfY291bnQoaSk7CisJCSAgICBpbml0X2hpZ2hsaWdodChUUlVFLCBGQUxTRSk7CisJCSAgICByZWRyYXdfbGF0ZXIoQ0xFQVIpOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qIEZpcnN0IGRlbGV0ZSBhbnkgZXhpc3RpbmcgZW50cnkgd2l0aCB0aGUgc2FtZSBjb2RlLiAqLworCQlpID0gZmluZF90ZXJtX2J5a2V5cyhzdHIpOworCQlpZiAoaSA+PSAwKQorCQkgICAgZGVsX3Rlcm1jb2RlX2lkeChpKTsKKwkJYWRkX3Rlcm1jb2RlKG5hbWUsIHN0ciwgRkFMU0UpOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qIE1heSByZXF1ZXN0IG1vcmUgY29kZXMgbm93IHRoYXQgd2UgcmVjZWl2ZWQgb25lLiAqLworICAgICsreHRfaW5kZXhfaW47CisgICAgcmVxX21vcmVfY29kZXNfZnJvbV90ZXJtKCk7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHVuYW5zd2VyZWQgcmVxdWVzdHMgYW5kIGRlYWwgd2l0aCB0aGVtLgorICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHN0YXJ0aW5nIGFuIGV4dGVybmFsIHByb2dyYW0gb3IgZ2V0dGluZyBkaXJlY3QKKyAqIGtleWJvYXJkIGlucHV0LiAgV2UgZG9uJ3Qgd2FudCByZXNwb25zZXMgdG8gYmUgc2VuZCB0byB0aGF0IHByb2dyYW0gb3IKKyAqIGhhbmRsZWQgYXMgdHlwZWQgdGV4dC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjaGVja19mb3JfY29kZXNfZnJvbV90ZXJtKCkKK3sKKyAgICBpbnQJCWM7CisKKyAgICAvKiBJZiBubyBjb2RlcyByZXF1ZXN0ZWQgb3IgYWxsIGFyZSBhbnN3ZXJlZCwgbm8gbmVlZCB0byB3YWl0LiAqLworICAgIGlmICh4dF9pbmRleF9vdXQgPT0gMCB8fCB4dF9pbmRleF9vdXQgPT0geHRfaW5kZXhfaW4pCisJcmV0dXJuOworCisgICAgLyogVmdldGMoKSB3aWxsIGNoZWNrIGZvciBhbmQgaGFuZGxlIGFueSByZXNwb25zZS4KKyAgICAgKiBLZWVwIGNhbGxpbmcgdnBlZWtjKCkgdW50aWwgd2UgZG9uJ3QgZ2V0IGFueSByZXNwb25zZXMuICovCisgICAgKytub19tYXBwaW5nOworICAgICsrYWxsb3dfa2V5czsKKyAgICBmb3IgKDs7KQorICAgIHsKKwljID0gdnBlZWtjKCk7CisJaWYgKGMgPT0gTlVMKQkgICAgLyogbm90aGluZyBhdmFpbGFibGUgKi8KKwkgICAgYnJlYWs7CisKKwkvKiBJZiBhIHJlc3BvbnNlIGlzIHJlY29nbml6ZWQgaXQncyByZXBsYWNlZCB3aXRoIEtfSUdOT1JFLCBtdXN0IHJlYWQKKwkgKiBpdCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uICBJZiB0aGVyZSBpcyBubyBLX0lHTk9SRSB3ZSBjYW4ndCBkbworCSAqIGFueXRoaW5nLCBicmVhayBoZXJlICh0aGVyZSBtaWdodCBiZSBzb21lIHJlc3BvbnNlcyBmdXJ0aGVyIG9uLCBidXQKKwkgKiB3ZSBkb24ndCB3YW50IHRvIHRocm93IGF3YXkgYW55IHR5cGVkIGNoYXJzKS4gKi8KKwlpZiAoYyAhPSBLX1NQRUNJQUwgJiYgYyAhPSBLX0lHTk9SRSkKKwkgICAgYnJlYWs7CisJYyA9IHZnZXRjKCk7CisJaWYgKGMgIT0gS19JR05PUkUpCisJeworCSAgICB2dW5nZXRjKGMpOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIC0tbm9fbWFwcGluZzsKKyAgICAtLWFsbG93X2tleXM7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9DTURMX0NPTVBMKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFRyYW5zbGF0ZSBhbiBpbnRlcm5hbCBtYXBwaW5nL2FiYnJldmlhdGlvbiByZXByZXNlbnRhdGlvbiBpbnRvIHRoZQorICogY29ycmVzcG9uZGluZyBleHRlcm5hbCBvbmUgcmVjb2duaXplZCBieSA6bWFwLzphYmJyZXYgY29tbWFuZHM7CisgKiByZXNwZWN0cyB0aGUgY3VycmVudCBCL2svPCBzZXR0aW5ncyBvZiAnY3BvcHRpb24nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gZXhwYW5kaW5nIG1hcHBpbmdzL2FiYnJldmlhdGlvbnMgb24gdGhlCisgKiBjb21tYW5kLWxpbmUsIGFuZCBmb3IgYnVpbGRpbmcgdGhlICJBbWJpZ3VvdXMgbWFwcGluZy4uLiIgZXJyb3IgbWVzc+ZnZS4KKyAqCisgKiBJdCB1c2VzIGEgZ3Jvd2FycmF5IHRvIGJ1aWxkIHRoZSB0cmFuc2xhdGlvbiBzdHJpbmcgc2luY2UgdGhlCisgKiBsYXR0ZXIgY2FuIGJlIHdpZGVyIHRoYW4gdGhlIG9yaWdpbmFsIGRlc2NyaXB0aW9uLiBUaGUgY2FsbGVyIGhhcyB0bworICogZnJlZSB0aGUgc3RyaW5nIGFmdGVyd2FyZHMuCisgKgorICogUmV0dXJucyBOVUxMIHdoZW4gdGhlcmUgaXMgYSBwcm9ibGVtLgorICovCisgICAgY2hhcl91ICoKK3RyYW5zbGF0ZV9tYXBwaW5nKHN0ciwgZXhwbWFwKQorICAgIGNoYXJfdQkqc3RyOworICAgIGludAkJZXhwbWFwOyAgLyogVFJVRSB3aGVuIGV4cGFuZGluZyBtYXBwaW5ncyBvbiBjb21tYW5kLWxpbmUgKi8KK3sKKyAgICBnYXJyYXlfVAlnYTsKKyAgICBpbnQJCWM7CisgICAgaW50CQltb2RpZmllcnM7CisgICAgaW50CQljcG9fYnNsYXNoOworICAgIGludAkJY3BvX3NwZWNpYWw7CisgICAgaW50CQljcG9fa2V5Y29kZTsKKworICAgIGdhX2luaXQoJmdhKTsKKyAgICBnYS5nYV9pdGVtc2l6ZSA9IDE7CisgICAgZ2EuZ2FfZ3Jvd3NpemUgPSA0MDsKKworICAgIGNwb19ic2xhc2ggPSAodmltX3N0cmNocihwX2NwbywgQ1BPX0JTTEFTSCkgIT0gTlVMTCk7CisgICAgY3BvX3NwZWNpYWwgPSAodmltX3N0cmNocihwX2NwbywgQ1BPX1NQRUNJKSAhPSBOVUxMKTsKKyAgICBjcG9fa2V5Y29kZSA9ICh2aW1fc3RyY2hyKHBfY3BvLCBDUE9fS0VZQ09ERSkgPT0gTlVMTCk7CisKKyAgICBmb3IgKDsgKnN0cjsgKytzdHIpCisgICAgeworCWMgPSAqc3RyOworCWlmIChjID09IEtfU1BFQ0lBTCAmJiBzdHJbMV0gIT0gTlVMICYmIHN0clsyXSAhPSBOVUwpCisJeworCSAgICBtb2RpZmllcnMgPSAwOworCSAgICBpZiAoc3RyWzFdID09IEtTX01PRElGSUVSKQorCSAgICB7CisJCXN0cisrOworCQltb2RpZmllcnMgPSAqKytzdHI7CisJCWMgPSAqKytzdHI7CisJICAgIH0KKwkgICAgaWYgKGNwb19zcGVjaWFsICYmIGNwb19rZXljb2RlICYmIGMgPT0gS19TUEVDSUFMICYmICFtb2RpZmllcnMpCisJICAgIHsKKwkJaW50CWk7CisKKwkJLyogdHJ5IHRvIGZpbmQgc3BlY2lhbCBrZXkgaW4gdGVybWNvZGVzICovCisJCWZvciAoaSA9IDA7IGkgPCB0Y19sZW47ICsraSkKKwkJICAgIGlmICh0ZXJtY29kZXNbaV0ubmFtZVswXSA9PSBzdHJbMV0KKwkJCQkJICAgICYmIHRlcm1jb2Rlc1tpXS5uYW1lWzFdID09IHN0clsyXSkKKwkJCWJyZWFrOworCQlpZiAoaSA8IHRjX2xlbikKKwkJeworCQkgICAgZ2FfY29uY2F0KCZnYSwgdGVybWNvZGVzW2ldLmNvZGUpOworCQkgICAgc3RyICs9IDI7CisJCSAgICBjb250aW51ZTsgLyogZm9yIChzdHIpICovCisJCX0KKwkgICAgfQorCSAgICBpZiAoYyA9PSBLX1NQRUNJQUwgJiYgc3RyWzFdICE9IE5VTCAmJiBzdHJbMl0gIT0gTlVMKQorCSAgICB7CisJCWlmIChleHBtYXAgJiYgY3BvX3NwZWNpYWwpCisJCXsKKwkJICAgIGdhX2NsZWFyKCZnYSk7CisJCSAgICByZXR1cm4gTlVMTDsKKwkJfQorCQljID0gVE9fU1BFQ0lBTChzdHJbMV0sIHN0clsyXSk7CisJCWlmIChjID09IEtfWkVSTykJLyogZGlzcGxheSA8TnVsPiBhcyBeQCAqLworCQkgICAgYyA9IE5VTDsKKwkJc3RyICs9IDI7CisJICAgIH0KKwkgICAgaWYgKElTX1NQRUNJQUwoYykgfHwgbW9kaWZpZXJzKQkvKiBzcGVjaWFsIGtleSAqLworCSAgICB7CisJCWlmIChleHBtYXAgJiYgY3BvX3NwZWNpYWwpCisJCXsKKwkJICAgIGdhX2NsZWFyKCZnYSk7CisJCSAgICByZXR1cm4gTlVMTDsKKwkJfQorCQlnYV9jb25jYXQoJmdhLCBnZXRfc3BlY2lhbF9rZXlfbmFtZShjLCBtb2RpZmllcnMpKTsKKwkJY29udGludWU7IC8qIGZvciAoc3RyKSAqLworCSAgICB9CisJfQorCWlmIChjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSBDdHJsX0ogfHwgYyA9PSBDdHJsX1YKKwkgICAgfHwgKGMgPT0gJzwnICYmICFjcG9fc3BlY2lhbCkgfHwgKGMgPT0gJ1xcJyAmJiAhY3BvX2JzbGFzaCkpCisJICAgIGdhX2FwcGVuZCgmZ2EsIGNwb19ic2xhc2ggPyBDdHJsX1YgOiAnXFwnKTsKKwlpZiAoYykKKwkgICAgZ2FfYXBwZW5kKCZnYSwgYyk7CisgICAgfQorICAgIGdhX2FwcGVuZCgmZ2EsIE5VTCk7CisgICAgcmV0dXJuIChjaGFyX3UgKikoZ2EuZ2FfZGF0YSk7Cit9CisjZW5kaWYKKworI2lmIChkZWZpbmVkKFdJTjMyNjQpICYmICFkZWZpbmVkKEZFQVRfR1VJKSkgfHwgZGVmaW5lZChQUk9UTykKK3N0YXRpYyBjaGFyIGtzbWVfc3RyWzIwXTsKK3N0YXRpYyBjaGFyIGtzbXJfc3RyWzIwXTsKK3N0YXRpYyBjaGFyIGtzbWRfc3RyWzIwXTsKKworLyoKKyAqIEZvciBXaW4zMiBjb25zb2xlOiB1cGRhdGUgdGVybWNhcCBjb2RlcyBmb3IgZXhpc3RpbmcgY29uc29sZSBhdHRyaWJ1dGVzLgorICovCisgICAgdm9pZAordXBkYXRlX3RjYXAoYXR0cikKKyAgICBpbnQgYXR0cjsKK3sKKyAgICBzdHJ1Y3QgYnVpbHRpbl90ZXJtICpwOworCisgICAgcCA9IGZpbmRfYnVpbHRpbl90ZXJtKERFRkFVTFRfVEVSTSk7CisgICAgc3ByaW50Zihrc21lX3N0ciwgSUZfRUIoIlwwMzN8JWRtIiwgRVNDX1NUUiAifCVkbSIpLCBhdHRyKTsKKyAgICBzcHJpbnRmKGtzbWRfc3RyLCBJRl9FQigiXDAzM3wlZG0iLCBFU0NfU1RSICJ8JWRtIiksCisJCQkJICAgICBhdHRyIHwgMHgwOCk7ICAvKiBGT1JFR1JPVU5EX0lOVEVOU0lUWSAqLworICAgIHNwcmludGYoa3Ntcl9zdHIsIElGX0VCKCJcMDMzfCVkbSIsIEVTQ19TVFIgInwlZG0iKSwKKwkJCQkgKChhdHRyICYgMHgwRikgPDwgNCkgfCAoKGF0dHIgJiAweEYwKSA+PiA0KSk7CisKKyAgICB3aGlsZSAocC0+YnRfc3RyaW5nICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKHAtPmJ0X2VudHJ5ID09IChpbnQpS1NfTUUpCisJICBwLT5idF9zdHJpbmcgPSAma3NtZV9zdHJbMF07CisgICAgICBlbHNlIGlmIChwLT5idF9lbnRyeSA9PSAoaW50KUtTX01SKQorCSAgcC0+YnRfc3RyaW5nID0gJmtzbXJfc3RyWzBdOworICAgICAgZWxzZSBpZiAocC0+YnRfZW50cnkgPT0gKGludClLU19NRCkKKwkgIHAtPmJ0X3N0cmluZyA9ICZrc21kX3N0clswXTsKKyAgICAgICsrcDsKKyAgICB9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXJtLmggYi9zcmMvdGVybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YjEwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVybS5oCkBAIC0wLDAgKzEsMTU2IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbmVzIGZvciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgZXNjYXBlIHNlcXVlbmNlcworICogdGhhdCB0aGUgZWRpdG9yIG5lZWRzIHRvIHBlcmZvcm0gdmFyaW91cyBvcGVyYXRpb25zLiBBbGwgb2YgdGhlIHNlcXVlbmNlcworICogaGVyZSBhcmUgb3B0aW9uYWwsIGV4Y2VwdCAiY20iIChjdXJzb3IgbW90aW9uKS4KKyAqLworCisjaWYgZGVmaW5lZChTQVNDKSAmJiBTQVNDIDwgNjU4CisvKgorICogVGhlIFNBUyBDIGNvbXBpbGVyIGhhcyBhIGJ1ZyB0aGF0IG1ha2VzIHR5cGVkZWZzIGJlaW5nIGZvcmdvdCBpbiBpbmNsdWRlCisgKiBmaWxlcy4gIEhhcyBiZWVuIGZpeGVkIGluIHZlcnNpb24gNi41OC4KKyAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNoYXJfdTsKKyNlbmRpZgorCisvKgorICogSW5kZXggb2YgdGhlIHRlcm1jYXAgY29kZXMgaW4gdGhlIHRlcm1fc3RyaW5ncyBhcnJheS4KKyAqLworZW51bSBTcGVjaWFsS2V5Cit7CisgICAgS1NfTkFNRSA9IDAsLyogbmFtZSBvZiB0aGlzIHRlcm1pbmFsIGVudHJ5ICovCisgICAgS1NfQ0UsCS8qIGNsZWFyIHRvIGVuZCBvZiBsaW5lICovCisgICAgS1NfQUwsCS8qIGFkZCBuZXcgYmxhbmsgbGluZSAqLworICAgIEtTX0NBTCwJLyogYWRkIG51bWJlciBvZiBibGFuayBsaW5lcyAqLworICAgIEtTX0RMLAkvKiBkZWxldGUgbGluZSAqLworICAgIEtTX0NETCwJLyogZGVsZXRlIG51bWJlciBvZiBsaW5lcyAqLworICAgIEtTX0NTLAkvKiBzY3JvbGwgcmVnaW9uICovCisgICAgS1NfQ0wsCS8qIGNsZWFyIHNjcmVlbiAqLworICAgIEtTX0NELAkvKiBjbGVhciB0byBlbmQgb2YgZGlzcGxheSAqLworICAgIEtTX1VULAkvKiBjbGVhcmluZyB1c2VzIGN1cnJlbnQgYmFja2dyb3VuZCBjb2xvciAqLworICAgIEtTX0RBLAkvKiB0ZXh0IG1heSBiZSBzY3JvbGxlZCBkb3duIGZyb20gdXAgKi8KKyAgICBLU19EQiwJLyogdGV4dCBtYXkgYmUgc2Nyb2xsZWQgdXAgZnJvbSBkb3duICovCisgICAgS1NfVkksCS8qIGN1cnNvciBpbnZpc2libGUgKi8KKyAgICBLU19WRSwJLyogY3Vyc29yIHZpc2libGUgKi8KKyAgICBLU19WUywJLyogY3Vyc29yIHZlcnkgdmlzaWJsZSAqLworICAgIEtTX01FLAkvKiBub3JtYWwgbW9kZSAqLworICAgIEtTX01SLAkvKiByZXZlcnNlIG1vZGUgKi8KKyAgICBLU19NRCwJLyogYm9sZCBtb2RlICovCisgICAgS1NfU0UsCS8qIG5vcm1hbCBtb2RlICovCisgICAgS1NfU08sCS8qIHN0YW5kb3V0IG1vZGUgKi8KKyAgICBLU19DWkgsCS8qIGl0YWxpYyBtb2RlIHN0YXJ0ICovCisgICAgS1NfQ1pSLAkvKiBpdGFsaWMgbW9kZSBlbmQgKi8KKyAgICBLU19VRSwJLyogZXhpdCB1bmRlcnNjb3JlIG1vZGUgKi8KKyAgICBLU19VUywJLyogdW5kZXJzY29yZSBtb2RlICovCisgICAgS1NfTVMsCS8qIHNhdmUgdG8gbW92ZSBjdXIgaW4gcmV2ZXJzZSBtb2RlICovCisgICAgS1NfQ00sCS8qIGN1cnNvciBtb3Rpb24gKi8KKyAgICBLU19TUiwJLyogc2Nyb2xsIHJldmVyc2UgKGJhY2t3YXJkKSAqLworICAgIEtTX0NSSSwJLyogY3Vyc29yIG51bWJlciBvZiBjaGFycyByaWdodCAqLworICAgIEtTX1ZCLAkvKiB2aXN1YWwgYmVsbCAqLworICAgIEtTX0tTLAkvKiBwdXQgdGVybSBpbiAia2V5cGFkIHRyYW5zbWl0IiBtb2RlICovCisgICAgS1NfS0UsCS8qIG91dCBvZiAia2V5cGFkIHRyYW5zbWl0IiBtb2RlICovCisgICAgS1NfVEksCS8qIHB1dCB0ZXJtaW5hbCBpbiB0ZXJtY2FwIG1vZGUgKi8KKyAgICBLU19URSwJLyogb3V0IG9mIHRlcm1jYXAgbW9kZSAqLworICAgIEtTX0JDLAkvKiBiYWNrc3BhY2UgY2hhcmFjdGVyIChjdXJzb3IgbGVmdCkgKi8KKyAgICBLU19DQ1MsCS8qIGN1ciBpcyByZWxhdGl2ZSB0byBzY3JvbGwgcmVnaW9uICovCisgICAgS1NfQ0NPLAkvKiBudW1iZXIgb2YgY29sb3JzICovCisgICAgS1NfQ1NGLAkvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAqLworICAgIEtTX0NTQiwJLyogc2V0IGJhY2tncm91bmQgY29sb3IgKi8KKyAgICBLU19YUywJLyogc3RhbmRvdXQgbm90IGVyYXNlZCBieSBvdmVyd3JpdGluZyAoaHB0ZXJtKSAqLworICAgIEtTX01CLAkvKiBibGluayBtb2RlICovCisgICAgS1NfQ0FGLAkvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAoQU5TSSkgKi8KKyAgICBLU19DQUIsCS8qIHNldCBiYWNrZ3JvdW5kIGNvbG9yIChBTlNJKSAqLworICAgIEtTX0xFLAkvKiBjdXJzb3IgbGVmdCAobW9zdGx5IGJhY2tzcGFjZSkgKi8KKyAgICBLU19ORCwJLyogY3Vyc29yIHJpZ2h0ICovCisgICAgS1NfQ0lTLAkvKiBzZXQgaWNvbiB0ZXh0IHN0YXJ0ICovCisgICAgS1NfQ0lFLAkvKiBzZXQgaWNvbiB0ZXh0IGVuZCAqLworICAgIEtTX1RTLAkvKiBzZXQgd2luZG93IHRpdGxlIHN0YXJ0ICh0byBzdGF0dXMgbGluZSkqLworICAgIEtTX0ZTLAkvKiBzZXQgd2luZG93IHRpdGxlIGVuZCAoZnJvbSBzdGF0dXMgbGluZSkgKi8KKyAgICBLU19DV1AsCS8qIHNldCB3aW5kb3cgcG9zaXRpb24gaW4gcGl4ZWxzICovCisgICAgS1NfQ1dTLAkvKiBzZXQgd2luZG93IHNpemUgaW4gY2hhcmFjdGVycyAqLworICAgIEtTX0NSViwJLyogcmVxdWVzdCB2ZXJzaW9uIHN0cmluZyAqLworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgS1NfQ1NWLAkvKiBzY3JvbGwgcmVnaW9uIHZlcnRpY2FsICovCisjZW5kaWYKKyAgICBLU19PUAkvKiBvcmlnaW5hbCBjb2xvciBwYWlyICovCit9OworCisjZGVmaW5lIEtTX0xBU1QJICAgIEtTX09QCisKKy8qCisgKiB0aGUgdGVybWluYWwgY2FwYWJpbGl0aWVzIGFyZSBzdG9yZWQgaW4gdGhpcyBhcnJheQorICogSU1QT1JUQU5UOiBXaGVuIG1ha2luZyBjaGFuZ2VzLCBub3RlIHRoZSBmb2xsb3dpbmc6CisgKiAtIHRoZXJlIHNob3VsZCBiZSBhbiBlbnRyeSBmb3IgZWFjaCBjb2RlIGluIHRoZSBidWlsdGluIHRlcm1jYXBzCisgKiAtIHRoZXJlIHNob3VsZCBiZSBhbiBvcHRpb24gZm9yIGVhY2ggY29kZSBpbiBvcHRpb24uYworICogLSB0aGVyZSBzaG91bGQgYmUgY29kZSBpbiB0ZXJtLmMgdG8gb2J0YWluIHRoZSB2YWx1ZSBmcm9tIHRoZSB0ZXJtY2FwCisgKi8KKworZXh0ZXJuIGNoYXJfdSAqKHRlcm1fc3RyaW5nc1tdKTsgICAgLyogY3VycmVudCB0ZXJtaW5hbCBzdHJpbmdzICovCisKKy8qCisgKiBzdHJpbmdzIHVzZWQgZm9yIHRlcm1pbmFsCisgKi8KKyNkZWZpbmUgVF9OQU1FCSh0ZXJtX3N0cihLU19OQU1FKSkJLyogdGVybWluYWwgbmFtZSAqLworI2RlZmluZSBUX0NFCSh0ZXJtX3N0cihLU19DRSkpCS8qIGNsZWFyIHRvIGVuZCBvZiBsaW5lICovCisjZGVmaW5lIFRfQUwJKHRlcm1fc3RyKEtTX0FMKSkJLyogYWRkIG5ldyBibGFuayBsaW5lICovCisjZGVmaW5lIFRfQ0FMCSh0ZXJtX3N0cihLU19DQUwpKQkvKiBhZGQgbnVtYmVyIG9mIGJsYW5rIGxpbmVzICovCisjZGVmaW5lIFRfREwJKHRlcm1fc3RyKEtTX0RMKSkJLyogZGVsZXRlIGxpbmUgKi8KKyNkZWZpbmUgVF9DREwJKHRlcm1fc3RyKEtTX0NETCkpCS8qIGRlbGV0ZSBudW1iZXIgb2YgbGluZXMgKi8KKyNkZWZpbmUgVF9DUwkodGVybV9zdHIoS1NfQ1MpKQkvKiBzY3JvbGwgcmVnaW9uICovCisjZGVmaW5lIFRfQ1NWCSh0ZXJtX3N0cihLU19DU1YpKQkvKiBzY3JvbGwgcmVnaW9uIHZlcnRpY2FsICovCisjZGVmaW5lIFRfQ0wJKHRlcm1fc3RyKEtTX0NMKSkJLyogY2xlYXIgc2NyZWVuICovCisjZGVmaW5lIFRfQ0QJKHRlcm1fc3RyKEtTX0NEKSkJLyogY2xlYXIgdG8gZW5kIG9mIGRpc3BsYXkgKi8KKyNkZWZpbmUgVF9VVAkodGVybV9zdHIoS1NfVVQpKQkvKiBjbGVhcmluZyB1c2VzIGJhY2tncm91bmQgY29sb3IgKi8KKyNkZWZpbmUgVF9EQQkodGVybV9zdHIoS1NfREEpKQkvKiB0ZXh0IG1heSBiZSBzY3JvbGxlZCBkb3duIGZyb20gdXAgKi8KKyNkZWZpbmUgVF9EQgkodGVybV9zdHIoS1NfREIpKQkvKiB0ZXh0IG1heSBiZSBzY3JvbGxlZCB1cCBmcm9tIGRvd24gKi8KKyNkZWZpbmUgVF9WSQkodGVybV9zdHIoS1NfVkkpKQkvKiBjdXJzb3IgaW52aXNpYmxlICovCisjZGVmaW5lIFRfVkUJKHRlcm1fc3RyKEtTX1ZFKSkJLyogY3Vyc29yIHZpc2libGUgKi8KKyNkZWZpbmUgVF9WUwkodGVybV9zdHIoS1NfVlMpKQkvKiBjdXJzb3IgdmVyeSB2aXNpYmxlICovCisjZGVmaW5lIFRfTUUJKHRlcm1fc3RyKEtTX01FKSkJLyogbm9ybWFsIG1vZGUgKi8KKyNkZWZpbmUgVF9NUgkodGVybV9zdHIoS1NfTVIpKQkvKiByZXZlcnNlIG1vZGUgKi8KKyNkZWZpbmUgVF9NRAkodGVybV9zdHIoS1NfTUQpKQkvKiBib2xkIG1vZGUgKi8KKyNkZWZpbmUgVF9TRQkodGVybV9zdHIoS1NfU0UpKQkvKiBub3JtYWwgbW9kZSAqLworI2RlZmluZSBUX1NPCSh0ZXJtX3N0cihLU19TTykpCS8qIHN0YW5kb3V0IG1vZGUgKi8KKyNkZWZpbmUgVF9DWkgJKHRlcm1fc3RyKEtTX0NaSCkpCS8qIGl0YWxpYyBtb2RlIHN0YXJ0ICovCisjZGVmaW5lIFRfQ1pSCSh0ZXJtX3N0cihLU19DWlIpKQkvKiBpdGFsaWMgbW9kZSBlbmQgKi8KKyNkZWZpbmUgVF9VRQkodGVybV9zdHIoS1NfVUUpKQkvKiBleGl0IHVuZGVyc2NvcmUgbW9kZSAqLworI2RlZmluZSBUX1VTCSh0ZXJtX3N0cihLU19VUykpCS8qIHVuZGVyc2NvcmUgbW9kZSAqLworI2RlZmluZSBUX01TCSh0ZXJtX3N0cihLU19NUykpCS8qIHNhdmUgdG8gbW92ZSBjdXIgaW4gcmV2ZXJzZSBtb2RlICovCisjZGVmaW5lIFRfQ00JKHRlcm1fc3RyKEtTX0NNKSkJLyogY3Vyc29yIG1vdGlvbiAqLworI2RlZmluZSBUX1NSCSh0ZXJtX3N0cihLU19TUikpCS8qIHNjcm9sbCByZXZlcnNlIChiYWNrd2FyZCkgKi8KKyNkZWZpbmUgVF9DUkkJKHRlcm1fc3RyKEtTX0NSSSkpCS8qIGN1cnNvciBudW1iZXIgb2YgY2hhcnMgcmlnaHQgKi8KKyNkZWZpbmUgVF9WQgkodGVybV9zdHIoS1NfVkIpKQkvKiB2aXN1YWwgYmVsbCAqLworI2RlZmluZSBUX0tTCSh0ZXJtX3N0cihLU19LUykpCS8qIHB1dCB0ZXJtIGluICJrZXlwYWQgdHJhbnNtaXQiIG1vZGUgKi8KKyNkZWZpbmUgVF9LRQkodGVybV9zdHIoS1NfS0UpKQkvKiBvdXQgb2YgImtleXBhZCB0cmFuc21pdCIgbW9kZSAqLworI2RlZmluZSBUX1RJCSh0ZXJtX3N0cihLU19USSkpCS8qIHB1dCB0ZXJtaW5hbCBpbiB0ZXJtY2FwIG1vZGUgKi8KKyNkZWZpbmUgVF9URQkodGVybV9zdHIoS1NfVEUpKQkvKiBvdXQgb2YgdGVybWNhcCBtb2RlICovCisjZGVmaW5lIFRfQkMJKHRlcm1fc3RyKEtTX0JDKSkJLyogYmFja3NwYWNlIGNoYXJhY3RlciAqLworI2RlZmluZSBUX0NDUwkodGVybV9zdHIoS1NfQ0NTKSkJLyogY3VyIGlzIHJlbGF0aXZlIHRvIHNjcm9sbCByZWdpb24gKi8KKyNkZWZpbmUgVF9DQ08JKHRlcm1fc3RyKEtTX0NDTykpCS8qIG51bWJlciBvZiBjb2xvcnMgKi8KKyNkZWZpbmUgVF9DU0YJKHRlcm1fc3RyKEtTX0NTRikpCS8qIHNldCBmb3JlZ3JvdW5kIGNvbG9yICovCisjZGVmaW5lIFRfQ1NCCSh0ZXJtX3N0cihLU19DU0IpKQkvKiBzZXQgYmFja2dyb3VuZCBjb2xvciAqLworI2RlZmluZSBUX1hTCSh0ZXJtX3N0cihLU19YUykpCS8qIHN0YW5kb3V0IG5vdCBlcmFzZWQgYnkgb3ZlcndyaXRpbmcgKi8KKyNkZWZpbmUgVF9NQgkodGVybV9zdHIoS1NfTUIpKQkvKiBibGluayBtb2RlICovCisjZGVmaW5lIFRfQ0FGCSh0ZXJtX3N0cihLU19DQUYpKQkvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAoQU5TSSkgKi8KKyNkZWZpbmUgVF9DQUIJKHRlcm1fc3RyKEtTX0NBQikpCS8qIHNldCBiYWNrZ3JvdW5kIGNvbG9yIChBTlNJKSAqLworI2RlZmluZSBUX0xFCSh0ZXJtX3N0cihLU19MRSkpCS8qIGN1cnNvciBsZWZ0ICovCisjZGVmaW5lIFRfTkQJKHRlcm1fc3RyKEtTX05EKSkJLyogY3Vyc29yIHJpZ2h0ICovCisjZGVmaW5lIFRfQ0lTCSh0ZXJtX3N0cihLU19DSVMpKQkvKiBzZXQgaWNvbiB0ZXh0IHN0YXJ0ICovCisjZGVmaW5lIFRfQ0lFCSh0ZXJtX3N0cihLU19DSUUpKQkvKiBzZXQgaWNvbiB0ZXh0IGVuZCAqLworI2RlZmluZSBUX1RTCSh0ZXJtX3N0cihLU19UUykpCS8qIHNldCB3aW5kb3cgdGl0bGUgc3RhcnQgKi8KKyNkZWZpbmUgVF9GUwkodGVybV9zdHIoS1NfRlMpKQkvKiBzZXQgd2luZG93IHRpdGxlIGVuZCAqLworI2RlZmluZSBUX0NXUAkodGVybV9zdHIoS1NfQ1dQKSkJLyogd2luZG93IHBvc2l0aW9uICovCisjZGVmaW5lIFRfQ1dTCSh0ZXJtX3N0cihLU19DV1MpKQkvKiB3aW5kb3cgc2l6ZSAqLworI2RlZmluZSBUX0NSVgkodGVybV9zdHIoS1NfQ1JWKSkJLyogcmVxdWVzdCB2ZXJzaW9uIHN0cmluZyAqLworI2RlZmluZSBUX09QCSh0ZXJtX3N0cihLU19PUCkpCS8qIG9yaWdpbmFsIGNvbG9yIHBhaXIgKi8KKworI2RlZmluZSBUTU9ERV9DT09LICAwCS8qIHRlcm1pbmFsIG1vZGUgZm9yIGV4dGVybmFsIGNtZHMgYW5kIEV4IG1vZGUgKi8KKyNkZWZpbmUgVE1PREVfU0xFRVAgMQkvKiB0ZXJtaW5hbCBtb2RlIGZvciBzbGVlcGluZyAoY29va2VkIGJ1dCBubyBlY2hvKSAqLworI2RlZmluZSBUTU9ERV9SQVcgICAyCS8qIHRlcm1pbmFsIG1vZGUgZm9yIE5vcm1hbCBhbmQgSW5zZXJ0IG1vZGUgKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXJtbGliLmMgYi9zcmMvdGVybWxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMDM2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVybWxpYi5jCkBAIC0wLDAgKzEsNjI4IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OiAqLworLyoKKyAqIFRoZSBmb2xsb3dpbmcgc29mdHdhcmUgaXMgKEMpIDE5ODQgUGV0ZXIgZGEgU2lsdmEsIHRoZSBNYWQgQXVzdHJhbGlhbiwgaW4KKyAqIHRoZSBwdWJsaWMgZG9tYWluLiBJdCBtYXkgYmUgcmUtZGlzdHJpYnV0ZWQgZm9yIGFueSBwdXJwb3NlIHdpdGggdGhlCisgKiBpbmNsdXNpb24gb2YgdGhpcyBub3RpY2UuCisgKi8KKworLyogTW9kaWZpZWQgYnkgQnJhbSBNb29sZW5hYXIgZm9yIHVzZSB3aXRoIFZJTSAtIFZpIEltcHJvdmVkLiAqLworLyogQSBmZXcgYnVncyByZW1vdmVkIGJ5IE9sYWYgJ1JoaWFsdG8nIFNlaWJlcnQuICovCisKKy8qIFRFUk1MSUI6IFRlcm1pbmFsIGluZGVwZW5kYW50IGRhdGFiYXNlLiAqLworCisjaW5jbHVkZSAidmltLmgiCisjaW5jbHVkZSAidGVybWxpYi5wcm8iCisKKyNpZiAhZGVmaW5lZChBTUlHQSkgJiYgIWRlZmluZWQoVk1TKSAmJiAhZGVmaW5lZChNQUNPUykgJiYgIWRlZmluZWQoUklTQ09TKQorIyBpbmNsdWRlIDxzZ3R0eS5oPgorI2VuZGlmCisKK3N0YXRpYyBpbnQgIGdldGVudCBfX0FSR1MoKGNoYXIgKiwgY2hhciAqLCBGSUxFICosIGludCkpOworc3RhdGljIGludCAgbmV4dGVudCBfX0FSR1MoKGNoYXIgKiwgRklMRSAqLCBpbnQpKTsKK3N0YXRpYyBpbnQgIF9tYXRjaCBfX0FSR1MoKGNoYXIgKiwgY2hhciAqKSk7CitzdGF0aWMgY2hhciAqX2FkZGZtdCBfX0FSR1MoKGNoYXIgKiwgY2hhciAqLCBpbnQpKTsKK3N0YXRpYyBjaGFyICpfZmluZCBfX0FSR1MoKGNoYXIgKiwgY2hhciAqKSk7CisKKy8qCisgKiBHbG9iYWwgdmFyaWFibGVzIGZvciB0ZXJtbGliCisgKi8KKworY2hhcgkqdGVudDsJCSAgICAgIC8qIFBvaW50ZXIgdG8gdGVybWluYWwgZW50cnksIHNldCBieSB0Z2V0ZW50ICovCitjaGFyCVBDID0gMDsJCSAgICAgIC8qIFBhZCBjaGFyYWN0ZXIsIGRlZmF1bHQgTlVMTCAqLworY2hhcgkqVVAgPSAwLCAqQkMgPSAwOyAgICAgLyogUG9pbnRlcnMgdG8gVVAgYW5kIEJDIHN0cmluZ3MgZnJvbSBkYXRhYmFzZSAqLworc2hvcnQJb3NwZWVkOwkJICAgICAgLyogQmF1ZCByYXRlICgxLTE2LCAxPTMwMCwgMTY9MTkyMDApLCBhcyBpbiBzdHR5ICovCisKKy8qCisgKiBNb2R1bGU6IHRnZXRlbnQKKyAqCisgKiBQdXJwb3NlOiBHZXQgdGVybWNhcCBlbnRyeSBmb3IgPHRlcm0+IGludG8gYnVmZmVyIGF0IDx0YnVmPi4KKyAqCisgKiBDYWxsaW5nIGNvbnZlbnRpb25zOiBjaGFyIHRidWZbVEJVRlNaK10sIHRlcm09Y2Fub25pY2FsIG5hbWUgZm9yIHRlcm1pbmFsLgorICoKKyAqIFJldHVybmVkIHZhbHVlczogMSA9IHN1Y2Nlc3MsIC0xID0gY2FuJ3Qgb3BlbiBmaWxlLAorICoJICAgIDAgPSBjYW4ndCBmaW5kIHRlcm1pbmFsLgorICoKKyAqIE5vdGVzOgorICogLSBTaG91bGQgcHJvYmFibHkgc3VwcGx5IHN0YXRpYyBidWZmZXIuCisgKiAtIFVzZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzICJURVJNIiBhbmQgIlRFUk1DQVAiLiBJZiBURVJNID0gdGVybSAodGhhdCBpcywKKyAqICAgaWYgdGhlIGFyZ3VtZW50IG1hdGNoZXMgdGhlIGVudmlyb25tZW50KSB0aGVuIGl0IGxvb2tzIGF0IFRFUk1DQVAuCisgKiAtIElmIFRFUk1DQVAgYmVnaW5zIHdpdGggYSBzbGFzaCwgdGhlbiBpdCBhc3N1bWVzIHRoaXMgaXMgdGhlIGZpbGUgdG8KKyAqICAgc2VhcmNoIHJhdGhlciB0aGFuIC9ldGMvdGVybWNhcC4KKyAqIC0gSWYgVEVSTUNBUCBkb2VzIG5vdCBiZWdpbiB3aXRoIGEgc2xhc2gsIGFuZCBpdCBtYXRjaGVzIFRFUk0sIHRoZW4gdGhpcyBpcworICogICB1c2VkIGFzIHRoZSBlbnRyeS4KKyAqIC0gVGhpcyBjb3VsZCBiZSBzaW1wbGlmaWVkIGNvbnNpZGVyYWJseSBmb3Igbm9uLVVOSVggc3lzdGVtcy4KKyAqLworCisjaWZuZGVmIFRFUk1DQVBGSUxFCisjIGlmZGVmIEFNSUdBCisjICBkZWZpbmUgVEVSTUNBUEZJTEUgInM6dGVybWNhcCIKKyMgZWxzZQorIyAgaWZkZWYgVk1TCisjICAgZGVmaW5lIFRFUk1DQVBGSUxFICJWSU1SVU5USU1FOnRlcm1jYXAiCisjICBlbHNlCisjICAgZGVmaW5lIFRFUk1DQVBGSUxFICIvZXRjL3Rlcm1jYXAiCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyAgICBpbnQKK3RnZXRlbnQodGJ1ZiwgdGVybSkKKyAgICBjaGFyICAgICp0YnVmOwkJLyogQnVmZmVyIHRvIGhvbGQgdGVybWNhcCBlbnRyeSwgVEJVRlNaIGJ5dGVzIG1heCAqLworICAgIGNoYXIgICAgKnRlcm07CQkvKiBOYW1lIG9mIHRlcm1pbmFsICovCit7CisgICAgY2hhciAgICB0Y2J1ZlszMl07CQkvKiBUZW1wIGJ1ZmZlciB0byBoYW5kbGUgKi8KKyAgICBjaGFyICAgICp0Y3B0ciA9IHRjYnVmOwkvKiBleHRlbmRlZCBlbnRyaWVzICovCisgICAgY2hhciAgICAqdGNhcCA9IFRFUk1DQVBGSUxFOyAvKiBEZWZhdWx0IHRlcm1jYXAgZmlsZSAqLworICAgIGNoYXIgICAgKnRtcDsKKyAgICBGSUxFICAgICp0ZXJtY2FwOworICAgIGludAkgICAgcmV0dmFsID0gMDsKKyAgICBpbnQJICAgIGxlbjsKKworICAgIGlmICgodG1wID0gKGNoYXIgKiltY2hfZ2V0ZW52KChjaGFyX3UgKikiVEVSTUNBUCIpKSAhPSBOVUxMKQorICAgIHsKKwlpZiAoKnRtcCA9PSAnLycpCQkvKiBURVJNQ0FQID0gbmFtZSBvZiB0ZXJtY2FwIGZpbGUgKi8KKwl7CisJICAgIHRjYXAgPSB0bXAgOworI2lmIGRlZmluZWQoQU1JR0EpCisJICAgIC8qIENvbnZlcnQgL3Vzci9zaGFyZS9saWIvdGVybWNhcCB0byB1c3I6c2hhcmUvbGliL3Rlcm1jYXAgKi8KKwkgICAgdGNhcCsrOworCSAgICB0bXAgPSBzdHJjaHIodGNhcCwgJy8nKTsKKwkgICAgaWYgKHRtcCkKKwkJKnRtcCA9ICc6JzsKKyNlbmRpZgorCX0KKwllbHNlCQkJCS8qIFRFUk1DQVAgPSB0ZXJtY2FwIGVudHJ5IGl0c2VsZiAqLworCXsKKwkgICAgaW50IHRsZW4gPSBzdHJsZW4odGVybSk7CisKKwkgICAgd2hpbGUgKCp0bXAgJiYgKnRtcCAhPSAnOicpCQkvKiBDaGVjayBpZiBURVJNIG1hdGNoZXMgKi8KKwkgICAgeworCQljaGFyICpuZXh0dG1wOworCisJCXdoaWxlICgqdG1wID09ICd8JykKKwkJICAgIHRtcCsrOworCQluZXh0dG1wICA9IF9maW5kKHRtcCwgIjp8Iik7CS8qIFJoaWFsdG8gKi8KKwkJaWYgKHRtcCt0bGVuID09IG5leHR0bXAgJiYgX21hdGNoKHRtcCwgdGVybSkgPT0gdGxlbikKKwkJeworCQkgICAgc3RyY3B5KHRidWYsIHRtcCk7CisJCSAgICB0ZW50ID0gdGJ1ZjsKKwkJICAgIHJldHVybiAxOworCQl9CisJCWVsc2UKKwkJICAgIHRtcCA9IG5leHR0bXA7CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmICghKHRlcm1jYXAgPSBtY2hfZm9wZW4odGNhcCwgInIiKSkpCisgICAgeworCXN0cmNweSh0YnVmLCB0Y2FwKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgbGVuID0gMDsKKyAgICB3aGlsZSAoZ2V0ZW50KHRidWYgKyBsZW4sIHRlcm0sIHRlcm1jYXAsIFRCVUZTWiAtIGxlbikpCisgICAgeworCXRjcHRyID0gdGNidWY7CQkJCS8qIFJoaWFsdG8gKi8KKwlpZiAoKHRlcm0gPSB0Z2V0c3RyKCJ0YyIsICZ0Y3B0cikpKQkvKiBleHRlbmRlZCBlbnRyeSAqLworCXsKKwkgICAgcmV3aW5kKHRlcm1jYXApOworCSAgICBsZW4gPSBzdHJsZW4odGJ1Zik7CisJfQorCWVsc2UKKwl7CisJICAgIHJldHZhbCA9IDE7CisJICAgIHRlbnQgPSB0YnVmOwkvKiByZXNldCBpdCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgKi8KKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBmY2xvc2UodGVybWNhcCk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworICAgIHN0YXRpYyBpbnQKK2dldGVudCh0YnVmLCB0ZXJtLCB0ZXJtY2FwLCBidWZsZW4pCisgICAgY2hhciAgICAqdGJ1ZiwgKnRlcm07CisgICAgRklMRSAgICAqdGVybWNhcDsKKyAgICBpbnQJICAgIGJ1ZmxlbjsKK3sKKyAgICBjaGFyICAgICp0cHRyOworICAgIGludAkgICAgdGxlbiA9IHN0cmxlbih0ZXJtKTsKKworICAgIHdoaWxlIChuZXh0ZW50KHRidWYsIHRlcm1jYXAsIGJ1ZmxlbikpCS8qIEZvciBlYWNoIHBvc3NpYmxlIGVudHJ5ICovCisgICAgeworCXRwdHIgPSB0YnVmOworCXdoaWxlICgqdHB0ciAmJiAqdHB0ciAhPSAnOicpCQkvKiA6IHRlcm1pbmF0ZXMgbmFtZSBmaWVsZCAqLworCXsKKwkgICAgY2hhciAgICAqbmV4dHRwdHI7CisKKwkgICAgd2hpbGUgKCp0cHRyID09ICd8JykJCS8qIHwgc2VwZXJhdGVzIG5hbWVzICovCisJCXRwdHIrKzsKKwkgICAgbmV4dHRwdHIgPSBfZmluZCh0cHRyLCAiOnwiKTsJLyogUmhpYWx0byAqLworCSAgICBpZiAodHB0ciArIHRsZW4gPT0gbmV4dHRwdHIgJiYKKwkJX21hdGNoKHRwdHIsIHRlcm0pID09IHRsZW4pCS8qIEZPVU5EISAqLworCSAgICB7CisJCXRlbnQgPSB0YnVmOworCQlyZXR1cm4gMTsKKwkgICAgfQorCSAgICBlbHNlCQkJCS8qIExvb2sgZm9yIG5leHQgbmFtZSAqLworCQl0cHRyID0gbmV4dHRwdHI7CisJfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworICAgIHN0YXRpYyBpbnQKK25leHRlbnQodGJ1ZiwgdGVybWNhcCwgYnVmbGVuKQkJLyogUmVhZCAxIGVudHJ5IGZyb20gVEVSTUNBUCBmaWxlICovCisgICAgY2hhciAgICAqdGJ1ZjsKKyAgICBGSUxFICAgICp0ZXJtY2FwOworICAgIGludAkgICAgYnVmbGVuOworeworICAgIGNoYXIgKmxidWYgPSB0YnVmOwkJCQkvKiBsYnVmPWxpbmUgYnVmZmVyICovCisJCQkJLyogcmVhZCBsaW5lcyBzdHJhaWdodCBpbnRvIGJ1ZmZlciAqLworCisgICAgd2hpbGUgKGxidWYgPCB0YnVmK2J1ZmxlbiAmJgkJLyogVGhlcmUncyByb29tIGFuZCAqLworCSAgZmdldHMobGJ1ZiwgKGludCkodGJ1ZitidWZsZW4tbGJ1ZiksIHRlcm1jYXApKSAvKiBhbm90aGVyIGxpbmUgKi8KKyAgICB7CisJaW50IGxsZW4gPSBzdHJsZW4obGJ1Zik7CisKKwlpZiAoKmxidWYgPT0gJyMnKQkJCS8qIGVhdCBjb21tZW50cyAqLworCSAgICBjb250aW51ZTsKKwlpZiAobGJ1ZlstMV0gPT0gJzonICYmCQkJLyogYW5kIHdoaXRlc3BhY2UgKi8KKwkgICAgbGJ1ZlswXSA9PSAnXHQnICYmCisJICAgIGxidWZbMV0gPT0gJzonKQorCXsKKwkgICAgc3RyY3B5KGxidWYsIGxidWYrMik7CisJICAgIGxsZW4gLT0gMjsKKwl9CisJaWYgKGxidWZbbGxlbi0yXSA9PSAnXFwnKQkJLyogYW5kIGNvbnRpbnVhdGlvbnMgKi8KKwkgICAgbGJ1ZiArPSBsbGVuLTI7CisJZWxzZQorCXsKKwkgICAgbGJ1ZltsbGVuLTFdPTA7CQkJLyogbm8gY29udGludWF0aW9uLCByZXR1cm4gKi8KKwkgICAgcmV0dXJuIDE7CisJfQorICAgIH0KKworICAgIHJldHVybiAwOwkJCQkJLyogcmFuIGludG8gZW5kIG9mIGZpbGUgKi8KK30KKworLyoKKyAqIE1vZHVsZTogdGdldGZsYWcKKyAqCisgKiBQdXJwb3NlOiByZXR1cm5zIGZsYWcgdHJ1ZSBvciBmYWxzZSBhcyB0byB0aGUgZXhpc3RlbmNlIG9mIGEgZ2l2ZW4gZW50cnkuCisgKiB1c2VkIHdpdGggJ2JzJywgJ2FtJywgZXRjLi4uCisgKgorICogQ2FsbGluZyBjb252ZW50aW9uczogaWQgaXMgdGhlIDIgY2hhcmFjdGVyIGNhcGFiaWxpdHkgaWQuCisgKgorICogUmV0dXJuZWQgdmFsdWVzOiAxIGZvciBzdWNjZXNzLCAwIGZvciBmYWlsdXJlLgorICovCisKKyAgICBpbnQKK3RnZXRmbGFnKGlkKQorICAgIGNoYXIgKmlkOworeworICAgIGNoYXIgICAgYnVmWzI1Nl0sICpwdHIgPSBidWY7CisKKyAgICByZXR1cm4gdGdldHN0cihpZCwgJnB0cikgPyAxIDogMDsKK30KKworLyoKKyAqIE1vZHVsZTogdGdldG51bQorICoKKyAqIFB1cnBvc2U6IGdldCBudW1lcmljIHZhbHVlIHN1Y2ggYXMgJ2xpJyBvciAnY28nIGZyb20gdGVybWNhcC4KKyAqCisgKiBDYWxsaW5nIGNvbnZlbnRpb25zOiBpZCA9IDIgY2hhcmFjdGVyIGlkLgorICoKKyAqIFJldHVybmVkIHZhbHVlczogLTEgZm9yIGZhaWx1cmUsIGVsc2UgbnVtZXJpY2FsIHZhbHVlLgorICovCisKKyAgICBpbnQKK3RnZXRudW0oaWQpCisgICAgY2hhciAqaWQ7Cit7CisgICAgY2hhciAqcHRyLCBidWZbMjU2XTsKKyAgICBwdHIgPSBidWY7CisKKyAgICBpZiAodGdldHN0cihpZCwgJnB0cikpCisJcmV0dXJuIGF0b2koYnVmKTsKKyAgICBlbHNlCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNb2R1bGU6IHRnZXRzdHIKKyAqCisgKiBQdXJwb3NlOiBnZXQgdGVybWluYWwgY2FwYWJpbGl0eSBzdHJpbmcgZnJvbSBkYXRhYmFzZS4KKyAqCisgKiBDYWxsaW5nIGNvbnZlbnRpb25zOiBpZCBpcyB0aGUgdHdvIGNoYXJhY3RlciBjYXBhYmlsaXR5IGlkLgorICoJICAgICgqYnVmKSBwb2ludHMgaW50byBhIGhvbGQgYnVmZmVyIGZvciB0aGUKKyAqCSAgICBpZC4gdGhlIGNhcGFiaWxpdHkgaXMgY29waWVkIGludG8gdGhlIGJ1ZmZlcgorICoJICAgIGFuZCAoKmJ1ZikgaXMgYWR2YW5jZWQgdG8gcG9pbnQgdG8gdGhlIG5leHQKKyAqCSAgICBmcmVlIGJ5dGUgaW4gdGhlIGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5lZCB2YWx1ZXM6IDAgPSBubyBzdWNoIGVudHJ5LCBvdGhlcndpc2UgcmV0dXJucyBvcmlnaW5hbAorICoJICAgICgqYnVmKSAobm93IGEgcG9pbnRlciB0byB0aGUgc3RyaW5nKS4KKyAqCisgKiBOb3RlcworICoJSXQgYWxzbyBkZWNvZGVzIGNlcnRhaW4gZXNjYXBlIHNlcXVlbmNlcyBpbiB0aGUgYnVmZmVyLgorICogIHRoZXkgc2hvdWxkIGJlIG9idmlvdXMgZnJvbSB0aGUgY29kZToKKyAqCVxFID0gZXNjYXBlLgorICoJXG4sIFxyLCBcdCwgXGYsIFxiIG1hdGNoIHRoZSAnYycgZXNjYXBlcy4KKyAqCV54IG1hdGNoZXMgY29udHJvbC14ICheQC4uLl5fKS4KKyAqCVxubm4gbWF0Y2hlcyBubm4gb2N0YWwuCisgKglceCwgd2hlcmUgeCBpcyBhbnl0aGluZyBlbHNlLCBtYXRjaGVzIHguIEkgZGlmZmVyCisgKiAgZnJvbSB0aGUgc3RhbmRhcmQgbGlicmFyeSBoZXJlLCBpbiB0aGF0IEkgYWxsb3cgXjogdG8gbWF0Y2gKKyAqICA6LgorICoKKyAqLworCisgICAgY2hhciAqCit0Z2V0c3RyKGlkLCBidWYpCisgICAgY2hhcgkqaWQsICoqYnVmOworeworICAgIGludAkJbGVuID0gc3RybGVuKGlkKTsKKyAgICBjaGFyCSp0bXA9dGVudDsKKyAgICBjaGFyCSpob2xkOworICAgIGludAkJaTsKKworICAgIGRvIHsKKwl0bXAgPSBfZmluZCh0bXAsICI6Iik7CQkJLyogRm9yIGVhY2ggZmllbGQgKi8KKwl3aGlsZSAoKnRtcCA9PSAnOicpCQkJLyogc2tpcCBlbXB0eSBmaWVsZHMgKi8KKwkgICAgdG1wKys7CisJaWYgKCEqdG1wKQorCSAgICBicmVhazsKKworCWlmIChfbWF0Y2goaWQsIHRtcCkgPT0gbGVuKSB7CisJICAgIHRtcCArPSBsZW47CQkJCS8qIGZpbmQgJz0nICdAJyBvciAnIycgKi8KKwkgICAgaWYgKCp0bXAgPT0gJ0AnKQkJCS8qIDp4eEA6IGVudHJ5IGZvciB0YyAqLworCQlyZXR1cm4gMDsJCQkvKiBkZWxldGVkIGVudHJ5ICovCisJICAgIGhvbGQ9ICpidWY7CisJICAgIHdoaWxlICgqKyt0bXAgJiYgKnRtcCAhPSAnOicpIHsJLyogbm90IGF0IGVuZCBvZiBmaWVsZCAqLworCQlzd2l0Y2goKnRtcCkgeworCQljYXNlICdcXCc6CQkJLyogRXhwYW5kIGVzY2FwZXMgaGVyZSAqLworCQkgICAgc3dpdGNoKCorK3RtcCkgeworCQkgICAgY2FzZSAwOgkJCS8qIGlnbm9yZSBiYWNrc2xhc2hlcyAqLworCQkJdG1wLS07CQkJLyogYXQgZW5kIG9mIGVudHJ5ICovCisJCQlicmVhazsJCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCSAgICBjYXNlICdlJzoKKwkJICAgIGNhc2UgJ0UnOgkJCS8qIEVTQyAqLworCQkJKigqYnVmKSsrID0gRVNDOworCQkJYnJlYWs7CisJCSAgICBjYXNlICduJzoJCQkvKiBcbiAqLworCQkJKigqYnVmKSsrID0gJ1xuJzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAncic6CQkJLyogXHIgKi8KKwkJCSooKmJ1ZikrKyA9ICdccic7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ3QnOgkJCS8qIFx0ICovCisJCQkqKCpidWYpKysgPSAnXHQnOworCQkJYnJlYWs7CisJCSAgICBjYXNlICdiJzoJCQkvKiBcYiAqLworCQkJKigqYnVmKSsrID0gJ1xiJzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAnZic6CQkJLyogXGYgKi8KKwkJCSooKmJ1ZikrKyA9ICdcZic7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJzAnOgkJCS8qIFxubm4gKi8KKwkJICAgIGNhc2UgJzEnOgorCQkgICAgY2FzZSAnMic6CisJCSAgICBjYXNlICczJzoKKwkJICAgIGNhc2UgJzQnOgorCQkgICAgY2FzZSAnNSc6CisJCSAgICBjYXNlICc2JzoKKwkJICAgIGNhc2UgJzcnOgorCQkgICAgY2FzZSAnOCc6CisJCSAgICBjYXNlICc5JzoKKwkJCSoqYnVmID0gMDsKKwkJCSAgICAvKiBnZXQgdXAgdG8gdGhyZWUgZGlnaXRzICovCisJCQlmb3IgKGkgPSAwOyBpIDwgMyAmJiBWSU1fSVNESUdJVCgqdG1wKTsgKytpKQorCQkJICAgICoqYnVmID0gKipidWYgKiA4ICsgKnRtcCsrIC0gJzAnOworCQkJKCpidWYpKys7CisJCQl0bXAtLTsKKwkJCWJyZWFrOworCQkgICAgZGVmYXVsdDoJCQkvKiBceCwgZm9yIGFsbCBvdGhlciB4ICovCisJCQkqKCpidWYpKys9ICp0bXA7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJY2FzZSAnXic6CQkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJCSAgICArK3RtcDsKKwkJICAgICooKmJ1ZikrKyA9IEN0cmxfY2hyKCp0bXApOworCQkgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICAqKCpidWYpKysgPSAqdG1wOworCQl9CisJICAgIH0KKwkgICAgKigqYnVmKSsrID0gMDsKKwkgICAgcmV0dXJuIGhvbGQ7CisJfQorICAgIH0gd2hpbGUgKCp0bXApOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNb2R1bGU6IHRnb3RvCisgKgorICogUHVycG9zZTogZGVjb2RlIGNtIGN1cnNvciBtb3Rpb24gc3RyaW5nLgorICoKKyAqIENhbGxpbmcgY29udmVudGlvbnM6IGNtIGlzIGN1cnNvciBtb3Rpb24gc3RyaW5nLiAgbGluZSwgY29sLCBhcmUgdGhlCisgKiBkZXNpcmVkIGRlc3RpbmF0aW9uLgorICoKKyAqIFJldHVybmVkIHZhbHVlczogYSBzdHJpbmcgcG9pbnRpbmcgdG8gdGhlIGRlY29kZWQgc3RyaW5nLCBvciAiT09QUyIgaWYgaXQKKyAqIGNhbm5vdCBiZSBkZWNvZGVkLgorICoKKyAqIE5vdGVzCisgKglUaGUgYWNjZXB0ZWQgZXNjYXBlcyBhcmU6CisgKgklZAkgYXMgaW4gcHJpbnRmLCAwIG9yaWdpbi4KKyAqCSUyLCAlMyAgIGxpa2UgJTAyZCwgJTAzZCBpbiBwcmludGYuCisgKgklLgkgbGlrZSAlYworICoJJSt4CSBhZGRzIDx4PiB0byB2YWx1ZSwgdGhlbiAlLgorICoJJT54eSAgICAgaWYgdmFsdWU+eCwgYWRkcyB5LiBObyBvdXRwdXQuCisgKgklaQkgaW5jcmVtZW50cyBsaW5lJiBjb2wsIG5vIG91dHB1dC4KKyAqCSVyCSByZXZlcnNlcyBvcmRlciBvZiBsaW5lJmNvbC4gTm8gb3V0cHV0LgorICoJJSUJIHByaW50cyBhcyBhIHNpbmdsZSAlLgorICoJJW4JIGV4Y2x1c2l2ZSBvciByb3cgJiBjb2wgd2l0aCAwMTQwLgorICoJJUIJIEJDRCwgbm8gb3V0cHV0LgorICoJJUQJIHJldmVyc2UgY29kaW5nICh4LTIqKHglMTYpKSwgbm8gb3V0cHV0LgorICovCisKKyAgICBjaGFyICoKK3Rnb3RvKGNtLCBjb2wsIGxpbmUpCisgICAgY2hhcgkqY207CQkJCS8qIGNtIHN0cmluZywgZnJvbSB0ZXJtY2FwICovCisgICAgaW50IGNvbCwJCQkJCS8qIGNvbHVtbiwgeCBwb3NpdGlvbiAqLworICAgIGxpbmU7CQkJCQkvKiBsaW5lLCB5IHBvc2l0aW9uICovCit7CisgICAgY2hhciAgICBneCwgZ3ksCQkJCS8qIHgsIHkgKi8KKwkqcHRyLAkJCQkJLyogcG9pbnRlciBpbiAnY20nICovCisJcmV2ZXJzZSA9IDAsCQkJCS8qIHJldmVyc2UgZmxhZyAqLworCSpidWZwLAkJCQkJLyogcG9pbnRlciBpbiByZXR1cm5lZCBzdHJpbmcgKi8KKwlhZGR1cCA9IDAsCQkJCS8qIGFkZCB1cGxpbmUgKi8KKwlhZGRiYWsgPSAwLAkJCQkvKiBhZGQgYmFja3VwICovCisJYzsKKyAgICBzdGF0aWMgY2hhciBidWZmZXJbMzJdOworCisgICAgaWYgKCFjbSkKKwlyZXR1cm4gIk9PUFMiOwkJCQkvKiBLbHVkZ2UsIGJ1dCBzdGFuZGFyZCAqLworCisgICAgYnVmcCA9IGJ1ZmZlcjsKKyAgICBwdHIgPSBjbTsKKworICAgIHdoaWxlICgqcHRyKSB7CisJaWYgKChjID0gKnB0cisrKSAhPSAnJScpIHsJCS8qIG5vcm1hbCBjaGFyICovCisJICAgICpidWZwKysgPSBjOworCX0gZWxzZSB7CQkJCS8qICUgZXNjYXBlICovCisJICAgIHN3aXRjaChjID0gKnB0cisrKSB7CisJICAgIGNhc2UgJ2QnOgkJCQkvKiBkZWNpbWFsICovCisJCWJ1ZnAgPSBfYWRkZm10KGJ1ZnAsICIlZCIsIGxpbmUpOworCQlsaW5lID0gY29sOworCQlicmVhazsKKwkgICAgY2FzZSAnMic6CQkJCS8qIDIgZGlnaXQgZGVjaW1hbCAqLworCQlidWZwID0gX2FkZGZtdChidWZwLCAiJTAyZCIsIGxpbmUpOworCQlsaW5lID0gY29sOworCQlicmVhazsKKwkgICAgY2FzZSAnMyc6CQkJCS8qIDMgZGlnaXQgZGVjaW1hbCAqLworCQlidWZwID0gX2FkZGZtdChidWZwLCAiJTAzZCIsIGxpbmUpOworCQlsaW5lID0gY29sOworCQlicmVhazsKKwkgICAgY2FzZSAnPic6CQkJCS8qICU+eHk6IGlmID54LCBhZGQgeSAqLworCQlneCA9ICpwdHIrKzsKKwkJZ3kgPSAqcHRyKys7CisJCWlmIChjb2w+Z3gpIGNvbCArPSBneTsKKwkJaWYgKGxpbmU+Z3gpIGxpbmUgKz0gZ3k7CisJCWJyZWFrOworCSAgICBjYXNlICcrJzoJCQkJLyogJStjOiBhZGQgYyAqLworCQlsaW5lICs9ICpwdHIrKzsKKwkgICAgY2FzZSAnLic6CQkJCS8qIHByaW50IHgveSAqLworCQlpZiAobGluZSA9PSAnXHQnIHx8CQkvKiB0aGVzZSBhcmUgKi8KKwkJICAgbGluZSA9PSAnXG4nIHx8CQkvKiBjaGFycyB0aGF0ICovCisJCSAgIGxpbmUgPT0gJ1wwMDQnIHx8CQkvKiBVTklYIGhhdGVzICovCisJCSAgIGxpbmUgPT0gJ1wwJykgeworCQkgICAgbGluZSsrOwkJCS8qIHNvIGdvIHRvIG5leHQgcG9zICovCisJCSAgICBpZiAocmV2ZXJzZSA9PSAobGluZSA9PSBjb2wpKQorCQkJYWRkdXA9MTsJCS8qIGFuZCBtYXJrIFVQICovCisJCSAgICBlbHNlCisJCQlhZGRiYWs9MTsJCS8qIG9yIEJDICovCisJCX0KKwkJKmJ1ZnArKz1saW5lOworCQlsaW5lID0gY29sOworCQlicmVhazsKKwkgICAgY2FzZSAncic6CQkJCS8qIHI6IHJldmVyc2UgKi8KKwkJZ3ggPSBsaW5lOworCQlsaW5lID0gY29sOworCQljb2wgPSBneDsKKwkJcmV2ZXJzZSA9IDE7CisJCWJyZWFrOworCSAgICBjYXNlICdpJzoJCQkvKiBpbmNyZW1lbnQgKDEtb3JpZ2luIHNjcmVlbikgKi8KKwkJY29sKys7CisJCWxpbmUrKzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJyUnOgkJCQkvKiAlJT0lIGxpdGVyYWxseSAqLworCQkqYnVmcCsrPSclJzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ24nOgkJCQkvKiBtYWdpYyBETTI1MDAgY29kZSAqLworCQlsaW5lIF49IDAxNDA7CisJCWNvbCBePSAwMTQwOworCQlicmVhazsKKwkgICAgY2FzZSAnQic6CQkJCS8qIGJjZCBlbmNvZGluZyAqLworCQlsaW5lID0gbGluZS8xMDw8NCtsaW5lJTEwOworCQljb2wgPSBjb2wvMTA8PDQrY29sJTEwOworCQlicmVhazsKKwkgICAgY2FzZSAnRCc6CQkJCS8qIG1hZ2ljIERlbHRhIERhdGEgY29kZSAqLworCQlsaW5lID0gbGluZS0yKihsaW5lJjE1KTsKKwkJY29sID0gY29sLTIqKGNvbCYxNSk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgkJCQkvKiBVbmtub3duIGVzY2FwZSAqLworCQlyZXR1cm4gIk9PUFMiOworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIChhZGR1cCkJCQkJCS8qIGFkZCB1cGxpbmUgKi8KKwlpZiAoVVApIHsKKwkgICAgcHRyPVVQOworCSAgICB3aGlsZSAoVklNX0lTRElHSVQoKnB0cikgfHwgKnB0ciA9PSAnLicpCisJCXB0cisrOworCSAgICBpZiAoKnB0ciA9PSAnKicpCisJCXB0cisrOworCSAgICB3aGlsZSAoKnB0cikKKwkJKmJ1ZnArKyA9ICpwdHIrKzsKKwl9CisKKyAgICBpZiAoYWRkYmFrKQkJCQkJLyogYWRkIGJhY2tzcGFjZSAqLworCWlmIChCQykgeworCSAgICBwdHI9QkM7CisJICAgIHdoaWxlIChWSU1fSVNESUdJVCgqcHRyKSB8fCAqcHRyID09ICcuJykKKwkJcHRyKys7CisJICAgIGlmICgqcHRyID09ICcqJykKKwkJcHRyKys7CisJICAgIHdoaWxlICgqcHRyKQorCQkqYnVmcCsrID0gKnB0cisrOworCX0KKwllbHNlCisJICAgICpidWZwKys9J1xiJzsKKworICAgICpidWZwID0gMDsKKworICAgIHJldHVybihidWZmZXIpOworfQorCisvKgorICogTW9kdWxlOiB0cHV0cworICoKKyAqIFB1cnBvc2U6IGRlY29kZSBwYWRkaW5nIGluZm9ybWF0aW9uCisgKgorICogQ2FsbGluZyBjb252ZW50aW9uczogY3AgPSBzdHJpbmcgdG8gYmUgcGFkZGVkLCBhZmZjbnQgPSAjIG9mIGl0ZW1zIGFmZmVjdGVkCisgKgkobGluZXMsIGNoYXJhY3RlcnMsIHdoYXRldmVyKSwgb3V0YyA9IHJvdXRpbmUgdG8gb3V0cHV0IDEgY2hhcmFjdGVyLgorICoKKyAqIFJldHVybmVkIHZhbHVlczogbm9uZQorICoKKyAqIE5vdGVzCisgKgljcCBoYXMgcGFkZGluZyBpbmZvcm1hdGlvbiBhaGVhZCBvZiBpdCwgaW4gdGhlIGZvcm0KKyAqICBubm5URVhUIG9yIG5ubipURVhULiBubm4gaXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXksCisgKiAgYW5kIG1heSBiZSBhIGRlY2ltYWwgKG5ubi5tbW0pLiBJZiB0aGUgYXN0ZXJpc2sgaXMgZ2l2ZW4sIHRoZW4KKyAqICB0aGUgZGVsYXkgaXMgbXVsdGlwbGllZCBieSBhZmNudC4gVGhlIGRlbGF5IGlzIHByb2R1Y2VkIGJ5IG91dHB1dHRpbmcKKyAqICBhIG51bWJlciBvZiBudWxscyAob3Igb3RoZXIgcGFkZGluZyBjaGFyKSBhZnRlciBwcmludGluZyB0aGUKKyAqICBURVhULgorICoKKyAqLworCitsb25nIF9iYXVkc1sxNl09eworICAgIDAsCTUwLCA3NSwJMTEwLAorICAgIDEzNCwgICAgMTUwLCAgICAyMDAsICAgIDMwMCwKKyAgICA2MDAsICAgIDEyMDAsICAgMTgwMCwgICAyNDAwLAorICAgIDQ4MDAsICAgOTYwMCwgICAxOTIwMCwgIDE5MjAwIH07CisKKyAgICBpbnQKK3RwdXRzKGNwLCBhZmZjbnQsIG91dGMpCisgICAgY2hhciAqY3A7CQkJCS8qIHN0cmluZyB0byBwcmludCAqLworICAgIGludCBhZmZjbnQ7CQkJCS8qIE51bWJlciBvZiBsaW5lcyBhZmZlY3RlZCAqLworICAgIHZvaWQgKCpvdXRjKSBfX0FSR1MoKHVuc2lnbmVkIGludCkpOy8qIHJvdXRpbmUgdG8gb3V0cHV0IDEgY2hhcmFjdGVyICovCit7CisgICAgbG9uZyAgICBmcmFjLAkJCS8qIDEwXigjZGlnaXRzIGFmdGVyIGRlY2ltYWwgcG9pbnQpICovCisJY291bnRlciwJCQkvKiBkaWdpdHMgKi8KKwlhdG9sIF9fQVJHUygoY29uc3QgY2hhciAqKSk7CisKKyAgICBpZiAoVklNX0lTRElHSVQoKmNwKSkgeworCWNvdW50ZXIgPSAwOworCWZyYWMgPSAxMDAwOworCXdoaWxlIChWSU1fSVNESUdJVCgqY3ApKQorCSAgICBjb3VudGVyID0gY291bnRlciAqIDEwTCArIChsb25nKSgqY3ArKyAtICcwJyk7CisJaWYgKCpjcCA9PSAnLicpCisJICAgIHdoaWxlIChWSU1fSVNESUdJVCgqKytjcCkpIHsKKwkJY291bnRlciA9IGNvdW50ZXIgKiAxMEwgKyAobG9uZykoKmNwKysgLSAnMCcpOworCQlmcmFjID0gZnJhYyAqIDEwOworCSAgICB9CisJaWYgKCpjcCE9JyonKSB7CQkJLyogbXVsdGlwbHkgYnkgYWZmZWN0ZWQgbGluZXMgKi8KKwkgICAgaWYgKGFmZmNudD4xKSBhZmZjbnQgPSAxOworCX0KKwllbHNlCisJICAgIGNwKys7CisKKwkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZm9yIHBhZGRpbmcgY291bnRlci9mcmFjIG1zIGRlbGF5ICovCisJaWYgKG9zcGVlZCkKKwkgICAgY291bnRlciA9IChjb3VudGVyICogX2JhdWRzW29zcGVlZF0gKiAobG9uZylhZmZjbnQpIC8gZnJhYzsKKworCXdoaWxlICgqY3ApCQkJLyogb3V0cHV0IHN0cmluZyAqLworCSAgICAoKm91dGMpKCpjcCsrKTsKKwlpZiAob3NwZWVkKQorCSAgICB3aGlsZSAoY291bnRlci0tKQkJLyogZm9sbG93ZWQgYnkgcGFkIGNoYXJhY3RlcnMgKi8KKwkJKCpvdXRjKShQQyk7CisgICAgfQorICAgIGVsc2UKKwl3aGlsZSAoKmNwKQorCSAgICAoKm91dGMpKCpjcCsrKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIE1vZHVsZTogdHV0aWwuYworICoKKyAqIFB1cnBvc2U6IFV0aWxpdHkgcm91dGluZXMgZm9yIFRFUk1MSUIgZnVuY3Rpb25zLgorICoKKyAqLworICAgIHN0YXRpYyBpbnQKK19tYXRjaChzMSwgczIpCQkvKiByZXR1cm5zIGxlbmd0aCBvZiB0ZXh0IGNvbW1vbiB0byBzMSBhbmQgczIgKi8KKyAgICBjaGFyICpzMSwgKnMyOworeworICAgIGludCBpID0gMDsKKworICAgIHdoaWxlIChzMVtpXSAmJiBzMVtpXSA9PSBzMltpXSkKKwlpKys7CisKKyAgICByZXR1cm4gaTsKK30KKworLyoKKyAqIGZpbmRzIG5leHQgYyBpbiBzIHRoYXQncyBhIG1lbWJlciBvZiBzZXQsIHJldHVybnMgcG9pbnRlcgorICovCisgICAgc3RhdGljIGNoYXIgKgorX2ZpbmQocywgc2V0KQorICAgIGNoYXIgKnMsICpzZXQ7Cit7CisgICAgZm9yKDsgKnM7IHMrKykKKyAgICB7CisJY2hhcgkqcHRyID0gc2V0OworCisJd2hpbGUgKCpwdHIgJiYgKnMgIT0gKnB0cikKKwkgICAgcHRyKys7CisKKwlpZiAoKnB0cikKKwkgICAgcmV0dXJuIHM7CisgICAgfQorCisgICAgcmV0dXJuIHM7Cit9CisKKy8qCisgKiBhZGQgdmFsIHRvIGJ1ZiBhY2NvcmRpbmcgdG8gZm9ybWF0IGZtdAorICovCisgICAgc3RhdGljIGNoYXIgKgorX2FkZGZtdChidWYsIGZtdCwgdmFsKQorICAgIGNoYXIgKmJ1ZiwgKmZtdDsKKyAgICBpbnQgdmFsOworeworICAgIHNwcmludGYoYnVmLCBmbXQsIHZhbCk7CisgICAgd2hpbGUgKCpidWYpCisJYnVmKys7CisgICAgcmV0dXJuIGJ1ZjsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL01ha2VfYW1pZ2EubWFrIGIvc3JjL3Rlc3RkaXIvTWFrZV9hbWlnYS5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3MGI3MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL01ha2VfYW1pZ2EubWFrCkBAIC0wLDAgKzEsOTcgQEAKKyMKKyMgTWFrZWZpbGUgdG8gcnVuIGFsIHRlc3RzIGZvciBWaW0sIG9uIEFtaWdhCisjCisjIFJlcXVpcmVzICJybSIsICJjc2giIGFuZCAiZGlmZiIhCisKK1ZJTVBST0cgPSAvdmltCisKKyMgVGhlc2UgdGVzdHMgZG9uJ3Qgd29yayAoeWV0KToKKyMgdGVzdDIJCSJcXHRtcCIgZG9lc24ndCB3b3JrCisjIHRlc3QxMAknZXJyb3Jmb3JtYXQnIGlzIGRpZmZlcmVudAorIyB0ZXN0MTEJImNhdCIgZG9lc24ndCB3b3JrIHByb3Blcmx5CisjIHRlc3QxMgljYW4ndCB1bmxpbmsgYSBzd2FwIGZpbGUKKyMgdGVzdDI1CXVzZXMgc3ltYm9saWMgbGluaworIyB0ZXN0MjcJY2FuJ3QgZWRpdCBmaWxlIHdpdGggIioiCisjIHRlc3Q1Mglvbmx5IGZvciBXaW4zMgorCitTQ1JJUFRTID0gdGVzdDEub3V0IHRlc3QzLm91dCB0ZXN0NC5vdXQgdGVzdDUub3V0IHRlc3Q2Lm91dCBcCisJCXRlc3Q3Lm91dCB0ZXN0OC5vdXQgdGVzdDkub3V0IFwKKwkJdGVzdDEzLm91dCB0ZXN0MTQub3V0IHRlc3QxNS5vdXQgdGVzdDE3Lm91dCBcCisJCXRlc3QxOC5vdXQgdGVzdDE5Lm91dCB0ZXN0MjAub3V0IHRlc3QyMS5vdXQgdGVzdDIyLm91dCBcCisJCXRlc3QyMy5vdXQgdGVzdDI0Lm91dCB0ZXN0MjYub3V0IFwKKwkJdGVzdDI4Lm91dCB0ZXN0Mjkub3V0IHRlc3QzMC5vdXQgdGVzdDMxLm91dCB0ZXN0MzIub3V0IFwKKwkJdGVzdDMzLm91dCB0ZXN0MzQub3V0IHRlc3QzNS5vdXQgdGVzdDM2Lm91dCB0ZXN0Mzcub3V0IFwKKwkJdGVzdDM4Lm91dCB0ZXN0Mzkub3V0IHRlc3Q0MC5vdXQgdGVzdDQxLm91dCB0ZXN0NDIub3V0IFwKKwkJdGVzdDQzLm91dCB0ZXN0NDQub3V0IHRlc3Q0NS5vdXQgdGVzdDQ2Lm91dCB0ZXN0NDcub3V0IFwKKwkJdGVzdDQ4Lm91dCB0ZXN0NTEub3V0CisKKy5TVUZGSVhFUzogLmluIC5vdXQKKworbm9uZ3VpOgkvdG1wICQoU0NSSVBUUykKKwljc2ggLWMgZWNobyBBTEwgRE9ORQorCitjbGVhbjoKKwljc2ggLWMgXHJtIC1yZiAqLm91dCAvdG1wLyogWGRvdGVzdCBzbWFsbC52aW0gdGlueS52aW0gbWJ5dGUudmltIHRlc3Qub2sgdmltaW5mbworCisuaW4ub3V0OgorCWNvcHkgJCoub2sgdGVzdC5vaworCSQoVklNUFJPRykgLXUgYW1pZ2EudmltIC1VIE5PTkUgLS1ub3BsdWdpbiAtcyBkb3Rlc3QuaW4gJCouaW4KKwlkaWZmIHRlc3Qub3V0ICQqLm9rCisJcmVuYW1lIHRlc3Qub3V0ICQqLm91dAorCS1kZWxldGUgWCM/IEFMTCBRVUlFVAorCS1kZWxldGUgdGVzdC5vaworCisjIENyZWF0ZSBhIGRpcmVjdG9yeSBmb3IgdGVtcCBmaWxlcworL3RtcDoKKwltYWtlZGlyIC90bXAKKworIyBNYW54IHJlcXVpcmVzIGFsbCBkZXBlbmRlbmNpZXMuLi4KK3Rlc3QxLm91dDogdGVzdDEuaW4KK3Rlc3QyLm91dDogdGVzdDIuaW4KK3Rlc3QzLm91dDogdGVzdDMuaW4KK3Rlc3Q0Lm91dDogdGVzdDQuaW4KK3Rlc3Q1Lm91dDogdGVzdDUuaW4KK3Rlc3Q2Lm91dDogdGVzdDYuaW4KK3Rlc3Q3Lm91dDogdGVzdDcuaW4KK3Rlc3Q4Lm91dDogdGVzdDguaW4KK3Rlc3Q5Lm91dDogdGVzdDkuaW4KK3Rlc3QxMC5vdXQ6IHRlc3QxMC5pbgordGVzdDExLm91dDogdGVzdDExLmluCit0ZXN0MTIub3V0OiB0ZXN0MTIuaW4KK3Rlc3QxMy5vdXQ6IHRlc3QxMy5pbgordGVzdDE0Lm91dDogdGVzdDE0LmluCit0ZXN0MTUub3V0OiB0ZXN0MTUuaW4KK3Rlc3QxNi5vdXQ6IHRlc3QxNi5pbgordGVzdDE3Lm91dDogdGVzdDE3LmluCit0ZXN0MTgub3V0OiB0ZXN0MTguaW4KK3Rlc3QxOS5vdXQ6IHRlc3QxOS5pbgordGVzdDIwLm91dDogdGVzdDIwLmluCit0ZXN0MjEub3V0OiB0ZXN0MjEuaW4KK3Rlc3QyMi5vdXQ6IHRlc3QyMi5pbgordGVzdDIzLm91dDogdGVzdDIzLmluCit0ZXN0MjQub3V0OiB0ZXN0MjQuaW4KK3Rlc3QyNS5vdXQ6IHRlc3QyNS5pbgordGVzdDI2Lm91dDogdGVzdDI2LmluCit0ZXN0Mjcub3V0OiB0ZXN0MjcuaW4KK3Rlc3QyOC5vdXQ6IHRlc3QyOC5pbgordGVzdDI5Lm91dDogdGVzdDI5LmluCit0ZXN0MzAub3V0OiB0ZXN0MzAuaW4KK3Rlc3QzMS5vdXQ6IHRlc3QzMS5pbgordGVzdDMyLm91dDogdGVzdDMyLmluCit0ZXN0MzMub3V0OiB0ZXN0MzMuaW4KK3Rlc3QzNC5vdXQ6IHRlc3QzNC5pbgordGVzdDM1Lm91dDogdGVzdDM1LmluCit0ZXN0MzYub3V0OiB0ZXN0MzYuaW4KK3Rlc3QzNy5vdXQ6IHRlc3QzNy5pbgordGVzdDM4Lm91dDogdGVzdDM4LmluCit0ZXN0Mzkub3V0OiB0ZXN0MzkuaW4KK3Rlc3Q0MC5vdXQ6IHRlc3Q0MC5pbgordGVzdDQxLm91dDogdGVzdDQxLmluCit0ZXN0NDIub3V0OiB0ZXN0NDIuaW4KK3Rlc3Q0My5vdXQ6IHRlc3Q0My5pbgordGVzdDQ0Lm91dDogdGVzdDQ0LmluCit0ZXN0NDUub3V0OiB0ZXN0NDUuaW4KK3Rlc3Q0Ni5vdXQ6IHRlc3Q0Ni5pbgordGVzdDQ3Lm91dDogdGVzdDQ3LmluCit0ZXN0NDgub3V0OiB0ZXN0NDguaW4KK3Rlc3Q1MS5vdXQ6IHRlc3Q1MS5pbgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvTWFrZV9kb3MubWFrIGIvc3JjL3Rlc3RkaXIvTWFrZV9kb3MubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTk1MWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci9NYWtlX2Rvcy5tYWsKQEAgLTAsMCArMSw2NCBAQAorIworIyBNYWtlZmlsZSB0byBydW4gYWwgdGVzdHMgZm9yIFZpbSwgb24gRG9zLWxpa2UgbWFjaGluZXMuCisjCisjIFJlcXVpcmVzIGEgc2V0IG9mIFVuaXggdG9vbHM6IGVjaG8sIGRpZmYsIGV0Yy4KKworVklNUFJPRyA9IC4uXFx2aW0KKworIyBPbWl0dGVkOgorIyB0ZXN0MgkJIlxcdG1wIiBkb2Vzbid0IHdvcmsuCisjIHRlc3QxMAknZXJyb3Jmb3JtYXQnIGlzIGRpZmZlcmVudAorIyB0ZXN0MTIJY2FuJ3QgdW5saW5rIGEgc3dhcCBmaWxlCisjIHRlc3QyNQl1c2VzIHN5bWJvbGljIGxpbmsKKyMgdGVzdDI3CWNhbid0IGVkaXQgZmlsZSB3aXRoICIqIiBpbiBmaWxlIG5hbWUKKyMgdGVzdDMxCTE2IGJpdCB2ZXJzaW9uIHJ1bnMgb3V0IG9mIG1lbW9yeS4uLgorCitTQ1JJUFRTMTYgPQl0ZXN0MS5vdXQgdGVzdDE5Lm91dCB0ZXN0MjAub3V0IHRlc3QyMi5vdXQgXAorCQl0ZXN0MjMub3V0IHRlc3QyNC5vdXQgdGVzdDI4Lm91dCB0ZXN0Mjkub3V0IFwKKwkJdGVzdDM1Lm91dCB0ZXN0MzYub3V0IHRlc3Q0My5vdXQgXAorCQl0ZXN0NDQub3V0IHRlc3Q0NS5vdXQgdGVzdDQ2Lm91dCB0ZXN0NDcub3V0IFwKKwkJdGVzdDQ4Lm91dCB0ZXN0NTEub3V0CisKK1NDUklQVFMgPQl0ZXN0My5vdXQgdGVzdDQub3V0IHRlc3Q1Lm91dCB0ZXN0Ni5vdXQgdGVzdDcub3V0IFwKKwkJdGVzdDgub3V0IHRlc3Q5Lm91dCB0ZXN0MTEub3V0IHRlc3QxMy5vdXQgdGVzdDE0Lm91dCBcCisJCXRlc3QxNS5vdXQgdGVzdDE3Lm91dCB0ZXN0MTgub3V0IHRlc3QyMS5vdXQgdGVzdDI2Lm91dCBcCisJCXRlc3QzMC5vdXQgdGVzdDMxLm91dCB0ZXN0MzIub3V0IHRlc3QzMy5vdXQgdGVzdDM0Lm91dCBcCisJCXRlc3QzNy5vdXQgdGVzdDM4Lm91dCB0ZXN0Mzkub3V0IHRlc3Q0MC5vdXQgdGVzdDQxLm91dCBcCisJCXRlc3Q0Mi5vdXQgdGVzdDUyLm91dAorCitTQ1JJUFRTMzIgPQl0ZXN0NTAub3V0CisKK1NDUklQVFNfR1VJID0gdGVzdDE2Lm91dAorCisuU1VGRklYRVM6IC5pbiAub3V0CisKK25vbmd1aToJJChTQ1JJUFRTMTYpICQoU0NSSVBUUykKKwllY2hvIEFMTCBET05FCisKK3NtYWxsOgkkKFNDUklQVFMxNikKKwllY2hvIEFMTCBET05FCisKK2d1aToJJChTQ1JJUFRTMTYpICQoU0NSSVBUUykgJChTQ1JJUFRTX0dVSSkKKwllY2hvIEFMTCBET05FCisKK3dpbjMyOgkkKFNDUklQVFMxNikgJChTQ1JJUFRTKSAkKFNDUklQVFMzMikKKwllY2hvIEFMTCBET05FCisKK2NsZWFuOgorCS1kZWwgKi5vdXQKKwktZGVsIHRlc3Qub2sKKwktZGVsIHNtYWxsLnZpbQorCS1kZWwgdGlueS52aW0KKwktZGVsIG1ieXRlLnZpbQorCS1kZWwgWCoKKwktZGVsIHZpbWluZm8KKworLmluLm91dDoKKwljb3B5ICQqLm9rIHRlc3Qub2sKKwkkKFZJTVBST0cpIC11IGRvcy52aW0gLVUgTk9ORSAtLW5vcGx1Z2luIC1zIGRvdGVzdC5pbiAkKi5pbgorCWRpZmYgdGVzdC5vdXQgJCoub2sKKwktZGVsICQqLm91dAorCXJlbmFtZSB0ZXN0Lm91dCAkKi5vdXQKKwktZGVsIFgqCisJLWRlbCB0ZXN0Lm9rCisJLWRlbCB2aW1pbmZvCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9NYWtlX29zMi5tYWsgYi9zcmMvdGVzdGRpci9NYWtlX29zMi5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1ODIwMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL01ha2Vfb3MyLm1hawpAQCAtMCwwICsxLDUyIEBACisjCisjIE1ha2VmaWxlIHRvIHJ1biBhbCB0ZXN0cyBmb3IgVmltLCBvbiBPUy8yCisjCisjIFJlcXVpcmVzIGEgc2V0IG9mIFVuaXggdG9vbHM6IGVjaG8sIGRpZmYsIGV0Yy4KKworVklNUFJPRyA9IC4uL3ZpbS5leGUKKworIyBPbWl0dGVkOgorIyB0ZXN0MgkJIlxcdG1wIiBkb2Vzbid0IHdvcmsuCisjIHRlc3QxMAknZXJyb3Jmb3JtYXQnIGlzIGRpZmZlcmVudAorIyB0ZXN0MTEJcmVxdWlyZXMgc2VkCisjIHRlc3QxMgljYW4ndCB1bmxpbmsgYSBzd2FwIGZpbGUKKyMgdGVzdDI1CXVzZXMgc3ltYm9saWMgbGluaworIyB0ZXN0MjcJY2FuJ3QgZWRpdCBmaWxlIHdpdGggIioiIGluIGZpbGUgbmFtZQorIyB0ZXN0NTIJb25seSBmb3IgV2luMzIKKworU0NSSVBUUyA9IHRlc3QxLm91dCB0ZXN0My5vdXQgdGVzdDQub3V0IHRlc3Q1Lm91dCB0ZXN0Ni5vdXQgXAorCQl0ZXN0Ny5vdXQgdGVzdDgub3V0IHRlc3Q5Lm91dCBcCisJCXRlc3QxMy5vdXQgdGVzdDE0Lm91dCB0ZXN0MTUub3V0IHRlc3QxNy5vdXQgXAorCQl0ZXN0MTgub3V0IHRlc3QxOS5vdXQgdGVzdDIwLm91dCB0ZXN0MjEub3V0IHRlc3QyMi5vdXQgXAorCQl0ZXN0MjMub3V0IHRlc3QyNC5vdXQgdGVzdDI2Lm91dCBcCisJCXRlc3QyOC5vdXQgdGVzdDI5Lm91dCB0ZXN0MzAub3V0IHRlc3QzMS5vdXQgdGVzdDMyLm91dCBcCisJCXRlc3QzMy5vdXQgdGVzdDM0Lm91dCB0ZXN0MzUub3V0IHRlc3QzNi5vdXQgdGVzdDM3Lm91dCBcCisJCXRlc3QzOC5vdXQgdGVzdDM5Lm91dCB0ZXN0NDAub3V0IHRlc3Q0MS5vdXQgdGVzdDQyLm91dCBcCisJCXRlc3Q0My5vdXQgdGVzdDQ0Lm91dCB0ZXN0NDUub3V0IHRlc3Q0Ni5vdXQgdGVzdDQ3Lm91dCBcCisJCXRlc3Q0OC5vdXQgdGVzdDUxLm91dAorCisuU1VGRklYRVM6IC5pbiAub3V0CisKK2FsbDoJL3RtcCAkKFNDUklQVFMpCisJQGVjaG8gQUxMIERPTkUKKworJChTQ1JJUFRTKTogJChWSU1QUk9HKQorCitjbGVhbjoKKwktcm0gLXJmICoub3V0IFhkb3Rlc3QgdGVzdC5vayB0aW55LnZpbSBzbWFsbC52aW0gbWJ5dGUudmltIHZpbWluZm8KKworIyBNYWtlIHN1cmUgYWxsIC5pbiBhbmQgLm91dCBmaWxlcyBhcmUgaW4gRE9TIGZpbGVmb3JtYXQuCisuaW4ub3V0OgorCSQoVklNUFJPRykgLXUgTk9ORSAtcyB0b2Rvcy52aW0gJCouaW4KKwkkKFZJTVBST0cpIC11IE5PTkUgLXMgdG9kb3MudmltICQqLm9rCisJY29weSAkKi5vayB0ZXN0Lm9rCisJJChWSU1QUk9HKSAtdSBvczIudmltIC0tbm9wbHVnaW4gLXMgZG90ZXN0LmluICQqLmluCisJJChWSU1QUk9HKSAtdSBOT05FIC1zIHRvZG9zLnZpbSB0ZXN0Lm91dAorCWRpZmYgdGVzdC5vdXQgJCoub2sKKwlyZW5hbWUgdGVzdC5vdXQgJCoub3V0CisJLXJtIC1yZiBYKiB2aW1pbmZvCisJLWRlbCB0ZXN0Lm9rCisKKyMgQ3JlYXRlIGEgZGlyZWN0b3J5IGZvciB0ZW1wIGZpbGVzCisvdG1wOgorCS1ta2RpciAvdG1wCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9NYWtlX3Ztcy5tbXMgYi9zcmMvdGVzdGRpci9NYWtlX3Ztcy5tbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiMGIyNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL01ha2Vfdm1zLm1tcwpAQCAtMCwwICsxLDEyNCBAQAorIworIyBNYWtlZmlsZSB0byBydW4gYWxsIHRlc3RzIGZvciBWaW0gb24gVk1TCisjCisjIEF1dGhvcnM6CVpvbHRhbiBBcnBhZGZmeSwgPGFycGFkZmZ5QHBvbGFyaG9tZS5jb20+CisjCQlTYW5kb3IgS29wYW55aSwgIDxzYW5kb3Iua29wYW55aUBtYWlsYm94Lmh1PgorIworIyBMYXN0IGNoYW5nZTogIDIwMDQgTWF5IDAzCisjCisjIFRoaXMgaGFzIGJlZW4gdGVzdGVkIG9uIFZNUyA2LjIgdG8gNy4yIG9uIERFQyBBbHBoYSBhbmQgVkFYLgorIyBFZGl0IHRoZSBsaW5lcyBpbiB0aGUgQ29uZmlndXJhdGlvbiBzZWN0aW9uIGJlbG93IHRvIHNlbGVjdC4KKyMKKyMgRXhlY3V0ZSB3aXRoOgorIwkJbW1zL2Rlc2NyaXA9TWFrZV92bXMubW1zCisjIENsZWFudXAgd2l0aDoKKyMJCW1tcy9kZXNjcmlwPU1ha2Vfdm1zLm1tcyBjbGVhbgorIworIyBNYWtlIGZpbGVzIGFyZSBNTUsgY29tcGF0aWJsZS4KKyMKKyMgTk9URTogWW91IGNhbiBydW4gdGhpcyBzY3JpcHQganVzdCBpbiBYL1dpbmRvdyBlbnZpcm9ubWVudC4gSXQgd2lsbAorIyBjcmVhdGUgYSBuZXcgdGVybWluYWxzLCB0aGVyZWZvcmUgeW91IGhhdmUgdG8gc2V0IHVwIHlvdXIgRElTUExBWQorIyBsb2dpY2FsLiBNb3JlIGluZm8gaW4gVk1TIGRvY3VtZW50YXRpb24gb3Igd2l0aDogaGVscCBzZXQgZGlzcC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbmZpZ3VyYXRpb24gc2VjdGlvbi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVW5jb21tZW50IGlmIHlvdSB3YW50IHRlc3RzIGluIEdVSSBtb2RlLiAgVGVybWluYWwgbW9kZSBpcyBkZWZhdWx0LgorIyBXQU5UX0dVSSAgPSBZRVMKKworIyBDb21tZW50IG91dCBpZiB5b3Ugd2FudCB0byBydW4gVW5peCBzcGVjaWZpYyB0ZXN0cyBhcyB3ZWxsLCBidXQgcGxlYXNlCisjIGJlIGF3YXJlLCB0aGF0IG9uIE9wZW5WTVMgd2lsbCBmYWlsLCBiZWNhdXNlIG9mIGNhdCwgcm0sIGV0YyBjb21tYW5kcworIyBhbmQgZGlyZWN0b3J5IGhhbmRsaW5nLgorIyBXQU5UX1VOSVggPSBZRVMKKworIyBDb21tZW50IG91dCBpZiB5b3UgaGF2ZSBnemlwIG9uIHlvdXIgc3lzdGVtCisjIEhBVkVfR1pJUCA9IFlFUworCisjIENvbW1lbnQgb3V0IGlmIHlvdSBoYXZlIEdOVSBjb21wYXRpYmxlIGRpZmYgb24geW91ciBzeXN0ZW0KKyMgSEFWRV9HRElGRiA9IFlFUworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFbmQgb2YgY29uZmlndXJhdGlvbiBzZWN0aW9uLgorIworIyBQbGVhc2UsIGRvIG5vdCBjaGFuZ2UgYW55dGhpbmcgYmVsb3cgd2l0aG91dCBwcm9ncmFtbWluZyBleHBlcmllbmNlLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVklNUFJPRyA9IDwtPnZpbS5leGUKKworLlNVRkZJWEVTIDogLm91dCAuaW4KKworU0NSSVBUID0gdGVzdDEub3V0ICB0ZXN0Mi5vdXQgIHRlc3QzLm91dCAgdGVzdDQub3V0ICB0ZXN0NS5vdXQgIFwKKwkgdGVzdDYub3V0ICB0ZXN0Ny5vdXQgIHRlc3Q4Lm91dCAgdGVzdDkub3V0ICB0ZXN0MTBhLm91dFwKKwkgdGVzdDEzLm91dCB0ZXN0MTQub3V0IHRlc3QxNS5vdXQgdGVzdDE3Lm91dCBcCisJIHRlc3QxOC5vdXQgdGVzdDE5Lm91dCB0ZXN0MjAub3V0IHRlc3QyMS5vdXQgdGVzdDIyLm91dCBcCisJIHRlc3QyMy5vdXQgdGVzdDI0Lm91dCB0ZXN0MjYub3V0IFwKKwkgdGVzdDI4Lm91dCB0ZXN0Mjkub3V0IHRlc3QzMS5vdXQgdGVzdDMyLm91dCBcCisJIHRlc3QzMy5vdXQgdGVzdDM0Lm91dCB0ZXN0MzUub3V0IHRlc3QzNi5vdXQgdGVzdDM3Lm91dCBcCisJIHRlc3QzOC5vdXQgdGVzdDM5Lm91dCB0ZXN0NDAub3V0IHRlc3Q0MS5vdXQgdGVzdDQyLm91dCBcCisJIHRlc3Q0My5vdXQgdGVzdDQ0Lm91dCB0ZXN0NDUub3V0IHRlc3Q0Ni5vdXQgXAorCSB0ZXN0NDgub3V0IHRlc3Q1MS5vdXQKKworLklGREVGIFdBTlRfR1VJCitTQ1JJUFRfR1VJID0gdGVzdDE2Lm91dAorR1VJX09QVElPTiA9IC1nCisuRU5ESUYKKworLklGREVGIFdBTlRfVU5JWAorU0NSSVBUX1VOSVggPSB0ZXN0MTAub3V0IHRlc3QxMi5vdXQgdGVzdDI1Lm91dCB0ZXN0Mjcub3V0IHRlc3QzMC5vdXQgdGVzdDQ5Lm91dAorLkVORElGCisKKy5JRkRFRiBIQVZFX0daSVAKK1NDUklQVF9HWklQID0gdGVzdDExLm91dAorLkVORElGCisKKy5JRkRFRiBIQVZFX0dESUZGCitTQ1JJUFRfR0RJRkYgPSB0ZXN0NDcub3V0CisuRU5ESUYKKworLmluLm91dCA6CisJLUAgd3JpdGUgc3lzJG91dHB1dCAiICIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICIgICAgICAgICAgICAgICAgIiQqIiAiCisJLUAgd3JpdGUgc3lzJG91dHB1dCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisJLUAgY3JlYXRlL3Rlcm0vd2FpdCBtY3IgJChWSU1QUk9HKSAkKEdVSV9PUFRJT04pIC11IHZtcy52aW0gLS1ub3BsdWdpbiAtcyBkb3Rlc3QuaW4gJCouaW4KKwktQCBpZiAiJydGJFNFQVJDSCgidGVzdC5vdXQuKiIpJyIgLk5FUy4gIiIgdGhlbiBkaWZmZXJlbmNlcyB0ZXN0Lm91dCAkKi5vazsKKwktQCBpZiAiJydGJFNFQVJDSCgidGVzdC5vdXQuKiIpJyIgLk5FUy4gIiIgdGhlbiByZW5hbWUgdGVzdC5vdXQgJCoub3V0CisJLUAgaWYgIicnRiRTRUFSQ0goIlhkb3Rlc3QuKiIpJyIgIC5ORVMuICIiIHRoZW4gZGVsZXRlL25vY29uZmlybS9ub2xvZyBYZG90ZXN0LiouKgorCithbGwgOiBjbGVhbiBub2xvZyAkKFNDUklQVCkgJChTQ1JJUFRfR1VJKSAkKFNDUklQVF9VTklYKSAkKFNDUklQVF9HWklQKSAkKFNDUklQVF9HRElGRikKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICIgIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgICAgICAgICAgICAgICBBbGwgZG9uZSIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwktQCBkZWFzc2lnbiBzeXMkb3V0cHV0CisJLUAgZGVsZXRlL25vY29uZmlybS9ub2xvZyB4Ki4qLioKKwktQCB0eXBlIHRlc3QubG9nCisKK25vbG9nIDoKKwktQCBkZWZpbmUgc3lzJG91dHB1dCB0ZXN0LmxvZworCS1AIHdyaXRlIHN5cyRvdXRwdXQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgICAgICAgICAgU3RhbmRhcmQgVklNIHRlc3QgY2FzZXMiCisJLUAgd3JpdGUgc3lzJG91dHB1dCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisJLUAgd3JpdGUgc3lzJG91dHB1dCAiIE9wZW5WTVMgdmVyc2lvbjogJydGJEdFVFNZSSgiVkVSU0lPTiIpJyIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICIgVmltIHZlcnNpb246IgorCS1AIG1jciAkKFZJTVBST0cpIC0tdmVyc2lvbgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiBUZXN0IGRhdGU6IgorCS1AIHNob3cgdGltZQorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgICAgICAgICAgICAgICBUZXN0IHJlc3VsdHM6IgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIk1BS0VfVk1TLk1NUyBvcHRpb25zOiIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICIgICBXQU5UX0dVSSAgPSAiIiQoV0FOVF9HVUkpIiIgIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgIFdBTlRfVU5JWCA9ICIiJChXQU5UX1VOSVgpIiIgIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgIEhBVkVfR1pJUCA9ICIiJChIQVZFX0daSVApIiIgIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgIEhBVkVfR0RJRkY9ICIiJChIQVZFX0dESUZGKSIiICIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICJEZWZhdWx0IHZpbXJjIGZpbGUgaXMgVk1TLlZJTToKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwktQCB0eXBlIFZNUy5WSU0KKworY2xlYW4gOgorCS1AIGlmICInJ0YkU0VBUkNIKCIqLm91dCIpJyIgICAgIC5ORVMuICIiIHRoZW4gZGVsZXRlL25vY29uZmlybS9ub2xvZyAqLm91dC4qCisJLUAgaWYgIicnRiRTRUFSQ0goInRlc3QubG9nIiknIiAgLk5FUy4gIiIgdGhlbiBkZWxldGUvbm9jb25maXJtL25vbG9nIHRlc3QubG9nLioKKwktQCBpZiAiJydGJFNFQVJDSCgiWGRvdGVzdC4qIiknIiAuTkVTLiAiIiB0aGVuIGRlbGV0ZS9ub2NvbmZpcm0vbm9sb2cgWGRvdGVzdC4qLioKKwktQCBpZiAiJydGJFNFQVJDSCgiKi4qX3N3KiIpJyIgICAuTkVTLiAiIiB0aGVuIGRlbGV0ZS9ub2NvbmZpcm0vbm9sb2cgKi4qX3N3Ki4qCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9NYWtlZmlsZSBiL3NyYy90ZXN0ZGlyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZDk3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci9NYWtlZmlsZQpAQCAtMCwwICsxLDU4IEBACisjCisjIE1ha2VmaWxlIHRvIHJ1biBhbCB0ZXN0cyBmb3IgVmltCisjCisKK1ZJTVBST0cgPSAuLi92aW0KKworU0NSSVBUUyA9IHRlc3QxLm91dCB0ZXN0Mi5vdXQgdGVzdDMub3V0IHRlc3Q0Lm91dCB0ZXN0NS5vdXQgdGVzdDYub3V0IFwKKwkJdGVzdDcub3V0IHRlc3Q4Lm91dCB0ZXN0OS5vdXQgdGVzdDEwLm91dCB0ZXN0MTEub3V0IFwKKwkJdGVzdDEyLm91dCAgdGVzdDEzLm91dCB0ZXN0MTQub3V0IHRlc3QxNS5vdXQgdGVzdDE3Lm91dCBcCisJCXRlc3QxOC5vdXQgdGVzdDE5Lm91dCB0ZXN0MjAub3V0IHRlc3QyMS5vdXQgdGVzdDIyLm91dCBcCisJCXRlc3QyMy5vdXQgdGVzdDI0Lm91dCB0ZXN0MjUub3V0IHRlc3QyNi5vdXQgdGVzdDI3Lm91dCBcCisJCXRlc3QyOC5vdXQgdGVzdDI5Lm91dCB0ZXN0MzAub3V0IHRlc3QzMS5vdXQgdGVzdDMyLm91dCBcCisJCXRlc3QzMy5vdXQgdGVzdDM0Lm91dCB0ZXN0MzUub3V0IHRlc3QzNi5vdXQgdGVzdDM3Lm91dCBcCisJCXRlc3QzOC5vdXQgdGVzdDM5Lm91dCB0ZXN0NDAub3V0IHRlc3Q0MS5vdXQgdGVzdDQyLm91dCBcCisJCXRlc3Q0My5vdXQgdGVzdDQ0Lm91dCB0ZXN0NDUub3V0IHRlc3Q0Ni5vdXQgdGVzdDQ3Lm91dCBcCisJCXRlc3Q0OC5vdXQgdGVzdDQ5Lm91dCB0ZXN0NTEub3V0IHRlc3Q1Mi5vdXQKKworU0NSSVBUU19HVUkgPSB0ZXN0MTYub3V0CisKKy5TVUZGSVhFUzogLmluIC5vdXQKKworbm9uZ3VpOglub2xvZyAkKFNDUklQVFMpCisJQGVjaG8KKwlAY2F0IHRlc3QubG9nCisJQGVjaG8gQUxMIERPTkUKKworZ3VpOglub2xvZyAkKFNDUklQVFMpICQoU0NSSVBUU19HVUkpCisJQGVjaG8KKwlAY2F0IHRlc3QubG9nCisJQGVjaG8gQUxMIERPTkUKKworJChTQ1JJUFRTKSAkKFNDUklQVFNfR1VJKTogJChWSU1QUk9HKQorCitjbGVhbjoKKwktcm0gLXJmICoub3V0ICoucmVqICoub3JpZyB0ZXN0LmxvZyB0aW55LnZpbSBzbWFsbC52aW0gbWJ5dGUudmltIHRlc3Qub2sgWCogdmltaW5mbworCit0ZXN0MS5vdXQ6IHRlc3QxLmluCisJLXJtIC1mICQqLmZhaWxlZCB0aW55LnZpbSBzbWFsbC52aW0gbWJ5dGUudmltIHRlc3Qub2sgWCogdmltaW5mbworCSQoVklNUFJPRykgLXUgdW5peC52aW0gLVUgTk9ORSAtLW5vcGx1Z2luIC1zIGRvdGVzdC5pbiAkKi5pbgorCUAvYmluL3NoIC1jICJpZiBkaWZmIHRlc3Qub3V0ICQqLm9rOyBcCisJCXRoZW4gbXYgLWYgdGVzdC5vdXQgJCoub3V0OyBcCisJCWVsc2UgZWNobzsgXAorCQllY2hvIHRlc3QxIEZBSUxFRCAtIFNvbWV0aGluZyBiYXNpYyBpcyB3cm9uZzsgXAorCQllY2hvOyBleGl0IDE7IGZpIgorCS1ybSAtcmYgWCogdmltaW5mbworCisuaW4ub3V0OgorCS1ybSAtZiAkKi5mYWlsZWQgdGVzdC5vayBYKgorCWNwICQqLm9rIHRlc3Qub2sKKwkkKFZJTVBST0cpIC11IHVuaXgudmltIC1VIE5PTkUgLS1ub3BsdWdpbiAtcyBkb3Rlc3QuaW4gJCouaW4KKwlAL2Jpbi9zaCAtYyAiaWYgZGlmZiB0ZXN0Lm91dCAkKi5vazsgXAorCQl0aGVuIG12IC1mIHRlc3Qub3V0ICQqLm91dDsgXAorCQllbHNlIGVjaG8gJCogRkFJTEVEID4+dGVzdC5sb2c7IG12IC1mIHRlc3Qub3V0ICQqLmZhaWxlZDsgXAorCQlmaSIKKwktcm0gLXJmIFgqIHRlc3Qub2sgdmltaW5mbworCitub2xvZzoKKwktZWNobyBUZXN0IHJlc3VsdHM6ID50ZXN0LmxvZwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvYW1pZ2EudmltIGIvc3JjL3Rlc3RkaXIvYW1pZ2EudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2E0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci9hbWlnYS52aW0KQEAgLTAsMCArMSw0IEBACisiIFNldHRpbmdzIGZvciB0ZXN0IHNjcmlwdCBleGVjdXRpb24KK3NldCBzaGVsbD1jc2gKK21hcCEgL3RtcCB0OgorY21hcCAhcm0gIURlbGV0ZSBhbGwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL2Rvcy52aW0gYi9zcmMvdGVzdGRpci9kb3MudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NzY0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci9kb3MudmltCkBAIC0wLDAgKzEsNyBAQAorIiBTZXR0aW5ncyBmb3IgdGVzdCBzY3JpcHQgZXhlY3V0aW9uCisiIEFsd2F5cyB1c2UgIkNPTU1BTkQuQ09NIiwgZG9uJ3QgdXNlIHRoZSB2YWx1ZSBvZiAiJFNIRUxMIi4KK3NldCBzaGVsbD1jOlxDT01NQU5ELkNPTSBzaGVsbHF1b3RlPSBzaGVsbHhxdW90ZT0gc2hlbGxjbWRmbGFnPS9jIHNoZWxscmVkaXI9PgorIiBUaGlzIGlzIHVzZWQgb25seSB3aGVuIHRoZSArZXZhbCBmZWF0dXJlIGlzIGF2YWlsYWJsZS4KK2lmIGV4ZWN1dGFibGUoImNtZC5leGUiKQorICAgc2V0IHNoZWxsPWNtZC5leGUKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9kb3Rlc3QuaW4gYi9zcmMvdGVzdGRpci9kb3Rlc3QuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhMGUxYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL2RvdGVzdC5pbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9tYWluLmFhcCBiL3NyYy90ZXN0ZGlyL21haW4uYWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOTNiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci9tYWluLmFhcApAQCAtMCwwICsxLDU4IEBACisjCisjIE1ha2VmaWxlIHRvIHJ1biBhbCB0ZXN0cyBmb3IgVmltCisjCisKK1ZpbVByb2cgPz0gLi4vdmltCisKK1NjcmlwdHMgPSB0ZXN0MS5vdXQgdGVzdDIub3V0IHRlc3QzLm91dCB0ZXN0NC5vdXQgdGVzdDUub3V0IHRlc3Q2Lm91dAorCQl0ZXN0Ny5vdXQgdGVzdDgub3V0IHRlc3Q5Lm91dCB0ZXN0MTAub3V0IHRlc3QxMS5vdXQKKwkJdGVzdDEyLm91dCAgdGVzdDEzLm91dCB0ZXN0MTQub3V0IHRlc3QxNS5vdXQgdGVzdDE3Lm91dAorCQl0ZXN0MTgub3V0IHRlc3QxOS5vdXQgdGVzdDIwLm91dCB0ZXN0MjEub3V0IHRlc3QyMi5vdXQKKwkJdGVzdDIzLm91dCB0ZXN0MjQub3V0IHRlc3QyNS5vdXQgdGVzdDI2Lm91dCB0ZXN0Mjcub3V0CisJCXRlc3QyOC5vdXQgdGVzdDI5Lm91dCB0ZXN0MzAub3V0IHRlc3QzMS5vdXQgdGVzdDMyLm91dAorCQl0ZXN0MzMub3V0IHRlc3QzNC5vdXQgdGVzdDM1Lm91dCB0ZXN0MzYub3V0IHRlc3QzNy5vdXQKKwkJdGVzdDM4Lm91dCB0ZXN0Mzkub3V0IHRlc3Q0MC5vdXQgdGVzdDQxLm91dCB0ZXN0NDIub3V0CisJCXRlc3Q0My5vdXQgdGVzdDQ0Lm91dCB0ZXN0NDUub3V0IHRlc3Q0Ni5vdXQgdGVzdDQ3Lm91dAorCQl0ZXN0NDgub3V0IHRlc3Q0OS5vdXQKKworU2NyaXB0c0dVSSA9IHRlc3QxNi5vdXQKKworIyBCdWlsZCAibm9uZ3VpIiB3aGVuIG5vIHRhcmdldCB3YXMgc3BlY2lmaWVkLgorbm9uZ3VpOgluZXdsb2cgJFNjcmlwdHMKKwk6cHJpbnQKKwk6Y2F0IHRlc3QubG9nCisJOnByaW50IEFMTCBET05FCisKKyMgQnVpbGQgIm5ndWkiIHdoZW4gc3BlY2lmaWVkLgorZ3VpOgluZXdsb2cgJFNjcmlwdHMgJFNjcmlwdHNHVUkKKwk6cHJpbnQKKwk6Y2F0IHRlc3QubG9nCisJOnByaW50IEFMTCBET05FCisKKyRTY3JpcHRzICRTY3JpcHRzR1VJOiAkVmltUHJvZworCitjbGVhbjoKKwk6ZGVsIHtyfXtmb3JjZX0gKi5vdXQgdGVzdC5sb2cgdGlueS52aW0gc21hbGwudmltIG1ieXRlLnZpbSB0ZXN0Lm9rIFgqCisKKyMgdGVzdDEgaXMgc3BlY2lhbCwgaXQgY2hlY2tzIGZvciBmZWF0dXJlcwordGVzdDEub3V0OiB0ZXN0MS5pbgorCTpkZWwge2ZvcmNlfSB0ZXN0MS5mYWlsZWQgdGlueS52aW0gc21hbGwudmltIG1ieXRlLnZpbQorCTpzeXMge2l9ICRWaW1Qcm9nIC11IHVuaXgudmltIC1VIE5PTkUgLS1ub3BsdWdpbiAtcyBkb3Rlc3QuaW4gdGVzdDEuaW4KKwlAaWYgb3Muc3lzdGVtKCJkaWZmIHRlc3Qub3V0IHRlc3QxLm9rIikgIT0gMDoKKwkJOmVycm9yIHRlc3QxIEZBSUxFRCAtIFNvbWV0aGluZyBiYXNpYyBpcyB3cm9uZworCTptb3ZlIHtmb3JjZX0gdGVzdC5vdXQgdGVzdDEub3V0CisJOmRlbCB7cn17Zm9yY2V9IFgqCisKKzpydWxlICUub3V0IDogJS5pbgorCTpkZWwge2ZvcmNlfSAkKG1hdGNoKS5mYWlsZWQgdGVzdC5vaworCTpjb3B5ICQobWF0Y2gpLm9rIHRlc3Qub2sKKwk6c3lzIHtpfSAkVmltUHJvZyAtdSB1bml4LnZpbSAtVSBOT05FIC0tbm9wbHVnaW4gLXMgZG90ZXN0LmluICQobWF0Y2gpLmluCisJQGlmIG9zLnN5c3RlbSgiZGlmZiB0ZXN0Lm91dCAiICsgbWF0Y2ggKyAiLm9rIikgIT0gMDoKKwkJOnByaW50ICRtYXRjaCBGQUlMRUQgPj50ZXN0LmxvZworCQk6bW92ZSB7Zm9yY2V9IHRlc3Qub3V0ICQobWF0Y2gpLmZhaWxlZAorCUBlbHNlOgorCQk6bW92ZSB7Zm9yY2V9IHRlc3Qub3V0ICQobWF0Y2gpLm91dAorCTpkZWwge3J9e2ZvcmNlfSBYKiB0ZXN0Lm9rCisKK25ld2xvZzoKKwk6cHJpbnQgVGVzdCByZXN1bHRzOiA+ISB0ZXN0LmxvZwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvb3MyLnZpbSBiL3NyYy90ZXN0ZGlyL29zMi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3YmE1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL29zMi52aW0KQEAgLTAsMCArMSwzIEBACisiIFNldHRpbmdzIGZvciB0ZXN0IHNjcmlwdCBleGVjdXRpb24KKyIgQWx3YXlzIHVzZSAiQ01ELkVYRSIsIGRvbid0IHVzZSB0aGUgdmFsdWUgb2YgIiRTSEVMTCIuCitzZXQgc2hlbGw9Q01ELkVYRSBzaGVsbHF1b3RlPSBzaGVsbHhxdW90ZT0gc2hlbGxjbWRmbGFnPS9jIHNoZWxscmVkaXI9PgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDEuaW4gYi9zcmMvdGVzdGRpci90ZXN0MS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDFiZGRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDEuaW4KQEAgLTAsMCArMSw0MCBAQAorCitGaXJzdCBhIHNpbXBsZSB0ZXN0IHRvIGNoZWNrIGlmIHRoZSB0ZXN0IHNjcmlwdCB3b3Jrcy4KKworSWYgVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgK2V2YWwgZmVhdHVyZSwgdGhlIHNtYWxsLnZpbSBzY3JpcHQgd2lsbCBiZQorc2V0IHRvIGNvcHkgdGhlIHRlc3Qub2sgZmlsZSB0byB0ZXN0Lm91dCwgc28gdGhhdCBpdCBsb29rcyBsaWtlIHRoZSB0ZXN0CitzdWNjZWVkZWQuICBPdGhlcndpc2UgYW4gZW1wdHkgc21hbGwudmltIGlzIHdyaXR0ZW4uICBzbWFsbC52aW0gaXMgc291cmNlZCBieQordGVzdHMgdGhhdCByZXF1aXJlIHRoZSArZXZhbCBmZWF0dXJlIG9yIG90aGVyIGZlYXR1cmVzIHRoYXQgYXJlIG1pc3NpbmcgaW4gdGhlCitzbWFsbCB2ZXJzaW9uLgorCitJZiBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSArd2luZG93cyBmZWF0dXJlLCB0aGUgdGlueS52aW0gc2NyaXB0IHdpbGwgYmUKK3NldCBsaWtlIHNtYWxsLnZpbSBhYm92ZS4gIHRpbnkudmltIGlzIHNvdXJjZWQgYnkgdGVzdHMgdGhhdCByZXF1aXJlIHRoZQorK3dpbmRvd3MgZmVhdHVyZSBvciBvdGhlciBmZWF0dXJlcyB0aGF0IGFyZSBtaXNzaW5nIGluIHRoZSB0aW55IHZlcnNpb24uCisKK0lmIFZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlICttdWx0aV9ieXRlIGZlYXR1cmUsIHRoZSBtYnl0ZS52aW0gc2NyaXB0IHdpbGwgYmUgc2V0IGxpa2Ugc21hbGwudmltIGFib3ZlLiAgbWJ5dGUudmltIGlzIHNvdXJjZWQgYnkgdGVzdHMgdGhhdCByZXF1aXJlIHRoZQorK211bHRpX2J5dGUgZmVhdHVyZS4KKworU1RBUlRURVNUCis6IiBXcml0ZSBhIHNpbmdsZSBsaW5lIHRvIHRlc3Qub3V0IHRvIGNoZWNrIGlmIHRlc3Rpbmcgd29ya3MgYXQgYWxsLgorOiVkCithdGhpcyBpcyBhIHRlc3QbOnchIHRlc3Qub3V0Cis6IiBDcmVhdGUgc21hbGwudmltIGFuZCB0aW55LnZpbSBlbXB0eSwgY3JlYXRlIG1ieXRlLnZpbSB0byBza2lwIHRoZSB0ZXN0LgorMEQ6dyEgc21hbGwudmltCis6dyEgdGlueS52aW0KK2FlISB0ZXN0Lm9rCit3ISB0ZXN0Lm91dAorcWEhCisbOnchIG1ieXRlLnZpbQorOiIgSWYgK211bHRpX2J5dGUgZmVhdHVyZSBzdXBwb3J0ZWQsIG1ha2UgbWJ5dGUudmltIGVtcHR5LgorOmlmIGhhcygibXVsdGlfYnl0ZSIpIHwgc3AgYW5vdGhlciB8IHchIG1ieXRlLnZpbSB8IHEgfCBlbmRpZgorOiIgSWYgK2V2YWwgZmVhdHVyZSBzdXBwb3J0ZWQgcXVpdCBoZXJlLCBsZWF2aW5nIHRpbnkudmltIGFuZCBzbWFsbC52aW0gZW1wdHkuCis6IiBPdGhlcndpc2Ugd3JpdGUgc21hbGwudmltIHRvIHNraXAgdGhlIHRlc3QuCis6aWYgMSB8IHEhIHwgZW5kaWYKKzp3ISBzbWFsbC52aW0KKzoiIElmICt3aW5kb3dzIGZlYXR1cmUgbm90IHN1cHBvcnRlZCA6c3Agd2lsbCBmYWlsIGFuZCB0aW55LnZpbSB3aWxsIGJlCis6IiB3cml0dGVuIHRvIHNraXAgdGhlIHRlc3QuCis6c3AgYW5vdGhlcgorOndxISB0aW55LnZpbQorOnFhIQorRU5EVEVTVAorCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MS5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QxLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmZjYjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MS5vawpAQCAtMCwwICsxIEBACit0aGlzIGlzIGEgdGVzdApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDEwLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDEwLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNWM0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTAuaW4KQEAgLTAsMCArMSw1NyBAQAorVGVzdCBmb3IgJ2Vycm9yZm9ybWF0Jy4KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6L3N0YXJ0IG9mIGVycm9yZmlsZS8sL2VuZCBvZiBlcnJvcmZpbGUvdyEgWGVycm9yZmlsZQorOi9zdGFydCBvZiB0ZXN0ZmlsZS8sL2VuZCBvZiB0ZXN0ZmlsZS93ISBYdGVzdGZpbGUKKzpjZiBYZXJyb3JmaWxlCityQQorOmNuCityQgorOmNuCityQworOmNuCityRAorOmNuCityRQorOnchIHRlc3Qub3V0ICAgICAgICAgICAgICIgV3JpdGUgY29udGVudHMgb2YgdGhpcyBmaWxlCis6cWEhCitFTkRURVNUCisKK3N0YXJ0IG9mIGVycm9yZmlsZQorIlh0ZXN0ZmlsZSIsIGxpbmUgNC4xMjogMTUwNi0wNDUgKFMpIFVuZGVjbGFyZWQgaWRlbnRpZmllciBmZF9zZXQuCisiWHRlc3RmaWxlIiwgbGluZSA3IGNvbCAxOTsgdGhpcyBpcyBhbiBlcnJvcgorZ2NjIC1jIC1ESEFWRV9DT05GSXNpbmctcHJvdG90eXBlcyAtSS91c3IvWDExUjYvaW5jbHVkZSAgdmVyc2lvbi5jCitYdGVzdGZpbGU6MTM6IHBhcnNlIGVycm9yIGJlZm9yZSBgYXNkJworbWFrZTogKioqIFt2aW1dIEVycm9yIDEKK2luIGZpbGUgIlh0ZXN0ZmlsZSIgbGluZW5yIDE2OiB0aGVyZSBpcyBhbiBlcnJvcgorCisyIHJldHVybmVkCisiWHRlc3RmaWxlIiwgbGluZW5yIDE5OiB5ZXQgYW5vdGhlciBwcm9ibGVtCisKK0RvZXMgYW55b25lIGtub3cgd2hhdCBpcyB0aGUgcHJvYmxlbSBhbmQgaG93IHRvIGNvcnJlY3Rpb24gaXQ/CitlbmQgb2YgZXJyb3JmaWxlCisKK3N0YXJ0IG9mIHRlc3RmaWxlCitsaW5lIDIgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAzICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNCAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDUgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA2ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNyAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDggIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA5ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDExIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxMiB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTMgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE0IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTYgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE3IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxOCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTkgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDIwIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAyMSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMjIgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitlbmQgb2YgdGVzdGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxMC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QxMC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzg2ODg5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDEwLm9rCkBAIC0wLDAgKzEsMjMgQEAKK3N0YXJ0IG9mIHRlc3RmaWxlCitsaW5lIDIgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAzICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNCAgeHh4QXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDUgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA2ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNyAgeHh4eHh4eHh4eEJ4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDggIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA5ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDExIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxMiB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK0NpbmUgMTMgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE0IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK0RpbmUgMTYgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE3IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxOCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK0VpbmUgMTkgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDIwIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAyMSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMjIgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitlbmQgb2YgdGVzdGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxMGEuaW4gYi9zcmMvdGVzdGRpci90ZXN0MTBhLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTg2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTBhLmluCkBAIC0wLDAgKzEsNzMgQEAKK1Rlc3QgZm9yICdlcnJvcmZvcm1hdCcuCisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorOi9zdGFydCBvZiBlcnJvcmZpbGUvLC9lbmQgb2YgZXJyb3JmaWxlL3chIFhlcnJvcmZpbGUKKzovc3RhcnQgb2YgdGVzdGZpbGUvLC9lbmQgb2YgdGVzdGZpbGUvdyEgWHRlc3RmaWxlCis6Y2YgWGVycm9yZmlsZQorckEKKzpjbgorckIKKzpjbgorckMKKzpjbgorckQKKzpjbgorckUKKzp3ISB0ZXN0Lm91dCAgICAgICAgICAgICAiIFdyaXRlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZQorOnFhIQorRU5EVEVTVAorCitzdGFydCBvZiBlcnJvcmZpbGUKKworICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJWQgXG4iLCAobnVtYmVyL290aGVyKSUxMCApOworLi4uLi4uLi4uLi4uLi4uLi4uXgorJUNDLUUtTk9TRU1JLCBNaXNzaW5nICI7Ii4KK2F0IGxpbmUgbnVtYmVyIDQgaW4gZmlsZSBTWVMkRElTSzpYVEVTVEZJTEUKKworICAgICAgICAgICAgIG90aGVyPTEwMDAwMDAwOworLi4uLi4uLi4uLi4uLl4KKyVDQy1FLVVOREVDTEFSRUQsIEluIHRoaXMgc3RhdGVtZW50LCAib3N6dCIgaXMgbm90IGRlY2xhcmVkLgorYXQgbGluZSBudW1iZXIgNyBpbiBmaWxlIFNZUyRESVNLOlhURVNURklMRQorCisgICAgICAgICAgICAgZm9yIChpID0gMDsgaTw3IDsgaSsrICl7CisuLi4uLi4uLi4uLi4uLi4uLi5eCislQ0MtRS1VTkRFQ0xBUkVELCBJbiB0aGlzIHN0YXRlbWVudCwgImkiIGlzIG5vdCBkZWNsYXJlZC4KK2F0IGxpbmUgbnVtYmVyIDE2IGluIGZpbGUgU1lTJERJU0s6WFRFU1RGSUxFCisKK3NvbWUgb3RoZXIgZXJyb3Igc29tZXdoZXJlIGhlcmUuCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5eCislQ0MtVy1XQVJSSU5HLCBTb3JyeSwgYnV0IG5vIGV4cGFsbmF0aW9uIGZvciBzdWNoIGFuIHdhcnJpbmcuCithdCBsaW5lIG51bWJlciAxOSBpbiBmaWxlIFNZUyRESVNLOlhURVNURklMRQorCithbmQgZmluYWxseSBzb21lIG90aGVyIGVycm9yIGV4YWN0bHkgaGVyZS4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5eCislQ0MtSS1JTkZPUk1BVElPTkFMLCBJdCBzaG91bGQgYmUgc29tZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuCithdCBsaW5lIG51bWJlciAyMCBpbiBmaWxlIFNZUyRESVNLOlhURVNURklMRQorCitEb2VzIGFueW9uZSBrbm93IHdoYXQgaXMgdGhlIHByb2JsZW0gYW5kIGhvdyB0byBjb3JyZWN0ID8/ICA6KQorZW5kIG9mIGVycm9yZmlsZQorCitzdGFydCBvZiB0ZXN0ZmlsZQorMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcKK2xpbmUgMyAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDQgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA1ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNiAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDcgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA4ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgOSAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDEwIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxMSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTIgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDEzIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTUgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE2IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNyB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTggeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE5IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAyMCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMjEgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDIyIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorZW5kIG9mIHRlc3RmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTBhLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDEwYS5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU3OGM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDEwYS5vawpAQCAtMCwwICsxLDIzIEBACitzdGFydCBvZiB0ZXN0ZmlsZQorMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcKK2xpbmUgMyAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDQgIHh4eHh4eHh4eHhBeHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA1ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNiAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDcgIHh4eHh4Qnh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA4ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgOSAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDEwIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxMSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTIgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDEzIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTUgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE2IHh4eHh4eHh4eHhDeHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNyB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTggeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE5IHh4eHh4eHh4eHh4eHh4eHh4eHhEeHh4eHh4eHh4eAorbGluZSAyMCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eEUKK2xpbmUgMjEgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDIyIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorZW5kIG9mIHRlc3RmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTEuaW4gYi9zcmMvdGVzdGRpci90ZXN0MTEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyOTZmZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxMS5pbgpAQCAtMCwwICsxLDc3IEBACitUZXN0cyBmb3IgYXV0b2NvbW1hbmRzOgorLSBGaWxlV3JpdGVQcmUJCXdyaXRpbmcgYSBjb21wcmVzc2VkIGZpbGUKKy0gRmlsZVJlYWRQb3N0CQlyZWFkaW5nIGEgY29tcHJlc3NlZCBmaWxlCistIEJ1Zk5ld0ZpbGUJCXJlYWRpbmcgYSBmaWxlIHRlbXBsYXRlCistIEJ1ZlJlYWRQcmUJCWRlY29tcHJlc3NpbmcgdGhlIGZpbGUgdG8gYmUgcmVhZAorLSBGaWx0ZXJSZWFkUHJlCQlzdWJzdGl0dXRpbmcgY2hhcmFjdGVycyBpbiB0aGUgdGVtcCBmaWxlCistIEZpbHRlclJlYWRQb3N0CXN1YnN0aXR1dGluZyBjaGFyYWN0ZXJzIGFmdGVyIGZpbHRlcmluZworLSBGaWxlUmVhZFByZQkJc2V0IG9wdGlvbnMgZm9yIGRlY29tcHJlc3Npb24KKy0gRmlsZVJlYWRQb3N0CQlkZWNvbXByZXNzIHRoZSBmaWxlCisKK05vdGU6IFRoaXMgdGVzdCB3aWxsIGZhaWwgaWYgImd6aXAiIGlzIG5vdCBhdmFpbGFibGUuCiskR1pJUCBpcyBtYWRlIGVtcHR5LCAiLXYiIHdvdWxkIGNhdXNlIHRyb3VibGUuCitVc2UgYSBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIHRvIGF2b2lkIGEgcHJvbXB0IGZvciAiWHRlc3RmaWxlLmd6IiBiZWluZworbW9kaWZpZWQgb3V0c2lkZSBvZiBWaW0gKG5vdGljZWQgb24gU29sYXJpcykuCisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorOmxldCAkR1pJUCA9ICIiCis6YXUgRmlsZUNoYW5nZWRTaGVsbCAqIGVjaG8gImNhdWdodCBGaWxlQ2hhbmdlZFNoZWxsIgorOnNldCBiaW4KKzphdSBGaWxlV3JpdGVQcmUgICAgKi5neiAgICdbLCddIWd6aXAKKzphdSBGaWxlV3JpdGVQb3N0ICAgKi5neiAgIHVuZG8KKzovc3RhcnQgb2YgdGVzdGZpbGUvLC9lbmQgb2YgdGVzdGZpbGUvdyEgWHRlc3RmaWxlLmd6Cis6YXUgRmlsZVJlYWRQb3N0ICAgICouZ3ogICAnWywnXSFnemlwIC1kCis6JHIgWHRlc3RmaWxlLmd6ICAgICAgICAgICAgICAgICIgUmVhZCBhbmQgZGVjb21wcmVzcyB0aGUgdGVzdGZpbGUKKzo/c3RhcnRzdGFydD8sJHchIHRlc3Qub3V0ICAgICAgIiBXcml0ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUKKzphdSBCdWZOZXdGaWxlICAgICAgKi5jICAgIHJlYWQgWHRlc3QuYworZ2cvXmVuZCBvZiB0ZXN0ZmlsZQorOi9zdGFydCBvZiB0ZXN0LmMvKzEsL2VuZCBvZiB0ZXN0LmMvLTF3ISBYdGVzdC5jCis6ZSEgZm9vLmMgICAgICAgICAgICAgICAgICAgICAgICIgV2lsbCBsb2FkIFh0ZXN0LmMKKzphdSBGaWxlQXBwZW5kUHJlICAgKi5vdXQgICdbLCddcy9uZXcvTkVXLworOmF1IEZpbGVBcHBlbmRQb3N0ICAqLm91dCAgIWNhdCBYdGVzdC5jID4+dGVzdC5vdXQKKzp3Pj50ZXN0Lm91dCAgICAgICAgICAgICAgICAgICAgIiBBcHBlbmQgaXQgdG8gdGhlIG91dHB1dCBmaWxlCis6YXUhIEZpbGVBcHBlbmRQcmUKKzoiIHNldHVwIGF1dG9jb21tYW5kcyB0byBkZWNvbXByZXNzIGJlZm9yZSByZWFkaW5nIGFuZCByZS1jb21wcmVzcyBhZnRlcndhcmRzCis6YXUgQnVmUmVhZFByZSAgICAgICouZ3ogICAhZ3ppcCAtZCA8YWZpbGU+Cis6YXUgQnVmUmVhZFByZSAgICAgICouZ3ogICBjYWxsIHJlbmFtZShleHBhbmQoIjxhZmlsZT46ciIpLCBleHBhbmQoIjxhZmlsZT4iKSkKKzphdSBCdWZSZWFkUG9zdCAgICAgKi5neiAgIGNhbGwgcmVuYW1lKGV4cGFuZCgiPGFmaWxlPiIpLCBleHBhbmQoIjxhZmlsZT46ciIpKQorOmF1IEJ1ZlJlYWRQb3N0ICAgICAqLmd6ICAgIWd6aXAgPGFmaWxlPjpyCis6ZSEgWHRlc3RmaWxlLmd6ICAgICAgICAgICAgICAgICIgRWRpdCBjb21wcmVzc2VkIGZpbGUKKzp3Pj50ZXN0Lm91dCAgICAgICAgICAgICAgICAgICAgIiBBcHBlbmQgaXQgdG8gdGhlIG91dHB1dCBmaWxlCis6YXUgRmlsdGVyUmVhZFByZSAgICoub3V0ICBjYWxsIHJlbmFtZShleHBhbmQoIjxhZmlsZT4iKSwgZXhwYW5kKCI8YWZpbGU+IikuIi50IikKKzphdSBGaWx0ZXJSZWFkUHJlICAgKi5vdXQgICFzZWQgcy9lL0UvIDxhZmlsZT4udCA+PGFmaWxlPgorOmF1IEZpbHRlclJlYWRQcmUgICAqLm91dCAgIXJtIDxhZmlsZT4udAorOmF1IEZpbHRlclJlYWRQb3N0ICAqLm91dCAgJ1ssJ11zL3gvWC9nCis6ZSEgdGVzdC5vdXQgICAgICAgICAgICAgICAgICAgICIgRWRpdCB0aGUgb3V0cHV0IGZpbGUKKzoyMywkIWNhdAorOmF1ISBGaWxlUmVhZFByZSAgICAqLmd6ICAgIWd6aXAgLWQgPGFmaWxlPgorOmF1ICBGaWxlUmVhZFByZSAgICAqLmd6ICAgY2FsbCByZW5hbWUoZXhwYW5kKCI8YWZpbGU+OnIiKSwgZXhwYW5kKCI8YWZpbGU+IikpCis6YXUhIEZpbGVSZWFkUG9zdCAgICouZ3ogICAnWywnXXMvbC9MLworOiRyIFh0ZXN0ZmlsZS5neiAgICAgICAgICAgICAiIFJlYWQgY29tcHJlc3NlZCBmaWxlCis6dyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgd3JpdGUgaXQsIGFmdGVyIGZpbHRlcmluZworOmF1ISAgICAgICAgICAgICAiIHJlbW92ZSBhbGwgYXV0b2NvbW1hbmRzCis6ZSAgICAgICAgICAgICAgICIgRWRpdCB0ZXN0Lm91dCBhZ2FpbgorOnNldCBub2JpbiBmZiYgICAiIHVzZSB0aGUgZGVmYXVsdCBmaWxlZm9ybWF0IGZvciB3cml0aW5nCis6dworOnFhIQorRU5EVEVTVAorCitzdGFydHN0YXJ0CitzdGFydCBvZiB0ZXN0ZmlsZQorbGluZSAyCUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitsaW5lIDMJeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDQJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2xpbmUgNQl4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNglBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorbGluZSA3CXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA4CUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitsaW5lIDkJeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDEwIEFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitlbmQgb2YgdGVzdGZpbGUKKworc3RhcnQgb2YgdGVzdC5jCisvKgorICogSGVyZSBpcyBhIG5ldyAuYyBmaWxlCisgKi8KK2VuZCBvZiB0ZXN0LmMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxMS5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QxMS5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjhjNWNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDExLm9rCkBAIC0wLDAgKzEsNjEgQEAKK3N0YXJ0c3RhcnQKK3N0YXJ0IG9mIHRlc3RmaWxlCitsaW5lIDIJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2xpbmUgMwl4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNAlBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorbGluZSA1CXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA2CUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitsaW5lIDcJeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDgJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2xpbmUgOQl4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTAgQWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2VuZCBvZiB0ZXN0ZmlsZQorCitzdGFydCBvZiB0ZXN0LmMKKy8qCisgKiBIZXJlIGlzIGEgbmV3IC5jIGZpbGUKKyAqLworZW5kIG9mIHRlc3QuYworc3RhcnQgb2YgdGVzdGZpbGUKK2xpbmUgMglBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorbGluZSAzCXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA0CUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitsaW5FIDUJWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCitsaW5FIDYJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dndYeXoKK2xpbkUgNwlYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKK2xpbkUgOAlBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d1h5egorbGluRSA5CVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorbGluRSAxMCBBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d1h5egorRW5kIG9mIHRlc3RmaWxlCisKKy8qCisgKiBIRXJlIGlzIGEgTkVXIC5jIGZpbGUKKyAqLworLyoKKyAqIEhFcmUgaXMgYSBuZXcgLmMgZmlsZQorICovCitzdGFydCBvZiB0RXN0ZmlsZQorbGluRSAyCUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3WHl6CitsaW5FIDMJWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCitsaW5FIDQJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dndYeXoKK2xpbkUgNQlYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKK2xpbkUgNglBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d1h5egorbGluRSA3CVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorbGluRSA4CUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3WHl6CitsaW5FIDkJWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCitsaW5FIDEwIEFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3WHl6CitFbmQgb2YgdGVzdGZpbGUKKy8qCisgKiBIRXJlIGlzIGEgbmV3IC5jIGZpbGUKKyAqLworc3RhcnQgb2YgdGVzdGZpTGUKK0xpbmUgMglBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorTGluZSAzCXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorTGluZSA0CUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitMaW5lIDUJeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitMaW5lIDYJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK0xpbmUgNwl4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK0xpbmUgOAlBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorTGluZSA5CXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorTGluZSAxMCBBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorZW5kIG9mIHRlc3RmaUxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTIuaW4gYi9zcmMvdGVzdGRpci90ZXN0MTIuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlOWM0NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxMi5pbgpAQCAtMCwwICsxLDUyIEBACitUZXN0cyBmb3IgJ2RpcmVjdG9yeScgb3B0aW9uLgorLSAiLiIsIGluIHNhbWUgZGlyIGFzIGZpbGUKKy0gIi4vZGlyIiwgaW4gZGlyZWN0b3J5IHJlbGF0aXZlIHRvIGZpbGUKKy0gImRpciIsIGluIGRpcmVjdG9yeSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzpzZXQgbm9jb21wYXRpYmxlIHZpbWluZm8rPW52aW1pbmZvCis6c2V0IGRpcj0uLH4KKzovc3RhcnQgb2YgdGVzdGZpbGUvLC9lbmQgb2YgdGVzdGZpbGUvdyEgWHRlc3QxCis6IiBkbyBhbiBscyBvZiB0aGUgY3VycmVudCBkaXIgdG8gZmluZCB0aGUgc3dhcCBmaWxlIChzaG91bGQgbm90IGJlIHRoZXJlKQorOmlmIGhhcygidW5peCIpCis6ICAhbHMgLlgqLnN3cCA+dGVzdC5vdXQKKzplbHNlCis6ICByICFscyBYKi5zd3AgPnRlc3Qub3V0Cis6ZW5kaWYKKzohZWNobyBmaXJzdCBsaW5lID4+dGVzdC5vdXQKKzplIFh0ZXN0MQorOmlmIGhhcygidW5peCIpCis6IiBEbyBhbiBscyBvZiB0aGUgY3VycmVudCBkaXIgdG8gZmluZCB0aGUgc3dhcCBmaWxlLCByZW1vdmUgdGhlIGxlYWRpbmcgZG90Cis6IiB0byBtYWtlIHRoZSByZXN1bHQgdGhlIHNhbWUgZm9yIGFsbCBzeXN0ZW1zLgorOiAgciFscyAuWCouc3dwCis6ICBzL1wuKlgvWC8KKzogIC53ID4+dGVzdC5vdXQKKzogIHVuZG8KKzplbHNlCis6ICAhbHMgWCouc3dwID4+dGVzdC5vdXQKKzplbmRpZgorOiFlY2hvIHVuZGVyIFh0ZXN0MS5zd3AgPj50ZXN0Lm91dAorOiFta2RpciBYdGVzdDIKKzpzZXQgZGlyPS4vWHRlc3QyLC4sfgorOmUgWHRlc3QxCis6IWxzIFgqLnN3cCA+PnRlc3Qub3V0Cis6IWVjaG8gdW5kZXIgdW5kZXIgPj50ZXN0Lm91dAorOiFscyBYdGVzdDIgPj50ZXN0Lm91dAorOiFlY2hvIHVuZGVyIFh0ZXN0MS5zd3AgPj50ZXN0Lm91dAorOiFta2RpciBYdGVzdC5qZQorOi9zdGFydCBvZiB0ZXN0ZmlsZS8sL2VuZCBvZiB0ZXN0ZmlsZS93ISBYdGVzdDIvWHRlc3QzCis6c2V0IGRpcj1YdGVzdC5qZSx+Cis6ZSBYdGVzdDIvWHRlc3QzCis6c3dhcAorOiFscyBYdGVzdDIgPj50ZXN0Lm91dAorOiFlY2hvIHVuZGVyIFh0ZXN0MyA+PnRlc3Qub3V0Cis6IWxzIFh0ZXN0LmplID4+dGVzdC5vdXQKKzohZWNobyB1bmRlciBYdGVzdDMuc3dwID4+dGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKworc3RhcnQgb2YgdGVzdGZpbGUKK2xpbmUgMiBBYmNkZWZnaGlqCitsaW5lIDMgQWJjZGVmZ2hpagorZW5kIG9mIHRlc3RmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTIub2sgYi9zcmMvdGVzdGRpci90ZXN0MTIub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1NjIzYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxMi5vawpAQCAtMCwwICsxLDEwIEBACitmaXJzdCBsaW5lCitYdGVzdDEuc3dwCit1bmRlciBYdGVzdDEuc3dwCit1bmRlciB1bmRlcgorWHRlc3QxLnN3cAordW5kZXIgWHRlc3QxLnN3cAorWHRlc3QzCit1bmRlciBYdGVzdDMKK1h0ZXN0My5zd3AKK3VuZGVyIFh0ZXN0My5zd3AKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxMy5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QxMy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhhNmZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDEzLmluCkBAIC0wLDAgKzEsNTggQEAKK1Rlc3RzIGZvciBhdXRvY29tbWFuZHMgb24gOmNsb3NlIGNvbW1hbmQKKworV3JpdGUgdGhyZWUgZmlsZXMgYW5kIG9wZW4gdGhlbSwgZWFjaCBpbiBhIHdpbmRvdy4KK1RoZW4gZ28gdG8gbmV4dCB3aW5kb3csIHdpdGggYXV0b2NvbW1hbmQgdGhhdCBkZWxldGVzIHRoZSBwcmV2aW91cyBvbmUuCitEbyB0aGlzIHR3aWNlLCB3cml0aW5nIHRoZSBmaWxlLgorCitBbHNvIHRlc3QgZGVsZXRpbmcgdGhlIGJ1ZmZlciBvbiBhIFVubG9hZCBldmVudC4gIElmIHRoaXMgZ29lcyB3cm9uZyB0aGVyZQord2lsbCBiZSB0aGUgQVRURU5USU9OIHByb21wdC4KKworQWxzbyB0ZXN0IGNoYW5naW5nIGJ1ZmZlcnMgaW4gYSBCdWZEZWwgYXV0b2NvbW1hbmQuICBJZiB0aGlzIGdvZXMgd3JvbmcgdGhlcmUKK2FyZSBtbF9saW5lIGVycm9ycyBhbmQvb3IgYSBDcmFzaC4KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6L15zdGFydCBvZiB0ZXN0ZmlsZS8sL15lbmQgb2YgdGVzdGZpbGUvdyEgWHRlc3RqZTEKKzovXnN0YXJ0IG9mIHRlc3RmaWxlLywvXmVuZCBvZiB0ZXN0ZmlsZS93ISBYdGVzdGplMgorOi9ec3RhcnQgb2YgdGVzdGZpbGUvLC9eZW5kIG9mIHRlc3RmaWxlL3chIFh0ZXN0amUzCis6ZSBYdGVzdGplMQorb3Rlc3RqZTEbCis6dworOnNwIFh0ZXN0amUyCitvdGVzdGplMhsKKzp3Cis6c3AgWHRlc3RqZTMKK290ZXN0amUzGworOncKKxcXCis6YXUgV2luTGVhdmUgWHRlc3RqZTIgYndpcGUKKxcXCis6dyEgdGVzdC5vdXQKKzphdSBXaW5MZWF2ZSBYdGVzdGplMSBid2lwZSBYdGVzdGplMworOmNsb3NlCis6dyA+PnRlc3Qub3V0Cis6ZSBYdGVzdGplMQorOmJ3aXBlIFh0ZXN0amUyIFh0ZXN0amUzIHRlc3Qub3V0Cis6YXUhCis6YXUhIEJ1ZlVubG9hZCBYdGVzdGplMSBid2lwZQorOmUgWHRlc3RqZTMKKzp3ID4+dGVzdC5vdXQKKzplIFh0ZXN0amUyCis6c3AgWHRlc3RqZTEKKzplCis6dyA+PnRlc3Qub3V0Cis6YXUhCis6b25seQorOmUgWHRlc3RqZTEKKzpid2lwZSBYdGVzdGplMiBYdGVzdGplMyB0ZXN0Lm91dCB0ZXN0MTMuaW4KKzphdSBCdWZXaXBlb3V0IFh0ZXN0amUxIGJ1ZiBYdGVzdGplMQorOmJ3aXBlCis6dyA+PnRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKK3N0YXJ0IG9mIHRlc3RmaWxlCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxMy5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QxMy5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjFmYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDEzLm9rCkBAIC0wLDAgKzEsMzAgQEAKK3N0YXJ0IG9mIHRlc3RmaWxlCit0ZXN0amUxCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKK3N0YXJ0IG9mIHRlc3RmaWxlCit0ZXN0amUxCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKK3N0YXJ0IG9mIHRlc3RmaWxlCit0ZXN0amUzCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKK3N0YXJ0IG9mIHRlc3RmaWxlCit0ZXN0amUyCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKK3N0YXJ0IG9mIHRlc3RmaWxlCit0ZXN0amUxCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxNC5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QxNC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZiOTU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDE0LmluCkBAIC0wLDAgKzEsNjUgQEAKK1Rlc3RzIGZvciAidmFCaUIiLCBlbmQgY291bGQgYmUgd3JvbmcuCitBbHNvIHRlc3QgIjpzL3BhdC9zdWIvIiB3aXRoIGRpZmZlcmVudCB+cyBpbiBzdWIuCitBbHNvIHRlc3QgZm9yIF5WeGZmIGFuZCBeVm8xMjMgaW4gSW5zZXJ0IG1vZGUuCitBbHNvIHRlc3QgIlttIiwgIl1tIiwgIltNIiBhbmQgIl1NIgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKy9TdGFydCBjdXJzb3IgaGVyZQordmFCaUJEOj9CdWc/LC9QaWVjZS8tMnchIHRlc3Qub3V0CisvXi0gQnVnCis6cy91L351fi8KKzpzL2kvfnV+LworOnMvby9+fn4vCis6LncgPj50ZXN0Lm91dAorOmlmIGhhcygiZWJjZGljIikKKzogbGV0IHR0ID0gIm9cPEMtVj4xOTNcPEMtVj54YzJcPEMtVj5vMzAzIFw8Qy1WPjkwYVw8Qy1WPnhmZ1w8Qy1WPm81NzhcPEVzYz4iCis6ZWxzZQorOiBsZXQgdHQgPSAib1w8Qy1WPjY1XDxDLVY+eDQyXDxDLVY+bzEwMyBcPEMtVj4zM2FcPEMtVj54ZmdcPEMtVj5vNzhcPEVzYz4iCis6ZW5kaWYKKzpleGUgIm5vcm1hbCAiIC4gdHQKKzoudyA+PnRlc3Qub3V0Cis6c2V0IHZiCisvXlBpZWNlCisyXW1hQRs6LncgPj50ZXN0Lm91dAoral1tYUIbOi53ID4+dGVzdC5vdXQKK11tYUMbOi53ID4+dGVzdC5vdXQKK1ttYUQbOi53ID4+dGVzdC5vdXQKK2syW21hRRs6LncgPj50ZXN0Lm91dAorM1ttYUYbOi53ID4+dGVzdC5vdXQKK11NYUcbOi53ID4+dGVzdC5vdXQKK2oyXU1hSBs6LncgPj50ZXN0Lm91dAorXU1dTWFJGzoudyA+PnRlc3Qub3V0CisyW01hShs6LncgPj50ZXN0Lm91dAora1tNYUsbOi53ID4+dGVzdC5vdXQKKzNbTWFMGzoudyA+PnRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKy0gQnVnIGluICJ2UFBQUCIgb24gdGhpcyB0ZXh0IChXZWJiKToKKwl7CisJCWNtZDsKKwkJeworCQkJY21kOwkvKiA8LS0gU3RhcnQgY3Vyc29yIGhlcmUgKi8KKwkJCXsKKwkJCX0KKwkJfQorCX0KKworUGllY2Ugb2YgSmF2YQoreworCXR0IG0xIHsKKwkJdDE7CisJfSBlMQorCisJdHQgbTIgeworCQl0MjsKKwl9IGUyCisKKwl0dCBtMyB7CisJCWlmICh4KQorCQl7CisJCQl0MzsKKwkJfQorCX0gZTMKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxNC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QxNC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODkzYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDE0Lm9rCkBAIC0wLDAgKzEsMTcgQEAKKy0gQnVnIGluICJ2UFBQUCIgb24gdGhpcyB0ZXh0IChXZWJiKToKKwl7CisJfQorLSBCdWcgdXV1biAidlBQUFAiIHV1dXV1dXV1dW4gdGhpcyB0ZXh0IChXZWJiKToKK0FCQyAhYQ9nBzgKKwl0dCBtMSB7QQorCXR0IG0yIHtCCisJdHQgbTMge0MKKwl0dCBtMyB7REMKKwl0dCBtMSB7RUEKK3tGCisJfUcgZTEKKwl9SCBlMworfUkKKwl9SkggZTMKKwl9SyBlMgore0xGCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTUuaW4gYi9zcmMvdGVzdGRpci90ZXN0MTUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY2NTI5YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxNS5pbgpAQCAtMCwwICsxLDEzNiBAQAorVGVzdHMgZm9yIDpyaWdodCBvbiB0ZXh0IHdpdGggZW1iZWRkZWQgVEFCLgorQWxzbyB0ZXN0IGZvcm1hdHRpbmcgYSBwYXJhZ3JhcGguCitBbHNvIHRlc3QgdW5kbyBhZnRlciAiOiVzIiBhbmQgZm9ybWF0dGluZy4KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6c2V0IHR3PTY1CisKKzovXlxzKnRlc3QgZm9yIDpsZWZ0LywvXlxzKnRlc3QgZm9yIDpjZW50ZXIvIGxlZnQKKzovXlxzKnRlc3QgZm9yIDpjZW50ZXIvLC9eXHMqdGVzdCBmb3IgOnJpZ2h0LyBjZW50ZXIKKzovXlxzKnRlc3QgZm9yIDpyaWdodC8sL154eHgvLTEgcmlnaHQKKzpzZXQgZm8rPXRjcm9xbCB0dz03MgorL3h4eHh4eHh4JAorMGdxNmtrCis6c2V0IG5vY3AgdmltaW5mbys9bnZpbWluZm8KKzoiIHVuZG8vcmVkbyBoZXJlIHRvIG1ha2UgdGhlIG5leHQgdW5kbyBvbmx5IHdvcmsgb24gdGhlIGZvbGxvd2luZyBjaGFuZ2VzCit1EgorOm1hcCBnZyA6LiwuKzJzL14veC88Q1I+a2s6c2V0IHR3PTM8Q1I+Z3FxCisvXmFhCitnZ3UKKzo/dGVzdCBmb3IgOmxlZnQ/LCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCisJdGVzdCBmb3IgOmxlZnQKKwkgIGEJCWEKKwkgICAgZmEJCWEKKwkgIGRmYQkJYQorCSAgICAgICAgc2RmYQkJYQorCSAgYXNkZmEJCWEKKwkgICAgICAgIHhhc2RmYQkJYQorYXN4eGRmYQkJYQorCisJdGVzdCBmb3IgOmNlbnRlcgorCSAgYQkJYQorCSAgICBmYQkJYWZkIGFzZGYKKwkgIGRmYQkJYQorCSAgICAgICAgc2RmYQkJYWZkIGFzZGYKKwkgIGFzZGZhCQlhCisJICAgICAgICB4YXNkZmEJCWFzZGZhc2RmYXNkZmFzZGZhc2RmCithc3h4ZGZhCQlhCisKKwl0ZXN0IGZvciA6cmlnaHQKKwlhCQlhCisJZmEJCWEKKwlkZmEJCWEKKwlzZGZhCQlhCisJYXNkZmEJCWEKKwl4YXNkZmEJCWEKKwlhc3h4ZGZhCQlhCisJYXN4YTtvZmEJCWEKKwlhc2RmYXF3ZXIJCWEKKwlhCQlheAorCWZhCQlheAorCWRmYQkJYXgKKwlzZGZhCQlheAorCWFzZGZhCQlheAorCXhhc2RmYQkJYXgKKwlhc3h4ZGZhCQlheAorCWFzeGE7b2ZhCQlheAorCWFzZGZhcXdlcgkJYXgKKwlhCQlheHgKKwlmYQkJYXh4CisJZGZhCQlheHgKKwlzZGZhCQlheHgKKwlhc2RmYQkJYXh4CisJeGFzZGZhCQlheHgKKwlhc3h4ZGZhCQlheHgKKwlhc3hhO29mYQkJYXh4CisJYXNkZmFxd2VyCQlheHgKKwlhCQlheHh4CisJZmEJCWF4eHgKKwlkZmEJCWF4eHgKKwlzZGZhCQlheHh4CisJYXNkZmEJCWF4eHgKKwl4YXNkZmEJCWF4eHgKKwlhc3h4ZGZhCQlheHh4CisJYXN4YTtvZmEJCWF4eHgKKwlhc2RmYXF3ZXIJCWF4eHgKKwlhCQlheHh4bworCWZhCQlheHh4bworCWRmYQkJYXh4eG8KKwlzZGZhCQlheHh4bworCWFzZGZhCQlheHh4bworCXhhc2RmYQkJYXh4eG8KKwlhc3h4ZGZhCQlheHh4bworCWFzeGE7b2ZhCQlheHh4bworCWFzZGZhcXdlcgkJYXh4eG8KKwlhCQlheHh4b2kKKwlmYQkJYXh4eG9pCisJZGZhCQlheHh4b2kKKwlzZGZhCQlheHh4b2kKKwlhc2RmYQkJYXh4eG9pCisJeGFzZGZhCQlheHh4b2kKKwlhc3h4ZGZhCQlheHh4b2kKKwlhc3hhO29mYQkJYXh4eG9pCisJYXNkZmFxd2VyCQlheHh4b2kKKwlhCQlheHh4b2lrCisJZmEJCWF4eHhvaWsKKwlkZmEJCWF4eHhvaWsKKwlzZGZhCQlheHh4b2lrCisJYXNkZmEJCWF4eHhvaWsKKwl4YXNkZmEJCWF4eHhvaWsKKwlhc3h4ZGZhCQlheHh4b2lrCisJYXN4YTtvZmEJCWF4eHhvaWsKKwlhc2RmYXF3ZXIJCWF4eHhvaWsKKwlhCQlheHh4b2lrZQorCWZhCQlheHh4b2lrZQorCWRmYQkJYXh4eG9pa2UKKwlzZGZhCQlheHh4b2lrZQorCWFzZGZhCQlheHh4b2lrZQorCXhhc2RmYQkJYXh4eG9pa2UKKwlhc3h4ZGZhCQlheHh4b2lrZQorCWFzeGE7b2ZhCQlheHh4b2lrZQorCWFzZGZhcXdlcgkJYXh4eG9pa2UKKwlhCQlheHh4b2lrZXkKKwlmYQkJYXh4eG9pa2V5CisJZGZhCQlheHh4b2lrZXkKKwlzZGZhCQlheHh4b2lrZXkKKwlhc2RmYQkJYXh4eG9pa2V5CisJeGFzZGZhCQlheHh4b2lrZXkKKwlhc3h4ZGZhCQlheHh4b2lrZXkKKwlhc3hhO29mYQkJYXh4eG9pa2V5CisJYXNkZmFxd2VyCQlheHh4b2lrZXkKKworeHh4eHggeHggeHh4eHh4IAoreHh4eHh4eCB4eHh4eHh4eHggeHh4IHh4eHggeHh4eHggeHh4eHggeHh4IHh4Cit4eHh4eHh4eHh4eHh4eHh4eHggeHh4eHggeHh4eCwgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHggeHggeHgKK3h4IHh4eHh4eHguIHh4eHggeHh4eC4KKworPiB4eCB4eCwgeHh4eCB4eHh4IHh4eCB4eHh4IHh4eCB4eHh4eCB4eHggeHh4IHh4eHh4eHggeHh4IHh4eHh4Cis+IHh4eHh4eCB4eHh4eHh4OiB4eHh4IHh4eHh4eHgsIHh4IHh4eHh4eCB4eHh4IHh4eHh4eHh4eHgKKworYWEgYWEgYWEgYWEKK2JiIGJiIGJiIGJiCitjYyBjYyBjYyBjYwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDE1Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDE1Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMDlmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTUub2sKQEAgLTAsMCArMSwxMTEgQEAKK3Rlc3QgZm9yIDpsZWZ0CithCQlhCitmYQkJYQorZGZhCQlhCitzZGZhCQlhCithc2RmYQkJYQoreGFzZGZhCQlhCithc3h4ZGZhCQlhCisKKwkJCXRlc3QgZm9yIDpjZW50ZXIKKwkJCSBhCQlhCisJCSAgICAgIGZhCQlhZmQgYXNkZgorCQkJIGRmYQkJYQorCQkgICAgc2RmYQkJYWZkIGFzZGYKKwkJCSBhc2RmYQkJYQorCSAgICAgIHhhc2RmYQkJYXNkZmFzZGZhc2RmYXNkZmFzZGYKKwkJCWFzeHhkZmEJCWEKKworCQkJCQkJICB0ZXN0IGZvciA6cmlnaHQKKwkJCQkJCSAgICAgIGEJCWEKKwkJCQkJCSAgICAgZmEJCWEKKwkJCQkJCSAgICBkZmEJCWEKKwkJCQkJCSAgIHNkZmEJCWEKKwkJCQkJCSAgYXNkZmEJCWEKKwkJCQkJCSB4YXNkZmEJCWEKKwkJCQkJCWFzeHhkZmEJCWEKKwkJCQkJICAgICAgIGFzeGE7b2ZhCQlhCisJCQkJCSAgICAgIGFzZGZhcXdlcgkJYQorCQkJCQkgICAgICBhCQlheAorCQkJCQkgICAgIGZhCQlheAorCQkJCQkgICAgZGZhCQlheAorCQkJCQkgICBzZGZhCQlheAorCQkJCQkgIGFzZGZhCQlheAorCQkJCQkgeGFzZGZhCQlheAorCQkJCQlhc3h4ZGZhCQlheAorCQkJCSAgICAgICBhc3hhO29mYQkJYXgKKwkJCQkgICAgICBhc2RmYXF3ZXIJCWF4CisJCQkJCSAgICAgIGEJCWF4eAorCQkJCQkgICAgIGZhCQlheHgKKwkJCQkJICAgIGRmYQkJYXh4CisJCQkJCSAgIHNkZmEJCWF4eAorCQkJCQkgIGFzZGZhCQlheHgKKwkJCQkJIHhhc2RmYQkJYXh4CisJCQkJCWFzeHhkZmEJCWF4eAorCQkJCSAgICAgICBhc3hhO29mYQkJYXh4CisJCQkJICAgICAgYXNkZmFxd2VyCQlheHgKKwkJCQkJICAgICAgYQkJYXh4eAorCQkJCQkgICAgIGZhCQlheHh4CisJCQkJCSAgICBkZmEJCWF4eHgKKwkJCQkJICAgc2RmYQkJYXh4eAorCQkJCQkgIGFzZGZhCQlheHh4CisJCQkJCSB4YXNkZmEJCWF4eHgKKwkJCQkJYXN4eGRmYQkJYXh4eAorCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eAorCQkJCSAgICAgIGFzZGZhcXdlcgkJYXh4eAorCQkJCQkgICAgICBhCQlheHh4bworCQkJCQkgICAgIGZhCQlheHh4bworCQkJCQkgICAgZGZhCQlheHh4bworCQkJCQkgICBzZGZhCQlheHh4bworCQkJCQkgIGFzZGZhCQlheHh4bworCQkJCQkgeGFzZGZhCQlheHh4bworCQkJCQlhc3h4ZGZhCQlheHh4bworCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eG8KKwkJCQkgICAgICBhc2RmYXF3ZXIJCWF4eHhvCisJCQkJCSAgICAgIGEJCWF4eHhvaQorCQkJCQkgICAgIGZhCQlheHh4b2kKKwkJCQkJICAgIGRmYQkJYXh4eG9pCisJCQkJCSAgIHNkZmEJCWF4eHhvaQorCQkJCQkgIGFzZGZhCQlheHh4b2kKKwkJCQkJIHhhc2RmYQkJYXh4eG9pCisJCQkJCWFzeHhkZmEJCWF4eHhvaQorCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eG9pCisJCQkJICAgICAgYXNkZmFxd2VyCQlheHh4b2kKKwkJCQkJICAgICAgYQkJYXh4eG9paworCQkJCQkgICAgIGZhCQlheHh4b2lrCisJCQkJCSAgICBkZmEJCWF4eHhvaWsKKwkJCQkJICAgc2RmYQkJYXh4eG9paworCQkJCQkgIGFzZGZhCQlheHh4b2lrCisJCQkJCSB4YXNkZmEJCWF4eHhvaWsKKwkJCQkJYXN4eGRmYQkJYXh4eG9paworCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eG9paworCQkJCSAgICAgIGFzZGZhcXdlcgkJYXh4eG9paworCQkJCQkgICAgICBhCQlheHh4b2lrZQorCQkJCQkgICAgIGZhCQlheHh4b2lrZQorCQkJCQkgICAgZGZhCQlheHh4b2lrZQorCQkJCQkgICBzZGZhCQlheHh4b2lrZQorCQkJCQkgIGFzZGZhCQlheHh4b2lrZQorCQkJCQkgeGFzZGZhCQlheHh4b2lrZQorCQkJCQlhc3h4ZGZhCQlheHh4b2lrZQorCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eG9pa2UKKwkJCQkgICAgICBhc2RmYXF3ZXIJCWF4eHhvaWtlCisJCQkJCSAgICAgIGEJCWF4eHhvaWtleQorCQkJCQkgICAgIGZhCQlheHh4b2lrZXkKKwkJCQkJICAgIGRmYQkJYXh4eG9pa2V5CisJCQkJCSAgIHNkZmEJCWF4eHhvaWtleQorCQkJCQkgIGFzZGZhCQlheHh4b2lrZXkKKwkJCQkJIHhhc2RmYQkJYXh4eG9pa2V5CisJCQkJCWFzeHhkZmEJCWF4eHhvaWtleQorCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eG9pa2V5CisJCQkJICAgICAgYXNkZmFxd2VyCQlheHh4b2lrZXkKKworeHh4eHggeHggeHh4eHh4IHh4eHh4eHggeHh4eHh4eHh4IHh4eCB4eHh4IHh4eHh4IHh4eHh4IHh4eCB4eAoreHh4eHh4eHh4eHh4eHh4eHh4IHh4eHh4IHh4eHgsIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4IHh4IHh4IHh4IHh4eHh4eHguCit4eHh4IHh4eHguCisKKz4geHggeHgsIHh4eHggeHh4eCB4eHggeHh4eCB4eHggeHh4eHggeHh4IHh4eCB4eHh4eHh4IHh4eCB4eHh4eCB4eHh4eHgKKz4geHh4eHh4eDogeHh4eCB4eHh4eHh4LCB4eCB4eHh4eHggeHh4eCB4eHh4eHh4eHh4CisKK2FhIGFhIGFhIGFhCitiYiBiYiBiYiBiYgorY2MgY2MgY2MgY2MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxNi5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QxNi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmMwZDUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDE2LmluCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3RzIGZvciByZXNldHRpbmcgInNlY3VyZSIgZmxhZyBhZnRlciBHVUkgaGFzIHN0YXJ0ZWQuCisKK1NUQVJUVEVTVAorOnNldCBleHJjIHNlY3VyZQorOmd1aSAtZgorOi4sJHchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKwlqdXN0IHNvbWUgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDE2Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDE2Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZTJlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTYub2sKQEAgLTAsMCArMSwyIEBACisKKwlqdXN0IHNvbWUgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDE3LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDE3LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OTE0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTcuaW4KQEAgLTAsMCArMSwyNyBAQAorVGVzdHMgZm9yICJnZiIgb24gJHtWQVJ9CisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorOmlmIGhhcygiZWJjZGljIikKKzogc2V0IGlzZm5hbWU9QCwyNDAtMjQ5LC8sLiwtLF8sKywsLCQsOix+LHssfQorOmVsc2UKKzogc2V0IGlzZm5hbWU9QCw0OC01NywvLC4sLSxfLCssLCwkLDosfix7LH0KKzplbmRpZgorOmlmIGhhcygidW5peCIpCis6bGV0ICRDRElSID0gIi4iCisvQ0RJUgorOmVsc2UKKzppZiBoYXMoImFtaWdhIikKKzpsZXQgJFRESVIgPSAiL3Rlc3RkaXIiCis6ZWxzZQorOmxldCAkVERJUiA9ICIuIgorOmVuZGlmCisvVERJUgorOmVuZGlmCitnZgorOnchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKwkke0NESVJ9L3Rlc3QxN2EuaW4KKwkkVERJUi90ZXN0MTdhLmluCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTcub2sgYi9zcmMvdGVzdGRpci90ZXN0MTcub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjMzUwNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxNy5vawpAQCAtMCwwICsxLDMgQEAKK1RoaXMgZmlsZSBpcyBqdXN0IHRvIHRlc3QgImdmIiBpbiB0ZXN0IDE3LgorVGhlIGNvbnRlbnRzIGlzIG5vdCBpbXBvcnRlbnQuCitKdXN0IHRlc3RpbmchCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTdhLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDE3YS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGMzNTA0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDE3YS5pbgpAQCAtMCwwICsxLDMgQEAKK1RoaXMgZmlsZSBpcyBqdXN0IHRvIHRlc3QgImdmIiBpbiB0ZXN0IDE3LgorVGhlIGNvbnRlbnRzIGlzIG5vdCBpbXBvcnRlbnQuCitKdXN0IHRlc3RpbmchCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTguaW4gYi9zcmMvdGVzdGRpci90ZXN0MTguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmZDkyMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxOC5pbgpAQCAtMCwwICsxLDE2IEBACitUZXN0cyBmb3Igbm90IGRvaW5nIHNtYXJ0IGluZGVudGluZyB3aGVuIGl0IGlzbid0IHNldC4KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6c2V0IG5vY2luIG5vc2kgYWkKKy9zb21lCisyY2MjdGVzdBsKKzo/c3RhcnQ/LCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCitzdGFydCB0ZXh0CisJCXNvbWUgdGVzdCB0ZXh0CisJCXRlc3QgdGV4dAordGVzdCB0ZXh0CisJCXRlc3QgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDE4Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDE4Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MTk3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTgub2sKQEAgLTAsMCArMSw0IEBACitzdGFydCB0ZXh0CisJCSN0ZXN0Cit0ZXN0IHRleHQKKwkJdGVzdCB0ZXh0CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTkuaW4gYi9zcmMvdGVzdGRpci90ZXN0MTkuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5YjQyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxOS5pbgpAQCAtMCwwICsxLDIzIEBACitUZXN0cyBmb3IgInI8VGFiPiIgd2l0aCAnc21hcnR0YWInIGFuZCAnZXhwYW5kdGFiJyBzZXQvbm90IHNldC4KKworU1RBUlRURVNUCis6c2V0IHNtYXJ0dGFiIGV4cGFuZHRhYiB0cz04IHN3PTQKKy9zb21lCityCTpzZXQgbm9leHBhbmR0YWIKKy9vdGhlcgorcgkKKzoiIFRlc3QgcmVwbGFjaW5nIHdpdGggVGFicyBhbmQgdGhlbiBiYWNrc3BhY2luZyB0byB1bmRvIGl0Ciswd1IJCQkICAgbCis6IiBUZXN0IHJlcGxhY2luZyB3aXRoIFRhYnMKKzB3UgkJCRsKKzo/XnN0YXJ0PywkdyEgdGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKworc3RhcnQgdGV4dAorCQlzb21lIHRlc3QgdGV4dAordGVzdCB0ZXh0CisJCW90aGVyIHRlc3QgdGV4dAorICAgIGEgY2RlCisgICAgZiBnaGkKK3Rlc3QgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDE5Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDE5Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNGViNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTkub2sKQEAgLTAsMCArMSw3IEBACitzdGFydCB0ZXh0CisJCSAgICBvbWUgdGVzdCB0ZXh0Cit0ZXN0IHRleHQKKwkJICAgIHRoZXIgdGVzdCB0ZXh0CisgICAgYSBjZGUKKyAgICAJCWhpCit0ZXN0IHRleHQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDIuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiNWE1MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QyLmluCkBAIC0wLDAgKzEsMjkgQEAKKworVGhpcyBpcyBhIHRlc3QgaWYgYSBVUkwgaXMgcmVjb2duaXplZCBieSAiZ2YiLCB3aXRoIHRoZSBjdXJzb3IgYmVmb3JlIGFuZAorYWZ0ZXIgdGhlICI6Ly8iLiAgQWxzbyB0ZXN0ICI6XFwiLgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKy9eZmlyc3QKKy90bXAKKzpjYWxsIGFwcGVuZCgwLCBleHBhbmQoIjxjZmlsZT4iKSkKKy9ec2Vjb25kCisvVVJMCis6Y2FsbCBhcHBlbmQoMSwgZXhwYW5kKCI8Y2ZpbGU+IikpCis6aWYgaGFzKCJlYmNkaWMiKQorOiBzZXQgaXNmPUAsMjQwLTI0OSwvLC4sLSxfLCssLCwkLDosfixcCis6ZWxzZQorOiBzZXQgaXNmPUAsNDgtNTcsLywuLC0sXywrLCwsJCw6LH4sXAorOmVuZGlmCisvXnRoaXJkCisvbmFtZQorOmNhbGwgYXBwZW5kKDIsIGV4cGFuZCgiPGNmaWxlPiIpKQorL15mb3VydGgKKy9VUkwKKzpjYWxsIGFwcGVuZCgzLCBleHBhbmQoIjxjZmlsZT4iKSkKKzVHZEc6d3EhIHRlc3Qub3V0CitFTkRURVNUCitmaXJzdCB0ZXN0IGZvciBVUkw6Ly9tYWNoaW5lLm5hbWUvdG1wL3ZpbXRlc3QyYSBhbmQgb3RoZXIgdGV4dAorc2Vjb25kIHRlc3QgZm9yIFVSTDovL21hY2hpbmUubmFtZS90bXAvdmltdGVzdDJiLiBBbmQgb3RoZXIgdGV4dAordGhpcmQgdGVzdCBmb3IgVVJMOlxcbWFjaGluZS5uYW1lXHZpbXRlc3QyYyBhbmQgb3RoZXIgdGV4dAorZm91cnRoIHRlc3QgZm9yIFVSTDpcXG1hY2hpbmUubmFtZVx0bXBcdmltdGVzdDJkLCBhbmQgb3RoZXIgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDIub2sgYi9zcmMvdGVzdGRpci90ZXN0Mi5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjk3ODgyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDIub2sKQEAgLTAsMCArMSw0IEBACitVUkw6Ly9tYWNoaW5lLm5hbWUvdG1wL3ZpbXRlc3QyYQorVVJMOi8vbWFjaGluZS5uYW1lL3RtcC92aW10ZXN0MmIKK1VSTDpcXG1hY2hpbmUubmFtZVx2aW10ZXN0MmMKK1VSTDpcXG1hY2hpbmUubmFtZVx0bXBcdmltdGVzdDJkCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MjAuaW4gYi9zcmMvdGVzdGRpci90ZXN0MjAuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwMWM3NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QyMC5pbgpAQCAtMCwwICsxLDIyIEBACitUZXN0cyBCbG9ja3dpc2UgVmlzdWFsIHdoZW4gdGhlcmUgYXJlIFRBQnMgYmVmb3JlIHRoZSB0ZXh0LgorRmlyc3QgdGVzdCBmb3IgdW5kbyB3b3JraW5nIHByb3Blcmx5IHdoZW4gZXhlY3V0aW5nIGNvbW1hbmRzIGZyb20gYSByZWdpc3Rlci4KK0Fsc28gdGVzdCB0aGlzIGluIGFuIGVtcHR5IGJ1ZmZlci4KKworU1RBUlRURVNUCis6c28gdGlueS52aW0KK0cwImF5JGtAYXUKKzpuZXcKK0BhdVk6cXVpdCEKK0dQCisvc3RhcnQgaGVyZSQKKxZqamxsZAorOi9oZXJlJC8sJC0xdyEgdGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKwordGVzdCB0ZXh0IHRlc3QgdGV4IHN0YXJ0IGhlcmUKKwkJc29tZSB0ZXh0CisJCXRlc3QgdGV4dAordGVzdCB0ZXh0CisKK094G2pBeRtrZGQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyMC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QyMC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjA0ZTdjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDIwLm9rCkBAIC0wLDAgKzEsNiBAQAordGVzdCB0ZXh0IHRlc3QgdGV4IHJ0IGhlcmUKKwkJc29tZXh0CisJCXRlc2V4dAordGVzdCB0ZXh0CisKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDIxLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDIxLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MWI5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjEuaW4KQEAgLTAsMCArMSwxOSBAQAorVGVzdHMgZm9yIFsgQ1RSTC1JIHdpdGggYSBjb3VudCBhbmQgQ1RSTC1XIENUUkwtSSB3aXRoIGEgY291bnQKKworU1RBUlRURVNUCis6c28gc21hbGwudmltCisvc3RhcnQKKzZbCToudyEgdGVzdC5vdXQKKz9zdGFydCBoZXJlCis2Fwk6LncgPj50ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCisjaW5jbHVkZSB0ZXN0MjEuaW4KKworLyogdGVzdCB0ZXh0IHRlc3QgdGV4IHN0YXJ0IGhlcmUKKwkJc29tZSB0ZXh0CisJCXRlc3QgdGV4dAorCQlzdGFydCBPSyBpZiBmb3VuZCB0aGlzIGxpbmUKKwlzdGFydCBmb3VuZCB3cm9uZyBsaW5lCit0ZXN0IHRleHQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyMS5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QyMS5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWYxYjc1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDIxLm9rCkBAIC0wLDAgKzEsMiBAQAorCQlzdGFydCBPSyBpZiBmb3VuZCB0aGlzIGxpbmUKKwkJc3RhcnQgT0sgaWYgZm91bmQgdGhpcyBsaW5lCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MjIuaW4gYi9zcmMvdGVzdGRpci90ZXN0MjIuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjYzA0NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QyMi5pbgpAQCAtMCwwICsxLDEzIEBACitUZXN0cyBmb3IgZmlsZSB3aXRoIHNvbWUgbGluZXMgZW5kaW5nIGluIENUUkwtTSwgc29tZSBub3QNCisNCitTVEFSVFRFU1QKKzpzZXQgdGEgdHgKKzplIQorOiQtMywkdyEgdGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKwordGhpcyBsaW5lcyBlbmRzIGluIGENCit0aGlzIG9uZSBkb2Vzbid0Cit0aGlzIG9uZSBkb2VzDQorYW5kIHRoZSBsYXN0IG9uZSBkb2Vzbid0CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MjIub2sgYi9zcmMvdGVzdGRpci90ZXN0MjIub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmZjg5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QyMi5vawpAQCAtMCwwICsxLDQgQEAKK3RoaXMgbGluZXMgZW5kcyBpbiBhDQordGhpcyBvbmUgZG9lc24ndAordGhpcyBvbmUgZG9lcw0KK2FuZCB0aGUgbGFzdCBvbmUgZG9lc24ndApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDIzLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDIzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMGU2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjMuaW4KQEAgLTAsMCArMSwxNSBAQAorVGVzdHMgZm9yIGNvbXBsaWNhdGVkICsgYXJndW1lbnQgdG8gOmVkaXQgY29tbWFuZAorCitTVEFSVFRFU1QKKzokLTF3ISBYZmlsZTEKKzokdyEgWGZpbGUyCis6ZWRpdCArMXxzL3wvUElQRS98dyBYZmlsZTF8IGUgWGZpbGUyfDEgfCBzL1wvL1NMQVNIL3x3Cis6dyEgdGVzdC5vdXQKKzplIFhmaWxlMQorOncgPj4gdGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKworVGhlIHJlc3VsdCBzaG91bGQgYmUgaW4gWGZpbGUxOiAiZm9vUElQRWJhciIsIGluIFhmaWxlMjogImZvb1NMQVNIYmFyIgorZm9vfGJhcgorZm9vL2JhcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDIzLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDIzLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOTMwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjMub2sKQEAgLTAsMCArMSwyIEBACitmb29TTEFTSGJhcgorZm9vUElQRWJhcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI0LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDI0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NzIxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjQuaW4KQEAgLTAsMCArMSwyMSBAQAorVGVzdHMgZm9yIHJlZ2V4cCB3aXRoIGJhY2tzbGFzaCBhbmQgb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzIGluc2lkZSBbXQorCitTVEFSVFRFU1QKKzpzZXQgbm9jb21wYXRpYmxlIHZpbWluZm8rPW52aW1pbmZvCisvW1x4XQoreC9bXHRcXV0KK3gvW115XQoreC9bXF1dCit4L1t5Xl0KK3gvWyR5XQoreDo/c3RhcnQ/LCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCitzdGFydAordGVzdCBcdGV4dCB0ZXN0IHRleHQKK3Rlc3QgCXRleHQgdGVzdCB0ZXh0Cit0ZXN0IHRleHQgXXRlc3QgdGV4dAordGVzdCBddGV4dCB0ZXN0IHRleHQKK3Rlc3QgdGV4dCB0ZV5zdCB0ZXh0Cit0ZXN0IHRlJHh0IHRlc3QgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI0Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDI0Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NmI1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjQub2sKQEAgLTAsMCArMSw3IEBACitzdGFydAordGVzdCB0ZXh0IHRlc3QgdGV4dAordGVzdCB0ZXh0IHRlc3QgdGV4dAordGVzdCB0ZXh0IHRlc3QgdGV4dAordGVzdCB0ZXh0IHRlc3QgdGV4dAordGVzdCB0ZXh0IHRlc3QgdGV4dAordGVzdCB0ZXh0IHRlc3QgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI1LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDI1LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMzk4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjUuaW4KQEAgLTAsMCArMSwzMSBAQAorVGVzdCBmb3IganVtcGluZyB0byBhIHRhZyB3aXRoICdoaWRkZW4nIHNldCwgd2l0aCBzeW1ib2xpYyBsaW5rIGluIHBhdGggb2YgdGFnLgorVGhpcyBvbmx5IHdvcmtzIGZvciBVbml4LCBiZWNhdXNlIG9mIHRoZSBzeW1ib2xpYyBsaW5rLgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzpzZXQgaGlkZGVuCis6IiBDcmVhdGUgYSBsaW5rIGZyb20gdGVzdDI1LmRpciB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCis6IXJtIC1mIHRlc3QyNS5kaXIKKzohbG4gLXMgLiB0ZXN0MjUuZGlyCis6IiBDcmVhdGUgdGFncy50ZXh0LCB3aXRoIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBuYW1lIGluc2VydGVkLgorL3RhZ3MgbGluZQorOnIgIXB3ZAorZCQvdGVzdAoraFA6LnchIHRhZ3MudGVzdAorOiIgVHJ5IGp1bXBpbmcgdG8gYSB0YWcgaW4gdGhlIGN1cnJlbnQgZmlsZSwgYnV0IHdpdGggYSBwYXRoIHRoYXQgY29udGFpbnMgYQorOiIgc3ltYm9saWMgbGluay4gIFdoZW4gd3JvbmcsIHRoaXMgd2lsbCBnaXZlIHRoZSBBVFRFTlRJT04gbWVzc2FnZS4gIFRoZSBuZXh0Cis6IiBzcGFjZSB3aWxsIHRoZW4gYmUgZWF0ZW4gYnkgaGl0LXJldHVybiwgaW5zdGVhZCBvZiBtb3ZpbmcgdGhlIGN1cnNvciB0byAnZCcuCis6c2V0IHRhZ3M9dGFncy50ZXN0CitHHSB4Oi53ISB0ZXN0Lm91dAorOiFybSAtZiB0ZXN0MjUuZGlyIHRhZ3MudGVzdAorOnFhIQorRU5EVEVTVAorCit0YWdzIGxpbmU6CitTRUNUSU9OX09GRgkvdGVzdDI1LmRpci90ZXN0MjUuaW4JL14jZGVmaW5lICBTRUNUSU9OX09GRiAgMyQvCisKKy8qdHguYyovCisjZGVmaW5lICBTRUNUSU9OX09GRiAgMworI2RlZmluZSAgTlVNX1NFQ1RJT05TIDMKKworU0VDVElPTl9PRkYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyNS5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QyNS5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGZjMDcwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDI1Lm9rCkBAIC0wLDAgKzEgQEAKKyNlZmluZSAgU0VDVElPTl9PRkYgIDMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyNi5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QyNi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjU3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDI2LmluCkBAIC0wLDAgKzEsNDMgQEAKK1Rlc3QgZm9yIDpleGVjdXRlLCA6d2hpbGUgYW5kIDppZgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KK210OmxldCBpID0gMAorOndoaWxlIGkgPCAxMgorOiAgbGV0IGkgPSBpICsgMQorOiAgaWYgaGFzKCJlYmNkaWMiKQorOiAgICBleGVjdXRlICJub3JtYWwgbyIgLiBpIC4gIlwwNDciCis6ICBlbHNlCis6ICAgIGV4ZWN1dGUgIm5vcm1hbCBvIiAuIGkgLiAiXDAzMyIKKzogIGVuZGlmCis6ICBpZiBpICUgMgorOiAgICBub3JtYWwgQXgWGworOiAgICBpZiBpID09IDkKKzogICAgICBicmVhaworOiAgICBlbmRpZgorOiAgICBpZiBpID09IDUKKzogICAgICBjb250aW51ZQorOiAgICBlbHNlCis6ICAgICAgbGV0IGogPSA5Cis6ICAgICAgd2hpbGUgaiA+IDAKKzogICAgICAgIGlmIGhhcygiZWJjZGljIikKKzogICAgICAgICAgZXhlY3V0ZSAibm9ybWFsIiBqIC4gImEiIC4gaiAuICJceDI3IgorOiAgICAgICAgZWxzZQorOiAgICAgICAgICBleGVjdXRlICJub3JtYWwiIGogLiAiYSIgLiBqIC4gIlx4MWIiCis6ICAgICAgICBlbmRpZgorOiAgICAgICAgbGV0IGogPSBqIC0gMQorOiAgICAgIGVuZHdoaWxlCis6ICAgIGVuZGlmCis6ICBlbmRpZgorOiAgaWYgaSA9PSA5Cis6ICAgIGlmIGhhcygiZWJjZGljIikKKzogICAgICBleGVjdXRlICJub3JtYWwgQXpcMDQ3IgorOiAgICBlbHNlCis6ICAgICAgZXhlY3V0ZSAibm9ybWFsIEF6XDAzMyIKKzogICAgZW5kaWYKKzogIGVuZGlmCis6ZW5kd2hpbGUKKzondCwkdyEgdGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI2Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDI2Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNDQ3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjYub2sKQEAgLTAsMCArMSwxMCBAQAorCisxeDk5OTk5OTk5OTg4ODg4ODg4Nzc3Nzc3NzY2NjY2NjU1NTU1NDQ0NDMzMzIyMQorMgorM3g5OTk5OTk5OTk4ODg4ODg4ODc3Nzc3Nzc2NjY2NjY1NTU1NTQ0NDQzMzMyMjEKKzQKKzV4Cis2Cis3eDk5OTk5OTk5OTg4ODg4ODg4Nzc3Nzc3NzY2NjY2NjU1NTU1NDQ0NDMzMzIyMQorOAorOXgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyNy5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QyNy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGYxNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDI3LmluCkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgZm9yIGV4cGFuZGluZyBmaWxlIG5hbWVzCisKK1NUQVJUVEVTVAorOiFta2RpciBYZGlyMQorOiFta2RpciBYZGlyMgorOiFta2RpciBYZGlyMworOmNkIFhkaXIzCis6IW1rZGlyIFhkaXI0Cis6Y2QgLi4KKzp3IFhkaXIxL2ZpbGUKKzp3IFhkaXIzL1hkaXI0L2ZpbGUKKzpuIFhkaXI/LyovZmlsZQorR28SJRs6LnchIHRlc3Qub3V0Cis6biEgWGRpcj8vKi9ub2ZpbGUKK0dvEiUbOi53ID4+dGVzdC5vdXQKKzplISB4eAorOiFybSAtcmYgWGRpcjEgWGRpcjIgWGRpcjMKKzpxYSEKK0VORFRFU1QKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI3Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDI3Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNWYyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0Mjcub2sKQEAgLTAsMCArMSwyIEBACitYZGlyMy9YZGlyNC9maWxlCitYZGlyPy8qL25vZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI4LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDI4LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDJjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjguaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI4Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDI4Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMWQ4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0Mjgub2sKQEAgLTAsMCArMSwyIEBACitzZAorbWFwIF9fMiBhc2Qbc2Vjb25kc2Qbc2QwbWFwIF9fNSBhc2QwZmlmdGgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyOS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QyOS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTkzY2NjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDI5LmluCkBAIC0wLDAgKzEsNjcgQEAKK1Rlc3QgZm9yIGpvaW5pbmcgbGluZXMgd2l0aCAnam9pbnNwYWNlcycgc2V0IG9yIG5vdAorCitTVEFSVFRFU1QKKzpzZXQgbm9qb2luc3BhY2VzCisvZmlyc3RsaW5lLworakpqSmpKakpqSmpKakpqSmpKakpqSmpKakpqSjpzZXQgam9pbnNwYWNlcworakpqSmpKakpqSmpKakpqSmpKakpqSmpKakpqSjo/Zmlyc3RsaW5lPysxLCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCitmaXJzdGxpbmUKK2FzZGZhc2RmLgorYXNkZgorYXNkZmFzZGYuIAorYXNkZgorYXNkZmFzZGYuICAKK2FzZGYKK2FzZGZhc2RmLgkKK2FzZGYKK2FzZGZhc2RmLiAJCithc2RmCithc2RmYXNkZi4JIAorYXNkZgorYXNkZmFzZGYuCQkKK2FzZGYKK2FzZGZhc2RmCithc2RmCithc2RmYXNkZiAKK2FzZGYKK2FzZGZhc2RmICAKK2FzZGYKK2FzZGZhc2RmCQorYXNkZgorYXNkZmFzZGYJIAorYXNkZgorYXNkZmFzZGYgCQorYXNkZgorYXNkZmFzZGYJCQorYXNkZgorYXNkZmFzZGYuCithc2RmCithc2RmYXNkZi4gCithc2RmCithc2RmYXNkZi4gIAorYXNkZgorYXNkZmFzZGYuCQorYXNkZgorYXNkZmFzZGYuIAkKK2FzZGYKK2FzZGZhc2RmLgkgCithc2RmCithc2RmYXNkZi4JCQorYXNkZgorYXNkZmFzZGYKK2FzZGYKK2FzZGZhc2RmIAorYXNkZgorYXNkZmFzZGYgIAorYXNkZgorYXNkZmFzZGYJCithc2RmCithc2RmYXNkZgkgCithc2RmCithc2RmYXNkZiAJCithc2RmCithc2RmYXNkZgkJCithc2RmCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0Mjkub2sgYi9zcmMvdGVzdGRpci90ZXN0Mjkub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2Zjc3YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QyOS5vawpAQCAtMCwwICsxLDI4IEBACithc2RmYXNkZi4gYXNkZgorYXNkZmFzZGYuIGFzZGYKK2FzZGZhc2RmLiAgYXNkZgorYXNkZmFzZGYuCWFzZGYKK2FzZGZhc2RmLiAJYXNkZgorYXNkZmFzZGYuCSBhc2RmCithc2RmYXNkZi4JCWFzZGYKK2FzZGZhc2RmIGFzZGYKK2FzZGZhc2RmIGFzZGYKK2FzZGZhc2RmICBhc2RmCithc2RmYXNkZglhc2RmCithc2RmYXNkZgkgYXNkZgorYXNkZmFzZGYgCWFzZGYKK2FzZGZhc2RmCQlhc2RmCithc2RmYXNkZi4gIGFzZGYKK2FzZGZhc2RmLiAgYXNkZgorYXNkZmFzZGYuICBhc2RmCithc2RmYXNkZi4JYXNkZgorYXNkZmFzZGYuIAlhc2RmCithc2RmYXNkZi4JIGFzZGYKK2FzZGZhc2RmLgkJYXNkZgorYXNkZmFzZGYgYXNkZgorYXNkZmFzZGYgYXNkZgorYXNkZmFzZGYgIGFzZGYKK2FzZGZhc2RmCWFzZGYKK2FzZGZhc2RmCSBhc2RmCithc2RmYXNkZiAJYXNkZgorYXNkZmFzZGYJCWFzZGYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3MjViZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzLmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDMub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwZjhmNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzLm9rCkBAIC0wLDAgKzEsMTA5MCBAQAorLyogc3RhcnQgb2YgQVVUTyBtYXRpY2FsbHkgY2hlY2tlZCAqLworeworCWlmICh0ZXN0KQorCQljbWQxOworCWNtZDI7Cit9CisKK3sKKwlpZiAodGVzdCkKKwkJY21kMTsKKwllbHNlCisJCWNtZDI7Cit9CisKK3sKKwlpZiAodGVzdCkKKwl7CisJCWNtZDE7CisJCWNtZDI7CisJfQorfQorCit7CisJaWYgKHRlc3QpCisJeworCQljbWQxOworCQllbHNlCisJfQorfQorCit7CisJd2hpbGUgKHRoaXMpCisJCWlmICh0ZXN0KQorCQkJY21kMTsKKwljbWQyOworfQorCit7CisJd2hpbGUgKHRoaXMpCisJCWlmICh0ZXN0KQorCQkJY21kMTsKKwkJZWxzZQorCQkJY21kMjsKK30KKworeworCWlmICh0ZXN0KQorCXsKKwkJY21kOworCX0KKworCWlmICh0ZXN0KQorCQljbWQ7Cit9CisKK3sKKwlpZiAodGVzdCkgeworCQljbWQ7CisJfQorCisJaWYgKHRlc3QpIGNtZDsKK30KKworeworCWNtZDE7CisJZm9yIChibGFoKQorCQl3aGlsZSAodGhpcykKKwkJCWlmICh0ZXN0KQorCQkJCWNtZDI7CisJY21kMzsKK30KKworeworCWNtZDE7CisJZm9yIChibGFoKQorCQl3aGlsZSAodGhpcykKKwkJCWlmICh0ZXN0KQorCQkJCWNtZDI7CisJY21kMzsKKworCWlmICh0ZXN0KQorCXsKKwkJY21kMTsKKwkJY21kMjsKKwkJY21kMzsKKwl9Cit9CisKKworLyogVGVzdCBmb3IgJ2NpbmRlbnQnIGRvL3doaWxlIG1peGVkIHdpdGggaWYvZWxzZTogKi8KKworeworCWRvCisJCWlmIChhc2RmKQorCQkJYXNkZmFzZDsKKwl3aGlsZSAoY29uZCk7CisKKwlkbworCQlpZiAoYXNkZikKKwkJCXdoaWxlIChhc2RmKQorCQkJCWFzZGY7CisJd2hpbGUgKGFzZGYpOworfQorCisvKiBUZXN0IGZvciAnY2luZGVudCcgd2l0aCB0d28gKSBvbiBhIGNvbnRpbnVhdGlvbiBsaW5lICovCit7CisJaWYgKGFzZGZhc2RmO2FzbGRrZmogYXNkbGtmaiBhcztsZGtmaiBzYWw7ZAorCQkJYWFsO3Nka2pmICAoIDthc2xkZmtqYTtzbGRmaworCQkJCWFsO3NkamZrYSA7c2xrZGYgKSBzYTtsZGtqZnNhIGRsazspCisJCWxpbmUgdXAgaGVyZTsKK30KKworCisvKiBDKysgdGVzdHM6ICovCisKKy8vIGZvbygpCQl0aGVzZSB0aHJlZSBsaW5lcyBzaG91bGQgcmVtYWluIGluIGNvbHVtbiAwCisvLyB7CisvLyB9CisKKy8qIFRlc3QgZm9yIGNvbnRpbnVhdGlvbiBhbmQgdW50ZXJtaW5hdGVkIGxpbmVzOiAqLworeworCWkgPSA5OSArIDE0MzI1ICsKKwkJMjEzNDUgKworCQkyMTM0NSArCisJCTIxMzQ1ICsgKCAyMTM0NSArCisJCQkJMjEzNDUpICsKKwkJMjM0NSArCisJCTEyMzQ7CisJYyA9IDE7Cit9CisKKy8qCisgICB0ZXN0amUgZm9yIGluZGVudCB3aXRoIGVtcHR5IGxpbmUKKworICAgaGVyZSAqLworCit7CisJaWYgKHRlc3RpbmcgJiYKKwkJCW5vdCBhIGpva2UgfHwKKwkJCWxpbmUgdXAgaGVyZSkKKwkJaGF5OworCWlmICh0ZXN0aW5nICYmCisJCQkobm90IGEgam9rZSB8fCB0ZXN0aW5nCisJCQkpbGluZSB1cCBoZXJlKQorCQloYXk7CisJaWYgKHRlc3RpbmcgJiYKKwkJCShub3QgYSBqb2tlIHx8IHRlc3RpbmcKKwkJCSBsaW5lIHVwIGhlcmUpKQorCQloYXk7Cit9CisKKworeworCXN3aXRjaCAoYykKKwl7CisJCWNhc2UgeHg6CisJCQlkbworCQkJCWlmIChhc2RmKQorCQkJCQlkbworCQkJCQkJYXNkZmFzZGY7CisJCQkJCXdoaWxlIChhc2RmKTsKKwkJCQllbHNlCisJCQkJCWFzZGZhc2RmOworCQkJd2hpbGUgKGNvbmQpOworCQljYXNlIHl5OgorCQljYXNlIHh4OgorCQljYXNlIHp6OgorCQkJdGVzdGluZzsKKwl9Cit9CisKK3sKKwlpZiAoY29uZCkgeworCQlmb287CisJfQorCWVsc2UKKwl7CisJCWJhcjsKKwl9Cit9CisKK3sKKwlpZiAoYWxza2RmaiA7YWxzZGtmamFsO3NrZGpmICg7c2FkbGtmc2EgO2Rsa2YgajthbGtzZGZqIDthbHNrZGpmCisJCQkJYWxzZGtmaiAoYXNsZGs7ZmoKKwkJCQkJYXdpdGggY2lubz0oMCA7bGYgdGhpcyBvbmUgZ29lcyB0byBiZWxvdyB0aGUgcGFyZW4gd2l0aCA9PQorCQkJCQkJO2xha3NqZmQgO2xzYWtkamYgO2Fsc2tkZiBhc2QpCisJCQkJCWFzZGZhc2RmOykpKQorCQlhc2RmYXNkZjsKK30KKworCWludAorZnVuYyhhLCBiKQorCWludCBhOworCWludCBjOworeworCWlmIChjMSAmJiAoYzIgfHwKKwkJCQljMykpCisJCWZvbzsKKwlpZiAoYzEgJiYKKwkJCShjMiB8fCBjMykKKwkgICApCit9CisKK3sKKwl3aGlsZSAoYXNkKQorCXsKKwkJaWYgKGFzZGYpCisJCQlpZiAodGVzdCkKKwkJCQlpZiAodGhhdCkKKwkJCQl7CisJCQkJCWlmIChhc2RmKQorCQkJCQkJZG8KKwkJCQkJCQljZGFzZDsKKwkJCQkJCXdoaWxlIChhcworCQkJCQkJCQlkZik7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJaWYgKGFzZGYpCisJCQkJCQlhc2RmOworCQkJCQllbHNlCisJCQkJCQlhc2RmOworCQlhc2RmOworCX0KK30KKworeworCXMgPSAiLyoiOyBiID0gJzsnCisJCXMgPSAiLyoiOyBiID0gJzsnOworCWEgPSBiOworfQorCit7CisJc3dpdGNoIChhKQorCXsKKwkJY2FzZSBhOgorCQkJc3dpdGNoICh0KQorCQkJeworCQkJCWNhc2UgMToKKwkJCQkJY21kOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6CisJCQkJCWNtZDsKKwkJCQkJYnJlYWs7CisJCQl9CisJCQljbWQ7CisJCQlicmVhazsKKwkJY2FzZSBiOgorCQkJeworCQkJCWludCBpOworCQkJCWNtZDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIGM6IHsKKwkJCQkJaW50IGk7CisJCQkJCWNtZDsKKwkJCQl9CisJCWNhc2UgZDogaWYgKGNvbmQgJiYKKwkJCQkJCXRlc3QpIHsJCS8qIHRoaXMgbGluZSBkb2Vzbid0IHdvcmsgcmlnaHQgKi8KKwkJCQkJaW50IGk7CisJCQkJCWNtZDsKKwkJCQl9CisJCQkJYnJlYWs7CisJfQorfQorCit7CisJaWYgKCEodmltX3N0cmNocihwX2NwbywgQ1BPX0JVRk9QVEdMT0IpICE9IE5VTEwgJiYgZW50ZXJpbmcpICYmCisJCQkoYnBfdG8tPmJfcF9pbml0aWFsaXplZCB8fAorCQkJICghZW50ZXJpbmcgJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0JVRk9QVCkgIT0gTlVMTCkpKQorCQlyZXR1cm47CitsYWJlbCA6CisJYXNkZiA9IGFzZGYgPworCQlhc2RmIDogYXNkZjsKKwlhc2RmID0gYXNkZiA/CisJCWFzZGY6IGFzZGY7Cit9CisKKy8qIFNwZWNpYWwgQ29tbWVudHMJOiBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgYWRkZWQgY29tcGxleGl0eSAoY29tcGFyZWQgICovCisvKgkJCQkJOiB0byBhZGR0b2xpc3QpIG9mIGhhdmluZyB0byBjaGVjayBmb3IgYSBkZXRhaWwgICAgICovCisvKgkJCQkJOiB0ZXh0dXJlIGFuZCBhZGQgdGhhdCB0byB0aGUgbGlzdCBmaXJzdC4JIAkgICAgKi8KKworY2hhciAqKGFycmF5WzEwMF0pID0geworCSJ0ZXN0amUiLAorCSJmb28iLAorCSJiYXIiLAorfQorCitlbnVtIHNvcHBpZQoreworCXllcyA9IDAsCisJbm8sCisJbWF5YmUKK307CisKK3R5cGVkZWYgZW51bSBzb3BwaWUKK3sKKwl5ZXMgPSAwLAorCW5vLAorCW1heWJlCit9OworCit7CisJaW50IGEsCisJCWI7Cit9CisKK3sKKwlzdHJ1Y3QgVHlwZQorCXsKKwkJaW50IGk7CisJCWNoYXIgKnN0cjsKKwl9IHZhcltdID0KKwl7CisJCTAsICJ6ZXJvIiwKKwkJMSwgIm9uZSIsCisJCTIsICJ0d28iLAorCQkzLCAidGhyZWUiCisJfTsKKworCWZsb2F0IG1hdHJpeFszXVszXSA9CisJeworCQl7CisJCQkwLAorCQkJMSwKKwkJCTIKKwkJfSwKKwkJeworCQkJMywKKwkJCTQsCisJCQk1CisJCX0sCisJCXsKKwkJCTYsCisJCQk3LAorCQkJOAorCQl9CisJfTsKK30KKworeworCS8qIGJsYWggKCBibGFoICovCisJLyogd2hlcmUgZG9lcyB0aGlzIGdvPyAqLworCisJLyogYmxhaCAoIGJsYWggKi8KKwljbWQ7CisKKwlmdW5jKGFyZzEsCisJCQkvKiBjb21tZW50ICovCisJCQlhcmcyKTsKKwlhOworCXsKKwkJYjsKKwkJeworCQkJYzsgLyogSGV5LCBOT1cgaXQgaW5kZW50cz8hICovCisJCX0KKwl9CisKKwl7CisJCWZ1bmMoYXJnMSwKKwkJCQlhcmcyLAorCQkJCWFyZzMpOworCQkvKiBIZXksIHdoYXQgYW0gSSBkb2luZyBoZXJlPyAgSXMgdGhpcyBjb3ogb2YgdGhlICIsIj8gKi8KKwl9Cit9CisKK21haW4gKCkKK3sKKwlpZiAoY29uZCkKKwl7CisJCWEgPSBiOworCX0KKwlpZiAoY29uZCkgeworCQlhID0gYzsKKwl9CisJaWYgKGNvbmQpCisJCWEgPSBkOworCXJldHVybjsKK30KKworeworCWNhc2UgMjogaWYgKGFzZGYgJiYKKwkJCQkJYXNkZmFzZGYpCisJCQkJYWFzZGY7CisJCQlhID0gOTsKKwljYXNlIDM6IGlmIChhc2RmKQorCQkJCWFhc2RmOworCQkJYSA9IDk7CisJY2FzZSA0OiAgICB4ID0gMTsKKwkJCSAgIHkgPSAyOworCitsYWJlbDoJaWYgKGFzZGYpCisJCQloZXJlOworCitsYWJlbDogIGlmIChhc2RmICYmCisJCQkJYXNkZmFzZGYpCisJCXsKKwkJfQorCitsYWJlbDogIGlmIChhc2RmICYmCisJCQkJYXNkZmFzZGYpIHsKKwkJCXRoZXJlOworCQl9CisKK2xhYmVsOiAgaWYgKGFzZGYgJiYKKwkJCQlhc2RmYXNkZikKKwkJCXRoZXJlOworfQorCit7CisJLyoKKwkgICBoZWxsbyB3aXRoICI6c2V0IGNvbW1lbnRzPSBjaW5vPWM1IgorCSAqLworCisJLyoKKwkgICBoZWxsbyB3aXRoICI6c2V0IGNvbW1lbnRzPSBjaW5vPSIKKwkgKi8KK30KKworCit7CisJaWYgKGEgPCBiKSB7CisJCWEgPSBhICsgMTsKKwl9IGVsc2UKKwkJYSA9IGEgKyAyOworCisJaWYgKGEpCisJCWRvIHsKKwkJCXRlc3Rpbmc7CisJCX0gd2hpbGUgKGFzZGZhc2RmKTsKKwlhID0gYiArIDE7CisJYXNkZmFzZGYKK30KKworY2xhc3MgYm9iCit7CisJaW50IGZvbygpIHtyZXR1cm4gMTt9CisJaW50IGJhcjsKK30KKworbWFpbigpCit7CisJd2hpbGUoMSkKKwkJaWYgKGZvbykKKwkJeworCQkJYmFyOworCQl9CisJCWVsc2UgeworCQkJYXNkZjsKKwkJfQorCW1pc3BsYWNlZGxpbmU7Cit9CisKK3sKKwlpZiAoY2xpcGJvYXJkLnN0YXRlID09IFNFTEVDVF9ET05FCisJCQkmJiAoKHJvdyA9PSBjbGlwYm9hcmQuc3RhcnQubG51bQorCQkJCQkmJiBjb2wgPj0gY2xpcGJvYXJkLnN0YXJ0LmNvbCkKKwkJCQl8fCByb3cgPiBjbGlwYm9hcmQuc3RhcnQubG51bSkpCit9CisKK3sKKwlpZiAoMSkge2kgKz0gNDt9CisJd2hlcmVfYW1faTsKKwlyZXR1cm4gMDsKK30KKworeworCXsKKwl9IC8vIHNkZihhc2RmCisJaWYgKGFzZGYpCisJCWFzZDsKK30KKworeworbGFiZWwxOgorbGFiZWwyOgorfQorCit7CisJaW50IGZvb1JldCA9IGZvbyhwQmFyMSwgZmFsc2UgLypmS0IqLywKKwkJCXRydWUgLypmUFRCKi8sIDMgLypuVCovLCBmYWxzZSAvKmZERiovKTsKKwlmKCkgeworCQlmb3IgKCBpID0gMDsKKwkJCQlpIDwgbTsKKwkJCQkvKiBjICovIGkrKyApIHsKKwkJCWEgPSBiOworCQl9CisJfQorfQorCit7CisJZjEoLypjb21tZW50Ki8pOworCWYyKCk7Cit9CisKK3sKKwlkbyB7CisJCWlmIChmb28pIHsKKwkJfSBlbHNlCisJCQk7CisJfSB3aGlsZSAoZm9vKTsKKwlmb28oKTsJLy8gd2FzIHdyb25nCit9CisKK2ludCB4OwkgICAgLy8gbm8gZXh0cmEgaW5kZW50IGJlY2F1c2Ugb2YgdGhlIDsKK3ZvaWQgZnVuYygpCit7Cit9CisKK2NoYXIgKnRhYltdID0geyJhYWEiLAorCSJ9OyIsIC8qIH07ICovIE5VTEx9CisJaW50IGluZGVudGVkOwore30KKworY2hhciAqYVtdID0geyJhYWEiLCAiYmJiIiwKKwkiY2NjIiwgTlVMTH07CisvLyBoZXJlCisKK2NoYXIgKnRhYltdID0geyJhYWEiLAorCSJ4eCIsIC8qIHh4ICovfTsgICAgLyogYXNkZiAqLworaW50IG5vdF9pbmRlbnRlZDsKKworeworCWRvIHsKKwkJc3dpdGNoIChibGEpCisJCXsKKwkJCWNhc2UgMTogaWYgKGZvbykKKwkJCQkJCWJhcjsKKwkJfQorCX0gd2hpbGUgKGJvbyk7CisJd3Jvbmc7Cit9CisKK2ludAlmb28sCisJYmFyOworaW50IGZvbzsKKworI2lmIGRlZmluZWQoZm9vKSBcCisJJiYgZGVmaW5lZChiYXIpCitjaGFyICogeHggPSAiYXNkZlwKKwkJCSBmb29cCisJCQkgYm9yIjsKK2ludCB4OworCitjaGFyICAgICpmb28gPSAiYXNkZlwKKwkJCQlhc2RmXAorCQkJCWFzZGYiLAorCQkqYmFyOworCit2b2lkIGYoKQoreworI2lmIGRlZmluZWQoZm9vKSBcCisJJiYgZGVmaW5lZChiYXIpCisJY2hhciAgICAqZm9vID0gImFzZGZcCisJCQkJCWFzZGZcCisJCQkJCWFzZGYiLAorCQkJKmJhcjsKKwl7CisJCWludCBpOworCQljaGFyICAgICpmb28gPSAiYXNkZlwKKwkJCQkJCWFzZGZcCisJCQkJCQlhc2RmIiwKKwkJCQkqYmFyOworCX0KKyNlbmRpZgorfQorI2VuZGlmCisKK2ludCB5OwkJLy8gY29tbWVudAorLy8gY29tbWVudAorCisvLyBjb21tZW50CisKK3sKKwlDb25zdHJ1Y3RvcihpbnQgYSwKKwkJCWludCBiICkgIDogQmFzZUNsYXNzKGEpCisJeworCX0KK30KKwordm9pZCBmb28oKQoreworCWNoYXIgb25lLAorCQkgdHdvOworCXN0cnVjdCBibGEgcGlldCwKKwkJCSAgIGphbjsKKwllbnVtIGZvbyBrZWVzLAorCQkJIGphbm5pZTsKKwlzdGF0aWMgdW5zaWduZWQgc2RmLAorCQkJCQlrcmFwOworCXVuc2lnbmVkIGludCBwaWV0LAorCQkJCSBqYW47CisJaW50CisJCWtlZXMsCisJCWphbjsKK30KKworeworCXQoaW50IGYsCisJCQlpbnQgZCk7CQkvLyApCisJZCgpOworfQorCitDb25zdHJ1Y3Rvcjo6Q29uc3RydWN0b3IoaW50IGEsCisJCWludCBiIAorCQkpICA6IAorCUJhc2VDbGFzcyhhLAorCQkJYiwKKwkJCWMpLAorCW1NZW1iZXIoYiksCit7Cit9CisKK0NvbnN0cnVjdG9yOjpDb25zdHJ1Y3RvcihpbnQgYSwKKwkJaW50IGIgKSAgOiAKKwlCYXNlQ2xhc3MoYSkKK3sKK30KKworQ29uc3RydWN0b3I6OkNvbnN0cnVjdG9yKGludCBhLAorCQlpbnQgYiApIC8qeCovIDogLyp4Ki8gQmFzZUNsYXNzKGEpLAorCQkJCQkJCSAgbWVtYmVyKGIpCit7Cit9CisKK2NsYXNzIENBYmMgOgorCXB1YmxpYyBCYXNlQ2xhc3MxLAorCXByb3RlY3RlZCBCYXNlQ2xhc3MyCit7CisJaW50IFRlc3QoKSB7IHJldHVybiBGQUxTRTsgfQorCWludCBUZXN0MSgpIHsgcmV0dXJuIFRSVUU7IH0KKworCUNBYmMoaW50IGEsIGludCBiICkgIDogCisJCUJhc2VDbGFzcyhhKQorCXsgCisJCXN3aXRjaCh4eHgpCisJCXsKKwkJCWNhc2UgYWJjOgorCQkJCWFzZGYoKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSA5OTk6CisJCQkJYmFlcigpOworCQkJCWJyZWFrOworCQl9CisJfQorCisJcHVibGljOiAvLyA8LS0gdGhpcyB3YXMgaW5jb3JlZWN0bHkgaW5kZW50ZWQgYmVmb3JlISEKKwl2b2lkIHRlc3RmYWxsKCk7CisJcHJvdGVjdGVkOgorCXZvaWQgdGVzdGZhbGwoKTsKK307CisKK2NsYXNzIENBYmMgOiBwdWJsaWMgQmFzZUNsYXNzMSwKKwkJCSBwcm90ZWN0ZWQgQmFzZUNsYXNzMgoreworfTsKKworc3RhdGljIHN0cnVjdAoreworCWludCBhOworCWludCBiOworfSB2YXJpYWJsZVtDT1VOVF0gPQoreworCXsKKwkJMTIzLAorCQk0NTYKKwl9LAorCXsKKwkJMTIzLAorCQk0NTYKKwl9Cit9OworCitzdGF0aWMgc3RydWN0Cit7CisJaW50IGE7CisJaW50IGI7Cit9IHZhcmlhYmxlW0NPVU5UXSA9Cit7CisJeyAxMjMsIDQ1NiB9LAorCXsgMTIzLCA0NTYgfQorfTsKKwordm9pZCBhc2RmKCkJCS8qIGluZF9tYXhwYXJlbiBtYXkgY2F1c2UgdHJvdWJsZSBoZXJlICovCit7CisJaWYgKCgwCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMSkpIGJyZWFrOworfQorCisvKiBlbmQgb2YgQVVUTyAqLworCisKK3sKKworLyogdGhpcyBpcworICogYSByZWFsIHNlcmlvdXMKKyAqIGFib3V0IGxpZmUsIHRoZQorICogdW5pdmVyc2UsIGFuZCB0aGUKKyAqIHJlc3QgaW1wb3J0YW50IGJpZworICogY29tbWVudAorICovCisJLyogaW5zZXJ0ICIgYWJvdXQgbGlmZSwgdGhlIHVuaXZlcnNlLCBhbmQgdGhlIHJlc3QiIGFmdGVyICJzZXJpb3VzIiAqLworfQorCisKK3sKKwkvKgorCSAqIFRlc3RpbmcgZm9yIGNvbW1lbnRzLCB3aXRob3V0ICdjaW4nIHNldAorCSAqLworYWJvdXQgbGlmZQorCisvKgorKiB3aGF0IGhhcHBlbnMgaGVyZT8KKyovCit0aGVyZQorCisJLyoKKwkgICB0aGUgZW5kIG9mIHRoZSBjb21tZW50LCB0cnkgaW5zZXJ0aW5nIGEgbGluZSBiZWxvdyAqLworbGluZQorCisJCS8qIGhvdyBhYm91dAoraGVsbG8KKwkJICAgICAgICAgICAgICAgIHRoaXMgb25lICovCit9CisKKworeworICAgIHZhciA9IHRoaXMgKyB0aGF0ICsgdmVjWzBdICogdmVjWzBdCisJCQkJICAgICAgKyB2ZWNbMV0gKiB2ZWNbMV0KKwkJCQkJICArIHZlYzJbMl0gKiB2ZWNbMl07Cit9CisKKworeworCQlhc2RmIGFzZGZsa2FqZHMgZjsKKwlpZiAodGVzICYgdGluZykgeworCQlhc2RmIGFzZGYgYXNkZiA7CisJCWFzZGZhIHNkZiBhc2RmOworCQl9CisJdGVzdGluZzE7CisJaWYgKHRlcyAmIHRpbmcpCisJeworCQlhc2RmIGFzZGYgYXNkZiA7CisJCWFzZGZhIHNkZiBhc2RmOworCQl9CisJdGVzdGluZzI7Cit9CisKKworbWFpbiAoIGludCBmaXJzdF9wYXIsIC8qCisJCQkJCSAgICogQ29tbWVudCBmb3IKKwkJCQkJICAgKiBmaXJzdCBwYXIKKwkJCQkJICAgKi8KKwkgICBpbnQgc2Vjb25kX3BhciAvKgorCQkJCQkgICAqIENvbW1lbnQgZm9yCisJCQkJCSAgICogc2Vjb25kIHBhcgorCQkJCQkgICAqLworCSApCit7CisJZnVuYyggZmlyc3RfcGFyLCAvKgorCQkJCQkgICogQ29tbWVudCBmb3IKKwkJCQkJICAqIGZpcnN0IHBhcgorCQkJCQkgICovCisJCSAgc2Vjb25kX3BhciAvKgorCQkJCQkgICogQ29tbWVudCBmb3IKKwkJCQkJICAqIHNlY29uZCBwYXIKKwkJCQkJICAqLworCQkpOworCit9CisKKworeworCWRvCisJeworCQlpZiAoKQorCQl7CisJCQlpZiAoKQorCQkJCWFzZGY7CisJCQllbHNlCisJCQkJYXNkZjsKKwkJfQorCX0gd2hpbGUgKCk7CisJY21kOwkJLyogdGhpcyBzaG91bGQgZ28gdW5kZXIgdGhlIH0gKi8KK30KKworCit2b2lkIGYoKQoreworCWlmICggaygpICkgeworCQlsKCk7CisKKwl9IGVsc2UgeyAvKiBTdGFydCAodHdvIHdvcmRzKSBlbmQgKi8KKwkJbSgpOworCX0KKworCW4oKTsKK30KKworCit2b2lkIGYoKQorCXsKKwlpZiAoIGsoKSApCisJCXsKKwkJbCgpOworCQl9IGVsc2UgeyAvKiBTdGFydCAodHdvIHdvcmRzKSBlbmQgKi8KKwkJbSgpOworCQl9CisJbigpOwkvKiBzaG91bGQgYmUgdW5kZXIgdGhlIGlmICgpICovCit9CisKKwordm9pZCBiYXIodm9pZCkKKwl7CisJc3RhdGljIGFycmF5WzJdWzJdID0KKwkJeworCQkJeyAxLCAyIH0sCisJCQl7IDMsIDQgfSwKKwkJfQorCisJd2hpbGUgKGEpCisJCXsKKwkJZm9vKCZhKTsKKwkJfQorCisJCXsKKwkJaW50IGE7CisJCQl7CisJCQlhID0gYSArIDE7CisJCQl9CisJCX0KKwliID0gYTsKKwl9CisKK3ZvaWQgZnVuYyh2b2lkKQorCXsKKwlhID0gMTsKKwkJeworCQliID0gMjsKKwkJfQorCWMgPSAzOworCWQgPSA0OworCX0KKy8qIGZvbyAqLworCisKK2EoKQoreworICBkbyB7CisgICAgYSA9IGEgKworICAgICAgYTsKKyAgfSB3aGlsZSAoIGEgKTsJCS8qIGFkZCB0ZXh0IHVuZGVyIHRoaXMgbGluZSAqLworICBoZXJlCisgICAgaWYgKCBhICkKKyAgICAgIGE7Cit9CisKKworYSgpCit7CitsYWJlbDE6CisgICAgICAgICAgICAvKiBobW0gKi8KKyAgICAgICAgICAgIC8vIGNvbW1lbnQKK2xhYmVsMjogYigpOworbGFiZWwzIC8qIHBvc3QgKi86CisvKiBwcmUgKi8gbGFiZWw0OgorCQlmKC8qY29tKi8pOworCQlpZiAoLypjb20qLykKKwkJCWNtZCgpOworfQorCisKKy8qCisgKiBBIHNpbXBsZSBjb21tZW50CisgKi8KKworLyoKKyoqIEEgZGlmZmVyZW50IGNvbW1lbnQKKyovCisKKwordm9pZCBmKCkKK3sKKworCS8qKioqKioqKioKKwkgIEEgY29tbWVudC4KKwkqKioqKioqKiovCit9CisKKwordm9pZCBmKCkKK3sKKworCS8qKioqKioqKioKKwlBIGNvbW1lbnQuCisJKioqKioqKioqLworfQorCisKK3ZvaWQgZigpCit7CisJYyA9IGMxICYmCisJCSgKKwkJIGMyIHx8CisJCSBjMworCQkpICYmIGM0OworfQorCisKK3ZvaWQgZigpCit7CisJYyA9IGMxICYmCisJCSgKKwkJIGMyIHx8CisJCSBjMworCQkpICYmIGM0OworfQorCisKK3ZvaWQgZigpCit7CisJYyA9IGMxICYmCisJCSgKKwkJCWMyIHx8CisJCQljMworCQkpICYmIGM0OworfQorCisKK3ZvaWQgZigpCit7CisJaWYgKCAgIGMxCisJCSAgICYmICggICBjMgorCQkJCSAgfHwgYzMpKQorCQlmb287Cit9CisKKwordm9pZCBmKCkKK3sKKwlpZiAoICAgYzEKKwkJJiYgKCAgIGMyCisJCQl8fCBjMykpCisJCWZvbzsKK30KKworCit2b2lkIGYoKQoreworCWMgPSBjMSAmJiAoCisJCWMyIHx8CisJCWMzCisJCSkgJiYgYzQ7CisJaWYgKAorCQljMSAmJiBjMgorCSAgICkKKwkJZm9vOworfQorCisKK3ZvaWQgZigpCit7CisJYyA9IGMxICYmICgKKwkJYzIgfHwKKwkJYzMKKwkpICYmIGM0OworCWlmICgKKwkJYzEgJiYgYzIKKwkpCisJCWZvbzsKK30KKworCit2b2lkIGYoKQoreworCXN3aXRjaCAoeCkKKwl7CisJCWNhc2UgMToKKwkJCWEgPSBiOworCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWEgPSAwOworCQlicmVhazsKKwl9Cit9CisKKwordm9pZCBmKCkKK3sKKwlpbnZva2VtZSgKKwkJIGFyZ3UsCisJCSBtZW50KTsKKwlpbnZva2VtZSgKKwkJIGFyZ3UsCisJCSBtZW50CisJCSApOworCWludm9rZW1lKGFyZ3UsCisJCQkgbWVudAorCQkJKTsKK30KKworCit2b2lkIGYoKQoreworCXN0YXRlbWVudDsKKwkJICAvLyBjb21tZW50IDEKKwkJICAvLyBjb21tZW50IDIKK30KKworCit2b2lkIGYoKQoreworCXN0YXRlbWVudDsKKwkgICAvLyBjb21tZW50IDEKKwkgICAvLyBjb21tZW50IDIKK30KKworCitjbGFzcyBDQWJjCit7CisJaW50IFRlc3QoKSB7IHJldHVybiBGQUxTRTsgfQorCitwdWJsaWM6IC8vIGNvbW1lbnQKKwl2b2lkIHRlc3RmYWxsKCk7Citwcm90ZWN0ZWQ6CisJdm9pZCB0ZXN0ZmFsbCgpOworfTsKKworCit7CisJYXZlcnlsb25nZnVuY3Rpb25uYW1lbG9uZ2Z1bmN0aW9ubmFtZWF2ZXJ5bG9uZ2Z1bmN0aW9ubmFtZSgpLT5hc2QoCisJCQlhc2Rhc2RmLAorCQkJZnVuYyhhc2RmLAorCQkJCSBhc2RmYWRzZiksCisJCQlhc2RmYXNkZgorCQkJKTsKKworCS8qIHRob3NlIGFyZSB1Z2x5LCBidXQgY29uc2VxdWVudCAqLworCisJZnVuYygpLT5hc2QoYXNkYXNkZiwKKwkJCQlhdmVyeWxvbmdmdW5jdGlvbm5hbWUoCisJCQkJCQlhYmMsCisJCQkJCQlkZWMpLT5hdmVyeWxvbmdmdW5jdGlvbm5hbWUoCisJCQkJCQkJCWFzZGZhZHNmLAorCQkJCQkJCQlhc2RmYXNkZiwKKwkJCQkJCQkJYXNkZmFzZGYsCisJCQkJCQkJCSksCisJCQkJZnVuYyhhc2RmYWRmLAorCQkJCQkgYXNkZmFzZGYKKwkJCQkJKSwKKwkJCQlhc2Rhc2RmCisJCQkgICApOworCisJYXZlcnlsb25nZnVuY3Rpb25uYW1lYXZlcnlsb25nZnVuY3Rpb25uYW1lYXZlcnkoKS0+YXNkKGZhc2RmKAorCQkJCQlhYmMsCisJCQkJCWRlYyktPmFzZGZhc2RmYXNkZigKKwkJCQkJCQlhc2RmYWRzZiwKKwkJCQkJCQlhc2RmYXNkZiwKKwkJCQkJCQlhc2RmYXNkZiwKKwkJCQkJCQkpLAorCQkJZnVuYyhhc2RmYWRmLAorCQkJCSBhc2RmYXNkZiksCisJCQlhc2Rhc2RmCisJCQkpOworfQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzAuaW4gYi9zcmMvdGVzdGRpci90ZXN0MzAuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5Mjc0MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzMC5pbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzAub2sgYi9zcmMvdGVzdGRpci90ZXN0MzAub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5NDQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzMC5vawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzEuaW4gYi9zcmMvdGVzdGRpci90ZXN0MzEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0ZDA4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzMS5pbgpAQCAtMCwwICsxLDY4IEBACitUZXN0IGZvciBjb21tYW5kcyB0aGF0IGNsb3NlIHdpbmRvd3MgYW5kL29yIGJ1ZmZlcnM6Cis6cXVpdAorOmNsb3NlCis6aGlkZQorOm9ubHkKKzpzYWxsCis6YWxsCis6YmFsbAorOmJ1ZgorOmVkaXQKKworU1RBUlRURVNUCis6c28gdGlueS52aW0KK0dBIDEbOiR3ISBYdGVzdDEKKyRyMjokdyEgWHRlc3QyCiskcjM6JHchIFh0ZXN0MworOm4hIFh0ZXN0MSBYdGVzdDIKK0EgMRs6c2V0IGhpZGRlbgorOiIgdGVzdCBmb3Igd29ya2luZyA6biB3aGVuIGhpZGRlbiBzZXQ7IHdyaXRlICJ0ZXN0dGV4dCAyIgorOm4KKzp3ISB0ZXN0Lm91dAorOiIgdGVzdCBmb3IgZmFpbGluZyA6cmV3IHdoZW4gaGlkZGVuIG5vdCBzZXQ7IHdyaXRlICJ0ZXN0dGV4dCAyIDIiCis6c2V0IG5vaGlkZGVuCitBIDIbOnJldworOncgPj50ZXN0Lm91dAorOiIgdGVzdCBmb3Igd29ya2luZyA6cmV3IHdoZW4gaGlkZGVuIHNldDsgd3JpdGUgInRlc3R0ZXh0IDEgMSIKKzpzZXQgaGlkZGVuCis6cmV3Cis6dyA+PnRlc3Qub3V0Cis6IiB0ZXN0IGZvciA6YWxsIGtlZXBpbmcgYSBidWZmZXIgd2hlbiBpdCdzIG1vZGlmaWVkOyB3cml0ZSAidGVzdHRleHQgMSAxIDEiCis6c2V0IG5vaGlkZGVuCitBIDEbOnNwCis6biBYdGVzdDIgWHRlc3QzCis6YWxsCis6dyA+PnRlc3Qub3V0Cis6IiB0ZXN0IGFiYW5kb25pbmcgY2hhbmdlZCBidWZmZXIsIHNob3VsZCBiZSB1bmxvYWRlZCBldmVuIHdoZW4gJ2hpZGRlbicgc2V0Cis6IiB3cml0ZSAidGVzdHRleHQgMiAyIiB0d2ljZQorOnNldCBoaWRkZW4KK0EgMRs6cSEKKzp3ID4+dGVzdC5vdXQKKzp1bmhpZGUKKzp3ID4+dGVzdC5vdXQKKzoiIHRlc3QgIjpoaWRlIiBoaWRlcyBhbnl3YXkgd2hlbiAnaGlkZGVuJyBub3Qgc2V0OyB3cml0ZSAidGVzdHRleHQgMyIKKzpzZXQgbm9oaWRkZW4KK0EgMhs6aGlkZQorOncgPj50ZXN0Lm91dAorOiIgdGVzdCAiOmVkaXQiIGZhaWxpbmcgaW4gbW9kaWZpZWQgYnVmZmVyIHdoZW4gJ2hpZGRlbicgbm90IHNldAorOiIgd3JpdGUgInRlc3R0ZXh0IDMgMyIKK0EgMxs6ZSBYdGVzdDEKKzp3ID4+dGVzdC5vdXQKKzoiIHRlc3QgIjplZGl0IiB3b3JraW5nIGluIG1vZGlmaWVkIGJ1ZmZlciB3aGVuICdoaWRkZW4nIHNldDsgd3JpdGUgInRlc3R0ZXh0IDEiCis6c2V0IGhpZGRlbgorOmUgWHRlc3QxCis6dyA+PnRlc3Qub3V0Cis6IiB0ZXN0ICI6Y2xvc2UiIG5vdCBoaWRpbmcgd2hlbiAnaGlkZGVuJyBub3Qgc2V0IGluIG1vZGlmaWVkIGJ1ZmZlcjsKKzoiIHdyaXRlICJ0ZXN0dGV4dCAzIDMgMyIKKzpzcCBYdGVzdDMKKzpzZXQgbm9oaWRkZW4KK0EgMxs6Y2xvc2UKKzp3ID4+dGVzdC5vdXQKKzoiIHRlc3QgIjpjbG9zZSEiIGRvZXMgaGlkZSB3aGVuICdoaWRkZW4nIG5vdCBzZXQgaW4gbW9kaWZpZWQgYnVmZmVyOworOiIgd3JpdGUgInRlc3R0ZXh0IDEiCitBIDMbOmNsb3NlIQorOncgPj50ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCit0ZXN0dGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDMxLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDMxLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTFhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MzEub2sKQEAgLTAsMCArMSwxMSBAQAordGVzdHRleHQgMgordGVzdHRleHQgMiAyCit0ZXN0dGV4dCAxIDEKK3Rlc3R0ZXh0IDEgMSAxCit0ZXN0dGV4dCAyIDIKK3Rlc3R0ZXh0IDIgMgordGVzdHRleHQgMwordGVzdHRleHQgMyAzCit0ZXN0dGV4dCAxCit0ZXN0dGV4dCAzIDMgMwordGVzdHRleHQgMQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDMyLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDMyLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNTQwNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MzIuaW4KQEAgLTAsMCArMSw1NiBAQAorVGVzdCBmb3IgaW5zZXJ0IGV4cGFuc2lvbgorCis6c2UgY3B0PS4sdworKiBhZGQtZXhwYW5kcyAod29yZCBmcm9tIG5leHQgbGluZSkgZnJvbSBvdGhlciB3aW5kb3cKKyogYWRkLWV4cGFuZHMgKGN1cnJlbnQgYnVmZmVyIGZpcnN0KQorKiBMb2NhbCBleHBhbnNpb24sIGVuZHMgaW4gYW4gZW1wdHkgbGluZSAodW5sZXNzIGl0IGJlY29tZXMgYSBnbG9iYWwgZXhwYW5zaW9uKQorKiBzdGFydHMgTG9jYWwgYW5kIHN3aXRjaGVzIHRvIGdsb2JhbCBhZGQtZXhwYW5zaW9uCis6c2UgY3B0PS4sdyxpCisqIGktYWRkLWV4cGFuZHMgYW5kIHN3aXRjaGVzIHRvIGxvY2FsCisqIGFkZC1leHBhbmRzIGxpbmVzIChpdCB3b3VsZCBlbmQgaW4gYW4gZW1wdHkgbGluZSBpZiBpdCBkaWRuJ3QgaWdub3JlZCBpdCBzZWxmKQorOnNlIGNwdD1rWHRlc3RmaWxlCisqIGNoZWNrcyBrLWV4cGFuc2lvbiwgYW5kIGZpbGUgZXhwYW5zaW9uICh1c2UgWHRlc3QxMSBpbnN0ZWFkIG9mIHRlc3QxMSwKKyogYmVjYXVzZSBURVNUMTEuT1VUIG1heSBtYXRjaCBmaXJzdCBvbiBET1MpCis6c2UgY3B0PXcKKyogY2hlY2tzIG1ha2VfY3ljbGljIGluIG90aGVyIHdpbmRvdworOnNlIGNwdD11IG5vaGlkCisqIGNoZWNrcyB1bmxvYWRlZCBidWZmZXIgZXhwYW5zaW9uCisqIGNoZWNrcyBhZGRpbmcgbW9kZSBhYm9ydGlvbgorOnNlIGNwdD10LGQKKyogdGFnIGV4cGFuc2lvbiwgZGVmaW5lIGFkZC1leHBhbnNpb24gaW50ZXJydXB0ZWQKKyogdC1leHBhbnNpb24KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6c2Ugbm9jcCB2aW1pbmZvKz1udmltaW5mbyBjcHQ9Lix3IGZmPXVuaXggfCAkLTIsJHchWHRlc3RmaWxlIHwgc2V0IGZmJgorF25PI2luY2x1ZGUgIlh0ZXN0ZmlsZSIKK3J1Dg4YDhsBCitPEBgOCisYEBAQEBAKKxgQEBgYDhgODhsKKzpzZSBjcHQ9Lix3LGkKK2tPTQ4YDhgOGBgYEAorGAwYDBAQGworOnNlIGNwdD1rWHRlc3RmaWxlCis6dyBYdGVzdDExLm9uZQorOncgWHRlc3QxMS50d28KK08OG0lYG0EYBg4bCis6c2UgY3B0PXcKK09TVA4QEBAQGworOnNlIGNwdD11IG5vaGlkCisXb09FTg4KK3VubA4YGBAbCis6c2UgY3B0PXQsZCBkZWY9XlxcayogdGFncz1YdGVzdGZpbGUgbm90YWdic2VhcmNoCitPGB0YBBgEGBgEGAQYBBgECithDhsKKzp3cSEgdGVzdC5vdXQKK0VORFRFU1QKKworc3RhcnQgb2YgdGVzdGZpbGUKK3J1bjEKK3J1bjIKK2VuZCBvZiB0ZXN0ZmlsZQorCit0ZXN0MTEJMzZHZXBldG8JL1RhZy8KK2FzZAl0ZXN0MTFmaWxlCTM2RworTWFrZWZpbGUJdG8JcnVuCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzIub2sgYi9zcmMvdGVzdGRpci90ZXN0MzIub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjNDQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzMi5vawpAQCAtMCwwICsxLDE1IEBACisjaW5jbHVkZSAiWHRlc3RmaWxlIgorcnVuMSBydW4zCitydW4zIHJ1bjMKKworTWFrZWZpbGUJdG8JcnVuMworTWFrZWZpbGUJdG8JcnVuMworTWFrZWZpbGUJdG8JcnVuMworWHRlc3QxMS50d28KK1NUQVJUVEVTVAorRU5EVEVTVAordW5sZXNzCit0ZXN0MTFmaWxlCTM2R2VwZXRvCS9UYWcvIGFzZAorYXNkCitydW4xIHJ1bjIKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDMzLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDMzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDQ3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MzMuaW4KQEAgLTAsMCArMSwzNCBAQAorVGVzdCBmb3IgJ2xpc3AnCitJZiB0aGUgbGlzcCBmZWF0dXJlIGlzIG5vdCBlbmFibGVkLCB0aGlzIHdpbGwgZmFpbCEKKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6c2V0IGxpc3AKKy9eKGRlZnVuCis9RzovXihkZWZ1bi8sJHchIHRlc3Qub3V0Cis6cSEKK0VORFRFU1QKKworKGRlZnVuIGh0bWwtZmlsZSAoYmFzZSkKKyhmb3JtYXQgbmlsICJ+KH5BfikuaHRtbCIgYmFzZSkpCisKKyhkZWZtYWNybyBwYWdlIChuYW1lIHRpdGxlICZyZXN0IGJvZHkpCisobGV0ICgodGkgKGdlbnN5bSkpKQorYCh3aXRoLW9wZW4tZmlsZSAoKnN0YW5kYXJkLW91dHB1dCoKKyhodG1sLWZpbGUgLG5hbWUpCis6ZGlyZWN0aW9uIDpvdXRwdXQKKzppZi1leGlzdHMgOnN1cGVyc2VkZSkKKyhsZXQgKCgsdGkgLHRpdGxlKSkKKyhhcyB0aXRsZSAsdGkpCisod2l0aCBjZW50ZXIgCisoYXMgaDIgKHN0cmluZy11cGNhc2UgLHRpKSkpCisoYnJzIDMpCissQGJvZHkpKSkpCisKKzs7OyBVdGlsaXRpZXMgZm9yIGdlbmVyYXRpbmcgbGlua3MKKworKGRlZm1hY3JvIHdpdGgtbGluayAoZGVzdCAmcmVzdCBib2R5KQorYChwcm9nbgorKGZvcm1hdCB0ICI8YSBocmVmPVwifkFcIj4iIChodG1sLWZpbGUgLGRlc3QpKQorLEBib2R5CisocHJpbmMgIjwvYT4iKSkpCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzMub2sgYi9zcmMvdGVzdGRpci90ZXN0MzMub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxZDg3YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzMy5vawpAQCAtMCwwICsxLDIzIEBACisoZGVmdW4gaHRtbC1maWxlIChiYXNlKQorICAoZm9ybWF0IG5pbCAifih+QX4pLmh0bWwiIGJhc2UpKQorCisoZGVmbWFjcm8gcGFnZSAobmFtZSB0aXRsZSAmcmVzdCBib2R5KQorICAobGV0ICgodGkgKGdlbnN5bSkpKQorICAgICAgIGAod2l0aC1vcGVuLWZpbGUgKCpzdGFuZGFyZC1vdXRwdXQqCisJCQkgKGh0bWwtZmlsZSAsbmFtZSkKKwkJCSA6ZGlyZWN0aW9uIDpvdXRwdXQKKwkJCSA6aWYtZXhpc3RzIDpzdXBlcnNlZGUpCisJCQkobGV0ICgoLHRpICx0aXRsZSkpCisJCQkgICAgIChhcyB0aXRsZSAsdGkpCisJCQkgICAgICh3aXRoIGNlbnRlciAKKwkJCQkgICAoYXMgaDIgKHN0cmluZy11cGNhc2UgLHRpKSkpCisJCQkgICAgIChicnMgMykKKwkJCSAgICAgLEBib2R5KSkpKQorCis7OzsgVXRpbGl0aWVzIGZvciBnZW5lcmF0aW5nIGxpbmtzCisKKyhkZWZtYWNybyB3aXRoLWxpbmsgKGRlc3QgJnJlc3QgYm9keSkKKyAgYChwcm9nbgorICAgIChmb3JtYXQgdCAiPGEgaHJlZj1cIn5BXCI+IiAoaHRtbC1maWxlICxkZXN0KSkKKyAgICAsQGJvZHkKKyAgICAocHJpbmMgIjwvYT4iKSkpCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzQuaW4gYi9zcmMvdGVzdGRpci90ZXN0MzQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2MDcwMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzNC5pbgpAQCAtMCwwICsxLDMxIEBACitUZXN0IGZvciB1c2VyIGZ1bmN0aW9ucworCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzpmdW5jdGlvbiBUYWJsZSh0aXRsZSwgLi4uKQorOiAgbGV0IHJldCA9IGE6dGl0bGUKKzogIGxldCBpZHggPSAxCis6ICB3aGlsZSBpZHggPD0gYTowCis6ICAgIGV4ZSAibGV0IHJldCA9IHJldCAuIGE6IiAuIGlkeAorOiAgICBsZXQgaWR4ID0gaWR4ICsgMQorOiAgZW5kd2hpbGUKKzogIHJldHVybiByZXQKKzplbmRmdW5jdGlvbgorOmZ1bmN0aW9uIENvbXB1dGUobjEsIG4yLCBkaXZuYW1lKQorOiAgaWYgYTpuMiA9PSAwCis6ICAgIHJldHVybiAiZmFpbCIKKzogIGVuZGlmCis6ICBleGUgImxldCBnOiIgLiBhOmRpdm5hbWUgLiAiID0gIi4gYTpuMSAvIGE6bjIKKzogIHJldHVybiAib2siCis6ZW5kZnVuY3Rpb24KKzpsZXQgcmV0dmFsID0gIm5vcCIKKy9eaGVyZQorQxI9VGFibGUoInh4eCIsIDQsICJhc2RmIikKKyASPUNvbXB1dGUoNDUsIDAsICJyZXR2YWwiKQorIBI9cmV0dmFsCisgEj1Db21wdXRlKDQ1LCA1LCAicmV0dmFsIikKKyASPXJldHZhbAorGzoud3EhIHRlc3Qub3V0CitFTkRURVNUCisKK2hlcmUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzNC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QzNC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFiNTJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDM0Lm9rCkBAIC0wLDAgKzEgQEAKK3h4eDRhc2RmIGZhaWwgbm9wIG9rIDkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzNS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QzNS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTk3OTExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDM1LmluCkBAIC0wLDAgKzEsMjEgQEAKK1Rlc3QgQ3RybC1BIGFuZCBDdHJsLVgsIHdoaWNoIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGRlY2ltYWwsIGhleGFkZWNpbWFsLAorYW5kIG9jdGFsIG51bWJlcnMuCisKK1NUQVJUVEVTVAorL15zdGFydC1oZXJlCis6c2V0IG5yZm9ybWF0cz1vY3RhbCxoZXgKK2oBMTAyGAFsGGwBNjQBMTI4GCQYCis6c2V0IG5yZm9ybWF0cz1vY3RhbAorMAExMDIYAWwYMgF3NjUBMTI5GGJseDZsRAorOnNldCBucmZvcm1hdHM9aGV4CiswMTAxGGwyNTcYAVR4bGR0IAEgGCAYCis6c2V0IG5yZm9ybWF0cz0KKzAyMDAYbDEwMBh3NzgYAWsKKzokLTMsJHdxISB0ZXN0Lm91dAorRU5EVEVTVAorCitzdGFydC1oZXJlCisxMDAgICAgIDB4MTAwICAgICAwNzcgICAgIDAKKzEwMCAgICAgMHgxMDAgICAgIDA3NyAgICAgCisxMDAgICAgIDB4MTAwICAgICAwNzcgICAgIDB4ZkYgICAgIDB4RmYKKzEwMCAgICAgMHgxMDAgICAgIDA3NyAgICAgCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzUub2sgYi9zcmMvdGVzdGRpci90ZXN0MzUub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzYWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzNS5vawpAQCAtMCwwICsxLDQgQEAKKzAgICAgIDB4MGZmICAgICAwMDAwICAgICAtMQorMCAgICAgMXgxMDAgICAgIDA3Nzc3NzcKKy0xICAgICAweDAgICAgIDA3OCAgICAgMHhGRSAgICAgMHhmZQorLTEwMCAgICAgLTEwMHgxMDAgICAgIDAwMCAgICAgCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzYuaW4gYi9zcmMvdGVzdGRpci90ZXN0MzYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzYjZiNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzNi5pbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzYub2sgYi9zcmMvdGVzdGRpci90ZXN0MzYub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY3MGZjMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzNi5vawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzcuaW4gYi9zcmMvdGVzdGRpci90ZXN0MzcuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhZWEzMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzNy5pbgpAQCAtMCwwICsxLDExNiBAQAorVGVzdCBmb3IgJ3Njcm9sbGJpbmQnLiA8ZXJhbHN0b25AY29tcHV0ZXIub3JnPgorU1RBUlRURVNUCis6c28gc21hbGwudmltCis6c2V0IG5vc2Nyb2xsYmluZAorOnNldCBzY3JvbGxvcHQ9dmVyLGp1bXAKKzpzZXQgc2Nyb2xsb2ZmPTIKKzpzZXQgbm93cmFwCis6c2V0IG5vZXF1YWxhbHdheXMKKzpzZXQgc3BsaXRiZWxvdworOiIgVEVTVCB1c2luZyB0d28gd2luZG93cyBvcGVuIHRvIG9uZSBidWZmZXIsIG9uZSBleHRyYSBlbXB0eSB3aW5kb3cKKzpzcGxpdAorOm5ldworF3Q6Cis6cmVzaXplIDgKKy9ec3RhcnQgb2Ygd2luZG93IDEkLworenQ6Cis6c2V0IHNjcm9sbGJpbmQKKxdqOgorOnJlc2l6ZSA3CisvXnN0YXJ0IG9mIHdpbmRvdyAyJC8KK3p0OgorOnNldCBzY3JvbGxiaW5kCis6IiAtLSBzdGFydCBvZiB0ZXN0cyAtLQorOiIgVEVTVCBzY3JvbGxpbmcgZG93bgorTDVqSHl5F2JwcjAXdEh5eRdicHIxF3RMNmpIeXkXYnByMhdrSHl5F2JwcjM6Cis6IiBURVNUIHNjcm9sbGluZyB1cAorF3RINGsXakgXdEh5eRdicHI0F2tIeXkXYnByNRdrM2sXdEgXakh5eRdicHI2F3RIeXkXYnByNzoKKzoiIFRFU1QgaG9yaXpvbnRhbCBzY3JvbGxpbmcKKzpzZXQgc2Nyb2xsb3B0Kz1ob3IKK2dnInp5eUcienBHF3QwMTV6bHkkF2JwInpwRxdreSQXYnAienBHOgorF2sxMGpIN3poZzB5JBdicCJ6cEcXdEhnMHkkF2JwInpwRzoKKzpzZXQgc2Nyb2xsb3B0LT1ob3IKKzoiICoqKioqKiB0ZXN0cyB1c2luZyB0d28gZGlmZmVyZW50IGJ1ZmZlcnMgKioqKioKKxd0F2o6Cis6Y2xvc2UKKxd0OgorOnNldCBub3Njcm9sbGJpbmQKKzovXnN0YXJ0IG9mIHdpbmRvdyAyJC8sL15lbmQgb2Ygd2luZG93IDIkL3kKKzpuZXcKKxd0F2o0InpwR3A6CisXdC9ec3RhcnQgb2Ygd2luZG93IDEkLworenQ6Cis6c2V0IHNjcm9sbGJpbmQKKxdqOgorL15zdGFydCBvZiB3aW5kb3cgMiQvCit6dDoKKzpzZXQgc2Nyb2xsYmluZAorOiIgLS0gc3RhcnQgb2YgdGVzdHMgLS0KKzoiIFRFU1Qgc2Nyb2xsaW5nIGRvd24KK0w1akh5eRdicHIwF3RIeXkXYnByMRd0TDZqSHl5F2JwcjIXa0h5eRdicHIzOgorOiIgVEVTVCBzY3JvbGxpbmcgdXAKKxd0SDRrF2pIF3RIeXkXYnByNBdrSHl5F2JwcjUXazNrF3RIF2pIeXkXYnByNhd0SHl5F2Jwcjc6Cis6IiBURVNUIGhvcml6b250YWwgc2Nyb2xsaW5nCis6c2V0IHNjcm9sbG9wdCs9aG9yCitnZyJ6eXlHInpwRxd0MDE1emx5JBdicCJ6cEcXa3kkF2JwInpwRzoKKxdrMTBqSDd6aGcweSQXYnAienBHF3RIZzB5JBdicCJ6cEc6Cis6c2V0IHNjcm9sbG9wdC09aG9yCis6IiBURVNUIHN5bmNiaW5kCisXdDpzZXQgbm9zY2IKK2dnTBdqOnNldCBub3NjYgorZ2dMOnNldCBzY2IKKxd0OnNldCBzY2IKK0cXakc6c3luY2JpbmQKK0hrF3RIF2pIeXkXYnAXdHl5F2JwOgorF3Q6c2V0IG5vc2NiCitnZ0wXajpzZXQgbm9zY2IKK2dnTDpzZXQgc2NiCisXdDpzZXQgc2NiCisXdEcXakcXdDpzeW5jYmluZAorSGsXakgXdEh5eRdicBd0F2p5eRdicDoKKxd0SDNrF2pIF3RIeXkXYnAXdBdqeXkXYnA6Cis6IiAqKioqKiBkb25lIHdpdGggdGVzdHMgKioqKioKKzp3ISB0ZXN0Lm91dCAgICAgICAgICAgICAiIFdyaXRlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZQorOnFhIQorRU5EVEVTVAorCisKK3N0YXJ0IG9mIHdpbmRvdyAxCisuIGxpbmUgMDEgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDAxCisuIGxpbmUgMDIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDAyCisuIGxpbmUgMDMgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDAzCisuIGxpbmUgMDQgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA0CisuIGxpbmUgMDUgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA1CisuIGxpbmUgMDYgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA2CisuIGxpbmUgMDcgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA3CisuIGxpbmUgMDggMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA4CisuIGxpbmUgMDkgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA5CisuIGxpbmUgMTAgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDEwCisuIGxpbmUgMTEgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDExCisuIGxpbmUgMTIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDEyCisuIGxpbmUgMTMgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDEzCisuIGxpbmUgMTQgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDE0CisuIGxpbmUgMTUgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDE1CitlbmQgb2Ygd2luZG93IDEKKworCitzdGFydCBvZiB3aW5kb3cgMgorLiBsaW5lIDAxIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwMQorLiBsaW5lIDAyIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwMgorLiBsaW5lIDAzIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwMworLiBsaW5lIDA0IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwNAorLiBsaW5lIDA1IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwNQorLiBsaW5lIDA2IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwNgorLiBsaW5lIDA3IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwNworLiBsaW5lIDA4IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwOAorLiBsaW5lIDA5IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwOQorLiBsaW5lIDEwIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxMAorLiBsaW5lIDExIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxMQorLiBsaW5lIDEyIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxMgorLiBsaW5lIDEzIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxMworLiBsaW5lIDE0IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxNAorLiBsaW5lIDE1IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxNQorLiBsaW5lIDE2IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxNgorZW5kIG9mIHdpbmRvdyAyCisKK2VuZCBvZiB0ZXN0MzcuaW4gKHBsZWFzZSBkb24ndCBkZWxldGUgdGhpcyBsaW5lKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDM3Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDM3Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MDkyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0Mzcub2sKQEAgLTAsMCArMSwzMyBAQAorCiswIGxpbmUgMDUgWllYV1ZVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDA1CisxIGxpbmUgMDUgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA1CisyIGxpbmUgMTEgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDExCiszIGxpbmUgMTEgWllYV1ZVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDExCis0IGxpbmUgMDYgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA2Cis1IGxpbmUgMDYgWllYV1ZVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDA2Cis2IGxpbmUgMDIgWllYV1ZVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDAyCis3IGxpbmUgMDIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDAyCis1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDAyCitVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDAyCisuIGxpbmUgMTEgWllYV1ZVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDExCisuIGxpbmUgMTEgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDExCisKKzAgbGluZSAwNSBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMDUKKzEgbGluZSAwNSAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMDUKKzIgbGluZSAxMSAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMTEKKzMgbGluZSAxMSBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMTEKKzQgbGluZSAwNiAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMDYKKzUgbGluZSAwNiBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMDYKKzYgbGluZSAwMiBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMDIKKzcgbGluZSAwMiAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMDIKKzU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMDIKK1VUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMDIKKy4gbGluZSAxMSBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMTEKKy4gbGluZSAxMSAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMTEKKworLiBsaW5lIDE2IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxNgorOnNldCBzY3JvbGxiaW5kCit6dDoKKy4gbGluZSAxNSBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMTUKKzpzZXQgc2Nyb2xsYmluZAorLiBsaW5lIDExIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxMQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDM4LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDM4LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NWJkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MzguaW4KQEAgLTAsMCArMSwzMyBAQAorCitUZXN0IFZpcnR1YWwgcmVwbGFjZSBtb2RlLgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KK2dnZEdhCithYmNkZWZnaGkKK2prCWxtbgorICAgIG9wcQlyc3QKKwR1dnd4eXoKKxtnZzpzZXQgYWkKKzpzZXQgYnM9MgorZ1IwBCAxCitBCitCQ0RFRkdISUoKKwlLTAorTU5PCitQUVIbRzprYQorbzAECithYmNkZWZnaGkKK2prCWxtbgorICAgIG9wcQlyc3QKKwR1dnd4eXoKKxsnYWpnUjAEIDEKK0EKK0JDREVGR0hJSgorCUtMCitNTk8KK1BRUggICAgICAgICAgICAgICAgICAgICAgICAgICAgIGzokCitpYWIJY2RlZmdoaQlqa2wbMGdSQUIuLi4uLi5DREVGR0hJLkobbxs6CitpYWJjZGVmZ2hpamtsbW5vcHFyc3QbMGdSQUIJSUpLTE1OTwlRUhs6d3EhIHRlc3Qub3V0CitFTkRURVNUCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzOC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QzOC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTAyMDk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDM4Lm9rCkBAIC0wLDAgKzEsMTMgQEAKKyAxCisgQQorIEJDREVGR0hJSgorIAlLTAorCU1OTworCVBRUgorIDEKK2FiY2RlZmdoaQoramsJbG1uCisgICAgb3BxCXJzdAordXZ3eHl6CitBQi4uLi4uLkNERUZHSEkuSmtsCitBQglJSktMTU5PCVFSc3QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzOS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QzOS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2YyOTRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDM5LmluCkBAIC0wLDAgKzEsMjQgQEAKKworVGVzdCBWaXN1YWwgYmxvY2sgbW9kZSBjb21tYW5kcworCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKy9eYWJjZGUKKzoiIFRlc3Qgc2hpZnQtcmlnaHQgb2YgYSBibG9jaworamxsbGwWamo+d2xsFmpsbGw+Cis6IiBUZXN0IHNoaWZ0LWxlZnQgb2YgYSBibG9jaworRyRoaGhoFmtrPAorOiIgVGVzdCBibG9jay1pbnNlcnQKK0drbBZra2tJeHl6GworOiIgVGVzdCBibG9jay1yZXBsYWNlCitHbGxsbBZra2tsbGxycQorOiIgVGVzdCBibG9jay1jaGFuZ2UKK0cka2hoaBZoaGtrY21ubxsKKzokLTQsJHdxISB0ZXN0Lm91dAorRU5EVEVTVAorCithYmNkZWZnaGlqa2xtCithYmNkZWZnaGlqa2xtCithYmNkZWZnaGlqa2xtCithYmNkZWZnaGlqa2xtCithYmNkZWZnaGlqa2xtCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0Mzkub2sgYi9zcmMvdGVzdGRpci90ZXN0Mzkub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZhMjg2NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzOS5vawpAQCAtMCwwICsxLDUgQEAKK2F4eXpiY2RlZmdoaWprbG0KK2F4eXpxcXFxICAgbW5vCSAgICAgIGdoaWprbG0KK2F4eXpxcXFxZWYgbW5vICAgICAgICBnaGlqa2xtCitheHl6cXFxcWVmZ21ub2tsbQorYWJjZHFxcXFpamtsbQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQuaW4gYi9zcmMvdGVzdGRpci90ZXN0NC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWEyZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQuaW4KQEAgLTAsMCArMSwzMSBAQAorVGVzdCBmb3IgYXV0b2NvbW1hbmQgdGhhdCBjaGFuZ2VzIGN1cnJlbnQgYnVmZmVyIG9uIEJ1ZkVudGVyIGV2ZW50LgorQ2hlY2sgaWYgbW9kZWxpbmVzIGFyZSBpbnRlcnByZXRlZCBmb3IgdGhlIGNvcnJlY3QgYnVmZmVyLgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzpzZXQgbm9jb21wYXRpYmxlIHZpbWluZm8rPW52aW1pbmZvCis6YXUgQnVmRW50ZXIgWHh4IGJyZXcKKy9zdGFydCBvZgorOi4sL2VuZCBvZi93ISBYeHggICAiIHdyaXRlIHRlc3QgZmlsZSBYeHgKKzpzZXQgYWkgbW9kZWxpbmUgbW9kZWxpbmVzPTMKKzpzcCBYeHggICAgICAgICAgICAgIiBzcGxpdCB0byBYeHgsIGF1dG9jbWQgd2lsbCBkbyA6YnJldworRz90aGlzIGlzIGEKK290aGlzIHNob3VsZCBiZSBhdXRvLWluZGVudGVkGworOiAgICAgICAgICAgICAgICAgICAiIEFwcGVuZCB0ZXh0IHdpdGggYXV0b2luZGVudCB0byB0aGlzIGZpbGUKKzphdSEgQnVmRW50ZXIgWHh4Cis6YnVmIFh4eCAgICAgICAgICAgICIgZ28gdG8gWHh4LCBubyBhdXRvY21kIGFueW1vcmUKK0c/dGhpcyBpcyBhCitvdGhpcyBzaG91bGQgYmUgaW4gY29sdW1uIDEbOndxICIgYXBwZW5kIHRleHQgd2l0aG91dCBhdXRvaW5kZW50IHRvIFh4eAorRzpyIFh4eCAgICAgICAgICAgICAiIGluY2x1ZGUgWHh4IGluIHRoZSBjdXJyZW50IGZpbGUKKzo/c3RhcnRzdGFydD8sJHchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKK3N0YXJ0c3RhcnQKK3N0YXJ0IG9mIHRlc3QgZmlsZSBYeHgKK3ZpbTogc2V0IG5vYWkgOgorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CitlbmQgb2YgdGVzdCBmaWxlIFh4eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQub2sgYi9zcmMvdGVzdGRpci90ZXN0NC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZlY2RhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQub2sKQEAgLTAsMCArMSwxNyBAQAorc3RhcnRzdGFydAorc3RhcnQgb2YgdGVzdCBmaWxlIFh4eAordmltOiBzZXQgbm9haSA6CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIHNob3VsZCBiZSBhdXRvLWluZGVudGVkCitlbmQgb2YgdGVzdCBmaWxlIFh4eAorc3RhcnQgb2YgdGVzdCBmaWxlIFh4eAordmltOiBzZXQgbm9haSA6CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKK3RoaXMgc2hvdWxkIGJlIGluIGNvbHVtbiAxCitlbmQgb2YgdGVzdCBmaWxlIFh4eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQwLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQwLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZmI2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDAuaW4KQEAgLTAsMCArMSw2MyBAQAorVGVzdCBmb3IgIipDbWQiIGF1dG9jb21tYW5kcworCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzovXnN0YXJ0LywkdyEgWHh4CQkiIHdyaXRlIGxpbmVzIGJlbG93IHRvIFh4eAorOmF1IEJ1ZlJlYWRDbWQgdGVzdEEgMHIgWHh4fCRkZWwKKzplIHRlc3RBCQkJIiB3aWxsIHJlYWQgdGV4dCBvZiBYeGQgaW5zdGVhZAorOmF1IEJ1ZldyaXRlQ21kIHRlc3RBIGNhbGwgYXBwZW5kKGxpbmUoIiQiKSwgIndyaXRlIikKKzp3CQkJCSIgd2lsbCBhcHBlbmQgYSBsaW5lIHRvIHRoZSBmaWxlCis6ciB0ZXN0QQkJCSIgc2hvdWxkIG5vdCByZWFkIGFueXRoaW5nCis6CQkJCSIgbm93IHdlIGhhdmU6Cis6CQkJCSIgMQlzdGFydCBvZiBYeHgKKzoJCQkJIiAyCQl0ZXN0NDAKKzoJCQkJIiAzCWVuZCBvZiBYeHgKKzoJCQkJIiA0CXdyaXRlCis6YXUgRmlsZVJlYWRDbWQgdGVzdEIgJ1tyIFh4eAorOjJyIHRlc3RCCQkJIiB3aWxsIHJlYWQgWHh4IGJlbG93IGxpbmUgMiBpbnN0ZWFkCis6CQkJCSIgMQlzdGFydCBvZiBYeHgKKzoJCQkJIiAyCQl0ZXN0NDAKKzoJCQkJIiAzCXN0YXJ0IG9mIFh4eAorOgkJCQkiIDQJCXRlc3Q0MAorOgkJCQkiIDUJZW5kIG9mIFh4eAorOgkJCQkiIDYJZW5kIG9mIFh4eAorOgkJCQkiIDcJd3JpdGUKKzphdSBGaWxlV3JpdGVDbWQgdGVzdEMgJ1ssJ11jb3B5ICQKKzRHQTEbCis6NCw1dyB0ZXN0QwkJCSIgd2lsbCBjb3B5IGxpbmVzIDQgYW5kIDUgdG8gdGhlIGVuZAorOnIgdGVzdEMJCQkiIHNob3VsZCBub3QgcmVhZCBhbnl0aGluZworOgkJCQkiIDEJc3RhcnQgb2YgWHh4Cis6CQkJCSIgMgkJdGVzdDQwCis6CQkJCSIgMwlzdGFydCBvZiBYeHgKKzoJCQkJIiA0CQl0ZXN0NDAxCis6CQkJCSIgNQllbmQgb2YgWHh4Cis6CQkJCSIgNgllbmQgb2YgWHh4Cis6CQkJCSIgNwl3cml0ZQorOgkJCQkiIDgJCXRlc3Q0MDEKKzoJCQkJIiA5CWVuZCBvZiBYeHgKKzphdSBGSUxFQXBwZW5kQ21kIHRlc3REICdbLCdddyEgdGVzdC5vdXQKKzp3ID4+dGVzdEQJCQkiIHdpbGwgd3JpdGUgYWxsIGxpbmVzIHRvIHRlc3Qub3V0Cis6JHIgdGVzdEQJCQkiIHNob3VsZCBub3QgcmVhZCBhbnl0aGluZworOiR3ID4+dGVzdC5vdXQJCQkiIGFwcGVuZCAiZW5kIG9mIFh4eCIgdG8gdGVzdC5vdXQKKzphdSBCdWZSZWFkQ21kIHRlc3RFIDByIHRlc3Qub3V0fCRkZWwKKzpzcCB0ZXN0RQkJCSIgc3BsaXQgd2luZG93IHdpdGggdGVzdC5vdXQKKzVHb2FzZGYbFxc6IgorOmF1IEJ1ZldyaXRlQ21kIHRlc3RFIHchIHRlc3Qub3V0Cis6d2FsbAkJCQkiIHdpbGwgd3JpdGUgb3RoZXIgd2luZG93IHRvIHRlc3Qub3V0Cis6CQkJCSIgMQlzdGFydCBvZiBYeHgKKzoJCQkJIiAyCQl0ZXN0NDAKKzoJCQkJIiAzCXN0YXJ0IG9mIFh4eAorOgkJCQkiIDQJCXRlc3Q0MDEKKzoJCQkJIiA1CWVuZCBvZiBYeHgKKzoJCQkJIiA2CWFzZGYKKzoJCQkJIiA3CWVuZCBvZiBYeHgKKzoJCQkJIiA4CXdyaXRlCis6CQkJCSIgOQkJdGVzdDQwMQorOgkJCQkiIDEwCWVuZCBvZiBYeHgKKzoJCQkJIiAxMQllbmQgb2YgWHh4Cis6cWEhCitFTkRURVNUCisKK3N0YXJ0IG9mIFh4eAorCXRlc3Q0MAorZW5kIG9mIFh4eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQwLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDQwLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NTAxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDAub2sKQEAgLTAsMCArMSwxMSBAQAorc3RhcnQgb2YgWHh4CisJdGVzdDQwCitzdGFydCBvZiBYeHgKKwl0ZXN0NDAxCitlbmQgb2YgWHh4Cithc2RmCitlbmQgb2YgWHh4Cit3cml0ZQorCXRlc3Q0MDEKK2VuZCBvZiBYeHgKK2VuZCBvZiBYeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0MS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3Q0MS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDI5NGNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQxLmluCkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgZm9yIHdyaXRpbmcgYW5kIHJlYWRpbmcgYSBmaWxlIG9mIG92ZXIgMTAwIEtieXRlCisKKzEgbGluZTogIlRoaXMgaXMgdGhlIHN0YXJ0IgorMzAwMSBsaW5lczogIlRoaXMgaXMgdGhlIGxlYWRlciIKKzEgbGluZTogIlRoaXMgaXMgdGhlIG1pZGRsZSIKKzMwMDEgbGluZXM6ICJUaGlzIGlzIHRoZSB0cmFpbGVyIgorMSBsaW5lOiAiVGhpcyBpcyB0aGUgZW5kIgorCitTVEFSVFRFU1QKKzolZAorYVRoaXMgaXMgdGhlIHN0YXJ0CitUaGlzIGlzIHRoZSBsZWFkZXIKK1RoaXMgaXMgdGhlIG1pZGRsZQorVGhpcyBpcyB0aGUgdHJhaWxlcgorVGhpcyBpcyB0aGUgZW5kG2tZMzAwMHAyR1kzMDAwcAorOnchIFh0ZXN0Cis6JWQKKzplISBYdGVzdAorOi53ISB0ZXN0Lm91dAorMzAwM0c6LncgPj50ZXN0Lm91dAorNjAwNUc6LncgPj50ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDEub2sgYi9zcmMvdGVzdGRpci90ZXN0NDEub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4ZTVmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0MS5vawpAQCAtMCwwICsxLDMgQEAKK1RoaXMgaXMgdGhlIHN0YXJ0CitUaGlzIGlzIHRoZSBtaWRkbGUKK1RoaXMgaXMgdGhlIGVuZApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQyLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQyLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTU2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDIuaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQyLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDQyLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjQxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDIub2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQzLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZjBlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDMuaW4KQEAgLTAsMCArMSwyNyBAQAorVGVzdHMgZm9yIHJlZ2V4cCB3aXRoIHZhcmlvdXMgbWFnaWMgc2V0dGluZ3MuCisKK1NUQVJUVEVTVAorOnNldCBub2NvbXBhdGlibGUgdmltaW5mbys9bnZpbWluZm8KKy9eMQorL2EqYlx7Mn1jXCsvZQoreC9cTWRcKmVcezJ9ZlwrL2UKK3g6c2V0IG5vbWFnaWMKKy9nXCpoXHsyfWlcKy9lCit4L1xtaiprXHsyfWxcKy9lCit4L1x2bSpuezJ9bysvZQoreC9cVl5hYSQKK3g6c2V0IG1hZ2ljCisvXHYoYSkoYilcMlwxXDEvZQoreC9cVlthYl1cKFxbeHldXClcMQoreDo/XjE/LCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCisxIGEgYWEgYWJiIGFiYmNjYworMiBkIGRkIGRlZSBkZWVmZmYKKzMgZyBnZyBnaGggZ2hoaWlpCis0IGogamogamtrIGpra2xsbAorNSBtIG1tIG1ubiBtbm5vb28KKzYgeCBeYWEkIHgKKzcgKGEpKGIpIGFiYmFhCis4IGF4eCBbYWJdeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0My5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q0My5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjUzMTZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQzLm9rCkBAIC0wLDAgKzEsOCBAQAorMSBhIGFhIGFiYiBhYmJjYworMiBkIGRkIGRlZSBkZWVmZgorMyBnIGdnIGdoaCBnaGhpaQorNCBqIGpqIGprayBqa2tsbAorNSBtIG1tIG1ubiBtbm5vbworNiB4IGFhJCB4Cis3IChhKShiKSBhYmJhCis4IGF4eCBhYl14eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQ0LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQ0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MGE5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDQuaW4KQEAgLTAsMCArMSwzNyBAQAorVGVzdHMgZm9yIHJlZ2V4cCB3aXRoIG11bHRpLWJ5dGUgZW5jb2RpbmcgYW5kIHZhcmlvdXMgbWFnaWMgc2V0dGluZ3MuCisKK1NUQVJUVEVTVAorOnNvIG1ieXRlLnZpbQorOnNldCBub2NvbXBhdGlibGUgZW5jb2Rpbmc9dXRmLTggdGVybWVuY29kaW5nPWxhdGluMSB2aW1pbmZvKz1udmltaW5mbworL14xCisvYSpiXHsyfWNcKy9lCit4L1xNZFwqZVx7Mn1mXCsvZQoreDpzZXQgbm9tYWdpYworL2dcKmhcezJ9aVwrL2UKK3gvXG1qKmtcezJ9bFwrL2UKK3gvXHZtKm57Mn1vKy9lCit4L1xWXmFhJAoreDpzZXQgbWFnaWMKKy9cdihhKShiKVwyXDFcMS9lCit4L1xWW2FiXVwoXFt4eV1cKVwxCit4OiIgTm93IHNlYXJjaCBmb3IgbXVsdGktYnl0ZSB3aXRob3V0IGNvbXBvc2luZyBjaGFyCisv4LihCit4OiIgTm93IHNlYXJjaCBmb3IgbXVsdGktYnl0ZSB3aXRoIGNvbXBvc2luZyBjaGFyCisv4Lih4LmICit4OiIgZmluZCB3b3JkIGJ5IGNoYW5nZSBvZiB3b3JkIGNsYXNzCisv44GhXDzjgqvjg6hcPuOBrworeDo/XjE/LCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCisxIGEgYWEgYWJiIGFiYmNjYworMiBkIGRkIGRlZSBkZWVmZmYKKzMgZyBnZyBnaGggZ2hoaWlpCis0IGogamogamtrIGpra2xsbAorNSBtIG1tIG1ubiBtbm5vb28KKzYgeCBeYWEkIHgKKzcgKGEpKGIpIGFiYmFhCis4IGF4eCBbYWJdeHgKKzkg4Lir4Lih4LmIeCDguK3guKF4CithIOC4reC4oXgg4Lir4Lih4LmIeAorYiDjgaHjgqvjg6jjga8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0NC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q0NC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjg1MDc2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQ0Lm9rCkBAIC0wLDAgKzEsMTEgQEAKKzEgYSBhYSBhYmIgYWJiY2MKKzIgZCBkZCBkZWUgZGVlZmYKKzMgZyBnZyBnaGggZ2hoaWkKKzQgaiBqaiBqa2sgamtrbGwKKzUgbSBtbSBtbm4gbW5ub28KKzYgeCBhYSQgeAorNyAoYSkoYikgYWJiYQorOCBheHggYWJdeHgKKzkg4Lir4Lih4LmIeCDguK14CithIOC4reC4oXgg4LireAorYiDjgqvjg6jjga8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0NS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3Q0NS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODUzN2YzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQ1LmluCkBAIC0wLDAgKzEsNzIgQEAKK1Rlc3RzIGZvciBmb2xkaW5nLiB2aW06IHNldCBmdD12aW0gOgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzoiIFdlIGFsc28gbmVlZCB0aGUgK3N5bnRheCBmZWF0dXJlIGhlcmUuCis6aWYgIWhhcygic3ludGF4IikKKyAgIGUhIHRlc3Qub2sKKyAgIHchIHRlc3Qub3V0CisgICBxYSEKKzplbmRpZgorOiIgYmFzaWMgdGVzdCBpZiBhIGZvbGQgY2FuIGJlIGNyZWF0ZWQsIG9wZW5lZCwgbW92aW5nIHRvIHRoZSBlbmQgYW5kIGNsb3NlZAorL14xCit6ZjJqOmNhbGwgYXBwZW5kKCIkIiwgIm1hbnVhbCAiIC4gZ2V0bGluZShmb2xkY2xvc2VkKCIuIikpKQorem86Y2FsbCBhcHBlbmQoIiQiLCBmb2xkY2xvc2VkKCIuIikpCitdejpjYWxsIGFwcGVuZCgiJCIsIGdldGxpbmUoIi4iKSkKK3pjOmNhbGwgYXBwZW5kKCIkIiwgZ2V0bGluZShmb2xkY2xvc2VkKCIuIikpKQorOiIgdGVzdCBmb2xkaW5nIHdpdGggbWFya2Vycy4KKzpzZXQgZmRtPW1hcmtlciBmZGw9MSBmZGM9MworL141Cis6Y2FsbCBhcHBlbmQoIiQiLCAibWFya2VyICIgLiBmb2xkbGV2ZWwoIi4iKSkKK1t6OmNhbGwgYXBwZW5kKCIkIiwgZm9sZGxldmVsKCIuIikpCitqb3t7IBtye2pqOmNhbGwgYXBwZW5kKCIkIiwgZm9sZGxldmVsKCIuIikpCitrWXBqOmNhbGwgYXBwZW5kKCIkIiwgZm9sZGxldmVsKCIuIikpCis6IiB0ZXN0IGZvbGRpbmcgd2l0aCBpbmRlbnQKKzpzZXQgZmRtPWluZGVudCBzdz0yCisvXjIgYgoraSAgG2pJICAgIBs6Y2FsbCBhcHBlbmQoIiQiLCAiaW5kZW50ICIgLiBmb2xkbGV2ZWwoIi4iKSkKK2s6Y2FsbCBhcHBlbmQoIiQiLCBmb2xkbGV2ZWwoIi4iKSkKKzoiIHRlc3Qgc3ludGF4IGZvbGRpbmcKKzpzZXQgZmRtPXN5bnRheCBmZGw9MAorOnN5biByZWdpb24gSHVwIHN0YXJ0PSJkZCIgZW5kPSJoaCIgZm9sZAorR3prOmNhbGwgYXBwZW5kKCIkIiwgImZvbGRpbmcgIiAuIGdldGxpbmUoIi4iKSkKK2s6Y2FsbCBhcHBlbmQoIiQiLCBnZXRsaW5lKCIuIikpCis6IiB0ZXN0IGV4cHJlc3Npb24gZm9sZGluZworOmZ1biBGbHZsKCkKKyAgbGV0IGwgPSBnZXRsaW5lKHY6bG51bSkKKyAgaWYgbCA9fiAiYmIkIgorICAgIHJldHVybiAyCisgIGVsc2VpZiBsID1+ICJnZyQiCisgICAgcmV0dXJuICJzMSIKKyAgZWxzZWlmIGwgPX4gImlpJCIKKyAgICByZXR1cm4gIj4yIgorICBlbHNlaWYgbCA9fiAia2skIgorICAgIHJldHVybiAiMCIKKyAgZW5kaWYKKyAgcmV0dXJuICI9IgorZW5kZnVuCis6c2V0IGZkbT1leHByIGZkZT1GbHZsKCkKKy9iYiQKKzpjYWxsIGFwcGVuZCgiJCIsICJleHByICIgLiBmb2xkbGV2ZWwoIi4iKSkKKy9oaCQKKzpjYWxsIGFwcGVuZCgiJCIsIGZvbGRsZXZlbCgiLiIpKQorL2lpJAorOmNhbGwgYXBwZW5kKCIkIiwgZm9sZGxldmVsKCIuIikpCisva2skCis6Y2FsbCBhcHBlbmQoIiQiLCBmb2xkbGV2ZWwoIi4iKSkKKzovXmxhc3QvKzEsJHchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKzEgYWEKKzIgYmIKKzMgY2MKKzQgZGQge3t7Cis1IGVlIHt7eyB9fX0KKzYgZmYgfX19Cis3IGdnCis4IGhoCis5IGlpCithIGpqCitiIGtrCitsYXN0CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDUub2sgYi9zcmMvdGVzdGRpci90ZXN0NDUub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhMTM4MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0NS5vawpAQCAtMCwwICsxLDE2IEBACittYW51YWwgMSBhYQorLTEKKzMgY2MKKzEgYWEKK21hcmtlciAyCisxCisxCiswCitpbmRlbnQgMgorMQorZm9sZGluZyA4IGhoCisgICAgMyBjYworZXhwciAyCisxCisyCiswCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDYuaW4gYi9zcmMvdGVzdGRpci90ZXN0NDYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5ZGI3NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0Ni5pbgpAQCAtMCwwICsxLDI3IEBACitUZXN0cyBmb3IgbXVsdGktbGluZSByZWdleHBzIHdpdGggIjpzIi4gdmltOiBzZXQgZnQ9dmltIDoKKworU1RBUlRURVNUCis6IiB0ZXN0IGlmIHJlcGxhY2luZyBhIGxpbmUgYnJlYWsgd29ya3Mgd2l0aCBhIGJhY2sgcmVmZXJlbmNlCis6L14xLywvXjIvcy9cblwoLlwpLyBcMS8KKzoiIHRlc3QgaWYgaW5zZXJ0aW5nIGEgbGluZSBicmVhayB3b3JrcyB3aXRoIGEgYmFjayByZWZlcmVuY2UKKzovXjMvLC9eNC9zL1woLlwpJC9cclwxLworOiIgdGVzdCBpZiByZXBsYWNpbmcgYSBsaW5lIGJyZWFrIHdpdGggYW5vdGhlciBsaW5lIGJyZWFrIHdvcmtzCis6L141LywvXjYvcy9cKFxfZFx7M31cKS94XDF4LworOi9eMS8sJHchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKzEgYWEKK2JiCitjYworMiBkZAorZWUKKzMgZWYKK2doCis0IGlqCis1IGE4Cis4YiBjOQorOWQKKzYgZTcKKzc3ZgoreHh4eHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0Ni5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q0Ni5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWIzNTNkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQ2Lm9rCkBAIC0wLDAgKzEsMTMgQEAKKzEgYWEgYmIgY2MgMiBkZCBlZQorMyBlCitmCitnCitoCis0IGkKK2oKKzUgYXg4Cis4eGIgY3g5Cis5eGQKKzYgZXg3Cis3eDdmCit4eHh4eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQ3LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQ3LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YmI5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDcuaW4KQEAgLTAsMCArMSw0NCBAQAorVGVzdHMgZm9yIHZlcnRpY2FsIHNwbGl0cyBhbmQgZmlsbGVyIGxpbmVzIGluIGRpZmYgbW9kZQorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKy9eMQoreUc6bmV3Citwa2RkOnchIFh0ZXN0CitkZEdwa2tyWG94eHgbOnchIFh0ZXN0MgorOmZpbGUgTm9wCitnZ295eXkbampqb3p6enobCis6dmVydCBkaWZmc3BsaXQgWHRlc3QKKzp2ZXJ0IGRpZmZzcGxpdCBYdGVzdDIKKzoiIGp1bXAgdG8gc2Vjb25kIHdpbmRvdyBmb3IgYSBtb21lbnQgdG8gaGF2ZSBmaWxsZXIgbGluZSBhcHBlYXIgYXQgc3RhcnQgb2YKKzoiIGZpcnN0IHdpbmRvdworFxdnZxdwZ2c6bGV0IG9uZSA9IHdpbmxpbmUoKQorajpsZXQgb25lID0gb25lIC4gIi0iIC4gd2lubGluZSgpCitqOmxldCBvbmUgPSBvbmUgLiAiLSIgLiB3aW5saW5lKCkKK2o6bGV0IG9uZSA9IG9uZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgb25lID0gb25lIC4gIi0iIC4gd2lubGluZSgpCitqOmxldCBvbmUgPSBvbmUgLiAiLSIgLiB3aW5saW5lKCkKKxcXZ2c6bGV0IHR3byA9IHdpbmxpbmUoKQorajpsZXQgdHdvID0gdHdvIC4gIi0iIC4gd2lubGluZSgpCitqOmxldCB0d28gPSB0d28gLiAiLSIgLiB3aW5saW5lKCkKK2o6bGV0IHR3byA9IHR3byAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdHdvID0gdHdvIC4gIi0iIC4gd2lubGluZSgpCisXF2dnOmxldCB0aHJlZSA9IHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorFxc6Y2FsbCBhcHBlbmQoIiQiLCBvbmUpCis6Y2FsbCBhcHBlbmQoIiQiLCB0d28pCis6Y2FsbCBhcHBlbmQoIiQiLCB0aHJlZSkKKzokLTIsJHchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKzEgYWEKKzIgYmIKKzMgY2MKKzQgZGQKKzUgZWUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0Ny5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q0Ny5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA3YjkzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQ3Lm9rCkBAIC0wLDAgKzEsMyBAQAorMi00LTUtNi04LTkKKzEtMi00LTUtOAorMi0zLTQtNS02LTctOApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQ4LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQ4LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNzlmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDguaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQ4Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDQ4Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmY2JlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDgub2sKQEAgLTAsMCArMSwyMSBAQAora2V5d29yZCBrZXl3b3JkCithbGwgeW91ciBiYXNlIAorYXJlIGJlbG9uZyB0byB2aW0KKzEgMiAzIDQgNSA3CisnaScgICA8LS0gc2hvdWxkIGJlIDMgJyAnCisnQycgICA8LS0gc2hvdWxkIGJlIDMgJyAnCisnYScgICAgPC0tIHNob3VsZCBiZSA0ICcgJworJ0EnPC0tIHNob3VsZCBiZSAwICcgJworJ0QnICAgPC0tICdEJyBzaG91bGQgYmUgaW50YWN0Cit0aGlzIGlzIGEgdGVzdAordGhpcyBpcyBhIHRlc3QKK3RoaXMgaXMgYSB0ZXN0CisiciIgICAgeDwtLSBzaG91bGQgYmUgJ3gnCitbVGhpcyBsaW5lIHNob3VsZCBjb250YWluIG9ubHkgdGhlIHRleHQgYmV0d2VlbiB0aGUgYnJhY2tldHMuXQorICAgdiAgIGkgICBtICAgPC0tIHNob3VsZCBzaG93IHRoZSBuYW1lIG9mIGEgbm90ZWQgdGV4dCBlZGl0b3IKKyAgICA2ICAgLiAgIDAgICA8LS0gYW5kIGl0cyB2ZXJzaW9uIG51bWJlcgorCithCithCithCisgCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDkuaW4gYi9zcmMvdGVzdGRpci90ZXN0NDkuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMxN2QyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0OS5pbgpAQCAtMCwwICsxLDEzIEBACitUaGlzIGlzIGEgdGVzdCBvZiB0aGUgc2NyaXB0IGxhbmd1YWdlLgorCitJZiBhZnRlciBhZGRpbmcgYSBuZXcgdGVzdCwgdGhlIHRlc3Qgb3V0cHV0IGRvZXNuJ3QgYXBwZWFyIHByb3Blcmx5IGluCit0ZXN0NDkuZmFpbGVkLCB0cnkgdG8gYWRkIG9uZSBvcmUgbW9yZSAiRyJzIGF0IHRoZSBsaW5lIGJlZm9yZSBFTkRURVNULgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzpzZSBub2NwIG5vbW9yZSB2aW1pbmZvKz1udmltaW5mbworOnNvIHRlc3Q0OS52aW0KK0dHR0dHR0dHR0cicnA6Li0sJHdxISB0ZXN0Lm91dAorRU5EVEVTVAorCitSZXN1bHRzIG9mIHRlc3Q0OS52aW06CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDkub2sgYi9zcmMvdGVzdGRpci90ZXN0NDkub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0MmFmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0OS5vawpAQCAtMCwwICsxLDkyIEBACitSZXN1bHRzIG9mIHRlc3Q0OS52aW06CisqKiogVGVzdCAgIDE6IE9LICgzNDY5NSkKKyoqKiBUZXN0ICAgMjogT0sgKDM0Njk1KQorKioqIFRlc3QgICAzOiBPSyAoMTM4NDY0ODE5NSkKKyoqKiBUZXN0ICAgNDogT0sgKDMyODgzKQorKioqIFRlc3QgICA1OiBPSyAoMzI4ODMpCisqKiogVGVzdCAgIDY6IE9LICg2MDM5Nzg5NDcpCisqKiogVGVzdCAgIDc6IE9LICg5MDU2MykKKyoqKiBUZXN0ICAgODogT0sgKDU2MjQ5MzQzMSkKKyoqKiBUZXN0ICAgOTogT0sgKDM2MykKKyoqKiBUZXN0ICAxMDogT0sgKDU1OTYxNSkKKyoqKiBUZXN0ICAxMTogT0sgKDIwNDkpCisqKiogVGVzdCAgMTI6IE9LICgzNTIyNTYpCisqKiogVGVzdCAgMTM6IE9LICgxNDUpCisqKiogVGVzdCAgMTQ6IE9LICg0MjQxMykKKyoqKiBUZXN0ICAxNTogT0sgKDQyNDEzKQorKioqIFRlc3QgIDE2OiBPSyAoODcyMikKKyoqKiBUZXN0ICAxNzogT0sgKDI4NTEyNzk5MykKKyoqKiBUZXN0ICAxODogT0sgKDY3MjI0NTgzKQorKioqIFRlc3QgIDE5OiBPSyAoNjkyNzU5NzMpCisqKiogVGVzdCAgMjA6IE9LICgxODc0NTc1MDg1KQorKioqIFRlc3QgIDIxOiBPSyAoMTQ3OTMyMjI1KQorKioqIFRlc3QgIDIyOiBPSyAoNDE2MSkKKyoqKiBUZXN0ICAyMzogT0sgKDQ5KQorKioqIFRlc3QgIDI0OiBPSyAoNDEpCisqKiogVGVzdCAgMjU6IE9LICgyNjAxNzc4MTEpCisqKiogVGVzdCAgMjY6IE9LICgxNjgxNTAwNDc2KQorKioqIFRlc3QgIDI3OiBPSyAoMTk5NjQ1OSkKKyoqKiBUZXN0ICAyODogT0sgKDE5OTY0NTkpCisqKiogVGVzdCAgMjk6IE9LICgxNzA0Mjg1NTUpCisqKiogVGVzdCAgMzA6IE9LICgxOTA5MDUxNzMpCisqKiogVGVzdCAgMzE6IE9LICgxOTA5MDUxNzMpCisqKiogVGVzdCAgMzI6IE9LICgzNTQ4MzMwNjcpCistLS0gVGVzdCAgMzM6IHN1bSA9IDE3ODI3NTYwMCAob2spCisqKiogVGVzdCAgMzM6IE9LICgxMjE2OTA3NTM4KQorKioqIFRlc3QgIDM0OiBPSyAoMjE0NjU4NDg2OCkKKyoqKiBUZXN0ICAzNTogT0sgKDIxNDY1ODQ4NjgpCisqKiogVGVzdCAgMzY6IE9LICgxMDcxNjQ0NjcyKQorKioqIFRlc3QgIDM3OiBPSyAoMTA3MTY0NDY3MikKKyoqKiBUZXN0ICAzODogT0sgKDM1NzkwODQ4MCkKKyoqKiBUZXN0ICAzOTogT0sgKDM1NzkwODQ4MCkKKyoqKiBUZXN0ICA0MDogT0sgKDM1NzkwODQ4MCkKKyoqKiBUZXN0ICA0MTogT0sgKDMwNzYwOTUpCisqKiogVGVzdCAgNDI6IE9LICgxNTA1MTU1OTQ5KQorKioqIFRlc3QgIDQzOiBPSyAoMTE1Nzc2MzMyOSkKKyoqKiBUZXN0ICA0NDogT0sgKDEwMzE3NjE0MDcpCisqKiogVGVzdCAgNDU6IE9LICgxMTU3NzYzMzI5KQorKioqIFRlc3QgIDQ2OiBPSyAoNzM5NDA3KQorKioqIFRlc3QgIDQ3OiBPSyAoMzcxMjEzOTM1KQorKioqIFRlc3QgIDQ4OiBPSyAoNzU2MjU1NDYxKQorKioqIFRlc3QgIDQ5OiBPSyAoMTc5MDAwNjY5KQorKioqIFRlc3QgIDUwOiBPSyAoMzYzNTUwMDQ1KQorKioqIFRlc3QgIDUxOiBPSyAoNDA3NDQ2NjcpCisqKiogVGVzdCAgNTI6IE9LICgxMjQ3MTEyMDExKQorKioqIFRlc3QgIDUzOiBPSyAoMTMxMDcxKQorKioqIFRlc3QgIDU0OiBPSyAoMjA0NykKKyoqKiBUZXN0ICA1NTogT0sgKDEwMjMpCisqKiogVGVzdCAgNTY6IE9LICg1MTEpCisqKiogVGVzdCAgNTc6IE9LICgyMTQ3NDUwODgwKQorKioqIFRlc3QgIDU4OiBPSyAoNjI0OTQ1KQorKioqIFRlc3QgIDU5OiBPSyAoMjAzODQzMTc0MykKKyoqKiBUZXN0ICA2MDogT0sgKDMxMTUxMTMzOSkKKyoqKiBUZXN0ICA2MTogT0sgKDM3NDg4OTUxNykKKyoqKiBUZXN0ICA2MjogT0sgKDI4NjMzMTE1MykKKyoqKiBUZXN0ICA2MzogT0sgKDIzNjk3ODEyNykKKyoqKiBUZXN0ICA2NDogT0sgKDE0OTk2NDUzMzUpCisqKiogVGVzdCAgNjU6IE9LICg3MDE4NykKKyoqKiBUZXN0ICA2NjogT0sgKDU0NjQpCisqKiogVGVzdCAgNjc6IE9LICgyMTI1MTQ0MjMpCisqKiogVGVzdCAgNjg6IE9LICgyMTI1MTQ0MjMpCisqKiogVGVzdCAgNjk6IE9LICg4OTk1NDcxKQorKioqIFRlc3QgIDcwOiBPSyAoNjk1NDQyNzcpCisqKiogVGVzdCAgNzE6IE9LICgzNDg4Njk5NykKKyoqKiBUZXN0ICA3MjogT0sgKDE3ODk1NjkzNjUpCisqKiogVGVzdCAgNzM6IE9LICg5MDMyNjE1KQorKioqIFRlc3QgIDc0OiBPSyAoMjI0OTA3NjY5KQorKioqIFRlc3QgIDc1OiBPSyAoMjAwMDQwMzQwOCkKKyoqKiBUZXN0ICA3NjogT0sgKDE2MTAwODc5MzUpCisqKiogVGVzdCAgNzc6IE9LICgxMzg4NjcxKQorKioqIFRlc3QgIDc4OiBPSyAoMTM0MjE3NzI4KQorKioqIFRlc3QgIDc5OiBPSyAoNzAyODg5MjkpCisqKiogVGVzdCAgODA6IE9LICgxNzg5NTc2NSkKKyoqKiBUZXN0ICA4MTogT0sgKDM4NykKKyoqKiBUZXN0ICA4MjogT0sgKDg0NTQ0MDEpCisqKiogVGVzdCAgODM6IE9LICgyODM1KQorKioqIFRlc3QgIDg0OiBPSyAoOTM0NzgyMTAxKQorKioqIFRlc3QgIDg1OiBPSyAoMTk4Njg5KQorLS0tIFRlc3QgIDg2OiBBbGwgdGVzdHMgd2VyZSBydW4gd2l0aCB0aHJvd2luZyBleGNlcHRpb25zIG9uIGVycm9yLgorCSAgICAgIFRoZSAkVklNTk9FUlJUSFJPVyBjb250cm9sIGlzIG5vdCBjb25maWd1cmVkLgorLS0tIFRlc3QgIDg2OiBBbGwgdGVzdHMgd2VyZSBydW4gd2l0aCB0aHJvd2luZyBleGNlcHRpb25zIG9uIGludGVycnVwdC4KKwkgICAgICBUaGUgJFZJTU5PSU5UVEhST1cgY29udHJvbCBpcyBub3QgY29uZmlndXJlZC4KKyoqKiBUZXN0ICA4NjogT0sgKDUwNDQzOTk1KQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQ5LnZpbSBiL3NyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0MmE5NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0KQEAgLTAsMCArMSw5NjY2IEBACisiIFZpbSBzY3JpcHQgbGFuZ3VhZ2UgdGVzdHMKKyIgQXV0aG9yOglTZXJ2YXRpdXMgQnJhbmR0IDxTZXJ2YXRpdXMuQnJhbmR0QGZ1aml0c3Utc2llbWVucy5jb20+CisiIExhc3QgQ2hhbmdlOgkyMDA0IEFwciAwMworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IGVudmlyb25tZW50CQkJCQkJCSAgICB7e3sxCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyIgQWRkaW5nIG5ldyB0ZXN0cyBlYXNpbHkuCQkJCQkJICAgIHt7ezIKKyIKKyIgV3JpdGluZyBuZXcgdGVzdHMgaXMgZWFzZWQgY29uc2lkZXJhYmx5IHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kCisiIGFiYnJldmlhdGlvbnMgKHNlZSAiQ29tbWFuZHMgZm9yIHJlY29yZGluZyB0aGUgZXhlY3V0aW9uIHBhdGgiLCAiQXV0b21hdGljCisiIGFyZ3VtZW50IGdlbmVyYXRpb24iKS4KKyIKKyIgVG8gZ2V0IHRoZSBhYmJyZXZpYXRpb25zLCBleGVjdXRlIHRoZSBjb21tYW5kCisiCisiICAgIDpsZXQgdGVzdDQ5X3NldF9lbnYgPSAxIHwgc291cmNlIHRlc3Q0OS52aW0KKyIKKyIgVG8gZ2V0IHRoZW0gYWx3YXlzIChmcm9tIHNyYy90ZXN0ZGlyKSwgcHV0IGEgbGluZQorIgorIiAgICBhdSEgQnVmUmVhZCB0ZXN0NDkudmltIGxldCB0ZXN0NDlfc2V0X2VudiA9IDEgfCBzb3VyY2UgdGVzdDQ5LnZpbQorIgorIiBpbnRvIHRoZSBsb2NhbCAudmltcmMgZmlsZSBpbiB0aGUgc3JjL3Rlc3RkaXIgZGlyZWN0b3J5LgorIgoraWYgZXhpc3RzKCJ0ZXN0NDlfc2V0X2VudiIpICYmIHRlc3Q0OV9zZXRfZW52CisKKyAgICAiIEF1dG9tYXRpYyBhcmd1bWVudCBnZW5lcmF0aW9uIGZvciB0aGUgdGVzdCBlbnZpcm9ubWVudCBjb21tYW5kcy4KKworICAgIGZ1bmN0aW9uISBYc3VtKCkKKwlsZXQgYWRkZW5kID0gc3Vic3RpdHV0ZShnZXRsaW5lKCIuIiksICdeLioiXHMqWDpccypcfF4uKicsICcnLCAiIikKKwkiIEV2YWx1YXRlIGFyaXRobWV0aWMgZXhwcmVzc2lvbi4KKwlpZiBhZGRlbmQgIT0gIiIKKwkgICAgZXhlYyAibGV0IGc6WHN1bSA9IGc6WHN1bSArICIgLiBhZGRlbmQKKwllbmRpZgorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBmdW5jdGlvbiEgWGNoZWNrKCkKKwlsZXQgZzpYc3VtPTAKKwk/WHBhdGhJTklUPywuY2FsbCBYc3VtKCkKKwlleGVjICJub3JtIEEgIgorCXJldHVybiBnOlhzdW0KKyAgICBlbmRmdW5jdGlvbgorCisgICAgaWFiIFhjaGVjayBYY2hlY2s8U3BhY2U+PEMtUj49WGNoZWNrKCk8Q1I+PEMtTz54CisKKyAgICBmdW5jdGlvbiEgWGNvbW1lbnQobnVtKQorCWxldCBzdHIgPSAiIgorCWxldCB0YWJ3aWR0aCA9ICZzdHMgPyAmc3RzIDogJnRzCisJbGV0IHRhYnMgPSAoNDgrdGFid2lkdGggLSBhOm51bSAtIHZpcnRjb2woIi4iKSkgLyB0YWJ3aWR0aAorCXdoaWxlIHRhYnMgPiAwCisJICAgIGxldCBzdHIgPSBzdHIgLiAiXHQiCisJICAgIGxldCB0YWJzID0gdGFicyAtIDEKKwllbmR3aGlsZQorCWxldCBzdHIgPSBzdHIgLiAnIiBYOicKKwlyZXR1cm4gc3RyCisgICAgZW5kZnVuY3Rpb24KKworICAgIGZ1bmN0aW9uISBYbG9vcCgpCisJbGV0IGJhY2sgPSBsaW5lKCIuIikgLiAifG5vcm0iIC4gdmlydGNvbCgiLiIpIC4gInwiCisJbm9ybSAwCisJbGV0IGxhc3QgPSBzZWFyY2goJ1hcKGxvb3BcfHBhdGhcKUlOSVRcfFhsb29wXD4nLCAiYlciKQorCWV4ZWMgYmFjaworCWxldCB0aGVsaW5lID0gZ2V0bGluZShsYXN0KQorCWlmIHRoZWxpbmUgPX4gJ1hcKGxvb3BcfHBhdGhcKUlOSVQnCisJICAgIGxldCBudW0gPSAxCisJZWxzZQorCSAgICBsZXQgbnVtID0gMiAqIHN1YnN0aXR1dGUodGhlbGluZSwgJy4qWGxvb3BccypcKFxkXCtcKS4qJywgJ1wxJywgIiIpCisJZW5kaWYKKwk/WFwobG9vcFx8cGF0aFwpSU5JVD8KKwkgICAgXHMvXChYbG9vcElOSVQhXD1ccypcZFwrXHNcK1wpXEA8PVwoXGRcK1wpL1w9MipzdWJtYXRjaCgyKS8KKwlleGVjIGJhY2sKKwlleGVjICJub3JtIGEgIgorCXJldHVybiBudW0gLiBYY29tbWVudChzdHJsZW4obnVtKSkKKyAgICBlbmRmdW5jdGlvbgorCisgICAgaWFiIFhsb29wIFhsb29wPFNwYWNlPjxDLVI+PVhsb29wKCk8Q1I+PEMtTz54CisKKyAgICBmdW5jdGlvbiEgWHBhdGgobG9vcGluaXQpCisJbGV0IGJhY2sgPSBsaW5lKCIuIikgLiAifG5vcm0iIC4gdmlydGNvbCgiLiIpIC4gInwiCisJbm9ybSAwCisJbGV0IGxhc3QgPSBzZWFyY2goJ1hwYXRoSU5JVFx8WHBhdGhcPlx8WGxvb3BJTklUJywgImJXIikKKwlleGVjIGJhY2sKKwlsZXQgdGhlbGluZSA9IGdldGxpbmUobGFzdCkKKwlpZiB0aGVsaW5lID1+ICdYcGF0aElOSVQnCisJICAgIGxldCBudW0gPSAxCisJZWxzZWlmIHRoZWxpbmUgPX4gJ1hwYXRoXD4nCisJICAgIGxldCBudW0gPSAyICogc3Vic3RpdHV0ZSh0aGVsaW5lLCAnLipYcGF0aFxzKlwoXGRcK1wpLionLCAnXDEnLCAiIikKKwllbHNlCisJICAgIGxldCBwYXR0ZXJuID0gJy4qWGxvb3BJTklUIVw9XHMqXChcZFwrXClccypcKFxkXCtcKS4qJworCSAgICBsZXQgbnVtID0gc3Vic3RpdHV0ZSh0aGVsaW5lLCBwYXR0ZXJuLCAnXDEnLCAiIikKKwkgICAgbGV0IGZhY3RvciA9IHN1YnN0aXR1dGUodGhlbGluZSwgcGF0dGVybiwgJ1wyJywgIiIpCisJICAgICIgVGhlICI8Qy1PPngiIGZyb20gdGhlICJYcGF0aCIgaWFiIGFuZCB0aGUgY2hhcmFjdGVyIHRyaWdnZXJpbmcgaXRzCisJICAgICIgZXhwYW5zaW9uIGFyZSBpbiB0aGUgaW5wdXQgYnVmZmVyLiAgU2F2ZSBhbmQgY2xlYXIgdHlwZWFoZWFkIHNvCisJICAgICIgdGhhdCBpdCBpcyBub3QgcmVhZCBhd2F5IGJ5IHRoZSBjYWxsIHRvICJpbnB1dCgpIiBiZWxvdy4gIFJlc3RvcmUKKwkgICAgIiBhZnRlcndhcmRzLgorCSAgICBjYWxsIGlucHV0c2F2ZSgpCisJICAgIGxldCBsb29wcyA9IGlucHV0KCJOdW1iZXIgb2YgaXRlcmF0aW9ucyBpbiBwcmV2aW91cyBsb29wPyAiKQorCSAgICBjYWxsIGlucHV0cmVzdG9yZSgpCisJICAgIHdoaWxlIChsb29wcyA+IDApCisJCWxldCBudW0gPSBudW0gKiBmYWN0b3IKKwkJbGV0IGxvb3BzID0gbG9vcHMgLSAxCisJICAgIGVuZHdoaWxlCisJZW5kaWYKKwlleGVjICJub3JtIGEgIgorCWlmIGE6bG9vcGluaXQKKwkgICAgcmV0dXJuIG51bSAuICIgMSIKKwllbmRpZgorCXJldHVybiBudW0gLiBYY29tbWVudChzdHJsZW4obnVtKSkKKyAgICBlbmRmdW5jdGlvbgorCisgICAgaWFiIFhwYXRoIFhwYXRoPFNwYWNlPjxDLVI+PVhwYXRoKDApPENSPjxDLU8+eAorICAgIGlhYiBYbG9vcElOSVQgWGxvb3BJTklUPFNwYWNlPjxDLVI+PVhwYXRoKDEpPENSPjxDLU8+eAorCisgICAgIiBBbHNvIHVzZWZ1bCAoc2VlIEV4dHJhVmltIGJlbG93KToKKyAgICBhdWcgRXh0cmFWaW0KKwlhdSEKKwlhdSAgQnVmRW50ZXIgPHNmaWxlPiBzeW4gcmVnaW9uIEV4dHJhVmltCisJCSAgICBcIHN0YXJ0PSteaWZcc1wrRXh0cmFWaW0oLiopKyBlbmQ9K15lbmRpZisKKwkJICAgIFwgdHJhbnNwYXJlbnQga2VlcGVuZAorCWF1ICBCdWZFbnRlciA8c2ZpbGU+IHN5biBtYXRjaCBFeHRyYUNvbW1lbnQgL14iLworCQkgICAgXCBjb250YWluZWQgY29udGFpbmVkaW49RXh0cmFWaW0KKwlhdSAgQnVmRW50ZXIgPHNmaWxlPiBoaSBsaW5rIEV4dHJhQ29tbWVudCB2aW1Db21tZW50CisgICAgYXVnIEVORAorCisgICAgYXVnIFhwYXRoCisJYXUgIEJ1ZkVudGVyIDxzZmlsZT4gc3luIGtleXdvcmQgWHBhdGgKKwkJICAgIFwgWHBhdGhJTklUIFhwYXRoIFhsb29wSU5JVCBYbG9vcCBYbG9vcE5FWFQgWGNoZWNrIFhvdXQKKwlhdSAgQnVmRW50ZXIgPHNmaWxlPiBoaSBsaW5rIFhwYXRoIFNwZWNpYWwKKyAgICBhdWcgRU5ECisKKyAgICBkbyBCdWZFbnRlciA8c2ZpbGU+CisKKyAgICAiIERvIG5vdCBleGVjdXRlIHRoZSB0ZXN0cyB3aGVuIHNvdXJjaW5nIHRoaXMgZmlsZSBmb3IgZ2V0dGluZyB0aGUgZnVuY3Rpb25zCisgICAgIiBhbmQgYWJicmV2aWF0aW9ucyBhYm92ZSwgd2hpY2ggYXJlIGludGVuZGVkIGZvciBlYXNpbHkgYWRkaW5nIG5ldyB0ZXN0CisgICAgIiBjYXNlczsgdGhleSBhcmUgbm90IG5lZWRlZCBmb3IgdGVzdCBleGVjdXRpb24uICBVbmxldCB0aGUgdmFyaWFibGUKKyAgICAiIGNvbnRyb2xsaW5nIHRoaXMgc28gdGhhdCBhbiBleHBsaWNpdCAiOnNvdXJjZSIgY29tbWFuZCBmb3IgdGhpcyBmaWxlIHdpbGwKKyAgICAiIGV4ZWN1dGUgdGhlIHRlc3RzLgorICAgIHVubGV0IHRlc3Q0OV9zZXRfZW52CisgICAgZmluaXNoCisKK2VuZGlmCisKKworIiBDb21tYW5kcyBmb3IgcmVjb3JkaW5nIHRoZSBleGVjdXRpb24gcGF0aC4JCQkJICAgIHt7ezIKKyIKKyIgVGhlIFhwYXRoL1hsb29wIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGZvciBjb21wdXRpbmcgdGhlIGVYZWN1dGlvbiBwYXRoIGJ5CisiIGFkZGluZyAoZGlmZmVyZW50KSBwb3dlcnMgb2YgMiBmcm9tIHRob3NlIHNjcmlwdCBsaW5lcywgZm9yIHdoaWNoIHRoZQorIiBleGVjdXRpb24gc2hvdWxkIGJlIGNoZWNrZWQuICBYbG9vcCBwcm92aWRlcyBkaWZmZXJlbnQgYWRkZW5kcyBmb3IgZWFjaAorIiBleGVjdXRpb24gb2YgYSBsb29wLiAgUGVybWl0dGFibGUgdmFsdWVzIGFyZSAyXjAgdG8gMl4zMCwgc28gdGhhdCAzMSBleGVjdXRpb24KKyIgcG9pbnRzIChtdWx0aXBseSBjb3VudGVkIGluc2lkZSBsb29wcykgY2FuIGJlIHRlc3RlZC4KKyIKKyIgTm90ZSB0aGF0IHRoZSBhcmd1bWVudHMgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBjYW4gYmUgZ2VuZXJhdGVkCisiIGF1dG9tYXRpY2FsbHksIHNlZSBiZWxvdy4KKyIKKyIgVXNhZ2U6CQkJCQkJCQkgICAge3t7MworIgorIiAgIC0gVXNlIFhwYXRoSU5JVCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXN0LgorIgorIiAgIC0gVXNlIFhwYXRoIHRvIGNoZWNrIGlmIGEgbGluZSBpcyBleGVjdXRlZC4KKyIgICAgIEFyZ3VtZW50OiBwb3dlciBvZiAyIChkZWNpbWFsKS4KKyIKKyIgICAtIFRvIGNoZWNrIG11bHRpcGxlIGV4ZWN1dGlvbiBvZiBsb29wcyB1c2UgWGxvb3AgZm9yIGF1dG9tYXRpY2FsbHkKKyIgICAgIGNvbXB1dGluZyBYcGF0aCB2YWx1ZXM6CisiCisiCS0gVXNlIFhsb29wSU5JVCBiZWZvcmUgdGhlIGxvb3AuCisiCSAgVHdvIGFyZ3VtZW50czoKKyIJCS0gdGhlIGZpcnN0IFhwYXRoIHZhbHVlIChwb3dlciBvZiAyKSB0byBiZSB1c2VkIChYbmV4dCksCisiCQktIGZhY3RvciBmb3IgY29tcHV0aW5nIGEgbmV3IFhuZXh0IHZhbHVlIHdoZW4gcmVleGVjdXRpbmcgYSBsb29wCisiCQkgIChieSBhICI6Y29udGludWUiIG9yICI6ZW5kd2hpbGUiKTsgdGhpcyBzaG91bGQgYmUgMl5uIHdoZXJlCisiCQkgIG4gaXMgdGhlIG51bWJlciBvZiBYbG9vcCBjb21tYW5kcyBpbnNpZGUgdGhlIGxvb3AuCisiCSAgSWYgWGxvb3BJTklUISBpcyB1c2VkLCB0aGUgZmlyc3QgZXhlY3V0aW9uIG9mIFhsb29wTkVYVCBpcworIgkgIGEgbm8tb3BlcmF0aW9uLgorIgorIiAgICAgICAtIFVzZSBYbG9vcCBpbnNpZGUgdGhlIGxvb3A6CisiCSAgT25lIGFyZ3VtZW50OgorIgkJVGhlIGFyZ3VtZW50IGFuZCB0aGUgWG5leHQgdmFsdWUgYXJlIG11bHRpcGxpZWQgdG8gYnVpbGQgdGhlCisiCQluZXh0IFhwYXRoIHZhbHVlLiAgTm8gbmV3IFhuZXh0IHZhbHVlIGlzIHByZXBhcmVkLiAgVGhlIGFyZ3VtZW50CisiCQlzaG91bGQgYmUgMl4obi0xKSBmb3IgdGhlIG50aCBYbG9vcCBjb21tYW5kIGluc2lkZSB0aGUgbG9vcC4KKyIJCUlmIHRoZSBsb29wIGhhcyBvbmx5IG9uZSBYbG9vcCBjb21tYW5kLCB0aGUgYXJndW1lbnQgY2FuIGJlCisiCQlvbW1pdHRlZCAoZGVmYXVsdDogMSkuCisiCisiCS0gVXNlIFhsb29wTkVYVCBiZWZvcmUgIjpjb250aW51ZSIgYW5kICI6ZW5kd2hpbGUiLiAgVGhpcyBjb21wdXRlcyBhIG5ldworIgkgIFhuZXh0IHZhbHVlIGZvciB0aGUgbmV4dCBleGVjdXRpb24gb2YgdGhlIGxvb3AgYnkgbXVsdGlwbHlpbmcgdGhlIG9sZAorIgkgIG9uZSB3aXRoIHRoZSBmYWN0b3Igc3BlY2lmaWVkIGluIHRoZSBYbG9vcElOSVQgY29tbWFuZC4gIE5vIEFyZ3VtZW50LgorIgkgIEFsdGVybmF0aXZlbHksIHdoZW4gWGxvb3BJTklUISBpcyB1c2VkLCBhIHNpbmdsZSBYbG9vcE5FWFQgYXQgdGhlCisiCSAgYmVnaW5uaW5nIG9mIHRoZSBsb29wIGNhbiBiZSB1c2VkLgorIgorIiAgICAgTmVzdGVkIGxvb3BzIGFyZSBub3Qgc3VwcG9ydGVkLgorIgorIiAgIC0gVXNlIFhjaGVjayBhdCBlbmQgb2YgZWFjaCB0ZXN0LiAgSXQgcHJpbnRzIHRoZSB0ZXN0IG51bWJlciwgdGhlIGV4cGVjdGVkCisiICAgICBleGVjdXRpb24gcGF0aCB2YWx1ZSwgdGhlIHRlc3QgcmVzdWx0ICgiT0siIG9yICJGQUlMIiksIGFuZCwgaWYgdGhlIHRlc3RzCisiICAgICBmYWlscywgdGhlIGFjdHVhbCBleGVjdXRpb24gcGF0aC4KKyIgICAgIE9uZSBhcmd1bWVudDoKKyIJICAgIEV4cGVjdGVkIFhwYXRoL1hsb29wIHN1bSBmb3IgdGhlIGNvcnJlY3QgZXhlY3V0aW9uIHBhdGguCisiCSAgICBJbiBvcmRlciB0aGF0IHRoaXMgdmFsdWUgY2FuIGJlIGNvbXB1dGVkIGF1dG9tYXRpY2FsbHksIGRvIHRoZQorIgkgICAgZm9sbG93aW5nOiBGb3IgZWFjaCBsaW5lIGluIHRoZSB0ZXN0IHdpdGggYW4gWHBhdGggYW5kIFhsb29wCisiCSAgICBjb21tYW5kLCBhZGQgYSBjb21tZW50IHN0YXJ0aW5nIHdpdGggIlg6IiBhbmQgc3BlY2lmeWluZyBhbgorIgkgICAgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0aGUgdmFsdWUgY29udHJpYnV0ZWQgYnkgdGhpcyBsaW5lIHRvCisiCSAgICB0aGUgY29ycmVjdCBleGVjdXRpb24gcGF0aC4gIChGb3IgY29weWluZyBhbiBYcGF0aCBhcmd1bWVudCBvZiBhdAorIgkgICAgbGVhc3QgdHdvIGRpZ2l0cyBpbnRvIHRoZSBjb21tZW50LCBwcmVzcyA8Qy1QPi4pICBBdCB0aGUgZW5kIG9mIHRoZQorIgkgICAgdGVzdCwganVzdCB0eXBlICJYY2hlY2siIGFuZCBwcmVzcyA8RXNjPi4KKyIKKyIgICAtIEluIG9yZGVyIHRvIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIHRoZSB0ZXN0IG91dHB1dCBmaWxlLCB1c2UgdGhlCisiICAgICBYb3V0IGNvbW1hbmQuICBBcmd1bWVudChzKSBsaWtlICI6ZWNobyIuCisiCisiIEF1dG9tYXRpYyBhcmd1bWVudCBnZW5lcmF0aW9uOgkJCQkJICAgIHt7ezMKKyIKKyIgICBUaGUgYXJndW1lbnRzIG9mIHRoZSBYcGF0aCwgWGxvb3BJTklULCBYbG9vcCwgYW5kIFhjaGVjayBjb21tYW5kcyBjYW4gYmUKKyIgICBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSwgc28gdGhhdCBuZXcgdGVzdHMgY2FuIGVhc2lseSBiZSB3cml0dGVuIHdpdGhvdXQKKyIgICBtZW50YWwgYXJpdGhtZXRpYy4gIFRoZSBYY2hlY2sgYXJndW1lbnQgaXMgY29tcHV0ZWQgZnJvbSB0aGUgIlg6IiBjb21tZW50cworIiAgIG9mIHRoZSBwcmVjZWRpbmcgWHBhdGggYW5kIFhsb29wIGNvbW1hbmRzLiAgU2VlIHRoZSBjb21tYW5kcyBhbmQKKyIgICBhYmJyZXZpYXRpb25zIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmaWxlLgorIgorIiBJbXBsZW1lbnRhdGlvbjoJCQkJCQkJICAgIHt7ezMKKyIgICAgIFhwYXRoSU5JVCwgWHBhdGgsIFhsb29wSU5JVCwgWGxvb3AsIFhsb29wTkVYVCwgWGNoZWNrLCBYb3V0LgorIgorIiBUaGUgdmFyaWFudHMgZm9yIGV4aXN0aW5nIGc6RXh0cmFWaW1SZXN1bHQgYXJlIG5lZWRlZCB3aGVuIGV4ZWN1dGluZyBhIHNjcmlwdAorIiBpbiBhbiBleHRyYSBWaW0gcHJvY2Vzcywgc2VlIEV4dHJhVmltIGJlbG93LgorCisiIEVYVFJBX1ZJTV9TVEFSVCAtIGRvIG5vdCBjaGFuZ2Ugb3IgcmVtb3ZlIHRoaXMgbGluZS4KKworY29tIQkJICAgIFhwYXRoSU5JVAlsZXQgZzpYcGF0aCA9IDAKKworaWYgZXhpc3RzKCJnOkV4dHJhVmltUmVzdWx0IikKKyAgICBjb20hIC1jb3VudCAtYmFyICAgIFhwYXRoCWV4ZWMgIiFlY2hvIDxjb3VudD4gPj4iIC4gZzpFeHRyYVZpbVJlc3VsdAorZWxzZQorICAgIGNvbSEgLWNvdW50IC1iYXIgICAgWHBhdGgJbGV0IGc6WHBhdGggPSBnOlhwYXRoICsgPGNvdW50PgorZW5kaWYKKworY29tISAtY291bnQgLW5hcmdzPTEgLWJhbmcKKwkJICBcIFhsb29wSU5JVAlsZXQgZzpYbmV4dCA9IDxjb3VudD4gfAorCQkJCSAgICBcIGxldCBnOlhmYWN0b3IgPSA8YXJncz4gfAorCQkJCSAgICBcIGxldCBnOlhza2lwID0gc3RybGVuKCI8YmFuZz4iKQorCitpZiBleGlzdHMoImc6RXh0cmFWaW1SZXN1bHQiKQorICAgIGNvbSEgLWNvdW50PTEgLWJhciAgWGxvb3AJZXhlYyAiIWVjaG8gIiAuIChnOlhuZXh0ICogPGNvdW50PikgLiAiID4+IiAuCisJCQkJICAgIFwgZzpFeHRyYVZpbVJlc3VsdAorZWxzZQorICAgIGNvbSEgLWNvdW50PTEgLWJhciAgWGxvb3AJbGV0IGc6WHBhdGggPSBnOlhwYXRoICsgZzpYbmV4dCAqIDxjb3VudD4KK2VuZGlmCisKK2NvbSEJCSAgICBYbG9vcE5FWFQJbGV0IGc6WG5leHQgPSBnOlhuZXh0ICoKKwkJCQkgICAgXCAoZzpYc2tpcCA/IDEgOiBnOlhmYWN0b3IpIHwKKwkJCQkgICAgXCBsZXQgZzpYc2tpcCA9IDAKKworbGV0IEByID0gIiIKK2xldCBYdGVzdCA9IDEKK2NvbSEgLWNvdW50CSAgICBYY2hlY2sJbGV0IFhyZXN1bHQgPSAiKioqIFRlc3QgIiAuCisJCQkJICAgIFwgKFh0ZXN0PDEwPyIgICI6WHRlc3Q8MTAwPyIgIjoiIikgLgorCQkJCSAgICBcIFh0ZXN0IC4gIjogIiAuICgKKwkJCQkgICAgXCAoWHBhdGg9PTxjb3VudD4pID8gIk9LICgiLlhwYXRoLiIpIiA6CisJCQkJCVwgIkZBSUwgKCIuWHBhdGguIiBpbnN0ZWFkIG9mIDxjb3VudD4pIgorCQkJCSAgICBcICkgfAorCQkJCSAgICBcIGxldCBAUiA9IFhyZXN1bHQgLiAiXG4iIHwKKwkJCQkgICAgXCBlY2hvIFhyZXN1bHQgfAorCQkJCSAgICBcIGxldCBYdGVzdCA9IFh0ZXN0ICsgMQorCitpZiBleGlzdHMoImc6RXh0cmFWaW1SZXN1bHQiKQorICAgIGNvbSEgLW5hcmdzPSsgICAgWG91dAlleGVjICJleGVjIFwiIWVjaG8gQFI6J1wiIC4iCisJCQkJICAgIFwgJ3N1YnN0aXR1dGUoc3Vic3RpdHV0ZSgiJyAuIDxhcmdzPiAuCisJCQkJICAgIFwgJyIsICInIC4gIiciIC4gJyIsICcgLiAiJyIgLiAnJlxcJiYnIC4gIiciCisJCQkJICAgIFwgLiAnLCAiZyIpLCAiXG4iLCAiQE5MQCIsICJnIiknCisJCQkJICAgIFwgIi4gXCInID4+XCIgLiBnOkV4dHJhVmltUmVzdWx0IgorZWxzZQorICAgIGNvbSEgLW5hcmdzPSsgICAgWG91dAlleGVjICdsZXQgQFIgPSAiLS0tIFRlc3QgJyAuCisJCQkJICAgIFwgKGc6WHRlc3Q8MTA/IiAgIjpnOlh0ZXN0PDEwMD8iICI6IiIpIC4KKwkJCQkgICAgXCBnOlh0ZXN0IC4gIjogIiAuCisJCQkJICAgIFwgJyIgLiBzdWJzdGl0dXRlKCInIC4gPGFyZ3M+IC4KKwkJCQkgICAgXCAnIiwgIlxuIiwgIiZcdCAgICAgICIsICJnIikgLiAiXG4iJworZW5kaWYKKworIiBTd2l0Y2ggb2ZmIHN0b3Jpbmcgb2YgbGluZXMgZm9yIHVuZG9pbmcgY2hhbmdlcy4gIFNwZWVkcyB0aGluZ3MgdXAgYSBsaXR0bGUuCitzZXQgdW5kb2xldmVscz0tMQorCisiIEVYVFJBX1ZJTV9TVE9QIC0gZG8gbm90IGNoYW5nZSBvciByZW1vdmUgdGhpcyBsaW5lLgorCisKKyIgRXh0cmFWaW0oKSAtIFJ1biBhIHNjcmlwdCBmaWxlIGluIGFuIGV4dHJhIFZpbSBwcm9jZXNzLgkJICAgIHt7ezIKKyIKKyIgVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3RpbmcgaW1tZWRpYXRlIGFib3J0aW9uIG9mIHRoZSBzY3JpcHQgcHJvY2Vzc2luZyBkdWUgdG8KKyIgYW4gZXJyb3IgaW4gYSBjb21tYW5kIGR5bmFtaWNhbGx5IGVuY2xvc2VkIGJ5IGEgOnRyeS86dHJ5ZW5kIHJlZ2lvbiBvciB3aGVuIGFuCisiIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnV0IG5vdCBjYXVnaHQgb3Igd2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLiAgSXQgY2FuIGFsc28KKyIgYmUgdXNlZCBmb3IgdGVzdGluZyA6ZmluaXNoLgorIgorIiBBbiBpbnRlcnJ1cHQgbG9jYXRpb24gY2FuIGJlIHNwZWNpZmllZCBieSBhbiAiSU5URVJSVVBUIiBjb21tZW50LiAgQSBudW1iZXIKKyIgdGVsbGluZyBob3cgb2Z0ZW4gdGhpcyBsb2NhdGlvbiBpcyByZWFjaGVkIChpbiBhIGxvb3Agb3IgaW4gc2V2ZXJhbCBmdW5jdGlvbgorIiBjYWxscykgc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhcmd1bWVudC4gIFdoZW4gbWlzc2luZywgb25jZSBwZXIgc2NyaXB0CisiIGludm9jYXRpb24gb3IgZnVuY3Rpb24gY2FsbCBpcyBhc3N1bWVkLiAgSU5URVJSVVBUIGxvY2F0aW9ucyBhcmUgdGVzdGVkIGJ5CisiIHNldHRpbmcgYSBicmVha3BvaW50IGluIHRoYXQgbGluZSBhbmQgdXNpbmcgdGhlICI+cXVpdCIgZGVidWcgY29tbWFuZCB3aGVuCisiIHRoZSBicmVha3BvaW50IGlzIHJlYWNoZWQuICBBIGZ1bmN0aW9uIGZvciB3aGljaCBhbiBJTlRFUlJVUFQgbG9jYXRpb24gaXMKKyIgc3BlY2lmaWVkIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgY2FsbGluZyBpdCAob3IgZXhlY3V0aW5nIGl0IGFzIGEgc2NyaXB0IGJ5CisiIHVzaW5nIEV4ZWNBc1NjcmlwdCBiZWxvdykuCisiCisiIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaW4gbm9ybWFsIG1vZHVzICgiZzpFeHRyYVZpbVJlc3VsdCIgdW5kZWZpbmVkKS4KKyIKKyIgVGVzdHMgdG8gYmUgZXhlY3V0ZWQgYXMgYW4gZXh0cmEgc2NyaXB0IHNob3VsZCBiZSB3cml0dGVuIGFzIGZvbGxvd3M6CisiCisiCWNvbHVtbiAxCQkJY29sdW1uIDEKKyIJfAkJCQl8CisiCXYJCQkJdgorIgorIglYcGF0aElOSVQJCQlYcGF0aElOSVQKKyIJaWYgRXh0cmFWaW0oKQkJCWlmIEV4dHJhVmltKCkKKyIJICAgIC4uLgkJCQkiICAgLi4uCisiCSAgICAuLi4JCQkJIiAgIC4uLgorIgllbmRpZgkJCQllbmRpZgorIglYY2hlY2sgPG51bWJlcj4JCQlYY2hlY2sgPG51bWJlcj4KKyIKKyIgRG91YmxlIHF1b3RlcyBpbiBjb2x1bW4gMSBhcmUgcmVtb3ZlZCBiZWZvcmUgdGhlIHNjcmlwdCBpcyBleGVjdXRlZC4KKyIgVGhleSBzaG91bGQgYmUgdXNlZCBpZiB0aGUgdGVzdCBoYXMgdW5iYWxhbmNlZCBjb25kaXRpb25hbHMgKDppZi86ZW5kaWYsCisiIDp3aGlsZTovZW5kd2hpbGUsIDp0cnkvOmVuZHRyeSkgb3IgZm9yIGEgbGluZSB3aXRoIGEgc3ludGF4IGVycm9yLiAgVGhlCisiIGV4dHJhIHNjcmlwdCBtYXkgdXNlIFhwYXRoLCBYbG9vcElOSVQsIFhsb29wLCBYbG9vcE5FWFQsIGFuZCBYb3V0IGFzIHVzdWFsLgorIgorIiBBIGZpbGUgbmFtZSBtYXkgYmUgc3BlY2lmaWVkIGFzIGFyZ3VtZW50LiAgQWxsIG1lc3NhZ2VzIG9mIHRoZSBleHRyYSBWaW0KKyIgcHJvY2VzcyBhcmUgdGhlbiByZWRpcmVjdGVkIHRvIHRoZSBmaWxlLiAgQW4gZXhpc3RpbmcgZmlsZSBpcyBvdmVyd3JpdHRlbi4KKyIKK2xldCBFeHRyYVZpbUNvdW50ID0gMAorbGV0IEV4dHJhVmltQmFzZSA9IGV4cGFuZCgiPHNmaWxlPiIpCitsZXQgRXh0cmFWaW1UZXN0RW52ID0gIiIKKyIKK2Z1bmN0aW9uISBFeHRyYVZpbSguLi4pCisgICAgIiBDb3VudCBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgICAgbGV0IGc6RXh0cmFWaW1Db3VudCA9IGc6RXh0cmFWaW1Db3VudCArIDEKKworICAgICIgRGlzYWJsZSBmb2xkcyB0byBwcmV2ZW50IHRoYXQgdGhlIHJhbmdlcyBpbiB0aGUgIjp3cml0ZSIgY29tbWFuZHMgYmVsb3cKKyAgICAiIGFyZSBleHRlbmRlZCB1cCB0byB0aGUgZW5kIG9mIGEgY2xvc2VkIGZvbGQuICBUaGlzIGFsc28gc3BlZWRzIHRoaW5ncyB1cAorICAgICIgY29uc2lkZXJhYmx5LgorICAgIHNldCBub2ZvbGRlbmFibGUKKworICAgICIgT3BlbiBhIGJ1ZmZlciBmb3IgdGhpcyB0ZXN0IHNjcmlwdCBhbmQgY29weSB0aGUgdGVzdCBlbnZpcm9ubWVudCB0bworICAgICIgYSB0ZW1wb3JhcnkgZmlsZS4gIFRha2UgYWNjb3VudCBvZiBwYXJ0cyByZWxldmFudCBmb3IgdGhlIGV4dHJhIHNjcmlwdAorICAgICIgZXhlY3V0aW9uIG9ubHkuCisgICAgbGV0IGN1cnJlbnRfYnVmZm5yID0gYnVmbnIoIiUiKQorICAgIGV4ZWN1dGUgInZpZXcgKzEiIGc6RXh0cmFWaW1CYXNlCisgICAgaWYgZzpFeHRyYVZpbUNvdW50ID09IDEKKwlsZXQgZzpFeHRyYVZpbVRlc3RFbnYgPSB0ZW1wbmFtZSgpCisJZXhlY3V0ZSAiL0UiIC4gIlhUUkFfVklNX1NUQVJULyssL0UiIC4gIlhUUkFfVklNX1NUT1AvLXciCisJCSAgICBcIGc6RXh0cmFWaW1UZXN0RW52ICJ8J10rIgorCWV4ZWN1dGUgIi9FIiAuICJYVFJBX1ZJTV9TVEFSVC8rLC9FIiAuICJYVFJBX1ZJTV9TVE9QLy13ID4+IgorCQkgICAgXCBnOkV4dHJhVmltVGVzdEVudiAifCddKyIKKwlleGVjdXRlICIvRSIgLiAiWFRSQV9WSU1fU1RBUlQvKywvRSIgLiAiWFRSQV9WSU1fU1RPUC8tdyA+PiIKKwkJICAgIFwgZzpFeHRyYVZpbVRlc3RFbnYgInwnXSsiCisJZXhlY3V0ZSAiL0UiIC4gIlhUUkFfVklNX1NUQVJULyssL0UiIC4gIlhUUkFfVklNX1NUT1AvLXcgPj4iCisJCSAgICBcIGc6RXh0cmFWaW1UZXN0RW52ICJ8J10rIgorICAgIGVuZGlmCisKKyAgICAiIFN0YXJ0IHRoZSBleHRyYSBWaW0gc2NyaXB0IHdpdGggYSAiOnNvdXJjZSIgY29tbWFuZCBmb3IgdGhlIHRlc3QKKyAgICAiIGVudmlyb25tZW50LiAgVGhlIHNvdXJjZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgZXh0cmEgc2NyaXB0IHdpbGwgYmUKKyAgICAiIGFwcGVuZGVkLCBuZWVkcyB0byBiZSBwYXNzZWQgYXMgdmFyaWFibGUgIkV4dHJhVmltQmVnaW4iIHRvIHRoZSBzY3JpcHQuCisgICAgbGV0IGV4dHJhX3NjcmlwdCA9IHRlbXBuYW1lKCkKKyAgICBleGVjICIhZWNobyAnc291cmNlICIgLiBnOkV4dHJhVmltVGVzdEVudiAuICInID4iIC4gZXh0cmFfc2NyaXB0CisgICAgbGV0IGV4dHJhX2JlZ2luID0gMQorCisgICAgIiBTdGFydGluZyBiZWhpbmQgdGhlIHRlc3QgZW52aXJvbm1lbnQsIHNraXAgb3ZlciB0aGUgZmlyc3QgZzpFeHRyYVZpbUNvdW50CisgICAgIiBvY2N1cnJlbmNlcyBvZiAiaWYgRXh0cmFWaW0oKSIgYW5kIGNvcHkgdGhlIGZvbGxvd2luZyBsaW5lcyB1cCB0byB0aGUKKyAgICAiIG1hdGNoaW5nICJlbmRpZiIgdG8gdGhlIGV4dHJhIFZpbSBzY3JpcHQuCisgICAgZXhlY3V0ZSAiL0UiIC4gIk5EX09GX1RFU1RfRU5WSVJPTk1FTlQvIgorICAgIGV4ZWMgJ25vcm0gJyAuIGc6RXh0cmFWaW1Db3VudCAuICcvXlxzKmlmXHNcK0V4dHJhVmltKC4qKS8rJyAuICJcbiIKKyAgICBleGVjdXRlICIuLC9eZW5kaWYvLXdyaXRlID4+IiAuIGV4dHJhX3NjcmlwdAorCisgICAgIiBPcGVuIGEgYnVmZmVyIGZvciB0aGUgZXh0cmEgVmltIHNjcmlwdCwgZGVsZXRlIGFsbCBeIiwgYW5kIHdyaXRlIHRoZQorICAgICIgc2NyaXB0IGlmIHdhcyBhY3R1YWxseSBtb2RpZmllZC4KKyAgICBleGVjdXRlICJlZGl0ICsiIC4gKGV4dHJhX2JlZ2luICsgMSkgZXh0cmFfc2NyaXB0CisgICAgLCRzL14iLy9lCisgICAgdXBkYXRlCisKKyAgICAiIENvdW50IHRoZSBJTlRFUlJVUFRzIGFuZCBidWlsZCB0aGUgYnJlYWtwb2ludCBhbmQgcXVpdCBjb21tYW5kcy4KKyAgICBsZXQgYnJlYWtwb2ludHMgPSAiIgorICAgIGxldCBkZWJ1Z19xdWl0cyA9ICIiCisgICAgbGV0IGluX2Z1bmMgPSAwCisgICAgZXhlYyBleHRyYV9iZWdpbgorICAgIHdoaWxlIHNlYXJjaCgKKwkgICAgXCAnIlxzKklOVEVSUlVQVFxoXEAhXHxeXHMqZnVcJVtuY3Rpb25dXD4hXD1ccypcJShcdVx8czpcKVx3KlxzKihcfCcKKwkgICAgXCAuICdeXHMqXFxcfF5ccyplbmRmXCVbdW5jdGlvbl1cPlx8JworCSAgICBcIC4gJ1wlKF5ccypmdVwlW25jdGlvbl0hXD1ccypcKVxAPCFcJShcdVx8czpcKVx3KlxzKihcfCcKKwkgICAgXCAuICdFeGVjQXNTY3JpcHRcc1wrXCUoXHVcfHM6XClcdyonLAorCSAgICBcICJXIikgPiAwCisJbGV0IHRoZWxpbmUgPSBnZXRsaW5lKCIuIikKKwlpZiB0aGVsaW5lID1+ICdeXHMqZnUnCisJICAgICIgRnVuY3Rpb24gZGVmaW5pdGlvbi4KKwkgICAgbGV0IGluX2Z1bmMgPSAxCisJICAgIGxldCBmdW5jX3N0YXJ0ID0gbGluZSgiLiIpCisJICAgIGxldCBmdW5jX25hbWUgPSBzdWJzdGl0dXRlKHRoZWxpbmUsCisJCVwgJ15ccypmdVwlW25jdGlvbl0hXD1ccypcKFwlKFx1XHxzOlwpXHcqXCkuKicsICdcMScsICIiKQorCSAgICBsZXQgZnVuY19jb250cyA9IDAKKwllbHNlaWYgdGhlbGluZSA9fiAnXlxzKlxcJworCSAgICBpZiBpbl9mdW5jCisJCWxldCBmdW5jX2NvbnRzID0gZnVuY19jb250cyArIDEKKwkgICAgZW5kaWYKKwllbHNlaWYgdGhlbGluZSA9fiAnXlxzKmVuZGYnCisJICAgICIgRW5kIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24uCisJICAgIGxldCBpbl9mdW5jID0gMAorCWVsc2UKKwkgICAgbGV0IGZpbmRpbmcgPSBzdWJzdGl0dXRlKHRoZWxpbmUsICcuKlwoXCUnIC4gY29sKCIuIikgLiAnYy4qXCknLAorCQlcICdcMScsICIiKQorCSAgICBpZiBmaW5kaW5nID1+ICdeIlxzKklOVEVSUlVQVFxoXEAhJworCQkiIEludGVycnVwdCBjb21tZW50LiAgQ29tcG9zZSBhcyBtYW55IHF1aXQgY29tbWFuZHMgYXMKKwkJIiBzcGVjaWZpZWQuCisJCWxldCBjbnQgPSBzdWJzdGl0dXRlKGZpbmRpbmcsCisJCSAgICBcICdeIlxzKklOVEVSUlVQVFxzKlwoXGQqXCkuKiQnLCAnXDEnLCAiIikKKwkJbGV0IHF1aXRzID0gIiIKKwkJd2hpbGUgY250ID4gMAorCQkgICAgIiBVc2UgIlxyIiByYXRoZXIgdGhhbiAiXG4iIHRvIHNlcGFyYXRlIHRoZSBxdWl0IGNvbW1hbmRzLgorCQkgICAgIiAiXHIiIGlzIG5vdCBpbnRlcnByZXRlZCBhcyBjb21tYW5kIHNlcGFyYXRvciBieSB0aGUgIjohIgorCQkgICAgIiBjb21tYW5kIGJlbG93IGJ1dCB3b3JrcyB0byBzZXBhcmF0ZSBjb21tYW5kcyBpbiB0aGUKKwkJICAgICIgZXh0ZXJuYWwgdmltLgorCQkgICAgbGV0IHF1aXRzID0gcXVpdHMgLiAicVxyIgorCQkgICAgbGV0IGNudCA9IGNudCAtIDEKKwkJZW5kd2hpbGUKKwkJaWYgaW5fZnVuYworCQkgICAgIiBBZGQgdGhlIGZ1bmN0aW9uIGJyZWFrcG9pbnQgYW5kIG5vdGUgdGhlIG51bWJlciBvZiBxdWl0cworCQkgICAgIiB0byBiZSB1c2VkLCBpZiBzcGVjaWZpZWQsIG9yIG9uZSBmb3IgZXZlcnkgY2FsbCBlbHNlLgorCQkgICAgbGV0IGJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHMgLiAiIC1jICdicmVha2FkZCBmdW5jICIgLgorCQkJXCAobGluZSgiLiIpIC0gZnVuY19zdGFydCAtIGZ1bmNfY29udHMpIC4gIiAiIC4KKwkJCVwgZnVuY19uYW1lIC4gIiciCisJCSAgICBpZiBxdWl0cyAhPSAiIgorCQkJbGV0IGRlYnVnX3F1aXRzID0gZGVidWdfcXVpdHMgLiBxdWl0cworCQkgICAgZWxzZWlmICFleGlzdHMoInF1aXRze2Z1bmNfbmFtZX0iKQorCQkJbGV0IHF1aXRze2Z1bmNfbmFtZX0gPSAicVxyIgorCQkgICAgZWxzZQorCQkJbGV0IHF1aXRze2Z1bmNfbmFtZX0gPSBxdWl0c3tmdW5jX25hbWV9IC4gInFcciIKKwkJICAgIGVuZGlmCisJCWVsc2UKKwkJICAgICIgQWRkIHRoZSBmaWxlIGJyZWFrcG9pbnQgYW5kIHRoZSBxdWl0cyB0byBiZSB1c2VkIGZvciBpdC4KKwkJICAgIGxldCBicmVha3BvaW50cyA9IGJyZWFrcG9pbnRzIC4gIiAtYyAnYnJlYWthZGQgZmlsZSAiIC4KKwkJCVwgbGluZSgiLiIpIC4gIiAiIC4gZXh0cmFfc2NyaXB0IC4gIiciCisJCSAgICBpZiBxdWl0cyA9PSAiIgorCQkJbGV0IHF1aXRzID0gInFcciIKKwkJICAgIGVuZGlmCisJCSAgICBsZXQgZGVidWdfcXVpdHMgPSBkZWJ1Z19xdWl0cyAuIHF1aXRzCisJCWVuZGlmCisJICAgIGVsc2UKKwkJIiBBZGQgdGhlIHF1aXRzIHRvIGJlIHVzZWQgZm9yIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIG9yIGV4ZWN1dGluZworCQkiIGl0IGFzIHNjcmlwdCBmaWxlLgorCQlpZiBmaW5kaW5nID1+ICdeRXhlY0FzU2NyaXB0JworCQkgICAgIiBTb3VyY2luZyBmdW5jdGlvbiBhcyBzY3JpcHQuCisJCSAgICBsZXQgZmluZGluZyA9IHN1YnN0aXR1dGUoZmluZGluZywKKwkJCVwgJ15FeGVjQXNTY3JpcHRcc1wrXChcJShcdVx8czpcKVx3KlwpLionLCAnXDEnLCAiIikKKwkJZWxzZQorCQkgICAgIiBGdW5jdGlvbiBjYWxsLgorCQkgICAgbGV0IGZpbmRpbmcgPSBzdWJzdGl0dXRlKGZpbmRpbmcsCisJCQlcICdeXChcJShcdVx8czpcKVx3KlwpLionLCAnXDEnLCAiIikKKwkJZW5kaWYKKwkJaWYgZXhpc3RzKCJxdWl0c3tmaW5kaW5nfSIpCisJCSAgICBsZXQgZGVidWdfcXVpdHMgPSBkZWJ1Z19xdWl0cyAuIHF1aXRze2ZpbmRpbmd9CisJCWVuZGlmCisJICAgIGVuZGlmCisJZW5kaWYKKyAgICBlbmR3aGlsZQorCisgICAgIiBDbG9zZSB0aGUgYnVmZmVyIGZvciB0aGUgc2NyaXB0IGFuZCBjcmVhdGUgYW4gKGVtcHR5KSByZXN1bHRmaWxlLgorICAgIGJ3aXBlb3V0CisgICAgbGV0IHJlc3VsdGZpbGUgPSB0ZW1wbmFtZSgpCisgICAgZXhlYyAiIT4iIC4gcmVzdWx0ZmlsZQorCisgICAgIiBSdW4gdGhlIHNjcmlwdCBpbiBhbiBleHRyYSB2aW0uICBTd2l0Y2ggdG8gZXh0cmEgbW9kdXMgYnkgcGFzc2luZyB0aGUKKyAgICAiIHJlc3VsdGZpbGUgaW4gRXh0cmFWaW1SZXN1bHQuICBSZWRpcmVjdCBtZXNzYWdlcyB0byB0aGUgZmlsZSBzcGVjaWZpZWQgYXMKKyAgICAiIGFyZ3VtZW50IGlmIGFueS4gIFVzZSAiOmRlYnVnZ3JlZWR5IiBzbyB0aGF0IHRoZSBjb21tYW5kcyBwcm92aWRlZCBvbiB0aGUKKyAgICAiIHBpcGUgYXJlIGNvbnN1bWVkIGF0IHRoZSBkZWJ1ZyBwcm9tcHQuICBVc2UgIi1OIiB0byBlbmFibGUgY29tbWFuZC1saW5lCisgICAgIiBjb250aXVuYXRpb24gKCJDIiBpbiAnY3BvJykuICBBZGQgIm52aW1pbmZvIiB0byAndmltaW5mbycgdG8gYXZvaWQKKyAgICAiIG1lc3NpbmcgdXAgdGhlIHVzZXIncyB2aW1pbmZvIGZpbGUuCisgICAgbGV0IHJlZGlyZWN0ID0gYTowID8KKwlcICIgLWMgJ2F1IFZpbUxlYXZlICogcmVkaXIgRU5EJyAtYyAncmVkaXJcXCEgPiIgLiBhOjEgLiAiJyIgOiAiIgorICAgIGV4ZWMgIiFlY2hvICciIC4gZGVidWdfcXVpdHMgLiAicScgfCAuLi92aW0gLXUgTk9ORSAtTiAtWGVzIiAuIHJlZGlyZWN0IC4KKwlcICIgLWMgJ2RlYnVnZ3JlZWR5fHNldCB2aW1pbmZvKz1udmltaW5mbyciIC4KKwlcICIgLWMgJ2xldCBFeHRyYVZpbUJlZ2luID0gIiAuIGV4dHJhX2JlZ2luIC4gIiciIC4KKwlcICIgLWMgJ2xldCBFeHRyYVZpbVJlc3VsdCA9IFwiIiAuIHJlc3VsdGZpbGUgLiAiXCInIiAuIGJyZWFrcG9pbnRzIC4KKwlcICIgLVMgIiAuIGV4dHJhX3NjcmlwdAorCisgICAgIiBCdWlsZCB0aGUgcmVzdWx0aW5nIHN1bSBmb3IgcmVzdWx0ZmlsZSBhbmQgYWRkIGl0IHRvIGc6WHBhdGguICBBZGQgWG91dAorICAgICIgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdGhlIGV4dHJhIFZpbSBwcm9jZXNzIHRvIHRoZSB0ZXN0IG91dHB1dC4KKyAgICBsZXQgc3VtID0gMAorICAgIGV4ZWMgImVkaXQiIHJlc3VsdGZpbGUKKyAgICBsZXQgbGluZSA9IDEKKyAgICB3aGlsZSBsaW5lIDw9IGxpbmUoIiQiKQorCWxldCB0aGVsaW5lID0gZ2V0bGluZShsaW5lKQorCWlmIHRoZWxpbmUgPX4gJ15AUjonCisJICAgIGV4ZWMgJ1hvdXQgIicgLiBzdWJzdGl0dXRlKHN1YnN0aXR1dGUoCisJCVwgZXNjYXBlKGVzY2FwZSh0aGVsaW5lLCAnIicpLCAnXCInKSwKKwkJXCAnXkBSOicsICcnLCAiIiksICdATkxAJywgIlxuIiwgImciKSAuICciJworCWVsc2UKKwkgICAgbGV0IHN1bSA9IHN1bSArIGdldGxpbmUobGluZSkKKwllbmRpZgorCWxldCBsaW5lID0gbGluZSArIDEKKyAgICBlbmR3aGlsZQorICAgIGJ3aXBlb3V0CisgICAgbGV0IGc6WHBhdGggPSBnOlhwYXRoICsgc3VtCisKKyAgICAiIERlbGV0ZSB0aGUgZXh0cmEgc2NyaXB0IGFuZCB0aGUgcmVzdWx0ZmlsZS4KKyAgICBjYWxsIGRlbGV0ZShleHRyYV9zY3JpcHQpCisgICAgY2FsbCBkZWxldGUocmVzdWx0ZmlsZSkKKworICAgICIgU3dpdGNoIGJhY2sgdG8gdGhlIGJ1ZmZlciB0aGF0IHdhcyBhY3RpdmUgd2hlbiB0aGlzIGZ1bmN0aW9uIHdhcyBlbnRlcmVkLgorICAgIGV4ZWMgImJ1ZmZlciIgY3VycmVudF9idWZmbnIKKworICAgICIgUmV0dXJuIDAuICBUaGlzIHByb3RlY3RzIGV4dHJhIHNjcmlwdHMgZnJvbSBiZWluZyBydW4gaW4gdGhlIG1haW4gVmltCisgICAgIiBwcm9jZXNzLgorICAgIHJldHVybiAwCitlbmRmdW5jdGlvbgorCisKKyIgRXh0cmFWaW1UaHJvd3BvaW50KCkgLSBSZWxhdGl2ZSB0aHJvd3BvaW50IGluIEV4dHJhVmltIHNjcmlwdAkJICAgIHt7ezIKKyIKKyIgRXZhbHVhdGVzIHY6dGhyb3dwb2ludCBhbmQgcmV0dXJucyB0aGUgdGhyb3dwb2ludCByZWxhdGl2IHRvIHRoZSBiZWdpbm5pbmcgb2YKKyIgYW4gRXh0cmFWaW0gc2NyaXB0IGFzIHBhc3NlZCBieSBFeHRyYVZpbSgpIGluIEV4dHJhVmltQmVnaW4uCisiCisiIEVYVFJBX1ZJTV9TVEFSVCAtIGRvIG5vdCBjaGFuZ2Ugb3IgcmVtb3ZlIHRoaXMgbGluZS4KK2Z1bmN0aW9uISBFeHRyYVZpbVRocm93cG9pbnQoKQorICAgIGlmICFleGlzdHMoImc6RXh0cmFWaW1CZWdpbiIpCisJWG91dCAiRXh0cmFWaW1UaHJvd3BvaW50KCkgdXNlZCBvdXRzaWRlIEV4dHJhVmltKCkgc2NyaXB0LiIKKwlyZXR1cm4gdjp0aHJvd3BvaW50CisgICAgZW5kaWYKKworICAgIGlmIHY6dGhyb3dwb2ludCA9fiAnXmZ1bmN0aW9uXD4nCisJcmV0dXJuIHY6dGhyb3dwb2ludAorICAgIGVuZGlmCisKKyAgICByZXR1cm4gImxpbmUgIiAuCisJXCAoc3Vic3RpdHV0ZSh2OnRocm93cG9pbnQsICcuKiwgbGluZSAnLCAnJywgIiIpIC0gZzpFeHRyYVZpbUJlZ2luKSAuCisJXCAiIG9mIEV4dHJhVmltKCkgc2NyaXB0IgorZW5kZnVuY3Rpb24KKyIgRVhUUkFfVklNX1NUT1AgLSBkbyBub3QgY2hhbmdlIG9yIHJlbW92ZSB0aGlzIGxpbmUuCisKKworIiBNYWtlU2NyaXB0KCkgLSBNYWtlIGEgc2NyaXB0IGZpbGUgZnJvbSBhIGZ1bmN0aW9uLgkJCSAgICB7e3syCisiCisiIENyZWF0ZSBhIHNjcmlwdCB0aGF0IGNvbnNpc3RzIG9mIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiBhOmZ1bmNuYW1lLgorIiBSZXBsYWNlIGFueSAiOnJldHVybiIgYnkgYSAiOmZpbmlzaCIsIGFueSBhcmd1bWVudCB2YXJpYWJsZSBieSBhIGdsb2JhbAorIiB2YXJpYWJsZSwgYW5kIGFuZCBldmVyeSAiOmNhbGwiIGJ5IGEgIjpzb3VyY2UiIGZvciB0aGUgbmV4dCBmb2xsb3dpbmcgYXJndW1lbnQKKyIgaW4gdGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBpZiBzaW1pbGFyIHRlc3RzIGFyZQorIiB0byBiZSBtYWRlIGZvciBhICI6cmV0dXJuIiBmcm9tIGEgZnVuY3Rpb24gY2FsbCBvciBhICI6ZmluaXNoIiBpbiBhIHNjcmlwdAorIiBmaWxlLgorIgorIiBJbiBvcmRlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gc3BlY2lmeWluZyBhbiBJTlRFUlJVUFQgbG9jYXRpb24gKHNlZSBFeHRyYVZpbSkKKyIgYXMgYSBzY3JpcHQgZmlsZSwgdXNlIEV4ZWNBc1NjcmlwdCBiZWxvdy4KKyIKKyIgRVhUUkFfVklNX1NUQVJUIC0gZG8gbm90IGNoYW5nZSBvciByZW1vdmUgdGhpcyBsaW5lLgorZnVuY3Rpb24hIE1ha2VTY3JpcHQoZnVuY25hbWUsIC4uLikKKyAgICBsZXQgc2NyaXB0ID0gdGVtcG5hbWUoKQorICAgIGV4ZWN1dGUgInJlZGlyISA+IiAuIHNjcmlwdAorICAgIGV4ZWN1dGUgImZ1bmN0aW9uIiBhOmZ1bmNuYW1lCisgICAgcmVkaXIgRU5ECisgICAgZXhlY3V0ZSAiZWRpdCIgc2NyaXB0CisgICAgIiBEZWxldGUgdGhlICJmdW5jdGlvbiIgYW5kIHRoZSAiZW5kZnVuY3Rpb24iIGxpbmVzLiAgRG8gbm90IGluY2x1ZGUgdGhlCisgICAgIiB3b3JkICJmdW5jdGlvbiIgaW4gdGhlIHBhdHRlcm4gc2luY2UgaXQgbWlnaHQgYmUgdHJhbnNsYXRlZCBpZiBMQU5HIGlzCisgICAgIiBzZXQuICBXaGVuIE1ha2VTY3JpcHQoKSBpcyBiZWluZyBkZWJ1Z2dlZCwgdGhpcyBkZWxldGVzIGFsc28gdGhlIGRlYnVnZ2luZworICAgICIgb3V0cHV0IG9mIGl0cyBsaW5lIDMgYW5kIDQuCisgICAgZXhlYyAnMSwvLionIC4gYTpmdW5jbmFtZSAuICcoLiopL2QnCisgICAgL15cZCpccyplbmRmdW5jdGlvblw+LywkZAorICAgICVzL15cZCovL2UKKyAgICAlcy9yZXR1cm4vZmluaXNoL2UKKyAgICAlcy9cPGE6XChcaFx3KlwpL2c6XDEvZ2UKKyAgICBub3JtYWwgZ2cwCisgICAgbGV0IGNudCA9IDAKKyAgICB3aGlsZSBzZWFyY2goJ1w8Y2FsbFxzKlwlKFx1XHxzOlwpXHcqXHMqKC4qKScsICdXJykgPiAwCisJbGV0IGNudCA9IGNudCArIDEKKwlzL1w8Y2FsbFxzKlwlKFx1XHxzOlwpXHcqXHMqKC4qKS9cPSdzb3VyY2UgJyAuIGE6e2NudH0vCisgICAgZW5kd2hpbGUKKyAgICBnL15ccyokL2QKKyAgICB3cml0ZQorICAgIGJ3aXBlb3V0CisgICAgcmV0dXJuIHNjcmlwdAorZW5kZnVuY3Rpb24KKyIgRVhUUkFfVklNX1NUT1AgLSBkbyBub3QgY2hhbmdlIG9yIHJlbW92ZSB0aGlzIGxpbmUuCisKKworIiBFeGVjQXNTY3JpcHQgLSBTb3VyY2UgYSB0ZW1wb3Jhcnkgc2NyaXB0IG1hZGUgZnJvbSBhIGZ1bmN0aW9uLgkgICAge3t7MgorIgorIiBNYWtlIGEgdGVtcG9yYXJ5IHNjcmlwdCBmaWxlIGZyb20gdGhlIGZ1bmN0aW9uIGE6ZnVuY25hbWUsICI6c291cmNlIiBpdCwgYW5kCisiIGRlbGV0ZSBpdCBhZnRlcndhcmRzLgorIgorIiBXaGVuIGluc2lkZSAiOmlmIEV4dHJhVmltKCkiLCBhZGQgYSBmaWxlIGJyZWFrcG9pbnQgZm9yIGVhY2ggSU5URVJSVVBUCisiIGxvY2F0aW9uIHNwZWNpZmllZCBpbiB0aGUgZnVuY3Rpb24uCisiCisiIEVYVFJBX1ZJTV9TVEFSVCAtIGRvIG5vdCBjaGFuZ2Ugb3IgcmVtb3ZlIHRoaXMgbGluZS4KK2Z1bmN0aW9uISBFeGVjQXNTY3JpcHQoZnVuY25hbWUpCisgICAgIiBNYWtlIGEgc2NyaXB0IGZyb20gdGhlIGZ1bmN0aW9uIHBhc3NlZCBhcyBhcmd1bWVudC4KKyAgICBsZXQgc2NyaXB0ID0gTWFrZVNjcmlwdChhOmZ1bmNuYW1lKQorCisgICAgIiBXaGVuIHJ1bm5pbmcgaW4gYW4gZXh0cmEgVmltIHByb2Nlc3MsIGFkZCBhIGZpbGUgYnJlYWtwb2ludCBmb3IgZWFjaAorICAgICIgZnVuY3Rpb24gYnJlYWtwb2ludCBzZXQgd2hlbiB0aGUgZXh0cmEgVmltIHByb2Nlc3Mgd2FzIGludm9rZWQgYnkKKyAgICAiIEV4dHJhVmltKCkuCisgICAgaWYgZXhpc3RzKCJnOkV4dHJhVmltUmVzdWx0IikKKwlsZXQgYnBsaXN0ID0gdGVtcG5hbWUoKQorCWV4ZWN1dGUgInJlZGlyISA+IiAuIGJwbGlzdAorCWJyZWFrbGlzdAorCXJlZGlyIEVORAorCWV4ZWN1dGUgImVkaXQiIGJwbGlzdAorCSIgR2V0IHRoZSBsaW5lIG51bWJlciBmcm9tIHRoZSBmdW5jdGlvbiBicmVha3BvaW50LiAgV29ya3MgYWxzbyB3aGVuCisJIiBMQU5HIGlzIHNldC4KKwlleGVjdXRlICd2L15ccypcZFwrXHNcK2Z1bmNcc1wrJyAuIGE6ZnVuY25hbWUgLiAnXHMuKi9kJworCSVzL15ccypcZFwrXHNcK2Z1bmNcc1wrXCUoXHVcfHM6XClcdypcc1xEKlwoXGQqXCkuKi9cMS9lCisJbGV0IGNudCA9IDAKKwl3aGlsZSBjbnQgPCBsaW5lKCIkIikKKwkgICAgbGV0IGNudCA9IGNudCArIDEKKwkgICAgaWYgZ2V0bGluZShjbnQpICE9ICIiCisJCWV4ZWN1dGUgImJyZWFrYWRkIGZpbGUiIGdldGxpbmUoY250KSBzY3JpcHQKKwkgICAgZW5kaWYKKwllbmR3aGlsZQorCWJ3aXBlb3V0IQorCWNhbGwgZGVsZXRlKGJwbGlzdCkKKyAgICBlbmRpZgorCisgICAgIiBTb3VyY2UgYW5kIGRlbGV0ZSB0aGUgc2NyaXB0LgorICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0CisgICAgY2FsbCBkZWxldGUoc2NyaXB0KQorZW5kZnVuY3Rpb24KKworY29tISAtbmFyZ3M9MSAtYmFyIEV4ZWNBc1NjcmlwdCBjYWxsIEV4ZWNBc1NjcmlwdCg8Zi1hcmdzPikKKyIgRVhUUkFfVklNX1NUT1AgLSBkbyBub3QgY2hhbmdlIG9yIHJlbW92ZSB0aGlzIGxpbmUuCisKKworIiBFTkRfT0ZfVEVTVF9FTlZJUk9OTUVOVCAtIGRvIG5vdCBjaGFuZ2Ugb3IgcmVtb3ZlIHRoaXMgbGluZS4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDE6ICAgOmVuZHdoaWxlIGluIGZ1bmN0aW9uCQkJCQkgICAge3t7MQorIgorIgkgICAgRGV0ZWN0IGlmIGEgYnJva2VuIGxvb3AgaXMgKGluY29ycmVjdGx5KSByZWFjdGl2YXRlZCBieSB0aGUKKyIJICAgIDplbmR3aGlsZS4gIFVzZSBhIDpyZXR1cm4gdG8gcHJldmVudCBhbiBlbmRsZXNzIGxvb3AsIGFuZCBtYWtlCisiCSAgICB0aGlzIHRlc3QgZmlyc3QgdG8gZ2V0IGEgbWVhbmluZ2Z1bCByZXN1bHQgb24gYW4gZXJyb3IgYmVmb3JlIG90aGVyCisiCSAgICB0ZXN0cyB3aWxsIGhhbmcuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworZnVuY3Rpb24hIEYoKQorICAgIFhwYXRoIDEJCQkJCSIgWDogMQorICAgIGxldCBmaXJzdCA9IDEKKyAgICBYbG9vcElOSVQgMiA4CisgICAgd2hpbGUgMQorCVhsb29wIDEJCQkJCSIgWDogMgkgICAgKyAwICogMTYKKwlpZiBmaXJzdAorCSAgICBYbG9vcCAyCQkJCSIgWDogNAkgICAgKyAwICogMzIKKwkgICAgbGV0IGZpcnN0ID0gMAorCSAgICBYbG9vcE5FWFQKKwkgICAgYnJlYWsKKwllbHNlCisJICAgIFhsb29wIDQJCQkJIiBYOiAwCSAgICArIDAgKiA2NAorCSAgICByZXR1cm4KKwllbmRpZgorICAgIGVuZHdoaWxlCitlbmRmdW5jdGlvbgorCitjYWxsIEYoKQorWHBhdGggMTI4CQkJCQkiIFg6IDEyOAorCitmdW5jdGlvbiEgRygpCisgICAgWHBhdGggMjU2CQkJCQkiIFg6IDI1NiAgICArIDAgKiAyMDQ4CisgICAgbGV0IGZpcnN0ID0gMQorICAgIFhsb29wSU5JVCA1MTIgOAorICAgIHdoaWxlIDEKKwlYbG9vcCAxCQkJCQkiIFg6IDUxMiAgICArIDAgKiA0MDk2CisJaWYgZmlyc3QKKwkgICAgWGxvb3AgMgkJCQkiIFg6IDEwMjQgICArIDAgKiA4MTkyCisJICAgIGxldCBmaXJzdCA9IDAKKwkgICAgWGxvb3BORVhUCisJICAgIGJyZWFrCisJZWxzZQorCSAgICBYbG9vcCA0CQkJCSIgWDogMAkgICAgKyAwICogMTYzODQKKwkgICAgcmV0dXJuCisJZW5kaWYKKwlpZiAxCSIgdW5tYXRjaGVkIDppZgorICAgIGVuZHdoaWxlCitlbmRmdW5jdGlvbgorCitjYWxsIEcoKQorWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKKworWGNoZWNrIDM0Njk1CisKKyIgTGVhdmUgRiBhbmQgRyBmb3IgZXhlY3V0aW9uIGFzIHNjcmlwdHMgaW4gdGhlIG5leHQgdGVzdC4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDI6ICAgOmVuZHdoaWxlIGluIHNjcmlwdAkJCQkJCSAgICB7e3sxCisiCisiCSAgICBEZXRlY3QgaWYgYSBicm9rZW4gbG9vcCBpcyAoaW5jb3JyZWN0bHkpIHJlYWN0aXZhdGVkIGJ5IHRoZQorIgkgICAgOmVuZHdoaWxlLiAgVXNlIGEgOmZpbmlzaCB0byBwcmV2ZW50IGFuIGVuZGxlc3MgbG9vcCwgYW5kIHBsYWNlCisiCSAgICB0aGlzIHRlc3QgYmVmb3JlIG90aGVycyB0aGF0IG1pZ2h0IGhhbmcgdG8gZ2V0IGEgbWVhbmluZ2Z1bCByZXN1bHQKKyIJICAgIG9uIGFuIGVycm9yLgorIgorIgkgICAgVGhpcyB0ZXN0IGV4ZWN1dGVzIHRoZSBib2RpZXMgb2YgdGhlIGZ1bmN0aW9ucyBGIGFuZCBHIGZyb20gdGhlCisiCSAgICBwcmV2aW91cyB0ZXN0IGFzIHNjcmlwdCBmaWxlcyAoOnJldHVybiByZXBsYWNlZCBieSA6ZmluaXNoKS4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitFeGVjQXNTY3JpcHQgRgkJCQkJIiBYOiAxICsgMiArIDQKK1hwYXRoIDEyOAkJCQkJIiBYOiAxMjgKKworRXhlY0FzU2NyaXB0IEcJCQkJCSIgWDogMjU2ICsgNTEyICsgMTAyNAorWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKKwordW5sZXQgZmlyc3QKK2RlbGZ1bmN0aW9uIEYKK2RlbGZ1bmN0aW9uIEcKKworWGNoZWNrIDM0Njk1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzOiAgIDppZiwgOmVsc2VpZiwgOndoaWxlLCA6Y29udGludWUsIDpicmVhawkJCSAgICB7e3sxCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKK2lmIDEKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKKyAgICBsZXQgbG9vcHMgPSAzCisgICAgWGxvb3BJTklUIDIgNTEyCisgICAgd2hpbGUgbG9vcHMgPiAtMQkgICAgIiBtYWluIGxvb3A6IGxvb3BzID09IDMsIDIsIDEgKHdoaWNoIGJyZWFrcykKKwlpZiBsb29wcyA8PSAwCisJICAgIGxldCBicmVha19lcnIgPSAxCisJICAgIGxldCBsb29wcyA9IC0xCisJZWxzZQkJCQkJIiAgICAzOiAgMjogICAgICAxOgorCSAgICBYbG9vcCAxCQkJCSIgWDogMiArIDIqNTEyICsgMio1MTIqNTEyCisJZW5kaWYKKwlpZiAobG9vcHMgPT0gMikKKwkgICAgd2hpbGUgbG9vcHMgPT0gMiAiIGR1bW15IGxvb3AKKwkJWGxvb3AgMgkJCQkiIFg6ICAgICA0KjUxMgorCQlsZXQgbG9vcHMgPSBsb29wcyAtIDEKKwkJY29udGludWUgICAgIiBzdG9wIGR1bW15IGxvb3AKKwkJWGxvb3AgNAkJCQkiIFg6ICAgICAwCisJICAgIGVuZHdoaWxlCisJICAgIFhsb29wTkVYVAorCSAgICBjb250aW51ZQkgICAgIiBjb250aW51ZSBtYWluIGxvb3AKKwkgICAgWGxvb3AgOAkJCQkiIFg6ICAgICAwCisJZWxzZWlmIChsb29wcyA9PSAxKQorCSAgICBsZXQgcCA9IDEKKwkgICAgd2hpbGUgcAkgICAgIiBkdW1teSBsb29wCisJCVhsb29wIDE2CQkJIiBYOgkJIDMyKjUxMio1MTIKKwkJbGV0IHAgPSAwCisJCWJyZWFrCSAgICAiIGJyZWFrIGR1bW15IGxvb3AKKwkJWGxvb3AgMzIJCQkiIFg6CQkgMAorCSAgICBlbmR3aGlsZQorCSAgICBYbG9vcCA2NAkJCQkiIFg6CQkgMTI4KjUxMio1MTIKKwkgICAgdW5sZXQgcAorCSAgICBicmVhawkgICAgIiBicmVhayBtYWluIGxvb3AKKwkgICAgWGxvb3AgMTI4CQkJCSIgWDoJCSAwCisJZW5kaWYKKwlpZiAobG9vcHMgPiAwKQorCSAgICBYbG9vcCAyNTYJCQkJIiBYOiA1MTIKKwllbmRpZgorCXdoaWxlIGxvb3BzID09IDMgICAgIiBkdW1teSBsb29wCisJICAgIGxldCBsb29wcyA9IGxvb3BzIC0gMQorCWVuZHdoaWxlCSAgICAiIGVuZCBkdW1teSBsb29wCisJWGxvb3BORVhUCisgICAgZW5kd2hpbGUJCSAgICAiIGVuZCBtYWluIGxvb3AKKyAgICBYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAxMDI0KjUxMio1MTIKK2Vsc2UKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCitlbmRpZgorWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDQwOTYqNTEyKjUxMgoraWYgZXhpc3RzKCJicmVha19lcnIiKQorICAgICIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgYWRkIGV4cGxpY2l0bHk6CisgICAgbGV0IFhwYXRoID0gWHBhdGggKyAyMTQ3NDgzNjQ4CQkiIFg6IDAKKyAgICB1bmxldCBicmVha19lcnIKK2VuZGlmCisKK3VubGV0IGxvb3BzCisKK1hjaGVjayAxMzg0NjQ4MTk1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA0OiAgIDpyZXR1cm4JCQkJCQkJICAgIHt7ezEKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgRigpCisgICAgaWYgMQorCVhwYXRoIDEJCQkJCSIgWDogMQorCWxldCBsb29wcyA9IDMKKwlYbG9vcElOSVQgMiAxNgorCXdoaWxlIGxvb3BzID4gMAkJCQkiICAgIDM6ICAyOiAgICAgMToKKwkgICAgWGxvb3AgMQkJCQkiIFg6IDIgKyAyKjE2ICsgMCoxNioxNgorCSAgICBpZiAobG9vcHMgPT0gMikKKwkJWGxvb3AgMgkJCQkiIFg6ICAgICA0KjE2CisJCXJldHVybgorCQlYbG9vcCA0CQkJCSIgWDogICAgIDAKKwkgICAgZW5kaWYKKwkgICAgWGxvb3AgOAkJCQkiIFg6IDE2CisJICAgIGxldCBsb29wcyA9IGxvb3BzIC0gMQorCSAgICBYbG9vcE5FWFQKKwllbmR3aGlsZQorCVhwYXRoIDgxOTIJCQkJIiBYOiAwCisgICAgZWxzZQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitjYWxsIEYoKQorWHBhdGggMzI3NjgJCQkJCSIgWDogOCoxNioxNioxNgorCitYY2hlY2sgMzI4ODMKKworIiBMZWF2ZSBGIGZvciBleGVjdXRpb24gYXMgYSBzY3JpcHQgaW4gdGhlIG5leHQgdGVzdC4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDU6ICAgOmZpbmlzaAkJCQkJCQkgICAge3t7MQorIgorIgkgICAgVGhpcyB0ZXN0IGV4ZWN1dGVzIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiBGIGZyb20gdGhlIHByZXZpb3VzIHRlc3QKKyIJICAgIGFzIGEgc2NyaXB0IGZpbGUgKDpyZXR1cm4gcmVwbGFjZWQgYnkgOmZpbmlzaCkuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworRXhlY0FzU2NyaXB0IEYJCQkJCSIgWDogMSArIDIgKyAyKjE2ICsgNCoxNiArIDE2CitYcGF0aCAzMjc2OAkJCQkJIiBYOiAzMjc2OAorCit1bmxldCBsb29wcworZGVsZnVuY3Rpb24gRgorCitYY2hlY2sgMzI4ODMKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDY6ICAgRGVmaW5pbmcgZnVuY3Rpb25zIGluIDp3aGlsZSBsb29wcwkJCQkgICAge3t7MQorIgorIgkgICAgIEZ1bmN0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbnNpZGUgb3RoZXIgZnVuY3Rpb25zLiAgQW4gaW5uZXIgZnVuY3Rpb24KKyIJICAgICBnZXRzIGRlZmluZWQgd2hlbiB0aGUgb3V0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQuICBGdW5jdGlvbnMgbWF5CisiCSAgICAgYWxzbyBiZSBkZWZpbmVkIGluc2lkZSB3aGlsZSBsb29wcy4gIEV4cHJlc3Npb25zIGluIGJyYWNlcyBmb3IKKyIJICAgICBkZWZpbmluZyB0aGUgZnVuY3Rpb24gbmFtZSBhcmUgYWxsb3dlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitpZiBFeHRyYVZpbSgpCisKKyAgICAiIFRoZSBjb21tYW5kIENBTEwgY29sbGVjdHMgdGhlIGFyZ3VtZW50IG9mIGFsbCBpdHMgaW52b2NhdGlvbnMgaW4gImNhbGxzIgorICAgICIgd2hlbiB1c2VkIGZyb20gYSBmdW5jdGlvbiAodGhhdCBpcywgd2hlbiB0aGUgZ2xvYmFsIHZhcmlhYmxlICJjYWxscyIgbmVlZHMKKyAgICAiIHRoZSAiZzoiIHByZWZpeCkuICBUaGlzIGlzIHRvIGNoZWNrIHRoYXQgdGhlIGZ1bmN0aW9uIGNvZGUgaXMgc2tpcHBlZCB3aGVuCisgICAgIiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZC4gIEZvciBpbm5lciBmdW5jdGlvbnMsIGRvIHNvIG9ubHkgaWYgdGhlIG91dGVyCisgICAgIiBmdW5jdGlvbiBpcyBub3QgYmVpbmcgZXhlY3V0ZWQuCisgICAgIgorICAgIGxldCBjYWxscyA9ICIiCisgICAgY29tISAtbmFyZ3M9MSBDQUxMCisJCVwgaWYgIWV4aXN0cygiY2FsbHMiKSAmJiAhZXhpc3RzKCJvdXRlciIpIHwKKwkJXCBsZXQgZzpjYWxscyA9IGc6Y2FsbHMgLiA8YXJncz4gfAorCQlcIGVuZGlmCisKKworICAgIFhsb29wSU5JVCEgMSAxNgorCisgICAgbGV0IGkgPSAwCisgICAgd2hpbGUgaSA8IDMKKworCVhsb29wTkVYVAorCWxldCBpID0gaSArIDEKKworCWlmIGkgPT0gMQorCSAgICBYbG9vcCAxCQkJCSIgWDogMQorCSAgICBmdW5jdGlvbiEgRjEoYXJnKQorCQlDQUxMIGE6YXJnCisJCWxldCBvdXRlciA9IDEKKworCQlYbG9vcElOSVQhIDQwOTYgNAorCQlsZXQgaiA9IDAKKwkJd2hpbGUgaiA8IDEKKwkJICAgIFhsb29wTkVYVAorCQkgICAgWGxvb3AgMQkJCSIgWDogNDA5NgorCQkgICAgbGV0IGogPSBqICsgMQorCQkgICAgZnVuY3Rpb24hIEcxKGFyZykKKwkJCUNBTEwgYTphcmcKKwkJICAgIGVuZGZ1bmN0aW9uCisJCSAgICBYbG9vcCAyCQkJIiBYOiA4MTkyCisJCWVuZHdoaWxlCisJICAgIGVuZGZ1bmN0aW9uCisJICAgIFhsb29wIDIJCQkJIiBYOiAyCisKKwkgICAgY29udGludWUKKwllbmRpZgorCisJWGxvb3AgNAkJCQkJIiBYOiA0ICogKDE2ICsgMjU2KQorCWZ1bmN0aW9uISBGe2l9KGksIGFyZykKKwkgICAgQ0FMTCBhOmFyZworCSAgICBsZXQgb3V0ZXIgPSAxCisKKwkgICAgWGxvb3BJTklUISAxNjM4NCA0CisJICAgIGlmIGE6aSA9PSAzCisJCVhsb29wTkVYVAorCQlYbG9vcE5FWFQKKwkJWGxvb3BORVhUCisJICAgIGVuZGlmCisJICAgIGxldCBrID0gMAorCSAgICB3aGlsZSBrIDwgMworCQlYbG9vcE5FWFQKKwkJWGxvb3AgMQkJCQkiIFg6IDE2Mzg0KigxKzQrMTYrNjQrMjU2KzEwMjQpCisJCWxldCBrID0gayArIDEKKwkJZnVuY3Rpb24hIEd7YTppfXtrfShhcmcpCisJCSAgICBDQUxMIGE6YXJnCisJCWVuZGZ1bmN0aW9uCisJCVhsb29wIDIJCQkJIiBYOiAzMjc2OCooMSs0KzE2KzY0KzI1NisxMDI0KQorCSAgICBlbmR3aGlsZQorCWVuZGZ1bmN0aW9uCisJWGxvb3AgOAkJCQkJIiBYOiA4ICogKDE2ICsgMjU2KQorCisgICAgZW5kd2hpbGUKKworICAgIGlmIGV4aXN0cygiKkcxIikKKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDAKKyAgICBlbmRpZgorICAgIGlmIGV4aXN0cygiKkYxIikKKwljYWxsIEYxKCJGMSIpCisJaWYgZXhpc3RzKCIqRzEiKQorCSAgICBjYWxsIEcxKCJHMSIpCisJZW5kaWYKKyAgICBlbmRpZgorCisgICAgaWYgZXhpc3RzKCJHMjEiKSB8fCBleGlzdHMoIkcyMSIpIHx8IGV4aXN0cygiRzIxIikKKwlYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICBpZiBleGlzdHMoIipGMiIpCisJY2FsbCBGMigyLCAiRjIiKQorCWlmIGV4aXN0cygiKkcyMSIpCisJICAgIGNhbGwgRzIxKCJHMjEiKQorCWVuZGlmCisJaWYgZXhpc3RzKCIqRzIyIikKKwkgICAgY2FsbCBHMjIoIkcyMiIpCisJZW5kaWYKKwlpZiBleGlzdHMoIipHMjMiKQorCSAgICBjYWxsIEcyMygiRzIzIikKKwllbmRpZgorICAgIGVuZGlmCisKKyAgICBpZiBleGlzdHMoIkczMSIpIHx8IGV4aXN0cygiRzMxIikgfHwgZXhpc3RzKCJHMzEiKQorCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKyAgICBlbmRpZgorICAgIGlmIGV4aXN0cygiKkYzIikKKwljYWxsIEYzKDMsICJGMyIpCisJaWYgZXhpc3RzKCIqRzMxIikKKwkgICAgY2FsbCBHMzEoIkczMSIpCisJZW5kaWYKKwlpZiBleGlzdHMoIipHMzIiKQorCSAgICBjYWxsIEczMigiRzMyIikKKwllbmRpZgorCWlmIGV4aXN0cygiKkczMyIpCisJICAgIGNhbGwgRzMzKCJHMzMiKQorCWVuZGlmCisgICAgZW5kaWYKKworICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDUzNjg3MDkxMgorCisgICAgaWYgY2FsbHMgIT0gIkYxRzFGMkcyMUcyMkcyM0YzRzMxRzMyRzMzIgorCVhwYXRoIDEwNzM3NDE4MjQJCQkiIFg6IDAKKwlYb3V0ICJjYWxscyBpcyIgY2FsbHMKKyAgICBlbmRpZgorCisgICAgZGVsZnVuY3Rpb24gRjEKKyAgICBkZWxmdW5jdGlvbiBHMQorICAgIGRlbGZ1bmN0aW9uIEYyCisgICAgZGVsZnVuY3Rpb24gRzIxCisgICAgZGVsZnVuY3Rpb24gRzIyCisgICAgZGVsZnVuY3Rpb24gRzIzCisgICAgZGVsZnVuY3Rpb24gRzMxCisgICAgZGVsZnVuY3Rpb24gRzMyCisgICAgZGVsZnVuY3Rpb24gRzMzCisKK2VuZGlmCisKK1hjaGVjayA2MDM5Nzg5NDcKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDc6ICAgQ29udGludWluZyBvbiBlcnJvcnMgb3V0c2lkZSBmdW5jdGlvbnMJCQkgICAge3t7MQorIgorIgkgICAgT24gYW4gZXJyb3Igb3V0c2lkZSBhIGZ1bmN0aW9uLCB0aGUgc2NyaXB0IHByb2Nlc3NpbmcgY29udGludWVzCisiCSAgICBhdCB0aGUgbGluZSBmb2xsb3dpbmcgdGhlIG91dGVybW9zdCA6ZW5kaWYgb3IgOmVuZHdoaWxlLiAgV2hlbiBub3QKKyIJICAgIGluc2lkZSBhbiA6aWYgb3IgOndoaWxlLCB0aGUgc2NyaXB0IHByb2Nlc3NpbmcgY29udGludWVzIGF0IHRoZSBuZXh0CisiCSAgICBsaW5lLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIDEKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKKyAgICB3aGlsZSAxCisJWHBhdGggMgkJCQkJIiBYOiAyCisJYXNkZgorCVhwYXRoIDQJCQkJCSIgWDogMAorCWJyZWFrCisgICAgZW5kd2hpbGUgfCBYcGF0aCA4CQkJCSIgWDogMAorICAgIFhwYXRoIDE2CQkJCQkiIFg6IDAKK2VuZGlmIHwgWHBhdGggMzIJCQkJIiBYOiAwCitYcGF0aCA2NAkJCQkJIiBYOiA2NAorCit3aGlsZSAxCisgICAgWHBhdGggMTI4CQkJCQkiIFg6IDEyOAorICAgIGlmIDEKKwlYcGF0aCAyNTYJCQkJIiBYOiAyNTYKKwlhc2RmCisJWHBhdGggNTEyCQkJCSIgWDogMAorICAgIGVuZGlmIHwgWHBhdGggMTAyNAkJCQkiIFg6IDAKKyAgICBYcGF0aCAyMDQ4CQkJCQkiIFg6IDAKKyAgICBicmVhaworZW5kd2hpbGUgfCBYcGF0aCA0MDk2CQkJCSIgWDogMAorWHBhdGggODE5MgkJCQkJIiBYOiA4MTkyCisKK2FzZGYKK1hwYXRoIDE2Mzg0CQkJCQkiIFg6IDE2Mzg0CisKK2FzZGYgfCBYcGF0aCAzMjc2OAkJCQkiIFg6IDAKK1hwYXRoIDY1NTM2CQkJCQkiIFg6IDY1NTM2CisKK1hjaGVjayA5MDU2MworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgODogICBBYm9ydGluZyBhbmQgY29udGludWluZyBvbiBlcnJvcnMgaW5zaWRlIGZ1bmN0aW9ucwkJICAgIHt7ezEKKyIKKyIJICAgIE9uIGFuIGVycm9yIGluc2lkZSBhIGZ1bmN0aW9uIHdpdGhvdXQgdGhlICJhYm9ydCIgYXR0cmlidXRlLCB0aGUKKyIJICAgIHNjcmlwdCBwcm9jZXNzaW5nIGNvbnRpbnVlcyBhdCB0aGUgbmV4dCBsaW5lICh1bmxlc3MgdGhlIGVycm9yIHdhcworIgkgICAgaW4gYSA6cmV0dXJuIGNvbW1hbmQpLiAgT24gYW4gZXJyb3IgaW5zaWRlIGEgZnVuY3Rpb24gd2l0aCB0aGUKKyIJICAgICJhYm9ydCIgYXR0cmlidXRlLCB0aGUgZnVuY3Rpb24gaXMgYWJvcnRlZCBhbmQgdGhlIHNjcmlwdCBwcm9jZXNzaW5nCisiCSAgICBjb250aW51ZXMgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGw7IHRoZSB2YWx1ZSAtMSBpcyByZXR1cm5lZCB0aGVuLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBGKCkKKyAgICBpZiAxCisJWHBhdGggMQkJCQkJIiBYOiAxCisJd2hpbGUgMQorCSAgICBYcGF0aCAyCQkJCSIgWDogMgorCSAgICBhc2RmCisJICAgIFhwYXRoIDQJCQkJIiBYOiA0CisJICAgIGFzZGYgfCBYcGF0aCA4CQkJIiBYOiAwCisJICAgIFhwYXRoIDE2CQkJCSIgWDogMTYKKwkgICAgYnJlYWsKKwllbmR3aGlsZQorCVhwYXRoIDMyCQkJCSIgWDogMzIKKyAgICBlbmRpZiB8IFhwYXRoIDY0CQkJCSIgWDogNjQKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMTI4CisKKyAgICB3aGlsZSAxCisJWHBhdGggMjU2CQkJCSIgWDogMjU2CisJaWYgMQorCSAgICBYcGF0aCA1MTIJCQkJIiBYOiA1MTIKKwkgICAgYXNkZgorCSAgICBYcGF0aCAxMDI0CQkJCSIgWDogMTAyNAorCSAgICBhc2RmIHwgWHBhdGggMjA0OAkJCSIgWDogMAorCSAgICBYcGF0aCA0MDk2CQkJCSIgWDogNDA5NgorCWVuZGlmCisJWHBhdGggODE5MgkJCQkiIFg6IDgxOTIKKwlicmVhaworICAgIGVuZHdoaWxlIHwgWHBhdGggMTYzODQJCQkiIFg6IDE2Mzg0CisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKKworICAgIHJldHVybiBub3ZhcgkJIiByZXR1cm5zIChkZWZhdWx0IHJldHVybiB2YWx1ZSAwKQorICAgIFhwYXRoIDY1NTM2CQkJCQkiIFg6IDAKKyAgICByZXR1cm4gMQkJCSIgbm90IHJlYWNoZWQKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBHKCkgYWJvcnQKKyAgICBpZiAxCisJWHBhdGggMTMxMDcyCQkJCSIgWDogMTMxMDcyCisJd2hpbGUgMQorCSAgICBYcGF0aCAyNjIxNDQJCQkiIFg6IDI2MjE0NAorCSAgICBhc2RmCQkiIHJldHVybnMgLTEKKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiAwCisJICAgIGJyZWFrCisJZW5kd2hpbGUKKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorICAgIGVuZGlmIHwgWHBhdGggMjA5NzE1MgkJCSIgWDogMAorICAgIFhwYXRoIFhwYXRoIDQxOTQzMDQJCQkJIiBYOiAwCisKKyAgICByZXR1cm4gLTQJCQkiIG5vdCByZWFjaGVkCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSCgpIGFib3J0CisgICAgd2hpbGUgMQorCVhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisJaWYgMQorCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKwkgICAgYXNkZgkJIiByZXR1cm5zIC0xCisJICAgIFhwYXRoIDMzNTU0NDMyCQkJIiBYOiAwCisJZW5kaWYKKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDAKKwlicmVhaworICAgIGVuZHdoaWxlIHwgWHBhdGggMTM0MjE3NzI4CQkJIiBYOiAwCisgICAgWHBhdGggMjY4NDM1NDU2CQkJCSIgWDogMAorCisgICAgcmV0dXJuIC00CQkJIiBub3QgcmVhY2hlZAorZW5kZnVuY3Rpb24KKworIiBBYm9ydGVkIGZ1bmN0aW9ucyAoRyBhbmQgSCkgcmV0dXJuIC0xLgorbGV0IHN1bSA9IChGKCkgKyAxKSAtIDQqRygpIC0gOCpIKCkKK1hwYXRoIDUzNjg3MDkxMgkJCQkJIiBYOiA1MzY4NzA5MTIKK2lmIHN1bSAhPSAxMworICAgIFhwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAwCisgICAgWG91dCAic3VtIGlzIiBzdW0KK2VuZGlmCisKK3VubGV0IHN1bQorZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gRworZGVsZnVuY3Rpb24gSAorCitYY2hlY2sgNTYyNDkzNDMxCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA5OiAgIENvbnRpbnVpbmcgYWZ0ZXIgYWJvcnRlZCBmdW5jdGlvbnMJCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSBmdW5jdGlvbiB3aXRoIHRoZSAiYWJvcnQiIGF0dHJpYnV0ZSBpcyBhYm9ydGVkIGR1ZSB0byBhbgorIgkgICAgZXJyb3IsIHRoZSBuZXh0IGZ1bmN0aW9uIGJhY2sgaW4gdGhlIGNhbGwgaGllcmFyY2h5IHdpdGhvdXQgYW4KKyIJICAgICJhYm9ydCIgYXR0cmlidXRlIGNvbnRpbnVlczsgdGhlIHZhbHVlIC0xIGlzIHJldHVybmVkIHRoZW4uCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworZnVuY3Rpb24hIEYoKSBhYm9ydAorICAgIFhwYXRoIDEJCQkJCSIgWDogMQorICAgIGxldCByZXN1bHQgPSBHKCkJIiBub3QgYWJvcnRlZAorICAgIFhwYXRoIDIJCQkJCSIgWDogMgorICAgIGlmIHJlc3VsdCAhPSAyCisJWHBhdGggNAkJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICByZXR1cm4gMQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEcoKQkJIiBubyBhYm9ydCBhdHRyaWJ1dGUKKyAgICBYcGF0aCA4CQkJCQkiIFg6IDgKKyAgICBpZiBIKCkgIT0gLTEJIiBhYm9ydGVkCisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICBYcGF0aCAzMgkJCQkJIiBYOiAzMgorICAgIHJldHVybiAyCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSCgpIGFib3J0CisgICAgWHBhdGggNjQJCQkJCSIgWDogNjQKKyAgICBjYWxsIEkoKQkJIiBhYm9ydGVkCisgICAgWHBhdGggMTI4CQkJCQkiIFg6IDAKKyAgICByZXR1cm4gNAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEkoKSBhYm9ydAorICAgIFhwYXRoIDI1NgkJCQkJIiBYOiAyNTYKKyAgICBhc2RmCQkiIGVycm9yCisgICAgWHBhdGggNTEyCQkJCQkiIFg6IDAKKyAgICByZXR1cm4gOAorZW5kZnVuY3Rpb24KKworaWYgRigpICE9IDEKKyAgICBYcGF0aCAxMDI0CQkJCQkiIFg6IDAKK2VuZGlmCisKK2RlbGZ1bmN0aW9uIEYKK2RlbGZ1bmN0aW9uIEcKK2RlbGZ1bmN0aW9uIEgKK2RlbGZ1bmN0aW9uIEkKKworWGNoZWNrIDM2MworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMTA6ICA6aWYsIDplbHNlaWYsIDp3aGlsZSBhcmd1bWVudCBwYXJzaW5nCQkJICAgIHt7ezEKKyIKKyIJICAgIEEgJyInIG9yICd8JyBpbiBhbiBhcmd1bWVudCBleHByZXNzaW9uIG11c3Qgbm90IGJlIG1peGVkIHVwIHdpdGgKKyIJICAgIGEgY29tbWVudCBvciBhIG5leHQgY29tbWFuZCBhZnRlciBhIGJhci4gIFBhcnNpbmcgZXJyb3JzIHNob3VsZAorIgkgICAgYmUgcmVjb2duaXplZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgTVNHKGVuciwgZW1zZykKKyAgICBsZXQgZW5nbGlzaCA9IHY6bGFuZyA9PSAiQyIgfHwgdjpsYW5nID1+ICdeW0VlXW4nCisgICAgaWYgYTplbnIgPT0gIiIKKwlYb3V0ICJUT0RPOiBBZGQgbWVzc2FnZSBudW1iZXIgZm9yOiIgYTplbXNnCisJbGV0IHY6ZXJybXNnID0gIjoiIC4gdjplcnJtc2cKKyAgICBlbmRpZgorICAgIGxldCBtYXRjaCA9IDEKKyAgICBpZiB2OmVycm1zZyAhfiAnXicuYTplbnIuJzonIHx8IChlbmdsaXNoICYmIHY6ZXJybXNnICF+IGE6ZW1zZykKKwlsZXQgbWF0Y2ggPSAwCisJaWYgdjplcnJtc2cgPT0gIiIKKwkgICAgWG91dCAiTWVzc2FnZSBtaXNzaW5nLiIKKwllbHNlCisJICAgIGxldCB2OmVycm1zZyA9IGVzY2FwZSh2OmVycm1zZywgJyInKQorCSAgICBYb3V0ICJVbmV4cGVjdGVkIG1lc3NhZ2U6IiB2OmVycm1zZworCWVuZGlmCisgICAgZW5kaWYKKyAgICByZXR1cm4gbWF0Y2gKK2VuZGZ1bmN0aW9uCisKK2lmIDEgfHwgc3RybGVuKCJcIiIpIHwgWHBhdGggMQkJCSIgWDogMQorICAgIFhwYXRoIDIJCQkJCSIgWDogMgorZW5kaWYKK1hwYXRoIDQJCQkJCQkiIFg6IDQKKworaWYgMAorZWxzZWlmIDEgfHwgc3RybGVuKCJcIiIpIHwgWHBhdGggOAkJIiBYOiA4CisgICAgWHBhdGggMTYJCQkJCSIgWDogMTYKK2VuZGlmCitYcGF0aCAzMgkJCQkJIiBYOiAzMgorCit3aGlsZSAxIHx8IHN0cmxlbigiXCIiKSB8IFhwYXRoIDY0CQkiIFg6IDY0CisgICAgWHBhdGggMTI4CQkJCQkiIFg6IDEyOAorICAgIGJyZWFrCitlbmR3aGlsZQorWHBhdGggMjU2CQkJCQkiIFg6IDI1NgorCitsZXQgdjplcnJtc2cgPSAiIgoraWYgMSB8fHwgc3RybGVuKCJcIiIpIHwgWHBhdGggNTEyCQkiIFg6IDAKKyAgICBYcGF0aCAxMDI0CQkJCQkiIFg6IDAKK2VuZGlmCitYcGF0aCAyMDQ4CQkJCQkiIFg6IDIwNDgKK2lmICFNU0coJ0UxNScsICJJbnZhbGlkIGV4cHJlc3Npb24iKQorICAgIFhwYXRoIDQwOTYJCQkJCSIgWDogMAorZW5kaWYKKworbGV0IHY6ZXJybXNnID0gIiIKK2lmIDAKK2Vsc2VpZiAxIHx8fCBzdHJsZW4oIlwiIikgfCBYcGF0aCA4MTkyCQkiIFg6IDAKKyAgICBYcGF0aCAxNjM4NAkJCQkJIiBYOiAwCitlbmRpZgorWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKK2lmICFNU0coJ0UxNScsICJJbnZhbGlkIGV4cHJlc3Npb24iKQorICAgIFhwYXRoIDY1NTM2CQkJCQkiIFg6IDAKK2VuZGlmCisKK2xldCB2OmVycm1zZyA9ICIiCit3aGlsZSAxIHx8fCBzdHJsZW4oIlwiIikgfCBYcGF0aCAxMzEwNzIJCSIgWDogMAorICAgIFhwYXRoIDI2MjE0NAkJCQkiIFg6IDAKKyAgICBicmVhaworZW5kd2hpbGUKK1hwYXRoIDUyNDI4OAkJCQkJIiBYOiA1MjQyODgKK2lmICFNU0coJ0UxNScsICJJbnZhbGlkIGV4cHJlc3Npb24iKQorICAgIFhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCitlbmRpZgorCitkZWxmdW5jdGlvbiBNU0cKKworWGNoZWNrIDU1OTYxNQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMTE6ICA6aWYsIDplbHNlaWYsIDp3aGlsZSBhcmd1bWVudCBldmFsdWF0aW9uIGFmdGVyIGFib3J0CSAgICB7e3sxCisiCisiCSAgICBXaGVuIGNvZGUgaXMgc2tpcHBlZCBvdmVyIGR1ZSB0byBhbiBlcnJvciwgdGhlIGJvb2xlYW4gYXJndW1lbnQgdG8KKyIJICAgIGFuIDppZiwgOmVsc2VpZiwgb3IgOndoaWxlIG11c3Qgbm90IGJlIGV2YWx1YXRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgY2FsbHMgPSAwCisKK2Z1bmN0aW9uISBQKG51bSkKKyAgICBsZXQgZzpjYWxscyA9IGc6Y2FsbHMgKyBhOm51bSAgICIgc2lkZSBlZmZlY3Qgb24gY2FsbAorICAgIHJldHVybiAwCitlbmRmdW5jdGlvbgorCitpZiAxCisgICAgWHBhdGggMQkJCQkJIiBYOiAxCisgICAgYXNkZgkJIiBlcnJvcgorICAgIFhwYXRoIDIJCQkJCSIgWDogMAorICAgIGlmIFAoMSkJCSIgc2hvdWxkIG5vdCBiZSBjYWxsZWQKKwlYcGF0aCA0CQkJCQkiIFg6IDAKKyAgICBlbHNlaWYgIVAoMikJIiBzaG91bGQgbm90IGJlIGNhbGxlZAorCVhwYXRoIDgJCQkJCSIgWDogMAorICAgIGVsc2UKKwlYcGF0aCAxNgkJCQkiIFg6IDAKKyAgICBlbmRpZgorICAgIFhwYXRoIDMyCQkJCQkiIFg6IDAKKyAgICB3aGlsZSBQKDQpCQkiIHNob3VsZCBub3QgYmUgY2FsbGVkCisJWHBhdGggNjQJCQkJIiBYOiAwCisgICAgZW5kd2hpbGUKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMAorZW5kaWYKKworaWYgY2FsbHMgJSAyCisgICAgWHBhdGggMjU2CQkJCQkiIFg6IDAKK2VuZGlmCitpZiAoY2FsbHMvMikgJSAyCisgICAgWHBhdGggNTEyCQkJCQkiIFg6IDAKK2VuZGlmCitpZiAoY2FsbHMvNCkgJSAyCisgICAgWHBhdGggMTAyNAkJCQkJIiBYOiAwCitlbmRpZgorWHBhdGggMjA0OAkJCQkJIiBYOiAyMDQ4CisKK3VubGV0IGNhbGxzCitkZWxmdW5jdGlvbiBQCisKK1hjaGVjayAyMDQ5CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAxMjogIEV4cHJlc3Npb25zIGluIGJyYWNlcyBpbiBza2lwcGVkIGNvZGUJCQkgICAge3t7MQorIgorIgkgICAgSW4gY29kZSBza2lwcGVkIG92ZXIgZHVlIHRvIGFuIGVycm9yIG9yIGluYWN0aXZlIGNvbmRpdGlvbmFsLAorIgkgICAgYW4gZXhwcmVzc2lvbiBpbiBicmFjZXMgYXMgcGFydCBvZiBhIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIG5hbWUKKyIJICAgIHNob3VsZCBub3QgYmUgZXZhbHVhdGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK1hsb29wSU5JVCAxIDgKKworZnVuY3Rpb24hIE5VTEwoKQorICAgIFhsb29wIDEJCQkJCSIgWDogMAorICAgIHJldHVybiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgWkVSTygpCisgICAgWGxvb3AgMgkJCQkJIiBYOiAwCisgICAgcmV0dXJuIDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBGMCgpCisgICAgWGxvb3AgNAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRjEoYXJnKQorICAgIFhwYXRoIDQwOTYJCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworbGV0IFYwID0gMQorCitYcGF0aCA4MTkyCQkJCQkiIFg6IDgxOTIKK2VjaG8gMCA/IEZ7TlVMTCgpICsgVntaRVJPKCl9fSgpIDogMQorWGxvb3BORVhUCisKK1hwYXRoIDE2Mzg0CQkJCQkiIFg6IDE2Mzg0CitpZiAwCisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMAorICAgIGNhbGwgRntOVUxMKCkgKyBWe1pFUk8oKX19KCkKK2VuZGlmCitYbG9vcE5FWFQKKworWHBhdGggNjU1MzYJCQkJCSIgWDogNjU1MzYKK2lmIDEKKyAgICBhc2RmCQkiIGVycm9yCisgICAgWHBhdGggMTMxMDcyCQkJCSIgWDogMAorICAgIGNhbGwgRjEoRntOVUxMKCkgKyBWe1pFUk8oKX19KCkpCitlbmRpZgorWGxvb3BORVhUCisKK1hwYXRoIDI2MjE0NAkJCQkJIiBYOiAyNjIxNDQKK2lmIDEKKyAgICBhc2RmCQkiIGVycm9yCisgICAgWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorICAgIGNhbGwgRntOVUxMKCkgKyBWe1pFUk8oKX19KCkKK2VuZGlmCisKK1hjaGVjayAzNTIyNTYKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDEzOiAgRmFpbHVyZSBpbiBhcmd1bWVudCBldmFsdWF0aW9uIGZvciA6d2hpbGUJCQkgICAge3t7MQorIgorIgkgICAgQSBmYWlsdXJlIGluIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24gZm9yIHRoZSBjb25kaXRpb24gb2YgYSA6d2hpbGUKKyIJICAgIGNhdXNlcyB0aGUgd2hvbGUgOndoaWxlIGxvb3AgdW50aWwgdGhlIG1hdGNoaW5nIDplbmR3aGlsZSBiZWluZworIgkgICAgaWdub3JlZC4gIENvbnRpbnVhdGlvbiBpcyBhdCB0aGUgbmV4dCBmb2xsb3dpbmcgbGluZS4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitYcGF0aCAxCQkJCQkJIiBYOiAxCit3aGlsZSBhc2RmCisgICAgWHBhdGggMgkJCQkJIiBYOiAwCisgICAgd2hpbGUgMQorCVhwYXRoIDQJCQkJCSIgWDogMAorCWJyZWFrCisgICAgZW5kd2hpbGUKKyAgICBYcGF0aCA4CQkJCQkiIFg6IDAKKyAgICBicmVhaworZW5kd2hpbGUKK1hwYXRoIDE2CQkJCQkiIFg6IDE2CisKK3doaWxlIGFzZGYgfCBYcGF0aCAzMiB8IGVuZHdoaWxlIHwgWHBhdGggNjQJIiBYOiAwCitYcGF0aCAxMjgJCQkJCSIgWDogMTI4CisKK1hjaGVjayAxNDUKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDE0OiAgRmFpbHVyZSBpbiBhcmd1bWVudCBldmFsdWF0aW9uIGZvciA6aWYJCQkgICAge3t7MQorIgorIgkgICAgQSBmYWlsdXJlIGluIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24gZm9yIHRoZSBjb25kaXRpb24gb2YgYW4gOmlmCisiCSAgICBkb2VzIG5vdCBjYXVzZSB0aGUgY29ycmVzcG9uZGluZyA6ZWxzZSBvciA6ZW5kaWYgYmVpbmcgbWF0Y2hlZCB0bworIgkgICAgYSBwcmV2aW91cyA6aWYvOmVsc2VpZi4gIE5laXRoZXIgb2YgYm90aCBicmFuY2hlcyBvZiB0aGUgZmFpbGVkIDppZgorIgkgICAgYXJlIGV4ZWN1dGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCitYbG9vcElOSVQgMSAyNTYKKworZnVuY3Rpb24hIEYoKQorICAgIFhsb29wIDEJCQkJCSIgWDogMQkgICAgKyAyNTYgKiAxCisgICAgbGV0IHggPSAwCisgICAgaWYgeAkJIiBmYWxzZQorCVhsb29wIDIJCQkJCSIgWDogMAkgICAgKyAyNTYgKiAwCisgICAgZWxzZWlmICF4CQkiIGFsd2F5cyB0cnVlCisJWGxvb3AgNAkJCQkJIiBYOiA0CSAgICArIDI1NiAqIDQKKwlsZXQgeCA9IDEKKwlpZiBnOmJvb2x2YXIJIiBwb3NzaWJseSB1bmRlZmluZWQKKwkgICAgWGxvb3AgOAkJCQkiIFg6IDgJICAgICsgMjU2ICogMAorCWVsc2UKKwkgICAgWGxvb3AgMTYJCQkJIiBYOiAwCSAgICArIDI1NiAqIDAKKwllbmRpZgorCVhsb29wIDMyCQkJCSIgWDogMzIJICAgICsgMjU2ICogMzIKKyAgICBlbHNlaWYgeAkJIiBuZXZlciBleGVjdXRlZAorCVhsb29wIDY0CQkJCSIgWDogMAkgICAgKyAyNTYgKiAwCisgICAgZW5kaWYKKyAgICBYbG9vcCAxMjgJCQkJCSIgWDogMTI4ICAgICsgMjU2ICogMTI4CitlbmRmdW5jdGlvbgorCitsZXQgYm9vbHZhciA9IDEKK2NhbGwgRigpCisKK1hsb29wTkVYVAordW5sZXQgYm9vbHZhcgorY2FsbCBGKCkKKworZGVsZnVuY3Rpb24gRgorCitYY2hlY2sgNDI0MTMKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDE1OiAgRmFpbHVyZSBpbiBhcmd1bWVudCBldmFsdWF0aW9uIGZvciA6aWYgKGJhcikJCSAgICB7e3sxCisiCisiCSAgICBMaWtlIHByZXZpb3VzIHRlc3QsIGV4Y2VwdCB0aGF0IHRoZSBmYWlsaW5nIDppZiAuLi4gfCAuLi4gfCA6ZW5kaWYKKyIJICAgIGlzIGluIGEgc2luZ2xlIGxpbmUuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKK1hsb29wSU5JVCAxIDI1NgorCitmdW5jdGlvbiEgRigpCisgICAgWGxvb3AgMQkJCQkJIiBYOiAxCSAgICArIDI1NiAqIDEKKyAgICBsZXQgeCA9IDAKKyAgICBpZiB4CQkiIGZhbHNlCisJWGxvb3AgMgkJCQkJIiBYOiAwCSAgICArIDI1NiAqIDAKKyAgICBlbHNlaWYgIXgJCSIgYWx3YXlzIHRydWUKKwlYbG9vcCA0CQkJCQkiIFg6IDQJICAgICsgMjU2ICogNAorCWxldCB4ID0gMQorCWlmIGc6Ym9vbHZhciB8IFhsb29wIDggfCBlbHNlIHwgWGxvb3AgMTYgfCBlbmRpZiAgICAiIFg6IDgKKwlYbG9vcCAzMgkJCQkiIFg6IDMyCSAgICArIDI1NiAqIDMyCisgICAgZWxzZWlmIHgJCSIgbmV2ZXIgZXhlY3V0ZWQKKwlYbG9vcCA2NAkJCQkiIFg6IDAJICAgICsgMjU2ICogMAorICAgIGVuZGlmCisgICAgWGxvb3AgMTI4CQkJCQkiIFg6IDEyOCAgICArIDI1NiAqIDEyOAorZW5kZnVuY3Rpb24KKworbGV0IGJvb2x2YXIgPSAxCitjYWxsIEYoKQorCitYbG9vcE5FWFQKK3VubGV0IGJvb2x2YXIKK2NhbGwgRigpCisKK2RlbGZ1bmN0aW9uIEYKKworWGNoZWNrIDQyNDEzCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAxNjogIERvdWJsZSA6ZWxzZSBvciA6ZWxzZWlmIGFmdGVyIDplbHNlCQkJCSAgICB7e3sxCisiCisiCSAgICBNdWx0aXBsZSA6ZWxzZXMgb3IgYW4gOmVsc2VpZiBhZnRlciBhbiA6ZWxzZSBhcmUgZm9yYmlkZGVuLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBGKCkgYWJvcnQKKyAgICBpZiAwCisJWHBhdGggMQkJCQkJIiBYOiAwCisgICAgZWxzZQorCVhwYXRoIDIJCQkJCSIgWDogMgorICAgIGVsc2UJCSIgYWJvcnRzIGZ1bmN0aW9uCisJWHBhdGggNAkJCQkJIiBYOiAwCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBHKCkgYWJvcnQKKyAgICBpZiAwCisJWHBhdGggOAkJCQkJIiBYOiAwCisgICAgZWxzZQorCVhwYXRoIDE2CQkJCSIgWDogMTYKKyAgICBlbHNlaWYgMQkJIiBhYm9ydHMgZnVuY3Rpb24KKwlYcGF0aCAzMgkJCQkiIFg6IDAKKyAgICBlbHNlCisJWHBhdGggNjQJCQkJIiBYOiAwCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBIKCkgYWJvcnQKKyAgICBpZiAwCisJWHBhdGggMTI4CQkJCSIgWDogMAorICAgIGVsc2VpZiAwCisJWHBhdGggMjU2CQkJCSIgWDogMAorICAgIGVsc2UKKwlYcGF0aCA1MTIJCQkJIiBYOiA1MTIKKyAgICBlbHNlCQkiIGFib3J0cyBmdW5jdGlvbgorCVhwYXRoIDEwMjQJCQkJIiBYOiAwCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBJKCkgYWJvcnQKKyAgICBpZiAwCisJWHBhdGggMjA0OAkJCQkiIFg6IDAKKyAgICBlbHNlaWYgMAorCVhwYXRoIDQwOTYJCQkJIiBYOiAwCisgICAgZWxzZQorCVhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisgICAgZWxzZWlmIDEJCSIgYWJvcnRzIGZ1bmN0aW9uCisJWHBhdGggMTYzODQJCQkJIiBYOiAwCisgICAgZWxzZQorCVhwYXRoIDMyNzY4CQkJCSIgWDogMAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitjYWxsIEYoKQorY2FsbCBHKCkKK2NhbGwgSCgpCitjYWxsIEkoKQorCitkZWxmdW5jdGlvbiBGCitkZWxmdW5jdGlvbiBHCitkZWxmdW5jdGlvbiBICitkZWxmdW5jdGlvbiBJCisKK1hjaGVjayA4NzIyCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAxNzogIE5lc3Rpbmcgb2YgdW5tYXRjaGVkIDppZiBvciA6ZW5kaWYgaW5zaWRlIGEgOndoaWxlCQkgICAge3t7MQorIgorIgkgICAgVGhlIDp3aGlsZS86ZW5kd2hpbGUgdGFrZXMgcHJlY2VkZW5jZSBpbiBuZXN0aW5nIG92ZXIgYW4gdW5jbG9zZWQKKyIJICAgIDppZiBvciBhbiB1bm9wZW5lZCA6ZW5kaWYuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworZnVuY3Rpb24hIE1TRyhlbnIsIGVtc2cpCisgICAgbGV0IGVuZ2xpc2ggPSB2OmxhbmcgPT0gIkMiIHx8IHY6bGFuZyA9fiAnXltFZV1uJworICAgIGlmIGE6ZW5yID09ICIiCisJWG91dCAiVE9ETzogQWRkIG1lc3NhZ2UgbnVtYmVyIGZvcjoiIGE6ZW1zZworCWxldCB2OmVycm1zZyA9ICI6IiAuIHY6ZXJybXNnCisgICAgZW5kaWYKKyAgICBsZXQgbWF0Y2ggPSAxCisgICAgaWYgdjplcnJtc2cgIX4gJ14nLmE6ZW5yLic6JyB8fCAoZW5nbGlzaCAmJiB2OmVycm1zZyAhfiBhOmVtc2cpCisJbGV0IG1hdGNoID0gMAorCWlmIHY6ZXJybXNnID09ICIiCisJICAgIFhvdXQgIk1lc3NhZ2UgbWlzc2luZy4iCisJZWxzZQorCSAgICBsZXQgdjplcnJtc2cgPSBlc2NhcGUodjplcnJtc2csICciJykKKwkgICAgWG91dCAiVW5leHBlY3RlZCBtZXNzYWdlOiIgdjplcnJtc2cKKwllbmRpZgorICAgIGVuZGlmCisgICAgcmV0dXJuIG1hdGNoCitlbmRmdW5jdGlvbgorCitsZXQgbWVzc2FnZXMgPSAiIgorCisiIFdoaWxlIGxvb3BzIGluc2lkZSBhIGZ1bmN0aW9uIGFyZSBjb250aW51ZWQgb24gZXJyb3IuCitmdW5jdGlvbiEgRigpCisgICAgbGV0IHY6ZXJybXNnID0gIiIKKyAgICBYbG9vcElOSVQgMSAxNgorICAgIGxldCBsb29wcyA9IDMKKyAgICB3aGlsZSBsb29wcyA+IDAKKwlsZXQgbG9vcHMgPSBsb29wcyAtIDEJCQkiICAgIDI6ICAxOiAgICAgMDoKKwlYbG9vcCAxCQkJCQkiIFg6IDEgKyAxKjE2ICsgMSoxNioxNgorCWlmIChsb29wcyA9PSAxKQorCSAgICBYbG9vcCAyCQkJCSIgWDogICAgIDIqMTYKKwkgICAgWGxvb3BORVhUCisJICAgIGNvbnRpbnVlCisJZWxzZWlmIChsb29wcyA9PSAwKQorCSAgICBYbG9vcCA0CQkJCSIgWDoJCTQqMTYqMTYKKwkgICAgYnJlYWsKKwllbHNlaWYgMQorCSAgICBYbG9vcCA4CQkJCSIgWDogOAorCSAgICBYbG9vcE5FWFQKKwkiIGVuZGlmIG1pc3NpbmchCisgICAgZW5kd2hpbGUJIiA6ZW5kd2hpbGUgYWZ0ZXIgOmlmIDEKKyAgICBYcGF0aCA0MDk2CQkJCQkiIFg6IDE2KjE2KjE2CisgICAgaWYgTVNHKCdFMTcxJywgIk1pc3NpbmcgOmVuZGlmIikKKwlsZXQgZzptZXNzYWdlcyA9IGc6bWVzc2FnZXMgLiAiQSIKKyAgICBlbmRpZgorCisgICAgbGV0IHY6ZXJybXNnID0gIiIKKyAgICBYbG9vcElOSVQhIDgxOTIgNAorICAgIGxldCBsb29wcyA9IDIKKyAgICB3aGlsZSBsb29wcyA+IDAJCQkJIiAgICAyOiAgICAgMToKKwlYbG9vcE5FWFQKKwlsZXQgbG9vcHMgPSBsb29wcyAtIDEKKwlYbG9vcCAxCQkJCQkiIFg6IDgxOTIgKyA4MTkyKjQKKwlpZiAwCisJICAgIFhsb29wIDIJCQkJIiBYOiAwCisJIiBlbmRpZiBtaXNzaW5nCisgICAgZW5kd2hpbGUJIiA6ZW5kd2hpbGUgYWZ0ZXIgOmlmIDAKKyAgICBYcGF0aCAxMzEwNzIJCQkJIiBYOiA4MTkyKjQqNAorICAgIGlmIE1TRygnRTE3MScsICJNaXNzaW5nIDplbmRpZiIpCisJbGV0IGc6bWVzc2FnZXMgPSBnOm1lc3NhZ2VzIC4gIkIiCisgICAgZW5kaWYKKworICAgIGxldCB2OmVycm1zZyA9ICIiCisgICAgWGxvb3BJTklUIDI2MjE0NCA0CisgICAgbGV0IGxvb3BzID0gMgorICAgIHdoaWxlIGxvb3BzID4gMAkJCQkiICAgIDI6ICAgICAxOgorCWxldCBsb29wcyA9IGxvb3BzIC0gMQorCVhsb29wIDEJCQkJCSIgWDogMjYyMTQ0ICsgMjYyMTQ0ICogNAorCSIgaWYgbWlzc2luZyEKKwllbmRpZgkiIDplbmRpZiB3aXRob3V0IDppZiBpbiB3aGlsZQorCVhsb29wIDIJCQkJCSIgWDogNTI0Mjg4ICsgNTI0Mjg4ICogNAorCVhsb29wTkVYVAorICAgIGVuZHdoaWxlCisgICAgWHBhdGggNDE5NDMwNAkJCQkiIFg6IDI2MjE0NCo0KjQKKyAgICBpZiBNU0coJ0U1ODAnLCAiOmVuZGlmIHdpdGhvdXQgOmlmIikKKwlsZXQgZzptZXNzYWdlcyA9IGc6bWVzc2FnZXMgLiAiQyIKKyAgICBlbmRpZgorZW5kZnVuY3Rpb24KKworY2FsbCBGKCkKKworIiBFcnJvciBjb250aW51YXRpb24gb3V0c2lkZSBhIGZ1bmN0aW9uIGlzIGF0IHRoZSBvdXRlcm1vc3QgOmVuZHdoaWxlIG9yIDplbmRpZi4KK2xldCB2OmVycm1zZyA9ICIiCitYbG9vcElOSVQhIDgzODg2MDggNAorbGV0IGxvb3BzID0gMgord2hpbGUgbG9vcHMgPiAwCQkJCQkiICAgIDI6CQkxOgorICAgIFhsb29wTkVYVAorICAgIGxldCBsb29wcyA9IGxvb3BzIC0gMQorICAgIFhsb29wIDEJCQkJCSIgWDogODM4ODYwOCArIDAgKiA0CisgICAgaWYgMAorCVhsb29wIDIJCQkJCSIgWDogMAorICAgICIgZW5kaWYgbWlzc2luZyEgRm9sbG93aW5nIDplbmR3aGlsZSBmYWlscy4KK2VuZHdoaWxlIHwgWHBhdGggMTM0MjE3NzI4CQkJIiBYOiAwCitYcGF0aCAyNjg0MzU0NTYJCQkJCSIgWDogMio4Mzg4NjA4KjQqNAoraWYgTVNHKCdFMTcxJywgIk1pc3NpbmcgOmVuZGlmIikKKyAgICBsZXQgbWVzc2FnZXMgPSBnOm1lc3NhZ2VzIC4gIkQiCitlbmRpZgorCitpZiBtZXNzYWdlcyAhPSAiQUJDRCIKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCisgICAgWG91dCAibWVzc2FnZXMgaXMiIG1lc3NhZ2VzICJpbnN0ZWFkIG9mIEFCQ0QiCitlbmRpZgorCit1bmxldCBsb29wcyBtZXNzYWdlcworZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gTVNHCisKK1hjaGVjayAyODUxMjc5OTMKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDE4OiAgSW50ZXJydXB0IChDdHJsLUMgcHJlc3NlZCkJCQkJCSAgICB7e3sxCisiCisiCSAgICBPbiBhbiBpbnRlcnJ1cHQsIHRoZSBzY3JpcHQgcHJvY2Vzc2luZyBpcyB0ZXJtaW5hdGVkIGltbWVkaWF0ZWx5LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKyAgICBpZiAxCisJWHBhdGggMQkJCQkJIiBYOiAxCisJd2hpbGUgMQorCSAgICBYcGF0aCAyCQkJCSIgWDogMgorCSAgICBpZiAxCisJCVhwYXRoIDQJCQkJIiBYOiA0CisJCSJJTlRFUlJVUFQKKwkJWHBhdGggOAkJCQkiIFg6IDAKKwkJYnJlYWsKKwkJZmluaXNoCisJICAgIGVuZGlmIHwgWHBhdGggMTYJCQkiIFg6IDAKKwkgICAgWHBhdGggMzIJCQkJIiBYOiAwCisJZW5kd2hpbGUgfCBYcGF0aCA2NAkJCSIgWDogMAorCVhwYXRoIDEyOAkJCQkiIFg6IDAKKyAgICBlbmRpZiB8IFhwYXRoIDI1NgkJCQkiIFg6IDAKKyAgICBYcGF0aCA1MTIJCQkJCSIgWDogMAorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCVhwYXRoIDEwMjQJCQkJIiBYOiAxMDI0CisJIklOVEVSUlVQVAorCVhwYXRoIDIwNDgJCQkJIiBYOiAwCisgICAgZW5kdHJ5IHwgWHBhdGggNDA5NgkJCQkiIFg6IDAKKyAgICBYcGF0aCA4MTkyCQkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRigpCisJaWYgMQorCSAgICBYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJICAgIHdoaWxlIDEKKwkJWHBhdGggMzI3NjgJCQkiIFg6IDMyNzY4CisJCWlmIDEKKwkJICAgIFhwYXRoIDY1NTM2CQkJIiBYOiA2NTUzNgorCQkgICAgIklOVEVSUlVQVAorCQkgICAgWHBhdGggMTMxMDcyCQkiIFg6IDAKKwkJICAgIGJyZWFrCisJCSAgICByZXR1cm4KKwkJZW5kaWYgfCBYcGF0aCAyNjIxNDQJCSIgWDogMAorCQlYcGF0aCBYcGF0aCA1MjQyODgJCSIgWDogMAorCSAgICBlbmR3aGlsZSB8IFhwYXRoIDEwNDg1NzYJCSIgWDogMAorCSAgICBYcGF0aCBYcGF0aCAyMDk3MTUyCQkJIiBYOiAwCisJZW5kaWYgfCBYcGF0aCBYcGF0aCA0MTk0MzA0CQkiIFg6IDAKKwlYcGF0aCBYcGF0aCA4Mzg4NjA4CQkJIiBYOiAwCisgICAgZW5kZnVuY3Rpb24KKworICAgIGNhbGwgRigpIHwgWHBhdGggMTY3NzcyMTYJCQkiIFg6IDAKKyAgICBYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRygpCisJdHJ5CisJICAgIFhwYXRoIDY3MTA4ODY0CQkJIiBYOiA2NzEwODg2NAorCSAgICAiSU5URVJSVVBUCisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMAorCWVuZHRyeSB8IFhwYXRoIDI2ODQzNTQ1NgkJIiBYOiAwCisJWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBjYWxsIEcoKSB8IFhwYXRoIDEwNzM3NDE4MjQJCQkiIFg6IDAKKyAgICAiIFRoZSBYcGF0aCBjb21tYW5kIGRvZXMgbm90IGFjY2VwdCAyXjMxIChuZWdhdGl2ZSk7IGRpc3BsYXkgZXhwbGljaXRseToKKyAgICBleGVjICIhZWNobyAyMTQ3NDgzNjQ4ID4+IiAuIGc6RXh0cmFWaW1SZXN1bHQKKwkJCQkJCSIgWDogMAorZW5kaWYKKworWGNoZWNrIDY3MjI0NTgzCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAxOTogIEFib3J0aW5nIG9uIGVycm9ycyBpbnNpZGUgOnRyeS86ZW5kdHJ5CQkJICAgIHt7ezEKKyIKKyIJICAgIEFuIGVycm9yIGluIGEgY29tbWFuZCBkeW5hbWljYWxseSBlbmNsb3NlZCBpbiBhIDp0cnkvOmVuZHRyeSByZWdpb24KKyIJICAgIGFib3J0cyBzY3JpcHQgcHJvY2Vzc2luZyBpbW1lZGlhdGVseS4gIEl0IGRvZXMgbm90IG1hdHRlciB3aGV0aGVyCisiCSAgICB0aGUgZmFpbGluZyBjb21tYW5kIGlzIG91dHNpZGUgb3IgaW5zaWRlIGEgZnVuY3Rpb24gYW5kIHdoZXRoZXIgYQorIgkgICAgZnVuY3Rpb24gaGFzIGFuICJhYm9ydCIgYXR0cmlidXRlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRigpIGFib3J0CisJWHBhdGggMQkJCQkJIiBYOiAxCisJYXNkZgorCVhwYXRoIDIJCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB0cnkKKwlYcGF0aCA0CQkJCQkiIFg6IDQKKwljYWxsIEYoKQorCVhwYXRoIDgJCQkJCSIgWDogMAorICAgIGVuZHRyeSB8IFhwYXRoIDE2CQkJCSIgWDogMAorICAgIFhwYXRoIDMyCQkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRygpCisJWHBhdGggNjQJCQkJIiBYOiA2NAorCWFzZGYKKwlYcGF0aCAxMjgJCQkJIiBYOiAwCisgICAgZW5kZnVuY3Rpb24KKworICAgIHRyeQorCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCWNhbGwgRygpCisJWHBhdGggNTEyCQkJCSIgWDogMAorICAgIGVuZHRyeSB8IFhwYXRoIDEwMjQJCQkJIiBYOiAwCisgICAgWHBhdGggMjA0OAkJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgdHJ5CisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKwlhc2RmCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKyAgICBlbmR0cnkgfCBYcGF0aCAxNjM4NAkJCSIgWDogMAorICAgIFhwYXRoIDMyNzY4CQkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBpZiAxCisJdHJ5CisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwkgICAgYXNkZgorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwllbmR0cnkgfCBYcGF0aCAyNjIxNDQJCQkiIFg6IDAKKyAgICBlbmRpZiB8IFhwYXRoIDUyNDI4OAkJCSIgWDogMAorICAgIFhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgbGV0IHAgPSAxCisgICAgd2hpbGUgcAorCWxldCBwID0gMAorCXRyeQorCSAgICBYcGF0aCAyMDk3MTUyCQkJIiBYOiAyMDk3MTUyCisJICAgIGFzZGYKKwkgICAgWHBhdGggNDE5NDMwNAkJCSIgWDogMAorCWVuZHRyeSB8IFhwYXRoIDgzODg2MDgJCQkiIFg6IDAKKyAgICBlbmR3aGlsZSB8IFhwYXRoIDE2Nzc3MjE2CQkJIiBYOiAwCisgICAgWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgbGV0IHAgPSAxCisgICAgd2hpbGUgcAorCWxldCBwID0gMAorIgl0cnkKKwkgICAgWHBhdGggNjcxMDg4NjQJCQkiIFg6IDY3MTA4ODY0CisgICAgZW5kd2hpbGUgfCBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDAKKyAgICBYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAwCitlbmRpZgorCitYY2hlY2sgNjkyNzU5NzMKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMjA6ICBBYm9ydGluZyBvbiBlcnJvcnMgYWZ0ZXIgOnRyeS86ZW5kdHJ5CQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYW4gZXJyb3Igb2NjdXJzIGFmdGVyIHRoZSBsYXN0IGFjdGl2ZSA6dHJ5LzplbmR0cnkgcmVnaW9uIGhhcworIgkgICAgYmVlbiBsZWZ0LCB0ZXJtaW5hdGlvbiBiZWhhdmlvciBpcyBhcyBpZiBubyA6dHJ5LzplbmR0cnkgaGFzIGJlZW4KKyIJICAgIHNlZW4uCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIGxldCBwID0gMQorICAgIHdoaWxlIHAKKwlsZXQgcCA9IDAKKwl0cnkKKwkgICAgWHBhdGggMQkJCQkiIFg6IDEKKwllbmR0cnkKKwlhc2RmCisgICAgZW5kd2hpbGUgfCBYcGF0aCAyCQkJCSIgWDogMAorICAgIFhwYXRoIDQJCQkJCSIgWDogNAorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgWHBhdGggOAkJCQkiIFg6IDgKKwkgICAgYnJlYWsKKwkgICAgWHBhdGggMTYJCQkJIiBYOiAwCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKyAgICBYcGF0aCAzMgkJCQkJIiBYOiAzMgorICAgIGFzZGYKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiA2NAorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgWHBhdGggMTI4CQkJCSIgWDogMTI4CisJICAgIGJyZWFrCisJICAgIFhwYXRoIDI1NgkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgWHBhdGggMTAyNAkJCQkJIiBYOiAxMDI0CisgICAgYXNkZgorICAgIFhwYXRoIDIwNDgJCQkJCSIgWDogMjA0OAorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKwlmaW5hbGx5CisJICAgIFhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJICAgIGJyZWFrCisJICAgIFhwYXRoIDE2Mzg0CQkJCSIgWDogMAorCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKKyAgICBhc2RmCisgICAgWHBhdGggNjU1MzYJCQkJCSIgWDogNjU1MzYKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBsZXQgcCA9IDEKKyAgICB3aGlsZSBwCisJbGV0IHAgPSAwCisJdHJ5CisJICAgIFhwYXRoIDEzMTA3MgkJCSIgWDogMTMxMDcyCisJICAgIGNvbnRpbnVlCisJICAgIFhwYXRoIDI2MjE0NAkJCSIgWDogMAorCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgWHBhdGggNTI0Mjg4CQkJCSIgWDogNTI0Mjg4CisgICAgYXNkZgorICAgIFhwYXRoIDEwNDg1NzYJCQkJIiBYOiAxMDQ4NTc2CitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgbGV0IHAgPSAxCisgICAgd2hpbGUgcAorCWxldCBwID0gMAorCXRyeQorCSAgICBYcGF0aCAyMDk3MTUyCQkJIiBYOiAyMDk3MTUyCisJICAgIGNvbnRpbnVlCisJICAgIFhwYXRoIDQxOTQzMDQJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDgzODg2MDgJCQkiIFg6IDgzODg2MDgKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorICAgIFhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMTY3NzcyMTYKKyAgICBhc2RmCisgICAgWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAzMzU1NDQzMgorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIGxldCBwID0gMQorICAgIHdoaWxlIHAKKwlsZXQgcCA9IDAKKwl0cnkKKwkgICAgWHBhdGggNjcxMDg4NjQJCQkiIFg6IDY3MTA4ODY0CisJZmluYWxseQorCSAgICBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDEzNDIxNzcyOAorCSAgICBjb250aW51ZQorCSAgICBYcGF0aCAyNjg0MzU0NTYJCQkiIFg6IDAKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDUzNjg3MDkxMgorICAgIGFzZGYKKyAgICBYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMTA3Mzc0MTgyNAorZW5kaWYKKworWGNoZWNrIDE4NzQ1NzUwODUKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDIxOiAgOmZpbmFsbHkgZm9yIDp0cnkgYWZ0ZXIgOmNvbnRpbnVlLzpicmVhay86cmV0dXJuLzpmaW5pc2gJICAgIHt7ezEKKyIKKyIJICAgIElmIGEgOnRyeSBjb25kaXRpb25hbCBzdGF5cyBpbmFjdGl2ZSBkdWUgdG8gYSBwcmVjZWRpbmcgOmNvbnRpbnVlLAorIgkgICAgOmJyZWFrLCA6cmV0dXJuLCBvciA6ZmluaXNoLCBpdHMgOmZpbmFsbHkgY2xhdXNlIHNob3VsZCBub3QgYmUKKyIJICAgIGV4ZWN1dGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiBGKCkKKwlsZXQgbG9vcHMgPSAyCisJWGxvb3BJTklUISAxIDI1NgorCXdoaWxlIGxvb3BzID4gMAorCSAgICBYbG9vcE5FWFQKKwkgICAgbGV0IGxvb3BzID0gbG9vcHMgLSAxCisJICAgIHRyeQorCQlpZiBsb29wcyA9PSAxCisJCSAgICBYbG9vcCAxCQkJIiBYOiAxCisJCSAgICBjb250aW51ZQorCQkgICAgWGxvb3AgMgkJCSIgWDogMAorCQllbHNlaWYgbG9vcHMgPT0gMAorCQkgICAgWGxvb3AgNAkJCSIgWDogNCoyNTYKKwkJICAgIGJyZWFrCisJCSAgICBYbG9vcCA4CQkJIiBYOiAwCisJCWVuZGlmCisKKwkJdHJ5CQkiIGluYWN0aXZlCisJCSAgICBYbG9vcCAxNgkJCSIgWDogMAorCQlmaW5hbGx5CisJCSAgICBYbG9vcCAzMgkJCSIgWDogMAorCQllbmR0cnkKKwkgICAgZmluYWxseQorCQlYbG9vcCA2NAkJCSIgWDogNjQgKyA2NCoyNTYKKwkgICAgZW5kdHJ5CisJICAgIFhsb29wIDEyOAkJCQkiIFg6IDAKKwllbmR3aGlsZQorCisJdHJ5CisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwkgICAgcmV0dXJuCisJICAgIFhwYXRoIDEzMTA3MgkJCSIgWDogMAorCSAgICB0cnkJCSAgICAiIGluYWN0aXZlCisJCVhwYXRoIDI2MjE0NAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCVhwYXRoIDUyNDI4OAkJCSIgWDogMAorCSAgICBlbmR0cnkKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEwNDg1NzYJCQkiIFg6IDEwNDg1NzYKKwllbmR0cnkKKwlYcGF0aCAyMDk3MTUyCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB0cnkKKwlYcGF0aCA0MTk0MzA0CQkJCSIgWDogNDE5NDMwNAorCWNhbGwgRigpCisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDgzODg2MDgKKwlmaW5pc2gKKwlYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKKwl0cnkJCSIgaW5hY3RpdmUKKwkgICAgWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDY3MTA4ODY0CQkJIiBYOiAwCisJZW5kdHJ5CisgICAgZmluYWxseQorCVhwYXRoIDEzNDIxNzcyOAkJCQkiIFg6IDEzNDIxNzcyOAorICAgIGVuZHRyeQorICAgIFhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKK2VuZGlmCisKK1hjaGVjayAxNDc5MzIyMjUKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDIyOiAgOmZpbmFsbHkgZm9yIGEgOnRyeSBhZnRlciBhbiBlcnJvci9pbnRlcnJ1cHQvOnRocm93CQkgICAge3t7MQorIgorIgkgICAgSWYgYSA6dHJ5IGNvbmRpdGlvbmFsIHN0YXlzIGluYWN0aXZlIGR1ZSB0byBhIHByZWNlZGluZyBlcnJvciBvcgorIgkgICAgaW50ZXJydXB0IG9yIDp0aHJvdywgaXRzIDpmaW5hbGx5IGNsYXVzZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRXJyb3IoKQorCXRyeQorCSAgICBhc2RmICAgICIgYWJvcnRpbmcgZXJyb3IsIHRyaWdnZXJpbmcgZXJyb3IgZXhjZXB0aW9uCisJZW5kdHJ5CisgICAgZW5kZnVuY3Rpb24KKworICAgIFhwYXRoIDEJCQkJCSIgWDogMQorICAgIGNhbGwgRXJyb3IoKQorICAgIFhwYXRoIDIJCQkJCSIgWDogMAorCisgICAgaWYgMQkiIG5vdCBhY3RpdmUgZHVlIHRvIGVycm9yCisJdHJ5CSIgbm90IGFjdGl2ZSBzaW5jZSA6aWYgaW5hY3RpdmUKKwkgICAgWHBhdGggNAkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDgJCQkJIiBYOiAwCisJZW5kdHJ5CisgICAgZW5kaWYKKworICAgIHRyeQkJIiBub3QgYWN0aXZlIGR1ZSB0byBlcnJvcgorCVhwYXRoIDE2CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCAzMgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgSW50ZXJydXB0KCkKKwl0cnkKKwkgICAgIklOVEVSUlVQVAkiIHRyaWdnZXJpbmcgaW50ZXJydXB0IGV4Y2VwdGlvbgorCWVuZHRyeQorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiA2NAorICAgIGNhbGwgSW50ZXJydXB0KCkKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMAorCisgICAgaWYgMQkiIG5vdCBhY3RpdmUgZHVlIHRvIGludGVycnVwdAorCXRyeQkiIG5vdCBhY3RpdmUgc2luY2UgOmlmIGluYWN0aXZlCisJICAgIFhwYXRoIDI1NgkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDUxMgkJCQkiIFg6IDAKKwllbmR0cnkKKyAgICBlbmRpZgorCisgICAgdHJ5CQkiIG5vdCBhY3RpdmUgZHVlIHRvIGludGVycnVwdAorCVhwYXRoIDEwMjQJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDIwNDgJCQkJIiBYOiAwCisgICAgZW5kdHJ5CitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgZnVuY3Rpb24hIFRocm93KCkKKwl0aHJvdyAieHl6IgorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBYcGF0aCA0MDk2CQkJCQkiIFg6IDQwOTYKKyAgICBjYWxsIFRocm93KCkKKyAgICBYcGF0aCA4MTkyCQkJCQkiIFg6IDAKKworICAgIGlmIDEJIiBub3QgYWN0aXZlIGR1ZSB0byA6dGhyb3cKKwl0cnkJIiBub3QgYWN0aXZlIHNpbmNlIDppZiBpbmFjdGl2ZQorCSAgICBYcGF0aCAxNjM4NAkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDMyNzY4CQkJCSIgWDogMAorCWVuZHRyeQorICAgIGVuZGlmCisKKyAgICB0cnkJCSIgbm90IGFjdGl2ZSBkdWUgdG8gOnRocm93CisJWHBhdGggNjU1MzYJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDEzMTA3MgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKK2VuZGlmCisKK1hjaGVjayA0MTYxCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAyMzogIDpjYXRjaCBjbGF1c2VzIGZvciBhIDp0cnkgYWZ0ZXIgYSA6dGhyb3cJCQkgICAge3t7MQorIgorIgkgICAgSWYgYSA6dHJ5IGNvbmRpdGlvbmFsIHN0YXlzIGluYWN0aXZlIGR1ZSB0byBhIHByZWNlZGluZyA6dGhyb3csCisiCSAgICBub25lIG9mIGl0cyA6Y2F0Y2ggY2xhdXNlcyBzaG91bGQgYmUgZXhlY3V0ZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCVhwYXRoIDEJCQkJCSIgWDogMQorCXRocm93ICJ4eXoiCisJWHBhdGggMgkJCQkJIiBYOiAwCisKKwlpZiAxCSIgbm90IGFjdGl2ZSBkdWUgdG8gOnRocm93CisJICAgIHRyeQkiIG5vdCBhY3RpdmUgc2luY2UgOmlmIGluYWN0aXZlCisJCVhwYXRoIDQJCQkJIiBYOiAwCisJICAgIGNhdGNoIC94eXovCisJCVhwYXRoIDgJCQkJIiBYOiAwCisJICAgIGVuZHRyeQorCWVuZGlmCisgICAgY2F0Y2ggL3h5ei8KKwlYcGF0aCAxNgkJCQkiIFg6IDE2CisgICAgZW5kdHJ5CisKKyAgICBYcGF0aCAzMgkJCQkJIiBYOiAzMgorICAgIHRocm93ICJhYmMiCisgICAgWHBhdGggNjQJCQkJCSIgWDogMAorCisgICAgdHJ5CQkiIG5vdCBhY3RpdmUgZHVlIHRvIDp0aHJvdworCVhwYXRoIDEyOAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvYWJjLworCVhwYXRoIDI1NgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKK2VuZGlmCisKK1hjaGVjayA0OQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMjQ6ICA6ZW5kdHJ5IGZvciBhIDp0cnkgYWZ0ZXIgYSA6dGhyb3cJCQkJICAgIHt7ezEKKyIKKyIJICAgIElmIGEgOnRyeSBjb25kaXRpb25hbCBzdGF5cyBpbmFjdGl2ZSBkdWUgdG8gYSBwcmVjZWRpbmcgOnRocm93LAorIgkgICAgaXRzIDplbmR0cnkgc2hvdWxkIG5vdCByZXRocm93IHRoZSBleGNlcHRpb24gdG8gdGhlIG5leHQgc3Vycm91bmRpbmcKKyIJICAgIGFjdGl2ZSA6dHJ5IGNvbmRpdGlvbmFsLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKyAgICB0cnkJCQkiIHRyeSAxCisJdHJ5CQkiIHRyeSAyCisJICAgIFhwYXRoIDEJCQkJIiBYOiAxCisJICAgIHRocm93ICJ4eXoiCSIgbWFrZXMgdHJ5IDIgaW5hY3RpdmUKKwkgICAgWHBhdGggMgkJCQkiIFg6IDAKKworCSAgICB0cnkJCSIgdHJ5IDMKKwkJWHBhdGggNAkJCQkiIFg6IDAKKwkgICAgZW5kdHJ5CSIgbm8gcmV0aHJvdyB0byB0cnkgMQorCWNhdGNoIC94eXovCSIgc2hvdWxkIGNhdGNoIGFsdGhvdWdoIHRyeSAyIGluYWN0aXZlCisJICAgIFhwYXRoIDgJCQkJIiBYOiA4CisJZW5kdHJ5CisgICAgY2F0Y2ggL3h5ei8JCSIgdHJ5IDEgYWN0aXZlLCBidXQgZXhjZXB0aW9uIGFscmVhZHkgY2F1Z2h0CisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisgICAgWHBhdGggMzIJCQkJCSIgWDogMzIKK2VuZGlmCisKK1hjaGVjayA0MQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMjU6ICBFeGVjdXRpbmcgOmZpbmFsbHkgY2xhdXNlcyBvbiBub3JtYWwgY29udHJvbCBmbG93CQkgICAge3t7MQorIgorIgkgICAgQ29udHJvbCBmbG93IGluIGEgOnRyeSBjb25kaXRpb25hbCBzaG91bGQgYWx3YXlzIGZhbGwgdGhyb3VnaCB0byBpdHMKKyIJICAgIDpmaW5hbGx5IGNsYXVzZS4gIEEgOmZpbmFsbHkgY2xhdXNlIG9mIGEgOnRyeSBjb25kaXRpb25hbCBpbnNpZGUgYW4KKyIJICAgIGluYWN0aXZlIGNvbmRpdGlvbmFsIHNob3VsZCBuZXZlciBiZSBleGVjdXRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgRigpCisgICAgbGV0IGxvb3BzID0gMworICAgIFhsb29wSU5JVCAxIDI1NgorICAgIHdoaWxlIGxvb3BzID4gMAkJCQkiICAgICAzOiAgIDI6ICAgICAgIDE6CisJWGxvb3AgMQkJCQkJIiBYOiAgMSArICAxKjI1NiArIDEqMjU2KjI1NgorCWlmIGxvb3BzID49IDIKKwkgICAgdHJ5CisJCVhsb29wIDIJCQkJIiBYOiAgMiArICAyKjI1NgorCQlpZiBsb29wcyA9PSAyCisJCSAgICB0cnkKKwkJCVhsb29wIDQJCQkiIFg6ICAgICAgIDQqMjU2CisJCSAgICBmaW5hbGx5CisJCQlYbG9vcCA4CQkJIiBYOiAgICAgICA4KjI1NgorCQkgICAgZW5kdHJ5CisJCWVuZGlmCisJICAgIGZpbmFsbHkKKwkJWGxvb3AgMTYJCQkiIFg6IDE2ICsgMTYqMjU2CisJCWlmIGxvb3BzID09IDIKKwkJICAgIHRyeQorCQkJWGxvb3AgMzIJCSIgWDogICAgICAzMioyNTYKKwkJICAgIGZpbmFsbHkKKwkJCVhsb29wIDY0CQkiIFg6ICAgICAgNjQqMjU2CisJCSAgICBlbmR0cnkKKwkJZW5kaWYKKwkgICAgZW5kdHJ5CisJZW5kaWYKKwlYbG9vcCAxMjgJCQkJIiBYOiAxMjggKyAxMjgqMjU2ICsgMTI4KjI1NioyNTYKKwlsZXQgbG9vcHMgPSBsb29wcyAtIDEKKwlYbG9vcE5FWFQKKyAgICBlbmR3aGlsZQorICAgIFhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMTY3NzcyMTYKK2VuZGZ1bmN0aW9uCisKK2lmIDEKKyAgICB0cnkKKwlYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDMzNTU0NDMyCisJY2FsbCBGKCkKKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CisgICAgZmluYWxseQorCVhwYXRoIDEzNDIxNzcyOAkJCQkiIFg6IDEzNDIxNzcyOAorICAgIGVuZHRyeQorZWxzZQorICAgIHRyeQorCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorICAgIGVuZHRyeQorZW5kaWYKKworZGVsZnVuY3Rpb24gRgorCitYY2hlY2sgMjYwMTc3ODExCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAyNjogIEV4ZWN1dGluZyA6ZmluYWxseSBjbGF1c2VzIGFmdGVyIDpjb250aW51ZSBvciA6YnJlYWsJICAgIHt7ezEKKyIKKyIJICAgIEZvciBhIDpjb250aW51ZSBvciA6YnJlYWsgZHluYW1pY2FsbHkgZW5jbG9zZWQgaW4gYSA6dHJ5LzplbmR0cnkKKyIJICAgIHJlZ2lvbiBpbnNpZGUgdGhlIG5leHQgc3Vycm91bmRpbmcgOndoaWxlLzplbmR3aGlsZSwgaWYgdGhlCisiCSAgICA6Y29udGludWUvOmJyZWFrIGlzIGJlZm9yZSB0aGUgOmZpbmFsbHksIHRoZSA6ZmluYWxseSBjbGF1c2UgaXMKKyIJICAgIGV4ZWN1dGVkIGZpcnN0LiAgSWYgdGhlIDpjb250aW51ZS86YnJlYWsgaXMgYWZ0ZXIgdGhlIDpmaW5hbGx5LCB0aGUKKyIJICAgIDpmaW5hbGx5IGNsYXVzZSBpcyBicm9rZW4gKGxpa2UgYW4gOmlmLzplbmRpZiByZWdpb24pLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK3RyeQorICAgIGxldCBsb29wcyA9IDMKKyAgICBYbG9vcElOSVQhIDEgMzIKKyAgICB3aGlsZSBsb29wcyA+IDAKKwlYbG9vcE5FWFQKKwl0cnkKKwkgICAgdHJ5CisJCWlmIGxvb3BzID09IDIJCQkiICAgIDM6ICAgMjogICAgIDE6CisJCSAgICBYbG9vcCAxCQkJIiBYOiAgICAgIDEqMzIKKwkJICAgIGxldCBsb29wcyA9IGxvb3BzIC0gMQorCQkgICAgY29udGludWUKKwkJZWxzZWlmIGxvb3BzID09IDEKKwkJICAgIFhsb29wIDIJCQkiIFg6CQkgMiozMiozMgorCQkgICAgYnJlYWsKKwkJICAgIGZpbmlzaAorCQllbmRpZgorCQlYbG9vcCA0CQkJCSIgWDogNAorCSAgICBlbmR0cnkKKwlmaW5hbGx5CisJICAgIFhsb29wIDgJCQkJIiBYOiA4ICArIDgqMzIgKyA4KjMyKjMyCisJZW5kdHJ5CisJWGxvb3AgMTYJCQkJIiBYOiAxNgorCWxldCBsb29wcyA9IGxvb3BzIC0gMQorICAgIGVuZHdoaWxlCisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKK2ZpbmFsbHkKKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiA2NTUzNgorICAgIGxldCBsb29wcyA9IDMKKyAgICBYbG9vcElOSVQgMTMxMDcyIDE2CisgICAgd2hpbGUgbG9vcHMgPiAwCisJdHJ5CisJZmluYWxseQorCSAgICB0cnkKKwkJaWYgbG9vcHMgPT0gMgorCQkgICAgWGxvb3AgMQkJCSIgWDogMTMxMDcyKjE2CisJCSAgICBsZXQgbG9vcHMgPSBsb29wcyAtIDEKKwkJICAgIFhsb29wTkVYVAorCQkgICAgY29udGludWUKKwkJZWxzZWlmIGxvb3BzID09IDEKKwkJICAgIFhsb29wIDIJCQkiIFg6IDEzMTA3MioyKjE2KjE2CisJCSAgICBicmVhaworCQkgICAgZmluaXNoCisJCWVuZGlmCisJICAgIGVuZHRyeQorCSAgICBYbG9vcCA0CQkJCSIgWDogMTMxMDcyKjQKKwllbmR0cnkKKwlYbG9vcCA4CQkJCQkiIFg6IDEzMTA3Mio4CisJbGV0IGxvb3BzID0gbG9vcHMgLSAxCisJWGxvb3BORVhUCisgICAgZW5kd2hpbGUKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiA1MzY4NzA5MTIKK2VuZHRyeQorWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKwordW5sZXQgbG9vcHMKKworWGNoZWNrIDE2ODE1MDA0NzYKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDI3OiAgRXhlY3V0aW5nIDpmaW5hbGx5IGNsYXVzZXMgYWZ0ZXIgOnJldHVybgkJCSAgICB7e3sxCisiCisiCSAgICBGb3IgYSA6cmV0dXJuIGNvbW1hbmQgZHluYW1pY2FsbHkgZW5jbG9zZWQgaW4gYSA6dHJ5LzplbmR0cnkgcmVnaW9uLAorIgkgICAgOmZpbmFsbHkgY2xhdXNlcyBhcmUgZXhlY3V0ZWQgYW5kIHRoZSBjYWxsZWQgZnVuY3Rpb24gaXMgZW5kZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworZnVuY3Rpb24hIEYoKQorICAgIHRyeQorCVhwYXRoIDEJCQkJCSIgWDogMQorCXRyeQorCSAgICBYcGF0aCAyCQkJCSIgWDogMgorCSAgICByZXR1cm4KKwkgICAgWHBhdGggNAkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDgJCQkJIiBYOiA4CisJZW5kdHJ5CisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDMyCQkJCSIgWDogMzIKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRygpCisgICAgdHJ5CisJWHBhdGggMTI4CQkJCSIgWDogMTI4CisJcmV0dXJuCisJWHBhdGggMjU2CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCA1MTIJCQkJIiBYOiA1MTIKKwljYWxsIEYoKQorCVhwYXRoIDEwMjQJCQkJIiBYOiAxMDI0CisgICAgZW5kdHJ5CisgICAgWHBhdGggMjA0OAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSCgpCisgICAgdHJ5CisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKwljYWxsIEcoKQorCVhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisgICAgZmluYWxseQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMTYzODQKKwlyZXR1cm4KKwlYcGF0aCAzMjc2OAkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCit0cnkKKyAgICBYcGF0aCAxMzEwNzIJCQkJIiBYOiAxMzEwNzIKKyAgICBjYWxsIEgoKQorICAgIFhwYXRoIDI2MjE0NAkJCQkiIFg6IDI2MjE0NAorZmluYWxseQorICAgIFhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorZW5kdHJ5CitYcGF0aCAxMDQ4NTc2CQkJCQkiIFg6IDEwNDg1NzYKKworWGNoZWNrIDE5OTY0NTkKKworIiBMZWF2ZSBGLCBHLCBhbmQgSCBmb3IgZXhlY3V0aW9uIGFzIHNjcmlwdHMgaW4gdGhlIG5leHQgdGVzdC4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDI4OiAgRXhlY3V0aW5nIDpmaW5hbGx5IGNsYXVzZXMgYWZ0ZXIgOmZpbmlzaAkJCSAgICB7e3sxCisiCisiCSAgICBGb3IgYSA6ZmluaXNoIGNvbW1hbmQgZHluYW1pY2FsbHkgZW5jbG9zZWQgaW4gYSA6dHJ5LzplbmR0cnkgcmVnaW9uLAorIgkgICAgOmZpbmFsbHkgY2xhdXNlcyBhcmUgZXhlY3V0ZWQgYW5kIHRoZSBzb3VyY2VkIGZpbGUgaXMgZmluaXNoZWQuCisiCisiCSAgICBUaGlzIHRlc3QgZXhlY3V0ZXMgdGhlIGJvZGllcyBvZiB0aGUgZnVuY3Rpb25zIEYsIEcsIGFuZCBIIGZyb20gdGhlCisiCSAgICBwcmV2aW91cyB0ZXN0IGFzIHNjcmlwdCBmaWxlcyAoOnJldHVybiByZXBsYWNlZCBieSA6ZmluaXNoKS4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgc2NyaXB0RiA9IE1ha2VTY3JpcHQoIkYiKQkJCSIgWDogMSArIDIgKyA4ICsgMzIKK2xldCBzY3JpcHRHID0gTWFrZVNjcmlwdCgiRyIsIHNjcmlwdEYpCQkiIFg6IDEyOCArIDUxMiArIDEwMjQKK2xldCBzY3JpcHRIID0gTWFrZVNjcmlwdCgiSCIsIHNjcmlwdEcpCQkiIFg6IDQwOTYgKyA4MTkyICsgMTYzODQKKwordHJ5CisgICAgWHBhdGggMTMxMDcyCQkJCSIgWDogMTMxMDcyCisgICAgZXhlYyAic291cmNlIiBzY3JpcHRICisgICAgWHBhdGggMjYyMTQ0CQkJCSIgWDogMjYyMTQ0CitmaW5hbGx5CisgICAgWHBhdGggNTI0Mjg4CQkJCSIgWDogNTI0Mjg4CitlbmR0cnkKK1hwYXRoIDEwNDg1NzYJCQkJCSIgWDogMTA0ODU3NgorCitjYWxsIGRlbGV0ZShzY3JpcHRGKQorY2FsbCBkZWxldGUoc2NyaXB0RykKK2NhbGwgZGVsZXRlKHNjcmlwdEgpCit1bmxldCBzY3JpcHRGIHNjcmlwdEcgc2NyaXB0SAorZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gRworZGVsZnVuY3Rpb24gSAorCitYY2hlY2sgMTk5NjQ1OQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMjk6ICBFeGVjdXRpbmcgOmZpbmFsbHkgY2xhdXNlcyBvbiBlcnJvcnMJCQkgICAge3t7MQorIgorIgkgICAgQWZ0ZXIgYW4gZXJyb3IgaW4gYSBjb21tYW5kIGR5bmFtaWNhbGx5IGVuY2xvc2VkIGluIGEgOnRyeS86ZW5kdHJ5CisiCSAgICByZWdpb24sIDpmaW5hbGx5IGNsYXVzZXMgYXJlIGV4ZWN1dGVkIGFuZCB0aGUgc2NyaXB0IHByb2Nlc3NpbmcgaXMKKyIJICAgIHRlcm1pbmF0ZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIGZ1bmN0aW9uISBGKCkKKwl3aGlsZSAxCisJICAgIHRyeQorCQlYcGF0aCAxCQkJCSIgWDogMQorCQl3aGlsZSAxCisJCSAgICB0cnkKKwkJCVhwYXRoIDIJCQkiIFg6IDIKKwkJCWFzZGYJICAgICIgZXJyb3IKKwkJCVhwYXRoIDQJCQkiIFg6IDAKKwkJICAgIGZpbmFsbHkKKwkJCVhwYXRoIDgJCQkiIFg6IDgKKwkJICAgIGVuZHRyeSB8IFhwYXRoIDE2CQkiIFg6IDAKKwkJICAgIFhwYXRoIDMyCQkJIiBYOiAwCisJCSAgICBicmVhaworCQllbmR3aGlsZQorCQlYcGF0aCA2NAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCVhwYXRoIDEyOAkJCSIgWDogMTI4CisJICAgIGVuZHRyeSB8IFhwYXRoIDI1NgkJCSIgWDogMAorCSAgICBYcGF0aCA1MTIJCQkJIiBYOiAwCisJICAgIGJyZWFrCisJZW5kd2hpbGUKKwlYcGF0aCAxMDI0CQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJICAgIHdoaWxlIDEKKwkJY2FsbCBGKCkKKwkJWHBhdGggNDA5NgkJCSIgWDogMAorCQlicmVhaworCSAgICBlbmR3aGlsZSAgfCBYcGF0aCA4MTkyCQkiIFg6IDAKKwkgICAgWHBhdGggMTYzODQJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAzMjc2OAkJCQkiIFg6IDMyNzY4CisJZW5kdHJ5IHwgWHBhdGggNjU1MzYJCQkiIFg6IDAKKyAgICBlbmR3aGlsZSB8IFhwYXRoIDEzMTA3MgkJCSIgWDogMAorICAgIFhwYXRoIDI2MjE0NAkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRygpIGFib3J0CisJaWYgMQorCSAgICB0cnkKKwkJWHBhdGggNTI0Mjg4CQkJIiBYOiA1MjQyODgKKwkJYXNkZgkgICAgIiBlcnJvcgorCQlYcGF0aCAxMDQ4NTc2CQkJIiBYOiAwCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMjA5NzE1MgkJCSIgWDogMjA5NzE1MgorCSAgICBlbmR0cnkgfCBYcGF0aCA0MTk0MzA0CQkiIFg6IDAKKwllbmRpZiB8IFhwYXRoIDgzODg2MDgJCQkiIFg6IDAKKwlYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgaWYgMQorCXRyeQorCSAgICBYcGF0aCAzMzU1NDQzMgkJCSIgWDogMzM1NTQ0MzIKKwkgICAgY2FsbCBHKCkKKwkgICAgWHBhdGggNjcxMDg4NjQJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMTM0MjE3NzI4CisJZW5kdHJ5IHwgWHBhdGggMjY4NDM1NDU2CQkiIFg6IDAKKyAgICBlbmRpZiB8IFhwYXRoIDUzNjg3MDkxMgkJCSIgWDogMAorICAgIFhwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAwCitlbmRpZgorCitYY2hlY2sgMTcwNDI4NTU1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzMDogIEV4ZWN1dGluZyA6ZmluYWxseSBjbGF1c2VzIG9uIGludGVycnVwdAkJCSAgICB7e3sxCisiCisiCSAgICBBZnRlciBhbiBpbnRlcnJ1cHQgaW4gYSBjb21tYW5kIGR5bmFtaWNhbGx5IGVuY2xvc2VkIGluCisiCSAgICBhIDp0cnkvOmVuZHRyeSByZWdpb24sIDpmaW5hbGx5IGNsYXVzZXMgYXJlIGV4ZWN1dGVkIGFuZCB0aGUKKyIJICAgIHNjcmlwdCBwcm9jZXNzaW5nIGlzIHRlcm1pbmF0ZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIFhsb29wSU5JVCAxIDE2CisKKyAgICBmdW5jdGlvbiEgRigpCisJdHJ5CisJICAgIFhsb29wIDEJCQkJIiBYOiAxICsgMSoxNgorCSAgICAiSU5URVJSVVBUCisJICAgIFhsb29wIDIJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYbG9vcCA0CQkJCSIgWDogNCArIDQqMTYKKwllbmR0cnkKKwlYbG9vcCA4CQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgdHJ5CisJWHBhdGggMjU2CQkJCSIgWDogMjU2CisJdHJ5CisJICAgIFhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCSAgICAiSU5URVJSVVBUCisJICAgIFhwYXRoIDEwMjQJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAyMDQ4CQkJCSIgWDogMjA0OAorCSAgICB0cnkKKwkJWHBhdGggNDA5NgkJCSIgWDogNDA5NgorCQl0cnkKKwkJICAgIFhwYXRoIDgxOTIJCQkiIFg6IDgxOTIKKwkJZmluYWxseQorCQkgICAgWHBhdGggMTYzODQJCQkiIFg6IDE2Mzg0CisJCSAgICB0cnkKKwkJCVhwYXRoIDMyNzY4CQkiIFg6IDMyNzY4CisJCQkiSU5URVJSVVBUCisJCQlYcGF0aCA2NTUzNgkJIiBYOiAwCisJCSAgICBlbmR0cnkKKwkJICAgIFhwYXRoIDEzMTA3MgkJIiBYOiAwCisJCWVuZHRyeQorCQlYcGF0aCAyNjIxNDQJCQkiIFg6IDAKKwkgICAgZW5kdHJ5CisJICAgIFhwYXRoIDUyNDI4OAkJCSIgWDogMAorCWVuZHRyeQorCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAyMDk3MTUyCisJdHJ5CisJICAgIFhwYXRoIDQxOTQzMDQJCQkiIFg6IDQxOTQzMDQKKwkgICAgY2FsbCBGKCkKKwkgICAgWHBhdGggODM4ODYwOAkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMTY3NzcyMTYJCQkiIFg6IDE2Nzc3MjE2CisJICAgIHRyeQorCQlYcGF0aCAzMzU1NDQzMgkJCSIgWDogMzM1NTQ0MzIKKwkJWGxvb3BORVhUCisJCUV4ZWNBc1NjcmlwdCBGCisJCVhwYXRoIDY3MTA4ODY0CQkJIiBYOiAwCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMTM0MjE3NzI4CQkJIiBYOiAxMzQyMTc3MjgKKwkgICAgZW5kdHJ5CisJICAgIFhwYXRoIDI2ODQzNTQ1NgkJCSIgWDogMAorCWVuZHRyeQorCVhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMAorZW5kaWYKKworWGNoZWNrIDE5MDkwNTE3MworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMzE6ICBFeGVjdXRpbmcgOmZpbmFsbHkgY2xhdXNlcyBhZnRlciA6dGhyb3cJCQkgICAge3t7MQorIgorIgkgICAgQWZ0ZXIgYSA6dGhyb3cgZHluYW1pY2FsbHkgZW5jbG9zZWQgaW4gYSA6dHJ5LzplbmR0cnkgcmVnaW9uLAorIgkgICAgOmZpbmFsbHkgY2xhdXNlcyBhcmUgZXhlY3V0ZWQgYW5kIHRoZSBzY3JpcHQgcHJvY2Vzc2luZyBpcworIgkgICAgdGVybWluYXRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitpZiBFeHRyYVZpbSgpCisgICAgWGxvb3BJTklUIDEgMTYKKworICAgIGZ1bmN0aW9uISBGKCkKKwl0cnkKKwkgICAgWGxvb3AgMQkJCQkiIFg6IDEgKyAxKjE2CisJICAgIHRocm93ICJleGNlcHRpb24iCisJICAgIFhsb29wIDIJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYbG9vcCA0CQkJCSIgWDogNCArIDQqMTYKKwllbmR0cnkKKwlYbG9vcCA4CQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgdHJ5CisJWHBhdGggMjU2CQkJCSIgWDogMjU2CisJdHJ5CisJICAgIFhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCSAgICB0aHJvdyAiZXhjZXB0aW9uIgorCSAgICBYcGF0aCAxMDI0CQkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMjA0OAkJCQkiIFg6IDIwNDgKKwkgICAgdHJ5CisJCVhwYXRoIDQwOTYJCQkiIFg6IDQwOTYKKwkJdHJ5CisJCSAgICBYcGF0aCA4MTkyCQkJIiBYOiA4MTkyCisJCWZpbmFsbHkKKwkJICAgIFhwYXRoIDE2Mzg0CQkJIiBYOiAxNjM4NAorCQkgICAgdHJ5CisJCQlYcGF0aCAzMjc2OAkJIiBYOiAzMjc2OAorCQkJdGhyb3cgImV4Y2VwdGlvbiIKKwkJCVhwYXRoIDY1NTM2CQkiIFg6IDAKKwkJICAgIGVuZHRyeQorCQkgICAgWHBhdGggMTMxMDcyCQkiIFg6IDAKKwkJZW5kdHJ5CisJCVhwYXRoIDI2MjE0NAkJCSIgWDogMAorCSAgICBlbmR0cnkKKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiAwCisJZW5kdHJ5CisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKwl0cnkKKwkgICAgWHBhdGggNDE5NDMwNAkJCSIgWDogNDE5NDMwNAorCSAgICBjYWxsIEYoKQorCSAgICBYcGF0aCA4Mzg4NjA4CQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKwkgICAgdHJ5CisJCVhwYXRoIDMzNTU0NDMyCQkJIiBYOiAzMzU1NDQzMgorCQlYbG9vcE5FWFQKKwkJRXhlY0FzU2NyaXB0IEYKKwkJWHBhdGggNjcxMDg4NjQJCQkiIFg6IDAKKwkgICAgZmluYWxseQorCQlYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDEzNDIxNzcyOAorCSAgICBlbmR0cnkKKwkgICAgWHBhdGggMjY4NDM1NDU2CQkJIiBYOiAwCisJZW5kdHJ5CisJWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAwCitlbmRpZgorCitYY2hlY2sgMTkwOTA1MTczCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzMjogIFJlbWVtYmVyaW5nIHRoZSA6cmV0dXJuIHZhbHVlIG9uIDpmaW5hbGx5CQkJICAgIHt7ezEKKyIKKyIJICAgIElmIGEgOmZpbmFsbHkgY2xhdXNlIGlzIGV4ZWN1dGVkIGR1ZSB0byBhIDpyZXR1cm4gc3BlY2lmeWluZworIgkgICAgYSB2YWx1ZSwgdGhpcyBpcyB0aGUgdmFsdWUgdmlzaWJsZSB0byB0aGUgY2FsbGVyIGlmIG5vdCBvdmVyd3JpdHRlbgorIgkgICAgYnkgYSBuZXcgOnJldHVybiBpbiB0aGUgOmZpbmFsbHkgY2xhdXNlLiAgQSA6cmV0dXJuIHdpdGhvdXQgYSB2YWx1ZQorIgkgICAgaW4gdGhlIDpmaW5hbGx5IGNsYXVzZSBvdmVyd3JpdGVzIHdpdGggdmFsdWUgMC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgRigpCisgICAgdHJ5CisJWHBhdGggMQkJCQkJIiBYOiAxCisJdHJ5CisJICAgIFhwYXRoIDIJCQkJIiBYOiAyCisJICAgIHJldHVybiAiQUJDRCIKKwkgICAgWHBhdGggNAkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDgJCQkJIiBYOiA4CisJZW5kdHJ5CisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDMyCQkJCSIgWDogMzIKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRygpCisgICAgdHJ5CisJWHBhdGggMTI4CQkJCSIgWDogMTI4CisJcmV0dXJuIDgKKwlYcGF0aCAyNTYJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCXJldHVybiAxNiArIHN0cmxlbihGKCkpCisJWHBhdGggMTAyNAkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAyMDQ4CQkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBIKCkKKyAgICB0cnkKKwlYcGF0aCA0MDk2CQkJCSIgWDogNDA5NgorCXJldHVybiAzMgorCVhwYXRoIDgxOTIJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMTYzODQKKwlyZXR1cm4KKwlYcGF0aCAzMjc2OAkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSSgpCisgICAgdHJ5CisJWHBhdGggMTMxMDcyCQkJCSIgWDogMTMxMDcyCisgICAgZmluYWxseQorCVhwYXRoIDI2MjE0NAkJCQkiIFg6IDI2MjE0NAorCXJldHVybiBHKCkgKyBIKCkgKyA2NAorCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworbGV0IHJldGNvZGUgPSBJKCkKK1hwYXRoIDIwOTcxNTIJCQkJCSIgWDogMjA5NzE1MgorCitpZiByZXRjb2RlIDwgMAorICAgIFhwYXRoIDQxOTQzMDQJCQkJIiBYOiAwCitlbmRpZgoraWYgcmV0Y29kZSAlIDQKKyAgICBYcGF0aCA4Mzg4NjA4CQkJCSIgWDogMAorZW5kaWYKK2lmIChyZXRjb2RlLzQpICUgMgorICAgIFhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMTY3NzcyMTYKK2VuZGlmCitpZiAocmV0Y29kZS84KSAlIDIKKyAgICBYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDAKK2VuZGlmCitpZiAocmV0Y29kZS8xNikgJSAyCisgICAgWHBhdGggNjcxMDg4NjQJCQkJIiBYOiA2NzEwODg2NAorZW5kaWYKK2lmIChyZXRjb2RlLzMyKSAlIDIKKyAgICBYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAwCitlbmRpZgoraWYgKHJldGNvZGUvNjQpICUgMgorICAgIFhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDI2ODQzNTQ1NgorZW5kaWYKK2lmIHJldGNvZGUvMTI4CisgICAgWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorZW5kaWYKKwordW5sZXQgcmV0Y29kZQorZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gRworZGVsZnVuY3Rpb24gSAorZGVsZnVuY3Rpb24gSQorCitYY2hlY2sgMzU0ODMzMDY3CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzMzogIDpyZXR1cm4gdW5kZXIgOmV4ZWN1dGUgb3IgdXNlciBjb21tYW5kIGFuZCA6ZmluYWxseQkJICAgIHt7ezEKKyIKKyIJICAgIEEgOnJldHVybiBjb21tYW5kIG1heSBiZSBleGVjdXRlZCB1bmRlciBhbiAiOmV4ZWN1dGUiIG9yIGZyb20KKyIJICAgIGEgdXNlciBjb21tYW5kLiAgRXhlY3V0aW5nIG9mIDpmaW5hbGx5IGNsYXVzZXMgYW5kIHBhc3NpbmcgdGhyb3VnaAorIgkgICAgdGhlIHJldHVybiBjb2RlIHdvcmtzIGFsc28gdGhlbi4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitYcGF0aElOSVQKKworY29tbWFuZCEgLW5hcmdzPT8gUkVUVVJOCisgICAgXCB0cnkgfCByZXR1cm4gPGFyZ3M+IHwgZmluYWxseSB8IHJldHVybiA8YXJncz4gKiAyIHwgZW5kdHJ5CisKK2Z1bmN0aW9uISBGKCkKKyAgICB0cnkKKwlSRVRVUk4gOAorCVhwYXRoIDEJCQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCAyCQkJCQkiIFg6IDIKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA0CQkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBHKCkKKyAgICB0cnkKKwlSRVRVUk4gMzIKKwlYcGF0aCA4CQkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggMTYJCQkJIiBYOiAxNgorCVJFVFVSTiAxMjgKKwlYcGF0aCAzMgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSCgpCisgICAgdHJ5CisJZXhlY3V0ZSAidHJ5IHwgcmV0dXJuIDUxMiB8IGZpbmFsbHkgfCByZXR1cm4gMTAyNCB8IGVuZHRyeSIKKwlYcGF0aCAxMjgJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorICAgIGVuZHRyeQorICAgIFhwYXRoIDUxMgkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSSgpCisgICAgdHJ5CisJZXhlY3V0ZSAidHJ5IHwgcmV0dXJuIDIwNDggfCBmaW5hbGx5IHwgcmV0dXJuIDQwOTYgfCBlbmR0cnkiCisJWHBhdGggMTAyNAkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggMjA0OAkJCQkiIFg6IDIwNDgKKwlleGVjdXRlICJ0cnkgfCByZXR1cm4gODE5MiB8IGZpbmFsbHkgfCByZXR1cm4gMTYzODQgfCBlbmR0cnkiCisJWHBhdGggNDA5NgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA4MTkyCQkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBKKCkKKyAgICB0cnkKKwlSRVRVUk4gMzI3NjgKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorCXJldHVybgorCVhwYXRoIDY1NTM2CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDEzMTA3MgkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBLKCkKKyAgICB0cnkKKwlleGVjdXRlICJ0cnkgfCByZXR1cm4gMTMxMDcyIHwgZmluYWxseSB8IHJldHVybiAyNjIxNDQgfCBlbmR0cnkiCisJWHBhdGggMjYyMTQ0CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCA1MjQyODgJCQkJIiBYOiA1MjQyODgKKwlleGVjdXRlICJ0cnkgfCByZXR1cm4gNTI0Mjg4IHwgZmluYWxseSB8IHJldHVybiB8IGVuZHRyeSIKKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDIwOTcxNTIJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgTCgpCisgICAgdHJ5CisJcmV0dXJuCisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDgzODg2MDgKKwlSRVRVUk4gMTA0ODU3NgorCVhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIE0oKQorICAgIHRyeQorCXJldHVybgorCVhwYXRoIDY3MTA4ODY0CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKwlleGVjdXRlICJ0cnkgfCByZXR1cm4gNDE5NDMwNCB8IGZpbmFsbHkgfCByZXR1cm4gODM4ODYwOCB8IGVuZHRyeSIKKwlYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisgICAgWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIE4oKQorICAgIFJFVFVSTiAxNjc3NzIxNgorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIE8oKQorICAgIGV4ZWN1dGUgInRyeSB8IHJldHVybiA2NzEwODg2NCB8IGZpbmFsbHkgfCByZXR1cm4gMTM0MjE3NzI4IHwgZW5kdHJ5IgorZW5kZnVuY3Rpb24KKworbGV0IHN1bQkgICAgID0gRigpICsgRygpICsgSCgpICArIEkoKSAgICsgSigpICsgSygpICsgTCgpICAgICArIE0oKQorbGV0IGV4cGVjdGVkID0gMTYgICsgMjU2ICsgMTAyNCArIDE2Mzg0ICsgMCAgICsgMCAgICsgMjA5NzE1MiArIDgzODg2MDgKK2xldCBzdW0JICAgICA9IHN1bSAgICAgICsgTigpICAgICAgKyBPKCkKK2xldCBleHBlY3RlZCA9IGV4cGVjdGVkICsgMzM1NTQ0MzIgKyAxMzQyMTc3MjgKKworaWYgc3VtID09IGV4cGVjdGVkCisgICAgWG91dCAic3VtID0gIiAuIHN1bSAuICIgKG9rKSIKK2Vsc2UKKyAgICBYb3V0ICJzdW0gPSAiIC4gc3VtIC4gIiwgZXhwZWN0ZWQ6ICIgLiBleHBlY3RlZAorZW5kaWYKKworWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKworaWYgc3VtICE9IGV4cGVjdGVkCisgICAgIiBUaGUgWHBhdGggY29tbWFuZCBkb2VzIG5vdCBhY2NlcHQgMl4zMSAobmVnYXRpdmUpOyBhZGQgZXhwbGljaXRseToKKyAgICBsZXQgWHBhdGggPSBYcGF0aCArIDIxNDc0ODM2NDgJCSIgWDogMAorZW5kaWYKKwordW5sZXQgc3VtIGV4cGVjdGVkCitkZWxmdW5jdGlvbiBGCitkZWxmdW5jdGlvbiBHCitkZWxmdW5jdGlvbiBICitkZWxmdW5jdGlvbiBJCitkZWxmdW5jdGlvbiBKCitkZWxmdW5jdGlvbiBLCitkZWxmdW5jdGlvbiBMCitkZWxmdW5jdGlvbiBNCitkZWxmdW5jdGlvbiBOCitkZWxmdW5jdGlvbiBPCisKK1hjaGVjayAxMjE2OTA3NTM4CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzNDogIDpmaW5hbGx5IHJlYXNvbiBkaXNjYXJkZWQgYnkgOmNvbnRpbnVlCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSA6ZmluYWxseSBjbGF1c2UgaXMgZXhlY3V0ZWQgZHVlIHRvIGEgOmNvbnRpbnVlLCA6YnJlYWssCisiCSAgICA6cmV0dXJuLCA6ZmluaXNoLCBlcnJvciwgaW50ZXJydXB0IG9yIDp0aHJvdywgdGhlIGp1bXAgcmVhc29uIGlzCisiCSAgICBkaXNjYXJkZWQgYnkgYSA6Y29udGludWUgaW4gdGhlIGZpbmFsbHkgY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIFhsb29wSU5JVCEgMSA4CisKKyAgICBmdW5jdGlvbiEgQyhqdW1wKQorCVhsb29wTkVYVAorCWxldCBsb29wID0gMAorCXdoaWxlIGxvb3AgPCAyCisJICAgIGxldCBsb29wID0gbG9vcCArIDEKKwkgICAgaWYgbG9vcCA9PSAxCisJCXRyeQorCQkgICAgaWYgYTpqdW1wID09ICJjb250aW51ZSIKKwkJCWNvbnRpbnVlCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJicmVhayIKKwkJCWJyZWFrCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJyZXR1cm4iIHx8IGE6anVtcCA9PSAiZmluaXNoIgorCQkJcmV0dXJuCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJlcnJvciIKKwkJCWFzZGYKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImludGVycnVwdCIKKwkJCSJJTlRFUlJVUFQKKwkJCWxldCBkdW1teSA9IDAKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInRocm93IgorCQkJdGhyb3cgImFiYyIKKwkJICAgIGVuZGlmCisJCWZpbmFsbHkKKwkJICAgIGNvbnRpbnVlCSIgZGlzY2FyZHMganVtcCB0aGF0IGNhdXNlZCB0aGUgOmZpbmFsbHkKKwkJICAgIFhsb29wIDEJCSIgWDogMAorCQllbmR0cnkKKwkJWGxvb3AgMgkJCSIgWDogMAorCSAgICBlbHNlaWYgbG9vcCA9PSAyCisJCVhsb29wIDQJCQkiIFg6IDQqKDErOCs2NCs1MTIrNDA5NiszMjc2OCsyNjIxNDQpCisJICAgIGVuZGlmCisJZW5kd2hpbGUKKyAgICBlbmRmdW5jdGlvbgorCisgICAgY2FsbCBDKCJjb250aW51ZSIpCisgICAgWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKyAgICBjYWxsIEMoImJyZWFrIikKKyAgICBYcGF0aCA0MTk0MzA0CQkJCSIgWDogNDE5NDMwNAorICAgIGNhbGwgQygicmV0dXJuIikKKyAgICBYcGF0aCA4Mzg4NjA4CQkJCSIgWDogODM4ODYwOAorICAgIGxldCBnOmp1bXAgPSAiZmluaXNoIgorICAgIEV4ZWNBc1NjcmlwdCBDCisgICAgdW5sZXQgZzpqdW1wCisgICAgWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAxNjc3NzIxNgorICAgIHRyeQorCWNhbGwgQygiZXJyb3IiKQorCVhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMzM1NTQ0MzIKKyAgICBmaW5hbGx5CisJWHBhdGggNjcxMDg4NjQJCQkJIiBYOiA2NzEwODg2NAorCXRyeQorCSAgICBjYWxsIEMoImludGVycnVwdCIpCisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMTM0MjE3NzI4CisJZmluYWxseQorCSAgICBYcGF0aCAyNjg0MzU0NTYJCQkiIFg6IDI2ODQzNTQ1NgorCSAgICBjYWxsIEMoInRocm93IikKKwkgICAgWHBhdGggNTM2ODcwOTEyCQkJIiBYOiA1MzY4NzA5MTIKKwllbmR0cnkKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMTA3Mzc0MTgyNAorCisgICAgZGVsZnVuY3Rpb24gQworCitlbmRpZgorCitYY2hlY2sgMjE0NjU4NDg2OAorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMzU6ICA6ZmluYWxseSByZWFzb24gZGlzY2FyZGVkIGJ5IDpicmVhawkJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhIDpmaW5hbGx5IGNsYXVzZSBpcyBleGVjdXRlZCBkdWUgdG8gYSA6Y29udGludWUsIDpicmVhaywKKyIJICAgIDpyZXR1cm4sIDpmaW5pc2gsIGVycm9yLCBpbnRlcnJ1cHQgb3IgOnRocm93LCB0aGUganVtcCByZWFzb24gaXMKKyIJICAgIGRpc2NhcmRlZCBieSBhIDpicmVhayBpbiB0aGUgZmluYWxseSBjbGF1c2UuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorCisgICAgWGxvb3BJTklUISAxIDgKKworICAgIGZ1bmN0aW9uISBCKGp1bXApCisJWGxvb3BORVhUCisJbGV0IGxvb3AgPSAwCisJd2hpbGUgbG9vcCA8IDIKKwkgICAgbGV0IGxvb3AgPSBsb29wICsgMQorCSAgICBpZiBsb29wID09IDEKKwkJdHJ5CisJCSAgICBpZiBhOmp1bXAgPT0gImNvbnRpbnVlIgorCQkJY29udGludWUKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImJyZWFrIgorCQkJYnJlYWsKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInJldHVybiIgfHwgYTpqdW1wID09ICJmaW5pc2giCisJCQlyZXR1cm4KKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImVycm9yIgorCQkJYXNkZgorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAiaW50ZXJydXB0IgorCQkJIklOVEVSUlVQVAorCQkJbGV0IGR1bW15ID0gMAorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAidGhyb3ciCisJCQl0aHJvdyAiYWJjIgorCQkgICAgZW5kaWYKKwkJZmluYWxseQorCQkgICAgYnJlYWsJIiBkaXNjYXJkcyBqdW1wIHRoYXQgY2F1c2VkIHRoZSA6ZmluYWxseQorCQkgICAgWGxvb3AgMQkJIiBYOiAwCisJCWVuZHRyeQorCSAgICBlbHNlaWYgbG9vcCA9PSAyCisJCVhsb29wIDIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwllbmR3aGlsZQorCVhsb29wIDQJCQkJIiBYOiA0KigxKzgrNjQrNTEyKzQwOTYrMzI3NjgrMjYyMTQ0KQorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBjYWxsIEIoImNvbnRpbnVlIikKKyAgICBYcGF0aCAyMDk3MTUyCQkJCSIgWDogMjA5NzE1MgorICAgIGNhbGwgQigiYnJlYWsiKQorICAgIFhwYXRoIDQxOTQzMDQJCQkJIiBYOiA0MTk0MzA0CisgICAgY2FsbCBCKCJyZXR1cm4iKQorICAgIFhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisgICAgbGV0IGc6anVtcCA9ICJmaW5pc2giCisgICAgRXhlY0FzU2NyaXB0IEIKKyAgICB1bmxldCBnOmp1bXAKKyAgICBYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDE2Nzc3MjE2CisgICAgdHJ5CisJY2FsbCBCKCJlcnJvciIpCisJWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAzMzU1NDQzMgorICAgIGZpbmFsbHkKKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CisJdHJ5CisJICAgIGNhbGwgQigiaW50ZXJydXB0IikKKwkgICAgWHBhdGggMTM0MjE3NzI4CQkJIiBYOiAxMzQyMTc3MjgKKwlmaW5hbGx5CisJICAgIFhwYXRoIDI2ODQzNTQ1NgkJCSIgWDogMjY4NDM1NDU2CisJICAgIGNhbGwgQigidGhyb3ciKQorCSAgICBYcGF0aCA1MzY4NzA5MTIJCQkiIFg6IDUzNjg3MDkxMgorCWVuZHRyeQorICAgIGVuZHRyeQorICAgIFhwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAxMDczNzQxODI0CisKKyAgICBkZWxmdW5jdGlvbiBCCisKK2VuZGlmCisKK1hjaGVjayAyMTQ2NTg0ODY4CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzNjogIDpmaW5hbGx5IHJlYXNvbiBkaXNjYXJkZWQgYnkgOnJldHVybgkJCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGEgOmZpbmFsbHkgY2xhdXNlIGlzIGV4ZWN1dGVkIGR1ZSB0byBhIDpjb250aW51ZSwgOmJyZWFrLAorIgkgICAgOnJldHVybiwgOmZpbmlzaCwgZXJyb3IsIGludGVycnVwdCBvciA6dGhyb3csIHRoZSBqdW1wIHJlYXNvbiBpcworIgkgICAgZGlzY2FyZGVkIGJ5IGEgOnJldHVybiBpbiB0aGUgZmluYWxseSBjbGF1c2UuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorCisgICAgWGxvb3BJTklUISAxIDgKKworICAgIGZ1bmN0aW9uISBSKGp1bXAsIHJldHZhbCkgYWJvcnQKKwlYbG9vcE5FWFQKKwlsZXQgbG9vcCA9IDAKKwl3aGlsZSBsb29wIDwgMgorCSAgICBsZXQgbG9vcCA9IGxvb3AgKyAxCisJICAgIGlmIGxvb3AgPT0gMQorCQl0cnkKKwkJICAgIGlmIGE6anVtcCA9PSAiY29udGludWUiCisJCQljb250aW51ZQorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAiYnJlYWsiCisJCQlicmVhaworCQkgICAgZWxzZWlmIGE6anVtcCA9PSAicmV0dXJuIgorCQkJcmV0dXJuCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJlcnJvciIKKwkJCWFzZGYKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImludGVycnVwdCIKKwkJCSJJTlRFUlJVUFQKKwkJCWxldCBkdW1teSA9IDAKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInRocm93IgorCQkJdGhyb3cgImFiYyIKKwkJICAgIGVuZGlmCisJCWZpbmFsbHkKKwkJICAgIHJldHVybiBhOnJldHZhbAkiIGRpc2NhcmRzIGp1bXAgdGhhdCBjYXVzZWQgdGhlIDpmaW5hbGx5CisJCSAgICBYbG9vcCAxCQkJIiBYOiAwCisJCWVuZHRyeQorCSAgICBlbHNlaWYgbG9vcCA9PSAyCisJCVhsb29wIDIJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kd2hpbGUKKwlYbG9vcCA0CQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgbGV0IHN1bSA9ICAtUigiY29udGludWUiLCAtOCkKKyAgICBYcGF0aCAyMDk3MTUyCQkJCSIgWDogMjA5NzE1MgorICAgIGxldCBzdW0gPSBzdW0gLSBSKCJicmVhayIsIC0xNikKKyAgICBYcGF0aCA0MTk0MzA0CQkJCSIgWDogNDE5NDMwNAorICAgIGxldCBzdW0gPSBzdW0gLSBSKCJyZXR1cm4iLCAtMzIpCisgICAgWHBhdGggODM4ODYwOAkJCQkiIFg6IDgzODg2MDgKKyAgICB0cnkKKwlsZXQgc3VtID0gc3VtIC0gUigiZXJyb3IiLCAtNjQpCisJWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAxNjc3NzIxNgorICAgIGZpbmFsbHkKKwlYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDMzNTU0NDMyCisJdHJ5CisJICAgIGxldCBzdW0gPSBzdW0gLSBSKCJpbnRlcnJ1cHQiLCAtMTI4KQorCSAgICBYcGF0aCA2NzEwODg2NAkJCSIgWDogNjcxMDg4NjQKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMTM0MjE3NzI4CisJICAgIGxldCBzdW0gPSBzdW0gLSBSKCJ0aHJvdyIsIC0yNTYpCisJICAgIFhwYXRoIDI2ODQzNTQ1NgkJCSIgWDogMjY4NDM1NDU2CisJZW5kdHJ5CisgICAgZW5kdHJ5CisgICAgWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogNTM2ODcwOTEyCisKKyAgICBsZXQgZXhwZWN0ZWQgPSA4ICsgMTYgKyAzMiArIDY0ICsgMTI4ICsgMjU2CisgICAgaWYgc3VtICE9IGV4cGVjdGVkCisJWHBhdGggMTA3Mzc0MTgyNAkJCSIgWDogMAorCVhvdXQgInN1bSA9IiAuIHN1bSAuICIsIGV4cGVjdGVkOiAiIC4gZXhwZWN0ZWQKKyAgICBlbmRpZgorCisgICAgdW5sZXQgc3VtIGV4cGVjdGVkCisgICAgZGVsZnVuY3Rpb24gUgorCitlbmRpZgorCitYY2hlY2sgMTA3MTY0NDY3MgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMzc6ICA6ZmluYWxseSByZWFzb24gZGlzY2FyZGVkIGJ5IDpmaW5pc2gJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhIDpmaW5hbGx5IGNsYXVzZSBpcyBleGVjdXRlZCBkdWUgdG8gYSA6Y29udGludWUsIDpicmVhaywKKyIJICAgIDpyZXR1cm4sIDpmaW5pc2gsIGVycm9yLCBpbnRlcnJ1cHQgb3IgOnRocm93LCB0aGUganVtcCByZWFzb24gaXMKKyIJICAgIGRpc2NhcmRlZCBieSBhIDpmaW5pc2ggaW4gdGhlIGZpbmFsbHkgY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIFhsb29wSU5JVCEgMSA4CisKKyAgICBmdW5jdGlvbiEgRihqdW1wKQkiIG5vdCBleGVjdXRlZCBhcyBmdW5jdGlvbiwgdHJhbnNmb3JtZWQgdG8gYSBzY3JpcHQKKwlYbG9vcE5FWFQKKwlsZXQgbG9vcCA9IDAKKwl3aGlsZSBsb29wIDwgMgorCSAgICBsZXQgbG9vcCA9IGxvb3AgKyAxCisJICAgIGlmIGxvb3AgPT0gMQorCQl0cnkKKwkJICAgIGlmIGE6anVtcCA9PSAiY29udGludWUiCisJCQljb250aW51ZQorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAiYnJlYWsiCisJCQlicmVhaworCQkgICAgZWxzZWlmIGE6anVtcCA9PSAiZmluaXNoIgorCQkJZmluaXNoCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJlcnJvciIKKwkJCWFzZGYKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImludGVycnVwdCIKKwkJCSJJTlRFUlJVUFQKKwkJCWxldCBkdW1teSA9IDAKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInRocm93IgorCQkJdGhyb3cgImFiYyIKKwkJICAgIGVuZGlmCisJCWZpbmFsbHkKKwkJICAgIGZpbmlzaAkiIGRpc2NhcmRzIGp1bXAgdGhhdCBjYXVzZWQgdGhlIDpmaW5hbGx5CisJCSAgICBYbG9vcCAxCQkJIiBYOiAwCisJCWVuZHRyeQorCSAgICBlbHNlaWYgbG9vcCA9PSAyCisJCVhsb29wIDIJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kd2hpbGUKKwlYbG9vcCA0CQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgbGV0IHNjcmlwdEYgPSBNYWtlU2NyaXB0KCJGIikKKyAgICBkZWxmdW5jdGlvbiBGCisKKyAgICBsZXQgZzpqdW1wID0gImNvbnRpbnVlIgorICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0RgorICAgIFhwYXRoIDIwOTcxNTIJCQkJIiBYOiAyMDk3MTUyCisgICAgbGV0IGc6anVtcCA9ICJicmVhayIKKyAgICBleGVjICJzb3VyY2UiIHNjcmlwdEYKKyAgICBYcGF0aCA0MTk0MzA0CQkJCSIgWDogNDE5NDMwNAorICAgIGxldCBnOmp1bXAgPSAiZmluaXNoIgorICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0RgorICAgIFhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisgICAgdHJ5CisJbGV0IGc6anVtcCA9ICJlcnJvciIKKwlleGVjICJzb3VyY2UiIHNjcmlwdEYKKwlYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDE2Nzc3MjE2CisgICAgZmluYWxseQorCVhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMzM1NTQ0MzIKKwl0cnkKKwkgICAgbGV0IGc6anVtcCA9ICJpbnRlcnJ1cHQiCisJICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0RgorCSAgICBYcGF0aCA2NzEwODg2NAkJCSIgWDogNjcxMDg4NjQKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMTM0MjE3NzI4CisJICAgIHRyeQorCQlsZXQgZzpqdW1wID0gInRocm93IgorCQlleGVjICJzb3VyY2UiIHNjcmlwdEYKKwkJWHBhdGggMjY4NDM1NDU2CQkJIiBYOiAyNjg0MzU0NTYKKwkgICAgZmluYWxseQorCQlYcGF0aCA1MzY4NzA5MTIJCQkiIFg6IDUzNjg3MDkxMgorCSAgICBlbmR0cnkKKwllbmR0cnkKKyAgICBlbmR0cnkKKyAgICB1bmxldCBnOmp1bXAKKworICAgIGNhbGwgZGVsZXRlKHNjcmlwdEYpCisgICAgdW5sZXQgc2NyaXB0RgorCitlbmRpZgorCitYY2hlY2sgMTA3MTY0NDY3MgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMzg6ICA6ZmluYWxseSByZWFzb24gZGlzY2FyZGVkIGJ5IGFuIGVycm9yCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSA6ZmluYWxseSBjbGF1c2UgaXMgZXhlY3V0ZWQgZHVlIHRvIGEgOmNvbnRpbnVlLCA6YnJlYWssCisiCSAgICA6cmV0dXJuLCA6ZmluaXNoLCBlcnJvciwgaW50ZXJydXB0IG9yIDp0aHJvdywgdGhlIGp1bXAgcmVhc29uIGlzCisiCSAgICBkaXNjYXJkZWQgYnkgYW4gZXJyb3IgaW4gdGhlIGZpbmFsbHkgY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIFhsb29wSU5JVCEgMSA0CisKKyAgICBmdW5jdGlvbiEgRShqdW1wKQorCVhsb29wTkVYVAorCWxldCBsb29wID0gMAorCXdoaWxlIGxvb3AgPCAyCisJICAgIGxldCBsb29wID0gbG9vcCArIDEKKwkgICAgaWYgbG9vcCA9PSAxCisJCXRyeQorCQkgICAgaWYgYTpqdW1wID09ICJjb250aW51ZSIKKwkJCWNvbnRpbnVlCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJicmVhayIKKwkJCWJyZWFrCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJyZXR1cm4iIHx8IGE6anVtcCA9PSAiZmluaXNoIgorCQkJcmV0dXJuCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJlcnJvciIKKwkJCWFzZGYKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImludGVycnVwdCIKKwkJCSJJTlRFUlJVUFQKKwkJCWxldCBkdW1teSA9IDAKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInRocm93IgorCQkJdGhyb3cgImFiYyIKKwkJICAgIGVuZGlmCisJCWZpbmFsbHkKKwkJICAgIGFzZGYJIiBlcnJvcjsgZGlzY2FyZHMganVtcCB0aGF0IGNhdXNlZCB0aGUgOmZpbmFsbHkKKwkJZW5kdHJ5CisJICAgIGVsc2VpZiBsb29wID09IDIKKwkJWGxvb3AgMQkJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwllbmR3aGlsZQorCVhsb29wIDIJCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB0cnkKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJY2FsbCBFKCJjb250aW51ZSIpCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisgICAgZmluYWxseQorCXRyeQorCSAgICBYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJICAgIGNhbGwgRSgiYnJlYWsiKQorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIHRyeQorCQlYcGF0aCAyNjIxNDQJCQkiIFg6IDI2MjE0NAorCQljYWxsIEUoInJldHVybiIpCisJCVhwYXRoIDUyNDI4OAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCXRyeQorCQkgICAgWHBhdGggMTA0ODU3NgkJIiBYOiAxMDQ4NTc2CisJCSAgICBsZXQgZzpqdW1wID0gImZpbmlzaCIKKwkJICAgIEV4ZWNBc1NjcmlwdCBFCisJCSAgICBYcGF0aCAyMDk3MTUyCQkiIFg6IDAKKwkJZmluYWxseQorCQkgICAgdW5sZXQgZzpqdW1wCisJCSAgICB0cnkKKwkJCVhwYXRoIDQxOTQzMDQJCSIgWDogNDE5NDMwNAorCQkJY2FsbCBFKCJlcnJvciIpCisJCQlYcGF0aCA4Mzg4NjA4CQkiIFg6IDAKKwkJICAgIGZpbmFsbHkKKwkJCXRyeQorCQkJICAgIFhwYXRoIDE2Nzc3MjE2CSIgWDogMTY3NzcyMTYKKwkJCSAgICBjYWxsIEUoImludGVycnVwdCIpCisJCQkgICAgWHBhdGggMzM1NTQ0MzIJIiBYOiAwCisJCQlmaW5hbGx5CisJCQkgICAgdHJ5CisJCQkJWHBhdGggNjcxMDg4NjQJIiBYOiA2NzEwODg2NAorCQkJCWNhbGwgRSgidGhyb3ciKQorCQkJCVhwYXRoIDEzNDIxNzcyOAkiIFg6IDAKKwkJCSAgICBmaW5hbGx5CisJCQkJWHBhdGggMjY4NDM1NDU2CSIgWDogMjY4NDM1NDU2CisJCQkJZGVsZnVuY3Rpb24gRQorCQkJICAgIGVuZHRyeQorCQkJZW5kdHJ5CisJCSAgICBlbmR0cnkKKwkJZW5kdHJ5CisJICAgIGVuZHRyeQorCWVuZHRyeQorICAgIGVuZHRyeQorICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDAKKworZW5kaWYKKworWGNoZWNrIDM1NzkwODQ4MAorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMzk6ICA6ZmluYWxseSByZWFzb24gZGlzY2FyZGVkIGJ5IGFuIGludGVycnVwdAkJCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGEgOmZpbmFsbHkgY2xhdXNlIGlzIGV4ZWN1dGVkIGR1ZSB0byBhIDpjb250aW51ZSwgOmJyZWFrLAorIgkgICAgOnJldHVybiwgOmZpbmlzaCwgZXJyb3IsIGludGVycnVwdCBvciA6dGhyb3csIHRoZSBqdW1wIHJlYXNvbiBpcworIgkgICAgZGlzY2FyZGVkIGJ5IGFuIGludGVycnVwdCBpbiB0aGUgZmluYWxseSBjbGF1c2UuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorCisgICAgWGxvb3BJTklUISAxIDQKKworICAgIGZ1bmN0aW9uISBJKGp1bXApCisJWGxvb3BORVhUCisJbGV0IGxvb3AgPSAwCisJd2hpbGUgbG9vcCA8IDIKKwkgICAgbGV0IGxvb3AgPSBsb29wICsgMQorCSAgICBpZiBsb29wID09IDEKKwkJdHJ5CisJCSAgICBpZiBhOmp1bXAgPT0gImNvbnRpbnVlIgorCQkJY29udGludWUKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImJyZWFrIgorCQkJYnJlYWsKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInJldHVybiIgfHwgYTpqdW1wID09ICJmaW5pc2giCisJCQlyZXR1cm4KKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImVycm9yIgorCQkJYXNkZgorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAiaW50ZXJydXB0IgorCQkJIklOVEVSUlVQVAorCQkJbGV0IGR1bW15ID0gMAorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAidGhyb3ciCisJCQl0aHJvdyAiYWJjIgorCQkgICAgZW5kaWYKKwkJZmluYWxseQorCQkgICAgIklOVEVSUlVQVCAtIGRpc2NhcmRzIGp1bXAgdGhhdCBjYXVzZWQgdGhlIDpmaW5hbGx5CisJCSAgICBsZXQgZHVtbXkgPSAwCisJCWVuZHRyeQorCSAgICBlbHNlaWYgbG9vcCA9PSAyCisJCVhsb29wIDEJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kd2hpbGUKKwlYbG9vcCAyCQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgdHJ5CisJWHBhdGggMTYzODQJCQkJIiBYOiAxNjM4NAorCWNhbGwgSSgiY29udGludWUiKQorCVhwYXRoIDMyNzY4CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwl0cnkKKwkgICAgWHBhdGggNjU1MzYJCQkJIiBYOiA2NTUzNgorCSAgICBjYWxsIEkoImJyZWFrIikKKwkgICAgWHBhdGggMTMxMDcyCQkJIiBYOiAwCisJZmluYWxseQorCSAgICB0cnkKKwkJWHBhdGggMjYyMTQ0CQkJIiBYOiAyNjIxNDQKKwkJY2FsbCBJKCJyZXR1cm4iKQorCQlYcGF0aCA1MjQyODgJCQkiIFg6IDAKKwkgICAgZmluYWxseQorCQl0cnkKKwkJICAgIFhwYXRoIDEwNDg1NzYJCSIgWDogMTA0ODU3NgorCQkgICAgbGV0IGc6anVtcCA9ICJmaW5pc2giCisJCSAgICBFeGVjQXNTY3JpcHQgSQorCQkgICAgWHBhdGggMjA5NzE1MgkJIiBYOiAwCisJCWZpbmFsbHkKKwkJICAgIHVubGV0IGc6anVtcAorCQkgICAgdHJ5CisJCQlYcGF0aCA0MTk0MzA0CQkiIFg6IDQxOTQzMDQKKwkJCWNhbGwgSSgiZXJyb3IiKQorCQkJWHBhdGggODM4ODYwOAkJIiBYOiAwCisJCSAgICBmaW5hbGx5CisJCQl0cnkKKwkJCSAgICBYcGF0aCAxNjc3NzIxNgkiIFg6IDE2Nzc3MjE2CisJCQkgICAgY2FsbCBJKCJpbnRlcnJ1cHQiKQorCQkJICAgIFhwYXRoIDMzNTU0NDMyCSIgWDogMAorCQkJZmluYWxseQorCQkJICAgIHRyeQorCQkJCVhwYXRoIDY3MTA4ODY0CSIgWDogNjcxMDg4NjQKKwkJCQljYWxsIEkoInRocm93IikKKwkJCQlYcGF0aCAxMzQyMTc3MjgJIiBYOiAwCisJCQkgICAgZmluYWxseQorCQkJCVhwYXRoIDI2ODQzNTQ1NgkiIFg6IDI2ODQzNTQ1NgorCQkJCWRlbGZ1bmN0aW9uIEkKKwkJCSAgICBlbmR0cnkKKwkJCWVuZHRyeQorCQkgICAgZW5kdHJ5CisJCWVuZHRyeQorCSAgICBlbmR0cnkKKwllbmR0cnkKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCisKK2VuZGlmCisKK1hjaGVjayAzNTc5MDg0ODAKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDQwOiAgOmZpbmFsbHkgcmVhc29uIGRpc2NhcmRlZCBieSA6dGhyb3cJCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSA6ZmluYWxseSBjbGF1c2UgaXMgZXhlY3V0ZWQgZHVlIHRvIGEgOmNvbnRpbnVlLCA6YnJlYWssCisiCSAgICA6cmV0dXJuLCA6ZmluaXNoLCBlcnJvciwgaW50ZXJydXB0IG9yIDp0aHJvdywgdGhlIGp1bXAgcmVhc29uIGlzCisiCSAgICBkaXNjYXJkZWQgYnkgYSA6dGhyb3cgaW4gdGhlIGZpbmFsbHkgY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIFhsb29wSU5JVCEgMSA0CisKKyAgICBmdW5jdGlvbiEgVChqdW1wKQorCVhsb29wTkVYVAorCWxldCBsb29wID0gMAorCXdoaWxlIGxvb3AgPCAyCisJICAgIGxldCBsb29wID0gbG9vcCArIDEKKwkgICAgaWYgbG9vcCA9PSAxCisJCXRyeQorCQkgICAgaWYgYTpqdW1wID09ICJjb250aW51ZSIKKwkJCWNvbnRpbnVlCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJicmVhayIKKwkJCWJyZWFrCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJyZXR1cm4iIHx8IGE6anVtcCA9PSAiZmluaXNoIgorCQkJcmV0dXJuCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJlcnJvciIKKwkJCWFzZGYKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImludGVycnVwdCIKKwkJCSJJTlRFUlJVUFQKKwkJCWxldCBkdW1teSA9IDAKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInRocm93IgorCQkJdGhyb3cgImFiYyIKKwkJICAgIGVuZGlmCisJCWZpbmFsbHkKKwkJICAgIHRocm93ICJ4eXoiCSIgZGlzY2FyZHMganVtcCB0aGF0IGNhdXNlZCB0aGUgOmZpbmFsbHkKKwkJZW5kdHJ5CisJICAgIGVsc2VpZiBsb29wID09IDIKKwkJWGxvb3AgMQkJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwllbmR3aGlsZQorCVhsb29wIDIJCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB0cnkKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJY2FsbCBUKCJjb250aW51ZSIpCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisgICAgZmluYWxseQorCXRyeQorCSAgICBYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJICAgIGNhbGwgVCgiYnJlYWsiKQorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIHRyeQorCQlYcGF0aCAyNjIxNDQJCQkiIFg6IDI2MjE0NAorCQljYWxsIFQoInJldHVybiIpCisJCVhwYXRoIDUyNDI4OAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCXRyeQorCQkgICAgWHBhdGggMTA0ODU3NgkJIiBYOiAxMDQ4NTc2CisJCSAgICBsZXQgZzpqdW1wID0gImZpbmlzaCIKKwkJICAgIEV4ZWNBc1NjcmlwdCBUCisJCSAgICBYcGF0aCAyMDk3MTUyCQkiIFg6IDAKKwkJZmluYWxseQorCQkgICAgdW5sZXQgZzpqdW1wCisJCSAgICB0cnkKKwkJCVhwYXRoIDQxOTQzMDQJCSIgWDogNDE5NDMwNAorCQkJY2FsbCBUKCJlcnJvciIpCisJCQlYcGF0aCA4Mzg4NjA4CQkiIFg6IDAKKwkJICAgIGZpbmFsbHkKKwkJCXRyeQorCQkJICAgIFhwYXRoIDE2Nzc3MjE2CSIgWDogMTY3NzcyMTYKKwkJCSAgICBjYWxsIFQoImludGVycnVwdCIpCisJCQkgICAgWHBhdGggMzM1NTQ0MzIJIiBYOiAwCisJCQlmaW5hbGx5CisJCQkgICAgdHJ5CisJCQkJWHBhdGggNjcxMDg4NjQJIiBYOiA2NzEwODg2NAorCQkJCWNhbGwgVCgidGhyb3ciKQorCQkJCVhwYXRoIDEzNDIxNzcyOAkiIFg6IDAKKwkJCSAgICBmaW5hbGx5CisJCQkJWHBhdGggMjY4NDM1NDU2CSIgWDogMjY4NDM1NDU2CisJCQkJZGVsZnVuY3Rpb24gVAorCQkJICAgIGVuZHRyeQorCQkJZW5kdHJ5CisJCSAgICBlbmR0cnkKKwkJZW5kdHJ5CisJICAgIGVuZHRyeQorCWVuZHRyeQorICAgIGVuZHRyeQorICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDAKKworZW5kaWYKKworWGNoZWNrIDM1NzkwODQ4MAorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNDE6ICBTa2lwcGVkIDp0aHJvdyBmaW5kaW5nIG5leHQgY29tbWFuZAkJCQkgICAge3t7MQorIgorIgkgICAgQSA6dGhyb3cgaW4gYW4gaW5hY3RpdmUgY29uZGl0aW9uYWwgbXVzdCBub3QgaGlkZSBhIGZvbGxvd2luZworIgkgICAgY29tbWFuZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgRigpCisgICAgWHBhdGggMQkJCQkJIiBYOiAxCisgICAgaWYgMCB8IHRocm93ICJuZXZlciIgfCBlbmRpZiB8IFhwYXRoIDIJIiBYOiAyCisgICAgWHBhdGggNAkJCQkJIiBYOiA0CitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRygpCisgICAgWHBhdGggOAkJCQkJICAgICIgWDogOAorICAgIHdoaWxlIDAgfCB0aHJvdyAibmV2ZXIiIHwgZW5kd2hpbGUgfCBYcGF0aCAxNiAgICIgWDogMTYKKyAgICBYcGF0aCAzMgkJCQkJICAgICIgWDogMzIKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIEgoKQorICAgIFhwYXRoIDY0CQkJCQkJICAgICIgWDogNjQKKyAgICBpZiAwIHwgdHJ5IHwgdGhyb3cgIm5ldmVyIiB8IGVuZHRyeSB8IGVuZGlmIHwgWHBhdGggMTI4ICIgWDogMTI4CisgICAgWHBhdGggMjU2CQkJCQkJICAgICIgWDogMjU2CitlbmRmdW5jdGlvbgorCitYcGF0aCA1MTIJCQkJCSIgWDogNTEyCisKK3RyeQorICAgIFhwYXRoIDEwMjQJCQkJCSIgWDogMTAyNAorICAgIGNhbGwgRigpCisgICAgWHBhdGggMjA0OAkJCQkJIiBYOiAyMDQ4CitjYXRjaCAvLiovCisgICAgWHBhdGggNDA5NgkJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK1hwYXRoIDgxOTIJCQkJCSIgWDogODE5MgorCit0cnkKKyAgICBYcGF0aCAxNjM4NAkJCQkJIiBYOiAxNjM4NAorICAgIGNhbGwgRygpCisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK1hwYXRoIDEzMTA3MgkJCQkJIiBYOiAxMzEwNzIKKwordHJ5CisgICAgWHBhdGggMjYyMTQ0CQkJCSIgWDogMjYyMTQ0CisgICAgY2FsbCBIKCkKKyAgICBYcGF0aCA1MjQyODgJCQkJIiBYOiA1MjQyODgKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorCitYcGF0aCAyMDk3MTUyCQkJCQkiIFg6IDIwOTcxNTIKKworZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gRworZGVsZnVuY3Rpb24gSAorCitYY2hlY2sgMzA3NjA5NQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNDI6ICBDYXRjaGluZyBudW1iZXIgYW5kIHN0cmluZyBleGNlcHRpb25zCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSBudW1iZXIgaXMgdGhyb3duLCBpdCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgZXhjZXB0aW9uLgorIgkgICAgTnVtYmVycyBhbmQgc3RyaW5ncyBtYXkgYmUgY2F1Z2h0IGJ5IHNwZWNpZnlpbmcgYSByZWd1bGFyIGV4Y2VwdGlvbgorIgkgICAgYXMgYXJndW1lbnQgdG8gdGhlIDpjYXRjaCBjb21tYW5kLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK3RyeQorCisgICAgdHJ5CisJWHBhdGggMQkJCQkJIiBYOiAxCisJdGhyb3cgNDcxMQorCVhwYXRoIDIJCQkJCSIgWDogMAorICAgIGNhdGNoIC80NzExLworCVhwYXRoIDQJCQkJCSIgWDogNAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggOAkJCQkJIiBYOiA4CisJdGhyb3cgNDcxMQorCVhwYXRoIDE2CQkJCSIgWDogMAorICAgIGNhdGNoIC9eNDcxMSQvCisJWHBhdGggMzIJCQkJIiBYOiAzMgorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNjQJCQkJIiBYOiA2NAorCXRocm93IDQ3MTEKKwlYcGF0aCAxMjgJCQkJIiBYOiAwCisgICAgY2F0Y2ggL1xkLworCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNTEyCQkJCSIgWDogNTEyCisJdGhyb3cgNDcxMQorCVhwYXRoIDEwMjQJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15cZFwrJC8KKwlYcGF0aCAyMDQ4CQkJCSIgWDogMjA0OAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKwl0aHJvdyAiYXJyZ2giCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvYXJyZ2gvCisJWHBhdGggMTYzODQJCQkJIiBYOiAxNjM4NAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorCXRocm93ICJhcnJnaCIKKwlYcGF0aCA2NTUzNgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmFycmdoJC8KKwlYcGF0aCAxMzEwNzIJCQkJIiBYOiAxMzEwNzIKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDI2MjE0NAkJCQkiIFg6IDI2MjE0NAorCXRocm93ICJhcnJnaCIKKwlYcGF0aCA1MjQyODgJCQkJIiBYOiAwCisgICAgY2F0Y2ggL1xsLworCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAxMDQ4NTc2CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAyMDk3MTUyCQkJCSIgWDogMjA5NzE1MgorCXRocm93ICJhcnJnaCIKKwlYcGF0aCA0MTk0MzA0CQkJCSIgWDogMAorICAgIGNhdGNoIC9eXGxcKyQvCisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDgzODg2MDgKKyAgICBlbmR0cnkKKworICAgIHRyeQorCXRyeQorCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKwkgICAgdGhyb3cgIkFSUkdIIgorCSAgICBYcGF0aCAzMzU1NDQzMgkJCSIgWDogMAorCWNhdGNoIC9eYXJyZ2gkLworCSAgICBYcGF0aCA2NzEwODg2NAkJCSIgWDogMAorCWVuZHRyeQorICAgIGNhdGNoIC9eXGNhcnJnaCQvCisJWHBhdGggMTM0MjE3NzI4CQkJCSIgWDogMTM0MjE3NzI4CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAyNjg0MzU0NTYKKwl0aHJvdyAiIgorCVhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXiQvCisJWHBhdGggMTA3Mzc0MTgyNAkJCSIgWDogMTA3Mzc0MTgyNAorICAgIGVuZHRyeQorCitjYXRjaCAvLiovCisgICAgIiBUaGUgWHBhdGggY29tbWFuZCBkb2VzIG5vdCBhY2NlcHQgMl4zMSAobmVnYXRpdmUpOyBhZGQgZXhwbGljaXRseToKKyAgICBsZXQgWHBhdGggPSBYcGF0aCArIDIxNDc0ODM2NDgJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorCitYY2hlY2sgMTUwNTE1NTk0OQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNDM6ICBTZWxlY3RpbmcgdGhlIGNvcnJlY3QgOmNhdGNoIGNsYXVzZQkJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGFuZCB0aGVyZSBhcmUgbXVsdGlwbGUgOmNhdGNoIGNsYXVzZXMsCisiCSAgICB0aGUgZmlyc3QgbWF0Y2hpbmcgb25lIGlzIHRha2VuLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK1hsb29wSU5JVCAxIDEwMjQKK2xldCBsb29wcyA9IDMKK3doaWxlIGxvb3BzID4gMAorICAgIHRyeQorCWlmIGxvb3BzID09IDMKKwkgICAgWGxvb3AgMQkJCQkiIFg6IDEKKwkgICAgdGhyb3cgImEiCisJICAgIFhsb29wIDIJCQkJIiBYOiAwCisJZWxzZWlmIGxvb3BzID09IDIKKwkgICAgWGxvb3AgNAkJCQkiIFg6IDQqMTAyNAorCSAgICB0aHJvdyAiYWIiCisJICAgIFhsb29wIDgJCQkJIiBYOiAwCisJZWxzZWlmIGxvb3BzID09IDEKKwkgICAgWGxvb3AgMTYJCQkJIiBYOiAxNioxMDI0KjEwMjQKKwkgICAgdGhyb3cgImFiYyIKKwkgICAgWGxvb3AgMzIJCQkJIiBYOiAwCisJZW5kaWYKKyAgICBjYXRjaCAvYWJjLworCVhsb29wIDY0CQkJCSIgWDogNjQqMTAyNCoxMDI0CisgICAgY2F0Y2ggL2FiLworCVhsb29wIDEyOAkJCQkiIFg6IDEyOCoxMDI0CisgICAgY2F0Y2ggLy4qLworCVhsb29wIDI1NgkJCQkiIFg6IDI1NgorICAgIGNhdGNoIC9hLworCVhsb29wIDUxMgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKworICAgIGxldCBsb29wcyA9IGxvb3BzIC0gMQorICAgIFhsb29wTkVYVAorZW5kd2hpbGUKK1hwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAxMDczNzQxODI0CisKK3VubGV0IGxvb3BzCisKK1hjaGVjayAxMTU3NzYzMzI5CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA0NDogIE1pc3Npbmcgb3IgZW1wdHkgOmNhdGNoIHBhdHRlcm5zCQkJCSAgICB7e3sxCisiCisiCSAgICBBIG1pc3Npbmcgb3IgZW1wdHkgOmNhdGNoIHBhdHRlcm4gbWVhbnMgdGhlIHNhbWUgYXMgLy4qLywgdGhhdCBpcywKKyIJICAgIGNhdGNoZXMgZXZlcnl0aGluZy4gIFRvIGNhdGNoIG9ubHkgZW1wdHkgZXhjZXB0aW9ucywgL14kLyBtdXN0IGJlCisiCSAgICB1c2VkLiAgQSA6Y2F0Y2ggd2l0aCBtaXNzaW5nLCBlbXB0eSwgb3IgLy4qLyBhcmd1bWVudCBhbHNvIHdvcmtzCisiCSAgICB3aGVuIGZvbGxvd2VkIGJ5IGFub3RoZXIgY29tbWFuZCBzZXBhcmF0ZWQgYnkgYSBiYXIgb24gdGhlIHNhbWUKKyIJICAgIGxpbmUuICA6Y2F0Y2ggcGF0dGVybnMgY2Fubm90IGJlIHNwZWNpZmllZCBiZXR3ZWVuIHx8LiAgQnV0IG90aGVyCisiCSAgICBwYXR0ZXJuIHNlcGFyYXRvcnMgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAvLy4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCit0cnkKKyAgICB0cnkKKwlYcGF0aCAxCQkJCQkiIFg6IDEKKwl0aHJvdyAiIgorICAgIGNhdGNoIC9eJC8KKwlYcGF0aCAyCQkJCQkiIFg6IDIKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDQJCQkJCSIgWDogNAorCXRocm93ICIiCisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDgJCQkJCSIgWDogOAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggMTYJCQkJIiBYOiAxNgorCXRocm93ICIiCisgICAgY2F0Y2ggLy8KKwlYcGF0aCAzMgkJCQkiIFg6IDMyCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCA2NAkJCQkiIFg6IDY0CisJdGhyb3cgIiIKKyAgICBjYXRjaAorCVhwYXRoIDEyOAkJCQkiIFg6IDEyOAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggMjU2CQkJCSIgWDogMjU2CisJdGhyb3cgIm9vcHMiCisgICAgY2F0Y2ggL14kLworCVhwYXRoIDUxMgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMTAyNAkJCQkiIFg6IDEwMjQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJdGhyb3cgImFycmdoIgorICAgIGNhdGNoIC9eJC8KKwlYcGF0aCA0MDk2CQkJCSIgWDogMAorICAgIGNhdGNoIC8vCisJWHBhdGggODE5MgkJCQkiIFg6IDgxOTIKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMTYzODQKKwl0aHJvdyAiYnJyciIKKyAgICBjYXRjaCAvXiQvCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisgICAgY2F0Y2gKKwlYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisgICAgZW5kdHJ5CisKKyAgICB0cnkgfCBYcGF0aCAxMzEwNzIgfCB0aHJvdyAieCIgfCBjYXRjaCAvLiovIHwgWHBhdGggMjYyMTQ0IHwgZW5kdHJ5CisJCQkJCQkiIFg6IDEzMTA3MiArIDI2MjE0NAorCisgICAgdHJ5IHwgWHBhdGggNTI0Mjg4IHwgdGhyb3cgInkiIHwgY2F0Y2ggLy8gfCBYcGF0aCAxMDQ4NTc2IHwgZW5kdHJ5CisJCQkJCQkiIFg6IDUyNDI4OCArIDEwNDg1NzYKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgIiBFeHRyYSB0cnkgbGV2ZWw6ICBpZiAiOmNhdGNoIiB3aXRob3V0IGFyZ3VtZW50cyBiZWxvdyByYWlzZXMKKwkgICAgIiBhIHN5bnRheCBlcnJvciBiZWNhdXNlIGl0IG1pc2ludGVycHJldHMgdGhlICJYcGF0aCIgYXMgYSBwYXR0ZXJuLAorCSAgICAiIGxldCBpdCBiZSBjYXVnaHQgYnkgdGhlICI6Y2F0Y2ggLy4qLyIgYmVsb3cuCisJICAgIHRyeQorCQl0cnkgfCBYcGF0aCAyMDk3MTUyIHwgdGhyb3cgInoiIHwgY2F0Y2ggfCBYcGF0aCA0MTk0MzA0IHwgOgorCQllbmR0cnkJCQkJIiBYOiAyMDk3MTUyICsgNDE5NDMwNAorCSAgICBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKwlmaW5hbGx5CisJICAgIGlmICRWSU1OT0VSUlRIUk9XICYmIHY6ZXJybXNnICE9ICIiCisJCVhvdXQgdjplcnJtc2cKKwkgICAgZW5kaWYKKwkgICAgaWYgY2F1Z2h0IHx8ICRWSU1OT0VSUlRIUk9XICYmIHY6ZXJybXNnICE9ICIiCisJCVhwYXRoIDgzODg2MDgJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIGxldCBjb2xvZ25lID0gNDcxMQorICAgIHRyeQorCXRyeQorCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKwkgICAgdGhyb3cgInRocm93IGNvbG9nbmUiCisJIiBOZXh0IGxpbmVzIGNhdGNoZXMgYWxsIGFuZCB0aHJvd3MgNDcxMToKKwljYXRjaCB8dGhyb3cgY29sb2duZXwKKwkgICAgWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDAKKwllbmR0cnkKKyAgICBjYXRjaCAvNDcxMS8KKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKwl0aHJvdyAicGx1cyIKKyAgICBjYXRjaCArcGx1cysKKwlYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAyNjg0MzU0NTYKKyAgICBlbmR0cnkKKworICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDUzNjg3MDkxMgorY2F0Y2ggLy4qLworICAgIFhwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK3VubGV0ISBjYXVnaHQgY29sb2duZQorCitYY2hlY2sgMTAzMTc2MTQwNworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNDU6ICBDYXRjaGluZyBleGNlcHRpb25zIGZyb20gbmVzdGVkIDp0cnkgYmxvY2tzCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gOnRyeSBibG9ja3MgYXJlIG5lc3RlZCwgYW4gZXhjZXB0aW9uIGlzIGNhdWdodCBieSB0aGUgaW5uZXJtb3N0CisiCSAgICB0cnkgY29uZGl0aW9uYWwgdGhhdCBoYXMgYSBtYXRjaGluZyA6Y2F0Y2ggY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK1hsb29wSU5JVCAxIDEwMjQKK2xldCBsb29wcyA9IDMKK3doaWxlIGxvb3BzID4gMAorICAgIHRyeQorCXRyeQorCSAgICB0cnkKKwkJdHJ5CisJCSAgICBpZiBsb29wcyA9PSAzCisJCQlYbG9vcCAxCQkJIiBYOiAxCisJCQl0aHJvdyAiYSIKKwkJCVhsb29wIDIJCQkiIFg6IDAKKwkJICAgIGVsc2VpZiBsb29wcyA9PSAyCisJCQlYbG9vcCA0CQkJIiBYOiA0KjEwMjQKKwkJCXRocm93ICJhYiIKKwkJCVhsb29wIDgJCQkiIFg6IDAKKwkJICAgIGVsc2VpZiBsb29wcyA9PSAxCisJCQlYbG9vcCAxNgkJIiBYOiAxNioxMDI0KjEwMjQKKwkJCXRocm93ICJhYmMiCisJCQlYbG9vcCAzMgkJIiBYOiAwCisJCSAgICBlbmRpZgorCQljYXRjaCAvYWJjLworCQkgICAgWGxvb3AgNjQJCQkiIFg6IDY0KjEwMjQqMTAyNAorCQllbmR0cnkKKwkgICAgY2F0Y2ggL2FiLworCQlYbG9vcCAxMjgJCQkiIFg6IDEyOCoxMDI0CisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWGxvb3AgMjU2CQkJCSIgWDogMjU2CisJZW5kdHJ5CisgICAgY2F0Y2ggL2EvCisJWGxvb3AgNTEyCQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgbGV0IGxvb3BzID0gbG9vcHMgLSAxCisgICAgWGxvb3BORVhUCitlbmR3aGlsZQorWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKwordW5sZXQgbG9vcHMKKworWGNoZWNrIDExNTc3NjMzMjkKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDQ2OiAgRXhlY3V0aW5nIDpmaW5hbGx5IGFmdGVyIGEgOnRocm93IGluIG5lc3RlZCA6dHJ5CQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gd2l0aGluIG5lc3RlZCA6dHJ5IGJsb2NrcywgdGhlCisiCSAgICA6ZmluYWxseSBjbGF1c2VzIG9mIHRoZSBub24tY2F0Y2hpbmcgdHJ5IGNvbmRpdGlvbmFscyBzaG91bGQgYmUKKyIJICAgIGV4ZWN1dGVkIGJlZm9yZSB0aGUgbWF0Y2hpbmcgOmNhdGNoIG9mIHRoZSBuZXh0IHN1cnJvdW5kaW5nIDp0cnkKKyIJICAgIGdldHMgdGhlIGNvbnRyb2wuICBJZiB0aGlzIGFsc28gaGFzIGEgOmZpbmFsbHkgY2xhdXNlLCBpdCBpcworIgkgICAgZXhlY3V0ZWQgYWZ0ZXJ3YXJkcy4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgc3VtID0gMAorCit0cnkKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKKyAgICB0cnkKKwlYcGF0aCAyCQkJCQkiIFg6IDIKKwl0cnkKKwkgICAgWHBhdGggNAkJCQkiIFg6IDQKKwkgICAgdHJ5CisJCVhwYXRoIDgJCQkJIiBYOiA4CisJCXRocm93ICJBQkMiCisJCVhwYXRoIDE2CQkJIiBYOiAwCisJICAgIGNhdGNoIC94eXovCisJCVhwYXRoIDMyCQkJIiBYOiAwCisJICAgIGZpbmFsbHkKKwkJWHBhdGggNjQJCQkiIFg6IDY0CisJCWlmIHN1bSAhPSAwCisJCSAgICBYcGF0aCAxMjgJCQkiIFg6IDAKKwkJZW5kaWYKKwkJbGV0IHN1bSA9IHN1bSArIDEKKwkgICAgZW5kdHJ5CisJICAgIFhwYXRoIDI1NgkJCQkiIFg6IDAKKwljYXRjaCAvMTIzLworCSAgICBYcGF0aCA1MTIJCQkJIiBYOiAwCisJY2F0Y2ggLzMyMS8KKwkgICAgWHBhdGggMTAyNAkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJICAgIGlmIHN1bSAhPSAxCisJCVhwYXRoIDQwOTYJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgbGV0IHN1bSA9IHN1bSArIDIKKwllbmR0cnkKKwlYcGF0aCA4MTkyCQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJaWYgc3VtICE9IDMKKwkgICAgWHBhdGggMzI3NjgJCQkJIiBYOiAwCisJZW5kaWYKKwlsZXQgc3VtID0gc3VtICsgNAorICAgIGVuZHRyeQorICAgIFhwYXRoIDY1NTM2CQkJCQkiIFg6IDAKK2NhdGNoIC9BQkMvCisgICAgWHBhdGggMTMxMDcyCQkJCSIgWDogMTMxMDcyCisgICAgaWYgc3VtICE9IDcKKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICBsZXQgc3VtID0gc3VtICsgOAorZmluYWxseQorICAgIFhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorICAgIGlmIHN1bSAhPSAxNQorCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICBsZXQgc3VtID0gc3VtICsgMTYKK2VuZHRyeQorWHBhdGggNjU1MzYJCQkJCSIgWDogNjU1MzYKK2lmIHN1bSAhPSAzMQorICAgIFhwYXRoIDEzMTA3MgkJCQkiIFg6IDAKK2VuZGlmCisKK3VubGV0IHN1bQorCitYY2hlY2sgNzM5NDA3CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA0NzogIFRocm93aW5nIGV4Y2VwdGlvbnMgZnJvbSBhIDpjYXRjaCBjbGF1c2UJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gYSA6Y2F0Y2ggY2xhdXNlLCBpdCBzaG91bGQgbm90IGJlCisiCSAgICBjYXVnaHQgYnkgYSA6Y2F0Y2ggb2YgdGhlIHNhbWUgOnRyeSBjb25kaXRpb25hbC4gIEFmdGVyIGV4ZWN1dGluZworIgkgICAgdGhlIDpmaW5hbGx5IGNsYXVzZSAoaWYgcHJlc2VudCksIHN1cnJvdW5kaW5nIHRyeSBjb25kaXRpb25hbHMKKyIJICAgIHNob3VsZCBiZSBjaGVja2VkIGZvciBhIG1hdGNoaW5nIDpjYXRjaC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitYcGF0aCAxCQkJCQkJIiBYOiAxCit0cnkKKyAgICBYcGF0aCAyCQkJCQkiIFg6IDIKKyAgICB0cnkKKwlYcGF0aCA0CQkJCQkiIFg6IDQKKwl0cnkKKwkgICAgWHBhdGggOAkJCQkiIFg6IDgKKwkgICAgdGhyb3cgIngxIgorCSAgICBYcGF0aCAxNgkJCQkiIFg6IDAKKwljYXRjaCAveDEvCisJICAgIFhwYXRoIDMyCQkJCSIgWDogMzIKKwkgICAgdHJ5CisJCVhwYXRoIDY0CQkJIiBYOiA2NAorCQl0aHJvdyAieDIiCisJCVhwYXRoIDEyOAkJCSIgWDogMAorCSAgICBjYXRjaCAveDEvCisJCVhwYXRoIDI1NgkJCSIgWDogMAorCSAgICBjYXRjaCAveDIvCisJCVhwYXRoIDUxMgkJCSIgWDogNTEyCisJCXRyeQorCQkgICAgWHBhdGggMTAyNAkJCSIgWDogMTAyNAorCQkgICAgdGhyb3cgIngzIgorCQkgICAgWHBhdGggMjA0OAkJCSIgWDogMAorCQljYXRjaCAveDEvCisJCSAgICBYcGF0aCA0MDk2CQkJIiBYOiAwCisJCWNhdGNoIC94Mi8KKwkJICAgIFhwYXRoIDgxOTIJCQkiIFg6IDAKKwkJZmluYWxseQorCQkgICAgWHBhdGggMTYzODQJCQkiIFg6IDE2Mzg0CisJCWVuZHRyeQorCQlYcGF0aCAzMjc2OAkJCSIgWDogMAorCSAgICBjYXRjaCAveDMvCisJCVhwYXRoIDY1NTM2CQkJIiBYOiAwCisJICAgIGVuZHRyeQorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwljYXRjaCAveDEvCisJICAgIFhwYXRoIDI2MjE0NAkJCSIgWDogMAorCWNhdGNoIC94Mi8KKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiAwCisJY2F0Y2ggL3gzLworCSAgICBYcGF0aCAxMDQ4NTc2CQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAyMDk3MTUyCQkJIiBYOiAyMDk3MTUyCisJZW5kdHJ5CisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKKyAgICBjYXRjaCAveDEvCisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDAKKyAgICBjYXRjaCAveDIvCisJWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAwCisgICAgY2F0Y2ggL3gzLworCVhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMzM1NTQ0MzIKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CitjYXRjaCAvLiovCisgICAgWHBhdGggMTM0MjE3NzI4CQkJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorWHBhdGggMjY4NDM1NDU2CQkJCQkiIFg6IDI2ODQzNTQ1NgorCitYY2hlY2sgMzcxMjEzOTM1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA0ODogIFRocm93aW5nIGV4Y2VwdGlvbnMgZnJvbSBhIDpmaW5hbGx5IGNsYXVzZQkJCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBhIDpmaW5hbGx5IGNsYXVzZSwgaXQgc2hvdWxkIG5vdCBiZQorIgkgICAgY2F1Z2h0IGJ5IGEgOmNhdGNoIG9mIHRoZSBzYW1lIDp0cnkgY29uZGl0aW9uYWwuICBTdXJyb3VuZGluZyB0cnkKKyIJICAgIGNvbmRpdGlvbmFscyBzaG91bGQgYmUgY2hlY2tlZCBmb3IgYSBtYXRjaGluZyA6Y2F0Y2guICBBIHByZXZpb3VzbHkKKyIJICAgIHRocm93biBleGNlcHRpb24gaXMgZGlzY2FyZGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK3RyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDEJCQkJIiBYOiAxCisJY2F0Y2ggL3gxLworCSAgICBYcGF0aCAyCQkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggNAkJCQkiIFg6IDQKKwkgICAgdGhyb3cgIngxIgorCSAgICBYcGF0aCA4CQkJCSIgWDogMAorCWVuZHRyeQorCVhwYXRoIDE2CQkJCSIgWDogMAorICAgIGNhdGNoIC94MS8KKwlYcGF0aCAzMgkJCQkiIFg6IDMyCisgICAgZW5kdHJ5CisgICAgWHBhdGggNjQJCQkJCSIgWDogNjQKKworICAgIHRyeQorCXRyeQorCSAgICBYcGF0aCAxMjgJCQkJIiBYOiAxMjgKKwkgICAgdGhyb3cgIngyIgorCSAgICBYcGF0aCAyNTYJCQkJIiBYOiAwCisJY2F0Y2ggL3gyLworCSAgICBYcGF0aCA1MTIJCQkJIiBYOiA1MTIKKwljYXRjaCAveDMvCisJICAgIFhwYXRoIDEwMjQJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAyMDQ4CQkJCSIgWDogMjA0OAorCSAgICB0aHJvdyAieDMiCisJICAgIFhwYXRoIDQwOTYJCQkJIiBYOiAwCisJZW5kdHJ5CisJWHBhdGggODE5MgkJCQkiIFg6IDAKKyAgICBjYXRjaCAveDIvCisJWHBhdGggMTYzODQJCQkJIiBYOiAwCisgICAgY2F0Y2ggL3gzLworCVhwYXRoIDMyNzY4CQkJCSIgWDogMzI3NjgKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiA2NTUzNgorCisgICAgdHJ5CisJdHJ5CisJICAgIHRyeQorCQlYcGF0aCAxMzEwNzIJCQkiIFg6IDEzMTA3MgorCQl0aHJvdyAieDQiCisJCVhwYXRoIDI2MjE0NAkJCSIgWDogMAorCSAgICBjYXRjaCAveDUvCisJCVhwYXRoIDUyNDI4OAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCVhwYXRoIDEwNDg1NzYJCQkiIFg6IDEwNDg1NzYKKwkJdGhyb3cgIng1IgkiIGRpc2NhcmRzICJ4NCIKKwkJWHBhdGggMjA5NzE1MgkJCSIgWDogMAorCSAgICBlbmR0cnkKKwkgICAgWHBhdGggNDE5NDMwNAkJCSIgWDogMAorCWNhdGNoIC94NC8KKwkgICAgWHBhdGggODM4ODYwOAkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMTY3NzcyMTYJCQkiIFg6IDE2Nzc3MjE2CisJZW5kdHJ5CisJWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAwCisgICAgY2F0Y2ggL3g1LworCVhwYXRoIDY3MTA4ODY0CQkJCSIgWDogNjcxMDg4NjQKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKworY2F0Y2ggLy4qLworICAgIFhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitlbmR0cnkKK1hwYXRoIDUzNjg3MDkxMgkJCQkJIiBYOiA1MzY4NzA5MTIKKworWGNoZWNrIDc1NjI1NTQ2MQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNDk6ICBUaHJvd2luZyBleGNlcHRpb25zIGFjY3Jvc3MgZnVuY3Rpb25zCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93biBidXQgbm90IGNhdWdodCBpbnNpZGUgYSBmdW5jdGlvbiwgdGhlCisiCSAgICBjYWxsZXIgaXMgY2hlY2tlZCBmb3IgYSBtYXRjaGluZyA6Y2F0Y2ggY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBDKCkKKyAgICB0cnkKKwlYcGF0aCAxCQkJCQkiIFg6IDEKKwl0aHJvdyAiYXJyZ2giCisJWHBhdGggMgkJCQkJIiBYOiAwCisgICAgY2F0Y2ggL2FycmdoLworCVhwYXRoIDQJCQkJCSIgWDogNAorICAgIGVuZHRyeQorICAgIFhwYXRoIDgJCQkJCSIgWDogOAorZW5kZnVuY3Rpb24KKworWGxvb3BJTklUISAxNiAxNgorCitmdW5jdGlvbiEgVDEoKQorICAgIFhsb29wTkVYVAorICAgIHRyeQorCVhsb29wIDEJCQkJCSIgWDogMTYgKyAxNioxNgorCXRocm93ICJhcnJnaCIKKwlYbG9vcCAyCQkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWGxvb3AgNAkJCQkJIiBYOiA2NCArIDY0KjE2CisgICAgZW5kdHJ5CisgICAgWGxvb3AgOAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgVDIoKQorICAgIHRyeQorCVhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisJY2FsbCBUMSgpCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggMTYzODQJCQkJIiBYOiAxNjM4NAorICAgIGVuZHRyeQorICAgIFhwYXRoIDMyNzY4CQkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK3RyeQorICAgIFhwYXRoIDY1NTM2CQkJCQkiIFg6IDY1NTM2CisgICAgY2FsbCBDKCkJIiB0aHJvdyBhbmQgY2F0Y2gKKyAgICBYcGF0aCAxMzEwNzIJCQkJIiBYOiAxMzEwNzIKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCAyNjIxNDQJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK3RyeQorICAgIFhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorICAgIGNhbGwgVDEoKSAgIiB0aHJvdywgb25lIGxldmVsCisgICAgWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKK2NhdGNoIC9hcnJnaC8KKyAgICBYcGF0aCAyMDk3MTUyCQkJCSIgWDogMjA5NzE1MgorY2F0Y2ggLy4qLworICAgIFhwYXRoIDQxOTQzMDQJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK3RyeQorICAgIFhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisgICAgY2FsbCBUMigpCSIgdGhyb3csIHR3byBsZXZlbHMKKyAgICBYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKK2NhdGNoIC9hcnJnaC8KKyAgICBYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDMzNTU0NDMyCitjYXRjaCAvLiovCisgICAgWHBhdGggNjcxMDg4NjQJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CitYcGF0aCAxMzQyMTc3MjgJCQkJCSIgWDogMTM0MjE3NzI4CisKK1hjaGVjayAxNzkwMDA2NjkKKworIiBMZWF2ZSBDLCBUMSwgYW5kIFQyIGZvciBleGVjdXRpb24gYXMgc2NyaXB0cyBpbiB0aGUgbmV4dCB0ZXN0LgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNTA6ICBUaHJvd2luZyBleGNlcHRpb25zIGFjY3Jvc3Mgc2NyaXB0IGZpbGVzCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93biBidXQgbm90IGNhdWdodCBpbnNpZGUgYSBzY3JpcHQgZmlsZSwKKyIJICAgIHRoZSBzb3VyY2luZyBzY3JpcHQgb3IgZnVuY3Rpb24gaXMgY2hlY2tlZCBmb3IgYSBtYXRjaGluZyA6Y2F0Y2gKKyIJICAgIGNsYXVzZS4KKyIKKyIJICAgIFRoaXMgdGVzdCBleGVjdXRlcyB0aGUgYm9kaWVzIG9mIHRoZSBmdW5jdGlvbnMgQywgVDEsIGFuZCBUMiBmcm9tCisiCSAgICB0aGUgcHJldmlvdXMgdGVzdCBhcyBzY3JpcHQgZmlsZXMgKDpyZXR1cm4gcmVwbGFjZWQgYnkgOmZpbmlzaCkuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworbGV0IHNjcmlwdEMgPSBNYWtlU2NyaXB0KCJDIikJCQkiIFg6IDEgKyA0ICsgOAorZGVsZnVuY3Rpb24gQworCitYbG9vcElOSVQhIDE2IDE2CisKK2xldCBzY3JpcHRUMSA9IE1ha2VTY3JpcHQoIlQxIikJCQkiIFg6IDE2ICsgNjQgKyAxNioxNiArIDY0KjE2CitkZWxmdW5jdGlvbiBUMQorCitsZXQgc2NyaXB0VDIgPSBNYWtlU2NyaXB0KCJUMiIsIHNjcmlwdFQxKQkiIFg6IDQwOTYgKyAxNjM4NAorZGVsZnVuY3Rpb24gVDIKKworZnVuY3Rpb24hIEYoKQorICAgIHRyeQorCVhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwlleGVjICJzb3VyY2UiIGc6c2NyaXB0QworCVhwYXRoIDEzMTA3MgkJCQkiIFg6IDEzMTA3MgorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNTI0Mjg4CQkJCSIgWDogNTI0Mjg4CisJZXhlYyAic291cmNlIiBnOnNjcmlwdFQxCisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvYXJyZ2gvCisJWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CitlbmRmdW5jdGlvbgorCit0cnkKKyAgICBYcGF0aCA4Mzg4NjA4CQkJCSIgWDogODM4ODYwOAorICAgIGNhbGwgRigpCisgICAgWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAxNjc3NzIxNgorICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0VDIKKyAgICBYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDAKK2NhdGNoIC9hcnJnaC8KKyAgICBYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CitjYXRjaCAvLiovCisgICAgWHBhdGggMTM0MjE3NzI4CQkJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorWHBhdGggMjY4NDM1NDU2CQkJCQkiIFg6IDI2ODQzNTQ1NgorCitjYWxsIGRlbGV0ZShzY3JpcHRDKQorY2FsbCBkZWxldGUoc2NyaXB0VDEpCitjYWxsIGRlbGV0ZShzY3JpcHRUMikKK3VubGV0IHNjcmlwdEMgc2NyaXB0VDEgc2NyaXB0VDIKK2RlbGZ1bmN0aW9uIEYKKworWGNoZWNrIDM2MzU1MDA0NQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNTE6ICBUaHJvd2luZyBleGNlcHRpb25zIGFjY3Jvc3MgOmV4ZWN1dGUgYW5kIHVzZXIgY29tbWFuZHMJICAgIHt7ezEKKyIKKyIJICAgIEEgOnRocm93IGNvbW1hbmQgbWF5IGJlIGV4ZWN1dGVkIHVuZGVyIGFuICI6ZXhlY3V0ZSIgb3IgZnJvbQorIgkgICAgYSB1c2VyIGNvbW1hbmQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworY29tbWFuZCEgLW5hcmdzPT8gVEhST1cxICAgIHRocm93IDxhcmdzPiB8IHRocm93IDEKK2NvbW1hbmQhIC1uYXJncz0/IFRIUk9XMiAgICB0cnkgfCB0aHJvdyA8YXJncz4gfCBlbmR0cnkgfCB0aHJvdyAyCitjb21tYW5kISAtbmFyZ3M9PyBUSFJPVzMgICAgdHJ5IHwgdGhyb3cgMyB8IGNhdGNoIC8zLyB8IHRocm93IDxhcmdzPiB8IGVuZHRyeQorY29tbWFuZCEgLW5hcmdzPT8gVEhST1c0ICAgIHRyeSB8IHRocm93IDQgfCBmaW5hbGx5ICAgfCB0aHJvdyA8YXJncz4gfCBlbmR0cnkKKwordHJ5CisKKyAgICB0cnkKKwl0cnkKKwkgICAgWHBhdGggMQkJCQkiIFg6IDEKKwkgICAgVEhST1cxICJBIgorCWNhdGNoIC9BLworCSAgICBYcGF0aCAyCQkJCSIgWDogMgorCWVuZHRyeQorICAgIGNhdGNoIC8xLworCVhwYXRoIDQJCQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDgJCQkJIiBYOiA4CisJICAgIFRIUk9XMiAiQiIKKwljYXRjaCAvQi8KKwkgICAgWHBhdGggMTYJCQkJIiBYOiAxNgorCWVuZHRyeQorICAgIGNhdGNoIC8yLworCVhwYXRoIDMyCQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDY0CQkJCSIgWDogNjQKKwkgICAgVEhST1czICJDIgorCWNhdGNoIC9DLworCSAgICBYcGF0aCAxMjgJCQkJIiBYOiAxMjgKKwllbmR0cnkKKyAgICBjYXRjaCAvMy8KKwlYcGF0aCAyNTYJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwl0cnkKKwkgICAgWHBhdGggNTEyCQkJCSIgWDogNTEyCisJICAgIFRIUk9XNCAiRCIKKwljYXRjaCAvRC8KKwkgICAgWHBhdGggMTAyNAkJCQkiIFg6IDEwMjQKKwllbmR0cnkKKyAgICBjYXRjaCAvNC8KKwlYcGF0aCAyMDQ4CQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisJICAgIGV4ZWN1dGUgJ3Rocm93ICJFIiB8IHRocm93IDUnCisJY2F0Y2ggL0UvCisJICAgIFhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJZW5kdHJ5CisgICAgY2F0Y2ggLzUvCisJWHBhdGggMTYzODQJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwl0cnkKKwkgICAgWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorCSAgICBleGVjdXRlICd0cnkgfCB0aHJvdyAiRiIgfCBlbmR0cnkgfCB0aHJvdyA2JworCWNhdGNoIC9GLworCSAgICBYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJZW5kdHJ5CisgICAgY2F0Y2ggLzYvCisJWHBhdGggMTMxMDcyCQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDI2MjE0NAkJCSIgWDogMjYyMTQ0CisJICAgIGV4ZWN1dGUndHJ5IHwgdGhyb3cgNyB8IGNhdGNoIC83LyB8IHRocm93ICJHIiB8IGVuZHRyeScKKwljYXRjaCAvRy8KKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiA1MjQyODgKKwllbmR0cnkKKyAgICBjYXRjaCAvNy8KKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDIwOTcxNTIJCQkiIFg6IDIwOTcxNTIKKwkgICAgZXhlY3V0ZSAndHJ5IHwgdGhyb3cgOCB8IGZpbmFsbHkgICB8IHRocm93ICJIIiB8IGVuZHRyeScKKwljYXRjaCAvSC8KKwkgICAgWHBhdGggNDE5NDMwNAkJCSIgWDogNDE5NDMwNAorCWVuZHRyeQorICAgIGNhdGNoIC84LworCVhwYXRoIDgzODg2MDgJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitlbmR0cnkKKworWHBhdGggMzM1NTQ0MzIJCQkJCSIgWDogMzM1NTQ0MzIKKworZGVsY29tbWFuZCBUSFJPVzEKK2RlbGNvbW1hbmQgVEhST1cyCitkZWxjb21tYW5kIFRIUk9XMworZGVsY29tbWFuZCBUSFJPVzQKKworWGNoZWNrIDQwNzQ0NjY3CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA1MjogIFVuY2F1Z2h0IGV4Y2VwdGlvbnMJCQkJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGJ1dCBub3QgY2F1Z2h0LCBhbiBlcnJvciBtZXNzYWdlIGlzCisiCSAgICBkaXNwbGF5ZWQgd2hlbiB0aGUgc2NyaXB0IGlzIHRlcm1pbmF0ZWQuICBJbiBjYXNlIG9mIGFuIGludGVycnVwdAorIgkgICAgb3IgZXJyb3IgZXhjZXB0aW9uLCB0aGUgbm9ybWFsIGludGVycnVwdCBvciBlcnJvciBtZXNzYWdlKHMpIGFyZQorIgkgICAgZGlzcGxheWVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2xldCBtc2dmaWxlID0gdGVtcG5hbWUoKQorCitmdW5jdGlvbiEgTUVTU0FHRVMoLi4uKQorICAgIHRyeQorCWV4ZWMgImVkaXQiIGc6bXNnZmlsZQorICAgIGNhdGNoIC9eVmltKGVkaXQpOi8KKwlyZXR1cm4gMAorICAgIGVuZHRyeQorCisgICAgbGV0IGVuZ2xpc2ggPSB2OmxhbmcgPT0gIkMiIHx8IHY6bGFuZyA9fiAnXltFZV1uJworICAgIGxldCBtYXRjaCA9IDEKKyAgICBub3JtIGdnCisKKyAgICBsZXQgbnVtID0gYTowIC8gMgorICAgIGxldCBjbnQgPSAxCisgICAgd2hpbGUgY250IDw9IG51bQorCWxldCBlbnIgPSBhOnsyKmNudCAtIDF9CisJbGV0IGVtc2c9IGE6ezIqY250fQorCWxldCBjbnQgPSBjbnQgKyAxCisKKwlpZiBlbnIgPT0gIiIKKwkgICAgWG91dCAiVE9ETzogQWRkIG1lc3NhZ2UgbnVtYmVyIGZvcjoiIGVtc2cKKwllbHNlaWYgZW5yID09ICJJTlQiCisJICAgIGxldCBlbnIgPSAiIgorCWVuZGlmCisJaWYgZW5yID09ICIiICYmICFlbmdsaXNoCisJICAgIGNvbnRpbnVlCisJZW5kaWYKKwlsZXQgcGF0dGVybiA9IChlbnIgIT0gIiIpID8gZW5yIC4gJzouKicgOiAnJworCWlmIGVuZ2xpc2gKKwkgICAgbGV0IHBhdHRlcm4gPSBwYXR0ZXJuIC4gZW1zZworCWVuZGlmCisJaWYgIXNlYXJjaChwYXR0ZXJuLCAiVyIpCisJICAgIGxldCBtYXRjaCA9IDAKKwkgICAgWG91dCAiTm8gbWF0Y2ggZm9yOiIgcGF0dGVybgorCWVuZGlmCisJbm9ybSAkCisgICAgZW5kd2hpbGUKKworICAgIGJ3aXBlb3V0IQorICAgIHJldHVybiBtYXRjaAorZW5kZnVuY3Rpb24KKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKKyAgICB0aHJvdyAiYXJyZ2giCitlbmRpZgorCitYcGF0aCAyCQkJCQkJIiBYOiAyCitpZiAhTUVTU0FHRVMoJ0U2MDUnLCAiRXhjZXB0aW9uIG5vdCBjYXVnaHQiKQorICAgIFhwYXRoIDQJCQkJCSIgWDogMAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyAgICB0cnkKKwlYcGF0aCA4CQkJCQkiIFg6IDgKKwl0aHJvdyAib29wcyIKKyAgICBjYXRjaCAvYXJyZ2gvCisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisgICAgWHBhdGggMzIJCQkJCSIgWDogMAorZW5kaWYKKworWHBhdGggNjQJCQkJCSIgWDogNjQKK2lmICFNRVNTQUdFUygnRTYwNScsICJFeGNlcHRpb24gbm90IGNhdWdodCIpCisgICAgWHBhdGggMTI4CQkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisgICAgZnVuY3Rpb24hIFQoKQorCXRocm93ICJicnJyIgorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB0cnkKKwlYcGF0aCAyNTYJCQkJIiBYOiAyNTYKKwl0aHJvdyAiYXJyZ2giCisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCWNhbGwgVCgpCisgICAgZW5kdHJ5CisgICAgWHBhdGggMTAyNAkJCQkJIiBYOiAwCitlbmRpZgorCitYcGF0aCAyMDQ4CQkJCQkiIFg6IDIwNDgKK2lmICFNRVNTQUdFUygnRTYwNScsICJFeGNlcHRpb24gbm90IGNhdWdodCIpCisgICAgWHBhdGggNDA5NgkJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorICAgIHRyeQorCVhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJdGhyb3cgImFycmdoIgorICAgIGZpbmFsbHkKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJdGhyb3cgImJycnIiCisgICAgZW5kdHJ5CisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMAorZW5kaWYKKworWHBhdGggNjU1MzYJCQkJCSIgWDogNjU1MzYKK2lmICFNRVNTQUdFUygnRTYwNScsICJFeGNlcHRpb24gbm90IGNhdWdodCIpCisgICAgWHBhdGggMTMxMDcyCQkJCSIgWDogMAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyAgICB0cnkKKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAyNjIxNDQKKwkiSU5URVJSVVBUCisgICAgZW5kdHJ5CisgICAgWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorZW5kaWYKKworWHBhdGggMTA0ODU3NgkJCQkJIiBYOiAxMDQ4NTc2CitpZiAhTUVTU0FHRVMoJ0lOVCcsICJJbnRlcnJ1cHRlZCIpCisgICAgWHBhdGggMjA5NzE1MgkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisgICAgdHJ5CisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDQxOTQzMDQKKwlsZXQgeCA9IG5vdmFyCSIgZXJyb3IgRTEyMS9FMTU7IGV4Y2VwdGlvbjogRTEyMQorICAgIGNhdGNoIC9FMTU6LwkiIHNob3VsZCBub3QgY2F0Y2gKKwlYcGF0aCA4Mzg4NjA4CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMAorZW5kaWYKKworWHBhdGggMzM1NTQ0MzIJCQkJCSIgWDogMzM1NTQ0MzIKK2lmICFNRVNTQUdFUygnRTEyMScsICJVbmRlZmluZWQgdmFyaWFibGUiLCAnRTE1JywgIkludmFsaWQgZXhwcmVzc2lvbiIpCisgICAgWHBhdGggNjcxMDg4NjQJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorICAgIHRyeQorCVhwYXRoIDEzNDIxNzcyOAkJCQkiIFg6IDEzNDIxNzcyOAorIgl1bmxldCBub3ZhciAjCSIgZXJyb3IgRTEwOC9FNDg4OyBleGNlcHRpb246IEU0ODgKKyAgICBjYXRjaCAvRTEwODovCSIgc2hvdWxkIG5vdCBjYXRjaAorCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCitlbmRpZgorCitYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMTA3Mzc0MTgyNAoraWYgIU1FU1NBR0VTKCdFMTA4JywgIk5vIHN1Y2ggdmFyaWFibGUiLCAnRTQ4OCcsICJUcmFpbGluZyBjaGFyYWN0ZXJzIikKKyAgICAiIFRoZSBYcGF0aCBjb21tYW5kIGRvZXMgbm90IGFjY2VwdCAyXjMxIChuZWdhdGl2ZSk7IGFkZCBleHBsaWNpdGx5OgorICAgIGxldCBYcGF0aCA9IFhwYXRoICsgMjE0NzQ4MzY0OAkJIiBYOiAwCitlbmRpZgorCitjYWxsIGRlbGV0ZShtc2dmaWxlKQordW5sZXQgbXNnZmlsZQorCitYY2hlY2sgMTI0NzExMjAxMQorCisiIExlYXZlIE1FU1NBR0VTKCkgZm9yIHRoZSBuZXh0IHRlc3RzLgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNTM6ICBOZXN0aW5nIGVycm9yczogOmVuZGlmLzplbHNlLzplbHNlaWYJCQkgICAge3t7MQorIgorIgkgICAgRm9yIG5lc3RpbmcgZXJyb3JzIG9mIDppZiBjb25kaXRpb25hbHMgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZXMKKyIJICAgIHNob3VsZCBiZSBnaXZlbi4KKyIKKyIJICAgIFRoaXMgdGVzdCByZXVzZXMgdGhlIGZ1bmN0aW9uIE1FU1NBR0VTKCkgZnJvbSB0aGUgcHJldmlvdXMgdGVzdC4KKyIJICAgIFRoaXMgZnVuY3Rpb25zIGNoZWNrcyB0aGUgbWVzc2FnZXMgaW4gZzptc2dmaWxlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2xldCBtc2dmaWxlID0gdGVtcG5hbWUoKQorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIGVuZGlmCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODAnLCAiOmVuZGlmIHdpdGhvdXQgOmlmIikKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICBlbmRpZgorIiAgIGVuZHdoaWxlCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODAnLCAiOmVuZGlmIHdpdGhvdXQgOmlmIikKKyAgICBYcGF0aCAyCQkJCQkiIFg6IDIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgdHJ5CisiICAgZmluYWxseQorIiAgICAgICBlbmRpZgorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTgwJywgIjplbmRpZiB3aXRob3V0IDppZiIpCisgICAgWHBhdGggNAkJCQkJIiBYOiA0CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICBlbmRpZgorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTgwJywgIjplbmRpZiB3aXRob3V0IDppZiIpCisgICAgWHBhdGggOAkJCQkJIiBYOiA4CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICB0aHJvdyAiYSIKKyIgICBjYXRjaCAvYS8KKyIgICAgICAgZW5kaWYKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MCcsICI6ZW5kaWYgd2l0aG91dCA6aWYiKQorICAgIFhwYXRoIDE2CQkJCQkiIFg6IDE2CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIGVsc2UKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MScsICI6ZWxzZSB3aXRob3V0IDppZiIpCisgICAgWHBhdGggMzIJCQkJCSIgWDogMzIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICBlbHNlCisiICAgZW5kd2hpbGUKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MScsICI6ZWxzZSB3aXRob3V0IDppZiIpCisgICAgWHBhdGggNjQJCQkJCSIgWDogNjQKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgdHJ5CisiICAgZmluYWxseQorIiAgICAgICBlbHNlCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODEnLCAiOmVsc2Ugd2l0aG91dCA6aWYiKQorICAgIFhwYXRoIDEyOAkJCQkJIiBYOiAxMjgKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgdHJ5CisiICAgICAgIGVsc2UKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MScsICI6ZWxzZSB3aXRob3V0IDppZiIpCisgICAgWHBhdGggMjU2CQkJCQkiIFg6IDI1NgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgdGhyb3cgImEiCisiICAgY2F0Y2ggL2EvCisiICAgICAgIGVsc2UKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MScsICI6ZWxzZSB3aXRob3V0IDppZiIpCisgICAgWHBhdGggNTEyCQkJCQkiIFg6IDUxMgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICBlbHNlaWYKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MicsICI6ZWxzZWlmIHdpdGhvdXQgOmlmIikKKyAgICBYcGF0aCAxMDI0CQkJCQkiIFg6IDEwMjQKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICBlbHNlaWYKKyIgICBlbmR3aGlsZQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTgyJywgIjplbHNlaWYgd2l0aG91dCA6aWYiKQorICAgIFhwYXRoIDIwNDgJCQkJCSIgWDogMjA0OAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICBmaW5hbGx5CisiICAgICAgIGVsc2VpZgorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTgyJywgIjplbHNlaWYgd2l0aG91dCA6aWYiKQorICAgIFhwYXRoIDQwOTYJCQkJCSIgWDogNDA5NgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgZWxzZWlmCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODInLCAiOmVsc2VpZiB3aXRob3V0IDppZiIpCisgICAgWHBhdGggODE5MgkJCQkJIiBYOiA4MTkyCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICB0aHJvdyAiYSIKKyIgICBjYXRjaCAvYS8KKyIgICAgICAgZWxzZWlmCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODInLCAiOmVsc2VpZiB3aXRob3V0IDppZiIpCisgICAgWHBhdGggMTYzODQJCQkJCSIgWDogMTYzODQKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgaWYgMQorIiAgIGVsc2UKKyIgICBlbHNlCisiICAgZW5kaWYKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MycsICJtdWx0aXBsZSA6ZWxzZSIpCisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgaWYgMQorIiAgIGVsc2UKKyIgICBlbHNlaWYgMQorIiAgIGVuZGlmCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODQnLCAiOmVsc2VpZiBhZnRlciA6ZWxzZSIpCisgICAgWHBhdGggNjU1MzYJCQkJCSIgWDogNjU1MzYKK2VuZGlmCisKK2NhbGwgZGVsZXRlKG1zZ2ZpbGUpCit1bmxldCBtc2dmaWxlCisKK1hjaGVjayAxMzEwNzEKKworIiBMZWF2ZSBNRVNTQUdFUygpIGZvciB0aGUgbmV4dCB0ZXN0LgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNTQ6ICBOZXN0aW5nIGVycm9yczogOndoaWxlLzplbmR3aGlsZQkJCQkgICAge3t7MQorIgorIgkgICAgRm9yIG5lc3RpbmcgZXJyb3JzIG9mIDp3aGlsZSBjb25kaXRpb25hbHMgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZXMKKyIJICAgIHNob3VsZCBiZSBnaXZlbi4KKyIKKyIJICAgIFRoaXMgdGVzdCByZXVzZXMgdGhlIGZ1bmN0aW9uIE1FU1NBR0VTKCkgZnJvbSB0aGUgcHJldmlvdXMgdGVzdC4KKyIJICAgIFRoaXMgZnVuY3Rpb25zIGNoZWNrcyB0aGUgbWVzc2FnZXMgaW4gZzptc2dmaWxlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2xldCBtc2dmaWxlID0gdGVtcG5hbWUoKQorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIGVuZHdoaWxlCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODgnLCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgaWYgMQorIiAgICAgICBlbmR3aGlsZQorIiAgIGVuZGlmCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODgnLCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAyCQkJCQkiIFg6IDIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICBpZiAxCisiICAgZW5kd2hpbGUKK2VuZGlmCitpZiBNRVNTQUdFUygnRTE3MScsICJNaXNzaW5nIDplbmRpZiIpCisgICAgWHBhdGggNAkJCQkJIiBYOiA0CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgIGZpbmFsbHkKKyIgICAgICAgZW5kd2hpbGUKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4OCcsICI6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiKQorICAgIFhwYXRoIDgJCQkJCSIgWDogOAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB3aGlsZSAxCisiICAgICAgIHRyeQorIiAgICAgICBmaW5hbGx5CisiICAgZW5kd2hpbGUKK2VuZGlmCitpZiBNRVNTQUdFUygnRTYwMCcsICJNaXNzaW5nIDplbmR0cnkiKQorICAgIFhwYXRoIDE2CQkJCQkiIFg6IDE2CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHdoaWxlIDEKKyIgICAgICAgaWYgMQorIgkgICAgdHJ5CisiCSAgICBmaW5hbGx5CisiICAgZW5kd2hpbGUKK2VuZGlmCitpZiBNRVNTQUdFUygnRTYwMCcsICJNaXNzaW5nIDplbmR0cnkiKQorICAgIFhwYXRoIDMyCQkJCQkiIFg6IDMyCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHdoaWxlIDEKKyIgICAgICAgdHJ5CisiICAgICAgIGZpbmFsbHkKKyIJICAgIGlmIDEKKyIgICBlbmR3aGlsZQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFMTcxJywgIk1pc3NpbmcgOmVuZGlmIikKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiA2NAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgZW5kd2hpbGUKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4OCcsICI6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiKQorICAgIFhwYXRoIDEyOAkJCQkJIiBYOiAxMjgKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICB0cnkKKyIJICAgIGVuZHdoaWxlCisiICAgICAgIGVuZHRyeQorIiAgIGVuZHdoaWxlCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODgnLCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAyNTYJCQkJCSIgWDogMjU2CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICB0aHJvdyAiYSIKKyIgICBjYXRjaCAvYS8KKyIgICAgICAgZW5kd2hpbGUKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4OCcsICI6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiKQorICAgIFhwYXRoIDUxMgkJCQkJIiBYOiA1MTIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICB0cnkKKyIJICAgIHRocm93ICJhIgorIgljYXRjaCAvYS8KKyIJICAgIGVuZHdoaWxlCisiICAgICAgIGVuZHRyeQorIiAgIGVuZHdoaWxlCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODgnLCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAxMDI0CQkJCQkiIFg6IDEwMjQKK2VuZGlmCisKKworY2FsbCBkZWxldGUobXNnZmlsZSkKK3VubGV0IG1zZ2ZpbGUKKworWGNoZWNrIDIwNDcKKworIiBMZWF2ZSBNRVNTQUdFUygpIGZvciB0aGUgbmV4dCB0ZXN0LgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNTU6ICBOZXN0aW5nIGVycm9yczogOmNvbnRpbnVlLzpicmVhawkJCQkgICAge3t7MQorIgorIgkgICAgRm9yIG5lc3RpbmcgZXJyb3JzIG9mIDpjb250aW51ZSBhbmQgOmJyZWFrIGNvbW1hbmRzIHRoZSBjb3JyZWN0CisiCSAgICBlcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgZ2l2ZW4uCisiCisiCSAgICBUaGlzIHRlc3QgcmV1c2VzIHRoZSBmdW5jdGlvbiBNRVNTQUdFUygpIGZyb20gdGhlIHByZXZpb3VzIHRlc3QuCisiCSAgICBUaGlzIGZ1bmN0aW9ucyBjaGVja3MgdGhlIG1lc3NhZ2VzIGluIGc6bXNnZmlsZS4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgbXNnZmlsZSA9IHRlbXBuYW1lKCkKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICBjb250aW51ZQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTg2JywgIjpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIpCisgICAgWHBhdGggMQkJCQkJIiBYOiAxCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIGlmIDEKKyIgICAgICAgY29udGludWUKKyIgICBlbmRpZgorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTg2JywgIjpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIpCisgICAgWHBhdGggMgkJCQkJIiBYOiAyCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgIGZpbmFsbHkKKyIgICAgICAgY29udGludWUKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4NicsICI6Y29udGludWUgd2l0aG91dCA6d2hpbGUiKQorICAgIFhwYXRoIDQJCQkJCSIgWDogNAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgY29udGludWUKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4NicsICI6Y29udGludWUgd2l0aG91dCA6d2hpbGUiKQorICAgIFhwYXRoIDgJCQkJCSIgWDogOAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgdGhyb3cgImEiCisiICAgY2F0Y2ggL2EvCisiICAgICAgIGNvbnRpbnVlCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODYnLCAiOmNvbnRpbnVlIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAxNgkJCQkJIiBYOiAxNgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICBicmVhaworZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTg3JywgIjpicmVhayB3aXRob3V0IDp3aGlsZSIpCisgICAgWHBhdGggMzIJCQkJCSIgWDogMzIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgaWYgMQorIiAgICAgICBicmVhaworIiAgIGVuZGlmCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODcnLCAiOmJyZWFrIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiA2NAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICBmaW5hbGx5CisiICAgICAgIGJyZWFrCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODcnLCAiOmJyZWFrIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMTI4CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICBicmVhaworIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTg3JywgIjpicmVhayB3aXRob3V0IDp3aGlsZSIpCisgICAgWHBhdGggMjU2CQkJCQkiIFg6IDI1NgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgdGhyb3cgImEiCisiICAgY2F0Y2ggL2EvCisiICAgICAgIGJyZWFrCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODcnLCAiOmJyZWFrIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCA1MTIJCQkJCSIgWDogNTEyCitlbmRpZgorCitjYWxsIGRlbGV0ZShtc2dmaWxlKQordW5sZXQgbXNnZmlsZQorCitYY2hlY2sgMTAyMworCisiIExlYXZlIE1FU1NBR0VTKCkgZm9yIHRoZSBuZXh0IHRlc3QuCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA1NjogIE5lc3RpbmcgZXJyb3JzOiA6ZW5kdHJ5CQkJCQkgICAge3t7MQorIgorIgkgICAgRm9yIG5lc3RpbmcgZXJyb3JzIG9mIDp0cnkgY29uZGl0aW9uYWxzIHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2VzCisiCSAgICBzaG91bGQgYmUgZ2l2ZW4uCisiCisiCSAgICBUaGlzIHRlc3QgcmV1c2VzIHRoZSBmdW5jdGlvbiBNRVNTQUdFUygpIGZyb20gdGhlIHByZXZpb3VzIHRlc3QuCisiCSAgICBUaGlzIGZ1bmN0aW9ucyBjaGVja3MgdGhlIG1lc3NhZ2VzIGluIGc6bXNnZmlsZS4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgbXNnZmlsZSA9IHRlbXBuYW1lKCkKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTYwMicsICI6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIpCisgICAgWHBhdGggMQkJCQkJIiBYOiAxCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIGlmIDEKKyIgICAgICAgZW5kdHJ5CisiICAgZW5kaWYKK2VuZGlmCitpZiBNRVNTQUdFUygnRTYwMicsICI6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIpCisgICAgWHBhdGggMgkJCQkJIiBYOiAyCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHdoaWxlIDEKKyIgICAgICAgZW5kdHJ5CisiICAgZW5kd2hpbGUKK2VuZGlmCitpZiBNRVNTQUdFUygnRTYwMicsICI6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIpCisgICAgWHBhdGggNAkJCQkJIiBYOiA0CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICBpZiAxCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0UxNzEnLCAiTWlzc2luZyA6ZW5kaWYiKQorICAgIFhwYXRoIDgJCQkJCSIgWDogOAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgd2hpbGUgMQorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFMTcwJywgIk1pc3NpbmcgOmVuZHdoaWxlIikKKyAgICBYcGF0aCAxNgkJCQkJIiBYOiAxNgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICBmaW5hbGx5CisiICAgICAgIGlmIDEKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTE3MScsICJNaXNzaW5nIDplbmRpZiIpCisgICAgWHBhdGggMzIJCQkJCSIgWDogMzIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgdHJ5CisiICAgZmluYWxseQorIiAgICAgICB3aGlsZSAxCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0UxNzAnLCAiTWlzc2luZyA6ZW5kd2hpbGUiKQorICAgIFhwYXRoIDY0CQkJCQkiIFg6IDY0CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICB0aHJvdyAiYSIKKyIgICBjYXRjaCAvYS8KKyIgICAgICAgaWYgMQorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFMTcxJywgIk1pc3NpbmcgOmVuZGlmIikKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMTI4CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICB0aHJvdyAiYSIKKyIgICBjYXRjaCAvYS8KKyIgICAgICAgd2hpbGUgMQorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFMTcwJywgIk1pc3NpbmcgOmVuZHdoaWxlIikKKyAgICBYcGF0aCAyNTYJCQkJCSIgWDogMjU2CitlbmRpZgorCitjYWxsIGRlbGV0ZShtc2dmaWxlKQordW5sZXQgbXNnZmlsZQorCitkZWxmdW5jdGlvbiBNRVNTQUdFUworCitYY2hlY2sgNTExCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA1NzogIHY6ZXhjZXB0aW9uIGFuZCB2OnRocm93cG9pbnQgZm9yIHVzZXIgZXhjZXB0aW9ucwkJICAgIHt7ezEKKyIKKyIJICAgIHY6ZXhjZXB0aW9uIGV2YWx1YXRlcyB0byB0aGUgdmFsdWUgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBjYXVnaHQKKyIJICAgIG1vc3QgcmVjZW50bHkgYW5kIGlzIG5vdCBmaW5pc2hlZC4gIChBIGNhdWdodCBleGNlcHRpb24gaXMgZmluaXNoZWQKKyIJICAgIHdoZW4gdGhlIG5leHQgIjpjYXRjaCIsICI6ZmluYWxseSIsIG9yICI6ZW5kdHJ5IiBpcyByZWFjaGVkLikKKyIJICAgIHY6dGhyb3dwb2ludCBldmFsdWF0ZXMgdG8gdGhlIHNjcmlwdC9mdW5jdGlvbiBuYW1lIGFuZCBsaW5lIG51bWJlcgorIgkgICAgd2hlcmUgdGhhdCBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBGdW5jRXhjZXB0aW9uKCkKKyAgICBsZXQgZzpleGNlcHRpb24gPSB2OmV4Y2VwdGlvbgorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEZ1bmNUaHJvd3BvaW50KCkKKyAgICBsZXQgZzp0aHJvd3BvaW50ID0gdjp0aHJvd3BvaW50CitlbmRmdW5jdGlvbgorCitsZXQgc2NyaXB0RXhjZXB0aW9uICA9IE1ha2VTY3JpcHQoIkZ1bmNFeGNlcHRpb24iKQorbGV0IHNjcmlwdFRocm93UG9pbnQgPSBNYWtlU2NyaXB0KCJGdW5jVGhyb3dwb2ludCIpCisKK2NvbW1hbmQhIENtZEV4Y2VwdGlvbiAgbGV0IGc6ZXhjZXB0aW9uICA9IHY6ZXhjZXB0aW9uCitjb21tYW5kISBDbWRUaHJvd3BvaW50IGxldCBnOnRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKworWGxvb3BJTklUISAxIDIKKworZnVuY3Rpb24hIENIRUNLKG4sIGV4Y2VwdGlvbiwgdGhyb3duYW1lLCB0aHJvd2xpbmUpCisgICAgWGxvb3BORVhUCisgICAgbGV0IGVycm9yID0gMAorICAgIGlmIHY6ZXhjZXB0aW9uICE9IGE6ZXhjZXB0aW9uCisJWG91dCBhOm4uIjogdjpleGNlcHRpb24gaXMiIHY6ZXhjZXB0aW9uICJpbnN0ZWFkIG9mIiBhOmV4Y2VwdGlvbgorCWxldCBlcnJvciA9IDEKKyAgICBlbmRpZgorICAgIGlmIHY6dGhyb3dwb2ludCAhfiBhOnRocm93bmFtZQorCWxldCBuYW1lID0gZXNjYXBlKGE6dGhyb3duYW1lLCAnXCcpCisJWG91dCBhOm4uIjogdjp0aHJvd3BvaW50ICgiLnY6dGhyb3dwb2ludC4iKSBkb2VzIG5vdCBtYXRjaCIgbmFtZQorCWxldCBlcnJvciA9IDEKKyAgICBlbmRpZgorICAgIGlmIHY6dGhyb3dwb2ludCAhfiBhOnRocm93bGluZQorCWxldCBsaW5lID0gZXNjYXBlKGE6dGhyb3dsaW5lLCAnXCcpCisJWG91dCBhOm4uIjogdjp0aHJvd3BvaW50ICgiLnY6dGhyb3dwb2ludC4iKSBkb2VzIG5vdCBtYXRjaCIgbGluZQorCWxldCBlcnJvciA9IDEKKyAgICBlbmRpZgorICAgIGlmIGVycm9yCisJWGxvb3AgMQkJCQkJIiBYOiAwCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBUKGFyZywgbGluZSkKKyAgICBpZiBhOmxpbmUgPT0gMgorCXRocm93IGE6YXJnCQkiIGluIGxpbmUgMgorICAgIGVsc2VpZiBhOmxpbmUgPT0gNAorCXRocm93IGE6YXJnCQkiIGluIGxpbmUgNAorICAgIGVsc2VpZiBhOmxpbmUgPT0gNgorCXRocm93IGE6YXJnCQkiIGluIGxpbmUgNgorICAgIGVsc2VpZiBhOmxpbmUgPT0gOAorCXRocm93IGE6YXJnCQkiIGluIGxpbmUgOAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRyhhcmcsIGxpbmUpCisgICAgY2FsbCBUKGE6YXJnLCBhOmxpbmUpCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRihhcmcsIGxpbmUpCisgICAgY2FsbCBHKGE6YXJnLCBhOmxpbmUpCitlbmRmdW5jdGlvbgorCitsZXQgc2NyaXB0VCA9IE1ha2VTY3JpcHQoIlQiKQorbGV0IHNjcmlwdEcgPSBNYWtlU2NyaXB0KCJHIiwgc2NyaXB0VCkKK2xldCBzY3JpcHRGID0gTWFrZVNjcmlwdCgiRiIsIHNjcmlwdEcpCisKK3RyeQorICAgIFhwYXRoIDMyNzY4CQkJCQkiIFg6IDMyNzY4CisgICAgY2FsbCBGKCJvb3BzIiwgMikKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiA2NTUzNgorICAgIGxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKyAgICBsZXQgdGhyb3dwb2ludCA9IHY6dGhyb3dwb2ludAorICAgIGNhbGwgQ0hFQ0soMSwgIm9vcHMiLCAnXDxGXC5cLkdcLlwuVFw+JywgJ1w8Mlw+JykKKyAgICBleGVjICJsZXQgZXhjZXB0aW9uICA9IHY6ZXhjZXB0aW9uIgorICAgIGV4ZWMgImxldCB0aHJvd3BvaW50ID0gdjp0aHJvd3BvaW50IgorICAgIGNhbGwgQ0hFQ0soMiwgIm9vcHMiLCAnXDxGXC5cLkdcLlwuVFw+JywgJ1w8Mlw+JykKKyAgICBDbWRFeGNlcHRpb24KKyAgICBDbWRUaHJvd3BvaW50CisgICAgY2FsbCBDSEVDSygzLCAib29wcyIsICdcPEZcLlwuR1wuXC5UXD4nLCAnXDwyXD4nKQorICAgIGNhbGwgRnVuY0V4Y2VwdGlvbigpCisgICAgY2FsbCBGdW5jVGhyb3dwb2ludCgpCisgICAgY2FsbCBDSEVDSyg0LCAib29wcyIsICdcPEZcLlwuR1wuXC5UXD4nLCAnXDwyXD4nKQorICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0RXhjZXB0aW9uCisgICAgZXhlYyAic291cmNlIiBzY3JpcHRUaHJvd1BvaW50CisgICAgY2FsbCBDSEVDSyg1LCAib29wcyIsICdcPEZcLlwuR1wuXC5UXD4nLCAnXDwyXD4nKQorICAgIHRyeQorCVhwYXRoIDEzMTA3MgkJCQkiIFg6IDEzMTA3MgorCWNhbGwgRygiYXJyZ2giLCA0KQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAyNjIxNDQKKwlsZXQgZXhjZXB0aW9uICA9IHY6ZXhjZXB0aW9uCisJbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwljYWxsIENIRUNLKDYsICJhcnJnaCIsICdcPEdcLlwuVFw+JywgJ1w8NFw+JykKKwl0cnkKKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiA1MjQyODgKKwkgICAgbGV0IGc6YXJnID0gImF1dHNjaCIKKwkgICAgbGV0IGc6bGluZSA9IDYKKwkgICAgZXhlYyAic291cmNlIiBzY3JpcHRGCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCAxMDQ4NTc2CQkJIiBYOiAxMDQ4NTc2CisJICAgIGxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKwkgICAgbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwkgICAgIiBTeW1ib2xpYyBsaW5rcyBpbiB0ZW1wbmFtZSgpcyBhcmUgbm90IHJlc29sdmVkLCB3aGVyZWFzIHJlc29sdmluZworCSAgICAiIGlzIGRvbmUgZm9yIHY6dGhyb3dwb2ludC4gIFJlc29sdmUgdGhlIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yCisJICAgICIgc2NyaXB0VCwgc28gdGhhdCBpdCBjYW4gYmUgbWF0Y2hlZCBhZ2FpbnN0IHY6dGhyb3dwb2ludC4KKwkgICAgY2FsbCBDSEVDSyg3LCAiYXV0c2NoIiwgcmVzb2x2ZShzY3JpcHRUKSwgJ1w8Nlw+JykKKwlmaW5hbGx5CisJICAgIFhwYXRoIDIwOTcxNTIJCQkiIFg6IDIwOTcxNTIKKwkgICAgbGV0IGV4Y2VwdGlvbiAgPSB2OmV4Y2VwdGlvbgorCSAgICBsZXQgdGhyb3dwb2ludCA9IHY6dGhyb3dwb2ludAorCSAgICBjYWxsIENIRUNLKDgsICJhcnJnaCIsICdcPEdcLlwuVFw+JywgJ1w8NFw+JykKKwkgICAgdHJ5CisJCVhwYXRoIDQxOTQzMDQJCQkiIFg6IDQxOTQzMDQKKwkJbGV0IGc6YXJnID0gImJycnJyIgorCQlsZXQgZzpsaW5lID0gOAorCQlleGVjICJzb3VyY2UiIHNjcmlwdEcKKwkgICAgY2F0Y2ggLy4qLworCQlYcGF0aCA4Mzg4NjA4CQkJIiBYOiA4Mzg4NjA4CisJCWxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKwkJbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwkJIiBSZXNvbHZlIHNjcmlwdFQgZm9yIG1hdGNoaW5nIGl0IGFnYWluc3Qgdjp0aHJvd3BvaW50LgorCQljYWxsIENIRUNLKDksICJicnJyciIsIHJlc29sdmUoc2NyaXB0VCksICdcPDhcPicpCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMTY3NzcyMTYJCQkiIFg6IDE2Nzc3MjE2CisJCWxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKwkJbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwkJY2FsbCBDSEVDSygxMCwgImFycmdoIiwgJ1w8R1wuXC5UXD4nLCAnXDw0XD4nKQorCSAgICBlbmR0cnkKKwkgICAgWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDMzNTU0NDMyCisJICAgIGxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKwkgICAgbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwkgICAgY2FsbCBDSEVDSygxMSwgImFycmdoIiwgJ1w8R1wuXC5UXD4nLCAnXDw0XD4nKQorCWVuZHRyeQorCVhwYXRoIDY3MTA4ODY0CQkJCSIgWDogNjcxMDg4NjQKKwlsZXQgZXhjZXB0aW9uICA9IHY6ZXhjZXB0aW9uCisJbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwljYWxsIENIRUNLKDEyLCAiYXJyZ2giLCAnXDxHXC5cLlRcPicsICdcPDRcPicpCisgICAgZmluYWxseQorCVhwYXRoIDEzNDIxNzcyOAkJCQkiIFg6IDEzNDIxNzcyOAorCWxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKwlsZXQgdGhyb3dwb2ludCA9IHY6dGhyb3dwb2ludAorCWNhbGwgQ0hFQ0soMTMsICJvb3BzIiwgJ1w8RlwuXC5HXC5cLlRcPicsICdcPDJcPicpCisgICAgZW5kdHJ5CisgICAgWHBhdGggMjY4NDM1NDU2CQkJCSIgWDogMjY4NDM1NDU2CisgICAgbGV0IGV4Y2VwdGlvbiAgPSB2OmV4Y2VwdGlvbgorICAgIGxldCB0aHJvd3BvaW50ID0gdjp0aHJvd3BvaW50CisgICAgY2FsbCBDSEVDSygxNCwgIm9vcHMiLCAnXDxGXC5cLkdcLlwuVFw+JywgJ1w8Mlw+JykKK2ZpbmFsbHkKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiA1MzY4NzA5MTIKKyAgICBsZXQgZXhjZXB0aW9uICA9IHY6ZXhjZXB0aW9uCisgICAgbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKyAgICBjYWxsIENIRUNLKDE1LCAiIiwgJ14kJywgJ14kJykKK2VuZHRyeQorCitYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMTA3Mzc0MTgyNAorCit1bmxldCBleGNlcHRpb24gdGhyb3dwb2ludAorZGVsZnVuY3Rpb24gRnVuY0V4Y2VwdGlvbgorZGVsZnVuY3Rpb24gRnVuY1Rocm93cG9pbnQKK2NhbGwgZGVsZXRlKHNjcmlwdEV4Y2VwdGlvbikKK2NhbGwgZGVsZXRlKHNjcmlwdFRocm93UG9pbnQpCit1bmxldCBzY3JpcHRFeGNlcHRpb24gc2NyaXB0VGhyb3dQb2ludAorZGVsY29tbWFuZCBDbWRFeGNlcHRpb24KK2RlbGNvbW1hbmQgQ21kVGhyb3dwb2ludAorZGVsZnVuY3Rpb24gVAorZGVsZnVuY3Rpb24gRworZGVsZnVuY3Rpb24gRgorY2FsbCBkZWxldGUoc2NyaXB0VCkKK2NhbGwgZGVsZXRlKHNjcmlwdEcpCitjYWxsIGRlbGV0ZShzY3JpcHRGKQordW5sZXQgc2NyaXB0VCBzY3JpcHRHIHNjcmlwdEYKKworWGNoZWNrIDIxNDc0NTA4ODAKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIgorIiBUZXN0IDU4OiAgdjpleGNlcHRpb24gYW5kIHY6dGhyb3dwb2ludCBmb3IgZXJyb3IvaW50ZXJydXB0IGV4Y2VwdGlvbnMJICAgIHt7ezEKKyIKKyIJICAgIHY6ZXhjZXB0aW9uIGFuZCB2OnRocm93cG9pbnQgd29yayBhbHNvIGZvciBlcnJvciBhbmQgaW50ZXJydXB0CisiCSAgICBleGNlcHRpb25zLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIGZ1bmN0aW9uISBUKGxpbmUpCisJaWYgYTpsaW5lID09IDIKKwkgICAgZGVsZnVuY3Rpb24gVAkJIiBlcnJvciAoZnVuY3Rpb24gaW4gdXNlKSBpbiBsaW5lIDIKKwllbHNlaWYgYTpsaW5lID09IDQKKwkgICAgbGV0IGR1bW15ID0gMAkJIiBJTlRFUlJVUFQxIC0gaW50ZXJydXB0IGluIGxpbmUgNAorCWVuZGlmCisgICAgZW5kZnVuY3Rpb24KKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgWHBhdGggMQkJCQkiIFg6IDEKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgY2FsbCBUKDIpCisJY2F0Y2ggLy4qLworCSAgICBsZXQgY2F1Z2h0ID0gMQorCSAgICBpZiB2OmV4Y2VwdGlvbiAhfiAnVmltKGRlbGZ1bmN0aW9uKTonCisJCVhwYXRoIDIJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGlmIHY6dGhyb3dwb2ludCAhfiAnXDxUXD4nCisJCVhwYXRoIDQJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGlmIHY6dGhyb3dwb2ludCAhfiAnXDwyXD4nCisJCVhwYXRoIDgJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJZmluYWxseQorCSAgICBYcGF0aCAxNgkJCQkiIFg6IDE2CisJICAgIGlmIGNhdWdodCB8fCAkVklNTk9FUlJUSFJPVworCQlYcGF0aCAzMgkJCSIgWDogMzIKKwkgICAgZW5kaWYKKwkgICAgaWYgdjpleGNlcHRpb24gIT0gIiIKKwkJWHBhdGggNjQJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgdjp0aHJvd3BvaW50ICE9ICIiCisJCVhwYXRoIDEyOAkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICBYcGF0aCAyNTYJCQkJCSIgWDogMjU2CisgICAgaWYgdjpleGNlcHRpb24gIT0gIiIKKwlYcGF0aCA1MTIJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICBpZiB2OnRocm93cG9pbnQgIT0gIiIKKwlYcGF0aCAxMDI0CQkJCSIgWDogMAorICAgIGVuZGlmCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGNhbGwgVCg0KQorCWNhdGNoIC8uKi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgaWYgdjpleGNlcHRpb24gIT0gJ1ZpbTpJbnRlcnJ1cHQnCisJCVhwYXRoIDQwOTYJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgdjp0aHJvd3BvaW50ICF+ICdcPFRcPicKKwkJWHBhdGggODE5MgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiB2OnRocm93cG9pbnQgIX4gJ1w8NFw+JworCQlYcGF0aCAxNjM4NAkJCSIgWDogMAorCSAgICBlbmRpZgorCWZpbmFsbHkKKwkgICAgWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorCSAgICBpZiBjYXVnaHQgfHwgJFZJTU5PSU5UVEhST1cKKwkJWHBhdGggNjU1MzYJCQkiIFg6IDY1NTM2CisJICAgIGVuZGlmCisJICAgIGlmIHY6ZXhjZXB0aW9uICE9ICIiCisJCVhwYXRoIDEzMTA3MgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiB2OnRocm93cG9pbnQgIT0gIiIKKwkJWHBhdGggMjYyMTQ0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIFhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorICAgIGlmIHY6ZXhjZXB0aW9uICE9ICIiCisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKyAgICBlbmRpZgorICAgIGlmIHY6dGhyb3dwb2ludCAhPSAiIgorCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAwCisgICAgZW5kaWYKKworZW5kaWYKKworWGNoZWNrIDYyNDk0NQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiCisiIFRlc3QgNTk6ICB2OmV4Y2VwdGlvbiBhbmQgdjp0aHJvd3BvaW50IHdoZW4gZGlzY2FyZGluZyBleGNlcHRpb25zCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGEgOmNhdGNoIGNsYXVzZSBpcyBsZWZ0IGJ5IGEgIjpicmVhayIgZXRjIG9yIGFuIGVycm9yIG9yCisiCSAgICBpbnRlcnJ1cHQgZXhjZXB0aW9uLCB2OmV4Y2VwdGlvbiBhbmQgdjp0aHJvd3BvaW50IGFyZSByZXNldC4gIFRoZXkKKyIJICAgIGFyZSBub3QgYWZmZWN0ZWQgYnkgYW4gZXhjZXB0aW9uIHRoYXQgaXMgZGlzY2FyZGVkIGJlZm9yZSBiZWluZworIgkgICAgY2F1Z2h0LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIFhsb29wSU5JVCEgMSAyCisKKyAgICBsZXQgc2ZpbGUgPSBleHBhbmQoIjxzZmlsZT4iKQorCisgICAgZnVuY3Rpb24hIExpbmVOdW1iZXIoKQorCXJldHVybiBzdWJzdGl0dXRlKHN1YnN0aXR1dGUodjp0aHJvd3BvaW50LCBnOnNmaWxlLCAnJywgIiIpLAorCSAgICBcICdcRCpcKFxkKlwpLionLCAnXDEnLCAiIikKKyAgICBlbmRmdW5jdGlvbgorCisgICAgY29tbWFuZCEgLW5hcmdzPTEgU2V0TGluZU51bWJlcgorCVwgdHJ5IHwgdGhyb3cgImxpbmUiIHwgY2F0Y2ggLy4qLyB8IGxldCA8YXJncz4gPSAgTGluZU51bWJlcigpIHwgZW5kdHJ5CisKKyAgICAiIENoZWNrIHY6ZXhjZXB0aW9uL3Y6dGhyb3dwb2ludCBhZ2FpbnN0IHNlY29uZC9mb3VydGggcGFyYW1ldGVyIGlmCisgICAgIiBzcGVjaWZpZWQsIGNoZWNrIGZvciBiZWluZyBlbXB0eSBlbHNlLgorICAgIGZ1bmN0aW9uISBDSEVDSyhuLCAuLi4pCisJWGxvb3BORVhUCisJbGV0IGV4Y2VwdGlvbiA9IGE6MCAhPSAwID8gYToxIDogIiIJIiBzZWNvbmQgcGFyYW1ldGVyIChvcHRpb25hbCkKKwlsZXQgZW1zZyAgICAgID0gYTowICE9IDAgPyBhOjIgOiAiIgkiIHRoaXJkIHBhcmFtZXRlciAob3B0aW9uYWwpCisJbGV0IGxpbmUgICAgICA9IGE6MCAhPSAwID8gYTozIDogMAkiIGZvdXJ0aCBwYXJhbWV0ZXIgKG9wdGlvbmFsKQorCWxldCBlcnJvciA9IDAKKwlpZiBlbXNnICE9ICIiCisJICAgICIgZXhjZXB0aW9uIGlzIHRoZSBlcnJvciBudW1iZXIsIGVtc2cgdGhlIGVuZ2xpc2ggZXJyb3IgbWVzc2FnZSB0ZXh0CisJICAgIGlmIGV4Y2VwdGlvbiAhfiAnXkVcZFwrJCcKKwkJWG91dCAiVE9ETzogQWRkIG1lc3NhZ2UgbnVtYmVyIGZvcjoiIGVtc2cKKwkgICAgZWxzZWlmIHY6bGFuZyA9PSAiQyIgfHwgdjpsYW5nID1+ICdeW0VlXW4nCisJCWlmIGV4Y2VwdGlvbiA9PSAiRTQ5MiIgJiYgZW1zZyA9PSAiTm90IGFuIGVkaXRvciBjb21tYW5kIgorCQkgICAgbGV0IGV4Y2VwdGlvbiA9ICdeVmltOicgLiBleGNlcHRpb24gLiAnOiAnIC4gZW1zZworCQllbHNlCisJCSAgICBsZXQgZXhjZXB0aW9uID0gJ15WaW0oXGFcKyk6JyAuIGV4Y2VwdGlvbiAuICc6ICcgLiBlbXNnCisJCWVuZGlmCisJICAgIGVsc2UKKwkJaWYgZXhjZXB0aW9uID09ICJFNDkyIgorCQkgICAgbGV0IGV4Y2VwdGlvbiA9ICdeVmltOicgLiBleGNlcHRpb24KKwkJZWxzZQorCQkgICAgbGV0IGV4Y2VwdGlvbiA9ICdeVmltKFxhXCspOicgLiBleGNlcHRpb24KKwkJZW5kaWYKKwkgICAgZW5kaWYKKwllbmRpZgorCWlmIGV4Y2VwdGlvbiA9PSAiIiAmJiB2OmV4Y2VwdGlvbiAhPSAiIgorCSAgICBYb3V0IGE6bi4iOiB2OmV4Y2VwdGlvbiBpcyBzZXQ6IiB2OmV4Y2VwdGlvbgorCSAgICBsZXQgZXJyb3IgPSAxCisJZWxzZWlmIGV4Y2VwdGlvbiAhPSAiIiAmJiB2OmV4Y2VwdGlvbiAhfiBleGNlcHRpb24KKwkgICAgWG91dCBhOm4uIjogdjpleGNlcHRpb24gKCIudjpleGNlcHRpb24uIikgZG9lcyBub3QgbWF0Y2giIGV4Y2VwdGlvbgorCSAgICBsZXQgZXJyb3IgPSAxCisJZW5kaWYKKwlpZiBsaW5lID09IDAgJiYgdjp0aHJvd3BvaW50ICE9ICIiCisJICAgIFhvdXQgYTpuLiI6IHY6dGhyb3dwb2ludCBpcyBzZXQ6IiB2OnRocm93cG9pbnQKKwkgICAgbGV0IGVycm9yID0gMQorCWVsc2VpZiBsaW5lICE9IDAgJiYgdjp0aHJvd3BvaW50ICF+ICdcPCcgLiBsaW5lIC4gJ1w+JworCSAgICBYb3V0IGE6bi4iOiB2OnRocm93cG9pbnQgKCIudjp0aHJvd3BvaW50LiIpIGRvZXMgbm90IG1hdGNoIiBsaW5lCisJICAgIGxldCBlcnJvciA9IDEKKwllbmRpZgorCWlmICFlcnJvcgorCSAgICBYbG9vcCAxCQkJCSIgWDogMjA5NzE1MQorCWVuZGlmCisgICAgZW5kZnVuY3Rpb24KKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgdGhyb3cgIngxIgorCWNhdGNoIC8uKi8KKwkgICAgYnJlYWsKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorICAgIGNhbGwgQ0hFQ0soMSkKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgdGhyb3cgIngyIgorCWNhdGNoIC8uKi8KKwkgICAgYnJlYWsKKwlmaW5hbGx5CisJICAgIGNhbGwgQ0hFQ0soMikKKwllbmR0cnkKKwlicmVhaworICAgIGVuZHdoaWxlCisgICAgY2FsbCBDSEVDSygzKQorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICBsZXQgZXJyY2F1Z2h0ID0gMAorCSAgICB0cnkKKwkJdHJ5CisJCSAgICB0aHJvdyAieDMiCisJCWNhdGNoIC8uKi8KKwkJICAgIFNldExpbmVOdW1iZXIgbGluZV9iZWZvcmVfZXJyb3IKKwkJICAgIGFzZGYKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC8uKi8KKwkJbGV0IGVycmNhdWdodCA9IDEKKwkJY2FsbCBDSEVDSyg0LCAnRTQ5MicsICJOb3QgYW4gZWRpdG9yIGNvbW1hbmQiLAorCQkgICAgXCBsaW5lX2JlZm9yZV9lcnJvciArIDEpCisJICAgIGVuZHRyeQorCWZpbmFsbHkKKwkgICAgaWYgIWVycmNhdWdodCAmJiAkVklNTk9FUlJUSFJPVworCQljYWxsIENIRUNLKDQpCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKyAgICBjYWxsIENIRUNLKDUpCisKKyAgICBYcGF0aCAyMDk3MTUyCQkJCSIgWDogMjA5NzE1MgorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICBsZXQgaW50Y2F1Z2h0ID0gMAorCSAgICB0cnkKKwkJdHJ5CisJCSAgICB0aHJvdyAieDQiCisJCWNhdGNoIC8uKi8KKwkJICAgIFNldExpbmVOdW1iZXIgdHdvX2xpbmVzX2JlZm9yZV9pbnRlcnJ1cHQKKwkJICAgICJJTlRFUlJVUFQKKwkJICAgIGxldCBkdW1teSA9IDAKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC8uKi8KKwkJbGV0IGludGNhdWdodCA9IDEKKwkJY2FsbCBDSEVDSyg2LCAiVmltOkludGVycnVwdCIsICcnLAorCQkgICAgXCB0d29fbGluZXNfYmVmb3JlX2ludGVycnVwdCArIDIpCisJICAgIGVuZHRyeQorCWZpbmFsbHkKKwkgICAgaWYgIWludGNhdWdodCAmJiAkVklNTk9JTlRUSFJPVworCQljYWxsIENIRUNLKDYpCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgaW50ZXJydXB0IGZvciAkVklNTk9JTlRUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgY2FsbCBDSEVDSyg3KQorCisgICAgWHBhdGggNDE5NDMwNAkJCQkiIFg6IDQxOTQzMDQKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGVycmNhdWdodCA9IDAKKwkgICAgdHJ5CisJCXRyeQorIgkJICAgIGlmIDEKKwkJCVNldExpbmVOdW1iZXIgbGluZV9iZWZvcmVfdGhyb3cKKwkJCXRocm93ICJ4NSIKKwkJICAgICIgbWlzc2luZyBlbmRpZgorCQljYXRjaCAvLiovCisJCSAgICBYcGF0aCA4Mzg4NjA4CQkJIiBYOiAwCisJCWVuZHRyeQorCSAgICBjYXRjaCAvLiovCisJCWxldCBlcnJjYXVnaHQgPSAxCisJCWNhbGwgQ0hFQ0soOCwgJ0UxNzEnLCAiTWlzc2luZyA6ZW5kaWYiLCBsaW5lX2JlZm9yZV90aHJvdyArIDMpCisJICAgIGVuZHRyeQorCWZpbmFsbHkKKwkgICAgaWYgIWVycmNhdWdodCAmJiAkVklNTk9FUlJUSFJPVworCQljYWxsIENIRUNLKDgpCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKyAgICBjYWxsIENIRUNLKDkpCisKKyAgICBYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDE2Nzc3MjE2CisKKyAgICB0cnkKKwl3aGlsZSAxCisJICAgIHRyeQorCQl0aHJvdyAieDYiCisJICAgIGZpbmFsbHkKKwkJYnJlYWsKKwkgICAgZW5kdHJ5CisJICAgIGJyZWFrCisJZW5kd2hpbGUKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisgICAgY2FsbCBDSEVDSygxMCkKKworICAgIHRyeQorCXdoaWxlIDEKKwkgICAgdHJ5CisJCXRocm93ICJ4NyIKKwkgICAgZmluYWxseQorCQlicmVhaworCSAgICBlbmR0cnkKKwkgICAgYnJlYWsKKwllbmR3aGlsZQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJY2FsbCBDSEVDSygxMSkKKyAgICBlbmR0cnkKKyAgICBjYWxsIENIRUNLKDEyKQorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICBsZXQgZXJyY2F1Z2h0ID0gMAorCSAgICB0cnkKKwkJdHJ5CisJCSAgICB0aHJvdyAieDgiCisJCWZpbmFsbHkKKwkJICAgIFNldExpbmVOdW1iZXIgbGluZV9iZWZvcmVfZXJyb3IKKwkJICAgIGFzZGYKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC8uKi8KKwkJbGV0IGVycmNhdWdodCA9IDEKKwkJY2FsbCBDSEVDSygxMywgJ0U0OTInLCAiTm90IGFuIGVkaXRvciBjb21tYW5kIiwKKwkJICAgIFwgbGluZV9iZWZvcmVfZXJyb3IgKyAxKQorCSAgICBlbmR0cnkKKwlmaW5hbGx5CisJICAgIGlmICFlcnJjYXVnaHQgJiYgJFZJTU5PRVJSVEhST1cKKwkJY2FsbCBDSEVDSygxMykKKwkgICAgZW5kaWYKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorICAgIGNhbGwgQ0hFQ0soMTQpCisKKyAgICBYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGludGNhdWdodCA9IDAKKwkgICAgdHJ5CisJCXRyeQorCQkgICAgdGhyb3cgIng5IgorCQlmaW5hbGx5CisJCSAgICBTZXRMaW5lTnVtYmVyIHR3b19saW5lc19iZWZvcmVfaW50ZXJydXB0CisJCSAgICAiSU5URVJSVVBUCisJCWVuZHRyeQorCSAgICBjYXRjaCAvLiovCisJCWxldCBpbnRjYXVnaHQgPSAxCisJCWNhbGwgQ0hFQ0soMTUsICJWaW06SW50ZXJydXB0IiwgJycsCisJCSAgICBcIHR3b19saW5lc19iZWZvcmVfaW50ZXJydXB0ICsgMikKKwkgICAgZW5kdHJ5CisJZmluYWxseQorCSAgICBpZiAhaW50Y2F1Z2h0ICYmICRWSU1OT0lOVFRIUk9XCisJCWNhbGwgQ0hFQ0soMTUpCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgaW50ZXJydXB0IGZvciAkVklNTk9JTlRUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgY2FsbCBDSEVDSygxNikKKworICAgIFhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDI2ODQzNTQ1NgorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICBsZXQgZXJyY2F1Z2h0ID0gMAorCSAgICB0cnkKKwkJdHJ5CisiCQkgICAgaWYgMQorCQkJU2V0TGluZU51bWJlciBsaW5lX2JlZm9yZV90aHJvdworCQkJdGhyb3cgIngxMCIKKwkJICAgICIgbWlzc2luZyBlbmRpZgorCQlmaW5hbGx5CisJCSAgICBjYWxsIENIRUNLKDE3KQorCQllbmR0cnkKKwkgICAgY2F0Y2ggLy4qLworCQlsZXQgZXJyY2F1Z2h0ID0gMQorCQljYWxsIENIRUNLKDE4LCAnRTE3MScsICJNaXNzaW5nIDplbmRpZiIsIGxpbmVfYmVmb3JlX3Rocm93ICsgMykKKwkgICAgZW5kdHJ5CisJZmluYWxseQorCSAgICBpZiAhZXJyY2F1Z2h0ICYmICRWSU1OT0VSUlRIUk9XCisJCWNhbGwgQ0hFQ0soMTgpCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKyAgICBjYWxsIENIRUNLKDE5KQorCisgICAgWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogNTM2ODcwOTEyCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIGxldCBlcnJjYXVnaHQgPSAwCisJICAgIHRyeQorCQl0cnkKKyIJCSAgICBpZiAxCisJCQlTZXRMaW5lTnVtYmVyIGxpbmVfYmVmb3JlX3Rocm93CisJCQl0aHJvdyAieDExIgorCQkgICAgIiBtaXNzaW5nIGVuZGlmCisJCWVuZHRyeQorCSAgICBjYXRjaCAvLiovCisJCWxldCBlcnJjYXVnaHQgPSAxCisJCWNhbGwgQ0hFQ0soMjAsICdFMTcxJywgIk1pc3NpbmcgOmVuZGlmIiwgbGluZV9iZWZvcmVfdGhyb3cgKyAzKQorCSAgICBlbmR0cnkKKwlmaW5hbGx5CisJICAgIGlmICFlcnJjYXVnaHQgJiYgJFZJTU5PRVJSVEhST1cKKwkJY2FsbCBDSEVDSygyMCkKKwkgICAgZW5kaWYKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorICAgIGNhbGwgQ0hFQ0soMjEpCisKKyAgICBYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMTA3Mzc0MTgyNAorCitlbmRpZgorCitYY2hlY2sgMjAzODQzMTc0MworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiCisiIFRlc3QgNjA6ICAoUmUpdGhyb3dpbmcgdjpleGNlcHRpb247IDplY2hvZXJyLgkJCQkgICAge3t7MQorIgorIgkgICAgQSB1c2VyIGV4Y2VwdGlvbiBjYW4gYmUgcmV0aHJvd24gYWZ0ZXIgY2F0Y2hpbmcgYnkgdGhyb3dpbmcKKyIJICAgIHY6ZXhjZXB0aW9uLiAgQW4gZXJyb3Igb3IgaW50ZXJydXB0IGV4Y2VwdGlvbiBjYW5ub3QgYmUgcmV0aHJvd24KKyIJICAgIGJlY2F1c2UgVmltIGV4Y2VwdGlvbnMgY2Fubm90IGJlIGZha2VkLiAgQSBWaW0gZXhjZXB0aW9uIHVzaW5nIHRoZQorIgkgICAgdmFsdWUgb2YgdjpleGNlcHRpb24gY2FuLCBob3dldmVyLCBiZSB0cmlnZ2VyZWQgYnkgdGhlIDplY2hvZXJyCisiCSAgICBjb21tYW5kLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK3RyeQorICAgIHRyeQorCVhwYXRoIDEJCQkJCSIgWDogMQorCXRocm93ICJvb3BzIgorICAgIGNhdGNoIC9vb3BzLworCVhwYXRoIDIJCQkJCSIgWDogMgorCXRocm93IHY6ZXhjZXB0aW9uCSIgcmV0aHJvdyB1c2VyIGV4Y2VwdGlvbgorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA0CQkJCQkiIFg6IDAKKyAgICBlbmR0cnkKK2NhdGNoIC9eb29wcyQvCQkJIiBjYXRjaGVzIHJldGhyb3duIHVzZXIgZXhjZXB0aW9uCisgICAgWHBhdGggOAkJCQkJIiBYOiA4CitjYXRjaCAvLiovCisgICAgWHBhdGggMTYJCQkJCSIgWDogMAorZW5kdHJ5CisKK2Z1bmN0aW9uISBGKCkKKyAgICB0cnkKKwlsZXQgY2F1Z2h0ID0gMAorCXRyeQorCSAgICBYcGF0aCAzMgkJCQkiIFg6IDMyCisJICAgIHdyaXRlIC9uL28vbi93L3IvaS90L2EvYi9sL2UvXy9mL2kvbC9lCisJICAgIFhwYXRoIDY0CQkJCSIgWDogMAorCSAgICBYb3V0ICJkaWRfZW1zZyB3YXMgcmVzZXQgYmVmb3JlIGV4ZWN1dGluZyAiIC4KKwkJXCAiQnVmV3JpdGVQb3N0IGF1dG9jb21tYW5kcy4iCisJY2F0Y2ggL15WaW0od3JpdGUpOi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgdGhyb3cgdjpleGNlcHRpb24JIiB0aHJvdyBlcnJvcjogY2Fubm90IGZha2UgVmltIGV4Y2VwdGlvbgorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggMTI4CQkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMjU2CQkJCSIgWDogMjU2CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDUxMgkJCSIgWDogMAorCSAgICBlbmRpZgorCWVuZHRyeQorICAgIGNhdGNoIC9eVmltKHRocm93KTovCSIgY2F0Y2hlcyB0aHJvdyBlcnJvcgorCWxldCBjYXVnaHQgPSBjYXVnaHQgKyAxCisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDEwMjQJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJaWYgY2F1Z2h0ICE9IDIKKwkgICAgaWYgIWNhdWdodCAmJiAhJFZJTU5PRVJSVEhST1cKKwkJWHBhdGggNDA5NgkJCSIgWDogMAorCSAgICBlbHNlaWYgY2F1Z2h0CisJCVhwYXRoIDgxOTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgcmV0dXJuCQl8ICIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmRpZgorICAgIGVuZHRyeQorZW5kZnVuY3Rpb24KKworY2FsbCBGKCkKK2RlbGZ1bmN0aW9uIEYKKworZnVuY3Rpb24hIEcoKQorICAgIHRyeQorCWxldCBjYXVnaHQgPSAwCisJdHJ5CisJICAgIFhwYXRoIDE2Mzg0CQkJCSIgWDogMTYzODQKKwkgICAgYXNkZgorCWNhdGNoIC9eVmltLwkJIiBjYXRjaCBlcnJvciBleGNlcHRpb24KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgIiBUcmlnZ2VyIFZpbSBlcnJvciBleGNlcHRpb24gd2l0aCB2YWx1ZSBzcGVjaWZpZWQgYWZ0ZXIgOmVjaG9lcnIKKwkgICAgbGV0IHZhbHVlID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW1cKCguKilcKVw9OicsICcnLCAiIikKKwkgICAgZWNob2VyciB2YWx1ZQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggMzI3NjgJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJICAgIGlmICFjYXVnaHQKKwkJaWYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCAxMzEwNzIJCSIgWDogMAorCQllbHNlCisJCSAgICBsZXQgdmFsdWUgPSAiRXJyb3IiCisJCSAgICBlY2hvZXJyIHZhbHVlCisJCWVuZGlmCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggL15WaW0oZWNob2Vycik6LworCWxldCBjYXVnaHQgPSBjYXVnaHQgKyAxCisJaWYgdjpleGNlcHRpb24gIX4gdmFsdWUKKwkgICAgWHBhdGggMjYyMTQ0CQkJIiBYOiAwCisJZW5kaWYKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMTA0ODU3NgorCWlmIGNhdWdodCAhPSAyCisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDIwOTcxNTIJCQkiIFg6IDAKKwkgICAgZWxzZWlmIGNhdWdodAorCQlYcGF0aCA0MTk0MzA0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIHJldHVybgkJfCAiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kaWYKKyAgICBlbmR0cnkKK2VuZGZ1bmN0aW9uCisKK2NhbGwgRygpCitkZWxmdW5jdGlvbiBHCisKK3VubGV0ISB2YWx1ZSBjYXVnaHQKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCWxldCBlcnJjYXVnaHQgPSAwCisJdHJ5CisJICAgIFhwYXRoIDgzODg2MDgJCQkiIFg6IDgzODg2MDgKKwkgICAgbGV0IGludGNhdWdodCA9IDAKKwkgICAgIklOVEVSUlVQVAorCWNhdGNoIC9eVmltOi8JCSIgY2F0Y2ggaW50ZXJydXB0IGV4Y2VwdGlvbgorCSAgICBsZXQgaW50Y2F1Z2h0ID0gMQorCSAgICAiIFRyaWdnZXIgVmltIGVycm9yIGV4Y2VwdGlvbiB3aXRoIHZhbHVlIHNwZWNpZmllZCBhZnRlciA6ZWNob2VycgorCSAgICBlY2hvZXJyIHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltXCgoLiopXClcPTonLCAnJywgIiIpCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDMzNTU0NDMyCisJICAgIGlmICFpbnRjYXVnaHQKKwkJaWYgISRWSU1OT0lOVFRIUk9XCisJCSAgICBYcGF0aCA2NzEwODg2NAkJIiBYOiAwCisJCWVsc2UKKwkJICAgIGVjaG9lcnIgIkludGVycnVwdCIKKwkJZW5kaWYKKwkgICAgZW5kaWYKKwllbmR0cnkKKyAgICBjYXRjaCAvXlZpbShlY2hvZXJyKTovCisJbGV0IGVycmNhdWdodCA9IDEKKwlpZiB2OmV4Y2VwdGlvbiAhfiAiSW50ZXJydXB0IgorCSAgICBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDAKKwllbmRpZgorICAgIGZpbmFsbHkKKwlYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAyNjg0MzU0NTYKKwlpZiAhZXJyY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCSAgICBYcGF0aCA1MzY4NzA5MTIJCQkiIFg6IDAKKwllbmRpZgorICAgIGVuZHRyeQorZW5kaWYKKworWGNoZWNrIDMxMTUxMTMzOQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNjE6ICBDYXRjaGluZyBpbnRlcnJ1cHQgZXhjZXB0aW9ucwkJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzIGluc2lkZSBhIDp0cnkvOmVuZHRyeSByZWdpb24sIGFuCisiCSAgICBpbnRlcnJ1cHQgZXhjZXB0aW9uIGlzIHRocm93biBhbmQgY2FuIGJlIGNhdWdodC4gIEl0cyB2YWx1ZSBpcworIgkgICAgIlZpbTpJbnRlcnJ1cHQiLiAgSWYgdGhlIGludGVycnVwdCBvY2N1cnMgYWZ0ZXIgYW4gZXJyb3Igb3IgYSA6dGhyb3cKKyIJICAgIGJ1dCBiZWZvcmUgYSBtYXRjaGluZyA6Y2F0Y2ggaXMgcmVhY2hlZCwgYWxsIGZvbGxvd2luZyA6Y2F0Y2hlcyBvZgorIgkgICAgdGhhdCB0cnkgYmxvY2sgYXJlIGlnbm9yZWQsIGJ1dCB0aGUgaW50ZXJydXB0IGV4Y2VwdGlvbiBjYW4gYmUKKyIJICAgIGNhdWdodCBieSB0aGUgbmV4dCBzdXJyb3VuZGluZyB0cnkgY29uZGl0aW9uYWwuICBBbiBpbnRlcnJ1cHQgaXMKKyIJICAgIGlnbm9yZWQgd2hlbiB0aGVyZSBpcyBhIHByZXZpb3VzIGludGVycnVwdCB0aGF0IGhhcyBub3QgYmVlbiBjYXVnaHQKKyIJICAgIG9yIGNhdXNlcyBhIDpmaW5hbGx5IGNsYXVzZSB0byBiZSBleGVjdXRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitpZiBFeHRyYVZpbSgpCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlYcGF0aCAxCQkJCSIgWDogMQorCQlsZXQgY2F1Z2h0ID0gMAorCQkiSU5URVJSVVBUCisJCVhwYXRoIDIJCQkJIiBYOiAwCisJICAgIGNhdGNoIC9eVmltOkludGVycnVwdCQvCisJCWxldCBjYXVnaHQgPSAxCisJICAgIGZpbmFsbHkKKwkJWHBhdGggNAkJCQkiIFg6IDQKKwkJaWYgY2F1Z2h0IHx8ICRWSU1OT0lOVFRIUk9XCisJCSAgICBYcGF0aCA4CQkJIiBYOiA4CisJCWVuZGlmCisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggMTYJCQkJIiBYOiAwCisJICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKwlmaW5hbGx5CisJICAgIGJyZWFrCQkiIGRpc2NhcmQgaW50ZXJydXB0IGZvciAkVklNTk9JTlRUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlsZXQgY2F1Z2h0ID0gMAorCQl0cnkKKwkJICAgIFhwYXRoIDMyCQkJIiBYOiAzMgorCQkgICAgYXNkZgorCQkgICAgWHBhdGggNjQJCQkiIFg6IDAKKwkJY2F0Y2ggL2RvX25vdF9jYXRjaC8KKwkJICAgIFhwYXRoIDEyOAkJCSIgWDogMAorCQljYXRjaCAvLiovCSJJTlRFUlJVUFQgLSB0aHJvdyBpbnRlcnJ1cHQgaWYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCAyNTYJCQkiIFg6IDAKKwkJY2F0Y2ggLy4qLworCQkgICAgWHBhdGggNTEyCQkJIiBYOiAwCisJCWZpbmFsbHkJCSJJTlRFUlJVUFQgLSB0aHJvdyBpbnRlcnJ1cHQgaWYgJFZJTU5PRVJSVEhST1cKKwkJICAgIFhwYXRoIDEwMjQJCQkiIFg6IDEwMjQKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC9eVmltOkludGVycnVwdCQvCisJCWxldCBjYXVnaHQgPSAxCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMjA0OAkJCSIgWDogMjA0OAorCQlpZiBjYXVnaHQgfHwgJFZJTU5PSU5UVEhST1cKKwkJICAgIFhwYXRoIDQwOTYJCQkiIFg6IDQwOTYKKwkJZW5kaWYKKwkgICAgZW5kdHJ5CisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCA4MTkyCQkJCSIgWDogMAorCSAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisJZmluYWxseQorCSAgICBicmVhawkJIiBkaXNjYXJkIGludGVycnVwdCBmb3IgJFZJTU5PSU5UVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICB0cnkKKwkJbGV0IGNhdWdodCA9IDAKKwkJdHJ5CisJCSAgICBYcGF0aCAxNjM4NAkJCSIgWDogMTYzODQKKwkJICAgIHRocm93ICJ4IgorCQkgICAgWHBhdGggMzI3NjgJCQkiIFg6IDAKKwkJY2F0Y2ggL2RvX25vdF9jYXRjaC8KKwkJICAgIFhwYXRoIDY1NTM2CQkJIiBYOiAwCisJCWNhdGNoIC94LwkiSU5URVJSVVBUCisJCSAgICBYcGF0aCAxMzEwNzIJCSIgWDogMAorCQljYXRjaCAvLiovCisJCSAgICBYcGF0aCAyNjIxNDQJCSIgWDogMAorCQllbmR0cnkKKwkgICAgY2F0Y2ggL15WaW06SW50ZXJydXB0JC8KKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlYcGF0aCA1MjQyODgJCQkiIFg6IDUyNDI4OAorCQlpZiBjYXVnaHQgfHwgJFZJTU5PSU5UVEhST1cKKwkJICAgIFhwYXRoIDEwNDg1NzYJCSIgWDogMTA0ODU3NgorCQllbmRpZgorCSAgICBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDIwOTcxNTIJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorCWZpbmFsbHkKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBpbnRlcnJ1cHQgZm9yICRWSU1OT0lOVFRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgdHJ5CisJCVhwYXRoIDQxOTQzMDQJCQkiIFg6IDQxOTQzMDQKKwkJIklOVEVSUlVQVAorCQlYcGF0aCA4Mzg4NjA4CQkJIiBYOiAwCisJICAgIGNhdGNoIC9kb19ub3RfY2F0Y2gvICJJTlRFUlJVUFQKKwkJWHBhdGggMTY3NzcyMTYJCQkiIFg6IDAKKwkgICAgY2F0Y2ggL15WaW06SW50ZXJydXB0JC8KKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlYcGF0aCAzMzU1NDQzMgkJCSIgWDogMzM1NTQ0MzIKKwkJaWYgY2F1Z2h0IHx8ICRWSU1OT0lOVFRIUk9XCisJCSAgICBYcGF0aCA2NzEwODg2NAkJIiBYOiA2NzEwODg2NAorCQllbmRpZgorCSAgICBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMAorCSAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisJZmluYWxseQorCSAgICBicmVhawkJIiBkaXNjYXJkIGludGVycnVwdCBmb3IgJFZJTU5PSU5UVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorCisgICAgWHBhdGggMjY4NDM1NDU2CQkJCSIgWDogMjY4NDM1NDU2CisKK2VuZGlmCisKK1hjaGVjayAzNzQ4ODk1MTcKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDYyOiAgQ2F0Y2hpbmcgZXJyb3IgZXhjZXB0aW9ucwkJCQkJICAgIHt7ezEKKyIKKyIJICAgIEFuIGVycm9yIGluc2lkZSBhIDp0cnkvOmVuZHRyeSByZWdpb24gaXMgY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbgorIgkgICAgYW5kIGNhbiBiZSBjYXVnaHQuICBUaGUgZXJyb3IgZXhjZXB0aW9uIGhhcyBhICJWaW0oY21kbmFtZSk6IiBwcmVmaXgKKyIJICAgIHdoZXJlIGNtZG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGZhaWxpbmcgY29tbWFuZCwgb3IgYSAiVmltOiIgcHJlZml4CisiCSAgICBpZiBubyBjb21tYW5kIG5hbWUgaXMga25vd24uICBUaGUgIlZpbSIgcHJlZml4ZXMgY2Fubm90IGJlIGZha2VkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBNU0coZW5yLCBlbXNnKQorICAgIGxldCBlbmdsaXNoID0gdjpsYW5nID09ICJDIiB8fCB2OmxhbmcgPX4gJ15bRWVdbicKKyAgICBpZiBhOmVuciA9PSAiIgorCVhvdXQgIlRPRE86IEFkZCBtZXNzYWdlIG51bWJlciBmb3I6IiBhOmVtc2cKKwlsZXQgdjplcnJtc2cgPSAiOiIgLiB2OmVycm1zZworICAgIGVuZGlmCisgICAgbGV0IG1hdGNoID0gMQorICAgIGlmIHY6ZXJybXNnICF+ICdeJy5hOmVuci4nOicgfHwgKGVuZ2xpc2ggJiYgdjplcnJtc2cgIX4gYTplbXNnKQorCWxldCBtYXRjaCA9IDAKKwlpZiB2OmVycm1zZyA9PSAiIgorCSAgICBYb3V0ICJNZXNzYWdlIG1pc3NpbmcuIgorCWVsc2UKKwkgICAgbGV0IHY6ZXJybXNnID0gZXNjYXBlKHY6ZXJybXNnLCAnIicpCisJICAgIFhvdXQgIlVuZXhwZWN0ZWQgbWVzc2FnZToiIHY6ZXJybXNnCisJZW5kaWYKKyAgICBlbmRpZgorICAgIHJldHVybiBtYXRjaAorZW5kZnVuY3Rpb24KKword2hpbGUgMQorICAgIHRyeQorCXRyeQorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICB1bmxldCBub3ZhcgorCWNhdGNoIC9eVmltKHVubGV0KTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltKHVubGV0KTonLCAnJywgIiIpCisJZmluYWxseQorCSAgICBYcGF0aCAxCQkJCSIgWDogMQorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAyCQkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiAhTVNHKCdFMTA4JywgIk5vIHN1Y2ggdmFyaWFibGUiKQorCQlYcGF0aCA0CQkJCSIgWDogMAorCSAgICBlbmRpZgorCWVuZHRyeQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA4CQkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCWJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisgICAgZW5kdHJ5CitlbmR3aGlsZQorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIHRocm93IG5vdmFyCQkJIiBlcnJvciBpbiA6dGhyb3cKKwljYXRjaCAvXlZpbSh0aHJvdyk6LworCSAgICBsZXQgY2F1Z2h0ID0gMQorCSAgICBsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbSh0aHJvdyk6JywgJycsICIiKQorCWZpbmFsbHkKKwkgICAgWHBhdGggMTYJCQkJIiBYOiAxNgorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAzMgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiBjYXVnaHQgPyAhTVNHKCdFMTIxJywgIlVuZGVmaW5lZCB2YXJpYWJsZSIpCisJCQlcIDogIU1TRygnRTE1JywgIkludmFsaWQgZXhwcmVzc2lvbiIpCisJCVhwYXRoIDY0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDEyOAkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCWJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisgICAgZW5kdHJ5CitlbmR3aGlsZQorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIHRocm93ICJWaW06ZmFrZWQiCQkiIGVycm9yOiBjYW5ub3QgZmFrZSBWaW0gZXhjZXB0aW9uCisJY2F0Y2ggL15WaW0odGhyb3cpOi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW0odGhyb3cpOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCA1MTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgIU1TRygnRTYwOCcsICJDYW5ub3QgOnRocm93IGV4Y2VwdGlvbnMgd2l0aCAnVmltJyBwcmVmaXgiKQorCQlYcGF0aCAxMDI0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDIwNDgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworICAgIGVuZHRyeQorZW5kd2hpbGUKKworZnVuY3Rpb24hIEYoKQorICAgIHdoaWxlIDEKKyAgICAiIE1pc3NpbmcgOmVuZHdoaWxlCitlbmRmdW5jdGlvbgorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGNhbGwgRigpCisJY2F0Y2ggL15WaW0oZW5kZnVuY3Rpb24pOi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW0oZW5kZnVuY3Rpb24pOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDgxOTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgIU1TRygnRTE3MCcsICJNaXNzaW5nIDplbmR3aGlsZSIpCisJCVhwYXRoIDE2Mzg0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDMyNzY4CQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBmaW5hbGx5CisJYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKyAgICBlbmR0cnkKK2VuZHdoaWxlCisKK3doaWxlIDEKKyAgICB0cnkKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgRXhlY0FzU2NyaXB0IEYKKwljYXRjaCAvXlZpbTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwkgICAgaWYgIWNhdWdodCAmJiAhJFZJTU5PRVJSVEhST1cKKwkJWHBhdGggMTMxMDcyCQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGlmICFNU0coJ0UxNzAnLCAiTWlzc2luZyA6ZW5kd2hpbGUiKQorCQlYcGF0aCAyNjIxNDQJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwllbmR0cnkKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBmaW5hbGx5CisJYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKyAgICBlbmR0cnkKK2VuZHdoaWxlCisKK2Z1bmN0aW9uISBHKCkKKyAgICBjYWxsIEcoKQorZW5kZnVuY3Rpb24KKword2hpbGUgMQorICAgIHRyeQorCWxldCBtZmRfc2F2ZSA9ICZtZmQKKwlzZXQgbWZkPTMKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgY2FsbCBHKCkKKwljYXRjaCAvXlZpbShjYWxsKTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltKGNhbGwpOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEwNDg1NzYJCQkiIFg6IDEwNDg1NzYKKwkgICAgaWYgIWNhdWdodCAmJiAhJFZJTU5PRVJSVEhST1cKKwkJWHBhdGggMjA5NzE1MgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiAhTVNHKCdFMTMyJywgIkZ1bmN0aW9uIGNhbGwgZGVwdGggaXMgaGlnaGVyIHRoYW4gJ21heGZ1bmNkZXB0aCciKQorCQlYcGF0aCA0MTk0MzA0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDgzODg2MDgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlsZXQgJm1mZCA9IG1mZF9zYXZlCisJYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKyAgICBlbmR0cnkKK2VuZHdoaWxlCisKK2Z1bmN0aW9uISBIKCkKKyAgICByZXR1cm4gSCgpCitlbmRmdW5jdGlvbgorCit3aGlsZSAxCisgICAgdHJ5CisJbGV0IG1mZF9zYXZlID0gJm1mZAorCXNldCBtZmQ9MworCXRyeQorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICBjYWxsIEgoKQorCWNhdGNoIC9eVmltKHJldHVybik6LworCSAgICBsZXQgY2F1Z2h0ID0gMQorCSAgICBsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbShyZXR1cm4pOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDE2Nzc3MjE2CQkJIiBYOiAxNjc3NzIxNgorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAzMzU1NDQzMgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiAhTVNHKCdFMTMyJywgIkZ1bmN0aW9uIGNhbGwgZGVwdGggaXMgaGlnaGVyIHRoYW4gJ21heGZ1bmNkZXB0aCciKQorCQlYcGF0aCA2NzEwODg2NAkJCSIgWDogMAorCSAgICBlbmRpZgorCWVuZHRyeQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlsZXQgJm1mZCA9IG1mZF9zYXZlCisJYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKyAgICBlbmR0cnkKK2VuZHdoaWxlCisKK3VubGV0ISBjYXVnaHQgbWZkX3NhdmUKK2RlbGZ1bmN0aW9uIEYKK2RlbGZ1bmN0aW9uIEcKK2RlbGZ1bmN0aW9uIEgKK1hwYXRoIDI2ODQzNTQ1NgkJCQkJIiBYOiAyNjg0MzU0NTYKKworWGNoZWNrIDI4NjMzMTE1MworCisiIExlYXZlIE1TRygpIGZvciB0aGUgbmV4dCB0ZXN0LgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNjM6ICBTdXBwcmVzc2luZyBlcnJvciBleGNlcHRpb25zIGJ5IDpzaWxlbnQhLgkJCSAgICB7e3sxCisiCisiCSAgICBBIDpzaWxlbnQhIGNvbW1hbmQgaW5zaWRlIGEgOnRyeS86ZW5kdHJ5IHJlZ2lvbiBzdXBwcmVzc2VzIHRoZQorIgkgICAgY29udmVyc2lvbiBvZiBlcnJvcnMgdG8gYW4gZXhjZXB0aW9uIGFuZCB0aGUgaW1tZWRpYXRlIGFib3J0aW9uIG9uCisiCSAgICBlcnJvci4gIFdoZW4gdGhlIGNvbW1hbmRzIGV4ZWN1dGVkIGJ5IHRoZSA6c2lsZW50ISB0aGVtc2VsdmVzIG9wZW4KKyIJICAgIGEgbmV3IDp0cnkvOmVuZHRyeSByZWdpb24sIGNvbnZlcnNpb24gb2YgZXJyb3JzIHRvIGV4Y2VwdGlvbiBhbmQKKyIJICAgIGltbWVkaWF0ZSBhYm9ydGlvbiBpcyBzd2l0Y2hlZCBvbiBhZ2FpbiAtIHVudGlsIHRoZSBuZXh0IDpzaWxlbnQhCisiCSAgICBldGMuICBUaGUgOnNpbGVudCEgaGFzIHRoZSBlZmZlY3Qgb2Ygc2V0dGluZyB2OmVycm1zZyB0byB0aGUgZXJyb3IKKyIJICAgIG1lc3NhZ2UgdGV4dCAod2l0aG91dCBkaXNwbGF5aW5nIGl0KSBhbmQgY29udGludWluZyB3aXRoIHRoZSBuZXh0CisiCSAgICBzY3JpcHQgbGluZS4KKyIKKyIJICAgIFdoZW4gYSBjb21tYW5kIHRyaWdnZXJpbmcgYXV0b2NvbW1hbmRzIGlzIGV4ZWN1dGVkIGJ5IDpzaWxlbnQhCisiCSAgICBpbnNpZGUgYSA6dHJ5LzplbmR0cnksIHRoZSBhdXRvY29tbWFuZCBleGVjdXRpb24gaXMgbm90IHN1cHByZXNzZWQKKyIJICAgIG9uIGVycm9yLgorIgorIgkgICAgVGhpcyB0ZXN0IHJldXNlcyB0aGUgZnVuY3Rpb24gTVNHKCkgZnJvbSB0aGUgcHJldmlvdXMgdGVzdC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitYbG9vcElOSVQhIDEgNAorCitsZXQgdGFrZW4gPSAiIgorCitmdW5jdGlvbiEgUyhuKSBhYm9ydAorICAgIFhsb29wTkVYVAorICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJFIiAuIGE6bgorICAgIGxldCB2OmVycm1zZyA9ICIiCisgICAgZXhlYyAiYXNkZiIgLiBhOm4KKworICAgICIgQ2hlY2sgdGhhdCAiOnNpbGVudCEiIGNvbnRpbnVlczoKKyAgICBYbG9vcCAxCisKKyAgICAiIENoZWNrIHRoYXQgIjpzaWxlbnQhIiBzZXRzICJ2OmVycm1zZyI6CisgICAgaWYgTVNHKCdFNDkyJywgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIpCisJWGxvb3AgMgorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRm9vKCkKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlsZXQgY2F1Z2h0ID0gMAorCQkiIFRoaXMgaXMgbm90IHNpbGVudDoKKwkJY2FsbCBTKDMpCQkJCSIgWDogMCAqIDE2CisJICAgIGNhdGNoIC9eVmltOi8KKwkJbGV0IGNhdWdodCA9IDEKKwkJbGV0IGVycm1zZzMgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbTonLCAnJywgIiIpCisJCXNpbGVudCEgY2FsbCBTKDQpCQkJIiBYOiAzICogNjQKKwkgICAgZmluYWxseQorCQlpZiAhY2F1Z2h0CisJCSAgICBsZXQgZXJybXNnMyA9IHY6ZXJybXNnCisJCSAgICAiIERvIGNhbGwgUyg0KSBoZXJlIGlmIG5vdCBleGVjdXRlZCBpbiA6Y2F0Y2guCisJCSAgICBzaWxlbnQhIGNhbGwgUyg0KQorCQllbmRpZgorCQlYcGF0aCAxMDQ4NTc2CQkJIiBYOiAxMDQ4NTc2CisJCWlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCAyMDk3MTUyCQkiIFg6IDAKKwkJZW5kaWYKKwkJbGV0IHY6ZXJybXNnID0gZXJybXNnMworCQlpZiAhTVNHKCdFNDkyJywgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIpCisJCSAgICBYcGF0aCA0MTk0MzA0CQkiIFg6IDAKKwkJZW5kaWYKKwkJc2lsZW50ISBjYWxsIFMoNSkJCQkiIFg6IDMgKiAyNTYKKwkJIiBCcmVhayBvdXQgb2YgdHJ5IGNvbmRzIHRoYXQgY292ZXIgIjpzaWxlbnQhIi4gIFRoaXMgYWxzbworCQkiIGRpc2NhcmRzIHRoZSBhYm9ydGluZyBlcnJvciB3aGVuICRWSU1OT0VSUlRIUk9XIGlzIG5vbi16ZXJvLgorCQlicmVhaworCSAgICBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDgzODg2MDgJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgIiBUaGlzIGlzIGEgZG91YmxlICI6c2lsZW50ISIgKHNlZSBjYWxsZXIpLgorICAgIHNpbGVudCEgY2FsbCBTKDYpCQkJCQkiIFg6IDMgKiAxMDI0CitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgQmFyKCkKKyAgICB0cnkKKwlzaWxlbnQhIGNhbGwgUygyKQkJCQkiIFg6IDMgKiA0CisJCQkJCQkJIiBYOiAzICogNDA5NgorCXNpbGVudCEgZXhlY3V0ZSAiY2FsbCBGb28oKSB8IGNhbGwgUyg3KSIKKwlzaWxlbnQhIGNhbGwgUyg4KQkJCQkiIFg6IDMgKiAxNjM4NAorICAgIGVuZHRyeQkiIG5vcm1hbCBlbmQgb2YgdHJ5IGNvbmQgdGhhdCBjb3ZlcnMgIjpzaWxlbnQhIgorICAgICIgVGhpcyBoYXMgYSAiOnNpbGVudCEiIGZyb20gdGhlIGNhbGxlcjoKKyAgICBjYWxsIFMoOSkJCQkJCQkiIFg6IDMgKiA2NTUzNgorZW5kZnVuY3Rpb24KKworc2lsZW50ISBjYWxsIFMoMSkJCQkJCSIgWDogMyAqIDEKK3NpbGVudCEgY2FsbCBCYXIoKQorc2lsZW50ISBjYWxsIFMoMTApCQkJCQkiIFg6IDMgKiAyNjIxNDQKKworbGV0IGV4cGVjdGVkID0gIkUxRTJFM0U0RTVFNkU3RThFOUUxMCIKK2lmIHRha2VuICE9IGV4cGVjdGVkCisgICAgWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAwCisgICAgWG91dCAiJ3Rha2VuJyBpcyIgdGFrZW4gImluc3RlYWQgb2YiIGV4cGVjdGVkCitlbmRpZgorCithdWdyb3VwIFRNUAorICAgIGF1dG9jbWQgQnVmV3JpdGVQb3N0ICogWHBhdGggMzM1NTQ0MzIJIiBYOiAzMzU1NDQzMgorYXVncm91cCBFTkQKKworWHBhdGggNjcxMDg4NjQJCQkJCSIgWDogNjcxMDg4NjQKK3dyaXRlIC9pL20vcC9vL3Mvcy9pL2IvbC9lCitYcGF0aCAxMzQyMTc3MjgJCQkJCSIgWDogMTM0MjE3NzI4CisKK2F1dG9jbWQhIFRNUAordW5sZXQhIGNhdWdodCBlcnJtc2czIHRha2VuIGV4cGVjdGVkCitkZWxmdW5jdGlvbiBTCitkZWxmdW5jdGlvbiBGb28KK2RlbGZ1bmN0aW9uIEJhcgorZGVsZnVuY3Rpb24gTVNHCisKK1hjaGVjayAyMzY5NzgxMjcKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDY0OiAgRXJyb3IgZXhjZXB0aW9ucyBhZnRlciBlcnJvciwgaW50ZXJydXB0IG9yIDp0aHJvdwkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYW4gZXJyb3Igb2NjdXJzIGFmdGVyIGFuIGludGVycnVwdCBvciBhIDp0aHJvdyBidXQgYmVmb3JlCisiCSAgICBhIG1hdGNoaW5nIDpjYXRjaCBpcyByZWFjaGVkLCBhbGwgZm9sbG93aW5nIDpjYXRjaGVzIG9mIHRoYXQgdHJ5CisiCSAgICBibG9jayBhcmUgaWdub3JlZCwgYnV0IHRoZSBlcnJvciBleGNlcHRpb24gY2FuIGJlIGNhdWdodCBieSB0aGUgbmV4dAorIgkgICAgc3Vycm91bmRpbmcgdHJ5IGNvbmRpdGlvbmFsLiAgQW55IHByZXZpb3VzIGVycm9yIGV4Y2VwdGlvbiBpcworIgkgICAgZGlzY2FyZGVkLiAgQW4gZXJyb3IgaXMgaWdub3JlZCB3aGVuIHRoZXJlIGlzIGEgcHJldmlvdXMgZXJyb3IgdGhhdAorIgkgICAgaGFzIG5vdCBiZWVuIGNhdWdodC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitpZiBFeHRyYVZpbSgpCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlYcGF0aCAxCQkJCSIgWDogMQorCQlsZXQgY2F1Z2h0ID0gMAorCQl3aGlsZSAxCisiCQkgICAgaWYgMQorCQkgICAgIiBNaXNzaW5nIDplbmRpZgorCQllbmR3aGlsZQkiIHRocm93IGVycm9yIGV4Y2VwdGlvbgorCSAgICBjYXRjaCAvXlZpbSgvCisJCWxldCBjYXVnaHQgPSAxCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMgkJCQkiIFg6IDIKKwkJaWYgY2F1Z2h0IHx8ICRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCA0CQkJIiBYOiA0CisJCWVuZGlmCisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggOAkJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorCWZpbmFsbHkKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICB0cnkKKwkJWHBhdGggMTYJCQkiIFg6IDE2CisJCWxldCBjYXVnaHQgPSAwCisJCXRyeQorIgkJICAgIGlmIDEKKwkJICAgICIgTWlzc2luZyA6ZW5kaWYKKwkJY2F0Y2ggLy4qLwkiIHRocm93IGVycm9yIGV4Y2VwdGlvbgorCQkgICAgWHBhdGggMzIJCQkiIFg6IDAKKwkJY2F0Y2ggLy4qLworCQkgICAgWHBhdGggNjQJCQkiIFg6IDAKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC9eVmltKC8KKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlYcGF0aCAxMjgJCQkiIFg6IDEyOAorCQlpZiBjYXVnaHQgfHwgJFZJTU5PRVJSVEhST1cKKwkJICAgIFhwYXRoIDI1NgkJCSIgWDogMjU2CisJCWVuZGlmCisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggNTEyCQkJCSIgWDogMAorCSAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisJZmluYWxseQorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlsZXQgY2F1Z2h0ID0gMAorCQl0cnkKKwkJICAgIFhwYXRoIDEwMjQJCQkiIFg6IDEwMjQKKwkJICAgICJJTlRFUlJVUFQKKwkJY2F0Y2ggL2RvX25vdF9jYXRjaC8KKwkJICAgIFhwYXRoIDIwNDgJCQkiIFg6IDAKKyIJCSAgICBpZiAxCisJCSAgICAiIE1pc3NpbmcgOmVuZGlmCisJCWNhdGNoIC8uKi8JIiB0aHJvdyBlcnJvciBleGNlcHRpb24KKwkJICAgIFhwYXRoIDQwOTYJCQkiIFg6IDAKKwkJY2F0Y2ggLy4qLworCQkgICAgWHBhdGggODE5MgkJCSIgWDogMAorCQllbmR0cnkKKwkgICAgY2F0Y2ggL15WaW0oLworCQlsZXQgY2F1Z2h0ID0gMQorCSAgICBmaW5hbGx5CisJCVhwYXRoIDE2Mzg0CQkJIiBYOiAxNjM4NAorCQlpZiBjYXVnaHQgfHwgJFZJTU5PRVJSVEhST1cKKwkJICAgIFhwYXRoIDMyNzY4CQkJIiBYOiAzMjc2OAorCQllbmRpZgorCSAgICBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogMAorCSAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisJZmluYWxseQorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlsZXQgY2F1Z2h0ID0gMAorCQl0cnkKKwkJICAgIFhwYXRoIDEzMTA3MgkJIiBYOiAxMzEwNzIKKwkJICAgIHRocm93ICJ4IgorCQljYXRjaCAvZG9fbm90X2NhdGNoLworCQkgICAgWHBhdGggMjYyMTQ0CQkiIFg6IDAKKyIJCSAgICBpZiAxCisJCSAgICAiIE1pc3NpbmcgOmVuZGlmCisJCWNhdGNoIC94LwkiIHRocm93IGVycm9yIGV4Y2VwdGlvbgorCQkgICAgWHBhdGggNTI0Mjg4CQkiIFg6IDAKKwkJY2F0Y2ggLy4qLworCQkgICBYcGF0aCAxMDQ4NTc2CQkiIFg6IDAKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC9eVmltKC8KKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlYcGF0aCAyMDk3MTUyCQkJIiBYOiAyMDk3MTUyCisJCWlmIGNhdWdodCB8fCAkVklNTk9FUlJUSFJPVworCQkgICAgWHBhdGggNDE5NDMwNAkJIiBYOiA0MTk0MzA0CisJCWVuZGlmCisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggODM4ODYwOAkJCSIgWDogMAorCSAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisJZmluYWxseQorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlsZXQgY2F1Z2h0ID0gMAorCQlYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKyIJCWVuZGlmCQkiIDplbmRpZiB3aXRob3V0IDppZjsgdGhyb3cgZXJyb3IgZXhjZXB0aW9uCisiCQlpZiAxCisJCSIgTWlzc2luZyA6ZW5kaWYKKwkgICAgY2F0Y2ggL2RvX25vdF9jYXRjaC8gIiBpZ25vcmUgbmV3IGVycm9yCisJCVhwYXRoIDMzNTU0NDMyCQkJIiBYOiAwCisJICAgIGNhdGNoIC9eVmltKGVuZGlmKTovCisJCWxldCBjYXVnaHQgPSAxCisJICAgIGNhdGNoIC9eVmltKC8KKwkJWHBhdGggNjcxMDg4NjQJCQkiIFg6IDAKKwkgICAgZmluYWxseQorCQlYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDEzNDIxNzcyOAorCQlpZiBjYXVnaHQgfHwgJFZJTU5PRVJSVEhST1cKKwkJICAgIFhwYXRoIDI2ODQzNTQ1NgkJIiBYOiAyNjg0MzU0NTYKKwkJZW5kaWYKKwkgICAgZW5kdHJ5CisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCA1MzY4NzA5MTIJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorCWZpbmFsbHkKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorCisgICAgWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKworZW5kaWYKKworWGNoZWNrIDE0OTk2NDUzMzUKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDY1OiAgRXJyb3JzIGluIHRoZSAvcGF0dGVybi8gYXJndW1lbnQgb2YgYSA6Y2F0Y2gJCSAgICB7e3sxCisiCisiCSAgICBPbiBhbiBlcnJvciBpbiB0aGUgL3BhdHRlcm4vIGFyZ3VtZW50IG9mIGEgOmNhdGNoLCB0aGUgOmNhdGNoIGRvZXMKKyIJICAgIG5vdCBtYXRjaC4gIEFueSBmb2xsb3dpbmcgOmNhdGNoZXMgb2YgdGhlIHNhbWUgOnRyeS86ZW5kdHJ5IGRvbid0CisiCSAgICBtYXRjaCBlaXRoZXIuICBGaW5hbGx5IGNsYXVzZXMgYXJlIGV4ZWN1dGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBNU0coZW5yLCBlbXNnKQorICAgIGxldCBlbmdsaXNoID0gdjpsYW5nID09ICJDIiB8fCB2OmxhbmcgPX4gJ15bRWVdbicKKyAgICBpZiBhOmVuciA9PSAiIgorCVhvdXQgIlRPRE86IEFkZCBtZXNzYWdlIG51bWJlciBmb3I6IiBhOmVtc2cKKwlsZXQgdjplcnJtc2cgPSAiOiIgLiB2OmVycm1zZworICAgIGVuZGlmCisgICAgbGV0IG1hdGNoID0gMQorICAgIGlmIHY6ZXJybXNnICF+ICdeJy5hOmVuci4nOicgfHwgKGVuZ2xpc2ggJiYgdjplcnJtc2cgIX4gYTplbXNnKQorCWxldCBtYXRjaCA9IDAKKwlpZiB2OmVycm1zZyA9PSAiIgorCSAgICBYb3V0ICJNZXNzYWdlIG1pc3NpbmcuIgorCWVsc2UKKwkgICAgbGV0IHY6ZXJybXNnID0gZXNjYXBlKHY6ZXJybXNnLCAnIicpCisJICAgIFhvdXQgIlVuZXhwZWN0ZWQgbWVzc2FnZToiIHY6ZXJybXNnCisJZW5kaWYKKyAgICBlbmRpZgorICAgIHJldHVybiBtYXRjaAorZW5kZnVuY3Rpb24KKwordHJ5CisgICAgdHJ5CisJWHBhdGggMQkJCQkJIiBYOiAxCisJdGhyb3cgIm9vcHMiCisgICAgY2F0Y2ggL15vb3BzJC8KKwlYcGF0aCAyCQkJCQkiIFg6IDIKKyAgICBjYXRjaCAvXCkvCQkiIG5vdCBjaGVja2VkOyBleGNlcHRpb24gaGFzIGFscmVhZHkgYmVlbiBjYXVnaHQKKwlYcGF0aCA0CQkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA4CQkJCQkiIFg6IDgKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCAxNgkJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK2Z1bmN0aW9uISBGKCkKKyAgICB0cnkKKwlsZXQgY2F1Z2h0ID0gMAorCXRyeQorCSAgICB0cnkKKwkJWHBhdGggMzIJCQkiIFg6IDMyCisJCXRocm93ICJhYiIKKwkgICAgY2F0Y2ggL2FiYy8JIiBkb2VzIG5vdCBjYXRjaAorCQlYcGF0aCA2NAkJCSIgWDogMAorCSAgICBjYXRjaCAvXCkvCSIgZXJyb3I7IGRpc2NhcmRzIGV4Y2VwdGlvbgorCQlYcGF0aCAxMjgJCQkiIFg6IDAKKwkgICAgY2F0Y2ggLy4qLwkiIG5vdCBjaGVja2VkCisJCVhwYXRoIDI1NgkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCVhwYXRoIDUxMgkJCSIgWDogNTEyCisJICAgIGVuZHRyeQorCSAgICBYcGF0aCAxMDI0CQkJCSIgWDogMAorCWNhdGNoIC9eYWIkLwkiIGNoZWNrZWQsIGJ1dCBvcmlnaW5hbCBleGNlcHRpb24gaXMgZGlzY2FyZGVkCisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAwCisJY2F0Y2ggL15WaW0oY2F0Y2gpOi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW0oY2F0Y2gpOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDgxOTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgY2F1Z2h0ID8gIU1TRygnRTU1JywgJ1VubWF0Y2hlZCBcXCknKQorCQkJXCA6ICFNU0coJ0U0NzUnLCAiSW52YWxpZCBhcmd1bWVudCIpCisJCVhwYXRoIDE2Mzg0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGlmICFjYXVnaHQKKwkJcmV0dXJuCXwgIiBkaXNjYXJkIGVycm9yCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDMyNzY4CQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKK2VuZGZ1bmN0aW9uCisKK2NhbGwgRigpCitYcGF0aCA2NTUzNgkJCQkJIiBYOiA2NTUzNgorCitkZWxmdW5jdGlvbiBNU0cKK2RlbGZ1bmN0aW9uIEYKK3VubGV0ISBjYXVnaHQKKworWGNoZWNrIDcwMTg3CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA2NjogIFN0b3AgcmFuZ2UgOmNhbGwgb24gZXJyb3IsIGludGVycnVwdCwgb3IgOnRocm93CQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhIGZ1bmN0aW9uIHdoaWNoIGlzIG11bHRpcGx5IGNhbGxlZCBmb3IgYSByYW5nZSBzaW5jZSBpdAorIgkgICAgZG9lc24ndCBoYW5kbGUgdGhlIHJhbmdlIGl0c2VsZiBoYXMgYW4gZXJyb3IgaW4gYSBjb21tYW5kCisiCSAgICBkeW5hbWljYWxseSBlbmNsb3NlZCBieSA6dHJ5LzplbmR0cnkgb3IgZ2V0cyBhbiBpbnRlcnJ1cHQgb3IKKyIJICAgIGV4ZWN1dGVzIGEgOnRocm93LCBubyBtb3JlIGNhbGxzIGZvciB0aGUgcmVtYWluaW5nIGxpbmVzIGluIHRoZQorIgkgICAgcmFuZ2UgYXJlIG1hZGUuICBPbiBhbiBlcnJvciBpbiBhIGNvbW1hbmQgbm90IGR5bmFtaWNhbGx5IGVuY2xvc2VkCisiCSAgICBieSA6dHJ5LzplbmR0cnksIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCBhZ2FpbiBmb3IgdGhlIHJlbWFpbmluZworIgkgICAgbGluZXMgaW4gdGhlIHJhbmdlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIGxldCBmaWxlID0gdGVtcG5hbWUoKQorICAgIGV4ZWMgImVkaXQiIGZpbGUKKworICAgIGluc2VydAorbGluZSAxCitsaW5lIDIKK2xpbmUgMworLgorCisgICAgWGxvb3BJTklUISAxIDIKKworICAgIGxldCB0YWtlbiA9ICIiCisgICAgbGV0IGV4cGVjdGVkID0gIkcxRUYxRSgxKUYxRSgyKUYxRSgzKUcyRUYyRSgxKUczSUYzSSgxKUc0VEY0VCgxKUc1QUY1QSgxKSIKKworICAgIGZ1bmN0aW9uISBGKHJlYXNvbiwgbikgYWJvcnQKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiRiIgLiBhOm4gLgorCSAgICBcIHN1YnN0aXR1dGUoYTpyZWFzb24sICdcKFxsXCkuKicsICdcdVwxJywgIiIpIC4KKwkgICAgXCAiKCIgLiBsaW5lKCIuIikgLiAiKSIKKworCWlmIGE6cmVhc29uID09ICJlcnJvciIKKwkgICAgYXNkZgorCWVsc2VpZiBhOnJlYXNvbiA9PSAiaW50ZXJydXB0IgorCSAgICAiSU5URVJSVVBUCisJICAgIGxldCBkdW1teSA9IDAKKwllbHNlaWYgYTpyZWFzb24gPT0gInRocm93IgorCSAgICB0aHJvdyAieHl6IgorCWVsc2VpZiBhOnJlYXNvbiA9PSAiYWJvcnRpbmcgZXJyb3IiCisJICAgIFhsb29wTkVYVAorCSAgICBpZiBnOnRha2VuICE9IGc6ZXhwZWN0ZWQKKwkJWGxvb3AgMQkJCQkiIFg6IDAKKwkJWG91dCAiJ3Rha2VuJyBpcyIgZzp0YWtlbiAiaW5zdGVhZCBvZiIgZzpleHBlY3RlZAorCSAgICBlbmRpZgorCSAgICB0cnkKKwkJYndpcGVvdXQhCisJCWNhbGwgZGVsZXRlKGZpbGUpCisJCWFzZGYKKwkgICAgZW5kdHJ5CisJZW5kaWYKKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIEcocmVhc29uLCBuKQorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJHIiAuIGE6biAuCisJICAgIFwgc3Vic3RpdHV0ZShhOnJlYXNvbiwgJ1woXGxcKS4qJywgJ1x1XDEnLCAiIikKKwkxLDNjYWxsIEYoYTpyZWFzb24sIGE6bikKKyAgICBlbmRmdW5jdGlvbgorCisgICAgWHBhdGggOAkJCQkJIiBYOiA4CisgICAgY2FsbCBHKCJlcnJvciIsIDEpCisgICAgdHJ5CisJWHBhdGggMTYJCQkJIiBYOiAxNgorCXRyeQorCSAgICBjYWxsIEcoImVycm9yIiwgMikKKwkgICAgWHBhdGggMzIJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCA2NAkJCQkiIFg6IDY0CisJICAgIHRyeQorCQljYWxsIEcoImludGVycnVwdCIsIDMpCisJCVhwYXRoIDEyOAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCVhwYXRoIDI1NgkJCSIgWDogMjU2CisJCXRyeQorCQkgICAgY2FsbCBHKCJ0aHJvdyIsIDQpCisJCSAgICBYcGF0aCA1MTIJCQkiIFg6IDAKKwkJZW5kdHJ5CisJICAgIGVuZHRyeQorCWVuZHRyeQorICAgIGNhdGNoIC94eXovCisJWHBhdGggMTAyNAkJCQkiIFg6IDEwMjQKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMjA0OAkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgRXh0cmFWaW1UaHJvd3BvaW50KCkKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA0MDk2CQkJCQkiIFg6IDQwOTYKKyAgICBjYWxsIEcoImFib3J0aW5nIGVycm9yIiwgNSkKKyAgICBYcGF0aCA4MTkyCQkJCQkiIFg6IDAKKyAgICBYb3V0ICIndGFrZW4nIGlzIiB0YWtlbiAiaW5zdGVhZCBvZiIgZXhwZWN0ZWQKKworZW5kaWYKKworWGNoZWNrIDU0NjQKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDY3OiAgOnRocm93IGFjY3Jvc3MgOmNhbGwgY29tbWFuZAkJCQkgICAge3t7MQorIgorIgkgICAgT24gYSBjYWxsIGNvbW1hbmQsIGFuIGV4Y2VwdGlvbiBtaWdodCBiZSB0aHJvd24gd2hlbiBldmFsdWF0aW5nIHRoZQorIgkgICAgZnVuY3Rpb24gbmFtZSwgZHVyaW5nIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cywgb3Igd2hlbiB0aGUKKyIJICAgIGZ1bmN0aW9uIGlzIGJlaW5nIGV4ZWN1dGVkLiAgVGhlIGV4Y2VwdGlvbiBjYW4gYmUgY2F1Z2h0IGJ5IHRoZQorIgkgICAgY2FsbGVyLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBUSFJPVyh4LCBuKQorICAgIGlmIGE6biA9PSAxCisJWHBhdGggMQkJCQkJIiBYOiAxCisgICAgZWxzZWlmIGE6biA9PSAyCisJWHBhdGggMgkJCQkJIiBYOiAyCisgICAgZWxzZWlmIGE6biA9PSAzCisJWHBhdGggNAkJCQkJIiBYOiA0CisgICAgZW5kaWYKKyAgICB0aHJvdyBhOngKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBOQU1FKHgsIG4pCisgICAgaWYgYTpuID09IDEKKwlYcGF0aCA4CQkJCQkiIFg6IDAKKyAgICBlbHNlaWYgYTpuID09IDIKKwlYcGF0aCAxNgkJCQkiIFg6IDE2CisgICAgZWxzZWlmIGE6biA9PSAzCisJWHBhdGggMzIJCQkJIiBYOiAzMgorICAgIGVsc2VpZiBhOm4gPT0gNAorCVhwYXRoIDY0CQkJCSIgWDogNjQKKyAgICBlbmRpZgorICAgIHJldHVybiBhOngKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBBUkcoeCwgbikKKyAgICBpZiBhOm4gPT0gMQorCVhwYXRoIDEyOAkJCQkiIFg6IDAKKyAgICBlbHNlaWYgYTpuID09IDIKKwlYcGF0aCAyNTYJCQkJIiBYOiAwCisgICAgZWxzZWlmIGE6biA9PSAzCisJWHBhdGggNTEyCQkJCSIgWDogNTEyCisgICAgZWxzZWlmIGE6biA9PSA0CisJWHBhdGggMTAyNAkJCQkiIFg6IDEwMjQKKyAgICBlbmRpZgorICAgIHJldHVybiBhOngKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBGKHgsIG4pCisgICAgaWYgYTpuID09IDIKKwlYcGF0aCAyMDQ4CQkJCSIgWDogMAorICAgIGVsc2VpZiBhOm4gPT0gNAorCVhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK3RyeQorCisgICAgdHJ5CisJWHBhdGggODE5MgkJCQkiIFg6IDgxOTIKKwljYWxsIHtOQU1FKFRIUk9XKCJuYW1lIiwgMSksIDEpfShBUkcoNDcxMSwgMSksIDEpCisJWHBhdGggMTYzODQJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15uYW1lJC8KKwlYcGF0aCAzMjc2OAkJCQkiIFg6IDMyNzY4CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDY1NTM2CQkJCSIgWDogMAorCVhvdXQgIjE6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggMTMxMDcyCQkJCSIgWDogMTMxMDcyCisJY2FsbCB7TkFNRSgiRiIsIDIpfShBUkcoVEhST1coImFyZyIsIDIpLCAyKSwgMikKKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15hcmckLworCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorCVhvdXQgIjI6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKwljYWxsIHtOQU1FKCJUSFJPVyIsIDMpfShBUkcoImNhbGwiLCAzKSwgMykKKwlYcGF0aCA0MTk0MzA0CQkJCSIgWDogMAorICAgIGNhdGNoIC9eY2FsbCQvCisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDgzODg2MDgKKyAgICBjYXRjaCAvXjAkLwkgICAgIiBkZWZhdWx0IHJldHVybiB2YWx1ZQorCVhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMAorCVhvdXQgIjM6IiB2OnRocm93cG9pbnQKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAwCisJWG91dCAiMzoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CisJY2FsbCB7TkFNRSgiRiIsIDQpfShBUkcoNDcxMSwgNCksIDQpCisJWHBhdGggMTM0MjE3NzI4CQkJCSIgWDogMTM0MjE3NzI4CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKwlYb3V0ICI0OiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworY2F0Y2ggL14wJC8JICAgICIgZGVmYXVsdCByZXR1cm4gdmFsdWUKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCisgICAgWG91dCB2OnRocm93cG9pbnQKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorCitkZWxmdW5jdGlvbiBGCisKK1hjaGVjayAyMTI1MTQ0MjMKKworIiBMZWF2ZSBUSFJPVygpLCBOQU1FKCksIGFuZCBBUkcoKSBmb3IgdGhlIG5leHQgdGVzdC4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDY4OiAgOnRocm93IGFjY3Jvc3MgZnVuY3Rpb24gY2FsbHMgaW4gZXhwcmVzc2lvbnMJCSAgICB7e3sxCisiCisiCSAgICBPbiBhIGZ1bmN0aW9uIGNhbGwgd2l0aGluIGFuIGV4cHJlc3Npb24sIGFuIGV4Y2VwdGlvbiBtaWdodCBiZQorIgkgICAgdGhyb3duIHdoZW4gZXZhbHVhdGluZyB0aGUgZnVuY3Rpb24gbmFtZSwgZHVyaW5nIGV2YWx1YXRpb24gb2YgdGhlCisiCSAgICBhcmd1bWVudHMsIG9yIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGV4ZWN1dGVkLiAgVGhlIGV4Y2VwdGlvbgorIgkgICAgY2FuIGJlIGNhdWdodCBieSB0aGUgY2FsbGVyLgorIgorIgkgICAgVGhpcyB0ZXN0IHJldXNlcyB0aGUgZnVuY3Rpb25zIFRIUk9XKCksIE5BTUUoKSwgYW5kIEFSRygpIGZyb20gdGhlCisiCSAgICBwcmV2aW91cyB0ZXN0LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBGKHgsIG4pCisgICAgaWYgYTpuID09IDIKKwlYcGF0aCAyMDQ4CQkJCSIgWDogMAorICAgIGVsc2VpZiBhOm4gPT0gNAorCVhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisgICAgZW5kaWYKKyAgICByZXR1cm4gYTp4CitlbmRmdW5jdGlvbgorCit1bmxldCEgdmFyMSB2YXIyIHZhcjMgdmFyNAorCit0cnkKKworICAgIHRyeQorCVhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJbGV0IHZhcjEgPSB7TkFNRShUSFJPVygibmFtZSIsIDEpLCAxKX0oQVJHKDQ3MTEsIDEpLCAxKQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMAorICAgIGNhdGNoIC9ebmFtZSQvCisJWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA2NTUzNgkJCQkiIFg6IDAKKwlYb3V0ICIxOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDEzMTA3MgkJCQkiIFg6IDEzMTA3MgorCWxldCB2YXIyID0ge05BTUUoIkYiLCAyKX0oQVJHKFRIUk9XKCJhcmciLCAyKSwgMiksIDIpCisJWHBhdGggMjYyMTQ0CQkJCSIgWDogMAorICAgIGNhdGNoIC9eYXJnJC8KKwlYcGF0aCA1MjQyODgJCQkJIiBYOiA1MjQyODgKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKwlYb3V0ICIyOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAyMDk3MTUyCisJbGV0IHZhcjMgPSB7TkFNRSgiVEhST1ciLCAzKX0oQVJHKCJjYWxsIiwgMyksIDMpCisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmNhbGwkLworCVhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisgICAgY2F0Y2ggL14wJC8JICAgICIgZGVmYXVsdCByZXR1cm4gdmFsdWUKKwlYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKKwlYb3V0ICIzOiIgdjp0aHJvd3BvaW50CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMAorCVhvdXQgIjM6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNjcxMDg4NjQJCQkJIiBYOiA2NzEwODg2NAorCWxldCB2YXI0ID0ge05BTUUoIkYiLCA0KX0oQVJHKDQ3MTEsIDQpLCA0KQorCVhwYXRoIDEzNDIxNzcyOAkJCQkiIFg6IDEzNDIxNzcyOAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAwCisJWG91dCAiNDoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKK2NhdGNoIC9eMCQvCSAgICAiIGRlZmF1bHQgcmV0dXJuIHZhbHVlCisgICAgWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorICAgIFhvdXQgdjp0aHJvd3BvaW50CitjYXRjaCAvLiovCisgICAgWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitlbmR0cnkKKworaWYgZXhpc3RzKCJ2YXIxIikgfHwgZXhpc3RzKCJ2YXIyIikgfHwgZXhpc3RzKCJ2YXIzIikgfHwKKwkgICAgXCAhZXhpc3RzKCJ2YXI0IikgfHwgdmFyNCAhPSA0NzExCisgICAgIiBUaGUgWHBhdGggY29tbWFuZCBkb2VzIG5vdCBhY2NlcHQgMl4zMSAobmVnYXRpdmUpOyBhZGQgZXhwbGljaXRseToKKyAgICBsZXQgWHBhdGggPSBYcGF0aCArIDIxNDc0ODM2NDgJCSIgWDogMAorICAgIGlmIGV4aXN0cygidmFyMSIpCisJWG91dCAidmFyMSA9IiB2YXIxCisgICAgZW5kaWYKKyAgICBpZiBleGlzdHMoInZhcjIiKQorCVhvdXQgInZhcjIgPSIgdmFyMgorICAgIGVuZGlmCisgICAgaWYgZXhpc3RzKCJ2YXIzIikKKwlYb3V0ICJ2YXIzID0iIHZhcjMKKyAgICBlbmRpZgorICAgIGlmICFleGlzdHMoInZhcjQiKQorCVhvdXQgInZhcjQgdW5zZXQiCisgICAgZWxzZWlmIHZhcjQgIT0gNDcxMQorCVhvdXQgInZhcjQgPSIgdmFyNAorICAgIGVuZGlmCitlbmRpZgorCit1bmxldCEgdmFyMSB2YXIyIHZhcjMgdmFyNAorZGVsZnVuY3Rpb24gVEhST1cKK2RlbGZ1bmN0aW9uIE5BTUUKK2RlbGZ1bmN0aW9uIEFSRworZGVsZnVuY3Rpb24gRgorCitYY2hlY2sgMjEyNTE0NDIzCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA2OTogIDp0aHJvdyBhY2Nyb3NzIDppZiwgOmVsc2VpZiwgOndoaWxlCQkJCSAgICB7e3sxCisiCisiCSAgICBPbiBhbiA6aWYsIDplbHNlaWYsIG9yIDp3aGlsZSBjb21tYW5kLCBhbiBleGNlcHRpb24gbWlnaHQgYmUgdGhyb3duCisiCSAgICBkdXJpbmcgZXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiB0byB0ZXN0LiAgVGhlIGV4Y2VwdGlvbiBjYW4gYmUKKyIJICAgIGNhdWdodCBieSB0aGUgc2NyaXB0LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK1hsb29wSU5JVCEgMSAyCisKK2Z1bmN0aW9uISBUSFJPVyh4KQorICAgIFhsb29wTkVYVAorICAgIFhsb29wIDEJCQkJCSIgWDogMSArIDIgKyA0CisgICAgdGhyb3cgYTp4CitlbmRmdW5jdGlvbgorCit0cnkKKworICAgIHRyeQorCVhwYXRoIDgJCQkJCSIgWDogOAorCWlmIDQ3MTEgPT0gVEhST1coImlmIikgKyAxMTEKKwkgICAgWHBhdGggMTYJCQkJIiBYOiAwCisJZWxzZQorCSAgICBYcGF0aCAzMgkJCQkiIFg6IDAKKwllbmRpZgorCVhwYXRoIDY0CQkJCSIgWDogMAorICAgIGNhdGNoIC9eaWYkLworCVhwYXRoIDEyOAkJCQkiIFg6IDEyOAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAyNTYJCQkJIiBYOiAwCisJWG91dCAiaWY6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNTEyCQkJCSIgWDogNTEyCisJaWYgNDcxMSA9PSA0ICsgNyArIDEgKyAxCisJICAgIFhwYXRoIDEwMjQJCQkJIiBYOiAwCisJZWxzZWlmIDQ3MTEgPT0gVEhST1coImVsc2VpZiIpICsgMjIyCisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAwCisJZWxzZQorCSAgICBYcGF0aCA0MDk2CQkJCSIgWDogMAorCWVuZGlmCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmVsc2VpZiQvCisJWHBhdGggMTYzODQJCQkJIiBYOiAxNjM4NAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAzMjc2OAkJCQkiIFg6IDAKKwlYb3V0ICJlbHNlaWY6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNjU1MzYJCQkJIiBYOiA2NTUzNgorCXdoaWxlIDQ3MTEgPT0gVEhST1coIndoaWxlIikgKyA0NzExCisJICAgIFhwYXRoIDEzMTA3MgkJCSIgWDogMAorCSAgICBicmVhaworCWVuZHdoaWxlCisJWHBhdGggMjYyMTQ0CQkJCSIgWDogMAorICAgIGNhdGNoIC9ed2hpbGUkLworCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorCVhvdXQgIndoaWxlOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworY2F0Y2ggL14wJC8JICAgICIgZGVmYXVsdCByZXR1cm4gdmFsdWUKKyAgICBYcGF0aCAyMDk3MTUyCQkJCSIgWDogMAorICAgIFhvdXQgdjp0aHJvd3BvaW50CitjYXRjaCAvLiovCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIFhwYXRoIDQxOTQzMDQJCQkJIiBYOiAwCitlbmR0cnkKKworWHBhdGggODM4ODYwOAkJCQkJIiBYOiA4Mzg4NjA4CisKK2RlbGZ1bmN0aW9uIFRIUk9XCisKK1hjaGVjayA4OTk1NDcxCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA3MDogIDp0aHJvdyBhY2Nyb3NzIDpyZXR1cm4gb3IgOnRocm93CQkJCSAgICB7e3sxCisiCisiCSAgICBPbiBhIDpyZXR1cm4gb3IgOnRocm93IGNvbW1hbmQsIGFuIGV4Y2VwdGlvbiBtaWdodCBiZSB0aHJvd24gZHVyaW5nCisiCSAgICBldmFsdWF0aW9uIG9mIHRoZSBleHByZXNzaW9uIHRvIHJldHVybiBvciB0aHJvdywgcmVzcGVjdGl2ZWx5LiAgVGhlCisiCSAgICBleGNlcHRpb24gY2FuIGJlIGNhdWdodCBieSB0aGUgc2NyaXB0LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2xldCB0YWtlbiA9ICIiCisKK2Z1bmN0aW9uISBUSFJPVyh4LCBuKQorICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJUIiAuIGE6bgorICAgIHRocm93IGE6eAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEYoeCwgeSwgbikKKyAgICBsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiRiIgLiBhOm4KKyAgICByZXR1cm4gYTp4ICsgVEhST1coYTp5LCBhOm4pCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRyh4LCB5LCBuKQorICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJHIiAuIGE6bgorICAgIHRocm93IGE6eCAuIFRIUk9XKGE6eSwgYTpuKQorICAgIHJldHVybiBhOngKK2VuZGZ1bmN0aW9uCisKK3RyeQorICAgIHRyeQorCVhwYXRoIDEJCQkJCSIgWDogMQorCWNhbGwgRig0NzExLCAicmV0dXJuIiwgMSkKKwlYcGF0aCAyCQkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnJldHVybiQvCisJWHBhdGggNAkJCQkJIiBYOiA0CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDgJCQkJCSIgWDogMAorCVhvdXQgInJldHVybjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAxNgkJCQkiIFg6IDE2CisJbGV0IHZhciA9IEYoNDcxMiwgInJldHVybi12YXIiLCAyKQorCVhwYXRoIDMyCQkJCSIgWDogMAorICAgIGNhdGNoIC9ecmV0dXJuLXZhciQvCisJWHBhdGggNjQJCQkJIiBYOiA2NAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxMjgJCQkJIiBYOiAwCisJWG91dCAicmV0dXJuLXZhcjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCXVubGV0ISB2YXIKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCXRocm93ICJleGNlcHQxIiAuIFRIUk9XKCJ0aHJvdzEiLCAzKQorCVhwYXRoIDUxMgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmV4Y2VwdDEvCisJWHBhdGggMTAyNAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnRocm93MSQvCisJWHBhdGggMjA0OAkJCQkiIFg6IDIwNDgKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNDA5NgkJCQkiIFg6IDAKKwlYb3V0ICJ0aHJvdzE6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggODE5MgkJCQkiIFg6IDgxOTIKKwljYWxsIEcoImV4Y2VwdDIiLCAidGhyb3cyIiwgNCkKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmV4Y2VwdDIvCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisgICAgY2F0Y2ggL150aHJvdzIkLworCVhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMTMxMDcyCQkJCSIgWDogMAorCVhvdXQgInRocm93MjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAyNjIxNDQKKwlsZXQgdmFyID0gRygiZXhjZXB0MyIsICJ0aHJvdzMiLCA1KQorCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmV4Y2VwdDMvCisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnRocm93MyQvCisJWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKKwlYb3V0ICJ0aHJvdzM6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwl1bmxldCEgdmFyCisgICAgZW5kdHJ5CisKKyAgICBsZXQgZXhwZWN0ZWQgPSAiRjFUMUYyVDJUM0c0VDRHNVQ1IgorICAgIGlmIHRha2VuICE9IGV4cGVjdGVkCisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDAKKwlYb3V0ICIndGFrZW4nIGlzIiB0YWtlbiAiaW5zdGVhZCBvZiIgZXhwZWN0ZWQKKyAgICBlbmRpZgorCitjYXRjaCAvXjAkLwkgICAgIiBkZWZhdWx0IHJldHVybiB2YWx1ZQorICAgIFhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMAorICAgIFhvdXQgdjp0aHJvd3BvaW50CitjYXRjaCAvLiovCisgICAgWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK1hwYXRoIDY3MTA4ODY0CQkJCQkiIFg6IDY3MTA4ODY0CisKK3VubGV0IHRha2VuIGV4cGVjdGVkCitkZWxmdW5jdGlvbiBUSFJPVworZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gRworCitYY2hlY2sgNjk1NDQyNzcKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDcxOiAgOnRocm93IGFjY3Jvc3MgOmVjaG8gdmFyaWFudHMgYW5kIDpleGVjdXRlCQkJICAgIHt7ezEKKyIKKyIJICAgIE9uIGFuIDplY2hvLCA6ZWNob24sIDplY2hvbXNnLCA6ZWNob2Vyciwgb3IgOmV4ZWN1dGUgY29tbWFuZCwgYW4KKyIJICAgIGV4Y2VwdGlvbiBtaWdodCBiZSB0aHJvd24gZHVyaW5nIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cyB0bworIgkgICAgYmUgZGlzcGxheWVkIG9yIGV4ZWN1dGVkIGFzIGEgY29tbWFuZCwgcmVzcGVjdGl2ZWx5LiAgQW55IGZvbGxvd2luZworIgkgICAgYXJndW1lbnRzIGFyZSBub3QgZXZhbHVhdGVkLCB0aGVuLiAgVGhlIGV4Y2VwdGlvbiBjYW4gYmUgY2F1Z2h0IGJ5CisiCSAgICB0aGUgc2NyaXB0LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2xldCB0YWtlbiA9ICIiCisKK2Z1bmN0aW9uISBUSFJPVyh4LCBuKQorICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJUIiAuIGE6bgorICAgIHRocm93IGE6eAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEYobikKKyAgICBsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiRiIgLiBhOm4KKyAgICByZXR1cm4gIkYiIC4gYTpuCitlbmRmdW5jdGlvbgorCit0cnkKKyAgICB0cnkKKwlYcGF0aCAxCQkJCQkiIFg6IDEKKwllY2hvICJlY2hvIiAuIFRIUk9XKCJlY2hvLWV4Y2VwdCIsIDEpIEYoMSkKKwlYcGF0aCAyCQkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmVjaG8tZXhjZXB0JC8KKwlYcGF0aCA0CQkJCQkiIFg6IDQKKyAgICBjYXRjaCAvLiovCisJWHBhdGggOAkJCQkJIiBYOiAwCisJWG91dCAiZWNobzoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAxNgkJCQkiIFg6IDE2CisJZWNob24gImVjaG9uIiAuIFRIUk9XKCJlY2hvbi1leGNlcHQiLCAyKSBGKDIpCisJWHBhdGggMzIJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15lY2hvbi1leGNlcHQkLworCVhwYXRoIDY0CQkJCSIgWDogNjQKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMTI4CQkJCSIgWDogMAorCVhvdXQgImVjaG9uOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCWVjaG9tc2cgImVjaG9tc2ciIC4gVEhST1coImVjaG9tc2ctZXhjZXB0IiwgMykgRigzKQorCVhwYXRoIDUxMgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmVjaG9tc2ctZXhjZXB0JC8KKwlYcGF0aCAxMDI0CQkJCSIgWDogMTAyNAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAyMDQ4CQkJCSIgWDogMAorCVhvdXQgImVjaG9tc2c6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKwllY2hvZXJyICJlY2hvZXJyIiAuIFRIUk9XKCJlY2hvZXJyLWV4Y2VwdCIsIDQpIEYoNCkKKwlYcGF0aCA4MTkyCQkJCSIgWDogMAorICAgIGNhdGNoIC9eZWNob2Vyci1leGNlcHQkLworCVhwYXRoIDE2Mzg0CQkJCSIgWDogMTYzODQKKyAgICBjYXRjaCAvVmltLworCVhwYXRoIDMyNzY4CQkJCSIgWDogMAorICAgIGNhdGNoIC9lY2hvZXJyLworCVhwYXRoIDY1NTM2CQkJCSIgWDogMAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxMzEwNzIJCQkJIiBYOiAwCisJWG91dCAiZWNob2VycjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAyNjIxNDQKKwlleGVjdXRlICJlY2hvICdleGVjdXRlIiAuIFRIUk9XKCJleGVjdXRlLWV4Y2VwdCIsIDUpIEYoNSkgIiciCisJWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorICAgIGNhdGNoIC9eZXhlY3V0ZS1leGNlcHQkLworCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAxMDQ4NTc2CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAwCisJWG91dCAiZXhlY3V0ZToiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICBsZXQgZXhwZWN0ZWQgPSAiVDFUMlQzVDRUNSIKKyAgICBpZiB0YWtlbiAhPSBleHBlY3RlZAorCVhwYXRoIDQxOTQzMDQJCQkJIiBYOiAwCisJWG91dCAiJ3Rha2VuJyBpcyIgdGFrZW4gImluc3RlYWQgb2YiIGV4cGVjdGVkCisgICAgZW5kaWYKKworY2F0Y2ggL14wJC8JICAgICIgZGVmYXVsdCByZXR1cm4gdmFsdWUKKyAgICBYcGF0aCA4Mzg4NjA4CQkJCSIgWDogMAorICAgIFhvdXQgdjp0aHJvd3BvaW50CitjYXRjaCAvLiovCisgICAgWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK1hwYXRoIDMzNTU0NDMyCQkJCQkiIFg6IDMzNTU0NDMyCisKK3VubGV0IHRha2VuIGV4cGVjdGVkCitkZWxmdW5jdGlvbiBUSFJPVworZGVsZnVuY3Rpb24gRgorCitYY2hlY2sgMzQ4ODY5OTcKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDcyOiAgOnRocm93IGFjY3Jvc3MgOmxldCBvciA6dW5sZXQJCQkJICAgIHt7ezEKKyIKKyIJICAgIE9uIGEgOmxldCBjb21tYW5kLCBhbiBleGNlcHRpb24gbWlnaHQgYmUgdGhyb3duIGR1cmluZyBldmFsdWF0aW9uCisiCSAgICBvZiB0aGUgZXhwcmVzc2lvbiB0byBhc3NpZ24uICBPbiBhbiA6bGV0IG9yIDp1bmxldCBjb21tYW5kLCB0aGUKKyIJICAgIGV2YWx1YXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGFzc2lnbmVkIG9yIGxpc3Qgb3IKKyIJICAgIGRlbGV0ZWQsIHJlc3BlY3RpdmVseSwgbWF5IHRocm93IGFuIGV4Y2VwdGlvbi4gIEFueSBmb2xsb3dpbmcKKyIJICAgIGFyZ3VtZW50cyBhcmUgbm90IGV2YWx1YXRlZCwgdGhlbi4gIFRoZSBleGNlcHRpb24gY2FuIGJlIGNhdWdodCBieQorIgkgICAgdGhlIHNjcmlwdC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgdGhyb3djb3VudCA9IDAKKworZnVuY3Rpb24hIFRIUk9XKHgpCisgICAgbGV0IGc6dGhyb3djb3VudCA9IGc6dGhyb3djb3VudCArIDEKKyAgICB0aHJvdyBhOngKK2VuZGZ1bmN0aW9uCisKK3RyeQorICAgIHRyeQorCWxldCAkVkFSID0gIm9sZF92YWx1ZSIKKwlYcGF0aCAxCQkJCQkiIFg6IDEKKwlsZXQgJFZBUiA9ICJsZXQoIiAuIFRIUk9XKCJ2YXIiKSAuICIpIgorCVhwYXRoIDIJCQkJCSIgWDogMAorICAgIGNhdGNoIC9edmFyJC8KKwlYcGF0aCA0CQkJCQkiIFg6IDQKKyAgICBmaW5hbGx5CisJaWYgJFZBUiAhPSAib2xkX3ZhbHVlIgorCSAgICBYcGF0aCA4CQkJCSIgWDogMAorCWVuZGlmCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlsZXQgQGEgPSAib2xkX3ZhbHVlIgorCVhwYXRoIDE2CQkJCSIgWDogMTYKKwlsZXQgQGEgPSAibGV0KCIgLiBUSFJPVygicmVnIikgLiAiKSIKKwlYcGF0aCAzMgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnJlZyQvCisJdHJ5CisJICAgIFhwYXRoIDY0CQkJCSIgWDogNjQKKwkgICAgbGV0IEBBID0gImxldCgiIC4gVEhST1coIlJFRyIpIC4gIikiCisJICAgIFhwYXRoIDEyOAkJCQkiIFg6IDAKKwljYXRjaCAvXlJFRyQvCisJICAgIFhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCWVuZHRyeQorICAgIGZpbmFsbHkKKwlpZiBAYSAhPSAib2xkX3ZhbHVlIgorCSAgICBYcGF0aCA1MTIJCQkJIiBYOiAwCisJZW5kaWYKKwlpZiBAQSAhPSAib2xkX3ZhbHVlIgorCSAgICBYcGF0aCAxMDI0CQkJCSIgWDogMAorCWVuZGlmCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlsZXQgc2F2ZWRfZ3BhdGggPSAmZzpwYXRoCisJbGV0IHNhdmVkX2xwYXRoID0gJmw6cGF0aAorCVhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJbGV0ICZwYXRoID0gImxldCgiIC4gVEhST1coIm9wdCIpIC4gIikiCisJWHBhdGggNDA5NgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXm9wdCQvCisJdHJ5CisJICAgIFhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJICAgIGxldCAmZzpwYXRoID0gImxldCgiIC4gVEhST1coImdvcHQiKSAuICIpIgorCSAgICBYcGF0aCAxNjM4NAkJCQkiIFg6IDAKKwljYXRjaCAvXmdvcHQkLworCSAgICB0cnkKKwkJWHBhdGggMzI3NjgJCQkiIFg6IDMyNzY4CisJCWxldCAmbDpwYXRoID0gImxldCgiIC4gVEhST1coImxvcHQiKSAuICIpIgorCQlYcGF0aCA2NTUzNgkJCSIgWDogMAorCSAgICBjYXRjaCAvXmxvcHQkLworCQlYcGF0aCAxMzEwNzIJCQkiIFg6IDEzMTA3MgorCSAgICBlbmR0cnkKKwllbmR0cnkKKyAgICBmaW5hbGx5CisJaWYgJmc6cGF0aCAhPSBzYXZlZF9ncGF0aCB8fCAmbDpwYXRoICE9IHNhdmVkX2xwYXRoCisJICAgIFhwYXRoIDI2MjE0NAkJCSIgWDogMAorCWVuZGlmCisJbGV0ICZnOnBhdGggPSBzYXZlZF9ncGF0aAorCWxldCAmbDpwYXRoID0gc2F2ZWRfbHBhdGgKKyAgICBlbmR0cnkKKworICAgIHVubGV0ISB2YXIxIHZhcjIgdmFyMworCisgICAgdHJ5CisJWHBhdGggNTI0Mjg4CQkJCSIgWDogNTI0Mjg4CisJbGV0IHZhcjEgPSAibGV0KCIgLiBUSFJPVygidmFyMSIpIC4gIikiCisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnZhcjEkLworCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAyMDk3MTUyCisgICAgZmluYWxseQorCWlmIGV4aXN0cygidmFyMSIpCisJICAgIFhwYXRoIDQxOTQzMDQJCQkiIFg6IDAKKwllbmRpZgorICAgIGVuZHRyeQorCisgICAgdHJ5CisJbGV0IHZhcjIgPSAib2xkX3ZhbHVlIgorCVhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisJbGV0IHZhcjIgPSAibGV0KCIgLiBUSFJPVygidmFyMiIpLiAiKSIKKwlYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnZhcjIkLworCVhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMzM1NTQ0MzIKKyAgICBmaW5hbGx5CisJaWYgdmFyMiAhPSAib2xkX3ZhbHVlIgorCSAgICBYcGF0aCA2NzEwODg2NAkJCSIgWDogMAorCWVuZGlmCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKwlsZXQgdmFye1RIUk9XKCJ2YXIzIil9ID0gNDcxMQorCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnZhcjMkLworCVhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDUzNjg3MDkxMgorICAgIGVuZHRyeQorCisgICAgbGV0IGFkZHBhdGggPSAiIgorCisgICAgZnVuY3Rpb24gQUREUEFUSChwKQorCWxldCBnOmFkZHBhdGggPSBnOmFkZHBhdGggLiBhOnAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgdHJ5CisJY2FsbCBBRERQQVRIKCJUMSIpCisJbGV0IHZhcntUSFJPVygidmFyNCIpfSB2YXJ7QUREUEFUSCgiVDIiKX0gfCBjYWxsIEFERFBBVEgoIlQzIikKKwljYWxsIEFERFBBVEgoIlQ0IikKKyAgICBjYXRjaCAvXnZhcjQkLworCWNhbGwgQUREUEFUSCgiVDUiKQorICAgIGVuZHRyeQorCisgICAgdHJ5CisJY2FsbCBBRERQQVRIKCJUNiIpCisJdW5sZXQgdmFye1RIUk9XKCJ2YXI1Iil9IHZhcntBRERQQVRIKCJUNyIpfSB8IGNhbGwgQUREUEFUSCgiVDgiKQorCWNhbGwgQUREUEFUSCgiVDkiKQorICAgIGNhdGNoIC9edmFyNSQvCisJY2FsbCBBRERQQVRIKCJUMTAiKQorICAgIGVuZHRyeQorCisgICAgaWYgYWRkcGF0aCAhPSAiVDFUNVQ2VDEwIiB8fCB0aHJvd2NvdW50ICE9IDExCisJdGhyb3cgImFkZHBhdGg6ICIgLiBhZGRwYXRoIC4gIiwgdGhyb3djb3VudDogIiAuIHRocm93Y291bnQKKyAgICBlbmRpZgorCisgICAgWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKworY2F0Y2ggLy4qLworICAgICIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgYWRkIGV4cGxpY2l0bHk6CisgICAgbGV0IFhwYXRoID0gWHBhdGggKyAyMTQ3NDgzNjQ4CQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitlbmR0cnkKKwordW5sZXQhIHZhcjEgdmFyMiB2YXIzIGFkZHBhdGggdGhyb3djb3VudAorZGVsZnVuY3Rpb24gVEhST1cKKworWGNoZWNrIDE3ODk1NjkzNjUKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDczOiAgOnRocm93IGFjY3Jvc3MgOmZ1bmN0aW9uLCA6ZGVsZnVuY3Rpb24JCQkgICAge3t7MQorIgorIgkgICAgVGhlIDpmdW5jdGlvbiBhbmQgOmRlbGZ1bmN0aW9uIGNvbW1hbmRzIG1heSBjYXVzZSBhbiBleHByZXNzaW9uCisiCSAgICBzcGVjaWZpZWQgaW4gYnJhY2VzIHRvIGJlIGV2YWx1YXRlZC4gIER1cmluZyBldmFsdWF0aW9uLCBhbgorIgkgICAgZXhjZXB0aW9uIG1pZ2h0IGJlIHRocm93bi4gIFRoZSBleGNlcHRpb24gY2FuIGJlIGNhdWdodCBieSB0aGUKKyIJICAgIHNjcmlwdC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgdGFrZW4gPSAiIgorCitmdW5jdGlvbiEgVEhST1coeCwgbikKKyAgICBsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiVCIgLiBhOm4KKyAgICB0aHJvdyBhOngKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBFWFBSKHgsIG4pCisgICAgbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gIkUiIC4gYTpuCisgICAgaWYgYTpuICUgMiA9PSAwCisJY2FsbCBUSFJPVyhhOngsIGE6bikKKyAgICBlbmRpZgorICAgIHJldHVybiAyIC0gYTpuICUgMgorZW5kZnVuY3Rpb24KKwordHJ5CisgICAgdHJ5CisJIiBEZWZpbmUgZnVuY3Rpb24uCisJWHBhdGggMQkJCQkJIiBYOiAxCisJZnVuY3Rpb24hIEYwKCkKKwllbmRmdW5jdGlvbgorCVhwYXRoIDIJCQkJCSIgWDogMgorCWZ1bmN0aW9uISBGe0VYUFIoImZ1bmN0aW9uLWRlZi1vayIsIDEpfSgpCisJZW5kZnVuY3Rpb24KKwlYcGF0aCA0CQkJCQkiIFg6IDQKKwlmdW5jdGlvbiEgRntFWFBSKCJmdW5jdGlvbi1kZWYiLCAyKX0oKQorCWVuZGZ1bmN0aW9uCisJWHBhdGggOAkJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15mdW5jdGlvbi1kZWYtb2skLworCVhwYXRoIDE2CQkJCSIgWDogMAorICAgIGNhdGNoIC9eZnVuY3Rpb24tZGVmJC8KKwlYcGF0aCAzMgkJCQkiIFg6IDMyCisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDY0CQkJCSIgWDogMAorCVhvdXQgImRlZjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwkiIExpc3QgZnVuY3Rpb24uCisJWHBhdGggMTI4CQkJCSIgWDogMTI4CisJZnVuY3Rpb24gRjAKKwlYcGF0aCAyNTYJCQkJIiBYOiAyNTYKKwlmdW5jdGlvbiBGe0VYUFIoImZ1bmN0aW9uLWxzdC1vayIsIDMpfQorCVhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCWZ1bmN0aW9uIEZ7RVhQUigiZnVuY3Rpb24tbHN0IiwgNCl9CisJWHBhdGggMTAyNAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmZ1bmN0aW9uLWxzdC1vayQvCisJWHBhdGggMjA0OAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmZ1bmN0aW9uLWxzdCQvCisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKyAgICBjYXRjaCAvLiovCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKwlYb3V0ICJsc3Q6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJIiBEZWxldGUgZnVuY3Rpb24KKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJZGVsZnVuY3Rpb24gRjAKKwlYcGF0aCAzMjc2OAkJCQkiIFg6IDMyNzY4CisJZGVsZnVuY3Rpb24gRntFWFBSKCJmdW5jdGlvbi1kZWwtb2siLCA1KX0KKwlYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJZGVsZnVuY3Rpb24gRntFWFBSKCJmdW5jdGlvbi1kZWwiLCA2KX0KKwlYcGF0aCAxMzEwNzIJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15mdW5jdGlvbi1kZWwtb2skLworCVhwYXRoIDI2MjE0NAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmZ1bmN0aW9uLWRlbCQvCisJWHBhdGggNTI0Mjg4CQkJCSIgWDogNTI0Mjg4CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCisJWG91dCAiZGVsOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIGxldCBleHBlY3RlZCA9ICJFMUUyVDJFM0U0VDRFNUU2VDYiCisgICAgaWYgdGFrZW4gIT0gZXhwZWN0ZWQKKwlYcGF0aCAyMDk3MTUyCQkJCSIgWDogMAorCVhvdXQgIid0YWtlbicgaXMiIHRha2VuICJpbnN0ZWFkIG9mIiBleHBlY3RlZAorICAgIGVuZGlmCisKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCA0MTk0MzA0CQkJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorCitYcGF0aCA4Mzg4NjA4CQkJCQkiIFg6IDgzODg2MDgKKwordW5sZXQgdGFrZW4gZXhwZWN0ZWQKK2RlbGZ1bmN0aW9uIFRIUk9XCitkZWxmdW5jdGlvbiBFWFBSCisKK1hjaGVjayA5MDMyNjE1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA3NDogIDp0aHJvdyBhY2Nyb3NzIGJ1aWx0aW4gZnVuY3Rpb25zIGFuZCBjb21tYW5kcwkJICAgIHt7ezEKKyIKKyIJICAgIFNvbWUgZnVuY3Rpb25zIGxpa2UgZXhpc3RzKCksIHNlYXJjaHBhaXIoKSB0YWtlIGV4cHJlc3Npb24KKyIJICAgIGFyZ3VtZW50cywgb3RoZXIgZnVuY3Rpb25zIG9yIGNvbW1hbmRzIGxpa2Ugc3Vic3RpdHV0ZSgpIG9yCisiCSAgICA6c3Vic3RpdHV0ZSBjYXVzZSBhbiBleHByZXNzaW9uIChzcGVjaWZpZWQgaW4gdGhlIHJlZ3VsYXIKKyIJICAgIGV4cHJlc3Npb24pIHRvIGJlIGV2YWx1YXRlZC4gIER1cmluZyBldmFsdWF0aW9uIGFuIGV4Y2VwdGlvbgorIgkgICAgbWlnaHQgYmUgdGhyb3duLiAgVGhlIGV4Y2VwdGlvbiBjYW4gYmUgY2F1Z2h0IGJ5IHRoZSBzY3JpcHQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworbGV0IHRha2VuID0gIiIKKworZnVuY3Rpb24hIFRIUk9XKHgsIG4pCisgICAgbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gIlQiIC4gYTpuCisgICAgdGhyb3cgYTp4CitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRVhQUih4LCBuKQorICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJFIiAuIGE6bgorICAgIGNhbGwgVEhST1coYTp4IC4gYTpuLCBhOm4pCisgICAgcmV0dXJuICJFWFBSIgorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIFNLSVAoeCwgbikKKyAgICBsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiUyIgLiBhOm4gLiAiKCIgLiBsaW5lKCIuIikKKyAgICBsZXQgdGhlbGluZSA9IGdldGxpbmUoIi4iKQorICAgIGlmIHRoZWxpbmUgPX4gInNraXAiCisJbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gInMpIgorCXJldHVybiAxCisgICAgZWxzZWlmIHRoZWxpbmUgPX4gInRocm93IgorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJ0KSIKKwljYWxsIFRIUk9XKGE6eCAuIGE6biwgYTpuKQorICAgIGVsc2UKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiKSIKKwlyZXR1cm4gMAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgU1VCU1QoeCwgbikKKyAgICBsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiVSIgLiBhOm4gLiAiKCIgLiBsaW5lKCIuIikKKyAgICBsZXQgdGhlbGluZSA9IGdldGxpbmUoIi4iKQorICAgIGlmIHRoZWxpbmUgPX4gIm5vdCIJICAgICIgU1VCU1QoKSBzaG91bGQgbm90IGJlIGNhbGxlZCBmb3IgdGhpcyBsaW5lCisJbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gIm4pIgorCWNhbGwgVEhST1coYTp4IC4gYTpuLCBhOm4pCisgICAgZWxzZWlmIHRoZWxpbmUgPX4gInRocm93IgorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJ0KSIKKwljYWxsIFRIUk9XKGE6eCAuIGE6biwgYTpuKQorICAgIGVsc2UKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiKSIKKwlyZXR1cm4gInJlcGxhY2VkIgorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCit0cnkKKyAgICB0cnkKKwlYcGF0aCAxCQkJCQkiIFg6IDEKKwlsZXQgcmVzdWx0ID0gZXhpc3RzKCcqe0VYUFIoImV4aXN0cyIsIDEpfScpCisJWHBhdGggMgkJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15leGlzdHMxJC8KKwlYcGF0aCA0CQkJCQkiIFg6IDQKKwl0cnkKKwkgICAgbGV0IHJlc3VsdCA9IGV4aXN0cygne0VYUFIoImV4aXN0cyIsIDIpfScpCisJICAgIFhwYXRoIDgJCQkJIiBYOiAwCisJY2F0Y2ggL15leGlzdHMyJC8KKwkgICAgWHBhdGggMTYJCQkJIiBYOiAxNgorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggMzIJCQkJIiBYOiAwCisJICAgIFhvdXQgImV4aXN0czI6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorCWVuZHRyeQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA2NAkJCQkiIFg6IDAKKwlYb3V0ICJleGlzdHMxOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCWxldCBmaWxlID0gdGVtcG5hbWUoKQorCWV4ZWMgImVkaXQiIGZpbGUKKwlpbnNlcnQKK2JlZ2luCisgICAgeHgKK21pZGRsZSAzCisgICAgeHgKK21pZGRsZSA1IHNraXAKKyAgICB4eAorbWlkZGxlIDcgdGhyb3cKKyAgICB4eAorZW5kCisuCisJbm9ybWFsISBnZworCVhwYXRoIDEyOAkJCQkiIFg6IDEyOAorCWxldCByZXN1bHQgPQorCSAgICBcIHNlYXJjaHBhaXIoImJlZ2luIiwgIm1pZGRsZSIsICJlbmQiLCAnJywgJ1NLSVAoInNlYXJjaHBhaXIiLCAzKScpCisJWHBhdGggMjU2CQkJCSIgWDogMjU2CisJbGV0IHJlc3VsdCA9CisJICAgIFwgc2VhcmNocGFpcigiYmVnaW4iLCAibWlkZGxlIiwgImVuZCIsICcnLCAnU0tJUCgic2VhcmNocGFpciIsIDQpJykKKwlYcGF0aCA1MTIJCQkJIiBYOiAwCisJbGV0IHJlc3VsdCA9CisJICAgIFwgc2VhcmNocGFpcigiYmVnaW4iLCAibWlkZGxlIiwgImVuZCIsICcnLCAnU0tJUCgic2VhcmNocGFpciIsIDUpJykKKwlYcGF0aCAxMDI0CQkJCSIgWDogMAorICAgIGNhdGNoIC9ec2VhcmNocGFpclszNV0kLworCVhwYXRoIDIwNDgJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15zZWFyY2hwYWlyNCQvCisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKyAgICBjYXRjaCAvLiovCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKwlYb3V0ICJzZWFyY2hwYWlyOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBmaW5hbGx5CisJYndpcGVvdXQhCisJY2FsbCBkZWxldGUoZmlsZSkKKyAgICBlbmR0cnkKKworICAgIHRyeQorCWxldCBmaWxlID0gdGVtcG5hbWUoKQorCWV4ZWMgImVkaXQiIGZpbGUKKwlpbnNlcnQKK3N1YnN0IDEKK3N1YnN0IDIKK25vdAorc3Vic3QgNAorc3Vic3QgdGhyb3cKK3N1YnN0IDYKKy4KKwlub3JtYWwhIGdnCisJWHBhdGggMTYzODQJCQkJIiBYOiAxNjM4NAorCTEsMnN1YnN0aXR1dGUvc3Vic3QvXD1TVUJTVCgic3Vic3RpdHV0ZSIsIDYpLworCXRyeQorCSAgICBYcGF0aCAzMjc2OAkJCQkiIFg6IDMyNzY4CisJICAgIHRyeQorCQlsZXQgdjplcnJtc2cgPSAiIgorCQkzc3Vic3RpdHV0ZS9zdWJzdC9cPVNVQlNUKCJzdWJzdGl0dXRlIiwgNykvCisJICAgIGZpbmFsbHkKKwkJaWYgdjplcnJtc2cgIT0gIiIKKwkJICAgICIgSWYgZXhjZXB0aW9ucyBhcmUgbm90IHRocm93biBvbiBlcnJvcnMsIGZha2UgdGhlIGVycm9yCisJCSAgICAiIGV4Y2VwdGlvbiBpbiBvcmRlciB0byBnZXQgdGhlIHNhbWUgZXhlY3V0aW9uIHBhdGguCisJCSAgICB0aHJvdyAiZmFrZWQgVmltKHN1YnN0aXR1dGUpIgorCQllbmRpZgorCSAgICBlbmR0cnkKKwljYXRjaCAvVmltKHN1YnN0aXR1dGUpLwkgICAgIiBQYXR0ZXJuIG5vdCBmb3VuZCAoJ2UnIGZsYWcgbWlzc2luZykKKwkgICAgWHBhdGggNjU1MzYJCQkJIiBYOiA2NTUzNgorCSAgICAzc3Vic3RpdHV0ZS9zdWJzdC9cPVNVQlNUKCJzdWJzdGl0dXRlIiwgOCkvZQorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDEzMTA3MgorCWVuZHRyeQorCVhwYXRoIDI2MjE0NAkJCQkiIFg6IDI2MjE0NAorCTQsNnN1YnN0aXR1dGUvc3Vic3QvXD1TVUJTVCgic3Vic3RpdHV0ZSIsIDkpLworCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnN1YnN0aXR1dGVbNjc4XS8KKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorICAgIGNhdGNoIC9ec3Vic3RpdHV0ZTkvCisJWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKyAgICBmaW5hbGx5CisJYndpcGVvdXQhCisJY2FsbCBkZWxldGUoZmlsZSkKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDQxOTQzMDQJCQkJIiBYOiA0MTk0MzA0CisJbGV0IHZhciA9IHN1YnN0aXR1dGUoInN1YiIsICJzdWIiLCAnXD1USFJPVygic3Vic3RpdHV0ZSgpeSIsIDEwKScsICcnKQorCVhwYXRoIDgzODg2MDgJCQkJIiBYOiAwCisgICAgY2F0Y2ggL3N1YnN0aXR1dGUoKXkvCisJWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAxNjc3NzIxNgorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDAKKwlYb3V0ICJzdWJzdGl0dXRlKCl5OiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDY3MTA4ODY0CQkJCSIgWDogNjcxMDg4NjQKKwlsZXQgdmFyID0gc3Vic3RpdHV0ZSgibm90IiwgInN1YiIsICdcPVRIUk9XKCJzdWJzdGl0dXRlKCluIiwgMTEpJywgJycpCisJWHBhdGggMTM0MjE3NzI4CQkJCSIgWDogMTM0MjE3NzI4CisgICAgY2F0Y2ggL3N1YnN0aXR1dGUoKW4vCisJWHBhdGggMjY4NDM1NDU2CQkJCSIgWDogMAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCisJWG91dCAic3Vic3RpdHV0ZSgpbjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICBsZXQgZXhwZWN0ZWQgPSAiRTFUMUUyVDJTMygzKVM0KDVzKVM0KDd0KVQ0VTYoMSlVNigyKVU5KDQpVTkoNXQpVDlUMTAiCisgICAgaWYgdGFrZW4gIT0gZXhwZWN0ZWQKKwlYcGF0aCAxMDczNzQxODI0CQkJIiBYOiAwCisJWG91dCAiJ3Rha2VuJyBpcyIgdGFrZW4gImluc3RlYWQgb2YiIGV4cGVjdGVkCisgICAgZW5kaWYKKworY2F0Y2ggLy4qLworICAgICIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgYWRkIGV4cGxpY2l0bHk6CisgICAgbGV0IFhwYXRoID0gWHBhdGggKyAyMTQ3NDgzNjQ4CQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitlbmR0cnkKKwordW5sZXQgcmVzdWx0IHZhciB0YWtlbiBleHBlY3RlZAorZGVsZnVuY3Rpb24gVEhST1cKK2RlbGZ1bmN0aW9uIEVYUFIKK2RlbGZ1bmN0aW9uIFNLSVAKK2RlbGZ1bmN0aW9uIFNVQlNUCisKK1hjaGVjayAyMjQ5MDc2NjkKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDc1OiAgRXJyb3JzIGluIGJ1aWx0aW4gZnVuY3Rpb25zLgkJCQkgICAge3t7MQorIgorIgkgICAgT24gYW4gZXJyb3IgaW4gYSBidWlsdGluIGZ1bmN0aW9uIGNhbGxlZCBpbnNpZGUgYSA6dHJ5LzplbmR0cnkKKyIJICAgIHJlZ2lvbiwgdGhlIGV2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gY2FsbGluZyB0aGF0IGZ1bmN0aW9uIGFuZAorIgkgICAgdGhlIGNvbW1hbmQgY29udGFpbmluZyB0aGF0IGV4cHJlc3Npb24gYXJlIGFiYW5kb25lZC4gIFRoZSBlcnJvciBjYW4KKyIJICAgIGJlIGNhdWdodCBhcyBhbiBleGNlcHRpb24uCisiCisiCSAgICBBIHNpbXBsZSA6Y2FsbCBvZiB0aGUgYnVpbHRpbiBmdW5jdGlvbiBpcyBhIHRyaXZpYWwgY2FzZS4gIElmIHRoZQorIgkgICAgYnVpbHRpbiBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgYW5vdGhlciBmdW5jdGlvbiwKKyIJICAgIG5vIGZ1cnRoZXIgYXJndW1lbnRzIGFyZSBldmFsdWF0ZWQsIGFuZCB0aGUgb3RoZXIgZnVuY3Rpb24gaXMgbm90CisiCSAgICBleGVjdXRlZC4gIElmIHRoZSBidWlsdGluIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBhcmd1bWVudCBvZgorIgkgICAgYSA6cmV0dXJuIGNvbW1hbmQsIHRoZSA6cmV0dXJuIGNvbW1hbmQgaXMgbm90IGV4ZWN1dGVkLiAgSWYgdGhlCisiCSAgICBidWlsdGluIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBhcmd1bWVudCBvZiBhIDp0aHJvdyBjb21tYW5kLAorIgkgICAgdGhlIDp0aHJvdyBjb21tYW5kIGlzIG5vdCBleGVjdXRlZC4gIFRoZSBldmFsdWF0aW9uIG9mIHRoZQorIgkgICAgZXhwcmVzc2lvbiBjYWxsaW5nIHRoZSBidWlsdGluIGZ1bmN0aW9uIGlzIGFiYW5kb25lZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgRjEoYXJnMSkKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBGMihhcmcxLCBhcmcyKQorICAgIFhwYXRoIDIJCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEcoKQorICAgIFhwYXRoIDQJCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEgoKQorICAgIFhwYXRoIDgJCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIFIoKQorICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgWHBhdGggMTYJCQkJIiBYOiAxNgorCSAgICByZXR1cm4gYXBwZW5kKDEsICJzIikKKwljYXRjaCAvRTIxLworCSAgICBsZXQgY2F1Z2h0ID0gMQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggMzIJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCA2NAkJCQkiIFg6IDY0CisJICAgIGlmIGNhdWdodCB8fCAkVklNTk9FUlJUSFJPVyAmJiB2OmVycm1zZyA9fiAnRTIxJworCQlYcGF0aCAxMjgJCQkiIFg6IDEyOAorCSAgICBlbmRpZgorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgWHBhdGggMjU2CQkJCQkiIFg6IDI1NgorZW5kZnVuY3Rpb24KKwordHJ5CisgICAgc2V0IG5vbWEJIiBsZXQgYXBwZW5kKCkgZmFpbCB3aXRoICJFMjEiCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIFhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCSAgICBjYWxsIGFwcGVuZCgxLCAicyIpCisJY2F0Y2ggL0UyMS8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDEwMjQJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAyMDQ4CQkJCSIgWDogMjA0OAorCSAgICBpZiBjYXVnaHQgfHwgJFZJTU5PRVJSVEhST1cgJiYgdjplcnJtc2cgPX4gJ0UyMScKKwkJWHBhdGggNDA5NgkJCSIgWDogNDA5NgorCSAgICBlbmRpZgorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIFhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJICAgIGNhbGwgRjEoJ3gnIC4gYXBwZW5kKDEsICJzIikpCisJY2F0Y2ggL0UyMS8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDE2Mzg0CQkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorCSAgICBpZiBjYXVnaHQgfHwgJFZJTU5PRVJSVEhST1cgJiYgdjplcnJtc2cgPX4gJ0UyMScKKwkJWHBhdGggNjU1MzYJCQkiIFg6IDY1NTM2CisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgWHBhdGggMTMxMDcyCQkJIiBYOiAxMzEwNzIKKwkgICAgY2FsbCBGMigneCcgLiBhcHBlbmQoMSwgInMiKSwgRygpKQorCWNhdGNoIC9FMjEvCisJICAgIGxldCBjYXVnaHQgPSAxCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCAyNjIxNDQJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDUyNDI4OAkJCSIgWDogNTI0Mjg4CisJICAgIGlmIGNhdWdodCB8fCAkVklNTk9FUlJUSFJPVyAmJiB2OmVycm1zZyA9fiAnRTIxJworCQlYcGF0aCAxMDQ4NTc2CQkJIiBYOiAxMDQ4NTc2CisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIGNhbGwgUigpCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIFhwYXRoIDIwOTcxNTIJCQkiIFg6IDIwOTcxNTIKKwkgICAgdGhyb3cgIlQiIC4gYXBwZW5kKDEsICJzIikKKwljYXRjaCAvRTIxLworCSAgICBsZXQgY2F1Z2h0ID0gMQorCWNhdGNoIC9eVC4qLworCSAgICBYcGF0aCA0MTk0MzA0CQkJIiBYOiAwCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCA4Mzg4NjA4CQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKwkgICAgaWYgY2F1Z2h0IHx8ICRWSU1OT0VSUlRIUk9XICYmIHY6ZXJybXNnID1+ICdFMjEnCisJCVhwYXRoIDMzNTU0NDMyCQkJIiBYOiAzMzU1NDQzMgorCSAgICBlbmRpZgorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIFhwYXRoIDY3MTA4ODY0CQkJIiBYOiA2NzEwODg2NAorCSAgICBsZXQgeCA9ICJhIgorCSAgICBsZXQgeCA9IHggLiAiYiIgLiBhcHBlbmQoMSwgInMiKSAuIEgoKQorCWNhdGNoIC9FMjEvCisJICAgIGxldCBjYXVnaHQgPSAxCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDI2ODQzNTQ1NgkJCSIgWDogMjY4NDM1NDU2CisJICAgIGlmIGNhdWdodCB8fCAkVklNTk9FUlJUSFJPVyAmJiB2OmVycm1zZyA9fiAnRTIxJworCQlYcGF0aCA1MzY4NzA5MTIJCQkiIFg6IDUzNjg3MDkxMgorCSAgICBlbmRpZgorCSAgICBpZiB4ID09ICJhIgorCQlYcGF0aCAxMDczNzQxODI0CQkiIFg6IDEwNzM3NDE4MjQKKwkgICAgZW5kaWYKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorY2F0Y2ggLy4qLworICAgICIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgYWRkIGV4cGxpY2l0bHk6CisgICAgbGV0IFhwYXRoID0gWHBhdGggKyAyMTQ3NDgzNjQ4CQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitmaW5hbGx5CisgICAgc2V0IG1hJgorZW5kdHJ5CisKK3VubGV0ISBjYXVnaHQgeAorZGVsZnVuY3Rpb24gRjEKK2RlbGZ1bmN0aW9uIEYyCitkZWxmdW5jdGlvbiBHCitkZWxmdW5jdGlvbiBICitkZWxmdW5jdGlvbiBSCisKK1hjaGVjayAyMDAwNDAzNDA4CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA3NjogIEVycm9ycywgaW50ZXJ1cHRzLCA6dGhyb3cgZHVyaW5nIGV4cHJlc3Npb24gZXZhbHVhdGlvbgkgICAge3t7MQorIgorIgkgICAgV2hlbiBhIGZ1bmN0aW9uIGNhbGwgbWFkZSBkdXJpbmcgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIGFib3J0ZWQKKyIJICAgIGR1ZSB0byBhbiBlcnJvciBpbnNpZGUgYSA6dHJ5LzplbmR0cnkgcmVnaW9uIG9yIGR1ZSB0byBhbiBpbnRlcnJ1cHQKKyIJICAgIG9yIGEgOnRocm93LCB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIGFib3J0ZWQgYXMgd2VsbC4JTm8KKyIJICAgIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGZvciB0aGUgY2FuY2VsbGVkIGV4cHJlc3Npb24gZXZhbHVhdGlvbi4gIE9uIGFuCisiCSAgICBlcnJvciBub3QgaW5zaWRlIDp0cnkvOmVuZHRyeSwgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBjb250aW51ZXMuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorCisgICAgbGV0IHRha2VuID0gIiIKKworICAgIGZ1bmN0aW9uISBFUlIobikKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiRSIgLiBhOm4KKwlhc2RmCisgICAgZW5kZnVuY3Rpb24KKworICAgIGZ1bmN0aW9uISBFUlJhYm9ydChuKSBhYm9ydAorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJBIiAuIGE6bgorCWFzZGYKKyAgICBlbmRmdW5jdGlvbgkiIHJldHVybnMgLTEKKworICAgIGZ1bmN0aW9uISBJTlQobikKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiSSIgLiBhOm4KKwkiSU5URVJSVVBUOQorCWxldCBkdW1teSA9IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIFRIUihuKQorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJUIiAuIGE6bgorCXRocm93ICJzaG91bGQgbm90IGJlIGNhdWdodCIKKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIENPTlQobikKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiQyIgLiBhOm4KKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIE1TRyhuKQorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJNIiAuIGE6bgorCWlmIChhOm4gPj0gMTAgJiYgYTpuIDw9IDI3KSA/IHY6ZXJybXNnICE9ICIiIDogdjplcnJtc2cgIX4gImFzZGYiCisJICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJ4IgorCWVuZGlmCisJbGV0IHY6ZXJybXNnID0gIiIKKyAgICBlbmRmdW5jdGlvbgorCisgICAgbGV0IHY6ZXJybXNnID0gIiIKKworICAgIHRyeQorCWxldCB0ID0gMQorCVhsb29wSU5JVCAxIDIKKwl3aGlsZSB0IDw9IDkKKwkgICAgWGxvb3AgMQkJCQkiIFg6IDUxMQorCSAgICB0cnkKKwkJaWYgdCA9PSAxCisJCSAgICBsZXQgdntFUlIodCkgKyBDT05UKHQpfSA9IDAKKwkJZWxzZWlmIHQgPT0gMgorCQkgICAgbGV0IHZ7RVJSKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMworCQkgICAgbGV0IHZhciA9IGV4aXN0cygndntFUlIodCkgKyBDT05UKHQpfScpCisJCWVsc2VpZiB0ID09IDQKKwkJICAgIHVubGV0IHZ7RVJSKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gNQorCQkgICAgZnVuY3Rpb24gRntFUlIodCkgKyBDT05UKHQpfSgpCisJCSAgICBlbmRmdW5jdGlvbgorCQllbHNlaWYgdCA9PSA2CisJCSAgICBmdW5jdGlvbiBGe0VSUih0KSArIENPTlQodCl9CisJCWVsc2VpZiB0ID09IDcKKwkJICAgIGxldCB2YXIgPSBleGlzdHMoJypGe0VSUih0KSArIENPTlQodCl9JykKKwkJZWxzZWlmIHQgPT0gOAorCQkgICAgZGVsZnVuY3Rpb24gRntFUlIodCkgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSA5CisJCSAgICBsZXQgdmFyID0gRVJSKHQpICsgQ09OVCh0KQorCQllbmRpZgorCSAgICBjYXRjaCAvYXNkZi8KKwkJIiB2OmVycm1zZyBpcyBub3Qgc2V0IHdoZW4gdGhlIGVycm9yIG1lc3NhZ2UgaXMgY29udmVydGVkIHRvIGFuCisJCSIgZXhjZXB0aW9uLiAgU2V0IGl0IHRvIHRoZSBvcmlnaW5hbCBlcnJvciBtZXNzYWdlLgorCQlsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbTonLCAnJywgIiIpCisJICAgIGNhdGNoIC9eVmltXCgoXGFcKylcKVw9Oi8KKwkJIiBBbiBlcnJvciBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duIGFmdGVyIHRoZSBvcmlnaW5hbCBlcnJvci4KKwkJbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgZmluYWxseQorCQljYWxsIE1TRyh0KQorCQlsZXQgdCA9IHQgKyAxCisJCVhsb29wTkVYVAorCQljb250aW51ZQkiIGRpc2NhcmQgYW4gYWJvcnRpbmcgZXJyb3IKKwkgICAgZW5kdHJ5CisJZW5kd2hpbGUKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNTEyCQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiBFeHRyYVZpbVRocm93cG9pbnQoKQorICAgIGVuZHRyeQorCisgICAgdHJ5CisJbGV0IHQgPSAxMAorCVhsb29wSU5JVCAxMDI0IDIKKwl3aGlsZSB0IDw9IDE4CisJICAgIFhsb29wIDEJCQkJIiBYOiAxMDI0ICogNTExCisJICAgIHRyeQorCQlpZiB0ID09IDEwCisJCSAgICBsZXQgdntJTlQodCkgKyBDT05UKHQpfSA9IDAKKwkJZWxzZWlmIHQgPT0gMTEKKwkJICAgIGxldCB2e0lOVCh0KSArIENPTlQodCl9CisJCWVsc2VpZiB0ID09IDEyCisJCSAgICBsZXQgdmFyID0gZXhpc3RzKCd2e0lOVCh0KSArIENPTlQodCl9JykKKwkJZWxzZWlmIHQgPT0gMTMKKwkJICAgIHVubGV0IHZ7SU5UKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMTQKKwkJICAgIGZ1bmN0aW9uIEZ7SU5UKHQpICsgQ09OVCh0KX0oKQorCQkgICAgZW5kZnVuY3Rpb24KKwkJZWxzZWlmIHQgPT0gMTUKKwkJICAgIGZ1bmN0aW9uIEZ7SU5UKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMTYKKwkJICAgIGxldCB2YXIgPSBleGlzdHMoJypGe0lOVCh0KSArIENPTlQodCl9JykKKwkJZWxzZWlmIHQgPT0gMTcKKwkJICAgIGRlbGZ1bmN0aW9uIEZ7SU5UKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMTgKKwkJICAgIGxldCB2YXIgPSBJTlQodCkgKyBDT05UKHQpCisJCWVuZGlmCisJICAgIGNhdGNoIC9eVmltXCgoXGFcKylcKVw9OlwoSW50ZXJydXB0XClcQCEvCisJCSIgQW4gZXJyb3IgZXhjZXB0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBhZnRlciB0aGUgaW50ZXJydXB0LgorCQlsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLAorCQkgICAgXCAnXlZpbVwoKFxhXCspXClcPTonLCAnJywgIiIpCisJICAgIGZpbmFsbHkKKwkJY2FsbCBNU0codCkKKwkJbGV0IHQgPSB0ICsgMQorCQlYbG9vcE5FWFQKKwkJY29udGludWUJIiBkaXNjYXJkIGludGVycnVwdAorCSAgICBlbmR0cnkKKwllbmR3aGlsZQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA1MjQyODgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlsZXQgdCA9IDE5CisJWGxvb3BJTklUIDEwNDg1NzYgMgorCXdoaWxlIHQgPD0gMjcKKwkgICAgWGxvb3AgMQkJCQkiIFg6IDEwNDg1NzYgKiA1MTEKKwkgICAgdHJ5CisJCWlmIHQgPT0gMTkKKwkJICAgIGxldCB2e1RIUih0KSArIENPTlQodCl9ID0gMAorCQllbHNlaWYgdCA9PSAyMAorCQkgICAgbGV0IHZ7VEhSKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMjEKKwkJICAgIGxldCB2YXIgPSBleGlzdHMoJ3Z7VEhSKHQpICsgQ09OVCh0KX0nKQorCQllbHNlaWYgdCA9PSAyMgorCQkgICAgdW5sZXQgdntUSFIodCkgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSAyMworCQkgICAgZnVuY3Rpb24gRntUSFIodCkgKyBDT05UKHQpfSgpCisJCSAgICBlbmRmdW5jdGlvbgorCQllbHNlaWYgdCA9PSAyNAorCQkgICAgZnVuY3Rpb24gRntUSFIodCkgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSAyNQorCQkgICAgbGV0IHZhciA9IGV4aXN0cygnKkZ7VEhSKHQpICsgQ09OVCh0KX0nKQorCQllbHNlaWYgdCA9PSAyNgorCQkgICAgZGVsZnVuY3Rpb24gRntUSFIodCkgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSAyNworCQkgICAgbGV0IHZhciA9IFRIUih0KSArIENPTlQodCkKKwkJZW5kaWYKKwkgICAgY2F0Y2ggL15WaW1cKChcYVwrKVwpXD06LworCQkiIEFuIGVycm9yIGV4Y2VwdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYWZ0ZXIgdGhlIDp0aHJvdy4KKwkJbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwKKwkJICAgIFwgJ15WaW1cKChcYVwrKVwpXD06JywgJycsICIiKQorCSAgICBmaW5hbGx5CisJCWNhbGwgTVNHKHQpCisJCWxldCB0ID0gdCArIDEKKwkJWGxvb3BORVhUCisJCWNvbnRpbnVlCSIgZGlzY2FyZCBleGNlcHRpb24KKwkgICAgZW5kdHJ5CisJZW5kd2hpbGUKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiBFeHRyYVZpbVRocm93cG9pbnQoKQorICAgIGVuZHRyeQorCisgICAgbGV0IHZ7RVJSKDI4KSArIENPTlQoMjgpfSA9IDAKKyAgICBjYWxsIE1TRygyOCkKKyAgICBsZXQgdntFUlIoMjkpICsgQ09OVCgyOSl9CisgICAgY2FsbCBNU0coMjkpCisgICAgbGV0IHZhciA9IGV4aXN0cygndntFUlIoMzApICsgQ09OVCgzMCl9JykKKyAgICBjYWxsIE1TRygzMCkKKyAgICB1bmxldCB2e0VSUigzMSkgKyBDT05UKDMxKX0KKyAgICBjYWxsIE1TRygzMSkKKyAgICBmdW5jdGlvbiBGe0VSUigzMikgKyBDT05UKDMyKX0oKQorICAgIGVuZGZ1bmN0aW9uCisgICAgY2FsbCBNU0coMzIpCisgICAgZnVuY3Rpb24gRntFUlIoMzMpICsgQ09OVCgzMyl9CisgICAgY2FsbCBNU0coMzMpCisgICAgbGV0IHZhciA9IGV4aXN0cygnKkZ7RVJSKDM0KSArIENPTlQoMzQpfScpCisgICAgY2FsbCBNU0coMzQpCisgICAgZGVsZnVuY3Rpb24gRntFUlIoMzUpICsgQ09OVCgzNSl9CisgICAgY2FsbCBNU0coMzUpCisgICAgbGV0IHZhciA9IEVSUigzNikgKyBDT05UKDM2KQorICAgIGNhbGwgTVNHKDM2KQorCisgICAgbGV0IHZ7RVJSYWJvcnQoMzcpICsgQ09OVCgzNyl9ID0gMAorICAgIGNhbGwgTVNHKDM3KQorICAgIGxldCB2e0VSUmFib3J0KDM4KSArIENPTlQoMzgpfQorICAgIGNhbGwgTVNHKDM4KQorICAgIGxldCB2YXIgPSBleGlzdHMoJ3Z7RVJSYWJvcnQoMzkpICsgQ09OVCgzOSl9JykKKyAgICBjYWxsIE1TRygzOSkKKyAgICB1bmxldCB2e0VSUmFib3J0KDQwKSArIENPTlQoNDApfQorICAgIGNhbGwgTVNHKDQwKQorICAgIGZ1bmN0aW9uIEZ7RVJSYWJvcnQoNDEpICsgQ09OVCg0MSl9KCkKKyAgICBlbmRmdW5jdGlvbgorICAgIGNhbGwgTVNHKDQxKQorICAgIGZ1bmN0aW9uIEZ7RVJSYWJvcnQoNDIpICsgQ09OVCg0Mil9CisgICAgY2FsbCBNU0coNDIpCisgICAgbGV0IHZhciA9IGV4aXN0cygnKkZ7RVJSYWJvcnQoNDMpICsgQ09OVCg0Myl9JykKKyAgICBjYWxsIE1TRyg0MykKKyAgICBkZWxmdW5jdGlvbiBGe0VSUmFib3J0KDQ0KSArIENPTlQoNDQpfQorICAgIGNhbGwgTVNHKDQ0KQorICAgIGxldCB2YXIgPSBFUlJhYm9ydCg0NSkgKyBDT05UKDQ1KQorICAgIGNhbGwgTVNHKDQ1KQorCisgICAgWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKworICAgIGxldCBleHBlY3RlZCA9ICIiCisJXCAuICJFMU0xRTJNMkUzTTNFNE00RTVNNUU2TTZFN003RThNOEU5TTkiCisJXCAuICJJMTBNMTBJMTFNMTFJMTJNMTJJMTNNMTNJMTRNMTRJMTVNMTVJMTZNMTZJMTdNMTdJMThNMTgiCisJXCAuICJUMTlNMTlUMjBNMjBUMjFNMjFUMjJNMjJUMjNNMjNUMjRNMjRUMjVNMjVUMjZNMjZUMjdNMjciCisJXCAuICJFMjhDMjhNMjhFMjlDMjlNMjlFMzBDMzBNMzBFMzFDMzFNMzFFMzJDMzJNMzJFMzNDMzNNMzMiCisJXCAuICJFMzRDMzRNMzRFMzVDMzVNMzVFMzZDMzZNMzYiCisJXCAuICJBMzdDMzdNMzdBMzhDMzhNMzhBMzlDMzlNMzlBNDBDNDBNNDBBNDFDNDFNNDFBNDJDNDJNNDIiCisJXCAuICJBNDNDNDNNNDNBNDRDNDRNNDRBNDVDNDVNNDUiCisKKyAgICBpZiB0YWtlbiAhPSBleHBlY3RlZAorCSIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgZGlzcGxheSBleHBsaWNpdGx5OgorCWV4ZWMgIiFlY2hvIDIxNDc0ODM2NDggPj4iIC4gZzpFeHRyYVZpbVJlc3VsdAorCQkJCQkJIiBYOiAwCisJWG91dCAiJ3Rha2VuJyBpcyIgdGFrZW4gImluc3RlYWQgb2YiIGV4cGVjdGVkCisJaWYgc3Vic3RpdHV0ZSh0YWtlbiwKKwlcICdcKC4qXClFM0MzTTN4XCguKlwpRTMwQzMwTTMweFwoLipcKUEzOUMzOU0zOXhcKC4qXCknLAorCVwgJ1wxRTNNM1wyRTMwQzMwTTMwXDNBMzlDMzlNMzlcNCcsCisJXCAiIikgPT0gZXhwZWN0ZWQKKwkgICAgWG91dCAiSXMgKytlbXNnX3NraXAgZm9yIHZhciB3aXRoIGV4cHJfc3RhcnQgbm9uLU5VTEwiCisJCVwgImluIGZfZXhpc3RzIG9rPyIKKwllbmRpZgorICAgIGVuZGlmCisKKyAgICB1bmxldCEgdmFyIHRha2VuIGV4cGVjdGVkCisgICAgY2FsbCBkZWxldGUoV0FfdDUpCisgICAgY2FsbCBkZWxldGUoV0FfdDE0KQorICAgIGNhbGwgZGVsZXRlKFdBX3QyMykKKyAgICB1bmxldCEgV0FfdDUgV0FfdDE0IFdBX3QyMworICAgIGRlbGZ1bmN0aW9uIFdBX3Q1CisgICAgZGVsZnVuY3Rpb24gV0FfdDE0CisgICAgZGVsZnVuY3Rpb24gV0FfdDIzCisKK2VuZGlmCisKK1hjaGVjayAxNjEwMDg3OTM1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA3NzogIEVycm9ycywgaW50ZXJ1cHRzLCA6dGhyb3cgaW4gbmFtZXticmFjZS1leHByZXNzaW9ufQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSBmdW5jdGlvbiBjYWxsIG1hZGUgZHVyaW5nIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbgorIgkgICAgYnJhY2VzIGFzIHBhcnQgb2YgYSBmdW5jdGlvbiBuYW1lIGFmdGVyICI6ZnVuY3Rpb24iIGlzIGFib3J0ZWQgZHVlCisiCSAgICB0byBhbiBlcnJvciBpbnNpZGUgYSA6dHJ5LzplbmR0cnkgcmVnaW9uIG9yIGR1ZSB0byBhbiBpbnRlcnJ1cHQgb3IKKyIJICAgIGEgOnRocm93LCB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIGFib3J0ZWQgYXMgd2VsbCwgYW5kIHRoZQorIgkgICAgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBpZ25vcmVkLCBza2lwcGluZyBhbGwgY29tbWFuZHMgdG8gdGhlCisiCSAgICAiOmVuZGZ1bmN0aW9uIi4gIE9uIGFuIGVycm9yIG5vdCBpbnNpZGUgOnRyeS86ZW5kdHJ5LCB0aGUgZXhwcmVzc2lvbgorIgkgICAgZXZhbHVhdGlvbiBjb250aW51ZXMgYW5kIHRoZSBmdW5jdGlvbiBnZXRzIGRlZmluZWQsIGFuZCBjYW4gYmUKKyIJICAgIGNhbGxlZCBhbmQgZGVsZXRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitYbG9vcElOSVQgMSA0CisKK2Z1bmN0aW9uISBFUlIoKSBhYm9ydAorICAgIFhsb29wIDEJCQkJCSIgWDogMSArIDQgKyAxNiArIDY0CisgICAgYXNkZgorZW5kZnVuY3Rpb24JCSIgcmV0dXJucyAtMQorCitmdW5jdGlvbiEgT0soKQorICAgIFhsb29wIDIJCQkJCSIgWDogMiAqICgxICsgNCArIDE2KQorICAgIGxldCB2OmVycm1zZyA9ICIiCisgICAgcmV0dXJuIDAKK2VuZGZ1bmN0aW9uCisKK2xldCB2OmVycm1zZyA9ICIiCisKK1hwYXRoIDQwOTYJCQkJCSIgWDogNDA5NgorZnVuY3Rpb24hIEZ7MSArIEVSUigpICsgT0soKX0oYXJnKQorICAgICIgRjAgc2hvdWxkIGJlIGRlZmluZWQuCisgICAgaWYgZXhpc3RzKCJhOmFyZyIpICYmIGE6YXJnID09ICJjYWxsaW5nIgorCVhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisgICAgZWxzZQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgoraWYgdjplcnJtc2cgIT0gIiIKKyAgICBYcGF0aCAzMjc2OAkJCQkJIiBYOiAwCitlbmRpZgorWGxvb3BORVhUCisKK1hwYXRoIDY1NTM2CQkJCQkiIFg6IDY1NTM2CitjYWxsIEZ7MSArIEVSUigpICsgT0soKX0oImNhbGxpbmciKQoraWYgdjplcnJtc2cgIT0gIiIKKyAgICBYcGF0aCAxMzEwNzIJCQkJIiBYOiAwCitlbmRpZgorWGxvb3BORVhUCisKK1hwYXRoIDI2MjE0NAkJCQkJIiBYOiAyNjIxNDQKK2RlbGZ1bmN0aW9uIEZ7MSArIEVSUigpICsgT0soKX0KK2lmIHY6ZXJybXNnICE9ICIiCisgICAgWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorZW5kaWYKK1hsb29wTkVYVAorCit0cnkKKyAgICB3aGlsZSAxCisJbGV0IGNhdWdodCA9IDAKKwl0cnkKKwkgICAgWHBhdGggMTA0ODU3NgkJCSIgWDogMTA0ODU3NgorCSAgICBmdW5jdGlvbiEgR3sxICsgRVJSKCkgKyBPSygpfShhcmcpCisJCSIgRzAgc2hvdWxkIG5vdCBiZSBkZWZpbmVkLCBhbmQgdGhlIGZ1bmN0aW9uIGJvZHkgc2hvdWxkIGJlCisJCSIgc2tpcHBlZC4KKwkJaWYgZXhpc3RzKCJhOmFyZyIpICYmIGE6YXJnID09ICJjYWxsaW5nIgorCQkgICAgWHBhdGggMjA5NzE1MgkJIiBYOiAwCisJCWVsc2UKKwkJICAgIFhwYXRoIDQxOTQzMDQJCSIgWDogMAorCQllbmRpZgorCQkiIFVzZSBhbiB1bm1hdGNoZWQgIjpmaW5hbGx5IiB0byBjaGVjayB3aGV0aGVyIHRoZSBib2R5IGlzCisJCSIgc2tpcHBlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBpbiBFUlIoKS4gIFRoaXMgd29ya3Mgd2hldGhlciBvcgorCQkiIG5vdCB0aGUgZXhjZXB0aW9uIGlzIGNvbnZlcnRlZCB0byBhbiBleGNlcHRpb24uCisJCWZpbmFsbHkKKwkJICAgIFhwYXRoIDgzODg2MDgJCSIgWDogMAorCQkgICAgWG91dCAiQm9keSBvZiBHezEgKyBFUlIoKSArIE9LKCl9KCkgbm90IHNraXBwZWQiCisJCSAgICAiIERpc2NhcmQgdGhlIGFib3J0aW5nIGVycm9yIG9yIGV4Y2VwdGlvbiwgYW5kIGJyZWFrIHRoZQorCQkgICAgIiB3aGlsZSBsb29wLgorCQkgICAgYnJlYWsKKwkJIiBFbmQgdGhlIHRyeSBjb25kaXRpb25hbCBhbmQgc3RhcnQgYSBuZXcgb25lIHRvIGF2b2lkCisJCSIgIjpjYXRjaCBhZnRlciA6ZmluYWxseSIgZXJyb3JzLgorCQllbmR0cnkKKwkJdHJ5CisJCVhwYXRoIDE2Nzc3MjE2CQkJIiBYOiAwCisJICAgIGVuZGZ1bmN0aW9uCisKKwkgICAgIiBXaGVuIHRoZSBmdW5jdGlvbiB3YXMgbm90IGRlZmluZWQsIHRoaXMgd29uJ3QgYmUgcmVhY2hlZCAtIHdoZXRoZXIKKwkgICAgIiB0aGUgYm9keSB3YXMgc2tpcHBlZCBvciBub3QuICBXaGVuIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgaXQKKwkgICAgIiBjYW4gYmUgY2FsbGVkIGFuZCBkZWxldGVkIGhlcmUuCisJICAgIFhwYXRoIDMzNTU0NDMyCQkJIiBYOiAwCisJICAgIFhvdXQgIkcwKCkgaGFzIGJlZW4gZGVmaW5lZCIKKwkgICAgWGxvb3BORVhUCisJICAgIHRyeQorCQljYWxsIEd7MSArIEVSUigpICsgT0soKX0oImNhbGxpbmciKQorCSAgICBjYXRjaCAvLiovCisJCVhwYXRoIDY3MTA4ODY0CQkJIiBYOiAwCisJICAgIGVuZHRyeQorCSAgICBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDAKKwkgICAgWGxvb3BORVhUCisJICAgIHRyeQorCQlkZWxmdW5jdGlvbiBHezEgKyBFUlIoKSArIE9LKCl9CisJICAgIGNhdGNoIC8uKi8KKwkJWHBhdGggMjY4NDM1NDU2CQkJIiBYOiAwCisJICAgIGVuZHRyeQorCWNhdGNoIC9hc2RmLworCSAgICAiIEp1bXBlZCB0byB3aGVuIHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZCBhbmQgdGhlIGJvZHkgaXMKKwkgICAgIiBza2lwcGVkLgorCSAgICBsZXQgY2F1Z2h0ID0gMQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggNTM2ODcwOTEyCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAxMDczNzQxODI0CQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkJCQkiIGp1bXBlZCB0byB3aGVuIHRoZSBib2R5IGlzIG5vdCBza2lwcGVkCisgICAgZW5kd2hpbGUKK2NhdGNoIC8uKi8KKyAgICAiIFRoZSBYcGF0aCBjb21tYW5kIGRvZXMgbm90IGFjY2VwdCAyXjMxIChuZWdhdGl2ZSk7IGFkZCBleHBsaWNpdGx5OgorICAgIGxldCBYcGF0aCA9IFhwYXRoICsgMjE0NzQ4MzY0OAkJIiBYOiAwCisgICAgWG91dCAiQm9keSBvZiBHezEgKyBFUlIoKSArIE9LKCl9KCkgbm90IHNraXBwZWQsIGV4Y2VwdGlvbiBjYXVnaHQiCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK1hjaGVjayAxMzg4NjcxCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA3ODogIE1lc3NhZ2VzIG9uIHBhcnNpbmcgZXJyb3JzIGluIGV4cHJlc3Npb24gZXZhbHVhdGlvbgkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYW4gZXhwcmVzc2lvbiBldmFsdWF0aW9uIGRldGVjdHMgYSBwYXJzaW5nIGVycm9yLCBhbiBlcnJvcgorIgkgICAgbWVzc2FnZSBpcyBnaXZlbiBhbmQgY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSBleHByZXNzaW9uCisiCSAgICBldmFsdWF0aW9uIGlzIGFib3J0ZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorCisgICAgbGV0IHRha2VuID0gIiIKKworICAgIGZ1bmN0aW9uISBGKG4pCisJbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gIkYiIC4gYTpuCisgICAgZW5kZnVuY3Rpb24KKworICAgIGZ1bmN0aW9uISBNU0cobiwgZW5yLCBlbXNnKQorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJNIiAuIGE6bgorCWxldCBlbmdsaXNoID0gdjpsYW5nID09ICJDIiB8fCB2OmxhbmcgPX4gJ15bRWVdbicKKwlpZiBhOmVuciA9PSAiIgorCSAgICBYb3V0ICJUT0RPOiBBZGQgbWVzc2FnZSBudW1iZXIgZm9yOiIgYTplbXNnCisJICAgIGxldCB2OmVycm1zZyA9ICI6IiAuIHY6ZXJybXNnCisJZW5kaWYKKwlpZiB2OmVycm1zZyAhfiAnXicuYTplbnIuJzonIHx8IChlbmdsaXNoICYmIHY6ZXJybXNnICF+IGE6ZW1zZykKKwkgICAgaWYgdjplcnJtc2cgPT0gIiIKKwkJWG91dCAiRXhwciIgYTpuLiI6IE1lc3NhZ2UgbWlzc2luZy4iCisJCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJ4IgorCSAgICBlbHNlCisJCWxldCB2OmVycm1zZyA9IGVzY2FwZSh2OmVycm1zZywgJyInKQorCQlYb3V0ICJFeHByIiBhOm4uIjogVW5leHBlY3RlZCBtZXNzYWdlOiIgdjplcnJtc2cKKwkJbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gIlgiCisJICAgIGVuZGlmCisJZW5kaWYKKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIENPTlQobikKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiQyIgLiBhOm4KKyAgICBlbmRmdW5jdGlvbgorCisgICAgbGV0IHY6ZXJybXNnID0gIiIKKyAgICBYbG9vcElOSVQgMSAyCisKKyAgICB0cnkKKwlsZXQgdCA9IDEKKwl3aGlsZSB0IDw9IDE0CisJICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJUIiAuIHQKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgdHJ5CisJCWxldCBjYXVnaHQgPSAwCisJCWlmIHQgPT0gMQorCQkgICAgbGV0IHZ7bm92YXIgKyBDT05UKHQpfSA9IDAKKwkJZWxzZWlmIHQgPT0gMgorCQkgICAgbGV0IHZ7bm92YXIgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSAzCisJCSAgICBsZXQgdmFyID0gZXhpc3RzKCd2e25vdmFyICsgQ09OVCh0KX0nKQorCQllbHNlaWYgdCA9PSA0CisJCSAgICB1bmxldCB2e25vdmFyICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gNQorCQkgICAgZnVuY3Rpb24gRntub3ZhciArIENPTlQodCl9KCkKKwkJICAgIGVuZGZ1bmN0aW9uCisJCWVsc2VpZiB0ID09IDYKKwkJICAgIGZ1bmN0aW9uIEZ7bm92YXIgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSA3CisJCSAgICBsZXQgdmFyID0gZXhpc3RzKCcqRntub3ZhciArIENPTlQodCl9JykKKwkJZWxzZWlmIHQgPT0gOAorCQkgICAgZGVsZnVuY3Rpb24gRntub3ZhciArIENPTlQodCl9CisJCWVsc2VpZiB0ID09IDkKKwkJICAgIGVjaG8gbm92YXIgKyBDT05UKHQpCisJCWVsc2VpZiB0ID09IDEwCisJCSAgICBlY2hvIHZ7bm92YXIgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSAxMQorCQkgICAgZWNobyBGe25vdmFyICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMTIKKwkJICAgIGxldCB2YXIgPSBub3ZhciArIENPTlQodCkKKwkJZWxzZWlmIHQgPT0gMTMKKwkJICAgIGxldCB2YXIgPSB2e25vdmFyICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMTQKKwkJICAgIGxldCB2YXIgPSBGe25vdmFyICsgQ09OVCh0KX0oKQorCQllbmRpZgorCSAgICBjYXRjaCAvXlZpbVwoKFxhXCspXClcPTovCisJCSIgdjplcnJtc2cgaXMgbm90IHNldCB3aGVuIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNvbnZlcnRlZCB0byBhbgorCQkiIGV4Y2VwdGlvbi4gIFNldCBpdCB0byB0aGUgb3JpZ2luYWwgZXJyb3IgbWVzc2FnZS4KKwkJbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwKKwkJICAgIFwgJ15WaW1cKChcYVwrKVwpXD06JywgJycsICIiKQorCQlsZXQgY2F1Z2h0ID0gMQorCSAgICBmaW5hbGx5CisJCWlmICFjYXVnaHQJIiBubyBlcnJvciBleGNlcHRpb25zICgkVklNTk9FUlJUSFJPVyBzZXQpCisJCSAgICBpZiB0IDw9IDggJiYgdCAhPSAzCisJCQljYWxsIE1TRyh0LCAnRTQ3NScsICdJbnZhbGlkIGFyZ3VtZW50XD4nKQorCQkgICAgZWxzZQorCQkJY2FsbCBNU0codCwgJ0UxNScsICJJbnZhbGlkIGV4cHJlc3Npb24iKQorCQkgICAgZW5kaWYKKwkJZWxzZQorCQkgICAgaWYgdCA9PSAyIHx8IHQgPT0gNAorCQkJY2FsbCBNU0codCwgJ0U0NzUnLCAnSW52YWxpZCBhcmd1bWVudFw+JykKKwkJICAgIGVsc2UKKwkJCWNhbGwgTVNHKHQsICdFMTIxJywgIlVuZGVmaW5lZCB2YXJpYWJsZSIpCisJCSAgICBlbmRpZgorCQllbmRpZgorCQlsZXQgdCA9IHQgKyAxCisJCVhsb29wTkVYVAorCQljb250aW51ZQkiIGRpc2NhcmQgYW4gYWJvcnRpbmcgZXJyb3IKKwkgICAgZW5kdHJ5CisJZW5kd2hpbGUKKyAgICBjYXRjaCAvLiovCisJWGxvb3AgMQkJCQkJIiBYOiAwCisJWG91dCB0LiI6IiB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisgICAgZW5kdHJ5CisKKyAgICBmdW5jdGlvbiEgVChuLCBleHByLCBlbnIsIGVtc2cpCisJdHJ5CisJICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJUIiAuIGE6bgorCSAgICBsZXQgdjplcnJtc2cgPSAiIgorCSAgICB0cnkKKwkJbGV0IGNhdWdodCA9IDAKKwkJZXhlY3V0ZSAibGV0IHZhciA9ICIgLiBhOmV4cHIKKwkgICAgY2F0Y2ggL15WaW1cKChcYVwrKVwpXD06LworCQkiIHY6ZXJybXNnIGlzIG5vdCBzZXQgd2hlbiB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjb252ZXJ0ZWQgdG8gYW4KKwkJIiBleGNlcHRpb24uICBTZXQgaXQgdG8gdGhlIG9yaWdpbmFsIGVycm9yIG1lc3NhZ2UuCisJCWxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sCisJCSAgICBcICdeVmltXCgoXGFcKylcKVw9OicsICcnLCAiIikKKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlpZiAhY2F1Z2h0CSIgbm8gZXJyb3IgZXhjZXB0aW9ucyAoJFZJTU5PRVJSVEhST1cgc2V0KQorCQkgICAgY2FsbCBNU0coYTpuLCAnRTE1JywgIkludmFsaWQgZXhwcmVzc2lvbiIpCisJCWVsc2UKKwkJICAgIGNhbGwgTVNHKGE6biwgYTplbnIsIGE6ZW1zZykKKwkJZW5kaWYKKwkJWGxvb3BORVhUCisJCSIgRGlzY2FyZCBhbiBhYm9ydGluZyBlcnJvcjoKKwkJcmV0dXJuCisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWGxvb3AgMQkJCQkiIFg6IDAKKwkgICAgWG91dCBhOm4uIjoiIHY6ZXhjZXB0aW9uICJpbiIgRXh0cmFWaW1UaHJvd3BvaW50KCkKKwllbmR0cnkKKyAgICBlbmRmdW5jdGlvbgorCisgICAgY2FsbCBUKDE1LCAnTm9mdW5jKCkgKyBDT05UKDE1KScsCSdFMTE3JywJIlVua25vd24gZnVuY3Rpb24iKQorICAgIGNhbGwgVCgxNiwgJ0YoMSAyICsgQ09OVCgxNikpJywJJ0UxMTYnLAkiSW52YWxpZCBhcmd1bWVudHMiKQorICAgIGNhbGwgVCgxNywgJ0YoMSwgMikgKyBDT05UKDE3KScsCSdFMTE4JywJIlRvbyBtYW55IGFyZ3VtZW50cyIpCisgICAgY2FsbCBUKDE4LCAnRigpICsgQ09OVCgxOCknLAknRTExOScsCSJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpCisgICAgY2FsbCBUKDE5LCAneygxfSArIENPTlQoMTkpJywJJ0UxMTAnLAkiTWlzc2luZyAnKSciKQorICAgIGNhbGwgVCgyMCwgJygiYWJjIlsxKSArIENPTlQoMjApJywJJ0UxMTEnLAkiTWlzc2luZyAnXSciKQorICAgIGNhbGwgVCgyMSwgJygxICspICsgQ09OVCgyMSknLAknRTE1JywJIkludmFsaWQgZXhwcmVzc2lvbiIpCisgICAgY2FsbCBUKDIyLCAnMSAyICsgQ09OVCgyMiknLAknRTE1JywJIkludmFsaWQgZXhwcmVzc2lvbiIpCisgICAgY2FsbCBUKDIzLCAnKDEgPyAyKSArIENPTlQoMjMpJywJJ0UxMDknLAkiTWlzc2luZyAnOicgYWZ0ZXIgJz8nIikKKyAgICBjYWxsIFQoMjQsICcoImFiYykgKyBDT05UKDI0KScsCSdFMTE0JywJIk1pc3NpbmcgcXVvdGUiKQorICAgIGNhbGwgVCgyNSwgIignYWJjKSArIENPTlQoMjUpIiwJJ0UxMTUnLAkiTWlzc2luZyBxdW90ZSIpCisgICAgY2FsbCBUKDI2LCAnJiArIENPTlQoMjYpJywJCSdFMTEyJywgIk9wdGlvbiBuYW1lIG1pc3NpbmciKQorICAgIGNhbGwgVCgyNywgJyZhc2RmICsgQ09OVCgyNyknLAknRTExMycsICJVbmtub3duIG9wdGlvbiIpCisKKyAgICBYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKworICAgIGxldCBleHBlY3RlZCA9ICIiCisJXCAuICJUMU0xVDJNMlQzTTNUNE00VDVNNVQ2TTZUN003VDhNOFQ5TTlUMTBNMTBUMTFNMTFUMTJNMTJUMTNNMTNUMTRNMTQiCisJXCAuICJUMTVNMTVUMTZNMTZUMTdNMTdUMThNMThUMTlNMTlUMjBNMjBUMjFNMjFUMjJNMjJUMjNNMjNUMjRNMjRUMjVNMjUiCisJXCAuICJUMjZNMjZUMjdNMjciCisKKyAgICBpZiB0YWtlbiAhPSBleHBlY3RlZAorCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKwlYb3V0ICIndGFrZW4nIGlzIiB0YWtlbiAiaW5zdGVhZCBvZiIgZXhwZWN0ZWQKKwlpZiBzdWJzdGl0dXRlKHRha2VuLCAnXCguKlwpVDNNM3hcKC4qXCknLCAnXDFUM00zXDInLCAiIikgPT0gZXhwZWN0ZWQKKwkgICAgWG91dCAiSXMgKytlbXNnX3NraXAgZm9yIHZhciB3aXRoIGV4cHJfc3RhcnQgbm9uLU5VTEwiCisJCVwgImluIGZfZXhpc3RzIG9rPyIKKwllbmRpZgorICAgIGVuZGlmCisKKyAgICB1bmxldCEgdmFyIGNhdWdodCB0YWtlbiBleHBlY3RlZAorICAgIGNhbGwgZGVsZXRlKFdBX3Q1KQorICAgIHVubGV0ISBXQV90NQorICAgIGRlbGZ1bmN0aW9uIFdBX3Q1CisKK2VuZGlmCisKK1hjaGVjayAxMzQyMTc3MjgKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDc5OiAgVGhyb3dpbmcgb25lIG9mIHNldmVyYWwgZXJyb3JzIGZvciB0aGUgc2FtZSBjb21tYW5kCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBzZXZlcmFsIGVycm9ycyBhcHBlYXIgaW4gYSByb3cgKGZvciBpbnN0YW5jZSBkdXJpbmcgZXhwcmVzc2lvbgorIgkgICAgZXZhbHVhdGlvbiksIHRoZSBmaXJzdCBhcyB0aGUgbW9zdCBzcGVjaWZpYyBvbmUgaXMgdXNlZCB3aGVuCisiCSAgICB0aHJvd2luZyBhbiBlcnJvciBleGNlcHRpb24uICBJZiwgaG93ZXZlciwgYSBzeW50YXggZXJyb3IgaXMKKyIJICAgIGRldGVjdGVkIGFmdGVyd2FyZHMsIHRoaXMgb25lIGlzIHVzZWQgZm9yIHRoZSBlcnJvciBleGNlcHRpb24uCisiCSAgICBPbiBhIHN5bnRheCBlcnJvciwgdGhlIG5leHQgY29tbWFuZCBpcyBub3QgZXhlY3V0ZWQsIG9uIGEgbm9ybWFsCisiCSAgICBlcnJvciwgaG93ZXZlciwgaXQgaXMgKHJlbGV2YW50IG9ubHkgaW4gYSBmdW5jdGlvbiB3aXRob3V0IHRoZQorIgkgICAgImFib3J0IiBmbGFnKS4gIHY6ZXJybXNnIGlzIG5vdCBzZXQuCisiCisiCSAgICBJZiB0aHJvd2luZyBlcnJvciBleGNlcHRpb25zIGlzIGNvbmZpZ3VyZWQgb2ZmLCB2OmVycm1zZyBpcyBhbHdheXMKKyIJICAgIHNldCB0byB0aGUgbGF0ZXN0IGVycm9yIG1lc3NhZ2UsIHRoYXQgaXMsIHRvIHRoZSBtb3JlIGdlbmVyYWwKKyIJICAgIG1lc3NhZ2Ugb3IgdGhlIHN5bnRheCBlcnJvciwgcmVzcGVjdGl2ZWx5LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK1hsb29wSU5JVCAxIDIKKworZnVuY3Rpb24hIE5FWFQoY21kKQorICAgIGV4ZWMgYTpjbWQgLiAiIHwgWGxvb3AgMSIKK2VuZGZ1bmN0aW9uCisKK2NhbGwgTkVYVCgnZWNobyBub3ZhcicpCQkJCSIgWDogMSAqICAxICAoY2hlY2tzIG5leHRjbWQpCitYbG9vcE5FWFQKK2NhbGwgTkVYVCgnbGV0IG5vdmFyICMnKQkJCSIgWDogMCAqICAyICAoc2tpcHMgbmV4dGNtZCkKK1hsb29wTkVYVAorY2FsbCBORVhUKCd1bmxldCBub3ZhciAjJykJCQkiIFg6IDAgKiAgNCAgKHNraXBzIG5leHRjbWQpCitYbG9vcE5FWFQKK2NhbGwgTkVYVCgnbGV0IHtub3Zhcn0nKQkJCSIgWDogMCAqICA4ICAoc2tpcHMgbmV4dGNtZCkKK1hsb29wTkVYVAorY2FsbCBORVhUKCd1bmxldHsgbm92YXJ9JykJCQkiIFg6IDAgKiAxNiAgKHNraXBzIG5leHRjbWQpCisKK2Z1bmN0aW9uISBFWEVDKGNtZCkKKyAgICBleGVjIGE6Y21kCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgTUFUQ0goZXhwZWN0ZWQsIG1zZywgZW5yLCBlbXNnKQorICAgIGxldCBtc2cgPSBhOm1zZworICAgIGlmIGE6ZW5yID09ICIiCisJWG91dCAiVE9ETzogQWRkIG1lc3NhZ2UgbnVtYmVyIGZvcjoiIGE6ZW1zZworCWxldCBtc2cgPSAiOiIgLiBtc2cKKyAgICBlbmRpZgorICAgIGxldCBlbmdsaXNoID0gdjpsYW5nID09ICJDIiB8fCB2OmxhbmcgPX4gJ15bRWVdbicKKyAgICBpZiBtc2cgIX4gJ14nLmE6ZW5yLic6JyB8fCAoZW5nbGlzaCAmJiBtc2cgIX4gYTplbXNnKQorCWxldCBtYXRjaCA9ICAwCisJaWYgYTpleHBlY3RlZAkJIiBubyBtYXRjaCBhbHRob3VnaCBleHBlY3RlZAorCSAgICBpZiBhOm1zZyA9PSAiIgorCQlYb3V0ICJNZXNzYWdlIG1pc3NpbmcuIgorCSAgICBlbHNlCisJCWxldCBtc2cgPSBlc2NhcGUobXNnLCAnIicpCisJCVhvdXQgIlVuZXhwZWN0ZWQgbWVzc2FnZToiIG1zZworCSAgICBlbmRpZgorCWVuZGlmCisgICAgZWxzZQorCWxldCBtYXRjaCA9ICAxCisJaWYgIWE6ZXhwZWN0ZWQJCSIgbWF0Y2ggYWx0aG91Z2ggbm90IGV4cGVjdGVkCisJICAgIGxldCBtc2cgPSBlc2NhcGUobXNnLCAnIicpCisJICAgIFhvdXQgIlVuZXhwZWN0ZWQgbWVzc2FnZToiIG1zZworCWVuZGlmCisgICAgZW5kaWYKKyAgICByZXR1cm4gbWF0Y2gKK2VuZGZ1bmN0aW9uCisKK3RyeQorCisgICAgd2hpbGUgMQkJCQkiIGR1bW15IGxvb3AKKwl0cnkKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgbGV0IHRocm1zZyA9ICIiCisJICAgIGNhbGwgRVhFQygnZWNobyBub3ZhcicpCSIgbm9ybWFsIGVycm9yCisJY2F0Y2ggL15WaW1cKChcYVwrKVwpXD06LworCSAgICBsZXQgY2F1Z2h0ID0gMQorCSAgICBsZXQgdGhybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW1cKChcYVwrKVwpXD06JywgJycsICIiKQorCWZpbmFsbHkKKwkgICAgWHBhdGggMzIJCQkJIiBYOiAzMgorCSAgICBpZiAhY2F1Z2h0CisJCWlmICEkVklNTk9FUlJUSFJPVworCQkgICAgWHBhdGggNjQJCQkiIFg6IDAKKwkJZW5kaWYKKwkgICAgZWxzZWlmICFNQVRDSCgxLCB0aHJtc2csICdFMTIxJywgIlVuZGVmaW5lZCB2YXJpYWJsZSIpCisJICAgIFwgfHwgdjplcnJtc2cgIT0gIiIKKwkJWHBhdGggMTI4CQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGlmICFjYXVnaHQgJiYgIU1BVENIKDEsIHY6ZXJybXNnLCAnRTE1JywgIkludmFsaWQgZXhwcmVzc2lvbiIpCisJCVhwYXRoIDI1NgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBicmVhawkJCSIgZGlzY2FyZCBlcnJvciBpZiAkVklNTk9FUlJUSFJPVyA9PSAxCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIFhwYXRoIDUxMgkJCQkJIiBYOiA1MTIKKyAgICBsZXQgY21kID0gImxldCIKKyAgICBYbG9vcElOSVQgMTAyNCAzMgorICAgIHdoaWxlIGNtZCAhPSAiIgorCXRyeQorCSAgICBsZXQgdjplcnJtc2cgPSAiIgorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICBsZXQgdGhybXNnID0gIiIKKwkgICAgY2FsbCBFWEVDKGNtZCAuICcgbm92YXIgIycpCQkiIG5vcm1hbCBwbHVzIHN5bnRheCBlcnJvcgorCWNhdGNoIC9eVmltXCgoXGFcKylcKVw9Oi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHRocm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltXCgoXGFcKylcKVw9OicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhsb29wIDEJCQkJIiBYOiAxMDI0ICogKDEgKyAzMikKKwkgICAgaWYgIWNhdWdodAorCQlpZiAhJFZJTU5PRVJSVEhST1cKKwkJICAgIFhsb29wIDIJCQkiIFg6IDAKKwkJZW5kaWYKKwkgICAgZWxzZQorCQlpZiBjbWQgPT0gImxldCIKKwkJICAgIGxldCBtYXRjaCA9IE1BVENIKDAsIHRocm1zZywgJ0UxMDYnLCAiVW5rbm93biB2YXJpYWJsZSIpCisJCWVsc2VpZiBjbWQgPT0gInVubGV0IgorCQkgICAgbGV0IG1hdGNoID0gTUFUQ0goMCwgdGhybXNnLCAnRTEwOCcsICJObyBzdWNoIHZhcmlhYmxlIikKKwkJZW5kaWYKKwkJaWYgbWF0Y2gJCQkJCSIgbm9ybWFsIGVycm9yCisJCSAgICBYbG9vcCA0CQkJIiBYOiAwCisJCWVuZGlmCisJCWlmICFNQVRDSCgxLCB0aHJtc2csICdFNDg4JywgIlRyYWlsaW5nIGNoYXJhY3RlcnMiKQorCQlcfHwgdjplcnJtc2cgIT0gIiIKKwkJCQkJCQkJIiBzeW50YXggZXJyb3IKKwkJICAgIFhsb29wIDgJCQkiIFg6IDAKKwkJZW5kaWYKKwkgICAgZW5kaWYKKwkgICAgaWYgIWNhdWdodCAmJiAhTUFUQ0goMSwgdjplcnJtc2csICdFNDg4JywgIlRyYWlsaW5nIGNoYXJhY3RlcnMiKQorCQkJCQkJCQkiIGxhc3QgZXJyb3IKKwkJWGxvb3AgMTYJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgY21kID09ICJsZXQiCisJCWxldCBjbWQgPSAidW5sZXQiCisJICAgIGVsc2UKKwkJbGV0IGNtZCA9ICIiCisJICAgIGVuZGlmCisJICAgIFhsb29wTkVYVAorCSAgICBjb250aW51ZQkJCSIgZGlzY2FyZCBlcnJvciBpZiAkVklNTk9FUlJUSFJPVyA9PSAxCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIFhwYXRoIDEwNDg1NzYJCQkJIiBYOiAxMDQ4NTc2CisgICAgbGV0IGNtZCA9ICJsZXQiCisgICAgWGxvb3BJTklUIDIwOTcxNTIgMzIKKyAgICB3aGlsZSBjbWQgIT0gIiIKKwl0cnkKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgbGV0IHRocm1zZyA9ICIiCisJICAgIGNhbGwgRVhFQyhjbWQgLiAnIHtub3Zhcn0nKQkJIiBub3JtYWwgcGx1cyBzeW50YXggZXJyb3IKKwljYXRjaCAvXlZpbVwoKFxhXCspXClcPTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB0aHJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbVwoKFxhXCspXClcPTonLCAnJywgIiIpCisJZmluYWxseQorCSAgICBYbG9vcCAxCQkJCSIgWDogMjA5NzE1MiAqICgxICsgMzIpCisJICAgIGlmICFjYXVnaHQKKwkJaWYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYbG9vcCAyCQkJIiBYOiAwCisJCWVuZGlmCisJICAgIGVsc2UKKwkJaWYgTUFUQ0goMCwgdGhybXNnLCAnRTEyMScsICJVbmRlZmluZWQgdmFyaWFibGUiKSAiIG5vcm1hbCBlcnJvcgorCQkgICAgWGxvb3AgNAkJCSIgWDogMAorCQllbmRpZgorCQlpZiAhTUFUQ0goMSwgdGhybXNnLCAnRTQ3NScsICdJbnZhbGlkIGFyZ3VtZW50XD4nKQorCQlcIHx8IHY6ZXJybXNnICE9ICIiCQkJCSAgIiBzeW50YXggZXJyb3IKKwkJICAgIFhsb29wIDgJCQkiIFg6IDAKKwkJZW5kaWYKKwkgICAgZW5kaWYKKwkgICAgaWYgIWNhdWdodCAmJiAhTUFUQ0goMSwgdjplcnJtc2csICdFNDc1JywgJ0ludmFsaWQgYXJndW1lbnRcPicpCisJCQkJCQkJCSIgbGFzdCBlcnJvcgorCQlYbG9vcCAxNgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiBjbWQgPT0gImxldCIKKwkJbGV0IGNtZCA9ICJ1bmxldCIKKwkgICAgZWxzZQorCQlsZXQgY21kID0gIiIKKwkgICAgZW5kaWYKKwkgICAgWGxvb3BORVhUCisJICAgIGNvbnRpbnVlCQkJIiBkaXNjYXJkIGVycm9yIGlmICRWSU1OT0VSUlRIUk9XID09IDEKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorCitjYXRjaCAvLiovCisgICAgIiBUaGUgWHBhdGggY29tbWFuZCBkb2VzIG5vdCBhY2NlcHQgMl4zMSAobmVnYXRpdmUpOyBhZGQgZXhwbGljaXRseToKKyAgICBsZXQgWHBhdGggPSBYcGF0aCArIDIxNDc0ODM2NDgJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorCit1bmxldCEgbmV4dF9jb21tYW5kIHRocm1zZyBtYXRjaAorZGVsZnVuY3Rpb24gTkVYVAorZGVsZnVuY3Rpb24gRVhFQworZGVsZnVuY3Rpb24gTUFUQ0gKKworWGNoZWNrIDcwMjg4OTI5CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA4MDogIFN5bnRheCBlcnJvciBpbiBleHByZXNzaW9uIGZvciBpbGxlZ2FsIDplbHNlaWYJCSAgICB7e3sxCisiCisiCSAgICBJZiB0aGVyZSBpcyBhIHN5bnRheCBlcnJvciBpbiB0aGUgZXhwcmVzc2lvbiBhZnRlciBhbiBpbGxlZ2FsCisiCSAgICA6ZWxzZWlmLCBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuIChvciBhbiBlcnJvciBleGNlcHRpb24gdGhyb3duKQorIgkgICAgZm9yIHRoZSBpbGxlZ2FsIDplbHNlaWYgcmF0aGVyIHRoYW4gdGhlIGV4cHJlc3Npb24gZXJyb3IuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworZnVuY3Rpb24hIE1TRyhlbnIsIGVtc2cpCisgICAgbGV0IGVuZ2xpc2ggPSB2OmxhbmcgPT0gIkMiIHx8IHY6bGFuZyA9fiAnXltFZV1uJworICAgIGlmIGE6ZW5yID09ICIiCisJWG91dCAiVE9ETzogQWRkIG1lc3NhZ2UgbnVtYmVyIGZvcjoiIGE6ZW1zZworCWxldCB2OmVycm1zZyA9ICI6IiAuIHY6ZXJybXNnCisgICAgZW5kaWYKKyAgICBsZXQgbWF0Y2ggPSAxCisgICAgaWYgdjplcnJtc2cgIX4gJ14nLmE6ZW5yLic6JyB8fCAoZW5nbGlzaCAmJiB2OmVycm1zZyAhfiBhOmVtc2cpCisJbGV0IG1hdGNoID0gMAorCWlmIHY6ZXJybXNnID09ICIiCisJICAgIFhvdXQgIk1lc3NhZ2UgbWlzc2luZy4iCisJZWxzZQorCSAgICBsZXQgdjplcnJtc2cgPSBlc2NhcGUodjplcnJtc2csICciJykKKwkgICAgWG91dCAiVW5leHBlY3RlZCBtZXNzYWdlOiIgdjplcnJtc2cKKwllbmRpZgorICAgIGVuZGlmCisgICAgcmV0dXJuIG1hdGNoCitlbmRmdW5jdGlvbgorCitsZXQgdjplcnJtc2cgPSAiIgoraWYgMAorZWxzZQorZWxzZWlmIDEgfHx8IDIKK2VuZGlmCitYcGF0aCAxCQkJCQkJIiBYOiAxCitpZiAhTVNHKCdFNTg0JywgIjplbHNlaWYgYWZ0ZXIgOmVsc2UiKQorICAgIFhwYXRoIDIJCQkJCSIgWDogMAorZW5kaWYKKworbGV0IHY6ZXJybXNnID0gIiIKK2lmIDEKK2Vsc2UKK2Vsc2VpZiAxIHx8fCAyCitlbmRpZgorWHBhdGggNAkJCQkJCSIgWDogNAoraWYgIU1TRygnRTU4NCcsICI6ZWxzZWlmIGFmdGVyIDplbHNlIikKKyAgICBYcGF0aCA4CQkJCQkiIFg6IDAKK2VuZGlmCisKK2xldCB2OmVycm1zZyA9ICIiCitlbHNlaWYgMSB8fHwgMgorWHBhdGggMTYJCQkJCSIgWDogMTYKK2lmICFNU0coJ0U1ODInLCAiOmVsc2VpZiB3aXRob3V0IDppZiIpCisgICAgWHBhdGggMzIJCQkJCSIgWDogMAorZW5kaWYKKworbGV0IHY6ZXJybXNnID0gIiIKK3doaWxlIDEKKyAgICBlbHNlaWYgMSB8fHwgMgorZW5kd2hpbGUKK1hwYXRoIDY0CQkJCQkiIFg6IDY0CitpZiAhTVNHKCdFNTgyJywgIjplbHNlaWYgd2l0aG91dCA6aWYiKQorICAgIFhwYXRoIDEyOAkJCQkJIiBYOiAwCitlbmRpZgorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGlmIDAKKwkgICAgZWxzZQorCSAgICBlbHNlaWYgMSB8fHwgMgorCSAgICBlbmRpZgorCWNhdGNoIC9eVmltXCgoXGFcKylcKVw9Oi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW1cKChcYVwrKVwpXD06JywgJycsICIiKQorCWZpbmFsbHkKKwkgICAgWHBhdGggMjU2CQkJCSIgWDogMjU2CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDUxMgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiAhTVNHKCdFNTg0JywgIjplbHNlaWYgYWZ0ZXIgOmVsc2UiKQorCQlYcGF0aCAxMDI0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDIwNDgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworICAgIGVuZHRyeQorZW5kd2hpbGUKKword2hpbGUgMQorICAgIHRyeQorCXRyeQorCSAgICBsZXQgdjplcnJtc2cgPSAiIgorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICBpZiAxCisJICAgIGVsc2UKKwkgICAgZWxzZWlmIDEgfHx8IDIKKwkgICAgZW5kaWYKKwljYXRjaCAvXlZpbVwoKFxhXCspXClcPTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltXCgoXGFcKylcKVw9OicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDgxOTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgIU1TRygnRTU4NCcsICI6ZWxzZWlmIGFmdGVyIDplbHNlIikKKwkJWHBhdGggMTYzODQJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwllbmR0cnkKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworICAgIGVuZHRyeQorZW5kd2hpbGUKKword2hpbGUgMQorICAgIHRyeQorCXRyeQorCSAgICBsZXQgdjplcnJtc2cgPSAiIgorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICBlbHNlaWYgMSB8fHwgMgorCWNhdGNoIC9eVmltXCgoXGFcKylcKVw9Oi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW1cKChcYVwrKVwpXD06JywgJycsICIiKQorCWZpbmFsbHkKKwkgICAgWHBhdGggNjU1MzYJCQkJIiBYOiA2NTUzNgorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgIU1TRygnRTU4MicsICI6ZWxzZWlmIHdpdGhvdXQgOmlmIikKKwkJWHBhdGggMjYyMTQ0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCWJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisgICAgZW5kdHJ5CitlbmR3aGlsZQorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIHdoaWxlIDEKKwkJZWxzZWlmIDEgfHx8IDIKKwkgICAgZW5kd2hpbGUKKwljYXRjaCAvXlZpbVwoKFxhXCspXClcPTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltXCgoXGFcKylcKVw9OicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEwNDg1NzYJCQkiIFg6IDEwNDg1NzYKKwkgICAgaWYgIWNhdWdodCAmJiAhJFZJTU5PRVJSVEhST1cKKwkJWHBhdGggMjA5NzE1MgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiAhTVNHKCdFNTgyJywgIjplbHNlaWYgd2l0aG91dCA6aWYiKQorCQlYcGF0aCA0MTk0MzA0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDgzODg2MDgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworICAgIGVuZHRyeQorZW5kd2hpbGUKKworWHBhdGggMTY3NzcyMTYJCQkJCSIgWDogMTY3NzcyMTYKKwordW5sZXQhIGNhdWdodAorZGVsZnVuY3Rpb24gTVNHCisKK1hjaGVjayAxNzg5NTc2NQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgODE6ICBEaXNjYXJkaW5nIGV4Y2VwdGlvbnMgYWZ0ZXIgYW4gZXJyb3Igb3IgaW50ZXJydXB0CQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5zaWRlIGEgOnRyeSBjb25kaXRpb25hbCB3aXRob3V0CisiCSAgICA6Y2F0Y2ggYW5kIDpmaW5hbGx5IGNsYXVzZXMgYW5kIGFuIGVycm9yIG9yIGludGVycnVwdCBvY2N1cnMgYmVmb3JlCisiCSAgICB0aGUgOmVuZHRyeSBpcyByZWFjaGVkLCB0aGUgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitpZiBFeHRyYVZpbSgpCisgICAgdHJ5CisJWHBhdGggMQkJCQkJIiBYOiAxCisJdHJ5CisJICAgIFhwYXRoIDIJCQkJIiBYOiAyCisJICAgIHRocm93ICJhcnJnaCIKKwkgICAgWHBhdGggNAkJCQkiIFg6IDAKKyIJICAgIGlmIDEKKwkJWHBhdGggOAkJCQkiIFg6IDAKKwkgICAgIiBlcnJvciBhZnRlciA6dGhyb3c6IG1pc3NpbmcgOmVuZGlmCisJZW5kdHJ5CisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgY2F0Y2ggL2FycmdoLworCVhwYXRoIDMyCQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDY0CQkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICB0cnkKKwlYcGF0aCAxMjgJCQkJIiBYOiAxMjgKKwl0cnkKKwkgICAgWHBhdGggMjU2CQkJCSIgWDogMjU2CisJICAgIHRocm93ICJhcnJnaCIKKwkgICAgWHBhdGggNTEyCQkJCSIgWDogMAorCWVuZHRyeQkJIiBJTlRFUlJVUFQKKwlYcGF0aCAxMDI0CQkJCSIgWDogMAorICAgIGNhdGNoIC9hcnJnaC8KKwlYcGF0aCAyMDQ4CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDQwOTYJCQkJCSIgWDogMAorZW5kaWYKKworWGNoZWNrIDM4NworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgODI6ICBJZ25vcmluZyA6Y2F0Y2ggY2xhdXNlcyBhZnRlciBhbiBlcnJvciBvciBpbnRlcnJ1cHQJCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gYW5kIGFuIGVycm9yIG9yIGludGVycnVwdCBvY2N1cnMgYmVmb3JlCisiCSAgICB0aGUgbWF0Y2hpbmcgOmNhdGNoIGNsYXVzZSBpcyByZWFjaGVkLCB0aGUgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZAorIgkgICAgYW5kIHRoZSA6Y2F0Y2ggY2xhdXNlIGlzIGlnbm9yZWQgKGFsc28gZm9yIHRoZSBlcnJvciBvciBpbnRlcnJ1cHQKKyIJICAgIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24gdGhlbikuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCXRyeQorCSAgICBYcGF0aCAxCQkJCSIgWDogMQorCSAgICB0aHJvdyAiYXJyZ2giCisJICAgIFhwYXRoIDIJCQkJIiBYOiAwCisiCSAgICBpZiAxCisJCVhwYXRoIDQJCQkJIiBYOiAwCisJCSIgZXJyb3IgYWZ0ZXIgOnRocm93OiBtaXNzaW5nIDplbmRpZgorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggOAkJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCAxNgkJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisJZW5kdHJ5CisJWHBhdGggMzIJCQkJIiBYOiAwCisgICAgY2F0Y2ggL2FycmdoLworCVhwYXRoIDY0CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDEyOAkJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgZnVuY3Rpb24hIEUoKQorCXRyeQorCSAgICB0cnkKKwkJWHBhdGggMjU2CQkJIiBYOiAyNTYKKwkJdGhyb3cgImFycmdoIgorCQlYcGF0aCA1MTIJCQkiIFg6IDAKKyIJCWlmIDEKKwkJICAgIFhwYXRoIDEwMjQJCQkiIFg6IDAKKwkJICAgICIgZXJyb3IgYWZ0ZXIgOnRocm93OiBtaXNzaW5nIDplbmRpZgorCSAgICBjYXRjaCAvLiovCisJCVhwYXRoIDIwNDgJCQkiIFg6IDAKKwkJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisJICAgIGNhdGNoIC8uKi8KKwkJWHBhdGggNDA5NgkJCSIgWDogMAorCQlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgRXh0cmFWaW1UaHJvd3BvaW50KCkKKwkgICAgZW5kdHJ5CisJICAgIFhwYXRoIDgxOTIJCQkJIiBYOiAwCisJY2F0Y2ggL2FycmdoLworCSAgICBYcGF0aCAxNjM4NAkJCQkiIFg6IDAKKwllbmR0cnkKKyAgICBlbmRmdW5jdGlvbgorCisgICAgY2FsbCBFKCkKKyAgICBYcGF0aCAzMjc2OAkJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwkgICAgdGhyb3cgImFycmdoIgorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwljYXRjaCAvLiovCSJJTlRFUlJVUFQKKwkgICAgWHBhdGggMjYyMTQ0CQkJIiBYOiAwCisJICAgIFhvdXQgdjpleGNlcHRpb24gImluIiBFeHRyYVZpbVRocm93cG9pbnQoKQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiAwCisJICAgIFhvdXQgdjpleGNlcHRpb24gImluIiBFeHRyYVZpbVRocm93cG9pbnQoKQorCWVuZHRyeQorCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCisgICAgY2F0Y2ggL2FycmdoLworCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisgICAgWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiBJKCkKKwl0cnkKKwkgICAgdHJ5CisJCVhwYXRoIDgzODg2MDgJCQkiIFg6IDgzODg2MDgKKwkJdGhyb3cgImFycmdoIgorCQlYcGF0aCAxNjc3NzIxNgkJCSIgWDogMAorCSAgICBjYXRjaCAvLiovCSJJTlRFUlJVUFQKKwkJWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDAKKwkJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisJICAgIGNhdGNoIC8uKi8KKwkJWHBhdGggNjcxMDg4NjQJCQkiIFg6IDAKKwkJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisJICAgIGVuZHRyeQorCSAgICBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDAKKwljYXRjaCAvYXJyZ2gvCisJICAgIFhwYXRoIDI2ODQzNTQ1NgkJCSIgWDogMAorCWVuZHRyeQorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBjYWxsIEkoKQorICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDAKK2VuZGlmCisKK1hjaGVjayA4NDU0NDAxCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA4MzogIEV4ZWN1dGluZyA6ZmluYWxseSBjbGF1c2VzIGFmdGVyIGFuIGVycm9yIG9yIGludGVycnVwdAkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGFuZCBhbiBlcnJvciBvciBpbnRlcnJ1cHQgb2NjdXJzIGJlZm9yZQorIgkgICAgdGhlIDpmaW5hbGx5IG9mIHRoZSBpbm5lcm1vc3QgOnRyeSBpcyByZWFjaGVkLCB0aGUgZXhjZXB0aW9uIGlzCisiCSAgICBkaXNjYXJkZWQgYW5kIHRoZSA6ZmluYWxseSBjbGF1c2UgaXMgZXhlY3V0ZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCVhwYXRoIDEJCQkJCSIgWDogMQorCXRyeQorCSAgICBYcGF0aCAyCQkJCSIgWDogMgorCSAgICB0aHJvdyAiYXJyZ2giCisJICAgIFhwYXRoIDQJCQkJIiBYOiAwCisiCSAgICBpZiAxCisJCVhwYXRoIDgJCQkJIiBYOiAwCisJICAgICIgZXJyb3IgYWZ0ZXIgOnRocm93OiBtaXNzaW5nIDplbmRpZgorCWZpbmFsbHkKKwkgICAgWHBhdGggMTYJCQkJIiBYOiAxNgorCWVuZHRyeQorCVhwYXRoIDMyCQkJCSIgWDogMAorICAgIGNhdGNoIC9hcnJnaC8KKwlYcGF0aCA2NAkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMAorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCXRyeQorCSAgICBYcGF0aCA1MTIJCQkJIiBYOiA1MTIKKwkgICAgdGhyb3cgImFycmdoIgorCSAgICBYcGF0aCAxMDI0CQkJCSIgWDogMAorCWZpbmFsbHkJCSJJTlRFUlJVUFQKKwkgICAgWHBhdGggMjA0OAkJCQkiIFg6IDIwNDgKKwllbmR0cnkKKwlYcGF0aCA0MDk2CQkJCSIgWDogMAorICAgIGNhdGNoIC9hcnJnaC8KKwlYcGF0aCA4MTkyCQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDE2Mzg0CQkJCQkiIFg6IDAKK2VuZGlmCisKK1hjaGVjayAyODM1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA4NDogIEV4Y2VwdGlvbnMgaW4gYXV0b2NvbW1hbmQgc2VxdWVuY2VzLgkJCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gYSBzZXF1ZW5jZSBvZiBhdXRvY29tbWFuZHMgZm9yCisiCSAgICBhIHNwZWNpZmljIGV2ZW50LCB0aGUgcmVzdCBvZiB0aGUgc2VxdWVuY2UgaXMgbm90IGV4ZWN1dGVkLiAgVGhlCisiCSAgICBjb21tYW5kIHRoYXQgdHJpZ2dlcmVkIHRoZSBhdXRvY29tbWFuZCBleGVjdXRpb24gYWJvcnRzLCBhbmQgdGhlCisiCSAgICBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgY2FsbGVyLgorIgorIgkgICAgRm9yIHRoZSBGdW5jVW5kZWZpbmVkIGV2ZW50IHVuZGVyIGEgZnVuY3Rpb24gY2FsbCBleHByZXNzaW9uIG9yCisiCSAgICA6Y2FsbCBjb21tYW5kLCB0aGUgZnVuY3Rpb24gaXMgbm90IGV4ZXhlY3V0ZWQsIGV2ZW4gd2hlbiBpdCBoYXMKKyIJICAgIGJlZW4gZGVmaW5lZCBieSB0aGUgYXV0b2NvbW1hbmRzIGJlZm9yZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIGZ1bmN0aW9uISBJTlQoKQorCSJJTlRFUlJVUFQKKwlsZXQgZHVtbXkgPSAwCisgICAgZW5kZnVuY3Rpb24KKworICAgIGF1ZyBUTVAKKwlhdXRvY21kIQorCisJYXV0b2NtZCBVc2VyIHgxIFhwYXRoIDEJCQkiIFg6IDEKKwlhdXRvY21kIFVzZXIgeDEgdGhyb3cgIngxIgorCWF1dG9jbWQgVXNlciB4MSBYcGF0aCAyCQkJIiBYOiAwCisKKwlhdXRvY21kIFVzZXIgeDIgWHBhdGggNAkJCSIgWDogNAorCWF1dG9jbWQgVXNlciB4MiBhc2RmCisJYXV0b2NtZCBVc2VyIHgyIFhwYXRoIDgJCQkiIFg6IDAKKworCWF1dG9jbWQgVXNlciB4MyBYcGF0aCAxNgkJIiBYOiAxNgorCWF1dG9jbWQgVXNlciB4MyBjYWxsIElOVCgpCisJYXV0b2NtZCBVc2VyIHgzIFhwYXRoIDMyCQkiIFg6IDAKKworCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMSBmdW5jdGlvbiEgVTEoKQorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMSAgICAgWHBhdGggNjQJIiBYOiAwCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUxIGVuZGZ1bmN0aW9uCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUxIFhwYXRoIDEyOAkiIFg6IDEyOAorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMSB0aHJvdyAiVTEiCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUxIFhwYXRoIDI1NgkiIFg6IDAKKworCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMiBmdW5jdGlvbiEgVTIoKQorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMiAgICAgWHBhdGggNTEyCSIgWDogMAorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMiBlbmRmdW5jdGlvbgorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMiBYcGF0aCAxMDI0CSIgWDogMTAyNAorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMiBBU0RGCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUyIFhwYXRoIDIwNDgJIiBYOiAwCisKKwlhdXRvY21kIEZ1bmNVbmRlZmluZWQgVTMgZnVuY3Rpb24hIFUzKCkKKwlhdXRvY21kIEZ1bmNVbmRlZmluZWQgVTMgICAgIFhwYXRoIDQwOTYJIiBYOiAwCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUzIGVuZGZ1bmN0aW9uCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUzIFhwYXRoIDgxOTIJIiBYOiA4MTkyCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUzIGNhbGwgSU5UKCkKKwlhdXRvY21kIEZ1bmNVbmRlZmluZWQgVTMgWHBhdGggMTYzODQJIiBYOiAwCisgICAgYXVnIEVORAorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDMyNzY4CQkJCSIgWDogMzI3NjgKKwkgICAgZG9hdXRvY21kIFVzZXIgeDEKKwljYXRjaCAveDEvCisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwllbmR0cnkKKworCXdoaWxlIDEKKwkgICAgdHJ5CisJCVhwYXRoIDEzMTA3MgkJCSIgWDogMTMxMDcyCisJCWxldCBjYXVnaHQgPSAwCisJCWRvYXV0b2NtZCBVc2VyIHgyCisJICAgIGNhdGNoIC9hc2RmLworCQlsZXQgY2F1Z2h0ID0gMQorCSAgICBmaW5hbGx5CisJCVhwYXRoIDI2MjE0NAkJCSIgWDogMjYyMTQ0CisJCWlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCA1MjQyODgJCSIgWDogMAorCQkgICAgIiBQcm9wYWdhdGUgdW5jYXVnaHQgZXJyb3IgZXhjZXB0aW9uLAorCQllbHNlCisJCSAgICAiIC4uLiBidXQgYnJlYWsgbG9vcCBmb3IgY2F1Z2h0IGVycm9yIGV4Y2VwdGlvbiwKKwkJICAgICIgb3IgZGlzY2FyZCBlcnJvciBhbmQgYnJlYWsgbG9vcCBpZiAkVklNTk9FUlJUSFJPVworCQkgICAgYnJlYWsKKwkJZW5kaWYKKwkgICAgZW5kdHJ5CisJZW5kd2hpbGUKKworCXdoaWxlIDEKKwkgICAgdHJ5CisJCVhwYXRoIDEwNDg1NzYJCQkiIFg6IDEwNDg1NzYKKwkJbGV0IGNhdWdodCA9IDAKKwkJZG9hdXRvY21kIFVzZXIgeDMKKwkgICAgY2F0Y2ggL1ZpbTpJbnRlcnJ1cHQvCisJCWxldCBjYXVnaHQgPSAxCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMjA5NzE1MgkJCSIgWDogMjA5NzE1MgorCQlpZiAhY2F1Z2h0ICYmICEkVklNTk9JTlRUSFJPVworCQkgICAgWHBhdGggNDE5NDMwNAkJIiBYOiAwCisJCSAgICAiIFByb3BhZ2F0ZSB1bmNhdWdodCBpbnRlcnJ1cHQgZXhjZXB0aW9uLAorCQllbHNlCisJCSAgICAiIC4uLiBidXQgYnJlYWsgbG9vcCBmb3IgY2F1Z2h0IGludGVycnVwdCBleGNlcHRpb24sCisJCSAgICAiIG9yIGRpc2NhcmQgaW50ZXJydXB0IGFuZCBicmVhayBsb29wIGlmICRWSU1OT0lOVFRIUk9XCisJCSAgICBicmVhaworCQllbmRpZgorCSAgICBlbmR0cnkKKwllbmR3aGlsZQorCisJaWYgZXhpc3RzKCIqVTEiKSB8IGRlbGZ1bmN0aW9uIFUxIHwgZW5kaWYKKwlpZiBleGlzdHMoIipVMiIpIHwgZGVsZnVuY3Rpb24gVTIgfCBlbmRpZgorCWlmIGV4aXN0cygiKlUzIikgfCBkZWxmdW5jdGlvbiBVMyB8IGVuZGlmCisKKwl0cnkKKwkgICAgWHBhdGggODM4ODYwOAkJCSIgWDogODM4ODYwOAorCSAgICBjYWxsIFUxKCkKKwljYXRjaCAvVTEvCisJICAgIFhwYXRoIDE2Nzc3MjE2CQkJIiBYOiAxNjc3NzIxNgorCWVuZHRyeQorCisJd2hpbGUgMQorCSAgICB0cnkKKwkJWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDMzNTU0NDMyCisJCWxldCBjYXVnaHQgPSAwCisJCWNhbGwgVTIoKQorCSAgICBjYXRjaCAvQVNERi8KKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlYcGF0aCA2NzEwODg2NAkJCSIgWDogNjcxMDg4NjQKKwkJaWYgIWNhdWdodCAmJiAhJFZJTU5PRVJSVEhST1cKKwkJICAgIFhwYXRoIDEzNDIxNzcyOAkJIiBYOiAwCisJCSAgICAiIFByb3BhZ2F0ZSB1bmNhdWdodCBlcnJvciBleGNlcHRpb24sCisJCWVsc2UKKwkJICAgICIgLi4uIGJ1dCBicmVhayBsb29wIGZvciBjYXVnaHQgZXJyb3IgZXhjZXB0aW9uLAorCQkgICAgIiBvciBkaXNjYXJkIGVycm9yIGFuZCBicmVhayBsb29wIGlmICRWSU1OT0VSUlRIUk9XCisJCSAgICBicmVhaworCQllbmRpZgorCSAgICBlbmR0cnkKKwllbmR3aGlsZQorCisJd2hpbGUgMQorCSAgICB0cnkKKwkJWHBhdGggMjY4NDM1NDU2CQkJIiBYOiAyNjg0MzU0NTYKKwkJbGV0IGNhdWdodCA9IDAKKwkJY2FsbCBVMygpCisJICAgIGNhdGNoIC9WaW06SW50ZXJydXB0LworCQlsZXQgY2F1Z2h0ID0gMQorCSAgICBmaW5hbGx5CisJCVhwYXRoIDUzNjg3MDkxMgkJCSIgWDogNTM2ODcwOTEyCisJCWlmICFjYXVnaHQgJiYgISRWSU1OT0lOVFRIUk9XCisJCSAgICBYcGF0aCAxMDczNzQxODI0CQkiIFg6IDAKKwkJICAgICIgUHJvcGFnYXRlIHVuY2F1Z2h0IGludGVycnVwdCBleGNlcHRpb24sCisJCWVsc2UKKwkJICAgICIgLi4uIGJ1dCBicmVhayBsb29wIGZvciBjYXVnaHQgaW50ZXJydXB0IGV4Y2VwdGlvbiwKKwkJICAgICIgb3IgZGlzY2FyZCBpbnRlcnJ1cHQgYW5kIGJyZWFrIGxvb3AgaWYgJFZJTU5PSU5UVEhST1cKKwkJICAgIGJyZWFrCisJCWVuZGlmCisJICAgIGVuZHRyeQorCWVuZHdoaWxlCisgICAgY2F0Y2ggLy4qLworCSIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgZGlzcGxheSBleHBsaWNpdGx5OgorCWV4ZWMgIiFlY2hvIDIxNDc0ODM2NDggPj4iIC4gZzpFeHRyYVZpbVJlc3VsdAorCVhvdXQgIkNhdWdodCIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHVubGV0IGNhdWdodAorICAgIGRlbGZ1bmN0aW9uIElOVAorICAgIGRlbGZ1bmN0aW9uIFUxCisgICAgZGVsZnVuY3Rpb24gVTIKKyAgICBkZWxmdW5jdGlvbiBVMworICAgIGF1ISBUTVAKKyAgICBhdWchIFRNUAorZW5kaWYKKworWGNoZWNrIDkzNDc4MjEwMQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgODU6ICBFcnJvciBleGNlcHRpb25zIGluIGF1dG9jb21tYW5kcyBmb3IgSS9PIGNvbW1hbmQgZXZlbnRzCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGFuIEkvTyBjb21tYW5kIGlzIGluc2lkZSA6dHJ5LzplbmR0cnksIGF1dG9jb21tYW5kcyB0byBiZQorIgkgICAgZXhlY3V0ZWQgYWZ0ZXIgaXQgc2hvdWxkIGJlIHNraXBwZWQgb24gYW4gZXJyb3IgKGV4Y2VwdGlvbikgaW4gdGhlCisiCSAgICBjb21tYW5kIGl0c2VsZiBvciBpbiBhdXRvY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBjb21tYW5kLgorIgkgICAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgSS9PIGNvbW1hbmQgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBlaXRoZXIuCisiCSAgICBFeGFtcGxlIDE6IEJ1ZldyaXRlUHJlLCA6d3JpdGUsIEJ1ZldyaXRlUG9zdAorIgkgICAgRXhhbXBsZSAyOiBGaWxlUmVhZFByZSwgOnJlYWQsIEZpbGVSZWFkUG9zdC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgTVNHKGVuciwgZW1zZykKKyAgICBsZXQgZW5nbGlzaCA9IHY6bGFuZyA9PSAiQyIgfHwgdjpsYW5nID1+ICdeW0VlXW4nCisgICAgaWYgYTplbnIgPT0gIiIKKwlYb3V0ICJUT0RPOiBBZGQgbWVzc2FnZSBudW1iZXIgZm9yOiIgYTplbXNnCisJbGV0IHY6ZXJybXNnID0gIjoiIC4gdjplcnJtc2cKKyAgICBlbmRpZgorICAgIGxldCBtYXRjaCA9IDEKKyAgICBpZiB2OmVycm1zZyAhfiAnXicuYTplbnIuJzonIHx8IChlbmdsaXNoICYmIHY6ZXJybXNnICF+IGE6ZW1zZykKKwlsZXQgbWF0Y2ggPSAwCisJaWYgdjplcnJtc2cgPT0gIiIKKwkgICAgWG91dCAiTWVzc2FnZSBtaXNzaW5nLiIKKwllbHNlCisJICAgIGxldCB2OmVycm1zZyA9IGVzY2FwZSh2OmVycm1zZywgJyInKQorCSAgICBYb3V0ICJVbmV4cGVjdGVkIG1lc3NhZ2U6IiB2OmVycm1zZworCWVuZGlmCisgICAgZW5kaWYKKyAgICByZXR1cm4gbWF0Y2gKK2VuZGZ1bmN0aW9uCisKKyIgUmVtb3ZlIHRoZSBhdXRvY29tbWFuZHMgZm9yIHRoZSBldmVudHMgc3BlY2lmaWVkIGFzIGFyZ3VtZW50cyBpbiBhbGwgdXNlZAorIiBhdXRvZ3JvdXBzLgorZnVuY3Rpb24hIERlbGV0ZV9hdXRvY29tbWFuZHMoLi4uKQorICAgIGxldCBhdWdmaWxlID0gdGVtcG5hbWUoKQorICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgZXhlYyAicmVkaXIgPiIgLiBhdWdmaWxlCisJICAgIGF1ZworCSAgICByZWRpciBFTkQKKwkgICAgZXhlYyAiZWRpdCIgYXVnZmlsZQorCSAgICBnL14kL2QKKwkgICAgbm9ybSBHJAorCSAgICBsZXQgd3JhcCA9ICJ3IgorCSAgICB3aGlsZSBzZWFyY2goJ1wlKCAgXHxeXClcQDw9Llx7LX1cJSggIFwpXEA9Jywgd3JhcCkgPiAwCisJCWxldCB3cmFwID0gIlciCisJCWV4ZWMgIm5vcm0geS8gIFxuIgorCQlsZXQgYXJnbm8gPSAxCisJCXdoaWxlIGFyZ25vIDw9IGE6MAorCQkgICAgZXhlYyAiYXUhIiBlc2NhcGUoQCIsICIgIikgYTp7YXJnbm99CisJCSAgICBsZXQgYXJnbm8gPSBhcmdubyArIDEKKwkJZW5kd2hpbGUKKwkgICAgZW5kd2hpbGUKKwljYXRjaCAvLiovCisJZmluYWxseQorCSAgICBid2lwZW91dCEKKwkgICAgY2FsbCBkZWxldGUoYXVnZmlsZSkKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvcnMgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKK2VuZGZ1bmN0aW9uCisKK2NhbGwgRGVsZXRlX2F1dG9jb21tYW5kcygiQnVmV3JpdGVQcmUiLCAiQnVmV3JpdGVQb3N0IikKKword2hpbGUgMQorICAgIHRyeQorCXRyeQorCSAgICBsZXQgcG9zdCA9IDAKKwkgICAgYXVnIFRNUAorCQlhdSEgQnVmV3JpdGVQb3N0ICogbGV0IHBvc3QgPSAxCisJICAgIGF1ZyBFTkQKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgd3JpdGUgL24vby9uL2UveC9pL3MvdC9lL24vdAorCWNhdGNoIC9eVmltKHdyaXRlKTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltKHdyaXRlKTonLCAnJywgIiIpCisJZmluYWxseQorCSAgICBYcGF0aCAxCQkJCSIgWDogMQorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAyCQkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXJybXNnLCAnXiIvbi9vL24vZS94L2kvcy90L2Uvbi90IiAnLAorCQlcICcnLCAiIikKKwkgICAgaWYgIU1TRygnRTIxMicsICJDYW4ndCBvcGVuIGZpbGUgZm9yIHdyaXRpbmciKQorCQlYcGF0aCA0CQkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiBwb3N0CisJCVhwYXRoIDgJCQkJIiBYOiAwCisJCVhvdXQgIkJ1ZldyaXRlUG9zdCBjb21tYW5kcyBleGVjdXRlZCBhZnRlciB3cml0ZSBlcnJvciIKKwkgICAgZW5kaWYKKwkgICAgYXUhIFRNUAorCSAgICBhdWchIFRNUAorCWVuZHRyeQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxNgkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCWJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisgICAgZW5kdHJ5CitlbmR3aGlsZQorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCBwb3N0ID0gMAorCSAgICBhdWcgVE1QCisJCWF1ISBCdWZXcml0ZVByZSAgKiBhc2RmCisJCWF1ISBCdWZXcml0ZVBvc3QgKiBsZXQgcG9zdCA9IDEKKwkgICAgYXVnIEVORAorCSAgICBsZXQgdG1wZmlsZSA9IHRlbXBuYW1lKCkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgZXhlYyAid3JpdGUiIHRtcGZpbGUKKwljYXRjaCAvXlZpbVwoKHdyaXRlKVwpXD06LworCSAgICBsZXQgY2F1Z2h0ID0gMQorCSAgICBsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbVwoKHdyaXRlKVwpXD06JywgJycsICIiKQorCWZpbmFsbHkKKwkgICAgWHBhdGggMzIJCQkJIiBYOiAzMgorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCA2NAkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXJybXNnLCAnXiInLnRtcGZpbGUuJyIgJywgJycsICIiKQorCSAgICBpZiAhTVNHKCdFNDkyJywgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIpCisJCVhwYXRoIDEyOAkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiBmaWxlcmVhZGFibGUodG1wZmlsZSkKKwkJWHBhdGggMjU2CQkJIiBYOiAwCisJCVhvdXQgIjp3cml0ZSBjb21tYW5kIG5vdCBzdXBwcmVzc2VkIGFmdGVyIEJ1ZldyaXRlUHJlIGVycm9yIgorCSAgICBlbmRpZgorCSAgICBpZiBwb3N0CisJCVhwYXRoIDUxMgkJCSIgWDogMAorCQlYb3V0ICJCdWZXcml0ZVBvc3QgY29tbWFuZHMgZXhlY3V0ZWQgYWZ0ZXIgQnVmV3JpdGVQcmUgZXJyb3IiCisJICAgIGVuZGlmCisJICAgIGF1ISBUTVAKKwkgICAgYXVnISBUTVAKKwllbmR0cnkKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMTAyNAkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCWJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisgICAgZW5kdHJ5CitlbmR3aGlsZQorCitjYWxsIGRlbGV0ZSh0bXBmaWxlKQorCitjYWxsIERlbGV0ZV9hdXRvY29tbWFuZHMoIkJ1ZldyaXRlUHJlIiwgIkJ1ZldyaXRlUG9zdCIsCisgICAgXCAiQnVmUmVhZFByZSIsICJCdWZSZWFkUG9zdCIsICJGaWxlUmVhZFByZSIsICJGaWxlUmVhZFBvc3QiKQorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCBwb3N0ID0gMAorCSAgICBhdWcgVE1QCisJCWF1ISBGaWxlUmVhZFBvc3QgKiBsZXQgcG9zdCA9IDEKKwkgICAgYXVnIEVORAorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICByZWFkIC9uL28vbi9lL3gvaS9zL3QvZS9uL3QKKwljYXRjaCAvXlZpbShyZWFkKTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltKHJlYWQpOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDQwOTYJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmVycm1zZywgJyAvbi9vL24vZS94L2kvcy90L2Uvbi90JCcsCisJCVwgJycsICIiKQorCSAgICBpZiAhTVNHKCdFNDg0JywgIkNhbid0IG9wZW4gZmlsZSIpCisJCVhwYXRoIDgxOTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgcG9zdAorCQlYcGF0aCAxNjM4NAkJCSIgWDogMAorCQlYb3V0ICJGaWxlUmVhZFBvc3QgY29tbWFuZHMgZXhlY3V0ZWQgYWZ0ZXIgd3JpdGUgZXJyb3IiCisJICAgIGVuZGlmCisJICAgIGF1ISBUTVAKKwkgICAgYXVnISBUTVAKKwllbmR0cnkKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworICAgIGVuZHRyeQorZW5kd2hpbGUKKword2hpbGUgMQorICAgIHRyeQorCWxldCBpbmZpbGUgPSB0ZW1wbmFtZSgpCisJbGV0IHRtcGZpbGUgPSB0ZW1wbmFtZSgpCisJZXhlYyAiIWVjaG8gWFlaID4iIC4gaW5maWxlCisJZXhlYyAiZWRpdCIgdG1wZmlsZQorCXRyeQorCSAgICBYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJICAgIHRyeQorCQlsZXQgcG9zdCA9IDAKKwkJYXVnIFRNUAorCQkgICAgYXUhIEZpbGVSZWFkUHJlICAqIGFzZGYKKwkJICAgIGF1ISBGaWxlUmVhZFBvc3QgKiBsZXQgcG9zdCA9IDEKKwkJYXVnIEVORAorCQlsZXQgY2F1Z2h0ID0gMAorCQlleGVjICIwcmVhZCIgaW5maWxlCisJICAgIGNhdGNoIC9eVmltXCgocmVhZClcKVw9Oi8KKwkJbGV0IGNhdWdodCA9IDEKKwkJbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW1cKChyZWFkKVwpXD06JywgJycsCisJCSAgICBcICIiKQorCSAgICBmaW5hbGx5CisJCVhwYXRoIDEzMTA3MgkJCSIgWDogMTMxMDcyCisJCWlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCAyNjIxNDQJCSIgWDogMAorCQllbmRpZgorCQlsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXJybXNnLCAnICcuaW5maWxlLickJywgJycsICIiKQorCQlpZiAhTVNHKCdFNDkyJywgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIpCisJCSAgICBYcGF0aCA1MjQyODgJCSIgWDogMAorCQllbmRpZgorCQlpZiBnZXRsaW5lKCIxIikgPT0gIlhZWiIKKwkJICAgIFhwYXRoIDEwNDg1NzYJCSIgWDogMAorCQkgICAgWG91dCAiOnJlYWQgY29tbWFuZCBub3Qgc3VwcHJlc3NlZCBhZnRlciBGaWxlUmVhZFByZSBlcnJvciIKKwkJZW5kaWYKKwkJaWYgcG9zdAorCQkgICAgWHBhdGggMjA5NzE1MgkJIiBYOiAwCisJCSAgICBYb3V0ICJGaWxlUmVhZFBvc3QgY29tbWFuZHMgZXhlY3V0ZWQgYWZ0ZXIgIiAuCisJCQlcICJGaWxlUmVhZFByZSBlcnJvciIKKwkJZW5kaWYKKwkJYXUhIFRNUAorCQlhdWchIFRNUAorCSAgICBlbmR0cnkKKwlmaW5hbGx5CisJICAgIGJ3aXBlb3V0IQorCWVuZHRyeQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA0MTk0MzA0CQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBmaW5hbGx5CisJYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKyAgICBlbmR0cnkKK2VuZHdoaWxlCisKK2NhbGwgZGVsZXRlKGluZmlsZSkKK2NhbGwgZGVsZXRlKHRtcGZpbGUpCit1bmxldCEgY2F1Z2h0IHBvc3QgaW5maWxlIHRtcGZpbGUKK2RlbGZ1bmN0aW9uIE1TRworZGVsZnVuY3Rpb24gRGVsZXRlX2F1dG9jb21tYW5kcworCitYY2hlY2sgMTk4Njg5CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA4NjogICRWSU1OT0VSUlRIUk9XIGFuZCAkVklNTk9JTlRUSFJPVyBzdXBwb3J0CQkJICAgIHt7ezEKKyIKKyIJICAgIEl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBWaW0gZm9yIHRocm93aW5nIGV4Y2VwdGlvbnMgb24gZXJyb3IKKyIJICAgIG9yIGludGVycnVwdCwgY29udHJvbGxlZCBieSB2YXJpYWJsZXMgJFZJTU5PRVJSVEhST1cgYW5kCisiCSAgICAkVklNTk9JTlRUSFJPVy4gIFRoaXMgaXMganVzdCBmb3IgaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIHRlc3RzLgorIgkgICAgQWxsIHRlc3RzIGhlcmUgc2hvdWxkIHJ1biBmb3IgYWxsIGZvdXIgY29tYmluYXRpb25zIG9mIHNldHRpbmcKKyIJICAgIHRoZXNlIHZhcmlhYmxlcyB0byAwIG9yIDEuICBUaGUgdmFyaWFibGVzIGFyZSBpbnRlbmRlZCBmb3IgdGhlCisiCSAgICBkZXZlbG9wbWVudCBwaGFzZSBvbmx5LiAgSW4gdGhlIGZpbmFsIHJlbGVhc2UsIFZpbSBzaG91bGQgYmUKKyIJICAgIGNvbmZpZ3VyZWQgdG8gYWx3YXlzIHVzZSBlcnJvciBhbmQgaW50ZXJydXB0IGV4Y2VwdGlvbnMuCisiCisiCSAgICBUaGUgdGVzdCByZXN1bHQgaXMgIk9LIiwKKyIKKyIJCS0gaWYgdGhlICRWSU1OT0VSUlRIUk9XIGFuZCB0aGUgJFZJTU5PSU5UVEhST1cgY29udHJvbCBhcmUgbm90CisiCQkgIGNvbmZpZ3VyZWQgYW5kIGV4Y2VwdGlvbnMgYXJlIHRocm93biBvbiBlcnJvciBhbmQgb24KKyIJCSAgaW50ZXJydXB0LgorIgorIgkJLSBpZiB0aGUgJFZJTU5PRVJSVEhST1cgb3IgdGhlICRWSU1OT0lOVFRIUk9XIGNvbnRyb2wgaXMKKyIJCSAgY29uZmlndXJlZCBhbmQgd29ya3MgYXMgaW50ZW5kZWQuCisiCisiCSAgICBXaGF0IGFjdHVhbGx5IGhhcHBlbnMsIGlzIHNob3duIGluIHRoZSB0ZXN0IG91dHB1dC4KKyIKKyIJICAgIE90aGVyd2lzZSwgdGhlIHRlc3QgcmVzdWx0IGlzICJGQUlMIiwgYW5kIHRoZSB0ZXN0IG91dHB1dCBkZXNjcmliZXMKKyIJICAgIHRoZSBwcm9ibGVtLgorIgorIiBJTVBPUlRBTlQ6ICBUaGlzIG11c3QgYmUgdGhlIGxhc3QgdGVzdCBiZWNhdXNlIGl0IHNldHMgJFZJTU5PRVJSVEhST1cgYW5kCisiCSAgICAgICRWSU1OT0lOVFRIUk9XLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIGZ1bmN0aW9uISBUaHJvd09uRXJyb3IoKQorCVhsb29wTkVYVAorCWxldCBjYXVnaHQgPSAwCisJdHJ5CisJICAgIFhsb29wIDEJCQkJIiBYOiAxICsgOCArIDY0CisJICAgIGFzZGYKKwljYXRjaCAvLiovCisJICAgIGxldCBjYXVnaHQgPSAxCSIgZXJyb3IgZXhjZXB0aW9uIGNhdWdodAorCWZpbmFsbHkKKwkgICAgWGxvb3AgMgkJCQkiIFg6IDIgKyAxNiArIDEyOAorCSAgICByZXR1cm4gY2F1Z2h0CSIgZGlzY2FyZCBhYm9ydGluZyBlcnJvcgorCWVuZHRyeQorCVhsb29wIDQJCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBsZXQgcXVpdHNfc2tpcHBlZCA9IDAKKworICAgIGZ1bmN0aW9uISBUaHJvd09uSW50ZXJydXB0KCkKKwlYbG9vcE5FWFQKKwlsZXQgY2F1Z2h0ID0gMAorCXRyeQorCSAgICBYbG9vcCAxCQkJCSIgWDogKDEgKyA4ICsgNjQpICogNTEyCisJICAgICJJTlRFUlJVUFQzCisJICAgIGxldCBkdW1teSA9IDAKKwkgICAgbGV0IGc6cXVpdHNfc2tpcHBlZCA9IGc6cXVpdHNfc2tpcHBlZCArIDEKKwljYXRjaCAvLiovCisJICAgIGxldCBjYXVnaHQgPSAxCSIgaW50ZXJydXB0IGV4Y2VwdGlvbiBjYXVnaHQKKwlmaW5hbGx5CisJICAgIFhsb29wIDIJCQkJIiBYOiAoMiArIDE2ICsgMTI4KSAqIDUxMgorCSAgICByZXR1cm4gY2F1Z2h0CSIgZGlzY2FyZCBpbnRlcnJ1cHQKKwllbmR0cnkKKwlYbG9vcCA0CQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIENoZWNrVGhyb3coVHlwZSkKKwlleGVjdXRlICdyZXR1cm4gVGhyb3dPbicgLiBhOlR5cGUgLiAnKCknCisgICAgZW5kZnVuY3Rpb24KKworICAgIGZ1bmN0aW9uISBDaGVja0NvbmZpZ3VyYXRpb24odHlwZSkJICAgICIgdHlwZSBpcyAiZXJyb3IiIG9yICJpbnRlcnJ1cHQiCisKKwlsZXQgdHlwZSA9IGE6dHlwZQorCWxldCBUeXBlID0gc3Vic3RpdHV0ZSh0eXBlLCAnLionLCAnXHUmJywgIiIpCisJbGV0IFZBUiA9ICckVklNTk8nIC4gc3Vic3RpdHV0ZSh0eXBlLCAnXCguLi5cKS4qJywgJ1xVXDEnLCAiIikgLiAnVEhST1cnCisKKwlpZiB0eXBlID09ICJlcnJvciIKKwkgICAgWGxvb3BJTklUISAxIDgKKwllbHNlaWYgdHlwZSA9PSAiaW50ZXJydXB0IgorCSAgICBYbG9vcElOSVQhIDUxMiA4CisJZW5kaWYKKworCWV4ZWMgJ2xldCByZXF1ZXN0ZWRfZm9yX3Rlc3RzID0gZXhpc3RzKFZBUikgJiYgJyAuIFZBUiAuICcgPT0gMCcKKwlleGVjICdsZXQgc3VwcHJlc3NlZF9mb3JfdGVzdHMgPSAnIC4gVkFSIC4gJyAhPSAwJworCWxldCB1c2VkX2luX3Rlc3RzID0gQ2hlY2tUaHJvdyhUeXBlKQorCisJZXhlYyAnbGV0ICcgLiBWQVIgLiAnID0gMCcKKwlsZXQgcmVxdWVzdF93b3JrcyA9IENoZWNrVGhyb3coVHlwZSkKKworCWV4ZWMgJ2xldCAnIC4gVkFSIC4gJyA9IDEnCisJbGV0IHN1cHByZXNzX3dvcmtzID0gIUNoZWNrVGhyb3coVHlwZSkKKworCWlmIHR5cGUgPT0gImVycm9yIgorCSAgICBYbG9vcElOSVQhIDI2MjE0NCA4CisJZWxzZWlmIHR5cGUgPT0gImludGVycnVwdCIKKwkgICAgWGxvb3BJTklUISAyMDk3MTUyIDgKKworCSAgICBpZiBnOnF1aXRzX3NraXBwZWQgIT0gMAorCQlYbG9vcCAxCQkJCSIgWDogMCoyMDk3MTUyCisJCVhvdXQgIlRlc3QgZW52aXJvbm1lbnQgZXJyb3IuICBJbnRlcnJ1cHQgYnJlYWtwb2ludHMgc2tpcHBlZDogIgorCQkgICAgXCAuIGc6cXVpdHNfc2tpcHBlZCAuICIuXG4iCisJCSAgICBcIC4gIkNhbm5vdCBjaGVjayB3aGV0aGVyIGludGVycnVwdCBleGNlcHRpb25zIGFyZSB0aHJvd24uIgorCQlyZXR1cm4KKwkgICAgZW5kaWYKKwllbmRpZgorCisJbGV0IGZhaWx1cmUgPQorCSAgICBcICFzdXBwcmVzc2VkX2Zvcl90ZXN0cyAmJiAhdXNlZF9pbl90ZXN0cworCSAgICBcIHx8ICFyZXF1ZXN0X3dvcmtzCisKKwlsZXQgY29udHJhZGljdGlvbiA9CisJICAgIFwgdXNlZF9pbl90ZXN0cworCQlcID8gc3VwcHJlc3NlZF9mb3JfdGVzdHMgJiYgIXJlcXVlc3Rfd29ya3MKKwkJXCA6ICFzdXBwcmVzc2VkX2Zvcl90ZXN0cworCisJaWYgZmFpbHVyZQorCSAgICAiIEZhaWx1cmUgaW4gY29uZmlndXJhdGlvbi4KKwkgICAgWGxvb3AgMgkJCQkiIFg6IDAgKiAyKiAgKDI2MjE0NCArIDIwOTcxNTIpCisJZWxzZWlmIGNvbnRyYWRpY3Rpb24KKwkgICAgIiBGYWlsdXJlIGluIHRlc3QgbG9naWMuICBTaG91bGQgbm90IGhhcHBlbi4KKwkgICAgWGxvb3AgNAkJCQkiIFg6IDAgKiA0ICogKDI2MjE0NCArIDIwOTcxNTIpCisJZW5kaWYKKworCWxldCB2YXJfY29udHJvbF9jb25maWd1cmVkID0KKwkgICAgXCByZXF1ZXN0X3dvcmtzICE9IHVzZWRfaW5fdGVzdHMKKwkgICAgXCB8fCBzdXBwcmVzc193b3JrcyA9PSB1c2VkX2luX3Rlc3RzCisKKwlsZXQgdmFyX2NvbnRyb2xfbm90X2NvbmZpZ3VyZWQgPQorCSAgICBcIHJlcXVlc3RlZF9mb3JfdGVzdHMgfHwgc3VwcHJlc3NlZF9mb3JfdGVzdHMKKwkJXCA/IHJlcXVlc3Rfd29ya3MgJiYgIXN1cHByZXNzX3dvcmtzCisJCVwgOiByZXF1ZXN0X3dvcmtzID09IHVzZWRfaW5fdGVzdHMKKwkJICAgIFwgJiYgc3VwcHJlc3Nfd29ya3MgIT0gdXNlZF9pbl90ZXN0cworCisJbGV0IHdpdGggPSB1c2VkX2luX3Rlc3RzID8gIndpdGgiIDogIndpdGhvdXQiCisKKwlsZXQgc2V0ID0gc3VwcHJlc3NlZF9mb3JfdGVzdHMgPyAibm9uLXplcm8iIDoKKwkgICAgXCByZXF1ZXN0ZWRfZm9yX3Rlc3RzID8gIjAiIDogInVuc2V0IgorCisJbGV0IGFsdGhvdWdoID0gY29udHJhZGljdGlvbiAmJiAhdmFyX2NvbnRyb2xfbm90X2NvbmZpZ3VyZWQKKwkgICAgXCA/ICIsXG5hbHRob3VnaCAiCisJICAgIFwgOiAiLlxuIgorCisJbGV0IG91dHB1dCA9ICJBbGwgdGVzdHMgd2VyZSBydW4gIiAuIHdpdGggLiAiIHRocm93aW5nIGV4Y2VwdGlvbnMgb24gIgorCSAgICBcIC4gdHlwZSAuIGFsdGhvdWdoCisKKwlpZiAhdmFyX2NvbnRyb2xfbm90X2NvbmZpZ3VyZWQKKwkgICAgbGV0IG91dHB1dCA9IG91dHB1dCAuIFZBUiAuICIgd2FzICIgLiBzZXQgLiAiLiIKKworCSAgICBpZiAhcmVxdWVzdF93b3JrcyAmJiAhcmVxdWVzdGVkX2Zvcl90ZXN0cworCQlsZXQgb3V0cHV0ID0gb3V0cHV0IC4KKwkJICAgIFwgIlxuIiAuIFR5cGUgLiAiIGV4Y2VwdGlvbnMgYXJlIG5vdCB0aHJvd24gd2hlbiAiIC4gVkFSIC4KKwkJICAgIFwgIiBpc1xuc2V0IHRvIDAuIgorCSAgICBlbmRpZgorCisJICAgIGlmICFzdXBwcmVzc193b3JrcyAmJiAoIXVzZWRfaW5fdGVzdHMgfHwKKwkgICAgXCAhcmVxdWVzdF93b3JrcyAmJgorCSAgICBcICFyZXF1ZXN0ZWRfZm9yX3Rlc3RzICYmICFzdXBwcmVzc2VkX2Zvcl90ZXN0cykKKwkJbGV0IG91dHB1dCA9IG91dHB1dCAuCisJCSAgICBcICJcbiIgLiBUeXBlIC4gIiBleGNlcHRpb25zIGFyZSB0aHJvd24gd2hlbiAiIC4gVkFSIC4KKwkJICAgIFwgIiBpcyBzZXQgdG8gMS4iCisJICAgIGVuZGlmCisKKwkgICAgaWYgIWZhaWx1cmUgJiYgdmFyX2NvbnRyb2xfY29uZmlndXJlZAorCQlsZXQgb3V0cHV0ID0gb3V0cHV0IC4KKwkJICAgIFwgIlxuUnVuIHRlc3RzIGFsc28gd2l0aCAiIC4gc3Vic3RpdHV0ZShWQVIsICdeXCQnLCAnJywgIiIpCisJCSAgICBcIC4gIj0iIC4gdXNlZF9pbl90ZXN0cyAuICIuIgorCQkgICAgXCAuICJcblRoaXMgaXMgZm9yIHRlc3RpbmcgaW4gdGhlIGRldmVsb3BtZW50IHBoYXNlIG9ubHkuIgorCQkgICAgXCAuICIgIFJlbW92ZSB0aGUgXG4iCisJCSAgICBcIC4gVkFSIC4gIiBjb250cm9sIGluIHRoZSBmaW5hbCByZWxlYXNlLiIKKwkgICAgZW5kaWYKKwllbHNlCisJICAgIGxldCBvdXRwdXQgPSBvdXRwdXQgLgorCQlcICJUaGUgIiAuIFZBUiAuICIgY29udHJvbCBpcyBub3QgY29uZmlndXJlZC4iCisJZW5kaWYKKworCVhvdXQgb3V0cHV0CisgICAgZW5kZnVuY3Rpb24KKworICAgIGNhbGwgQ2hlY2tDb25maWd1cmF0aW9uKCJlcnJvciIpCisgICAgWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAxNjc3NzIxNgorICAgIGNhbGwgQ2hlY2tDb25maWd1cmF0aW9uKCJpbnRlcnJ1cHQiKQorICAgIFhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMzM1NTQ0MzIKK2VuZGlmCisKK1hjaGVjayA1MDQ0Mzk5NQorCisiIElNUE9SVEFOVDogTm8gdGVzdCBzaG91bGQgYmUgYWRkZWQgYWZ0ZXIgdGhpcyB0ZXN0IGJlY2F1c2UgaXQgY2hhbmdlcworIgkgICAgICRWSU1OT0VSUlRIUk9XIGFuZCAkVklNTk9JTlRUSFJPVy4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBNb2RlbGluZXMJCQkJCQkJCSAgICB7e3sxCisiIHZpbTogdHM9OCBzdz00IHR3PTgwIGZkbT1tYXJrZXIKKyIgdmltOiBmZHQ9c3Vic3RpdHV0ZShzdWJzdGl0dXRlKGZvbGR0ZXh0KCksXCAnXFwlKF4rLS1cXClcXEA8PVxcKFxccypcXClcXCguXFx7LX1cXClcOlwgXFwlKFwiXCBcXClcXD1cXChUZXN0XCBcXGQqXFwpXDpcXHMqJyxcICdcXDNcIChcXDIpXDpcIFxcMScsXCBcIlwiKSxcICdcXChUZXN0XFxzKlxcKVxcKFxcZFxcKVxcRFxcQD0nLFwgJ1xcMVwgXFwyJyxcICIiKQorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q1LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5ZTIwZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q1LmluCkBAIC0wLDAgKzEsMjkgQEAKK1Rlc3QgZm9yIGF1dG9jb21tYW5kIHRoYXQgZGVsZXRlcyB0aGUgY3VycmVudCBidWZmZXIgb24gQnVmTGVhdmUgZXZlbnQuCitBbHNvIHRlc3QgZGVsZXRpbmcgdGhlIGxhc3QgYnVmZmVyLCBzaG91bGQgZ2l2ZSBhIG5ldywgZW1wdHkgYnVmZmVyLgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzphdSBCdWZMZWF2ZSBYeHggYndpcGUKKy9zdGFydCBvZgorOi4sL2VuZCBvZi93ISBYeHggICAgICAgICAgICAgICAiIHdyaXRlIHRlc3QgZmlsZSBYeHgKKzpzcCBYeHggICAgICAgICAgICAgICAgICAgICAgICAgIiBzcGxpdCB0byBYeHgKKzpid2lwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkZWxldGUgYnVmZmVyIFh4eCwgbm93IHdlJ3JlIGJhY2sgaGVyZQorRz90aGlzIGlzIGEKK290aGlzIGlzIHNvbWUgbW9yZSB0ZXh0GworOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIEFwcGVuZCBzb21lIHRleHQgdG8gdGhpcyBmaWxlCis6P3N0YXJ0PywkdyEgdGVzdC5vdXQgICAgICAgICAgICIgV3JpdGUgY3VycmVudCBmaWxlIGNvbnRlbnRzCis6YndpcGUgdGVzdC5vdXQgICAgICAgICAgICAgICAgICIgZGVsZXRlIGFsdGVybmF0ZSBidWZmZXIKKzphdSBidWZsZWF2ZSB0ZXN0NS5pbiBid2lwZQorOmJ3aXBlISAgICAgICAgICAgICAgICAgICAgICAgICAiIGRlbGV0ZSBjdXJyZW50IGJ1ZmZlciwgZ2V0IGFuIGVtcHR5IG9uZQoraXRoaXMgaXMgYW5vdGhlciB0ZXN0IGxpbmUbOncgPj50ZXN0Lm91dAorOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFwcGVuZCBhbiBleHRyYSBsaW5lIHRvIHRoZSBvdXRwdXQgZmlsZQorOnFhIQorRU5EVEVTVAorCitzdGFydCBvZiB0ZXN0IGZpbGUgWHh4Cit2aW06IHNldCBub2FpIDoKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q1Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDUub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0MzA2MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q1Lm9rCkBAIC0wLDAgKzEsOSBAQAorc3RhcnQgb2YgdGVzdCBmaWxlIFh4eAordmltOiBzZXQgbm9haSA6CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKK3RoaXMgaXMgc29tZSBtb3JlIHRleHQKK2VuZCBvZiB0ZXN0IGZpbGUgWHh4Cit0aGlzIGlzIGFub3RoZXIgdGVzdCBsaW5lCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NTAuaW4gYi9zcmMvdGVzdGRpci90ZXN0NTAuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4YWM4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q1MC5pbgpAQCAtMCwwICsxLDg1IEBACitUZXN0IGZvciBzaG9ydHBhdGhuYW1lICc6OCcgZXh0ZW5zaW9uLgorT25seSBmb3IgdXNlIG9uIFdpbjMyIHN5c3RlbXMhCisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorOmZ1biEgVGVzdEl0KGZpbGUsIGJpdHMsIGV4cGVjdGVkKQorCWxldCByZXM9Zm5hbWVtb2RpZnkoYTpmaWxlLGE6Yml0cykKKwlpZiBhOmV4cGVjdGVkID09ICcnCisJCWVjaG8gIiciLmE6ZmlsZS4iJy0+KCIuYTpiaXRzLiIpLT4nIi5yZXMuIiciCisJZWxzZQorCQlpZiBzdWJzdGl0dXRlKHJlcywnLycsJ1xcJywgJ2cnKSAhPSBzdWJzdGl0dXRlKCBhOmV4cGVjdGVkLCAnLycsJ1xcJywgJ2cnKSAKKwkJCWVjaG8gIkZBSUxFRDogJyIuYTpmaWxlLiInLT4oIi5hOmJpdHMuIiktPiciLnJlcy4iJyIKKwkJCWVjaG8gIkV4cGVjdGVkOiAnIi5hOmV4cGVjdGVkLiInIgorCQllbHNlCisJCQllY2hvICJPSyIKKwkJZW5kaWYKKwllbmRpZgorZW5kZnVuCis6ZnVuISBNYWtlRGlyKCBkaXJuYW1lICkKKwkiZXhlICchbWtkaXIgJy5zdWJzdGl0dXRlKGE6ZGlybmFtZSwnLycsJ1xcJywnZycpCisJY2FsbCBzeXN0ZW0oJ21rZGlyICcuc3Vic3RpdHV0ZShhOmRpcm5hbWUsJy8nLCdcXCcsJ2cnKSkKK2VuZGZ1bgorOmZ1biEgUk1EaXIoIGRpcm5hbWUpCisJImV4ZSAnIXJtZGlyICcuc3Vic3RpdHV0ZShhOmRpcm5hbWUsJy8nLCdcXCcsJ2cnKQorCWNhbGwgc3lzdGVtKCdybWRpciAnLnN1YnN0aXR1dGUoYTpkaXJuYW1lLCcvJywnXFwnLCdnJykpCitlbmRmdW4KKzpmdW4hIE1ha2VGaWxlKCBmaWxlbmFtZSkKKwkiZXhlICchY29weSBudWwgJy5zdWJzdGl0dXRlKGE6ZmlsZW5hbWUsJy8nLCdcXCcsJ2cnKQorCWNhbGwgc3lzdGVtKCdjb3B5IG51bCAnLnN1YnN0aXR1dGUoYTpmaWxlbmFtZSwnLycsJ1xcJywnZycpKQorZW5kZnVuCis6ZnVuISBUZXN0Q29sb25FaWdodCgpCisgICByZWRpciEgPnRlc3Qub3V0CisJIiBUaGlzIGNvdWxkIGNoYW5nZSBmb3IgQ3lnV2luIHRvIC8vY3lnZHJpdmUvYworCWxldCBkaXIxPSdjOi94LngueScKKwlpZiBmaWxlcmVhZGFibGUoZGlyMSkgfHwgaXNkaXJlY3RvcnkoZGlyMSkKKwkJY2FsbCBjb25maXJtKCAiJyIuZGlyMS4iJyBleGlzdHMsIGNhbm5vdCBydW4gdGVzdCIgKQorCQlyZXR1cm4KKwllbmRpZgorCWxldCBmaWxlMT1kaXIxLicvenoueS50eHQnCisJbGV0IG5vZmlsZTE9ZGlyMS4nL3oueS50eHQnCisJbGV0IGRpcjI9ZGlyMS4nL1ZpbUlzVGhlR3JlYXRlc3RTaW5jZVNsaWNlZEJyZWFkJworCWxldCBmaWxlMj1kaXIyLicvei50eHQnCisJbGV0IG5vZmlsZTI9ZGlyMi4nL3p6LnR4dCcKKwlsZXQgcmVzZGlyMT0nYzovWFgyMjM1fjEuWScKKwlsZXQgcmVzZmlsZTE9cmVzZGlyMS4nL1paWX4xLlRYVCcKKwlsZXQgcmVzbm9maWxlMT1yZXNkaXIxLicvei55LnR4dCcKKwlsZXQgcmVzZGlyMj1yZXNkaXIxLicvVklNSVNUfjEnCisJbGV0IHJlc2ZpbGUyPXJlc2RpcjIuJy96LnR4dCcKKwlsZXQgcmVzbm9maWxlMj1yZXNkaXIyLicvenoudHh0JworCWNhbGwgTWFrZURpciggZGlyMSApCisJY2FsbCBNYWtlRGlyKCBkaXIyICkKKwljYWxsIE1ha2VGaWxlKCBmaWxlMSApCisJY2FsbCBNYWtlRmlsZSggZmlsZTIgKQorCWNhbGwgVGVzdEl0KGZpbGUxLCAnOnA6OCcsIHJlc2ZpbGUxKQorCWNhbGwgVGVzdEl0KG5vZmlsZTEsICc6cDo4JywgcmVzbm9maWxlMSkKKwljYWxsIFRlc3RJdChmaWxlMiwgJzpwOjgnLCByZXNmaWxlMikKKwljYWxsIFRlc3RJdChub2ZpbGUyLCAnOnA6OCcsIHJlc25vZmlsZTIpCisJY2FsbCBUZXN0SXQobm9maWxlMiwgJzpwOjg6aCcsIGZuYW1lbW9kaWZ5KHJlc25vZmlsZTIsJzpoJykpCisJZXhlICdjZCAnLmRpcjEKKwljYWxsIFRlc3RJdChmaWxlMSwgJzouOjgnLCBzdHJwYXJ0KHJlc2ZpbGUxLHN0cmxlbihyZXNkaXIxKSsxKSkKKwljYWxsIFRlc3RJdChub2ZpbGUxLCAnOi46OCcsIHN0cnBhcnQocmVzbm9maWxlMSxzdHJsZW4ocmVzZGlyMSkrMSkpCisJY2FsbCBUZXN0SXQoZmlsZTIsICc6Ljo4Jywgc3RycGFydChyZXNmaWxlMixzdHJsZW4ocmVzZGlyMSkrMSkpCisJY2FsbCBUZXN0SXQobm9maWxlMiwgJzouOjgnLCBzdHJwYXJ0KHJlc25vZmlsZTIsc3RybGVuKHJlc2RpcjEpKzEpKQorCWxldCAkSE9NRT1kaXIxCisJY2FsbCBUZXN0SXQoZmlsZTEsICc6fjo4JywgJ34nLnN0cnBhcnQocmVzZmlsZTEsc3RybGVuKHJlc2RpcjEpKSkKKwljYWxsIFRlc3RJdChub2ZpbGUxLCAnOn46OCcsICd+Jy5zdHJwYXJ0KHJlc25vZmlsZTEsc3RybGVuKHJlc2RpcjEpKSkKKwljYWxsIFRlc3RJdChmaWxlMiwgJzp+OjgnLCAnficuc3RycGFydChyZXNmaWxlMixzdHJsZW4ocmVzZGlyMSkpKQorCWNhbGwgVGVzdEl0KG5vZmlsZTIsICc6fjo4JywgJ34nLnN0cnBhcnQocmVzbm9maWxlMixzdHJsZW4ocmVzZGlyMSkpKQorCWNkIGM6LworCWNhbGwgZGVsZXRlKCBmaWxlMiApCisJY2FsbCBkZWxldGUoIGZpbGUxICkKKwljYWxsIFJNRGlyKCBkaXIyICkKKwljYWxsIFJNRGlyKCBkaXIxICkKKyAgICAgICBlY2hvCisgICByZWRpciBFTkQKK2VuZGZ1bgorOmxldCBkaXIgPSBnZXRjd2QoKQorOmNhbGwgVGVzdENvbG9uRWlnaHQoKQorOmV4ZSAiY2QgIiAuIGRpcgorOmVkaXQhIHRlc3Qub3V0Cis6c2V0IGZmPWRvcworOncKKzpxYSEKK0VORFRFU1QKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDUwLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDUwLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZWYxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NTAub2sKQEAgLTAsMCArMSwxNCBAQAorCitPSworT0sKK09LCitPSworT0sKK09LCitPSworT0sKK09LCitPSworT0sKK09LCitPSwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDUxLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDUxLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNThjODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NTEuaW4KQEAgLTAsMCArMSwzNCBAQAorVGVzdHMgZm9yICI6aGlnaGxpZ2h0Ii4gdmltOiBzZXQgZnQ9dmltIDoKKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6IiBiYXNpYyB0ZXN0IGlmICI6aGlnaGxpZ2h0IiBkb2Vzbid0IGNyYXNoCis6aGlnaGxpZ2h0Cis6aGkgU2VhcmNoCis6IiB0ZXN0IHNldHRpbmcgY29sb3JzLgorOiIgdGVzdCBjbGVhcmluZyBvbmUgY29sb3IgYW5kIGFsbCBkb2Vzbid0IGdlbmVyYXRlIGVycm9yIG9yIHdhcm5pbmcKKzpoaSBOZXdHcm91cCB0ZXJtPWJvbGQgY3Rlcm09aXRhbGljIGN0ZXJtZmc9RGFya0JsdWUgY3Rlcm1iZz1HcmV5IGd1aT0gZ3VpZmc9IzAwZmYwMCBndWliZz1DeWFuCis6aGkgR3JvdXAyIHRlcm09IGN0ZXJtPQorOmhpIEdyb3VwMyB0ZXJtPXVuZGVybGluZSBjdGVybT1ib2xkCis6cmVkaXIgPnRlc3Qub3V0Cis6aGkgTmV3R3JvdXAKKzpoaSBHcm91cDIKKzpoaSBHcm91cDMKKzpoaSBjbGVhciBOZXdHcm91cAorOmhpIE5ld0dyb3VwCis6aGkgR3JvdXAyCis6aGkgR3JvdXAyIE5PTkUKKzpoaSBHcm91cDIKKzpoaSBjbGVhcgorOmhpIEdyb3VwMworOmhpIENyYXNoIHRlcm09J2FzZGYKKzpyZWRpciBFTkQKKzoiIGZpbHRlciBjdGVybWZnIGFuZCBjdGVybWJnLCB0aGUgbnVtYmVycyBkZXBlbmQgb24gdGhlIHRlcm1pbmFsCis6ZSB0ZXN0Lm91dAorOiVzL2N0ZXJtZmc9XGQqL2N0ZXJtZmc9Mi8KKzolcy9jdGVybWJnPVxkKi9jdGVybWJnPTMvCis6IiBmaWx0ZXIgb3V0IHBvc3NpYmx5IHRyYW5zbGF0ZWQgZXJyb3IgbWVzc2FnZQorOiVzL0U0NzU6IFteOl0qOi9FNDc1Oi8KKzp3cSEKK0VORFRFU1QKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDUxLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDUxLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTgzOTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NTEub2sKQEAgLTAsMCArMSwxNSBAQAorCisKK05ld0dyb3VwICAgICAgIHh4eCB0ZXJtPWJvbGQgY3Rlcm09aXRhbGljIGN0ZXJtZmc9MiBjdGVybWJnPTMKKworCitHcm91cDMgICAgICAgICB4eHggdGVybT11bmRlcmxpbmUgY3Rlcm09Ym9sZAorCisKKworCisKKworCisKK0U0NzU6IHRlcm09J2FzZGYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q1Mi5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3Q1Mi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDZiNjVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDUyLmluCkBAIC0wLDAgKzEsNjUgQEAKK1Rlc3RzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIHdpdGggY29udmVyc2lvbiBmb3IgV2luMzIuCisKK1NUQVJUVEVTVAorOnNvIG1ieXRlLnZpbQorOiIgbWFrZSB0aGlzIGEgZHVtbXkgdGVzdCBmb3Igbm9uLVdpbjMyIHN5c3RlbXMKKzppZiAhaGFzKCJ3aW4zMiIpIHwgZSEgdGVzdC5vayB8IHdxISB0ZXN0Lm91dCB8IGVuZGlmCis6IgorOiIgd3JpdGUgdGVzdHM6Cis6IiBjb21iaW5lIHRocmVlIHZhbHVlcyBmb3IgJ2VuY29kaW5nJyB3aXRoIHRocmVlIHZhbHVlcyBmb3IgJ2ZpbGVlbmNvZGluZycKKzoiIGFsc28gd3JpdGUgZmlsZXMgZm9yIHJlYWQgdGVzdHMKKy9eMQorOnNldCBlbmNvZGluZz11dGYtOAorOi53ISArK2VuYz11dGYtOCB0ZXN0Lm91dAorOi53ICsrZW5jPWNwMTI1MSA+PnRlc3Qub3V0Cis6LncgKytlbmM9Y3A4NjYgPj50ZXN0Lm91dAorOi53ISArK2VuYz11dGYtOCBYdXRmOAorL14yCis6c2V0IGVuY29kaW5nPWNwMTI1MQorOi53ICsrZW5jPXV0Zi04ID4+dGVzdC5vdXQKKzoudyArK2VuYz1jcDEyNTEgPj50ZXN0Lm91dAorOi53ICsrZW5jPWNwODY2ID4+dGVzdC5vdXQKKzoudyEgKytlbmM9Y3AxMjUxIFhjcDEyNTEKKy9eMworOnNldCBlbmNvZGluZz1jcDg2NgorOi53ICsrZW5jPXV0Zi04ID4+dGVzdC5vdXQKKzoudyArK2VuYz1jcDEyNTEgPj50ZXN0Lm91dAorOi53ICsrZW5jPWNwODY2ID4+dGVzdC5vdXQKKzoudyEgKytlbmM9Y3A4NjYgWGNwODY2Cis6IgorOiIgcmVhZCB0aHJlZSAnZmlsZWVuY29kaW5nJ3Mgd2l0aCB1dGYtOCAnZW5jb2RpbmcnCis6c2V0IGVuY29kaW5nPXV0Zi04IGZlbmNzPXV0Zi04LGNwMTI1MQorOmUgWHV0ZjgKKzoudyArK2VuYz11dGYtOCA+PnRlc3Qub3V0Cis6ZSBYY3AxMjUxCis6LncgKytlbmM9dXRmLTggPj50ZXN0Lm91dAorOnNldCBmZW5jcz11dGYtOCxjcDg2NgorOmUgWGNwODY2Cis6LncgKytlbmM9dXRmLTggPj50ZXN0Lm91dAorOiIKKzoiIHJlYWQgdGhyZWUgJ2ZpbGVlbmNvZGluZydzIHdpdGggY3AxMjUxICdlbmNvZGluZycKKzpzZXQgZW5jb2Rpbmc9dXRmLTggZmVuY3M9dXRmLTgsY3AxMjUxCis6ZSBYdXRmOAorOi53ICsrZW5jPWNwMTI1MSA+PnRlc3Qub3V0Cis6ZSBYY3AxMjUxCis6LncgKytlbmM9Y3AxMjUxID4+dGVzdC5vdXQKKzpzZXQgZmVuY3M9dXRmLTgsY3A4NjYKKzplIFhjcDg2NgorOi53ICsrZW5jPWNwMTI1MSA+PnRlc3Qub3V0Cis6IgorOiIgcmVhZCB0aHJlZSAnZmlsZWVuY29kaW5nJ3Mgd2l0aCBjcDg2NiAnZW5jb2RpbmcnCis6c2V0IGVuY29kaW5nPWNwODY2IGZlbmNzPXV0Zi04LGNwMTI1MQorOmUgWHV0ZjgKKzoudyArK2VuYz1jcDg2NiA+PnRlc3Qub3V0Cis6ZSBYY3AxMjUxCis6LncgKytlbmM9Y3A4NjYgPj50ZXN0Lm91dAorOnNldCBmZW5jcz11dGYtOCxjcDg2NgorOmUgWGNwODY2Cis6LncgKytlbmM9Y3A4NjYgPj50ZXN0Lm91dAorOiIKKzpxYSEKK0VORFRFU1QKKworMSB1dGYtOCB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKKzIgY3AxMjUxIHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQorMyBjcDg2NiB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q1Mi5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q1Mi5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGI1MTY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDUyLm9rCkBAIC0wLDAgKzEsMTggQEAKKzEgdXRmLTggdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCisxIHV0Zi04IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQorMSB1dGYtOCB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKKzIgY3AxMjUxIHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQorMiBjcDEyNTEgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCisyIGNwMTI1MSB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKKzMgY3A4NjYgdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiszIGNwODY2IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQorMyBjcDg2NiB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKKzEgdXRmLTggdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCisyIGNwMTI1MSB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKKzMgY3A4NjYgdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCisxIHV0Zi04IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQorMiBjcDEyNTEgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiszIGNwODY2IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQorMSB1dGYtOCB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKKzIgY3AxMjUxIHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQorMyBjcDg2NiB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q2LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViYmUyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q2LmluCkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgZm9yIGF1dG9jb21tYW5kIHRoYXQgcmVkZWZpbmVzIHRoZSBhcmd1bWVudCBsaXN0LCB3aGVuIGRvaW5nICI6YWxsIi4KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6YXUgQnVmUmVhZFBvc3QgWHh4MiBuZXh0IFh4eDIgWHh4MQorL15zdGFydCBvZgorQTEbOi4sL2VuZCBvZi93ISBYeHgxICAgICIgd3JpdGUgdGVzdCBmaWxlIFh4eDEKKyRyMjouLC9lbmQgb2YvdyEgWHh4MiAgICAgIiB3cml0ZSB0ZXN0IGZpbGUgWHh4MgorJHIzOi4sL2VuZCBvZi93ISBYeHgzICAgICAiIHdyaXRlIHRlc3QgZmlsZSBYeHgzCis6bmV4dCEgWHh4MSBYeHgyIFh4eDMgICAgICIgcmVkZWZpbmUgYXJnbGlzdDsgZ28gdG8gWHh4MQorOmFsbCAgICAgICAgICAgICAgICAgICAgICAiIG9wZW4gd2luZG93IGZvciBhbGwgYXJncworOnchIHRlc3Qub3V0ICAgICAgICAgICAgICAiIFdyaXRlIGNvbnRlbnRzIG9mIFh4eDEKKxcXFxc6dyA+PnRlc3Qub3V0ICAgICAiIEFwcGVuZCBjb250ZW50cyBvZiBsYXN0IHdpbmRvdyAoWHh4MSkKKzpyZXcgICAgICAgICAgICAgICAgICAgICAgIiBzaG91bGQgbm93IGJlIGluIFh4eDIKKzp3ID4+dGVzdC5vdXQgICAgICAgICAgICAgIiBBcHBlbmQgY29udGVudHMgb2YgWHh4MgorOnFhIQorRU5EVEVTVAorCitzdGFydCBvZiB0ZXN0IGZpbGUgWHh4CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKK2VuZCBvZiB0ZXN0IGZpbGUgWHh4CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0Ni5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q2Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YjBjOTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0Ni5vawpAQCAtMCwwICsxLDE4IEBACitzdGFydCBvZiB0ZXN0IGZpbGUgWHh4MQorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CitlbmQgb2YgdGVzdCBmaWxlIFh4eAorc3RhcnQgb2YgdGVzdCBmaWxlIFh4eDEKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKK3N0YXJ0IG9mIHRlc3QgZmlsZSBYeHgyCisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKK2VuZCBvZiB0ZXN0IGZpbGUgWHh4CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0Ny5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3Q3LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2MwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0Ny5pbgpAQCAtMCwwICsxLDI2IEBACitUZXN0IGZvciBhdXRvY29tbWFuZCB0aGF0IGNoYW5nZXMgdGhlIGJ1ZmZlciBsaXN0LCB3aGVuIGRvaW5nICI6YmFsbCIuCisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorL15zdGFydCBvZgorQTEbOi4sL2VuZCBvZi93ISBYeHgxICAgIiB3cml0ZSB0ZXN0IGZpbGUgWHh4MQorOnNwIFh4eDEKKzpjbG9zZQorJHIyOi4sL2VuZCBvZi93ISBYeHgyICAgICIgd3JpdGUgdGVzdCBmaWxlIFh4eDIKKzpzcCBYeHgyCis6Y2xvc2UKKyRyMzouLC9lbmQgb2YvdyEgWHh4MyAgICAiIHdyaXRlIHRlc3QgZmlsZSBYeHgzCis6c3AgWHh4MworOmNsb3NlCis6YXUgQnVmUmVhZFBvc3QgWHh4MiBid2lwZQorJHI0OmJhbGwgICAgICAgICAgICAgICAgICIgb3BlbiB3aW5kb3cgZm9yIGFsbCBhcmdzLCBjbG9zZSBYeHgyCis6LiwkdyEgdGVzdC5vdXQgICAgICAgICAgIiBXcml0ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUKKxcXOncgPj50ZXN0Lm91dCAgICAgICAgIiBBcHBlbmQgY29udGVudHMgb2Ygc2Vjb25kIHdpbmRvdyAoWHh4MSkKKxcXOi9ec3RhcnQgb2YvLCR3ID4+dGVzdC5vdXQgICAiIEFwcGVuZCBjb250ZW50cyBvZiBsYXN0IHdpbmRvdyAodGhpcyBmaWxlKQorOnFhIQorRU5EVEVTVAorCitzdGFydCBvZiB0ZXN0IGZpbGUgWHh4CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q3Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDcub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkMWZmOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q3Lm9rCkBAIC0wLDAgKzEsMTIgQEAKK3N0YXJ0IG9mIHRlc3QgZmlsZSBYeHg0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKK3N0YXJ0IG9mIHRlc3QgZmlsZSBYeHgxCisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKK3N0YXJ0IG9mIHRlc3QgZmlsZSBYeHg0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q4LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlMTcxNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q4LmluCkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgZm9yIEJ1ZldyaXRlUHJlIGF1dG9jb21tYW5kIHRoYXQgZGVsZXRlcyBvciB1bmxvYWRzIHRoZSBidWZmZXIuCisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorOmF1IEJ1ZldyaXRlUHJlIFh4eDEgYnVubG9hZAorOmF1IEJ1ZldyaXRlUHJlIFh4eDIgYndpcGUKKy9ec3RhcnQgb2YKK0ExGzouLC9lbmQgb2YvdyEgWHh4MSAgIiB3cml0ZSB0ZXN0IGZpbGUgWHh4MQorJHIyOi4sL2VuZCBvZi93ISBYeHgyICAgIiB3cml0ZSB0ZXN0IGZpbGUgWHh4MgorOmUhIFh4eDIgICAgICAgICAgICAgICAgIiBlZGl0IFh4eDIKKzpiZGVsIHRlc3Q4LmluCQkiIGRlbGV0ZSB0aGlzIGZpbGUgZnJvbSB0aGUgYnVmZmVyIGxpc3QKKzplIFh4eDEgICAgICAgICAgICAgICAgICIgZWRpdCBYeHgxCis6dyAgICAgICAgICAgICAgICAgICAgICAiIHdyaXRlIGl0LCB3aWxsIHVubG9hZCBpdCBhbmQgZ2l2ZSBhbiBlcnJvciBtc2cKKzp3ISB0ZXN0Lm91dCAgICAgICAgICAgICIgV3JpdGUgY29udGVudHMgb2YgdGhpcyBmaWxlCis6ZSEgWHh4MiAgICAgICAgICAgICAgICAiIHN0YXJ0IGVkaXRpbmcgWHh4MgorOmJ3aXBlIHRlc3Qub3V0ICAgICAgICAgIiByZW1vdmUgdGVzdC5vdXQgZnJvbSB0aGUgYnVmZmVyIGxpc3QKKzp3ICAgICAgICAgICAgICAgICAgICAgICIgd3JpdGUgaXQsIHdpbGwgZGVsZXRlIHRoZSBidWZmZXIgYW5kIGdpdmUgYW4gZXJyb3IgbXNnCis6dyA+PnRlc3Qub3V0ICAgICAgICAgICAiIEFwcGVuZCBjb250ZW50cyBvZiB0aGlzIGZpbGUKKzpxYSEKK0VORFRFU1QKKworc3RhcnQgb2YgWHh4CisJdGVzdAorZW5kIG9mIFh4eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDgub2sgYi9zcmMvdGVzdGRpci90ZXN0OC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWIwNjZhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDgub2sKQEAgLTAsMCArMSw2IEBACitzdGFydCBvZiBYeHgyCisJdGVzdAorZW5kIG9mIFh4eAorc3RhcnQgb2YgWHh4MQorCXRlc3QKK2VuZCBvZiBYeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q5LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDkuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlMTc5NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q5LmluCkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgZm9yIEJ1ZmxlYXZlIGF1dG9jb21tYW5kIHRoYXQgZGVsZXRlcyB0aGUgYnVmZmVyIHdlIGFyZSBhYm91dCB0byBlZGl0LgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzphdSBCdWZMZWF2ZSB0ZXN0OS5pbiBid2lwZSB5eQorOmUgeXkKKzovXnN0YXJ0IG9mLywkdyEgdGVzdC5vdXQgICAgICAiIFdyaXRlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZQorOnFhIQorRU5EVEVTVAorCitzdGFydCBvZiB0ZXN0IGZpbGUgeHgKK2VuZCBvZiB0ZXN0IGZpbGUgeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q5Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDkub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjYjVmMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q5Lm9rCkBAIC0wLDAgKzEsMiBAQAorc3RhcnQgb2YgdGVzdCBmaWxlIHh4CitlbmQgb2YgdGVzdCBmaWxlIHh4CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90b2Rvcy52aW0gYi9zcmMvdGVzdGRpci90b2Rvcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1NmE1MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3RvZG9zLnZpbQpAQCAtMCwwICsxLDMgQEAKKzoiIFNjcmlwdCB0byBtYWtlIHN1cmUgYSBmaWxlIGlzIGluICJkb3MiIGZpbGUgZm9ybWF0LgorOnNldCBmZj1kb3MKKzp3cQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdW5peC52aW0gYi9zcmMvdGVzdGRpci91bml4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzY2ZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdW5peC52aW0KQEAgLTAsMCArMSwzIEBACisiIFNldHRpbmdzIGZvciB0ZXN0IHNjcmlwdCBleGVjdXRpb24KKyIgQWx3YXlzIHVzZSAic2giLCBkb24ndCB1c2UgdGhlIHZhbHVlIG9mICIkU0hFTEwiLgorc2V0IHNoZWxsPXNoCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci92bXMudmltIGIvc3JjL3Rlc3RkaXIvdm1zLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA1YTc3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdm1zLnZpbQpAQCAtMCwwICsxLDQgQEAKKyIgU2V0dGluZ3MgZm9yIHRlc3Qgc2NyaXB0IGV4ZWN1dGlvbiB1bmRlciBPcGVuVk1TCisKKyIgRG8gbm90IG1ha2UgYW55IHN3YXAgZmlsZXMKK3NldCBub3N3YXBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdG9vbGJhci5waGkgYi9zcmMvdG9vbGJhci5waGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y5MDQzYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90b29sYmFyLnBoaQpAQCAtMCwwICsxLDEyODMgQEAKKy8qIEJ1aWx0aW4gaWNvbnMgZm9yIHRoZSB0b29sYmFyIGluIHBob3RvbiAqLworCitzdGF0aWMgUGdDb2xvcl90IHRiX3BhbGV0dGVbXSA9IHsKKwlQZ1JHQigwLDAsMCksCisJUGdSR0IoMTI4LDAsMCksCisJUGdSR0IoMTI4LDEyOCwwKSwKKwlQZ1JHQigxMjgsMTI4LDEyOCksCisJUGdSR0IoMTkyLDE5MiwxOTIpLAorCVBnUkdCKDI1NSwwLDApLAorCVBnUkdCKDI1NSwyNTUsMCksCisJUGdSR0IoMjU1LDI1NSwyNTUpLAorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfY2xvc2VfZGF0YVtdID0geworCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDE0LDB4NDQsMHg0NCwweDQ0LDB4MTQsMHg0NCwweDQ0LAorCTB4NDQsMHg0MSwweDUxLDB4MDAsMHgwMCwweDAxLDB4NTEsMHgwNCwweDQ0LAorCTB4NDQsMHgxNSwweDU1LDB4MTQsMHg0NCwweDE1LDB4NTUsMHgxMywweDQ0LAorCTB4NDQsMHg0MSwweDU1LDB4NTEsMHg0MSwweDU1LDB4NTEsMHgwMywweDQ0LAorCTB4NDQsMHg0MCwweDE1LDB4NTUsMHgxNSwweDU1LDB4MTcsMHgwMywweDQ0LAorCTB4NDQsMHg0MCwweDQxLDB4NTUsMHg1NSwweDUxLDB4NDcsMHgwMywweDQ0LAorCTB4NDQsMHg0MCwweDQ0LDB4MTUsMHg1NSwweDE0LDB4NDcsMHgwMywweDQ0LAorCTB4NDQsMHg0MCwweDQxLDB4NTUsMHg1NSwweDUxLDB4NDcsMHgwMywweDQ0LAorCTB4NDQsMHg0MCwweDE1LDB4NTUsMHgxNSwweDU1LDB4MTcsMHgwMywweDQ0LAorCTB4NDQsMHg0MSwweDU1LDB4NTEsMHg0MSwweDU1LDB4NTEsMHgwMywweDQ0LAorCTB4NDQsMHgxNSwweDU1LDB4MTQsMHg0NCwweDE1LDB4NTUsMHgxMywweDQ0LAorCTB4NDQsMHg0MSwweDUxLDB4NDQsMHg0NCwweDQxLDB4NTUsMHg1MSwweDQ0LAorCTB4NDQsMHg0MCwweDE0LDB4NDQsMHg0NCwweDQ0LDB4MTUsMHgxMywweDQ0LAorCTB4NDQsMHg0MCwweDc3LDB4NzcsMHg3NywweDc3LDB4NDEsMHgwMywweDQ0LAorCTB4NDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMywweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9jbG9zZV9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfY2xvc2VfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfY29weV9kYXRhW10gPSB7CisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3NywweDc3LDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0MCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHgwNywweDc3LDB4NzcsMHg3NywweDcwLDB4NDQsCisJMHg0MCwweDcwLDB4MDAsMHgwNywweDAwLDB4MDAsMHgwMCwweDcwLDB4MzQsCisJMHg0MCwweDc3LDB4NzcsMHgwNywweDc3LDB4NzcsMHg3NywweDcwLDB4MzQsCisJMHg0MCwweDcwLDB4MDAsMHgwNywweDAwLDB4MDAsMHgwMCwweDcwLDB4MzQsCisJMHg0MCwweDc3LDB4NzcsMHgwNywweDc3LDB4NzcsMHg3NywweDcwLDB4MzQsCisJMHg0MCwweDcwLDB4MDcsMHgwNywweDAwLDB4MDAsMHgwMCwweDcwLDB4MzQsCisJMHg0MCwweDc3LDB4NzcsMHgwNywweDc3LDB4NzcsMHg3NywweDcwLDB4MzQsCisJMHg0MCwweDAwLDB4MDAsMHgwNywweDAwLDB4NzcsMHg3NywweDcwLDB4MzQsCisJMHg0NCwweDMzLDB4MzMsMHgwNywweDc3LDB4NzcsMHg3NywweDcwLDB4MzQsCisJMHg0NCwweDQ0LDB4NDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDMzLDB4MzMsMHgzMywweDMzLDB4MzQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCit9OworCitzdGF0aWMgUGhJbWFnZV90IHRiX2NvcHlfcGhpID0geworCVBnX0lNQUdFX1BBTEVUVEVfTklCQkxFLAorCTAsCisJOSwKKwl7IDE4LDE4IH0sCisJNDIwMzkzOTkyLAorCTgsCisJTlVMTCwKKwlQZ0dyZXkoMHhjMCksCisJMCwKKwlQaF9VU0VfVFJBTlNQQVJFTkNZLAorCTAsCisJMCwKKwlOVUxMLAorCTAsCisJTlVMTCwKKwl0Yl9wYWxldHRlLAorCXRiX2NvcHlfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfY3RhZ3NfZGF0YVtdID0geworCTB4NDQsMHg0NCwweDQwLDB4MDQsMHgwMCwweDAwLDB4MDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDA3LDB4NzAsMHg3NywweDc3LDB4NzAsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDA3LDB4NzcsMHg3NywweDc3LDB4NzcsMHgwNCwweDQ0LAorCTB4NDQsMHg0NCwweDA3LDB4NzAsMHg3NywweDc3LDB4MDAsMHg3MCwweDQ0LAorCTB4NDQsMHg0NCwweDQwLDB4MDQsMHgwMCwweDAwLDB4MzQsMHgwMCwweDQ0LAorCTB4NDQsMHg0MiwweDI0LDB4NDIsMHg0MCwweDAwLDB4NDIsMHg0MCwweDQ0LAorCTB4NDQsMHgyMywweDY2LDB4NjYsMHg2MCwweDAwLDB4MzYsMHg2NiwweDAzLAorCTB4NDIsMHgzNiwweDY2LDB4NjYsMHg2MCwweDAwLDB4MzYsMHg2NiwweDAzLAorCTB4MjMsMHg2NCwweDM0LDB4NjYsMHg2MCwweDAwLDB4MzYsMHg2NiwweDAzLAorCTB4MjYsMHg2MywweDAzLDB4NjYsMHg2MCwweDAwLDB4MzYsMHg2NiwweDAzLAorCTB4MzYsMHg2NCwweDM0LDB4NjYsMHg2MCwweDAwLDB4MzYsMHg2NiwweDAzLAorCTB4MzAsMHg2NiwweDY2LDB4NjYsMHg2MCwweDAwLDB4MzYsMHg2NiwweDAzLAorCTB4NDMsMHgwNiwweDY2LDB4NjYsMHg2MCwweDAwLDB4MzYsMHg2NiwweDAzLAorCTB4NDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAzLAorCTB4NDQsMHg0MywweDMzLDB4MzMsMHgzMCwweDAwLDB4MzMsMHgzMywweDMzLAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0MCwweDAwLDB4MzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0MCwweDAwLDB4MzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDMzLDB4MzQsMHg0NCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9jdGFnc19waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfY3RhZ3NfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfY3V0X2RhdGFbXSA9IHsKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0MCwweDQ0LDB4NDQsMHg0MCwweDM0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0MCwweDM0LDB4NDQsMHg0MCwweDM0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDA0LDB4NDQsMHgwMywweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDAzLDB4NDQsMHgwMywweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQwLDB4NDAsMHgzNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQwLDB4MzAsMHgzNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4MDMsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQwLDB4MDAsMHgzNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0MywweDAzLDB4NDQsMHgwMywweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHgwMCwweDAzLDB4NDQsMHgwMCwweDA0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDAsMHgzMywweDAzLDB4NDQsMHgwMywweDQwLDB4NDQsMHg0NCwKKwkweDQ0LDB4NDAsMHg0NCwweDAzLDB4NDQsMHgwMywweDQwLDB4MzQsMHg0NCwKKwkweDQ0LDB4NDAsMHg0NCwweDAzLDB4NDQsMHgwMywweDQwLDB4MzQsMHg0NCwKKwkweDQ0LDB4NDQsMHgwMCwweDMzLDB4NDQsMHg0MCwweDAzLDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHgzMywweDQ0LDB4NDQsMHg0MywweDM0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKK307CisKK3N0YXRpYyBQaEltYWdlX3QgdGJfY3V0X3BoaSA9IHsKKwlQZ19JTUFHRV9QQUxFVFRFX05JQkJMRSwKKwkwLAorCTksCisJeyAxOCwxOCB9LAorCTQyMDM5Mzk5MiwKKwk4LAorCU5VTEwsCisJUGdHcmV5KDB4YzApLAorCTAsCisJUGhfVVNFX1RSQU5TUEFSRU5DWSwKKwkwLAorCTAsCisJTlVMTCwKKwkwLAorCU5VTEwsCisJdGJfcGFsZXR0ZSwKKwl0Yl9jdXRfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfZmluZF9kYXRhW10gPSB7CisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3NywweDcwLDB4MDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3NywweDcwLDB4NDAsMHg0NCwweDQ0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3NywweDcwLDB4MDAsMHgwNCwweDQ0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3NywweDc3LDB4NzcsMHgwNCwweDQ0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3NywweDcwLDB4MDAsMHgwNCwweDQ0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3NywweDA0LDB4NDQsMHg0MCwweDQ0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3MCwweDQ3LDB4NzQsMHg0NCwweDA0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3MCwweDQ3LDB4NDQsMHg0NCwweDA0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDA0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3MCwweDQ0LDB4NDcsMHg0NCwweDA0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3NywweDA0LDB4NDQsMHg0MCwweDQ0LDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3NywweDcwLDB4MDAsMHgwNCwweDAwLDB4NDQsCisJMHg0MCwweDc3LDB4NzcsMHg3NywweDc3LDB4NzcsMHgwNCwweDAwLDB4MDQsCisJMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDQwLDB4MDQsCisJMHg0NCwweDQ0LDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMywweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCit9OworCitzdGF0aWMgUGhJbWFnZV90IHRiX2ZpbmRfcGhpID0geworCVBnX0lNQUdFX1BBTEVUVEVfTklCQkxFLAorCTAsCisJOSwKKwl7IDE4LDE4IH0sCisJNDIwMzkzOTkyLAorCTgsCisJTlVMTCwKKwlQZ0dyZXkoMHhjMCksCisJMCwKKwlQaF9VU0VfVFJBTlNQQVJFTkNZLAorCTAsCisJMCwKKwlOVUxMLAorCTAsCisJTlVMTCwKKwl0Yl9wYWxldHRlLAorCXRiX2ZpbmRfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfZmluZF9oZWxwX2RhdGFbXSA9IHsKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHgwMCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDAsMHgwNCwweDQzLDB4MDAsMHgzNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4MDAsMHgzNCwweDQ0LDB4MDAsMHgwNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4MDAsMHgzNCwweDQ0LDB4MDAsMHgwMCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4MzAsMHgwNCwweDQwLDB4NDcsMHg3NCwweDA0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDA0LDB4NDQsMHg3NCwweDQwLDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDA3LDB4NzcsMHg3NCwweDcwLDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0MCwweDA0LDB4NzcsMHg0NCwweDQwLDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0MCwweDAwLDB4NDcsMHg3NCwweDAzLDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4MDAsMHgwMCwweDMwLDB4MDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0MCwweDAzLDB4NDQsMHg0NCwweDQwLDB4MDAsMHg0NCwKKwkweDQ0LDB4NDQsMHg0MCwweDAzLDB4NDQsMHg0NCwweDQ0LDB4MDAsMHg0NCwKKwkweDQ0LDB4NDQsMHg0MCwweDAzLDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDMzLDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKK307CisKK3N0YXRpYyBQaEltYWdlX3QgdGJfZmluZF9oZWxwX3BoaSA9IHsKKwlQZ19JTUFHRV9QQUxFVFRFX05JQkJMRSwKKwkwLAorCTksCisJeyAxOCwxOCB9LAorCTQyMDM5Mzk5MiwKKwk4LAorCU5VTEwsCisJUGdHcmV5KDB4YzApLAorCTAsCisJUGhfVVNFX1RSQU5TUEFSRU5DWSwKKwkwLAorCTAsCisJTlVMTCwKKwkwLAorCU5VTEwsCisJdGJfcGFsZXR0ZSwKKwl0Yl9maW5kX2hlbHBfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfZmluZF9uZXh0X2RhdGFbXSA9IHsKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHgwMCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHgwNCwweDA0LDB4NDQsMHg0NCwKKwkweDQ0LDB4MDcsMHgxNywweDc3LDB4NzcsMHgwMCwweDAwLDB4NDQsMHg0NCwKKwkweDQ0LDB4NzcsMHgxMSwweDc3LDB4NzcsMHg3NywweDcwLDB4NDQsMHg0NCwKKwkweDExLDB4MTEsMHgxNSwweDE3LDB4NzcsMHgwMCwweDAwLDB4NDQsMHg0NCwKKwkweDE1LDB4NTUsMHg1NSwweDUxLDB4NzAsMHg0NCwweDQ0LDB4MDQsMHg0NCwKKwkweDE1LDB4NTUsMHg1NSwweDU1LDB4MTQsMHg3NywweDQ0LDB4NDAsMHg0NCwKKwkweDE1LDB4NTUsMHg1NSwweDUxLDB4MDQsMHg3NCwweDQ0LDB4NDAsMHg0NCwKKwkweDExLDB4MTEsMHgxNSwweDE3LDB4MDQsMHg0NCwweDQ0LDB4NDAsMHg0NCwKKwkweDQ0LDB4NzcsMHgxMSwweDc3LDB4MDQsMHg0NCwweDc0LDB4NDAsMHg0NCwKKwkweDQ0LDB4MDcsMHgxNywweDc3LDB4NzAsMHg0NCwweDQ0LDB4MDQsMHg0NCwKKwkweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHgwMCwweDAwLDB4NDAsMHgwNCwKKwkweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3NywweDcwLDB4NDAsMHgwMCwKKwkweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHgwMCwKKwkweDQ0LDB4NDQsMHg0MywweDMzLDB4MzMsMHgzMywweDMzLDB4MzQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKK307CisKK3N0YXRpYyBQaEltYWdlX3QgdGJfZmluZF9uZXh0X3BoaSA9IHsKKwlQZ19JTUFHRV9QQUxFVFRFX05JQkJMRSwKKwkwLAorCTksCisJeyAxOCwxOCB9LAorCTQyMDM5Mzk5MiwKKwk4LAorCU5VTEwsCisJUGdHcmV5KDB4YzApLAorCTAsCisJUGhfVVNFX1RSQU5TUEFSRU5DWSwKKwkwLAorCTAsCisJTlVMTCwKKwkwLAorCU5VTEwsCisJdGJfcGFsZXR0ZSwKKwl0Yl9maW5kX25leHRfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfZmluZF9wcmV2X2RhdGFbXSA9IHsKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHgwMCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHgwNCwweDA0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDcsMHgxNywweDc3LDB4NzcsMHgwMCwweDAwLDB4NDQsMHg0NCwKKwkweDQ0LDB4NzEsMHgxNywweDc3LDB4NzcsMHg3NywweDcwLDB4NDQsMHg0NCwKKwkweDQ0LDB4MTUsMHgxMSwweDExLDB4MTcsMHgwMCwweDAwLDB4NDQsMHg0NCwKKwkweDQxLDB4NTUsMHg1NSwweDU1LDB4MTAsMHg0NCwweDQ0LDB4MDQsMHg0NCwKKwkweDE1LDB4NTUsMHg1NSwweDU1LDB4MDQsMHg3NywweDQ0LDB4NDAsMHg0NCwKKwkweDQxLDB4NTUsMHg1NSwweDU1LDB4MDQsMHg3NCwweDQ0LDB4NDAsMHg0NCwKKwkweDQ0LDB4MTUsMHgxMSwweDExLDB4MDQsMHg0NCwweDQ0LDB4NDAsMHg0NCwKKwkweDQ0LDB4NzEsMHgxNywweDc3LDB4MDQsMHg0NCwweDc0LDB4NDAsMHg0NCwKKwkweDQ0LDB4NDcsMHgxNywweDc3LDB4NzAsMHg0NCwweDQ0LDB4MDQsMHg0NCwKKwkweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHgwMCwweDAwLDB4NDAsMHgwNCwKKwkweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3NywweDcwLDB4NDAsMHgwMCwKKwkweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHgwMCwKKwkweDQ0LDB4NDQsMHg0MywweDMzLDB4MzMsMHgzMywweDMzLDB4MzQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKK307CisKK3N0YXRpYyBQaEltYWdlX3QgdGJfZmluZF9wcmV2X3BoaSA9IHsKKwlQZ19JTUFHRV9QQUxFVFRFX05JQkJMRSwKKwkwLAorCTksCisJeyAxOCwxOCB9LAorCTQyMDM5Mzk5MiwKKwk4LAorCU5VTEwsCisJUGdHcmV5KDB4YzApLAorCTAsCisJUGhfVVNFX1RSQU5TUEFSRU5DWSwKKwkwLAorCTAsCisJTlVMTCwKKwkwLAorCU5VTEwsCisJdGJfcGFsZXR0ZSwKKwl0Yl9maW5kX3ByZXZfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfaGVscF9kYXRhW10gPSB7CisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHgwMCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDAsMHgwNCwweDQzLDB4MDAsMHgzNCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4MDAsMHgzNCwweDQ0LDB4MDAsMHgwNCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4MDAsMHgzNCwweDQ0LDB4MDAsMHgwNCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4MzAsMHgwNCwweDQzLDB4MDAsMHgzNCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0MCwweDAzLDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0MCwweDAzLDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0MCwweDAzLDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0MCwweDAzLDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0MCwweDAzLDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDMzLDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCit9OworCitzdGF0aWMgUGhJbWFnZV90IHRiX2hlbHBfcGhpID0geworCVBnX0lNQUdFX1BBTEVUVEVfTklCQkxFLAorCTAsCisJOSwKKwl7IDE4LDE4IH0sCisJNDIwMzkzOTkyLAorCTgsCisJTlVMTCwKKwlQZ0dyZXkoMHhjMCksCisJMCwKKwlQaF9VU0VfVFJBTlNQQVJFTkNZLAorCTAsCisJMCwKKwlOVUxMLAorCTAsCisJTlVMTCwKKwl0Yl9wYWxldHRlLAorCXRiX2hlbHBfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfanVtcF9kYXRhW10gPSB7CisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQyLDB4MjIsMHgyMiwweDIyLDB4MjIsMHgyMiwweDIyLDB4MjQsCisJMHg0NCwweDIzLDB4NjYsMHg2NiwweDY2LDB4NjYsMHg2NiwweDY2LDB4MDMsCisJMHg0MiwweDM2LDB4NjYsMHg2NiwweDY2LDB4NjYsMHg2NiwweDY2LDB4MDMsCisJMHgyMywweDY0LDB4MzQsMHg2NiwweDY2LDB4NjYsMHg2NiwweDY2LDB4MDMsCisJMHgyNiwweDYzLDB4MDMsMHg2NiwweDY2LDB4NjYsMHg2NiwweDY2LDB4MDMsCisJMHgzNiwweDY0LDB4MzQsMHg2NiwweDY2LDB4NjYsMHg2NiwweDY2LDB4MDMsCisJMHgzMCwweDY2LDB4NjYsMHg2NiwweDY2LDB4NjYsMHg2NiwweDY2LDB4MDMsCisJMHg0MywweDA2LDB4NjYsMHg2NiwweDY2LDB4NjYsMHg2NiwweDY2LDB4MDMsCisJMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsCisJMHg0NCwweDQzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MzMsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCit9OworCitzdGF0aWMgUGhJbWFnZV90IHRiX2p1bXBfcGhpID0geworCVBnX0lNQUdFX1BBTEVUVEVfTklCQkxFLAorCTAsCisJOSwKKwl7IDE4LDE4IH0sCisJNDIwMzkzOTkyLAorCTgsCisJTlVMTCwKKwlQZ0dyZXkoMHhjMCksCisJMCwKKwlQaF9VU0VfVFJBTlNQQVJFTkNZLAorCTAsCisJMCwKKwlOVUxMLAorCTAsCisJTlVMTCwKKwl0Yl9wYWxldHRlLAorCXRiX2p1bXBfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfbG9hZF9zZXNzaW9uX2RhdGFbXSA9IHsKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4MTEsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQxLDB4NTUsMHgxNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDE1LDB4NTUsMHg1MSwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0MSwweDExLDB4NTUsMHgxMSwweDE0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQxLDB4NTUsMHgxNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQxLDB4NTUsMHgxNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQxLDB4NTUsMHgxNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQxLDB4MTEsMHgxNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwKKwkweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3NywweDc0LDB4NDMsMHgwNCwKKwkweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHg3NywweDc3LDB4MzMsMHgwNCwKKwkweDQwLDB4NzQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDU1LDB4MzMsMHgwNCwKKwkweDQwLDB4NzQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4MzMsMHgwNCwKKwkweDQwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MzMsMHgwMywKKwkweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHg3NywweDc0LDB4MzMsMHgwMywKKwkweDQwLDB4NDMsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MzAsMHgzNCwKKwkweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHg0NCwKKwkweDQ0LDB4NDQsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MzQsMHg0NCwKK307CisKK3N0YXRpYyBQaEltYWdlX3QgdGJfbG9hZF9zZXNzaW9uX3BoaSA9IHsKKwlQZ19JTUFHRV9QQUxFVFRFX05JQkJMRSwKKwkwLAorCTksCisJeyAxOCwxOCB9LAorCTQyMDM5Mzk5MiwKKwk4LAorCU5VTEwsCisJUGdHcmV5KDB4YzApLAorCTAsCisJUGhfVVNFX1RSQU5TUEFSRU5DWSwKKwkwLAorCTAsCisJTlVMTCwKKwkwLAorCU5VTEwsCisJdGJfcGFsZXR0ZSwKKwl0Yl9sb2FkX3Nlc3Npb25fZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfbWFjcm9fZGF0YVtdID0geworCTB4NDQsMHg0NCwweDQzLDB4MDAsMHgzNCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDMwLDB4NzcsMHgwMywweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDA3LDB4NzcsMHg3MCwweDM0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0MywweDA3LDB4NzcsMHg3MCwweDM0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDMwLDB4NzcsMHgwMywweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQwLDB4MDAsMHgwMCwweDM0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDAwLDB4MDAsMHg3MCwweDM0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHgzMCwweDc3LDB4NzcsMHg3NywweDA0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHgwMCwweDc3LDB4NzcsMHg3NywweDAwLDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0MywweDAwLDB4MDAsMHg3NywweDMwLDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDMwLDB4MDAsMHg3NywweDcwLDB4MzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDAwLDB4NzcsMHg3NywweDcwLDB4MDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0MywweDA3LDB4NzcsMHg3NywweDc3LDB4MDAsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDc3LDB4NzAsMHgwMCwweDc3LDB4NzAsMHgwNCwweDQ0LAorCTB4NDQsMHgwNywweDc3LDB4MDMsMHg0MCwweDA3LDB4NzcsMHg3MCwweDQ0LAorCTB4NDQsMHgwNywweDcwLDB4MzQsMHg0NCwweDMwLDB4NzcsMHg3MCwweDQ0LAorCTB4NDQsMHgzMCwweDAwLDB4NDQsMHg0NCwweDQzLDB4MDAsMHgwMywweDQ0LAorCTB4NDQsMHg0MywweDM0LDB4NDQsMHg0NCwweDQ0LDB4NDMsMHgwNCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9tYWNyb19waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfbWFjcm9fZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfbWFrZV9kYXRhW10gPSB7CisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4MDAsMHg0MCwweDAwLDB4MDAsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQwLDB4NzcsMHgwNywweDc3LDB4NzcsMHgwNCwweDQ0LDB4NDQsCisJMHg0NCwweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHg3MCwweDQ0LDB4NDQsCisJMHg0NCwweDQwLDB4NzMsMHgwNywweDc3LDB4NzAsMHgwNywweDA0LDB4NDQsCisJMHg0NCwweDQ0LDB4MDAsMHg0MCwweDAwLDB4MDMsMHg0MCwweDA0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4MDQsMHg0NCwweDA0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAwLDB4MDMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQzLDB4MzMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCit9OworCitzdGF0aWMgUGhJbWFnZV90IHRiX21ha2VfcGhpID0geworCVBnX0lNQUdFX1BBTEVUVEVfTklCQkxFLAorCTAsCisJOSwKKwl7IDE4LDE4IH0sCisJNDIwMzkzOTkyLAorCTgsCisJTlVMTCwKKwlQZ0dyZXkoMHhjMCksCisJMCwKKwlQaF9VU0VfVFJBTlNQQVJFTkNZLAorCTAsCisJMCwKKwlOVUxMLAorCTAsCisJTlVMTCwKKwl0Yl9wYWxldHRlLAorCXRiX21ha2VfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfbWF4aW1pemVfZGF0YVtdID0geworCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzAsMHg0NCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NzQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ3LDB4NzQsMHgwNCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDAsMHgwMCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4MDAsMHgwMCwweDA0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4MDAsMHgwMCwweDA0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDAsMHgwMCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHgwNCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDc3LDB4NzcsMHg3NywweDc3LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNCwweDQ0LAorCTB4NDQsMHg0NCwweDQzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzNCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9tYXhpbWl6ZV9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfbWF4aW1pemVfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfbWF4d2lkdGhfZGF0YVtdID0geworCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LAorCTB4NzAsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NywweDA0LAorCTB4NzAsMHg0NCwweDc0LDB4NDAsMHg0NCwweDA0LDB4NDQsMHg0NywweDAzLAorCTB4NzAsMHg0NywweDc0LDB4MDAsMHg0NCwweDAwLDB4NDQsMHg0NywweDAzLAorCTB4NzAsMHg0NCwweDQwLDB4MDAsMHg0NCwweDAwLDB4MDQsMHg0NywweDAzLAorCTB4NzAsMHg0NCwweDQ0LDB4MDAsMHg0NCwweDAwLDB4NDQsMHg0NywweDAzLAorCTB4NzAsMHg0NCwweDQ0LDB4NDAsMHg0NCwweDA0LDB4NDQsMHg0NywweDAzLAorCTB4NzAsMHg3NywweDc3LDB4NzcsMHg3NywweDc3LDB4NzcsMHg3NywweDAzLAorCTB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLAorCTB4NDQsMHg0MywweDMzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9tYXh3aWR0aF9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfbWF4d2lkdGhfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfbWluaW1pemVfZGF0YVtdID0geworCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQwLDB4MDAsMHgwMCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4MDAsMHgwNCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDAsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDQ0LAorCTB4NDcsMHgwNCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDcsMHgwNCwweDQ0LAorCTB4NDcsMHgwNCwweDQ3LDB4NDQsMHg0NCwweDQ0LDB4NDcsMHgwMywweDQ0LAorCTB4NDcsMHgwNCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDcsMHgwMywweDQ0LAorCTB4NDcsMHgwNCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzcsMHgwMywweDQ0LAorCTB4NDcsMHgwNywweDc3LDB4NzcsMHg3NywweDc3LDB4NzcsMHgwMywweDQ0LAorCTB4NDcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDQ0LAorCTB4NDQsMHg0NCwweDMzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMywweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDAsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4MDAsMHgwNCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQwLDB4MDAsMHgwMCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9taW5pbWl6ZV9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfbWluaW1pemVfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfbWlud2lkdGhfZGF0YVtdID0geworCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ3LDB4MDAsMHgwMCwweDAwLDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ3LDB4MDQsMHg0NCwweDcwLDB4NDQsMHg0NCwweDQ0LAorCTB4NDAsMHg0NCwweDQ3LDB4MDQsMHg3NCwweDcwLDB4MzQsMHg0NCwweDA0LAorCTB4NDAsMHgwNCwweDQ3LDB4MDQsMHg0NCwweDcwLDB4MzQsMHg0MCwweDA0LAorCTB4NDAsMHgwMCwweDQ3LDB4MDQsMHg0NCwweDcwLDB4MzQsMHgwMCwweDA0LAorCTB4NDAsMHgwNCwweDQ3LDB4MDQsMHg0NCwweDcwLDB4MzQsMHg0MCwweDA0LAorCTB4NDAsMHg0NCwweDQ3LDB4MDQsMHg0NCwweDcwLDB4MzQsMHg0NCwweDA0LAorCTB4NDQsMHg0NCwweDQ3LDB4MDcsMHg3NywweDcwLDB4MzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ3LDB4MDAsMHgwMCwweDAwLDB4MzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHgzMywweDMzLDB4MzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9taW53aWR0aF9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfbWlud2lkdGhfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfbmV3X2RhdGFbXSA9IHsKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDMsMHg0NCwweDM3LDB4MzQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDcsMHgzNCwweDM3LDB4MzQsMHg3MywKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg3MywweDA3LDB4MDcsMHgzNywKKwkweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNywweDc3LDB4NzAsMHgzMywKKwkweDQwLDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg3NywweDc3LDB4NzcsMHg3NywKKwkweDQwLDB4NDQsMHg3NCwweDQ0LDB4NDQsMHgwNywweDA3LDB4NzAsMHgzMywKKwkweDQwLDB4NDcsMHg3NCwweDQ0LDB4NDMsMHg0NywweDA3LDB4MDcsMHg0NCwKKwkweDQwLDB4NDQsMHg0NCwweDQ0LDB4MzQsMHg0NywweDA3LDB4MzMsMHg3NCwKKwkweDQwLDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NywweDA3LDB4MzQsMHgzNywKKwkweDQwLDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NywweDAzLDB4NDQsMHg0MywKKwkweDQwLDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NywweDAzLDB4NDQsMHg0NCwKKwkweDQwLDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NywweDAzLDB4NDQsMHg0NCwKKwkweDQwLDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NywweDAzLDB4NDQsMHg0NCwKKwkweDQwLDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NywweDAzLDB4NDQsMHg0NCwKKwkweDQwLDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NywweDAzLDB4NDQsMHg0NCwKKwkweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHg3NywweDAzLDB4NDQsMHg0NCwKKwkweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4NDQsMHg0NCwKK307CisKK3N0YXRpYyBQaEltYWdlX3QgdGJfbmV3X3BoaSA9IHsKKwlQZ19JTUFHRV9QQUxFVFRFX05JQkJMRSwKKwkwLAorCTksCisJeyAxOCwxOCB9LAorCTQyMDM5Mzk5MiwKKwk4LAorCU5VTEwsCisJUGdHcmV5KDB4YzApLAorCTAsCisJUGhfVVNFX1RSQU5TUEFSRU5DWSwKKwkwLAorCTAsCisJTlVMTCwKKwkwLAorCU5VTEwsCisJdGJfcGFsZXR0ZSwKKwl0Yl9uZXdfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfbmV3X3Nlc3Npb25fZGF0YVtdID0geworCTB4NDQsMHg0NCwweDM0LDB4NDMsMHg3MywweDQ0LDB4MzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQzLDB4NDAsMHg3MCwweDQzLDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDMzLDB4MDcsMHg3NywweDAzLDB4MzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDc3LDB4NzcsMHg3NywweDc3LDB4NzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDMzLDB4MDcsMHg3NywweDAzLDB4MzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQzLDB4NDAsMHg3MCwweDQzLDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDM0LDB4NDMsMHg3MywweDQ0LDB4MzQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHgzNCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ0LAorCTB4NDQsMHgwNywweDc3LDB4NzcsMHg3NywweDc3LDB4NzQsMHg0MywweDA0LAorCTB4NDAsMHg3NywweDc3LDB4NzcsMHg3NywweDc3LDB4NzcsMHgzMywweDA0LAorCTB4NDAsMHg3NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NTUsMHgzMywweDA0LAorCTB4NDAsMHg3NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHgzMywweDA0LAorCTB4NDAsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgzMywweDAzLAorCTB4NDAsMHg3NywweDc3LDB4NzcsMHg3NywweDc3LDB4NzQsMHgzMywweDAzLAorCTB4NDAsMHg0MywweDMzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMCwweDM0LAorCTB4NDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDQ0LAorCTB4NDQsMHg0NCwweDMzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzNCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9uZXdfc2Vzc2lvbl9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfbmV3X3Nlc3Npb25fZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfb3Blbl9kYXRhW10gPSB7CisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4MDcsMHg3NywweDc3LDB4NzAsMHg3MCwweDM0LDB4NDQsCisJMHg0NCwweDQ0LDB4MDcsMHg3NywweDc3LDB4NzAsMHg3NywweDAzLDB4NDQsCisJMHg0NCwweDQ0LDB4MDcsMHg3NywweDc3LDB4NzAsMHgwMCwweDAzLDB4NDQsCisJMHg0NCwweDAwLDB4MDcsMHg3NywweDc3LDB4NzcsMHg3NywweDAwLDB4MDQsCisJMHg0NCwweDA0LDB4MDQsMHg0NCwweDQ0LDB4NDQsMHg0NywweDA0LDB4MDQsCisJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAzLDB4MDMsCisJMHgwNywweDc3LDB4NzcsMHg3NywweDc3LDB4NzcsMHg3MCwweDAzLDB4MDMsCisJMHg0MCwweDc0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0MywweDAzLDB4MDMsCisJMHg0MCwweDc0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAzLDB4MDMsCisJMHg0NCwweDA3LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDMwLDB4MDMsCisJMHg0NCwweDA3LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQwLDB4MDMsCisJMHg0NCwweDQwLDB4NzMsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MDMsCisJMHg0NCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsCisJMHg0NCwweDQ0LDB4NDMsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MzMsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCit9OworCitzdGF0aWMgUGhJbWFnZV90IHRiX29wZW5fcGhpID0geworCVBnX0lNQUdFX1BBTEVUVEVfTklCQkxFLAorCTAsCisJOSwKKwl7IDE4LDE4IH0sCisJNDIwMzkzOTkyLAorCTgsCisJTlVMTCwKKwlQZ0dyZXkoMHhjMCksCisJMCwKKwlQaF9VU0VfVFJBTlNQQVJFTkNZLAorCTAsCisJMCwKKwlOVUxMLAorCTAsCisJTlVMTCwKKwl0Yl9wYWxldHRlLAorCXRiX29wZW5fZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfcGFzdGVfZGF0YVtdID0geworCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQwLDB4MDAsMHgwNCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQwLDB4MDAsMHgwNCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHgwMCwweDA0LDB4NDQsMHg0MCwweDAwLDB4MzQsMHg0NCwweDQ0LAorCTB4NDAsMHg0MywweDAwLDB4MDAsMHgwMCwweDMzLDB4MDMsMHg0NCwweDQ0LAorCTB4NDAsMHg0MywweDMzLDB4MzMsMHgzMywweDMzLDB4MDMsMHg0NCwweDQ0LAorCTB4NDAsMHg0MywweDM0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ0LAorCTB4NDAsMHg0MywweDM0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDQ0LAorCTB4NDAsMHg0MywweDM0LDB4MDcsMHgwMCwweDAwLDB4MDAsMHg3MCwweDM0LAorCTB4NDAsMHg0MywweDM0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDM0LAorCTB4NDAsMHg0MywweDM0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDM0LAorCTB4NDAsMHg0MywweDM0LDB4MDcsMHgwMCwweDAwLDB4MDAsMHg3MCwweDM0LAorCTB4NDAsMHg0MywweDM0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDM0LAorCTB4NDQsMHgwMCwweDAwLDB4MDcsMHgwMCwweDc3LDB4NzcsMHg3MCwweDM0LAorCTB4NDQsMHg0MywweDMzLDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDM0LAorCTB4NDQsMHg0NCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHgzMywweDMzLDB4MzMsMHgzMywweDM0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9wYXN0ZV9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfcGFzdGVfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfcHJpbnRfZGF0YVtdID0geworCTB4NDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDc3LDB4NzcsMHg3NywweDc3LDB4MDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDcwLDB4MDAsMHg3NywweDc3LDB4MDMsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDc3LDB4NzcsMHg3NywweDc3LDB4MDMsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDcwLDB4MDAsMHg3NywweDc3LDB4MDMsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDc3LDB4NzcsMHg3NywweDc3LDB4MDMsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDcwLDB4MDAsMHgwMCwweDc3LDB4MDMsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDc3LDB4NzcsMHg3NywweDc3LDB4MDMsMHg0NCwweDQ0LAorCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ0LAorCTB4MDcsMHg3NywweDc3LDB4NzcsMHg3NywweDc3LDB4NzcsMHgzMCwweDQ0LAorCTB4MDcsMHg1NSwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHgzMCwweDM0LAorCTB4MDcsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHgzMCwweDM0LAorCTB4MDcsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHgzMCwweDM0LAorCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM0LAorCTB4NDAsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHgwMywweDM0LAorCTB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDQ0LAorCTB4NDQsMHg0MywweDMzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMywweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9wcmludF9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfcHJpbnRfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfcmVkb19kYXRhW10gPSB7CisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHgwMCwweDAwLDB4MDQsMHg0MCwweDA0LDB4NDQsCisJMHg0NCwweDQ0LDB4MDAsMHg3NywweDc3LDB4NzAsMHgwNywweDAzLDB4NDQsCisJMHg0NCwweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHg3NywweDAzLDB4NDQsCisJMHg0NCwweDQwLDB4NzcsMHgwMCwweDAwLDB4NzcsMHg3NywweDAzLDB4NDQsCisJMHg0NCwweDA3LDB4NzAsMHgzMywweDMwLDB4NzcsMHg3NywweDAzLDB4NDQsCisJMHg0NCwweDA3LDB4NzAsMHgzNCwweDA3LDB4NzcsMHg3NywweDAzLDB4NDQsCisJMHg0NCwweDA3LDB4NzAsMHgzNCwweDAwLDB4MDAsMHgwMCwweDAzLDB4NDQsCisJMHg0NCwweDA3LDB4NzAsMHgzNCwweDQzLDB4MzMsMHgwMywweDMzLDB4NDQsCisJMHg0NCwweDA3LDB4NzAsMHgzNCwweDQ0LDB4NDAsMHg3MCwweDQ0LDB4NDQsCisJMHg0NCwweDQwLDB4NzcsMHgwMCwweDAwLDB4MDcsMHg3MCwweDM0LDB4NDQsCisJMHg0NCwweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHgwMywweDM0LDB4NDQsCisJMHg0NCwweDQ0LDB4MDAsMHg3NywweDc3LDB4NzAsMHgzMywweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHgwMCwweDAwLDB4MDMsMHgzNCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0MywweDMzLDB4MzMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCit9OworCitzdGF0aWMgUGhJbWFnZV90IHRiX3JlZG9fcGhpID0geworCVBnX0lNQUdFX1BBTEVUVEVfTklCQkxFLAorCTAsCisJOSwKKwl7IDE4LDE4IH0sCisJNDIwMzkzOTkyLAorCTgsCisJTlVMTCwKKwlQZ0dyZXkoMHhjMCksCisJMCwKKwlQaF9VU0VfVFJBTlNQQVJFTkNZLAorCTAsCisJMCwKKwlOVUxMLAorCTAsCisJTlVMTCwKKwl0Yl9wYWxldHRlLAorCXRiX3JlZG9fZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfcmVwbGFjZV9kYXRhW10gPSB7CisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDA3LDB4NzcsMHg3NywweDc3LDB4MDAsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDA3LDB4MDAsMHg3NywweDc3LDB4MDcsMHgwNCwweDQ0LDB4NDQsCisJMHg0NCwweDM0LDB4MDAsMHgzNywweDc3LDB4MDAsMHgwMCwweDQ0LDB4NDQsCisJMHg0NCwweDQwLDB4NzAsMHgwNywweDc3LDB4NzcsMHg3MCwweDQ0LDB4NDQsCisJMHg0NCwweDMwLDB4MDAsMHgwMywweDc3LDB4NzcsMHg3MCwweDM0LDB4NDQsCisJMHg0NCwweDA3LDB4NzcsMHgwMCwweDc3LDB4NzcsMHg3MCwweDM0LDB4NDQsCisJMHg0MCwweDAzLDB4NzMsMHgwMCwweDA3LDB4NzcsMHg0MCwweDM0LDB4NDQsCisJMHg0NCwweDQ3LDB4NzcsMHg3NywweDc3LDB4NzcsMHg3NCwweDM0LDB4NDQsCisJMHg0NCwweDA3LDB4NTUsMHg0NCwweDU3LDB4NzcsMHgwMCwweDAwLDB4NDQsCisJMHg0NCwweDA3LDB4MzUsMHg0NCwweDU1LDB4NzcsMHgwMywweDcwLDB4MDQsCisJMHg0NCwweDA3LDB4NzMsMHg1NSwweDU1LDB4NTcsMHgwMCwweDAwLDB4NDQsCisJMHg0NCwweDA3LDB4NzcsMHg3NywweDU1LDB4NzcsMHgwMywweDcwLDB4MDQsCisJMHg0NCwweDA3LDB4NzcsMHg3NywweDU3LDB4NzcsMHgwMywweDcwLDB4MDQsCisJMHg0NCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgwMCwweDAwLDB4NDQsCisJMHg0NCwweDQ0LDB4NDMsMHgzMywweDMzLDB4MzMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCit9OworCitzdGF0aWMgUGhJbWFnZV90IHRiX3JlcGxhY2VfcGhpID0geworCVBnX0lNQUdFX1BBTEVUVEVfTklCQkxFLAorCTAsCisJOSwKKwl7IDE4LDE4IH0sCisJNDIwMzkzOTkyLAorCTgsCisJTlVMTCwKKwlQZ0dyZXkoMHhjMCksCisJMCwKKwlQaF9VU0VfVFJBTlNQQVJFTkNZLAorCTAsCisJMCwKKwlOVUxMLAorCTAsCisJTlVMTCwKKwl0Yl9wYWxldHRlLAorCXRiX3JlcGxhY2VfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfc2F2ZV9kYXRhW10gPSB7CisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsCisJMHg0NCwweDA0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDQwLDB4NDQsCisJMHg0NCwweDA0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDAwLDB4MzQsCisJMHg0NCwweDA0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDQwLDB4MzQsCisJMHg0NCwweDA0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDQwLDB4MzQsCisJMHg0NCwweDA0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDQwLDB4MzQsCisJMHg0NCwweDA0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDQwLDB4MzQsCisJMHg0NCwweDA0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDQwLDB4MzQsCisJMHg0NCwweDA0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQwLDB4MzQsCisJMHg0NCwweDA0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MzQsCisJMHg0NCwweDA0LDB4NDAsMHgwMCwweDAwLDB4MDQsMHg0MCwweDQwLDB4MzQsCisJMHg0NCwweDA0LDB4NDAsMHgwMCwweDAwLDB4MDQsMHg0MCwweDQwLDB4MzQsCisJMHg0NCwweDA0LDB4NDAsMHgwMCwweDAwLDB4MDQsMHg0MCwweDQwLDB4MzQsCisJMHg0NCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzQsCisJMHg0NCwweDQ0LDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MzQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCit9OworCitzdGF0aWMgUGhJbWFnZV90IHRiX3NhdmVfcGhpID0geworCVBnX0lNQUdFX1BBTEVUVEVfTklCQkxFLAorCTAsCisJOSwKKwl7IDE4LDE4IH0sCisJNDIwMzkzOTkyLAorCTgsCisJTlVMTCwKKwlQZ0dyZXkoMHhjMCksCisJMCwKKwlQaF9VU0VfVFJBTlNQQVJFTkNZLAorCTAsCisJMCwKKwlOVUxMLAorCTAsCisJTlVMTCwKKwl0Yl9wYWxldHRlLAorCXRiX3NhdmVfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfc2F2ZV9hbGxfZGF0YVtdID0geworCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwweDQ0LAorCTB4MDQsMHgwNywweDc3LDB4NzcsMHg3NywweDcwLDB4NzAsMHg0NCwweDQ0LAorCTB4MDQsMHgwNywweDc3LDB4NzcsMHg3NywweDcwLDB4MDAsMHgzNCwweDQ0LAorCTB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LAorCTB4MDQsMHgwMCwweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHgwNywweDA0LAorCTB4MDQsMHgwMCwweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHgwMCwweDAzLAorCTB4MDQsMHgwMCwweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHgwNCwweDAzLAorCTB4MDQsMHg0MCwweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHgwNCwweDAzLAorCTB4MDQsMHg0MCwweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHgwNCwweDAzLAorCTB4MDQsMHg0MCwweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHgwNCwweDAzLAorCTB4MDQsMHg0MCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwweDAzLAorCTB4MDQsMHg0MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDAzLAorCTB4MDQsMHg0MCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAzLAorCTB4NDAsMHgwMCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4NzcsMHgwNCwweDAzLAorCTB4NDQsMHgzMCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4NzcsMHgwNCwweDAzLAorCTB4NDQsMHg0MCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4NzcsMHgwNCwweDAzLAorCTB4NDQsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLAorCTB4NDQsMHg0NCwweDQzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzMywweDM0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9zYXZlX2FsbF9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfc2F2ZV9hbGxfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfc2F2ZV9zZXNzaW9uX2RhdGFbXSA9IHsKKwkweDQ0LDB4NDQsMHg0NCwweDQxLDB4MTEsMHgxNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQxLDB4NTUsMHgxNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQxLDB4NTUsMHgxNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQxLDB4NTUsMHgxNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0MSwweDExLDB4NTUsMHgxMSwweDE0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDE1LDB4NTUsMHg1MSwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQxLDB4NTUsMHgxNCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4MTEsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwKKwkweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3NywweDc0LDB4NDMsMHgwNCwKKwkweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHg3NywweDc3LDB4MzMsMHgwNCwKKwkweDQwLDB4NzQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDU1LDB4MzMsMHgwNCwKKwkweDQwLDB4NzQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4MzMsMHgwNCwKKwkweDQwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MzMsMHgwMywKKwkweDQwLDB4NzcsMHg3NywweDc3LDB4NzcsMHg3NywweDc0LDB4MzMsMHgwMywKKwkweDQwLDB4NDMsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MzAsMHgzNCwKKwkweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHg0NCwKKwkweDQ0LDB4NDQsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MzQsMHg0NCwKK307CisKK3N0YXRpYyBQaEltYWdlX3QgdGJfc2F2ZV9zZXNzaW9uX3BoaSA9IHsKKwlQZ19JTUFHRV9QQUxFVFRFX05JQkJMRSwKKwkwLAorCTksCisJeyAxOCwxOCB9LAorCTQyMDM5Mzk5MiwKKwk4LAorCU5VTEwsCisJUGdHcmV5KDB4YzApLAorCTAsCisJUGhfVVNFX1RSQU5TUEFSRU5DWSwKKwkwLAorCTAsCisJTlVMTCwKKwkwLAorCU5VTEwsCisJdGJfcGFsZXR0ZSwKKwl0Yl9zYXZlX3Nlc3Npb25fZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfc2hlbGxfZGF0YVtdID0geworCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDQwLDB4MDAsMHg0MCwweDAwLDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDAzLDB4NDMsMHgzMywweDQzLDB4MDQsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDQ3LDB4NDMsMHgwMywweDQ3LDB4NDAsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDM0LDB4NzQsMHgzNCwweDc0LDB4MzAsMHg0NCwweDQ0LAorCTB4NDQsMHgwMywweDQ0LDB4NDQsMHgwNCwweDQ0LDB4NDMsMHgwNCwweDQ0LAorCTB4NDAsMHgzNCwweDAzLDB4NzQsMHgzNCwweDczLDB4MDQsMHgzMCwweDQ0LAorCTB4NDAsMHg0NCwweDQzLDB4NzQsMHgwNCwweDczLDB4NDQsMHg0MCwweDQ0LAorCTB4NDAsMHg0NywweDQwLDB4MzcsMHgzNywweDMwLDB4NDcsMHg0MCwweDM0LAorCTB4NDAsMHgzNCwweDc0LDB4MDQsMHgwNCwweDA0LDB4NzQsMHgzMCwweDM0LAorCTB4NDQsMHgwMywweDc0LDB4MzQsMHg0NCwweDM0LDB4NzMsMHgwMywweDQ0LAorCTB4NDQsMHg0MCwweDM0LDB4NDQsMHg3NCwweDQ0LDB4MzAsMHgzNCwweDQ0LAorCTB4NDQsMHg0NCwweDA0LDB4NDcsMHg3NywweDQ0LDB4MDMsMHg0NCwweDQ0LAorCTB4NDQsMHg0NCwweDAwLDB4MzQsMHg0NCwweDMwLDB4MDMsMHg0NCwweDQ0LAorCTB4NDQsMHg0MCwweDM0LDB4NDQsMHg0NCwweDQ0LDB4MzAsMHgzNCwweDQ0LAorCTB4NDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNCwweDQ0LAorCTB4NDQsMHg0NCwweDQzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzNCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9zaGVsbF9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfc2hlbGxfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfc3BsaXRfZGF0YVtdID0geworCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorCTB4NDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzAsMHg0NCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NzQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ3LDB4NzQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDc3LDB4NzcsMHg3NywweDc3LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDMzLDB4MzMsMHgzMywweDMzLDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NzQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ3LDB4NzQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDc3LDB4NzcsMHg3NywweDc3LDB4NzAsMHgzNCwweDQ0LAorCTB4NDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNCwweDQ0LAorCTB4NDQsMHg0NCwweDQzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzNCwweDQ0LAorCTB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LAorfTsKKworc3RhdGljIFBoSW1hZ2VfdCB0Yl9zcGxpdF9waGkgPSB7CisJUGdfSU1BR0VfUEFMRVRURV9OSUJCTEUsCisJMCwKKwk5LAorCXsgMTgsMTggfSwKKwk0MjAzOTM5OTIsCisJOCwKKwlOVUxMLAorCVBnR3JleSgweGMwKSwKKwkwLAorCVBoX1VTRV9UUkFOU1BBUkVOQ1ksCisJMCwKKwkwLAorCU5VTEwsCisJMCwKKwlOVUxMLAorCXRiX3BhbGV0dGUsCisJdGJfc3BsaXRfZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfdW5kb19kYXRhW10gPSB7CisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDAwLDB4NDQsMHgwMCwweDAwLDB4MDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDA3LDB4MDAsMHg3NywweDc3LDB4NzAsMHgwNCwweDQ0LDB4NDQsCisJMHg0NCwweDA3LDB4NzcsMHg3NywweDc3LDB4NzcsMHg3MCwweDQ0LDB4NDQsCisJMHg0NCwweDA3LDB4NzcsMHg3MCwweDAwLDB4MDcsMHg3MCwweDM0LDB4NDQsCisJMHg0NCwweDA3LDB4NzcsMHg3MCwweDMzLDB4MzAsMHg3NywweDA0LDB4NDQsCisJMHg0NCwweDA3LDB4NzcsMHg3NywweDA0LDB4NDAsMHg3NywweDAzLDB4NDQsCisJMHg0NCwweDAwLDB4MDAsMHgwMCwweDAzLDB4NDAsMHg3NywweDAzLDB4NDQsCisJMHg0NCwweDQzLDB4MDMsMHgzMywweDMzLDB4NDAsMHg3NywweDAzLDB4NDQsCisJMHg0NCwweDQwLDB4NzAsMHg0NCwweDQ0LDB4NDAsMHg3NywweDAzLDB4NDQsCisJMHg0NCwweDQwLDB4NzcsMHgwMCwweDAwLDB4MDcsMHg3MCwweDMzLDB4NDQsCisJMHg0NCwweDQ0LDB4MDcsMHg3NywweDc3LDB4NzcsMHg3MCwweDM0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDAsMHg3NywweDc3LDB4NzAsMHgwMywweDM0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHgwMCwweDAwLDB4MDMsMHgzMywweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0MywweDMzLDB4MzMsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCisJMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsCit9OworCitzdGF0aWMgUGhJbWFnZV90IHRiX3VuZG9fcGhpID0geworCVBnX0lNQUdFX1BBTEVUVEVfTklCQkxFLAorCTAsCisJOSwKKwl7IDE4LDE4IH0sCisJNDIwMzkzOTkyLAorCTgsCisJTlVMTCwKKwlQZ0dyZXkoMHhjMCksCisJMCwKKwlQaF9VU0VfVFJBTlNQQVJFTkNZLAorCTAsCisJMCwKKwlOVUxMLAorCTAsCisJTlVMTCwKKwl0Yl9wYWxldHRlLAorCXRiX3VuZG9fZGF0YQorfTsKKworc3RhdGljIHVpbnQ4X3QgdGJfdnNwbGl0X2RhdGFbXSA9IHsKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKKwkweDQ3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwKKwkweDQ3LDB4MDQsMHg0NCwweDQ3LDB4MDMsMHg0NCwweDQ0LDB4NzAsMHg0NCwKKwkweDQ3LDB4MDQsMHg0NywweDQ3LDB4MDMsMHg0NCwweDc0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDQsMHg3NywweDQ3LDB4MDMsMHg0NywweDc0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDQsMHg0NCwweDQ3LDB4MDMsMHg0NCwweDQ0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDQsMHg0NCwweDQ3LDB4MDMsMHg0NCwweDQ0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDQsMHg0NCwweDQ3LDB4MDMsMHg0NCwweDQ0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDQsMHg0NCwweDQ3LDB4MDMsMHg0NCwweDQ0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDQsMHg0NCwweDQ3LDB4MDMsMHg0NCwweDQ0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDQsMHg0NCwweDQ3LDB4MDMsMHg0NCwweDQ0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDQsMHg0NCwweDQ3LDB4MDMsMHg0NCwweDQ0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDQsMHg0NCwweDQ3LDB4MDMsMHg0NCwweDQ0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDQsMHg0NCwweDQ3LDB4MDMsMHg0NCwweDQ0LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDcsMHg3NywweDc3LDB4MDcsMHg3NywweDc3LDB4NzAsMHgzNCwKKwkweDQ3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNCwKKwkweDQ0LDB4NDQsMHgzMywweDMzLDB4MzMsMHgzMywweDMzLDB4MzMsMHgzNCwKKwkweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwweDQ0LDB4NDQsMHg0NCwKK307CisKK3N0YXRpYyBQaEltYWdlX3QgdGJfdnNwbGl0X3BoaSA9IHsKKwlQZ19JTUFHRV9QQUxFVFRFX05JQkJMRSwKKwkwLAorCTksCisJeyAxOCwxOCB9LAorCTQyMDM5Mzk5MiwKKwk4LAorCU5VTEwsCisJUGdHcmV5KDB4YzApLAorCTAsCisJUGhfVVNFX1RSQU5TUEFSRU5DWSwKKwkwLAorCTAsCisJTlVMTCwKKwkwLAorCU5VTEwsCisJdGJfcGFsZXR0ZSwKKwl0Yl92c3BsaXRfZGF0YQorfTsKZGlmZiAtLWdpdCBhL3NyYy90b29sY2hlY2sgYi9zcmMvdG9vbGNoZWNrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwNTExOGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdG9vbGNoZWNrCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorIyB0b29sY2hlY2sgLS0gY2hlY2sgZm9yIHRvb2xzIHRoYXQgaGF2ZSBzZXZlcmUgYnVncy4gR29vZCB0aGF0IGFsbCB0aGUgYnVnZ3kKKyMJICAgICAgIHRvb2xzIGlkZW50aWZ5IGJ5IHZlcnNpb24gbnVtYmVycy4gVGhpcyBpcyB0aGUgc3Bpcml0IG9mIEdOVSA6LSkKKyMKKyMgMjQuNy45NSBqdy4KKworcmV0dmFsPTAKK3JlcGx5PSJgc2ggLXZlcnNpb24gLWMgZXhpdCAyPiYxIDwgL2Rldi9udWxsYCIKK2Nhc2UgIiRyZXBseSIgaW4KKwlHTlUqMS4xNC4zKikKKwkJZWNobyAiLSBzaCBpcwknJHJlcGx5JyI7CisJCWVjaG8gIiAgQ0FVVElPTjogVGhpcyBzaGVsbCBoYXMgYSBidWdneSAndHJhcCcgY29tbWFuZC4iOworCQllY2hvICIgICAgICAgICAgIFRoZSBjb25maWd1cmUgc2NyaXB0IG1heSBmYWlsIHNpbGVudGx5LiI7CisJCXJldHZhbD0xOworCQk7OworCUdOVSopCisJCWVjaG8gIi0gc2ggaXMJJyRyZXBseScgLSBwcm9iYWJseSBPSy4iOworCQk7OworCSopCTs7Citlc2FjCisKK3JlcGx5PSJgc2VkIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsYCIKK2Nhc2UgIiRyZXBseSIgaW4KKwlHTlVcIHNlZFwgdmVyc2lvblwgMi4wWzM0XSkKKwkJZWNobyAiLSBzZWQgaXMJJyRyZXBseSciOworCQllY2hvICIgIENBVVRJT046IFRoaXMgc2VkIGNhbm5vdCBjb25maWd1cmUgc2NyZWVuIHByb3Blcmx5LiIKKwkJcmV0dmFsPTE7CisJCTs7CisJR05VXCBzZWRcIHZlcnNpb25cIDIuMDV8R05VXCBzZWRcIHZlcnNpb25cIDIuMDNcIGtldmluKQorCQllY2hvICItIHNlZCBpcwknJHJlcGx5JyAtIGdvb2QuIjsKKwkJOzsKKwlHTlUqKQllY2hvICItIHNlZCBpcwknJHJlcGx5Jy4iOworCQk7OworCSopCTs7Citlc2FjCitleGl0ICRyZXR2YWwKZGlmZiAtLWdpdCBhL3NyYy90b29scy5ibXAgYi9zcmMvdG9vbHMuYm1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNTIwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdG9vbHMuYm1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90b29sczE2LmJtcCBiL3NyYy90b29sczE2LmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGZiYzUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rvb2xzMTYuYm1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90eXBlbWFwIGIvc3JjL3R5cGVtYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwNDkyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90eXBlbWFwCkBAIC0wLDAgKzEsMTQgQEAKK1RZUEVNQVAKK1ZJV0lOCVRfVklPQkpOT01VTkdFCitWSUJVRglUX1ZJT0JKTk9NVU5HRQorCitJTlBVVAorVF9WSU9CSk5PTVVOR0UKKwlpZiAoc3ZfaXNhKCRhcmcsIFwiJHtudHlwZX1cIikpIHsKKwkgICAgSVYgdG1wID0gU3ZJVigoU1YqKVN2UlYoJGFyZykpOworCSAgICAkdmFyID0gKCR0eXBlKSB0bXA7CisJICAgIGlmICghdG1wKQorCQljcm9hayhcIiRudHlwZSBubyBsb25nZXIgZXhpc3RzXCIpOworCX0KKwllbHNlCisJICAgIGNyb2FrKFwiJHZhciBpcyBub3Qgb2YgdHlwZSAke250eXBlfVwiKQpkaWZmIC0tZ2l0IGEvc3JjL3VpLmMgYi9zcmMvdWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmJmODVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3VpLmMKQEAgLTAsMCArMSwzMDYwIEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiB1aS5jOiBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIHVzZXIgaW50ZXJmYWNlLgorICogMS4gS2V5Ym9hcmQgaW5wdXQgc3R1ZmYsIGFuZCBhIGJpdCBvZiB3aW5kb3dpbmcgc3R1ZmYuICBUaGVzZSBhcmUgY2FsbGVkCisgKiAgICBiZWZvcmUgdGhlIG1hY2hpbmUgc3BlY2lmaWMgc3R1ZmYgKG1jaF8qKSBzbyB0aGF0IHdlIGNhbiBjYWxsIHRoZSBHVUkKKyAqICAgIHN0dWZmIGluc3RlYWQgaWYgdGhlIEdVSSBpcyBydW5uaW5nLgorICogMi4gQ2xpcGJvYXJkIHN0dWZmLgorICogMy4gSW5wdXQgYnVmZmVyIHN0dWZmLgorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworICAgIHZvaWQKK3VpX3dyaXRlKHMsIGxlbikKKyAgICBjaGFyX3UgICpzOworICAgIGludAkgICAgbGVuOworeworI2lmZGVmIEZFQVRfR1VJCisgICAgaWYgKGd1aS5pbl91c2UgJiYgIWd1aS5keWluZyAmJiAhZ3VpLnN0YXJ0aW5nKQorICAgIHsKKwlndWlfd3JpdGUocywgbGVuKTsKKwlpZiAocF93ZCkKKwkgICAgZ3VpX3dhaXRfZm9yX2NoYXJzKHBfd2QpOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKyNpZm5kZWYgTk9fQ09OU09MRQorICAgIC8qIERvbid0IG91dHB1dCBhbnl0aGluZyBpbiBzaWxlbnQgbW9kZSAoImV4IC1zIikgdW5sZXNzICd2ZXJib3NlJyBzZXQgKi8KKyAgICBpZiAoIShzaWxlbnRfbW9kZSAmJiBwX3ZlcmJvc2UgPT0gMCkpCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwljaGFyX3UJKnRvZnJlZSA9IE5VTEw7CisKKwlpZiAob3V0cHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJeworCSAgICAvKiBDb252ZXJ0IGNoYXJhY3RlcnMgZnJvbSAnZW5jb2RpbmcnIHRvICd0ZXJtZW5jb2RpbmcnLiAqLworCSAgICB0b2ZyZWUgPSBzdHJpbmdfY29udmVydCgmb3V0cHV0X2NvbnYsIHMsICZsZW4pOworCSAgICBpZiAodG9mcmVlICE9IE5VTEwpCisJCXMgPSB0b2ZyZWU7CisJfQorI2VuZGlmCisKKwltY2hfd3JpdGUocywgbGVuKTsKKworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAob3V0cHV0X2NvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCisJICAgIHZpbV9mcmVlKHRvZnJlZSk7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKK30KKworI2lmIChkZWZpbmVkKEZFQVRfR1VJKSAmJiAoZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykpKSBcCisJfHwgZGVmaW5lZChNQUNPU19YX1VOSVgpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogV2hlbiBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbSwgdGhlcmUgbWF5IGJlIHNvbWUgdHlwZWQgY2hhcmFjdGVycyB0aGF0CisgKiBhcmUgbm90IGNvbnN1bWVkIGJ5IGl0LiAgR2l2ZSB0aGVtIGJhY2sgdG8gdWlfaW5jaGFyKCkgYW5kIHRoZXkgYXJlIHN0b3JlZAorICogaGVyZSBmb3IgdGhlIG5leHQgY2FsbC4KKyAqLworc3RhdGljIGNoYXJfdSAqdGFfc3RyID0gTlVMTDsKK3N0YXRpYyBpbnQgdGFfb2ZmOwkvKiBvZmZzZXQgZm9yIG5leHQgY2hhciB0byB1c2Ugd2hlbiB0YV9zdHIgIT0gTlVMTCAqLworc3RhdGljIGludCB0YV9sZW47CS8qIGxlbmd0aCBvZiB0YV9zdHIgd2hlbiBpdCdzIG5vdCBOVUxMKi8KKworICAgIHZvaWQKK3VpX2luY2hhcl91bmRvKHMsIGxlbikKKyAgICBjaGFyX3UJKnM7CisgICAgaW50CQlsZW47Cit7CisgICAgY2hhcl91ICAqbmV3OworICAgIGludAkgICAgbmV3bGVuOworCisgICAgbmV3bGVuID0gbGVuOworICAgIGlmICh0YV9zdHIgIT0gTlVMTCkKKwluZXdsZW4gKz0gdGFfbGVuIC0gdGFfb2ZmOworICAgIG5ldyA9IGFsbG9jKG5ld2xlbik7CisgICAgaWYgKG5ldyAhPSBOVUxMKQorICAgIHsKKwlpZiAodGFfc3RyICE9IE5VTEwpCisJeworCSAgICBtY2hfbWVtbW92ZShuZXcsIHRhX3N0ciArIHRhX29mZiwgKHNpemVfdCkodGFfbGVuIC0gdGFfb2ZmKSk7CisJICAgIG1jaF9tZW1tb3ZlKG5ldyArIHRhX2xlbiAtIHRhX29mZiwgcywgKHNpemVfdClsZW4pOworCSAgICB2aW1fZnJlZSh0YV9zdHIpOworCX0KKwllbHNlCisJICAgIG1jaF9tZW1tb3ZlKG5ldywgcywgKHNpemVfdClsZW4pOworCXRhX3N0ciA9IG5ldzsKKwl0YV9sZW4gPSBuZXdsZW47CisJdGFfb2ZmID0gMDsKKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqIHVpX2luY2hhcigpOiBsb3cgbGV2ZWwgaW5wdXQgZnVuY2lvbi4KKyAqIEdldCBjaGFyYWN0ZXJzIGZyb20gdGhlIGtleWJvYXJkLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBhdmFpbGFibGUuCisgKiBJZiAid3RpbWUiID09IDAgZG8gbm90IHdhaXQgZm9yIGNoYXJhY3RlcnMuCisgKiBJZiAid3RpbWUiID09IC0xIHdhaXQgZm9yZXZlciBmb3IgY2hhcmFjdGVycy4KKyAqIElmICJ3dGltZSIgPiAwIHdhaXQgInd0aW1lIiBtaWxsaXNlY29uZHMgZm9yIGEgY2hhcmFjdGVyLgorICoKKyAqICJ0Yl9jaGFuZ2VfY250IiBpcyB0aGUgdmFsdWUgb2YgdHlwZWJ1Zi50Yl9jaGFuZ2VfY250IGlmICJidWYiIHBvaW50cyBpbnRvCisgKiBpdC4gIFdoZW4gdHlwZWJ1Zi50Yl9jaGFuZ2VfY250IGNoYW5nZXMgKGUuZy4sIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkCisgKiBmcm9tIGEgcmVtb3RlIGNsaWVudCkgImJ1ZiIgY2FuIG5vIGxvbmdlciBiZSB1c2VkLiAgInRiX2NoYW5nZV9jbnQiIGlzIE5VTEwKKyAqIG90aGVyd2lzZS4KKyAqLworICAgIGludAordWlfaW5jaGFyKGJ1ZiwgbWF4bGVuLCB3dGltZSwgdGJfY2hhbmdlX2NudCkKKyAgICBjaGFyX3UJKmJ1ZjsKKyAgICBpbnQJCW1heGxlbjsKKyAgICBsb25nCXd0aW1lOwkgICAgLyogZG9uJ3QgdXNlICJ0aW1lIiwgTUlQUyBjYW5ub3QgaGFuZGxlIGl0ICovCisgICAgaW50CQl0Yl9jaGFuZ2VfY250OworeworICAgIGludAkJcmV0dmFsID0gMDsKKworI2lmIGRlZmluZWQoRkVBVF9HVUkpICYmIChkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoVk1TKSkKKyAgICAvKgorICAgICAqIFVzZSB0aGUgdHlwZWFoZWFkIGlmIHRoZXJlIGlzIGFueS4KKyAgICAgKi8KKyAgICBpZiAodGFfc3RyICE9IE5VTEwpCisgICAgeworCWlmIChtYXhsZW4gPj0gdGFfbGVuIC0gdGFfb2ZmKQorCXsKKwkgICAgbWNoX21lbW1vdmUoYnVmLCB0YV9zdHIgKyB0YV9vZmYsIChzaXplX3QpdGFfbGVuKTsKKwkgICAgdmltX2ZyZWUodGFfc3RyKTsKKwkgICAgdGFfc3RyID0gTlVMTDsKKwkgICAgcmV0dXJuIHRhX2xlbjsKKwl9CisJbWNoX21lbW1vdmUoYnVmLCB0YV9zdHIgKyB0YV9vZmYsIChzaXplX3QpbWF4bGVuKTsKKwl0YV9vZmYgKz0gbWF4bGVuOworCXJldHVybiBtYXhsZW47CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBOT19DT05TT0xFX0lOUFVUCisgICAgLyogRG9uJ3Qgd2FpdCBmb3IgY2hhcmFjdGVyIGlucHV0IHdoZW4gdGhlIHdpbmRvdyBoYXNuJ3QgYmVlbiBvcGVuZWQgeWV0LgorICAgICAqIERvIHRyeSByZWFkaW5nLCB0aGlzIHdvcmtzIHdoZW4gcmVkaXJlY3Rpbmcgc3RkaW4gZnJvbSBhIGZpbGUuCisgICAgICogTXVzdCByZXR1cm4gc29tZXRoaW5nLCBvdGhlcndpc2Ugd2UnbGwgbG9vcCBmb3JldmVyLiAgSWYgd2UgcnVuIGludG8KKyAgICAgKiB0aGlzIHZlcnkgb2Z0ZW4gd2UgcHJvYmFibHkgZ290IHN0dWNrLCBleGl0IFZpbS4gKi8KKyAgICBpZiAobm9fY29uc29sZV9pbnB1dCgpKQorICAgIHsKKwlzdGF0aWMgaW50IGNvdW50ID0gMDsKKworIyBpZm5kZWYgTk9fQ09OU09MRQorCXJldHZhbCA9IG1jaF9pbmNoYXIoYnVmLCBtYXhsZW4sIDEwTCwgdGJfY2hhbmdlX2NudCk7CisJaWYgKHJldHZhbCA+IDAgfHwgdHlwZWJ1Zl9jaGFuZ2VkKHRiX2NoYW5nZV9jbnQpKQorCSAgICByZXR1cm4gcmV0dmFsOworIyBlbmRpZgorCWlmICh3dGltZSA9PSAtMSAmJiArK2NvdW50ID09IDEwMDApCisJICAgIHJlYWRfZXJyb3JfZXhpdCgpOworCWJ1ZlswXSA9IENBUjsKKwlyZXR1cm4gMTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIFdoZW4gZG9pbmcgYSBibG9ja2luZyB3YWl0IHRoZXJlIGlzIG5vIG5lZWQgZm9yIENUUkwtQyB0byBpbnRlcnJ1cHQKKyAgICAgKiBzb21ldGhpbmcsIGRvbid0IGxldCBpdCBzZXQgZ290X2ludCB3aGVuIGl0IHdhcyBtYXBwZWQuICovCisgICAgaWYgKG1hcHBlZF9jdHJsX2MgJiYgKHd0aW1lID09IC0xIHx8IHd0aW1lID4gMTAwTCkpCisJY3RybF9jX2ludGVycnVwdHMgPSBGQUxTRTsKKworI2lmZGVmIEZFQVRfR1VJCisgICAgaWYgKGd1aS5pbl91c2UpCisgICAgeworCWlmIChndWlfd2FpdF9mb3JfY2hhcnMod3RpbWUpICYmICF0eXBlYnVmX2NoYW5nZWQodGJfY2hhbmdlX2NudCkpCisJICAgIHJldHZhbCA9IHJlYWRfZnJvbV9pbnB1dF9idWYoYnVmLCAobG9uZyltYXhsZW4pOworICAgIH0KKyNlbmRpZgorI2lmbmRlZiBOT19DT05TT0xFCisjIGlmZGVmIEZFQVRfR1VJCisgICAgZWxzZQorIyBlbmRpZgorCXJldHZhbCA9IG1jaF9pbmNoYXIoYnVmLCBtYXhsZW4sIHd0aW1lLCB0Yl9jaGFuZ2VfY250KTsKKyNlbmRpZgorCisgICAgY3RybF9jX2ludGVycnVwdHMgPSBUUlVFOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIHJldHVybiBub24temVybyBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUKKyAqLworICAgIGludAordWlfY2hhcl9hdmFpbCgpCit7CisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSkKKyAgICB7CisJZ3VpX21jaF91cGRhdGUoKTsKKwlyZXR1cm4gaW5wdXRfYXZhaWxhYmxlKCk7CisgICAgfQorI2VuZGlmCisjaWZuZGVmIE5PX0NPTlNPTEUKKyMgaWZkZWYgTk9fQ09OU09MRV9JTlBVVAorICAgIGlmIChub19jb25zb2xlX2lucHV0KCkpCisJcmV0dXJuIDA7CisjIGVuZGlmCisgICAgcmV0dXJuIG1jaF9jaGFyX2F2YWlsKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qCisgKiBEZWxheSBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMuCUlmIGlnbm9yZWlucHV0IGlzIEZBTFNFIHRoZW4gd2UKKyAqIGNhbmNlbCB0aGUgZGVsYXkgaWYgYSBrZXkgaXMgaGl0LgorICovCisgICAgdm9pZAordWlfZGVsYXkobXNlYywgaWdub3JlaW5wdXQpCisgICAgbG9uZwltc2VjOworICAgIGludAkJaWdub3JlaW5wdXQ7Cit7CisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSAmJiAhaWdub3JlaW5wdXQpCisJZ3VpX3dhaXRfZm9yX2NoYXJzKG1zZWMpOworICAgIGVsc2UKKyNlbmRpZgorCW1jaF9kZWxheShtc2VjLCBpZ25vcmVpbnB1dCk7Cit9CisKKy8qCisgKiBJZiB0aGUgbWFjaGluZSBoYXMgam9iIGNvbnRyb2wsIHVzZSBpdCB0byBzdXNwZW5kIHRoZSBwcm9ncmFtLAorICogb3RoZXJ3aXNlIGZha2UgaXQgYnkgc3RhcnRpbmcgYSBuZXcgc2hlbGwuCisgKiBXaGVuIHJ1bm5pbmcgdGhlIEdVSSBpY29uaWZ5IHRoZSB3aW5kb3cuCisgKi8KKyAgICB2b2lkCit1aV9zdXNwZW5kKCkKK3sKKyNpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlKQorICAgIHsKKwlndWlfbWNoX2ljb25pZnkoKTsKKwlyZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgbWNoX3N1c3BlbmQoKTsKK30KKworI2lmICFkZWZpbmVkKFVOSVgpIHx8ICFkZWZpbmVkKFNJR1RTVFApIHx8IGRlZmluZWQoUFJPVE8pIHx8IGRlZmluZWQoX19CRU9TX18pCisvKgorICogV2hlbiB0aGUgT1MgY2FuJ3QgcmVhbGx5IHN1c3BlbmQsIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBzdGFydCBhIHNoZWxsLgorICogVGhpcyBpcyBuZXZlciBjYWxsZWQgaW4gdGhlIEdVSS4KKyAqLworICAgIHZvaWQKK3N1c3BlbmRfc2hlbGwoKQoreworICAgIGlmICgqcF9zaCA9PSBOVUwpCisJRU1TRyhfKGVfc2hlbGxlbXB0eSkpOworICAgIGVsc2UKKyAgICB7CisJTVNHX1BVVFMoXygibmV3IHNoZWxsIHN0YXJ0ZWRcbiIpKTsKKwlkb19zaGVsbChOVUxMLCAwKTsKKyAgICB9Cit9CisjZW5kaWYKKworLyoKKyAqIFRyeSB0byBnZXQgdGhlIGN1cnJlbnQgVmltIHNoZWxsIHNpemUuICBQdXQgdGhlIHJlc3VsdCBpbiBSb3dzIGFuZCBDb2x1bW5zLgorICogVXNlIHRoZSBuZXcgc2l6ZXMgYXMgZGVmYXVsdHMgZm9yICdjb2x1bW5zJyBhbmQgJ2xpbmVzJy4KKyAqIFJldHVybiBPSyB3aGVuIHNpemUgY291bGQgYmUgZGV0ZXJtaW5lZCwgRkFJTCBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK3VpX2dldF9zaGVsbHNpemUoKQoreworICAgIGludAkgICAgcmV0dmFsOworCisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSkKKwlyZXR2YWwgPSBndWlfZ2V0X3NoZWxsc2l6ZSgpOworICAgIGVsc2UKKyNlbmRpZgorCXJldHZhbCA9IG1jaF9nZXRfc2hlbGxzaXplKCk7CisKKyAgICBjaGVja19zaGVsbHNpemUoKTsKKworICAgIC8qIGFkanVzdCB0aGUgZGVmYXVsdCBmb3IgJ2xpbmVzJyBhbmQgJ2NvbHVtbnMnICovCisgICAgaWYgKHJldHZhbCA9PSBPSykKKyAgICB7CisJc2V0X251bWJlcl9kZWZhdWx0KCJsaW5lcyIsIFJvd3MpOworCXNldF9udW1iZXJfZGVmYXVsdCgiY29sdW1ucyIsIENvbHVtbnMpOworICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogU2V0IHRoZSBzaXplIG9mIHRoZSBWaW0gc2hlbGwgYWNjb3JkaW5nIHRvIFJvd3MgYW5kIENvbHVtbnMsIGlmIHBvc3NpYmxlLgorICogVGhlIGd1aV9zZXRfc2hlbGxzaXplKCkgb3IgbWNoX3NldF9zaGVsbHNpemUoKSBmdW5jdGlvbiB3aWxsIHRyeSB0byBzZXQgdGhlCisgKiBuZXcgc2l6ZS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBpdCB3aWxsIGFkanVzdCBSb3dzIGFuZCBDb2x1bW5zLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCit1aV9zZXRfc2hlbGxzaXplKG11c3RzZXQpCisgICAgaW50CQltdXN0c2V0OwkvKiBzZXQgYnkgdGhlIHVzZXIgKi8KK3sKKyNpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlKQorCWd1aV9zZXRfc2hlbGxzaXplKG11c3RzZXQsCisjIGlmZGVmIFdJTjMyNjQKKwkJVFJVRQorIyBlbHNlCisJCUZBTFNFCisjIGVuZGlmCisJCSk7CisgICAgZWxzZQorI2VuZGlmCisJbWNoX3NldF9zaGVsbHNpemUoKTsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIFJvd3MgYW5kL29yIENvbHVtbnMgY2hhbmdlZC4gIEFkanVzdCBzY3JvbGwgcmVnaW9uIGFuZCBtb3VzZQorICogcmVnaW9uLgorICovCisgICAgdm9pZAordWlfbmV3X3NoZWxsc2l6ZSgpCit7CisgICAgaWYgKGZ1bGxfc2NyZWVuICYmICFleGl0aW5nKQorICAgIHsKKyNpZmRlZiBGRUFUX0dVSQorCWlmIChndWkuaW5fdXNlKQorCSAgICBndWlfbmV3X3NoZWxsc2l6ZSgpOworCWVsc2UKKyNlbmRpZgorCSAgICBtY2hfbmV3X3NoZWxsc2l6ZSgpOworICAgIH0KK30KKworICAgIHZvaWQKK3VpX2JyZWFrY2hlY2soKQoreworI2lmZGVmIEZFQVRfR1VJCisgICAgaWYgKGd1aS5pbl91c2UpCisJZ3VpX21jaF91cGRhdGUoKTsKKyAgICBlbHNlCisjZW5kaWYKKwltY2hfYnJlYWtjaGVjaygpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9ucyBmb3IgY29weWluZyBhbmQgcGFzdGluZyB0ZXh0IGJldHdlZW4gYXBwbGljYXRpb25zLgorICogVGhpcyBpcyBhbHdheXMgaW5jbHVkZWQgaW4gYSBHVUkgdmVyc2lvbiwgYnV0IG1heSBhbHNvIGJlIGluY2x1ZGVkIHdoZW4gdGhlCisgKiBjbGlwYm9hcmQgYW5kIG1vdXNlIGlzIGF2YWlsYWJsZSB0byBhIHRlcm1pbmFsIHZlcnNpb24gc3VjaCBhcyB4dGVybS4KKyAqIE5vdGU6IHRoZXJlIGFyZSBzb21lIG1vcmUgZnVuY3Rpb25zIGluIG9wcy5jIHRoYXQgaGFuZGxlIHNlbGVjdGlvbiBzdHVmZi4KKyAqCisgKiBBbHNvIG5vdGUgdGhhdCB0aGUgbWFqb3JpdHkgb2YgZnVuY3Rpb25zIGhlcmUgZGVhbCB3aXRoIHRoZSBYICdwcmltYXJ5JworICogKHZpc2libGUgLSBmb3IgVmlzdWFsIG1vZGUgdXNlKSBzZWxlY3Rpb24sIGFuZCBvbmx5IHRoYXQuIFRoZXJlIGFyZSBubworICogdmVyc2lvbnMgb2YgdGhlc2UgZm9yIHRoZSAnY2xpcGJvYXJkJyBzZWxlY3Rpb24sIGFzIFZpc3VhbCBtb2RlIGhhcyBubyB1c2UKKyAqIGZvciB0aGVtLgorICovCisKKyNpZiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogU2VsZWN0aW9uIHN0dWZmIHVzaW5nIFZpc3VhbCBtb2RlLCBmb3IgY3V0dGluZyBhbmQgcGFzdGluZyB0ZXh0IHRvIG90aGVyCisgKiB3aW5kb3dzLgorICovCisKKy8qCisgKiBDYWxsIHRoaXMgdG8gaW5pdGlhbGlzZSB0aGUgY2xpcGJvYXJkLiAgUGFzcyBpdCBGQUxTRSBpZiB0aGUgY2xpcGJvYXJkIGNvZGUKKyAqIGlzIGluY2x1ZGVkLCBidXQgdGhlIGNsaXBib2FyZCBjYW4gbm90IGJlIHVzZWQsIG9yIFRSVUUgaWYgdGhlIGNsaXBib2FyZCBjYW4KKyAqIGJlIHVzZWQuICBFZyB1bml4IG1heSBjYWxsIHRoaXMgd2l0aCBGQUxTRSwgdGhlbiBjYWxsIGl0IGFnYWluIHdpdGggVFJVRSBpZgorICogdGhlIEdVSSBzdGFydHMuCisgKi8KKyAgICB2b2lkCitjbGlwX2luaXQoY2FuX3VzZSkKKyAgICBpbnQJICAgIGNhbl91c2U7Cit7CisgICAgVmltQ2xpcGJvYXJkICpjYjsKKworICAgIGNiID0gJmNsaXBfc3RhcjsKKyAgICBmb3IgKDs7KQorICAgIHsKKwljYi0+YXZhaWxhYmxlICA9IGNhbl91c2U7CisJY2ItPm93bmVkICAgICAgPSBGQUxTRTsKKwljYi0+c3RhcnQubG51bSA9IDA7CisJY2ItPnN0YXJ0LmNvbCAgPSAwOworCWNiLT5lbmQubG51bSAgID0gMDsKKwljYi0+ZW5kLmNvbCAgICA9IDA7CisJY2ItPnN0YXRlICAgICAgPSBTRUxFQ1RfQ0xFQVJFRDsKKworCWlmIChjYiA9PSAmY2xpcF9wbHVzKQorCSAgICBicmVhazsKKwljYiA9ICZjbGlwX3BsdXM7CisgICAgfQorfQorCisvKgorICogQ2hlY2sgd2hldGhlciB0aGUgVklzdWFsIGFyZWEgaGFzIGNoYW5nZWQsIGFuZCBpZiBzbyB0cnkgdG8gYmVjb21lIHRoZSBvd25lcgorICogb2YgdGhlIHNlbGVjdGlvbiwgYW5kIGZyZWUgYW55IG9sZCBjb252ZXJ0ZWQgc2VsZWN0aW9uIHdlIG1heSBzdGlsbCBoYXZlCisgKiBseWluZyBhcm91bmQuICBJZiB0aGUgVklzdWFsIG1vZGUgaGFzIGVuZGVkLCBtYWtlIGEgY29weSBvZiB3aGF0IHdhcworICogc2VsZWN0ZWQgc28gd2UgY2FuIHN0aWxsIGdpdmUgaXQgdG8gb3RoZXJzLglXaWxsIHByb2JhYmx5IGhhdmUgdG8gbWFrZSBzdXJlCisgKiB0aGlzIGlzIGNhbGxlZCB3aGVuZXZlciBWSXN1YWwgbW9kZSBpcyBlbmRlZC4KKyAqLworICAgIHZvaWQKK2NsaXBfdXBkYXRlX3NlbGVjdGlvbigpCit7CisgICAgcG9zX1QgICAgc3RhcnQsIGVuZDsKKworICAgIC8qIElmIHZpc3VhbCBtb2RlIGlzIG9ubHkgZHVlIHRvIGEgcmVkbyBjb21tYW5kICgiLiIpLCB0aGVuIGlnbm9yZSBpdCAqLworICAgIGlmICghcmVkb19WSXN1YWxfYnVzeSAmJiBWSXN1YWxfYWN0aXZlICYmIChTdGF0ZSAmIE5PUk1BTCkpCisgICAgeworCWlmIChsdChWSXN1YWwsIGN1cndpbi0+d19jdXJzb3IpKQorCXsKKwkgICAgc3RhcnQgPSBWSXN1YWw7CisJICAgIGVuZCA9IGN1cndpbi0+d19jdXJzb3I7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQllbmQuY29sICs9ICgqbWJfcHRyMmxlbl9jaGVjaykobWxfZ2V0X2N1cnNvcigpKSAtIDE7CisjZW5kaWYKKwl9CisJZWxzZQorCXsKKwkgICAgc3RhcnQgPSBjdXJ3aW4tPndfY3Vyc29yOworCSAgICBlbmQgPSBWSXN1YWw7CisJfQorCWlmICghZXF1YWxwb3MoY2xpcF9zdGFyLnN0YXJ0LCBzdGFydCkKKwkJfHwgIWVxdWFscG9zKGNsaXBfc3Rhci5lbmQsIGVuZCkKKwkJfHwgY2xpcF9zdGFyLnZtb2RlICE9IFZJc3VhbF9tb2RlKQorCXsKKwkgICAgY2xpcF9jbGVhcl9zZWxlY3Rpb24oKTsKKwkgICAgY2xpcF9zdGFyLnN0YXJ0ID0gc3RhcnQ7CisJICAgIGNsaXBfc3Rhci5lbmQgPSBlbmQ7CisJICAgIGNsaXBfc3Rhci52bW9kZSA9IFZJc3VhbF9tb2RlOworCSAgICBjbGlwX2ZyZWVfc2VsZWN0aW9uKCZjbGlwX3N0YXIpOworCSAgICBjbGlwX293bl9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7CisJICAgIGNsaXBfZ2VuX3NldF9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7CisJfQorICAgIH0KK30KKworICAgIHZvaWQKK2NsaXBfb3duX3NlbGVjdGlvbihjYmQpCisgICAgVmltQ2xpcGJvYXJkCSpjYmQ7Cit7CisgICAgLyoKKyAgICAgKiBBbHNvIHdhbnQgdG8gY2hlY2sgc29tZWhvdyB0aGF0IHdlIGFyZSByZWFkaW5nIGZyb20gdGhlIGtleWJvYXJkIHJhdGhlcgorICAgICAqIHRoYW4gYSBtYXBwaW5nIGV0Yy4KKyAgICAgKi8KKyAgICBpZiAoIWNiZC0+b3duZWQgJiYgY2JkLT5hdmFpbGFibGUpCisgICAgeworCWNiZC0+b3duZWQgPSAoY2xpcF9nZW5fb3duX3NlbGVjdGlvbihjYmQpID09IE9LKTsKKyNpZmRlZiBGRUFUX1gxMQorCWlmIChjYmQgPT0gJmNsaXBfc3RhcikKKwl7CisJICAgIC8qIE1heSBoYXZlIHRvIHNob3cgYSBkaWZmZXJlbnQga2luZCBvZiBoaWdobGlnaHRpbmcgZm9yIHRoZSBzZWxlY3RlZAorCSAgICAgKiBhcmVhLiAgVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmVkcmF3IGNvbW1hbmQgZm9yIHRoaXMsIGp1c3QgcmVkcmF3CisJICAgICAqIGFsbCB3aW5kb3dzIG9uIHRoZSBjdXJyZW50IGJ1ZmZlci4gKi8KKwkgICAgaWYgKGNiZC0+b3duZWQKKwkJICAgICYmIGdldF9yZWFsX3N0YXRlKCkgPT0gVklTVUFMCisJCSAgICAmJiBjbGlwX2lzYXV0b3NlbCgpCisJCSAgICAmJiBobF9hdHRyKEhMRl9WKSAhPSBobF9hdHRyKEhMRl9WTkMpKQorCQlyZWRyYXdfY3VyYnVmX2xhdGVyKElOVkVSVEVEX0FMTCk7CisJfQorI2VuZGlmCisgICAgfQorfQorCisgICAgdm9pZAorY2xpcF9sb3NlX3NlbGVjdGlvbihjYmQpCisgICAgVmltQ2xpcGJvYXJkCSpjYmQ7Cit7CisjaWZkZWYgRkVBVF9YMTEKKyAgICBpbnQJICAgIHdhc19vd25lZCA9IGNiZC0+b3duZWQ7CisjZW5kaWYKKyAgICBpbnQgICAgIHZpc3VhbF9zZWxlY3Rpb24gPSAoY2JkID09ICZjbGlwX3N0YXIpOworCisgICAgY2xpcF9mcmVlX3NlbGVjdGlvbihjYmQpOworICAgIGNiZC0+b3duZWQgPSBGQUxTRTsKKyAgICBpZiAodmlzdWFsX3NlbGVjdGlvbikKKwljbGlwX2NsZWFyX3NlbGVjdGlvbigpOworICAgIGNsaXBfZ2VuX2xvc2Vfc2VsZWN0aW9uKGNiZCk7CisjaWZkZWYgRkVBVF9YMTEKKyAgICBpZiAodmlzdWFsX3NlbGVjdGlvbikKKyAgICB7CisJLyogTWF5IGhhdmUgdG8gc2hvdyBhIGRpZmZlcmVudCBraW5kIG9mIGhpZ2hsaWdodGluZyBmb3IgdGhlIHNlbGVjdGVkCisJICogYXJlYS4gIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJlZHJhdyBjb21tYW5kIGZvciB0aGlzLCBqdXN0IHJlZHJhdyBhbGwKKwkgKiB3aW5kb3dzIG9uIHRoZSBjdXJyZW50IGJ1ZmZlci4gKi8KKwlpZiAod2FzX293bmVkCisJCSYmIGdldF9yZWFsX3N0YXRlKCkgPT0gVklTVUFMCisJCSYmIGNsaXBfaXNhdXRvc2VsKCkKKwkJJiYgaGxfYXR0cihITEZfVikgIT0gaGxfYXR0cihITEZfVk5DKSkKKwl7CisJICAgIHVwZGF0ZV9jdXJidWYoSU5WRVJURURfQUxMKTsKKwkgICAgc2V0Y3Vyc29yKCk7CisJICAgIGN1cnNvcl9vbigpOworCSAgICBvdXRfZmx1c2goKTsKKyMgaWZkZWYgRkVBVF9HVUkKKwkgICAgaWYgKGd1aS5pbl91c2UpCisJCWd1aV91cGRhdGVfY3Vyc29yKFRSVUUsIEZBTFNFKTsKKyMgZW5kaWYKKwl9CisgICAgfQorI2VuZGlmCit9CisKKyAgICB2b2lkCitjbGlwX2NvcHlfc2VsZWN0aW9uKCkKK3sKKyAgICBpZiAoVklzdWFsX2FjdGl2ZSAmJiAoU3RhdGUgJiBOT1JNQUwpICYmIGNsaXBfc3Rhci5hdmFpbGFibGUpCisgICAgeworCWlmIChjbGlwX2lzYXV0b3NlbCgpKQorCSAgICBjbGlwX3VwZGF0ZV9zZWxlY3Rpb24oKTsKKwljbGlwX2ZyZWVfc2VsZWN0aW9uKCZjbGlwX3N0YXIpOworCWNsaXBfb3duX3NlbGVjdGlvbigmY2xpcF9zdGFyKTsKKwlpZiAoY2xpcF9zdGFyLm93bmVkKQorCSAgICBjbGlwX2dldF9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7CisJY2xpcF9nZW5fc2V0X3NlbGVjdGlvbigmY2xpcF9zdGFyKTsKKyAgICB9Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBWaXN1YWwgbW9kZSBpcyBlbmRlZDogdXBkYXRlIHRoZSBzZWxlY3Rpb24uCisgKi8KKyAgICB2b2lkCitjbGlwX2F1dG9fc2VsZWN0KCkKK3sKKyAgICBpZiAoY2xpcF9pc2F1dG9zZWwoKSkKKwljbGlwX2NvcHlfc2VsZWN0aW9uKCk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIFZpc3VhbCBhcmVhIGlzIGRlc2lyZWQuCisgKi8KKyAgICBpbnQKK2NsaXBfaXNhdXRvc2VsKCkKK3sKKyAgICByZXR1cm4gKAorI2lmZGVmIEZFQVRfR1VJCisJICAgIGd1aS5pbl91c2UgPyAodmltX3N0cmNocihwX2dvLCBHT19BU0VMKSAhPSBOVUxMKSA6CisjZW5kaWYKKwkgICAgY2xpcF9hdXRvc2VsZWN0KTsKK30KKworCisvKgorICogU3R1ZmYgZm9yIGdlbmVyYWwgbW91c2Ugc2VsZWN0aW9uLCB3aXRob3V0IHVzaW5nIFZpc3VhbCBtb2RlLgorICovCisKK3N0YXRpYyBpbnQgY2xpcF9jb21wYXJlX3BvcyBfX0FSR1MoKGludCByb3cxLCBpbnQgY29sMSwgaW50IHJvdzIsIGludCBjb2wyKSk7CitzdGF0aWMgdm9pZCBjbGlwX2ludmVydF9hcmVhIF9fQVJHUygoaW50LCBpbnQsIGludCwgaW50LCBpbnQgaG93KSk7CitzdGF0aWMgdm9pZCBjbGlwX2ludmVydF9yZWN0YW5nbGUgX19BUkdTKChpbnQgcm93LCBpbnQgY29sLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBpbnZlcnQpKTsKK3N0YXRpYyB2b2lkIGNsaXBfZ2V0X3dvcmRfYm91bmRhcmllcyBfX0FSR1MoKFZpbUNsaXBib2FyZCAqLCBpbnQsIGludCkpOworc3RhdGljIGludCAgY2xpcF9nZXRfbGluZV9lbmQgX19BUkdTKChpbnQpKTsKK3N0YXRpYyB2b2lkIGNsaXBfdXBkYXRlX21vZGVsZXNzX3NlbGVjdGlvbiBfX0FSR1MoKFZpbUNsaXBib2FyZCAqLCBpbnQsIGludCwKKwkJCQkJCSAgICBpbnQsIGludCkpOworCisvKiBmbGFncyBmb3IgY2xpcF9pbnZlcnRfYXJlYSgpICovCisjZGVmaW5lIENMSVBfQ0xFQVIJMQorI2RlZmluZSBDTElQX1NFVAkyCisjZGVmaW5lIENMSVBfVE9HR0xFCTMKKworLyoKKyAqIFN0YXJ0LCBjb250aW51ZSBvciBlbmQgYSBtb2RlbGVzcyBzZWxlY3Rpb24uICBVc2VkIHdoZW4gZWRpdGluZyB0aGUKKyAqIGNvbW1hbmQtbGluZSBhbmQgaW4gdGhlIGNtZGxpbmUgd2luZG93LgorICovCisgICAgdm9pZAorY2xpcF9tb2RlbGVzcyhidXR0b24sIGlzX2NsaWNrLCBpc19kcmFnKQorICAgIGludAkJYnV0dG9uOworICAgIGludAkJaXNfY2xpY2s7CisgICAgaW50CQlpc19kcmFnOworeworICAgIGludAkJcmVwZWF0OworCisgICAgcmVwZWF0ID0gKChjbGlwX3N0YXIubW9kZSA9PSBTRUxFQ1RfTU9ERV9DSEFSCisJCXx8IGNsaXBfc3Rhci5tb2RlID09IFNFTEVDVF9NT0RFX0xJTkUpCisJCQkJCSAgICAgICYmIChtb2RfbWFzayAmIE1PRF9NQVNLXzJDTElDSykpCisJICAgIHx8IChjbGlwX3N0YXIubW9kZSA9PSBTRUxFQ1RfTU9ERV9XT1JECisJCQkJCSAgICAgJiYgKG1vZF9tYXNrICYgTU9EX01BU0tfM0NMSUNLKSk7CisgICAgaWYgKGlzX2NsaWNrICYmIGJ1dHRvbiA9PSBNT1VTRV9SSUdIVCkKKyAgICB7CisJLyogUmlnaHQgbW91c2UgYnV0dG9uOiBJZiB0aGVyZSB3YXMgbm8gc2VsZWN0aW9uLCBzdGFydCBvbmUuCisJICogT3RoZXJ3aXNlIGV4dGVuZCB0aGUgZXhpc3Rpbmcgc2VsZWN0aW9uLiAqLworCWlmIChjbGlwX3N0YXIuc3RhdGUgPT0gU0VMRUNUX0NMRUFSRUQpCisJICAgIGNsaXBfc3RhcnRfc2VsZWN0aW9uKG1vdXNlX2NvbCwgbW91c2Vfcm93LCBGQUxTRSk7CisJY2xpcF9wcm9jZXNzX3NlbGVjdGlvbihidXR0b24sIG1vdXNlX2NvbCwgbW91c2Vfcm93LCByZXBlYXQpOworICAgIH0KKyAgICBlbHNlIGlmIChpc19jbGljaykKKwljbGlwX3N0YXJ0X3NlbGVjdGlvbihtb3VzZV9jb2wsIG1vdXNlX3JvdywgcmVwZWF0KTsKKyAgICBlbHNlIGlmIChpc19kcmFnKQorICAgIHsKKwkvKiBEb24ndCB0cnkgZXh0ZW5kaW5nIGEgc2VsZWN0aW9uIGlmIHRoZXJlIGlzbid0IG9uZS4gIEhhcHBlbnMgd2hlbgorCSAqIGJ1dHRvbi1kb3duIGlzIGluIHRoZSBjbWRsaW5lIGFuZCB0aGVtIG1vdmluZyBtb3VzZSB1cHdhcmRzLiAqLworCWlmIChjbGlwX3N0YXIuc3RhdGUgIT0gU0VMRUNUX0NMRUFSRUQpCisJICAgIGNsaXBfcHJvY2Vzc19zZWxlY3Rpb24oYnV0dG9uLCBtb3VzZV9jb2wsIG1vdXNlX3JvdywgcmVwZWF0KTsKKyAgICB9CisgICAgZWxzZSAvKiByZWxlYXNlICovCisJY2xpcF9wcm9jZXNzX3NlbGVjdGlvbihNT1VTRV9SRUxFQVNFLCBtb3VzZV9jb2wsIG1vdXNlX3JvdywgRkFMU0UpOworfQorCisvKgorICogQ29tcGFyZSB0d28gc2NyZWVuIHBvc2l0aW9ucyBhbGEgc3RyY21wKCkKKyAqLworICAgIHN0YXRpYyBpbnQKK2NsaXBfY29tcGFyZV9wb3Mocm93MSwgY29sMSwgcm93MiwgY29sMikKKyAgICBpbnQJCXJvdzE7CisgICAgaW50CQljb2wxOworICAgIGludAkJcm93MjsKKyAgICBpbnQJCWNvbDI7Cit7CisgICAgaWYgKHJvdzEgPiByb3cyKSByZXR1cm4oMSk7CisgICAgaWYgKHJvdzEgPCByb3cyKSByZXR1cm4oLTEpOworICAgIGlmIChjb2wxID4gY29sMikgcmV0dXJuKDEpOworICAgIGlmIChjb2wxIDwgY29sMikgcmV0dXJuKC0xKTsKKwkJICAgICByZXR1cm4oMCk7Cit9CisKKy8qCisgKiBTdGFydCB0aGUgc2VsZWN0aW9uCisgKi8KKyAgICB2b2lkCitjbGlwX3N0YXJ0X3NlbGVjdGlvbihjb2wsIHJvdywgcmVwZWF0ZWRfY2xpY2spCisgICAgaW50CQljb2w7CisgICAgaW50CQlyb3c7CisgICAgaW50CQlyZXBlYXRlZF9jbGljazsKK3sKKyAgICBWaW1DbGlwYm9hcmQJKmNiID0gJmNsaXBfc3RhcjsKKworICAgIGlmIChjYi0+c3RhdGUgPT0gU0VMRUNUX0RPTkUpCisJY2xpcF9jbGVhcl9zZWxlY3Rpb24oKTsKKworICAgIHJvdyA9IGNoZWNrX3Jvdyhyb3cpOworICAgIGNvbCA9IGNoZWNrX2NvbChjb2wpOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBjb2wgPSBtYl9maXhfY29sKGNvbCwgcm93KTsKKyNlbmRpZgorCisgICAgY2ItPnN0YXJ0LmxudW0gID0gcm93OworICAgIGNiLT5zdGFydC5jb2wgICA9IGNvbDsKKyAgICBjYi0+ZW5kCSAgICA9IGNiLT5zdGFydDsKKyAgICBjYi0+b3JpZ2luX3JvdyAgPSAoc2hvcnRfdSljYi0+c3RhcnQubG51bTsKKyAgICBjYi0+c3RhdGUJICAgID0gU0VMRUNUX0lOX1BST0dSRVNTOworCisgICAgaWYgKHJlcGVhdGVkX2NsaWNrKQorICAgIHsKKwlpZiAoKytjYi0+bW9kZSA+IFNFTEVDVF9NT0RFX0xJTkUpCisJICAgIGNiLT5tb2RlID0gU0VMRUNUX01PREVfQ0hBUjsKKyAgICB9CisgICAgZWxzZQorCWNiLT5tb2RlID0gU0VMRUNUX01PREVfQ0hBUjsKKworI2lmZGVmIEZFQVRfR1VJCisgICAgLyogY2xlYXIgdGhlIGN1cnNvciB1bnRpbCB0aGUgc2VsZWN0aW9uIGlzIG1hZGUgKi8KKyAgICBpZiAoZ3VpLmluX3VzZSkKKwlndWlfdW5kcmF3X2N1cnNvcigpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKGNiLT5tb2RlKQorICAgIHsKKwljYXNlIFNFTEVDVF9NT0RFX0NIQVI6CisJICAgIGNiLT5vcmlnaW5fc3RhcnRfY29sID0gY2ItPnN0YXJ0LmNvbDsKKwkgICAgY2ItPndvcmRfZW5kX2NvbCA9IGNsaXBfZ2V0X2xpbmVfZW5kKChpbnQpY2ItPnN0YXJ0LmxudW0pOworCSAgICBicmVhazsKKworCWNhc2UgU0VMRUNUX01PREVfV09SRDoKKwkgICAgY2xpcF9nZXRfd29yZF9ib3VuZGFyaWVzKGNiLCAoaW50KWNiLT5zdGFydC5sbnVtLCBjYi0+c3RhcnQuY29sKTsKKwkgICAgY2ItPm9yaWdpbl9zdGFydF9jb2wgPSBjYi0+d29yZF9zdGFydF9jb2w7CisJICAgIGNiLT5vcmlnaW5fZW5kX2NvbAkgPSBjYi0+d29yZF9lbmRfY29sOworCisJICAgIGNsaXBfaW52ZXJ0X2FyZWEoKGludCljYi0+c3RhcnQubG51bSwgY2ItPndvcmRfc3RhcnRfY29sLAorCQkJICAgIChpbnQpY2ItPmVuZC5sbnVtLCBjYi0+d29yZF9lbmRfY29sLCBDTElQX1NFVCk7CisJICAgIGNiLT5zdGFydC5jb2wgPSBjYi0+d29yZF9zdGFydF9jb2w7CisJICAgIGNiLT5lbmQuY29sICAgPSBjYi0+d29yZF9lbmRfY29sOworCSAgICBicmVhazsKKworCWNhc2UgU0VMRUNUX01PREVfTElORToKKwkgICAgY2xpcF9pbnZlcnRfYXJlYSgoaW50KWNiLT5zdGFydC5sbnVtLCAwLCAoaW50KWNiLT5zdGFydC5sbnVtLAorCQkJICAgIChpbnQpQ29sdW1ucywgQ0xJUF9TRVQpOworCSAgICBjYi0+c3RhcnQuY29sID0gMDsKKwkgICAgY2ItPmVuZC5jb2wgICA9IENvbHVtbnM7CisJICAgIGJyZWFrOworICAgIH0KKworICAgIGNiLT5wcmV2ID0gY2ItPnN0YXJ0OworCisjaWZkZWYgREVCVUdfU0VMRUNUSU9OCisgICAgcHJpbnRmKCJTZWxlY3Rpb24gc3RhcnRlZCBhdCAoJXUsJXUpXG4iLCBjYi0+c3RhcnQubG51bSwgY2ItPnN0YXJ0LmNvbCk7CisjZW5kaWYKK30KKworLyoKKyAqIENvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIHNlbGVjdGlvbgorICovCisgICAgdm9pZAorY2xpcF9wcm9jZXNzX3NlbGVjdGlvbihidXR0b24sIGNvbCwgcm93LCByZXBlYXRlZF9jbGljaykKKyAgICBpbnQJCWJ1dHRvbjsKKyAgICBpbnQJCWNvbDsKKyAgICBpbnQJCXJvdzsKKyAgICBpbnRfdQlyZXBlYXRlZF9jbGljazsKK3sKKyAgICBWaW1DbGlwYm9hcmQJKmNiID0gJmNsaXBfc3RhcjsKKyAgICBpbnQJCQlkaWZmOworICAgIGludAkJCXNsZW4gPSAxOwkvKiBjdXJzb3Igc2hhcGUgd2lkdGggKi8KKworICAgIGlmIChidXR0b24gPT0gTU9VU0VfUkVMRUFTRSkKKyAgICB7CisJLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgc29tZXRoaW5nIHNlbGVjdGVkICovCisJaWYgKGNiLT5zdGFydC5sbnVtID09IGNiLT5lbmQubG51bSAmJiBjYi0+c3RhcnQuY29sID09IGNiLT5lbmQuY29sKQorCXsKKyNpZmRlZiBGRUFUX0dVSQorCSAgICBpZiAoZ3VpLmluX3VzZSkKKwkJZ3VpX3VwZGF0ZV9jdXJzb3IoRkFMU0UsIEZBTFNFKTsKKyNlbmRpZgorCSAgICBjYi0+c3RhdGUgPSBTRUxFQ1RfQ0xFQVJFRDsKKwkgICAgcmV0dXJuOworCX0KKworI2lmZGVmIERFQlVHX1NFTEVDVElPTgorCXByaW50ZigiU2VsZWN0aW9uIGVuZGVkOiAoJXUsJXUpIHRvICgldSwldSlcbiIsIGNiLT5zdGFydC5sbnVtLAorCQljYi0+c3RhcnQuY29sLCBjYi0+ZW5kLmxudW0sIGNiLT5lbmQuY29sKTsKKyNlbmRpZgorCWlmIChjbGlwX2lzYXV0b3NlbCgpCisJCXx8ICgKKyNpZmRlZiBGRUFUX0dVSQorCQkgICAgZ3VpLmluX3VzZSA/ICh2aW1fc3RyY2hyKHBfZ28sIEdPX0FTRUxNTCkgIT0gTlVMTCkgOgorI2VuZGlmCisJCSAgICBjbGlwX2F1dG9zZWxlY3RtbCkpCisJICAgIGNsaXBfY29weV9tb2RlbGVzc19zZWxlY3Rpb24oRkFMU0UpOworI2lmZGVmIEZFQVRfR1VJCisJaWYgKGd1aS5pbl91c2UpCisJICAgIGd1aV91cGRhdGVfY3Vyc29yKEZBTFNFLCBGQUxTRSk7CisjZW5kaWYKKworCWNiLT5zdGF0ZSA9IFNFTEVDVF9ET05FOworCXJldHVybjsKKyAgICB9CisKKyAgICByb3cgPSBjaGVja19yb3cocm93KTsKKyAgICBjb2wgPSBjaGVja19jb2woY29sKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgY29sID0gbWJfZml4X2NvbChjb2wsIHJvdyk7CisjZW5kaWYKKworICAgIGlmIChjb2wgPT0gKGludCljYi0+cHJldi5jb2wgJiYgcm93ID09IGNiLT5wcmV2LmxudW0gJiYgIXJlcGVhdGVkX2NsaWNrKQorCXJldHVybjsKKworICAgIC8qCisgICAgICogV2hlbiBleHRlbmRpbmcgdGhlIHNlbGVjdGlvbiB3aXRoIHRoZSByaWdodCBtb3VzZSBidXR0b24sIHN3YXAgdGhlCisgICAgICogc3RhcnQgYW5kIGVuZCBpZiB0aGUgcG9zaXRpb24gaXMgYmVmb3JlIGhhbGYgdGhlIHNlbGVjdGlvbgorICAgICAqLworICAgIGlmIChjYi0+c3RhdGUgPT0gU0VMRUNUX0RPTkUgJiYgYnV0dG9uID09IE1PVVNFX1JJR0hUKQorICAgIHsKKwkvKgorCSAqIElmIHRoZSBjbGljayBpcyBiZWZvcmUgdGhlIHN0YXJ0LCBvciB0aGUgY2xpY2sgaXMgaW5zaWRlIHRoZQorCSAqIHNlbGVjdGlvbiBhbmQgdGhlIHN0YXJ0IGlzIHRoZSBjbG9zZXN0IHNpZGUsIHNldCB0aGUgb3JpZ2luIHRvIHRoZQorCSAqIGVuZCBvZiB0aGUgc2VsZWN0aW9uLgorCSAqLworCWlmIChjbGlwX2NvbXBhcmVfcG9zKHJvdywgY29sLCAoaW50KWNiLT5zdGFydC5sbnVtLCBjYi0+c3RhcnQuY29sKSA8IDAKKwkJfHwgKGNsaXBfY29tcGFyZV9wb3Mocm93LCBjb2wsCisJCQkJCSAgIChpbnQpY2ItPmVuZC5sbnVtLCBjYi0+ZW5kLmNvbCkgPCAwCisJCSAgICAmJiAoKChjYi0+c3RhcnQubG51bSA9PSBjYi0+ZW5kLmxudW0KKwkJCSAgICAmJiBjYi0+ZW5kLmNvbCAtIGNvbCA+IGNvbCAtIGNiLT5zdGFydC5jb2wpKQorCQkJfHwgKChkaWZmID0gKGNiLT5lbmQubG51bSAtIHJvdykgLQorCQkJCQkJICAgKHJvdyAtIGNiLT5zdGFydC5sbnVtKSkgPiAwCisJCQkgICAgfHwgKGRpZmYgPT0gMCAmJiBjb2wgPCAoaW50KShjYi0+c3RhcnQuY29sICsKKwkJCQkJCQkgY2ItPmVuZC5jb2wpIC8gMikpKSkpCisJeworCSAgICBjYi0+b3JpZ2luX3JvdyA9IChzaG9ydF91KWNiLT5lbmQubG51bTsKKwkgICAgY2ItPm9yaWdpbl9zdGFydF9jb2wgPSBjYi0+ZW5kLmNvbCAtIDE7CisJICAgIGNiLT5vcmlnaW5fZW5kX2NvbCA9IGNiLT5lbmQuY29sOworCX0KKwllbHNlCisJeworCSAgICBjYi0+b3JpZ2luX3JvdyA9IChzaG9ydF91KWNiLT5zdGFydC5sbnVtOworCSAgICBjYi0+b3JpZ2luX3N0YXJ0X2NvbCA9IGNiLT5zdGFydC5jb2w7CisJICAgIGNiLT5vcmlnaW5fZW5kX2NvbCA9IGNiLT5zdGFydC5jb2w7CisJfQorCWlmIChjYi0+bW9kZSA9PSBTRUxFQ1RfTU9ERV9XT1JEICYmICFyZXBlYXRlZF9jbGljaykKKwkgICAgY2ItPm1vZGUgPSBTRUxFQ1RfTU9ERV9DSEFSOworICAgIH0KKworICAgIC8qIHNldCBzdGF0ZSwgZm9yIHdoZW4gdXNpbmcgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiAqLworICAgIGNiLT5zdGF0ZSA9IFNFTEVDVF9JTl9QUk9HUkVTUzsKKworI2lmZGVmIERFQlVHX1NFTEVDVElPTgorICAgIHByaW50ZigiU2VsZWN0aW9uIGV4dGVuZGluZyB0byAoJWQsJWQpXG4iLCByb3csIGNvbCk7CisjZW5kaWYKKworICAgIGlmIChyZXBlYXRlZF9jbGljayAmJiArK2NiLT5tb2RlID4gU0VMRUNUX01PREVfTElORSkKKwljYi0+bW9kZSA9IFNFTEVDVF9NT0RFX0NIQVI7CisKKyAgICBzd2l0Y2ggKGNiLT5tb2RlKQorICAgIHsKKwljYXNlIFNFTEVDVF9NT0RFX0NIQVI6CisJICAgIC8qIElmIHdlJ3JlIG9uIGEgZGlmZmVyZW50IGxpbmUsIGZpbmQgd2hlcmUgdGhlIGxpbmUgZW5kcyAqLworCSAgICBpZiAocm93ICE9IGNiLT5wcmV2LmxudW0pCisJCWNiLT53b3JkX2VuZF9jb2wgPSBjbGlwX2dldF9saW5lX2VuZChyb3cpOworCisJICAgIC8qIFNlZSBpZiB3ZSBhcmUgYmVmb3JlIG9yIGFmdGVyIHRoZSBvcmlnaW4gb2YgdGhlIHNlbGVjdGlvbiAqLworCSAgICBpZiAoY2xpcF9jb21wYXJlX3Bvcyhyb3csIGNvbCwgY2ItPm9yaWdpbl9yb3csCisJCQkJCQkgICBjYi0+b3JpZ2luX3N0YXJ0X2NvbCkgPj0gMCkKKwkgICAgeworCQlpZiAoY29sID49IChpbnQpY2ItPndvcmRfZW5kX2NvbCkKKwkJICAgIGNsaXBfdXBkYXRlX21vZGVsZXNzX3NlbGVjdGlvbihjYiwgY2ItPm9yaWdpbl9yb3csCisJCQkgICAgY2ItPm9yaWdpbl9zdGFydF9jb2wsIHJvdywgKGludClDb2x1bW5zKTsKKwkJZWxzZQorCQl7CisjaWZkZWYgRkVBVF9NQllURQorCQkgICAgaWYgKGhhc19tYnl0ZSAmJiBtYl9sZWZ0aGFsdmUocm93LCBjb2wpKQorCQkJc2xlbiA9IDI7CisjZW5kaWYKKwkJICAgIGNsaXBfdXBkYXRlX21vZGVsZXNzX3NlbGVjdGlvbihjYiwgY2ItPm9yaWdpbl9yb3csCisJCQkgICAgY2ItPm9yaWdpbl9zdGFydF9jb2wsIHJvdywgY29sICsgc2xlbik7CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKyNpZmRlZiBGRUFUX01CWVRFCisJCWlmIChoYXNfbWJ5dGUKKwkJCSYmIG1iX2xlZnRoYWx2ZShjYi0+b3JpZ2luX3JvdywgY2ItPm9yaWdpbl9zdGFydF9jb2wpKQorCQkgICAgc2xlbiA9IDI7CisjZW5kaWYKKwkJaWYgKGNvbCA+PSAoaW50KWNiLT53b3JkX2VuZF9jb2wpCisJCSAgICBjbGlwX3VwZGF0ZV9tb2RlbGVzc19zZWxlY3Rpb24oY2IsIHJvdywgY2ItPndvcmRfZW5kX2NvbCwKKwkJCSAgICBjYi0+b3JpZ2luX3JvdywgY2ItPm9yaWdpbl9zdGFydF9jb2wgKyBzbGVuKTsKKwkJZWxzZQorCQkgICAgY2xpcF91cGRhdGVfbW9kZWxlc3Nfc2VsZWN0aW9uKGNiLCByb3csIGNvbCwKKwkJCSAgICBjYi0+b3JpZ2luX3JvdywgY2ItPm9yaWdpbl9zdGFydF9jb2wgKyBzbGVuKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgU0VMRUNUX01PREVfV09SRDoKKwkgICAgLyogSWYgd2UgYXJlIHN0aWxsIHdpdGhpbiB0aGUgc2FtZSB3b3JkLCBkbyBub3RoaW5nICovCisJICAgIGlmIChyb3cgPT0gY2ItPnByZXYubG51bSAmJiBjb2wgPj0gKGludCljYi0+d29yZF9zdGFydF9jb2wKKwkJICAgICYmIGNvbCA8IChpbnQpY2ItPndvcmRfZW5kX2NvbCAmJiAhcmVwZWF0ZWRfY2xpY2spCisJCXJldHVybjsKKworCSAgICAvKiBHZXQgbmV3IHdvcmQgYm91bmRhcmllcyAqLworCSAgICBjbGlwX2dldF93b3JkX2JvdW5kYXJpZXMoY2IsIHJvdywgY29sKTsKKworCSAgICAvKiBIYW5kbGUgYmVpbmcgYWZ0ZXIgdGhlIG9yaWdpbiBwb2ludCBvZiBzZWxlY3Rpb24gKi8KKwkgICAgaWYgKGNsaXBfY29tcGFyZV9wb3Mocm93LCBjb2wsIGNiLT5vcmlnaW5fcm93LAorCQkgICAgY2ItPm9yaWdpbl9zdGFydF9jb2wpID49IDApCisJCWNsaXBfdXBkYXRlX21vZGVsZXNzX3NlbGVjdGlvbihjYiwgY2ItPm9yaWdpbl9yb3csCisJCQljYi0+b3JpZ2luX3N0YXJ0X2NvbCwgcm93LCBjYi0+d29yZF9lbmRfY29sKTsKKwkgICAgZWxzZQorCQljbGlwX3VwZGF0ZV9tb2RlbGVzc19zZWxlY3Rpb24oY2IsIHJvdywgY2ItPndvcmRfc3RhcnRfY29sLAorCQkJY2ItPm9yaWdpbl9yb3csIGNiLT5vcmlnaW5fZW5kX2NvbCk7CisJICAgIGJyZWFrOworCisJY2FzZSBTRUxFQ1RfTU9ERV9MSU5FOgorCSAgICBpZiAocm93ID09IGNiLT5wcmV2LmxudW0gJiYgIXJlcGVhdGVkX2NsaWNrKQorCQlyZXR1cm47CisKKwkgICAgaWYgKGNsaXBfY29tcGFyZV9wb3Mocm93LCBjb2wsIGNiLT5vcmlnaW5fcm93LAorCQkgICAgY2ItPm9yaWdpbl9zdGFydF9jb2wpID49IDApCisJCWNsaXBfdXBkYXRlX21vZGVsZXNzX3NlbGVjdGlvbihjYiwgY2ItPm9yaWdpbl9yb3csIDAsIHJvdywKKwkJCShpbnQpQ29sdW1ucyk7CisJICAgIGVsc2UKKwkJY2xpcF91cGRhdGVfbW9kZWxlc3Nfc2VsZWN0aW9uKGNiLCByb3csIDAsIGNiLT5vcmlnaW5fcm93LAorCQkJKGludClDb2x1bW5zKTsKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgY2ItPnByZXYubG51bSA9IHJvdzsKKyAgICBjYi0+cHJldi5jb2wgID0gY29sOworCisjaWZkZWYgREVCVUdfU0VMRUNUSU9OCisJcHJpbnRmKCJTZWxlY3Rpb24gaXM6ICgldSwldSkgdG8gKCV1LCV1KVxuIiwgY2ItPnN0YXJ0LmxudW0sCisJCWNiLT5zdGFydC5jb2wsIGNiLT5lbmQubG51bSwgY2ItPmVuZC5jb2wpOworI2VuZGlmCit9CisKKyNpZiAwIC8qIG5vdCB1c2VkICovCisvKgorICogQ2FsbGVkIGFmdGVyIGFuIEV4cG9zZSBldmVudCB0byByZWRyYXcgdGhlIHNlbGVjdGlvbgorICovCisgICAgdm9pZAorY2xpcF9yZWRyYXdfc2VsZWN0aW9uKHgsIHksIHcsIGgpCisgICAgaW50CSAgICB4OworICAgIGludAkgICAgeTsKKyAgICBpbnQJICAgIHc7CisgICAgaW50CSAgICBoOworeworICAgIFZpbUNsaXBib2FyZCAgICAqY2IgPSAmY2xpcF9zdGFyOworICAgIGludAkJICAgIHJvdzEsIGNvbDEsIHJvdzIsIGNvbDI7CisgICAgaW50CQkgICAgcm93OworICAgIGludAkJICAgIHN0YXJ0OworICAgIGludAkJICAgIGVuZDsKKworICAgIGlmIChjYi0+c3RhdGUgPT0gU0VMRUNUX0NMRUFSRUQpCisJcmV0dXJuOworCisgICAgcm93MSA9IGNoZWNrX3JvdyhZXzJfUk9XKHkpKTsKKyAgICBjb2wxID0gY2hlY2tfY29sKFhfMl9DT0woeCkpOworICAgIHJvdzIgPSBjaGVja19yb3coWV8yX1JPVyh5ICsgaCAtIDEpKTsKKyAgICBjb2wyID0gY2hlY2tfY29sKFhfMl9DT0woeCArIHcgLSAxKSk7CisKKyAgICAvKiBMaW1pdCB0aGUgcm93cyB0aGF0IG5lZWQgdG8gYmUgcmUtZHJhd24gKi8KKyAgICBpZiAoY2ItPnN0YXJ0LmxudW0gPiByb3cxKQorCXJvdzEgPSBjYi0+c3RhcnQubG51bTsKKyAgICBpZiAoY2ItPmVuZC5sbnVtIDwgcm93MikKKwlyb3cyID0gY2ItPmVuZC5sbnVtOworCisgICAgLyogTG9vayBhdCBlYWNoIHJvdyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgcmUtZHJhd24gKi8KKyAgICBmb3IgKHJvdyA9IHJvdzE7IHJvdyA8PSByb3cyOyByb3crKykKKyAgICB7CisJLyogRm9yIHRoZSBmaXJzdCBzZWxlY3Rpb24gcm93LCB1c2UgdGhlIHN0YXJ0aW5nIHNlbGVjdGlvbiBjb2x1bW4gKi8KKwlpZiAocm93ID09IGNiLT5zdGFydC5sbnVtKQorCSAgICBzdGFydCA9IGNiLT5zdGFydC5jb2w7CisJZWxzZQorCSAgICBzdGFydCA9IDA7CisKKwkvKiBGb3IgdGhlIGxhc3Qgc2VsZWN0aW9uIHJvdywgdXNlIHRoZSBlbmRpbmcgc2VsZWN0aW9uIGNvbHVtbiAqLworCWlmIChyb3cgPT0gY2ItPmVuZC5sbnVtKQorCSAgICBlbmQgPSBjYi0+ZW5kLmNvbDsKKwllbHNlCisJICAgIGVuZCA9IENvbHVtbnM7CisKKwlpZiAoY29sMSA+IHN0YXJ0KQorCSAgICBzdGFydCA9IGNvbDE7CisKKwlpZiAoY29sMiA8IGVuZCkKKwkgICAgZW5kID0gY29sMiArIDE7CisKKwlpZiAoZW5kID4gc3RhcnQpCisJICAgIGd1aV9tY2hfaW52ZXJ0X3JlY3RhbmdsZShyb3csIHN0YXJ0LCAxLCBlbmQgLSBzdGFydCk7CisgICAgfQorfQorI2VuZGlmCisKKyMgaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZWRyYXcgcGFydCBvZiB0aGUgc2VsZWN0aW9uIGlmIGNoYXJhY3RlciBhdCAicm93LGNvbCIgaXMgaW5zaWRlIG9mIGl0LgorICogT25seSB1c2VkIGZvciB0aGUgR1VJLgorICovCisgICAgdm9pZAorY2xpcF9tYXlfcmVkcmF3X3NlbGVjdGlvbihyb3csIGNvbCwgbGVuKQorICAgIGludAkJcm93LCBjb2w7CisgICAgaW50CQlsZW47Cit7CisgICAgaW50CQlzdGFydCA9IGNvbDsKKyAgICBpbnQJCWVuZCA9IGNvbCArIGxlbjsKKworICAgIGlmIChjbGlwX3N0YXIuc3RhdGUgIT0gU0VMRUNUX0NMRUFSRUQKKwkgICAgJiYgcm93ID49IGNsaXBfc3Rhci5zdGFydC5sbnVtCisJICAgICYmIHJvdyA8PSBjbGlwX3N0YXIuZW5kLmxudW0pCisgICAgeworCWlmIChyb3cgPT0gY2xpcF9zdGFyLnN0YXJ0LmxudW0gJiYgc3RhcnQgPCAoaW50KWNsaXBfc3Rhci5zdGFydC5jb2wpCisJICAgIHN0YXJ0ID0gY2xpcF9zdGFyLnN0YXJ0LmNvbDsKKwlpZiAocm93ID09IGNsaXBfc3Rhci5lbmQubG51bSAmJiBlbmQgPiAoaW50KWNsaXBfc3Rhci5lbmQuY29sKQorCSAgICBlbmQgPSBjbGlwX3N0YXIuZW5kLmNvbDsKKwlpZiAoZW5kID4gc3RhcnQpCisJICAgIGNsaXBfaW52ZXJ0X2FyZWEocm93LCBzdGFydCwgcm93LCBlbmQsIDApOworICAgIH0KK30KKyMgZW5kaWYKKworLyoKKyAqIENhbGxlZCBmcm9tIG91dHNpZGUgdG8gY2xlYXIgc2VsZWN0ZWQgcmVnaW9uIGZyb20gdGhlIGRpc3BsYXkKKyAqLworICAgIHZvaWQKK2NsaXBfY2xlYXJfc2VsZWN0aW9uKCkKK3sKKyAgICBWaW1DbGlwYm9hcmQgICAgKmNiID0gJmNsaXBfc3RhcjsKKworICAgIGlmIChjYi0+c3RhdGUgPT0gU0VMRUNUX0NMRUFSRUQpCisJcmV0dXJuOworCisgICAgY2xpcF9pbnZlcnRfYXJlYSgoaW50KWNiLT5zdGFydC5sbnVtLCBjYi0+c3RhcnQuY29sLCAoaW50KWNiLT5lbmQubG51bSwKKwkJCQkJCSAgICAgY2ItPmVuZC5jb2wsIENMSVBfQ0xFQVIpOworICAgIGNiLT5zdGF0ZSA9IFNFTEVDVF9DTEVBUkVEOworfQorCisvKgorICogQ2xlYXIgdGhlIHNlbGVjdGlvbiBpZiBhbnkgbGluZXMgZnJvbSAicm93MSIgdG8gInJvdzIiIGFyZSBpbnNpZGUgb2YgaXQuCisgKi8KKyAgICB2b2lkCitjbGlwX21heV9jbGVhcl9zZWxlY3Rpb24ocm93MSwgcm93MikKKyAgICBpbnQJcm93MSwgcm93MjsKK3sKKyAgICBpZiAoY2xpcF9zdGFyLnN0YXRlID09IFNFTEVDVF9ET05FCisJICAgICYmIHJvdzIgPj0gY2xpcF9zdGFyLnN0YXJ0LmxudW0KKwkgICAgJiYgcm93MSA8PSBjbGlwX3N0YXIuZW5kLmxudW0pCisJY2xpcF9jbGVhcl9zZWxlY3Rpb24oKTsKK30KKworLyoKKyAqIENhbGxlZCBiZWZvcmUgdGhlIHNjcmVlbiBpcyBzY3JvbGxlZCB1cCBvciBkb3duLiAgQWRqdXN0cyB0aGUgbGluZSBudW1iZXJzCisgKiBvZiB0aGUgc2VsZWN0aW9uLiAgQ2FsbCB3aXRoIGJpZyBudW1iZXIgd2hlbiBjbGVhcmluZyB0aGUgc2NyZWVuLgorICovCisgICAgdm9pZAorY2xpcF9zY3JvbGxfc2VsZWN0aW9uKHJvd3MpCisgICAgaW50CSAgICByb3dzOwkJLyogbmVnYXRpdmUgZm9yIHNjcm9sbCBkb3duICovCit7CisgICAgaW50CSAgICBsbnVtOworCisgICAgaWYgKGNsaXBfc3Rhci5zdGF0ZSA9PSBTRUxFQ1RfQ0xFQVJFRCkKKwlyZXR1cm47CisKKyAgICBsbnVtID0gY2xpcF9zdGFyLnN0YXJ0LmxudW0gLSByb3dzOworICAgIGlmIChsbnVtIDw9IDApCisJY2xpcF9zdGFyLnN0YXJ0LmxudW0gPSAwOworICAgIGVsc2UgaWYgKGxudW0gPj0gc2NyZWVuX1Jvd3MpCS8qIHNjcm9sbGVkIG9mZiBvZiB0aGUgc2NyZWVuICovCisJY2xpcF9zdGFyLnN0YXRlID0gU0VMRUNUX0NMRUFSRUQ7CisgICAgZWxzZQorCWNsaXBfc3Rhci5zdGFydC5sbnVtID0gbG51bTsKKworICAgIGxudW0gPSBjbGlwX3N0YXIuZW5kLmxudW0gLSByb3dzOworICAgIGlmIChsbnVtIDwgMCkJCQkvKiBzY3JvbGxlZCBvZmYgb2YgdGhlIHNjcmVlbiAqLworCWNsaXBfc3Rhci5zdGF0ZSA9IFNFTEVDVF9DTEVBUkVEOworICAgIGVsc2UgaWYgKGxudW0gPj0gc2NyZWVuX1Jvd3MpCisJY2xpcF9zdGFyLmVuZC5sbnVtID0gc2NyZWVuX1Jvd3MgLSAxOworICAgIGVsc2UKKwljbGlwX3N0YXIuZW5kLmxudW0gPSBsbnVtOworfQorCisvKgorICogSW52ZXJ0IGEgcmVnaW9uIG9mIHRoZSBkaXNwbGF5IGJldHdlZW4gYSBzdGFydGluZyBhbmQgZW5kaW5nIHJvdyBhbmQgY29sdW1uCisgKiBWYWx1ZXMgZm9yICJob3ciOgorICogQ0xJUF9DTEVBUjogIHVuZG8gaW52ZXJzaW9uCisgKiBDTElQX1NFVDogICAgc2V0IGludmVyc2lvbgorICogQ0xJUF9UT0dHTEU6IHNldCBpbnZlcnNpb24gaWYgcG9zMSA8IHBvczIsIHVuZG8gaW52ZXJzaW9uIG90aGVyd2lzZS4KKyAqIDA6IGludmVydCAoR1VJIG9ubHkpLgorICovCisgICAgc3RhdGljIHZvaWQKK2NsaXBfaW52ZXJ0X2FyZWEocm93MSwgY29sMSwgcm93MiwgY29sMiwgaG93KQorICAgIGludAkJcm93MTsKKyAgICBpbnQJCWNvbDE7CisgICAgaW50CQlyb3cyOworICAgIGludAkJY29sMjsKKyAgICBpbnQJCWhvdzsKK3sKKyAgICBpbnQJCWludmVydCA9IEZBTFNFOworCisgICAgaWYgKGhvdyA9PSBDTElQX1NFVCkKKwlpbnZlcnQgPSBUUlVFOworCisgICAgLyogU3dhcCB0aGUgZnJvbSBhbmQgdG8gcG9zaXRpb25zIHNvIHRoZSBmcm9tIGlzIGFsd2F5cyBiZWZvcmUgKi8KKyAgICBpZiAoY2xpcF9jb21wYXJlX3Bvcyhyb3cxLCBjb2wxLCByb3cyLCBjb2wyKSA+IDApCisgICAgeworCWludCB0bXBfcm93LCB0bXBfY29sOworCisJdG1wX3JvdyA9IHJvdzE7CisJdG1wX2NvbCA9IGNvbDE7CisJcm93MQk9IHJvdzI7CisJY29sMQk9IGNvbDI7CisJcm93Mgk9IHRtcF9yb3c7CisJY29sMgk9IHRtcF9jb2w7CisgICAgfQorICAgIGVsc2UgaWYgKGhvdyA9PSBDTElQX1RPR0dMRSkKKwlpbnZlcnQgPSBUUlVFOworCisgICAgLyogSWYgYWxsIG9uIHRoZSBzYW1lIGxpbmUsIGRvIGl0IHRoZSBlYXN5IHdheSAqLworICAgIGlmIChyb3cxID09IHJvdzIpCisgICAgeworCWNsaXBfaW52ZXJ0X3JlY3RhbmdsZShyb3cxLCBjb2wxLCAxLCBjb2wyIC0gY29sMSwgaW52ZXJ0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKiBIYW5kbGUgYSBwaWVjZSBvZiB0aGUgZmlyc3QgbGluZSAqLworCWlmIChjb2wxID4gMCkKKwl7CisJICAgIGNsaXBfaW52ZXJ0X3JlY3RhbmdsZShyb3cxLCBjb2wxLCAxLCAoaW50KUNvbHVtbnMgLSBjb2wxLCBpbnZlcnQpOworCSAgICByb3cxKys7CisJfQorCisJLyogSGFuZGxlIGEgcGllY2Ugb2YgdGhlIGxhc3QgbGluZSAqLworCWlmIChjb2wyIDwgQ29sdW1ucyAtIDEpCisJeworCSAgICBjbGlwX2ludmVydF9yZWN0YW5nbGUocm93MiwgMCwgMSwgY29sMiwgaW52ZXJ0KTsKKwkgICAgcm93Mi0tOworCX0KKworCS8qIEhhbmRsZSB0aGUgcmVjdGFuZ2xlIHRoYXRzIGxlZnQgKi8KKwlpZiAocm93MiA+PSByb3cxKQorCSAgICBjbGlwX2ludmVydF9yZWN0YW5nbGUocm93MSwgMCwgcm93MiAtIHJvdzEgKyAxLCAoaW50KUNvbHVtbnMsCisJCQkJCQkJCSAgICAgIGludmVydCk7CisgICAgfQorfQorCisvKgorICogSW52ZXJ0IG9yIHVuLWludmVydCBhIHJlY3RhbmdsZSBvZiB0aGUgc2NyZWVuLgorICogImludmVydCIgaXMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIGludmVydGVkLgorICovCisgICAgc3RhdGljIHZvaWQKK2NsaXBfaW52ZXJ0X3JlY3RhbmdsZShyb3csIGNvbCwgaGVpZ2h0LCB3aWR0aCwgaW52ZXJ0KQorICAgIGludAkJcm93OworICAgIGludAkJY29sOworICAgIGludAkJaGVpZ2h0OworICAgIGludAkJd2lkdGg7CisgICAgaW50CQlpbnZlcnQ7Cit7CisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSkKKwlndWlfbWNoX2ludmVydF9yZWN0YW5nbGUocm93LCBjb2wsIGhlaWdodCwgd2lkdGgpOworICAgIGVsc2UKKyNlbmRpZgorCXNjcmVlbl9kcmF3X3JlY3RhbmdsZShyb3csIGNvbCwgaGVpZ2h0LCB3aWR0aCwgaW52ZXJ0KTsKK30KKworLyoKKyAqIENvcHkgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhcmVhIGludG8gdGhlICcqJyByZWdpc3RlciBzbyBpdCB3aWxsIGJlCisgKiBhdmFpbGFibGUgZm9yIHBhc3RpbmcuCisgKiBXaGVuICJib3RoIiBpcyBUUlVFIGFsc28gY29weSB0byB0aGUgJysnIHJlZ2lzdGVyLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitjbGlwX2NvcHlfbW9kZWxlc3Nfc2VsZWN0aW9uKGJvdGgpCisgICAgaW50CQlib3RoOworeworICAgIGNoYXJfdQkqYnVmZmVyOworICAgIGNoYXJfdQkqYnVmcDsKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCXN0YXJ0X2NvbDsKKyAgICBpbnQJCWVuZF9jb2w7CisgICAgaW50CQlsaW5lX2VuZF9jb2w7CisgICAgaW50CQlhZGRfbmV3bGluZV9mbGFnID0gRkFMU0U7CisgICAgaW50CQlsZW47CisjaWZkZWYgRkVBVF9NQllURQorICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWk7CisjZW5kaWYKKyAgICBpbnQJCXJvdzEgPSBjbGlwX3N0YXIuc3RhcnQubG51bTsKKyAgICBpbnQJCWNvbDEgPSBjbGlwX3N0YXIuc3RhcnQuY29sOworICAgIGludAkJcm93MiA9IGNsaXBfc3Rhci5lbmQubG51bTsKKyAgICBpbnQJCWNvbDIgPSBjbGlwX3N0YXIuZW5kLmNvbDsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIHJvdzEgPD0gcm93MiwgYW5kIGlmIHJvdzEgPT0gcm93MiB0aGF0IGNvbDEgPD0gY29sMi4KKyAgICAgKi8KKyAgICBpZiAocm93MSA+IHJvdzIpCisgICAgeworCXJvdyA9IHJvdzE7IHJvdzEgPSByb3cyOyByb3cyID0gcm93OworCXJvdyA9IGNvbDE7IGNvbDEgPSBjb2wyOyBjb2wyID0gcm93OworICAgIH0KKyAgICBlbHNlIGlmIChyb3cxID09IHJvdzIgJiYgY29sMSA+IGNvbDIpCisgICAgeworCXJvdyA9IGNvbDE7IGNvbDEgPSBjb2wyOyBjb2wyID0gcm93OworICAgIH0KKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyogY29ycmVjdCBzdGFydGluZyBwb2ludCBmb3IgYmVpbmcgb24gcmlnaHQgaGFsdmUgb2YgZG91YmxlLXdpZGUgY2hhciAqLworICAgIHAgPSBTY3JlZW5MaW5lcyArIExpbmVPZmZzZXRbcm93MV07CisgICAgaWYgKGVuY19kYmNzICE9IDApCisJY29sMSAtPSAoKm1iX2hlYWRfb2ZmKShwLCBwICsgY29sMSk7CisgICAgZWxzZSBpZiAoZW5jX3V0ZjggJiYgcFtjb2wxXSA9PSAwKQorCS0tY29sMTsKKyNlbmRpZgorCisgICAgLyogQ3JlYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3Igc3RvcmluZyB0aGUgdGV4dCAqLworICAgIGxlbiA9IChyb3cyIC0gcm93MSArIDEpICogQ29sdW1ucyArIDE7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGlmIChlbmNfZGJjcyAhPSAwKQorCWxlbiAqPSAyOwkvKiBtYXguIDIgYnl0ZXMgcGVyIGRpc3BsYXkgY2VsbCAqLworICAgIGVsc2UgaWYgKGVuY191dGY4KQorCWxlbiAqPSA5OwkvKiBtYXguIDMgYnl0ZXMgcGVyIGRpc3BsYXkgY2VsbCArIDIgY29tcG9zaW5nIGNoYXJzICovCisjZW5kaWYKKyAgICBidWZmZXIgPSBsYWxsb2MoKGxvbmdfdSlsZW4sIFRSVUUpOworICAgIGlmIChidWZmZXIgPT0gTlVMTCkJICAgIC8qIG91dCBvZiBtZW1vcnkgKi8KKwlyZXR1cm47CisKKyAgICAvKiBQcm9jZXNzIGVhY2ggcm93IGluIHRoZSBzZWxlY3Rpb24gKi8KKyAgICBmb3IgKGJ1ZnAgPSBidWZmZXIsIHJvdyA9IHJvdzE7IHJvdyA8PSByb3cyOyByb3crKykKKyAgICB7CisJaWYgKHJvdyA9PSByb3cxKQorCSAgICBzdGFydF9jb2wgPSBjb2wxOworCWVsc2UKKwkgICAgc3RhcnRfY29sID0gMDsKKworCWlmIChyb3cgPT0gcm93MikKKwkgICAgZW5kX2NvbCA9IGNvbDI7CisJZWxzZQorCSAgICBlbmRfY29sID0gQ29sdW1uczsKKworCWxpbmVfZW5kX2NvbCA9IGNsaXBfZ2V0X2xpbmVfZW5kKHJvdyk7CisKKwkvKiBTZWUgaWYgd2UgbmVlZCB0byBudWtlIHNvbWUgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworCWlmIChlbmRfY29sID49IENvbHVtbnMgJiYgKHJvdyA8IHJvdzIgfHwgZW5kX2NvbCA+IGxpbmVfZW5kX2NvbCkpCisJeworCSAgICAvKiBHZXQgcmlkIG9mIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KKwkgICAgZW5kX2NvbCA9IGxpbmVfZW5kX2NvbDsKKwkgICAgaWYgKGVuZF9jb2wgPCBzdGFydF9jb2wpCisJCWVuZF9jb2wgPSBzdGFydF9jb2w7CisKKwkgICAgLyogSWYgdGhlIGxhc3QgbGluZSBleHRlbmRlZCB0byB0aGUgZW5kLCBhZGQgYW4gZXh0cmEgbmV3bGluZSAqLworCSAgICBpZiAocm93ID09IHJvdzIpCisJCWFkZF9uZXdsaW5lX2ZsYWcgPSBUUlVFOworCX0KKworCS8qIElmIGFmdGVyIHRoZSBmaXJzdCByb3csIHdlIG5lZWQgdG8gYWx3YXlzIGFkZCBhIG5ld2xpbmUgKi8KKwlpZiAocm93ID4gcm93MSAmJiAhTGluZVdyYXBzW3JvdyAtIDFdKQorCSAgICAqYnVmcCsrID0gTkw7CisKKwlpZiAocm93IDwgc2NyZWVuX1Jvd3MgJiYgZW5kX2NvbCA8PSBzY3JlZW5fQ29sdW1ucykKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoZW5jX2RiY3MgIT0gMCkKKwkgICAgeworCQlwID0gU2NyZWVuTGluZXMgKyBMaW5lT2Zmc2V0W3Jvd107CisJCWZvciAoaSA9IHN0YXJ0X2NvbDsgaSA8IGVuZF9jb2w7ICsraSkKKwkJICAgIGlmIChlbmNfZGJjcyA9PSBEQkNTX0pQTlUgJiYgcFtpXSA9PSAweDhlKQorCQkgICAgeworCQkJLyogc2luZ2xlLXdpZHRoIGRvdWJsZS1ieXRlIGNoYXIgKi8KKwkJCSpidWZwKysgPSAweDhlOworCQkJKmJ1ZnArKyA9IFNjcmVlbkxpbmVzMltMaW5lT2Zmc2V0W3Jvd10gKyBpXTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCSpidWZwKysgPSBwW2ldOworCQkJaWYgKE1CX0JZVEUyTEVOKHBbaV0pID09IDIpCisJCQkgICAgKmJ1ZnArKyA9IHBbKytpXTsKKwkJICAgIH0KKwkgICAgfQorCSAgICBlbHNlIGlmIChlbmNfdXRmOCkKKwkgICAgeworCQlpbnQJb2ZmOworCisJCW9mZiA9IExpbmVPZmZzZXRbcm93XTsKKwkJZm9yIChpID0gc3RhcnRfY29sOyBpIDwgZW5kX2NvbDsgKytpKQorCQl7CisJCSAgICAvKiBUaGUgYmFzZSBjaGFyYWN0ZXIgaXMgZWl0aGVyIGluIFNjcmVlbkxpbmVzVUNbXSBvcgorCQkgICAgICogU2NyZWVuTGluZXNbXS4gKi8KKwkJICAgIGlmIChTY3JlZW5MaW5lc1VDW29mZiArIGldID09IDApCisJCQkqYnVmcCsrID0gU2NyZWVuTGluZXNbb2ZmICsgaV07CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlidWZwICs9IHV0Zl9jaGFyMmJ5dGVzKFNjcmVlbkxpbmVzVUNbb2ZmICsgaV0sIGJ1ZnApOworCQkJaWYgKFNjcmVlbkxpbmVzQzFbb2ZmICsgaV0gIT0gMCkKKwkJCXsKKwkJCSAgICAvKiBBZGQgb25lIG9yIHR3byBjb21wb3NpbmcgY2hhcmFjdGVycy4gKi8KKwkJCSAgICBidWZwICs9IHV0Zl9jaGFyMmJ5dGVzKFNjcmVlbkxpbmVzQzFbb2ZmICsgaV0sCisJCQkJCQkJCQlidWZwKTsKKwkJCSAgICBpZiAoU2NyZWVuTGluZXNDMltvZmYgKyBpXSAhPSAwKQorCQkJCWJ1ZnAgKz0gdXRmX2NoYXIyYnl0ZXMoU2NyZWVuTGluZXNDMltvZmYgKyBpXSwKKwkJCQkJYnVmcCk7CisJCQl9CisJCSAgICB9CisJCSAgICAvKiBTa2lwIHJpZ2h0IGhhbHZlIG9mIGRvdWJsZS13aWRlIGNoYXJhY3Rlci4gKi8KKwkJICAgIGlmIChTY3JlZW5MaW5lc1tvZmYgKyBpICsgMV0gPT0gMCkKKwkJCSsraTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJCVNUUk5DUFkoYnVmcCwgU2NyZWVuTGluZXMgKyBMaW5lT2Zmc2V0W3Jvd10gKyBzdGFydF9jb2wsCisJCQkJCQkJIGVuZF9jb2wgLSBzdGFydF9jb2wpOworCQlidWZwICs9IGVuZF9jb2wgLSBzdGFydF9jb2w7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogQWRkIGEgbmV3bGluZSBhdCB0aGUgZW5kIGlmIHRoZSBzZWxlY3Rpb24gZW5kZWQgdGhlcmUgKi8KKyAgICBpZiAoYWRkX25ld2xpbmVfZmxhZykKKwkqYnVmcCsrID0gTkw7CisKKyAgICAvKiBGaXJzdCBjbGVhbnVwIGFueSBvbGQgc2VsZWN0aW9uIGFuZCBiZWNvbWUgdGhlIG93bmVyLiAqLworICAgIGNsaXBfZnJlZV9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7CisgICAgY2xpcF9vd25fc2VsZWN0aW9uKCZjbGlwX3N0YXIpOworCisgICAgLyogWWFuayB0aGUgdGV4dCBpbnRvIHRoZSAnKicgcmVnaXN0ZXIuICovCisgICAgY2xpcF95YW5rX3NlbGVjdGlvbihNQ0hBUiwgYnVmZmVyLCAobG9uZykoYnVmcCAtIGJ1ZmZlciksICZjbGlwX3N0YXIpOworCisgICAgLyogTWFrZSB0aGUgcmVnaXN0ZXIgY29udGVudHMgYXZhaWxhYmxlIHRvIHRoZSBvdXRzaWRlIHdvcmxkLiAqLworICAgIGNsaXBfZ2VuX3NldF9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7CisKKyNpZmRlZiBGRUFUX1gxMQorICAgIGlmIChib3RoKQorICAgIHsKKwkvKiBEbyB0aGUgc2FtZSBmb3IgdGhlICcrJyByZWdpc3Rlci4gKi8KKwljbGlwX2ZyZWVfc2VsZWN0aW9uKCZjbGlwX3BsdXMpOworCWNsaXBfb3duX3NlbGVjdGlvbigmY2xpcF9wbHVzKTsKKwljbGlwX3lhbmtfc2VsZWN0aW9uKE1DSEFSLCBidWZmZXIsIChsb25nKShidWZwIC0gYnVmZmVyKSwgJmNsaXBfcGx1cyk7CisJY2xpcF9nZW5fc2V0X3NlbGVjdGlvbigmY2xpcF9wbHVzKTsKKyAgICB9CisjZW5kaWYKKyAgICB2aW1fZnJlZShidWZmZXIpOworfQorCisvKgorICogRmluZCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBwb3NpdGlvbnMgb2YgdGhlIHdvcmQgYXQgdGhlIGdpdmVuIHJvdyBhbmQKKyAqIGNvbHVtbi4gIE9ubHkgd2hpdGUtc2VwYXJhdGVkIHdvcmRzIGFyZSByZWNvZ25pemVkIGhlcmUuCisgKi8KKyNkZWZpbmUgQ0hBUl9DTEFTUyhjKQkoYyA8PSAnICcgPyAnICcgOiB2aW1faXN3b3JkYyhjKSkKKworICAgIHN0YXRpYyB2b2lkCitjbGlwX2dldF93b3JkX2JvdW5kYXJpZXMoY2IsIHJvdywgY29sKQorICAgIFZpbUNsaXBib2FyZAkqY2I7CisgICAgaW50CQkJcm93OworICAgIGludAkJCWNvbDsKK3sKKyAgICBpbnQJCXN0YXJ0X2NsYXNzOworICAgIGludAkJdGVtcF9jb2w7CisgICAgY2hhcl91CSpwOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCW1ib2ZmOworI2VuZGlmCisKKyAgICBpZiAocm93ID49IHNjcmVlbl9Sb3dzIHx8IGNvbCA+PSBzY3JlZW5fQ29sdW1ucykKKwlyZXR1cm47CisKKyAgICBwID0gU2NyZWVuTGluZXMgKyBMaW5lT2Zmc2V0W3Jvd107CisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIENvcnJlY3QgZm9yIHN0YXJ0aW5nIGluIHRoZSByaWdodCBoYWx2ZSBvZiBhIGRvdWJsZS13aWRlIGNoYXIgKi8KKyAgICBpZiAoZW5jX2RiY3MgIT0gMCkKKwljb2wgLT0gZGJjc19zY3JlZW5faGVhZF9vZmYocCwgcCArIGNvbCk7CisgICAgZWxzZSBpZiAoZW5jX3V0ZjggJiYgcFtjb2xdID09IDApCisJLS1jb2w7CisjZW5kaWYKKyAgICBzdGFydF9jbGFzcyA9IENIQVJfQ0xBU1MocFtjb2xdKTsKKworICAgIHRlbXBfY29sID0gY29sOworICAgIGZvciAoIDsgdGVtcF9jb2wgPiAwOyB0ZW1wX2NvbC0tKQorI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoZW5jX2RiY3MgIT0gMAorCQkgICAmJiAobWJvZmYgPSBkYmNzX3NjcmVlbl9oZWFkX29mZihwLCBwICsgdGVtcF9jb2wgLSAxKSkgPiAwKQorCSAgICB0ZW1wX2NvbCAtPSBtYm9mZjsKKwllbHNlCisjZW5kaWYKKwlpZiAoQ0hBUl9DTEFTUyhwW3RlbXBfY29sIC0gMV0pICE9IHN0YXJ0X2NsYXNzCisjaWZkZWYgRkVBVF9NQllURQorCQkmJiAhKGVuY191dGY4ICYmIHBbdGVtcF9jb2wgLSAxXSA9PSAwKQorI2VuZGlmCisJCSkKKwkgICAgYnJlYWs7CisgICAgY2ItPndvcmRfc3RhcnRfY29sID0gdGVtcF9jb2w7CisKKyAgICB0ZW1wX2NvbCA9IGNvbDsKKyAgICBmb3IgKCA7IHRlbXBfY29sIDwgc2NyZWVuX0NvbHVtbnM7IHRlbXBfY29sKyspCisjaWZkZWYgRkVBVF9NQllURQorCWlmIChlbmNfZGJjcyAhPSAwICYmIGRiY3NfcHRyMmNlbGxzKHAgKyB0ZW1wX2NvbCkgPT0gMikKKwkgICAgKyt0ZW1wX2NvbDsKKwllbHNlCisjZW5kaWYKKwlpZiAoQ0hBUl9DTEFTUyhwW3RlbXBfY29sXSkgIT0gc3RhcnRfY2xhc3MKKyNpZmRlZiBGRUFUX01CWVRFCisJCSYmICEoZW5jX3V0ZjggJiYgcFt0ZW1wX2NvbF0gPT0gMCkKKyNlbmRpZgorCQkpCisJICAgIGJyZWFrOworICAgIGNiLT53b3JkX2VuZF9jb2wgPSB0ZW1wX2NvbDsKK30KKworLyoKKyAqIEZpbmQgdGhlIGNvbHVtbiBwb3NpdGlvbiBmb3IgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIG9uIHRoZSBnaXZlbgorICogbGluZS4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NsaXBfZ2V0X2xpbmVfZW5kKHJvdykKKyAgICBpbnQJCXJvdzsKK3sKKyAgICBpbnQJICAgIGk7CisKKyAgICBpZiAocm93ID49IHNjcmVlbl9Sb3dzKQorCXJldHVybiAwOworICAgIGZvciAoaSA9IHNjcmVlbl9Db2x1bW5zOyBpID4gMDsgaS0tKQorCWlmIChTY3JlZW5MaW5lc1tMaW5lT2Zmc2V0W3Jvd10gKyBpIC0gMV0gIT0gJyAnKQorCSAgICBicmVhazsKKyAgICByZXR1cm4gaTsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJlZ2lvbiBieSBhZGRpbmcgYW5kL29yIHN1YnRyYWN0aW5nIGZyb20gdGhlCisgKiBiZWdpbm5pbmcgb3IgZW5kIGFuZCBpbnZlcnRpbmcgdGhlIGNoYW5nZWQgYXJlYShzKS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitjbGlwX3VwZGF0ZV9tb2RlbGVzc19zZWxlY3Rpb24oY2IsIHJvdzEsIGNvbDEsIHJvdzIsIGNvbDIpCisgICAgVmltQ2xpcGJvYXJkICAgICpjYjsKKyAgICBpbnQJCSAgICByb3cxOworICAgIGludAkJICAgIGNvbDE7CisgICAgaW50CQkgICAgcm93MjsKKyAgICBpbnQJCSAgICBjb2wyOworeworICAgIC8qIFNlZSBpZiB3ZSBjaGFuZ2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiAqLworICAgIGlmIChyb3cxICE9IGNiLT5zdGFydC5sbnVtIHx8IGNvbDEgIT0gKGludCljYi0+c3RhcnQuY29sKQorICAgIHsKKwljbGlwX2ludmVydF9hcmVhKHJvdzEsIGNvbDEsIChpbnQpY2ItPnN0YXJ0LmxudW0sIGNiLT5zdGFydC5jb2wsCisJCQkJCQkJCSBDTElQX1RPR0dMRSk7CisJY2ItPnN0YXJ0LmxudW0gPSByb3cxOworCWNiLT5zdGFydC5jb2wgID0gY29sMTsKKyAgICB9CisKKyAgICAvKiBTZWUgaWYgd2UgY2hhbmdlZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gKi8KKyAgICBpZiAocm93MiAhPSBjYi0+ZW5kLmxudW0gfHwgY29sMiAhPSAoaW50KWNiLT5lbmQuY29sKQorICAgIHsKKwljbGlwX2ludmVydF9hcmVhKChpbnQpY2ItPmVuZC5sbnVtLCBjYi0+ZW5kLmNvbCwgcm93MiwgY29sMiwKKwkJCQkJCQkJIENMSVBfVE9HR0xFKTsKKwljYi0+ZW5kLmxudW0gPSByb3cyOworCWNiLT5lbmQuY29sICA9IGNvbDI7CisgICAgfQorfQorCisgICAgaW50CitjbGlwX2dlbl9vd25fc2VsZWN0aW9uKGNiZCkKKyAgICBWaW1DbGlwYm9hcmQJKmNiZDsKK3sKKyNpZmRlZiBGRUFUX1hDTElQQk9BUkQKKyMgaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSkKKwlyZXR1cm4gY2xpcF9tY2hfb3duX3NlbGVjdGlvbihjYmQpOworICAgIGVsc2UKKyMgZW5kaWYKKwlyZXR1cm4gY2xpcF94dGVybV9vd25fc2VsZWN0aW9uKGNiZCk7CisjZWxzZQorICAgIHJldHVybiBjbGlwX21jaF9vd25fc2VsZWN0aW9uKGNiZCk7CisjZW5kaWYKK30KKworICAgIHZvaWQKK2NsaXBfZ2VuX2xvc2Vfc2VsZWN0aW9uKGNiZCkKKyAgICBWaW1DbGlwYm9hcmQJKmNiZDsKK3sKKyNpZmRlZiBGRUFUX1hDTElQQk9BUkQKKyMgaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSkKKwljbGlwX21jaF9sb3NlX3NlbGVjdGlvbihjYmQpOworICAgIGVsc2UKKyMgZW5kaWYKKwljbGlwX3h0ZXJtX2xvc2Vfc2VsZWN0aW9uKGNiZCk7CisjZWxzZQorICAgIGNsaXBfbWNoX2xvc2Vfc2VsZWN0aW9uKGNiZCk7CisjZW5kaWYKK30KKworICAgIHZvaWQKK2NsaXBfZ2VuX3NldF9zZWxlY3Rpb24oY2JkKQorICAgIFZpbUNsaXBib2FyZAkqY2JkOworeworI2lmZGVmIEZFQVRfWENMSVBCT0FSRAorIyBpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlKQorCWNsaXBfbWNoX3NldF9zZWxlY3Rpb24oY2JkKTsKKyAgICBlbHNlCisjIGVuZGlmCisJY2xpcF94dGVybV9zZXRfc2VsZWN0aW9uKGNiZCk7CisjZWxzZQorICAgIGNsaXBfbWNoX3NldF9zZWxlY3Rpb24oY2JkKTsKKyNlbmRpZgorfQorCisgICAgdm9pZAorY2xpcF9nZW5fcmVxdWVzdF9zZWxlY3Rpb24oY2JkKQorICAgIFZpbUNsaXBib2FyZAkqY2JkOworeworI2lmZGVmIEZFQVRfWENMSVBCT0FSRAorIyBpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlKQorCWNsaXBfbWNoX3JlcXVlc3Rfc2VsZWN0aW9uKGNiZCk7CisgICAgZWxzZQorIyBlbmRpZgorCWNsaXBfeHRlcm1fcmVxdWVzdF9zZWxlY3Rpb24oY2JkKTsKKyNlbHNlCisgICAgY2xpcF9tY2hfcmVxdWVzdF9zZWxlY3Rpb24oY2JkKTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogRkVBVF9DTElQQk9BUkQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGlucHV0IGJ1ZmZlci4KKyAqIFRoaXMgaXMgdXNlZCBmb3IgYW55IEdVSSB2ZXJzaW9uLCBhbmQgdGhlIHVuaXggdGVybWluYWwgdmVyc2lvbi4KKyAqCisgKiBGb3IgVW5peCwgdGhlIGlucHV0IGNoYXJhY3RlcnMgYXJlIGJ1ZmZlcmVkIHRvIGJlIGFibGUgdG8gY2hlY2sgZm9yIGEKKyAqIENUUkwtQy4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgd2l0aCBzaWduYWxzLCBidXQgSSBkb24ndCBrbm93IGhvdyB0byBkbyB0aGF0CisgKiBpbiBhIHBvcnRhYmxlIHdheSBmb3IgYSB0dHkgaW4gUkFXIG1vZGUuCisgKgorICogRm9yIHRoZSBjbGllbnQtc2VydmVyIGNvZGUgaW4gdGhlIGNvbnNvbGUgdGhlIHJlY2VpdmVkIGtleXMgYXJlIHB1dCBpbiB0aGUKKyAqIGlucHV0IGJ1ZmZlci4KKyAqLworCisjaWYgZGVmaW5lZChVU0VfSU5QVVRfQlVGKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogSW50ZXJuYWwgdHlwZWFoZWFkIGJ1ZmZlci4gIEluY2x1ZGVzIGV4dHJhIHNwYWNlIGZvciBsb25nIGtleSBjb2RlCisgKiBkZXNjcmlwdGlvbnMgd2hpY2ggd291bGQgb3RoZXJ3aXNlIG92ZXJmbG93LiAgVGhlIGJ1ZmZlciBpcyBjb25zaWRlcmVkIGZ1bGwKKyAqIHdoZW4gb25seSB0aGlzIGV4dHJhIHNwYWNlIChvciBwYXJ0IG9mIGl0KSByZW1haW5zLgorICovCisjaWYgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkgfHwgZGVmaW5lZChGRUFUX05FVEJFQU5TX0lOVEcpIFwKKwl8fCBkZWZpbmVkKEZFQVRfQ0xJRU5UU0VSVkVSKQorICAgLyoKKyAgICAqIFN1biBXb3JrU2hvcCBhbmQgTmV0QmVhbnMgc3R1ZmYgZGVidWdnZXIgY29tbWFuZHMgaW50byB0aGUgaW5wdXQgYnVmZmVyLgorICAgICogVGhpcyByZXF1aXJlcyBhIGxhcmdlciBidWZmZXIuLi4KKyAgICAqIChNYWRzZW4pIEdvIHdpdGggdGhpcyBmb3IgcmVtb3RlIGlucHV0IGFzIHdlbGwgLi4uCisgICAgKi8KKyMgZGVmaW5lIElOQlVGTEVOIDQwOTYKKyNlbHNlCisjIGRlZmluZSBJTkJVRkxFTiAyNTAKKyNlbmRpZgorCitzdGF0aWMgY2hhcl91CWluYnVmW0lOQlVGTEVOICsgTUFYX0tFWV9DT0RFX0xFTl07CitzdGF0aWMgaW50CWluYnVmY291bnQgPSAwOwkgICAgLyogbnVtYmVyIG9mIGNoYXJzIGluIGluYnVmW10gKi8KKworLyoKKyAqIHZpbV9pc19pbnB1dF9idWZfZnVsbCgpLCB2aW1faXNfaW5wdXRfYnVmX2VtcHR5KCksIGFkZF90b19pbnB1dF9idWYoKSwgYW5kCisgKiB0cmFzaF9pbnB1dF9idWYoKSBhcmUgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgdGhlIGlucHV0IGJ1ZmZlci4gIFRoZXNlCisgKiBhcmUgdXNlZCBieSB0aGUgZ3VpXyogY2FsbHMgd2hlbiBhIEdVSSBpcyB1c2VkIHRvIGhhbmRsZSBrZXlib2FyZCBpbnB1dC4KKyAqLworCisgICAgaW50Cit2aW1faXNfaW5wdXRfYnVmX2Z1bGwoKQoreworICAgIHJldHVybiAoaW5idWZjb3VudCA+PSBJTkJVRkxFTik7Cit9CisKKyAgICBpbnQKK3ZpbV9pc19pbnB1dF9idWZfZW1wdHkoKQoreworICAgIHJldHVybiAoaW5idWZjb3VudCA9PSAwKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9PTEUpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgaW50Cit2aW1fZnJlZV9pbl9pbnB1dF9idWYoKQoreworICAgIHJldHVybiAoSU5CVUZMRU4gLSBpbmJ1ZmNvdW50KTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQoUFJPVE8pCisgICAgaW50Cit2aW1fdXNlZF9pbl9pbnB1dF9idWYoKQoreworICAgIHJldHVybiBpbmJ1ZmNvdW50OworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfRVZBTCkgfHwgZGVmaW5lZChGRUFUX0VYX0VYVFJBKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgaW5wdXQgYnVmZmVyIGFuZCBtYWtlIGl0IGVtcHR5LgorICogVGhlIHJldHVybmVkIHBvaW50ZXIgbXVzdCBiZSBwYXNzZWQgdG8gc2V0X2lucHV0X2J1ZigpIGxhdGVyLgorICovCisgICAgY2hhcl91ICoKK2dldF9pbnB1dF9idWYoKQoreworICAgIGdhcnJheV9UCSpnYXA7CisKKyAgICAvKiBXZSB1c2UgYSBncm93YXJyYXkgdG8gc3RvcmUgdGhlIGRhdGEgcG9pbnRlciBhbmQgdGhlIGxlbmd0aC4gKi8KKyAgICBnYXAgPSAoZ2FycmF5X1QgKilhbGxvYygodW5zaWduZWQpc2l6ZW9mKGdhcnJheV9UKSk7CisgICAgaWYgKGdhcCAhPSBOVUxMKQorICAgIHsKKwkvKiBBZGQgb25lIHRvIGF2b2lkIGEgemVybyBzaXplLiAqLworCWdhcC0+Z2FfZGF0YSA9IGFsbG9jKCh1bnNpZ25lZClpbmJ1ZmNvdW50ICsgMSk7CisJaWYgKGdhcC0+Z2FfZGF0YSAhPSBOVUxMKQorCSAgICBtY2hfbWVtbW92ZShnYXAtPmdhX2RhdGEsIGluYnVmLCAoc2l6ZV90KWluYnVmY291bnQpOworCWdhcC0+Z2FfbGVuID0gaW5idWZjb3VudDsKKyAgICB9CisgICAgdHJhc2hfaW5wdXRfYnVmKCk7CisgICAgcmV0dXJuIChjaGFyX3UgKilnYXA7Cit9CisKKy8qCisgKiBSZXN0b3JlIHRoZSBpbnB1dCBidWZmZXIgd2l0aCBhIHBvaW50ZXIgcmV0dXJuZWQgZnJvbSBnZXRfaW5wdXRfYnVmKCkuCisgKiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZCwgdGhpcyBvbmx5IHdvcmtzIG9uY2UhCisgKi8KKyAgICB2b2lkCitzZXRfaW5wdXRfYnVmKHApCisgICAgY2hhcl91CSpwOworeworICAgIGdhcnJheV9UCSpnYXAgPSAoZ2FycmF5X1QgKilwOworCisgICAgaWYgKGdhcCAhPSBOVUxMKQorICAgIHsKKwlpZiAoZ2FwLT5nYV9kYXRhICE9IE5VTEwpCisJeworCSAgICBtY2hfbWVtbW92ZShpbmJ1ZiwgZ2FwLT5nYV9kYXRhLCBnYXAtPmdhX2xlbik7CisJICAgIGluYnVmY291bnQgPSBnYXAtPmdhX2xlbjsKKwkgICAgdmltX2ZyZWUoZ2FwLT5nYV9kYXRhKTsKKwl9CisJdmltX2ZyZWUoZ2FwKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9HVUkpIHx8IGRlZmluZWQoRkVBVF9NT1VTRV9HUE0pIFwKKwl8fCBkZWZpbmVkKEZFQVRfWENMSVBCT0FSRCkgfHwgZGVmaW5lZChWTVMpIFwKKwl8fCBkZWZpbmVkKEZFQVRfU05JRkYpIHx8IGRlZmluZWQoRkVBVF9DTElFTlRTRVJWRVIpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQWRkIHRoZSBnaXZlbiBieXRlcyB0byB0aGUgaW5wdXQgYnVmZmVyCisgKiBTcGVjaWFsIGtleXMgc3RhcnQgd2l0aCBDU0kuICBBIHJlYWwgQ1NJIG11c3QgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgdG8KKyAqIENTSSBLU19FWFRSQSBLRV9DU0kuICBLX1NQRUNJQUwgZG9lc24ndCByZXF1aXJlIHRyYW5zbGF0aW9uLgorICovCisgICAgdm9pZAorYWRkX3RvX2lucHV0X2J1ZihzLCBsZW4pCisgICAgY2hhcl91ICAqczsKKyAgICBpbnQJICAgIGxlbjsKK3sKKyAgICBpZiAoaW5idWZjb3VudCArIGxlbiA+IElOQlVGTEVOICsgTUFYX0tFWV9DT0RFX0xFTikKKwlyZXR1cm47CSAgICAvKiBTaG91bGRuJ3QgZXZlciBoYXBwZW4hICovCisKKyNpZmRlZiBGRUFUX0hBTkdVTElOCisgICAgaWYgKChTdGF0ZSAmIChJTlNFUlR8Q01ETElORSkpICYmIGhhbmd1bF9pbnB1dF9zdGF0ZV9nZXQoKSkKKwlpZiAoKGxlbiA9IGhhbmd1bF9pbnB1dF9wcm9jZXNzKHMsIGxlbikpID09IDApCisJICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgd2hpbGUgKGxlbi0tKQorCWluYnVmW2luYnVmY291bnQrK10gPSAqcysrOworfQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGRUFUX1hJTSkgJiYgZGVmaW5lZChGRUFUX0dVSV9HVEspKSBcCisJfHwgKGRlZmluZWQoRkVBVF9NQllURSkgJiYgZGVmaW5lZChGRUFUX01CWVRFX0lNRSkpIFwKKwl8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEFkZCAic3RyW2xlbl0iIHRvIHRoZSBpbnB1dCBidWZmZXIgd2hpbGUgZXNjYXBpbmcgQ1NJIGJ5dGVzLgorICovCisgICAgdm9pZAorYWRkX3RvX2lucHV0X2J1Zl9jc2koY2hhcl91ICpzdHIsIGludCBsZW4pCit7CisgICAgaW50CQlpOworICAgIGNoYXJfdQlidWZbMl07CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisgICAgeworCWFkZF90b19pbnB1dF9idWYoc3RyICsgaSwgMSk7CisJaWYgKHN0cltpXSA9PSBDU0kpCisJeworCSAgICAvKiBUdXJuIENTSSBpbnRvIEtfQ1NJLiAqLworCSAgICBidWZbMF0gPSBLU19FWFRSQTsKKwkgICAgYnVmWzFdID0gKGludClLRV9DU0k7CisJICAgIGFkZF90b19pbnB1dF9idWYoYnVmLCAyKTsKKwl9CisgICAgfQorfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfSEFOR1VMSU4pIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorcHVzaF9yYXdfa2V5IChzLCBsZW4pCisgICAgY2hhcl91ICAqczsKKyAgICBpbnQJICAgIGxlbjsKK3sKKyAgICB3aGlsZSAobGVuLS0pCisJaW5idWZbaW5idWZjb3VudCsrXSA9ICpzKys7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9HVUkpIHx8IGRlZmluZWQoRkVBVF9FVkFMKSB8fCBkZWZpbmVkKEZFQVRfRVhfRVhUUkEpIFwKKwl8fCBkZWZpbmVkKFBST1RPKQorLyogUmVtb3ZlIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgaW5wdXQgYnVmZmVyLiAgQ2FsbGVkIHdoZW4gXkMgaXMgZm91bmQgKi8KKyAgICB2b2lkCit0cmFzaF9pbnB1dF9idWYoKQoreworICAgIGluYnVmY291bnQgPSAwOworfQorI2VuZGlmCisKKy8qCisgKiBSZWFkIGFzIG11Y2ggZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgYXMgcG9zc2libGUgdXAgdG8gbWF4bGVuLCBhbmQgc3RvcmUKKyAqIGl0IGluIGJ1Zi4KKyAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSBSZWFkKCkgaW4gdW5peC5jCisgKi8KKyAgICBpbnQKK3JlYWRfZnJvbV9pbnB1dF9idWYoYnVmLCBtYXhsZW4pCisgICAgY2hhcl91ICAqYnVmOworICAgIGxvbmcgICAgbWF4bGVuOworeworICAgIGlmIChpbmJ1ZmNvdW50ID09IDApCS8qIGlmIHRoZSBidWZmZXIgaXMgZW1wdHksIGZpbGwgaXQgKi8KKwlmaWxsX2lucHV0X2J1ZihUUlVFKTsKKyAgICBpZiAobWF4bGVuID4gaW5idWZjb3VudCkKKwltYXhsZW4gPSBpbmJ1ZmNvdW50OworICAgIG1jaF9tZW1tb3ZlKGJ1ZiwgaW5idWYsIChzaXplX3QpbWF4bGVuKTsKKyAgICBpbmJ1ZmNvdW50IC09IG1heGxlbjsKKyAgICBpZiAoaW5idWZjb3VudCkKKwltY2hfbWVtbW92ZShpbmJ1ZiwgaW5idWYgKyBtYXhsZW4sIChzaXplX3QpaW5idWZjb3VudCk7CisgICAgcmV0dXJuIChpbnQpbWF4bGVuOworfQorCisgICAgdm9pZAorZmlsbF9pbnB1dF9idWYoZXhpdF9vbl9lcnJvcikKKyAgICBpbnQJZXhpdF9vbl9lcnJvcjsKK3sKKyNpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFZNUykgfHwgZGVmaW5lZChNQUNPU19YX1VOSVgpCisgICAgaW50CQlsZW47CisgICAgaW50CQl0cnk7CisgICAgc3RhdGljIGludAlkaWRfcmVhZF9zb21ldGhpbmcgPSBGQUxTRTsKKyMgaWZkZWYgRkVBVF9NQllURQorICAgIHN0YXRpYyBjaGFyX3UgKnJlc3QgPSBOVUxMOwkgICAgLyogdW5jb252ZXJ0ZWQgcmVzdCBvZiBwcmV2aW91cyByZWFkICovCisgICAgc3RhdGljIGludAlyZXN0bGVuID0gMDsKKyAgICBpbnQJCXVuY29udmVydGVkOworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlKQorICAgIHsKKwlndWlfbWNoX3VwZGF0ZSgpOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKyNpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFZNUykgfHwgZGVmaW5lZChNQUNPU19YX1VOSVgpCisgICAgaWYgKHZpbV9pc19pbnB1dF9idWZfZnVsbCgpKQorCXJldHVybjsKKyAgICAvKgorICAgICAqIEZpbGxfaW5wdXRfYnVmKCkgaXMgb25seSBjYWxsZWQgd2hlbiB3ZSByZWFsbHkgbmVlZCBhIGNoYXJhY3Rlci4KKyAgICAgKiBJZiB3ZSBjYW4ndCBnZXQgYW55LCBidXQgdGhlcmUgaXMgc29tZSBpbiB0aGUgYnVmZmVyLCBqdXN0IHJldHVybi4KKyAgICAgKiBJZiB3ZSBjYW4ndCBnZXQgYW55LCBhbmQgdGhlcmUgaXNuJ3QgYW55IGluIHRoZSBidWZmZXIsIHdlIGdpdmUgdXAgYW5kCisgICAgICogZXhpdCBWaW0uCisgICAgICovCisjIGlmZGVmIF9fQkVPU19fCisgICAgLyoKKyAgICAgKiBPbiB0aGUgQmVCb3ggdmVyc2lvbiAoZm9yIG5vdyksIGFsbCBpbnB1dCBpcyBzZWNyZXRseSBwZXJmb3JtZWQgd2l0aGluCisgICAgICogYmVvc19zZWxlY3QoKSB3aGljaCBpcyBjYWxsZWQgZnJvbSBSZWFsV2FpdEZvckNoYXIoKS4KKyAgICAgKi8KKyAgICB3aGlsZSAoIXZpbV9pc19pbnB1dF9idWZfZnVsbCgpICYmIFJlYWxXYWl0Rm9yQ2hhcihyZWFkX2NtZF9mZCwgMCwgTlVMTCkpCisJICAgIDsKKyAgICBsZW4gPSBpbmJ1ZmNvdW50OworICAgIGluYnVmY291bnQgPSAwOworIyBlbHNlCisKKyMgIGlmZGVmIEZFQVRfU05JRkYKKyAgICBpZiAoc25pZmZfcmVxdWVzdF93YWl0aW5nKQorICAgIHsKKwlhZGRfdG9faW5wdXRfYnVmKChjaGFyX3UgKikiXDIzM3NuaWZmIiw2KTsgLyogcmVzdWx0cyBpbiBLX1NOSUZGICovCisJc25pZmZfcmVxdWVzdF93YWl0aW5nID0gMDsKKwl3YW50X3NuaWZmX3JlcXVlc3QgPSAwOworCXJldHVybjsKKyAgICB9CisjICBlbmRpZgorCisjIGlmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAocmVzdCAhPSBOVUxMKQorICAgIHsKKwkvKiBVc2UgcmVtYWluZGVyIG9mIHByZXZpb3VzIGNhbGwsIHN0YXJ0cyB3aXRoIGFuIGludmFsaWQgY2hhcmFjdGVyCisJICogdGhhdCBtYXkgYmVjb21lIHZhbGlkIHdoZW4gcmVhZGluZyBtb3JlLiAqLworCWlmIChyZXN0bGVuID4gSU5CVUZMRU4gLSBpbmJ1ZmNvdW50KQorCSAgICB1bmNvbnZlcnRlZCA9IElOQlVGTEVOIC0gaW5idWZjb3VudDsKKwllbHNlCisJICAgIHVuY29udmVydGVkID0gcmVzdGxlbjsKKwltY2hfbWVtbW92ZShpbmJ1ZiArIGluYnVmY291bnQsIHJlc3QsIHVuY29udmVydGVkKTsKKwlpZiAodW5jb252ZXJ0ZWQgPT0gcmVzdGxlbikKKwl7CisJICAgIHZpbV9mcmVlKHJlc3QpOworCSAgICByZXN0ID0gTlVMTDsKKwl9CisJZWxzZQorCXsKKwkgICAgcmVzdGxlbiAtPSB1bmNvbnZlcnRlZDsKKwkgICAgbWNoX21lbW1vdmUocmVzdCwgcmVzdCArIHVuY29udmVydGVkLCByZXN0bGVuKTsKKwl9CisJaW5idWZjb3VudCArPSB1bmNvbnZlcnRlZDsKKyAgICB9CisgICAgZWxzZQorCXVuY29udmVydGVkID0gMDsKKyNlbmRpZgorCisgICAgbGVuID0gMDsJLyogdG8gYXZvaWQgZ2NjIHdhcm5pbmcgKi8KKyAgICBmb3IgKHRyeSA9IDA7IHRyeSA8IDEwMDsgKyt0cnkpCisgICAgeworIyAgaWZkZWYgVk1TCisJbGVuID0gdm1zX3JlYWQoCisjICBlbHNlCisJbGVuID0gcmVhZChyZWFkX2NtZF9mZCwKKyMgIGVuZGlmCisJICAgIChjaGFyICopaW5idWYgKyBpbmJ1ZmNvdW50LCAoc2l6ZV90KSgoSU5CVUZMRU4gLSBpbmJ1ZmNvdW50KQorIyAgaWZkZWYgRkVBVF9NQllURQorCQkvIGlucHV0X2NvbnYudmNfZmFjdG9yCisjICBlbmRpZgorCQkpKTsKKyMgIGlmIDAKKwkJKQkvKiBhdm9pZCBzeW50YXggaGlnaGxpZ2h0IGVycm9yICovCisjICBlbmRpZgorCWlmIChsZW4gPiAwIHx8IGdvdF9pbnQpCisJICAgIGJyZWFrOworCS8qCisJICogSWYgcmVhZGluZyBzdGRpbiByZXN1bHRzIGluIGFuIGVycm9yLCBjb250aW51ZSByZWFkaW5nIHN0ZGVyci4KKwkgKiBUaGlzIGhlbHBzIHdoZW4gdXNpbmcgImZvbyB8IHhhcmdzIHZpbSIuCisJICovCisJaWYgKCFkaWRfcmVhZF9zb21ldGhpbmcgJiYgIWlzYXR0eShyZWFkX2NtZF9mZCkgJiYgcmVhZF9jbWRfZmQgPT0gMCkKKwl7CisJICAgIGludCBtID0gY3VyX3Rtb2RlOworCisJICAgIC8qIFdlIHByb2JhYmx5IHNldCB0aGUgd3JvbmcgZmlsZSBkZXNjcmlwdG9yIHRvIHJhdyBtb2RlLiAgU3dpdGNoCisJICAgICAqIGJhY2sgdG8gY29va2VkIG1vZGUsIHVzZSBhbm90aGVyIGRlc2NyaXB0b3IgYW5kIHNldCB0aGUgbW9kZSB0bworCSAgICAgKiB3aGF0IGl0IHdhcy4gKi8KKwkgICAgc2V0dG1vZGUoVE1PREVfQ09PSyk7CisjaWZkZWYgSEFWRV9EVVAKKwkgICAgLyogVXNlIHN0ZGVyciBmb3Igc3RkaW4sIGFsc28gd29ya3MgZm9yIHNoZWxsIGNvbW1hbmRzLiAqLworCSAgICBjbG9zZSgwKTsKKwkgICAgZHVwKDIpOworI2Vsc2UKKwkgICAgcmVhZF9jbWRfZmQgPSAyOwkvKiByZWFkIGZyb20gc3RkZXJyIGluc3RlYWQgb2Ygc3RkaW4gKi8KKyNlbmRpZgorCSAgICBzZXR0bW9kZShtKTsKKwl9CisJaWYgKCFleGl0X29uX2Vycm9yKQorCSAgICByZXR1cm47CisgICAgfQorIyBlbmRpZgorICAgIGlmIChsZW4gPD0gMCAmJiAhZ290X2ludCkKKwlyZWFkX2Vycm9yX2V4aXQoKTsKKyAgICBpZiAobGVuID4gMCkKKwlkaWRfcmVhZF9zb21ldGhpbmcgPSBUUlVFOworICAgIGlmIChnb3RfaW50KQorICAgIHsKKwkvKiBJbnRlcnJ1cHRlZCwgcHJldGVuZCBhIENUUkwtQyB3YXMgdHlwZWQuICovCisJaW5idWZbMF0gPSAzOworCWluYnVmY291bnQgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworIyBpZmRlZiBGRUFUX01CWVRFCisJLyoKKwkgKiBNYXkgcGVyZm9ybSBjb252ZXJzaW9uIG9uIHRoZSBpbnB1dCBjaGFyYWN0ZXJzLgorCSAqIEluY2x1ZGUgdGhlIHVuY29udmVydGVkIHJlc3Qgb2YgdGhlIHByZXZpb3VzIGNhbGwuCisJICogSWYgdGhlcmUgaXMgYW4gaW5jb21wbGV0ZSBjaGFyIGF0IHRoZSBlbmQgaXQgaXMga2VwdCBmb3IgdGhlIG5leHQKKwkgKiB0aW1lLCByZWFkaW5nIG1vcmUgYnl0ZXMgc2hvdWxkIG1ha2UgY29udmVyc2lvbiBwb3NzaWJsZS4KKwkgKiBEb24ndCBkbyB0aGlzIGluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IHRoZSBpbnB1dCBidWZmZXIgaXMgdG9vCisJICogc21hbGwgKCJyZXN0IiBzdGlsbCBjb250YWlucyBtb3JlIGJ5dGVzKS4KKwkgKi8KKwlpZiAoaW5wdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwl7CisJICAgIGluYnVmY291bnQgLT0gdW5jb252ZXJ0ZWQ7CisJICAgIGxlbiA9IGNvbnZlcnRfaW5wdXRfc2FmZShpbmJ1ZiArIGluYnVmY291bnQsCisJCQkJICAgICBsZW4gKyB1bmNvbnZlcnRlZCwgSU5CVUZMRU4gLSBpbmJ1ZmNvdW50LAorCQkJCSAgICAgICByZXN0ID09IE5VTEwgPyAmcmVzdCA6IE5VTEwsICZyZXN0bGVuKTsKKwl9CisjIGVuZGlmCisJd2hpbGUgKGxlbi0tID4gMCkKKwl7CisJICAgIC8qCisJICAgICAqIGlmIGEgQ1RSTC1DIHdhcyB0eXBlZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGJ1ZmZlciBhbmQgc2V0IGdvdF9pbnQKKwkgICAgICovCisJICAgIGlmIChpbmJ1ZltpbmJ1ZmNvdW50XSA9PSAzICYmIGN0cmxfY19pbnRlcnJ1cHRzKQorCSAgICB7CisJCS8qIHJlbW92ZSBldmVyeXRoaW5nIHR5cGVkIGJlZm9yZSB0aGUgQ1RSTC1DICovCisJCW1jaF9tZW1tb3ZlKGluYnVmLCBpbmJ1ZiArIGluYnVmY291bnQsIChzaXplX3QpKGxlbiArIDEpKTsKKwkJaW5idWZjb3VudCA9IDA7CisJCWdvdF9pbnQgPSBUUlVFOworCSAgICB9CisJICAgICsraW5idWZjb3VudDsKKwl9CisgICAgfQorI2VuZGlmIC8qIFVOSVggb3IgT1MyIG9yIFZNUyovCit9CisjZW5kaWYgLyogZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKE9TMikgIHx8IGRlZmluZWQoVk1TKSAqLworCisvKgorICogRXhpdCBiZWNhdXNlIG9mIGFuIGlucHV0IHJlYWQgZXJyb3IuCisgKi8KKyAgICB2b2lkCityZWFkX2Vycm9yX2V4aXQoKQoreworICAgIGlmIChzaWxlbnRfbW9kZSkJLyogTm9ybWFsIHdheSB0byBleGl0IGZvciAiZXggLXMiICovCisJZ2V0b3V0KDApOworICAgIFNUUkNQWShJT2J1ZmYsIF8oIlZpbTogRXJyb3IgcmVhZGluZyBpbnB1dCwgZXhpdGluZy4uLlxuIikpOworICAgIHByZXNlcnZlX2V4aXQoKTsKK30KKworI2lmIGRlZmluZWQoQ1VSU09SX1NIQVBFKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIE1heSB1cGRhdGUgdGhlIHNoYXBlIG9mIHRoZSBjdXJzb3IuCisgKi8KKyAgICB2b2lkCit1aV9jdXJzb3Jfc2hhcGUoKQoreworIyBpZmRlZiBGRUFUX0dVSQorICAgIGlmIChndWkuaW5fdXNlKQorCWd1aV91cGRhdGVfY3Vyc29yX2xhdGVyKCk7CisjIGVuZGlmCisjIGlmZGVmIE1DSF9DVVJTT1JfU0hBUEUKKyAgICBtY2hfdXBkYXRlX2N1cnNvcigpOworIyBlbmRpZgorfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfQ0xJUEJPQVJEKSB8fCBkZWZpbmVkKEZFQVRfR1VJKSB8fCBkZWZpbmVkKEZFQVRfUklHSFRMRUZUKSBcCisJfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDaGVjayBib3VuZHMgZm9yIGNvbHVtbiBudW1iZXIKKyAqLworICAgIGludAorY2hlY2tfY29sKGNvbCkKKyAgICBpbnQJICAgIGNvbDsKK3sKKyAgICBpZiAoY29sIDwgMCkKKwlyZXR1cm4gMDsKKyAgICBpZiAoY29sID49IChpbnQpc2NyZWVuX0NvbHVtbnMpCisJcmV0dXJuIChpbnQpc2NyZWVuX0NvbHVtbnMgLSAxOworICAgIHJldHVybiBjb2w7Cit9CisKKy8qCisgKiBDaGVjayBib3VuZHMgZm9yIHJvdyBudW1iZXIKKyAqLworICAgIGludAorY2hlY2tfcm93KHJvdykKKyAgICBpbnQJICAgIHJvdzsKK3sKKyAgICBpZiAocm93IDwgMCkKKwlyZXR1cm4gMDsKKyAgICBpZiAocm93ID49IChpbnQpc2NyZWVuX1Jvd3MpCisJcmV0dXJuIChpbnQpc2NyZWVuX1Jvd3MgLSAxOworICAgIHJldHVybiByb3c7Cit9CisjZW5kaWYKKworLyoKKyAqIFN0dWZmIGZvciB0aGUgWCBjbGlwYm9hcmQuICBTaGFyZWQgYmV0d2VlbiBWTVMgYW5kIFVuaXguCisgKi8KKworI2lmIGRlZmluZWQoRkVBVF9YQ0xJUEJPQVJEKSB8fCBkZWZpbmVkKEZFQVRfR1VJX1gxMSkgfHwgZGVmaW5lZChQUk9UTykKKyMgaW5jbHVkZSA8WDExL1hhdG9tLmg+CisjIGluY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKworLyoKKyAqIE9wZW4gdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgKGlmIGl0IGhhc24ndCBiZWVuIG9wZW5lZCB5ZXQpLgorICogVXNlZCBmb3IgTW90aWYgYW5kIEF0aGVuYSBHVUkgYW5kIHRoZSB4dGVybSBjbGlwYm9hcmQuCisgKi8KKyAgICB2b2lkCitvcGVuX2FwcF9jb250ZXh0KCkKK3sKKyAgICBpZiAoYXBwX2NvbnRleHQgPT0gTlVMTCkKKyAgICB7CisJWHRUb29sa2l0SW5pdGlhbGl6ZSgpOworCWFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBBdG9tCXZpbV9hdG9tOwkvKiBWaW0ncyBvd24gc3BlY2lhbCBzZWxlY3Rpb24gZm9ybWF0ICovCisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIEF0b20JdmltZW5jX2F0b207CS8qIFZpbSdzIGV4dGVuZGVkIHNlbGVjdGlvbiBmb3JtYXQgKi8KKyNlbmRpZgorc3RhdGljIEF0b20JY29tcG91bmRfdGV4dF9hdG9tOworc3RhdGljIEF0b20JdGV4dF9hdG9tOworc3RhdGljIEF0b20JdGFyZ2V0c19hdG9tOworCisgICAgdm9pZAoreDExX3NldHVwX2F0b21zKGRweSkKKyAgICBEaXNwbGF5CSpkcHk7Cit7CisgICAgdmltX2F0b20JICAgICAgID0gWEludGVybkF0b20oZHB5LCBWSU1fQVRPTV9OQU1FLCAgIEZhbHNlKTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgdmltZW5jX2F0b20JICAgICAgID0gWEludGVybkF0b20oZHB5LCBWSU1FTkNfQVRPTV9OQU1FLEZhbHNlKTsKKyNlbmRpZgorICAgIGNvbXBvdW5kX3RleHRfYXRvbSA9IFhJbnRlcm5BdG9tKGRweSwgIkNPTVBPVU5EX1RFWFQiLCBGYWxzZSk7CisgICAgdGV4dF9hdG9tCSAgICAgICA9IFhJbnRlcm5BdG9tKGRweSwgIlRFWFQiLAkgICBGYWxzZSk7CisgICAgdGFyZ2V0c19hdG9tICAgICAgID0gWEludGVybkF0b20oZHB5LCAiVEFSR0VUUyIsICAgICAgIEZhbHNlKTsKKyAgICBjbGlwX3N0YXIuc2VsX2F0b20gPSBYQV9QUklNQVJZOworICAgIGNsaXBfcGx1cy5zZWxfYXRvbSA9IFhJbnRlcm5BdG9tKGRweSwgIkNMSVBCT0FSRCIsICAgICBGYWxzZSk7Cit9CisKKy8qCisgKiBYIFNlbGVjdGlvbiBzdHVmZiwgZm9yIGN1dHRpbmcgYW5kIHBhc3RpbmcgdGV4dCB0byBvdGhlciB3aW5kb3dzLgorICovCisKK3N0YXRpYyB2b2lkICBjbGlwX3gxMV9yZXF1ZXN0X3NlbGVjdGlvbl9jYiBfX0FSR1MoKFdpZGdldCwgWHRQb2ludGVyLCBBdG9tICosIEF0b20gKiwgWHRQb2ludGVyLCBsb25nX3UgKiwgaW50ICopKTsKKworLyogQVJHU1VTRUQgKi8KKyAgICBzdGF0aWMgdm9pZAorY2xpcF94MTFfcmVxdWVzdF9zZWxlY3Rpb25fY2Iodywgc3VjY2Vzcywgc2VsX2F0b20sIHR5cGUsIHZhbHVlLCBsZW5ndGgsCisJCQkgICAgICBmb3JtYXQpCisgICAgV2lkZ2V0CXc7CisgICAgWHRQb2ludGVyCXN1Y2Nlc3M7CisgICAgQXRvbQkqc2VsX2F0b207CisgICAgQXRvbQkqdHlwZTsKKyAgICBYdFBvaW50ZXIJdmFsdWU7CisgICAgbG9uZ191CSpsZW5ndGg7CisgICAgaW50CQkqZm9ybWF0OworeworICAgIGludAkJbW90aW9uX3R5cGU7CisgICAgbG9uZ191CWxlbjsKKyAgICBjaGFyX3UJKnA7CisgICAgY2hhcgkqKnRleHRfbGlzdCA9IE5VTEw7CisgICAgVmltQ2xpcGJvYXJkCSpjYmQ7CisjaWZkZWYgRkVBVF9NQllURQorICAgIGNoYXJfdQkqdG1wYnVmID0gTlVMTDsKKyNlbmRpZgorCisgICAgaWYgKCpzZWxfYXRvbSA9PSBjbGlwX3BsdXMuc2VsX2F0b20pCisJY2JkID0gJmNsaXBfcGx1czsKKyAgICBlbHNlCisJY2JkID0gJmNsaXBfc3RhcjsKKworICAgIGlmICh2YWx1ZSA9PSBOVUxMIHx8ICpsZW5ndGggPT0gMCkKKyAgICB7CisJY2xpcF9mcmVlX3NlbGVjdGlvbihjYmQpOwkvKiA/Pz8gIFt3aGF0J3MgdGhlIHF1ZXJ5P10gKi8KKwkqKGludCAqKXN1Y2Nlc3MgPSBGQUxTRTsKKwlyZXR1cm47CisgICAgfQorICAgIG1vdGlvbl90eXBlID0gTUNIQVI7CisgICAgcCA9IChjaGFyX3UgKil2YWx1ZTsKKyAgICBsZW4gPSAqbGVuZ3RoOworICAgIGlmICgqdHlwZSA9PSB2aW1fYXRvbSkKKyAgICB7CisJbW90aW9uX3R5cGUgPSAqcCsrOworCWxlbi0tOworICAgIH0KKworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBlbHNlIGlmICgqdHlwZSA9PSB2aW1lbmNfYXRvbSkKKyAgICB7CisJY2hhcl91CQkqZW5jOworCXZpbWNvbnZfVAljb252OworCWludAkJY29udmxlbjsKKworCW1vdGlvbl90eXBlID0gKnArKzsKKwktLWxlbjsKKworCWVuYyA9IHA7CisJcCArPSBTVFJMRU4ocCkgKyAxOworCWxlbiAtPSBwIC0gZW5jOworCisJLyogSWYgdGhlIGVuY29kaW5nIG9mIHRoZSB0ZXh0IGlzIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycsIGF0dGVtcHQKKwkgKiBjb252ZXJ0aW5nIGl0LiAqLworCWNvbnYudmNfdHlwZSA9IENPTlZfTk9ORTsKKwljb252ZXJ0X3NldHVwKCZjb252LCBlbmMsIHBfZW5jKTsKKwlpZiAoY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwl7CisJICAgIGNvbnZsZW4gPSBsZW47CS8qIE5lZWQgdG8gdXNlIGFuIGludCBoZXJlLiAqLworCSAgICB0bXBidWYgPSBzdHJpbmdfY29udmVydCgmY29udiwgcCwgJmNvbnZsZW4pOworCSAgICBsZW4gPSBjb252bGVuOworCSAgICBpZiAodG1wYnVmICE9IE5VTEwpCisJCXAgPSB0bXBidWY7CisJICAgIGNvbnZlcnRfc2V0dXAoJmNvbnYsIE5VTEwsIE5VTEwpOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIGVsc2UgaWYgKCp0eXBlID09IGNvbXBvdW5kX3RleHRfYXRvbSB8fCAoCisjaWZkZWYgRkVBVF9NQllURQorCQllbmNfZGJjcyAhPSAwICYmCisjZW5kaWYKKwkJKnR5cGUgPT0gdGV4dF9hdG9tKSkKKyAgICB7CisJWFRleHRQcm9wZXJ0eQl0ZXh0X3Byb3A7CisJaW50CQluX3RleHQgPSAwOworCWludAkJc3RhdHVzOworCisJdGV4dF9wcm9wLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKil2YWx1ZTsKKwl0ZXh0X3Byb3AuZW5jb2RpbmcgPSAqdHlwZTsKKwl0ZXh0X3Byb3AuZm9ybWF0ID0gKmZvcm1hdDsKKwl0ZXh0X3Byb3Aubml0ZW1zID0gU1RSTEVOKHZhbHVlKTsKKwlzdGF0dXMgPSBYbWJUZXh0UHJvcGVydHlUb1RleHRMaXN0KFhfRElTUExBWSwgJnRleHRfcHJvcCwKKwkJCQkJCQkgJnRleHRfbGlzdCwgJm5fdGV4dCk7CisJaWYgKHN0YXR1cyAhPSBTdWNjZXNzIHx8IG5fdGV4dCA8IDEpCisJeworCSAgICAqKGludCAqKXN1Y2Nlc3MgPSBGQUxTRTsKKwkgICAgcmV0dXJuOworCX0KKwlwID0gKGNoYXJfdSAqKXRleHRfbGlzdFswXTsKKwlsZW4gPSBTVFJMRU4ocCk7CisgICAgfQorICAgIGNsaXBfeWFua19zZWxlY3Rpb24obW90aW9uX3R5cGUsIHAsIChsb25nKWxlbiwgY2JkKTsKKworICAgIGlmICh0ZXh0X2xpc3QgIT0gTlVMTCkKKwlYRnJlZVN0cmluZ0xpc3QodGV4dF9saXN0KTsKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgdmltX2ZyZWUodG1wYnVmKTsKKyNlbmRpZgorICAgIFh0RnJlZSgoY2hhciAqKXZhbHVlKTsKKyAgICAqKGludCAqKXN1Y2Nlc3MgPSBUUlVFOworfQorCisgICAgdm9pZAorY2xpcF94MTFfcmVxdWVzdF9zZWxlY3Rpb24obXlTaGVsbCwgZHB5LCBjYmQpCisgICAgV2lkZ2V0CW15U2hlbGw7CisgICAgRGlzcGxheQkqZHB5OworICAgIFZpbUNsaXBib2FyZAkqY2JkOworeworICAgIFhFdmVudAlldmVudDsKKyAgICBBdG9tCXR5cGU7CisgICAgc3RhdGljIGludAlzdWNjZXNzOworICAgIGludAkJaTsKKyAgICBpbnQJCW5ieXRlcyA9IDA7CisgICAgY2hhcl91CSpidWZmZXI7CisKKyAgICBmb3IgKGkgPQorI2lmZGVmIEZFQVRfTUJZVEUKKwkgICAgMAorI2Vsc2UKKwkgICAgMQorI2VuZGlmCisJICAgIDsgaSA8IDU7IGkrKykKKyAgICB7CisJc3dpdGNoIChpKQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGNhc2UgMDogIHR5cGUgPSB2aW1lbmNfYXRvbTsJYnJlYWs7CisjZW5kaWYKKwkgICAgY2FzZSAxOiAgdHlwZSA9IHZpbV9hdG9tOwkJYnJlYWs7CisJICAgIGNhc2UgMjogIHR5cGUgPSBjb21wb3VuZF90ZXh0X2F0b207IGJyZWFrOworCSAgICBjYXNlIDM6ICB0eXBlID0gdGV4dF9hdG9tOwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6IHR5cGUgPSBYQV9TVFJJTkc7CisJfQorCVh0R2V0U2VsZWN0aW9uVmFsdWUobXlTaGVsbCwgY2JkLT5zZWxfYXRvbSwgdHlwZSwKKwkgICAgY2xpcF94MTFfcmVxdWVzdF9zZWxlY3Rpb25fY2IsIChYdFBvaW50ZXIpJnN1Y2Nlc3MsIEN1cnJlbnRUaW1lKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBmb3IgdGhlIHNlbGVjdGlvbiBnb2VzIG91dCBiZWZvcmUgd2FpdGluZyBmb3IKKwkgKiBhIHJlc3BvbnNlLiAqLworCVhGbHVzaChkcHkpOworCisJLyoKKwkgKiBXYWl0IGZvciByZXN1bHQgb2Ygc2VsZWN0aW9uIHJlcXVlc3QsIG90aGVyd2lzZSBpZiB3ZSB0eXBlIG1vcmUKKwkgKiBjaGFyYWN0ZXJzLCB0aGVuIHRoZXkgd2lsbCBhcHBlYXIgYmVmb3JlIHRoZSBvbmUgdGhhdCByZXF1ZXN0ZWQgdGhlCisJICogcGFzdGUhICBEb24ndCB3b3JyeSwgd2Ugd2lsbCBjYXRjaCB1cCB3aXRoIGFueSBvdGhlciBldmVudHMgbGF0ZXIuCisJICovCisJZm9yICg7OykKKwl7CisJICAgIGlmIChYQ2hlY2tUeXBlZEV2ZW50KGRweSwgU2VsZWN0aW9uTm90aWZ5LCAmZXZlbnQpKQorCQlicmVhazsKKworCSAgICAvKiBEbyB3ZSBuZWVkIHRoaXM/ICBQcm9iYWJseSBub3QuICovCisJICAgIFhTeW5jKGRweSwgRmFsc2UpOworCisJICAgIC8qIEJlcm5oYXJkIFdhbGxlIHNvbHZlZCBhIHNsb3cgcGFzdGUgcmVzcG9uc2UgaW4gYW4gWCB0ZXJtaW5hbCBieQorCSAgICAgKiBhZGRpbmc6IHVzbGVlcCgxMDAwMCk7IGhlcmUuICovCisJfQorCisJLyogdGhpcyBpcyB3aGVyZSBjbGlwX3gxMV9yZXF1ZXN0X3NlbGVjdGlvbl9jYigpIGlzIGFjdHVhbGx5IGNhbGxlZCAqLworCVh0RGlzcGF0Y2hFdmVudCgmZXZlbnQpOworCisJaWYgKHN1Y2Nlc3MpCisJICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBGaW5hbCBmYWxsYmFjayBwb3NpdGlvbiAtIHVzZSB0aGUgWCBDVVRfQlVGRkVSMCBzdG9yZSAqLworICAgIGJ1ZmZlciA9IChjaGFyX3UgKilYRmV0Y2hCdWZmZXIoZHB5LCAmbmJ5dGVzLCAwKTsKKyAgICBpZiAobmJ5dGVzID4gMCkKKyAgICB7CisJLyogR290IHNvbWV0aGluZyAqLworCWNsaXBfeWFua19zZWxlY3Rpb24oTUNIQVIsIGJ1ZmZlciwgKGxvbmcpbmJ5dGVzLCBjYmQpOworCVhGcmVlKCh2b2lkICopYnVmZmVyKTsKKwlpZiAocF92ZXJib3NlID4gMCkKKwkgICAgc21zZygoY2hhcl91ICopXygiVXNlZCBDVVRfQlVGRkVSMCBpbnN0ZWFkIG9mIGVtcHR5IHNlbGVjdGlvbiIpICk7CisgICAgfQorfQorCitzdGF0aWMgQm9vbGVhbgljbGlwX3gxMV9jb252ZXJ0X3NlbGVjdGlvbl9jYiBfX0FSR1MoKFdpZGdldCwgQXRvbSAqLCBBdG9tICosIEF0b20gKiwgWHRQb2ludGVyICosIGxvbmdfdSAqLCBpbnQgKikpOworCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyBCb29sZWFuCitjbGlwX3gxMV9jb252ZXJ0X3NlbGVjdGlvbl9jYih3LCBzZWxfYXRvbSwgdGFyZ2V0LCB0eXBlLCB2YWx1ZSwgbGVuZ3RoLCBmb3JtYXQpCisgICAgV2lkZ2V0CXc7CisgICAgQXRvbQkqc2VsX2F0b207CisgICAgQXRvbQkqdGFyZ2V0OworICAgIEF0b20JKnR5cGU7CisgICAgWHRQb2ludGVyCSp2YWx1ZTsKKyAgICBsb25nX3UJKmxlbmd0aDsKKyAgICBpbnQJCSpmb3JtYXQ7Cit7CisgICAgY2hhcl91CSpzdHJpbmc7CisgICAgY2hhcl91CSpyZXN1bHQ7CisgICAgaW50CQltb3Rpb25fdHlwZTsKKyAgICBWaW1DbGlwYm9hcmQJKmNiZDsKKyAgICBpbnQJCWk7CisKKyAgICBpZiAoKnNlbF9hdG9tID09IGNsaXBfcGx1cy5zZWxfYXRvbSkKKwljYmQgPSAmY2xpcF9wbHVzOworICAgIGVsc2UKKwljYmQgPSAmY2xpcF9zdGFyOworCisgICAgaWYgKCFjYmQtPm93bmVkKQorCXJldHVybiBGYWxzZTsJICAgIC8qIFNob3VsZG4ndCBldmVyIGhhcHBlbiAqLworCisgICAgLyogcmVxdWVzdG9yIHdhbnRzIHRvIGtub3cgd2hhdCB0YXJnZXQgdHlwZXMgd2Ugc3VwcG9ydCAqLworICAgIGlmICgqdGFyZ2V0ID09IHRhcmdldHNfYXRvbSkKKyAgICB7CisJQXRvbSAqYXJyYXk7CisKKwlpZiAoKGFycmF5ID0gKEF0b20gKilYdE1hbGxvYygodW5zaWduZWQpKHNpemVvZihBdG9tKSAqIDYpKSkgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZhbHNlOworCSp2YWx1ZSA9IChYdFBvaW50ZXIpYXJyYXk7CisJaSA9IDA7CisJYXJyYXlbaSsrXSA9IFhBX1NUUklORzsKKwlhcnJheVtpKytdID0gdGFyZ2V0c19hdG9tOworI2lmZGVmIEZFQVRfTUJZVEUKKwlhcnJheVtpKytdID0gdmltZW5jX2F0b207CisjZW5kaWYKKwlhcnJheVtpKytdID0gdmltX2F0b207CisJYXJyYXlbaSsrXSA9IHRleHRfYXRvbTsKKwlhcnJheVtpKytdID0gY29tcG91bmRfdGV4dF9hdG9tOworCSp0eXBlID0gWEFfQVRPTTsKKwkvKiBUaGlzIHVzZWQgdG8gYmU6ICpmb3JtYXQgPSBzaXplb2YoQXRvbSkgKiA4OyBidXQgdGhhdCBjYXVzZWQKKwkgKiBjcmFzaGVzIG9uIDY0IGJpdCBtYWNoaW5lcy4gKFBldGVyIERlcnIpICovCisJKmZvcm1hdCA9IDMyOworCSpsZW5ndGggPSBpOworCXJldHVybiBUcnVlOworICAgIH0KKworICAgIGlmICggICAgICAgKnRhcmdldCAhPSBYQV9TVFJJTkcKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgICYmICp0YXJnZXQgIT0gdmltZW5jX2F0b20KKyNlbmRpZgorCSAgICAmJiAqdGFyZ2V0ICE9IHZpbV9hdG9tCisJICAgICYmICp0YXJnZXQgIT0gdGV4dF9hdG9tCisJICAgICYmICp0YXJnZXQgIT0gY29tcG91bmRfdGV4dF9hdG9tKQorCXJldHVybiBGYWxzZTsKKworICAgIGNsaXBfZ2V0X3NlbGVjdGlvbihjYmQpOworICAgIG1vdGlvbl90eXBlID0gY2xpcF9jb252ZXJ0X3NlbGVjdGlvbigmc3RyaW5nLCBsZW5ndGgsIGNiZCk7CisgICAgaWYgKG1vdGlvbl90eXBlIDwgMCkKKwlyZXR1cm4gRmFsc2U7CisKKyAgICAvKiBGb3Igb3VyIG93biBmb3JtYXQsIHRoZSBmaXJzdCBieXRlIGNvbnRhaW5zIHRoZSBtb3Rpb24gdHlwZSAqLworICAgIGlmICgqdGFyZ2V0ID09IHZpbV9hdG9tKQorCSgqbGVuZ3RoKSsrOworCisjaWZkZWYgRkVBVF9NQllURQorICAgIC8qIE91ciBvd24gZm9ybWF0IHdpdGggZW5jb2Rpbmc6IG1vdGlvbiAnZW5jb2RpbmcnIE5VTCB0ZXh0ICovCisgICAgaWYgKCp0YXJnZXQgPT0gdmltZW5jX2F0b20pCisJKmxlbmd0aCArPSBTVFJMRU4ocF9lbmMpICsgMjsKKyNlbmRpZgorCisgICAgKnZhbHVlID0gWHRNYWxsb2MoKENhcmRpbmFsKSpsZW5ndGgpOworICAgIHJlc3VsdCA9IChjaGFyX3UgKikqdmFsdWU7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIHsKKwl2aW1fZnJlZShzdHJpbmcpOworCXJldHVybiBGYWxzZTsKKyAgICB9CisKKyAgICBpZiAoKnRhcmdldCA9PSBYQV9TVFJJTkcpCisgICAgeworCW1jaF9tZW1tb3ZlKHJlc3VsdCwgc3RyaW5nLCAoc2l6ZV90KSgqbGVuZ3RoKSk7CisJKnR5cGUgPSBYQV9TVFJJTkc7CisgICAgfQorICAgIGVsc2UgaWYgKCp0YXJnZXQgPT0gY29tcG91bmRfdGV4dF9hdG9tCisJICAgIHx8ICp0YXJnZXQgPT0gdGV4dF9hdG9tKQorICAgIHsKKwlYVGV4dFByb3BlcnR5CXRleHRfcHJvcDsKKwljaGFyCQkqc3RyaW5nX250ID0gKGNoYXIgKilhbGxvYygodW5zaWduZWQpKmxlbmd0aCArIDEpOworCisJLyogY3JlYXRlIE5VTCB0ZXJtaW5hdGVkIHN0cmluZyB3aGljaCBYbWJUZXh0TGlzdFRvVGV4dFByb3BlcnR5IHdhbnRzICovCisJbWNoX21lbW1vdmUoc3RyaW5nX250LCBzdHJpbmcsIChzaXplX3QpKmxlbmd0aCk7CisJc3RyaW5nX250WypsZW5ndGhdID0gTlVMOworCVhtYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoWF9ESVNQTEFZLCAoY2hhciAqKikmc3RyaW5nX250LCAxLAorCQkJCQkgICAgICBYQ29tcG91bmRUZXh0U3R5bGUsICZ0ZXh0X3Byb3ApOworCXZpbV9mcmVlKHN0cmluZ19udCk7CisJWHRGcmVlKCp2YWx1ZSk7CQkJLyogcmVwbGFjZSB3aXRoIENPTVBPVU5EIHRleHQgKi8KKwkqdmFsdWUgPSAoWHRQb2ludGVyKSh0ZXh0X3Byb3AudmFsdWUpOwkvKiAgICBmcm9tIHBsYWluIHRleHQgKi8KKwkqbGVuZ3RoID0gdGV4dF9wcm9wLm5pdGVtczsKKwkqdHlwZSA9IGNvbXBvdW5kX3RleHRfYXRvbTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgZWxzZSBpZiAoKnRhcmdldCA9PSB2aW1lbmNfYXRvbSkKKyAgICB7CisJaW50IGwgPSBTVFJMRU4ocF9lbmMpOworCisJcmVzdWx0WzBdID0gbW90aW9uX3R5cGU7CisJU1RSQ1BZKHJlc3VsdCArIDEsIHBfZW5jKTsKKwltY2hfbWVtbW92ZShyZXN1bHQgKyBsICsgMiwgc3RyaW5nLCAoc2l6ZV90KSgqbGVuZ3RoIC0gbCAtIDIpKTsKKwkqdHlwZSA9IHZpbWVuY19hdG9tOworICAgIH0KKyNlbmRpZgorCisgICAgZWxzZQorICAgIHsKKwlyZXN1bHRbMF0gPSBtb3Rpb25fdHlwZTsKKwltY2hfbWVtbW92ZShyZXN1bHQgKyAxLCBzdHJpbmcsIChzaXplX3QpKCpsZW5ndGggLSAxKSk7CisJKnR5cGUgPSB2aW1fYXRvbTsKKyAgICB9CisgICAgKmZvcm1hdCA9IDg7CSAgICAvKiA4IGJpdHMgcGVyIGNoYXIgKi8KKyAgICB2aW1fZnJlZShzdHJpbmcpOworICAgIHJldHVybiBUcnVlOworfQorCitzdGF0aWMgdm9pZCAgY2xpcF94MTFfbG9zZV9vd25lcnNoaXBfY2IgX19BUkdTKChXaWRnZXQsIEF0b20gKikpOworCisvKiBBUkdTVVNFRCAqLworICAgIHN0YXRpYyB2b2lkCitjbGlwX3gxMV9sb3NlX293bmVyc2hpcF9jYih3LCBzZWxfYXRvbSkKKyAgICBXaWRnZXQgIHc7CisgICAgQXRvbSAgICAqc2VsX2F0b207Cit7CisgICAgaWYgKCpzZWxfYXRvbSA9PSBjbGlwX3BsdXMuc2VsX2F0b20pCisJY2xpcF9sb3NlX3NlbGVjdGlvbigmY2xpcF9wbHVzKTsKKyAgICBlbHNlCisJY2xpcF9sb3NlX3NlbGVjdGlvbigmY2xpcF9zdGFyKTsKK30KKworICAgIHZvaWQKK2NsaXBfeDExX2xvc2Vfc2VsZWN0aW9uKG15U2hlbGwsIGNiZCkKKyAgICBXaWRnZXQJbXlTaGVsbDsKKyAgICBWaW1DbGlwYm9hcmQJKmNiZDsKK3sKKyAgICBYdERpc293blNlbGVjdGlvbihteVNoZWxsLCBjYmQtPnNlbF9hdG9tLCBDdXJyZW50VGltZSk7Cit9CisKKyAgICBpbnQKK2NsaXBfeDExX293bl9zZWxlY3Rpb24obXlTaGVsbCwgY2JkKQorICAgIFdpZGdldAlteVNoZWxsOworICAgIFZpbUNsaXBib2FyZAkqY2JkOworeworICAgIGlmIChYdE93blNlbGVjdGlvbihteVNoZWxsLCBjYmQtPnNlbF9hdG9tLCBDdXJyZW50VGltZSwKKwkgICAgY2xpcF94MTFfY29udmVydF9zZWxlY3Rpb25fY2IsIGNsaXBfeDExX2xvc2Vfb3duZXJzaGlwX2NiLAorCQkJCQkJCSAgICAgICBOVUxMKSA9PSBGYWxzZSkKKwlyZXR1cm4gRkFJTDsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBTZW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB0byB0aGUgY2xpcGJvYXJkLiAgRG8gbm90aGluZyBmb3IgWCBiZWNhdXNlIHdlCisgKiB3aWxsIGZpbGwgaW4gdGhlIHNlbGVjdGlvbiBvbmx5IHdoZW4gcmVxdWVzdGVkIGJ5IGFub3RoZXIgYXBwLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitjbGlwX3gxMV9zZXRfc2VsZWN0aW9uKGNiZCkKKyAgICBWaW1DbGlwYm9hcmQgKmNiZDsKK3sKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX01PVVNFKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBzcGVjaWZpZWQgcm93IGFuZCBjb2x1bW4gb24gdGhlIHNjcmVlbi4KKyAqIENoYW5nZSBjdXJyZW50IHdpbmRvdyBpZiBuZWNjZXNhcnkuCVJldHVybnMgYW4gaW50ZWdlciB3aXRoIHRoZQorICogQ1VSU09SX01PVkVEIGJpdCBzZXQgaWYgdGhlIGN1cnNvciBoYXMgbW92ZWQgb3IgdW5zZXQgb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBNT1VTRV9GT0xEX0NMT1NFIGJpdCBpcyBzZXQgd2hlbiBjbGlja2VkIG9uIHRoZSAnLScgaW4gYSBmb2xkIGNvbHVtbi4KKyAqIFRoZSBNT1VTRV9GT0xEX09QRU4gYml0IGlzIHNldCB3aGVuIGNsaWNrZWQgb24gdGhlICcrJyBpbiBhIGZvbGQgY29sdW1uLgorICoKKyAqIElmIGZsYWdzIGhhcyBNT1VTRV9GT0NVUywgdGhlbiB0aGUgY3VycmVudCB3aW5kb3cgd2lsbCBub3QgYmUgY2hhbmdlZCwgYW5kCisgKiBpZiB0aGUgbW91c2UgaXMgb3V0c2lkZSB0aGUgd2luZG93IHRoZW4gdGhlIHRleHQgd2lsbCBzY3JvbGwsIG9yIGlmIHRoZQorICogbW91c2Ugd2FzIHByZXZpb3VzbHkgb24gYSBzdGF0dXMgbGluZSwgdGhlbiB0aGUgc3RhdHVzIGxpbmUgbWF5IGJlIGRyYWdnZWQuCisgKgorICogSWYgZmxhZ3MgaGFzIE1PVVNFX01BWV9WSVMsIHRoZW4gVklzdWFsIG1vZGUgd2lsbCBiZSBzdGFydGVkIGJlZm9yZSB0aGUKKyAqIGN1cnNvciBpcyBtb3ZlZCB1bmxlc3MgdGhlIGN1cnNvciB3YXMgb24gYSBzdGF0dXMgbGluZS4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmUgb2YgSU5fVU5LTk9XTiwgSU5fQlVGRkVSLCBJTl9TVEFUVVNfTElORSBvcgorICogSU5fU0VQX0xJTkUgZGVwZW5kaW5nIG9uIHdoZXJlIHRoZSBjdXJzb3Igd2FzIGNsaWNrZWQuCisgKgorICogSWYgZmxhZ3MgaGFzIE1PVVNFX01BWV9TVE9QX1ZJUywgdGhlbiBWaXN1YWwgbW9kZSB3aWxsIGJlIHN0b3BwZWQsIHVubGVzcworICogdGhlIG1vdXNlIGlzIG9uIHRoZSBzdGF0dXMgbGluZSBvZiB0aGUgc2FtZSB3aW5kb3cuCisgKgorICogSWYgZmxhZ3MgaGFzIE1PVVNFX0RJRF9NT1ZFLCBub3RoaW5nIGlzIGRvbmUgaWYgdGhlIG1vdXNlIGRpZG4ndCBtb3ZlIHNpbmNlCisgKiB0aGUgbGFzdCBjYWxsLgorICoKKyAqIElmIGZsYWdzIGhhcyBNT1VTRV9TRVRQT1MsIG5vdGhpbmcgaXMgZG9uZSwgb25seSB0aGUgY3VycmVudCBwb3NpdGlvbiBpcworICogcmVtZW1iZXJlZC4KKyAqLworICAgIGludAoranVtcF90b19tb3VzZShmbGFncywgaW5jbHVzaXZlLCB3aGljaF9idXR0b24pCisgICAgaW50CQlmbGFnczsKKyAgICBpbnQJCSppbmNsdXNpdmU7CS8qIHVzZWQgZm9yIGluY2x1c2l2ZSBvcGVyYXRvciwgY2FuIGJlIE5VTEwgKi8KKyAgICBpbnQJCXdoaWNoX2J1dHRvbjsJLyogTU9VU0VfTEVGVCwgTU9VU0VfUklHSFQsIE1PVVNFX01JRERMRSAqLworeworICAgIHN0YXRpYyBpbnQJb25fc3RhdHVzX2xpbmUgPSAwOwkvKiAjbGluZXMgYmVsb3cgYm90dG9tIG9mIHdpbmRvdyAqLworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgc3RhdGljIGludAlvbl9zZXBfbGluZSA9IDA7CS8qIG9uIHNlcGFyYXRvciByaWdodCBvZiB3aW5kb3cgKi8KKyNlbmRpZgorICAgIHN0YXRpYyBpbnQJcHJldl9yb3cgPSAtMTsKKyAgICBzdGF0aWMgaW50CXByZXZfY29sID0gLTE7CisgICAgc3RhdGljIHdpbl9UICpkcmFnd2luID0gTlVMTDsJLyogd2luZG93IGJlaW5nIGRyYWdnZWQgKi8KKyAgICBzdGF0aWMgaW50CWRpZF9kcmFnID0gRkFMU0U7CS8qIGRyYWcgd2FzIG5vdGljZWQgKi8KKworICAgIHdpbl9UCSp3cCwgKm9sZF9jdXJ3aW47CisgICAgcG9zX1QJb2xkX2N1cnNvcjsKKyAgICBpbnQJCWNvdW50OworICAgIGludAkJZmlyc3Q7CisgICAgaW50CQlyb3cgPSBtb3VzZV9yb3c7CisgICAgaW50CQljb2wgPSBtb3VzZV9jb2w7CisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaW50CQltb3VzZV9jaGFyOworI2VuZGlmCisKKyAgICBtb3VzZV9wYXN0X2JvdHRvbSA9IEZBTFNFOworICAgIG1vdXNlX3Bhc3RfZW9sID0gRkFMU0U7CisKKyAgICBpZiAoZmxhZ3MgJiBNT1VTRV9SRUxFQVNFRCkKKyAgICB7CisJLyogT24gYnV0dG9uIHJlbGVhc2Ugd2UgbWF5IGNoYW5nZSB3aW5kb3cgZm9jdXMgaWYgcG9zaXRpb25lZCBvbiBhCisJICogc3RhdHVzIGxpbmUgYW5kIG5vIGRyYWdnaW5nIGhhcHBlbmVkLiAqLworCWlmIChkcmFnd2luICE9IE5VTEwgJiYgIWRpZF9kcmFnKQorCSAgICBmbGFncyAmPSB+KE1PVVNFX0ZPQ1VTIHwgTU9VU0VfRElEX01PVkUpOworCWRyYWd3aW4gPSBOVUxMOworCWRpZF9kcmFnID0gRkFMU0U7CisgICAgfQorCisgICAgaWYgKChmbGFncyAmIE1PVVNFX0RJRF9NT1ZFKQorCSAgICAmJiBwcmV2X3JvdyA9PSBtb3VzZV9yb3cKKwkgICAgJiYgcHJldl9jb2wgPT0gbW91c2VfY29sKQorICAgIHsKK3JldG5vbW92ZToKKwkvKiBiZWZvcmUgbW92aW5nIHRoZSBjdXJzb3IgZm9yIGEgbGVmdCBjbGljayB3aWNoIGlzIE5PVCBpbiBhIHN0YXR1cworCSAqIGxpbmUsIHN0b3AgVmlzdWFsIG1vZGUgKi8KKwlpZiAob25fc3RhdHVzX2xpbmUpCisJICAgIHJldHVybiBJTl9TVEFUVVNfTElORTsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCWlmIChvbl9zZXBfbGluZSkKKwkgICAgcmV0dXJuIElOX1NFUF9MSU5FOworI2VuZGlmCisjaWZkZWYgRkVBVF9WSVNVQUwKKwlpZiAoZmxhZ3MgJiBNT1VTRV9NQVlfU1RPUF9WSVMpCisJeworCSAgICBlbmRfdmlzdWFsX21vZGUoKTsKKwkgICAgcmVkcmF3X2N1cmJ1Zl9sYXRlcihJTlZFUlRFRCk7CS8qIGRlbGV0ZSB0aGUgaW52ZXJzaW9uICovCisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChGRUFUX0NNRFdJTikgJiYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkKKwkvKiBDb250aW51ZSBhIG1vZGVsZXNzIHNlbGVjdGlvbiBpbiBhbm90aGVyIHdpbmRvdy4gKi8KKwlpZiAoY21kd2luX3R5cGUgIT0gMCAmJiByb3cgPCBXX1dJTlJPVyhjdXJ3aW4pKQorCSAgICByZXR1cm4gSU5fT1RIRVJfV0lOOworI2VuZGlmCisJcmV0dXJuIElOX0JVRkZFUjsKKyAgICB9CisKKyAgICBwcmV2X3JvdyA9IG1vdXNlX3JvdzsKKyAgICBwcmV2X2NvbCA9IG1vdXNlX2NvbDsKKworICAgIGlmIChmbGFncyAmIE1PVVNFX1NFVFBPUykKKwlnb3RvIHJldG5vbW92ZTsJCQkJLyogdWdseSBnb3RvLi4uICovCisKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICAvKiBSZW1lbWJlciB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBtb3VzZSwgaXQgbWlnaHQgYmUgYSAnLScgb3IgJysnIGluIHRoZQorICAgICAqIGZvbGQgY29sdW1uLiAqLworICAgIGlmIChyb3cgPj0gMCAmJiByb3cgPCBSb3dzICYmIGNvbCA+PSAwICYmIGNvbCA8PSBDb2x1bW5zKQorCW1vdXNlX2NoYXIgPSBTY3JlZW5MaW5lc1tMaW5lT2Zmc2V0W3Jvd10gKyBjb2xdOworICAgIGVsc2UKKwltb3VzZV9jaGFyID0gJyAnOworI2VuZGlmCisKKyAgICBvbGRfY3Vyd2luID0gY3Vyd2luOworICAgIG9sZF9jdXJzb3IgPSBjdXJ3aW4tPndfY3Vyc29yOworCisgICAgaWYgKCEoZmxhZ3MgJiBNT1VTRV9GT0NVUykpCisgICAgeworCWlmIChyb3cgPCAwIHx8IGNvbCA8IDApCQkJLyogY2hlY2sgaWYgaXQgbWFrZXMgc2Vuc2UgKi8KKwkgICAgcmV0dXJuIElOX1VOS05PV047CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkvKiBmaW5kIHRoZSB3aW5kb3cgd2hlcmUgdGhlIHJvdyBpcyBpbiAqLworCXdwID0gbW91c2VfZmluZF93aW4oJnJvdywgJmNvbCk7CisjZWxzZQorCXdwID0gZmlyc3R3aW47CisjZW5kaWYKKwlkcmFnd2luID0gTlVMTDsKKwkvKgorCSAqIHdpbnBvcyBhbmQgaGVpZ2h0IG1heSBjaGFuZ2UgaW4gd2luX2VudGVyKCkhCisJICovCisJaWYgKHJvdyA+PSB3cC0+d19oZWlnaHQpCQkvKiBJbiAob3IgYmVsb3cpIHN0YXR1cyBsaW5lICovCisJeworCSAgICBvbl9zdGF0dXNfbGluZSA9IHJvdyAtIHdwLT53X2hlaWdodCArIDE7CisJICAgIGRyYWd3aW4gPSB3cDsKKwl9CisJZWxzZQorCSAgICBvbl9zdGF0dXNfbGluZSA9IDA7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwlpZiAoY29sID49IHdwLT53X3dpZHRoKQkJLyogSW4gc2VwYXJhdG9yIGxpbmUgKi8KKwl7CisJICAgIG9uX3NlcF9saW5lID0gY29sIC0gd3AtPndfd2lkdGggKyAxOworCSAgICBkcmFnd2luID0gd3A7CisJfQorCWVsc2UKKwkgICAgb25fc2VwX2xpbmUgPSAwOworCisJLyogVGhlIHJpZ2h0bW9zdCBjaGFyYWN0ZXIgb2YgdGhlIHN0YXR1cyBsaW5lIG1pZ2h0IGJlIGEgdmVydGljYWwKKwkgKiBzZXBhcmF0b3IgY2hhcmFjdGVyIGlmIHRoZXJlIGlzIG5vIGNvbm5lY3Rpbmcgd2luZG93IHRvIHRoZSByaWdodC4gKi8KKwlpZiAob25fc3RhdHVzX2xpbmUgJiYgb25fc2VwX2xpbmUpCisJeworCSAgICBpZiAoc3RsX2Nvbm5lY3RlZCh3cCkpCisJCW9uX3NlcF9saW5lID0gMDsKKwkgICAgZWxzZQorCQlvbl9zdGF0dXNfbGluZSA9IDA7CisJfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCS8qIEJlZm9yZSBqdW1waW5nIHRvIGFub3RoZXIgYnVmZmVyLCBvciBtb3ZpbmcgdGhlIGN1cnNvciBmb3IgYSBsZWZ0CisJICogY2xpY2ssIHN0b3AgVmlzdWFsIG1vZGUuICovCisJaWYgKFZJc3VhbF9hY3RpdmUKKwkJJiYgKHdwLT53X2J1ZmZlciAhPSBjdXJ3aW4tPndfYnVmZmVyCisJCSAgICB8fCAoIW9uX3N0YXR1c19saW5lCisjIGlmZGVmIEZFQVRfVkVSVFNQTElUCisJCQkmJiAhb25fc2VwX2xpbmUKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9GT0xESU5HCisJCQkmJiAoCisjICBpZmRlZiBGRUFUX1JJR0hUTEVGVAorCQkJICAgIHdwLT53X3BfcmwgPyBjb2wgPCBXX1dJRFRIKHdwKSAtIHdwLT53X3BfZmRjIDoKKyMgIGVuZGlmCisJCQkgICAgY29sID49IHdwLT53X3BfZmRjCisjICBpZmRlZiBGRUFUX0NNRFdJTgorCQkJCSAgKyAoY21kd2luX3R5cGUgPT0gMCAmJiB3cCA9PSBjdXJ3aW4gPyAwIDogMSkKKyMgIGVuZGlmCisJCQkgICAgKQorIyBlbmRpZgorCQkJJiYgKGZsYWdzICYgTU9VU0VfTUFZX1NUT1BfVklTKSkpKQorCXsKKwkgICAgZW5kX3Zpc3VhbF9tb2RlKCk7CisJICAgIHJlZHJhd19jdXJidWZfbGF0ZXIoSU5WRVJURUQpOwkvKiBkZWxldGUgdGhlIGludmVyc2lvbiAqLworCX0KKyNlbmRpZgorI2lmZGVmIEZFQVRfQ01EV0lOCisJaWYgKGNtZHdpbl90eXBlICE9IDAgJiYgd3AgIT0gY3Vyd2luKQorCXsKKwkgICAgLyogQSBjbGljayBvdXRzaWRlIHRoZSBjb21tYW5kLWxpbmUgd2luZG93OiBVc2UgbW9kZWxlc3MKKwkgICAgICogc2VsZWN0aW9uIGlmIHBvc3NpYmxlLiAgQWxsb3cgZHJhZ2dpbmcgdGhlIHN0YXR1cyBsaW5lIG9mCisJICAgICAqIHdpbmRvd3MganVzdCBhYm92ZSB0aGUgY29tbWFuZC1saW5lIHdpbmRvdy4gKi8KKwkgICAgaWYgKHdwLT53X3dpbnJvdyArIHdwLT53X2hlaWdodAorCQkgICAgICAgIT0gY3Vyd2luLT53X3ByZXYtPndfd2lucm93ICsgY3Vyd2luLT53X3ByZXYtPndfaGVpZ2h0KQorCSAgICB7CisJCW9uX3N0YXR1c19saW5lID0gMDsKKwkJZHJhZ3dpbiA9IE5VTEw7CisJICAgIH0KKyMgaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkgICAgb25fc2VwX2xpbmUgPSAwOworIyBlbmRpZgorIyBpZmRlZiBGRUFUX0NMSVBCT0FSRAorCSAgICBpZiAob25fc3RhdHVzX2xpbmUpCisJCXJldHVybiBJTl9TVEFUVVNfTElORTsKKwkgICAgcmV0dXJuIElOX09USEVSX1dJTjsKKyMgZWxzZQorCSAgICByb3cgPSAwOworCSAgICBjb2wgKz0gd3AtPndfd2luY29sOworCSAgICB3cCA9IGN1cndpbjsKKyMgZW5kaWYKKwl9CisjZW5kaWYKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkvKiBPbmx5IGNoYW5nZSB3aW5kb3cgZm9jdXMgd2hlbiBub3QgY2xpY2tpbmcgb24gb3IgZHJhZ2dpbmcgdGhlCisJICogc3RhdHVzIGxpbmUuICBEbyBjaGFuZ2UgZm9jdXMgd2hlbiByZWxlYXNpbmcgdGhlIG1vdXNlIGJ1dHRvbgorCSAqIChNT1VTRV9GT0NVUyB3YXMgc2V0IGFib3ZlIGlmIHdlIGRyYWdnZWQgZmlyc3QpLiAqLworCWlmIChkcmFnd2luID09IE5VTEwgfHwgKGZsYWdzICYgTU9VU0VfUkVMRUFTRUQpKQorCSAgICB3aW5fZW50ZXIod3AsIFRSVUUpOwkJLyogY2FuIG1ha2Ugd3AgaW52YWxpZCEgKi8KKyMgaWZkZWYgQ0hFQ0tfRE9VQkxFX0NMSUNLCisJLyogc2V0IHRvcGxpbmUsIHRvIGJlIGFibGUgdG8gY2hlY2sgZm9yIGRvdWJsZSBjbGljayBvdXJzZWx2ZXMgKi8KKwlpZiAoY3Vyd2luICE9IG9sZF9jdXJ3aW4pCisJICAgIHNldF9tb3VzZV90b3BsaW5lKGN1cndpbik7CisjIGVuZGlmCisjZW5kaWYKKwlpZiAob25fc3RhdHVzX2xpbmUpCQkJLyogSW4gKG9yIGJlbG93KSBzdGF0dXMgbGluZSAqLworCXsKKwkgICAgLyogRG9uJ3QgdXNlIHN0YXJ0X2Fycm93KCkgaWYgd2UncmUgaW4gdGhlIHNhbWUgd2luZG93ICovCisJICAgIGlmIChjdXJ3aW4gPT0gb2xkX2N1cndpbikKKwkJcmV0dXJuIElOX1NUQVRVU19MSU5FOworCSAgICBlbHNlCisJCXJldHVybiBJTl9TVEFUVVNfTElORSB8IENVUlNPUl9NT1ZFRDsKKwl9CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwlpZiAob25fc2VwX2xpbmUpCQkJLyogSW4gKG9yIGJlbG93KSBzdGF0dXMgbGluZSAqLworCXsKKwkgICAgLyogRG9uJ3QgdXNlIHN0YXJ0X2Fycm93KCkgaWYgd2UncmUgaW4gdGhlIHNhbWUgd2luZG93ICovCisJICAgIGlmIChjdXJ3aW4gPT0gb2xkX2N1cndpbikKKwkJcmV0dXJuIElOX1NFUF9MSU5FOworCSAgICBlbHNlCisJCXJldHVybiBJTl9TRVBfTElORSB8IENVUlNPUl9NT1ZFRDsKKwl9CisjZW5kaWYKKworCWN1cndpbi0+d19jdXJzb3IubG51bSA9IGN1cndpbi0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfR1VJCisJLyogcmVtZW1iZXIgdG9wbGluZSwgbmVlZGVkIGZvciBkb3VibGUgY2xpY2sgKi8KKwlndWlfcHJldl90b3BsaW5lID0gY3Vyd2luLT53X3RvcGxpbmU7CisjIGlmZGVmIEZFQVRfRElGRgorCWd1aV9wcmV2X3RvcGZpbGwgPSBjdXJ3aW4tPndfdG9wZmlsbDsKKyMgZW5kaWYKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlIGlmIChvbl9zdGF0dXNfbGluZSAmJiB3aGljaF9idXR0b24gPT0gTU9VU0VfTEVGVCkKKyAgICB7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisJaWYgKGRyYWd3aW4gIT0gTlVMTCkKKwl7CisJICAgIC8qIERyYWcgdGhlIHN0YXR1cyBsaW5lICovCisJICAgIGNvdW50ID0gcm93IC0gZHJhZ3dpbi0+d193aW5yb3cgLSBkcmFnd2luLT53X2hlaWdodCArIDEKKwkJCQkJCQkgICAgIC0gb25fc3RhdHVzX2xpbmU7CisJICAgIHdpbl9kcmFnX3N0YXR1c19saW5lKGRyYWd3aW4sIGNvdW50KTsKKwkgICAgZGlkX2RyYWcgfD0gY291bnQ7CisJfQorI2VuZGlmCisJcmV0dXJuIElOX1NUQVRVU19MSU5FOwkJCS8qIEN1cnNvciBkaWRuJ3QgbW92ZSAqLworICAgIH0KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGVsc2UgaWYgKG9uX3NlcF9saW5lICYmIHdoaWNoX2J1dHRvbiA9PSBNT1VTRV9MRUZUKQorICAgIHsKKwlpZiAoZHJhZ3dpbiAhPSBOVUxMKQorCXsKKwkgICAgLyogRHJhZyB0aGUgc2VwYXJhdG9yIGNvbHVtbiAqLworCSAgICBjb3VudCA9IGNvbCAtIGRyYWd3aW4tPndfd2luY29sIC0gZHJhZ3dpbi0+d193aWR0aCArIDEKKwkJCQkJCQkJLSBvbl9zZXBfbGluZTsKKwkgICAgd2luX2RyYWdfdnNlcF9saW5lKGRyYWd3aW4sIGNvdW50KTsKKwkgICAgZGlkX2RyYWcgfD0gY291bnQ7CisJfQorCXJldHVybiBJTl9TRVBfTElORTsJCQkvKiBDdXJzb3IgZGlkbid0IG1vdmUgKi8KKyAgICB9CisjZW5kaWYKKyAgICBlbHNlIC8qIGtlZXBfd2luZG93X2ZvY3VzIG11c3QgYmUgVFJVRSAqLworICAgIHsKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCS8qIGJlZm9yZSBtb3ZpbmcgdGhlIGN1cnNvciBmb3IgYSBsZWZ0IGNsaWNrLCBzdG9wIFZpc3VhbCBtb2RlICovCisJaWYgKGZsYWdzICYgTU9VU0VfTUFZX1NUT1BfVklTKQorCXsKKwkgICAgZW5kX3Zpc3VhbF9tb2RlKCk7CisJICAgIHJlZHJhd19jdXJidWZfbGF0ZXIoSU5WRVJURUQpOwkvKiBkZWxldGUgdGhlIGludmVyc2lvbiAqLworCX0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0NNRFdJTikgJiYgZGVmaW5lZChGRUFUX0NMSVBCT0FSRCkKKwkvKiBDb250aW51ZSBhIG1vZGVsZXNzIHNlbGVjdGlvbiBpbiBhbm90aGVyIHdpbmRvdy4gKi8KKwlpZiAoY21kd2luX3R5cGUgIT0gMCAmJiByb3cgPCBXX1dJTlJPVyhjdXJ3aW4pKQorCSAgICByZXR1cm4gSU5fT1RIRVJfV0lOOworI2VuZGlmCisKKwlyb3cgLT0gV19XSU5ST1coY3Vyd2luKTsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCWNvbCAtPSBXX1dJTkNPTChjdXJ3aW4pOworI2VuZGlmCisKKwkvKgorCSAqIFdoZW4gY2xpY2tpbmcgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHdpbmRvdywgc2Nyb2xsIHRoZSBzY3JlZW4uCisJICogU2Nyb2xsIGJ5IGhvd2V2ZXIgbWFueSByb3dzIG91dHNpZGUgdGhlIHdpbmRvdyB3ZSBhcmUuCisJICovCisJaWYgKHJvdyA8IDApCisJeworCSAgICBjb3VudCA9IDA7CisJICAgIGZvciAoZmlyc3QgPSBUUlVFOyBjdXJ3aW4tPndfdG9wbGluZSA+IDE7ICkKKwkgICAgeworI2lmZGVmIEZFQVRfRElGRgorCQlpZiAoY3Vyd2luLT53X3RvcGZpbGwgPCBkaWZmX2NoZWNrKGN1cndpbiwgY3Vyd2luLT53X3RvcGxpbmUpKQorCQkgICAgKytjb3VudDsKKwkJZWxzZQorI2VuZGlmCisJCSAgICBjb3VudCArPSBwbGluZXMoY3Vyd2luLT53X3RvcGxpbmUgLSAxKTsKKwkJaWYgKCFmaXJzdCAmJiBjb3VudCA+IC1yb3cpCisJCSAgICBicmVhazsKKwkJZmlyc3QgPSBGQUxTRTsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkJaGFzRm9sZGluZyhjdXJ3aW4tPndfdG9wbGluZSwgJmN1cndpbi0+d190b3BsaW5lLCBOVUxMKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRElGRgorCQlpZiAoY3Vyd2luLT53X3RvcGZpbGwgPCBkaWZmX2NoZWNrKGN1cndpbiwgY3Vyd2luLT53X3RvcGxpbmUpKQorCQkgICAgKytjdXJ3aW4tPndfdG9wZmlsbDsKKwkJZWxzZQorI2VuZGlmCisJCXsKKwkJICAgIC0tY3Vyd2luLT53X3RvcGxpbmU7CisjaWZkZWYgRkVBVF9ESUZGCisJCSAgICBjdXJ3aW4tPndfdG9wZmlsbCA9IDA7CisjZW5kaWYKKwkJfQorCSAgICB9CisjaWZkZWYgRkVBVF9ESUZGCisJICAgIGNoZWNrX3RvcGZpbGwoY3Vyd2luLCBGQUxTRSk7CisjZW5kaWYKKwkgICAgY3Vyd2luLT53X3ZhbGlkICY9CisJCSAgICAgIH4oVkFMSURfV1JPV3xWQUxJRF9DUk9XfFZBTElEX0JPVExJTkV8VkFMSURfQk9UTElORV9BUCk7CisJICAgIHJlZHJhd19sYXRlcihWQUxJRCk7CisJICAgIHJvdyA9IDA7CisJfQorCWVsc2UgaWYgKHJvdyA+PSBjdXJ3aW4tPndfaGVpZ2h0KQorCXsKKwkgICAgY291bnQgPSAwOworCSAgICBmb3IgKGZpcnN0ID0gVFJVRTsgY3Vyd2luLT53X3RvcGxpbmUgPCBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsgKQorCSAgICB7CisjaWZkZWYgRkVBVF9ESUZGCisJCWlmIChjdXJ3aW4tPndfdG9wZmlsbCA+IDApCisJCSAgICArK2NvdW50OworCQllbHNlCisjZW5kaWYKKwkJICAgIGNvdW50ICs9IHBsaW5lcyhjdXJ3aW4tPndfdG9wbGluZSk7CisJCWlmICghZmlyc3QgJiYgY291bnQgPiByb3cgLSBjdXJ3aW4tPndfaGVpZ2h0ICsgMSkKKwkJICAgIGJyZWFrOworCQlmaXJzdCA9IEZBTFNFOworI2lmZGVmIEZFQVRfRk9MRElORworCQlpZiAoaGFzRm9sZGluZyhjdXJ3aW4tPndfdG9wbGluZSwgTlVMTCwgJmN1cndpbi0+d190b3BsaW5lKQorCQkJJiYgY3Vyd2luLT53X3RvcGxpbmUgPT0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCSAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIEZFQVRfRElGRgorCQlpZiAoY3Vyd2luLT53X3RvcGZpbGwgPiAwKQorCQkgICAgLS1jdXJ3aW4tPndfdG9wZmlsbDsKKwkJZWxzZQorI2VuZGlmCisJCXsKKwkJICAgICsrY3Vyd2luLT53X3RvcGxpbmU7CisjaWZkZWYgRkVBVF9ESUZGCisJCSAgICBjdXJ3aW4tPndfdG9wZmlsbCA9CisJCQkJICAgZGlmZl9jaGVja19maWxsKGN1cndpbiwgY3Vyd2luLT53X3RvcGxpbmUpOworI2VuZGlmCisJCX0KKwkgICAgfQorI2lmZGVmIEZFQVRfRElGRgorCSAgICBjaGVja190b3BmaWxsKGN1cndpbiwgRkFMU0UpOworI2VuZGlmCisJICAgIHJlZHJhd19sYXRlcihWQUxJRCk7CisJICAgIGN1cndpbi0+d192YWxpZCAmPQorCQkgICAgICB+KFZBTElEX1dST1d8VkFMSURfQ1JPV3xWQUxJRF9CT1RMSU5FfFZBTElEX0JPVExJTkVfQVApOworCSAgICByb3cgPSBjdXJ3aW4tPndfaGVpZ2h0IC0gMTsKKwl9CisJZWxzZSBpZiAocm93ID09IDApCisJeworCSAgICAvKiBXaGVuIGRyYWdnaW5nIHRoZSBtb3VzZSwgd2hpbGUgdGhlIHRleHQgaGFzIGJlZW4gc2Nyb2xsZWQgdXAgYXMKKwkgICAgICogZmFyIGFzIGl0IGdvZXMsIG1vdmluZyB0aGUgbW91c2UgaW4gdGhlIHRvcCBsaW5lIHNob3VsZCBzY3JvbGwKKwkgICAgICogdGhlIHRleHQgZG93biAoZG9uZSBsYXRlciB3aGVuIHJlY29tcHV0aW5nIHdfdG9wbGluZSkuICovCisJICAgIGlmIChtb3VzZV9kcmFnZ2luZworCQkgICAgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtCisJCQkJICAgICAgID09IGN1cndpbi0+d19idWZmZXItPmJfbWwubWxfbGluZV9jb3VudAorCQkgICAgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtID09IGN1cndpbi0+d190b3BsaW5lKQorCQljdXJ3aW4tPndfdmFsaWQgJj0gfihWQUxJRF9UT1BMSU5FKTsKKwl9CisgICAgfQorCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgLyogQ2hlY2sgZm9yIHBvc2l0aW9uIG91dHNpZGUgb2YgdGhlIGZvbGQgY29sdW1uLiAqLworICAgIGlmICgKKyMgaWZkZWYgRkVBVF9SSUdIVExFRlQKKwkgICAgY3Vyd2luLT53X3BfcmwgPyBjb2wgPCBXX1dJRFRIKGN1cndpbikgLSBjdXJ3aW4tPndfcF9mZGMgOgorIyBlbmRpZgorCSAgICBjb2wgPj0gY3Vyd2luLT53X3BfZmRjCisjICBpZmRlZiBGRUFUX0NNRFdJTgorCQkJCSsgKGNtZHdpbl90eXBlID09IDAgPyAwIDogMSkKKyMgIGVuZGlmCisgICAgICAgKQorCW1vdXNlX2NoYXIgPSAnICc7CisjZW5kaWYKKworICAgIC8qIGNvbXB1dGUgdGhlIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgbGluZSBmcm9tIHRoZSBwb3NuIG9uIHRoZSBzY3JlZW4gKi8KKyAgICBpZiAobW91c2VfY29tcF9wb3MoY3Vyd2luLCAmcm93LCAmY29sLCAmY3Vyd2luLT53X2N1cnNvci5sbnVtKSkKKwltb3VzZV9wYXN0X2JvdHRvbSA9IFRSVUU7CisKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIC8qIFN0YXJ0IFZpc3VhbCBtb2RlIGJlZm9yZSBjb2xhZHZhbmNlKCksIGZvciB3aGVuICdzZWwnICE9ICJvbGQiICovCisgICAgaWYgKChmbGFncyAmIE1PVVNFX01BWV9WSVMpICYmICFWSXN1YWxfYWN0aXZlKQorICAgIHsKKwljaGVja192aXN1YWxfaGlnaGxpZ2h0KCk7CisJVklzdWFsID0gb2xkX2N1cnNvcjsKKwlWSXN1YWxfYWN0aXZlID0gVFJVRTsKKwlWSXN1YWxfcmVzZWxlY3QgPSBUUlVFOworCS8qIGlmICdzZWxlY3Rtb2RlJyBjb250YWlucyAibW91c2UiLCBzdGFydCBTZWxlY3QgbW9kZSAqLworCW1heV9zdGFydF9zZWxlY3QoJ28nKTsKKwlzZXRtb3VzZSgpOworCWlmIChwX3NtZCkKKwkgICAgcmVkcmF3X2NtZGxpbmUgPSBUUlVFOwkvKiBzaG93IHZpc3VhbCBtb2RlIGxhdGVyICovCisgICAgfQorI2VuZGlmCisKKyAgICBjdXJ3aW4tPndfY3Vyc3dhbnQgPSBjb2w7CisgICAgY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IEZBTFNFOwkvKiBNYXkgc3RpbGwgaGF2ZSBiZWVuIFRSVUUgKi8KKyAgICBpZiAoY29sYWR2YW5jZShjb2wpID09IEZBSUwpCS8qIE1vdXNlIGNsaWNrIGJleW9uZCBlbmQgb2YgbGluZSAqLworICAgIHsKKwlpZiAoaW5jbHVzaXZlICE9IE5VTEwpCisJICAgICppbmNsdXNpdmUgPSBUUlVFOworCW1vdXNlX3Bhc3RfZW9sID0gVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZiAoaW5jbHVzaXZlICE9IE5VTEwpCisJKmluY2x1c2l2ZSA9IEZBTFNFOworCisgICAgY291bnQgPSBJTl9CVUZGRVI7CisgICAgaWYgKGN1cndpbiAhPSBvbGRfY3Vyd2luIHx8IGN1cndpbi0+d19jdXJzb3IubG51bSAhPSBvbGRfY3Vyc29yLmxudW0KKwkgICAgfHwgY3Vyd2luLT53X2N1cnNvci5jb2wgIT0gb2xkX2N1cnNvci5jb2wpCisJY291bnQgfD0gQ1VSU09SX01PVkVEOwkJLyogQ3Vyc29yIGhhcyBtb3ZlZCAqLworCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgaWYgKG1vdXNlX2NoYXIgPT0gJysnKQorCWNvdW50IHw9IE1PVVNFX0ZPTERfT1BFTjsKKyAgICBlbHNlIGlmIChtb3VzZV9jaGFyICE9ICcgJykKKwljb3VudCB8PSBNT1VTRV9GT0xEX0NMT1NFOworI2VuZGlmCisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBDb21wdXRlIHRoZSBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyIGxpbmUgZnJvbSB0aGUgcG9zbiBvbiB0aGUgc2NyZWVuIGluCisgKiB3aW5kb3cgIndpbiIuCisgKiBSZXR1cm5zIFRSVUUgaWYgdGhlIHBvc2l0aW9uIGlzIGJlbG93IHRoZSBsYXN0IGxpbmUuCisgKi8KKyAgICBpbnQKK21vdXNlX2NvbXBfcG9zKHdpbiwgcm93cCwgY29scCwgbG51bXApCisgICAgd2luX1QJKndpbjsKKyAgICBpbnQJCSpyb3dwOworICAgIGludAkJKmNvbHA7CisgICAgbGluZW5yX1QJKmxudW1wOworeworICAgIGludAkJY29sID0gKmNvbHA7CisgICAgaW50CQlyb3cgPSAqcm93cDsKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGludAkJcmV0dmFsID0gRkFMU0U7CisgICAgaW50CQlvZmY7CisgICAgaW50CQljb3VudDsKKworI2lmZGVmIEZFQVRfUklHSFRMRUZUCisgICAgaWYgKHdpbi0+d19wX3JsKQorCWNvbCA9IFdfV0lEVEgod2luKSAtIDEgLSBjb2w7CisjZW5kaWYKKworICAgIGxudW0gPSB3aW4tPndfdG9wbGluZTsKKworICAgIHdoaWxlIChyb3cgPiAwKQorICAgIHsKKyNpZmRlZiBGRUFUX0RJRkYKKwkvKiBEb24ndCBpbmNsdWRlIGZpbGxlciBsaW5lcyBpbiAiY291bnQiICovCisJaWYgKHdpbi0+d19wX2RpZmYgJiYgIWhhc0ZvbGRpbmdXaW4od2luLCBsbnVtLCBOVUxMLCBOVUxMLCBUUlVFLCBOVUxMKSkKKwl7CisJICAgIGlmIChsbnVtID09IHdpbi0+d190b3BsaW5lKQorCQlyb3cgLT0gd2luLT53X3RvcGZpbGw7CisJICAgIGVsc2UKKwkJcm93IC09IGRpZmZfY2hlY2tfZmlsbCh3aW4sIGxudW0pOworCSAgICBjb3VudCA9IHBsaW5lc193aW5fbm9maWxsKHdpbiwgbG51bSwgVFJVRSk7CisJfQorCWVsc2UKKyNlbmRpZgorCSAgICBjb3VudCA9IHBsaW5lc193aW4od2luLCBsbnVtLCBUUlVFKTsKKwlpZiAoY291bnQgPiByb3cpCisJICAgIGJyZWFrOwkvKiBQb3NpdGlvbiBpcyBpbiB0aGlzIGJ1ZmZlciBsaW5lLiAqLworI2lmZGVmIEZFQVRfRk9MRElORworCSh2b2lkKWhhc0ZvbGRpbmdXaW4od2luLCBsbnVtLCBOVUxMLCAmbG51bSwgVFJVRSwgTlVMTCk7CisjZW5kaWYKKwlpZiAobG51bSA9PSB3aW4tPndfYnVmZmVyLT5iX21sLm1sX2xpbmVfY291bnQpCisJeworCSAgICByZXR2YWwgPSBUUlVFOworCSAgICBicmVhazsJCS8qIHBhc3QgZW5kIG9mIGZpbGUgKi8KKwl9CisJcm93IC09IGNvdW50OworCSsrbG51bTsKKyAgICB9CisKKyAgICBpZiAoIXJldHZhbCkKKyAgICB7CisJLyogQ29tcHV0ZSB0aGUgY29sdW1uIHdpdGhvdXQgd3JhcHBpbmcuICovCisJb2ZmID0gd2luX2NvbF9vZmYod2luKSAtIHdpbl9jb2xfb2ZmMih3aW4pOworCWlmIChjb2wgPCBvZmYpCisJICAgIGNvbCA9IG9mZjsKKwljb2wgKz0gcm93ICogKFdfV0lEVEgod2luKSAtIG9mZik7CisJLyogYWRkIHNraXAgY29sdW1uIChmb3IgbG9uZyB3cmFwcGluZyBsaW5lKSAqLworCWNvbCArPSB3aW4tPndfc2tpcGNvbDsKKyAgICB9CisKKyAgICBpZiAoIXdpbi0+d19wX3dyYXApCisJY29sICs9IHdpbi0+d19sZWZ0Y29sOworCisgICAgLyogc2tpcCBsaW5lIG51bWJlciBhbmQgZm9sZCBjb2x1bW4gaW4gZnJvbnQgb2YgdGhlIGxpbmUgKi8KKyAgICBjb2wgLT0gd2luX2NvbF9vZmYod2luKTsKKyAgICBpZiAoY29sIDwgMCkKKyAgICB7CisjaWZkZWYgRkVBVF9ORVRCRUFOU19JTlRHCisJaWYgKHVzaW5nTmV0YmVhbnMpCisJICAgIG5ldGJlYW5zX2d1dHRlcl9jbGljayhsbnVtKTsKKyNlbmRpZgorCWNvbCA9IDA7CisgICAgfQorCisgICAgKmNvbHAgPSBjb2w7CisgICAgKnJvd3AgPSByb3c7CisgICAgKmxudW1wID0gbG51bTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogRmluZCB0aGUgd2luZG93IGF0IHNjcmVlbiBwb3NpdGlvbiAiKnJvd3AiIGFuZCAiKmNvbHAiLiAgVGhlIHBvc2l0aW9ucyBhcmUKKyAqIHVwZGF0ZWQgdG8gYmVjb21lIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiB0aGUgd2luZG93LgorICovCisvKkFSR1NVU0VEKi8KKyAgICB3aW5fVCAqCittb3VzZV9maW5kX3dpbihyb3dwLCBjb2xwKQorICAgIGludAkJKnJvd3A7CisgICAgaW50CQkqY29scDsKK3sKKyAgICBmcmFtZV9UCSpmcDsKKworICAgIGZwID0gdG9wZnJhbWU7CisgICAgZm9yICg7OykKKyAgICB7CisJaWYgKGZwLT5mcl9sYXlvdXQgPT0gRlJfTEVBRikKKwkgICAgYnJlYWs7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwlpZiAoZnAtPmZyX2xheW91dCA9PSBGUl9ST1cpCisJeworCSAgICBmb3IgKGZwID0gZnAtPmZyX2NoaWxkOyBmcC0+ZnJfbmV4dCAhPSBOVUxMOyBmcCA9IGZwLT5mcl9uZXh0KQorCSAgICB7CisJCWlmICgqY29scCA8IGZwLT5mcl93aWR0aCkKKwkJICAgIGJyZWFrOworCQkqY29scCAtPSBmcC0+ZnJfd2lkdGg7CisJICAgIH0KKwl9CisjZW5kaWYKKwllbHNlICAgIC8qIGZyX2xheW91dCA9PSBGUl9DT0wgKi8KKwl7CisJICAgIGZvciAoZnAgPSBmcC0+ZnJfY2hpbGQ7IGZwLT5mcl9uZXh0ICE9IE5VTEw7IGZwID0gZnAtPmZyX25leHQpCisJICAgIHsKKwkJaWYgKCpyb3dwIDwgZnAtPmZyX2hlaWdodCkKKwkJICAgIGJyZWFrOworCQkqcm93cCAtPSBmcC0+ZnJfaGVpZ2h0OworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gZnAtPmZyX3dpbjsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX0dVSV9NT1RJRikgfHwgZGVmaW5lZChGRUFUX0dVSV9HVEspIHx8IGRlZmluZWQgKEZFQVRfR1VJX01BQykgXAorCXx8IGRlZmluZWQoRkVBVF9HVUlfQVRIRU5BKSB8fCBkZWZpbmVkKEZFQVRfR1VJX01TV0lOKSBcCisJfHwgZGVmaW5lZChGRUFUX0dVSV9QSE9UT04pIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogVHJhbnNsYXRlIHdpbmRvdyBjb29yZGluYXRlcyB0byBidWZmZXIgcG9zaXRpb24gd2l0aG91dCBhbnkgc2lkZSBlZmZlY3RzCisgKi8KKyAgICBpbnQKK2dldF9mcG9zX29mX21vdXNlKG1wb3MpCisgICAgcG9zX1QJKm1wb3M7Cit7CisgICAgd2luX1QJKndwOworICAgIGludAkJcm93ID0gbW91c2Vfcm93OworICAgIGludAkJY29sID0gbW91c2VfY29sOworCisgICAgaWYgKHJvdyA8IDAgfHwgY29sIDwgMCkJCS8qIGNoZWNrIGlmIGl0IG1ha2VzIHNlbnNlICovCisJcmV0dXJuIElOX1VOS05PV047CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICAvKiBmaW5kIHRoZSB3aW5kb3cgd2hlcmUgdGhlIHJvdyBpcyBpbiAqLworICAgIHdwID0gbW91c2VfZmluZF93aW4oJnJvdywgJmNvbCk7CisjZWxzZQorICAgIHdwID0gZmlyc3R3aW47CisjZW5kaWYKKyAgICAvKgorICAgICAqIHdpbnBvcyBhbmQgaGVpZ2h0IG1heSBjaGFuZ2UgaW4gd2luX2VudGVyKCkhCisgICAgICovCisgICAgaWYgKHJvdyA+PSB3cC0+d19oZWlnaHQpCS8qIEluIChvciBiZWxvdykgc3RhdHVzIGxpbmUgKi8KKwlyZXR1cm4gSU5fU1RBVFVTX0xJTkU7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBpZiAoY29sID49IHdwLT53X3dpZHRoKQkvKiBJbiB2ZXJ0aWNhbCBzZXBhcmF0b3IgbGluZSAqLworCXJldHVybiBJTl9TRVBfTElORTsKKyNlbmRpZgorCisgICAgaWYgKHdwICE9IGN1cndpbikKKwlyZXR1cm4gSU5fVU5LTk9XTjsKKworICAgIC8qIGNvbXB1dGUgdGhlIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgbGluZSBmcm9tIHRoZSBwb3NuIG9uIHRoZSBzY3JlZW4gKi8KKyAgICBpZiAobW91c2VfY29tcF9wb3MoY3Vyd2luLCAmcm93LCAmY29sLCAmbXBvcy0+bG51bSkpCisJcmV0dXJuIElOX1NUQVRVU19MSU5FOyAvKiBwYXN0IGJvdHRvbSAqLworCisgICAgbXBvcy0+Y29sID0gdmNvbDJjb2wod3AsIG1wb3MtPmxudW0sIGNvbCk7CisKKyAgICBpZiAobXBvcy0+Y29sID4gMCkKKwktLW1wb3MtPmNvbDsKKyAgICByZXR1cm4gSU5fQlVGRkVSOworfQorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgKHNjcmVlbikgY29sdW1uIHRvIGEgY2hhcmFjdGVyIGNvbHVtbi4KKyAqIFRoZSBmaXJzdCBjb2x1bW4gaXMgb25lLgorICovCisgICAgaW50Cit2Y29sMmNvbCh3cCwgbG51bSwgdmNvbCkKKyAgICB3aW5fVAkqd3A7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBpbnQJCXZjb2w7Cit7CisgICAgLyogdHJ5IHRvIGFkdmFuY2UgdG8gdGhlIHNwZWNpZmllZCBjb2x1bW4gKi8KKyAgICBpbnQJCWNvbCA9IDA7CisgICAgaW50CQljb3VudCA9IDA7CisgICAgY2hhcl91CSpwdHI7CisKKyAgICBwdHIgPSBtbF9nZXRfYnVmKHdwLT53X2J1ZmZlciwgbG51bSwgRkFMU0UpOworICAgIHdoaWxlIChjb3VudCA8PSB2Y29sICYmICpwdHIgIT0gTlVMKQorICAgIHsKKwkrK2NvbDsKKwljb3VudCArPSB3aW5fbGJyX2NoYXJ0YWJzaXplKHdwLCBwdHIsIGNvdW50LCBOVUxMKTsKKyMgaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIHB0ciArPSAoKm1iX3B0cjJsZW5fY2hlY2spKHB0cik7CisJZWxzZQorIyBlbmRpZgorCSAgICArK3B0cjsKKyAgICB9CisgICAgcmV0dXJuIGNvbDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogRkVBVF9NT1VTRSAqLworCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChXSU4zMjY0KSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENhbGxlZCB3aGVuIGZvY3VzIGNoYW5nZWQuICBVc2VkIGZvciB0aGUgR1VJIG9yIGZvciBzeXN0ZW1zIHdoZXJlIHRoaXMgY2FuCisgKiBiZSBkb25lIGluIHRoZSBjb25zb2xlIChXaW4zMikuCisgKi8KKyAgICB2b2lkCit1aV9mb2N1c19jaGFuZ2UoaW5fZm9jdXMpCisgICAgaW50CQlpbl9mb2N1czsJLyogVFJVRSBpZiBmb2N1cyBnYWluZWQuICovCit7CisgICAgc3RhdGljIHRpbWVfdAlsYXN0X3RpbWUgPSAodGltZV90KTA7CisgICAgaW50CQkJbmVlZF9yZWRyYXcgPSBGQUxTRTsKKworICAgIC8qIFdoZW4gYWN0aXZhdGVkOiBDaGVjayBpZiBhbnkgZmlsZSB3YXMgbW9kaWZpZWQgb3V0c2lkZSBvZiBWaW0uCisgICAgICogT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgd2l0aGluIHRoZSBsYXN0IHR3byBzZWNvbmRzIChjb3VsZCBnZXQKKyAgICAgKiBzZXZlcmFsIGV2ZW50cyBpbiBhIHJvdykuICovCisgICAgaWYgKGluX2ZvY3VzICYmIGxhc3RfdGltZSArIDIgPCB0aW1lKE5VTEwpKQorICAgIHsKKwluZWVkX3JlZHJhdyA9IGNoZWNrX3RpbWVzdGFtcHMoCisjIGlmZGVmIEZFQVRfR1VJCisJCWd1aS5pbl91c2UKKyMgZWxzZQorCQlGQUxTRQorIyBlbmRpZgorCQkpOworCWxhc3RfdGltZSA9IHRpbWUoTlVMTCk7CisgICAgfQorCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgLyoKKyAgICAgKiBGaXJlIHRoZSBmb2N1cyBnYWluZWQvbG9zdCBhdXRvY29tbWFuZC4KKyAgICAgKi8KKyAgICBuZWVkX3JlZHJhdyB8PSBhcHBseV9hdXRvY21kcyhpbl9mb2N1cyA/IEVWRU5UX0ZPQ1VTR0FJTkVECisJCQkJOiBFVkVOVF9GT0NVU0xPU1QsIE5VTEwsIE5VTEwsIEZBTFNFLCBjdXJidWYpOworI2VuZGlmCisKKyAgICBpZiAobmVlZF9yZWRyYXcpCisgICAgeworCS8qIFNvbWV0aGluZyB3YXMgZXhlY3V0ZWQsIG1ha2Ugc3VyZSB0aGUgY3Vyc29yIGlzIHB1dCBiYWNrIHdoZXJlIGl0CisJICogYmVsb25ncy4gKi8KKwluZWVkX3dhaXRfcmV0dXJuID0gRkFMU0U7CisKKwlpZiAoU3RhdGUgJiBDTURMSU5FKQorCSAgICByZWRyYXdjbWRsaW5lKCk7CisJZWxzZSBpZiAoU3RhdGUgPT0gSElUUkVUVVJOIHx8IFN0YXRlID09IFNFVFdTSVpFIHx8IFN0YXRlID09IEFTS01PUkUKKwkJfHwgU3RhdGUgPT0gRVhURVJOQ01EIHx8IFN0YXRlID09IENPTkZJUk0gfHwgZXhtb2RlX2FjdGl2ZSkKKwkgICAgcmVwZWF0X21lc3NhZ2UoKTsKKwllbHNlIGlmICgoU3RhdGUgJiBOT1JNQUwpIHx8IChTdGF0ZSAmIElOU0VSVCkpCisJeworCSAgICBpZiAobXVzdF9yZWRyYXcgIT0gMCkKKwkJdXBkYXRlX3NjcmVlbigwKTsKKwkgICAgc2V0Y3Vyc29yKCk7CisJfQorCWN1cnNvcl9vbigpOwkgICAgLyogcmVkcmF3aW5nIG1heSBoYXZlIHN3aXRjaGVkIGl0IG9mZiAqLworCW91dF9mbHVzaCgpOworIyBpZmRlZiBGRUFUX0dVSQorCWlmIChndWkuaW5fdXNlKQorCXsKKwkgICAgZ3VpX3VwZGF0ZV9jdXJzb3IoRkFMU0UsIFRSVUUpOworCSAgICBndWlfdXBkYXRlX3Njcm9sbGJhcnMoRkFMU0UpOworCX0KKyMgZW5kaWYKKyAgICB9CisjaWZkZWYgRkVBVF9USVRMRQorICAgIC8qIEZpbGUgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIGZyb20gJ3JlYWRvbmx5JyB0byAnbm9yZWFkb25seScgKi8KKyAgICBpZiAobmVlZF9tYWtldGl0bGUpCisJbWFrZXRpdGxlKCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChVU0VfSU1fQ09OVFJPTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBTYXZlIGN1cnJlbnQgSW5wdXQgTWV0aG9kIHN0YXR1cyB0byBzcGVjaWZpZWQgcGxhY2UuCisgKi8KKyAgICB2b2lkCitpbV9zYXZlX3N0YXR1cyhwc2F2ZSkKKyAgICBsb25nICpwc2F2ZTsKK3sKKyAgICAvKiBEb24ndCBzYXZlIHdoZW4gJ2ltZGlzYWJsZScgaXMgc2V0IG9yICJ4aWMiIGlzIE5VTEwsIElNIGlzIGFsd2F5cworICAgICAqIGRpc2FibGVkIHRoZW4gKGJ1dCBtaWdodCBzdGFydCBsYXRlcikuCisgICAgICogQWxzbyBkb24ndCBzYXZlIHdoZW4gaW5zaWRlIGEgbWFwcGluZywgdmdldGNfaW1fYWN0aXZlIGhhcyBub3QgYmVlbiBzZXQKKyAgICAgKiB0aGVuLgorICAgICAqIEFuZCBkb24ndCBzYXZlIHdoZW4gdGhlIGtleXMgd2VyZSBzdHVmZmVkIChlLmcuLCBmb3IgYSAiLiIgY29tbWFuZCkuCisgICAgICogQW5kIGRvbid0IHNhdmUgd2hlbiB0aGUgR1VJIGlzIHJ1bm5pbmcgYnV0IG91ciB3aW5kb3cgZG9lc24ndCBoYXZlCisgICAgICogaW5wdXQgZm9jdXMgKGUuZy4sIHdoZW4gYSBmaW5kIGRpYWxvZyBpcyBvcGVuKS4gKi8KKyAgICBpZiAoIXBfaW1kaXNhYmxlICYmIEtleVR5cGVkICYmICFLZXlTdHVmZmVkCisjIGlmZGVmIEZFQVRfWElNCisJICAgICYmIHhpYyAhPSBOVUxMCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfR1VJCisJICAgICYmICghZ3VpLmluX3VzZSB8fCBndWkuaW5fZm9jdXMpCisjIGVuZGlmCisJKQorICAgIHsKKwkvKiBEbyBzYXZlIHdoZW4gSU0gaXMgb24sIG9yIElNIGlzIG9mZiBhbmQgc2F2ZWQgc3RhdHVzIGlzIG9uLiAqLworCWlmICh2Z2V0Y19pbV9hY3RpdmUpCisJICAgICpwc2F2ZSA9IEJfSU1PREVfSU07CisJZWxzZSBpZiAoKnBzYXZlID09IEJfSU1PREVfSU0pCisJICAgICpwc2F2ZSA9IEJfSU1PREVfTk9ORTsKKyAgICB9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy91bmRvLmMgYi9zcmMvdW5kby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZmNmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdW5kby5jCkBAIC0wLDAgKzEsMTM4MCBAQAorLyogdmk6c2V0IHRzPTggc3RzPTQgc3c9NDoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisvKgorICogdW5kby5jOiBtdWx0aSBsZXZlbCB1bmRvIGZhY2lsaXR5CisgKgorICogVGhlIHNhdmVkIGxpbmVzIGFyZSBzdG9yZWQgaW4gYSBsaXN0IG9mIGxpc3RzIChvbmUgZm9yIGVhY2ggYnVmZmVyKToKKyAqCisgKiBiX3Vfb2xkaGVhZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCQkJCQkJCSAgICAgIHwKKyAqCQkJCQkJCSAgICAgIFYKKyAqCQkgICstLS0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tLS0tKwkgICstLS0tLS0tLS0tLS0tLSsKKyAqIGJfdV9uZXdoZWFkLS0tPnwgdV9oZWFkZXIJIHwgICAgfCB1X2hlYWRlciAgICAgfAkgIHwgdV9oZWFkZXIJIHwKKyAqCQkgIHwJdWhfbmV4dC0tLS0tLT58ICAgICB1aF9uZXh0LS0tLS0tPnwJdWhfbmV4dC0tLS0+TlVMTAorICoJICAgTlVMTDwtLS0tLS0tLXVoX3ByZXYgIHw8LS0tLS0tLS0tdWhfcHJldiAgfDwtLS0tLS0tLS11aF9wcmV2ICB8CisgKgkJICB8CXVoX2VudHJ5IHwgICAgfCAgICAgdWhfZW50cnkgfAkgIHwJdWhfZW50cnkgfAorICoJCSAgKy0tLS0tLS0tfC0tLS0tKyAgICArLS0tLS0tLS18LS0tLS0rCSAgKy0tLS0tLS0tfC0tLS0tKworICoJCQkgICB8CQkgICAgICAgfAkJICAgfAorICoJCQkgICBWCQkgICAgICAgVgkJICAgVgorICoJCSAgKy0tLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tLS0rCSAgKy0tLS0tLS0tLS0tLS0tKworICoJCSAgfCB1X2VudHJ5CSB8ICAgIHwgdV9lbnRyeSAgICAgIHwJICB8IHVfZW50cnkJIHwKKyAqCQkgIHwJdWVfbmV4dCAgfCAgICB8ICAgICB1ZV9uZXh0ICB8CSAgfAl1ZV9uZXh0ICB8CisgKgkJICArLS0tLS0tLS18LS0tLS0rICAgICstLS0tLS0tLXwtLS0tLSsJICArLS0tLS0tLS18LS0tLS0rCisgKgkJCSAgIHwJCSAgICAgICB8CQkgICB8CisgKgkJCSAgIFYJCSAgICAgICBWCQkgICBWCisgKgkJICArLS0tLS0tLS0tLS0tLS0rCSAgICAgIE5VTEwJCSAgTlVMTAorICoJCSAgfCB1X2VudHJ5CSB8CisgKgkJICB8CXVlX25leHQgIHwKKyAqCQkgICstLS0tLS0tLXwtLS0tLSsKKyAqCQkJICAgfAorICoJCQkgICBWCisgKgkJCSAgZXRjLgorICoKKyAqIEVhY2ggdV9lbnRyeSBsaXN0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBmb3Igb25lIHVuZG8gb3IgcmVkby4KKyAqIGN1cmJ1Zi0+Yl91X2N1cmhlYWQgcG9pbnRzIHRvIHRoZSBoZWFkZXIgb2YgdGhlIGxhc3QgdW5kbyAodGhlIG5leHQgcmVkbyksCisgKiBvciBpcyBOVUxMIGlmIG5vdGhpbmcgaGFzIGJlZW4gdW5kb25lLgorICoKKyAqIEFsbCBkYXRhIGlzIGFsbG9jYXRlZCB3aXRoIHVfYWxsb2NfbGluZSgpLCB0aHVzIGl0IHdpbGwgYmUgZnJlZWQgYXMgc29vbiBhcworICogd2Ugc3dpdGNoIGZpbGVzIQorICovCisKKyNpbmNsdWRlICJ2aW0uaCIKKworc3RhdGljIHVfZW50cnlfVCAqdV9nZXRfaGVhZGVudHJ5IF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgdV9nZXRib3QgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgaW50IHVfc2F2ZWNvbW1vbiBfX0FSR1MoKGxpbmVucl9ULCBsaW5lbnJfVCwgbGluZW5yX1QpKTsKK3N0YXRpYyB2b2lkIHVfZG9pdCBfX0FSR1MoKGludCBjb3VudCkpOworc3RhdGljIHZvaWQgdV91bmRvcmVkbyBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIHVfdW5kb19lbmQgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCB1X2ZyZWVsaXN0IF9fQVJHUygoc3RydWN0IHVfaGVhZGVyICopKTsKK3N0YXRpYyB2b2lkIHVfZnJlZWVudHJ5IF9fQVJHUygodV9lbnRyeV9UICosIGxvbmcpKTsKKworc3RhdGljIGNoYXJfdSAqdV9ibG9ja2FsbG9jIF9fQVJHUygobG9uZ191KSk7CitzdGF0aWMgdm9pZCB1X2ZyZWVfbGluZSBfX0FSR1MoKGNoYXJfdSAqLCBpbnQga2VlcCkpOworc3RhdGljIGNoYXJfdSAqdV9hbGxvY19saW5lIF9fQVJHUygodW5zaWduZWQpKTsKK3N0YXRpYyBjaGFyX3UgKnVfc2F2ZV9saW5lIF9fQVJHUygobGluZW5yX1QpKTsKKworc3RhdGljIGxvbmcJdV9uZXdjb3VudCwgdV9vbGRjb3VudDsKKworLyoKKyAqIFdoZW4gJ3UnIGZsYWcgaW5jbHVkZWQgaW4gJ2Nwb3B0aW9ucycsIHdlIGJlaGF2ZSBsaWtlIHZpLiAgTmVlZCB0byByZW1lbWJlcgorICogdGhlIGFjdGlvbiB0aGF0ICJ1IiBzaG91bGQgZG8uCisgKi8KK3N0YXRpYyBpbnQJdW5kb191bmRvZXMgPSBGQUxTRTsKKworLyoKKyAqIHNhdmUgdGhlIGN1cnJlbnQgbGluZSBmb3IgYm90aCB0aGUgInUiIGFuZCAiVSIgY29tbWFuZAorICovCisgICAgaW50Cit1X3NhdmVfY3Vyc29yKCkKK3sKKyAgICByZXR1cm4gKHVfc2F2ZSgobGluZW5yX1QpKGN1cndpbi0+d19jdXJzb3IubG51bSAtIDEpLAorCQkJCSAgICAgIChsaW5lbnJfVCkoY3Vyd2luLT53X2N1cnNvci5sbnVtICsgMSkpKTsKK30KKworLyoKKyAqIFNhdmUgdGhlIGxpbmVzIGJldHdlZW4gInRvcCIgYW5kICJib3QiIGZvciBib3RoIHRoZSAidSIgYW5kICJVIiBjb21tYW5kLgorICogInRvcCIgbWF5IGJlIDAgYW5kIGJvdCBtYXkgYmUgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQgKyAxLgorICogUmV0dXJucyBGQUlMIHdoZW4gbGluZXMgY291bGQgbm90IGJlIHNhdmVkLCBPSyBvdGhlcndpc2UuCisgKi8KKyAgICBpbnQKK3Vfc2F2ZSh0b3AsIGJvdCkKKyAgICBsaW5lbnJfVCB0b3AsIGJvdDsKK3sKKyAgICBpZiAodW5kb19vZmYpCisJcmV0dXJuIE9LOworCisgICAgaWYgKHRvcCA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50IHx8CisJCQkgICAgdG9wID49IGJvdCB8fCBib3QgPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCArIDEpCisJcmV0dXJuIEZBTFNFOwkvKiByZWx5IG9uIGNhbGxlciB0byBkbyBlcnJvciBtZXNzYWdlcyAqLworCisgICAgaWYgKHRvcCArIDIgPT0gYm90KQorCXVfc2F2ZWxpbmUoKGxpbmVucl9UKSh0b3AgKyAxKSk7CisKKyAgICByZXR1cm4gKHVfc2F2ZWNvbW1vbih0b3AsIGJvdCwgKGxpbmVucl9UKTApKTsKK30KKworLyoKKyAqIHNhdmUgdGhlIGxpbmUgImxudW0iICh1c2VkIGJ5ICI6cyIgYW5kICJ+IiBjb21tYW5kKQorICogVGhlIGxpbmUgaXMgcmVwbGFjZWQsIHNvIHRoZSBuZXcgYm90dG9tIGxpbmUgaXMgbG51bSArIDEuCisgKi8KKyAgICBpbnQKK3Vfc2F2ZXN1YihsbnVtKQorICAgIGxpbmVucl9UCWxudW07Cit7CisgICAgaWYgKHVuZG9fb2ZmKQorCXJldHVybiBPSzsKKworICAgIHJldHVybiAodV9zYXZlY29tbW9uKGxudW0gLSAxLCBsbnVtICsgMSwgbG51bSArIDEpKTsKK30KKworLyoKKyAqIGEgbmV3IGxpbmUgaXMgaW5zZXJ0ZWQgYmVmb3JlIGxpbmUgImxudW0iICh1c2VkIGJ5IDpzIGNvbW1hbmQpCisgKiBUaGUgbGluZSBpcyBpbnNlcnRlZCwgc28gdGhlIG5ldyBib3R0b20gbGluZSBpcyBsbnVtICsgMS4KKyAqLworICAgIGludAordV9pbnNzdWIobG51bSkKKyAgICBsaW5lbnJfVAlsbnVtOworeworICAgIGlmICh1bmRvX29mZikKKwlyZXR1cm4gT0s7CisKKyAgICByZXR1cm4gKHVfc2F2ZWNvbW1vbihsbnVtIC0gMSwgbG51bSwgbG51bSArIDEpKTsKK30KKworLyoKKyAqIHNhdmUgdGhlIGxpbmVzICJsbnVtIiAtICJsbnVtIiArIG5saW5lcyAodXNlZCBieSBkZWxldGUgY29tbWFuZCkKKyAqIFRoZSBsaW5lcyBhcmUgZGVsZXRlZCwgc28gdGhlIG5ldyBib3R0b20gbGluZSBpcyBsbnVtLCB1bmxlc3MgdGhlIGJ1ZmZlcgorICogYmVjb21lcyBlbXB0eS4KKyAqLworICAgIGludAordV9zYXZlZGVsKGxudW0sIG5saW5lcykKKyAgICBsaW5lbnJfVAlsbnVtOworICAgIGxvbmcJbmxpbmVzOworeworICAgIGlmICh1bmRvX29mZikKKwlyZXR1cm4gT0s7CisKKyAgICByZXR1cm4gKHVfc2F2ZWNvbW1vbihsbnVtIC0gMSwgbG51bSArIG5saW5lcywKKwkJCW5saW5lcyA9PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCA/IDIgOiBsbnVtKSk7Cit9CisKKyAgICBzdGF0aWMgaW50Cit1X3NhdmVjb21tb24odG9wLCBib3QsIG5ld2JvdCkKKyAgICBsaW5lbnJfVAl0b3AsIGJvdDsKKyAgICBsaW5lbnJfVAluZXdib3Q7Cit7CisgICAgbGluZW5yX1QJCWxudW07CisgICAgbG9uZwkJaTsKKyAgICBzdHJ1Y3QgdV9oZWFkZXIJKnVocDsKKyAgICB1X2VudHJ5X1QJCSp1ZXA7CisgICAgdV9lbnRyeV9UCQkqcHJldl91ZXA7CisgICAgbG9uZwkJc2l6ZTsKKworICAgIC8qCisgICAgICogRG9uJ3QgYWxsb3cgY2hhbmdlcyB3aGVuICdtb2RpZmlhYmxlJyBpcyBvZmYuICBMZXR0aW5nIHRoZQorICAgICAqIHVuZG8gZmFpbCBpcyBhIGNydWRlIHdheSB0byBtYWtlIGFsbCBjaGFuZ2UgY29tbWFuZHMgZmFpbC4KKyAgICAgKi8KKyAgICBpZiAoIWN1cmJ1Zi0+Yl9wX21hKQorICAgIHsKKwlFTVNHKF8oZV9tb2RpZmlhYmxlKSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorCisjaWZkZWYgSEFWRV9TQU5EQk9YCisgICAgLyoKKyAgICAgKiBJbiB0aGUgc2FuZGJveCBpdCdzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgdGV4dC4gIExldHRpbmcgdGhlCisgICAgICogdW5kbyBmYWlsIGlzIGEgY3J1ZGUgd2F5IHRvIG1ha2UgYWxsIGNoYW5nZSBjb21tYW5kcyBmYWlsLgorICAgICAqLworICAgIGlmIChzYW5kYm94ICE9IDApCisgICAgeworCUVNU0coXyhlX3NhbmRib3gpKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIC8qCisgICAgICogTmV0YmVhbnMgZGVmaW5lcyBhcmVhcyB0aGF0IGNhbm5vdCBiZSBtb2RpZmllZC4gIEJhaWwgb3V0IGhlcmUgd2hlbgorICAgICAqIHRyeWluZyB0byBjaGFuZ2UgdGV4dCBpbiBhIGd1YXJkZWQgYXJlYS4KKyAgICAgKi8KKyAgICBpZiAodXNpbmdOZXRiZWFucyAmJiBuZXRiZWFuc19pc19ndWFyZGVkKHRvcCwgYm90KSkKKyAgICB7CisJRU1TRyhfKGVfZ3VhcmRlZCkpOworCXJldHVybiBGQUlMOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgLyoKKyAgICAgKiBTYXZpbmcgdGV4dCBmb3IgdW5kbyBtZWFucyB3ZSBhcmUgZ29pbmcgdG8gbWFrZSBhIGNoYW5nZS4gIEdpdmUgYQorICAgICAqIHdhcm5pbmcgZm9yIGEgcmVhZC1vbmx5IGZpbGUgYmVmb3JlIG1ha2luZyB0aGUgY2hhbmdlLCBzbyB0aGF0IHRoZQorICAgICAqIEZpbGVDaGFuZ2VkUk8gZXZlbnQgY2FuIHJlcGxhY2UgdGhlIGJ1ZmZlciB3aXRoIGEgcmVhZC13cml0ZSB2ZXJzaW9uCisgICAgICogKGUuZy4sIG9idGFpbmVkIGZyb20gYSBzb3VyY2UgY29udHJvbCBzeXN0ZW0pLgorICAgICAqLworICAgIGNoYW5nZV93YXJuaW5nKDApOworI2VuZGlmCisKKyAgICBzaXplID0gYm90IC0gdG9wIC0gMTsKKworICAgIC8qCisgICAgICogaWYgY3VyYnVmLT5iX3Vfc3luY2VkID09IFRSVUUgbWFrZSBhIG5ldyBoZWFkZXIKKyAgICAgKi8KKyAgICBpZiAoY3VyYnVmLT5iX3Vfc3luY2VkKQorICAgIHsKKyNpZmRlZiBGRUFUX0pVTVBMSVNUCisJLyogTmVlZCB0byBjcmVhdGUgbmV3IGVudHJ5IGluIGJfY2hhbmdlbGlzdC4gKi8KKwljdXJidWYtPmJfbmV3X2NoYW5nZSA9IFRSVUU7CisjZW5kaWYKKworCS8qCisJICogaWYgd2UgdW5kaWQgbW9yZSB0aGFuIHdlIHJlZGlkLCBmcmVlIHRoZSBlbnRyeSBsaXN0cyBiZWZvcmUgYW5kCisJICogaW5jbHVkaW5nIGN1cmJ1Zi0+Yl91X2N1cmhlYWQKKwkgKi8KKwl3aGlsZSAoY3VyYnVmLT5iX3VfY3VyaGVhZCAhPSBOVUxMKQorCSAgICB1X2ZyZWVsaXN0KGN1cmJ1Zi0+Yl91X25ld2hlYWQpOworCisJLyoKKwkgKiBmcmVlIGhlYWRlcnMgdG8ga2VlcCB0aGUgc2l6ZSByaWdodAorCSAqLworCXdoaWxlIChjdXJidWYtPmJfdV9udW1oZWFkID4gcF91bCAmJiBjdXJidWYtPmJfdV9vbGRoZWFkICE9IE5VTEwpCisJICAgIHVfZnJlZWxpc3QoY3VyYnVmLT5iX3Vfb2xkaGVhZCk7CisKKwlpZiAocF91bCA8IDApCQkvKiBubyB1bmRvIGF0IGFsbCAqLworCXsKKwkgICAgY3VyYnVmLT5iX3Vfc3luY2VkID0gRkFMU0U7CisJICAgIHJldHVybiBPSzsKKwl9CisKKwkvKgorCSAqIG1ha2UgYSBuZXcgaGVhZGVyIGVudHJ5CisJICovCisJdWhwID0gKHN0cnVjdCB1X2hlYWRlciAqKXVfYWxsb2NfbGluZSgodW5zaWduZWQpCisJCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgdV9oZWFkZXIpKTsKKwlpZiAodWhwID09IE5VTEwpCisJICAgIGdvdG8gbm9tZW07CisJdWhwLT51aF9wcmV2ID0gTlVMTDsKKwl1aHAtPnVoX25leHQgPSBjdXJidWYtPmJfdV9uZXdoZWFkOworCWlmIChjdXJidWYtPmJfdV9uZXdoZWFkICE9IE5VTEwpCisJICAgIGN1cmJ1Zi0+Yl91X25ld2hlYWQtPnVoX3ByZXYgPSB1aHA7CisJdWhwLT51aF9lbnRyeSA9IE5VTEw7CisJdWhwLT51aF9nZXRib3RfZW50cnkgPSBOVUxMOworCXVocC0+dWhfY3Vyc29yID0gY3Vyd2luLT53X2N1cnNvcjsJLyogc2F2ZSBjdXJzb3IgcG9zLiBmb3IgdW5kbyAqLworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwlpZiAodmlydHVhbF9hY3RpdmUoKSAmJiBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA+IDApCisJICAgIHVocC0+dWhfY3Vyc29yX3Zjb2wgPSBnZXR2aXNjb2woKTsKKwllbHNlCisJICAgIHVocC0+dWhfY3Vyc29yX3Zjb2wgPSAtMTsKKyNlbmRpZgorCisJLyogc2F2ZSBjaGFuZ2VkIGFuZCBidWZmZXIgZW1wdHkgZmxhZyBmb3IgdW5kbyAqLworCXVocC0+dWhfZmxhZ3MgPSAoY3VyYnVmLT5iX2NoYW5nZWQgPyBVSF9DSEFOR0VEIDogMCkgKworCQkgICAgICAgKChjdXJidWYtPmJfbWwubWxfZmxhZ3MgJiBNTF9FTVBUWSkgPyBVSF9FTVBUWUJVRiA6IDApOworCisJLyogc2F2ZSBuYW1lZCBtYXJrcyBmb3IgdW5kbyAqLworCW1jaF9tZW1tb3ZlKHVocC0+dWhfbmFtZWRtLCBjdXJidWYtPmJfbmFtZWRtLCBzaXplb2YocG9zX1QpICogTk1BUktTKTsKKwljdXJidWYtPmJfdV9uZXdoZWFkID0gdWhwOworCWlmIChjdXJidWYtPmJfdV9vbGRoZWFkID09IE5VTEwpCisJICAgIGN1cmJ1Zi0+Yl91X29sZGhlYWQgPSB1aHA7CisJKytjdXJidWYtPmJfdV9udW1oZWFkOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmIChwX3VsIDwgMCkJCS8qIG5vIHVuZG8gYXQgYWxsICovCisJICAgIHJldHVybiBPSzsKKworCS8qCisJICogV2hlbiBzYXZpbmcgYSBzaW5nbGUgbGluZSwgYW5kIGl0IGhhcyBiZWVuIHNhdmVkIGp1c3QgYmVmb3JlLCBpdAorCSAqIGRvZXNuJ3QgbWFrZSBzZW5zZSBzYXZpbmcgaXQgYWdhaW4uICBTYXZlcyBhIGxvdCBvZiBtZW1vcnkgd2hlbgorCSAqIG1ha2luZyBsb3RzIG9mIGNoYW5nZXMgaW5zaWRlIHRoZSBzYW1lIGxpbmUuCisJICogVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSBwcmV2aW91cyBjaGFuZ2UgZGlkbid0IGluY3JlYXNlIG9yCisJICogZGVjcmVhc2UgdGhlIG51bWJlciBvZiBsaW5lcy4KKwkgKiBDaGVjayB0aGUgdGVuIGxhc3QgY2hhbmdlcy4gIE1vcmUgZG9lc24ndCBtYWtlIHNlbnNlIGFuZCB0YWtlcyB0b28KKwkgKiBsb25nLgorCSAqLworCWlmIChzaXplID09IDEpCisJeworCSAgICB1ZXAgPSB1X2dldF9oZWFkZW50cnkoKTsKKwkgICAgcHJldl91ZXAgPSBOVUxMOworCSAgICBmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkKKwkgICAgeworCQlpZiAodWVwID09IE5VTEwpCisJCSAgICBicmVhazsKKworCQkvKiBJZiBsaW5lcyBoYXZlIGJlZW4gaW5zZXJ0ZWQvZGVsZXRlZCB3ZSBnaXZlIHVwLgorCQkgKiBBbHNvIHdoZW4gdGhlIGxpbmUgd2FzIGluY2x1ZGVkIGluIGEgbXVsdGktbGluZSBzYXZlLiAqLworCQlpZiAoKGN1cmJ1Zi0+Yl91X25ld2hlYWQtPnVoX2dldGJvdF9lbnRyeSAhPSB1ZXAKKwkJCSAgICA/ICh1ZXAtPnVlX3RvcCArIHVlcC0+dWVfc2l6ZSArIDEKKwkJCQkhPSAodWVwLT51ZV9ib3QgPT0gMAorCQkJCSAgICA/IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50ICsgMQorCQkJCSAgICA6IHVlcC0+dWVfYm90KSkKKwkJCSAgICA6IHVlcC0+dWVfbGNvdW50ICE9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQkJfHwgKHVlcC0+dWVfc2l6ZSA+IDEKKwkJCSAgICAmJiB0b3AgPj0gdWVwLT51ZV90b3AKKwkJCSAgICAmJiB0b3AgKyAyIDw9IHVlcC0+dWVfdG9wICsgdWVwLT51ZV9zaXplICsgMSkpCisJCSAgICBicmVhazsKKworCQkvKiBJZiBpdCdzIHRoZSBzYW1lIGxpbmUgd2UgY2FuIHNraXAgc2F2aW5nIGl0IGFnYWluLiAqLworCQlpZiAodWVwLT51ZV9zaXplID09IDEgJiYgdWVwLT51ZV90b3AgPT0gdG9wKQorCQl7CisJCSAgICBpZiAoaSA+IDApCisJCSAgICB7CisJCQkvKiBJdCdzIG5vdCB0aGUgbGFzdCBlbnRyeTogZ2V0IHVlX2JvdCBmb3IgdGhlIGxhc3QKKwkJCSAqIGVudHJ5IG5vdy4gIEZvbGxvd2luZyBkZWxldGVkL2luc2VydGVkIGxpbmVzIGdvIHRvCisJCQkgKiB0aGUgcmUtdXNlZCBlbnRyeS4gKi8KKwkJCXVfZ2V0Ym90KCk7CisJCQljdXJidWYtPmJfdV9zeW5jZWQgPSBGQUxTRTsKKworCQkJLyogTW92ZSB0aGUgZm91bmQgZW50cnkgdG8gYmVjb21lIHRoZSBsYXN0IGVudHJ5LiAgVGhlCisJCQkgKiBvcmRlciBvZiB1bmRvL3JlZG8gZG9lc24ndCBtYXR0ZXIgZm9yIHRoZSBlbnRyaWVzCisJCQkgKiB3ZSBtb3ZlIGl0IG92ZXIsIHNpbmNlIHRoZXkgZG9uJ3QgY2hhbmdlIHRoZSBsaW5lCisJCQkgKiBjb3VudCBhbmQgZG9uJ3QgaW5jbHVkZSB0aGlzIGxpbmUuICBJdCBkb2VzIG1hdHRlcgorCQkJICogZm9yIHRoZSBmb3VuZCBlbnRyeSBpZiB0aGUgbGluZSBjb3VudCBpcyBjaGFuZ2VkIGJ5CisJCQkgKiB0aGUgZXhlY3V0ZWQgY29tbWFuZC4gKi8KKwkJCXByZXZfdWVwLT51ZV9uZXh0ID0gdWVwLT51ZV9uZXh0OworCQkJdWVwLT51ZV9uZXh0ID0gY3VyYnVmLT5iX3VfbmV3aGVhZC0+dWhfZW50cnk7CisJCQljdXJidWYtPmJfdV9uZXdoZWFkLT51aF9lbnRyeSA9IHVlcDsKKwkJICAgIH0KKworCQkgICAgLyogVGhlIGV4ZWN1dGVkIGNvbW1hbmQgbWF5IGNoYW5nZSB0aGUgbGluZSBjb3VudC4gKi8KKwkJICAgIGlmIChuZXdib3QgIT0gMCkKKwkJCXVlcC0+dWVfYm90ID0gbmV3Ym90OworCQkgICAgZWxzZSBpZiAoYm90ID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCQl1ZXAtPnVlX2JvdCA9IDA7CisJCSAgICBlbHNlCisJCSAgICB7CisJCQl1ZXAtPnVlX2xjb3VudCA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCQkJY3VyYnVmLT5iX3VfbmV3aGVhZC0+dWhfZ2V0Ym90X2VudHJ5ID0gdWVwOworCQkgICAgfQorCQkgICAgcmV0dXJuIE9LOworCQl9CisJCXByZXZfdWVwID0gdWVwOworCQl1ZXAgPSB1ZXAtPnVlX25leHQ7CisJICAgIH0KKwl9CisKKwkvKiBmaW5kIGxpbmUgbnVtYmVyIGZvciB1ZV9ib3QgZm9yIHByZXZpb3VzIHVfc2F2ZSgpICovCisJdV9nZXRib3QoKTsKKyAgICB9CisKKyNpZiAhZGVmaW5lZChVTklYKSAmJiAhZGVmaW5lZChESkdQUCkgJiYgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fRU1YX18pCisJLyoKKwkgKiBXaXRoIEFtaWdhIGFuZCBNU0RPUyAxNiBiaXQgd2UgY2FuJ3QgaGFuZGxlIGJpZyB1bmRvJ3MsIGJlY2F1c2UKKwkgKiB0aGVuIHVfYWxsb2NfbGluZSB3b3VsZCBoYXZlIHRvIGFsbG9jYXRlIGEgYmxvY2sgbGFyZ2VyIHRoYW4gMzJLCisJICovCisgICAgaWYgKHNpemUgPj0gODAwMCkKKwlnb3RvIG5vbWVtOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIGFkZCBsaW5lcyBpbiBmcm9udCBvZiBlbnRyeSBsaXN0CisgICAgICovCisgICAgdWVwID0gKHVfZW50cnlfVCAqKXVfYWxsb2NfbGluZSgodW5zaWduZWQpc2l6ZW9mKHVfZW50cnlfVCkpOworICAgIGlmICh1ZXAgPT0gTlVMTCkKKwlnb3RvIG5vbWVtOworCisgICAgdWVwLT51ZV9zaXplID0gc2l6ZTsKKyAgICB1ZXAtPnVlX3RvcCA9IHRvcDsKKyAgICBpZiAobmV3Ym90ICE9IDApCisJdWVwLT51ZV9ib3QgPSBuZXdib3Q7CisgICAgLyoKKyAgICAgKiBVc2UgMCBmb3IgdWVfYm90IGlmIGJvdCBpcyBiZWxvdyBsYXN0IGxpbmUuCisgICAgICogT3RoZXJ3aXNlIHdlIGhhdmUgdG8gY29tcHV0ZSB1ZV9ib3QgbGF0ZXIuCisgICAgICovCisgICAgZWxzZSBpZiAoYm90ID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJdWVwLT51ZV9ib3QgPSAwOworICAgIGVsc2UKKyAgICB7CisJdWVwLT51ZV9sY291bnQgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwljdXJidWYtPmJfdV9uZXdoZWFkLT51aF9nZXRib3RfZW50cnkgPSB1ZXA7CisgICAgfQorCisgICAgaWYgKHNpemUpCisgICAgeworCWlmICgodWVwLT51ZV9hcnJheSA9IChjaGFyX3UgKiopdV9hbGxvY19saW5lKAorCQkJCSh1bnNpZ25lZCkoc2l6ZW9mKGNoYXJfdSAqKSAqIHNpemUpKSkgPT0gTlVMTCkKKwl7CisJICAgIHVfZnJlZWVudHJ5KHVlcCwgMEwpOworCSAgICBnb3RvIG5vbWVtOworCX0KKwlmb3IgKGkgPSAwLCBsbnVtID0gdG9wICsgMTsgaSA8IHNpemU7ICsraSkKKwl7CisJICAgIGlmICgodWVwLT51ZV9hcnJheVtpXSA9IHVfc2F2ZV9saW5lKGxudW0rKykpID09IE5VTEwpCisJICAgIHsKKwkJdV9mcmVlZW50cnkodWVwLCBpKTsKKwkJZ290byBub21lbTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgdWVwLT51ZV9uZXh0ID0gY3VyYnVmLT5iX3VfbmV3aGVhZC0+dWhfZW50cnk7CisgICAgY3VyYnVmLT5iX3VfbmV3aGVhZC0+dWhfZW50cnkgPSB1ZXA7CisgICAgY3VyYnVmLT5iX3Vfc3luY2VkID0gRkFMU0U7CisgICAgdW5kb191bmRvZXMgPSBGQUxTRTsKKworICAgIHJldHVybiBPSzsKKworbm9tZW06CisgICAgbXNnX3NpbGVudCA9IDA7CS8qIG11c3QgZGlzcGxheSB0aGUgcHJvbXB0ICovCisgICAgaWYgKGFza195ZXNubygoY2hhcl91ICopXygiTm8gdW5kbyBwb3NzaWJsZTsgY29udGludWUgYW55d2F5IiksIFRSVUUpCisJCQkJCQkJCSAgICAgICA9PSAneScpCisgICAgeworCXVuZG9fb2ZmID0gVFJVRTsJICAgIC8qIHdpbGwgYmUgcmVzZXQgd2hlbiBjaGFyYWN0ZXIgdHlwZWQgKi8KKwlyZXR1cm4gT0s7CisgICAgfQorICAgIGRvX291dG9mbWVtX21zZygobG9uZ191KTApOworICAgIHJldHVybiBGQUlMOworfQorCisvKgorICogSWYgJ2Nwb3B0aW9ucycgY29udGFpbnMgJ3UnOiBVbmRvIHRoZSBwcmV2aW91cyB1bmRvIG9yIHJlZG8gKHZpIGNvbXBhdGlibGUpLgorICogSWYgJ2Nwb3B0aW9ucycgZG9lcyBub3QgY29udGFpbiAndSc6IEFsd2F5cyB1bmRvLgorICovCisgICAgdm9pZAordV91bmRvKGNvdW50KQorICAgIGludCBjb3VudDsKK3sKKyAgICAvKgorICAgICAqIElmIHdlIGdldCBhbiB1bmRvIGNvbW1hbmQgd2hpbGUgZXhlY3V0aW5nIGEgbWFjcm8sIHdlIGJlaGF2ZSBsaWtlIHRoZQorICAgICAqIG9yaWdpbmFsIHZpLiBJZiB0aGlzIGhhcHBlbnMgdHdpY2UgaW4gb25lIG1hY3JvIHRoZSByZXN1bHQgd2lsbCBub3QKKyAgICAgKiBiZSBjb21wYXRpYmxlLgorICAgICAqLworICAgIGlmIChjdXJidWYtPmJfdV9zeW5jZWQgPT0gRkFMU0UpCisgICAgeworCXVfc3luYygpOworCWNvdW50ID0gMTsKKyAgICB9CisKKyAgICBpZiAodmltX3N0cmNocihwX2NwbywgQ1BPX1VORE8pID09IE5VTEwpCisJdW5kb191bmRvZXMgPSBUUlVFOworICAgIGVsc2UKKwl1bmRvX3VuZG9lcyA9ICF1bmRvX3VuZG9lczsKKyAgICB1X2RvaXQoY291bnQpOworfQorCisvKgorICogSWYgJ2Nwb3B0aW9ucycgY29udGFpbnMgJ3UnOiBSZXBlYXQgdGhlIHByZXZpb3VzIHVuZG8gb3IgcmVkby4KKyAqIElmICdjcG9wdGlvbnMnIGRvZXMgbm90IGNvbnRhaW4gJ3UnOiBBbHdheXMgcmVkby4KKyAqLworICAgIHZvaWQKK3VfcmVkbyhjb3VudCkKKyAgICBpbnQgY291bnQ7Cit7CisgICAgaWYgKHZpbV9zdHJjaHIocF9jcG8sIENQT19VTkRPKSA9PSBOVUxMKQorCXVuZG9fdW5kb2VzID0gRkFMU0U7CisgICAgdV9kb2l0KGNvdW50KTsKK30KKworLyoKKyAqIFVuZG8gb3IgcmVkbywgZGVwZW5kaW5nIG9uICd1bmRvX3VuZG9lcycsICdjb3VudCcgdGltZXMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordV9kb2l0KGNvdW50KQorICAgIGludCBjb3VudDsKK3sKKyAgICAvKiBEb24ndCBhbGxvdyBjaGFuZ2VzIHdoZW4gJ21vZGlmaWFibGUnIGlzIG9mZi4gKi8KKyAgICBpZiAoIWN1cmJ1Zi0+Yl9wX21hKQorICAgIHsKKwlFTVNHKF8oZV9tb2RpZmlhYmxlKSk7CisJcmV0dXJuOworICAgIH0KKyNpZmRlZiBIQVZFX1NBTkRCT1gKKyAgICAvKiBJbiB0aGUgc2FuZGJveCBpdCdzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgdGV4dC4gKi8KKyAgICBpZiAoc2FuZGJveCAhPSAwKQorICAgIHsKKwlFTVNHKF8oZV9zYW5kYm94KSk7CisJcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgdV9uZXdjb3VudCA9IDA7CisgICAgdV9vbGRjb3VudCA9IDA7CisgICAgd2hpbGUgKGNvdW50LS0pCisgICAgeworCWlmICh1bmRvX3VuZG9lcykKKwl7CisJICAgIGlmIChjdXJidWYtPmJfdV9jdXJoZWFkID09IE5VTEwpCQkvKiBmaXJzdCB1bmRvICovCisJCWN1cmJ1Zi0+Yl91X2N1cmhlYWQgPSBjdXJidWYtPmJfdV9uZXdoZWFkOworCSAgICBlbHNlIGlmIChwX3VsID4gMCkJCQkJLyogbXVsdGkgbGV2ZWwgdW5kbyAqLworCQkvKiBnZXQgbmV4dCB1bmRvICovCisJCWN1cmJ1Zi0+Yl91X2N1cmhlYWQgPSBjdXJidWYtPmJfdV9jdXJoZWFkLT51aF9uZXh0OworCSAgICAvKiBub3RoaW5nIHRvIHVuZG8gKi8KKwkgICAgaWYgKGN1cmJ1Zi0+Yl91X251bWhlYWQgPT0gMCB8fCBjdXJidWYtPmJfdV9jdXJoZWFkID09IE5VTEwpCisJICAgIHsKKwkJLyogc3RpY2sgY3VyYnVmLT5iX3VfY3VyaGVhZCBhdCBlbmQgKi8KKwkJY3VyYnVmLT5iX3VfY3VyaGVhZCA9IGN1cmJ1Zi0+Yl91X29sZGhlYWQ7CisJCWJlZXBfZmx1c2goKTsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICB1X3VuZG9yZWRvKCk7CisJfQorCWVsc2UKKwl7CisJICAgIGlmIChjdXJidWYtPmJfdV9jdXJoZWFkID09IE5VTEwgfHwgcF91bCA8PSAwKQorCSAgICB7CisJCWJlZXBfZmx1c2goKTsJLyogbm90aGluZyB0byByZWRvICovCisJCWJyZWFrOworCSAgICB9CisKKwkgICAgdV91bmRvcmVkbygpOworCSAgICAvKiBhZHZhbmNlIGZvciBuZXh0IHJlZG8gKi8KKwkgICAgY3VyYnVmLT5iX3VfY3VyaGVhZCA9IGN1cmJ1Zi0+Yl91X2N1cmhlYWQtPnVoX3ByZXY7CisJfQorICAgIH0KKyAgICB1X3VuZG9fZW5kKCk7Cit9CisKKy8qCisgKiB1X3VuZG9yZWRvOiBjb21tb24gY29kZSBmb3IgdW5kbyBhbmQgcmVkbworICoKKyAqIFRoZSBsaW5lcyBpbiB0aGUgZmlsZSBhcmUgcmVwbGFjZWQgYnkgdGhlIGxpbmVzIGluIHRoZSBlbnRyeSBsaXN0IGF0CisgKiBjdXJidWYtPmJfdV9jdXJoZWFkLiBUaGUgcmVwbGFjZWQgbGluZXMgaW4gdGhlIGZpbGUgYXJlIHNhdmVkIGluIHRoZSBlbnRyeQorICogbGlzdCBmb3IgdGhlIG5leHQgdW5kby9yZWRvLgorICovCisgICAgc3RhdGljIHZvaWQKK3VfdW5kb3JlZG8oKQoreworICAgIGNoYXJfdQkqKm5ld2FycmF5ID0gTlVMTDsKKyAgICBsaW5lbnJfVAlvbGRzaXplOworICAgIGxpbmVucl9UCW5ld3NpemU7CisgICAgbGluZW5yX1QJdG9wLCBib3Q7CisgICAgbGluZW5yX1QJbG51bTsKKyAgICBsaW5lbnJfVAluZXdsbnVtID0gTUFYTE5VTTsKKyAgICBsb25nCWk7CisgICAgdV9lbnRyeV9UCSp1ZXAsICpudWVwOworICAgIHVfZW50cnlfVAkqbmV3bGlzdCA9IE5VTEw7CisgICAgaW50CQlvbGRfZmxhZ3M7CisgICAgaW50CQluZXdfZmxhZ3M7CisgICAgcG9zX1QJbmFtZWRtW05NQVJLU107CisgICAgaW50CQllbXB0eV9idWZmZXI7CQkgICAgLyogYnVmZmVyIGJlY2FtZSBlbXB0eSAqLworCisgICAgb2xkX2ZsYWdzID0gY3VyYnVmLT5iX3VfY3VyaGVhZC0+dWhfZmxhZ3M7CisgICAgbmV3X2ZsYWdzID0gKGN1cmJ1Zi0+Yl9jaGFuZ2VkID8gVUhfQ0hBTkdFRCA6IDApICsKKwkgICAgICAgKChjdXJidWYtPmJfbWwubWxfZmxhZ3MgJiBNTF9FTVBUWSkgPyBVSF9FTVBUWUJVRiA6IDApOworICAgIHNldHBjbWFyaygpOworCisgICAgLyoKKyAgICAgKiBzYXZlIG1hcmtzIGJlZm9yZSB1bmRvL3JlZG8KKyAgICAgKi8KKyAgICBtY2hfbWVtbW92ZShuYW1lZG0sIGN1cmJ1Zi0+Yl9uYW1lZG0sIHNpemVvZihwb3NfVCkgKiBOTUFSS1MpOworICAgIGN1cmJ1Zi0+Yl9vcF9zdGFydC5sbnVtID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisgICAgY3VyYnVmLT5iX29wX3N0YXJ0LmNvbCA9IDA7CisgICAgY3VyYnVmLT5iX29wX2VuZC5sbnVtID0gMDsKKyAgICBjdXJidWYtPmJfb3BfZW5kLmNvbCA9IDA7CisKKyAgICBmb3IgKHVlcCA9IGN1cmJ1Zi0+Yl91X2N1cmhlYWQtPnVoX2VudHJ5OyB1ZXAgIT0gTlVMTDsgdWVwID0gbnVlcCkKKyAgICB7CisJdG9wID0gdWVwLT51ZV90b3A7CisJYm90ID0gdWVwLT51ZV9ib3Q7CisJaWYgKGJvdCA9PSAwKQorCSAgICBib3QgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCArIDE7CisJaWYgKHRvcCA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50IHx8IHRvcCA+PSBib3QKKwkJCQkgICAgICB8fCBib3QgPiBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCArIDEpCisJeworCSAgICBFTVNHKF8oIkU0Mzg6IHVfdW5kbzogbGluZSBudW1iZXJzIHdyb25nIikpOworCSAgICBjaGFuZ2VkKCk7CQkvKiBkb24ndCB3YW50IFVOQ0hBTkdFRCBub3cgKi8KKwkgICAgcmV0dXJuOworCX0KKworCW9sZHNpemUgPSBib3QgLSB0b3AgLSAxOyAgICAvKiBudW1iZXIgb2YgbGluZXMgYmVmb3JlIHVuZG8gKi8KKwluZXdzaXplID0gdWVwLT51ZV9zaXplOwkgICAgLyogbnVtYmVyIG9mIGxpbmVzIGFmdGVyIHVuZG8gKi8KKworCWlmICh0b3AgPCBuZXdsbnVtKQorCXsKKwkgICAgLyogSWYgdGhlIHNhdmVkIGN1cnNvciBpcyBzb21ld2hlcmUgaW4gdGhpcyB1bmRvIGJsb2NrLCBtb3ZlIGl0IHRvCisJICAgICAqIHRoZSByZW1lbWJlcmVkIHBvc2l0aW9uLiAgTWFrZXMgImd3YXAiIHB1dCB0aGUgY3Vyc29yIGJhY2sKKwkgICAgICogd2hlcmUgaXQgd2FzLiAqLworCSAgICBsbnVtID0gY3VyYnVmLT5iX3VfY3VyaGVhZC0+dWhfY3Vyc29yLmxudW07CisJICAgIGlmIChsbnVtID49IHRvcCAmJiBsbnVtIDw9IHRvcCArIG5ld3NpemUgKyAxKQorCSAgICB7CisJCWN1cndpbi0+d19jdXJzb3IgPSBjdXJidWYtPmJfdV9jdXJoZWFkLT51aF9jdXJzb3I7CisJCW5ld2xudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW0gLSAxOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQkvKiBVc2UgdGhlIGZpcnN0IGxpbmUgdGhhdCBhY3R1YWxseSBjaGFuZ2VkLiAgQXZvaWRzIHRoYXQKKwkJICogdW5kb2luZyBhdXRvLWZvcm1hdHRpbmcgcHV0cyB0aGUgY3Vyc29yIGluIHRoZSBwcmV2aW91cworCQkgKiBsaW5lLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbmV3c2l6ZSAmJiBpIDwgb2xkc2l6ZTsgKytpKQorCQkgICAgaWYgKFNUUkNNUCh1ZXAtPnVlX2FycmF5W2ldLCBtbF9nZXQodG9wICsgMSArIGkpKSAhPSAwKQorCQkJYnJlYWs7CisJCWlmIChpID09IG5ld3NpemUgJiYgbmV3bG51bSA9PSBNQVhMTlVNICYmIHVlcC0+dWVfbmV4dCA9PSBOVUxMKQorCQl7CisJCSAgICBuZXdsbnVtID0gdG9wOworCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbmV3bG51bSArIDE7CisJCX0KKwkJZWxzZSBpZiAoaSA8IG5ld3NpemUpCisJCXsKKwkJICAgIG5ld2xudW0gPSB0b3AgKyBpOworCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gbmV3bG51bSArIDE7CisJCX0KKwkgICAgfQorCX0KKworCWVtcHR5X2J1ZmZlciA9IEZBTFNFOworCisJLyogZGVsZXRlIHRoZSBsaW5lcyBiZXR3ZWVuIHRvcCBhbmQgYm90IGFuZCBzYXZlIHRoZW0gaW4gbmV3YXJyYXkgKi8KKwlpZiAob2xkc2l6ZSkKKwl7CisJICAgIGlmICgobmV3YXJyYXkgPSAoY2hhcl91ICoqKXVfYWxsb2NfbGluZSgKKwkJCSAgICAodW5zaWduZWQpKHNpemVvZihjaGFyX3UgKikgKiBvbGRzaXplKSkpID09IE5VTEwpCisJICAgIHsKKwkJZG9fb3V0b2ZtZW1fbXNnKChsb25nX3UpKHNpemVvZihjaGFyX3UgKikgKiBvbGRzaXplKSk7CisJCS8qCisJCSAqIFdlIGhhdmUgbWVzc2VkIHVwIHRoZSBlbnRyeSBsaXN0LCByZXBhaXIgaXMgaW1wb3NzaWJsZS4KKwkJICogd2UgaGF2ZSB0byBmcmVlIHRoZSByZXN0IG9mIHRoZSBsaXN0LgorCQkgKi8KKwkJd2hpbGUgKHVlcCAhPSBOVUxMKQorCQl7CisJCSAgICBudWVwID0gdWVwLT51ZV9uZXh0OworCQkgICAgdV9mcmVlZW50cnkodWVwLCB1ZXAtPnVlX3NpemUpOworCQkgICAgdWVwID0gbnVlcDsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCSAgICAvKiBkZWxldGUgYmFja3dhcmRzLCBpdCBnb2VzIGZhc3RlciBpbiBtb3N0IGNhc2VzICovCisJICAgIGZvciAobG51bSA9IGJvdCAtIDEsIGkgPSBvbGRzaXplOyAtLWkgPj0gMDsgLS1sbnVtKQorCSAgICB7CisJCS8qIHdoYXQgY2FuIHdlIGRvIHdoZW4gd2UgcnVuIG91dCBvZiBtZW1vcnk/ICovCisJCWlmICgobmV3YXJyYXlbaV0gPSB1X3NhdmVfbGluZShsbnVtKSkgPT0gTlVMTCkKKwkJICAgIGRvX291dG9mbWVtX21zZygobG9uZ191KTApOworCQkvKiByZW1lbWJlciB3ZSBkZWxldGVkIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGJ1ZmZlciwgYW5kIGEKKwkJICogZHVtbXkgZW1wdHkgbGluZSB3aWxsIGJlIGluc2VydGVkICovCisJCWlmIChjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCA9PSAxKQorCQkgICAgZW1wdHlfYnVmZmVyID0gVFJVRTsKKwkJbWxfZGVsZXRlKGxudW0sIEZBTFNFKTsKKwkgICAgfQorCX0KKworCS8qIGluc2VydCB0aGUgbGluZXMgaW4gdV9hcnJheSBiZXR3ZWVuIHRvcCBhbmQgYm90ICovCisJaWYgKG5ld3NpemUpCisJeworCSAgICBmb3IgKGxudW0gPSB0b3AsIGkgPSAwOyBpIDwgbmV3c2l6ZTsgKytpLCArK2xudW0pCisJICAgIHsKKwkJLyoKKwkJICogSWYgdGhlIGZpbGUgaXMgZW1wdHksIHRoZXJlIGlzIGFuIGVtcHR5IGxpbmUgMSB0aGF0IHdlCisJCSAqIHNob3VsZCBnZXQgcmlkIG9mLCBieSByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbmV3IGxpbmUKKwkJICovCisJCWlmIChlbXB0eV9idWZmZXIgJiYgbG51bSA9PSAwKQorCQkgICAgbWxfcmVwbGFjZSgobGluZW5yX1QpMSwgdWVwLT51ZV9hcnJheVtpXSwgVFJVRSk7CisJCWVsc2UKKwkJICAgIG1sX2FwcGVuZChsbnVtLCB1ZXAtPnVlX2FycmF5W2ldLCAoY29sbnJfVCkwLCBGQUxTRSk7CisJCXVfZnJlZV9saW5lKHVlcC0+dWVfYXJyYXlbaV0sIEZBTFNFKTsKKwkgICAgfQorCSAgICB1X2ZyZWVfbGluZSgoY2hhcl91ICopdWVwLT51ZV9hcnJheSwgRkFMU0UpOworCX0KKworCS8qIGFkanVzdCBtYXJrcyAqLworCWlmIChvbGRzaXplICE9IG5ld3NpemUpCisJeworCSAgICBtYXJrX2FkanVzdCh0b3AgKyAxLCB0b3AgKyBvbGRzaXplLCAobG9uZylNQVhMTlVNLAorCQkJCQkgICAgICAgKGxvbmcpbmV3c2l6ZSAtIChsb25nKW9sZHNpemUpOworCSAgICBpZiAoY3VyYnVmLT5iX29wX3N0YXJ0LmxudW0gPiB0b3AgKyBvbGRzaXplKQorCQljdXJidWYtPmJfb3Bfc3RhcnQubG51bSArPSBuZXdzaXplIC0gb2xkc2l6ZTsKKwkgICAgaWYgKGN1cmJ1Zi0+Yl9vcF9lbmQubG51bSA+IHRvcCArIG9sZHNpemUpCisJCWN1cmJ1Zi0+Yl9vcF9lbmQubG51bSArPSBuZXdzaXplIC0gb2xkc2l6ZTsKKwl9CisKKwljaGFuZ2VkX2xpbmVzKHRvcCArIDEsIDAsIGJvdCwgbmV3c2l6ZSAtIG9sZHNpemUpOworCisJLyogc2V0ICdbIGFuZCAnXSBtYXJrICovCisJaWYgKHRvcCArIDEgPCBjdXJidWYtPmJfb3Bfc3RhcnQubG51bSkKKwkgICAgY3VyYnVmLT5iX29wX3N0YXJ0LmxudW0gPSB0b3AgKyAxOworCWlmIChuZXdzaXplID09IDAgJiYgdG9wICsgMSA+IGN1cmJ1Zi0+Yl9vcF9lbmQubG51bSkKKwkgICAgY3VyYnVmLT5iX29wX2VuZC5sbnVtID0gdG9wICsgMTsKKwllbHNlIGlmICh0b3AgKyBuZXdzaXplID4gY3VyYnVmLT5iX29wX2VuZC5sbnVtKQorCSAgICBjdXJidWYtPmJfb3BfZW5kLmxudW0gPSB0b3AgKyBuZXdzaXplOworCisJdV9uZXdjb3VudCArPSBuZXdzaXplOworCXVfb2xkY291bnQgKz0gb2xkc2l6ZTsKKwl1ZXAtPnVlX3NpemUgPSBvbGRzaXplOworCXVlcC0+dWVfYXJyYXkgPSBuZXdhcnJheTsKKwl1ZXAtPnVlX2JvdCA9IHRvcCArIG5ld3NpemUgKyAxOworCisJLyoKKwkgKiBpbnNlcnQgdGhpcyBlbnRyeSBpbiBmcm9udCBvZiB0aGUgbmV3IGVudHJ5IGxpc3QKKwkgKi8KKwludWVwID0gdWVwLT51ZV9uZXh0OworCXVlcC0+dWVfbmV4dCA9IG5ld2xpc3Q7CisJbmV3bGlzdCA9IHVlcDsKKyAgICB9CisKKyAgICBjdXJidWYtPmJfdV9jdXJoZWFkLT51aF9lbnRyeSA9IG5ld2xpc3Q7CisgICAgY3VyYnVmLT5iX3VfY3VyaGVhZC0+dWhfZmxhZ3MgPSBuZXdfZmxhZ3M7CisgICAgaWYgKChvbGRfZmxhZ3MgJiBVSF9FTVBUWUJVRikgJiYgYnVmZW1wdHkoKSkKKwljdXJidWYtPmJfbWwubWxfZmxhZ3MgfD0gTUxfRU1QVFk7CisgICAgaWYgKG9sZF9mbGFncyAmIFVIX0NIQU5HRUQpCisJY2hhbmdlZCgpOworICAgIGVsc2UKKwl1bmNoYW5nZWQoY3VyYnVmLCBGQUxTRSk7CisKKyAgICAvKgorICAgICAqIHJlc3RvcmUgbWFya3MgZnJvbSBiZWZvcmUgdW5kby9yZWRvCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IE5NQVJLUzsgKytpKQorCWlmIChjdXJidWYtPmJfdV9jdXJoZWFkLT51aF9uYW1lZG1baV0ubG51bSkKKwl7CisJICAgIGN1cmJ1Zi0+Yl9uYW1lZG1baV0gPSBjdXJidWYtPmJfdV9jdXJoZWFkLT51aF9uYW1lZG1baV07CisJICAgIGN1cmJ1Zi0+Yl91X2N1cmhlYWQtPnVoX25hbWVkbVtpXSA9IG5hbWVkbVtpXTsKKwl9CisKKyAgICAvKgorICAgICAqIElmIHRoZSBjdXJzb3IgaXMgb25seSBvZmYgYnkgb25lIGxpbmUsIHB1dCBpdCBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcworICAgICAqIGJlZm9yZSBzdGFydGluZyB0aGUgY2hhbmdlIChmb3IgdGhlICJvIiBjb21tYW5kKS4KKyAgICAgKiBPdGhlcndpc2UgdGhlIGN1cnNvciBzaG91bGQgZ28gdG8gdGhlIGZpcnN0IHVuZG9uZSBsaW5lLgorICAgICAqLworICAgIGlmIChjdXJidWYtPmJfdV9jdXJoZWFkLT51aF9jdXJzb3IubG51bSArIDEgPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtCisJCQkJCQkgJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtID4gMSkKKwktLWN1cndpbi0+d19jdXJzb3IubG51bTsKKyAgICBpZiAoY3VyYnVmLT5iX3VfY3VyaGVhZC0+dWhfY3Vyc29yLmxudW0gPT0gY3Vyd2luLT53X2N1cnNvci5sbnVtKQorICAgIHsKKwljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGN1cmJ1Zi0+Yl91X2N1cmhlYWQtPnVoX2N1cnNvci5jb2w7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCWlmICh2aXJ0dWFsX2FjdGl2ZSgpICYmIGN1cmJ1Zi0+Yl91X2N1cmhlYWQtPnVoX2N1cnNvcl92Y29sID49IDApCisJICAgIGNvbGFkdmFuY2UoKGNvbG5yX1QpY3VyYnVmLT5iX3VfY3VyaGVhZC0+dWhfY3Vyc29yX3Zjb2wpOworCWVsc2UKKwkgICAgY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSAwOworI2VuZGlmCisgICAgfQorICAgIGVsc2UgaWYgKGN1cndpbi0+d19jdXJzb3IubG51bSA8PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKKwliZWdpbmxpbmUoQkxfU09MIHwgQkxfRklYKTsKKyAgICBlbHNlCisgICAgeworCS8qIFdlIGdldCBoZXJlIHdpdGggdGhlIGN1cnJlbnQgY3Vyc29yIGxpbmUgYmVpbmcgcGFzdCB0aGUgZW5kIChlZworCSAqIGFmdGVyIGFkZGluZyBsaW5lcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCBhbmQgdGhlbiB1bmRvaW5nIGl0KS4KKwkgKiBjaGVja19jdXJzb3IoKSB3aWxsIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgbGFzdCBsaW5lLiAgTW92ZSBpdCB0bworCSAqIHRoZSBmaXJzdCBjb2x1bW4gaGVyZS4gKi8KKwljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorCWN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorICAgIH0KKworICAgIC8qIE1ha2Ugc3VyZSB0aGUgY3Vyc29yIGlzIG9uIGFuIGV4aXN0aW5nIGxpbmUgYW5kIGNvbHVtbi4gKi8KKyAgICBjaGVja19jdXJzb3IoKTsKK30KKworLyoKKyAqIElmIHdlIGRlbGV0ZWQgb3IgYWRkZWQgbGluZXMsIHJlcG9ydCB0aGUgbnVtYmVyIG9mIGxlc3MvbW9yZSBsaW5lcy4KKyAqIE90aGVyd2lzZSwgcmVwb3J0IHRoZSBudW1iZXIgb2YgY2hhbmdlcyAodGhpcyBtYXkgYmUgaW5jb3JyZWN0CisgKiBpbiBzb21lIGNhc2VzLCBidXQgaXQncyBiZXR0ZXIgdGhhbiBub3RoaW5nKS4KKyAqLworICAgIHN0YXRpYyB2b2lkCit1X3VuZG9fZW5kKCkKK3sKKyAgICBpZiAoKHVfb2xkY291bnQgLT0gdV9uZXdjb3VudCkgIT0gMCkKKwltc2dtb3JlKC11X29sZGNvdW50KTsKKyAgICBlbHNlIGlmICh1X25ld2NvdW50ID4gcF9yZXBvcnQpCisgICAgeworCWlmICh1X25ld2NvdW50ID09IDEpCisJICAgIE1TRyhfKCIxIGNoYW5nZSIpKTsKKwllbHNlCisJICAgIHNtc2coKGNoYXJfdSAqKV8oIiVsZCBjaGFuZ2VzIiksIHVfbmV3Y291bnQpOworICAgIH0KKyNpZmRlZiBGRUFUX0ZPTERJTkcKKyAgICBpZiAoKGZkb19mbGFncyAmIEZET19VTkRPKSAmJiBLZXlUeXBlZCkKKwlmb2xkT3BlbkN1cnNvcigpOworI2VuZGlmCit9CisKKy8qCisgKiB1X3N5bmM6IHN0b3AgYWRkaW5nIHRvIHRoZSBjdXJyZW50IGVudHJ5IGxpc3QKKyAqLworICAgIHZvaWQKK3Vfc3luYygpCit7CisgICAgaWYgKGN1cmJ1Zi0+Yl91X3N5bmNlZCkKKwlyZXR1cm47CQkgICAgLyogYWxyZWFkeSBzeW5jZWQgKi8KKyNpZiBkZWZpbmVkKEZFQVRfWElNKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0dUSykKKyAgICBpZiAoaW1faXNfcHJlZWRpdGluZygpKQorCXJldHVybjsJCSAgICAvKiBYSU0gaXMgYnVzeSwgZG9uJ3QgYnJlYWsgYW4gdW5kbyBzZXF1ZW5jZSAqLworI2VuZGlmCisgICAgaWYgKHBfdWwgPCAwKQorCWN1cmJ1Zi0+Yl91X3N5bmNlZCA9IFRSVUU7ICAvKiBubyBlbnRyaWVzLCBub3RoaW5nIHRvIGRvICovCisgICAgZWxzZQorICAgIHsKKwl1X2dldGJvdCgpOwkJICAgIC8qIGNvbXB1dGUgdWVfYm90IG9mIHByZXZpb3VzIHVfc2F2ZSAqLworCWN1cmJ1Zi0+Yl91X2N1cmhlYWQgPSBOVUxMOworICAgIH0KK30KKworLyoKKyAqIENhbGxlZCBhZnRlciB3cml0aW5nIHRoZSBmaWxlIGFuZCBzZXR0aW5nIGJfY2hhbmdlZCB0byBGQUxTRS4KKyAqIE5vdyBhbiB1bmRvIG1lYW5zIHRoYXQgdGhlIGJ1ZmZlciBpcyBtb2RpZmllZC4KKyAqLworICAgIHZvaWQKK3VfdW5jaGFuZ2VkKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIHN0cnVjdCB1X2hlYWRlcgkqdWg7CisKKyAgICBmb3IgKHVoID0gYnVmLT5iX3VfbmV3aGVhZDsgdWg7IHVoID0gdWgtPnVoX25leHQpCisJdWgtPnVoX2ZsYWdzIHw9IFVIX0NIQU5HRUQ7CisgICAgYnVmLT5iX2RpZF93YXJuID0gRkFMU0U7Cit9CisKKy8qCisgKiBHZXQgcG9pbnRlciB0byBsYXN0IGFkZGVkIGVudHJ5LgorICogSWYgaXQncyBub3QgdmFsaWQsIGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIE5VTEwuCisgKi8KKyAgICBzdGF0aWMgdV9lbnRyeV9UICoKK3VfZ2V0X2hlYWRlbnRyeSgpCit7CisgICAgaWYgKGN1cmJ1Zi0+Yl91X25ld2hlYWQgPT0gTlVMTCB8fCBjdXJidWYtPmJfdV9uZXdoZWFkLT51aF9lbnRyeSA9PSBOVUxMKQorICAgIHsKKwlFTVNHKF8oIkU0Mzk6IHVuZG8gbGlzdCBjb3JydXB0IikpOworCXJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gY3VyYnVmLT5iX3VfbmV3aGVhZC0+dWhfZW50cnk7Cit9CisKKy8qCisgKiB1X2dldGJvdCgpOiBjb21wdXRlIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgcHJldmlvdXMgdV9zYXZlCisgKgkJSXQgaXMgY2FsbGVkIG9ubHkgd2hlbiBiX3Vfc3luY2VkIGlzIEZBTFNFLgorICovCisgICAgc3RhdGljIHZvaWQKK3VfZ2V0Ym90KCkKK3sKKyAgICB1X2VudHJ5X1QJKnVlcDsKKyAgICBsaW5lbnJfVAlleHRyYTsKKworICAgIHVlcCA9IHVfZ2V0X2hlYWRlbnRyeSgpOwkvKiBjaGVjayBmb3IgY29ycnVwdCB1bmRvIGxpc3QgKi8KKyAgICBpZiAodWVwID09IE5VTEwpCisJcmV0dXJuOworCisgICAgdWVwID0gY3VyYnVmLT5iX3VfbmV3aGVhZC0+dWhfZ2V0Ym90X2VudHJ5OworICAgIGlmICh1ZXAgIT0gTlVMTCkKKyAgICB7CisJLyoKKwkgKiB0aGUgbmV3IHVlX2JvdCBpcyBjb21wdXRlZCBmcm9tIHRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBoYXMgYmVlbgorCSAqIGluc2VydGVkICgwIC0gZGVsZXRlZCkgc2luY2UgY2FsbGluZyB1X3NhdmUuIFRoaXMgaXMgZXF1YWwgdG8gdGhlCisJICogb2xkIGxpbmUgY291bnQgc3VidHJhY3RlZCBmcm9tIHRoZSBjdXJyZW50IGxpbmUgY291bnQuCisJICovCisJZXh0cmEgPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCAtIHVlcC0+dWVfbGNvdW50OworCXVlcC0+dWVfYm90ID0gdWVwLT51ZV90b3AgKyB1ZXAtPnVlX3NpemUgKyAxICsgZXh0cmE7CisJaWYgKHVlcC0+dWVfYm90IDwgMSB8fCB1ZXAtPnVlX2JvdCA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCXsKKwkgICAgRU1TRyhfKCJFNDQwOiB1bmRvIGxpbmUgbWlzc2luZyIpKTsKKwkgICAgdWVwLT51ZV9ib3QgPSB1ZXAtPnVlX3RvcCArIDE7ICAvKiBhc3N1bWUgYWxsIGxpbmVzIGRlbGV0ZWQsIHdpbGwKKwkJCQkJICAgICAqIGdldCBhbGwgdGhlIG9sZCBsaW5lcyBiYWNrCisJCQkJCSAgICAgKiB3aXRob3V0IGRlbGV0aW5nIHRoZSBjdXJyZW50CisJCQkJCSAgICAgKiBvbmVzICovCisJfQorCisJY3VyYnVmLT5iX3VfbmV3aGVhZC0+dWhfZ2V0Ym90X2VudHJ5ID0gTlVMTDsKKyAgICB9CisKKyAgICBjdXJidWYtPmJfdV9zeW5jZWQgPSBUUlVFOworfQorCisvKgorICogdV9mcmVlbGlzdDogZnJlZSBvbmUgZW50cnkgbGlzdCBhbmQgYWRqdXN0IHRoZSBwb2ludGVycworICovCisgICAgc3RhdGljIHZvaWQKK3VfZnJlZWxpc3QodWhwKQorICAgIHN0cnVjdCB1X2hlYWRlciAqdWhwOworeworICAgIHVfZW50cnlfVAkqdWVwLCAqbnVlcDsKKworICAgIGZvciAodWVwID0gdWhwLT51aF9lbnRyeTsgdWVwICE9IE5VTEw7IHVlcCA9IG51ZXApCisgICAgeworCW51ZXAgPSB1ZXAtPnVlX25leHQ7CisJdV9mcmVlZW50cnkodWVwLCB1ZXAtPnVlX3NpemUpOworICAgIH0KKworICAgIGlmIChjdXJidWYtPmJfdV9jdXJoZWFkID09IHVocCkKKwljdXJidWYtPmJfdV9jdXJoZWFkID0gTlVMTDsKKworICAgIGlmICh1aHAtPnVoX25leHQgPT0gTlVMTCkKKwljdXJidWYtPmJfdV9vbGRoZWFkID0gdWhwLT51aF9wcmV2OworICAgIGVsc2UKKwl1aHAtPnVoX25leHQtPnVoX3ByZXYgPSB1aHAtPnVoX3ByZXY7CisKKyAgICBpZiAodWhwLT51aF9wcmV2ID09IE5VTEwpCisJY3VyYnVmLT5iX3VfbmV3aGVhZCA9IHVocC0+dWhfbmV4dDsKKyAgICBlbHNlCisJdWhwLT51aF9wcmV2LT51aF9uZXh0ID0gdWhwLT51aF9uZXh0OworCisgICAgdV9mcmVlX2xpbmUoKGNoYXJfdSAqKXVocCwgRkFMU0UpOworICAgIC0tY3VyYnVmLT5iX3VfbnVtaGVhZDsKK30KKworLyoKKyAqIGZyZWUgZW50cnkgJ3VlcCcgYW5kICduJyBsaW5lcyBpbiB1ZXAtPnVlX2FycmF5W10KKyAqLworICAgIHN0YXRpYyB2b2lkCit1X2ZyZWVlbnRyeSh1ZXAsIG4pCisgICAgdV9lbnRyeV9UCSp1ZXA7CisgICAgbG9uZwkgICAgbjsKK3sKKyAgICB3aGlsZSAobikKKwl1X2ZyZWVfbGluZSh1ZXAtPnVlX2FycmF5Wy0tbl0sIEZBTFNFKTsKKyAgICB1X2ZyZWVfbGluZSgoY2hhcl91ICopdWVwLCBGQUxTRSk7Cit9CisKKy8qCisgKiBpbnZhbGlkYXRlIHRoZSB1bmRvIGJ1ZmZlcjsgY2FsbGVkIHdoZW4gc3RvcmFnZSBoYXMgYWxyZWFkeSBiZWVuIHJlbGVhc2VkCisgKi8KKyAgICB2b2lkCit1X2NsZWFyYWxsKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIGJ1Zi0+Yl91X25ld2hlYWQgPSBidWYtPmJfdV9vbGRoZWFkID0gYnVmLT5iX3VfY3VyaGVhZCA9IE5VTEw7CisgICAgYnVmLT5iX3Vfc3luY2VkID0gVFJVRTsKKyAgICBidWYtPmJfdV9udW1oZWFkID0gMDsKKyAgICBidWYtPmJfdV9saW5lX3B0ciA9IE5VTEw7CisgICAgYnVmLT5iX3VfbGluZV9sbnVtID0gMDsKK30KKworLyoKKyAqIHNhdmUgdGhlIGxpbmUgImxudW0iIGZvciB0aGUgIlUiIGNvbW1hbmQKKyAqLworICAgIHZvaWQKK3Vfc2F2ZWxpbmUobG51bSkKKyAgICBsaW5lbnJfVCBsbnVtOworeworICAgIGlmIChsbnVtID09IGN1cmJ1Zi0+Yl91X2xpbmVfbG51bSkJICAgIC8qIGxpbmUgaXMgYWxyZWFkeSBzYXZlZCAqLworCXJldHVybjsKKyAgICBpZiAobG51bSA8IDEgfHwgbG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJcmV0dXJuOworICAgIHVfY2xlYXJsaW5lKCk7CisgICAgY3VyYnVmLT5iX3VfbGluZV9sbnVtID0gbG51bTsKKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID09IGxudW0pCisJY3VyYnVmLT5iX3VfbGluZV9jb2xuciA9IGN1cndpbi0+d19jdXJzb3IuY29sOworICAgIGVsc2UKKwljdXJidWYtPmJfdV9saW5lX2NvbG5yID0gMDsKKyAgICBpZiAoKGN1cmJ1Zi0+Yl91X2xpbmVfcHRyID0gdV9zYXZlX2xpbmUobG51bSkpID09IE5VTEwpCisJZG9fb3V0b2ZtZW1fbXNnKChsb25nX3UpMCk7Cit9CisKKy8qCisgKiBjbGVhciB0aGUgbGluZSBzYXZlZCBmb3IgdGhlICJVIiBjb21tYW5kCisgKiAodGhpcyBpcyB1c2VkIGV4dGVybmFsbHkgZm9yIGNyb3NzaW5nIGEgbGluZSB3aGlsZSBpbiBpbnNlcnQgbW9kZSkKKyAqLworICAgIHZvaWQKK3VfY2xlYXJsaW5lKCkKK3sKKyAgICBpZiAoY3VyYnVmLT5iX3VfbGluZV9wdHIgIT0gTlVMTCkKKyAgICB7CisJdV9mcmVlX2xpbmUoY3VyYnVmLT5iX3VfbGluZV9wdHIsIEZBTFNFKTsKKwljdXJidWYtPmJfdV9saW5lX3B0ciA9IE5VTEw7CisJY3VyYnVmLT5iX3VfbGluZV9sbnVtID0gMDsKKyAgICB9Cit9CisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgIlUiIGNvbW1hbmQuCisgKiBEaWZmZXJlbnRpYXRpb24gZnJvbSB2aTogIlUiIGNhbiBiZSB1bmRvbmUgd2l0aCB0aGUgbmV4dCAiVSIuCisgKiBXZSBhbHNvIGFsbG93IHRoZSBjdXJzb3IgdG8gYmUgaW4gYW5vdGhlciBsaW5lLgorICovCisgICAgdm9pZAordV91bmRvbGluZSgpCit7CisgICAgY29sbnJfVCB0OworICAgIGNoYXJfdSAgKm9sZHA7CisKKyAgICBpZiAodW5kb19vZmYpCisJcmV0dXJuOworCisgICAgaWYgKGN1cmJ1Zi0+Yl91X2xpbmVfcHRyID09IE5VTEwgfHwKKwkJCWN1cmJ1Zi0+Yl91X2xpbmVfbG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorICAgIHsKKwliZWVwX2ZsdXNoKCk7CisJcmV0dXJuOworICAgIH0KKwkvKiBmaXJzdCBzYXZlIHRoZSBsaW5lIGZvciB0aGUgJ3UnIGNvbW1hbmQgKi8KKyAgICBpZiAodV9zYXZlY29tbW9uKGN1cmJ1Zi0+Yl91X2xpbmVfbG51bSAtIDEsCisJCQkJY3VyYnVmLT5iX3VfbGluZV9sbnVtICsgMSwgKGxpbmVucl9UKTApID09IEZBSUwpCisJcmV0dXJuOworICAgIG9sZHAgPSB1X3NhdmVfbGluZShjdXJidWYtPmJfdV9saW5lX2xudW0pOworICAgIGlmIChvbGRwID09IE5VTEwpCisgICAgeworCWRvX291dG9mbWVtX21zZygobG9uZ191KTApOworCXJldHVybjsKKyAgICB9CisgICAgbWxfcmVwbGFjZShjdXJidWYtPmJfdV9saW5lX2xudW0sIGN1cmJ1Zi0+Yl91X2xpbmVfcHRyLCBUUlVFKTsKKyAgICBjaGFuZ2VkX2J5dGVzKGN1cmJ1Zi0+Yl91X2xpbmVfbG51bSwgMCk7CisgICAgdV9mcmVlX2xpbmUoY3VyYnVmLT5iX3VfbGluZV9wdHIsIEZBTFNFKTsKKyAgICBjdXJidWYtPmJfdV9saW5lX3B0ciA9IG9sZHA7CisKKyAgICB0ID0gY3VyYnVmLT5iX3VfbGluZV9jb2xucjsKKyAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID09IGN1cmJ1Zi0+Yl91X2xpbmVfbG51bSkKKwljdXJidWYtPmJfdV9saW5lX2NvbG5yID0gY3Vyd2luLT53X2N1cnNvci5jb2w7CisgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSB0OworICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGN1cmJ1Zi0+Yl91X2xpbmVfbG51bTsKK30KKworLyoKKyAqIHN0b3JhZ2UgYWxsb2NhdGlvbiBmb3IgdGhlIHVuZG8gbGluZXMgYW5kIGJsb2NrcyBvZiB0aGUgY3VycmVudCBmaWxlCisgKi8KKworLyoKKyAqIE1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4gcmVsYXRpdmVseSBsYXJnZSBibG9ja3MuIFRoZXNlIGJsb2NrcyBhcmUgbGlua2VkCisgKiBpbiB0aGUgYWxsb2NhdGVkIGJsb2NrIGxpc3QsIGhlYWRlZCBieSBjdXJidWYtPmJfYmxvY2tfaGVhZC4gVGhleSBhcmUgYWxsCisgKiBmcmVlZCB3aGVuIGFiYW5kb25pbmcgYSBmaWxlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGZyZWUgZXZlcnkgc2luZ2xlIGxpbmUuCisgKiBUaGUgbGlzdCBpcyBrZXB0IHNvcnRlZCBvbiBtZW1vcnkgYWRkcmVzcy4KKyAqIGJsb2NrX2FsbG9jKCkgYWxsb2NhdGVzIGEgYmxvY2suCisgKiBtX2Jsb2NrZnJlZSgpIGZyZWVzIGFsbCBibG9ja3MuCisgKgorICogVGhlIGF2YWlsYWJsZSBjaHVua3Mgb2YgbWVtb3J5IGFyZSBrZXB0IGluIGZyZWUgY2h1bmsgbGlzdHMuIFRoZXJlIGlzCisgKiBvbmUgZnJlZSBsaXN0IGZvciBlYWNoIGJsb2NrIG9mIGFsbG9jYXRlZCBtZW1vcnkuIFRoZSBsaXN0IGlzIGtlcHQgc29ydGVkCisgKiBvbiBtZW1vcnkgYWRkcmVzcy4KKyAqIHVfYWxsb2NfbGluZSgpIGdldHMgYSBjaHVuayBmcm9tIHRoZSBmcmVlIGxpc3RzLgorICogdV9mcmVlX2xpbmUoKSByZXR1cm5zIGEgY2h1bmsgdG8gdGhlIGZyZWUgbGlzdHMuCisgKiBjdXJidWYtPmJfbV9zZWFyY2ggcG9pbnRzIHRvIHRoZSBjaHVuayBiZWZvcmUgdGhlIGNodW5rIHRoYXQgd2FzCisgKiBmcmVlZC9hbGxvY2F0ZWQgdGhlIGxhc3QgdGltZS4KKyAqIGN1cmJ1Zi0+Yl9tYl9jdXJyZW50IHBvaW50cyB0byB0aGUgYl9oZWFkIHdoZXJlIGN1cmJ1Zi0+Yl9tX3NlYXJjaAorICogcG9pbnRzIGludG8gdGhlIGZyZWUgbGlzdC4KKyAqCisgKgorICogIGJfYmxvY2tfaGVhZCAgICAgLy0tLT4gYmxvY2sgIzEJLy0tLT4gYmxvY2sgIzIKKyAqCSBtYl9uZXh0IC0tLS8JICAgIG1iX25leHQgLS0tLyAgICAgICBtYl9uZXh0IC0tLT4gTlVMTAorICoJIG1iX2luZm8JICAgIG1iX2luZm8JICAgICAgIG1iX2luZm8KKyAqCSAgICB8CQkgICAgICAgfAkJICB8CisgKgkgICAgVgkJICAgICAgIFYJCSAgVgorICoJICBOVUxMCQlmcmVlIGNodW5rICMxLjEgICAgICBmcmVlIGNodW5rICMyLjEKKyAqCQkJICAgICAgIHwJCSAgfAorICoJCQkgICAgICAgVgkJICBWCisgKgkJCWZyZWUgY2h1bmsgIzEuMgkJIE5VTEwKKyAqCQkJICAgICAgIHwKKyAqCQkJICAgICAgIFYKKyAqCQkJICAgICAgTlVMTAorICoKKyAqIFdoZW4gYSBzaW5nbGUgZnJlZSBjaHVuayBsaXN0IHdvdWxkIGhhdmUgYmVlbiB1c2VkLCBpdCBjb3VsZCB0YWtlIGEgbG90CisgKiBvZiB0aW1lIGluIHVfZnJlZV9saW5lKCkgdG8gZmluZCB0aGUgY29ycmVjdCBwbGFjZSB0byBpbnNlcnQgYSBjaHVuayBpbiB0aGUKKyAqIGZyZWUgbGlzdC4gVGhlIHNpbmdsZSBmcmVlIGxpc3Qgd291bGQgYmVjb21lIHZlcnkgbG9uZyB3aGVuIG1hbnkgbGluZXMgYXJlCisgKiBjaGFuZ2VkIChlLmcuIHdpdGggOiVzL15NJC8vKS4KKyAqLworCisgLyoKKyAgKiB0aGlzIGJsb2Nrc2l6ZSBpcyB1c2VkIHdoZW4gYWxsb2NhdGluZyBuZXcgbGluZXMKKyAgKi8KKyNkZWZpbmUgTUVNQkxPQ0tTSVpFIDIwNDQKKworLyoKKyAqIFRoZSBzaXplIGZpZWxkIGNvbnRhaW5zIHRoZSBzaXplIG9mIHRoZSBjaHVuaywgaW5jbHVkaW5nIHRoZSBzaXplIGZpZWxkCisgKiBpdHNlbGYuCisgKgorICogV2hlbiB0aGUgY2h1bmsgaXMgbm90IGluLXVzZSBpdCBpcyBwcmVjZWRlZCB3aXRoIHRoZSBtX2luZm8gc3RydWN0dXJlLgorICogVGhlIG1fbmV4dCBmaWVsZCBsaW5rcyBpdCBpbiBvbmUgb2YgdGhlIGZyZWUgY2h1bmsgbGlzdHMuCisgKgorICogT24gbW9zdCB1bml4IHN5c3RlbXMgc3RydWN0dXJlcyBoYXZlIHRvIGJlIGxvbmd3b3JkICgzMiBvciA2NCBiaXQpIGFsaWduZWQuCisgKiBPbiBtb3N0IG90aGVyIHN5c3RlbXMgdGhleSBhcmUgc2hvcnQgKDE2IGJpdCkgYWxpZ25lZC4KKyAqLworCisvKiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGFyZSBub3cgaW4gc3RydWN0cy5oICovCisKKyNpZmRlZiBBTElHTl9MT05HCisgICAgLyogc2l6ZSBvZiBtX3NpemUgKi8KKyMgZGVmaW5lIE1fT0ZGU0VUIChzaXplb2YobG9uZ191KSkKKyNlbHNlCisgICAgLyogc2l6ZSBvZiBtX3NpemUgKi8KKyMgZGVmaW5lIE1fT0ZGU0VUIChzaXplb2Yoc2hvcnRfdSkpCisjZW5kaWYKKworLyoKKyAqIEFsbG9jYXRlIGEgYmxvY2sgb2YgbWVtb3J5IGFuZCBsaW5rIGl0IGluIHRoZSBhbGxvY2F0ZWQgYmxvY2sgbGlzdC4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgordV9ibG9ja2FsbG9jKHNpemUpCisgICAgbG9uZ191CXNpemU7Cit7CisgICAgbWJsb2NrX1QJKnA7CisgICAgbWJsb2NrX1QJKm1wLCAqbmV4dDsKKworICAgIHAgPSAobWJsb2NrX1QgKilsYWxsb2Moc2l6ZSArIHNpemVvZihtYmxvY2tfVCksIEZBTFNFKTsKKyAgICBpZiAocCAhPSBOVUxMKQorICAgIHsKKwkgLyogSW5zZXJ0IHRoZSBibG9jayBpbnRvIHRoZSBhbGxvY2F0ZWQgYmxvY2sgbGlzdCwga2VlcGluZyBpdAorCQkgICAgc29ydGVkIG9uIGFkZHJlc3MuICovCisJZm9yIChtcCA9ICZjdXJidWYtPmJfYmxvY2tfaGVhZDsKKwkJKG5leHQgPSBtcC0+bWJfbmV4dCkgIT0gTlVMTCAmJiBuZXh0IDwgcDsKKwkJCW1wID0gbmV4dCkKKwkgICAgOworCXAtPm1iX25leHQgPSBuZXh0OwkJLyogbGluayBpbiBibG9jayBsaXN0ICovCisJcC0+bWJfc2l6ZSA9IHNpemU7CisJbXAtPm1iX25leHQgPSBwOworCXAtPm1iX2luZm8ubV9uZXh0ID0gTlVMTDsJLyogY2xlYXIgZnJlZSBsaXN0ICovCisJcC0+bWJfaW5mby5tX3NpemUgPSAwOworCWN1cmJ1Zi0+Yl9tYl9jdXJyZW50ID0gcDsJLyogcmVtZW1iZXIgY3VycmVudCBibG9jayAqLworCWN1cmJ1Zi0+Yl9tX3NlYXJjaCA9IE5VTEw7CisJcCsrOwkJCQkvKiByZXR1cm4gdXNhYmxlIG1lbW9yeSAqLworICAgIH0KKyAgICByZXR1cm4gKGNoYXJfdSAqKXA7Cit9CisKKy8qCisgKiBmcmVlIGFsbCBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcyBmb3IgdGhlIGJ1ZmZlciAnYnVmJworICovCisgICAgdm9pZAordV9ibG9ja2ZyZWUoYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisgICAgbWJsb2NrX1QJKnAsICpucDsKKworICAgIGZvciAocCA9IGJ1Zi0+Yl9ibG9ja19oZWFkLm1iX25leHQ7IHAgIT0gTlVMTDsgcCA9IG5wKQorICAgIHsKKwlucCA9IHAtPm1iX25leHQ7CisJdmltX2ZyZWUocCk7CisgICAgfQorICAgIGJ1Zi0+Yl9ibG9ja19oZWFkLm1iX25leHQgPSBOVUxMOworICAgIGJ1Zi0+Yl9tX3NlYXJjaCA9IE5VTEw7CisgICAgYnVmLT5iX21iX2N1cnJlbnQgPSBOVUxMOworfQorCisvKgorICogRnJlZSBhIGNodW5rIG9mIG1lbW9yeSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLgorICogSW5zZXJ0IHRoZSBjaHVuayBpbnRvIHRoZSBjb3JyZWN0IGZyZWUgbGlzdCwga2VlcGluZyBpdCBzb3J0ZWQgb24gYWRkcmVzcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCit1X2ZyZWVfbGluZShwdHIsIGtlZXApCisgICAgY2hhcl91CSpwdHI7CisgICAgaW50CQlrZWVwOwkvKiBkb24ndCBmcmVlIHRoZSBibG9jayB3aGVuIGl0J3MgZW1wdHkgKi8KK3sKKyAgICBtaW5mb19UCSpuZXh0OworICAgIG1pbmZvX1QJKnByZXYsICpjdXJyOworICAgIG1pbmZvX1QJKm1wOworICAgIG1ibG9ja19UCSpuZXh0YjsKKyAgICBtYmxvY2tfVAkqcHJldmI7CisKKyAgICBpZiAocHRyID09IE5VTEwgfHwgcHRyID09IElPYnVmZikKKwlyZXR1cm47CS8qIGlsbGVnYWwgYWRkcmVzcyBjYW4gaGFwcGVuIGluIG91dC1vZi1tZW1vcnkgc2l0dWF0aW9ucyAqLworCisgICAgbXAgPSAobWluZm9fVCAqKShwdHIgLSBNX09GRlNFVCk7CisKKyAgICAvKiBmaW5kIGJsb2NrIHdoZXJlIGNodW5rIGNvdWxkIGJlIGEgcGFydCBvZmYgKi8KKyAgICAvKiBpZiB3ZSBjaGFuZ2UgY3VyYnVmLT5iX21iX2N1cnJlbnQsIGN1cmJ1Zi0+Yl9tX3NlYXJjaCBpcyBzZXQgdG8gTlVMTCAqLworICAgIGlmIChjdXJidWYtPmJfbWJfY3VycmVudCA9PSBOVUxMIHx8IG1wIDwgKG1pbmZvX1QgKiljdXJidWYtPmJfbWJfY3VycmVudCkKKyAgICB7CisJY3VyYnVmLT5iX21iX2N1cnJlbnQgPSBjdXJidWYtPmJfYmxvY2tfaGVhZC5tYl9uZXh0OworCWN1cmJ1Zi0+Yl9tX3NlYXJjaCA9IE5VTEw7CisgICAgfQorICAgIGlmICgobmV4dGIgPSBjdXJidWYtPmJfbWJfY3VycmVudC0+bWJfbmV4dCkgIT0gTlVMTAorCQkJCQkJICAgICAmJiAobWluZm9fVCAqKW5leHRiIDwgbXApCisgICAgeworCWN1cmJ1Zi0+Yl9tYl9jdXJyZW50ID0gbmV4dGI7CisJY3VyYnVmLT5iX21fc2VhcmNoID0gTlVMTDsKKyAgICB9CisgICAgd2hpbGUgKChuZXh0YiA9IGN1cmJ1Zi0+Yl9tYl9jdXJyZW50LT5tYl9uZXh0KSAhPSBOVUxMCisJCQkJCQkgICAgICYmIChtaW5mb19UICopbmV4dGIgPCBtcCkKKwljdXJidWYtPmJfbWJfY3VycmVudCA9IG5leHRiOworCisgICAgY3VyciA9IE5VTEw7CisgICAgLyoKKyAgICAgKiBJZiBtcCBpcyBzbWFsbGVyIHRoYW4gY3VyYnVmLT5iX21fc2VhcmNoLT5tX25leHQgZ28gdG8gdGhlIHN0YXJ0IG9mCisgICAgICogdGhlIGZyZWUgbGlzdAorICAgICAqLworICAgIGlmIChjdXJidWYtPmJfbV9zZWFyY2ggPT0gTlVMTCB8fCBtcCA8IChjdXJidWYtPmJfbV9zZWFyY2gtPm1fbmV4dCkpCisJbmV4dCA9ICYoY3VyYnVmLT5iX21iX2N1cnJlbnQtPm1iX2luZm8pOworICAgIGVsc2UKKwluZXh0ID0gY3VyYnVmLT5iX21fc2VhcmNoOworICAgIC8qCisgICAgICogVGhlIGZvbGxvd2luZyBsb29wIGlzIGV4ZWN1dGVkIHZlcnkgb2Z0ZW4uCisgICAgICogVGhlcmVmb3JlIGl0IGhhcyBiZWVuIG9wdGltaXplZCBhdCB0aGUgY29zdCBvZiByZWFkYWJpbGl0eS4KKyAgICAgKiBLZWVwIGl0IGZhc3QhCisgICAgICovCisjaWZkZWYgU0xPV19CVVRfRUFTWV9UT19SRUFECisgICAgZG8KKyAgICB7CisJcHJldiA9IGN1cnI7CisJY3VyciA9IG5leHQ7CisJbmV4dCA9IG5leHQtPm1fbmV4dDsKKyAgICB9CisgICAgd2hpbGUgKG1wID4gbmV4dCAmJiBuZXh0ICE9IE5VTEwpOworI2Vsc2UKKyAgICBkbwkJCQkJICAgIC8qIGZpcnN0LCBtaWRkbGUsIGxhc3QgKi8KKyAgICB7CisJcHJldiA9IG5leHQtPm1fbmV4dDsJCSAgICAvKiBjdXJyLCBuZXh0LCBwcmV2ICovCisJaWYgKHByZXYgPT0gTlVMTCB8fCBtcCA8PSBwcmV2KQorCXsKKwkgICAgcHJldiA9IGN1cnI7CisJICAgIGN1cnIgPSBuZXh0OworCSAgICBuZXh0ID0gbmV4dC0+bV9uZXh0OworCSAgICBicmVhazsKKwl9CisJY3VyciA9IHByZXYtPm1fbmV4dDsJCSAgICAvKiBuZXh0LCBwcmV2LCBjdXJyICovCisJaWYgKGN1cnIgPT0gTlVMTCB8fCBtcCA8PSBjdXJyKQorCXsKKwkgICAgcHJldiA9IG5leHQ7CisJICAgIGN1cnIgPSBwcmV2LT5tX25leHQ7CisJICAgIG5leHQgPSBjdXJyLT5tX25leHQ7CisJICAgIGJyZWFrOworCX0KKwluZXh0ID0gY3Vyci0+bV9uZXh0OwkJICAgIC8qIHByZXYsIGN1cnIsIG5leHQgKi8KKyAgICB9CisgICAgd2hpbGUgKG1wID4gbmV4dCAmJiBuZXh0ICE9IE5VTEwpOworI2VuZGlmCisKKyAgICAvKiBpZiAqbXAgYW5kICpuZXh0IGFyZSBjb25jYXRlbmF0ZWQsIGpvaW4gdGhlbSBpbnRvIG9uZSBjaHVuayAqLworICAgIGlmICgoY2hhcl91ICopbXAgKyBtcC0+bV9zaXplID09IChjaGFyX3UgKiluZXh0KQorICAgIHsKKwltcC0+bV9zaXplICs9IG5leHQtPm1fc2l6ZTsKKwltcC0+bV9uZXh0ID0gbmV4dC0+bV9uZXh0OworICAgIH0KKyAgICBlbHNlCisJbXAtPm1fbmV4dCA9IG5leHQ7CisKKyAgICAvKiBpZiAqY3VyciBhbmQgKm1wIGFyZSBjb25jYXRlbmF0ZWQsIGpvaW4gdGhlbSAqLworICAgIGlmIChwcmV2ICE9IE5VTEwgJiYgKGNoYXJfdSAqKWN1cnIgKyBjdXJyLT5tX3NpemUgPT0gKGNoYXJfdSAqKW1wKQorICAgIHsKKwljdXJyLT5tX3NpemUgKz0gbXAtPm1fc2l6ZTsKKwljdXJyLT5tX25leHQgPSBtcC0+bV9uZXh0OworCWN1cmJ1Zi0+Yl9tX3NlYXJjaCA9IHByZXY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY3Vyci0+bV9uZXh0ID0gbXA7CisJY3VyYnVmLT5iX21fc2VhcmNoID0gY3VycjsgIC8qIHB1dCBjdXJidWYtPmJfbV9zZWFyY2ggYmVmb3JlIGZyZWVkCisJCQkJICAgICAgIGNodW5rICovCisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB0aGUgYmxvY2sgb25seSBjb250YWluZXMgZnJlZSBtZW1vcnkgbm93LCByZWxlYXNlIGl0LgorICAgICAqLworICAgIGlmICgha2VlcCAmJiBjdXJidWYtPmJfbWJfY3VycmVudC0+bWJfc2l6ZQorCQkJICAgICAgPT0gY3VyYnVmLT5iX21iX2N1cnJlbnQtPm1iX2luZm8ubV9uZXh0LT5tX3NpemUpCisgICAgeworCS8qIEZpbmQgdGhlIGJsb2NrIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgdG8gYmUgYWJsZSB0byB1bmxpbmsgaXQgZnJvbQorCSAqIHRoZSBsaXN0IG9mIGJsb2Nrcy4gKi8KKwlwcmV2YiA9ICZjdXJidWYtPmJfYmxvY2tfaGVhZDsKKwlmb3IgKG5leHRiID0gcHJldmItPm1iX25leHQ7IG5leHRiICE9IGN1cmJ1Zi0+Yl9tYl9jdXJyZW50OworCQkJCQkJICAgICAgIG5leHRiID0gbmV4dGItPm1iX25leHQpCisJICAgIHByZXZiID0gbmV4dGI7CisJcHJldmItPm1iX25leHQgPSBuZXh0Yi0+bWJfbmV4dDsKKwl2aW1fZnJlZShuZXh0Yik7CisJY3VyYnVmLT5iX21iX2N1cnJlbnQgPSBOVUxMOworCWN1cmJ1Zi0+Yl9tX3NlYXJjaCA9IE5VTEw7CisgICAgfQorfQorCisvKgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgbGluZSBzdHJ1Y3R1cmUgd2l0aCByb29tIGZvciBhdCBsZWFzdAorICogJ3NpemUnIGNoYXJhY3RlcnMgcGx1cyBhIHRlcm1pbmF0aW5nIE5VTC4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgordV9hbGxvY19saW5lKHNpemUpCisgICAgdW5zaWduZWQJc2l6ZTsKK3sKKyAgICBtaW5mb19UCSptcCwgKm1wcmV2LCAqbXAyOworICAgIG1ibG9ja19UCSptYnA7CisgICAgaW50CQlzaXplX2FsaWduOworCisgICAgLyoKKyAgICAgKiBBZGQgcm9vbSBmb3Igc2l6ZSBmaWVsZCBhbmQgdHJhaWxpbmcgTlVMIGJ5dGUuCisgICAgICogQWRqdXN0IGZvciBtaW5pbWFsIHNpemUgKG11c3QgYmUgYWJsZSB0byBzdG9yZSBtaW5mb19UCisgICAgICogcGx1cyBhIHRyYWlsaW5nIE5VTCwgc28gdGhlIGNodW5rIGNhbiBiZSByZWxlYXNlZCBhZ2FpbikKKyAgICAgKi8KKyAgICBzaXplICs9IE1fT0ZGU0VUICsgMTsKKyAgICBpZiAoc2l6ZSA8IHNpemVvZihtaW5mb19UKSArIDEpCisJc2l6ZSA9IHNpemVvZihtaW5mb19UKSArIDE7CisKKyAgICAvKgorICAgICAqIHJvdW5kIHNpemUgdXAgZm9yIGFsaWdubWVudAorICAgICAqLworICAgIHNpemVfYWxpZ24gPSAoc2l6ZSArIEFMSUdOX01BU0spICYgfkFMSUdOX01BU0s7CisKKyAgICAvKgorICAgICAqIElmIGN1cmJ1Zi0+Yl9tX3NlYXJjaCBpcyBOVUxMICh1bmluaXRpYWxpemVkIGZyZWUgbGlzdCkgc3RhcnQgYXQKKyAgICAgKiBjdXJidWYtPmJfYmxvY2tfaGVhZAorICAgICAqLworICAgIGlmIChjdXJidWYtPmJfbWJfY3VycmVudCA9PSBOVUxMIHx8IGN1cmJ1Zi0+Yl9tX3NlYXJjaCA9PSBOVUxMKQorICAgIHsKKwljdXJidWYtPmJfbWJfY3VycmVudCA9ICZjdXJidWYtPmJfYmxvY2tfaGVhZDsKKwljdXJidWYtPmJfbV9zZWFyY2ggPSAmKGN1cmJ1Zi0+Yl9ibG9ja19oZWFkLm1iX2luZm8pOworICAgIH0KKworICAgIC8qIHNlYXJjaCBmb3Igc3BhY2UgaW4gZnJlZSBsaXN0ICovCisgICAgbXByZXYgPSBjdXJidWYtPmJfbV9zZWFyY2g7CisgICAgbWJwID0gY3VyYnVmLT5iX21iX2N1cnJlbnQ7CisgICAgbXAgPSBjdXJidWYtPmJfbV9zZWFyY2gtPm1fbmV4dDsKKyAgICBpZiAobXAgPT0gTlVMTCkKKyAgICB7CisJaWYgKG1icC0+bWJfbmV4dCkKKwkgICAgbWJwID0gbWJwLT5tYl9uZXh0OworCWVsc2UKKwkgICAgbWJwID0gJmN1cmJ1Zi0+Yl9ibG9ja19oZWFkOworCW1wID0gY3VyYnVmLT5iX21fc2VhcmNoID0gJihtYnAtPm1iX2luZm8pOworICAgIH0KKyAgICB3aGlsZSAobXAtPm1fc2l6ZSA8IHNpemUpCisgICAgeworCWlmIChtcCA9PSBjdXJidWYtPmJfbV9zZWFyY2gpCSAgICAvKiBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQgaW4gZnJlZQorCQkJCQkgICAgICAgY2h1bmsgbGlzdCAqLworCXsKKwkgICAgaWYgKG1icC0+bWJfbmV4dCkKKwkJbWJwID0gbWJwLT5tYl9uZXh0OworCSAgICBlbHNlCisJCW1icCA9ICZjdXJidWYtPmJfYmxvY2tfaGVhZDsKKwkgICAgbXAgPSBjdXJidWYtPmJfbV9zZWFyY2ggPSAmKG1icC0+bWJfaW5mbyk7CisJICAgIGlmIChtYnAgPT0gY3VyYnVmLT5iX21iX2N1cnJlbnQpCS8qIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCBpbgorCQkJCQkJICAgYmxvY2sgbGlzdCAqLworCSAgICB7CisJCWludAluID0gKHNpemVfYWxpZ24gPiAoTUVNQkxPQ0tTSVpFIC8gNCkKKwkJCQkJCSA/IHNpemVfYWxpZ24gOiBNRU1CTE9DS1NJWkUpOworCisJCW1wID0gKG1pbmZvX1QgKil1X2Jsb2NrYWxsb2MoKGxvbmdfdSluKTsKKwkJaWYgKG1wID09IE5VTEwpCisJCSAgICByZXR1cm4gKE5VTEwpOworCQltcC0+bV9zaXplID0gbjsKKwkJdV9mcmVlX2xpbmUoKGNoYXJfdSAqKW1wICsgTV9PRkZTRVQsIFRSVUUpOworCQltcCA9IGN1cmJ1Zi0+Yl9tX3NlYXJjaDsKKwkJbWJwID0gY3VyYnVmLT5iX21iX2N1cnJlbnQ7CisJICAgIH0KKwl9CisJbXByZXYgPSBtcDsKKwlpZiAoKG1wID0gbXAtPm1fbmV4dCkgPT0gTlVMTCkJICAgIC8qIGF0IGVuZCBvZiB0aGUgbGlzdCAqLworCSAgICBtcCA9ICYobWJwLT5tYl9pbmZvKTsJICAgIC8qIHdyYXAgYXJvdW5kIHRvIGJlZ2luICovCisgICAgfQorCisgICAgLyogaWYgdGhlIGNodW5rIHdlIGZvdW5kIGlzIGxhcmdlIGVub3VnaCwgc3BsaXQgaXQgdXAgaW4gdHdvICovCisgICAgaWYgKChsb25nKW1wLT5tX3NpemUgLSBzaXplX2FsaWduID49IChsb25nKShzaXplb2YobWluZm9fVCkgKyAxKSkKKyAgICB7CisJbXAyID0gKG1pbmZvX1QgKikoKGNoYXJfdSAqKW1wICsgc2l6ZV9hbGlnbik7CisJbXAyLT5tX3NpemUgPSBtcC0+bV9zaXplIC0gc2l6ZV9hbGlnbjsKKwltcDItPm1fbmV4dCA9IG1wLT5tX25leHQ7CisJbXByZXYtPm1fbmV4dCA9IG1wMjsKKwltcC0+bV9zaXplID0gc2l6ZV9hbGlnbjsKKyAgICB9CisgICAgZWxzZQkJICAgIC8qIHJlbW92ZSAqbXAgZnJvbSB0aGUgZnJlZSBsaXN0ICovCisgICAgeworCW1wcmV2LT5tX25leHQgPSBtcC0+bV9uZXh0OworICAgIH0KKyAgICBjdXJidWYtPmJfbV9zZWFyY2ggPSBtcHJldjsKKyAgICBjdXJidWYtPmJfbWJfY3VycmVudCA9IG1icDsKKworICAgIG1wID0gKG1pbmZvX1QgKikoKGNoYXJfdSAqKW1wICsgTV9PRkZTRVQpOworICAgICooY2hhcl91ICopbXAgPSBOVUw7CQkgICAgLyogc2V0IHRoZSBmaXJzdCBieXRlIHRvIE5VTCAqLworCisgICAgcmV0dXJuICgoY2hhcl91ICopbXApOworfQorCisvKgorICogdV9zYXZlX2xpbmUoKTogYWxsb2NhdGUgbWVtb3J5IHdpdGggdV9hbGxvY19saW5lKCkgYW5kIGNvcHkgbGluZSAnbG51bScKKyAqIGludG8gaXQuCisgKi8KKyAgICBzdGF0aWMgY2hhcl91ICoKK3Vfc2F2ZV9saW5lKGxudW0pCisgICAgbGluZW5yX1QJbG51bTsKK3sKKyAgICBjaGFyX3UJKnNyYzsKKyAgICBjaGFyX3UJKmRzdDsKKyAgICB1bnNpZ25lZAlsZW47CisKKyAgICBzcmMgPSBtbF9nZXQobG51bSk7CisgICAgbGVuID0gKHVuc2lnbmVkKVNUUkxFTihzcmMpOworICAgIGlmICgoZHN0ID0gdV9hbGxvY19saW5lKGxlbikpICE9IE5VTEwpCisJbWNoX21lbW1vdmUoZHN0LCBzcmMsIChzaXplX3QpKGxlbiArIDEpKTsKKyAgICByZXR1cm4gKGRzdCk7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgJ21vZGlmaWVkJyBmbGFnIGlzIHNldCwgb3IgJ2ZmJyBoYXMgY2hhbmdlZCAob25seSBuZWVkIHRvCisgKiBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyLCBiZWNhdXNlIGl0IGNhbiBvbmx5IGJlICJkb3MiLCAidW5peCIgb3IgIm1hYyIpLgorICogIm5vZmlsZSIgYW5kICJzY3JhdGNoIiB0eXBlIGJ1ZmZlcnMgYXJlIGNvbnNpZGVyZWQgdG8gYWx3YXlzIGJlIHVuY2hhbmdlZC4KKyAqLworICAgIGludAorYnVmSXNDaGFuZ2VkKGJ1ZikKKyAgICBidWZfVAkqYnVmOworeworICAgIHJldHVybgorI2lmZGVmIEZFQVRfUVVJQ0tGSVgKKwkgICAgIWJ0X2RvbnR3cml0ZShidWYpICYmCisjZW5kaWYKKwkgICAgKGJ1Zi0+Yl9jaGFuZ2VkIHx8IGZpbGVfZmZfZGlmZmVycyhidWYpKTsKK30KKworICAgIGludAorY3VyYnVmSXNDaGFuZ2VkKCkKK3sKKyAgICByZXR1cm4KKyNpZmRlZiBGRUFUX1FVSUNLRklYCisJIWJ0X2RvbnR3cml0ZShjdXJidWYpICYmCisjZW5kaWYKKwkoY3VyYnVmLT5iX2NoYW5nZWQgfHwgZmlsZV9mZl9kaWZmZXJzKGN1cmJ1ZikpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3VuaW5zdGFsLmMgYi9zcmMvdW5pbnN0YWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2MyNDZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3VuaW5zdGFsLmMKQEAgLTAsMCArMSw0MzggQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogU2VlIFJFQURNRS50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBWaW0gc291cmNlIGNvZGUuCisgKi8KKworLyoKKyAqIHVuaW5zdGFsLmM6CU1pbmltYWxpc3RpYyB1bmluc3RhbGwgcHJvZ3JhbSBmb3IgVmltIG9uIE1TLVdpbmRvd3MKKyAqCQlSZW1vdmVzOgorICoJCS0gdGhlICJFZGl0IHdpdGggVmltIiBwb3B1cCBtZW51IGVudHJ5CisgKgkJLSB0aGUgVmltICJPcGVuIFdpdGguLi4iIHBvcHVwIG1lbnUgZW50cnkKKyAqCQktIGFueSBWaW0gQmF0Y2ggZmlsZXMgaW4gdGhlIHBhdGgKKyAqCQktIGljb25zIGZvciBWaW0gb24gdGhlIERlc2t0b3AKKyAqCQktIHRoZSBWaW0gZW50cnkgaW4gdGhlIFN0YXJ0IE1lbnUKKyAqLworCisvKiBJbmNsdWRlIGNvbW1vbiBjb2RlIGZvciBkb3NpbnN0LmMgYW5kIHVuaW5zdGFsLmMuICovCisjaW5jbHVkZSAiZG9zaW5zdC5oIgorCisvKgorICogUmV0dXJuIFRSVUUgaWYgdGhlIHVzZXIgdHlwZXMgYSAneScgb3IgJ1knLCBGQUxTRSBvdGhlcndpc2UuCisgKi8KKyAgICBzdGF0aWMgaW50Citjb25maXJtKHZvaWQpCit7CisgICAgY2hhcglhbnN3ZXJbMTBdOworCisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgcmV0dXJuIChzY2FuZigiICVjIiwgYW5zd2VyKSA9PSAxICYmIHRvdXBwZXIoYW5zd2VyWzBdKSA9PSAnWScpOworfQorCisjaWZkZWYgV0lOMzI2NAorLyoKKyAqIENoZWNrIGlmIHRoZSBwb3B1cCBtZW51IGVudHJ5IGV4aXN0cyBhbmQgd2hhdCBndmltIGl0IHJlZmVycyB0by4KKyAqIFJldHVybnMgbm9uLXplcm8gd2hlbiBpdCdzIGZvdW5kLgorICovCisgICAgc3RhdGljIGludAorcG9wdXBfZ3ZpbV9wYXRoKGNoYXIgKmJ1ZikKK3sKKyAgICBIS0VZCWtleV9oYW5kbGU7CisgICAgRFdPUkQJdmFsdWVfdHlwZTsKKyAgICBEV09SRAlidWZzaXplID0gQlVGU0laRTsKKyAgICBpbnQJCXI7CisKKyAgICAvKiBPcGVuIHRoZSBrZXkgd2hlcmUgdGhlIHBhdGggdG8gZ3ZpbS5leGUgaXMgc3RvcmVkLiAqLworICAgIGlmIChSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCAiU29mdHdhcmVcXFZpbVxcR3ZpbSIsIDAsIEtFWV9SRUFELAorCQkJCQkJJmtleV9oYW5kbGUpICE9IEVSUk9SX1NVQ0NFU1MpCisJcmV0dXJuIDA7CisKKyAgICAvKiBnZXQgdGhlIERpc3BsYXlOYW1lIG91dCBvZiBpdCB0byBzaG93IHRoZSB1c2VyICovCisgICAgciA9IFJlZ1F1ZXJ5VmFsdWVFeChrZXlfaGFuZGxlLCAicGF0aCIsIDAsCisJCQkJCSAgJnZhbHVlX3R5cGUsIChMUEJZVEUpYnVmLCAmYnVmc2l6ZSk7CisgICAgUmVnQ2xvc2VLZXkoa2V5X2hhbmRsZSk7CisKKyAgICByZXR1cm4gKHIgPT0gRVJST1JfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgIk9wZW4gV2l0aC4uLiIgbWVudSBlbnRyeSBleGlzdHMgYW5kIHdoYXQgZ3ZpbSBpdCByZWZlcnMgdG8uCisgKiBSZXR1cm5zIG5vbi16ZXJvIHdoZW4gaXQncyBmb3VuZC4KKyAqLworICAgIHN0YXRpYyBpbnQKK29wZW53aXRoX2d2aW1fcGF0aChjaGFyICpidWYpCit7CisgICAgSEtFWQlrZXlfaGFuZGxlOworICAgIERXT1JECXZhbHVlX3R5cGU7CisgICAgRFdPUkQJYnVmc2l6ZSA9IEJVRlNJWkU7CisgICAgaW50CQlyOworCisgICAgLyogT3BlbiB0aGUga2V5IHdoZXJlIHRoZSBwYXRoIHRvIGd2aW0uZXhlIGlzIHN0b3JlZC4gKi8KKyAgICBpZiAoUmVnT3BlbktleUV4KEhLRVlfQ0xBU1NFU19ST09ULAorCQkiQXBwbGljYXRpb25zXFxndmltLmV4ZVxcc2hlbGxcXGVkaXRcXGNvbW1hbmQiLCAwLCBLRVlfUkVBRCwKKwkJCQkJCSZrZXlfaGFuZGxlKSAhPSBFUlJPUl9TVUNDRVNTKQorCXJldHVybiAwOworCisgICAgLyogZ2V0IHRoZSBEaXNwbGF5TmFtZSBvdXQgb2YgaXQgdG8gc2hvdyB0aGUgdXNlciAqLworICAgIHIgPSBSZWdRdWVyeVZhbHVlRXgoa2V5X2hhbmRsZSwgIiIsIDAsICZ2YWx1ZV90eXBlLCAoTFBCWVRFKWJ1ZiwgJmJ1ZnNpemUpOworICAgIFJlZ0Nsb3NlS2V5KGtleV9oYW5kbGUpOworCisgICAgcmV0dXJuIChyID09IEVSUk9SX1NVQ0NFU1MpOworfQorCisgICAgc3RhdGljIHZvaWQKK3JlbW92ZV9wb3B1cCh2b2lkKQoreworICAgIGludAkJZmFpbCA9IDA7CisgICAgSEtFWQlraDsKKworICAgIGlmIChSZWdEZWxldGVLZXkoSEtFWV9DTEFTU0VTX1JPT1QsICJDTFNJRFxcezUxRUVFMjQyLUFEODctMTFkMy05QzFFLTAwOTAyNzhCQkQ5OX1cXEluUHJvY1NlcnZlcjMyIikgIT0gRVJST1JfU1VDQ0VTUykKKwkrK2ZhaWw7CisgICAgaWYgKFJlZ0RlbGV0ZUtleShIS0VZX0NMQVNTRVNfUk9PVCwgIkNMU0lEXFx7NTFFRUUyNDItQUQ4Ny0xMWQzLTlDMUUtMDA5MDI3OEJCRDk5fSIpICE9IEVSUk9SX1NVQ0NFU1MpCisJKytmYWlsOworICAgIGlmIChSZWdEZWxldGVLZXkoSEtFWV9DTEFTU0VTX1JPT1QsICIqXFxzaGVsbGV4XFxDb250ZXh0TWVudUhhbmRsZXJzXFxndmltIikgIT0gRVJST1JfU1VDQ0VTUykKKwkrK2ZhaWw7CisgICAgaWYgKFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcTWljcm9zb2Z0XFxXaW5kb3dzXFxDdXJyZW50VmVyc2lvblxcU2hlbGwgRXh0ZW5zaW9uc1xcQXBwcm92ZWQiLCAwLCBLRVlfQUxMX0FDQ0VTUywgJmtoKSAhPSBFUlJPUl9TVUNDRVNTKQorCSsrZmFpbDsKKyAgICBlbHNlCisgICAgeworCWlmIChSZWdEZWxldGVWYWx1ZShraCwgIns1MUVFRTI0Mi1BRDg3LTExZDMtOUMxRS0wMDkwMjc4QkJEOTl9IikgIT0gRVJST1JfU1VDQ0VTUykKKwkgICAgKytmYWlsOworCVJlZ0Nsb3NlS2V5KGtoKTsKKyAgICB9CisgICAgaWYgKFJlZ0RlbGV0ZUtleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcVmltXFxHdmltIikgIT0gRVJST1JfU1VDQ0VTUykKKwkrK2ZhaWw7CisgICAgaWYgKFJlZ0RlbGV0ZUtleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcVmltIikgIT0gRVJST1JfU1VDQ0VTUykKKwkrK2ZhaWw7CisKKyAgICBpZiAoZmFpbCA9PSA2KQorCXByaW50ZigiTm8gVmltIHBvcHVwIHJlZ2lzdHJ5IGVudHJpZXMgY291bGQgYmUgcmVtb3ZlZFxuIik7CisgICAgZWxzZSBpZiAoZmFpbCA+IDApCisJcHJpbnRmKCJTb21lIFZpbSBwb3B1cCByZWdpc3RyeSBlbnRyaWVzIGNvdWxkIG5vdCBiZSByZW1vdmVkXG4iKTsKKyAgICBlbHNlCisJcHJpbnRmKCJUaGUgVmltIHBvcHVwIHJlZ2lzdHJ5IGVudHJpZXMgaGF2ZSBiZWVuIHJlbW92ZWRcbiIpOworfQorCisgICAgc3RhdGljIHZvaWQKK3JlbW92ZV9vcGVud2l0aCh2b2lkKQoreworICAgIGludAkJZmFpbCA9IDA7CisKKyAgICBpZiAoUmVnRGVsZXRlS2V5KEhLRVlfQ0xBU1NFU19ST09ULCAiQXBwbGljYXRpb25zXFxndmltLmV4ZVxcc2hlbGxcXGVkaXRcXGNvbW1hbmQiKSAhPSBFUlJPUl9TVUNDRVNTKQorCSsrZmFpbDsKKyAgICBpZiAoUmVnRGVsZXRlS2V5KEhLRVlfQ0xBU1NFU19ST09ULCAiQXBwbGljYXRpb25zXFxndmltLmV4ZVxcc2hlbGxcXGVkaXQiKSAhPSBFUlJPUl9TVUNDRVNTKQorCSsrZmFpbDsKKyAgICBpZiAoUmVnRGVsZXRlS2V5KEhLRVlfQ0xBU1NFU19ST09ULCAiQXBwbGljYXRpb25zXFxndmltLmV4ZVxcc2hlbGwiKSAhPSBFUlJPUl9TVUNDRVNTKQorCSsrZmFpbDsKKyAgICBpZiAoUmVnRGVsZXRlS2V5KEhLRVlfQ0xBU1NFU19ST09ULCAiQXBwbGljYXRpb25zXFxndmltLmV4ZSIpICE9IEVSUk9SX1NVQ0NFU1MpCisJKytmYWlsOworICAgIGlmIChSZWdEZWxldGVLZXkoSEtFWV9DTEFTU0VTX1JPT1QsICIuaHRtXFxPcGVuV2l0aExpc3RcXGd2aW0uZXhlIikgIT0gRVJST1JfU1VDQ0VTUykKKwkrK2ZhaWw7CisgICAgaWYgKFJlZ0RlbGV0ZUtleShIS0VZX0NMQVNTRVNfUk9PVCwgIi52aW1cXE9wZW5XaXRoTGlzdFxcZ3ZpbS5leGUiKSAhPSBFUlJPUl9TVUNDRVNTKQorCSsrZmFpbDsKKyAgICBpZiAoUmVnRGVsZXRlS2V5KEhLRVlfQ0xBU1NFU19ST09ULCAiKlxcT3BlbldpdGhMaXN0XFxndmltLmV4ZSIpICE9IEVSUk9SX1NVQ0NFU1MpCisJKytmYWlsOworCisgICAgaWYgKGZhaWwgPT0gNykKKwlwcmludGYoIk5vIFZpbSBvcGVuLXdpdGggcmVnaXN0cnkgZW50cmllcyBjb3VsZCBiZSByZW1vdmVkXG4iKTsKKyAgICBlbHNlIGlmIChmYWlsID4gMCkKKwlwcmludGYoIlNvbWUgVmltIG9wZW4td2l0aCByZWdpc3RyeSBlbnRyaWVzIGNvdWxkIG5vdCBiZSByZW1vdmVkXG4iKTsKKyAgICBlbHNlCisJcHJpbnRmKCJUaGUgVmltIG9wZW4td2l0aCByZWdpc3RyeSBlbnRyaWVzIGhhdmUgYmVlbiByZW1vdmVkXG4iKTsKK30KKyNlbmRpZgorCisvKgorICogQ2hlY2sgaWYgYSBiYXRjaCBmaWxlIGlzIHJlYWxseSBmb3IgdGhlIGN1cnJlbnQgdmVyc2lvbi4gIERvbid0IGRlbGV0ZSBhCisgKiBiYXRjaCBmaWxlIHRoYXQgd2FzIHdyaXR0ZW4gZm9yIGFub3RoZXIgKHBvc3NpYmx5IG5ld2VyKSB2ZXJzaW9uLgorICovCisgICAgc3RhdGljIGludAorYmF0ZmlsZV90aGlzdmVyc2lvbihjaGFyICpwYXRoKQoreworICAgIEZJTEUJKmZkOworICAgIGNoYXIJbGluZVtCVUZTSVpFXTsKKyAgICBjaGFyCSpwOworICAgIGludAkJdmVyX2xlbiA9IHN0cmxlbihWSU1fVkVSU0lPTl9OT0RPVCk7CisgICAgaW50CQlmb3VuZCA9IEZBTFNFOworCisgICAgZmQgPSBmb3BlbihwYXRoLCAiciIpOworICAgIGlmIChmZCAhPSBOVUxMKQorICAgIHsKKwl3aGlsZSAoZmdldHMobGluZSwgQlVGU0laRSwgZmQpICE9IE5VTEwpCisJeworCSAgICBmb3IgKHAgPSBsaW5lOyAqcCAhPSAwOyArK3ApCisJCS8qIGRvbid0IGFjY2VwdCAidmltNjBhbiIgd2hlbiBsb29raW5nIGZvciAidmltNjAiLiAqLworCQlpZiAoc3RybmljbXAocCwgVklNX1ZFUlNJT05fTk9ET1QsIHZlcl9sZW4pID09IDAKKwkJCSYmICFpc2RpZ2l0KHBbdmVyX2xlbl0pCisJCQkmJiAhaXNhbHBoYShwW3Zlcl9sZW5dKSkKKwkJeworCQkgICAgZm91bmQgPSBUUlVFOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgaWYgKGZvdW5kKQorCQlicmVhazsKKwl9CisJZmNsb3NlKGZkKTsKKyAgICB9CisgICAgcmV0dXJuIGZvdW5kOworfQorCisgICAgc3RhdGljIGludAorcmVtb3ZlX2JhdGZpbGVzKGludCBkb2l0KQoreworICAgIGNoYXIgKmJhdGZpbGVfcGF0aDsKKyAgICBpbnQJIGk7CisgICAgaW50CSBmb3VuZCA9IDA7CisKKyAgICBmb3IgKGkgPSAxOyBpIDwgVEFSR0VUX0NPVU5UOyArK2kpCisgICAgeworCWJhdGZpbGVfcGF0aCA9IHNlYXJjaHBhdGhfc2F2ZSh0YXJnZXRzW2ldLmJhdG5hbWUpOworCWlmIChiYXRmaWxlX3BhdGggIT0gTlVMTCAmJiBiYXRmaWxlX3RoaXN2ZXJzaW9uKGJhdGZpbGVfcGF0aCkpCisJeworCSAgICArK2ZvdW5kOworCSAgICBpZiAoZG9pdCkKKwkgICAgeworCQlwcmludGYoInJlbW92aW5nICVzXG4iLCBiYXRmaWxlX3BhdGgpOworCQlyZW1vdmUoYmF0ZmlsZV9wYXRoKTsKKwkgICAgfQorCSAgICBlbHNlCisJCXByaW50ZigiIC0gdGhlIGJhdGNoIGZpbGUgJXNcbiIsIGJhdGZpbGVfcGF0aCk7CisJICAgIGZyZWUoYmF0ZmlsZV9wYXRoKTsKKwl9CisgICAgfQorICAgIHJldHVybiBmb3VuZDsKK30KKworI2lmZGVmIFdJTjMyNjQKKyAgICBzdGF0aWMgdm9pZAorcmVtb3ZlX2lmX2V4aXN0cyhjaGFyICpwYXRoLCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBjaGFyIGJ1ZltCVUZTSVpFXTsKKyAgICBGSUxFICpmZDsKKworICAgIHNwcmludGYoYnVmLCAiJXNcXCVzIiwgcGF0aCwgZmlsZW5hbWUpOworCisgICAgZmQgPSBmb3BlbihidWYsICJyIik7CisgICAgaWYgKGZkICE9IE5VTEwpCisgICAgeworCWZjbG9zZShmZCk7CisJcHJpbnRmKCJyZW1vdmluZyAlc1xuIiwgYnVmKTsKKwlyZW1vdmUoYnVmKTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcmVtb3ZlX2ljb25zKHZvaWQpCit7CisgICAgY2hhcglwYXRoW0JVRlNJWkVdOworICAgIGludAkJaTsKKworICAgIGlmIChnZXRfc2hlbGxfZm9sZGVyX3BhdGgocGF0aCwgImRlc2t0b3AiKSkKKwlmb3IgKGkgPSAwOyBpIDwgSUNPTl9DT1VOVDsgKytpKQorCSAgICByZW1vdmVfaWZfZXhpc3RzKHBhdGgsIGljb25fbGlua19uYW1lc1tpXSk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorcmVtb3ZlX3N0YXJ0X21lbnUodm9pZCkKK3sKKyAgICBjaGFyCXBhdGhbQlVGU0laRV07CisgICAgaW50CQlpOworICAgIHN0cnVjdCBzdGF0IHN0OworCisgICAgaWYgKGdldF9zaGVsbF9mb2xkZXJfcGF0aChwYXRoLCBWSU1fU1RBUlRNRU5VKSkKKyAgICB7CisJZm9yIChpID0gMTsgaSA8IFRBUkdFVF9DT1VOVDsgKytpKQorCSAgICByZW1vdmVfaWZfZXhpc3RzKHBhdGgsIHRhcmdldHNbaV0ubG5rbmFtZSk7CisJcmVtb3ZlX2lmX2V4aXN0cyhwYXRoLCAidW5pbnN0YWxsLmxuayIpOworCXJlbW92ZV9pZl9leGlzdHMocGF0aCwgIkhlbHAubG5rIik7CisJLyogV2luOTUgdXNlcyAucGlmLCBXaW5OVCB1c2VzIC5sbmsgKi8KKwlyZW1vdmVfaWZfZXhpc3RzKHBhdGgsICJWaW0gdHV0b3IucGlmIik7CisJcmVtb3ZlX2lmX2V4aXN0cyhwYXRoLCAiVmltIHR1dG9yLmxuayIpOworCXJlbW92ZV9pZl9leGlzdHMocGF0aCwgIlZpbSBvbmxpbmUudXJsIik7CisJaWYgKHN0YXQocGF0aCwgJnN0KSA9PSAwKQorCXsKKwkgICAgcHJpbnRmKCJyZW1vdmluZyAlc1xuIiwgcGF0aCk7CisJICAgIHJtZGlyKHBhdGgpOworCX0KKyAgICB9Cit9CisjZW5kaWYKKworI2lmIDAgIC8qIGN1cnJlbnRseSBub3QgdXNlZCAqLworLyoKKyAqIFJldHVybiBUUlVFIHdoZW4gd2UncmUgb24gV2luZG93cyA5NS85OC9NRS4KKyAqLworICAgIHN0YXRpYyBpbnQKK3dpbjk1KHZvaWQpCit7CisgICAgc3RhdGljIGludCBkb25lID0gRkFMU0U7CisgICAgc3RhdGljIERXT1JEIFBsYXRmb3JtSWQ7CisKKyAgICBpZiAoIWRvbmUpCisgICAgeworCU9TVkVSU0lPTklORk8gb3ZpOworCisJb3ZpLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2Yob3ZpKTsKKwlHZXRWZXJzaW9uRXgoJm92aSk7CisJUGxhdGZvcm1JZCA9IG92aS5kd1BsYXRmb3JtSWQ7CisJZG9uZSA9IFRSVUU7CisgICAgfQorICAgIC8qIFdpbiBOVC8yMDAwL1hQIGlzIFZFUl9QTEFURk9STV9XSU4zMl9OVCAqLworICAgIHJldHVybiBQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTOworfQorI2VuZGlmCisKKyAgICBzdGF0aWMgdm9pZAorZGVsZXRlX3VuaW5zdGFsbF9rZXkodm9pZCkKK3sKKyNpZmRlZiBXSU4zMjY0CisgICAgUmVnRGVsZXRlS2V5KEhLRVlfTE9DQUxfTUFDSElORSwgIlNvZnR3YXJlXFxNaWNyb3NvZnRcXFdpbmRvd3NcXEN1cnJlbnRWZXJzaW9uXFxVbmluc3RhbGxcXFZpbSAiIFZJTV9WRVJTSU9OX1NIT1JUKTsKKyNlbHNlCisgICAgRklMRQkqZmQ7CisgICAgY2hhcglidWZbQlVGU0laRV07CisKKyAgICAvKgorICAgICAqIE9uIERKR1BQIHdlIGRlbGV0ZSByZWdpc3RyeSBlbnRyaWVzIGJ5IGNyZWF0aW5nIGEgLmluZiBmaWxlIGFuZAorICAgICAqIGluc3RhbGxpbmcgaXQuCisgICAgICovCisgICAgZmQgPSBmb3BlbigidmltLmluZiIsICJ3Iik7CisgICAgaWYgKGZkICE9IE5VTEwpCisgICAgeworCWZwcmludGYoZmQsICJbdmVyc2lvbl1cbiIpOworCWZwcmludGYoZmQsICJzaWduYXR1cmU9XCIkQ0hJQ0FHTyRcIlxuXG4iKTsKKwlmcHJpbnRmKGZkLCAiW0RlZmF1bHRJbnN0YWxsXVxuIik7CisJZnByaW50ZihmZCwgIkRlbFJlZz1EZWxldGVNZVxuXG4iKTsKKwlmcHJpbnRmKGZkLCAiW0RlbGV0ZU1lXVxuIik7CisJZnByaW50ZihmZCwgIkhLTE0sXCJTb2Z0d2FyZVxcTWljcm9zb2Z0XFxXaW5kb3dzXFxDdXJyZW50VmVyc2lvblxcVW5pbnN0YWxsXFxWaW0gIiBWSU1fVkVSU0lPTl9TSE9SVCAiXCJcbiIpOworCWZjbG9zZShmZCk7CisKKwkvKiBEb24ndCBrbm93IGhvdyB0byBkZXRlY3QgV2luIE5UIHdpdGggREpHUFAuICBIYWNrOiBKdXN0IHRyeSB0aGUgV2luCisJICogOTUvOTgvTUUgbWV0aG9kLCBzaW5jZSB0aGUgREpHUFAgdmVyc2lvbiBjYW4ndCB1c2UgbG9uZyBmaWxlbmFtZXMKKwkgKiBvbiBXaW4gTlQgYW55d2F5LiAqLworCXNwcmludGYoYnVmLCAicnVuZGxsIHNldHVweC5kbGwsSW5zdGFsbEhpbmZTZWN0aW9uIERlZmF1bHRJbnN0YWxsIDEzMiAlc1xcdmltLmluZiIsIGluc3RhbGxkaXIpOworCXJ1bl9jb21tYW5kKGJ1Zik7CisjaWYgMAorCS8qIFdpbmRvd3MgTlQgbWV0aG9kICh1bnRlc3RlZCkuICovCisJc3ByaW50ZihidWYsICJydW5kbGwzMiBzeXNzZXR1cCxTZXR1cEluZk9iamVjdEluc3RhbGxBY3Rpb24gRGVmYXVsdEluc3RhbGwgMTI4ICVzXFx2aW0uaW5mIiwgaW5zdGFsbGRpcik7CisJcnVuX2NvbW1hbmQoYnVmKTsKKyNlbmRpZgorCisJcmVtb3ZlKCJ2aW0uaW5mIik7CisgICAgfQorI2VuZGlmCit9CisKKyAgICBpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQJCWZvdW5kID0gMDsKKyAgICBGSUxFCSpmZDsKKyNpZmRlZiBXSU4zMjY0CisgICAgaW50CQlpOworICAgIHN0cnVjdCBzdGF0IHN0OworICAgIGNoYXIJaWNvbltCVUZTSVpFXTsKKyAgICBjaGFyCXBhdGhbQlVGU0laRV07CisgICAgY2hhcglwb3B1cF9wYXRoW0JVRlNJWkVdOworCisgICAgLyogVGhlIG5zaXMgdW5pbnN0YWxsZXIgY2FsbHMgdXMgd2l0aCBhICItbnNpcyIgYXJndW1lbnQuICovCisgICAgaWYgKGFyZ2MgPT0gMiAmJiBzdHJpY21wKGFyZ3ZbMV0sICItbnNpcyIpID09IDApCisJaW50ZXJhY3RpdmUgPSBGQUxTRTsKKyAgICBlbHNlCisjZW5kaWYKKwlpbnRlcmFjdGl2ZSA9IFRSVUU7CisKKyAgICAvKiBJbml0aWFsaXplIHRoaXMgcHJvZ3JhbS4gKi8KKyAgICBkb19pbml0cyhhcmd2KTsKKworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHdpbGwgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6XG4iKTsKKworI2lmZGVmIFdJTjMyNjQKKyAgICBpZiAocG9wdXBfZ3ZpbV9wYXRoKHBvcHVwX3BhdGgpKQorICAgIHsKKwlwcmludGYoIiAtIHRoZSBcIkVkaXQgd2l0aCBWaW1cIiBlbnRyeSBpbiB0aGUgcG9wdXAgbWVudVxuIik7CisJcHJpbnRmKCIgICB3aGljaCB1c2VzIFwiJXNcIlxuIiwgcG9wdXBfcGF0aCk7CisJcHJpbnRmKCJcblJlbW92ZSBpdCAoeS9uKT8gIik7CisJaWYgKGNvbmZpcm0oKSkKKwl7CisJICAgIHJlbW92ZV9wb3B1cCgpOworCSAgICAvKiBBc3N1bWUgdGhlICJPcGVuIFdpdGgiIGVudHJ5IGNhbiBiZSByZW1vdmVkIGFzIHdlbGwsIGRvbid0CisJICAgICAqIGJvdGhlciB0aGUgdXNlciB3aXRoIGFza2luZyBoaW0gYWdhaW4uICovCisJICAgIHJlbW92ZV9vcGVud2l0aCgpOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAob3BlbndpdGhfZ3ZpbV9wYXRoKHBvcHVwX3BhdGgpKQorICAgIHsKKwlwcmludGYoIiAtIHRoZSBWaW0gXCJPcGVuIFdpdGguLi5cIiBlbnRyeSBpbiB0aGUgcG9wdXAgbWVudVxuIik7CisJcHJpbnRmKCIgICB3aGljaCB1c2VzIFwiJXNcIlxuIiwgcG9wdXBfcGF0aCk7CisJcHJpbnRmKCJcblJlbW92ZSBpdCAoeS9uKT8gIik7CisJaWYgKGNvbmZpcm0oKSkKKwkgICAgcmVtb3ZlX29wZW53aXRoKCk7CisgICAgfQorCisgICAgaWYgKGdldF9zaGVsbF9mb2xkZXJfcGF0aChwYXRoLCAiZGVza3RvcCIpKQorICAgIHsKKwlwcmludGYoIlxuIik7CisJZm9yIChpID0gMDsgaSA8IElDT05fQ09VTlQ7ICsraSkKKwl7CisJICAgIHNwcmludGYoaWNvbiwgIiVzXFwlcyIsIHBhdGgsIGljb25fbGlua19uYW1lc1tpXSk7CisJICAgIGlmIChzdGF0KGljb24sICZzdCkgPT0gMCkKKwkgICAgeworCQlwcmludGYoIiAtIHRoZSBcIiVzXCIgaWNvbiBvbiB0aGUgZGVza3RvcFxuIiwgaWNvbl9uYW1lc1tpXSk7CisJCSsrZm91bmQ7CisJICAgIH0KKwl9CisJaWYgKGZvdW5kID4gMCkKKwl7CisJICAgIGlmIChpbnRlcmFjdGl2ZSkKKwkJcHJpbnRmKCJcblJlbW92ZSAlcyAoeS9uKT8gIiwgZm91bmQgPiAxID8gInRoZW0iIDogIml0Iik7CisJICAgIGlmICghaW50ZXJhY3RpdmUgfHwgY29uZmlybSgpKQorCQlyZW1vdmVfaWNvbnMoKTsKKwl9CisgICAgfQorCisgICAgaWYgKGdldF9zaGVsbF9mb2xkZXJfcGF0aChwYXRoLCBWSU1fU1RBUlRNRU5VKQorCSAgICAmJiBzdGF0KHBhdGgsICZzdCkgPT0gMCkKKyAgICB7CisJcHJpbnRmKCJcbiAtIHRoZSBcIiVzXCIgZW50cnkgaW4gdGhlIFN0YXJ0IE1lbnVcbiIsIFZJTV9TVEFSVE1FTlUpOworCWlmIChpbnRlcmFjdGl2ZSkKKwkgICAgcHJpbnRmKCJcblJlbW92ZSBpdCAoeS9uKT8gIik7CisJaWYgKCFpbnRlcmFjdGl2ZSB8fCBjb25maXJtKCkpCisJICAgIHJlbW92ZV9zdGFydF9tZW51KCk7CisgICAgfQorI2VuZGlmCisKKyAgICBwcmludGYoIlxuIik7CisgICAgZm91bmQgPSByZW1vdmVfYmF0ZmlsZXMoMCk7CisgICAgaWYgKGZvdW5kID4gMCkKKyAgICB7CisJaWYgKGludGVyYWN0aXZlKQorCSAgICBwcmludGYoIlxuUmVtb3ZlICVzICh5L24pPyAiLCBmb3VuZCA+IDEgPyAidGhlbSIgOiAiaXQiKTsKKwlpZiAoIWludGVyYWN0aXZlIHx8IGNvbmZpcm0oKSkKKwkgICAgcmVtb3ZlX2JhdGZpbGVzKDEpOworICAgIH0KKworICAgIGZkID0gZm9wZW4oImd2aW0uZXhlIiwgInIiKTsKKyAgICBpZiAoZmQgIT0gTlVMTCkKKyAgICB7CisJZmNsb3NlKGZkKTsKKwlwcmludGYoImd2aW0uZXhlIGRldGVjdGVkLiAgQXR0ZW1wdGluZyB0byB1bnJlZ2lzdGVyIGd2aW0gd2l0aCBPTEVcbiIpOworCXN5c3RlbSgiZ3ZpbS5leGUgLXNpbGVudCAtdW5yZWdpc3RlciIpOworICAgIH0KKworICAgIGRlbGV0ZV91bmluc3RhbGxfa2V5KCk7CisKKyAgICBpZiAoaW50ZXJhY3RpdmUpCisgICAgeworCXByaW50ZigiXG5Zb3UgbWF5IG5vdyB3YW50IHRvIGRlbGV0ZSB0aGUgVmltIGV4ZWN1dGFibGVzIGFuZCBydW50aW1lIGZpbGVzLlxuIik7CisJcHJpbnRmKCIoVGhleSBhcmUgc3RpbGwgd2hlcmUgeW91IHVucGFja2VkIHRoZW0uKVxuIik7CisgICAgfQorCisgICAgcmV3aW5kKHN0ZGluKTsKKyAgICBwcmludGYoIlxuUHJlc3MgRW50ZXIgdG8gZXhpdC4uLiIpOworICAgICh2b2lkKWdldGNoYXIoKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3ZlcnNpb24uYyBiL3NyYy92ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyOTM0MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92ZXJzaW9uLmMKQEAgLTAsMCArMSwxMjE5IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCQlieSBCcmFtIE1vb2xlbmFhcgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBBTUlHQQorIyBpbmNsdWRlIDx0aW1lLmg+CS8qIGZvciB0aW1lKCkgKi8KKyNlbmRpZgorCisvKgorICogVmltIG9yaWdpbmF0ZWQgZnJvbSBTdGV2aWUgdmVyc2lvbiAzLjYgKEZpc2ggZGlzayAyMTcpIGJ5IEdSV2FsdGVyIChGcmVkKQorICogSXQgaGFzIGJlZW4gY2hhbmdlZCBiZXlvbmQgcmVjb2duaXRpb24gc2luY2UgdGhlbi4KKyAqCisgKiBEaWZmZXJlbmNlcyBiZXR3ZWVuIHZlcnNpb24gNS54IGFuZCA2LnggY2FuIGJlIGZvdW5kIHdpdGggIjpoZWxwIHZlcnNpb242Ii4KKyAqIERpZmZlcmVuY2VzIGJldHdlZW4gdmVyc2lvbiA0LnggYW5kIDUueCBjYW4gYmUgZm91bmQgd2l0aCAiOmhlbHAgdmVyc2lvbjUiLgorICogRGlmZmVyZW5jZXMgYmV0d2VlbiB2ZXJzaW9uIDMuMCBhbmQgNC54IGNhbiBiZSBmb3VuZCB3aXRoICI6aGVscCB2ZXJzaW9uNCIuCisgKiBBbGwgdGhlIHJlbWFya3MgYWJvdXQgb2xkZXIgdmVyc2lvbnMgaGF2ZSBiZWVuIHJlbW92ZWQsIHRoZXkgYXJlIG5vdCB2ZXJ5CisgKiBpbnRlcmVzdGluZy4KKyAqLworCisjaW5jbHVkZSAidmVyc2lvbi5oIgorCitjaGFyCSpWZXJzaW9uID0gVklNX1ZFUlNJT05fU0hPUlQ7CitjaGFyCSptZWRpdW1WZXJzaW9uID0gVklNX1ZFUlNJT05fTUVESVVNOworCisjaWYgZGVmaW5lZChIQVZFX0RBVEVfVElNRSkgfHwgZGVmaW5lZChQUk9UTykKKyMgaWYgKGRlZmluZWQoVk1TKSAmJiBkZWZpbmVkKFZBWEMpKSB8fCBkZWZpbmVkKFBST1RPKQorY2hhcglsb25nVmVyc2lvbltzaXplb2YoVklNX1ZFUlNJT05fTE9OR19EQVRFKSArIHNpemVvZihfX0RBVEVfXykKKwkJCQkJCSAgICAgICsgc2l6ZW9mKF9fVElNRV9fKSArIDNdOworICAgIHZvaWQKK21ha2VfdmVyc2lvbigpCit7CisgICAgLyoKKyAgICAgKiBDb25zdHJ1Y3QgdGhlIGxvbmcgdmVyc2lvbiBzdHJpbmcuICBOZWNlc3NhcnkgYmVjYXVzZQorICAgICAqIFZBWCBDIGNhbid0IGNhdGVuYXRlIHN0cmluZ3MgaW4gdGhlIHByZXByb2Nlc3Nvci4KKyAgICAgKi8KKyAgICBzdHJjcHkobG9uZ1ZlcnNpb24sIFZJTV9WRVJTSU9OX0xPTkdfREFURSk7CisgICAgc3RyY2F0KGxvbmdWZXJzaW9uLCBfX0RBVEVfXyk7CisgICAgc3RyY2F0KGxvbmdWZXJzaW9uLCAiICIpOworICAgIHN0cmNhdChsb25nVmVyc2lvbiwgX19USU1FX18pOworICAgIHN0cmNhdChsb25nVmVyc2lvbiwgIikiKTsKK30KKyMgZWxzZQorY2hhcgkqbG9uZ1ZlcnNpb24gPSBWSU1fVkVSU0lPTl9MT05HX0RBVEUgX19EQVRFX18gIiAiIF9fVElNRV9fICIpIjsKKyMgZW5kaWYKKyNlbHNlCitjaGFyCSpsb25nVmVyc2lvbiA9IFZJTV9WRVJTSU9OX0xPTkc7CisjZW5kaWYKKworc3RhdGljIHZvaWQgdmVyc2lvbl9tc2cgX19BUkdTKChjaGFyICpzKSk7CisKK3N0YXRpYyBjaGFyICooZmVhdHVyZXNbXSkgPQoreworI2lmZGVmIEFNSUdBCQkvKiBvbmx5IGZvciBBbWlnYSBzeXN0ZW1zICovCisjIGlmZGVmIEZFQVRfQVJQCisJIitBUlAiLAorIyBlbHNlCisJIi1BUlAiLAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgRkVBVF9BUkFCSUMKKwkiK2FyYWJpYyIsCisjZWxzZQorCSItYXJhYmljIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQVVUT0NNRAorCSIrYXV0b2NtZCIsCisjZWxzZQorCSItYXV0b2NtZCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0JFVkFMCisJIitiYWxsb29uX2V2YWwiLAorI2Vsc2UKKwkiLWJhbGxvb25fZXZhbCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0JST1dTRQorCSIrYnJvd3NlIiwKKyNlbHNlCisJIi1icm93c2UiLAorI2VuZGlmCisjaWZkZWYgTk9fQlVJTFRJTl9UQ0FQUworCSItYnVpbHRpbl90ZXJtcyIsCisjZW5kaWYKKyNpZmRlZiBTT01FX0JVSUxUSU5fVENBUFMKKwkiK2J1aWx0aW5fdGVybXMiLAorI2VuZGlmCisjaWZkZWYgQUxMX0JVSUxUSU5fVENBUFMKKwkiKytidWlsdGluX3Rlcm1zIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQllURU9GRgorCSIrYnl0ZV9vZmZzZXQiLAorI2Vsc2UKKwkiLWJ5dGVfb2Zmc2V0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ0lOREVOVAorCSIrY2luZGVudCIsCisjZWxzZQorCSItY2luZGVudCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgorCSIrY2xpZW50c2VydmVyIiwKKyNlbHNlCisJIi1jbGllbnRzZXJ2ZXIiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKwkiK2NsaXBib2FyZCIsCisjZWxzZQorCSItY2xpcGJvYXJkIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ01ETF9DT01QTAorCSIrY21kbGluZV9jb21wbCIsCisjZWxzZQorCSItY21kbGluZV9jb21wbCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0NNREhJU1QKKwkiK2NtZGxpbmVfaGlzdCIsCisjZWxzZQorCSItY21kbGluZV9oaXN0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJIitjbWRsaW5lX2luZm8iLAorI2Vsc2UKKwkiLWNtZGxpbmVfaW5mbyIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0NPTU1FTlRTCisJIitjb21tZW50cyIsCisjZWxzZQorCSItY29tbWVudHMiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9DUllQVAorCSIrY3J5cHR2IiwKKyNlbHNlCisJIi1jcnlwdHYiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9DU0NPUEUKKwkiK2NzY29wZSIsCisjZWxzZQorCSItY3Njb3BlIiwKKyNlbmRpZgorI2lmIGRlZmluZWQoRkVBVF9DT05fRElBTE9HKSAmJiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykKKwkiK2RpYWxvZ19jb25fZ3VpIiwKKyNlbHNlCisjIGlmIGRlZmluZWQoRkVBVF9DT05fRElBTE9HKQorCSIrZGlhbG9nX2NvbiIsCisjIGVsc2UKKyMgIGlmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKQorCSIrZGlhbG9nX2d1aSIsCisjICBlbHNlCisJIi1kaWFsb2ciLAorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEZFQVRfRElGRgorCSIrZGlmZiIsCisjZWxzZQorCSItZGlmZiIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0RJR1JBUEhTCisJIitkaWdyYXBocyIsCisjZWxzZQorCSItZGlncmFwaHMiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9ETkQKKwkiK2RuZCIsCisjZWxzZQorCSItZG5kIiwKKyNlbmRpZgorI2lmZGVmIEVCQ0RJQworCSIrZWJjZGljIiwKKyNlbHNlCisJIi1lYmNkaWMiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9FTUFDU19UQUdTCisJIitlbWFjc190YWdzIiwKKyNlbHNlCisJIi1lbWFjc190YWdzIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfRVZBTAorCSIrZXZhbCIsCisjZWxzZQorCSItZXZhbCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0VYX0VYVFJBCisJIitleF9leHRyYSIsCisjZWxzZQorCSItZXhfZXh0cmEiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKwkiK2V4dHJhX3NlYXJjaCIsCisjZWxzZQorCSItZXh0cmFfc2VhcmNoIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfRktNQVAKKwkiK2ZhcnNpIiwKKyNlbHNlCisJIi1mYXJzaSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NFQVJDSFBBVEgKKwkiK2ZpbGVfaW5fcGF0aCIsCisjZWxzZQorCSItZmlsZV9pbl9wYXRoIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfRklORF9JRAorCSIrZmluZF9pbl9wYXRoIiwKKyNlbHNlCisJIi1maW5kX2luX3BhdGgiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9GT0xESU5HCisJIitmb2xkaW5nIiwKKyNlbHNlCisJIi1mb2xkaW5nIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfRk9PVEVSCisJIitmb290ZXIiLAorI2Vsc2UKKwkiLWZvb3RlciIsCisjZW5kaWYKKwkgICAgLyogb25seSBpbnRlcmVzdGluZyBvbiBVbml4IHN5c3RlbXMgKi8KKyNpZiAhZGVmaW5lZChVU0VfU1lTVEVNKSAmJiBkZWZpbmVkKFVOSVgpCisJIitmb3JrKCkiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9HRVRURVhUCisjIGlmZGVmIERZTkFNSUNfR0VUVEVYVAorCSIrZ2V0dGV4dC9keW4iLAorIyBlbHNlCisJIitnZXR0ZXh0IiwKKyMgZW5kaWYKKyNlbHNlCisJIi1nZXR0ZXh0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfSEFOR1VMSU4KKwkiK2hhbmd1bF9pbnB1dCIsCisjZWxzZQorCSItaGFuZ3VsX2lucHV0IiwKKyNlbmRpZgorI2lmIChkZWZpbmVkKEhBVkVfSUNPTlZfSCkgJiYgZGVmaW5lZChVU0VfSUNPTlYpKSB8fCBkZWZpbmVkKERZTkFNSUNfSUNPTlYpCisjIGlmZGVmIERZTkFNSUNfSUNPTlYKKwkiK2ljb252L2R5biIsCisjIGVsc2UKKwkiK2ljb252IiwKKyMgZW5kaWYKKyNlbHNlCisJIi1pY29udiIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0lOU19FWFBBTkQKKwkiK2luc2VydF9leHBhbmQiLAorI2Vsc2UKKwkiLWluc2VydF9leHBhbmQiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9KVU1QTElTVAorCSIranVtcGxpc3QiLAorI2Vsc2UKKwkiLWp1bXBsaXN0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfS0VZTUFQCisJIitrZXltYXAiLAorI2Vsc2UKKwkiLWtleW1hcCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0xBTkdNQVAKKwkiK2xhbmdtYXAiLAorI2Vsc2UKKwkiLWxhbmdtYXAiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9MSUJDQUxMCisJIitsaWJjYWxsIiwKKyNlbHNlCisJIi1saWJjYWxsIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfTElORUJSRUFLCisJIitsaW5lYnJlYWsiLAorI2Vsc2UKKwkiLWxpbmVicmVhayIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0xJU1AKKwkiK2xpc3BpbmRlbnQiLAorI2Vsc2UKKwkiLWxpc3BpbmRlbnQiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9MSVNUQ01EUworCSIrbGlzdGNtZHMiLAorI2Vsc2UKKwkiLWxpc3RjbWRzIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfTE9DQUxNQVAKKwkiK2xvY2FsbWFwIiwKKyNlbHNlCisJIi1sb2NhbG1hcCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX01FTlUKKwkiK21lbnUiLAorI2Vsc2UKKwkiLW1lbnUiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9TRVNTSU9OCisJIitta3Nlc3Npb24iLAorI2Vsc2UKKwkiLW1rc2Vzc2lvbiIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX01PRElGWV9GTkFNRQorCSIrbW9kaWZ5X2ZuYW1lIiwKKyNlbHNlCisJIi1tb2RpZnlfZm5hbWUiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9NT1VTRQorCSIrbW91c2UiLAorIyAgaWZkZWYgRkVBVF9NT1VTRVNIQVBFCisJIittb3VzZXNoYXBlIiwKKyMgIGVsc2UKKwkiLW1vdXNlc2hhcGUiLAorIyAgZW5kaWYKKyMgZWxzZQorCSItbW91c2UiLAorI2VuZGlmCisjaWYgZGVmaW5lZChVTklYKSB8fCBkZWZpbmVkKFZNUykKKyMgaWZkZWYgRkVBVF9NT1VTRV9ERUMKKwkiK21vdXNlX2RlYyIsCisjIGVsc2UKKwkiLW1vdXNlX2RlYyIsCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfTU9VU0VfR1BNCisJIittb3VzZV9ncG0iLAorIyBlbHNlCisJIi1tb3VzZV9ncG0iLAorIyBlbmRpZgorIyBpZmRlZiBGRUFUX01PVVNFX0pTQgorCSIrbW91c2VfanNidGVybSIsCisjIGVsc2UKKwkiLW1vdXNlX2pzYnRlcm0iLAorIyBlbmRpZgorIyBpZmRlZiBGRUFUX01PVVNFX05FVAorCSIrbW91c2VfbmV0dGVybSIsCisjIGVsc2UKKwkiLW1vdXNlX25ldHRlcm0iLAorIyBlbmRpZgorIyBpZmRlZiBGRUFUX01PVVNFX1hURVJNCisJIittb3VzZV94dGVybSIsCisjIGVsc2UKKwkiLW1vdXNlX3h0ZXJtIiwKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIF9fUU5YX18KKyMgaWZkZWYgRkVBVF9NT1VTRV9QVEVSTQorCSIrbW91c2VfcHRlcm0iLAorIyBlbHNlCisJIi1tb3VzZV9wdGVybSIsCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX01CWVRFX0lNRQorIyBpZmRlZiBEWU5BTUlDX0lNRQorCSIrbXVsdGlfYnl0ZV9pbWUvZHluIiwKKyMgZWxzZQorCSIrbXVsdGlfYnl0ZV9pbWUiLAorIyBlbmRpZgorI2Vsc2UKKyMgaWZkZWYgRkVBVF9NQllURQorCSIrbXVsdGlfYnl0ZSIsCisjIGVsc2UKKwkiLW11bHRpX2J5dGUiLAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgRkVBVF9NVUxUSV9MQU5HCisJIittdWx0aV9sYW5nIiwKKyNlbHNlCisJIi1tdWx0aV9sYW5nIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworCSIrbmV0YmVhbnNfaW50ZyIsCisjZWxzZQorCSItbmV0YmVhbnNfaW50ZyIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9XMzIKKyMgaWZkZWYgRkVBVF9PTEUKKwkiK29sZSIsCisjIGVsc2UKKwkiLW9sZSIsCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX09TRklMRVRZUEUKKwkiK29zZmlsZXR5cGUiLAorI2Vsc2UKKwkiLW9zZmlsZXR5cGUiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9QQVRIX0VYVFJBCisJIitwYXRoX2V4dHJhIiwKKyNlbHNlCisJIi1wYXRoX2V4dHJhIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfUEVSTAorIyBpZmRlZiBEWU5BTUlDX1BFUkwKKwkiK3BlcmwvZHluIiwKKyMgZWxzZQorCSIrcGVybCIsCisjIGVuZGlmCisjZWxzZQorCSItcGVybCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1BSSU5URVIKKyMgaWZkZWYgRkVBVF9QT1NUU0NSSVBUCisJIitwb3N0c2NyaXB0IiwKKyMgZWxzZQorCSItcG9zdHNjcmlwdCIsCisjIGVuZGlmCisJIitwcmludGVyIiwKKyNlbHNlCisJIi1wcmludGVyIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfUFlUSE9OCisjIGlmZGVmIERZTkFNSUNfUFlUSE9OCisJIitweXRob24vZHluIiwKKyMgZWxzZQorCSIrcHl0aG9uIiwKKyMgZW5kaWYKKyNlbHNlCisJIi1weXRob24iLAorI2VuZGlmCisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCSIrcXVpY2tmaXgiLAorI2Vsc2UKKwkiLXF1aWNrZml4IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfUklHSFRMRUZUCisJIityaWdodGxlZnQiLAorI2Vsc2UKKwkiLXJpZ2h0bGVmdCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1JVQlkKKyMgaWZkZWYgRFlOQU1JQ19SVUJZCisJIitydWJ5L2R5biIsCisjIGVsc2UKKwkiK3J1YnkiLAorIyBlbmRpZgorI2Vsc2UKKwkiLXJ1YnkiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisJIitzY3JvbGxiaW5kIiwKKyNlbHNlCisJIi1zY3JvbGxiaW5kIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfU0lHTlMKKwkiK3NpZ25zIiwKKyNlbHNlCisJIi1zaWducyIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NNQVJUSU5ERU5UCisJIitzbWFydGluZGVudCIsCisjZWxzZQorCSItc21hcnRpbmRlbnQiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9TTklGRgorCSIrc25pZmYiLAorI2Vsc2UKKwkiLXNuaWZmIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfU1RMX09QVAorCSIrc3RhdHVzbGluZSIsCisjZWxzZQorCSItc3RhdHVzbGluZSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1NVTl9XT1JLU0hPUAorCSIrc3VuX3dvcmtzaG9wIiwKKyNlbHNlCisJIi1zdW5fd29ya3Nob3AiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9TWU5fSEwKKwkiK3N5bnRheCIsCisjZWxzZQorCSItc3ludGF4IiwKKyNlbmRpZgorCSAgICAvKiBvbmx5IGludGVyZXN0aW5nIG9uIFVuaXggc3lzdGVtcyAqLworI2lmIGRlZmluZWQoVVNFX1NZU1RFTSkgJiYgKGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChfX0VNWF9fKSkKKwkiK3N5c3RlbSgpIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfVEFHX0JJTlMKKwkiK3RhZ19iaW5hcnkiLAorI2Vsc2UKKwkiLXRhZ19iaW5hcnkiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9UQUdfT0xEU1RBVElDCisJIit0YWdfb2xkX3N0YXRpYyIsCisjZWxzZQorCSItdGFnX29sZF9zdGF0aWMiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9UQUdfQU5ZV0hJVEUKKwkiK3RhZ19hbnlfd2hpdGUiLAorI2Vsc2UKKwkiLXRhZ19hbnlfd2hpdGUiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9UQ0wKKyMgaWZkZWYgRFlOQU1JQ19UQ0wKKwkiK3RjbC9keW4iLAorIyBlbHNlCisJIit0Y2wiLAorIyBlbmRpZgorI2Vsc2UKKwkiLXRjbCIsCisjZW5kaWYKKyNpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoX19FTVhfXykKKy8qIG9ubHkgVW5peCAob3IgT1MvMiB3aXRoIEVNWCEpIGNhbiBoYXZlIHRlcm1pbmZvIGluc3RlYWQgb2YgdGVybWNhcCAqLworIyBpZmRlZiBURVJNSU5GTworCSIrdGVybWluZm8iLAorIyBlbHNlCisJIi10ZXJtaW5mbyIsCisjIGVuZGlmCisjZWxzZQkJICAgIC8qIHVuaXggYWx3YXlzIGluY2x1ZGVzIHRlcm1jYXAgc3VwcG9ydCAqLworIyBpZmRlZiBIQVZFX1RHRVRFTlQKKwkiK3RnZXRlbnQiLAorIyBlbHNlCisJIi10Z2V0ZW50IiwKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEZFQVRfVEVSTVJFU1BPTlNFCisJIit0ZXJtcmVzcG9uc2UiLAorI2Vsc2UKKwkiLXRlcm1yZXNwb25zZSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1RFWFRPQkoKKwkiK3RleHRvYmplY3RzIiwKKyNlbHNlCisJIi10ZXh0b2JqZWN0cyIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1RJVExFCisJIit0aXRsZSIsCisjZWxzZQorCSItdGl0bGUiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9UT09MQkFSCisJIit0b29sYmFyIiwKKyNlbHNlCisJIi10b29sYmFyIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfVVNSX0NNRFMKKwkiK3VzZXJfY29tbWFuZHMiLAorI2Vsc2UKKwkiLXVzZXJfY29tbWFuZHMiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkiK3ZlcnRzcGxpdCIsCisjZWxzZQorCSItdmVydHNwbGl0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkiK3ZpcnR1YWxlZGl0IiwKKyNlbHNlCisJIi12aXJ0dWFsZWRpdCIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCSIrdmlzdWFsIiwKKyMgaWZkZWYgRkVBVF9WSVNVQUxFWFRSQQorCSIrdmlzdWFsZXh0cmEiLAorIyBlbHNlCisJIi12aXN1YWxleHRyYSIsCisjIGVuZGlmCisjZWxzZQorCSItdmlzdWFsIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfVklNSU5GTworCSIrdmltaW5mbyIsCisjZWxzZQorCSItdmltaW5mbyIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisJIit2cmVwbGFjZSIsCisjZWxzZQorCSItdnJlcGxhY2UiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9XSUxESUdOCisJIit3aWxkaWdub3JlIiwKKyNlbHNlCisJIi13aWxkaWdub3JlIiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfV0lMRE1FTlUKKwkiK3dpbGRtZW51IiwKKyNlbHNlCisJIi13aWxkbWVudSIsCisjZW5kaWYKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKwkiK3dpbmRvd3MiLAorI2Vsc2UKKwkiLXdpbmRvd3MiLAorI2VuZGlmCisjaWZkZWYgRkVBVF9XUklURUJBQ0tVUAorCSIrd3JpdGViYWNrdXAiLAorI2Vsc2UKKwkiLXdyaXRlYmFja3VwIiwKKyNlbmRpZgorI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChWTVMpCisjIGlmZGVmIEZFQVRfWDExCisJIitYMTEiLAorIyBlbHNlCisJIi1YMTEiLAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgRkVBVF9YRk9OVFNFVAorCSIreGZvbnRzZXQiLAorI2Vsc2UKKwkiLXhmb250c2V0IiwKKyNlbmRpZgorI2lmZGVmIEZFQVRfWElNCisJIit4aW0iLAorI2Vsc2UKKwkiLXhpbSIsCisjZW5kaWYKKyNpZiBkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoVk1TKQorIyBpZmRlZiBVU0VfWFNNUF9JTlRFUkFDVAorCSIreHNtcF9pbnRlcmFjdCIsCisjIGVsc2UKKyMgIGlmZGVmIFVTRV9YU01QCisJIit4c21wIiwKKyMgIGVsc2UKKwkiLXhzbXAiLAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9YQ0xJUEJPQVJECisJIit4dGVybV9jbGlwYm9hcmQiLAorIyBlbHNlCisJIi14dGVybV9jbGlwYm9hcmQiLAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgRkVBVF9YVEVSTV9TQVZFCisJIit4dGVybV9zYXZlIiwKKyNlbHNlCisJIi14dGVybV9zYXZlIiwKKyNlbmRpZgorI2lmZGVmIFdJTjMyNjQKKyMgaWZkZWYgRkVBVF9YUE1fVzMyCisJIit4cG1fdzMyIiwKKyMgZWxzZQorCSIteHBtX3czMiIsCisjIGVuZGlmCisjZW5kaWYKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGluY2x1ZGVkX3BhdGNoZXNbXSA9Cit7ICAgLyogQWRkIG5ldyBwYXRjaCBudW1iZXIgYmVsb3cgdGhpcyBsaW5lICovCisvKiovCisgICAgMAorfTsKKworICAgIGludAoraGlnaGVzdF9wYXRjaCgpCit7CisgICAgaW50CQlpOworICAgIGludAkJaCA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpbmNsdWRlZF9wYXRjaGVzW2ldICE9IDA7ICsraSkKKwlpZiAoaW5jbHVkZWRfcGF0Y2hlc1tpXSA+IGgpCisJICAgIGggPSBpbmNsdWRlZF9wYXRjaGVzW2ldOworICAgIHJldHVybiBoOworfQorCisjaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogUmV0dXJuIFRSVUUgaWYgcGF0Y2ggIm4iIGhhcyBiZWVuIGluY2x1ZGVkLgorICovCisgICAgaW50CitoYXNfcGF0Y2gobikKKyAgICBpbnQJCW47Cit7CisgICAgaW50CQlpOworCisgICAgZm9yIChpID0gMDsgaW5jbHVkZWRfcGF0Y2hlc1tpXSAhPSAwOyArK2kpCisJaWYgKGluY2x1ZGVkX3BhdGNoZXNbaV0gPT0gbikKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIEZBTFNFOworfQorI2VuZGlmCisKKyAgICB2b2lkCitleF92ZXJzaW9uKGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgLyoKKyAgICAgKiBJZ25vcmUgYSAiOnZlcnNpb24gOS45OSIgY29tbWFuZC4KKyAgICAgKi8KKyAgICBpZiAoKmVhcC0+YXJnID09IE5VTCkKKyAgICB7CisJbXNnX3B1dGNoYXIoJ1xuJyk7CisJbGlzdF92ZXJzaW9uKCk7CisgICAgfQorfQorCisgICAgdm9pZAorbGlzdF92ZXJzaW9uKCkKK3sKKyAgICBpbnQJCWk7CisgICAgaW50CQlmaXJzdDsKKyAgICBjaGFyCSpzID0gIiI7CisKKyAgICAvKgorICAgICAqIFdoZW4gYWRkaW5nIGZlYXR1cmVzIGhlcmUsIGRvbid0IGZvcmdldCB0byB1cGRhdGUgdGhlIGxpc3Qgb2YKKyAgICAgKiBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gZXZhbC5jIQorICAgICAqLworICAgIE1TRyhsb25nVmVyc2lvbik7CisjaWZkZWYgV0lOMzI2NAorIyBpZmRlZiBGRUFUX0dVSV9XMzIKKyMgIGlmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA8PSAxMDEwKQorICAgIC8qIE9ubHkgTVMgVkMgNC4xIGFuZCBlYXJsaWVyIGNhbiBkbyBXaW4zMnMgKi8KKyAgICBNU0dfUFVUUyhfKCJcbk1TLVdpbmRvd3MgMTYvMzIgYml0IEdVSSB2ZXJzaW9uIikpOworIyAgZWxzZQorICAgIE1TR19QVVRTKF8oIlxuTVMtV2luZG93cyAzMiBiaXQgR1VJIHZlcnNpb24iKSk7CisjICBlbmRpZgorICAgIGlmIChndWlfaXNfd2luMzJzKCkpCisJTVNHX1BVVFMoXygiIGluIFdpbjMycyBtb2RlIikpOworIyBpZmRlZiBGRUFUX09MRQorICAgIE1TR19QVVRTKF8oIiB3aXRoIE9MRSBzdXBwb3J0IikpOworIyBlbmRpZgorIyBlbHNlCisgICAgTVNHX1BVVFMoXygiXG5NUy1XaW5kb3dzIDMyIGJpdCBjb25zb2xlIHZlcnNpb24iKSk7CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBXSU4xNgorICAgIE1TR19QVVRTKF8oIlxuTVMtV2luZG93cyAxNiBiaXQgdmVyc2lvbiIpKTsKKyNlbmRpZgorI2lmZGVmIE1TRE9TCisjIGlmZGVmIERKR1BQCisgICAgTVNHX1BVVFMoXygiXG4zMiBiaXQgTVMtRE9TIHZlcnNpb24iKSk7CisjIGVsc2UKKyAgICBNU0dfUFVUUyhfKCJcbjE2IGJpdCBNUy1ET1MgdmVyc2lvbiIpKTsKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIE1BQ09TCisjIGlmZGVmIE1BQ09TX1gKKyMgIGlmZGVmIE1BQ09TX1hfVU5JWAorICAgIE1TR19QVVRTKF8oIlxuTWFjT1MgWCAodW5peCkgdmVyc2lvbiIpKTsKKyMgIGVsc2UKKyAgICBNU0dfUFVUUyhfKCJcbk1hY09TIFggdmVyc2lvbiIpKTsKKyMgIGVuZGlmCisjZWxzZQorICAgIE1TR19QVVRTKF8oIlxuTWFjT1MgdmVyc2lvbiIpKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgUklTQ09TCisgICAgTVNHX1BVVFMoXygiXG5SSVNDIE9TIHZlcnNpb24iKSk7CisjZW5kaWYKKyNpZmRlZiBWTVMKKyAgICBNU0dfUFVUUygiXG5PcGVuVk1TIHZlcnNpb24iKTsKKyNlbmRpZgorCisgICAgLyogUHJpbnQgdGhlIGxpc3Qgb2YgcGF0Y2ggbnVtYmVycyBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUuICovCisgICAgLyogUHJpbnQgYSByYW5nZSB3aGVuIHBhdGNoZXMgYXJlIGNvbnNlY3V0aXZlOiAiMS0xMCwgMTIsIDE1LTQwLCA0Mi00NSIgKi8KKyAgICBpZiAoaW5jbHVkZWRfcGF0Y2hlc1swXSAhPSAwKQorICAgIHsKKwlNU0dfUFVUUyhfKCJcbkluY2x1ZGVkIHBhdGNoZXM6ICIpKTsKKwlmaXJzdCA9IC0xOworCS8qIGZpbmQgbGFzdCBvbmUgKi8KKwlmb3IgKGkgPSAwOyBpbmNsdWRlZF9wYXRjaGVzW2ldICE9IDA7ICsraSkKKwkgICAgOworCXdoaWxlICgtLWkgPj0gMCkKKwl7CisJICAgIGlmIChmaXJzdCA8IDApCisJCWZpcnN0ID0gaW5jbHVkZWRfcGF0Y2hlc1tpXTsKKwkgICAgaWYgKGkgPT0gMCB8fCBpbmNsdWRlZF9wYXRjaGVzW2kgLSAxXSAhPSBpbmNsdWRlZF9wYXRjaGVzW2ldICsgMSkKKwkgICAgeworCQlNU0dfUFVUUyhzKTsKKwkJcyA9ICIsICI7CisJCW1zZ19vdXRudW0oKGxvbmcpZmlyc3QpOworCQlpZiAoZmlyc3QgIT0gaW5jbHVkZWRfcGF0Y2hlc1tpXSkKKwkJeworCQkgICAgTVNHX1BVVFMoIi0iKTsKKwkJICAgIG1zZ19vdXRudW0oKGxvbmcpaW5jbHVkZWRfcGF0Y2hlc1tpXSk7CisJCX0KKwkJZmlyc3QgPSAtMTsKKwkgICAgfQorCX0KKyAgICB9CisKKyNpZmRlZiBNT0RJRklFRF9CWQorICAgIE1TR19QVVRTKCJcbiIpOworICAgIE1TR19QVVRTKF8oIk1vZGlmaWVkIGJ5ICIpKTsKKyAgICBNU0dfUFVUUyhNT0RJRklFRF9CWSk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUEFUSERFRgorICAgIGlmICgqY29tcGlsZWRfdXNlciAhPSBOVUwgfHwgKmNvbXBpbGVkX3N5cyAhPSBOVUwpCisgICAgeworCU1TR19QVVRTKF8oIlxuQ29tcGlsZWQgIikpOworCWlmICgqY29tcGlsZWRfdXNlciAhPSBOVUwpCisJeworCSAgICBNU0dfUFVUUyhfKCJieSAiKSk7CisJICAgIE1TR19QVVRTKGNvbXBpbGVkX3VzZXIpOworCX0KKwlpZiAoKmNvbXBpbGVkX3N5cyAhPSBOVUwpCisJeworCSAgICBNU0dfUFVUUygiQCIpOworCSAgICBNU0dfUFVUUyhjb21waWxlZF9zeXMpOworCX0KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZFQVRfSFVHRQorICAgIE1TR19QVVRTKF8oIlxuSHVnZSB2ZXJzaW9uICIpKTsKKyNlbHNlCisjIGlmZGVmIEZFQVRfQklHCisgICAgTVNHX1BVVFMoXygiXG5CaWcgdmVyc2lvbiAiKSk7CisjIGVsc2UKKyMgIGlmZGVmIEZFQVRfTk9STUFMCisgICAgTVNHX1BVVFMoXygiXG5Ob3JtYWwgdmVyc2lvbiAiKSk7CisjICBlbHNlCisjICAgaWZkZWYgRkVBVF9TTUFMTAorICAgIE1TR19QVVRTKF8oIlxuU21hbGwgdmVyc2lvbiAiKSk7CisjICAgZWxzZQorICAgIE1TR19QVVRTKF8oIlxuVGlueSB2ZXJzaW9uICIpKTsKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBGRUFUX0dVSQorICAgIE1TR19QVVRTKF8oIndpdGhvdXQgR1VJLiIpKTsKKyNlbHNlCisjIGlmZGVmIEZFQVRfR1VJX0dUSworIyAgaWZkZWYgRkVBVF9HVUlfR05PTUUKKyMgICBpZmRlZiBIQVZFX0dUSzIKKyAgICBNU0dfUFVUUyhfKCJ3aXRoIEdUSzItR05PTUUgR1VJLiIpKTsKKyMgICBlbHNlCisgICAgTVNHX1BVVFMoXygid2l0aCBHVEstR05PTUUgR1VJLiIpKTsKKyMgICBlbmRpZgorIyAgZWxzZQorIyAgIGlmZGVmIEhBVkVfR1RLMgorICAgIE1TR19QVVRTKF8oIndpdGggR1RLMiBHVUkuIikpOworIyAgIGVsc2UKKyAgICBNU0dfUFVUUyhfKCJ3aXRoIEdUSyBHVUkuIikpOworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbHNlCisjICBpZmRlZiBGRUFUX0dVSV9NT1RJRgorICAgIE1TR19QVVRTKF8oIndpdGggWDExLU1vdGlmIEdVSS4iKSk7CisjICBlbHNlCisjICAgaWZkZWYgRkVBVF9HVUlfQVRIRU5BCisjICAgIGlmZGVmIEZFQVRfR1VJX05FWFRBVworICAgIE1TR19QVVRTKF8oIndpdGggWDExLW5lWHRhdyBHVUkuIikpOworIyAgICBlbHNlCisgICAgTVNHX1BVVFMoXygid2l0aCBYMTEtQXRoZW5hIEdVSS4iKSk7CisjICAgIGVuZGlmCisjICAgZWxzZQorIyAgICBpZmRlZiBGRUFUX0dVSV9CRU9TCisgICAgTVNHX1BVVFMoXygid2l0aCBCZU9TIEdVSS4iKSk7CisjICAgIGVsc2UKKyMgICAgIGlmZGVmIEZFQVRfR1VJX1BIT1RPTgorICAgIE1TR19QVVRTKF8oIndpdGggUGhvdG9uIEdVSS4iKSk7CisjICAgICBlbHNlCisjICAgICAgaWYgZGVmaW5lZChNU1dJTikKKyAgICBNU0dfUFVUUyhfKCJ3aXRoIEdVSS4iKSk7CisjICAgICAgZWxzZQorIwlpZiBkZWZpbmVkIChUQVJHRVRfQVBJX01BQ19DQVJCT04pICYmIFRBUkdFVF9BUElfTUFDX0NBUkJPTgorICAgIE1TR19QVVRTKF8oIndpdGggQ2FyYm9uIEdVSS4iKSk7CisjCWVsc2UKKyMJIGlmIGRlZmluZWQgKFRBUkdFVF9BUElfTUFDX09TWCkgJiYgVEFSR0VUX0FQSV9NQUNfT1NYCisgICAgTVNHX1BVVFMoXygid2l0aCBDb2NvYSBHVUkuIikpOworIwkgZWxzZQorIwkgIGlmIGRlZmluZWQgKE1BQ09TKQorICAgIE1TR19QVVRTKF8oIndpdGggKGNsYXNzaWMpIEdVSS4iKSk7CisjCSAgZW5kaWYKKyMJIGVuZGlmCisjCWVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKyAgICB2ZXJzaW9uX21zZyhfKCIgIEZlYXR1cmVzIGluY2x1ZGVkICgrKSBvciBub3QgKC0pOlxuIikpOworCisgICAgLyogcHJpbnQgYWxsIHRoZSBmZWF0dXJlcyAqLworICAgIGZvciAoaSA9IDA7IGZlYXR1cmVzW2ldICE9IE5VTEw7ICsraSkKKyAgICB7CisJdmVyc2lvbl9tc2coZmVhdHVyZXNbaV0pOworCWlmIChtc2dfY29sID4gMCkKKwkgICAgdmVyc2lvbl9tc2coIiAiKTsKKyAgICB9CisKKyAgICB2ZXJzaW9uX21zZygiXG4iKTsKKyNpZmRlZiBTWVNfVklNUkNfRklMRQorICAgIHZlcnNpb25fbXNnKF8oIiAgIHN5c3RlbSB2aW1yYyBmaWxlOiBcIiIpKTsKKyAgICB2ZXJzaW9uX21zZyhTWVNfVklNUkNfRklMRSk7CisgICAgdmVyc2lvbl9tc2coIlwiXG4iKTsKKyNlbmRpZgorI2lmZGVmIFVTUl9WSU1SQ19GSUxFCisgICAgdmVyc2lvbl9tc2coXygiICAgICB1c2VyIHZpbXJjIGZpbGU6IFwiIikpOworICAgIHZlcnNpb25fbXNnKFVTUl9WSU1SQ19GSUxFKTsKKyAgICB2ZXJzaW9uX21zZygiXCJcbiIpOworI2VuZGlmCisjaWZkZWYgVVNSX1ZJTVJDX0ZJTEUyCisgICAgdmVyc2lvbl9tc2coXygiIDJuZCB1c2VyIHZpbXJjIGZpbGU6IFwiIikpOworICAgIHZlcnNpb25fbXNnKFVTUl9WSU1SQ19GSUxFMik7CisgICAgdmVyc2lvbl9tc2coIlwiXG4iKTsKKyNlbmRpZgorI2lmZGVmIFVTUl9WSU1SQ19GSUxFMworICAgIHZlcnNpb25fbXNnKF8oIiAzcmQgdXNlciB2aW1yYyBmaWxlOiBcIiIpKTsKKyAgICB2ZXJzaW9uX21zZyhVU1JfVklNUkNfRklMRTMpOworICAgIHZlcnNpb25fbXNnKCJcIlxuIik7CisjZW5kaWYKKyNpZmRlZiBVU1JfRVhSQ19GSUxFCisgICAgdmVyc2lvbl9tc2coXygiICAgICAgdXNlciBleHJjIGZpbGU6IFwiIikpOworICAgIHZlcnNpb25fbXNnKFVTUl9FWFJDX0ZJTEUpOworICAgIHZlcnNpb25fbXNnKCJcIlxuIik7CisjZW5kaWYKKyNpZmRlZiBVU1JfRVhSQ19GSUxFMgorICAgIHZlcnNpb25fbXNnKF8oIiAgMm5kIHVzZXIgZXhyYyBmaWxlOiBcIiIpKTsKKyAgICB2ZXJzaW9uX21zZyhVU1JfRVhSQ19GSUxFMik7CisgICAgdmVyc2lvbl9tc2coIlwiXG4iKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJCisjIGlmZGVmIFNZU19HVklNUkNfRklMRQorICAgIHZlcnNpb25fbXNnKF8oIiAgc3lzdGVtIGd2aW1yYyBmaWxlOiBcIiIpKTsKKyAgICB2ZXJzaW9uX21zZyhTWVNfR1ZJTVJDX0ZJTEUpOworICAgIHZlcnNpb25fbXNnKCJcIlxuIik7CisjIGVuZGlmCisgICAgdmVyc2lvbl9tc2coXygiICAgIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIikpOworICAgIHZlcnNpb25fbXNnKFVTUl9HVklNUkNfRklMRSk7CisgICAgdmVyc2lvbl9tc2coIlwiXG4iKTsKKyMgaWZkZWYgVVNSX0dWSU1SQ19GSUxFMgorICAgIHZlcnNpb25fbXNnKF8oIjJuZCB1c2VyIGd2aW1yYyBmaWxlOiBcIiIpKTsKKyAgICB2ZXJzaW9uX21zZyhVU1JfR1ZJTVJDX0ZJTEUyKTsKKyAgICB2ZXJzaW9uX21zZygiXCJcbiIpOworIyBlbmRpZgorIyBpZmRlZiBVU1JfR1ZJTVJDX0ZJTEUzCisgICAgdmVyc2lvbl9tc2coXygiM3JkIHVzZXIgZ3ZpbXJjIGZpbGU6IFwiIikpOworICAgIHZlcnNpb25fbXNnKFVTUl9HVklNUkNfRklMRTMpOworICAgIHZlcnNpb25fbXNnKCJcIlxuIik7CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSQorIyBpZmRlZiBTWVNfTUVOVV9GSUxFCisgICAgdmVyc2lvbl9tc2coXygiICAgIHN5c3RlbSBtZW51IGZpbGU6IFwiIikpOworICAgIHZlcnNpb25fbXNnKFNZU19NRU5VX0ZJTEUpOworICAgIHZlcnNpb25fbXNnKCJcIlxuIik7CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1BBVEhERUYKKyAgICBpZiAoKmRlZmF1bHRfdmltX2RpciAhPSBOVUwpCisgICAgeworCXZlcnNpb25fbXNnKF8oIiAgZmFsbC1iYWNrIGZvciAkVklNOiBcIiIpKTsKKwl2ZXJzaW9uX21zZygoY2hhciAqKWRlZmF1bHRfdmltX2Rpcik7CisJdmVyc2lvbl9tc2coIlwiXG4iKTsKKyAgICB9CisgICAgaWYgKCpkZWZhdWx0X3ZpbXJ1bnRpbWVfZGlyICE9IE5VTCkKKyAgICB7CisJdmVyc2lvbl9tc2coXygiIGYtYiBmb3IgJFZJTVJVTlRJTUU6IFwiIikpOworCXZlcnNpb25fbXNnKChjaGFyICopZGVmYXVsdF92aW1ydW50aW1lX2Rpcik7CisJdmVyc2lvbl9tc2coIlwiXG4iKTsKKyAgICB9CisgICAgdmVyc2lvbl9tc2coXygiQ29tcGlsYXRpb246ICIpKTsKKyAgICB2ZXJzaW9uX21zZygoY2hhciAqKWFsbF9jZmxhZ3MpOworICAgIHZlcnNpb25fbXNnKCJcbiIpOworI2lmZGVmIFZNUworICAgIGlmICgqY29tcGlsZXJfdmVyc2lvbiAhPSBOVUwpCisgICAgeworCXZlcnNpb25fbXNnKF8oIkNvbXBpbGVyOiAiKSk7CisJdmVyc2lvbl9tc2coKGNoYXIgKiljb21waWxlcl92ZXJzaW9uKTsKKwl2ZXJzaW9uX21zZygiXG4iKTsKKyAgICB9CisjZW5kaWYKKyAgICB2ZXJzaW9uX21zZyhfKCJMaW5raW5nOiAiKSk7CisgICAgdmVyc2lvbl9tc2coKGNoYXIgKilhbGxfbGZsYWdzKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgdmVyc2lvbl9tc2coIlxuIik7CisgICAgdmVyc2lvbl9tc2coXygiICBERUJVRyBCVUlMRCIpKTsKKyNlbmRpZgorfQorCisvKgorICogT3V0cHV0IGEgc3RyaW5nIGZvciB0aGUgdmVyc2lvbiBtZXNzYWdlLiAgSWYgaXQncyBnb2luZyB0byB3cmFwLCBvdXRwdXQgYQorICogbmV3bGluZSwgdW5sZXNzIHRoZSBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGZpdCBvbiB0aGUgc2NyZWVuIGFueXdheS4KKyAqLworICAgIHN0YXRpYyB2b2lkCit2ZXJzaW9uX21zZyhzKQorICAgIGNoYXIJKnM7Cit7CisgICAgaW50CQlsZW4gPSAoaW50KVNUUkxFTihzKTsKKworICAgIGlmICghZ290X2ludCAmJiBsZW4gPCAoaW50KUNvbHVtbnMgJiYgbXNnX2NvbCArIGxlbiA+PSAoaW50KUNvbHVtbnMKKwkJCQkJCQkJJiYgKnMgIT0gJ1xuJykKKwltc2dfcHV0Y2hhcignXG4nKTsKKyAgICBpZiAoIWdvdF9pbnQpCisJTVNHX1BVVFMocyk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2ludHJvX2xpbmUgX19BUkdTKChpbnQgcm93LCBjaGFyX3UgKm1lc2csIGludCBhZGRfdmVyc2lvbiwgaW50IGF0dHIpKTsKKworLyoKKyAqIEdpdmUgYW4gaW50cm9kdWN0b3J5IG1lc3NhZ2UgYWJvdXQgVmltLgorICogT25seSB1c2VkIHdoZW4gc3RhcnRpbmcgVmltIG9uIGFuIGVtcHR5IGZpbGUsIHdpdGhvdXQgYSBmaWxlIG5hbWUuCisgKiBPciB3aXRoIHRoZSAiOmludHJvIiBjb21tYW5kIChmb3IgU3ZlbiA6LSkuCisgKi8KKyAgICB2b2lkCitpbnRyb19tZXNzYWdlKGNvbG9uKQorICAgIGludAkJY29sb247CQkvKiBUUlVFIGZvciAiOmludHJvIiAqLworeworICAgIGludAkJaTsKKyAgICBpbnQJCXJvdzsKKyAgICBpbnQJCWJsYW5rbGluZXM7CisgICAgaW50CQlzcG9uc29yOworICAgIGNoYXIJKnA7CisgICAgc3RhdGljIGNoYXIJKihsaW5lc1tdKSA9CisgICAgeworCU5fKCJWSU0gLSBWaSBJTXByb3ZlZCIpLAorCSIiLAorCU5fKCJ2ZXJzaW9uICIpLAorCU5fKCJieSBCcmFtIE1vb2xlbmFhciBldCBhbC4iKSwKKyNpZmRlZiBNT0RJRklFRF9CWQorCSIgIiwKKyNlbmRpZgorCU5fKCJWaW0gaXMgb3BlbiBzb3VyY2UgYW5kIGZyZWVseSBkaXN0cmlidXRhYmxlIiksCisJIiIsCisJTl8oIkhlbHAgcG9vciBjaGlsZHJlbiBpbiBVZ2FuZGEhIiksCisJTl8oInR5cGUgIDpoZWxwIGljY2Y8RW50ZXI+ICAgICAgIGZvciBpbmZvcm1hdGlvbiAiKSwKKwkiIiwKKwlOXygidHlwZSAgOnE8RW50ZXI+ICAgICAgICAgICAgICAgdG8gZXhpdCAgICAgICAgICIpLAorCU5fKCJ0eXBlICA6aGVscDxFbnRlcj4gIG9yICA8RjE+ICBmb3Igb24tbGluZSBoZWxwIiksCisJTl8oInR5cGUgIDpoZWxwIHZlcnNpb242PEVudGVyPiAgIGZvciB2ZXJzaW9uIGluZm8iKSwKKwlOVUxMLAorCSIiLAorCU5fKCJSdW5uaW5nIGluIFZpIGNvbXBhdGlibGUgbW9kZSIpLAorCU5fKCJ0eXBlICA6c2V0IG5vY3A8RW50ZXI+ICAgICAgICBmb3IgVmltIGRlZmF1bHRzIiksCisJTl8oInR5cGUgIDpoZWxwIGNwLWRlZmF1bHQ8RW50ZXI+IGZvciBpbmZvIG9uIHRoaXMiKSwKKyAgICB9OworI2lmZGVmIEZFQVRfR1VJCisgICAgc3RhdGljIGNoYXIJKihndWlfbGluZXNbXSkgPQorICAgIHsKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorI2lmZGVmIE1PRElGSUVEX0JZCisJTlVMTCwKKyNlbmRpZgorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5fKCJtZW51ICBIZWxwLT5PcnBoYW5zICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gICAgIiksCisJTlVMTCwKKwlOXygiUnVubmluZyBtb2RlbGVzcywgdHlwZWQgdGV4dCBpcyBpbnNlcnRlZCIpLAorCU5fKCJtZW51ICBFZGl0LT5HbG9iYWwgU2V0dGluZ3MtPlRvZ2dsZSBJbnNlcnQgTW9kZSAgIiksCisJTl8oIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0d28gbW9kZXMgICAgICAiKSwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOXygibWVudSAgRWRpdC0+R2xvYmFsIFNldHRpbmdzLT5Ub2dnbGUgVmkgQ29tcGF0aWJsZSIpLAorCU5fKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgVmltIGRlZmF1bHRzICAgIiksCisgICAgfTsKKyNlbmRpZgorCisgICAgLyogYmxhbmtsaW5lcyA9IHNjcmVlbiBoZWlnaHQgLSAjIG1lc3NhZ2UgbGluZXMgKi8KKyAgICBibGFua2xpbmVzID0gKGludClSb3dzIC0gKChzaXplb2YobGluZXMpIC8gc2l6ZW9mKGNoYXIgKikpIC0gMSk7CisgICAgaWYgKCFwX2NwKQorCWJsYW5rbGluZXMgKz0gNDsgIC8qIGFkZCA0IGZvciBub3Qgc2hvd2luZyAiVmkgY29tcGF0aWJsZSIgbWVzc2FnZSAqLworI2lmIGRlZmluZWQoV0lOMzI2NCkgJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKQorICAgIGlmIChtY2hfd2luZG93czk1KCkpCisJYmxhbmtsaW5lcyAtPSAzOyAgLyogc3VidHJhY3QgMyBmb3Igc2hvd2luZyAiV2luZG93cyA5NSIgbWVzc2FnZSAqLworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICAvKiBEb24ndCBvdmVyd3JpdGUgYSBzdGF0dXNsaW5lLiAgRGVwZW5kcyBvbiAnY21kaGVpZ2h0Jy4gKi8KKyAgICBpZiAocF9scyA+IDEpCisJYmxhbmtsaW5lcyAtPSBSb3dzIC0gdG9wZnJhbWUtPmZyX2hlaWdodDsKKyNlbmRpZgorICAgIGlmIChibGFua2xpbmVzIDwgMCkKKwlibGFua2xpbmVzID0gMDsKKworICAgIC8qIFNob3cgdGhlIHNwb25zb3IgYW5kIHJlZ2lzdGVyIG1lc3NhZ2Ugb25lIG91dCBvZiBmb3VyIHRpbWVzLCB0aGUgVWdhbmRhCisgICAgICogbWVzc2FnZSB0d28gb3V0IG9mIGZvdXIgdGltZXMuICovCisgICAgc3BvbnNvciA9IHRpbWUoTlVMTCk7CisgICAgc3BvbnNvciA9ICgoc3BvbnNvciAmIDIpID09IDApIC0gKChzcG9uc29yICYgNCkgPT0gMCk7CisKKyAgICAvKiBzdGFydCBkaXNwbGF5aW5nIHRoZSBtZXNzYWdlIGxpbmVzIGFmdGVyIGhhbGYgb2YgdGhlIGJsYW5rIGxpbmVzICovCisgICAgcm93ID0gYmxhbmtsaW5lcyAvIDI7CisgICAgaWYgKChyb3cgPj0gMiAmJiBDb2x1bW5zID49IDUwKSB8fCBjb2xvbikKKyAgICB7CisJZm9yIChpID0gMDsgaSA8IChpbnQpKHNpemVvZihsaW5lcykgLyBzaXplb2YoY2hhciAqKSk7ICsraSkKKwl7CisJICAgIHAgPSBsaW5lc1tpXTsKKyNpZmRlZiBGRUFUX0dVSQorCSAgICBpZiAocF9pbSAmJiBndWkuaW5fdXNlICYmIGd1aV9saW5lc1tpXSAhPSBOVUxMKQorCQlwID0gZ3VpX2xpbmVzW2ldOworI2VuZGlmCisJICAgIGlmIChwID09IE5VTEwpCisJICAgIHsKKwkJaWYgKCFwX2NwKQorCQkgICAgYnJlYWs7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGlmIChzcG9uc29yICE9IDApCisJICAgIHsKKwkJaWYgKHN0cnN0cihwLCAiY2hpbGRyZW4iKSAhPSBOVUxMKQorCQkgICAgcCA9IHNwb25zb3IgPCAwCisJCQk/IE5fKCJTcG9uc29yIFZpbSBkZXZlbG9wbWVudCEiKQorCQkJOiBOXygiQmVjb21lIGEgcmVnaXN0ZXJlZCBWaW0gdXNlciEiKTsKKwkJZWxzZSBpZiAoc3Ryc3RyKHAsICJpY2NmIikgIT0gTlVMTCkKKwkJICAgIHAgPSBzcG9uc29yIDwgMAorCQkJPyBOXygidHlwZSAgOmhlbHAgc3BvbnNvcjxFbnRlcj4gICAgZm9yIGluZm9ybWF0aW9uICIpCisJCQk6IE5fKCJ0eXBlICA6aGVscCByZWdpc3RlcjxFbnRlcj4gICBmb3IgaW5mb3JtYXRpb24gIik7CisJCWVsc2UgaWYgKHN0cnN0cihwLCAiT3JwaGFucyIpICE9IE5VTEwpCisJCSAgICBwID0gTl8oIm1lbnUgIEhlbHAtPlNwb25zb3IvUmVnaXN0ZXIgIGZvciBpbmZvcm1hdGlvbiAgICAiKTsKKwkgICAgfQorCSAgICBpZiAoKnAgIT0gTlVMKQorCQlkb19pbnRyb19saW5lKHJvdywgKGNoYXJfdSAqKV8ocCksIGkgPT0gMiwgMCk7CisJICAgICsrcm93OworCX0KKyNpZiBkZWZpbmVkKFdJTjMyNjQpICYmICFkZWZpbmVkKEZFQVRfR1VJX1czMikKKwlpZiAobWNoX3dpbmRvd3M5NSgpKQorCXsKKwkgICAgZG9faW50cm9fbGluZSgrK3JvdywKKwkJICAgIChjaGFyX3UgKilfKCJXQVJOSU5HOiBXaW5kb3dzIDk1Lzk4L01FIGRldGVjdGVkIiksCisJCQkJCQkJRkFMU0UsIGhsX2F0dHIoSExGX0UpKTsKKwkgICAgZG9faW50cm9fbGluZSgrK3JvdywKKwkJKGNoYXJfdSAqKV8oInR5cGUgIDpoZWxwIHdpbmRvd3M5NTxFbnRlcj4gIGZvciBpbmZvIG9uIHRoaXMiKSwKKwkJCQkJCQkJICAgIEZBTFNFLCAwKTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBNYWtlIHRoZSB3YWl0LXJldHVybiBtZXNzYWdlIGFwcGVhciBqdXN0IGJlbG93IHRoZSB0ZXh0LiAqLworICAgIGlmIChjb2xvbikKKwltc2dfcm93ID0gcm93OworfQorCisgICAgc3RhdGljIHZvaWQKK2RvX2ludHJvX2xpbmUocm93LCBtZXNnLCBhZGRfdmVyc2lvbiwgYXR0cikKKyAgICBpbnQJCXJvdzsKKyAgICBjaGFyX3UJKm1lc2c7CisgICAgaW50CQlhZGRfdmVyc2lvbjsKKyAgICBpbnQJCWF0dHI7Cit7CisgICAgY2hhcl91CXZlcnNbMjBdOworICAgIGludAkJY29sOworICAgIGNoYXJfdQkqcDsKKyAgICBpbnQJCWw7CisgICAgaW50CQljbGVuOworI2lmZGVmIE1PRElGSUVEX0JZCisjIGRlZmluZSBNT0RCWV9MRU4gMTUwCisgICAgY2hhcl91CW1vZGJ5W01PREJZX0xFTl07CisKKyAgICBpZiAoKm1lc2cgPT0gJyAnKQorICAgIHsKKwlTVFJOQ1BZKG1vZGJ5LCBfKCJNb2RpZmllZCBieSAiKSwgTU9EQllfTEVOKTsKKwltb2RieVtNT0RCWV9MRU4gLSAxXSA9IE5VTDsKKwlsID0gU1RSTEVOKG1vZGJ5KTsKKwlTVFJOQ1BZKG1vZGJ5ICsgbCwgTU9ESUZJRURfQlksIE1PREJZX0xFTiAtIGwpOworCW1vZGJ5W01PREJZX0xFTiAtIDFdID0gTlVMOworCW1lc2cgPSBtb2RieTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIENlbnRlciB0aGUgbWVzc2FnZSBob3Jpem9udGFsbHkuICovCisgICAgY29sID0gdmltX3N0cnNpemUobWVzZyk7CisgICAgaWYgKGFkZF92ZXJzaW9uKQorICAgIHsKKwlTVFJDUFkodmVycywgbWVkaXVtVmVyc2lvbik7CisJaWYgKGhpZ2hlc3RfcGF0Y2goKSkKKwl7CisJICAgIC8qIENoZWNrIGZvciA5Ljl4IG9yIDkuOXh4LCBhbHBoYS9iZXRhIHZlcnNpb24gKi8KKwkgICAgaWYgKGlzYWxwaGEoKGludCltZWRpdW1WZXJzaW9uWzNdKSkKKwkgICAgeworCQlpZiAoaXNhbHBoYSgoaW50KW1lZGl1bVZlcnNpb25bNF0pKQorCQkgICAgc3ByaW50ZigoY2hhciAqKXZlcnMgKyA1LCAiLiVkJXMiLCBoaWdoZXN0X3BhdGNoKCksCisJCQkJCQkJICAgbWVkaXVtVmVyc2lvbiArIDUpOworCQllbHNlCisJCSAgICBzcHJpbnRmKChjaGFyICopdmVycyArIDQsICIuJWQlcyIsIGhpZ2hlc3RfcGF0Y2goKSwKKwkJCQkJCQkgICBtZWRpdW1WZXJzaW9uICsgNCk7CisJICAgIH0KKwkgICAgZWxzZQorCQlzcHJpbnRmKChjaGFyICopdmVycyArIDMsICIuJWQiLCBoaWdoZXN0X3BhdGNoKCkpOworCX0KKwljb2wgKz0gKGludClTVFJMRU4odmVycyk7CisgICAgfQorICAgIGNvbCA9IChDb2x1bW5zIC0gY29sKSAvIDI7CisgICAgaWYgKGNvbCA8IDApCisJY29sID0gMDsKKworICAgIC8qIFNwbGl0IHVwIGluIHBhcnRzIHRvIGhpZ2hsaWdodCA8PiBpdGVtcyBkaWZmZXJlbnRseS4gKi8KKyAgICBmb3IgKHAgPSBtZXNnOyAqcCAhPSBOVUw7IHAgKz0gbCkKKyAgICB7CisJY2xlbiA9IDA7CisJZm9yIChsID0gMDsgcFtsXSAhPSBOVUwKKwkJCSAmJiAobCA9PSAwIHx8IChwW2xdICE9ICc8JyAmJiBwW2wgLSAxXSAhPSAnPicpKTsgKytsKQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJICAgIHsKKwkJY2xlbiArPSBwdHIyY2VsbHMocCArIGwpOworCQlsICs9ICgqbWJfcHRyMmxlbl9jaGVjaykocCArIGwpIC0gMTsKKwkgICAgfQorCSAgICBlbHNlCisjZW5kaWYKKwkJY2xlbiArPSBieXRlMmNlbGxzKHBbbF0pOworCX0KKwlzY3JlZW5fcHV0c19sZW4ocCwgbCwgcm93LCBjb2wsICpwID09ICc8JyA/IGhsX2F0dHIoSExGXzgpIDogYXR0cik7CisJY29sICs9IGNsZW47CisgICAgfQorCisgICAgLyogQWRkIHRoZSB2ZXJzaW9uIG51bWJlciB0byB0aGUgdmVyc2lvbiBsaW5lLiAqLworICAgIGlmIChhZGRfdmVyc2lvbikKKwlzY3JlZW5fcHV0cyh2ZXJzLCByb3csIGNvbCwgMCk7Cit9CisKKy8qCisgKiAiOmludHJvIjogY2xlYXIgc2NyZWVuLCBkaXNwbGF5IGludHJvIHNjcmVlbiBhbmQgd2FpdCBmb3IgcmV0dXJuLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCitleF9pbnRybyhlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIHNjcmVlbmNsZWFyKCk7CisgICAgaW50cm9fbWVzc2FnZShUUlVFKTsKKyAgICB3YWl0X3JldHVybihUUlVFKTsKK30KZGlmZiAtLWdpdCBhL3NyYy92ZXJzaW9uLmggYi9zcmMvdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOThkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdmVyc2lvbi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworCisvKgorICogRGVmaW5lIHRoZSB2ZXJzaW9uIG51bWJlciwgbmFtZSwgZXRjLgorICogVGhlIHBhdGNobGV2ZWwgaXMgaW4gaW5jbHVkZWRfcGF0Y2hlc1tdLCBpbiB2ZXJzaW9uLmMuCisgKgorICogVGhpcyBkb2Vzbid0IHVzZSBzdHJpbmcgY29udGF0ZW5hdGlvbiwgc29tZSBjb21waWxlcnMgZG9uJ3Qgc3VwcG9ydCBpdC4KKyAqLworCisjZGVmaW5lIFZJTV9WRVJTSU9OX01BSk9SCQkgNworI2RlZmluZSBWSU1fVkVSU0lPTl9NQUpPUl9TVFIJCSI3IgorI2RlZmluZSBWSU1fVkVSU0lPTl9NSU5PUgkJIDAKKyNkZWZpbmUgVklNX1ZFUlNJT05fTUlOT1JfU1RSCQkiMCIKKyNkZWZpbmUgVklNX1ZFUlNJT05fMTAwCSAgICAoVklNX1ZFUlNJT05fTUFKT1IgKiAxMDAgKyBWSU1fVkVSU0lPTl9NSU5PUikKKworI2RlZmluZSBWSU1fVkVSU0lPTl9CVUlMRAkJIDI1NgorI2RlZmluZSBWSU1fVkVSU0lPTl9CVUlMRF9CQ0QJCTB4MTAwCisjZGVmaW5lIFZJTV9WRVJTSU9OX0JVSUxEX1NUUgkJIjI1NiIKKyNkZWZpbmUgVklNX1ZFUlNJT05fUEFUQ0hMRVZFTAkJIDAKKyNkZWZpbmUgVklNX1ZFUlNJT05fUEFUQ0hMRVZFTF9TVFIJIjAiCisvKiBVc2VkIGJ5IE1hY09TIHBvcnQgc2hvdWxkIGJlIG9uZSBvZjogZGV2ZWxvcG1lbnQsIGFscGhhLCBiZXRhLCBmaW5hbCAqLworI2RlZmluZSBWSU1fVkVSU0lPTl9SRUxFQVNFCQlhbHBoYQorCisvKgorICogVklNX1ZFUlNJT05fTk9ET1QgaXMgdXNlZCBmb3IgdGhlIHJ1bnRpbWUgZGlyZWN0b3J5IG5hbWUuCisgKiBWSU1fVkVSU0lPTl9TSE9SVCBpcyBjb3BpZWQgaW50byB0aGUgc3dhcCBmaWxlIChtYXguIGxlbmd0aCBpcyA2IGNoYXJzKS4KKyAqIFZJTV9WRVJTSU9OX01FRElVTSBpcyB1c2VkIGZvciB0aGUgc3RhcnR1cC1zY3JlZW4uCisgKiBWSU1fVkVSU0lPTl9MT05HIGlzIHVzZWQgZm9yIHRoZSAiOnZlcnNpb24iIGNvbW1hbmQgYW5kICJWaW0gLWgiLgorICovCisjZGVmaW5lIFZJTV9WRVJTSU9OX05PRE9UCSJ2aW03MGFhIgorI2RlZmluZSBWSU1fVkVSU0lPTl9TSE9SVAkiNy4wYWEiCisjZGVmaW5lIFZJTV9WRVJTSU9OX01FRElVTQkiNy4wYWEgQUxQSEEiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkcJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA0IEp1bmUgNykiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkdfREFURQkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDQgSnVuZSA3LCBjb21waWxlZCAiCmRpZmYgLS1naXQgYS9zcmMvdmltLmRlZiBiL3NyYy92aW0uZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYzA5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdmltLmRlZgpAQCAtMCwwICsxLDQgQEAKK0NPREUgUFJFTE9BRCBFWEVDVVRFT05MWQorREFUQSBNVUxUSVBMRSBTSEFSRUQKK0RFU0NSSVBUSU9OICdWaW0gNi4wJworSEVBUFNJWkUgMCwwCmRpZmYgLS1naXQgYS9zcmMvdmltLmggYi9zcmMvdmltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1YWEwNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92aW0uaApAQCAtMCwwICsxLDE3ODggQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKyNpZm5kZWYgVklNX19ICisjIGRlZmluZSBWSU1fX0gKKworLyogdXNlIGZhc3RjYWxsIGZvciBCb3JsYW5kLCB3aGVuIGNvbXBpbGluZyBmb3IgV2luMzIgKG5vdCBmb3IgRE9TMTYpICovCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKERFQlVHKQorI2lmIGRlZmluZWQoRkVBVF9QRVJMKSB8fCBcCisgICAgZGVmaW5lZChGRUFUX1BZVEhPTikgfHwgXAorICAgIGRlZmluZWQoRkVBVF9SVUJZKSB8fCBcCisgICAgZGVmaW5lZChGRUFUX1RDTCkgfHwgXAorICAgIGRlZmluZWQoRFlOQU1JQ19HRVRURVhUKSB8fCBcCisgICAgZGVmaW5lZChEWU5BTUlDX0lDT05WKSB8fCBcCisgICAgZGVmaW5lZChEWU5BTUlDX0lNRSkgfHwgXAorICAgIGRlZmluZWQoWFBNKQorIyAgcHJhZ21hIG9wdGlvbiAtcGMKKyMgZWxzZQorIyAgcHJhZ21hIG9wdGlvbiAtcHIKKyMgZW5kaWYKKyNlbmRpZgorCisvKiA9PT09PT09PT09PT0gdGhlIGhlYWRlciBmaWxlIHB1enpsZSAoY2EuIDUwLTEwMCBwaWVjZXMpID09PT09PT09PSAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAkvKiBHTlUgYXV0b2NvbmYgKG9yIHNvbWV0aGluZyBlbHNlKSB3YXMgaGVyZSAqLworIyBpbmNsdWRlICJhdXRvL2NvbmZpZy5oIgorIyBkZWZpbmUgSEFWRV9QQVRIREVGCisKKy8qCisgKiBDaGVjayBpZiBjb25maWd1cmUgY29ycmVjbHkgbWFuYWdlZCB0byBmaW5kIHNpemVvZihpbnQpLiAgSWYgdGhpcyBmYWlsZWQsCisgKiBpdCBiZWNvbWVzIHplcm8uICBUaGlzIGlzIGxpa2VseSBhIHByb2JsZW0gb2Ygbm90IGJlaW5nIGFibGUgdG8gcnVuIHRoZQorICogdGVzdCBwcm9ncmFtLiAgT3RoZXIgaXRlbXMgZnJvbSBjb25maWd1cmUgbWF5IGFsc28gYmUgd3JvbmcgdGhlbiEKKyAqLworIyBpZiAoU0laRU9GX0lOVCA9PSAwKQorICAgIEVycm9yOiBjb25maWd1cmUgZGlkIG5vdCBydW4gcHJvcGVybHkuICBDaGVjayBhdXRvL2NvbmZpZy5sb2cuCisjIGVuZGlmCisKKy8qCisgKiBDeWd3aW4gbWF5IGhhdmUgZmNoZGlyKCkgaW4gYSBuZXdlciBybGVlYXNlLCBidXQgaW4gbW9zdCB2ZXJzaW9ucyBpdAorICogZG9lc24ndCB3b3JrIHdlbGwgYW5kIGF2b2lkaW5nIGl0IGtlZXBzIHRoZSBiaW5hcnkgYmFja3dhcmQgY29tcGF0aWJsZS4KKyAqLworIyBpZiBkZWZpbmVkKF9fQ1lHV0lOMzJfXykgJiYgZGVmaW5lZChIQVZFX0ZDSERJUikKKyMgIHVuZGVmIEhBVkVfRkNIRElSCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fRU1YX18JCS8qIGhhbmQtZWRpdGVkIGNvbmZpZy5oIGZvciBPUy8yIHdpdGggRU1YICovCisjIGluY2x1ZGUgIm9zX29zMl9jZmcuaCIKKyNlbmRpZgorCisvKgorICogTUFDT1NfQ0xBU1NJQyBjb21waWxpbmcgZm9yIE1hY09TIHByaW9yIHRvIE1hY09TIFgKKyAqIE1BQ09TX1hfVU5JWCAgY29tcGlsaW5nIGZvciBNYWNPUyBYICh1c2luZyBvc191bml4LmMpCisgKiBNQUNPU19YICAgICAgIGNvbXBpbGluZyBmb3IgTWFjT1MgWCAodXNpbmcgb3NfdW5peC5jIG9yIG9zX21hYy5jKQorICogTUFDT1MJIGNvbXBpbGluZyBmb3IgZWl0aGVyIG9uZQorICovCisjaWYgZGVmaW5lZChtYWNpbnRvc2gpICYmICFkZWZpbmVkKE1BQ09TX0NMQVNTSUMpCisjICBkZWZpbmUgTUFDT1NfQ0xBU1NJQworI2VuZGlmCisjaWYgZGVmaW5lZChNQUNPU19YX1VOSVgpCisjIGRlZmluZSBNQUNPU19YCisjIGlmbmRlZiBIQVZFX0NPTkZJR19ICisjICBkZWZpbmUgVU5JWAorIyBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChNQUNPU19YKSB8fCBkZWZpbmVkKE1BQ09TX0NMQVNTSUMpCisjICBkZWZpbmUgTUFDT1MKKyNlbmRpZgorI2lmIGRlZmluZWQoTUFDT1NfWCkgJiYgZGVmaW5lZChNQUNPU19DTEFTU0lDKQorICAgIEVycm9yOiBUbyBjb21waWxlIGZvciBib3RoIE1BQ09TIFggYW5kIENsYXNzaWMgdXNlIGEgQ2xhc3NpYyBDYXJib24KKyNlbmRpZgorLyogVW5sZXNzIG1hZGUgdGhyb3VnaCB0aGUgTWFrZWZpbGUgZW5mb3JjZSBHVUkgb24gTWFjICovCisjaWYgZGVmaW5lZChNQUNPUykgJiYgIWRlZmluZWQoSEFWRV9DT05GSUdfSCkKKyMgZGVmaW5lIEZFQVRfR1VJX01BQworI2VuZGlmCisKKworI2lmIGRlZmluZWQoRkVBVF9HVUlfTU9USUYpIFwKKyAgICB8fCBkZWZpbmVkKEZFQVRfR1VJX0dUSykgXAorICAgIHx8IGRlZmluZWQoRkVBVF9HVUlfQVRIRU5BKSBcCisgICAgfHwgZGVmaW5lZChGRUFUX0dVSV9NQUMpIFwKKyAgICB8fCBkZWZpbmVkKEZFQVRfR1VJX1czMikgXAorICAgIHx8IGRlZmluZWQoRkVBVF9HVUlfVzE2KSBcCisgICAgfHwgZGVmaW5lZChGRUFUX0dVSV9CRU9TKSBcCisgICAgfHwgZGVmaW5lZChGRUFUX0dVSV9BTUlHQSkgXAorICAgIHx8IGRlZmluZWQoRkVBVF9HVUlfUEhPVE9OKQorIyBpZm5kZWYgRkVBVF9HVUkKKyMgIGRlZmluZSBGRUFUX0dVSQorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX1czMikgfHwgZGVmaW5lZChGRUFUX0dVSV9XMTYpCisjIGRlZmluZSBGRUFUX0dVSV9NU1dJTgorI2VuZGlmCisjaWYgZGVmaW5lZChXSU4xNikgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lONjQpCisjIGRlZmluZSBNU1dJTgorI2VuZGlmCisvKiBQcmFjdGljYWxseSBldmVyeXRoaW5nIGlzIGNvbW1vbiB0byBib3RoIFdpbjMyIGFuZCBXaW42NCAqLworI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQorIyBkZWZpbmUgV0lOMzI2NAorI2VuZGlmCisKKy8qCisgKiBTSVpFT0ZfSU5UIGlzIHVzZWQgaW4gZmVhdHVyZS5oLCBhbmQgdGhlIHN5c3RlbS1zcGVjaWZpYyBpbmNsdWRlZCBmaWxlcworICogbmVlZCBpdGVtcyBmcm9tIGZlYXR1cmUuaC4gIFRoZXJlZm9yZSBkZWZpbmUgU0laRU9GX0lOVCBoZXJlLgorICovCisjaWZkZWYgV0lOMzI2NAorIyBkZWZpbmUgU0laRU9GX0lOVCA0CisjZW5kaWYKKyNpZmRlZiBNU0RPUworIyBpZmRlZiBESkdQUAorIyAgaWZuZGVmIEZFQVRfR1VJX0dUSwkJLyogYXZvaWQgcHJvYmxlbXMgd2hlbiBnZW5lcmF0aW5nIHByb3RvdHlwZXMgKi8KKyMgICBkZWZpbmUgU0laRU9GX0lOVCA0CQkvKiAzMiBiaXQgaW50cyAqLworIyAgZW5kaWYKKyMgIGRlZmluZSBET1MzMgorIyAgZGVmaW5lIEZFQVRfQ0xJUEJPQVJECisjIGVsc2UKKyMgIGlmbmRlZiBGRUFUX0dVSV9HVEsJCS8qIGF2b2lkIHByb2JsZW1zIHdoZW4gZ2VuZXJhdGluZyBwcm90b3R5cGVzICovCisjICAgZGVmaW5lIFNJWkVPRl9JTlQgMgkJLyogMTYgYml0IGludHMgKi8KKyMgIGVuZGlmCisjICBkZWZpbmUgU01BTExfTUFMTE9DCQkvKiAxNiBiaXQgc3RvcmFnZSBhbGxvY2F0aW9uICovCisjICBkZWZpbmUgRE9TMTYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQU1JR0EKKyAgLyogQmUgY29uc2VydmF0aXZlIGFib3V0IHNpemVvZihpbnQpLiBJdCBjb3VsZCBiZSA0IHRvby4gKi8KKyMgaWZuZGVmIEZFQVRfR1VJX0dUSwkvKiBhdm9pZCBwcm9ibGVtcyB3aGVuIGdlbmVyYXRpbmcgcHJvdG90eXBlcyAqLworIyAgaWZkZWYgX19HTlVDX18KKyMgICBkZWZpbmUgU0laRU9GX0lOVAk0CisjICBlbHNlCisjICAgZGVmaW5lIFNJWkVPRl9JTlQJMgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIE1BQ09TCisjIGlmIGRlZmluZWQoX19QT1dFUlBDX18pIHx8IGRlZmluZWQoX19mb3VyYnl0ZWludHNfXykgXAorICB8fCBkZWZpbmVkKF9fTVJDX18pIHx8IGRlZmluZWQoX19TQ19fKSB8fCBkZWZpbmVkKF9fQVBQTEVfQ0NfXykvKiBNUFcgQ29tcGlsZXJzICovCisjICBkZWZpbmUgU0laRU9GX0lOVCA0CisjIGVsc2UKKyMgIGRlZmluZSBTSVpFT0ZfSU5UIDIKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIFJJU0NPUworIyBkZWZpbmUgU0laRU9GX0lOVCA0CisjZW5kaWYKKworCisjaW5jbHVkZSAiZmVhdHVyZS5oIgkvKiAjZGVmaW5lcyBmb3Igb3B0aW9uYWxzIGFuZCBmZWF0dXJlcyAqLworCisvKiAreDExIGlzIG9ubHkgZW5hYmxlZCB3aGVuIGl0J3MgYm90aCBhdmFpbGFibGUgYW5kIHdhbnRlZC4gKi8KKyNpZiBkZWZpbmVkKEhBVkVfWDExKSAmJiBkZWZpbmVkKFdBTlRfWDExKQorIyBkZWZpbmUgRkVBVF9YMTEKKyNlbmRpZgorCisvKiBDYW4ndCB1c2UgIlBBQ0tBR0UiIGhlcmUsIGNvbmZsaWN0cyB3aXRoIGEgUGVybCBpbmNsdWRlIGZpbGUuICovCisjaWZuZGVmIFZJTVBBQ0tBR0UKKyMgZGVmaW5lIFZJTVBBQ0tBR0UJInZpbSIKKyNlbmRpZgorCisvKgorICogRmluZCBvdXQgaWYgZnVuY3Rpb24gZGVmaW5pdGlvbnMgc2hvdWxkIGluY2x1ZGUgYXJndW1lbnQgdHlwZXMKKyAqLworI2lmZGVmIEFaVEVDX0MKKyMgaW5jbHVkZSA8ZnVuY3Rpb25zLmg+CisjIGRlZmluZSBfX0FSR1MoeCkgIHgKKyNlbmRpZgorCisjaWZkZWYgU0FTQworIyBpbmNsdWRlIDxjbGliL2V4ZWNfcHJvdG9zLmg+CisjIGRlZmluZSBfX0FSR1MoeCkgIHgKKyNlbmRpZgorCisjaWZkZWYgX0RDQworIyBpbmNsdWRlIDxjbGliL2V4ZWNfcHJvdG9zLmg+CisjIGRlZmluZSBfX0FSR1MoeCkgIHgKKyNlbmRpZgorCisjaWZkZWYgX19UVVJCT0NfXworIyBkZWZpbmUgX19BUkdTKHgpIHgKKyNlbmRpZgorCisjaWZkZWYgX19CRU9TX18KKyMgaW5jbHVkZSAib3NfYmVvcy5oIgorIyBkZWZpbmUgX19BUkdTKHgpICB4CisjZW5kaWYKKworI2lmIChkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoX19FTVhfXykgfHwgZGVmaW5lZChWTVMpKSBcCisJJiYgKCFkZWZpbmVkKE1BQ09TX1gpIHx8IGRlZmluZWQoSEFWRV9DT05GSUdfSCkpCisjIGluY2x1ZGUgIm9zX3VuaXguaCIJICAgIC8qIGJyaW5nIGxvdHMgb2Ygc3lzdGVtIGhlYWRlciBmaWxlcyAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1BQ09TKSAmJiAoZGVmaW5lZChfX01SQ19fKSB8fCBkZWZpbmVkKF9fU0NfXykpCisgICAvKiBBcHBsZSdzIENvbXBpbGVycyBzdXBwb3J0IHByb3RvdHlwZXMgKi8KKyMgZGVmaW5lIF9fQVJHUyh4KSB4CisjZW5kaWYKKyNpZm5kZWYgX19BUkdTCisjIGlmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoV0lOMzI2NCkKKyMgIGRlZmluZSBfX0FSR1MoeCkgeAorIyBlbHNlCisjICBkZWZpbmUgX19BUkdTKHgpICgpCisjIGVuZGlmCisjZW5kaWYKKworLyogX19BUkdTIGFuZCBfX1BBUk1TIGFyZSB0aGUgc2FtZSB0aGluZy4gKi8KKyNpZm5kZWYgX19QQVJNUworIyBkZWZpbmUgX19QQVJNUyh4KSBfX0FSR1MoeCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChVTklYKSAmJiAhZGVmaW5lZChNQUNPU19YKSAvKiBNQUNPU19YIGRvZXNuJ3QgeWV0IHN1cHBvcnQgb3NkZWYuaCAqLworIyBpbmNsdWRlICJhdXRvL29zZGVmLmgiCS8qIGJyaW5nIG1pc3NpbmcgZGVjbGFyYXRpb25zIGluICovCisjZW5kaWYKKworI2lmZGVmIF9fRU1YX18KKyMgZGVmaW5lICAgIGdldGN3ZCAgX2dldGN3ZDIKKyMgZGVmaW5lICAgIGNoZGlyICAgX2NoZGlyMgorIyB1bmRlZgkgICAgQ0hFQ0tfSU5PREUKKyNlbmRpZgorCisjaWZkZWYgQU1JR0EKKyMgaW5jbHVkZSAib3NfYW1pZ2EuaCIKKyNlbmRpZgorCisjaWZkZWYgTVNET1MKKyMgaW5jbHVkZSAib3NfbXNkb3MuaCIKKyNlbmRpZgorCisjaWZkZWYgV0lOMTYKKyMgaW5jbHVkZSAib3Nfd2luMTYuaCIKKyNlbmRpZgorCisjaWZkZWYgV0lOMzI2NAorIyBpbmNsdWRlICJvc193aW4zMi5oIgorI2VuZGlmCisKKyNpZmRlZiBfX01JTlRfXworIyBpbmNsdWRlICJvc19taW50LmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUFDT1MpCisjIGlmIGRlZmluZWQoX19NUkNfXykgfHwgZGVmaW5lZChfX1NDX18pIC8qIE1QVyBDb21waWxlcnMgKi8KKyMgIGRlZmluZSBIQVZFX1NFVEVOVgorIyBlbmRpZgorIyBpbmNsdWRlICJvc19tYWMuaCIKKyNlbmRpZgorCisjaWZkZWYgUklTQ09TCisjIGluY2x1ZGUgIm9zX3Jpc2Nvcy5oIgorI2VuZGlmCisKKyNpZmRlZiBfX1FOWF9fCisjIGluY2x1ZGUgIm9zX3FueC5oIgorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1NVTl9XT1JLU0hPUAorIyBpbmNsdWRlICJ3b3Jrc2hvcC5oIgorI2VuZGlmCisKKyNpZmRlZiBYX0xPQ0FMRQorIyBpbmNsdWRlIDxYMTEvWGxvY2FsZS5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9MT0NBTEVfSAorIyAgaW5jbHVkZSA8bG9jYWxlLmg+CisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIE1heGltdW0gbGVuZ3RoIG9mIGEgcGF0aCAoZm9yIG5vbi11bml4IHN5c3RlbXMpIE1ha2UgaXQgYSBiaXQgbG9uZywgdG8gc3RheQorICogb24gdGhlIHNhZmUgc2lkZS4gIEJ1dCBub3QgdG9vIGxvbmcgdG8gcHV0IG9uIHRoZSBzdGFjay4KKyAqLworI2lmbmRlZiBNQVhQQVRITAorIyBpZmRlZiBNQVhQQVRITEVOCisjICBkZWZpbmUgTUFYUEFUSEwgIE1BWFBBVEhMRU4KKyMgZWxzZQorIyAgZGVmaW5lIE1BWFBBVEhMICAyNTYKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorIyBkZWZpbmUgUEFUSF9FU0NfQ0hBUlMgKChjaGFyX3UgKikiICo/W3tgJSMiKQorI2Vsc2UKKyMgaWZkZWYgQ09MT05fQVNfUEFUSFNFUAorIyAgZGVmaW5lIFBBVEhfRVNDX0NIQVJTICgoY2hhcl91ICopIiAqP1t7YCQlIy8iKQorIyBlbHNlCisjICBkZWZpbmUgUEFUSF9FU0NfQ0hBUlMgKChjaGFyX3UgKikiICo/W3tgJFxcJSMnXCJ8IikKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIE5VTUJVRkxFTiAzMAkgICAgLyogbGVuZ3RoIG9mIGEgYnVmZmVyIHRvIHN0b3JlIGEgbnVtYmVyIGluIEFTQ0lJICovCisKKy8qCisgKiBTaG9ydGhhbmQgZm9yIHVuc2lnbmVkIHZhcmlhYmxlcy4gTWFueSBzeXN0ZW1zLCBidXQgbm90IGFsbCwgaGF2ZSB1X2NoYXIKKyAqIGFscmVhZHkgZGVmaW5lZCwgc28gd2UgdXNlIGNoYXJfdSB0byBhdm9pZCB0cm91YmxlLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJY2hhcl91OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlzaG9ydF91OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJaW50X3U7CisvKiBNYWtlIHN1cmUgbG9uZ191IGlzIGJpZyBlbm91Z2ggdG8gaG9sZCBhIHBvaW50ZXIuICBPbiBXaW42NCBsb25ncyBhcmUgMzIKKyAqIGJpdCBhbmQgcG9pbnRlcnMgNjQgYml0LiAqLworI2lmZGVmIF9XSU42NAordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IGxvbmdfdTsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJbG9uZ191OworI2VuZGlmCisKKy8qCisgKiBUaGUgY2hhcmFjdGVycyBhbmQgYXR0cmlidXRlcyBjYWNoZWQgZm9yIHRoZSBzY3JlZW4uCisgKiBDdXJyZW50bHkgYSBzaW5nbGUgYnl0ZS4gIFRoZSBhdHRyaWJ1dGVzIG1heSBiZWNvbWUgbGFyZ2VyIHNvbWUgZGF5LgorICovCisjZGVmaW5lIHNjaGFyX1QJY2hhcl91CisjZGVmaW5lIHNhdHRyX1QJY2hhcl91CisKKy8qCisgKiBUaGUgdThjaGFyX1QgY2FuIGhvbGQgb25lIGRlY29kZWQgVVRGLTggY2hhcmFjdGVyLgorICogVmltIGFsd2F5cyB1c2UgYW4gaW50ICgzMiBiaXRzKSBmb3IgY2hhcmFjdGVycyBtb3N0IHBsYWNlcywgc28gdGhhdCB3ZSBjYW4KKyAqIGhhbmRsZSAzMiBiaXQgY2hhcmFjdGVycyBpbiB0aGUgZmlsZS4gIHU4Y2hhcl9UIGlzIG9ubHkgdXNlZCBmb3IKKyAqIGRpc3BsYXlpbmcuICBUaGF0IHNob3VsZCBiZSBlbm91Z2gsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZm9udCBmb3IgPiAxNiBiaXRzLgorICovCisjaWZkZWYgRkVBVF9NQllURQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1OGNoYXJfVDsKKyNlbmRpZgorCisjaWZuZGVmIFVOSVgJCSAgICAvKiBGb3IgVW5peCB0aGlzIGlzIGluY2x1ZGVkIGluIG9zX3VuaXguaCAqLworIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxjdHlwZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhc2NpaS5oIgorI2luY2x1ZGUgImtleW1hcC5oIgorI2luY2x1ZGUgInRlcm0uaCIKKyNpbmNsdWRlICJtYWNyb3MuaCIKKworI2lmZGVmIExBVFRJQ0UKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZmRlZiBfRENDCisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE1TV0lOKQorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisKKy8qCisgKiBBbGxvdyBvdGhlciAobm9uLXVuaXgpIHN5c3RlbXMgdG8gY29uZmlndXJlIHRoZW1zZWx2ZXMgbm93CisgKiBUaGVzZSBhcmUgYWxzbyBpbiBvc191bml4LmgsIGJlY2F1c2Ugb3NkZWYuc2ggbmVlZHMgdGhlbSB0aGVyZS4KKyAqLworI2lmbmRlZiBVTklYCisvKiBOb3RlOiBTb21lIHN5c3RlbXMgbmVlZCBib3RoIHN0cmluZy5oIGFuZCBzdHJpbmdzLmggKFNhdmFnZSkuICBJZiB0aGUKKyAqIHN5c3RlbSBjYW4ndCBoYW5kbGUgdGhpcywgZGVmaW5lIE5PX1NUUklOR1NfV0lUSF9TVFJJTkdfSC4gKi8KKyMgaWZkZWYgSEFWRV9TVFJJTkdfSAorIyAgaW5jbHVkZSA8c3RyaW5nLmg+CisjIGVuZGlmCisjIGlmIGRlZmluZWQoSEFWRV9TVFJJTkdTX0gpICYmICFkZWZpbmVkKE5PX1NUUklOR1NfV0lUSF9TVFJJTkdfSCkKKyMgICBpbmNsdWRlIDxzdHJpbmdzLmg+CisjIGVuZGlmCisjIGlmZGVmIEhBVkVfU1RBVF9ICisjICBpbmNsdWRlIDxzdGF0Lmg+CisjIGVuZGlmCisjIGlmZGVmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBlbmRpZgorI2VuZGlmIC8qIE5PTi1VTklYICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworLyogPT09PT09PT09PT09PT09PSBlbmQgb2YgdGhlIGhlYWRlciBmaWxlIHB1enpsZSA9PT09PT09PT09PT09PT0gKi8KKworLyoKKyAqIEZvciBkeW5hbWljYWxseSBsb2FkZWQgaW1tIGxpYnJhcnkuIEN1cnJlbnRseSwgb25seSBmb3IgV2luMzIuCisgKi8KKyNpZmRlZiBEWU5BTUlDX0lNRQorIyBpZm5kZWYgRkVBVF9NQllURV9JTUUKKyMgIGRlZmluZSBGRUFUX01CWVRFX0lNRQorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBDaGVjayBpbnB1dCBtZXRob2QgY29udHJvbC4KKyAqLworI2lmIGRlZmluZWQoRkVBVF9YSU0pIHx8IFwKKyAgICAoZGVmaW5lZChGRUFUX0dVSSkgJiYgKGRlZmluZWQoRkVBVF9NQllURV9JTUUpIHx8IGRlZmluZWQoR0xPQkFMX0lNRSkpKQorIyBkZWZpbmUgVVNFX0lNX0NPTlRST0wKKyNlbmRpZgorCisvKgorICogRm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBnZXR0ZXh0IGxpYnJhcnkuICBDdXJyZW50bHksIG9ubHkgZm9yIFdpbjMyLgorICovCisjaWZkZWYgRFlOQU1JQ19HRVRURVhUCisjIGlmbmRlZiBGRUFUX0dFVFRFWFQKKyMgIGRlZmluZSBGRUFUX0dFVFRFWFQKKyMgZW5kaWYKKy8qIFRoZXNlIGFyZSBpbiBvc193aW4zMi5jICovCitleHRlcm4gY2hhciogKCpkeW5fbGliaW50bF9nZXR0ZXh0KShjb25zdCBjaGFyKiBtc2dpZCk7CitleHRlcm4gY2hhciogKCpkeW5fbGliaW50bF9iaW5kdGV4dGRvbWFpbikoY29uc3QgY2hhciogZG9tYWlubmFtZSwgY29uc3QgY2hhciogZGlybmFtZSk7CitleHRlcm4gY2hhciogKCpkeW5fbGliaW50bF90ZXh0ZG9tYWluKShjb25zdCBjaGFyKiBkb21haW5uYW1lKTsKKyNlbmRpZgorCisKKy8qCisgKiBUaGUgXygpIHN0dWZmIGlzIGZvciB1c2luZyBnZXR0ZXh0KCkuICBJdCBpcyBhIG5vLW9wIHdoZW4gbGliaW50bC5oIGlzIG5vdAorICogZm91bmQgb3IgdGhlICttdWx0aWxhbmcgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKyAqLworI2lmZGVmIEZFQVRfR0VUVEVYVAorIyBpZmRlZiBEWU5BTUlDX0dFVFRFWFQKKyMgIGRlZmluZSBfKHgpICgqZHluX2xpYmludGxfZ2V0dGV4dCkoKGNoYXIgKikoeCkpCisjICBkZWZpbmUgTl8oeCkgeAorIyAgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKGRvbWFpbixkaXIpICgqZHluX2xpYmludGxfYmluZHRleHRkb21haW4pKGRvbWFpbixkaXIpCisjICBkZWZpbmUgdGV4dGRvbWFpbihkb21haW4pICgqZHluX2xpYmludGxfdGV4dGRvbWFpbikoZG9tYWluKQorIyBlbHNlCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyh4KSBnZXR0ZXh0KChjaGFyICopKHgpKQorIyAgaWZkZWYgZ2V0dGV4dF9ub29wCisjICAgZGVmaW5lIE5fKHgpIGdldHRleHRfbm9vcCh4KQorIyAgZWxzZQorIyAgIGRlZmluZSBOXyh4KSB4CisjICBlbmRpZgorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF8oeCkgKChjaGFyICopKHgpKQorIyBkZWZpbmUgTl8oeCkgeAorIyBpZmRlZiBiaW5kdGV4dGRvbWFpbgorIyAgdW5kZWYgYmluZHRleHRkb21haW4KKyMgZW5kaWYKKyMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKHgsIHkpIC8qIGVtcHR5ICovCisjIGlmZGVmIHRleHRkb21haW4KKyMgIHVuZGVmIHRleHRkb21haW4KKyMgZW5kaWYKKyMgZGVmaW5lIHRleHRkb21haW4oeCkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKgorICogZmxhZ3MgZm9yIHVwZGF0ZV9zY3JlZW4oKQorICogVGhlIGhpZ2hlciB0aGUgdmFsdWUsIHRoZSBoaWdoZXIgdGhlIHByaW9yaXR5CisgKi8KKyNkZWZpbmUgVkFMSUQJCQkxMCAgLyogYnVmZmVyIG5vdCBjaGFuZ2VkLCBvciBjaGFuZ2VzIG1hcmtlZAorCQkJCSAgICAgICB3aXRoIGJfbW9kXyogKi8KKyNkZWZpbmUgSU5WRVJURUQJCTIwICAvKiByZWRpc3BsYXkgaW52ZXJ0ZWQgcGFydCB0aGF0IGNoYW5nZWQgKi8KKyNkZWZpbmUgSU5WRVJURURfQUxMCQkyNSAgLyogcmVkaXNwbGF5IHdob2xlIGludmVydGVkIHBhcnQgKi8KKyNkZWZpbmUgUkVEUkFXX1RPUAkJMzAgIC8qIGRpc3BsYXkgZmlyc3Qgd191cGRfcm93cyBzY3JlZW4gbGluZXMgKi8KKyNkZWZpbmUgTk9UX1ZBTElECQk0MCAgLyogYnVmZmVyIG5lZWRzIGNvbXBsZXRlIHJlZHJhdyAqLworI2RlZmluZSBDTEVBUgkJCTUwICAvKiBzY3JlZW4gbWVzc2VkIHVwLCBjbGVhciBpdCAqLworCisvKgorICogSGludHMgdXNlZCB0byBvcHRpbWl6ZSBzY3JlZW4gdXBkYXRpbmcuCisgKi8KKyNkZWZpbmUgSElOVF9OT05FCTAJICAgIC8qIG5vIGN1cnJlbnQgaGludCAqLworI2RlZmluZSBISU5UX0RFTF9DSEFSCTEJICAgIC8qIGRlbGV0ZSBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgSElOVF9JTlNfQ0hBUgkyCSAgICAvKiBpbnNlcnQgY2hhcmFjdGVyICovCisKKy8qCisgKiBGbGFncyBmb3Igd192YWxpZC4KKyAqIFRoZXNlIGFyZSBzZXQgd2hlbiBzb21ldGhpbmcgaW4gYSB3aW5kb3cgc3RydWN0dXJlIGJlY29tZXMgaW52YWxpZCwgZXhjZXB0CisgKiB3aGVuIHRoZSBjdXJzb3IgaXMgbW92ZWQuICBDYWxsIGNoZWNrX2N1cnNvcl9tb3ZlZCgpIGJlZm9yZSB0ZXN0aW5nIG9uZSBvZgorICogdGhlIGZsYWdzLgorICogVGhlc2UgYXJlIHJlc2V0IHdoZW4gdGhhdCB0aGluZyBoYXMgYmVlbiB1cGRhdGVkIGFuZCBpcyB2YWxpZCBhZ2Fpbi4KKyAqCisgKiBFdmVyeSBmdW5jdGlvbiB0aGF0IGludmFsaWRhdGVzIG9uZSBvZiB0aGVzZSBtdXN0IGNhbGwgb25lIG9mIHRoZQorICogaW52YWxpZGF0ZV8qIGZ1bmN0aW9ucy4KKyAqCisgKiB3X3ZhbGlkIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgb25seSBpbiBzY3JlZW4uYy4gIEZyb20gb3RoZXIgZmlsZXMsIHVzZSB0aGUKKyAqIGZ1bmN0aW9ucyB0aGF0IHNldCBvciByZXNldCB0aGUgZmxhZ3MuCisgKgorICogVkFMSURfQk9UTElORSAgICBWQUxJRF9CT1RMSU5FX0FQCisgKiAgICAgb24JCW9uCQl3X2JvdGxpbmUgdmFsaWQKKyAqICAgICBvZmYJCW9uCQl3X2JvdGxpbmUgYXBwcm94aW1hdGVkCisgKiAgICAgb2ZmCQlvZmYJCXdfYm90bGluZSBub3QgdmFsaWQKKyAqICAgICBvbgkJb2ZmCQlub3QgcG9zc2libGUKKyAqLworI2RlZmluZSBWQUxJRF9XUk9XCTB4MDEJLyogd193cm93ICh3aW5kb3cgcm93KSBpcyB2YWxpZCAqLworI2RlZmluZSBWQUxJRF9XQ09MCTB4MDIJLyogd193Y29sICh3aW5kb3cgY29sKSBpcyB2YWxpZCAqLworI2RlZmluZSBWQUxJRF9WSVJUQ09MCTB4MDQJLyogd192aXJ0Y29sIChmaWxlIGNvbCkgaXMgdmFsaWQgKi8KKyNkZWZpbmUgVkFMSURfQ0hFSUdIVAkweDA4CS8qIHdfY2xpbmVfaGVpZ2h0IGFuZCB3X2NsaW5lX2ZvbGRlZCB2YWxpZCAqLworI2RlZmluZSBWQUxJRF9DUk9XCTB4MTAJLyogd19jbGluZV9yb3cgaXMgdmFsaWQgKi8KKyNkZWZpbmUgVkFMSURfQk9UTElORQkweDIwCS8qIHdfYm90aW5lIGFuZCB3X2VtcHR5X3Jvd3MgYXJlIHZhbGlkICovCisjZGVmaW5lIFZBTElEX0JPVExJTkVfQVAgMHg0MAkvKiB3X2JvdGluZSBpcyBhcHByb3hpbWF0ZWQgKi8KKyNkZWZpbmUgVkFMSURfVE9QTElORQkweDgwCS8qIHdfdG9wbGluZSBpcyB2YWxpZCAoZm9yIGN1cnNvciBwb3NpdGlvbikgKi8KKworLyoKKyAqIFRlcm1pbmFsIGhpZ2hsaWdodGluZyBhdHRyaWJ1dGUgYml0cy4KKyAqIEF0dGlidXRlcyBhYm92ZSBITF9BTEwgYXJlIHVzZWQgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcuCisgKi8KKyNkZWZpbmUgSExfTk9STUFMCQkweDAwCisjZGVmaW5lIEhMX0lOVkVSU0UJCTB4MDEKKyNkZWZpbmUgSExfQk9MRAkJCTB4MDIKKyNkZWZpbmUgSExfSVRBTElDCQkweDA0CisjZGVmaW5lIEhMX1VOREVSTElORQkJMHgwOAorI2RlZmluZSBITF9TVEFORE9VVAkJMHgxMAorI2RlZmluZSBITF9BTEwJCQkweDFmCisKKy8qIHNwZWNpYWwgYXR0cmlidXRlIGFkZGl0aW9uOiBQdXQgbWVzc2FnZSBpbiBoaXN0b3J5ICovCisjZGVmaW5lIE1TR19ISVNUCQkweDEwMDAKKworLyoKKyAqIHZhbHVlcyBmb3IgU3RhdGUKKyAqCisgKiBUaGUgbG93ZXIgYml0cyB1cCB0byAweDIwIGFyZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbC92aXN1YWwvb3BfcGVuZGluZworICogYW5kIGNtZGxpbmUvaW5zZXJ0K3JlcGxhY2UgbW9kZS4gIFRoaXMgaXMgdXNlZCBmb3IgbWFwcGluZy4gIElmIG5vbmUgb2YKKyAqIHRoZXNlIGJpdHMgYXJlIHNldCwgbm8gbWFwcGluZyBpcyBkb25lLgorICogVGhlIHVwcGVyIGJpdHMgYXJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBvdGhlciBzdGF0ZXMuCisgKi8KKyNkZWZpbmUgTk9STUFMCQkweDAxCS8qIE5vcm1hbCBtb2RlLCBjb21tYW5kIGV4cGVjdGVkICovCisjZGVmaW5lIFZJU1VBTAkJMHgwMgkvKiBWaXN1YWwgbW9kZSAtIHVzZSBnZXRfcmVhbF9zdGF0ZSgpICovCisjZGVmaW5lIE9QX1BFTkRJTkcJMHgwNAkvKiBOb3JtYWwgbW9kZSwgb3BlcmF0b3IgaXMgcGVuZGluZyAtIHVzZQorCQkJCSAgIGdldF9yZWFsX3N0YXRlKCkgKi8KKyNkZWZpbmUgQ01ETElORQkJMHgwOAkvKiBFZGl0aW5nIGNvbW1hbmQgbGluZSAqLworI2RlZmluZSBJTlNFUlQJCTB4MTAJLyogSW5zZXJ0IG1vZGUgKi8KKyNkZWZpbmUgTEFOR01BUAkJMHgyMAkvKiBMYW5ndWFnZSBtYXBwaW5nLCBjYW4gYmUgY29tYmluZWQgd2l0aAorCQkJCSAgIElOU0VSVCBhbmQgQ01ETElORSAqLworI2RlZmluZSBNQVBfQUxMX01PREVTCTB4M2YJLyogYWxsIG1vZGUgYml0cyB1c2VkIGZvciBtYXBwaW5nICovCisKKyNkZWZpbmUgUkVQTEFDRV9GTEFHCTB4NDAJLyogUmVwbGFjZSBtb2RlIGZsYWcgKi8KKyNkZWZpbmUgUkVQTEFDRQkJKFJFUExBQ0VfRkxBRyArIElOU0VSVCkKKyNpZmRlZiBGRUFUX1ZSRVBMQUNFCisjIGRlZmluZSBWUkVQTEFDRV9GTEFHCTB4ODAJLyogVmlydHVhbC1yZXBsYWNlIG1vZGUgZmxhZyAqLworIyBkZWZpbmUgVlJFUExBQ0UJKFJFUExBQ0VfRkxBRyArIFZSRVBMQUNFX0ZMQUcgKyBJTlNFUlQpCisjZW5kaWYKKyNkZWZpbmUgTFJFUExBQ0UJKFJFUExBQ0VfRkxBRyArIExBTkdNQVApCisKKyNkZWZpbmUgTk9STUFMX0JVU1kJKDB4MTAwICsgTk9STUFMKSAvKiBOb3JtYWwgbW9kZSwgYnVzeSB3aXRoIGEgY29tbWFuZCAqLworI2RlZmluZSBISVRSRVRVUk4JKDB4MjAwICsgTk9STUFMKSAvKiB3YWl0aW5nIGZvciByZXR1cm4gb3IgY29tbWFuZCAqLworI2RlZmluZSBBU0tNT1JFCQkweDMwMAkvKiBBc2tpbmcgaWYgeW91IHdhbnQgLS1tb3JlLS0gKi8KKyNkZWZpbmUgU0VUV1NJWkUJMHg0MDAJLyogd2luZG93IHNpemUgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUgQUJCUkVWCQkweDUwMAkvKiBhYmJyZXZpYXRpb24gaW5zdGVhZCBvZiBtYXBwaW5nICovCisjZGVmaW5lIEVYVEVSTkNNRAkweDYwMAkvKiBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCAqLworI2RlZmluZSBTSE9XTUFUQ0gJKDB4NzAwICsgSU5TRVJUKSAvKiBzaG93IG1hdGNoaW5nIHBhcmVuICovCisjZGVmaW5lIENPTkZJUk0JCTB4ODAwCS8qICI6Y29uZmlybSIgcHJvbXB0ICovCisKKy8qIGRpcmVjdGlvbnMgKi8KKyNkZWZpbmUgRk9SV0FSRAkJCTEKKyNkZWZpbmUgQkFDS1dBUkQJCSgtMSkKKyNkZWZpbmUgRk9SV0FSRF9GSUxFCQkzCisjZGVmaW5lIEJBQ0tXQVJEX0ZJTEUJCSgtMykKKworLyogcmV0dXJuIHZhbHVlcyBmb3IgZnVuY3Rpb25zICovCisjaWYgIShkZWZpbmVkKE9LKSAmJiAoT0sgPT0gMSkpCisvKiBPSyBhbHJlYWR5IGRlZmluZWQgdG8gMSBpbiBNYWNPUyBYIGN1cnNlcywgc2tpcCB0aGlzICovCisjIGRlZmluZSBPSwkJCTEKKyNlbmRpZgorI2RlZmluZSBGQUlMCQkJMAorCisvKiBmbGFncyBmb3IgYl9mbGFncyAqLworI2RlZmluZSBCRl9SRUNPVkVSRUQJMHgwMQkvKiBidWZmZXIgaGFzIGJlZW4gcmVjb3ZlcmVkICovCisjZGVmaW5lIEJGX0NIRUNLX1JPCTB4MDIJLyogbmVlZCB0byBjaGVjayByZWFkb25seSB3aGVuIGxvYWRpbmcgZmlsZQorCQkJCSAgIGludG8gYnVmZmVyIChzZXQgYnkgIjplIiwgbWF5IGJlIHJlc2V0IGJ5CisJCQkJICAgIjpidWYiICovCisjZGVmaW5lIEJGX05FVkVSTE9BREVECTB4MDQJLyogZmlsZSBoYXMgbmV2ZXIgYmVlbiBsb2FkZWQgaW50byBidWZmZXIsCisJCQkJICAgbWFueSB2YXJpYWJsZXMgc3RpbGwgbmVlZCB0byBiZSBzZXQgKi8KKyNkZWZpbmUgQkZfTk9URURJVEVECTB4MDgJLyogU2V0IHdoZW4gZmlsZSBuYW1lIGlzIGNoYW5nZWQgYWZ0ZXIKKwkJCQkgICBzdGFydGluZyB0byBlZGl0LCByZXNldCB3aGVuIGZpbGUgaXMKKwkJCQkgICB3cml0dGVuIG91dC4gKi8KKyNkZWZpbmUgQkZfTkVXCQkweDEwCS8qIGZpbGUgZGlkbid0IGV4aXN0IHdoZW4gZWRpdGluZyBzdGFydGVkICovCisjZGVmaW5lIEJGX05FV19XCTB4MjAJLyogV2FybmVkIGZvciBCRl9ORVcgYW5kIGZpbGUgY3JlYXRlZCAqLworI2RlZmluZSBCRl9SRUFERVJSCTB4NDAJLyogZ290IGVycm9ycyB3aGlsZSByZWFkaW5nIHRoZSBmaWxlICovCisKKy8qIE1hc2sgdG8gY2hlY2sgZm9yIGZsYWdzIHRoYXQgcHJldmVudCBub3JtYWwgd3JpdGluZyAqLworI2RlZmluZSBCRl9XUklURV9NQVNLCShCRl9OT1RFRElURUQgKyBCRl9ORVcgKyBCRl9SRUFERVJSKQorCisvKgorICogdmFsdWVzIGZvciB4cF9jb250ZXh0IHdoZW4gZG9pbmcgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24KKyAqLworI2RlZmluZSBDT05URVhUX1VOS05PV04JCSgtMykKKyNkZWZpbmUgRVhQQU5EX1VOU1VDQ0VTU0ZVTAkoLTIpCisjZGVmaW5lIEVYUEFORF9PSwkJKC0xKQorI2RlZmluZSBFWFBBTkRfTk9USElORwkJMAorI2RlZmluZSBFWFBBTkRfQ09NTUFORFMJCTEKKyNkZWZpbmUgRVhQQU5EX0ZJTEVTCQkyCisjZGVmaW5lIEVYUEFORF9ESVJFQ1RPUklFUwkzCisjZGVmaW5lIEVYUEFORF9TRVRUSU5HUwkJNAorI2RlZmluZSBFWFBBTkRfQk9PTF9TRVRUSU5HUwk1CisjZGVmaW5lIEVYUEFORF9UQUdTCQk2CisjZGVmaW5lIEVYUEFORF9PTERfU0VUVElORwk3CisjZGVmaW5lIEVYUEFORF9IRUxQCQk4CisjZGVmaW5lIEVYUEFORF9CVUZGRVJTCQk5CisjZGVmaW5lIEVYUEFORF9FVkVOVFMJCTEwCisjZGVmaW5lIEVYUEFORF9NRU5VUwkJMTEKKyNkZWZpbmUgRVhQQU5EX1NZTlRBWAkJMTIKKyNkZWZpbmUgRVhQQU5EX0hJR0hMSUdIVAkxMworI2RlZmluZSBFWFBBTkRfQVVHUk9VUAkJMTQKKyNkZWZpbmUgRVhQQU5EX1VTRVJfVkFSUwkxNQorI2RlZmluZSBFWFBBTkRfTUFQUElOR1MJCTE2CisjZGVmaW5lIEVYUEFORF9UQUdTX0xJU1RGSUxFUwkxNworI2RlZmluZSBFWFBBTkRfRlVOQ1RJT05TCTE4CisjZGVmaW5lIEVYUEFORF9VU0VSX0ZVTkMJMTkKKyNkZWZpbmUgRVhQQU5EX0VYUFJFU1NJT04JMjAKKyNkZWZpbmUgRVhQQU5EX01FTlVOQU1FUwkyMQorI2RlZmluZSBFWFBBTkRfVVNFUl9DT01NQU5EUwkyMgorI2RlZmluZSBFWFBBTkRfVVNFUl9DTURfRkxBR1MJMjMKKyNkZWZpbmUgRVhQQU5EX1VTRVJfTkFSR1MJMjQKKyNkZWZpbmUgRVhQQU5EX1VTRVJfQ09NUExFVEUJMjUKKyNkZWZpbmUgRVhQQU5EX0VOVl9WQVJTCQkyNgorI2RlZmluZSBFWFBBTkRfTEFOR1VBR0UJCTI3CisjZGVmaW5lIEVYUEFORF9DT0xPUlMJCTI4CisjZGVmaW5lIEVYUEFORF9DT01QSUxFUgkJMjkKKyNkZWZpbmUgRVhQQU5EX1VTRVJfREVGSU5FRAkzMAorCisvKiBWYWx1ZXMgZm9yIGV4bW9kZV9hY3RpdmUgKDAgaXMgbm8gZXhtb2RlKSAqLworI2RlZmluZSBFWE1PREVfTk9STUFMCQkxCisjZGVmaW5lIEVYTU9ERV9WSU0JCTIKKworLyogVmFsdWVzIGZvciBuZXh0d2lsZCgpIGFuZCBFeHBhbmRPbmUoKS4gIFNlZSBFeHBhbmRPbmUoKSBmb3IgbWVhbmluZy4gKi8KKyNkZWZpbmUgV0lMRF9GUkVFCQkxCisjZGVmaW5lIFdJTERfRVhQQU5EX0ZSRUUJMgorI2RlZmluZSBXSUxEX0VYUEFORF9LRUVQCTMKKyNkZWZpbmUgV0lMRF9ORVhUCQk0CisjZGVmaW5lIFdJTERfUFJFVgkJNQorI2RlZmluZSBXSUxEX0FMTAkJNgorI2RlZmluZSBXSUxEX0xPTkdFU1QJCTcKKworI2RlZmluZSBXSUxEX0xJU1RfTk9URk9VTkQJMQorI2RlZmluZSBXSUxEX0hPTUVfUkVQTEFDRQkyCisjZGVmaW5lIFdJTERfVVNFX05MCQk0CisjZGVmaW5lIFdJTERfTk9fQkVFUAkJOAorI2RlZmluZSBXSUxEX0FERF9TTEFTSAkJMTYKKyNkZWZpbmUgV0lMRF9LRUVQX0FMTAkJMzIKKyNkZWZpbmUgV0lMRF9TSUxFTlQJCTY0CisjZGVmaW5lIFdJTERfRVNDQVBFCQkxMjgKKworLyogRmxhZ3MgZm9yIGV4cGFuZF93aWxkY2FyZHMoKSAqLworI2RlZmluZSBFV19ESVIJCTEJLyogaW5jbHVkZSBkaXJlY3RvcnkgbmFtZXMgKi8KKyNkZWZpbmUgRVdfRklMRQkJMgkvKiBpbmNsdWRlIGZpbGUgbmFtZXMgKi8KKyNkZWZpbmUgRVdfTk9URk9VTkQJNAkvKiBpbmNsdWRlIG5vdCBmb3VuZCBuYW1lcyAqLworI2RlZmluZSBFV19BRERTTEFTSAk4CS8qIGFwcGVuZCBzbGFzaCB0byBkaXJlY3RvcnkgbmFtZSAqLworI2RlZmluZSBFV19LRUVQQUxMCTE2CS8qIGtlZXAgYWxsIG1hdGNoZXMgKi8KKyNkZWZpbmUgRVdfU0lMRU5UCTMyCS8qIGRvbid0IHByaW50ICIxIHJldHVybmVkIiBmcm9tIHNoZWxsICovCisvKiBOb3RlOiBtb3N0bHkgRVdfTk9URk9VTkQgYW5kIEVXX1NJTEVOVCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOiBFV19OT1RGT1VORAorICogaXMgdXNlZCB3aGVuIGV4ZWN1dGluZyBjb21tYW5kcyBhbmQgRVdfU0lMRU5UIGZvciBpbnRlcmFjdGl2ZSBleHBhbmRpbmcuICovCisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorIyBkZWZpbmUgV19XSU5DT0wod3ApCSh3cC0+d193aW5jb2wpCisjIGRlZmluZSBXX1dJRFRIKHdwKQkod3AtPndfd2lkdGgpCisjIGRlZmluZSBXX0VORENPTCh3cCkJKHdwLT53X3dpbmNvbCArIHdwLT53X3dpZHRoKQorIyBkZWZpbmUgV19WU0VQX1dJRFRIKHdwKSAod3AtPndfdnNlcF93aWR0aCkKKyNlbHNlCisjIGRlZmluZSBXX1dJTkNPTCh3cCkJMAorIyBkZWZpbmUgV19XSURUSCh3cCkJQ29sdW1ucworIyBkZWZpbmUgV19FTkRDT0wod3ApCUNvbHVtbnMKKyMgZGVmaW5lIFdfVlNFUF9XSURUSCh3cCkgMAorI2VuZGlmCisjaWZkZWYgRkVBVF9XSU5ET1dTCisjIGRlZmluZSBXX1NUQVRVU19IRUlHSFQod3ApICh3cC0+d19zdGF0dXNfaGVpZ2h0KQorIyBkZWZpbmUgV19XSU5ST1cod3ApCSh3cC0+d193aW5yb3cpCisjZWxzZQorIyBkZWZpbmUgV19TVEFUVVNfSEVJR0hUKHdwKSAwCisjIGRlZmluZSBXX1dJTlJPVyh3cCkJMAorI2VuZGlmCisKKyNpZmRlZiBOT19FWFBBTkRQQVRICisjIGRlZmluZSBnZW5fZXhwYW5kX3dpbGRjYXJkcyBtY2hfZXhwYW5kX3dpbGRjYXJkcworI2VuZGlmCisKKy8qIFZhbHVlcyBmb3IgdGhlIGZpbmRfcGF0dGVybl9pbl9wYXRoKCkgZnVuY3Rpb24gYXJncyAndHlwZScgYW5kICdhY3Rpb24nOiAqLworI2RlZmluZSBGSU5EX0FOWQkxCisjZGVmaW5lIEZJTkRfREVGSU5FCTIKKyNkZWZpbmUgQ0hFQ0tfUEFUSAkzCisKKyNkZWZpbmUgQUNUSU9OX1NIT1cJMQorI2RlZmluZSBBQ1RJT05fR09UTwkyCisjZGVmaW5lIEFDVElPTl9TUExJVAkzCisjZGVmaW5lIEFDVElPTl9TSE9XX0FMTAk0CisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisjIGRlZmluZSBBQ1RJT05fRVhQQU5ECTUKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9TWU5fSEwKKyMgZGVmaW5lIFNTVF9NSU5fRU5UUklFUyAxNTAJLyogbWluaW1hbCBzaXplIGZvciBzdGF0ZSBzdGFjayBhcnJheSAqLworIyBpZmRlZiBGRUFUX0dVSV9XMTYKKyMgIGRlZmluZSBTU1RfTUFYX0VOVFJJRVMgNTAwCS8qIChvbmx5IHVwIHRvIDY0SyBibG9ja3MpICovCisjIGVsc2UKKyMgIGRlZmluZSBTU1RfTUFYX0VOVFJJRVMgMTAwMAkvKiBtYXhpbWFsIHNpemUgZm9yIHN0YXRlIHN0YWNrIGFycmF5ICovCisjIGVuZGlmCisjIGRlZmluZSBTU1RfRklYX1NUQVRFUwkgNwkvKiBzaXplIG9mIHNzdF9zdGFja1tdLiAqLworIyBkZWZpbmUgU1NUX0RJU1QJIDE2CS8qIG5vcm1hbCBkaXN0YW5jZSBiZXR3ZWVuIGVudHJpZXMgKi8KKyMgZGVmaW5lIFNTVF9JTlZBTElECShzeW5zdGF0ZV9UICopLTEJLyogaW52YWxpZCBzeW5fc3RhdGUgcG9pbnRlciAqLworI2VuZGlmCisKKy8qIFZhbHVlcyBmb3IgJ29wdGlvbnMnIGFyZ3VtZW50IGluIGRvX3NlYXJjaCgpIGFuZCBzZWFyY2hpdCgpICovCisjZGVmaW5lIFNFQVJDSF9SRVYgICAgMHgwMSAgLyogZ28gaW4gcmV2ZXJzZSBvZiBwcmV2aW91cyBkaXIuICovCisjZGVmaW5lIFNFQVJDSF9FQ0hPICAgMHgwMiAgLyogZWNobyB0aGUgc2VhcmNoIGNvbW1hbmQgYW5kIGhhbmRsZSBvcHRpb25zICovCisjZGVmaW5lIFNFQVJDSF9NU0cgICAgMHgwYyAgLyogZ2l2ZSBtZXNzYWdlcyAoeWVzLCBpdCdzIG5vdCAweDA0KSAqLworI2RlZmluZSBTRUFSQ0hfTkZNU0cgIDB4MDggIC8qIGdpdmUgYWxsIG1lc3NhZ2VzIGV4Y2VwdCBub3QgZm91bmQgKi8KKyNkZWZpbmUgU0VBUkNIX09QVCAgICAweDEwICAvKiBpbnRlcnByZXQgb3B0aW9uYWwgZmxhZ3MgKi8KKyNkZWZpbmUgU0VBUkNIX0hJUyAgICAweDIwICAvKiBwdXQgc2VhcmNoIHBhdHRlcm4gaW4gaGlzdG9yeSAqLworI2RlZmluZSBTRUFSQ0hfRU5EICAgIDB4NDAgIC8qIHB1dCBjdXJzb3IgYXQgZW5kIG9mIG1hdGNoICovCisjZGVmaW5lIFNFQVJDSF9OT09GICAgMHg4MCAgLyogZG9uJ3QgYWRkIG9mZnNldCB0byBwb3NpdGlvbiAqLworI2RlZmluZSBTRUFSQ0hfU1RBUlQgMHgxMDAgIC8qIHN0YXJ0IHNlYXJjaCB3aXRob3V0IGNvbCBvZmZzZXQgKi8KKyNkZWZpbmUgU0VBUkNIX01BUksgIDB4MjAwICAvKiBzZXQgcHJldmlvdXMgY29udGV4dCBtYXJrICovCisjZGVmaW5lIFNFQVJDSF9LRUVQICAweDQwMCAgLyoga2VlcCBwcmV2aW91cyBzZWFyY2ggcGF0dGVybiAqLworI2RlZmluZSBTRUFSQ0hfUEVFSyAgMHg4MDAgIC8qIHBlZWsgZm9yIHR5cGVkIGNoYXIsIGNhbmNlbCBzZWFyY2ggKi8KKworLyogVmFsdWVzIGZvciBmaW5kX2lkZW50X3VuZGVyX2N1cnNvcigpICovCisjZGVmaW5lIEZJTkRfSURFTlQJMQkvKiBmaW5kIGlkZW50aWZpZXIgKHdvcmQpICovCisjZGVmaW5lIEZJTkRfU1RSSU5HCTIJLyogZmluZCBhbnkgc3RyaW5nIChXT1JEKSAqLworI2RlZmluZSBGSU5EX0VWQUwJNAkvKiBpbmNsdWRlICItPiIsICJbXSIgYW5kICIuIiAqLworCisvKiBWYWx1ZXMgZm9yIGZpbGVfbmFtZV9pbl9saW5lKCkgKi8KKyNkZWZpbmUgRk5BTUVfTUVTUwkxCS8qIGdpdmUgZXJyb3IgbWVzc2FnZSAqLworI2RlZmluZSBGTkFNRV9FWFAJMgkvKiBleHBhbmQgdG8gcGF0aCAqLworI2RlZmluZSBGTkFNRV9IWVAJNAkvKiBjaGVjayBmb3IgaHlwZXJ0ZXh0IGxpbmsgKi8KKyNkZWZpbmUgRk5BTUVfSU5DTAk4CS8qIGFwcGx5ICdpbmNsdWRlZXhwcicgKi8KKyNkZWZpbmUgRk5BTUVfUkVMCTE2CS8qICIuLiIgYW5kICIuLyIgYXJlIHJlbGF0aXZlIHRvIHRoZSAoY3VycmVudCkKKwkJCQkgICBmaWxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICovCisKKy8qIFZhbHVlcyBmb3IgYnVmbGlzdF9nZXRmaWxlKCkgKi8KKyNkZWZpbmUgR0VURl9TRVRNQVJLCTB4MDEJLyogc2V0IHBjbWFyayBiZWZvcmUganVtcGluZyAqLworI2RlZmluZSBHRVRGX0FMVAkweDAyCS8qIGp1bXBpbmcgdG8gYWx0ZXJuYXRlIGZpbGUgKG5vdCBidWYgbnVtKSAqLworI2RlZmluZSBHRVRGX1NXSVRDSAkweDA0CS8qIHJlc3BlY3QgJ3N3aXRjaGJ1Zicgc2V0dGluZ3Mgd2hlbiBqdW1waW5nICovCisKKy8qIFZhbHVlcyBmb3IgYnVmbGlzdF9uZXcoKSBmbGFncyAqLworI2RlZmluZSBCTE5fQ1VSQlVGCTEJLyogTWF5IHJlLXVzZSBjdXJidWYgZm9yIG5ldyBidWZmZXIgKi8KKyNkZWZpbmUgQkxOX0xJU1RFRAkyCS8qIFB1dCBuZXcgYnVmZmVyIGluIGJ1ZmZlciBsaXN0ICovCisjZGVmaW5lIEJMTl9EVU1NWQk0CS8qIEFsbG9jYXRpbmcgZHVtbXkgYnVmZmVyICovCisjZGVmaW5lIEJMTl9GT1JDRQk4CS8qIERvbid0IGFib3J0IG9uIGVycm9yICovCisKKy8qIFZhbHVlcyBmb3IgaW5fY2lua2V5cygpICovCisjZGVmaW5lIEtFWV9PUEVOX0ZPUlcJMHgxMDEKKyNkZWZpbmUgS0VZX09QRU5fQkFDSwkweDEwMgorI2RlZmluZSBLRVlfQ09NUExFVEUJMHgxMDMJLyogZW5kIG9mIGNvbXBsZXRpb24gKi8KKworLyogVmFsdWVzIGZvciAibm9yZW1hcCIgYXJndW1lbnQgb2YgaW5zX3R5cGVidWYoKS4gIEFsc28gdXNlZCBmb3IKKyAqIG1hcC0+bV9ub3JlbWFwIGFuZCBtZW51LT5ub3JlbWFwW10uICovCisjZGVmaW5lIFJFTUFQX1lFUwkwCS8qIGFsbG93IHJlbWFwcGluZyAqLworI2RlZmluZSBSRU1BUF9OT05FCS0xCS8qIG5vIHJlbWFwcGluZyAqLworI2RlZmluZSBSRU1BUF9TQ1JJUFQJLTIJLyogcmVtYXAgc2NyaXB0LWxvY2FsIG1hcHBpbmdzIG9ubHkgKi8KKworLyogVmFsdWVzIGZvciBtY2hfY2FsbF9zaGVsbCgpIHNlY29uZCBhcmd1bWVudCAqLworI2RlZmluZSBTSEVMTF9GSUxURVIJMQkvKiBmaWx0ZXJpbmcgdGV4dCAqLworI2RlZmluZSBTSEVMTF9FWFBBTkQJMgkvKiBleHBhbmRpbmcgd2lsZGNhcmRzICovCisjZGVmaW5lIFNIRUxMX0NPT0tFRAk0CS8qIHNldCB0ZXJtIHRvIGNvb2tlZCBtb2RlICovCisjZGVmaW5lIFNIRUxMX0RPT1VUCTgJLyogcmVkaXJlY3Rpbmcgb3V0cHV0ICovCisjZGVmaW5lIFNIRUxMX1NJTEVOVAkxNgkvKiBkb24ndCBwcmludCBlcnJvciByZXR1cm5lZCBieSBjb21tYW5kICovCisKKy8qIFZhbHVlcyByZXR1cm5lZCBieSBtY2hfbm9kZXR5cGUoKSAqLworI2RlZmluZSBOT0RFX05PUk1BTAkwCS8qIGZpbGUgb3IgZGlyZWN0b3J5LCBjaGVjayB3aXRoIG1jaF9pc2RpcigpKi8KKyNkZWZpbmUgTk9ERV9XUklUQUJMRQkxCS8qIHNvbWV0aGluZyB3ZSBjYW4gd3JpdGUgdG8gKGNoYXJhY3RlcgorCQkJCSAgIGRldmljZSwgZmlmbywgc29ja2V0LCAuLikgKi8KKyNkZWZpbmUgTk9ERV9PVEhFUgkyCS8qIG5vbi13cml0YWJsZSB0aGluZyAoZS5nLiwgYmxvY2sgZGV2aWNlKSAqLworCisvKiBWYWx1ZXMgZm9yIHJlYWRmaWxlKCkgZmxhZ3MgKi8KKyNkZWZpbmUgUkVBRF9ORVcJMHgwMQkvKiByZWFkIGEgZmlsZSBpbnRvIGEgbmV3IGJ1ZmZlciAqLworI2RlZmluZSBSRUFEX0ZJTFRFUgkweDAyCS8qIHJlYWQgZmlsdGVyIG91dHB1dCAqLworI2RlZmluZSBSRUFEX1NURElOCTB4MDQJLyogcmVhZCBmcm9tIHN0ZGluICovCisjZGVmaW5lIFJFQURfQlVGRkVSCTB4MDgJLyogcmVhZCBmcm9tIGN1cmJ1ZiAoY29udmVydGluZyBzdGRpbikgKi8KKyNkZWZpbmUgUkVBRF9EVU1NWQkweDEwCS8qIHJlYWRpbmcgaW50byBhIGR1bW15IGJ1ZmZlciAqLworCisvKiBWYWx1ZXMgZm9yIGNoYW5nZV9pbmRlbnQoKSAqLworI2RlZmluZSBJTkRFTlRfU0VUCTEJLyogc2V0IGluZGVudCAqLworI2RlZmluZSBJTkRFTlRfSU5DCTIJLyogaW5jcmVhc2UgaW5kZW50ICovCisjZGVmaW5lIElOREVOVF9ERUMJMwkvKiBkZWNyZWFzZSBpbmRlbnQgKi8KKworLyogVmFsdWVzIGZvciBmbGFncyBhcmd1bWVudCBmb3IgZmluZG1hdGNobGltaXQoKSAqLworI2RlZmluZSBGTV9CQUNLV0FSRAkweDAxCS8qIHNlYXJjaCBiYWNrd2FyZHMgKi8KKyNkZWZpbmUgRk1fRk9SV0FSRAkweDAyCS8qIHNlYXJjaCBmb3J3YXJkcyAqLworI2RlZmluZSBGTV9CTE9DS1NUT1AJMHgwNAkvKiBzdG9wIGF0IHN0YXJ0L2VuZCBvZiBibG9jayAqLworI2RlZmluZSBGTV9TS0lQQ09NTQkweDA4CS8qIHNraXAgY29tbWVudHMgKi8KKworLyogVmFsdWVzIGZvciBhY3Rpb24gYXJndW1lbnQgZm9yIGRvX2J1ZmZlcigpICovCisjZGVmaW5lIERPQlVGX0dPVE8JMAkvKiBnbyB0byBzcGVjaWZpZWQgYnVmZmVyICovCisjZGVmaW5lIERPQlVGX1NQTElUCTEJLyogc3BsaXQgd2luZG93IGFuZCBnbyB0byBzcGVjaWZpZWQgYnVmZmVyICovCisjZGVmaW5lIERPQlVGX1VOTE9BRAkyCS8qIHVubG9hZCBzcGVjaWZpZWQgYnVmZmVyKHMpICovCisjZGVmaW5lIERPQlVGX0RFTAkzCS8qIGRlbGV0ZSBzcGVjaWZpZWQgYnVmZmVyKHMpIGZyb20gYnVmbGlzdCAqLworI2RlZmluZSBET0JVRl9XSVBFCTQJLyogZGVsZXRlIHNwZWNpZmllZCBidWZmZXIocykgcmVhbGx5ICovCisKKy8qIFZhbHVlcyBmb3Igc3RhcnQgYXJndW1lbnQgZm9yIGRvX2J1ZmZlcigpICovCisjZGVmaW5lIERPQlVGX0NVUlJFTlQJMAkvKiAiY291bnQiIGJ1ZmZlciBmcm9tIGN1cnJlbnQgYnVmZmVyICovCisjZGVmaW5lIERPQlVGX0ZJUlNUCTEJLyogImNvdW50IiBidWZmZXIgZnJvbSBmaXJzdCBidWZmZXIgKi8KKyNkZWZpbmUgRE9CVUZfTEFTVAkyCS8qICJjb3VudCIgYnVmZmVyIGZyb20gbGFzdCBidWZmZXIgKi8KKyNkZWZpbmUgRE9CVUZfTU9ECTMJLyogImNvdW50IiBtb2QuIGJ1ZmZlciBmcm9tIGN1cnJlbnQgYnVmZmVyICovCisKKy8qIFZhbHVlcyBmb3Igc3ViX2NtZCBhbmQgd2hpY2hfcGF0IGFyZ3VtZW50IGZvciBzZWFyY2hfcmVnY29tcCgpICovCisvKiBBbHNvIHVzZWQgZm9yIHdoaWNoX3BhdCBhcmd1bWVudCBmb3Igc2VhcmNoaXQoKSAqLworI2RlZmluZSBSRV9TRUFSQ0gJMAkvKiBzYXZlL3VzZSBwYXQgaW4vZnJvbSBzZWFyY2hfcGF0dGVybiAqLworI2RlZmluZSBSRV9TVUJTVAkxCS8qIHNhdmUvdXNlIHBhdCBpbi9mcm9tIHN1YnN0X3BhdHRlcm4gKi8KKyNkZWZpbmUgUkVfQk9USAkJMgkvKiBzYXZlIHBhdCBpbiBib3RoIHBhdHRlcm5zICovCisjZGVmaW5lIFJFX0xBU1QJCTIJLyogdXNlIGxhc3QgdXNlZCBwYXR0ZXJuIGlmICJwYXQiIGlzIE5VTEwgKi8KKworLyogU2Vjb25kIGFyZ3VtZW50IGZvciB2aW1fcmVnY29tcCgpLiAqLworI2RlZmluZSBSRV9NQUdJQwkxCS8qICdtYWdpYycgb3B0aW9uICovCisjZGVmaW5lIFJFX1NUUklORwkyCS8qIG1hdGNoIGluIHN0cmluZyBpbnN0ZWFkIG9mIGJ1ZmZlciB0ZXh0ICovCisKKyNpZmRlZiBGRUFUX1NZTl9ITAorLyogdmFsdWVzIGZvciByZWdfZG9fZXh0bWF0Y2ggKi8KKyMgZGVmaW5lIFJFWF9TRVQJMQkvKiB0byBhbGxvdyBcelwoLi4uXCksICovCisjIGRlZmluZSBSRVhfVVNFCTIJLyogdG8gYWxsb3cgXHpcMSBldCBhbC4gKi8KKyNlbmRpZgorCisvKiBSZXR1cm4gdmFsdWVzIGZvciBmdWxscGF0aGNtcCgpICovCisvKiBOb3RlOiBjYW4gdXNlIChmdWxscGF0aGNtcCgpICYgRlBDX1NBTUUpIHRvIGNoZWNrIGZvciBlcXVhbCBmaWxlcyAqLworI2RlZmluZSBGUENfU0FNRQkxCS8qIGJvdGggZXhpc3QgYW5kIGFyZSB0aGUgc2FtZSBmaWxlLiAqLworI2RlZmluZSBGUENfRElGRgkyCS8qIGJvdGggZXhpc3QgYW5kIGFyZSBkaWZmZXJlbnQgZmlsZXMuICovCisjZGVmaW5lIEZQQ19OT1RYCTQJLyogYm90aCBkb24ndCBleGlzdC4gKi8KKyNkZWZpbmUgRlBDX0RJRkZYCTYJLyogb25lIG9mIHRoZW0gZG9lc24ndCBleGlzdC4gKi8KKyNkZWZpbmUgRlBDX1NBTUVYCTcJLyogYm90aCBkb24ndCBleGlzdCBhbmQgZmlsZSBuYW1lcyBhcmUgc2FtZS4gKi8KKworLyogZmxhZ3MgZm9yIGRvX2VjbWQoKSAqLworI2RlZmluZSBFQ01EX0hJREUJMHgwMQkvKiBkb24ndCBmcmVlIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworI2RlZmluZSBFQ01EX1NFVF9IRUxQCTB4MDIJLyogc2V0IGJfaGVscCBmbGFnIG9mIChuZXcpIGJ1ZmZlciBiZWZvcmUKKwkJCQkgICBvcGVuaW5nIGZpbGUgKi8KKyNkZWZpbmUgRUNNRF9PTERCVUYJMHgwNAkvKiB1c2UgZXhpc3RpbmcgYnVmZmVyIGlmIGl0IGV4aXN0cyAqLworI2RlZmluZSBFQ01EX0ZPUkNFSVQJMHgwOAkvKiAhIHVzZWQgaW4gRXggY29tbWFuZCAqLworI2RlZmluZSBFQ01EX0FEREJVRgkweDEwCS8qIGRvbid0IGVkaXQsIGp1c3QgYWRkIHRvIGJ1ZmZlciBsaXN0ICovCisKKy8qIGZvciBsbnVtIGFyZ3VtZW50IGluIGRvX2VjbWQoKSAqLworI2RlZmluZSBFQ01EX0xBU1RMCShsaW5lbnJfVCkwCS8qIHVzZSBsYXN0IHBvc2l0aW9uIGluIGxvYWRlZCBmaWxlICovCisjZGVmaW5lIEVDTURfTEFTVAkobGluZW5yX1QpLTEJLyogdXNlIGxhc3QgcG9zaXRpb24gaW4gYWxsIGZpbGVzICovCisjZGVmaW5lIEVDTURfT05FCShsaW5lbnJfVCkxCS8qIHVzZSBmaXJzdCBsaW5lICovCisKKy8qIGZsYWdzIGZvciBkb19jbWRsaW5lKCkgKi8KKyNkZWZpbmUgRE9DTURfVkVSQk9TRQkweDAxCS8qIGluY2x1ZGVkIGNvbW1hbmQgaW4gZXJyb3IgbWVzc2FnZSAqLworI2RlZmluZSBET0NNRF9OT1dBSVQJMHgwMgkvKiBkb24ndCBjYWxsIHdhaXRfcmV0dXJuKCkgYW5kIGZyaWVuZHMgKi8KKyNkZWZpbmUgRE9DTURfUkVQRUFUCTB4MDQJLyogcmVwZWF0IGV4ZWMuIHVudGlsIGdldGxpbmUoKSByZXR1cm5zIE5VTEwgKi8KKyNkZWZpbmUgRE9DTURfS0VZVFlQRUQJMHgwOAkvKiBkb24ndCByZXNldCBLZXlUeXBlZCAqLworI2RlZmluZSBET0NNRF9FWENSRVNFVAkweDEwCS8qIHJlc2V0IGV4Y2VwdGlvbiBlbnZpcm9ubWVudCAoZm9yIGRlYnVnZ2luZykqLworI2RlZmluZSBET0NNRF9LRUVQTElORSAgMHgyMAkvKiBrZWVwIHR5cGVkIGxpbmUgZm9yIHJlcGVhdGluZyB3aXRoICIuIiAqLworCisvKiBmbGFncyBmb3IgYmVnaW5saW5lKCkgKi8KKyNkZWZpbmUgQkxfV0hJVEUJMQkvKiBjdXJzb3Igb24gZmlyc3Qgbm9uLXdoaXRlIGluIHRoZSBsaW5lICovCisjZGVmaW5lIEJMX1NPTAkJMgkvKiB1c2UgJ3NvbCcgb3B0aW9uICovCisjZGVmaW5lIEJMX0ZJWAkJNAkvKiBkb24ndCBsZWF2ZSBjdXJzb3Igb24gYSBOVUwgKi8KKworLyogZmxhZ3MgZm9yIG1mX3N5bmMoKSAqLworI2RlZmluZSBNRlNfQUxMCQkxCS8qIGFsc28gc3luYyBibG9ja3Mgd2l0aCBuZWdhdGl2ZSBudW1iZXJzICovCisjZGVmaW5lIE1GU19TVE9QCTIJLyogc3RvcCBzeW5jaW5nIHdoZW4gYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIE1GU19GTFVTSAk0CS8qIGZsdXNoZWQgZmlsZSB0byBkaXNrICovCisjZGVmaW5lIE1GU19aRVJPCTgJLyogb25seSB3cml0ZSBibG9jayAwICovCisKKy8qIGZsYWdzIGZvciBidWZfY29weV9vcHRpb25zKCkgKi8KKyNkZWZpbmUgQkNPX0VOVEVSCTEJLyogZ29pbmcgdG8gZW50ZXIgdGhlIGJ1ZmZlciAqLworI2RlZmluZSBCQ09fQUxXQVlTCTIJLyogYWx3YXlzIGNvcHkgdGhlIG9wdGlvbnMgKi8KKyNkZWZpbmUgQkNPX05PSEVMUAk0CS8qIGRvbid0IHRvdWNoIHRoZSBoZWxwIHJlbGF0ZWQgb3B0aW9ucyAqLworCisvKiBmbGFncyBmb3IgZG9fcHV0KCkgKi8KKyNkZWZpbmUgUFVUX0ZJWElOREVOVAkxCS8qIG1ha2UgaW5kZW50IGxvb2sgbmljZSAqLworI2RlZmluZSBQVVRfQ1VSU0VORAkyCS8qIGxlYXZlIGN1cnNvciBhZnRlciBlbmQgb2YgbmV3IHRleHQgKi8KKyNkZWZpbmUgUFVUX0xJTkUJNAkvKiBwdXQgcmVnaXN0ZXIgYXMgbGluZXMgKi8KKyNkZWZpbmUgUFVUX0xJTkVfU1BMSVQJOAkvKiBzcGxpdCBsaW5lIGZvciBsaW5ld2lzZSByZWdpc3RlciAqLworI2RlZmluZSBQVVRfTElORV9GT1JXQVJEIDE2CS8qIHB1dCBsaW5ld2lzZSByZWdpc3RlciBiZWxvdyBWaXN1YWwgc2VsLiAqLworCisvKiBmbGFncyBmb3Igc2V0X2luZGVudCgpICovCisjZGVmaW5lIFNJTl9DSEFOR0VECTEJLyogY2FsbCBjaGFuZ2VkX2J5dGVzKCkgd2hlbiBsaW5lIGNoYW5nZWQgKi8KKyNkZWZpbmUgU0lOX0lOU0VSVAkyCS8qIGluc2VydCBpbmRlbnQgYmVmb3JlIGV4aXN0aW5nIHRleHQgKi8KKyNkZWZpbmUgU0lOX1VORE8JNAkvKiBzYXZlIGxpbmUgZm9yIHVuZG8gYmVmb3JlIGNoYW5naW5nIGl0ICovCisKKy8qIGZsYWdzIGZvciBpbnNlcnRjaGFyKCkgKi8KKyNkZWZpbmUgSU5TQ0hBUl9GT1JNQVQJMQkvKiBmb3JjZSBmb3JtYXR0aW5nICovCisjZGVmaW5lIElOU0NIQVJfRE9fQ09NCTIJLyogZm9ybWF0IGNvbW1lbnRzICovCisjZGVmaW5lIElOU0NIQVJfQ1RSTFYJNAkvKiBjaGFyIHR5cGVkIGp1c3QgYWZ0ZXIgQ1RSTC1WICovCisKKy8qIGZsYWdzIGZvciBvcGVuX2xpbmUoKSAqLworI2RlZmluZSBPUEVOTElORV9ERUxTUEFDRVMgIDEJLyogZGVsZXRlIHNwYWNlcyBhZnRlciBjdXJzb3IgKi8KKyNkZWZpbmUgT1BFTkxJTkVfRE9fQ09NCSAgICAyCS8qIGZvcm1hdCBjb21tZW50cyAqLworI2RlZmluZSBPUEVOTElORV9LRUVQVFJBSUwgIDQJLyoga2VlcCB0cmFpbGluZyBzcGFjZXMgKi8KKyNkZWZpbmUgT1BFTkxJTkVfTUFSS0ZJWCAgICA4CS8qIGZpeCBtYXJrIHBvc2l0aW9ucyAqLworCisvKgorICogVGhlcmUgYXJlIGZvdXIgaGlzdG9yeSB0YWJsZXM6CisgKi8KKyNkZWZpbmUgSElTVF9DTUQJMAkvKiBjb2xvbiBjb21tYW5kcyAqLworI2RlZmluZSBISVNUX1NFQVJDSAkxCS8qIHNlYXJjaCBjb21tYW5kcyAqLworI2RlZmluZSBISVNUX0VYUFIJMgkvKiBleHByZXNzaW9ucyAoZnJvbSBlbnRlcmluZyA9IHJlZ2lzdGVyKSAqLworI2RlZmluZSBISVNUX0lOUFVUCTMJLyogaW5wdXQoKSBsaW5lcyAqLworI2RlZmluZSBISVNUX0RFQlVHCTQJLyogZGVidWcgY29tbWFuZHMgKi8KKyNkZWZpbmUgSElTVF9DT1VOVAk1CS8qIG51bWJlciBvZiBoaXN0b3J5IHRhYmxlcyAqLworCisvKgorICogRmxhZ3MgZm9yIGNoYXJ0YWJbXS4KKyAqLworI2RlZmluZSBDVF9DRUxMX01BU0sJMHgwNwkvKiBtYXNrOiBuciBvZiBkaXNwbGF5IGNlbGxzICgxLCAyIG9yIDQpICovCisjZGVmaW5lIENUX1BSSU5UX0NIQVIJMHgxMAkvKiBmbGFnOiBzZXQgZm9yIHByaW50YWJsZSBjaGFycyAqLworI2RlZmluZSBDVF9JRF9DSEFSCTB4MjAJLyogZmxhZzogc2V0IGZvciBJRCBjaGFycyAqLworI2RlZmluZSBDVF9GTkFNRV9DSEFSCTB4NDAJLyogZmxhZzogc2V0IGZvciBmaWxlIG5hbWUgY2hhcnMgKi8KKworLyoKKyAqIFZhbHVlcyBmb3IgZG9fdGFnKCkuCisgKi8KKyNkZWZpbmUgRFRfVEFHCQkxCS8qIGp1bXAgdG8gbmV3ZXIgcG9zaXRpb24gb3Igc2FtZSB0YWcgYWdhaW4gKi8KKyNkZWZpbmUgRFRfUE9QCQkyCS8qIGp1bXAgdG8gb2xkZXIgcG9zaXRpb24gKi8KKyNkZWZpbmUgRFRfTkVYVAkJMwkvKiBqdW1wIHRvIG5leHQgbWF0Y2ggb2Ygc2FtZSB0YWcgKi8KKyNkZWZpbmUgRFRfUFJFVgkJNAkvKiBqdW1wIHRvIHByZXZpb3VzIG1hdGNoIG9mIHNhbWUgdGFnICovCisjZGVmaW5lIERUX0ZJUlNUCTUJLyoganVtcCB0byBmaXJzdCBtYXRjaCBvZiBzYW1lIHRhZyAqLworI2RlZmluZSBEVF9MQVNUCQk2CS8qIGp1bXAgdG8gZmlyc3QgbWF0Y2ggb2Ygc2FtZSB0YWcgKi8KKyNkZWZpbmUgRFRfU0VMRUNUCTcJLyoganVtcCB0byBzZWxlY3Rpb24gZnJvbSBsaXN0ICovCisjZGVmaW5lIERUX0hFTFAJCTgJLyogbGlrZSBEVF9UQUcsIGJ1dCBubyB3aWxkY2FyZHMgKi8KKyNkZWZpbmUgRFRfSlVNUAkJOQkvKiBqdW1wIHRvIG5ldyB0YWcgb3Igc2VsZWN0aW9uIGZyb20gbGlzdCAqLworI2RlZmluZSBEVF9DU0NPUEUJMTAJLyogY3Njb3BlIGZpbmQgY29tbWFuZCAobGlrZSB0anVtcCkgKi8KKworLyoKKyAqIGZsYWdzIGZvciBmaW5kX3RhZ3MoKS4KKyAqLworI2RlZmluZSBUQUdfSEVMUAkxCS8qIG9ubHkgc2VhcmNoIGZvciBoZWxwIHRhZ3MgKi8KKyNkZWZpbmUgVEFHX05BTUVTCTIJLyogb25seSByZXR1cm4gbmFtZSBvZiB0YWcgKi8KKyNkZWZpbmUJVEFHX1JFR0VYUAk0CS8qIHVzZSB0YWcgcGF0dGVybiBhcyByZWdleHAgKi8KKyNkZWZpbmUJVEFHX05PSUMJOAkvKiBkb24ndCBhbHdheXMgaWdub3JlIGNhc2UgKi8KKyNpZmRlZiBGRUFUX0NTQ09QRQorIyBkZWZpbmUgVEFHX0NTQ09QRQkxNgkvKiBjc2NvcGUgdGFnICovCisjZW5kaWYKKyNkZWZpbmUgVEFHX1ZFUkJPU0UJMzIJLyogbWVzc2FnZSB2ZXJib3NpdHkgKi8KKyNkZWZpbmUgVEFHX0lOU19DT01QCTY0CS8qIEN1cnJlbnRseSBkb2luZyBpbnNlcnQgY29tcGxldGlvbiAqLworI2RlZmluZSBUQUdfS0VFUF9MQU5HCTEyOAkvKiBrZWVwIGN1cnJlbnQgbGFuZ3VhZ2UgKi8KKworI2RlZmluZSBUQUdfTUFOWQkyMDAJLyogV2hlbiBmaW5kaW5nIG1hbnkgdGFncyAoZm9yIGNvbXBsZXRpb24pLAorCQkJCSAgIGZpbmQgdXAgdG8gdGhpcyBtYW55IHRhZ3MgKi8KKworLyoKKyAqIFR5cGVzIG9mIGRpYWxvZ3MgcGFzc2VkIHRvIGRvX3ZpbV9kaWFsb2coKS4KKyAqLworI2RlZmluZSBWSU1fR0VORVJJQwkwCisjZGVmaW5lIFZJTV9FUlJPUgkxCisjZGVmaW5lIFZJTV9XQVJOSU5HCTIKKyNkZWZpbmUgVklNX0lORk8JMworI2RlZmluZSBWSU1fUVVFU1RJT04JNAorI2RlZmluZSBWSU1fTEFTVF9UWVBFCTQJLyogc2VudGluZWwgdmFsdWUgKi8KKworLyoKKyAqIFJldHVybiB2YWx1ZXMgZm9yIGZ1bmN0aW9ucyBsaWtlIGd1aV95ZXNub2NhbmNlbCgpCisgKi8KKyNkZWZpbmUgVklNX09LCQkxCisjZGVmaW5lIFZJTV9ZRVMJCTIKKyNkZWZpbmUgVklNX05PCQkzCisjZGVmaW5lIFZJTV9DQU5DRUwJNAorI2RlZmluZSBWSU1fQUxMCQk1CisjZGVmaW5lIFZJTV9ESVNDQVJEQUxMICA2CisKKy8qCisgKiBhcmd1bWVudHMgZm9yIHdpbl9zcGxpdCgpCisgKi8KKyNkZWZpbmUgV1NQX1JPT00JMQkvKiByZXF1aXJlIGVub3VnaCByb29tICovCisjZGVmaW5lIFdTUF9WRVJUCTIJLyogc3BsaXQgdmVydGljYWxseSAqLworI2RlZmluZSBXU1BfVE9QCQk0CS8qIHdpbmRvdyBhdCB0b3AtbGVmdCBvZiBzaGVsbCAqLworI2RlZmluZSBXU1BfQk9UCQk4CS8qIHdpbmRvdyBhdCBib3R0b20tcmlnaHQgb2Ygc2hlbGwgKi8KKyNkZWZpbmUgV1NQX0hFTFAJMTYJLyogY3JlYXRpbmcgdGhlIGhlbHAgd2luZG93ICovCisjZGVmaW5lIFdTUF9CRUxPVwkzMgkvKiBwdXQgbmV3IHdpbmRvdyBiZWxvdy9yaWdodCAqLworI2RlZmluZSBXU1BfQUJPVkUJNjQJLyogcHV0IG5ldyB3aW5kb3cgYWJvdmUvbGVmdCAqLworCisvKgorICogImZsYWdzIiB2YWx1ZXMgZm9yIG9wdGlvbi1zZXR0aW5nIGZ1bmN0aW9ucy4KKyAqIFdoZW4gT1BUX0dMT0JBTCBhbmQgT1BUX0xPQ0FMIGFyZSBib3RoIG1pc3NpbmcsIHNldCBib3RoIGxvY2FsIGFuZCBnbG9iYWwKKyAqIHZhbHVlcywgZ2V0IGxvY2FsIHZhbHVlLgorICovCisjZGVmaW5lIE9QVF9GUkVFCTEJLyogZnJlZSBvbGQgdmFsdWUgaWYgaXQgd2FzIGFsbG9jYXRlZCAqLworI2RlZmluZSBPUFRfR0xPQkFMCTIJLyogdXNlIGdsb2JhbCB2YWx1ZSAqLworI2RlZmluZSBPUFRfTE9DQUwJNAkvKiB1c2UgbG9jYWwgdmFsdWUgKi8KKyNkZWZpbmUgT1BUX01PREVMSU5FCTgJLyogb3B0aW9uIGluIG1vZGVsaW5lICovCisKKy8qIE1hZ2ljIGNoYXJzIHVzZWQgaW4gY29uZmlybSBkaWFsb2cgc3RyaW5ncyAqLworI2RlZmluZSBETEdfQlVUVE9OX1NFUAknXG4nCisjZGVmaW5lIERMR19IT1RLRVlfQ0hBUgknJicKKworLyogVmFsdWVzIGZvciAic3RhcnRpbmciICovCisjZGVmaW5lIE5PX1NDUkVFTgkyCS8qIG5vIHNjcmVlbiB1cGRhdGluZyB5ZXQgKi8KKyNkZWZpbmUgTk9fQlVGRkVSUwkxCS8qIG5vdCBhbGwgYnVmZmVycyBsb2FkZWQgeWV0ICovCisvKgkJCTAJICAgbm90IHN0YXJ0aW5nIGFueW1vcmUgKi8KKworLyogVmFsdWVzIGZvciBzd2FwX2V4aXN0c19hY3Rpb246IHdoYXQgdG8gZG8gd2hlbiBzd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMgKi8KKyNkZWZpbmUgU0VBX05PTkUJMAkvKiBkb24ndCB1c2UgZGlhbG9nICovCisjZGVmaW5lIFNFQV9ESUFMT0cJMQkvKiB1c2UgZGlhbG9nIHdoZW4gKi8KKyNkZWZpbmUgU0VBX1FVSVQJMgkvKiBxdWl0IGVkaXRpbmcgdGhlIGZpbGUgKi8KKyNkZWZpbmUgU0VBX1JFQ09WRVIJMwkvKiByZWNvdmVyIHRoZSBmaWxlICovCisKKy8qCisgKiBNaW5pbWFsIHNpemUgZm9yIGJsb2NrIDAgb2YgYSBzd2FwIGZpbGUuCisgKiBOT1RFOiBUaGlzIGRlcGVuZHMgb24gc2l6ZSBvZiBzdHJ1Y3QgYmxvY2swISBJdCdzIG5vdCBkb25lIHdpdGggYSBzaXplb2YoKSwKKyAqIGJlY2F1c2Ugc3RydWN0IGJsb2NrMCBpcyBkZWZpbmVkIGluIG1lbWxpbmUuYyAoU29ycnkpLgorICogVGhlIG1heGltYWwgYmxvY2sgc2l6ZSBpcyBhcmJpdHJhcnkuCisgKi8KKyNkZWZpbmUgTUlOX1NXQVBfUEFHRV9TSVpFIDEwNDgKKyNkZWZpbmUgTUFYX1NXQVBfUEFHRV9TSVpFIDUwMDAwCisKKy8qIFNwZWNpYWwgdmFsdWVzIGZvciBjdXJyZW50X1NJRC4gKi8KKyNkZWZpbmUgU0lEX01PREVMSU5FCS0xCS8qIHdoZW4gdXNpbmcgYSBtb2RlbGluZSAqLworI2RlZmluZSBTSURfQ01EQVJHCS0yCS8qIGZvciAiLS1jbWQiIGFyZ3VtZW50ICovCisjZGVmaW5lIFNJRF9DQVJHCS0zCS8qIGZvciAiLWMiIGFyZ3VtZW50ICovCisjZGVmaW5lIFNJRF9FTlYJCS00CS8qIGZvciBzb3VyY2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZSAqLworCisvKgorICogRXZlbnRzIGZvciBhdXRvY29tbWFuZHMuCisgKi8KK2VudW0gYXV0b19ldmVudAoreworICAgIEVWRU5UX0JVRkFERCA9IDAsCQkvKiBhZnRlciBhZGRpbmcgYSBidWZmZXIgdG8gdGhlIGJ1ZmZlciBsaXN0ICovCisgICAgRVZFTlRfQlVGTkVXLAkJLyogYWZ0ZXIgY3JlYXRpbmcgYW55IGJ1ZmZlciAqLworICAgIEVWRU5UX0JVRkRFTEVURSwJCS8qIGRlbGV0aW5nIGEgYnVmZmVyIGZyb20gdGhlIGJ1ZmZlciBsaXN0ICovCisgICAgRVZFTlRfQlVGV0lQRU9VVCwJCS8qIGp1c3QgYmVmb3JlIHJlYWxseSBkZWxldGluZyBhIGJ1ZmZlciAqLworICAgIEVWRU5UX0JVRkVOVEVSLAkJLyogYWZ0ZXIgZW50ZXJpbmcgYSBidWZmZXIgKi8KKyAgICBFVkVOVF9CVUZGSUxFUE9TVCwJCS8qIGFmdGVyIHJlbmFtaW5nIGEgYnVmZmVyICovCisgICAgRVZFTlRfQlVGRklMRVBSRSwJCS8qIGJlZm9yZSByZW5hbWluZyBhIGJ1ZmZlciAqLworICAgIEVWRU5UX0JVRkxFQVZFLAkJLyogYmVmb3JlIGxlYXZpbmcgYSBidWZmZXIgKi8KKyAgICBFVkVOVF9CVUZORVdGSUxFLAkJLyogd2hlbiBjcmVhdGluZyBhIGJ1ZmZlciBmb3IgYSBuZXcgZmlsZSAqLworICAgIEVWRU5UX0JVRlJFQURQT1NULAkJLyogYWZ0ZXIgcmVhZGluZyBhIGJ1ZmZlciAqLworICAgIEVWRU5UX0JVRlJFQURQUkUsCQkvKiBiZWZvcmUgcmVhZGluZyBhIGJ1ZmZlciAqLworICAgIEVWRU5UX0JVRlJFQURDTUQsCQkvKiByZWFkIGJ1ZmZlciB1c2luZyBjb21tYW5kICovCisgICAgRVZFTlRfQlVGVU5MT0FELAkJLyoganVzdCBiZWZvcmUgdW5sb2FkaW5nIGEgYnVmZmVyICovCisgICAgRVZFTlRfQlVGSElEREVOLAkJLyoganVzdCBhZnRlciBidWZmZXIgYmVjb21lcyBoaWRkZW4gKi8KKyAgICBFVkVOVF9CVUZXSU5FTlRFUiwJCS8qIGFmdGVyIHNob3dpbmcgYSBidWZmZXIgaW4gYSB3aW5kb3cgKi8KKyAgICBFVkVOVF9CVUZXSU5MRUFWRSwJCS8qIGp1c3QgYWZ0ZXIgYnVmZmVyIHJlbW92ZWQgZnJvbSB3aW5kb3cgKi8KKyAgICBFVkVOVF9CVUZXUklURVBPU1QsCQkvKiBhZnRlciB3cml0aW5nIGEgYnVmZmVyICovCisgICAgRVZFTlRfQlVGV1JJVEVQUkUsCQkvKiBiZWZvcmUgd3JpdGluZyBhIGJ1ZmZlciAqLworICAgIEVWRU5UX0JVRldSSVRFQ01ELAkJLyogd3JpdGUgYnVmZmVyIHVzaW5nIGNvbW1hbmQgKi8KKyAgICBFVkVOVF9DTURXSU5FTlRFUiwJCS8qIGFmdGVyIGVudGVyaW5nIHRoZSBjbWRsaW5lIHdpbmRvdyAqLworICAgIEVWRU5UX0NNRFdJTkxFQVZFLAkJLyogYmVmb3JlIGxlYXZpbmcgdGhlIGNtZGxpbmUgd2luZG93ICovCisgICAgRVZFTlRfRklMRUFQUEVORFBPU1QsCS8qIGFmdGVyIGFwcGVuZGluZyB0byBhIGZpbGUgKi8KKyAgICBFVkVOVF9GSUxFQVBQRU5EUFJFLAkvKiBiZWZvcmUgYXBwZW5kaW5nIHRvIGEgZmlsZSAqLworICAgIEVWRU5UX0ZJTEVBUFBFTkRDTUQsCS8qIGFwcGVuZGUgdG8gYSBmaWxlIHVzaW5nIGNvbW1hbmQgKi8KKyAgICBFVkVOVF9GSUxFQ0hBTkdFRFNIRUxMLAkvKiBhZnRlciBzaGVsbCBjb21tYW5kIHRoYXQgY2hhbmdlZCBmaWxlICovCisgICAgRVZFTlRfRklMRUNIQU5HRURSTywJLyogYmVmb3JlIGZpcnN0IGNoYW5nZSB0byByZWFkLW9ubHkgZmlsZSAqLworICAgIEVWRU5UX0ZJTEVSRUFEUE9TVCwJCS8qIGFmdGVyIHJlYWRpbmcgYSBmaWxlICovCisgICAgRVZFTlRfRklMRVJFQURQUkUsCQkvKiBiZWZvcmUgcmVhZGluZyBhIGZpbGUgKi8KKyAgICBFVkVOVF9GSUxFUkVBRENNRCwJCS8qIHJlYWQgZnJvbSBhIGZpbGUgdXNpbmcgY29tbWFuZCAqLworICAgIEVWRU5UX0ZJTEVUWVBFLAkJLyogbmV3IGZpbGUgdHlwZSBkZXRlY3RlZCAodXNlciBkZWZpbmVkKSAqLworICAgIEVWRU5UX0ZJTEVXUklURVBPU1QsCS8qIGFmdGVyIHdyaXRpbmcgYSBmaWxlICovCisgICAgRVZFTlRfRklMRVdSSVRFUFJFLAkJLyogYmVmb3JlIHdyaXRpbmcgYSBmaWxlICovCisgICAgRVZFTlRfRklMRVdSSVRFQ01ELAkJLyogd3JpdGUgdG8gYSBmaWxlIHVzaW5nIGNvbW1hbmQgKi8KKyAgICBFVkVOVF9GSUxURVJSRUFEUE9TVCwJLyogYWZ0ZXIgcmVhZGluZyBmcm9tIGEgZmlsdGVyICovCisgICAgRVZFTlRfRklMVEVSUkVBRFBSRSwJLyogYmVmb3JlIHJlYWRpbmcgZnJvbSBhIGZpbHRlciAqLworICAgIEVWRU5UX0ZJTFRFUldSSVRFUE9TVCwJLyogYWZ0ZXIgd3JpdGluZyB0byBhIGZpbHRlciAqLworICAgIEVWRU5UX0ZJTFRFUldSSVRFUFJFLAkvKiBiZWZvcmUgd3JpdGluZyB0byBhIGZpbHRlciAqLworICAgIEVWRU5UX0ZPQ1VTR0FJTkVELAkJLyogZ290IHRoZSBmb2N1cyAqLworICAgIEVWRU5UX0ZPQ1VTTE9TVCwJCS8qIGxvc3QgdGhlIGZvY3VzIHRvIGFub3RoZXIgYXBwICovCisgICAgRVZFTlRfR1VJRU5URVIsCQkvKiBhZnRlciBzdGFydGluZyB0aGUgR1VJICovCisgICAgRVZFTlRfU1RESU5SRUFEUE9TVCwJLyogYWZ0ZXIgcmVhZGluZyBmcm9tIHN0ZGluICovCisgICAgRVZFTlRfU1RESU5SRUFEUFJFLAkJLyogYmVmb3JlIHJlYWRpbmcgZnJvbSBzdGRpbiAqLworICAgIEVWRU5UX1NZTlRBWCwJCS8qIHN5bnRheCBzZWxlY3RlZCAqLworICAgIEVWRU5UX1RFUk1DSEFOR0VELAkJLyogYWZ0ZXIgY2hhbmdpbmcgJ3Rlcm0nICovCisgICAgRVZFTlRfVEVSTVJFU1BPTlNFLAkJLyogYWZ0ZXIgc2V0dGluZyAidjp0ZXJtcmVzcG9uc2UiICovCisgICAgRVZFTlRfVVNFUiwJCQkvKiB1c2VyIGRlZmluZWQgYXV0b2NvbW1hbmQgKi8KKyAgICBFVkVOVF9WSU1FTlRFUiwJCS8qIGFmdGVyIHN0YXJ0aW5nIFZpbSAqLworICAgIEVWRU5UX1ZJTUxFQVZFLAkJLyogYmVmb3JlIGV4aXRpbmcgVmltICovCisgICAgRVZFTlRfVklNTEVBVkVQUkUsCQkvKiBiZWZvcmUgZXhpdGluZyBWaW0gYW5kIHdyaXRpbmcgLnZpbWluZm8gKi8KKyAgICBFVkVOVF9XSU5FTlRFUiwJCS8qIGFmdGVyIGVudGVyaW5nIGEgd2luZG93ICovCisgICAgRVZFTlRfV0lOTEVBVkUsCQkvKiBiZWZvcmUgbGVhdmluZyBhIHdpbmRvdyAqLworICAgIEVWRU5UX0VOQ09ESU5HQ0hBTkdFRCwJLyogYWZ0ZXIgY2hhbmdpbmcgdGhlICdlbmNvZGluZycgb3B0aW9uICovCisgICAgRVZFTlRfQ1VSU09SSE9MRCwJCS8qIGN1cnNvciBpbiBzYW1lIHBvc2l0aW9uIGZvciBhIHdoaWxlICovCisgICAgRVZFTlRfRlVOQ1VOREVGSU5FRCwJLyogaWYgY2FsbGluZyBhIGZ1bmN0aW9uIHdoaWNoIGRvZXNuJ3QgZXhpc3QgKi8KKyAgICBFVkVOVF9SRU1PVEVSRVBMWSwJCS8qIHVwb24gc3RyaW5nIHJlY2VwdGlvbiBmcm9tIGEgcmVtb3RlIHZpbSAqLworICAgIE5VTV9FVkVOVFMJCQkvKiBNVVNUIGJlIHRoZSBsYXN0IG9uZSAqLworfTsKKwordHlwZWRlZiBlbnVtIGF1dG9fZXZlbnQgRVZFTlRfVDsKKworLyoKKyAqIFZhbHVlcyBmb3IgaW5kZXggaW4gaGlnaGxpZ2h0X2F0dHJbXS4KKyAqIFdoZW4gbWFraW5nIGNoYW5nZXMsIGFsc28gdXBkYXRlIEhMX0ZMQUdTIGJlbG93ISAgQW5kIHVwZGF0ZSB0aGUgZGVmYXVsdAorICogdmFsdWUgb2YgJ2hpZ2hsaWdodCcgaW4gb3B0aW9uLmMuCisgKi8KK2VudW0gaGxmX3ZhbHVlCit7CisgICAgSExGXzggPSAwCSAgICAvKiBNZXRhICYgc3BlY2lhbCBrZXlzIGxpc3RlZCB3aXRoICI6bWFwIiwgdGV4dCB0aGF0IGlzCisJCSAgICAgICBkaXNwbGF5ZWQgZGlmZmVyZW50IGZyb20gd2hhdCBpdCBpcyAqLworICAgICwgSExGX0FUCSAgICAvKiBAIGFuZCB+IGNoYXJhY3RlcnMgYXQgZW5kIG9mIHNjcmVlbiwgY2hhcmFjdGVycyB0aGF0CisJCSAgICAgICBkb24ndCByZWFsbHkgZXhpc3QgaW4gdGhlIHRleHQgKi8KKyAgICAsIEhMRl9ECSAgICAvKiBkaXJlY3RvcmllcyBpbiBDVFJMLUQgbGlzdGluZyAqLworICAgICwgSExGX0UJICAgIC8qIGVycm9yIG1lc3NhZ2VzICovCisgICAgLCBITEZfSAkgICAgLyogb2Jzb2xldGUsIGlnbm9yZWQgKi8KKyAgICAsIEhMRl9JCSAgICAvKiBpbmNyZW1lbnRhbCBzZWFyY2ggKi8KKyAgICAsIEhMRl9MCSAgICAvKiBsYXN0IHNlYXJjaCBzdHJpbmcgKi8KKyAgICAsIEhMRl9NCSAgICAvKiAiLS1Nb3JlLS0iIG1lc3NhZ2UgKi8KKyAgICAsIEhMRl9DTQkgICAgLyogTW9kZSAoZS5nLiwgIi0tIElOU0VSVCAtLSIpICovCisgICAgLCBITEZfTgkgICAgLyogbGluZSBudW1iZXIgZm9yICI6bnVtYmVyIiBhbmQgIjojIiBjb21tYW5kcyAqLworICAgICwgSExGX1IJICAgIC8qIHJldHVybiB0byBjb250aW51ZSBtZXNzYWdlIGFuZCB5ZXMvbm8gcXVlc3Rpb25zICovCisgICAgLCBITEZfUwkgICAgLyogc3RhdHVzIGxpbmVzICovCisgICAgLCBITEZfU05DCSAgICAvKiBzdGF0dXMgbGluZXMgb2Ygbm90LWN1cnJlbnQgd2luZG93cyAqLworICAgICwgSExGX0MJICAgIC8qIGNvbHVtbiB0byBzZXBhcmF0ZSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MgKi8KKyAgICAsIEhMRl9UCSAgICAvKiBUaXRsZXMgZm9yIG91dHB1dCBmcm9tICI6c2V0IGFsbCIsICI6YXV0b2NtZCIgZXRjLiAqLworICAgICwgSExGX1YJICAgIC8qIFZpc3VhbCBtb2RlICovCisgICAgLCBITEZfVk5DCSAgICAvKiBWaXN1YWwgbW9kZSwgYXV0b3NlbGVjdGluZyBhbmQgbm90IGNsaXBib2FyZCBvd25lciAqLworICAgICwgSExGX1cJICAgIC8qIHdhcm5pbmcgbWVzc2FnZXMgKi8KKyAgICAsIEhMRl9XTQkgICAgLyogV2lsZG1lbnUgaGlnaGxpZ2h0ICovCisgICAgLCBITEZfRkwJICAgIC8qIEZvbGRlZCBsaW5lICovCisgICAgLCBITEZfRkMJICAgIC8qIEZvbGQgY29sdW1uICovCisgICAgLCBITEZfQURECSAgICAvKiBBZGRlZCBkaWZmIGxpbmUgKi8KKyAgICAsIEhMRl9DSEQJICAgIC8qIENoYW5nZWQgZGlmZiBsaW5lICovCisgICAgLCBITEZfREVECSAgICAvKiBEZWxldGVkIGRpZmYgbGluZSAqLworICAgICwgSExGX1RYRAkgICAgLyogVGV4dCBDaGFuZ2VkIGluIGRpZmYgbGluZSAqLworICAgICwgSExGX1NDCSAgICAvKiBTaWduIGNvbHVtbiAqLworICAgICwgSExGX0NPVU5UCSAgICAvKiBNVVNUIGJlIHRoZSBsYXN0IG9uZSAqLworfTsKKworLyogdGhlIEhMX0ZMQUdTIG11c3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEhMRl8gZW51bXMhICovCisjZGVmaW5lIEhMX0ZMQUdTIHsnOCcsICdAJywgJ2QnLCAnZScsICdoJywgJ2knLCAnbCcsICdtJywgJ00nLCBcCisJCSAgJ24nLCAncicsICdzJywgJ1MnLCAnYycsICd0JywgJ3YnLCAnVicsICd3JywgJ1cnLCBcCisJCSAgJ2YnLCAnRicsICdBJywgJ0MnLCAnRCcsICdUJywgJz4nfQorCisvKgorICogQm9vbGVhbiBjb25zdGFudHMKKyAqLworI2lmbmRlZiBUUlVFCisjIGRlZmluZSBGQUxTRQkwCSAgICAvKiBub3RlOiB0aGlzIGlzIGFuIGludCwgbm90IGEgbG9uZyEgKi8KKyMgZGVmaW5lIFRSVUUJMQorI2VuZGlmCisKKyNkZWZpbmUgTUFZQkUJMgkgICAgLyogc29tZXRpbWVzIHVzZWQgZm9yIGEgdmFyaWFudCBvbiBUUlVFICovCisKKy8qIE1heSBiZSByZXR1cm5lZCBieSBhZGRfbmV3X2NvbXBsZXRpb24oKTogKi8KKyNkZWZpbmUgUkVUX0VSUk9SCQkoLTEpCisKKy8qCisgKiBPcGVyYXRvciBJRHM7IFRoZSBvcmRlciBtdXN0IGNvcnJlc3BvbmQgdG8gb3BjaGFyc1tdIGluIG9wcy5jIQorICovCisjZGVmaW5lIE9QX05PUAkJMAkvKiBubyBwZW5kaW5nIG9wZXJhdGlvbiAqLworI2RlZmluZSBPUF9ERUxFVEUJMQkvKiAiZCIgIGRlbGV0ZSBvcGVyYXRvciAqLworI2RlZmluZSBPUF9ZQU5LCQkyCS8qICJ5IiAgeWFuayBvcGVyYXRvciAqLworI2RlZmluZSBPUF9DSEFOR0UJMwkvKiAiYyIgIGNoYW5nZSBvcGVyYXRvciAqLworI2RlZmluZSBPUF9MU0hJRlQJNAkvKiAiPCIgIGxlZnQgc2hpZnQgb3BlcmF0b3IgKi8KKyNkZWZpbmUgT1BfUlNISUZUCTUJLyogIj4iICByaWdodCBzaGlmdCBvcGVyYXRvciAqLworI2RlZmluZSBPUF9GSUxURVIJNgkvKiAiISIgIGZpbHRlciBvcGVyYXRvciAqLworI2RlZmluZSBPUF9USUxERQk3CS8qICJnfiIgc3dpdGNoIGNhc2Ugb3BlcmF0b3IgKi8KKyNkZWZpbmUgT1BfSU5ERU5UCTgJLyogIj0iICBpbmRlbnQgb3BlcmF0b3IgKi8KKyNkZWZpbmUgT1BfRk9STUFUCTkJLyogImdxIiBmb3JtYXQgb3BlcmF0b3IgKi8KKyNkZWZpbmUgT1BfQ09MT04JMTAJLyogIjoiICBjb2xvbiBvcGVyYXRvciAqLworI2RlZmluZSBPUF9VUFBFUgkxMQkvKiAiZ1UiIG1ha2UgdXBwZXIgY2FzZSBvcGVyYXRvciAqLworI2RlZmluZSBPUF9MT1dFUgkxMgkvKiAiZ3UiIG1ha2UgbG93ZXIgY2FzZSBvcGVyYXRvciAqLworI2RlZmluZSBPUF9KT0lOCQkxMwkvKiAiSiIgIGpvaW4gb3BlcmF0b3IsIG9ubHkgZm9yIFZpc3VhbCBtb2RlICovCisjZGVmaW5lIE9QX0pPSU5fTlMJMTQJLyogImdKIiAgam9pbiBvcGVyYXRvciwgb25seSBmb3IgVmlzdWFsIG1vZGUgKi8KKyNkZWZpbmUgT1BfUk9UMTMJMTUJLyogImc/IiByb3QtMTMgZW5jb2RpbmcgKi8KKyNkZWZpbmUgT1BfUkVQTEFDRQkxNgkvKiAiciIgIHJlcGxhY2UgY2hhcnMsIG9ubHkgZm9yIFZpc3VhbCBtb2RlICovCisjZGVmaW5lIE9QX0lOU0VSVAkxNwkvKiAiSSIgIEluc2VydCBjb2x1bW4sIG9ubHkgZm9yIFZpc3VhbCBtb2RlICovCisjZGVmaW5lIE9QX0FQUEVORAkxOAkvKiAiQSIgIEFwcGVuZCBjb2x1bW4sIG9ubHkgZm9yIFZpc3VhbCBtb2RlICovCisjZGVmaW5lIE9QX0ZPTEQJCTE5CS8qICJ6ZiIgZGVmaW5lIGEgZm9sZCAqLworI2RlZmluZSBPUF9GT0xET1BFTgkyMAkvKiAiem8iIG9wZW4gZm9sZHMgKi8KKyNkZWZpbmUgT1BfRk9MRE9QRU5SRUMJMjEJLyogInpPIiBvcGVuIGZvbGRzIHJlY3Vyc2l2ZWx5ICovCisjZGVmaW5lIE9QX0ZPTERDTE9TRQkyMgkvKiAiemMiIGNsb3NlIGZvbGRzICovCisjZGVmaW5lIE9QX0ZPTERDTE9TRVJFQwkyMwkvKiAiekMiIGNsb3NlIGZvbGRzIHJlY3Vyc2l2ZWx5ICovCisjZGVmaW5lIE9QX0ZPTERERUwJMjQJLyogInpkIiBkZWxldGUgZm9sZHMgKi8KKyNkZWZpbmUgT1BfRk9MRERFTFJFQwkyNQkvKiAiekQiIGRlbGV0ZSBmb2xkcyByZWN1cnNpdmVseSAqLworI2RlZmluZSBPUF9GT1JNQVQyCTI2CS8qICJndyIgZm9ybWF0IG9wZXJhdG9yLCBrZWVwcyBjdXJzb3IgcG9zICovCisKKy8qCisgKiBNb3Rpb24gdHlwZXMsIHVzZWQgZm9yIG9wZXJhdG9ycyBhbmQgZm9yIHlhbmsvZGVsZXRlIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBNQ0hBUgkwCQkvKiBjaGFyYWN0ZXItd2lzZSBtb3ZlbWVudC9yZWdpc3RlciAqLworI2RlZmluZSBNTElORQkxCQkvKiBsaW5lLXdpc2UgbW92ZW1lbnQvcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUJMT0NLCTIJCS8qIGJsb2NrLXdpc2UgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBNQVVUTwkweGZmCQkvKiBEZWNpZGUgYmV0d2VlbiBNTElORS9NQ0hBUiAqLworCisvKgorICogTWluaW11bSBzY3JlZW4gc2l6ZQorICovCisjZGVmaW5lIE1JTl9DT0xVTU5TCTEyCS8qIG1pbmltYWwgY29sdW1ucyBmb3Igc2NyZWVuICovCisjZGVmaW5lIE1JTl9MSU5FUwkyCS8qIG1pbmltYWwgbGluZXMgZm9yIHNjcmVlbiAqLworI2RlZmluZSBTVEFUVVNfSEVJR0hUCTEJLyogaGVpZ2h0IG9mIGEgc3RhdHVzIGxpbmUgdW5kZXIgYSB3aW5kb3cgKi8KKyNkZWZpbmUgUUZfV0lOSEVJR0hUCTEwCS8qIGRlZmF1bHQgaGVpZ2h0IGZvciBxdWlja2ZpeCB3aW5kb3cgKi8KKworLyoKKyAqIEJ1ZmZlciBzaXplcworICovCisjaWZuZGVmIENNREJVRkZTSVpFCisjIGRlZmluZSBDTURCVUZGU0laRQkyNTYJLyogc2l6ZSBvZiB0aGUgY29tbWFuZCBwcm9jZXNzaW5nIGJ1ZmZlciAqLworI2VuZGlmCisKKyNkZWZpbmUgTFNJWkUJICAgIDUxMgkJLyogbWF4LiBzaXplIG9mIGEgbGluZSBpbiB0aGUgdGFncyBmaWxlICovCisKKyNkZWZpbmUgSU9TSVpFCSAgICgxMDI0KzEpCS8qIGZpbGUgaS9vIGFuZCBzcHJpbnRmIGJ1ZmZlciBzaXplICovCisjZGVmaW5lIE1TR19CVUZfTEVOIDgwCQkvKiBsZW5ndGggb2YgYnVmZmVyIGZvciBzbWFsbCBtZXNzYWdlcyAqLworCisjaWYgZGVmaW5lZChBTUlHQSkgfHwgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19RTlhfXykgfHwgZGVmaW5lZChfX0NZR1dJTjMyX18pIHx8IGRlZmluZWQoX0FJWCkKKyMgZGVmaW5lIFRCVUZTWiAyMDQ4CQkvKiBidWZmZXIgc2l6ZSBmb3IgdGVybWNhcCBlbnRyeSAqLworI2Vsc2UKKyMgZGVmaW5lIFRCVUZTWiAxMDI0CQkvKiBidWZmZXIgc2l6ZSBmb3IgdGVybWNhcCBlbnRyeSAqLworI2VuZGlmCisKKy8qCisgKiBNYXhpbXVtIGxlbmd0aCBvZiBrZXkgc2VxdWVuY2UgdG8gYmUgbWFwcGVkLgorICogTXVzdCBiZSBhYmxlIHRvIGhvbGQgYW4gQW1pZ2EgcmVzaXplIHJlcG9ydC4KKyAqLworI2RlZmluZSBNQVhNQVBMRU4gICA1MAorCisjaWZkZWYgQklOQVJZX0ZJTEVfSU8KKyMgZGVmaW5lIFdSSVRFQklOICAgIndiIgkvKiBubyBDUi1MRiB0cmFuc2xhdGlvbiAqLworIyBkZWZpbmUgUkVBREJJTiAgICAicmIiCisjIGRlZmluZSBBUFBFTkRCSU4gICJhYiIKKyNlbHNlCisjIGRlZmluZSBXUklURUJJTiAgICJ3IgorIyBkZWZpbmUgUkVBREJJTiAgICAiciIKKyMgZGVmaW5lIEFQUEVOREJJTiAgImEiCisjZW5kaWYKKworLyoKKyAqIEVNWCBkb2Vzbid0IGhhdmUgYSBnbG9iYWwgd2F5IG9mIG1ha2luZyBvcGVuKCkgdXNlIGJpbmFyeSBJL08uCisgKiBVc2UgT19CSU5BUlkgZm9yIGFsbCBvcGVuKCkgY2FsbHMuCisgKi8KKyNpZiBkZWZpbmVkKF9fRU1YX18pIHx8IGRlZmluZWQoX19DWUdXSU4zMl9fKQorIyBkZWZpbmUgT19FWFRSQSAgICBPX0JJTkFSWQorI2Vsc2UKKyMgZGVmaW5lIE9fRVhUUkEgICAgMAorI2VuZGlmCisKKyNpZm5kZWYgV19PSworIyBkZWZpbmUgV19PSyAyCQkvKiBmb3Igc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgV19PSyBpbiB1bmlzdGQuaCAqLworI2VuZGlmCisjaWZuZGVmIFJfT0sKKyMgZGVmaW5lIFJfT0sgNAkJLyogZm9yIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIFJfT0sgaW4gdW5pc3RkLmggKi8KKyNlbmRpZgorCisvKgorICogZGVmaW5lcyB0byBhdm9pZCB0eXBlY2FzdHMgZnJvbSAoY2hhcl91ICopIHRvIChjaGFyICopIGFuZCBiYWNrCisgKiAodmltX3N0cmNocigpIGFuZCB2aW1fc3RycmNocigpIGFyZSBub3cgaW4gYWxsb2MuYykKKyAqLworI2RlZmluZSBTVFJMRU4ocykJICAgIHN0cmxlbigoY2hhciAqKShzKSkKKyNkZWZpbmUgU1RSQ1BZKGQsIHMpCSAgICBzdHJjcHkoKGNoYXIgKikoZCksIChjaGFyICopKHMpKQorI2RlZmluZSBTVFJOQ1BZKGQsIHMsIG4pICAgIHN0cm5jcHkoKGNoYXIgKikoZCksIChjaGFyICopKHMpLCAoc2l6ZV90KShuKSkKKyNkZWZpbmUgU1RSQ01QKGQsIHMpCSAgICBzdHJjbXAoKGNoYXIgKikoZCksIChjaGFyICopKHMpKQorI2RlZmluZSBTVFJOQ01QKGQsIHMsIG4pICAgIHN0cm5jbXAoKGNoYXIgKikoZCksIChjaGFyICopKHMpLCAoc2l6ZV90KShuKSkKKyNpZmRlZiBIQVZFX1NUUkNBU0VDTVAKKyMgZGVmaW5lIFNUUklDTVAoZCwgcykJICAgIHN0cmNhc2VjbXAoKGNoYXIgKikoZCksIChjaGFyICopKHMpKQorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TVFJJQ01QCisjICBkZWZpbmUgU1RSSUNNUChkLCBzKQkgICAgc3RyaWNtcCgoY2hhciAqKShkKSwgKGNoYXIgKikocykpCisjIGVsc2UKKyMgIGRlZmluZSBTVFJJQ01QKGQsIHMpCSAgICB2aW1fc3RyaWNtcCgoY2hhciAqKShkKSwgKGNoYXIgKikocykpCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1RSTkNBU0VDTVAKKyMgZGVmaW5lIFNUUk5JQ01QKGQsIHMsIG4pICBzdHJuY2FzZWNtcCgoY2hhciAqKShkKSwgKGNoYXIgKikocyksIChzaXplX3QpKG4pKQorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TVFJOSUNNUAorIyAgZGVmaW5lIFNUUk5JQ01QKGQsIHMsIG4pIHN0cm5pY21wKChjaGFyICopKGQpLCAoY2hhciAqKShzKSwgKHNpemVfdCkobikpCisjIGVsc2UKKyMgIGRlZmluZSBTVFJOSUNNUChkLCBzLCBuKSB2aW1fc3RybmljbXAoKGNoYXIgKikoZCksIChjaGFyICopKHMpLCAoc2l6ZV90KShuKSkKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NQllURQorIyBkZWZpbmUgTUJfU1RSSUNNUChkLCBzKQkoaGFzX21ieXRlID8gbWJfc3RybmljbXAoKGNoYXJfdSAqKShkKSwgKGNoYXJfdSAqKShzKSwgKGludClNQVhDT0wpIDogU1RSSUNNUCgoZCksIChzKSkpCisjIGRlZmluZSBNQl9TVFJOSUNNUChkLCBzLCBuKQkoaGFzX21ieXRlID8gbWJfc3RybmljbXAoKGNoYXJfdSAqKShkKSwgKGNoYXJfdSAqKShzKSwgKGludCkobikpIDogU1RSTklDTVAoKGQpLCAocyksIChuKSkpCisjZWxzZQorIyBkZWZpbmUgTUJfU1RSSUNNUChkLCBzKQlTVFJJQ01QKChkKSwgKHMpKQorIyBkZWZpbmUgTUJfU1RSTklDTVAoZCwgcywgbikJU1RSTklDTVAoKGQpLCAocyksIChuKSkKKyMgZGVmaW5lIHRyYW5zY2hhcl9ieXRlKGMpCXRyYW5zY2hhcihjKQorI2VuZGlmCisKKyNkZWZpbmUgU1RSQ0FUKGQsIHMpCSAgICBzdHJjYXQoKGNoYXIgKikoZCksIChjaGFyICopKHMpKQorI2RlZmluZSBTVFJOQ0FUKGQsIHMsIG4pICAgIHN0cm5jYXQoKGNoYXIgKikoZCksIChjaGFyICopKHMpLCAoc2l6ZV90KShuKSkKKworI2lmZGVmIEhBVkVfU1RSUEJSSworIyBkZWZpbmUgdmltX3N0cnBicmsocywgY3MpIChjaGFyX3UgKilzdHJwYnJrKChjaGFyICopKHMpLCAoY2hhciAqKShjcykpCisjZW5kaWYKKworI2RlZmluZSBNU0cocykJCQkgICAgbXNnKChjaGFyX3UgKikocykpCisjZGVmaW5lIE1TR19BVFRSKHMsIGF0dHIpCSAgICBtc2dfYXR0cigoY2hhcl91ICopKHMpLCAoYXR0cikpCisjZGVmaW5lIEVNU0cocykJCQkgICAgZW1zZygoY2hhcl91ICopKHMpKQorI2RlZmluZSBFTVNHMihzLCBwKQkJICAgIGVtc2cyKChjaGFyX3UgKikocyksIChjaGFyX3UgKikocCkpCisjZGVmaW5lIEVNU0czKHMsIHAsIHEpCQkgICAgZW1zZzMoKGNoYXJfdSAqKShzKSwgKGNoYXJfdSAqKShwKSwgKGNoYXJfdSAqKShxKSkKKyNkZWZpbmUgRU1TR04ocywgbikJCSAgICBlbXNnbigoY2hhcl91ICopKHMpLCAobG9uZykobikpCisjZGVmaW5lIE9VVF9TVFIocykJCSAgICBvdXRfc3RyKChjaGFyX3UgKikocykpCisjZGVmaW5lIE9VVF9TVFJfTkYocykJCSAgICBvdXRfc3RyX25mKChjaGFyX3UgKikocykpCisjZGVmaW5lIE1TR19QVVRTKHMpCQkgICAgbXNnX3B1dHMoKGNoYXJfdSAqKShzKSkKKyNkZWZpbmUgTVNHX1BVVFNfQVRUUihzLCBhKQkgICAgbXNnX3B1dHNfYXR0cigoY2hhcl91ICopKHMpLCAoYSkpCisjZGVmaW5lIE1TR19QVVRTX1RJVExFKHMpCSAgICBtc2dfcHV0c190aXRsZSgoY2hhcl91ICopKHMpKQorI2RlZmluZSBNU0dfUFVUU19MT05HKHMpCSAgICBtc2dfcHV0c19sb25nKChjaGFyX3UgKikocykpCisjZGVmaW5lIE1TR19QVVRTX0xPTkdfQVRUUihzLCBhKSAgICBtc2dfcHV0c19sb25nX2F0dHIoKGNoYXJfdSAqKShzKSwgKGEpKQorCisvKiBQcmVmZXIgdXNpbmcgZW1zZzMoKSwgYmVjYXVzZSBwZXJyb3IoKSBtYXkgc2VuZCB0aGUgb3V0cHV0IHRvIHRoZSB3cm9uZworICogZGVzdGluYXRpb24gYW5kIG1lc3MgdXAgdGhlIHNjcmVlbi4gKi8KKyNpZmRlZiBIQVZFX1NUUkVSUk9SCisjIGRlZmluZSBQRVJST1IobXNnKQkJICAgICh2b2lkKWVtc2czKChjaGFyX3UgKikiJXM6ICVzIiwgKGNoYXJfdSAqKW1zZywgKGNoYXJfdSAqKXN0cmVycm9yKGVycm5vKSkKKyNlbHNlCisjIGRlZmluZSBQRVJST1IobXNnKQkJICAgIHBlcnJvcihtc2cpCisjZW5kaWYKKwordHlwZWRlZiBsb25nCSAgICBsaW5lbnJfVDsJCS8qIGxpbmUgbnVtYmVyIHR5cGUgKi8KK3R5cGVkZWYgdW5zaWduZWQgICAgY29sbnJfVDsJCS8qIGNvbHVtbiBudW1iZXIgdHlwZSAqLwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBkaXNwdGlja19UOwkvKiBkaXNwbGF5IHRpY2sgdHlwZSAqLworCisjZGVmaW5lIE1BWExOVU0gKDB4N2ZmZmZmZmZMKQkJLyogbWF4aW11bSAoaW52YWxpZCkgbGluZSBudW1iZXIgKi8KKworLyoKKyAqIFdlbGwsIHlvdSB3b24ndCBiZWxpZXZlIGl0LCBidXQgc29tZSBTLzM5MCBtYWNoaW5lcyAoImhvc3QiLCBub3cgYWxzbyBrbm93bgorICogYXMgelNlcnZlcikgdXMgMzEgYml0IHBvaW50ZXJzLiBUaGVyZSBhcmUgYWxzbyBzb21lIG5ld2VyIG1hY2hpbmVzLCB0aGF0CisgKiB1c2UgNjQgYml0IHBvaW50ZXJzLiBJIGRvbid0IGtub3cgaG93IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gMzEgYW5kIDY0IGJpdAorICogbWFjaGluZXMsIHNvIHRoZSBiZXN0IHdheSBpcyB0byBhc3N1bWUgMzEgYml0cyB3aGVuZXZlciB3ZSBkZXRlY3QgT1MvMzkwCisgKiBVbml4LgorICogV2l0aCB0aGlzIHdlIHJlc3RyaWN0IHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHRvIDEwNzM3NDE4MjMuIEkgZ3Vlc3MgdGhpcyBpcworICogbm90IGEgcmVhbCBwcm9ibGVtLiBCVFc6ICBMb25nZXIgbGluZXMgYXJlIHNwbGl0LgorICovCisjaWYgU0laRU9GX0lOVCA+PSA0CisjIGlmZGVmIF9fTVZTX18KKyMgIGRlZmluZSBNQVhDT0wgKDB4M2ZmZmZmZmZMKQkJLyogbWF4aW11bSBjb2x1bW4gbnVtYmVyLCAzMCBiaXRzICovCisjIGVsc2UKKyMgIGRlZmluZSBNQVhDT0wgKDB4N2ZmZmZmZmZMKQkJLyogbWF4aW11bSBjb2x1bW4gbnVtYmVyLCAzMSBiaXRzICovCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgTUFYQ09MCSgweDdmZmYpCQkvKiBtYXhpbXVtIGNvbHVtbiBudW1iZXIsIDE1IGJpdHMgKi8KKyNlbmRpZgorCisjZGVmaW5lIFNIT1dDTURfQ09MUyAxMAkJCS8qIGNvbHVtbnMgbmVlZGVkIGJ5IHNob3duIGNvbW1hbmQgKi8KKyNkZWZpbmUgU1RMX01BWF9JVEVNIDgwCQkJLyogbWF4IG5yIG9mICU8ZmxhZz4gaW4gc3RhdHVzbGluZSAqLworCit0eXBlZGVmIHZvaWQJICAgICp2aW1fYWNsX1Q7CQkvKiBkdW1teSB0byBwYXNzIGFuIEFDTCB0byBhIGZ1bmN0aW9uICovCisKKy8qCisgKiBJbmNsdWRlIGEgcHJvdG90eXBlIGZvciBtY2hfbWVtbW92ZSgpLCBpdCBtYXkgbm90IGJlIGluIGFsbG9jLnByby4KKyAqLworI2lmZGVmIFZJTV9NRU1NT1ZFCit2b2lkIG1jaF9tZW1tb3ZlIF9fQVJHUygodm9pZCAqLCB2b2lkICosIHNpemVfdCkpOworI2Vsc2UKKyMgaWZuZGVmIG1jaF9tZW1tb3ZlCisjICBkZWZpbmUgbWNoX21lbW1vdmUodG8sIGZyb20sIGxlbikgbWVtbW92ZSh0bywgZnJvbSwgbGVuKQorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBmbmFtZWNtcCgpIGlzIHVzZWQgdG8gY29tcGFyZSBmaWxlIG5hbWVzLgorICogT24gc29tZSBzeXN0ZW1zIGNhc2UgaW4gYSBmaWxlIG5hbWUgZG9lcyBub3QgbWF0dGVyLCBvbiBvdGhlcnMgaXQgZG9lcy4KKyAqICh0aGlzIGRvZXMgbm90IGFjY291bnQgZm9yIG1heGltdW0gbmFtZSBsZW5ndGhzIGFuZCB0aGluZ3MgbGlrZSAiLi4vZGlyIiwKKyAqIHRodXMgaXQgaXMgbm90IDEwMCUgYWNjdXJhdGUhKQorICovCisjaWZkZWYgQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRQorIyBpZmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKKyMgIGRlZmluZSBmbmFtZWNtcCh4LCB5KSB2aW1fZm5hbWVjbXAoKHgpLCAoeSkpCisjICBkZWZpbmUgZm5hbWVuY21wKHgsIHksIG4pIHZpbV9mbmFtZW5jbXAoKHgpLCAoeSksIChzaXplX3QpKG4pKQorIyBlbHNlCisjICBkZWZpbmUgZm5hbWVjbXAoeCwgeSkgTUJfU1RSSUNNUCgoeCksICh5KSkKKyMgIGRlZmluZSBmbmFtZW5jbXAoeCwgeSwgbikgTUJfU1RSTklDTVAoKHgpLCAoeSksIChuKSkKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBmbmFtZWNtcCh4LCB5KSBzdHJjbXAoKGNoYXIgKikoeCksIChjaGFyICopKHkpKQorIyBkZWZpbmUgZm5hbWVuY21wKHgsIHksIG4pIHN0cm5jbXAoKGNoYXIgKikoeCksIChjaGFyICopKHkpLCAoc2l6ZV90KShuKSkKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9NRU1TRVQKKyMgZGVmaW5lIHZpbV9tZW1zZXQocHRyLCBjLCBzaXplKSAgIG1lbXNldCgocHRyKSwgKGMpLCAoc2l6ZSkpCisjZWxzZQordm9pZCAqdmltX21lbXNldCBfX0FSR1MoKHZvaWQgKiwgaW50LCBzaXplX3QpKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9NRU1DTVAKKyMgZGVmaW5lIHZpbV9tZW1jbXAocDEsIHAyLCBsZW4pICAgbWVtY21wKChwMSksIChwMiksIChsZW4pKQorI2Vsc2UKKyMgaWZkZWYgSEFWRV9CQ01QCisjICBkZWZpbmUgdmltX21lbWNtcChwMSwgcDIsIGxlbikgICBiY21wKChwMSksIChwMiksIChsZW4pKQorIyBlbHNlCitpbnQgdmltX21lbWNtcCBfX0FSR1MoKHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpKTsKKyMgIGRlZmluZSBWSU1fTUVNQ01QCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoVU5JWCkgfHwgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoVk1TKSBcCisJfHwgZGVmaW5lZChGRUFUX0NMSUVOVFNFUlZFUikKKyMgZGVmaW5lIFVTRV9JTlBVVF9CVUYKKyNlbmRpZgorCisjaWZkZWYgTVNXSU4KKy8qIE9uIE1TLVdpbmRvd3MgdGhlIHRoaXJkIGFyZ3VtZW50IGlzbid0IHNpemVfdC4gIFRoaXMgbWF0dGVycyBmb3IgV2luNjQsCisgKiB3aGVyZSBzaXplb2Yoc2l6ZV90KT09OCwgbm90IDQgKi8KKyMgZGVmaW5lIHZpbV9yZWFkKGZkLCBidWYsIGNvdW50KSAgIHJlYWQoKGZkKSwgKGNoYXIgKikoYnVmKSwgKHVuc2lnbmVkIGludCkoY291bnQpKQorIyBkZWZpbmUgdmltX3dyaXRlKGZkLCBidWYsIGNvdW50KSAgd3JpdGUoKGZkKSwgKGNoYXIgKikoYnVmKSwgKHVuc2lnbmVkIGludCkoY291bnQpKQorI2Vsc2UKKyMgZGVmaW5lIHZpbV9yZWFkKGZkLCBidWYsIGNvdW50KSAgIHJlYWQoKGZkKSwgKGNoYXIgKikoYnVmKSwgKHNpemVfdCkgKGNvdW50KSkKKyMgZGVmaW5lIHZpbV93cml0ZShmZCwgYnVmLCBjb3VudCkgIHdyaXRlKChmZCksIChjaGFyICopKGJ1ZiksIChzaXplX3QpIChjb3VudCkpCisjZW5kaWYKKworLyoKKyAqIEVudW1zIG5lZWQgYSB0eXBlY2FzdCB0byBiZSB1c2VkIGFzIGFycmF5IGluZGV4IChmb3IgVWx0cml4KS4KKyAqLworI2RlZmluZSBobF9hdHRyKG4pCWhpZ2hsaWdodF9hdHRyWyhpbnQpKG4pXQorI2RlZmluZSB0ZXJtX3N0cihuKQl0ZXJtX3N0cmluZ3NbKGludCkobildCisKKy8qCisgKiB2aW1faXN3aGl0ZSgpIGlzIHVzZWQgZm9yICJeIiBhbmQgdGhlIGxpa2UuIEl0IGRpZmZlcnMgZnJvbSBpc3NwYWNlKCkKKyAqIGJlY2F1c2UgaXQgZG9lc24ndCBpbmNsdWRlIDxDUj4gYW5kIDxMRj4gYW5kIHRoZSBsaWtlLgorICovCisjZGVmaW5lIHZpbV9pc3doaXRlKHgpCSgoeCkgPT0gJyAnIHx8ICh4KSA9PSAnXHQnKQorCisvKiBOb3RlIHRoYXQgZ3VpLmggaXMgaW5jbHVkZWQgYnkgc3RydWN0cy5oICovCisKKyNpbmNsdWRlICJzdHJ1Y3RzLmgiCSAgICAvKiBmaWxlIHRoYXQgZGVmaW5lcyBtYW55IHN0cnVjdHVyZXMgKi8KKworI2lmZGVmIEZFQVRfTU9VU0UKKworLyogQ29kZXMgZm9yIG1vdXNlIGJ1dHRvbiBldmVudHMgaW4gbG93ZXIgdGhyZWUgYml0czogKi8KKyMgZGVmaW5lIE1PVVNFX0xFRlQJMHgwMAorIyBkZWZpbmUgTU9VU0VfTUlERExFCTB4MDEKKyMgZGVmaW5lIE1PVVNFX1JJR0hUCTB4MDIKKyMgZGVmaW5lIE1PVVNFX1JFTEVBU0UJMHgwMworCisvKiBiaXQgbWFza3MgZm9yIG1vZGlmaWVyczogKi8KKyMgZGVmaW5lIE1PVVNFX1NISUZUCTB4MDQKKyMgZGVmaW5lIE1PVVNFX0FMVAkweDA4CisjIGRlZmluZSBNT1VTRV9DVFJMCTB4MTAKKworLyogbW91c2UgYnV0dG9ucyB0aGF0IGFyZSBoYW5kbGVkIGxpa2UgYSBrZXkgcHJlc3MgKEdVSSBvbmx5KSAqLworIyBkZWZpbmUgTU9VU0VfNAkweDEwMAkvKiBzY3JvbGwgd2hlZWwgZG93biAqLworIyBkZWZpbmUgTU9VU0VfNQkweDIwMAkvKiBzY3JvbGwgd2hlZWwgdXAgKi8KKworIyBkZWZpbmUgTU9VU0VfWDEJMHgzMDAgLyogTW91c2UtYnV0dG9uIFgxICg2dGgpICovCisjIGRlZmluZSBNT1VTRV9YMgkweDQwMCAvKiBNb3VzZS1idXR0b24gWDIgKi8KKworLyogMHgyMCBpcyByZXNlcnZlZCBieSB4dGVybSAqLworIyBkZWZpbmUgTU9VU0VfRFJBR19YVEVSTSAgIDB4NDAKKworIyBkZWZpbmUgTU9VU0VfRFJBRwkoMHg0MCB8IE1PVVNFX1JFTEVBU0UpCisKKy8qIExvd2VzdCBidXR0b24gY29kZSBmb3IgdXNpbmcgdGhlIG1vdXNlIHdoZWVsICh4dGVybSBvbmx5KSAqLworIyBkZWZpbmUgTU9VU0VXSEVFTF9MT1cJCTB4NjAKKworIyBkZWZpbmUgTU9VU0VfQ0xJQ0tfTUFTSwkweDAzCisKKyMgZGVmaW5lIE5VTV9NT1VTRV9DTElDS1MoY29kZSkgXAorICAgICgoKHVuc2lnbmVkKSgoY29kZSkgJiAweEMwKSA+PiA2KSArIDEpCisKKyMgZGVmaW5lIFNFVF9OVU1fTU9VU0VfQ0xJQ0tTKGNvZGUsIG51bSkgXAorICAgIChjb2RlKSA9ICgoY29kZSkgJiAweDNmKSB8ICgoKChudW0pIC0gMSkgJiAzKSA8PCA2KQorCisvKgorICoganVtcF90b19tb3VzZSgpIHJldHVybnMgb25lIG9mIGZpcnN0IGZvdXIgdGhlc2UgdmFsdWVzLCBwb3NzaWJseSB3aXRoCisgKiBzb21lIG9mIHRoZSBvdGhlciB0aHJlZSBhZGRlZC4KKyAqLworIyBkZWZpbmUgSU5fVU5LTk9XTgkJMAorIyBkZWZpbmUgSU5fQlVGRkVSCQkxCisjIGRlZmluZSBJTl9TVEFUVVNfTElORQkJMgkvKiBvbiBzdGF0dXMgb3IgY29tbWFuZCBsaW5lICovCisjIGRlZmluZSBJTl9TRVBfTElORQkJNAkvKiBvbiB2ZXJ0aWNhbCBzZXBhcmF0b3IgbGluZSAqLworIyBkZWZpbmUgSU5fT1RIRVJfV0lOCQk4CS8qIGluIG90aGVyIHdpbmRvdyBidXQgY2FuJ3QgZ28gdGhlcmUgKi8KKyMgZGVmaW5lIENVUlNPUl9NT1ZFRAkJMHgxMDAKKyMgZGVmaW5lIE1PVVNFX0ZPTERfQ0xPU0UJMHgyMDAJLyogY2xpY2tlZCBvbiAnLScgaW4gZm9sZCBjb2x1bW4gKi8KKyMgZGVmaW5lIE1PVVNFX0ZPTERfT1BFTgkweDQwMAkvKiBjbGlja2VkIG9uICcrJyBpbiBmb2xkIGNvbHVtbiAqLworCisvKiBmbGFncyBmb3IganVtcF90b19tb3VzZSgpICovCisjIGRlZmluZSBNT1VTRV9GT0NVUwkJMHgwMQkvKiBuZWVkIHRvIHN0YXkgaW4gdGhpcyB3aW5kb3cgKi8KKyMgZGVmaW5lIE1PVVNFX01BWV9WSVMJCTB4MDIJLyogbWF5IHN0YXJ0IFZpc3VhbCBtb2RlICovCisjIGRlZmluZSBNT1VTRV9ESURfTU9WRQkJMHgwNAkvKiBvbmx5IGFjdCB3aGVuIG1vdXNlIGhhcyBtb3ZlZCAqLworIyBkZWZpbmUgTU9VU0VfU0VUUE9TCQkweDA4CS8qIG9ubHkgc2V0IGN1cnJlbnQgbW91c2UgcG9zaXRpb24gKi8KKyMgZGVmaW5lIE1PVVNFX01BWV9TVE9QX1ZJUwkweDEwCS8qIG1heSBzdG9wIFZpc3VhbCBtb2RlICovCisjIGRlZmluZSBNT1VTRV9SRUxFQVNFRAkJMHgyMAkvKiBidXR0b24gd2FzIHJlbGVhc2VkICovCisKKyMgaWYgZGVmaW5lZChVTklYKSAmJiBkZWZpbmVkKEhBVkVfR0VUVElNRU9GREFZKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1RJTUVfSCkKKyMgIGRlZmluZSBDSEVDS19ET1VCTEVfQ0xJQ0sgMQkvKiBDaGVja2luZyBmb3IgZG91YmxlIGNsaWNrcyBvdXJzZWx2ZXMuICovCisjIGVuZGlmCisKKyNlbmRpZiAvKiBGRUFUX01PVVNFICovCisKKy8qIGRlZmluZXMgZm9yIGV2YWxfdmFycygpICovCisjZGVmaW5lIFZBTElEX1BBVEgJCTEKKyNkZWZpbmUgVkFMSURfSEVBRAkJMgorCisvKiBEZWZpbmVzIGZvciBWaW0gdmFyaWFibGVzLiAgVGhlc2UgbXVzdCBtYXRjaCB2aW12YXJzW10gaW4gZXZhbC5jISAqLworI2RlZmluZSBWVl9DT1VOVAkwCisjZGVmaW5lIFZWX0NPVU5UMQkxCisjZGVmaW5lIFZWX1BSRVZDT1VOVAkyCisjZGVmaW5lIFZWX0VSUk1TRwkzCisjZGVmaW5lIFZWX1dBUk5JTkdNU0cJNAorI2RlZmluZSBWVl9TVEFUVVNNU0cJNQorI2RlZmluZSBWVl9TSEVMTF9FUlJPUgk2CisjZGVmaW5lIFZWX1RISVNfU0VTU0lPTgk3CisjZGVmaW5lIFZWX1ZFUlNJT04JOAorI2RlZmluZSBWVl9MTlVNCQk5CisjZGVmaW5lIFZWX1RFUk1SRVNQT05TRQkxMAorI2RlZmluZSBWVl9GTkFNRQkxMQorI2RlZmluZSBWVl9MQU5HCQkxMgorI2RlZmluZSBWVl9MQ19USU1FCTEzCisjZGVmaW5lIFZWX0NUWVBFCTE0CisjZGVmaW5lIFZWX0NDX0ZST00JMTUKKyNkZWZpbmUgVlZfQ0NfVE8JMTYKKyNkZWZpbmUgVlZfRk5BTUVfSU4JMTcKKyNkZWZpbmUgVlZfRk5BTUVfT1VUCTE4CisjZGVmaW5lIFZWX0ZOQU1FX05FVwkxOQorI2RlZmluZSBWVl9GTkFNRV9ESUZGCTIwCisjZGVmaW5lIFZWX0NNREFSRwkyMQorI2RlZmluZSBWVl9GT0xEU1RBUlQJMjIKKyNkZWZpbmUgVlZfRk9MREVORAkyMworI2RlZmluZSBWVl9GT0xEREFTSEVTCTI0CisjZGVmaW5lIFZWX0ZPTERMRVZFTAkyNQorI2RlZmluZSBWVl9QUk9HTkFNRQkyNgorI2RlZmluZSBWVl9TRU5EX1NFUlZFUgkyNworI2RlZmluZSBWVl9EWUlORwkyOAorI2RlZmluZSBWVl9FWENFUFRJT04JMjkKKyNkZWZpbmUgVlZfVEhST1dQT0lOVAkzMAorI2RlZmluZSBWVl9SRUcJCTMxCisjZGVmaW5lIFZWX0NNREJBTkcJMzIKKyNkZWZpbmUgVlZfTEVOCQkzMwkvKiBudW1iZXIgb2YgdjogdmFycyAqLworCisjaWZkZWYgRkVBVF9DTElQQk9BUkQKKworLyogVklNX0FUT01fTkFNRSBpcyB0aGUgb2xkZXIgVmltLXNwZWNpZmljIHNlbGVjdGlvbiB0eXBlIGZvciBYMTEuICBTdGlsbAorICogc3VwcG9ydGVkIGZvciB3aGVuIGEgbWl4IG9mIFZpbSB2ZXJzaW9ucyBpcyB1c2VkLiBWSU1FTkNfQVRPTV9OQU1FIGluY2x1ZGVzCisgKiB0aGUgZW5jb2RpbmcgdG8gc3VwcG9ydCBWaW1zIHVzaW5nIGRpZmZlcmVudCAnZW5jb2RpbmcnIHZhbHVlcy4gKi8KKyNkZWZpbmUgVklNX0FUT01fTkFNRSAiX1ZJTV9URVhUIgorI2RlZmluZSBWSU1FTkNfQVRPTV9OQU1FICJfVklNRU5DX1RFWFQiCisKKy8qIFNlbGVjdGlvbiBzdGF0ZXMgZm9yIG1vZGVsZXNzIHNlbGVjdGlvbiAqLworIyBkZWZpbmUgU0VMRUNUX0NMRUFSRUQJCTAKKyMgZGVmaW5lIFNFTEVDVF9JTl9QUk9HUkVTUwkxCisjIGRlZmluZSBTRUxFQ1RfRE9ORQkJMgorCisjIGRlZmluZSBTRUxFQ1RfTU9ERV9DSEFSCTAKKyMgZGVmaW5lIFNFTEVDVF9NT0RFX1dPUkQJMQorIyBkZWZpbmUgU0VMRUNUX01PREVfTElORQkyCisKKyMgaWZkZWYgRkVBVF9HVUlfVzMyCisjICBpZmRlZiBGRUFUX09MRQorIyAgIGRlZmluZSBXTV9PTEUgKFdNX0FQUCswKQorIyAgZW5kaWYKKyMgIGlmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworICAgIC8qIG1lc3NhZ2UgZm9yIE5ldGJlYW5zIHNvY2tldCBldmVudCAqLworIyAgIGRlZmluZSBXTV9ORVRCRUFOUyAoV01fQVBQKzEpCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBJbmZvIGFib3V0IHNlbGVjdGVkIHRleHQgKi8KK3R5cGVkZWYgc3RydWN0IFZpbUNsaXBib2FyZAoreworICAgIGludAkJYXZhaWxhYmxlOwkvKiBJcyBjbGlwYm9hcmQgYXZhaWxhYmxlPyAqLworICAgIGludAkJb3duZWQ7CQkvKiBGbGFnOiBkbyB3ZSBvd24gdGhlIHNlbGVjdGlvbj8gKi8KKyAgICBwb3NfVAlzdGFydDsJCS8qIFN0YXJ0IG9mIHNlbGVjdGVkIGFyZWEgKi8KKyAgICBwb3NfVAllbmQ7CQkvKiBFbmQgb2Ygc2VsZWN0ZWQgYXJlYSAqLworICAgIGludAkJdm1vZGU7CQkvKiBWaXN1YWwgbW9kZSBjaGFyYWN0ZXIgKi8KKworICAgIC8qIEZpZWxkcyBmb3Igc2VsZWN0aW9uIHRoYXQgZG9lc24ndCB1c2UgVmlzdWFsIG1vZGUgKi8KKyAgICBzaG9ydF91CW9yaWdpbl9yb3c7CisgICAgc2hvcnRfdQlvcmlnaW5fc3RhcnRfY29sOworICAgIHNob3J0X3UJb3JpZ2luX2VuZF9jb2w7CisgICAgc2hvcnRfdQl3b3JkX3N0YXJ0X2NvbDsKKyAgICBzaG9ydF91CXdvcmRfZW5kX2NvbDsKKworICAgIHBvc19UCXByZXY7CQkvKiBQcmV2aW91cyBwb3NpdGlvbiAqLworICAgIHNob3J0X3UJc3RhdGU7CQkvKiBDdXJyZW50IHNlbGVjdGlvbiBzdGF0ZSAqLworICAgIHNob3J0X3UJbW9kZTsJCS8qIFNlbGVjdCBieSBjaGFyLCB3b3JkLCBvciBsaW5lLiAqLworCisjIGlmIGRlZmluZWQoRkVBVF9HVUlfWDExKSB8fCBkZWZpbmVkKEZFQVRfWENMSVBCT0FSRCkKKyAgICBBdG9tCXNlbF9hdG9tOwkvKiBQUklNQVJZL0NMSVBCT0FSRCBzZWxlY3Rpb24gSUQgKi8KKyMgZW5kaWYKKworIyBpZmRlZiBGRUFUX0dVSV9HVEsKKyAgICBHZGtBdG9tICAgICBndGtfc2VsX2F0b207CS8qIFBSSU1BUlkvQ0xJUEJPQVJEIHNlbGVjdGlvbiBJRCAqLworIyBlbmRpZgorCisjIGlmZGVmIE1TV0lOCisgICAgaW50X3UJZm9ybWF0OwkJLyogVmltJ3Mgb3duIHNwZWNpYWwgY2xpcGJvYXJkIGZvcm1hdCAqLworICAgIGludF91CWZvcm1hdF9yYXc7CS8qIFZpbSdzIHJhdyB0ZXh0IGNsaXBib2FyZCBmb3JtYXQgKi8KKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9HVUlfQkVPUworCQkJCS8qIG5vIGNsaXBib2FyZCBhdCB0aGUgbW9tZW50ICovCisjIGVuZGlmCit9IFZpbUNsaXBib2FyZDsKKyNlbHNlCit0eXBlZGVmIGludCBWaW1DbGlwYm9hcmQ7CS8qIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBwcm90b3R5cGVzLiAqLworI2VuZGlmCisKKyNpZmRlZiBfX0JPUkxBTkRDX18KKy8qIHdvcmsgYXJvdW5kIGEgYnVnIGluIHRoZSBCb3JsYW5kICdzdGF0JyBmdW5jdGlvbjogKi8KKyMgaW5jbHVkZSA8aW8uaD4JICAgIC8qIGZvciBhY2Nlc3MoKSAqLworCisjIGRlZmluZSBzdGF0KGEsYikgKGFjY2VzcyhhLDApID8gLTEgOiBzdGF0KGEsYikpCisjZW5kaWYKKworLyoKKyAqIEVYVEVSTiBpcyBvbmx5IGRlZmluZWQgaW4gbWFpbi5jLiAgVGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYXJlCisgKiBhY3R1YWxseSBkZWZpbmVkIGFuZCBpbml0aWFsaXplZC4KKyAqLworI2lmbmRlZiBFWFRFUk4KKyMgZGVmaW5lIEVYVEVSTiBleHRlcm4KKyMgZGVmaW5lIElOSVQoeCkKKyNlbHNlCisjIGlmbmRlZiBJTklUCisjICBkZWZpbmUgSU5JVCh4KSB4CisjICBkZWZpbmUgRE9fSU5JVAorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlICJvcHRpb24uaCIJICAgIC8qIG9wdGlvbiB2YXJpYWJsZXMgYW5kIGRlZmluZXMgKi8KKyNpbmNsdWRlICJleF9jbWRzLmgiCSAgICAvKiBFeCBjb21tYW5kIGRlZmluZXMgKi8KKyNpbmNsdWRlICJwcm90by5oIgkgICAgLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLworCisvKiBUaGlzIGhhcyB0byBnbyBhZnRlciB0aGUgaW5jbHVkZSBvZiBwcm90by5oLCBhcyBwcm90by9ndWkucHJvIGRlY2xhcmVzCisgKiBmdW5jdGlvbnMgb2YgdGhlc2UgbmFtZXMuIFRoZSBkZWNsYXJhdGlvbnMgd291bGQgYnJlYWsgaWYgdGhlIGRlZmluZXMgaGFkCisgKiBiZWVuIHNlZW4gYXQgdGhhdCBzdGFnZS4gIEJ1dCBpdCBtdXN0IGJlIGJlZm9yZSBnbG9iYWxzLmgsIHdoZXJlIGVycm9yX2dhCisgKiBpcyBkZWNsYXJlZC4gKi8KKyNpZiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpICYmICFkZWZpbmVkKEZFQVRfR1VJX1gxMSkgXAorCSYmICFkZWZpbmVkKEZFQVRfR1VJX0dUSykgJiYgIWRlZmluZWQoRkVBVF9HVUlfTUFDKQorIyBkZWZpbmUgbWNoX2Vycm1zZyhzdHIpCWZwcmludGYoc3RkZXJyLCAiJXMiLCAoc3RyKSkKKyMgZGVmaW5lIGRpc3BsYXlfZXJyb3JzKCkJZmZsdXNoKHN0ZGVycikKKyMgZGVmaW5lIG1jaF9tc2coc3RyKQkJcHJpbnRmKCIlcyIsIChzdHIpKQorI2Vsc2UKKyMgZGVmaW5lIFVTRV9NQ0hfRVJSTVNHCisjZW5kaWYKKworI2luY2x1ZGUgImdsb2JhbHMuaCIJICAgIC8qIGdsb2JhbCB2YXJpYWJsZXMgYW5kIG1lc3NhZ2VzICovCisKKyNpZmRlZiBGRUFUX1NOSUZGCisjIGluY2x1ZGUgImlmX3NuaWZmLmgiCisjZW5kaWYKKworI2lmbmRlZiBGRUFUX1ZJUlRVQUxFRElUCisjIGRlZmluZSBnZXR2dmNvbCh3LCBwLCBzLCBjLCBlKSBnZXR2Y29sKHcsIHAsIHMsIGMsIGUpCisjIGRlZmluZSB2aXJ0dWFsX2FjdGl2ZSgpIDAKKyMgZGVmaW5lIHZpcnR1YWxfb3AgRkFMU0UKKyNlbmRpZgorCisvKgorICogSWYgY29uc29sZSBkaWFsb2cgbm90IHN1cHBvcnRlZCwgYnV0IEdVSSBkaWFsb2cgaXMsIHVzZSB0aGUgR1VJIG9uZS4KKyAqLworI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSAmJiAhZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCisjIGRlZmluZSBkb19kaWFsb2cgZ3VpX21jaF9kaWFsb2cKKyNlbmRpZgorCisvKgorICogRGVmYXVsdCBmaWx0ZXJzIGZvciBndWlfbWNoX2Jyb3dzZSgpLgorICogVGhlIGZpbHRlcnMgYXJlIGFsbW9zdCBzeXN0ZW0gaW5kZXBlbmRlbnQuICBFeGNlcHQgZm9yIHRoZSBkaWZmZXJlbmNlCisgKiBiZXR3ZWVuICIqIiBhbmQgIiouKiIgZm9yIE1TRE9TLWxpa2Ugc3lzdGVtcy4KKyAqIE5PVEU6IE1vdGlmIG9ubHkgdXNlcyB0aGUgdmVyeSBmaXJzdCBwYXR0ZXJuLiAgVGhlcmVmb3JlCisgKiBCUk9XU0VfRklMVEVSX0RFRkFVTFQgc2hvdWxkIHN0YXJ0IHdpdGggYSAiKiIgcGF0dGVybi4KKyAqLworI2lmZGVmIEZFQVRfQlJPV1NFCisjIGlmZGVmIEJBQ0tTTEFTSF9JTl9GSUxFTkFNRQorIyAgZGVmaW5lIEJST1dTRV9GSUxURVJfTUFDUk9TIFwKKwkoY2hhcl91ICopIlZpbSBtYWNybyBmaWxlcyAoKi52aW0pXHQqLnZpbVxuQWxsIEZpbGVzICgqLiopXHQqLipcbiIKKyMgIGRlZmluZSBCUk9XU0VfRklMVEVSX0FMTF9GSUxFUyAoY2hhcl91ICopIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG4iCisjICBkZWZpbmUgQlJPV1NFX0ZJTFRFUl9ERUZBVUxUIFwKKwkoY2hhcl91ICopIkFsbCBGaWxlcyAoKi4qKVx0Ki4qXG5DIHNvdXJjZSAoKi5jLCAqLmgpXHQqLmM7Ki5oXG5DKysgc291cmNlICgqLmNwcCwgKi5ocHApXHQqLmNwcDsqLmhwcFxuVkIgY29kZSAoKi5iYXMsICouZnJtKVx0Ki5iYXM7Ki5mcm1cblZpbSBmaWxlcyAoKi52aW0sIF92aW1yYywgX2d2aW1yYylcdCoudmltO192aW1yYztfZ3ZpbXJjXG4iCisjIGVsc2UKKyMgIGRlZmluZSBCUk9XU0VfRklMVEVSX01BQ1JPUyBcCisJKGNoYXJfdSAqKSJWaW0gbWFjcm8gZmlsZXMgKCoudmltKVx0Ki52aW1cbkFsbCBGaWxlcyAoKilcdCpcbiIKKyMgIGRlZmluZSBCUk9XU0VfRklMVEVSX0FMTF9GSUxFUyAoY2hhcl91ICopIkFsbCBGaWxlcyAoKilcdCpcbiIKKyMgIGRlZmluZSBCUk9XU0VfRklMVEVSX0RFRkFVTFQgXAorCShjaGFyX3UgKikiQWxsIEZpbGVzICgqKVx0KlxuQyBzb3VyY2UgKCouYywgKi5oKVx0Ki5jOyouaFxuQysrIHNvdXJjZSAoKi5jcHAsICouaHBwKVx0Ki5jcHA7Ki5ocHBcblZpbSBmaWxlcyAoKi52aW0sIF92aW1yYywgX2d2aW1yYylcdCoudmltO192aW1yYztfZ3ZpbXJjXG4iCisjIGVuZGlmCisjZW5kaWYKKworLyogc3RvcCB1c2luZyBmYXN0Y2FsbCBmb3IgQm9ybGFuZCAqLworI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChERUJVRykKKyMgcHJhZ21hIG9wdGlvbiAtcC4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNRU1fUFJPRklMRSkKKyMgZGVmaW5lIHZpbV9yZWFsbG9jKHB0ciwgc2l6ZSkgIG1lbV9yZWFsbG9jKChwdHIpLCAoc2l6ZSkpCisjZWxzZQorIyBkZWZpbmUgdmltX3JlYWxsb2MocHRyLCBzaXplKSAgcmVhbGxvYygocHRyKSwgKHNpemUpKQorI2VuZGlmCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBzdG9wIGRpc3BsYXQvZXZlbnQgbG9vcCBuZXN0aW5nIGF0IHRoZSB3cm9uZyB0aW1lLgorICovCisjaWZkZWYgQUxUX1hfSU5QVVQKKyMgZGVmaW5lIEFMVF9JTlBVVF9MT0NLX09GRglzdXBwcmVzc19hbHRlcm5hdGVfaW5wdXQgPSBGQUxTRQorIyBkZWZpbmUgQUxUX0lOUFVUX0xPQ0tfT04Jc3VwcHJlc3NfYWx0ZXJuYXRlX2lucHV0ID0gVFJVRQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX01CWVRFCisvKiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiAgSXQgY2FuIGJlIG9uZSAzMi1iaXQKKyAqIGNoYXJhY3RlciBvZiB1cCB0byA2IGJ5dGVzLCBvciBvbmUgMTYtYml0IGNoYXJhY3RlciBvZiB1cCB0byB0aHJlZSBieXRlcworICogcGx1cyB0d28gZm9sbG93aW5nIGNvbXBvc2luZyBjaGFyYWN0ZXJzIG9mIHRocmVlIGJ5dGVzIGVhY2guICovCisjIGRlZmluZSBNQl9NQVhCWVRFUwk5CisKKy8qCisgKiBSZXR1cm4gYnl0ZSBsZW5ndGggb2YgY2hhcmFjdGVyIHRoYXQgc3RhcnRzIHdpdGggYnl0ZSAiYiIuCisgKiBSZXR1cm5zIDEgZm9yIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyLgorICogTUJfQllURTJMRU5fQ0hFQ0soKSBjYW4gYmUgdXNlZCB0byBjb3VudCBhIHNwZWNpYWwga2V5IGFzIG9uZSBieXRlLgorICogRG9uJ3QgY2FsbCBNQl9CWVRFMkxFTihiKSB3aXRoIGIgPCAwIG9yIGIgPiAyNTUhCisgKi8KKyMgZGVmaW5lIE1CX0JZVEUyTEVOKGIpCQltYl9ieXRlbGVuX3RhYltiXQorIyBkZWZpbmUgTUJfQllURTJMRU5fQ0hFQ0soYikJKCgoYikgPCAwIHx8IChiKSA+IDI1NSkgPyAxIDogbWJfYnl0ZWxlbl90YWJbYl0pCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9NQllURSkgfHwgZGVmaW5lZChGRUFUX1BPU1RTQ1JJUFQpCisvKiBwcm9wZXJ0aWVzIHVzZWQgaW4gZW5jX2Nhbm9uX3RhYmxlW10gKGZpcnN0IHRocmVlIG11dHVhbGx5IGV4Y2x1c2l2ZSkgKi8KKyMgZGVmaW5lIEVOQ184QklUCTB4MDEKKyMgZGVmaW5lIEVOQ19EQkNTCTB4MDIKKyMgZGVmaW5lIEVOQ19VTklDT0RFCTB4MDQKKworIyBkZWZpbmUgRU5DX0VORElBTl9CCTB4MTAJICAgIC8qIFVuaWNvZGU6IEJpZyBlbmRpYW4gKi8KKyMgZGVmaW5lIEVOQ19FTkRJQU5fTAkweDIwCSAgICAvKiBVbmljb2RlOiBMaXR0bGUgZW5kaWFuICovCisKKyMgZGVmaW5lIEVOQ18yQllURQkweDQwCSAgICAvKiBVbmljb2RlOiBVQ1MtMiAqLworIyBkZWZpbmUgRU5DXzRCWVRFCTB4ODAJICAgIC8qIFVuaWNvZGU6IFVDUy00ICovCisjIGRlZmluZSBFTkNfMldPUkQJMHgxMDAJICAgIC8qIFVuaWNvZGU6IFVURi0xNiAqLworCisjIGRlZmluZSBFTkNfTEFUSU4xCTB4MjAwCSAgICAvKiBMYXRpbjEgKi8KKyMgZGVmaW5lIEVOQ19NQUNST01BTgkweDQwMAkgICAgLyogTWFjIFJvbWFuIChub3QgTWFjcm8gTWFuISA6LSkgKi8KKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NQllURQorIyBpZmRlZiBVU0VfSUNPTlYKKyMgIGlmbmRlZiBFSUxTRVEKKyMgICBkZWZpbmUgRUlMU0VRIDEyMworIyAgZW5kaWYKKyMgIGlmZGVmIERZTkFNSUNfSUNPTlYKKy8qIE9uIFdpbjMyIGljb252LmRsbCBpcyBkeW5hbWljYWxseSBsb2FkZWQuICovCisjICAgZGVmaW5lIElDT05WX0VSUk5PICgqaWNvbnZfZXJybm8oKSkKKyMgICBkZWZpbmUgSUNPTlZfRTJCSUcgIDcKKyMgICBkZWZpbmUgSUNPTlZfRUlOVkFMIDIyCisjICAgZGVmaW5lIElDT05WX0VJTFNFUSA0MgorIyAgZWxzZQorIyAgIGRlZmluZSBJQ09OVl9FUlJOTyBlcnJubworIyAgIGRlZmluZSBJQ09OVl9FMkJJRyAgRTJCSUcKKyMgICBkZWZpbmUgSUNPTlZfRUlOVkFMIEVJTlZBTAorIyAgIGRlZmluZSBJQ09OVl9FSUxTRVEgRUlMU0VRCisjICBlbmRpZgorIyBlbmRpZgorCisjZW5kaWYKKworLyogSVNTWU1MSU5LKG1vZGUpIHRlc3RzIGlmIGEgZmlsZSBpcyBhIHN5bWJvbGljIGxpbmsuICovCisjaWYgKGRlZmluZWQoU19JRk1UKSAmJiBkZWZpbmVkKFNfSUZMTkspKSB8fCBkZWZpbmVkKFNfSVNMTkspCisjIGRlZmluZSBIQVZFX0lTU1lNTElOSworIyBpZiBkZWZpbmVkKFNfSUZNVCkgJiYgZGVmaW5lZChTX0lGTE5LKQorIyAgZGVmaW5lIElTU1lNTElOSyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRkxOSykKKyMgZWxzZQorIyAgZGVmaW5lIElTU1lNTElOSyhtb2RlKSBTX0lTTE5LKG1vZGUpCisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBTSUdOX0JZVEUgMQkgICAgLyogYnl0ZSB2YWx1ZSB1c2VkIHdoZXJlIHNpZ24gaXMgZGlzcGxheWVkOworCQkJICAgICAgIGF0dHJpYnV0ZSB2YWx1ZSBpcyBzaWduIHR5cGUgKi8KKworI2lmZGVmIEZFQVRfTkVUQkVBTlNfSU5URworIyBkZWZpbmUgTVVMVElTSUdOX0JZVEUgMiAgIC8qIGJ5dGUgdmFsdWUgdXNlZCB3aGVyZSBzaWduIGlzIGRpc3BsYXllZCBpZgorCQkJICAgICAgIG11bHRpcGxlIHNpZ25zIGV4aXN0IG9uIHRoZSBsaW5lICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9HVUkpICYmIGRlZmluZWQoRkVBVF9YQ0xJUEJPQVJEKQorIyBpZmRlZiBGRUFUX0dVSV9HVEsKKyAgIC8qIEF2b2lkIHVzaW5nIGEgZ2xvYmFsIHZhcmlhYmxlIGZvciB0aGUgWCBkaXNwbGF5LiAgSXQncyB1Z2x5CisgICAgKiBhbmQgaXMgbGlrZWx5IHRvIGNhdXNlIHRyb3VibGUgaW4gbXVsdGloZWFkIGVudmlyb25tZW50cy4gKi8KKyMgIGRlZmluZSBYX0RJU1BMQVkJKChndWkuaW5fdXNlKSA/IGd1aV9tY2hfZ2V0X2Rpc3BsYXkoKSA6IHh0ZXJtX2RweSkKKyMgZWxzZQorIyAgZGVmaW5lIFhfRElTUExBWQkoZ3VpLmluX3VzZSA/IGd1aS5kcHkgOiB4dGVybV9kcHkpCisjIGVuZGlmCisjZWxzZQorIyBpZmRlZiBGRUFUX0dVSQorIyAgaWZkZWYgRkVBVF9HVUlfR1RLCisjICAgZGVmaW5lIFhfRElTUExBWQkoKGd1aS5pbl91c2UpID8gZ3VpX21jaF9nZXRfZGlzcGxheSgpIDogKERpc3BsYXkgKilOVUxMKQorIyAgZWxzZQorIyAgIGRlZmluZSBYX0RJU1BMQVkJZ3VpLmRweQorIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5lIFhfRElTUExBWQl4dGVybV9kcHkKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgTkJERUJVRyAvKiBOZXRiZWFucyBkZWJ1Z2dpbmcuICovCisjIGluY2x1ZGUgIm5iZGVidWcuaCIKKyNlbHNlCisjIGRlZmluZSBuYmRlYnVnKGEpCisjZW5kaWYKKworI2lmZGVmIElOX1BFUkxfRklMRQorICAvKgorICAgKiBBdm9pZCBjbGFzaGVzIGJldHdlZW4gUGVybCBhbmQgVmltIG5hbWVzcGFjZS4KKyAgICovCisjIHVuZGVmIE5PUk1BTAorIyB1bmRlZiBTVFJMRU4KKyMgdW5kZWYgRkYKKyMgdW5kZWYgT1BfREVMRVRFCisjIHVuZGVmIE9QX0pPSU4KKyMgaWZkZWYgX19CT1JMQU5EQ19fCisjICBkZWZpbmUgTk9QUk9UTyAxCisjIGVuZGlmCisgIC8qIHJlbW92ZSBNQVggYW5kIE1JTiwgaW5jbHVkZWQgYnkgZ2xpYi5oLCByZWRlZmluZWQgYnkgc3lzL3BhcmFtLmggKi8KKyMgaWZkZWYgTUFYCisjICB1bmRlZiBNQVgKKyMgZW5kaWYKKyMgaWZkZWYgTUlOCisjICB1bmRlZiBNSU4KKyMgZW5kaWYKKyAgLyogV2UgdXNlIF8oKSBmb3IgZ2V0dGV4dCgpLCBQZXJsIHVzZXMgaXQgZm9yIGZ1bmN0aW9uIHByb3RvdHlwZXMuLi4gKi8KKyMgaWZkZWYgXworIyAgdW5kZWYgXworIyBlbmRpZgorIyBpZmRlZiBERUJVRworIyAgdW5kZWYgREVCVUcKKyMgZW5kaWYKKyMgaWZkZWYgX0RFQlVHCisjICB1bmRlZiBfREVCVUcKKyMgZW5kaWYKKyMgaWZkZWYgaW5zdHIKKyMgIHVuZGVmIGluc3RyCisjIGVuZGlmCisgIC8qIGJvb2wgY2F1c2VzIHRyb3VibGUgb24gTUFDT1MgYnV0IGlzIHJlcXVpcmVkIG9uIGEgZmV3IG90aGVyIHN5c3RlbXMgKi8KKyMgaWYgZGVmaW5lZChib29sKSAmJiBkZWZpbmVkKE1BQ09TKQorIyAgdW5kZWYgYm9vbAorIyBlbmRpZgorCisjIGlmZGVmIF9fQk9STEFORENfXworICAvKiBCb3JsYW5kIGhhcyB0aGUgc3RydWN0dXJlIHN0YXRpNjQgYnV0IG5vdCBfc3RhdGk2NCAqLworIyAgZGVmaW5lIF9zdGF0aTY0IHN0YXRpNjQKKyMgZW5kaWYKKworIyBpbmNsdWRlIDxFWFRFUk4uaD4KKyMgaW5jbHVkZSA8cGVybC5oPgorIyBpbmNsdWRlIDxYU1VCLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIFZJTV9fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3ZpbS5pY28gYi9zcmMvdmltLmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTk0MDkyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3ZpbS5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3ZpbS5yYyBiL3NyYy92aW0ucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkMzVhOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92aW0ucmMKQEAgLTAsMCArMSwxMzUgQEAKKy8vIHZpbTp0cz04OnN3PTQ6c3RzPTQ6CisvLworLy8gVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKy8vCisvLyBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKy8vIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorCisvLyB2aW0ucmMKKy8vICAgSWNvbiBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIFdpbjMyIHZlcnNpb24gb2YgVmltCisvLyAgIE11c3QgYmUgaW4gRE9TIGZvcm1hdCA8Q1I+PE5MPiEKKworI2lmZGVmIF9fTUlOR1czMl9fCisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgaWZuZGVmIFZTX0ZGSV9GSUxFRkxBR1NNQVNLCisjICBkZWZpbmUgVlNfRkZJX0ZJTEVGTEFHU01BU0sgICAgMHgwMDAwMDAzRkwKKyMgZW5kaWYKKyMgaWZuZGVmIFZPU19fV0lORE9XUzMyCisjICBkZWZpbmUgVk9TX19XSU5ET1dTMzIJICAweDAwMDAwMDA0TAorIyBlbmRpZgorI2Vsc2UKKyMgaW5jbHVkZSA8d2ludmVyLmg+CisjZW5kaWYKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAiZ3VpX3czMl9yYy5oIgorI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOMzJfXykKKyMgaW5jbHVkZSA8d2lucmVzcmMuaD4KKyNlbHNlCisjIGlmbmRlZiBfX01JTkdXMzJfXworIyAgaW5jbHVkZSA8d2lucmVzLmg+CisjIGVuZGlmCisjZW5kaWYKKworLy8KKy8vIEljb25zCisvLworSURSX1ZJTQkJSUNPTiAidmltLmljbyIKKworI2lmZGVmIEZFQVRfR1VJX1czMgorSURSX1ZJTV9FUlJPUglJQ09OICJ2aW1fZXJyb3IuaWNvIgorSURSX1ZJTV9BTEVSVAlJQ09OICJ2aW1fYWxlcnQuaWNvIgorSURSX1ZJTV9JTkZPCUlDT04gInZpbV9pbmZvLmljbyIKK0lEUl9WSU1fUVVFU1RJT04gSUNPTiAidmltX3F1ZXN0LmljbyIKKworLy8KKy8vIEJpdG1hcHMKKy8vCitJREJfVEVBUk9GRglCSVRNQVAgIERJU0NBUkRBQkxFICAidGVhcm9mZi5ibXAiCitJRFJfVE9PTEJBUjEJQklUTUFQICBESVNDQVJEQUJMRSAgInRvb2xzLmJtcCIKKworLy8KKy8vIFdpblhQIHRoZW1lIHN1cHBvcnQKKy8vCisjaWZuZGVmIENSRUFURVBST0NFU1NfTUFOSUZFU1RfUkVTT1VSQ0VfSUQKKyMgZGVmaW5lIENSRUFURVBST0NFU1NfTUFOSUZFU1RfUkVTT1VSQ0VfSUQgMQorI2VuZGlmCisjaWZuZGVmIFJUX01BTklGRVNUCisjIGRlZmluZSBSVF9NQU5JRkVTVCAyNAorI2VuZGlmCisKK0NSRUFURVBST0NFU1NfTUFOSUZFU1RfUkVTT1VSQ0VfSUQgUlRfTUFOSUZFU1QgImd2aW0uZXhlLm1uZiIKKyNlbmRpZiAvLyBGRUFUX0dVSV9XMzIKKworLy8KKy8vIFR5cGUgTGlicmFyeQorLy8KKyNpZmRlZiBGRUFUX09MRQorIDEgVFlQRUxJQiAiVklNLlRMQiIKKyNlbmRpZgorCisvLworLy8gVmVyc2lvbgorLy8KKworVlNfVkVSU0lPTl9JTkZPCQlWRVJTSU9OSU5GTworICBGSUxFVkVSU0lPTgkJVklNX1ZFUlNJT05fTUFKT1IsVklNX1ZFUlNJT05fTUlOT1IsVklNX1ZFUlNJT05fQlVJTEQsVklNX1ZFUlNJT05fUEFUQ0hMRVZFTAorICBQUk9EVUNUVkVSU0lPTglWSU1fVkVSU0lPTl9NQUpPUixWSU1fVkVSU0lPTl9NSU5PUixWSU1fVkVSU0lPTl9CVUlMRCxWSU1fVkVSU0lPTl9QQVRDSExFVkVMCisgIEZJTEVGTEFHU01BU0sJCVZTX0ZGSV9GSUxFRkxBR1NNQVNLCisKKyNpZiBWSU1fVkVSU0lPTl9QQVRDSExFVkVMID4gMAorICNpZmRlZiBfREVCVUcKKyAgRklMRUZMQUdTCQlWU19GRl9QUkVSRUxFQVNFIHwgVlNfRkZfREVCVUcgfCBWU19GRl9QQVRDSEVECisgI2Vsc2UKKyAgRklMRUZMQUdTCQlWU19GRl9QUkVSRUxFQVNFIHwgVlNfRkZfUEFUQ0hFRAorICNlbmRpZgorI2Vsc2UKKyAjaWZkZWYgX0RFQlVHCisgIEZJTEVGTEFHUwkJVlNfRkZfUFJFUkVMRUFTRSB8IFZTX0ZGX0RFQlVHCisgI2Vsc2UKKyAgRklMRUZMQUdTCQlWU19GRl9QUkVSRUxFQVNFCisgI2VuZGlmCisjZW5kaWYKKworICBGSUxFT1MJCVZPU19fV0lORE9XUzMyCisgIEZJTEVUWVBFCQlWRlRfQVBQCisgIEZJTEVTVUJUWVBFCQkweDBMCitCRUdJTgorICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgIEJFR0lOCisgICAgLy8gMHgwNDA5ID09IFUuUy4gRW5nbGlzaDsgMHgwNEU0ID0+IFdpbmRvd3MgTXVsdGlsaW5ndWFsCisgICAgQkxPQ0sgIjA0MDkwNEU0IgorICAgIEJFR0lOCisJVkFMVUUgIkNvbXBhbnlOYW1lIiwJCSJWaW0gRGV2ZWxvcGVyc1wwIgorCVZBTFVFICJGaWxlRGVzY3JpcHRpb24iLAkiVmkgSW1wcm92ZWQgLSBBIFRleHQgRWRpdG9yXDAiCisJVkFMVUUgIkZpbGVWZXJzaW9uIiwJCVZJTV9WRVJTSU9OX01BSk9SX1NUUiAiLCAiIFZJTV9WRVJTSU9OX01JTk9SX1NUUiAiLCAiIFZJTV9WRVJTSU9OX0JVSUxEX1NUUiAiLCAiIFZJTV9WRVJTSU9OX1BBVENITEVWRUxfU1RSICAiXDAiCisJVkFMVUUgIkludGVybmFsTmFtZSIsCQkiVklNXDAiCisJVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwJCSJDb3B5cmlnaHQgXDI1MSAxOTk2LTIwMDNcMCIKKwlWQUxVRSAiTGVnYWxUcmFkZW1hcmtzIiwJIlZpbVwwIgorCVZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwJIlZJTS5FWEVcMCIKKwlWQUxVRSAiUHJvZHVjdE5hbWUiLAkJIlZpbVwwIgorCVZBTFVFICJQcm9kdWN0VmVyc2lvbiIsCQlWSU1fVkVSU0lPTl9NQUpPUl9TVFIgIiwgIiBWSU1fVkVSU0lPTl9NSU5PUl9TVFIgIiwgIiBWSU1fVkVSU0lPTl9CVUlMRF9TVFIgIiwgIiBWSU1fVkVSU0lPTl9QQVRDSExFVkVMX1NUUiAiXDAiCisgICAgRU5ECisgIEVORAorICBCTE9DSyAiVmFyRmlsZUluZm8iCisgIEJFR0lOCisJVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDB4NEU0CisgIEVORAorRU5ECisKKy8qCisgKiAgUHJpbnRpbmcgU3RhdHVzIERpYWxvZyAoc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIEZFQVRfUFJJTlRFUiBpcyBkZWZpbmVkKQorICovCisjZGVmaW5lIElEQ19CT1gxCQk0MDAKKyNkZWZpbmUgSURDX1BSSU5UVEVYVDEJCTQwMQorI2RlZmluZSBJRENfUFJJTlRURVhUMgkJNDAyCisjZGVmaW5lIElEQ19QUk9HUkVTUwkJNDAzCitQUklOVERMR0JPWCBESUFMT0cgMTE1LCA2MywgMjEwLCA4MAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitGT05UIDgsICJIZWx2IgorQkVHSU4KKyAgICBERUZQVVNIQlVUVE9OICAgIkNhbmNlbCIsIElEQ0FOQ0VMLCA4NSwgNjAsIDQwLCAxNAorICAgIENURVhUCSAgICAiUHJpbnRpbmciLElEQ19QUklOVFRFWFQxLDIzLDE1LDE1Nyw4CisgICAgQ1RFWFQJICAgICIgIixJRENfUFJJTlRURVhUMiwyMywyNSwxNTcsOAorICAgIENURVhUCSAgICAiSW5pdGlhbGl6aW5nLi4uIixJRENfUFJPR1JFU1MsMjQsMzgsMTU3LDgKKyAgICBHUk9VUEJPWAkgICAgIiIsSURDX0JPWDEsMTksOSwxNzAsNDcKK0VORApkaWZmIC0tZ2l0IGEvc3JjL3ZpbS50bGIgYi9zcmMvdmltLnRsYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjI2MDZjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3ZpbS50bGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3ZpbTE2LmRlZiBiL3NyYy92aW0xNi5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiOGMwNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92aW0xNi5kZWYKQEAgLTAsMCArMSw1IEBACitDT0RFIFBSRUxPQUQgRVhFQ1VURU9OTFkKK0RBVEEgTVVMVElQTEUgU0hBUkVECitERVNDUklQVElPTiAnVmltIDcuMGFhJworU1RBQ0tTSVpFIDE2MDAwCitIRUFQU0laRSAxMDAwMApkaWZmIC0tZ2l0IGEvc3JjL3ZpbTE2LnJjIGIvc3JjL3ZpbTE2LnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MjllMDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdmltMTYucmMKQEAgLTAsMCArMSw4MSBAQAorLy8gdmltOnRzPTg6c3c9NDpzdHM9NDoKKy8vCisvLyBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorLy8KKy8vIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorLy8gRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisKKy8vIHZpbS5yYworLy8gICBJY29uIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGUgV2luMzIgdmVyc2lvbiBvZiBWaW0KKy8vICAgTXVzdCBiZSBpbiBET1MgZm9ybWF0IDxDUj48Tkw+IQorCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgImd1aV93M34xLmgiCisjaW5jbHVkZSAiZ3VpdzE2cmMuaCIKKworLy8KKy8vIEljb25zCisvLworSURSX1ZJTSBJQ09OICJWSU0uSUNPIgorCisjaWZuZGVmIEZFQVRfVElOWQorSURSX1ZJTV9FUlJPUglJQ09OICJWSU1fRVJ+MS5JQ08iCitJRFJfVklNX0FMRVJUCUlDT04gIlZJTV9BTH4xLklDTyIKK0lEUl9WSU1fSU5GTwlJQ09OICJWSU1fSU5GTy5JQ08iCitJRFJfVklNX1FVRVNUSU9OIElDT04gIlZJTV9RVX4xLklDTyIKKyNlbmRpZgorCisvLworLy8gQml0bWFwcworLy8KKyNpZmRlZiBGRUFUX1RPT0xCQVIKK0lEUl9UT09MQkFSMQlCSVRNQVAgIERJU0NBUkRBQkxFICAidG9vbHMxNi5ibXAiCisjZW5kaWYKKy8vCisvLyBWZXJzaW9uCisvLworCitWU19WRVJTSU9OX0lORk8JCVZFUlNJT05JTkZPCisgIEZJTEVWRVJTSU9OCQlWSU1fVkVSU0lPTl9NQUpPUixWSU1fVkVSU0lPTl9NSU5PUixWSU1fVkVSU0lPTl9CVUlMRCxWSU1fVkVSU0lPTl9QQVRDSExFVkVMCisgIFBST0RVQ1RWRVJTSU9OCVZJTV9WRVJTSU9OX01BSk9SLFZJTV9WRVJTSU9OX01JTk9SLFZJTV9WRVJTSU9OX0JVSUxELFZJTV9WRVJTSU9OX1BBVENITEVWRUwKKyAgRklMRUZMQUdTTUFTSwkJVlNfRkZJX0ZJTEVGTEFHU01BU0sKKworI2lmIFZJTV9WRVJTSU9OX1BBVENITEVWRUwgPiAwCisgI2lmZGVmIF9ERUJVRworICBGSUxFRkxBR1MJCVZTX0ZGX1BSRVJFTEVBU0UgfCBWU19GRl9ERUJVRyB8IFZTX0ZGX1BBVENIRUQKKyAjZWxzZQorICBGSUxFRkxBR1MJCVZTX0ZGX1BSRVJFTEVBU0UgfCBWU19GRl9QQVRDSEVECisgI2VuZGlmCisjZWxzZQorICNpZmRlZiBfREVCVUcKKyAgRklMRUZMQUdTCQlWU19GRl9QUkVSRUxFQVNFIHwgVlNfRkZfREVCVUcKKyAjZWxzZQorICBGSUxFRkxBR1MJCVZTX0ZGX1BSRVJFTEVBU0UKKyAjZW5kaWYKKyNlbmRpZgorCisgIEZJTEVPUwkJVk9TX19XSU5ET1dTMzIKKyAgRklMRVRZUEUJCVZGVF9BUFAKKyAgRklMRVNVQlRZUEUJCTB4MEwKK0JFR0lOCisgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKKyAgQkVHSU4KKyAgICAvLyAweDA0MDkgPT0gVS5TLiBFbmdsaXNoOyAweDA0RTQgPT4gV2luZG93cyBNdWx0aWxpbmd1YWwKKyAgICBCTE9DSyAiMDQwOTA0RTQiCisgICAgQkVHSU4KKwlWQUxVRSAiQ29tcGFueU5hbWUiLAkJIlZpbSBEZXZlbG9wZXJzXDAiCisJVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsCSJWaSBJbXByb3ZlZCAtIEEgVGV4dCBFZGl0b3JcMCIKKwlWQUxVRSAiRmlsZVZlcnNpb24iLAkJVklNX1ZFUlNJT05fTUFKT1JfU1RSICIsICIgVklNX1ZFUlNJT05fTUlOT1JfU1RSICIsICIgVklNX1ZFUlNJT05fQlVJTERfU1RSICIsICIgVklNX1ZFUlNJT05fUEFUQ0hMRVZFTF9TVFIgICJcMCIKKwlWQUxVRSAiSW50ZXJuYWxOYW1lIiwJCSJWSU1cMCIKKwlWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLAkJIkNvcHlyaWdodCBcMjUxIDE5OTYtMTk5OVwwIgorCVZBTFVFICJMZWdhbFRyYWRlbWFya3MiLAkiVmltXDAiCisJVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLAkiVklNLkVYRVwwIgorCVZBTFVFICJQcm9kdWN0TmFtZSIsCQkiVmltXDAiCisJVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwJCVZJTV9WRVJTSU9OX01BSk9SX1NUUiAiLCAiIFZJTV9WRVJTSU9OX01JTk9SX1NUUiAiLCAiIFZJTV9WRVJTSU9OX0JVSUxEX1NUUiAiLCAiIFZJTV9WRVJTSU9OX1BBVENITEVWRUxfU1RSICJcMCIKKyAgICBFTkQKKyAgRU5ECisgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgQkVHSU4KKwlWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMHg0RTQKKyAgRU5ECitFTkQKZGlmZiAtLWdpdCBhL3NyYy92aW1fYWxlcnQuaWNvIGIvc3JjL3ZpbV9hbGVydC5pY28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkOTgyYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92aW1fYWxlcnQuaWNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy92aW1fZXJyb3IuaWNvIGIvc3JjL3ZpbV9lcnJvci5pY28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmYmFjZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92aW1fZXJyb3IuaWNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy92aW1faWNvbi54Ym0gYi9zcmMvdmltX2ljb24ueGJtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYTI0YmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdmltX2ljb24ueGJtCkBAIC0wLDAgKzEsMTQgQEAKKyNkZWZpbmUgdmltX2ljb25fd2lkdGggMzIKKyNkZWZpbmUgdmltX2ljb25faGVpZ2h0IDMyCitzdGF0aWMgdW5zaWduZWQgY2hhciB2aW1faWNvbl9iaXRzW10gPSB7CisgICAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweGMwLCAweDAzLCAweDAwLCAweGZjLCAweGZmLCAweGZmLCAweDNmLAorICAgMHgwNCwgMHg4MCwgMHgwMywgMHgyMCwgMHgwNCwgMHg4MCwgMHgwZiwgMHg0MCwgMHgwOCwgMHhjMCwgMHgxZiwgMHg2MCwKKyAgIDB4MTAsIDB4ZTAsIDB4M2YsIDB4NjAsIDB4MTAsIDB4ZTAsIDB4MWYsIDB4MzAsIDB4MTAsIDB4ZTAsIDB4MGYsIDB4MTgsCisgICAweDEwLCAweGUwLCAweDA3LCAweDBlLCAweDEwLCAweGUwLCAweDAzLCAweDA3LCAweDEwLCAweGUwLCAweDgxLCAweDBmLAorICAgMHgxOCwgMHhlMCwgMHg4MCwgMHgxZiwgMHgxYywgMHg2MCwgMHhlMCwgMHgzZiwgMHgxZSwgMHgyMCwgMHhmMCwgMHg3ZiwKKyAgIDB4MWYsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4MWYsIDB4MDAsIDB4ZmMsIDB4ZmYsIDB4MWUsIDB4MDAsIDB4ZmMsIDB4N2YsCisgICAweDFjLCAweDAwLCAweGZmLCAweDNmLCAweDE4LCAweDgwLCAweGZjLCAweDFmLCAweDEwLCAweDgwLCAweGZjLCAweDBmLAorICAgMHgxMCwgMHhjMCwgMHhmZiwgMHg1ZiwgMHgxMCwgMHg2MCwgMHg0NCwgMHgyNCwgMHgxMCwgMHg1MCwgMHgwYywgMHg0MCwKKyAgIDB4MTAsIDB4NzAsIDB4Y2UsIDB4MjQsIDB4MTAsIDB4N2MsIDB4NmUsIDB4MjYsIDB4MTAsIDB4N2EsIDB4NjYsIDB4MjYsCisgICAweDEwLCAweDNkLCAweDIyLCAweDEzLCAweGEwLCAweDMyLCAweDMyLCAweDY3LCAweGQwLCAweGUxLCAweGRmLCAweDFjLAorICAgMHgwMCwgMHhjMCwgMHg0MywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMH07CmRpZmYgLS1naXQgYS9zcmMvdmltX2luZm8uaWNvIGIvc3JjL3ZpbV9pbmZvLmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjA0M2E1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3ZpbV9pbmZvLmljbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdmltX21hc2sueGJtIGIvc3JjL3ZpbV9tYXNrLnhibQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmRkOTI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3ZpbV9tYXNrLnhibQpAQCAtMCwwICsxLDE0IEBACisjZGVmaW5lIHZpbV9tYXNrX2ljb25fd2lkdGggMzIKKyNkZWZpbmUgdmltX21hc2tfaWNvbl9oZWlnaHQgMzIKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHZpbV9tYXNrX2ljb25fYml0c1tdID0geworICAgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMywgMHgwMCwgMHhmYywgMHhmZiwgMHhmZiwgMHgzZiwKKyAgIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4N2YsCisgICAweGYwLCAweGZmLCAweGZmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweDNmLCAweGYwLCAweGZmLCAweGZmLCAweDFmLAorICAgMHhmMCwgMHhmZiwgMHhmZiwgMHgwZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHgwNywgMHhmMCwgMHhmZiwgMHhmZiwgMHgwZiwKKyAgIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4MWYsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4N2YsCisgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweDdmLAorICAgMHhmYywgMHhmZiwgMHhmZiwgMHgzZiwgMHhmOCwgMHhmZiwgMHhmZiwgMHgxZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHgwZiwKKyAgIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4NWYsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4N2YsCisgICAweGYwLCAweGZmLCAweGZmLCAweDNmLCAweGYwLCAweGZmLCAweGZmLCAweDNmLCAweGYwLCAweGZmLCAweGZmLCAweDNmLAorICAgMHhmMCwgMHhmZiwgMHhmZiwgMHgzZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhkMCwgMHhlMSwgMHhkZiwgMHgxYywKKyAgIDB4MDAsIDB4YzAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDB9OwpkaWZmIC0tZ2l0IGEvc3JjL3ZpbV9xdWVzdC5pY28gYi9zcmMvdmltX3F1ZXN0LmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmMyMjM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3ZpbV9xdWVzdC5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3ZpbXJ1bi5jIGIvc3JjL3ZpbXJ1bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZDUwNzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdmltcnVuLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCQkJdGhpcyBmaWxlIGJ5IFZpbmNlIE5lZ3JpCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiB2aW1ydW4uYyAtIFRpbnkgV2luMzIgcHJvZ3JhbSB0byBzYWZlbHkgcnVuIGFuIGV4dGVybmFsIGNvbW1hbmQgaW4gYQorICoJICAgICAgRE9TIGNvbnNvbGUuCisgKgkgICAgICBUaGlzIHByb2dyYW0gaXMgcmVxdWlyZWQgdG8gYXZvaWQgdGhhdCB0eXBpbmcgQ1RSTC1DIGluIHRoZSBET1MKKyAqCSAgICAgIGNvbnNvbGUga2lsbHMgVmltLiAgTm93IGl0IG9ubHkga2lsbHMgdmltcnVuLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmbmRlZiBfX0NZR1dJTl9fCisjIGluY2x1ZGUgPGNvbmlvLmg+CisjZW5kaWYKKworI2lmZGVmIF9fQk9STEFORENfXworZXh0ZXJuIGNoYXIgKgorI2lmZGVmIF9SVExETEwKK19faW1wb3J0CisjZW5kaWYKK19vc2NtZDsKKyMgZGVmaW5lIF9rYmhpdCBrYmhpdAorIyBkZWZpbmUgX2dldGNoIGdldGNoCisjZWxzZQorIyBpZmRlZiBfX01JTkdXMzJfXworIyAgaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgZWxzZQorIyAgaWZkZWYgX19DWUdXSU5fXworIyAgIGlmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICAgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICAgZW5kaWYKKyMgICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICAgZGVmaW5lIF9nZXRjaCBnZXRjaGFyCisjICBlbHNlCitleHRlcm4gY2hhciAqX2FjbWRsbjsKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworICAgIGludAorbWFpbih2b2lkKQoreworICAgIGNvbnN0IGNoYXIJKnA7CisgICAgaW50CQlyZXR2YWw7CisgICAgaW50CQlpbnF1b3RlID0gMDsKKyAgICBpbnQJCXNpbGVudCA9IDA7CisKKyNpZmRlZiBfX0JPUkxBTkRDX18KKyAgICBwID0gX29zY21kOworI2Vsc2UKKyMgaWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIHAgPSAoY29uc3QgY2hhciAqKUdldENvbW1hbmRMaW5lKCk7CisjIGVsc2UKKyAgICBwID0gX2FjbWRsbjsKKyMgZW5kaWYKKyNlbmRpZgorICAgIC8qCisgICAgICogU2tpcCB0aGUgZXhlY3V0YWJsZSBuYW1lLCB3aGljaCBtaWdodCBiZSBpbiAiIi4KKyAgICAgKi8KKyAgICB3aGlsZSAoKnApCisgICAgeworCWlmICgqcCA9PSAnIicpCisJICAgIGlucXVvdGUgPSAhaW5xdW90ZTsKKwllbHNlIGlmICghaW5xdW90ZSAmJiAqcCA9PSAnICcpCisJeworCSAgICArK3A7CisJICAgIGJyZWFrOworCX0KKwkrK3A7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAiLXMiIGFyZ3VtZW50OiBkb24ndCB3YWl0IGZvciBhIGtleSBoaXQuCisgICAgICovCisgICAgaWYgKHBbMF0gPT0gJy0nICYmIHBbMV0gPT0gJ3MnICYmIHBbMl0gPT0gJyAnKQorICAgIHsKKwlzaWxlbnQgPSAxOworCXAgKz0gMzsKKwl3aGlsZSAoKnAgPT0gJyAnKQorCSAgICArK3A7CisgICAgfQorCisgICAgLyogUHJpbnQgdGhlIGNvbW1hbmQsIGluY2x1ZGluZyBxdW90ZXMgYW5kIHJlZGlyZWN0aW9uLiAqLworICAgIHB1dHMocCk7CisKKyAgICAvKgorICAgICAqIERvIGl0IQorICAgICAqLworICAgIHJldHZhbCA9IHN5c3RlbShwKTsKKworICAgIGlmIChyZXR2YWwgIT0gMCkKKwlwcmludGYoInNoZWxsIHJldHVybmVkICVkXG4iLCByZXR2YWwpOworCisgICAgaWYgKCFzaWxlbnQpCisgICAgeworCXB1dHMoIkhpdCBhbnkga2V5IHRvIGNsb3NlIHRoaXMgd2luZG93Li4uIik7CisKKyNpZm5kZWYgX19DWUdXSU5fXworCXdoaWxlIChfa2JoaXQoKSkKKwkgICAgKHZvaWQpX2dldGNoKCk7CisjZW5kaWYKKwkodm9pZClfZ2V0Y2goKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvc3JjL3ZpbXRiYXIuZGxsIGIvc3JjL3ZpbXRiYXIuZGxsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhOGRmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdmltdGJhci5kbGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3ZpbXRiYXIuaCBiL3NyYy92aW10YmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyN2Y2NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92aW10YmFyLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCQkJV2luMTYgVG9vbGJhciBieSBWaW5jZSBOZWdyaSAtIEV4dGVybmFsIEhlYWRlcgorICoJCQkoQmFzZWQgb24gTVMgU2FtcGxlIENvZGUpCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqLworLy8KKy8vIEJ1dHRvbiBTdHJ1Y3R1cmUKKy8vCit0eXBlZGVmIHN0cnVjdCB0YWdUQkJVVFRPTgoreworICAgIGludCAgaUJpdG1hcDsJIC8vIGluZGV4IGludG8gYml0bWFwIG9mIHRoaXMgYnV0dG9uJ3MgcGljdHVyZQorICAgIGludCAgaWRDb21tYW5kOwkgLy8gV01fQ09NTUFORCBtZW51IElEIHRoYXQgdGhpcyBidXR0b24gc2VuZHMKKyAgICBCWVRFIGZzU3RhdGU7CSAvLyBidXR0b24ncyBzdGF0ZQorICAgIEJZVEUgZnNTdHlsZTsJIC8vIGJ1dHRvbidzIHN0eWxlCit9IFRCQlVUVE9OOworCit0eXBlZGVmIFRCQlVUVE9OIE5FQVIqIFBUQkJVVFRPTjsKK3R5cGVkZWYgVEJCVVRUT04gRkFSKiBMUFRCQlVUVE9OOwordHlwZWRlZiBjb25zdCBUQkJVVFRPTiBGQVIqIExQQ1RCQlVUVE9OOworCisKKy8vCisvLyBTdHlsZXMKKy8vCisjZGVmaW5lIFRCU1RZTEVfQlVUVE9OCQkweDAwCS8vIHRoaXMgZW50cnkgaXMgYnV0dG9uCisjZGVmaW5lIFRCU1RZTEVfU0VQCQkweDAxCS8vIHRoaXMgZW50cnkgaXMgYSBzZXBhcmF0b3IKKyNkZWZpbmUgVEJTVFlMRV9DSEVDSwkJMHgwMgkvLyB0aGlzIGlzIGEgY2hlY2sgYnV0dG9uIChpdCBzdGF5cyBkb3duKQorI2RlZmluZSBUQlNUWUxFX0dST1VQCQkweDA0CS8vIHRoaXMgaXMgYSBjaGVjayBidXR0b24gKGl0IHN0YXlzIGRvd24pCisjZGVmaW5lIFRCU1RZTEVfQ0hFQ0tHUk9VUAkoVEJTVFlMRV9HUk9VUCB8IFRCU1RZTEVfQ0hFQ0spIC8vIHRoaXMgZ3JvdXAgaXMgYSBtZW1iZXIgb2YgYSBncm91cCByYWRpbyBncm91cAorCisvLworLy8gU3RhdGVzCisvLworI2RlZmluZSBUQlNUQVRFX0NIRUNLRUQJCTB4MDEJLy8gcmFkaW8gYnV0dG9uIGlzIGNoZWNrZWQKKyNkZWZpbmUgVEJTVEFURV9QUkVTU0VECQkweDAyCS8vIGJ1dHRvbiBpcyBiZWluZyBkZXByZXNzZWQgKGFueSBzdHlsZSkKKyNkZWZpbmUgVEJTVEFURV9FTkFCTEVECQkweDA0CS8vIGJ1dHRvbiBpcyBlbmFibGVkCisjZGVmaW5lIFRCU1RBVEVfSElEREVOCQkweDA4CS8vIGJ1dHRvbiBpcyBoaWRkZW4KKyNkZWZpbmUgVEJTVEFURV9JTkRFVEVSTUlOQVRFICAgMHgxMCAgICAvLyBidXR0b24gaXMgaW5kZXRlcm1pbmF0ZQorI2RlZmluZSBUQlNUQVRFX1NFTEVDVEVECTB4MjAJLy8gbW91c2UgaG92ZXJpbmcgb3ZlciBidXR0b24gKGZvciBjb29sYmFyIGxvb2spCisKKworCit0eXBlZGVmIHN0cnVjdCB0YWdBREpVU1RJTkZPCit7CisgICAgVEJCVVRUT04gdGJCdXR0b247CisgICAgY2hhciBzekRlc2NyaXB0aW9uWzFdOworfSBBREpVU1RJTkZPOworCit0eXBlZGVmIEFESlVTVElORk8gTkVBUiogUEFESlVTVElORk87Cit0eXBlZGVmIEFESlVTVElORk8gRkFSKiBMUEFESlVTVElORk87CisKKworSFdORCBXSU5BUEkgQ3JlYXRlVG9vbGJhcihIV05EIGh3bmQsIERXT1JEIHdzLCBXT1JEIHdJRCwgaW50IG5CaXRtYXBzLAorCUhJTlNUQU5DRSBoQk1JbnN0LCBXT1JEIHdCTUlELAorCUxQQ1RCQlVUVE9OIGxwQnV0dG9ucywgaW50IGlOdW1CdXR0b25zKTsKKworI2RlZmluZSBDTUJfRElTQ0FSREFCTEUgMHgwMSAgICAvLyBjcmVhdGUgYml0bWFwIGFzIGRpc2NhcmRhYmxlCisjZGVmaW5lIENNQl9NQVNLRUQgICAgICAweDAyICAgIC8vIGNyZWF0ZSBpbWFnZS9tYXNrIHBhaXIgaW4gYml0bWFwCisKKworI2RlZmluZSBUQl9FTkFCTEVCVVRUT04JKFdNX1VTRVIgKyAxKQorLy8gd1BhcmFtOiBVSU5ULCBidXR0b24gSUQKKy8vIGxQYXJhbTogQk9PTCBMT1dPUkQsIGVuYWJsZSBpZiBub256ZXJvOyBISVdPUkQgbm90IHVzZWQsIDAKKy8vIHJldHVybjogbm90IHVzZWQKKy8vCisKKyNkZWZpbmUgVEJfQ0hFQ0tCVVRUT04JKFdNX1VTRVIgKyAyKQorLy8gd1BhcmFtOiBVSU5ULCBidXR0b24gSUQKKy8vIGxQYXJhbTogQk9PTCBMT1dPUkQsIGNoZWNrIGlmIG5vbnplcm87IEhJV09SRCBub3QgdXNlZCwgMAorLy8gcmV0dXJuOiBub3QgdXNlZAorLy8KKworI2RlZmluZSBUQl9QUkVTU0JVVFRPTgkoV01fVVNFUiArIDMpCisvLyB3UGFyYW06IFVJTlQsIGJ1dHRvbiBJRAorLy8gbFBhcmFtOiBCT09MIExPV09SRCwgcHJlc3MgaWYgbm9uemVybzsgSElXT1JEIG5vdCB1c2VkLCAwCisvLyByZXR1cm46IG5vdCB1c2VkCisvLworCisjZGVmaW5lIFRCX0hJREVCVVRUT04JKFdNX1VTRVIgKyA0KQorLy8gd1BhcmFtOiBVSU5ULCBidXR0b24gSUQKKy8vIGxQYXJhbTogQk9PTCBMT1dPUkQsIGhpZGUgaWYgbm9uemVybzsgSElXT1JEIG5vdCB1c2VkLCAwCisvLyByZXR1cm46IG5vdCB1c2VkCisvLworI2RlZmluZSBUQl9JTkRFVEVSTUlOQVRFCShXTV9VU0VSICsgNSkKKy8vIHdQYXJhbTogVUlOVCwgYnV0dG9uIElECisvLyBsUGFyYW06IEJPT0wgTE9XT1JELCBtYWtlIGluZGV0ZXJtaW5hdGUgaWYgbm9uemVybzsgSElXT1JEIG5vdCB1c2VkLCAwCisvLyByZXR1cm46IG5vdCB1c2VkCisvLworCisjZGVmaW5lIFRCX0lTQlVUVE9ORU5BQkxFRAkoV01fVVNFUiArIDkpCisvLyB3UGFyYW06IFVJTlQsIGJ1dHRvbiBJRAorLy8gbFBhcmFtOiBub3QgdXNlZCwgMAorLy8gcmV0dXJuOiBCT09MIExPV09SRCwgZW5hYmxlZCBpZiBub256ZXJvOyBISVdPUkQgbm90IHVzZWQKKy8vCisKKyNkZWZpbmUgVEJfSVNCVVRUT05DSEVDS0VECShXTV9VU0VSICsgMTApCisvLyB3UGFyYW06IFVJTlQsIGJ1dHRvbiBJRAorLy8gbFBhcmFtOiBub3QgdXNlZCwgMAorLy8gcmV0dXJuOiBCT09MIExPV09SRCwgY2hlY2tlZCBpZiBub256ZXJvOyBISVdPUkQgbm90IHVzZWQKKy8vCisKKyNkZWZpbmUgVEJfSVNCVVRUT05QUkVTU0VECShXTV9VU0VSICsgMTEpCisvLyB3UGFyYW06IFVJTlQsIGJ1dHRvbiBJRAorLy8gbFBhcmFtOiBub3QgdXNlZCwgMAorLy8gcmV0dXJuOiBCT09MIExPV09SRCwgcHJlc3NlZCBpZiBub256ZXJvOyBISVdPUkQgbm90IHVzZWQKKy8vCisKKyNkZWZpbmUgVEJfSVNCVVRUT05ISURERU4JKFdNX1VTRVIgKyAxMikKKy8vIHdQYXJhbTogVUlOVCwgYnV0dG9uIElECisvLyBsUGFyYW06IG5vdCB1c2VkLCAwCisvLyByZXR1cm46IEJPT0wgTE9XT1JELCBoaWRkZW4gaWYgbm9uemVybzsgSElXT1JEIG5vdCB1c2VkCisvLworCisjZGVmaW5lIFRCX0lTQlVUVE9OSU5ERVRFUk1JTkFURQkoV01fVVNFUiArIDEzKQorLy8gd1BhcmFtOiBVSU5ULCBidXR0b24gSUQKKy8vIGxQYXJhbTogbm90IHVzZWQsIDAKKy8vIHJldHVybjogQk9PTCBMT1dPUkQsIGluZGV0ZXJtaW5hdGUgaWYgbm9uemVybzsgSElXT1JEIG5vdCB1c2VkCisvLworCisjZGVmaW5lIFRCX1NFVFNUQVRFCQkoV01fVVNFUiArIDE3KQorLy8gd1BhcmFtOiBVSU5ULCBidXR0b24gSUQKKy8vIGxQYXJhbTogVUlOVCBMT1dPUkQsIHN0YXRlIGJpdHM7IEhJV09SRCBub3QgdXNlZCwgMAorLy8gcmV0dXJuOiBub3QgdXNlZAorLy8KKworI2RlZmluZSBUQl9HRVRTVEFURQkJKFdNX1VTRVIgKyAxOCkKKy8vIHdQYXJhbTogVUlOVCwgYnV0dG9uIElECisvLyBsUGFyYW06IG5vdCB1c2VkLCAwCisvLyByZXR1cm46IFVJTlQgTE9XT1JELCBzdGF0ZSBiaXRzOyBISVdPUkQgbm90IHVzZWQKKy8vCisKKyNkZWZpbmUgVEJfQUREQklUTUFQCQkoV01fVVNFUiArIDE5KQorLy8gd1BhcmFtOiBVSU5ULCBudW1iZXIgb2YgYnV0dG9uIGdyYXBoaWNzIGluIGJpdG1hcAorLy8gbFBhcmFtOiBvbmUgb2Y6CisvLwkgICBISU5TVEFOQ0UgTE9XT1JELCBtb2R1bGUgaGFuZGxlOyBVSU5UIEhJV09SRCwgcmVzb3VyY2UgaWQKKy8vCSAgIEhJTlNUQU5DRSBMT1dPUkQsIE5VTEw7IEhCSVRNQVAgSElXT1JELCBiaXRtYXAgaGFuZGxlCisvLyByZXR1cm46IG9uZSBvZjoKKy8vCSAgIGludCBMT1dPUkQsIGluZGV4IGZvciBmaXJzdCBuZXcgYnV0dG9uOyBISVdPUkQgbm90IHVzZWQKKy8vCSAgIGludCBMT1dPUkQsIC0xIGluZGljYXRpbmcgZXJyb3I7IEhJV09SRCBub3QgdXNlZAorLy8KKworI2RlZmluZSBUQl9BRERCVVRUT05TCQkoV01fVVNFUiArIDIwKQorLy8gd1BhcmFtOiBVSU5ULCBudW1iZXIgb2YgYnV0dG9ucyB0byBhZGQKKy8vIGxQYXJhbTogTFBUQkJVVFRPTiwgcG9pbnRlciB0byBhcnJheSBvZiBUQkJVVFRPTiBzdHJ1Y3R1cmVzCisvLyByZXR1cm46IG5vdCB1c2VkCisvLworCisjZGVmaW5lIFRCX0lOU0VSVEJVVFRPTgkJKFdNX1VTRVIgKyAyMSkKKy8vIHdQYXJhbTogVUlOVCwgaW5kZXggZm9yIGluc2VydGlvbiAoYXBwZW5kZWQgaWYgaW5kZXggZG9lc24ndCBleGlzdCkKKy8vIGxQYXJhbTogTFBUQkJVVFRPTiwgcG9pbnRlciB0byBvbmUgVEJCVVRUT04gc3RydWN0dXJlCisvLyByZXR1cm46IG5vdCB1c2VkCisvLworCisjZGVmaW5lIFRCX0RFTEVURUJVVFRPTgkJKFdNX1VTRVIgKyAyMikKKy8vIHdQYXJhbTogVUlOVCwgaW5kZXggb2YgYnV0dG9uIHRvIGRlbGV0ZQorLy8gbFBhcmFtOiBub3QgdXNlZCwgMAorLy8gcmV0dXJuOiBub3QgdXNlZAorLy8KKworI2RlZmluZSBUQl9HRVRCVVRUT04JCShXTV9VU0VSICsgMjMpCisvLyB3UGFyYW06IFVJTlQsIGluZGV4IG9mIGJ1dHRvbiB0byBnZXQKKy8vIGxQYXJhbTogTFBUQkJVVFRPTiwgcG9pbnRlciB0byBUQkJVVFRPTiBidWZmZXIgdG8gcmVjZWl2ZSBidXR0b24KKy8vIHJldHVybjogbm90IHVzZWQKKy8vCisKKyNkZWZpbmUgVEJfQlVUVE9OQ09VTlQJCShXTV9VU0VSICsgMjQpCisvLyB3UGFyYW06IG5vdCB1c2VkLCAwCisvLyBsUGFyYW06IG5vdCB1c2VkLCAwCisvLyByZXR1cm46IFVJTlQgTE9XT1JELCBudW1iZXIgb2YgYnV0dG9uczsgSElXT1JEIG5vdCB1c2VkCisvLworCisjZGVmaW5lIFRCX0NPTU1BTkRUT0lOREVYCShXTV9VU0VSICsgMjUpCisvLyB3UGFyYW06IFVJTlQsIGNvbW1hbmQgaWQKKy8vIGxQYXJhbTogbm90IHVzZWQsIDAKKy8vIHJldHVybjogVUlOVCBMT1dPUkQsIGluZGV4IG9mIGJ1dHRvbiAoLTEgaWYgY29tbWFuZCBub3QgZm91bmQpOworLy8JICAgSElXT1JEIG5vdCB1c2VkCisvLworCisKKyNkZWZpbmUgVEJOX0JFR0lORFJBRwkweDAyMDEKKyNkZWZpbmUgVEJOX0VORERSQUcJMHgwMjAzCmRpZmYgLS1naXQgYS9zcmMvdmltdGJhci5saWIgYi9zcmMvdmltdGJhci5saWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzYjdkYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92aW10YmFyLmxpYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdmltdHV0b3IgYi9zcmMvdmltdHV0b3IKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmZiYjEzNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy92aW10dXRvcgpAQCAtMCwwICsxLDYxIEBACisjISAvYmluL3NoCisKKyMgU3RhcnQgVmltIG9uIGEgY29weSBvZiB0aGUgdHV0b3IgZmlsZS4KKworIyBVc2FnZTogdmltdHV0b3IgW3h4XSwgd2hlcmUgeHggaXMgYSBsYW5ndWFnZSBjb2RlIGxpa2UgImVzIiBvciAibmwiLgorIyBXaGVuIGFuIGFyZ3VtZW50IGlzIGdpdmVuLCBpdCB0cmllcyBsb2FkaW5nIHRoYXQgdHV0b3IuCisjIFdoZW4gdGhpcyBmYWlscyBvciBubyBhcmd1bWVudCB3YXMgZ2l2ZW4sIGl0IHRyaWVzIHVzaW5nICd2OmxhbmcnCisjIFdoZW4gdGhhdCBhbHNvIGZhaWxzLCBpdCB1c2VzIHRoZSBFbmdsaXNoIHZlcnNpb24uCisKK3h4PSQxCitleHBvcnQgeHgKKworIyBXZSBuZWVkIGEgdGVtcCBmaWxlIGZvciB0aGUgY29weS4gIEZpcnN0IHRyeSB1c2luZyBhIHN0YW5kYXJkIGNvbW1hbmQuCit0bXA9IiR7VE1QRElSLS90bXB9IgorVFVUT1JDT1BZPWBta3RlbXAgJHRtcC90dXRvclhYWFhYWCB8fCB0ZW1wZmlsZSAtcCB0dXRvciB8fCBlY2hvIG5vbmVgCisKKyMgSWYgdGhlIHN0YW5kYXJkIGNvbW1hbmRzIGZhaWxlZCB0aGVuIGNyZWF0ZSBhIGRpcmVjdG9yeSB0byBwdXQgdGhlIGNvcHkgaW4uCisjIFRoYXQgaXMgYSBzZWN1cmUgd2F5IHRvIG1ha2UgYSB0ZW1wIGZpbGUuCitpZiB0ZXN0ICIkVFVUT1JDT1BZIiA9IG5vbmU7IHRoZW4KKwl0bXBkaXI9JHRtcC92aW10dXRvciQkCisJT0xEX1VNQVNLPWB1bWFza2AKKwl1bWFzayAwNzcKKwlnZXRvdXQ9bm8KKwlta2RpciAkdG1wZGlyIHx8IGdldG91dD15ZXMKKwl1bWFzayAkT0xEX1VNQVNLCisJaWYgdGVzdCAkZ2V0b3V0ID0geWVzOyB0aGVuCisJCWVjaG8gIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciB0dXRvciBjb3B5LCBleGl0aW5nLiIKKwkJZXhpdCAxCisJZmkKKwlUVVRPUkNPUFk9JHRtcGRpci90dXRvcmNvcHkKKwl0b3VjaCAkVFVUT1JDT1BZCisJVE9ERUxFVEU9JHRtcGRpcgorZWxzZQorCVRPREVMRVRFPSRUVVRPUkNPUFkKK2ZpCisKK2V4cG9ydCBUVVRPUkNPUFkKKworIyByZW1vdmUgdGhlIGNvcHkgb2YgdGhlIHR1dG9yIG9uIGV4aXQKK3RyYXAgInJtIC1yZiAkVE9ERUxFVEUiIDAgMSAyIDMgOSAxMSAxMyAxNQorCisjIFZpbSBjb3VsZCBiZSBjYWxsZWQgInZpbSIgb3IgInZpIi4gIEFsc28gY2hlY2sgZm9yICJ2aW02IiwgZm9yIHBlb3BsZSB3aG8KKyMgaGF2ZSBWaW0gNS54IGluc3RhbGxlZCBhcyAidmltIiBhbmQgVmltIDYuMCBhcyAidmltNiIuCit0ZXN0dmltPWB3aGljaCB2aW02IDI+L2Rldi9udWxsYAoraWYgdGVzdCAtZiAiJHRlc3R2aW0iOyB0aGVuCisJVklNPXZpbTYKK2Vsc2UKKwl0ZXN0dmltPWB3aGljaCB2aW1gCisJaWYgdGVzdCAtZiAiJHRlc3R2aW0iOyB0aGVuCisJCVZJTT12aW0KKwllbHNlCisJCVZJTT12aQorCWZpCitmaQorCisjIFVzZSBWaW0gdG8gY29weSB0aGUgdHV0b3IsIGl0IGtub3dzIHRoZSB2YWx1ZSBvZiAkVklNUlVOVElNRQorIyBUaGUgc2NyaXB0IHR1dG9yLnZpbSB0ZWxscyBWaW0gd2hpY2ggZmlsZSB0byBjb3B5CiskVklNIC11IE5PTkUgLWMgJ3NvICRWSU1SVU5USU1FL3R1dG9yL3R1dG9yLnZpbScKKworIyBTdGFydCB2aW0gd2l0aG91dCBhbnkgLnZpbXJjLCBzZXQgJ25vY29tcGF0aWJsZScKKyRWSU0gLXUgTk9ORSAtYyAic2V0IG5vY3AiICRUVVRPUkNPUFkKZGlmZiAtLWdpdCBhL3NyYy93aGljaC5zaCBiL3NyYy93aGljaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YzJjNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3doaWNoLnNoCkBAIC0wLDAgKzEsMTIgQEAKKyMhIC9iaW4vc2gKKyMKKyMgd2hpY2guc2ggLS0gZmluZCB3aGVyZSBhbiBleGVjdXRhYmxlIGlzIGxvY2F0ZWQuICBJdCdzIGhlcmUgYmVjYXVzZSB0aGUKKyMgIndoaWNoIiBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQgZXZlcnl3aGVyZS4gIFVzZWQgYnkgTWFrZWZpbGUuCisKK0lGUz0iOiIKK2ZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisJaWYgdGVzdCAtZiAiJGFjX2Rpci8kMSI7IHRoZW4KKwkJZWNobyAiJGFjX2Rpci8kMSIKKwkJYnJlYWsKKwlmaQorZG9uZQpkaWZmIC0tZ2l0IGEvc3JjL3dpbmRvdy5jIGIvc3JjL3dpbmRvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNjNlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd2luZG93LmMKQEAgLTAsMCArMSw0OTQ2IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIFZpbSBzb3VyY2UgY29kZS4KKyAqLworCisjaW5jbHVkZSAidmltLmgiCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgaW5jbHVkZSA8ZmNudGwuaD4JICAgIC8qIGZvciBjaGRpcigpICovCisjZW5kaWYKKworc3RhdGljIGludCBwYXRoX2lzX3VybCBfX0FSR1MoKGNoYXJfdSAqcCkpOworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorc3RhdGljIGludCB3aW5fc3BsaXRfaW5zIF9fQVJHUygoaW50IHNpemUsIGludCBmbGFncywgd2luX1QgKm5ld3dpbiwgaW50IGRpcikpOworc3RhdGljIGludCB3aW5fY29tcF9wb3MgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCBmcmFtZV9jb21wX3BvcyBfX0FSR1MoKGZyYW1lX1QgKnRvcGZycCwgaW50ICpyb3csIGludCAqY29sKSk7CitzdGF0aWMgdm9pZCBmcmFtZV9zZXRoZWlnaHQgX19BUkdTKChmcmFtZV9UICpjdXJmcnAsIGludCBoZWlnaHQpKTsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorc3RhdGljIHZvaWQgZnJhbWVfc2V0d2lkdGggX19BUkdTKChmcmFtZV9UICpjdXJmcnAsIGludCB3aWR0aCkpOworI2VuZGlmCitzdGF0aWMgdm9pZCB3aW5fZXhjaGFuZ2UgX19BUkdTKChsb25nKSk7CitzdGF0aWMgdm9pZCB3aW5fcm90YXRlIF9fQVJHUygoaW50LCBpbnQpKTsKK3N0YXRpYyB2b2lkIHdpbl90b3RvcCBfX0FSR1MoKGludCBzaXplLCBpbnQgZmxhZ3MpKTsKK3N0YXRpYyB2b2lkIHdpbl9lcXVhbF9yZWMgX19BUkdTKCh3aW5fVCAqbmV4dF9jdXJ3aW4sIGludCBjdXJyZW50LCBmcmFtZV9UICp0b3BmciwgaW50IGRpciwgaW50IGNvbCwgaW50IHJvdywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSk7CitzdGF0aWMgd2luX1QgKndpbmZyYW1lX3JlbW92ZSBfX0FSR1MoKHdpbl9UICp3aW4sIGludCAqZGlycCkpOworc3RhdGljIGZyYW1lX1QgKndpbl9hbHRmcmFtZSBfX0FSR1MoKHdpbl9UICp3aW4pKTsKK3N0YXRpYyB3aW5fVCAqZnJhbWUyd2luIF9fQVJHUygoZnJhbWVfVCAqZnJwKSk7CitzdGF0aWMgaW50IGZyYW1lX2hhc193aW4gX19BUkdTKChmcmFtZV9UICpmcnAsIHdpbl9UICp3cCkpOworc3RhdGljIHZvaWQgZnJhbWVfbmV3X2hlaWdodCBfX0FSR1MoKGZyYW1lX1QgKnRvcGZycCwgaW50IGhlaWdodCwgaW50IHRvcGZpcnN0LCBpbnQgd2ZoKSk7CitzdGF0aWMgaW50IGZyYW1lX2ZpeGVkX2hlaWdodCBfX0FSR1MoKGZyYW1lX1QgKmZycCkpOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCitzdGF0aWMgdm9pZCBmcmFtZV9hZGRfc3RhdHVzbGluZSBfX0FSR1MoKGZyYW1lX1QgKmZycCkpOworc3RhdGljIHZvaWQgZnJhbWVfbmV3X3dpZHRoIF9fQVJHUygoZnJhbWVfVCAqdG9wZnJwLCBpbnQgd2lkdGgsIGludCBsZWZ0Zmlyc3QpKTsKK3N0YXRpYyB2b2lkIGZyYW1lX2FkZF92c2VwIF9fQVJHUygoZnJhbWVfVCAqZnJwKSk7CitzdGF0aWMgaW50IGZyYW1lX21pbndpZHRoIF9fQVJHUygoZnJhbWVfVCAqdG9wZnJwLCB3aW5fVCAqbmV4dF9jdXJ3aW4pKTsKK3N0YXRpYyB2b2lkIGZyYW1lX2ZpeF93aWR0aCBfX0FSR1MoKHdpbl9UICp3cCkpOworI2VuZGlmCitzdGF0aWMgdm9pZCBmcmFtZV9maXhfaGVpZ2h0IF9fQVJHUygod2luX1QgKndwKSk7CitzdGF0aWMgaW50IGZyYW1lX21pbmhlaWdodCBfX0FSR1MoKGZyYW1lX1QgKnRvcGZycCwgd2luX1QgKm5leHRfY3Vyd2luKSk7CitzdGF0aWMgdm9pZCB3aW5fZW50ZXJfZXh0IF9fQVJHUygod2luX1QgKndwLCBpbnQgdW5kb19zeW5jLCBpbnQgbm9fY3Vyd2luKSk7CitzdGF0aWMgdm9pZCB3aW5fZnJlZSBfX0FSR1MoKHdpbl9UICp3cCkpOworc3RhdGljIHZvaWQgd2luX2FwcGVuZCBfX0FSR1MoKHdpbl9UICosIHdpbl9UICopKTsKK3N0YXRpYyB2b2lkIHdpbl9yZW1vdmUgX19BUkdTKCh3aW5fVCAqKSk7CitzdGF0aWMgdm9pZCBmcmFtZV9hcHBlbmQgX19BUkdTKChmcmFtZV9UICphZnRlciwgZnJhbWVfVCAqZnJwKSk7CitzdGF0aWMgdm9pZCBmcmFtZV9pbnNlcnQgX19BUkdTKChmcmFtZV9UICpiZWZvcmUsIGZyYW1lX1QgKmZycCkpOworc3RhdGljIHZvaWQgZnJhbWVfcmVtb3ZlIF9fQVJHUygoZnJhbWVfVCAqZnJwKSk7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKK3N0YXRpYyB2b2lkIHdpbl9uZXdfd2lkdGggX19BUkdTKCh3aW5fVCAqd3AsIGludCB3aWR0aCkpOworc3RhdGljIGludCB3aW5fbWluaGVpZ2h0IF9fQVJHUygod2luX1QgKndwKSk7CitzdGF0aWMgdm9pZCB3aW5fZ290b192ZXIgX19BUkdTKChpbnQgdXAsIGxvbmcgY291bnQpKTsKK3N0YXRpYyB2b2lkIHdpbl9nb3RvX2hvciBfX0FSR1MoKGludCBsZWZ0LCBsb25nIGNvdW50KSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIGZyYW1lX2FkZF9oZWlnaHQgX19BUkdTKChmcmFtZV9UICpmcnAsIGludCBuKSk7CitzdGF0aWMgdm9pZCBsYXN0X3N0YXR1c19yZWMgX19BUkdTKChmcmFtZV9UICpmciwgaW50IHN0YXR1c2xpbmUpKTsKKworc3RhdGljIHZvaWQgbWFrZV9zbmFwc2hvdCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIG1ha2Vfc25hcHNob3RfcmVjIF9fQVJHUygoZnJhbWVfVCAqZnIsIGZyYW1lX1QgKipmcnApKTsKK3N0YXRpYyB2b2lkIGNsZWFyX3NuYXBzaG90IF9fQVJHUygodm9pZCkpOworc3RhdGljIHZvaWQgY2xlYXJfc25hcHNob3RfcmVjIF9fQVJHUygoZnJhbWVfVCAqZnIpKTsKK3N0YXRpYyB2b2lkIHJlc3RvcmVfc25hcHNob3QgX19BUkdTKChpbnQgY2xvc2VfY3Vyd2luKSk7CitzdGF0aWMgaW50IGNoZWNrX3NuYXBzaG90X3JlYyBfX0FSR1MoKGZyYW1lX1QgKnNuLCBmcmFtZV9UICpmcikpOworc3RhdGljIHdpbl9UICpyZXN0b3JlX3NuYXBzaG90X3JlYyBfX0FSR1MoKGZyYW1lX1QgKnNuLCBmcmFtZV9UICpmcikpOworCisjZW5kaWYgLyogRkVBVF9XSU5ET1dTICovCitzdGF0aWMgd2luX1QgKndpbl9hbGxvYyBfX0FSR1MoKHdpbl9UICphZnRlcikpOworc3RhdGljIHZvaWQgd2luX25ld19oZWlnaHQgX19BUkdTKCh3aW5fVCAqLCBpbnQpKTsKKworI2RlZmluZSBVUkxfU0xBU0gJMQkJLyogcGF0aF9pc191cmwoKSBoYXMgZm91bmQgIjovLyIgKi8KKyNkZWZpbmUgVVJMX0JBQ0tTTEFTSAkyCQkvKiBwYXRoX2lzX3VybCgpIGhhcyBmb3VuZCAiOlxcIiAqLworCisjZGVmaW5lIE5PV0lOCQkod2luX1QgKiktMQkvKiBub24tZXhpc2l0aW5nIHdpbmRvdyAqLworCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogYWxsIENUUkwtVyB3aW5kb3cgY29tbWFuZHMgYXJlIGhhbmRsZWQgaGVyZSwgY2FsbGVkIGZyb20gbm9ybWFsX2NtZCgpLgorICovCisgICAgdm9pZAorZG9fd2luZG93KG5jaGFyLCBQcmVudW0sIHhjaGFyKQorICAgIGludAkJbmNoYXI7CisgICAgbG9uZwlQcmVudW07CisgICAgaW50CQl4Y2hhcjsJICAgIC8qIGV4dHJhIGNoYXIgZnJvbSAiOndpbmNtZCBneCIgb3IgTlVMICovCit7CisgICAgbG9uZwlQcmVudW0xOworICAgIHdpbl9UCSp3cDsKKyNpZiBkZWZpbmVkKEZFQVRfU0VBUkNIUEFUSCkgfHwgZGVmaW5lZChGRUFUX0ZJTkRfSUQpCisgICAgY2hhcl91CSpwdHI7CisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZJTkRfSUQKKyAgICBpbnQJCXR5cGUgPSBGSU5EX0RFRklORTsKKyAgICBpbnQJCWxlbjsKKyNlbmRpZgorICAgIGNoYXJfdQljYnVmWzQwXTsKKworICAgIGlmIChQcmVudW0gPT0gMCkKKwlQcmVudW0xID0gMTsKKyAgICBlbHNlCisJUHJlbnVtMSA9IFByZW51bTsKKworI2lmZGVmIEZFQVRfQ01EV0lOCisjIGRlZmluZSBDSEVDS19DTURXSU4gaWYgKGNtZHdpbl90eXBlICE9IDApIHsgRU1TRyhfKGVfY21kd2luKSk7IGJyZWFrOyB9CisjZWxzZQorIyBkZWZpbmUgQ0hFQ0tfQ01EV0lOCisjZW5kaWYKKworICAgIHN3aXRjaCAobmNoYXIpCisgICAgeworLyogc3BsaXQgY3VycmVudCB3aW5kb3cgaW4gdHdvIHBhcnRzLCBob3Jpem9udGFsbHkgKi8KKyAgICBjYXNlICdTJzoKKyAgICBjYXNlIEN0cmxfUzoKKyAgICBjYXNlICdzJzoKKwkJQ0hFQ0tfQ01EV0lOCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJcmVzZXRfVklzdWFsX2FuZF9yZXNlbCgpOwkvKiBzdG9wIFZpc3VhbCBtb2RlICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSQorCQluZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworI2VuZGlmCisJCXdpbl9zcGxpdCgoaW50KVByZW51bSwgMCk7CisJCWJyZWFrOworCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKy8qIHNwbGl0IGN1cnJlbnQgd2luZG93IGluIHR3byBwYXJ0cywgdmVydGljYWxseSAqLworICAgIGNhc2UgQ3RybF9WOgorICAgIGNhc2UgJ3YnOgorCQlDSEVDS19DTURXSU4KKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQlyZXNldF9WSXN1YWxfYW5kX3Jlc2VsKCk7CS8qIHN0b3AgVmlzdWFsIG1vZGUgKi8KKyNlbmRpZgorI2lmZGVmIEZFQVRfR1VJCisJCW5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKwkJd2luX3NwbGl0KChpbnQpUHJlbnVtLCBXU1BfVkVSVCk7CisJCWJyZWFrOworI2VuZGlmCisKKy8qIHNwbGl0IGN1cnJlbnQgd2luZG93IGFuZCBlZGl0IGFsdGVybmF0ZSBmaWxlICovCisgICAgY2FzZSBDdHJsX0hBVDoKKyAgICBjYXNlICdeJzoKKwkJQ0hFQ0tfQ01EV0lOCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJcmVzZXRfVklzdWFsX2FuZF9yZXNlbCgpOwkvKiBzdG9wIFZpc3VhbCBtb2RlICovCisjZW5kaWYKKwkJU1RSQ1BZKGNidWYsICJzcGxpdCAjIik7CisJCWlmIChQcmVudW0pCisJCSAgICBzcHJpbnRmKChjaGFyICopY2J1ZiArIDcsICIlbGQiLCBQcmVudW0pOworCQlkb19jbWRsaW5lX2NtZChjYnVmKTsKKwkJYnJlYWs7CisKKy8qIG9wZW4gbmV3IHdpbmRvdyAqLworICAgIGNhc2UgQ3RybF9OOgorICAgIGNhc2UgJ24nOgorCQlDSEVDS19DTURXSU4KKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQlyZXNldF9WSXN1YWxfYW5kX3Jlc2VsKCk7CS8qIHN0b3AgVmlzdWFsIG1vZGUgKi8KKyNlbmRpZgorCQlpZiAoUHJlbnVtKQorCQkgICAgc3ByaW50ZigoY2hhciAqKWNidWYsICIlbGQiLCBQcmVudW0pOyAvKiB3aW5kb3cgaGVpZ2h0ICovCisJCWVsc2UKKwkJICAgIGNidWZbMF0gPSBOVUw7CisJCVNUUkNBVChjYnVmLCAibmV3Iik7CisJCWRvX2NtZGxpbmVfY21kKGNidWYpOworCQlicmVhazsKKworLyogcXVpdCBjdXJyZW50IHdpbmRvdyAqLworICAgIGNhc2UgQ3RybF9ROgorICAgIGNhc2UgJ3EnOgorI2lmZGVmIEZFQVRfVklTVUFMCisJCXJlc2V0X1ZJc3VhbF9hbmRfcmVzZWwoKTsJLyogc3RvcCBWaXN1YWwgbW9kZSAqLworI2VuZGlmCisJCWRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikicXVpdCIpOworCQlicmVhazsKKworLyogY2xvc2UgY3VycmVudCB3aW5kb3cgKi8KKyAgICBjYXNlIEN0cmxfQzoKKyAgICBjYXNlICdjJzoKKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQlyZXNldF9WSXN1YWxfYW5kX3Jlc2VsKCk7CS8qIHN0b3AgVmlzdWFsIG1vZGUgKi8KKyNlbmRpZgorCQlkb19jbWRsaW5lX2NtZCgoY2hhcl91ICopImNsb3NlIik7CisJCWJyZWFrOworCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpICYmIGRlZmluZWQoRkVBVF9RVUlDS0ZJWCkKKy8qIGNsb3NlIHByZXZpZXcgd2luZG93ICovCisgICAgY2FzZSBDdHJsX1o6CisgICAgY2FzZSAneic6CisJCUNIRUNLX0NNRFdJTgorI2lmZGVmIEZFQVRfVklTVUFMCisJCXJlc2V0X1ZJc3VhbF9hbmRfcmVzZWwoKTsJLyogc3RvcCBWaXN1YWwgbW9kZSAqLworI2VuZGlmCisJCWRvX2NtZGxpbmVfY21kKChjaGFyX3UgKikicGNsb3NlIik7CisJCWJyZWFrOworCisvKiBjdXJzb3IgdG8gcHJldmlldyB3aW5kb3cgKi8KKyAgICBjYXNlICdQJzoKKwkJZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSBOVUxMOyB3cCA9IHdwLT53X25leHQpCisJCSAgICBpZiAod3AtPndfcF9wdncpCisJCQlicmVhazsKKwkJaWYgKHdwID09IE5VTEwpCisJCSAgICBFTVNHKF8oIkU0NDE6IFRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IikpOworCQllbHNlCisJCSAgICB3aW5fZ290byh3cCk7CisJCWJyZWFrOworI2VuZGlmCisKKy8qIGNsb3NlIGFsbCBidXQgY3VycmVudCB3aW5kb3cgKi8KKyAgICBjYXNlIEN0cmxfTzoKKyAgICBjYXNlICdvJzoKKwkJQ0hFQ0tfQ01EV0lOCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJcmVzZXRfVklzdWFsX2FuZF9yZXNlbCgpOwkvKiBzdG9wIFZpc3VhbCBtb2RlICovCisjZW5kaWYKKwkJZG9fY21kbGluZV9jbWQoKGNoYXJfdSAqKSJvbmx5Iik7CisJCWJyZWFrOworCisvKiBjdXJzb3IgdG8gbmV4dCB3aW5kb3cgd2l0aCB3cmFwIGFyb3VuZCAqLworICAgIGNhc2UgQ3RybF9XOgorICAgIGNhc2UgJ3cnOgorLyogY3Vyc29yIHRvIHByZXZpb3VzIHdpbmRvdyB3aXRoIHdyYXAgYXJvdW5kICovCisgICAgY2FzZSAnVyc6CisJCUNIRUNLX0NNRFdJTgorCQlpZiAobGFzdHdpbiA9PSBmaXJzdHdpbiAmJiBQcmVudW0gIT0gMSkJLyoganVzdCBvbmUgd2luZG93ICovCisJCSAgICBiZWVwX2ZsdXNoKCk7CisJCWVsc2UKKwkJeworCQkgICAgaWYgKFByZW51bSkJCQkvKiBnbyB0byBzcGVjaWZpZWQgd2luZG93ICovCisJCSAgICB7CisJCQlmb3IgKHdwID0gZmlyc3R3aW47IC0tUHJlbnVtID4gMDsgKQorCQkJeworCQkJICAgIGlmICh3cC0+d19uZXh0ID09IE5VTEwpCisJCQkJYnJlYWs7CisJCQkgICAgZWxzZQorCQkJCXdwID0gd3AtPndfbmV4dDsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWlmIChuY2hhciA9PSAnVycpCSAgICAvKiBnbyB0byBwcmV2aW91cyB3aW5kb3cgKi8KKwkJCXsKKwkJCSAgICB3cCA9IGN1cndpbi0+d19wcmV2OworCQkJICAgIGlmICh3cCA9PSBOVUxMKQorCQkJCXdwID0gbGFzdHdpbjsJICAgIC8qIHdyYXAgYXJvdW5kICovCisJCQl9CisJCQllbHNlCQkJICAgIC8qIGdvIHRvIG5leHQgd2luZG93ICovCisJCQl7CisJCQkgICAgd3AgPSBjdXJ3aW4tPndfbmV4dDsKKwkJCSAgICBpZiAod3AgPT0gTlVMTCkKKwkJCQl3cCA9IGZpcnN0d2luOwkgICAgLyogd3JhcCBhcm91bmQgKi8KKwkJCX0KKwkJICAgIH0KKwkJICAgIHdpbl9nb3RvKHdwKTsKKwkJfQorCQlicmVhazsKKworLyogY3Vyc29yIHRvIHdpbmRvdyBiZWxvdyAqLworICAgIGNhc2UgJ2onOgorICAgIGNhc2UgS19ET1dOOgorICAgIGNhc2UgQ3RybF9KOgorCQlDSEVDS19DTURXSU4KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQl3aW5fZ290b192ZXIoRkFMU0UsIFByZW51bTEpOworI2Vsc2UKKwkJZm9yICh3cCA9IGN1cndpbjsgd3AtPndfbmV4dCAhPSBOVUxMICYmIFByZW51bTEtLSA+IDA7CisJCQkJCQkJICAgIHdwID0gd3AtPndfbmV4dCkKKwkJICAgIDsKKwkJd2luX2dvdG8od3ApOworI2VuZGlmCisJCWJyZWFrOworCisvKiBjdXJzb3IgdG8gd2luZG93IGFib3ZlICovCisgICAgY2FzZSAnayc6CisgICAgY2FzZSBLX1VQOgorICAgIGNhc2UgQ3RybF9LOgorCQlDSEVDS19DTURXSU4KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQl3aW5fZ290b192ZXIoVFJVRSwgUHJlbnVtMSk7CisjZWxzZQorCQlmb3IgKHdwID0gY3Vyd2luOyB3cC0+d19wcmV2ICE9IE5VTEwgJiYgUHJlbnVtMS0tID4gMDsKKwkJCQkJCQkgICAgd3AgPSB3cC0+d19wcmV2KQorCQkgICAgOworCQl3aW5fZ290byh3cCk7CisjZW5kaWYKKwkJYnJlYWs7CisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorLyogY3Vyc29yIHRvIGxlZnQgd2luZG93ICovCisgICAgY2FzZSAnaCc6CisgICAgY2FzZSBLX0xFRlQ6CisgICAgY2FzZSBDdHJsX0g6CisgICAgY2FzZSBLX0JTOgorCQlDSEVDS19DTURXSU4KKwkJd2luX2dvdG9faG9yKFRSVUUsIFByZW51bTEpOworCQlicmVhazsKKworLyogY3Vyc29yIHRvIHJpZ2h0IHdpbmRvdyAqLworICAgIGNhc2UgJ2wnOgorICAgIGNhc2UgS19SSUdIVDoKKyAgICBjYXNlIEN0cmxfTDoKKwkJQ0hFQ0tfQ01EV0lOCisJCXdpbl9nb3RvX2hvcihGQUxTRSwgUHJlbnVtMSk7CisJCWJyZWFrOworI2VuZGlmCisKKy8qIGN1cnNvciB0byB0b3AtbGVmdCB3aW5kb3cgKi8KKyAgICBjYXNlICd0JzoKKyAgICBjYXNlIEN0cmxfVDoKKwkJd2luX2dvdG8oZmlyc3R3aW4pOworCQlicmVhazsKKworLyogY3Vyc29yIHRvIGJvdHRvbS1yaWdodCB3aW5kb3cgKi8KKyAgICBjYXNlICdiJzoKKyAgICBjYXNlIEN0cmxfQjoKKwkJd2luX2dvdG8obGFzdHdpbik7CisJCWJyZWFrOworCisvKiBjdXJzb3IgdG8gbGFzdCBhY2Nlc3NlZCAocHJldmlvdXMpIHdpbmRvdyAqLworICAgIGNhc2UgJ3AnOgorICAgIGNhc2UgQ3RybF9QOgorCQlpZiAocHJldndpbiA9PSBOVUxMKQorCQkgICAgYmVlcF9mbHVzaCgpOworCQllbHNlCisJCSAgICB3aW5fZ290byhwcmV2d2luKTsKKwkJYnJlYWs7CisKKy8qIGV4Y2hhbmdlIGN1cnJlbnQgYW5kIG5leHQgd2luZG93ICovCisgICAgY2FzZSAneCc6CisgICAgY2FzZSBDdHJsX1g6CisJCUNIRUNLX0NNRFdJTgorCQl3aW5fZXhjaGFuZ2UoUHJlbnVtKTsKKwkJYnJlYWs7CisKKy8qIHJvdGF0ZSB3aW5kb3dzIGRvd253YXJkcyAqLworICAgIGNhc2UgQ3RybF9SOgorICAgIGNhc2UgJ3InOgorCQlDSEVDS19DTURXSU4KKyNpZmRlZiBGRUFUX1ZJU1VBTAorCQlyZXNldF9WSXN1YWxfYW5kX3Jlc2VsKCk7CS8qIHN0b3AgVmlzdWFsIG1vZGUgKi8KKyNlbmRpZgorCQl3aW5fcm90YXRlKEZBTFNFLCAoaW50KVByZW51bTEpOyAgICAvKiBkb3dud2FyZHMgKi8KKwkJYnJlYWs7CisKKy8qIHJvdGF0ZSB3aW5kb3dzIHVwd2FyZHMgKi8KKyAgICBjYXNlICdSJzoKKwkJQ0hFQ0tfQ01EV0lOCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJcmVzZXRfVklzdWFsX2FuZF9yZXNlbCgpOwkvKiBzdG9wIFZpc3VhbCBtb2RlICovCisjZW5kaWYKKwkJd2luX3JvdGF0ZShUUlVFLCAoaW50KVByZW51bTEpOwkgICAgLyogdXB3YXJkcyAqLworCQlicmVhazsKKworLyogbW92ZSB3aW5kb3cgdG8gdGhlIHZlcnkgdG9wL2JvdHRvbS9sZWZ0L3JpZ2h0ICovCisgICAgY2FzZSAnSyc6CisgICAgY2FzZSAnSic6CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBjYXNlICdIJzoKKyAgICBjYXNlICdMJzoKKyNlbmRpZgorCQlDSEVDS19DTURXSU4KKwkJd2luX3RvdG9wKChpbnQpUHJlbnVtLAorCQkJKChuY2hhciA9PSAnSCcgfHwgbmNoYXIgPT0gJ0wnKSA/IFdTUF9WRVJUIDogMCkKKwkJCXwgKChuY2hhciA9PSAnSCcgfHwgbmNoYXIgPT0gJ0snKSA/IFdTUF9UT1AgOiBXU1BfQk9UKSk7CisJCWJyZWFrOworCisvKiBtYWtlIGFsbCB3aW5kb3dzIHRoZSBzYW1lIGhlaWdodCAqLworICAgIGNhc2UgJz0nOgorI2lmZGVmIEZFQVRfR1VJCisJCW5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKwkJd2luX2VxdWFsKE5VTEwsIEZBTFNFLCAnYicpOworCQlicmVhazsKKworLyogaW5jcmVhc2UgY3VycmVudCB3aW5kb3cgaGVpZ2h0ICovCisgICAgY2FzZSAnKyc6CisjaWZkZWYgRkVBVF9HVUkKKwkJbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyNlbmRpZgorCQl3aW5fc2V0aGVpZ2h0KGN1cndpbi0+d19oZWlnaHQgKyAoaW50KVByZW51bTEpOworCQlicmVhazsKKworLyogZGVjcmVhc2UgY3VycmVudCB3aW5kb3cgaGVpZ2h0ICovCisgICAgY2FzZSAnLSc6CisjaWZkZWYgRkVBVF9HVUkKKwkJbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyNlbmRpZgorCQl3aW5fc2V0aGVpZ2h0KGN1cndpbi0+d19oZWlnaHQgLSAoaW50KVByZW51bTEpOworCQlicmVhazsKKworLyogc2V0IGN1cnJlbnQgd2luZG93IGhlaWdodCAqLworICAgIGNhc2UgQ3RybF9fOgorICAgIGNhc2UgJ18nOgorI2lmZGVmIEZFQVRfR1VJCisJCW5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKwkJd2luX3NldGhlaWdodChQcmVudW0gPyAoaW50KVByZW51bSA6IDk5OTkpOworCQlicmVhazsKKworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisvKiBpbmNyZWFzZSBjdXJyZW50IHdpbmRvdyB3aWR0aCAqLworICAgIGNhc2UgJz4nOgorI2lmZGVmIEZFQVRfR1VJCisJCW5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKwkJd2luX3NldHdpZHRoKGN1cndpbi0+d193aWR0aCArIChpbnQpUHJlbnVtMSk7CisJCWJyZWFrOworCisvKiBkZWNyZWFzZSBjdXJyZW50IHdpbmRvdyB3aWR0aCAqLworICAgIGNhc2UgJzwnOgorI2lmZGVmIEZFQVRfR1VJCisJCW5lZWRfbW91c2VfY29ycmVjdCA9IFRSVUU7CisjZW5kaWYKKwkJd2luX3NldHdpZHRoKGN1cndpbi0+d193aWR0aCAtIChpbnQpUHJlbnVtMSk7CisJCWJyZWFrOworCisvKiBzZXQgY3VycmVudCB3aW5kb3cgd2lkdGggKi8KKyAgICBjYXNlICd8JzoKKyNpZmRlZiBGRUFUX0dVSQorCQluZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworI2VuZGlmCisJCXdpbl9zZXR3aWR0aChQcmVudW0gIT0gMCA/IChpbnQpUHJlbnVtIDogOTk5OSk7CisJCWJyZWFrOworI2VuZGlmCisKKy8qIGp1bXAgdG8gdGFnIGFuZCBzcGxpdCB3aW5kb3cgaWYgdGFnIGV4aXN0cyAoaW4gcHJldmlldyB3aW5kb3cpICovCisjaWYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorICAgIGNhc2UgJ30nOgorCQlDSEVDS19DTURXSU4KKwkJaWYgKFByZW51bSkKKwkJICAgIGdfZG9fdGFncHJldmlldyA9IFByZW51bTsKKwkJZWxzZQorCQkgICAgZ19kb190YWdwcmV2aWV3ID0gcF9wdmg7CisJCS8qRkFMTFRIUk9VR0gqLworI2VuZGlmCisgICAgY2FzZSAnXSc6CisgICAgY2FzZSBDdHJsX1JTQjoKKwkJQ0hFQ0tfQ01EV0lOCisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJcmVzZXRfVklzdWFsX2FuZF9yZXNlbCgpOwkvKiBzdG9wIFZpc3VhbCBtb2RlICovCisjZW5kaWYKKwkJaWYgKFByZW51bSkKKwkJICAgIHBvc3Rwb25lZF9zcGxpdCA9IFByZW51bTsKKwkJZWxzZQorCQkgICAgcG9zdHBvbmVkX3NwbGl0ID0gLTE7CisKKwkJLyogRXhlY3V0ZSB0aGUgY29tbWFuZCByaWdodCBoZXJlLCByZXF1aXJlZCB3aGVuCisJCSAqICJ3aW5jbWQgXSIgd2FzIHVzZWQgaW4gYSBmdW5jdGlvbi4gKi8KKwkJZG9fbnZfaWRlbnQoQ3RybF9SU0IsIE5VTCk7CisJCWJyZWFrOworCisjaWZkZWYgRkVBVF9TRUFSQ0hQQVRICisvKiBlZGl0IGZpbGUgbmFtZSB1bmRlciBjdXJzb3IgaW4gYSBuZXcgd2luZG93ICovCisgICAgY2FzZSAnZic6CisgICAgY2FzZSBDdHJsX0Y6CisJCUNIRUNLX0NNRFdJTgorI2lmZGVmIEZFQVRfVklTVUFMCisJCXJlc2V0X1ZJc3VhbF9hbmRfcmVzZWwoKTsJLyogc3RvcCBWaXN1YWwgbW9kZSAqLworI2VuZGlmCisJCXB0ciA9IGZpbGVfbmFtZV9hdF9jdXJzb3IoRk5BTUVfTUVTU3xGTkFNRV9IWVB8Rk5BTUVfRVhQLAorCQkJCQkJCQkgICAgIFByZW51bTEpOworCQlpZiAocHRyICE9IE5VTEwpCisJCXsKKyNpZmRlZiBGRUFUX0dVSQorCQkgICAgbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyNlbmRpZgorCQkgICAgc2V0cGNtYXJrKCk7CisJCSAgICBpZiAod2luX3NwbGl0KDAsIDApID09IE9LKQorCQkgICAgeworIyBpZmRlZiBGRUFUX1NDUk9MTEJJTkQKKwkJCWN1cndpbi0+d19wX3NjYiA9IEZBTFNFOworIyBlbmRpZgorCQkJKHZvaWQpZG9fZWNtZCgwLCBwdHIsIE5VTEwsIE5VTEwsIEVDTURfTEFTVEwsCisJCQkJCQkJCSAgIEVDTURfSElERSk7CisJCSAgICB9CisJCSAgICB2aW1fZnJlZShwdHIpOworCQl9CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX0ZJTkRfSUQKKy8qIEdvIHRvIHRoZSBmaXJzdCBvY2N1cmVuY2Ugb2YgdGhlIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIGFsb25nIHBhdGggaW4gYQorICogbmV3IHdpbmRvdyAtLSB3ZWJiCisgKi8KKyAgICBjYXNlICdpJzoJCQkgICAgLyogR28gdG8gYW55IG1hdGNoICovCisgICAgY2FzZSBDdHJsX0k6CisJCXR5cGUgPSBGSU5EX0FOWTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlICdkJzoJCQkgICAgLyogR28gdG8gZGVmaW5pdGlvbiwgdXNpbmcgJ2RlZmluZScgKi8KKyAgICBjYXNlIEN0cmxfRDoKKwkJQ0hFQ0tfQ01EV0lOCisJCWlmICgobGVuID0gZmluZF9pZGVudF91bmRlcl9jdXJzb3IoJnB0ciwgRklORF9JREVOVCkpID09IDApCisJCSAgICBicmVhazsKKwkJZmluZF9wYXR0ZXJuX2luX3BhdGgocHRyLCAwLCBsZW4sIFRSVUUsCisJCQlQcmVudW0gPT0gMCA/IFRSVUUgOiBGQUxTRSwgdHlwZSwKKwkJCVByZW51bTEsIEFDVElPTl9TUExJVCwgKGxpbmVucl9UKTEsIChsaW5lbnJfVClNQVhMTlVNKTsKKwkJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CisJCWJyZWFrOworI2VuZGlmCisKKy8qIENUUkwtVyBnICBleHRlbmRlZCBjb21tYW5kcyAqLworICAgIGNhc2UgJ2cnOgorICAgIGNhc2UgQ3RybF9HOgorCQlDSEVDS19DTURXSU4KKyNpZmRlZiBVU0VfT05fRkxZX1NDUk9MTAorCQlkb250X3Njcm9sbCA9IFRSVUU7CQkvKiBkaXNhbGxvdyBzY3JvbGxpbmcgaGVyZSAqLworI2VuZGlmCisJCSsrbm9fbWFwcGluZzsKKwkJKythbGxvd19rZXlzOyAgIC8qIG5vIG1hcHBpbmcgZm9yIHhjaGFyLCBidXQgYWxsb3cga2V5IGNvZGVzICovCisJCWlmICh4Y2hhciA9PSBOVUwpCisJCSAgICB4Y2hhciA9IHNhZmVfdmdldGMoKTsKKyNpZmRlZiBGRUFUX0xBTkdNQVAKKwkJTEFOR01BUF9BREpVU1QoeGNoYXIsIFRSVUUpOworI2VuZGlmCisJCS0tbm9fbWFwcGluZzsKKwkJLS1hbGxvd19rZXlzOworI2lmZGVmIEZFQVRfQ01ETF9JTkZPCisJCSh2b2lkKWFkZF90b19zaG93Y21kKHhjaGFyKTsKKyNlbmRpZgorCQlzd2l0Y2ggKHhjaGFyKQorCQl7CisjaWYgZGVmaW5lZChGRUFUX1FVSUNLRklYKQorCQkgICAgY2FzZSAnfSc6CisJCQl4Y2hhciA9IEN0cmxfUlNCOworCQkJaWYgKFByZW51bSkKKwkJCSAgICBnX2RvX3RhZ3ByZXZpZXcgPSBQcmVudW07CisJCQllbHNlCisJCQkgICAgZ19kb190YWdwcmV2aWV3ID0gcF9wdmg7CisJCQkvKkZBTExUSFJPVUdIKi8KKyNlbmRpZgorCQkgICAgY2FzZSAnXSc6CisJCSAgICBjYXNlIEN0cmxfUlNCOgorI2lmZGVmIEZFQVRfVklTVUFMCisJCQlyZXNldF9WSXN1YWxfYW5kX3Jlc2VsKCk7CS8qIHN0b3AgVmlzdWFsIG1vZGUgKi8KKyNlbmRpZgorCQkJaWYgKFByZW51bSkKKwkJCSAgICBwb3N0cG9uZWRfc3BsaXQgPSBQcmVudW07CisJCQllbHNlCisJCQkgICAgcG9zdHBvbmVkX3NwbGl0ID0gLTE7CisKKwkJCS8qIEV4ZWN1dGUgdGhlIGNvbW1hbmQgcmlnaHQgaGVyZSwgcmVxdWlyZWQgd2hlbgorCQkJICogIndpbmNtZCBnfSIgd2FzIHVzZWQgaW4gYSBmdW5jdGlvbi4gKi8KKwkJCWRvX252X2lkZW50KCdnJywgeGNoYXIpOworCQkJYnJlYWs7CisKKwkJICAgIGRlZmF1bHQ6CisJCQliZWVwX2ZsdXNoKCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworICAgIGRlZmF1bHQ6CWJlZXBfZmx1c2goKTsKKwkJYnJlYWs7CisgICAgfQorfQorCisvKgorICogc3BsaXQgdGhlIGN1cnJlbnQgd2luZG93LCBpbXBsZW1lbnRzIENUUkwtVyBzIGFuZCA6c3BsaXQKKyAqCisgKiAic2l6ZSIgaXMgdGhlIGhlaWdodCBvciB3aWR0aCBmb3IgdGhlIG5ldyB3aW5kb3csIDAgdG8gdXNlIGhhbGYgb2YgY3VycmVudAorICogaGVpZ2h0IG9yIHdpZHRoLgorICoKKyAqICJmbGFncyI6CisgKiBXU1BfUk9PTTogcmVxdWlyZSBlbm91Z2ggcm9vbSBmb3IgbmV3IHdpbmRvdworICogV1NQX1ZFUlQ6IHZlcnRpY2FsIHNwbGl0LgorICogV1NQX1RPUDogIG9wZW4gd2luZG93IGF0IHRoZSB0b3AtbGVmdCBvZiB0aGUgc2hlbGwgKGhlbHAgd2luZG93KS4KKyAqIFdTUF9CT1Q6ICBvcGVuIHdpbmRvdyBhdCB0aGUgYm90dG9tLXJpZ2h0IG9mIHRoZSBzaGVsbCAocXVpY2tmaXggd2luZG93KS4KKyAqIFdTUF9IRUxQOiBjcmVhdGluZyB0aGUgaGVscCB3aW5kb3csIGtlZXAgbGF5b3V0IHNuYXBzaG90CisgKgorICogcmV0dXJuIEZBSUwgZm9yIGZhaWx1cmUsIE9LIG90aGVyd2lzZQorICovCisgICAgaW50Cit3aW5fc3BsaXQoc2l6ZSwgZmxhZ3MpCisgICAgaW50CQlzaXplOworICAgIGludAkJZmxhZ3M7Cit7CisgICAgLyogQWRkIGZsYWdzIGZyb20gIjp2ZXJ0aWNhbCIsICI6dG9wbGVmdCIgYW5kICI6Ym90cmlnaHQiLiAqLworICAgIGZsYWdzIHw9IGNtZG1vZC5zcGxpdDsKKyAgICBpZiAoKGZsYWdzICYgV1NQX1RPUCkgJiYgKGZsYWdzICYgV1NQX0JPVCkpCisgICAgeworCUVNU0coXygiRTQ0MjogQ2FuJ3Qgc3BsaXQgdG9wbGVmdCBhbmQgYm90cmlnaHQgYXQgdGhlIHNhbWUgdGltZSIpKTsKKwlyZXR1cm4gRkFJTDsKKyAgICB9CisKKyAgICAvKiBXaGVuIGNyZWF0aW5nIHRoZSBoZWxwIHdpbmRvdyBtYWtlIGEgc25hcHNob3Qgb2YgdGhlIHdpbmRvdyBsYXlvdXQuCisgICAgICogT3RoZXJ3aXNlIGNsZWFyIHRoZSBzbmFwc2hvdCwgaXQncyBub3cgaW52YWxpZC4gKi8KKyAgICBpZiAoZmxhZ3MgJiBXU1BfSEVMUCkKKwltYWtlX3NuYXBzaG90KCk7CisgICAgZWxzZQorCWNsZWFyX3NuYXBzaG90KCk7CisKKyAgICByZXR1cm4gd2luX3NwbGl0X2lucyhzaXplLCBmbGFncywgTlVMTCwgMCk7Cit9CisKKy8qCisgKiBXaGVuICJuZXd3aW4iIGlzIE5VTEw6IHNwbGl0IGEgd2luZG93IGluIHR3by4KKyAqIFdoZW4gIm5ld3dpbiIgaXMgbm90IE5VTEw6IGluc2VydCB0aGlzIHdpbmRvdyBhdCB0aGUgZmFyCisgKiB0b3AvbGVmdC9yaWdodC9ib3R0b20uCisgKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKi8KKyAgICBzdGF0aWMgaW50Cit3aW5fc3BsaXRfaW5zKHNpemUsIGZsYWdzLCBuZXd3aW4sIGRpcikKKyAgICBpbnQJCXNpemU7CisgICAgaW50CQlmbGFnczsKKyAgICB3aW5fVAkqbmV3d2luOworICAgIGludAkJZGlyOworeworICAgIHdpbl9UCSp3cCA9IG5ld3dpbjsKKyAgICB3aW5fVAkqb2xkd2luOworICAgIGludAkJbmV3X3NpemUgPSBzaXplOworICAgIGludAkJaTsKKyAgICBpbnQJCW5lZWRfc3RhdHVzID0gMDsKKyAgICBpbnQJCWRvX2VxdWFsID0gRkFMU0U7CisgICAgaW50CQluZWVkZWQ7CisgICAgaW50CQlhdmFpbGFibGU7CisgICAgaW50CQlvbGR3aW5faGVpZ2h0ID0gMDsKKyAgICBpbnQJCWxheW91dDsKKyAgICBmcmFtZV9UCSpmcnAsICpjdXJmcnA7CisgICAgaW50CQliZWZvcmU7CisKKyAgICBpZiAoZmxhZ3MgJiBXU1BfVE9QKQorCW9sZHdpbiA9IGZpcnN0d2luOworICAgIGVsc2UgaWYgKGZsYWdzICYgV1NQX0JPVCkKKwlvbGR3aW4gPSBsYXN0d2luOworICAgIGVsc2UKKwlvbGR3aW4gPSBjdXJ3aW47CisKKyAgICAvKiBhZGQgYSBzdGF0dXMgbGluZSB3aGVuIHBfbHMgPT0gMSBhbmQgc3BsaXR0aW5nIHRoZSBmaXJzdCB3aW5kb3cgKi8KKyAgICBpZiAobGFzdHdpbiA9PSBmaXJzdHdpbiAmJiBwX2xzID09IDEgJiYgb2xkd2luLT53X3N0YXR1c19oZWlnaHQgPT0gMCkKKyAgICB7CisJaWYgKG9sZHdpbi0+d19oZWlnaHQgPD0gcF93bWggJiYgbmV3d2luID09IE5VTEwpCisJeworCSAgICBFTVNHKF8oZV9ub3Jvb20pKTsKKwkgICAgcmV0dXJuIEZBSUw7CisJfQorCW5lZWRfc3RhdHVzID0gU1RBVFVTX0hFSUdIVDsKKyAgICB9CisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGlmIChmbGFncyAmIFdTUF9WRVJUKQorICAgIHsKKwlsYXlvdXQgPSBGUl9ST1c7CisJZG9fZXF1YWwgPSAocF9lYSAmJiBuZXdfc2l6ZSA9PSAwICYmICpwX2VhZCAhPSAndicpOworCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBhcmUgYWJsZSB0byBzcGxpdCB0aGUgY3VycmVudCB3aW5kb3cgYW5kIGNvbXB1dGUgaXRzCisJICogd2lkdGguCisJICovCisJbmVlZGVkID0gcF93bXcgKyAxOworCWlmIChmbGFncyAmIFdTUF9ST09NKQorCSAgICBuZWVkZWQgKz0gcF93aXcgLSBwX3dtdzsKKwlpZiAocF9lYSB8fCAoZmxhZ3MgJiAoV1NQX0JPVCB8IFdTUF9UT1ApKSkKKwl7CisJICAgIGF2YWlsYWJsZSA9IHRvcGZyYW1lLT5mcl93aWR0aDsKKwkgICAgbmVlZGVkICs9IGZyYW1lX21pbndpZHRoKHRvcGZyYW1lLCBOVUxMKTsKKwl9CisJZWxzZQorCSAgICBhdmFpbGFibGUgPSBvbGR3aW4tPndfd2lkdGg7CisJaWYgKGF2YWlsYWJsZSA8IG5lZWRlZCAmJiBuZXd3aW4gPT0gTlVMTCkKKwl7CisJICAgIEVNU0coXyhlX25vcm9vbSkpOworCSAgICByZXR1cm4gRkFJTDsKKwl9CisJaWYgKG5ld19zaXplID09IDApCisJICAgIG5ld19zaXplID0gb2xkd2luLT53X3dpZHRoIC8gMjsKKwlpZiAobmV3X3NpemUgPiBvbGR3aW4tPndfd2lkdGggLSBwX3dtdyAtIDEpCisJICAgIG5ld19zaXplID0gb2xkd2luLT53X3dpZHRoIC0gcF93bXcgLSAxOworCWlmIChuZXdfc2l6ZSA8IHBfd213KQorCSAgICBuZXdfc2l6ZSA9IHBfd213OworCisJLyogaWYgaXQgZG9lc24ndCBmaXQgaW4gdGhlIGN1cnJlbnQgd2luZG93LCBuZWVkIHdpbl9lcXVhbCgpICovCisJaWYgKG9sZHdpbi0+d193aWR0aCAtIG5ld19zaXplIC0gMSA8IHBfd213KQorCSAgICBkb19lcXVhbCA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKwlsYXlvdXQgPSBGUl9DT0w7CisJZG9fZXF1YWwgPSAocF9lYSAmJiBuZXdfc2l6ZSA9PSAwCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkJJiYgKnBfZWFkICE9ICdoJworI2VuZGlmCisJCSk7CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGFyZSBhYmxlIHRvIHNwbGl0IHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgY29tcHV0ZSBpdHMKKwkgKiBoZWlnaHQuCisJICovCisJbmVlZGVkID0gcF93bWggKyBTVEFUVVNfSEVJR0hUICsgbmVlZF9zdGF0dXM7CisJaWYgKGZsYWdzICYgV1NQX1JPT00pCisJICAgIG5lZWRlZCArPSBwX3doIC0gcF93bWg7CisJaWYgKHBfZWEgfHwgKGZsYWdzICYgKFdTUF9CT1QgfCBXU1BfVE9QKSkpCisJeworCSAgICBhdmFpbGFibGUgPSB0b3BmcmFtZS0+ZnJfaGVpZ2h0OworCSAgICBuZWVkZWQgKz0gZnJhbWVfbWluaGVpZ2h0KHRvcGZyYW1lLCBOVUxMKTsKKwl9CisJZWxzZQorCXsKKwkgICAgYXZhaWxhYmxlID0gb2xkd2luLT53X2hlaWdodDsKKwkgICAgbmVlZGVkICs9IHBfd21oOworCX0KKwlpZiAoYXZhaWxhYmxlIDwgbmVlZGVkICYmIG5ld3dpbiA9PSBOVUxMKQorCXsKKwkgICAgRU1TRyhfKGVfbm9yb29tKSk7CisJICAgIHJldHVybiBGQUlMOworCX0KKwlvbGR3aW5faGVpZ2h0ID0gb2xkd2luLT53X2hlaWdodDsKKwlpZiAobmVlZF9zdGF0dXMpCisJeworCSAgICBvbGR3aW4tPndfc3RhdHVzX2hlaWdodCA9IFNUQVRVU19IRUlHSFQ7CisJICAgIG9sZHdpbl9oZWlnaHQgLT0gU1RBVFVTX0hFSUdIVDsKKwl9CisJaWYgKG5ld19zaXplID09IDApCisJICAgIG5ld19zaXplID0gb2xkd2luX2hlaWdodCAvIDI7CisKKwlpZiAobmV3X3NpemUgPiBvbGR3aW5faGVpZ2h0IC0gcF93bWggLSBTVEFUVVNfSEVJR0hUKQorCSAgICBuZXdfc2l6ZSA9IG9sZHdpbl9oZWlnaHQgLSBwX3dtaCAtIFNUQVRVU19IRUlHSFQ7CisJaWYgKG5ld19zaXplIDwgcF93bWgpCisJICAgIG5ld19zaXplID0gcF93bWg7CisKKwkvKiBpZiBpdCBkb2Vzbid0IGZpdCBpbiB0aGUgY3VycmVudCB3aW5kb3csIG5lZWQgd2luX2VxdWFsKCkgKi8KKwlpZiAob2xkd2luX2hlaWdodCAtIG5ld19zaXplIC0gU1RBVFVTX0hFSUdIVCA8IHBfd21oKQorCSAgICBkb19lcXVhbCA9IFRSVUU7CisKKwkvKiBXZSBkb24ndCBsaWtlIHRvIHRha2UgbGluZXMgZm9yIHRoZSBuZXcgd2luZG93IGZyb20gYQorCSAqICd3aW5maXhoZWlnaHQnIHdpbmRvdy4gIFRha2UgdGhlbSBmcm9tIGEgd2luZG93IGFib3ZlIG9yIGJlbG93CisJICogaW5zdGVhZCwgaWYgcG9zc2libGUuICovCisJaWYgKG9sZHdpbi0+d19wX3dmaCkKKwl7CisJICAgIHdpbl9zZXRoZWlnaHRfd2luKG9sZHdpbi0+d19oZWlnaHQgKyBuZXdfc2l6ZSArIFNUQVRVU19IRUlHSFQsCisJCQkJCQkJCSAgICAgIG9sZHdpbik7CisJICAgIG9sZHdpbl9oZWlnaHQgPSBvbGR3aW4tPndfaGVpZ2h0OworCSAgICBpZiAobmVlZF9zdGF0dXMpCisJCW9sZHdpbl9oZWlnaHQgLT0gU1RBVFVTX0hFSUdIVDsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhbGxvY2F0ZSBuZXcgd2luZG93IHN0cnVjdHVyZSBhbmQgbGluayBpdCBpbiB0aGUgd2luZG93IGxpc3QKKyAgICAgKi8KKyAgICBpZiAoKGZsYWdzICYgV1NQX1RPUCkgPT0gMAorCSAgICAmJiAoKGZsYWdzICYgV1NQX0JPVCkKKwkJfHwgKGZsYWdzICYgV1NQX0JFTE9XKQorCQl8fCAoIShmbGFncyAmIFdTUF9BQk9WRSkKKwkJICAgICYmICgKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQkJKGZsYWdzICYgV1NQX1ZFUlQpID8gcF9zcHIgOgorI2VuZGlmCisJCQlwX3NiKSkpKQorICAgIHsKKwkvKiBuZXcgd2luZG93IGJlbG93L3JpZ2h0IG9mIGN1cnJlbnQgb25lICovCisJaWYgKG5ld3dpbiA9PSBOVUxMKQorCSAgICB3cCA9IHdpbl9hbGxvYyhvbGR3aW4pOworCWVsc2UKKwkgICAgd2luX2FwcGVuZChvbGR3aW4sIHdwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAobmV3d2luID09IE5VTEwpCisJICAgIHdwID0gd2luX2FsbG9jKG9sZHdpbi0+d19wcmV2KTsKKwllbHNlCisJICAgIHdpbl9hcHBlbmQob2xkd2luLT53X3ByZXYsIHdwKTsKKyAgICB9CisKKyAgICBpZiAobmV3d2luID09IE5VTEwpCisgICAgeworCWlmICh3cCA9PSBOVUxMKQorCSAgICByZXR1cm4gRkFJTDsKKworCS8qCisJICogbWFrZSB0aGUgY29udGVudHMgb2YgdGhlIG5ldyB3aW5kb3cgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgb25lCisJICovCisJd3AtPndfYnVmZmVyID0gY3VyYnVmOworCWN1cmJ1Zi0+Yl9ud2luZG93cysrOworCXdwLT53X2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7CisJd3AtPndfdmFsaWQgPSAwOworCXdwLT53X2N1cnN3YW50ID0gY3Vyd2luLT53X2N1cnN3YW50OworCXdwLT53X3NldF9jdXJzd2FudCA9IGN1cndpbi0+d19zZXRfY3Vyc3dhbnQ7CisJd3AtPndfdG9wbGluZSA9IGN1cndpbi0+d190b3BsaW5lOworI2lmZGVmIEZFQVRfRElGRgorCXdwLT53X3RvcGZpbGwgPSBjdXJ3aW4tPndfdG9wZmlsbDsKKyNlbmRpZgorCXdwLT53X2xlZnRjb2wgPSBjdXJ3aW4tPndfbGVmdGNvbDsKKwl3cC0+d19wY21hcmsgPSBjdXJ3aW4tPndfcGNtYXJrOworCXdwLT53X3ByZXZfcGNtYXJrID0gY3Vyd2luLT53X3ByZXZfcGNtYXJrOworCXdwLT53X2FsdF9mbnVtID0gY3Vyd2luLT53X2FsdF9mbnVtOworCXdwLT53X2ZyYWN0aW9uID0gY3Vyd2luLT53X2ZyYWN0aW9uOworCXdwLT53X3ByZXZfZnJhY3Rpb25fcm93ID0gY3Vyd2luLT53X3ByZXZfZnJhY3Rpb25fcm93OworI2lmZGVmIEZFQVRfSlVNUExJU1QKKwljb3B5X2p1bXBsaXN0KGN1cndpbiwgd3ApOworI2VuZGlmCisJaWYgKGN1cndpbi0+d19sb2NhbGRpciAhPSBOVUxMKQorCSAgICB3cC0+d19sb2NhbGRpciA9IHZpbV9zdHJzYXZlKGN1cndpbi0+d19sb2NhbGRpcik7CisKKwkvKiBVc2UgdGhlIHNhbWUgYXJndW1lbnQgbGlzdC4gKi8KKwl3cC0+d19hbGlzdCA9IGN1cndpbi0+d19hbGlzdDsKKwkrK3dwLT53X2FsaXN0LT5hbF9yZWZjb3VudDsKKwl3cC0+d19hcmdfaWR4ID0gY3Vyd2luLT53X2FyZ19pZHg7CisKKwkvKgorCSAqIGNvcHkgdGFnc3RhY2sgYW5kIG9wdGlvbnMgZnJvbSBleGlzdGluZyB3aW5kb3cKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY3Vyd2luLT53X3RhZ3N0YWNrbGVuOyBpKyspCisJeworCSAgICB3cC0+d190YWdzdGFja1tpXSA9IGN1cndpbi0+d190YWdzdGFja1tpXTsKKwkgICAgaWYgKHdwLT53X3RhZ3N0YWNrW2ldLnRhZ25hbWUgIT0gTlVMTCkKKwkJd3AtPndfdGFnc3RhY2tbaV0udGFnbmFtZSA9CisJCQkJICAgICAgIHZpbV9zdHJzYXZlKHdwLT53X3RhZ3N0YWNrW2ldLnRhZ25hbWUpOworCX0KKwl3cC0+d190YWdzdGFja2lkeCA9IGN1cndpbi0+d190YWdzdGFja2lkeDsKKwl3cC0+d190YWdzdGFja2xlbiA9IGN1cndpbi0+d190YWdzdGFja2xlbjsKKwl3aW5fY29weV9vcHRpb25zKGN1cndpbiwgd3ApOworI2lmZGVmIEZFQVRfRk9MRElORworCWNvcHlGb2xkaW5nU3RhdGUoY3Vyd2luLCB3cCk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlb3JnYW5pc2UgdGhlIHRyZWUgb2YgZnJhbWVzIHRvIGluc2VydCB0aGUgbmV3IHdpbmRvdy4KKyAgICAgKi8KKyAgICBpZiAoZmxhZ3MgJiAoV1NQX1RPUCB8IFdTUF9CT1QpKQorICAgIHsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCWlmICgodG9wZnJhbWUtPmZyX2xheW91dCA9PSBGUl9DT0wgJiYgKGZsYWdzICYgV1NQX1ZFUlQpID09IDApCisJICAgIHx8ICh0b3BmcmFtZS0+ZnJfbGF5b3V0ID09IEZSX1JPVyAmJiAoZmxhZ3MgJiBXU1BfVkVSVCkgIT0gMCkpCisjZWxzZQorCWlmICh0b3BmcmFtZS0+ZnJfbGF5b3V0ID09IEZSX0NPTCkKKyNlbmRpZgorCXsKKwkgICAgY3VyZnJwID0gdG9wZnJhbWUtPmZyX2NoaWxkOworCSAgICBpZiAoZmxhZ3MgJiBXU1BfQk9UKQorCQl3aGlsZSAoY3VyZnJwLT5mcl9uZXh0ICE9IE5VTEwpCisJCSAgICBjdXJmcnAgPSBjdXJmcnAtPmZyX25leHQ7CisJfQorCWVsc2UKKwkgICAgY3VyZnJwID0gdG9wZnJhbWU7CisJYmVmb3JlID0gKGZsYWdzICYgV1NQX1RPUCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY3VyZnJwID0gb2xkd2luLT53X2ZyYW1lOworCWlmIChmbGFncyAmIFdTUF9CRUxPVykKKwkgICAgYmVmb3JlID0gRkFMU0U7CisJZWxzZSBpZiAoZmxhZ3MgJiBXU1BfQUJPVkUpCisJICAgIGJlZm9yZSA9IFRSVUU7CisJZWxzZQorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJaWYgKGZsYWdzICYgV1NQX1ZFUlQpCisJICAgIGJlZm9yZSA9ICFwX3NwcjsKKwllbHNlCisjZW5kaWYKKwkgICAgYmVmb3JlID0gIXBfc2I7CisgICAgfQorICAgIGlmIChjdXJmcnAtPmZyX3BhcmVudCA9PSBOVUxMIHx8IGN1cmZycC0+ZnJfcGFyZW50LT5mcl9sYXlvdXQgIT0gbGF5b3V0KQorICAgIHsKKwkvKiBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBmcmFtZSBpbiB0aGUgdHJlZSB0byBtYWtlIGEgYnJhbmNoLiAqLworCWZycCA9IChmcmFtZV9UICopYWxsb2NfY2xlYXIoKHVuc2lnbmVkKXNpemVvZihmcmFtZV9UKSk7CisJKmZycCA9ICpjdXJmcnA7CisJY3VyZnJwLT5mcl9sYXlvdXQgPSBsYXlvdXQ7CisJZnJwLT5mcl9wYXJlbnQgPSBjdXJmcnA7CisJZnJwLT5mcl9uZXh0ID0gTlVMTDsKKwlmcnAtPmZyX3ByZXYgPSBOVUxMOworCWN1cmZycC0+ZnJfY2hpbGQgPSBmcnA7CisJY3VyZnJwLT5mcl93aW4gPSBOVUxMOworCWN1cmZycCA9IGZycDsKKwlpZiAoZnJwLT5mcl93aW4gIT0gTlVMTCkKKwkgICAgb2xkd2luLT53X2ZyYW1lID0gZnJwOworCWVsc2UKKwkgICAgZm9yIChmcnAgPSBmcnAtPmZyX2NoaWxkOyBmcnAgIT0gTlVMTDsgZnJwID0gZnJwLT5mcl9uZXh0KQorCQlmcnAtPmZyX3BhcmVudCA9IGN1cmZycDsKKyAgICB9CisKKyAgICBpZiAobmV3d2luID09IE5VTEwpCisgICAgeworCS8qIENyZWF0ZSBhIGZyYW1lIGZvciB0aGUgbmV3IHdpbmRvdy4gKi8KKwlmcnAgPSAoZnJhbWVfVCAqKWFsbG9jX2NsZWFyKCh1bnNpZ25lZClzaXplb2YoZnJhbWVfVCkpOworCWZycC0+ZnJfbGF5b3V0ID0gRlJfTEVBRjsKKwlmcnAtPmZyX3dpbiA9IHdwOworCXdwLT53X2ZyYW1lID0gZnJwOworICAgIH0KKyAgICBlbHNlCisJZnJwID0gbmV3d2luLT53X2ZyYW1lOworICAgIGZycC0+ZnJfcGFyZW50ID0gY3VyZnJwLT5mcl9wYXJlbnQ7CisKKyAgICAvKiBJbnNlcnQgdGhlIG5ldyBmcmFtZSBhdCB0aGUgcmlnaHQgcGxhY2UgaW4gdGhlIGZyYW1lIGxpc3QuICovCisgICAgaWYgKGJlZm9yZSkKKwlmcmFtZV9pbnNlcnQoY3VyZnJwLCBmcnApOworICAgIGVsc2UKKwlmcmFtZV9hcHBlbmQoY3VyZnJwLCBmcnApOworCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBpZiAoZmxhZ3MgJiBXU1BfVkVSVCkKKyAgICB7CisJd3AtPndfcF9zY3IgPSBjdXJ3aW4tPndfcF9zY3I7CisJaWYgKG5lZWRfc3RhdHVzKQorCXsKKwkgICAgLS1vbGR3aW4tPndfaGVpZ2h0OworCSAgICBvbGR3aW4tPndfc3RhdHVzX2hlaWdodCA9IG5lZWRfc3RhdHVzOworCX0KKwlpZiAoZmxhZ3MgJiAoV1NQX1RPUCB8IFdTUF9CT1QpKQorCXsKKwkgICAgLyogc2V0IGhlaWdodCBhbmQgcm93IG9mIG5ldyB3aW5kb3cgdG8gZnVsbCBoZWlnaHQgKi8KKwkgICAgd3AtPndfd2lucm93ID0gMDsKKwkgICAgd3AtPndfaGVpZ2h0ID0gY3VyZnJwLT5mcl9oZWlnaHQgLSAocF9scyA+IDApOworCSAgICB3cC0+d19zdGF0dXNfaGVpZ2h0ID0gKHBfbHMgPiAwKTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyogaGVpZ2h0IGFuZCByb3cgb2YgbmV3IHdpbmRvdyBpcyBzYW1lIGFzIGN1cnJlbnQgd2luZG93ICovCisJICAgIHdwLT53X3dpbnJvdyA9IG9sZHdpbi0+d193aW5yb3c7CisJICAgIHdwLT53X2hlaWdodCA9IG9sZHdpbi0+d19oZWlnaHQ7CisJICAgIHdwLT53X3N0YXR1c19oZWlnaHQgPSBvbGR3aW4tPndfc3RhdHVzX2hlaWdodDsKKwl9CisJZnJwLT5mcl9oZWlnaHQgPSBjdXJmcnAtPmZyX2hlaWdodDsKKworCS8qICJuZXdfc2l6ZSIgb2YgdGhlIGN1cnJlbnQgd2luZG93IGdvZXMgdG8gdGhlIG5ldyB3aW5kb3csIHVzZQorCSAqIG9uZSBjb2x1bW4gZm9yIHRoZSB2ZXJ0aWNhbCBzZXBhcmF0b3IgKi8KKwl3cC0+d193aWR0aCA9IG5ld19zaXplOworCWlmIChiZWZvcmUpCisJICAgIHdwLT53X3ZzZXBfd2lkdGggPSAxOworCWVsc2UKKwl7CisJICAgIHdwLT53X3ZzZXBfd2lkdGggPSBvbGR3aW4tPndfdnNlcF93aWR0aDsKKwkgICAgb2xkd2luLT53X3ZzZXBfd2lkdGggPSAxOworCX0KKwlpZiAoZmxhZ3MgJiAoV1NQX1RPUCB8IFdTUF9CT1QpKQorCXsKKwkgICAgaWYgKGZsYWdzICYgV1NQX0JPVCkKKwkJZnJhbWVfYWRkX3ZzZXAoY3VyZnJwKTsKKwkgICAgLyogU2V0IHdpZHRoIG9mIG5laWdoYm9yIGZyYW1lICovCisJICAgIGZyYW1lX25ld193aWR0aChjdXJmcnAsIGN1cmZycC0+ZnJfd2lkdGgKKwkJICAgIC0gKG5ld19zaXplICsgKChmbGFncyAmIFdTUF9UT1ApICE9IDApKSwgZmxhZ3MgJiBXU1BfVE9QKTsKKwl9CisJZWxzZQorCSAgICBvbGR3aW4tPndfd2lkdGggLT0gbmV3X3NpemUgKyAxOworCWlmIChiZWZvcmUpCS8qIG5ldyB3aW5kb3cgbGVmdCBvZiBjdXJyZW50IG9uZSAqLworCXsKKwkgICAgd3AtPndfd2luY29sID0gb2xkd2luLT53X3dpbmNvbDsKKwkgICAgb2xkd2luLT53X3dpbmNvbCArPSBuZXdfc2l6ZSArIDE7CisJfQorCWVsc2UJCS8qIG5ldyB3aW5kb3cgcmlnaHQgb2YgY3VycmVudCBvbmUgKi8KKwkgICAgd3AtPndfd2luY29sID0gb2xkd2luLT53X3dpbmNvbCArIG9sZHdpbi0+d193aWR0aCArIDE7CisJZnJhbWVfZml4X3dpZHRoKG9sZHdpbik7CisJZnJhbWVfZml4X3dpZHRoKHdwKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCS8qIHdpZHRoIGFuZCBjb2x1bW4gb2YgbmV3IHdpbmRvdyBpcyBzYW1lIGFzIGN1cnJlbnQgd2luZG93ICovCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwlpZiAoZmxhZ3MgJiAoV1NQX1RPUCB8IFdTUF9CT1QpKQorCXsKKwkgICAgd3AtPndfd2luY29sID0gMDsKKwkgICAgd3AtPndfd2lkdGggPSBDb2x1bW5zOworCSAgICB3cC0+d192c2VwX3dpZHRoID0gMDsKKwl9CisJZWxzZQorCXsKKwkgICAgd3AtPndfd2luY29sID0gb2xkd2luLT53X3dpbmNvbDsKKwkgICAgd3AtPndfd2lkdGggPSBvbGR3aW4tPndfd2lkdGg7CisJICAgIHdwLT53X3ZzZXBfd2lkdGggPSBvbGR3aW4tPndfdnNlcF93aWR0aDsKKwl9CisJZnJwLT5mcl93aWR0aCA9IGN1cmZycC0+ZnJfd2lkdGg7CisjZW5kaWYKKworCS8qICJuZXdfc2l6ZSIgb2YgdGhlIGN1cnJlbnQgd2luZG93IGdvZXMgdG8gdGhlIG5ldyB3aW5kb3csIHVzZQorCSAqIG9uZSByb3cgZm9yIHRoZSBzdGF0dXMgbGluZSAqLworCXdpbl9uZXdfaGVpZ2h0KHdwLCBuZXdfc2l6ZSk7CisJaWYgKGZsYWdzICYgKFdTUF9UT1AgfCBXU1BfQk9UKSkKKwkgICAgZnJhbWVfbmV3X2hlaWdodChjdXJmcnAsIGN1cmZycC0+ZnJfaGVpZ2h0CisJCQktIChuZXdfc2l6ZSArIFNUQVRVU19IRUlHSFQpLCBmbGFncyAmIFdTUF9UT1AsIEZBTFNFKTsKKwllbHNlCisJICAgIHdpbl9uZXdfaGVpZ2h0KG9sZHdpbiwgb2xkd2luX2hlaWdodCAtIChuZXdfc2l6ZSArIFNUQVRVU19IRUlHSFQpKTsKKwlpZiAoYmVmb3JlKQkvKiBuZXcgd2luZG93IGFib3ZlIGN1cnJlbnQgb25lICovCisJeworCSAgICB3cC0+d193aW5yb3cgPSBvbGR3aW4tPndfd2lucm93OworCSAgICB3cC0+d19zdGF0dXNfaGVpZ2h0ID0gU1RBVFVTX0hFSUdIVDsKKwkgICAgb2xkd2luLT53X3dpbnJvdyArPSB3cC0+d19oZWlnaHQgKyBTVEFUVVNfSEVJR0hUOworCX0KKwllbHNlCQkvKiBuZXcgd2luZG93IGJlbG93IGN1cnJlbnQgb25lICovCisJeworCSAgICB3cC0+d193aW5yb3cgPSBvbGR3aW4tPndfd2lucm93ICsgb2xkd2luLT53X2hlaWdodCArIFNUQVRVU19IRUlHSFQ7CisJICAgIHdwLT53X3N0YXR1c19oZWlnaHQgPSBvbGR3aW4tPndfc3RhdHVzX2hlaWdodDsKKwkgICAgb2xkd2luLT53X3N0YXR1c19oZWlnaHQgPSBTVEFUVVNfSEVJR0hUOworCX0KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCWlmIChmbGFncyAmIFdTUF9CT1QpCisJICAgIGZyYW1lX2FkZF9zdGF0dXNsaW5lKGN1cmZycCk7CisjZW5kaWYKKwlmcmFtZV9maXhfaGVpZ2h0KHdwKTsKKwlmcmFtZV9maXhfaGVpZ2h0KG9sZHdpbik7CisgICAgfQorCisgICAgaWYgKGZsYWdzICYgKFdTUF9UT1AgfCBXU1BfQk9UKSkKKwkodm9pZCl3aW5fY29tcF9wb3MoKTsKKworICAgIC8qCisgICAgICogQm90aCB3aW5kb3dzIG5lZWQgcmVkcmF3aW5nCisgICAgICovCisgICAgcmVkcmF3X3dpbl9sYXRlcih3cCwgTk9UX1ZBTElEKTsKKyAgICB3cC0+d19yZWRyX3N0YXR1cyA9IFRSVUU7CisgICAgcmVkcmF3X3dpbl9sYXRlcihvbGR3aW4sIE5PVF9WQUxJRCk7CisgICAgb2xkd2luLT53X3JlZHJfc3RhdHVzID0gVFJVRTsKKworICAgIGlmIChuZWVkX3N0YXR1cykKKyAgICB7CisJbXNnX3JvdyA9IFJvd3MgLSAxOworCW1zZ19jb2wgPSBzY19jb2w7CisJbXNnX2Nscl9lb3NfZm9yY2UoKTsJLyogT2xkIGNvbW1hbmQvcnVsZXIgbWF5IHN0aWxsIGJlIHRoZXJlICovCisJY29tcF9jb2woKTsKKwltc2dfcm93ID0gUm93cyAtIDE7CisJbXNnX2NvbCA9IDA7CS8qIHB1dCBwb3NpdGlvbiBiYWNrIGF0IHN0YXJ0IG9mIGxpbmUgKi8KKyAgICB9CisKKyAgICAvKgorICAgICAqIG1ha2UgdGhlIG5ldyB3aW5kb3cgdGhlIGN1cnJlbnQgd2luZG93IGFuZCByZWRyYXcKKyAgICAgKi8KKyAgICBpZiAoZG9fZXF1YWwgfHwgZGlyICE9IDApCisJd2luX2VxdWFsKHdwLCBUUlVFLAorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJCShmbGFncyAmIFdTUF9WRVJUKSA/IChkaXIgPT0gJ3YnID8gJ2InIDogJ2gnKQorCQk6IGRpciA9PSAnaCcgPyAnYicgOgorI2VuZGlmCisJCSd2Jyk7CisKKyAgICAvKiBEb24ndCBjaGFuZ2UgdGhlIHdpbmRvdyBoZWlnaHQvd2lkdGggdG8gJ3dpbmhlaWdodCcgLyAnd2lud2lkdGgnIGlmIGEKKyAgICAgKiBzaXplIHdhcyBnaXZlbi4gKi8KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGlmIChmbGFncyAmIFdTUF9WRVJUKQorICAgIHsKKwlpID0gcF93aXc7CisJaWYgKHNpemUgIT0gMCkKKwkgICAgcF93aXcgPSBzaXplOworCisjIGlmZGVmIEZFQVRfR1VJCisJLyogV2hlbiAnZ3Vpb3B0aW9ucycgaW5jbHVkZXMgJ0wnIG9yICdSJyBtYXkgaGF2ZSB0byBhZGQgc2Nyb2xsYmFycy4gKi8KKwlpZiAoZ3VpLmluX3VzZSkKKwkgICAgZ3VpX2luaXRfd2hpY2hfY29tcG9uZW50cyhOVUxMKTsKKyMgZW5kaWYKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworCWkgPSBwX3doOworCWlmIChzaXplICE9IDApCisJICAgIHBfd2ggPSBzaXplOworICAgIH0KKyAgICB3aW5fZW50ZXIod3AsIEZBTFNFKTsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGlmIChmbGFncyAmIFdTUF9WRVJUKQorCXBfd2l3ID0gaTsKKyAgICBlbHNlCisjZW5kaWYKKwlwX3doID0gaTsKKworICAgIHJldHVybiBPSzsKK30KKworI2VuZGlmIC8qIEZFQVRfV0lORE9XUyAqLworCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKy8qCisgKiBSZXR1cm4gbWluaW1hbCBoZWlnaHQgZm9yIHdpbmRvdyAid3AiIGFuZCB3aW5kb3dzIGVhc3Qgb2YgaXQuCisgKiBUYWtlcyBpbnRvIGFjY291bnQgdGhlIGVhc3Rib3VuZCB3aW5kd3MgY2FuIGJlIHNwbGl0LCBlYWNoIG9mIHRoZW0KKyAqIHJlcXVpcmVpbmcgcF93bWggbGluZXMuICBEb2Vzbid0IGNvdW50IHN0YXR1cyBsaW5lcy4KKyAqLworICAgIHN0YXRpYyBpbnQKK3dpbl9taW5oZWlnaHQod3ApCisgICAgd2luX1QJKndwOworeworICAgIGludAkJbWluaGVpZ2h0ID0gcF93bWg7CisgICAgaW50CQluOworICAgIHdpbl9UCSp3cDEsICp3cDI7CisKKyAgICB3cDEgPSB3cDsKKyAgICBmb3IgKDs7KQorICAgIHsKKwl3cDEgPSB3cDEtPndfbmV4dDsKKwlpZiAod3AxID09IE5VTEwpCisJICAgIGJyZWFrOworCW4gPSBwX3dtaDsKKwl3cDIgPSB3cDE7CisJZm9yICg7OykKKwl7CisJICAgIHdwMiA9IHdwMi0+d19uZXh0OworCSAgICBpZiAod3AyID09IE5VTEwpCisJCWJyZWFrOworCSAgICBuICs9IHdpbl9taW5oZWlnaHQod3AyKTsKKwl9CisJaWYgKG4gPiBtaW5oZWlnaHQpCisJICAgIG1pbmhlaWdodCA9IG47CisgICAgfQorICAgIHJldHVybiBtaW5oZWlnaHQ7Cit9CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ2hlY2sgaWYgIndpbiIgaXMgYSBwb2ludGVyIHRvIGFuIGV4aXN0aW5nIHdpbmRvdy4KKyAqLworICAgIGludAord2luX3ZhbGlkKHdpbikKKyAgICB3aW5fVAkqd2luOworeworICAgIHdpbl9UCSp3cDsKKworICAgIGlmICh3aW4gPT0gTlVMTCkKKwlyZXR1cm4gRkFMU0U7CisgICAgZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSBOVUxMOyB3cCA9IHdwLT53X25leHQpCisJaWYgKHdwID09IHdpbikKKwkgICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2luZG93cy4KKyAqLworICAgIGludAord2luX2NvdW50KCkKK3sKKyAgICB3aW5fVAkqd3A7CisgICAgaW50CQljb3VudCA9IDA7CisKKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwkrK2NvdW50OworICAgIHJldHVybiBjb3VudDsKK30KKworLyoKKyAqIE1ha2UgImNvdW50IiB3aW5kb3dzIG9uIHRoZSBzY3JlZW4uCisgKiBSZXR1cm4gYWN0dWFsIG51bWJlciBvZiB3aW5kb3dzIG9uIHRoZSBzY3JlZW4uCisgKiBNdXN0IGJlIGNhbGxlZCB3aGVuIHRoZXJlIGlzIGp1c3Qgb25lIHdpbmRvdywgZmlsbGluZyB0aGUgd2hvbGUgc2NyZWVuCisgKiAoZXhjbHVkaW5nIHRoZSBjb21tYW5kIGxpbmUpLgorICovCisvKkFSR1NVU0VEKi8KKyAgICBpbnQKK21ha2Vfd2luZG93cyhjb3VudCwgdmVydGljYWwpCisgICAgaW50CQljb3VudDsKKyAgICBpbnQJCXZlcnRpY2FsOwkvKiBzcGxpdCB3aW5kb3dzIHZlcnRpY2FsbHkgaWYgVFJVRSAqLworeworICAgIGludAkJbWF4Y291bnQ7CisgICAgaW50CQl0b2RvOworCisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBpZiAodmVydGljYWwpCisgICAgeworCS8qIEVhY2ggd2luZG93cyBuZWVkcyBhdCBsZWFzdCAnd2lubWlud2lkdGgnIGxpbmVzIGFuZCBhIHNlcGFyYXRvcgorCSAqIGNvbHVtbi4gKi8KKwltYXhjb3VudCA9IChjdXJ3aW4tPndfd2lkdGggKyBjdXJ3aW4tPndfdnNlcF93aWR0aAorCQkJCQkgICAgIC0gKHBfd2l3IC0gcF93bXcpKSAvIChwX3dtdyArIDEpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisJLyogRWFjaCB3aW5kb3cgbmVlZHMgYXQgbGVhc3QgJ3dpbm1pbmhlaWdodCcgbGluZXMgYW5kIGEgc3RhdHVzIGxpbmUuICovCisJbWF4Y291bnQgPSAoY3Vyd2luLT53X2hlaWdodCArIGN1cndpbi0+d19zdGF0dXNfaGVpZ2h0CisJCQkJICAtIChwX3doIC0gcF93bWgpKSAvIChwX3dtaCArIFNUQVRVU19IRUlHSFQpOworICAgIH0KKworICAgIGlmIChtYXhjb3VudCA8IDIpCisJbWF4Y291bnQgPSAyOworICAgIGlmIChjb3VudCA+IG1heGNvdW50KQorCWNvdW50ID0gbWF4Y291bnQ7CisKKyAgICAvKgorICAgICAqIGFkZCBzdGF0dXMgbGluZSBub3csIG90aGVyd2lzZSBmaXJzdCB3aW5kb3cgd2lsbCBiZSB0b28gYmlnCisgICAgICovCisgICAgaWYgKGNvdW50ID4gMSkKKwlsYXN0X3N0YXR1cyhUUlVFKTsKKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIC8qCisgICAgICogRG9uJ3QgZXhlY3V0ZSBhdXRvY29tbWFuZHMgd2hpbGUgY3JlYXRpbmcgdGhlIHdpbmRvd3MuICBNdXN0IGRvIHRoYXQKKyAgICAgKiB3aGVuIHB1dHRpbmcgdGhlIGJ1ZmZlcnMgaW4gdGhlIHdpbmRvd3MuCisgICAgICovCisgICAgKythdXRvY21kX2Jsb2NrOworI2VuZGlmCisKKyAgICAvKiB0b2RvIGlzIG51bWJlciBvZiB3aW5kb3dzIGxlZnQgdG8gY3JlYXRlICovCisgICAgZm9yICh0b2RvID0gY291bnQgLSAxOyB0b2RvID4gMDsgLS10b2RvKQorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJaWYgKHZlcnRpY2FsKQorCXsKKwkgICAgaWYgKHdpbl9zcGxpdChjdXJ3aW4tPndfd2lkdGggLSAoY3Vyd2luLT53X3dpZHRoIC0gdG9kbykKKwkJCS8gKHRvZG8gKyAxKSAtIDEsIFdTUF9WRVJUIHwgV1NQX0FCT1ZFKSA9PSBGQUlMKQorCQlicmVhazsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCSAgICBpZiAod2luX3NwbGl0KGN1cndpbi0+d19oZWlnaHQgLSAoY3Vyd2luLT53X2hlaWdodCAtIHRvZG8KKwkJCSAgICAqIFNUQVRVU19IRUlHSFQpIC8gKHRvZG8gKyAxKQorCQkJLSBTVEFUVVNfSEVJR0hULCBXU1BfQUJPVkUpID09IEZBSUwpCisJCWJyZWFrOworCX0KKworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIC0tYXV0b2NtZF9ibG9jazsKKyNlbmRpZgorCisgICAgLyogcmV0dXJuIGFjdHVhbCBudW1iZXIgb2Ygd2luZG93cyAqLworICAgIHJldHVybiAoY291bnQgLSB0b2RvKTsKK30KKworLyoKKyAqIEV4Y2hhbmdlIGN1cnJlbnQgYW5kIG5leHQgd2luZG93CisgKi8KKyAgICBzdGF0aWMgdm9pZAord2luX2V4Y2hhbmdlKFByZW51bSkKKyAgICBsb25nCVByZW51bTsKK3sKKyAgICBmcmFtZV9UCSpmcnA7CisgICAgZnJhbWVfVAkqZnJwMjsKKyAgICB3aW5fVAkqd3A7CisgICAgd2luX1QJKndwMjsKKyAgICBpbnQJCXRlbXA7CisKKyAgICBpZiAobGFzdHdpbiA9PSBmaXJzdHdpbikJICAgIC8qIGp1c3Qgb25lIHdpbmRvdyAqLworICAgIHsKKwliZWVwX2ZsdXNoKCk7CisJcmV0dXJuOworICAgIH0KKworI2lmZGVmIEZFQVRfR1VJCisgICAgbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBmaW5kIHdpbmRvdyB0byBleGNoYW5nZSB3aXRoCisgICAgICovCisgICAgaWYgKFByZW51bSkKKyAgICB7CisJZnJwID0gY3Vyd2luLT53X2ZyYW1lLT5mcl9wYXJlbnQtPmZyX2NoaWxkOworCXdoaWxlIChmcnAgIT0gTlVMTCAmJiAtLVByZW51bSA+IDApCisJICAgIGZycCA9IGZycC0+ZnJfbmV4dDsKKyAgICB9CisgICAgZWxzZSBpZiAoY3Vyd2luLT53X2ZyYW1lLT5mcl9uZXh0ICE9IE5VTEwpCS8qIFN3YXAgd2l0aCBuZXh0ICovCisJZnJwID0gY3Vyd2luLT53X2ZyYW1lLT5mcl9uZXh0OworICAgIGVsc2UgICAgLyogU3dhcCBsYXN0IHdpbmRvdyBpbiByb3cvY29sIHdpdGggcHJldmlvdXMgKi8KKwlmcnAgPSBjdXJ3aW4tPndfZnJhbWUtPmZyX3ByZXY7CisKKyAgICAvKiBXZSBjYW4gb25seSBleGNoYW5nZSBhIHdpbmRvdyB3aXRoIGFub3RoZXIgd2luZG93LCBub3Qgd2l0aCBhIGZyYW1lCisgICAgICogY29udGFpbmluZyB3aW5kb3dzLiAqLworICAgIGlmIChmcnAgPT0gTlVMTCB8fCBmcnAtPmZyX3dpbiA9PSBOVUxMIHx8IGZycC0+ZnJfd2luID09IGN1cndpbikKKwlyZXR1cm47CisgICAgd3AgPSBmcnAtPmZyX3dpbjsKKworLyoKKyAqIDEuIHJlbW92ZSBjdXJ3aW4gZnJvbSB0aGUgbGlzdC4gUmVtZW1iZXIgYWZ0ZXIgd2hpY2ggd2luZG93IGl0IHdhcyBpbiB3cDIKKyAqIDIuIGluc2VydCBjdXJ3aW4gYmVmb3JlIHdwIGluIHRoZSBsaXN0CisgKiBpZiB3cCAhPSB3cDIKKyAqICAgIDMuIHJlbW92ZSB3cCBmcm9tIHRoZSBsaXN0CisgKiAgICA0LiBpbnNlcnQgd3AgYWZ0ZXIgd3AyCisgKiA1LiBleGNoYW5nZSB0aGUgc3RhdHVzIGxpbmUgaGVpZ2h0IGFuZCB2c2VwIHdpZHRoLgorICovCisgICAgd3AyID0gY3Vyd2luLT53X3ByZXY7CisgICAgZnJwMiA9IGN1cndpbi0+d19mcmFtZS0+ZnJfcHJldjsKKyAgICBpZiAod3AtPndfcHJldiAhPSBjdXJ3aW4pCisgICAgeworCXdpbl9yZW1vdmUoY3Vyd2luKTsKKwlmcmFtZV9yZW1vdmUoY3Vyd2luLT53X2ZyYW1lKTsKKwl3aW5fYXBwZW5kKHdwLT53X3ByZXYsIGN1cndpbik7CisJZnJhbWVfaW5zZXJ0KGZycCwgY3Vyd2luLT53X2ZyYW1lKTsKKyAgICB9CisgICAgaWYgKHdwICE9IHdwMikKKyAgICB7CisJd2luX3JlbW92ZSh3cCk7CisJZnJhbWVfcmVtb3ZlKHdwLT53X2ZyYW1lKTsKKwl3aW5fYXBwZW5kKHdwMiwgd3ApOworCWlmIChmcnAyID09IE5VTEwpCisJICAgIGZyYW1lX2luc2VydCh3cC0+d19mcmFtZS0+ZnJfcGFyZW50LT5mcl9jaGlsZCwgd3AtPndfZnJhbWUpOworCWVsc2UKKwkgICAgZnJhbWVfYXBwZW5kKGZycDIsIHdwLT53X2ZyYW1lKTsKKyAgICB9CisgICAgdGVtcCA9IGN1cndpbi0+d19zdGF0dXNfaGVpZ2h0OworICAgIGN1cndpbi0+d19zdGF0dXNfaGVpZ2h0ID0gd3AtPndfc3RhdHVzX2hlaWdodDsKKyAgICB3cC0+d19zdGF0dXNfaGVpZ2h0ID0gdGVtcDsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIHRlbXAgPSBjdXJ3aW4tPndfdnNlcF93aWR0aDsKKyAgICBjdXJ3aW4tPndfdnNlcF93aWR0aCA9IHdwLT53X3ZzZXBfd2lkdGg7CisgICAgd3AtPndfdnNlcF93aWR0aCA9IHRlbXA7CisKKyAgICAvKiBJZiB0aGUgd2luZG93cyBhcmUgbm90IGluIHRoZSBzYW1lIGZyYW1lLCBleGNoYW5nZSB0aGUgc2l6ZXMgdG8gYXZvaWQKKyAgICAgKiBtZXNzaW5nIHVwIHRoZSB3aW5kb3cgbGF5b3V0LiAgT3RoZXJ3aXNlIGZpeCB0aGUgZnJhbWUgc2l6ZXMuICovCisgICAgaWYgKGN1cndpbi0+d19mcmFtZS0+ZnJfcGFyZW50ICE9IHdwLT53X2ZyYW1lLT5mcl9wYXJlbnQpCisgICAgeworCXRlbXAgPSBjdXJ3aW4tPndfaGVpZ2h0OworCWN1cndpbi0+d19oZWlnaHQgPSB3cC0+d19oZWlnaHQ7CisJd3AtPndfaGVpZ2h0ID0gdGVtcDsKKwl0ZW1wID0gY3Vyd2luLT53X3dpZHRoOworCWN1cndpbi0+d193aWR0aCA9IHdwLT53X3dpZHRoOworCXdwLT53X3dpZHRoID0gdGVtcDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlmcmFtZV9maXhfaGVpZ2h0KGN1cndpbik7CisJZnJhbWVfZml4X2hlaWdodCh3cCk7CisJZnJhbWVfZml4X3dpZHRoKGN1cndpbik7CisJZnJhbWVfZml4X3dpZHRoKHdwKTsKKyAgICB9CisjZW5kaWYKKworICAgICh2b2lkKXdpbl9jb21wX3BvcygpOwkJLyogcmVjb21wdXRlIHdpbmRvdyBwb3NpdGlvbnMgKi8KKworICAgIHdpbl9lbnRlcih3cCwgVFJVRSk7CisgICAgcmVkcmF3X2xhdGVyKENMRUFSKTsKK30KKworLyoKKyAqIHJvdGF0ZSB3aW5kb3dzOiBpZiB1cHdhcmRzIFRSVUUgdGhlIHNlY29uZCB3aW5kb3cgYmVjb21lcyB0aGUgZmlyc3Qgb25lCisgKgkJICAgaWYgdXB3YXJkcyBGQUxTRSB0aGUgZmlyc3Qgd2luZG93IGJlY29tZXMgdGhlIHNlY29uZCBvbmUKKyAqLworICAgIHN0YXRpYyB2b2lkCit3aW5fcm90YXRlKHVwd2FyZHMsIGNvdW50KQorICAgIGludAkJdXB3YXJkczsKKyAgICBpbnQJCWNvdW50OworeworICAgIHdpbl9UCSp3cDE7CisgICAgd2luX1QJKndwMjsKKyAgICBmcmFtZV9UCSpmcnA7CisgICAgaW50CQluOworCisgICAgaWYgKGZpcnN0d2luID09IGxhc3R3aW4pCQkvKiBub3RoaW5nIHRvIGRvICovCisgICAgeworCWJlZXBfZmx1c2goKTsKKwlyZXR1cm47CisgICAgfQorCisjaWZkZWYgRkVBVF9HVUkKKyAgICBuZWVkX21vdXNlX2NvcnJlY3QgPSBUUlVFOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIC8qIENoZWNrIGlmIGFsbCBmcmFtZXMgaW4gdGhpcyByb3cvY29sIGhhdmUgb25lIHdpbmRvdy4gKi8KKyAgICBmb3IgKGZycCA9IGN1cndpbi0+d19mcmFtZS0+ZnJfcGFyZW50LT5mcl9jaGlsZDsgZnJwICE9IE5VTEw7CisJCQkJCQkJICAgZnJwID0gZnJwLT5mcl9uZXh0KQorCWlmIChmcnAtPmZyX3dpbiA9PSBOVUxMKQorCXsKKwkgICAgRU1TRyhfKCJFNDQzOiBDYW5ub3Qgcm90YXRlIHdoZW4gYW5vdGhlciB3aW5kb3cgaXMgc3BsaXQiKSk7CisJICAgIHJldHVybjsKKwl9CisjZW5kaWYKKworICAgIHdoaWxlIChjb3VudC0tKQorICAgIHsKKwlpZiAodXB3YXJkcykJCS8qIGZpcnN0IHdpbmRvdyBiZWNvbWVzIGxhc3Qgd2luZG93ICovCisJeworCSAgICAvKiByZW1vdmUgZmlyc3Qgd2luZG93L2ZyYW1lIGZyb20gdGhlIGxpc3QgKi8KKwkgICAgZnJwID0gY3Vyd2luLT53X2ZyYW1lLT5mcl9wYXJlbnQtPmZyX2NoaWxkOworCSAgICB3cDEgPSBmcnAtPmZyX3dpbjsKKwkgICAgd2luX3JlbW92ZSh3cDEpOworCSAgICBmcmFtZV9yZW1vdmUoZnJwKTsKKworCSAgICAvKiBmaW5kIGxhc3QgZnJhbWUgYW5kIGFwcGVuZCByZW1vdmVkIHdpbmRvdy9mcmFtZSBhZnRlciBpdCAqLworCSAgICBmb3IgKCA7IGZycC0+ZnJfbmV4dCAhPSBOVUxMOyBmcnAgPSBmcnAtPmZyX25leHQpCisJCTsKKwkgICAgd2luX2FwcGVuZChmcnAtPmZyX3dpbiwgd3AxKTsKKwkgICAgZnJhbWVfYXBwZW5kKGZycCwgd3AxLT53X2ZyYW1lKTsKKworCSAgICB3cDIgPSBmcnAtPmZyX3dpbjsJCS8qIHByZXZpb3VzbHkgbGFzdCB3aW5kb3cgKi8KKwl9CisJZWxzZQkJCS8qIGxhc3Qgd2luZG93IGJlY29tZXMgZmlyc3Qgd2luZG93ICovCisJeworCSAgICAvKiBmaW5kIGxhc3Qgd2luZG93L2ZyYW1lIGluIHRoZSBsaXN0IGFuZCByZW1vdmUgaXQgKi8KKwkgICAgZm9yIChmcnAgPSBjdXJ3aW4tPndfZnJhbWU7IGZycC0+ZnJfbmV4dCAhPSBOVUxMOworCQkJCQkJCSAgIGZycCA9IGZycC0+ZnJfbmV4dCkKKwkJOworCSAgICB3cDEgPSBmcnAtPmZyX3dpbjsKKwkgICAgd3AyID0gd3AxLT53X3ByZXY7CQkgICAgLyogd2lsbCBiZWNvbWUgbGFzdCB3aW5kb3cgKi8KKwkgICAgd2luX3JlbW92ZSh3cDEpOworCSAgICBmcmFtZV9yZW1vdmUoZnJwKTsKKworCSAgICAvKiBhcHBlbmQgdGhlIHJlbW92ZWQgd2luZG93L2ZyYW1lIGJlZm9yZSB0aGUgZmlyc3QgaW4gdGhlIGxpc3QgKi8KKwkgICAgd2luX2FwcGVuZChmcnAtPmZyX3BhcmVudC0+ZnJfY2hpbGQtPmZyX3dpbi0+d19wcmV2LCB3cDEpOworCSAgICBmcmFtZV9pbnNlcnQoZnJwLT5mcl9wYXJlbnQtPmZyX2NoaWxkLCBmcnApOworCX0KKworCS8qIGV4Y2hhbmdlIHN0YXR1cyBoZWlnaHQgYW5kIHZzZXAgd2lkdGggb2Ygb2xkIGFuZCBuZXcgbGFzdCB3aW5kb3cgKi8KKwluID0gd3AyLT53X3N0YXR1c19oZWlnaHQ7CisJd3AyLT53X3N0YXR1c19oZWlnaHQgPSB3cDEtPndfc3RhdHVzX2hlaWdodDsKKwl3cDEtPndfc3RhdHVzX2hlaWdodCA9IG47CisJZnJhbWVfZml4X2hlaWdodCh3cDEpOworCWZyYW1lX2ZpeF9oZWlnaHQod3AyKTsKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCW4gPSB3cDItPndfdnNlcF93aWR0aDsKKwl3cDItPndfdnNlcF93aWR0aCA9IHdwMS0+d192c2VwX3dpZHRoOworCXdwMS0+d192c2VwX3dpZHRoID0gbjsKKwlmcmFtZV9maXhfd2lkdGgod3AxKTsKKwlmcmFtZV9maXhfd2lkdGgod3AyKTsKKyNlbmRpZgorCisJICAgIC8qIHJlY29tcHV0ZSB3X3dpbnJvdyBhbmQgd193aW5jb2wgZm9yIGFsbCB3aW5kb3dzICovCisJKHZvaWQpd2luX2NvbXBfcG9zKCk7CisgICAgfQorCisgICAgcmVkcmF3X2xhdGVyKENMRUFSKTsKK30KKworLyoKKyAqIE1vdmUgdGhlIGN1cnJlbnQgd2luZG93IHRvIHRoZSB2ZXJ5IHRvcC9ib3R0b20vbGVmdC9yaWdodCBvZiB0aGUgc2NyZWVuLgorICovCisgICAgc3RhdGljIHZvaWQKK3dpbl90b3RvcChzaXplLCBmbGFncykKKyAgICBpbnQJCXNpemU7CisgICAgaW50CQlmbGFnczsKK3sKKyAgICBpbnQJCWRpcjsKKyAgICBpbnQJCWhlaWdodCA9IGN1cndpbi0+d19oZWlnaHQ7CisKKyAgICBpZiAobGFzdHdpbiA9PSBmaXJzdHdpbikKKyAgICB7CisJYmVlcF9mbHVzaCgpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBSZW1vdmUgdGhlIHdpbmRvdyBhbmQgZnJhbWUgZnJvbSB0aGUgdHJlZSBvZiBmcmFtZXMuICovCisgICAgKHZvaWQpd2luZnJhbWVfcmVtb3ZlKGN1cndpbiwgJmRpcik7CisgICAgd2luX3JlbW92ZShjdXJ3aW4pOworICAgIGxhc3Rfc3RhdHVzKEZBTFNFKTsJICAgIC8qIG1heSBuZWVkIHRvIHJlbW92ZSBsYXN0IHN0YXR1cyBsaW5lICovCisgICAgKHZvaWQpd2luX2NvbXBfcG9zKCk7ICAgLyogcmVjb21wdXRlIHdpbmRvdyBwb3NpdGlvbnMgKi8KKworICAgIC8qIFNwbGl0IGEgd2luZG93IG9uIHRoZSBkZXNpcmVkIHNpZGUgYW5kIHB1dCB0aGUgd2luZG93IHRoZXJlLiAqLworICAgICh2b2lkKXdpbl9zcGxpdF9pbnMoc2l6ZSwgZmxhZ3MsIGN1cndpbiwgZGlyKTsKKyAgICBpZiAoIShmbGFncyAmIFdTUF9WRVJUKSkKKyAgICB7CisJd2luX3NldGhlaWdodChoZWlnaHQpOworCWlmIChwX2VhKQorCSAgICB3aW5fZXF1YWwoY3Vyd2luLCBUUlVFLCAndicpOworICAgIH0KKworI2lmIGRlZmluZWQoRkVBVF9HVUkpICYmIGRlZmluZWQoRkVBVF9WRVJUU1BMSVQpCisgICAgLyogV2hlbiAnZ3Vpb3B0aW9ucycgaW5jbHVkZXMgJ0wnIG9yICdSJyBtYXkgaGF2ZSB0byByZW1vdmUgb3IgYWRkCisgICAgICogc2Nyb2xsYmFycy4gIEhhdmUgdG8gdXBkYXRlIHRoZW0gYW55d2F5LiAqLworICAgIGlmIChndWkuaW5fdXNlKQorICAgIHsKKwlvdXRfZmx1c2goKTsKKwlndWlfaW5pdF93aGljaF9jb21wb25lbnRzKE5VTEwpOworCWd1aV91cGRhdGVfc2Nyb2xsYmFycyhUUlVFKTsKKyAgICB9CisgICAgbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyNlbmRpZgorCit9CisKKy8qCisgKiBNb3ZlIHdpbmRvdyAid2luMSIgdG8gYmVsb3cvcmlnaHQgb2YgIndpbjIiIGFuZCBtYWtlICJ3aW4xIiB0aGUgY3VycmVudAorICogd2luZG93LiAgT25seSB3b3JrcyB3aXRoaW4gdGhlIHNhbWUgZnJhbWUhCisgKi8KKyAgICB2b2lkCit3aW5fbW92ZV9hZnRlcih3aW4xLCB3aW4yKQorICAgIHdpbl9UCSp3aW4xLCAqd2luMjsKK3sKKyAgICBpbnQJCWhlaWdodDsKKworICAgIC8qIGNoZWNrIGlmIHRoZSBhcmd1bWVudHMgYXJlIHJlYXNvbmFibGUgKi8KKyAgICBpZiAod2luMSA9PSB3aW4yKQorCXJldHVybjsKKworICAgIC8qIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0byBkbyAqLworICAgIGlmICh3aW4yLT53X25leHQgIT0gd2luMSkKKyAgICB7CisJLyogbWF5IG5lZWQgbW92ZSB0aGUgc3RhdHVzIGxpbmUvdmVydGljYWwgc2VwYXJhdG9yIG9mIHRoZSBsYXN0IHdpbmRvdworCSAqICovCisJaWYgKHdpbjEgPT0gbGFzdHdpbikKKwl7CisJICAgIGhlaWdodCA9IHdpbjEtPndfcHJldi0+d19zdGF0dXNfaGVpZ2h0OworCSAgICB3aW4xLT53X3ByZXYtPndfc3RhdHVzX2hlaWdodCA9IHdpbjEtPndfc3RhdHVzX2hlaWdodDsKKwkgICAgd2luMS0+d19zdGF0dXNfaGVpZ2h0ID0gaGVpZ2h0OworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJICAgIHdpbjEtPndfcHJldi0+d192c2VwX3dpZHRoID0gMDsKKwkgICAgd2luMS0+d192c2VwX3dpZHRoID0gMTsKKyNlbmRpZgorCX0KKwllbHNlIGlmICh3aW4yID09IGxhc3R3aW4pCisJeworCSAgICBoZWlnaHQgPSB3aW4xLT53X3N0YXR1c19oZWlnaHQ7CisJICAgIHdpbjEtPndfc3RhdHVzX2hlaWdodCA9IHdpbjItPndfc3RhdHVzX2hlaWdodDsKKwkgICAgd2luMi0+d19zdGF0dXNfaGVpZ2h0ID0gaGVpZ2h0OworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJICAgIHdpbjItPndfdnNlcF93aWR0aCA9IDE7CisJICAgIHdpbjEtPndfdnNlcF93aWR0aCA9IDA7CisjZW5kaWYKKwl9CisJd2luX3JlbW92ZSh3aW4xKTsKKwlmcmFtZV9yZW1vdmUod2luMS0+d19mcmFtZSk7CisJd2luX2FwcGVuZCh3aW4yLCB3aW4xKTsKKwlmcmFtZV9hcHBlbmQod2luMi0+d19mcmFtZSwgd2luMS0+d19mcmFtZSk7CisKKwkodm9pZCl3aW5fY29tcF9wb3MoKTsJLyogcmVjb21wdXRlIHdfd2lucm93IGZvciBhbGwgd2luZG93cyAqLworCXJlZHJhd19sYXRlcihOT1RfVkFMSUQpOworICAgIH0KKyAgICB3aW5fZW50ZXIod2luMSwgRkFMU0UpOworfQorCisvKgorICogTWFrZSBhbGwgd2luZG93cyB0aGUgc2FtZSBoZWlnaHQuCisgKiAnbmV4dF9jdXJ3aW4nIHdpbGwgc29vbiBiZSB0aGUgY3VycmVudCB3aW5kb3csIG1ha2Ugc3VyZSBpdCBoYXMgZW5vdWdoCisgKiByb3dzLgorICovCisgICAgdm9pZAord2luX2VxdWFsKG5leHRfY3Vyd2luLCBjdXJyZW50LCBkaXIpCisgICAgd2luX1QJKm5leHRfY3Vyd2luOwkvKiBwb2ludGVyIHRvIGN1cnJlbnQgd2luZG93IHRvIGJlIG9yIE5VTEwgKi8KKyAgICBpbnQJCWN1cnJlbnQ7CS8qIGRvIG9ubHkgZnJhbWUgd2l0aCBjdXJyZW50IHdpbmRvdyAqLworICAgIGludAkJZGlyOwkJLyogJ3YnIGZvciB2ZXJ0aWNhbGx5LCAnaCcgZm9yIGhvcml6b250YWxseSwKKwkJCQkgICAnYicgZm9yIGJvdGgsIDAgZm9yIHVzaW5nIHBfZWFkICovCit7CisgICAgaWYgKGRpciA9PSAwKQorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJZGlyID0gKnBfZWFkOworI2Vsc2UKKwlkaXIgPSAnYic7CisjZW5kaWYKKyAgICB3aW5fZXF1YWxfcmVjKG5leHRfY3Vyd2luID09IE5VTEwgPyBjdXJ3aW4gOiBuZXh0X2N1cndpbiwgY3VycmVudCwKKwkJICAgICAgdG9wZnJhbWUsIGRpciwgMCwgMCwgKGludClDb2x1bW5zLCB0b3BmcmFtZS0+ZnJfaGVpZ2h0KTsKK30KKworLyoKKyAqIFNldCBhIGZyYW1lIHRvIGEgbmV3IHBvc2l0aW9uIGFuZCBoZWlnaHQsIHNwcmVhZGluZyB0aGUgYXZhaWxhYmxlIHJvb20KKyAqIGVxdWFsbHkgb3ZlciBjb250YWluZWQgZnJhbWVzLgorICogVGhlIHdpbmRvdyAibmV4dF9jdXJ3aW4iIChpZiBub3QgTlVMTCkgc2hvdWxkIGF0IGxlYXN0IGdldCB0aGUgc2l6ZSBmcm9tCisgKiAnd2luaGVpZ2h0JyBhbmQgJ3dpbndpZHRoJyBpZiBwb3NzaWJsZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCit3aW5fZXF1YWxfcmVjKG5leHRfY3Vyd2luLCBjdXJyZW50LCB0b3BmciwgZGlyLCBjb2wsIHJvdywgd2lkdGgsIGhlaWdodCkKKyAgICB3aW5fVAkqbmV4dF9jdXJ3aW47CS8qIHBvaW50ZXIgdG8gY3VycmVudCB3aW5kb3cgdG8gYmUgb3IgTlVMTCAqLworICAgIGludAkJY3VycmVudDsJLyogZG8gb25seSBmcmFtZSB3aXRoIGN1cnJlbnQgd2luZG93ICovCisgICAgZnJhbWVfVAkqdG9wZnI7CQkvKiBmcmFtZSB0byBzZXQgc2l6ZSBvZmYgKi8KKyAgICBpbnQJCWRpcjsJCS8qICd2JywgJ2gnIG9yICdiJywgc2VlIHdpbl9lcXVhbCgpICovCisgICAgaW50CQljb2w7CQkvKiBob3Jpem9udGFsIHBvc2l0aW9uIGZvciBmcmFtZSAqLworICAgIGludAkJcm93OwkJLyogdmVydGljYWwgcG9zaXRpb24gZm9yIGZyYW1lICovCisgICAgaW50CQl3aWR0aDsJCS8qIG5ldyB3aWR0aCBvZiBmcmFtZSAqLworICAgIGludAkJaGVpZ2h0OwkJLyogbmV3IGhlaWdodCBvZiBmcmFtZSAqLworeworICAgIGludAkJbiwgbTsKKyAgICBpbnQJCWV4dHJhX3NlcCA9IDA7CisgICAgaW50CQl3aW5jb3VudCwgdG90d2luY291bnQgPSAwOworICAgIGZyYW1lX1QJKmZyOworICAgIGludAkJbmV4dF9jdXJ3aW5fc2l6ZSA9IDA7CisgICAgaW50CQlyb29tID0gMDsKKyAgICBpbnQJCW5ld19zaXplOworICAgIGludAkJaGFzX25leHRfY3Vyd2luID0gMDsKKyAgICBpbnQJCWhuYzsKKworICAgIGlmICh0b3Bmci0+ZnJfbGF5b3V0ID09IEZSX0xFQUYpCisgICAgeworCS8qIFNldCB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoaXMgZnJhbWUuCisJICogUmVkcmF3IHdoZW4gc2l6ZSBvciBwb3NpdGlvbiBjaGFuZ2VzICovCisJaWYgKHRvcGZyLT5mcl9oZWlnaHQgIT0gaGVpZ2h0IHx8IHRvcGZyLT5mcl93aW4tPndfd2lucm93ICE9IHJvdworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJCXx8IHRvcGZyLT5mcl93aWR0aCAhPSB3aWR0aCB8fCB0b3Bmci0+ZnJfd2luLT53X3dpbmNvbCAhPSBjb2wKKyNlbmRpZgorCSAgICkKKwl7CisJICAgIHRvcGZyLT5mcl93aW4tPndfd2lucm93ID0gcm93OworCSAgICBmcmFtZV9uZXdfaGVpZ2h0KHRvcGZyLCBoZWlnaHQsIEZBTFNFLCBGQUxTRSk7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkgICAgdG9wZnItPmZyX3dpbi0+d193aW5jb2wgPSBjb2w7CisJICAgIGZyYW1lX25ld193aWR0aCh0b3Bmciwgd2lkdGgsIEZBTFNFKTsKKyNlbmRpZgorCSAgICByZWRyYXdfYWxsX2xhdGVyKENMRUFSKTsKKwl9CisgICAgfQorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgZWxzZSBpZiAodG9wZnItPmZyX2xheW91dCA9PSBGUl9ST1cpCisgICAgeworCXRvcGZyLT5mcl93aWR0aCA9IHdpZHRoOworCXRvcGZyLT5mcl9oZWlnaHQgPSBoZWlnaHQ7CisKKwlpZiAoZGlyICE9ICd2JykJCQkvKiBlcXVhbGl6ZSBmcmFtZSB3aWR0aHMgKi8KKwl7CisJICAgIC8qIENvbXB1dGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdpbmRvd3MgaG9yaXpvbnRhbGx5IGluIHRoaXMKKwkgICAgICogZnJhbWUuICovCisJICAgIG4gPSBmcmFtZV9taW53aWR0aCh0b3BmciwgTk9XSU4pOworCSAgICAvKiBhZGQgb25lIGZvciB0aGUgcmlnaHRtb3N0IHdpbmRvdywgaXQgZG9lc24ndCBoYXZlIGEgc2VwYXJhdG9yICovCisJICAgIGlmIChjb2wgKyB3aWR0aCA9PSBDb2x1bW5zKQorCQlleHRyYV9zZXAgPSAxOworCSAgICBlbHNlCisJCWV4dHJhX3NlcCA9IDA7CisJICAgIHRvdHdpbmNvdW50ID0gKG4gKyBleHRyYV9zZXApIC8gKHBfd213ICsgMSk7CisKKwkgICAgLyogQ29tcHV0ZSByb29tIGF2YWlsYWJsZSBmb3Igd2luZG93cyBvdGhlciB0aGFuICJuZXh0X2N1cndpbiIgKi8KKwkgICAgbSA9IGZyYW1lX21pbndpZHRoKHRvcGZyLCBuZXh0X2N1cndpbik7CisJICAgIHJvb20gPSB3aWR0aCAtIG07CisJICAgIGlmIChyb29tIDwgMCkKKwkgICAgeworCQluZXh0X2N1cndpbl9zaXplID0gcF93aXcgKyByb29tOworCQlyb29tID0gMDsKKwkgICAgfQorCSAgICBlbHNlIGlmIChuID09IG0pCQkvKiBkb2Vzbid0IGNvbnRhaW4gY3Vyd2luICovCisJCW5leHRfY3Vyd2luX3NpemUgPSAwOworCSAgICBlbHNlCisJICAgIHsKKwkJbmV4dF9jdXJ3aW5fc2l6ZSA9IChyb29tICsgcF93aXcgKyAodG90d2luY291bnQgLSAxKSAqIHBfd213CisJCQkJCSAgICsgKHRvdHdpbmNvdW50IC0gMSkpIC8gdG90d2luY291bnQ7CisJCWlmIChuZXh0X2N1cndpbl9zaXplICA+IHBfd2l3KQorCQkgICAgcm9vbSAtPSBuZXh0X2N1cndpbl9zaXplIC0gcF93aXc7CisJCWVsc2UKKwkJICAgIG5leHRfY3Vyd2luX3NpemUgPSBwX3dpdzsKKwkgICAgfQorCSAgICBpZiAobiAhPSBtKQorCQktLXRvdHdpbmNvdW50OwkJLyogZG9uJ3QgY291bnQgY3Vyd2luICovCisJfQorCisJZm9yIChmciA9IHRvcGZyLT5mcl9jaGlsZDsgZnIgIT0gTlVMTDsgZnIgPSBmci0+ZnJfbmV4dCkKKwl7CisJICAgIG4gPSBtID0gMDsKKwkgICAgd2luY291bnQgPSAxOworCSAgICBpZiAoZnItPmZyX25leHQgPT0gTlVMTCkKKwkJLyogbGFzdCBmcmFtZSBnZXRzIGFsbCB0aGF0IHJlbWFpbnMgKGF2b2lkIHJvdW5kb2ZmIGVycm9yKSAqLworCQluZXdfc2l6ZSA9IHdpZHRoOworCSAgICBlbHNlIGlmIChkaXIgPT0gJ3YnKQorCQluZXdfc2l6ZSA9IGZyLT5mcl93aWR0aDsKKwkgICAgZWxzZQorCSAgICB7CisJCS8qIENvbXB1dGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdpbmRvd3MgaG9yaXouIGluICJmciIuICovCisJCW4gPSBmcmFtZV9taW53aWR0aChmciwgTk9XSU4pOworCQl3aW5jb3VudCA9IChuICsgKGZyLT5mcl9uZXh0ID09IE5VTEwgPyBleHRyYV9zZXAgOiAwKSkKKwkJCQkJCQkJLyAocF93bXcgKyAxKTsKKwkJbSA9IGZyYW1lX21pbndpZHRoKGZyLCBuZXh0X2N1cndpbik7CisJCWlmIChuICE9IG0pCSAgICAvKiBkb24ndCBjb3VudCBuZXh0X2N1cndpbiAqLworCQkgICAgLS13aW5jb3VudDsKKwkJbmV3X3NpemUgPSAod2luY291bnQgKiByb29tICsgKCh1bnNpZ25lZCl0b3R3aW5jb3VudCA+PiAxKSkKKwkJCQkJCQkJLyB0b3R3aW5jb3VudDsKKwkJaWYgKG4gIT0gbSkJICAgIC8qIGFkZCBuZXh0X2N1cndpbiBzaXplICovCisJCXsKKwkJICAgIG5leHRfY3Vyd2luX3NpemUgLT0gcF93aXcgLSAobSAtIG4pOworCQkgICAgbmV3X3NpemUgKz0gbmV4dF9jdXJ3aW5fc2l6ZTsKKwkJfQorCSAgICB9CisKKwkgICAgLyogU2tpcCBmcmFtZSB0aGF0IGlzIGZ1bGwgaGVpZ2h0IHdoZW4gc3BsaXR0aW5nIG9yIGNsb3NpbmcgYQorCSAgICAgKiB3aW5kb3csIHVubGVzcyBlcXVhbGl6aW5nIGFsbCBmcmFtZXMuICovCisJICAgIGlmICghY3VycmVudCB8fCBkaXIgIT0gJ3YnIHx8IHRvcGZyLT5mcl9wYXJlbnQgIT0gTlVMTAorCQkgICAgfHwgKG5ld19zaXplICE9IGZyLT5mcl93aWR0aCkKKwkJICAgIHx8IGZyYW1lX2hhc193aW4oZnIsIG5leHRfY3Vyd2luKSkKKwkJd2luX2VxdWFsX3JlYyhuZXh0X2N1cndpbiwgY3VycmVudCwgZnIsIGRpciwgY29sLCByb3csCisJCQkJCQkJbmV3X3NpemUgKyBuLCBoZWlnaHQpOworCSAgICBjb2wgKz0gbmV3X3NpemUgKyBuOworCSAgICB3aWR0aCAtPSBuZXdfc2l6ZSArIG47CisJICAgIGlmIChuICE9IG0pCSAgICAvKiBjb250YWlucyBjdXJ3aW4gKi8KKwkJcm9vbSAtPSBuZXdfc2l6ZSAtIG5leHRfY3Vyd2luX3NpemU7CisJICAgIGVsc2UKKwkJcm9vbSAtPSBuZXdfc2l6ZTsKKwkgICAgdG90d2luY291bnQgLT0gd2luY291bnQ7CisJfQorICAgIH0KKyNlbmRpZgorICAgIGVsc2UgLyogdG9wZnItPmZyX2xheW91dCA9PSBGUl9DT0wgKi8KKyAgICB7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwl0b3Bmci0+ZnJfd2lkdGggPSB3aWR0aDsKKyNlbmRpZgorCXRvcGZyLT5mcl9oZWlnaHQgPSBoZWlnaHQ7CisKKwlpZiAoZGlyICE9ICdoJykJCQkvKiBlcXVhbGl6ZSBmcmFtZSBoZWlnaHRzICovCisJeworCSAgICAvKiBDb21wdXRlIG1heGltdW0gbnVtYmVyIG9mIHdpbmRvd3MgdmVydGljYWxseSBpbiB0aGlzIGZyYW1lLiAqLworCSAgICBuID0gZnJhbWVfbWluaGVpZ2h0KHRvcGZyLCBOT1dJTik7CisJICAgIC8qIGFkZCBvbmUgZm9yIHRoZSBib3R0b20gd2luZG93IGlmIGl0IGRvZXNuJ3QgaGF2ZSBhIHN0YXR1c2xpbmUgKi8KKwkgICAgaWYgKHJvdyArIGhlaWdodCA9PSBjbWRsaW5lX3JvdyAmJiBwX2xzID09IDApCisJCWV4dHJhX3NlcCA9IDE7CisJICAgIGVsc2UKKwkJZXh0cmFfc2VwID0gMDsKKwkgICAgdG90d2luY291bnQgPSAobiArIGV4dHJhX3NlcCkgLyAocF93bWggKyAxKTsKKwkgICAgaGFzX25leHRfY3Vyd2luID0gZnJhbWVfaGFzX3dpbih0b3BmciwgbmV4dF9jdXJ3aW4pOworCisJICAgIC8qCisJICAgICAqIENvbXB1dGUgaGVpZ2h0IGZvciAibmV4dF9jdXJ3aW4iIHdpbmRvdyBhbmQgcm9vbSBhdmFpbGFibGUgZm9yCisJICAgICAqIG90aGVyIHdpbmRvd3MuCisJICAgICAqICJtIiBpcyB0aGUgbWluaW1hbCBoZWlnaHQgd2hlbiBjb3VudGluZyBwX3doIGZvciAibmV4dF9jdXJ3aW4iLgorCSAgICAgKi8KKwkgICAgbSA9IGZyYW1lX21pbmhlaWdodCh0b3BmciwgbmV4dF9jdXJ3aW4pOworCSAgICByb29tID0gaGVpZ2h0IC0gbTsKKwkgICAgaWYgKHJvb20gPCAwKQorCSAgICB7CisJCS8qIFRoZSByb29tIGlzIGxlc3MgdGhlbiAnd2luaGVpZ2h0JywgdXNlIGFsbCBzcGFjZSBmb3IgdGhlCisJCSAqIGN1cnJlbnQgd2luZG93LiAqLworCQluZXh0X2N1cndpbl9zaXplID0gcF93aCArIHJvb207CisJCXJvb20gPSAwOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQluZXh0X2N1cndpbl9zaXplID0gLTE7CisJCWZvciAoZnIgPSB0b3Bmci0+ZnJfY2hpbGQ7IGZyICE9IE5VTEw7IGZyID0gZnItPmZyX25leHQpCisJCXsKKwkJICAgIC8qIElmICd3aW5maXhoZWlnaHQnIHNldCBrZWVwIHRoZSB3aW5kb3cgaGVpZ2h0IGlmCisJCSAgICAgKiBwb3NzaWJsZS4KKwkJICAgICAqIFdhdGNoIG91dCBmb3IgdGhpcyB3aW5kb3cgYmVpbmcgdGhlIG5leHRfY3Vyd2luLiAqLworCQkgICAgaWYgKGZyYW1lX2ZpeGVkX2hlaWdodChmcikpCisJCSAgICB7CisJCQluID0gZnJhbWVfbWluaGVpZ2h0KGZyLCBOT1dJTik7CisJCQluZXdfc2l6ZSA9IGZyLT5mcl9oZWlnaHQ7CisJCQlpZiAoZnJhbWVfaGFzX3dpbihmciwgbmV4dF9jdXJ3aW4pKQorCQkJeworCQkJICAgIHJvb20gKz0gcF93aCAtIHBfd21oOworCQkJICAgIG5leHRfY3Vyd2luX3NpemUgPSAwOworCQkJICAgIGlmIChuZXdfc2l6ZSA8IHBfd2gpCisJCQkJbmV3X3NpemUgPSBwX3doOworCQkJfQorCQkJZWxzZQorCQkJICAgIC8qIFRoZXNlIHdpbmRvd3MgZG9uJ3QgdXNlIHVwIHJvb20uICovCisJCQkgICAgdG90d2luY291bnQgLT0gKG4gKyAoZnItPmZyX25leHQgPT0gTlVMTAorCQkJCQkgICAgICA/IGV4dHJhX3NlcCA6IDApKSAvIChwX3dtaCArIDEpOworCQkJcm9vbSAtPSBuZXdfc2l6ZSAtIG47CisJCQlpZiAocm9vbSA8IDApCisJCQl7CisJCQkgICAgbmV3X3NpemUgKz0gcm9vbTsKKwkJCSAgICByb29tID0gMDsKKwkJCX0KKwkJCWZyLT5mcl9uZXdoZWlnaHQgPSBuZXdfc2l6ZTsKKwkJICAgIH0KKwkJfQorCQlpZiAobmV4dF9jdXJ3aW5fc2l6ZSA9PSAtMSkKKwkJeworCQkgICAgaWYgKCFoYXNfbmV4dF9jdXJ3aW4pCisJCQluZXh0X2N1cndpbl9zaXplID0gMDsKKwkJICAgIGVsc2UgaWYgKHRvdHdpbmNvdW50ID4gMQorCQkJICAgICYmIChyb29tICsgKHRvdHdpbmNvdW50IC0gMikpCisJCQkJCQkgICAvICh0b3R3aW5jb3VudCAtIDEpID4gcF93aCkKKwkJICAgIHsKKwkJCW5leHRfY3Vyd2luX3NpemUgPSAocm9vbSArIHBfd2ggKyB0b3R3aW5jb3VudCAqIHBfd21oCisJCQkJCSAgICsgKHRvdHdpbmNvdW50IC0gMSkpIC8gdG90d2luY291bnQ7CisJCQlyb29tIC09IG5leHRfY3Vyd2luX3NpemUgLSBwX3doOworCQkgICAgfQorCQkgICAgZWxzZQorCQkJbmV4dF9jdXJ3aW5fc2l6ZSA9IHBfd2g7CisJCX0KKwkgICAgfQorCisJICAgIGlmIChoYXNfbmV4dF9jdXJ3aW4pCisJCS0tdG90d2luY291bnQ7CQkvKiBkb24ndCBjb3VudCBjdXJ3aW4gKi8KKwl9CisKKwlmb3IgKGZyID0gdG9wZnItPmZyX2NoaWxkOyBmciAhPSBOVUxMOyBmciA9IGZyLT5mcl9uZXh0KQorCXsKKwkgICAgbiA9IG0gPSAwOworCSAgICB3aW5jb3VudCA9IDE7CisJICAgIGlmIChmci0+ZnJfbmV4dCA9PSBOVUxMKQorCQkvKiBsYXN0IGZyYW1lIGdldHMgYWxsIHRoYXQgcmVtYWlucyAoYXZvaWQgcm91bmRvZmYgZXJyb3IpICovCisJCW5ld19zaXplID0gaGVpZ2h0OworCSAgICBlbHNlIGlmIChkaXIgPT0gJ2gnKQorCQluZXdfc2l6ZSA9IGZyLT5mcl9oZWlnaHQ7CisJICAgIGVsc2UgaWYgKGZyYW1lX2ZpeGVkX2hlaWdodChmcikpCisJICAgIHsKKwkJbmV3X3NpemUgPSBmci0+ZnJfbmV3aGVpZ2h0OworCQl3aW5jb3VudCA9IDA7CSAgICAvKiBkb2Vzbid0IGNvdW50IGFzIGEgc2l6ZWFibGUgd2luZG93ICovCisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCS8qIENvbXB1dGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdpbmRvd3MgdmVydC4gaW4gImZyIi4gKi8KKwkJbiA9IGZyYW1lX21pbmhlaWdodChmciwgTk9XSU4pOworCQl3aW5jb3VudCA9IChuICsgKGZyLT5mcl9uZXh0ID09IE5VTEwgPyBleHRyYV9zZXAgOiAwKSkKKwkJCQkJCQkJLyAocF93bWggKyAxKTsKKwkJbSA9IGZyYW1lX21pbmhlaWdodChmciwgbmV4dF9jdXJ3aW4pOworCQlpZiAoaGFzX25leHRfY3Vyd2luKQorCQkgICAgaG5jID0gZnJhbWVfaGFzX3dpbihmciwgbmV4dF9jdXJ3aW4pOworCQllbHNlCisJCSAgICBobmMgPSBGQUxTRTsKKwkJaWYgKGhuYykJICAgIC8qIGRvbid0IGNvdW50IG5leHRfY3Vyd2luICovCisJCSAgICAtLXdpbmNvdW50OworCQlpZiAodG90d2luY291bnQgPT0gMCkKKwkJICAgIG5ld19zaXplID0gcm9vbTsKKwkJZWxzZQorCQkgICAgbmV3X3NpemUgPSAod2luY291bnQgKiByb29tICsgKCh1bnNpZ25lZCl0b3R3aW5jb3VudCA+PiAxKSkKKwkJCQkJCQkJLyB0b3R3aW5jb3VudDsKKwkJaWYgKGhuYykJICAgIC8qIGFkZCBuZXh0X2N1cndpbiBzaXplICovCisJCXsKKwkJICAgIG5leHRfY3Vyd2luX3NpemUgLT0gcF93aCAtIChtIC0gbik7CisJCSAgICBuZXdfc2l6ZSArPSBuZXh0X2N1cndpbl9zaXplOworCQkgICAgcm9vbSAtPSBuZXdfc2l6ZSAtIG5leHRfY3Vyd2luX3NpemU7CisJCX0KKwkJZWxzZQorCQkgICAgcm9vbSAtPSBuZXdfc2l6ZTsKKwkJbmV3X3NpemUgKz0gbjsKKwkgICAgfQorCSAgICAvKiBTa2lwIGZyYW1lIHRoYXQgaXMgZnVsbCB3aWR0aCB3aGVuIHNwbGl0dGluZyBvciBjbG9zaW5nIGEKKwkgICAgICogd2luZG93LCB1bmxlc3MgZXF1YWxpemluZyBhbGwgZnJhbWVzLiAqLworCSAgICBpZiAoIWN1cnJlbnQgfHwgZGlyICE9ICdoJyB8fCB0b3Bmci0+ZnJfcGFyZW50ICE9IE5VTEwKKwkJICAgIHx8IChuZXdfc2l6ZSAhPSBmci0+ZnJfaGVpZ2h0KQorCQkgICAgfHwgZnJhbWVfaGFzX3dpbihmciwgbmV4dF9jdXJ3aW4pKQorCQl3aW5fZXF1YWxfcmVjKG5leHRfY3Vyd2luLCBjdXJyZW50LCBmciwgZGlyLCBjb2wsIHJvdywKKwkJCQkJCQkgICAgIHdpZHRoLCBuZXdfc2l6ZSk7CisJICAgIHJvdyArPSBuZXdfc2l6ZTsKKwkgICAgaGVpZ2h0IC09IG5ld19zaXplOworCSAgICB0b3R3aW5jb3VudCAtPSB3aW5jb3VudDsKKwl9CisgICAgfQorfQorCisvKgorICogY2xvc2UgYWxsIHdpbmRvd3MgZm9yIGJ1ZmZlciAnYnVmJworICovCisgICAgdm9pZAorY2xvc2Vfd2luZG93cyhidWYpCisgICAgYnVmX1QJKmJ1ZjsKK3sKKyAgICB3aW5fVAkqd2luOworCisgICAgKytSZWRyYXdpbmdEaXNhYmxlZDsKKyAgICBmb3IgKHdpbiA9IGZpcnN0d2luOyB3aW4gIT0gTlVMTCAmJiBsYXN0d2luICE9IGZpcnN0d2luOyApCisgICAgeworCWlmICh3aW4tPndfYnVmZmVyID09IGJ1ZikKKwl7CisJICAgIHdpbl9jbG9zZSh3aW4sIEZBTFNFKTsKKwkgICAgd2luID0gZmlyc3R3aW47CSAgICAvKiBnbyBiYWNrIHRvIHRoZSBzdGFydCAqLworCX0KKwllbHNlCisJICAgIHdpbiA9IHdpbi0+d19uZXh0OworICAgIH0KKyAgICAtLVJlZHJhd2luZ0Rpc2FibGVkOworfQorCisvKgorICogY2xvc2Ugd2luZG93ICJ3aW4iCisgKiBJZiAiZnJlZV9idWYiIGlzIFRSVUUgcmVsYXRlZCBidWZmZXIgbWF5IGJlIHVubG9hZGVkLgorICoKKyAqIGNhbGxlZCBieSA6cXVpdCwgOmNsb3NlLCA6eGl0LCA6d3EgYW5kIGZpbmR0YWcoKQorICovCisgICAgdm9pZAord2luX2Nsb3NlKHdpbiwgZnJlZV9idWYpCisgICAgd2luX1QJKndpbjsKKyAgICBpbnQJCWZyZWVfYnVmOworeworICAgIHdpbl9UCSp3cDsKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBpbnQJCW90aGVyX2J1ZmZlciA9IEZBTFNFOworI2VuZGlmCisgICAgaW50CQljbG9zZV9jdXJ3aW4gPSBGQUxTRTsKKyAgICBmcmFtZV9UCSpmcnA7CisgICAgaW50CQlkaXI7CisgICAgaW50CQloZWxwX3dpbmRvdyA9IEZBTFNFOworCisgICAgaWYgKGxhc3R3aW4gPT0gZmlyc3R3aW4pCisgICAgeworCUVNU0coXygiRTQ0NDogQ2Fubm90IGNsb3NlIGxhc3Qgd2luZG93IikpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBXaGVuIGNsb3NpbmcgdGhlIGhlbHAgd2luZG93LCB0cnkgcmVzdG9yaW5nIGEgc25hcHNob3QgYWZ0ZXIgY2xvc2luZworICAgICAqIHRoZSB3aW5kb3cuICBPdGhlcndpc2UgY2xlYXIgdGhlIHNuYXBzaG90LCBpdCdzIG5vdyBpbnZhbGlkLiAqLworICAgIGlmICh3aW4tPndfYnVmZmVyLT5iX2hlbHApCisJaGVscF93aW5kb3cgPSBUUlVFOworICAgIGVsc2UKKwljbGVhcl9zbmFwc2hvdCgpOworCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgaWYgKHdpbiA9PSBjdXJ3aW4pCisgICAgeworCS8qCisJICogR3Vlc3Mgd2hpY2ggd2luZG93IGlzIGdvaW5nIHRvIGJlIHRoZSBuZXcgY3VycmVudCB3aW5kb3cuCisJICogVGhpcyBtYXkgY2hhbmdlIGJlY2F1c2Ugb2YgdGhlIGF1dG9jb21tYW5kcyAoc2lnaCkuCisJICovCisJd3AgPSBmcmFtZTJ3aW4od2luX2FsdGZyYW1lKHdpbikpOworCisJLyoKKwkgKiBCZSBjYXJlZnVsOiBJZiBhdXRvY29tbWFuZHMgZGVsZXRlIHRoZSB3aW5kb3csIHJldHVybiBub3cuCisJICovCisJaWYgKHdwLT53X2J1ZmZlciAhPSBjdXJidWYpCisJeworCSAgICBvdGhlcl9idWZmZXIgPSBUUlVFOworCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZMRUFWRSwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisJICAgIGlmICghd2luX3ZhbGlkKHdpbikgfHwgZmlyc3R3aW4gPT0gbGFzdHdpbikKKwkJcmV0dXJuOworCX0KKwlhcHBseV9hdXRvY21kcyhFVkVOVF9XSU5MRUFWRSwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisJaWYgKCF3aW5fdmFsaWQod2luKSB8fCBmaXJzdHdpbiA9PSBsYXN0d2luKQorCSAgICByZXR1cm47CisjIGlmZGVmIEZFQVRfRVZBTAorCS8qIGF1dG9jbWRzIG1heSBhYm9ydCBzY3JpcHQgcHJvY2Vzc2luZyAqLworCWlmIChhYm9ydGluZygpKQorCSAgICByZXR1cm47CisjIGVuZGlmCisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIENsb3NlIHRoZSBsaW5rIHRvIHRoZSBidWZmZXIuCisgICAgICovCisgICAgY2xvc2VfYnVmZmVyKHdpbiwgd2luLT53X2J1ZmZlciwgZnJlZV9idWYgPyBET0JVRl9VTkxPQUQgOiAwKTsKKyAgICAvKiBBdXRvY29tbWFuZHMgbWF5IGhhdmUgY2xvc2VkIHRoZSB3aW5kb3cgYWxyZWFkeSwgb3IgY2xvc2VkIHRoZSBvbmx5CisgICAgICogb3RoZXIgd2luZG93LiAqLworICAgIGlmICghd2luX3ZhbGlkKHdpbikgfHwgZmlyc3R3aW4gPT0gbGFzdHdpbikKKwlyZXR1cm47CisKKyAgICAvKiByZWR1Y2UgdGhlIHJlZmVyZW5jZSBjb3VudCB0byB0aGUgYXJndW1lbnQgbGlzdC4gKi8KKyAgICBhbGlzdF91bmxpbmsod2luLT53X2FsaXN0KTsKKworICAgIC8qIHJlbW92ZSB0aGUgd2luZG93IGFuZCBpdHMgZnJhbWUgZnJvbSB0aGUgdHJlZSBvZiBmcmFtZXMuICovCisgICAgZnJwID0gd2luLT53X2ZyYW1lOworICAgIHdwID0gd2luZnJhbWVfcmVtb3ZlKHdpbiwgJmRpcik7CisgICAgdmltX2ZyZWUoZnJwKTsKKyAgICB3aW5fZnJlZSh3aW4pOworCisgICAgLyogTWFrZSBzdXJlIGN1cndpbiBpc24ndCBpbnZhbGlkLiAgSXQgY2FuIGNhdXNlIHNldmVyZSB0cm91YmxlIHdoZW4KKyAgICAgKiBwcmludGluZyBhbiBlcnJvciBtZXNzYWdlLiAgRm9yIHdpbl9lcXVhbCgpIGN1cmJ1ZiBuZWVkcyB0byBiZSB2YWxpZAorICAgICAqIHRvby4gKi8KKyAgICBpZiAod2luID09IGN1cndpbikKKyAgICB7CisJY3Vyd2luID0gd3A7CisjaWZkZWYgRkVBVF9RVUlDS0ZJWAorCWlmICh3cC0+d19wX3B2dyB8fCBidF9xdWlja2ZpeCh3cC0+d19idWZmZXIpKQorCXsKKwkgICAgLyoKKwkgICAgICogVGhlIGN1cnNvciBnb2VzIHRvIHRoZSBwcmV2aWV3IG9yIHRoZSBxdWlja2ZpeCB3aW5kb3csIHRyeQorCSAgICAgKiBmaW5kaW5nIGFub3RoZXIgd2luZG93IHRvIGdvIHRvLgorCSAgICAgKi8KKwkgICAgZm9yICg7OykKKwkgICAgeworCQlpZiAod3AtPndfbmV4dCA9PSBOVUxMKQorCQkgICAgd3AgPSBmaXJzdHdpbjsKKwkJZWxzZQorCQkgICAgd3AgPSB3cC0+d19uZXh0OworCQlpZiAod3AgPT0gY3Vyd2luKQorCQkgICAgYnJlYWs7CisJCWlmICghd3AtPndfcF9wdncgJiYgIWJ0X3F1aWNrZml4KHdwLT53X2J1ZmZlcikpCisJCXsKKwkJICAgIGN1cndpbiA9IHdwOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZgorCWN1cmJ1ZiA9IGN1cndpbi0+d19idWZmZXI7CisJY2xvc2VfY3Vyd2luID0gVFJVRTsKKyAgICB9CisgICAgaWYgKHBfZWEpCisJd2luX2VxdWFsKGN1cndpbiwgVFJVRSwKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQlkaXIKKyNlbHNlCisJCTAKKyNlbmRpZgorCQkpOworICAgIGVsc2UKKwl3aW5fY29tcF9wb3MoKTsKKyAgICBpZiAoY2xvc2VfY3Vyd2luKQorICAgIHsKKwl3aW5fZW50ZXJfZXh0KHdwLCBGQUxTRSwgVFJVRSk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJaWYgKG90aGVyX2J1ZmZlcikKKwkgICAgLyogY2FyZWZ1bDogYWZ0ZXIgdGhpcyB3cCBhbmQgd2luIG1heSBiZSBpbnZhbGlkISAqLworCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZFTlRFUiwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKgorICAgICAqIGlmIGxhc3Qgd2luZG93IGhhcyBhIHN0YXR1cyBsaW5lIG5vdyBhbmQgd2UgZG9uJ3Qgd2FudCBvbmUsCisgICAgICogcmVtb3ZlIHRoZSBzdGF0dXMgbGluZQorICAgICAqLworICAgIGxhc3Rfc3RhdHVzKEZBTFNFKTsKKworICAgIC8qIEFmdGVyIGNsb3NpbmcgdGhlIGhlbHAgd2luZG93LCB0cnkgcmVzdG9yaW5nIHRoZSB3aW5kb3cgbGF5b3V0IGZyb20KKyAgICAgKiBiZWZvcmUgaXQgd2FzIG9wZW5lZC4gKi8KKyAgICBpZiAoaGVscF93aW5kb3cpCisJcmVzdG9yZV9zbmFwc2hvdChjbG9zZV9jdXJ3aW4pOworCisjaWYgZGVmaW5lZChGRUFUX0dVSSkgJiYgZGVmaW5lZChGRUFUX1ZFUlRTUExJVCkKKyAgICAvKiBXaGVuICdndWlvcHRpb25zJyBpbmNsdWRlcyAnTCcgb3IgJ1InIG1heSBoYXZlIHRvIHJlbW92ZSBzY3JvbGxiYXJzLiAqLworICAgIGlmIChndWkuaW5fdXNlICYmICF3aW5faGFzdmVydHNwbGl0KCkpCisJZ3VpX2luaXRfd2hpY2hfY29tcG9uZW50cyhOVUxMKTsKKyNlbmRpZgorCisgICAgcmVkcmF3X2FsbF9sYXRlcihOT1RfVkFMSUQpOworfQorCisvKgorICogUmVtb3ZlIGEgd2luZG93IGFuZCBpdHMgZnJhbWUgZnJvbSB0aGUgdHJlZSBvZiBmcmFtZXMuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgd2luZG93IHRoYXQgZ290IHRoZSBmcmVlZCB1cCBzcGFjZS4KKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHdpbl9UICoKK3dpbmZyYW1lX3JlbW92ZSh3aW4sIGRpcnApCisgICAgd2luX1QJKndpbjsKKyAgICBpbnQJCSpkaXJwOwkJLyogc2V0IHRvICd2JyBvciAnaCcgZm9yIGRpcmVjdGlvbiBpZiAnZWEnICovCit7CisgICAgZnJhbWVfVAkqZnJwLCAqZnJwMiwgKmZycDM7CisgICAgZnJhbWVfVAkqZnJwX2Nsb3NlID0gd2luLT53X2ZyYW1lOworICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCW9sZF9oZWlnaHQgPSAwOworCisgICAgLyoKKyAgICAgKiBSZW1vdmUgdGhlIHdpbmRvdyBmcm9tIGl0cyBmcmFtZS4KKyAgICAgKi8KKyAgICBmcnAyID0gd2luX2FsdGZyYW1lKHdpbik7CisgICAgd3AgPSBmcmFtZTJ3aW4oZnJwMik7CisKKyAgICAvKiBSZW1vdmUgdGhpcyBmcmFtZSBmcm9tIHRoZSBsaXN0IG9mIGZyYW1lcy4gKi8KKyAgICBmcmFtZV9yZW1vdmUoZnJwX2Nsb3NlKTsKKworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaWYgKGZycF9jbG9zZS0+ZnJfcGFyZW50LT5mcl9sYXlvdXQgPT0gRlJfQ09MKQorICAgIHsKKyNlbmRpZgorCS8qIFdoZW4gJ3dpbmZpeGhlaWdodCcgaXMgc2V0LCByZW1lbWJlciBpdHMgb2xkIHNpemUgYW5kIHJlc3RvcmUKKwkgKiBpdCBsYXRlciAoaXQncyBhIHNpbXBsaXN0aWMgc29sdXRpb24uLi4pLiAgRG9uJ3QgZG8gdGhpcyBpZiB0aGUKKwkgKiB3aW5kb3cgd2lsbCBvY2N1cHkgdGhlIGZ1bGwgaGVpZ2h0IG9mIHRoZSBzY3JlZW4uICovCisJaWYgKGZycDItPmZyX3dpbiAhPSBOVUxMCisJCSYmIChmcnAyLT5mcl9uZXh0ICE9IE5VTEwgfHwgZnJwMi0+ZnJfcHJldiAhPSBOVUxMKQorCQkmJiBmcnAyLT5mcl93aW4tPndfcF93ZmgpCisJICAgIG9sZF9oZWlnaHQgPSBmcnAyLT5mcl93aW4tPndfaGVpZ2h0OworCWZyYW1lX25ld19oZWlnaHQoZnJwMiwgZnJwMi0+ZnJfaGVpZ2h0ICsgZnJwX2Nsb3NlLT5mcl9oZWlnaHQsCisJCQkgICAgZnJwMiA9PSBmcnBfY2xvc2UtPmZyX25leHQgPyBUUlVFIDogRkFMU0UsIEZBTFNFKTsKKwlpZiAob2xkX2hlaWdodCAhPSAwKQorCSAgICB3aW5fc2V0aGVpZ2h0X3dpbihvbGRfaGVpZ2h0LCBmcnAyLT5mcl93aW4pOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJKmRpcnAgPSAndic7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJZnJhbWVfbmV3X3dpZHRoKGZycDIsIGZycDItPmZyX3dpZHRoICsgZnJwX2Nsb3NlLT5mcl93aWR0aCwKKwkJCQkgICBmcnAyID09IGZycF9jbG9zZS0+ZnJfbmV4dCA/IFRSVUUgOiBGQUxTRSk7CisJKmRpcnAgPSAnaCc7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBJZiByb3dzL2NvbHVtbnMgZ28gdG8gYSB3aW5kb3cgYmVsb3cvcmlnaHQgaXRzIHBvc2l0aW9ucyBuZWVkIHRvIGJlCisgICAgICogdXBkYXRlZC4gIENhbiBvbmx5IGJlIGRvbmUgYWZ0ZXIgdGhlIHNpemVzIGhhdmUgYmVlbiB1cGRhdGVkLiAqLworICAgIGlmIChmcnAyID09IGZycF9jbG9zZS0+ZnJfbmV4dCkKKyAgICB7CisJaW50IHJvdyA9IHdpbi0+d193aW5yb3c7CisJaW50IGNvbCA9IFdfV0lOQ09MKHdpbik7CisKKwlmcmFtZV9jb21wX3BvcyhmcnAyLCAmcm93LCAmY29sKTsKKyAgICB9CisKKyAgICBpZiAoZnJwMi0+ZnJfbmV4dCA9PSBOVUxMICYmIGZycDItPmZyX3ByZXYgPT0gTlVMTCkKKyAgICB7CisJLyogVGhlcmUgaXMgbm8gb3RoZXIgZnJhbWUgaW4gdGhpcyBsaXN0LCBtb3ZlIGl0cyBpbmZvIHRvIHRoZSBwYXJlbnQKKwkgKiBhbmQgcmVtb3ZlIGl0LiAqLworCWZycDItPmZyX3BhcmVudC0+ZnJfbGF5b3V0ID0gZnJwMi0+ZnJfbGF5b3V0OworCWZycDItPmZyX3BhcmVudC0+ZnJfY2hpbGQgPSBmcnAyLT5mcl9jaGlsZDsKKwlmb3IgKGZycCA9IGZycDItPmZyX2NoaWxkOyBmcnAgIT0gTlVMTDsgZnJwID0gZnJwLT5mcl9uZXh0KQorCSAgICBmcnAtPmZyX3BhcmVudCA9IGZycDItPmZyX3BhcmVudDsKKwlmcnAyLT5mcl9wYXJlbnQtPmZyX3dpbiA9IGZycDItPmZyX3dpbjsKKwlpZiAoZnJwMi0+ZnJfd2luICE9IE5VTEwpCisJICAgIGZycDItPmZyX3dpbi0+d19mcmFtZSA9IGZycDItPmZyX3BhcmVudDsKKwlmcnAgPSBmcnAyLT5mcl9wYXJlbnQ7CisJdmltX2ZyZWUoZnJwMik7CisKKwlmcnAyID0gZnJwLT5mcl9wYXJlbnQ7CisJaWYgKGZycDIgIT0gTlVMTCAmJiBmcnAyLT5mcl9sYXlvdXQgPT0gZnJwLT5mcl9sYXlvdXQpCisJeworCSAgICAvKiBUaGUgZnJhbWUgYWJvdmUgdGhlIHBhcmVudCBoYXMgdGhlIHNhbWUgbGF5b3V0LCBoYXZlIHRvIG1lcmdlCisJICAgICAqIHRoZSBmcmFtZXMgaW50byB0aGlzIGxpc3QuICovCisJICAgIGlmIChmcnAyLT5mcl9jaGlsZCA9PSBmcnApCisJCWZycDItPmZyX2NoaWxkID0gZnJwLT5mcl9jaGlsZDsKKwkgICAgZnJwLT5mcl9jaGlsZC0+ZnJfcHJldiA9IGZycC0+ZnJfcHJldjsKKwkgICAgaWYgKGZycC0+ZnJfcHJldiAhPSBOVUxMKQorCQlmcnAtPmZyX3ByZXYtPmZyX25leHQgPSBmcnAtPmZyX2NoaWxkOworCSAgICBmb3IgKGZycDMgPSBmcnAtPmZyX2NoaWxkOyA7IGZycDMgPSBmcnAzLT5mcl9uZXh0KQorCSAgICB7CisJCWZycDMtPmZyX3BhcmVudCA9IGZycDI7CisJCWlmIChmcnAzLT5mcl9uZXh0ID09IE5VTEwpCisJCXsKKwkJICAgIGZycDMtPmZyX25leHQgPSBmcnAtPmZyX25leHQ7CisJCSAgICBpZiAoZnJwLT5mcl9uZXh0ICE9IE5VTEwpCisJCQlmcnAtPmZyX25leHQtPmZyX3ByZXYgPSBmcnAzOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICB2aW1fZnJlZShmcnApOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gd3A7Cit9CisKKy8qCisgKiBGaW5kIG91dCB3aGljaCBmcmFtZSBpcyBnb2luZyB0byBnZXQgdGhlIGZyZWVkIHVwIHNwYWNlIHdoZW4gIndpbiIgaXMKKyAqIGNsb3NlZC4KKyAqIGlmICdzcGxpdGJlbG93Jy8nc3BsaXRsZWZ0JyB0aGUgc3BhY2UgZ29lcyB0byB0aGUgd2luZG93IGFib3ZlL2xlZnQuCisgKiBpZiAnbm9zcGxpdGJlbG93Jy8nbm9zcGxpdGxlZnQnIHRoZSBzcGFjZSBnb2VzIHRvIHRoZSB3aW5kb3cgYmVsb3cvcmlnaHQuCisgKiBUaGlzIG1ha2VzIG9wZW5pbmcgYSB3aW5kb3cgYW5kIGNsb3NpbmcgaXQgaW1tZWRpYXRlbHkga2VlcCB0aGUgc2FtZSB3aW5kb3cKKyAqIGxheW91dC4KKyAqLworICAgIHN0YXRpYyBmcmFtZV9UICoKK3dpbl9hbHRmcmFtZSh3aW4pCisgICAgd2luX1QJKndpbjsKK3sKKyAgICBmcmFtZV9UCSpmcnA7CisgICAgaW50CQliOworCisgICAgZnJwID0gd2luLT53X2ZyYW1lOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaWYgKGZycC0+ZnJfcGFyZW50LT5mcl9sYXlvdXQgPT0gRlJfUk9XKQorCWIgPSBwX3NwcjsKKyAgICBlbHNlCisjZW5kaWYKKwliID0gcF9zYjsKKyAgICBpZiAoKCFiICYmIGZycC0+ZnJfbmV4dCAhPSBOVUxMKSB8fCBmcnAtPmZyX3ByZXYgPT0gTlVMTCkKKwlyZXR1cm4gZnJwLT5mcl9uZXh0OworICAgIHJldHVybiBmcnAtPmZyX3ByZXY7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBsZWZ0LXVwcGVyIHdpbmRvdyBpbiBmcmFtZSAiZnJwIi4KKyAqLworICAgIHN0YXRpYyB3aW5fVCAqCitmcmFtZTJ3aW4oZnJwKQorICAgIGZyYW1lX1QJKmZycDsKK3sKKyAgICB3aGlsZSAoZnJwLT5mcl93aW4gPT0gTlVMTCkKKwlmcnAgPSBmcnAtPmZyX2NoaWxkOworICAgIHJldHVybiBmcnAtPmZyX3dpbjsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGZyYW1lICJmcnAiIGNvbnRhaW5zIHdpbmRvdyAid3AiLgorICovCisgICAgc3RhdGljIGludAorZnJhbWVfaGFzX3dpbihmcnAsIHdwKQorICAgIGZyYW1lX1QJKmZycDsKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgZnJhbWVfVAkqcDsKKworICAgIGlmIChmcnAtPmZyX2xheW91dCA9PSBGUl9MRUFGKQorCXJldHVybiBmcnAtPmZyX3dpbiA9PSB3cDsKKworICAgIGZvciAocCA9IGZycC0+ZnJfY2hpbGQ7IHAgIT0gTlVMTDsgcCA9IHAtPmZyX25leHQpCisJaWYgKGZyYW1lX2hhc193aW4ocCwgd3ApKQorCSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBTZXQgYSBuZXcgaGVpZ2h0IGZvciBhIGZyYW1lLiAgUmVjdXJzaXZlbHkgc2V0cyB0aGUgaGVpZ2h0IGZvciBjb250YWluZWQKKyAqIGZyYW1lcyBhbmQgd2luZG93cy4gIENhbGxlciBtdXN0IHRha2UgY2FyZSBvZiBwb3NpdGlvbnMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZnJhbWVfbmV3X2hlaWdodCh0b3BmcnAsIGhlaWdodCwgdG9wZmlyc3QsIHdmaCkKKyAgICBmcmFtZV9UCSp0b3BmcnA7CisgICAgaW50CQloZWlnaHQ7CisgICAgaW50CQl0b3BmaXJzdDsJLyogcmVzaXplIHRvcG1vc3QgY29udGFpbmVkIGZyYW1lIGZpcnN0ICovCisgICAgaW50CQl3Zmg7CQkvKiBvYmV5ICd3aW5maXhoZWlnaHQnIHdoZW4gdGhlcmUgaXMgYSBjaG9pY2U7CisJCQkJICAgbWF5IGNhdXNlIHRoZSBoZWlnaHQgbm90IHRvIGJlIHNldCAqLworeworICAgIGZyYW1lX1QJKmZycDsKKyAgICBpbnQJCWV4dHJhX2xpbmVzOworICAgIGludAkJaDsKKworICAgIGlmICh0b3BmcnAtPmZyX3dpbiAhPSBOVUxMKQorICAgIHsKKwkvKiBTaW1wbGUgY2FzZToganVzdCBvbmUgd2luZG93LiAqLworCXdpbl9uZXdfaGVpZ2h0KHRvcGZycC0+ZnJfd2luLAorCQkJCSAgICBoZWlnaHQgLSB0b3BmcnAtPmZyX3dpbi0+d19zdGF0dXNfaGVpZ2h0KTsKKyAgICB9CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKyAgICBlbHNlIGlmICh0b3BmcnAtPmZyX2xheW91dCA9PSBGUl9ST1cpCisgICAgeworCWRvCisJeworCSAgICAvKiBBbGwgZnJhbWVzIGluIHRoaXMgcm93IGdldCB0aGUgc2FtZSBuZXcgaGVpZ2h0LiAqLworCSAgICBmb3IgKGZycCA9IHRvcGZycC0+ZnJfY2hpbGQ7IGZycCAhPSBOVUxMOyBmcnAgPSBmcnAtPmZyX25leHQpCisJICAgIHsKKwkJZnJhbWVfbmV3X2hlaWdodChmcnAsIGhlaWdodCwgdG9wZmlyc3QsIHdmaCk7CisJCWlmIChmcnAtPmZyX2hlaWdodCA+IGhlaWdodCkKKwkJeworCQkgICAgLyogQ291bGQgbm90IGZpdCB0aGUgd2luZG93cywgbWFrZSB0aGUgd2hvbGUgcm93IGhpZ2hlci4gKi8KKwkJICAgIGhlaWdodCA9IGZycC0+ZnJfaGVpZ2h0OworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKwl3aGlsZSAoZnJwICE9IE5VTEwpOworICAgIH0KKyNlbmRpZgorICAgIGVsc2UKKyAgICB7CisJLyogQ29tcGxpY2F0ZWQgY2FzZTogUmVzaXplIGEgY29sdW1uIG9mIGZyYW1lcy4gIFJlc2l6ZSB0aGUgYm90dG9tCisJICogZnJhbWUgZmlyc3QsIGZyYW1lcyBhYm92ZSB0aGF0IHdoZW4gbmVlZGVkLiAqLworCisJZnJwID0gdG9wZnJwLT5mcl9jaGlsZDsKKwlpZiAod2ZoKQorCSAgICAvKiBBZHZhbmNlIHBhc3QgZnJhbWVzIHdpdGggb25lIHdpbmRvdyB3aXRoICd3ZmgnIHNldC4gKi8KKwkgICAgd2hpbGUgKGZyYW1lX2ZpeGVkX2hlaWdodChmcnApKQorCSAgICB7CisJCWZycCA9IGZycC0+ZnJfbmV4dDsKKwkJaWYgKGZycCA9PSBOVUxMKQorCQkgICAgcmV0dXJuOwkgICAgLyogbm8gZnJhbWUgd2l0aG91dCAnd2ZoJywgZ2l2ZSB1cCAqLworCSAgICB9CisJaWYgKCF0b3BmaXJzdCkKKwl7CisJICAgIC8qIEZpbmQgdGhlIGJvdHRvbSBmcmFtZSBvZiB0aGlzIGNvbHVtbiAqLworCSAgICB3aGlsZSAoZnJwLT5mcl9uZXh0ICE9IE5VTEwpCisJCWZycCA9IGZycC0+ZnJfbmV4dDsKKwkgICAgaWYgKHdmaCkKKwkJLyogQWR2YW5jZSBiYWNrIGZvciBmcmFtZXMgd2l0aCBvbmUgd2luZG93IHdpdGggJ3dmaCcgc2V0LiAqLworCQl3aGlsZSAoZnJhbWVfZml4ZWRfaGVpZ2h0KGZycCkpCisJCSAgICBmcnAgPSBmcnAtPmZyX3ByZXY7CisJfQorCisJZXh0cmFfbGluZXMgPSBoZWlnaHQgLSB0b3BmcnAtPmZyX2hlaWdodDsKKwlpZiAoZXh0cmFfbGluZXMgPCAwKQorCXsKKwkgICAgLyogcmVkdWNlIGhlaWdodCBvZiBjb250YWluZWQgZnJhbWVzLCBib3R0b20gb3IgdG9wIGZyYW1lIGZpcnN0ICovCisJICAgIHdoaWxlIChmcnAgIT0gTlVMTCkKKwkgICAgeworCQloID0gZnJhbWVfbWluaGVpZ2h0KGZycCwgTlVMTCk7CisJCWlmIChmcnAtPmZyX2hlaWdodCArIGV4dHJhX2xpbmVzIDwgaCkKKwkJeworCQkgICAgZXh0cmFfbGluZXMgKz0gZnJwLT5mcl9oZWlnaHQgLSBoOworCQkgICAgZnJhbWVfbmV3X2hlaWdodChmcnAsIGgsIHRvcGZpcnN0LCB3ZmgpOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgZnJhbWVfbmV3X2hlaWdodChmcnAsIGZycC0+ZnJfaGVpZ2h0ICsgZXh0cmFfbGluZXMsCisJCQkJCQkJICAgICAgIHRvcGZpcnN0LCB3ZmgpOworCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKHRvcGZpcnN0KQorCQl7CisJCSAgICBkbworCQkJZnJwID0gZnJwLT5mcl9uZXh0OworCQkgICAgd2hpbGUgKHdmaCAmJiBmcnAgIT0gTlVMTCAmJiBmcmFtZV9maXhlZF9oZWlnaHQoZnJwKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBkbworCQkJZnJwID0gZnJwLT5mcl9wcmV2OworCQkgICAgd2hpbGUgKHdmaCAmJiBmcnAgIT0gTlVMTCAmJiBmcmFtZV9maXhlZF9oZWlnaHQoZnJwKSk7CisJCX0KKwkJLyogSW5jcmVhc2UgImhlaWdodCIgaWYgd2UgY291bGQgbm90IHJlZHVjZSBlbm91Z2ggZnJhbWVzLiAqLworCQlpZiAoZnJwID09IE5VTEwpCisJCSAgICBoZWlnaHQgLT0gZXh0cmFfbGluZXM7CisJICAgIH0KKwl9CisJZWxzZSBpZiAoZXh0cmFfbGluZXMgPiAwKQorCXsKKwkgICAgLyogaW5jcmVhc2UgaGVpZ2h0IG9mIGJvdHRvbSBvciB0b3AgZnJhbWUgKi8KKwkgICAgZnJhbWVfbmV3X2hlaWdodChmcnAsIGZycC0+ZnJfaGVpZ2h0ICsgZXh0cmFfbGluZXMsIHRvcGZpcnN0LCB3ZmgpOworCX0KKyAgICB9CisgICAgdG9wZnJwLT5mcl9oZWlnaHQgPSBoZWlnaHQ7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiBoZWlnaHQgb2YgZnJhbWUgImZycCIgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGJlY2F1c2Ugb2YKKyAqIHRoZSAnd2luZml4aGVpZ2h0JyBvcHRpb24uCisgKi8KKyAgICBzdGF0aWMgaW50CitmcmFtZV9maXhlZF9oZWlnaHQoZnJwKQorICAgIGZyYW1lX1QJKmZycDsKK3sKKyAgICAvKiBmcmFtZSB3aXRoIG9uZSB3aW5kb3c6IGZpeGVkIGhlaWdodCBpZiAnd2luZml4aGVpZ2h0JyBzZXQuICovCisgICAgaWYgKGZycC0+ZnJfd2luICE9IE5VTEwpCisJcmV0dXJuIGZycC0+ZnJfd2luLT53X3Bfd2ZoOworCisgICAgaWYgKGZycC0+ZnJfbGF5b3V0ID09IEZSX1JPVykKKyAgICB7CisJLyogVGhlIGZyYW1lIGlzIGZpeGVkIGhlaWdodCBpZiBvbmUgb2YgdGhlIGZyYW1lcyBpbiB0aGUgcm93IGlzIGZpeGVkCisJICogaGVpZ2h0LiAqLworCWZvciAoZnJwID0gZnJwLT5mcl9jaGlsZDsgZnJwICE9IE5VTEw7IGZycCA9IGZycC0+ZnJfbmV4dCkKKwkgICAgaWYgKGZyYW1lX2ZpeGVkX2hlaWdodChmcnApKQorCQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLyogZnJwLT5mcl9sYXlvdXQgPT0gRlJfQ09MOiBUaGUgZnJhbWUgaXMgZml4ZWQgaGVpZ2h0IGlmIGFsbCBvZiB0aGUKKyAgICAgKiBmcmFtZXMgaW4gdGhlIHJvdyBhcmUgZml4ZWQgaGVpZ2h0LiAqLworICAgIGZvciAoZnJwID0gZnJwLT5mcl9jaGlsZDsgZnJwICE9IE5VTEw7IGZycCA9IGZycC0+ZnJfbmV4dCkKKwlpZiAoIWZyYW1lX2ZpeGVkX2hlaWdodChmcnApKQorCSAgICByZXR1cm4gRkFMU0U7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorLyoKKyAqIEFkZCBhIHN0YXR1cyBsaW5lIHRvIHdpbmRvd3MgYXQgdGhlIGJvdHRvbSBvZiAiZnJwIi4KKyAqIE5vdGU6IERvZXMgbm90IGNoZWNrIGlmIHRoZXJlIGlzIHJvb20hCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZnJhbWVfYWRkX3N0YXR1c2xpbmUoZnJwKQorICAgIGZyYW1lX1QJKmZycDsKK3sKKyAgICB3aW5fVAkqd3A7CisKKyAgICBpZiAoZnJwLT5mcl9sYXlvdXQgPT0gRlJfTEVBRikKKyAgICB7CisJd3AgPSBmcnAtPmZyX3dpbjsKKwlpZiAod3AtPndfc3RhdHVzX2hlaWdodCA9PSAwKQorCXsKKwkgICAgaWYgKHdwLT53X2hlaWdodCA+IDApCS8qIGRvbid0IG1ha2UgaXQgbmVnYXRpdmUgKi8KKwkJLS13cC0+d19oZWlnaHQ7CisJICAgIHdwLT53X3N0YXR1c19oZWlnaHQgPSBTVEFUVVNfSEVJR0hUOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAoZnJwLT5mcl9sYXlvdXQgPT0gRlJfUk9XKQorICAgIHsKKwkvKiBIYW5kbGUgYWxsIHRoZSBmcmFtZXMgaW4gdGhlIHJvdy4gKi8KKwlmb3IgKGZycCA9IGZycC0+ZnJfY2hpbGQ7IGZycCAhPSBOVUxMOyBmcnAgPSBmcnAtPmZyX25leHQpCisJICAgIGZyYW1lX2FkZF9zdGF0dXNsaW5lKGZycCk7CisgICAgfQorICAgIGVsc2UgLyogZnJwLT5mcl9sYXlvdXQgPT0gRlJfQ09MICovCisgICAgeworCS8qIE9ubHkgbmVlZCB0byBoYW5kbGUgdGhlIGxhc3QgZnJhbWUgaW4gdGhlIGNvbHVtbi4gKi8KKwlmb3IgKGZycCA9IGZycC0+ZnJfY2hpbGQ7IGZycC0+ZnJfbmV4dCAhPSBOVUxMOyBmcnAgPSBmcnAtPmZyX25leHQpCisJICAgIDsKKwlmcmFtZV9hZGRfc3RhdHVzbGluZShmcnApOworICAgIH0KK30KKworLyoKKyAqIFNldCB3aWR0aCBvZiBhIGZyYW1lLiAgSGFuZGxlcyByZWN1cnNpdmVseSBnb2luZyB0aHJvdWdoIGNvbnRhaW5lZCBmcmFtZXMuCisgKiBNYXkgcmVtb3ZlIHNlcGFyYXRvciBsaW5lIGZvciB3aW5kb3dzIGF0IHRoZSByaWdodCBzaWRlIChmb3Igd2luX2Nsb3NlKCkpLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZyYW1lX25ld193aWR0aCh0b3BmcnAsIHdpZHRoLCBsZWZ0Zmlyc3QpCisgICAgZnJhbWVfVAkqdG9wZnJwOworICAgIGludAkJd2lkdGg7CisgICAgaW50CQlsZWZ0Zmlyc3Q7CS8qIHJlc2l6ZSBsZWZ0bW9zdCBjb250YWluZWQgZnJhbWUgZmlyc3QgKi8KK3sKKyAgICBmcmFtZV9UCSpmcnA7CisgICAgaW50CQlleHRyYV9jb2xzOworICAgIGludAkJdzsKKyAgICB3aW5fVAkqd3A7CisKKyAgICBpZiAodG9wZnJwLT5mcl9sYXlvdXQgPT0gRlJfTEVBRikKKyAgICB7CisJLyogU2ltcGxlIGNhc2U6IGp1c3Qgb25lIHdpbmRvdy4gKi8KKwl3cCA9IHRvcGZycC0+ZnJfd2luOworCS8qIEZpbmQgb3V0IGlmIHRoZXJlIGFyZSBhbnkgd2luZG93cyByaWdodCBvZiB0aGlzIG9uZS4gKi8KKwlmb3IgKGZycCA9IHRvcGZycDsgZnJwLT5mcl9wYXJlbnQgIT0gTlVMTDsgZnJwID0gZnJwLT5mcl9wYXJlbnQpCisJICAgIGlmIChmcnAtPmZyX3BhcmVudC0+ZnJfbGF5b3V0ID09IEZSX1JPVyAmJiBmcnAtPmZyX25leHQgIT0gTlVMTCkKKwkJYnJlYWs7CisJaWYgKGZycC0+ZnJfcGFyZW50ID09IE5VTEwpCisJICAgIHdwLT53X3ZzZXBfd2lkdGggPSAwOworCXdpbl9uZXdfd2lkdGgod3AsIHdpZHRoIC0gd3AtPndfdnNlcF93aWR0aCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRvcGZycC0+ZnJfbGF5b3V0ID09IEZSX0NPTCkKKyAgICB7CisJLyogQWxsIGZyYW1lcyBpbiB0aGlzIGNvbHVtbiBnZXQgdGhlIHNhbWUgbmV3IHdpZHRoLiAqLworCWZvciAoZnJwID0gdG9wZnJwLT5mcl9jaGlsZDsgZnJwICE9IE5VTEw7IGZycCA9IGZycC0+ZnJfbmV4dCkKKwkgICAgZnJhbWVfbmV3X3dpZHRoKGZycCwgd2lkdGgsIGxlZnRmaXJzdCk7CisgICAgfQorICAgIGVsc2UgICAgLyogZnJfbGF5b3V0ID09IEZSX1JPVyAqLworICAgIHsKKwkvKiBDb21wbGljYXRlZCBjYXNlOiBSZXNpemUgYSByb3cgb2YgZnJhbWVzLiAgUmVzaXplIHRoZSByaWdodG1vc3QKKwkgKiBmcmFtZSBmaXJzdCwgZnJhbWVzIGxlZnQgb2YgaXQgd2hlbiBuZWVkZWQuICovCisKKwkvKiBGaW5kIHRoZSByaWdodG1vc3QgZnJhbWUgb2YgdGhpcyByb3cgKi8KKwlmcnAgPSB0b3BmcnAtPmZyX2NoaWxkOworCWlmICghbGVmdGZpcnN0KQorCSAgICB3aGlsZSAoZnJwLT5mcl9uZXh0ICE9IE5VTEwpCisJCWZycCA9IGZycC0+ZnJfbmV4dDsKKworCWV4dHJhX2NvbHMgPSB3aWR0aCAtIHRvcGZycC0+ZnJfd2lkdGg7CisJaWYgKGV4dHJhX2NvbHMgPCAwKQorCXsKKwkgICAgLyogcmVkdWNlIGZyYW1lIHdpZHRoLCByaWdodG1vc3QgZnJhbWUgZmlyc3QgKi8KKwkgICAgd2hpbGUgKGZycCAhPSBOVUxMKQorCSAgICB7CisJCXcgPSBmcmFtZV9taW53aWR0aChmcnAsIE5VTEwpOworCQlpZiAoZnJwLT5mcl93aWR0aCArIGV4dHJhX2NvbHMgPCB3KQorCQl7CisJCSAgICBleHRyYV9jb2xzICs9IGZycC0+ZnJfd2lkdGggLSB3OworCQkgICAgZnJhbWVfbmV3X3dpZHRoKGZycCwgdywgbGVmdGZpcnN0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGZyYW1lX25ld193aWR0aChmcnAsIGZycC0+ZnJfd2lkdGggKyBleHRyYV9jb2xzLCBsZWZ0Zmlyc3QpOworCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKGxlZnRmaXJzdCkKKwkJICAgIGZycCA9IGZycC0+ZnJfbmV4dDsKKwkJZWxzZQorCQkgICAgZnJwID0gZnJwLT5mcl9wcmV2OworCSAgICB9CisJfQorCWVsc2UgaWYgKGV4dHJhX2NvbHMgPiAwKQorCXsKKwkgICAgLyogaW5jcmVhc2Ugd2lkdGggb2YgcmlnaHRtb3N0IGZyYW1lICovCisJICAgIGZyYW1lX25ld193aWR0aChmcnAsIGZycC0+ZnJfd2lkdGggKyBleHRyYV9jb2xzLCBsZWZ0Zmlyc3QpOworCX0KKyAgICB9CisgICAgdG9wZnJwLT5mcl93aWR0aCA9IHdpZHRoOworfQorCisvKgorICogQWRkIHRoZSB2ZXJ0aWNhbCBzZXBhcmF0b3IgdG8gd2luZG93cyBhdCB0aGUgcmlnaHQgc2lkZSBvZiAiZnJwIi4KKyAqIE5vdGU6IERvZXMgbm90IGNoZWNrIGlmIHRoZXJlIGlzIHJvb20hCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZnJhbWVfYWRkX3ZzZXAoZnJwKQorICAgIGZyYW1lX1QJKmZycDsKK3sKKyAgICB3aW5fVAkqd3A7CisKKyAgICBpZiAoZnJwLT5mcl9sYXlvdXQgPT0gRlJfTEVBRikKKyAgICB7CisJd3AgPSBmcnAtPmZyX3dpbjsKKwlpZiAod3AtPndfdnNlcF93aWR0aCA9PSAwKQorCXsKKwkgICAgaWYgKHdwLT53X3dpZHRoID4gMCkJLyogZG9uJ3QgbWFrZSBpdCBuZWdhdGl2ZSAqLworCQktLXdwLT53X3dpZHRoOworCSAgICB3cC0+d192c2VwX3dpZHRoID0gMTsKKwl9CisgICAgfQorICAgIGVsc2UgaWYgKGZycC0+ZnJfbGF5b3V0ID09IEZSX0NPTCkKKyAgICB7CisJLyogSGFuZGxlIGFsbCB0aGUgZnJhbWVzIGluIHRoZSBjb2x1bW4uICovCisJZm9yIChmcnAgPSBmcnAtPmZyX2NoaWxkOyBmcnAgIT0gTlVMTDsgZnJwID0gZnJwLT5mcl9uZXh0KQorCSAgICBmcmFtZV9hZGRfdnNlcChmcnApOworICAgIH0KKyAgICBlbHNlIC8qIGZycC0+ZnJfbGF5b3V0ID09IEZSX1JPVyAqLworICAgIHsKKwkvKiBPbmx5IG5lZWQgdG8gaGFuZGxlIHRoZSBsYXN0IGZyYW1lIGluIHRoZSByb3cuICovCisJZnJwID0gZnJwLT5mcl9jaGlsZDsKKwl3aGlsZSAoZnJwLT5mcl9uZXh0ICE9IE5VTEwpCisJICAgIGZycCA9IGZycC0+ZnJfbmV4dDsKKwlmcmFtZV9hZGRfdnNlcChmcnApOworICAgIH0KK30KKworLyoKKyAqIFNldCBmcmFtZSB3aWR0aCBmcm9tIHRoZSB3aW5kb3cgaXQgY29udGFpbnMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZnJhbWVfZml4X3dpZHRoKHdwKQorICAgIHdpbl9UCSp3cDsKK3sKKyAgICB3cC0+d19mcmFtZS0+ZnJfd2lkdGggPSB3cC0+d193aWR0aCArIHdwLT53X3ZzZXBfd2lkdGg7Cit9CisjZW5kaWYKKworLyoKKyAqIFNldCBmcmFtZSBoZWlnaHQgZnJvbSB0aGUgd2luZG93IGl0IGNvbnRhaW5zLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZyYW1lX2ZpeF9oZWlnaHQod3ApCisgICAgd2luX1QJKndwOworeworICAgIHdwLT53X2ZyYW1lLT5mcl9oZWlnaHQgPSB3cC0+d19oZWlnaHQgKyB3cC0+d19zdGF0dXNfaGVpZ2h0OworfQorCisvKgorICogQ29tcHV0ZSB0aGUgbWluaW1hbCBoZWlnaHQgZm9yIGZyYW1lICJ0b3BmcnAiLgorICogVXNlcyB0aGUgJ3dpbm1pbmhlaWdodCcgb3B0aW9uLgorICogV2hlbiAibmV4dF9jdXJ3aW4iIGlzbid0IE5VTEwsIHVzZSBwX3doIGZvciB0aGlzIHdpbmRvdy4KKyAqIFdoZW4gIm5leHRfY3Vyd2luIiBpcyBOT1dJTiwgZG9uJ3QgdXNlIGF0IGxlYXN0IG9uZSBsaW5lIGZvciB0aGUgY3VycmVudAorICogd2luZG93LgorICovCisgICAgc3RhdGljIGludAorZnJhbWVfbWluaGVpZ2h0KHRvcGZycCwgbmV4dF9jdXJ3aW4pCisgICAgZnJhbWVfVAkqdG9wZnJwOworICAgIHdpbl9UCSpuZXh0X2N1cndpbjsKK3sKKyAgICBmcmFtZV9UCSpmcnA7CisgICAgaW50CQltOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaW50CQluOworI2VuZGlmCisKKyAgICBpZiAodG9wZnJwLT5mcl93aW4gIT0gTlVMTCkKKyAgICB7CisJaWYgKHRvcGZycC0+ZnJfd2luID09IG5leHRfY3Vyd2luKQorCSAgICBtID0gcF93aCArIHRvcGZycC0+ZnJfd2luLT53X3N0YXR1c19oZWlnaHQ7CisJZWxzZQorCXsKKwkgICAgLyogd2luZG93OiBtaW5pbWFsIGhlaWdodCBvZiB0aGUgd2luZG93IHBsdXMgc3RhdHVzIGxpbmUgKi8KKwkgICAgbSA9IHBfd21oICsgdG9wZnJwLT5mcl93aW4tPndfc3RhdHVzX2hlaWdodDsKKwkgICAgLyogQ3VycmVudCB3aW5kb3cgaXMgbWluaW1hbCBvbmUgbGluZSBoaWdoICovCisJICAgIGlmIChwX3dtaCA9PSAwICYmIHRvcGZycC0+ZnJfd2luID09IGN1cndpbiAmJiBuZXh0X2N1cndpbiA9PSBOVUxMKQorCQkrK207CisJfQorICAgIH0KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGVsc2UgaWYgKHRvcGZycC0+ZnJfbGF5b3V0ID09IEZSX1JPVykKKyAgICB7CisJLyogZ2V0IHRoZSBtaW5pbWFsIGhlaWdodCBmcm9tIGVhY2ggZnJhbWUgaW4gdGhpcyByb3cgKi8KKwltID0gMDsKKwlmb3IgKGZycCA9IHRvcGZycC0+ZnJfY2hpbGQ7IGZycCAhPSBOVUxMOyBmcnAgPSBmcnAtPmZyX25leHQpCisJeworCSAgICBuID0gZnJhbWVfbWluaGVpZ2h0KGZycCwgbmV4dF9jdXJ3aW4pOworCSAgICBpZiAobiA+IG0pCisJCW0gPSBuOworCX0KKyAgICB9CisjZW5kaWYKKyAgICBlbHNlCisgICAgeworCS8qIEFkZCB1cCB0aGUgbWluaW1hbCBoZWlnaHRzIGZvciBhbGwgZnJhbWVzIGluIHRoaXMgY29sdW1uLiAqLworCW0gPSAwOworCWZvciAoZnJwID0gdG9wZnJwLT5mcl9jaGlsZDsgZnJwICE9IE5VTEw7IGZycCA9IGZycC0+ZnJfbmV4dCkKKwkgICAgbSArPSBmcmFtZV9taW5oZWlnaHQoZnJwLCBuZXh0X2N1cndpbik7CisgICAgfQorCisgICAgcmV0dXJuIG07Cit9CisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorLyoKKyAqIENvbXB1dGUgdGhlIG1pbmltYWwgd2lkdGggZm9yIGZyYW1lICJ0b3BmcnAiLgorICogV2hlbiAibmV4dF9jdXJ3aW4iIGlzbid0IE5VTEwsIHVzZSBwX3dpdyBmb3IgdGhpcyB3aW5kb3cuCisgKiBXaGVuICJuZXh0X2N1cndpbiIgaXMgTk9XSU4sIGRvbid0IHVzZSBhdCBsZWFzdCBvbmUgY29sdW1uIGZvciB0aGUgY3VycmVudAorICogd2luZG93LgorICovCisgICAgc3RhdGljIGludAorZnJhbWVfbWlud2lkdGgodG9wZnJwLCBuZXh0X2N1cndpbikKKyAgICBmcmFtZV9UCSp0b3BmcnA7CisgICAgd2luX1QJKm5leHRfY3Vyd2luOwkvKiB1c2UgcF93aCBhbmQgcF93aXcgZm9yIG5leHRfY3Vyd2luICovCit7CisgICAgZnJhbWVfVAkqZnJwOworICAgIGludAkJbSwgbjsKKworICAgIGlmICh0b3BmcnAtPmZyX3dpbiAhPSBOVUxMKQorICAgIHsKKwlpZiAodG9wZnJwLT5mcl93aW4gPT0gbmV4dF9jdXJ3aW4pCisJICAgIG0gPSBwX3dpdyArIHRvcGZycC0+ZnJfd2luLT53X3ZzZXBfd2lkdGg7CisJZWxzZQorCXsKKwkgICAgLyogd2luZG93OiBtaW5pbWFsIHdpZHRoIG9mIHRoZSB3aW5kb3cgcGx1cyBzZXBhcmF0b3IgY29sdW1uICovCisJICAgIG0gPSBwX3dtdyArIHRvcGZycC0+ZnJfd2luLT53X3ZzZXBfd2lkdGg7CisJICAgIC8qIEN1cnJlbnQgd2luZG93IGlzIG1pbmltYWwgb25lIGNvbHVtbiB3aWRlICovCisJICAgIGlmIChwX3dtdyA9PSAwICYmIHRvcGZycC0+ZnJfd2luID09IGN1cndpbiAmJiBuZXh0X2N1cndpbiA9PSBOVUxMKQorCQkrK207CisJfQorICAgIH0KKyAgICBlbHNlIGlmICh0b3BmcnAtPmZyX2xheW91dCA9PSBGUl9DT0wpCisgICAgeworCS8qIGdldCB0aGUgbWluaW1hbCB3aWR0aCBmcm9tIGVhY2ggZnJhbWUgaW4gdGhpcyBjb2x1bW4gKi8KKwltID0gMDsKKwlmb3IgKGZycCA9IHRvcGZycC0+ZnJfY2hpbGQ7IGZycCAhPSBOVUxMOyBmcnAgPSBmcnAtPmZyX25leHQpCisJeworCSAgICBuID0gZnJhbWVfbWlud2lkdGgoZnJwLCBuZXh0X2N1cndpbik7CisJICAgIGlmIChuID4gbSkKKwkJbSA9IG47CisJfQorICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qIEFkZCB1cCB0aGUgbWluaW1hbCB3aWR0aHMgZm9yIGFsbCBmcmFtZXMgaW4gdGhpcyByb3cuICovCisJbSA9IDA7CisJZm9yIChmcnAgPSB0b3BmcnAtPmZyX2NoaWxkOyBmcnAgIT0gTlVMTDsgZnJwID0gZnJwLT5mcl9uZXh0KQorCSAgICBtICs9IGZyYW1lX21pbndpZHRoKGZycCwgbmV4dF9jdXJ3aW4pOworICAgIH0KKworICAgIHJldHVybiBtOworfQorI2VuZGlmCisKKworLyoKKyAqIFRyeSB0byBjbG9zZSBhbGwgd2luZG93cyBleGNlcHQgY3VycmVudCBvbmUuCisgKiBCdWZmZXJzIGluIHRoZSBvdGhlciB3aW5kb3dzIGJlY29tZSBoaWRkZW4gaWYgJ2hpZGRlbicgaXMgc2V0LCBvciAnIScgaXMKKyAqIHVzZWQgYW5kIHRoZSBidWZmZXIgd2FzIG1vZGlmaWVkLgorICoKKyAqIFVzZWQgYnkgIjpiZGVsIiBhbmQgIjpvbmx5Ii4KKyAqLworICAgIHZvaWQKK2Nsb3NlX290aGVycyhtZXNzYWdlLCBmb3JjZWl0KQorICAgIGludAkJbWVzc2FnZTsKKyAgICBpbnQJCWZvcmNlaXQ7CSAgICAvKiBhbHdheXMgaGlkZSBhbGwgb3RoZXIgd2luZG93cyAqLworeworICAgIHdpbl9UCSp3cDsKKyAgICB3aW5fVAkqbmV4dHdwOworICAgIGludAkJcjsKKworICAgIGlmIChsYXN0d2luID09IGZpcnN0d2luKQorICAgIHsKKwlpZiAobWVzc2FnZQorI2lmZGVmIEZFQVRfQVVUT0NNRAorCQkgICAgJiYgIWF1dG9jbWRfYnVzeQorI2VuZGlmCisJCQkJICAgICkKKwkgICAgTVNHKF8oIkFscmVhZHkgb25seSBvbmUgd2luZG93IikpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBCZSB2ZXJ5IGNhcmVmdWwgaGVyZTogYXV0b2NvbW1hbmRzIG1heSBjaGFuZ2UgdGhlIHdpbmRvdyBsYXlvdXQuICovCisgICAgZm9yICh3cCA9IGZpcnN0d2luOyB3aW5fdmFsaWQod3ApOyB3cCA9IG5leHR3cCkKKyAgICB7CisJbmV4dHdwID0gd3AtPndfbmV4dDsKKwlpZiAod3AgIT0gY3Vyd2luKQkJLyogZG9uJ3QgY2xvc2UgY3VycmVudCB3aW5kb3cgKi8KKwl7CisKKwkgICAgLyogQ2hlY2sgaWYgaXQncyBhbGxvd2VkIHRvIGFiYW5kb24gdGhpcyB3aW5kb3cgKi8KKwkgICAgciA9IGNhbl9hYmFuZG9uKHdwLT53X2J1ZmZlciwgZm9yY2VpdCk7CisjaWZkZWYgRkVBVF9BVVRPQ01ECisJICAgIGlmICghd2luX3ZhbGlkKHdwKSkJCS8qIGF1dG9jb21tYW5kcyBtZXNzZWQgd3AgdXAgKi8KKwkgICAgeworCQluZXh0d3AgPSBmaXJzdHdpbjsKKwkJY29udGludWU7CisJICAgIH0KKyNlbmRpZgorCSAgICBpZiAoIXIpCisJICAgIHsKKyNpZiBkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpCisJCWlmIChtZXNzYWdlICYmIChwX2NvbmZpcm0gfHwgY21kbW9kLmNvbmZpcm0pICYmIHBfd3JpdGUpCisJCXsKKwkJICAgIGRpYWxvZ19jaGFuZ2VkKHdwLT53X2J1ZmZlciwgRkFMU0UpOworIyBpZmRlZiBGRUFUX0FVVE9DTUQKKwkJICAgIGlmICghd2luX3ZhbGlkKHdwKSkJCS8qIGF1dG9jb21tYW5kcyBtZXNzZWQgd3AgdXAgKi8KKwkJICAgIHsKKwkJCW5leHR3cCA9IGZpcnN0d2luOworCQkJY29udGludWU7CisJCSAgICB9CisjIGVuZGlmCisJCX0KKwkJaWYgKGJ1ZklzQ2hhbmdlZCh3cC0+d19idWZmZXIpKQorI2VuZGlmCisJCSAgICBjb250aW51ZTsKKwkgICAgfQorCSAgICB3aW5fY2xvc2Uod3AsICFQX0hJRCh3cC0+d19idWZmZXIpICYmICFidWZJc0NoYW5nZWQod3AtPndfYnVmZmVyKSk7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSWYgY3VycmVudCB3aW5kb3cgaGFzIGEgc3RhdHVzIGxpbmUgYW5kIHdlIGRvbid0IHdhbnQgb25lLAorICAgICAqIHJlbW92ZSB0aGUgc3RhdHVzIGxpbmUuCisgICAgICovCisgICAgaWYgKGxhc3R3aW4gIT0gZmlyc3R3aW4pCisJRU1TRyhfKCJFNDQ1OiBPdGhlciB3aW5kb3cgY29udGFpbnMgY2hhbmdlcyIpKTsKK30KKworI2VuZGlmIC8qIEZFQVRfV0lORE9XUyAqLworCisvKgorICogaW5pdCB0aGUgY3Vyc29yIGluIHRoZSB3aW5kb3cKKyAqCisgKiBjYWxsZWQgd2hlbiBhIG5ldyBmaWxlIGlzIGJlaW5nIGVkaXRlZAorICovCisgICAgdm9pZAord2luX2luaXQod3ApCisgICAgd2luX1QJKndwOworeworICAgIHJlZHJhd193aW5fbGF0ZXIod3AsIE5PVF9WQUxJRCk7CisgICAgd3AtPndfbGluZXNfdmFsaWQgPSAwOworICAgIHdwLT53X2N1cnNvci5sbnVtID0gMTsKKyAgICB3cC0+d19jdXJzd2FudCA9IHdwLT53X2N1cnNvci5jb2wgPSAwOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICB3cC0+d19jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorICAgIHdwLT53X3BjbWFyay5sbnVtID0gMTsJLyogcGNtYXJrIG5vdCBjbGVhcmVkIGJ1dCBzZXQgdG8gbGluZSAxICovCisgICAgd3AtPndfcGNtYXJrLmNvbCA9IDA7CisgICAgd3AtPndfcHJldl9wY21hcmsubG51bSA9IDA7CisgICAgd3AtPndfcHJldl9wY21hcmsuY29sID0gMDsKKyAgICB3cC0+d190b3BsaW5lID0gMTsKKyNpZmRlZiBGRUFUX0RJRkYKKyAgICB3cC0+d190b3BmaWxsID0gMDsKKyNlbmRpZgorICAgIHdwLT53X2JvdGxpbmUgPSAyOworI2lmZGVmIEZFQVRfRktNQVAKKyAgICBpZiAoY3Vyd2luLT53X3BfcmwpCisJd3AtPndfZmFyc2kgPSBXX0NPTlYgKyBXX1JfTDsKKyAgICBlbHNlCisJd3AtPndfZmFyc2kgPSBXX0NPTlY7CisjZW5kaWYKK30KKworLyoKKyAqIEFsbG9jYXRlIHRoZSBmaXJzdCB3aW5kb3cgYW5kIHB1dCBhbiBlbXB0eSBidWZmZXIgaW4gaXQuCisgKiBDYWxsZWQgZnJvbSBtYWluKCkuCisgKiBXaGVuIHRoaXMgZmFpbHMgd2UgY2FuJ3QgZG8gYW55dGhpbmc6IGV4aXQuCisgKi8KKyAgICB2b2lkCit3aW5fYWxsb2NfZmlyc3QoKQoreworICAgIGN1cndpbiA9IHdpbl9hbGxvYyhOVUxMKTsKKyAgICBjdXJidWYgPSBidWZsaXN0X25ldyhOVUxMLCBOVUxMLCAxTCwgQkxOX0xJU1RFRCk7CisgICAgaWYgKGN1cndpbiA9PSBOVUxMIHx8IGN1cmJ1ZiA9PSBOVUxMKQorCW1jaF9leGl0KDApOworICAgIGN1cndpbi0+d19idWZmZXIgPSBjdXJidWY7CisgICAgY3VyYnVmLT5iX253aW5kb3dzID0gMTsJLyogdGhlcmUgaXMgb25lIHdpbmRvdyAqLworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIGN1cndpbi0+d19hbGlzdCA9ICZnbG9iYWxfYWxpc3Q7CisjZW5kaWYKKyAgICB3aW5faW5pdChjdXJ3aW4pOwkJLyogaW5pdCBjdXJyZW50IHdpbmRvdyAqLworCisgICAgdG9wZnJhbWUgPSAoZnJhbWVfVCAqKWFsbG9jX2NsZWFyKCh1bnNpZ25lZClzaXplb2YoZnJhbWVfVCkpOworICAgIGlmICh0b3BmcmFtZSA9PSBOVUxMKQorCW1jaF9leGl0KDApOworICAgIHRvcGZyYW1lLT5mcl9sYXlvdXQgPSBGUl9MRUFGOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgdG9wZnJhbWUtPmZyX3dpZHRoID0gQ29sdW1uczsKKyNlbmRpZgorICAgIHRvcGZyYW1lLT5mcl9oZWlnaHQgPSBSb3dzIC0gcF9jaDsKKyAgICB0b3BmcmFtZS0+ZnJfd2luID0gY3Vyd2luOworICAgIGN1cndpbi0+d19mcmFtZSA9IHRvcGZyYW1lOworfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoUFJPVE8pCisKKy8qCisgKiBHbyB0byBhbm90aGVyIHdpbmRvdy4KKyAqIFdoZW4ganVtcGluZyB0byBhbm90aGVyIGJ1ZmZlciwgc3RvcCBWaXN1YWwgbW9kZS4gIERvIHRoaXMgYmVmb3JlCisgKiBjaGFuZ2luZyB3aW5kb3dzIHNvIHdlIGNhbiB5YW5rIHRoZSBzZWxlY3Rpb24gaW50byB0aGUgJyonIHJlZ2lzdGVyLgorICogV2hlbiBqdW1waW5nIHRvIGFub3RoZXIgd2luZG93IG9uIHRoZSBzYW1lIGJ1ZmZlciwgYWRqdXN0IGl0cyBjdXJzb3IKKyAqIHBvc2l0aW9uIHRvIGtlZXAgdGhlIHNhbWUgVmlzdWFsIGFyZWEuCisgKi8KKyAgICB2b2lkCit3aW5fZ290byh3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisjaWZkZWYgRkVBVF9DTURXSU4KKyAgICBpZiAoY21kd2luX3R5cGUgIT0gMCkKKyAgICB7CisJYmVlcF9mbHVzaCgpOworCXJldHVybjsKKyAgICB9CisjZW5kaWYKKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgIGlmICh3cC0+d19idWZmZXIgIT0gY3VyYnVmKQorCXJlc2V0X1ZJc3VhbF9hbmRfcmVzZWwoKTsKKyAgICBlbHNlIGlmIChWSXN1YWxfYWN0aXZlKQorCXdwLT53X2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfR1VJCisgICAgbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKKyNlbmRpZgorICAgIHdpbl9lbnRlcih3cCwgVFJVRSk7Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfUEVSTCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBGaW5kIHdpbmRvdyBudW1iZXIgIndpbm5yIiAoY291bnRpbmcgdG9wIHRvIGJvdHRvbSkuCisgKi8KKyAgICB3aW5fVCAqCit3aW5fZmluZF9ucih3aW5ucikKKyAgICBpbnQJCXdpbm5yOworeworICAgIHdpbl9UCSp3cDsKKworIyBpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwlpZiAoLS13aW5uciA9PSAwKQorCSAgICBicmVhazsKKyAgICByZXR1cm4gd3A7CisjIGVsc2UKKyAgICByZXR1cm4gY3Vyd2luOworIyBlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorLyoKKyAqIE1vdmUgdG8gd2luZG93IGFib3ZlIG9yIGJlbG93ICJjb3VudCIgdGltZXMuCisgKi8KKyAgICBzdGF0aWMgdm9pZAord2luX2dvdG9fdmVyKHVwLCBjb3VudCkKKyAgICBpbnQJCXVwOwkJLyogVFJVRSB0byBnbyB0byB3aW4gYWJvdmUgKi8KKyAgICBsb25nCWNvdW50OworeworICAgIGZyYW1lX1QJKmZyOworICAgIGZyYW1lX1QJKm5mcjsKKyAgICBmcmFtZV9UCSpmb3VuZGZyOworCisgICAgZm91bmRmciA9IGN1cndpbi0+d19mcmFtZTsKKyAgICB3aGlsZSAoY291bnQtLSkKKyAgICB7CisJLyoKKwkgKiBGaXJzdCBnbyB1cHdhcmRzIGluIHRoZSB0cmVlIG9mIGZyYW1lcyB1bnRpbCB3ZSBmaW5kIGEgdXB3YXJkcyBvcgorCSAqIGRvd253YXJkcyBuZWlnaGJvci4KKwkgKi8KKwlmciA9IGZvdW5kZnI7CisJZm9yICg7OykKKwl7CisJICAgIGlmIChmciA9PSB0b3BmcmFtZSkKKwkJZ290byBlbmQ7CisJICAgIGlmICh1cCkKKwkJbmZyID0gZnItPmZyX3ByZXY7CisJICAgIGVsc2UKKwkJbmZyID0gZnItPmZyX25leHQ7CisJICAgIGlmIChmci0+ZnJfcGFyZW50LT5mcl9sYXlvdXQgPT0gRlJfQ09MICYmIG5mciAhPSBOVUxMKQorCQlicmVhazsKKwkgICAgZnIgPSBmci0+ZnJfcGFyZW50OworCX0KKworCS8qCisJICogTm93IGdvIGRvd253YXJkcyB0byBmaW5kIHRoZSBib3R0b20gb3IgdG9wIGZyYW1lIGluIGl0LgorCSAqLworCWZvciAoOzspCisJeworCSAgICBpZiAobmZyLT5mcl9sYXlvdXQgPT0gRlJfTEVBRikKKwkgICAgeworCQlmb3VuZGZyID0gbmZyOworCQlicmVhazsKKwkgICAgfQorCSAgICBmciA9IG5mci0+ZnJfY2hpbGQ7CisJICAgIGlmIChuZnItPmZyX2xheW91dCA9PSBGUl9ST1cpCisJICAgIHsKKwkJLyogRmluZCB0aGUgZnJhbWUgYXQgdGhlIGN1cnNvciByb3cuICovCisJCXdoaWxlIChmci0+ZnJfbmV4dCAhPSBOVUxMCisJCQkmJiBmcmFtZTJ3aW4oZnIpLT53X3dpbmNvbCArIGZyLT5mcl93aWR0aAorCQkJCQkgPD0gY3Vyd2luLT53X3dpbmNvbCArIGN1cndpbi0+d193Y29sKQorCQkgICAgZnIgPSBmci0+ZnJfbmV4dDsKKwkgICAgfQorCSAgICBpZiAobmZyLT5mcl9sYXlvdXQgPT0gRlJfQ09MICYmIHVwKQorCQl3aGlsZSAoZnItPmZyX25leHQgIT0gTlVMTCkKKwkJICAgIGZyID0gZnItPmZyX25leHQ7CisJICAgIG5mciA9IGZyOworCX0KKyAgICB9CitlbmQ6CisgICAgaWYgKGZvdW5kZnIgIT0gTlVMTCkKKwl3aW5fZ290byhmb3VuZGZyLT5mcl93aW4pOworfQorCisvKgorICogTW92ZSB0byBsZWZ0IG9yIHJpZ2h0IHdpbmRvdy4KKyAqLworICAgIHN0YXRpYyB2b2lkCit3aW5fZ290b19ob3IobGVmdCwgY291bnQpCisgICAgaW50CQlsZWZ0OwkJLyogVFJVRSB0byBnbyB0byBsZWZ0IHdpbiAqLworICAgIGxvbmcJY291bnQ7Cit7CisgICAgZnJhbWVfVAkqZnI7CisgICAgZnJhbWVfVAkqbmZyOworICAgIGZyYW1lX1QJKmZvdW5kZnI7CisKKyAgICBmb3VuZGZyID0gY3Vyd2luLT53X2ZyYW1lOworICAgIHdoaWxlIChjb3VudC0tKQorICAgIHsKKwkvKgorCSAqIEZpcnN0IGdvIHVwd2FyZHMgaW4gdGhlIHRyZWUgb2YgZnJhbWVzIHVudGlsIHdlIGZpbmQgYSBsZWZ0IG9yCisJICogcmlnaHQgbmVpZ2hib3IuCisJICovCisJZnIgPSBmb3VuZGZyOworCWZvciAoOzspCisJeworCSAgICBpZiAoZnIgPT0gdG9wZnJhbWUpCisJCWdvdG8gZW5kOworCSAgICBpZiAobGVmdCkKKwkJbmZyID0gZnItPmZyX3ByZXY7CisJICAgIGVsc2UKKwkJbmZyID0gZnItPmZyX25leHQ7CisJICAgIGlmIChmci0+ZnJfcGFyZW50LT5mcl9sYXlvdXQgPT0gRlJfUk9XICYmIG5mciAhPSBOVUxMKQorCQlicmVhazsKKwkgICAgZnIgPSBmci0+ZnJfcGFyZW50OworCX0KKworCS8qCisJICogTm93IGdvIGRvd253YXJkcyB0byBmaW5kIHRoZSBsZWZ0bW9zdCBvciByaWdodG1vc3QgZnJhbWUgaW4gaXQuCisJICovCisJZm9yICg7OykKKwl7CisJICAgIGlmIChuZnItPmZyX2xheW91dCA9PSBGUl9MRUFGKQorCSAgICB7CisJCWZvdW5kZnIgPSBuZnI7CisJCWJyZWFrOworCSAgICB9CisJICAgIGZyID0gbmZyLT5mcl9jaGlsZDsKKwkgICAgaWYgKG5mci0+ZnJfbGF5b3V0ID09IEZSX0NPTCkKKwkgICAgeworCQkvKiBGaW5kIHRoZSBmcmFtZSBhdCB0aGUgY3Vyc29yIHJvdy4gKi8KKwkJd2hpbGUgKGZyLT5mcl9uZXh0ICE9IE5VTEwKKwkJCSYmIGZyYW1lMndpbihmciktPndfd2lucm93ICsgZnItPmZyX2hlaWdodAorCQkJCQkgPD0gY3Vyd2luLT53X3dpbnJvdyArIGN1cndpbi0+d193cm93KQorCQkgICAgZnIgPSBmci0+ZnJfbmV4dDsKKwkgICAgfQorCSAgICBpZiAobmZyLT5mcl9sYXlvdXQgPT0gRlJfUk9XICYmIGxlZnQpCisJCXdoaWxlIChmci0+ZnJfbmV4dCAhPSBOVUxMKQorCQkgICAgZnIgPSBmci0+ZnJfbmV4dDsKKwkgICAgbmZyID0gZnI7CisJfQorICAgIH0KK2VuZDoKKyAgICBpZiAoZm91bmRmciAhPSBOVUxMKQorCXdpbl9nb3RvKGZvdW5kZnItPmZyX3dpbik7Cit9CisjZW5kaWYKKworLyoKKyAqIE1ha2Ugd2luZG93ICJ3cCIgdGhlIGN1cnJlbnQgd2luZG93LgorICovCisgICAgdm9pZAord2luX2VudGVyKHdwLCB1bmRvX3N5bmMpCisgICAgd2luX1QJKndwOworICAgIGludAkJdW5kb19zeW5jOworeworICAgIHdpbl9lbnRlcl9leHQod3AsIHVuZG9fc3luYywgRkFMU0UpOworfQorCisvKgorICogTWFrZSB3aW5kb3cgd3AgdGhlIGN1cnJlbnQgd2luZG93LgorICogQ2FuIGJlIGNhbGxlZCB3aXRoICJjdXJ3aW5faW52YWxpZCIgVFJVRSwgd2hpY2ggbWVhbnMgdGhhdCBjdXJ3aW4gaGFzIGp1c3QKKyAqIGJlZW4gY2xvc2VkIGFuZCBpc24ndCB2YWxpZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCit3aW5fZW50ZXJfZXh0KHdwLCB1bmRvX3N5bmMsIGN1cndpbl9pbnZhbGlkKQorICAgIHdpbl9UCSp3cDsKKyAgICBpbnQJCXVuZG9fc3luYzsKKyAgICBpbnQJCWN1cndpbl9pbnZhbGlkOworeworI2lmZGVmIEZFQVRfQVVUT0NNRAorICAgIGludAkJb3RoZXJfYnVmZmVyID0gRkFMU0U7CisjZW5kaWYKKworICAgIGlmICh3cCA9PSBjdXJ3aW4gJiYgIWN1cndpbl9pbnZhbGlkKQkvKiBub3RoaW5nIHRvIGRvICovCisJcmV0dXJuOworCisjaWZkZWYgRkVBVF9BVVRPQ01ECisgICAgaWYgKCFjdXJ3aW5faW52YWxpZCkKKyAgICB7CisJLyoKKwkgKiBCZSBjYXJlZnVsOiBJZiBhdXRvY29tbWFuZHMgZGVsZXRlIHRoZSB3aW5kb3csIHJldHVybiBub3cuCisJICovCisJaWYgKHdwLT53X2J1ZmZlciAhPSBjdXJidWYpCisJeworCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZMRUFWRSwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisJICAgIG90aGVyX2J1ZmZlciA9IFRSVUU7CisJICAgIGlmICghd2luX3ZhbGlkKHdwKSkKKwkJcmV0dXJuOworCX0KKwlhcHBseV9hdXRvY21kcyhFVkVOVF9XSU5MRUFWRSwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisJaWYgKCF3aW5fdmFsaWQod3ApKQorCSAgICByZXR1cm47CisjIGlmZGVmIEZFQVRfRVZBTAorCS8qIGF1dG9jbWRzIG1heSBhYm9ydCBzY3JpcHQgcHJvY2Vzc2luZyAqLworCWlmIChhYm9ydGluZygpKQorCSAgICByZXR1cm47CisjIGVuZGlmCisgICAgfQorI2VuZGlmCisKKyAgICAvKiBzeW5jIHVuZG8gYmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgYnVmZmVyICovCisgICAgaWYgKHVuZG9fc3luYyAmJiBjdXJidWYgIT0gd3AtPndfYnVmZmVyKQorCXVfc3luYygpOworICAgIC8qIG1heSBoYXZlIHRvIGNvcHkgdGhlIGJ1ZmZlciBvcHRpb25zIHdoZW4gJ2NwbycgY29udGFpbnMgJ1MnICovCisgICAgaWYgKHdwLT53X2J1ZmZlciAhPSBjdXJidWYpCisJYnVmX2NvcHlfb3B0aW9ucyh3cC0+d19idWZmZXIsIEJDT19FTlRFUiB8IEJDT19OT0hFTFApOworICAgIGlmICghY3Vyd2luX2ludmFsaWQpCisgICAgeworCXByZXZ3aW4gPSBjdXJ3aW47CS8qIHJlbWVtYmVyIGZvciBDVFJMLVcgcCAqLworCWN1cndpbi0+d19yZWRyX3N0YXR1cyA9IFRSVUU7CisgICAgfQorICAgIGN1cndpbiA9IHdwOworICAgIGN1cmJ1ZiA9IHdwLT53X2J1ZmZlcjsKKyAgICBjaGVja19jdXJzb3IoKTsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgaWYgKCF2aXJ0dWFsX2FjdGl2ZSgpKQorCWN1cndpbi0+d19jdXJzb3IuY29sYWRkID0gMDsKKyNlbmRpZgorICAgIGNoYW5nZWRfbGluZV9hYnZfY3VycygpOwkvKiBhc3N1bWUgY3Vyc29yIHBvc2l0aW9uIG5lZWRzIHVwZGF0aW5nICovCisKKyAgICBpZiAoY3Vyd2luLT53X2xvY2FsZGlyICE9IE5VTEwpCisgICAgeworCS8qIFdpbmRvdyBoYXMgYSBsb2NhbCBkaXJlY3Rvcnk6IFNhdmUgY3VycmVudCBkaXJlY3RvcnkgYXMgZ2xvYmFsCisJICogZGlyZWN0b3J5ICh1bmxlc3MgdGhhdCB3YXMgZG9uZSBhbHJlYWR5KSBhbmQgY2hhbmdlIHRvIHRoZSBsb2NhbAorCSAqIGRpcmVjdG9yeS4gKi8KKwlpZiAoZ2xvYmFsZGlyID09IE5VTEwpCisJeworCSAgICBjaGFyX3UJY3dkW01BWFBBVEhMXTsKKworCSAgICBpZiAobWNoX2Rpcm5hbWUoY3dkLCBNQVhQQVRITCkgPT0gT0spCisJCWdsb2JhbGRpciA9IHZpbV9zdHJzYXZlKGN3ZCk7CisJfQorCW1jaF9jaGRpcigoY2hhciAqKWN1cndpbi0+d19sb2NhbGRpcik7CisJc2hvcnRlbl9mbmFtZXMoVFJVRSk7CisgICAgfQorICAgIGVsc2UgaWYgKGdsb2JhbGRpciAhPSBOVUxMKQorICAgIHsKKwkvKiBXaW5kb3cgZG9lc24ndCBoYXZlIGEgbG9jYWwgZGlyZWN0b3J5IGFuZCB3ZSBhcmUgbm90IGluIHRoZSBnbG9iYWwKKwkgKiBkaXJlY3Rvcnk6IENoYW5nZSB0byB0aGUgZ2xvYmFsIGRpcmVjdG9yeS4gKi8KKwltY2hfY2hkaXIoKGNoYXIgKilnbG9iYWxkaXIpOworCXZpbV9mcmVlKGdsb2JhbGRpcik7CisJZ2xvYmFsZGlyID0gTlVMTDsKKwlzaG9ydGVuX2ZuYW1lcyhUUlVFKTsKKyAgICB9CisKKyNpZmRlZiBGRUFUX0FVVE9DTUQKKyAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9XSU5FTlRFUiwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisgICAgaWYgKG90aGVyX2J1ZmZlcikKKwlhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZFTlRFUiwgTlVMTCwgTlVMTCwgRkFMU0UsIGN1cmJ1Zik7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVElUTEUKKyAgICBtYWtldGl0bGUoKTsKKyNlbmRpZgorICAgIGN1cndpbi0+d19yZWRyX3N0YXR1cyA9IFRSVUU7CisgICAgaWYgKHJlc3RhcnRfZWRpdCkKKwlyZWRyYXdfbGF0ZXIoVkFMSUQpOwkvKiBjYXVzZXMgc3RhdHVzIGxpbmUgcmVkcmF3ICovCisKKyAgICAvKiBzZXQgd2luZG93IGhlaWdodCB0byBkZXNpcmVkIG1pbmltYWwgdmFsdWUgKi8KKyAgICBpZiAoY3Vyd2luLT53X2hlaWdodCA8IHBfd2ggJiYgIWN1cndpbi0+d19wX3dmaCkKKwl3aW5fc2V0aGVpZ2h0KChpbnQpcF93aCk7CisgICAgZWxzZSBpZiAoY3Vyd2luLT53X2hlaWdodCA9PSAwKQorCXdpbl9zZXRoZWlnaHQoMSk7CisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIC8qIHNldCB3aW5kb3cgd2lkdGggdG8gZGVzaXJlZCBtaW5pbWFsIHZhbHVlICovCisgICAgaWYgKGN1cndpbi0+d193aWR0aCA8IHBfd2l3KQorCXdpbl9zZXR3aWR0aCgoaW50KXBfd2l3KTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9NT1VTRQorICAgIHNldG1vdXNlKCk7CQkJLyogaW4gY2FzZSBqdW1wZWQgdG8vZnJvbSBoZWxwIGJ1ZmZlciAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfTkVUQkVBTlNfSU5URykgfHwgZGVmaW5lZChGRUFUX1NVTl9XT1JLU0hPUCkKKyAgICAvKiBDaGFuZ2UgZGlyZWN0b3JpZXMgd2hlbiB0aGUgYWNkIG9wdGlvbiBpcyBzZXQgb24gYW5kIGFmdGVyCisgICAgICogc3dpdGNoaW5nIHdpbmRvd3MuICovCisgICAgaWYgKHBfYWNkICYmIGN1cmJ1Zi0+Yl9mZm5hbWUgIT0gTlVMTAorCQkJCSAgICAgJiYgdmltX2NoZGlyZmlsZShjdXJidWYtPmJfZmZuYW1lKSA9PSBPSykKKwlzaG9ydGVuX2ZuYW1lcyhUUlVFKTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogRkVBVF9XSU5ET1dTICovCisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChGRUFUX1NJR05TKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIEp1bXAgdG8gdGhlIGZpcnN0IG9wZW4gd2luZG93IHRoYXQgY29udGFpbnMgYnVmZmVyIGJ1ZiBpZiBvbmUgZXhpc3RzCisgKiBUT0RPOiBBbHRlcm5hdGl2ZWx5IGp1bXAgdG8gbGFzdCBvcGVuIHdpbmRvdz8gRGVwZW5kZW50IGZyb20gJ3NwbGl0YmVsb3cnPworICogUmV0dXJucyBwb2ludGVyIHRvIHdpbmRvdyBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBOVUxMLgorICovCisgICAgd2luX1QgKgorYnVmX2p1bXBfb3Blbl93aW4oYnVmKQorICAgIGJ1Zl9UCSpidWY7Cit7CisjIGlmZGVmIEZFQVRfV0lORE9XUworICAgIHdpbl9UCSp3cDsKKworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3A7IHdwID0gd3AtPndfbmV4dCkKKwlpZiAod3AtPndfYnVmZmVyID09IGJ1ZikKKwkgICAgYnJlYWs7CisgICAgaWYgKHdwICE9IE5VTEwpCisJd2luX2VudGVyKHdwLCBGQUxTRSk7CisgICAgcmV0dXJuIHdwOworIyBlbHNlCisgICAgaWYgKGN1cndpbi0+d19idWZmZXIgPT0gYnVmKQorCXJldHVybiBjdXJ3aW47CisgICAgcmV0dXJuIE5VTEw7CisjIGVuZGlmCit9CisjZW5kaWYKKworLyoKKyAqIGFsbG9jYXRlIGEgd2luZG93IHN0cnVjdHVyZSBhbmQgbGluayBpdCBpbiB0aGUgd2luZG93IGxpc3QKKyAqLworLypBUkdTVVNFRCovCisgICAgc3RhdGljIHdpbl9UICoKK3dpbl9hbGxvYyhhZnRlcikKKyAgICB3aW5fVAkqYWZ0ZXI7Cit7CisgICAgd2luX1QJKm5ld3dpbjsKKworICAgIC8qCisgICAgICogYWxsb2NhdGUgd2luZG93IHN0cnVjdHVyZSBhbmQgbGluZXNpemVzIGFycmF5cworICAgICAqLworICAgIG5ld3dpbiA9ICh3aW5fVCAqKWFsbG9jX2NsZWFyKCh1bnNpZ25lZClzaXplb2Yod2luX1QpKTsKKyAgICBpZiAobmV3d2luICE9IE5VTEwgJiYgd2luX2FsbG9jX2xpbmVzKG5ld3dpbikgPT0gRkFJTCkKKyAgICB7CisJdmltX2ZyZWUobmV3d2luKTsKKwluZXd3aW4gPSBOVUxMOworICAgIH0KKworICAgIGlmIChuZXd3aW4gIT0gTlVMTCkKKyAgICB7CisJLyoKKwkgKiBsaW5rIHRoZSB3aW5kb3cgaW4gdGhlIHdpbmRvdyBsaXN0CisJICovCisjaWZkZWYgRkVBVF9XSU5ET1dTCisJd2luX2FwcGVuZChhZnRlciwgbmV3d2luKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJbmV3d2luLT53X3dpbmNvbCA9IDA7CisJbmV3d2luLT53X3dpZHRoID0gQ29sdW1uczsKKyNlbmRpZgorCisJLyogcG9zaXRpb24gdGhlIGRpc3BsYXkgYW5kIHRoZSBjdXJzb3IgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4gKi8KKwluZXd3aW4tPndfdG9wbGluZSA9IDE7CisjaWZkZWYgRkVBVF9ESUZGCisJbmV3d2luLT53X3RvcGZpbGwgPSAwOworI2VuZGlmCisJbmV3d2luLT53X2JvdGxpbmUgPSAyOworCW5ld3dpbi0+d19jdXJzb3IubG51bSA9IDE7CisjaWZkZWYgRkVBVF9TQ1JPTExCSU5ECisJbmV3d2luLT53X3NjYmluZF9wb3MgPSAxOworI2VuZGlmCisKKwkvKiBXZSB3b24ndCBjYWxjdWxhdGUgd19mcmFjdGlvbiB1bnRpbCByZXNpemluZyB0aGUgd2luZG93ICovCisJbmV3d2luLT53X2ZyYWN0aW9uID0gMDsKKwluZXd3aW4tPndfcHJldl9mcmFjdGlvbl9yb3cgPSAtMTsKKworI2lmZGVmIEZFQVRfR1VJCisJaWYgKGd1aS5pbl91c2UpCisJeworCSAgICBvdXRfZmx1c2goKTsKKwkgICAgZ3VpX2NyZWF0ZV9zY3JvbGxiYXIoJm5ld3dpbi0+d19zY3JvbGxiYXJzW1NCQVJfTEVGVF0sCisJCSAgICBTQkFSX0xFRlQsIG5ld3dpbik7CisJICAgIGd1aV9jcmVhdGVfc2Nyb2xsYmFyKCZuZXd3aW4tPndfc2Nyb2xsYmFyc1tTQkFSX1JJR0hUXSwKKwkJICAgIFNCQVJfUklHSFQsIG5ld3dpbik7CisJfQorI2VuZGlmCisjaWZkZWYgRkVBVF9FVkFMCisJdmFyX2luaXQoJm5ld3dpbi0+d192YXJzKTsJICAgIC8qIGluaXQgaW50ZXJuYWwgdmFyaWFibGVzICovCisjZW5kaWYKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwlmb2xkSW5pdFdpbihuZXd3aW4pOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiBuZXd3aW47Cit9CisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChQUk9UTykKKworLyoKKyAqIHJlbW92ZSB3aW5kb3cgJ3dwJyBmcm9tIHRoZSB3aW5kb3cgbGlzdCBhbmQgZnJlZSB0aGUgc3RydWN0dXJlCisgKi8KKyAgICBzdGF0aWMgdm9pZAord2luX2ZyZWUod3ApCisgICAgd2luX1QJKndwOworeworICAgIGludAkJaTsKKworI2lmZGVmIEZFQVRfUEVSTAorICAgIHBlcmxfd2luX2ZyZWUod3ApOworI2VuZGlmCisKKyNpZmRlZiBGRUFUX1BZVEhPTgorICAgIHB5dGhvbl93aW5kb3dfZnJlZSh3cCk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfVENMCisgICAgdGNsX3dpbmRvd19mcmVlKHdwKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9SVUJZCisgICAgcnVieV93aW5kb3dfZnJlZSh3cCk7CisjZW5kaWYKKworICAgIGNsZWFyX3dpbm9wdCgmd3AtPndfb25lYnVmX29wdCk7CisgICAgY2xlYXJfd2lub3B0KCZ3cC0+d19hbGxidWZfb3B0KTsKKworI2lmZGVmIEZFQVRfRVZBTAorICAgIHZhcl9jbGVhcigmd3AtPndfdmFycyk7CSAgICAvKiBmcmVlIGFsbCBpbnRlcm5hbCB2YXJpYWJsZXMgKi8KKyNlbmRpZgorCisgICAgaWYgKHByZXZ3aW4gPT0gd3ApCisJcHJldndpbiA9IE5VTEw7CisgICAgd2luX2ZyZWVfbHNpemUod3ApOworCisgICAgZm9yIChpID0gMDsgaSA8IHdwLT53X3RhZ3N0YWNrbGVuOyArK2kpCisJdmltX2ZyZWUod3AtPndfdGFnc3RhY2tbaV0udGFnbmFtZSk7CisKKyAgICB2aW1fZnJlZSh3cC0+d19sb2NhbGRpcik7CisjaWZkZWYgRkVBVF9TRUFSQ0hfRVhUUkEKKyAgICB2aW1fZnJlZSh3cC0+d19tYXRjaC5yZWdwcm9nKTsKKyNlbmRpZgorI2lmZGVmIEZFQVRfSlVNUExJU1QKKyAgICBmcmVlX2p1bXBsaXN0KHdwKTsKKyNlbmRpZgorCisjaWZkZWYgRkVBVF9HVUkKKyAgICBpZiAoZ3VpLmluX3VzZSkKKyAgICB7CisJb3V0X2ZsdXNoKCk7CisJZ3VpX21jaF9kZXN0cm95X3Njcm9sbGJhcigmd3AtPndfc2Nyb2xsYmFyc1tTQkFSX0xFRlRdKTsKKwlndWlfbWNoX2Rlc3Ryb3lfc2Nyb2xsYmFyKCZ3cC0+d19zY3JvbGxiYXJzW1NCQVJfUklHSFRdKTsKKyAgICB9CisjZW5kaWYgLyogRkVBVF9HVUkgKi8KKworICAgIHdpbl9yZW1vdmUod3ApOworICAgIHZpbV9mcmVlKHdwKTsKK30KKworLyoKKyAqIEFwcGVuZCB3aW5kb3cgIndwIiBpbiB0aGUgd2luZG93IGxpc3QgYWZ0ZXIgd2luZG93ICJhZnRlciIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAord2luX2FwcGVuZChhZnRlciwgd3ApCisgICAgd2luX1QJKmFmdGVyLCAqd3A7Cit7CisgICAgd2luX1QJKmJlZm9yZTsKKworICAgIGlmIChhZnRlciA9PSBOVUxMKQkgICAgLyogYWZ0ZXIgTlVMTCBpcyBpbiBmcm9udCBvZiB0aGUgZmlyc3QgKi8KKwliZWZvcmUgPSBmaXJzdHdpbjsKKyAgICBlbHNlCisJYmVmb3JlID0gYWZ0ZXItPndfbmV4dDsKKworICAgIHdwLT53X25leHQgPSBiZWZvcmU7CisgICAgd3AtPndfcHJldiA9IGFmdGVyOworICAgIGlmIChhZnRlciA9PSBOVUxMKQorCWZpcnN0d2luID0gd3A7CisgICAgZWxzZQorCWFmdGVyLT53X25leHQgPSB3cDsKKyAgICBpZiAoYmVmb3JlID09IE5VTEwpCisJbGFzdHdpbiA9IHdwOworICAgIGVsc2UKKwliZWZvcmUtPndfcHJldiA9IHdwOworfQorCisvKgorICogUmVtb3ZlIGEgd2luZG93IGZyb20gdGhlIHdpbmRvdyBsaXN0LgorICovCisgICAgc3RhdGljIHZvaWQKK3dpbl9yZW1vdmUod3ApCisgICAgd2luX1QJKndwOworeworICAgIGlmICh3cC0+d19wcmV2ICE9IE5VTEwpCisJd3AtPndfcHJldi0+d19uZXh0ID0gd3AtPndfbmV4dDsKKyAgICBlbHNlCisJZmlyc3R3aW4gPSB3cC0+d19uZXh0OworICAgIGlmICh3cC0+d19uZXh0ICE9IE5VTEwpCisJd3AtPndfbmV4dC0+d19wcmV2ID0gd3AtPndfcHJldjsKKyAgICBlbHNlCisJbGFzdHdpbiA9IHdwLT53X3ByZXY7Cit9CisKKy8qCisgKiBBcHBlbmQgZnJhbWUgImZycCIgaW4gYSBmcmFtZSBsaXN0IGFmdGVyIGZyYW1lICJhZnRlciIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZnJhbWVfYXBwZW5kKGFmdGVyLCBmcnApCisgICAgZnJhbWVfVAkqYWZ0ZXIsICpmcnA7Cit7CisgICAgZnJwLT5mcl9uZXh0ID0gYWZ0ZXItPmZyX25leHQ7CisgICAgYWZ0ZXItPmZyX25leHQgPSBmcnA7CisgICAgaWYgKGZycC0+ZnJfbmV4dCAhPSBOVUxMKQorCWZycC0+ZnJfbmV4dC0+ZnJfcHJldiA9IGZycDsKKyAgICBmcnAtPmZyX3ByZXYgPSBhZnRlcjsKK30KKworLyoKKyAqIEluc2VydCBmcmFtZSAiZnJwIiBpbiBhIGZyYW1lIGxpc3QgYmVmb3JlIGZyYW1lICJiZWZvcmUiLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZyYW1lX2luc2VydChiZWZvcmUsIGZycCkKKyAgICBmcmFtZV9UCSpiZWZvcmUsICpmcnA7Cit7CisgICAgZnJwLT5mcl9uZXh0ID0gYmVmb3JlOworICAgIGZycC0+ZnJfcHJldiA9IGJlZm9yZS0+ZnJfcHJldjsKKyAgICBiZWZvcmUtPmZyX3ByZXYgPSBmcnA7CisgICAgaWYgKGZycC0+ZnJfcHJldiAhPSBOVUxMKQorCWZycC0+ZnJfcHJldi0+ZnJfbmV4dCA9IGZycDsKKyAgICBlbHNlCisJZnJwLT5mcl9wYXJlbnQtPmZyX2NoaWxkID0gZnJwOworfQorCisvKgorICogUmVtb3ZlIGEgZnJhbWUgZnJvbSBhIGZyYW1lIGxpc3QuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZnJhbWVfcmVtb3ZlKGZycCkKKyAgICBmcmFtZV9UCSpmcnA7Cit7CisgICAgaWYgKGZycC0+ZnJfcHJldiAhPSBOVUxMKQorCWZycC0+ZnJfcHJldi0+ZnJfbmV4dCA9IGZycC0+ZnJfbmV4dDsKKyAgICBlbHNlCisJZnJwLT5mcl9wYXJlbnQtPmZyX2NoaWxkID0gZnJwLT5mcl9uZXh0OworICAgIGlmIChmcnAtPmZyX25leHQgIT0gTlVMTCkKKwlmcnAtPmZyX25leHQtPmZyX3ByZXYgPSBmcnAtPmZyX3ByZXY7Cit9CisKKyNlbmRpZiAvKiBGRUFUX1dJTkRPV1MgKi8KKworLyoKKyAqIEFsbG9jYXRlIHdfbGluZXNbXSBmb3Igd2luZG93ICJ3cCIuCisgKiBSZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgZm9yIHN1Y2Nlc3MuCisgKi8KKyAgICBpbnQKK3dpbl9hbGxvY19saW5lcyh3cCkKKyAgICB3aW5fVAkqd3A7Cit7CisgICAgd3AtPndfbGluZXNfdmFsaWQgPSAwOworICAgIHdwLT53X2xpbmVzID0gKHdsaW5lX1QgKilhbGxvYygodW5zaWduZWQpKFJvd3MgKiBzaXplb2Yod2xpbmVfVCkpKTsKKyAgICBpZiAod3AtPndfbGluZXMgPT0gTlVMTCkKKwlyZXR1cm4gRkFJTDsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBmcmVlIGxzaXplIGFycmF5cyBmb3IgYSB3aW5kb3cKKyAqLworICAgIHZvaWQKK3dpbl9mcmVlX2xzaXplKHdwKQorICAgIHdpbl9UCSp3cDsKK3sKKyAgICB2aW1fZnJlZSh3cC0+d19saW5lcyk7CisgICAgd3AtPndfbGluZXMgPSBOVUxMOworfQorCisvKgorICogQ2FsbGVkIGZyb20gd2luX25ld19zaGVsbHNpemUoKSBhZnRlciBSb3dzIGNoYW5nZWQuCisgKi8KKyAgICB2b2lkCitzaGVsbF9uZXdfcm93cygpCit7CisgICAgaW50CQloID0gKGludCkoUm93cyAtIHBfY2gpOworCisgICAgaWYgKGZpcnN0d2luID09IE5VTEwpCS8qIG5vdCBpbml0aWFsaXplZCB5ZXQgKi8KKwlyZXR1cm47CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgaWYgKGggPCBmcmFtZV9taW5oZWlnaHQodG9wZnJhbWUsIE5VTEwpKQorCWggPSBmcmFtZV9taW5oZWlnaHQodG9wZnJhbWUsIE5VTEwpOworICAgIC8qIEZpcnN0IHRyeSBzZXR0aW5nIHRoZSBoZWlnaHRzIG9mIHdpbmRvd3Mgd2l0aG91dCAnd2luZml4aGVpZ2h0Jy4gIElmCisgICAgICogdGhhdCBkb2Vzbid0IHJlc3VsdCBpbiB0aGUgcmlnaHQgaGVpZ2h0LCBmb3JnZXQgYWJvdXQgdGhhdCBvcHRpb24uICovCisgICAgZnJhbWVfbmV3X2hlaWdodCh0b3BmcmFtZSwgaCwgRkFMU0UsIFRSVUUpOworICAgIGlmICh0b3BmcmFtZS0+ZnJfaGVpZ2h0ICE9IGgpCisJZnJhbWVfbmV3X2hlaWdodCh0b3BmcmFtZSwgaCwgRkFMU0UsIEZBTFNFKTsKKworICAgICh2b2lkKXdpbl9jb21wX3BvcygpOwkJLyogcmVjb21wdXRlIHdfd2lucm93IGFuZCB3X3dpbmNvbCAqLworI2Vsc2UKKyAgICBpZiAoaCA8IDEpCisJaCA9IDE7CisgICAgd2luX25ld19oZWlnaHQoZmlyc3R3aW4sIGgpOworI2VuZGlmCisgICAgY29tcHV0ZV9jbWRyb3coKTsKKyNpZiAwCisgICAgLyogRGlzYWJsZWQ6IGRvbid0IHdhbnQgbWFraW5nIHRoZSBzY3JlZW4gc21hbGxlciBtYWtlIGEgd2luZG93IGxhcmdlci4gKi8KKyAgICBpZiAocF9lYSkKKwl3aW5fZXF1YWwoY3Vyd2luLCBGQUxTRSwgJ3YnKTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChGRUFUX1ZFUlRTUExJVCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBDYWxsZWQgZnJvbSB3aW5fbmV3X3NoZWxsc2l6ZSgpIGFmdGVyIENvbHVtbnMgY2hhbmdlZC4KKyAqLworICAgIHZvaWQKK3NoZWxsX25ld19jb2x1bW5zKCkKK3sKKyAgICBpZiAoZmlyc3R3aW4gPT0gTlVMTCkJLyogbm90IGluaXRpYWxpemVkIHlldCAqLworCXJldHVybjsKKyAgICBmcmFtZV9uZXdfd2lkdGgodG9wZnJhbWUsIChpbnQpQ29sdW1ucywgRkFMU0UpOworICAgICh2b2lkKXdpbl9jb21wX3BvcygpOwkJLyogcmVjb21wdXRlIHdfd2lucm93IGFuZCB3X3dpbmNvbCAqLworI2lmIDAKKyAgICAvKiBEaXNhYmxlZDogZG9uJ3Qgd2FudCBtYWtpbmcgdGhlIHNjcmVlbiBzbWFsbGVyIG1ha2UgYSB3aW5kb3cgbGFyZ2VyLiAqLworICAgIGlmIChwX2VhKQorCXdpbl9lcXVhbChjdXJ3aW4sIEZBTFNFLCAnaCcpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRkVBVF9DTURXSU4pIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogU2F2ZSB0aGUgc2l6ZSBvZiBhbGwgd2luZG93cyBpbiAiZ2FwIi4KKyAqLworICAgIHZvaWQKK3dpbl9zaXplX3NhdmUoZ2FwKQorICAgIGdhcnJheV9UCSpnYXA7CisKK3sKKyAgICB3aW5fVAkqd3A7CisKKyAgICBnYV9pbml0MihnYXAsIChpbnQpc2l6ZW9mKGludCksIDEpOworICAgIGlmIChnYV9ncm93KGdhcCwgd2luX2NvdW50KCkgKiAyKSA9PSBPSykKKwlmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwl7CisJICAgICgoaW50ICopZ2FwLT5nYV9kYXRhKVtnYXAtPmdhX2xlbisrXSA9CisJCQkJCSAgICAgICB3cC0+d193aWR0aCArIHdwLT53X3ZzZXBfd2lkdGg7CisJICAgICgoaW50ICopZ2FwLT5nYV9kYXRhKVtnYXAtPmdhX2xlbisrXSA9IHdwLT53X2hlaWdodDsKKwl9Cit9CisKKy8qCisgKiBSZXN0b3JlIHdpbmRvdyBzaXplcywgYnV0IG9ubHkgaWYgdGhlIG51bWJlciBvZiB3aW5kb3dzIGlzIHN0aWxsIHRoZSBzYW1lLgorICogRG9lcyBub3QgZnJlZSB0aGUgZ3Jvd2FycmF5LgorICovCisgICAgdm9pZAord2luX3NpemVfcmVzdG9yZShnYXApCisgICAgZ2FycmF5X1QJKmdhcDsKK3sKKyAgICB3aW5fVAkqd3A7CisgICAgaW50CQlpOworCisgICAgaWYgKHdpbl9jb3VudCgpICogMiA9PSBnYXAtPmdhX2xlbikKKyAgICB7CisJaSA9IDA7CisJZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSBOVUxMOyB3cCA9IHdwLT53X25leHQpCisJeworCSAgICBmcmFtZV9zZXR3aWR0aCh3cC0+d19mcmFtZSwgKChpbnQgKilnYXAtPmdhX2RhdGEpW2krK10pOworCSAgICB3aW5fc2V0aGVpZ2h0X3dpbigoKGludCAqKWdhcC0+Z2FfZGF0YSlbaSsrXSwgd3ApOworCX0KKwkvKiByZWNvbXB1dGUgdGhlIHdpbmRvdyBwb3NpdGlvbnMgKi8KKwkodm9pZCl3aW5fY29tcF9wb3MoKTsKKyAgICB9Cit9CisjZW5kaWYgLyogRkVBVF9DTURXSU4gKi8KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFVwZGF0ZSB0aGUgcG9zaXRpb24gZm9yIGFsbCB3aW5kb3dzLCB1c2luZyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUKKyAqIGZyYW1lcy4KKyAqIFJldHVybnMgdGhlIHJvdyBqdXN0IGFmdGVyIHRoZSBsYXN0IHdpbmRvdy4KKyAqLworICAgIHN0YXRpYyBpbnQKK3dpbl9jb21wX3BvcygpCit7CisgICAgaW50CQlyb3cgPSAwOworICAgIGludAkJY29sID0gMDsKKworICAgIGZyYW1lX2NvbXBfcG9zKHRvcGZyYW1lLCAmcm93LCAmY29sKTsKKyAgICByZXR1cm4gcm93OworfQorCisvKgorICogVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgd2luZG93cyBpbiBmcmFtZSAidG9wZnJwIiwgdXNpbmcgdGhlIHdpZHRoIGFuZAorICogaGVpZ2h0IG9mIHRoZSBmcmFtZXMuCisgKiAiKnJvdyIgYW5kICIqY29sIiBhcmUgdGhlIHRvcC1sZWZ0IHBvc2l0aW9uIG9mIHRoZSBmcmFtZS4gIFRoZXkgYXJlIHVwZGF0ZWQKKyAqIHRvIHRoZSBib3R0b20tcmlnaHQgcG9zaXRpb24gcGx1cyBvbmUuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZnJhbWVfY29tcF9wb3ModG9wZnJwLCByb3csIGNvbCkKKyAgICBmcmFtZV9UCSp0b3BmcnA7CisgICAgaW50CQkqcm93OworICAgIGludAkJKmNvbDsKK3sKKyAgICB3aW5fVAkqd3A7CisgICAgZnJhbWVfVAkqZnJwOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgaW50CQlzdGFydGNvbDsKKyAgICBpbnQJCXN0YXJ0cm93OworI2VuZGlmCisKKyAgICB3cCA9IHRvcGZycC0+ZnJfd2luOworICAgIGlmICh3cCAhPSBOVUxMKQorICAgIHsKKwlpZiAod3AtPndfd2lucm93ICE9ICpyb3cKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCQl8fCB3cC0+d193aW5jb2wgIT0gKmNvbAorI2VuZGlmCisJCSkKKwl7CisJICAgIC8qIHBvc2l0aW9uIGNoYW5nZWQsIHJlZHJhdyAqLworCSAgICB3cC0+d193aW5yb3cgPSAqcm93OworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJICAgIHdwLT53X3dpbmNvbCA9ICpjb2w7CisjZW5kaWYKKwkgICAgcmVkcmF3X3dpbl9sYXRlcih3cCwgTk9UX1ZBTElEKTsKKwkgICAgd3AtPndfcmVkcl9zdGF0dXMgPSBUUlVFOworCX0KKwkqcm93ICs9IHdwLT53X2hlaWdodCArIHdwLT53X3N0YXR1c19oZWlnaHQ7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkqY29sICs9IHdwLT53X3dpZHRoICsgd3AtPndfdnNlcF93aWR0aDsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJc3RhcnRyb3cgPSAqcm93OworCXN0YXJ0Y29sID0gKmNvbDsKKyNlbmRpZgorCWZvciAoZnJwID0gdG9wZnJwLT5mcl9jaGlsZDsgZnJwICE9IE5VTEw7IGZycCA9IGZycC0+ZnJfbmV4dCkKKwl7CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkgICAgaWYgKHRvcGZycC0+ZnJfbGF5b3V0ID09IEZSX1JPVykKKwkJKnJvdyA9IHN0YXJ0cm93OwkvKiBhbGwgZnJhbWVzIGFyZSBhdCB0aGUgc2FtZSByb3cgKi8KKwkgICAgZWxzZQorCQkqY29sID0gc3RhcnRjb2w7CS8qIGFsbCBmcmFtZXMgYXJlIGF0IHRoZSBzYW1lIGNvbCAqLworI2VuZGlmCisJICAgIGZyYW1lX2NvbXBfcG9zKGZycCwgcm93LCBjb2wpOworCX0KKyAgICB9Cit9CisKKyNlbmRpZiAvKiBGRUFUX1dJTkRPV1MgKi8KKworLyoKKyAqIFNldCBjdXJyZW50IHdpbmRvdyBoZWlnaHQgYW5kIHRha2UgY2FyZSBvZiByZXBvc2l0aW9uaW5nIG90aGVyIHdpbmRvd3MgdG8KKyAqIGZpdCBhcm91bmQgaXQuCisgKi8KKyAgICB2b2lkCit3aW5fc2V0aGVpZ2h0KGhlaWdodCkKKyAgICBpbnQJCWhlaWdodDsKK3sKKyAgICB3aW5fc2V0aGVpZ2h0X3dpbihoZWlnaHQsIGN1cndpbik7Cit9CisKKy8qCisgKiBTZXQgdGhlIHdpbmRvdyBoZWlnaHQgb2Ygd2luZG93ICJ3aW4iIGFuZCB0YWtlIGNhcmUgb2YgcmVwb3NpdGlvbmluZyBvdGhlcgorICogd2luZG93cyB0byBmaXQgYXJvdW5kIGl0LgorICovCisgICAgdm9pZAord2luX3NldGhlaWdodF93aW4oaGVpZ2h0LCB3aW4pCisgICAgaW50CQloZWlnaHQ7CisgICAgd2luX1QJKndpbjsKK3sKKyAgICBpbnQJCXJvdzsKKworICAgIGlmICh3aW4gPT0gY3Vyd2luKQorICAgIHsKKwkvKiBBbHdheXMga2VlcCBjdXJyZW50IHdpbmRvdyBhdCBsZWFzdCBvbmUgbGluZSBoaWdoLCBldmVuIHdoZW4KKwkgKiAnd2lubWluaGVpZ2h0JyBpcyB6ZXJvLiAqLworI2lmZGVmIEZFQVRfV0lORE9XUworCWlmIChoZWlnaHQgPCBwX3dtaCkKKwkgICAgaGVpZ2h0ID0gcF93bWg7CisjZW5kaWYKKwlpZiAoaGVpZ2h0ID09IDApCisJICAgIGhlaWdodCA9IDE7CisgICAgfQorCisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgZnJhbWVfc2V0aGVpZ2h0KHdpbi0+d19mcmFtZSwgaGVpZ2h0ICsgd2luLT53X3N0YXR1c19oZWlnaHQpOworCisgICAgLyogcmVjb21wdXRlIHRoZSB3aW5kb3cgcG9zaXRpb25zICovCisgICAgcm93ID0gd2luX2NvbXBfcG9zKCk7CisjZWxzZQorICAgIGlmIChoZWlnaHQgPiB0b3BmcmFtZS0+ZnJfaGVpZ2h0KQorCWhlaWdodCA9IHRvcGZyYW1lLT5mcl9oZWlnaHQ7CisgICAgd2luLT53X2hlaWdodCA9IGhlaWdodDsKKyAgICByb3cgPSBoZWlnaHQ7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSWYgdGhlcmUgaXMgZXh0cmEgc3BhY2UgY3JlYXRlZCBiZXR3ZWVuIHRoZSBsYXN0IHdpbmRvdyBhbmQgdGhlIGNvbW1hbmQKKyAgICAgKiBsaW5lLCBjbGVhciBpdC4KKyAgICAgKi8KKyAgICBpZiAoZnVsbF9zY3JlZW4gJiYgbXNnX3Njcm9sbGVkID09IDAgJiYgcm93IDwgY21kbGluZV9yb3cpCisJc2NyZWVuX2ZpbGwocm93LCBjbWRsaW5lX3JvdywgMCwgKGludClDb2x1bW5zLCAnICcsICcgJywgMCk7CisgICAgY21kbGluZV9yb3cgPSByb3c7CisgICAgbXNnX3JvdyA9IHJvdzsKKyAgICBtc2dfY29sID0gMDsKKworICAgIHJlZHJhd19hbGxfbGF0ZXIoTk9UX1ZBTElEKTsKK30KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorCisvKgorICogU2V0IHRoZSBoZWlnaHQgb2YgYSBmcmFtZSB0byAiaGVpZ2h0IiBhbmQgdGFrZSBjYXJlIHRoYXQgYWxsIGZyYW1lcyBhbmQKKyAqIHdpbmRvd3MgaW5zaWRlIGl0IGFyZSByZXNpemVkLiAgQWxzbyByZXNpemUgZnJhbWVzIG9uIHRoZSBsZWZ0IGFuZCByaWdodCBpZgorICogdGhlIGFyZSBpbiB0aGUgc2FtZSBGUl9ST1cgZnJhbWUuCisgKgorICogU3RyYXRlZ3k6CisgKiBJZiB0aGUgZnJhbWUgaXMgcGFydCBvZiBhIEZSX0NPTCBmcmFtZSwgdHJ5IGZpdHRpbmcgdGhlIGZyYW1lIGluIHRoYXQKKyAqIGZyYW1lLiAgSWYgdGhhdCBkb2Vzbid0IHdvcmsgKHRoZSBGUl9DT0wgZnJhbWUgaXMgdG9vIHNtYWxsKSwgcmVjdXJzaXZlbHkKKyAqIGdvIHRvIGNvbnRhaW5pbmcgZnJhbWVzIHRvIHJlc2l6ZSB0aGVtIGFuZCBtYWtlIHJvb20uCisgKiBJZiB0aGUgZnJhbWUgaXMgcGFydCBvZiBhIEZSX1JPVyBmcmFtZSwgYWxsIGZyYW1lcyBtdXN0IGJlIHJlc2l6ZWQgYXMgd2VsbC4KKyAqIENoZWNrIGZvciB0aGUgbWluaW1hbCBoZWlnaHQgb2YgdGhlIEZSX1JPVyBmcmFtZS4KKyAqIEF0IHRoZSB0b3AgbGV2ZWwgd2UgY2FuIGFsc28gdXNlIGNoYW5nZSB0aGUgY29tbWFuZCBsaW5lIGhlaWdodC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitmcmFtZV9zZXRoZWlnaHQoY3VyZnJwLCBoZWlnaHQpCisgICAgZnJhbWVfVAkqY3VyZnJwOworICAgIGludAkJaGVpZ2h0OworeworICAgIGludAkJcm9vbTsJCS8qIHRvdGFsIG51bWJlciBvZiBsaW5lcyBhdmFpbGFibGUgKi8KKyAgICBpbnQJCXRha2U7CQkvKiBudW1iZXIgb2YgbGluZXMgdGFrZW4gZnJvbSBvdGhlciB3aW5kb3dzICovCisgICAgaW50CQlyb29tX2NtZGxpbmU7CS8qIGxpbmVzIGF2YWlsYWJsZSBmcm9tIGNtZGxpbmUgKi8KKyAgICBpbnQJCXJ1bjsKKyAgICBmcmFtZV9UCSpmcnA7CisgICAgaW50CQloOworICAgIGludAkJcm9vbV9yZXNlcnZlZDsKKworICAgIC8qIElmIHRoZSBoZWlnaHQgYWxyZWFkeSBpcyB0aGUgZGVzaXJlZCB2YWx1ZSwgbm90aGluZyB0byBkby4gKi8KKyAgICBpZiAoY3VyZnJwLT5mcl9oZWlnaHQgPT0gaGVpZ2h0KQorCXJldHVybjsKKworICAgIGlmIChjdXJmcnAtPmZyX3BhcmVudCA9PSBOVUxMKQorICAgIHsKKwkvKiB0b3BmcmFtZTogY2FuIG9ubHkgY2hhbmdlIHRoZSBjb21tYW5kIGxpbmUgKi8KKwlpZiAoaGVpZ2h0ID4gUm93cyAtIHBfY2gpCisJICAgIGhlaWdodCA9IFJvd3MgLSBwX2NoOworCWlmIChoZWlnaHQgPiAwKQorCSAgICBmcmFtZV9uZXdfaGVpZ2h0KGN1cmZycCwgaGVpZ2h0LCBGQUxTRSwgRkFMU0UpOworICAgIH0KKyAgICBlbHNlIGlmIChjdXJmcnAtPmZyX3BhcmVudC0+ZnJfbGF5b3V0ID09IEZSX1JPVykKKyAgICB7CisJLyogUm93IG9mIGZyYW1lczogQWxzbyBuZWVkIHRvIHJlc2l6ZSBmcmFtZXMgbGVmdCBhbmQgcmlnaHQgb2YgdGhpcworCSAqIG9uZS4gIEZpcnN0IGNoZWNrIGZvciB0aGUgbWluaW1hbCBoZWlnaHQgb2YgdGhlc2UuICovCisJaCA9IGZyYW1lX21pbmhlaWdodChjdXJmcnAtPmZyX3BhcmVudCwgTlVMTCk7CisJaWYgKGhlaWdodCA8IGgpCisJICAgIGhlaWdodCA9IGg7CisJZnJhbWVfc2V0aGVpZ2h0KGN1cmZycC0+ZnJfcGFyZW50LCBoZWlnaHQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCS8qCisJICogQ29sdW1uIG9mIGZyYW1lczogdHJ5IHRvIGNoYW5nZSBvbmx5IGZyYW1lcyBpbiB0aGlzIGNvbHVtbi4KKwkgKi8KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCS8qCisJICogRG8gdGhpcyB0d2ljZToKKwkgKiAxOiBjb21wdXRlIHJvb20gYXZhaWxhYmxlLCBpZiBpdCdzIG5vdCBlbm91Z2ggdHJ5IHJlc2l6aW5nIHRoZQorCSAqICAgIGNvbnRhaW5pbmcgZnJhbWUuCisJICogMjogY29tcHV0ZSB0aGUgcm9vbSBhdmFpbGFibGUgYW5kIGFkanVzdCB0aGUgaGVpZ2h0IHRvIGl0LgorCSAqIFRyeSBub3QgdG8gcmVkdWNlIHRoZSBoZWlnaHQgb2YgYSB3aW5kb3cgd2l0aCAnd2luZml4aGVpZ2h0JyBzZXQuCisJICovCisJZm9yIChydW4gPSAxOyBydW4gPD0gMjsgKytydW4pCisjZWxzZQorCWZvciAoOzspCisjZW5kaWYKKwl7CisJICAgIHJvb20gPSAwOworCSAgICByb29tX3Jlc2VydmVkID0gMDsKKwkgICAgZm9yIChmcnAgPSBjdXJmcnAtPmZyX3BhcmVudC0+ZnJfY2hpbGQ7IGZycCAhPSBOVUxMOworCQkJCQkJCSAgIGZycCA9IGZycC0+ZnJfbmV4dCkKKwkgICAgeworCQlpZiAoZnJwICE9IGN1cmZycAorCQkJJiYgZnJwLT5mcl93aW4gIT0gTlVMTAorCQkJJiYgZnJwLT5mcl93aW4tPndfcF93ZmgpCisJCSAgICByb29tX3Jlc2VydmVkICs9IGZycC0+ZnJfaGVpZ2h0OworCQlyb29tICs9IGZycC0+ZnJfaGVpZ2h0OworCQlpZiAoZnJwICE9IGN1cmZycCkKKwkJICAgIHJvb20gLT0gZnJhbWVfbWluaGVpZ2h0KGZycCwgTlVMTCk7CisJICAgIH0KKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorCSAgICBpZiAoY3VyZnJwLT5mcl93aWR0aCAhPSBDb2x1bW5zKQorCQlyb29tX2NtZGxpbmUgPSAwOworCSAgICBlbHNlCisjZW5kaWYKKwkgICAgeworCQlyb29tX2NtZGxpbmUgPSBSb3dzIC0gcF9jaCAtIChsYXN0d2luLT53X3dpbnJvdworCQkJICAgICAgICsgbGFzdHdpbi0+d19oZWlnaHQgKyBsYXN0d2luLT53X3N0YXR1c19oZWlnaHQpOworCQlpZiAocm9vbV9jbWRsaW5lIDwgMCkKKwkJICAgIHJvb21fY21kbGluZSA9IDA7CisJICAgIH0KKworCSAgICBpZiAoaGVpZ2h0IDw9IHJvb20gKyByb29tX2NtZGxpbmUpCisJCWJyZWFrOworI2lmZGVmIEZFQVRfVkVSVFNQTElUCisJICAgIGlmIChydW4gPT0gMiB8fCBjdXJmcnAtPmZyX3dpZHRoID09IENvbHVtbnMpCisjZW5kaWYKKwkgICAgeworCQlpZiAoaGVpZ2h0ID4gcm9vbSArIHJvb21fY21kbGluZSkKKwkJICAgIGhlaWdodCA9IHJvb20gKyByb29tX2NtZGxpbmU7CisJCWJyZWFrOworCSAgICB9CisjaWZkZWYgRkVBVF9WRVJUU1BMSVQKKwkgICAgZnJhbWVfc2V0aGVpZ2h0KGN1cmZycC0+ZnJfcGFyZW50LCBoZWlnaHQKKwkJKyBmcmFtZV9taW5oZWlnaHQoY3VyZnJwLT5mcl9wYXJlbnQsIE5PV0lOKSAtIChpbnQpcF93bWggLSAxKTsKKyNlbmRpZgorCSAgICAvKk5PVFJFQUNIRUQqLworCX0KKworCS8qCisJICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGxpbmVzIHdlIHdpbGwgdGFrZSBmcm9tIG90aGVycyBmcmFtZXMgKGNhbiBiZQorCSAqIG5lZ2F0aXZlISkuCisJICovCisJdGFrZSA9IGhlaWdodCAtIGN1cmZycC0+ZnJfaGVpZ2h0OworCisJLyogSWYgdGhlcmUgaXMgbm90IGVub3VnaCByb29tLCBhbHNvIHJlZHVjZSB0aGUgaGVpZ2h0IG9mIGEgd2luZG93CisJICogd2l0aCAnd2luZml4aGVpZ2h0JyBzZXQuICovCisJaWYgKGhlaWdodCA+IHJvb20gKyByb29tX2NtZGxpbmUgLSByb29tX3Jlc2VydmVkKQorCSAgICByb29tX3Jlc2VydmVkID0gcm9vbSArIHJvb21fY21kbGluZSAtIGhlaWdodDsKKwkvKiBJZiB0aGVyZSBpcyBvbmx5IGEgJ3dpbmZpeGhlaWdodCcgd2luZG93IGFuZCBtYWtpbmcgdGhlCisJICogd2luZG93IHNtYWxsZXIsIG5lZWQgdG8gbWFrZSB0aGUgb3RoZXIgd2luZG93IHRhbGxlci4gKi8KKwlpZiAodGFrZSA8IDAgJiYgcm9vbSAtIGN1cmZycC0+ZnJfaGVpZ2h0IDwgcm9vbV9yZXNlcnZlZCkKKwkgICAgcm9vbV9yZXNlcnZlZCA9IDA7CisKKwlpZiAodGFrZSA+IDAgJiYgcm9vbV9jbWRsaW5lID4gMCkKKwl7CisJICAgIC8qIHVzZSBsaW5lcyBmcm9tIGNtZGxpbmUgZmlyc3QgKi8KKwkgICAgaWYgKHRha2UgPCByb29tX2NtZGxpbmUpCisJCXJvb21fY21kbGluZSA9IHRha2U7CisJICAgIHRha2UgLT0gcm9vbV9jbWRsaW5lOworCSAgICB0b3BmcmFtZS0+ZnJfaGVpZ2h0ICs9IHJvb21fY21kbGluZTsKKwl9CisKKwkvKgorCSAqIHNldCB0aGUgY3VycmVudCBmcmFtZSB0byB0aGUgbmV3IGhlaWdodAorCSAqLworCWZyYW1lX25ld19oZWlnaHQoY3VyZnJwLCBoZWlnaHQsIEZBTFNFLCBGQUxTRSk7CisKKwkvKgorCSAqIEZpcnN0IHRha2UgbGluZXMgZnJvbSB0aGUgZnJhbWVzIGFmdGVyIHRoZSBjdXJyZW50IGZyYW1lLiAgSWYKKwkgKiB0aGF0IGlzIG5vdCBlbm91Z2gsIHRha2VzIGxpbmVzIGZyb20gZnJhbWVzIGFib3ZlIHRoZSBjdXJyZW50CisJICogZnJhbWUuCisJICovCisJZm9yIChydW4gPSAwOyBydW4gPCAyOyArK3J1bikKKwl7CisJICAgIGlmIChydW4gPT0gMCkKKwkJZnJwID0gY3VyZnJwLT5mcl9uZXh0OwkvKiAxc3QgcnVuOiBzdGFydCB3aXRoIG5leHQgd2luZG93ICovCisJICAgIGVsc2UKKwkJZnJwID0gY3VyZnJwLT5mcl9wcmV2OwkvKiAybmQgcnVuOiBzdGFydCB3aXRoIHByZXYgd2luZG93ICovCisJICAgIHdoaWxlIChmcnAgIT0gTlVMTCAmJiB0YWtlICE9IDApCisJICAgIHsKKwkJaCA9IGZyYW1lX21pbmhlaWdodChmcnAsIE5VTEwpOworCQlpZiAocm9vbV9yZXNlcnZlZCA+IDAKKwkJCSYmIGZycC0+ZnJfd2luICE9IE5VTEwKKwkJCSYmIGZycC0+ZnJfd2luLT53X3Bfd2ZoKQorCQl7CisJCSAgICBpZiAocm9vbV9yZXNlcnZlZCA+PSBmcnAtPmZyX2hlaWdodCkKKwkJCXJvb21fcmVzZXJ2ZWQgLT0gZnJwLT5mcl9oZWlnaHQ7CisJCSAgICBlbHNlCisJCSAgICB7CisJCQlpZiAoZnJwLT5mcl9oZWlnaHQgLSByb29tX3Jlc2VydmVkID4gdGFrZSkKKwkJCSAgICByb29tX3Jlc2VydmVkID0gZnJwLT5mcl9oZWlnaHQgLSB0YWtlOworCQkJdGFrZSAtPSBmcnAtPmZyX2hlaWdodCAtIHJvb21fcmVzZXJ2ZWQ7CisJCQlmcmFtZV9uZXdfaGVpZ2h0KGZycCwgcm9vbV9yZXNlcnZlZCwgRkFMU0UsIEZBTFNFKTsKKwkJCXJvb21fcmVzZXJ2ZWQgPSAwOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJeworCQkgICAgaWYgKGZycC0+ZnJfaGVpZ2h0IC0gdGFrZSA8IGgpCisJCSAgICB7CisJCQl0YWtlIC09IGZycC0+ZnJfaGVpZ2h0IC0gaDsKKwkJCWZyYW1lX25ld19oZWlnaHQoZnJwLCBoLCBGQUxTRSwgRkFMU0UpOworCQkgICAgfQorCQkgICAgZWxzZQorCQkgICAgeworCQkJZnJhbWVfbmV3X2hlaWdodChmcnAsIGZycC0+ZnJfaGVpZ2h0IC0gdGFrZSwKKwkJCQkJCQkJRkFMU0UsIEZBTFNFKTsKKwkJCXRha2UgPSAwOworCQkgICAgfQorCQl9CisJCWlmIChydW4gPT0gMCkKKwkJICAgIGZycCA9IGZycC0+ZnJfbmV4dDsKKwkJZWxzZQorCQkgICAgZnJwID0gZnJwLT5mcl9wcmV2OworCSAgICB9CisJfQorICAgIH0KK30KKworI2lmIGRlZmluZWQoRkVBVF9WRVJUU1BMSVQpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogU2V0IGN1cnJlbnQgd2luZG93IHdpZHRoIGFuZCB0YWtlIGNhcmUgb2YgcmVwb3NpdGlvbmluZyBvdGhlciB3aW5kb3dzIHRvCisgKiBmaXQgYXJvdW5kIGl0LgorICovCisgICAgdm9pZAord2luX3NldHdpZHRoKHdpZHRoKQorICAgIGludAkJd2lkdGg7Cit7CisgICAgd2luX3NldHdpZHRoX3dpbih3aWR0aCwgY3Vyd2luKTsKK30KKworICAgIHZvaWQKK3dpbl9zZXR3aWR0aF93aW4od2lkdGgsIHdwKQorICAgIGludAkJd2lkdGg7CisgICAgd2luX1QJKndwOworeworICAgIC8qIEFsd2F5cyBrZWVwIGN1cnJlbnQgd2luZG93IGF0IGxlYXN0IG9uZSBjb2x1bW4gd2lkZSwgZXZlbiB3aGVuCisgICAgICogJ3dpbm1pbndpZHRoJyBpcyB6ZXJvLiAqLworICAgIGlmICh3cCA9PSBjdXJ3aW4pCisgICAgeworCWlmICh3aWR0aCA8IHBfd213KQorCSAgICB3aWR0aCA9IHBfd213OworCWlmICh3aWR0aCA9PSAwKQorCSAgICB3aWR0aCA9IDE7CisgICAgfQorCisgICAgZnJhbWVfc2V0d2lkdGgod3AtPndfZnJhbWUsIHdpZHRoICsgd3AtPndfdnNlcF93aWR0aCk7CisKKyAgICAvKiByZWNvbXB1dGUgdGhlIHdpbmRvdyBwb3NpdGlvbnMgKi8KKyAgICAodm9pZCl3aW5fY29tcF9wb3MoKTsKKworICAgIHJlZHJhd19hbGxfbGF0ZXIoTk9UX1ZBTElEKTsKK30KKworLyoKKyAqIFNldCB0aGUgd2lkdGggb2YgYSBmcmFtZSB0byAid2lkdGgiIGFuZCB0YWtlIGNhcmUgdGhhdCBhbGwgZnJhbWVzIGFuZAorICogd2luZG93cyBpbnNpZGUgaXQgYXJlIHJlc2l6ZWQuICBBbHNvIHJlc2l6ZSBmcmFtZXMgYWJvdmUgYW5kIGJlbG93IGlmIHRoZQorICogYXJlIGluIHRoZSBzYW1lIEZSX1JPVyBmcmFtZS4KKyAqCisgKiBTdHJhdGVneSBpcyBzaW1pbGFyIHRvIGZyYW1lX3NldGhlaWdodCgpLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZyYW1lX3NldHdpZHRoKGN1cmZycCwgd2lkdGgpCisgICAgZnJhbWVfVAkqY3VyZnJwOworICAgIGludAkJd2lkdGg7Cit7CisgICAgaW50CQlyb29tOwkJLyogdG90YWwgbnVtYmVyIG9mIGxpbmVzIGF2YWlsYWJsZSAqLworICAgIGludAkJdGFrZTsJCS8qIG51bWJlciBvZiBsaW5lcyB0YWtlbiBmcm9tIG90aGVyIHdpbmRvd3MgKi8KKyAgICBpbnQJCXJ1bjsKKyAgICBmcmFtZV9UCSpmcnA7CisgICAgaW50CQl3OworCisgICAgLyogSWYgdGhlIHdpZHRoIGFscmVhZHkgaXMgdGhlIGRlc2lyZWQgdmFsdWUsIG5vdGhpbmcgdG8gZG8uICovCisgICAgaWYgKGN1cmZycC0+ZnJfd2lkdGggPT0gd2lkdGgpCisJcmV0dXJuOworCisgICAgaWYgKGN1cmZycC0+ZnJfcGFyZW50ID09IE5VTEwpCisJLyogdG9wZnJhbWU6IGNhbid0IGNoYW5nZSB3aWR0aCAqLworCXJldHVybjsKKworICAgIGlmIChjdXJmcnAtPmZyX3BhcmVudC0+ZnJfbGF5b3V0ID09IEZSX0NPTCkKKyAgICB7CisJLyogQ29sdW1uIG9mIGZyYW1lczogQWxzbyBuZWVkIHRvIHJlc2l6ZSBmcmFtZXMgYWJvdmUgYW5kIGJlbG93IG9mCisJICogdGhpcyBvbmUuICBGaXJzdCBjaGVjayBmb3IgdGhlIG1pbmltYWwgd2lkdGggb2YgdGhlc2UuICovCisJdyA9IGZyYW1lX21pbndpZHRoKGN1cmZycC0+ZnJfcGFyZW50LCBOVUxMKTsKKwlpZiAod2lkdGggPCB3KQorCSAgICB3aWR0aCA9IHc7CisJZnJhbWVfc2V0d2lkdGgoY3VyZnJwLT5mcl9wYXJlbnQsIHdpZHRoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIFJvdyBvZiBmcmFtZXM6IHRyeSB0byBjaGFuZ2Ugb25seSBmcmFtZXMgaW4gdGhpcyByb3cuCisJICoKKwkgKiBEbyB0aGlzIHR3aWNlOgorCSAqIDE6IGNvbXB1dGUgcm9vbSBhdmFpbGFibGUsIGlmIGl0J3Mgbm90IGVub3VnaCB0cnkgcmVzaXppbmcgdGhlCisJICogICAgY29udGFpbmluZyBmcmFtZS4KKwkgKiAyOiBjb21wdXRlIHRoZSByb29tIGF2YWlsYWJsZSBhbmQgYWRqdXN0IHRoZSB3aWR0aCB0byBpdC4KKwkgKi8KKwlmb3IgKHJ1biA9IDE7IHJ1biA8PSAyOyArK3J1bikKKwl7CisJICAgIHJvb20gPSAwOworCSAgICBmb3IgKGZycCA9IGN1cmZycC0+ZnJfcGFyZW50LT5mcl9jaGlsZDsgZnJwICE9IE5VTEw7CisJCQkJCQkJICAgZnJwID0gZnJwLT5mcl9uZXh0KQorCSAgICB7CisJCXJvb20gKz0gZnJwLT5mcl93aWR0aDsKKwkJaWYgKGZycCAhPSBjdXJmcnApCisJCSAgICByb29tIC09IGZyYW1lX21pbndpZHRoKGZycCwgTlVMTCk7CisJICAgIH0KKworCSAgICBpZiAod2lkdGggPD0gcm9vbSkKKwkJYnJlYWs7CisJICAgIGlmIChydW4gPT0gMiB8fCBjdXJmcnAtPmZyX2hlaWdodCA+PSBSb3dzIC0gcF9jaCkKKwkgICAgeworCQlpZiAod2lkdGggPiByb29tKQorCQkgICAgd2lkdGggPSByb29tOworCQlicmVhazsKKwkgICAgfQorCSAgICBmcmFtZV9zZXR3aWR0aChjdXJmcnAtPmZyX3BhcmVudCwgd2lkdGgKKwkJICsgZnJhbWVfbWlud2lkdGgoY3VyZnJwLT5mcl9wYXJlbnQsIE5PV0lOKSAtIChpbnQpcF93bXcgLSAxKTsKKwl9CisKKworCS8qCisJICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGxpbmVzIHdlIHdpbGwgdGFrZSBmcm9tIG90aGVycyBmcmFtZXMgKGNhbiBiZQorCSAqIG5lZ2F0aXZlISkuCisJICovCisJdGFrZSA9IHdpZHRoIC0gY3VyZnJwLT5mcl93aWR0aDsKKworCS8qCisJICogc2V0IHRoZSBjdXJyZW50IGZyYW1lIHRvIHRoZSBuZXcgd2lkdGgKKwkgKi8KKwlmcmFtZV9uZXdfd2lkdGgoY3VyZnJwLCB3aWR0aCwgRkFMU0UpOworCisJLyoKKwkgKiBGaXJzdCB0YWtlIGxpbmVzIGZyb20gdGhlIGZyYW1lcyByaWdodCBvZiB0aGUgY3VycmVudCBmcmFtZS4gIElmCisJICogdGhhdCBpcyBub3QgZW5vdWdoLCB0YWtlcyBsaW5lcyBmcm9tIGZyYW1lcyBsZWZ0IG9mIHRoZSBjdXJyZW50CisJICogZnJhbWUuCisJICovCisJZm9yIChydW4gPSAwOyBydW4gPCAyOyArK3J1bikKKwl7CisJICAgIGlmIChydW4gPT0gMCkKKwkJZnJwID0gY3VyZnJwLT5mcl9uZXh0OwkvKiAxc3QgcnVuOiBzdGFydCB3aXRoIG5leHQgd2luZG93ICovCisJICAgIGVsc2UKKwkJZnJwID0gY3VyZnJwLT5mcl9wcmV2OwkvKiAybmQgcnVuOiBzdGFydCB3aXRoIHByZXYgd2luZG93ICovCisJICAgIHdoaWxlIChmcnAgIT0gTlVMTCAmJiB0YWtlICE9IDApCisJICAgIHsKKwkJdyA9IGZyYW1lX21pbndpZHRoKGZycCwgTlVMTCk7CisJCWlmIChmcnAtPmZyX3dpZHRoIC0gdGFrZSA8IHcpCisJCXsKKwkJICAgIHRha2UgLT0gZnJwLT5mcl93aWR0aCAtIHc7CisJCSAgICBmcmFtZV9uZXdfd2lkdGgoZnJwLCB3LCBGQUxTRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBmcmFtZV9uZXdfd2lkdGgoZnJwLCBmcnAtPmZyX3dpZHRoIC0gdGFrZSwgRkFMU0UpOworCQkgICAgdGFrZSA9IDA7CisJCX0KKwkJaWYgKHJ1biA9PSAwKQorCQkgICAgZnJwID0gZnJwLT5mcl9uZXh0OworCQllbHNlCisJCSAgICBmcnAgPSBmcnAtPmZyX3ByZXY7CisJICAgIH0KKwl9CisgICAgfQorfQorI2VuZGlmIC8qIEZFQVRfVkVSVFNQTElUICovCisKKy8qCisgKiBDaGVjayAnd2lubWluaGVpZ2h0JyBmb3IgYSB2YWxpZCB2YWx1ZS4KKyAqLworICAgIHZvaWQKK3dpbl9zZXRtaW5oZWlnaHQoKQoreworICAgIGludAkJcm9vbTsKKyAgICBpbnQJCWZpcnN0ID0gVFJVRTsKKyAgICB3aW5fVAkqd3A7CisKKyAgICAvKiBsb29wIHVudGlsIHRoZXJlIGlzIGEgJ3dpbm1pbmhlaWdodCcgdGhhdCBpcyBwb3NzaWJsZSAqLworICAgIHdoaWxlIChwX3dtaCA+IDApCisgICAgeworCS8qIFRPRE86IGhhbmRsZSB2ZXJ0aWNhbCBzcGxpdHMgKi8KKwlyb29tID0gLXBfd2g7CisJZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSBOVUxMOyB3cCA9IHdwLT53X25leHQpCisJICAgIHJvb20gKz0gd3AtPndfaGVpZ2h0IC0gcF93bWg7CisJaWYgKHJvb20gPj0gMCkKKwkgICAgYnJlYWs7CisJLS1wX3dtaDsKKwlpZiAoZmlyc3QpCisJeworCSAgICBFTVNHKF8oZV9ub3Jvb20pKTsKKwkgICAgZmlyc3QgPSBGQUxTRTsKKwl9CisgICAgfQorfQorCisjaWZkZWYgRkVBVF9NT1VTRQorCisvKgorICogU3RhdHVzIGxpbmUgb2YgZHJhZ3dpbiBpcyBkcmFnZ2VkICJvZmZzZXQiIGxpbmVzIGRvd24gKG5lZ2F0aXZlIGlzIHVwKS4KKyAqLworICAgIHZvaWQKK3dpbl9kcmFnX3N0YXR1c19saW5lKGRyYWd3aW4sIG9mZnNldCkKKyAgICB3aW5fVAkqZHJhZ3dpbjsKKyAgICBpbnQJCW9mZnNldDsKK3sKKyAgICBmcmFtZV9UCSpjdXJmcjsKKyAgICBmcmFtZV9UCSpmcjsKKyAgICBpbnQJCXJvb207CisgICAgaW50CQlyb3c7CisgICAgaW50CQl1cDsJLyogaWYgVFJVRSwgZHJhZyBzdGF0dXMgbGluZSB1cCwgb3RoZXJ3aXNlIGRvd24gKi8KKyAgICBpbnQJCW47CisKKyAgICBmciA9IGRyYWd3aW4tPndfZnJhbWU7CisgICAgY3VyZnIgPSBmcjsKKyAgICBpZiAoZnIgIT0gdG9wZnJhbWUpCQkvKiBtb3JlIHRoYW4gb25lIHdpbmRvdyAqLworICAgIHsKKwlmciA9IGZyLT5mcl9wYXJlbnQ7CisJLyogV2hlbiB0aGUgcGFyZW50IGZyYW1lIGlzIG5vdCBhIGNvbHVtbiBvZiBmcmFtZXMsIGl0cyBwYXJlbnQgc2hvdWxkCisJICogYmUuICovCisJaWYgKGZyLT5mcl9sYXlvdXQgIT0gRlJfQ09MKQorCXsKKwkgICAgY3VyZnIgPSBmcjsKKwkgICAgaWYgKGZyICE9IHRvcGZyYW1lKQkvKiBvbmx5IGEgcm93IG9mIHdpbmRvd3MsIG1heSBkcmFnIHN0YXR1c2xpbmUgKi8KKwkJZnIgPSBmci0+ZnJfcGFyZW50OworCX0KKyAgICB9CisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGZyYW1lIGluIGEgY29sdW1uLCBtYXkgd2FudCB0byByZXNpemUgdGhlIHBhcmVudAorICAgICAqIGZyYW1lIGluc3RlYWQgKGdvIHR3byB1cCB0byBza2lwIGEgcm93IG9mIGZyYW1lcykuICovCisgICAgd2hpbGUgKGN1cmZyICE9IHRvcGZyYW1lICYmIGN1cmZyLT5mcl9uZXh0ID09IE5VTEwpCisgICAgeworCWlmIChmciAhPSB0b3BmcmFtZSkKKwkgICAgZnIgPSBmci0+ZnJfcGFyZW50OworCWN1cmZyID0gZnI7CisJaWYgKGZyICE9IHRvcGZyYW1lKQorCSAgICBmciA9IGZyLT5mcl9wYXJlbnQ7CisgICAgfQorCisgICAgaWYgKG9mZnNldCA8IDApIC8qIGRyYWcgdXAgKi8KKyAgICB7CisJdXAgPSBUUlVFOworCW9mZnNldCA9IC1vZmZzZXQ7CisJLyogc3VtIHVwIHRoZSByb29tIG9mIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBhYm92ZSBpdCAqLworCWlmIChmciA9PSBjdXJmcikKKwl7CisJICAgIC8qIG9ubHkgb25lIHdpbmRvdyAqLworCSAgICByb29tID0gZnItPmZyX2hlaWdodCAtIGZyYW1lX21pbmhlaWdodChmciwgTlVMTCk7CisJfQorCWVsc2UKKwl7CisJICAgIHJvb20gPSAwOworCSAgICBmb3IgKGZyID0gZnItPmZyX2NoaWxkOyA7IGZyID0gZnItPmZyX25leHQpCisJICAgIHsKKwkJcm9vbSArPSBmci0+ZnJfaGVpZ2h0IC0gZnJhbWVfbWluaGVpZ2h0KGZyLCBOVUxMKTsKKwkJaWYgKGZyID09IGN1cmZyKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwl9CisJZnIgPSBjdXJmci0+ZnJfbmV4dDsJCS8qIHB1dCBmciBhdCBmcmFtZSB0aGF0IGdyb3dzICovCisgICAgfQorICAgIGVsc2UgICAgLyogZHJhZyBkb3duICovCisgICAgeworCXVwID0gRkFMU0U7CisJLyoKKwkgKiBPbmx5IGRyYWdnaW5nIHRoZSBsYXN0IHN0YXR1cyBsaW5lIGNhbiByZWR1Y2UgcF9jaC4KKwkgKi8KKwlyb29tID0gUm93cyAtIGNtZGxpbmVfcm93OworCWlmIChjdXJmci0+ZnJfbmV4dCA9PSBOVUxMKQorCSAgICByb29tIC09IDE7CisJZWxzZQorCSAgICByb29tIC09IHBfY2g7CisJaWYgKHJvb20gPCAwKQorCSAgICByb29tID0gMDsKKwkvKiBzdW0gdXAgdGhlIHJvb20gb2YgZnJhbWVzIGJlbG93IG9mIHRoZSBjdXJyZW50IG9uZSAqLworCWZvciAoZnIgPSBjdXJmci0+ZnJfbmV4dDsgZnIgIT0gTlVMTDsgZnIgPSBmci0+ZnJfbmV4dCkKKwkgICAgcm9vbSArPSBmci0+ZnJfaGVpZ2h0IC0gZnJhbWVfbWluaGVpZ2h0KGZyLCBOVUxMKTsKKwlmciA9IGN1cmZyOwkJCS8qIHB1dCBmciBhdCB3aW5kb3cgdGhhdCBncm93cyAqLworICAgIH0KKworICAgIGlmIChyb29tIDwgb2Zmc2V0KQkJLyogTm90IGVub3VnaCByb29tICovCisJb2Zmc2V0ID0gcm9vbTsJCS8qIE1vdmUgYXMgZmFyIGFzIHdlIGNhbiAqLworICAgIGlmIChvZmZzZXQgPD0gMCkKKwlyZXR1cm47CisKKyAgICAvKgorICAgICAqIEdyb3cgZnJhbWUgZnIgYnkgIm9mZnNldCIgbGluZXMuCisgICAgICogRG9lc24ndCBoYXBwZW4gd2hlbiBkcmFnZ2luZyB0aGUgbGFzdCBzdGF0dXMgbGluZSB1cC4KKyAgICAgKi8KKyAgICBpZiAoZnIgIT0gTlVMTCkKKwlmcmFtZV9uZXdfaGVpZ2h0KGZyLCBmci0+ZnJfaGVpZ2h0ICsgb2Zmc2V0LCB1cCwgRkFMU0UpOworCisgICAgaWYgKHVwKQorCWZyID0gY3VyZnI7CQkvKiBjdXJyZW50IGZyYW1lIGdldHMgc21hbGxlciAqLworICAgIGVsc2UKKwlmciA9IGN1cmZyLT5mcl9uZXh0OwkvKiBuZXh0IGZyYW1lIGdldHMgc21hbGxlciAqLworCisgICAgLyoKKyAgICAgKiBOb3cgbWFrZSB0aGUgb3RoZXIgZnJhbWVzIHNtYWxsZXIuCisgICAgICovCisgICAgd2hpbGUgKGZyICE9IE5VTEwgJiYgb2Zmc2V0ID4gMCkKKyAgICB7CisJbiA9IGZyYW1lX21pbmhlaWdodChmciwgTlVMTCk7CisJaWYgKGZyLT5mcl9oZWlnaHQgLSBvZmZzZXQgPD0gbikKKwl7CisJICAgIG9mZnNldCAtPSBmci0+ZnJfaGVpZ2h0IC0gbjsKKwkgICAgZnJhbWVfbmV3X2hlaWdodChmciwgbiwgIXVwLCBGQUxTRSk7CisJfQorCWVsc2UKKwl7CisJICAgIGZyYW1lX25ld19oZWlnaHQoZnIsIGZyLT5mcl9oZWlnaHQgLSBvZmZzZXQsICF1cCwgRkFMU0UpOworCSAgICBicmVhazsKKwl9CisJaWYgKHVwKQorCSAgICBmciA9IGZyLT5mcl9wcmV2OworCWVsc2UKKwkgICAgZnIgPSBmci0+ZnJfbmV4dDsKKyAgICB9CisgICAgcm93ID0gd2luX2NvbXBfcG9zKCk7CisgICAgc2NyZWVuX2ZpbGwocm93LCBjbWRsaW5lX3JvdywgMCwgKGludClDb2x1bW5zLCAnICcsICcgJywgMCk7CisgICAgY21kbGluZV9yb3cgPSByb3c7CisgICAgcF9jaCA9IFJvd3MgLSBjbWRsaW5lX3JvdzsKKyAgICBpZiAocF9jaCA8IDEpCisJcF9jaCA9IDE7CisgICAgcmVkcmF3X2FsbF9sYXRlcihOT1RfVkFMSUQpOworICAgIHNob3dtb2RlKCk7Cit9CisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorLyoKKyAqIFNlcGFyYXRvciBsaW5lIG9mIGRyYWd3aW4gaXMgZHJhZ2dlZCAib2Zmc2V0IiBsaW5lcyByaWdodCAobmVnYXRpdmUgaXMgbGVmdCkuCisgKi8KKyAgICB2b2lkCit3aW5fZHJhZ192c2VwX2xpbmUoZHJhZ3dpbiwgb2Zmc2V0KQorICAgIHdpbl9UCSpkcmFnd2luOworICAgIGludAkJb2Zmc2V0OworeworICAgIGZyYW1lX1QJKmN1cmZyOworICAgIGZyYW1lX1QJKmZyOworICAgIGludAkJcm9vbTsKKyAgICBpbnQJCWxlZnQ7CS8qIGlmIFRSVUUsIGRyYWcgc2VwYXJhdG9yIGxpbmUgbGVmdCwgb3RoZXJ3aXNlIHJpZ2h0ICovCisgICAgaW50CQluOworCisgICAgZnIgPSBkcmFnd2luLT53X2ZyYW1lOworICAgIGlmIChmciA9PSB0b3BmcmFtZSkJCS8qIG9ubHkgb25lIHdpbmRvdyAoY2Fubm90IGhhcHBlPykgKi8KKwlyZXR1cm47CisgICAgY3VyZnIgPSBmcjsKKyAgICBmciA9IGZyLT5mcl9wYXJlbnQ7CisgICAgLyogV2hlbiB0aGUgcGFyZW50IGZyYW1lIGlzIG5vdCBhIHJvdyBvZiBmcmFtZXMsIGl0cyBwYXJlbnQgc2hvdWxkIGJlLiAqLworICAgIGlmIChmci0+ZnJfbGF5b3V0ICE9IEZSX1JPVykKKyAgICB7CisJaWYgKGZyID09IHRvcGZyYW1lKQkvKiBvbmx5IGEgY29sdW1uIG9mIHdpbmRvd3MgKGNhbm5vdCBoYXBwZW4/KSAqLworCSAgICByZXR1cm47CisJY3VyZnIgPSBmcjsKKwlmciA9IGZyLT5mcl9wYXJlbnQ7CisgICAgfQorCisgICAgLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBmcmFtZSBpbiBhIHJvdywgbWF5IHdhbnQgdG8gcmVzaXplIGEgcGFyZW50CisgICAgICogZnJhbWUgaW5zdGVhZC4gKi8KKyAgICB3aGlsZSAoY3VyZnItPmZyX25leHQgPT0gTlVMTCkKKyAgICB7CisJaWYgKGZyID09IHRvcGZyYW1lKQorCSAgICBicmVhazsKKwljdXJmciA9IGZyOworCWZyID0gZnItPmZyX3BhcmVudDsKKwlpZiAoZnIgIT0gdG9wZnJhbWUpCisJeworCSAgICBjdXJmciA9IGZyOworCSAgICBmciA9IGZyLT5mcl9wYXJlbnQ7CisJfQorICAgIH0KKworICAgIGlmIChvZmZzZXQgPCAwKSAvKiBkcmFnIGxlZnQgKi8KKyAgICB7CisJbGVmdCA9IFRSVUU7CisJb2Zmc2V0ID0gLW9mZnNldDsKKwkvKiBzdW0gdXAgdGhlIHJvb20gb2YgdGhlIGN1cnJlbnQgZnJhbWUgYW5kIGxlZnQgb2YgaXQgKi8KKwlyb29tID0gMDsKKwlmb3IgKGZyID0gZnItPmZyX2NoaWxkOyA7IGZyID0gZnItPmZyX25leHQpCisJeworCSAgICByb29tICs9IGZyLT5mcl93aWR0aCAtIGZyYW1lX21pbndpZHRoKGZyLCBOVUxMKTsKKwkgICAgaWYgKGZyID09IGN1cmZyKQorCQlicmVhazsKKwl9CisJZnIgPSBjdXJmci0+ZnJfbmV4dDsJCS8qIHB1dCBmciBhdCBmcmFtZSB0aGF0IGdyb3dzICovCisgICAgfQorICAgIGVsc2UgICAgLyogZHJhZyByaWdodCAqLworICAgIHsKKwlsZWZ0ID0gRkFMU0U7CisJLyogc3VtIHVwIHRoZSByb29tIG9mIGZyYW1lcyByaWdodCBvZiB0aGUgY3VycmVudCBvbmUgKi8KKwlyb29tID0gMDsKKwlmb3IgKGZyID0gY3VyZnItPmZyX25leHQ7IGZyICE9IE5VTEw7IGZyID0gZnItPmZyX25leHQpCisJICAgIHJvb20gKz0gZnItPmZyX3dpZHRoIC0gZnJhbWVfbWlud2lkdGgoZnIsIE5VTEwpOworCWZyID0gY3VyZnI7CQkJLyogcHV0IGZyIGF0IHdpbmRvdyB0aGF0IGdyb3dzICovCisgICAgfQorCisgICAgaWYgKHJvb20gPCBvZmZzZXQpCQkvKiBOb3QgZW5vdWdoIHJvb20gKi8KKwlvZmZzZXQgPSByb29tOwkJLyogTW92ZSBhcyBmYXIgYXMgd2UgY2FuICovCisgICAgaWYgKG9mZnNldCA8PSAwKQkJLyogTm8gcm9vbSBhdCBhbGwsIHF1aXQuICovCisJcmV0dXJuOworCisgICAgLyogZ3JvdyBmcmFtZSBmciBieSBvZmZzZXQgbGluZXMgKi8KKyAgICBmcmFtZV9uZXdfd2lkdGgoZnIsIGZyLT5mcl93aWR0aCArIG9mZnNldCwgbGVmdCk7CisKKyAgICAvKiBzaHJpbmsgb3RoZXIgZnJhbWVzOiBjdXJyZW50IGFuZCBhdCB0aGUgbGVmdCBvciBhdCB0aGUgcmlnaHQgKi8KKyAgICBpZiAobGVmdCkKKwlmciA9IGN1cmZyOwkJLyogY3VycmVudCBmcmFtZSBnZXRzIHNtYWxsZXIgKi8KKyAgICBlbHNlCisJZnIgPSBjdXJmci0+ZnJfbmV4dDsJLyogbmV4dCBmcmFtZSBnZXRzIHNtYWxsZXIgKi8KKworICAgIHdoaWxlIChmciAhPSBOVUxMICYmIG9mZnNldCA+IDApCisgICAgeworCW4gPSBmcmFtZV9taW53aWR0aChmciwgTlVMTCk7CisJaWYgKGZyLT5mcl93aWR0aCAtIG9mZnNldCA8PSBuKQorCXsKKwkgICAgb2Zmc2V0IC09IGZyLT5mcl93aWR0aCAtIG47CisJICAgIGZyYW1lX25ld193aWR0aChmciwgbiwgIWxlZnQpOworCX0KKwllbHNlCisJeworCSAgICBmcmFtZV9uZXdfd2lkdGgoZnIsIGZyLT5mcl93aWR0aCAtIG9mZnNldCwgIWxlZnQpOworCSAgICBicmVhazsKKwl9CisJaWYgKGxlZnQpCisJICAgIGZyID0gZnItPmZyX3ByZXY7CisJZWxzZQorCSAgICBmciA9IGZyLT5mcl9uZXh0OworICAgIH0KKyAgICAodm9pZCl3aW5fY29tcF9wb3MoKTsKKyAgICByZWRyYXdfYWxsX2xhdGVyKE5PVF9WQUxJRCk7Cit9CisjZW5kaWYgLyogRkVBVF9WRVJUU1BMSVQgKi8KKyNlbmRpZiAvKiBGRUFUX01PVVNFICovCisKKyNlbmRpZiAvKiBGRUFUX1dJTkRPV1MgKi8KKworLyoKKyAqIFNldCB0aGUgaGVpZ2h0IG9mIGEgd2luZG93LgorICogVGhpcyB0YWtlcyBjYXJlIG9mIHRoZSB0aGluZ3MgaW5zaWRlIHRoZSB3aW5kb3csIG5vdCB3aGF0IGhhcHBlbnMgdG8gdGhlCisgKiB3aW5kb3cgcG9zaXRpb24sIHRoZSBmcmFtZSBvciB0byBvdGhlciB3aW5kb3dzLgorICovCisgICAgc3RhdGljIHZvaWQKK3dpbl9uZXdfaGVpZ2h0KHdwLCBoZWlnaHQpCisgICAgd2luX1QJKndwOworICAgIGludAkJaGVpZ2h0OworeworICAgIGxpbmVucl9UCWxudW07CisgICAgaW50CQlzbGluZSwgbGluZV9zaXplOworI2RlZmluZSBGUkFDVElPTl9NVUxUCTE2Mzg0TAorCisgICAgLyogRG9uJ3Qgd2FudCBhIG5lZ2F0aXZlIGhlaWdodC4gIEhhcHBlbnMgd2hlbiBzcGxpdHRpbmcgYSB0aW55IHdpbmRvdy4KKyAgICAgKiBXaWxsIGVxdWFsaXplIGhlaWdodHMgc29vbiB0byBmaXggaXQuICovCisgICAgaWYgKGhlaWdodCA8IDApCisJaGVpZ2h0ID0gMDsKKworICAgIGlmICh3cC0+d193cm93ICE9IHdwLT53X3ByZXZfZnJhY3Rpb25fcm93ICYmIHdwLT53X2hlaWdodCA+IDApCisJd3AtPndfZnJhY3Rpb24gPSAoKGxvbmcpd3AtPndfd3JvdyAqIEZSQUNUSU9OX01VTFQKKwkJCQkgICAgKyBGUkFDVElPTl9NVUxUIC8gMikgLyAobG9uZyl3cC0+d19oZWlnaHQ7CisKKyAgICB3cC0+d19oZWlnaHQgPSBoZWlnaHQ7CisgICAgd3AtPndfc2tpcGNvbCA9IDA7CisKKyAgICAvKiBEb24ndCBjaGFuZ2Ugd190b3BsaW5lIHdoZW4gaGVpZ2h0IGlzIHplcm8uICBEb24ndCBzZXQgd190b3BsaW5lIHdoZW4KKyAgICAgKiAnc2Nyb2xsYmluZCcgaXMgc2V0IGFuZCB0aGlzIGlzbid0IHRoZSBjdXJyZW50IHdpbmRvdy4gKi8KKyAgICBpZiAoaGVpZ2h0ID4gMAorI2lmZGVmIEZFQVRfU0NST0xMQklORAorCSAgICAmJiAoIXdwLT53X3Bfc2NiIHx8IHdwID09IGN1cndpbikKKyNlbmRpZgorICAgICAgICkKKyAgICB7CisJbG51bSA9IHdwLT53X2N1cnNvci5sbnVtOworCWlmIChsbnVtIDwgMSkJCS8qIGNhbiBoYXBwZW4gd2hlbiBzdGFydGluZyB1cCAqLworCSAgICBsbnVtID0gMTsKKwl3cC0+d193cm93ID0gKChsb25nKXdwLT53X2ZyYWN0aW9uICogKGxvbmcpaGVpZ2h0IC0gMUwpIC8gRlJBQ1RJT05fTVVMVDsKKwlsaW5lX3NpemUgPSBwbGluZXNfd2luX2NvbCh3cCwgbG51bSwgKGxvbmcpKHdwLT53X2N1cnNvci5jb2wpKSAtIDE7CisJc2xpbmUgPSB3cC0+d193cm93IC0gbGluZV9zaXplOworCWlmIChzbGluZSA8IDApCisJeworCSAgICAvKgorCSAgICAgKiBDdXJzb3IgbGluZSB3b3VsZCBnbyBvZmYgdG9wIG9mIHNjcmVlbiBpZiB3X3dyb3cgd2FzIHRoaXMgaGlnaC4KKwkgICAgICovCisJICAgIHdwLT53X3dyb3cgPSBsaW5lX3NpemU7CisJfQorCWVsc2UKKwl7CisJICAgIHdoaWxlIChzbGluZSA+IDAgJiYgbG51bSA+IDEpCisJICAgIHsKKyNpZmRlZiBGRUFUX0ZPTERJTkcKKwkJaGFzRm9sZGluZ1dpbih3cCwgbG51bSwgJmxudW0sIE5VTEwsIFRSVUUsIE5VTEwpOworCQlpZiAobG51bSA9PSAxKQorCQl7CisJCSAgICAvKiBmaXJzdCBsaW5lIGluIGJ1ZmZlciBpcyBmb2xkZWQgKi8KKwkJICAgIGxpbmVfc2l6ZSA9IDE7CisJCSAgICAtLXNsaW5lOworCQkgICAgYnJlYWs7CisJCX0KKyNlbmRpZgorCQktLWxudW07CisjaWZkZWYgRkVBVF9ESUZGCisJCWlmIChsbnVtID09IHdwLT53X3RvcGxpbmUpCisJCSAgICBsaW5lX3NpemUgPSBwbGluZXNfd2luX25vZmlsbCh3cCwgbG51bSwgVFJVRSkKKwkJCQkJCQkgICAgICArIHdwLT53X3RvcGZpbGw7CisJCWVsc2UKKyNlbmRpZgorCQkgICAgbGluZV9zaXplID0gcGxpbmVzX3dpbih3cCwgbG51bSwgVFJVRSk7CisJCXNsaW5lIC09IGxpbmVfc2l6ZTsKKwkgICAgfQorCSAgICBpZiAoc2xpbmUgPCAwKQorCSAgICB7CisJCS8qCisJCSAqIExpbmUgd2Ugd2FudCBhdCB0b3Agd291bGQgZ28gb2ZmIHRvcCBvZiBzY3JlZW4uICBVc2UgbmV4dAorCQkgKiBsaW5lIGluc3RlYWQuCisJCSAqLworI2lmZGVmIEZFQVRfRk9MRElORworCQloYXNGb2xkaW5nV2luKHdwLCBsbnVtLCBOVUxMLCAmbG51bSwgVFJVRSwgTlVMTCk7CisjZW5kaWYKKwkJbG51bSsrOworCQl3cC0+d193cm93IC09IGxpbmVfc2l6ZSArIHNsaW5lOworCSAgICB9CisJICAgIGVsc2UgaWYgKHNsaW5lID4gMCkKKwkgICAgeworCQkvKiBGaXJzdCBsaW5lIG9mIGZpbGUgcmVhY2hlZCwgdXNlIHRoYXQgYXMgdG9wbGluZS4gKi8KKwkJbG51bSA9IDE7CisJCXdwLT53X3dyb3cgLT0gc2xpbmU7CisJICAgIH0KKwl9CisJc2V0X3RvcGxpbmUod3AsIGxudW0pOworICAgIH0KKworICAgIGlmICh3cCA9PSBjdXJ3aW4pCisgICAgeworCWlmIChwX3NvKQorCSAgICB1cGRhdGVfdG9wbGluZSgpOworCWN1cnNfY29sdW1ucyhGQUxTRSk7CS8qIHZhbGlkYXRlIHdfd3JvdyAqLworICAgIH0KKyAgICB3cC0+d19wcmV2X2ZyYWN0aW9uX3JvdyA9IHdwLT53X3dyb3c7CisKKyAgICB3aW5fY29tcF9zY3JvbGwod3ApOworICAgIHJlZHJhd193aW5fbGF0ZXIod3AsIE5PVF9WQUxJRCk7CisjaWZkZWYgRkVBVF9XSU5ET1dTCisgICAgd3AtPndfcmVkcl9zdGF0dXMgPSBUUlVFOworI2VuZGlmCisgICAgaW52YWxpZGF0ZV9ib3RsaW5lX3dpbih3cCk7Cit9CisKKyNpZmRlZiBGRUFUX1ZFUlRTUExJVAorLyoKKyAqIFNldCB0aGUgd2lkdGggb2YgYSB3aW5kb3cuCisgKi8KKyAgICBzdGF0aWMgdm9pZAord2luX25ld193aWR0aCh3cCwgd2lkdGgpCisgICAgd2luX1QJKndwOworICAgIGludAkJd2lkdGg7Cit7CisgICAgd3AtPndfd2lkdGggPSB3aWR0aDsKKyAgICB3cC0+d19saW5lc192YWxpZCA9IDA7CisgICAgY2hhbmdlZF9saW5lX2Fidl9jdXJzX3dpbih3cCk7CisgICAgaW52YWxpZGF0ZV9ib3RsaW5lX3dpbih3cCk7CisgICAgaWYgKHdwID09IGN1cndpbikKKyAgICB7CisJdXBkYXRlX3RvcGxpbmUoKTsKKwljdXJzX2NvbHVtbnMoVFJVRSk7CS8qIHZhbGlkYXRlIHdfd3JvdyAqLworICAgIH0KKyAgICByZWRyYXdfd2luX2xhdGVyKHdwLCBOT1RfVkFMSUQpOworICAgIHdwLT53X3JlZHJfc3RhdHVzID0gVFJVRTsKK30KKyNlbmRpZgorCisgICAgdm9pZAord2luX2NvbXBfc2Nyb2xsKHdwKQorICAgIHdpbl9UCSp3cDsKK3sKKyAgICB3cC0+d19wX3NjciA9ICgodW5zaWduZWQpd3AtPndfaGVpZ2h0ID4+IDEpOworICAgIGlmICh3cC0+d19wX3NjciA9PSAwKQorCXdwLT53X3Bfc2NyID0gMTsKK30KKworLyoKKyAqIGNvbW1hbmRfaGVpZ2h0OiBjYWxsZWQgd2hlbmV2ZXIgcF9jaCBoYXMgYmVlbiBjaGFuZ2VkCisgKi8KKyAgICB2b2lkCitjb21tYW5kX2hlaWdodChvbGRfcF9jaCkKKyAgICBsb25nCW9sZF9wX2NoOworeworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIGludAkJaDsKKyAgICBmcmFtZV9UCSpmcnA7CisKKyAgICAvKiBGaW5kIGJvdHRvbSBmcmFtZSB3aXRoIHdpZHRoIG9mIHNjcmVlbi4gKi8KKyAgICBmcnAgPSBsYXN0d2luLT53X2ZyYW1lOworIyBpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIHdoaWxlIChmcnAtPmZyX3dpZHRoICE9IENvbHVtbnMgJiYgZnJwLT5mcl9wYXJlbnQgIT0gTlVMTCkKKwlmcnAgPSBmcnAtPmZyX3BhcmVudDsKKyMgZW5kaWYKKworICAgIC8qIEF2b2lkIGNoYW5naW5nIHRoZSBoZWlnaHQgb2YgYSB3aW5kb3cgd2l0aCAnd2luZml4aGVpZ2h0JyBzZXQuICovCisgICAgd2hpbGUgKGZycC0+ZnJfcHJldiAhPSBOVUxMICYmIGZycC0+ZnJfbGF5b3V0ID09IEZSX0xFQUYKKwkJCQkJCSAgICAgICYmIGZycC0+ZnJfd2luLT53X3Bfd2ZoKQorCWZycCA9IGZycC0+ZnJfcHJldjsKKworICAgIGlmIChzdGFydGluZyAhPSBOT19TQ1JFRU4pCisgICAgeworCWNtZGxpbmVfcm93ID0gUm93cyAtIHBfY2g7CisKKwlpZiAocF9jaCA+IG9sZF9wX2NoKQkJICAgIC8qIHBfY2ggZ290IGJpZ2dlciAqLworCXsKKwkgICAgd2hpbGUgKHBfY2ggPiBvbGRfcF9jaCkKKwkgICAgeworCQlpZiAoZnJwID09IE5VTEwpCisJCXsKKwkJICAgIEVNU0coXyhlX25vcm9vbSkpOworCQkgICAgcF9jaCA9IG9sZF9wX2NoOworCQkgICAgY21kbGluZV9yb3cgPSBSb3dzIC0gcF9jaDsKKwkJICAgIGJyZWFrOworCQl9CisJCWggPSBmcnAtPmZyX2hlaWdodCAtIGZyYW1lX21pbmhlaWdodChmcnAsIE5VTEwpOworCQlpZiAoaCA+IHBfY2ggLSBvbGRfcF9jaCkKKwkJICAgIGggPSBwX2NoIC0gb2xkX3BfY2g7CisJCW9sZF9wX2NoICs9IGg7CisJCWZyYW1lX2FkZF9oZWlnaHQoZnJwLCAtaCk7CisJCWZycCA9IGZycC0+ZnJfcHJldjsKKwkgICAgfQorCisJICAgIC8qIFJlY29tcHV0ZSB3aW5kb3cgcG9zaXRpb25zLiAqLworCSAgICAodm9pZCl3aW5fY29tcF9wb3MoKTsKKworCSAgICAvKiBjbGVhciB0aGUgbGluZXMgYWRkZWQgdG8gY21kbGluZSAqLworCSAgICBpZiAoZnVsbF9zY3JlZW4pCisJCXNjcmVlbl9maWxsKChpbnQpKGNtZGxpbmVfcm93KSwgKGludClSb3dzLCAwLAorCQkJCQkJICAgKGludClDb2x1bW5zLCAnICcsICcgJywgMCk7CisJICAgIG1zZ19yb3cgPSBjbWRsaW5lX3JvdzsKKwkgICAgcmVkcmF3X2NtZGxpbmUgPSBUUlVFOworCSAgICByZXR1cm47CisJfQorCisJaWYgKG1zZ19yb3cgPCBjbWRsaW5lX3JvdykKKwkgICAgbXNnX3JvdyA9IGNtZGxpbmVfcm93OworCXJlZHJhd19jbWRsaW5lID0gVFJVRTsKKyAgICB9CisgICAgZnJhbWVfYWRkX2hlaWdodChmcnAsIChpbnQpKG9sZF9wX2NoIC0gcF9jaCkpOworCisgICAgLyogUmVjb21wdXRlIHdpbmRvdyBwb3NpdGlvbnMuICovCisgICAgaWYgKGZycCAhPSBsYXN0d2luLT53X2ZyYW1lKQorCSh2b2lkKXdpbl9jb21wX3BvcygpOworI2Vsc2UKKyAgICB3aW5fc2V0aGVpZ2h0KChpbnQpKGZpcnN0d2luLT53X2hlaWdodCArIG9sZF9wX2NoIC0gcF9jaCkpOworICAgIGNtZGxpbmVfcm93ID0gUm93cyAtIHBfY2g7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoRkVBVF9XSU5ET1dTKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJlc2l6ZSBmcmFtZSAiZnJwIiB0byBiZSAibiIgbGluZXMgaGlnaGVyIChuZWdhdGl2ZSBmb3IgbGVzcyBoaWdoKS4KKyAqIEFsc28gcmVzaXplIHRoZSBmcmFtZXMgaXQgaXMgY29udGFpbmVkIGluLgorICovCisgICAgc3RhdGljIHZvaWQKK2ZyYW1lX2FkZF9oZWlnaHQoZnJwLCBuKQorICAgIGZyYW1lX1QJKmZycDsKKyAgICBpbnQJCW47Cit7CisgICAgZnJhbWVfbmV3X2hlaWdodChmcnAsIGZycC0+ZnJfaGVpZ2h0ICsgbiwgRkFMU0UsIEZBTFNFKTsKKyAgICBmb3IgKDs7KQorICAgIHsKKwlmcnAgPSBmcnAtPmZyX3BhcmVudDsKKwlpZiAoZnJwID09IE5VTEwpCisJICAgIGJyZWFrOworCWZycC0+ZnJfaGVpZ2h0ICs9IG47CisgICAgfQorfQorCisvKgorICogQWRkIG9yIHJlbW92ZSBhIHN0YXR1cyBsaW5lIGZvciB0aGUgYm90dG9tIHdpbmRvdyhzKSwgYWNjb3JkaW5nIHRvIHRoZQorICogdmFsdWUgb2YgJ2xhc3RzdGF0dXMnLgorICovCisgICAgdm9pZAorbGFzdF9zdGF0dXMobW9yZXdpbikKKyAgICBpbnQJCW1vcmV3aW47CS8qIHByZXRlbmQgdGhlcmUgYXJlIHR3byBvciBtb3JlIHdpbmRvd3MgKi8KK3sKKyAgICAvKiBEb24ndCBtYWtlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGhvcml6b250YWwgb3IgdmVydGljYWwgc3BsaXQuICovCisgICAgbGFzdF9zdGF0dXNfcmVjKHRvcGZyYW1lLCAocF9scyA9PSAyCisJCQkgIHx8IChwX2xzID09IDEgJiYgKG1vcmV3aW4gfHwgbGFzdHdpbiAhPSBmaXJzdHdpbikpKSk7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorbGFzdF9zdGF0dXNfcmVjKGZyLCBzdGF0dXNsaW5lKQorICAgIGZyYW1lX1QJKmZyOworICAgIGludAkJc3RhdHVzbGluZTsKK3sKKyAgICBmcmFtZV9UCSpmcDsKKyAgICB3aW5fVAkqd3A7CisKKyAgICBpZiAoZnItPmZyX2xheW91dCA9PSBGUl9MRUFGKQorICAgIHsKKwl3cCA9IGZyLT5mcl93aW47CisJaWYgKHdwLT53X3N0YXR1c19oZWlnaHQgIT0gMCAmJiAhc3RhdHVzbGluZSkKKwl7CisJICAgIC8qIHJlbW92ZSBzdGF0dXMgbGluZSAqLworCSAgICB3aW5fbmV3X2hlaWdodCh3cCwgd3AtPndfaGVpZ2h0ICsgMSk7CisJICAgIHdwLT53X3N0YXR1c19oZWlnaHQgPSAwOworCSAgICBjb21wX2NvbCgpOworCX0KKwllbHNlIGlmICh3cC0+d19zdGF0dXNfaGVpZ2h0ID09IDAgJiYgc3RhdHVzbGluZSkKKwl7CisJICAgIC8qIEZpbmQgYSBmcmFtZSB0byB0YWtlIGEgbGluZSBmcm9tLiAqLworCSAgICBmcCA9IGZyOworCSAgICB3aGlsZSAoZnAtPmZyX2hlaWdodCA8PSBmcmFtZV9taW5oZWlnaHQoZnAsIE5VTEwpKQorCSAgICB7CisJCWlmIChmcCA9PSB0b3BmcmFtZSkKKwkJeworCQkgICAgRU1TRyhfKGVfbm9yb29tKSk7CisJCSAgICByZXR1cm47CisJCX0KKwkJLyogSW4gYSBjb2x1bW4gb2YgZnJhbWVzOiBnbyB0byBmcmFtZSBhYm92ZS4gIElmIGFscmVhZHkgYXQKKwkJICogdGhlIHRvcCBvciBpbiBhIHJvdyBvZiBmcmFtZXM6IGdvIHRvIHBhcmVudC4gKi8KKwkJaWYgKGZwLT5mcl9wYXJlbnQtPmZyX2xheW91dCA9PSBGUl9DT0wgJiYgZnAtPmZyX3ByZXYgIT0gTlVMTCkKKwkJICAgIGZwID0gZnAtPmZyX3ByZXY7CisJCWVsc2UKKwkJICAgIGZwID0gZnAtPmZyX3BhcmVudDsKKwkgICAgfQorCSAgICB3cC0+d19zdGF0dXNfaGVpZ2h0ID0gMTsKKwkgICAgaWYgKGZwICE9IGZyKQorCSAgICB7CisJCWZyYW1lX25ld19oZWlnaHQoZnAsIGZwLT5mcl9oZWlnaHQgLSAxLCBGQUxTRSwgRkFMU0UpOworCQlmcmFtZV9maXhfaGVpZ2h0KHdwKTsKKwkJKHZvaWQpd2luX2NvbXBfcG9zKCk7CisJICAgIH0KKwkgICAgZWxzZQorCQl3aW5fbmV3X2hlaWdodCh3cCwgd3AtPndfaGVpZ2h0IC0gMSk7CisJICAgIGNvbXBfY29sKCk7CisJICAgIHJlZHJhd19hbGxfbGF0ZXIoTk9UX1ZBTElEKTsKKwl9CisgICAgfQorI2lmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgZWxzZSBpZiAoZnItPmZyX2xheW91dCA9PSBGUl9ST1cpCisgICAgeworCS8qIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cywgc2V0IHN0YXR1cyBsaW5lIGZvciBlYWNoIG9uZSAqLworCWZvciAoZnAgPSBmci0+ZnJfY2hpbGQ7IGZwICE9IE5VTEw7IGZwID0gZnAtPmZyX25leHQpCisJICAgIGxhc3Rfc3RhdHVzX3JlYyhmcCwgc3RhdHVzbGluZSk7CisgICAgfQorI2VuZGlmCisgICAgZWxzZQorICAgIHsKKwkvKiBob3Jpem9udGFsbHkgc3BsaXQgd2luZG93LCBzZXQgc3RhdHVzIGxpbmUgZm9yIGxhc3Qgb25lICovCisJZm9yIChmcCA9IGZyLT5mcl9jaGlsZDsgZnAtPmZyX25leHQgIT0gTlVMTDsgZnAgPSBmcC0+ZnJfbmV4dCkKKwkgICAgOworCWxhc3Rfc3RhdHVzX3JlYyhmcCwgc3RhdHVzbGluZSk7CisgICAgfQorfQorCisjZW5kaWYgLyogRkVBVF9XSU5ET1dTICovCisKKyNpZiBkZWZpbmVkKEZFQVRfU0VBUkNIUEFUSCkgfHwgZGVmaW5lZChQUk9UTykKKy8qCisgKiBSZXR1cm4gdGhlIGZpbGUgbmFtZSB1bmRlciBvciBhZnRlciB0aGUgY3Vyc29yLgorICoKKyAqIFRoZSAncGF0aCcgb3B0aW9uIGlzIHNlYXJjaGVkIGlmIHRoZSBmaWxlIG5hbWUgaXMgbm90IGFic29sdXRlLgorICogVGhlIHN0cmluZyByZXR1cm5lZCBoYXMgYmVlbiBhbGxvYydlZCBhbmQgc2hvdWxkIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisgKiBOVUxMIGlzIHJldHVybmVkIGlmIHRoZSBmaWxlIG5hbWUgb3IgZmlsZSBpcyBub3QgZm91bmQuCisgKgorICogb3B0aW9uczoKKyAqIEZOQU1FX01FU1MJICAgIGdpdmUgZXJyb3IgbWVzc2FnZXMKKyAqIEZOQU1FX0VYUAkgICAgZXhwYW5kIHRvIHBhdGgKKyAqIEZOQU1FX0hZUAkgICAgY2hlY2sgZm9yIGh5cGVydGV4dCBsaW5rCisgKiBGTkFNRV9JTkNMCSAgICBhcHBseSAiaW5jbHVkZWV4cHIiCisgKi8KKyAgICBjaGFyX3UgKgorZmlsZV9uYW1lX2F0X2N1cnNvcihvcHRpb25zLCBjb3VudCkKKyAgICBpbnQJICAgIG9wdGlvbnM7CisgICAgbG9uZyAgICBjb3VudDsKK3sKKyAgICByZXR1cm4gZmlsZV9uYW1lX2luX2xpbmUobWxfZ2V0X2N1cmxpbmUoKSwKKwkJICAgICAgY3Vyd2luLT53X2N1cnNvci5jb2wsIG9wdGlvbnMsIGNvdW50LCBjdXJidWYtPmJfZmZuYW1lKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgZmlsZSB1bmRlciBvciBhZnRlciBwdHJbY29sXS4KKyAqIE90aGVyd2lzZSBsaWtlIGZpbGVfbmFtZV9hdF9jdXJzb3IoKS4KKyAqLworICAgIGNoYXJfdSAqCitmaWxlX25hbWVfaW5fbGluZShsaW5lLCBjb2wsIG9wdGlvbnMsIGNvdW50LCByZWxfZm5hbWUpCisgICAgY2hhcl91CSpsaW5lOworICAgIGludAkJY29sOworICAgIGludAkJb3B0aW9uczsKKyAgICBsb25nCWNvdW50OworICAgIGNoYXJfdQkqcmVsX2ZuYW1lOwkvKiBmaWxlIHdlIGFyZSBzZWFyY2hpbmcgcmVsYXRpdmUgdG8gKi8KK3sKKyAgICBjaGFyX3UJKnB0cjsKKyAgICBpbnQJCWxlbjsKKworICAgIC8qCisgICAgICogc2VhcmNoIGZvcndhcmQgZm9yIHdoYXQgY291bGQgYmUgdGhlIHN0YXJ0IG9mIGEgZmlsZSBuYW1lCisgICAgICovCisgICAgcHRyID0gbGluZSArIGNvbDsKKyAgICB3aGlsZSAoKnB0ciAhPSBOVUwgJiYgIXZpbV9pc2ZpbGVjKCpwdHIpKQorCSsrcHRyOworICAgIGlmICgqcHRyID09IE5VTCkJCS8qIG5vdGhpbmcgZm91bmQgKi8KKyAgICB7CisJaWYgKG9wdGlvbnMgJiBGTkFNRV9NRVNTKQorCSAgICBFTVNHKF8oIkU0NDY6IE5vIGZpbGUgbmFtZSB1bmRlciBjdXJzb3IiKSk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZWFyY2ggYmFja3dhcmQgZm9yIGZpcnN0IGNoYXIgb2YgdGhlIGZpbGUgbmFtZS4KKyAgICAgKiBHbyBvbmUgY2hhciBiYWNrIHRvICI6IiBiZWZvcmUgIi8vIiBldmVuIHdoZW4gJzonIGlzIG5vdCBpbiAnaXNmbmFtZScuCisgICAgICovCisgICAgd2hpbGUgKHB0ciA+IGxpbmUpCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlICYmIChsZW4gPSAoKm1iX2hlYWRfb2ZmKShsaW5lLCBwdHIgLSAxKSkgPiAwKQorCSAgICBwdHIgLT0gbGVuICsgMTsKKwllbHNlCisjZW5kaWYKKwlpZiAodmltX2lzZmlsZWMocHRyWy0xXSkKKwkJfHwgKChvcHRpb25zICYgRk5BTUVfSFlQKSAmJiBwYXRoX2lzX3VybChwdHIgLSAxKSkpCisJICAgIC0tcHRyOworCWVsc2UKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZWFyY2ggZm9yd2FyZCBmb3IgdGhlIGxhc3QgY2hhciBvZiB0aGUgZmlsZSBuYW1lLgorICAgICAqIEFsc28gYWxsb3cgIjovLyIgd2hlbiAnOicgaXMgbm90IGluICdpc2ZuYW1lJy4KKyAgICAgKi8KKyAgICBsZW4gPSAwOworICAgIHdoaWxlICh2aW1faXNmaWxlYyhwdHJbbGVuXSkKKwkJCSB8fCAoKG9wdGlvbnMgJiBGTkFNRV9IWVApICYmIHBhdGhfaXNfdXJsKHB0ciArIGxlbikpKQorI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCSAgICBsZW4gKz0gKCptYl9wdHIybGVuX2NoZWNrKShwdHIgKyBsZW4pOworCWVsc2UKKyNlbmRpZgorCSAgICArK2xlbjsKKworICAgIC8qCisgICAgICogSWYgdGhlcmUgaXMgdHJhaWxpbmcgcHVuY3R1YXRpb24sIHJlbW92ZSBpdC4KKyAgICAgKiBCdXQgZG9uJ3QgcmVtb3ZlICIuLiIsIGNvdWxkIGJlIGEgZGlyZWN0b3J5IG5hbWUuCisgICAgICovCisgICAgaWYgKGxlbiA+IDIgJiYgdmltX3N0cmNocigoY2hhcl91ICopIi4sOjshIiwgcHRyW2xlbiAtIDFdKSAhPSBOVUxMCisJCQkJCQkgICAgICAgJiYgcHRyW2xlbiAtIDJdICE9ICcuJykKKwktLWxlbjsKKworICAgIHJldHVybiBmaW5kX2ZpbGVfbmFtZV9pbl9wYXRoKHB0ciwgbGVuLCBvcHRpb25zLCBjb3VudCwgcmVsX2ZuYW1lKTsKK30KKworIyBpZiBkZWZpbmVkKEZFQVRfRklORF9JRCkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCitzdGF0aWMgY2hhcl91ICpldmFsX2luY2x1ZGVleHByIF9fQVJHUygoY2hhcl91ICpwdHIsIGludCBsZW4pKTsKKworICAgIHN0YXRpYyBjaGFyX3UgKgorZXZhbF9pbmNsdWRlZXhwcihwdHIsIGxlbikKKyAgICBjaGFyX3UJKnB0cjsKKyAgICBpbnQJCWxlbjsKK3sKKyAgICBjaGFyX3UJKnJlczsKKworICAgIHNldF92aW1fdmFyX3N0cmluZyhWVl9GTkFNRSwgcHRyLCBsZW4pOworICAgIHJlcyA9IGV2YWxfdG9fc3RyaW5nX3NhZmUoY3VyYnVmLT5iX3BfaW5leCwgTlVMTCk7CisgICAgc2V0X3ZpbV92YXJfc3RyaW5nKFZWX0ZOQU1FLCBOVUxMLCAwKTsKKyAgICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qCisgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGZpbGUgcHRyW2xlbl0gaW4gJ3BhdGgnLgorICogT3RoZXJ3aXNlIGxpa2UgZmlsZV9uYW1lX2F0X2N1cnNvcigpLgorICovCisgICAgY2hhcl91ICoKK2ZpbmRfZmlsZV9uYW1lX2luX3BhdGgocHRyLCBsZW4sIG9wdGlvbnMsIGNvdW50LCByZWxfZm5hbWUpCisgICAgY2hhcl91CSpwdHI7CisgICAgaW50CQlsZW47CisgICAgaW50CQlvcHRpb25zOworICAgIGxvbmcJY291bnQ7CisgICAgY2hhcl91CSpyZWxfZm5hbWU7CS8qIGZpbGUgd2UgYXJlIHNlYXJjaGluZyByZWxhdGl2ZSB0byAqLworeworICAgIGNoYXJfdQkqZmlsZV9uYW1lOworICAgIGludAkJYzsKKyMgaWYgZGVmaW5lZChGRUFUX0ZJTkRfSUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorICAgIGNoYXJfdQkqdG9mcmVlID0gTlVMTDsKKworICAgIGlmICgob3B0aW9ucyAmIEZOQU1FX0lOQ0wpICYmICpjdXJidWYtPmJfcF9pbmV4ICE9IE5VTCkKKyAgICB7CisJdG9mcmVlID0gZXZhbF9pbmNsdWRlZXhwcihwdHIsIGxlbik7CisJaWYgKHRvZnJlZSAhPSBOVUxMKQorCXsKKwkgICAgcHRyID0gdG9mcmVlOworCSAgICBsZW4gPSAoaW50KVNUUkxFTihwdHIpOworCX0KKyAgICB9CisjIGVuZGlmCisKKyAgICBpZiAob3B0aW9ucyAmIEZOQU1FX0VYUCkKKyAgICB7CisJZmlsZV9uYW1lID0gZmluZF9maWxlX2luX3BhdGgocHRyLCBsZW4sIG9wdGlvbnMgJiB+Rk5BTUVfTUVTUywKKwkJCQkJCQkgICAgIFRSVUUsIHJlbF9mbmFtZSk7CisKKyMgaWYgZGVmaW5lZChGRUFUX0ZJTkRfSUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCS8qCisJICogSWYgdGhlIGZpbGUgY291bGQgbm90IGJlIGZvdW5kIGluIGEgbm9ybWFsIHdheSwgdHJ5IGFwcGx5aW5nCisJICogJ2luY2x1ZGVleHByJyAodW5sZXNzIGRvbmUgYWxyZWFkeSkuCisJICovCisJaWYgKGZpbGVfbmFtZSA9PSBOVUxMCisJCSYmICEob3B0aW9ucyAmIEZOQU1FX0lOQ0wpICYmICpjdXJidWYtPmJfcF9pbmV4ICE9IE5VTCkKKwl7CisJICAgIHRvZnJlZSA9IGV2YWxfaW5jbHVkZWV4cHIocHRyLCBsZW4pOworCSAgICBpZiAodG9mcmVlICE9IE5VTEwpCisJICAgIHsKKwkJcHRyID0gdG9mcmVlOworCQlsZW4gPSAoaW50KVNUUkxFTihwdHIpOworCQlmaWxlX25hbWUgPSBmaW5kX2ZpbGVfaW5fcGF0aChwdHIsIGxlbiwgb3B0aW9ucyAmIH5GTkFNRV9NRVNTLAorCQkJCQkJCSAgICAgVFJVRSwgcmVsX2ZuYW1lKTsKKwkgICAgfQorCX0KKyMgZW5kaWYKKwlpZiAoZmlsZV9uYW1lID09IE5VTEwgJiYgKG9wdGlvbnMgJiBGTkFNRV9NRVNTKSkKKwl7CisJICAgIGMgPSBwdHJbbGVuXTsKKwkgICAgcHRyW2xlbl0gPSBOVUw7CisJICAgIEVNU0cyKF8oIkU0NDc6IENhbid0IGZpbmQgZmlsZSBcIiVzXCIgaW4gcGF0aCIpLCBwdHIpOworCSAgICBwdHJbbGVuXSA9IGM7CisJfQorCisJLyogUmVwZWF0IGZpbmRpbmcgdGhlIGZpbGUgImNvdW50IiB0aW1lcy4gIFRoaXMgbWF0dGVycyB3aGVuIGl0CisJICogYXBwZWFycyBzZXZlcmFsIHRpbWVzIGluIHRoZSBwYXRoLiAqLworCXdoaWxlIChmaWxlX25hbWUgIT0gTlVMTCAmJiAtLWNvdW50ID4gMCkKKwl7CisJICAgIHZpbV9mcmVlKGZpbGVfbmFtZSk7CisJICAgIGZpbGVfbmFtZSA9IGZpbmRfZmlsZV9pbl9wYXRoKHB0ciwgbGVuLCBvcHRpb25zLCBGQUxTRSwgcmVsX2ZuYW1lKTsKKwl9CisgICAgfQorICAgIGVsc2UKKwlmaWxlX25hbWUgPSB2aW1fc3RybnNhdmUocHRyLCBsZW4pOworCisjIGlmIGRlZmluZWQoRkVBVF9GSU5EX0lEKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKyAgICB2aW1fZnJlZSh0b2ZyZWUpOworIyBlbmRpZgorCisgICAgcmV0dXJuIGZpbGVfbmFtZTsKK30KKyNlbmRpZiAvKiBGRUFUX1NFQVJDSFBBVEggKi8KKworLyoKKyAqIENoZWNrIGlmIHRoZSAiOi8vIiBvZiBhIFVSTCBpcyBhdCB0aGUgcG9pbnRlciwgcmV0dXJuIFVSTF9TTEFTSC4KKyAqIEFsc28gY2hlY2sgZm9yICI6XFwiLCB3aGljaCBNUyBJbnRlcm5ldCBFeHBsb3JlciBhY2NlcHRzLCByZXR1cm4KKyAqIFVSTF9CQUNLU0xBU0guCisgKi8KKyAgICBzdGF0aWMgaW50CitwYXRoX2lzX3VybChwKQorICAgIGNoYXJfdSAgKnA7Cit7CisgICAgaWYgKFNUUk5DTVAocCwgIjovLyIsIChzaXplX3QpMykgPT0gMCkKKwlyZXR1cm4gVVJMX1NMQVNIOworICAgIGVsc2UgaWYgKFNUUk5DTVAocCwgIjpcXFxcIiwgKHNpemVfdCkzKSA9PSAwKQorCXJldHVybiBVUkxfQkFDS1NMQVNIOworICAgIHJldHVybiAwOworfQorCisvKgorICogQ2hlY2sgaWYgImZuYW1lIiBzdGFydHMgd2l0aCAibmFtZTovLyIuICBSZXR1cm4gVVJMX1NMQVNIIGlmIGl0IGRvZXMuCisgKiBSZXR1cm4gVVJMX0JBQ0tTTEFTSCBmb3IgIm5hbWU6XFwiLgorICogUmV0dXJuIHplcm8gb3RoZXJ3aXNlLgorICovCisgICAgaW50CitwYXRoX3dpdGhfdXJsKGZuYW1lKQorICAgIGNoYXJfdSAqZm5hbWU7Cit7CisgICAgY2hhcl91ICpwOworCisgICAgZm9yIChwID0gZm5hbWU7IGlzYWxwaGEoKnApOyArK3ApCisJOworICAgIHJldHVybiBwYXRoX2lzX3VybChwKTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmICJuYW1lIiBpcyBhIGZ1bGwgKGFic29sdXRlKSBwYXRoIG5hbWUgb3IgVVJMLgorICovCisgICAgaW50Cit2aW1faXNBYnNOYW1lKG5hbWUpCisgICAgY2hhcl91CSpuYW1lOworeworICAgIHJldHVybiAocGF0aF93aXRoX3VybChuYW1lKSAhPSAwIHx8IG1jaF9pc0Z1bGxOYW1lKG5hbWUpKTsKK30KKworLyoKKyAqIEdldCBhYnNvbHV0ZSBmaWxlIG5hbWUgaW50byBidWZmZXIgJ2J1Zicgb2YgbGVuZ3RoICdsZW4nIGJ5dGVzLgorICoKKyAqIHJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UKKyAqLworICAgIGludAordmltX0Z1bGxOYW1lKGZuYW1lLCBidWYsIGxlbiwgZm9yY2UpCisgICAgY2hhcl91CSpmbmFtZSwgKmJ1ZjsKKyAgICBpbnQJCWxlbjsKKyAgICBpbnQJCWZvcmNlOworeworICAgIGludAkJcmV0dmFsID0gT0s7CisgICAgaW50CQl1cmw7CisKKyAgICAqYnVmID0gTlVMOworICAgIGlmIChmbmFtZSA9PSBOVUxMKQorCXJldHVybiBGQUlMOworCisgICAgdXJsID0gcGF0aF93aXRoX3VybChmbmFtZSk7CisgICAgaWYgKCF1cmwpCisJcmV0dmFsID0gbWNoX0Z1bGxOYW1lKGZuYW1lLCBidWYsIGxlbiwgZm9yY2UpOworICAgIGlmICh1cmwgfHwgcmV0dmFsID09IEZBSUwpCisgICAgeworCS8qIHNvbWV0aGluZyBmYWlsZWQ7IHVzZSB0aGUgZmlsZSBuYW1lICh0cnVuY2F0ZSB3aGVuIHRvbyBsb25nKSAqLworCVNUUk5DUFkoYnVmLCBmbmFtZSwgbGVuKTsKKwlidWZbbGVuIC0gMV0gPSBOVUw7CisgICAgfQorI2lmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykgfHwgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pCisgICAgc2xhc2hfYWRqdXN0KGJ1Zik7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKgorICogUmV0dXJuIHRoZSBtaW5pbWFsIG51bWJlciBvZiByb3dzIHRoYXQgaXMgbmVlZGVkIG9uIHRoZSBzY3JlZW4gdG8gZGlzcGxheQorICogdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHdpbmRvd3MuCisgKi8KKyAgICBpbnQKK21pbl9yb3dzKCkKK3sKKyAgICBpbnQJCXRvdGFsOworCisgICAgaWYgKGZpcnN0d2luID09IE5VTEwpCS8qIG5vdCBpbml0aWFsaXplZCB5ZXQgKi8KKwlyZXR1cm4gTUlOX0xJTkVTOworCisgICAgdG90YWwgPSAxOwkJLyogY291bnQgdGhlIHJvb20gZm9yIHRoZSBjb21tYW5kIGxpbmUgKi8KKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICB0b3RhbCArPSBmcmFtZV9taW5oZWlnaHQodG9wZnJhbWUsIE5VTEwpOworI2Vsc2UKKyAgICB0b3RhbCArPSAxOwkJLyogYXQgbGVhc3Qgb25lIHdpbmRvdyBzaG91bGQgaGF2ZSBhIGxpbmUhICovCisjZW5kaWYKKyAgICByZXR1cm4gdG90YWw7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGVyZSBpcyBvbmx5IG9uZSB3aW5kb3csIG5vdCBjb3VudGluZyBhIGhlbHAgb3IgcHJldmlldworICogd2luZG93LCB1bmxlc3MgaXQgaXMgdGhlIGN1cnJlbnQgd2luZG93LgorICovCisgICAgaW50Citvbmx5X29uZV93aW5kb3coKQoreworI2lmZGVmIEZFQVRfV0lORE9XUworICAgIGludAkJY291bnQgPSAwOworICAgIHdpbl9UCSp3cDsKKworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gTlVMTDsgd3AgPSB3cC0+d19uZXh0KQorCWlmICghKHdwLT53X2J1ZmZlci0+Yl9oZWxwCisjIGlmZGVmIEZFQVRfUVVJQ0tGSVgKKwkJICAgIHx8IHdwLT53X3BfcHZ3CisjIGVuZGlmCisJICAgICApIHx8IHdwID09IGN1cndpbikKKwkgICAgKytjb3VudDsKKyAgICByZXR1cm4gKGNvdW50IDw9IDEpOworI2Vsc2UKKyAgICByZXR1cm4gVFJVRTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChGRUFUX1dJTkRPV1MpIHx8IGRlZmluZWQoRkVBVF9BVVRPQ01EKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENvcnJlY3QgdGhlIGN1cnNvciBsaW5lIG51bWJlciBpbiBvdGhlciB3aW5kb3dzLiAgVXNlZCBhZnRlciBjaGFuZ2luZyB0aGUKKyAqIGN1cnJlbnQgYnVmZmVyLCBhbmQgYmVmb3JlIGFwcGx5aW5nIGF1dG9jb21tYW5kcy4KKyAqIFdoZW4gImRvX2N1cndpbiIgaXMgVFJVRSwgYWxzbyBjaGVjayBjdXJyZW50IHdpbmRvdy4KKyAqLworICAgIHZvaWQKK2NoZWNrX2xudW1zKGRvX2N1cndpbikKKyAgICBpbnQJCWRvX2N1cndpbjsKK3sKKyAgICB3aW5fVAkqd3A7CisKKyNpZmRlZiBGRUFUX1dJTkRPV1MKKyAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKKwlpZiAoKGRvX2N1cndpbiB8fCB3cCAhPSBjdXJ3aW4pICYmIHdwLT53X2J1ZmZlciA9PSBjdXJidWYpCisjZWxzZQorICAgIHdwID0gY3Vyd2luOworICAgIGlmIChkb19jdXJ3aW4pCisjZW5kaWYKKwl7CisJICAgIGlmICh3cC0+d19jdXJzb3IubG51bSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQl3cC0+d19jdXJzb3IubG51bSA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OworCSAgICBpZiAod3AtPndfdG9wbGluZSA+IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQorCQl3cC0+d190b3BsaW5lID0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQ7CisJfQorfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZFQVRfV0lORE9XUykgfHwgZGVmaW5lZChQUk9UTykKKworLyoKKyAqIEEgc25hcHNob3Qgb2YgdGhlIHdpbmRvdyBzaXplcywgdG8gcmVzdG9yZSB0aGVtIGFmdGVyIGNsb3NpbmcgdGhlIGhlbHAKKyAqIHdpbmRvdy4KKyAqIE9ubHkgdGhlc2UgZmllbGRzIGFyZSB1c2VkOgorICogZnJfbGF5b3V0CisgKiBmcl93aWR0aAorICogZnJfaGVpZ2h0CisgKiBmcl9uZXh0CisgKiBmcl9jaGlsZAorICogZnJfd2luIChvbmx5IHZhbGlkIGZvciB0aGUgb2xkIGN1cndpbiwgTlVMTCBvdGhlcndpc2UpCisgKi8KK3N0YXRpYyBmcmFtZV9UICpzbmFwc2hvdCA9IE5VTEw7CisKKy8qCisgKiBDcmVhdGUgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBmcmFtZSBzaXplcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCittYWtlX3NuYXBzaG90KCkKK3sKKyAgICBjbGVhcl9zbmFwc2hvdCgpOworICAgIG1ha2Vfc25hcHNob3RfcmVjKHRvcGZyYW1lLCAmc25hcHNob3QpOworfQorCisgICAgc3RhdGljIHZvaWQKK21ha2Vfc25hcHNob3RfcmVjKGZyLCBmcnApCisgICAgZnJhbWVfVAkqZnI7CisgICAgZnJhbWVfVAkqKmZycDsKK3sKKyAgICAqZnJwID0gKGZyYW1lX1QgKilhbGxvY19jbGVhcigodW5zaWduZWQpc2l6ZW9mKGZyYW1lX1QpKTsKKyAgICBpZiAoKmZycCA9PSBOVUxMKQorCXJldHVybjsKKyAgICAoKmZycCktPmZyX2xheW91dCA9IGZyLT5mcl9sYXlvdXQ7CisjIGlmZGVmIEZFQVRfVkVSVFNQTElUCisgICAgKCpmcnApLT5mcl93aWR0aCA9IGZyLT5mcl93aWR0aDsKKyMgZW5kaWYKKyAgICAoKmZycCktPmZyX2hlaWdodCA9IGZyLT5mcl9oZWlnaHQ7CisgICAgaWYgKGZyLT5mcl9uZXh0ICE9IE5VTEwpCisJbWFrZV9zbmFwc2hvdF9yZWMoZnItPmZyX25leHQsICYoKCpmcnApLT5mcl9uZXh0KSk7CisgICAgaWYgKGZyLT5mcl9jaGlsZCAhPSBOVUxMKQorCW1ha2Vfc25hcHNob3RfcmVjKGZyLT5mcl9jaGlsZCwgJigoKmZycCktPmZyX2NoaWxkKSk7CisgICAgaWYgKGZyLT5mcl9sYXlvdXQgPT0gRlJfTEVBRiAmJiBmci0+ZnJfd2luID09IGN1cndpbikKKwkoKmZycCktPmZyX3dpbiA9IGN1cndpbjsKK30KKworLyoKKyAqIFJlbW92ZSBhbnkgZXhpc3Rpbmcgc25hcHNob3QuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2xlYXJfc25hcHNob3QoKQoreworICAgIGNsZWFyX3NuYXBzaG90X3JlYyhzbmFwc2hvdCk7CisgICAgc25hcHNob3QgPSBOVUxMOworfQorCisgICAgc3RhdGljIHZvaWQKK2NsZWFyX3NuYXBzaG90X3JlYyhmcikKKyAgICBmcmFtZV9UCSpmcjsKK3sKKyAgICBpZiAoZnIgIT0gTlVMTCkKKyAgICB7CisJY2xlYXJfc25hcHNob3RfcmVjKGZyLT5mcl9uZXh0KTsKKwljbGVhcl9zbmFwc2hvdF9yZWMoZnItPmZyX2NoaWxkKTsKKwl2aW1fZnJlZShmcik7CisgICAgfQorfQorCisvKgorICogUmVzdG9yZSBhIHByZXZpb3VzbHkgY3JlYXRlZCBzbmFwc2hvdCwgaWYgdGhlcmUgaXMgYW55LgorICogVGhpcyBpcyBvbmx5IGRvbmUgaWYgdGhlIHNjcmVlbiBzaXplIGRpZG4ndCBjaGFuZ2UgYW5kIHRoZSB3aW5kb3cgbGF5b3V0IGlzCisgKiBzdGlsbCB0aGUgc2FtZS4KKyAqLworICAgIHN0YXRpYyB2b2lkCityZXN0b3JlX3NuYXBzaG90KGNsb3NlX2N1cndpbikKKyAgICBpbnQJCWNsb3NlX2N1cndpbjsJICAgIC8qIGNsb3NpbmcgY3VycmVudCB3aW5kb3cgKi8KK3sKKyAgICB3aW5fVAkqd3A7CisKKyAgICBpZiAoc25hcHNob3QgIT0gTlVMTAorIyBpZmRlZiBGRUFUX1ZFUlRTUExJVAorCSAgICAmJiBzbmFwc2hvdC0+ZnJfd2lkdGggPT0gdG9wZnJhbWUtPmZyX3dpZHRoCisjIGVuZGlmCisJICAgICYmIHNuYXBzaG90LT5mcl9oZWlnaHQgPT0gdG9wZnJhbWUtPmZyX2hlaWdodAorCSAgICAmJiBjaGVja19zbmFwc2hvdF9yZWMoc25hcHNob3QsIHRvcGZyYW1lKSA9PSBPSykKKyAgICB7CisJd3AgPSByZXN0b3JlX3NuYXBzaG90X3JlYyhzbmFwc2hvdCwgdG9wZnJhbWUpOworCXdpbl9jb21wX3BvcygpOworCWlmICh3cCAhPSBOVUxMICYmIGNsb3NlX2N1cndpbikKKwkgICAgd2luX2dvdG8od3ApOworCXJlZHJhd19hbGxfbGF0ZXIoQ0xFQVIpOworICAgIH0KKyAgICBjbGVhcl9zbmFwc2hvdCgpOworfQorCisvKgorICogQ2hlY2sgaWYgZnJhbWVzICJzbiIgYW5kICJmciIgaGF2ZSB0aGUgc2FtZSBsYXlvdXQsIHNhbWUgZm9sbG93aW5nIGZyYW1lcworICogYW5kIHNhbWUgY2hpbGRyZW4uCisgKi8KKyAgICBzdGF0aWMgaW50CitjaGVja19zbmFwc2hvdF9yZWMoc24sIGZyKQorICAgIGZyYW1lX1QJKnNuOworICAgIGZyYW1lX1QJKmZyOworeworICAgIGlmIChzbi0+ZnJfbGF5b3V0ICE9IGZyLT5mcl9sYXlvdXQKKwkgICAgfHwgKHNuLT5mcl9uZXh0ID09IE5VTEwpICE9IChmci0+ZnJfbmV4dCA9PSBOVUxMKQorCSAgICB8fCAoc24tPmZyX2NoaWxkID09IE5VTEwpICE9IChmci0+ZnJfY2hpbGQgPT0gTlVMTCkKKwkgICAgfHwgKHNuLT5mcl9uZXh0ICE9IE5VTEwKKwkJJiYgY2hlY2tfc25hcHNob3RfcmVjKHNuLT5mcl9uZXh0LCBmci0+ZnJfbmV4dCkgPT0gRkFJTCkKKwkgICAgfHwgKHNuLT5mcl9jaGlsZCAhPSBOVUxMCisJCSYmIGNoZWNrX3NuYXBzaG90X3JlYyhzbi0+ZnJfY2hpbGQsIGZyLT5mcl9jaGlsZCkgPT0gRkFJTCkpCisJcmV0dXJuIEZBSUw7CisgICAgcmV0dXJuIE9LOworfQorCisvKgorICogQ29weSB0aGUgc2l6ZSBvZiBzbmFwc2hvdCBmcmFtZSAic24iIHRvIGZyYW1lICJmciIuICBEbyB0aGUgc2FtZSBmb3IgYWxsCisgKiBmb2xsb3dpbmcgZnJhbWVzIGFuZCBjaGlsZHJlbi4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvbGQgY3VycmVudCB3aW5kb3csIG9yIE5VTEwuCisgKi8KKyAgICBzdGF0aWMgd2luX1QgKgorcmVzdG9yZV9zbmFwc2hvdF9yZWMoc24sIGZyKQorICAgIGZyYW1lX1QJKnNuOworICAgIGZyYW1lX1QJKmZyOworeworICAgIHdpbl9UCSp3cCA9IE5VTEw7CisgICAgd2luX1QJKndwMjsKKworICAgIGZyLT5mcl9oZWlnaHQgPSBzbi0+ZnJfaGVpZ2h0OworIyBpZmRlZiBGRUFUX1ZFUlRTUExJVAorICAgIGZyLT5mcl93aWR0aCA9IHNuLT5mcl93aWR0aDsKKyMgZW5kaWYKKyAgICBpZiAoZnItPmZyX2xheW91dCA9PSBGUl9MRUFGKQorICAgIHsKKwlmcmFtZV9uZXdfaGVpZ2h0KGZyLCBmci0+ZnJfaGVpZ2h0LCBGQUxTRSwgRkFMU0UpOworIyBpZmRlZiBGRUFUX1ZFUlRTUExJVAorCWZyYW1lX25ld193aWR0aChmciwgZnItPmZyX3dpZHRoLCBGQUxTRSk7CisjIGVuZGlmCisJd3AgPSBzbi0+ZnJfd2luOworICAgIH0KKyAgICBpZiAoc24tPmZyX25leHQgIT0gTlVMTCkKKyAgICB7CisJd3AyID0gcmVzdG9yZV9zbmFwc2hvdF9yZWMoc24tPmZyX25leHQsIGZyLT5mcl9uZXh0KTsKKwlpZiAod3AyICE9IE5VTEwpCisJICAgIHdwID0gd3AyOworICAgIH0KKyAgICBpZiAoc24tPmZyX2NoaWxkICE9IE5VTEwpCisgICAgeworCXdwMiA9IHJlc3RvcmVfc25hcHNob3RfcmVjKHNuLT5mcl9jaGlsZCwgZnItPmZyX2NoaWxkKTsKKwlpZiAod3AyICE9IE5VTEwpCisJICAgIHdwID0gd3AyOworICAgIH0KKyAgICByZXR1cm4gd3A7Cit9CisKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRkVBVF9HVUkpICYmIGRlZmluZWQoRkVBVF9WRVJUU1BMSVQpKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZXJlIGlzIGFueSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvdy4KKyAqLworICAgIGludAord2luX2hhc3ZlcnRzcGxpdCgpCit7CisgICAgZnJhbWVfVAkqZnI7CisKKyAgICBpZiAodG9wZnJhbWUtPmZyX2xheW91dCA9PSBGUl9ST1cpCisJcmV0dXJuIFRSVUU7CisKKyAgICBpZiAodG9wZnJhbWUtPmZyX2xheW91dCA9PSBGUl9DT0wpCisJZm9yIChmciA9IHRvcGZyYW1lLT5mcl9jaGlsZDsgZnIgIT0gTlVMTDsgZnIgPSBmci0+ZnJfbmV4dCkKKwkgICAgaWYgKGZyLT5mcl9sYXlvdXQgPT0gRlJfUk9XKQorCQlyZXR1cm4gVFJVRTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3dvcmtzaG9wLmMgYi9zcmMvd29ya3Nob3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGY0ZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3dvcmtzaG9wLmMKQEAgLTAsMCArMSwxODg1IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCVZpc3VhbCBXb3Jrc2hvcCBpbnRlZ3JhdGlvbiBieSBHb3Jkb24gUHJpZXVyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgImF1dG8vY29uZmlnLmgiCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaWZkZWYgSEFWRV9MSUJHRU5fSAorIyBpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WG0vWG0uaD4KKyNpbmNsdWRlIDxYbS9QdXNoQi5oPgorCisjaW5jbHVkZSAiaW50ZWdyYXRpb24uaCIJLyogPEVkaXRQbHVnaW4vaW50ZWdyYXRpb24uaD4gKi8KKworI2luY2x1ZGUgInZpbS5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJndWlfYmV2YWwuaCIKKyNpbmNsdWRlICJ3b3Jrc2hvcC5oIgorCit2b2lkCQkgd29ya3Nob3BfaG90a2V5cyhCb29sZWFuKTsKKworc3RhdGljIEJvb2xlYW4JIGlzU2hvd2luZyhpbnQpOworc3RhdGljIHdpbl9UCSpnZXRfd2luZG93KGJ1Zl9UICopOworI2lmIDAKK3N0YXRpYyBpbnQJIGdldF9idWZmZXJfbnVtYmVyKGJ1Zl9UICopOworI2VuZGlmCitzdGF0aWMgdm9pZAkgdXBkYXRlUHJpb3JpdHkoQm9vbGVhbik7CitzdGF0aWMgY2hhcgkqYWRkVW5pcXVlTW5lbW9uaWMoY2hhciAqLCBjaGFyICopOworc3RhdGljIGNoYXIJKmZpeHVwKGNoYXIgKik7CitzdGF0aWMgY2hhcgkqZ2V0X3NlbGVjdGlvbihidWZfVCAqKTsKK3N0YXRpYyBjaGFyCSphcHBlbmRfc2VsZWN0aW9uKGludCwgY2hhciAqLCBpbnQgKiwgaW50ICopOworc3RhdGljIHZvaWQJIGxvYWRfYnVmZmVyX2J5X25hbWUoY2hhciAqLCBpbnQpOworI2lmIDAKK3N0YXRpYyB2b2lkCSBsb2FkX2J1ZmZlcl9ieV9udW1iZXIoaW50LCBpbnQpOworI2VuZGlmCitzdGF0aWMgdm9pZAkgbG9hZF93aW5kb3coY2hhciAqLCBpbnQgbG51bSk7CitzdGF0aWMgdm9pZAkgd2FycF90b19wYyhpbnQpOworI2lmZGVmIEZFQVRfQkVWQUwKK3N0YXRpYyB2b2lkCSBiZXZhbENCKEJhbGxvb25FdmFsICosIGludCk7CisjZW5kaWYKK3N0YXRpYyBjaGFyCSpmaXhBY2NlbFRleHQoY2hhciAqKTsKK3N0YXRpYyB2b2lkCSBhZGRNZW51KGNoYXIgKiwgY2hhciAqLCBjaGFyICopOworc3RhdGljIGNoYXIJKmxvb2t1cFZlcmIoY2hhciAqLCBpbnQpOworc3RhdGljIGludAkgY29tcHV0ZUluZGV4KGludCwgY2hhcl91ICosIGludCk7CitzdGF0aWMgdm9pZAkgY29sb25jbWQoY2hhciAqLCBCb29sZWFuKTsKKworZXh0ZXJuIFdpZGdldAkgdmltU2hlbGw7CitleHRlcm4gV2lkZ2V0CSB0ZXh0QXJlYTsKK2V4dGVybiBYdEFwcENvbnRleHQgYXBwX2NvbnRleHQ7CisKK3N0YXRpYyBpbnQJIHRicHJpOwkJCS8qIFRvb2xCYXIgcHJpb3JpdHkgKi8KK2ludAkJIHVzaW5nU3VuV29ya1Nob3AgPSAwOwkvKiBzZXQgaWYgLXdzIGZsYWcgaXMgdXNlZCAqLworY2hhcgkJIGN1ck1lbnVOYW1lW0JVRlNJWl07CitjaGFyCQkgY3VyTWVudVByaW9yaXR5W0JVRlNJWl07CitCYWxsb29uRXZhbAkqYmFsbG9vbkV2YWw7CisKK3N0YXRpYyBCb29sZWFuCSB3b3Jrc2hvcEluaXREb25lID0gRmFsc2U7CitzdGF0aWMgQm9vbGVhbgkgd29ya3Nob3BIb3RLZXlzRW5hYmxlZCA9IEZhbHNlOworCisvKgorICogVGhlIGZvbGxvd2luZyBlbnVtIGlzIGZyb20gPGdwX2RieC9ncF9kYnhfY29tbW9uLmg+LiBXZSBjYW4ndCBpbmNsdWRlIGl0CisgKiBoZXJlIGJlY2F1c2UgaXRzIEMrKy4KKyAqLworZW51bQoreworICAgIEdQTGluZUV2YWxfRVZBTFVBVEUsCQkvKiBldmFsdWF0ZSBleHByZXNzaW9uICovCisgICAgR1BMaW5lRXZhbF9JTkRJUkVDVCwJCS8qIGV2YWx1YXRlICo8ZXhwcmVzc2lvbj4gKi8KKyAgICBHUExpbmVFdmFsX1RZUEUJCQkvKiB0eXBlIG9mIGV4cHJlc3Npb24gKi8KK307CisKKy8qCisgKiBTdG9yZSBlYWNoIHZlcmIgaW4gdGhlIE1lbnVNYXAuIFRoaXMgbGV0cyB1cyBtYXAgZnJvbSBhIHZlcmIgdG8gYSBtZW51LgorICogVGhlcmUgbWF5IGJlIG11bHRpcGxlIG1hdGNoZXMgZm9yIGEgc2luZ2xlIHZlcmIgaW4gdGhpcyB0YWJsZS4KKyAqLworI2RlZmluZSBNRU5VX0lOQwk1MAkJLyogbWVudU1hcCBpbmNyZW1lbnRhbCBzaXplIGluY3JlYXNlcyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBjaGFyCSpuYW1lOwkJCS8qIG5hbWUgb2YgdGhlIG1lbnUgKi8KKyAgICBjaGFyCSphY2NlbDsJCQkvKiBvcHRpb25hbCBhY2NlbGVyYXRvciBrZXkgKi8KKyAgICBjaGFyCSp2ZXJiOwkJCS8qIG1lbnUgdmVyYiAqLworfSBNZW51TWFwOworc3RhdGljIE1lbnVNYXAJKm1lbnVNYXA7CQkvKiBsaXN0IG9mIHZlcmIvbWVudSBtYXBwaW5ncyAqLworc3RhdGljIGludAkgbWVudU1hcFNpemU7CQkvKiBjdXJyZW50IHNpemUgb2YgbWVudU1hcCAqLworc3RhdGljIGludAkgbWVudU1hcE1heDsJCS8qIGFsbG9jYXRlZCBzaXplIG9mIG1lbnVNYXAgKi8KK3N0YXRpYyBjaGFyCSppbml0aWFsRmlsZUNtZDsJLyogc2F2ZSBjb21tYW5kIGJ1dCBkZWZlciBkb2luZyBpdCAqLworCisKKyAgICB2b2lkCit3b3Jrc2hvcF9pbml0KCkKK3sKKyAgICBjaGFyX3UJIGJ1Zls2NF07CisgICAgaW50CQkgaXNfZGlydHkgPSBGQUxTRTsKKyAgICBpbnQJCSB3aWR0aCwgaGVpZ2h0OworICAgIFh0SW5wdXRNYXNrCSBtYXNrOworCisgICAgLyoKKyAgICAgKiBUdXJuIG9uIE1lbnVCYXIsIFRvb2xCYXIsIGFuZCBGb290ZXIuCisgICAgICovCisgICAgU1RSQ1BZKGJ1ZiwgcF9nbyk7CisgICAgaWYgKHZpbV9zdHJjaHIocF9nbywgR09fTUVOVVMpID09IE5VTEwpCisgICAgeworCVNUUkNBVChidWYsICJtIik7CisJaXNfZGlydHkgPSBUUlVFOworICAgIH0KKyAgICBpZiAodmltX3N0cmNocihwX2dvLCBHT19UT09MQkFSKSA9PSBOVUxMKQorICAgIHsKKwlTVFJDQVQoYnVmLCAiVCIpOworCWlzX2RpcnR5ID0gVFJVRTsKKyAgICB9CisgICAgaWYgKHZpbV9zdHJjaHIocF9nbywgR09fRk9PVEVSKSA9PSBOVUxMKQorICAgIHsKKwlTVFJDQVQoYnVmLCAiRiIpOworCWlzX2RpcnR5ID0gVFJVRTsKKyAgICB9CisgICAgaWYgKGlzX2RpcnR5KQorCXNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJnbyIsIDBMLCBidWYsIDApOworCisgICAgLyoKKyAgICAgKiBTZXQgc2l6ZSBmcm9tIHdvcmtzaG9wX2dldF93aWR0aF9oZWlnaHQoKS4KKyAgICAgKi8KKyAgICB3aWR0aCA9IGhlaWdodCA9IDA7CisgICAgaWYgKHdvcmtzaG9wX2dldF93aWR0aF9oZWlnaHQoJndpZHRoLCAmaGVpZ2h0KSkKKyAgICB7CisJWHRWYVNldFZhbHVlcyh2aW1TaGVsbCwKKwkJWG1Od2lkdGgsIHdpZHRoLAorCQlYbU5oZWlnaHQsIGhlaWdodCwKKwkJTlVMTCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3cgcmVhZCBpbiB0aGUgaW5pdGlhbCBtZXNzYWdlcyBmcm9tIGVzZXJ2ZS4KKyAgICAgKi8KKyAgICB3aGlsZSAoKG1hc2sgPSBYdEFwcFBlbmRpbmcoYXBwX2NvbnRleHQpKQorCSAgICAmJiAobWFzayAmIFh0SU1BbHRlcm5hdGVJbnB1dCkgJiYgIXdvcmtzaG9wSW5pdERvbmUpCisJWHRBcHBQcm9jZXNzRXZlbnQoYXBwX2NvbnRleHQsIChYdElucHV0TWFzaylYdElNQWx0ZXJuYXRlSW5wdXQpOworfQorCisgICAgdm9pZAord29ya3Nob3BfcG9zdGluaXQoKQoreworICAgIGRvX2NtZGxpbmVfY21kKChjaGFyX3UgKilpbml0aWFsRmlsZUNtZCk7CisgICAgQUxUX0lOUFVUX0xPQ0tfT0ZGOworICAgIGZyZWUoaW5pdGlhbEZpbGVDbWQpOworICAgIGluaXRpYWxGaWxlQ21kID0gTlVMTDsKK30KKworICAgIHZvaWQKK2V4X3dzdmVyYihleGFyZ19UICplYXApCit7CisgICAgbXNnX2Nscl9jbWRsaW5lKCk7CisgICAgd29ya3Nob3BfcGVyZm9ybV92ZXJiKChjaGFyICopIGVhcC0+YXJnLCBOVUxMKTsKK30KKworLyoKKyAqIEVkaXRvciBuYW1lCisgKiBUaGlzIHN0cmluZyBpcyByZWNvZ25pemVkIGJ5IGVzZXJ2ZSBhbmQgc2hvdWxkIGJlIGFsbCBsb3dlciBjYXNlLgorICogVGhpcyBpcyBob3cgdGhlIGVkaXRvciBkZXRlY3RzIHRoYXQgaXQgaXMgdGFsa2luZyB0byBndmltIGluc3RlYWQKKyAqIG9mIE5FZGl0LCBmb3IgZXhhbXBsZSwgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBpbml0aWF0ZWQgZnJvbSB0aGUgZWRpdG9yLgorICovCisgICAgY2hhciAqCit3b3Jrc2hvcF9nZXRfZWRpdG9yX25hbWUoKQoreworICAgIHJldHVybiAiZ3ZpbSI7Cit9CisKKy8qCisgKiBWZXJzaW9uIG51bWJlciBvZiB0aGUgZWRpdG9yLgorICogVGhpcyBudW1iZXIgaXMgY29tbXVuaWNhdGVkIGFsb25nIHdpdGggdGhlIHByb3RvY29sCisgKiB2ZXJzaW9uIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAqLworICAgIGNoYXIgKgord29ya3Nob3BfZ2V0X2VkaXRvcl92ZXJzaW9uKCkKK3sKKyAgICByZXR1cm4gVmVyc2lvbjsKK30KKworLyoKKyAqIEFuc3dlciBmdW5jdGlvbnM6IGNhbGxlZCBieSBlc2VydmUKKyAqLworCisvKgorICogTmFtZToKKyAqCXdvcmtzaG9wX2xvYWRfZmlsZQorICoKKyAqIEZ1bmN0aW9uOgorICoJTG9hZCBhIGdpdmVuIGZpbGUgaW50byB0aGUgV29ya1Nob3AgYnVmZmVyLgorICovCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCit3b3Jrc2hvcF9sb2FkX2ZpbGUoCisJY2hhcgkqZmlsZW5hbWUsCQkvKiB0aGUgZmlsZSB0byBsb2FkICovCisJaW50CSBsaW5lLAkJCS8qIGFuIG9wdGlvbmFsIGxpbmUgbnVtYmVyIChvciAwKSAqLworCWNoYXIJKmZyYW1laWQpCQkvKiB1c2VkIGZvciBtdWx0aS1mcmFtZSBzdXBwb3J0ICovCit7CisjaWZkZWYgV1NERUJVR19UUkFDRQorICAgIGlmIChXU0RMRVZFTChXU19UUkFDRV9WRVJCT1NFIHwgV1NfVFJBQ0UpKQorCXdzdHJhY2UoIndvcmtzaG9wX2xvYWRfZmlsZSglcywgJWQpXG4iLCBmaWxlbmFtZSwgbGluZSk7CisjZW5kaWYKKworI2lmZGVmIEZFQVRfQkVWQUwKKyAgICBpZiAoYmFsbG9vbkV2YWwgPT0gTlVMTCkKKyAgICB7CisJLyoKKwkgKiBTZXQgdXAgdGhlIEJhbGxvb24gRXhwcmVzc2lvbiBFdmFsdWF0aW9uIGFyZWEuCisJICogSXQncyBlbmFibGVkIGJ5IGRlZmF1bHQuICBEaXNhYmxlIGl0IHdoZW4gJ2JhbGxvb25ldmFsJyBpcyBvZmYuCisJICovCisjIGlmZGVmIEZFQVRfR1VJX0dUSworCWJhbGxvb25FdmFsID0gZ3VpX21jaF9jcmVhdGVfYmV2YWxfYXJlYShndWkuZHJhd2FyZWEsIE5VTEwsCisJCQkJCQkJICAgICAgJmJldmFsQ0IsIE5VTEwpOworIyBlbHNlCisJYmFsbG9vbkV2YWwgPSBndWlfbWNoX2NyZWF0ZV9iZXZhbF9hcmVhKHRleHRBcmVhLCBOVUxMLCBiZXZhbENCLCBOVUxMKTsKKyMgZW5kaWYKKwlpZiAoIXBfYmV2YWwpCisJICAgIGd1aV9tY2hfZGlzYWJsZV9iZXZhbF9hcmVhKGJhbGxvb25FdmFsKTsKKyAgICB9CisjZW5kaWYKKworICAgIGxvYWRfd2luZG93KGZpbGVuYW1lLCBsaW5lKTsKK30KKworLyoKKyAqIFJlbG9hZCB0aGUgV29ya1Nob3AgYnVmZmVyCisgKi8KKyAgICB2b2lkCit3b3Jrc2hvcF9yZWxvYWRfZmlsZSgKKwljaGFyCSpmaWxlbmFtZSwKKwlpbnQJIGxpbmUpCit7CisjaWZkZWYgV1NERUJVR19UUkFDRQorICAgIGlmIChXU0RMRVZFTChXU19UUkFDRV9WRVJCT1NFIHwgV1NfVFJBQ0UpKQorCXdzdHJhY2UoIndvcmtzaG9wX3JlbG9hZF9maWxlKCVzLCAlZClcbiIsIGZpbGVuYW1lLCBsaW5lKTsKKyNlbmRpZgorICAgIGxvYWRfd2luZG93KGZpbGVuYW1lLCBsaW5lKTsKK30KKworICAgIHZvaWQKK3dvcmtzaG9wX3Nob3dfZmlsZSgKKyAgICBjaGFyCSpmaWxlbmFtZSkKK3sKKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisJd3N0cmFjZSgid29ya3Nob3Bfc2hvd19maWxlKCVzKVxuIiwgZmlsZW5hbWUpOworI2VuZGlmCisKKyAgICBsb2FkX3dpbmRvdyhmaWxlbmFtZSwgMCk7Cit9CisKKyAgICB2b2lkCit3b3Jrc2hvcF9nb3RvX2xpbmUoCisgICAgY2hhcgkqZmlsZW5hbWUsCisgICAgaW50CQkgbGluZW5vKQoreworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9nb3RvX2xpbmUoJXMsICVkKVxuIiwgZmlsZW5hbWUsIGxpbmVubyk7CisjZW5kaWYKKworICAgIGxvYWRfd2luZG93KGZpbGVuYW1lLCBsaW5lbm8pOworfQorCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCit3b3Jrc2hvcF9mcm9udF9maWxlKAorCWNoYXIJKmZpbGVuYW1lKQoreworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9mcm9udF9maWxlKClcbiIpOworI2VuZGlmCisgICAgLyoKKyAgICAgKiBBc3N1bXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCBhZnRlciBhIGNhbGwgdG8KKyAgICAgKiB3b3Jrc2hvcF9zaG93X2ZpbGUoKSwgc28gdGhlIGZpbGUgaXMgYWx3YXlzIHNob3dpbmcuCisgICAgICovCisgICAgaWYgKHZpbVNoZWxsICE9IE5VTEwpCisJWFJhaXNlV2luZG93KGd1aS5kcHksIFh0V2luZG93KHZpbVNoZWxsKSk7Cit9CisKKyAgICB2b2lkCit3b3Jrc2hvcF9zYXZlX2ZpbGUoCisJICAgIGNoYXIJKmZpbGVuYW1lKQoreworICAgIGNoYXIJIGNidWZbQlVGU0laXTsJCS8qIGJ1aWxkIHZpbSBjb21tYW5kIGhlcmUgKi8KKworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9zYXZlX2ZpbGUoJXMpXG4iLCBmaWxlbmFtZSk7CisjZW5kaWYKKworICAgIC8qIFNhdmUgdGhlIGdpdmVuIGZpbGUgKi8KKyAgICBzcHJpbnRmKGNidWYsICJ3ICVzIiwgZmlsZW5hbWUpOworICAgIGNvbG9uY21kKGNidWYsIFRSVUUpOworfQorCisgICAgdm9pZAord29ya3Nob3Bfc2F2ZV9maWxlcygpCit7CisgICAgLyogU2F2ZSB0aGUgZ2l2ZW4gZmlsZSAqLworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9zYXZlX2ZpbGVzKClcbiIpOworI2VuZGlmCisKKyAgICBhZGRfdG9faW5wdXRfYnVmKChjaGFyX3UgKikgIjp3YWxsXG4iLCA2KTsKK30KKworICAgIHZvaWQKK3dvcmtzaG9wX3F1aXQoKQoreworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9xdWl0KClcbiIpOworI2VuZGlmCisKKyAgICBhZGRfdG9faW5wdXRfYnVmKChjaGFyX3UgKikgIjpxYWxsXG4iLCA2KTsKK30KKworICAgIHZvaWQKK3dvcmtzaG9wX21pbmltaXplKCkKK3sKKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisJd3N0cmFjZSgid29ya3Nob3BfbWluaW1pemUoKVxuIik7CisjZW5kaWYKKyAgICB3b3Jrc2hvcF9taW5pbWl6ZV9zaGVsbCh2aW1TaGVsbCk7Cit9CisgICAgdm9pZAord29ya3Nob3BfbWF4aW1pemUoKQoreworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9tYXhpbWl6ZSgpXG4iKTsKKyNlbmRpZgorCisgICAgd29ya3Nob3BfbWF4aW1pemVfc2hlbGwodmltU2hlbGwpOworfQorCisgICAgdm9pZAord29ya3Nob3BfYWRkX21hcmtfdHlwZSgKKwlpbnQJCSBpZHgsCisJY2hhcgkJKmNvbG9yc3BlYywKKwljaGFyCQkqc2lnbikKK3sKKyAgICBjaGFyCSBnYnVmW0JVRlNJWl07CS8qIGJ1ZmZlciBmb3Igc2lnbiBuYW1lICovCisgICAgY2hhcgkgY2lidWZbQlVGU0laXTsJLyogY29sb3IgaW5mb3JtYXRpb24gKi8KKyAgICBjaGFyCSBjYnVmW0JVRlNJWl07CS8qIGNvbW1hbmQgYnVmZmVyICovCisgICAgY2hhcgkqYnA7CisKKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisgICAgeworCWNoYXIgKmNwOworCisJY3AgPSBzdHJyY2hyKHNpZ24sICcvJyk7CisJaWYgKGNwID09IE5VTEwpCisJICAgIGNwID0gc2lnbjsKKwllbHNlCisJICAgIGNwKys7CQkvKiBza2lwICcvJyBjaGFyYWN0ZXIgKi8KKwl3c3RyYWNlKCJ3b3Jrc2hvcF9hZGRfbWFya190eXBlKCVkLCBcIiVzXCIsIFwiJXNcIilcbiIsIGlkeCwKKwkJY29sb3JzcGVjICYmICpjb2xvcnNwZWMgPyBjb2xvcnNwZWMgOiAiPE5vbmU+IiwgY3ApOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBJc29sYXRlIHRoZSBiYXNlbmFtZSBvZiBzaWduIGluIGdidWYuIFdlIHdpbGwgdXNlIHRoaXMgZm9yIHRoZQorICAgICAqIEdyb3VwTmFtZSBpbiB0aGUgaGlnaGxpZ2h0IGNvbW1hbmQgc2VudCB0byB2aW0uCisgICAgICovCisgICAgU1RSQ1BZKGdidWYsIGdldHRhaWwoKGNoYXJfdSAqKXNpZ24pKTsKKyAgICBicCA9IHN0cnJjaHIoZ2J1ZiwgJy4nKTsKKyAgICBpZiAoYnAgIT0gTlVMTCkKKwkqYnAgPSBOVUw7CisKKyAgICBpZiAoZ2J1ZlswXSAhPSAnLScgJiYgZ2J1ZlsxXSAhPSBOVUwpCisgICAgeworCWlmIChjb2xvcnNwZWMgIT0gTlVMTCAmJiAqY29sb3JzcGVjKQorCXsKKwkgICAgc3ByaW50ZihjYnVmLCAiaGlnaGxpZ2h0IFdTJXMgZ3VpYmc9JXMiLCBnYnVmLCBjb2xvcnNwZWMpOworCSAgICBjb2xvbmNtZChjYnVmLCBGQUxTRSk7CisJICAgIHNwcmludGYoY2lidWYsICJsaW5laGw9V1MlcyIsIGdidWYpOworCX0KKwllbHNlCisJICAgIGNpYnVmWzBdID0gTlVMOworCisJc3ByaW50ZihjYnVmLCAic2lnbiBkZWZpbmUgJWQgJXMgaWNvbj0lcyIsIGlkeCwgY2lidWYsIHNpZ24pOworCWNvbG9uY21kKGNidWYsIFRSVUUpOworICAgIH0KK30KKworICAgIHZvaWQKK3dvcmtzaG9wX3NldF9tYXJrKAorCWNoYXIJCSpmaWxlbmFtZSwJLyogZmlsZW5hbWUgd2hpY2ggZ2V0cyB0aGUgbWFyayAqLworCWludAkJIGxpbmVubywJLyogbGluZSBudW1iZXIgd2hpY2ggZ2V0cyB0aGUgbWFyayAqLworCWludAkJIG1hcmtJZCwJLyogdW5pcXVlIG1hcmsgaWRlbnRpZmllciAqLworCWludAkJIGlkeCkJCS8qIHdoaWNoIG1hcmsgdG8gdXNlICovCit7CisgICAgY2hhcgljYnVmW0JVRlNJWl07CS8qIGNvbW1hbmQgYnVmZmVyICovCisKKyAgICAvKiBTZXQgbWFyayBpbiBhIGdpdmVuIGZpbGUgKi8KKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisJd3N0cmFjZSgid29ya3Nob3Bfc2V0X21hcmsoJXMsICVkIChsbiksICVkIChpZCksICVkIChpZHgpKVxuIiwKKwkJZmlsZW5hbWUsIGxpbmVubywgbWFya0lkLCBpZHgpOworI2VuZGlmCisKKyAgICBzcHJpbnRmKGNidWYsICJzaWduIHBsYWNlICVkIGxpbmU9JWQgbmFtZT0lZCBmaWxlPSVzIiwKKwkJCQkJICAgICAgIG1hcmtJZCwgbGluZW5vLCBpZHgsIGZpbGVuYW1lKTsKKyAgICBjb2xvbmNtZChjYnVmLCBUUlVFKTsKK30KKworICAgIHZvaWQKK3dvcmtzaG9wX2NoYW5nZV9tYXJrX3R5cGUoCisJY2hhcgkJKmZpbGVuYW1lLAkvKiBmaWxlbmFtZSB3aGljaCBnZXRzIHRoZSBtYXJrICovCisJaW50CQkgbWFya0lkLAkvKiB1bmlxdWUgbWFyayBpZGVudGlmaWVyICovCisJaW50CQkgaWR4KQkJLyogd2hpY2ggbWFyayB0byB1c2UgKi8KK3sKKyAgICBjaGFyCWNidWZbQlVGU0laXTsJLyogY29tbWFuZCBidWZmZXIgKi8KKworICAgIC8qIENoYW5nZSBtYXJrIHR5cGUgKi8KKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisJd3N0cmFjZSgid29ya3Nob3BfY2hhbmdlX21hcmtfdHlwZSglcywgJWQsICVkKVxuIiwKKwkJZmlsZW5hbWUsIG1hcmtJZCwgaWR4KTsKKyNlbmRpZgorCisgICAgc3ByaW50ZihjYnVmLCAic2lnbiBwbGFjZSAlZCBuYW1lPSVkIGZpbGU9JXMiLCBtYXJrSWQsIGlkeCwgZmlsZW5hbWUpOworICAgIGNvbG9uY21kKGNidWYsIFRSVUUpOworfQorCisvKgorICogR290byB0aGUgZ2l2ZW4gbWFyayBpbiBhIGZpbGUgKGUuZy4gc2hvdyBpdCkuCisgKiBJZiBtZXNzYWdlIGlzIG5vdCBudWxsLCBkaXNwbGF5IGl0IGluIHRoZSBmb290ZXIuCisgKi8KKyAgICB2b2lkCit3b3Jrc2hvcF9nb3RvX21hcmsoCisJY2hhcgkJKmZpbGVuYW1lLAorCWludAkJIG1hcmtJZCwKKwljaGFyCQkqbWVzc2FnZSkKK3sKKyAgICBjaGFyCWNidWZbQlVGU0laXTsJLyogY29tbWFuZCBidWZmZXIgKi8KKworICAgIC8qIEdvdG8gbWFyayAqLworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9nb3RvX21hcmsoJXMsICVkIChpZCksICVzKVxuIiwKKwkJZmlsZW5hbWUsIG1hcmtJZCwgbWVzc2FnZSAmJiAqbWVzc2FnZSAmJgorCQkhKCptZXNzYWdlID09ICcgJyAmJiBtZXNzYWdlWzFdID09IE5VTEwpID8KKwkJbWVzc2FnZSA6ICI8Tm9uZT4iKTsKKyNlbmRpZgorCisgICAgc3ByaW50ZihjYnVmLCAic2lnbiBqdW1wICVkIGZpbGU9JXMiLCBtYXJrSWQsIGZpbGVuYW1lKTsKKyAgICBjb2xvbmNtZChjYnVmLCBUUlVFKTsKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMICYmICptZXNzYWdlICE9IE5VTCkKKwlndWlfbWNoX3NldF9mb290ZXIoKGNoYXJfdSAqKW1lc3NhZ2UpOworfQorCisgICAgdm9pZAord29ya3Nob3BfZGVsZXRlX21hcmsoCisJY2hhcgkJKmZpbGVuYW1lLAorCWludAkJIG1hcmtJZCkKK3sKKyAgICBjaGFyCWNidWZbQlVGU0laXTsJLyogY29tbWFuZCBidWZmZXIgKi8KKworICAgIC8qIERlbGV0ZSBtYXJrICovCisjaWZkZWYgV1NERUJVR19UUkFDRQorICAgIGlmIChXU0RMRVZFTChXU19UUkFDRV9WRVJCT1NFIHwgV1NfVFJBQ0UpKQorCXdzdHJhY2UoIndvcmtzaG9wX2RlbGV0ZV9tYXJrKCVzLCAlZCAoaWQpKVxuIiwKKwkJZmlsZW5hbWUsIG1hcmtJZCk7CisjZW5kaWYKKworICAgIHNwcmludGYoY2J1ZiwgInNpZ24gdW5wbGFjZSAlZCBmaWxlPSVzIiwgbWFya0lkLCBmaWxlbmFtZSk7CisgICAgY29sb25jbWQoY2J1ZiwgVFJVRSk7Cit9CisKKyNpZiAwCS8qIG5vdCB1c2VkICovCisgICAgdm9pZAord29ya3Nob3BfZGVsZXRlX2FsbF9tYXJrcygKKyAgICB2b2lkCSp3aW5kb3csCisgICAgQm9vbGVhbgkgZG9SZWZyZXNoKQoreworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9kZWxldGVfYWxsX21hcmtzKCUjeCwgJXMpXG4iLAorCQl3aW5kb3csIGRvUmVmcmVzaCA/ICJUcnVlIiA6ICJGYWxzZSIpOworI2VuZGlmCisKKyAgICBjb2xvbmNtZCgic2lnbiB1bnBsYWNlICoiLCBUUlVFKTsKK30KKyNlbmRpZgorCisgICAgaW50Cit3b3Jrc2hvcF9nZXRfbWFya19saW5lbm8oCisJY2hhcgkqZmlsZW5hbWUsCisJaW50CSBtYXJrSWQpCit7CisgICAgYnVmX1QJKmJ1ZjsJCS8qIGJ1ZmZlciBjb250YWluaW5nIGZpbGVuYW1lICovCisgICAgaW50CQlsaW5lbm87CQkvKiBsaW5lIG51bWJlciBvZiBmaWxlbmFtZSBpbiBidWYgKi8KKworICAgIC8qIEdldCBtYXJrIGxpbmUgbnVtYmVyICovCisjaWZkZWYgV1NERUJVR19UUkFDRQorICAgIGlmIChXU0RMRVZFTChXU19UUkFDRV9WRVJCT1NFIHwgV1NfVFJBQ0UpKQorCXdzdHJhY2UoIndvcmtzaG9wX2dldF9tYXJrX2xpbmVubyglcywgJWQpXG4iLAorCQlmaWxlbmFtZSwgbWFya0lkKTsKKyNlbmRpZgorCisgICAgbGluZW5vID0gMDsKKyAgICBidWYgPSBidWZsaXN0X2ZpbmRuYW1lKChjaGFyX3UgKilmaWxlbmFtZSk7CisgICAgaWYgKGJ1ZiAhPSBOVUxMKQorCWxpbmVubyA9IGJ1Zl9maW5kc2lnbihidWYsIG1hcmtJZCk7CisKKyAgICByZXR1cm4gbGluZW5vOworfQorCisKKyNpZiAwCS8qIG5vdCB1c2VkICovCisgICAgdm9pZAord29ya3Nob3BfYWRqdXN0X21hcmtzKFdpZGdldCAqd2luZG93LCBpbnQgcG9zLAorCQkJaW50IGluc2VydGVkLCBpbnQgZGVsZXRlZCkKK3sKKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisJd3N0cmFjZSgiWFhYd29ya3Nob3BfYWRqdXN0X21hcmtzKCVzLCAlZCwgJWQsICVkKVxuIiwKKwkJd2luZG93ID8gWHROYW1lKHdpbmRvdykgOiAiPE5vbmU+IiwgcG9zLCBpbnNlcnRlZCwgZGVsZXRlZCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKgorICogQXJlIHRoZXJlIGFueSBtb3ZlZCBtYXJrcz8gSWYgc28sIGNhbGwgd29ya3Nob3BfbW92ZV9tYXJrIG9uCisgKiBlYWNoIG9mIHRoZW0gbm93LiBUaGlzIGlzIGhvdyBlc2VydmUgY2FuIGZpbmQgb3V0IGlmIGZvciBleGFtcGxlCisgKiBicmVha3BvaW50cyBoYXZlIG1vdmVkIHdoZW4gYSBwcm9ncmFtIGhhcyBiZWVuIHJlY29tcGlsZWQgYW5kCisgKiByZWxvYWRlZCBpbnRvIGRieC4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAord29ya3Nob3BfbW92ZWRfbWFya3MoY2hhciAqZmlsZW5hbWUpCit7CisjaWZkZWYgV1NERUJVR19UUkFDRQorICAgIGlmIChXU0RMRVZFTChXU19UUkFDRV9WRVJCT1NFIHwgV1NfVFJBQ0UpKQorCXdzdHJhY2UoIlhYWHdvcmtzaG9wX21vdmVkX21hcmtzKCVzKVxuIiwgZmlsZW5hbWUpOworI2VuZGlmCit9CisKKyAgICBpbnQKK3dvcmtzaG9wX2dldF9mb250X2hlaWdodCgpCit7CisgICAgWG1Gb250TGlzdAkgZm9udExpc3Q7CS8qIGZvbnRMaXN0IG1hZGUgZnJvbSBndWkubm9ybV9mb250ICovCisgICAgWG1TdHJpbmcJIHN0cjsKKyAgICBEaW1lbnNpb24JIHc7CisgICAgRGltZW5zaW9uCSBoOworCisjaWZkZWYgV1NERUJVR19UUkFDRQorICAgIGlmIChXU0RMRVZFTChXU19UUkFDRV9WRVJCT1NFIHwgV1NfVFJBQ0UpKQorCXdzdHJhY2UoIndvcmtzaG9wX2dldF9mb250X2hlaWdodCgpXG4iKTsKKyNlbmRpZgorCisgICAgLyogUGljayB0aGUgcHJvcGVyIHNpZ25zIGZvciB0aGlzIGZvbnQgc2l6ZSAqLworICAgIGZvbnRMaXN0ID0gZ3VpX21vdGlmX2NyZWF0ZV9mb250bGlzdCgoWEZvbnRTdHJ1Y3QgKilndWkubm9ybV9mb250KTsKKyAgICBoID0gMDsKKyAgICBpZiAoZm9udExpc3QgIT0gTlVMTCkKKyAgICB7CisJc3RyID0gWG1TdHJpbmdDcmVhdGVMb2NhbGl6ZWQoIkEiKTsKKwlYbVN0cmluZ0V4dGVudChmb250TGlzdCwgc3RyLCAmdywgJmgpOworCVhtU3RyaW5nRnJlZShzdHIpOworCVhtRm9udExpc3RGcmVlKGZvbnRMaXN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gKGludCloOworfQorCisvKkFSR1NVU0VEKi8KKyAgICB2b2lkCit3b3Jrc2hvcF9mb290ZXJfbWVzc2FnZSgKKwljaGFyCQkqbWVzc2FnZSwKKwlpbnQJCSBzZXZlcml0eSkJLyogc2V2ZXJpdHkgaXMgY3VycmVudGx5IHVudXNlZCAqLworeworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9mb290ZXJfbWVzc2FnZSglcywgJWQpXG4iLCBtZXNzYWdlLCBzZXZlcml0eSk7CisjZW5kaWYKKworICAgIGd1aV9tY2hfc2V0X2Zvb3RlcigoY2hhcl91ICopIG1lc3NhZ2UpOworfQorCisvKgorICogd29ya3Nob3BfbWVudV9iZWdpbigpIGlzIHBhc3NlZCB0aGUgbWVudSBuYW1lLiBXZSBkZXRlcm1pbmUgaXRzIG1uZW1vbmljCisgKiBoZXJlIGFuZCBzdG9yZSBpdHMgbmFtZSBhbmQgcHJpb3JpdHkuCisgKi8KKyAgICB2b2lkCit3b3Jrc2hvcF9tZW51X2JlZ2luKAorCWNoYXIJCSpsYWJlbCkKK3sKKyAgICB2aW1tZW51X1QJKm1lbnU7CQkJLyogcG9pbnRlciB0byBsYXN0IG1lbnUgKi8KKyAgICBpbnQJCW1lbnVQcmlvcml0eSA9IDA7CS8qIHByaW9yaXR5IG9mIG5ldyBtZW51ICovCisgICAgY2hhcgltbmVtYnVmWzY0XTsJCS8qIHN0b3JlIG1lbnViYXIgbW5lbW9uaWNzIGhlcmUgKi8KKyAgICBjaGFyCSpuYW1lOwkJCS8qIGxhYmVsIHdpdGggYSBtbmVtb25pYyAqLworICAgIGNoYXIJKnA7CQkJLyogdXNlZCB0byBmaW5kIG1uZW1vbmljcyAqLworICAgIGludAkJaWR4OwkJCS8qIGluZGV4IGludG8gbW5lbWJ1ZiAqLworCisjaWZkZWYgV1NERUJVR19UUkFDRQorICAgIGlmIChXU0RMRVZFTChXU19UUkFDRV9WRVJCT1NFIHwgV1NfVFJBQ0UpKQorCXdzdHJhY2UoIndvcmtzaG9wX21lbnVfYmVnaW4oKVxuIik7CisjZW5kaWYKKworICAgIC8qCisgICAgICogTG9vayB0aHJvdWdoIGFsbCBleGlzdGluZyAobm9uLVBvcFVwIGFuZCBub24tVG9vbGJhcikgbWVudXMKKyAgICAgKiBhbmQgZ2F0aGVyIHRoZWlyIG1uZW1vbmljcy4gVXNlIHRoaXMgbGlzdCB0byBkZWNpZGUgd2hhdAorICAgICAqIG1uZW1vbmljIHNob3VsZCBiZSB1c2VkIGZvciBsYWJlbC4KKyAgICAgKi8KKworICAgIGlkeCA9IDA7CisgICAgbW5lbWJ1ZltpZHgrK10gPSAnSCc7CQkvKiBIIGlzIG1uZW1vbmljIGZvciBIZWxwICovCisgICAgZm9yIChtZW51ID0gcm9vdF9tZW51OyBtZW51ICE9IE5VTEw7IG1lbnUgPSBtZW51LT5uZXh0KQorICAgIHsKKwlpZiAobWVudV9pc19tZW51YmFyKG1lbnUtPm5hbWUpKQorCXsKKwkgICAgcCA9IHN0cmNocigoY2hhciAqKW1lbnUtPm5hbWUsICcmJyk7CisJICAgIGlmIChwICE9IE5VTEwpCisJCW1uZW1idWZbaWR4KytdID0gKisrcDsKKwl9CisJaWYgKG1lbnUtPm5leHQgIT0gTlVMTAorCQkmJiBzdHJjbXAoKGNoYXIgKikgbWVudS0+bmV4dC0+ZG5hbWUsICJIZWxwIikgPT0gMCkKKwl7CisJICAgIG1lbnVQcmlvcml0eSA9IG1lbnUtPnByaW9yaXR5ICsgMTA7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgbW5lbWJ1ZltpZHgrK10gPSBOVUw7CisgICAgbmFtZSA9IGFkZFVuaXF1ZU1uZW1vbmljKG1uZW1idWYsIGxhYmVsKTsKKworICAgIHNwcmludGYoY3VyTWVudU5hbWUsICIlcyIsIG5hbWUpOworICAgIHNwcmludGYoY3VyTWVudVByaW9yaXR5LCAiJWQuMCIsIG1lbnVQcmlvcml0eSk7Cit9CisKKy8qCisgKiBBcHBlbmQgdGhlIG5hbWUgYW5kIHByaW9yaXR5IHRvIHN0cmluZ3MgdG8gYmUgdXNlZCBpbiB2aW0gbWVudSBjb21tYW5kcy4KKyAqLworICAgIHZvaWQKK3dvcmtzaG9wX3N1Ym1lbnVfYmVnaW4oCisJY2hhcgkJKmxhYmVsKQoreworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAod3NfZGVidWcgICYmIHdzX2RsZXZlbCAmIFdTX1RSQUNFCisJICAgICYmIHN0cm5jbXAoY3VyTWVudU5hbWUsICJUb29sQmFyIiwgNykgIT0gMCkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9zdWJtZW51X2JlZ2luKCVzKVxuIiwgbGFiZWwpOworI2VuZGlmCisKKyAgICBzdHJjYXQoY3VyTWVudU5hbWUsICIuIik7CisgICAgc3RyY2F0KGN1ck1lbnVOYW1lLCBmaXh1cChsYWJlbCkpOworCisgICAgdXBkYXRlUHJpb3JpdHkoVHJ1ZSk7Cit9CisKKy8qCisgKiBSZW1vdmUgdGhlIHN1Ym1lbnUgbmFtZSBhbmQgcHJpb3JpdHkgZnJvbSBjdXJNZW51Ki4KKyAqLworCisgICAgdm9pZAord29ya3Nob3Bfc3VibWVudV9lbmQoKQoreworICAgIGNoYXIJCSpwOworCisjaWZkZWYgV1NERUJVR19UUkFDRQorICAgIGlmIChXU0RMRVZFTChXU19UUkFDRV9WRVJCT1NFIHwgV1NfVFJBQ0UpCisJICAgICYmIHN0cm5jbXAoY3VyTWVudU5hbWUsICJUb29sQmFyIiwgNykgIT0gMCkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9zdWJtZW51X2VuZCgpXG4iKTsKKyNlbmRpZgorCisgICAgcCA9IHN0cnJjaHIoY3VyTWVudVByaW9yaXR5LCAnLicpOworICAgIEFTU0VSVChwICE9IE5VTEwpOworICAgICpwID0gTlVMOworCisgICAgcCA9IHN0cnJjaHIoY3VyTWVudU5hbWUsICcuJyk7CisgICAgQVNTRVJUKHAgIT0gTlVMTCk7CisgICAgKnAgPSBOVUw7Cit9CisKKy8qCisgKiBUaGlzIGlzIHdoZXJlIG1lbnVzIGFyZSByZWFsbHkgbWFkZS4gRWFjaCBpdGVtIHdpbGwgZ2VuZXJhdGUgYW4gYW1lbnUgdmltCisgKiBjb21tYW5kLiBUaGUgZ2xvYmFscyBjdXJNZW51TmFtZSBhbmQgY3VyTWVudVByaW9yaXR5IGNvbnRhaW4gdGhlIG5hbWUgYW5kCisgKiBwcmlvcml0eSBvZiB0aGUgcGFyZW50IG1lbnUgdHJlZS4KKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAord29ya3Nob3BfbWVudV9pdGVtKAorCWNoYXIJCSpsYWJlbCwKKwljaGFyCQkqdmVyYiwKKwljaGFyCQkqYWNjZWxlcmF0b3IsCisJY2hhcgkJKmFjY2VsZXJhdG9yVGV4dCwKKwljaGFyCQkqbmFtZSwKKwljaGFyCQkqZmlsZXBvcywKKwljaGFyCQkqc2Vuc2l0aXZlKQoreworICAgIGNoYXIJCSBjYnVmW0JVRlNJWl07CisgICAgY2hhcgkJIG5hbWVidWZbQlVGU0laXTsKKyAgICBjaGFyCQkgYWNjVGV4dFtCVUZTSVpdOworCisjaWZkZWYgV1NERUJVR19UUkFDRQorICAgIGlmIChXU0RMRVZFTChXU19UUkFDRV9WRVJCT1NFKQorCSAgICAmJiBzdHJuY21wKGN1ck1lbnVOYW1lLCAiVG9vbEJhciIsIDcpICE9IDApCisgICAgeworCWlmICh3c19kbGV2ZWwgJiBXU19UUkFDRV9WRVJCT1NFKQorCSAgICB3c2RlYnVnKCJ3b3Jrc2hvcF9tZW51X2l0ZW0oXG4iCisJCSAgICAiXHRsYWJlbCA9IFwiJXNcIixcbiIKKwkJICAgICJcdHZlcmIgPSAlcyxcbiIKKwkJICAgICJcdGFjY2VsZXJhdG9yID0gJXMsXG4iCisJCSAgICAiXHRhY2NlbGVyYXRvclRleHQgPSBcIiVzXCIsXG4iCisJCSAgICAiXHRuYW1lID0gJXMsXG4iCisJCSAgICAiXHRmaWxlcG9zID0gJXMsXG4iCisJCSAgICAiXHRzZW5zaXRpdmUgPSAlcylcbiIsCisJCSAgICBsYWJlbCAmJiAqbGFiZWwgPyBsYWJlbCA6ICI8Tm9uZT4iLAorCQkgICAgdmVyYiAmJiAqdmVyYiA/IHZlcmIgOiAiPE5vbmU+IiwKKwkJICAgIGFjY2VsZXJhdG9yICYmICphY2NlbGVyYXRvciA/CisJCSAgICBhY2NlbGVyYXRvciA6ICI8Tm9uZT4iLAorCQkgICAgYWNjZWxlcmF0b3JUZXh0ICYmICphY2NlbGVyYXRvclRleHQgPworCQkgICAgYWNjZWxlcmF0b3JUZXh0IDogIjxOb25lPiIsCisJCSAgICBuYW1lICYmICpuYW1lID8gbmFtZSA6ICI8Tm9uZT4iLAorCQkgICAgZmlsZXBvcyAmJiAqZmlsZXBvcyA/IGZpbGVwb3MgOiAiPE5vbmU+IiwKKwkJICAgIHNlbnNpdGl2ZSk7CisJZWxzZSBpZiAod3NfZGxldmVsICYgV1NfVFJBQ0UpCisJICAgIHdzdHJhY2UoIndvcmtzaG9wX21lbnVfaXRlbShcIiVzXCIsICVzKVxuIiwKKwkJICAgIGxhYmVsICYmICpsYWJlbCA/IGxhYmVsIDogIjxOb25lPiIsCisJCSAgICB2ZXJiICYmICp2ZXJiID8gdmVyYiA6ICI8Tm9uZT4iLCBzZW5zaXRpdmUpOworICAgIH0KKyNlbmRpZgorI2lmZGVmIFdTREVCVUdfU0VOU0UKKyAgICBpZiAod3NfZGVidWcpCisJd3N0cmFjZSgibWVudTogICAlLTIxLjIwcyUtMjEuMjBzKCVzKVxuIiwgbGFiZWwsIHZlcmIsCisJCSpzZW5zaXRpdmUgPT0gJzEnID8gIlNlbnNpdGl2ZSIgOiAiSW5zZW5zaXRpdmUiKTsKKyNlbmRpZgorCisgICAgaWYgKGFjY2VsZXJhdG9yVGV4dCAhPSBOVUxMKQorCXNwcmludGYoYWNjVGV4dCwgIjxUYWI+JXMiLCBhY2NlbGVyYXRvclRleHQpOworICAgIGVsc2UKKwlhY2NUZXh0WzBdID0gTlVMOworICAgIHVwZGF0ZVByaW9yaXR5KEZhbHNlKTsKKyAgICBzcHJpbnRmKG5hbWVidWYsICIlcy4lcyIsIGN1ck1lbnVOYW1lLCBmaXh1cChsYWJlbCkpOworICAgIHNwcmludGYoY2J1ZiwgImFtZW51ICVzICVzJXNcdDp3c3ZlcmIgJXM8Q1I+IiwKKwkgICAgY3VyTWVudVByaW9yaXR5LCBuYW1lYnVmLCBhY2NUZXh0LCB2ZXJiKTsKKworICAgIGNvbG9uY21kKGNidWYsIFRSVUUpOworICAgIGFkZE1lbnUobmFtZWJ1ZiwgZml4QWNjZWxUZXh0KGFjY2VsZXJhdG9yVGV4dCksIHZlcmIpOworCisgICAgaWYgKCpzZW5zaXRpdmUgPT0gJzAnKQorICAgIHsKKwlzcHJpbnRmKGNidWYsICJhbWVudSBkaXNhYmxlICVzIiwgbmFtZWJ1Zik7CisJY29sb25jbWQoY2J1ZiwgVFJVRSk7CisgICAgfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGNvbXBsZXRlIFdvcmtTaG9wIG1lbnUgZGVzY3JpcHRpb24gaGFzIGJlZW4KKyAqIHNlbnQgb3ZlciBmcm9tIGVzZXJ2ZS4gV2UgZG8gc29tZSBtZW51IGNsZWFudXAuCisgKi8KKworICAgIHZvaWQKK3dvcmtzaG9wX21lbnVfZW5kKCkKK3sKKyAgICBCb29sZWFuCQkgdXNpbmdfdGVhcm9mZjsJLyogc2V0IHBlciBjdXJyZW50IG9wdGlvbiBzZXR0aW5nICovCisKKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisJd3N0cmFjZSgid29ya3Nob3BfbWVudV9lbmQoKVxuIik7CisjZW5kaWYKKworICAgIHVzaW5nX3RlYXJvZmYgPSB2aW1fc3RyY2hyKHBfZ28sIEdPX1RFQVJPRkYpICE9IE5VTEw7CisgICAgZ3VpX21jaF90b2dnbGVfdGVhcm9mZnModXNpbmdfdGVhcm9mZik7Cit9CisKKyAgICB2b2lkCit3b3Jrc2hvcF90b29sYmFyX2JlZ2luKCkKK3sKKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisJd3N0cmFjZSgid29ya3Nob3BfdG9vbGJhcl9iZWdpbigpXG4iKTsKKyNlbmRpZgorCisgICAgY29sb25jbWQoImF1bm1lbnUgVG9vbEJhciIsIFRydWUpOworICAgIHRicHJpID0gMTA7Cit9CisKKyAgICB2b2lkCit3b3Jrc2hvcF90b29sYmFyX2VuZCgpCit7CisgICAgY2hhcl91CWJ1Zls2NF07CisKKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisgICAgeworCXdzdHJhY2UoIndvcmtzaG9wX3Rvb2xiYXJfZW5kKClcbiIpOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBUdXJuIG9uIFRvb2xCYXIuCisgICAgICovCisgICAgU1RSQ1BZKGJ1ZiwgcF9nbyk7CisgICAgaWYgKHZpbV9zdHJjaHIocF9nbywgJ1QnKSA9PSBOVUxMKQorICAgIHsKKwlTVFJDQVQoYnVmLCAiVCIpOworCXNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJnbyIsIDBMLCBidWYsIDApOworICAgIH0KKyAgICB3b3Jrc2hvcEluaXREb25lID0gVHJ1ZTsKK30KKworLypBUkdTVVNFRCovCisgICAgdm9pZAord29ya3Nob3BfdG9vbGJhcl9idXR0b24oCisJY2hhcgkqbGFiZWwsCisJY2hhcgkqdmVyYiwKKwljaGFyCSpzZW5zZVZlcmIsCisJY2hhcgkqZmlsZXBvcywKKwljaGFyCSpoZWxwLAorCWNoYXIJKnNlbnNlLAorCWNoYXIJKmZpbGUsCisJY2hhcgkqbGVmdCkKK3sKKyAgICBjaGFyCWNidWZbQlVGU0laICsgTUFYUEFUSExFTl07CisgICAgY2hhcgluYW1lYnVmW0JVRlNJWl07CisgICAgc3RhdGljIGludAl0YmlkID0gMTsKKyAgICBjaGFyX3UJKnA7CisKKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UpKQorCXdzZGVidWcoIndvcmtzaG9wX3Rvb2xiYXJfYnV0dG9uKFwiJXNcIiwgJXMsICVzLFxuIgorCQkiXHQlcywgXCIlc1wiLCAlcyxcblx0XCIlc1wiLFxuXHQ8JXM+KVxuIiwKKwkJbGFiZWwgICAmJiAqbGFiZWwgICA/IGxhYmVsICAgOiAiPE5vbmU+IiwKKwkJdmVyYiAgICAmJiAqdmVyYiAgICA/IHZlcmIgICAgOiAiPE5vbmU+IiwKKwkJc2Vuc2VWZXJiICYmICpzZW5zZVZlcmIgICAgPyBzZW5zZVZlcmIgICAgOiAiPE5vbmU+IiwKKwkJZmlsZXBvcyAmJiAqZmlsZXBvcyA/IGZpbGVwb3MgOiAiPE5vbmU+IiwKKwkJaGVscCAgICAmJiAqaGVscCAgICA/IGhlbHAgICAgOiAiPE5vbmU+IiwKKwkJc2Vuc2UgICAmJiAqc2Vuc2UgICA/IHNlbnNlICAgOiAiPE5vbmU+IiwKKwkJZmlsZSAgICAmJiAqZmlsZSAgICA/IGZpbGUgICAgOiAiPE5vbmU+IiwKKwkJbGVmdCAgICAmJiAqbGVmdCAgICA/IGxlZnQgICAgOiAiPE5vbmU+Iik7CisgICAgZWxzZSBpZiAoV1NETEVWRUwoV1NfVFJBQ0UpKQorCXdzdHJhY2UoIndvcmtzaG9wX3Rvb2xiYXJfYnV0dG9uKFwiJXNcIiwgJXMpXG4iLAorCQlsYWJlbCAgICYmICpsYWJlbCAgID8gbGFiZWwgICA6ICI8Tm9uZT4iLAorCQl2ZXJiICAgICYmICp2ZXJiICAgID8gdmVyYiAgICA6ICI8Tm9uZT4iKTsKKyNlbmRpZgorI2lmZGVmIFdTREVCVUdfU0VOU0UKKyAgICBpZiAod3NfZGVidWcpCisJd3NkZWJ1ZygiYnV0dG9uOiAlLTIxLjIwcyUtMjEuMjBzKCVzKVxuIiwgbGFiZWwsIHZlcmIsCisJCSpzZW5zZSA9PSAnMScgPyAiU2Vuc2l0aXZlIiA6ICJJbnNlbnNpdGl2ZSIpOworI2VuZGlmCisKKyAgICBpZiAobGVmdCAmJiAqbGVmdCAmJiBhdG9pKGxlZnQpID4gMCkKKyAgICB7CisJLyogQWRkIGEgc2VwYXJhdG9yIChidXQgcGFzcyB0aGUgd2lkdGggcGFzc2VkIGFmdGVyIHRoZSAnOicpICovCisJc3ByaW50ZihjYnVmLCAiYW1lbnUgMS4lZCBUb29sQmFyLi1zZXAlZDolcy0gPG51bD4iLAorCQl0YnByaSAtIDUsIHRiaWQrKywgbGVmdCk7CisKKwljb2xvbmNtZChjYnVmLCBUcnVlKTsKKyAgICB9CisKKyAgICBwID0gdmltX3N0cnNhdmVfZXNjYXBlZCgoY2hhcl91ICopbGFiZWwsIChjaGFyX3UgKikiXFwuICIpOworICAgIHNwcmludGYobmFtZWJ1ZiwgIlRvb2xCYXIuJXMiLCBwKTsKKyAgICB2aW1fZnJlZShwKTsKKyAgICBTVFJDUFkoY2J1ZiwgImFtZW51IDxzaWxlbnQ+ICIpOworICAgIGlmIChmaWxlICE9IE5VTEwgJiYgKmZpbGUgIT0gTlVMKQorICAgIHsKKwlwID0gdmltX3N0cnNhdmVfZXNjYXBlZCgoY2hhcl91ICopZmlsZSwgKGNoYXJfdSAqKSIgIik7CisJc3ByaW50ZihjYnVmICsgU1RSTEVOKGNidWYpLCAiaWNvbj0lcyAiLCBwKTsKKwl2aW1fZnJlZShwKTsKKyAgICB9CisgICAgc3ByaW50ZihjYnVmICsgU1RSTEVOKGNidWYpLCAiMS4lZCAlcyA6d3N2ZXJiICVzPENSPiIsCisJCQkJCQkJdGJwcmksIG5hbWVidWYsIHZlcmIpOworCisgICAgLyogRGVmaW5lIHRoZSBtZW51IGl0ZW0gKi8KKyAgICBjb2xvbmNtZChjYnVmLCBUcnVlKTsKKworICAgIGlmICgqc2Vuc2UgPT0gJzAnKQorICAgIHsKKwkvKiBJZiBtZW51IGlzbid0IHNlbnNpdGl2ZSBhdCBzdGFydHVwLi4uICovCisJc3ByaW50ZihjYnVmLCAiYW1lbnUgZGlzYWJsZSAlcyIsIG5hbWVidWYpOworCWNvbG9uY21kKGNidWYsIFRydWUpOworICAgIH0KKworICAgIGlmIChoZWxwICYmICpoZWxwKQorICAgIHsKKwkvKiBEbyB0aGUgdG9vbHRpcCAqLworCXNwcmludGYoY2J1ZiwgInRtZW51ICVzICVzIiwgbmFtZWJ1ZiwgaGVscCk7CisJY29sb25jbWQoY2J1ZiwgVHJ1ZSk7CisgICAgfQorCisgICAgYWRkTWVudShuYW1lYnVmLCBOVUxMLCB2ZXJiKTsKKyAgICB0YnByaSArPSAxMDsKK30KKworICAgIHZvaWQKK3dvcmtzaG9wX2ZyYW1lX3NlbnNpdGl2aXRpZXMoCisJVmVyYlNlbnNlCSp2cykJCS8qIGxpc3Qgb2YgdmVyYnMgdG8gKGRlKXNlbnNpdGl6ZSAqLworeworICAgIFZlcmJTZW5zZQkqdnA7CQkvKiBpdGVyYXRlIHRocm91Z2ggdnMgKi8KKyAgICBjaGFyCSptZW51X25hbWU7CS8qIHVzZWQgaW4gbWVudSBsb29rdXAgKi8KKyAgICBpbnQJCSBjbnQ7CQkvKiBjb3VudCBvZiB2ZXJicyB0byBza2lwICovCisgICAgaW50CQkgbGVuOwkJLyogbGVuZ3RoIG9mIG5vbnZhcmlhbnQgcGFydCBvZiBjb21tYW5kICovCisgICAgY2hhcgkgY2J1Zls0MDk2XTsKKworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSkgfHwgV1NETEVWRUwoNCkpCisgICAgeworCXdzZGVidWcoIndvcmtzaG9wX2ZyYW1lX3NlbnNpdGl2aXRpZXMoXG4iKTsKKwlmb3IgKHZwID0gdnM7IHZwLT52ZXJiICE9IE5VTEw7IHZwKyspCisJICAgIHdzZGVidWcoIlx0JS0yNXMlZFxuIiwgdnAtPnZlcmIsIHZwLT5zZW5zZSk7CisJd3NkZWJ1ZygiKVxuIik7CisgICAgfQorICAgIGVsc2UgaWYgKFdTRExFVkVMKFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9mcmFtZV9zZW5zaXRpdml0aWVzKClcbiIpOworI2VuZGlmCisjaWZkZWYgV1NERUJVR19TRU5TRQorICAgIGlmICh3c19kZWJ1ZykKKwlmb3IgKHZwID0gdnM7IHZwLT52ZXJiICE9IE5VTEw7IHZwKyspCisJICAgIHdzZGVidWcoImNoYW5nZTogJS0yMS4yMHMlLTIxLjIwcyglcylcbiIsCisJCSAgICAiIiwgdnAtPnZlcmIsIHZwLT5zZW5zZSA9PSAxID8KKwkJICAgICJTZW5zaXRpdmUiIDogIkluc2Vuc2l0aXZlIik7CisjZW5kaWYKKworICAgIC8qCisgICAgICogTG9vayBmb3IgYWxsIG1hdGNoaW5nIG1lbnUgZW50cmllcyBmb3IgdGhlIHZlcmIuIFRoZXJlIG1heSBiZSBtb3JlCisgICAgICogdGhhbiBvbmUgaWYgdGhlIHZlcmIgaGFzIGJvdGggYSBtZW51IGFuZCB0b29sYmFyIGVudHJ5LgorICAgICAqLworICAgIGZvciAodnAgPSB2czsgdnAtPnZlcmIgIT0gTlVMTDsgdnArKykKKyAgICB7CisJY250ID0gMDsKKwlzdHJjcHkoY2J1ZiwgImFtZW51Iik7CisJc3RyY2F0KGNidWYsICIgIik7CisJc3RyY2F0KGNidWYsIHZwLT5zZW5zZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKwlzdHJjYXQoY2J1ZiwgIiAiKTsKKwlsZW4gPSBzdHJsZW4oY2J1Zik7CisJd2hpbGUgKChtZW51X25hbWUgPSBsb29rdXBWZXJiKHZwLT52ZXJiLCBjbnQrKykpICE9IE5VTEwpCisJeworCSAgICBzdHJjcHkoJmNidWZbbGVuXSwgbWVudV9uYW1lKTsKKwkgICAgY29sb25jbWQoY2J1ZiwgRkFMU0UpOworCX0KKyAgICB9CisgICAgZ3VpX3VwZGF0ZV9tZW51cygwKTsKKyAgICBndWlfbWNoX2ZsdXNoKCk7Cit9CisKKyAgICB2b2lkCit3b3Jrc2hvcF9zZXRfb3B0aW9uKAorCWNoYXIJKm9wdGlvbiwJCS8qIG5hbWUgb2YgYSBzdXBwb3J0ZWQgb3B0aW9uICovCisJY2hhcgkqdmFsdWUpCQkJLyogdmFsdWUgdG8gc2V0IG9wdGlvbiB0byAqLworeworICAgIGNoYXIJIGNidWZbQlVGU0laXTsJCS8qIGNvbW1hbmQgYnVmZmVyICovCisKKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisgICAgeworCXdzdHJhY2UoIndvcmtzaG9wX3NldF9vcHRpb24oJXMsICVzKVxuIiwgb3B0aW9uLCB2YWx1ZSk7CisgICAgfQorI2VuZGlmCisKKyAgICBjYnVmWzBdID0gTlVMOworICAgIHN3aXRjaCAoKm9wdGlvbikJCS8qIHN3aXRjaCBvbiAxc3QgbGV0dGVyICovCisgICAgeworCWNhc2UgJ3MnOgorCSAgICBpZiAoc3RyY21wKG9wdGlvbiwgInN5bnRheCIpID09IDApCisJCXNwcmludGYoY2J1ZiwgInN5bnRheCAlcyIsIHZhbHVlKTsKKwkgICAgZWxzZSBpZiAoc3RyY21wKG9wdGlvbiwgInNhdmVmaWxlcyIpID09IDApCisJCTsgLyogWFhYIC0gTm90IHlldCBpbXBsZW1lbnRlZCAqLworCSAgICBicmVhazsKKworCWNhc2UgJ2wnOgorCSAgICBpZiAoc3RyY21wKG9wdGlvbiwgImxpbmVubyIpID09IDApCisJCXNwcmludGYoY2J1ZiwgInNldCAlc251IiwKKwkJCShzdHJjbXAodmFsdWUsICJvbiIpID09IDApID8gIiIgOiAibm8iKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdwJzoKKwkgICAgaWYgKHN0cmNtcChvcHRpb24sICJwYXJlbnRoZXNlcyIpID09IDApCisJCXNwcmludGYoY2J1ZiwgInNldCAlc3NtIiwKKwkJCShzdHJjbXAodmFsdWUsICJvbiIpID09IDApID8gIiIgOiAibm8iKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICd3JzoKKwkgICAgLyogdGhpcyBvcHRpb24gaXMgc2V0IGJ5IGEgZGlyZWN0IGNhbGwgKi8KKyNpZmRlZiBXU0RFQlVHCisJICAgIHdzZGVidWcoIndvcmtzaG9wX3NldF9vcHRpb246ICIKKwkJICAgICJHb3QgdW5leHBlY3RlZCB3b3Jrc2hvcGtleXMgb3B0aW9uIik7CisjZW5kaWYKKwkgICAgYnJlYWs7CisKKwljYXNlICdiJzoJLyogdGhlc2Ugb3B0aW9ucyBhcmUgc2V0IGZyb20gZGlyZWN0IGNhbGxzICovCisJICAgIGlmIChvcHRpb25bN10gPT0gTlVMICYmIHN0cmNtcChvcHRpb24sICJiYWxsb29uIikgPT0gMCkKKwkgICAgeworI2lmZGVmIFdTREVCVUcKKwkJLyogc2V0IGJ5IGRpcmVjdCBjYWxsIHRvIHdvcmtzaG9wX2JhbGxvb25fbW9kZSAqLworCQl3c2RlYnVnKCJ3b3Jrc2hvcF9zZXRfb3B0aW9uOiAiCisJCQkiR290IHVuZXhwZWN0ZWQgYmFsbG9vbmV2YWwgb3B0aW9uIik7CisjZW5kaWYKKwkgICAgfQorCSAgICBlbHNlIGlmIChzdHJjbXAob3B0aW9uLCAiYmFsbG9vbmRlbGF5IikgPT0gMCkKKwkgICAgeworI2lmZGVmIFdTREVCVUcKKwkJLyogc2V0IGJ5IGRpcmVjdCBjYWxsIHRvIHdvcmtzaG9wX2JhbGxvb25fZGVsYXkgKi8KKwkJd3NkZWJ1Zygid29ya3Nob3Bfc2V0X29wdGlvbjogIgorCQkJIkdvdCB1bmV4cGVjdGVkIGJhbGxvb25kZWxheSBvcHRpb24iKTsKKyNlbmRpZgorCSAgICB9CisJICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoY2J1ZlswXSAhPSBOVUwpCisJY29sb25jbWQoY2J1ZiwgVFJVRSk7Cit9CisKKworICAgIHZvaWQKK3dvcmtzaG9wX2JhbGxvb25fbW9kZSgKKwlCb29sZWFuCSBvbikKK3sKKyAgICBjaGFyCSBjYnVmW0JVRlNJWl07CQkvKiBjb21tYW5kIGJ1ZmZlciAqLworCisjaWZkZWYgV1NERUJVR19UUkFDRQorICAgIGlmIChXU0RMRVZFTChXU19UUkFDRV9WRVJCT1NFIHwgV1NfVFJBQ0UpKQorCXdzdHJhY2UoIndvcmtzaG9wX2JhbGxvb25fbW9kZSglcylcbiIsIG9uID8gIlRydWUiIDogIkZhbHNlIik7CisjZW5kaWYKKworICAgIHNwcmludGYoY2J1ZiwgInNldCAlc2JldmFsIiwgb24gPyAiIiA6ICJubyIpOworICAgIGNvbG9uY21kKGNidWYsIFRSVUUpOworfQorCisKKyAgICB2b2lkCit3b3Jrc2hvcF9iYWxsb29uX2RlbGF5KAorCWludAkgZGVsYXkpCit7CisgICAgY2hhcgkgY2J1ZltCVUZTSVpdOwkJLyogY29tbWFuZCBidWZmZXIgKi8KKworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9iYWxsb29uX2RlbGF5KCVkKVxuIiwgZGVsYXkpOworI2VuZGlmCisKKyAgICBzcHJpbnRmKGNidWYsICJzZXQgYmRsYXk9JWQiLCBkZWxheSk7CisgICAgY29sb25jbWQoY2J1ZiwgVFJVRSk7Cit9CisKKworICAgIHZvaWQKK3dvcmtzaG9wX3Nob3dfYmFsbG9vbl90aXAoCisJY2hhcgkqdGlwKQoreworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9zaG93X2JhbGxvb25fdGlwKCVzKVxuIiwgdGlwKTsKKyNlbmRpZgorCisgICAgaWYgKGJhbGxvb25FdmFsICE9IE5VTEwpCisJZ3VpX21jaF9wb3N0X2JhbGxvb24oYmFsbG9vbkV2YWwsIChjaGFyX3UgKil0aXApOworfQorCisKKyAgICB2b2lkCit3b3Jrc2hvcF9ob3RrZXlzKAorCUJvb2xlYW4Jb24pCit7CisgICAgY2hhcgkgY2J1ZltCVUZTSVpdOwkJLyogY29tbWFuZCBidWZmZXIgKi8KKyAgICBNZW51TWFwCSptcDsJCQkvKiBpdGVyYXRlIG92ZXIgbWVudU1hcCBlbnRyaWVzICovCisKKyNpZmRlZiBXU0RFQlVHX1RSQUNFCisgICAgaWYgKFdTRExFVkVMKFdTX1RSQUNFX1ZFUkJPU0UgfCBXU19UUkFDRSkpCisJd3N0cmFjZSgid29ya3Nob3BfaG90a2V5cyglcylcbiIsIG9uID8gIlRydWUiIDogIkZhbHNlIik7CisjZW5kaWYKKworICAgIHdvcmtzaG9wSG90S2V5c0VuYWJsZWQgPSBvbjsKKyAgICBpZiAod29ya3Nob3BIb3RLZXlzRW5hYmxlZCkKKwlmb3IgKG1wID0gbWVudU1hcDsgbXAgPCAmbWVudU1hcFttZW51TWFwU2l6ZV07IG1wKyspCisJeworCSAgICBpZiAobXAtPmFjY2VsICE9IE5VTEwpCisJICAgIHsKKwkJc3ByaW50ZihjYnVmLCAibWFwICVzIDp3c3ZlcmIgJXM8Q1I+IiwgbXAtPmFjY2VsLCBtcC0+dmVyYik7CisJCWNvbG9uY21kKGNidWYsIFRSVUUpOworCSAgICB9CisJfQorICAgIGVsc2UKKwlmb3IgKG1wID0gbWVudU1hcDsgbXAgPCAmbWVudU1hcFttZW51TWFwU2l6ZV07IG1wKyspCisJeworCSAgICBpZiAobXAtPmFjY2VsICE9IE5VTEwpCisJICAgIHsKKwkJc3ByaW50ZihjYnVmLCAidW5tYXAgJXMiLCBtcC0+YWNjZWwpOworCQljb2xvbmNtZChjYnVmLCBUUlVFKTsKKwkgICAgfQorCX0KK30KKworLyoKKyAqIEEgYnV0dG9uIGluIHRoZSB0b29sYmFyIGhhcyBiZWVuIHB1c2hlZC4KKyAqLworLypBUkdTVVNFRCovCisgICAgaW50Cit3b3Jrc2hvcF9nZXRfcG9zaXRpb25zKAorCXZvaWQJCSpjbGllbnREYXRhLAkvKiB1bnVzZWQgKi8KKwljaGFyCSAgICAgICAqKmZpbGVuYW1lLAkvKiBvdXRwdXQgZGF0YSAqLworCWludAkJKmN1ckxpbmUsCS8qIG91dHB1dCBkYXRhICovCisJaW50CQkqY3VyQ29sLAkvKiBvdXRwdXQgZGF0YSAqLworCWludAkJKnNlbFN0YXJ0TGluZSwJLyogb3V0cHV0IGRhdGEgKi8KKwlpbnQJCSpzZWxTdGFydENvbCwJLyogb3V0cHV0IGRhdGEgKi8KKwlpbnQJCSpzZWxFbmRMaW5lLAkvKiBvdXRwdXQgZGF0YSAqLworCWludAkJKnNlbEVuZENvbCwJLyogb3V0cHV0IGRhdGEgKi8KKwlpbnQJCSpzZWxMZW5ndGgsCS8qIG91dHB1dCBkYXRhICovCisJY2hhcgkgICAgICAgKipzZWxlY3Rpb24pCS8qIG91dHB1dCBkYXRhICovCit7CisgICAgc3RhdGljIGNoYXIJIGZmbmFtZVtNQVhQQVRITEVOXTsKKworI2lmZGVmIFdTREVCVUdfVFJBQ0UKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfVkVSQk9TRSB8IFdTX1RSQUNFKSkKKwl3c3RyYWNlKCJ3b3Jrc2hvcF9nZXRfcG9zaXRpb25zKCUjeCwgXCIlc1wiLCAuLi4pXG4iLAorCQljbGllbnREYXRhLCAoY3VyYnVmICYmIGN1cmJ1Zi0+Yl9zZm5hbWUgIT0gTlVMTCkKKwkJCQkgICAgICA/IChjaGFyICopY3VyYnVmLT5iX3NmbmFtZSA6ICI8Tm9uZT4iKTsKKyNlbmRpZgorCisgICAgc3RyY3B5KGZmbmFtZSwgKGNoYXIgKikgY3VyYnVmLT5iX2ZmbmFtZSk7CisgICAgKmZpbGVuYW1lID0gZmZuYW1lOwkJLyogY29weSBzbyBub2JvZHkgY2FuIGNoYW5nZSBiX2ZmbmFtZSAqLworICAgICpjdXJMaW5lID0gY3Vyd2luLT53X2N1cnNvci5sbnVtOworICAgICpjdXJDb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKKworICAgIGlmIChjdXJidWYtPmJfdmlzdWFsX21vZGUgPT0gJ3YnICYmCisJICAgIGVxdWFscG9zKGN1cndpbi0+d19jdXJzb3IsIGN1cmJ1Zi0+Yl92aXN1YWxfZW5kKSkKKyAgICB7CisJKnNlbFN0YXJ0TGluZSA9IGN1cmJ1Zi0+Yl92aXN1YWxfc3RhcnQubG51bTsKKwkqc2VsU3RhcnRDb2wgPSBjdXJidWYtPmJfdmlzdWFsX3N0YXJ0LmNvbDsKKwkqc2VsRW5kTGluZSA9IGN1cmJ1Zi0+Yl92aXN1YWxfZW5kLmxudW07CisJKnNlbEVuZENvbCA9IGN1cmJ1Zi0+Yl92aXN1YWxfZW5kLmNvbDsKKwkqc2VsZWN0aW9uID0gZ2V0X3NlbGVjdGlvbihjdXJidWYpOworCWlmICgqc2VsZWN0aW9uKQorCSAgICAqc2VsTGVuZ3RoID0gc3RybGVuKCpzZWxlY3Rpb24pOworCWVsc2UKKwkgICAgKnNlbExlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJKnNlbFN0YXJ0TGluZSA9ICpzZWxFbmRMaW5lID0gLTE7CisJKnNlbFN0YXJ0Q29sID0gKnNlbEVuZENvbCA9IC0xOworCSpzZWxMZW5ndGggPSAwOworCSpzZWxlY3Rpb24gPSAiIjsKKyAgICB9CisKKyAgICByZXR1cm4gVHJ1ZTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFV0aWxpdHkgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgc3RhdGljIGNoYXIgKgorZ2V0X3NlbGVjdGlvbigKKwlidWZfVAkJKmJ1ZikJCS8qIGJ1ZmZlciB3aG9zZSBzZWxlY3Rpb24gd2Ugd2FudCAqLworeworICAgIHBvc19UCSpzdGFydDsJCS8qIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24gKi8KKyAgICBwb3NfVAkqZW5kOwkJLyogZW5kIG9mIHRoZSBzZWxlY3Rpb24gKi8KKyAgICBjaGFyCSpscDsJCS8qIHBvaW50ZXIgdG8gYWN0dWFsIGxpbmUgZGF0YSAqLworICAgIGludAkJIGxsZW47CQkvKiBsZW5ndGggb2YgYWN0dWFsIGxpbmUgZGF0YSAqLworICAgIGNoYXIJKnNwOwkJLyogcG9pbnRlciB0byBzZWxlY3Rpb24gIGJ1ZmZlciAqLworICAgIGludAkJIHNsZW47CQkvKiBzdHJpbmcgbGVuZ3RoIGluIHNlbGVjdGlvbiBidWZmZXIgKi8KKyAgICBpbnQJCSBzaXplOwkJLyogc2l6ZSBvZiBzZWxlY3Rpb24gYnVmZmVyICovCisgICAgY2hhcgkqbmV3X3NwOwkvKiB0ZW1wIHBvaW50ZXIgdG8gbmV3IHNwICovCisgICAgaW50CQkgbG51bTsJCS8qIGxpbmUgbnVtYmVyIHdlIGFyZSBhcHBlbmRpbmcgKi8KKworICAgIGlmIChidWYtPmJfdmlzdWFsX21vZGUgPT0gJ3YnKQorICAgIHsKKwlzdGFydCA9ICZidWYtPmJfdmlzdWFsX3N0YXJ0OworCWVuZCA9ICZidWYtPmJfdmlzdWFsX2VuZDsKKwlpZiAoc3RhcnQtPmxudW0gPT0gZW5kLT5sbnVtKQorCXsKKwkgICAgLyogc2VsZWN0aW9uIGlzIGFsbCBvbiBvbmUgbGluZSAqLworCSAgICBscCA9IChjaGFyICopIG1sX2dldF9wb3Moc3RhcnQpOworCSAgICBsbGVuID0gZW5kLT5jb2wgLSBzdGFydC0+Y29sICsgMTsKKwkgICAgc3AgPSAoY2hhciAqKSBtYWxsb2MobGxlbiArIDEpOworCSAgICBpZiAoc3AgIT0gTlVMTCkKKwkgICAgeworCQlzdHJuY3B5KHNwLCBscCwgbGxlbik7CisJCXNwW2xsZW5dID0gTlVMOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIC8qIG11bHRpLWxpbmUgc2VsZWN0aW9uICovCisJICAgIGxwID0gKGNoYXIgKikgbWxfZ2V0X3BvcyhzdGFydCk7CisJICAgIGxsZW4gPSBzdHJsZW4obHApOworCSAgICBzcCA9IChjaGFyICopIG1hbGxvYyhCVUZTSVogKyBsbGVuKTsKKwkgICAgaWYgKHNwICE9IE5VTEwpCisJICAgIHsKKwkJc2l6ZSA9IEJVRlNJWiArIGxsZW47CisJCXN0cmNweShzcCwgbHApOworCQlzcFtsbGVuXSA9ICdcbic7CisJCXNsZW4gPSBsbGVuICsgMTsKKworCQlsbnVtID0gc3RhcnQtPmxudW0gKyAxOworCQl3aGlsZSAobG51bSA8IGVuZC0+bG51bSkKKwkJICAgIHNwID0gYXBwZW5kX3NlbGVjdGlvbihsbnVtKyssIHNwLCAmc2l6ZSwgJnNsZW4pOworCisJCWxwID0gKGNoYXIgKikgbWxfZ2V0KGVuZC0+bG51bSk7CisJCWxsZW4gPSBlbmQtPmNvbCArIDE7CisJCWlmICgoc2xlbiArIGxsZW4pID49IHNpemUpCisJCXsKKwkJICAgIG5ld19zcCA9IChjaGFyICopCisJCQlyZWFsbG9jKHNwLCBzbGVuICsgbGxlbiArIDEpOworCQkgICAgaWYgKG5ld19zcCAhPSBOVUxMKQorCQkgICAgeworCQkJc2l6ZSArPSBsbGVuICsgMTsKKwkJCXNwID0gbmV3X3NwOworCQkgICAgfQorCQl9CisJCWlmICgoc2xlbiArIGxsZW4pIDwgc2l6ZSkKKwkJeworCQkgICAgc3RybmNweSgmc3Bbc2xlbl0sIGxwLCBsbGVuKTsKKwkJICAgIHNwW3NsZW4gKyBsbGVuXSA9IE5VTDsKKwkJfQorCisJICAgIH0KKwl9CisgICAgfQorICAgIGVsc2UKKwlzcCA9IE5VTEw7CisKKyAgICByZXR1cm4gc3A7Cit9CisKKyAgICBzdGF0aWMgY2hhciAqCithcHBlbmRfc2VsZWN0aW9uKAorCWludAkJIGxudW0sCQkvKiBsaW5lIG51bWJlciB0byBhcHBlbmQgKi8KKwljaGFyCQkqc3AsCQkvKiBwb2ludGVyIHRvIHNlbGVjdGlvbiBidWZmZXIgKi8KKwlpbnQJCSpzaXplLAkJLyogcHRyIHRvIHNpemUgb2Ygc3AgKi8KKwlpbnQJCSpzbGVuKQkJLyogcHRyIHRvIGxlbmd0aCBvZiBzZWxlY3Rpb24gc3RyaW5nICovCit7CisgICAgY2hhcgkqbHA7CQkvKiBsaW5lIG9mIGRhdGEgZnJvbSBidWZmZXIgKi8KKyAgICBpbnQJCSBsbGVuOwkJLyogc3RybGVuIG9mIGxwICovCisgICAgY2hhcgkqbmV3X3NwOwkvKiB0ZW1wIHBvaW50ZXIgdG8gbmV3IHNwICovCisKKyAgICBscCA9IChjaGFyICopbWxfZ2V0KChsaW5lbnJfVClsbnVtKTsKKyAgICBsbGVuID0gc3RybGVuKGxwKTsKKworICAgIGlmICgoKnNsZW4gKyBsbGVuKSA8PSAqc2l6ZSkKKyAgICB7CisJbmV3X3NwID0gKGNoYXIgKikgcmVhbGxvYygodm9pZCAqKSBzcCwgQlVGU0laICsgKnNsZW4gKyBsbGVuKTsKKwlpZiAoKm5ld19zcCAhPSBOVUwpCisJeworCSAgICAqc2l6ZSA9IEJVRlNJWiArICpzbGVuICsgbGxlbjsKKwkgICAgc3AgPSBuZXdfc3A7CisJfQorICAgIH0KKyAgICBpZiAoKCpzbGVuICsgbGxlbikgPiAqc2l6ZSkKKyAgICB7CisJc3RyY2F0KCZzcFsqc2xlbl0sIGxwKTsKKwkqc2xlbiArPSBsbGVuOworCXNwWypzbGVuKytdID0gJ1xuJzsKKyAgICB9CisKKyAgICByZXR1cm4gc3A7Cit9CisKKworCisgICAgc3RhdGljIHZvaWQKK2xvYWRfYnVmZmVyX2J5X25hbWUoCisJY2hhcgkqZmlsZW5hbWUsCQkvKiB0aGUgZmlsZSB0byBsb2FkICovCisJaW50CSBsbnVtKQkJCS8qIGFuIG9wdGlvbmFsIGxpbmUgbnVtYmVyIChvciAwKSAqLworeworICAgIGNoYXIJIGxudW1idWZbMTZdOwkJLyogbWFrZSBsaW5lIG51bWJlciBvcHRpb24gZm9yIDplICovCisgICAgY2hhcgkgY2J1ZltCVUZTSVpdOwkJLyogY29tbWFuZCBidWZmZXIgKi8KKworICAgIGlmIChsbnVtID4gMCkKKwlzcHJpbnRmKGxudW1idWYsICIrJWQiLCBsbnVtKTsKKyAgICBlbHNlCisJbG51bWJ1ZlswXSA9IE5VTDsKKworICAgIHNwcmludGYoY2J1ZiwgImUgJXMgJXMiLCBsbnVtYnVmLCBmaWxlbmFtZSk7CisgICAgY29sb25jbWQoY2J1ZiwgRmFsc2UpOworfQorCisKKyAgICBzdGF0aWMgdm9pZAorbG9hZF93aW5kb3coCisJY2hhcgkqZmlsZW5hbWUsCQkvKiBmaWxlbmFtZSB0byBsb2FkICovCisJaW50CSBsbnVtKQkJCS8qIGxpbmVudW1iZXIgdG8gZ28gdG8gKi8KK3sKKyAgICBidWZfVAkqYnVmOwkJLyogYnVmZmVyIGZpbGVuYW1lIGlzIHN0b3JlZCBpbiAqLworICAgIHdpbl9UCSp3aW47CQkvKiB3aW5kb3cgZmlsZW5tZSBpcyBkaXNwbGF5ZWQgaW4gKi8KKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIGZpbGVuYW1lIGlzIGRpc3BsYXllZCBhbmQgaXMgdGhlIGN1cnJlbnQgd2luZG93LgorICAgICAqLworCisgICAgYnVmID0gYnVmbGlzdF9maW5kbmFtZSgoY2hhcl91ICopZmlsZW5hbWUpOworICAgIGlmIChidWYgPT0gTlVMTCB8fCAod2luID0gZ2V0X3dpbmRvdyhidWYpKSA9PSBOVUxMKQorICAgIHsKKwkvKiBObyBidWZmZXIgb3IgYnVmZmVyIGlzIG5vdCBpbiBjdXJyZW50IHdpbmRvdyAqLworCS8qIHdzZGVidWcoImxvYWRfd2luZG93OiBsb2FkX2J1ZmZlcl9ieV9uYW1lKFwiJXNcIiwgJWQpXG4iLAorCQlmaWxlbmFtZSwgbG51bSk7ICovCisJbG9hZF9idWZmZXJfYnlfbmFtZShmaWxlbmFtZSwgbG51bSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogYnVmIGlzIGluIGEgd2luZG93ICovCisJaWYgKHdpbiAhPSBjdXJ3aW4pCisJeworCSAgICB3aW5fZW50ZXIod2luLCBGYWxzZSk7CisJICAgIC8qIHdzZGVidWcoImxvYWRfd2luZG93OiB3aW5kb3cgZW5kdGVyICVzXG4iLAorCQkgICAgd2luLT53X2J1ZmZlci0+Yl9zZm5hbWUpOyAqLworCX0KKwlpZiAobG51bSA+IDAgJiYgd2luLT53X2N1cnNvci5sbnVtICE9IGxudW0pCisJeworCSAgICB3YXJwX3RvX3BjKGxudW0pOworCSAgICAvKiB3c2RlYnVnKCJsb2FkX3dpbmRvdzogd2FycCB0byAlc1slZF1cbiIsCisJCSAgICB3aW4tPndfYnVmZmVyLT5iX3NmbmFtZSwgbG51bSk7ICovCisJfQorICAgIH0KKyAgICBvdXRfZmx1c2goKTsKK30KKworCisKKyAgICBzdGF0aWMgdm9pZAord2FycF90b19wYygKKwlpbnQJIGxudW0pCQkJLyogbGluZSBudW1iZXIgdG8gd2FycCB0byAqLworeworICAgIGNoYXIJIGxidWZbMjU2XTsJCS8qIGJ1aWxkIGxpbmUgY29tYW5kIGhlcmUgKi8KKworICAgIGlmIChsbnVtID4gMCkKKyAgICB7CisJaWYgKFN0YXRlICYgSU5TRVJUKQorCSAgICBhZGRfdG9faW5wdXRfYnVmKChjaGFyX3UgKikgIlwwMzMiLCAxKTsKKwlpZiAoaXNTaG93aW5nKGxudW0pKQorCSAgICBzcHJpbnRmKGxidWYsICIlZEciLCBsbnVtKTsKKwllbHNlCisJICAgIHNwcmludGYobGJ1ZiwgIiVkei4iLCBsbnVtKTsKKwlhZGRfdG9faW5wdXRfYnVmKChjaGFyX3UgKikgbGJ1Ziwgc3RybGVuKGxidWYpKTsKKyAgICB9Cit9CisKKyAgICBzdGF0aWMgQm9vbGVhbgoraXNTaG93aW5nKAorCWludAkgbG51bSkJCQkvKiB0ZWxsIGlmIGxpbmUgbnVtYmVyIGlzIHNob3dpbmcgKi8KK3sKKyAgICByZXR1cm4gbG51bSA+PSBjdXJ3aW4tPndfdG9wbGluZSAmJiBsbnVtIDwgY3Vyd2luLT53X2JvdGxpbmU7Cit9CisKKworCisgICAgc3RhdGljIHdpbl9UICoKK2dldF93aW5kb3coCisJYnVmX1QJKmJ1ZikJCS8qIGJ1ZmZlciB0byBmaW5kIHdpbmRvdyBmb3IgKi8KK3sKKyAgICB3aW5fVAkqd3AgPSBOVUxMOwkvKiB3aW5kb3cgZmlsZW5hbWUgaXMgaW4gKi8KKworICAgIGZvciAod3AgPSBmaXJzdHdpbjsgd3AgIT0gTlVMTDsgd3AgPSBXX05FWFQod3ApKQorCWlmIChidWYgPT0gd3AtPndfYnVmZmVyKQorCSAgICBicmVhazsKKyAgICByZXR1cm4gd3A7Cit9CisKKworI2lmIDAgLyogbm90IHVzZWQgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfYnVmZmVyX251bWJlcigKKwlidWZfVAkJKmJ1ZikJCS8qIGJ1ZmZlciB0byBnZXQgcG9zaXRpb24gb2YgKi8KK3sKKyAgICBidWZfVAkqYnA7CQkvKiBpdGVyYXRlIG92ZXIgYnVmZmVyIGxpc3QgKi8KKyAgICBpbnQJCSBwb3M7CQkvKiB0aGUgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciBsaXN0ICovCisKKyAgICBwb3MgPSAxOworICAgIGZvciAoYnAgPSBmaXJzdGJ1ZjsgYnAgIT0gTlVMTDsgYnAgPSBicC0+Yl9uZXh0KQorICAgIHsKKwlpZiAoYnAgPT0gYnVmKQorCSAgICByZXR1cm4gcG9zOworCXBvcysrOworICAgIH0KKworICAgIHJldHVybiAxOworfQorI2VuZGlmCisKKyAgICBzdGF0aWMgdm9pZAordXBkYXRlUHJpb3JpdHkoCisJQm9vbGVhbgkJIHN1Yk1lbnUpCS8qIGlmIFRydWUgdGhlbiBzdGFydCBuZXcgc3VibWVudSBwcmkgKi8KK3sKKyAgICBpbnQJCSBwcmk7CQkvKiBwcmlvcml0eSBvZiB0aGlzIG1lbnUvaXRlbSAqLworICAgIGNoYXIJKnA7CisKKyAgICBwID0gc3RycmNocihjdXJNZW51UHJpb3JpdHksICcuJyk7CisgICAgQVNTRVJUKHAgIT0gTlVMTCk7CisgICAgKnArKyA9IE5VTDsKKworICAgIHByaSA9IGF0b2kocCkgKyAxMDsJCS8qIG91ciBuZXcgcHJpb3JpdHkgKi8KKworICAgIGlmIChzdWJNZW51KQorCXNwcmludGYoY3VyTWVudVByaW9yaXR5LCAiJXMuJWQuMCIsIGN1ck1lbnVQcmlvcml0eSwgcHJpKTsKKyAgICBlbHNlCisJc3ByaW50ZihjdXJNZW51UHJpb3JpdHksICIlcy4lZCIsIGN1ck1lbnVQcmlvcml0eSwgcHJpKTsKK30KKworICAgIHN0YXRpYyBjaGFyICoKK2FkZFVuaXF1ZU1uZW1vbmljKAorCWNoYXIJCSptbmVtb25pY3MsCS8qIGN1cnJlbnRseSB1c2VkIG1uZW1vbmljcyAqLworCWNoYXIJCSpsYWJlbCkJCS8qIGxhYmVsIG9mIG1lbnUgbmVlZGluZyBtbmVtb25pYyAqLworeworICAgIHN0YXRpYyBjaGFyCSBuYW1lW0JVRlNJWl07CS8qIGJ1ZmZlciBmb3IgdGhlIHVwZGF0ZWQgbmFtZSAqLworICAgIGNoYXIJKnA7CQkvKiBwb2ludGVyIGludG8gbGFiZWwgKi8KKyAgICBjaGFyCSpmb3VuZDsJCS8qIHBvaW50ZXIgdG8gcG9zc2libGUgbW5lbW9uaWMgKi8KKworICAgIGZvdW5kID0gTlVMTDsKKyAgICBmb3IgKHAgPSBsYWJlbDsgKnAgIT0gTlVMOyBwKyspCisJaWYgKHN0cmNocihtbmVtb25pY3MsICpwKSA9PSAwKQorCSAgICBpZiAoZm91bmQgPT0gTlVMTCB8fCAoaXN1cHBlcigoaW50KSpwKSAmJiBpc2xvd2VyKChpbnQpKmZvdW5kKSkpCisJCWZvdW5kID0gcDsKKworICAgIGlmIChmb3VuZCAhPSBOVUxMKQorICAgIHsKKwlzdHJuY3B5KG5hbWUsIGxhYmVsLCAoZm91bmQgLSBsYWJlbCkpOworCXN0cmNhdChuYW1lLCAiJiIpOworCXN0cmNhdChuYW1lLCBmb3VuZCk7CisgICAgfQorICAgIGVsc2UKKwlzdHJjcHkobmFtZSwgbGFiZWwpOworCisgICAgcmV0dXJuIG5hbWU7Cit9CisKKy8qCisgKiBTb21lIGNoYXJhY3RlcnMgaW4gYSBtZW51IG5hbWUgbXVzdCBiZSBlc2NhcGVkIGluIHZpbS4gU2luY2UgdGhpcyBpcyB2aW0KKyAqIHNwZWNpZmljLCBpdCBtdXN0IGJlIGRvbmUgb24gdGhpcyBzaWRlLgorICovCisgICAgc3RhdGljIGNoYXIgKgorZml4dXAoCisJY2hhcgkJKmxhYmVsKQoreworICAgIHN0YXRpYyBjaGFyCSBidWZbQlVGU0laXTsKKyAgICBjaGFyCQkqYnA7CQkvKiBwb2ludGVyIGludG8gYnVmICovCisgICAgY2hhcgkJKmxwOwkJLyogcG9pbnRlciBpbnRvIGxhYmVsICovCisKKyAgICBscCA9IGxhYmVsOworICAgIGJwID0gYnVmOworICAgIHdoaWxlICgqbHAgIT0gTlVMKQorICAgIHsKKwlpZiAoKmxwID09ICcgJyB8fCAqbHAgPT0gJy4nKQorCSAgICAqYnArKyA9ICdcXCc7CisJKmJwKysgPSAqbHArKzsKKyAgICB9CisgICAgKmJwID0gTlVMOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKworCisjaWZkZWYgTk9IQU5EU19TVVBQT1JUX0ZVTkNUSU9OUworCisvKiBGb3IgdGhlIE5vSGFuZHMgdGVzdCBzdWl0ZSAqLworCisgICAgY2hhciAqCit3b3Jrc2hvcF90ZXN0X2dldGN1cnJlbnRmaWxlKCkKK3sKKyAgICBjaGFyCSpmaWxlbmFtZSwgKnNlbGVjdGlvbjsKKyAgICBpbnQJCWN1ckxpbmUsIGN1ckNvbCwgc2VsU3RhcnRMaW5lLCBzZWxTdGFydENvbCwgc2VsRW5kTGluZTsKKyAgICBpbnQJCXNlbEVuZENvbCwgc2VsTGVuZ3RoOworCisgICAgaWYgKHdvcmtzaG9wX2dldF9wb3NpdGlvbnMoCisJCU5VTEwsICZmaWxlbmFtZSwgJmN1ckxpbmUsICZjdXJDb2wsICZzZWxTdGFydExpbmUsCisJCSZzZWxTdGFydENvbCwgJnNlbEVuZExpbmUsICZzZWxFbmRDb2wsICZzZWxMZW5ndGgsCisJCSZzZWxlY3Rpb24pKQorCXJldHVybiBmaWxlbmFtZTsKKyAgICBlbHNlCisJcmV0dXJuIE5VTEw7Cit9CisKKyAgICBpbnQKK3dvcmtzaG9wX3Rlc3RfZ2V0Y3Vyc29ycm93KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworICAgIGludAord29ya3Nob3BfdGVzdF9nZXRjdXJzb3Jjb2woKQoreworICAgIGNoYXIJKmZpbGVuYW1lLCAqc2VsZWN0aW9uOworICAgIGludAkJY3VyTGluZSwgY3VyQ29sLCBzZWxTdGFydExpbmUsIHNlbFN0YXJ0Q29sLCBzZWxFbmRMaW5lOworICAgIGludAkJc2VsRW5kQ29sLCBzZWxMZW5ndGg7CisKKyAgICBpZiAod29ya3Nob3BfZ2V0X3Bvc2l0aW9ucygKKwkJTlVMTCwgJmZpbGVuYW1lLCAmY3VyTGluZSwgJmN1ckNvbCwgJnNlbFN0YXJ0TGluZSwKKwkJJnNlbFN0YXJ0Q29sLCAmc2VsRW5kTGluZSwgJnNlbEVuZENvbCwgJnNlbExlbmd0aCwKKwkJJnNlbGVjdGlvbikpCisJcmV0dXJuIGN1ckNvbDsKKyAgICBlbHNlCisJcmV0dXJuIC0xOworfQorCisgICAgY2hhciAqCit3b3Jrc2hvcF90ZXN0X2dldGN1cnNvcnJvd3RleHQoKQoreworICAgIHJldHVybiBOVUxMOworfQorCisgICAgY2hhciAqCit3b3Jrc2hvcF90ZXN0X2dldHNlbGVjdGVkdGV4dCgpCit7CisgICAgY2hhcgkqZmlsZW5hbWUsICpzZWxlY3Rpb247CisgICAgaW50CQljdXJMaW5lLCBjdXJDb2wsIHNlbFN0YXJ0TGluZSwgc2VsU3RhcnRDb2wsIHNlbEVuZExpbmU7CisgICAgaW50CQlzZWxFbmRDb2wsIHNlbExlbmd0aDsKKworICAgIGlmICh3b3Jrc2hvcF9nZXRfcG9zaXRpb25zKAorCQlOVUxMLCAmZmlsZW5hbWUsICZjdXJMaW5lLCAmY3VyQ29sLCAmc2VsU3RhcnRMaW5lLAorCQkmc2VsU3RhcnRDb2wsICZzZWxFbmRMaW5lLCAmc2VsRW5kQ29sLCAmc2VsTGVuZ3RoLAorCQkmc2VsZWN0aW9uKSkKKwlyZXR1cm4gc2VsZWN0aW9uOworICAgIGVsc2UKKwlyZXR1cm4gTlVMTDsKK30KKworLypBUkdTVVNFRCovCisgICAgdm9pZAord29ya3Nob3Bfc2F2ZV9zZW5zaXRpdml0eShjaGFyICpmaWxlbmFtZSkKK3sKK30KKworI2VuZGlmCisKKyAgICBzdGF0aWMgY2hhciAqCitmaXhBY2NlbFRleHQoCisJY2hhcgkJKmFwKQkJLyogb3JpZ2luYWwgYWNjZWxlcmF0b3JUZXh0ICovCit7CisgICAgY2hhcglidWZbMjU2XTsJLyogYnVpbGQgaW4gdGVtcCBidWZmZXIgKi8KKyAgICBjaGFyCSpzaGlmdDsJCS8qIHNoaWZ0IHN0cmluZyBvZiAiIiAqLworCisgICAgaWYgKGFwID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICAvKiBJZiB0aGUgYWNjZWxlcmF0b3IgaXMgc2hpZnRlZCB1c2UgdGhlIHZpbSBmb3JtICovCisgICAgaWYgKHN0cm5jbXAoIlNoaWZ0KyIsIGFwLCA2KSA9PSAwKQorICAgIHsKKwlzaGlmdCA9ICJTLSI7CisJYXAgKz0gNjsKKyAgICB9CisgICAgZWxzZQorCXNoaWZ0ID0gIiI7CisKKyAgICBpZiAoKmFwID09ICdGJyAmJiBhdG9pKCZhcFsxXSkgPiAwKQorICAgIHsKKwlzcHJpbnRmKGJ1ZiwgIjwlcyVzPiIsIHNoaWZ0LCBhcCk7CisJcmV0dXJuIHN0cmR1cChidWYpOworICAgIH0KKyAgICBlbHNlCisJcmV0dXJuIE5VTEw7Cit9CisKKyNpZmRlZiBGRUFUX0JFVkFMCisgICAgc3RhdGljIHZvaWQKK2JldmFsQ0IoCisJQmFsbG9vbkV2YWwJKmJldmFsLAorCWludAkJIHN0YXRlKQoreworICAgIGNoYXJfdQkqZmlsZW5hbWU7CisgICAgY2hhcl91CSp0ZXh0OworICAgIGludAkJIHR5cGU7CisgICAgaW50CQkgbGluZTsKKyAgICBpbnQJCSBjb2w7CisgICAgaW50CQkgaWR4OworICAgIGNoYXIJIGJ1ZltNQVhQQVRITEVOICogMl07CisgICAgc3RhdGljIGludAkgc2VyaWFsTm8gPSAtMTsKKworICAgIGlmICghcF9iZXZhbCkKKwlyZXR1cm47CisKKyAgICBpZiAoZ3VpX21jaF9nZXRfYmV2YWxfaW5mbyhiZXZhbCwgJmZpbGVuYW1lLCAmbGluZSwgJnRleHQsICZjb2wpID09IE9LKQorICAgIHsKKwlpZiAodGV4dCAmJiB0ZXh0WzBdKQorCXsKKwkgICAgLyogU2VuZCBkZWJ1Z2dlciByZXF1ZXN0ICovCisJICAgIGlmIChzdHJsZW4oKGNoYXIgKikgdGV4dCkgPiAoTUFYUEFUSExFTi8yKSkKKwkgICAgeworCQkvKgorCQkgKiBUaGUgdXNlciBoYXMgcHJvYmFibHkgc2VsZWN0ZWQgdGhlIGVudGlyZQorCQkgKiBidWZmZXIgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCAtIGRvbid0IGF0dGVtcHQKKwkJICogdG8gZXZhbHVhdGUgaXQKKwkJICovCisJCXJldHVybjsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIFdvcmtTaG9wIGV4cGVjdHMgdGhlIGNvbCB0byBiZSBhIGNoYXJhY3RlciBpbmRleCwgbm90CisJICAgICAqIGEgY29sdW1uIG51bWJlci4gQ29tcHV0ZSB0aGUgaW5kZXggZnJvbSBjb2wuIEFsc28gc2V0CisJICAgICAqIGxpbmUgdG8gMCBiZWNhdXNlIHRoYXRzIHdoYXQgZGJ4IGV4cGVjdHMuCisJICAgICAqLworCSAgICBpZHggPSBjb21wdXRlSW5kZXgoY29sLCB0ZXh0LCBiZXZhbC0+dHMpOworCSAgICBpZiAoaWR4ID4gMCkKKwkgICAgeworCQlsaW5lID0gMDsKKworCQkvKgorCQkgKiBJZiBzdWNjZXNzZnVsLCBpdCB3aWxsIHJlc3BvbmQgd2l0aCBhIGJhbGxvb24gY21kLgorCQkgKi8KKwkJaWYgKHN0YXRlICYgQ29udHJvbE1hc2spCisJCSAgICAvKiBFdmFsdWF0ZSAqKGV4cHJlc3Npb24pICovCisJCSAgICB0eXBlID0gKGludClHUExpbmVFdmFsX0lORElSRUNUOworCQllbHNlIGlmIChzdGF0ZSAmIFNoaWZ0TWFzaykKKwkJICAgIC8qIEV2YWx1YXRlIHR5cGUoZXhwcmVzc2lvbikgKi8KKwkJICAgIHR5cGUgPSAoaW50KUdQTGluZUV2YWxfVFlQRTsKKwkJZWxzZQorCQkgICAgLyogRXZhbHVhdGUgdmFsdWUoZXhwcmVzc2lvbikgKi8KKwkJICAgIHR5cGUgPSAoaW50KUdQTGluZUV2YWxfRVZBTFVBVEU7CisKKwkJLyogU2VuZCByZXF1ZXN0IHRvIGRieCAqLworCQlzcHJpbnRmKGJ1ZiwgInRvb2xWZXJiIGRlYnVnLmJhbGxvb25FdmFsICIKKwkJCSIlcyAlZCwwICVkLDAgJWQsJWQgJWQgJXNcbiIsIChjaGFyICopIGZpbGVuYW1lLAorCQkJbGluZSwgaWR4LCB0eXBlLCBzZXJpYWxObysrLAorCQkJc3RybGVuKChjaGFyICopIHRleHQpLCAoY2hhciAqKSB0ZXh0KTsKKwkJYmFsbG9vbkV2YWwgPSBiZXZhbDsKKwkJd29ya3Nob3Bfc2VuZF9tZXNzYWdlKGJ1Zik7CisJICAgIH0KKwl9CisgICAgfQorfQorI2VuZGlmCisKKworICAgIHN0YXRpYyBpbnQKK2NvbXB1dGVJbmRleCgKKwlpbnQJCSB3YW50ZWRDb2wsCisJY2hhcl91CQkqbGluZSwKKwlpbnQJCSB0cykKK3sKKyAgICBpbnQJCSBjb2wgPSAwOworICAgIGludAkJIGlkeCA9IDA7CisKKyAgICB3aGlsZSAobGluZVtpZHhdKQorICAgIHsKKwlpZiAobGluZVtpZHhdID09ICdcdCcpCisJICAgIGNvbCArPSB0cyAtIChjb2wgJSB0cyk7CisJZWxzZQorCSAgICBjb2wrKzsKKwlpZHgrKzsKKwlpZiAoY29sID49IHdhbnRlZENvbCkKKwkgICAgcmV0dXJuIGlkeDsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKKyAgICBzdGF0aWMgdm9pZAorYWRkTWVudSgKKwljaGFyCQkqbWVudSwJCS8qIG1lbnUgbmFtZSAqLworCWNoYXIJCSphY2NlbCwJCS8qIGFjY2VsZXJhdG9yIHRleHQgKG9wdGlvbmFsKSAqLworCWNoYXIJCSp2ZXJiKQkJLyogV29ya1Nob3AgYWN0aW9uLXZlcmIgKi8KK3sKKyAgICBNZW51TWFwCQkqbmV3TWFwOworICAgIGNoYXIJCSBjYnVmW0JVRlNJWl07CisKKyAgICBpZiAobWVudU1hcFNpemUgPj0gbWVudU1hcE1heCkKKyAgICB7CisJbmV3TWFwID0gcmVhbGxvYyhtZW51TWFwLAorCQlzaXplb2YoTWVudU1hcCkgKiAobWVudU1hcE1heCArIE1FTlVfSU5DKSk7CisJaWYgKG5ld01hcCAhPSBOVUxMKQorCXsKKwkgICAgbWVudU1hcCA9IG5ld01hcDsKKwkgICAgbWVudU1hcE1heCArPSBNRU5VX0lOQzsKKwl9CisgICAgfQorICAgIGlmIChtZW51TWFwU2l6ZSA8IG1lbnVNYXBNYXgpCisgICAgeworCW1lbnVNYXBbbWVudU1hcFNpemVdLm5hbWUgPSBzdHJkdXAobWVudSk7CisJbWVudU1hcFttZW51TWFwU2l6ZV0uYWNjZWwgPSBhY2NlbCAmJiAqYWNjZWwgPyBzdHJkdXAoYWNjZWwpIDogTlVMTDsKKwltZW51TWFwW21lbnVNYXBTaXplKytdLnZlcmIgPSBzdHJkdXAodmVyYik7CisJaWYgKGFjY2VsICYmIHdvcmtzaG9wSG90S2V5c0VuYWJsZWQpCisJeworCSAgICBzcHJpbnRmKGNidWYsICJtYXAgJXMgOndzdmVyYiAlczxDUj4iLCBhY2NlbCwgdmVyYik7CisJICAgIGNvbG9uY21kKGNidWYsIFRSVUUpOworCX0KKyAgICB9Cit9CisKKyAgICBzdGF0aWMgY2hhciAqCituYW1lU3RyaXAoCisJY2hhcgkJKnJhdykJCS8qIG1lbnUgbmFtZSwgcG9zc2libHkgd2l0aCAmIGNoYXJzICovCit7CisgICAgc3RhdGljIGNoYXIJCWJ1ZltCVUZTSVpdOwkvKiBidWlsZCBzdHJpcHBlZCBuYW1lIGhlcmUgKi8KKyAgICBjaGFyCQkqYnAgPSBidWY7CisKKyAgICB3aGlsZSAoKnJhdykKKyAgICB7CisJaWYgKCpyYXcgIT0gJyYnKQorCSAgICAqYnArKyA9ICpyYXc7CisJcmF3Kys7CisgICAgfQorICAgICpicCA9IE5VTDsKKyAgICByZXR1cm4gYnVmOworfQorCisKKyAgICBzdGF0aWMgY2hhciAqCitsb29rdXBWZXJiKAorCWNoYXIJKnZlcmIsCisJaW50CXNraXApCQkvKiBudW1iZXIgb2YgbWF0Y2hlcyB0byBza2lwICovCit7CisgICAgaW50CQlpOwkJLyogbG9vcCBpdGVyYXRvciAqLworCisgICAgZm9yIChpID0gMDsgaSA8IG1lbnVNYXBTaXplOyBpKyspCisJaWYgKHN0cmNtcChtZW51TWFwW2ldLnZlcmIsIHZlcmIpID09IDAgJiYgc2tpcC0tID09IDApCisJICAgIHJldHVybiBuYW1lU3RyaXAobWVudU1hcFtpXS5uYW1lKTsKKworICAgIHJldHVybiBOVUxMOworfQorCisKKyAgICBzdGF0aWMgdm9pZAorY29sb25jbWQoCisJY2hhcgkqY21kLAkJLyogdGhlIGNvbW1hbmQgdG8gcHJpbnQgKi8KKwlCb29sZWFuCWZvcmNlKQkJLyogZm9yY2UgY3Vyc29yIHVwZGF0ZSAqLworeworICAgIGNoYXJfdQkqY3BvX3NhdmUgPSBwX2NwbzsKKworI2lmZGVmIFdTREVCVUcKKyAgICBpZiAoV1NETEVWRUwoV1NfVFJBQ0VfQ09MT05DTUQpKQorCXdzZGVidWcoIkNtZDogJXNcbiIsIGNtZCk7CisjZW5kaWYKKworICAgIHBfY3BvID0gZW1wdHlfb3B0aW9uOworCisgICAgQUxUX0lOUFVUX0xPQ0tfT047CisgICAgZG9fY21kbGluZV9jbWQoKGNoYXJfdSAqKWNtZCk7CisgICAgQUxUX0lOUFVUX0xPQ0tfT0ZGOworCisgICAgcF9jcG8gPSBjcG9fc2F2ZTsKKworICAgIGlmIChmb3JjZSkKKwlndWlfdXBkYXRlX3NjcmVlbigpOworfQorCisvKgorICogc2V0RG9sbGFyVmltIC0JR2l2ZW4gdGhlIHJ1biBkaXJlY3RvcnksIHNlYXJjaCBmb3IgdGhlIHZpbSBpbnN0YWxsCisgKgkJCWRpcmVjdG9yeSBhbmQgc2V0ICRWSU0uCisgKgorICoJCQlXZSBjYW4gYmUgcnVubmluZyBvdXQgb2YgU1VOV3Nwcm8vYmluIG9yIG91dCBvZgorICoJCQlTVU5Xc3Byby9jb250cmliL2NvbnRyaWI2L3ZpbTUuNi9iaW4gc28gd2UgY2hlY2sKKyAqCQkJcmVsYXRpdmUgdG8gYm90aCBvZiB0aGVzZSBkaXJlY3Rvcmllcy4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXREb2xsYXJWaW0oCisJY2hhcgkqcnVuZGlyKQoreworICAgIGNoYXIJIGJ1ZltNQVhQQVRITEVOXTsKKyAgICBjaGFyCSpjcDsKKworICAgIC8qCisgICAgICogRmlyc3QgY2FzZTogUnVubmluZyBmcm9tIDxpbnN0YWxsLWRpcj4vU1VOV3Nwcm8vYmluCisgICAgICovCisgICAgc3RyY3B5KGJ1ZiwgcnVuZGlyKTsKKyAgICBzdHJjYXQoYnVmLCAiLy4uL2NvbnRyaWIvY29udHJpYjYvdmltIiBWSU1fVkVSU0lPTl9TSE9SVCAiL3NoYXJlL3ZpbS8iCisJICAgIFZJTV9WRVJTSU9OX05PRE9UICIvc3ludGF4L3N5bnRheC52aW0iKTsKKyAgICBpZiAoYWNjZXNzKGJ1ZiwgUl9PSykgPT0gMCkKKyAgICB7CisJc3RyY3B5KGJ1ZiwgIlNQUk9fV1NESVI9Iik7CisJc3RyY2F0KGJ1ZiwgcnVuZGlyKTsKKwljcCA9IHN0cnJjaHIoYnVmLCAnLycpOworCWlmIChjcCAhPSBOVUxMKQorCSAgICBzdHJjcHkoY3AsICIvV1M2VTIiKTsKKwlwdXRlbnYoc3RyZHVwKGJ1ZikpOworCisJc3RyY3B5KGJ1ZiwgIlZJTT0iKTsKKwlzdHJjYXQoYnVmLCBydW5kaXIpOworCXN0cmNhdChidWYsICIvLi4vY29udHJpYi9jb250cmliNi92aW0iIFZJTV9WRVJTSU9OX1NIT1JUICIvc2hhcmUvdmltLyIKKwkJVklNX1ZFUlNJT05fTk9ET1QpOworCXB1dGVudihzdHJkdXAoYnVmKSk7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogU2Vjb25kIGNhc2U6IFByb2JhYmx5IHJ1bm5pbmcgZnJvbQorICAgICAqCQk8aW5zdGFsbC1kaXI+L1NVTldzcHJvL2NvbnRyaWIvY29udHJpYjYvdmltNS42L2JpbgorICAgICAqLworICAgIHN0cmNweShidWYsIHJ1bmRpcik7CisgICAgc3RyY2F0KGJ1ZiwgIi8uLi8uLi8uLi9jb250cmliL2NvbnRyaWI2L3ZpbSIgVklNX1ZFUlNJT05fU0hPUlQKKwkgICAgIi9zaGFyZS92aW0vIiBWSU1fVkVSU0lPTl9OT0RPVCAiL3N5bnRheC9zeW50YXgudmltIik7CisgICAgaWYgKGFjY2VzcyhidWYsIFJfT0spID09IDApCisgICAgeworCXN0cmNweShidWYsICJTUFJPX1dTRElSPSIpOworCXN0cmNhdChidWYsIHJ1bmRpcik7CisJY3AgPSBzdHJyY2hyKGJ1ZiwgJy8nKTsKKwlpZiAoY3AgIT0gTlVMTCkKKwkgICAgc3RyY3B5KGNwLCAiLi4vLi4vLi4vLi4vV1M2VTIiKTsKKwlwdXRlbnYoc3RyZHVwKGJ1ZikpOworCisJc3RyY3B5KGJ1ZiwgIlZJTT0iKTsKKwlzdHJjYXQoYnVmLCBydW5kaXIpOworCXN0cmNhdChidWYsICIvLi4vLi4vLi4vY29udHJpYi9jb250cmliNi92aW0iIFZJTV9WRVJTSU9OX1NIT1JUCisJCSIvc2hhcmUvdmltLyIgVklNX1ZFUlNJT05fTk9ET1QpOworCXB1dGVudihzdHJkdXAoYnVmKSk7CisJcmV0dXJuOworICAgIH0KK30KKworLyoKKyAqIGZpbmRZb3Vyc2VsZiAtCUZpbmQgdGhlIGRpcmVjdG9yeSB3ZSBhcmUgcnVubmluZyBmcm9tLiBUaGlzIGlzIHVzZWQgdG8KKyAqCQkJc2V0ICRWSU0uIFdlIG5lZWQgdG8gc2V0IHRoaXMgYmVjYXVzZSB1c2VycyBjYW4gaW5zdGFsbAorICoJCQl0aGUgcGFja2FnZSBpbiBhIGRpZmZlcmVudCBkaXJlY3RvcnkgdGhhbiB0aGUgY29tcGlsZWQKKyAqCQkJZGlyZWN0b3J5LiBUaGlzIGlzIGEgU3VuIFZpc3VhbCBXb3JrU2hvcCByZXF1aXJlbWVudCEKKyAqCisgKiBOb3RlOgkJV2Ugb3ZlcnJpZGUgYSB1c2VyJ3MgJFZJTSBiZWNhdXNlIGl0IHdvbid0IGhhdmUgdGhlCisgKgkJCVdvcmtTaG9wIHNwZWNpZmljIGZpbGVzLiBTL2hlIG1heSBub3QgbGlrZSB0aGlzIGJ1dCBpdHMKKyAqCQkJYmV0dGVyIHRoYW4gZ2V0dGluZyB0aGUgd3JvbmcgZmlsZXMgKGVzcGVjaWFsbHkgYXMgdGhlCisgKgkJCXVzZXIgaXMgbGlrZWx5IHRvIGhhdmUgJFZJTSBzZXQgdG8gNS40IG9yIGxhdGVyKS4KKyAqLworICAgIHZvaWQKK2ZpbmRZb3Vyc2VsZigKKyAgICBjaGFyCSphcmd2MCkKK3sKKyAgICBjaGFyCSpydW5wYXRoID0gTlVMTDsKKyAgICBjaGFyCSpwYXRoOworICAgIGNoYXIJKnBhdGhidWY7CisKKyAgICBpZiAoKmFyZ3YwID09ICcvJykKKwlydW5wYXRoID0gc3RyZHVwKGFyZ3YwKTsKKyAgICBlbHNlIGlmICgqYXJndjAgPT0gJy4nIHx8IHN0cmNocihhcmd2MCwgJy8nKSkKKyAgICB7CisJcnVucGF0aCA9IChjaGFyICopIG1hbGxvYyhNQVhQQVRITEVOKTsKKwlnZXRjd2QocnVucGF0aCwgTUFYUEFUSExFTik7CisJc3RyY2F0KHJ1bnBhdGgsICIvIik7CisJc3RyY2F0KHJ1bnBhdGgsIGFyZ3YwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlwYXRoID0gZ2V0ZW52KCJQQVRIIik7CisJaWYgKHBhdGggIT0gTlVMTCkKKwl7CisJICAgIHJ1bnBhdGggPSAoY2hhciAqKSBtYWxsb2MoTUFYUEFUSExFTik7CisJICAgIHBhdGhidWYgPSBzdHJkdXAocGF0aCk7CisJICAgIHBhdGggPSBzdHJ0b2socGF0aGJ1ZiwgIjoiKTsKKwkgICAgZG8KKwkgICAgeworCQlzdHJjcHkocnVucGF0aCwgcGF0aCk7CisJCXN0cmNhdChydW5wYXRoLCAiLyIpOworCQlzdHJjYXQocnVucGF0aCwgYXJndjApOworCQlpZiAoYWNjZXNzKHJ1bnBhdGgsIFhfT0spID09IDApCisJCSAgICBicmVhazsKKwkgICAgfSB3aGlsZSAoKHBhdGggPSBzdHJ0b2soTlVMTCwgIjoiKSkgIT0gTlVMTCk7CisJICAgIGZyZWUocGF0aGJ1Zik7CisJfQorICAgIH0KKworICAgIGlmIChydW5wYXRoICE9IE5VTEwpCisgICAgeworCWNoYXIgcnVuYnVmW01BWFBBVEhMRU5dOworCisJLyoKKwkgKiBXZSBmb3VuZCB0aGUgcnVuIGRpcmVjdG9yeS4gTm93IGZpbmQgdGhlIGluc3RhbGwgZGlyLgorCSAqLworCSh2b2lkKXZpbV9GdWxsTmFtZSgoY2hhcl91ICopcnVucGF0aCwgKGNoYXJfdSAqKXJ1bmJ1ZiwgTUFYUEFUSExFTiwgMSk7CisJcGF0aCA9IHN0cnJjaHIocnVuYnVmLCAnLycpOworCWlmIChwYXRoICE9IE5VTEwpCisJICAgICpwYXRoID0gTlVMOwkJLyogcmVtb3ZlIHRoZSB2aW0vZ3ZpbSBuYW1lICovCisJcGF0aCA9IHN0cnJjaHIocnVuYnVmLCAnLycpOworCWlmIChwYXRoICE9IE5VTEwpCisJeworCSAgICBpZiAoc3RybmNtcChwYXRoLCAiL2JpbiIsIDQpID09IDApCisJCXNldERvbGxhclZpbShydW5idWYpOworCSAgICBlbHNlIGlmIChzdHJuY21wKHBhdGgsICIvc3JjIiwgNCkgPT0gMCkKKwkgICAgeworCQkqcGF0aCA9IE5VTDsJLyogZGV2ZWxvcG1lbnQgdHJlZSAqLworCQlzZXREb2xsYXJWaW0ocnVuYnVmKTsKKwkgICAgfQorCX0KKwlmcmVlKHJ1bnBhdGgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy93b3Jrc2hvcC5oIGIvc3JjL3dvcmtzaG9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiMTI1NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy93b3Jrc2hvcC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qIHZpOnNldCB0cz04IHN0cz00IHN3PTQ6CisgKgorICogVklNIC0gVmkgSU1wcm92ZWQJYnkgQnJhbSBNb29sZW5hYXIKKyAqCQkJVmlzdWFsIFdvcmtzaG9wIGludGVncmF0aW9uIGJ5IEdvcmRvbiBQcmlldXIKKyAqCisgKiBEbyAiOmhlbHAgdWdhbmRhIiAgaW4gVmltIHRvIHJlYWQgY29weWluZyBhbmQgdXNhZ2UgY29uZGl0aW9ucy4KKyAqIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgorICovCisKKyNpZiAhZGVmaW5lZChXT1JLU0hPUF9IKSAmJiBkZWZpbmVkKEZFQVRfU1VOX1dPUktTSE9QKQorI2RlZmluZSBXT1JLU0hPUF9ICisKKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WG0vWG0uaD4KKworI2luY2x1ZGUgImludGVncmF0aW9uLmgiCisKKyNpZmRlZiBXU0RFQlVHCisjIGluY2x1ZGUgIndzZGVidWcuaCIKKyNlbHNlCisjIGlmbmRlZiBBU1NFUlQKKyMgIGRlZmluZSBBU1NFUlQoYykKKyMgZW5kaWYKKyNlbmRpZgorCitleHRlcm4gaW50CQl1c2luZ1N1bldvcmtTaG9wOwkvKiBzZXQgaWYgLXdzIGZsYWcgaXMgdXNlZCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy93c2RlYnVnLmMgYi9zcmMvd3NkZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZGJhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd3NkZWJ1Zy5jCkBAIC0wLDAgKzEsMTc5IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9OCBzdz04OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgkJCVZpc3VhbCBXb3Jrc2hvcCBpbnRlZ3JhdGlvbiBieSBHb3Jkb24gUHJpZXVyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qCisgKiBXb3JrU2hvcCBEZWJ1Z2dpbmcgVG9vbHMuIFdoYXQgYXJlIHRoZXNlIHRvb2xzIGFuZCB3aHkgYXJlIHRoZXkgaW1wb3J0YW50PworICogVGhlcmUgYXJlIHR3byBtYWluIHRvb2xzIGhlcmUuIFRoZSBmaXJzdCB0b29sIGlzIGEgdG9vbCBmb3IgZGVsYXlpbmcgb3IKKyAqIHN0b3BwaW5nIGd2aW0gZHVyaW5nIHN0YXJ0dXAuICBUaGUgc2Vjb25kIHRvb2wgaXMgYSBwcm90b2NvbCBsb2cgdG9vbC4KKyAqCisgKiBUaGUgc3RhcnR1cCBkZWxheSB0b29sIGlzIGNhbGxlZCB3c2RlYnVnX3dhaXQoKS4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBmb3IKKyAqIGRlYnVnZ2luZyBzdGFydHVwIHByb2JsZW1zIGJlY2F1c2UgZ3ZpbSB3aWxsIGJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSBmcm9tCisgKiB3b3Jrc2hvcCBhbmQgY2Fubm90IGJlIHJ1biBkaXJlY3RseSBmcm9tIGEgZGVidWdnZXIuIFRoZSBvbmx5IHdheSB0byBkZWJ1ZworICogYSBndmltIHN0YXJ0ZWQgYnkgd29ya3Nob3AgaXMgYnkgYXR0YWNoaW5nIGEgZGVidWdnZXIgdG8gaXQuIFdpdGhvdXQgdGhpcworICogdG9vbCBhbGwgc3RhcnVwIGNvZGUgd2lsbCBoYXZlIGNvbXBsZXRlZCBiZWZvcmUgeW91IGNhbiBnZXQgdGhlIHBpZCBhbmQKKyAqIGF0dGFjaC4KKyAqCisgKiBUaGUgc2Vjb25kIHRvb2wgaXMgYSBwcm90b2NvbCBsb2cgdG9vbC4gVGhlIHdvcmtzaG9wIGVkaXRvciBzZXJ2ZXIgYW5kIGd2aW0KKyAqIHBhc3MgaW5mb3JtYXRpb24gYmFjayBhbmQgZm9ydGggZHVyaW5nIGEgd29ya3Nob3Agc2Vzc2lvbi4gU29tZXRpbWVzIGl0IGlzCisgKiB2ZXJ5IGltcG9ydGFudCB0byBwZXJ1c2UgdGhpcyBjb252ZXJzYXRpb24gaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCB3aGF0IGlzCisgKiBoYXBwZW5pbmcuIFRoZSB3c2RlYnVnX2xvZ19pbml0KCkgY2FsbCBzZXRzIHVwIHRoaXMgcHJvdG9jb2wgbG9nIHRvb2wgYW5kCisgKiB3c2RlYnVnKCkgYW5kIHdzdHJhY2UoKSBjYWxscyBvdXRwdXQgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBsb2cuCisgKgorICogVGhpcyBjb2RlIG11c3QgaGF2ZSBXU0RFQlVHIGRlZmluZWQgZm9yIGl0IHRvIGJlIGNvbXBpbGVkIGludG8gdmltL2d2aW0uCisgKi8KKworI2lmZGVmIFdTREVCVUcKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAidmltLmgiCisKK0ZJTEUJCSp3c19kZWJ1ZyA9IE5VTEw7Cit1X2ludAkJIHdzX2RsZXZlbCA9IDA7CQkvKiB3c19kZWJ1ZyB2ZXJib3NpdHkgbGV2ZWwgKi8KKwordm9pZAkJIHdzZGVidWcoY2hhciAqLCAuLi4pOwordm9pZAkJIHdzdHJhY2UoY2hhciAqLCAuLi4pOworCitzdGF0aWMgaW50CSBsb29rdXAoY2hhciAqKTsKK3N0YXRpYyBpbnQJIGVycm9ySGFuZGxlcihEaXNwbGF5ICosIFhFcnJvckV2ZW50ICopOworCisKKy8qCisgKiB3c2RlYnVnX3dhaXQJLSAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZGVsYXkgb3Igc3RvcCBleGVjdXRpb24gb2YgdmltLgorICoJCSAgICBJdHMgbm9ybWFsbHkgdXNlZCB0byBkZWxheSBzdGFydHVwIHdoaWxlIGF0dGFjaGluZyBhCisgKgkJICAgIGRlYnVnZ2VyIHRvIGEgcnVubmluZyBwcm9jZXNzLiBTaW5jZSB3b3Jrc2hvcCBzdGFydHMgZ3ZpbQorICoJCSAgICBmcm9tIGEgYmFja2dyb3VuZCBwcm9jZXNzIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGRlYnVnCisgKgkJICAgIHN0YXJ0dXAgcHJvYmxlbXMuCisgKi8KKwordm9pZCB3c2RlYnVnX3dhaXQoCisJdV9pbnQJCSB3YWl0X2ZsYWdzLAkvKiB0ZWxscyB3aGF0IHRvIGRvICovCisJY2hhcgkJKndhaXRfdmFyLAkvKiB3YWl0IGVudmlyb25tZW50IHZhcmlhYmxlICovCisJdV9pbnQJCSB3YWl0X3NlY3MpCS8qIGhvdyBtYW55IHNlY29uZHMgdG8gd2FpdCAqLworeworCisJaW5pdF9ob21lZGlyKCk7CQkJLyogbm90IGluaXRlZCB5ZXQgKi8KKyNpZmRlZiBVU0VfV0REVU1QCisJV0REdW1wKDAsIDAsIDApOworI2VuZGlmCisKKwkvKiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIG9ubHkgKi8KKwlpZiAod2FpdF9mbGFncyAmIFdUX0VOViAmJiB3YWl0X3ZhciAmJiBnZXRlbnYod2FpdF92YXIpICE9IE5VTEwpIHsKKwkJc2xlZXAoYXRvaShnZXRlbnYod2FpdF92YXIpKSk7CisJfSBlbHNlIGlmICh3YWl0X2ZsYWdzICYgV1RfV0FJVCAmJiBsb29rdXAoIn4vLmd2aW13YWl0IikpIHsKKwkJc2xlZXAod2FpdF9zZWNzID4gMCAmJiB3YWl0X3NlY3MgPCAxMjAgPyB3YWl0X3NlY3MgOiAyMCk7CisJfSBlbHNlIGlmICh3YWl0X2ZsYWdzICYgV1RfU1RPUCAmJiBsb29rdXAoIn4vLmd2aW1zdG9wIikpIHsKKwkJaW50IHcgPSAxOworCQl3aGlsZSAodykgeworCQkJOworCQl9CisJfQorfSAgICAvKiBlbmQgd3NkZWJ1Z193YWl0ICovCisKKwordm9pZAord3NkZWJ1Z19sb2dfaW5pdCgKKwljaGFyCQkqbG9nX3ZhciwJLyogZW52IHZhciB3aXRoIGxvZyBmaWxlICovCisJY2hhcgkJKmxldmVsX3ZhcikJLyogZW52IHZhciB3aXRoIHdzX2RlYnVnIGxldmVsICovCit7CisJY2hhcgkJKmZpbGU7CQkvKiBwb3NzaWJsZSB3c19kZWJ1ZyBvdXRwdXQgZmlsZSAqLworCWNoYXIJCSpjcDsJCS8qIHdzX2RsZXZlbCBwb2ludGVyICovCisKKwlpZiAobG9nX3ZhciAmJiAoZmlsZSA9IGdldGVudihsb2dfdmFyKSkgIT0gTlVMTCkgeworCQljaGFyIGJ1ZltCVUZTSVpdOworCisJCXNwcmludGYoYnVmLCAiZGF0ZSA+ICVzIiwgZmlsZSk7CisJCXN5c3RlbShidWYpOworCQl3c19kZWJ1ZyA9IGZvcGVuKGZpbGUsICJhIik7CisJCWlmIChsZXZlbF92YXIgJiYgKGNwID0gZ2V0ZW52KGxldmVsX3ZhcikpICE9IE5VTEwpIHsKKwkJCXdzX2RsZXZlbCA9IHN0cnRvdWwoY3AsIE5VTEwsIDApOworCQl9IGVsc2UgeworCQkJd3NfZGxldmVsID0gV1NfVFJBQ0U7CS8qIGRlZmF1bHQgbGV2ZWwgKi8KKwkJfQorCQkvKiBYU2V0RXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlcik7ICovCisJfQorCit9ICAgIC8qIGVuZCB3c2RlYnVnX2xvZ19pbml0ICovCisKKworCisKK3ZvaWQKK3dzdHJhY2UoCisJY2hhcgkJKmZtdCwKKwkuLi4pCit7CisJdmFfbGlzdAkJIGFwOworCisJaWYgKHdzX2RlYnVnIT0gTlVMTCAmJiAod3NfZGxldmVsICYgKFdTX1RSQUNFIHwgV1NfVFJBQ0VfVkVSQk9TRSkpKSB7CisJCXZhX3N0YXJ0KGFwLCBmbXQpOworCQl2ZnByaW50Zih3c19kZWJ1ZywgZm10LCBhcCk7CisJCXZhX2VuZChhcCk7CisJCWZmbHVzaCh3c19kZWJ1Zyk7CisJfQorCit9ICAgIC8qIGVuZCB3c3RyYWNlICovCisKKwordm9pZAord3NkZWJ1ZygKKwljaGFyCQkqZm10LAorCS4uLikKK3sKKwl2YV9saXN0CQkgYXA7CisKKwlpZiAod3NfZGVidWcgIT0gTlVMTCkgeworCQl2YV9zdGFydChhcCwgZm10KTsKKwkJdmZwcmludGYod3NfZGVidWcsIGZtdCwgYXApOworCQl2YV9lbmQoYXApOworCQlmZmx1c2god3NfZGVidWcpOworCX0KKworfSAgICAvKiBlbmQgd3NkZWJ1ZyAqLworCisKK3N0YXRpYyBpbnQKK2xvb2t1cCgKKwljaGFyCQkqZmlsZSkKK3sKKwljaGFyCQkgYnVmW0JVRlNJWl07CisKKwlleHBhbmRfZW52KChjaGFyX3UgKikgZmlsZSwgKGNoYXJfdSAqKSBidWYsIEJVRlNJWik7CisJcmV0dXJuIChhY2Nlc3MoYnVmLCBGX09LKSA9PSAwKTsKKworfSAgICAvKiBlbmQgbG9va3VwICovCisKK3N0YXRpYyBpbnQKK2Vycm9ySGFuZGxlcigKKwlEaXNwbGF5CQkqZHB5LAorCVhFcnJvckV2ZW50CSplcnIpCit7CisJY2hhcgkJIG1zZ1syNTZdOworCWNoYXIJCSBidWZbMjU2XTsKKworCVhHZXRFcnJvclRleHQoZHB5LCBlcnItPmVycm9yX2NvZGUsIG1zZywgc2l6ZW9mKG1zZykpOworCXdzZGVidWcoIlxuXG5XU0RFQlVHIFZpbTogWCBFcnJvciBvZiBmYWlsZWQgcmVxdWVzdDogJXNcbiIsIG1zZyk7CisKKwlzcHJpbnRmKGJ1ZiwgIiVkIiwgZXJyLT5yZXF1ZXN0X2NvZGUpOworCVhHZXRFcnJvckRhdGFiYXNlVGV4dChkcHksCisJICAgICJYUmVxdWVzdCIsIGJ1ZiwgIlVua25vd24iLCBtc2csIHNpemVvZihtc2cpKTsKKwl3c2RlYnVnKCJcdE1ham9yIG9wY29kZSBvZiBmYWlsZWQgcmVxdWVzdDogJWQgKCVzKVxuIiwKKwkgICAgZXJyLT5yZXF1ZXN0X2NvZGUsIG1zZyk7CisJaWYgKGVyci0+cmVxdWVzdF9jb2RlID4gMTI4KSB7CisJCXdzZGVidWcoIlx0TWlub3Igb3Bjb2RlIG9mIGZhaWxlZCByZXF1ZXN0OiAlZFxuIiwKKwkJICAgIGVyci0+bWlub3JfY29kZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworCisjZW5kaWYgLyogV1NERUJVRyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3dzZGVidWcuaCBiL3NyYy93c2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkYTU2OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy93c2RlYnVnLmgKQEAgLTAsMCArMSw4MSBAQAorLyogdmk6c2V0IHRzPTggc3RzPTggc3c9ODoKKyAqCisgKiBWSU0gLSBWaSBJTXByb3ZlZAlieSBCcmFtIE1vb2xlbmFhcgorICoJCQlWaXN1YWwgV29ya3Nob3AgaW50ZWdyYXRpb24gYnkgR29yZG9uIFByaWV1cgorICoKKyAqIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgorICogRG8gIjpoZWxwIGNyZWRpdHMiIGluIFZpbSB0byBzZWUgYSBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQuCisgKi8KKworCisjaWZuZGVmIFdTREVCVUdfSAorI2RlZmluZSBXU0RFQlVHX0gKKworI2lmZGVmIFdTREVCVUcKKworI2lmbmRlZiBBU1NFUlQKKyNkZWZpbmUgQVNTRVJUKGMpIFwKKyAgICBpZiAoIShjKSkgeyBcCisJZnByaW50ZihzdGRlcnIsICJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICVkLCBmaWxlICVzXG4iLCBcCisJCV9fTElORV9fLCBfX0ZJTEVfXyk7IFwKKwlmZmx1c2goc3RkZXJyKTsgXAorCWFib3J0KCk7IFwKKyAgICB9CisjZW5kaWYKKworI2RlZmluZSBXU19UUkFDRQkJMHgwMDAwMDAwMQorI2RlZmluZSBXU19UUkFDRV9WRVJCT1NFCTB4MDAwMDAwMDIKKyNkZWZpbmUgV1NfVFJBQ0VfQ09MT05DTUQJMHgwMDAwMDAwNAorI2RlZmluZSBXU19ERUJVR19BTEwJCTB4ZmZmZmZmZmYKKworI2RlZmluZSBXU0RMRVZFTChmbGFncykJCSh3c19kZWJ1ZyAhPSBOVUxMICYmICh3c19kbGV2ZWwgJiAoZmxhZ3MpKSkKKworI2lmZGVmIFVTRV9XRERVTVAKKyNpbmNsdWRlICJ3ZHVtcC5oIgorI2VuZGlmCisKKyNkZWZpbmUgV1NERUJVR19UUkFDRQkxCisvLyNkZWZpbmUgV1NERUJVR19TRU5TRQkyCisKK3R5cGVkZWYgZW51bSB7CisJCVdUX0VOViA9IDEsCQkvKiBsb29rIGZvciBlbnYgdmFyIGlmIHNldCAqLworCQlXVF9XQUlULAkJLyogbG9vayBmb3Igfi8uZ3ZpbXdhaXQgaWYgc2V0ICovCisJCVdUX1NUT1AJCQkvKiBsb29rIGZvciB+Ly5ndmltc3RvcCBpZiBzZXQgKi8KK30gV3RXYWl0OworCisKK3ZvaWQJCSB3c2RlYnVnKGNoYXIgKiwgLi4uKTsKK3ZvaWQJCSB3c3RyYWNlKGNoYXIgKiwgLi4uKTsKKworCitleHRlcm4gRklMRQkqd3NfZGVidWc7CitleHRlcm4gdV9pbnQJIHdzX2RsZXZlbDsJCS8qIHdzX2RlYnVnIHZlcmJvc2l0eSBsZXZlbCAqLworCisjIGVsc2UJCS8qIG5vdCBXU0RFQlVHICovCisKKyNpZm5kZWYgQVNTRVJUCisjIGRlZmluZSBBU1NFUlQoYykKKyNlbmRpZgorCisvKgorICogVGhlIGZvbGxvd2luZyAyIHN0dWJzIGFyZSBuZWVkZWQgYmVjYXVzZSBhIG1hY3JvIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2Ugb2YKKyAqIHRoZSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgorICovCisKK3ZvaWQKK3dzZGVidWcoCisJY2hhcgkJKmZtdCwKKwkuLi4pCit7Cit9CisKKwordm9pZAord3N0cmFjZSgKKwljaGFyCQkqZm10LAorCS4uLikKK3sKK30KKworI2VuZGlmIC8qIFdTREVCVUcgKi8KKyNlbmRpZiAvKiBXU0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy94cG1fdzMyLmMgYi9zcmMveHBtX3czMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzY1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMveHBtX3czMi5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBMb2FkIFhQTSBpbWFnZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHBsYWNlZCBpbiBzZXBhcmF0ZSBmaWxlIGJlY2F1c2UgWHBtIGhlYWRlcnMgY29uZmxpY3Qgd2l0aAorICogVmltIG9uZXMgOigKKyAqCisgKiBXcml0dGVuIGJ5IFNlcmdleSBLaG9yZXYuCisgKiBodHRwOi8vaWFtcGhldC5ubS5ydS92aW0vaW5kZXguaHRtbAorICovCisKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisvKiByZWR1Y2VkIGRlZiBmcm9tIFZpbS5oICovCisjaWZuZGVmIF9fQVJHUworIyBpZiBkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKFdJTjMyNjQpCisjICBkZWZpbmUgX19BUkdTKHgpIHgKKyMgZWxzZQorIyAgZGVmaW5lIF9fQVJHUyh4KSAoKQorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlICJ4cG1fdzMyLmgiCisKKy8qIEVuZ2FnZSBXaW5kb3dzIHN1cHBvcnQgaW4gbGliWHBtICovCisjZGVmaW5lIEZPUl9NU1cKKworI2luY2x1ZGUgInhwbS5oIgorCisvKgorICogVHJpZXMgdG8gbG9hZCBYcG0gaW1hZ2UgZnJvbSBmaWxlICdmaWxlbmFtZScuCisgKiBJZiBmYWlscyByZXR1cm4gLTEuCisgKiBzdWNjZXNzIC0gMCBhbmQgaW1hZ2UgYW5kIG1hc2sgQklUTUFQUworICovCisgICAgaW50CitMb2FkWHBtSW1hZ2UoZmlsZW5hbWUsIGhJbWFnZSwgaFNoYXBlKQorICAgIGNoYXIgICAgKmZpbGVuYW1lOworICAgIEhCSVRNQVAgKmhJbWFnZTsKKyAgICBIQklUTUFQICpoU2hhcGU7Cit7CisgICAgWEltYWdlCSAgICAqaW1nOyAgIC8qIGxvYWRlZCBpbWFnZSAqLworICAgIFhJbWFnZQkgICAgKnNocDsgIC8qIHNoYXBlaW1hZ2UgKi8KKyAgICBYcG1BdHRyaWJ1dGVzICAgYXR0cjsKKyAgICBpbnQJCSAgICByZXM7CisgICAgSERDCQkgICAgaGRjID0gQ3JlYXRlQ29tcGF0aWJsZURDKE5VTEwpOworCisgICAgYXR0ci52YWx1ZW1hc2sgPSAwOworICAgIHJlcyA9IFhwbVJlYWRGaWxlVG9JbWFnZSgmaGRjLCBmaWxlbmFtZSwgJmltZywgJnNocCwgJmF0dHIpOworICAgIERlbGV0ZURDKGhkYyk7CisgICAgaWYgKHJlcyA8IDApCisJcmV0dXJuIC0xOworICAgIGVsc2UKKyAgICB7CisJKmhJbWFnZSA9IGltZy0+Yml0bWFwOworCSpoU2hhcGUgPSBzaHAtPmJpdG1hcDsKKwlyZXR1cm4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMveHBtX3czMi5oIGIvc3JjL3hwbV93MzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmU0NDc1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3hwbV93MzIuaApAQCAtMCwwICsxLDcgQEAKKy8qCisgKiBIZWFkZXIgZmlsZSBmb3IgeHBtX3czMi5jCisgKi8KKworI2lmbmRlZiBYUE1fVzMyX19ICitpbnQgTG9hZFhwbUltYWdlIF9fQVJHUygoY2hhciAqZmlsZW5hbWUsIEhCSVRNQVAgKmhJbWFnZSwgSEJJVE1BUCAqaFNoYXBlKSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy94eGQvTWFrZV9hbWlnYS5tYWsgYi9zcmMveHhkL01ha2VfYW1pZ2EubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzgyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMveHhkL01ha2VfYW1pZ2EubWFrCkBAIC0wLDAgKzEsMTggQEAKKyMgTWFrZWZpbGUgZm9yIHh4ZCBvbiB0aGUgQW1pZ2EsIHVzaW5nIEF6dGVjL01hbnggQyA1LjAgb3IgbGF0ZXIKKyMKKworIz4+Pj4+IGNob29zZSBiZXR3ZWVuIGRlYnVnZ2luZyAoLWJzKSBvciBvcHRpbWl6aW5nICgtc28pCitPUFRJT05TID0gLXNvCisjT1BUSU9OUyA9IC1icworCisjPj4+Pj4+IGNob29zZSAtZyBmb3IgZGVidWdnaW5nCitMTl9ERUJVRyA9CisjTE5fREVCVUcgPSAtZworCitDRkxBR1MgPSAkKE9QVElPTlMpIC13YXBydXEgLXBzIC1xZiAtREFNSUdBIC1EY29uc3Q9CisKK1h4ZDogeHhkLm8KKwlsbiArcSAtbSAkKExOX0RFQlVHKSAtbyBYeGQgeHhkLm8gLWxjMTYKKworeHhkLm86IHh4ZC5jCisJY2MgJChDRkxBR1MpIHh4ZC5jIC1vIHh4ZC5vCmRpZmYgLS1naXQgYS9zcmMveHhkL01ha2VfYmMzLm1hayBiL3NyYy94eGQvTWFrZV9iYzMubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZTI1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMveHhkL01ha2VfYmMzLm1hawpAQCAtMCwwICsxLDMxIEBACisjIFNpbXBsZSBtYWtlZmlsZSBmb3IgQm9ybGFuZCBDKysgNC4wCisjIDMuMSBjYW4gTk9UIGJlIHVzZWQsIGl0IGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBmaWxlbm8oKSBkZWZpbmUuCisKKyMgQ29tbWFuZCBsaW5lIHZhcmlhYmxlczoKKyMgQk9SCQlwYXRoIHRvIHJvb3Qgb2YgQm9ybGFuZCBDIChFOlxCT1JMQU5EQykKKyMgREVCVUcJCXNldCB0byAieWVzIiBmb3IgZGVidWdnaW5nIChubykKKworIWlmbmRlZiBCT1IKK0JPUgk9IGU6XGJjNAorIWVuZGlmCisKKyFpZiAoIiQoREVCVUcpIiA9PSAieWVzIikKK0RFQlVHX0ZMQUcgPSAtdiAtRERFQlVHCishZWxzZQorREVCVUdfRkxBRyA9CishZW5kaWYKKworQ0MJPSAkKEJPUilcYmluXGJjYworSU5DCT0gLUkkKEJPUilcaW5jbHVkZQorTElCCT0gLUwkKEJPUilcbGliCisKKyMgVGhlIGZvbGxvd2luZyBjb21waWxlIG9wdGlvbnMgY2FuIGJlIGNoYW5nZWQgZm9yIGJldHRlciBtYWNoaW5lcy4KKyMJcmVwbGFjZSAtMS0gd2l0aCAtMiB0byBwcm9kdWNlIGNvZGUgZm9yIGEgODAyODYgb3IgaGlnaGVyCisjCXJlcGxhY2UgLTEtIHdpdGggLTMgdG8gcHJvZHVjZSBjb2RlIGZvciBhIDgwMzg2IG9yIGhpZ2hlcgorIwlhZGQgLXYgZm9yIHNvdXJjZSBkZWJ1Z2dpbmcKK09QVElNSVpFPSAtMS0gLU94CisKK0NGTEFHUwk9IC1BIC1tYyAtRE1TRE9TICQoREVCVUdfRkxBRykgJChPUFRJTUlaRSkgJChJTkMpICQoTElCKQorCit4eGQuZXhlOiB4eGQuYworCSQoQ0MpICQoQ0ZMQUdTKSB4eGQuYwpkaWZmIC0tZ2l0IGEvc3JjL3h4ZC9NYWtlX2JjNS5tYWsgYi9zcmMveHhkL01ha2VfYmM1Lm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjQ0NjIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3h4ZC9NYWtlX2JjNS5tYWsKQEAgLTAsMCArMSwxOCBAQAorIyBUaGUgbW9zdCBzaW1wbGlzdGljIE1ha2VmaWxlIGZvciBXaW4zMiAoTlQgYW5kIFdpbmRvd3MgOTUpLgorIyBVc2VkIGZvciBCb3JsYW5kIEMrKy4KKworIWlmICgiJChCT1IpIj09IiIpCitCT1IgPSBjOlxiYzUKKyFlbmRpZgorIWlmICgiJChCQ0MpIj09IiIpCitCQ0MgPSBiY2MzMgorIWVuZGlmCisKK3h4ZDogeHhkLmV4ZQorCit4eGQuZXhlOiB4eGQuYworCSQoQkNDKSAtSSQoQk9SKVxpbmNsdWRlIC1MJChCT1IpXGxpYiAtRFdJTjMyIHh4ZC5jICQoQk9SKVxsaWJcd2lsZGFyZ3Mub2JqCisKK2NsZWFuOgorCS0gZGVsIHh4ZC5vYmoKKwktIGRlbCB4eGQuZXhlCmRpZmYgLS1naXQgYS9zcmMveHhkL01ha2VfY3lnLm1hayBiL3NyYy94eGQvTWFrZV9jeWcubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNGI3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMveHhkL01ha2VfY3lnLm1hawpAQCAtMCwwICsxLDI3IEBACisjIFRoZSBtb3N0IHNpbXBsaXN0aWMgTWFrZWZpbGUsIGZvciBDeWdudXMgZ2NjIG9uIE1TLURPUworCitpZm5kZWYgVVNFRExMCitVU0VETEwgPSBubworZW5kaWYKKworaWZlcSAoeWVzLCAkKFVTRURMTCkpCitERUZJTkVTID0KK0xJQlMgICAgPSAtbGMKK2Vsc2UKK0RFRklORVMgPSAtbW5vLWN5Z3dpbgorTElCUyAgICA9CitlbmRpZgorCitDRkxBR1MgPSAtTzIgLVdhbGwgLURXSU4zMiAkKERFRklORVMpCisKK2lmbmVxIChzaC5leGUsICQoU0hFTEwpKQorREVMID0gcm0KK2Vsc2UKK0RFTCA9IGRlbAorZW5kaWYKKworeHhkLmV4ZTogeHhkLmMKKwlnY2MgJChDRkxBR1MpIC1zIC1vIHh4ZC5leGUgeHhkLmMgJChMSUJTKQorCitjbGVhbjoKKwktJChERUwpIHh4ZC5leGUKZGlmZiAtLWdpdCBhL3NyYy94eGQvTWFrZV9kamcubWFrIGIvc3JjL3h4ZC9NYWtlX2RqZy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlZWQzMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy94eGQvTWFrZV9kamcubWFrCkBAIC0wLDAgKzEsOSBAQAorIyBUaGUgbW9zdCBzaW1wbGlzdGljIE1ha2VmaWxlLCBmb3IgREpHUFAgb24gTVMtRE9TCisKK0NGTEFHUyA9IC1PMiAtV2FsbAorCit4eGQuZXhlOiB4eGQuYworCWdjYyAkKENGTEFHUykgLXMgLW8geHhkLmV4ZSB4eGQuYyAtbHBjCisKK2NsZWFuOgorCWRlbCB4eGQuZXhlCmRpZmYgLS1naXQgYS9zcmMveHhkL01ha2VfbXZjLm1hayBiL3NyYy94eGQvTWFrZV9tdmMubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTQzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMveHhkL01ha2VfbXZjLm1hawpAQCAtMCwwICsxLDExIEBACisjIFRoZSBtb3N0IHNpbXBsaXN0aWMgTWFrZWZpbGUgZm9yIFdpbjMyIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgQysrCisjIChOVCBhbmQgV2luZG93cyA5NSkKKworeHhkOiB4eGQuZXhlCisKK3h4ZC5leGU6IHh4ZC5jCisgICAgIGNsIC9ub2xvZ28gLURXSU4zMiB4eGQuYyAvbGluayBzZXRhcmd2Lm9iagorCitjbGVhbjoKKyAgICAgLSBpZiBleGlzdCB4eGQub2JqIGRlbCB4eGQub2JqCisgICAgIC0gaWYgZXhpc3QgeHhkLmV4ZSBkZWwgeHhkLmV4ZQpkaWZmIC0tZ2l0IGEvc3JjL3h4ZC9NYWtlX29zMi5tYWsgYi9zcmMveHhkL01ha2Vfb3MyLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjY2OTRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3h4ZC9NYWtlX29zMi5tYWsKQEAgLTAsMCArMSwxMSBAQAorIyBBIHZlcnkgKGlmIG1vc3QgdGhlIG1vc3QpIHNpbXBsaXN0aWMgTWFrZWZpbGUgZm9yIE9TLzIKKworQ0M9Z2NjCitDRkxBR1M9LU8yIC1mbm8tc3RyZW5ndGgtcmVkdWNlIC1ET1MyCisKK3h4ZC5leGU6IHh4ZC5jCisJJChDQykgJChDRkxBR1MpIC1zIC1vICRAICQ8CisKK2NsZWFuOgorCS0gZGVsIHh4ZC5vCisJLSBkZWwgeHhkLmV4ZQpkaWZmIC0tZ2l0IGEvc3JjL3h4ZC9NYWtlX3Ztcy5tbXMgYi9zcmMveHhkL01ha2Vfdm1zLm1tcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzJjZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3h4ZC9NYWtlX3Ztcy5tbXMKQEAgLTAsMCArMSw2OSBAQAorIyBWTVMgTU1bS1NdIG1ha2VmaWxlIGZvciBYWEQKKyMgdGVzdGVkIHdpdGggTU1LIGFuZCBNTVMgYXMgd2VsbC4KKyMKKyMgTWFpbnRhaW5lZCBieSBab2x0YW4gQXJwYWRmZnkgPGFycGFkZmZ5QHBvbGFyaG9tZS5jb20+CisjCisjIEVkaXQgdGhlIGxpbmVzIGluIHRoZSBDb25maWd1cmF0aW9uIHNlY3Rpb24gYmVsb3cgdG8gc2VsZWN0LgorIworIyBUbyBidWlsZDogdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBsaW5lOgorIworIwltbXMvZGVzY3JpcD1NYWtlX3Ztcy5tbXMKKyMJICBvciBpZiB5b3UgdXNlIG1taworIwltbWsvZGVzY3JpcD1NYWtlX3Ztcy5tbXMKKyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb25maWd1cmF0aW9uIHNlY3Rpb24uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbXBpbGVyIHNlbGVjdGlvbi4KKyMgQ29tbWVudCBvdXQgaWYgeW91IHVzZSB0aGUgVkFYQyBjb21waWxlcgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBERUNDID0gWUVTCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBVbmNvbW1lbnQgaWYgd2FudCBhIGRlYnVnIHZlcnNpb24uIFJlc3VsdGluZyBleGVjdXRhYmxlIGlzIERWSU0uRVhFCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERFQlVHID0gWUVTCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRW5kIG9mIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi4KKyMKKyMgUGxlYXNlLCBkbyBub3QgY2hhbmdlIGFueXRoaW5nIGJlbG93IHdpdGhvdXQgcHJvZ3JhbW1pbmcgZXhwZXJpZW5jZS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQ0MgICAgICA9IGNjCisKKy5JRkRFRiBERUNDCitDQ19ERUYgID0gJChDQykvZGVjYworUFJFRklYICA9IC9wcmVmaXg9YWxsCisuRUxTRQorQ0NfREVGICA9ICQoQ0MpCitQUkVGSVggID0KKy5FTkRJRgorCitMRF9ERUYgID0gbGluaworCisuSUZERUYgREVCVUcKK1RBUkdFVCAgPSBkeHhkLmV4ZQorQ0ZMQUdTICA9IC9kZWJ1Zy9ub29wdCQoUFJFRklYKS9jcm9zc19yZWZlcmVuY2UvaW5jbHVkZT1bXQorTERGTEFHUyA9IC9kZWJ1ZworLkVMU0UKK1RBUkdFVCAgPSB4eGQuZXhlCitDRkxBR1MgID0gL29wdCQoUFJFRklYKS9pbmNsdWRlPVtdCitMREZMQUdTID0KKy5FTkRJRgorCisuU1VGRklYRVMgOiAub2JqIC5jCisKK1NPVVJDRVMJPSB4eGQuYworT0JKICAgICA9IHh4ZC5vYmoKKworLm9iai5jIDoKKwkkKENDX0RFRikgJChDRkxBR1MpICQ8CisKKyQoVEFSR0VUKSA6ICQoT0JKKQorCSQoTERfREVGKSAkKExERkxBR1MpIC9leGU9JChUQVJHRVQpICQrCisKK2NsZWFuIDoKKwktQCBpZiAiJydGJFNFQVJDSCgiKi5vYmoiKSciIC5ORVMuICIiICB0aGVuIGRlbGV0ZS9ub2NvbmZpcm0vbm9sb2cgKi5vYmo7KgorCS1AIGlmICInJ0YkU0VBUkNIKCIqLmV4ZSIpJyIgLk5FUy4gIiIgIHRoZW4gZGVsZXRlL25vY29uZmlybS9ub2xvZyAqLmV4ZTsqCmRpZmYgLS1naXQgYS9zcmMveHhkL01ha2VmaWxlIGIvc3JjL3h4ZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2JiY2M3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3h4ZC9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMgVGhlIG1vc3Qgc2ltcGxpc3RpYyBNYWtlZmlsZQorCit4eGQ6IHh4ZC5jCisJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLURVTklYIC1vIHh4ZCB4eGQuYworCitjbGVhbjoKKwlybSAtZiB4eGQgeHhkLm8KZGlmZiAtLWdpdCBhL3NyYy94eGQveHhkLmMgYi9zcmMveHhkL3h4ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OWY3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMveHhkL3h4ZC5jCkBAIC0wLDAgKzEsNzY3IEBACisvKiB4eGQ6IG15IGhleGR1bXAgZmFjaWxpdHkuIGp3CisgKgorICogIDIuMTAuOTAgY2hhbmdlZCB0byB3b3JkIG91dHB1dAorICogIDMuMDMuOTMgbmV3IGluZGVudCBzdHlsZSwgZHVtYiBidWcgaW5zZXJ0ZWQgYW5kIGZpeGVkLgorICoJICAgIC1jIG9wdGlvbiwgbWxzCisgKiAyNi4wNC45NCBiZXR0ZXIgb3B0aW9uIHBhcnNlciwgLXBzLCAtbCwgLXMgYWRkZWQuCisgKiAgMS4wNy45NCAtciBiYWRseSBuZWVkcyAtIGFzIGlucHV0IGZpbGUuICBQZXIgZGVmYXVsdCBhdXRvc2tpcCBvdmVyCisgKgkgICAgICAgY29uc2VxdXRpdmUgbGluZXMgb2YgemVyb2VzLCBhcyB1bml4IG9kIGRvZXMuCisgKgkgICAgLWEgc2hvd3MgdGhlbSB0b28uCisgKgkgICAgLWkgZHVtcCBhcyBjLXN0eWxlICNpbmNsdWRlICJmaWxlLmgiCisgKiAgMS4xMS45NSBpZiAieHhkIC1pIiBrbm93cyB0aGUgZmlsZW5hbWUsIGFuICd1bnNpZ25lZCBjaGFyIGZpbGVuYW1lX2JpdHNbXScKKyAqCSAgICBhcnJheSBpcyB3cml0dGVuIGluIGNvcnJlY3QgYy1zeW50YXguCisgKgkgICAgLXMgaW1wcm92ZWQsIG5vdyBkZWZhdWx0cyB0byBhYnNvbHV0ZSBzZWVrLCByZWxhdGl2ZSByZXF1aXJlcyBhICcrJy4KKyAqCSAgICAtciBpbXByb3ZlZCwgbm93IC1yIC1zIC0weC4uLiBpcyBzdXBwb3J0ZWQuCisgKgkgICAgICAgY2hhbmdlL3N1cHByZXNzIGxlYWRpbmcgJ1wwJyBieXRlcy4KKyAqCSAgICAtbCBuIGltcHJvdmVkOiBzdG9wcyBleGFjdGx5IGFmdGVyIG4gYnl0ZXMuCisgKgkgICAgLXIgaW1wcm92ZWQsIGJldHRlciBoYW5kbGluZyBvZiBwYXJ0aWFsIGxpbmVzIHdpdGggdHJhaWxpbmcgZ2FyYmFnZS4KKyAqCSAgICAtciBpbXByb3ZlZCwgbm93IC1yIC1wIHdvcmtzIGFnYWluIQorICoJICAgIC1yIGltcHJvdmVkLCBsZXNzIGZsdXNoaW5nLCBtdWNoIGZhc3RlciBub3chICh0aGF0IHdhcyBzaWxseSkKKyAqICAzLjA0Ljk2IFBlciByZXBlYXRlZCByZXF1ZXN0IG9mIGEgc2luZ2xlIHBlcnNvbjogYXV0b3NraXAgZGVmYXVsdHMgdG8gb2ZmLgorICogMTUuMDUuOTYgLXYgYWRkZWQuIFRoZXkgd2FudCB0byBrbm93IHRoZSB2ZXJzaW9uLgorICoJICAgIC1hIGZpeGVkLCB0byBzaG93IGxhc3QgbGluZSBpbmYgZmlsZSBlbmRzIGluIGFsbCB6ZXJvcy4KKyAqCSAgICAtdSBhZGRlZDogUHJpbnQgdXBwZXIgY2FzZSBoZXgtbGV0dGVycywgYXMgcHJlZmVycmVkIGJ5IHVuaXggYmMuCisgKgkgICAgLWggYWRkZWQgdG8gdXNhZ2UgbWVzc2FnZS4gVXNhZ2UgbWVzc2FnZSBleHRlbmRlZC4KKyAqCSAgICBOb3cgdXNpbmcgb3V0ZmlsZSBpZiBzcGVjaWZpZWQgZXZlbiBpbiBub3JtYWwgbW9kZSwgYWVoZW0uCisgKgkgICAgTm8gbG9uZ2VyIG1peGluZyBvZiBpbnRzIGFuZCBsb25ncy4gTWF5IGhlbHAgZG96ZSBwZW9wbGUuCisgKgkgICAgQWRkZWQgYmluaWZ5IGlvY3RsIGZvciBzYW1lIHJlYXNvbi4gKEVub3VnaCBEb3plIHN0cmVzcyBmb3IgMTk5NiEpCisgKiAxNi4wNS45NiAtcCBpbXByb3ZlZCwgcmVtb3ZlZCBvY2Nhc2lvbmFsIHN1cGVyZmx1b3VzIGxpbmVmZWVkLgorICogMjAuMDUuOTYgLWwgMCBmaXhlZC4gdHJpZWQgdG8gcmVhZCBhbnl3YXkuCisgKiAyMS4wNS45NiAtaSBmaXhlZC4gbm93IGhvbm91cnMgLXUsIGFuZCBwcmVwZW5kcyBfXyB0byBudW1lcmljIGZpbGVuYW1lcy4KKyAqCSAgICBjb21waWxlIC1EV0lOMzIgZm9yIE5UIG9yIFc5NS4gR2VvcmdlIFYuIFJlaWxseSwgKiAtdiBpbXByb3ZlZCA6LSkKKyAqCSAgICBzdXBwb3J0IC0tZ251aXNoLWxvbmdob3JuLW9wdGlvbnMKKyAqIDI1LjA1Ljk2IE1BQyBzdXBwb3J0IGFkZGVkOiBDb2RlV2FycmlvciBhbHJlYWR5IHVzZXMgYGBvdXRsaW5lJycgaW4gVHlwZXMuaAorICoJICAgIHdoaWNoIGlzIGluY2x1ZGVkIGJ5IE1hY0hlYWRlcnMgKEF4ZWwgS2llbGhvcm4pLiBSZW5hbWVkIHRvCisgKgkgICAgeHhkbGluZSgpLgorICogIDcuMDYuOTYgLWkgcHJpbnRlZCAnaW50JyBpbnN0ZWFkIG9mICdjaGFyJy4gKmJsdXNoKgorICoJICAgIGFkZGVkIEJyYW0ncyBPUzIgaWZkZWZzLi4uCisgKiAxOC4wNy45NiBnY2MgLVdhbGwgQCBTdW5PUzQgaXMgbm93IHNsaWVudC4KKyAqCSAgICBBZGRlZCBvc3ZlciBmb3IgTVNET1MvREpHUFAvV0lOMzIuCisgKiAyOS4wOC45NiBBZGRlZCBzaXplX3QgdG8gc3RybmNtcCgpIGZvciBBbWlnYS4KKyAqIDI0LjAzLjk3IFdpbmRvd3MgTlQgc3VwcG9ydCAoUGhpbCBIYW5uYSkuIENsZWFuIGV4aXQgZm9yIEFtaWdhIFdCIChCcmFtKQorICogMDIuMDQuOTcgQWRkZWQgLUUgb3B0aW9uLCB0byBoYXZlIEVCQ0RJQyB0cmFuc2xhdGlvbiBpbnN0ZWFkIG9mIEFTQ0lJCisgKgkgICAgKGFudG9uaW8uY29sb21ib0BqcmMuaXQpCisgKiAyMi4wNS45NyBhZGRlZCAtZyAoZ3JvdXAgb2N0ZXRzKSBvcHRpb24gKGpjb29rQG5hbWVyaWNhLmtsYS5jb20pLgorICogMjMuMDkuOTggbmFzdHkgLXAgLXIgbWlzZmVhdHVyZSBmaXhlZDogc2xpZ2h0bHkgd3Jvbmcgb3V0cHV0LCB3aGVuIC1jIHdhcworICoJICAgIG1pc3Npbmcgb3Igd3JvbmcuCisgKiAyNi4wOS45OCBGaXhlZDogJ3h4ZCAtaSBpbmZpbGUgb3V0ZmlsZScgZGlkIG5vdCB0cnVuY2F0ZSBvdXRmaWxlLgorICogMjcuMTAuOTggRml4ZWQ6IC1nIG9wdGlvbiBwYXJzZXIgcmVxdWlyZWQgYmxhbmsuCisgKgkgICAgb3B0aW9uIC1iIGFkZGVkOiAwMTAwMDEwMSBiaW5hcnkgb3V0cHV0IGluIG5vcm1hbCBmb3JtYXQuCisgKiAxNi4wNS4wMCBBZGRlZCBWQVhDIGNoYW5nZXMgYnkgU3RlcGhlbiBQLiBXYWxsCisgKiAxNi4wNS4wMCBJbXByb3ZlZCBNTVMgZmlsZSBhbmQgbWVyZWdlIGZvciBWTVMgYnkgWm9sdGFuIEFycGFkZmZ5CisgKgorICogKGMpIDE5OTAtMTk5OCBieSBKdWVyZ2VuIFdlaWdlcnQgKGpud2VpZ2VyQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlKQorICoKKyAqIFNtYWxsIGNoYW5nZXMgbWFkZSBhZnRlcndhcmRzIGJ5IEJyYW0gTW9vbGVuYWFyIGV0IGFsLgorICoKKyAqIERpc3RyaWJ1dGUgZnJlZWx5IGFuZCBjcmVkaXQgbWUsCisgKiBtYWtlIG1vbmV5IGFuZCBzaGFyZSB3aXRoIG1lLAorICogbG9zZSBtb25leSBhbmQgZG9uJ3QgYXNrIG1lLgorICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBWQVhDCisjIGluY2x1ZGUgPGZpbGUuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKyNpZmRlZiBfX1RTQ19fCisjIGRlZmluZSBNU0RPUworI2VuZGlmCisjaWYgIWRlZmluZWQoT1MyKSAmJiBkZWZpbmVkKF9fRU1YX18pCisjIGRlZmluZSBPUzIKKyNlbmRpZgorI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKKyMgaW5jbHVkZSA8aW8uaD4JLyogZm9yIHNldG1vZGUoKSAqLworI2Vsc2UKKyMgaWZkZWYgVU5JWAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4JLyogZm9yIHN0cm5jbXAoKSAqLworI2luY2x1ZGUgPGN0eXBlLmg+CS8qIGZvciBpc2FsbnVtKCkgKi8KKyNpZiBfX01XRVJLU19fICYmICFkZWZpbmVkKEJFQk9YKQorIyBpbmNsdWRlIDx1bml4Lmg+CS8qIGZvciBmZG9wZW4oKSBvbiBNQUMgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIF9fQk9STEFORENfXyA8PSAweDA0MTAgJiYgIWRlZmluZWQoZmlsZW5vKQorLyogTWlzc2luZyBkZWZpbmUgYW5kIHByb3RvdHlwZSBncmFiYmVkIGZyb20gdGhlIEJDIDQuMCA8c3RkaW8uaD4gKi8KKyMgZGVmaW5lIGZpbGVubyhmKSAgICAgICAoKGYpLT5mZCkKK0ZJTEUgICBfRkFSICpfQ2RlY2wgX0ZBUkZVTkMgZmRvcGVuKGludCBfX2hhbmRsZSwgY2hhciBfRkFSICpfX3R5cGUpOworI2VuZGlmCisKKworLyogIFRoaXMgY29ycmVjdHMgdGhlIHByb2JsZW0gb2YgbWlzc2luZyBwcm90b3R5cGVzIGZvciBjZXJ0YWluIGZ1bmN0aW9ucworICogIGluIHNvbWUgR05VIGluc3RhbGxhdGlvbnMgKGUuZy4gU3VuT1MgNC4xLngpLgorICogIERhcnJlbiBIaWViZXJ0IDxkYXJyZW5AaG1pLmNvbT4gKHNwYXJjLXN1bi1zdW5vczQuMS4zX1UxLzIuNy4yLjIpCisgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fU1REQ19fKQorIyBpZm5kZWYgX19VU0VfRklYRURfUFJPVE9UWVBFU19fCisjICBkZWZpbmUgX19VU0VfRklYRURfUFJPVE9UWVBFU19fCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfX1VTRV9GSVhFRF9QUk9UT1RZUEVTX18KKy8qCisgKiBUaGlzIGlzIGhpc3RvcmljIGFuZCB3b3JrcyBvbmx5IGlmIHRoZSBjb21waWxlciByZWFsbHkgaGFzIG5vIHByb3RvdHlwZXM6CisgKgorICogSW5jbHVkZSBwcm90b3R5cGVzIGZvciBTdW4gT1MgNC54LCB3aGVuIHVzaW5nIGFuIEFOU0kgY29tcGlsZXIuCisgKiBGSUxFIGlzIGRlZmluZWQgb24gT1MgNC54LCBub3Qgb24gNS54IChTb2xhcmlzKS4KKyAqIGlmIF9fU1ZSNCBpcyBkZWZpbmVkIChzb21lIFNvbGFyaXMgdmVyc2lvbnMpLCBkb24ndCBpbmNsdWRlIHRoaXMuCisgKi8KKyNpZiBkZWZpbmVkKHN1bikgJiYgZGVmaW5lZChGSUxFKSAmJiAhZGVmaW5lZChfX1NWUjQpICYmIGRlZmluZWQoX19TVERDX18pCisjICBkZWZpbmUgX19QKGEpIGEKKy8qIGV4Y2VycHQgZnJvbSBteSBzdW5fc3RkbGliLmggKi8KK2V4dGVybiBpbnQgZnByaW50ZiBfX1AoKEZJTEUgKiwgY2hhciAqLCAuLi4pKTsKK2V4dGVybiBpbnQgZnB1dHMgICBfX1AoKGNoYXIgKiwgRklMRSAqKSk7CitleHRlcm4gaW50IF9mbHNidWYgX19QKCh1bnNpZ25lZCBjaGFyLCBGSUxFICopKTsKK2V4dGVybiBpbnQgX2ZpbGJ1ZiBfX1AoKEZJTEUgKikpOworZXh0ZXJuIGludCBmZmx1c2ggIF9fUCgoRklMRSAqKSk7CitleHRlcm4gaW50IGZjbG9zZSAgX19QKChGSUxFICopKTsKK2V4dGVybiBpbnQgZnNlZWsgICBfX1AoKEZJTEUgKiwgbG9uZywgaW50KSk7CitleHRlcm4gaW50IHJld2luZCAgX19QKChGSUxFICopKTsKKworZXh0ZXJuIHZvaWQgcGVycm9yIF9fUCgoY2hhciAqKSk7CisjIGVuZGlmCisjZW5kaWYKKworZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCgpOworZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsKCk7CisKK2NoYXIgdmVyc2lvbltdID0gInh4ZCBWMS4xMCAyN29jdDk4IGJ5IEp1ZXJnZW4gV2VpZ2VydCI7CisjaWZkZWYgV0lOMzIKK2NoYXIgb3N2ZXJbXSA9ICIgKFdpbjMyKSI7CisjZWxzZQorIyBpZmRlZiBESkdQUAorY2hhciBvc3ZlcltdID0gIiAoZG9zIDMyIGJpdCkiOworIyBlbHNlCisjICBpZmRlZiBNU0RPUworY2hhciBvc3ZlcltdID0gIiAoZG9zIDE2IGJpdCkiOworIyAgZWxzZQorY2hhciBvc3ZlcltdID0gIiI7CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDWUdXSU4pICYmIChkZWZpbmVkKENZR1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DWUdXSU4zMl9fKSkKKyMgZGVmaW5lIENZR1dJTgorI2VuZGlmCisjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoQ1lHV0lOKQorIyBkZWZpbmUgQklOX1JFQUQoeWVzKSAgKCh5ZXMpID8gInJiIiA6ICJydCIpCisjIGRlZmluZSBCSU5fV1JJVEUoeWVzKSAoKHllcykgPyAid2IiIDogInd0IikKKyMgZGVmaW5lIEJJTl9DUkVBVCh5ZXMpICgoeWVzKSA/IChPX0NSRUFUfE9fQklOQVJZKSA6IE9fQ1JFQVQpCisjIGRlZmluZSBCSU5fQVNTSUdOKGZwLCB5ZXMpIHNldG1vZGUoZmlsZW5vKGZwKSwgKHllcykgPyBPX0JJTkFSWSA6IE9fVEVYVCkKKyMgaWYgZGVmaW5lZChDWUdXSU4pCisjICBkZWZpbmUgUEFUSF9TRVAgJy8nCisjIGVsc2UKKyMgIGRlZmluZSBQQVRIX1NFUCAnXFwnCisjIGVuZGlmCisjZWxzZQorIyBpZmRlZiBWTVMKKyMgIGRlZmluZSBCSU5fUkVBRChkdW1teSkgICJyIgorIyAgZGVmaW5lIEJJTl9XUklURShkdW1teSkgInciCisjICBkZWZpbmUgQklOX0NSRUFUKGR1bW15KSBPX0NSRUFUCisjICBkZWZpbmUgQklOX0FTU0lHTihmcCwgZHVtbXkpIGZwCisjICBkZWZpbmUgUEFUSF9TRVAgJ10nCisjICBkZWZpbmUgRklMRV9TRVAgJy4nCisjIGVsc2UKKyMgIGRlZmluZSBCSU5fUkVBRChkdW1teSkgICJyIgorIyAgZGVmaW5lIEJJTl9XUklURShkdW1teSkgInciCisjICBkZWZpbmUgQklOX0NSRUFUKGR1bW15KSBPX0NSRUFUCisjICBkZWZpbmUgQklOX0FTU0lHTihmcCwgZHVtbXkpIGZwCisjICBkZWZpbmUgUEFUSF9TRVAgJy8nCisjIGVuZGlmCisjZW5kaWYKKworLyogb3BlbiBoYXMgb25seSB0byBhcmd1bWVudHMgb24gdGhlIE1hYyAqLworI2lmIF9fTVdFUktTX18KKyMgZGVmaW5lIE9QRU4obmFtZSwgbW9kZSwgdW1hc2spIG9wZW4obmFtZSwgbW9kZSkKKyNlbHNlCisjIGRlZmluZSBPUEVOKG5hbWUsIG1vZGUsIHVtYXNrKSBvcGVuKG5hbWUsIG1vZGUsIHVtYXNrKQorI2VuZGlmCisKKyNpZmRlZiBBTUlHQQorIyBkZWZpbmUgU1RSTkNNUChzMSwgczIsIGwpIHN0cm5jbXAoczEsIHMyLCAoc2l6ZV90KWwpCisjZWxzZQorIyBkZWZpbmUgU1RSTkNNUChzMSwgczIsIGwpIHN0cm5jbXAoczEsIHMyLCBsKQorI2VuZGlmCisKKyNpZm5kZWYgX19QCisjIGlmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoT1MyKSBcCisJCXx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgZGVmaW5lIF9fUChhKSBhCisjIGVsc2UKKyMgIGRlZmluZSBfX1AoYSkgKCkKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBMZXQncyBjb2xsZWN0IHNvbWUgcHJvdG90eXBlcyAqLworLyogQ29kZVdhcnJpb3IgaXMgcmVhbGx5IHBpY2t5IGFib3V0IG1pc3NpbmcgcHJvdG90eXBlcyAqLworc3RhdGljIHZvaWQgZXhpdF93aXRoX3VzYWdlIF9fUCgoY2hhciAqKSk7CitzdGF0aWMgaW50IGh1bnR5cGUgX19QKChGSUxFICosIEZJTEUgKiwgRklMRSAqLCBjaGFyICosIGludCwgaW50LCBsb25nKSk7CitzdGF0aWMgdm9pZCB4eGRsaW5lIF9fUCgoRklMRSAqLCBjaGFyICosIGludCkpOworCisjZGVmaW5lIFRSWV9TRUVLCS8qIGF0dGVtcHQgdG8gdXNlIGxzZWVrLCBvciBza2lwIGZvcndhcmQgYnkgcmVhZGluZyAqLworI2RlZmluZSBDT0xTIDI1NgkvKiBjaGFuZ2UgaGVyZSwgaWYgeW91IGV2ZXIgbmVlZCBtb3JlIGNvbHVtbnMgKi8KKyNkZWZpbmUgTExFTiAoOSArICg1KkNPTFMtMSkvMiArIDIgKyBDT0xTKQorCitjaGFyIGhleHhhW10gPSAiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlBQkNERUYiLCAqaGV4eCA9IGhleHhhOworCisvKiB0aGUgZGlmZmVyZW50IGhleHR5cGVzIGtub3duIGJ5IHRoaXMgcHJvZ3JhbTogKi8KKyNkZWZpbmUgSEVYX05PUk1BTCAwCisjZGVmaW5lIEhFWF9QT1NUU0NSSVBUIDEKKyNkZWZpbmUgSEVYX0NJTkNMVURFIDIKKyNkZWZpbmUgSEVYX0JJVFMgMwkJLyogbm90IGhleCBhIGR1bXAsIGJ1dCBiaXRzOiAwMTExMTAwMSAqLworCitzdGF0aWMgdm9pZAorZXhpdF93aXRoX3VzYWdlKHBuYW1lKQorY2hhciAqcG5hbWU7Cit7CisgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6XG4gICAgICAgJXMgW29wdGlvbnNdIFtpbmZpbGUgW291dGZpbGVdXVxuIiwgcG5hbWUpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgICBvclxuICAgICAgICVzIC1yIFstcyBbLV1vZmZzZXRdIFstYyBjb2xzXSBbLXBzXSBbaW5maWxlIFtvdXRmaWxlXV1cbiIsIHBuYW1lKTsKKyAgZnByaW50ZihzdGRlcnIsICJPcHRpb25zOlxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAgIC1hICAgICAgICAgIHRvZ2dsZSBhdXRvc2tpcDogQSBzaW5nbGUgJyonIHJlcGxhY2VzIG51bC1saW5lcy4gRGVmYXVsdCBvZmYuXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgICAgLWIgICAgICAgICAgYmluYXJ5IGRpZ2l0IGR1bXAgKGluY29tcGF0aWJsZSB3aXRoIC1wLC1pLC1yKS4gRGVmYXVsdCBoZXguXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgICAgLWMgY29scyAgICAgZm9ybWF0IDxjb2xzPiBvY3RldHMgcGVyIGxpbmUuIERlZmF1bHQgMTYgKC1pOiAxMiwgLXBzOiAzMCkuXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgICAgLUUgICAgICAgICAgc2hvdyBjaGFyYWN0ZXJzIGluIEVCQ0RJQy4gRGVmYXVsdCBBU0NJSS5cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgICAtZyAgICAgICAgICBudW1iZXIgb2Ygb2N0ZXRzIHBlciBncm91cCBpbiBub3JtYWwgb3V0cHV0LiBEZWZhdWx0IDIuXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgICAgLWggICAgICAgICAgcHJpbnQgdGhpcyBzdW1tYXJ5LlxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAgIC1pICAgICAgICAgIG91dHB1dCBpbiBDIGluY2x1ZGUgZmlsZSBzdHlsZS5cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgICAtbCBsZW4gICAgICBzdG9wIGFmdGVyIDxsZW4+IG9jdGV0cy5cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgICAtcHMgICAgICAgICBvdXRwdXQgaW4gcG9zdHNjcmlwdCBwbGFpbiBoZXhkdW1wIHN0eWxlLlxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAgIC1yICAgICAgICAgIHJldmVyc2Ugb3BlcmF0aW9uOiBjb252ZXJ0IChvciBwYXRjaCkgaGV4ZHVtcCBpbnRvIGJpbmFyeS5cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgICAtciAtcyBvZmYgICByZXZlcnQgd2l0aCA8b2ZmPiBhZGRlZCB0byBmaWxlIHBvc2l0aW9ucyBmb3VuZCBpbiBoZXhkdW1wLlxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAgIC1zICVzc2VlayAgc3RhcnQgYXQgPHNlZWs+IGJ5dGVzIGFicy4gJXNpbmZpbGUgb2Zmc2V0LlxuIiwKKyNpZmRlZiBUUllfU0VFSworCSAgIlsrXVstXSIsICIob3IgKzogcmVsLikgIik7CisjZWxzZQorCSAgIiIsICIiKTsKKyNlbmRpZgorICBmcHJpbnRmKHN0ZGVyciwgIiAgICAtdSAgICAgICAgICB1c2UgdXBwZXIgY2FzZSBoZXggbGV0dGVycy5cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgICAtdiAgICAgICAgICBzaG93IHZlcnNpb246IFwiJXMlc1wiLlxuIiwgdmVyc2lvbiwgb3N2ZXIpOworICBleGl0KDEpOworfQorCisvKgorICogTWF4LiBjb2xzIGJpbmFyeSBjaGFyYWN0ZXJzIGFyZSBkZWNvZGVkIGZyb20gdGhlIGlucHV0IHN0cmVhbSBwZXIgbGluZS4KKyAqIFR3byBhZGphY2VudCBnYXJiYWdlIGNoYXJhY3RlcnMgYWZ0ZXIgZXZhbHVhdGVkIGRhdGEgZGVsaW1pdCB2YWxpZCBkYXRhLgorICogRXZlcnl0aGluZyB1cCB0byB0aGUgbmV4dCBuZXdsaW5lIGlzIGRpc2NhcmRlZC4KKyAqCisgKiBUaGUgbmFtZSBpcyBoaXN0b3JpYyBhbmQgY2FtZSBmcm9tICd1bmRvIHR5cGUgb3B0IGgnLgorICovCitzdGF0aWMgaW50CitodW50eXBlKGZwaSwgZnBvLCBmcGVyciwgcG5hbWUsIGNvbHMsIGhleHR5cGUsIGJhc2Vfb2ZmKQorRklMRSAqZnBpLCAqZnBvLCAqZnBlcnI7CitjaGFyICpwbmFtZTsKK2ludCBjb2xzLCBoZXh0eXBlOworbG9uZyBiYXNlX29mZjsKK3sKKyAgaW50IGMsIGlnbl9nYXJiID0gMSwgbjEgPSAtMSwgbjIgPSAwLCBuMywgcCA9IGNvbHM7CisgIGxvbmcgaGF2ZV9vZmYgPSAwLCB3YW50X29mZiA9IDA7CisKKyAgcmV3aW5kKGZwaSk7CisKKyAgd2hpbGUgKChjID0gZ2V0YyhmcGkpKSAhPSBFT0YpCisgICAgeworICAgICAgaWYgKGMgPT0gJ1xyJykJLyogRG96ZSBzdHlsZSBpbnB1dCBmaWxlPyAqLworCWNvbnRpbnVlOworCisgICAgICBuMyA9IG4yOworICAgICAgbjIgPSBuMTsKKworICAgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQorCW4xID0gYyAtICcwJzsKKyAgICAgIGVsc2UgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQorCW4xID0gYyAtICdhJyArIDEwOworICAgICAgZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSAnRicpCisJbjEgPSBjIC0gJ0EnICsgMTA7CisgICAgICBlbHNlCisJeworCSAgbjEgPSAtMTsKKwkgIGlmIChpZ25fZ2FyYikKKwkgICAgY29udGludWU7CisJfQorCisgICAgICBpZ25fZ2FyYiA9IDA7CisKKyAgICAgIGlmIChwID49IGNvbHMpCisJeworCSAgaWYgKCFoZXh0eXBlKQorCSAgICB7CisJICAgICAgaWYgKG4xIDwgMCkKKwkJeworCQkgIHAgPSAwOworCQkgIGNvbnRpbnVlOworCQl9CisJICAgICAgd2FudF9vZmYgPSAod2FudF9vZmYgPDwgNCkgfCBuMTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBwID0gMDsKKwl9CisKKyAgICAgIGlmIChiYXNlX29mZiArIHdhbnRfb2ZmICE9IGhhdmVfb2ZmKQorCXsKKwkgIGZmbHVzaChmcG8pOworI2lmZGVmIFRSWV9TRUVLCisJICBjID0gZnNlZWsoZnBvLCBiYXNlX29mZiArIHdhbnRfb2ZmIC0gaGF2ZV9vZmYsIDEpOworCSAgaWYgKGMgPj0gMCkKKwkgICAgaGF2ZV9vZmYgPSBiYXNlX29mZiArIHdhbnRfb2ZmOworI2VuZGlmCisJICBpZiAoYmFzZV9vZmYgKyB3YW50X29mZiA8IGhhdmVfb2ZmKQorCSAgICB7CisJICAgICAgZnByaW50ZihmcGVyciwgIiVzOiBzb3JyeSwgY2Fubm90IHNlZWsgYmFja3dhcmRzLlxuIiwgcG5hbWUpOworCSAgICAgIHJldHVybiA1OworCSAgICB9CisJICBmb3IgKDsgaGF2ZV9vZmYgPCBiYXNlX29mZiArIHdhbnRfb2ZmOyBoYXZlX29mZisrKQorCSAgICBwdXRjKDAsIGZwbyk7CisJfQorCisgICAgICBpZiAobjIgPj0gMCAmJiBuMSA+PSAwKQorCXsKKwkgIHB1dGMoKG4yIDw8IDQpIHwgbjEsIGZwbyk7CisJICBoYXZlX29mZisrOworCSAgd2FudF9vZmYrKzsKKwkgIG4xID0gLTE7CisJICBpZiAoKCsrcCA+PSBjb2xzKSAmJiAhaGV4dHlwZSkKKwkgICAgeworCSAgICAgIC8qIHNraXAgcmVzdCBvZiBsaW5lIGFzIGdhcmJhZ2EgKi8KKwkgICAgICB3YW50X29mZiA9IDA7CisJICAgICAgd2hpbGUgKChjID0gZ2V0YyhmcGkpKSAhPSAnXG4nICYmIGMgIT0gRU9GKQorCQk7CisJICAgICAgaWduX2dhcmIgPSAxOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAobjEgPCAwICYmIG4yIDwgMCAmJiBuMyA8IDApCisJeworCSAgLyogYWxyZWFkeSBzdHVtYmxlZCBpbnRvIGdhcmJhZ2UsIHNraXAgbGluZSwgd2FpdCBhbmQgc2VlICovCisJICBpZiAoIWhleHR5cGUpCisJICAgIHdhbnRfb2ZmID0gMDsKKwkgIHdoaWxlICgoYyA9IGdldGMoZnBpKSkgIT0gJ1xuJyAmJiBjICE9IEVPRikKKwkgICAgOworCSAgaWduX2dhcmIgPSAxOworCX0KKyAgICB9CisgIGZmbHVzaChmcG8pOworI2lmZGVmIFRSWV9TRUVLCisgIGZzZWVrKGZwbywgMEwsIDIpOworI2VuZGlmCisgIGZjbG9zZShmcG8pOworICBmY2xvc2UoZnBpKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQcmludCBsaW5lIGwuIElmIG56IGlzIGZhbHNlLCB4eGRsaW5lIHJlZ2FyZHMgdGhlIGxpbmUgYSBsaW5lIG9mCisgKiB6ZXJvZXMuIElmIHRoZXJlIGFyZSB0aHJlZSBvciBtb3JlIGNvbnNlY3V0aXZlIGxpbmVzIG9mIHplcm9lcywKKyAqIHRoZXkgYXJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlICcqJyBjaGFyYWN0ZXIuCisgKgorICogSWYgdGhlIG91dHB1dCBlbmRzIHdpdGggbW9yZSB0aGFuIHR3byBsaW5lcyBvZiB6ZXJvZXMsIHlvdQorICogc2hvdWxkIGNhbGwgeHhkbGluZSBhZ2FpbiB3aXRoIGwgYmVpbmcgdGhlIGxhc3QgbGluZSBhbmQgbnoKKyAqIG5lZ2F0aXZlLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbGFzdCBsaW5lIGlzIHNob3duIGV2ZW4gd2hlbgorICogaXQgaXMgYWxsIHplcm9lcy4KKyAqCisgKiBJZiBueiBpcyBhbHdheXMgcG9zaXRpdmUsIGxpbmVzIGFyZSBuZXZlciBzdXBwcmVzc2VkLgorICovCitzdGF0aWMgdm9pZAoreHhkbGluZShmcCwgbCwgbnopCitGSUxFICpmcDsKK2NoYXIgKmw7CitpbnQgbno7Cit7CisgIHN0YXRpYyBjaGFyIHpbTExFTisxXTsKKyAgc3RhdGljIGludCB6ZXJvX3NlZW4gPSAwOworCisgIGlmICghbnogJiYgemVyb19zZWVuID09IDEpCisgICAgc3RyY3B5KHosIGwpOworCisgIGlmIChueiB8fCAhemVyb19zZWVuKyspCisgICAgeworICAgICAgaWYgKG56KQorCXsKKwkgIGlmIChueiA8IDApCisJICAgIHplcm9fc2Vlbi0tOworCSAgaWYgKHplcm9fc2VlbiA9PSAyKQorCSAgICBmcHV0cyh6LCBmcCk7CisJICBpZiAoemVyb19zZWVuID4gMikKKwkgICAgZnB1dHMoIipcbiIsIGZwKTsKKwl9CisgICAgICBpZiAobnogPj0gMCB8fCB6ZXJvX3NlZW4gPiAwKQorCWZwdXRzKGwsIGZwKTsKKyAgICAgIGlmIChueikKKwl6ZXJvX3NlZW4gPSAwOworICAgIH0KK30KKworLyogVGhpcyBpcyBhbiBFQkNESUMgdG8gQVNDSUkgY29udmVyc2lvbiB0YWJsZSAqLworLyogZnJvbSBhIHByb3Bvc2VkIEJUTCBzdGFuZGFyZCBBcHJpbCAxNiwgMTk3OSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgZXRvYTY0W10gPQoreworICAgIDAwNDAsMDI0MCwwMjQxLDAyNDIsMDI0MywwMjQ0LDAyNDUsMDI0NiwKKyAgICAwMjQ3LDAyNTAsMDMyNSwwMDU2LDAwNzQsMDA1MCwwMDUzLDAxNzQsCisgICAgMDA0NiwwMjUxLDAyNTIsMDI1MywwMjU0LDAyNTUsMDI1NiwwMjU3LAorICAgIDAyNjAsMDI2MSwwMDQxLDAwNDQsMDA1MiwwMDUxLDAwNzMsMDE3NiwKKyAgICAwMDU1LDAwNTcsMDI2MiwwMjYzLDAyNjQsMDI2NSwwMjY2LDAyNjcsCisgICAgMDI3MCwwMjcxLDAzMTMsMDA1NCwwMDQ1LDAxMzcsMDA3NiwwMDc3LAorICAgIDAyNzIsMDI3MywwMjc0LDAyNzUsMDI3NiwwMjc3LDAzMDAsMDMwMSwKKyAgICAwMzAyLDAxNDAsMDA3MiwwMDQzLDAxMDAsMDA0NywwMDc1LDAwNDIsCisgICAgMDMwMywwMTQxLDAxNDIsMDE0MywwMTQ0LDAxNDUsMDE0NiwwMTQ3LAorICAgIDAxNTAsMDE1MSwwMzA0LDAzMDUsMDMwNiwwMzA3LDAzMTAsMDMxMSwKKyAgICAwMzEyLDAxNTIsMDE1MywwMTU0LDAxNTUsMDE1NiwwMTU3LDAxNjAsCisgICAgMDE2MSwwMTYyLDAxMzYsMDMxNCwwMzE1LDAzMTYsMDMxNywwMzIwLAorICAgIDAzMjEsMDM0NSwwMTYzLDAxNjQsMDE2NSwwMTY2LDAxNjcsMDE3MCwKKyAgICAwMTcxLDAxNzIsMDMyMiwwMzIzLDAzMjQsMDEzMywwMzI2LDAzMjcsCisgICAgMDMzMCwwMzMxLDAzMzIsMDMzMywwMzM0LDAzMzUsMDMzNiwwMzM3LAorICAgIDAzNDAsMDM0MSwwMzQyLDAzNDMsMDM0NCwwMTM1LDAzNDYsMDM0NywKKyAgICAwMTczLDAxMDEsMDEwMiwwMTAzLDAxMDQsMDEwNSwwMTA2LDAxMDcsCisgICAgMDExMCwwMTExLDAzNTAsMDM1MSwwMzUyLDAzNTMsMDM1NCwwMzU1LAorICAgIDAxNzUsMDExMiwwMTEzLDAxMTQsMDExNSwwMTE2LDAxMTcsMDEyMCwKKyAgICAwMTIxLDAxMjIsMDM1NiwwMzU3LDAzNjAsMDM2MSwwMzYyLDAzNjMsCisgICAgMDEzNCwwMjM3LDAxMjMsMDEyNCwwMTI1LDAxMjYsMDEyNywwMTMwLAorICAgIDAxMzEsMDEzMiwwMzY0LDAzNjUsMDM2NiwwMzY3LDAzNzAsMDM3MSwKKyAgICAwMDYwLDAwNjEsMDA2MiwwMDYzLDAwNjQsMDA2NSwwMDY2LDAwNjcsCisgICAgMDA3MCwwMDcxLDAzNzIsMDM3MywwMzc0LDAzNzUsMDM3NiwwMzc3Cit9OworCitpbnQKK21haW4oYXJnYywgYXJndikKK2ludCBhcmdjOworY2hhciAqYXJndltdOworeworICBGSUxFICpmcCwgKmZwbzsKKyAgaW50IGMsIGUsIHAgPSAwLCByZWxzZWVrID0gMSwgbmVnc2VlayA9IDAsIHJldmVydCA9IDA7CisgIGludCBjb2xzID0gMCwgbm9uemVybyA9IDAsIGF1dG9za2lwID0gMCwgaGV4dHlwZSA9IEhFWF9OT1JNQUw7CisgIGludCBlYmNkaWMgPSAwOworICBpbnQgb2N0c3BlcmdycCA9IC0xOwkvKiBudW1iZXIgb2Ygb2N0ZXRzIGdyb3VwZWQgaW4gb3V0cHV0ICovCisgIGludCBncnBsZW47CQkvKiB0b3RhbCBjaGFycyBwZXIgb2N0ZXQgZ3JvdXAgKi8KKyAgbG9uZyBsZW5ndGggPSAtMSwgbiA9IDAsIHNlZWtvZmYgPSAwOworICBjaGFyIGxbTExFTisxXTsKKyAgY2hhciAqcG5hbWUsICpwcDsKKworI2lmZGVmIEFNSUdBCisgIC8qIFRoaXMgcHJvZ3JhbSBkb2Vzbid0IHdvcmsgd2hlbiBzdGFydGVkIGZyb20gdGhlIFdvcmtiZW5jaCAqLworICBpZiAoYXJnYyA9PSAwKQorICAgIGV4aXQoMSk7CisjZW5kaWYKKworICBwbmFtZSA9IGFyZ3ZbMF07CisgIGZvciAocHAgPSBwbmFtZTsgKnBwOyApCisgICAgaWYgKCpwcCsrID09IFBBVEhfU0VQKQorICAgICAgcG5hbWUgPSBwcDsKKyNpZmRlZiBGSUxFX1NFUAorICBmb3IgKHBwID0gcG5hbWU7ICpwcDsgcHArKykKKyAgICBpZiAoKnBwID09IEZJTEVfU0VQKQorICAgICAgeworCSpwcCA9ICdcMCc7CisJYnJlYWs7CisgICAgICB9CisjZW5kaWYKKworICB3aGlsZSAoYXJnYyA+PSAyKQorICAgIHsKKyAgICAgIHBwID0gYXJndlsxXSArICghU1RSTkNNUChhcmd2WzFdLCAiLS0iLCAyKSAmJiBhcmd2WzFdWzJdKTsKKwkgICBpZiAoIVNUUk5DTVAocHAsICItYSIsIDIpKSBhdXRvc2tpcCA9IDEgLSBhdXRvc2tpcDsKKyAgICAgIGVsc2UgaWYgKCFTVFJOQ01QKHBwLCAiLWIiLCAyKSkgaGV4dHlwZSA9IEhFWF9CSVRTOworICAgICAgZWxzZSBpZiAoIVNUUk5DTVAocHAsICItdSIsIDIpKSBoZXh4ID0gaGV4eGEgKyAxNjsKKyAgICAgIGVsc2UgaWYgKCFTVFJOQ01QKHBwLCAiLXAiLCAyKSkgaGV4dHlwZSA9IEhFWF9QT1NUU0NSSVBUOworICAgICAgZWxzZSBpZiAoIVNUUk5DTVAocHAsICItaSIsIDIpKSBoZXh0eXBlID0gSEVYX0NJTkNMVURFOworICAgICAgZWxzZSBpZiAoIVNUUk5DTVAocHAsICItciIsIDIpKSByZXZlcnQrKzsKKyAgICAgIGVsc2UgaWYgKCFTVFJOQ01QKHBwLCAiLUUiLCAyKSkgZWJjZGljKys7CisgICAgICBlbHNlIGlmICghU1RSTkNNUChwcCwgIi12IiwgMikpCisJeworCSAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCB2ZXJzaW9uLCBvc3Zlcik7CisJICBleGl0KDApOworCX0KKyAgICAgIGVsc2UgaWYgKCFTVFJOQ01QKHBwLCAiLWMiLCAyKSkKKwl7CisJICBpZiAocHBbMl0gJiYgU1RSTkNNUCgib2xzIiwgcHAgKyAyLCAzKSkKKwkgICAgY29scyA9IChpbnQpc3RydG9sKHBwICsgMiwgTlVMTCwgMCk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoIWFyZ3ZbMl0pCisJCWV4aXRfd2l0aF91c2FnZShwbmFtZSk7CisJICAgICAgY29scyA9IChpbnQpc3RydG9sKGFyZ3ZbMl0sIE5VTEwsIDApOworCSAgICAgIGFyZ3YrKzsKKwkgICAgICBhcmdjLS07CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICghU1RSTkNNUChwcCwgIi1nIiwgMikpCisJeworCSAgaWYgKHBwWzJdICYmIFNUUk5DTVAoImdyb3VwIiwgcHAgKyAyLCA1KSkKKwkgICAgb2N0c3BlcmdycCA9IChpbnQpc3RydG9sKHBwICsgMiwgTlVMTCwgMCk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoIWFyZ3ZbMl0pCisJCWV4aXRfd2l0aF91c2FnZShwbmFtZSk7CisJICAgICAgb2N0c3BlcmdycCA9IChpbnQpc3RydG9sKGFyZ3ZbMl0sIE5VTEwsIDApOworCSAgICAgIGFyZ3YrKzsKKwkgICAgICBhcmdjLS07CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICghU1RSTkNNUChwcCwgIi1zIiwgMikpCisJeworCSAgcmVsc2VlayA9IDA7CisJICBuZWdzZWVrID0gMDsKKwkgIGlmIChwcFsyXSAmJiBTVFJOQ01QKCJraXAiLCBwcCsyLCAzKSAmJiBTVFJOQ01QKCJlZWsiLCBwcCsyLCAzKSkKKwkgICAgeworI2lmZGVmIFRSWV9TRUVLCisJICAgICAgaWYgKHBwWzJdID09ICcrJykKKwkJcmVsc2VlaysrOworCSAgICAgIGlmIChwcFsyK3JlbHNlZWtdID09ICctJykKKwkJbmVnc2VlaysrOworI2VuZGlmCisJICAgICAgc2Vla29mZiA9IHN0cnRvbChwcCArIDIrcmVsc2VlaytuZWdzZWVrLCAoY2hhciAqKilOVUxMLCAwKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKCFhcmd2WzJdKQorCQlleGl0X3dpdGhfdXNhZ2UocG5hbWUpOworI2lmZGVmIFRSWV9TRUVLCisJICAgICAgaWYgKGFyZ3ZbMl1bMF0gPT0gJysnKQorCQlyZWxzZWVrKys7CisJICAgICAgaWYgKGFyZ3ZbMl1bcmVsc2Vla10gPT0gJy0nKQorCQluZWdzZWVrKys7CisjZW5kaWYKKwkgICAgICBzZWVrb2ZmID0gc3RydG9sKGFyZ3ZbMl0gKyByZWxzZWVrK25lZ3NlZWssIChjaGFyICoqKU5VTEwsIDApOworCSAgICAgIGFyZ3YrKzsKKwkgICAgICBhcmdjLS07CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICghU1RSTkNNUChwcCwgIi1sIiwgMikpCisJeworCSAgaWYgKHBwWzJdICYmIFNUUk5DTVAoImVuIiwgcHAgKyAyLCAyKSkKKwkgICAgbGVuZ3RoID0gc3RydG9sKHBwICsgMiwgKGNoYXIgKiopTlVMTCwgMCk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoIWFyZ3ZbMl0pCisJCWV4aXRfd2l0aF91c2FnZShwbmFtZSk7CisJICAgICAgbGVuZ3RoID0gc3RydG9sKGFyZ3ZbMl0sIChjaGFyICoqKU5VTEwsIDApOworCSAgICAgIGFyZ3YrKzsKKwkgICAgICBhcmdjLS07CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICghc3RyY21wKHBwLCAiLS0iKSkJLyogZW5kIG9mIG9wdGlvbnMgKi8KKwl7CisJICBhcmd2Kys7CisJICBhcmdjLS07CisJICBicmVhazsKKwl9CisgICAgICBlbHNlIGlmIChwcFswXSA9PSAnLScgJiYgcHBbMV0pCS8qIHVua25vd24gb3B0aW9uICovCisJZXhpdF93aXRoX3VzYWdlKHBuYW1lKTsKKyAgICAgIGVsc2UKKwlicmVhazsJCQkJLyogbm90IGFuIG9wdGlvbiAqLworCisgICAgICBhcmd2Kys7CQkJCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgYXJnYy0tOworICAgIH0KKworICBpZiAoIWNvbHMpCisgICAgc3dpdGNoIChoZXh0eXBlKQorICAgICAgeworICAgICAgY2FzZSBIRVhfUE9TVFNDUklQVDoJY29scyA9IDMwOyBicmVhazsKKyAgICAgIGNhc2UgSEVYX0NJTkNMVURFOgljb2xzID0gMTI7IGJyZWFrOworICAgICAgY2FzZSBIRVhfQklUUzoJCWNvbHMgPSA2OyBicmVhazsKKyAgICAgIGNhc2UgSEVYX05PUk1BTDoKKyAgICAgIGRlZmF1bHQ6CQkJY29scyA9IDE2OyBicmVhazsKKyAgICAgIH0KKworICBpZiAob2N0c3BlcmdycCA8IDApCisgICAgc3dpdGNoIChoZXh0eXBlKQorICAgICAgeworICAgICAgY2FzZSBIRVhfQklUUzoJCW9jdHNwZXJncnAgPSAxOyBicmVhazsKKyAgICAgIGNhc2UgSEVYX05PUk1BTDoJCW9jdHNwZXJncnAgPSAyOyBicmVhazsKKyAgICAgIGNhc2UgSEVYX1BPU1RTQ1JJUFQ6CisgICAgICBjYXNlIEhFWF9DSU5DTFVERToKKyAgICAgIGRlZmF1bHQ6CQkJb2N0c3BlcmdycCA9IDA7IGJyZWFrOworICAgICAgfQorCisgIGlmIChjb2xzIDwgMSB8fCAoIWhleHR5cGUgJiYgKGNvbHMgPiBDT0xTKSkpCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICIlczogaW52YWxpZCBudW1iZXIgb2YgY29sdW1ucyAobWF4LiAlZCkuXG4iLCBwbmFtZSwgQ09MUyk7CisgICAgICBleGl0KDEpOworICAgIH0KKworICBpZiAob2N0c3BlcmdycCA8IDEpCisgICAgb2N0c3BlcmdycCA9IGNvbHM7CisKKyAgaWYgKGFyZ2MgPiAzKQorICAgIGV4aXRfd2l0aF91c2FnZShwbmFtZSk7CisKKyAgaWYgKGFyZ2MgPT0gMSB8fCAoYXJndlsxXVswXSA9PSAnLScgJiYgIWFyZ3ZbMV1bMV0pKQorICAgIEJJTl9BU1NJR04oZnAgPSBzdGRpbiwgIXJldmVydCk7CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoKGZwID0gZm9wZW4oYXJndlsxXSwgQklOX1JFQUQoIXJldmVydCkpKSA9PSBOVUxMKQorCXsKKwkgIGZwcmludGYoc3RkZXJyLCIlczogIiwgcG5hbWUpOworCSAgcGVycm9yKGFyZ3ZbMV0pOworCSAgcmV0dXJuIDI7CisJfQorICAgIH0KKworICBpZiAoYXJnYyA8IDMgfHwgKGFyZ3ZbMl1bMF0gPT0gJy0nICYmICFhcmd2WzJdWzFdKSkKKyAgICBCSU5fQVNTSUdOKGZwbyA9IHN0ZG91dCwgcmV2ZXJ0KTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBmZDsKKyAgICAgIGludCBtb2RlID0gcmV2ZXJ0ID8gT19XUk9OTFkgOiAoT19UUlVOQ3xPX1dST05MWSk7CisKKyAgICAgIGlmICgoKGZkID0gT1BFTihhcmd2WzJdLCBtb2RlIHwgQklOX0NSRUFUKHJldmVydCksIDA2NjYpKSA8IDApIHx8CisJICAoZnBvID0gZmRvcGVuKGZkLCBCSU5fV1JJVEUocmV2ZXJ0KSkpID09IE5VTEwpCisJeworCSAgZnByaW50ZihzdGRlcnIsICIlczogIiwgcG5hbWUpOworCSAgcGVycm9yKGFyZ3ZbMl0pOworCSAgcmV0dXJuIDM7CisJfQorICAgICAgcmV3aW5kKGZwbyk7CisgICAgfQorCisgIGlmIChyZXZlcnQpCisgICAgeworICAgICAgaWYgKGhleHR5cGUgJiYgKGhleHR5cGUgIT0gSEVYX1BPU1RTQ1JJUFQpKQorCXsKKwkgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvcnJ5LCBjYW5ub3QgcmV2ZXJ0IHRoaXMgdHlwZSBvZiBoZXhkdW1wXG4iLCBwbmFtZSk7CisJICByZXR1cm4gLTE7CisJfQorICAgICAgcmV0dXJuIGh1bnR5cGUoZnAsIGZwbywgc3RkZXJyLCBwbmFtZSwgY29scywgaGV4dHlwZSwKKwkJbmVnc2VlayA/IC1zZWVrb2ZmIDogc2Vla29mZik7CisgICAgfQorCisgIGlmIChzZWVrb2ZmIHx8IG5lZ3NlZWsgfHwgIXJlbHNlZWspCisgICAgeworI2lmZGVmIFRSWV9TRUVLCisgICAgICBpZiAocmVsc2VlaykKKwllID0gZnNlZWsoZnAsIG5lZ3NlZWsgPyAtc2Vla29mZiA6IHNlZWtvZmYsIDEpOworICAgICAgZWxzZQorCWUgPSBmc2VlayhmcCwgbmVnc2VlayA/IC1zZWVrb2ZmIDogc2Vla29mZiwgbmVnc2VlayA/IDIgOiAwKTsKKyAgICAgIGlmIChlIDwgMCAmJiBuZWdzZWVrKQorCXsKKwkgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvcnJ5IGNhbm5vdCBzZWVrLlxuIiwgcG5hbWUpOworCSAgcmV0dXJuIDQ7CisJfQorICAgICAgaWYgKGUgPj0gMCkKKwlzZWVrb2ZmID0gZnRlbGwoZnApOworICAgICAgZWxzZQorI2VuZGlmCisJeworCSAgbG9uZyBzID0gc2Vla29mZjsKKworCSAgd2hpbGUgKHMtLSkKKwkgICAgKHZvaWQpZ2V0YyhmcCk7CisJfQorICAgIH0KKworICBpZiAoaGV4dHlwZSA9PSBIRVhfQ0lOQ0xVREUpCisgICAgeworICAgICAgaWYgKGZwICE9IHN0ZGluKQorCXsKKwkgIGZwcmludGYoZnBvLCAidW5zaWduZWQgY2hhciAlcyIsIGlzZGlnaXQoKGludClhcmd2WzFdWzBdKSA/ICJfXyIgOiAiIik7CisJICBmb3IgKGUgPSAwOyAoYyA9IGFyZ3ZbMV1bZV0pICE9IDA7IGUrKykKKwkgICAgcHV0Yyhpc2FsbnVtKGMpID8gYyA6ICdfJywgZnBvKTsKKwkgIGZwdXRzKCJbXSA9IHtcbiIsIGZwbyk7CisJfQorCisgICAgICBwID0gMDsKKyAgICAgIHdoaWxlICgobGVuZ3RoIDwgMCB8fCBwIDwgbGVuZ3RoKSAmJiAoYyA9IGdldGMoZnApKSAhPSBFT0YpCisJeworCSAgZnByaW50ZihmcG8sIChoZXh4ID09IGhleHhhKSA/ICIlczB4JTAyeCIgOiAiJXMwWCUwMlgiLAorCSAgICAocCAlIGNvbHMpID8gIiwgIiA6ICIsXG4gICIrMiohcCwgIGMpOworCSAgcCsrOworCX0KKworICAgICAgaWYgKHApCisJZnB1dHMoIlxufTtcbiIrMyooZnAgPT0gc3RkaW4pLCBmcG8pOworCisgICAgICBpZiAoZnAgIT0gc3RkaW4pCisJeworCSAgZnByaW50ZihmcG8sICJ1bnNpZ25lZCBpbnQgJXMiLCBpc2RpZ2l0KChpbnQpYXJndlsxXVswXSkgPyAiX18iIDogIiIpOworCSAgZm9yIChlID0gMDsgKGMgPSBhcmd2WzFdW2VdKSAhPSAwOyBlKyspCisJICAgIHB1dGMoaXNhbG51bShjKSA/IGMgOiAnXycsIGZwbyk7CisJICBmcHJpbnRmKGZwbywgIl9sZW4gPSAlZDtcbiIsIHApOworCX0KKworICAgICAgZmNsb3NlKGZwKTsKKyAgICAgIGZjbG9zZShmcG8pOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGlmIChoZXh0eXBlID09IEhFWF9QT1NUU0NSSVBUKQorICAgIHsKKyAgICAgIHAgPSBjb2xzOworICAgICAgd2hpbGUgKChsZW5ndGggPCAwIHx8IG4gPCBsZW5ndGgpICYmIChlID0gZ2V0YyhmcCkpICE9IEVPRikKKwl7CisJICBwdXRjaGFyKGhleHhbKGUgPj4gNCkgJiAweGZdKTsKKwkgIHB1dGNoYXIoaGV4eFsoZSAgICAgKSAmIDB4Zl0pOworCSAgbisrOworCSAgaWYgKCEtLXApCisJICAgIHsKKwkgICAgICBwdXRjaGFyKCdcbicpOworCSAgICAgIHAgPSBjb2xzOworCSAgICB9CisJfQorICAgICAgaWYgKHAgPCBjb2xzKQorCXB1dGNoYXIoJ1xuJyk7CisgICAgICBmY2xvc2UoZnApOworICAgICAgZmNsb3NlKGZwbyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgLyogaGV4dHlwZTogSEVYX05PUk1BTCBvciBIRVhfQklUUyAqLworCisgIGlmIChoZXh0eXBlID09IEhFWF9OT1JNQUwpCisgICAgZ3JwbGVuID0gb2N0c3BlcmdycCArIG9jdHNwZXJncnAgKyAxOwkvKiBjaGFycyBwZXIgb2N0ZXQgZ3JvdXAgKi8KKyAgZWxzZQkvKiBoZXh0eXBlID09IEhFWF9CSVRTICovCisgICAgZ3JwbGVuID0gOCAqIG9jdHNwZXJncnAgKyAxOworCisgIHdoaWxlICgobGVuZ3RoIDwgMCB8fCBuIDwgbGVuZ3RoKSAmJiAoZSA9IGdldGMoZnApKSAhPSBFT0YpCisgICAgeworICAgICAgaWYgKHAgPT0gMCkKKwl7CisJICBzcHJpbnRmKGwsICIlMDdseDogIiwgbiArIHNlZWtvZmYpOworCSAgZm9yIChjID0gOTsgYyA8IExMRU47IGxbYysrXSA9ICcgJyk7CisJfQorICAgICAgaWYgKGhleHR5cGUgPT0gSEVYX05PUk1BTCkKKwl7CisJICBsW2MgPSAoOSArIChncnBsZW4gKiBwKSAvIG9jdHNwZXJncnApXSA9IGhleHhbKGUgPj4gNCkgJiAweGZdOworCSAgbFsrK2NdCQkJICAgICAgID0gaGV4eFsgZSAgICAgICAmIDB4Zl07CisJfQorICAgICAgZWxzZSAvKiBoZXh0eXBlID09IEhFWF9CSVRTICovCisJeworCSAgaW50IGk7CisKKwkgIGMgPSAoOSArIChncnBsZW4gKiBwKSAvIG9jdHNwZXJncnApIC0gMTsKKwkgIGZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKQorCSAgICBsWysrY10gPSAoZSAmICgxIDw8IGkpKSA/ICcxJyA6ICcwJzsKKwl9CisgICAgICBpZiAoZWJjZGljKQorCWUgPSAoZSA8IDY0KSA/ICcuJyA6IGV0b2E2NFtlLTY0XTsKKyAgICAgIGxbMTEgKyAoZ3JwbGVuICogY29scyAtIDEpL29jdHNwZXJncnAgKyBwXSA9CisjaWZkZWYgX19NVlNfXworCSAgKGUgPj0gNjQpCisjZWxzZQorCSAgKGUgPiAzMSAmJiBlIDwgMTI3KQorI2VuZGlmCisJICA/IGUgOiAnLic7CisgICAgICBpZiAoZSkKKwlub256ZXJvKys7CisgICAgICBuKys7CisgICAgICBpZiAoKytwID09IGNvbHMpCisJeworCSAgbFtjID0gKDExICsgKGdycGxlbiAqIGNvbHMgLSAxKS9vY3RzcGVyZ3JwICsgcCldID0gJ1xuJzsgbFsrK2NdID0gJ1wwJzsKKwkgIHh4ZGxpbmUoZnBvLCBsLCBhdXRvc2tpcCA/IG5vbnplcm8gOiAxKTsKKwkgIG5vbnplcm8gPSAwOworCSAgcCA9IDA7CisJfQorICAgIH0KKyAgaWYgKHApCisgICAgeworICAgICAgbFtjID0gKDExICsgKGdycGxlbiAqIGNvbHMgLSAxKS9vY3RzcGVyZ3JwICsgcCldID0gJ1xuJzsgbFsrK2NdID0gJ1wwJzsKKyAgICAgIHh4ZGxpbmUoZnBvLCBsLCAxKTsKKyAgICB9CisgIGVsc2UgaWYgKGF1dG9za2lwKQorICAgIHh4ZGxpbmUoZnBvLCBsLCAtMSk7CS8qIGxhc3QgY2hhbmNlIHRvIGZsdXNoIG91dCBzdXByZXNzZWQgbGluZXMgKi8KKworICBmY2xvc2UoZnApOworICBmY2xvc2UoZnBvKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS91bmluc3RhbC50eHQgYi91bmluc3RhbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwNmM5OQotLS0gL2Rldi9udWxsCisrKyBiL3VuaW5zdGFsLnR4dApAQCAtMCwwICsxLDgwIEBACitVbmluc3RhbGxpbmcgVmltIG9uIERvcyBhbmQgTVMtV2luZG93cy4KKworVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gcmVtb3ZlIFZpbToKKworMS4gV2l0aCB0aGUgR1VJIHVuaW5zdGFsbGVyLgorICAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIFZpbSB3YXMgaW5zdGFsbGVkIHdpdGggdGhlIHNlbGYtaW5zdGFsbGluZworICAgZXhlY3V0YWJsZS4gIFRoaXMgaGFzIGEgbWluaW1hbCBudW1iZXIgb2YgcXVlc3Rpb25zLiAgSXQgY2FuIGRlbGV0ZQorICAgZXZlcnl0aGluZyB0aGF0IHdhcyBpbnN0YWxsZWQuICBUaGlzIGFsc28gdW5yZWdpc3RlcnMgdGhlIFZpc1ZpbS5kbGwKKworMi4gV2l0aCB1bmluc3RhbC5leGUuCisgICBUaGlzIHJlbW92ZXMgbW9zdCBpbnN0YWxsZWQgaXRlbXMsIGJ1dCBkb2VzIG5vdCBkZWxldGUgdGhlIGZpbGVzIHlvdQorICAgdW5wYWNrZWQuCisKKzMuIEJ5IGhhbmQuCisgICBUaGlzIGlzIGEgYml0IG1vcmUgd29yaywgYnV0IHlvdSBjYW4gZGVjaWRlIGV4YWN0bHkgd2hhdCB5b3Ugd2FudCB0bworICAgcmVtb3ZlLiAgRm9yIHVuaW5zdGFsbGluZyB0aGUgIkVkaXQgd2l0aCBWaW0iIHBvcHVwIG1lbnUgZW50cnkgeW91IHN0aWxsCisgICBoYXZlIHRvIHVzZSB1bmluc3RhbC5leGUuCisKK0l0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBtZXRob2QgdGhhdCBtYXRjaGVzIHdpdGggaG93IHlvdSBpbnN0YWxsZWQgVmltLgorVGh1cyBpZiB5b3UgaW5zdGFsbGVkIFZpbSBieSBoYW5kLCBkZWxldGVkIGl0IGJ5IGhhbmQuCisKK1RoZSBmaXJzdCB0d28gbWV0aG9kcyBzaG91bGQgYmUgYXZhaWxhYmxlIGZyb20gdGhlIEFkZC9SZW1vdmUgc29mdHdhcmUgd2luZG93CithbmQgdGhlIFZpbSBlbnRyeSBpbiB0aGUgU3RhcnQgbWVudS4gIElmIHRoZXNlIGhhdmUgYmVlbiByZW1vdmVkIGFscmVhZHksIGZpbmQKKyJ1bmluc3RhbGwtZ3VpLmV4ZSIgb3IgInVuaW5zdGFsLmV4ZSIgaW4gdGhlIFZpbSBkaXJlY3RvcnkuCisgICBSdW5uaW5nIHRoZXNlIHByb2dyYW1zIHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5LiAgQ2FyZWZ1bGx5IHJlYWQgdGhlCittZXNzYWdlcyB0byBhdm9pZCBkZWxldGluZyBzb21ldGhpbmcgeW91IHdhbnQgdG8ga2VlcC4KKworSGVyZSBhcmUgZ3VpZGVsaW5lcyBmb3IgcmVtb3ZpbmcgVmltIGJ5IGhhbmQ6CisKKzEuIFJlbW92ZSB0aGUgIkVkaXQgd2l0aCBWaW0iIHBvcHVwIG1lbnUgZW50cnksIGlmIGl0IGV4aXN0cy4gIFRoaXMgd2lsbCBvbmx5CisgICBiZSBvbiBNUy1XaW5kb3dzIDk1Lzk4L05ULiAgVGhpcyBpcyBkb25lIGJ5IHJ1bm5pbmcgdGhlIHVuaW5zdGFsLmV4ZQorICAgcHJvZ3JhbS4gIEl0IHJlbW92ZXMgdGhlIHJlZ2lzdHJ5IGVudHJpZXMgZm9yIHRoZSAiRWRpdCB3aXRoIFZpbSIgcG9wdXAKKyAgIG1lbnUgZW50cnkuICBZb3Ugb25seSBuZWVkIHRvIHJ1biB1bmluc3RhbC5leGUgd2hlbiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlCisgICBtZW51IGVudHJ5LiAgWW91IGNhbiBhbHNvIHJ1biB1bmluc3RhbC5leGUgZnJvbSB0aGUgQ29udHJvbCBwYW5lbCB3aXRoIHRoZQorICAgQWRkL1JlbW92ZSBwcm9ncmFtcyBhcHBsaWNhdGlvbi4KKyAgIE5vdGUgdGhhdCB1bmluc3RhbC5leGUgb2ZmZXJzIHlvdSB0byB1bmluc3RhbCBvdGhlciBpdGVtcy4gIFlvdSBjYW4gc2tpcAorICAgdGhpcy4KKworMi4gT25seSBpZiB5b3UgaGF2ZSB1c2VkIHRoZSBPTEUgdmVyc2lvbiBvZiBndmltOiBSZW1vdmUgdGhlIHJlZ2lzdHJhdGlvbiBvZgorICAgdGhpcyBwcm9ncmFtIGJ5IHJ1bm5pbmcgImd2aW0gLXVucmVnaXN0ZXIiIGluIGEgY29uc29sZSB3aW5kb3cuCisKKzMuIERlbGV0ZSB0aGUgZXhlY3V0YWJsZXMuICBJZiB5b3UgY29waWVkIHRoZSBleGVjdXRhYmxlcyB0byBhbm90aGVyIGxvY2F0aW9uLAorICAgeW91IHdpbGwgaGF2ZSB0byBkZWxldGUgdGhlbSBmcm9tIHdoZXJlIHlvdSBjb3BpZWQgdGhlbSB0by4gIElmIHlvdSBkb24ndAorICAgcmVtZW1iZXIgd2hlcmUgdGhleSBhcmUsIGxvb2sgaW4gdGhlIGRpcmVjdG9yaWVzIGZyb20gdGhlICRQQVRIIGVudmlyb25tZW50CisgICB2YXJpYWJsZS4KKyAgIElmIHlvdSBjcmVhdGVkIC5iYXQgZmlsZXMgd2hlbiBpbnN0YWxsaW5nIFZpbSwgYWxzbyBzZWFyY2ggZm9yIHZpbS5iYXQsCisgICBndmltLmJhdCwgZXRjLgorCis0LiBJZiB5b3UgY29tcGxldGVseSB3YW50IHRvIGRlbGV0ZSB2aW0sIGFuZCBhcmUgbm90IGdvaW5nIHRvIGluc3RhbGwgYW5vdGhlcgorICAgdmVyc2lvbiwgeW91IGNhbiBkZWxldGUgdGhlIHZpbXJjIGZpbGVzIHRoYXQgeW91IGNyZWF0ZWQuICBUaGVzZSBhcmUKKyAgIG5vcm1hbGx5IGxvY2F0ZWQgaW4gYSBkaXJlY3RvcnkgbGlrZSAiQzpcdmltIi4gIElmIHRoZSAkVklNIGVudmlyb25tZW50CisgICB2YXJpYWJsZSBpcyBzZXQsIGl0IHdpbGwgdGVsbCB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgTm9ybWFsbHkgeW91IGNhbgorICAgZGVsZXRlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkuICBXYXJuaW5nOiBZb3UgbWlnaHQgaGF2ZSBwdXQgc29tZQorICAgZmlsZXMgdGhlcmUgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBzYXZlLiAgSWYgeW91IGRpZCByZW1vdmUgaXQgYWxsLCB5b3UgY2FuCisgICBza2lwIHRoZSBuZXh0IHN0ZXAuCisKKzUuIERlbGV0ZSB0aGUgZGlzdHJpYnV0ZWQgZmlsZXMuICBJZiB5b3UgZm9sbG93ZWQgdGhlIGRpcmVjdGlvbnMsIHRoZXNlIHdpbGwKKyAgIGJlIGxvY2F0ZWQgaW4gYSBkaXJlY3RvcnkgbGlrZSAiQzpcdmltXHZpbTU0Ii4gIElmIHRoZSAkVklNIGVudmlyb25tZW50CisgICB2YXJpYWJsZSBpcyBzZXQsIHRoZSBkaXJlY3Rvcnkgd2lsbCBiZSAkVklNXHZpbTU0LiAgRGVsZXRlIHRoZSAidmltNTQiCisgICBkaXJlY3RvcnkgYW5kIGFsbCB0aGF0IGlzIGluIGl0LiAgV2FybmluZzogSWYgeW91IGNoYW5nZWQgYW55IG9mIHRoZQorICAgZGlzdHJpYnV0ZWQgZmlsZXMsIG9yIGFkZGVkIHNvbWUgb2YgeW91ciBvd24gZmlsZXMsIHlvdSBtaWdodCB3YW50IHRvIHNhdmUKKyAgIHRoZXNlIGZpcnN0LiAgQnV0IG5vcm1hbGx5IHlvdSB3b3VsZCBub3QgaGF2ZSBjaGFuZ2VkIG9yIGFkZGVkIGZpbGVzIGhlcmUuCisKKzYuIFJlbW92ZSBzZXR0aW5nIHRoZSAkVklNIGFuZCAkVklNUlVOVElNRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgYWRqdXN0CisgICAkUEFUSC4gICRWSU0gb25seSBuZWVkcyB0byBiZSByZW1vdmVkIGlmIHlvdSBhcmUgbm90IGdvaW5nIHRvIGluc3RhbGwKKyAgIGFub3RoZXIgdmVyc2lvbiBvZiBWaW0uICAkVklNUlVOVElNRSBpcyBtb3N0bHkgbm90IHNldC4gIENoZWNrIGlmICRQQVRICisgICBjb250YWlucyB0aGUgcGF0aCBvZiB0aGUgdmltIGRpcmVjdG9yeS4gIE5vdGUgdGhhdCAkUEFUSCBtYXkgYmUgc2V0IGluCisgICBzZXZlcmFsIHBsYWNlcywgeW91IHdpbGwgaGF2ZSB0byBmaW5kIHRoZSByaWdodCBvbmUsIGFuZCBvbmx5IGRlbGV0ZSB0aGUKKyAgIFZpbSBwYXRoIGZyb20gaXQuICBZb3UgY2FuIG1vc3QgbGlrZWx5IGZpbmQgdGhlIGxpbmVzIHRoYXQgc2V0ICRQQVRILCAkVklNCisgICBhbmQvb3IgJFZJTVJVTlRJTUUgaW4gQzpcYXV0b2V4ZWMuYmF0LiAgVW5kZXIgV2luZG93cyBOVCB5b3UgbWlnaHQgbmVlZCB0bworICAgdXNlIHRoZSAiU3lzdGVtIFByb3BlcnRpZXMiIGVkaXRvciB0byBjaGFuZ2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcywgaWYKKyAgIHRoZXkgYXJlIG5vdCBpbiB0aGUgQzpcYXV0b2V4ZWMuYmF0IGZpbGUuICBZb3UgY2FuIHN0YXJ0IGl0IGJ5IHNlbGVjdGluZworICAgU3RhcnQvU2V0dGluZ3MvQ29udHJvbCBQYW5lbCBhbmQgdGhlbiAiU3lzdGVtIi4KKworNy4gSWYgeW91IGFkZGVkIGEgVmltIGVudHJ5IGluIHRoZSBzdGFydCBtZW51LCBkZWxldGUgaXQuCisKKzguIElmIHlvdSBjcmVhdGVkIGljb25zIGZvciBWaW0gb24gdGhlIGRlc2t0b3AsIGRlbGV0ZSB0aGVtLgorCitWaW0gZG9lcyBub3QgdXNlIC5pbmkgZmlsZXMuICBUaGUgYWJvdmUgc2hvdWxkIHJlbW92ZSBhbGwgVmltIGZpbGVzLCBleGNlcHQKK3RoZSBvbmVzIHRoYXQgeW91IG1vdmVkIGVsc2V3aGVyZSB5b3Vyc2VsZi4KZGlmZiAtLWdpdCBhL3ZpbWRpci5pbmZvIGIvdmltZGlyLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGRiMmExNAotLS0gL2Rldi9udWxsCisrKyBiL3ZpbWRpci5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3ZpbXR1dG9yLmJhdCBiL3ZpbXR1dG9yLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQ3YThjCi0tLSAvZGV2L251bGwKKysrIGIvdmltdHV0b3IuYmF0CkBAIC0wLDAgKzEsNjcgQEAKKzo6IFN0YXJ0IFZpbSBvbiBhIGNvcHkgb2YgdGhlIHR1dG9yIGZpbGUuCitAZWNobyBvZmYKKworOjogVXNhZ2U6IHZpbXR1dG9yIFstY29uc29sZV0gW3h4XQorOjoKKzo6IC1jb25zb2xlIG1lYW5zIGd2aW0gd2lsbCBub3QgYmUgdXNlZAorOjogeHggaXMgYSBsYW5ndWFnZSBjb2RlIGxpa2UgImVzIiBvciAibmwiLgorOjogV2hlbiBhbiB4eCBhcmd1bWVudCBpcyBnaXZlbiwgaXQgdHJpZXMgbG9hZGluZyB0aGF0IHR1dG9yLgorOjogV2hlbiB0aGlzIGZhaWxzIG9yIG5vIHh4IGFyZ3VtZW50IHdhcyBnaXZlbiwgaXQgdHJpZXMgdXNpbmcgJ3Y6bGFuZycKKzo6IFdoZW4gdGhhdCBhbHNvIGZhaWxzLCBpdCB1c2VzIHRoZSBFbmdsaXNoIHZlcnNpb24uCisKKzo6IFVzZSBWaW0gdG8gY29weSB0aGUgdHV0b3IsIGl0IGtub3dzIHRoZSB2YWx1ZSBvZiAkVklNUlVOVElNRQorRk9SICUlZCBpbiAoLiAlVE1QJSAlVEVNUCUpIERPIElGIEVYSVNUICUlZFxudWwgU0VUIFRVVE9SQ09QWT0lJWRcJHR1dG9yJAorCitTRVQgeHg9JTEKKworSUYgTk9UIC4lMT09Li1jb25zb2xlIEdPVE8gdXNlX2d1aQorU0hJRlQKK1NFVCB4eD0lMQorR09UTyB1c2VfdmltCis6dXNlX2d1aQorCis6OiBUcnkgbWFraW5nIGEgY29weSBvZiB0dXRvciB3aXRoIGd2aW0uICBJZiBndmltIGNhbm5vdCBiZSBmb3VuZCwgdHJ5IHVzaW5nCis6OiB2aW0gaW5zdGVhZC4gIElmIHZpbSBjYW5ub3QgYmUgZm91bmQsIGFsZXJ0IHVzZXIgdG8gY2hlY2sgZW52aXJvbm1lbnQgYW5kCis6OiBpbnN0YWxsYXRpb24uCisKKzo6IFRoZSBzY3JpcHQgdHV0b3IudmltIHRlbGxzIFZpbSB3aGljaCBmaWxlIHRvIGNvcHkuCis6OiBGb3IgV2luZG93cyBOVCAic3RhcnQiIHdvcmtzIGEgYml0IGRpZmZlcmVudGx5LgorSUYgLiVPUyU9PS5XaW5kb3dzX05UIEdPVE8gbnRhY3Rpb24KKworc3RhcnQgL3cgZ3ZpbSAtdSBOT05FIC1jICJzbyAkVklNUlVOVElNRS90dXRvci90dXRvci52aW0iCitJRiBFUlJPUkxFVkVMIDEgR09UTyB1c2VfdmltCisKKzo6IFN0YXJ0IGd2aW0gd2l0aG91dCBhbnkgLnZpbXJjLCBzZXQgJ25vY29tcGF0aWJsZScKK3N0YXJ0IC93IGd2aW0gLXUgTk9ORSAtYyAic2V0IG5vY3AiICVUVVRPUkNPUFklCisKK0dPVE8gZW5kCisKKzpudGFjdGlvbgorc3RhcnQgImR1bW15IiAvYiAvdyBndmltIC11IE5PTkUgLWMgInNvICRWSU1SVU5USU1FL3R1dG9yL3R1dG9yLnZpbSIKK0lGIEVSUk9STEVWRUwgMSBHT1RPIHVzZV92aW0KKworOjogU3RhcnQgZ3ZpbSB3aXRob3V0IGFueSAudmltcmMsIHNldCAnbm9jb21wYXRpYmxlJworc3RhcnQgImR1bW15IiAvYiAvdyBndmltIC11IE5PTkUgLWMgInNldCBub2NwIiAlVFVUT1JDT1BZJQorCitHT1RPIGVuZAorCis6dXNlX3ZpbQorOjogVGhlIHNjcmlwdCB0dXRvci52aW0gdGVsbHMgVmltIHdoaWNoIGZpbGUgdG8gY29weQordmltIC11IE5PTkUgLWMgInNvICRWSU1SVU5USU1FL3R1dG9yL3R1dG9yLnZpbSIKK0lGIEVSUk9STEVWRUwgMSBHT1RPIG5vX2V4ZWN1dGFibGUKKworOjogU3RhcnQgdmltIHdpdGhvdXQgYW55IC52aW1yYywgc2V0ICdub2NvbXBhdGlibGUnCit2aW0gLXUgTk9ORSAtYyAic2V0IG5vY3AiICVUVVRPUkNPUFklCisKK0dPVE8gZW5kCisKKzpub19leGVjdXRhYmxlCitFQ0hPLgorRUNITy4KK0VDSE8gTm8gdmltIG9yIGd2aW0gZm91bmQgaW4gY3VycmVudCBkaXJlY3Rvcnkgb3IgUEFUSC4KK0VDSE8gQ2hlY2sgeW91ciBpbnN0YWxsYXRpb24gb3IgcmUtcnVuIGluc3RhbGwuZXhlCisKKzplbmQKKzo6IHJlbW92ZSB0aGUgY29weSBvZiB0aGUgdHV0b3IKK0lGIEVYSVNUICVUVVRPUkNPUFklIERFTCAlVFVUT1JDT1BZJQorU0VUIHh4PQpkaWZmIC0tZ2l0IGEvdmltdHV0b3IuY29tIGIvdmltdHV0b3IuY29tCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBlNjg1NGIKLS0tIC9kZXYvbnVsbAorKysgYi92aW10dXRvci5jb20KQEAgLTAsMCArMSwxMDQgQEAKKyQgIQorJCAhPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiskICEKKyQgIQlWaW1UdXRvci5jb20JdmVyc2lvbiAyOS1BdWctMjAwMgorJCAhCiskICEJQXV0aG9yOiBUb20gV3lhbnQgPFRob21hcy5SLld5YW50LUlJSUB1c2EuZHVwb250LmNvbT4KKyQgIQorJCAhCVRoaXMgRENMIGNvbW1hbmQgcHJvY2VkdXJlIGV4ZWN1dGVzIHRoZSB2aW10dXRvciBjb21tYW5kCiskICEJKHN1cHJpc2UsIHN1cHJpc2UhKSB3aGljaCBnaXZlcyB5b3UgYSBicmllZiB0dXRvcmlhbCBvbiB0aGUgVklNCiskICEJZWRpdG9yLiBMYW5ndWFnZXMgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBhcmUgc3VwcG9ydGVkIGluIHRoZQorJCAhCXVzdWFsIHdheSwgYXMgYXJlIGF0IGxlYXN0IHNvbWUgb2YgdGhlIGNvbW1hbmQgcXVhbGlmaWVycywKKyQgIQl0aG91Z2ggeW91J2xsIG5lZWQgdG8gcGxheSBzb21lIGZhaXJseSBzZXJpb3VzIGdhbWVzIHdpdGggRENMCiskICEJdG8gc3BlY2lmeSBvbmVzIHRoYXQgbmVlZCBxdW90aW5nLgorJCAhCiskICEJQ29weXJpZ2h0IChjKSAyMDAyIEUuIEkuIER1UG9udCBkZSBOZW1vdXJzIGFuZCBDb21wYW55LCBJbmMKKyQgIQorJCAhCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyQgIQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBWSU0gbGljZW5zZSBhcyBhdmFpbGFibGUgZnJvbQorJCAhCXRoZSB2aW0gNi4xICI6aGVscCBsaWNlbnNlIiBjb21tYW5kIG9yIChhdCB5b3VyIG9wdGlvbikgdGhlCiskICEJbGljZW5zZSBmcm9tIGFueSBsYXRlciB2ZXJzaW9uIG9mIHZpbS4KKyQgIQorJCAhCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorJCAhCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiskICEJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorJCAhCiskICE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyQgIQorJCAhCiskICEJQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgVklNLCBhbmQgZGllIGlmIGl0IGlzbid0IHRoZXJlLgorJCAhCiskCWlmIGYkc2VhcmNoICgidmltOnZpbS5leGUiKSAuZXFzLiAiIgorJAl0aGVuCiskCSAgICB3cml0ZSBzeXMkZXJyb3IgIkVycm9yIC0gQ2FuJ3QgcnVuIHR1dG9yYWwuIFZJTSBub3QgZm91bmQuIgorJAkgICAgZXhpdAorJAllbmRpZgorJCAhCiskICEKKyQgIQlQaWNrIHVwIHRoZSBhcmd1bWVudCwgaWYgYW55LgorJCAhCiskCWlueCA9IDAKKyQgYXJnX2xvb3A6CiskCWlueCA9IGlueCArIDEKKyQJaWYgZiR0eXBlIChwJ2lueCcpIC5uZXMuICIiCiskCXRoZW4KKyQJICAgIGlmIHAnaW54JyAubmVzLiAiIiAuYW5kLiBmJGxvY2F0ZSAoIi0iLCBwJ2lueCcpIC5uZS4gMAorJAkgICAgdGhlbgorJAkJeHggPSBwJ2lueCcKKyQJCWFzc2lnbi9ub2xvZyAiJyd4eCciIHh4CiskCQlwJ2lueCcgPSAiIgorJAkgICAgZW5kaWYKKyQJICAgIGdvdG8gYXJnX2xvb3AKKyQJZW5kaWYKKyQgIQorJCAhCiskICEJTWFrZSBzdXJlIHdlIGNsZWFuIHVwIG91ciB0b3lzIHdoZW4gd2UncmUgdGhyb3VnaCBwbGF5aW5nLgorJCAhCiskCW9uIGVycm9yIHRoZW4gZ290byBleGl0CiskICEKKyQgIQorJCAhCUNyZWF0ZSB0aGUgVklNIGZvcmVpZ24gY29tbWFuZCBpZiBuZWVkZWQKKyQgIQorJAlpZiBmJHR5cGUgKHZpbSkgLmVxcy4gIiIgdGhlbiB2aW0gOj0gJHZpbTp2aW0KKyQgIQorJCAhCiskICEJQnVpbGQgdGhlIG5hbWUgZm9yIG91ciB0ZW1wIGZpbGUuCiskICEKKyQJdHV0ZmlsID0gInN5cyRsb2dpbjp2aW10dXRvcl8iICsgLQorCQlmJGVkaXQgKGYkZ2V0anBpICgwLCAicGlkIiksICJ0cmltIikgKyAiLiIKKyQJYXNzaWduL25vbG9nICd0dXRmaWwnIFRVVE9SQ09QWQorJCAhCiskICEKKyQgIQlDb3B5IHRoZSBzZWxlY3RlZCBmaWxlIHRvIHRoZSB0ZW1wIGZpbGUKKyQgIQorJAlhc3NpZ24vbm9sb2cvdXNlciBubGEwOiBzeXMkZXJyb3IKKyQJYXNzaWduL25vbG9nL3VzZXIgbmxhMDogc3lzJG91dHB1dAorJAl2aW0gLXUgIk5PTkUiIC1jICJzbyAkVklNUlVOVElNRS90dXRvci90dXRvci52aW0iCiskICEKKyQgIQorJCAhCVJ1biB0aGUgdHV0b3JpYWwKKyQgIQorJAlhc3NpZ24vbm9sb2cvdXNlciBzeXMkY29tbWFuZCBzeXMkaW5wdXQKKyQJdmltIC11ICJOT05FIiAtYyAic2V0IG5vY3AiICdwMScgJ3AyJyAncDMnICdwNCcgJ3A1JyAncDYnICdwNycgJ3A4JyAndHV0ZmlsJworJCAhCiskICEKKyQgIQlEaXRjaCB0aGUgY29weS4KKyQgIQorJCBleGl0OgorJAlpZiBmJHR5cGUgKHR1dGZpbCkgLm5lcy4gIiIgLmFuZC4gZiRzZWFyY2ggKHR1dGZpbCkgLm5lcy4gIiIgdGhlbiAtCiskCSAgICBkZWxldGUgJ3R1dGZpbCc7KgorJAlpZiBmJHR5cGUgKHh4KSAubmVzLiAiIiB0aGVuIGRlYXNzaWduIHh4CiskCWRlYXNzaWduIFRVVE9SQ09QWQorJAlleGl0CiskICEKKyQgIT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJCAhCiskICEJCU1vZGlmaWNhdGlvbiBoaXN0b3J5CiskICEKKyQgIQkyOS1BdWctMjAwMglULiBSLiBXeWFudAorJCAhCQlDaGFuZ2VkIGxpY2Vuc2UgdG8gdmltLgorJCAhCQlGaXggZXJyb3IgImlucHV0IGlzIG5vdCBmcm9tIGEgdGVybWluYWwiCiskICEJCUp1Z2dsZSBkb2N1bWVudGF0aW9uIChjb3B5cmlnaHQgYW5kIGNvbnRhY3QgdG8gZnJvbnQsCiskICEJCQltb2RpZmljYXRpb24gaGlzdG9yeSB0byBlbmQpLgorJCAhCTI1LUp1bC0yMDAyCVQuIFIuIFd5YW50CiskICEJCUluaXRpYWwgdmVyc2lvbgo=